ZGlmZiAtLWdpdCBhLy5jaXJydXMueW1sIGIvLmNpcnJ1cy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmNWZlMwotLS0gL2Rldi9udWxsCisrKyBiLy5jaXJydXMueW1sCkBAIC0wLDAgKzEsMTUgQEAKK2VudjoKKyAgQ0lSUlVTX0NMT05FX0RFUFRIOiAxCisKK2ZyZWVic2RfMTJfdGFzazoKKyAgZnJlZWJzZF9pbnN0YW5jZToKKyAgICBpbWFnZTogZnJlZWJzZC0xMi0xLXJlbGVhc2UtYW1kNjQKKyAgaW5zdGFsbF9zY3JpcHQ6CisgICAgcGtnIGluc3RhbGwgLXkgZ2V0dGV4dCBnbWFrZSBwZXJsNQorICBjcmVhdGVfdXNlcl9zY3JpcHQ6CisgICAgLSBwdyB1c2VyYWRkIGdpdAorICAgIC0gY2hvd24gLVIgZ2l0OmdpdCAuCisgIGJ1aWxkX3NjcmlwdDoKKyAgICAtIHN1IGdpdCAtYyBnbWFrZQorICB0ZXN0X3NjcmlwdDoKKyAgICAtIHN1IGdpdCAtYyAnZ21ha2UgdGVzdCcKZGlmZiAtLWdpdCBhLy5jbGFuZy1mb3JtYXQgYi8uY2xhbmctZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OTJkZGEKLS0tIC9kZXYvbnVsbAorKysgYi8uY2xhbmctZm9ybWF0CkBAIC0wLDAgKzEsMTg0IEBACisjIFRoaXMgZmlsZSBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIGNsYW5nLWZvcm1hdCA1LjAuCisjCisjIE5vdGUgdGhhdCB0aGlzIHN0eWxlIGRlZmluaXRpb24gc2hvdWxkIG9ubHkgYmUgdW5kZXJzdG9vZCBhcyBhIGhpbnQKKyMgZm9yIHdyaXRpbmcgbmV3IGNvZGUuIFRoZSBydWxlcyBhcmUgc3RpbGwgd29yay1pbi1wcm9ncmVzcyBhbmQgZG9lcworIyBub3QgeWV0IGV4YWN0bHkgbWF0Y2ggdGhlIHN0eWxlIHdlIGhhdmUgaW4gdGhlIGV4aXN0aW5nIGNvZGUuCisKKyMgVXNlIHRhYnMgd2hlbmV2ZXIgd2UgbmVlZCB0byBmaWxsIHdoaXRlc3BhY2UgdGhhdCBzcGFucyBhdCBsZWFzdCBmcm9tIG9uZSB0YWIKKyMgc3RvcCB0byB0aGUgbmV4dCBvbmUuCisjCisjIFRoZXNlIHNldHRpbmdzIGFyZSBtaXJyb3JlZCBpbiAuZWRpdG9yY29uZmlnLiAgS2VlcCB0aGVtIGluIHN5bmMuCitVc2VUYWI6IEFsd2F5cworVGFiV2lkdGg6IDgKK0luZGVudFdpZHRoOiA4CitDb250aW51YXRpb25JbmRlbnRXaWR0aDogOAorQ29sdW1uTGltaXQ6IDgwCisKKyMgQyBMYW5ndWFnZSBzcGVjaWZpY3MKK0xhbmd1YWdlOiBDcHAKKworIyBBbGlnbiBwYXJhbWV0ZXJzIG9uIHRoZSBvcGVuIGJyYWNrZXQKKyMgc29tZUxvbmdGdW5jdGlvbihhcmd1bWVudDEsCisjICAgICAgICAgICAgICAgICAgYXJndW1lbnQyKTsKK0FsaWduQWZ0ZXJPcGVuQnJhY2tldDogQWxpZ24KKworIyBEb24ndCBhbGlnbiBjb25zZWN1dGl2ZSBhc3NpZ25tZW50cworIyBpbnQgYWFhYSA9IDEyOworIyBpbnQgYiA9IDE0OworQWxpZ25Db25zZWN1dGl2ZUFzc2lnbm1lbnRzOiBmYWxzZQorCisjIERvbid0IGFsaWduIGNvbnNlY3V0aXZlIGRlY2xhcmF0aW9ucworIyBpbnQgYWFhYSA9IDEyOworIyBkb3VibGUgYiA9IDMuMTQ7CitBbGlnbkNvbnNlY3V0aXZlRGVjbGFyYXRpb25zOiBmYWxzZQorCisjIEFsaWduIGVzY2FwZWQgbmV3bGluZXMgYXMgZmFyIGxlZnQgYXMgcG9zc2libGUKKyMgI2RlZmluZSBBICAgXAorIyAgIGludCBhYWFhOyBcCisjICAgaW50IGI7ICAgIFwKKyMgICBpbnQgY2NjY2NjY2M7CitBbGlnbkVzY2FwZWROZXdsaW5lczogTGVmdAorCisjIEFsaWduIG9wZXJhbmRzIG9mIGJpbmFyeSBhbmQgdGVybmFyeSBleHByZXNzaW9ucworIyBpbnQgYWFhID0gYmJiYmJiYmJiYmIgKworIyAgICAgICAgICAgY2NjY2NjOworQWxpZ25PcGVyYW5kczogdHJ1ZQorCisjIERvbid0IGFsaWduIHRyYWlsaW5nIGNvbW1lbnRzCisjIGludCBhOyAvLyBDb21tZW50IGEKKyMgaW50IGIgPSAyOyAvLyBDb21tZW50IGIKK0FsaWduVHJhaWxpbmdDb21tZW50czogZmFsc2UKKworIyBCeSBkZWZhdWx0IGRvbid0IGFsbG93IHB1dHRpbmcgcGFyYW1ldGVycyBvbnRvIHRoZSBuZXh0IGxpbmUKKyMgbXlGdW5jdGlvbihmb28sIGJhciwgYmF6KTsKK0FsbG93QWxsUGFyYW1ldGVyc09mRGVjbGFyYXRpb25Pbk5leHRMaW5lOiBmYWxzZQorCisjIERvbid0IGFsbG93IHNob3J0IGJyYWNlZCBzdGF0ZW1lbnRzIHRvIGJlIG9uIGEgc2luZ2xlIGxpbmUKKyMgaWYgKGEpICAgICAgICAgICBub3QgICAgICAgaWYgKGEpIHJldHVybjsKKyMgICByZXR1cm47CitBbGxvd1Nob3J0QmxvY2tzT25BU2luZ2xlTGluZTogZmFsc2UKK0FsbG93U2hvcnRDYXNlTGFiZWxzT25BU2luZ2xlTGluZTogZmFsc2UKK0FsbG93U2hvcnRGdW5jdGlvbnNPbkFTaW5nbGVMaW5lOiBmYWxzZQorQWxsb3dTaG9ydElmU3RhdGVtZW50c09uQVNpbmdsZUxpbmU6IGZhbHNlCitBbGxvd1Nob3J0TG9vcHNPbkFTaW5nbGVMaW5lOiBmYWxzZQorCisjIEJ5IGRlZmF1bHQgZG9uJ3QgYWRkIGEgbGluZSBicmVhayBhZnRlciB0aGUgcmV0dXJuIHR5cGUgb2YgdG9wLWxldmVsIGZ1bmN0aW9ucworIyBpbnQgZm9vKCk7CitBbHdheXNCcmVha0FmdGVyUmV0dXJuVHlwZTogTm9uZQorCisjIFBhY2sgYXMgbWFueSBwYXJhbWV0ZXJzIG9yIGFyZ3VtZW50cyBvbnRvIHRoZSBzYW1lIGxpbmUgYXMgcG9zc2libGUKKyMgaW50IG15RnVuY3Rpb24oaW50IGFhYWFhYWFhYWFhYSwgaW50IGJiYmJiYmJiLAorIyAgICAgICAgICAgICAgICBpbnQgY2NjYyk7CitCaW5QYWNrQXJndW1lbnRzOiB0cnVlCitCaW5QYWNrUGFyYW1ldGVyczogdHJ1ZQorCisjIEF0dGFjaCBicmFjZXMgdG8gc3Vycm91bmRpbmcgY29udGV4dCBleGNlcHQgYnJlYWsgYmVmb3JlIGJyYWNlcyBvbiBmdW5jdGlvbgorIyBkZWZpbml0aW9ucy4KKyMgdm9pZCBmb28oKQorIyB7CisjICAgIGlmICh0cnVlKSB7CisjICAgIH0gZWxzZSB7CisjICAgIH0KKyMgfTsKK0JyZWFrQmVmb3JlQnJhY2VzOiBMaW51eAorCisjIEJyZWFrIGFmdGVyIG9wZXJhdG9ycworIyBpbnQgdmFsdXZlID0gYWFhYWFhYWFhYWFhYSArCisjICAgICAgICAgICAgICBiYmJiYmIgLQorIyAgICAgICAgICAgICAgY2NjY2NjY2NjY2M7CitCcmVha0JlZm9yZUJpbmFyeU9wZXJhdG9yczogTm9uZQorQnJlYWtCZWZvcmVUZXJuYXJ5T3BlcmF0b3JzOiBmYWxzZQorCisjIERvbid0IGJyZWFrIHN0cmluZyBsaXRlcmFscworQnJlYWtTdHJpbmdMaXRlcmFsczogZmFsc2UKKworIyBVc2UgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgZm9yIHRoZSBzd2l0Y2ggc3RhdGVtZW50LgorIyBTd2l0Y2ggc3RhdGVtZW50IGJvZHkgaXMgYWx3YXlzIGluZGVudGVkIG9uZSBsZXZlbCBtb3JlIHRoYW4gY2FzZSBsYWJlbHMuCitJbmRlbnRDYXNlTGFiZWxzOiBmYWxzZQorCisjIERvbid0IGluZGVudCBhIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24gaWYgaXQgaXMgd3JhcHBlZCBhZnRlciB0aGUKKyMgdHlwZQorSW5kZW50V3JhcHBlZEZ1bmN0aW9uTmFtZXM6IGZhbHNlCisKKyMgQWxpZ24gcG9pbnRlciB0byB0aGUgcmlnaHQKKyMgaW50ICphOworUG9pbnRlckFsaWdubWVudDogUmlnaHQKKworIyBEb24ndCBpbnNlcnQgYSBzcGFjZSBhZnRlciBhIGNhc3QKKyMgeCA9IChpbnQzMil5OyAgICBub3QgICAgeCA9IChpbnQzMikgeTsKK1NwYWNlQWZ0ZXJDU3R5bGVDYXN0OiBmYWxzZQorCisjIEluc2VydCBzcGFjZXMgYmVmb3JlIGFuZCBhZnRlciBhc3NpZ25tZW50IG9wZXJhdG9ycworIyBpbnQgYSA9IDU7ICAgIG5vdCAgICBpbnQgYT01OworIyBhICs9IDQyOyAgICAgICAgICAgICBhKz00MjsKK1NwYWNlQmVmb3JlQXNzaWdubWVudE9wZXJhdG9yczogdHJ1ZQorCisjIFB1dCBhIHNwYWNlIGJlZm9yZSBvcGVuaW5nIHBhcmVudGhlc2VzIG9ubHkgYWZ0ZXIgY29udHJvbCBzdGF0ZW1lbnQga2V5d29yZHMuCisjIHZvaWQgZigpIHsKKyMgICBpZiAodHJ1ZSkgeworIyAgICAgZigpOworIyAgIH0KKyMgfQorU3BhY2VCZWZvcmVQYXJlbnM6IENvbnRyb2xTdGF0ZW1lbnRzCisKKyMgRG9uJ3QgaW5zZXJ0IHNwYWNlcyBpbnNpZGUgZW1wdHkgJygpJworU3BhY2VJbkVtcHR5UGFyZW50aGVzZXM6IGZhbHNlCisKKyMgVGhlIG51bWJlciBvZiBzcGFjZXMgYmVmb3JlIHRyYWlsaW5nIGxpbmUgY29tbWVudHMgKC8vIC0gY29tbWVudHMpLgorIyBUaGlzIGRvZXMgbm90IGFmZmVjdCB0cmFpbGluZyBibG9jayBjb21tZW50cyAoLyogLSBjb21tZW50cykuCitTcGFjZXNCZWZvcmVUcmFpbGluZ0NvbW1lbnRzOiAxCisKKyMgRG9uJ3QgaW5zZXJ0IHNwYWNlcyBpbiBjYXN0cworIyB4ID0gKGludDMyKSB5OyAgICBub3QgICAgeCA9ICggaW50MzIgKSB5OworU3BhY2VzSW5DU3R5bGVDYXN0UGFyZW50aGVzZXM6IGZhbHNlCisKKyMgRG9uJ3QgaW5zZXJ0IHNwYWNlcyBpbnNpZGUgY29udGFpbmVyIGxpdGVyYWxzCisjIHZhciBhcnIgPSBbMSwgMiwgM107ICAgIG5vdCAgICB2YXIgYXJyID0gWyAxLCAyLCAzIF07CitTcGFjZXNJbkNvbnRhaW5lckxpdGVyYWxzOiBmYWxzZQorCisjIERvbid0IGluc2VydCBzcGFjZXMgYWZ0ZXIgJygnIG9yIGJlZm9yZSAnKScKKyMgZihhcmcpOyAgICBub3QgICAgZiggYXJnICk7CitTcGFjZXNJblBhcmVudGhlc2VzOiBmYWxzZQorCisjIERvbid0IGluc2VydCBzcGFjZXMgYWZ0ZXIgJ1snIG9yIGJlZm9yZSAnXScKKyMgaW50IGFbNV07ICAgIG5vdCAgICBpbnQgYVsgNSBdOworU3BhY2VzSW5TcXVhcmVCcmFja2V0czogZmFsc2UKKworIyBJbnNlcnQgYSBzcGFjZSBhZnRlciAneycgYW5kIGJlZm9yZSAnfScgaW4gc3RydWN0IGluaXRpYWxpemVycworQ3BwMTFCcmFjZWRMaXN0U3R5bGU6IGZhbHNlCisKKyMgQSBsaXN0IG9mIG1hY3JvcyB0aGF0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBmb3JlYWNoIGxvb3BzIGluc3RlYWQgb2YgYXMKKyMgZnVuY3Rpb24gY2FsbHMuIFRha2VuIGZyb206CisjICAgZ2l0IGdyZXAgLWggJ14jZGVmaW5lIFteWzpzcGFjZTpdXSpmb3JfZWFjaFteWzpzcGFjZTpdXSooJyBcCisjICAgfCBzZWQgInMsXiNkZWZpbmUgXChbXls6c3BhY2U6XV0qZm9yX2VhY2hbXls6c3BhY2U6XV0qXCkoLiokLCAgLSAnXDEnLCIgXAorIyAgIHwgc29ydCB8IHVuaXEKK0ZvckVhY2hNYWNyb3M6CisgIC0gJ2Zvcl9lYWNoX2FiYnJldicKKyAgLSAnZm9yX2VhY2hfYnVpbHRpbicKKyAgLSAnZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbScKKyAgLSAnZm9yX2VhY2hfdXQnCisgIC0gJ2Zvcl9lYWNoX3dhbnRlZF9idWlsdGluJworICAtICdsaXN0X2Zvcl9lYWNoJworICAtICdsaXN0X2Zvcl9lYWNoX2RpcicKKyAgLSAnbGlzdF9mb3JfZWFjaF9wcmV2JworICAtICdsaXN0X2Zvcl9lYWNoX3ByZXZfc2FmZScKKyAgLSAnbGlzdF9mb3JfZWFjaF9zYWZlJworCisjIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSBlbXB0eSBsaW5lcyB0byBrZWVwLgorTWF4RW1wdHlMaW5lc1RvS2VlcDogMQorCisjIE5vIGVtcHR5IGxpbmUgYXQgdGhlIHN0YXJ0IG9mIGEgYmxvY2suCitLZWVwRW1wdHlMaW5lc0F0VGhlU3RhcnRPZkJsb2NrczogZmFsc2UKKworIyBQZW5hbHRpZXMKKyMgVGhpcyBkZWNpZGVzIHdoYXQgb3JkZXIgdGhpbmdzIHNob3VsZCBiZSBkb25lIGlmIGEgbGluZSBpcyB0b28gbG9uZworUGVuYWx0eUJyZWFrQXNzaWdubWVudDogMTAKK1BlbmFsdHlCcmVha0JlZm9yZUZpcnN0Q2FsbFBhcmFtZXRlcjogMzAKK1BlbmFsdHlCcmVha0NvbW1lbnQ6IDEwCitQZW5hbHR5QnJlYWtGaXJzdExlc3NMZXNzOiAwCitQZW5hbHR5QnJlYWtTdHJpbmc6IDEwCitQZW5hbHR5RXhjZXNzQ2hhcmFjdGVyOiAxMDAKK1BlbmFsdHlSZXR1cm5UeXBlT25JdHNPd25MaW5lOiA2MAorCisjIERvbid0IHNvcnQgI2luY2x1ZGUncworU29ydEluY2x1ZGVzOiBmYWxzZQpkaWZmIC0tZ2l0IGEvLmVkaXRvcmNvbmZpZyBiLy5lZGl0b3Jjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkODE5NgotLS0gL2Rldi9udWxsCisrKyBiLy5lZGl0b3Jjb25maWcKQEAgLTAsMCArMSwxNiBAQAorWypdCitjaGFyc2V0ID0gdXRmLTgKK2luc2VydF9maW5hbF9uZXdsaW5lID0gdHJ1ZQorCisjIFRoZSBzZXR0aW5ncyBmb3IgQyAoKi5jIGFuZCAqLmgpIGZpbGVzIGFyZSBtaXJyb3JlZCBpbiAuY2xhbmctZm9ybWF0LiAgS2VlcAorIyB0aGVtIGluIHN5bmMuCitbKi57YyxoLHNoLHBlcmwscGwscG0sdHh0fV0KK2luZGVudF9zdHlsZSA9IHRhYgordGFiX3dpZHRoID0gOAorCitbKi5weV0KK2luZGVudF9zdHlsZSA9IHNwYWNlCitpbmRlbnRfc2l6ZSA9IDQKKworW0NPTU1JVF9FRElUTVNHXQorbWF4X2xpbmVfbGVuZ3RoID0gNzIKZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKaW5kZXggNTljZDQxZC4uYjA4YTE0MSAxMDA2NDQKLS0tIGEvLmdpdGF0dHJpYnV0ZXMKKysrIGIvLmdpdGF0dHJpYnV0ZXMKQEAgLTEsNSArMSwxNyBAQAotKiAgICAgICAgICAgd2hpdGVzcGFjZT1pbmRlbnQtd2l0aC1ub24tdGFiLHRyYWlsaW5nLXNwYWNlLHNwYWNlLWJlZm9yZS10YWIsdGFid2lkdGg9NAotKiAgICAgICAgICAgZW5jb2Rpbmc9VVMtQVNDSUkKLWdpdC1ndWkuc2ggIGVuY29kaW5nPVVURi04Ci0vcG8vKi5wbyAgICBlbmNvZGluZz1VVEYtOAorKiB3aGl0ZXNwYWNlPSFpbmRlbnQsdHJhaWwsc3BhY2UKKyouW2NoXSB3aGl0ZXNwYWNlPWluZGVudCx0cmFpbCxzcGFjZSBkaWZmPWNwcAorKi5zaCB3aGl0ZXNwYWNlPWluZGVudCx0cmFpbCxzcGFjZSBlb2w9bGYKKyoucGVybCBlb2w9bGYgZGlmZj1wZXJsCisqLnBsIGVvZj1sZiBkaWZmPXBlcmwKKyoucG0gZW9sPWxmIGRpZmY9cGVybAorKi5weSBlb2w9bGYgZGlmZj1weXRob24KKyouYmF0IGVvbD1jcmxmCisvRG9jdW1lbnRhdGlvbi8qKi8qLnR4dCBlb2w9bGYKKy9jb21tYW5kLWxpc3QudHh0IGVvbD1sZgogL0dJVC1WRVJTSU9OLUdFTiBlb2w9bGYKKy9tZXJnZXRvb2xzLyogZW9sPWxmCisvdC9vaWQtaW5mby8qIGVvbD1sZgorL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dCBjb25mbGljdC1tYXJrZXItc2l6ZT0zMgorL0RvY3VtZW50YXRpb24vZ2l0ay50eHQgY29uZmxpY3QtbWFya2VyLXNpemU9MzIKKy9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dCBjb25mbGljdC1tYXJrZXItc2l6ZT0zMgorL3QvdD8/Pz8tKi5zaCBjb25mbGljdC1tYXJrZXItc2l6ZT0zMgpkaWZmIC0tZ2l0IGEvLmdpdGh1Yi9DT05UUklCVVRJTkcubWQgYi8uZ2l0aHViL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2I0ZTJmCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGh1Yi9DT05UUklCVVRJTkcubWQKQEAgLTAsMCArMSwxOSBAQAorIyMgQ29udHJpYnV0aW5nIHRvIEdpdAorCitUaGFua3MgZm9yIHRha2luZyB0aGUgdGltZSB0byBjb250cmlidXRlIHRvIEdpdCEgUGxlYXNlIGJlIGFkdmlzZWQgdGhhdCB0aGUKK0dpdCBjb21tdW5pdHkgZG9lcyBub3QgdXNlIGdpdGh1Yi5jb20gZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMuIEluc3RlYWQsIHdlIHVzZQorYSBtYWlsaW5nIGxpc3QgKGdpdEB2Z2VyLmtlcm5lbC5vcmcpIGZvciBjb2RlIHN1Ym1pc3Npb25zLCBjb2RlCityZXZpZXdzLCBhbmQgYnVnIHJlcG9ydHMuCisKK05ldmVydGhlbGVzcywgeW91IGNhbiB1c2UgW0dpdEdpdEdhZGdldF0oaHR0cHM6Ly9naXRnaXRnYWRnZXQuZ2l0aHViLmlvLykgdG8KK2NvbnZlbmllbnRseSBzZW5kIHlvdXIgUHVsbCBSZXF1ZXN0cyBjb21taXRzIHRvIG91ciBtYWlsaW5nIGxpc3QuCisKK1BsZWFzZSByZWFkIFsiQSBub3RlIGZyb20gdGhlIG1haW50YWluZXIiXShodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvcGxhaW4vTWFpbnROb3Rlcz9oPXRvZG8pCit0byBsZWFybiBob3cgdGhlIEdpdCBwcm9qZWN0IGlzIG1hbmFnZWQsIGFuZCBob3cgeW91IGNhbiB3b3JrIHdpdGggaXQuCitJbiBhZGRpdGlvbiwgd2UgaGlnaGx5IHJlY29tbWVuZCB5b3UgdG8gcmVhZCBbb3VyIHN1Ym1pc3Npb24gZ3VpZGVsaW5lc10oLi4vRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcykuCisKK0lmIHlvdSBwcmVmZXIgdmlkZW8sIHRoZW4gW3RoaXMgdGFsa10oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1RN2lfcVFXX19xNCZmZWF0dXJlPXlvdXR1LmJlJnQ9Nm00cykKK21pZ2h0IGJlIHVzZWZ1bCB0byB5b3UgYXMgdGhlIHByZXNlbnRlciB3YWxrcyB5b3UgdGhyb3VnaCB0aGUgY29udHJpYnV0aW9uCitwcm9jZXNzIGJ5IGV4YW1wbGUuCisKK1lvdXIgZnJpZW5kbHkgR2l0IGNvbW11bml0eSEKZGlmZiAtLWdpdCBhLy5naXRodWIvUFVMTF9SRVFVRVNUX1RFTVBMQVRFLm1kIGIvLmdpdGh1Yi9QVUxMX1JFUVVFU1RfVEVNUExBVEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyYzdjMwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRodWIvUFVMTF9SRVFVRVNUX1RFTVBMQVRFLm1kCkBAIC0wLDAgKzEsNyBAQAorVGhhbmtzIGZvciB0YWtpbmcgdGhlIHRpbWUgdG8gY29udHJpYnV0ZSB0byBHaXQhIFBsZWFzZSBiZSBhZHZpc2VkIHRoYXQgdGhlCitHaXQgY29tbXVuaXR5IGRvZXMgbm90IHVzZSBnaXRodWIuY29tIGZvciB0aGVpciBjb250cmlidXRpb25zLiBJbnN0ZWFkLCB3ZSB1c2UKK2EgbWFpbGluZyBsaXN0IChnaXRAdmdlci5rZXJuZWwub3JnKSBmb3IgY29kZSBzdWJtaXNzaW9ucywgY29kZSByZXZpZXdzLCBhbmQKK2J1ZyByZXBvcnRzLiBOZXZlcnRoZWxlc3MsIHlvdSBjYW4gdXNlIEdpdEdpdEdhZGdldCAoaHR0cHM6Ly9naXRnaXRnYWRnZXQuZ2l0aHViLmlvLykKK3RvIGNvbnZlbmllbnRseSBzZW5kIHlvdXIgUHVsbCBSZXF1ZXN0cyBjb21taXRzIHRvIG91ciBtYWlsaW5nIGxpc3QuCisKK1BsZWFzZSByZWFkIHRoZSAiZ3VpZGVsaW5lcyBmb3IgY29udHJpYnV0aW5nIiBsaW5rZWQgYWJvdmUhCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA2NDgzYjIxLi5hZWJlN2MwIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTEsOCArMSwyNDEgQEAKLS5EU19TdG9yZQotY29uZmlnLm1hawotR2l0IEd1aS5hcHAqCi1naXQtZ3VpLnRjbAotR0lULVZFUlNJT04tRklMRQotR0lULUdVSS1WQVJTCi1naXQtZ3VpCi1saWIvdGNsSW5kZXgKKy9mdXp6LWNvbW1pdC1ncmFwaAorL2Z1enpfY29ycG9yYQorL2Z1enotcGFjay1oZWFkZXJzCisvZnV6ei1wYWNrLWlkeAorL0dJVC1CVUlMRC1PUFRJT05TCisvR0lULUNGTEFHUworL0dJVC1MREZMQUdTCisvR0lULVBSRUZJWAorL0dJVC1QRVJMLURFRklORVMKKy9HSVQtUEVSTC1IRUFERVIKKy9HSVQtUFlUSE9OLVZBUlMKKy9HSVQtU0NSSVBULURFRklORVMKKy9HSVQtVVNFUi1BR0VOVAorL0dJVC1WRVJTSU9OLUZJTEUKKy9iaW4td3JhcHBlcnMvCisvZ2l0CisvZ2l0LWFkZAorL2dpdC1hZGQtLWludGVyYWN0aXZlCisvZ2l0LWFtCisvZ2l0LWFubm90YXRlCisvZ2l0LWFwcGx5CisvZ2l0LWFyY2hpbXBvcnQKKy9naXQtYXJjaGl2ZQorL2dpdC1iaXNlY3QKKy9naXQtYmlzZWN0LS1oZWxwZXIKKy9naXQtYmxhbWUKKy9naXQtYnJhbmNoCisvZ2l0LWJ1bmRsZQorL2dpdC1jYXQtZmlsZQorL2dpdC1jaGVjay1hdHRyCisvZ2l0LWNoZWNrLWlnbm9yZQorL2dpdC1jaGVjay1tYWlsbWFwCisvZ2l0LWNoZWNrLXJlZi1mb3JtYXQKKy9naXQtY2hlY2tvdXQKKy9naXQtY2hlY2tvdXQtaW5kZXgKKy9naXQtY2hlcnJ5CisvZ2l0LWNoZXJyeS1waWNrCisvZ2l0LWNsZWFuCisvZ2l0LWNsb25lCisvZ2l0LWNvbHVtbgorL2dpdC1jb21taXQKKy9naXQtY29tbWl0LWdyYXBoCisvZ2l0LWNvbW1pdC10cmVlCisvZ2l0LWNvbmZpZworL2dpdC1jb3VudC1vYmplY3RzCisvZ2l0LWNyZWRlbnRpYWwKKy9naXQtY3JlZGVudGlhbC1jYWNoZQorL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24KKy9naXQtY3JlZGVudGlhbC1zdG9yZQorL2dpdC1jdnNleHBvcnRjb21taXQKKy9naXQtY3ZzaW1wb3J0CisvZ2l0LWN2c3NlcnZlcgorL2dpdC1kYWVtb24KKy9naXQtZGlmZgorL2dpdC1kaWZmLWZpbGVzCisvZ2l0LWRpZmYtaW5kZXgKKy9naXQtZGlmZi10cmVlCisvZ2l0LWRpZmZ0b29sCisvZ2l0LWRpZmZ0b29sLS1oZWxwZXIKKy9naXQtZGVzY3JpYmUKKy9naXQtZW52LS1oZWxwZXIKKy9naXQtZmFzdC1leHBvcnQKKy9naXQtZmFzdC1pbXBvcnQKKy9naXQtZmV0Y2gKKy9naXQtZmV0Y2gtcGFjaworL2dpdC1maWx0ZXItYnJhbmNoCisvZ2l0LWZtdC1tZXJnZS1tc2cKKy9naXQtZm9yLWVhY2gtcmVmCisvZ2l0LWZvcm1hdC1wYXRjaAorL2dpdC1mc2NrCisvZ2l0LWZzY2stb2JqZWN0cworL2dpdC1nYworL2dpdC1nZXQtdGFyLWNvbW1pdC1pZAorL2dpdC1ncmVwCisvZ2l0LWhhc2gtb2JqZWN0CisvZ2l0LWhlbHAKKy9naXQtaHR0cC1iYWNrZW5kCisvZ2l0LWh0dHAtZmV0Y2gKKy9naXQtaHR0cC1wdXNoCisvZ2l0LWltYXAtc2VuZAorL2dpdC1pbmRleC1wYWNrCisvZ2l0LWluaXQKKy9naXQtaW5pdC1kYgorL2dpdC1pbnRlcnByZXQtdHJhaWxlcnMKKy9naXQtaW5zdGF3ZWIKKy9naXQtbGVnYWN5LXN0YXNoCisvZ2l0LWxvZworL2dpdC1scy1maWxlcworL2dpdC1scy1yZW1vdGUKKy9naXQtbHMtdHJlZQorL2dpdC1tYWlsaW5mbworL2dpdC1tYWlsc3BsaXQKKy9naXQtbWVyZ2UKKy9naXQtbWVyZ2UtYmFzZQorL2dpdC1tZXJnZS1pbmRleAorL2dpdC1tZXJnZS1maWxlCisvZ2l0LW1lcmdlLXRyZWUKKy9naXQtbWVyZ2Utb2N0b3B1cworL2dpdC1tZXJnZS1vbmUtZmlsZQorL2dpdC1tZXJnZS1vdXJzCisvZ2l0LW1lcmdlLXJlY3Vyc2l2ZQorL2dpdC1tZXJnZS1yZXNvbHZlCisvZ2l0LW1lcmdlLXN1YnRyZWUKKy9naXQtbWVyZ2V0b29sCisvZ2l0LW1lcmdldG9vbC0tbGliCisvZ2l0LW1rdGFnCisvZ2l0LW1rdHJlZQorL2dpdC1tdWx0aS1wYWNrLWluZGV4CisvZ2l0LW12CisvZ2l0LW5hbWUtcmV2CisvZ2l0LW5vdGVzCisvZ2l0LXA0CisvZ2l0LXBhY2stcmVkdW5kYW50CisvZ2l0LXBhY2stb2JqZWN0cworL2dpdC1wYWNrLXJlZnMKKy9naXQtcGFyc2UtcmVtb3RlCisvZ2l0LXBhdGNoLWlkCisvZ2l0LXBydW5lCisvZ2l0LXBydW5lLXBhY2tlZAorL2dpdC1wdWxsCisvZ2l0LXB1c2gKKy9naXQtcXVpbHRpbXBvcnQKKy9naXQtcmFuZ2UtZGlmZgorL2dpdC1yZWFkLXRyZWUKKy9naXQtcmViYXNlCisvZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzCisvZ2l0LXJlY2VpdmUtcGFjaworL2dpdC1yZWZsb2cKKy9naXQtcmVtb3RlCisvZ2l0LXJlbW90ZS1odHRwCisvZ2l0LXJlbW90ZS1odHRwcworL2dpdC1yZW1vdGUtZnRwCisvZ2l0LXJlbW90ZS1mdHBzCisvZ2l0LXJlbW90ZS1mZAorL2dpdC1yZW1vdGUtZXh0CisvZ2l0LXJlbW90ZS10ZXN0cHkKKy9naXQtcmVtb3RlLXRlc3Rzdm4KKy9naXQtcmVwYWNrCisvZ2l0LXJlcGxhY2UKKy9naXQtcmVxdWVzdC1wdWxsCisvZ2l0LXJlcmVyZQorL2dpdC1yZXNldAorL2dpdC1yZXN0b3JlCisvZ2l0LXJldi1saXN0CisvZ2l0LXJldi1wYXJzZQorL2dpdC1yZXZlcnQKKy9naXQtcm0KKy9naXQtc2VuZC1lbWFpbAorL2dpdC1zZW5kLXBhY2sKKy9naXQtc2VydmUKKy9naXQtc2gtaTE4bgorL2dpdC1zaC1pMThuLS1lbnZzdWJzdAorL2dpdC1zaC1zZXR1cAorL2dpdC1zaC1pMThuCisvZ2l0LXNoZWxsCisvZ2l0LXNob3J0bG9nCisvZ2l0LXNob3cKKy9naXQtc2hvdy1icmFuY2gKKy9naXQtc2hvdy1pbmRleAorL2dpdC1zaG93LXJlZgorL2dpdC1zcGFyc2UtY2hlY2tvdXQKKy9naXQtc3RhZ2UKKy9naXQtc3Rhc2gKKy9naXQtc3RhdHVzCisvZ2l0LXN0cmlwc3BhY2UKKy9naXQtc3VibW9kdWxlCisvZ2l0LXN1Ym1vZHVsZS0taGVscGVyCisvZ2l0LXN2bgorL2dpdC1zd2l0Y2gKKy9naXQtc3ltYm9saWMtcmVmCisvZ2l0LXRhZworL2dpdC11bnBhY2stZmlsZQorL2dpdC11bnBhY2stb2JqZWN0cworL2dpdC11cGRhdGUtaW5kZXgKKy9naXQtdXBkYXRlLXJlZgorL2dpdC11cGRhdGUtc2VydmVyLWluZm8KKy9naXQtdXBsb2FkLWFyY2hpdmUKKy9naXQtdXBsb2FkLXBhY2sKKy9naXQtdmFyCisvZ2l0LXZlcmlmeS1jb21taXQKKy9naXQtdmVyaWZ5LXBhY2sKKy9naXQtdmVyaWZ5LXRhZworL2dpdC13ZWItLWJyb3dzZQorL2dpdC13aGF0Y2hhbmdlZAorL2dpdC13b3JrdHJlZQorL2dpdC13cml0ZS10cmVlCisvZ2l0LWNvcmUtKi8/KgorL2dpdHdlYi9HSVRXRUItQlVJTEQtT1BUSU9OUworL2dpdHdlYi9naXR3ZWIuY2dpCisvZ2l0d2ViL3N0YXRpYy9naXR3ZWIuanMKKy9naXR3ZWIvc3RhdGljL2dpdHdlYi5taW4uKgorL2NvbW1hbmQtbGlzdC5oCisqLnRhci5negorKi5kc2MKKyouZGViCisvZ2l0LnNwZWMKKyouZXhlCisqLlthb3NdCisqLnB5W2NvXQorLmRlcGVuZC8KKyouZ2NkYQorKi5nY25vCisqLmdjb3YKKy9jb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMKKy9jb3Zlcl9kYi8KKy9jb3Zlcl9kYl9odG1sLworKisKKy9jb25maWcubWFrCisvYXV0b200dGUuY2FjaGUKKy9jb25maWcuY2FjaGUKKy9jb25maWcubG9nCisvY29uZmlnLnN0YXR1cworL2NvbmZpZy5tYWsuYXV0b2dlbgorL2NvbmZpZy5tYWsuYXBwZW5kCisvY29uZmlndXJlCisvLnZzY29kZS8KKy90YWdzCisvVEFHUworL2NzY29wZSoKKyouaGNjCisqLm9iagorKi5saWIKKyoucmVzCisqLnNsbgorKi5zdW8KKyoubmNiCisqLnZjcHJvagorKi51c2VyCisqLmlkYgorKi5wZGIKKyouaWxrCisqLmlvYmoKKyouaXBkYgorKi5kbGwKKy52cy8KK0RlYnVnLworUmVsZWFzZS8KKy9VcGdyYWRlTG9nKi5odG0KKy9naXQuVkMuVkMub3BlbmRiCisvZ2l0LlZDLmRiCisqLmRTWU0KZGlmZiAtLWdpdCBhLy5naXRtb2R1bGVzIGIvLmdpdG1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlZWJkYQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRtb2R1bGVzCkBAIC0wLDAgKzEsNCBAQAorW3N1Ym1vZHVsZSAic2hhMWNvbGxpc2lvbmRldGVjdGlvbiJdCisJcGF0aCA9IHNoYTFjb2xsaXNpb25kZXRlY3Rpb24KKwl1cmwgPSBodHRwczovL2dpdGh1Yi5jb20vY3ItbWFyY3N0ZXZlbnMvc2hhMWNvbGxpc2lvbmRldGVjdGlvbi5naXQKKwlicmFuY2ggPSBtYXN0ZXIKZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlN2FiYQotLS0gL2Rldi9udWxsCisrKyBiLy5tYWlsbWFwCkBAIC0wLDAgKzEsMjk3IEBACisjCisjIFRoaXMgbGlzdCBpcyB1c2VkIGJ5IGdpdC1zaG9ydGxvZyB0byBmaXggYSBmZXcgYm90Y2hlZCBuYW1lIHRyYW5zbGF0aW9ucworIyBpbiB0aGUgZ2l0IGFyY2hpdmUsIGVpdGhlciBiZWNhdXNlIHRoZSBhdXRob3IncyBmdWxsIG5hbWUgd2FzIG1lc3NlZCB1cAorIyBhbmQvb3Igbm90IGFsd2F5cyB3cml0dGVuIHRoZSBzYW1lIHdheSwgbWFraW5nIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUKKyMgc2FtZSBwZXJzb24gYXBwZWFyaW5nIG5vdCB0byBiZSBzby4KKyMKKworPG5pY29AZmx1eG5pYy5uZXQ+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+CivEsHNtYWlsIETDtm5tZXogPGlzbWFpbEBwYXJkdXMub3JnLnRyPgpkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzU3MzBiCi0tLSAvZGV2L251bGwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTAsMCArMSw1MiBAQAorbGFuZ3VhZ2U6IGMKKworY2FjaGU6CisgIGRpcmVjdG9yaWVzOgorICAgIC0gJEhPTUUvdHJhdmlzLWNhY2hlCisKK29zOgorICAtIGxpbnV4CisgIC0gb3N4CisKK29zeF9pbWFnZTogeGNvZGUxMC4xCisKK2NvbXBpbGVyOgorICAtIGNsYW5nCisgIC0gZ2NjCisKK21hdHJpeDoKKyAgaW5jbHVkZToKKyAgICAtIGVudjogam9ibmFtZT1HSVRfVEVTVF9HRVRURVhUX1BPSVNPTgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjoKKyAgICAgIGFkZG9uczoKKyAgICAgIGJlZm9yZV9pbnN0YWxsOgorICAgIC0gZW52OiBqb2JuYW1lPWxpbnV4LWdjYy00LjgKKyAgICAgIG9zOiBsaW51eAorICAgICAgZGlzdDogdHJ1c3R5CisgICAgICBjb21waWxlcjoKKyAgICAtIGVudjogam9ibmFtZT1MaW51eDMyCisgICAgICBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOgorICAgICAgYWRkb25zOgorICAgICAgc2VydmljZXM6CisgICAgICAgIC0gZG9ja2VyCisgICAgICBiZWZvcmVfaW5zdGFsbDoKKyAgICAgIHNjcmlwdDogY2kvcnVuLWxpbnV4MzItZG9ja2VyLnNoCisgICAgLSBlbnY6IGpvYm5hbWU9U3RhdGljQW5hbHlzaXMKKyAgICAgIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6CisgICAgICBzY3JpcHQ6IGNpL3J1bi1zdGF0aWMtYW5hbHlzaXMuc2gKKyAgICAgIGFmdGVyX2ZhaWx1cmU6CisgICAgLSBlbnY6IGpvYm5hbWU9RG9jdW1lbnRhdGlvbgorICAgICAgb3M6IGxpbnV4CisgICAgICBjb21waWxlcjoKKyAgICAgIHNjcmlwdDogY2kvdGVzdC1kb2N1bWVudGF0aW9uLnNoCisgICAgICBhZnRlcl9mYWlsdXJlOgorCitiZWZvcmVfaW5zdGFsbDogY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2gKK3NjcmlwdDogY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaAorYWZ0ZXJfZmFpbHVyZTogY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaAorCitub3RpZmljYXRpb25zOgorICBlbWFpbDogZmFsc2UKZGlmZiAtLWdpdCBhLy50c2FuLXN1cHByZXNzaW9ucyBiLy50c2FuLXN1cHByZXNzaW9ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmE4NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvLnRzYW4tc3VwcHJlc3Npb25zCkBAIC0wLDAgKzEsMTYgQEAKKyMgU3VwcHJlc3Npb25zIGZvciBUaHJlYWRTYW5pdGl6ZXIgKHRzYW4pLgorIworIyBUaGlzIGZpbGUgaXMgdXNlZCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUU0FOX09QVElPTlMgdG8sIGUuZy4sCisjICJzdXBwcmVzc2lvbnM9JChwd2QpLy50c2FuLXN1cHByZXNzaW9ucyIuIE9ic2VydmUgdGhhdCByZWxhdGl2ZSBwYXRocyBzdWNoIGFzCisjICIudHNhbi1zdXBwcmVzc2lvbnMiIG1pZ2h0IG5vdCB3b3JrLgorCisjIEEgc3RhdGljIHZhcmlhYmxlIGlzIHdyaXR0ZW4gdG8gcmFjaWx5LCBidXQgd2UgYWx3YXlzIHdyaXRlIHRoZSBzYW1lIHZhbHVlLCBzbworIyBpbiBwcmFjdGljZSBpdCAoaG9wZWZ1bGx5ISkgZG9lc24ndCBtYXR0ZXIuCityYWNlOl53YW50X2NvbG9yJAorcmFjZTpedHJhbnNmZXJfZGVidWckCisKKyMgQSBib29sZWFuIHZhbHVlLCB3aGljaCB0ZWxscyB3aGV0aGVyIHRoZSByZXBsYWNlX21hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBvcgorIyBub3QsIGlzIHJlYWQgcmFjaWx5IHdpdGggYW4gdXBkYXRlLiBBcyB0aGlzIHZhcmlhYmxlIGlzIHdyaXR0ZW4gdG8gb25seSBvbmNlLAorIyBhbmQgaXQncyBPSyBpZiB0aGUgdmFsdWUgY2hhbmdlIHJpZ2h0IGFmdGVyIHJlYWRpbmcgaXQsIHRoaXMgc2hvdWxkbid0IGJlIGEKKyMgcHJvYmxlbS4KK3JhY2U6Xmxvb2t1cF9yZXBsYWNlX29iamVjdCQKZGlmZiAtLWdpdCBhL0NPREVfT0ZfQ09ORFVDVC5tZCBiL0NPREVfT0ZfQ09ORFVDVC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQ2NDVkCi0tLSAvZGV2L251bGwKKysrIGIvQ09ERV9PRl9DT05EVUNULm1kCkBAIC0wLDAgKzEsOTMgQEAKKyMgR2l0IENvZGUgb2YgQ29uZHVjdAorCitUaGlzIGNvZGUgb2YgY29uZHVjdCBvdXRsaW5lcyBvdXIgZXhwZWN0YXRpb25zIGZvciBwYXJ0aWNpcGFudHMgd2l0aGluCit0aGUgR2l0IGNvbW11bml0eSwgYXMgd2VsbCBhcyBzdGVwcyBmb3IgcmVwb3J0aW5nIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KK1dlIGFyZSBjb21taXR0ZWQgdG8gcHJvdmlkaW5nIGEgd2VsY29taW5nIGFuZCBpbnNwaXJpbmcgY29tbXVuaXR5IGZvcgorYWxsIGFuZCBleHBlY3Qgb3VyIGNvZGUgb2YgY29uZHVjdCB0byBiZSBob25vcmVkLiBBbnlvbmUgd2hvIHZpb2xhdGVzCit0aGlzIGNvZGUgb2YgY29uZHVjdCBtYXkgYmUgYmFubmVkIGZyb20gdGhlIGNvbW11bml0eS4KKworIyMgT3VyIFBsZWRnZQorCitJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKK2NvbnRyaWJ1dG9ycyBhbmQgbWFpbnRhaW5lcnMgcGxlZGdlIHRvIG1ha2UgcGFydGljaXBhdGlvbiBpbiBvdXIgcHJvamVjdCBhbmQKK291ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsIHJlZ2FyZGxlc3Mgb2YgYWdlLAorYm9keSBzaXplLCBkaXNhYmlsaXR5LCBldGhuaWNpdHksIHNleCBjaGFyYWN0ZXJpc3RpY3MsIGdlbmRlciBpZGVudGl0eSBhbmQKK2V4cHJlc3Npb24sIGxldmVsIG9mIGV4cGVyaWVuY2UsIGVkdWNhdGlvbiwgc29jaW8tZWNvbm9taWMgc3RhdHVzLAorbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCitvcmllbnRhdGlvbi4KKworIyMgT3VyIFN0YW5kYXJkcworCitFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKK2luY2x1ZGU6CisKKyogVXNpbmcgd2VsY29taW5nIGFuZCBpbmNsdXNpdmUgbGFuZ3VhZ2UKKyogQmVpbmcgcmVzcGVjdGZ1bCBvZiBkaWZmZXJpbmcgdmlld3BvaW50cyBhbmQgZXhwZXJpZW5jZXMKKyogR3JhY2VmdWxseSBhY2NlcHRpbmcgY29uc3RydWN0aXZlIGNyaXRpY2lzbQorKiBGb2N1c2luZyBvbiB3aGF0IGlzIGJlc3QgZm9yIHRoZSBjb21tdW5pdHkKKyogU2hvd2luZyBlbXBhdGh5IHRvd2FyZHMgb3RoZXIgY29tbXVuaXR5IG1lbWJlcnMKKworRXhhbXBsZXMgb2YgdW5hY2NlcHRhYmxlIGJlaGF2aW9yIGJ5IHBhcnRpY2lwYW50cyBpbmNsdWRlOgorCisqIFRoZSB1c2Ugb2Ygc2V4dWFsaXplZCBsYW5ndWFnZSBvciBpbWFnZXJ5IGFuZCB1bndlbGNvbWUgc2V4dWFsIGF0dGVudGlvbiBvcgorICBhZHZhbmNlcworKiBUcm9sbGluZywgaW5zdWx0aW5nL2Rlcm9nYXRvcnkgY29tbWVudHMsIGFuZCBwZXJzb25hbCBvciBwb2xpdGljYWwgYXR0YWNrcworKiBQdWJsaWMgb3IgcHJpdmF0ZSBoYXJhc3NtZW50CisqIFB1Ymxpc2hpbmcgb3RoZXJzJyBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IgZWxlY3Ryb25pYworICBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KKyogT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCisgIHByb2Zlc3Npb25hbCBzZXR0aW5nCisKKyMjIE91ciBSZXNwb25zaWJpbGl0aWVzCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjbGFyaWZ5aW5nIHRoZSBzdGFuZGFyZHMgb2YgYWNjZXB0YWJsZQorYmVoYXZpb3IgYW5kIGFyZSBleHBlY3RlZCB0byB0YWtlIGFwcHJvcHJpYXRlIGFuZCBmYWlyIGNvcnJlY3RpdmUgYWN0aW9uIGluCityZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KKworUHJvamVjdCBtYWludGFpbmVycyBoYXZlIHRoZSByaWdodCBhbmQgcmVzcG9uc2liaWxpdHkgdG8gcmVtb3ZlLCBlZGl0LCBvcgorcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlciBjb250cmlidXRpb25zCit0aGF0IGFyZSBub3QgYWxpZ25lZCB0byB0aGlzIENvZGUgb2YgQ29uZHVjdCwgb3IgdG8gYmFuIHRlbXBvcmFyaWx5IG9yCitwZXJtYW5lbnRseSBhbnkgY29udHJpYnV0b3IgZm9yIG90aGVyIGJlaGF2aW9ycyB0aGF0IHRoZXkgZGVlbSBpbmFwcHJvcHJpYXRlLAordGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KKworIyMgU2NvcGUKKworVGhpcyBDb2RlIG9mIENvbmR1Y3QgYXBwbGllcyB3aXRoaW4gYWxsIHByb2plY3Qgc3BhY2VzLCBhbmQgaXQgYWxzbyBhcHBsaWVzCit3aGVuIGFuIGluZGl2aWR1YWwgaXMgcmVwcmVzZW50aW5nIHRoZSBwcm9qZWN0IG9yIGl0cyBjb21tdW5pdHkgaW4gcHVibGljCitzcGFjZXMuIEV4YW1wbGVzIG9mIHJlcHJlc2VudGluZyBhIHByb2plY3Qgb3IgY29tbXVuaXR5IGluY2x1ZGUgdXNpbmcgYW4KK29mZmljaWFsIHByb2plY3QgZS1tYWlsIGFkZHJlc3MsIHBvc3RpbmcgdmlhIGFuIG9mZmljaWFsIHNvY2lhbCBtZWRpYSBhY2NvdW50LAorb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3Igb2ZmbGluZSBldmVudC4KK1JlcHJlc2VudGF0aW9uIG9mIGEgcHJvamVjdCBtYXkgYmUgZnVydGhlciBkZWZpbmVkIGFuZCBjbGFyaWZpZWQgYnkgcHJvamVjdAorbWFpbnRhaW5lcnMuCisKKyMjIEVuZm9yY2VtZW50CisKK0luc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5IGJlCityZXBvcnRlZCBieSBjb250YWN0aW5nIHRoZSBwcm9qZWN0IHRlYW0gYXQgZ2l0QHNmY29uc2VydmFuY3kub3JnLiBBbGwKK2NvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhIHJlc3BvbnNlCit0aGF0IGlzIGRlZW1lZCBuZWNlc3NhcnkgYW5kIGFwcHJvcHJpYXRlIHRvIHRoZSBjaXJjdW1zdGFuY2VzLiBUaGUgcHJvamVjdAordGVhbSBpcyBvYmxpZ2F0ZWQgdG8gbWFpbnRhaW4gY29uZmlkZW50aWFsaXR5IHdpdGggcmVnYXJkIHRvIHRoZSByZXBvcnRlciBvZgorYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudCBwb2xpY2llcyBtYXkgYmUgcG9zdGVkCitzZXBhcmF0ZWx5LgorCitQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbiBnb29kCitmYWl0aCBtYXkgZmFjZSB0ZW1wb3Jhcnkgb3IgcGVybWFuZW50IHJlcGVyY3Vzc2lvbnMgYXMgZGV0ZXJtaW5lZCBieSBvdGhlcgorbWVtYmVycyBvZiB0aGUgcHJvamVjdCdzIGxlYWRlcnNoaXAuCisKK1RoZSBwcm9qZWN0IGxlYWRlcnNoaXAgdGVhbSBjYW4gYmUgY29udGFjdGVkIGJ5IGVtYWlsIGFzIGEgd2hvbGUgYXQKK2dpdEBzZmNvbnNlcnZhbmN5Lm9yZywgb3IgaW5kaXZpZHVhbGx5OgorCisgIC0gw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisgIC0gQ2hyaXN0aWFuIENvdWRlciA8Y2hyaXN0aWFuLmNvdWRlckBnbWFpbC5jb20+CisgIC0gSmVmZiBLaW5nIDxwZWZmQHBlZmYubmV0PgorICAtIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKworIyMgQXR0cmlidXRpb24KKworVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBbQ29udHJpYnV0b3IgQ292ZW5hbnRdW2hvbWVwYWdlXSwKK3ZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCisKK1tob21lcGFnZV06IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZworCitGb3IgYW5zd2VycyB0byBjb21tb24gcXVlc3Rpb25zIGFib3V0IHRoaXMgY29kZSBvZiBjb25kdWN0LCBzZWUKK2h0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZy9mYXEKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmU1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HCkBAIC0wLDAgKzEsMzYwIEBACisKKyBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgR1BMIGFzIGZhciBhcyB0aGlzIHByb2plY3QKKyBpcyBjb25jZXJuZWQgaXMgX3RoaXNfIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSAoaWUgdjIsIG5vdAorIHYyLjIgb3IgdjMueCBvciB3aGF0ZXZlciksIHVubGVzcyBleHBsaWNpdGx5IG90aGVyd2lzZSBzdGF0ZWQuCisKKyBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKKyBhIGdvb2QgaWRlYSwgSSBhbHNvIGFzayB0aGF0IHBlb3BsZSBpbnZvbHZlZCB3aXRoIHRoZSBwcm9qZWN0IG1ha2UKKyB0aGVpciBwcmVmZXJlbmNlcyBrbm93bi4gSW4gcGFydGljdWxhciwgaWYgeW91IHRydXN0IG1lIHRvIG1ha2UgdGhhdAorIGRlY2lzaW9uLCB5b3UgbWlnaHQgbm90ZSBzbyBpbiB5b3VyIGNvcHlyaWdodCBtZXNzYWdlLCBpZSBzb21ldGhpbmcKKyBsaWtlCisKKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisJYXQgdGhlIGRpc2NyZXRpb24gb2YgTGludXMuCisKKyAgbWlnaHQgYXZvaWQgaXNzdWVzLiBCdXQgd2UgY2FuIGFsc28ganVzdCBkZWNpZGUgdG8gc3luY2hyb25pemUgYW5kCisgIGNvbnRhY3QgYWxsIGNvcHlyaWdodCBob2xkZXJzIG9uIHJlY29yZCBpZi93aGVuIHRoZSBvY2Nhc2lvbiBhcmlzZXMuCisKKwkJCUxpbnVzIFRvcnZhbGRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLy5naXRhdHRyaWJ1dGVzIGIvRG9jdW1lbnRhdGlvbi8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIwMzAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqLnR4dCB3aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLy5naXRpZ25vcmUgYi9Eb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyMmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDE3IEBACisqLnhtbAorKi5odG1sCisqLlsxLThdCisqLm1hZGUKKyoudGV4aQorKi5wZGYKK2dpdC5pbmZvCitnaXRtYW4uaW5mbworaG93dG8taW5kZXgudHh0Citkb2MuZGVwCitjbWRzLSoudHh0CittZXJnZXRvb2xzLSoudHh0CittYW5wYWdlLWJhc2UtdXJsLnhzbAorU3VibWl0dGluZ1BhdGNoZXMudHh0Cit0bXAtZG9jLWRpZmYvCitHSVQtQVNDSUlET0NGTEFHUworL0dJVC1FWENMVURFRC1QUk9HUkFNUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGU0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKQEAgLTAsMCArMSw2MzkgQEAKK0xpa2Ugb3RoZXIgcHJvamVjdHMsIHdlIGFsc28gaGF2ZSBzb21lIGd1aWRlbGluZXMgdG8ga2VlcCB0byB0aGUKK2NvZGUuICBGb3IgR2l0IGluIGdlbmVyYWwsIGEgZmV3IHJvdWdoIHJ1bGVzIGFyZToKKworIC0gTW9zdCBpbXBvcnRhbnRseSwgd2UgbmV2ZXIgc2F5ICJJdCdzIGluIFBPU0lYOyB3ZSdsbCBoYXBwaWx5CisgICBpZ25vcmUgeW91ciBuZWVkcyBzaG91bGQgeW91ciBzeXN0ZW0gbm90IGNvbmZvcm0gdG8gaXQuIgorICAgV2UgbGl2ZSBpbiB0aGUgcmVhbCB3b3JsZC4KKworIC0gSG93ZXZlciwgd2Ugb2Z0ZW4gc2F5ICJMZXQncyBzdGF5IGF3YXkgZnJvbSB0aGF0IGNvbnN0cnVjdCwKKyAgIGl0J3Mgbm90IGV2ZW4gaW4gUE9TSVgiLgorCisgLSBJbiBzcGl0ZSBvZiB0aGUgYWJvdmUgdHdvIHJ1bGVzLCB3ZSBzb21ldGltZXMgc2F5ICJBbHRob3VnaAorICAgdGhpcyBpcyBub3QgaW4gUE9TSVgsIGl0IChpcyBzbyBjb252ZW5pZW50IHwgbWFrZXMgdGhlIGNvZGUKKyAgIG11Y2ggbW9yZSByZWFkYWJsZSB8IGhhcyBvdGhlciBnb29kIGNoYXJhY3RlcmlzdGljcykgYW5kCisgICBwcmFjdGljYWxseSBhbGwgdGhlIHBsYXRmb3JtcyB3ZSBjYXJlIGFib3V0IHN1cHBvcnQgaXQsIHNvCisgICBsZXQncyB1c2UgaXQiLgorCisgICBBZ2Fpbiwgd2UgbGl2ZSBpbiB0aGUgcmVhbCB3b3JsZCwgYW5kIGl0IGlzIHNvbWV0aW1lcyBhCisgICBqdWRnZW1lbnQgY2FsbCwgdGhlIGRlY2lzaW9uIGJhc2VkIG1vcmUgb24gcmVhbCB3b3JsZAorICAgY29uc3RyYWludHMgcGVvcGxlIGZhY2UgdGhhbiB3aGF0IHRoZSBwYXBlciBzdGFuZGFyZCBzYXlzLgorCisgLSBGaXhpbmcgc3R5bGUgdmlvbGF0aW9ucyB3aGlsZSB3b3JraW5nIG9uIGEgcmVhbCBjaGFuZ2UgYXMgYQorICAgcHJlcGFyYXRvcnkgY2xlYW4tdXAgc3RlcCBpcyBnb29kLCBidXQgb3RoZXJ3aXNlIGF2b2lkIHVzZWxlc3MgY29kZQorICAgY2h1cm4gZm9yIHRoZSBzYWtlIG9mIGNvbmZvcm1pbmcgdG8gdGhlIHN0eWxlLgorCisgICAiT25jZSBpdCBfaXNfIGluIHRoZSB0cmVlLCBpdCdzIG5vdCByZWFsbHkgd29ydGggdGhlIHBhdGNoIG5vaXNlIHRvCisgICBnbyBhbmQgZml4IGl0IHVwLiIKKyAgIENmLiBodHRwOi8vbGttbC5pdS5lZHUvaHlwZXJtYWlsL2xpbnV4L2tlcm5lbC8xMDAxLjMvMDEwNjkuaHRtbAorCitNYWtlIHlvdXIgY29kZSByZWFkYWJsZSBhbmQgc2Vuc2libGUsIGFuZCBkb24ndCB0cnkgdG8gYmUgY2xldmVyLgorCitBcyBmb3IgbW9yZSBjb25jcmV0ZSBndWlkZWxpbmVzLCBqdXN0IGltaXRhdGUgdGhlIGV4aXN0aW5nIGNvZGUKKyh0aGlzIGlzIGEgZ29vZCBndWlkZWxpbmUsIG5vIG1hdHRlciB3aGljaCBwcm9qZWN0IHlvdSBhcmUKK2NvbnRyaWJ1dGluZyB0bykuIEl0IGlzIGFsd2F5cyBwcmVmZXJhYmxlIHRvIG1hdGNoIHRoZSBfbG9jYWxfCitjb252ZW50aW9uLiBOZXcgY29kZSBhZGRlZCB0byBHaXQgc3VpdGUgaXMgZXhwZWN0ZWQgdG8gbWF0Y2gKK3RoZSBvdmVyYWxsIHN0eWxlIG9mIGV4aXN0aW5nIGNvZGUuIE1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcKK2NvZGUgaXMgZXhwZWN0ZWQgdG8gbWF0Y2ggdGhlIHN0eWxlIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFscmVhZHkKK3VzZXMgKGV2ZW4gaWYgaXQgZG9lc24ndCBtYXRjaCB0aGUgb3ZlcmFsbCBzdHlsZSBvZiBleGlzdGluZyBjb2RlKS4KKworQnV0IGlmIHlvdSBtdXN0IGhhdmUgYSBsaXN0IG9mIHJ1bGVzLCBoZXJlIHRoZXkgYXJlLgorCitGb3Igc2hlbGwgc2NyaXB0cyBzcGVjaWZpY2FsbHkgKG5vdCBleGhhdXN0aXZlKToKKworIC0gV2UgdXNlIHRhYnMgZm9yIGluZGVudGF0aW9uLgorCisgLSBDYXNlIGFybXMgYXJlIGluZGVudGVkIGF0IHRoZSBzYW1lIGRlcHRoIGFzIGNhc2UgYW5kIGVzYWMgbGluZXMsCisgICBsaWtlIHRoaXM6CisKKwljYXNlICIkdmFyaWFibGUiIGluCisJcGF0dGVybjEpCisJCWRvIHRoaXMKKwkJOzsKKwlwYXR0ZXJuMikKKwkJZG8gdGhhdAorCQk7OworCWVzYWMKKworIC0gUmVkaXJlY3Rpb24gb3BlcmF0b3JzIHNob3VsZCBiZSB3cml0dGVuIHdpdGggc3BhY2UgYmVmb3JlLCBidXQgbm8KKyAgIHNwYWNlIGFmdGVyIHRoZW0uICBJbiBvdGhlciB3b3Jkcywgd3JpdGUgJ2VjaG8gdGVzdCA+IiRmaWxlIicKKyAgIGluc3RlYWQgb2YgJ2VjaG8gdGVzdD4gJGZpbGUnIG9yICdlY2hvIHRlc3QgPiAkZmlsZScuICBOb3RlIHRoYXQKKyAgIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCByZXF1aXJlZCBieSBQT1NJWCB0byBkb3VibGUtcXVvdGUgdGhlCisgICByZWRpcmVjdGlvbiB0YXJnZXQgaW4gYSB2YXJpYWJsZSAoYXMgc2hvd24gYWJvdmUpLCBvdXIgY29kZSBkb2VzIHNvCisgICBiZWNhdXNlIHNvbWUgdmVyc2lvbnMgb2YgYmFzaCBpc3N1ZSBhIHdhcm5pbmcgd2l0aG91dCB0aGUgcXVvdGVzLgorCisJKGluY29ycmVjdCkKKwljYXQgaGVsbG8gPiB3b3JsZCA8IHVuaXZlcnNlCisJZWNobyBoZWxsbyA+JHdvcmxkCisKKwkoY29ycmVjdCkKKwljYXQgaGVsbG8gPndvcmxkIDx1bml2ZXJzZQorCWVjaG8gaGVsbG8gPiIkd29ybGQiCisKKyAtIFdlIHByZWZlciAkKCAuLi4gKSBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb247IHVubGlrZSBgYCwgaXQKKyAgIHByb3Blcmx5IG5lc3RzLiAgSXQgc2hvdWxkIGhhdmUgYmVlbiB0aGUgd2F5IEJvdXJuZSBzcGVsbGVkCisgICBpdCBmcm9tIGRheSBvbmUsIGJ1dCB1bmZvcnR1bmF0ZWx5IGlzbid0LgorCisgLSBJZiB5b3Ugd2FudCB0byBmaW5kIG91dCBpZiBhIGNvbW1hbmQgaXMgYXZhaWxhYmxlIG9uIHRoZSB1c2VyJ3MKKyAgICRQQVRILCB5b3Ugc2hvdWxkIHVzZSAndHlwZSA8Y29tbWFuZD4nLCBpbnN0ZWFkIG9mICd3aGljaCA8Y29tbWFuZD4nLgorICAgVGhlIG91dHB1dCBvZiAnd2hpY2gnIGlzIG5vdCBtYWNoaW5lIHBhcnNhYmxlIGFuZCBpdHMgZXhpdCBjb2RlCisgICBpcyBub3QgcmVsaWFibGUgYWNyb3NzIHBsYXRmb3Jtcy4KKworIC0gV2UgdXNlIFBPU0lYIGNvbXBsaWFudCBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9ucyBhbmQgYXZvaWQgYmFzaGlzbXM7CisgICBuYW1lbHk6CisKKyAgIC0gV2UgdXNlICR7cGFyYW1ldGVyLXdvcmR9IGFuZCBpdHMgWy09PytdIHNpYmxpbmdzLCBhbmQgdGhlaXIKKyAgICAgY29sb24nZWQgInVuc2V0IG9yIG51bGwiIGZvcm0uCisKKyAgIC0gV2UgdXNlICR7cGFyYW1ldGVyI3dvcmR9IGFuZCBpdHMgWyMlXSBzaWJsaW5ncywgYW5kIHRoZWlyCisgICAgIGRvdWJsZWQgImxvbmdlc3QgbWF0Y2hpbmciIGZvcm0uCisKKyAgIC0gTm8gIlN1YnN0cmluZyBFeHBhbnNpb24iICR7cGFyYW1ldGVyOm9mZnNldDpsZW5ndGh9LgorCisgICAtIE5vIHNoZWxsIGFycmF5cy4KKworICAgLSBObyBzdHJsZW4gJHsjcGFyYW1ldGVyfS4KKworICAgLSBObyBwYXR0ZXJuIHJlcGxhY2VtZW50ICR7cGFyYW1ldGVyL3BhdHRlcm4vc3RyaW5nfS4KKworIC0gV2UgdXNlIEFyaXRobWV0aWMgRXhwYW5zaW9uICQoKCAuLi4gKSkuCisKKyAtIEluc2lkZSBBcml0aG1ldGljIEV4cGFuc2lvbiwgc3BlbGwgc2hlbGwgdmFyaWFibGVzIHdpdGggJCBpbiBmcm9udAorICAgb2YgdGhlbSwgYXMgc29tZSBzaGVsbHMgZG8gbm90IGdyb2sgJCgoeCkpIHdoaWxlIGFjY2VwdGluZyAkKCgkeCkpCisgICBqdXN0IGZpbmUgKGUuZy4gZGFzaCBvbGRlciB0aGFuIDAuNS40KS4KKworIC0gV2UgZG8gbm90IHVzZSBQcm9jZXNzIFN1YnN0aXR1dGlvbiA8KGxpc3QpIG9yID4obGlzdCkuCisKKyAtIERvIG5vdCB3cml0ZSBjb250cm9sIHN0cnVjdHVyZXMgb24gYSBzaW5nbGUgbGluZSB3aXRoIHNlbWljb2xvbi4KKyAgICJ0aGVuIiBzaG91bGQgYmUgb24gdGhlIG5leHQgbGluZSBmb3IgaWYgc3RhdGVtZW50cywgYW5kICJkbyIKKyAgIHNob3VsZCBiZSBvbiB0aGUgbmV4dCBsaW5lIGZvciAid2hpbGUiIGFuZCAiZm9yIi4KKworCShpbmNvcnJlY3QpCisJaWYgdGVzdCAtZiBoZWxsbzsgdGhlbgorCQlkbyB0aGlzCisJZmkKKworCShjb3JyZWN0KQorCWlmIHRlc3QgLWYgaGVsbG8KKwl0aGVuCisJCWRvIHRoaXMKKwlmaQorCisgLSBJZiBhIGNvbW1hbmQgc2VxdWVuY2Ugam9pbmVkIHdpdGggJiYgb3IgfHwgb3IgfCBzcGFucyBtdWx0aXBsZQorICAgbGluZXMsIHB1dCBlYWNoIGNvbW1hbmQgb24gYSBzZXBhcmF0ZSBsaW5lIGFuZCBwdXQgJiYgYW5kIHx8IGFuZCB8CisgICBvcGVyYXRvcnMgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUsIHJhdGhlciB0aGFuIHRoZSBzdGFydC4gVGhpcworICAgbWVhbnMgeW91IGRvbid0IG5lZWQgdG8gdXNlIFwgdG8gam9pbiBsaW5lcywgc2luY2UgdGhlIGFib3ZlCisgICBvcGVyYXRvcnMgaW1wbHkgdGhlIHNlcXVlbmNlIGlzbid0IGZpbmlzaGVkLgorCisJKGluY29ycmVjdCkKKwlncmVwIGJsb2IgdmVyaWZ5X3BhY2tfcmVzdWx0IFwKKwl8IGF3ayAtZiBwcmludF8xLmF3ayBcCisJfCBzb3J0ID5hY3R1YWwgJiYKKwkuLi4KKworCShjb3JyZWN0KQorCWdyZXAgYmxvYiB2ZXJpZnlfcGFja19yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+YWN0dWFsICYmCisJLi4uCisKKyAtIFdlIHByZWZlciAidGVzdCIgb3ZlciAiWyAuLi4gXSIuCisKKyAtIFdlIGRvIG5vdCB3cml0ZSB0aGUgbm9pc2V3b3JkICJmdW5jdGlvbiIgaW4gZnJvbnQgb2Ygc2hlbGwKKyAgIGZ1bmN0aW9ucy4KKworIC0gV2UgcHJlZmVyIGEgc3BhY2UgYmV0d2VlbiB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIHBhcmVudGhlc2VzLAorICAgYW5kIG5vIHNwYWNlIGluc2lkZSB0aGUgcGFyZW50aGVzZXMuIFRoZSBvcGVuaW5nICJ7IiBzaG91bGQgYWxzbworICAgYmUgb24gdGhlIHNhbWUgbGluZS4KKworCShpbmNvcnJlY3QpCisJbXlfZnVuY3Rpb24oKXsKKwkJLi4uCisKKwkoY29ycmVjdCkKKwlteV9mdW5jdGlvbiAoKSB7CisJCS4uLgorCisgLSBBcyB0byB1c2Ugb2YgZ3JlcCwgc3RpY2sgdG8gYSBzdWJzZXQgb2YgQlJFIChuYW1lbHksIG5vIFx7bSxuXH0sCisgICBbOjpdLCBbPT1dLCBvciBbLi5dKSBmb3IgcG9ydGFiaWxpdHkuCisKKyAgIC0gV2UgZG8gbm90IHVzZSBce20sblx9OworCisgICAtIFdlIGRvIG5vdCB1c2UgLUU7CisKKyAgIC0gV2UgZG8gbm90IHVzZSA/IG9yICsgKHdoaWNoIGFyZSBcezAsMVx9IGFuZCBcezEsXH0KKyAgICAgcmVzcGVjdGl2ZWx5IGluIEJSRSkgYnV0IHRoYXQgZ29lcyB3aXRob3V0IHNheWluZyBhcyB0aGVzZQorICAgICBhcmUgRVJFIGVsZW1lbnRzIG5vdCBCUkUgKG5vdGUgdGhhdCBcPyBhbmQgXCsgYXJlIG5vdCBldmVuIHBhcnQKKyAgICAgb2YgQlJFIC0tIG1ha2luZyB0aGVtIGFjY2Vzc2libGUgZnJvbSBCUkUgaXMgYSBHTlUgZXh0ZW5zaW9uKS4KKworIC0gVXNlIEdpdCdzIGdldHRleHQgd3JhcHBlcnMgaW4gZ2l0LXNoLWkxOG4gdG8gbWFrZSB0aGUgdXNlcgorICAgaW50ZXJmYWNlIHRyYW5zbGF0YWJsZS4gU2VlICJNYXJraW5nIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uIiBpbgorICAgcG8vUkVBRE1FLgorCisgLSBXZSBkbyBub3Qgd3JpdGUgb3VyICJ0ZXN0IiBjb21tYW5kIHdpdGggIi1hIiBhbmQgIi1vIiBhbmQgdXNlICImJiIKKyAgIG9yICJ8fCIgdG8gY29uY2F0ZW5hdGUgbXVsdGlwbGUgInRlc3QiIGNvbW1hbmRzIGluc3RlYWQsIGJlY2F1c2UKKyAgIHRoZSB1c2Ugb2YgIi1hLy1vIiBpcyBvZnRlbiBlcnJvci1wcm9uZS4gIEUuZy4KKworICAgICB0ZXN0IC1uICIkeCIgLWEgIiRhIiA9ICIkYiIKKworICAgaXMgYnVnZ3kgYW5kIGJyZWFrcyB3aGVuICR4IGlzICI9IiwgYnV0CisKKyAgICAgdGVzdCAtbiAiJHgiICYmIHRlc3QgIiRhIiA9ICIkYiIKKworICAgZG9lcyBub3QgaGF2ZSBzdWNoIGEgcHJvYmxlbS4KKworCitGb3IgQyBwcm9ncmFtczoKKworIC0gV2UgdXNlIHRhYnMgdG8gaW5kZW50LCBhbmQgaW50ZXJwcmV0IHRhYnMgYXMgdGFraW5nIHVwIHRvCisgICA4IHNwYWNlcy4KKworIC0gV2UgdHJ5IHRvIGtlZXAgdG8gYXQgbW9zdCA4MCBjaGFyYWN0ZXJzIHBlciBsaW5lLgorCisgLSBBcyBhIEdpdCBkZXZlbG9wZXIgd2UgYXNzdW1lIHlvdSBoYXZlIGEgcmVhc29uYWJseSBtb2Rlcm4gY29tcGlsZXIKKyAgIGFuZCB3ZSByZWNvbW1lbmQgeW91IHRvIGVuYWJsZSB0aGUgREVWRUxPUEVSIG1ha2VmaWxlIGtub2IgdG8KKyAgIGVuc3VyZSB5b3VyIHBhdGNoIGlzIGNsZWFyIG9mIGFsbCBjb21waWxlciB3YXJuaW5ncyB3ZSBjYXJlIGFib3V0LAorICAgYnkgZS5nLiAiZWNobyBERVZFTE9QRVI9MSA+PmNvbmZpZy5tYWsiLgorCisgLSBXZSB0cnkgdG8gc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgQyBjb21waWxlcnMgdG8gY29tcGlsZSBHaXQgd2l0aCwKKyAgIGluY2x1ZGluZyBvbGQgb25lcy4gIFlvdSBzaG91bGQgbm90IHVzZSBmZWF0dXJlcyBmcm9tIG5ld2VyIEMKKyAgIHN0YW5kYXJkLCBldmVuIGlmIHlvdXIgY29tcGlsZXIgZ3Jva3MgdGhlbS4KKworICAgVGhlcmUgYXJlIGEgZmV3IGV4Y2VwdGlvbnMgdG8gdGhpcyBndWlkZWxpbmU6CisKKyAgIC4gc2luY2UgZWFybHkgMjAxMiB3aXRoIGUxMzI3MDIzZWEsIHdlIGhhdmUgYmVlbiB1c2luZyBhbiBlbnVtCisgICAgIGRlZmluaXRpb24gd2hvc2UgbGFzdCBlbGVtZW50IGlzIGZvbGxvd2VkIGJ5IGEgY29tbWEuICBUaGlzLCBsaWtlCisgICAgIGFuIGFycmF5IGluaXRpYWxpemVyIHRoYXQgZW5kcyB3aXRoIGEgdHJhaWxpbmcgY29tbWEsIGNhbiBiZSB1c2VkCisgICAgIHRvIHJlZHVjZSB0aGUgcGF0Y2ggbm9pc2Ugd2hlbiBhZGRpbmcgYSBuZXcgaWRlbnRpZmllciBhdCB0aGUgZW5kLgorCisgICAuIHNpbmNlIG1pZCAyMDE3IHdpdGggY2JjMGY4MWQsIHdlIGhhdmUgYmVlbiB1c2luZyBkZXNpZ25hdGVkCisgICAgIGluaXRpYWxpemVycyBmb3Igc3RydWN0IChlLmcuICJzdHJ1Y3QgdCB2ID0geyAudmFsID0gJ2EnIH07IikuCisKKyAgIC4gc2luY2UgbWlkIDIwMTcgd2l0aCA1MTJmNDFjZiwgd2UgaGF2ZSBiZWVuIHVzaW5nIGRlc2lnbmF0ZWQKKyAgICAgaW5pdGlhbGl6ZXJzIGZvciBhcnJheSAoZS5nLiAiaW50IGFycmF5WzEwXSA9IHsgWzVdID0gMiB9IikuCisKKyAgIFRoZXNlIHVzZWQgdG8gYmUgZm9yYmlkZGVuLCBidXQgd2UgaGF2ZSBub3QgaGVhcmQgYW55IGJyZWFrYWdlCisgICByZXBvcnQsIGFuZCB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIHNhZmUuCisKKyAtIFZhcmlhYmxlcyBoYXZlIHRvIGJlIGRlY2xhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJsb2NrLCBiZWZvcmUKKyAgIHRoZSBmaXJzdCBzdGF0ZW1lbnQgKGkuZS4gLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpLgorCisgLSBEZWNsYXJpbmcgYSB2YXJpYWJsZSBpbiB0aGUgZm9yIGxvb3AgImZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykiCisgICBpcyBzdGlsbCBub3QgYWxsb3dlZCBpbiB0aGlzIGNvZGViYXNlLgorCisgLSBOVUxMIHBvaW50ZXJzIHNoYWxsIGJlIHdyaXR0ZW4gYXMgTlVMTCwgbm90IGFzIDAuCisKKyAtIFdoZW4gZGVjbGFyaW5nIHBvaW50ZXJzLCB0aGUgc3RhciBzaWRlcyB3aXRoIHRoZSB2YXJpYWJsZQorICAgbmFtZSwgaS5lLiAiY2hhciAqc3RyaW5nIiwgbm90ICJjaGFyKiBzdHJpbmciIG9yCisgICAiY2hhciAqIHN0cmluZyIuICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byB1bmRlcnN0YW5kIGNvZGUKKyAgIGxpa2UgImNoYXIgKnN0cmluZywgYzsiLgorCisgLSBVc2Ugd2hpdGVzcGFjZSBhcm91bmQgb3BlcmF0b3JzIGFuZCBrZXl3b3JkcywgYnV0IG5vdCBpbnNpZGUKKyAgIHBhcmVudGhlc2VzIGFuZCBub3QgYXJvdW5kIGZ1bmN0aW9ucy4gU286CisKKyAgICAgICAgd2hpbGUgKGNvbmRpdGlvbikKKwkJZnVuYyhiYXIgKyAxKTsKKworICAgYW5kIG5vdDoKKworICAgICAgICB3aGlsZSggY29uZGl0aW9uICkKKwkJZnVuYyAoYmFyKzEpOworCisgLSBXZSBhdm9pZCB1c2luZyBicmFjZXMgdW5uZWNlc3NhcmlseS4gIEkuZS4KKworCWlmIChibGEpIHsKKwkJeCA9IDE7CisJfQorCisgICBpcyBmcm93bmVkIHVwb24uIEJ1dCB0aGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9uczoKKworCS0gV2hlbiB0aGUgc3RhdGVtZW50IGV4dGVuZHMgb3ZlciBhIGZldyBsaW5lcyAoZS5nLiwgYSB3aGlsZSBsb29wCisJICB3aXRoIGFuIGVtYmVkZGVkIGNvbmRpdGlvbmFsLCBvciBhIGNvbW1lbnQpLiBFLmcuOgorCisJCXdoaWxlIChmb28pIHsKKwkJCWlmICh4KQorCQkJCW9uZSgpOworCQkJZWxzZQorCQkJCXR3bygpOworCQl9CisKKwkJaWYgKGZvbykgeworCQkJLyoKKwkJCSAqIFRoaXMgb25lIHJlcXVpcmVzIHNvbWUgZXhwbGFuYXRpb24sCisJCQkgKiBzbyB3ZSdyZSBiZXR0ZXIgb2ZmIHdpdGggYnJhY2VzIHRvIG1ha2UKKwkJCSAqIGl0IG9idmlvdXMgdGhhdCB0aGUgaW5kZW50YXRpb24gaXMgY29ycmVjdC4KKwkJCSAqLworCQkJZG9pdCgpOworCQl9CisKKwktIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGFybXMgdG8gYSBjb25kaXRpb25hbCBhbmQgc29tZSBvZiB0aGVtCisJICByZXF1aXJlIGJyYWNlcywgZW5jbG9zZSBldmVuIGEgc2luZ2xlIGxpbmUgYmxvY2sgaW4gYnJhY2VzIGZvcgorCSAgY29uc2lzdGVuY3kuIEUuZy46CisKKwkJaWYgKGZvbykgeworCQkJZG9pdCgpOworCQl9IGVsc2UgeworCQkJb25lKCk7CisJCQl0d28oKTsKKwkJCXRocmVlKCk7CisJCX0KKworIC0gV2UgdHJ5IHRvIGF2b2lkIGFzc2lnbm1lbnRzIGluIHRoZSBjb25kaXRpb24gb2YgYW4gImlmIiBzdGF0ZW1lbnQuCisKKyAtIFRyeSB0byBtYWtlIHlvdXIgY29kZSB1bmRlcnN0YW5kYWJsZS4gIFlvdSBtYXkgcHV0IGNvbW1lbnRzCisgICBpbiwgYnV0IGNvbW1lbnRzIGludmFyaWFibHkgdGVuZCB0byBzdGFsZSBvdXQgd2hlbiB0aGUgY29kZQorICAgdGhleSB3ZXJlIGRlc2NyaWJpbmcgY2hhbmdlcy4gIE9mdGVuIHNwbGl0dGluZyBhIGZ1bmN0aW9uCisgICBpbnRvIHR3byBtYWtlcyB0aGUgaW50ZW50aW9uIG9mIHRoZSBjb2RlIG11Y2ggY2xlYXJlci4KKworIC0gTXVsdGktbGluZSBjb21tZW50cyBpbmNsdWRlIHRoZWlyIGRlbGltaXRlcnMgb24gc2VwYXJhdGUgbGluZXMgZnJvbQorICAgdGhlIHRleHQuICBFLmcuCisKKwkvKgorCSAqIEEgdmVyeSBsb25nCisJICogbXVsdGktbGluZSBjb21tZW50LgorCSAqLworCisgICBOb3RlIGhvd2V2ZXIgdGhhdCBhIGNvbW1lbnQgdGhhdCBleHBsYWlucyBhIHRyYW5zbGF0YWJsZSBzdHJpbmcgdG8KKyAgIHRyYW5zbGF0b3JzIHVzZXMgYSBjb252ZW50aW9uIG9mIHN0YXJ0aW5nIHdpdGggYSBtYWdpYyB0b2tlbgorICAgIlRSQU5TTEFUT1JTOiAiLCBlLmcuCisKKwkvKgorCSAqIFRSQU5TTEFUT1JTOiBoZXJlIGlzIGEgY29tbWVudCB0aGF0IGV4cGxhaW5zIHRoZSBzdHJpbmcgdG8KKwkgKiBiZSB0cmFuc2xhdGVkLCB0aGF0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQuCisJICovCisJXygiSGVyZSBpcyBhIHRyYW5zbGF0YWJsZSBzdHJpbmcgZXhwbGFpbmVkIGJ5IHRoZSBhYm92ZS4iKTsKKworIC0gRG91YmxlIG5lZ2F0aW9uIGlzIG9mdGVuIGhhcmRlciB0byB1bmRlcnN0YW5kIHRoYW4gbm8gbmVnYXRpb24KKyAgIGF0IGFsbC4KKworIC0gVGhlcmUgYXJlIHR3byBzY2hvb2xzIG9mIHRob3VnaHQgd2hlbiBpdCBjb21lcyB0byBjb21wYXJpc29uLAorICAgZXNwZWNpYWxseSBpbnNpZGUgYSBsb29wLiBTb21lIHBlb3BsZSBwcmVmZXIgdG8gaGF2ZSB0aGUgbGVzcyBzdGFibGUKKyAgIHZhbHVlIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBhbmQgdGhlIG1vcmUgc3RhYmxlIHZhbHVlIG9uIHRoZSByaWdodCBoYW5kCisgICBzaWRlLCBlLmcuIGlmIHlvdSBoYXZlIGEgbG9vcCB0aGF0IGNvdW50cyB2YXJpYWJsZSBpIGRvd24gdG8gdGhlCisgICBsb3dlciBib3VuZCwKKworCXdoaWxlIChpID4gbG93ZXJfYm91bmQpIHsKKwkJZG8gc29tZXRoaW5nOworCQlpLS07CisJfQorCisgICBPdGhlciBwZW9wbGUgcHJlZmVyIHRvIGhhdmUgdGhlIHRleHR1YWwgb3JkZXIgb2YgdmFsdWVzIG1hdGNoIHRoZQorICAgYWN0dWFsIG9yZGVyIG9mIHZhbHVlcyBpbiB0aGVpciBjb21wYXJpc29uLCBzbyB0aGF0IHRoZXkgY2FuCisgICBtZW50YWxseSBkcmF3IGEgbnVtYmVyIGxpbmUgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCBwbGFjZSB0aGVzZQorICAgdmFsdWVzIGluIG9yZGVyLCBpLmUuCisKKwl3aGlsZSAobG93ZXJfYm91bmQgPCBpKSB7CisJCWRvIHNvbWV0aGluZzsKKwkJaS0tOworCX0KKworICAgQm90aCBhcmUgdmFsaWQsIGFuZCB3ZSB1c2UgYm90aC4gIEhvd2V2ZXIsIHRoZSBtb3JlICJzdGFibGUiIHRoZQorICAgc3RhYmxlIHNpZGUgYmVjb21lcywgdGhlIG1vcmUgd2UgdGVuZCB0byBwcmVmZXIgdGhlIGZvcm1lcgorICAgKGNvbXBhcmlzb24gd2l0aCBhIGNvbnN0YW50LCAiaSA+IDAiLCBpcyBhbiBleHRyZW1lIGV4YW1wbGUpLgorICAgSnVzdCBkbyBub3QgbWl4IHN0eWxlcyBpbiB0aGUgc2FtZSBwYXJ0IG9mIHRoZSBjb2RlIGFuZCBtaW1pYworICAgZXhpc3Rpbmcgc3R5bGVzIGluIHRoZSBuZWlnaGJvdXJob29kLgorCisgLSBUaGVyZSBhcmUgdHdvIHNjaG9vbHMgb2YgdGhvdWdodCB3aGVuIGl0IGNvbWVzIHRvIHNwbGl0dGluZyBhIGxvbmcKKyAgIGxvZ2ljYWwgbGluZSBpbnRvIG11bHRpcGxlIGxpbmVzLiAgU29tZSBwZW9wbGUgcHVzaCB0aGUgc2Vjb25kIGFuZAorICAgc3Vic2VxdWVudCBsaW5lcyBmYXIgZW5vdWdoIHRvIHRoZSByaWdodCB3aXRoIHRhYnMgYW5kIGFsaWduIHRoZW06CisKKyAgICAgICAgaWYgKHRoZV9iZWdpbm5pbmdfb2ZfYV92ZXJ5X2xvbmdfZXhwcmVzc2lvbl90aGF0X2hhc190byB8fAorCQlzcGFuX21vcmVfdGhhbl9hX3NpbmdsZV9saW5lX29mIHx8CisJCXRoZV9zb3VyY2VfdGV4dCkgeworICAgICAgICAgICAgICAgIC4uLgorCisgICB3aGlsZSBvdGhlciBwZW9wbGUgcHJlZmVyIHRvIGFsaWduIHRoZSBzZWNvbmQgYW5kIHRoZSBzdWJzZXF1ZW50CisgICBsaW5lcyB3aXRoIHRoZSBjb2x1bW4gaW1tZWRpYXRlbHkgaW5zaWRlIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzLAorICAgd2l0aCB0YWJzIGFuZCBzcGFjZXMsIGZvbGxvd2luZyBvdXIgInRhYnN0b3AgaXMgYWx3YXlzIGEgbXVsdGlwbGUKKyAgIG9mIDgiIGNvbnZlbnRpb246CisKKyAgICAgICAgaWYgKHRoZV9iZWdpbm5pbmdfb2ZfYV92ZXJ5X2xvbmdfZXhwcmVzc2lvbl90aGF0X2hhc190byB8fAorCSAgICBzcGFuX21vcmVfdGhhbl9hX3NpbmdsZV9saW5lX29mIHx8CisJICAgIHRoZV9zb3VyY2VfdGV4dCkgeworICAgICAgICAgICAgICAgIC4uLgorCisgICBCb3RoIGFyZSB2YWxpZCwgYW5kIHdlIHVzZSBib3RoLiAgQWdhaW4sIGp1c3QgZG8gbm90IG1peCBzdHlsZXMgaW4KKyAgIHRoZSBzYW1lIHBhcnQgb2YgdGhlIGNvZGUgYW5kIG1pbWljIGV4aXN0aW5nIHN0eWxlcyBpbiB0aGUKKyAgIG5laWdoYm91cmhvb2QuCisKKyAtIFdoZW4gc3BsaXR0aW5nIGEgbG9uZyBsb2dpY2FsIGxpbmUsIHNvbWUgcGVvcGxlIGNoYW5nZSBsaW5lIGJlZm9yZQorICAgYSBiaW5hcnkgb3BlcmF0b3IsIHNvIHRoYXQgdGhlIHJlc3VsdCBsb29rcyBsaWtlIGEgcGFyc2UgdHJlZSB3aGVuCisgICB5b3UgdHVybiB5b3VyIGhlYWQgOTAtZGVncmVlcyBjb3VudGVyY2xvY2t3aXNlOgorCisgICAgICAgIGlmICh0aGVfYmVnaW5uaW5nX29mX2FfdmVyeV9sb25nX2V4cHJlc3Npb25fdGhhdF9oYXNfdG8KKwkgICAgfHwgc3Bhbl9tb3JlX3RoYW5fYV9zaW5nbGVfbGluZV9vZl90aGVfc291cmNlX3RleHQpIHsKKworICAgd2hpbGUgb3RoZXIgcGVvcGxlIHByZWZlciB0byBsZWF2ZSB0aGUgb3BlcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUKKyAgIGxpbmU6CisKKyAgICAgICAgaWYgKHRoZV9iZWdpbm5pbmdfb2ZfYV92ZXJ5X2xvbmdfZXhwcmVzc2lvbl90aGF0X2hhc190byB8fAorCSAgICBzcGFuX21vcmVfdGhhbl9hX3NpbmdsZV9saW5lX29mX3RoZV9zb3VyY2VfdGV4dCkgeworCisgICBCb3RoIGFyZSB2YWxpZCwgYnV0IHdlIHRlbmQgdG8gdXNlIHRoZSBsYXR0ZXIgbW9yZSwgdW5sZXNzIHRoZQorICAgZXhwcmVzc2lvbiBnZXRzIGZhaXJseSBjb21wbGV4LCBpbiB3aGljaCBjYXNlIHRoZSBmb3JtZXIgdGVuZHMgdG8KKyAgIGJlIGVhc2llciB0byByZWFkLiAgQWdhaW4sIGp1c3QgZG8gbm90IG1peCBzdHlsZXMgaW4gdGhlIHNhbWUgcGFydAorICAgb2YgdGhlIGNvZGUgYW5kIG1pbWljIGV4aXN0aW5nIHN0eWxlcyBpbiB0aGUgbmVpZ2hib3VyaG9vZC4KKworIC0gV2hlbiBzcGxpdHRpbmcgYSBsb25nIGxvZ2ljYWwgbGluZSwgd2l0aCBldmVyeXRoaW5nIGVsc2UgYmVpbmcKKyAgIGVxdWFsLCBpdCBpcyBwcmVmZXJhYmxlIHRvIHNwbGl0IGFmdGVyIHRoZSBvcGVyYXRvciBhdCBoaWdoZXIKKyAgIGxldmVsIGluIHRoZSBwYXJzZSB0cmVlLiAgVGhhdCBpcywgdGhpcyBpcyBtb3JlIHByZWZlcmFibGU6CisKKwlpZiAoYV92ZXJ5X2xvbmdfdmFyaWFibGUgKiB0aGF0X2lzX3VzZWRfaW4gKworCSAgICBhX3ZlcnlfbG9uZ19leHByZXNzaW9uKSB7CisJCS4uLgorCisgICB0aGFuCisKKwlpZiAoYV92ZXJ5X2xvbmdfdmFyaWFibGUgKgorCSAgICB0aGF0X2lzX3VzZWRfaW4gKyBhX3ZlcnlfbG9uZ19leHByZXNzaW9uKSB7CisJCS4uLgorCisgLSBTb21lIGNsZXZlciB0cmlja3MsIGxpa2UgdXNpbmcgdGhlICEhIG9wZXJhdG9yIHdpdGggYXJpdGhtZXRpYworICAgY29uc3RydWN0cywgY2FuIGJlIGV4dHJlbWVseSBjb25mdXNpbmcgdG8gb3RoZXJzLiAgQXZvaWQgdGhlbSwKKyAgIHVubGVzcyB0aGVyZSBpcyBhIGNvbXBlbGxpbmcgcmVhc29uIHRvIHVzZSB0aGVtLgorCisgLSBVc2UgdGhlIEFQSS4gIE5vLCByZWFsbHkuICBXZSBoYXZlIGEgc3RyYnVmICh2YXJpYWJsZSBsZW5ndGgKKyAgIHN0cmluZyksIHNldmVyYWwgYXJyYXlzIHdpdGggdGhlIEFMTE9DX0dST1coKSBtYWNybywgYQorICAgc3RyaW5nX2xpc3QgZm9yIHNvcnRlZCBzdHJpbmcgbGlzdHMsIGEgaGFzaCBtYXAgKG1hcHBpbmcgc3RydWN0CisgICBvYmplY3RzKSBuYW1lZCAic3RydWN0IGRlY29yYXRlIiwgYW1vbmdzdCBvdGhlciB0aGluZ3MuCisKKyAtIFdoZW4geW91IGNvbWUgdXAgd2l0aCBhbiBBUEksIGRvY3VtZW50IGl0cyBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMKKyAgIGluIHRoZSBoZWFkZXIgZmlsZSB0aGF0IGV4cG9zZXMgdGhlIEFQSSB0byBpdHMgY2FsbGVycy4gVXNlIHdoYXQgaXMKKyAgIGluICJzdHJidWYuaCIgYXMgYSBtb2RlbCBmb3IgdGhlIGFwcHJvcHJpYXRlIHRvbmUgYW5kIGxldmVsIG9mCisgICBkZXRhaWwuCisKKyAtIFRoZSBmaXJzdCAjaW5jbHVkZSBpbiBDIGZpbGVzLCBleGNlcHQgaW4gcGxhdGZvcm0gc3BlY2lmaWMgY29tcGF0LworICAgaW1wbGVtZW50YXRpb25zLCBtdXN0IGJlIGVpdGhlciAiZ2l0LWNvbXBhdC11dGlsLmgiLCAiY2FjaGUuaCIgb3IKKyAgICJidWlsdGluLmgiLiAgWW91IGRvIG5vdCBoYXZlIHRvIGluY2x1ZGUgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZS4KKworIC0gQSBDIGZpbGUgbXVzdCBkaXJlY3RseSBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZXMgdGhhdCBkZWNsYXJlIHRoZQorICAgZnVuY3Rpb25zIGFuZCB0aGUgdHlwZXMgaXQgdXNlcywgZXhjZXB0IGZvciB0aGUgZnVuY3Rpb25zIGFuZCB0eXBlcworICAgdGhhdCBhcmUgbWFkZSBhdmFpbGFibGUgdG8gaXQgYnkgaW5jbHVkaW5nIG9uZSBvZiB0aGUgaGVhZGVyIGZpbGVzCisgICBpdCBtdXN0IGluY2x1ZGUgYnkgdGhlIHByZXZpb3VzIHJ1bGUuCisKKyAtIElmIHlvdSBhcmUgcGxhbm5pbmcgYSBuZXcgY29tbWFuZCwgY29uc2lkZXIgd3JpdGluZyBpdCBpbiBzaGVsbAorICAgb3IgcGVybCBmaXJzdCwgc28gdGhhdCBjaGFuZ2VzIGluIHNlbWFudGljcyBjYW4gYmUgZWFzaWx5CisgICBjaGFuZ2VkIGFuZCBkaXNjdXNzZWQuICBNYW55IEdpdCBjb21tYW5kcyBzdGFydGVkIG91dCBsaWtlCisgICB0aGF0LCBhbmQgYSBmZXcgYXJlIHN0aWxsIHNjcmlwdHMuCisKKyAtIEF2b2lkIGludHJvZHVjaW5nIGEgbmV3IGRlcGVuZGVuY3kgaW50byBHaXQuIFRoaXMgbWVhbnMgeW91CisgICB1c3VhbGx5IHNob3VsZCBzdGF5IGF3YXkgZnJvbSBzY3JpcHRpbmcgbGFuZ3VhZ2VzIG5vdCBhbHJlYWR5CisgICB1c2VkIGluIHRoZSBHaXQgY29yZSBjb21tYW5kIHNldCAodW5sZXNzIHlvdXIgY29tbWFuZCBpcyBjbGVhcmx5CisgICBzZXBhcmF0ZSBmcm9tIGl0LCBzdWNoIGFzIGFuIGltcG9ydGVyIHRvIGNvbnZlcnQgcmFuZG9tLXNjbS1YCisgICByZXBvc2l0b3JpZXMgdG8gR2l0KS4KKworIC0gV2hlbiB3ZSBwYXNzIDxzdHJpbmcsIGxlbmd0aD4gcGFpciB0byBmdW5jdGlvbnMsIHdlIHNob3VsZCB0cnkgdG8KKyAgIHBhc3MgdGhlbSBpbiB0aGF0IG9yZGVyLgorCisgLSBVc2UgR2l0J3MgZ2V0dGV4dCB3cmFwcGVycyB0byBtYWtlIHRoZSB1c2VyIGludGVyZmFjZQorICAgdHJhbnNsYXRhYmxlLiBTZWUgIk1hcmtpbmcgc3RyaW5ncyBmb3IgdHJhbnNsYXRpb24iIGluIHBvL1JFQURNRS4KKworIC0gVmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgbG9jYWwgdG8gYSBnaXZlbiBzb3VyY2UgZmlsZSBzaG91bGQgYmUgbWFya2VkCisgICB3aXRoICJzdGF0aWMiLiBWYXJpYWJsZXMgdGhhdCBhcmUgdmlzaWJsZSB0byBvdGhlciBzb3VyY2UgZmlsZXMKKyAgIG11c3QgYmUgZGVjbGFyZWQgd2l0aCAiZXh0ZXJuIiBpbiBoZWFkZXIgZmlsZXMuIEhvd2V2ZXIsIGZ1bmN0aW9uCisgICBkZWNsYXJhdGlvbnMgc2hvdWxkIG5vdCB1c2UgImV4dGVybiIsIGFzIHRoYXQgaXMgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKworIC0gWW91IGNhbiBsYXVuY2ggZ2RiIGFyb3VuZCB5b3VyIHByb2dyYW0gdXNpbmcgdGhlIHNob3J0aGFuZCBHSVRfREVCVUdHRVIuCisgICBSdW4gYEdJVF9ERUJVR0dFUj0xIC4vYmluLXdyYXBwZXJzL2dpdCBmb29gIHRvIHNpbXBseSB1c2UgZ2RiIGFzIGlzLCBvcgorICAgcnVuIGBHSVRfREVCVUdHRVI9IjxkZWJ1Z2dlcj4gPGRlYnVnZ2VyLWFyZ3M+IiAuL2Jpbi13cmFwcGVycy9naXQgZm9vYCB0bworICAgdXNlIHlvdXIgb3duIGRlYnVnZ2VyIGFuZCBhcmd1bWVudHMuIEV4YW1wbGU6IGBHSVRfREVCVUdHRVI9ImRkZCAtLWdkYiIKKyAgIC4vYmluLXdyYXBwZXJzL2dpdCBsb2dgIChTZWUgYHdyYXAtZm9yLWJpbi5zaGAuKQorCitGb3IgUGVybCBwcm9ncmFtczoKKworIC0gTW9zdCBvZiB0aGUgQyBndWlkZWxpbmVzIGFib3ZlIGFwcGx5LgorCisgLSBXZSB0cnkgdG8gc3VwcG9ydCBQZXJsIDUuOCBhbmQgbGF0ZXIgKCJ1c2UgUGVybCA1LjAwOCIpLgorCisgLSB1c2Ugc3RyaWN0IGFuZCB1c2Ugd2FybmluZ3MgYXJlIHN0cm9uZ2x5IHByZWZlcnJlZC4KKworIC0gRG9uJ3Qgb3ZlcnVzZSBzdGF0ZW1lbnQgbW9kaWZpZXJzIHVubGVzcyB1c2luZyB0aGVtIG1ha2VzIHRoZQorICAgcmVzdWx0IGVhc2llciB0byBmb2xsb3cuCisKKwkuLi4gZG8gc29tZXRoaW5nIC4uLgorCWRvX3RoaXMoKSB1bmxlc3MgKGNvbmRpdGlvbik7CisgICAgICAgIC4uLiBkbyBzb21ldGhpbmcgZWxzZSAuLi4KKworICAgaXMgbW9yZSByZWFkYWJsZSB0aGFuOgorCisJLi4uIGRvIHNvbWV0aGluZyAuLi4KKwl1bmxlc3MgKGNvbmRpdGlvbikgeworCQlkb190aGlzKCk7CisJfQorICAgICAgICAuLi4gZG8gc29tZXRoaW5nIGVsc2UgLi4uCisKKyAgICpvbmx5KiB3aGVuIHRoZSBjb25kaXRpb24gaXMgc28gcmFyZSB0aGF0IGRvX3RoaXMoKSB3aWxsIGJlIGFsbW9zdAorICAgYWx3YXlzIGNhbGxlZC4KKworIC0gV2UgdHJ5IHRvIGF2b2lkIGFzc2lnbm1lbnRzIGluc2lkZSAiaWYgKCkiIGNvbmRpdGlvbnMuCisKKyAtIExlYXJuIGFuZCB1c2UgR2l0LnBtIGlmIHlvdSBuZWVkIHRoYXQgZnVuY3Rpb25hbGl0eS4KKworIC0gRm9yIEVtYWNzLCBpdCdzIHVzZWZ1bCB0byBwdXQgdGhlIGZvbGxvd2luZyBpbgorICAgR0lUX0NIRUNLT1VULy5kaXItbG9jYWxzLmVsLCBhc3N1bWluZyB5b3UgdXNlIGNwZXJsLW1vZGU6CisKKyAgICA7OyBub3RlIHRoZSBmaXJzdCBwYXJ0IGlzIHVzZWZ1bCBmb3IgQyBlZGl0aW5nLCB0b28KKyAgICAoKG5pbCAuICgoaW5kZW50LXRhYnMtbW9kZSAuIHQpCisgICAgICAgICAgICAgICAgICAodGFiLXdpZHRoIC4gOCkKKyAgICAgICAgICAgICAgICAgIChmaWxsLWNvbHVtbiAuIDgwKSkpCisgICAgIChjcGVybC1tb2RlIC4gKChjcGVybC1pbmRlbnQtbGV2ZWwgLiA4KQorICAgICAgICAgICAgICAgICAgICAoY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2UgLiBuaWwpCisgICAgICAgICAgICAgICAgICAgIChjcGVybC1tZXJnZS10cmFpbGluZy1lbHNlIC4gdCkpKSkKKworRm9yIFB5dGhvbiBzY3JpcHRzOgorCisgLSBXZSBmb2xsb3cgUEVQLTggKGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDAwOC8pLgorCisgLSBBcyBhIG1pbmltdW0sIHdlIGFpbSB0byBiZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuNiBhbmQgMi43LgorCisgLSBXaGVyZSByZXF1aXJlZCBsaWJyYXJpZXMgZG8gbm90IHJlc3RyaWN0IHVzIHRvIFB5dGhvbiAyLCB3ZSB0cnkgdG8KKyAgIGFsc28gYmUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgYW5kIGxhdGVyLgorCisgLSBXaGVuIHlvdSBtdXN0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBVbmljb2RlIGxpdGVyYWxzIGFuZCBieXRlIHN0cmluZworICAgbGl0ZXJhbHMsIGl0IGlzIE9LIHRvIHVzZSB0aGUgJ2InIHByZWZpeC4gIEV2ZW4gdGhvdWdoIHRoZSBQeXRob24KKyAgIGRvY3VtZW50YXRpb24gZm9yIHZlcnNpb24gMi42IGRvZXMgbm90IG1lbnRpb24gdGhpcyBwcmVmaXgsIGl0IGhhcworICAgYmVlbiBzdXBwb3J0ZWQgc2luY2UgdmVyc2lvbiAyLjYuMC4KKworRXJyb3IgTWVzc2FnZXMKKworIC0gRG8gbm90IGVuZCBlcnJvciBtZXNzYWdlcyB3aXRoIGEgZnVsbCBzdG9wLgorCisgLSBEbyBub3QgY2FwaXRhbGl6ZSAoInVuYWJsZSB0byBvcGVuICVzIiwgbm90ICJVbmFibGUgdG8gb3BlbiAlcyIpCisKKyAtIFNheSB3aGF0IHRoZSBlcnJvciBpcyBmaXJzdCAoImNhbm5vdCBvcGVuICVzIiwgbm90ICIlczogY2Fubm90IG9wZW4iKQorCisKK0V4dGVybmFsbHkgVmlzaWJsZSBOYW1lcworCisgLSBGb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcywgZm9sbG93IHRoZSBleGlzdGluZyBjb252ZW50aW9uOgorCisgICAuIFRoZSBzZWN0aW9uIG5hbWUgaW5kaWNhdGVzIHRoZSBhZmZlY3RlZCBzdWJzeXN0ZW0uCisKKyAgIC4gVGhlIHN1YnNlY3Rpb24gbmFtZSwgaWYgYW55LCBpbmRpY2F0ZXMgd2hpY2ggb2YgYW4gdW5ib3VuZGVkIHNldAorICAgICBvZiB0aGluZ3MgdG8gc2V0IHRoZSB2YWx1ZSBmb3IuCisKKyAgIC4gVGhlIHZhcmlhYmxlIG5hbWUgZGVzY3JpYmVzIHRoZSBlZmZlY3Qgb2YgdHdlYWtpbmcgdGhpcyBrbm9iLgorCisgICBUaGUgc2VjdGlvbiBhbmQgdmFyaWFibGUgbmFtZXMgdGhhdCBjb25zaXN0IG9mIG11bHRpcGxlIHdvcmRzIGFyZQorICAgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIHdvcmRzIHdpdGhvdXQgcHVuY3R1YXRpb25zIChlLmcuIGAtYCksCisgICBhbmQgYXJlIGJyb2tlbiB1c2luZyBidW1weUNhcHMgaW4gZG9jdW1lbnRhdGlvbiBhcyBhIGhpbnQgdG8gdGhlCisgICByZWFkZXIuCisKKyAgIFdoZW4gY2hvb3NpbmcgdGhlIHZhcmlhYmxlIG5hbWVzcGFjZSwgZG8gbm90IHVzZSB2YXJpYWJsZSBuYW1lIGZvcgorICAgc3BlY2lmeWluZyBwb3NzaWJseSB1bmJvdW5kZWQgc2V0IG9mIHRoaW5ncywgbW9zdCBub3RhYmx5IGFueXRoaW5nCisgICBhbiBlbmQgdXNlciBjYW4gZnJlZWx5IGNvbWUgdXAgd2l0aCAoZS5nLiBicmFuY2ggbmFtZXMpLiAgSW5zdGVhZCwKKyAgIHVzZSBzdWJzZWN0aW9uIG5hbWVzIG9yIHZhcmlhYmxlIHZhbHVlcywgbGlrZSB0aGUgZXhpc3RpbmcgdmFyaWFibGUKKyAgIGJyYW5jaC48bmFtZT4uZGVzY3JpcHRpb24gZG9lcy4KKworCitXcml0aW5nIERvY3VtZW50YXRpb246CisKKyBNb3N0IChpZiBub3QgYWxsKSBvZiB0aGUgZG9jdW1lbnRhdGlvbiBwYWdlcyBhcmUgd3JpdHRlbiBpbiB0aGUKKyBBc2NpaURvYyBmb3JtYXQgaW4gKi50eHQgZmlsZXMgKGUuZy4gRG9jdW1lbnRhdGlvbi9naXQudHh0KSwgYW5kCisgcHJvY2Vzc2VkIGludG8gSFRNTCBhbmQgbWFucGFnZXMgKGUuZy4gZ2l0Lmh0bWwgYW5kIGdpdC4xIGluIHRoZQorIHNhbWUgZGlyZWN0b3J5KS4KKworIFRoZSBkb2N1bWVudGF0aW9uIGxpYmVyYWxseSBtaXhlcyBVUyBhbmQgVUsgRW5nbGlzaCAoZW5fVVMvVUspCisgbm9ybXMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyLCB3aGljaCBpcyBzb21ld2hhdCB1bmZvcnR1bmF0ZS4KKyBJbiBhbiBpZGVhbCB3b3JsZCwgaXQgd291bGQgaGF2ZSBiZWVuIGJldHRlciBpZiBpdCBjb25zaXN0ZW50bHkKKyB1c2VkIG9ubHkgb25lIGFuZCBub3QgdGhlIG90aGVyLCBhbmQgd2Ugd291bGQgaGF2ZSBwaWNrZWQgZW5fVVMKKyAoaWYgeW91IHdpc2ggdG8gY29ycmVjdCB0aGUgRW5nbGlzaCBvZiBzb21lIG9mIHRoZSBleGlzdGluZworIGRvY3VtZW50YXRpb24sIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24tcmVsYXRlZCBhZHZpY2UgaW4gdGhlCisgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBmaWxlKS4KKworIEV2ZXJ5IHVzZXItdmlzaWJsZSBjaGFuZ2Ugc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyBUaGUgc2FtZSBnZW5lcmFsIHJ1bGUgYXMgZm9yIGNvZGUgYXBwbGllcyAtLSBpbWl0YXRlIHRoZSBleGlzdGluZworIGNvbnZlbnRpb25zLgorCisgQSBmZXcgY29tbWVudGVkIGV4YW1wbGVzIGZvbGxvdyB0byBwcm92aWRlIHJlZmVyZW5jZSB3aGVuIHdyaXRpbmcgb3IKKyBtb2RpZnlpbmcgY29tbWFuZCB1c2FnZSBzdHJpbmdzIGFuZCBzeW5vcHNpcyBzZWN0aW9ucyBpbiB0aGUgbWFudWFsCisgcGFnZXM6CisKKyBQbGFjZWhvbGRlcnMgYXJlIHNwZWxsZWQgaW4gbG93ZXJjYXNlIGFuZCBlbmNsb3NlZCBpbiBhbmdsZSBicmFja2V0czoKKyAgIDxmaWxlPgorICAgLS1zb3J0PTxrZXk+CisgICAtLWFiYnJldls9PG4+XQorCisgSWYgYSBwbGFjZWhvbGRlciBoYXMgbXVsdGlwbGUgd29yZHMsIHRoZXkgYXJlIHNlcGFyYXRlZCBieSBkYXNoZXM6CisgICA8bmV3LWJyYW5jaC1uYW1lPgorICAgLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5PgorCisgUG9zc2liaWxpdHkgb2YgbXVsdGlwbGUgb2NjdXJyZW5jZXMgaXMgaW5kaWNhdGVkIGJ5IHRocmVlIGRvdHM6CisgICA8ZmlsZT4uLi4KKyAgIChPbmUgb3IgbW9yZSBvZiA8ZmlsZT4uKQorCisgT3B0aW9uYWwgcGFydHMgYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0czoKKyAgIFs8ZXh0cmE+XQorICAgKFplcm8gb3Igb25lIDxleHRyYT4uKQorCisgICAtLWV4ZWMtcGF0aFs9PHBhdGg+XQorICAgKE9wdGlvbiB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50LiAgTm90ZSB0aGF0IHRoZSAiPSIgaXMgaW5zaWRlIHRoZQorICAgYnJhY2tldHMuKQorCisgICBbPHBhdGNoPi4uLl0KKyAgIChaZXJvIG9yIG1vcmUgb2YgPHBhdGNoPi4gIE5vdGUgdGhhdCB0aGUgZG90cyBhcmUgaW5zaWRlLCBub3QKKyAgIG91dHNpZGUgdGhlIGJyYWNrZXRzLikKKworIE11bHRpcGxlIGFsdGVybmF0aXZlcyBhcmUgaW5kaWNhdGVkIHdpdGggdmVydGljYWwgYmFyczoKKyAgIFstcSB8IC0tcXVpZXRdCisgICBbLS11dGY4IHwgLS1uby11dGY4XQorCisgUGFyZW50aGVzZXMgYXJlIHVzZWQgZm9yIGdyb3VwaW5nOgorICAgWyg8cmV2PiB8IDxyYW5nZT4pLi4uXQorICAgKEFueSBudW1iZXIgb2YgZWl0aGVyIDxyZXY+IG9yIDxyYW5nZT4uICBQYXJlbnMgYXJlIG5lZWRlZCB0byBtYWtlCisgICBpdCBjbGVhciB0aGF0ICIuLi4iIHBlcnRhaW5zIHRvIGJvdGggPHJldj4gYW5kIDxyYW5nZT4uKQorCisgICBbKC1wIDxwYXJlbnQ+KS4uLl0KKyAgIChBbnkgbnVtYmVyIG9mIG9wdGlvbiAtcCwgZWFjaCB3aXRoIG9uZSA8cGFyZW50PiBhcmd1bWVudC4pCisKKyAgIGdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC1kIHwgPGJyYW5jaD4pCisgICAoT25lIGFuZCBvbmx5IG9uZSBvZiAiLWEiLCAiLWQiIG9yICI8YnJhbmNoPiIgX211c3RfIChubyBzcXVhcmUKKyAgIGJyYWNrZXRzKSBiZSBwcm92aWRlZC4pCisKKyBBbmQgYSBzb21ld2hhdCBtb3JlIGNvbnRyaXZlZCBleGFtcGxlOgorICAgLS1kaWZmLWZpbHRlcj1bKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0KKyAgIEhlcmUgIj0iIGlzIG91dHNpZGUgdGhlIGJyYWNrZXRzLCBiZWNhdXNlICItLWRpZmYtZmlsdGVyPSIgaXMgYQorICAgdmFsaWQgdXNhZ2UuICAiKiIgaGFzIGl0cyBvd24gcGFpciBvZiBicmFja2V0cywgYmVjYXVzZSBpdCBjYW4KKyAgIChvcHRpb25hbGx5KSBiZSBzcGVjaWZpZWQgb25seSB3aGVuIG9uZSBvciBtb3JlIG9mIHRoZSBsZXR0ZXJzIGlzCisgICBhbHNvIHByb3ZpZGVkLgorCisgIEEgbm90ZSBvbiBub3RhdGlvbjoKKyAgIFVzZSAnZ2l0JyAoYWxsIGxvd2VyY2FzZSkgd2hlbiB0YWxraW5nIGFib3V0IGNvbW1hbmRzIGkuZS4gc29tZXRoaW5nCisgICB0aGUgdXNlciB3b3VsZCB0eXBlIGludG8gYSBzaGVsbCBhbmQgdXNlICdHaXQnICh1cHBlcmNhc2UgZmlyc3QgbGV0dGVyKQorICAgd2hlbiB0YWxraW5nIGFib3V0IHRoZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGFuZCBpdHMgcHJvcGVydGllcy4KKworIEEgZmV3IGNvbW1lbnRlZCBleGFtcGxlcyBmb2xsb3cgdG8gcHJvdmlkZSByZWZlcmVuY2Ugd2hlbiB3cml0aW5nIG9yCisgbW9kaWZ5aW5nIHBhcmFncmFwaHMgb3Igb3B0aW9uL2NvbW1hbmQgZXhwbGFuYXRpb25zIHRoYXQgY29udGFpbiBvcHRpb25zCisgb3IgY29tbWFuZHM6CisKKyBMaXRlcmFsIGV4YW1wbGVzIChlLmcuIHVzZSBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucywgY29tbWFuZCBuYW1lcywKKyBicmFuY2ggbmFtZXMsIFVSTHMsIHBhdGhuYW1lcyAoZmlsZXMgYW5kIGRpcmVjdG9yaWVzKSwgY29uZmlndXJhdGlvbiBhbmQKKyBlbnZpcm9ubWVudCB2YXJpYWJsZXMpIG11c3QgYmUgdHlwZXNldCBpbiBtb25vc3BhY2UgKGkuZS4gd3JhcHBlZCB3aXRoCisgYmFja3RpY2tzKToKKyAgIGAtLXByZXR0eT1vbmVsaW5lYAorICAgYGdpdCByZXYtbGlzdGAKKyAgIGByZW1vdGUucHVzaERlZmF1bHRgCisgICBgaHR0cDovL2dpdC5leGFtcGxlLmNvbWAKKyAgIGAuZ2l0L2NvbmZpZ2AKKyAgIGBHSVRfRElSYAorICAgYEhFQURgCisKKyBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGJlIHByZWZpeGVkIHdpdGggIiQiIG9ubHkgd2hlbiByZWZlcnJpbmcgdG8gaXRzCisgdmFsdWUgYW5kIG5vdCB3aGVuIHJlZmVycmluZyB0byB0aGUgdmFyaWFibGUgaXRzZWxmLCBpbiB0aGlzIGNhc2UgdGhlcmUgaXMKKyBub3RoaW5nIHRvIGFkZCBleGNlcHQgdGhlIGJhY2t0aWNrczoKKyAgIGBHSVRfRElSYCBpcyBzcGVjaWZpZWQKKyAgIGAkR0lUX0RJUi9ob29rcy9wcmUtcmVjZWl2ZWAKKworIFdvcmQgcGhyYXNlcyBlbmNsb3NlZCBpbiBgYmFja3RpY2sgY2hhcmFjdGVyc2AgYXJlIHJlbmRlcmVkIGxpdGVyYWxseQorIGFuZCB3aWxsIG5vdCBiZSBmdXJ0aGVyIGV4cGFuZGVkLiBUaGUgdXNlIG9mIGBiYWNrdGlja3NgIHRvIGFjaGlldmUgdGhlCisgcHJldmlvdXMgcnVsZSBtZWFucyB0aGF0IGxpdGVyYWwgZXhhbXBsZXMgc2hvdWxkIG5vdCB1c2UgQXNjaWlEb2MKKyBlc2NhcGVzLgorICAgQ29ycmVjdDoKKyAgICAgIGAtLXByZXR0eT1vbmVsaW5lYAorICAgSW5jb3JyZWN0OgorICAgICAgYFwtLXByZXR0eT1vbmVsaW5lYAorCisgSWYgc29tZSBwbGFjZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBuZWVkcyB0byB0eXBlc2V0IGEgY29tbWFuZCB1c2FnZQorIGV4YW1wbGUgd2l0aCBpbmxpbmUgc3Vic3RpdHV0aW9ucywgaXQgaXMgZmluZSB0byB1c2UgK21vbm9zcGFjZWQgYW5kCisgaW5saW5lIHN1YnN0aXR1dGVkIHRleHQrIGluc3RlYWQgb2YgYG1vbm9zcGFjZWQgbGl0ZXJhbCB0ZXh0YCwgYW5kIHdpdGgKKyB0aGUgZm9ybWVyLCB0aGUgcGFydCB0aGF0IHNob3VsZCBub3QgZ2V0IHN1YnN0aXR1dGVkIG11c3QgYmUKKyBxdW90ZWQvZXNjYXBlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZTgyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsNDkxIEBACisjIEd1YXJkIGFnYWluc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzCitNQU4xX1RYVCA9CitNQU41X1RYVCA9CitNQU43X1RYVCA9CitURUNIX0RPQ1MgPQorQVJUSUNMRVMgPQorU1BfQVJUSUNMRVMgPQorT0JTT0xFVEVfSFRNTCA9CisKKy1pbmNsdWRlIEdJVC1FWENMVURFRC1QUk9HUkFNUworCitNQU4xX1RYVCArPSAkKGZpbHRlci1vdXQgXAorCQkkKHBhdHN1YnN0ICUsJS50eHQsJChFWENMVURFRF9QUk9HUkFNUykpIFwKKwkJJChhZGRzdWZmaXggLnR4dCwgJChBUlRJQ0xFUykgJChTUF9BUlRJQ0xFUykpLCBcCisJCSQod2lsZGNhcmQgZ2l0LSoudHh0KSkKK01BTjFfVFhUICs9IGdpdC50eHQKK01BTjFfVFhUICs9IGdpdGsudHh0CitNQU4xX1RYVCArPSBnaXR3ZWIudHh0CisKK01BTjVfVFhUICs9IGdpdGF0dHJpYnV0ZXMudHh0CitNQU41X1RYVCArPSBnaXRob29rcy50eHQKK01BTjVfVFhUICs9IGdpdGlnbm9yZS50eHQKK01BTjVfVFhUICs9IGdpdG1vZHVsZXMudHh0CitNQU41X1RYVCArPSBnaXRyZXBvc2l0b3J5LWxheW91dC50eHQKK01BTjVfVFhUICs9IGdpdHdlYi5jb25mLnR4dAorCitNQU43X1RYVCArPSBnaXRjbGkudHh0CitNQU43X1RYVCArPSBnaXRjb3JlLXR1dG9yaWFsLnR4dAorTUFON19UWFQgKz0gZ2l0Y3JlZGVudGlhbHMudHh0CitNQU43X1RYVCArPSBnaXRjdnMtbWlncmF0aW9uLnR4dAorTUFON19UWFQgKz0gZ2l0ZGlmZmNvcmUudHh0CitNQU43X1RYVCArPSBnaXRldmVyeWRheS50eHQKK01BTjdfVFhUICs9IGdpdGdsb3NzYXJ5LnR4dAorTUFON19UWFQgKz0gZ2l0bmFtZXNwYWNlcy50eHQKK01BTjdfVFhUICs9IGdpdHJlbW90ZS1oZWxwZXJzLnR4dAorTUFON19UWFQgKz0gZ2l0cmV2aXNpb25zLnR4dAorTUFON19UWFQgKz0gZ2l0c3VibW9kdWxlcy50eHQKK01BTjdfVFhUICs9IGdpdHR1dG9yaWFsLTIudHh0CitNQU43X1RYVCArPSBnaXR0dXRvcmlhbC50eHQKK01BTjdfVFhUICs9IGdpdHdvcmtmbG93cy50eHQKKworaWZkZWYgTUFOX0ZJTFRFUgorTUFOX1RYVCA9ICQoZmlsdGVyICQoTUFOX0ZJTFRFUiksJChNQU4xX1RYVCkgJChNQU41X1RYVCkgJChNQU43X1RYVCkpCitlbHNlCitNQU5fVFhUID0gJChNQU4xX1RYVCkgJChNQU41X1RYVCkgJChNQU43X1RYVCkKK01BTl9GSUxURVIgPSAkKE1BTl9UWFQpCitlbmRpZgorCitNQU5fWE1MID0gJChwYXRzdWJzdCAlLnR4dCwlLnhtbCwkKE1BTl9UWFQpKQorTUFOX0hUTUwgPSAkKHBhdHN1YnN0ICUudHh0LCUuaHRtbCwkKE1BTl9UWFQpKQorR0lUX01BTl9SRUYgPSBtYXN0ZXIKKworT0JTT0xFVEVfSFRNTCArPSBldmVyeWRheS5odG1sCitPQlNPTEVURV9IVE1MICs9IGdpdC1yZW1vdGUtaGVscGVycy5odG1sCisKK0FSVElDTEVTICs9IGhvd3RvLWluZGV4CitBUlRJQ0xFUyArPSBnaXQtdG9vbHMKK0FSVElDTEVTICs9IGdpdC1iaXNlY3QtbGsyMDA5CisjIHdpdGggdGhlaXIgb3duIGZvcm1hdHRpbmcgcnVsZXMuCitTUF9BUlRJQ0xFUyArPSB1c2VyLW1hbnVhbAorU1BfQVJUSUNMRVMgKz0gaG93dG8vbmV3LWNvbW1hbmQKK1NQX0FSVElDTEVTICs9IGhvd3RvL3JldmVydC1icmFuY2gtcmViYXNlCitTUF9BUlRJQ0xFUyArPSBob3d0by91c2luZy1tZXJnZS1zdWJ0cmVlCitTUF9BUlRJQ0xFUyArPSBob3d0by91c2luZy1zaWduZWQtdGFnLWluLXB1bGwtcmVxdWVzdAorU1BfQVJUSUNMRVMgKz0gaG93dG8vdXNlLWdpdC1kYWVtb24KK1NQX0FSVElDTEVTICs9IGhvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUKK1NQX0FSVElDTEVTICs9IGhvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwCitTUF9BUlRJQ0xFUyArPSBob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzCitTUF9BUlRJQ0xFUyArPSBob3d0by9yZXZlcnQtYS1mYXVsdHktbWVyZ2UKK1NQX0FSVElDTEVTICs9IGhvd3RvL3JlY292ZXItY29ycnVwdGVkLWJsb2Itb2JqZWN0CitTUF9BUlRJQ0xFUyArPSBob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1vYmplY3QtaGFyZGVyCitTUF9BUlRJQ0xFUyArPSBob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sKK1NQX0FSVElDTEVTICs9IGhvd3RvL3JlYmFzZS1mcm9tLWludGVybmFsLWJyYW5jaAorU1BfQVJUSUNMRVMgKz0gaG93dG8va2VlcC1jYW5vbmljYWwtaGlzdG9yeS1jb3JyZWN0CitTUF9BUlRJQ0xFUyArPSBob3d0by9tYWludGFpbi1naXQKK0FQSV9ET0NTID0gJChwYXRzdWJzdCAlLnR4dCwlLCQoZmlsdGVyLW91dCB0ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0IHRlY2huaWNhbC9hcGktaW5kZXgudHh0LCAkKHdpbGRjYXJkIHRlY2huaWNhbC9hcGktKi50eHQpKSkKK1NQX0FSVElDTEVTICs9ICQoQVBJX0RPQ1MpCisKK1RFQ0hfRE9DUyArPSBNeUZpcnN0Q29udHJpYnV0aW9uCitURUNIX0RPQ1MgKz0gTXlGaXJzdE9iamVjdFdhbGsKK1RFQ0hfRE9DUyArPSBTdWJtaXR0aW5nUGF0Y2hlcworVEVDSF9ET0NTICs9IHRlY2huaWNhbC9oYXNoLWZ1bmN0aW9uLXRyYW5zaXRpb24KK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvaHR0cC1wcm90b2NvbAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC9pbmRleC1mb3JtYXQKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvbG9uZy1ydW5uaW5nLXByb2Nlc3MtcHJvdG9jb2wKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvbXVsdGktcGFjay1pbmRleAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wYWNrLWZvcm1hdAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wYWNrLWhldXJpc3RpY3MKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvcGFjay1wcm90b2NvbAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wYXJ0aWFsLWNsb25lCitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3Byb3RvY29sLWNhcGFiaWxpdGllcworVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wcm90b2NvbC1jb21tb24KK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvcHJvdG9jb2wtdjIKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvcmFjeS1naXQKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvc2VuZC1wYWNrLXBpcGVsaW5lCitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3NoYWxsb3cKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvc2lnbmF0dXJlLWZvcm1hdAorVEVDSF9ET0NTICs9IHRlY2huaWNhbC90cml2aWFsLW1lcmdlCitTUF9BUlRJQ0xFUyArPSAkKFRFQ0hfRE9DUykKK1NQX0FSVElDTEVTICs9IHRlY2huaWNhbC9hcGktaW5kZXgKKworQVJUSUNMRVNfSFRNTCArPSAkKHBhdHN1YnN0ICUsJS5odG1sLCQoQVJUSUNMRVMpICQoU1BfQVJUSUNMRVMpKQorSFRNTF9GSUxURVIgPz0gJChBUlRJQ0xFU19IVE1MKSAkKE9CU09MRVRFX0hUTUwpCitET0NfSFRNTCA9ICQoTUFOX0hUTUwpICQoZmlsdGVyICQoSFRNTF9GSUxURVIpLCQoQVJUSUNMRVNfSFRNTCkgJChPQlNPTEVURV9IVE1MKSkKKworRE9DX01BTjEgPSAkKHBhdHN1YnN0ICUudHh0LCUuMSwkKGZpbHRlciAkKE1BTl9GSUxURVIpLCQoTUFOMV9UWFQpKSkKK0RPQ19NQU41ID0gJChwYXRzdWJzdCAlLnR4dCwlLjUsJChmaWx0ZXIgJChNQU5fRklMVEVSKSwkKE1BTjVfVFhUKSkpCitET0NfTUFONyA9ICQocGF0c3Vic3QgJS50eHQsJS43LCQoZmlsdGVyICQoTUFOX0ZJTFRFUiksJChNQU43X1RYVCkpKQorCitwcmVmaXggPz0gJChIT01FKQorYmluZGlyID89ICQocHJlZml4KS9iaW4KK2h0bWxkaXIgPz0gJChwcmVmaXgpL3NoYXJlL2RvYy9naXQtZG9jCitpbmZvZGlyID89ICQocHJlZml4KS9zaGFyZS9pbmZvCitwZGZkaXIgPz0gJChwcmVmaXgpL3NoYXJlL2RvYy9naXQtZG9jCittYW5kaXIgPz0gJChwcmVmaXgpL3NoYXJlL21hbgorbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCittYW41ZGlyID0gJChtYW5kaXIpL21hbjUKK21hbjdkaXIgPSAkKG1hbmRpcikvbWFuNworIyBERVNURElSID0KKworQVNDSUlET0MgPSBhc2NpaWRvYworQVNDSUlET0NfRVhUUkEgPQorQVNDSUlET0NfSFRNTCA9IHhodG1sMTEKK0FTQ0lJRE9DX0RPQ0JPT0sgPSBkb2Nib29rCitBU0NJSURPQ19DT05GID0gLWYgYXNjaWlkb2MuY29uZgorQVNDSUlET0NfQ09NTU9OID0gJChBU0NJSURPQykgJChBU0NJSURPQ19FWFRSQSkgJChBU0NJSURPQ19DT05GKSBcCisJCS1hbWFudmVyc2lvbj0kKEdJVF9WRVJTSU9OKSBcCisJCS1hbWFubWFudWFsPSdHaXQgTWFudWFsJyAtYW1hbnNvdXJjZT0nR2l0JworVFhUX1RPX0hUTUwgPSAkKEFTQ0lJRE9DX0NPTU1PTikgLWIgJChBU0NJSURPQ19IVE1MKQorVFhUX1RPX1hNTCA9ICQoQVNDSUlET0NfQ09NTU9OKSAtYiAkKEFTQ0lJRE9DX0RPQ0JPT0spCitNQU5QQUdFX1hTTCA9IG1hbnBhZ2Utbm9ybWFsLnhzbAorWE1MVE8gPSB4bWx0bworWE1MVE9fRVhUUkEgPQorSU5TVEFMTCA/PSBpbnN0YWxsCitSTSA/PSBybSAtZgorTUFOX1JFUE8gPSAuLi8uLi9naXQtbWFucGFnZXMKK0hUTUxfUkVQTyA9IC4uLy4uL2dpdC1odG1sZG9jcworCitNQUtFSU5GTyA9IG1ha2VpbmZvCitJTlNUQUxMX0lORk8gPSBpbnN0YWxsLWluZm8KK0RPQ0JPT0syWF9URVhJID0gZG9jYm9vazJ4LXRleGkKK0RCTEFURVggPSBkYmxhdGV4CitBU0NJSURPQ19EQkxBVEVYX0RJUiA9IC9ldGMvYXNjaWlkb2MvZGJsYXRleAorREJMQVRFWF9DT01NT04gPSAtcCAkKEFTQ0lJRE9DX0RCTEFURVhfRElSKS9hc2NpaWRvYy1kYmxhdGV4LnhzbCAtcyAkKEFTQ0lJRE9DX0RCTEFURVhfRElSKS9hc2NpaWRvYy1kYmxhdGV4LnN0eQoraWZuZGVmIFBFUkxfUEFUSAorCVBFUkxfUEFUSCA9IC91c3IvYmluL3BlcmwKK2VuZGlmCisKKy1pbmNsdWRlIC4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vY29uZmlnLm1haworCisjCisjIEZvciBkb2Nib29rLXhzbCAuLi4KKyMJLTEuNjguMSwJbm8gZXh0cmEgc2V0dGluZ3MgYXJlIG5lZWRlZD8KKyMJMS42OS4wLAkJc2V0IEFTQ0lJRE9DX1JPRkY/CisjCTEuNjkuMS0xLjcxLjAsCXNldCBET0NCT09LX1NVUFBSRVNTX1NQPworIwkxLjcxLjEsCQlzZXQgQVNDSUlET0NfUk9GRj8KKyMJMS43Mi4wLAkJc2V0IERPQ0JPT0tfWFNMXzE3Mi4KKyMJMS43My4wLSwJbm8gZXh0cmEgc2V0dGluZ3MgYXJlIG5lZWRlZAorIworCitpZmRlZiBET0NCT09LX1hTTF8xNzIKK0FTQ0lJRE9DX0VYVFJBICs9IC1hIGdpdC1hc2NpaWRvYy1uby1yb2ZmCitNQU5QQUdFX1hTTCA9IG1hbnBhZ2UtMS43Mi54c2wKK2Vsc2UKKwlpZm5kZWYgQVNDSUlET0NfUk9GRgorCSMgZG9jYm9vay14c2wgYWZ0ZXIgMS43MiBuZWVkcyB0aGUgcmVndWxhciBYU0wsIGJ1dCB3aWxsIG5vdAorCSMgcGFzcy10aHJ1IHJhdyByb2ZmIGNvZGVzIGZyb20gYXNjaWlkb2MuY29uZiwgc28gdHVybiB0aGVtIG9mZi4KKwlBU0NJSURPQ19FWFRSQSArPSAtYSBnaXQtYXNjaWlkb2Mtbm8tcm9mZgorCWVuZGlmCitlbmRpZgoraWZuZGVmIE5PX01BTl9CT0xEX0xJVEVSQUwKK1hNTFRPX0VYVFJBICs9IC1tIG1hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbAorZW5kaWYKK2lmZGVmIERPQ0JPT0tfU1VQUFJFU1NfU1AKK1hNTFRPX0VYVFJBICs9IC1tIG1hbnBhZ2Utc3VwcHJlc3Mtc3AueHNsCitlbmRpZgorCisjIE5ld2VyIERvY0Jvb2sgc3R5bGVzaGVldCBlbWl0cyB3YXJuaW5nIGNydWZ0IGluIHRoZSBvdXRwdXQgd2hlbgorIyB0aGlzIGlzIG5vdCBzZXQsIGFuZCBpZiBzZXQgaXQgc2hvd3MgYW4gYWJzb2x1dGUgbGluay4gIE9sZGVyCisjIHN0eWxlc2hlZXRzIHNpbXBseSBpZ25vcmUgdGhpcyBwYXJhbWV0ZXIuCisjCisjIERpc3Ryb3MgbWF5IHdhbnQgdG8gdXNlIE1BTl9CQVNFX1VSTD1maWxlOi8vL3BhdGgvdG8vZ2l0L2RvY3MvCisjIG9yIHNpbWlsYXIuCitpZm5kZWYgTUFOX0JBU0VfVVJMCitNQU5fQkFTRV9VUkwgPSBmaWxlOi8vJChodG1sZGlyKS8KK2VuZGlmCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLWJhc2UtdXJsLnhzbAorCisjIElmIHlvdXIgdGFyZ2V0IHN5c3RlbSB1c2VzIEdOVSBncm9mZiwgaXQgbWF5IHRyeSB0byByZW5kZXIKKyMgYXBvc3Ryb3BoZXMgYXMgYSAicHJldHR5IiBhcG9zdHJvcGhlIHVzaW5nIHVuaWNvZGUuICBUaGlzIGJyZWFrcworIyBjdXQmcGFzdGUsIHNvIHlvdSBzaG91bGQgc2V0IEdOVV9ST0ZGIHRvIGZvcmNlIHRoZW0gdG8gYmUgQVNDSUkKKyMgYXBvc3Ryb3BoZXMuICBVbmZvcnR1bmF0ZWx5IGRvZXMgbm90IHdvcmsgd2l0aCBub24tR05VIHJvZmYuCitpZmRlZiBHTlVfUk9GRgorWE1MVE9fRVhUUkEgKz0gLW0gbWFucGFnZS1xdW90ZS1hcG9zLnhzbAorZW5kaWYKKworaWZkZWYgVVNFX0FTQ0lJRE9DVE9SCitBU0NJSURPQyA9IGFzY2lpZG9jdG9yCitBU0NJSURPQ19DT05GID0KK0FTQ0lJRE9DX0hUTUwgPSB4aHRtbDUKK0FTQ0lJRE9DX0RPQ0JPT0sgPSBkb2Nib29rNQorQVNDSUlET0NfRVhUUkEgKz0gLWFjb21wYXQtbW9kZSAtYXRhYnNpemU9OAorQVNDSUlET0NfRVhUUkEgKz0gLUkuIC1yYXNjaWlkb2N0b3ItZXh0ZW5zaW9ucworQVNDSUlET0NfRVhUUkEgKz0gLWFsaXRkZD0nJlwjeDJkOyZcI3gyZDsnCitEQkxBVEVYX0NPTU1PTiA9CitYTUxUT19FWFRSQSArPSAtLXNraXAtdmFsaWRhdGlvbgorWE1MVE9fRVhUUkEgKz0gLXggbWFucGFnZS54c2wKK2VuZGlmCisKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKKyMgU2hlbGwgcXVvdGU7CitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKKworaWZkZWYgREVGQVVMVF9QQUdFUgorREVGQVVMVF9QQUdFUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9QQUdFUikpCitBU0NJSURPQ19FWFRSQSArPSAtYSAnZ2l0LWRlZmF1bHQtcGFnZXI9JChERUZBVUxUX1BBR0VSX1NRKScKK2VuZGlmCisKK2lmZGVmIERFRkFVTFRfRURJVE9SCitERUZBVUxUX0VESVRPUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9FRElUT1IpKQorQVNDSUlET0NfRVhUUkEgKz0gLWEgJ2dpdC1kZWZhdWx0LWVkaXRvcj0kKERFRkFVTFRfRURJVE9SX1NRKScKK2VuZGlmCisKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVRfQVNDSUlET0MJPSBAZWNobyAnICAgJyBBU0NJSURPQyAkQDsKKwlRVUlFVF9YTUxUTwk9IEBlY2hvICcgICAnIFhNTFRPICRAOworCVFVSUVUX0RCMlRFWEkJPSBAZWNobyAnICAgJyBEQjJURVhJICRAOworCVFVSUVUX01BS0VJTkZPCT0gQGVjaG8gJyAgICcgTUFLRUlORk8gJEA7CisJUVVJRVRfREJMQVRFWAk9IEBlY2hvICcgICAnIERCTEFURVggJEA7CisJUVVJRVRfWFNMVFBST0MJPSBAZWNobyAnICAgJyBYU0xUUFJPQyAkQDsKKwlRVUlFVF9HRU4JPSBAZWNobyAnICAgJyBHRU4gJEA7CisJUVVJRVRfTElOVAk9IEBlY2hvICcgICAnIExJTlQgJEA7CisJUVVJRVRfU1RERVJSCT0gMj4gL2Rldi9udWxsCisJUVVJRVRfU1VCRElSMAk9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEJPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJCQkgICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKK2VuZGlmCitlbmRpZgorCithbGw6IGh0bWwgbWFuCisKK2h0bWw6ICQoRE9DX0hUTUwpCisKK21hbjogbWFuMSBtYW41IG1hbjcKK21hbjE6ICQoRE9DX01BTjEpCittYW41OiAkKERPQ19NQU41KQorbWFuNzogJChET0NfTUFONykKKworaW5mbzogZ2l0LmluZm8gZ2l0bWFuLmluZm8KKworcGRmOiB1c2VyLW1hbnVhbC5wZGYKKworaW5zdGFsbDogaW5zdGFsbC1tYW4KKworaW5zdGFsbC1tYW46IG1hbgorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuNWRpcikKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChtYW43ZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0ICQoRE9DX01BTjEpICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtbSA2NDQgJChET0NfTUFONSkgJChERVNURElSKSQobWFuNWRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkKERPQ19NQU43KSAkKERFU1RESVIpJChtYW43ZGlyKQorCitpbnN0YWxsLWluZm86IGluZm8KKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChpbmZvZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0IGdpdC5pbmZvIGdpdG1hbi5pbmZvICQoREVTVERJUikkKGluZm9kaXIpCisJaWYgdGVzdCAtciAkKERFU1RESVIpJChpbmZvZGlyKS9kaXI7IHRoZW4gXAorCSAgJChJTlNUQUxMX0lORk8pIC0taW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgZ2l0LmluZm8gO1wKKwkgICQoSU5TVEFMTF9JTkZPKSAtLWluZm8tZGlyPSQoREVTVERJUikkKGluZm9kaXIpIGdpdG1hbi5pbmZvIDtcCisJZWxzZSBcCisJICBlY2hvICJObyBkaXJlY3RvcnkgZm91bmQgaW4gJChERVNURElSKSQoaW5mb2RpcikiID4mMiA7IFwKKwlmaQorCitpbnN0YWxsLXBkZjogcGRmCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQocGRmZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0IHVzZXItbWFudWFsLnBkZiAkKERFU1RESVIpJChwZGZkaXIpCisKK2luc3RhbGwtaHRtbDogaHRtbAorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtd2ViZG9jLnNoICQoREVTVERJUikkKGh0bWxkaXIpCisKKy4uL0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCisJJChRVUlFVF9TVUJESVIwKS4uLyAkKFFVSUVUX1NVQkRJUjEpIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vR0lULVZFUlNJT04tRklMRQorCisjCisjIERldGVybWluZSAiaW5jbHVkZTo6IiBmaWxlIHJlZmVyZW5jZXMgaW4gYXNjaWlkb2MgZmlsZXMuCisjCitkb2NkZXBfcHJlcmVxcyA9IFwKKwltZXJnZXRvb2xzLWxpc3QubWFkZSAkKG1lcmdldG9vbHNfdHh0KSBcCisJY21kLWxpc3QubWFkZSAkKGNtZHNfdHh0KQorCitkb2MuZGVwIDogJChkb2NkZXBfcHJlcmVxcykgJCh3aWxkY2FyZCAqLnR4dCkgJCh3aWxkY2FyZCBjb25maWcvKi50eHQpIGJ1aWxkLWRvY2RlcC5wZXJsCisJJChRVUlFVF9HRU4pJChSTSkgJEArICRAICYmIFwKKwkkKFBFUkxfUEFUSCkgLi9idWlsZC1kb2NkZXAucGVybCA+JEArICQoUVVJRVRfU1RERVJSKSAmJiBcCisJbXYgJEArICRACisKKy1pbmNsdWRlIGRvYy5kZXAKKworY21kc190eHQgPSBjbWRzLWFuY2lsbGFyeWludGVycm9nYXRvcnMudHh0IFwKKwljbWRzLWFuY2lsbGFyeW1hbmlwdWxhdG9ycy50eHQgXAorCWNtZHMtbWFpbnBvcmNlbGFpbi50eHQgXAorCWNtZHMtcGx1bWJpbmdpbnRlcnJvZ2F0b3JzLnR4dCBcCisJY21kcy1wbHVtYmluZ21hbmlwdWxhdG9ycy50eHQgXAorCWNtZHMtc3luY2hpbmdyZXBvc2l0b3JpZXMudHh0IFwKKwljbWRzLXN5bmNoZWxwZXJzLnR4dCBcCisJY21kcy1wdXJlaGVscGVycy50eHQgXAorCWNtZHMtZm9yZWlnbnNjbWludGVyZmFjZS50eHQKKworJChjbWRzX3R4dCk6IGNtZC1saXN0Lm1hZGUKKworY21kLWxpc3QubWFkZTogY21kLWxpc3QucGVybCAuLi9jb21tYW5kLWxpc3QudHh0ICQoTUFOMV9UWFQpCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJiYgXAorCSQoUEVSTF9QQVRIKSAuL2NtZC1saXN0LnBlcmwgLi4vY29tbWFuZC1saXN0LnR4dCAkKFFVSUVUX1NUREVSUikgJiYgXAorCWRhdGUgPiRACisKK21lcmdldG9vbHNfdHh0ID0gbWVyZ2V0b29scy1kaWZmLnR4dCBtZXJnZXRvb2xzLW1lcmdlLnR4dAorCiskKG1lcmdldG9vbHNfdHh0KTogbWVyZ2V0b29scy1saXN0Lm1hZGUKKworbWVyZ2V0b29scy1saXN0Lm1hZGU6IC4uL2dpdC1tZXJnZXRvb2wtLWxpYi5zaCAkKHdpbGRjYXJkIC4uL21lcmdldG9vbHMvKikKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAmJiBcCisJJChTSEVMTF9QQVRIKSAtYyAnTUVSR0VfVE9PTFNfRElSPS4uL21lcmdldG9vbHMgJiYgXAorCQkuIC4uL2dpdC1tZXJnZXRvb2wtLWxpYi5zaCAmJiBcCisJCXNob3dfdG9vbF9uYW1lcyBjYW5fZGlmZiAiKiAiIHx8IDonID5tZXJnZXRvb2xzLWRpZmYudHh0ICYmIFwKKwkkKFNIRUxMX1BBVEgpIC1jICdNRVJHRV9UT09MU19ESVI9Li4vbWVyZ2V0b29scyAmJiBcCisJCS4gLi4vZ2l0LW1lcmdldG9vbC0tbGliLnNoICYmIFwKKwkJc2hvd190b29sX25hbWVzIGNhbl9tZXJnZSAiKiAiIHx8IDonID5tZXJnZXRvb2xzLW1lcmdlLnR4dCAmJiBcCisJZGF0ZSA+JEAKKworVFJBQ0tfQVNDSUlET0NGTEFHUyA9ICQoc3Vic3QgJywnXCcnLCQoQVNDSUlET0NfQ09NTU9OKTokKEFTQ0lJRE9DX0hUTUwpOiQoQVNDSUlET0NfRE9DQk9PSykpCisKK0dJVC1BU0NJSURPQ0ZMQUdTOiBGT1JDRQorCUBGTEFHUz0nJChUUkFDS19BU0NJSURPQ0ZMQUdTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCBHSVQtQVNDSUlET0NGTEFHUyAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgYXNjaWlkb2MgZmxhZ3MiOyBcCisJCWVjaG8gIiQkRkxBR1MiID5HSVQtQVNDSUlET0NGTEFHUzsgXAorICAgICAgICAgICAgZmkKKworY2xlYW46CisJJChSTSkgKi54bWwgKi54bWwrICouaHRtbCAqLmh0bWwrICouMSAqLjUgKi43CisJJChSTSkgKi50ZXhpICoudGV4aSsgKi50ZXhpKysgZ2l0LmluZm8gZ2l0bWFuLmluZm8KKwkkKFJNKSAqLnBkZgorCSQoUk0pIGhvd3RvLWluZGV4LnR4dCBob3d0by8qLmh0bWwgZG9jLmRlcAorCSQoUk0pIHRlY2huaWNhbC8qLmh0bWwgdGVjaG5pY2FsL2FwaS1pbmRleC50eHQKKwkkKFJNKSBTdWJtaXR0aW5nUGF0Y2hlcy50eHQKKwkkKFJNKSAkKGNtZHNfdHh0KSAkKG1lcmdldG9vbHNfdHh0KSAqLm1hZGUKKwkkKFJNKSBtYW5wYWdlLWJhc2UtdXJsLnhzbAorCSQoUk0pIEdJVC1BU0NJSURPQ0ZMQUdTCisKKyQoTUFOX0hUTUwpOiAlLmh0bWwgOiAlLnR4dCBhc2NpaWRvYy5jb25mIGFzY2lpZG9jdG9yLWV4dGVuc2lvbnMucmIgR0lULUFTQ0lJRE9DRkxBR1MKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoUk0pICRAKyAkQCAmJiBcCisJJChUWFRfVE9fSFRNTCkgLWQgbWFucGFnZSAtbyAkQCsgJDwgJiYgXAorCW12ICRAKyAkQAorCiskKE9CU09MRVRFX0hUTUwpOiAlLmh0bWwgOiAlLnR4dG8gYXNjaWlkb2MuY29uZiBhc2NpaWRvY3Rvci1leHRlbnNpb25zLnJiIEdJVC1BU0NJSURPQ0ZMQUdTCisJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXAorCSQoVFhUX1RPX0hUTUwpIC1vICRAKyAkPCAmJiBcCisJbXYgJEArICRACisKK21hbnBhZ2UtYmFzZS11cmwueHNsOiBtYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgorCSQoUVVJRVRfR0VOKXNlZCAic3xAQE1BTl9CQVNFX1VSTEBAfCQoTUFOX0JBU0VfVVJMKXwiICQ8ID4gJEAKKworJS4xICUuNSAlLjcgOiAlLnhtbCBtYW5wYWdlLWJhc2UtdXJsLnhzbCAkKHdpbGRjYXJkIG1hbnBhZ2UqLnhzbCkKKwkkKFFVSUVUX1hNTFRPKSQoUk0pICRAICYmIFwKKwkkKFhNTFRPKSAtbSAkKE1BTlBBR0VfWFNMKSAkKFhNTFRPX0VYVFJBKSBtYW4gJDwKKworJS54bWwgOiAlLnR4dCBhc2NpaWRvYy5jb25mIGFzY2lpZG9jdG9yLWV4dGVuc2lvbnMucmIgR0lULUFTQ0lJRE9DRkxBR1MKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoUk0pICRAKyAkQCAmJiBcCisJJChUWFRfVE9fWE1MKSAtZCBtYW5wYWdlIC1vICRAKyAkPCAmJiBcCisJbXYgJEArICRACisKK3VzZXItbWFudWFsLnhtbDogdXNlci1tYW51YWwudHh0IHVzZXItbWFudWFsLmNvbmYgYXNjaWlkb2N0b3ItZXh0ZW5zaW9ucy5yYiBHSVQtQVNDSUlET0NGTEFHUworCSQoUVVJRVRfQVNDSUlET0MpJChSTSkgJEArICRAICYmIFwKKwkkKFRYVF9UT19YTUwpIC1kIGJvb2sgLW8gJEArICQ8ICYmIFwKKwltdiAkQCsgJEAKKwordGVjaG5pY2FsL2FwaS1pbmRleC50eHQ6IHRlY2huaWNhbC9hcGktaW5kZXgtc2tlbC50eHQgXAorCXRlY2huaWNhbC9hcGktaW5kZXguc2ggJChwYXRzdWJzdCAlLCUudHh0LCQoQVBJX0RPQ1MpKQorCSQoUVVJRVRfR0VOKWNkIHRlY2huaWNhbCAmJiAnJChTSEVMTF9QQVRIX1NRKScgLi9hcGktaW5kZXguc2gKKwordGVjaG5pY2FsLyUuaHRtbDogQVNDSUlET0NfRVhUUkEgKz0gLWEgZ2l0LXJlbGF0aXZlLWh0bWwtcHJlZml4PS4uLworJChwYXRzdWJzdCAlLCUuaHRtbCwkKEFQSV9ET0NTKSB0ZWNobmljYWwvYXBpLWluZGV4ICQoVEVDSF9ET0NTKSk6ICUuaHRtbCA6ICUudHh0IFwKKwlhc2NpaWRvYy5jb25mIEdJVC1BU0NJSURPQ0ZMQUdTCisJJChRVUlFVF9BU0NJSURPQykkKFRYVF9UT19IVE1MKSAkKi50eHQKKworU3VibWl0dGluZ1BhdGNoZXMudHh0OiBTdWJtaXR0aW5nUGF0Y2hlcworCSQoUVVJRVRfR0VOKSBjcCAkPCAkQAorCitYU0xUID0gZG9jYm9vay54c2wKK1hTTFRPUFRTID0gLS14aW5jbHVkZSAtLXN0cmluZ3BhcmFtIGh0bWwuc3R5bGVzaGVldCBkb2Nib29rLXhzbC5jc3MKKwordXNlci1tYW51YWwuaHRtbDogdXNlci1tYW51YWwueG1sICQoWFNMVCkKKwkkKFFVSUVUX1hTTFRQUk9DKSQoUk0pICRAKyAkQCAmJiBcCisJeHNsdHByb2MgJChYU0xUT1BUUykgLW8gJEArICQoWFNMVCkgJDwgJiYgXAorCW12ICRAKyAkQAorCitnaXQuaW5mbzogdXNlci1tYW51YWwudGV4aQorCSQoUVVJRVRfTUFLRUlORk8pJChNQUtFSU5GTykgLS1uby1zcGxpdCAtbyAkQCB1c2VyLW1hbnVhbC50ZXhpCisKK3VzZXItbWFudWFsLnRleGk6IHVzZXItbWFudWFsLnhtbAorCSQoUVVJRVRfREIyVEVYSSkkKFJNKSAkQCsgJEAgJiYgXAorCSQoRE9DQk9PSzJYX1RFWEkpIHVzZXItbWFudWFsLnhtbCAtLWVuY29kaW5nPVVURi04IC0tdG8tc3Rkb3V0ID4kQCsrICYmIFwKKwkkKFBFUkxfUEFUSCkgZml4LXRleGkucGVybCA8JEArKyA+JEArICYmIFwKKwlybSAkQCsrICYmIFwKKwltdiAkQCsgJEAKKwordXNlci1tYW51YWwucGRmOiB1c2VyLW1hbnVhbC54bWwKKwkkKFFVSUVUX0RCTEFURVgpJChSTSkgJEArICRAICYmIFwKKwkkKERCTEFURVgpIC1vICRAKyAkKERCTEFURVhfQ09NTU9OKSAkPCAmJiBcCisJbXYgJEArICRACisKK2dpdG1hbi50ZXhpOiAkKE1BTl9YTUwpIGNhdC10ZXhpLnBlcmwgdGV4aS54c2wKKwkkKFFVSUVUX0RCMlRFWEkpJChSTSkgJEArICRAICYmIFwKKwkoJChmb3JlYWNoIHhtbCwkKHNvcnQgJChNQU5fWE1MKSkseHNsdHByb2MgLW8gJCh4bWwpKyB0ZXhpLnhzbCAkKHhtbCkgJiYgXAorCQkkKERPQ0JPT0syWF9URVhJKSAtLWVuY29kaW5nPVVURi04IC0tdG8tc3Rkb3V0ICQoeG1sKSsgJiYgXAorCQlybSAkKHhtbCkrICYmKSB0cnVlKSA+ICRAKysgJiYgXAorCSQoUEVSTF9QQVRIKSBjYXQtdGV4aS5wZXJsICRAIDwkQCsrID4kQCsgJiYgXAorCXJtICRAKysgJiYgXAorCW12ICRAKyAkQAorCitnaXRtYW4uaW5mbzogZ2l0bWFuLnRleGkKKwkkKFFVSUVUX01BS0VJTkZPKSQoTUFLRUlORk8pIC0tbm8tc3BsaXQgLS1uby12YWxpZGF0ZSAkKi50ZXhpCisKKyQocGF0c3Vic3QgJS50eHQsJS50ZXhpLCQoTUFOX1RYVCkpOiAlLnRleGkgOiAlLnhtbAorCSQoUVVJRVRfREIyVEVYSSkkKFJNKSAkQCsgJEAgJiYgXAorCSQoRE9DQk9PSzJYX1RFWEkpIC0tdG8tc3Rkb3V0ICQqLnhtbCA+JEArICYmIFwKKwltdiAkQCsgJEAKKworaG93dG8taW5kZXgudHh0OiBob3d0by1pbmRleC5zaCAkKHdpbGRjYXJkIGhvd3RvLyoudHh0KQorCSQoUVVJRVRfR0VOKSQoUk0pICRAKyAkQCAmJiBcCisJJyQoU0hFTExfUEFUSF9TUSknIC4vaG93dG8taW5kZXguc2ggJChzb3J0ICQod2lsZGNhcmQgaG93dG8vKi50eHQpKSA+JEArICYmIFwKKwltdiAkQCsgJEAKKworJChwYXRzdWJzdCAlLCUuaHRtbCwkKEFSVElDTEVTKSkgOiAlLmh0bWwgOiAlLnR4dAorCSQoUVVJRVRfQVNDSUlET0MpJChUWFRfVE9fSFRNTCkgJCoudHh0CisKK1dFQkRPQ19ERVNUID0gL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MKKworaG93dG8vJS5odG1sOiBBU0NJSURPQ19FWFRSQSArPSAtYSBnaXQtcmVsYXRpdmUtaHRtbC1wcmVmaXg9Li4vCiskKHBhdHN1YnN0ICUudHh0LCUuaHRtbCwkKHdpbGRjYXJkIGhvd3RvLyoudHh0KSk6ICUuaHRtbCA6ICUudHh0IEdJVC1BU0NJSURPQ0ZMQUdTCisJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXAorCXNlZCAtZSAnMSwvXiQkL2QnICQ8IHwgXAorCSQoVFhUX1RPX0hUTUwpIC0gPiRAKyAmJiBcCisJbXYgJEArICRACisKK2luc3RhbGwtd2ViZG9jIDogaHRtbAorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtd2ViZG9jLnNoICQoV0VCRE9DX0RFU1QpCisKKyMgWW91IG11c3QgaGF2ZSBhIGNsb25lIG9mICdnaXQtaHRtbGRvY3MnIGFuZCAnZ2l0LW1hbnBhZ2VzJyByZXBvc2l0b3JpZXMKKyMgbmV4dCB0byB0aGUgJ2dpdCcgcmVwb3NpdG9yeSBpdHNlbGYgZm9yIHRoZSBmb2xsb3dpbmcgdG8gd29yay4KKworcXVpY2staW5zdGFsbDogcXVpY2staW5zdGFsbC1tYW4KKworcmVxdWlyZS1tYW5yZXBvOjoKKwlAaWYgdGVzdCAhIC1kICQoTUFOX1JFUE8pOyBcCisJdGhlbiBlY2hvICJnaXQtbWFucGFnZXMgcmVwb3NpdG9yeSBtdXN0IGV4aXN0IGF0ICQoTUFOX1JFUE8pIjsgZXhpdCAxOyBmaQorCitxdWljay1pbnN0YWxsLW1hbjogcmVxdWlyZS1tYW5yZXBvCisJJyQoU0hFTExfUEFUSF9TUSknIC4vaW5zdGFsbC1kb2MtcXVpY2suc2ggJChNQU5fUkVQTykgJChERVNURElSKSQobWFuZGlyKSAkKEdJVF9NQU5fUkVGKQorCityZXF1aXJlLWh0bWxyZXBvOjoKKwlAaWYgdGVzdCAhIC1kICQoSFRNTF9SRVBPKTsgXAorCXRoZW4gZWNobyAiZ2l0LWh0bWxkb2NzIHJlcG9zaXRvcnkgbXVzdCBleGlzdCBhdCAkKEhUTUxfUkVQTykiOyBleGl0IDE7IGZpCisKK3F1aWNrLWluc3RhbGwtaHRtbDogcmVxdWlyZS1odG1scmVwbworCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtZG9jLXF1aWNrLnNoICQoSFRNTF9SRVBPKSAkKERFU1RESVIpJChodG1sZGlyKSAkKEdJVF9NQU5fUkVGKQorCitwcmludC1tYW4xOgorCUBmb3IgaSBpbiAkKE1BTjFfVFhUKTsgZG8gZWNobyAkJGk7IGRvbmUKKworbGludC1kb2NzOjoKKwkkKFFVSUVUX0xJTlQpJChQRVJMX1BBVEgpIGxpbnQtZ2l0bGluay5wZXJsCisKK2lmZXEgKCQod2lsZGNhcmQgcG8vTWFrZWZpbGUpLHBvL01ha2VmaWxlKQorZG9jLWwxMG4gaW5zdGFsbC1sMTBuOjoKKwkkKE1BS0UpIC1DIHBvICRACitlbmRpZgorCisuUEhPTlk6IEZPUkNFCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjcyNzRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dApAQCAtMCwwICsxLDEyMTcgQEAKK015IEZpcnN0IENvbnRyaWJ1dGlvbiB0byB0aGUgR2l0IFByb2plY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpzZWN0YW5jaG9yczoKKworW1tzdW1tYXJ5XV0KKz09IFN1bW1hcnkKKworVGhpcyBpcyBhIHR1dG9yaWFsIGRlbW9uc3RyYXRpbmcgdGhlIGVuZC10by1lbmQgd29ya2Zsb3cgb2YgY3JlYXRpbmcgYSBjaGFuZ2UgdG8KK3RoZSBHaXQgdHJlZSwgc2VuZGluZyBpdCBmb3IgcmV2aWV3LCBhbmQgbWFraW5nIGNoYW5nZXMgYmFzZWQgb24gY29tbWVudHMuCisKK1tbcHJlcmVxdWlzaXRlc11dCis9PT0gUHJlcmVxdWlzaXRlcworCitUaGlzIHR1dG9yaWFsIGFzc3VtZXMgeW91J3JlIGFscmVhZHkgZmFpcmx5IGZhbWlsaWFyIHdpdGggdXNpbmcgR2l0IHRvIG1hbmFnZQorc291cmNlIGNvZGUuICBUaGUgR2l0IHdvcmtmbG93IHN0ZXBzIHdpbGwgbGFyZ2VseSByZW1haW4gdW5leHBsYWluZWQuCisKK1tbcmVsYXRlZC1yZWFkaW5nXV0KKz09PSBSZWxhdGVkIFJlYWRpbmcKKworVGhpcyB0dXRvcmlhbCBhaW1zIHRvIHN1bW1hcml6ZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cywgYnV0IHRoZSByZWFkZXIgbWF5IGZpbmQKK3VzZWZ1bCBhZGRpdGlvbmFsIGNvbnRleHQ6CisKKy0gYERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXNgCistIGBEb2N1bWVudGF0aW9uL2hvd3RvL25ldy1jb21tYW5kLnR4dGAKKworW1tnZXR0aW5nLWhlbHBdXQorPT09IEdldHRpbmcgSGVscAorCitJZiB5b3UgZ2V0IHN0dWNrLCB5b3UgY2FuIHNlZWsgaGVscCBpbiB0aGUgZm9sbG93aW5nIHBsYWNlcy4KKworPT09PSBnaXRAdmdlci5rZXJuZWwub3JnCisKK1RoaXMgaXMgdGhlIG1haW4gR2l0IHByb2plY3QgbWFpbGluZyBsaXN0IHdoZXJlIGNvZGUgcmV2aWV3cywgdmVyc2lvbgorYW5ub3VuY2VtZW50cywgZGVzaWduIGRpc2N1c3Npb25zLCBhbmQgbW9yZSB0YWtlIHBsYWNlLiBUaG9zZSBpbnRlcmVzdGVkIGluCitjb250cmlidXRpbmcgYXJlIHdlbGNvbWUgdG8gcG9zdCBxdWVzdGlvbnMgaGVyZS4gVGhlIEdpdCBsaXN0IHJlcXVpcmVzCitwbGFpbi10ZXh0LW9ubHkgZW1haWxzIGFuZCBwcmVmZXJzIGlubGluZSBhbmQgYm90dG9tLXBvc3Rpbmcgd2hlbiByZXBseWluZyB0bworbWFpbDsgeW91IHdpbGwgYmUgQ0MnZCBpbiBhbGwgcmVwbGllcyB0byB5b3UuIE9wdGlvbmFsbHksIHlvdSBjYW4gc3Vic2NyaWJlIHRvCit0aGUgbGlzdCBieSBzZW5kaW5nIGFuIGVtYWlsIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcgd2l0aCAic3Vic2NyaWJlIGdpdCIKK2luIHRoZSBib2R5LiBUaGUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0W2FyY2hpdmVdIG9mIHRoaXMgbWFpbGluZyBsaXN0IGlzCithdmFpbGFibGUgdG8gdmlldyBpbiBhIGJyb3dzZXIuCisKKz09PT0gaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8jIWZvcnVtL2dpdC1tZW50b3JpbmdbZ2l0LW1lbnRvcmluZ0Bnb29nbGVncm91cHMuY29tXQorCitUaGlzIG1haWxpbmcgbGlzdCBpcyB0YXJnZXRlZCB0byBuZXcgY29udHJpYnV0b3JzIGFuZCB3YXMgY3JlYXRlZCBhcyBhIHBsYWNlIHRvCitwb3N0IHF1ZXN0aW9ucyBhbmQgcmVjZWl2ZSBhbnN3ZXJzIG91dHNpZGUgb2YgdGhlIHB1YmxpYyBleWUgb2YgdGhlIG1haW4gbGlzdC4KK1ZldGVyYW4gY29udHJpYnV0b3JzIHdobyBhcmUgZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhlbHBpbmcgbWVudG9yIG5ld2NvbWVycworYXJlIHByZXNlbnQgb24gdGhlIGxpc3QuIEluIG9yZGVyIHRvIGF2b2lkIHNlYXJjaCBpbmRleGVycywgZ3JvdXAgbWVtYmVyc2hpcCBpcworcmVxdWlyZWQgdG8gdmlldyBtZXNzYWdlczsgYW55b25lIGNhbiBqb2luIGFuZCBubyBhcHByb3ZhbCBpcyByZXF1aXJlZC4KKworPT09PSBodHRwczovL3dlYmNoYXQuZnJlZW5vZGUubmV0LyNnaXQtZGV2ZWxbI2dpdC1kZXZlbF0gb24gRnJlZW5vZGUKKworVGhpcyBJUkMgY2hhbm5lbCBpcyBmb3IgY29udmVyc2F0aW9ucyBiZXR3ZWVuIEdpdCBjb250cmlidXRvcnMuIElmIHNvbWVvbmUgaXMKK2N1cnJlbnRseSBvbmxpbmUgYW5kIGtub3dzIHRoZSBhbnN3ZXIgdG8geW91ciBxdWVzdGlvbiwgeW91IGNhbiByZWNlaXZlIGhlbHAKK2luIHJlYWwgdGltZS4gT3RoZXJ3aXNlLCB5b3UgY2FuIHJlYWQgdGhlCitodHRwczovL2NvbGFidGkub3JnL2lyY2xvZ2dlci9pcmNsb2dnZXJfbG9ncy9naXQtZGV2ZWxbc2Nyb2xsYmFja10gdG8gc2VlCit3aGV0aGVyIHNvbWVvbmUgYW5zd2VyZWQgeW91LiBJUkMgZG9lcyBub3QgYWxsb3cgb2ZmbGluZSBwcml2YXRlIG1lc3NhZ2luZywgc28KK2lmIHlvdSB0cnkgdG8gcHJpdmF0ZSBtZXNzYWdlIHNvbWVvbmUgYW5kIHRoZW4gbG9nIG91dCBvZiBJUkMsIHRoZXkgY2Fubm90CityZXNwb25kIHRvIHlvdS4gSXQncyBiZXR0ZXIgdG8gYXNrIHlvdXIgcXVlc3Rpb25zIGluIHRoZSBjaGFubmVsIHNvIHRoYXQgeW91CitjYW4gYmUgYW5zd2VyZWQgaWYgeW91IGRpc2Nvbm5lY3QgYW5kIHNvIHRoYXQgb3RoZXJzIGNhbiBsZWFybiBmcm9tIHRoZQorY29udmVyc2F0aW9uLgorCitbW2dldHRpbmctc3RhcnRlZF1dCis9PSBHZXR0aW5nIFN0YXJ0ZWQKKworW1tjbG9uaW5nXV0KKz09PSBDbG9uZSB0aGUgR2l0IFJlcG9zaXRvcnkKKworR2l0IGlzIG1pcnJvcmVkIGluIGEgbnVtYmVyIG9mIGxvY2F0aW9ucy4gQ2xvbmUgdGhlIHJlcG9zaXRvcnkgZnJvbSBvbmUgb2YgdGhlbTsKK2h0dHBzOi8vZ2l0LXNjbS5jb20vZG93bmxvYWRzIHN1Z2dlc3RzIG9uZSBvZiB0aGUgYmVzdCBwbGFjZXMgdG8gY2xvbmUgZnJvbSBpcwordGhlIG1pcnJvciBvbiBHaXRIdWIuCisKKy0tLS0KKyQgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0IGdpdAorJCBjZCBnaXQKKy0tLS0KKworW1tkZXBlbmRlbmNpZXNdXQorPT09IEluc3RhbGxpbmcgRGVwZW5kZW5jaWVzCisKK1RvIGJ1aWxkIEdpdCBmcm9tIHNvdXJjZSwgeW91IG5lZWQgdG8gaGF2ZSBhIGhhbmRmdWwgb2YgZGVwZW5kZW5jaWVzIGluc3RhbGxlZAorb24geW91ciBzeXN0ZW0uIEZvciBhIGhpbnQgb2Ygd2hhdCdzIG5lZWRlZCwgeW91IGNhbiB0YWtlIGEgbG9vayBhdAorYElOU1RBTExgLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzZWN0aW9uIGFib3V0IEdpdCdzIGRlcGVuZGVuY2llcyBvbgorZXh0ZXJuYWwgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4gVGhhdCBkb2N1bWVudCBtZW50aW9ucyBhIHdheSB0byAidGVzdC1kcml2ZSIKK291ciBmcmVzaGx5IGJ1aWx0IEdpdCB3aXRob3V0IGluc3RhbGxpbmc7IHRoYXQncyB0aGUgbWV0aG9kIHdlJ2xsIGJlIHVzaW5nIGluCit0aGlzIHR1dG9yaWFsLgorCitNYWtlIHN1cmUgdGhhdCB5b3VyIGVudmlyb25tZW50IGhhcyBldmVyeXRoaW5nIHlvdSBuZWVkIGJ5IGJ1aWxkaW5nIHlvdXIgYnJhbmQKK25ldyBjbG9uZSBvZiBHaXQgZnJvbSB0aGUgYWJvdmUgc3RlcDoKKworLS0tLQorJCBtYWtlCistLS0tCisKK05PVEU6IFRoZSBHaXQgYnVpbGQgaXMgcGFyYWxsZWxpemFibGUuIGAtaiNgIGlzIG5vdCBpbmNsdWRlZCBhYm92ZSBidXQgeW91IGNhbgordXNlIGl0IGFzIHlvdSBwcmVmZXIsIGhlcmUgYW5kIGVsc2V3aGVyZS4KKworW1tpZGVudGlmeS1wcm9ibGVtXV0KKz09PSBJZGVudGlmeSBQcm9ibGVtIHRvIFNvbHZlCisKKy8vLy8KK1VzZSArIHRvIGluZGljYXRlIGZpeGVkLXdpZHRoIGhlcmU7IGNvdWxkbid0IGdldCBgIHRvIHdvcmsgbmljZWx5IHdpdGggdGhlCitxdW90ZXMgYXJvdW5kICJQb255IFNheWluZyAnVW0sIEhlbGxvJyIuCisvLy8vCitJbiB0aGlzIHR1dG9yaWFsLCB3ZSB3aWxsIGFkZCBhIG5ldyBjb21tYW5kLCArZ2l0IHBzdWgrLCBzaG9ydCBmb3IgYGBQb255IFNheWluZworYFVtLCBIZWxsbycnJyAtIGEgZmVhdHVyZSB3aGljaCBoYXMgZ29uZSB1bmltcGxlbWVudGVkIGRlc3BpdGUgYSBoaWdoIGZyZXF1ZW5jeQorb2YgaW52b2NhdGlvbiBkdXJpbmcgdXNlcnMnIHR5cGljYWwgZGFpbHkgd29ya2Zsb3cuCisKKyhXZSd2ZSBzZWVuIHNvbWUgb3RoZXIgZWZmb3J0IGluIHRoaXMgc3BhY2Ugd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gb2YgcG9wdWxhcgorY29tbWFuZHMgc3VjaCBhcyBgc2xgLikKKworW1tzZXR1cC13b3Jrc3BhY2VdXQorPT09IFNldCBVcCBZb3VyIFdvcmtzcGFjZQorCitMZXQncyBzdGFydCBieSBtYWtpbmcgYSBkZXZlbG9wbWVudCBicmFuY2ggdG8gd29yayBvbiBvdXIgY2hhbmdlcy4gUGVyCitgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlc2AsIHNpbmNlIGEgYnJhbmQgbmV3IGNvbW1hbmQgaXMgYSBuZXcgZmVhdHVyZSwKK2l0J3MgZmluZSB0byBiYXNlIHlvdXIgd29yayBvbiBgbWFzdGVyYC4gSG93ZXZlciwgaW4gdGhlIGZ1dHVyZSBmb3IgYnVnZml4ZXMsCitldGMuLCB5b3Ugc2hvdWxkIGNoZWNrIHRoYXQgZG9jdW1lbnQgYW5kIGJhc2UgaXQgb24gdGhlIGFwcHJvcHJpYXRlIGJyYW5jaC4KKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRvY3VtZW50LCB3ZSB3aWxsIGJhc2UgYWxsIG91ciB3b3JrIG9uIHRoZSBgbWFzdGVyYAorYnJhbmNoIG9mIHRoZSB1cHN0cmVhbSBwcm9qZWN0LiBDcmVhdGUgdGhlIGBwc3VoYCBicmFuY2ggeW91IHdpbGwgdXNlIGZvcgorZGV2ZWxvcG1lbnQgbGlrZSBzbzoKKworLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgcHN1aCBvcmlnaW4vbWFzdGVyCistLS0tCisKK1dlJ2xsIG1ha2UgYSBudW1iZXIgb2YgY29tbWl0cyBoZXJlIGluIG9yZGVyIHRvIGRlbW9uc3RyYXRlIGhvdyB0byBzZW5kIGEgdG9waWMKK3dpdGggbXVsdGlwbGUgcGF0Y2hlcyB1cCBmb3IgcmV2aWV3IHNpbXVsdGFuZW91c2x5LgorCitbW2NvZGUtaXQtdXBdXQorPT0gQ29kZSBJdCBVcCEKKworTk9URTogQSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGF0CitodHRwczovL2dpdGh1Yi5jb20vbmFzYW11ZmZpbi9naXQvdHJlZS9wc3VoLgorCitbW2FkZC1uZXctY29tbWFuZF1dCis9PT0gQWRkaW5nIGEgTmV3IENvbW1hbmQKKworTG90cyBvZiB0aGUgc3ViY29tbWFuZHMgYXJlIHdyaXR0ZW4gYXMgYnVpbHRpbnMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlCitpbXBsZW1lbnRlZCBpbiBDIGFuZCBjb21waWxlZCBpbnRvIHRoZSBtYWluIGBnaXRgIGV4ZWN1dGFibGUuIEltcGxlbWVudGluZyB0aGUKK3Zlcnkgc2ltcGxlIGBwc3VoYCBjb21tYW5kIGFzIGEgYnVpbHQtaW4gd2lsbCBkZW1vbnN0cmF0ZSB0aGUgc3RydWN0dXJlIG9mIHRoZQorY29kZWJhc2UsIHRoZSBpbnRlcm5hbCBBUEksIGFuZCB0aGUgcHJvY2VzcyBvZiB3b3JraW5nIHRvZ2V0aGVyIGFzIGEgY29udHJpYnV0b3IKK3dpdGggdGhlIHJldmlld2VycyBhbmQgbWFpbnRhaW5lciB0byBpbnRlZ3JhdGUgdGhpcyBjaGFuZ2UgaW50byB0aGUgc3lzdGVtLgorCitCdWlsdC1pbiBzdWJjb21tYW5kcyBhcmUgdHlwaWNhbGx5IGltcGxlbWVudGVkIGluIGEgZnVuY3Rpb24gbmFtZWQgImNtZF8iCitmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUgc3ViY29tbWFuZCwgaW4gYSBzb3VyY2UgZmlsZSBuYW1lZCBhZnRlciB0aGUKK3N1YmNvbW1hbmQgYW5kIGNvbnRhaW5lZCB3aXRoaW4gYGJ1aWx0aW4vYC4gU28gaXQgbWFrZXMgc2Vuc2UgdG8gaW1wbGVtZW50IHlvdXIKK2NvbW1hbmQgaW4gYGJ1aWx0aW4vcHN1aC5jYC4gQ3JlYXRlIHRoYXQgZmlsZSwgYW5kIHdpdGhpbiBpdCwgd3JpdGUgdGhlIGVudHJ5Citwb2ludCBmb3IgeW91ciBjb21tYW5kIGluIGEgZnVuY3Rpb24gbWF0Y2hpbmcgdGhlIHN0eWxlIGFuZCBzaWduYXR1cmU6CisKKy0tLS0KK2ludCBjbWRfcHN1aChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKKy0tLS0KKworV2UnbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUgZGVjbGFyYXRpb24gb2YgcHN1aDsgb3BlbiB1cCBgYnVpbHRpbi5oYCwgZmluZCB0aGUKK2RlY2xhcmF0aW9uIGZvciBgY21kX3B1bGxgLCBhbmQgYWRkIGEgbmV3IGxpbmUgZm9yIGBwc3VoYCBpbW1lZGlhdGVseSBiZWZvcmUgaXQsCitpbiBvcmRlciB0byBrZWVwIHRoZSBkZWNsYXJhdGlvbnMgYWxwaGFiZXRpY2FsbHkgc29ydGVkOgorCistLS0tCitpbnQgY21kX3BzdWgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworLS0tLQorCitCZSBzdXJlIHRvIGAjaW5jbHVkZSAiYnVpbHRpbi5oImAgaW4geW91ciBgcHN1aC5jYC4KKworR28gYWhlYWQgYW5kIGFkZCBzb21lIHRocm93YXdheSBwcmludGYgdG8gdGhhdCBmdW5jdGlvbi4gVGhpcyBpcyBhIGRlY2VudAorc3RhcnRpbmcgcG9pbnQgYXMgd2UgY2FuIG5vdyBhZGQgYnVpbGQgcnVsZXMgYW5kIHJlZ2lzdGVyIHRoZSBjb21tYW5kLgorCitOT1RFOiBZb3VyIHRocm93YXdheSB0ZXh0LCBhcyB3ZWxsIGFzIG11Y2ggb2YgdGhlIHRleHQgeW91IHdpbGwgYmUgYWRkaW5nIG92ZXIKK3RoZSBjb3Vyc2Ugb2YgdGhpcyB0dXRvcmlhbCwgaXMgdXNlci1mYWNpbmcuIFRoYXQgbWVhbnMgaXQgbmVlZHMgdG8gYmUKK2xvY2FsaXphYmxlLiBUYWtlIGEgbG9vayBhdCBgcG8vUkVBRE1FYCB1bmRlciAiTWFya2luZyBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbiIuCitUaHJvdWdob3V0IHRoZSB0dXRvcmlhbCwgd2Ugd2lsbCBtYXJrIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uIGFzIG5lY2Vzc2FyeTsgeW91CitzaG91bGQgYWxzbyBkbyBzbyB3aGVuIHdyaXRpbmcgeW91ciB1c2VyLWZhY2luZyBjb21tYW5kcyBpbiB0aGUgZnV0dXJlLgorCistLS0tCitpbnQgY21kX3BzdWgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJcHJpbnRmKF8oIlBvbnkgc2F5aW5nIGhlbGxvIGdvZXMgaGVyZS5cbiIpKTsKKwlyZXR1cm4gMDsKK30KKy0tLS0KKworTGV0J3MgdHJ5IHRvIGJ1aWxkIGl0LiAgT3BlbiBgTWFrZWZpbGVgLCBmaW5kIHdoZXJlIGBidWlsdGluL3B1bGwub2AgaXMgYWRkZWQKK3RvIGBCVUlMVElOX09CSlNgLCBhbmQgYWRkIGBidWlsdGluL3BzdWgub2AgaW4gdGhlIHNhbWUgd2F5IG5leHQgdG8gaXQgaW4KK2FscGhhYmV0aWNhbCBvcmRlci4gT25jZSB5b3UndmUgZG9uZSBzbywgbW92ZSB0byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBhbmQKK2J1aWxkIHNpbXBseSB3aXRoIGBtYWtlYC4gQWxzbyBhZGQgdGhlIGBERVZFTE9QRVI9MWAgdmFyaWFibGUgdG8gdHVybiBvbgorc29tZSBhZGRpdGlvbmFsIHdhcm5pbmdzOgorCistLS0tCiskIGVjaG8gREVWRUxPUEVSPTEgPmNvbmZpZy5tYWsKKyQgbWFrZQorLS0tLQorCitOT1RFOiBXaGVuIHlvdSBhcmUgZGV2ZWxvcGluZyB0aGUgR2l0IHByb2plY3QsIGl0J3MgcHJlZmVycmVkIHRoYXQgeW91IHVzZSB0aGUKK2BERVZFTE9QRVJgIGZsYWc7IGlmIHRoZXJlJ3Mgc29tZSByZWFzb24gaXQgZG9lc24ndCB3b3JrIGZvciB5b3UsIHlvdSBjYW4gdHVybgoraXQgb2ZmLCBidXQgaXQncyBhIGdvb2QgaWRlYSB0byBtZW50aW9uIHRoZSBwcm9ibGVtIHRvIHRoZSBtYWlsaW5nIGxpc3QuCisKK0dyZWF0LCBub3cgeW91ciBuZXcgY29tbWFuZCBidWlsZHMgaGFwcGlseSBvbiBpdHMgb3duLiBCdXQgbm9ib2R5IGludm9rZXMgaXQuCitMZXQncyBjaGFuZ2UgdGhhdC4KKworVGhlIGxpc3Qgb2YgY29tbWFuZHMgbGl2ZXMgaW4gYGdpdC5jYC4gV2UgY2FuIHJlZ2lzdGVyIGEgbmV3IGNvbW1hbmQgYnkgYWRkaW5nCithIGBjbWRfc3RydWN0YCB0byB0aGUgYGNvbW1hbmRzW11gIGFycmF5LiBgc3RydWN0IGNtZF9zdHJ1Y3RgIHRha2VzIGEgc3RyaW5nCit3aXRoIHRoZSBjb21tYW5kIG5hbWUsIGEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgY29tbWFuZCBpbXBsZW1lbnRhdGlvbiwgYW5kIGEKK3NldHVwIG9wdGlvbiBmbGFnLiBGb3Igbm93LCBsZXQncyBrZWVwIG1pbWlja2luZyBgcHVzaGAuIEZpbmQgdGhlIGxpbmUgd2hlcmUKK2BjbWRfcHVzaGAgaXMgcmVnaXN0ZXJlZCwgY29weSBpdCwgYW5kIG1vZGlmeSBpdCBmb3IgYGNtZF9wc3VoYCwgcGxhY2luZyB0aGUgbmV3CitsaW5lIGluIGFscGhhYmV0aWNhbCBvcmRlciAoaW1tZWRpYXRlbHkgYmVmb3JlIGBjbWRfcHVsbGApLgorCitUaGUgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbiBgYnVpbHRpbi5oYCB1bmRlciAiQWRkaW5nIGEgbmV3IGJ1aWx0LWluLiIgU2luY2UKK3dlIGhvcGUgdG8gcHJpbnQgc29tZSBkYXRhIGFib3V0IHRoZSB1c2VyJ3MgY3VycmVudCB3b3Jrc3BhY2UgY29udGV4dCBsYXRlciwKK3dlIG5lZWQgYSBHaXQgZGlyZWN0b3J5LCBzbyBjaG9vc2UgYFJVTl9TRVRVUGAgYXMgeW91ciBvbmx5IG9wdGlvbi4KKworR28gYWhlYWQgYW5kIGJ1aWxkIGFnYWluLiBZb3Ugc2hvdWxkIHNlZSBhIGNsZWFuIGJ1aWxkLCBzbyBsZXQncyBraWNrIHRoZSB0aXJlcworYW5kIHNlZSBpZiBpdCB3b3Jrcy4gVGhlcmUncyBhIGJpbmFyeSB5b3UgY2FuIHVzZSB0byB0ZXN0IHdpdGggaW4gdGhlCitgYmluLXdyYXBwZXJzYCBkaXJlY3RvcnkuCisKKy0tLS0KKyQgLi9iaW4td3JhcHBlcnMvZ2l0IHBzdWgKKy0tLS0KKworQ2hlY2sgaXQgb3V0ISBZb3UndmUgZ290IGEgY29tbWFuZCEgTmljZSB3b3JrISBMZXQncyBjb21taXQgdGhpcy4KKworYGdpdCBzdGF0dXNgIHJldmVhbHMgbW9kaWZpZWQgYE1ha2VmaWxlYCwgYGJ1aWx0aW4uaGAsIGFuZCBgZ2l0LmNgIGFzIHdlbGwgYXMKK3VudHJhY2tlZCBgYnVpbHRpbi9wc3VoLmNgIGFuZCBgZ2l0LXBzdWhgLiBGaXJzdCwgbGV0J3MgdGFrZSBjYXJlIG9mIHRoZSBiaW5hcnksCit3aGljaCBzaG91bGQgYmUgaWdub3JlZC4gT3BlbiBgLmdpdGlnbm9yZWAgaW4geW91ciBlZGl0b3IsIGZpbmQgYC9naXQtcHVsbGAsIGFuZAorYWRkIGFuIGVudHJ5IGZvciB5b3VyIG5ldyBjb21tYW5kIGluIGFscGhhYmV0aWNhbCBvcmRlcjoKKworLS0tLQorLi4uCisvZ2l0LXBydW5lLXBhY2tlZAorL2dpdC1wc3VoCisvZ2l0LXB1bGwKKy9naXQtcHVzaAorL2dpdC1xdWlsdGltcG9ydAorL2dpdC1yYW5nZS1kaWZmCisuLi4KKy0tLS0KKworQ2hlY2tpbmcgYGdpdCBzdGF0dXNgIGFnYWluIHNob3VsZCBzaG93IHRoYXQgYGdpdC1wc3VoYCBoYXMgYmVlbiByZW1vdmVkIGZyb20KK3RoZSB1bnRyYWNrZWQgbGlzdCBhbmQgYC5naXRpZ25vcmVgIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBtb2RpZmllZCBsaXN0LiBOb3cgd2UKK2NhbiBzdGFnZSBhbmQgY29tbWl0OgorCistLS0tCiskIGdpdCBhZGQgTWFrZWZpbGUgYnVpbHRpbi5oIGJ1aWx0aW4vcHN1aC5jIGdpdC5jIC5naXRpZ25vcmUKKyQgZ2l0IGNvbW1pdCAtcworLS0tLQorCitZb3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCB5b3VyIGVkaXRvciBpbiBvcmRlciB0byB3cml0ZSBhIGNvbW1pdCBtZXNzYWdlLiBTdGFydAordGhlIGNvbW1pdCB3aXRoIGEgNTAtY29sdW1uIG9yIGxlc3Mgc3ViamVjdCBsaW5lLCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitjb21wb25lbnQgeW91J3JlIHdvcmtpbmcgb24sIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSAoYWx3YXlzIHJlcXVpcmVkKSBhbmQgdGhlbgordGhlIGJvZHkgb2YgeW91ciBjb21taXQgbWVzc2FnZSwgd2hpY2ggc2hvdWxkIHByb3ZpZGUgdGhlIGJ1bGsgb2YgdGhlIGNvbnRleHQuCitSZW1lbWJlciB0byBiZSBleHBsaWNpdCBhbmQgcHJvdmlkZSB0aGUgIldoeSIgb2YgeW91ciBjaGFuZ2UsIGVzcGVjaWFsbHkgaWYgaXQKK2NvdWxkbid0IGVhc2lseSBiZSB1bmRlcnN0b29kIGZyb20geW91ciBkaWZmLiBXaGVuIGVkaXRpbmcgeW91ciBjb21taXQgbWVzc2FnZSwKK2Rvbid0IHJlbW92ZSB0aGUgU2lnbmVkLW9mZi1ieSBsaW5lIHdoaWNoIHdhcyBhZGRlZCBieSBgLXNgIGFib3ZlLgorCistLS0tCitwc3VoOiBhZGQgYSBidWlsdC1pbiBieSBwb3B1bGFyIGRlbWFuZAorCitJbnRlcm5hbCBtZXRyaWNzIGluZGljYXRlIHRoaXMgaXMgYSBjb21tYW5kIG1hbnkgdXNlcnMgZXhwZWN0IHRvIGJlCitwcmVzZW50LiBTbyBoZXJlJ3MgYW4gaW1wbGVtZW50YXRpb24gdG8gaGVscCBkcml2ZSBjdXN0b21lcgorc2F0aXNmYWN0aW9uIGFuZCBlbmdhZ2VtZW50OiBhIHBvbnkgd2hpY2ggZG91YnRmdWxseSBncmVldHMgdGhlIHVzZXIsCitvciwgYSBQb255IFNheWluZyAiVW0sIEhlbGxvIiAoUFNVSCkuCisKK1RoaXMgY29tbWl0IG1lc3NhZ2UgaXMgaW50ZW50aW9uYWxseSBmb3JtYXR0ZWQgdG8gNzIgY29sdW1ucyBwZXIgbGluZSwKK3N0YXJ0cyB3aXRoIGEgc2luZ2xlIGxpbmUgYXMgImNvbW1pdCBtZXNzYWdlIHN1YmplY3QiIHRoYXQgaXMgd3JpdHRlbiBhcworaWYgdG8gY29tbWFuZCB0aGUgY29kZWJhc2UgdG8gZG8gc29tZXRoaW5nIChhZGQgdGhpcywgdGVhY2ggYSBjb21tYW5kCit0aGF0KS4gVGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UgaXMgZGVzaWduZWQgdG8gYWRkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorY29tbWl0IHRoYXQgaXMgbm90IHJlYWRpbHkgZGVkdWNlZCBmcm9tIHJlYWRpbmcgdGhlIGFzc29jaWF0ZWQgZGlmZiwKK3N1Y2ggYXMgYW5zd2VyaW5nIHRoZSBxdWVzdGlvbiAid2h5PyIuCisKK1NpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CistLS0tCisKK0dvIGFoZWFkIGFuZCBpbnNwZWN0IHlvdXIgbmV3IGNvbW1pdCB3aXRoIGBnaXQgc2hvd2AuICJwc3VoOiIgaW5kaWNhdGVzIHlvdQoraGF2ZSBtb2RpZmllZCBtYWlubHkgdGhlIGBwc3VoYCBjb21tYW5kLiBUaGUgc3ViamVjdCBsaW5lIGdpdmVzIHJlYWRlcnMgYW4gaWRlYQorb2Ygd2hhdCB5b3UndmUgY2hhbmdlZC4gVGhlIHNpZ24tb2ZmIGxpbmUgKGAtc2ApIGluZGljYXRlcyB0aGF0IHlvdSBhZ3JlZSB0bwordGhlIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEgKHNlZSB0aGUKK2BEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzYCArKytbW2Rjb11dKysrIGhlYWRlcikuCisKK0ZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSB0dXRvcmlhbCwgdGhlIHN1YmplY3QgbGluZSBvbmx5IHdpbGwgYmUgbGlzdGVkIGZvciB0aGUKK3Nha2Ugb2YgYnJldml0eS4gSG93ZXZlciwgZnVsbHktZmxlc2hlZCBleGFtcGxlIGNvbW1pdCBtZXNzYWdlcyBhcmUgYXZhaWxhYmxlCitvbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGxpbmtlZCBhdCB0aGUgdG9wIG9mIHRoaXMgZG9jdW1lbnQuCisKK1tbaW1wbGVtZW50YXRpb25dXQorPT09IEltcGxlbWVudGF0aW9uCisKK0l0J3MgcHJvYmFibHkgdXNlZnVsIHRvIGRvIGF0IGxlYXN0IHNvbWV0aGluZyBiZXNpZGVzIHByaW50aW5nIG91dCBhIHN0cmluZy4KK0xldCdzIHN0YXJ0IGJ5IGhhdmluZyBhIGxvb2sgYXQgZXZlcnl0aGluZyB3ZSBnZXQuCisKK01vZGlmeSB5b3VyIGBjbWRfcHN1aGAgaW1wbGVtZW50YXRpb24gdG8gZHVtcCB0aGUgYXJncyB5b3UncmUgcGFzc2VkLCBrZWVwaW5nCitleGlzdGluZyBgcHJpbnRmKClgIGNhbGxzIGluIHBsYWNlOgorCistLS0tCisJaW50IGk7CisKKwkuLi4KKworCXByaW50ZihRXygiWW91ciBhcmdzICh0aGVyZSBpcyAlZCk6XG4iLAorCQkgICJZb3VyIGFyZ3MgKHRoZXJlIGFyZSAlZCk6XG4iLAorCQkgIGFyZ2MpLAorCSAgICAgICBhcmdjKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQlwcmludGYoIiVkOiAlc1xuIiwgaSwgYXJndltpXSk7CisKKwlwcmludGYoXygiWW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OlxuPHRvcC1sZXZlbD4lcyVzXG4iKSwKKwkgICAgICAgcHJlZml4ID8gIi8iIDogIiIsIHByZWZpeCA/IHByZWZpeCA6ICIiKTsKKworLS0tLQorCitCdWlsZCBhbmQgdHJ5IGl0LiBBcyB5b3UgbWF5IGV4cGVjdCwgdGhlcmUncyBwcmV0dHkgbXVjaCBqdXN0IHdoYXRldmVyIHdlIGdpdmUKK29uIHRoZSBjb21tYW5kIGxpbmUsIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBvdXIgY29tbWFuZC4gKElmIGBwcmVmaXhgIGlzIGVtcHR5Citmb3IgeW91LCB0cnkgYGNkIERvY3VtZW50YXRpb24vICYmIC4uL2Jpbi13cmFwcGVycy9naXQgcHN1aGApLiBUaGF0J3Mgbm90IHNvCitoZWxwZnVsLiBTbyB3aGF0IG90aGVyIGNvbnRleHQgY2FuIHdlIGdldD8KKworQWRkIGEgbGluZSB0byBgI2luY2x1ZGUgImNvbmZpZy5oImAuIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGJpdHMgdG8gdGhlCitmdW5jdGlvbiBib2R5OgorCistLS0tCisJY29uc3QgY2hhciAqY2ZnX25hbWU7CisKKy4uLgorCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoInVzZXIubmFtZSIsICZjZmdfbmFtZSkgPiAwKQorCQlwcmludGYoXygiTm8gbmFtZSBpcyBmb3VuZCBpbiBjb25maWdcbiIpKTsKKwllbHNlCisJCXByaW50ZihfKCJZb3VyIG5hbWU6ICVzXG4iKSwgY2ZnX25hbWUpOworLS0tLQorCitgZ2l0X2NvbmZpZygpYCB3aWxsIGdyYWIgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBjb25maWcgZmlsZXMga25vd24gdG8gR2l0IGFuZAorYXBwbHkgc3RhbmRhcmQgcHJlY2VkZW5jZSBydWxlcy4gYGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgpYCB3aWxsIGxvb2sgdXAKK2Egc3BlY2lmaWMga2V5ICgidXNlci5uYW1lIikgYW5kIGdpdmUgeW91IHRoZSB2YWx1ZS4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mCitzaW5nbGUta2V5IGxvb2t1cCBmdW5jdGlvbnMgbGlrZSB0aGlzIG9uZTsgeW91IGNhbiBzZWUgdGhlbSBhbGwgKGFuZCBtb3JlIGluZm8KK2Fib3V0IGhvdyB0byB1c2UgYGdpdF9jb25maWcoKWApIGluIGBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dGAuCisKK1lvdSBzaG91bGQgc2VlIHRoYXQgdGhlIG5hbWUgcHJpbnRlZCBtYXRjaGVzIHRoZSBvbmUgeW91IHNlZSB3aGVuIHlvdSBydW46CisKKy0tLS0KKyQgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWUKKy0tLS0KKworR3JlYXQhIE5vdyB3ZSBrbm93IGhvdyB0byBjaGVjayBmb3IgdmFsdWVzIGluIHRoZSBHaXQgY29uZmlnLiBMZXQncyBjb21taXQgdGhpcwordG9vLCBzbyB3ZSBkb24ndCBsb3NlIG91ciBwcm9ncmVzcy4KKworLS0tLQorJCBnaXQgYWRkIGJ1aWx0aW4vcHN1aC5jCiskIGdpdCBjb21taXQgLXNtICJwc3VoOiBzaG93IHBhcmFtZXRlcnMgJiBjb25maWcgb3B0cyIKKy0tLS0KKworTk9URTogQWdhaW4sIHRoZSBhYm92ZSBpcyBmb3Igc2FrZSBvZiBicmV2aXR5IGluIHRoaXMgdHV0b3JpYWwuIEluIGEgcmVhbCBjaGFuZ2UKK3lvdSBzaG91bGQgbm90IHVzZSBgLW1gIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgZWRpdG9yIHRvIHdyaXRlIGEgbWVhbmluZ2Z1bAorbWVzc2FnZS4KKworU3RpbGwsIGl0J2QgYmUgbmljZSB0byBrbm93IHdoYXQgdGhlIHVzZXIncyB3b3JraW5nIGNvbnRleHQgaXMgbGlrZS4gTGV0J3Mgc2VlCitpZiB3ZSBjYW4gcHJpbnQgdGhlIG5hbWUgb2YgdGhlIHVzZXIncyBjdXJyZW50IGJyYW5jaC4gV2UgY2FuIG1pbWljIHRoZQorYGdpdCBzdGF0dXNgIGltcGxlbWVudGF0aW9uOyB0aGUgcHJpbnRlciBpcyBsb2NhdGVkIGluIGB3dC1zdGF0dXMuY2AgYW5kIHdlIGNhbgorc2VlIHRoYXQgdGhlIGJyYW5jaCBpcyBoZWxkIGluIGEgYHN0cnVjdCB3dF9zdGF0dXNgLgorCitgd3Rfc3RhdHVzX3ByaW50KClgIGdldHMgaW52b2tlZCBieSBgY21kX3N0YXR1cygpYCBpbiBgYnVpbHRpbi9jb21taXQuY2AuCitMb29raW5nIGF0IHRoYXQgaW1wbGVtZW50YXRpb24gd2Ugc2VlIHRoZSBzdGF0dXMgY29uZmlnIGJlaW5nIHBvcHVsYXRlZCBsaWtlIHNvOgorCistLS0tCitzdGF0dXNfaW5pdF9jb25maWcoJnMsIGdpdF9zdGF0dXNfY29uZmlnKTsKKy0tLS0KKworQnV0IGFzIHdlIGRyaWxsIGRvd24sIHdlIGNhbiBmaW5kIHRoYXQgYHN0YXR1c19pbml0X2NvbmZpZygpYCB3cmFwcyBhIGNhbGwKK3RvIGBnaXRfY29uZmlnKClgLiBMZXQncyBtb2RpZnkgdGhlIGNvZGUgd2Ugd3JvdGUgaW4gdGhlIHByZXZpb3VzIGNvbW1pdC4KKworQmUgc3VyZSB0byBpbmNsdWRlIHRoZSBoZWFkZXIgdG8gYWxsb3cgeW91IHRvIHVzZSBgc3RydWN0IHd0X3N0YXR1c2A6CistLS0tCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCistLS0tCisKK1RoZW4gbW9kaWZ5IHlvdXIgYGNtZF9wc3VoYCBpbXBsZW1lbnRhdGlvbiB0byBkZWNsYXJlIHlvdXIgYHN0cnVjdCB3dF9zdGF0dXNgLAorcHJlcGFyZSBpdCwgYW5kIHByaW50IGl0cyBjb250ZW50czoKKworLS0tLQorCXN0cnVjdCB3dF9zdGF0dXMgc3RhdHVzOworCisuLi4KKworCXd0X3N0YXR1c19wcmVwYXJlKHRoZV9yZXBvc2l0b3J5LCAmc3RhdHVzKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgJnN0YXR1cyk7CisKKy4uLgorCisJcHJpbnRmKF8oIllvdXIgY3VycmVudCBicmFuY2g6ICVzXG4iKSwgc3RhdHVzLmJyYW5jaCk7CistLS0tCisKK1J1biBpdCBhZ2Fpbi4gQ2hlY2sgaXQgb3V0IC0gaGVyZSdzIHRoZSAodmVyYm9zZSkgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIQorCitMZXQncyBjb21taXQgdGhpcyBhcyB3ZWxsLgorCistLS0tCiskIGdpdCBhZGQgYnVpbHRpbi9wc3VoLmMKKyQgZ2l0IGNvbW1pdCAtc20gInBzdWg6IHByaW50IHRoZSBjdXJyZW50IGJyYW5jaCIKKy0tLS0KKworTm93IGxldCdzIHNlZSBpZiB3ZSBjYW4gZ2V0IHNvbWUgaW5mbyBhYm91dCBhIHNwZWNpZmljIGNvbW1pdC4KKworTHVja2lseSwgdGhlcmUgYXJlIHNvbWUgaGVscGVycyBmb3IgdXMgaGVyZS4gYGNvbW1pdC5oYCBoYXMgYSBmdW5jdGlvbiBjYWxsZWQKK2Bsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lYCB0byB3aGljaCB3ZSBjYW4gc2ltcGx5IHByb3ZpZGUgYSBoYXJkY29kZWQKK3N0cmluZzsgYHByZXR0eS5oYCBoYXMgYW4gZXh0cmVtZWx5IGhhbmR5IGBwcF9jb21taXRfZWFzeSgpYCBjYWxsIHdoaWNoIGRvZXNuJ3QKK3JlcXVpcmUgYSBmdWxsIGZvcm1hdCBvYmplY3QgdG8gYmUgcGFzc2VkLgorCitBZGQgdGhlIGZvbGxvd2luZyBpbmNsdWRlczoKKworLS0tLQorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInByZXR0eS5oIgorLS0tLQorCitUaGVuLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB3aXRoaW4geW91ciBpbXBsZW1lbnRhdGlvbiBvZiBgY21kX3BzdWgoKWAgbmVhcgordGhlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIGxvZ2ljLCByZXNwZWN0aXZlbHkuCisKKy0tLS0KKwlzdHJ1Y3QgY29tbWl0ICpjID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdGxpbmUgPSBTVFJCVUZfSU5JVDsKKworLi4uCisKKwljID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZSgib3JpZ2luL21hc3RlciIpOworCisJaWYgKGMgIT0gTlVMTCkgeworCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjLCAmY29tbWl0bGluZSk7CisJCXByaW50ZihfKCJDdXJyZW50IGNvbW1pdDogJXNcbiIpLCBjb21taXRsaW5lLmJ1Zik7CisJfQorLS0tLQorCitUaGUgYHN0cnVjdCBzdHJidWZgIHByb3ZpZGVzIHNvbWUgc2FmZXR5IGJlbHRzIHRvIHlvdXIgYmFzaWMgYGNoYXIqYCwgb25lIG9mCit3aGljaCBpcyBhIGxlbmd0aCBtZW1iZXIgdG8gcHJldmVudCBidWZmZXIgb3ZlcnJ1bnMuIEl0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkCituaWNlbHkgd2l0aCBgU1RSQlVGX0lOSVRgLiBLZWVwIGl0IGluIG1pbmQgd2hlbiB5b3UgbmVlZCB0byBwYXNzIGFyb3VuZCBgY2hhcipgLgorCitgbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZWAgcmVzb2x2ZXMgdGhlIG5hbWUgeW91IHBhc3MgaXQsIHNvIHlvdSBjYW4gcGxheQord2l0aCB0aGUgdmFsdWUgdGhlcmUgYW5kIHNlZSB3aGF0IGtpbmQgb2YgdGhpbmdzIHlvdSBjYW4gY29tZSB1cCB3aXRoLgorCitgcHBfY29tbWl0X2Vhc3lgIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBpbiBgcHJldHR5LmhgIHRoYXQgdGFrZXMgYSBzaW5nbGUKK2Zvcm1hdCBlbnVtIHNob3J0aGFuZCwgcmF0aGVyIHRoYW4gYW4gZW50aXJlIGZvcm1hdCBzdHJ1Y3QuIEl0IHRoZW4KK3ByZXR0eS1wcmludHMgdGhlIGNvbW1pdCBhY2NvcmRpbmcgdG8gdGhhdCBzaG9ydGhhbmQuIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHRoZQorZm9ybWF0cyBhdmFpbGFibGUgd2l0aCBgLS1wcmV0dHk9Rk9PYCBpbiBtYW55IEdpdCBjb21tYW5kcy4KKworQnVpbGQgaXQgYW5kIHJ1biwgYW5kIGlmIHlvdSdyZSB1c2luZyB0aGUgc2FtZSBuYW1lIGluIHRoZSBleGFtcGxlLCB5b3Ugc2hvdWxkCitzZWUgdGhlIHN1YmplY3QgbGluZSBvZiB0aGUgbW9zdCByZWNlbnQgY29tbWl0IGluIGBvcmlnaW4vbWFzdGVyYCB0aGF0IHlvdSBrbm93CithYm91dC4gTmVhdCEgTGV0J3MgY29tbWl0IHRoYXQgYXMgd2VsbC4KKworLS0tLQorJCBnaXQgYWRkIGJ1aWx0aW4vcHN1aC5jCiskIGdpdCBjb21taXQgLXNtICJwc3VoOiBkaXNwbGF5IHRoZSB0b3Agb2Ygb3JpZ2luL21hc3RlciIKKy0tLS0KKworW1thZGQtZG9jdW1lbnRhdGlvbl1dCis9PT0gQWRkaW5nIERvY3VtZW50YXRpb24KKworQXdlc29tZSEgWW91J3ZlIGdvdCBhIGZhbnRhc3RpYyBuZXcgY29tbWFuZCB0aGF0IHlvdSdyZSByZWFkeSB0byBzaGFyZSB3aXRoIHRoZQorY29tbXVuaXR5LiBCdXQgaGFuZyBvbiBqdXN0IGEgbWludXRlIC0gdGhpcyBpc24ndCB2ZXJ5IHVzZXItZnJpZW5kbHkuIFJ1biB0aGUKK2ZvbGxvd2luZzoKKworLS0tLQorJCAuL2Jpbi13cmFwcGVycy9naXQgaGVscCBwc3VoCistLS0tCisKK1lvdXIgbmV3IGNvbW1hbmQgaXMgdW5kb2N1bWVudGVkISBMZXQncyBmaXggdGhhdC4KKworVGFrZSBhIGxvb2sgYXQgYERvY3VtZW50YXRpb24vZ2l0LSoudHh0YC4gVGhlc2UgYXJlIHRoZSBtYW5wYWdlcyBmb3IgdGhlCitzdWJjb21tYW5kcyB0aGF0IEdpdCBrbm93cyBhYm91dC4gWW91IGNhbiBvcGVuIHRoZXNlIHVwIGFuZCB0YWtlIGEgbG9vayB0byBnZXQKK2FjcXVhaW50ZWQgd2l0aCB0aGUgZm9ybWF0LCBidXQgdGhlbiBnbyBhaGVhZCBhbmQgbWFrZSBhIG5ldyBmaWxlCitgRG9jdW1lbnRhdGlvbi9naXQtcHN1aC50eHRgLiBMaWtlIHdpdGggbW9zdCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgR2l0Citwcm9qZWN0LCBoZWxwIHBhZ2VzIGFyZSB3cml0dGVuIHdpdGggQXNjaWlEb2MgKHNlZSBDb2RpbmdHdWlkZWxpbmVzLCAiV3JpdGluZworRG9jdW1lbnRhdGlvbiIgc2VjdGlvbikuIFVzZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlIHRvIGZpbGwgb3V0IHlvdXIgb3duCittYW5wYWdlOgorCisvLyBTdXJwcmlzaW5nbHkgZGlmZmljdWx0IHRvIGVtYmVkIEFzY2lpRG9jIHNvdXJjZSB3aXRoaW4gQXNjaWlEb2MuCitbbGlzdGluZ10KKy4uLi4KK2dpdC1wc3VoKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcHN1aCAtIERlbGlnaHQgdXNlcnMnIHR5cG8gd2l0aCBhIHNoeSBob3JzZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC1wc3VoIFs8YXJnPi4uLl0nCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorLi4uCisKK09QVElPTlNbW09QVElPTlNdXQorLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4KKworT1VUUFVUCistLS0tLS0KKy4uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKKy4uLi4KKworVGhlIG1vc3QgaW1wb3J0YW50IHBpZWNlcyBvZiB0aGlzIHRvIG5vdGUgYXJlIHRoZSBmaWxlIGhlYWRlciwgdW5kZXJsaW5lZCBieSA9LAordGhlIE5BTUUgc2VjdGlvbiwgYW5kIHRoZSBTWU5PUFNJUywgd2hpY2ggd291bGQgbm9ybWFsbHkgY29udGFpbiB0aGUgZ3JhbW1hciBpZgoreW91ciBjb21tYW5kIHRvb2sgYXJndW1lbnRzLiBUcnkgdG8gdXNlIHdlbGwtZXN0YWJsaXNoZWQgbWFucGFnZSBoZWFkZXJzIHNvIHlvdXIKK2RvY3VtZW50YXRpb24gaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIEdpdCBhbmQgVU5JWCBtYW5wYWdlczsgdGhpcyBtYWtlcyBsaWZlCitlYXNpZXIgZm9yIHlvdXIgdXNlciwgd2hvIGNhbiBza2lwIHRvIHRoZSBzZWN0aW9uIHRoZXkga25vdyBjb250YWlucyB0aGUKK2luZm9ybWF0aW9uIHRoZXkgbmVlZC4KKworTm93IHRoYXQgeW91J3ZlIHdyaXR0ZW4geW91ciBtYW5wYWdlLCB5b3UnbGwgbmVlZCB0byBidWlsZCBpdCBleHBsaWNpdGx5LiBXZQorY29udmVydCB5b3VyIEFzY2lpRG9jIHRvIHRyb2ZmIHdoaWNoIGlzIG1hbi1yZWFkYWJsZSBsaWtlIHNvOgorCistLS0tCiskIG1ha2UgYWxsIGRvYworJCBtYW4gRG9jdW1lbnRhdGlvbi9naXQtcHN1aC4xCistLS0tCisKK29yCisKKy0tLS0KKyQgbWFrZSAtQyBEb2N1bWVudGF0aW9uLyBnaXQtcHN1aC4xCiskIG1hbiBEb2N1bWVudGF0aW9uL2dpdC1wc3VoLjEKKy0tLS0KKworTk9URTogWW91IG1heSBuZWVkIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgYGFzY2lpZG9jYCB0byBnZXQgdGhpcyB0byB3b3JrLgorCitXaGlsZSB0aGlzIGlzbid0IGFzIHNhdGlzZnlpbmcgYXMgcnVubmluZyB0aHJvdWdoIGBnaXQgaGVscGAsIHlvdSBjYW4gYXQgbGVhc3QKK2NoZWNrIHRoYXQgeW91ciBoZWxwIHBhZ2UgbG9va3MgcmlnaHQuCisKK1lvdSBjYW4gYWxzbyBjaGVjayB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIGNvdmVyYWdlIGlzIGdvb2QgKHRoYXQgaXMsIHRoZSBwcm9qZWN0CitzZWVzIHRoYXQgeW91ciBjb21tYW5kIGhhcyBiZWVuIGltcGxlbWVudGVkIGFzIHdlbGwgYXMgZG9jdW1lbnRlZCkgYnkgcnVubmluZworYG1ha2UgY2hlY2stZG9jc2AgZnJvbSB0aGUgdG9wLWxldmVsLgorCitHbyBhaGVhZCBhbmQgY29tbWl0IHlvdXIgbmV3IGRvY3VtZW50YXRpb24gY2hhbmdlLgorCitbW2FkZC11c2FnZV1dCis9PT0gQWRkaW5nIFVzYWdlIFRleHQKKworVHJ5IGFuZCBydW4gYC4vYmluLXdyYXBwZXJzL2dpdCBwc3VoIC1oYC4gWW91ciBjb21tYW5kIHNob3VsZCBjcmFzaCBhdCB0aGUgZW5kLgorVGhhdCdzIGJlY2F1c2UgYC1oYCBpcyBhIHNwZWNpYWwgY2FzZSB3aGljaCB5b3VyIGNvbW1hbmQgc2hvdWxkIGhhbmRsZSBieQorcHJpbnRpbmcgdXNhZ2UuCisKK1Rha2UgYSBsb29rIGF0IGBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHRgLiBUaGlzIGlzIGEgaGFuZHkKK3Rvb2wgZm9yIHB1bGxpbmcgb3V0IG9wdGlvbnMgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBoYW5kbGUsIGFuZCBpdCB0YWtlcyBhCit1c2FnZSBzdHJpbmcuCisKK0luIG9yZGVyIHRvIHVzZSBpdCwgd2UnbGwgbmVlZCB0byBwcmVwYXJlIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHVzYWdlCitzdHJpbmdzIGFuZCBhIGBidWlsdGluX3BzdWhfb3B0aW9uc2AgYXJyYXkuCisKK0FkZCBhIGxpbmUgdG8gYCNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiYC4KKworQXQgZ2xvYmFsIHNjb3BlLCBhZGQgeW91ciBhcnJheSBvZiB1c2FnZSBzdHJpbmdzOgorCistLS0tCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBzdWhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBzdWggWzxhcmc+Li4uXSIpLAorCU5VTEwsCit9OworLS0tLQorCitUaGVuLCB3aXRoaW4geW91ciBgY21kX3BzdWgoKWAgaW1wbGVtZW50YXRpb24sIHdlIGNhbiBkZWNsYXJlIGFuZCBwb3B1bGF0ZSBvdXIKK2BvcHRpb25gIHN0cnVjdC4gT3VycyBpcyBwcmV0dHkgYm9yaW5nIGJ1dCB5b3UgY2FuIGFkZCBtb3JlIHRvIGl0IGlmIHlvdSB3YW50IHRvCitleHBsb3JlIGBwYXJzZV9vcHRpb25zKClgIGluIG1vcmUgZGV0YWlsOgorCistLS0tCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CistLS0tCisKK0ZpbmFsbHksIGJlZm9yZSB5b3UgcHJpbnQgeW91ciBhcmdzIGFuZCBwcmVmaXgsIGFkZCB0aGUgY2FsbCB0bworYHBhcnNlLW9wdGlvbnMoKWA6CisKKy0tLS0KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHBzdWhfdXNhZ2UsIDApOworLS0tLQorCitUaGlzIGNhbGwgd2lsbCBtb2RpZnkgeW91ciBgYXJndmAgcGFyYW1ldGVyLiBJdCB3aWxsIHN0cmlwIHRoZSBvcHRpb25zIHlvdQorc3BlY2lmaWVkIGluIGBvcHRpb25zYCBmcm9tIGBhcmd2YCBhbmQgdGhlIGxvY2F0aW9ucyBwb2ludGVkIHRvIGZyb20gYG9wdGlvbnNgCitlbnRyaWVzIHdpbGwgYmUgdXBkYXRlZC4gQmUgc3VyZSB0byByZXBsYWNlIHlvdXIgYGFyZ2NgIHdpdGggdGhlIHJlc3VsdCBmcm9tCitgcGFyc2Vfb3B0aW9ucygpYCwgb3IgeW91IHdpbGwgYmUgY29uZnVzZWQgaWYgeW91IHRyeSB0byBwYXJzZSBgYXJndmAgbGF0ZXIuCisKK0l0J3Mgd29ydGggbm90aW5nIHRoZSBzcGVjaWFsIGFyZ3VtZW50IGAtLWAuIEFzIHlvdSBtYXkgYmUgYXdhcmUsIG1hbnkgVW5peAorY29tbWFuZHMgdXNlIGAtLWAgdG8gaW5kaWNhdGUgImVuZCBvZiBuYW1lZCBwYXJhbWV0ZXJzIiAtIGFsbCBwYXJhbWV0ZXJzIGFmdGVyCit0aGUgYC0tYCBhcmUgaW50ZXJwcmV0ZWQgbWVyZWx5IGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLiAoVGhpcyBjYW4gYmUgaGFuZHkgaWYKK3lvdSB3YW50IHRvIHBhc3MgYXMgYSBwYXJhbWV0ZXIgc29tZXRoaW5nIHdoaWNoIHdvdWxkIHVzdWFsbHkgYmUgaW50ZXJwcmV0ZWQgYXMKK2EgZmxhZy4pIGBwYXJzZV9vcHRpb25zKClgIHdpbGwgdGVybWluYXRlIHBhcnNpbmcgd2hlbiBpdCByZWFjaGVzIGAtLWAgYW5kIGdpdmUKK3lvdSB0aGUgcmVzdCBvZiB0aGUgb3B0aW9ucyBhZnRlcndhcmRzLCB1bnRvdWNoZWQuCisKK05vdyB0aGF0IHlvdSBoYXZlIGEgdXNhZ2UgaGludCwgeW91IGNhbiB0ZWFjaCBHaXQgaG93IHRvIHNob3cgaXQgaW4gdGhlIGdlbmVyYWwKK2NvbW1hbmQgbGlzdCBzaG93biBieSBgZ2l0IGhlbHAgZ2l0YCBvciBgZ2l0IGhlbHAgLWFgLCB3aGljaCBpcyBnZW5lcmF0ZWQgZnJvbQorYGNvbW1hbmQtbGlzdC50eHRgLiBGaW5kIHRoZSBsaW5lIGZvciAnZ2l0LXB1bGwnIHNvIHlvdSBjYW4gYWRkIHlvdXIgJ2dpdC1wc3VoJworbGluZSBhYm92ZSBpdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuIE5vdywgd2UgY2FuIGFkZCBzb21lIGF0dHJpYnV0ZXMgYWJvdXQgdGhlCitjb21tYW5kIHdoaWNoIGltcGFjdHMgd2hlcmUgaXQgc2hvd3MgdXAgaW4gdGhlIGFmb3JlbWVudGlvbmVkIGhlbHAgY29tbWFuZHMuIFRoZQordG9wIG9mIGBjb21tYW5kLWxpc3QudHh0YCBzaGFyZXMgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGVhY2ggYXR0cmlidXRlCittZWFuczsgaW4gdGhvc2UgaGVscCBwYWdlcywgdGhlIGNvbW1hbmRzIGFyZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZXNlCithdHRyaWJ1dGVzLiBgZ2l0IHBzdWhgIGlzIHVzZXItZmFjaW5nLCBvciBwb3JjZWxhaW4gLSBzbyB3ZSB3aWxsIG1hcmsgaXQgYXMKKyJtYWlucG9yY2VsYWluIi4gRm9yICJtYWlucG9yY2VsYWluIiBjb21tYW5kcywgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YKK2Bjb21tYW5kLWxpc3QudHh0YCBpbmRpY2F0ZSB3ZSBjYW4gYWxzbyBvcHRpb25hbGx5IGFkZCBhbiBhdHRyaWJ1dGUgZnJvbSBhbm90aGVyCitsaXN0OyBzaW5jZSBgZ2l0IHBzdWhgIHNob3dzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIncyB3b3Jrc3BhY2UgYnV0Citkb2Vzbid0IG1vZGlmeSBhbnl0aGluZywgbGV0J3MgbWFyayBpdCBhcyAiaW5mbyIuIE1ha2Ugc3VyZSB0byBrZWVwIHlvdXIKK2F0dHJpYnV0ZXMgaW4gdGhlIHNhbWUgc3R5bGUgYXMgdGhlIHJlc3Qgb2YgYGNvbW1hbmQtbGlzdC50eHRgIHVzaW5nIHNwYWNlcyB0bworYWxpZ24gYW5kIGRlbGluZWF0ZSB0aGVtOgorCistLS0tCitnaXQtcHJ1bmUtcGFja2VkICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1wc3VoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCQlpbmZvCitnaXQtcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgcmVtb3RlCitnaXQtcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgcmVtb3RlCistLS0tCisKK0J1aWxkIGFnYWluLiBOb3csIHdoZW4geW91IHJ1biB3aXRoIGAtaGAsIHlvdSBzaG91bGQgc2VlIHlvdXIgdXNhZ2UgcHJpbnRlZCBhbmQKK3lvdXIgY29tbWFuZCB0ZXJtaW5hdGVkIGJlZm9yZSBhbnl0aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbnMuIEdyZWF0IQorCitHbyBhaGVhZCBhbmQgY29tbWl0IHRoaXMgb25lLCB0b28uCisKK1tbdGVzdGluZ11dCis9PSBUZXN0aW5nCisKK0l0J3MgaW1wb3J0YW50IHRvIHRlc3QgeW91ciBjb2RlIC0gZXZlbiBmb3IgYSBsaXR0bGUgdG95IGNvbW1hbmQgbGlrZSB0aGlzIG9uZS4KK01vcmVvdmVyLCB5b3VyIHBhdGNoIHdvbid0IGJlIGFjY2VwdGVkIGludG8gdGhlIEdpdCB0cmVlIHdpdGhvdXQgdGVzdHMuIFlvdXIKK3Rlc3RzIHNob3VsZDoKKworKiBJbGx1c3RyYXRlIHRoZSBjdXJyZW50IGJlaGF2aW9yIG9mIHRoZSBmZWF0dXJlCisqIFByb3ZlIHRoZSBjdXJyZW50IGJlaGF2aW9yIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yCisqIEVuc3VyZSB0aGUgZXh0ZXJuYWxseS12aXNpYmxlIGJlaGF2aW9yIGlzbid0IGJyb2tlbiBpbiBsYXRlciBjaGFuZ2VzCisKK1NvIGxldCdzIHdyaXRlIHNvbWUgdGVzdHMuCisKK1JlbGF0ZWQgcmVhZGluZzogYHQvUkVBRE1FYAorCitbW292ZXJ2aWV3LXRlc3Qtc3RydWN0dXJlXV0KKz09PSBPdmVydmlldyBvZiBUZXN0aW5nIFN0cnVjdHVyZQorCitUaGUgdGVzdHMgaW4gR2l0IGxpdmUgaW4gYHQvYCBhbmQgYXJlIG5hbWVkIHdpdGggYSA0LWRpZ2l0IGRlY2ltYWwgbnVtYmVyIHVzaW5nCit0aGUgc2NoZW1hIHNob3duIGluIHRoZSBOYW1pbmcgVGVzdHMgc2VjdGlvbiBvZiBgdC9SRUFETUVgLgorCitbW3dyaXRlLW5ldy10ZXN0XV0KKz09PSBXcml0aW5nIFlvdXIgVGVzdAorCitTaW5jZSB0aGlzIGEgdG95IGNvbW1hbmQsIGxldCdzIGdvIGFoZWFkIGFuZCBuYW1lIHRoZSB0ZXN0IHdpdGggdDk5OTkuIEhvd2V2ZXIsCithcyBtYW55IG9mIHRoZSBmYW1pbHkvc3ViY21kIGNvbWJpbmF0aW9ucyBhcmUgZnVsbCwgYmVzdCBwcmFjdGljZSBzZWVtcyB0byBiZQordG8gZmluZCBhIGNvbW1hbmQgY2xvc2UgZW5vdWdoIHRvIHRoZSBvbmUgeW91J3ZlIGFkZGVkIGFuZCBzaGFyZSBpdHMgbmFtaW5nCitzcGFjZS4KKworQ3JlYXRlIGEgbmV3IGZpbGUgYHQvdDk5OTktcHN1aC10dXRvcmlhbC5zaGAuIEJlZ2luIHdpdGggdGhlIGhlYWRlciBhcyBzbyAoc2VlCisiV3JpdGluZyBUZXN0cyIgYW5kICJTb3VyY2UgJ3Rlc3QtbGliLnNoJyIgaW4gYHQvUkVBRE1FYCk6CisKKy0tLS0KKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtcHN1aCB0ZXN0CisKK1RoaXMgdGVzdCBydW5zIGdpdC1wc3VoIGFuZCBtYWtlcyBzdXJlIGl0IGRvZXMgbm90IGNyYXNoLicKKworLiAuL3Rlc3QtbGliLnNoCistLS0tCisKK1Rlc3RzIGFyZSBmcmFtZWQgaW5zaWRlIG9mIGEgYHRlc3RfZXhwZWN0X3N1Y2Nlc3NgIGluIG9yZGVyIHRvIG91dHB1dCBUQVAKK2Zvcm1hdHRlZCByZXN1bHRzLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgZ2l0IHBzdWhgIGRvZXNuJ3QgZXhpdCBwb29ybHkgYW5kIGRvZXMKK21lbnRpb24gdGhlIHJpZ2h0IGFuaW1hbCBzb21ld2hlcmU6CisKKy0tLS0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bnMgY29ycmVjdGx5IHdpdGggbm8gYXJncyBhbmQgZ29vZCBvdXRwdXQnICcKKwlnaXQgcHN1aCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCBQb255IGFjdHVhbAorJworLS0tLQorCitJbmRpY2F0ZSB0aGF0IHlvdSd2ZSBydW4gZXZlcnl0aGluZyB5b3Ugd2FudGVkIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIGF0IHRoZQorYm90dG9tIG9mIHlvdXIgc2NyaXB0OgorCistLS0tCit0ZXN0X2RvbmUKKy0tLS0KKworTWFrZSBzdXJlIHlvdSBtYXJrIHlvdXIgdGVzdCBzY3JpcHQgZXhlY3V0YWJsZToKKworLS0tLQorJCBjaG1vZCAreCB0L3Q5OTk5LXBzdWgtdHV0b3JpYWwuc2gKKy0tLS0KKworWW91IGNhbiBnZXQgYW4gaWRlYSBvZiB3aGV0aGVyIHlvdSBjcmVhdGVkIHlvdXIgbmV3IHRlc3Qgc2NyaXB0IHN1Y2Nlc3NmdWxseQorYnkgcnVubmluZyBgbWFrZSAtQyB0IHRlc3QtbGludGAsIHdoaWNoIHdpbGwgY2hlY2sgZm9yIHRoaW5ncyBsaWtlIHRlc3QgbnVtYmVyCit1bmlxdWVuZXNzLCBleGVjdXRhYmxlIGJpdCwgYW5kIHNvIG9uLgorCitbW2xvY2FsLXRlc3RdXQorPT09IFJ1bm5pbmcgTG9jYWxseQorCitMZXQncyB0cnkgYW5kIHJ1biBsb2NhbGx5OgorCistLS0tCiskIG1ha2UKKyQgY2QgdC8gJiYgcHJvdmUgdDk5OTktcHN1aC10dXRvcmlhbC5zaAorLS0tLQorCitZb3UgY2FuIHJ1biB0aGUgZnVsbCB0ZXN0IHN1aXRlIGFuZCBlbnN1cmUgYGdpdC1wc3VoYCBkaWRuJ3QgYnJlYWsgYW55dGhpbmc6CisKKy0tLS0KKyQgY2QgdC8KKyQgcHJvdmUgLWokKG5wcm9jKSAtLXNodWZmbGUgdFswLTldKi5zaAorLS0tLQorCitOT1RFOiBZb3UgY2FuIGFsc28gZG8gdGhpcyB3aXRoIGBtYWtlIHRlc3RgIG9yIHVzZSBhbnkgdGVzdGluZyBoYXJuZXNzIHdoaWNoIGNhbgorc3BlYWsgVEFQLiBgcHJvdmVgIGNhbiBydW4gY29uY3VycmVudGx5LiBgc2h1ZmZsZWAgcmFuZG9taXplcyB0aGUgb3JkZXIgdGhlCit0ZXN0cyBhcmUgcnVuIGluLCB3aGljaCBtYWtlcyB0aGVtIHJlc2lsaWVudCBhZ2FpbnN0IHVud2FudGVkIGludGVyLXRlc3QKK2RlcGVuZGVuY2llcy4gYHByb3ZlYCBhbHNvIG1ha2VzIHRoZSBvdXRwdXQgbmljZXIuCisKK0dvIGFoZWFkIGFuZCBjb21taXQgdGhpcyBjaGFuZ2UsIGFzIHdlbGwuCisKK1tbcmVhZHktdG8tc2hhcmVdXQorPT0gR2V0dGluZyBSZWFkeSB0byBTaGFyZQorCitZb3UgbWF5IGhhdmUgbm90aWNlZCBhbHJlYWR5IHRoYXQgdGhlIEdpdCBwcm9qZWN0IHBlcmZvcm1zIGl0cyBjb2RlIHJldmlld3MgdmlhCitlbWFpbGVkIHBhdGNoZXMsIHdoaWNoIGFyZSB0aGVuIGFwcGxpZWQgYnkgdGhlIG1haW50YWluZXIgd2hlbiB0aGV5IGFyZSByZWFkeQorYW5kIGFwcHJvdmVkIGJ5IHRoZSBjb21tdW5pdHkuIFRoZSBHaXQgcHJvamVjdCBkb2VzIG5vdCBhY2NlcHQgcGF0Y2hlcyBmcm9tCitwdWxsIHJlcXVlc3RzLCBhbmQgdGhlIHBhdGNoZXMgZW1haWxlZCBmb3IgcmV2aWV3IG5lZWQgdG8gYmUgZm9ybWF0dGVkIGEKK3NwZWNpZmljIHdheS4gQXQgdGhpcyBwb2ludCB0aGUgdHV0b3JpYWwgZGl2ZXJnZXMsIGluIG9yZGVyIHRvIGRlbW9uc3RyYXRlIHR3bworZGlmZmVyZW50IG1ldGhvZHMgb2YgZm9ybWF0dGluZyB5b3VyIHBhdGNoc2V0IGFuZCBnZXR0aW5nIGl0IHJldmlld2VkLgorCitUaGUgZmlyc3QgbWV0aG9kIHRvIGJlIGNvdmVyZWQgaXMgR2l0R2l0R2FkZ2V0LCB3aGljaCBpcyB1c2VmdWwgZm9yIHRob3NlCithbHJlYWR5IGZhbWlsaWFyIHdpdGggR2l0SHViJ3MgY29tbW9uIHB1bGwgcmVxdWVzdCB3b3JrZmxvdy4gVGhpcyBtZXRob2QKK3JlcXVpcmVzIGEgR2l0SHViIGFjY291bnQuCisKK1RoZSBzZWNvbmQgbWV0aG9kIHRvIGJlIGNvdmVyZWQgaXMgYGdpdCBzZW5kLWVtYWlsYCwgd2hpY2ggY2FuIGdpdmUgc2xpZ2h0bHkKK21vcmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgZW1haWxzIHRvIGJlIHNlbnQuIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHNvbWUKK3NldHVwIHdoaWNoIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtIGFuZCB3aWxsIG5vdCBiZSBjb3ZlcmVkIGluIHRoaXMKK3R1dG9yaWFsLgorCitSZWdhcmRsZXNzIG9mIHdoaWNoIG1ldGhvZCB5b3UgY2hvb3NlLCB5b3VyIGVuZ2FnZW1lbnQgd2l0aCByZXZpZXdlcnMgd2lsbCBiZQordGhlIHNhbWU7IHRoZSByZXZpZXcgcHJvY2VzcyB3aWxsIGJlIGNvdmVyZWQgYWZ0ZXIgdGhlIHNlY3Rpb25zIG9uIEdpdEdpdEdhZGdldAorYW5kIGBnaXQgc2VuZC1lbWFpbGAuCisKK1tbaG93dG8tZ2dnXV0KKz09IFNlbmRpbmcgUGF0Y2hlcyB2aWEgR2l0R2l0R2FkZ2V0CisKK09uZSBvcHRpb24gZm9yIHNlbmRpbmcgcGF0Y2hlcyBpcyB0byBmb2xsb3cgYSB0eXBpY2FsIHB1bGwgcmVxdWVzdCB3b3JrZmxvdyBhbmQKK3NlbmQgeW91ciBwYXRjaGVzIG91dCB2aWEgR2l0R2l0R2FkZ2V0LiBHaXRHaXRHYWRnZXQgaXMgYSB0b29sIGNyZWF0ZWQgYnkKK0pvaGFubmVzIFNjaGluZGVsaW4gdG8gbWFrZSBsaWZlIGFzIGEgR2l0IGNvbnRyaWJ1dG9yIGVhc2llciBmb3IgdGhvc2UgdXNlZCB0bwordGhlIEdpdEh1YiBQUiB3b3JrZmxvdy4gSXQgYWxsb3dzIGNvbnRyaWJ1dG9ycyB0byBvcGVuIHB1bGwgcmVxdWVzdHMgYWdhaW5zdCBpdHMKK21pcnJvciBvZiB0aGUgR2l0IHByb2plY3QsIGFuZCBkb2VzIHNvbWUgbWFnaWMgdG8gdHVybiB0aGUgUFIgaW50byBhIHNldCBvZgorZW1haWxzIGFuZCBzZW5kIHRoZW0gb3V0IGZvciB5b3UuIEl0IGFsc28gcnVucyB0aGUgR2l0IGNvbnRpbnVvdXMgaW50ZWdyYXRpb24KK3N1aXRlIGZvciB5b3UuIEl0J3MgZG9jdW1lbnRlZCBhdCBodHRwOi8vZ2l0Z2l0Z2FkZ2V0LmdpdGh1Yi5pby4KKworW1tjcmVhdGUtZm9ya11dCis9PT0gRm9ya2luZyBgZ2l0L2dpdGAgb24gR2l0SHViCisKK0JlZm9yZSB5b3UgY2FuIHNlbmQgeW91ciBwYXRjaCBvZmYgdG8gYmUgcmV2aWV3ZWQgdXNpbmcgR2l0R2l0R2FkZ2V0LCB5b3Ugd2lsbAorbmVlZCB0byBmb3JrIHRoZSBHaXQgcHJvamVjdCBhbmQgdXBsb2FkIHlvdXIgY2hhbmdlcy4gRmlyc3QgdGhpbmcgLSBtYWtlIHN1cmUKK3lvdSBoYXZlIGEgR2l0SHViIGFjY291bnQuCisKK0hlYWQgdG8gdGhlIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0W0dpdEh1YiBtaXJyb3JdIGFuZCBsb29rIGZvciB0aGUgRm9yaworYnV0dG9uLiBQbGFjZSB5b3VyIGZvcmsgd2hlcmV2ZXIgeW91IGRlZW0gYXBwcm9wcmlhdGUgYW5kIGNyZWF0ZSBpdC4KKworW1t1cGxvYWQtdG8tZm9ya11dCis9PT0gVXBsb2FkaW5nIHRvIFlvdXIgT3duIEZvcmsKKworVG8gdXBsb2FkIHlvdXIgYnJhbmNoIHRvIHlvdXIgb3duIGZvcmssIHlvdSdsbCBuZWVkIHRvIGFkZCB0aGUgbmV3IGZvcmsgYXMgYQorcmVtb3RlLiBZb3UgY2FuIHVzZSBgZ2l0IHJlbW90ZSAtdmAgdG8gc2hvdyB0aGUgcmVtb3RlcyB5b3UgaGF2ZSBhZGRlZCBhbHJlYWR5LgorRnJvbSB5b3VyIG5ldyBmb3JrJ3MgcGFnZSBvbiBHaXRIdWIsIHlvdSBjYW4gcHJlc3MgIkNsb25lIG9yIGRvd25sb2FkIiB0byBnZXQKK3RoZSBVUkw7IHRoZW4geW91IG5lZWQgdG8gcnVuIHRoZSBmb2xsb3dpbmcgdG8gYWRkLCByZXBsYWNpbmcgeW91ciBvd24gVVJMIGFuZAorcmVtb3RlIG5hbWUgZm9yIHRoZSBleGFtcGxlcyBwcm92aWRlZDoKKworLS0tLQorJCBnaXQgcmVtb3RlIGFkZCByZW1vdGVuYW1lIGdpdEBnaXRodWIuY29tOnJlbW90ZW5hbWUvZ2l0LmdpdAorLS0tLQorCitvciB0byB1c2UgdGhlIEhUVFBTIFVSTDoKKworLS0tLQorJCBnaXQgcmVtb3RlIGFkZCByZW1vdGVuYW1lIGh0dHBzOi8vZ2l0aHViLmNvbS9yZW1vdGVuYW1lL2dpdC8uZ2l0CistLS0tCisKK1J1biBgZ2l0IHJlbW90ZSAtdmAgYWdhaW4gYW5kIHlvdSBzaG91bGQgc2VlIHRoZSBuZXcgcmVtb3RlIHNob3dpbmcgdXAuCitgZ2l0IGZldGNoIHJlbW90ZW5hbWVgICh3aXRoIHRoZSByZWFsIG5hbWUgb2YgeW91ciByZW1vdGUgcmVwbGFjZWQpIGluIG9yZGVyIHRvCitnZXQgcmVhZHkgdG8gcHVzaC4KKworTmV4dCwgZG91YmxlLWNoZWNrIHRoYXQgeW91J3ZlIGJlZW4gZG9pbmcgYWxsIHlvdXIgZGV2ZWxvcG1lbnQgaW4gYSBuZXcgYnJhbmNoCitieSBydW5uaW5nIGBnaXQgYnJhbmNoYC4gSWYgeW91IGRpZG4ndCwgbm93IGlzIGEgZ29vZCB0aW1lIHRvIG1vdmUgeW91ciBuZXcKK2NvbW1pdHMgdG8gdGhlaXIgb3duIGJyYW5jaC4KKworQXMgbWVudGlvbmVkIGJyaWVmbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGRvY3VtZW50LCB3ZSBhcmUgYmFzaW5nIG91ciB3b3JrCitvbiBgbWFzdGVyYCwgc28gZ28gYWhlYWQgYW5kIHVwZGF0ZSBhcyBzaG93biBiZWxvdywgb3IgdXNpbmcgeW91ciBwcmVmZXJyZWQKK3dvcmtmbG93LgorCistLS0tCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IHB1bGwgLXIKKyQgZ2l0IHJlYmFzZSBtYXN0ZXIgcHN1aAorLS0tLQorCitGaW5hbGx5LCB5b3UncmUgcmVhZHkgdG8gcHVzaCB5b3VyIG5ldyB0b3BpYyBicmFuY2ghIChEdWUgdG8gb3VyIGJyYW5jaCBhbmQKK2NvbW1hbmQgbmFtZSBjaG9pY2VzLCBiZSBjYXJlZnVsIHdoZW4geW91IHR5cGUgdGhlIGNvbW1hbmQgYmVsb3cuKQorCistLS0tCiskIGdpdCBwdXNoIHJlbW90ZW5hbWUgcHN1aAorLS0tLQorCitOb3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIGdvIGFuZCBjaGVjayBvdXQgeW91ciBuZXdseSBjcmVhdGVkIGJyYW5jaCBvbiBHaXRIdWIuCisKK1tbc2VuZC1wci1nZ2ddXQorPT09IFNlbmRpbmcgYSBQUiB0byBHaXRHaXRHYWRnZXQKKworSW4gb3JkZXIgdG8gaGF2ZSB5b3VyIGNvZGUgdGVzdGVkIGFuZCBmb3JtYXR0ZWQgZm9yIHJldmlldywgeW91IG5lZWQgdG8gc3RhcnQgYnkKK29wZW5pbmcgYSBQdWxsIFJlcXVlc3QgYWdhaW5zdCBgZ2l0Z2l0Z2FkZ2V0L2dpdGAuIEhlYWQgdG8KK2h0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0IGFuZCBvcGVuIGEgUFIgZWl0aGVyIHdpdGggdGhlICJOZXcgcHVsbAorcmVxdWVzdCIgYnV0dG9uIG9yIHRoZSBjb252ZW5pZW50ICJDb21wYXJlICYgcHVsbCByZXF1ZXN0IiBidXR0b24gdGhhdCBtYXkKK2FwcGVhciB3aXRoIHRoZSBuYW1lIG9mIHlvdXIgbmV3bHkgcHVzaGVkIGJyYW5jaC4KKworUmV2aWV3IHRoZSBQUidzIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiwgYXMgaXQncyB1c2VkIGJ5IEdpdEdpdEdhZGdldCBhcyB0aGUgY292ZXIKK2xldHRlciBmb3IgeW91ciBjaGFuZ2UuIFdoZW4geW91J3JlIGhhcHB5LCBzdWJtaXQgeW91ciBwdWxsIHJlcXVlc3QuCisKK1tbcnVuLWNpLWdnZ11dCis9PT0gUnVubmluZyBDSSBhbmQgR2V0dGluZyBSZWFkeSB0byBTZW5kCisKK0lmIGl0J3MgeW91ciBmaXJzdCB0aW1lIHVzaW5nIEdpdEdpdEdhZGdldCAod2hpY2ggaXMgbGlrZWx5LCBhcyB5b3UncmUgdXNpbmcKK3RoaXMgdHV0b3JpYWwpIHRoZW4gc29tZW9uZSB3aWxsIG5lZWQgdG8gZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRvb2wuCitBcyBtZW50aW9uZWQgaW4gdGhlIEdpdEdpdEdhZGdldCBkb2N1bWVudGF0aW9uLCB5b3UganVzdCBuZWVkIHNvbWVvbmUgd2hvCithbHJlYWR5IHVzZXMgaXQgdG8gY29tbWVudCBvbiB5b3VyIFBSIHdpdGggYC9hbGxvdyA8dXNlcm5hbWU+YC4gR2l0R2l0R2FkZ2V0Cit3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHlvdXIgUFJzIHRocm91Z2ggdGhlIENJIGV2ZW4gd2l0aG91dCB0aGUgcGVybWlzc2lvbiBnaXZlbgorYnV0IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGAvc3VibWl0YCB5b3VyIGNoYW5nZXMgdW50aWwgc29tZW9uZSBhbGxvd3MgeW91IHRvCit1c2UgdGhlIHRvb2wuCisKK05PVEU6IFlvdSBjYW4gdHlwaWNhbGx5IGZpbmQgc29tZW9uZSB3aG8gY2FuIGAvYWxsb3dgIHlvdSBvbiBHaXRHaXRHYWRnZXQgYnkKK2VpdGhlciBleGFtaW5pbmcgcmVjZW50IHB1bGwgcmVxdWVzdHMgd2hlcmUgc29tZW9uZSBoYXMgYmVlbiBncmFudGVkIGAvYWxsb3dgCisoaHR0cHM6Ly9naXRodWIuY29tL2dpdGdpdGdhZGdldC9naXQvcHVsbHM/dXRmOD0lRTIlOUMlOTMmcT1pcyUzQXByK2lzJTNBb3BlbislMjIlMkZhbGxvdyUyMltTZWFyY2g6CitpczpwciBpczpvcGVuICIvYWxsb3ciXSksIGluIHdoaWNoIGNhc2UgYm90aCB0aGUgYXV0aG9yIGFuZCB0aGUgcGVyc29uIHdobworZ3JhbnRlZCB0aGUgYC9hbGxvd2AgY2FuIG5vdyBgL2FsbG93YCB5b3UsIG9yIGJ5IGlucXVpcmluZyBvbiB0aGUKK2h0dHBzOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQvI2dpdC1kZXZlbFsjZ2l0LWRldmVsXSBJUkMgY2hhbm5lbCBvbiBGcmVlbm9kZQorbGlua2luZyB5b3VyIHB1bGwgcmVxdWVzdCBhbmQgYXNraW5nIGZvciBzb21lb25lIHRvIGAvYWxsb3dgIHlvdS4KKworSWYgdGhlIENJIGZhaWxzLCB5b3UgY2FuIHVwZGF0ZSB5b3VyIGNoYW5nZXMgd2l0aCBgZ2l0IHJlYmFzZSAtaWAgYW5kIHB1c2ggeW91cgorYnJhbmNoIGFnYWluOgorCistLS0tCiskIGdpdCBwdXNoIC1mIHJlbW90ZW5hbWUgcHN1aAorLS0tLQorCitJbiBmYWN0LCB5b3Ugc2hvdWxkIGNvbnRpbnVlIHRvIG1ha2UgY2hhbmdlcyB0aGlzIHdheSB1cCB1bnRpbCB0aGUgcG9pbnQgd2hlbgoreW91ciBwYXRjaCBpcyBhY2NlcHRlZCBpbnRvIGBuZXh0YC4KKworLy8vLworVE9ETyBodHRwczovL2dpdGh1Yi5jb20vZ2l0Z2l0Z2FkZ2V0L2dpdGdpdGdhZGdldC9pc3N1ZXMvODMKK0l0J2QgYmUgbmljZSB0byBiZSBhYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBwYXRjaCBsb29rcyBnb29kIGJlZm9yZSBzZW5kaW5nIGl0Cit0byBldmVyeW9uZSBvbiBHaXQgbWFpbGluZyBsaXN0LgorW1tjaGVjay13b3JrLWdnZ11dCis9PT0gQ2hlY2sgWW91ciBXb3JrCisvLy8vCisKK1tbc2VuZC1tYWlsLWdnZ11dCis9PT0gU2VuZGluZyBZb3VyIFBhdGNoZXMKKworTm93IHRoYXQgeW91ciBDSSBpcyBwYXNzaW5nIGFuZCBzb21lb25lIGhhcyBncmFudGVkIHlvdSBwZXJtaXNzaW9uIHRvIHVzZQorR2l0R2l0R2FkZ2V0IHdpdGggdGhlIGAvYWxsb3dgIGNvbW1hbmQsIHNlbmRpbmcgb3V0IGZvciByZXZpZXcgaXMgYXMgc2ltcGxlIGFzCitjb21tZW50aW5nIG9uIHlvdXIgUFIgd2l0aCBgL3N1Ym1pdGAuCisKK1tbcmVzcG9uZGluZy1nZ2ddXQorPT09IFVwZGF0aW5nIFdpdGggQ29tbWVudHMKKworU2tpcCBhaGVhZCB0byA8PHJldmlld2luZyxSZXNwb25kaW5nIHRvIFJldmlld3M+PiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvCityZXBseSB0byByZXZpZXcgY29tbWVudHMgeW91IHdpbGwgcmVjZWl2ZSBvbiB0aGUgbWFpbGluZyBsaXN0LgorCitPbmNlIHlvdSBoYXZlIHlvdXIgYnJhbmNoIGFnYWluIGluIHRoZSBzaGFwZSB5b3Ugd2FudCBmb2xsb3dpbmcgYWxsIHJldmlldworY29tbWVudHMsIHlvdSBjYW4gc3VibWl0IGFnYWluOgorCistLS0tCiskIGdpdCBwdXNoIC1mIHJlbW90ZW5hbWUgcHN1aAorLS0tLQorCitOZXh0LCBnbyBsb29rIGF0IHlvdXIgcHVsbCByZXF1ZXN0IGFnYWluc3QgR2l0R2l0R2FkZ2V0OyB5b3Ugc2hvdWxkIHNlZSB0aGUgQ0kKK2hhcyBiZWVuIGtpY2tlZCBvZmYgYWdhaW4uIE5vdyB3aGlsZSB0aGUgQ0kgaXMgcnVubmluZyBpcyBhIGdvb2QgdGltZSBmb3IgeW91Cit0byBtb2RpZnkgeW91ciBkZXNjcmlwdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBwdWxsIHJlcXVlc3QgdGhyZWFkOyBpdCB3aWxsIGJlCit1c2VkIGFnYWluIGFzIHRoZSBjb3ZlciBsZXR0ZXIuIFlvdSBzaG91bGQgdXNlIHRoaXMgc3BhY2UgdG8gZGVzY3JpYmUgd2hhdAoraGFzIGNoYW5nZWQgc2luY2UgeW91ciBwcmV2aW91cyB2ZXJzaW9uLCBzbyB0aGF0IHlvdXIgcmV2aWV3ZXJzIGhhdmUgc29tZSBpZGVhCitvZiB3aGF0IHRoZXkncmUgbG9va2luZyBhdC4gV2hlbiB0aGUgQ0kgaXMgZG9uZSBydW5uaW5nLCB5b3UgY2FuIGNvbW1lbnQgb25jZQorbW9yZSB3aXRoIGAvc3VibWl0YCAtIEdpdEdpdEdhZGdldCB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGEgdjIgbWFyayB0byB5b3VyCitjaGFuZ2VzLgorCitbW2hvd3RvLWdpdC1zZW5kLWVtYWlsXV0KKz09IFNlbmRpbmcgUGF0Y2hlcyB3aXRoIGBnaXQgc2VuZC1lbWFpbGAKKworSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIEdpdEdpdEdhZGdldCwgeW91IGNhbiBhbHNvIHVzZSBHaXQgaXRzZWxmIHRvIG1haWwgeW91cgorcGF0Y2hlcy4gU29tZSBiZW5lZml0cyBvZiB1c2luZyBHaXQgdGhpcyB3YXkgaW5jbHVkZSBmaW5lciBncmFpbmVkIGNvbnRyb2wgb2YKK3N1YmplY3QgbGluZSAoZm9yIGV4YW1wbGUsIGJlaW5nIGFibGUgdG8gdXNlIHRoZSB0YWcgW1JGQyBQQVRDSF0gaW4gdGhlIHN1YmplY3QpCithbmQgYmVpbmcgYWJsZSB0byBzZW5kIGEgYGBkcnkgcnVuJycgbWFpbCB0byB5b3Vyc2VsZiB0byBlbnN1cmUgaXQgYWxsIGxvb2tzCitnb29kIGJlZm9yZSBnb2luZyBvdXQgdG8gdGhlIGxpc3QuCisKK1tbc2V0dXAtZ2l0LXNlbmQtZW1haWxdXQorPT09IFByZXJlcXVpc2l0ZTogU2V0dGluZyBVcCBgZ2l0IHNlbmQtZW1haWxgCisKK0NvbmZpZ3VyYXRpb24gZm9yIGBzZW5kLWVtYWlsYCBjYW4gdmFyeSBiYXNlZCBvbiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gYW5kIGVtYWlsCitwcm92aWRlciwgYW5kIHNvIHdpbGwgbm90IGJlIGNvdmVyZWQgaW4gdGhpcyB0dXRvcmlhbCwgYmV5b25kIHN0YXRpbmcgdGhhdCBpbgorbWFueSBkaXN0cmlidXRpb25zIG9mIExpbnV4LCBgZ2l0LXNlbmQtZW1haWxgIGlzIG5vdCBwYWNrYWdlZCBhbG9uZ3NpZGUgdGhlCit0eXBpY2FsIGBnaXRgIGluc3RhbGwuIFlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIHRoaXMgYWRkaXRpb25hbCBwYWNrYWdlOyB0aGVyZQorYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBvbmxpbmUgdG8gaGVscCB5b3UgZG8gc28uIFlvdSB3aWxsIGFsc28gbmVlZCB0bworZGV0ZXJtaW5lIHRoZSByaWdodCB3YXkgdG8gY29uZmlndXJlIGl0IHRvIHVzZSB5b3VyIFNNVFAgc2VydmVyOyBhZ2FpbiwgYXMgdGhpcworY29uZmlndXJhdGlvbiBjYW4gY2hhbmdlIHNpZ25pZmljYW50bHkgYmFzZWQgb24geW91ciBzeXN0ZW0gYW5kIGVtYWlsIHNldHVwLCBpdAoraXMgb3V0IG9mIHNjb3BlIGZvciB0aGUgY29udGV4dCBvZiB0aGlzIHR1dG9yaWFsLgorCitbW2Zvcm1hdC1wYXRjaF1dCis9PT0gUHJlcGFyaW5nIEluaXRpYWwgUGF0Y2hzZXQKKworU2VuZGluZyBlbWFpbHMgd2l0aCBHaXQgaXMgYSB0d28tcGFydCBwcm9jZXNzOyBiZWZvcmUgeW91IGNhbiBwcmVwYXJlIHRoZSBlbWFpbHMKK3RoZW1zZWx2ZXMsIHlvdSdsbCBuZWVkIHRvIHByZXBhcmUgdGhlIHBhdGNoZXMuIEx1Y2tpbHksIHRoaXMgaXMgcHJldHR5IHNpbXBsZToKKworLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC1vIHBzdWgvIG1hc3Rlci4ucHN1aAorLS0tLQorCitUaGUgYC0tY292ZXItbGV0dGVyYCBwYXJhbWV0ZXIgdGVsbHMgYGZvcm1hdC1wYXRjaGAgdG8gY3JlYXRlIGEgY292ZXIgbGV0dGVyCit0ZW1wbGF0ZSBmb3IgeW91LiBZb3Ugd2lsbCBuZWVkIHRvIGZpbGwgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZSB5b3UncmUgcmVhZHkKK3RvIHNlbmQgLSBidXQgZm9yIG5vdywgdGhlIHRlbXBsYXRlIHdpbGwgYmUgbmV4dCB0byB5b3VyIG90aGVyIHBhdGNoZXMuCisKK1RoZSBgLW8gcHN1aC9gIHBhcmFtZXRlciB0ZWxscyBgZm9ybWF0LXBhdGNoYCB0byBwbGFjZSB0aGUgcGF0Y2ggZmlsZXMgaW50byBhCitkaXJlY3RvcnkuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgYGdpdCBzZW5kLWVtYWlsYCBjYW4gdGFrZSBhIGRpcmVjdG9yeSBhbmQKK3NlbmQgb3V0IGFsbCB0aGUgcGF0Y2hlcyBmcm9tIHRoZXJlLgorCitgbWFzdGVyLi5wc3VoYCB0ZWxscyBgZm9ybWF0LXBhdGNoYCB0byBnZW5lcmF0ZSBwYXRjaGVzIGZvciB0aGUgZGlmZmVyZW5jZQorYmV0d2VlbiBgbWFzdGVyYCBhbmQgYHBzdWhgLiBJdCB3aWxsIG1ha2Ugb25lIHBhdGNoIGZpbGUgcGVyIGNvbW1pdC4gQWZ0ZXIgeW91CitydW4sIHlvdSBjYW4gZ28gaGF2ZSBhIGxvb2sgYXQgZWFjaCBvZiB0aGUgcGF0Y2hlcyB3aXRoIHlvdXIgZmF2b3JpdGUgdGV4dAorZWRpdG9yIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBsb29rcyBhbHJpZ2h0OyBob3dldmVyLCBpdCdzIG5vdCByZWNvbW1lbmRlZCB0bworbWFrZSBjb2RlIGZpeHVwcyB2aWEgdGhlIHBhdGNoIGZpbGUuIEl0J3MgYSBiZXR0ZXIgaWRlYSB0byBtYWtlIHRoZSBjaGFuZ2UgdGhlCitub3JtYWwgd2F5IHVzaW5nIGBnaXQgcmViYXNlIC1pYCBvciBieSBhZGRpbmcgYSBuZXcgY29tbWl0IHRoYW4gYnkgbW9kaWZ5aW5nIGEKK3BhdGNoLgorCitOT1RFOiBPcHRpb25hbGx5LCB5b3UgY2FuIGFsc28gdXNlIHRoZSBgLS1yZmNgIGZsYWcgdG8gcHJlZml4IHlvdXIgcGF0Y2ggc3ViamVjdAord2l0aCBgYFtSRkMgUEFUQ0hdJycgaW5zdGVhZCBvZiBgYFtQQVRDSF0nJy4gUkZDIHN0YW5kcyBmb3IgYGByZXF1ZXN0IGZvcgorY29tbWVudHMnJyBhbmQgaW5kaWNhdGVzIHRoYXQgd2hpbGUgeW91ciBjb2RlIGlzbid0IHF1aXRlIHJlYWR5IGZvciBzdWJtaXNzaW9uLAoreW91J2QgbGlrZSB0byBiZWdpbiB0aGUgY29kZSByZXZpZXcgcHJvY2Vzcy4gVGhpcyBjYW4gYWxzbyBiZSB1c2VkIHdoZW4geW91cgorcGF0Y2ggaXMgYSBwcm9wb3NhbCwgYnV0IHlvdSBhcmVuJ3Qgc3VyZSB3aGV0aGVyIHRoZSBjb21tdW5pdHkgd2FudHMgdG8gc29sdmUKK3RoZSBwcm9ibGVtIHdpdGggdGhhdCBhcHByb2FjaCBvciBub3QgLSB0byBjb25kdWN0IGEgc29ydCBvZiBkZXNpZ24gcmV2aWV3LiBZb3UKK21heSBhbHNvIHNlZSBvbiB0aGUgbGlzdCBwYXRjaGVzIG1hcmtlZCBgYFdJUCcnIC0gdGhpcyBtZWFucyB0aGV5IGFyZSBpbmNvbXBsZXRlCitidXQgd2FudCByZXZpZXdlcnMgdG8gbG9vayBhdCB3aGF0IHRoZXkgaGF2ZSBzbyBmYXIuIFlvdSBjYW4gYWRkIHRoaXMgZmxhZyB3aXRoCitgLS1zdWJqZWN0LXByZWZpeD1XSVBgLgorCitDaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgeW91ciBwYXRjaGVzIGFuZCBjb3ZlciBsZXR0ZXIgdGVtcGxhdGUgZXhpc3QgaW4gdGhlCitkaXJlY3RvcnkgeW91IHNwZWNpZmllZCAtIHlvdSdyZSBuZWFybHkgcmVhZHkgdG8gc2VuZCBvdXQgeW91ciByZXZpZXchCisKK1tbY292ZXItbGV0dGVyXV0KKz09PSBQcmVwYXJpbmcgRW1haWwKKworSW4gYWRkaXRpb24gdG8gYW4gZW1haWwgcGVyIHBhdGNoLCB0aGUgR2l0IGNvbW11bml0eSBhbHNvIGV4cGVjdHMgeW91ciBwYXRjaGVzCit0byBjb21lIHdpdGggYSBjb3ZlciBsZXR0ZXIsIHR5cGljYWxseSB3aXRoIGEgc3ViamVjdCBsaW5lIFtQQVRDSCAwL3hdICh3aGVyZQoreCBpcyB0aGUgbnVtYmVyIG9mIHBhdGNoZXMgeW91J3JlIHNlbmRpbmcpLiBTaW5jZSB5b3UgaW52b2tlZCBgZm9ybWF0LXBhdGNoYAord2l0aCBgLS1jb3Zlci1sZXR0ZXJgLCB5b3UndmUgYWxyZWFkeSBnb3QgYSB0ZW1wbGF0ZSByZWFkeS4gT3BlbiBpdCB1cCBpbiB5b3VyCitmYXZvcml0ZSBlZGl0b3IuCisKK1lvdSBzaG91bGQgc2VlIGEgbnVtYmVyIG9mIGhlYWRlcnMgcHJlc2VudCBhbHJlYWR5LiBDaGVjayB0aGF0IHlvdXIgYEZyb206YAoraGVhZGVyIGlzIGNvcnJlY3QuIFRoZW4gbW9kaWZ5IHlvdXIgYFN1YmplY3Q6YCB0byBzb21ldGhpbmcgd2hpY2ggc3VjY2luY3RseQorY292ZXJzIHRoZSBwdXJwb3NlIG9mIHlvdXIgZW50aXJlIHRvcGljIGJyYW5jaCwgZm9yIGV4YW1wbGU6CisKKy0tLS0KK1N1YmplY3Q6IFtQQVRDSCAwLzddIGFkZGluZyB0aGUgJ3BzdWgnIGNvbW1hbmQKKy0tLS0KKworTWFrZSBzdXJlIHlvdSByZXRhaW4gdGhlIGBgW1BBVENIIDAvWF0nJyBwYXJ0OyB0aGF0J3Mgd2hhdCBpbmRpY2F0ZXMgdG8gdGhlIEdpdAorY29tbXVuaXR5IHRoYXQgdGhpcyBlbWFpbCBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgcmV2aWV3LCBhbmQgbWFueSByZXZpZXdlcnMKK2ZpbHRlciB0aGVpciBlbWFpbCBmb3IgdGhpcyB0eXBlIG9mIGZsYWcuCisKK1lvdSdsbCBuZWVkIHRvIGFkZCBzb21lIGV4dHJhIHBhcmFtZXRlcnMgd2hlbiB5b3UgaW52b2tlIGBnaXQgc2VuZC1lbWFpbGAgdG8gYWRkCit0aGUgY292ZXIgbGV0dGVyLgorCitOZXh0IHlvdSdsbCBoYXZlIHRvIGZpbGwgb3V0IHRoZSBib2R5IG9mIHlvdXIgY292ZXIgbGV0dGVyLiBUaGlzIGlzIGFuIGltcG9ydGFudAorY29tcG9uZW50IG9mIGNoYW5nZSBzdWJtaXNzaW9uIGFzIGl0IGV4cGxhaW5zIHRvIHRoZSBjb21tdW5pdHkgZnJvbSBhIGhpZ2ggbGV2ZWwKK3doYXQgeW91J3JlIHRyeWluZyB0byBkbywgYW5kIHdoeSwgaW4gYSB3YXkgdGhhdCdzIG1vcmUgYXBwYXJlbnQgdGhhbiBqdXN0Citsb29raW5nIGF0IHlvdXIgZGlmZi4gQmUgc3VyZSB0byBleHBsYWluIGFueXRoaW5nIHlvdXIgZGlmZiBkb2Vzbid0IG1ha2UgY2xlYXIKK29uIGl0cyBvd24uCisKK0hlcmUncyBhbiBleGFtcGxlIGJvZHkgZm9yIGBwc3VoYDoKKworLS0tLQorT3VyIGludGVybmFsIG1ldHJpY3MgaW5kaWNhdGUgd2lkZXNwcmVhZCBpbnRlcmVzdCBpbiB0aGUgY29tbWFuZAorZ2l0LXBzdWggLSB0aGF0IGlzLCBtYW55IHVzZXJzIGFyZSB0cnlpbmcgdG8gdXNlIGl0LCBidXQgZmluZGluZyBpdCBpcwordW5hdmFpbGFibGUsIHVzaW5nIHNvbWUgdW5rbm93biB3b3JrYXJvdW5kIGluc3RlYWQuCisKK1RoZSBmb2xsb3dpbmcgaGFuZGZ1bCBvZiBwYXRjaGVzIGFkZCB0aGUgcHN1aCBjb21tYW5kIGFuZCBpbXBsZW1lbnQgc29tZQoraGFuZHkgZmVhdHVyZXMgb24gdG9wIG9mIGl0LgorCitUaGlzIHBhdGNoc2V0IGlzIHBhcnQgb2YgdGhlIE15Rmlyc3RDb250cmlidXRpb24gdHV0b3JpYWwgYW5kIHNob3VsZCBub3QKK2JlIG1lcmdlZC4KKy0tLS0KKworVGhlIHRlbXBsYXRlIGNyZWF0ZWQgYnkgYGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXJgIGluY2x1ZGVzIGEgZGlmZnN0YXQuCitUaGlzIGdpdmVzIHJldmlld2VycyBhIHN1bW1hcnkgb2Ygd2hhdCB0aGV5J3JlIGluIGZvciB3aGVuIHJldmlld2luZyB5b3VyIHRvcGljLgorVGhlIG9uZSBnZW5lcmF0ZWQgZm9yIGBwc3VoYCBmcm9tIHRoZSBzYW1wbGUgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZSB0aGlzOgorCistLS0tCisgRG9jdW1lbnRhdGlvbi9naXQtcHN1aC50eHQgfCA0MCArKysrKysrKysrKysrKysrKysrKysKKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBidWlsdGluLmggICAgICAgICAgICAgICAgICB8ICAxICsKKyBidWlsdGluL3BzdWguYyAgICAgICAgICAgICB8IDczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ2l0LmMgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgdC90OTk5OS1wc3VoLXR1dG9yaWFsLnNoICAgfCAxMiArKysrKysrCisgNiBmaWxlcyBjaGFuZ2VkLCAxMjggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2dpdC1wc3VoLnR4dAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBidWlsdGluL3BzdWguYworIGNyZWF0ZSBtb2RlIDEwMDc1NSB0L3Q5OTk5LXBzdWgtdHV0b3JpYWwuc2gKKy0tLS0KKworRmluYWxseSwgdGhlIGxldHRlciB3aWxsIGluY2x1ZGUgdGhlIHZlcnNpb24gb2YgR2l0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlCitwYXRjaGVzLiBZb3UgY2FuIGxlYXZlIHRoYXQgc3RyaW5nIGFsb25lLgorCitbW3NlbmRpbmctZ2l0LXNlbmQtZW1haWxdXQorPT09IFNlbmRpbmcgRW1haWwKKworQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGhhdmUgYSBkaXJlY3RvcnkgYHBzdWgvYCB3aGljaCBpcyBmaWxsZWQgd2l0aCB5b3VyCitwYXRjaGVzIGFuZCBhIGNvdmVyIGxldHRlci4gVGltZSB0byBtYWlsIGl0IG91dCEgWW91IGNhbiBzZW5kIGl0IGxpa2UgdGhpczoKKworLS0tLQorJCBnaXQgc2VuZC1lbWFpbCAtLXRvPXRhcmdldEBleGFtcGxlLmNvbSBwc3VoLyoucGF0Y2gKKy0tLS0KKworTk9URTogQ2hlY2sgYGdpdCBoZWxwIHNlbmQtZW1haWxgIGZvciBzb21lIG90aGVyIG9wdGlvbnMgd2hpY2ggeW91IG1heSBmaW5kCit2YWx1YWJsZSwgc3VjaCBhcyBjaGFuZ2luZyB0aGUgUmVwbHktdG8gYWRkcmVzcyBvciBhZGRpbmcgbW9yZSBDQyBhbmQgQkNDIGxpbmVzLgorCitOT1RFOiBXaGVuIHlvdSBhcmUgc2VuZGluZyBhIHJlYWwgcGF0Y2gsIGl0IHdpbGwgZ28gdG8gZ2l0QHZnZXIua2VybmVsLm9yZyAtIGJ1dAorcGxlYXNlIGRvbid0IHNlbmQgeW91ciBwYXRjaHNldCBmcm9tIHRoZSB0dXRvcmlhbCB0byB0aGUgcmVhbCBtYWlsaW5nIGxpc3QhIEZvcgorbm93LCB5b3UgY2FuIHNlbmQgaXQgdG8geW91cnNlbGYsIHRvIG1ha2Ugc3VyZSB5b3UgdW5kZXJzdGFuZCBob3cgaXQgd2lsbCBsb29rLgorCitBZnRlciB5b3UgcnVuIHRoZSBjb21tYW5kIGFib3ZlLCB5b3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCBhbiBpbnRlcmFjdGl2ZQorcHJvbXB0IGZvciBlYWNoIHBhdGNoIHRoYXQncyBhYm91dCB0byBnbyBvdXQuIFRoaXMgZ2l2ZXMgeW91IG9uZSBsYXN0IGNoYW5jZSB0bworZWRpdCBvciBxdWl0IHNlbmRpbmcgc29tZXRoaW5nIChidXQgYWdhaW4sIGRvbid0IGVkaXQgY29kZSB0aGlzIHdheSkuIE9uY2UgeW91CitwcmVzcyBgeWAgb3IgYGFgIGF0IHRoZXNlIHByb21wdHMgeW91ciBlbWFpbHMgd2lsbCBiZSBzZW50ISBDb25ncmF0dWxhdGlvbnMhCisKK0F3ZXNvbWUsIG5vdyB0aGUgY29tbXVuaXR5IHdpbGwgZHJvcCBldmVyeXRoaW5nIGFuZCByZXZpZXcgeW91ciBjaGFuZ2VzLiAoSnVzdAora2lkZGluZyAtIGJlIHBhdGllbnQhKQorCitbW3YyLWdpdC1zZW5kLWVtYWlsXV0KKz09PSBTZW5kaW5nIHYyCisKK1NraXAgYWhlYWQgdG8gPDxyZXZpZXdpbmcsUmVzcG9uZGluZyB0byBSZXZpZXdzPj4gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0bworaGFuZGxlIGNvbW1lbnRzIGZyb20gcmV2aWV3ZXJzLiBDb250aW51ZSB0aGlzIHNlY3Rpb24gd2hlbiB5b3VyIHRvcGljIGJyYW5jaCBpcworc2hhcGVkIHRoZSB3YXkgeW91IHdhbnQgaXQgdG8gbG9vayBmb3IgeW91ciBwYXRjaHNldCB2Mi4KKworV2hlbiB5b3UncmUgcmVhZHkgd2l0aCB0aGUgbmV4dCBpdGVyYXRpb24gb2YgeW91ciBwYXRjaCwgdGhlIHByb2Nlc3MgaXMgZmFpcmx5CitzaW1pbGFyLgorCitGaXJzdCwgZ2VuZXJhdGUgeW91ciB2MiBwYXRjaGVzIGFnYWluOgorCistLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggLXYyIC0tY292ZXItbGV0dGVyIC1vIHBzdWgvIG1hc3Rlci4ucHN1aAorLS0tLQorCitUaGlzIHdpbGwgYWRkIHlvdXIgdjIgcGF0Y2hlcywgYWxsIG5hbWVkIGxpa2UgYHYyLTAwMG4tbXktY29tbWl0LXN1YmplY3QucGF0Y2hgLAordG8gdGhlIGBwc3VoL2AgZGlyZWN0b3J5LiBZb3UgbWF5IG5vdGljZSB0aGF0IHRoZXkgYXJlIHNpdHRpbmcgYWxvbmdzaWRlIHRoZSB2MQorcGF0Y2hlczsgdGhhdCdzIGZpbmUsIGJ1dCBiZSBjYXJlZnVsIHdoZW4geW91IGFyZSByZWFkeSB0byBzZW5kIHRoZW0uCisKK0VkaXQgeW91ciBjb3ZlciBsZXR0ZXIgYWdhaW4uIE5vdyBpcyBhIGdvb2QgdGltZSB0byBtZW50aW9uIHdoYXQncyBkaWZmZXJlbnQKK2JldHdlZW4geW91ciBsYXN0IHZlcnNpb24gYW5kIG5vdywgaWYgaXQncyBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIFlvdSBkbyBub3QKK25lZWQgdGhlIGV4YWN0IHNhbWUgYm9keSBpbiB5b3VyIHNlY29uZCBjb3ZlciBsZXR0ZXI7IGZvY3VzIG9uIGV4cGxhaW5pbmcgdG8KK3Jldmlld2VycyB0aGUgY2hhbmdlcyB5b3UndmUgbWFkZSB0aGF0IG1heSBub3QgYmUgYXMgdmlzaWJsZS4KKworWW91IHdpbGwgYWxzbyBuZWVkIHRvIGdvIGFuZCBmaW5kIHRoZSBNZXNzYWdlLUlkIG9mIHlvdXIgcHJldmlvdXMgY292ZXIgbGV0dGVyLgorWW91IGNhbiBlaXRoZXIgbm90ZSBpdCB3aGVuIHlvdSBzZW5kIHRoZSBmaXJzdCBzZXJpZXMsIGZyb20gdGhlIG91dHB1dCBvZiBgZ2l0CitzZW5kLWVtYWlsYCwgb3IgeW91IGNhbiBsb29rIGl0IHVwIG9uIHRoZQoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0W21haWxpbmcgbGlzdF0uIEZpbmQgeW91ciBjb3ZlciBsZXR0ZXIgaW4gdGhlCithcmNoaXZlcywgY2xpY2sgb24gaXQsIHRoZW4gY2xpY2sgInBlcm1hbGluayIgb3IgInJhdyIgdG8gcmV2ZWFsIHRoZSBNZXNzYWdlLUlkCitoZWFkZXIuIEl0IHNob3VsZCBtYXRjaDoKKworLS0tLQorTWVzc2FnZS1JZDogPGZvby4xMjM0NS5hdXRob3JAZXhhbXBsZS5jb20+CistLS0tCisKK1lvdXIgTWVzc2FnZS1JZCBpcyBgPGZvby4xMjM0NS5hdXRob3JAZXhhbXBsZS5jb20+YC4gVGhpcyBleGFtcGxlIHdpbGwgYmUgdXNlZAorYmVsb3cgYXMgd2VsbDsgbWFrZSBzdXJlIHRvIHJlcGxhY2UgaXQgd2l0aCB0aGUgY29ycmVjdCBNZXNzYWdlLUlkIGZvciB5b3VyCisqKnByZXZpb3VzIGNvdmVyIGxldHRlcioqIC0gdGhhdCBpcywgaWYgeW91J3JlIHNlbmRpbmcgdjIsIHVzZSB0aGUgTWVzc2FnZS1JZAorZnJvbSB2MTsgaWYgeW91J3JlIHNlbmRpbmcgdjMsIHVzZSB0aGUgTWVzc2FnZS1JZCBmcm9tIHYyLgorCitXaGlsZSB5b3UncmUgbG9va2luZyBhdCB0aGUgZW1haWwsIHlvdSBzaG91bGQgYWxzbyBub3RlIHdobyBpcyBDQydkLCBhcyBpdCdzCitjb21tb24gcHJhY3RpY2UgaW4gdGhlIG1haWxpbmcgbGlzdCB0byBrZWVwIGFsbCBDQ3Mgb24gYSB0aHJlYWQuIFlvdSBjYW4gYWRkCit0aGVzZSBDQyBsaW5lcyBkaXJlY3RseSB0byB5b3VyIGNvdmVyIGxldHRlciB3aXRoIGEgbGluZSBsaWtlIHNvIGluIHRoZSBoZWFkZXIKKyhiZWZvcmUgdGhlIFN1YmplY3QgbGluZSk6CisKKy0tLS0KK0NDOiBhdXRob3JAZXhhbXBsZS5jb20sIE90aGUgUiA8b3RoZXJAZXhhbXBsZS5jb20+CistLS0tCisKK05vdyBzZW5kIHRoZSBlbWFpbHMgYWdhaW4sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gd2hpY2ggbWVzc2FnZXMgeW91IHBhc3MgaW4KK3RvIHRoZSBjb21tYW5kOgorCistLS0tCiskIGdpdCBzZW5kLWVtYWlsIC0tdG89dGFyZ2V0QGV4YW1wbGUuY29tCisJCSAtLWluLXJlcGx5LXRvPSI8Zm9vLjEyMzQ1LmF1dGhvckBleGFtcGxlLmNvbT4iCisJCSBwc3VoL3YyKgorLS0tLQorCitbW3NpbmdsZS1wYXRjaF1dCis9PT0gQm9udXMgQ2hhcHRlcjogT25lLVBhdGNoIENoYW5nZXMKKworSW4gc29tZSBjYXNlcywgeW91ciB2ZXJ5IHNtYWxsIGNoYW5nZSBtYXkgY29uc2lzdCBvZiBvbmx5IG9uZSBwYXRjaC4gV2hlbiB0aGF0CitoYXBwZW5zLCB5b3Ugb25seSBuZWVkIHRvIHNlbmQgb25lIGVtYWlsLiBZb3VyIGNvbW1pdCBtZXNzYWdlIHNob3VsZCBhbHJlYWR5IGJlCittZWFuaW5nZnVsIGFuZCBleHBsYWluIGF0IGEgaGlnaCBsZXZlbCB0aGUgcHVycG9zZSAod2hhdCBpcyBoYXBwZW5pbmcgYW5kIHdoeSkKK29mIHlvdXIgcGF0Y2gsIGJ1dCBpZiB5b3UgbmVlZCB0byBzdXBwbHkgZXZlbiBtb3JlIGNvbnRleHQsIHlvdSBjYW4gZG8gc28gYmVsb3cKK3RoZSBgLS0tYCBpbiB5b3VyIHBhdGNoLiBUYWtlIHRoZSBleGFtcGxlIGJlbG93LCB3aGljaCB3YXMgZ2VuZXJhdGVkIHdpdGggYGdpdAorZm9ybWF0LXBhdGNoYCBvbiBhIHNpbmdsZSBjb21taXQsIGFuZCB0aGVuIGVkaXRlZCB0byBhZGQgdGhlIGNvbnRlbnQgYmV0d2VlbgordGhlIGAtLS1gIGFuZCB0aGUgZGlmZnN0YXQuCisKKy0tLS0KK0Zyb20gMTM0NWJiYjNmN2FjNzRhYmRlMDQwYzEyZTczNzIwNDY4OWE3MjcyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUsIDE4IEFwciAyMDE5IDE1OjExOjAyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJFQURNRTogY2hhbmdlIHRoZSBncmFtbWFyCisKK0kgdGhpbmsgaXQgbG9va3MgYmV0dGVyIHRoaXMgd2F5LiBUaGlzIHBhcnQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbGwKK2VuZCB1cCBpbiB0aGUgY29tbWl0LWxvZy4KKworU2lnbmVkLW9mZi1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKy0tLQorTGV0J3MgaGF2ZSBhIHdpbGQgZGlzY3Vzc2lvbiBhYm91dCBncmFtbWFyIG9uIHRoZSBtYWlsaW5nIGxpc3QuIFRoaXMKK3BhcnQgb2YgbXkgZW1haWwgd2lsbCBuZXZlciBlbmQgdXAgaW4gdGhlIGNvbW1pdCBsb2cuIEhlcmUgaXMgd2hlcmUgSQorY2FuIGFkZCBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIG1haWxpbmcgbGlzdCBhYm91dCBteSBpbnRlbnQsIG91dHNpZGUKK29mIHRoZSBjb250ZXh0IG9mIHRoZSBjb21taXQgbG9nLiBUaGlzIHNlY3Rpb24gd2FzIGFkZGVkIGFmdGVyIGBnaXQKK2Zvcm1hdC1wYXRjaGAgd2FzIHJ1biwgYnkgZWRpdGluZyB0aGUgcGF0Y2ggZmlsZSBpbiBhIHRleHQgZWRpdG9yLgorCisgUkVBRE1FLm1kIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCitpbmRleCA4OGYxMjYxODRjLi4zOGRhNTkzYTYwIDEwMDY0NAorLS0tIGEvUkVBRE1FLm1kCisrKysgYi9SRUFETUUubWQKK0BAIC0zLDcgKzMsNyBAQAorIEdpdCAtIGZhc3QsIHNjYWxhYmxlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistR2l0IGlzIGEgZmFzdCwgc2NhbGFibGUsIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtIHdpdGggYW4KKytHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgYW5kIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtIHdpdGggYW4KKyB1bnVzdWFsbHkgcmljaCBjb21tYW5kIHNldCB0aGF0IHByb3ZpZGVzIGJvdGggaGlnaC1sZXZlbCBvcGVyYXRpb25zCisgYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworLS0KKzIuMjEuMC4zOTIuZ2Y4ZjY3ODcxNTllLWdvb2cKKy0tLS0KKworW1tub3ctd2hhdF1dCis9PSBNeSBQYXRjaCBHb3QgRW1haWxlZCAtIE5vdyBXaGF0PworCitbW3Jldmlld2luZ11dCis9PT0gUmVzcG9uZGluZyB0byBSZXZpZXdzCisKK0FmdGVyIGEgZmV3IGRheXMsIHlvdSB3aWxsIGhvcGVmdWxseSByZWNlaXZlIGEgcmVwbHkgdG8geW91ciBwYXRjaHNldCB3aXRoIHNvbWUKK2NvbW1lbnRzLiBXb29ob28hIE5vdyB5b3UgY2FuIGdldCBiYWNrIHRvIHdvcmsuCisKK0l0J3MgZ29vZCBtYW5uZXJzIHRvIHJlcGx5IHRvIGVhY2ggY29tbWVudCwgbm90aWZ5aW5nIHRoZSByZXZpZXdlciB0aGF0IHlvdSBoYXZlCittYWRlIHRoZSBjaGFuZ2UgcmVxdWVzdGVkLCBmZWVsIHRoZSBvcmlnaW5hbCBpcyBiZXR0ZXIsIG9yIHRoYXQgdGhlIGNvbW1lbnQKK2luc3BpcmVkIHlvdSB0byBkbyBzb21ldGhpbmcgYSBuZXcgd2F5IHdoaWNoIGlzIHN1cGVyaW9yIHRvIGJvdGggdGhlIG9yaWdpbmFsCithbmQgdGhlIHN1Z2dlc3RlZCBjaGFuZ2UuIFRoaXMgd2F5IHJldmlld2VycyBkb24ndCBuZWVkIHRvIGluc3BlY3QgeW91ciB2MiB0bworZmlndXJlIG91dCB3aGV0aGVyIHlvdSBpbXBsZW1lbnRlZCB0aGVpciBjb21tZW50IG9yIG5vdC4KKworSWYgeW91IGFyZSBnb2luZyB0byBwdXNoIGJhY2sgb24gYSBjb21tZW50LCBiZSBwb2xpdGUgYW5kIGV4cGxhaW4gd2h5IHlvdSBmZWVsCit5b3VyIG9yaWdpbmFsIGlzIGJldHRlcjsgYmUgcHJlcGFyZWQgdGhhdCB0aGUgcmV2aWV3ZXIgbWF5IHN0aWxsIGRpc2FncmVlIHdpdGgKK3lvdSwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb21tdW5pdHkgbWF5IHdlaWdoIGluIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhlci4gQXMKK3dpdGggYWxsIGNvZGUgcmV2aWV3cywgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCBhbiBvcGVuIG1pbmQgdG8gZG9pbmcgc29tZXRoaW5nIGEKK2RpZmZlcmVudCB3YXkgdGhhbiB5b3Ugb3JpZ2luYWxseSBwbGFubmVkOyBvdGhlciByZXZpZXdlcnMgaGF2ZSBhIGRpZmZlcmVudAorcGVyc3BlY3RpdmUgb24gdGhlIHByb2plY3QgdGhhbiB5b3UgZG8sIGFuZCBtYXkgYmUgdGhpbmtpbmcgb2YgYSB2YWxpZCBzaWRlCitlZmZlY3Qgd2hpY2ggaGFkIG5vdCBvY2N1cnJlZCB0byB5b3UuIEl0IGlzIGFsd2F5cyBva2F5IHRvIGFzayBmb3IgY2xhcmlmaWNhdGlvbgoraWYgeW91IGFyZW4ndCBzdXJlIHdoeSBhIGNoYW5nZSB3YXMgc3VnZ2VzdGVkLCBvciB3aGF0IHRoZSByZXZpZXdlciBpcyBhc2tpbmcKK3lvdSB0byBkby4KKworTWFrZSBzdXJlIHlvdXIgZW1haWwgY2xpZW50IGhhcyBhIHBsYWludGV4dCBlbWFpbCBtb2RlIGFuZCBpdCBpcyB0dXJuZWQgb247IHRoZQorR2l0IGxpc3QgcmVqZWN0cyBIVE1MIGVtYWlsLiBQbGVhc2UgYWxzbyBmb2xsb3cgdGhlIG1haWxpbmcgbGlzdCBldGlxdWV0dGUKK291dGxpbmVkIGluIHRoZQoraHR0cHM6Ly9rZXJuZWwuZ29vZ2xlc291cmNlLmNvbS9wdWIvc2NtL2dpdC9naXQvKy90b2RvL01haW50Tm90ZXNbTWFpbnRhaW5lcidzCitOb3RlXSwgd2hpY2ggYXJlIHNpbWlsYXIgdG8gZXRpcXVldHRlIHJ1bGVzIGluIG1vc3Qgb3BlbiBzb3VyY2UgY29tbXVuaXRpZXMKK3N1cnJvdW5kaW5nIGJvdHRvbS1wb3N0aW5nIGFuZCBpbmxpbmUgcmVwbGllcy4KKworV2hlbiB5b3UncmUgbWFraW5nIGNoYW5nZXMgdG8geW91ciBjb2RlLCBpdCBpcyBjbGVhbmVzdCAtIHRoYXQgaXMsIHRoZSByZXN1bHRpbmcKK2NvbW1pdHMgYXJlIGVhc2llc3QgdG8gbG9vayBhdCAtIGlmIHlvdSB1c2UgYGdpdCByZWJhc2UgLWlgIChpbnRlcmFjdGl2ZQorcmViYXNlKS4gVGFrZSBhIGxvb2sgYXQgdGhpcworaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L2dpdC1wb2NrZXQtZ3VpZGUvOTc4MTQ0OTMyNzUwNy9jaDEwLmh0bWxbb3ZlcnZpZXddCitmcm9tIE8nUmVpbGx5LiBUaGUgZ2VuZXJhbCBpZGVhIGlzIHRvIG1vZGlmeSBlYWNoIGNvbW1pdCB3aGljaCByZXF1aXJlcyBjaGFuZ2VzOwordGhpcyB3YXksIGluc3RlYWQgb2YgaGF2aW5nIGEgcGF0Y2ggQSB3aXRoIGEgbWlzdGFrZSwgYSBwYXRjaCBCIHdoaWNoIHdhcyBmaW5lCithbmQgcmVxdWlyZWQgbm8gdXBzdHJlYW0gcmV2aWV3cyBpbiB2MSwgYW5kIGEgcGF0Y2ggQyB3aGljaCBmaXhlcyBwYXRjaCBBIGZvcgordjIsIHlvdSBjYW4ganVzdCBzaGlwIGEgdjIgd2l0aCBhIGNvcnJlY3QgcGF0Y2ggQSBhbmQgY29ycmVjdCBwYXRjaCBCLiBUaGlzIGlzCitjaGFuZ2luZyBoaXN0b3J5LCBidXQgc2luY2UgaXQncyBsb2NhbCBoaXN0b3J5IHdoaWNoIHlvdSBoYXZlbid0IHNoYXJlZCB3aXRoCithbnlvbmUsIHRoYXQgaXMgb2theSBmb3Igbm93ISAoTGF0ZXIsIGl0IG1heSBub3QgbWFrZSBzZW5zZSB0byBkbyB0aGlzOyB0YWtlIGEKK2xvb2sgYXQgdGhlIHNlY3Rpb24gYmVsb3cgdGhpcyBvbmUgZm9yIHNvbWUgY29udGV4dC4pCisKK1tbYWZ0ZXItYXBwcm92YWxdXQorPT09IEFmdGVyIFJldmlldyBBcHByb3ZhbAorCitUaGUgR2l0IHByb2plY3QgaGFzIGZvdXIgaW50ZWdyYXRpb24gYnJhbmNoZXM6IGBwdWAsIGBuZXh0YCwgYG1hc3RlcmAsIGFuZAorYG1haW50YC4gWW91ciBjaGFuZ2Ugd2lsbCBiZSBwbGFjZWQgaW50byBgcHVgIGZhaXJseSBlYXJseSBvbiBieSB0aGUgbWFpbnRhaW5lcgord2hpbGUgaXQgaXMgc3RpbGwgaW4gdGhlIHJldmlldyBwcm9jZXNzOyBmcm9tIHRoZXJlLCB3aGVuIGl0IGlzIHJlYWR5IGZvciB3aWRlcgordGVzdGluZywgaXQgd2lsbCBiZSBtZXJnZWQgaW50byBgbmV4dGAuIFBsZW50eSBvZiBlYXJseSB0ZXN0ZXJzIHVzZSBgbmV4dGAgYW5kCittYXkgcmVwb3J0IGlzc3Vlcy4gRXZlbnR1YWxseSwgY2hhbmdlcyBpbiBgbmV4dGAgd2lsbCBtYWtlIGl0IHRvIGBtYXN0ZXJgLAord2hpY2ggaXMgdHlwaWNhbGx5IGNvbnNpZGVyZWQgc3RhYmxlLiBGaW5hbGx5LCB3aGVuIGEgbmV3IHJlbGVhc2UgaXMgY3V0LAorYG1haW50YCBpcyB1c2VkIHRvIGJhc2UgYnVnZml4ZXMgb250by4gQXMgbWVudGlvbmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcworZG9jdW1lbnQsIHlvdSBjYW4gcmVhZCBgRG9jdW1lbnRzL1N1Ym1pdHRpbmdQYXRjaGVzYCBmb3Igc29tZSBtb3JlIGluZm8gYWJvdXQKK3RoZSB1c2Ugb2YgdGhlIHZhcmlvdXMgaW50ZWdyYXRpb24gYnJhbmNoZXMuCisKK0JhY2sgdG8gbm93OiB5b3VyIGNvZGUgaGFzIGJlZW4gbGF1ZGVkIGJ5IHRoZSB1cHN0cmVhbSByZXZpZXdlcnMuIEl0IGlzIHBlcmZlY3QuCitJdCBpcyByZWFkeSB0byBiZSBhY2NlcHRlZC4gWW91IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZWxzZTsgdGhlIG1haW50YWluZXIKK3dpbGwgbWVyZ2UgeW91ciB0b3BpYyBicmFuY2ggdG8gYG5leHRgIGFuZCBsaWZlIGlzIGdvb2QuCisKK0hvd2V2ZXIsIGlmIHlvdSBkaXNjb3ZlciBpdCBpc24ndCBzbyBwZXJmZWN0IGFmdGVyIHRoaXMgcG9pbnQsIHlvdSBtYXkgbmVlZCB0bwordGFrZSBzb21lIHNwZWNpYWwgc3RlcHMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBhcmUgaW4gdGhlIHByb2Nlc3MuCisKK0lmIHRoZSBtYWludGFpbmVyIGhhcyBhbm5vdW5jZWQgaW4gdGhlICJXaGF0J3MgY29va2luZyBpbiBnaXQuZ2l0IiBlbWFpbCB0aGF0Cit5b3VyIHRvcGljIGlzIG1hcmtlZCBmb3IgYG5leHRgIC0gdGhhdCBpcywgdGhhdCB0aGV5IHBsYW4gdG8gbWVyZ2UgaXQgdG8gYG5leHRgCitidXQgaGF2ZSBub3QgeWV0IGRvbmUgc28gLSB5b3Ugc2hvdWxkIHNlbmQgYW4gZW1haWwgYXNraW5nIHRoZSBtYWludGFpbmVyIHRvCit3YWl0IGEgbGl0dGxlIGxvbmdlcjogIkkndmUgc2VudCB2NCBvZiBteSBzZXJpZXMgYW5kIHlvdSBtYXJrZWQgaXQgZm9yIGBuZXh0YCwKK2J1dCBJIG5lZWQgdG8gY2hhbmdlIHRoaXMgYW5kIHRoYXQgLSBwbGVhc2Ugd2FpdCBmb3IgdjUgYmVmb3JlIHlvdSBtZXJnZSBpdC4iCisKK0lmIHRoZSB0b3BpYyBoYXMgYWxyZWFkeSBiZWVuIG1lcmdlZCB0byBgbmV4dGAsIHJhdGhlciB0aGFuIG1vZGlmeWluZyB5b3VyCitwYXRjaGVzIHdpdGggYGdpdCByZWJhc2UgLWlgLCB5b3Ugc2hvdWxkIG1ha2UgZnVydGhlciBjaGFuZ2VzIGluY3JlbWVudGFsbHkgLQordGhhdCBpcywgd2l0aCBhbm90aGVyIGNvbW1pdCwgYmFzZWQgb24gdG9wIG9mIHRoZSBtYWludGFpbmVyJ3MgdG9waWMgYnJhbmNoIGFzCitkZXRhaWxlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vZ2l0c3Rlci9naXQuIFlvdXIgd29yayBpcyBzdGlsbCBpbiB0aGUgc2FtZSB0b3BpYworYnV0IGlzIG5vdyBpbmNyZW1lbnRhbCwgcmF0aGVyIHRoYW4gYSB3aG9sZXNhbGUgcmV3cml0ZSBvZiB0aGUgdG9waWMgYnJhbmNoLgorCitUaGUgdG9waWMgYnJhbmNoZXMgaW4gdGhlIG1haW50YWluZXIncyBHaXRIdWIgYXJlIG1pcnJvcmVkIGluIEdpdEdpdEdhZGdldCwgc28KK2lmIHlvdSdyZSBzZW5kaW5nIHlvdXIgcmV2aWV3cyBvdXQgdGhhdCB3YXksIHlvdSBzaG91bGQgYmUgc3VyZSB0byBvcGVuIHlvdXIgUFIKK2FnYWluc3QgdGhlIGFwcHJvcHJpYXRlIEdpdEdpdEdhZGdldC9HaXQgYnJhbmNoLgorCitJZiB5b3UncmUgdXNpbmcgYGdpdCBzZW5kLWVtYWlsYCwgeW91IGNhbiB1c2UgaXQgdGhlIHNhbWUgd2F5IGFzIGJlZm9yZSwgYnV0IHlvdQorc2hvdWxkIGdlbmVyYXRlIHlvdXIgZGlmZnMgZnJvbSBgPHRvcGljPi4uPG15YnJhbmNoPmAgYW5kIGJhc2UgeW91ciB3b3JrIG9uCitgPHRvcGljPmAgaW5zdGVhZCBvZiBgbWFzdGVyYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTXlGaXJzdE9iamVjdFdhbGsudHh0IGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0T2JqZWN0V2Fsay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4MjhkZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vTXlGaXJzdE9iamVjdFdhbGsudHh0CkBAIC0wLDAgKzEsOTA1IEBACis9IE15IEZpcnN0IE9iamVjdCBXYWxrCisKKz09IFdoYXQncyBhbiBPYmplY3QgV2Fsaz8KKworVGhlIG9iamVjdCB3YWxrIGlzIGEga2V5IGNvbmNlcHQgaW4gR2l0IC0gdGhpcyBpcyB0aGUgcHJvY2VzcyB0aGF0IHVuZGVycGlucworb3BlcmF0aW9ucyBsaWtlIG9iamVjdCB0cmFuc2ZlciBhbmQgZnNjay4gQmVnaW5uaW5nIGZyb20gYSBnaXZlbiBjb21taXQsIHRoZQorbGlzdCBvZiBvYmplY3RzIGlzIGZvdW5kIGJ5IHdhbGtpbmcgcGFyZW50IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBjb21taXRzIChjb21taXQKK1ggYmFzZWQgb24gY29tbWl0IFcpIGFuZCBjb250YWlubWVudCByZWxhdGlvbnNoaXBzIGJldHdlZW4gb2JqZWN0cyAodHJlZSBZIGlzCitjb250YWluZWQgd2l0aGluIGNvbW1pdCBYLCBhbmQgYmxvYiBaIGlzIGxvY2F0ZWQgd2l0aGluIHRyZWUgWSwgZ2l2aW5nIG91cgord29ya2luZyB0cmVlIGZvciBjb21taXQgWCBzb21ldGhpbmcgbGlrZSBgeS96LnR4dGApLgorCitBIHJlbGF0ZWQgY29uY2VwdCBpcyB0aGUgcmV2aXNpb24gd2Fsaywgd2hpY2ggaXMgZm9jdXNlZCBvbiBjb21taXQgb2JqZWN0cyBhbmQKK3RoZWlyIHBhcmVudCByZWxhdGlvbnNoaXBzIGFuZCBkb2VzIG5vdCBkZWx2ZSBpbnRvIG90aGVyIG9iamVjdCB0eXBlcy4gVGhlCityZXZpc2lvbiB3YWxrIGlzIHVzZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBgZ2l0IGxvZ2AuCisKKz09PSBSZWxhdGVkIFJlYWRpbmcKKworLSBgRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC50eHRgIHVuZGVyICJIYWNraW5nIEdpdCIgY29udGFpbnMgc29tZSBjb3ZlcmFnZSBvZgorICB0aGUgcmV2aXNpb24gd2Fsa2VyIGluIGl0cyB2YXJpb3VzIGluY2FybmF0aW9ucy4KKy0gYHJldmlzaW9uLmhgCistIGh0dHBzOi8vZWFnYWluLm5ldC9hcnRpY2xlcy9naXQtZm9yLWNvbXB1dGVyLXNjaWVudGlzdHMvW0dpdCBmb3IgQ29tcHV0ZXIgU2NpZW50aXN0c10KKyAgZ2l2ZXMgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSB0eXBlcyBvZiBvYmplY3RzIGluIEdpdCBhbmQgd2hhdCB5b3VyIG9iamVjdAorICB3YWxrIGlzIHJlYWxseSBkZXNjcmliaW5nLgorCis9PSBTZXR0aW5nIFVwCisKK0NyZWF0ZSBhIG5ldyBicmFuY2ggZnJvbSBgbWFzdGVyYC4KKworLS0tLQorZ2l0IGNoZWNrb3V0IC1iIHJldndhbGsgb3JpZ2luL21hc3RlcgorLS0tLQorCitXZSdsbCBwdXQgb3VyIGZpZGRsaW5nIGludG8gYSBuZXcgY29tbWFuZC4gRm9yIGZ1biwgbGV0J3MgbmFtZSBpdCBgZ2l0IHdhbGtlbmAuCitPcGVuIHVwIGEgbmV3IGZpbGUgYGJ1aWx0aW4vd2Fsa2VuLmNgIGFuZCBzZXQgdXAgdGhlIGNvbW1hbmQgaGFuZGxlcjoKKworLS0tLQorLyoKKyAqICJnaXQgd2Fsa2VuIgorICoKKyAqIFBhcnQgb2YgdGhlICJNeSBGaXJzdCBPYmplY3QgV2FsayIgdHV0b3JpYWwuCisgKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworaW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJdHJhY2VfcHJpbnRmKF8oImNtZF93YWxrZW4gaW5jb21pbmcuLi5cbiIpKTsKKwlyZXR1cm4gMDsKK30KKy0tLS0KKworTk9URTogYHRyYWNlX3ByaW50ZigpYCBkaWZmZXJzIGZyb20gYHByaW50ZigpYCBpbiB0aGF0IGl0IGNhbiBiZSB0dXJuZWQgb24gb3IKK29mZiBhdCBydW50aW1lLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdHV0b3JpYWwsIHdlIHdpbGwgd3JpdGUgYHdhbGtlbmAgYXMKK3Rob3VnaCBpdCBpcyBpbnRlbmRlZCBmb3IgdXNlIGFzIGEgInBsdW1iaW5nIiBjb21tYW5kOiB0aGF0IGlzLCBhIGNvbW1hbmQgd2hpY2gKK2lzIHVzZWQgcHJpbWFyaWx5IGluIHNjcmlwdHMsIHJhdGhlciB0aGFuIGludGVyYWN0aXZlbHkgYnkgaHVtYW5zIChhICJwb3JjZWxhaW4iCitjb21tYW5kKS4gU28gd2Ugd2lsbCBzZW5kIG91ciBkZWJ1ZyBvdXRwdXQgdG8gYHRyYWNlX3ByaW50ZigpYCBpbnN0ZWFkLiBXaGVuCitydW5uaW5nLCBlbmFibGUgdHJhY2Ugb3V0cHV0IGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRfVFJBQ0VgLgorCitBZGQgdXNhZ2UgdGV4dCBhbmQgYC1oYCBoYW5kbGluZywgbGlrZSBhbGwgc3ViY29tbWFuZHMgc2hvdWxkIGNvbnNpc3RlbnRseSBkbworKG91ciB0ZXN0IHN1aXRlIHdpbGwgbm90aWNlIGFuZCBjb21wbGFpbiBpZiB5b3UgZmFpbCB0byBkbyBzbykuCisKKy0tLS0KK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKiBjb25zdCB3YWxrZW5fdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCB3YWxrZW4iKSwKKwkJTlVMTCwKKwl9CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHdhbGtlbl91c2FnZSwgMCk7CisKKwkuLi4KK30KKy0tLS0KKworQWxzbyBhZGQgdGhlIHJlbGV2YW50IGxpbmUgaW4gYGJ1aWx0aW4uaGAgbmVhciBgY21kX3doYXRjaGFuZ2VkKClgOgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CistLS0tCisKK0luY2x1ZGUgdGhlIGNvbW1hbmQgaW4gYGdpdC5jYCBpbiBgY29tbWFuZHNbXWAgbmVhciB0aGUgZW50cnkgZm9yIGB3aGF0Y2hhbmdlZGAsCittYWludGFpbmluZyBhbHBoYWJldGljYWwgb3JkZXJpbmc6CisKKy0tLS0KK3sgIndhbGtlbiIsIGNtZF93YWxrZW4sIFJVTl9TRVRVUCB9LAorLS0tLQorCitBZGQgaXQgdG8gdGhlIGBNYWtlZmlsZWAgbmVhciB0aGUgbGluZSBmb3IgYGJ1aWx0aW4vd29ya3RyZWUub2A6CisKKy0tLS0KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3dhbGtlbi5vCistLS0tCisKK0J1aWxkIGFuZCB0ZXN0IG91dCB5b3VyIGNvbW1hbmQsIHdpdGhvdXQgZm9yZ2V0dGluZyB0byBlbnN1cmUgdGhlIGBERVZFTE9QRVJgCitmbGFnIGlzIHNldCwgYW5kIHdpdGggYEdJVF9UUkFDRWAgZW5hYmxlZCBzbyB0aGUgZGVidWcgb3V0cHV0IGNhbiBiZSBzZWVuOgorCistLS0tCiskIGVjaG8gREVWRUxPUEVSPTEgPj5jb25maWcubWFrCiskIG1ha2UKKyQgR0lUX1RSQUNFPTEgLi9iaW4td3JhcHBlcnMvZ2l0IHdhbGtlbgorLS0tLQorCitOT1RFOiBGb3IgYSBtb3JlIGV4aGF1c3RpdmUgb3ZlcnZpZXcgb2YgdGhlIG5ldyBjb21tYW5kIHByb2Nlc3MsIHRha2UgYSBsb29rIGF0CitgRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dGAuCisKK05PVEU6IEEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGNhbiBiZSBmb3VuZCBhdAoraHR0cHM6Ly9naXRodWIuY29tL25hc2FtdWZmaW4vZ2l0L3RyZWUvcmV2d2Fsay4KKworPT09IGBzdHJ1Y3QgcmV2X2NtZGxpbmVfaW5mb2AKKworVGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCByZXZfY21kbGluZV9pbmZvYCBjYW4gYmUgZm91bmQgaW4gYHJldmlzaW9uLmhgLgorCitUaGlzIHN0cnVjdCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdCBhbmQgaXMgdXNlZCB0byByZWZsZWN0CitwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG92ZXIgdGhlIENMSS4KKworYG5yYCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgYHJldl9jbWRsaW5lX2VudHJ5YCBwcmVzZW50IGluIHRoZSBhcnJheS4KKworYGFsbG9jYCBpcyB1c2VkIGJ5IHRoZSBgQUxMT0NfR1JPV2AgbWFjcm8uIENoZWNrIGBjYWNoZS5oYCAtIHRoaXMgdmFyaWFibGUgaXMKK3VzZWQgdG8gdHJhY2sgdGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBsaXN0LgorCitQZXIgZW50cnksIHdlIGZpbmQ6CisKK2BpdGVtYCBpcyB0aGUgb2JqZWN0IHByb3ZpZGVkIHVwb24gd2hpY2ggdG8gYmFzZSB0aGUgb2JqZWN0IHdhbGsuIEl0ZW1zIGluIEdpdAorY2FuIGJlIGJsb2JzLCB0cmVlcywgY29tbWl0cywgb3IgdGFncy4gKFNlZSBgRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dGAuKQorCitgbmFtZWAgaXMgdGhlIG9iamVjdCBJRCAoT0lEKSBvZiB0aGUgb2JqZWN0IC0gYSBoZXggc3RyaW5nIHlvdSBtYXkgYmUgZmFtaWxpYXIKK3dpdGggZnJvbSB1c2luZyBHaXQgdG8gb3JnYW5pemUgeW91ciBzb3VyY2UgaW4gdGhlIHBhc3QuIENoZWNrIHRoZSB0dXRvcmlhbAorbWVudGlvbmVkIGFib3ZlIHRvd2FyZHMgdGhlIHRvcCBmb3IgYSBkaXNjdXNzaW9uIG9mIHdoZXJlIHRoZSBPSUQgY2FuIGNvbWUKK2Zyb20uCisKK2B3aGVuY2VgIGluZGljYXRlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgcGFyZW50cyBvZiB0aGUKK3NwZWNpZmllZCBvYmplY3QuIFdlJ2xsIGV4cGxvcmUgdGhpcyBmbGFnIG1vcmUgbGF0ZXIgb247IHRha2UgYSBsb29rIGF0CitgRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0YCB0byBnZXQgYW4gaWRlYSBvZiB3aGF0IGNvdWxkIHNldCB0aGUgYHdoZW5jZWAKK3ZhbHVlLgorCitgZmxhZ3NgIGFyZSB1c2VkIHRvIGhpbnQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmV2aXNpb24gd2FsayBhbmQgYXJlIHRoZSBmaXJzdAorYmxvY2sgdW5kZXIgdGhlIGAjaW5jbHVkZWBzIGluIGByZXZpc2lvbi5oYC4gVGhlIG1vc3QgbGlrZWx5IG9uZXMgdG8gYmUgc2V0IGluCit0aGUgYHJldl9jbWRsaW5lX2luZm9gIGFyZSBgVU5JTlRFUkVTVElOR2AgYW5kIGBCT1RUT01gLCBidXQgdGhlc2Ugc2FtZSBmbGFncworY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSB3YWxrLCBhcyB3ZWxsLgorCis9PT0gYHN0cnVjdCByZXZfaW5mb2AKKworVGhpcyBvbmUgaXMgcXVpdGUgYSBiaXQgbG9uZ2VyLCBhbmQgbWFueSBmaWVsZHMgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIHdhbGsKK2J5IGByZXZpc2lvbi5jYCAtIG5vdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE1vc3Qgb2YgdGhlIGNvbmZpZ3VyYWJsZSBmbGFncyBpbgorYHN0cnVjdCByZXZfaW5mb2AgaGF2ZSBhIG1pcnJvciBpbiBgRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dGAuIEl0J3MgYQorZ29vZCBpZGVhIHRvIHRha2Ugc29tZSB0aW1lIGFuZCByZWFkIHRocm91Z2ggdGhhdCBkb2N1bWVudC4KKworPT0gQmFzaWMgQ29tbWl0IFdhbGsKKworRmlyc3QsIGxldCdzIHNlZSBpZiB3ZSBjYW4gcmVwbGljYXRlIHRoZSBvdXRwdXQgb2YgYGdpdCBsb2cgLS1vbmVsaW5lYC4gV2UnbGwKK3JlZmVyIGJhY2sgdG8gdGhlIGltcGxlbWVudGF0aW9uIGZyZXF1ZW50bHkgdG8gZGlzY292ZXIgbm9ybXMgd2hlbiBwZXJmb3JtaW5nCithbiBvYmplY3Qgd2FsayBvZiBvdXIgb3duLgorCitUbyBkbyBzbywgd2UnbGwgZmlyc3QgZmluZCBhbGwgdGhlIGNvbW1pdHMsIGluIG9yZGVyLCB3aGljaCBwcmVjZWRlZCB0aGUgY3VycmVudAorY29tbWl0LiBXZSdsbCBleHRyYWN0IHRoZSBuYW1lIGFuZCBzdWJqZWN0IG9mIHRoZSBjb21taXQgZnJvbSBlYWNoLgorCitJZGVhbGx5LCB3ZSB3aWxsIGFsc28gYmUgYWJsZSB0byBmaW5kIG91dCB3aGljaCBvbmVzIGFyZSBjdXJyZW50bHkgYXQgdGhlIHRpcCBvZgordmFyaW91cyBicmFuY2hlcy4KKworPT09IFNldHRpbmcgVXAKKworUHJlcGFyaW5nIGZvciB5b3VyIG9iamVjdCB3YWxrIGhhcyBzb21lIGRpc3RpbmN0IHN0YWdlcy4KKworMS4gUGVyZm9ybSBkZWZhdWx0IHNldHVwIGZvciB0aGlzIG1vZGUsIGFuZCBvdGhlcnMgd2hpY2ggbWF5IGJlIGludm9rZWQuCisyLiBDaGVjayBjb25maWd1cmF0aW9uIGZpbGVzIGZvciByZWxldmFudCBzZXR0aW5ncy4KKzMuIFNldCB1cCB0aGUgYHJldl9pbmZvYCBzdHJ1Y3QuCis0LiBUd2VhayB0aGUgaW5pdGlhbGl6ZWQgYHJldl9pbmZvYCB0byBzdWl0IHRoZSBjdXJyZW50IHdhbGsuCis1LiBQcmVwYXJlIHRoZSBgcmV2X2luZm9gIGZvciB0aGUgd2Fsay4KKzYuIEl0ZXJhdGUgb3ZlciB0aGUgb2JqZWN0cywgcHJvY2Vzc2luZyBlYWNoIG9uZS4KKworPT09PSBEZWZhdWx0IFNldHVwcworCitCZWZvcmUgZXhhbWluaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hpY2ggbWF5IG1vZGlmeSBjb21tYW5kIGJlaGF2aW9yLCBzZXQgdXAKK2RlZmF1bHQgc3RhdGUgZm9yIHN3aXRjaGVzIG9yIG9wdGlvbnMgeW91ciBjb21tYW5kIG1heSBoYXZlLiBJZiB5b3VyIGNvbW1hbmQKK3V0aWxpemVzIG90aGVyIEdpdCBjb21wb25lbnRzLCBhc2sgdGhlbSB0byBzZXQgdXAgdGhlaXIgZGVmYXVsdCBzdGF0ZXMgYXMgd2VsbC4KK0ZvciBpbnN0YW5jZSwgYGdpdCBsb2dgIHRha2VzIGFkdmFudGFnZSBvZiBgZ3JlcGAgYW5kIGBkaWZmYCBmdW5jdGlvbmFsaXR5LCBzbworaXRzIGBpbml0X2xvZ19kZWZhdWx0cygpYCBzZXRzIGl0cyBvd24gc3RhdGUgKGBkZWNvcmF0aW9uX3N0eWxlYCkgYW5kIGFza3MKK2BncmVwYCBhbmQgYGRpZmZgIHRvIGluaXRpYWxpemUgdGhlbXNlbHZlcyBieSBjYWxsaW5nIGVhY2ggb2YgdGhlaXIKK2luaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KKworRm9yIG91ciBmaXJzdCBleGFtcGxlIHdpdGhpbiBgZ2l0IHdhbGtlbmAsIHdlIGRvbid0IGludGVuZCB0byB1c2UgYW55IG90aGVyCitjb21wb25lbnRzIHdpdGhpbiBHaXQsIGFuZCB3ZSBkb24ndCBoYXZlIGFueSBjb25maWd1cmF0aW9uIHRvIGRvLiAgSG93ZXZlciwgd2UKK21heSB3YW50IHRvIGFkZCBzb21lIGxhdGVyLCBzbyBmb3Igbm93LCB3ZSBjYW4gYWRkIGFuIGVtcHR5IHBsYWNlaG9sZGVyLiBDcmVhdGUKK2EgbmV3IGZ1bmN0aW9uIGluIGBidWlsdGluL3dhbGtlbi5jYDoKKworLS0tLQorc3RhdGljIHZvaWQgaW5pdF93YWxrZW5fZGVmYXVsdHModm9pZCkKK3sKKwkvKgorCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIHNhbWUgY29tcG9uZW50cyBgZ2l0IGxvZ2AgZG9lczsgbGVhdmUgdGhpcworCSAqIGVtcHR5IGZvciBub3cuCisJICovCit9CistLS0tCisKK01ha2Ugc3VyZSB0byBhZGQgYSBsaW5lIGludm9raW5nIGl0IGluc2lkZSBvZiBgY21kX3dhbGtlbigpYC4KKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW5pdF93YWxrZW5fZGVmYXVsdHMoKTsKK30KKy0tLS0KKworPT09PSBDb25maWd1cmluZyBGcm9tIGAuZ2l0Y29uZmlnYAorCitOZXh0LCB3ZSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKGkuZS4sCitzZXR0aW5ncyByZWFkYWJsZSBhbmQgc2V0dGFibGUgZnJvbSBgZ2l0IGNvbmZpZ2ApLiBUaGlzIGlzIGRvbmUgYnkgcHJvdmlkaW5nIGEKK2NhbGxiYWNrIHRvIGBnaXRfY29uZmlnKClgOyB3aXRoaW4gdGhhdCBjYWxsYmFjaywgeW91IGNhbiBhbHNvIGludm9rZSBtZXRob2RzCitmcm9tIG90aGVyIGNvbXBvbmVudHMgeW91IG1heSBuZWVkIHRoYXQgbmVlZCB0byBpbnRlcmNlcHQgdGhlc2Ugb3B0aW9ucy4gWW91cgorY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIG9uY2UgcGVyIGVhY2ggY29uZmlndXJhdGlvbiB2YWx1ZSB3aGljaCBHaXQga25vd3MgYWJvdXQKKyhnbG9iYWwsIGxvY2FsLCB3b3JrdHJlZSwgZXRjLikuCisKK1NpbWlsYXJseSB0byB0aGUgZGVmYXVsdCB2YWx1ZXMsIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8gaGVyZSB5ZXQKK291cnNlbHZlczsgaG93ZXZlciwgd2Ugc2hvdWxkIGNhbGwgYGdpdF9kZWZhdWx0X2NvbmZpZygpYCBpZiB3ZSBhcmVuJ3QgY2FsbGluZworYW55IG90aGVyIGV4aXN0aW5nIGNvbmZpZyBjYWxsYmFja3MuCisKK0FkZCBhIG5ldyBmdW5jdGlvbiB0byBgYnVpbHRpbi93YWxrZW4uY2A6CisKKy0tLS0KK3N0YXRpYyBpbnQgZ2l0X3dhbGtlbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJLyoKKwkgKiBGb3Igbm93LCB3ZSBkb24ndCBoYXZlIGFueSBjdXN0b20gY29uZmlndXJhdGlvbiwgc28gZmFsbCBiYWNrIHRvCisJICogdGhlIGRlZmF1bHQgY29uZmlnLgorCSAqLworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorLS0tLQorCitNYWtlIHN1cmUgdG8gaW52b2tlIGBnaXRfY29uZmlnKClgIHdpdGggaXQgaW4geW91ciBgY21kX3dhbGtlbigpYDoKKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLi4uCisKKwlnaXRfY29uZmlnKGdpdF93YWxrZW5fY29uZmlnLCBOVUxMKTsKKworCS4uLgorfQorLS0tLQorCis9PT09IFNldHRpbmcgVXAgYHJldl9pbmZvYAorCitOb3cgdGhhdCB3ZSd2ZSBnYXRoZXJlZCBleHRlcm5hbCBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zLCBpdCdzIHRpbWUgdG8KK2luaXRpYWxpemUgdGhlIGByZXZfaW5mb2Agb2JqZWN0IHdoaWNoIHdlIHdpbGwgdXNlIHRvIHBlcmZvcm0gdGhlIHdhbGsuIFRoaXMgaXMKK3R5cGljYWxseSBkb25lIGJ5IGNhbGxpbmcgYHJlcG9faW5pdF9yZXZpc2lvbnMoKWAgd2l0aCB0aGUgcmVwb3NpdG9yeSB5b3UgaW50ZW5kCit0byB0YXJnZXQsIGFzIHdlbGwgYXMgdGhlIGBwcmVmaXhgIGFyZ3VtZW50IG9mIGBjbWRfd2Fsa2VuYCBhbmQgeW91ciBgcmV2X2luZm9gCitzdHJ1Y3QuCisKK0FkZCB0aGUgYHN0cnVjdCByZXZfaW5mb2AgYW5kIHRoZSBgcmVwb19pbml0X3JldmlzaW9ucygpYCBjYWxsOgorLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLyogVGhpcyBjYW4gZ28gd2hlcmV2ZXIgeW91IGxpa2UgaW4geW91ciBkZWNsYXJhdGlvbnMuKi8KKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCS4uLgorCisJLyogVGhpcyBzaG91bGQgZ28gYWZ0ZXIgdGhlIGdpdF9jb25maWcoKSBjYWxsLiAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisKKwkuLi4KK30KKy0tLS0KKworPT09PSBUd2Vha2luZyBgcmV2X2luZm9gIEZvciB0aGUgV2FsaworCitXZSdyZSBnZXR0aW5nIGNsb3NlLCBidXQgd2UncmUgc3RpbGwgbm90IHF1aXRlIHJlYWR5IHRvIGdvLiBOb3cgdGhhdCBgcmV2YCBpcworaW5pdGlhbGl6ZWQsIHdlIGNhbiBtb2RpZnkgaXQgdG8gZml0IG91ciBuZWVkcy4gVGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aGluIGEKK2hlbHBlciBmb3IgY2xhcml0eSwgc28gbGV0J3MgYWRkIG9uZToKKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLyoKKwkgKiBXZSB3YW50IHRvIG1pbWljIHRoZSBhcHBlYXJhbmNlIG9mIGBnaXQgbG9nIC0tb25lbGluZWAsIHNvIGxldCdzCisJICogZm9yY2Ugb25lbGluZSBmb3JtYXQuCisJICovCisJZ2V0X2NvbW1pdF9mb3JtYXQoIm9uZWxpbmUiLCByZXYpOworCisJLyogU3RhcnQgb3VyIG9iamVjdCB3YWxrIGF0IEhFQUQuICovCisJYWRkX2hlYWRfdG9fcGVuZGluZyhyZXYpOworfQorLS0tLQorCitbTk9URV0KKz09PT0KK0luc3RlYWQgb2YgdXNpbmcgdGhlIHNob3J0aGFuZCBgYWRkX2hlYWRfdG9fcGVuZGluZygpYCwgeW91IGNvdWxkIGRvCitzb21ldGhpbmcgbGlrZSB0aGlzOgorLS0tLQorCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gIkhFQUQiOworCW9wdC5yZXZhcmdfb3B0ID0gUkVWQVJHX0NPTU1JVFRJU0g7CisJc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIHJldiwgJm9wdCk7CistLS0tCitVc2luZyBhIGBzZXR1cF9yZXZpc2lvbl9vcHRgIGdpdmVzIHlvdSBmaW5lciBjb250cm9sIG92ZXIgeW91ciB3YWxrJ3Mgc3RhcnRpbmcKK3BvaW50LgorPT09PQorCitUaGVuIGxldCdzIGludm9rZSBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAgYWZ0ZXIgdGhlIGNhbGwgdG8KK2ByZXBvX2luaXRfcmV2aXNpb25zKClgOgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwkuLi4KKworCWZpbmFsX3Jldl9pbmZvX3NldHVwKCZyZXYpOworCisJLi4uCit9CistLS0tCisKK0xhdGVyLCB3ZSBtYXkgd2lzaCB0byBhZGQgbW9yZSBhcmd1bWVudHMgdG8gYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgLiBCdXQgZm9yCitub3csIHRoaXMgaXMgYWxsIHdlIG5lZWQuCisKKz09PT0gUHJlcGFyaW5nIGByZXZfaW5mb2AgRm9yIHRoZSBXYWxrCisKK05vdyB0aGF0IGByZXZgIGlzIGFsbCBpbml0aWFsaXplZCBhbmQgY29uZmlndXJlZCwgd2UndmUgZ290IG9uZSBtb3JlIHNldHVwIHN0ZXAKK2JlZm9yZSB3ZSBnZXQgcm9sbGluZy4gV2UgY2FuIGRvIHRoaXMgaW4gYSBoZWxwZXIsIHdoaWNoIHdpbGwgYm90aCBwcmVwYXJlIHRoZQorYHJldl9pbmZvYCBmb3IgdGhlIHdhbGssIGFuZCBwZXJmb3JtIHRoZSB3YWxrIGl0c2VsZi4gTGV0J3Mgc3RhcnQgdGhlIGhlbHBlcgord2l0aCB0aGUgY2FsbCB0byBgcHJlcGFyZV9yZXZpc2lvbl93YWxrKClgLCB3aGljaCBjYW4gcmV0dXJuIGFuIGVycm9yIHdpdGhvdXQKK2R5aW5nIG9uIGl0cyBvd246CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9jb21taXRfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKK30KKy0tLS0KKworTk9URTogYGRpZSgpYCBwcmludHMgdG8gYHN0ZGVycmAgYW5kIGV4aXRzIHRoZSBwcm9ncmFtLiBTaW5jZSBpdCB3aWxsIHByaW50IHRvCitgc3RkZXJyYCBpdCdzIGxpa2VseSB0byBiZSBzZWVuIGJ5IGEgaHVtYW4sIHNvIHdlIHdpbGwgbG9jYWxpemUgaXQuCisKKz09PT0gUGVyZm9ybWluZyB0aGUgV2FsayEKKworRmluYWxseSEgV2UgYXJlIHJlYWR5IHRvIGJlZ2luIHRoZSB3YWxrIGl0c2VsZi4gTm93IHdlIGNhbiBzZWUgdGhhdCBgcmV2X2luZm9gCitjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIGl0ZXJhdG9yOyB3ZSBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHdhbGsgYnkgdXNpbmcKK2BnZXRfcmV2aXNpb24oKWAgcmVwZWF0ZWRseS4gQWRkIHRoZSBsaXN0ZWQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGF0IHRoZSB0b3AgYW5kCit0aGUgd2FsayBsb29wIGJlbG93IHRoZSBgcHJlcGFyZV9yZXZpc2lvbl93YWxrKClgIGNhbGwgd2l0aGluIHlvdXIKK2B3YWxrZW5fY29tbWl0X3dhbGsoKWA6CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9jb21taXRfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBwcmV0dHlidWYgPSBTVFJCVUZfSU5JVDsKKworCS4uLgorCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkpIHsKKwkJaWYgKCFjb21taXQpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfcmVzZXQoJnByZXR0eWJ1Zik7CisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJnByZXR0eWJ1Zik7CisJCXB1dHMocHJldHR5YnVmLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZwcmV0dHlidWYpOworfQorLS0tLQorCitOT1RFOiBgcHV0cygpYCBwcmludHMgYSBgY2hhcipgIHRvIGBzdGRvdXRgLiBTaW5jZSB0aGlzIGlzIHRoZSBwYXJ0IG9mIHRoZQorY29tbWFuZCB3ZSBleHBlY3QgdG8gYmUgbWFjaGluZS1wYXJzZWQsIHdlJ3JlIHNlbmRpbmcgaXQgZGlyZWN0bHkgdG8gc3Rkb3V0LgorCitHaXZlIGl0IGEgc2hvdC4KKworLS0tLQorJCBtYWtlCiskIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4KKy0tLS0KKworWW91IHNob3VsZCBzZWUgYWxsIG9mIHRoZSBzdWJqZWN0IGxpbmVzIG9mIGFsbCB0aGUgY29tbWl0cyBpbgoreW91ciB0cmVlJ3MgaGlzdG9yeSwgaW4gb3JkZXIsIGVuZGluZyB3aXRoIHRoZSBpbml0aWFsIGNvbW1pdCwgIkluaXRpYWwgcmV2aXNpb24KK29mICJnaXQiLCB0aGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwiLiBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSB3cml0dGVuCit5b3VyIGZpcnN0IHJldmlzaW9uIHdhbGsuIFlvdSBjYW4gcGxheSB3aXRoIHByaW50aW5nIHNvbWUgYWRkaXRpb25hbCBmaWVsZHMKK2Zyb20gZWFjaCBjb21taXQgaWYgeW91J3JlIGN1cmlvdXM7IGhhdmUgYSBsb29rIGF0IHRoZSBmdW5jdGlvbnMgYXZhaWxhYmxlIGluCitgY29tbWl0LmhgLgorCis9PT0gQWRkaW5nIGEgRmlsdGVyCisKK05leHQsIGxldCdzIHRyeSB0byBmaWx0ZXIgdGhlIGNvbW1pdHMgd2Ugc2VlIGJhc2VkIG9uIHRoZWlyIGF1dGhvci4gVGhpcyBpcworZXF1aXZhbGVudCB0byBydW5uaW5nIGBnaXQgbG9nIC0tYXV0aG9yPTxwYXR0ZXJuPmAuIFdlIGNhbiBhZGQgYSBmaWx0ZXIgYnkKK21vZGlmeWluZyBgcmV2X2luZm8uZ3JlcF9maWx0ZXJgLCB3aGljaCBpcyBhIGBzdHJ1Y3QgZ3JlcF9vcHRgLgorCitGaXJzdCBzb21lIHNldHVwLiBBZGQgYGluaXRfZ3JlcF9kZWZhdWx0cygpYCB0byBgaW5pdF93YWxrZW5fZGVmYXVsdHMoKWAgYW5kIGFkZAorYGdyZXBfY29uZmlnKClgIHRvIGBnaXRfd2Fsa2VuX2NvbmZpZygpYDoKKworLS0tLQorc3RhdGljIHZvaWQgaW5pdF93YWxrZW5fZGVmYXVsdHModm9pZCkKK3sKKwlpbml0X2dyZXBfZGVmYXVsdHModGhlX3JlcG9zaXRvcnkpOworfQorCisuLi4KKworc3RhdGljIGludCBnaXRfd2Fsa2VuX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlncmVwX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CistLS0tCisKK05leHQsIHdlIGNhbiBtb2RpZnkgdGhlIGBncmVwX2ZpbHRlcmAuIFRoaXMgaXMgZG9uZSB3aXRoIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworZm91bmQgaW4gYGdyZXAuaGAuIEZvciBmdW4sIHdlJ3JlIGZpbHRlcmluZyB0byBvbmx5IGNvbW1pdHMgZnJvbSBmb2xrcyB1c2luZyBhCitgZ21haWwuY29tYCBlbWFpbCBhZGRyZXNzIC0gYSBub3QtdmVyeS1wcmVjaXNlIGd1ZXNzIGF0IHdobyBtYXkgYmUgd29ya2luZyBvbgorR2l0IGFzIGEgaG9iYnkuIFNpbmNlIHdlJ3JlIGNoZWNraW5nIHRoZSBhdXRob3IsIHdoaWNoIGlzIGEgc3BlY2lmaWMgbGluZSBpbiB0aGUKK2hlYWRlciwgd2UnbGwgdXNlIHRoZSBgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oKWAgaGVscGVyLiBXZSBjYW4gdXNlCit0aGUgYGVudW0gZ3JlcF9oZWFkZXJfZmllbGRgIHRvIGluZGljYXRlIHdoaWNoIHBhcnQgb2YgdGhlIGNvbW1pdCBoZWFkZXIgd2Ugd2FudAordG8gc2VhcmNoLgorCitJbiBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAsIGFkZCB5b3VyIGZpbHRlciBsaW5lOgorCistLS0tCitzdGF0aWMgdm9pZCBmaW5hbF9yZXZfaW5mb19zZXR1cChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLi4uCisKKwlhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybigmcmV2LT5ncmVwX2ZpbHRlciwgR1JFUF9IRUFERVJfQVVUSE9SLAorCQkiZ21haWwiKTsKKwljb21waWxlX2dyZXBfcGF0dGVybnMoJnJldi0+Z3JlcF9maWx0ZXIpOworCisJLi4uCit9CistLS0tCisKK2BhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybigpYCBhZGRzIHlvdXIgbmV3ICJnbWFpbCIgcGF0dGVybiB0byBgcmV2X2luZm9gLCBidXQKK2l0IHdvbid0IHdvcmsgdW5sZXNzIHdlIGNvbXBpbGUgaXQgd2l0aCBgY29tcGlsZV9ncmVwX3BhdHRlcm5zKClgLgorCitOT1RFOiBJZiB5b3UgYXJlIHVzaW5nIGBzZXR1cF9yZXZpc2lvbnMoKWAgKGZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHBhc3NpbmcgYQorYHNldHVwX3JldmlzaW9uX29wdGAgaW5zdGVhZCBvZiB1c2luZyBgYWRkX2hlYWRfdG9fcGVuZGluZygpYCksIHlvdSBkb24ndCBuZWVkCit0byBjYWxsIGBjb21waWxlX2dyZXBfcGF0dGVybnMoKWAgYmVjYXVzZSBgc2V0dXBfcmV2aXNpb25zKClgIGNhbGxzIGl0IGZvciB5b3UuCisKK05PVEU6IFdlIGNvdWxkIGFkZCB0aGUgc2FtZSBmaWx0ZXIgdmlhIHRoZSBgYXBwZW5kX2dyZXBfcGF0dGVybigpYCBoZWxwZXIgaWYgd2UKK3dhbnRlZCB0bywgYnV0IGBhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybigpYCBhZGRzIHRoZSBgZW51bSBncmVwX2NvbnRleHRgIGFuZAorYGVudW0gZ3JlcF9wYXRfdG9rZW5gIGZvciB1cy4KKworPT09IENoYW5naW5nIHRoZSBPcmRlcgorCitUaGVyZSBhcmUgYSBmZXcgd2F5cyB0aGF0IHdlIGNhbiBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSBjb21taXRzIGR1cmluZyBhCityZXZpc2lvbiB3YWxrLiBGaXJzdGx5LCB3ZSBjYW4gdXNlIHRoZSBgZW51bSByZXZfc29ydF9vcmRlcmAgdG8gY2hvb3NlIGZyb20gc29tZQordHlwaWNhbCBvcmRlcmluZ3MuCisKK2B0b3BvX29yZGVyYCBpcyB0aGUgc2FtZSBhcyBgZ2l0IGxvZyAtLXRvcG8tb3JkZXJgOiB3ZSBhdm9pZCBzaG93aW5nIGEgcGFyZW50CitiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiBoYXZlIGJlZW4gc2hvd24sIGFuZCB3ZSBhdm9pZCBtaXhpbmcgY29tbWl0cyB3aGljaAorYXJlIGluIGRpZmZlcmVudCBsaW5lcyBvZiBoaXN0b3J5LiAoYGdpdCBoZWxwIGxvZ2AncyBzZWN0aW9uIG9uIGAtLXRvcG8tb3JkZXJgCitoYXMgYSB2ZXJ5IG5pY2UgZGlhZ3JhbSB0byBpbGx1c3RyYXRlIHRoaXMuKQorCitMZXQncyBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gd2UgcnVuIHdpdGggYFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFYCBhcyBvcHBvc2VkIHRvCitgUkVWX1NPUlRfQllfQVVUSE9SX0RBVEVgLiBBZGQgdGhlIGZvbGxvd2luZzoKKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCS4uLgorCisJcmV2LT50b3BvX29yZGVyID0gMTsKKwlyZXYtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9CWV9DT01NSVRfREFURTsKKworCS4uLgorfQorLS0tLQorCitMZXQncyBvdXRwdXQgdGhpcyBpbnRvIGEgZmlsZSBzbyB3ZSBjYW4gZWFzaWx5IGRpZmYgaXQgd2l0aCB0aGUgd2FsayBzb3J0ZWQgYnkKK2F1dGhvciBkYXRlLgorCistLS0tCiskIG1ha2UKKyQgLi9iaW4td3JhcHBlcnMvZ2l0IHdhbGtlbiA+IGNvbW1pdC1kYXRlLnR4dAorLS0tLQorCitUaGVuLCBsZXQncyBzb3J0IGJ5IGF1dGhvciBkYXRlIGFuZCBydW4gaXQgYWdhaW4uCisKKy0tLS0KK3N0YXRpYyB2b2lkIGZpbmFsX3Jldl9pbmZvX3NldHVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwkuLi4KKworCXJldi0+dG9wb19vcmRlciA9IDE7CisJcmV2LT5zb3J0X29yZGVyID0gUkVWX1NPUlRfQllfQVVUSE9SX0RBVEU7CisKKwkuLi4KK30KKy0tLS0KKworLS0tLQorJCBtYWtlCiskIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4gPiBhdXRob3ItZGF0ZS50eHQKKy0tLS0KKworRmluYWxseSwgY29tcGFyZSB0aGUgdHdvLiBUaGlzIGlzIGEgbGl0dGxlIGxlc3MgaGVscGZ1bCB3aXRob3V0IG9iamVjdCBuYW1lcyBvcgorZGF0ZXMsIGJ1dCBob3BlZnVsbHkgd2UgZ2V0IHRoZSBpZGVhLgorCistLS0tCiskIGRpZmYgLXUgY29tbWl0LWRhdGUudHh0IGF1dGhvci1kYXRlLnR4dAorLS0tLQorCitUaGlzIGRpc3BsYXkgaW5kaWNhdGVzIHRoYXQgY29tbWl0cyBjYW4gYmUgcmVvcmRlcmVkIGFmdGVyIHRoZXkncmUgd3JpdHRlbiwgZm9yCitleGFtcGxlIHdpdGggYGdpdCByZWJhc2VgLgorCitMZXQncyB0cnkgb25lIG1vcmUgcmVvcmRlcmluZyBvZiBjb21taXRzLiBgcmV2X2luZm9gIGV4cG9zZXMgYSBgcmV2ZXJzZWAgZmxhZy4KK1NldCB0aGF0IGZsYWcgc29tZXdoZXJlIGluc2lkZSBvZiBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWA6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGZpbmFsX3Jldl9pbmZvX3NldHVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQlzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwkuLi4KKworCXJldi0+cmV2ZXJzZSA9IDE7CisKKwkuLi4KK30KKy0tLS0KKworUnVuIHlvdXIgd2FsayBhZ2FpbiBhbmQgbm90ZSB0aGUgZGlmZmVyZW5jZSBpbiBvcmRlci4gKElmIHlvdSByZW1vdmUgdGhlIGdyZXAKK3BhdHRlcm4sIHlvdSBzaG91bGQgc2VlIHRoZSBsYXN0IGNvbW1pdCB0aGlzIGNhbGwgZ2l2ZXMgeW91IGFzIHlvdXIgY3VycmVudAorSEVBRC4pCisKKz09IEJhc2ljIE9iamVjdCBXYWxrCisKK1NvIGZhciB3ZSd2ZSBiZWVuIHdhbGtpbmcgb25seSBjb21taXRzLiBCdXQgR2l0IGhhcyBtb3JlIHR5cGVzIG9mIG9iamVjdHMgdGhhbgordGhhdCEgTGV0J3Mgc2VlIGlmIHdlIGNhbiB3YWxrIF9hbGxfIG9iamVjdHMsIGFuZCBmaW5kIG91dCBzb21lIGluZm9ybWF0aW9uCithYm91dCBlYWNoIG9uZS4KKworV2UgY2FuIGJhc2Ugb3VyIHdvcmsgb24gYW4gZXhhbXBsZS4gYGdpdCBwYWNrLW9iamVjdHNgIHByZXBhcmVzIGFsbCBraW5kcyBvZgorb2JqZWN0cyBmb3IgcGFja2luZyBpbnRvIGEgYml0bWFwIG9yIHBhY2tmaWxlLiBUaGUgd29yayB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorcmVzaWRlcyBpbiBgYnVpbHRpbnMvcGFjay1vYmplY3RzLmM6Z2V0X29iamVjdF9saXN0KClgOyBleGFtaW5hdGlvbiBvZiB0aGF0CitmdW5jdGlvbiBzaG93cyB0aGF0IHRoZSBhbGwtb2JqZWN0IHdhbGsgaXMgYmVpbmcgcGVyZm9ybWVkIGJ5CitgdHJhdmVyc2VfY29tbWl0X2xpc3QoKWAgb3IgYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgLiBUaG9zZSB0d28KK2Z1bmN0aW9ucyByZXNpZGUgaW4gYGxpc3Qtb2JqZWN0cy5jYDsgZXhhbWluaW5nIHRoZSBzb3VyY2Ugc2hvd3MgdGhhdCwgZGVzcGl0ZQordGhlIG5hbWUsIHRoZXNlIGZ1bmN0aW9ucyB0cmF2ZXJzZSBhbGwga2luZHMgb2Ygb2JqZWN0cy4gTGV0J3MgaGF2ZSBhIGxvb2sgYXQKK3RoZSBhcmd1bWVudHMgdG8gYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgLCB3aGljaCBhcmUgYSBzdXBlcnNldCBvZiB0aGUKK2FyZ3VtZW50cyB0byB0aGUgdW5maWx0ZXJlZCB2ZXJzaW9uLgorCistIGBzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9uc2A6IFRoaXMgaXMgYSBzdHJ1Y3Qgd2hpY2gKKyAgc3RvcmVzIGEgZmlsdGVyLXNwZWMgYXMgb3V0bGluZWQgaW4gYERvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHRgLgorLSBgc3RydWN0IHJldl9pbmZvICpyZXZzYDogVGhpcyBpcyB0aGUgYHJldl9pbmZvYCB1c2VkIGZvciB0aGUgd2Fsay4KKy0gYHNob3dfY29tbWl0X2ZuIHNob3dfY29tbWl0YDogQSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHVzZWQgdG8gaGFuZGxlIGVhY2gKKyAgaW5kaXZpZHVhbCBjb21taXQgb2JqZWN0LgorLSBgc2hvd19vYmplY3RfZm4gc2hvd19vYmplY3RgOiBBIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBoYW5kbGUgZWFjaAorICBub24tY29tbWl0IG9iamVjdCAoc28gZWFjaCBibG9iLCB0cmVlLCBvciB0YWcpLgorLSBgdm9pZCAqc2hvd19kYXRhYDogQSBjb250ZXh0IGJ1ZmZlciB3aGljaCBpcyBwYXNzZWQgaW4gdHVybiB0byBgc2hvd19jb21taXRgCisgIGFuZCBgc2hvd19vYmplY3RgLgorLSBgc3RydWN0IG9pZHNldCAqb21pdHRlZGA6IEEgbGlua2VkLWxpc3Qgb2Ygb2JqZWN0IElEcyB3aGljaCB0aGUgcHJvdmlkZWQKKyAgZmlsdGVyIGNhdXNlZCB0byBiZSBvbWl0dGVkLgorCitJdCBsb29rcyBsaWtlIHRoaXMgYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgIHVzZXMgY2FsbGJhY2tzIHdlIHByb3ZpZGUKK2luc3RlYWQgb2YgbmVlZGluZyB1cyB0byBjYWxsIGl0IHJlcGVhdGVkbHkgb3Vyc2VsdmVzLiBDb29sISBMZXQncyBhZGQgdGhlCitjYWxsYmFja3MgZmlyc3QuCisKK0ZvciB0aGUgc2FrZSBvZiB0aGlzIHR1dG9yaWFsLCB3ZSdsbCBzaW1wbHkga2VlcCB0cmFjayBvZiBob3cgbWFueSBvZiBlYWNoIGtpbmQKK29mIG9iamVjdCB3ZSBmaW5kLiBBdCBmaWxlIHNjb3BlIGluIGBidWlsdGluL3dhbGtlbi5jYCBhZGQgdGhlIGZvbGxvd2luZwordHJhY2tpbmcgdmFyaWFibGVzOgorCistLS0tCitzdGF0aWMgaW50IGNvbW1pdF9jb3VudDsKK3N0YXRpYyBpbnQgdGFnX2NvdW50Oworc3RhdGljIGludCBibG9iX2NvdW50Oworc3RhdGljIGludCB0cmVlX2NvdW50OworLS0tLQorCitDb21taXRzIGFyZSBoYW5kbGVkIGJ5IGEgZGlmZmVyZW50IGNhbGxiYWNrIHRoYW4gb3RoZXIgb2JqZWN0czsgbGV0J3MgZG8gdGhhdAorb25lIGZpcnN0OgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY210LCB2b2lkICpidWYpCit7CisJY29tbWl0X2NvdW50Kys7Cit9CistLS0tCisKK1RoZSBgY210YCBhcmd1bWVudCBpcyBmYWlybHkgc2VsZi1leHBsYW5hdG9yeS4gQnV0IGl0J3Mgd29ydGggbWVudGlvbmluZyB0aGF0Cit0aGUgYGJ1ZmAgYXJndW1lbnQgaXMgYWN0dWFsbHkgdGhlIGNvbnRleHQgYnVmZmVyIHRoYXQgd2UgY2FuIHByb3ZpZGUgdG8gdGhlCit0cmF2ZXJzYWwgY2FsbHMgLSBgc2hvd19kYXRhYCwgd2hpY2ggd2UgbWVudGlvbmVkIGEgbW9tZW50IGFnby4KKworU2luY2Ugd2UgaGF2ZSB0aGUgYHN0cnVjdCBjb21taXRgIG9iamVjdCwgd2UgY2FuIGxvb2sgYXQgYWxsIHRoZSBzYW1lIHBhcnRzIHRoYXQKK3dlIGxvb2tlZCBhdCBpbiBvdXIgZWFybGllciBjb21taXQtb25seSB3YWxrLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyB0dXRvcmlhbCwKK3Rob3VnaCwgd2UnbGwganVzdCBpbmNyZW1lbnQgdGhlIGNvbW1pdCBjb3VudGVyIGFuZCBtb3ZlIG9uLgorCitUaGUgY2FsbGJhY2sgZm9yIG5vbi1jb21taXRzIGlzIGEgbGl0dGxlIGRpZmZlcmVudCwgYXMgd2UnbGwgbmVlZCB0byBjaGVjaword2hpY2gga2luZCBvZiBvYmplY3Qgd2UncmUgZGVhbGluZyB3aXRoOgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpzdHIsIHZvaWQgKmJ1ZikKK3sKKwlzd2l0Y2ggKG9iai0+dHlwZSkgeworCWNhc2UgT0JKX1RSRUU6CisJCXRyZWVfY291bnQrKzsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQkxPQjoKKwkJYmxvYl9jb3VudCsrOworCQlicmVhazsKKwljYXNlIE9CSl9UQUc6CisJCXRhZ19jb3VudCsrOworCQlicmVhazsKKwljYXNlIE9CSl9DT01NSVQ6CisJCUJVRygidW5leHBlY3RlZCBjb21taXQgb2JqZWN0IGluIHdhbGtlbl9zaG93X29iamVjdFxuIik7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmV4cGVjdGVkIG9iamVjdCB0eXBlICVzIGluIHdhbGtlbl9zaG93X29iamVjdFxuIiwKKwkJCXR5cGVfbmFtZShvYmotPnR5cGUpKTsKKwl9Cit9CistLS0tCisKK0FnYWluLCBgb2JqYCBpcyBmYWlybHkgc2VsZi1leHBsYW5hdG9yeSwgYW5kIHdlIGNhbiBndWVzcyB0aGF0IGBidWZgIGlzIHRoZSBzYW1lCitjb250ZXh0IHBvaW50ZXIgdGhhdCBgd2Fsa2VuX3Nob3dfY29tbWl0KClgIHJlY2VpdmVzOiB0aGUgYHNob3dfZGF0YWAgYXJndW1lbnQKK3RvIGB0cmF2ZXJzZV9jb21taXRfbGlzdCgpYCBhbmQgYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgLiBGaW5hbGx5LAorYHN0cmAgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIG9iamVjdCwgd2hpY2ggZW5kcyB1cCBiZWluZyBzb21ldGhpbmcgbGlrZQorYGZvby50eHRgIChibG9iKSwgYGJhci9iYXpgICh0cmVlKSwgb3IgYHYxLjIuM2AgKHRhZykuCisKK1RvIGhlbHAgYXNzdXJlIHVzIHRoYXQgd2UgYXJlbid0IGRvdWJsZS1jb3VudGluZyBjb21taXRzLCB3ZSdsbCBpbmNsdWRlIHNvbWUKK2NvbXBsYWluaW5nIGlmIGEgY29tbWl0IG9iamVjdCBpcyByb3V0ZWQgdGhyb3VnaCBvdXIgbm9uLWNvbW1pdCBjYWxsYmFjazsgd2UnbGwKK2Fsc28gY29tcGxhaW4gaWYgd2Ugc2VlIGFuIGludmFsaWQgb2JqZWN0IHR5cGUuIFNpbmNlIHRob3NlIHR3byBjYXNlcyBzaG91bGQgYmUKK3VucmVhY2hhYmxlLCBhbmQgd291bGQgb25seSBjaGFuZ2UgaW4gdGhlIGV2ZW50IG9mIGEgc2VtYW50aWMgY2hhbmdlIHRvIHRoZSBHaXQKK2NvZGViYXNlLCB3ZSBjb21wbGFpbiBieSB1c2luZyBgQlVHKClgIC0gd2hpY2ggaXMgYSBzaWduYWwgdG8gYSBkZXZlbG9wZXIgdGhhdAordGhlIGNoYW5nZSB0aGV5IG1hZGUgY2F1c2VkIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLCBhbmQgdGhlIHJlc3Qgb2YgdGhlCitjb2RlYmFzZSBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjaGFuZ2UuIGBCVUcoKWAgaXMgbm90IGludGVuZGVkCit0byBiZSBzZWVuIGJ5IHRoZSBwdWJsaWMsIHNvIGl0IGlzIG5vdCBsb2NhbGl6ZWQuCisKK091ciBtYWluIG9iamVjdCB3YWxrIGltcGxlbWVudGF0aW9uIGlzIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IGZyb20gb3VyIGNvbW1pdAord2FsayBpbXBsZW1lbnRhdGlvbiwgc28gbGV0J3MgbWFrZSBhIG5ldyBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvYmplY3Qgd2Fsay4gV2UKK2NhbiBwZXJmb3JtIHNldHVwIHdoaWNoIGlzIGFwcGxpY2FibGUgdG8gYWxsIG9iamVjdHMgaGVyZSwgdG9vLCB0byBrZWVwIHNlcGFyYXRlCitmcm9tIHNldHVwIHdoaWNoIGlzIGFwcGxpY2FibGUgdG8gY29tbWl0LW9ubHkgd2Fsa3MuCisKK1dlJ2xsIHN0YXJ0IGJ5IGVuYWJsaW5nIGFsbCB0eXBlcyBvZiBvYmplY3RzIGluIHRoZSBgc3RydWN0IHJldl9pbmZvYC4gIFdlJ2xsCithbHNvIHR1cm4gb24gYHRyZWVfYmxvYnNfaW5fY29tbWl0X29yZGVyYCwgd2hpY2ggbWVhbnMgdGhhdCB3ZSB3aWxsIHdhbGsgYQorY29tbWl0J3MgdHJlZSBhbmQgZXZlcnl0aGluZyBpdCBwb2ludHMgdG8gaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgZmluZCBlYWNoIGNvbW1pdCwKK2FzIG9wcG9zZWQgdG8gd2FpdGluZyBmb3IgdGhlIGVuZCBhbmQgd2Fsa2luZyB0aHJvdWdoIGFsbCB0cmVlcyBhZnRlciB0aGUgY29tbWl0CitoaXN0b3J5IGhhcyBiZWVuIGRpc2NvdmVyZWQuIFdpdGggdGhlIGFwcHJvcHJpYXRlIHNldHRpbmdzIGNvbmZpZ3VyZWQsIHdlIGFyZQorcmVhZHkgdG8gY2FsbCBgcHJlcGFyZV9yZXZpc2lvbl93YWxrKClgLgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fb2JqZWN0X3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJcmV2LT50cmVlX29iamVjdHMgPSAxOworCXJldi0+YmxvYl9vYmplY3RzID0gMTsKKwlyZXYtPnRhZ19vYmplY3RzID0gMTsKKwlyZXYtPnRyZWVfYmxvYnNfaW5fY29tbWl0X29yZGVyID0gMTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2KSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJY29tbWl0X2NvdW50ID0gMDsKKwl0YWdfY291bnQgPSAwOworCWJsb2JfY291bnQgPSAwOworCXRyZWVfY291bnQgPSAwOworLS0tLQorCitMZXQncyBzdGFydCBieSBjYWxsaW5nIGp1c3QgdGhlIHVuZmlsdGVyZWQgd2FsayBhbmQgcmVwb3J0aW5nIG91ciBjb3VudHMuCitDb21wbGV0ZSB5b3VyIGltcGxlbWVudGF0aW9uIG9mIGB3YWxrZW5fb2JqZWN0X3dhbGsoKWA6CisKKy0tLS0KKwl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXYsIHdhbGtlbl9zaG93X2NvbW1pdCwgd2Fsa2VuX3Nob3dfb2JqZWN0LCBOVUxMKTsKKworCXByaW50ZigiY29tbWl0cyAlZFxuYmxvYnMgJWRcbnRhZ3MgJWRcbnRyZWVzICVkXG4iLCBjb21taXRfY291bnQsCisJCWJsb2JfY291bnQsIHRhZ19jb3VudCwgdHJlZV9jb3VudCk7Cit9CistLS0tCisKK05PVEU6IFRoaXMgb3V0cHV0IGlzIGludGVuZGVkIHRvIGJlIG1hY2hpbmUtcGFyc2VkLiBUaGVyZWZvcmUsIHdlIGFyZSBub3QKK3NlbmRpbmcgaXQgdG8gYHRyYWNlX3ByaW50ZigpYCwgYW5kIHdlIGFyZSBub3QgbG9jYWxpemluZyBpdCAtIHdlIG5lZWQgc2NyaXB0cwordG8gYmUgYWJsZSB0byBjb3VudCBvbiB0aGUgZm9ybWF0dGluZyB0byBiZSBleGFjdGx5IHRoZSB3YXkgaXQgaXMgc2hvd24gaGVyZS4KK0lmIHdlIHdlcmUgaW50ZW5kaW5nIHRoaXMgb3V0cHV0IHRvIGJlIHJlYWQgYnkgaHVtYW5zLCB3ZSB3b3VsZCBuZWVkIHRvIGxvY2FsaXplCitpdCB3aXRoIGBfKClgLgorCitGaW5hbGx5LCB3ZSdsbCBhc2sgYGNtZF93YWxrZW4oKWAgdG8gdXNlIHRoZSBvYmplY3Qgd2FsayBpbnN0ZWFkLiBEaXNjdXNzaW5nCitjb21tYW5kIGxpbmUgb3B0aW9ucyBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMgdHV0b3JpYWwsIHNvIHdlJ2xsIGp1c3QgaGFyZGNvZGUKK2EgYnJhbmNoIHdlIGNhbiBjaGFuZ2UgYXQgY29tcGlsZSB0aW1lLiBXaGVyZSB5b3UgY2FsbCBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAKK2FuZCBgd2Fsa2VuX2NvbW1pdF93YWxrKClgLCBpbnN0ZWFkIGJyYW5jaCBsaWtlIHNvOgorCistLS0tCisJaWYgKDEpIHsKKwkJYWRkX2hlYWRfdG9fcGVuZGluZygmcmV2KTsKKwkJd2Fsa2VuX29iamVjdF93YWxrKCZyZXYpOworCX0gZWxzZSB7CisJCWZpbmFsX3Jldl9pbmZvX3NldHVwKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnJldik7CisJCXdhbGtlbl9jb21taXRfd2FsaygmcmV2KTsKKwl9CistLS0tCisKK05PVEU6IEZvciBzaW1wbGljaXR5LCB3ZSd2ZSBhdm9pZGVkIGFsbCB0aGUgZmlsdGVycyBhbmQgc29ydHMgd2UgYXBwbGllZCBpbgorYGZpbmFsX3Jldl9pbmZvX3NldHVwKClgIGFuZCBzaW1wbHkgYWRkZWQgYEhFQURgIHRvIG91ciBwZW5kaW5nIHF1ZXVlLiBJZiB5b3UKK3dhbnQsIHlvdSBjYW4gY2VydGFpbmx5IHVzZSB0aGUgZmlsdGVycyB3ZSBhZGRlZCBiZWZvcmUgYnkgbW92aW5nCitgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAgb3V0IG9mIHRoZSBjb25kaXRpb25hbCBhbmQgcmVtb3ZpbmcgdGhlIGNhbGwgdG8KK2BhZGRfaGVhZF90b19wZW5kaW5nKClgLgorCitOb3cgd2UgY2FuIHRyeSB0byBydW4gb3VyIGNvbW1hbmQhIEl0IHNob3VsZCB0YWtlIG5vdGljZWFibHkgbG9uZ2VyIHRoYW4gdGhlCitjb21taXQgd2FsaywgYnV0IGFuIGV4YW1pbmF0aW9uIG9mIHRoZSBvdXRwdXQgd2lsbCBnaXZlIHlvdSBhbiBpZGVhIHdoeS4gWW91cgorb3V0cHV0IHNob3VsZCBsb29rIHNpbWlsYXIgdG8gdGhpcyBleGFtcGxlLCBidXQgd2l0aCBkaWZmZXJlbnQgY291bnRzOgorCistLS0tCitPYmplY3Qgd2FsayBjb21wbGV0ZWQuIEZvdW5kIDU1NzMzIGNvbW1pdHMsIDEwMDI3NCBibG9icywgMCB0YWdzLCBhbmQgMTA0MjEwIHRyZWVzLgorLS0tLQorCitUaGlzIG1ha2VzIHNlbnNlLiBXZSBoYXZlIG1vcmUgdHJlZXMgdGhhbiBjb21taXRzIGJlY2F1c2UgdGhlIEdpdCBwcm9qZWN0IGhhcworbG90cyBvZiBzdWJkaXJlY3RvcmllcyB3aGljaCBjYW4gY2hhbmdlLCBwbHVzIGF0IGxlYXN0IG9uZSB0cmVlIHBlciBjb21taXQuIFdlCitoYXZlIG5vIHRhZ3MgYmVjYXVzZSB3ZSBzdGFydGVkIG9uIGEgY29tbWl0IChgSEVBRGApIGFuZCB3aGlsZSB0YWdzIGNhbiBwb2ludCB0bworY29tbWl0cywgY29tbWl0cyBjYW4ndCBwb2ludCB0byB0YWdzLgorCitOT1RFOiBZb3Ugd2lsbCBoYXZlIGRpZmZlcmVudCBjb3VudHMgd2hlbiB5b3UgcnVuIHRoaXMgeW91cnNlbGYhIFRoZSBudW1iZXIgb2YKK29iamVjdHMgZ3Jvd3MgYWxvbmcgd2l0aCB0aGUgR2l0IHByb2plY3QuCisKKz09PSBBZGRpbmcgYSBGaWx0ZXIKKworVGhlcmUgYXJlIGEgaGFuZGZ1bCBvZiBmaWx0ZXJzIHRoYXQgd2UgY2FuIGFwcGx5IHRvIHRoZSBvYmplY3Qgd2FsayBsYWlkIG91dCBpbgorYERvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHRgLiBUaGVzZSBmaWx0ZXJzIGFyZSB0eXBpY2FsbHkgdXNlZnVsIGZvcgorb3BlcmF0aW9ucyBzdWNoIGFzIGNyZWF0aW5nIHBhY2tmaWxlcyBvciBwZXJmb3JtaW5nIGEgcGFydGlhbCBjbG9uZS4gVGhleSBhcmUKK2RlZmluZWQgaW4gYGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oYC4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHR1dG9yaWFsIHdlCit3aWxsIHVzZSB0aGUgInRyZWU6MSIgZmlsdGVyLCB3aGljaCBjYXVzZXMgdGhlIHdhbGsgdG8gb21pdCBhbGwgdHJlZXMgYW5kIGJsb2JzCit3aGljaCBhcmUgbm90IGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgY29tbWl0cyByZWFjaGFibGUgZnJvbSB0aGUgY29tbWl0IGluCitgcGVuZGluZ2Agd2hlbiB0aGUgd2FsayBiZWdpbnMuIChgcGVuZGluZ2AgaXMgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB3aGljaCBuZWVkIHRvCitiZSB0cmF2ZXJzZWQgZHVyaW5nIGEgd2FsazsgeW91IGNhbiBpbWFnaW5lIGEgYnJlYWR0aC1maXJzdCB0cmVlIHRyYXZlcnNhbCB0bworaGVscCB1bmRlcnN0YW5kLiBJbiBvdXIgY2FzZSwgdGhhdCBtZWFucyB3ZSBvbWl0IHRyZWVzIGFuZCBibG9icyBub3QgZGlyZWN0bHkKK3JlZmVyZW5jZWQgYnkgYEhFQURgIG9yIGBIRUFEYCdzIGhpc3RvcnksIGJlY2F1c2Ugd2UgYmVnaW4gdGhlIHdhbGsgd2l0aCBvbmx5CitgSEVBRGAgaW4gdGhlIGBwZW5kaW5nYCBsaXN0LikKKworRmlyc3QsIHdlJ2xsIG5lZWQgdG8gYCNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaGAiIGFuZCBzZXQgdXAgdGhlCitgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9uc2AgYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24uCisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9vYmplY3Rfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zID0ge307CisKKwkuLi4KKy0tLS0KKworRm9yIG5vdywgd2UgYXJlIG5vdCBnb2luZyB0byB0cmFjayB0aGUgb21pdHRlZCBvYmplY3RzLCBzbyB3ZSdsbCByZXBsYWNlIHRob3NlCitwYXJhbWV0ZXJzIHdpdGggYE5VTExgLiBGb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSwgd2UnbGwgYWRkIGEgc2ltcGxlCitidWlsZC10aW1lIGJyYW5jaCB0byB1c2Ugb3VyIGZpbHRlciBvciBub3QuIFJlcGxhY2UgdGhlIGxpbmUgY2FsbGluZworYHRyYXZlcnNlX2NvbW1pdF9saXN0KClgIHdpdGggdGhlIGZvbGxvd2luZywgd2hpY2ggd2lsbCByZW1pbmQgdXMgd2hpY2gga2luZCBvZgord2FsayB3ZSd2ZSBqdXN0IHBlcmZvcm1lZDoKKworLS0tLQorCWlmICgwKSB7CisJCS8qIFVuZmlsdGVyZWQ6ICovCisJCXRyYWNlX3ByaW50ZihfKCJVbmZpbHRlcmVkIG9iamVjdCB3YWxrLlxuIikpOworCQl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXYsIHdhbGtlbl9zaG93X2NvbW1pdCwKKwkJCQl3YWxrZW5fc2hvd19vYmplY3QsIE5VTEwpOworCX0gZWxzZSB7CisJCXRyYWNlX3ByaW50ZigKKwkJCV8oIkZpbHRlcmVkIG9iamVjdCB3YWxrIHdpdGggZmlsdGVyc3BlYyAndHJlZToxJy5cbiIpKTsKKwkJcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigmZmlsdGVyX29wdGlvbnMsICJ0cmVlOjEiKTsKKworCQl0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgmZmlsdGVyX29wdGlvbnMsIHJldiwKKwkJCXdhbGtlbl9zaG93X2NvbW1pdCwgd2Fsa2VuX3Nob3dfb2JqZWN0LCBOVUxMLCBOVUxMKTsKKwl9CistLS0tCisKK2BzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zYCBpcyB1c3VhbGx5IGJ1aWx0IGRpcmVjdGx5IGZyb20gYSBjb21tYW5kCitsaW5lIGFyZ3VtZW50LCBzbyB0aGUgbW9kdWxlIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGJ1aWxkIG9uZSBmcm9tIGEgc3RyaW5nLgorRXZlbiB0aG91Z2ggd2UgYXJlbid0IHRha2luZyB1c2VyIGlucHV0IHJpZ2h0IG5vdywgd2UgY2FuIHN0aWxsIGJ1aWxkIG9uZSB3aXRoCithIGhhcmRjb2RlZCBzdHJpbmcgdXNpbmcgYHBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoKWAuCisKK1dpdGggdGhlIGZpbHRlciBzcGVjICJ0cmVlOjEiLCB3ZSBhcmUgZXhwZWN0aW5nIHRvIHNlZSBfb25seV8gdGhlIHJvb3QgdHJlZSBmb3IKK2VhY2ggY29tbWl0OyB0aGVyZWZvcmUsIHRoZSB0cmVlIG9iamVjdCBjb3VudCBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCit0aGUgbnVtYmVyIG9mIGNvbW1pdHMuIChGb3IgYW4gZXhhbXBsZSBvZiB3aHkgdGhhdCdzIHRydWU6IGBnaXQgY29tbWl0IC0tcmV2ZXJ0YAorcG9pbnRzIHRvIHRoZSBzYW1lIHRyZWUgb2JqZWN0IGFzIGl0cyBncmFuZHBhcmVudC4pCisKKz09PSBDb3VudGluZyBPbWl0dGVkIE9iamVjdHMKKworV2UgYWxzbyBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIGVudW1lcmF0ZSBhbGwgb2JqZWN0cyB3aGljaCB3ZXJlIG9taXR0ZWQgYnkgYQorZmlsdGVyLCBsaWtlIHdpdGggYGdpdCBsb2cgLS1maWx0ZXI9PHNwZWM+IC0tZmlsdGVyLXByaW50LW9taXR0ZWRgLiBBc2tpbmcKK2B0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgpYCB0byBwb3B1bGF0ZSB0aGUgYG9taXR0ZWRgIGxpc3QgbWVhbnMgdGhhdCBvdXIKK29iamVjdCB3YWxrIGRvZXMgbm90IHBlcmZvcm0gYW55IGJldHRlciB0aGFuIGFuIHVuZmlsdGVyZWQgb2JqZWN0IHdhbGs7IGFsbAorcmVhY2hhYmxlIG9iamVjdHMgYXJlIHdhbGtlZCBpbiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgbGlzdC4KKworRmlyc3QsIGFkZCB0aGUgYHN0cnVjdCBvaWRzZXRgIGFuZCByZWxhdGVkIGl0ZW1zIHdlIHdpbGwgdXNlIHRvIGl0ZXJhdGUgaXQ6CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9vYmplY3Rfd2FsaygKKwkuLi4KKworCXN0cnVjdCBvaWRzZXQgb21pdHRlZDsKKwlzdHJ1Y3Qgb2lkc2V0X2l0ZXIgb2l0OworCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IE5VTEw7CisJaW50IG9taXR0ZWRfY291bnQgPSAwOworCW9pZHNldF9pbml0KCZvbWl0dGVkLCAwKTsKKworCS4uLgorLS0tLQorCitNb2RpZnkgdGhlIGNhbGwgdG8gYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgIHRvIGluY2x1ZGUgeW91ciBgb21pdHRlZGAKK29iamVjdDoKKworLS0tLQorCS4uLgorCisJCXRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKCZmaWx0ZXJfb3B0aW9ucywgcmV2LAorCQkJd2Fsa2VuX3Nob3dfY29tbWl0LCB3YWxrZW5fc2hvd19vYmplY3QsIE5VTEwsICZvbWl0dGVkKTsKKworCS4uLgorLS0tLQorCitUaGVuLCBhZnRlciB5b3VyIHRyYXZlcnNhbCwgdGhlIGBvaWRzZXRgIHRyYXZlcnNhbCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgorQ291bnQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbiBhbmQgbW9kaWZ5IHRoZSBwcmludCBzdGF0ZW1lbnQ6CisKKy0tLS0KKwkvKiBDb3VudCB0aGUgb21pdHRlZCBvYmplY3RzLiAqLworCW9pZHNldF9pdGVyX2luaXQoJm9taXR0ZWQsICZvaXQpOworCisJd2hpbGUgKChvaWQgPSBvaWRzZXRfaXRlcl9uZXh0KCZvaXQpKSkKKwkJb21pdHRlZF9jb3VudCsrOworCisJcHJpbnRmKCJjb21taXRzICVkXG5ibG9icyAlZFxudGFncyAlZFxudHJlZXMlZFxub21pdHRlZCAlZFxuIiwKKwkJY29tbWl0X2NvdW50LCBibG9iX2NvdW50LCB0YWdfY291bnQsIHRyZWVfY291bnQsIG9taXR0ZWRfY291bnQpOworLS0tLQorCitCeSBydW5uaW5nIHlvdXIgd2FsayB3aXRoIGFuZCB3aXRob3V0IHRoZSBmaWx0ZXIsIHlvdSBzaG91bGQgZmluZCB0aGF0IHRoZSB0b3RhbAorb2JqZWN0IGNvdW50IGluIGVhY2ggY2FzZSBpcyBpZGVudGljYWwuIFlvdSBjYW4gYWxzbyB0aW1lIGVhY2ggaW52b2NhdGlvbiBvZgordGhlIGB3YWxrZW5gIHN1YmNvbW1hbmQsIHdpdGggYW5kIHdpdGhvdXQgYG9taXR0ZWRgIGJlaW5nIHBhc3NlZCBpbiwgdG8gY29uZmlybQordG8geW91cnNlbGYgdGhlIHJ1bnRpbWUgaW1wYWN0IG9mIHRyYWNraW5nIGFsbCBvbWl0dGVkIG9iamVjdHMuCisKKz09PSBDaGFuZ2luZyB0aGUgT3JkZXIKKworRmluYWxseSwgbGV0J3MgZGVtb25zdHJhdGUgdGhhdCB5b3UgY2FuIGFsc28gcmVvcmRlciB3YWxrcyBvZiBhbGwgb2JqZWN0cywgbm90CitqdXN0IHdhbGtzIG9mIGNvbW1pdHMuIEZpcnN0LCB3ZSdsbCBtYWtlIG91ciBoYW5kbGVycyBjaGF0dGllciAtIG1vZGlmeQorYHdhbGtlbl9zaG93X2NvbW1pdCgpYCBhbmQgYHdhbGtlbl9zaG93X29iamVjdCgpYCB0byBwcmludCB0aGUgb2JqZWN0IGFzIHRoZXkKK2dvOgorCistLS0tCitzdGF0aWMgdm9pZCB3YWxrZW5fc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY210LCB2b2lkICpidWYpCit7CisJdHJhY2VfcHJpbnRmKCJjb21taXQ6ICVzXG4iLCBvaWRfdG9faGV4KCZjbXQtPm9iamVjdC5vaWQpKTsKKwljb21taXRfY291bnQrKzsKK30KKworc3RhdGljIHZvaWQgd2Fsa2VuX3Nob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqc3RyLCB2b2lkICpidWYpCit7CisJdHJhY2VfcHJpbnRmKCIlczogJXNcbiIsIHR5cGVfbmFtZShvYmotPnR5cGUpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCisJLi4uCit9CistLS0tCisKK05PVEU6IFNpbmNlIHdlIHdpbGwgYmUgZXhhbWluaW5nIHRoaXMgb3V0cHV0IGRpcmVjdGx5IGFzIGh1bWFucywgd2UnbGwgdXNlCitgdHJhY2VfcHJpbnRmKClgIGhlcmUuIEFkZGl0aW9uYWxseSwgc2luY2UgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIHNpZ25pZmljYW50CitudW1iZXIgb2YgcHJpbnRlZCBsaW5lcywgdXNpbmcgYHRyYWNlX3ByaW50ZigpYCB3aWxsIGFsbG93IHVzIHRvIGVhc2lseSBzaWxlbmNlCit0aG9zZSBsaW5lcyB3aXRob3V0IGhhdmluZyB0byByZWNvbXBpbGUuCisKKyhMZWF2ZSB0aGUgY291bnRlciBpbmNyZW1lbnQgbG9naWMgaW4gcGxhY2UuKQorCitXaXRoIG9ubHkgdGhhdCBjaGFuZ2UsIHJ1biBhZ2FpbiAoYnV0IHNhdmUgeW91cnNlbGYgc29tZSBzY3JvbGxiYWNrKToKKworLS0tLQorJCBHSVRfVFJBQ0U9MSAuL2Jpbi13cmFwcGVycy9naXQgd2Fsa2VuIHwgaGVhZCAtbiAxMAorLS0tLQorCitUYWtlIGEgbG9vayBhdCB0aGUgdG9wIGNvbW1pdCB3aXRoIGBnaXQgc2hvd2AgYW5kIHRoZSBvYmplY3QgSUQgeW91IHByaW50ZWQ7IGl0CitzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIG91dHB1dCBvZiBgZ2l0IHNob3cgSEVBRGAuCisKK05leHQsIGxldCdzIGNoYW5nZSBhIHNldHRpbmcgb24gb3VyIGBzdHJ1Y3QgcmV2X2luZm9gIHdpdGhpbgorYHdhbGtlbl9vYmplY3Rfd2FsaygpYC4gRmluZCB3aGVyZSB5b3UncmUgY2hhbmdpbmcgdGhlIG90aGVyIHNldHRpbmdzIG9uIGByZXZgLAorc3VjaCBhcyBgcmV2LT50cmVlX29iamVjdHNgIGFuZCBgcmV2LT50cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlcmAsIGFuZCBhZGQgdGhlCitgcmV2ZXJzZWAgc2V0dGluZyBhdCB0aGUgYm90dG9tOgorCistLS0tCisJLi4uCisKKwlyZXYtPnRyZWVfb2JqZWN0cyA9IDE7CisJcmV2LT5ibG9iX29iamVjdHMgPSAxOworCXJldi0+dGFnX29iamVjdHMgPSAxOworCXJldi0+dHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXIgPSAxOworCXJldi0+cmV2ZXJzZSA9IDE7CisKKwkuLi4KKy0tLS0KKworTm93LCBydW4gYWdhaW4sIGJ1dCB0aGlzIHRpbWUsIGxldCdzIGdyYWIgdGhlIGxhc3QgaGFuZGZ1bCBvZiBvYmplY3RzIGluc3RlYWQKK29mIHRoZSBmaXJzdCBoYW5kZnVsOgorCistLS0tCiskIG1ha2UKKyQgR0lUX1RSQUNFPTEgLi9iaW4td3JhcHBlcnMgZ2l0IHdhbGtlbiB8IHRhaWwgLW4gMTAKKy0tLS0KKworVGhlIGxhc3QgY29tbWl0IG9iamVjdCBnaXZlbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBPSUQgYXMgdGhlIG9uZSB3ZSBzYXcgYXQgdGhlCit0b3AgYmVmb3JlLCBhbmQgcnVubmluZyBgZ2l0IHNob3cgPG9pZD5gIHdpdGggdGhhdCBPSUQgc2hvdWxkIGdpdmUgeW91IGFnYWluCit0aGUgc2FtZSByZXN1bHRzIGFzIGBnaXQgc2hvdyBIRUFEYC4gRnVydGhlcm1vcmUsIGlmIHlvdSBydW4gYW5kIGV4YW1pbmUgdGhlCitmaXJzdCB0ZW4gbGluZXMgYWdhaW4gKHdpdGggYGhlYWRgIGluc3RlYWQgb2YgYHRhaWxgIGxpa2Ugd2UgZGlkIGJlZm9yZSBhcHBseWluZwordGhlIGByZXZlcnNlYCBzZXR0aW5nKSwgeW91IHNob3VsZCBzZWUgdGhhdCBub3cgdGhlIGZpcnN0IGNvbW1pdCBwcmludGVkIGlzIHRoZQoraW5pdGlhbCBjb21taXQsIGBlODNjNTE2M2AuCisKKz09IFdyYXBwaW5nIFVwCisKK0xldCdzIHJldmlldy4gSW4gdGhpcyB0dXRvcmlhbCwgd2U6CisKKy0gQnVpbHQgYSBjb21taXQgd2FsayBmcm9tIHRoZSBncm91bmQgdXAKKy0gRW5hYmxlZCBhIGdyZXAgZmlsdGVyIGZvciB0aGF0IGNvbW1pdCB3YWxrCistIENoYW5nZWQgdGhlIHNvcnQgb3JkZXIgb2YgdGhhdCBmaWx0ZXJlZCBjb21taXQgd2FsaworLSBCdWlsdCBhbiBvYmplY3Qgd2FsayAodGFncywgY29tbWl0cywgdHJlZXMsIGFuZCBibG9icykgZnJvbSB0aGUgZ3JvdW5kIHVwCistIExlYXJuZWQgaG93IHRvIGFkZCBhIGZpbHRlci1zcGVjIHRvIGFuIG9iamVjdCB3YWxrCistIENoYW5nZWQgdGhlIGRpc3BsYXkgb3JkZXIgb2YgdGhlIGZpbHRlcmVkIG9iamVjdCB3YWxrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWEzZjk5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4xLnR4dApAQCAtMCwwICsxLDQyIEBACitHSVQgdjEuNS4wLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworICAtIENsYXJpZmljYXRpb25zIGFuZCBjb3JyZWN0aW9ucyB0byAxLjUuMCByZWxlYXNlIG5vdGVzLgorCisgIC0gVGhlIG1haW4gZG9jdW1lbnRhdGlvbiBkaWQgbm90IGxpbmsgdG8gZ2l0LXJlbW90ZSBkb2N1bWVudGF0aW9uLgorCisgIC0gQ2xhcmlmaWVkIGludHJvZHVjdG9yeSB0ZXh0IG9mIGdpdC1yZWJhc2UgZG9jdW1lbnRhdGlvbi4KKworICAtIENvbnZlcnRlZCByZW1haW5pbmcgbWVudGlvbnMgb2YgdXBkYXRlLWluZGV4IG9uIFBvcmNlbGFpbgorICAgIGRvY3VtZW50cyB0byBnaXQtYWRkL2dpdC1ybS4KKworICAtIFNvbWUgaTE4bi4qIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdlcmUgaW5jb3JyZWN0bHkKKyAgICBkZXNjcmliZWQgYXMgY29yZS4qOyBmaXhlZC4KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LWFkZCBhbmQgZ2l0LXVwZGF0ZS1pbmRleCBvbiBhIGZpbGVzeXN0ZW0gb24gd2hpY2gKKyAgICBleGVjdXRhYmxlIGJpdHMgYXJlIHVucmVsaWFibGUgaW5jb3JyZWN0bHkgcmV1c2VkIHN0X21vZGUKKyAgICBiaXRzIGV2ZW4gd2hlbiB0aGUgcGF0aCBjaGFuZ2VkIGJldHdlZW4gc3ltbGluayBhbmQgcmVndWxhcgorICAgIGZpbGUuCisKKyAgLSBnaXQtZGFlbW9uIG1hcmtzIHRoZSBsaXN0ZW5pbmcgc29ja2V0cyB3aXRoIEZEX0NMT0VYRUMgc28KKyAgICB0aGF0IGl0IHdvbid0IGJlIGxlYWtlZCBpbnRvIHRoZSBjaGlsZHJlbi4KKworICAtIHNlZ2ZhdWx0IGZyb20gZ2l0LWJsYW1lIHdoZW4gdGhlIG1hbmRhdG9yeSBwYXRobmFtZQorICAgIHBhcmFtZXRlciB3YXMgbWlzc2luZyB3YXMgZml4ZWQ7IHVzYWdlKCkgbWVzc2FnZSBpcyBnaXZlbgorICAgIGluc3RlYWQuCisKKyAgLSBnaXQtcmV2LWxpc3QgZGlkIG5vdCByZWFkICRHSVRfRElSL2NvbmZpZyBmaWxlLCB3aGljaCBtZWFucworICAgIHRoYXQgZGlkIG5vdCBob25vciBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNvcnJlY3RseS4KKworKiBUd2Vha3MKKworICAtIHNsaWRpbmcgbW1hcCgpIGluZWZmaWNpZW50bHkgbW1hcGVkIHRoZSBzYW1lIHJlZ2lvbiBvZiBhCisgICAgcGFja2ZpbGUgd2l0aCBhbiBhY2Nlc3MgcGF0dGVybiB0aGF0IHVzZWQgb2JqZWN0cyBpbiB0aGUKKyAgICByZXZlcnNlIG9yZGVyLiAgVGhpcyBoYXMgYmVlbiBtYWRlIG1vcmUgZWZmaWNpZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2MWU1MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMi50eHQKQEAgLTAsMCArMSw2NSBAQAorR0lUIHYxLjUuMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBBdXRvbWF0ZWQgbWVyZ2UgY29uZmxpY3QgaGFuZGxpbmcgd2hlbiBjaGFuZ2VzIHRvIHN5bWJvbGljCisgICAgbGlua3MgY29uZmxpY3RlZCB3ZXJlIGNvbXBsZXRlbHkgYnJva2VuLiAgVGhlIG1lcmdlLXJlc29sdmUKKyAgICBzdHJhdGVneSBjcmVhdGVkIGEgcmVndWxhciBmaWxlIHdpdGggY29uZmxpY3QgbWFya2VycyBpbiBpdAorICAgIGluIHBsYWNlIG9mIHRoZSBzeW1ib2xpYyBsaW5rLiAgVGhlIGRlZmF1bHQgc3RyYXRlZ3ksCisgICAgbWVyZ2UtcmVjdXJzaXZlIHdhcyBldmVuIG1vcmUgYnJva2VuLiAgSXQgcmVtb3ZlZCB0aGUgcGF0aAorICAgIHRoYXQgd2FzIHBvaW50ZWQgYXQgYnkgdGhlIHN5bWJvbGljIGxpbmsuICBCb3RoIG9mIHRoZXNlCisgICAgcHJvYmxlbXMgaGF2ZSBiZWVuIGZpeGVkLgorCisgIC0gJ2dpdCBkaWZmIG1haW50IG1hc3RlciBuZXh0JyBkaWQgbm90IGNvcnJlY3RseSBnaXZlIGNvbWJpbmVkCisgICAgZGlmZiBhY3Jvc3MgdGhyZWUgdHJlZXMuCisKKyAgLSAnZ2l0IGZhc3QtaW1wb3J0JyBwb3J0YWJpbGl0eSBmaXggZm9yIFNvbGFyaXMuCisKKyAgLSAnZ2l0IHNob3ctcmVmIC0tdmVyaWZ5JyB3aXRob3V0IGFyZ3VtZW50cyBkaWQgbm90IGVycm9yIG91dAorICAgIGJ1dCBzZWdmYXVsdGVkLgorCisgIC0gJ2dpdCBkaWZmIDp0cmFja2VkLWZpbGUgYHB3ZGAvYW4tdW50cmFja2VkLWZpbGUnIGdhdmUgYW4gZXh0cmEKKyAgICBzbGFzaGVzIGFmdGVyIGEvIGFuZCBiLy4KKworICAtICdnaXQgZm9ybWF0LXBhdGNoJyBwcm9kdWNlZCB0b28gbG9uZyBmaWxlbmFtZXMgaWYgdGhlIGNvbW1pdAorICAgIG1lc3NhZ2UgaGFkIHRvbyBsb25nIGxpbmUgYXQgdGhlIGJlZ2lubmluZy4KKworICAtIFJ1bm5pbmcgJ21ha2UgYWxsJyBhbmQgdGhlbiB3aXRob3V0IGNoYW5naW5nIGFueXRoaW5nCisgICAgcnVubmluZyAnbWFrZSBpbnN0YWxsJyBzdGlsbCByZWJ1aWx0IHNvbWUgZmlsZXMuICBUaGlzCisgICAgd2FzIGluY29udmVuaWVudCB3aGVuIGJ1aWxkaW5nIGFzIHlvdXJzZWxmIGFuZCB0aGVuCisgICAgaW5zdGFsbGluZyBhcyByb290IChlc3BlY2lhbGx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZQorICAgIGRpcmVjdG9yeSBpcyBvbiBORlMgYW5kIHJvb3QgaXMgbWFwcGVkIHRvIG5vYm9keSkuCisKKyAgLSAnZ2l0LXJlcmVyZScgZmFpbGVkIHRvIGRlYWwgd2l0aCB0d28gdW5jb25mbGljdGVkIHBhdGhzIHRoYXQKKyAgICBzb3J0ZWQgbmV4dCB0byBlYWNoIG90aGVyLgorCisgIC0gJ2dpdC1yZXJlcmUnIGF0dGVtcHRlZCB0byBvcGVuKDIpIGEgc3ltbGluayBhbmQgZmFpbGVkIGlmCisgICAgdGhlcmUgd2FzIGEgY29uZmxpY3QuICBTaW5jZSBhIGNvbmZsaWN0aW5nIGNoYW5nZSB0byBhCisgICAgc3ltbGluayB3b3VsZCBub3QgYmVuZWZpdCBmcm9tIHJlcmVyZSBhbnl3YXksIHRoZSBjb21tYW5kCisgICAgbm93IGlnbm9yZXMgY29uZmxpY3RpbmcgY2hhbmdlcyB0byBzeW1saW5rcy4KKworICAtICdnaXQtcmVwYWNrJyBkaWQgbm90IGxpa2UgdG8gcGFzcyBtb3JlIHRoYW4gNjQgYXJndW1lbnRzCisgICAgaW50ZXJuYWxseSB0byB1bmRlcmx5aW5nICdyZXYtbGlzdCcgbG9naWMsIHdoaWNoIG1hZGUgaXQKKyAgICBpbXBvc3NpYmxlIHRvIHJlcGFjayBhZnRlciBhY2N1bXVsYXRpbmcgbWFueSAoc21hbGwpIHBhY2tzCisgICAgaW4gdGhlIHJlcG9zaXRvcnkuCisKKyAgLSAnZ2l0LWRpZmYnIHRvIHJldmlldyB0aGUgY29tYmluZWQgZGlmZiBkdXJpbmcgYSBjb25mbGljdGVkCisgICAgbWVyZ2Ugd2VyZSBub3QgcmVhZGluZyB0aGUgd29ya2luZyB0cmVlIHZlcnNpb24gY29ycmVjdGx5CisgICAgd2hlbiBjaGFuZ2VzIHRvIGEgc3ltYm9saWMgbGluayBjb25mbGljdGVkLiAgSXQgc2hvdWxkIGhhdmUKKyAgICByZWFkIHRoZSBkYXRhIHVzaW5nIHJlYWRsaW5rKDIpIGJ1dCByZWFkIGZyb20gdGhlIHJlZ3VsYXIKKyAgICBmaWxlIHRoZSBzeW1ib2xpYyBsaW5rIHBvaW50ZWQgYXQuCisKKyAgLSAnZ2l0LXJlbW90ZScgZGlkIG5vdCBsaWtlIHBlcmlvZCBpbiBhIHJlbW90ZSdzIG5hbWUuCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAgLSBhZGRlZCBhbmQgY2xhcmlmaWVkIGNvcmUuYmFyZSwgY29yZS5sZWdhY3loZWFkZXJzIGNvbmZpZ3VyYXRpb25zLgorCisgIC0gdXBkYXRlZCAiZ2l0LWNsb25lIC0tZGVwdGgiIGRvY3VtZW50YXRpb24uCisKKworKiBBc3NvcnRlZCBnaXQtZ3VpIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1MDBmOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMy50eHQKQEAgLTAsMCArMSw1OCBAQAorR0lUIHYxLjUuMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSAnZ2l0LmVsJyBob25vcnMgdGhlIGNvbW1pdCBjb2Rpbmcgc3lzdGVtIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgLSAnYmxhbWV2aWV3JyBpbiBjb250cmliLyBjb3JyZWN0bHkgZGlncyBkZWVwZXIgd2hlbiBhIGxpbmUgaXMKKyAgICBjbGlja2VkLgorCisgIC0gJ2h0dHAtcHVzaCcgY29ycmVjdGx5IG1ha2VzIHN1cmUgdGhlIHJlbW90ZSBzaWRlIGhhcyBsZWFkaW5nCisgICAgcGF0aC4gIEVhcmxpZXIgaXQgc3RhcnRlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYXRoLCBhbmQKKyAgICBpbmNvcnJlY3RseS4KKworICAtICdnaXQtbWVyZ2UnIGRpZCBub3QgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyB3aGVuIHRoZQorICAgIHdvcmtpbmcgdHJlZSB3YXMgZGlydHkgYW5kIGNhbm5vdCBmYXN0IGZvcndhcmQuICBJdCBkb2VzCisgICAgbm93LgorCisgIC0gJ2N2c2V4cG9ydGNvbW1pdCcgZG9lcyBub3QgbG9zZSB5ZXQtdG8tYmUtdXNlZCBtZXNzYWdlIGZpbGUuCisKKyAgLSBpbnQtdnMtc2l6ZV90IHR5cGVmaXggd2hlbiBydW5uaW5nIGNvbWJpbmVkIGRpZmYgb24gZmlsZXMKKyAgICBvdmVyIDJHQiBsb25nLgorCisgIC0gJ2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAnIHNob3VsZCBub3QgdG91Y2ggdW5tb2RpZmllZAorICAgIGxpbmVzLgorCisgIC0gJ2dpdC1tYWlsaW5mbycgY2hva2Ugd2hlbiBhIGxvZ2ljYWwgaGVhZGVyIGxpbmUgd2FzIHRvbyBsb25nLgorCisgIC0gJ2dpdCBzaG93IEEuLkInIGRpZCBub3QgZXJyb3Igb3V0LiAgTmVnYXRpdmUgcmVmICgibm90IEEiIGluCisgICAgdGhpcyBleGFtcGxlKSBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciB0aGUgcHVycG9zZSBvZiB0aGUKKyAgICBjb21tYW5kLCBzbyBub3cgaXQgZXJyb3JzIG91dC4KKworICAtICdnaXQgZm10LW1lcmdlLW1zZyAtLWZpbGUnIHdpdGhvdXQgZmlsZSBwYXJhbWV0ZXIgZGlkIG5vdAorICAgIGNvcnJlY3RseSBlcnJvciBvdXQuCisKKyAgLSAnZ2l0IGFyY2hpbXBvcnQnIGJhcmZlZCB1cG9uIGVuY291bnRlcmluZyBhIGNvbW1pdCB3aXRob3V0CisgICAgc3VtbWFyeS4KKworICAtICdnaXQgaW5kZXgtcGFjaycgZGlkIG5vdCBwcm90ZWN0IGl0c2VsZiBmcm9tIGdldHRpbmcgYSBzaG9ydAorICAgIHJlYWQgb3V0IG9mIHByZWFkKDIpLgorCisgIC0gJ2dpdCBodHRwLXB1c2gnIGhhZCBhIGZldyBidWZmZXIgb3ZlcnJ1bnMuCisKKyAgLSBCdWlsZCBkZXBlbmRlbmN5IGZpeGVzIHRvIHJlYnVpbGQgZmV0Y2gubyB3aGVuIG90aGVyIGhlYWRlcnMKKyAgICBjaGFuZ2UuCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAgLSB1c2VyLW1hbnVhbCB1cGRhdGVzLgorCisgIC0gT3B0aW9ucyB0byAnZ2l0IHJlbW90ZSBhZGQnIHdlcmUgZGVzY3JpYmVkIGluc3VmZmljaWVudGx5LgorCisgIC0gQ29uZmlndXJhdGlvbiBmb3JtYXQuc3VmZml4IHdhcyBub3QgZG9jdW1lbnRlZC4KKworICAtIE90aGVyIGZvcm1hdHRpbmcgYW5kIHNwZWxsaW5nIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlZmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNC50eHQKQEAgLTAsMCArMSwyMiBAQAorR0lUIHYxLjUuMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQuZWwgZG9lcyBub3QgYWRkIGR1cGxpY2F0ZSBzaWduLW9mZiBsaW5lcy4KKworICAtIGdpdC1jb21taXQgc2hvd3MgdGhlIGZ1bGwgc3RhdCBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdCwgbm90CisgICAganVzdCBhYm91dCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGVuIHJ1biBmcm9tCisgICAgYSBzdWJkaXJlY3RvcnkuCisKKyAgLSAiZ2l0LWNoZWNrb3V0IC1tICdAezggaG91cnMgYWdvfSciIGhhZCBhIGZ1bm55IGZhaWx1cmUgZnJvbQorICAgIGV2YWw7IGZpeGVkLgorCisgIC0gZ2l0LWd1aSB1cGRhdGVzLgorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisqIFVzZXIgbWFudWFsIHVwZGF0ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZWMzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjUudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0dJVCB2MS41LjAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LW1lcmdlIChoZW5jZSBnaXQtcHVsbCkgZGlkIG5vdCByZWZ1c2UgZmFzdC1mb3J3YXJkaW5nCisgICAgd2hlbiB0aGUgd29ya2luZyB0cmVlIGhhZCBsb2NhbCBjaGFuZ2VzIHRoYXQgd291bGQgaGF2ZQorICAgIGNvbmZsaWN0ZWQgd2l0aCBpdC4KKworICAtIGdpdC5lbCBkb2VzIG5vdCBhZGQgZHVwbGljYXRlIHNpZ24tb2ZmIGxpbmVzLgorCisgIC0gZ2l0LWNvbW1pdCBzaG93cyB0aGUgZnVsbCBzdGF0IG9mIHRoZSByZXN1bHRpbmcgY29tbWl0LCBub3QKKyAgICBqdXN0IGFib3V0IHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdoZW4gcnVuIGZyb20KKyAgICBhIHN1YmRpcmVjdG9yeS4KKworICAtICJnaXQtY2hlY2tvdXQgLW0gJ0B7OCBob3VycyBhZ299JyIgaGFkIGEgZnVubnkgZmFpbHVyZSBmcm9tCisgICAgZXZhbDsgZml4ZWQuCisKKyAgLSBnaXQtZ3VpIHVwZGF0ZXMuCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyogVXNlciBtYW51YWwgdXBkYXRlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyMDE1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNi50eHQKQEAgLTAsMCArMSwyMSBAQAorR0lUIHYxLjUuMC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBhIGhhbmRmdWwgc21hbGwgZml4ZXMgdG8gZ2l0d2ViLgorCisgIC0gYnVpbGQgcHJvY2VkdXJlIGZvciB1c2VyLW1hbnVhbCBpcyBmaXhlZCBub3QgdG8gcmVxdWlyZSBsb2NhbGx5CisgICAgaW5zdGFsbGVkIHN0eWxlc2hlZXRzLgorCisgIC0gImdpdCBjb21taXQgJHBhdGhzIiBvbiBwYXRocyB3aG9zZSBlYXJsaWVyIGNvbnRlbnRzIHdlcmUKKyAgICBhbHJlYWR5IHVwZGF0ZWQgaW4gdGhlIGluZGV4IHdlcmUgZmFpbGluZyBvdXQuCisKKyogRG9jdW1lbnRhdGlvbgorCisgIC0gdXNlci1tYW51YWwgaGFzIGJldHRlciBjcm9zcyByZWZlcmVuY2VzLgorCisgIC0gZ2l0d2ViIGluc3RhbGxhdGlvbi9kZXBsb3ltZW50IHByb2NlZHVyZSBpcyBub3cgZG9jdW1lbnRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGFkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjcudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dJVCB2MS41LjAuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LXVwbG9hZC1wYWNrIGZhaWxlZCB0byBjbG9zZSB1bnVzZWQgcGlwZSBlbmRzLCByZXN1bHRpbmcKKyAgICBpbiBtYW55IHpvbWJpZXMgdG8gaGFuZyBhcm91bmQuCisKKyAgLSBnaXQtcmVyZXJlIHdhcyByZWNvcmRpbmcgdGhlIGNvbnRlbnRzIG9mIGVhcmxpZXIgaHVua3MKKyAgICBkdXBsaWNhdGVkIGluIGxhdGVyIGh1bmtzLiAgVGhpcyBwcmV2ZW50ZWQgcmVzb2x2aW5nIHRoZSBzYW1lCisgICAgY29uZmxpY3Qgd2hlbiBwZXJmb3JtaW5nIHRoZSBzYW1lIG1lcmdlIHRoZSBvdGhlciB3YXkgYXJvdW5kLgorCisqIERvY3VtZW50YXRpb24KKworICAtIGEgZmV3IGRvY3VtZW50YXRpb24gZml4ZXMgZnJvbSBEZWJpYW4gcGFja2FnZSBtYWludGFpbmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQ0MmYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQKQEAgLTAsMCArMSw0NjkgQEAKK0dJVCB2MS41LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK09sZCBuZXdzCistLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gaXMgZm9yIHBlb3BsZSB3aG8gYXJlIHVwZ3JhZGluZyBmcm9tIGFuY2llbnQKK3ZlcnNpb25zIG9mIGdpdC4gIEFsdGhvdWdoIGFsbCBvZiB0aGUgY2hhbmdlcyBpbiB0aGlzIHNlY3Rpb24KK2hhcHBlbmVkIGJlZm9yZSB0aGUgY3VycmVudCB2MS40LjQgcmVsZWFzZSwgdGhleSBhcmUgc3VtbWFyaXplZAoraGVyZSBpbiB0aGUgdjEuNS4wIHJlbGVhc2Ugbm90ZXMgZm9yIHBlb3BsZSB3aG8gc2tpcHBlZCBlYXJsaWVyCit2ZXJzaW9ucy4KKworQXMgb2YgZ2l0IHYxLjUuMCB0aGVyZSBhcmUgc29tZSBvcHRpb25hbCBmZWF0dXJlcyB0aGF0IGNoYW5nZXMKK3RoZSByZXBvc2l0b3J5IHRvIGFsbG93IGRhdGEgdG8gYmUgc3RvcmVkIGFuZCB0cmFuc2ZlcnJlZCBtb3JlCitlZmZpY2llbnRseS4gIFRoZXNlIGZlYXR1cmVzIGFyZSBub3QgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyB0aGV5Cit3aWxsIG1ha2UgdGhlIHJlcG9zaXRvcnkgdW51c2FibGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBnaXQuCitTcGVjaWZpY2FsbHksIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6CisKKyAtIFRoZXJlIGlzIGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb3JlLmxlZ2FjeWhlYWRlcnMgdGhhdAorICAgY2hhbmdlcyB0aGUgZm9ybWF0IG9mIGxvb3NlIG9iamVjdHMgc28gdGhhdCB0aGV5IGFyZSBtb3JlCisgICBlZmZpY2llbnQgdG8gcGFjayBhbmQgdG8gc2VuZCBvdXQgb2YgdGhlIHJlcG9zaXRvcnkgb3ZlciBnaXQKKyAgIG5hdGl2ZSBwcm90b2NvbCwgc2luY2UgdjEuNC4yLiAgSG93ZXZlciwgbG9vc2Ugb2JqZWN0cworICAgd3JpdHRlbiBpbiB0aGUgbmV3IGZvcm1hdCBjYW5ub3QgYmUgcmVhZCBieSBnaXQgb2xkZXIgdGhhbgorICAgdGhhdCB2ZXJzaW9uOyBwZW9wbGUgZmV0Y2hpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgdXNpbmcKKyAgIG9sZGVyIGNsaWVudHMgb3ZlciBkdW1iIHRyYW5zcG9ydHMgKGUuZy4gaHR0cCkgdXNpbmcgb2xkZXIKKyAgIHZlcnNpb25zIG9mIGdpdCB3aWxsIGFsc28gYmUgYWZmZWN0ZWQuCisKKyAgIFRvIGxldCBnaXQgdXNlIHRoZSBuZXcgbG9vc2Ugb2JqZWN0IGZvcm1hdCwgeW91IGhhdmUgdG8KKyAgIHNldCBjb3JlLmxlZ2FjeWhlYWRlcnMgdG8gZmFsc2UuCisKKyAtIFNpbmNlIHYxLjQuMywgY29uZmlndXJhdGlvbiByZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IGFsbG93cworICAgcGFja2ZpbGUgdG8gYmUgY3JlYXRlZCBpbiBtb3JlIHNwYWNlIGVmZmljaWVudCBmb3JtYXQsIHdoaWNoCisgICBjYW5ub3QgYmUgcmVhZCBieSBnaXQgb2xkZXIgdGhhbiB0aGF0IHZlcnNpb24uCisKKyAgIFRvIGxldCBnaXQgdXNlIHRoZSBuZXcgZm9ybWF0IGZvciBwYWNrZmlsZXMsIHlvdSBoYXZlIHRvCisgICBzZXQgcmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCB0byB0cnVlLgorCitUaGUgYWJvdmUgdHdvIG5ldyBmZWF0dXJlcyBhcmUgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgeW91CitoYXZlIHRvIGV4cGxpY2l0bHkgYXNrIGZvciB0aGVtLCBiZWNhdXNlIHRoZXkgbWFrZSByZXBvc2l0b3JpZXMKK3VucmVhZGFibGUgYnkgb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LCBhbmQgaW4gdjEuNS4wIHdlIHN0aWxsIGRvCitub3QgZW5hYmxlIHRoZW0gYnkgZGVmYXVsdCBmb3IgdGhlIHNhbWUgcmVhc29uLiAgV2Ugd2lsbCBjaGFuZ2UKK3RoaXMgZGVmYXVsdCBwcm9iYWJseSAxIHllYXIgYWZ0ZXIgMS40LjIncyByZWxlYXNlLCB3aGVuIGl0IGlzCityZWFzb25hYmxlIHRvIGV4cGVjdCBldmVyeWJvZHkgdG8gaGF2ZSBuZXcgZW5vdWdoIHZlcnNpb24gb2YKK2dpdC4KKworIC0gJ2dpdCBwYWNrLXJlZnMnIGFwcGVhcmVkIGluIHYxLjQuNDsgdGhpcyBjb21tYW5kIGFsbG93cyB0YWdzCisgICB0byBiZSBhY2Nlc3NlZCBtdWNoIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB0aGUgdHJhZGl0aW9uYWwKKyAgICdvbmUtZmlsZS1wZXItdGFnJyBmb3JtYXQuICBPbGRlciBnaXQtbmF0aXZlIGNsaWVudHMgY2FuCisgICBzdGlsbCBmZXRjaCBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IHBhY2tlZCBhbmQgcHJ1bmVkIHJlZnMKKyAgICh0aGUgc2VydmVyIHNpZGUgbmVlZHMgdG8gcnVuIHRoZSB1cC10by1kYXRlIHZlcnNpb24gb2YgZ2l0KSwKKyAgIGJ1dCBvbGRlciBkdW1iIHRyYW5zcG9ydHMgY2Fubm90LiAgUGFja2luZyBvZiByZWZzIGlzIGRvbmUgYnkKKyAgIGFuIGV4cGxpY2l0IHVzZXIgYWN0aW9uLCBlaXRoZXIgYnkgdXNlIG9mICJnaXQgcGFjay1yZWZzCisgICAtLXBydW5lIiBjb21tYW5kIG9yIGJ5IHVzZSBvZiAiZ2l0IGdjIiBjb21tYW5kLgorCisgLSAnZ2l0IC1wJyB0byBwYWdpbmF0ZSBhbnl0aGluZyAtLSBtYW55IGNvbW1hbmRzIGRvIHBhZ2luYXRpb24KKyAgIGJ5IGRlZmF1bHQgb24gYSB0dHkuICBJbnRyb2R1Y2VkIGJldHdlZW4gdjEuNC4xIGFuZCB2MS40LjI7CisgICB0aGlzIG1heSBzdXJwcmlzZSBvbGQgdGltZXJzLgorCisgLSAnZ2l0IGFyY2hpdmUnIHN1cGVyc2VkZWQgJ2dpdCB0YXItdHJlZScgaW4gdjEuNC4zOworCisgLSAnZ2l0IGN2c3NlcnZlcicgd2FzIG5ldyBpbnZlbnRpb24gaW4gdjEuMy4wOworCisgLSAnZ2l0IHJlcG8tY29uZmlnJywgJ2dpdCBncmVwJywgJ2dpdCByZWJhc2UnIGFuZCAnZ2l0aycgd2VyZQorICAgc2VyaW91c2x5IGVuaGFuY2VkIGR1cmluZyB2MS40LjAgdGltZXBlcmlvZC4KKworIC0gJ2dpdHdlYicgYmVjYW1lIHBhcnQgb2YgZ2l0LmdpdCBkdXJpbmcgdjEuNC4wIHRpbWVwZXJpb2QgYW5kCisgICBzZXJpb3VzbHkgbW9kaWZpZWQgc2luY2UgdGhlbi4KKworIC0gcmVmbG9nIGlzIGFuIHYxLjQuMCBpbnZlbnRpb24uICBUaGlzIGFsbG93cyB5b3UgdG8gbmFtZSBhCisgICByZXZpc2lvbiB0aGF0IGEgYnJhbmNoIHVzZWQgdG8gYmUgYXQgKGUuZy4gImdpdCBkaWZmCisgICBtYXN0ZXJAe3llc3RlcmRheX0gbWFzdGVyIiBhbGxvd3MgeW91IHRvIHNlZSBjaGFuZ2VzIHNpbmNlCisgICB5ZXN0ZXJkYXkncyB0aXAgb2YgdGhlIGJyYW5jaCkuCisKKworVXBkYXRlcyBpbiB2MS41LjAgc2luY2UgdjEuNC40IHNlcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEluZGV4IG1hbmlwdWxhdGlvbgorCisgLSBnaXQtYWRkIGlzIHRvIGFkZCBjb250ZW50cyB0byB0aGUgaW5kZXggKGFrYSAic3RhZ2luZyBhcmVhIgorICAgZm9yIHRoZSBuZXh0IGNvbW1pdCksIHdoZXRoZXIgdGhlIGZpbGUgdGhlIGNvbnRlbnRzIGhhcHBlbiB0bworICAgYmUgaXMgYW4gZXhpc3Rpbmcgb25lIG9yIGEgbmV3bHkgY3JlYXRlZCBvbmUuCisKKyAtIGdpdC1hZGQgd2l0aG91dCBhbnkgYXJndW1lbnQgZG9lcyBub3QgYWRkIGV2ZXJ5dGhpbmcKKyAgIGFueW1vcmUuICBVc2UgJ2dpdC1hZGQgLicgaW5zdGVhZC4gIEFsc28geW91IGNhbiBhZGQKKyAgIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIHdpdGggYW4gLWYgb3B0aW9uLgorCisgLSBnaXQtYWRkIHRyaWVzIHRvIGJlIG1vcmUgZnJpZW5kbHkgdG8gdXNlcnMgYnkgb2ZmZXJpbmcgYW4KKyAgIGludGVyYWN0aXZlIG1vZGUgKCJnaXQtYWRkIC1pIikuCisKKyAtIGdpdC1jb21taXQgPHBhdGg+IHVzZWQgdG8gcmVmdXNlIHRvIGNvbW1pdCBpZiA8cGF0aD4gd2FzCisgICBkaWZmZXJlbnQgYmV0d2VlbiBIRUFEIGFuZCB0aGUgaW5kZXggKGkuZS4gdXBkYXRlLWluZGV4IHdhcworICAgdXNlZCBvbiBpdCBlYXJsaWVyKS4gIFRoaXMgY2hlY2sgd2FzIHJlbW92ZWQuCisKKyAtIGdpdC1ybSBpcyBtdWNoIHNhbmVyIGFuZCBzYWZlci4gIEl0IGlzIHVzZWQgdG8gcmVtb3ZlIHBhdGhzCisgICBmcm9tIGJvdGggdGhlIGluZGV4IGZpbGUgYW5kIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBtYWtlcyBzdXJlCisgICB5b3UgYXJlIG5vdCBsb3NpbmcgYW55IGxvY2FsIG1vZGlmaWNhdGlvbiBiZWZvcmUgZG9pbmcgc28uCisKKyAtIGdpdC1yZXNldCA8dHJlZT4gPHBhdGhzPi4uLiBjYW4gYmUgdXNlZCB0byByZXZlcnQgaW5kZXgKKyAgIGVudHJpZXMgZm9yIHNlbGVjdGVkIHBhdGhzLgorCisgLSBnaXQtdXBkYXRlLWluZGV4IGlzIG11Y2ggbGVzcyB2aXNpYmxlLiAgTWFueSBzdWdnZXN0aW9ucyB0bworICAgdXNlIHRoZSBjb21tYW5kIGluIGdpdCBvdXRwdXQgYW5kIGRvY3VtZW50YXRpb24gaGF2ZSBub3cgYmVlbgorICAgcmVwbGFjZWQgYnkgc2ltcGxlciBjb21tYW5kcyBzdWNoIGFzICJnaXQgYWRkIiBvciAiZ2l0IHJtIi4KKworCisqIFJlcG9zaXRvcnkgbGF5b3V0IGFuZCBvYmplY3RzIHRyYW5zZmVyCisKKyAtIFRoZSBkYXRhIGZvciBvcmlnaW4gcmVwb3NpdG9yeSBpcyBzdG9yZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAgIGZpbGUgJEdJVF9ESVIvY29uZmlnLCBub3QgaW4gJEdJVF9ESVIvcmVtb3Rlcy8sIGZvciBuZXdseQorICAgY3JlYXRlZCBjbG9uZXMuICBUaGUgbGF0dGVyIGlzIHN0aWxsIHN1cHBvcnRlZCBhbmQgdGhlcmUgaXMKKyAgIG5vIG5lZWQgdG8gY29udmVydCB5b3VyIGV4aXN0aW5nIHJlcG9zaXRvcnkgaWYgeW91IGFyZQorICAgYWxyZWFkeSBjb21mb3J0YWJsZSB3aXRoIHlvdXIgd29ya2Zsb3cgd2l0aCB0aGUgbGF5b3V0LgorCisgLSBnaXQtY2xvbmUgYWx3YXlzIHVzZXMgd2hhdCBpcyBrbm93biBhcyAic2VwYXJhdGUgcmVtb3RlIgorICAgbGF5b3V0IGZvciBhIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeSB3aXRoIGEgd29ya2luZyB0cmVlLgorCisgICBBIHJlcG9zaXRvcnkgd2l0aCB0aGUgc2VwYXJhdGUgcmVtb3RlIGxheW91dCBzdGFydHMgd2l0aCBvbmx5CisgICBvbmUgZGVmYXVsdCBicmFuY2gsICdtYXN0ZXInLCB0byBiZSB1c2VkIGZvciB5b3VyIG93bgorICAgZGV2ZWxvcG1lbnQuICBVbmxpa2UgdGhlIHRyYWRpdGlvbmFsIGxheW91dCB0aGF0IGNvcGllZCBhbGwKKyAgIHRoZSB1cHN0cmVhbSBicmFuY2hlcyBpbnRvIHlvdXIgYnJhbmNoIG5hbWVzcGFjZSAod2hpbGUKKyAgIHJlbmFtaW5nIHRoZWlyICdtYXN0ZXInIHRvIHlvdXIgJ29yaWdpbicpLCB0aGUgbmV3IGxheW91dAorICAgcHV0cyB1cHN0cmVhbSBicmFuY2hlcyBpbnRvIGxvY2FsICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCisgICB3aXRoIHRoZWlyIG93biBuYW1lc3BhY2UuIFRoZXNlIGNhbiBiZSByZWZlcmVuY2VkIHdpdGggbmFtZXMKKyAgIHN1Y2ggYXMgIm9yaWdpbi8kdXBzdHJlYW1fYnJhbmNoX25hbWUiIGFuZCBhcmUgc3RvcmVkIGluCisgICAuZ2l0L3JlZnMvcmVtb3RlcyByYXRoZXIgdGhhbiAuZ2l0L3JlZnMvaGVhZHMgd2hlcmUgbm9ybWFsCisgICBicmFuY2hlcyBhcmUgc3RvcmVkLgorCisgICBUaGlzIGxheW91dCBrZWVwcyB5b3VyIG93biBicmFuY2ggbmFtZXNwYWNlIGxlc3MgY2x1dHRlcmVkLAorICAgYXZvaWRzIG5hbWUgY29sbGlzaW9uIHdpdGggeW91ciB1cHN0cmVhbSwgbWFrZXMgaXQgcG9zc2libGUKKyAgIHRvIGF1dG9tYXRpY2FsbHkgdHJhY2sgbmV3IGJyYW5jaGVzIGNyZWF0ZWQgYXQgdGhlIHJlbW90ZQorICAgYWZ0ZXIgeW91IGNsb25lIGZyb20gaXQsIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gaW50ZXJhY3Qgd2l0aAorICAgbW9yZSB0aGFuIG9uZSByZW1vdGUgcmVwb3NpdG9yeSAoeW91IGNhbiB1c2UgImdpdCByZW1vdGUiIHRvCisgICBhZGQgb3RoZXIgcmVwb3NpdG9yaWVzIHRvIHRyYWNrKS4gIFRoZXJlIG1pZ2h0IGJlIHNvbWUKKyAgIHN1cnByaXNlczoKKworICAgKiAnZ2l0IGJyYW5jaCcgZG9lcyBub3Qgc2hvdyB0aGUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzLgorICAgICBJdCBvbmx5IGxpc3RzIHlvdXIgb3duIGJyYW5jaGVzLiAgVXNlICctcicgb3B0aW9uIHRvIHZpZXcKKyAgICAgdGhlIHRyYWNraW5nIGJyYW5jaGVzLgorCisgICAqIElmIHlvdSBhcmUgZm9ya2luZyBvZmYgb2YgYSBicmFuY2ggb2J0YWluZWQgZnJvbSB0aGUKKyAgICAgdXBzdHJlYW0sIHlvdSB3b3VsZCBoYXZlIGRvbmUgc29tZXRoaW5nIGxpa2UgJ2dpdCBicmFuY2gKKyAgICAgbXktbmV4dCBuZXh0JywgYmVjYXVzZSB0cmFkaXRpb25hbCBsYXlvdXQgZHJvcHBlZCB0aGUKKyAgICAgdHJhY2tpbmcgYnJhbmNoICduZXh0JyBpbnRvIHlvdXIgb3duIGJyYW5jaCBuYW1lc3BhY2UuCisgICAgIFdpdGggdGhlIHNlcGFyYXRlIHJlbW90ZSBsYXlvdXQsIHlvdSBzYXkgJ2dpdCBicmFuY2ggbmV4dAorICAgICBvcmlnaW4vbmV4dCcsIHdoaWNoIGFsbG93cyB5b3UgdG8gdXNlIHRoZSBtYXRjaGluZyBuYW1lCisgICAgICduZXh0JyBmb3IgeW91ciBvd24gYnJhbmNoLiAgSXQgYWxzbyBhbGxvd3MgeW91IHRvIHRyYWNrIGEKKyAgICAgcmVtb3RlIG90aGVyIHRoYW4gJ29yaWdpbicgKGkuZS4gd2hlcmUgeW91IGluaXRpYWxseSBjbG9uZWQKKyAgICAgZnJvbSkgYW5kIGZvcmsgb2ZmIG9mIGEgYnJhbmNoIGZyb20gdGhlcmUgdGhlIHNhbWUgd2F5CisgICAgIChlLmcuICJnaXQgYnJhbmNoIG1pbmd3IGo2dC9tYXN0ZXIiKS4KKworICAgUmVwb3NpdG9yaWVzIGluaXRpYWxpemVkIHdpdGggdGhlIHRyYWRpdGlvbmFsIGxheW91dCBjb250aW51ZQorICAgdG8gd29yay4KKworIC0gTmV3IGJyYW5jaGVzIHRoYXQgYXBwZWFyIG9uIHRoZSBvcmlnaW4gc2lkZSBhZnRlciBhIGNsb25lIGlzCisgICBtYWRlIGFyZSBhbHNvIHRyYWNrZWQgYXV0b21hdGljYWxseS4gIFRoaXMgaXMgZG9uZSB3aXRoIGFuCisgICB3aWxkY2FyZCByZWZzcGVjICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiwgd2hpY2gKKyAgIG9sZGVyIGdpdCBkb2VzIG5vdCB1bmRlcnN0YW5kLCBzbyBpZiB5b3UgY2xvbmUgd2l0aCAxLjUuMCwKKyAgIHlvdSB3b3VsZCBuZWVkIHRvIGRvd25ncmFkZSByZW1vdGUuKi5mZXRjaCBpbiB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBzcGVjaWZ5IGVhY2ggYnJhbmNoIHlvdSBhcmUgaW50ZXJlc3RlZAorICAgaW4gaW5kaXZpZHVhbGx5IGlmIHlvdSBwbGFuIHRvIGZldGNoIGludG8gdGhlIHJlcG9zaXRvcnkgd2l0aAorICAgb2xkZXIgdmVyc2lvbnMgb2YgZ2l0IChidXQgd2h5IHdvdWxkIHlvdT8pLgorCisgLSBTaW1pbGFybHksIHdpbGRjYXJkIHJlZnNwZWMgInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbWUvKiIKKyAgIGNhbiBiZSBnaXZlbiB0byAiZ2l0LXB1c2giIGNvbW1hbmQgdG8gdXBkYXRlIHRoZSB0cmFja2luZworICAgYnJhbmNoZXMgdGhhdCBpcyB1c2VkIHRvIHRyYWNrIHRoZSByZXBvc2l0b3J5IHlvdSBhcmUgcHVzaGluZworICAgZnJvbSBvbiB0aGUgcmVtb3RlIHNpZGUuCisKKyAtIGdpdC1icmFuY2ggYW5kIGdpdC1zaG93LWJyYW5jaCBrbm93IHJlbW90ZSB0cmFja2luZyBicmFuY2hlcworICAgKHVzZSB0aGUgY29tbWFuZCBsaW5lIHN3aXRjaCAiLXIiIHRvIGxpc3Qgb25seSB0cmFja2VkIGJyYW5jaGVzKS4KKworIC0gZ2l0LXB1c2ggY2FuIG5vdyBiZSB1c2VkIHRvIGRlbGV0ZSBhIHJlbW90ZSBicmFuY2ggb3IgYSB0YWcuCisgICBUaGlzIHJlcXVpcmVzIHRoZSB1cGRhdGVkIGdpdCBvbiB0aGUgcmVtb3RlIHNpZGUgKHVzZSAiZ2l0CisgICBwdXNoIDxyZW1vdGU+IDpyZWZzL2hlYWRzLzxicmFuY2g+IiB0byBkZWxldGUgImJyYW5jaCIpLgorCisgLSBnaXQtcHVzaCBtb3JlIGFnZ3Jlc3NpdmVseSBrZWVwcyB0aGUgdHJhbnNmZXJyZWQgb2JqZWN0cworICAgcGFja2VkLiAgRWFybGllciB3ZSByZWNvbW1lbmRlZCB0byBtb25pdG9yIGFtb3VudCBvZiBsb29zZQorICAgb2JqZWN0cyBhbmQgcmVwYWNrIHJlZ3VsYXJseSwgYnV0IHlvdSBzaG91bGQgcmVwYWNrIHdoZW4geW91CisgICBhY2N1bXVsYXRlZCB0b28gbWFueSBzbWFsbCBwYWNrcyB0aGlzIHdheSBhcyB3ZWxsLiAgVXBkYXRlZAorICAgZ2l0LWNvdW50LW9iamVjdHMgaGVscHMgeW91IHdpdGggdGhpcy4KKworIC0gZ2l0LWZldGNoIGFsc28gbW9yZSBhZ2dyZXNzaXZlbHkga2VlcHMgdGhlIHRyYW5zZmVycmVkIG9iamVjdHMKKyAgIHBhY2tlZC4gIFRoaXMgYmVoYXZpb3Igb2YgZ2l0LXB1c2ggYW5kIGdpdC1mZXRjaCBjYW4gYmUKKyAgIHR3ZWFrZWQgd2l0aCBhIHNpbmdsZSBjb25maWd1cmF0aW9uIHRyYW5zZmVyLnVucGFja2xpbWl0IChidXQKKyAgIHVzdWFsbHkgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgbmVlZCBmb3IgYSB1c2VyIHRvIHR3ZWFrIGl0KS4KKworIC0gQSBuZXcgY29tbWFuZCwgZ2l0LXJlbW90ZSwgY2FuIGhlbHAgeW91IG1hbmFnZSB5b3VyIHJlbW90ZQorICAgdHJhY2tpbmcgYnJhbmNoIGRlZmluaXRpb25zLgorCisgLSBZb3UgbWF5IG5lZWQgdG8gc3BlY2lmeSBleHBsaWNpdCBwYXRocyBmb3IgdXBsb2FkLXBhY2sgYW5kL29yCisgICByZWNlaXZlLXBhY2sgZHVlIHRvIHlvdXIgc3NoIGRhZW1vbiBjb25maWd1cmF0aW9uIG9uIHRoZQorICAgb3RoZXIgZW5kLiAgVGhpcyBjYW4gbm93IGJlIGRvbmUgdmlhIHJlbW90ZS4qLnVwbG9hZHBhY2sgYW5kCisgICByZW1vdGUuKi5yZWNlaXZlcGFjayBjb25maWd1cmF0aW9uLgorCisKKyogQmFyZSByZXBvc2l0b3JpZXMKKworIC0gQ2VydGFpbiBjb21tYW5kcyBjaGFuZ2UgdGhlaXIgYmVoYXZpb3IgaW4gYSBiYXJlIHJlcG9zaXRvcnkKKyAgIChpLmUuIGEgcmVwb3NpdG9yeSB3aXRob3V0IGFzc29jaWF0ZWQgd29ya2luZyB0cmVlKS4gIFdlIHVzZQorICAgYSBmYWlybHkgY29uc2VydmF0aXZlIGhldXJpc3RpYyAoaWYgJEdJVF9ESVIgaXMgIi5naXQiLCBvcgorICAgZW5kcyB3aXRoICIvLmdpdCIsIHRoZSByZXBvc2l0b3J5IGlzIG5vdCBiYXJlKSB0byBkZWNpZGUgaWYgYQorICAgcmVwb3NpdG9yeSBpcyBiYXJlLCBidXQgImNvcmUuYmFyZSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGhldXJpc3RpYyB3aGVuIGl0IG1pc2lkZW50aWZpZXMKKyAgIHlvdXIgcmVwb3NpdG9yeS4KKworIC0gZ2l0LWZldGNoIHVzZWQgdG8gY29tcGxhaW4gdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGJ1dAorICAgdGhpcyBpcyBub3cgYWxsb3dlZCBmb3IgYSBiYXJlIHJlcG9zaXRvcnkuICBTbyBpcyB0aGUgdXNlIG9mCisgICAnZ2l0LWJyYW5jaCAtZicgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4KKworIC0gUG9yY2VsYWluLWlzaCBjb21tYW5kcyB0aGF0IHJlcXVpcmUgYSB3b3JraW5nIHRyZWUgcmVmdXNlcyB0bworICAgd29yayBpbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworCisqIFJlZmxvZworCisgLSBSZWZsb2cgcmVjb3JkcyB0aGUgaGlzdG9yeSBmcm9tIHRoZSB2aWV3IHBvaW50IG9mIHRoZSBsb2NhbAorICAgcmVwb3NpdG9yeS4gSW4gb3RoZXIgd29yZHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlYWwgaGlzdG9yeSwKKyAgIHRoZSByZWZsb2cgc2hvd3MgdGhlIGhpc3RvcnkgYXMgc2VlbiBieSBvbmUgcGFydGljdWxhcgorICAgcmVwb3NpdG9yeSAodGhpcyBlbmFibGVzIHlvdSB0byBhc2sgIndoYXQgd2FzIHRoZSBjdXJyZW50CisgICByZXZpc2lvbiBpbiBfdGhpc18gcmVwb3NpdG9yeSwgeWVzdGVyZGF5IGF0IDFwbT8iKS4gIFRoaXMKKyAgIGZhY2lsaXR5IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgcmVwb3NpdG9yaWVzIHdpdGggd29ya2luZworICAgdHJlZXMsIGFuZCBjYW4gYmUgYWNjZXNzZWQgd2l0aCB0aGUgImJyYW5jaEB7dGltZX0iIGFuZAorICAgImJyYW5jaEB7TnRofSIgbm90YXRpb24uCisKKyAtICJnaXQgc2hvdy1icmFuY2giIGxlYXJuZWQgc2hvd2luZyB0aGUgcmVmbG9nIGRhdGEgd2l0aCB0aGUKKyAgIG5ldyAtZyBvcHRpb24uICAiZ2l0IGxvZyIgaGFzIC1nIG9wdGlvbiB0byB2aWV3IHJlZmxvZworICAgZW50cmllcyBpbiBhIG1vcmUgdmVyYm9zZSBtYW5uZXIuCisKKyAtIGdpdC1icmFuY2gga25vd3MgaG93IHRvIHJlbmFtZSBicmFuY2hlcyBhbmQgbW92ZXMgZXhpc3RpbmcKKyAgIHJlZmxvZyBkYXRhIGZyb20gdGhlIG9sZCBicmFuY2ggdG8gdGhlIG5ldyBvbmUuCisKKyAtIEluIGFkZGl0aW9uIHRvIHRoZSByZWZsb2cgc3VwcG9ydCBpbiB2MS40LjQgc2VyaWVzLCBIRUFECisgICByZWZlcmVuY2UgbWFpbnRhaW5zIGl0cyBvd24gbG9nLiAgIkhFQURAezUubWludXRlcy5hZ299IgorICAgbWVhbnMgdGhlIGNvbW1pdCB5b3Ugd2VyZSBhdCA1IG1pbnV0ZXMgYWdvLCB3aGljaCB0YWtlcworICAgYnJhbmNoIHN3aXRjaGluZyBpbnRvIGFjY291bnQuICBJZiB5b3Ugd2FudCB0byBrbm93IHdoZXJlIHRoZQorICAgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggd2FzIGF0IDUgbWludXRlcyBhZ28sIHlvdSBuZWVkIHRvCisgICBleHBsaWNpdGx5IHNheSBpdHMgbmFtZSAoZS5nLiAibWFzdGVyQHs1Lm1pbnV0ZXMuYWdvfSIpIG9yCisgICBvbWl0IHRoZSByZWZuYW1lIGFsdG9nZXRoZXIgaS5lLiAiQHs1Lm1pbnV0ZXMuYWdvfSIuCisKKyAtIFRoZSBjb21taXRzIHJlZmVycmVkIHRvIGJ5IHJlZmxvZyBlbnRyaWVzIGFyZSBub3cgcHJvdGVjdGVkCisgICBhZ2FpbnN0IHBydW5pbmcuICBUaGUgbmV3IGNvbW1hbmQgImdpdCByZWZsb2cgZXhwaXJlIiBjYW4gYmUKKyAgIHVzZWQgdG8gdHJ1bmNhdGUgb2xkZXIgcmVmbG9nIGVudHJpZXMgYW5kIGVudHJpZXMgdGhhdCByZWZlcgorICAgdG8gY29tbWl0cyB0aGF0IGhhdmUgYmVlbiBwcnVuZWQgYXdheSBwcmV2aW91c2x5IHdpdGggb2xkZXIKKyAgIHZlcnNpb25zIG9mIGdpdC4KKworICAgRXhpc3RpbmcgcmVwb3NpdG9yaWVzIHRoYXQgaGF2ZSBiZWVuIHVzaW5nIHJlZmxvZyBtYXkgZ2V0CisgICBjb21wbGFpbnRzIGZyb20gZnNjay1vYmplY3RzIGFuZCBtYXkgbm90IGJlIGFibGUgdG8gcnVuCisgICBnaXQtcmVwYWNrLCBpZiB5b3UgaGFkIHJ1biBnaXQtcHJ1bmUgZnJvbSBvbGRlciBnaXQ7IHBsZWFzZQorICAgcnVuICJnaXQgcmVmbG9nIGV4cGlyZSAtLXN0YWxlLWZpeCAtLWFsbCIgZmlyc3QgdG8gcmVtb3ZlCisgICByZWZsb2cgZW50cmllcyB0aGF0IHJlZmVyIHRvIGNvbW1pdHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluCisgICB0aGUgcmVwb3NpdG9yeSB3aGVuIHRoYXQgaGFwcGVucy4KKworCisqIENydWZ0IHJlbW92YWwKKworIC0gV2UgdXNlZCB0byBzYXkgIm9sZCBjb21taXRzIGFyZSByZXRyaWV2YWJsZSB1c2luZyByZWZsb2cgYW5kCisgICAnbWFzdGVyQHt5ZXN0ZXJkYXl9JyBzeW50YXggYXMgbG9uZyBhcyB5b3UgaGF2ZW4ndCBydW4KKyAgIGdpdC1wcnVuZSIuICBXZSBubyBsb25nZXIgaGF2ZSB0byBzYXkgdGhlIGxhdHRlciBoYWxmIG9mIHRoZQorICAgYWJvdmUgc2VudGVuY2UsIGFzIGdpdC1wcnVuZSBkb2VzIG5vdCByZW1vdmUgdGhpbmdzIHJlYWNoYWJsZQorICAgZnJvbSByZWZsb2cgZW50cmllcy4KKworIC0gVGhlcmUgaXMgYSB0b3BsZXZlbCBnYXJiYWdlIGNvbGxlY3RvciBzY3JpcHQsICdnaXQtZ2MnLCB0aGF0CisgICBydW5zIHBlcmlvZGljIGNsZWFudXAgZnVuY3Rpb25zLCBpbmNsdWRpbmcgJ2dpdC1yZXBhY2sgLWEgLWQnLAorICAgJ2dpdC1yZWZsb2cgZXhwaXJlJywgJ2dpdC1wYWNrLXJlZnMgLS1wcnVuZScsIGFuZCAnZ2l0LXJlcmVyZQorICAgZ2MnLgorCisgLSBUaGUgb3V0cHV0IGZyb20gZnNjayAoImZzY2stb2JqZWN0cyIgaXMgY2FsbGVkIGp1c3QgImZzY2siCisgICBub3csIGJ1dCB0aGUgb2xkIG5hbWUgY29udGludWVzIHRvIHdvcmspIHdhcyBuZWVkbGVzc2x5CisgICBhbGFybWluZyBpbiB0aGF0IGl0IHdhcm5lZCBtaXNzaW5nIG9iamVjdHMgdGhhdCBhcmUgcmVhY2hhYmxlCisgICBvbmx5IGZyb20gZGFuZ2xpbmcgb2JqZWN0cy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIGFuZCB0aGUKKyAgIG91dHB1dCBpcyBtdWNoIG1vcmUgdXNlZnVsLgorCisKKyogRGV0YWNoZWQgSEVBRAorCisgLSBZb3UgY2FuIHVzZSAnZ2l0LWNoZWNrb3V0JyB0byBjaGVjayBvdXQgYW4gYXJiaXRyYXJ5IHJldmlzaW9uCisgICBvciBhIHRhZyBhcyB3ZWxsLCBpbnN0ZWFkIG9mIG5hbWVkIGJyYW5jaGVzLiAgVGhpcyB3aWxsCisgICBkaXNzb2NpYXRlIHlvdXIgSEVBRCBmcm9tIHRoZSBicmFuY2ggeW91IGFyZSBjdXJyZW50bHkgb24uCisKKyAgIEEgdHlwaWNhbCB1c2Ugb2YgdGhpcyBmZWF0dXJlIGlzIHRvICJsb29rIGFyb3VuZCIuICBFLmcuCisKKwkkIGdpdCBjaGVja291dCB2Mi42LjE2CisJLi4uIGNvbXBpbGUsIHRlc3QsIGV0Yy4KKwkkIGdpdCBjaGVja291dCB2Mi42LjE3CisJLi4uIGNvbXBpbGUsIHRlc3QsIGV0Yy4KKworIC0gQWZ0ZXIgZGV0YWNoaW5nIHlvdXIgSEVBRCwgeW91IGNhbiBnbyBiYWNrIHRvIGFuIGV4aXN0aW5nCisgICBicmFuY2ggd2l0aCB1c3VhbCAiZ2l0IGNoZWNrb3V0ICRicmFuY2giLiAgQWxzbyB5b3UgY2FuCisgICBzdGFydCBhIG5ldyBicmFuY2ggdXNpbmcgImdpdCBjaGVja291dCAtYiAkbmV3YnJhbmNoIiB0bworICAgc3RhcnQgYSBuZXcgYnJhbmNoIGF0IHRoYXQgY29tbWl0LgorCisgLSBZb3UgY2FuIGV2ZW4gcHVsbCBmcm9tIG90aGVyIHJlcG9zaXRvcmllcywgbWFrZSBtZXJnZXMgYW5kCisgICBjb21taXRzIHdoaWxlIHlvdXIgSEVBRCBpcyBkZXRhY2hlZC4gIEFsc28geW91IGNhbiB1c2UgImdpdAorICAgcmVzZXQiIHRvIGp1bXAgdG8gYXJiaXRyYXJ5IGNvbW1pdCwgd2hpbGUgc3RpbGwga2VlcGluZyB5b3VyCisgICBIRUFEIGRldGFjaGVkLgorCisgICBSZW1lbWJlciB0aGF0IGEgZGV0YWNoZWQgc3RhdGUgaXMgdm9sYXRpbGUsIGkuZS4gaXQgd2lsbCBiZSBmb3Jnb3R0ZW4KKyAgIGFzIHNvb24gYXMgeW91IG1vdmUgYXdheSBmcm9tIGl0IHdpdGggdGhlIGNoZWNrb3V0IG9yIHJlc2V0IGNvbW1hbmQsCisgICB1bmxlc3MgYSBicmFuY2ggaXMgY3JlYXRlZCBmcm9tIGl0IGFzIG1lbnRpb25lZCBhYm92ZS4gIEl0IGlzIGFsc28KKyAgIHBvc3NpYmxlIHRvIHJlc2N1ZSBhIGxvc3QgZGV0YWNoZWQgc3RhdGUgZnJvbSB0aGUgSEVBRCByZWZsb2cuCisKKworKiBQYWNrZWQgcmVmcworCisgLSBSZXBvc2l0b3JpZXMgd2l0aCBodW5kcmVkcyBvZiB0YWdzIGhhdmUgYmVlbiBwYXlpbmcgbGFyZ2UKKyAgIG92ZXJoZWFkLCBib3RoIGluIHN0b3JhZ2UgYW5kIGluIHJ1bnRpbWUsIGR1ZSB0byB0aGUKKyAgIHRyYWRpdGlvbmFsIG9uZS1yZWYtcGVyLWZpbGUgZm9ybWF0LiAgQSBuZXcgY29tbWFuZCwKKyAgIGdpdC1wYWNrLXJlZnMsIGNhbiBiZSB1c2VkIHRvICJwYWNrIiB0aGVtIGluIG1vcmUgZWZmaWNpZW50CisgICByZXByZXNlbnRhdGlvbiAoeW91IGNhbiBsZXQgZ2l0LWdjIGRvIHRoaXMgZm9yIHlvdSkuCisKKyAtIENsb25lcyBhbmQgZmV0Y2hlcyBvdmVyIGR1bWIgdHJhbnNwb3J0cyBhcmUgbm93IGF3YXJlIG9mCisgICBwYWNrZWQgcmVmcyBhbmQgY2FuIGRvd25sb2FkIGZyb20gcmVwb3NpdG9yaWVzIHRoYXQgdXNlCisgICB0aGVtLgorCisKKyogQ29uZmlndXJhdGlvbgorCisgLSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gY29sb3Igc2V0dGluZyBhcmUgY29uc29saWRhdGVkIHVuZGVyCisgICBjb2xvci4qIG5hbWVzcGFjZSAob2xkZXIgZGlmZi5jb2xvci4qLCBzdGF0dXMuY29sb3IuKiBhcmUKKyAgIHN0aWxsIHN1cHBvcnRlZCkuCisKKyAtICdnaXQtcmVwby1jb25maWcnIGNvbW1hbmQgaXMgYWNjZXNzaWJsZSBhcyAnZ2l0LWNvbmZpZycgbm93LgorCisKKyogVXBkYXRlZCBmZWF0dXJlcworCisgLSBnaXQtZGVzY3JpYmUgdXNlcyBiZXR0ZXIgY3JpdGVyaWEgdG8gcGljayBhIGJhc2UgcmVmLiAgSXQKKyAgIHVzZWQgdG8gcGljayB0aGUgb25lIHdpdGggdGhlIG5ld2VzdCB0aW1lc3RhbXAsIGJ1dCBub3cgaXQKKyAgIHBpY2tzIHRoZSBvbmUgdGhhdCBpcyB0b3BvbG9naWNhbGx5IHRoZSBjbG9zZXN0ICh0aGF0IGlzLAorICAgYW1vbmcgYW5jZXN0b3JzIG9mIGNvbW1pdCBDLCB0aGUgcmVmIFQgdGhhdCBoYXMgdGhlIHNob3J0ZXN0CisgICBvdXRwdXQgZnJvbSAiZ2l0LXJldi1saXN0IFQuLkMiIGlzIGNob3NlbikuCisKKyAtIGdpdC1kZXNjcmliZSBnaXZlcyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgc2luY2UgdGhlIGJhc2UgcmVmCisgICBiZXR3ZWVuIHRoZSByZWZuYW1lIGFuZCB0aGUgaGFzaCBzdWZmaXguICBFLmcuIHRoZSBjb21taXQgb25lCisgICBiZWZvcmUgdjIuNi4yMC1yYzYgaW4gdGhlIGtlcm5lbCByZXBvc2l0b3J5IGlzOgorCisJdjIuNi4yMC1yYzUtMzA2LWdhMjFiMDY5CisKKyAgIHdoaWNoIHRlbGxzIHlvdSB0aGF0IGl0cyBvYmplY3QgbmFtZSBiZWdpbnMgd2l0aCBhMjFiMDY5LAorICAgdjIuNi4yMC1yYzUgaXMgYW4gYW5jZXN0b3Igb2YgaXQgKG1lYW5pbmcsIHRoZSBjb21taXQKKyAgIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgLXJjNSBoYXMpLCBhbmQgdGhlcmUgYXJlIDMwNiBjb21taXRzCisgICBzaW5jZSB2Mi42LjIwLXJjNS4KKworIC0gZ2l0LWRlc2NyaWJlIHdpdGggLS1hYmJyZXY9MCBjYW4gYmUgdXNlZCB0byBzaG93IG9ubHkgdGhlCisgICBuYW1lIG9mIHRoZSBiYXNlIHJlZi4KKworIC0gZ2l0LWJsYW1lIGxlYXJuZWQgYSBuZXcgb3B0aW9uLCAtLWluY3JlbWVudGFsLCB0aGF0IHRlbGxzIGl0CisgICB0byBvdXRwdXQgdGhlIGJsYW1lcyBhcyB0aGV5IGFyZSBhc3NpZ25lZC4gIEEgc2FtcGxlIHNjcmlwdAorICAgdG8gdXNlIGl0IGlzIGFsc28gaW5jbHVkZWQgYXMgY29udHJpYi9ibGFtZXZpZXcuCisKKyAtIGdpdC1ibGFtZSBzdGFydHMgYW5ub3RhdGluZyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYnkgZGVmYXVsdC4KKworCisqIExlc3MgZXh0ZXJuYWwgZGVwZW5kZW5jeQorCisgLSBXZSBubyBsb25nZXIgcmVxdWlyZSB0aGUgIm1lcmdlIiBwcm9ncmFtIGZyb20gdGhlIFJDUyBzdWl0ZS4KKyAgIEFsbCAzLXdheSBmaWxlLWxldmVsIG1lcmdlcyBhcmUgbm93IGRvbmUgaW50ZXJuYWxseS4KKworIC0gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGdpdC1tZXJnZS1yZWN1cnNpdmUgd2hpY2ggd2FzCisgICBpbiBQeXRob24gaGFzIGJlZW4gcmVtb3ZlZDsgd2UgaGF2ZSBhIEMgaW1wbGVtZW50YXRpb24gb2YgaXQKKyAgIG5vdy4KKworIC0gZ2l0LXNob3J0bG9nIGlzIG5vIGxvbmdlciBhIFBlcmwgc2NyaXB0LiAgSXQgbm8gbG9uZ2VyCisgICByZXF1aXJlcyBvdXRwdXQgcGlwZWQgZnJvbSBnaXQtbG9nOyBpdCBjYW4gYWNjZXB0IHJldmlzaW9uCisgICBwYXJhbWV0ZXJzIGRpcmVjdGx5IG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKworKiBJMThuCisKKyAtIFdlIGhhdmUgYWx3YXlzIGVuY291cmFnZWQgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIGJlIGVuY29kZWQgaW4KKyAgIFVURi04LCBidXQgdGhlIHVzZXJzIGFyZSBhbGxvd2VkIHRvIHVzZSBsZWdhY3kgZW5jb2RpbmcgYXMKKyAgIGFwcHJvcHJpYXRlIGZvciB0aGVpciBwcm9qZWN0cy4gIFRoaXMgd2lsbCBjb250aW51ZSB0byBiZSB0aGUKKyAgIGNhc2UuICBIb3dldmVyLCBhIG5vbiBVVEYtOCBjb21taXQgZW5jb2RpbmcgX211c3RfIGJlCisgICBleHBsaWNpdGx5IHNldCB3aXRoIGkxOG4uY29tbWl0ZW5jb2RpbmcgaW4gdGhlIHJlcG9zaXRvcnkKKyAgIHdoZXJlIGEgY29tbWl0IGlzIG1hZGU7IG90aGVyd2lzZSBnaXQtY29tbWl0LXRyZWUgd2lsbAorICAgY29tcGxhaW4gaWYgdGhlIGxvZyBtZXNzYWdlIGRvZXMgbm90IGxvb2sgbGlrZSBhIHZhbGlkIFVURi04CisgICBzdHJpbmcuCisKKyAtIFRoZSB2YWx1ZSBvZiBpMThuLmNvbW1pdGVuY29kaW5nIGluIHRoZSBvcmlnaW5hdGluZworICAgcmVwb3NpdG9yeSBpcyByZWNvcmRlZCBpbiB0aGUgY29tbWl0IG9iamVjdCBvbiB0aGUgImVuY29kaW5nIgorICAgaGVhZGVyLCBpZiBpdCBpcyBub3QgVVRGLTguICBnaXQtbG9nIGFuZCBmcmllbmRzIG5vdGljZSB0aGlzLAorICAgYW5kIHJlLWVuY29kZXMgdGhlIG1lc3NhZ2UgdG8gdGhlIGxvZyBvdXRwdXQgZW5jb2Rpbmcgd2hlbgorICAgZGlzcGxheWluZywgaWYgdGhleSBhcmUgZGlmZmVyZW50LiAgVGhlIGxvZyBvdXRwdXQgZW5jb2RpbmcKKyAgIGlzIGRldGVybWluZWQgYnkgImdpdCBsb2cgLS1lbmNvZGluZz08ZW5jb2Rpbmc+IiwKKyAgIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgY29uZmlndXJhdGlvbiwgb3IgaTE4bi5jb21taXRlbmNvZGluZworICAgY29uZmlndXJhdGlvbiwgaW4gdGhlIGRlY3JlYXNpbmcgb3JkZXIgb2YgcHJlZmVyZW5jZSwgYW5kCisgICBkZWZhdWx0cyB0byBVVEYtOC4KKworIC0gVG9vbHMgZm9yIGUtbWFpbGVkIHBhdGNoIGFwcGxpY2F0aW9uIG5vdyBkZWZhdWx0IHRvIC11CisgICBiZWhhdmlvcjsgaS5lLiBpdCBhbHdheXMgcmUtY29kZXMgZnJvbSB0aGUgZS1tYWlsZWQgZW5jb2RpbmcKKyAgIHRvIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgd2l0aCBpMThuLmNvbW1pdGVuY29kaW5nLiAgVGhpcworICAgdW5mb3J0dW5hdGVseSBmb3JjZXMgcHJvamVjdHMgdGhhdCBoYXZlIGhhcHBpbHkgYmVlbiB1c2luZyBhCisgICBsZWdhY3kgZW5jb2Rpbmcgd2l0aG91dCBzZXR0aW5nIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gc2V0CisgICB0aGUgY29uZmlndXJhdGlvbiwgYnV0IHRha2VuIHdpdGggb3RoZXIgaW1wcm92ZW1lbnQsIHBsZWFzZQorICAgZXhjdXNlIHVzIGZvciB0aGlzIHZlcnkgbWlub3Igb25lLXRpbWUgaW5jb252ZW5pZW5jZS4KKworCisqIGUtbWFpbGVkIHBhdGNoZXMKKworIC0gU2VlIHRoZSBhYm92ZSBJMThuIHNlY3Rpb24uCisKKyAtIGdpdC1mb3JtYXQtcGF0Y2ggbm93IGVuYWJsZXMgLS1iaW5hcnkgd2l0aG91dCBiZWluZyBhc2tlZC4KKyAgIGdpdC1hbSBkb2VzIF9ub3RfIGRlZmF1bHQgdG8gaXQsIGFzIHNlbmRpbmcgYmluYXJ5IHBhdGNoIHZpYQorICAgZS1tYWlsIGlzIHVudXN1YWwgYW5kIGlzIGhhcmRlciB0byByZXZpZXcgdGhhbiB0ZXh0dWFsCisgICBwYXRjaGVzIGFuZCBpdCBpcyBwcnVkZW50IHRvIHJlcXVpcmUgdGhlIHBlcnNvbiB3aG8gaXMKKyAgIGFwcGx5aW5nIHRoZSBwYXRjaCB0byBleHBsaWNpdGx5IGFzayBmb3IgaXQuCisKKyAtIFRoZSBkZWZhdWx0IHN1ZmZpeCBmb3IgZ2l0LWZvcm1hdC1wYXRjaCBvdXRwdXQgaXMgbm93ICIucGF0Y2giLAorICAgbm90ICIudHh0Ii4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCAtLXN1ZmZpeD0udHh0IG9wdGlvbiwKKyAgIG9yIHNldHRpbmcgdGhlIGNvbmZpZyB2YXJpYWJsZSAiZm9ybWF0LnN1ZmZpeCIgdG8gIi50eHQiLgorCisKKyogRm9yZWlnbiBTQ00gaW50ZXJmYWNlcworCisgLSBnaXQtc3ZuIG5vdyByZXF1aXJlcyB0aGUgUGVybCBTVk46OiBsaWJyYXJpZXMsIHRoZQorICAgY29tbWFuZC1saW5lIGJhY2tlbmQgd2FzIHRvbyBzbG93IGFuZCBsaW1pdGVkLgorCisgLSB0aGUgJ2NvbW1pdCcgc3ViY29tbWFuZCBvZiBnaXQtc3ZuIGhhcyBiZWVuIHJlbmFtZWQgdG8KKyAgICdzZXQtdHJlZScsIGFuZCAnZGNvbW1pdCcgaXMgdGhlIHJlY29tbWVuZGVkIHJlcGxhY2VtZW50IGZvcgorICAgZGF5LXRvLWRheSB3b3JrLgorCisgLSBnaXQgZmFzdC1pbXBvcnQgYmFja2VuZC4KKworCisqIFVzZXIgc3VwcG9ydAorCisgLSBRdWl0ZSBhIGxvdCBvZiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKyAtIEJhc2ggY29tcGxldGlvbiBzY3JpcHRzIGhhdmUgYmVlbiB1cGRhdGVkIGhlYXZpbHkuCisKKyAtIEJldHRlciBlcnJvciBtZXNzYWdlcyBmb3Igb2Z0ZW4gdXNlZCBQb3JjZWxhaW5pc2ggY29tbWFuZHMuCisKKyAtIEdpdCBHVUkuICBUaGlzIGlzIGEgc2ltcGxlIFRrIGJhc2VkIGdyYXBoaWNhbCBpbnRlcmZhY2UgZm9yCisgICBjb21tb24gR2l0IG9wZXJhdGlvbnMuCisKKworKiBTbGlkaW5nIG1tYXAKKworIC0gV2UgdXNlZCB0byBhc3N1bWUgdGhhdCB3ZSBjYW4gbW1hcCB0aGUgd2hvbGUgcGFja2ZpbGUgd2hpbGUKKyAgIGluIHVzZSwgYnV0IHdpdGggYSBsYXJnZSBwcm9qZWN0IHRoaXMgY29uc3VtZXMgaHVnZSB2aXJ0dWFsCisgICBtZW1vcnkgc3BhY2UgYW5kIHRydWx5IGh1Z2Ugb25lcyB3b3VsZCBub3QgZml0IGluIHRoZQorICAgdXNlcmxhbmQgYWRkcmVzcyBzcGFjZSBvbiAzMi1iaXQgcGxhdGZvcm1zLiAgV2Ugbm93IG1tYXAgaHVnZQorICAgcGFja2ZpbGUgaW4gcGllY2VzIHRvIGF2b2lkIHRoaXMgcHJvYmxlbS4KKworCisqIFNoYWxsb3cgY2xvbmVzCisKKyAtIFRoZXJlIGlzIGEgcGFydGlhbCBzdXBwb3J0IGZvciAnc2hhbGxvdycgcmVwb3NpdG9yaWVzIHRoYXQKKyAgIGtlZXBzIG9ubHkgcmVjZW50IGhpc3RvcnkuICBBICdzaGFsbG93IGNsb25lJyBpcyBjcmVhdGVkIGJ5CisgICBzcGVjaWZ5aW5nIGhvdyBkZWVwIHRoYXQgdHJ1bmNhdGVkIGhpc3Rvcnkgc2hvdWxkIGJlCisgICAoZS5nLiAiZ2l0IGNsb25lIC0tZGVwdGggNSBnaXQ6Ly9zb21lLndoZXJlL3JlcG8uZ2l0IikuCisKKyAgIEN1cnJlbnRseSBhIHNoYWxsb3cgcmVwb3NpdG9yeSBoYXMgbnVtYmVyIG9mIGxpbWl0YXRpb25zOgorCisgICAtIENsb25pbmcgYW5kIGZldGNoaW5nIF9mcm9tXyBhIHNoYWxsb3cgY2xvbmUgYXJlIG5vdAorICAgICBzdXBwb3J0ZWQgKG5vciB0ZXN0ZWQgLS0gc28gdGhleSBtaWdodCB3b3JrIGJ5IGFjY2lkZW50IGJ1dAorICAgICB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgdG8pLgorCisgICAtIFB1c2hpbmcgZnJvbSBub3IgaW50byBhIHNoYWxsb3cgY2xvbmUgYXJlIG5vdCBleHBlY3RlZCB0bworICAgICB3b3JrLgorCisgICAtIE1lcmdpbmcgaW5zaWRlIGEgc2hhbGxvdyByZXBvc2l0b3J5IHdvdWxkIHdvcmsgYXMgbG9uZyBhcyBhCisgICAgIG1lcmdlIGJhc2UgaXMgZm91bmQgaW4gdGhlIHJlY2VudCBoaXN0b3J5LCBidXQgb3RoZXJ3aXNlIGl0CisgICAgIHdpbGwgYmUgbGlrZSBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMgYW5kIG1heSByZXN1bHQgaW4KKyAgICAgaHVnZSBjb25mbGljdHMuCisKKyAgIGJ1dCB0aGlzIHdvdWxkIGJlIG1vcmUgdGhhbiBhZGVxdWF0ZSBmb3IgcGVvcGxlIHdobyB3YW50IHRvCisgICBsb29rIGF0IG5lYXIgdGhlIHRpcCBvZiBhIGJpZyBwcm9qZWN0IHdpdGggYSBkZWVwIGhpc3RvcnkgYW5kCisgICBzZW5kIHBhdGNoZXMgaW4gZS1tYWlsIGZvcm1hdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDcxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjEudHh0CkBAIC0wLDAgKzEsNjUgQEAKK0dJVCB2MS41LjEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisgIC0gVGhlIC0tbGVmdC1yaWdodCBvcHRpb24gb2YgcmV2LWxpc3QgYW5kIGZyaWVuZHMgaXMgZG9jdW1lbnRlZC4KKworICAtIFRoZSBkb2N1bWVudGF0aW9uIGZvciBjdnNpbXBvcnQgaGFzIGJlZW4gbWFqb3JseSBpbXByb3ZlZC4KKworICAtICJnaXQtc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nIiB3YXMgZG9jdW1lbnRlZC4KKworKiBCdWdmaXhlcworCisgIC0gVGhlIGltcGxlbWVudGF0aW9uIG9mIC1wIG9wdGlvbiBpbiAiZ2l0IGN2c2V4cG9ydGNvbW1pdCIgaGFkCisgICAgdGhlIG1lYW5pbmcgb2YgLUMgKGNvbnRleHQgcmVkdWN0aW9uKSBvcHRpb24gd3JvbmcsIGFuZAorICAgIGxvb3NlbmVkIHRoZSBjb250ZXh0IHJlcXVpcmVtZW50cyB3aGVuIGl0IHdhcyB0b2xkIHRvIGJlCisgICAgc3RyaWN0LgorCisgIC0gImdpdCBjdnNzZXJ2ZXIiIGRpZCBub3QgYmVoYXZlIGxpa2UgdGhlIHJlYWwgY3Zzc2VydmVyIHdoZW4KKyAgICBjbGllbnQgc2lkZSByZW1vdmVkIGEgZmlsZSBmcm9tIHRoZSB3b3JraW5nIHRyZWUgd2l0aG91dAorICAgIGRvaW5nIGFueXRoaW5nIGVsc2Ugb24gdGhlIHBhdGguICBJbiBzdWNoIGEgY2FzZSwgaXQgc2hvdWxkCisgICAgcmVzdG9yZSBpdCBmcm9tIHRoZSBjaGVja2VkIG91dCByZXZpc2lvbi4KKworICAtICJnaXQgZnNjayIgaXNzdWVkIGFuIGFsYXJtaW5nIGVycm9yIG1lc3NhZ2Ugb24gZGV0YWNoZWQKKyAgICBIRUFELiAgSXQgaXMgbm90IGFuIGVycm9yIHNpbmNlIGF0IGxlYXN0IDEuNS4wLgorCisgIC0gImdpdCBzZW5kLWVtYWlsIiBwcm9kdWNlZCBvZiBSZWZlcmVuY2VzIGhlYWRlciBvZiB1bmJvdW5kZWQgbGVuZ3RoOworICAgIGZpeGVkIHRoaXMgd2l0aCBsaW5lLWZvbGRpbmcuCisKKyAgLSAiZ2l0IGFyY2hpdmUiIHRvIGRvd25sb2FkIGZyb20gcmVtb3RlIHNpdGUgc2hvdWxkIG5vdAorICAgIHJlcXVpcmUgeW91IHRvIGJlIGluIGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCBpdCBpbmNvcnJlY3RseQorICAgIGRpZC4KKworICAtICJnaXQgYXBwbHkiIGlnbm9yZWQgLXA8bj4gZm9yICJkaWZmIC0tZ2l0IiBmb3JtYXR0ZWQKKyAgICBwYXRjaGVzLgorCisgIC0gImdpdCByZXJlcmUiIHJlY29yZGVkIGEgY29uZmxpY3QgdGhhdCBoYWQgb25lIHNpZGUgZW1wdHkKKyAgICAodGhlIG90aGVyIHNpZGUgYWRkcykgaW5jb3JyZWN0bHk7IHRoaXMgbWFkZSBtZXJnaW5nIGluIHRoZQorICAgIG90aGVyIGRpcmVjdGlvbiBmYWlsIHRvIHVzZSBwcmV2aW91c2x5IHJlY29yZGVkIHJlc29sdXRpb24uCisKKyAgLSB0NDIwMCB0ZXN0IHdhcyBicm9rZW4gd2hlcmUgIndjIC1sIiBwYWRzIGl0cyBvdXRwdXQgd2l0aAorICAgIHNwYWNlcy4KKworICAtICJnaXQgYnJhbmNoIC1tIG9sZCBuZXciIHRvIHJlbmFtZSBicmFuY2ggZGlkIG5vdCB3b3JrCisgICAgd2l0aG91dCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiAiLmdpdC9jb25maWciLgorCisgIC0gVGhlIHNhbXBsZSBob29rIGZvciBub3RpZmljYXRpb24gZS1tYWlsIHdhcyBtaXNuYW1lZC4KKworICAtIGdpdHdlYiBkaWQgbm90IHNob3cgdHlwZS1jaGFuZ2luZyBwYXRjaCBjb3JyZWN0bHkgaW4gdGhlCisgICAgYmxvYmRpZmYgdmlldy4KKworICAtIGdpdC1zdm4gZGlkIG5vdCBlcnJvciBvdXQgd2l0aCBpbmNvcnJlY3QgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKKyAgLSBnaXQtc3ZuIGZlbGwgaW50byBhbiBpbmZpbml0ZSBsb29wIHdoZW4gaW5zYW5lbHkgbG9uZyBjb21taXQKKyAgICBtZXNzYWdlIHdhcyBmb3VuZC4KKworICAtIGdpdC1zdm4gZGNvbW1pdCBhbmQgcmViYXNlIHdhcyBjb25mdXNlZCBieSBwYXRjaGVzIHRoYXQgd2VyZQorICAgIG1lcmdlZCBmcm9tIGFub3RoZXIgYnJhbmNoIHRoYXQgaXMgbWFuYWdlZCBieSBnaXQtc3ZuLgorCisgIC0gZ2l0LXN2biB1c2VkIHRvIGdldCBjb25mdXNlZCB3aGVuIGdsb2JiaW5nIHJlbW90ZSBicmFuY2gvdGFnCisgICAgc3BlYyAoZS5nLiAiYnJhbmNoZXMgPSBwcm9qL2JyYW5jaGVzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikKKyAgICBpcyB1c2VkIGFuZCB0aGVyZSB3YXMgYSBwbGFpbiBmaWxlIHRoYXQgbWF0Y2hlZCB0aGUgZ2xvYi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODQ1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjIudHh0CkBAIC0wLDAgKzEsNTAgQEAKK0dJVCB2MS41LjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gImdpdCBjbG9uZSIgb3ZlciBodHRwIGZyb20gYSByZXBvc2l0b3J5IHRoYXQgaGFzIGxvc3QgdGhlCisgICAgbG9vc2UgcmVmcyBieSBydW5uaW5nICJnaXQgcGFjay1yZWZzIiB3ZXJlIGJyb2tlbiAoYSBjb2RlIHRvCisgICAgZGVhbCB3aXRoIHRoaXMgd2FzIGFkZGVkIHRvICJnaXQgZmV0Y2giIGluIHYxLjUuMCwgYnV0IGl0CisgICAgd2FzIG1pc3NpbmcgZnJvbSAiZ2l0IGNsb25lIikuCisKKyAgLSAiZ2l0IGRpZmYgYS8gYi8iIGluY29ycmVjdGx5IGZlbGwgaW4gImRpZmYgYmV0d2VlbiB0d28KKyAgICBmaWxlc3lzdGVtIG9iamVjdHMiIGNvZGVwYXRoLCB3aGVuIHRoZSB1c2VyIG1vc3QgbGlrZWx5CisgICAgd2FudGVkIHRvIGxpbWl0IHRoZSBleHRlbnQgb2Ygb3V0cHV0IHRvIHR3byB0cmFja2VkCisgICAgZGlyZWN0b3JpZXMuCisKKyAgLSBnaXQtcXVpbHRpbXBvcnQgaGFkIHRoZSBzYW1lIGJ1ZyBhcyB3ZSBmaXhlZCBmb3IKKyAgICBnaXQtYXBwbHltYm94IGluIHYxLjUuMS4xIC0tIGl0IGdhdmUgYW4gYWxhcm1pbmcgImRpZCBub3QKKyAgICBoYXZlIGFueSBwYXRjaCIgbWVzc2FnZSAoYnV0IGRpZCBub3QgYWN0dWFsbHkgZmFpbCBhbmQgd2FzCisgICAgaGFybWxlc3MpLgorCisgIC0gdmFyaW91cyBnaXQtc3ZuIGZpeGVzLgorCisgIC0gU2FtcGxlIHVwZGF0ZSBob29rIGluY29ycmVjdGx5IGFsd2F5cyByZWZ1c2VkIHJlcXVlc3RzIHRvCisgICAgZGVsZXRlIGJyYW5jaGVzIHRocm91Z2ggcHVzaC4KKworICAtIGdpdC1ibGFtZSBvbiBhIHZlcnkgbG9uZyB3b3JraW5nIHRyZWUgcGF0aCBoYWQgYnVmZmVyCisgICAgb3ZlcnJ1biBwcm9ibGVtLgorCisgIC0gZ2l0LWFwcGx5IGRpZCBub3QgbGlrZSB0byBiZSBmZWQgdHdvIHBhdGNoZXMgaW4gYSByb3cgdGhhdCBjcmVhdGVkCisgICAgYW5kIHRoZW4gbW9kaWZpZWQgdGhlIHNhbWUgZmlsZS4KKworICAtIGdpdC1zdm4gd2FzIGNvbmZ1c2VkIHdoZW4gYSBub24tcHJvamVjdCB3YXMgc3RvcmVkIGRpcmVjdGx5IHVuZGVyCisgICAgdHJ1bmsvLCBicmFuY2hlcy8gYW5kIHRhZ3MvLgorCisgIC0gZ2l0LXN2biB3YW50cyB0aGUgRXJyb3IucG0gbW9kdWxlIHRoYXQgd2FzIGF0IGxlYXN0IGFzIG5ldworICAgIGFzIHdoYXQgd2Ugc2hpcCBhcyBwYXJ0IG9mIGdpdDsgaW5zdGFsbCBvdXJzIGluIG91ciBwcml2YXRlCisgICAgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIGlmIHRoZSBvbmUgb24gdGhlIHN5c3RlbSBpcyBvbGRlci4KKworICAtIEFuIGVhcmxpZXIgdXBkYXRlIHRvIGNvbW1hbmQgbGluZSBpbnRlZ2VyIHBhcmFtZXRlciBwYXJzZXIgd2FzCisgICAgYm90Y2hlZCBhbmQgbWFkZSAndXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvJyBjb21wbGV0ZWx5IHVzZWxlc3MuCisKKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworICAtIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGZyb20gSi4gQnJ1Y2UgRmllbGRzLCBGcmFuaworICAgIExpY2h0ZW5oZWxkLCBBbGV4IFJpZXNlbiBhbmQgb3RoZXJzLiAgQW5kcmV3IFJ1ZGVyIHN0YXJ0ZWQgYQorICAgIHdhciBvbiB1bmRvY3VtZW50ZWQgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjQwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjMudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0dJVCB2MS41LjEuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LWFkZCB0cmllZCB0byBvcHRpbWl6ZSBieSBmaW5kaW5nIGNvbW1vbiBsZWFkaW5nCisgICAgZGlyZWN0b3JpZXMgYWNyb3NzIGl0cyBhcmd1bWVudHMgYnV0IGJvdGNoZWQsIGNhdXNpbmcgdmVyeQorICAgIGNvbmZ1c2VkIGJlaGF2aW91ci4KKworICAtIHVub2ZmaWNpYWwgcnBtLnNwZWMgZmlsZSBzaGlwcGVkIHdpdGggZ2l0IHdhcyBsZXR0aW5nCisgICAgRVRDX0dJVENPTkZJRyBzZXQgdG8gL3Vzci9ldGMvZ2l0Y29uZmlnLiAgVHdlYWsgdGhlIG9mZmljaWFsCisgICAgTWFrZWZpbGUgdG8gbWFrZSBpdCBoYXJkZXIgZm9yIGRpc3RybyBwZW9wbGUgdG8gbWFrZSB0aGUKKyAgICBzYW1lIG1pc3Rha2UsIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIHRvIC9ldGMvZ2l0Y29uZmlnIGlmCisgICAgcHJlZml4IGlzIHNldCB0byAvdXNyLgorCisgIC0gZ2l0LXN2biBpbmNvbnNpc3RlbnRseSBzdHJpcHBlZCBhd2F5IHVzZXJuYW1lIGZyb20gdGhlIFVSTAorICAgIG9ubHkgd2hlbiBzdm5zeW5jX3Byb3BzIHdhcyBpbiB1c2UuCisKKyAgLSBnaXQtc3ZuIGdvdCBjb25mdXNlZCB3aGVuIGhhbmRsaW5nIHN5bWxpbmtzIG9uIE1hYyBPUy4KKworICAtIGdpdC1zZW5kLWVtYWlsIHdhcyBub3QgcXVvdGluZyByZWNpcGllbnQgbmFtZXMgdGhhdCBoYXZlCisgICAgcGVyaW9kICcuJyBpbiB0aGVtLiAgQWxzbyBpdCBkaWQgbm90IGFsbG93IG92ZXJyaWRpbmcKKyAgICBlbnZlbG9wZSBzZW5kZXIsIHdoaWNoIG1hZGUgaXQgaW1wb3NzaWJsZSB0byBzZW5kIHBhdGNoZXMgdG8KKyAgICBjZXJ0YWluIHN1YnNjcmliZXItb25seSBsaXN0cy4KKworICAtIGJ1aWx0LWluIHdyaXRlX3RyZWUoKSByb3V0aW5lIGhhZCBhIHNlcXVlbmNlIHRoYXQgcmVuYW1lZCBhCisgICAgZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4sIHdoaWNoIHNvbWUgc3lzdGVtcyBkaWQgbm90IGxpa2UuCisKKyAgLSB3aGVuIG1lbW9yeSBpcyB2ZXJ5IHRpZ2h0LCBzbGlkaW5nIG1tYXAgY29kZSB0byByZWFkCisgICAgcGFja2ZpbGVzIGluY29ycmVjdGx5IGNsb3NlZCB0aGUgZmQgdGhhdCB3YXMgc3RpbGwgYmVpbmcKKyAgICB1c2VkIHRvIHJlYWQgdGhlIHBhY2suCisKKyAgLSBpbXBvcnQtdGFycyBjb250cmlidXRlZCBmcm9udC1lbmQgZm9yIGZhc3RpbXBvcnQgd2FzIHBhc3NpbmcKKyAgICB3cm9uZyBkaXJlY3RvcnkgbW9kZXMgd2l0aG91dCBjaGVja2luZy4KKworICAtIGdpdC1mYXN0aW1wb3J0IHRydXN0ZWQgaXRzIGlucHV0IHRvbyBtdWNoIGFuZCBhbGxvd2VkIHRvCisgICAgY3JlYXRlIGNvcnJ1cHQgdHJlZSBvYmplY3RzIHdpdGggZW50cmllcyB3aXRob3V0IGEgbmFtZS4KKworICAtIGdpdC1mZXRjaCBuZWVkbGVzc2x5IGJhcmZlZCB3aGVuIHRvbyBsb25nIHJlZmxvZyBhY3Rpb24KKyAgICBkZXNjcmlwdGlvbiB3YXMgZ2l2ZW4gYnkgdGhlIGNhbGxlci4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMmY2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjQudHh0CkBAIC0wLDAgKzEsMzAgQEAKK0dJVCB2MS41LjEuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gImdpdC1odHRwLWZldGNoIiBkaWQgbm90IHdvcmsgYXJvdW5kIGEgYnVnIGluIGxpYmN1cmwKKyAgICBlYXJsaWVyIHRoYW4gNy4xNiAoY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCkgd2FzIGJyb2tlbikuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgaGFuZGxlcyBhIGZpbGUgdGhhdCB3YXMgb25jZSByZW1vdmVkIGFuZAorICAgIHRoZW4gYWRkZWQgYWdhaW4gY29ycmVjdGx5LgorCisgIC0gaW1wb3J0LXRhcnMgc2NyaXB0IChpbiBjb250cmliLykgaGFuZGxlcyBHTlUgdGFyIGFyY2hpdmVzCisgICAgdGhhdCBjb250YWluIHBhdGhuYW1lcyBsb25nZXIgdGhhbiAxMDAgYnl0ZXMgKGxvbmctbGluaworICAgIGV4dGVuc2lvbikgY29ycmVjdGx5LgorCisgIC0geGRlbHRhIHRlc3QgcHJvZ3JhbSBkaWQgbm90IGJ1aWxkIGNvcnJlY3RseS4KKworICAtIGdpdHdlYiBzb21ldGltZXMgdHJpZWQgaW5jb3JyZWN0bHkgdG8gYXBwbHkgZnVuY3Rpb24gdG8KKyAgICBkZWNvZGUgdXRmOCB0d2ljZSwgcmVzdWx0aW5nIGluIGNvcnJ1cHQgb3V0cHV0LgorCisgIC0gImdpdCBibGFtZSAtQyIgbWlzaGFuZGxlZCB0ZXh0IGF0IHRoZSBlbmQgb2YgYSBncm91cCBvZgorICAgIGxpbmVzLgorCisgIC0gImdpdCBsb2cvcmV2LWxpc3QgLS1ib3VuZGFyeSIgZGlkIG5vdCBwcm9kdWNlIG91dHB1dAorICAgIGNvcnJlY3RseSB3aXRob3V0IC0tbGVmdC1yaWdodCBvcHRpb24uCisKKyAgLSBNYW55IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYWI4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjUudHh0CkBAIC0wLDAgKzEsNDIgQEAKK0dJVCB2MS41LjEuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LXNlbmQtZW1haWwgZGlkIG5vdCB1bmRlcnN0YW5kIGFsaWFzZXMgZmlsZSBmb3IgbXV0dCwgd2hpY2gKKyAgICBhbGxvd3MgbGVhZGluZyB3aGl0ZXNwYWNlcy4KKworICAtIGdpdC1mb3JtYXQtcGF0Y2ggZW1pdHRlZCBDb250ZW50LVR5cGUgYW5kIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcKKyAgICBoZWFkZXJzIGZvciBub24gQVNDSUkgY29udGVudHMsIGJ1dCBmYWlsZWQgdG8gYWRkIE1JTUUtVmVyc2lvbi4KKworICAtIGdpdC1uYW1lLXJldiBoYWQgYSBidWZmZXIgb3ZlcnJ1biB3aXRoIGEgZGVlcCBoaXN0b3J5LgorCisgIC0gY29udHJpYnV0ZWQgc2NyaXB0IGltcG9ydC10YXJzIGRpZCBub3QgZ2V0IHRoZSBkaXJlY3RvcnkgaW4KKyAgICB0YXIgYXJjaGl2ZXMgaW50ZXJwcmV0ZWQgY29ycmVjdGx5LgorCisgIC0gZ2l0LXN2biB3YXMgcmVwb3J0ZWQgdG8gc2VnZmF1bHQgZm9yIG1hbnkgcGVvcGxlIG9uIGxpc3QgYW5kCisgICAgI2dpdDsgaG9wZWZ1bGx5IHRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAgLSAiZ2l0LXN2biBjbG9uZSIgZG9lcyBub3QgdHJ5IHRvIG1pbmltaXplIHRoZSBVUkwKKyAgICAoaS5lLiBjb25uZWN0IHRvIGhpZ2hlciBsZXZlbCBoaWVyYXJjaHkpIGJ5IGRlZmF1bHQsIGFzIHRoaXMKKyAgICBjYW4gcHJldmVudCBjbG9uZSB0byBmYWlsIGlmIG9ubHkgcGFydCBvZiB0aGUgcmVwb3NpdG9yeQorICAgIChlLmcuICd0cnVuaycpIGlzIG9wZW4gdG8gcHVibGljLgorCisgIC0gImdpdCBjaGVja291dCBicmFuY2heMCIgZGlkIG5vdCBkZXRhY2ggdGhlIGhlYWQgd2hlbiB5b3UgYXJlCisgICAgYWxyZWFkeSBvbiAnYnJhbmNoJzsgYmFja3BvcnRlZCB0aGUgZml4IGZyb20gdGhlICdtYXN0ZXInLgorCisgIC0gImdpdC1jb25maWcgc2VjdGlvbi52YXIiIGRpZCBub3QgY29ycmVjdGx5IHdvcmsgd2hlbgorICAgIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBoYWQgYm90aCBbc2VjdGlvbl0gYW5kIFtzZWN0aW9uICJuYW1lIl0KKyAgICBuZXh0IHRvIGVhY2ggb3RoZXIuCisKKyAgLSAiZ2l0IGNsb25lIC4uL290aGVyLWRpcmVjdG9yeSIgd2FzIGZvb2xlZCBpZiB0aGUgY3VycmVudAorICAgIGRpcmVjdG9yeSAkUFdEIHBvaW50cyBhdCBpcyBhIHN5bWJvbGljIGxpbmsuCisKKyAgLSAoYnVpbGQpIHRyZWVfZW50cnlfZXh0cmFjdCgpIGZ1bmN0aW9uIHdhcyBib3RoIHN0YXRpYyBpbmxpbmUKKyAgICBhbmQgZXh0ZXJuLCB3aGljaCBjYXVzZWQgdHJvdWJsZSBjb21waWxpbmcgd2l0aCBGb3J0ZTEyCisgICAgY29tcGlsZXJzIG9uIFN1bi4KKworICAtIE1hbnkgbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmM2FjMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNi50eHQKQEAgLTAsMCArMSw0NSBAQAorR0lUIHYxLjUuMS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMS40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQtc2VuZC1lbWFpbCBkaWQgbm90IHVuZGVyc3RhbmQgYWxpYXNlcyBmaWxlIGZvciBtdXR0LCB3aGljaAorICAgIGFsbG93cyBsZWFkaW5nIHdoaXRlc3BhY2VzLgorCisgIC0gZ2l0LWZvcm1hdC1wYXRjaCBlbWl0dGVkIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZworICAgIGhlYWRlcnMgZm9yIG5vbiBBU0NJSSBjb250ZW50cywgYnV0IGZhaWxlZCB0byBhZGQgTUlNRS1WZXJzaW9uLgorCisgIC0gZ2l0LW5hbWUtcmV2IGhhZCBhIGJ1ZmZlciBvdmVycnVuIHdpdGggYSBkZWVwIGhpc3RvcnkuCisKKyAgLSBjb250cmlidXRlZCBzY3JpcHQgaW1wb3J0LXRhcnMgZGlkIG5vdCBnZXQgdGhlIGRpcmVjdG9yeSBpbgorICAgIHRhciBhcmNoaXZlcyBpbnRlcnByZXRlZCBjb3JyZWN0bHkuCisKKyAgLSBnaXQtc3ZuIHdhcyByZXBvcnRlZCB0byBzZWdmYXVsdCBmb3IgbWFueSBwZW9wbGUgb24gbGlzdCBhbmQKKyAgICAjZ2l0OyBob3BlZnVsbHkgdGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICAtIGdpdC1zdm4gYWxzbyBoYWQgYSBidWcgdG8gY3Jhc2ggc3Zuc2VydmUgYnkgc2VuZGluZyBhIGJhZAorICAgIHNlcXVlbmNlIG9mIHJlcXVlc3RzLgorCisgIC0gImdpdC1zdm4gY2xvbmUiIGRvZXMgbm90IHRyeSB0byBtaW5pbWl6ZSB0aGUgVVJMCisgICAgKGkuZS4gY29ubmVjdCB0byBoaWdoZXIgbGV2ZWwgaGllcmFyY2h5KSBieSBkZWZhdWx0LCBhcyB0aGlzCisgICAgY2FuIHByZXZlbnQgY2xvbmUgdG8gZmFpbCBpZiBvbmx5IHBhcnQgb2YgdGhlIHJlcG9zaXRvcnkKKyAgICAoZS5nLiAndHJ1bmsnKSBpcyBvcGVuIHRvIHB1YmxpYy4KKworICAtICJnaXQgY2hlY2tvdXQgYnJhbmNoXjAiIGRpZCBub3QgZGV0YWNoIHRoZSBoZWFkIHdoZW4geW91IGFyZQorICAgIGFscmVhZHkgb24gJ2JyYW5jaCc7IGJhY2twb3J0ZWQgdGhlIGZpeCBmcm9tIHRoZSAnbWFzdGVyJy4KKworICAtICJnaXQtY29uZmlnIHNlY3Rpb24udmFyIiBkaWQgbm90IGNvcnJlY3RseSB3b3JrIHdoZW4KKyAgICBleGlzdGluZyBjb25maWd1cmF0aW9uIGZpbGUgaGFkIGJvdGggW3NlY3Rpb25dIGFuZCBbc2VjdGlvbiAibmFtZSJdCisgICAgbmV4dCB0byBlYWNoIG90aGVyLgorCisgIC0gImdpdCBjbG9uZSAuLi9vdGhlci1kaXJlY3RvcnkiIHdhcyBmb29sZWQgaWYgdGhlIGN1cnJlbnQKKyAgICBkaXJlY3RvcnkgJFBXRCBwb2ludHMgYXQgaXMgYSBzeW1ib2xpYyBsaW5rLgorCisgIC0gKGJ1aWxkKSB0cmVlX2VudHJ5X2V4dHJhY3QoKSBmdW5jdGlvbiB3YXMgYm90aCBzdGF0aWMgaW5saW5lCisgICAgYW5kIGV4dGVybiwgd2hpY2ggY2F1c2VkIHRyb3VibGUgY29tcGlsaW5nIHdpdGggRm9ydGUxMgorICAgIGNvbXBpbGVycyBvbiBTdW4uCisKKyAgLSBNYW55IG1hbnkgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlZDM2NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEudHh0CkBAIC0wLDAgKzEsMzcxIEBACitHSVQgdjEuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBEZXByZWNhdGVkIGNvbW1hbmRzIGFuZCBvcHRpb25zLgorCisgIC0gZ2l0LWRpZmYtc3RhZ2VzIGFuZCBnaXQtcmVzb2x2ZSBoYXZlIGJlZW4gcmVtb3ZlZC4KKworKiBOZXcgY29tbWFuZHMgYW5kIG9wdGlvbnMuCisKKyAgLSAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgdGFrZSAtLXJldmVyc2UsIHdoaWNoIGluc3RydWN0cyB0aGVtCisgICAgdG8gZ2l2ZSB0aGVpciBvdXRwdXQgaW4gdGhlIG9yZGVyIG9wcG9zaXRlIGZyb20gdGhlaXIgdXN1YWwuCisgICAgVGhleSB0eXBpY2FsbHkgb3V0cHV0IGZyb20gbmV3IHRvIG9sZCwgYnV0IHdpdGggdGhpcyBvcHRpb24KKyAgICB0aGVpciBvdXRwdXQgd291bGQgcmVhZCBmcm9tIG9sZCB0byBuZXcuICAiZ2l0IHNob3J0bG9nIgorICAgIHVzdWFsbHkgbGlzdHMgb2xkZXIgY29tbWl0cyBmaXJzdCwgYnV0IHdpdGggdGhpcyBvcHRpb24sCisgICAgdGhleSBhcmUgc2hvd24gZnJvbSBuZXcgdG8gb2xkLgorCisgIC0gImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OjxzdHJpbmc+IiB0byBhbGxvdyBtb3JlIGZsZXhpYmxlCisgICAgY3VzdG9tIGxvZyBvdXRwdXQuCisKKyAgLSAiZ2l0IGRpZmYiIGxlYXJuZWQgLS1pZ25vcmUtc3BhY2UtYXQtZW9sLiAgVGhpcyBpcyBhIHdlYWtlcgorICAgIGZvcm0gb2YgLS1pZ25vcmUtc3BhY2UtY2hhbmdlLgorCisgIC0gImdpdCBkaWZmIC0tbm8taW5kZXggcGF0aEEgcGF0aEIiIGNhbiBiZSB1c2VkIGFzIGRpZmYKKyAgICByZXBsYWNlbWVudCB3aXRoIGdpdCBzcGVjaWZpYyBlbmhhbmNlbWVudHMuCisKKyAgLSAiZ2l0IGRpZmYgLS1uby1pbmRleCIgY2FuIHJlYWQgZnJvbSAnLScgKHN0YW5kYXJkIGlucHV0KS4KKworICAtICJnaXQgZGlmZiIgYWxzbyBsZWFybmVkIC0tZXhpdC1jb2RlIHRvIGV4aXQgd2l0aCBub24temVybworICAgIHN0YXR1cyB3aGVuIGl0IGZvdW5kIGRpZmZlcmVuY2VzLiAgSW4gdGhlIGZ1dHVyZSB3ZSBtaWdodAorICAgIHdhbnQgdG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGF0IHdvdWxkIGJlIGEgcmF0aGVyIGJpZworICAgIGJhY2t3YXJkIGluY29tcGF0aWJsZSBjaGFuZ2U7IGl0IHdpbGwgc3RheSBhcyBhbiBvcHRpb24gZm9yCisgICAgbm93LgorCisgIC0gImdpdCBkaWZmIC0tcXVpZXQiIGlzIC0tZXhpdC1jb2RlIHdpdGggb3V0cHV0IHR1cm5lZCBvZmYsCisgICAgbWVhbnQgZm9yIHNjcmlwdGVkIHVzZSB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBpcyBhbnkKKyAgICB0cmVlLWxldmVsIGRpZmZlcmVuY2UuCisKKyAgLSBUZXh0dWFsIHBhdGNoIGdlbmVyYXRpb24gd2l0aCAiZ2l0IGRpZmYiIHdpdGhvdXQgLXcvLWIKKyAgICBvcHRpb24gaGFzIGJlZW4gc2lnbmlmaWNhbnRseSBvcHRpbWl6ZWQuICAiZ2l0IGJsYW1lIiBnb3QKKyAgICBmYXN0ZXIgYmVjYXVzZSBvZiB0aGUgc2FtZSBjaGFuZ2UuCisKKyAgLSAiZ2l0IGxvZyIgYW5kICJnaXQgcmV2LWxpc3QiIGhhcyBiZWVuIG9wdGltaXplZAorICAgIHNpZ25pZmljYW50bHkgd2hlbiB0aGV5IGFyZSB1c2VkIHdpdGggcGF0aHNwZWNzLgorCisgIC0gImdpdCBicmFuY2ggLS10cmFjayIgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIGNvbmZpZ3VyYXRpb24KKyAgICB2YXJpYWJsZXMgdG8gaGVscCBpdCBlYXNpZXIgdG8gYmFzZSB5b3VyIHdvcmsgb24gYnJhbmNoZXMKKyAgICB5b3UgdHJhY2sgZnJvbSBhIHJlbW90ZSBzaXRlLgorCisgIC0gImdpdCBmb3JtYXQtcGF0Y2ggLS1hdHRhY2giIG5vdyBlbWl0cyBhdHRhY2htZW50cy4gIFVzZQorICAgIC0taW5saW5lIHRvIGdldCBhbiBpbmxpbmVkIG11bHRpcGFydC9taXhlZC4KKworICAtICJnaXQgbmFtZS1yZXYiIGxlYXJuZWQgLS1yZWZzPTxwYXR0ZXJuPiwgdG8gbGltaXQgdGhlIHRhZ3MKKyAgICB1c2VkIGZvciBuYW1pbmcgdGhlIGdpdmVuIHJldmlzaW9ucyBvbmx5IHRvIHRoZSBvbmVzCisgICAgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4uCisKKyAgLSAiZ2l0IHJlbW90ZSB1cGRhdGUiIGlzIHRvIHJ1biAiZ2l0IGZldGNoIiBmb3IgZGVmaW5lZCByZW1vdGVzCisgICAgdG8gdXBkYXRlIHRyYWNraW5nIGJyYW5jaGVzLgorCisgIC0gImdpdCBjdnNpbXBvcnQiIGNhbiBub3cgdGFrZSAnLWQnIHRvIHRhbGsgd2l0aCBhIENWUworICAgIHJlcG9zaXRvcnkgZGlmZmVyZW50IGZyb20gd2hhdCBhcmUgcmVjb3JkZWQgaW4gQ1ZTL1Jvb3QKKyAgICAob3ZlcnJpZGluZyBpdCB3aXRoIGVudmlyb25tZW50IENWU1JPT1QgZG9lcyBub3Qgd29yaykuCisKKyAgLSAiZ2l0IGJ1bmRsZSIgY2FuIGhlbHAgc25lYWtlci1uZXR0aW5nIHlvdXIgY2hhbmdlcyBiZXR3ZWVuCisgICAgcmVwb3NpdG9yaWVzLgorCisgIC0gImdpdCBtZXJnZXRvb2wiIGNhbiBoZWxwIDMtd2F5IGZpbGUtbGV2ZWwgY29uZmxpY3QKKyAgICByZXNvbHV0aW9uIHdpdGggeW91ciBmYXZvcml0ZSBncmFwaGljYWwgbWVyZ2UgdG9vbHMuCisKKyAgLSBBIG5ldyBjb25maWd1cmF0aW9uICJjb3JlLnN5bWxpbmtzIiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlCisgICAgc3ltbGlua3Mgb24gZmlsZXN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGVtOyB0aGV5IGFyZQorICAgIGNoZWNrZWQgb3V0IGFzIHJlZ3VsYXIgZmlsZXMgaW5zdGVhZC4KKworICAtIFlvdSBjYW4gbmFtZSBhIGNvbW1pdCBvYmplY3Qgd2l0aCBpdHMgZmlyc3QgbGluZSBvZiB0aGUKKyAgICBtZXNzYWdlLiAgVGhlIHN5bnRheCB0byB1c2UgaXMgJzovbWVzc2FnZSB0ZXh0Jy4gIEUuZy4KKworICAgICQgZ2l0IHNob3cgIjovb2JqZWN0IG5hbWU6IGludHJvZHVjZSAnOi88b25lbGluZSBwcmVmaXg+JyBub3RhdGlvbiIKKworICAgIG1lYW5zIHRoZSBzYW1lIHRoaW5nIGFzOgorCisgICAgJCBnaXQgc2hvdyAyOGE0ZDk0MDQ0MzgwNjQxMmVmZmEyNDZlY2M3NzY4YTIxNTUzZWM3CisKKyAgLSAiZ2l0IGJpc2VjdCIgbGVhcm5lZCBhIG5ldyBjb21tYW5kICJydW4iIHRoYXQgdGFrZXMgYSBzY3JpcHQKKyAgICB0byBydW4gYWZ0ZXIgZWFjaCByZXZpc2lvbiBpcyBjaGVja2VkIG91dCB0byBkZXRlcm1pbmUgaWYgaXQKKyAgICBpcyBnb29kIG9yIGJhZCwgdG8gYXV0b21hdGUgdGhlIGJpc2VjdGlvbiBwcm9jZXNzLgorCisgIC0gImdpdCBsb2ciIGZhbWlseSBsZWFybmVkIGEgbmV3IHRyYXZlcnNhbCBvcHRpb24gLS1maXJzdC1wYXJlbnQsCisgICAgd2hpY2ggZG9lcyB3aGF0IHRoZSBuYW1lIHN1Z2dlc3RzLgorCisKKyogVXBkYXRlZCBiZWhhdmlvciBvZiBleGlzdGluZyBjb21tYW5kcy4KKworICAtICJnaXQtbWVyZ2UtcmVjdXJzaXZlIiB1c2VkIHRvIGJhcmYgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuCisgICAgb25lIGNvbW1vbiBhbmNlc3RvcnMgZm9yIHRoZSBtZXJnZSwgYW5kIG1lcmdpbmcgdGhlbSBoYWQgYQorICAgIHJlbmFtZS9yZW5hbWUgY29uZmxpY3QuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgIC0gImdpdCBmc2NrIiBkb2VzIG5vdCBiYXJmIG9uIGNvcnJ1cHQgbG9vc2Ugb2JqZWN0cy4KKworICAtICJnaXQgcm0iIGRvZXMgbm90IHJlbW92ZSBuZXdseSBhZGRlZCBmaWxlcyB3aXRob3V0IC1mLgorCisgIC0gImdpdCBhcmNoaW1wb3J0IiBhbGxvd3MgcmVtYXBwaW5nIHdoZW4gY29taW5nIHVwIHdpdGggZ2l0CisgICAgYnJhbmNoIG5hbWVzIGZyb20gYXJjaCBuYW1lcy4KKworICAtIGdpdC1zdm4gZ290IGFsbW9zdCBhIHJld3JpdGUuCisKKyAgLSBjb3JlLmF1dG9jcmxmIGNvbmZpZ3VyYXRpb24sIHdoZW4gc2V0IHRvICd0cnVlJywgbWFrZXMgZ2l0CisgICAgdG8gY29udmVydCBDUkxGIGF0IHRoZSBlbmQgb2YgbGluZXMgaW4gdGV4dCBmaWxlcyB0byBMRiB3aGVuCisgICAgcmVhZGluZyBmcm9tIHRoZSBmaWxlc3lzdGVtLCBhbmQgY29udmVydCBpbiByZXZlcnNlIHdoZW4KKyAgICB3cml0aW5nIHRvIHRoZSBmaWxlc3lzdGVtLiAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8KKyAgICAnaW5wdXQnLCBpbiB3aGljaCBjYXNlIHRoZSBjb252ZXJzaW9uIGhhcHBlbnMgb25seSB3aGlsZQorICAgIHJlYWRpbmcgZnJvbSB0aGUgZmlsZXN5c3RlbSBidXQgZmlsZXMgYXJlIHdyaXR0ZW4gb3V0IHdpdGgKKyAgICBMRiBhdCB0aGUgZW5kIG9mIGxpbmVzLiAgQ3VycmVudGx5LCB3aGljaCBwYXRocyB0byBjb25zaWRlcgorICAgICd0ZXh0JyAoaS5lLiBiZSBzdWJqZWN0ZWQgdG8gdGhlIGF1dG9jcmxmIG1lY2hhbmlzbSkgaXMKKyAgICBkZWNpZGVkIHB1cmVseSBiYXNlZCBvbiB0aGUgY29udGVudHMsIGJ1dCB0aGUgcGxhbiBpcyB0bworICAgIGFsbG93IHVzZXJzIHRvIGV4cGxpY2l0bHkgb3ZlcnJpZGUgdGhpcyBoZXVyaXN0aWMgYmFzZWQgb24KKyAgICBwYXRocy4KKworICAtIFRoZSBiZWhhdmlvciBvZiAnZ2l0LWFwcGx5Jywgd2hlbiBydW4gaW4gYSBzdWJkaXJlY3RvcnksCisgICAgd2l0aG91dCAtLWluZGV4IG5vciAtLWNhY2hlZCB3ZXJlIGluY29uc2lzdGVudCB3aXRoIHRoYXQgb2YKKyAgICB0aGUgY29tbWFuZCB3aXRoIHRoZXNlIG9wdGlvbnMuICBUaGlzIHdhcyBmaXhlZCB0byBtYXRjaCB0aGUKKyAgICBiZWhhdmlvciB3aXRoIC0taW5kZXguICBBIHBhdGNoIHRoYXQgaXMgbWVhbnQgdG8gYmUgYXBwbGllZAorICAgIHdpdGggLXAxIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSBwcm9qZWN0IHRyZWUgY2FuIGJlCisgICAgYXBwbGllZCB3aXRoIGFueSBjdXN0b20gLXA8bj4gb3B0aW9uLiAgQSBwYXRjaCB0aGF0IGlzIG5vdAorICAgIHJlbGF0aXZlIHRvIHRoZSB0b3BsZXZlbCBuZWVkcyB0byBiZSBhcHBsaWVkIHdpdGggLXA8bj4KKyAgICBvcHRpb24gd2l0aCBvciB3aXRob3V0IC0taW5kZXggKG9yIC0tY2FjaGVkKS4KKworICAtICJnaXQgZGlmZiIgb3V0cHV0cyBhIHRyYWlsaW5nIEhUIHdoZW4gcGF0aG5hbWVzIGhhdmUgZW1iZWRkZWQKKyAgICBTUCBvbiArKysvLS0tIGhlYWRlciBsaW5lcywgaW4gb3JkZXIgdG8gaGVscCAiR05VIHBhdGNoIiB0bworICAgIHBhcnNlIGl0cyBvdXRwdXQuICAiZ2l0IGFwcGx5IiB3YXMgYWxyZWFkeSB1cGRhdGVkIHRvIGFjY2VwdAorICAgIHRoaXMgbW9kaWZpZWQgb3V0cHV0IGZvcm1hdCBzaW5jZSBjZTc0NjE4ZCAoU2VwIDIyLCAyMDA2KS4KKworICAtICJnaXQgY3Zzc2VydmVyIiBydW5zIGhvb2tzL3VwZGF0ZSBhbmQgaG9ub3JzIGl0cyBleGl0IHN0YXR1cy4KKworICAtICJnaXQgY3Zzc2VydmVyIiBjYW4gYmUgdG9sZCB0byBzZW5kIGV2ZXJ5dGhpbmcgd2l0aCAta2IuCisKKyAgLSAiZ2l0IGRpZmYgLS1jaGVjayIgYWxzbyBob25vcnMgdGhlIC0tY29sb3Igb3V0cHV0IG9wdGlvbi4KKworICAtICJnaXQgbmFtZS1yZXYiIHVzZWQgdG8gc3RyZXNzIHRoZSBmYWN0IHRoYXQgYSByZWYgaXMgYSB0YWcgdG9vCisgICAgbXVjaCwgYnkgc2F5aW5nIHNvbWV0aGluZyBsaWtlICJ2MS4yLjNeMH4yMiIuICBJdCBub3cgc2F5cworICAgICJ2MS4yLjN+MjIiIGluIHN1Y2ggYSBjYXNlIChpdCBzdGlsbCBzYXlzICJ2MS4yLjNeMCIgaWYgaXQgZG9lcworICAgIG5vdCB0YWxrIGFib3V0IGFuIGFuY2VzdG9yIG9mIHRoZSBjb21taXQgdGhhdCBpcyB0YWdnZWQsIHdoaWNoCisgICAgbWFrZXMgc2Vuc2UpLgorCisgIC0gImdpdCByZXYtbGlzdCAtLWJvdW5kYXJ5IiBub3cgc2hvd3MgYm91bmRhcnkgbWFya2VycyBmb3IgdGhlCisgICAgY29tbWl0cyBvbWl0dGVkIGJ5IC0tbWF4LWFnZSBhbmQgLS1tYXgtY291bnQgY29uZGl0aW9uLgorCisgIC0gVGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtIG5vdyByZWFkcyAkKHByZWZpeCkvZXRjL2dpdGNvbmZpZy4KKworICAtICJnaXQgYXBwbHkgLS12ZXJib3NlIiBzaG93cyB3aGF0IHByZWltYWdlIGxpbmVzIHdlcmUgd2FudGVkCisgICAgd2hlbiBpdCBjb3VsZG4ndCBmaW5kIHRoZW0uCisKKyAgLSAiZ2l0IHN0YXR1cyIgaW4gYSByZWFkLW9ubHkgcmVwb3NpdG9yeSBnb3QgYSBiaXQgc2FuZXIuCisKKyAgLSAiZ2l0IGZldGNoIiAoaGVuY2UgImdpdCBjbG9uZSIgYW5kICJnaXQgcHVsbCIpIGFyZSBsZXNzCisgICAgbm9pc3kgd2hlbiB0aGUgb3V0cHV0IGRvZXMgbm90IGdvIHRvIHR0eS4KKworICAtICJnaXQgZmV0Y2giIGJldHdlZW4gcmVwb3NpdG9yaWVzIHdpdGggbWFueSByZWZzIHdlcmUgc2xvdworICAgIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm90IG1hbnkgY2hhbmdlcyB0aGF0IG5lZWRlZAorICAgIHRyYW5zZmVycmluZy4gIFRoaXMgaGFzIGJlZW4gc3BlZCB1cCBieSBwYXJ0aWFsbHkgcmV3cml0aW5nCisgICAgdGhlIGhlYXZpZXN0IHBhcnRzIGluIEMuCisKKyAgLSAiZ2l0IG1haWxpbmZvIiB3aGljaCBzcGxpdHMgYW4gZS1tYWlsIGludG8gYSBwYXRjaCBhbmQgdGhlCisgICAgbWV0YS1pbmZvcm1hdGlvbiB3YXMgcmV3cml0dGVuLCB0aGFua3MgdG8gRG9uIFppY2t1cy4gIEl0CisgICAgaGFuZGxlcyBuZXN0ZWQgbXVsdGlwYXJ0IGJldHRlci4gIFRoZSBjb21tYW5kIHdhcyBicm9rZW4gZm9yCisgICAgYSBicmllZiBwZXJpb2Qgb24gJ21hc3RlcicgYnJhbmNoIHNpbmNlIDEuNS4wIGJ1dCB0aGUKKyAgICBicmVha2FnZSBpcyBmaXhlZCBub3cuCisKKyAgLSBzZW5kLWVtYWlsIGxlYXJuZWQgY29uZmlndXJhYmxlIGJjYyBhbmQgY2hhaW4tcmVwbHktdG8uCisKKyAgLSAiZ2l0IHJlbW90ZSBzaG93ICRyZW1vdGUiIGFsc28gdGFsa3MgYWJvdXQgYnJhbmNoZXMgdGhhdAorICAgIHdvdWxkIGJlIHB1c2hlZCBpZiB5b3UgcnVuICJnaXQgcHVzaCByZW1vdGUiLgorCisgIC0gVXNpbmcgb2JqZWN0cyBmcm9tIHBhY2tzIGlzIG5vdyBzZXJpb3VzbHkgb3B0aW1pemVkIGJ5IGNsZXZlcgorICAgIHVzZSBvZiBhIGNhY2hlLiAgVGhpcyBzaG91bGQgYmUgbW9zdCBub3RpY2VhYmxlIGluIGdpdC1sb2cKKyAgICBmYW1pbHkgb2YgY29tbWFuZHMgdGhhdCBpbnZvbHZlIHJlYWRpbmcgbWFueSB0cmVlIG9iamVjdHMuCisgICAgSW4gYWRkaXRpb24sIHRyYXZlcnNpbmcgcmV2aXNpb25zIHdoaWxlIGZpbHRlcmluZyBjaGFuZ2VzCisgICAgd2l0aCBwYXRoc3BlY3MgaXMgbWFkZSBmYXN0ZXIgYnkgdGVybWluYXRpbmcgdGhlIGNvbXBhcmlzb24KKyAgICBiZXR3ZWVuIHRoZSB0cmVlcyBhcyBlYXJseSBhcyBwb3NzaWJsZS4KKworCisqIEhvb2tzCisKKyAgLSBUaGUgcGFydCB0byBzZW5kIG91dCBub3RpZmljYXRpb24gZS1tYWlscyB3YXMgcmVtb3ZlZCBmcm9tCisgICAgdGhlIHNhbXBsZSB1cGRhdGUgaG9vaywgYXMgaXQgd2FzIG5vdCBhbiBhcHByb3ByaWF0ZSBwbGFjZQorICAgIHRvIGRvIHNvLiAgVGhlIHByb3BlciBwbGFjZSB0byBkbyB0aGlzIGlzIHRoZSBuZXcgcG9zdC1yZWNlaXZlCisgICAgaG9vay4gIEFuIGV4YW1wbGUgaG9vayBoYXMgYmVlbiBhZGRlZCB0byBjb250cmliL2hvb2tzLy4KKworCisqIE90aGVycworCisgIC0gZ2l0LXJldmVydCwgZ2l0LWdjIGFuZCBnaXQtY2hlcnJ5LXBpY2sgYXJlIG5vdyBidWlsdC1pbnMuCisKK0ZpeGVzIHNpbmNlIHYxLjUuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGFyZSBhbGwgaW4gdjEuNS4wLnggc2VyaWVzLgorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisgIC0gQ2xhcmlmaWNhdGlvbnMgYW5kIGNvcnJlY3Rpb25zIHRvIDEuNS4wIHJlbGVhc2Ugbm90ZXMuCisKKyAgLSBUaGUgbWFpbiBkb2N1bWVudGF0aW9uIGRpZCBub3QgbGluayB0byBnaXQtcmVtb3RlIGRvY3VtZW50YXRpb24uCisKKyAgLSBDbGFyaWZpZWQgaW50cm9kdWN0b3J5IHRleHQgb2YgZ2l0LXJlYmFzZSBkb2N1bWVudGF0aW9uLgorCisgIC0gQ29udmVydGVkIHJlbWFpbmluZyBtZW50aW9ucyBvZiB1cGRhdGUtaW5kZXggb24gUG9yY2VsYWluCisgICAgZG9jdW1lbnRzIHRvIGdpdC1hZGQvZ2l0LXJtLgorCisgIC0gU29tZSBpMThuLiogY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2VyZSBpbmNvcnJlY3RseQorICAgIGRlc2NyaWJlZCBhcyBjb3JlLio7IGZpeGVkLgorCisgIC0gYWRkZWQgYW5kIGNsYXJpZmllZCBjb3JlLmJhcmUsIGNvcmUubGVnYWN5aGVhZGVycyBjb25maWd1cmF0aW9ucy4KKworICAtIHVwZGF0ZWQgImdpdC1jbG9uZSAtLWRlcHRoIiBkb2N1bWVudGF0aW9uLgorCisgIC0gdXNlci1tYW51YWwgdXBkYXRlcy4KKworICAtIE9wdGlvbnMgdG8gJ2dpdCByZW1vdGUgYWRkJyB3ZXJlIGRlc2NyaWJlZCBpbnN1ZmZpY2llbnRseS4KKworICAtIENvbmZpZ3VyYXRpb24gZm9ybWF0LnN1ZmZpeCB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAgLSBPdGhlciBmb3JtYXR0aW5nIGFuZCBzcGVsbGluZyBmaXhlcy4KKworICAtIHVzZXItbWFudWFsIGhhcyBiZXR0ZXIgY3Jvc3MgcmVmZXJlbmNlcy4KKworICAtIGdpdHdlYiBpbnN0YWxsYXRpb24vZGVwbG95bWVudCBwcm9jZWR1cmUgaXMgbm93IGRvY3VtZW50ZWQuCisKKworKiBCdWdmaXhlcworCisgIC0gZ2l0LXVwbG9hZC1wYWNrIGNsb3NlcyB1bnVzZWQgcGlwZSBlbmRzOyBlYXJsaWVyIHRoaXMgY2F1c2VkCisgICAgbWFueSB6b21iaWVzIHRvIGhhbmcgYXJvdW5kLgorCisgIC0gZ2l0LXJlcmVyZSB3YXMgcmVjb3JkaW5nIHRoZSBjb250ZW50cyBvZiBlYXJsaWVyIGh1bmtzCisgICAgZHVwbGljYXRlZCBpbiBsYXRlciBodW5rcy4gIFRoaXMgcHJldmVudGVkIHJlc29sdmluZyB0aGUgc2FtZQorICAgIGNvbmZsaWN0IHdoZW4gcGVyZm9ybWluZyB0aGUgc2FtZSBtZXJnZSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKworICAtIGdpdC1hZGQgYW5kIGdpdC11cGRhdGUtaW5kZXggb24gYSBmaWxlc3lzdGVtIG9uIHdoaWNoCisgICAgZXhlY3V0YWJsZSBiaXRzIGFyZSB1bnJlbGlhYmxlIGluY29ycmVjdGx5IHJldXNlZCBzdF9tb2RlCisgICAgYml0cyBldmVuIHdoZW4gdGhlIHBhdGggY2hhbmdlZCBiZXR3ZWVuIHN5bWxpbmsgYW5kIHJlZ3VsYXIKKyAgICBmaWxlLgorCisgIC0gZ2l0LWRhZW1vbiBtYXJrcyB0aGUgbGlzdGVuaW5nIHNvY2tldHMgd2l0aCBGRF9DTE9FWEVDIHNvCisgICAgdGhhdCBpdCB3b24ndCBiZSBsZWFrZWQgaW50byB0aGUgY2hpbGRyZW4uCisKKyAgLSBzZWdmYXVsdCBmcm9tIGdpdC1ibGFtZSB3aGVuIHRoZSBtYW5kYXRvcnkgcGF0aG5hbWUKKyAgICBwYXJhbWV0ZXIgd2FzIG1pc3Npbmcgd2FzIGZpeGVkOyB1c2FnZSgpIG1lc3NhZ2UgaXMgZ2l2ZW4KKyAgICBpbnN0ZWFkLgorCisgIC0gZ2l0LXJldi1saXN0IGRpZCBub3QgcmVhZCAkR0lUX0RJUi9jb25maWcgZmlsZSwgd2hpY2ggbWVhbnMKKyAgICB0aGF0IGRpZCBub3QgaG9ub3IgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBjb3JyZWN0bHkuCisKKyAgLSBBdXRvbWF0ZWQgbWVyZ2UgY29uZmxpY3QgaGFuZGxpbmcgd2hlbiBjaGFuZ2VzIHRvIHN5bWJvbGljCisgICAgbGlua3MgY29uZmxpY3RlZCB3ZXJlIGNvbXBsZXRlbHkgYnJva2VuLiAgVGhlIG1lcmdlLXJlc29sdmUKKyAgICBzdHJhdGVneSBjcmVhdGVkIGEgcmVndWxhciBmaWxlIHdpdGggY29uZmxpY3QgbWFya2VycyBpbiBpdAorICAgIGluIHBsYWNlIG9mIHRoZSBzeW1ib2xpYyBsaW5rLiAgVGhlIGRlZmF1bHQgc3RyYXRlZ3ksCisgICAgbWVyZ2UtcmVjdXJzaXZlIHdhcyBldmVuIG1vcmUgYnJva2VuLiAgSXQgcmVtb3ZlZCB0aGUgcGF0aAorICAgIHRoYXQgd2FzIHBvaW50ZWQgYXQgYnkgdGhlIHN5bWJvbGljIGxpbmsuICBCb3RoIG9mIHRoZXNlCisgICAgcHJvYmxlbXMgaGF2ZSBiZWVuIGZpeGVkLgorCisgIC0gJ2dpdCBkaWZmIG1haW50IG1hc3RlciBuZXh0JyBkaWQgbm90IGNvcnJlY3RseSBnaXZlIGNvbWJpbmVkCisgICAgZGlmZiBhY3Jvc3MgdGhyZWUgdHJlZXMuCisKKyAgLSAnZ2l0IGZhc3QtaW1wb3J0JyBwb3J0YWJpbGl0eSBmaXggZm9yIFNvbGFyaXMuCisKKyAgLSAnZ2l0IHNob3ctcmVmIC0tdmVyaWZ5JyB3aXRob3V0IGFyZ3VtZW50cyBkaWQgbm90IGVycm9yIG91dAorICAgIGJ1dCBzZWdmYXVsdGVkLgorCisgIC0gJ2dpdCBkaWZmIDp0cmFja2VkLWZpbGUgYHB3ZGAvYW4tdW50cmFja2VkLWZpbGUnIGdhdmUgYW4gZXh0cmEKKyAgICBzbGFzaGVzIGFmdGVyIGEvIGFuZCBiLy4KKworICAtICdnaXQgZm9ybWF0LXBhdGNoJyBwcm9kdWNlZCB0b28gbG9uZyBmaWxlbmFtZXMgaWYgdGhlIGNvbW1pdAorICAgIG1lc3NhZ2UgaGFkIHRvbyBsb25nIGxpbmUgYXQgdGhlIGJlZ2lubmluZy4KKworICAtIFJ1bm5pbmcgJ21ha2UgYWxsJyBhbmQgdGhlbiB3aXRob3V0IGNoYW5naW5nIGFueXRoaW5nCisgICAgcnVubmluZyAnbWFrZSBpbnN0YWxsJyBzdGlsbCByZWJ1aWx0IHNvbWUgZmlsZXMuICBUaGlzCisgICAgd2FzIGluY29udmVuaWVudCB3aGVuIGJ1aWxkaW5nIGFzIHlvdXJzZWxmIGFuZCB0aGVuCisgICAgaW5zdGFsbGluZyBhcyByb290IChlc3BlY2lhbGx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZQorICAgIGRpcmVjdG9yeSBpcyBvbiBORlMgYW5kIHJvb3QgaXMgbWFwcGVkIHRvIG5vYm9keSkuCisKKyAgLSAnZ2l0LXJlcmVyZScgZmFpbGVkIHRvIGRlYWwgd2l0aCB0d28gdW5jb25mbGljdGVkIHBhdGhzIHRoYXQKKyAgICBzb3J0ZWQgbmV4dCB0byBlYWNoIG90aGVyLgorCisgIC0gJ2dpdC1yZXJlcmUnIGF0dGVtcHRlZCB0byBvcGVuKDIpIGEgc3ltbGluayBhbmQgZmFpbGVkIGlmCisgICAgdGhlcmUgd2FzIGEgY29uZmxpY3QuICBTaW5jZSBhIGNvbmZsaWN0aW5nIGNoYW5nZSB0byBhCisgICAgc3ltbGluayB3b3VsZCBub3QgYmVuZWZpdCBmcm9tIHJlcmVyZSBhbnl3YXksIHRoZSBjb21tYW5kCisgICAgbm93IGlnbm9yZXMgY29uZmxpY3RpbmcgY2hhbmdlcyB0byBzeW1saW5rcy4KKworICAtICdnaXQtcmVwYWNrJyBkaWQgbm90IGxpa2UgdG8gcGFzcyBtb3JlIHRoYW4gNjQgYXJndW1lbnRzCisgICAgaW50ZXJuYWxseSB0byB1bmRlcmx5aW5nICdyZXYtbGlzdCcgbG9naWMsIHdoaWNoIG1hZGUgaXQKKyAgICBpbXBvc3NpYmxlIHRvIHJlcGFjayBhZnRlciBhY2N1bXVsYXRpbmcgbWFueSAoc21hbGwpIHBhY2tzCisgICAgaW4gdGhlIHJlcG9zaXRvcnkuCisKKyAgLSAnZ2l0LWRpZmYnIHRvIHJldmlldyB0aGUgY29tYmluZWQgZGlmZiBkdXJpbmcgYSBjb25mbGljdGVkCisgICAgbWVyZ2Ugd2VyZSBub3QgcmVhZGluZyB0aGUgd29ya2luZyB0cmVlIHZlcnNpb24gY29ycmVjdGx5CisgICAgd2hlbiBjaGFuZ2VzIHRvIGEgc3ltYm9saWMgbGluayBjb25mbGljdGVkLiAgSXQgc2hvdWxkIGhhdmUKKyAgICByZWFkIHRoZSBkYXRhIHVzaW5nIHJlYWRsaW5rKDIpIGJ1dCByZWFkIGZyb20gdGhlIHJlZ3VsYXIKKyAgICBmaWxlIHRoZSBzeW1ib2xpYyBsaW5rIHBvaW50ZWQgYXQuCisKKyAgLSAnZ2l0LXJlbW90ZScgZGlkIG5vdCBsaWtlIHBlcmlvZCBpbiBhIHJlbW90ZSdzIG5hbWUuCisKKyAgLSAnZ2l0LmVsJyBob25vcnMgdGhlIGNvbW1pdCBjb2Rpbmcgc3lzdGVtIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgLSAnYmxhbWV2aWV3JyBpbiBjb250cmliLyBjb3JyZWN0bHkgZGlncyBkZWVwZXIgd2hlbiBhIGxpbmUgaXMKKyAgICBjbGlja2VkLgorCisgIC0gJ2h0dHAtcHVzaCcgY29ycmVjdGx5IG1ha2VzIHN1cmUgdGhlIHJlbW90ZSBzaWRlIGhhcyBsZWFkaW5nCisgICAgcGF0aC4gIEVhcmxpZXIgaXQgc3RhcnRlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYXRoLCBhbmQKKyAgICBpbmNvcnJlY3RseS4KKworICAtICdnaXQtbWVyZ2UnIGRpZCBub3QgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyB3aGVuIHRoZQorICAgIHdvcmtpbmcgdHJlZSB3YXMgZGlydHkgYW5kIGNhbm5vdCBmYXN0IGZvcndhcmQuICBJdCBkb2VzCisgICAgbm93LgorCisgIC0gJ2N2c2V4cG9ydGNvbW1pdCcgZG9lcyBub3QgbG9zZSB5ZXQtdG8tYmUtdXNlZCBtZXNzYWdlIGZpbGUuCisKKyAgLSBpbnQtdnMtc2l6ZV90IHR5cGVmaXggd2hlbiBydW5uaW5nIGNvbWJpbmVkIGRpZmYgb24gZmlsZXMKKyAgICBvdmVyIDJHQiBsb25nLgorCisgIC0gJ2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAnIHNob3VsZCBub3QgdG91Y2ggdW5tb2RpZmllZAorICAgIGxpbmVzLgorCisgIC0gJ2dpdC1tYWlsaW5mbycgY2hva2Ugd2hlbiBhIGxvZ2ljYWwgaGVhZGVyIGxpbmUgd2FzIHRvbyBsb25nLgorCisgIC0gJ2dpdCBzaG93IEEuLkInIGRpZCBub3QgZXJyb3Igb3V0LiAgTmVnYXRpdmUgcmVmICgibm90IEEiIGluCisgICAgdGhpcyBleGFtcGxlKSBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciB0aGUgcHVycG9zZSBvZiB0aGUKKyAgICBjb21tYW5kLCBzbyBub3cgaXQgZXJyb3JzIG91dC4KKworICAtICdnaXQgZm10LW1lcmdlLW1zZyAtLWZpbGUnIHdpdGhvdXQgZmlsZSBwYXJhbWV0ZXIgZGlkIG5vdAorICAgIGNvcnJlY3RseSBlcnJvciBvdXQuCisKKyAgLSAnZ2l0IGFyY2hpbXBvcnQnIGJhcmZlZCB1cG9uIGVuY291bnRlcmluZyBhIGNvbW1pdCB3aXRob3V0CisgICAgc3VtbWFyeS4KKworICAtICdnaXQgaW5kZXgtcGFjaycgZGlkIG5vdCBwcm90ZWN0IGl0c2VsZiBmcm9tIGdldHRpbmcgYSBzaG9ydAorICAgIHJlYWQgb3V0IG9mIHByZWFkKDIpLgorCisgIC0gJ2dpdCBodHRwLXB1c2gnIGhhZCBhIGZldyBidWZmZXIgb3ZlcnJ1bnMuCisKKyAgLSBCdWlsZCBkZXBlbmRlbmN5IGZpeGVzIHRvIHJlYnVpbGQgZmV0Y2gubyB3aGVuIG90aGVyIGhlYWRlcnMKKyAgICBjaGFuZ2UuCisKKyAgLSBnaXQuZWwgZG9lcyBub3QgYWRkIGR1cGxpY2F0ZSBzaWduLW9mZiBsaW5lcy4KKworICAtIGdpdC1jb21taXQgc2hvd3MgdGhlIGZ1bGwgc3RhdCBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdCwgbm90CisgICAganVzdCBhYm91dCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGVuIHJ1biBmcm9tCisgICAgYSBzdWJkaXJlY3RvcnkuCisKKyAgLSAiZ2l0LWNoZWNrb3V0IC1tICdAezggaG91cnMgYWdvfSciIGhhZCBhIGZ1bm55IGZhaWx1cmUgZnJvbQorICAgIGV2YWw7IGZpeGVkLgorCisgIC0gZ2l0LW1lcmdlIChoZW5jZSBnaXQtcHVsbCkgZGlkIG5vdCByZWZ1c2UgZmFzdC1mb3J3YXJkaW5nCisgICAgd2hlbiB0aGUgd29ya2luZyB0cmVlIGhhZCBsb2NhbCBjaGFuZ2VzIHRoYXQgd291bGQgaGF2ZQorICAgIGNvbmZsaWN0ZWQgd2l0aCBpdC4KKworICAtIGEgaGFuZGZ1bCBzbWFsbCBmaXhlcyB0byBnaXR3ZWIuCisKKyAgLSBidWlsZCBwcm9jZWR1cmUgZm9yIHVzZXItbWFudWFsIGlzIGZpeGVkIG5vdCB0byByZXF1aXJlIGxvY2FsbHkKKyAgICBpbnN0YWxsZWQgc3R5bGVzaGVldHMuCisKKyAgLSAiZ2l0IGNvbW1pdCAkcGF0aHMiIG9uIHBhdGhzIHdob3NlIGVhcmxpZXIgY29udGVudHMgd2VyZQorICAgIGFscmVhZHkgdXBkYXRlZCBpbiB0aGUgaW5kZXggd2VyZSBmYWlsaW5nIG91dC4KKworCisqIFR3ZWFrcworCisgIC0gc2xpZGluZyBtbWFwKCkgaW5lZmZpY2llbnRseSBtbWFwZWQgdGhlIHNhbWUgcmVnaW9uIG9mIGEKKyAgICBwYWNrZmlsZSB3aXRoIGFuIGFjY2VzcyBwYXR0ZXJuIHRoYXQgdXNlZCBvYmplY3RzIGluIHRoZQorICAgIHJldmVyc2Ugb3JkZXIuICBUaGlzIGhhcyBiZWVuIG1hZGUgbW9yZSBlZmZpY2llbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE5ODRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4xLnR4dApAQCAtMCwwICsxLDQ3IEBACitHSVQgdjEuNS4yLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gVGVtcG9yYXJ5IGZpbGVzIHRoYXQgYXJlIHVzZWQgd2hlbiBpbnZva2luZyBleHRlcm5hbCBkaWZmCisgICAgcHJvZ3JhbXMgZGlkIG5vdCB0b2xlcmF0ZSBhIGxvbmcgVE1QRElSLgorCisgIC0gZ2l0LWRhZW1vbiBkaWQgbm90IG5vdGljZSB3aGVuIGl0IGNvdWxkIG5vdCB3cml0ZSBpbnRvIGl0cworICAgIHBpZCBmaWxlLgorCisgIC0gZ2l0LXN0YXR1cyBkaWQgbm90IGhvbm9yIGNvcmUuZXhjbHVkZXNGaWxlIGNvbmZpZ3VyYXRpb24gbGlrZQorICAgIGdpdC1hZGQgZGlkLgorCisgIC0gZ2l0LWFubm90YXRlIGRpZCBub3Qgd29yayBmcm9tIGEgc3ViZGlyZWN0b3J5IHdoaWxlCisgICAgZ2l0LWJsYW1lIGRpZC4KKworICAtIGdpdC1jdnNzZXJ2ZXIgc2hvdWxkIGhhdmUgZGlzYWJsZWQgYWNjZXNzIHRvIGEgcmVwb3NpdG9yeQorICAgIHdpdGggImdpdGN2cy5wc2VydmVyLmVuYWJsZWQgPSBmYWxzZSIgc2V0IGV2ZW4gd2hlbgorICAgICJnaXRjdnMuZW5hYmxlZCA9IHRydWUiIHdhcyBzZXQgYXQgdGhlIHNhbWUgdGltZS4gIEl0CisgICAgZGlkbid0LgorCisgIC0gZ2l0LWN2c2ltcG9ydCBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGluIGEgcmVwb3NpdG9yeSB3aXRoCisgICAgaXRzIGJyYW5jaCBoZWFkcyB3ZXJlIHBhY2tlZCB3aXRoIHBhY2stcmVmcy4KKworICAtIGlkZW50IHVuZXhwYW5zaW9uIHRvIHNxdWFzaCAiJElkOiB4eHggJCIgdGhhdCBpcyBpbiB0aGUKKyAgICByZXBvc2l0b3J5IGNvcHkgcmVtb3ZlZCBpbmNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzLgorCisgIC0gZ2l0LXN2biBtaXNiZWhhdmVkIHdoZW4gdGhlIHN1YnZlcnNpb24gcmVwb3NpdG9yeSBkaWQgbm90CisgICAgcHJvdmlkZSBNRDUgY2hlY2tzdW1zIGZvciBmaWxlcy4KKworICAtIGdpdCByZWJhc2UgKGFuZCBnaXQgYW0pIG1pc2JlaGF2ZWQgb24gY29tbWl0cyB0aGF0IGhhdmUgJ1xuJworICAgIChsaXRlcmFsbHkgYmFja3NsYXNoIGFuZCBlbiwgbm90IGEgbGluZWZlZWQpIGluIHRoZSB0aXRsZS4KKworICAtIGNvZGUgdG8gZGVjb2RlIGJhc2U4NSB1c2VkIGluIGJpbmFyeSBwYXRjaGVzIGhhZCBvbmUgZXJyb3IKKyAgICByZXR1cm4gY29kZXBhdGggd3JvbmcuCisKKyAgLSBSRkMyMDQ3IFEgZW5jb2Rpbmcgb3V0cHV0IGJ5IGdpdC1mb3JtYXQtcGF0Y2ggdXNlZCAnXycgZm9yIGEKKyAgICBzcGFjZSwgd2hpY2ggaXMgbm90IHVuZGVyc3Rvb2QgYnkgc29tZSBwcm9ncmFtcy4gIEl0IHVzZXMgPTIwCisgICAgd2hpY2ggaXMgc2FmZXIuCisKKyAgLSBnaXQtZmFzdGltcG9ydCAtLWltcG9ydC1tYXJrcyB3YXMgYnJva2VuOyBmaXhlZC4KKworICAtIEEgbG90IG9mIGRvY3VtZW50YXRpb24gdXBkYXRlcywgY2xhcmlmaWNhdGlvbnMgYW5kIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmYTM0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMi50eHQKQEAgLTAsMCArMSw2MSBAQAorR0lUIHYxLjUuMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFVzYWJpbGl0eSBmaXgKKworICAtIGdpdC1ndWkgaXMgc2hpcHBlZCB3aXRoIGl0cyB1cGRhdGVkIGJsYW1lIGludGVyZmFjZS4gIEl0IGlzCisgICAgcnVtb3JlZCB0aGF0IHRoZSBvbGRlciBvbmUgd2FzIG5vdCBqdXN0IHVudXNhYmxlIGJ1dCB3YXMKKyAgICBhY3RpdmUgaGVhbHRoIGhhemFyZCwgYnV0IHRoaXMgb25lIGlzIGFjdHVhbGx5IHByZXR0eS4KKyAgICBQbGVhc2Ugc2VlIGZvciB5b3Vyc2VsZi4KKworKiBCdWdmaXhlcworCisgIC0gImdpdCBjaGVja291dCBmdWJhciIgd2FzIHV0dGVybHkgY29uZnVzZWQgd2hlbiB0aGVyZSBpcyBhCisgICAgYnJhbmNoIGZ1YmFyIGFuZCBhIHRhZyBmdWJhciBhdCB0aGUgc2FtZSB0aW1lLiAgSXQgY29ycmVjdGx5CisgICAgY2hlY2tzIG91dCB0aGUgYnJhbmNoIGZ1YmFyIG5vdy4KKworICAtICJnaXQgY2xvbmUgL3BhdGgvZm9vIiB0byBjbG9uZSBhIGxvY2FsIC9wYXRoL2Zvby5naXQKKyAgICByZXBvc2l0b3J5IGxlZnQgYW4gaW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24uCisKKyAgLSAiZ2l0IHNlbmQtZW1haWwiIGNvcnJlY3RseSB1bnF1b3RlcyBSRkMgMjA0NyBxdW90ZWQgbmFtZXMgaW4KKyAgICB0aGUgcGF0Y2gtZW1haWwgYmVmb3JlIHVzaW5nIHRoZWlyIHZhbHVlcy4KKworICAtIFdlIGRpZCBub3QgYWNjZXB0IG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGVwb2NoIG9sZGVyIHRoYW4KKyAgICB5ZWFyIDIwMDAgYXMgYSB2YWxpZCB0aW1lc3RhbXAuICBXZSBub3cgaW50ZXJwcmV0IHBvc2l0aXZlCisgICAgaW50ZWdlcnMgbW9yZSB0aGFuIDggZGlnaXRzIGFzIHN1Y2gsIHdoaWNoIGFsbG93cyB1cyB0bworICAgIGV4cHJlc3MgdGltZXN0YW1wcyBtb3JlIHJlY2VudCB0aGFuIE1hcmNoIDE5NzMuCisKKyAgLSBnaXQtY3ZzaW1wb3J0IGRpZCBub3Qgd29yayB3aGVuIHlvdSBoYXZlIEdJVF9ESVIgdG8gcG9pbnQKKyAgICB5b3VyIHJlcG9zaXRvcnkgYXQgYSBub25zdGFuZGFyZCBsb2NhdGlvbi4KKworICAtIFNvbWUgc3lzdGVtcyAobm90YWJseSwgU29sYXJpcykgbGFjayBoc3RyZXJyb3IoKSB0byBtYWtlCisgICAgaF9lcnJubyBodW1hbiByZWFkYWJsZTsgcHJlcGFyZSBhIHJlcGxhY2VtZW50CisgICAgaW1wbGVtZW50YXRpb24uCisKKyAgLSAuZ2l0aWdub3JlIGZpbGUgbGlzdGVkIGdpdC1jb3JlLnNwZWMgYnV0IHdoYXQgd2UgZ2VuZXJhdGUgaXMKKyAgICBnaXQuc3BlYywgYW5kIG5vYm9keSBub3RpY2VkIGZvciBhIGxvbmcgdGltZS4KKworICAtICJnaXQtbWVyZ2UtcmVjdXJzaXZlIiBkb2VzIG5vdCB0cnkgdG8gcnVuIGZpbGUgbGV2ZWwgbWVyZ2UKKyAgICBvbiBiaW5hcnkgZmlsZXMuCisKKyAgLSAiZ2l0LWJyYW5jaCAtLXRyYWNrIiBkaWQgbm90IGNyZWF0ZSB0cmFja2luZyBjb25maWd1cmF0aW9uCisgICAgY29ycmVjdGx5IHdoZW4gdGhlIGJyYW5jaCBuYW1lIGhhZCBzbGFzaCBpbiBpdC4KKworICAtIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHNwZWNpZmllZCB3aXRoIHVzZXIuZW1haWwKKyAgICBjb25maWd1cmF0aW9uIHdhcyBvdmVycmlkZGVuIGJ5IEVNQUlMIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgIC0gVGhlIHRyZWUgcGFyc2VyIGRpZCBub3Qgd2FybiBhYm91dCB0cmVlIGVudHJpZXMgd2l0aAorICAgIG5vbnNlbnNlIGZpbGUgbW9kZXMsIGFuZCBhc3N1bWVkIHRoZXkgbXVzdCBiZSBibG9icy4KKworICAtICJnaXQgbG9nIC16IiB3aXRob3V0IGFueSBvdGhlciByZXF1ZXN0IHRvIGdlbmVyYXRlIGRpZmYgc3RpbGwKKyAgICBpbnZva2VkIHRoZSBkaWZmIG1hY2hpbmVyeSwgd2FzdGluZyBjeWNsZXMuCisKKyogRG9jdW1lbnRhdGlvbgorCisgIC0gTWFueSB1cGRhdGVzIHRvIGZpeCBzdGFsZSBvciBtaXNzaW5nIGRvY3VtZW50YXRpb24uCisKKyAgLSBBbHRob3VnaCBvdXIgZG9jdW1lbnRhdGlvbiB3YXMgcHJpbWFyaWx5IG1lYW50IHRvIGJlIGZvcm1hdHRlZAorICAgIHdpdGggQXNjaWlEb2M3LCBmb3JtYXR0aW5nIHdpdGggQXNjaWlEb2M4IGlzIHN1cHBvcnRlZCBiZXR0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGRiMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4zLnR4dApAQCAtMCwwICsxLDI3IEBACitHSVQgdjEuNS4yLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4yLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJ1Z2ZpeGVzCisKKyAgIC0gVmVyc2lvbiAyIHBhY2sgaW5kZXggZm9ybWF0IHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMS41LjIKKyAgICAgdG8gc3VwcG9ydCBwYWNrIGZpbGVzIHRoYXQgaGFzIG9mZnNldCB0aGF0IGNhbm5vdCBiZQorICAgICByZXByZXNlbnRlZCBpbiAzMi1iaXQuICBUaGUgcnVudGltZSBjb2RlIHRvIHZhbGlkYXRlIHN1Y2gKKyAgICAgYW4gaW5kZXggbWlzaGFuZGxlZCBzdWNoIGFuIGluZGV4IGZvciBhbiBlbXB0eSBwYWNrLgorCisgICAtIENvbW1pdCB3YWxrZXJzIChtb3N0IG5vdGFibHksIGZldGNoIG92ZXIgaHR0cCBwcm90b2NvbCkKKyAgICAgdHJpZWQgdG8gdHJhdmVyc2UgY29tbWl0IG9iamVjdHMgY29udGFpbmVkIGluIHRyZWVzIChha2EKKyAgICAgc3VicHJvamVjdCk7IHRoZXkgc2hvdWxkbid0LgorCisgICAtIEEgYnVpbGQgb3B0aW9uIE5PX1JfVE9fR0NDX0xJTktFUiB3YXMgbm90IGV4cGxhaW5lZCBpbiBNYWtlZmlsZQorICAgICBjb21tZW50IGNvcnJlY3RseS4KKworICogRG9jdW1lbnRhdGlvbiBGaXhlcyBhbmQgVXBkYXRlcworCisgICAtIGdpdC1jb25maWcgLS1yZWdleHAgd2FzIG5vdCBkb2N1bWVudGVkIHByb3Blcmx5LgorCisgICAtIGdpdC1yZXBhY2sgLWEgd2FzIG5vdCBkb2N1bWVudGVkIHByb3Blcmx5LgorCisgICAtIGdpdC1yZW1vdGUgLW4gd2FzIG5vdCBkb2N1bWVudGVkIHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjZmY0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuNC50eHQKQEAgLTAsMCArMSwyOCBAQAorR0lUIHYxLjUuMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWdmaXhlcworCisgICAtICJnaXQtZ3VpIiBidWdmaXhlcywgaW5jbHVkaW5nIGEgaGFuZGZ1bCBmaXhlcyB0byBydW4gaXQKKyAgICAgYmV0dGVyIG9uIEN5Z3dpbi9NU1lTLgorCisgICAtICJnaXQgY2hlY2tvdXQiIGZhaWxlZCB0byBzd2l0Y2ggYmFjayBhbmQgZm9ydGggYmV0d2VlbgorICAgICBicmFuY2hlcywgb25lIG9mIHdoaWNoIGhhcyAiZnJvdHogLT4geHl6enkiIHN5bWxpbmsgYW5kCisgICAgIGZpbGUgInh5enp5L2ZpbGZyZSIsIHdoaWxlIHRoZSBvdGhlciBvbmUgaGFzIGEgZmlsZQorICAgICAiZnJvdHovZmlsZnJlIi4KKworICAgLSAiZ2l0IHBydW5lIiB1c2VkIHRvIHNlZ2ZhdWx0IHVwb24gc2VlaW5nIGEgY29tbWl0IHRoYXQgaXMKKyAgICAgcmVmZXJyZWQgdG8gYnkgYSB0cmVlIG9iamVjdCAoYWthICJzdWJwcm9qZWN0IikuCisKKyAgIC0gImdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLS1uby1pbmRleCIgbWlzaGFuZGxlZCBhbiBhZGRlZCBmaWxlLgorCisgICAtICJnaXQgYXBwbHkgLS1yZXZlcnNlIC0td2hpdGVzcGFjZT13YXJuIiBzdGlsbCBjb21wbGFpbmVkCisgICAgIGFib3V0IHdoaXRlc3BhY2VzIHRoYXQgYSBmb3J3YXJkIGFwcGxpY2F0aW9uIHdvdWxkIGhhdmUKKyAgICAgaW50cm9kdWNlZC4KKworICogRG9jdW1lbnRhdGlvbiBGaXhlcyBhbmQgVXBkYXRlcworCisgICAtIEEgaGFuZGZ1bCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI4MWM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi41LnR4dApAQCAtMCwwICsxLDMwIEBACitHSVQgdjEuNS4yLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4yLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJ1Z2ZpeGVzCisKKyAgIC0gImdpdCBhZGQgLXUiIGhhZCBhIHNlcmlvdXMgZGF0YSBjb3JydXB0aW9uIHByb2JsZW0gaW4gb25lCisgICAgIHNwZWNpYWwgY2FzZSAod2hlbiB0aGUgY2hhbmdlcyB0byBhIHN1YmRpcmVjdG9yeSdzIGZpbGVzCisgICAgIGNvbnNpc3Qgb25seSBkZWxldGlvbiBvZiBmaWxlcykuCisKKyAgIC0gImdpdCBhZGQgLXUgPHBhdGg+IiBkaWQgbm90IHdvcmsgZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICAgLSAiZ2l0IGFwcGx5IiBsZWZ0IGFuIGVtcHR5IGRpcmVjdG9yeSBhZnRlciBhbGwgaXRzIGZpbGVzIGFyZQorICAgICByZW5hbWVkIGF3YXkuCisKKyAgIC0gImdpdCAkYW55Y21kIGZvby9iYXIiLCB3aGVuIHRoZXJlIGlzIGEgZmlsZSAnZm9vJyBpbiB0aGUKKyAgICAgd29ya2luZyB0cmVlLCBjb21wbGFpbmVkIHRoYXQgImdpdCAkYW55Y21kIGZvby9iYXIgLS0iIGZvcm0KKyAgICAgc2hvdWxkIGJlIHVzZWQgdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gcmV2cyBhbmQgZmlsZXMsCisgICAgIHdoaWNoIHdhcyBjb21wbGV0ZWx5IGJvZ3VzLgorCisgICAtICJnaXQgY2hlY2tvdXQtaW5kZXgiIGFuZCBvdGhlciBjb21tYW5kcyB0aGF0IGNoZWNrcyBvdXQKKyAgICAgZmlsZXMgdG8gdGhlIHdvcmsgdHJlZSB0cmllZCB1bmxpbmsoMikgb24gZGlyZWN0b3JpZXMsCisgICAgIHdoaWNoIGlzIGEgc2FuZSB0aGluZyB0byBkbyBvbiBzYW5lIHN5c3RlbXMsIGJ1dCBub3Qgb24KKyAgICAgU29sYXJpcyB3aGVuIHlvdSBhcmUgcm9vdC4KKworICogRG9jdW1lbnRhdGlvbiBGaXhlcyBhbmQgVXBkYXRlcworCisgICAtIEEgaGFuZGZ1bCBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODMyOGQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi50eHQKQEAgLTAsMCArMSwxOTcgQEAKK0dJVCB2MS41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFBsdW1iaW5nIGxldmVsIHN1cGVycHJvamVjdCBzdXBwb3J0LgorCisgIFlvdSBjYW4gaW5jbHVkZSBhIHN1YmRpcmVjdG9yeSB0aGF0IGhhcyBhbiBpbmRlcGVuZGVudCBnaXQKKyAgcmVwb3NpdG9yeSBpbiB5b3VyIGluZGV4IGFuZCB0cmVlIG9iamVjdHMgb2YgeW91ciBwcm9qZWN0CisgICgic3VwZXJwcm9qZWN0IikuICBUaGlzIHBsdW1iaW5nIChpLmUuICJjb3JlIikgbGV2ZWwKKyAgc3VwZXJwcm9qZWN0IHN1cHBvcnQgZXhwbGljaXRseSBleGNsdWRlcyByZWN1cnNpdmUgYmVoYXZpb3VyLgorCisgIFRoZSAic3VicHJvamVjdCIgZW50cmllcyBpbiB0aGUgaW5kZXggYW5kIHRyZWVzIG9mIGEgc3VwZXJwcm9qZWN0CisgIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBnaXQuICBFeHBlcmltZW50aW5nIHdpdGgKKyAgdGhlIHBsdW1iaW5nIGxldmVsIHN1cHBvcnQgaXMgZW5jb3VyYWdlZCwgYnV0IGJlIHdhcm5lZCB0aGF0CisgIHVubGVzcyBldmVyeWJvZHkgaW4geW91ciBwcm9qZWN0IHVwZGF0ZXMgdG8gdGhpcyByZWxlYXNlIG9yCisgIGxhdGVyLCB1c2luZyB0aGlzIGZlYXR1cmUgd291bGQgbWFrZSB5b3VyIHByb2plY3QKKyAgaW5hY2Nlc3NpYmxlIGJ5IHBlb3BsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGdpdC4KKworKiBQbHVtYmluZyBsZXZlbCBnaXRhdHRyaWJ1dGVzIHN1cHBvcnQuCisKKyAgVGhlIGdpdGF0dHJpYnV0ZXMgbWVjaGFuaXNtIGFsbG93cyB5b3UgdG8gYWRkICdhdHRyaWJ1dGVzJyB0bworICBwYXRocyBpbiB5b3VyIHByb2plY3QsIGFuZCBhZmZlY3QgdGhlIHdheSBjZXJ0YWluIGdpdAorICBvcGVyYXRpb25zIHdvcmsuICBDdXJyZW50bHkgeW91IGNhbiBpbmZsdWVuY2UgaWYgYSBwYXRoIGlzCisgIGNvbnNpZGVyZWQgYSBiaW5hcnkgb3IgdGV4dCAodGhlIGZvcm1lciB3b3VsZCBiZSB0cmVhdGVkIGJ5CisgICdnaXQgZGlmZicgbm90IHRvIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQ7IHRoZSBsYXR0ZXIgY2FuIGdvCisgIHRocm91Z2ggdGhlIGxpbmUgZW5kaW5ncyBjb252ZXJzaW9uIHByb2Nlc3MgaW4gcmVwb3NpdG9yaWVzCisgIHdpdGggY29yZS5hdXRvY3JsZiBzZXQpLCBleHBhbmQgYW5kIHVuZXhwYW5kICckSWQkJyBrZXl3b3JkCisgIHdpdGggYmxvYiBvYmplY3QgbmFtZSwgc3BlY2lmeSBhIGN1c3RvbSAzLXdheSBtZXJnZSBkcml2ZXIsCisgIGFuZCBzcGVjaWZ5IGEgY3VzdG9tIGRpZmYgZHJpdmVyLiAgWW91IGNhbiBhbHNvIGFwcGx5CisgIGFyYml0cmFyeSBmaWx0ZXIgdG8gY29udGVudHMgb24gY2hlY2staW4vY2hlY2stb3V0IGNvZGVwYXRoCisgIGJ1dCB0aGlzIGZlYXR1cmUgaXMgYW4gZXh0cmVtZWx5IHNoYXJwLWVkZ2VkIHJhem9yIGFuZCBuZWVkcworICB0byBiZSBoYW5kbGVkIHdpdGggY2F1dGlvbiAoZG8gbm90IHVzZSBpdCB1bmxlc3MgeW91CisgIHVuZGVyc3RhbmQgdGhlIGVhcmxpZXIgbWFpbGluZyBsaXN0IGRpc2N1c3Npb24gb24ga2V5d29yZAorICBleHBhbnNpb24pLiAgVGhlc2UgY29udmVyc2lvbnMgYXBwbHkgd2hlbiBjaGVja2luZyBmaWxlcyBpbgorICBvciBvdXQsIGFuZCBleHBvcnRpbmcgdmlhIGdpdC1hcmNoaXZlLgorCisqIFRoZSBwYWNrZmlsZSBmb3JtYXQgbm93IG9wdGlvbmFsbHkgc3VwcG9ydHMgNjQtYml0IGluZGV4LgorCisgIFRoaXMgcmVsZWFzZSBzdXBwb3J0cyB0aGUgInZlcnNpb24gMiIgZm9ybWF0IG9mIHRoZSAuaWR4CisgIGZpbGUuICBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGEgaHVnZSBwYWNrZmlsZQorICBuZWVkcyBtb3JlIHRoYW4gMzItYml0IHRvIGV4cHJlc3Mgb2Zmc2V0cyBvZiBvYmplY3RzIGluIHRoZQorICBwYWNrLgorCisqIENvbWVzIHdpdGggYW4gdXBkYXRlZCBnaXQtZ3VpIDAuNy4xCisKKyogVXBkYXRlZCBnaXR3ZWI6CisKKyAgLSBjYW4gc2hvdyBjb21iaW5lZCBkaWZmIGZvciBtZXJnZXM7CisgIC0gdXNlcyBmb250IHNpemUgb2YgdXNlcidzIHByZWZlcmVuY2UsIG5vdCBoYXJkY29kZWQgaW4gcGl4ZWxzOworICAtIGNhbiBub3cgJ2dyZXAnOworCisqIE5ldyBjb21tYW5kcyBhbmQgb3B0aW9ucy4KKworICAtICJnaXQgYmlzZWN0IHN0YXJ0IiBjYW4gb3B0aW9uYWxseSB0YWtlIGEgc2luZ2xlIGJhZCBjb21taXQgYW5kCisgICAgemVybyBvciBtb3JlIGdvb2QgY29tbWl0cyBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgIC0gImdpdCBzaG9ydGxvZyIgY2FuIG9wdGlvbmFsbHkgYmUgdG9sZCB0byB3cmFwIGl0cyBvdXRwdXQuCisKKyAgLSAic3VidHJlZSIgbWVyZ2Ugc3RyYXRlZ3kgYWxsb3dzIGFub3RoZXIgcHJvamVjdCB0byBiZSBtZXJnZWQgaW4gYXMKKyAgICB5b3VyIHN1YmRpcmVjdG9yeS4KKworICAtICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIGEgbmV3IC0tc3ViamVjdC1wcmVmaXg9PHN0cmluZz4KKyAgICBvcHRpb24sIHRvIG92ZXJyaWRlIHRoZSBidWlsdC1pbiAiW1BBVENIXSIuCisKKyAgLSAiZ2l0IGFkZCAtdSIgaXMgYSBxdWljayB3YXkgdG8gZG8gdGhlIGZpcnN0IHN0YWdlIG9mICJnaXQKKyAgICBjb21taXQgLWEiIChpLmUuIHVwZGF0ZSB0aGUgaW5kZXggdG8gbWF0Y2ggdGhlIHdvcmtpbmcKKyAgICB0cmVlKTsgaXQgb2J2aW91c2x5IGRvZXMgbm90IG1ha2UgYSBjb21taXQuCisKKyAgLSAiZ2l0IGNsZWFuIiBob25vcnMgYSBuZXcgY29uZmlndXJhdGlvbiwgImNsZWFuLnJlcXVpcmVmb3JjZSIuICBXaGVuCisgICAgc2V0IHRvIHRydWUsIHRoaXMgbWFrZXMgImdpdCBjbGVhbiIgYSBuby1vcCwgcHJldmVudGluZyB5b3UKKyAgICBmcm9tIGxvc2luZyBmaWxlcyBieSB0eXBpbmcgImdpdCBjbGVhbiIgd2hlbiB5b3UgbWVhbnQgdG8KKyAgICBzYXkgIm1ha2UgY2xlYW4iLiAgWW91IGNhbiBzdGlsbCBzYXkgImdpdCBjbGVhbiAtZiIgdG8KKyAgICBvdmVycmlkZSB0aGlzLgorCisgIC0gImdpdCBsb2ciIGZhbWlseSBvZiBjb21tYW5kcyBsZWFybmVkIC0tZGF0ZT17bG9jYWwscmVsYXRpdmUsZGVmYXVsdH0KKyAgICBvcHRpb24uICAtLWRhdGU9cmVsYXRpdmUgaXMgc3lub255bSB0byB0aGUgLS1yZWxhdGl2ZS1kYXRlLgorICAgIC0tZGF0ZT1sb2NhbCBnaXZlcyB0aGUgdGltZXN0YW1wIGluIGxvY2FsIHRpbWV6b25lLgorCisqIFVwZGF0ZWQgYmVoYXZpb3Igb2YgZXhpc3RpbmcgY29tbWFuZHMuCisKKyAgLSBXaGVuICRHSVRfQ09NTUlUVEVSX0VNQUlMIG9yICRHSVRfQVVUSE9SX0VNQUlMIGlzIG5vdCBzZXQKKyAgICBidXQgJEVNQUlMIGlzIHNldCwgdGhlIGxhdHRlciBpcyB1c2VkIGFzIGEgc3Vic3RpdHV0ZS4KKworICAtICJnaXQgZGlmZiAtLXN0YXQiIHNob3dzIHNpemUgb2YgcHJlaW1hZ2UgYW5kIHBvc3RpbWFnZSBibG9icworICAgIGZvciBiaW5hcnkgY29udGVudHMuICBFYXJsaWVyIGl0IG9ubHkgc2FpZCAiQmluIi4KKworICAtICJnaXQgbG9zdC1mb3VuZCIgc2hvd3Mgc3R1ZmYgdGhhdCBhcmUgdW5yZWFjaGFibGUgZXhjZXB0CisgICAgZnJvbSByZWZsb2dzLgorCisgIC0gImdpdCBjaGVja291dCBicmFuY2heMCIgbm93IGRldGFjaGVzIEhFQUQgYXQgdGhlIHRpcCBjb21taXQKKyAgICBvbiB0aGUgbmFtZWQgYnJhbmNoLCBpbnN0ZWFkIG9mIGp1c3Qgc3dpdGNoaW5nIHRvIHRoZQorICAgIGJyYW5jaCAodXNlICJnaXQgY2hlY2tvdXQgYnJhbmNoIiB0byBzd2l0Y2ggdG8gdGhlIGJyYW5jaCwKKyAgICBhcyBiZWZvcmUpLgorCisgIC0gImdpdCBiaXNlY3QgbmV4dCIgY2FuIGJlIHVzZWQgYWZ0ZXIgZ2l2aW5nIG9ubHkgYSBiYWQgY29tbWl0CisgICAgd2l0aG91dCBnaXZpbmcgYSBnb29kIG9uZSAodGhpcyBzdGFydHMgYmlzZWN0aW9uIGhhbGYtd2F5IHRvCisgICAgdGhlIHJvb3QgY29tbWl0KS4gIFdlIHVzZWQgdG8gcmVmdXNlIHRvIG9wZXJhdGUgd2l0aG91dCBhCisgICAgZ29vZCBhbmQgYSBiYWQgY29tbWl0LgorCisgIC0gImdpdCBwdXNoIiwgd2hlbiBwdXNoaW5nIGludG8gbW9yZSB0aGFuIG9uZSByZXBvc2l0b3J5LCBkb2VzCisgICAgbm90IHN0b3AgYXQgdGhlIGZpcnN0IGVycm9yLgorCisgIC0gImdpdCBhcmNoaXZlIiBkb2VzIG5vdCBpbnNpc3QgeW91IHRvIGdpdmUgLS1mb3JtYXQgcGFyYW1ldGVyCisgICAgYW55bW9yZTsgaXQgZGVmYXVsdHMgdG8gInRhciIuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgY2FuIHVzZSBiYWNrZW5kcyBvdGhlciB0aGFuIHNxbGl0ZS4KKworICAtICJnaXR2aWV3IiAoaW4gY29udHJpYi8gc2VjdGlvbikgbGVhcm5lZCB0byBiZXR0ZXIgc3VwcG9ydAorICAgICJnaXQtYW5ub3RhdGUiLgorCisgIC0gImdpdCBkaWZmICRjb21taXQxOiRwYXRoMiAkY29tbWl0MjokcGF0aDIiIGNhbiBub3cgcmVwb3J0CisgICAgbW9kZSBjaGFuZ2VzIGJldHdlZW4gdGhlIHR3byBibG9icy4KKworICAtIExvY2FsICJnaXQgZmV0Y2giIGZyb20gYSByZXBvc2l0b3J5IHdob3NlIG9iamVjdCBzdG9yZSBpcworICAgIG9uZSBvZiB0aGUgYWx0ZXJuYXRlcyAoZS5nLiBmZXRjaGluZyBmcm9tIHRoZSBvcmlnaW4gaW4gYQorICAgIHJlcG9zaXRvcnkgY3JlYXRlZCB3aXRoICJnaXQgY2xvbmUgLWwgLXMiKSBhdm9pZHMKKyAgICBkb3dubG9hZGluZyBvYmplY3RzIHVubmVjZXNzYXJpbHkuCisKKyAgLSAiZ2l0IGJsYW1lIiB1c2VzIC5tYWlsbWFwIHRvIGNhbm9uaWNhbGl6ZSB0aGUgYXV0aG9yIG5hbWUKKyAgICBqdXN0IGxpa2UgImdpdCBzaG9ydGxvZyIgZG9lcy4KKworICAtICJnaXQgcGFjay1vYmplY3RzIiBwYXlzIGF0dGVudGlvbiB0byBwYWNrLmRlcHRoCisgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICAtICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgZG9lcyBub3QgdXNlIC5tc2cgZmlsZSBpbgorICAgIHRoZSB3b3JraW5nIHRyZWUgdG8gcHJlcGFyZSBjb21taXQgbWVzc2FnZTsgaW5zdGVhZCBpdCB1c2VzCisgICAgJEdJVF9ESVIvTUVSR0VfTVNHIGFzIG90aGVyIGNvbW1hbmRzIGRvLgorCisqIEJ1aWxkcworCisgIC0gZ2l0LXA0aW1wb3J0IGhhcyBuZXZlciBiZWVuIGluc3RhbGxlZDsgbm93IHRoZXJlIGlzIGFuCisgICAgaW5zdGFsbGF0aW9uIG9wdGlvbiB0byBkbyBzby4KKworICAtIGdpdGsgYW5kIGdpdC1ndWkgY2FuIGJlIGNvbmZpZ3VyZWQgb3V0LgorCisgIC0gR2VuZXJhdGVkIGRvY3VtZW50YXRpb24gcGFnZXMgYXV0b21hdGljYWxseSBnZXQgdmVyc2lvbgorICAgIGluZm9ybWF0aW9uIGZyb20gR0lUX1ZFUlNJT04uCisKKyAgLSBQYXJhbGxlbCBidWlsZCB3aXRoICJtYWtlIC1qIiBkZXNjZW5kaW5nIGludG8gc3ViZGlyZWN0b3J5CisgICAgd2FzIGZpeGVkLgorCisqIFBlcmZvcm1hbmNlIFR3ZWFrcworCisgIC0gT3B0aW1pemVkICJnaXQtcmV2LWxpc3QgLS1iaXNlY3QiIChoZW5jZSAiZ2l0LWJpc2VjdCIpLgorCisgIC0gT3B0aW1pemVkICJnaXQtYWRkICRwYXRoIiBpbiBhIGxhcmdlIGRpcmVjdG9yeSwgbW9zdCBvZgorICAgIHdob3NlIGNvbnRlbnRzIGFyZSBpZ25vcmVkLgorCisgIC0gT3B0aW1pemVkICJnaXQtZGlmZi10cmVlIiBmb3IgcmVkdWNlZCBtZW1vcnkgZm9vdHByaW50LgorCisgIC0gVGhlIHJlY3Vyc2l2ZSBtZXJnZSBzdHJhdGVneSB1cGRhdGVkIGEgd29ya3RyZWUgZmlsZSB0aGF0CisgICAgd2FzIGNoYW5nZWQgaWRlbnRpY2FsbHkgaW4gdHdvIGJyYW5jaGVzLCB3aGVuIG9uZSBvZiB0aGVtCisgICAgcmVuYW1lZCBpdC4gIFdlIGRvIG5vdCBkbyB0aGF0IHdoZW4gdGhlcmUgaXMgbm8gcmVuYW1lLCBzbworICAgIG1hdGNoIHRoYXQgYmVoYXZpb3VyLiAgVGhpcyBhdm9pZHMgZXhjZXNzaXZlIHJlYnVpbGRzLgorCisgIC0gVGhlIGRlZmF1bHQgcGFjayBkZXB0aCBoYXMgYmVlbiBpbmNyZWFzZWQgdG8gNTAsIGFzIHRoZQorICAgIHJlY2VudCBhZGRpdGlvbiBvZiBkZWx0YV9iYXNlX2NhY2hlIG1ha2VzIGRlZXBlciBkZWx0YSBjaGFpbnMKKyAgICBtdWNoIGxlc3MgZXhwZW5zaXZlIHRvIGFjY2Vzcy4gIERlcGVuZGluZyBvbiB0aGUgcHJvamVjdCwgaXQgd2FzCisgICAgcmVwb3J0ZWQgdGhhdCB0aGlzIHJlZHVjZXMgdGhlIHJlc3VsdGluZyBwYWNrIGZpbGUgYnkgMTAlCisgICAgb3Igc28uCisKKworRml4ZXMgc2luY2UgdjEuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjEgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisqIEJ1Z2ZpeGVzCisKKyAgLSBTd2l0Y2hpbmcgYnJhbmNoZXMgd2l0aCAiZ2l0IGNoZWNrb3V0IiByZWZ1c2VkIHRvIHdvcmsgd2hlbgorICAgIGEgcGF0aCBjaGFuZ2VzIGZyb20gYSBmaWxlIHRvIGEgZGlyZWN0b3J5IGJldHdlZW4gdGhlCisgICAgY3VycmVudCBicmFuY2ggYW5kIHRoZSBuZXcgYnJhbmNoLCBpbiBvcmRlciBub3QgdG8gbG9zZQorICAgIHBvc3NpYmxlIGxvY2FsIGNoYW5nZXMgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGlzIGJlaW5nIHR1cm5lZAorICAgIGludG8gYSBmaWxlIHdpdGggdGhlIHN3aXRjaC4gIFdlIG5vdyBhbGxvdyBzdWNoIGEgYnJhbmNoCisgICAgc3dpdGNoIGFmdGVyIG1ha2luZyBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gbG9jYWxseSBtb2RpZmllZAorICAgIGZpbGUgbm9yIHVuLWlnbm9yZWQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiAgVGhpcyBoYXMgbm90CisgICAgYmVlbiBiYWNrcG9ydGVkIHRvIDEuNS4xLnggc2VyaWVzLCBhcyBpdCBpcyByYXRoZXIgYW4KKyAgICBpbnRydXNpdmUgY2hhbmdlLgorCisgIC0gTWVyZ2luZyBicmFuY2hlcyB0aGF0IGhhdmUgYSBmaWxlIGluIG9uZSBhbmQgYSBkaXJlY3RvcnkgaW4KKyAgICBhbm90aGVyIGF0IHRoZSBzYW1lIHBhdGggdXNlZCB0byBnZXQgcXVpdGUgY29uZnVzZWQuICBXZQorICAgIGhhbmRsZSBzdWNoIGEgY2FzZSBhIGJpdCBtb3JlIGNhcmVmdWxseSwgZXZlbiB0aG91Z2ggdGhhdCBpcworICAgIHN0aWxsIGxlZnQgYXMgYSBjb25mbGljdCBmb3IgdGhlIHVzZXIgdG8gc29ydCBvdXQuICBUaGlzCisgICAgd2lsbCBub3QgYmUgYmFja3BvcnRlZCB0byAxLjUuMS54IHNlcmllcywgYXMgaXQgaXMgcmF0aGVyIGFuCisgICAgaW50cnVzaXZlIGNoYW5nZS4KKworICAtIGdpdC1mZXRjaCBoYWQgdHJvdWJsZSB3aXRoIGEgcmVtb3RlIHdpdGggaW5zYW5lbHkgbGFyZ2UgbnVtYmVyCisgICAgb2YgcmVmcy4KKworICAtICJnaXQgY2xlYW4gLWQgLVgiIG5vdyBkb2VzIG5vdCByZW1vdmUgbm9uLWV4Y2x1ZGVkIGRpcmVjdG9yaWVzLgorCisgIC0gcmViYXNpbmcgKHdpdGhvdXQgLW0pIGEgc2VyaWVzIHRoYXQgY2hhbmdlcyBhIHN5bWxpbmsgdG8gYSBkaXJlY3RvcnkKKyAgICBpbiB0aGUgbWlkZGxlIG9mIGEgcGF0aCBjb25mdXNlZCBnaXQtYXBwbHkgZ3JlYXRseSBhbmQgcmVmdXNlZCB0bworICAgIG9wZXJhdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmY1NDZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4xLnR4dApAQCAtMCwwICsxLDEwIEBACitHSVQgdjEuNS4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBzb2xlbHkgdG8gZml4IHRoZSBnZW5lcmF0ZWQgUlBNJ3MgZGVwZW5kZW5jaWVzLiAgV2UgdXNlZAordG8gaGF2ZSBnaXQtcDQgcGFja2FnZSBidXQgd2UgZG8gbm90IGFueW1vcmUuICBBcyBzdWdnZXN0ZWQgb24KK3RoZSBtYWlsaW5nIGxpc3QsIHRoaXMgcmVsZWFzZSBtYWtlcyBnaXQtY29yZSAiT2Jzb2xldGUiIGdpdC1wNCwKK3NvIHRoYXQgeXVtIHVwZGF0ZSB3b3VsZCBub3QgY29tcGxhaW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJkZTNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4yLnR4dApAQCAtMCwwICsxLDU4IEBACitHSVQgdjEuNS4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1wdXNoIHNlbnQgdGhpbiBwYWNrcyBieSBkZWZhdWx0LCB3aGljaCB3YXMgbm90IGdvb2QgZm9yCisgICB0aGUgcHVibGljIGRpc3RyaWJ1dGlvbiBzZXJ2ZXIgKG5vIHBvaW50IGluIHNhdmluZyB0cmFuc2ZlcgorICAgd2hpbGUgcHVzaGluZzsgbm8gcG9pbnQgaW4gbWFraW5nIHRoZSByZXN1bHRpbmcgcGFjayBsZXNzCisgICBvcHRpbXVtKS4KKworICogZ2l0LXN2biBzb21ldGltZXMgdGVybWluYXRlZCB3aXRoICJNYWxmb3JtZWQgbmV0d29yayBkYXRhIiB3aGVuCisgICB0YWxraW5nIG92ZXIgc3ZuOi8vIHByb3RvY29sLgorCisgKiBnaXQtc2VuZC1lbWFpbCByZS1pc3N1ZWQgdGhlIHNhbWUgbWVzc2FnZS1pZCBhYm91dCAxMCUgb2YgdGhlCisgICB0aW1lIGlmIHlvdSBmaXJlZCBvZmYgMzAgbWVzc2FnZXMgd2l0aGluIGEgc2luZ2xlIHNlY29uZC4KKworICogZ2l0LXN0YXNoIHdhcyBub3QgdGVybWluYXRpbmcgdGhlIGxvZyBtZXNzYWdlIG9mIGNvbW1pdHMgaXQKKyAgIGludGVybmFsbHkgY3JlYXRlcyB3aXRoIExGLgorCisgKiBnaXQtYXBwbHkgZmFpbGVkIHRvIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBwYXRjaCBodW5rIHdoZW4gaXRzCisgICBiZWdpbm5pbmcgcGFydCBtYXRjaGVkIHRoZSByZW1haW5kZXIgb2YgdGhlIHByZWltYWdlIGV4YWN0bHksCisgICBldmVuIHRob3VnaCB0aGUgcHJlaW1hZ2UgcmVjb3JkZWQgaW4gdGhlIGh1bmsgd2FzIG11Y2ggbGFyZ2VyCisgICAodGhlcmVmb3JlIHRoZSBwYXRjaCBzaG91bGQgbm90IGhhdmUgYXBwbGllZCksIGxlYWRpbmcgdG8gYQorICAgc2VnZmF1bHQuCisKKyAqICJnaXQgcm0gZm9vICYmIGdpdCBjb21taXQgZm9vIiBjb21wbGFpbmVkIHRoYXQgJ2ZvbycgbmVlZHMgdG8KKyAgIGJlIGFkZGVkIGZpcnN0LCBpbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIHJlbW92YWwsIHdoaWNoIHdhcyBhCisgICBub25zZW5zZS4KKworICogZ2l0IGdyZXAgLWMgc2FpZCAiL2Rldi9udWxsOiAwIi4KKworICogZ2l0LWFkZCAtdSBmYWlsZWQgdG8gcmVjb2duaXplIGEgYmxvYiB3aG9zZSB0eXBlIGNoYW5nZWQKKyAgIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUgd29yayB0cmVlLgorCisgKiBUaGUgbGltaXQgdG8gcmVuYW1lIGRldGVjdGlvbiBoYXMgYmVlbiB0aWdodGVuZWQgYSBsb3QgdG8KKyAgIHJlZHVjZSBwZXJmb3JtYW5jZSBwcm9ibGVtcyB3aXRoIGEgaHVnZSBjaGFuZ2UuCisKKyAqIGN2c2ltcG9ydCBhbmQgc3ZuaW1wb3J0IGJhcmZlZCB3aGVuIHRoZSBpbnB1dCB0cmllZCB0byBtb3ZlCisgICBhIHRhZy4KKworICogImdpdCBhcHBseSAtcE4iIGRpZCBub3QgY2hvcCB0aGUgcmlnaHQgbnVtYmVyIG9mIGRpcmVjdG9yaWVzLgorCisgKiAiZ2l0IHN2bmltcG9ydCIgZGlkIG5vdCBsaWtlIFNWTiB0YWdzIHdpdGggZnVubnkgY2hhcmFjdGVycyBpbiB0aGVtLgorCisgKiBnaXQtZ3VpIDAuOC4zLCB3aXRoIGFzc29ydGVkIGZpeGVzLCBpbmNsdWRpbmc6CisKKyAgIC0gZm9udC1jaG9vc2VyIG9uIFgxMSB3YXMgdW51c2FibGUgd2l0aCBsYXJnZSBudW1iZXIgb2YgZm9udHM7CisgICAtIGEgZGlmZiB0aGF0IGNvbnRhaW5lZCBhIGRlbGV0ZWQgc3ltbGluayBtYWRlIGl0IGJhcmY7CisgICAtIGFuIHVudHJhY2tlZCBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5IG1hZGUgaXQgZmFydDsKKyAgIC0gYSBmaWxlIHdpdGggJSBpbiBpdHMgbmFtZSBtYWRlIGl0IHZvbWl0OworCisKK0RvY3VtZW50YXRpb24gdXBkYXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzZXIgbWFudWFsIGhhcyBiZWVuIHNvbWV3aGF0IHJlc3RydWN0dXJlZC4gIEkgdGhpbmsgdGhlIG5ldworb3JnYW5pemF0aW9uIGlzIG11Y2ggZWFzaWVyIHRvIHJlYWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjEzODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4zLnR4dApAQCAtMCwwICsxLDMxIEBACitHSVQgdjEuNS4zLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1xdWlsdGltcG9ydCBkaWQgbm90IGxpa2UgaXQgd2hlbiBhIHBhdGNoIGRlc2NyaWJlZCBpbiB0aGUKKyAgIHNlcmllcyBmaWxlIGRvZXMgbm90IGV4aXN0LgorCisgKiBwNCBpbXBvcnRlciBtaXNzZWQgZXhlY3V0YWJsZSBiaXQgaW4gc29tZSBjYXNlcy4KKworICogVGhlIGRlZmF1bHQgc2hlbGwgb24gc29tZSBGcmVlQlNEIGRpZCBub3QgZXhlY3V0ZSB0aGUKKyAgIGFyZ3VtZW50IHBhcnNpbmcgY29kZSBjb3JyZWN0bHkgYW5kIG1hZGUgZ2l0IHVudXNhYmxlLgorCisgKiBnaXQtc3ZuIGluY29ycmVjdGx5IHNwYXduZWQgcGFnZXIgZXZlbiB3aGVuIHRoZSB1c2VyCisgICBleHBsaWNpdGx5IGFza2VkIG5vdCB0by4KKworICogc2FtcGxlIHBvc3QtcmVjZWl2ZSBob29rIG92ZXJxdW90ZWQgdGhlIGVudmVsb3BlIHNlbmRlcgorICAgdmFsdWUuCisKKyAqIGdpdC1hbSBnb3QgY29uZnVzZWQgd2hlbiB0aGUgcGF0Y2ggY29udGFpbmVkIGEgY2hhbmdlIHRoYXQgaXMKKyAgIG9ubHkgYWJvdXQgdHlwZSBhbmQgbm90IGNvbnRlbnRzLgorCisgKiBnaXQtbWVyZ2V0b29sIGRpZCBub3Qgc2hvdyBvdXIgYW5kIHRoZWlyIHZlcnNpb24gb2YgdGhlCisgICBjb25mbGljdGVkIGZpbGUgd2hlbiBzdGFydGVkIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICBwcm9qZWN0LgorCisgKiBnaXQtbWVyZ2V0b29sIGRpZCBub3QgcGFzcyBjb3JyZWN0IG9wdGlvbnMgd2hlbiBpbnZva2luZyBkaWZmMy4KKworICogZ2l0LWxvZyBzb21ldGltZXMgaW52b2tlZCB1bmRlcmx5aW5nICJkaWZmIiBtYWNoaW5lcnkKKyAgIHVubmVjZXNzYXJpbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRiM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy40LnR4dApAQCAtMCwwICsxLDM1IEBACitHSVQgdjEuNS4zLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENoYW5nZSB0byAiZ2l0LWxzLWZpbGVzIiBpbiB2MS41LjMuMyB0aGF0IHdhcyBpbnRyb2R1Y2VkIHRvIHN1cHBvcnQKKyAgIHBhcnRpYWwgY29tbWl0IG9mIHJlbW92YWwgYmV0dGVyIGhhZCBhIHNlZ2ZhdWx0aW5nIGJ1Zywgd2hpY2ggd2FzCisgICBkaWFnbm9zZWQgYW5kIGZpeGVkIGJ5IEtlaXRoIGFuZCBDYXJsLgorCisgKiBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZm9yIHJlbmFtZSBkZXRlY3Rpb24gaGFzIGJlZW4gYmFja3BvcnRlZAorICAgZnJvbSB0aGUgJ21hc3RlcicgYnJhbmNoLgorCisgKiAiZ2l0LWZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShudW1wYXJlbnQpJyIgd2FzIG5vdCB3b3JraW5nCisgICBjb3JyZWN0bHkgYXQgYWxsLCBhbmQgLS1mb3JtYXQ9JyUocGFyZW50KScgd2FzIG5vdCB3b3JraW5nIGZvcgorICAgbWVyZ2UgY29tbWl0cy4KKworICogU2FtcGxlICJwb3N0LXJlY2VpdmUtaG9vayIgaW5jb3JyZWN0bHkgc2VudCBvdXQgcHVzaAorICAgbm90aWZpY2F0aW9uIGUtbWFpbHMgbWFya2VkIGFzICJGcm9tOiAiIHRoZSBjb21taXR0ZXIgb2YgdGhlCisgICBjb21taXQgdGhhdCBoYXBwZW5lZCB0byBiZSBhdCB0aGUgdGlwIG9mIHRoZSBicmFuY2ggdGhhdCB3YXMKKyAgIHB1c2hlZCwgbm90IGZyb20gdGhlIHBlcnNvbiB3aG8gcHVzaGVkLgorCisgKiAiZ2l0LXJlbW90ZSIgZGlkIG5vdCBleGl0IG5vbi16ZXJvIHN0YXR1cyB1cG9uIGVycm9yLgorCisgKiAiZ2l0LWFkZCAtaSIgZGlkIG5vdCByZXNwb25kIHZlcnkgd2VsbCB0byBFT0YgZnJvbSB0dHkgbm9yCisgICBib2d1cyBpbnB1dC4KKworICogImdpdC1yZWJhc2UgLWkiIHNxdWFzaCBzdWJjb21tYW5kIGluY29ycmVjdGx5IG1hZGUgdGhlCisgICBhdXRob3Igb2YgbGF0ZXIgY29tbWl0IHRoZSBhdXRob3Igb2YgcmVzdWx0aW5nIGNvbW1pdCwKKyAgIGluc3RlYWQgb2YgdGFraW5nIGZyb20gdGhlIGZpcnN0IG9uZSBpbiB0aGUgc3F1YXNoZWQgc2VyaWVzLgorCisgKiAiZ2l0LXN0YXNoIGFwcGx5IC0taW5kZXgiIHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogYXV0b2NvbmZpZ3VyYXRpb24gbGVhcm5lZCB0aGF0ICJhciIgY29tbWFuZCBpcyBmb3VuZCBhcyAiZ2FzIiBvbgorICAgc29tZSBzeXN0ZW1zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmMWQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNS50eHQKQEAgLTAsMCArMSw5NCBAQAorR0lUIHYxLjUuMy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21lcyB3aXRoIGdpdC1ndWkgMC44LjQuCisKKyAqICJnaXQtY29uZmlnIiBzaWxlbnRseSBpZ25vcmVkIG9wdGlvbnMgYWZ0ZXIgLS1saXN0OyBub3cgaXQgd2lsbAorICAgZXJyb3Igb3V0IHdpdGggYSB1c2FnZSBtZXNzYWdlLgorCisgKiAiZ2l0LWNvbmZpZyAtLWZpbGUiIGZhaWxlZCBpZiB0aGUgYXJndW1lbnQgdXNlZCBhIHJlbGF0aXZlIHBhdGgKKyAgIGFzIGl0IGNoYW5nZWQgZGlyZWN0b3JpZXMgYmVmb3JlIG9wZW5pbmcgdGhlIGZpbGUuCisKKyAqICJnaXQtY29uZmlnIC0tZmlsZSIgbm93IGRpc3BsYXlzIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2UgaWYgaXQKKyAgIGNhbm5vdCByZWFkIHRoZSBmaWxlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgKiAiZ2l0LWNvbmZpZyIsICJnaXQtZGlmZiIsICJnaXQtYXBwbHkiIGZhaWxlZCBpZiBydW4gZnJvbSBhCisgICBzdWJkaXJlY3Rvcnkgd2l0aCByZWxhdGl2ZSBHSVRfRElSIGFuZCBHSVRfV09SS19UUkVFIHNldC4KKworICogImdpdC1ibGFtZSIgY3Jhc2hlZCBpZiBydW4gZHVyaW5nIGEgbWVyZ2UgY29uZmxpY3QuCisKKyAqICJnaXQtYWRkIC1pIiBkaWQgbm90IGhhbmRsZSBzaW5nbGUgbGluZSBodW5rcyBjb3JyZWN0bHkuCisKKyAqICJnaXQtcmViYXNlIC1pIiBhbmQgImdpdC1zdGFzaCBhcHBseSIgZmFpbGVkIGlmIGV4dGVybmFsIGRpZmYKKyAgIGRyaXZlcnMgd2VyZSB1c2VkIGZvciBvbmUgb3IgbW9yZSBmaWxlcyBpbiBhIGNvbW1pdC4gIFRoZXkgbm93CisgICBhdm9pZCBjYWxsaW5nIHRoZSBleHRlcm5hbCBkaWZmIGRyaXZlcnMuCisKKyAqICJnaXQtbG9nIC0tZm9sbG93IiBkaWQgbm90IHdvcmsgdW5sZXNzIGRpZmYgZ2VuZXJhdGlvbiAoZS5nLiAtcCkKKyAgIHdhcyBhbHNvIHJlcXVlc3RlZC4KKworICogImdpdC1sb2cgLS1mb2xsb3cgLUIiIGRpZCBub3Qgd29yayBhdCBhbGwuICBGaXhlZC4KKworICogImdpdC1sb2cgLU0gLUIiIGRpZCBub3QgY29ycmVjdGx5IGhhbmRsZSBjYXNlcyBvZiB2ZXJ5IGxhcmdlIGZpbGVzCisgICBiZWluZyByZW5hbWVkIGFuZCByZXBsYWNlZCBieSB2ZXJ5IHNtYWxsIGZpbGVzIGluIHRoZSBzYW1lIGNvbW1pdC4KKworICogImdpdC1sb2ciIHByaW50ZWQgZXh0cmEgbmV3bGluZXMgYmV0d2VlbiBjb21taXRzIHdoZW4gYSBkaWZmCisgICB3YXMgZ2VuZXJhdGVkIGludGVybmFsbHkgKGUuZy4gLVMgb3IgLS1mb2xsb3cpIGJ1dCBub3QgZGlzcGxheWVkLgorCisgKiAiZ2l0LXB1c2giIGVycm9yIG1lc3NhZ2UgaXMgbW9yZSBoZWxwZnVsIHdoZW4gcHVzaGluZyB0byBhCisgICByZXBvc2l0b3J5IHdpdGggbm8gbWF0Y2hpbmcgcmVmcyBhbmQgbm9uZSBzcGVjaWZpZWQuCisKKyAqICJnaXQtcHVzaCIgbm93IHJlc3BlY3RzICsgKGZvcmNlIHB1c2gpIG9uIHdpbGRjYXJkIHJlZnNwZWNzLAorICAgbWF0Y2hpbmcgdGhlIGJlaGF2aW9yIG9mIGdpdC1mZXRjaC4KKworICogImdpdC1maWx0ZXItYnJhbmNoIiBub3cgdXBkYXRlcyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBpdAorICAgaGFzIGZpbmlzaGVkIGZpbHRlcmluZyB0aGUgY3VycmVudCBicmFuY2guCisKKyAqICJnaXQtaW5zdGF3ZWIiIG5vIGxvbmdlciBmYWlscyBvbiBNYWMgT1MgWC4KKworICogImdpdC1jdnNleHBvcnRjb21taXQiIGRpZG4ndCBhbHdheXMgY3JlYXRlIG5ldyBwYXJlbnQgZGlyZWN0b3JpZXMKKyAgIGJlZm9yZSB0cnlpbmcgdG8gY3JlYXRlIG5ldyBjaGlsZCBkaXJlY3Rvcmllcy4gIEZpeGVkLgorCisgKiAiZ2l0LWZldGNoIiBwcmludGVkIGEgc2NhcnkgKGJ1dCBib2d1cykgZXJyb3IgbWVzc2FnZSB3aGlsZQorICAgZmV0Y2hpbmcgYSB0YWcgdGhhdCBwb2ludGVkIHRvIGEgdHJlZSBvciBibG9iLiAgVGhlIGVycm9yIGRpZAorICAgbm90IGltcGFjdCBjb3JyZWN0bmVzcywgb25seSB1c2VyIHBlcmNlcHRpb24uICBUaGUgYm9ndXMgZXJyb3IKKyAgIGlzIG5vIGxvbmdlciBwcmludGVkLgorCisgKiAiZ2l0LWxzLWZpbGVzIC0taWdub3JlZCIgZGlkIG5vdCBwcm9wZXJseSBkZXNjZW5kIGludG8gbm9uLWlnbm9yZWQKKyAgIGRpcmVjdG9yaWVzIHRoYXQgdGhlbXNlbHZlcyBjb250YWluZWQgaWdub3JlZCBmaWxlcyBpZiBkX3R5cGUKKyAgIHdhcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBmaWxlc3lzdGVtLiAgVGhpcyBidWcgaW1wYWN0ZWQgc3lzdGVtcworICAgc3VjaCBhcyBBRlMuICBGaXhlZC4KKworICogR2l0IHNlZ2ZhdWx0ZWQgd2hlbiByZWFkaW5nIGFuIGludmFsaWQgLmdpdGF0dHJpYnV0ZXMgZmlsZS4gIEZpeGVkLgorCisgKiBwb3N0LXJlY2VpdmUtZW1haWwgZXhhbXBsZSBob29rIHdhcyBmaXhlZCBmb3Igbm9uLWZhc3QtZm9yd2FyZAorICAgdXBkYXRlcy4KKworICogRG9jdW1lbnRhdGlvbiB1cGRhdGVzIGZvciBzdXBwb3J0ZWQgKGJ1dCBwcmV2aW91c2x5IHVuZG9jdW1lbnRlZCkKKyAgIG9wdGlvbnMgb2YgImdpdC1hcmNoaXZlIiBhbmQgImdpdC1yZWZsb2ciLgorCisgKiAibWFrZSBjbGVhbiIgbm8gbG9uZ2VyIGRlbGV0ZXMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdGhhdCBzaGlwcworICAgd2l0aCB0aGUgZ2l0IHRhcmJhbGwsIG1ha2luZyBtdWx0aXBsZSBhcmNoaXRlY3R1cmUgYnVpbGRzIGVhc2llci4KKworICogImdpdC1yZW1vdGUgc2hvdyBvcmlnaW4iIHNwZXdlZCBhIHdhcm5pbmcgbWVzc2FnZSBmcm9tIFBlcmwKKyAgIHdoZW4gbm8gcmVtb3RlIGlzIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCB2aWEKKyAgIGJyYW5jaC48bmFtZT4ucmVtb3RlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKKyAqIEJ1aWxkaW5nIHdpdGggTk9fUEVSTF9NQUtFTUFLRVIgZXhjZXNzaXZlbHkgcmVidWlsdCBjb250ZW50cworICAgb2YgcGVybC8gc3ViZGlyZWN0b3J5IGJ5IHJld3JpdGluZyBwZXJsLm1hay4KKworICogaHR0cC5zc2xWZXJpZnkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB3ZXJlIG5vdCB1c2VkIGluIHNjcmlwdGVkCisgICBQb3JjZWxhaW5zLgorCisgKiAiZ2l0LWFkZCIgbGVha2VkIGEgYml0IG9mIG1lbW9yeSB3aGlsZSBzY2FubmluZyBmb3IgZmlsZXMgdG8gYWRkLgorCisgKiBBIGZldyB3b3JrYXJvdW5kcyB0byBzcXVlbGNoIGZhbHNlIHdhcm5pbmdzIGZyb20gcmVjZW50IGdjYyBoYXZlCisgICBiZWVuIGFkZGVkLgorCisgKiAiZ2l0LXNlbmQtcGFjayAkcmVtb3RlIGZyb3R6IiBzZWdmYXVsdGVkIHdoZW4gdGhlcmUgaXMgbm90aGluZworICAgbmFtZWQgJ2Zyb3R6JyBvbiB0aGUgbG9jYWwgZW5kLgorCisgKiAiZ2l0LXJlYmFzZSAtLWludGVyYWN0aXZlIiBkaWQgbm90IGhhbmRsZSBpdHMgIi0tc3RyYXRlZ3kiIG9wdGlvbgorICAgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjlhMmIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy42LnR4dApAQCAtMCwwICsxLDQ4IEBACitHSVQgdjEuNS4zLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1jdnNleHBvcnRjb21taXQgaGFuZGxlcyByb290IGNvbW1pdHMgYmV0dGVyLgorCisgKiBnaXQtc3ZuIGRjb21taXQgdXNlZCB0byBjbG9iYmVyIHdoZW4gc2VuZGluZyBhIHNlcmllcyBvZgorICAgcGF0Y2hlcy4KKworICogZ2l0LXN2biBkY29tbWl0IGZhaWxlZCBhZnRlciBhdHRlbXB0aW5nIHRvIHJlYmFzZSB3aGVuCisgICBzdGFydGVkIHdpdGggYSBkaXJ0eSBpbmRleDsgbm93IGl0IHN0b3BzIHVwZnJvbnQuCisKKyAqIGdpdC1ncmVwIHNvbWV0aW1lcyByZWZ1c2VkIHRvIHdvcmsgd2hlbiB5b3VyIGluZGV4IHdhcworICAgdW5tZXJnZWQuCisKKyAqICJnaXQtZ3JlcCAtQTEgLUIyIiBhY3RlZCBhcyBpZiBpdCB3YXMgdG9sZCB0byBydW4gImdpdCAtQTEgLUIyMSIuCisKKyAqIGdpdC1oYXNoLW9iamVjdCBkaWQgbm90IGhvbm9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCBzdWNoIGFzCisgICBjb3JlLmNvbXByZXNzaW9uLgorCisgKiBnaXQtaW5kZXgtcGFjayBjaG9rZWQgb24gYSBodWdlIHBhY2sgb24gMzItYml0IG1hY2hpbmVzLCBldmVuIHdoZW4KKyAgIGxhcmdlIGZpbGUgb2Zmc2V0cyBhcmUgc3VwcG9ydGVkLgorCisgKiBhdG9tIGZlZWRzIGZyb20gZ2l0LXdlYiBzYWlkICIxMCIgZm9yIHRoZSBtb250aCBvZiBOb3ZlbWJlci4KKworICogYSBtZW1vcnkgbGVhayBpbiBjb21taXQgd2Fsa2VyIHdhcyBwbHVnZ2VkLgorCisgKiBXaGVuIGdpdC1zZW5kLWVtYWlsIGluc2VydGVkIHRoZSBvcmlnaW5hbCBhdXRob3IncyBGcm9tOgorICAgYWRkcmVzcyBpbiBib2R5LCBpdCBkaWQgbm90IG1hcmsgdGhlIG1lc3NhZ2Ugd2l0aAorICAgQ29udGVudC10eXBlOiBhcyBuZWVkZWQuCisKKyAqIGdpdC1yZXZlcnQgYW5kIGdpdC1jaGVycnktcGljayBpbmNvcnJlY3RseSByZWZ1c2VkIHRvIHN0YXJ0CisgICB3aGVuIHRoZSB3b3JrIHRyZWUgd2FzIGRpcnR5LgorCisgKiBnaXQtY2xlYW4gZGlkIG5vdCBob25vciBjb3JlLmV4Y2x1ZGVzZmlsZSBjb25maWd1cmF0aW9uLgorCisgKiBnaXQtYWRkIG1pc2hhbmRsZWQgIi5naXRpZ25vcmUiIGZpbGVzIHdoZW4gYXBwbHlpbmcgdGhlbSB0bworICAgc3ViZGlyZWN0b3JpZXMuCisKKyAqIFdoaWxlIGltcG9ydGluZyBhIHRvbyBicmFuY2h5IGhpc3RvcnksIGdpdC1mYXN0aW1wb3J0IGRpZCBub3QKKyAgIGhvbm9yIGRlbHRhIGRlcHRoIGxpbWl0IHByb3Blcmx5LgorCisgKiBTdXBwb3J0IGZvciB6bGliIGltcGxlbWVudGF0aW9ucyB0aGF0IGxhY2sgWkxJQl9WRVJOVU0gYW5kIGRlZmluaXRpb24KKyAgIG9mIGRlZmxhdGVCb3VuZCgpIGhhcyBiZWVuIGFkZGVkLgorCisgKiBRdWl0ZSBhIGxvdCBvZiBkb2N1bWVudGF0aW9uIGNsYXJpZmljYXRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2OTA2MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNy50eHQKQEAgLTAsMCArMSw0NSBAQAorR0lUIHYxLjUuMy43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBnaXQtc2VuZC1lbWFpbCBhZGRlZCA4LWJpdCBjb250ZW50cyB0byB0aGUgcGF5bG9hZCB3aXRob3V0CisgICBtYXJraW5nIGl0IGFzIDgtYml0IGluIGEgQ1RFIGhlYWRlci4KKworICogImdpdC1idW5kbGUgY3JlYXRlIGEuYm5kbCBIRUFEIiBkZXJlZmVyZW5jZWQgdGhlIHN5bXJlZiBhbmQKKyAgIGRpZCBub3QgcmVjb3JkIHRoZSByZWYgYXMgJ0hFQUQnOyB0aGlzIHByZXZlbnRlZCBhIGJ1bmRsZQorICAgZnJvbSBiZWluZyB1c2VkIGFzIGEgbm9ybWFsIHNvdXJjZSBvZiBnaXQtY2xvbmUuCisKKyAqIFRoZSBjb2RlIHRvIHJlamVjdCBub25zZW5zZSBjb21tYW5kIGxpbmUgb2YgdGhlIGZvcm0KKyAgICJnaXQtY29tbWl0IC1hIHBhdGhzLi4uIiBhbmQgImdpdC1jb21taXQgLS1pbnRlcmFjdGl2ZQorICAgcGF0aHMuLi4iIHdlcmUgYnJva2VuLgorCisgKiBBZGRpbmcgYSBzaWduYXR1cmUgdGhhdCBpcyBub3QgQVNDSUktb25seSB0byBhbiBvcmlnaW5hbAorICAgY29tbWl0IHRoYXQgaXMgQVNDSUktb25seSB3b3VsZCBtYWtlIHRoZSByZXN1bHQgbm9uLUFTQ0lJLgorICAgImdpdC1mb3JtYXQtcGF0Y2ggLXMiIGRpZCBub3QgbWFyayBzdWNoIGEgbWVzc2FnZSBjb3JyZWN0bHkKKyAgIHdpdGggTUlNRSBlbmNvZGluZyBoZWFkZXIuCisKKyAqIGdpdC1hZGQgc29tZXRpbWVzIGRpZCBub3QgbWFyayB0aGUgcmVzdWx0aW5nIGluZGV4IGVudHJ5CisgICBzdGF0LWNsZWFuLiAgVGhpcyBhZmZlY3RlZCBvbmx5IGNhc2VzIHdoZW4gYWRkaW5nIHRoZQorICAgY29udGVudHMgd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHByZXZpb3VzbHkgc3RhZ2VkCisgICBjb250ZW50cywgYW5kIHRoZSBwcmV2aW91cyBzdGFnaW5nIG1hZGUgdGhlIGluZGV4IGVudHJ5CisgICAicmFjaWx5IGNsZWFuIi4KKworICogZ2l0LWNvbW1pdCBkaWQgbm90IGhvbm9yIEdJVF9JTkRFWF9GSUxFIHRoZSB1c2VyIGhhZCBpbiB0aGUKKyAgIGVudmlyb25tZW50LgorCisgKiBXaGVuIGNoZWNraW5nIG91dCBhIHJldmlzaW9uLCBnaXQtY2hlY2tvdXQgZGlkIG5vdCByZXBvcnQgd2hlcmUgdGhlCisgICB1cGRhdGVkIEhFQUQgaXMgaWYgeW91IGhhcHBlbmVkIHRvIGhhdmUgYSBmaWxlIGNhbGxlZCBIRUFEIGluIHRoZQorICAgd29yayB0cmVlLgorCisgKiAiZ2l0LXJldi1saXN0IC0tb2JqZWN0cyIgbWlzaGFuZGxlZCBhIHRyZWUgdGhhdCBwb2ludHMgYXQgYQorICAgc3VibW9kdWxlLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgd2FzIG5vdCByZWFkeSBmb3IgcGFja2VkIHJlZnMgdGhhdCAiZ2l0IGdjIiBjYW4KKyAgIHByb2R1Y2UgYW5kIGdhdmUgaW5jb3JyZWN0IHJlc3VsdHMuCisKKyAqIE1hbnkgc2NyaXB0ZWQgUG9yY2VsYWlucyB3ZXJlIGNvbmZ1c2VkIHdoZW4geW91IGhhcHBlbmVkIHRvIGhhdmUgYQorICAgZmlsZSBjYWxsZWQgIkhFQUQiIGluIHlvdXIgd29yayB0cmVlLgorCitBbHNvIGl0IGNvbnRhaW5zIHVwZGF0ZXMgdG8gdGhlIHVzZXIgbWFudWFsIGFuZCBkb2N1bWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzZmY1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuOC50eHQKQEAgLTAsMCArMSwyNSBAQAorR0lUIHYxLjUuMy44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy43CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBTb21lIGRvY3VtZW50YXRpb24gdXNlZCAiZW1haWwuY29tIiBhcyBhbiBleGFtcGxlIGRvbWFpbi4KKworICogZ2l0LXN2biBmaXggdG8gaGFuZGxlIGZ1bmt5IGJyYW5jaCBhbmQgcHJvamVjdCBuYW1lcyBnb2luZyBvdmVyCisgICBodHRwL2h0dHBzIGNvcnJlY3RseS4KKworICogZ2l0LXN2biBmaXggdG8gdG9uZSBkb3duIGEgbmVlZGxlc3NseSBhbGFybWluZyB3YXJuaW5nIG1lc3NhZ2UuCisKKyAqIGdpdC1jbG9uZSBkaWQgbm90IGNvcnJlY3RseSByZXBvcnQgZXJyb3JzIHdoaWxlIGZldGNoaW5nIG92ZXIgaHR0cC4KKworICogZ2l0LXNlbmQtZW1haWwgYWRkZWQgcmVkdW5kYW50IE1lc3NhZ2UtSWQ6IGhlYWRlciB0byB0aGUgb3V0Z29pbmcKKyAgIGUtbWFpbCB3aGVuIHRoZSBwYXRjaCB0ZXh0IGFscmVhZHkgaGFkIG9uZS4KKworICogYSByZWFkLWJleW9uZC1lbmQtb2YtYnVmZmVyIGJ1ZyBpbiBjb25maWd1cmF0aW9uIGZpbGUgdXBkYXRlciB3YXMgZml4ZWQuCisKKyAqIGdpdC1ncmVwIHVzZWQgdG8gc2hvdyB0aGUgc2FtZSBoaXQgcmVwZWF0ZWRseSBmb3IgdW5tZXJnZWQgcGF0aHMuCisKKyAqIEFmdGVyIGFtZW5kaW5nIHRoZSBwYXRjaCB0aXRsZSBpbiAiZ2l0LWFtIC1pIiwgdGhlIGNvbW1hbmQgZGlkIG5vdAorICAgcmVwb3J0IHRoZSBwYXRjaCBpdCBhcHBsaWVkIHdpdGggdGhlIHVwZGF0ZWQgdGl0bGUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2OGQzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMudHh0CkBAIC0wLDAgKzEsMzY2IEBACitHSVQgdjEuNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgY29tbWl0IHdhbGtlcnMgb3RoZXIgdGhhbiBodHRwIGFyZSBvZmZpY2lhbGx5IGRlcHJlY2F0ZWQsCisgIGJ1dCBzdGlsbCBzdXBwb3J0ZWQgZm9yIG5vdy4KKworKiBUaGUgc3VibW9kdWxlIHN1cHBvcnQgaGFzIFBvcmNlbGFpbiBsYXllci4KKworICBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgc3VibW9kdWxlIHN1cHBvcnQgaXMgbWluaW1hbCBhbmQgdGhpcyBpcworICBkZWxpYmVyYXRlbHkgc28uICBBIGRlc2lnbiBkZWNpc2lvbiB3ZSBtYWRlIGlzIHRoYXQgb3BlcmF0aW9ucworICBhdCB0aGUgc3VwZXJtb2R1bGUgbGV2ZWwgZG8gbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIGJ5CisgIGRlZmF1bHQuICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBsYXRlciB3ZSB3b3VsZCBhZGQgYQorICBtZWNoYW5pc20gdG8gdGVsbCBnaXQgd2hpY2ggc3VibW9kdWxlcyB0aGUgdXNlciBpcyBpbnRlcmVzdGVkCisgIGluLCBhbmQgdGhpcyBpbmZvcm1hdGlvbiBtaWdodCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUKKyAgcmVjdXJzaXZlIGJlaGF2aW91ciBvZiBjZXJ0YWluIGNvbW1hbmRzIChlLmcuICJnaXQgY2hlY2tvdXQiCisgIGFuZCAiZ2l0IGRpZmYiKSwgYnV0IGN1cnJlbnRseSB3ZSBoYXZlbid0IGFncmVlZCBvbiB3aGF0IHRoYXQKKyAgbWVjaGFuaXNtIHNob3VsZCBsb29rIGxpa2UuICBUaGVyZWZvcmUsIGlmIHlvdSB1c2Ugc3VibW9kdWxlcywKKyAgeW91IHdvdWxkIHByb2JhYmx5IG5lZWQgImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBvbiB0aGUKKyAgc3VibW9kdWxlcyB5b3UgY2FyZSBhYm91dCBhZnRlciBydW5uaW5nIGEgImdpdCBjaGVja291dCIgYXQKKyAgdGhlIHN1cGVybW9kdWxlIGxldmVsLgorCisqIFRoZXJlIGFyZSBhIGhhbmRmdWwgcGFjay1vYmplY3RzIGNoYW5nZXMgdG8gaGVscCB5b3UgY29wZSBiZXR0ZXIKKyAgd2l0aCByZXBvc2l0b3JpZXMgd2l0aCBwYXRob2xvZ2ljYWxseSBsYXJnZSBibG9icyBpbiB0aGVtLgorCisqIEZvciBwZW9wbGUgd2hvIG5lZWQgdG8gaW1wb3J0IGZyb20gUGVyZm9yY2UsIGEgZnJvbnQtZW5kIGZvcgorICBmYXN0LWltcG9ydCBpcyBpbiBjb250cmliL2Zhc3QtaW1wb3J0Ly4KKworKiBDb21lcyB3aXRoIGdpdC1ndWkgMC44LjIuCisKKyogQ29tZXMgd2l0aCB1cGRhdGVkIGdpdGsuCisKKyogTmV3IGNvbW1hbmRzIGFuZCBvcHRpb25zLgorCisgIC0gImdpdCBsb2cgLS1kYXRlPTxmb3JtYXQ+IiBjYW4gdXNlIG1vcmUgZm9ybWF0czogaXNvODYwMSwgcmZjMjgyMi4KKworICAtIFRoZSBodW5rIGhlYWRlciBvdXRwdXQgZnJvbSAiZ2l0IGRpZmYiIGZhbWlseSBjYW4gYmUgY3VzdG9taXplZAorICAgIHdpdGggdGhlIGF0dHJpYnV0ZXMgbWVjaGFuaXNtLiAgU2VlIGdpdGF0dHJpYnV0ZXMoNSkgZm9yIGRldGFpbHMuCisKKyAgLSAiZ2l0IHN0YXNoIiBhbGxvd3MgeW91IHRvIHF1aWNrbHkgc2F2ZSBhd2F5IHlvdXIgd29yayBpbgorICAgIHByb2dyZXNzIGFuZCByZXBsYXkgaXQgbGF0ZXIgb24gYW4gdXBkYXRlZCBzdGF0ZS4KKworICAtICJnaXQgcmViYXNlIiBsZWFybmVkIGFuICJpbnRlcmFjdGl2ZSIgbW9kZSB0aGF0IGxldCB5b3UKKyAgICBwaWNrIGFuZCByZW9yZGVyIHdoaWNoIGNvbW1pdHMgdG8gcmVidWlsZC4KKworICAtICJnaXQgZnNjayIgY2FuIHNhdmUgaXRzIGZpbmRpbmdzIGluICRHSVRfRElSL2xvc3QtZm91bmQsIHdpdGhvdXQgYQorICAgIHNlcGFyYXRlIGludm9jYXRpb24gb2YgImdpdCBsb3N0LWZvdW5kIiBjb21tYW5kLiAgVGhlIGJsb2JzIHN0b3JlZCBieQorICAgIGxvc3QtZm91bmQgYXJlIHN0b3JlZCBpbiBwbGFpbiBmb3JtYXQgdG8gYWxsb3cgeW91IHRvIGdyZXAgaW4gdGhlbS4KKworICAtICRHSVRfV09SS19UUkVFIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKKyAgICAkR0lUX0RJUiB0byB3b3JrIGluIGEgc3ViZGlyZWN0b3J5IG9mIGEgd29ya2luZyB0cmVlIHRoYXQgaXMKKyAgICBub3QgbG9jYXRlZCBhdCAiJEdJVF9ESVIvLi4iLgorCisgIC0gR2l2aW5nICItLWZpbGU9PGZpbGU+IiBvcHRpb24gdG8gImdpdCBjb25maWciIGlzIHRoZSBzYW1lIGFzCisgICAgcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIEdJVF9DT05GSUc9PGZpbGU+IGVudmlyb25tZW50LgorCisgIC0gImdpdCBsb2ciIGxlYXJuZWQgYSBuZXcgb3B0aW9uICItLWZvbGxvdyIsIHRvIGZvbGxvdworICAgIHJlbmFtaW5nIGhpc3Rvcnkgb2YgYSBzaW5nbGUgZmlsZS4KKworICAtICJnaXQgZmlsdGVyLWJyYW5jaCIgbGV0cyB5b3UgcmV3cml0ZSB0aGUgcmV2aXNpb24gaGlzdG9yeSBvZgorICAgIHNwZWNpZmllZCBicmFuY2hlcy4gWW91IGNhbiBzcGVjaWZ5IGEgbnVtYmVyIG9mIGZpbHRlcnMgdG8KKyAgICBtb2RpZnkgdGhlIGNvbW1pdHMsIGZpbGVzIGFuZCB0cmVlcy4KKworICAtICJnaXQgY3Zzc2VydmVyIiBsZWFybmVkIG5ldyBvcHRpb25zICgtLWJhc2UtcGF0aCwgLS1leHBvcnQtYWxsLAorICAgIC0tc3RyaWN0LXBhdGhzKSBpbnNwaXJlZCBieSAiZ2l0IGRhZW1vbiIuCisKKyAgLSAiZ2l0IGRhZW1vbiAtLWJhc2UtcGF0aC1yZWxheGVkIiBjYW4gaGVscCBtaWdyYXRpbmcgYSByZXBvc2l0b3J5IFVSTAorICAgIHRoYXQgZGlkIG5vdCB1c2UgdG8gdXNlIC0tYmFzZS1wYXRoIHRvIHVzZSAtLWJhc2UtcGF0aC4KKworICAtICJnaXQgY29tbWl0IiBjYW4gdXNlICItdCB0ZW1wbGF0ZWZpbGUiIG9wdGlvbiBhbmQgY29tbWl0LnRlbXBsYXRlCisgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBwcmltZSB0aGUgY29tbWl0IG1lc3NhZ2UgZ2l2ZW4gdG8geW91IGluIHRoZQorICAgIGVkaXRvci4KKworICAtICJnaXQgc3VibW9kdWxlIiBjb21tYW5kIGhlbHBzIHlvdSBtYW5hZ2UgdGhlIHByb2plY3RzIGZyb20KKyAgICB0aGUgc3VwZXJwcm9qZWN0IHRoYXQgY29udGFpbiB0aGVtLgorCisgIC0gSW4gYWRkaXRpb24gdG8gY29yZS5jb21wcmVzc2lvbiBjb25maWd1cmF0aW9uIG9wdGlvbiwKKyAgICBjb3JlLmxvb3NlY29tcHJlc3Npb24gYW5kIHBhY2suY29tcHJlc3Npb24gb3B0aW9ucyBjYW4KKyAgICBpbmRlcGVuZGVudGx5IHR3ZWFrIHpsaWIgY29tcHJlc3Npb24gbGV2ZWxzIHVzZWQgZm9yIGxvb3NlCisgICAgYW5kIHBhY2tlZCBvYmplY3RzLgorCisgIC0gImdpdCBscy10cmVlIC1sIiBzaG93cyBzaXplIG9mIGJsb2JzIHBvaW50ZWQgYXQgYnkgdGhlCisgICAgdHJlZSBlbnRyaWVzLCBzaW1pbGFyIHRvICIvYmluL2xzIC1sIi4KKworICAtICJnaXQgcmV2LWxpc3QiIGxlYXJuZWQgLS1yZWdleHAtaWdub3JlLWNhc2UgYW5kCisgICAgLS1leHRlbmRlZC1yZWdleHAgb3B0aW9ucyB0byB0d2VhayBpdHMgbWF0Y2hpbmcgbG9naWMgdXNlZAorICAgIGZvciAtLWdyZXAgZmlsdGVyaW5nLgorCisgIC0gImdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIiBpcyBhIGhhbmRpZXIgd2F5IHRvIGNhbGwgbW9yZQorICAgIG9ic2N1cmUgY29tbWFuZCAiZ2l0IG5hbWUtcmV2IC0tdGFncyIuCisKKyAgLSAiZ2l0IGdjIC0tYWdncmVzc2l2ZSIgdGVsbHMgdGhlIGNvbW1hbmQgdG8gc3BlbmQgbW9yZSBjeWNsZXMKKyAgICB0byBvcHRpbWl6ZSB0aGUgcmVwb3NpdG9yeSBoYXJkZXIuCisKKyAgLSAiZ2l0IHJlcGFjayIgbGVhcm5lZCBhICJ3aW5kb3ctbWVtb3J5IiBsaW1pdCB3aGljaAorICAgIGR5bmFtaWNhbGx5IHJlZHVjZXMgdGhlIHdpbmRvdyBzaXplIHRvIHN0YXkgd2l0aGluIHRoZQorICAgIHNwZWNpZmllZCBtZW1vcnkgdXNhZ2UuCisKKyAgLSAiZ2l0IHJlcGFjayIgY2FuIGJlIHRvbGQgdG8gc3BsaXQgcmVzdWx0aW5nIHBhY2tzIHRvIGF2b2lkCisgICAgZXhjZWVkaW5nIGxpbWl0IHNwZWNpZmllZCB3aXRoICItLW1heC1wYWNrLXNpemUiLgorCisgIC0gImdpdCBmc2NrIiBnYWluZWQgLS12ZXJib3NlIG9wdGlvbi4gIFRoaXMgaXMgcmVhbGx5IHJlYWxseQorICAgIHZlcmJvc2UgYnV0IGl0IG1pZ2h0IGhlbHAgeW91IGlkZW50aWZ5IGV4YWN0IGNvbW1pdCB0aGF0IGlzCisgICAgY29ycnVwdCBpbiB5b3VyIHJlcG9zaXRvcnkuCisKKyAgLSAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAtLW51bWJlcmVkLWZpbGVzIG9wdGlvbi4gIFRoaXMKKyAgICBtYXkgYmUgdXNlZnVsIGZvciBNSCB1c2Vycy4KKworICAtICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIGZvcm1hdC5zdWJqZWN0cHJlZml4IGNvbmZpZ3VyYXRpb24KKyAgICB2YXJpYWJsZSwgd2hpY2ggc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UgYXMgIi0tc3ViamVjdC1wcmVmaXgiCisgICAgb3B0aW9uLgorCisgIC0gImdpdCB0YWcgLW4gLWwiIHNob3dzIHRhZyBhbm5vdGF0aW9ucyB3aGlsZSBsaXN0aW5nIHRhZ3MuCisKKyAgLSAiZ2l0IGN2c2ltcG9ydCIgY2FuIG9wdGlvbmFsbHkgdXNlIHRoZSBzZXBhcmF0ZS1yZW1vdGUgbGF5b3V0LgorCisgIC0gImdpdCBibGFtZSIgY2FuIGJlIHRvbGQgdG8gc2VlIHRocm91Z2ggY29tbWl0cyB0aGF0IGNoYW5nZQorICAgIHdoaXRlc3BhY2VzIGFuZCBpbmRlbnRhdGlvbiBsZXZlbHMgd2l0aCAiLXciIG9wdGlvbi4KKworICAtICJnaXQgc2VuZC1lbWFpbCIgY2FuIGJlIHRvbGQgbm90IHRvIHRocmVhZCB0aGUgbWVzc2FnZXMgd2hlbgorICAgIHNlbmRpbmcgb3V0IG1vcmUgdGhhbiBvbmUgcGF0Y2hlcy4KKworICAtICJnaXQgc2VuZC1lbWFpbCIgY2FuIGFsc28gYmUgdG9sZCBob3cgdG8gZmluZCB3aG9tIHRvIGNjIHRoZQorICAgIG1lc3NhZ2UgdG8gZm9yIGVhY2ggbWVzc2FnZSB2aWEgLS1jYy1jbWQuCisKKyAgLSAiZ2l0IGNvbmZpZyIgbGVhcm5lZCBOVUwgdGVybWluYXRlZCBvdXRwdXQgZm9ybWF0IHZpYSAteiB0bworICAgIGhlbHAgc2NyaXB0cy4KKworICAtICJnaXQgYWRkIiBsZWFybmVkICItLXJlZnJlc2ggPHBhdGhzPi4uLiIgb3B0aW9uIHRvIHNlbGVjdGl2ZWx5IHJlZnJlc2gKKyAgICB0aGUgY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24uCisKKyAgLSAiZ2l0IGluaXQgLXEiIG1ha2VzIHRoZSBjb21tYW5kIHF1aWV0ZXIuCisKKyAgLSAiZ2l0IC1wIGNvbW1hbmQiIG5vdyBoYXMgYSBjb3VzaW4gb2Ygb3Bwb3NpdGUgc2V4LCAiZ2l0IC0tbm8tcGFnZXIKKyAgICBjb21tYW5kIi4KKworKiBVcGRhdGVkIGJlaGF2aW9yIG9mIGV4aXN0aW5nIGNvbW1hbmRzLgorCisgIC0gImdpdHdlYiIgY2FuIG9mZmVyIG11bHRpcGxlIHNuYXBzaG90IGZvcm1hdHMuCisKKyAgICAqKipOT1RFKioqIFVuZm9ydHVuYXRlbHksIHRoaXMgY2hhbmdlcyB0aGUgZm9ybWF0IG9mIHRoZQorICAgICRmZWF0dXJle3NuYXBzaG90fXtkZWZhdWx0fSBlbnRyeSBpbiB0aGUgcGVyLXNpdGUKKyAgICBjb25maWd1cmF0aW9uIGZpbGUgJ2dpdHdlYl9jb25maWcucGVybCcuICBJdCB1c2VkIHRvIGJlIGEKKyAgICB0aHJlZS1lbGVtZW50IHR1cGxlIHRoYXQgZGVzY3JpYmUgYSBzaW5nbGUgZm9ybWF0OyB3aXRoIHRoZQorICAgIG5ldyBjb25maWd1cmF0aW9uIGl0ZW0gZm9ybWF0LCB5b3Ugb25seSBoYXZlIHRvIHNheSB0aGUgbmFtZQorICAgIG9mIHRoZSBmb3JtYXQgKCd0Z3onLCAndGJ6Micgb3IgJ3ppcCcpLiAgUGxlYXNlIHVwZGF0ZSB0aGUKKyAgICB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBhY2NvcmRpbmdseS4KKworICAtICJnaXQgY2xvbmUiIHVzZXMgLWwgKGhhcmRsaW5rIGZpbGVzIHVuZGVyIC5naXQpIGJ5IGRlZmF1bHQgd2hlbgorICAgIGNsb25pbmcgbG9jYWxseS4KKworICAtIFVSTCB1c2VkIGZvciAiZ2l0IGNsb25lIiBhbmQgZnJpZW5kcyBjYW4gc3BlY2lmeSBub25zdGFuZGFyZCBTU0ggcG9ydAorICAgIGJ5IHVzaW5nIHNzaDovL2hvc3Q6cG9ydC9wYXRoL3RvL3JlcG8gc3ludGF4LgorCisgIC0gImdpdCBidW5kbGUgY3JlYXRlIiBjYW4gbm93IGNyZWF0ZSBhIGJ1bmRsZSB3aXRob3V0IG5lZ2F0aXZlIHJlZnMsCisgICAgaS5lLiAiZXZlcnl0aGluZyBzaW5jZSB0aGUgYmVnaW5uaW5nIHVwIHRvIGNlcnRhaW4gcG9pbnRzIi4KKworICAtICJnaXQgZGlmZiIgKGJ1dCBub3QgdGhlIHBsdW1iaW5nIGxldmVsICJnaXQgZGlmZi10cmVlIikgbm93CisgICAgcmVjdXJzaXZlbHkgZGVzY2VuZHMgaW50byB0cmVlcyBieSBkZWZhdWx0LgorCisgIC0gImdpdCBkaWZmIiBkb2VzIG5vdCBzaG93IGRpZmZlcmVuY2VzIHRoYXQgY29tZSBvbmx5IGZyb20KKyAgICBzdGF0LWRpcnRpbmVzcyBpbiB0aGUgZm9ybSBvZiAiZGlmZiAtLWdpdCIgaGVhZGVyIGFueW1vcmUuCisgICAgSXQgcnVucyAidXBkYXRlLWluZGV4IC0tcmVmcmVzaCIgc2lsZW50bHkgYXMgbmVlZGVkLgorCisgIC0gImdpdCB0YWcgLWwiIHVzZWQgdG8gbWF0Y2ggdGFncyBieSBnbG9iYmluZyBpdHMgcGFyYW1ldGVyIGFzIGlmIGl0CisgICAgaGFzIHdpbGRjYXJkICcqJyBvbiBib3RoIGVuZHMsIHdoaWNoIG1hZGUgImdpdCB0YWcgLWwgZ3VpIiB0byBtYXRjaAorICAgIHRhZyAnZ2l0Z3VpLTAuNy4wJzsgdGhpcyB3YXMgdmVyeSBhbm5veWluZy4gIFlvdSBub3cgaGF2ZSB0byBhZGQKKyAgICBhc3RlcmlzayBvbiB0aGUgc2lkZXMgeW91IHdhbnQgdG8gd2lsZGNhcmQgeW91cnNlbGYuCisKKyAgLSBUaGUgZWRpdG9yIHRvIHVzZSB3aXRoIG1hbnkgaW50ZXJhY3RpdmUgY29tbWFuZHMgY2FuIGJlCisgICAgb3ZlcnJpZGRlbiB3aXRoIEdJVF9FRElUT1IgZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGlmIGl0CisgICAgZG9lcyBub3QgZXhpc3QsIHdpdGggY29yZS5lZGl0b3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIEFzCisgICAgYmVmb3JlLCBpZiB5b3UgaGF2ZSBuZWl0aGVyLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgVklTVUFMCisgICAgYW5kIEVESVRPUiBhcmUgY29uc3VsdGVkIGluIHRoaXMgb3JkZXIsIGFuZCB0aGVuIGZpbmFsbHkgd2UKKyAgICBmYWxsIGJhY2sgb24gInZpIi4KKworICAtICJnaXQgcm0gLS1jYWNoZWQiIGRvZXMgbm90IGNvbXBsYWluIHdoZW4gcmVtb3ZpbmcgYSBuZXdseQorICAgIGFkZGVkIGZpbGUgZnJvbSB0aGUgaW5kZXggYW55bW9yZS4KKworICAtIE9wdGlvbnMgdG8gImdpdCBsb2ciIHRvIGFmZmVjdCBob3cgLS1ncmVwLy0tYXV0aG9yIG9wdGlvbnMgbG9vayBmb3IKKyAgICBnaXZlbiBzdHJpbmdzIG5vdyBoYXZlIHNob3J0ZXIgYWJicmV2aWF0aW9ucy4gIC1pIGlzIGZvciBpZ25vcmUgY2FzZSwKKyAgICBhbmQgLUUgaXMgZm9yIGV4dGVuZGVkIHJlZ2V4cC4KKworICAtICJnaXQgbG9nIiBsZWFybmVkIC0tbG9nLXNpemUgdG8gc2hvdyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluCisgICAgdGhlIGxvZyBtZXNzYWdlIHBhcnQgb2YgdGhlIG91dHB1dCB0byBoZWxwIHFnaXQuCisKKyAgLSAiZ2l0IGxvZyAtLW5hbWUtc3RhdHVzIiBkb2VzIG5vdCByZXF1aXJlIHlvdSB0byBnaXZlICItciIgYW55bW9yZS4KKyAgICBBcyBhIGdlbmVyYWwgcnVsZSwgUG9yY2VsYWluIGNvbW1hbmRzIHNob3VsZCByZWN1cnNlIHdoZW4gc2hvd2luZworICAgIGRpZmYuCisKKyAgLSAiZ2l0IGZvcm1hdC1wYXRjaCAtLXJvb3QgQSIgY2FuIGJlIHVzZWQgdG8gZm9ybWF0IGV2ZXJ5dGhpbmcKKyAgICBzaW5jZSB0aGUgYmVnaW5uaW5nIHVwIHRvIEEuICBUaGlzIHdhcyBzdXBwb3J0ZWQgd2l0aAorICAgICJnaXQgZm9ybWF0LXBhdGNoIC0tcm9vdCBBIEEiIGZvciBhIGxvbmcgdGltZSwgYnV0IHdhcyBub3QKKyAgICBwcm9wZXJseSBkb2N1bWVudGVkLgorCisgIC0gImdpdCBzdm4gZGNvbW1pdCIgcmV0YWlucyBsb2NhbCBtZXJnZSBpbmZvcm1hdGlvbi4KKworICAtICJnaXQgc3ZuaW1wb3J0IiBhbGxvd3MgYW4gZW1wdHkgc3RyaW5nIHRvIGJlIHNwZWNpZmllZCBhcyB0aGUKKyAgICB0cnVuay8gZGlyZWN0b3J5LiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VjayBkYXRhIGZyb20gYSBTVk4KKyAgICByZXBvc2l0b3J5IHRoYXQgZG9lIG5vdCBoYXZlIHRydW5rLyBicmFuY2hlcy8gYW5kIHRhZ3MvIG9yZ2FuaXphdGlvbgorICAgIGF0IGFsbC4KKworICAtICJnaXQgY29uZmlnIiB0byBzZXQgdmFsdWVzIGFsc28gaG9ub3JzIHR5cGUgZmxhZ3MgbGlrZSAtLWJvb2wKKyAgICBhbmQgLS1pbnQuCisKKyAgLSBjb3JlLnF1b3RlcGF0aCBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkIHRvIG1ha2UgdGV4dHVhbCBnaXQKKyAgICBvdXRwdXQgdG8gZW1pdCBtb3N0IG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBwYXRoIGxpdGVyYWxseS4KKworICAtICJnaXQgbWVyZ2V0b29sIiBjaG9vc2VzIGl0cyBiYWNrZW5kIG1vcmUgd2lzZWx5LCB0YWtpbmcKKyAgICBub3RpY2Ugb2YgaXRzIGVudmlyb25tZW50IHN1Y2ggYXMgdXNlIG9mIFgsIEdub21lL0tERSwgZXRjLgorCisgIC0gImdpdHdlYiIgc2hvd3MgbWVyZ2UgY29tbWl0cyBhIGxvdCBuaWNlciB0aGFuIGJlZm9yZS4gIFRoZQorICAgIGRlZmF1bHQgdmlldyB1c2VzIG1vcmUgY29tcGFjdCAtLWNjIGZvcm1hdCwgd2hpbGUgdGhlIFVJCisgICAgYWxsb3dzIHRvIGNob29zZSBub3JtYWwgZGlmZiB3aXRoIGFueSBwYXJlbnQuCisKKyAgLSBzbmFwc2hvdCBmaWxlcyAiZ2l0d2ViIiBjcmVhdGVzIGZyb20gYSByZXBvc2l0b3J5IGF0CisgICAgJHBhdGgvJHByb2plY3QvLmdpdCBhcmUgbW9yZSB1c2VmdWwuICBXZSB1c2UgJHByb2plY3QgcGFydAorICAgIGluIHRoZSBmaWxlbmFtZSwgd2hpY2ggd2UgdXNlZCB0byBkaXNjYXJkLgorCisgIC0gImdpdCBjdnNpbXBvcnQiIGNyZWF0ZXMgbGlnaHR3ZWlnaHQgdGFnczsgdGhlcmUgaXMgbm8KKyAgICBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbiB3ZSBjYW4gcmVjb3JkIGluIGFuIGFubm90YXRlZCB0YWcsCisgICAgYW5kIHRoZSBoYW5kY3JhZnRlZCBvbmVzIHRoZSBvbGQgY29kZSBjcmVhdGVkIHdhcyBub3QKKyAgICBwcm9wZXJseSBmb3JtZWQgYW55d2F5LgorCisgIC0gImdpdCBwdXNoIiBwcmV0ZW5kcyB0aGF0IHlvdSBpbW1lZGlhdGVseSBmZXRjaGVkIGJhY2sgZnJvbQorICAgIHRoZSByZW1vdGUgYnkgdXBkYXRpbmcgY29ycmVzcG9uZGluZyByZW1vdGUgdHJhY2tpbmcKKyAgICBicmFuY2hlcyBpZiB5b3UgaGF2ZSBhbnkuCisKKyAgLSBUaGUgZGlmZnN0YXQgZ2l2ZW4gYWZ0ZXIgYSBtZXJnZSAob3IgYSBwdWxsKSBob25vcnMgdGhlCisgICAgY29sb3IuZGlmZiBjb25maWd1cmF0aW9uLgorCisgIC0gImdpdCBjb21taXQgLS1hbWVuZCIgaXMgbm93IGNvbXBhdGlibGUgd2l0aCB2YXJpb3VzIG1lc3NhZ2Ugc291cmNlCisgICAgb3B0aW9ucyBzdWNoIGFzIC1tLy1DLy1jLy1GLgorCisgIC0gImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAiIHJlbW92ZXMgYmxhbmsgbGluZXMgYWRkZWQgYXQKKyAgICB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCisgIC0gImdpdCBmZXRjaCIgb3ZlciBnaXQgbmF0aXZlIHByb3RvY29scyB3aXRoICItdiIgb3B0aW9uIHNob3dzCisgICAgY29ubmVjdGlvbiBzdGF0dXMsIGFuZCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgb3RoZXIgZW5kLCB0bworICAgIGhlbHAgZGlhZ25vc2luZyBwcm9ibGVtcy4KKworICAtIFdlIHVzZWQgdG8gaGF2ZSBjb3JlLmxlZ2FjeWhlYWRlcnMgY29uZmlndXJhdGlvbiwgd2hlbgorICAgIHNldCB0byBmYWxzZSwgYWxsb3dlZCBnaXQgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0cyBpbiBhIGZvcm1hdAorICAgIHRoYXQgbWltaWNzIHRoZSBmb3JtYXQgdXNlZCBieSBvYmplY3RzIHN0b3JlZCBpbiBwYWNrcy4gIEl0CisgICAgdHVybnMgb3V0IHRoYXQgdGhpcyB3YXMgbm90IHNvIHVzZWZ1bC4gIEFsdGhvdWdoIHdlIHdpbGwKKyAgICBjb250aW51ZSB0byByZWFkIG9iamVjdHMgd3JpdHRlbiBpbiB0aGF0IGZvcm1hdCwgd2UgZG8gbm90CisgICAgaG9ub3IgdGhhdCBjb25maWd1cmF0aW9uIGFueW1vcmUgYW5kIGNyZWF0ZSBsb29zZSBvYmplY3RzIGluCisgICAgdGhlIGxlZ2FjeS90cmFkaXRpb25hbCBmb3JtYXQuCisKKyAgLSAiLS1maW5kLWNvcGllcy1oYXJkZXIiIG9wdGlvbiB0byBkaWZmIGZhbWlseSBjYW4gbm93IGJlCisgICAgc3BlbGxlZCBhcyAiLUMgLUMiIGZvciBicmV2aXR5LgorCisgIC0gImdpdCBtYWlsc3BsaXQiIChoZW5jZSAiZ2l0IGFtIikgY2FuIHJlYWQgZnJvbSBNYWlsZGlyCisgICAgZm9ybWF0dGVkIG1haWxib3hlcy4KKworICAtICJnaXQgY3Zzc2VydmVyIiBkb2VzIG5vdCBiYXJmIHVwb24gc2VlaW5nICJjdnMgbG9naW4iCisgICAgcmVxdWVzdC4KKworICAtICJwYWNrLW9iamVjdHMiIGhvbm9ycyAiZGVsdGEiIGF0dHJpYnV0ZSBzZXQgaW4KKyAgICAuZ2l0YXR0cmlidXRlcy4gIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gZGVsdGlmeSBibG9icyB0aGF0CisgICAgY29tZSBmcm9tIHBhdGhzIHdpdGggZGVsdGEgYXR0cmlidXRlIHNldCB0byBmYWxzZS4KKworICAtICJuZXctd29ya2RpciIgc2NyaXB0IChpbiBjb250cmliKSBjYW4gbm93IGJlIHVzZWQgd2l0aCBhCisgICAgYmFyZSByZXBvc2l0b3J5LgorCisgIC0gImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgdG8gdXNlIGd2aW1kaWZmLgorCisgIC0gImdpdHZpZXciIChpbiBjb250cmliKSBoYXMgYSBiZXR0ZXIgYmxhbWUgaW50ZXJmYWNlLgorCisgIC0gImdpdCBsb2ciIGFuZCBmcmllbmRzIGRpZCBub3QgaGFuZGxlIGEgY29tbWl0IGxvZyBtZXNzYWdlCisgICAgdGhhdCBpcyBsYXJnZXIgdGhhbiAxNmtCOyB0aGV5IGRvIG5vdy4KKworICAtICItLXByZXR0eT1vbmVsaW5lIiBvdXRwdXQgZm9ybWF0IGZvciAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMKKyAgICBkZWFscyB3aXRoICJtYWxmb3JtZWQiIGNvbW1pdCBsb2cgbWVzc2FnZXMgdGhhdCBoYXZlIG1vcmUKKyAgICB0aGFuIG9uZSBsaW5lcyBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGJldHRlci4gIFdlIHVzZWQgdG8KKyAgICBzaG93IHRoZSBmaXJzdCBsaW5lLCBjdXR0aW5nIHRoZSB0aXRsZSBhdCBtaWQtc2VudGVuY2U7IHdlCisgICAgY29uY2F0ZW5hdGUgdGhlbSBpbnRvIGEgc2luZ2xlIGxpbmUgYW5kIHRyZWF0IHRoZSByZXN1bHQgYXMKKyAgICAib25lbGluZSIuCisKKyAgLSAiZ2l0IHA0aW1wb3J0IiBoYXMgYmVlbiBkZW1vdGVkIHRvIGNvbnRyaWIgc3RhdHVzLiAgRm9yCisgICAgYSBzdXBlcmlvciBvcHRpb24sIGNoZWNrb3V0IHRoZSAiZ2l0IHA0IiBmcm9udCBlbmQgdG8KKyAgICAiZ2l0IGZhc3QtaW1wb3J0IiAoYWxzbyBpbiBjb250cmliKS4gIFRoZSBtYW4gcGFnZSBhbmQgcDQKKyAgICBycG0gaGF2ZSBiZWVuIHJlbW92ZWQgYXMgd2VsbC4KKworICAtICJnaXQgbWFpbGluZm8iIChoZW5jZSAiYW0iKSBub3cgdHJpZXMgdG8gc2VlIGlmIHRoZSBtZXNzYWdlCisgICAgaXMgaW4gdXRmLTggZmlyc3QsIGluc3RlYWQgb2YgYXNzdW1pbmcgaXNvLTg4NTktMSwgaWYKKyAgICBpbmNvbWluZyBlLW1haWwgZG9lcyBub3Qgc2F5IHdoYXQgZW5jb2RpbmcgaXQgaXMgaW4uCisKKyogQnVpbGRzCisKKyAgLSBvbGQtc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKG1vc3Qgbm90YWJseSwgYSBmdW5jdGlvbgorICAgIHdpdGhvdXQgcGFyYW1ldGVyIGRlZmluZWQgd2l0aCAiZnVuYygpIiwgbm90ICJmdW5jKHZvaWQpIikKKyAgICBoYXZlIGJlZW4gZXJhZGljYXRlZC4KKworICAtICJnaXQgdGFnIiBhbmQgImdpdCB2ZXJpZnktdGFnIiBoYXZlIGJlZW4gcmV3cml0dGVuIGluIEMuCisKKyogUGVyZm9ybWFuY2UgVHdlYWtzCisKKyAgLSAiZ2l0IHBhY2stb2JqZWN0cyIgYXZvaWRzIHJlLWRlbHRpZmljYXRpb24gY29zdCBieSBjYWNoaW5nCisgICAgc21hbGwgZW5vdWdoIGRlbHRhIHJlc3VsdHMgaXQgY3JlYXRlcyB3aGlsZSBsb29raW5nIGZvciB0aGUKKyAgICBiZXN0IGRlbHRhIGNhbmRpZGF0ZXMuCisKKyAgLSAiZ2l0IHBhY2stb2JqZWN0cyIgbGVhcm5lZCBhIG5ldyBoZXVyaXN0aWMgdG8gcHJlZmVyIGRlbHRhCisgICAgdGhhdCBpcyBzaGFsbG93ZXIgaW4gZGVwdGggb3ZlciB0aGUgc21hbGxlc3QgZGVsdGEKKyAgICBwb3NzaWJsZS4gIFRoaXMgaW1wcm92ZXMgYm90aCBvdmVyYWxsIHBhY2tmaWxlIGFjY2VzcworICAgIHBlcmZvcm1hbmNlIGFuZCBwYWNrZmlsZSBkZW5zaXR5LgorCisgIC0gZGlmZi1kZWx0YSBjb2RlIHRoYXQgaXMgdXNlZCBmb3IgcGFja2luZyBoYXMgYmVlbiBpbXByb3ZlZAorICAgIHRvIHdvcmsgYmV0dGVyIG9uIGJpZyBmaWxlcy4KKworICAtIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFjayBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSwKKyAgICB0aGUgcnVudGltZSB1c2VkIHRvIHRyeSBmaW5kaW5nIGFuIG9iamVjdCBhbHdheXMgZnJvbSB0aGUKKyAgICBuZXdlc3QgcGFja2ZpbGU7IGl0IG5vdyB0cmllcyB0aGUgc2FtZSBwYWNrZmlsZSBhcyB3ZSBmb3VuZAorICAgIHRoZSBvYmplY3QgcmVxdWVzdGVkIHRoZSBsYXN0IHRpbWUsIHdoaWNoIGV4cGxvaXRzIHRoZQorICAgIGxvY2FsaXR5IG9mIHJlZmVyZW5jZXMuCisKKyAgLSB2ZXJpZnlpbmcgcGFjayBjb250ZW50cyBkb25lIGJ5ICJnaXQgZnNjayAtLWZ1bGwiIGdvdCBib29zdAorICAgIGJ5IGNhcmVmdWxseSBjaG9vc2luZyB0aGUgb3JkZXIgdG8gdmVyaWZ5IG9iamVjdHMgaW4gdGhlbS4KKworICAtICJnaXQgcmVhZC10cmVlIC1tIiB0byByZWFkIGludG8gYW4gYWxyZWFkeSBwb3B1bGF0ZWQgaW5kZXgKKyAgICBoYXMgYmVlbiBvcHRpbWl6ZWQgdmFzdGx5LiAgVGhlIGVmZmVjdCBvZiB0aGlzIGNhbiBiZSBzZWVuCisgICAgd2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMgdGhhdCBoYXZlIGRpZmZlcmVuY2VzIGluIG9ubHkgYQorICAgIGhhbmRmdWwgcGF0aHMuCisKKyAgLSAiZ2l0IGFkZCBwYXRocy4uLiIgYW5kICJnaXQgY29tbWl0IHBhdGhzLi4uIiBoYXMgYWxzbyBiZWVuCisgICAgaGVhdmlseSBvcHRpbWl6ZWQuCisKK0ZpeGVzIHNpbmNlIHYxLjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS4yIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworKiBCdWdmaXhlcworCisgIC0gImdpdHdlYiIgaGFkIHRyb3VibGUgaGFuZGxpbmcgbm9uIFVURi04IHRleHQgd2l0aCBvbGRlcgorICAgIEVuY29kZS5wbSBQZXJsIG1vZHVsZS4KKworICAtICJnaXQgc3ZuIiBtaXNwYXJzZWQgdGhlIGRhdGEgZnJvbSB0aGUgY29tbWl0cyBpbiB0aGUgcmVwb3NpdG9yeSB3aGVuCisgICAgdGhlIHVzZXIgaGFkICJjb2xvci5kaWZmID0gdHJ1ZSIgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICBUaGlzIGhhcyBiZWVuCisgICAgZml4ZWQuCisKKyAgLSBUaGVyZSB3YXMgYSBjYXNlIHdoZXJlICJnaXQgc3ZuIGRjb21taXQiIGNsb2JiZXJlZCBjaGFuZ2VzIG1hZGUgb24gdGhlCisgICAgU1ZOIHNpZGUgd2hpbGUgY29tbWl0dGluZyBtdWx0aXBsZSBjaGFuZ2VzLgorCisgIC0gImdpdC13cml0ZS10cmVlIiBoYWQgYSBiYWQgaW50ZXJhY3Rpb24gd2l0aCByYWN5LWdpdCBhdm9pZGFuY2UgYW5kCisgICAgZ2l0YXR0cmlidXRlcyBtZWNoYW5pc21zLgorCisgIC0gImdpdCAtLWJhcmUgY29tbWFuZCIgb3ZlcnJvZGUgZXhpc3RpbmcgR0lUX0RJUiBzZXR0aW5nIGFuZCBhbHdheXMKKyAgICBtYWRlIGl0IHRyZWF0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFzIEdJVF9ESVIuCisKKyAgLSAiZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCIgZG9lcyBub3QgY29tcGxhaW4gaWYgeW91IGdpdmUgdGhlCisgICAgc2FtZSBwYXRoIHBhdHRlcm4gdHdpY2UgYnkgbWlzdGFrZS4KKworICAtICJnaXQgaW5pdCIgYXV0b2RldGVjdGVkIGNvcmUuZmlsZW1vZGUgYnV0IG5vdCBjb3JlLnN5bWxpbmtzLCB3aGljaAorICAgIG1hZGUgYSBuZXcgZGlyZWN0b3J5IGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSAiZ2l0IGNsb25lIiBjdW1iZXJzb21lCisgICAgdG8gdXNlIG9uIGZpbGVzeXN0ZW1zIHRoYXQgcmVxdWlyZSB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBiZSBzZXQuCisKKyAgLSAiZ2l0IGxvZyIgZmFtaWx5IG9mIGNvbW1hbmRzIGJlaGF2ZWQgZGlmZmVyZW50bHkgd2hlbiBydW4gYXMgImdpdAorICAgIGxvZyIgKG5vIHBhdGhzcGVjKSBhbmQgYXMgImdpdCBsb2cgLS0iIChhZ2Fpbiwgbm8gcGF0aHNwZWMpLiAgVGhpcworICAgIGluY29uc2lzdGVuY3kgd2FzIGludHJvZHVjZWQgc29tZXdoZXJlIGluIHYxLjMuMCBzZXJpZXMgYnV0IG5vdyBoYXMKKyAgICBiZWVuIGNvcnJlY3RlZC4KKworICAtICJnaXQgcmViYXNlIC1tIiBpbmNvcnJlY3RseSBkaXNwbGF5ZWQgY29tbWl0cyB0aGF0IHdlcmUgc2tpcHBlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTQ0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjEudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0dJVCB2MS41LjQuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0LWNvbW1pdCAtQyAkdGFnIiB1c2VkIHRvIHdvcmsgYnV0IHJld3JpdGUgaW4gQyBkb25lIGluCisgICAxLjUuNCBicm9rZSBpdC4KKworICogQW4gZW50cnkgaW4gdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGUgdGhhdCBuYW1lcyBhIHBhdHRlcm4gaW4gYQorICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgaXQgaXMgaW4gZGlkIG5vdCBtYXRjaAorICAgY29ycmVjdGx5IChlLmcuIHBhdHRlcm4gImIvKi5jIiBpbiAiYS8uZ2l0YXR0cmlidXRlcyIgc2hvdWxkCisgICBtYXRjaCAiYS9iL2Zvby5jIiBidXQgaXQgZGlkbid0KS4KKworICogQ3VzdG9taXplZCBjb2xvciBzcGVjaWZpY2F0aW9uIHdhcyBwYXJzZWQgaW5jb3JyZWN0bHkgd2hlbgorICAgbnVtZXJpYyBjb2xvciB2YWx1ZXMgYXJlIHVzZWQuICBUaGlzIHdhcyBmaXhlZCBpbiAxLjUuNC4xLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQwZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4yLnR4dApAQCAtMCwwICsxLDQzIEBACitHSVQgdjEuNS40LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyIHdhcyBub3QgcHJlcGFyZWQgdG8gc2VlIHN0cmluZworICAgdmFsdWVkIHZhcmlhYmxlcyBtaXNzcGVsbGVkIGFzIGJvb2xlYW4gYW5kIHNlZ2ZhdWx0ZWQuCisKKyAqIFRlbXBvcmFyeSBmaWxlcyBsZWZ0IGJlaGluZCBkdWUgdG8gaW50ZXJydXB0ZWQgb2JqZWN0CisgICB0cmFuc2ZlcnMgd2VyZSBub3QgY2xlYW5lZCB1cCB3aXRoICJnaXQgcHJ1bmUiLgorCisgKiAiZ2l0IGNvbmZpZyAtLXVuc2V0IiB3YXMgY29uZnVzZWQgd2hlbiB0aGUgdW5zZXQgdmFyaWFibGVzCisgICB3ZXJlIHNwZWxsZWQgd2l0aCBjb250aW51YXRpb24gbGluZXMgaW4gdGhlIGNvbmZpZyBmaWxlLgorCisgKiBUaGUgbWVyZ2UgbWVzc2FnZSBkZXRlY3Rpb24gaW4gImdpdCBjdnNpbXBvcnQiIGRpZCBub3QgY2F0Y2gKKyAgIGEgbWVzc2FnZSB0aGF0IGJlZ2FuIHdpdGggIk1lcmdlLi4uIi4KKworICogImdpdCBzdGF0dXMiIHN1Z2dlc3RzICJnaXQgcm0gLS1jYWNoZWQiIGZvciB1bnN0YWdpbmcgdGhlCisgICBlYXJsaWVyICJnaXQgYWRkIiBiZWZvcmUgdGhlIGluaXRpYWwgY29tbWl0LgorCisgKiAiZ2l0IHN0YXR1cyIgb3V0cHV0IHdhcyBpbmNvcnJlY3QgZHVyaW5nIGEgcGFydGlhbCBjb21taXQuCisKKyAqICJnaXQgYmlzZWN0IiByZWZ1c2VkIHRvIHN0YXJ0IHdoZW4gdGhlIEhFQUQgd2FzIGRldGFjaGVkLgorCisgKiAiZ2l0IGJpc2VjdCIgYWxsb3dlZCBhIHdpbGRjYXJkIGNoYXJhY3RlciBpbiB0aGUgY29tbWl0CisgICBtZXNzYWdlIGV4cGFuZGVkIHdoaWxlIHdyaXRpbmcgaXRzIGxvZyBmaWxlLgorCisgKiBNYW51YWwgcGFnZXMgd2VyZSBub3QgZm9ybWF0dGVkIGNvcnJlY3RseSB3aXRoIGRvY2Jvb2sgeHNsCisgICAxLjcyOyBhZGRlZCBhIHdvcmthcm91bmQuCisKKyAqICJnaXQtY29tbWl0IC1DICR0YWciIHVzZWQgdG8gd29yayBidXQgcmV3cml0ZSBpbiBDIGRvbmUgaW4KKyAgIDEuNS40IGJyb2tlIGl0LiAgVGhpcyB3YXMgZml4ZWQgaW4gMS41LjQuMS4KKworICogQW4gZW50cnkgaW4gdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGUgdGhhdCBuYW1lcyBhIHBhdHRlcm4gaW4gYQorICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgaXQgaXMgaW4gZGlkIG5vdCBtYXRjaAorICAgY29ycmVjdGx5IChlLmcuIHBhdHRlcm4gImIvKi5jIiBpbiAiYS8uZ2l0YXR0cmlidXRlcyIgc2hvdWxkCisgICBtYXRjaCAiYS9iL2Zvby5jIiBidXQgaXQgZGlkbid0KS4gIFRoaXMgd2FzIGZpeGVkIGluIDEuNS40LjEuCisKKyAqIEN1c3RvbWl6ZWQgY29sb3Igc3BlY2lmaWNhdGlvbiB3YXMgcGFyc2VkIGluY29ycmVjdGx5IHdoZW4KKyAgIG51bWVyaWMgY29sb3IgdmFsdWVzIGFyZSB1c2VkLiAgVGhpcyB3YXMgZml4ZWQgaW4gMS41LjQuMS4KKworICogaHR0cCB0cmFuc3BvcnQgbWlzYmVoYXZlZCB3aGVuIGxpbmtlZCB3aXRoIGN1cmwtZ251dGxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmYzY3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMy50eHQKQEAgLTAsMCArMSwyNyBAQAorR0lUIHYxLjUuNC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBSUE0gc3BlYyB1c2VkIHRvIHB1bGwgaW4gZXZlcnl0aGluZyB3aXRoICdnaXQnLiAgVGhpcyBoYXMgYmVlbgorICAgY2hhbmdlZCBzbyB0aGF0ICdnaXQnIHBhY2thZ2UgY29udGFpbnMganVzdCB0aGUgY29yZSBwYXJ0cywKKyAgIGFuZCB3ZSBub3cgc3VwcGx5ICdnaXQtYWxsJyBtZXRhcGFja2FnZSB0byBzbHVycCBpbiBldmVyeXRoaW5nLgorICAgVGhpcyBzaG91bGQgbWF0Y2ggZW5kIHVzZXIncyBleHBlY3RhdGlvbiBiZXR0ZXIuCisKKyAqIFdoZW4gc29tZSByZWZzIGZhaWxlZCB0byB1cGRhdGUsIGdpdC1wdXNoIHJlcG9ydGVkICJmYWlsdXJlIgorICAgd2hpY2ggd2FzIHVuY2xlYXIgaWYgc29tZSBvdGhlciByZWZzIHdlcmUgdXBkYXRlZCBvciBhbGwgb2YKKyAgIHRoZW0gZmFpbGVkIGF0b21pY2FsbHkgKHRoZSBhbnN3ZXIgaXMgdGhlIGZvcm1lcikuICBSZXdvcmRlZAorICAgdGhlIG1lc3NhZ2UgdG8gY2xhcmlmeSB0aGlzLgorCisgKiAiZ2l0IGNsb25lIiBmcm9tIGEgcmVwb3NpdG9yeSB3aG9zZSBIRUFEIHdhcyBtaXNjb25maWd1cmVkCisgICBkaWQgbm90IHNldCB1cCB0aGUgcmVtb3RlIHByb3Blcmx5LiAgTm93IGl0IHRyaWVzIHRvIGRvCisgICBiZXR0ZXIuCisKKyAqIFVwZGF0ZWQgZ2l0LXB1c2ggZG9jdW1lbnRhdGlvbiB0byBjbGFyaWZ5IHdoYXQgIm1hdGNoaW5nIgorICAgbWVhbnMsIGluIG9yZGVyIHRvIHJlZHVjZSB1c2VyIGNvbmZ1c2lvbi4KKworICogVXBkYXRlZCBnaXQtYWRkIGRvY3VtZW50YXRpb24gdG8gY2xhcmlmeSAiYWRkIC11IiBvcGVyYXRlcyBpbgorICAgdGhlIGN1cnJlbnQgc3ViZGlyZWN0b3J5IHlvdSBhcmUgaW4sIGp1c3QgbGlrZSBvdGhlciBjb21tYW5kcy4KKworICogZ2l0LWd1aSB1cGRhdGVzIHRvIHdvcmsgb24gT1NYIGFuZCBXaW5kb3dzIGJldHRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2MxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjQudHh0CkBAIC0wLDAgKzEsNjYgQEAKK0dJVCB2MS41LjQuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjQuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgd2l0aCBhbiBvdmVydGlnaHQgdW1hc2sgc3VjaCBhcyAwNzcgbWFkZQorICAgaW5zdGFsbGVkIHRlbXBsYXRlcyB1bnJlYWRhYmxlIGJ5IG90aGVycywgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIGluc3RhbGwKKyAgIGFyZSBkb25lIGluIGEgd2F5IHRoYXQgaXMgZnJpZW5kbHkgdG8gdW1hc2sgMDIyLgorCisgKiAiZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAkY3ZzZGlyIiBtaXNiZWhhdmVkIHdoZW4gR0lUX0RJUiBpcyBzZXQgdG8gYQorICAgcmVsYXRpdmUgZGlyZWN0b3J5LgorCisgKiAiZ2l0IGh0dHAtcHVzaCIgaGFkIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcyB0aGF0IGNvdWxkIGxlYWQgaXQgdG8KKyAgIHNlZ2ZhdWx0LgorCisgKiBXaGVuICJnaXQgcmViYXNlIC1pIiBnYXZlIGNvbnRyb2wgYmFjayB0byB0aGUgdXNlciBmb3IgYSBjb21taXQgdGhhdCBpcworICAgbWFya2VkIHRvIGJlIGVkaXRlZCwgaXQganVzdCBzYWlkICJtb2RpZnkgaXQgd2l0aCBjb21taXQgLS1hbWVuZCIsCisgICB3aXRob3V0IHNheWluZyB3aGF0IHRvIGRvIHRvIGNvbnRpbnVlIGFmdGVyIG1vZGlmeWluZyBpdC4gIEdpdmUgYW4KKyAgIGV4cGxpY2l0IGluc3RydWN0aW9uIHRvIHJ1biAicmViYXNlIC0tY29udGludWUiIHRvIGJlIG1vcmUgaGVscGZ1bC4KKworICogImdpdCBzZW5kLWVtYWlsIiBpbiAxLjUuNC4zIGlzc3VlZCBhIGJvZ3VzIGVtcHR5IEluLVJlcGx5LVRvOiBoZWFkZXIuCisKKyAqICJnaXQgYmlzZWN0IiBzaG93ZWQgbXlzdGVyaW91cyAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIiBlcnJvciBtZXNzYWdlLgorICAgVGhpcyB3YXMgbGVmdG92ZXIgZnJvbSBDb2dpdG8gZGF5cyB0byBwcmV2ZW50ICJiaXNlY3QiIHN0YXJ0aW5nIGZyb20gYQorICAgY2ctc2Vla2VkIHN0YXRlLiAgV2Ugc3RpbGwga2VlcCB0aGUgQ29naXRvIHNhZmV0eSwgYnV0IHJ1bm5pbmcgImdpdCBiaXNlY3QKKyAgIHN0YXJ0IiB3aGVuIGFub3RoZXIgYmlzZWN0IHdhcyBpbiBlZmZlY3Qgd2lsbCBjbGVhbiB1cCBhbmQgc3RhcnQgb3Zlci4KKworICogImdpdCBwdXNoIiB3aXRoIGFuIGV4cGxpY2l0IFBBVEggdG8gcmVjZWl2ZS1wYWNrIGRpZCBub3QgcXVpdGUgd29yayBpZgorICAgcmVjZWl2ZS1wYWNrIHdhcyBub3Qgb24gdXN1YWwgUEFUSC4gIFdlIGVhcmxpZXIgZml4ZWQgdGhlIHNhbWUgaXNzdWUKKyAgIHdpdGggImdpdCBmZXRjaCIgYW5kIHVwbG9hZC1wYWNrLCBidXQgc29tZWhvdyBmb3Jnb3QgdG8gZG8gc28gaW4gdGhlCisgICBvdGhlciBkaXJlY3Rpb24uCisKKyAqIGdpdC1ndWkncyBpbmZvIGRpYWxvZyB3YXMgbm90IGRpc3BsYXllZCBjb3JyZWN0bHkgd2hlbiB0aGUgdXNlciB0cmllcworICAgdG8gY29tbWl0IG5vdGhpbmcgKGkuZS4gd2l0aG91dCBzdGFnaW5nIGFueXRoaW5nKS4KKworICogImdpdCByZXZlcnQiIGRpZCBub3QgcHJvcGVybHkgZmFpbCB3aGVuIGF0dGVtcHRpbmcgdG8gcnVuIHdpdGggYQorICAgZGlydHkgaW5kZXguCisKKyAqICJnaXQgbWVyZ2UgLS1uby1jb21taXQgLS1uby1mZiA8b3RoZXI+IiBpbmNvcnJlY3RseSBtYWRlIGNvbW1pdHMuCisKKyAqICJnaXQgbWVyZ2UgLS1zcXVhc2ggLS1uby1mZiA8b3RoZXI+Iiwgd2hpY2ggaXMgYSBub25zZW5zZSBjb21iaW5hdGlvbgorICAgb2Ygb3B0aW9ucywgd2FzIG5vdCByZWplY3RlZC4KKworICogImdpdCBscy1yZW1vdGUiIGFuZCAiZ2l0IHJlbW90ZSBzaG93IiBhZ2FpbnN0IGFuIGVtcHR5IHJlcG9zaXRvcnkKKyAgIGZhaWxlZCwgaW5zdGVhZCBvZiBqdXN0IGdpdmluZyBhbiBlbXB0eSByZXN1bHQgKHJlZ3Jlc3Npb24pLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBkaWQgbm90IGhhbmRsZSBhIHJlbmFtZWQgcGF0aCB3aG9zZSBuYW1lIG5lZWRzIHRvIGJlCisgICBxdW90ZWQsIGR1ZSB0byBhIGJ1ZyBpbiB1bnF1b3RlX2Nfc3R5bGUoKSBmdW5jdGlvbi4KKworICogImdpdCBjdnNleHBvcnRjb21taXQiIHdhcyBjb25mdXNlZCB3aGVuIG11bHRpcGxlIGZpbGVzIHdpdGggdGhlIHNhbWUKKyAgIGJhc2VuYW1lIG5lZWRlZCB0byBiZSBwdXNoZWQgb3V0IGluIHRoZSBzYW1lIGNvbW1pdC4KKworICogImdpdCBkYWVtb24iIGRpZCBub3Qgc2VuZCBlYXJseSBlcnJvcnMgdG8gc3lzbG9nLgorCisgKiAiZ2l0IGxvZyAtLW1lcmdlIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIC0tbGVmdC1yaWdodCBvcHRpb24uCisKKyAqICJnaXQgc3ZuIiBwcm9tcHRlZCBmb3IgY2xpZW50IGNlcnQgcGFzc3dvcmQgZXZlcnkgdGltZSBpdCBhY2Nlc3NlZCB0aGUKKyAgIHNlcnZlci4KKworICogVGhlIHJlc2V0IGNvbW1hbmQgaW4gImdpdCBmYXN0LWltcG9ydCIgZGF0YSBzdHJlYW0gd2FzIGRvY3VtZW50ZWQgdG8KKyAgIGVuZCB3aXRoIGFuIG9wdGlvbmFsIExGLCBidXQgaXQgYWN0dWFsbHkgcmVxdWlyZWQgb25lLgorCisgKiAiZ2l0IHN2biBkY29tbWl0L3JlYmFzZSIgZGlkIG5vdCBob25vciAtLXJld3JpdGUtcm9vdCBvcHRpb24uCisKK0Fsc28gaW5jbHVkZWQgYXJlIGEgaGFuZGZ1bCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmQxMzBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC41LnR4dApAQCAtMCwwICsxLDU2IEBACitHSVQgdjEuNS40LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS40LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZmV0Y2ggdGhlcmUiIHdoZW4gdGhlIFVSTCBpbmZvcm1hdGlvbiBjYW1lIGZyb20gdGhlIENvZ2l0byBzdHlsZQorICAgYnJhbmNoZXMvdGhlcmUgZmlsZSBkaWQgbm90IHVwZGF0ZSByZWZzL2hlYWRzL3RoZXJlIChyZWdyZXNzaW9uIGluCisgICAxLjUuNCkuCisKKyAqIEJvZ3VzIHJlZnNwZWMgY29uZmlndXJhdGlvbiBzdWNoIGFzICJyZW1vdGUudGhlcmUuZmV0Y2ggPSA9IiB3ZXJlIG5vdAorICAgZGV0ZWN0ZWQgYXMgZXJyb3JzIChyZWdyZXNzaW9uIGluIDEuNS40KS4KKworICogWW91IGNvdWxkbid0IHNwZWNpZnkgYSBjdXN0b20gZWRpdG9yIHdob3NlIHBhdGggY29udGFpbnMgYSB3aGl0ZXNwYWNlCisgICB2aWEgR0lUX0VESVRPUiAoYW5kIGNvcmUuZWRpdG9yKS4KKworICogVGhlIHN1YmRpcmVjdG9yeSBmaWx0ZXIgdG8gImdpdCBmaWx0ZXItYnJhbmNoIiBtaXNoYW5kbGVkIGEgaGlzdG9yeQorICAgd2hlcmUgdGhlIHN1YmRpcmVjdG9yeSBiZWNvbWVzIGVtcHR5IGFuZCB0aGVuIGxhdGVyIGJlY29tZXMgbm9uLWVtcHR5LgorCisgKiAiZ2l0IHNob3J0bG9nIiBnYXZlIGFuIGVtcHR5IGxpbmUgaWYgdGhlIG9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIHdhcworICAgbWFsZm9ybWVkIChlLmcuIGEgYm90Y2hlZCBpbXBvcnQgZnJvbSBmb3JlaWduIFNDTSkuICBOb3cgaXQgZmluZHMgdGhlCisgICBmaXJzdCBub24tZW1wdHkgbGluZSBhbmQgdXNlcyBpdCBmb3IgYmV0dGVyIGluZm9ybWF0aW9uLgorCisgKiBXaGVuIHRoZSB1c2VyIGZhaWxzIHRvIGdpdmUgYSByZXZpc2lvbiBwYXJhbWV0ZXIgdG8gImdpdCBzdm4iLCBhbiBlcnJvcgorICAgZnJvbSB0aGUgUGVybCBpbnRlcnByZXRlciB3YXMgaXNzdWVkIGJlY2F1c2UgdGhlIHNjcmlwdCBsYWNrZWQgcHJvcGVyCisgICBlcnJvciBjaGVja2luZy4KKworICogQWZ0ZXIgImdpdCByZWJhc2UiIHN0b3BwZWQgZHVlIHRvIGNvbmZsaWN0cywgaWYgdGhlIHVzZXIgcGxheWVkIHdpdGgKKyAgICJnaXQgcmVzZXQiIGFuZCBmcmllbmRzLCAiZ2l0IHJlYmFzZSAtLWFib3J0IiBmYWlsZWQgdG8gZ28gYmFjayB0byB0aGUKKyAgIGNvcnJlY3QgY29tbWl0LgorCisgKiBBZGRpdGlvbmFsIHdvcmsgdHJlZXMgcHJlcGFyZWQgd2l0aCBnaXQtbmV3LXdvcmtkaXIgKGluIGNvbnRyaWIvKSBkaWQKKyAgIG5vdCBzaGFyZSBnaXQtc3ZuIG1ldGFkYXRhIGRpcmVjdG9yeSAuZ2l0L3N2biB3aXRoIHRoZSBvcmlnaW5hbC4KKworICogImdpdC1tZXJnZS1yZWN1cnNpdmUiIGRpZCBub3QgbWFyayBhZGRpdGlvbiBvZiB0aGUgc2FtZSBwYXRoIHdpdGgKKyAgIGRpZmZlcmVudCBmaWxlbW9kZXMgY29ycmVjdGx5IGFzIGEgY29uZmxpY3QuCisKKyAqICJnaXR3ZWIiIGdhdmUgbWFsZm9ybWVkIFVSTCB3aGVuIHBhdGhpbmZvIHN0eXBlIHBhdGhzIGFyZSBpbiB1c2UuCisKKyAqICItbiIgc3RhbmRzIGZvciAiLS1uby10YWdzIiBhZ2FpbiBmb3IgImdpdCBmZXRjaCIuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBkaWQgbm90IGRldGVjdCB0aGUgbmVlZCB0byBhZGQgOC1iaXQgTUlNRSBoZWFkZXIKKyAgIHdoZW4gdGhlIHVzZXIgdXNlZCBmb3JtYXQuaGVhZGVyIGNvbmZpZ3VyYXRpb24uCisKKyAqICJyZXZ+IiByZXZpc2lvbiBzcGVjaWZpZXIgdXNlZCB0byBtZWFuICJyZXYiLCB3aGljaCB3YXMgaW5jb25zaXN0ZW50CisgICB3aXRoIGhvdyAicmV2XiIgd29ya2VkLiAgTm93ICJyZXZ+IiBpcyB0aGUgc2FtZSBhcyAicmV2fjEiIChoZW5jZSBpdAorICAgYWxzbyBpcyB0aGUgc2FtZSBhcyAicmV2XjEiKSwgYW5kICJyZXZ+MCIgaXMgdGhlIHNhbWUgYXMgInJldl4wIgorICAgKGkuZS4gaXQgaGFzIHRvIGJlIGEgY29tbWl0KS4KKworICogImdpdCBxdWlsdGltcG9ydCIgZGlkIG5vdCBncm9rIGVtcHR5IGxpbmVzLCBsaW5lcyBpbiAiZmlsZSAtcE5OTiIKKyAgIGZvcm1hdCB0byBzcGVjaWZ5IHRoZSBwcmVmaXggbGV2ZWxzIGFuZCBsaW5lcyB3aXRoIHRyYWlsaW5nIGNvbW1lbnRzLgorCisgKiAiZ2l0IHJlYmFzZSAtbSIgdHJpZ2dlcmVkIHByZS1jb21taXQgdmVyaWZpY2F0aW9uLCB3aGljaCBtYWRlCisgICAicmViYXNlIC0tY29udGludWUiIGltcG9zc2libGUuCisKK0FzIHVzdWFsLCBpdCBhbHNvIGNvbWVzIHdpdGggbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCBjbGFyaWZpY2F0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlM2MzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjYudHh0CkBAIC0wLDAgKzEsNDMgQEAKK0dJVCB2MS41LjQuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJIHBlcnNvbmFsbHkgZG8gbm90IHRoaW5rIHRoZXJlIGlzIGFueSByZWFzb24gYW55Ym9keSBzaG91bGQgd2FudCB0bworcnVuIHYxLjUuNC5YIHNlcmllcyB0aGVzZSBkYXlzLCBiZWNhdXNlICdtYXN0ZXInIHZlcnNpb24gaXMgYWx3YXlzCittb3JlIHN0YWJsZSB0aGFuIGFueSB0YWdnZWQgcmVsZWFzZWQgdmVyc2lvbiBvZiBnaXQuCisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGZ1dHVyZXByb29mICJnaXQtc2hlbGwiIHRvIGFjY2VwdCByZXF1ZXN0cword2l0aG91dCBhIGRhc2ggYmV0d2VlbiAiZ2l0IiBhbmQgc3ViY29tbWFuZCBuYW1lIChlLmcuICJnaXQKK3VwbG9hZC1wYWNrIikgd2hpY2ggdGhlIG5ld2VyIGNsaWVudCB3aWxsIHN0YXJ0IHRvIG1ha2Ugc29tZXRpbWUgaW4KK3RoZSBmdXR1cmUuCisKK0ZpeGVzIHNpbmNlIHYxLjUuNC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21tYW5kIGxpbmUgb3B0aW9uICItbiIgdG8gImdpdC1yZXBhY2siIHdhcyBub3QgY29ycmVjdGx5IHBhcnNlZC4KKworICogRXJyb3IgbWVzc2FnZXMgZnJvbSAiZ2l0LWFwcGx5IiB3aGVuIHRoZSBwYXRjaGZpbGUgY2Fubm90IGJlIG9wZW5lZAorICAgaGF2ZSBiZWVuIGltcHJvdmVkLgorCisgKiBFcnJvciBtZXNzYWdlcyBmcm9tICJnaXQtYmlzZWN0IiB3aGVuIGdpdmVuIG5vbnNlbnNlIHJldmlzaW9ucyBoYXZlCisgICBiZWVuIGltcHJvdmVkLgorCisgKiByZWZsb2cgc3ludGF4IHRoYXQgdXNlcyB0aW1lIGUuZy4gIkhFQURAezEwIHNlY29uZHMgYWdvfTpwYXRoIiBkaWQgbm90CisgICBzdG9wIHBhcnNpbmcgYXQgdGhlIGNsb3NpbmcgIn0iLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBebWFzdGVyXjIiIHByaW50ZWQgc29saXRhcnkgIl4iLAorICAgYnV0IGl0IHNob3VsZCBwcmludCBub3RoaW5nLgorCisgKiAiZ2l0IGFwcGx5IiBkaWQgbm90IGVuZm9yY2UgIm1hdGNoIGF0IHRoZSBiZWdpbm5pbmciIGNvcnJlY3RseS4KKworICogYSBwYXRoIHNwZWNpZmljYXRpb24gImEvYiIgaW4gLmdpdGF0dHJpYnV0ZXMgZmlsZSBzaG91bGQgbm90IG1hdGNoCisgICAic3ViL2EvYiIsIGJ1dCBpdCBkaWQuCisKKyAqICJnaXQgbG9nIC0tZGF0ZS1vcmRlciAtLXRvcG8tb3JkZXIiIGRpZCBub3Qgb3ZlcnJpZGUgdGhlIGVhcmxpZXIKKyAgIGRhdGUtb3JkZXIgd2l0aCB0b3BvLW9yZGVyIGFzIGV4cGVjdGVkLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBkaWQgbm90IGV4cG9ydCBvY3RvcHVzIG1lcmdlcyBjb3JyZWN0bHkuCisKKyAqICJnaXQgYXJjaGl2ZSAtLXByZWZpeD0kcGF0aC8iIG1pc2hhbmRsZWQgZ2l0YXR0cmlidXRlcy4KKworQXMgdXN1YWwsIGl0IGFsc28gY29tZXMgd2l0aCBtYW55IGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIGNsYXJpZmljYXRpb25zLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY1YTBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC43LnR4dApAQCAtMCwwICsxLDEwIEBACitHSVQgdjEuNS40LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgMS41LjQuNworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBSZW1vdmVkIHN1cHBvcnQgZm9yIGFuIG9ic29sZXRlIGdpdHdlYiByZXF1ZXN0IFVSSSwgd2hvc2UKKyAgIGltcGxlbWVudGF0aW9uIHJhbiAiZ2l0IGRpZmYiIFBvcmNlbGFpbiwgaW5zdGVhZCBvZiB1c2luZyBwbHVtYmluZywKKyAgIHdoaWNoIHdvdWxkIGhhdmUgcnVuIGFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCBzcGVjaWZpZWQgaW4gdGhlCisgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gYXMgdGhlIGdpdHdlYiB1c2VyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMyM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC50eHQKQEAgLTAsMCArMSwzNzcgQEAKK0dJVCB2MS41LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbW92YWwKKy0tLS0tLS0KKworICogImdpdCBzdm5pbXBvcnQiIHdhcyByZW1vdmVkIGluIGZhdm9yIG9mICJnaXQgc3ZuIi4gIEl0IGlzIHN0aWxsIHRoZXJlCisgICBpbiB0aGUgc291cmNlIHRyZWUgKGNvbnRyaWIvZXhhbXBsZXMpIGJ1dCB1bnN1cHBvcnRlZC4KKworICogQXMgZ2l0LWNvbW1pdCBhbmQgZ2l0LXN0YXR1cyBoYXZlIGJlZW4gcmV3cml0dGVuLCAiZ2l0IHJ1bnN0YXR1cyIKKyAgIGhlbHBlciBzY3JpcHQgbG9zdCBhbGwgaXRzIHVzZXJzIGFuZCBoYXMgYmVlbiByZW1vdmVkLgorCisKK1RlbXBvcmFyaWx5IGRpc2FibGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGh0dHAtcHVzaCIgaXMga25vd24gbm90IHRvIHdvcmsgd2VsbCB3aXRoIGNVUkwgbGlicmFyeSBvbGRlcgorICAgdGhhbiA3LjE2LCBhbmQgd2UgaGFkIHJlcG9ydHMgb2YgcmVwb3NpdG9yeSBjb3JydXB0aW9uLiAgSXQgaXMKKyAgIGRpc2FibGVkIG9uIHN1Y2ggcGxhdGZvcm1zIGZvciBub3cuICBVbmZvcnR1bmF0ZWx5LCAxLjUuMy44IHNoYXJlcworICAgdGhlIHNhbWUgaXNzdWUuICBJbiBvdGhlciB3b3JkcywgdGhpcyBkb2VzIG5vdCBtZWFuIHlvdSB3aWxsIGJlCisgICBmaW5lIGlmIHlvdSBzdGljayB0byBhbiBvbGRlciBnaXQgcmVsZWFzZS4gIEZvciBub3csIHBsZWFzZSBkbyBub3QKKyAgIHVzZSBodHRwLXB1c2ggZnJvbSBvbGRlciBnaXQgd2l0aCBjVVJMIG9sZGVyIHRoYW4gNy4xNiBpZiB5b3UKKyAgIHZhbHVlIHlvdXIgZGF0YS4gQSBwcm9wZXIgZml4IHdpbGwgaG9wZWZ1bGx5IG1hdGVyaWFsaXplIGluCisgICBsYXRlciB2ZXJzaW9ucy4KKworCitEZXByZWNhdGlvbiBub3RpY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEZyb20gdjEuNi4wLCBnaXQgd2lsbCBieSBkZWZhdWx0IGluc3RhbGwgZGFzaGVkIGZvcm0gb2YgY29tbWFuZHMKKyAgIChlLmcuICJnaXQtY29tbWl0Iikgb3V0c2lkZSBvZiB1c2Vycycgbm9ybWFsICRQQVRILCBhbmQgd2lsbCBpbnN0YWxsCisgICBvbmx5IHNlbGVjdGVkIGNvbW1hbmRzICgiZ2l0IiBpdHNlbGYsIGFuZCAiZ2l0ayIpIGluICRQQVRILiAgVGhpcworICAgaW1wbGllczoKKworICAgLSBVc2luZyBkYXNoZWQgZm9ybXMgb2YgZ2l0IGNvbW1hbmRzIChlLmcuICJnaXQtY29tbWl0IikgZnJvbSB0aGUKKyAgICAgY29tbWFuZCBsaW5lIGhhcyBiZWVuIGluZm9ybWFsbHkgZGVwcmVjYXRlZCBzaW5jZSBlYXJseSAyMDA2LCBidXQKKyAgICAgbm93IGl0IG9mZmljaWFsbHkgaXMsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gIFVzZQorICAgICBkYXNoLWxlc3MgZm9ybXMgKGUuZy4gImdpdCBjb21taXQiKSBpbnN0ZWFkLgorCisgICAtIFVzaW5nIGRhc2hlZCBmb3JtcyBmcm9tIHlvdXIgc2NyaXB0cywgd2l0aG91dCBmaXJzdCBwcmVwZW5kaW5nIHRoZQorICAgICByZXR1cm4gdmFsdWUgZnJvbSAiZ2l0IC0tZXhlYy1wYXRoIiB0byB0aGUgc2NyaXB0cycgUEFUSCwgaGFzIGJlZW4KKyAgICAgaW5mb3JtYWxseSBkZXByZWNhdGVkIHNpbmNlIGVhcmx5IDIwMDYsIGJ1dCBub3cgaXQgb2ZmaWNpYWxseSBpcy4KKworICAgLSBVc2Ugb2YgZGFzaGVkIGZvcm1zIHdpdGggIlBBVEg9JChnaXQgLS1leGVjLXBhdGgpOiRQQVRIOyBleHBvcnQKKyAgICAgUEFUSCIgZWFybHkgaW4geW91ciBzY3JpcHQgaXMgbm90IGRlcHJlY2F0ZWQgd2l0aCB0aGlzIGNoYW5nZS4KKworICAgVXNlcnMgYXJlIHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gYWRqdXN0IHRoZWlyIGhhYml0cyBhbmQgc2NyaXB0cyBub3cKKyAgIHRvIHByZXBhcmUgZm9yIHRoaXMgY2hhbmdlLgorCisgKiBUaGUgcG9zdC1yZWNlaXZlIGhvb2sgd2FzIGludHJvZHVjZWQgaW4gTWFyY2ggMjAwNyB0byBzdXBlcnNlZGUKKyAgIHRoZSBwb3N0LXVwZGF0ZSBob29rLCBwcmltYXJpbHkgdG8gb3ZlcmNvbWUgdGhlIGNvbW1hbmQgbGluZSBsZW5ndGgKKyAgIGxpbWl0YXRpb24gb2YgdGhlIGxhdHRlci4gIFVzZSBvZiBwb3N0LXVwZGF0ZSBob29rIHdpbGwgYmUgZGVwcmVjYXRlZAorICAgaW4gZnV0dXJlIHZlcnNpb25zIG9mIGdpdCwgc3RhcnRpbmcgZnJvbSB2MS42LjAuCisKKyAqICJnaXQgbG9zdC1mb3VuZCIgd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgImdpdCBmc2NrIidzIC0tbG9zdC1mb3VuZAorICAgb3B0aW9uLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCisKKyAqICJnaXQgcGVlay1yZW1vdGUiIGlzIGRlcHJlY2F0ZWQsIGFzICJnaXQgbHMtcmVtb3RlIiB3YXMgd3JpdHRlbiBpbiBDCisgICBhbmQgd29ya3MgZm9yIGFsbCB0cmFuc3BvcnRzOyAiZ2l0IHBlZWstcmVtb3RlIiB3aWxsIGJlIHJlbW92ZWQgaW4KKyAgIHRoZSBmdXR1cmUuCisKKyAqICJnaXQgcmVwby1jb25maWciIHdoaWNoIHdhcyBhbiBvbGQgbmFtZSBmb3IgImdpdCBjb25maWciIGNvbW1hbmQKKyAgIGhhcyBiZWVuIHN1cHBvcnRlZCB3aXRob3V0IGJlaW5nIGFkdmVydGlzZWQgZm9yIGEgbG9uZyB0aW1lLiAgVGhlCisgICBuZXh0IGZlYXR1cmUgcmVsZWFzZSB3aWxsIHJlbW92ZSBpdC4KKworICogRnJvbSB2MS42LjAsIHRoZSByZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IGNvbmZpZyBvcHRpb24gd2lsbCBkZWZhdWx0CisgICB0byB0cnVlLCB3aGljaCB3aWxsIGdpdmUgZGVuc2VyIHBhY2tmaWxlcyAoaS5lLiBtb3JlIGVmZmljaWVudCBzdG9yYWdlKS4KKyAgIFRoZSBkb3duc2lkZSBpcyB0aGF0IGdpdCBvbGRlciB0aGFuIHZlcnNpb24gMS40LjQgd2lsbCBub3QgYmUgYWJsZQorICAgdG8gZGlyZWN0bHkgdXNlIGEgcmVwb3NpdG9yeSBwYWNrZWQgdXNpbmcgdGhpcyBzZXR0aW5nLgorCisgKiBGcm9tIHYxLjYuMCwgdGhlIHBhY2suaW5kZXh2ZXJzaW9uIGNvbmZpZyBvcHRpb24gd2lsbCBkZWZhdWx0IHRvIDIsCisgICB3aGljaCBpcyBzbGlnaHRseSBtb3JlIGVmZmljaWVudCwgYW5kIG1ha2VzIHJlcGFja2luZyBtb3JlIGltbXVuZSB0bworICAgZGF0YSBjb3JydXB0aW9ucy4gIEdpdCBvbGRlciB0aGFuIHZlcnNpb24gMS41LjIgbWF5IHJldmVydCB0byB2ZXJzaW9uIDEKKyAgIG9mIHRoZSBwYWNrIGluZGV4IHdpdGggYSBtYW51YWwgImdpdCBpbmRleC1wYWNrIiB0byBiZSBhYmxlIHRvIGRpcmVjdGx5CisgICBhY2Nlc3MgY29ycmVzcG9uZGluZyBwYWNrIGZpbGVzLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21lcyB3aXRoIG11Y2ggaW1wcm92ZWQgZ2l0aywgd2l0aCBpMThuLgorCisgKiBDb21lcyB3aXRoIGdpdC1ndWkgMC45LjIgd2l0aCBpMThuLgorCisgKiBnaXRrIGlzIG5vdyBtZXJnZWQgYXMgYSBzdWJkaXJlY3Rvcnkgb2YgZ2l0LmdpdCBwcm9qZWN0LCBpbgorICAgcHJlcGFyYXRpb24gZm9yIGl0cyBpMThuLgorCisgKiBwcm9ncmVzcyBkaXNwbGF5cyBmcm9tIG1hbnkgY29tbWFuZHMgYXJlIGEgbG90IG5pY2VyIHRvIHRoZSBleWUuCisgICBUcmFuc2ZlciBjb21tYW5kcyBzaG93IHRocm91Z2hwdXQgZGF0YS4KKworICogbWFueSBjb21tYW5kcyB0aGF0IHBheSBhdHRlbnRpb24gdG8gcGVyLWRpcmVjdG9yeSAuZ2l0aWdub3JlIG5vdyBkbworICAgc28gbGF6aWx5LCB3aGljaCBtYWtlcyB0aGUgdXN1YWwgY2FzZSBnbyBtdWNoIGZhc3Rlci4KKworICogT3V0cHV0IHByb2Nlc3NpbmcgZm9yICctLXByZXR0eT1mb3JtYXQ6PHVzZXIgZm9ybWF0PicgaGFzIGJlZW4KKyAgIG9wdGltaXplZC4KKworICogUmVuYW1lIGRldGVjdGlvbiBvZiBkaWZmIGZhbWlseSB3aGlsZSBkZXRlY3RpbmcgZXhhY3QgbWF0Y2hlcyBoYXMKKyAgIGJlZW4gZ3JlYXRseSBvcHRpbWl6ZWQuCisKKyAqIFJlbmFtZSBkZXRlY3Rpb24gb2YgZGlmZiBmYW1pbHkgdHJpZXMgdG8gbWFrZSBtb3JlIG5hdHVyYWwgbG9va2luZworICAgcGFpcmluZy4gIEVhcmxpZXIsIGlmIG11bHRpcGxlIGlkZW50aWNhbCByZW5hbWUgc291cmNlcyB3ZXJlCisgICBmb3VuZCBpbiB0aGUgcHJlaW1hZ2UsIHRoZSBzb3VyY2UgdXNlZCB3YXMgcGlja2VkIHByZXR0eSBtdWNoIGF0IHJhbmRvbS4KKworICogVmFsdWUgInRydWUiIGZvciBjb2xvci5kaWZmIGFuZCBjb2xvci5zdGF0dXMgY29uZmlndXJhdGlvbiB1c2VkIHRvCisgICBtZWFuICJhbHdheXMiIChldmVuIHdoZW4gdGhlIG91dHB1dCBpcyBub3QgZ29pbmcgdG8gYSB0ZXJtaW5hbCkuCisgICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBtZWFuIHRoZSBzYW1lIHRoaW5nIGFzICJhdXRvIi4KKworICogImdpdCBkaWZmIiBQb3JjZWxhaW4gbm93IHJlc3BlY3RzIGRpZmYuZXh0ZXJuYWwgY29uZmlndXJhdGlvbiwgd2hpY2gKKyAgIGlzIGFub3RoZXIgd2F5IHRvIHNwZWNpZnkgR0lUX0VYVEVSTkFMX0RJRkYuCisKKyAqICJnaXQgZGlmZiIgY2FuIGJlIHRvbGQgdG8gdXNlIGRpZmZlcmVudCBwcmVmaXhlcyBvdGhlciB0aGFuCisgICAiYS8iIGFuZCAiYi8iIGUuZy4gImdpdCBkaWZmIC0tc3JjLXByZWZpeD1sLyAtLWRzdC1wcmVmaXg9ay8iLgorCisgKiAiZ2l0IGRpZmYiIHNvbWV0aW1lcyBkaWQgbm90IHF1b3RlIHBhdGhzIHdpdGggZnVubnkKKyAgIGNoYXJhY3RlcnMgcHJvcGVybHkuCisKKyAqICJnaXQgbG9nIiAoYW5kIGFueSByZXZpc2lvbiB0cmF2ZXJzYWwgY29tbWFuZHMpIG1pc2JlaGF2ZWQKKyAgIHdoZW4gLS1kaWZmLWZpbHRlciBpcyBnaXZlbiBidXQgd2FzIG5vdCBhc2tlZCB0byBhY3R1YWxseQorICAgcHJvZHVjZSBkaWZmLgorCisgKiBIVFRQIHByb3h5IGNhbiBiZSBzcGVjaWZpZWQgcGVyIHJlbW90ZSByZXBvc2l0b3J5IHVzaW5nCisgICByZW1vdGUuKi5odHRwcHJveHkgY29uZmlndXJhdGlvbiwgb3IgZ2xvYmFsIGh0dHAucHJveHkgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUuCisKKyAqIFZhcmlvdXMgUGVyZm9yY2UgaW1wb3J0ZXIgdXBkYXRlcy4KKworICogRXhhbXBsZSB1cGRhdGUgYW5kIHBvc3QtcmVjZWl2ZSBob29rcyBoYXZlIGJlZW4gaW1wcm92ZWQuCisKKyAqIEFueSBjb21tYW5kIHRoYXQgd2FudHMgdG8gdGFrZSBhIGNvbW1pdCBvYmplY3QgbmFtZSBjYW4gbm93IHVzZQorICAgIjovc3RyaW5nIiBzeW50YXggdG8gbmFtZSBhIGNvbW1pdC4KKworICogImdpdCByZXNldCIgaXMgbm93IGJ1aWx0LWluIGFuZCBpdHMgb3V0cHV0IGNhbiBiZSBzcXVlbGNoZWQgd2l0aCAtcS4KKworICogImdpdCByZXNldCAtLWhhcmQiIGRvZXMgbm90IG1ha2UgYW55IHNlbnNlIGluIGEgYmFyZQorICAgcmVwb3NpdG9yeSwgYnV0IGRpZCBub3QgZXJyb3Igb3V0OyBmaXhlZC4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gb3B0aW9uYWxseSB0YWxrIG92ZXIgc3NtdHAgYW5kIHVzZSBTTVRQLUFVVEguCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkIC0td2hpdGVzcGFjZSBvcHRpb24uCisKKyAqIEluICJnaXQgcmViYXNlIiwgd2hlbiB5b3UgZGVjaWRlIG5vdCB0byByZXBsYXkgYSBwYXJ0aWN1bGFyIGNoYW5nZQorICAgYWZ0ZXIgdGhlIGNvbW1hbmQgc3RvcHBlZCB3aXRoIGEgY29uZmxpY3QsIHlvdSBjYW4gc2F5ICJnaXQgcmViYXNlCisgICAtLXNraXAiIHdpdGhvdXQgZmlyc3QgcnVubmluZyAiZ2l0IHJlc2V0IC0taGFyZCIsIGFzIHRoZSBjb21tYW5kIG5vdworICAgcnVucyBpdCBmb3IgeW91LgorCisgKiAiZ2l0IHJlYmFzZSAtLWludGVyYWN0aXZlIiBtb2RlIGNhbiBub3cgd29yayBvbiBkZXRhY2hlZCBIRUFELgorCisgKiBPdGhlciBtaW5vciB0byBzZXJpb3VzIGJ1Z3MgaW4gImdpdCByZWJhc2UgLWkiIGhhdmUgYmVlbiBmaXhlZC4KKworICogImdpdCByZWJhc2UiIG5vdyBkZXRhY2hlcyBoZWFkIGR1cmluZyBpdHMgb3BlcmF0aW9uLCBzbyBhZnRlciBhCisgICBzdWNjZXNzZnVsICJnaXQgcmViYXNlIiBvcGVyYXRpb24sIHRoZSByZWZsb2cgZW50cnkgYnJhbmNoQHsxfSBmb3IKKyAgIHRoZSBjdXJyZW50IGJyYW5jaCBwb2ludHMgYXQgdGhlIGNvbW1pdCBiZWZvcmUgdGhlIHJlYmFzZSB3YXMKKyAgIHN0YXJ0ZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBhbHNvIHRyaWdnZXJzIHJlcmVyZSB0byBoZWxwIHlvdXIgcmVwZWF0ZWQgbWVyZ2VzLgorCisgKiAiZ2l0IG1lcmdlIiBjYW4gY2FsbCB0aGUgInBvc3QtbWVyZ2UiIGhvb2suCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBjYW4gb3B0aW9uYWxseSBydW4gZGVsdGlmaWNhdGlvbiB3aXRoIG11bHRpcGxlCisgICB0aHJlYWRzLgorCisgKiAiZ2l0IGFyY2hpdmUiIGNhbiBvcHRpb25hbGx5IHN1YnN0aXR1dGUga2V5d29yZHMgaW4gZmlsZXMgbWFya2VkIHdpdGgKKyAgIGV4cG9ydC1zdWJzdCBhdHRyaWJ1dGUuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIG1hZGUgYSBtaXNndWlkZWQgYXR0ZW1wdCB0byByZXBlYXQgdGhlIG9yaWdpbmFsCisgICBjb21tYW5kIGxpbmUgaW4gdGhlIGdlbmVyYXRlZCBsb2cgbWVzc2FnZSwgd2hlbiB0b2xkIHRvIGNoZXJyeS1waWNrIGEKKyAgIGNvbW1pdCBieSBuYW1pbmcgYSB0YWcgdGhhdCBwb2ludHMgYXQgaXQuICBJdCBkb2VzIG5vdCBhbnltb3JlLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgbGVhcm5lZCAlKHh4eGRhdGU6PGRhdGUtZm9ybWF0Pikgc3ludGF4IHRvIHNob3cgdGhlCisgICB2YXJpb3VzIGRhdGUgZmllbGRzIGluIGRpZmZlcmVudCBmb3JtYXRzLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgaXMgYSBsb3ctaW1wYWN0IHdheSB0byBhdXRvbWF0aWNhbGx5IHJ1biBhIHZhcmlhbnQgb2YKKyAgICJnaXQgcmVwYWNrIiB0aGF0IGRvZXMgbm90IGxvc2UgdW5yZWZlcmVuY2VkIG9iamVjdHMgKHJlYWQ6IHNhZmVyCisgICB0aGFuIHRoZSB1c3VhbCBvbmUpIGFmdGVyIHRoZSB1c2VyIGFjY3VtdWxhdGVzIHRvbyBtYW55IGxvb3NlCisgICBvYmplY3RzLgorCisgKiAiZ2l0IGNsZWFuIiBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworICogWW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgY2xlYW4ucmVxdWlyZUZvcmNlIHRvICJmYWxzZSIgdG8gYWxsb3cKKyAgICJnaXQgY2xlYW4iIHdpdGhvdXQgLWYgdG8gZG8gYW55IGRhbWFnZSAobGFjayBvZiB0aGUgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgdXNlZCB0byBtZWFuICJkbyBub3QgcmVxdWlyZSAtZiBvcHRpb24gdG8gbG9zZSB1bnRyYWNrZWQKKyAgIGZpbGVzIiwgYnV0IHdlIG5vdyB1c2UgdGhlIHNhZmVyIGRlZmF1bHQpLgorCisgKiBUaGUga2luZHMgb2Ygd2hpdGVzcGFjZSBlcnJvcnMgImdpdCBkaWZmIiBhbmQgImdpdCBhcHBseSIgbm90aWNlIChhbmQKKyAgIGZpeCkgY2FuIGJlIGNvbnRyb2xsZWQgdmlhICdjb3JlLndoaXRlc3BhY2UnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgIGFuZCAnd2hpdGVzcGFjZScgYXR0cmlidXRlIGluIC5naXRhdHRyaWJ1dGVzIGZpbGUuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCAtLWRyeS1ydW4gb3B0aW9uIHRvIHNob3cgd2hhdCB3b3VsZCBoYXBwZW4gaWYgYQorICAgcHVzaCBpcyBydW4uCisKKyAqICJnaXQgcHVzaCIgZG9lcyBub3QgdXBkYXRlIGEgdHJhY2tpbmcgcmVmIG9uIHRoZSBsb2NhbCBzaWRlIHdoZW4gdGhlCisgICByZW1vdGUgcmVmdXNlZCB0byB1cGRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVmLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgLS1taXJyb3Igb3B0aW9uLiAgVGhpcyBpcyB0byBwdXNoIHRoZSBsb2NhbCByZWZzCisgICBvbmUtdG8tb25lIHRvIHRoZSByZW1vdGUsIGFuZCBkZWxldGVzIHJlZnMgZnJvbSB0aGUgcmVtb3RlIHRoYXQgZG8KKyAgIG5vdCBleGlzdCBhbnltb3JlIGluIHRoZSByZXBvc2l0b3J5IG9uIHRoZSBwdXNoaW5nIHNpZGUuCisKKyAqICJnaXQgcHVzaCIgY2FuIHJlbW92ZSBhIGNvcnJ1cHQgcmVmIGF0IHRoZSByZW1vdGUgc2l0ZSB3aXRoIHRoZSB1c3VhbAorICAgIjpyZWYiIHJlZnNwZWMuCisKKyAqICJnaXQgcmVtb3RlIiBrbm93cyAtLW1pcnJvciBtb2RlLiAgVGhpcyBpcyB0byBzZXQgdXAgY29uZmlndXJhdGlvbiB0bworICAgcHVzaCBpbnRvIGEgcmVtb3RlIHJlcG9zaXRvcnkgdG8gc3RvcmUgbG9jYWwgYnJhbmNoIGhlYWRzIHRvIHRoZSBzYW1lCisgICBicmFuY2ggb24gdGhlIHJlbW90ZSBzaWRlLCBhbmQgcmVtb3ZlIGJyYW5jaCBoZWFkcyBsb2NhbGx5IHJlbW92ZWQKKyAgIGZyb20gbG9jYWwgcmVwb3NpdG9yeSBhdCB0aGUgc2FtZSB0aW1lLiAgU3VpdGFibGUgZm9yIHB1c2hpbmcgaW50byBhCisgICBiYWNrLXVwIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgcmVtb3RlIiBsZWFybmVkICJybSIgc3ViY29tbWFuZC4KKworICogImdpdCBjdnNzZXJ2ZXIiIGNhbiBiZSBydW4gdmlhICJnaXQgc2hlbGwiLiAgQWxzbywgImN2cyIgaXMKKyAgIHJlY29nbml6ZWQgYXMgYSBzeW5vbnltIGZvciAiZ2l0IGN2c3NlcnZlciIsIHNvIHRoYXQgQ1ZTIHVzZXJzCisgICBjYW4gYmUgc3dpdGNoZWQgdG8gZ2l0IGp1c3QgYnkgY2hhbmdpbmcgdGhlaXIgbG9naW4gc2hlbGwuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBhY3RzIG1vcmUgbGlrZSByZWNlaXZlLXBhY2sgYnkgcnVubmluZyBwb3N0LXJlY2VpdmUKKyAgIGFuZCBwb3N0LXVwZGF0ZSBob29rcy4KKworICogImdpdCBhbSIgYW5kICJnaXQgcmViYXNlIiBhcmUgZmFyIGxlc3MgdmVyYm9zZS4KKworICogImdpdCBwdWxsIiBsZWFybmVkIHRvIHBhc3MgLS1bbm8tXWZmIG9wdGlvbiB0byB1bmRlcmx5aW5nICJnaXQKKyAgIG1lcmdlIi4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBpcyBhIGRpZmZlcmVudCB3YXkgdG8gaW50ZWdyYXRlIHdoYXQgeW91IGZldGNoZWQKKyAgIGludG8geW91ciBjdXJyZW50IGJyYW5jaC4KKworICogImdpdCBmYXN0LWV4cG9ydCIgcHJvZHVjZXMgZGF0YS1zdHJlYW0gdGhhdCBjYW4gYmUgZmVkIHRvIGZhc3QtaW1wb3J0CisgICB0byByZXByb2R1Y2UgdGhlIGhpc3RvcnkgcmVjb3JkZWQgaW4gYSBnaXQgcmVwb3NpdG9yeS4KKworICogImdpdCBhZGQgLWkiIHRha2VzIHBhdGhzcGVjcyB0byBsaW1pdCB0aGUgc2V0IG9mIGZpbGVzIHRvIHdvcmsgb24uCisKKyAqICJnaXQgYWRkIC1wIiBpcyBhIHNob3J0LWhhbmQgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlbGVjdGl2ZSBwYXRjaAorICAgc3ViY29tbWFuZCBpbiB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBsb29wIGFuZCB0byBleGl0IHdoZW4gZG9uZS4KKworICogImdpdCBhZGQgLWkiIFVJIGhhcyBiZWVuIGNvbG9yaXplZC4gIFRoZSBpbnRlcmFjdGl2ZSBwcm9tcHQKKyAgIGFuZCBtZW51IGNhbiBiZSBjb2xvcmVkIGJ5IHNldHRpbmcgY29sb3IuaW50ZXJhY3RpdmUKKyAgIGNvbmZpZ3VyYXRpb24uICBUaGUgZGlmZiBvdXRwdXQgKGluY2x1ZGluZyB0aGUgaHVuayBwaWNrZXIpCisgICBhcmUgY29sb3JlZCB3aXRoIGNvbG9yLmRpZmYgY29uZmlndXJhdGlvbi4KKworICogImdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSIgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBzaW5nbGUtcGFyZW50CisgICBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBzYW1lIHRyZWUgYXMgaXRzIHBhcmVudCwgb3ZlcnJpZGluZyB0aGUgdXN1YWwKKyAgIHNhZmV0eSB2YWx2ZS4KKworICogImdpdCBjb21taXQgLS1hbWVuZCIgY2FuIGFtZW5kIGEgbWVyZ2UgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHRyZWUKKyAgIGZyb20gaXRzIGZpcnN0IHBhcmVudC4KKworICogImdpdCBjb21taXQiIHVzZWQgdG8gdW5jb25kaXRpb25hbGx5IHN0cmlwIGNvbW1lbnQgbGluZXMgdGhhdAorICAgYmVnYW4gd2l0aCAnIycgYW5kIHJlbW92ZWQgZXhjZXNzIGJsYW5rIGxpbmVzLiAgVGhpcyBiZWhhdmlvciBoYXMKKyAgIGJlZW4gbWFkZSBjb25maWd1cmFibGUuCisKKyAqICJnaXQgY29tbWl0IiBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworICogImdpdCBzdGFzaCByYW5kb20tdGV4dCIgZG9lcyBub3QgY3JlYXRlIGEgbmV3IHN0YXNoIGFueW1vcmUuICBJdCB3YXMKKyAgIGEgVUkgbWlzdGFrZS4gIFVzZSAiZ2l0IHN0YXNoIHNhdmUgcmFuZG9tLXRleHQiLCBvciAiZ2l0IHN0YXNoIgorICAgKHdpdGhvdXQgZXh0cmEgYXJncykgZm9yIHRoYXQuCisKKyAqICJnaXQgc3Rhc2ggY2xlYXIgZXh0cmEtdGV4dCIgZG9lcyBub3QgY2xlYXIgdGhlIHdob2xlIHN0YXNoCisgICBhbnltb3JlLiAgSXQgaXMgdGVtcHRpbmcgdG8gZXhwZWN0ICJnaXQgc3Rhc2ggY2xlYXIgc3Rhc2hAezJ9IgorICAgdG8gZHJvcCBvbmx5IGEgc2luZ2xlIG5hbWVkIHN0YXNoIGVudHJ5LCBhbmQgaXQgaXMgcnVkZSB0bworICAgZGlzY2FyZCBldmVyeXRoaW5nIHdoZW4gdGhhdCBpcyBhc2tlZCAoYnV0IG5vdCBwcm92aWRlZCkuCisKKyAqICJnaXQgcHJ1bmUgLS1leHBpcmUgPHRpbWU+IiBjYW4gZXhlbXB0IHlvdW5nIGxvb3NlIG9iamVjdHMgZnJvbQorICAgZ2V0dGluZyBwcnVuZWQuCisKKyAqICJnaXQgYnJhbmNoIC0tY29udGFpbnMgPGNvbW1pdD4iIGNhbiBsaXN0IGJyYW5jaGVzIHRoYXQgYXJlCisgICBkZXNjZW5kYW50cyBvZiBhIGdpdmVuIGNvbW1pdC4KKworICogImdpdCBsb2ciIGxlYXJuZWQgLS1lYXJseS1vdXRwdXQgb3B0aW9uIHRvIGhlbHAgaW50ZXJhY3RpdmUgR1VJCisgICBpbXBsZW1lbnRhdGlvbnMuCisKKyAqICJnaXQgYmlzZWN0IiBsZWFybmVkICJza2lwIiBhY3Rpb24gdG8gbWFyayB1bnRlc3RhYmxlIGNvbW1pdHMuCisKKyAqICJnaXQgYmlzZWN0IHZpc3VhbGl6ZSIgbGVhcm5lZCBhIHNob3J0ZXIgc3lub255bSAiZ2l0IGJpc2VjdCB2aWV3Ii4KKworICogImdpdCBiaXNlY3QgdmlzdWFsaXplIiBydW5zICJnaXQgbG9nIiBpbiBhIG5vbi13aW5kb3dlZAorICAgZW52aXJvbm1lbnRzLiAgSXQgYWxzbyBjYW4gYmUgdG9sZCB3aGF0IGNvbW1hbmQgdG8gcnVuIChlLmcuICJnaXQKKyAgIGJpc2VjdCB2aXN1YWxpemUgdGlnIikuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkICJmb3JtYXQubnVtYmVyZWQiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgIHRvIGF1dG9tYXRpY2FsbHkgdHVybiAtLW51bWJlcmVkIG9wdGlvbiBvbiB3aGVuIG1vcmUgdGhhbiBvbmUgY29tbWl0cworICAgYXJlIGZvcm1hdHRlZC4KKworICogImdpdCBscy1maWxlcyIgbGVhcm5lZCAiLS1leGNsdWRlLXN0YW5kYXJkIiB0byB1c2UgdGhlIGNhbm5lZCBzZXQgb2YKKyAgIGV4Y2x1ZGUgZmlsZXMuCisKKyAqICJnaXQgdGFnIC1hIC1mIGV4aXN0aW5nIiBiZWdpbnMgdGhlIGVkaXRvciBzZXNzaW9uIHVzaW5nIHRoZSBleGlzdGluZworICAgYW5ub3RhdGlvbiBtZXNzYWdlLgorCisgKiAiZ2l0IHRhZyAtbSBvbmUgLW0gYmFyIiAobXVsdGlwbGUgLW0gb3B0aW9ucykgYmVoYXZlcyBzaW1pbGFybHkgdG8KKyAgICJnaXQgY29tbWl0IjsgdGhlIHBhcmFtZXRlcnMgdG8gLW0gb3B0aW9ucyBhcmUgZm9ybWF0dGVkIGFzIHNlcGFyYXRlCisgICBwYXJhZ3JhcGhzLgorCisgKiBUaGUgZm9ybWF0ICJnaXQgc2hvdyIgb3V0cHV0cyBhbiBhbm5vdGF0ZWQgdGFnIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGluY2x1ZGUgIlRhZ2dlcjogIiBhbmQgIkRhdGU6ICIgbGluZXMgZnJvbSB0aGUgdGFnIGl0c2VsZi4gIFN0cmljdGx5CisgICBzcGVha2luZyB0aGlzIGlzIGEgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZSwgYnV0IHRoaXMgaXMgYQorICAgcmVhc29uYWJsZSB1c2FiaWxpdHkgZml4IGFuZCBwZW9wbGUncyBzY3JpcHRzIHNob3VsZG4ndCBoYXZlIGJlZW4KKyAgIHJlbHlpbmcgb24gdGhlIGV4YWN0IG91dHB1dCBmcm9tICJnaXQgc2hvdyIgUG9yY2VsYWluIGFueXdheS4KKworICogImdpdCBjdnNpbXBvcnQiIGRpZCBub3Qgbm90aWNlIGVycm9ycyBmcm9tIHVuZGVybHlpbmcgImN2c3BzIgorICAgYW5kIHByb2R1Y2VkIGEgY29ycnVwdCBpbXBvcnQgc2lsZW50bHkuCisKKyAqICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiBsZWFybmVkIC13IG9wdGlvbiB0byBzcGVjaWZ5IGFuZCBzd2l0Y2ggdG8gdGhlCisgICBDVlMgd29ya2luZyBkaXJlY3RvcnkuCisKKyAqICJnaXQgY2hlY2tvdXQiIGZyb20gYSBzdWJkaXJlY3RvcnkgbGVhcm5lZCB0byB1c2UgIi4uL3BhdGgiIHRvIGFsbG93CisgICBjaGVja2luZyBvdXQgYSBwYXRoIG91dHNpZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpdGhvdXQgY2QnaW5nIHVwLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBmcm9tIGFuZCB0byBkZXRhY2hlZCBIRUFEIGxlYXZlcyBhIGJpdCBtb3JlCisgICBpbmZvcm1hdGlvbiBpbiB0aGUgcmVmbG9nLgorCisgKiAiZ2l0IHNlbmQtZW1haWwgLS1kcnktcnVuIiBzaG93cyBmdWxsIGhlYWRlcnMgZm9yIGVhc2llciBkaWFnbm9zaXMuCisKKyAqICJnaXQgbWVyZ2Utb3VycyIgaXMgbm93IGJ1aWx0LWluLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCAiaW5mbyIgYW5kICJzaG93LWV4dGVybmFscyIgc3ViY29tbWFuZHMuCisKKyAqICJnaXQgc3ZuIiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSBmYWlsZWQgdG8gcmVhZCBzZXR0aW5ncyBmcm9tIHRoZQorICAgLmdpdC9jb25maWcuCisKKyAqICJnaXQgc3ZuIiBsZWFybmVkIC0tdXNlLWxvZy1hdXRob3Igb3B0aW9uLCB3aGljaCBwaWNrcyB1cCBtb3JlCisgICBkZXNjcmlwdGl2ZSBuYW1lIGZyb20gRnJvbTogYW5kIFNpZ25lZC1vZmYtYnk6IGxpbmVzIGluIHRoZSBjb21taXQKKyAgIG1lc3NhZ2UuCisKKyAqICJnaXQgc3ZuIiB3YXN0ZWQgd2F5IHRvbyBtdWNoIGRpc2sgdG8gcmVjb3JkIHJldmlzaW9uIG1hcHBpbmdzCisgICBiZXR3ZWVuIHN2biBhbmQgZ2l0OyBhIG5ldyByZXByZXNlbnRhdGlvbiB0aGF0IGlzIG11Y2ggbW9yZSBjb21wYWN0CisgICBmb3IgdGhpcyBpbmZvcm1hdGlvbiBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGNvcnJlY3QgdGhpcy4KKworICogImdpdCBzdm4iIGxlZnQgdGVtcG9yYXJ5IGluZGV4IGZpbGVzIGl0IHVzZWQgd2l0aG91dCBjbGVhbmluZyB0aGVtCisgICB1cDsgdGhpcyB3YXMgY29ycmVjdGVkLgorCisgKiAiZ2l0IHN0YXR1cyIgZnJvbSBhIHN1YmRpcmVjdG9yeSBub3cgc2hvd3MgcmVsYXRpdmUgcGF0aHMsIHdoaWNoCisgICBtYWtlcyBjb3B5LWFuZC1wYXN0aW5nIGZvciBnaXQtY2hlY2tvdXQvZ2l0LWFkZC9naXQtcm0gZWFzaWVyLiAgVGhlCisgICB0cmFkaXRpb25hbCBiZWhhdmlvciB0byBzaG93IHRoZSBmdWxsIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZgorICAgdGhlIHdvcmsgdHJlZSBjYW4gYmUgaGFkIGJ5IHNldHRpbmcgc3RhdHVzLnJlbGF0aXZlcGF0aHMKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZmFsc2UuCisKKyAqICJnaXQgYmxhbWUiIGtlcHQgdGV4dCBmb3IgZWFjaCBhbm5vdGF0ZWQgcmV2aXNpb24gaW4gY29yZSBuZWVkbGVzc2x5OworICAgdGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgc2hvcnRsb2ciIGxlYXJuZWQgdG8gZGVmYXVsdCB0byBIRUFEIHdoZW4gdGhlIHN0YW5kYXJkIGlucHV0IGlzCisgICBhIHRlcm1pbmFsIGFuZCB0aGUgdXNlciBkaWQgbm90IGdpdmUgYW55IHJldmlzaW9uIHBhcmFtZXRlci4KKworICogImdpdCBzaG9ydGxvZyIgbGVhcm5lZCAiLWUiIG9wdGlvbiB0byBzaG93IGUtbWFpbCBhZGRyZXNzZXMgYXMgd2VsbCBhcworICAgYXV0aG9ycycgbmFtZXMuCisKKyAqICJnaXQgaGVscCIgbGVhcm5lZCAiLXciIG9wdGlvbiB0byBzaG93IGRvY3VtZW50YXRpb24gaW4gYnJvd3NlcnMuCisKKyAqIEluIGFkZGl0aW9uIHRoZXJlIGFyZSBxdWl0ZSBhIGZldyBpbnRlcm5hbCBjbGVhbi11cHMuIE5vdGFibHk6CisKKyAgIC0gbWFueSBmb3JrL2V4ZWMgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggcnVuLWNvbW1hbmQgQVBJLAorICAgICBicm91Z2h0IGZyb20gdGhlIG1zeXNnaXQgZWZmb3J0LgorCisgICAtIGludHJvZHVjdGlvbiBhbmQgbW9yZSB1c2Ugb2YgdGhlIG9wdGlvbiBwYXJzZXIgQVBJLgorCisgICAtIGVuaGFuY2VtZW50IGFuZCBtb3JlIHVzZSBvZiB0aGUgc3RyYnVmIEFQSS4KKworICogTWFrZWZpbGUgdHdlYWtzIHRvIHN1cHBvcnQgSFAtVVggaXMgaW4uCisKK0ZpeGVzIHNpbmNlIHYxLjUuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS4zIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworVGhlc2UgZml4ZXMgYXJlIG9ubHkgaW4gdjEuNS40IGFuZCBub3QgYmFja3BvcnRlZCB0byB2MS41LjMgbWFpbnRlbmFuY2UKK3Nlcmllcy4KKworICogVGhlIHdheSAiZ2l0IGRpZmYgLS1jaGVjayIgYmVoYXZlcyBpcyBtdWNoIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkKKyAgICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXdhcm4iIHdvcmtzLgorCisgKiAiZ2l0IHN2biIgdGFsa2luZyB3aXRoIHRoZSBTVk4gb3ZlciBIVFRQIHdpbGwgY29ycmVjdGx5IHF1b3RlIGJyYW5jaAorICAgYW5kIHByb2plY3QgbmFtZXMuCisKKyAqICJnaXQgY29uZmlnIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IG9uIHBsYXRmb3JtcyB0aGF0IGRlZmluZQorICAgUkVHX05PTUFUQ0ggdG8gYW4gZXZlbiBudW1iZXIuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBBc2NpaURvYyA4IGhhcyBhIGNoYW5nZSB0byBicmVhayBvdXIKKyAgIGRvY3VtZW50YXRpb247IGEgd29ya2Fyb3VuZCBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKworICogImdpdCBkaWZmIC0tY29sb3Itd29yZHMiIGNvbG9yZWQgY29udGV4dCBsaW5lcyBpbiBhIHdyb25nIGNvbG9yLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlNDE5NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMS50eHQKQEAgLTAsMCArMSw0NCBAQAorR0lUIHYxLjUuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYXJjaGl2ZSAtLXByZWZpeD0kcGF0aC8iIG1pc2hhbmRsZWQgZ2l0YXR0cmlidXRlcy4KKworICogImdpdCBmZXRjaCAtdiIgdGhhdCBmZXRjaGVzIGludG8gRkVUQ0hfSEVBRCBkaWQgbm90IHJlcG9ydCB0aGUgc3VtbWFyeQorICAgdGhlIHNhbWUgd2F5IGFzIGRvbmUgZm9yIHVwZGF0aW5nIHRoZSB0cmFja2luZyByZWZzLgorCisgKiAiZ2l0IHN2biIgbWlzYmVoYXZlZCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgY3VzdG9taXplZCB0aGUgImdpdAorICAgbG9nIiBvdXRwdXQgZm9ybWF0IHVzaW5nIGZvcm1hdC5wcmV0dHkuCisKKyAqICJnaXQgc3VibW9kdWxlIHN0YXR1cyIgbGVha2VkIGFuIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2UuCisKKyAqICJnaXQgbG9nIC0tZGF0ZS1vcmRlciAtLXRvcG8tb3JkZXIiIGRpZCBub3Qgb3ZlcnJpZGUgdGhlIGVhcmxpZXIKKyAgIGRhdGUtb3JkZXIgd2l0aCB0b3BvLW9yZGVyIGFzIGV4cGVjdGVkLgorCisgKiAiZ2l0IGJpc2VjdCBnb29kICR0aGlzIiBkaWQgbm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgcmV2aXNpb24KKyAgIGdpdmVuIHByb3Blcmx5LgorCisgKiAidXJsLjx0aGVyZT4uaW5zdGVhZE9mIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNsZWFuIiByYW4gaW5zaWRlIHN1YmRpcmVjdG9yeSBiZWhhdmVkIGFzIGlmIHRoZSBkaXJlY3Rvcnkgd2FzCisgICBleHBsaWNpdGx5IHNwZWNpZmllZCBmb3IgcmVtb3ZhbCBieSB0aGUgZW5kIHVzZXIgZnJvbSB0aGUgdG9wIGxldmVsLgorCisgKiAiZ2l0IGJpc2VjdCIgZnJvbSBhIGRldGFjaGVkIGhlYWQgbGVha2VkIGFuIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2UuCisKKyAqICJnaXQgYmlzZWN0IGdvb2QgJGEgJGIiIHdoZW4gJGEgaXMgT2sgYnV0ICRiIGlzIGJvZ3VzIHNob3VsZCBoYXZlCisgICBhdG9taWNhbGx5IGZhaWxlZCBiZWZvcmUgbWFya2luZyAkYSBhcyBnb29kLgorCisgKiAiZ2l0IGZtdC1tZXJnZS1tc2ciIGRpZCBub3QgY2xlYW4gdXAgbGVhZGluZyBlbXB0eSBsaW5lcyBmcm9tIGNvbW1pdAorICAgbG9nIG1lc3NhZ2VzIGxpa2UgImdpdCBsb2ciIGZhbWlseSBkb2VzLgorCisgKiAiZ2l0IGFtIiByZWNvcmRlZCBhIGNvbW1pdCB3aXRoIGVtcHR5IFN1YmplY3Q6IGxpbmUgd2l0aG91dAorICAgY29tcGxhaW5pbmcuCisKKyAqIHdoZW4gZ2l2ZW4gYSBjb21taXQgbG9nIG1lc3NhZ2Ugd2hvc2UgZmlyc3QgcGFyYWdyYXBoIGNvbnNpc3RzIG9mCisgICBtdWx0aXBsZSBsaW5lcywgImdpdCByZWJhc2UiIHNxdWFzaGVkIGl0IGludG8gYSBzaW5nbGUgbGluZS4KKworICogImdpdCByZW1vdGUgYWRkICRib2d1c19uYW1lICR1cmwiIGRpZCBub3QgY29tcGxhaW4gcHJvcGVybHkuCisKK0Fsc28gY29tZXMgd2l0aCB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MWE3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjIudHh0CkBAIC0wLDAgKzEsMjcgQEAKK0dJVCB2MS41LjUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCByZXBhY2sgLW4iIHdhcyBtaXN0YWtlbmx5IG1hZGUgbm8tb3AgZWFybGllci4KKworICogImdpdCBpbWFwLXNlbmQiIHdhbnRlZCB0byBhbHdheXMgaGF2ZSBpbWFwLmhvc3QgZXZlbiB3aGVuIHVzZSBvZgorICAgaW1hcC50dW5uZWwgbWFkZSBpdCB1bm5lY2Vzc2FyeS4KKworICogcmVmbG9nIHN5bnRheCB0aGF0IHVzZXMgdGltZSBlLmcuICJIRUFEQHsxMCBzZWNvbmRzIGFnb306cGF0aCIgZGlkIG5vdAorICAgc3RvcCBwYXJzaW5nIGF0IHRoZSBjbG9zaW5nICJ9Ii4KKworICogImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgXm1hc3Rlcl4yIiBwcmludGVkIHNvbGl0YXJ5ICJeIiwKKyAgIGJ1dCBpdCBzaG91bGQgcHJpbnQgbm90aGluZy4KKworICogImdpdCBjb21taXQiIGRpZCBub3QgZGV0ZWN0IHdoZW4gaXQgZmFpbGVkIHRvIHdyaXRlIHRyZWUgb2JqZWN0cy4KKworICogImdpdCBmZXRjaCIgc29tZXRpbWVzIHRyYW5zZmVycmVkIHRvbyBtYW55IG9iamVjdHMgdW5uZWNlc3NhcmlseS4KKworICogYSBwYXRoIHNwZWNpZmljYXRpb24gImEvYiIgaW4gLmdpdGF0dHJpYnV0ZXMgZmlsZSBzaG91bGQgbm90IG1hdGNoCisgICAic3ViL2EvYiIuCisKKyAqIHZhcmlvdXMgZ2l0d2ViIGZpeGVzLgorCitBbHNvIGNvbWVzIHdpdGggdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjJmOThiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4zLnR4dApAQCAtMCwwICsxLDEyIEBACitHSVQgdjEuNS41LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgc2VuZC1lbWFpbCAtLWNvbXBvc2UiIGRpZCBub3Qgbm90aWNlIHRoYXQgbm9uLWFzY2lpIGNvbnRlbnRzCisgICBuZWVkZWQgc29tZSBNSU1FIG1hZ2ljLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBkaWQgbm90IGV4cG9ydCBvY3RvcHVzIG1lcmdlcyBjb3JyZWN0bHkuCisKK0Fsc28gY29tZXMgd2l0aCB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDI3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjQudHh0CkBAIC0wLDAgKzEsNyBAQAorR0lUIHYxLjUuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNS40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IG5hbWUtcmV2IC0tYWxsIiB1c2VkIHRvIHNlZ2ZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmYTM2MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNS50eHQKQEAgLTAsMCArMSwxMSBAQAorR0lUIHYxLjUuNS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0kgcGVyc29uYWxseSBkbyBub3QgdGhpbmsgdGhlcmUgaXMgYW55IHJlYXNvbiBhbnlib2R5IHNob3VsZCB3YW50IHRvCitydW4gdjEuNS41Llggc2VyaWVzIHRoZXNlIGRheXMsIGJlY2F1c2UgJ21hc3RlcicgdmVyc2lvbiBpcyBhbHdheXMKK21vcmUgc3RhYmxlIHRoYW4gYW55IHRhZ2dlZCByZWxlYXNlZCB2ZXJzaW9uIG9mIGdpdC4KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gZnV0dXJlcHJvb2YgImdpdC1zaGVsbCIgdG8gYWNjZXB0IHJlcXVlc3RzCit3aXRob3V0IGEgZGFzaCBiZXR3ZWVuICJnaXQiIGFuZCBzdWJjb21tYW5kIG5hbWUgKGUuZy4gImdpdAordXBsb2FkLXBhY2siKSB3aGljaCB0aGUgbmV3ZXIgY2xpZW50IHdpbGwgc3RhcnQgdG8gbWFrZSBzb21ldGltZSBpbgordGhlIGZ1dHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZTg1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjYudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dJVCB2MS41LjUuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSAxLjUuNS41CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJlbW92ZWQgc3VwcG9ydCBmb3IgYW4gb2Jzb2xldGUgZ2l0d2ViIHJlcXVlc3QgVVJJLCB3aG9zZQorICAgaW1wbGVtZW50YXRpb24gcmFuICJnaXQgZGlmZiIgUG9yY2VsYWluLCBpbnN0ZWFkIG9mIHVzaW5nIHBsdW1iaW5nLAorICAgd2hpY2ggd291bGQgaGF2ZSBydW4gYW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIHNwZWNpZmllZCBpbiB0aGUKKyAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyB0aGUgZ2l0d2ViIHVzZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzIyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LnR4dApAQCAtMCwwICsxLDIwNyBAQAorR0lUIHYxLjUuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiBDb21lcyB3aXRoIGdpdC1ndWkgMC4xMC4xCisKKyhwb3J0YWJpbGl0eSkKKworICogV2Ugc2hvdWxkbid0IGFzayBmb3IgQlNEIGdyb3VwIG93bmVyc2hpcCBzZW1hbnRpY3MgYnkgc2V0dGluZyBnK3MgYml0CisgICBvbiBkaXJlY3RvcmllcyBvbiBvbGRlciBCU0Qgc3lzdGVtcyB0aGF0IHJlZnVzZXMgY2htb2QoKSBieSBub24gcm9vdAorICAgdXNlcnMuICBCU0Qgc2VtYW50aWNzIGlzIHRoZSBkZWZhdWx0IHRoZXJlIGFueXdheS4KKworICogQnVuY2ggb2YgcG9ydGFiaWxpdHkgaW1wcm92ZW1lbnQgcGF0Y2hlcyBjb21pbmcgZnJvbSBhbiBlZmZvcnQgdG8gcG9ydAorICAgdG8gU29sYXJpcyBoYXMgYmVlbiBhcHBsaWVkLgorCisocGVyZm9ybWFuY2UpCisKKyAqIE9uIHBsYXRmb3JtcyB3aXRoIHN1Ym9wdGltYWwgcXNvcnQoMykgaW1wbGVtZW50YXRpb24sIHRoZXJlCisgICBpcyBhbiBvcHRpb24gdG8gdXNlIG1vcmUgcmVhc29uYWJsZSBzdWJzdGl0dXRlIHdlIHNoaXAgd2l0aAorICAgb3VyIHNvZnR3YXJlLgorCisgKiBOZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAicGFjay5wYWNrc2l6ZWxpbWl0IiBjYW4gYmUgdXNlZAorICAgaW4gcGxhY2Ugb2YgY29tbWFuZCBsaW5lIG9wdGlvbiAtLW1heC1wYWNrLXNpemUuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgdGhlIG5hdGl2ZSBnaXQgcHJvdG9jb2wgdXNlZCB0byBtYWtlIGEKKyAgIGNvbm5lY3Rpb24gdG8gZmluZCBvdXQgdGhlIHNldCBvZiBjdXJyZW50IHJlbW90ZSByZWZzIGFuZAorICAgYW5vdGhlciB0byBhY3R1YWxseSBkb3dubG9hZCB0aGUgcGFjayBkYXRhLiAgV2Ugbm93IHVzZSBvbmx5CisgICBvbmUgY29ubmVjdGlvbiBmb3IgdGhlc2UgdGFza3MuCisKKyAqICJnaXQgY29tbWl0IiBkb2VzIG5vdCBydW4gbHN0YXQoMikgbW9yZSB0aGFuIG5lY2Vzc2FyeQorICAgYW55bW9yZS4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliKSBhcmUgYXdhcmUgb2YgbW9yZSBjb21tYW5kcyBhbmQKKyAgIG9wdGlvbnMuCisKKyAqIFlvdSBjYW4gYmUgd2FybmVkIHdoZW4gY29yZS5hdXRvY3JsZiBjb252ZXJzaW9uIGlzIGFwcGxpZWQgaW4KKyAgIHN1Y2ggYSB3YXkgdGhhdCByZXN1bHRzIGluIGFuIGlycmV2ZXJzaWJsZSBjb252ZXJzaW9uLgorCisgKiBBIGNhdGNoLWFsbCAiY29sb3IudWkiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8KKyAgIGVuYWJsZSBjb2xvcmluZyBvZiBhbGwgY29sb3ItY2FwYWJsZSBjb21tYW5kcywgaW5zdGVhZCBvZgorICAgaW5kaXZpZHVhbCBvbmVzIHN1Y2ggYXMgImNvbG9yLnN0YXR1cyIgYW5kICJjb2xvci5icmFuY2giLgorCisgKiBUaGUgY29tbWFuZHMgcmVmdXNlZCB0byB0YWtlIGFic29sdXRlIHBhdGhuYW1lcyB3aGVyZSB0aGV5CisgICByZXF1aXJlIHBhdGhuYW1lcyByZWxhdGl2ZSB0byB0aGUgd29yayB0cmVlIG9yIHRoZSBjdXJyZW50CisgICBzdWJkaXJlY3RvcnkuICBUaGV5IG5vdyBjYW4gdGFrZSBhYnNvbHV0ZSBwYXRobmFtZXMgaW4gc3VjaCBhCisgICBjYXNlIGFzIGxvbmcgYXMgdGhlIHBhdGhuYW1lcyBkbyBub3QgcmVmZXIgb3V0c2lkZSBvZiB0aGUKKyAgIHdvcmsgdHJlZS4gIEUuZy4gImdpdCBhZGQgJChwd2QpL2ZvbyIgbm93IHdvcmtzLgorCisgKiBFcnJvciBtZXNzYWdlcyB1c2VkIHRvIGJlIHNlbnQgdG8gc3RkZXJyLCBvbmx5IHRvIGdldCBoaWRkZW4sCisgICB3aGVuICRQQUdFUiB3YXMgaW4gdXNlLiAgVGhleSBub3cgYXJlIHNlbnQgdG8gc3Rkb3V0IGFsb25nCisgICB3aXRoIHRoZSBjb21tYW5kIG91dHB1dCB0byBiZSBzaG93biBpbiB0aGUgJFBBR0VSLgorCisgKiBBIHBhdHRlcm4gImZvby8iIGluIC5naXRpZ25vcmUgZmlsZSBub3cgbWF0Y2hlcyBhIGRpcmVjdG9yeQorICAgImZvbyIuICBQYXR0ZXJuICJmb28iIGFsc28gbWF0Y2hlcyBhcyBiZWZvcmUuCisKKyAqIGJhc2ggY29tcGxldGlvbidzIHByb21wdCBoZWxwZXIgZnVuY3Rpb24gY2FuIHRhbGsgYWJvdXQKKyAgIG9wZXJhdGlvbiBpbi1wcm9ncmVzcyAoZS5nLiBtZXJnZSwgcmViYXNlLCBldGMuKS4KKworICogQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgInVybC48dXNldGhpcz4uaW5zdGVhZG9mID0gPG90aGVydXJsPiIgY2FuIGJlCisgICB1c2VkIHRvIHRlbGwgImdpdC1mZXRjaCIgYW5kICJnaXQtcHVzaCIgdG8gdXNlIGRpZmZlcmVudCBVUkwgdGhhbiB3aGF0CisgICBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKyAqICJnaXQgYWRkIC1pIiBiZWhhdmVzIGJldHRlciBldmVuIGJlZm9yZSB5b3UgbWFrZSBhbiBpbml0aWFsIGNvbW1pdC4KKworICogImdpdCBhbSIgcmVmdXNlZCB0byBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSB3aXRob3V0IGEgZ29vZCByZWFzb24uCisKKyAqIEFmdGVyICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgZml4ZXMgd2hpdGVzcGFjZSBlcnJvcnMgaW4gYSBwYXRjaCwKKyAgIGEgbGluZSBiZWZvcmUgdGhlIGZpeCBjYW4gYXBwZWFyIGFzIGEgY29udGV4dCBvciBwcmVpbWFnZSBsaW5lIGluIGEKKyAgIGxhdGVyIHBhdGNoLCBjYXVzaW5nIHRoZSBwYXRjaCBub3QgdG8gYXBwbHkuICBUaGUgY29tbWFuZCBub3cga25vd3MgdG8KKyAgIHNlZSB0aHJvdWdoIHdoaXRlc3BhY2UgZml4ZXMgZG9uZSB0byBjb250ZXh0IGxpbmVzIHRvIHN1Y2Nlc3NmdWxseQorICAgYXBwbHkgc3VjaCBhIHBhdGNoIHNlcmllcy4KKworICogImdpdCBicmFuY2giIChhbmQgImdpdCBjaGVja291dCAtYiIpIHRvIGJyYW5jaCBmcm9tIGEgbG9jYWwgYnJhbmNoIGNhbgorICAgb3B0aW9uYWxseSBzZXQgImJyYW5jaC48bmFtZT4ubWVyZ2UiIHRvIG1hcmsgdGhlIG5ldyBicmFuY2ggdG8gYnVpbGQgb24KKyAgIHRoZSBvdGhlciBsb2NhbCBicmFuY2gsIHdoZW4gImJyYW5jaC5hdXRvc2V0dXBtZXJnZSIgaXMgc2V0IHRvCisgICAiYWx3YXlzIiwgb3Igd2hlbiBwYXNzaW5nIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uICItLXRyYWNrIiAodGhpcyBvcHRpb24KKyAgIHdhcyBpZ25vcmVkIHdoZW4gYnJhbmNoaW5nIGZyb20gbG9jYWwgYnJhbmNoZXMpLiAgQnkgZGVmYXVsdCwgdGhpcyBkb2VzCisgICBub3QgaGFwcGVuIHdoZW4gYnJhbmNoaW5nIGZyb20gYSBsb2NhbCBicmFuY2guCisKKyAqICJnaXQgY2hlY2tvdXQiIHRvIHN3aXRjaCB0byBhIGJyYW5jaCB0aGF0IGhhcyAiYnJhbmNoLjxuYW1lPi5tZXJnZSIgc2V0CisgICAoaS5lLiBtYXJrZWQgdG8gYnVpbGQgb24gYW5vdGhlciBicmFuY2gpIHJlcG9ydHMgaG93IG11Y2ggdGhlIGJyYW5jaAorICAgYW5kIHRoZSBvdGhlciBicmFuY2ggZGl2ZXJnZWQuCisKKyAqIFdoZW4gImdpdCBjaGVja291dCIgaGFzIHRvIHVwZGF0ZSBhIGxvdCBvZiBwYXRocywgaXQgdXNlZCB0byBiZSBzaWxlbnQKKyAgIGZvciA0IHNlY29uZHMgYmVmb3JlIGl0IHNob3dlZCBhbnkgcHJvZ3Jlc3MgcmVwb3J0LiAgSXQgaXMgbm93IGEgYml0CisgICBtb3JlIGltcGF0aWVudCBhbmQgc3RhcnRzIHNob3dpbmcgcHJvZ3Jlc3MgcmVwb3J0IGVhcmx5LgorCisgKiAiZ2l0IGNvbW1pdCIgbGVhcm5lZCBhIG5ldyBob29rICJwcmVwYXJlLWNvbW1pdC1tc2ciIHRoYXQgY2FuCisgICBpbnNwZWN0IHdoYXQgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIGFuZCBwcmVwYXJlIHRoZSBjb21taXQKKyAgIGxvZyBtZXNzYWdlIHRlbXBsYXRlIHRvIGJlIGVkaXRlZC4KKworICogImdpdCBjdnNpbXBvcnQiIGNhbiBub3cgdGFrZSBtb3JlIHRoYW4gb25lIC1NIG9wdGlvbnMuCisKKyAqICJnaXQgZGVzY3JpYmUiIGxlYXJuZWQgdG8gbGltaXQgdGhlIHRhZ3MgdG8gYmUgdXNlZCBmb3IKKyAgIG5hbWluZyB3aXRoIC0tbWF0Y2ggb3B0aW9uLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMiIG5vdyBiYXJmcyB3aGVuIHRoZSBuYW1lZCBjb21taXQKKyAgIGNhbm5vdCBiZSBkZXNjcmliZWQuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCIgZGVzY3JpYmVzIG9ubHkgY29tbWl0cyB0aGF0IGFyZSB0YWdnZWQuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1sb25nIiBkZXNjcmliZXMgYSB0YWdnZWQgY29tbWl0IGFzICR0YWctMC0kc2hhMSwKKyAgIGluc3RlYWQgb2YganVzdCBzaG93aW5nIHRoZSBleGFjdCB0YWduYW1lLgorCisgKiAiZ2l0IGRlc2NyaWJlIiB3YXJucyB3aGVuIHVzaW5nIGEgdGFnIHdob3NlIG5hbWUgYW5kIHBhdGggY29udHJhZGljdAorICAgd2l0aCBlYWNoIG90aGVyLgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgIi0tcmVsYXRpdmUiIG9wdGlvbiB0byBsaW1pdCBhbmQgb3V0cHV0IHBhdGhzCisgICByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlbiB3b3JraW5nIGluIGEgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgIi0tZGlyc3RhdCIgb3B0aW9uIHRvIHNob3cgYmlyZHMtZXllLXN1bW1hcnkgb2YKKyAgIGNoYW5nZXMgbW9yZSBjb25jaXNlbHkgdGhhbiAiLS1kaWZmc3RhdCIuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIC0tY292ZXItbGV0dGVyIG9wdGlvbiB0byBnZW5lcmF0ZSBhIGNvdmVyCisgICBsZXR0ZXIgdGVtcGxhdGUuCisKKyAqICJnaXQgZ2MiIGxlYXJuZWQgLS1xdWlldCBvcHRpb24uCisKKyAqICJnaXQgZ2MiIG5vdyBhdXRvbWF0aWNhbGx5IHBydW5lcyB1bnJlYWNoYWJsZSBvYmplY3RzIHRoYXQgYXJlIHR3bworICAgd2Vla3Mgb2xkIG9yIG9sZGVyLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgY2FuIGJlIGRpc2FibGVkIG1vcmUgZWFzaWx5IGJ5IGp1c3Qgc2V0dGluZyBnYy5hdXRvCisgICB0byB6ZXJvLiAgSXQgYWxzbyB0b2xlcmF0ZXMgbW9yZSBwYWNrZmlsZXMgYnkgZGVmYXVsdC4KKworICogImdpdCBncmVwIiBub3cga25vd3MgIi0tbmFtZS1vbmx5IiBpcyBhIHN5bm9ueW0gZm9yIHRoZSAiLWwiIG9wdGlvbi4KKworICogImdpdCBoZWxwIDxhbGlhcz4iIG5vdyByZXBvcnRzICInZ2l0IDxhbGlhcz4nIGlzIGFsaWFzIHRvIDx3aGF0PiIsCisgICBpbnN0ZWFkIG9mIHNheWluZyAiTm8gbWFudWFsIGVudHJ5IGZvciBnaXQtPGFsaWFzPiIuCisKKyAqICJnaXQgaGVscCIgY2FuIHVzZSBkaWZmZXJlbnQgYmFja2VuZHMgdG8gc2hvdyBtYW51YWwgcGFnZXMgYW5kIHRoaXMgY2FuCisgICBiZSBjb25maWd1cmVkIHVzaW5nICJtYW4udmlld2VyIiBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0ayIgZG9lcyBub3QgcmVzdG9yZSB3aW5kb3cgcG9zaXRpb24gZnJvbSAkSE9NRS8uZ2l0ayBhbnltb3JlIChpdAorICAgc3RpbGwgcmVzdG9yZXMgdGhlIHNpemUpLgorCisgKiAiZ2l0IGxvZyAtLWdyZXA9PHdoYXQ+IiBsZWFybmVkICItLWZpeGVkLXN0cmluZ3MiIG9wdGlvbiB0byBsb29rIGZvcgorICAgPHdoYXQ+IHdpdGhvdXQgdHJlYXRpbmcgaXQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24uCisKKyAqICJnaXQgZ3VpIiBsZWFybmVkIGFuIGF1dG8tc3BlbGwgY2hlY2tpbmcuCisKKyAqICJnaXQgcHVzaCA8c29tZXdoZXJlPiBIRUFEIiBhbmQgImdpdCBwdXNoIDxzb21ld2hlcmU+ICtIRUFEIiB3b3JrcyBhcworICAgZXhwZWN0ZWQ7IHRoZXkgcHVzaCB0aGUgY3VycmVudCBicmFuY2ggKGFuZCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCkuCisgICBJbiBhZGRpdGlvbiwgSEVBRCBjYW4gYmUgd3JpdHRlbiBhcyB0aGUgdmFsdWUgb2YgInJlbW90ZS48dGhlcmU+LnB1c2giCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwYWNrLnRocmVhZHMiIGlzIHNldCB0byAwLCAiZ2l0CisgICByZXBhY2siIGF1dG8gZGV0ZWN0cyB0aGUgbnVtYmVyIG9mIENQVXMgYW5kIHVzZXMgdGhhdCBtYW55IHRocmVhZHMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byBwcm9tcHQgZm9yIHBhc3N3b3JkcworICAgaW50ZXJhY3RpdmVseS4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIGFuIGVhc2llciB3YXkgdG8gc3VwcHJlc3MgQ0MKKyAgIHJlY2lwaWVudHMuCisKKyAqICJnaXQgc3Rhc2giIGxlYXJuZWQgInBvcCIgY29tbWFuZCwgdGhhdCBhcHBsaWVzIHRoZSBsYXRlc3Qgc3Rhc2ggYW5kCisgICByZW1vdmVzIGl0IGZyb20gdGhlIHN0YXNoLCBhbmQgImRyb3AiIGNvbW1hbmQgdG8gZGlzY2FyZCB0aGUgbmFtZWQKKyAgIHN0YXNoIGVudHJ5LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCBhIG5ldyBzdWJjb21tYW5kICJzdW1tYXJ5IiB0byBzaG93IHRoZQorICAgc3ltbWV0cmljIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgSEVBRCB2ZXJzaW9uIGFuZCB0aGUgd29yayB0cmVlIHZlcnNpb24KKyAgIG9mIHRoZSBzdWJtb2R1bGUgY29tbWl0cy4KKworICogVmFyaW91cyAiZ2l0IGN2c2ltcG9ydCIsICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiwgImdpdCBjdnNzZXJ2ZXIiLAorICAgImdpdCBzdm4iIGFuZCAiZ2l0IHA0IiBpbXByb3ZlbWVudHMuCisKKyhpbnRlcm5hbCkKKworICogRHVwbGljYXRlZCBjb2RlIGJldHdlZW4gZ2l0LWhlbHAgYW5kIGdpdC1pbnN0YXdlYiB0aGF0CisgICBsYXVuY2hlcyB1c2VyJ3MgcHJlZmVycmVkIGJyb3dzZXIgaGFzIGJlZW4gcmVmYWN0b3JlZC4KKworICogSXQgaXMgbm93IGVhc2llciB0byB3cml0ZSB0ZXN0IHNjcmlwdHMgdGhhdCByZWNvcmRzIGtub3duCisgICBicmVha2FnZXMuCisKKyAqICJnaXQgY2hlY2tvdXQiIGlzIHJld3JpdHRlbiBpbiBDLgorCisgKiAiZ2l0IHJlbW90ZSIgaXMgcmV3cml0dGVuIGluIEMuCisKKyAqIFR3byBjb25mbGljdCBodW5rcyB0aGF0IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ5IHNob3J0IHNwYW4gb2YgY29tbW9uCisgICBsaW5lcyBhcmUgbm93IGNvYWxlc2NlZCBpbnRvIG9uZSBsYXJnZXIgaHVuaywgdG8gbWFrZSB0aGUgcmVzdWx0IGVhc2llcgorICAgdG8gcmVhZC4KKworICogUnVuLWNvbW1hbmQgQVBJJ3MgdXNlIG9mIGZpbGUgZGVzY3JpcHRvcnMgaXMgZG9jdW1lbnRlZCBjbGVhcmVyIGFuZAorICAgaXMgbW9yZSBjb25zaXN0ZW50IG5vdy4KKworICogZGlmZiBvdXRwdXQgY2FuIGJlIHNlbnQgdG8gRklMRSAqIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gc3Rkb3V0LiAgVGhpcworICAgd2lsbCBoZWxwIHJlaW1wbGVtZW50aW5nIG1vcmUgdGhpbmdzIGluIEMuCisKK0ZpeGVzIHNpbmNlIHYxLjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS40IG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdC1odHRwLXB1c2giIGRpZCBub3QgYWxsb3cgZGVsZXRpb24gb2YgcmVtb3RlIHJlZiB3aXRoIHRoZSB1c3VhbAorICAgInB1c2ggPHJlbW90ZT4gOjxicmFuY2g+IiBzeW50YXguCisKKyAqICJnaXQtcmViYXNlIC0tYWJvcnQiIGRpZCBub3QgZ28gYmFjayB0byB0aGUgcmlnaHQgbG9jYXRpb24gaWYKKyAgICJnaXQtcmVzZXQiIHdhcyBydW4gZHVyaW5nIHRoZSAiZ2l0LXJlYmFzZSIgc2Vzc2lvbi4KKworICogImdpdCBpbWFwLXNlbmQiIHdpdGhvdXQgc2V0dGluZyBpbWFwLmhvc3QgZGlkIG5vdCBlcnJvciBvdXQgYnV0CisgICBzZWdmYXVsdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2NGIxNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMS50eHQKQEAgLTAsMCArMSwyOCBAQAorR0lUIHYxLjUuNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogTGFzdCBtaW51dGUgY2hhbmdlIGJyb2tlIGxvb3NlIG9iamVjdCBjcmVhdGlvbiBvbiBBSVguCisKKyogKHBlcmZvcm1hbmNlIGZpeCkgV2UgdXNlZCB0byBtYWtlICRHSVRfRElSIGFic29sdXRlIHBhdGggZWFybHkgaW4gdGhlCisgIHByb2dyYW1zIGJ1dCBrZWVwaW5nIGl0IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpbnRlcm5hbGx5CisgIGdpdmVzIDEtMyBwZXItY2VudCBwZXJmb3JtYW5jZSBib29zdC4KKworKiBiYXNoIGNvbXBsZXRpb24ga25vd3MgdGhlIG5ldyAtLWdyYXBoIG9wdGlvbiB0byBnaXQtbG9nIGZhbWlseS4KKworCisqIGdpdC1kaWZmIC1jLy0tY2Mgc2hvd2VkIHVubmVjZXNzYXJ5ICJkZWxldGlvbiIgbGluZXMgYXQgdGhlIGNvbnRleHQKKyAgYm91bmRhcnkuCisKKyogZ2l0LWZvci1lYWNoLXJlZiBpZ25vcmVkICUob2JqZWN0KSBhbmQgJSh0eXBlKSByZXF1ZXN0cyBmb3IgdGFnCisgIG9iamVjdHMuCisKKyogZ2l0LW1lcmdlIHVzYWdlIGhhZCBhIHR5cG8uCisKKyogUmVidWlsZGluZyBvZiBnaXQtc3ZuIG1ldGFpbmZvIGRhdGFiYXNlIGRpZCBub3QgdGFrZSByZXdyaXRlUm9vdAorICBvcHRpb24gaW50byBhY2NvdW50LgorCisqIFJ1bm5pbmcgImdpdC1yZWJhc2UgLS1jb250aW51ZS8tLXNraXAvLS1hYm9ydCIgYmVmb3JlIHN0YXJ0aW5nIGEKKyAgcmViYXNlIGdhdmUgbm9uc2Vuc2UgZXJyb3IgbWVzc2FnZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTAyYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4yLnR4dApAQCAtMCwwICsxLDQwIEBACitHSVQgdjEuNS42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRnV0dXJlcHJvb2YKKy0tLS0tLS0tLS0tCisKKyAqICJnaXQtc2hlbGwiIGFjY2VwdHMgcmVxdWVzdHMgd2l0aG91dCBhIGRhc2ggYmV0d2VlbiAiZ2l0IiBhbmQKKyAgIHN1YmNvbW1hbmQgbmFtZSAoZS5nLiAiZ2l0IHVwbG9hZC1wYWNrIikgd2hpY2ggdGhlIG5ld2VyIGNsaWVudCB3aWxsCisgICBzdGFydCB0byBtYWtlIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCisKK0ZpeGVzIHNpbmNlIHYxLjUuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgY2xvbmUiIGZyb20gYSByZW1vdGUgdGhhdCBpcyBuYW1lZCB3aXRoIHVybC5pbnN0ZWFkT2Ygc2V0dGluZyBpbgorICAkSE9NRS8uZ2l0Y29uZmlnIGRpZCBub3Qgd29yayB3ZWxsLgorCisqICJnaXQgZGVzY3JpYmUgLS1sb25nIC0tdGFncyIgc2VnZmF1bHRlZCB3aGVuIHRoZSBkZXNjcmliZWQgcmV2aXNpb24gd2FzCisgIHRhZ2dlZCB3aXRoIGEgbGlnaHR3ZWlnaHQgdGFnLgorCisqICJnaXQgZGlmZiAtLWNoZWNrIiBkaWQgbm90IHJlcG9ydCB0aGUgcmVzdWx0IHZpYSBpdHMgZXhpdCBzdGF0dXMKKyAgcmVsaWFibHkuCisKKyogV2hlbiByZW1vdGUgc2lkZSB1c2VkIHRvIGhhdmUgYnJhbmNoICdmb28nIGFuZCBnaXQtZmV0Y2ggZmluZHMgdGhhdCBub3cKKyAgaXQgaGFzIGJyYW5jaCAnZm9vL2JhcicsIGl0IHJlZnVzZXMgdG8gbG9zZSB0aGUgZXhpc3RpbmcgcmVtb3RlIHRyYWNraW5nCisgIGJyYW5jaCBhbmQgaXRzIHJlZmxvZy4gIFRoZSBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIGltcHJvdmVkIHRvIHN1Z2dlc3QKKyAgcHJ1bmluZyB0aGUgcmVtb3RlIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHByb2NlZWQgYW5kIGdldCB0aGUgbGF0ZXN0IHNldAorICBvZiBicmFuY2hlcyBmcm9tIHRoZSByZW1vdGUsIGluY2x1ZGluZyBzdWNoICdmb28vYmFyJy4KKworKiAiZ2l0IHJlc2V0IGZpbGUiIHNob3VsZCBtZWFuIHRoZSBzYW1lIHRoaW5nIGFzICJnaXQgcmVzZXQgSEVBRCBmaWxlIiwKKyAgYnV0IHdlIHJlcXVpcmVkIGRpc2FtYmlndWF0aW5nIC0tIGV2ZW4gd2hlbiAiZmlsZSIgaXMgbm90IGFtYmlndW91cy4KKworKiAiZ2l0IHNob3ciIHNlZ2ZhdWx0ZWQgd2hlbiBhbiBhbm5vdGF0ZWQgdGFnIHRoYXQgcG9pbnRzIGF0IGFub3RoZXIKKyAgYW5ub3RhdGVkIHRhZyB3YXMgZ2l2ZW4gdG8gaXQuCisKKyogT3B0aW1pemF0aW9uIGZvciBhIGxhcmdlIGltcG9ydCB2aWEgImdpdC1zdm4iIGludHJvZHVjZWQgaW4gdjEuNS42IGhhZCBhCisgIHNlcmlvdXMgbWVtb3J5IGFuZCB0ZW1wb3JhcnkgZmlsZSBsZWFrLCB3aGljaCBtYWRlIGl0IHVudXNhYmxlIGZvcgorICBtb2RlcmF0ZWx5IGxhcmdlIGltcG9ydC4KKworKiAiZ2l0LXN2biIgbWFuZ2xlZCByZW1vdGUgbmlja25hbWUgdXNlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisgIHVubmVjZXNzYXJpbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjFkZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4zLnR4dApAQCAtMCwwICsxLDUyIEBACitHSVQgdjEuNS42LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS42LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogU2V0dGluZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgdG8gdHJhZGl0aW9uYWwgInRydWUiIHZhbHVlIHdhcyBzdXBwb3NlZCB0byBtYWtlCisgIHRoZSByZXBvc2l0b3J5IGdyb3VwIHdyaXRhYmxlIGJ1dCBzaG91bGQgbm90IGFmZmVjdCBwZXJtaXNzaW9uIGZvciBvdGhlcnMuCisgIEhvd2V2ZXIsIHNpbmNlIDEuNS42LCBpdCB3YXMgYnJva2VuIHRvIGRyb3AgcGVybWlzc2lvbiBmb3Igb3RoZXJzIHdoZW4gdW1hc2sgaXMKKyAgMDIyLCBtYWtpbmcgdGhlIHJlcG9zaXRvcnkgdW5yZWFkYWJsZSBieSBvdGhlcnMuCisKKyogU2V0dGluZyBHSVRfVFJBQ0Ugd2lsbCByZXBvcnQgc3Bhd25pbmcgb2YgZXh0ZXJuYWwgcHJvY2VzcyB2aWEgcnVuX2NvbW1hbmQoKS4KKworKiBVc2luZyBhbiBvYmplY3Qgd2l0aCB2ZXJ5IGRlZXAgZGVsdGEgY2hhaW4gcGlubmVkIG1lbW9yeSBuZWVkZWQgZm9yIGV4dHJhY3RpbmcKKyAgaW50ZXJtZWRpYXRlIGJhc2Ugb2JqZWN0cyB1bm5lY2Vzc2FyaWx5IGxvbmcsIGxlYWRpbmcgdG8gZXhjZXNzIG1lbW9yeSB1c2FnZS4KKworKiBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IGRpZCBub3Qgbm90aWNlICctLScgbWFya2VyIG9uIHRoZSBjb21tYW5kCisgIGxpbmUgYW5kIHRyaWVkIHRoZSByZWxhdGl2ZWx5IHNsb3cgInJlZiBjb21wbGV0aW9uIiBldmVuIHdoZW4KKyAgY29tcGxldGluZyBhcmd1bWVudHMgYWZ0ZXIgb25lLgorCisqIFJlZ2lzdGVyaW5nIGEgbm9uLWVtcHR5IGJsb2IgcmFjaWx5IGFuZCB0aGVuIHRydW5jYXRpbmcgdGhlIHdvcmtpbmcKKyAgdHJlZSBmaWxlIGZvciBpdCBjb25mdXNlZCAicmFjeS1naXQgYXZvaWRhbmNlIiBsb2dpYyBpbnRvIHRoaW5raW5nCisgIHRoYXQgdGhlIHBhdGggaXMgbm93IHVuY2hhbmdlZC4KKworKiBUaGUgc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gZ2l0LWFyY2hpdmUgd2VyZSBwbGFjZWQKKyAgaW4gYSB3cm9uZyBwbGFjZSBpbiB0aGUgZ2l0YXR0cmlidXRlcyg1KSBtYW51YWwgcGFnZS4KKworKiAiZ2l0IGFtIiB3YXMgbm90IGhlbHBmdWwgdG8gdGhlIHVzZXJzIHdoZW4gaXQgZGV0ZWN0ZWQgdGhhdCB0aGUgY29tbWl0dGVyCisgIGluZm9ybWF0aW9uIGlzIG5vdCBzZXQgdXAgcHJvcGVybHkgeWV0LgorCisqICJnaXQgY2xvbmUiIGhhZCBhIGxlZnRvdmVyIGRlYnVnZ2luZyBmcHJpbnRmKCkuCisKKyogImdpdCBjbG9uZSAtcSIgd2FzIG5vdCBxdWlldCBlbm91Z2ggYXMgaXQgdXNlZCB0byBhbmQgZ2F2ZSBvYmplY3QgY291bnQKKyAgYW5kIHByb2dyZXNzIHJlcG9ydHMuCisKKyogImdpdCBjbG9uZSIgbWFya2VkIGRvd25sb2FkZWQgcGFja2ZpbGUgd2l0aCAua2VlcDsgdGhpcyBjb3VsZCBiZSBhCisgIGdvb2QgdGhpbmcgaWYgdGhlIHJlbW90ZSBzaWRlIGlzIHdlbGwgcGFja2VkIGJ1dCBvdGhlcndpc2Ugbm90LAorICBlc3BlY2lhbGx5IGZvciBhIHByb2plY3QgdGhhdCBpcyBub3QgcmVhbGx5IGJpZy4KKworKiAiZ2l0IGRhZW1vbiIgdXNlZCB0byBjYWxsIHN5c2xvZygpIGZyb20gYSBzaWduYWwgaGFuZGxlciwgd2hpY2gKKyAgY291bGQgcmFpc2Ugc2lnbmFscyBvZiBpdHMgb3duIGJ1dCBnZW5lcmFsbHkgaXMgbm90IHJlZW50cmFudC4gIFRoaXMKKyAgd2FzIGZpeGVkIGJ5IHJlc3RydWN0dXJpbmcgdGhlIGNvZGUgdG8gcmVwb3J0IHN5c2xvZygpIGFmdGVyIHRoZSBoYW5kbGVyCisgIHJldHVybnMuCisKKyogV2hlbiAiZ2l0IHB1c2giIHRyaWVzIHRvIHJlbW92ZSBhIHJlbW90ZSByZWYsIGFuZCBjb3JyZXNwb25kaW5nCisgIHRyYWNraW5nIHJlZiBpcyBtaXNzaW5nLCB3ZSB1c2VkIHRvIHJlcG9ydCBlcnJvciAoaS5lLiBmYWlsdXJlIHRvCisgIHJlbW92ZSBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCkuCisKKyogImdpdCBtYWlsaW5mbyIgKGhlbmNlICJnaXQgYW0iKSBkaWQgbm90IGhhbmRsZSBjb21taXQgbG9nIG1lc3NhZ2VzIGluIGEKKyAgTUlNRSBtdWx0aXBhcnQgbWFpbCBjb3JyZWN0bHkuCisKK0NvbnRhaW5zIG90aGVyIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OTY4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjQudHh0CkBAIC0wLDAgKzEsNDcgQEAKK0dJVCB2MS41LjYuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBWYXJpb3VzIGNvbW1hbmRzIGNvdWxkIG92ZXJmbG93IGl0cyBpbnRlcm5hbCBidWZmZXIgb24gYSBwbGF0Zm9ybQorICB3aXRoIHNtYWxsIFBBVEhfTUFYIHZhbHVlIGluIGEgcmVwb3NpdG9yeSB0aGF0IGhhcyBjb250ZW50cyB3aXRoCisgIGxvbmcgcGF0aG5hbWVzLgorCisqIFRoZXJlIHdhc24ndCBhIHdheSB0byBtYWtlIC0tcHJldHR5PWZvcm1hdDolPD4gc3BlY2lmaWVycyB0byBob25vcgorICAubWFpbG1hcCBuYW1lIHJld3JpdGluZyBmb3IgYXV0aG9ycyBhbmQgY29tbWl0dGVycy4gIE5vdyB5b3UgY2FuIHdpdGgKKyAgJWFOIGFuZCAlY04uCisKKyogQmFzaCBjb21wbGV0aW9uIHdhc3RlZCB0b28gbWFueSBjeWNsZXM7IHRoaXMgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGJlCisgIHVzYWJsZSBhZ2Fpbi4KKworKiBCYXNoIGNvbXBsZXRpb24gbG9zdCByZWYgcGFydCB3aGVuIGNvbXBsZXRpbmcgc29tZXRoaW5nIGxpa2UgImdpdCBzaG93CisgIHB1Ok1ha2VmaWxlIi4KKworKiAiZ2l0LWN2c3NlcnZlciIgZGlkIG5vdCBjbGVhbiB1cCBpdHMgdGVtcG9yYXJ5IHdvcmtpbmcgYXJlYSBhZnRlciBhbm5vdGF0ZQorICByZXF1ZXN0LgorCisqICJnaXQtZGFlbW9uIiBjYWxsZWQgc3lzbG9nKCkgZnJvbSBpdHMgc2lnbmFsIGhhbmRsZXIsIHdoaWNoIHdhcyBhCisgIG5vLW5vLgorCisqICJnaXQtZmV0Y2giIGludG8gYW4gZW1wdHkgcmVwb3NpdG9yeSB1c2VkIHRvIHJlbWluZCB0aGF0IHRoZSBmZXRjaCB3aWxsCisgICBiZSBodWdlIGJ5IHNheWluZyAibm8gY29tbW9uIGNvbW1pdHMiLCBidXQgdGhpcyB3YXMgYW4gdW5uZWNlc3NhcnkKKyAgIG5vaXNlOyBpdCBpcyBhbHJlYWR5IGtub3duIGJ5IHRoZSB1c2VyIGFueXdheS4KKworKiAiZ2l0LWh0dHAtZmV0Y2giIHdvdWxkIGhhdmUgc2VnZmF1bHRlZCB3aGVuIHBhY2sgaWR4IGZpbGUgcmV0cmlldmVkCisgIGZyb20gdGhlIG90aGVyIHNpZGUgd2FzIGNvcnJ1cHQuCisKKyogImdpdC1pbmRleC1wYWNrIiB1c2VkIHRvbyBtdWNoIG1lbW9yeSB3aGVuIGRlYWxpbmcgd2l0aCBhIGRlZXAgZGVsdGEgY2hhaW4uCisKKyogImdpdC1tYWlsaW5mbyIgKGhlbmNlICJnaXQtYW0iKSBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgaW4tYm9keSBbUEFUQ0hdCisgIGxpbmUgdG8gb3ZlcnJpZGUgdGhlIGNvbW1pdCB0aXRsZSB0YWtlbiBmcm9tIHRoZSBtYWlsIFN1YmplY3QgaGVhZGVyLgorCisqICJnaXQtcmViYXNlIC1pIC1wIiBsb3N0IHBhcmVudHMgdGhhdCBhcmUgbm90IGludm9sdmVkIGluIHRoZSBoaXN0b3J5CisgIGJlaW5nIHJld3JpdHRlbi4KKworKiAiZ2l0LXJtIiBsb3N0IHRyYWNrIG9mIHdoZXJlIHRoZSBpbmRleCBmaWxlIHdhcyB3aGVuIEdJVF9ESVIgd2FzCisgIHNwZWNpZmllZCBhcyBhIHJlbGF0aXZlIHBhdGguCisKKyogImdpdC1yZXYtbGlzdCAtLXF1aWV0IiB3YXMgbm90IHF1aWV0IGFzIGFkdmVydGlzZWQuCisKK0NvbnRhaW5zIG90aGVyIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Y2ExNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjUudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dJVCB2MS41LjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGN2c2ltcG9ydCIgdXNlZCB0byBzcGl0IG91dCAiVU5LTk9XTiBMSU5FLi4uIiBkaWFnbm9zdGljcyB0byBzdGRvdXQuCisKKyogImdpdCBjb21taXQgLUYgZmlsZW5hbWUiIGFuZCAiZ2l0IHRhZyAtRiBmaWxlbmFtZSIgcnVuIGZyb20gc3ViZGlyZWN0b3JpZXMKKyAgZGlkIG5vdCByZWFkIHRoZSByaWdodCBmaWxlLgorCisqICJnaXQgaW5pdCAtLXRlbXBsYXRlPSIgd2l0aCBibGFuayAidGVtcGxhdGUiIHBhcmFtZXRlciBsaW5rZWQgZmlsZXMKKyAgdW5kZXIgcm9vdCBkaXJlY3RvcmllcyB0byAuZ2l0LCB3aGljaCB3YXMgYSB0b3RhbCBub25zZW5zZS4gIEluc3RlYWQsIGl0CisgIG1lYW5zICJJIGRvIG5vdCB3YW50IHRvIHVzZSBhbnl0aGluZyBmcm9tIHRoZSB0ZW1wbGF0ZSBkaXJlY3RvcnkiLgorCisqICJnaXQgZGlmZi10cmVlIiBhbmQgb3RoZXIgZGlmZiBwbHVtYmluZyBpZ25vcmVkIGRpZmYucmVuYW1lbGltaXQgY29uZmlndXJhdGlvbgorICB2YXJpYWJsZSB3aGVuIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrZWQgZm9yIHJlbmFtZSBkZXRlY3Rpb24uCisKKyogImdpdCBuYW1lLXJldiAtLW5hbWUtb25seSIgZGlkIG5vdCB3b3JrIHdoZW4gIi0tc3RkaW4iIG9wdGlvbiB3YXMgaW4gZWZmZWN0LgorCisqICJnaXQgc2hvdy1icmFuY2giIG1pc2hhbmRsZWQgaXRzIDh0aCBicmFuY2guCisKKyogQWRkaXRpb24gb2YgImdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyIgdGhhdCBoYXBwZW5lZCBkdXJpbmcKKyAgMS41LjYgY3ljbGUgYnJva2UgImdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyIuCisKKyogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IHBhcnNlIGNoYXJzZXQgZnJvbSBhbiBleGlzdGluZyBDb250ZW50LXR5cGU6CisgIGhlYWRlciBwcm9wZXJseS4KKworQ29udGFpbnMgb3RoZXIgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkYTIzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNi50eHQKQEAgLTAsMCArMSwxMCBAQAorR0lUIHYxLjUuNi42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIDEuNS42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUmVtb3ZlZCBzdXBwb3J0IGZvciBhbiBvYnNvbGV0ZSBnaXR3ZWIgcmVxdWVzdCBVUkksIHdob3NlCisgICBpbXBsZW1lbnRhdGlvbiByYW4gImdpdCBkaWZmIiBQb3JjZWxhaW4sIGluc3RlYWQgb2YgdXNpbmcgcGx1bWJpbmcsCisgICB3aGljaCB3b3VsZCBoYXZlIHJ1biBhbiBleHRlcm5hbCBkaWZmIGNvbW1hbmQgc3BlY2lmaWVkIGluIHRoZQorICAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFzIHRoZSBnaXR3ZWIgdXNlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0M2Q4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYudHh0CkBAIC0wLDAgKzEsMTE1IEBACitHSVQgdjEuNS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyogQ29tZXMgd2l0aCB1cGRhdGVkIGdpdGsgYW5kIGdpdC1ndWkuCisKKyhwb3J0YWJpbGl0eSkKKworKiBnaXQgd2lsbCBidWlsZCBvbiBBSVggYmV0dGVyIHRoYW4gYmVmb3JlIG5vdy4KKworKiBjb3JlLmlnbm9yZWNhc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byB3b3JrIGJldHRlciBvbgorICBmaWxlc3lzdGVtcyB0aGF0IGFyZSBub3QgY2FzZSBzZW5zaXRpdmUuCisKKyogImdpdCBpbml0IiBub3cgYXV0b2RldGVjdHMgdGhlIGNhc2Ugc2Vuc2l0aXZpdHkgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kCisgIHNldHMgY29yZS5pZ25vcmVjYXNlIGFjY29yZGluZ2x5LgorCisqIGNwaW8gaXMgbm8gbG9uZ2VyIHVzZWQ7IG5laXRoZXIgImN1cmwiIGJpbmFyeSAobGliY3VybCBpcyBzdGlsbCB1c2VkKS4KKworKGRvY3VtZW50YXRpb24pCisKKyogTWFueSBmcmVlc3RhbmRpbmcgZG9jdW1lbnRhdGlvbiBwYWdlcyBoYXZlIGJlZW4gY29udmVydGVkIGFuZCBtYWRlCisgIGF2YWlsYWJsZSB0byAiZ2l0IGhlbHAiIChha2EgIm1hbiBnaXQ8c29tZXRoaW5nPiIpIGFzIHNlY3Rpb24gNyBvZgorICB0aGUgbWFudWFsIHBhZ2VzLiBUaGlzIG1lYW5zIGJvb2ttYXJrcyB0byBzb21lIEhUTUwgZG9jdW1lbnRhdGlvbgorICBmaWxlcyBtYXkgbmVlZCB0byBiZSB1cGRhdGVkIChlZyAidHV0b3JpYWwuaHRtbCIgYmVjYW1lCisgICJnaXR0dXRvcmlhbC5odG1sIikuCisKKyhwZXJmb3JtYW5jZSkKKworKiAiZ2l0IGNsb25lIiB3YXMgcmV3cml0dGVuIGluIEMuICBUaGlzIHdpbGwgaG9wZWZ1bGx5IGhlbHAgY2xvbmluZyBhCisgIHJlcG9zaXRvcnkgd2l0aCBpbnNhbmUgbnVtYmVyIG9mIHJlZnMuCisKKyogImdpdCByZWJhc2UgLS1vbnRvICR0aGVyZSAkZnJvbSAkYnJhbmNoIiB1c2VkIHRvIHN3aXRjaCB0byB0aGUgdGlwIG9mCisgICRicmFuY2ggb25seSB0byBpbW1lZGlhdGVseSByZXNldCBiYWNrIHRvICRmcm9tLCBzbXVkZ2luZyB3b3JrIHRyZWUKKyAgZmlsZXMgdW5uZWNlc3NhcmlseS4gIFRoaXMgaGFzIGJlZW4gb3B0aW1pemVkLgorCisqIE9iamVjdCBjcmVhdGlvbiBjb2RlcGF0aCBpbiAiZ2l0LXN2biIgaGFzIGJlZW4gb3B0aW1pemVkIGJ5IGVuaGFuY2luZworICBwbHVtYmluZyBjb21tYW5kcyBnaXQtY2F0LWZpbGUgYW5kIGdpdC1oYXNoLW9iamVjdC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqICJnaXQgYWRkIC1wIiAoYW5kIHRoZSAicGF0Y2giIHN1YmNvbW1hbmQgb2YgImdpdCBhZGQgLWkiKSBjYW4gY2hvb3NlIHRvCisgIGFwcGx5IChvciBub3QgYXBwbHkpIG1vZGUgY2hhbmdlcyBpbmRlcGVuZGVudGx5IGZyb20gY29udGVudHMgY2hhbmdlcy4KKworKiAiZ2l0IGJpc2VjdCBoZWxwIiBnaXZlcyBsb25nZXIgYW5kIG1vcmUgaGVscGZ1bCB1c2FnZSBpbmZvcm1hdGlvbi4KKworKiAiZ2l0IGJpc2VjdCIgZG9lcyBub3QgdXNlIGEgc3BlY2lhbCBicmFuY2ggImJpc2VjdCIgYW55bW9yZTsgaW5zdGVhZCwgaXQKKyAgZG9lcyBpdHMgd29yayBvbiBhIGRldGFjaGVkIEhFQUQuCisKKyogImdpdCBicmFuY2giIChhbmQgImdpdCBjaGVja291dCAtYiIpIGNhbiBiZSB0b2xkIHRvIHNldCB1cAorICBicmFuY2guPG5hbWU+LnJlYmFzZSBhdXRvbWF0aWNhbGx5LCBzbyB0aGF0IGxhdGVyIHlvdSBjYW4gc2F5ICJnaXQgcHVsbCIKKyAgYW5kIG1hZ2ljYWxseSBjYXVzZSAiZ2l0IHB1bGwgLS1yZWJhc2UiIHRvIGhhcHBlbi4KKworKiAiZ2l0IGJyYW5jaCAtLW1lcmdlZCIgYW5kICJnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkIiBjYW4gYmUgdXNlZCB0byBsaXN0CisgIGJyYW5jaGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWVyZ2VkIChvciBub3QgeWV0IG1lcmdlZCkgdG8gdGhlCisgIGN1cnJlbnQgYnJhbmNoLgorCisqICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgY2FuIGFkZCBhIHNpZ24tb2ZmLgorCisqICJnaXQgY29tbWl0IiBtZW50aW9ucyB0aGUgYXV0aG9yIGlkZW50aXR5IHdoZW4geW91IGFyZSBjb21taXR0aW5nCisgIHNvbWVib2R5IGVsc2UncyBjaGFuZ2VzLgorCisqICJnaXQgZGlmZi9sb2cgLS1kaXJzdGF0IiBvdXRwdXQgaXMgY29uc2lzdGVudCBiZXR3ZWVuIGJpbmFyeSBhbmQgdGV4dHVhbAorICBjaGFuZ2VzLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgcmV3cml0ZXMgc2lnbmVkIHRhZ3MgYnkgZGVtb3RpbmcgdGhlbSB0byBhbm5vdGF0ZWQuCisKKyogImdpdCBmb3JtYXQtcGF0Y2ggLS1uby1iaW5hcnkiIGNhbiBwcm9kdWNlIGEgcGF0Y2ggdGhhdCBsYWNrIGJpbmFyeQorICBjaGFuZ2VzIChpLmUuIGNhbm5vdCBiZSB1c2VkIHRvIHByb3BhZ2F0ZSB0aGUgd2hvbGUgY2hhbmdlcykgbWVhbnQgb25seQorICBmb3IgcmV2aWV3aW5nLgorCisqICJnaXQgaW5pdCAtLWJhcmUiIGlzIGEgc3lub255bSBmb3IgImdpdCAtLWJhcmUgaW5pdCIgbm93LgorCisqICJnaXQgZ2MgLS1hdXRvIiBob25vcnMgYSBuZXcgcHJlLWF1dG8tZ2MgaG9vayB0byB0ZW1wb3JhcmlseSBkaXNhYmxlIGl0LgorCisqICJnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6PGN1c3RvbSBmb3JtYXQ+IiBnaXZlcyBhIExGIGFmdGVyIGVhY2ggZW50cnksCisgIGluc3RlYWQgb2YgZ2l2aW5nIGEgTEYgYmV0d2VlbiBlYWNoIHBhaXIgb2YgZW50cmllcyB3aGljaCBpcyBob3cKKyAgImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OjxjdXN0b20gZm9ybWF0PiIgd29ya3MuCisKKyogImdpdCBsb2ciIGFuZCBmcmllbmRzIGxlYXJuZWQgdGhlICItLWdyYXBoIiBvcHRpb24gdG8gc2hvdyB0aGUgYW5jZXN0cnkKKyAgZ3JhcGggYXQgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBvdXRwdXQuCisKKyogImdpdCBsb2ciIGFuZCBmcmllbmRzIGNhbiBiZSB0b2xkIHRvIHVzZSBkYXRlIGZvcm1hdCB0aGF0IGlzIGRpZmZlcmVudAorICBmcm9tIHRoZSBkZWZhdWx0IHZpYSAnbG9nLmRhdGUnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyogImdpdCBzZW5kLWVtYWlsIiBub3cgY2FuIHNlbmQgb3V0IG1lc3NhZ2VzIG91dHNpZGUgYSBnaXQgcmVwb3NpdG9yeS4KKworKiAiZ2l0IHNlbmQtZW1haWwgLS1jb21wb3NlIiB3YXMgbWFkZSBhd2FyZSBvZiByZmMyMDQ3IHF1b3RpbmcuCisKKyogImdpdCBzdGF0dXMiIGNhbiBvcHRpb25hbGx5IGluY2x1ZGUgb3V0cHV0IGZyb20gImdpdCBzdWJtb2R1bGUKKyAgc3VtbWFyeSIuCisKKyogImdpdCBzdm4iIGxlYXJuZWQgLS1hZGQtYXV0aG9yLWZyb20gb3B0aW9uIHRvIHByb3BhZ2F0ZSB0aGUgYXV0aG9yc2hpcAorICBieSBtdW5naW5nIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuCisKKyogbmV3IG9iamVjdCBjcmVhdGlvbiBhbmQgbG9va2luZyB1cCBpbiAiZ2l0IHN2biIgaGFzIGJlZW4gb3B0aW1pemVkLgorCisqICJnaXR3ZWIiIGNhbiByZWFkIGZyb20gYSBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCisKKyhpbnRlcm5hbCkKKworKiAiZ2l0IHVucGFjay1vYmplY3RzIiBhbmQgImdpdCByZWNlaXZlLXBhY2siIGlzIG5vdyBtb3JlIHN0cmljdCBhYm91dAorICBkZXRlY3RpbmcgYnJlYWthZ2UgaW4gdGhlIG9iamVjdHMgdGhleSByZWNlaXZlIG92ZXIgdGhlIHdpcmUuCisKKworRml4ZXMgc2luY2UgdjEuNS41CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjUgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitBbmQgdGhlcmUgYXJlIHRvbyBudW1lcm91cyBzbWFsbCBmaXhlcyB0byBvdGhlcndpc2Ugbm90ZSBoZXJlIDstKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkN2ExYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMS50eHQKQEAgLTAsMCArMSwzNiBAQAorR0lUIHYxLjYuMC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBkaWZmIC0tY2MiIGRpZCBub3QgaG9ub3IgY29udGVudCBtYW5nbGluZyBzcGVjaWZpZWQgYnkKKyAgZ2l0YXR0cmlidXRlcyBhbmQgY29yZS5hdXRvY3JsZiB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgd29yayB0cmVlLgorCisqICJnaXQgZGlmZiAtLWNoZWNrIiBpbmNvcnJlY3RseSBkZXRlY3RlZCBuZXcgdHJhaWxpbmcgYmxhbmsgbGluZXMgd2hlbgorICB3aGl0ZXNwYWNlIGNoZWNrIHdhcyBpbiBlZmZlY3QuCisKKyogImdpdCBmb3ItZWFjaC1yZWYiIHRyaWVkIHRvIGRlcmVmZXJlbmNlIE5VTEwgd2hlbiBhc2tlZCBmb3IgJyUoYm9keSkiIG9uCisgIGEgdGFnIHdpdGggYSBzaW5nbGUgaW5jb21wbGV0ZSBsaW5lIGFzIGl0cyBwYXlsb2FkLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIiBwZWVrZWQgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcgd2hlbgorICAiZm9ybWF0LmhlYWRlcnMiIHZhcmlhYmxlIGlzIGVtcHR5IChhIG1pc2NvbmZpZ3VyYXRpb24pLgorCisqICJnaXQgaGVscCBoZWxwIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCisqICJnaXQgbWFpbGluZm8iIChoZW5jZSAiZ2l0IGFtIikgd2FzIHVuaGFwcHkgd2hlbiBNSU1FIG11bHRpcGFydCBtZXNzYWdlCisgIGNvbnRhaW5lZCBnYXJiYWdlIGFmdGVyIHRoZSBmaW5pc2hpbmcgYm91bmRhcnkuCisKKyogImdpdCBtYWlsaW5mbyIgYWxzbyB3YXMgdW5oYXBweSB3aGVuIHRoZSAiRnJvbTogIiBsaW5lIG9ubHkgaGFkIGEgYmFyZQorICBlLW1haWwgYWRkcmVzcy4KKworKiAiZ2l0IG1lcmdlIiBkaWQgbm90IHJlZnJlc2ggdGhlIGluZGV4IGNvcnJlY3RseSB3aGVuIGEgbWVyZ2UgcmVzdWx0ZWQgaW4KKyAgYSBmYXN0LWZvcndhcmQuCisKKyogImdpdCBtZXJnZSIgZGlkIG5vdCByZXNvbHZlIGEgdHJ1bHkgdHJpdmlhbCBtZXJnZXMgdGhhdCBjYW4gYmUgZG9uZQorICB3aXRob3V0IGNvbnRlbnQgbGV2ZWwgbWVyZ2VzLgorCisqICJnaXQgc3ZuIGRjb21taXQiIHRvIGEgcmVwb3NpdG9yeSB3aXRoIFVSTCB0aGF0IGhhcyBlbWJlZGRlZCB1c2VybmFtZXMKKyAgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4KKworQ29udGFpbnMgb3RoZXIgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4ZmI4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMi50eHQKQEAgLTAsMCArMSw4MSBAQAorR0lUIHYxLjYuMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEluc3RhbGxhdGlvbiBvbiBwbGF0Zm9ybXMgdGhhdCBuZWVkcyAuZXhlIHN1ZmZpeCB0byBnaXQtKiBwcm9ncmFtcyB3ZXJlCisgIGJyb2tlbiBpbiAxLjYuMC4xLgorCisqIEluc3RhbGxhdGlvbiBvbiBmaWxlc3lzdGVtcyB3aXRob3V0IHN5bWJvbGljIGxpbmtzIHN1cHBvcnQgZGlkIG5vdAorICB3b3JrIHdlbGwuCisKKyogSW4tdHJlZSBkb2N1bWVudGF0aW9ucyBhbmQgdGVzdCBzY3JpcHRzIG5vdyB1c2UgImdpdCBmb28iIGZvcm0gdG8gc2V0IGEKKyAgYmV0dGVyIGV4YW1wbGUsIGluc3RlYWQgb2YgdGhlICJnaXQtZm9vIiBmb3JtICh3aGljaCBpcyBhbiBhY2NlcHRhYmxlCisgIGZvcm0gaWYgeW91IGhhdmUgIlBBVEg9JChnaXQgLS1leGVjLXBhdGgpOiRQQVRIIiBpbiB5b3VyIHNjcmlwdCkKKworKiBNYW55IGNvbW1hbmRzIGRpZCBub3QgdXNlIHRoZSBjb3JyZWN0IHdvcmtpbmcgdHJlZSBsb2NhdGlvbiB3aGVuIHVzZWQKKyAgd2l0aCBHSVRfV09SS19UUkVFIGVudmlyb25tZW50IHNldHRpbmdzLgorCisqIFNvbWUgc3lzdGVtcyBuZWVkIHRvIHVzZSBjb21wYXRpYmlsaXR5IGZubWF0Y2ggYW5kIHJlZ2V4IGxpYnJhcmllcworICBpbmRlcGVuZGVudCBmcm9tIGVhY2ggb3RoZXI7IHRoZSBjb21wYXQvIGFyZWEgaGFzIGJlZW4gcmVvcmdhbml6ZWQgdG8KKyAgYWxsb3cgdGhpcy4KKworCisqICJnaXQgYXBwbHkgLS11bmlkaWZmLXplcm8iIGluY29ycmVjdGx5IGFwcGxpZWQgYSAtVTAgcGF0Y2ggdGhhdCBpbnNlcnRzCisgIGEgbmV3IGxpbmUgYmVmb3JlIHRoZSBzZWNvbmQgbGluZS4KKworKiAiZ2l0IGJsYW1lIC1jIiBkaWQgbm90IGV4YWN0bHkgd29yayBsaWtlICJnaXQgYW5ub3RhdGUiIHdoZW4gcmFuZ2UKKyAgYm91bmRhcmllcyBhcmUgaW52b2x2ZWQuCisKKyogImdpdCBjaGVja291dCBmaWxlIiB3aGVuIGZpbGUgaXMgc3RpbGwgdW5tZXJnZWQgY2hlY2tlZCBvdXQgY29udGVudHMgZnJvbQorICBhIHJhbmRvbSBoaWdoIG9yZGVyIHN0YWdlLCB3aGljaCB3YXMgY29uZnVzaW5nLgorCisqICJnaXQgY2xvbmUgJHRoZXJlICRoZXJlLyIgd2l0aCBleHRyYSB0cmFpbGluZyBzbGFzaGVzIGFmdGVyIGV4cGxpY2l0CisgIGxvY2FsIGRpcmVjdG9yeSBuYW1lICRoZXJlIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKworKiAiZ2l0IGRpZmYiIG9uIHRyYWNrZWQgY29udGVudHMgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncyBkaWQgbm90IGRyaXZlICJsZXNzIgorICBpbnRlbGxpZ2VudGx5IHdoZW4gc2hvd2luZyBhZGRlZCBvciByZW1vdmVkIGxpbmVzLgorCisqICJnaXQgZGlmZiAtLWRpcnN0YXQgLU0iIGRpZCBub3QgYWRkIGNoYW5nZXMgaW4gc3ViZGlyZWN0b3JpZXMgdXAKKyAgY29ycmVjdGx5IGZvciByZW5hbWVkIHBhdGhzLgorCisqICJnaXQgZGlmZiAtLWN1bXVsYXRpdmUiIGRpZCBub3QgaW1wbHkgIi0tZGlyc3RhdCIuCisKKyogImdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8iIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKworKiAiZ2l0IGd1aSIgYWxsb3dlZCB1c2VycyB0byBmZWVkIHBhdGNoIHdpdGhvdXQgYW55IGNvbnRleHQgdG8gYmUgYXBwbGllZC4KKworKiAiZ2l0IGd1aSIgYm90Y2hlZCBwYXJzaW5nICJkaWZmIiBvdXRwdXQgd2hlbiBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCB0d28KKyAgZGFzaGVzIGFuZCBhIHNwYWNlIGdldHMgcmVtb3ZlZCBvciBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCB0d28gcGx1c2VzCisgIGFuZCBhIHNwYWNlIGdldHMgYWRkZWQuCisKKyogImdpdCBndWkiIHRyYW5zbGF0aW9uIHVwZGF0ZXMgYW5kIGkxOG4gZml4ZXMuCisKKyogImdpdCBpbmRleC1wYWNrIiBpcyBtb3JlIGNhcmVmdWwgYWdhaW5zdCBkaXNrIGNvcnJ1cHRpb24gd2hpbGUgY29tcGxldGluZworICBhIHRoaW4gcGFjay4KKworKiAiZ2l0IGxvZyAtaSAtLWdyZXA9cGF0dGVybiIgZGlkIG5vdCBpZ25vcmUgY2FzZTsgbmVpdGhlciAiZ2l0IGxvZyAtRQorICAtLWdyZXA9cGF0dGVybiIgdHJpZ2dlcmVkIGV4dGVuZGVkIHJlZ2V4cC4KKworKiAiZ2l0IGxvZyAtLXByZXR0eT0iJWFkIiAtLWRhdGU9c2hvcnQiIGRpZCBub3QgdXNlIHNob3J0IGZvcm1hdCB3aGVuCisgIHNob3dpbmcgdGhlIHRpbWVzdGFtcC4KKworKiAiZ2l0IGxvZyAtLWF1dGhvcj1hdXRob3IiIG1hdGNoIGluY29ycmVjdGx5IG1hdGNoZWQgd2l0aCB0aGUKKyAgdGltZXN0YW1wIHBhcnQgb2YgImF1dGhvciAiIGxpbmUgaW4gY29tbWl0IG9iamVjdHMuCisKKyogImdpdCBsb2cgLUYgLS1hdXRob3I9YXV0aG9yIiBkaWQgbm90IHdvcmsgYXQgYWxsLgorCisqIEJ1aWxkIHByb2NlZHVyZSBmb3IgImdpdCBzaGVsbCIgdGhhdCB1c2VkIHN0dWIgdmVyc2lvbnMgb2Ygc29tZQorICBmdW5jdGlvbnMgYW5kIGdsb2JhbHMgd2FzIG5vdCB1bmRlcnN0b29kIGJ5IGxpbmtlcnMgb24gc29tZSBwbGF0Zm9ybXMuCisKKyogImdpdCBzdGFzaCIgd2FzIGZvb2xlZCBieSBhIHN0YXQtZGlydHkgYnV0IG90aGVyd2lzZSB1bm1vZGlmaWVkIHBhdGhzCisgIGFuZCByZWZ1c2VkIHRvIHdvcmsgdW50aWwgdGhlIHVzZXIgcmVmcmVzaGVkIHRoZSBpbmRleC4KKworKiAiZ2l0IHN2biIgd2FzIGJyb2tlbiBvbiBQZXJsIGJlZm9yZSA1Ljggd2l0aCByZWNlbnQgZml4ZXMgdG8gcmVkdWNlCisgIHVzZSBvZiB0ZW1wb3JhcnkgZmlsZXMuCisKKyogImdpdCB2ZXJpZnktcGFjayAtdiIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIGdpdmVuIG1vcmUgdGhhbiBvbmUKKyAgcGFja2ZpbGUuCisKK0Fsc28gY29udGFpbnMgbWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4zLnR4dApAQCAtMCwwICsxLDExNyBAQAorR0lUIHYxLjYuMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAiIGRpZCBub3QgaG9ub3IgY29yZS5hdXRvY3JsZiB3aGlsZQorICAtLWZvcm1hdD10YXIgZGlkLgorCisqIENvbnRpbnVpbmcgImdpdCByZWJhc2UgLWkiIHdhcyB2ZXJ5IGNvbmZ1c2VkIHdoZW4gdGhlIHVzZXIgbGVmdCBtb2RpZmllZAorICBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHdoaWxlIHJlc29sdmluZyBjb25mbGljdHMuCisKKyogQ29udGludWluZyAiZ2l0IHJlYmFzZSAtaSIgd2FzIGFsc28gdmVyeSBjb25mdXNlZCB3aGVuIHRoZSB1c2VyIGxlZnQKKyAgc29tZSBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgaW5kZXggYWZ0ZXIgImVkaXQiLgorCisqICJnaXQgcmViYXNlIC1pIiBub3cgaG9ub3JzIHRoZSBwcmUtcmViYXNlIGhvb2ssIGp1c3QgbGlrZSB0aGUKKyAgb3RoZXIgcmViYXNlIGltcGxlbWVudGF0aW9ucyAiZ2l0IHJlYmFzZSIgYW5kICJnaXQgcmViYXNlIC1tIi4KKworKiAiZ2l0IHJlYmFzZSAtaSIgaW5jb3JyZWN0bHkgYWJvcnRlZCB3aGVuIHRoZXJlIGlzIG5vIGNvbW1pdCB0byByZXBsYXkuCisKKyogQmVoYXZpb3VyIG9mICJnaXQgZGlmZiAtLXF1aWV0IiB3YXMgaW5jb25zaXN0ZW50IHdpdGggImRpZmYgLS1leGl0LWNvZGUiCisgIHdpdGggdGhlIG91dHB1dCByZWRpcmVjdGVkIHRvIC9kZXYvbnVsbC4KKworKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgb24gYmluYXJ5IGZpbGVzIG5vIGxvbmdlciBvdXRwdXRzIGEgYm9ndXMKKyAgImRpZmYgLS1naXQiIGhlYWRlciBsaW5lLgorCisqICJnaXQgZGlmZiIgaHVuayBoZWFkZXIgcGF0dGVybnMgd2l0aCBtdWx0aXBsZSBlbGVtZW50cyBzZXBhcmF0ZWQgYnkgTEYKKyAgd2VyZSBub3QgdXNlZCBjb3JyZWN0bHkuCisKKyogSHVuayBoZWFkZXJzIGluICJnaXQgZGlmZiIgZGVmYXVsdCB0byB1c2luZyBleHRlbmRlZCByZWd1bGFyCisgIGV4cHJlc3Npb25zLCBmaXhpbmcgc29tZSBvZiB0aGUgaW50ZXJuYWwgcGF0dGVybnMgb24gbm9uLUdOVQorICBwbGF0Zm9ybXMuCisKKyogTmV3IGNvbmZpZyAiZGlmZi4qLnhmdW5jbmFtZSIgZXhwb3NlcyBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb25zCisgIGZvciB1c2VyIHNwZWNpZmllZCBodW5rIGhlYWRlciBwYXR0ZXJucy4KKworKiAiZ2l0IGdjIiB3aGVuIGVqZWN0aW5nIG90aGVyd2lzZSB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gcGFja2ZpbGVzIGludG8KKyAgbG9vc2UgZm9ybSBsZWFrZWQgbWVtb3J5LgorCisqICJnaXQgaW5kZXgtcGFjayIgd2FzIHJlY2VudGx5IGJyb2tlbiBhbmQgbWlzaGFuZGxlZCBvYmplY3RzIGFkZGVkIGJ5CisgIHRoaW4tcGFjayBjb21wbGV0aW9uIHByb2Nlc3NpbmcgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgorCisqICJnaXQgaW5kZXgtcGFjayIgd2FzIHJlY2VudGx5IGJyb2tlbiBhbmQgbWlzYmVoYXZlZCB3aGVuIHJ1biBmcm9tIGluc2lkZQorICAuZ2l0L29iamVjdHMvcGFjay8gZGlyZWN0b3J5LgorCisqICJnaXQgc3Rhc2ggYXBwbHkgc2FzaEB7MX0iIHdhcyBmaXhlZCB0byBlcnJvciBvdXQuICBQcmlvciB2ZXJzaW9ucworICB3b3VsZCBoYXZlIGFwcGxpZWQgc3Rhc2hAezB9IGluY29ycmVjdGx5LgorCisqICJnaXQgc3Rhc2ggYXBwbHkiIG5vdyBvZmZlcnMgYSBiZXR0ZXIgc3VnZ2VzdGlvbiBvbiBob3cgdG8gY29udGludWUKKyAgaWYgdGhlIHdvcmtpbmcgdHJlZSBpcyBjdXJyZW50bHkgZGlydHkuCisKKyogImdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JShzdWJqZWN0KSIgZml4ZWQgZm9yIGNvbW1pdHMgd2l0aCBubworICBubyBuZXdsaW5lIGluIHRoZSBtZXNzYWdlIGJvZHkuCisKKyogImdpdCByZW1vdGUiIGZpeGVkIHRvIHByb3RlY3QgcHJpbnRmIGZyb20gdXNlciBpbnB1dC4KKworKiAiZ2l0IHJlbW90ZSBzaG93IC12IiBub3cgZGlzcGxheXMgYWxsIFVSTHMgb2YgYSByZW1vdGUuCisKKyogImdpdCBjaGVja291dCAtYiBicmFuY2giIHdhcyBjb25mdXNlZCB3aGVuIGJyYW5jaCBhbHJlYWR5IGV4aXN0ZWQuCisKKyogImdpdCBjaGVja291dCAtcSIgb25jZSBhZ2FpbiBzdXBwcmVzc2VzIHRoZSBsb2NhbGx5IG1vZGlmaWVkIGZpbGUgbGlzdC4KKworKiAiZ2l0IGNsb25lIC1xIiwgImdpdCBmZXRjaCAtcSIgYXNrcyByZW1vdGUgc2lkZSB0byBub3Qgc2VuZAorICBwcm9ncmVzcyBtZXNzYWdlcywgYWN0dWFsbHkgbWFraW5nIHRoZWlyIG91dHB1dCBxdWlldC4KKworKiBDcm9zcy1kaXJlY3RvcnkgcmVuYW1lcyBhcmUgbm8gbG9uZ2VyIHVzZWQgd2hlbiBjcmVhdGluZyBwYWNrcy4gIFRoaXMKKyAgYWxsb3dzIG1vcmUgZ3JhY2VmdWwgYmVoYXZpb3Igb24gZmlsZXN5c3RlbXMgbGlrZSBzc2hmcy4KKworKiBTdGFsZSB0ZW1wb3JhcnkgZmlsZXMgdW5kZXIgJEdJVF9ESVIvb2JqZWN0cy9wYWNrIGFyZSBub3cgY2xlYW5lZCB1cAorICBhdXRvbWF0aWNhbGx5IGJ5ICJnaXQgcHJ1bmUiLgorCisqICJnaXQgbWVyZ2UiIG9uY2UgYWdhaW4gcmVtb3ZlcyBkaXJlY3RvcmllcyBhZnRlciB0aGUgbGFzdCBmaWxlIGhhcworICBiZWVuIHJlbW92ZWQgZnJvbSBpdCBkdXJpbmcgdGhlIG1lcmdlLgorCisqICJnaXQgbWVyZ2UiIGRpZCBub3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIHN0cnVjdHVyZSBpdHNlbGYgd2hlbgorICBlbnVtZXJhdGluZyB0aGUgcGFyZW50cyBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdC4KKworKiAiZ2l0IGJsYW1lIC1DIC1DIiBubyBsb25nZXIgc2VnZmF1bHRzIHdoaWxlIHRyeWluZyB0byBwYXNzIGJsYW1lIGlmCisgICBpdCBlbmNvdW50ZXJzIGEgc3VibW9kdWxlIHJlZmVyZW5jZS4KKworKiAiZ2l0IHJtIiBpbmNvcnJlY3RseSBjbGFpbWVkIHRoYXQgeW91IGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9ucyB3aGVuIGEKKyAgcGF0aCB3YXMgbWVyZWx5IHN0YXQtZGlydHkuCisKKyogImdpdCBzdm4iIGZpeGVkIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSB3aGVuICdzZXQtdHJlZScgZmFpbGVkLAorICAgaW5zdGVhZCBvZiBhIFBlcmwgY29tcGlsZSBlcnJvci4KKworKiAiZ2l0IHN1Ym1vZHVsZSIgZml4ZWQgdG8gaGFuZGxlIGNoZWNraW5nIG91dCBhIGRpZmZlcmVudCBjb21taXQKKyAgdGhhbiBIRUFEIGFmdGVyIGluaXRpYWxpemluZyB0aGUgc3VibW9kdWxlLgorCisqIFRoZSAiZ2l0IGNvbW1pdCIgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZXJlIGFyZSBzdGlsbCB1bm1lcmdlZAorICBmaWxlcyBwcmVzZW50IHdhcyBjbGFyaWZpZWQgdG8gbWF0Y2ggImdpdCB3cml0ZS10cmVlIi4KKworKiAiZ2l0IGluaXQiIHdhcyBjb25mdXNlZCB3aGVuIGNvcmUuYmFyZSBvciBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgYXJlIHNldAorICBpbiBzeXN0ZW0gb3IgdXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBmaWxlIGJ5IG1pc3Rha2UuICBXaGVuIC0tYmFyZSBvcgorICAtLXNoYXJlZCBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZXNlIG5vdyBvdmVycmlkZSBzdWNoCisgIHNldHRpbmdzIG1hZGUgb3V0c2lkZSB0aGUgcmVwb3NpdG9yaWVzLgorCisqIFNvbWUgc2VnZmF1bHRzIGR1ZSB0byB1bmNhdWdodCBOVUxMIHBvaW50ZXJzIHdlcmUgZml4ZWQgaW4gbXVsdGlwbGUKKyAgdG9vbHMgc3VjaCBhcyBhcHBseSwgcmVzZXQsIHVwZGF0ZS1pbmRleC4KKworKiBTb2xhcmlzIGJ1aWxkcyBub3cgZGVmYXVsdCB0byBPTERfSUNPTlY9MSB0byBhdm9pZCBjb21waWxlIHdhcm5pbmdzOworICBTb2xhcmlzIDggZG9lcyBub3QgZGVmaW5lIE5FRURTX0xJQklDT05WIGJ5IGRlZmF1bHQuCisKKyogIkdpdC5wbSIgdGVzdHMgcmVsaWVkIG9uIHVubmVjZXNzYXJpbHkgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBQZXJsLgorCisqICJnaXR3ZWIiIHRyaWdnZXJlZCB1bmRlZiB3YXJuaW5nIG9uIGNvbW1pdHMgd2l0aG91dCBsb2cgbWVzc2FnZXMuCisKKyogImdpdHdlYiIgdHJpZ2dlcmVkIHVuZGVmIHdhcm5pbmdzIG9uIG1pc3NpbmcgdHJlZXMuCisKKyogImdpdHdlYiIgbm93IHJlbW92ZXMgUEFUSF9JTkZPIGZyb20gaXRzIFVSTHMgc28gdXNlcnMgZG9uJ3QgaGF2ZQorICB0byBtYW51YWxseSBzZXQgdGhlIFVSTCBpbiB0aGUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24uCisKKyogQmFzaCBjb21wbGV0aW9uIHJlbW92ZWQgc3VwcG9ydCBmb3IgbGVnYWN5ICJnaXQtZmV0Y2giLCAiZ2l0LXB1c2giCisgIGFuZCAiZ2l0LXB1bGwiIGFzIHRoZXNlIGFyZSBubyBsb25nZXIgaW5zdGFsbGVkLiAgRGFzaGxlc3MgZm9ybQorICAoImdpdCBmZXRjaCIpIGlzIHN0aWxsIGhvd2V2ZXIgc3VwcG9ydGVkLgorCitNYW55IG90aGVyIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjI2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dJVCB2MS42LjAuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjAuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAnZ2l0IGFkZCAtcCcgc2FpZCAiTm8gY2hhbmdlcyIgd2hlbiBvbmx5IGJpbmFyeSBmaWxlcyB3ZXJlIGNoYW5nZWQuCisKKyogJ2dpdCBhcmNoaXZlJyBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGluIGJhcmUgcmVwb3NpdG9yaWVzLgorCisqICdnaXQgY2hlY2tvdXQgLXQgLWIgbmV3YnJhbmNoJyB3aGVuIHlvdSBhcmUgb24gZGV0YWNoZWQgSEVBRCB3YXMgYnJva2VuLgorCisqIHdoZW4gd2UgcmVmdXNlIHRvIGRldGVjdCByZW5hbWVzIGJlY2F1c2UgdGhlcmUgYXJlIHRvbyBtYW55IG5ldyBvcgorICBkZWxldGVkIGZpbGVzLCAnZ2l0IGRpZmYnIGRpZCBub3Qgc2F5IGhvdyBtYW55IHRoZXJlIGFyZS4KKworKiAnZ2l0IHB1c2ggLS1taXJyb3InIHRyaWVkIGFuZCBmYWlsZWQgdG8gcHVzaCB0aGUgc3Rhc2g7IHRoZXJlIGlzIG5vCisgIHBvaW50IGluIHNlbmRpbmcgaXQgdG8gYmVnaW4gd2l0aC4KKworKiAnZ2l0IHB1c2gnIGRpZCBub3QgdXBkYXRlIHRoZSByZW1vdGUgdHJhY2tpbmcgcmVmZXJlbmNlIGlmIHRoZSBjb3JyZXNwb25kaW5nCisgIHJlZiBvbiB0aGUgcmVtb3RlIGVuZCBoYXBwZW5lZCB0byBiZSBhbHJlYWR5IHVwIHRvIGRhdGUuCisKKyogJ2dpdCBwdWxsICR0aGVyZSAkYnJhbmNoOiRjdXJyZW50X2JyYW5jaCcgZGlkIG5vdCB3b3JrIHdoZW4geW91IHdlcmUgb24KKyAgYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4uCisKKyogd2hlbiBnaXZpbmcgdXAgcmVzb2x2aW5nIGEgY29uZmxpY3RlZCBtZXJnZSwgJ2dpdCByZXNldCAtLWhhcmQnIGZhaWxlZAorICB0byByZW1vdmUgbmV3IHBhdGhzIGZyb20gdGhlIHdvcmtpbmcgdHJlZS4KKworKiAnZ2l0IHNlbmQtZW1haWwnIGhhZCBhIHNtYWxsIGZkIGxlYWsgd2hpbGUgc2Nhbm5pbmcgZGlyZWN0b3J5LgorCisqICdnaXQgc3RhdHVzJyBpbmNvcnJlY3RseSByZXBvcnRlZCBhIHN1Ym1vZHVsZSBkaXJlY3RvcnkgYXMgYW4gdW50cmFja2VkCisgIGRpcmVjdG9yeS4KKworKiAnZ2l0IHN2bicgdXNlZCBkZXByZWNhdGVkICdnaXQtZm9vJyBmb3JtIG9mIHN1YmNvbW1hbmQgaW52b2NhdGlvbi4KKworKiAnZ2l0IHVwZGF0ZS1yZWYgLWQnIHRvIHJlbW92ZSBhIHJlZmVyZW5jZSBkaWQgbm90IGhvbm9yIC0tbm8tZGVyZWYgb3B0aW9uLgorCisqIFBsdWdnZWQgc21hbGwgbWVtbGVha3MgaGVyZSBhbmQgdGhlcmUuCisKKyogQWxzbyBjb250YWlucyBtYW55IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOGJiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjUudHh0CkBAIC0wLDAgKzEsNTYgQEAKK0dJVCB2MS42LjAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjAuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNoZWNrb3V0IiB1c2VkIHRvIGNyYXNoIHdoZW4geW91ciBIRUFEIHdhcyBwb2ludGluZyBhdCBhIGRlbGV0ZWQKKyAgYnJhbmNoLgorCisqICJnaXQgY2hlY2tvdXQiIGZyb20gYW4gdW4tY2hlY2tlZC1vdXQgc3RhdGUgZGlkIG5vdCBhbGxvdyBzd2l0Y2hpbmcgb3V0CisgIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4KKworKiAiZ2l0IGRpZmYiIGFsd2F5cyBhbGxvd2VkIEdJVF9FWFRFUk5BTF9ESUZGIGFuZCAtLW5vLWV4dC1kaWZmIHdhcyBuby1vcCBmb3IKKyAgdGhlIGNvbW1hbmQuCisKKyogR2l2aW5nIDMgb3IgbW9yZSB0cmVlLWlzaCB0byAiZ2l0IGRpZmYiIGlzIHN1cHBvc2VkIHRvIHNob3cgdGhlIGNvbWJpbmVkCisgIGRpZmYgZnJvbSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgdHJlZXMgdG8gdGhlIGZpcnN0IG9uZSwgYnV0IHRoZSBvcmRlciB3YXMKKyAgc2NyZXdlZCB1cC4KKworKiAiZ2l0IGZhc3QtZXhwb3J0IiBkaWQgbm90IGV4cG9ydCBhbGwgdGFncy4KKworKiAiZ2l0IGxzLWZpbGVzIC0td2l0aC10cmVlPTx0cmVlPiIgZGlkIG5vdCB3b3JrIHdpdGggb3B0aW9ucyBvdGhlcgorICB0aGFuIC1jLCBtb3N0IG5vdGFibHkgd2l0aCAtbS4KKworKiAiZ2l0IHBhY2stb2JqZWN0cyIgZGlkIG5vdCBtYWtlIGl0cyBiZXN0IGVmZm9ydCB0byBob25vciAtLW1heC1wYWNrLXNpemUKKyAgb3B0aW9uIHdoZW4gYSBzaW5nbGUgZmlyc3Qgb2JqZWN0IGFscmVhZHkgYnVzdGVkIHRoZSBnaXZlbiBsaW1pdCBhbmQKKyAgcGxhY2VkIG1hbnkgb2JqZWN0cyBpbiBhIHNpbmdsZSBwYWNrLgorCisqICJnaXQtcDQiIGZhc3QgaW1wb3J0IGZyb250ZW5kIHdhcyB0b28gZWFnZXIgdG8gdHJpZ2dlciBpdHMga2V5d29yZCBleHBhbnNpb24KKyAgbG9naWMsIGV2ZW4gb24gYSBrZXl3b3JkLWxvb2tpbmcgc3RyaW5nIHRoYXQgZG9lcyBub3QgaGF2ZSBjbG9zaW5nICckJyBvbiB0aGUKKyAgc2FtZSBsaW5lLgorCisqICJnaXQgcHVzaCAkdGhlcmUiIHdoZW4gdGhlIHJlbW90ZSAkdGhlcmUgaXMgZGVmaW5lZCBpbiAkR0lUX0RJUi9icmFuY2hlcy8kdGhlcmUKKyAgYmVoYXZlcyBtb3JlIGxpa2Ugd2hhdCBjZy1wdXNoIGZyb20gQ29naXRvIHVzZWQgdG8gd29yay4KKworKiB3aGVuIGdpdmluZyB1cCByZXNvbHZpbmcgYSBjb25mbGljdGVkIG1lcmdlLCAiZ2l0IHJlc2V0IC0taGFyZCIgZmFpbGVkCisgIHRvIHJlbW92ZSBuZXcgcGF0aHMgZnJvbSB0aGUgd29ya2luZyB0cmVlLgorCisqICJnaXQgdGFnIiBkaWQgbm90IGNvbXBsYWluIHdoZW4gZ2l2ZW4gbXV0dWFsbHkgaW5jb21wYXRpYmxlIHNldCBvZiBvcHRpb25zLgorCisqIFRoZSBtZXNzYWdlIGNvbnN0cnVjdGVkIGluIHRoZSBpbnRlcm5hbCBlZGl0b3Igd2FzIGRpc2NhcmRlZCB3aGVuICJnaXQKKyAgdGFnIC1zIiBmYWlsZWQgdG8gc2lnbiB0aGUgbWVzc2FnZSwgd2hpY2ggd2FzIG9mdGVuIGNhdXNlZCBieSB0aGUgdXNlcgorICBub3QgY29uZmlndXJpbmcgR1BHIGNvcnJlY3RseS4KKworKiAibWFrZSBjaGVjayIgY2Fubm90IGJlIHJ1biB3aXRob3V0IHNwYXJzZTsgcGVvcGxlIG1heSBoYXZlIG1lYW50IHRvIHNheQorICAibWFrZSB0ZXN0IiBpbnN0ZWFkLCBzbyBzdWdnZXN0IHRoYXQuCisKKyogSW50ZXJuYWwgZGlmZiBtYWNoaW5lcnkgaGFkIGEgY29ybmVyIGNhc2UgcGVyZm9ybWFuY2UgYnVnIHRoYXQgY2hva2VkIG9uCisgIGEgbGFyZ2UgZmlsZSB3aXRoIG1hbnkgcmVwZWF0ZWQgY29udGVudHMuCisKKyogImdpdCByZXBhY2siIHVzZWQgdG8gZ3JhYiBvYmplY3RzIG91dCBvZiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcAorICBpbnRvIGEgbmV3IHBhY2suCisKKyogTWFueSB1bnNhZmUgY2FsbCB0byBzcHJpbnRmKCkgc3R5bGUgdmFyYXJncyBmdW5jdGlvbnMgYXJlIGNvcnJlY3RlZC4KKworKiBBbHNvIGNvbnRhaW5zIHF1aXRlIGEgZmV3IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWNlMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjYudHh0CkBAIC0wLDAgKzEsMzMgQEAKK0dJVCB2MS42LjAuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSAxLjYuMC41CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZnNjayIgaGFkIGEgZGVlcCByZWN1cnNpb24gdGhhdCB3YXN0ZWQgc3RhY2sgc3BhY2UuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGFuZCAiZ2l0IGZhc3QtaW1wb3J0IiBjaG9rZWQgb24gYW4gb2xkIHN0eWxlCisgICBhbm5vdGF0ZWQgdGFnIHRoYXQgbGFjayB0aGUgdGFnZ2VyIGluZm9ybWF0aW9uLgorCisgKiAiZ2l0IG1lcmdldG9vbCAtLSBmaWxlIiBkaWQgbm90IGNvcnJlY3RseSBza2lwICItLSIgbWFya2VyIHRoYXQKKyAgIHNpZ25hbHMgdGhlIGVuZCBvZiBvcHRpb25zIGxpc3QuCisKKyAqICJnaXQgc2hvdyAkdGFnIiBzZWdmYXVsdGVkIHdoZW4gYW4gYW5ub3RhdGVkICR0YWcgcG9pbnRlZCBhdCBhCisgICBub25leGlzdGVudCBvYmplY3QuCisKKyAqICJnaXQgc2hvdyAyPmVycm9yIiB3aGVuIHRoZSBzdGFuZGFyZCBvdXRwdXQgaXMgYXV0b21hdGljYWxseSByZWRpcmVjdGVkCisgICB0byB0aGUgcGFnZXIgcmVkaXJlY3RlZCB0aGUgc3RhbmRhcmQgZXJyb3IgdG8gdGhlIHBhZ2VyIGFzIHdlbGw7IHRoZXJlCisgICB3YXMgbm8gbmVlZCB0by4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgbGlzdCBvZiBhZGRyZXNzZXMgd2hlbgorICAgdGhleSBoYWQgcXVvdGVkIGNvbW1hIChlLmcuICJMYXN0bmFtZSwgR2l2ZW5uYW1lIiA8bWFpbEBhZGRyZS5zcz4pLgorCisgKiBMb2dpYyB0byBkaXNjb3ZlciBicmFuY2ggYW5jZXN0cnkgaW4gImdpdCBzdm4iIHdhcyB1bnJlbGlhYmxlIHdoZW4KKyAgIHRoZSBwcm9jZXNzIHRvIGZldGNoIGhpc3Rvcnkgd2FzIGludGVycnVwdGVkLgorCisgKiBSZW1vdmVkIHN1cHBvcnQgZm9yIGFuIG9ic29sZXRlIGdpdHdlYiByZXF1ZXN0IFVSSSwgd2hvc2UKKyAgIGltcGxlbWVudGF0aW9uIHJhbiAiZ2l0IGRpZmYiIFBvcmNlbGFpbiwgaW5zdGVhZCBvZiB1c2luZyBwbHVtYmluZywKKyAgIHdoaWNoIHdvdWxkIGhhdmUgcnVuIGFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCBzcGVjaWZpZWQgaW4gdGhlCisgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gYXMgdGhlIGdpdHdlYiB1c2VyLgorCitBbHNvIGNvbnRhaW5zIG51bWVyb3VzIGRvY3VtZW50YXRpb24gdHlwb2ZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdlZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC50eHQKQEAgLTAsMCArMSwyNTggQEAKK0dJVCB2MS42LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VzZXIgdmlzaWJsZSBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoZSBkZWZhdWx0IE1ha2VmaWxlIHNldHRpbmdzLCBtb3N0IG9mIHRoZSBwcm9ncmFtcyBhcmUgbm93CitpbnN0YWxsZWQgb3V0c2lkZSB5b3VyICRQQVRILCBleGNlcHQgZm9yICJnaXQiLCAiZ2l0ayIgYW5kCitzb21lIHNlcnZlciBzaWRlIHByb2dyYW1zIHRoYXQgbmVlZCB0byBiZSBhY2Nlc3NpYmxlIGZvciB0ZWNobmljYWwKK3JlYXNvbnMuICBJbnZva2luZyBhIGdpdCBzdWJjb21tYW5kIGFzICJnaXQteHl6enkiIGZyb20gdGhlIGNvbW1hbmQKK2xpbmUgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSBlYXJseSAyMDA2IChhbmQgb2ZmaWNpYWxseSBhbm5vdW5jZWQgaW4KKzEuNS40IHJlbGVhc2Ugbm90ZXMpOyB1c2Ugb2YgdGhlbSBmcm9tIHlvdXIgc2NyaXB0cyBhZnRlciBhZGRpbmcKK291dHB1dCBmcm9tICJnaXQgLS1leGVjLXBhdGgiIHRvIHRoZSAkUEFUSCBpcyBzdGlsbCBzdXBwb3J0ZWQgaW4gdGhpcworcmVsZWFzZSwgYnV0IHVzZXJzIGFyZSBhZ2FpbiBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIGFkanVzdCB0aGVpcgorc2NyaXB0cyB0byB1c2UgImdpdCB4eXp6eSIgZm9ybSwgYXMgd2Ugd2lsbCBzdG9wIGluc3RhbGxpbmcKKyJnaXQteHl6enkiIGhhcmRsaW5rcyBmb3IgYnVpbHQtaW4gY29tbWFuZHMgaW4gbGF0ZXIgcmVsZWFzZXMuCisKK0FuIGVhcmxpZXIgY2hhbmdlIHRvIHBhZ2UgImdpdCBzdGF0dXMiIG91dHB1dCB3YXMgb3ZlcndoZWxtaW5nbHkgdW5wb3B1bGFyCithbmQgaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKK1NvdXJjZSBjaGFuZ2VzIG5lZWRlZCBmb3IgcG9ydGluZyB0byBNaW5HVyBlbnZpcm9ubWVudCBhcmUgbm93IGFsbCBpbiB0aGUKK21haW4gZ2l0LmdpdCBjb2RlYmFzZS4KKworQnkgZGVmYXVsdCwgcGFja2ZpbGVzIGNyZWF0ZWQgd2l0aCB0aGlzIHZlcnNpb24gdXNlcyBkZWx0YS1iYXNlLW9mZnNldAorZW5jb2RpbmcgaW50cm9kdWNlZCBpbiB2MS40LjQuICBQYWNrIGlkeCBmaWxlcyBhcmUgdXNpbmcgdmVyc2lvbiAyIHRoYXQKK2FsbG93cyBsYXJnZXIgcGFja3MgYW5kIGFkZGVkIHJvYnVzdG5lc3MgdGhhbmtzIHRvIGl0cyBDUkMgY2hlY2tpbmcsCitpbnRyb2R1Y2VkIGluIHYxLjUuMiBhbmQgdjEuNC40LjUuICBJZiB5b3Ugd2FudCB0byBrZWVwIHlvdXIgcmVwb3NpdG9yaWVzCitiYWNrd2FyZHMgY29tcGF0aWJsZSBwYXN0IHRoZXNlIHZlcnNpb25zLCBzZXQgcmVwYWNrLnVzZURlbHRhQmFzZU9mZnNldAordG8gZmFsc2Ugb3IgcGFjay5pbmRleFZlcnNpb24gdG8gMSwgcmVzcGVjdGl2ZWx5LgorCitXZSB1c2VkIHRvIHByZXZlbnQgc2FtcGxlIGhvb2sgc2NyaXB0cyBzaGlwcGVkIGluIHRlbXBsYXRlcy8gZnJvbQordHJpZ2dlcmluZyBieSBkZWZhdWx0IGJ5IHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCB3ZSBpbnN0YWxsIHRoZW0gYXMKK3VuZXhlY3V0YWJsZSwgYnV0IG9uIHNvbWUgZmlsZXN5c3RlbXMsIHRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yay4KK1RoZXkgYXJlIG5vdyBzaGlwcGVkIHdpdGggIi5zYW1wbGUiIHN1ZmZpeC4gIElmIHlvdSB3YW50IHRvIGFjdGl2YXRlCithbnkgb2YgdGhlc2Ugc2FtcGxlcyBhcy1pcywgcmVuYW1lIHRoZW0gdG8gZHJvcCB0aGUgIi5zYW1wbGUiIHN1ZmZpeCwKK2luc3RlYWQgb2YgcnVubmluZyAiY2htb2QgK3giIG9uIHRoZW0uICBGb3IgZXhhbXBsZSwgeW91IGNhbiByZW5hbWUKK2hvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZSB0byBob29rcy9wb3N0LXVwZGF0ZSB0byBlbmFibGUgdGhlIHNhbXBsZQoraG9vayB0aGF0IHJ1bnMgdXBkYXRlLXNlcnZlci1pbmZvLCBpbiBvcmRlciB0byBtYWtlIHJlcG9zaXRvcmllcworZnJpZW5kbHkgdG8gZHVtYiBwcm90b2NvbHMgKGkuZS4gSFRUUCkuCisKK0dJVF9DT05GSUcsIHdoaWNoIHdhcyBvbmx5IGRvY3VtZW50ZWQgYXMgYWZmZWN0aW5nICJnaXQgY29uZmlnIiwgYnV0CithY3R1YWxseSBhZmZlY3RlZCBhbGwgZ2l0IGNvbW1hbmRzLCBub3cgb25seSBhZmZlY3RzICJnaXQgY29uZmlnIi4KK0dJVF9MT0NBTF9DT05GSUcsIGFsc28gb25seSBkb2N1bWVudGVkIGFzIGFmZmVjdGluZyAiZ2l0IGNvbmZpZyIgYW5kCitub3QgZGlmZmVyZW50IGZyb20gR0lUX0NPTkZJRyBpbiBhIHVzZWZ1bCB3YXksIGlzIHJlbW92ZWQuCisKK1RoZSAiLmRvdGVzdCIgdGVtcG9yYXJ5IGFyZWEgImdpdCBhbSIgYW5kICJnaXQgcmViYXNlIiB1c2UgaXMgbm93IG1vdmVkCitpbnNpZGUgdGhlICRHSVRfRElSLCB0byBhdm9pZCBtaXN0YWtlcyBvZiBhZGRpbmcgaXQgdG8gdGhlIHByb2plY3QgYnkKK2FjY2lkZW50LgorCitBbiBhbmNpZW50IG1lcmdlIHN0cmF0ZWd5ICJzdHVwaWQiIGhhcyBiZWVuIHJlbW92ZWQuCisKKworVXBkYXRlcyBzaW5jZSB2MS41LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisqIGdpdC1wNCBpbiBjb250cmliIGxlYXJuZWQgImFsbG93U3VibWl0IiBjb25maWd1cmF0aW9uIHRvIGNvbnRyb2wgb24KKyAgd2hpY2ggYnJhbmNoIHRvIGFsbG93ICJzdWJtaXQiIHN1YmNvbW1hbmQuCisKKyogZ2l0LWd1aSBsZWFybmVkIHRvIHN0YWdlIGNoYW5nZXMgcGVyLWxpbmUuCisKKyhwb3J0YWJpbGl0eSkKKworKiBDaGFuZ2VzIGZvciBNaW5HVyBwb3J0IGhhdmUgYmVlbiBtZXJnZWQsIHRoYW5rcyB0byBKb2hhbm5lcyBTaXh0IGFuZAorICBnYW5ncy4KKworKiBTYW1wbGUgaG9vayBzY3JpcHRzIHNoaXBwZWQgaW4gdGVtcGxhdGVzLyBhcmUgbm93IHN1ZmZpeGVkIHdpdGgKKyAgKi5zYW1wbGUuCisKKyogcGVybCdzIGluLXBsYWNlIGVkaXQgKC1pKSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aG91dCBiYWNrdXAgZmlsZXMgb24gV2luZG93czsKKyAgc29tZSB0ZXN0cyBhcmUgcmV3cml0dGVuIHRvIGNvcGUgd2l0aCB0aGlzLgorCisoZG9jdW1lbnRhdGlvbikKKworKiBVcGRhdGVkIGhvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUKKworKiBHb3QgcmlkIG9mIHVzYWdlIG9mICJnaXQtZm9vIiBmcm9tIHRoZSB0dXRvcmlhbCBhbmQgbWFkZSB0eXBvZ3JhcGh5CisgIG1vcmUgY29uc2lzdGVudC4KKworKiBEaXNhbWJpZ3VhdGluZyAiLS0iIGJldHdlZW4gcmV2cyBhbmQgcGF0aHMgaXMgZmluYWxseSBkb2N1bWVudGVkLgorCisocGVyZm9ybWFuY2UsIHJvYnVzdG5lc3MsIHNhbml0eSBldGMuKQorCisqIGluZGV4LXBhY2sgdXNlZCB0b28gbXVjaCBtZW1vcnkgd2hlbiBkZWFsaW5nIHdpdGggYSBkZWVwIGRlbHRhIGNoYWluLgorICBUaGlzIGhhcyBiZWVuIG9wdGltaXplZC4KKworKiByZWR1Y2VkIGV4Y2Vzc2l2ZSBpbmxpbmluZyB0byBzaHJpbmsgc2l6ZSBvZiB0aGUgImdpdCIgYmluYXJ5LgorCisqIHZlcmlmeS1wYWNrIGNoZWNrcyB0aGUgb2JqZWN0IENSQyB3aGVuIHVzaW5nIHZlcnNpb24gMiBpZHggZmlsZXMuCisKKyogV2hlbiBhbiBvYmplY3QgaXMgY29ycnVwdCBpbiBhIHBhY2ssIHRoZSBvYmplY3QgYmVjYW1lIHVudXNhYmxlIGV2ZW4KKyAgd2hlbiB0aGUgc2FtZSBvYmplY3QgaXMgYXZhaWxhYmxlIGluIGEgbG9vc2UgZm9ybSwgIFdlIG5vdyB0cnkgaGFyZGVyIHRvCisgIGZhbGwgYmFjayB0byB0aGVzZSByZWR1bmRhbnQgb2JqZWN0cyB3aGVuIGFibGUuICBJbiBwYXJ0aWN1bGFyLCAiZ2l0CisgIHJlcGFjayAtYSAtZiIgY2FuIGJlIHVzZWQgdG8gZml4IHN1Y2ggYSBjb3JydXB0aW9uIGFzIGxvbmcgYXMgbmVjZXNzYXJ5CisgIG9iamVjdHMgYXJlIGF2YWlsYWJsZS4KKworKiBQZXJmb3JtYW5jZSBvZiAiZ2l0LWJsYW1lIC1DIC1DIiBvcGVyYXRpb24gaXMgdmFzdGx5IGltcHJvdmVkLgorCisqIGdpdC1jbG9uZSBkb2VzIG5vdCBjcmVhdGUgcmVmcyBpbiBsb29zZSBmb3JtIGFueW1vcmUgKGl0IGJlaGF2ZXMgYXMKKyAgaWYgeW91IGltbWVkaWF0ZWx5IHJhbiBnaXQtcGFjay1yZWZzIGFmdGVyIGNsb25pbmcpLiAgVGhpcyB3aWxsIGhlbHAKKyAgcmVwb3NpdG9yaWVzIHdpdGggaW5zYW5lbHkgbGFyZ2UgbnVtYmVyIG9mIHJlZnMuCisKKyogY29yZS5mc3luY29iamVjdGZpbGVzIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxvb3NlCisgIG9iamVjdHMgY3JlYXRlZCB3aWxsIGJlIGZzeW5jJ2VkICh0aGlzIGlzIG9ubHkgdXNlZnVsIG9uIGZpbGVzeXN0ZW1zCisgIHRoYXQgZG9lcyBub3Qgb3JkZXIgZGF0YSB3cml0ZXMgcHJvcGVybHkpLgorCisqICJnaXQgY29tbWl0LXRyZWUiIHBsdW1iaW5nIGNhbiBtYWtlIE9jdG9wdXMgd2l0aCBtb3JlIHRoYW4gMTYgcGFyZW50cy4KKyAgImdpdCBjb21taXQiIGhhcyBiZWVuIGNhcGFibGUgb2YgdGhpcyBmb3IgcXVpdGUgc29tZSB0aW1lLgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyogZXZlbiBtb3JlIGRvY3VtZW50YXRpb24gcGFnZXMgYXJlIG5vdyBhY2Nlc3NpYmxlIHZpYSAibWFuIiBhbmQgImdpdCBoZWxwIi4KKworKiBBIG5ldyBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyBjYW4gYmUgdXNlZCB0byBzdG9wCisgIHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyBvZiB0aGUgdG9wbGV2ZWwgb2Ygd29ya2luZyB0cmVlOyB0aGlzIG1heSBiZSB1c2VmdWwKKyAgd2hlbiB5b3UgYXJlIHdvcmtpbmcgaW4gYSBzbG93IG5ldHdvcmsgZGlzayBhbmQgYXJlIG91dHNpZGUgYW55IHdvcmtpbmcgdHJlZSwKKyAgYXMgYmFzaC1jb21wbGV0aW9uIGFuZCAiZ2l0IGhlbHAiIG1heSBzdGlsbCBuZWVkIHRvIHJ1biBpbiB0aGVzZSBwbGFjZXMuCisKKyogQnkgZGVmYXVsdCwgc3Rhc2ggZW50cmllcyBuZXZlciBleHBpcmUuICBTZXQgcmVmbG9nZXhwaXJlIGluIFtnYworICAicmVmcy9zdGFzaCJdIHRvIGEgcmVhc29uYWJsZSB2YWx1ZSB0byBnZXQgdHJhZGl0aW9uYWwgYXV0by1leHBpcmF0aW9uCisgIGJlaGF2aW91ciBiYWNrCisKKyogTG9uZ3N0YW5kaW5nIGxhdGVuY3kgaXNzdWUgd2l0aCBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IGhhcyBiZWVuCisgIGFkZHJlc3NlZC4gIFRoaXMgd2lsbCBuZWVkIHRvIGJlIGJhY2ttZXJnZWQgdG8gJ21haW50JyBsYXRlci4KKworKiBwYWdlci48Y21kPiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHRoZQorICBkZWZhdWx0IHBhZ2luZyBiZWhhdmlvdXIgcGVyIGNvbW1hbmQuCisKKyogImdpdC1hZGQgLWkiIGhhcyBhIG5ldyBhY3Rpb24gJ2UvZGl0JyB0byBhbGxvdyB5b3UgZWRpdCB0aGUgcGF0Y2ggaHVuaworICBtYW51YWxseS4KKworKiBnaXQtYW0gcmVjb3JkcyB0aGUgb3JpZ2luYWwgdGlwIG9mIHRoZSBicmFuY2ggaW4gT1JJR19IRUFEIGJlZm9yZSBpdAorICBzdGFydHMgYXBwbHlpbmcgcGF0Y2hlcy4KKworKiBnaXQtYXBwbHkgY2FuIGhhbmRsZSBhIHBhdGNoIHRoYXQgdG91Y2hlcyB0aGUgc2FtZSBwYXRoIG1vcmUgdGhhbiBvbmNlCisgIG11Y2ggYmV0dGVyIHRoYW4gYmVmb3JlLgorCisqIGdpdC1hcHBseSBjYW4gYmUgdG9sZCBub3QgdG8gdHJ1c3QgdGhlIGxpbmUgY291bnRzIHJlY29yZGVkIGluIHRoZSBpbnB1dAorICBwYXRjaCBidXQgcmVjb3VudCwgd2l0aCB0aGUgbmV3IC0tcmVjb3VudCBvcHRpb24uCisKKyogZ2l0LWFwcGx5IGNhbiBiZSB0b2xkIHRvIGFwcGx5IGEgcGF0Y2ggdG8gYSBwYXRoIGRlZXBlciB0aGFuIHdoYXQgdGhlCisgIHBhdGNoIHJlY29yZHMgd2l0aCAtLWRpcmVjdG9yeSBvcHRpb24uCisKKyogZ2l0LWFyY2hpdmUgY2FuIGJlIHRvbGQgdG8gb21pdCBjZXJ0YWluIHBhdGhzIGZyb20gaXRzIG91dHB1dCB1c2luZworICBleHBvcnQtaWdub3JlIGF0dHJpYnV0ZXMuCisKKyogZ2l0LWFyY2hpdmUgdXNlcyB0aGUgemxpYiBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsIHdoZW4gY3JlYXRpbmcKKyAgemlwIGFyY2hpdmUuCisKKyogZ2l0LWFyY2hpdmUncyBjb21tYW5kIGxpbmUgb3B0aW9ucyAtLWV4ZWMgYW5kIC0tcmVtb3RlIGNhbiB0YWtlIHRoZWlyCisgIHBhcmFtZXRlcnMgYXMgc2VwYXJhdGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cywgc2ltaWxhciB0byBvdGhlciBjb21tYW5kcy4KKyAgSU9XLCBib3RoICItLWV4ZWM9cGF0aCIgYW5kICItLWV4ZWMgcGF0aCIgYXJlIG5vdyBzdXBwb3J0ZWQuCisKKyogV2l0aCAtdiBvcHRpb24sIGdpdC1icmFuY2ggZGVzY3JpYmVzIHRoZSByZW1vdGUgdHJhY2tpbmcgc3RhdGlzdGljcworICBzaW1pbGFyIHRvIHRoZSB3YXkgZ2l0LWNoZWNrb3V0IHJlcG9ydHMgYnkgaG93IG1hbnkgY29tbWl0cyB5b3VyIGJyYW5jaAorICBpcyBhaGVhZC9iZWhpbmQuCisKKyogZ2l0LWJyYW5jaCdzIC0tY29udGFpbnMgb3B0aW9uIHVzZWQgdG8gYWx3YXlzIHJlcXVpcmUgYSBjb21taXQgcGFyYW1ldGVyCisgIHRvIGxpbWl0IHRoZSBicmFuY2hlcyB3aXRoOyBpdCBub3cgZGVmYXVsdHMgdG8gbGlzdCBicmFuY2hlcyB0aGF0CisgIGNvbnRhaW5zIEhFQUQgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZC4KKworKiBnaXQtYnJhbmNoJ3MgLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbiB1c2VkIHRvIGFsd2F5cyBsaW1pdCB0aGUKKyAgYnJhbmNoZXMgcmVsYXRpdmUgdG8gdGhlIEhFQUQsIGJ1dCB0aGV5IGNhbiBub3cgdGFrZSBhbiBvcHRpb25hbCBjb21taXQKKyAgYXJndW1lbnQgdGhhdCBpcyB1c2VkIGluIHBsYWNlIG9mIEhFQUQuCisKKyogZ2l0LWJ1bmRsZSBjYW4gcmVhZCB0aGUgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCisqIGdpdC1jaGVycnktcGljayBjYW4gcmVwbGF5IGEgcm9vdCBjb21taXQgbm93LgorCisqIGdpdC1jbG9uZSBjYW4gY2xvbmUgZnJvbSBhIHJlbW90ZSB3aG9zZSBVUkwgd291bGQgYmUgcmV3cml0dGVuIGJ5CisgIGNvbmZpZ3VyYXRpb24gc3RvcmVkIGluICRIT01FLy5naXRjb25maWcgbm93LgorCisqICJnaXQtY2xvbmUgLS1taXJyb3IiIGlzIGEgaGFuZHkgd2F5IHRvIHNldCB1cCBhIGJhcmUgbWlycm9yIHJlcG9zaXRvcnkuCisKKyogZ2l0LWN2c3NlcnZlciBsZWFybmVkIHRvIHJlc3BvbmQgdG8gImN2cyBjbyAtYyIuCisKKyogZ2l0LWRpZmYgLS1jaGVjayBub3cgY2hlY2tzIGxlZnRvdmVyIG1lcmdlIGNvbmZsaWN0IG1hcmtlcnMuCisKKyogImdpdC1kaWZmIC1wIiBsZWFybmVkIHRvIGdyYWIgYSBiZXR0ZXIgaHVuayBoZWFkZXIgbGluZXMgaW4KKyAgQmliVGV4LCBQYXNjYWwvRGVscGhpLCBhbmQgUnVieSBmaWxlcyBhbmQgYWxzbyBwYXlzIGF0dGVudGlvbiB0bworICBjaGFwdGVyIGFuZCBwYXJ0IGJvdW5kYXJ5IGluIFRlWCBkb2N1bWVudHMuCisKKyogV2hlbiByZW1vdGUgc2lkZSB1c2VkIHRvIGhhdmUgYnJhbmNoICdmb28nIGFuZCBnaXQtZmV0Y2ggZmluZHMgdGhhdCBub3cKKyAgaXQgaGFzIGJyYW5jaCAnZm9vL2JhcicsIGl0IHJlZnVzZXMgdG8gbG9zZSB0aGUgZXhpc3RpbmcgcmVtb3RlIHRyYWNraW5nCisgIGJyYW5jaCBhbmQgaXRzIHJlZmxvZy4gIFRoZSBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIGltcHJvdmVkIHRvIHN1Z2dlc3QKKyAgcHJ1bmluZyB0aGUgcmVtb3RlIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHByb2NlZWQgYW5kIGdldCB0aGUgbGF0ZXN0IHNldAorICBvZiBicmFuY2hlcyBmcm9tIHRoZSByZW1vdGUsIGluY2x1ZGluZyBzdWNoICdmb28vYmFyJy4KKworKiBmYXN0LWV4cG9ydCBsZWFybmVkIHRvIGV4cG9ydCBhbmQgaW1wb3J0IG1hcmtzIGZpbGU7IHRoaXMgY2FuIGJlIHVzZWQgdG8KKyAgaW50ZXJmYWNlIHdpdGggZmFzdC1pbXBvcnQgaW5jcmVtZW50YWxseS4KKworKiBmYXN0LWltcG9ydCBhbmQgZmFzdC1leHBvcnQgbGVhcm5lZCB0byBleHBvcnQgYW5kIGltcG9ydCBnaXRsaW5rcy4KKworKiAiZ2l0ayIgbGVmdCBiYWNrZ3JvdW5kIHByb2Nlc3MgYmVoaW5kIGFmdGVyIGJlaW5nIGFza2VkIHRvIGRpZyB2ZXJ5IGRlZXAKKyAgaGlzdG9yeSBhbmQgdGhlIHVzZXIga2lsbGVkIHRoZSBVSTsgdGhlIHByb2Nlc3MgaXMga2lsbGVkIHdoZW4gdGhlIFVJIGdvZXMKKyAgYXdheSBub3cuCisKKyogZ2l0LXJlYmFzZSByZWNvcmRzIHRoZSBvcmlnaW5hbCB0aXAgb2YgYnJhbmNoIGluIE9SSUdfSEVBRCBiZWZvcmUgaXQgaXMKKyAgcmV3b3VuZC4KKworKiAiZ2l0IHJlcmVyZSIgY2FuIGJlIHRvbGQgdG8gdXBkYXRlIHRoZSBpbmRleCB3aXRoIGF1dG8tcmV1c2VkIHJlc29sdXRpb24KKyAgd2l0aCByZXJlcmUuYXV0b3VwZGF0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisqIGdpdC1yZXYtcGFyc2UgbGVhcm5lZCAkY29tbWl0XiEgYW5kICRjb21taXReQCBub3RhdGlvbnMgdXNlZCBpbiAibG9nIgorICBmYW1pbHkuICBUaGVzZSBub3RhdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBnaXRrIGFzIHdlbGwsIGJlY2F1c2UgdGhlIGdpdGsKKyAgY29tbWFuZCBpbnRlcm5hbGx5IHVzZXMgcmV2LXBhcnNlIHRvIGludGVycHJldCBpdHMgYXJndW1lbnRzLgorCisqIGdpdC1yZXYtbGlzdCBsZWFybmVkIC0tY2hpbGRyZW4gb3B0aW9uIHRvIHNob3cgY2hpbGQgY29tbWl0cyBpdAorICBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIHRyYXZlcnNhbCwgaW5zdGVhZCBvZiBzaG93aW5nIHBhcmVudCBjb21taXRzLgorCisqIGdpdC1zZW5kLW1haWwgY2FuIHRhbGsgbm90IGp1c3Qgb3ZlciBTU0wgYnV0IG92ZXIgVExTIG5vdy4KKworKiBnaXQtc2hvcnRsb2cgaG9ub3JzIGN1c3RvbSBvdXRwdXQgZm9ybWF0IHNwZWNpZmllZCB3aXRoICItLXByZXR0eT1mb3JtYXQ6Ii4KKworKiAiZ2l0LXN0YXNoIHNhdmUiIGxlYXJuZWQgLS1rZWVwLWluZGV4IG9wdGlvbi4gIFRoaXMgbGV0cyB5b3Ugc3Rhc2ggYXdheSB0aGUKKyAgbG9jYWwgY2hhbmdlcyBhbmQgYnJpbmcgdGhlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleCB0byB5b3VyIHdvcmtpbmcKKyAgdHJlZSBmb3IgZXhhbWluYXRpb24gYW5kIHRlc3RpbmcuCisKKyogZ2l0LXN0YXNoIGFsc28gbGVhcm5lZCBicmFuY2ggc3ViY29tbWFuZCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIG91dCBvZgorICBzdGFzaGVkIGNoYW5nZXMuCisKKyogZ2l0LXN0YXR1cyBnaXZlcyB0aGUgcmVtb3RlIHRyYWNraW5nIHN0YXRpc3RpY3Mgc2ltaWxhciB0byB0aGUgd2F5CisgIGdpdC1jaGVja291dCByZXBvcnRzIGJ5IGhvdyBtYW55IGNvbW1pdHMgeW91ciBicmFuY2ggaXMgYWhlYWQvYmVoaW5kLgorCisqICJnaXQtc3ZuIGRjb21taXQiIGlzIG5vdyBhd2FyZSBvZiBhdXRvLXByb3BzIHNldHRpbmcgdGhlIHN1YnZlcnNpb24gdXNlcgorICBoYXMuCisKKyogWW91IGNhbiB0ZWxsICJnaXQgc3RhdHVzIC11IiB0byBldmVuIG1vcmUgYWdncmVzc2l2ZWx5IG9taXQgY2hlY2tpbmcKKyAgdW50cmFja2VkIGZpbGVzIHdpdGggLS11bnRyYWNrZWQtZmlsZXM9bm8uCisKKyogT3JpZ2luYWwgU0hBLTEgdmFsdWUgZm9yICJ1cGRhdGUtcmVmIC1kIiBpcyBvcHRpb25hbCBub3cuCisKKyogRXJyb3IgY29kZXMgZnJvbSBnaXR3ZWIgYXJlIG1hZGUgbW9yZSBkZXNjcmlwdGl2ZSB3aGVyZSBwb3NzaWJsZSwgcmF0aGVyCisgIHRoYW4gIjQwMyBmb3JiaWRkZW4iIGFzIHdlIHVzZWQgdG8gaXNzdWUgZXZlcnl3aGVyZS4KKworKGludGVybmFsKQorCisqIGdpdC1tZXJnZSBoYXMgYmVlbiByZWltcGxlbWVudGVkIGluIEMuCisKKworRml4ZXMgc2luY2UgdjEuNS42CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjYgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiBnaXQtY2xvbmUgaWdub3JlZCBpdHMgLXUgb3B0aW9uOyB0aGUgZml4IG5lZWRzIHRvIGJlIGJhY2twb3J0ZWQgdG8KKyAgICdtYWludCc7CisKKyAqIGdpdC1tdiB1c2VkIHRvIGxvc2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gY2hhbmdlcyB0aGF0IGFyZSBzdGFnZWQKKyAgIGFuZCB0aGF0IGFyZSBvbmx5IGluIHRoZSB3b3JraW5nIHRyZWUsIGJ5IHN0YWdpbmcgYm90aCBpbiB0aGUgaW5kZXgKKyAgIGFmdGVyIG1vdmluZyBzdWNoIGEgcGF0aC4KKworICogImdpdC1yZWJhc2UgLWkgLXAiIHJld3JvdGUgdGhlIHBhcmVudHMgdG8gd3Jvbmcgb25lcyB3aGVuIGFtZW5kaW5nCisgICAoZWl0aGVyIGVkaXQgb3Igc3F1YXNoKSB3YXMgaW52b2x2ZWQsIGFuZCBkaWQgbm90IHdvcmsgY29ycmVjdGx5CisgICB3aGVuIGZhc3QgZm9yd2FyZGluZy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1OTRiYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMS50eHQKQEAgLTAsMCArMSw1OSBAQAorR0lUIHYxLjYuMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBhZGQgZnJvdHovbml0Zm9sIiB3aGVuICJmcm90eiIgaXMgYSBzdWJtb2R1bGUgc2hvdWxkIGhhdmUgZXJyb3JlZAorICBvdXQsIGJ1dCBpdCBkaWRuJ3QuCisKKyogImdpdCBhcHBseSIgdG9vayBmaWxlIG1vZGVzIGZyb20gdGhlIHBhdGNoIHRleHQgYW5kIHVwZGF0ZWQgdGhlIG1vZGUKKyAgYml0cyBvZiB0aGUgdGFyZ2V0IHRyZWUgZXZlbiB3aGVuIHRoZSBwYXRjaCB3YXMgbm90IGFib3V0IG1vZGUgY2hhbmdlcy4KKworKiAiZ2l0IGJpc2VjdCB2aWV3IiBvbiBDeWd3aW4gZGlkIG5vdCBsYXVuY2ggZ2l0aworCisqICJnaXQgY2hlY2tvdXQgJHRyZWUiIGRpZCBub3QgdHJpZ2dlciBhbiBlcnJvci4KKworKiAiZ2l0IGNvbW1pdCIgdHJpZWQgdG8gcmVtb3ZlIENPTU1JVF9FRElUTVNHIGZyb20gdGhlIHdvcmsgdHJlZSBieSBtaXN0YWtlLgorCisqICJnaXQgZGVzY3JpYmUgLS1hbGwiIGNvbXBsYWluZWQgd2hlbiBhIGNvbW1pdCBpcyBkZXNjcmliZWQgd2l0aCBhIHRhZywKKyAgd2hpY2ggd2FzIG5vbnNlbnNlLgorCisqICJnaXQgZGlmZiAtLW5vLWluZGV4IC0tIiBkaWQgbm90IHRyaWdnZXIgbm8taW5kZXggKGFrYSAidXNlIGdpdC1kaWZmIGFzCisgIGEgcmVwbGFjZW1lbnQgb2YgZGlmZiBvbiB1bnRyYWNrZWQgZmlsZXMiKSBiZWhhdmlvdXIuCisKKyogImdpdCBmb3JtYXQtcGF0Y2ggLTEgSEVBRCIgb24gYSByb290IGNvbW1pdCBmYWlsZWQgdG8gcHJvZHVjZSBwYXRjaAorICB0ZXh0LgorCisqICJnaXQgZnNjayBicmFuY2giIGRpZCBub3Qgd29yayBhcyBhZHZlcnRpc2VkOyBpbnN0ZWFkIGl0IGJlaGF2ZWQgdGhlIHNhbWUKKyAgd2F5IGFzICJnaXQgZnNjayIuCisKKyogImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVzIiBkaWQgbm90IGhhbmRsZSBhIG11bHRpLWxpbmUgc3ViamVjdCB0aGUKKyAgc2FtZSB3YXkgYXMgYnVpbHQtaW4gbG9nIGxpc3RlcnMgKGkuZS4gc2hvcnRsb2csIC0tcHJldHR5PW9uZWxpbmUsIGV0Yy4pCisKKyogImdpdCBkYWVtb24iLCBhbmQgImdpdCBtZXJnZS1maWxlIiBhcmUgbW9yZSBjYXJlZnVsIHdoZW4gZnJlb3BlbiBmYWlscworICBhbmQgYmFyZiwgaW5zdGVhZCBvZiBnb2luZyBvbiBhbmQgd3JpdGluZyB0byB1bm9wZW5lZCBmaWxlaGFuZGxlLgorCisqICJnaXQgaHR0cC1wdXNoIiBkaWQgbm90IGxpa2Ugc29tZSBSRkMgNDkxOCBjb21wbGlhbnQgREFWIHNlcnZlcgorICByZXNwb25zZXMuCisKKyogImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiIG1pc3Rha2VubHkgb3ZlcndyaXR0ZW4gYW4gdW50cmFja2VkIGZpbGUgaW4gdGhlCisgIHdvcmsgdHJlZSB1cG9uIGRlbGV0ZS9tb2RpZnkgY29uZmxpY3QuCisKKyogImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiIGRpZG4ndCBsZWF2ZSB0aGUgaW5kZXggdW5tZXJnZWQgZm9yIGVudHJpZXMgd2l0aAorICByZW5hbWUvZGVsZXRlIGNvbmZsaWN0cy4KKworKiAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgY2xvYmJlcmVkIHVudHJhY2tlZCBmaWxlcyBpbiB0aGUgd29yayB0cmVlLgorCisqICJnaXQgbXYgLWsiIHdpdGggbW9yZSB0aGFuIG9uZSBlcnJvbmVvdXMgcGF0aHMgbWlzYmVoYXZlZC4KKworKiAiZ2l0IHJlYWQtdHJlZSAtbSAtdSIgaGVuY2UgYnJhbmNoIHN3aXRjaGluZyBpbmNvcnJlY3RseSBsb3N0IGEKKyAgc3ViZGlyZWN0b3J5IGluIHJhcmUgY2FzZXMuCisKKyogImdpdCByZWJhc2UgLWkiIGlzc3VlZCBhbiB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlIHVwb24gYSB1c2VyIGVycm9yIG9mCisgIG1hcmtpbmcgdGhlIGZpcnN0IGNvbW1pdCB0byBiZSAic3F1YXNoImVkLgorCisqICJnaXQgc2hvcnRsb2ciIGRpZCBub3QgZm9ybWF0IGEgY29tbWl0IG1lc3NhZ2Ugd2l0aCBtdWx0aS1saW5lCisgIHN1YmplY3QgY29ycmVjdGx5LgorCitNYW55IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzdjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjIudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dJVCB2MS42LjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgbG9naWMgZm9yIHJlbmFtZSBkZXRlY3Rpb24gaW4gaW50ZXJuYWwgZGlmZiB1c2VkIGJ5IGNvbW1hbmRzIGxpa2UKKyAgImdpdCBkaWZmIiBhbmQgImdpdCBibGFtZSIgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGF2b2lkIGxvYWRpbmcgdGhlIHNhbWUKKyAgYmxvYiByZXBlYXRlZGx5LgorCisqIFdlIGRpZCBub3QgYWxsb3cgd3JpdGluZyBvdXQgYSBibG9iIHRoYXQgaXMgbGFyZ2VyIHRoYW4gMkdCIGZvciBubyBnb29kCisgIHJlYXNvbi4KKworKiAiZ2l0IGZvcm1hdC1wYXRjaCAtbyAkZGlyIiwgd2hlbiAkZGlyIGlzIGEgcmVsYXRpdmUgZGlyZWN0b3J5LCB1c2VkIGl0CisgIGFzIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSB3b3JrIHRyZWUsIG5vdCByZWxhdGl2ZSB0byB0aGUgY3VycmVudAorICBkaXJlY3RvcnkuCisKKyogdjEuNi4xIGludHJvZHVjZWQgYW4gb3B0aW1pemF0aW9uIGZvciAiZ2l0IHB1c2giIGludG8gYSByZXBvc2l0b3J5IChBKQorICB0aGF0IGJvcnJvd3MgaXRzIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkgKEIpIHRvIGF2b2lkIHNlbmRpbmcKKyAgb2JqZWN0cyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gcmVwb3NpdG9yeSBCLCB3aGVuIHRoZXkgYXJlIG5vdCB5ZXQgdXNlZAorICBieSByZXBvc2l0b3J5IEEuICBIb3dldmVyIHRoZSBjb2RlIG9uIHRoZSAiZ2l0IHB1c2giIHNlbmRlciBzaWRlIHdhcworICBidWdneSBhbmQgZGlkIG5vdCB3b3JrIHdoZW4gcmVwb3NpdG9yeSBCIGhhZCBuZXcgb2JqZWN0cyB0aGF0IGFyZSBub3QKKyAga25vd24gYnkgdGhlIHNlbmRlci4gIFRoaXMgY2F1c2VkIHB1c2hpbmcgaW50byBhICJmb3JrZWQiIHJlcG9zaXRvcnkKKyAgc2VydmVkIGJ5IHYxLjYuMSBzb2Z0d2FyZSB1c2luZyAiZ2l0IHB1c2giIGZyb20gdjEuNi4xIHNvbWV0aW1lcyBkaWQgbm90CisgIHdvcmsuICBUaGUgYnVnIHdhcyBwdXJlbHkgb24gdGhlICJnaXQgcHVzaCIgc2VuZGVyIHNpZGUsIGFuZCBoYXMgYmVlbgorICBjb3JyZWN0ZWQuCisKKyogImdpdCBzdGF0dXMgLXYiIGRpZCBub3QgcGFpbnQgaXRzIGRpZmYgb3V0cHV0IGluIGNvbG91ciBldmVuIHdoZW4KKyAgY29sb3IudWkgY29uZmlndXJhdGlvbiB3YXMgc2V0LgorCisqICJnaXQgbHMtdHJlZSIgbGVhcm5lZCAtLWZ1bGwtdHJlZSBvcHRpb24gdG8gaGVscCBQb3JjZWxhaW4gc2NyaXB0cyB0aGF0CisgIHdhbnQgdG8gYWx3YXlzIHNlZSB0aGUgZnVsbCBwYXRoIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgd29ya2luZworICBkaXJlY3RvcnkuCisKKyogImdpdCBncmVwIiBpbmNvcnJlY3RseSBzZWFyY2hlZCBpbiB3b3JrIHRyZWUgcGF0aHMgZXZlbiB3aGVuIHRoZXkgYXJlCisgIG1hcmtlZCBhcyBhc3N1bWUtdW5jaGFuZ2VkLiAgSXQgbm93IHNlYXJjaGVzIGluIHRoZSBpbmRleCBlbnRyaWVzLgorCisqICJnaXQgZ2MiIHdpdGggbm8gZ3JhY2UgcGVyaW9kIG5lZWRsZXNzbHkgZWplY3RlZCBwYWNrZWQgYnV0IHVucmVhY2hhYmxlCisgIG9iamVjdHMgaW4gdGhlaXIgbG9vc2UgZm9ybSwgb25seSB0byBkZWxldGUgdGhlbSByaWdodCBhd2F5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwOGQ4MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMy50eHQKQEAgLTAsMCArMSwyOCBAQAorR0lUIHYxLjYuMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgZGlmZiAtLWJpbmFyeSB8IGdpdCBhcHBseSIgcGlwZWxpbmUgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbgorICBhIGJpbmFyeSBibG9iIGlzIGNoYW5nZWQgdG8gYSBzeW1ib2xpYyBsaW5rLgorCisqIFNvbWUgY29tYmluYXRpb25zIG9mIC1iLy13Ly0taWdub3JlLXNwYWNlLWF0LWVvbCB0byAiZ2l0IGRpZmYiIGRpZAorICBub3Qgd29yayBhcyBleHBlY3RlZC4KKworKiAiZ2l0IGdyZXAiIGRpZCBub3QgcGFzcyB0aGUgLUkgKGlnbm9yZSBiaW5hcnkpIG9wdGlvbiB3aGVuCisgIGNhbGxpbmcgb3V0IGFuIGV4dGVybmFsIGdyZXAgcHJvZ3JhbS4KKworKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgaW5jbHVkZSBIRUFEIHRvIHRoZSBzZXQgb2Ygc3RhcnRpbmcgcG9pbnRzCisgIHdoZW4gLS1hbGwgaXMgZ2l2ZW4uICBUaGlzIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHlvdSBhcmUgbm90CisgIG9uIGFueSBicmFuY2guCisKKyogImdpdCBtdiIgdG8gbW92ZSBhbiB1bnRyYWNrZWQgZmlsZSB0byBvdmVyd3JpdGUgYSB0cmFja2VkCisgIGNvbnRlbnRzIG1pc2JlaGF2ZWQuCisKKyogImdpdCBtZXJnZSAtcyBvY3RvcHVzIiB3aXRoIG1hbnkgcG90ZW50aWFsIG1lcmdlIGJhc2VzIGRpZCBub3QKKyAgd29yayBjb3JyZWN0bHkuCisKKyogUlBNIGJpbmFyeSBwYWNrYWdlIGluc3RhbGxlZCB0aGUgaHRtbCBtYW5wYWdlcyBpbiBhIHdyb25nIHBsYWNlLgorCitBbHNvIGluY2x1ZGVzIG1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JhZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS40LnR4dApAQCAtMCwwICsxLDQxIEBACitHSVQgdjEuNi4xLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4xLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogLmdpdGlnbm9yZSBsZWFybmVkIHRvIGhhbmRsZSBiYWNrc2xhc2ggYXMgYSBxdW90aW5nIG1lY2hhbmlzbSBmb3IKKyAgY29tbWVudCBpbnRyb2R1Y3Rpb24gY2hhcmFjdGVyICIjIi4KKyAgVGhpcyBmaXggd2FzIGZpcnN0IG1lcmdlZCB0byAxLjYuMi4xLgorCisqICJnaXQgZmFzdC1leHBvcnQiIHByb2R1Y2VkIHdyb25nIG91dHB1dCB3aXRoIHNvbWUgcGFyZW50cyBtaXNzaW5nIGZyb20KKyAgY29tbWl0cywgd2hlbiB0aGUgaGlzdG9yeSBpcyBjbG9jay1za2V3ZWQuCisKKyogImdpdCBmYXN0LWltcG9ydCIgc29tZXRpbWVzIGZhaWxlZCB0byByZWFkIGJhY2sgb2JqZWN0cyBpdCBqdXN0IHdyb3RlCisgIG91dCBhbmQgYWJvcnRlZCwgYmVjYXVzZSBpdCBmYWlsZWQgdG8gZmx1c2ggc3RhbGUgY2FjaGVkIGRhdGEuCisKKyogImdpdC1scy10cmVlIiBhbmQgImdpdC1kaWZmLXRyZWUiIHVzZWQgYSBwYXRoc3BlYyBjb3JyZWN0bHkgd2hlbgorICBkZWNpZGluZyB0byBkZXNjZW5kIGludG8gYSBzdWJkaXJlY3RvcnkgYnV0IHRoZXkgZGlkIG5vdCBtYXRjaCB0aGUKKyAgaW5kaXZpZHVhbCBwYXRocyBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRoc3BlY3MgImFiYy9kIGFiIiB0byBtYXRjaAorICAiYWJjLzAiICgiYWJjL2QiIG1hZGUgdGhlbSBkZWNpZGUgdG8gZGVzY2VuZCBpbnRvIHRoZSBkaXJlY3RvcnkgImFiYy8iLAorICBhbmQgdGhlbiAiYWIiIGluY29ycmVjdGx5IG1hdGNoZWQgImFiYy8wIiB3aGVuIGl0IHNob3VsZG4ndCkuCisgIFRoaXMgZml4IHdhcyBmaXJzdCBtZXJnZWQgdG8gMS42LjIuMy4KKworKiBpbXBvcnQtemlwcyBzY3JpcHQgKGluIGNvbnRyaWIpIGRpZCBub3QgY29tcHV0ZSB0aGUgY29tbW9uIGRpcmVjdG9yeQorICBwcmVmaXggY29ycmVjdGx5LgorICBUaGlzIGZpeCB3YXMgZmlyc3QgbWVyZ2VkIHRvIDEuNi4yLjIuCisKKyogImdpdCBpbml0IiBzZWdmYXVsdGVkIHdoZW4gZ2l2ZW4gYW4gb3ZlcmxvbmcgdGVtcGxhdGUgbG9jYXRpb24gdmlhCisgIHRoZSAtLXRlbXBsYXRlPSBvcHRpb24uCisgIFRoaXMgZml4IHdhcyBmaXJzdCBtZXJnZWQgdG8gMS42LjIuNC4KKworKiAiZ2l0IHJlcGFjayIgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBuZWNlc3Nhcnkgb2JqZWN0IHdhcyBtaXNzaW5nIGluIHRoZQorICByZXBvc2l0b3J5LgorCisqIGdpdC1yZXBhY2sgKGludm9rZWQgZnJvbSBnaXQtZ2MpIGRpZCBub3Qgd29yayBhcyBuaWNlbHkgYXMgaXQgc2hvdWxkIGluCisgIGEgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3Mgb2JqZWN0cyBmcm9tIG5laWdoYm91cnMgdmlhIGFsdGVybmF0ZXMKKyAgbWVjaGFuaXNtIGVzcGVjaWFsbHkgd2hlbiBzb21lIHBhY2tzIGFyZSBtYXJrZWQgd2l0aCB0aGUgIi5rZWVwIiBmbGFnCisgIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIHJlcGFja2VkLgorICBUaGlzIGZpeCB3YXMgZmlyc3QgbWVyZ2VkIHRvIDEuNi4yLjMuCisKK0Fsc28gaW5jbHVkZXMgbWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNTJhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEudHh0CkBAIC0wLDAgKzEsMjgwIEBACitHSVQgdjEuNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjYuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBzb21lIGNvbW1hbmRzIChlLmcuICJnaXQgbG9nIiwgImdpdCBkaWZmIikgc3Bhd24gcGFnZXIgaW50ZXJuYWxseSwgd2UKK3VzZWQgdG8gbWFrZSB0aGUgcGFnZXIgdGhlIHBhcmVudCBwcm9jZXNzIG9mIHRoZSBnaXQgY29tbWFuZCB0aGF0IHByb2R1Y2VzCitvdXRwdXQuICBUaGlzIG1lYW50IHRoYXQgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSB3aG9sZSB0aGluZyBjb21lcyBmcm9tIHRoZQorcGFnZXIsIG5vdCB0aGUgdW5kZXJseWluZyBnaXQgY29tbWFuZC4gIFdlIHN3YXBwZWQgdGhlIG9yZGVyIG9mIHRoZQorcHJvY2Vzc2VzIGFyb3VuZCBhbmQgeW91IHdpbGwgc2VlIHRoZSBleGl0IGNvZGUgZnJvbSB0aGUgY29tbWFuZCBmcm9tIG5vdworb24uCisKKyhzdWJzeXN0ZW1zKQorCisqIGdpdGsgY2FuIGNhbGwgb3V0IHRvIGdpdC1ndWkgdG8gdmlldyAiZ2l0IGJsYW1lIiBvdXRwdXQ7IGdpdC1ndWkgaW4gdHVybgorICBjYW4gcnVuIGdpdGsgZnJvbSBpdHMgYmxhbWUgdmlldy4KKworKiBWYXJpb3VzIGdpdC1ndWkgdXBkYXRlcyBpbmNsdWRpbmcgdXBkYXRlZCB0cmFuc2xhdGlvbnMuCisKKyogVmFyaW91cyBnaXR3ZWIgdXBkYXRlcyBmcm9tIHJlcG8ub3IuY3ogaW5zdGFsbGF0aW9uLgorCisqIFVwZGF0ZXMgdG8gZW1hY3MgYmluZGluZ3MuCisKKyhwb3J0YWJpbGl0eSkKKworKiBBIGZldyB0ZXN0IHNjcmlwdHMgdXNlZCBub25wb3J0YWJsZSAiZ3JlcCIgdGhhdCBkaWQgbm90IHdvcmsgd2VsbCBvbgorICBzb21lIHBsYXRmb3JtcywgZS5nLiBTb2xhcmlzLgorCisqIFNhbXBsZSBwcmUtYXV0by1nYyBzY3JpcHQgaGFzIE9TIFggc3VwcG9ydC4KKworKiBNYWtlZmlsZSBoYXMgc3VwcG9ydCBmb3IgKGFuY2llbnQpIEZyZWVCU0QgNC45LgorCisocGVyZm9ybWFuY2UpCisKKyogTWFueSBvcGVyYXRpb25zIHRoYXQgYXJlIGxzdGF0KDMpIGhlYXZ5IGNhbiBiZSB0b2xkIHRvIHByZS1leGVjdXRlCisgIG5lY2Vzc2FyeSBsc3RhdCgzKSBpbiBwYXJhbGxlbCBiZWZvcmUgdGhlaXIgbWFpbiBvcGVyYXRpb25zLCB3aGljaAorICBwb3RlbnRpYWxseSBnaXZlcyBtdWNoIGltcHJvdmVkIHBlcmZvcm1hbmNlIGZvciBjb2xkLWNhY2hlIGNhc2VzIG9yIGluCisgIGVudmlyb25tZW50cyB3aXRoIHdlYWsgbWV0YWRhdGEgY2FjaGluZyAoZS5nLiBORlMpLgorCisqIFRoZSB1bmRlcmx5aW5nIGRpZmYgbWFjaGluZXJ5IHRvIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgaGFzIGJlZW4KKyAgb3B0aW1pemVkLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gZmFzdGVyICJnaXQgYmxhbWUiIHByb2Nlc3NpbmcuCisKKyogTW9zdCBvZiB0aGUgdGVzdCBzY3JpcHRzIChidXQgbm90IHRoZSBvbmVzIHRoYXQgdHJ5IHRvIHJ1biBzZXJ2ZXJzKQorICBjYW4gYmUgcnVuIGluIHBhcmFsbGVsLgorCisqIEJhc2ggY29tcGxldGlvbiBvZiByZWZuYW1lcyBpbiBhIHJlcG9zaXRvcnkgd2l0aCBtYXNzaXZlIG51bWJlciBvZgorICByZWZzIGhhcyBiZWVuIG9wdGltaXplZC4KKworKiBDeWd3aW4gcG9ydCB1c2VzIG5hdGl2ZSBzdGF0L2xzdGF0IGltcGxlbWVudGF0aW9ucyB3aGVuIGFwcGxpY2FibGUsCisgIHdoaWNoIGxlYWRzIHRvIGltcHJvdmVkIHBlcmZvcm1hbmNlLgorCisqICJnaXQgcHVzaCIgcGF5cyBhdHRlbnRpb24gdG8gYWx0ZXJuYXRlIHJlcG9zaXRvcmllcyB0byBhdm9pZCBzZW5kaW5nCisgIHVubmVjZXNzYXJ5IG9iamVjdHMuCisKKyogImdpdCBzdm4iIGNhbiByZWJ1aWxkIGFuIG91dC1vZi1kYXRlIHJldl9tYXAgZmlsZS4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqIFdoZW4geW91IG1pc3R5cGUgYSBjb21tYW5kIG5hbWUsIGdpdCBoZWxwZnVsbHkgc3VnZ2VzdHMgd2hhdCBpdCBndWVzc2VzCisgIHlvdSBtaWdodCBoYXZlIG1lYW50IHRvIHNheS4gIGhlbHAuYXV0b2NvcnJlY3QgY29uZmlndXJhdGlvbiBjYW4gYmUgc2V0CisgIHRvIGEgbm9uLXplcm8gdmFsdWUgdG8gYWNjZXB0IHRoZSBzdWdnZXN0aW9uIHdoZW4gZ2l0IGNhbiB1bmlxdWVseQorICBndWVzcy4KKworKiBUaGUgcGFja2ZpbGUgbWFjaGluZXJ5IGhvcGVmdWxseSBpcyBtb3JlIHJvYnVzdCB3aGVuIGRlYWxpbmcgd2l0aAorICBjb3JydXB0IHBhY2tzIGlmIHJlZHVuZGFudCBvYmplY3RzIGludm9sdmVkIGluIHRoZSBjb3JydXB0aW9uIGFyZQorICBhdmFpbGFibGUgZWxzZXdoZXJlLgorCisqICJnaXQgYWRkIC1OIHBhdGguLi4iIGFkZHMgdGhlIG5hbWVkIHBhdGhzIGFzIGFuIGVtcHR5IGJsb2IsIHNvIHRoYXQKKyAgc3Vic2VxdWVudCAiZ2l0IGRpZmYiIHdpbGwgc2hvdyBhIGRpZmYgYXMgaWYgdGhleSBhcmUgY3JlYXRpb24gZXZlbnRzLgorCisqICJnaXQgYWRkIiBnYWluZWQgYSBidWlsdC1pbiBzeW5vbnltIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gc2F5ICJzdGFnZQorICBjaGFuZ2VzIiBpbnN0ZWFkIG9mICJhZGQgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIgd2hpY2ggYW1vdW50cworICB0byB0aGUgc2FtZSB0aGluZy4KKworKiAiZ2l0IGFwcGx5IiBsZWFybmVkIC0taW5jbHVkZT1wYXRocyBvcHRpb24sIHNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nCisgIC0tZXhjbHVkZT1wYXRocyBvcHRpb24uCisKKyogImdpdCBiaXNlY3QiIGlzIGNhcmVmdWwgYWJvdXQgYSB1c2VyIG1pc3Rha2UgYW5kIHN1Z2dlc3RzIHRlc3Rpbmcgb2YKKyAgbWVyZ2UgYmFzZSBmaXJzdCB3aGVuIGdvb2QgaXMgbm90IGEgc3RyaWN0IGFuY2VzdG9yIG9mIGJhZC4KKworKiAiZ2l0IGJpc2VjdCBza2lwIiBjYW4gdGFrZSBhIHJhbmdlIG9mIGNvbW1pdHMuCisKKyogImdpdCBibGFtZSIgcmUtZW5jb2RlcyB0aGUgY29tbWl0IG1ldGFpbmZvIHRvIFVURi04IGZyb20gaTE4bi5jb21taXRFbmNvZGluZworICBieSBkZWZhdWx0LgorCisqICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIiBjYW4gY2hlY2sgYXR0cmlidXRlcyBmb3IgbXVsdGlwbGUgcGF0aHMuCisKKyogImdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi9oYWNrIiB1c2VkIHRvIGJlIGEgc3ludGF4IGVycm9yLiAgSXQgbm93CisgIERXSU1zIHRvIGNyZWF0ZSBhIGNvcnJlc3BvbmRpbmcgbG9jYWwgYnJhbmNoICJoYWNrIiwgaS5lLiBhY3RzIGFzIGlmIHlvdQorICBzYWlkICJnaXQgY2hlY2tvdXQgLS10cmFjayAtYiBoYWNrIG9yaWdpbi9oYWNrIi4KKworKiAiZ2l0IGNoZWNrb3V0IC0tb3Vycy8tLXRoZWlycyIgY2FuIGJlIHVzZWQgdG8gY2hlY2sgb3V0IG9uZSBzaWRlIG9mIGEKKyAgY29uZmxpY3RpbmcgbWVyZ2UgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uCisKKyogImdpdCBjaGVja291dCAtbSIgY2FuIGJlIHVzZWQgdG8gcmVjcmVhdGUgdGhlIGluaXRpYWwgY29uZmxpY3RlZCBzdGF0ZQorICBkdXJpbmcgY29uZmxpY3QgcmVzb2x1dGlvbi4KKworKiAiZ2l0IGNoZXJyeS1waWNrIiBjYW4gYWxzbyB1dGlsaXplIHJlcmVyZSBmb3IgY29uZmxpY3QgcmVzb2x1dGlvbi4KKworKiAiZ2l0IGNsb25lIiBsZWFybmVkIHRvIGJlIHZlcmJvc2Ugd2l0aCAtdgorCisqICJnaXQgY29tbWl0IC0tYXV0aG9yPSRuYW1lIiBjYW4gbG9vayB1cCBhdXRob3IgbmFtZSBmcm9tIGV4aXN0aW5nCisgIGNvbW1pdHMuCisKKyogb3V0cHV0IGZyb20gImdpdCBjb21taXQiIGhhcyBiZWVuIHJld29yZGVkIGluIGEgbW9yZSBjb25jaXNlIGFuZCB5ZXQKKyAgbW9yZSBpbmZvcm1hdGl2ZSB3YXkuCisKKyogImdpdCBjb3VudC1vYmplY3RzIiByZXBvcnRzIHRoZSBvbi1kaXNrIGZvb3RwcmludCBmb3IgcGFja2ZpbGVzIGFuZAorICB0aGVpciBjb3JyZXNwb25kaW5nIGlkeCBmaWxlcy4KKworKiAiZ2l0IGRhZW1vbiIgbGVhcm5lZCAtLW1heC1jb25uZWN0aW9ucz08Y291bnQ+IG9wdGlvbi4KKworKiAiZ2l0IGRhZW1vbiIgZXhwb3J0cyBSRU1PVEVfQUREUiB0byByZWNvcmQgY2xpZW50IGFkZHJlc3MsIHNvIHRoYXQKKyAgc3Bhd25lZCBwcm9ncmFtcyBjYW4gYWN0IGRpZmZlcmVudGx5IG9uIGl0LgorCisqICJnaXQgZGVzY3JpYmUgLS10YWdzIiBmYXZvdXJzIGNsb3NlciBsaWdodHdlaWdodCB0YWdzIHRoYW4gZmFydGhlcgorICBhbm5vdGF0ZWQgdGFncyBub3cuCisKKyogImdpdCBkaWZmIiBsZWFybmVkIHRvIG1pbWljIC0tc3VwcHJlc3MtYmxhbmstZW1wdHkgZnJvbSBHTlUgZGlmZiB2aWEgYQorICBjb25maWd1cmF0aW9uIG9wdGlvbi4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgdG8gcHV0IG1vcmUgc2Vuc2libGUgaHVuayBoZWFkZXJzIGZvciBQeXRob24sCisgIEhUTUwgYW5kIE9iakMgY29udGVudHMuCisKKyogImdpdCBkaWZmIiBsZWFybmVkIHRvIHZhcnkgdGhlIGEvIHZzIGIvIHByZWZpeCBkZXBlbmRpbmcgb24gd2hhdCBhcmUKKyAgYmVpbmcgY29tcGFyZWQsIGNvbnRyb2xsZWQgYnkgZGlmZi5tbmVtb25pY3ByZWZpeCBjb25maWd1cmF0aW9uLgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCAtLWRpcnN0YXQtYnktZmlsZSB0byBjb3VudCBjaGFuZ2VkIGZpbGVzLCBub3QgbnVtYmVyCisgIG9mIGxpbmVzLCB3aGVuIHN1bW1hcml6aW5nIHRoZSBnbG9iYWwgcGljdHVyZS4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgInRleHRjb252IiBmaWx0ZXJzIC0tLSBhIGJpbmFyeSBvciBoYXJkLXRvLXJlYWQKKyAgY29udGVudHMgY2FuIGJlIG11bmdlZCBpbnRvIGh1bWFuIHJlYWRhYmxlIGZvcm0gYW5kIHRoZSBkaWZmZXJlbmNlCisgIGJldHdlZW4gdGhlIHJlc3VsdHMgb2YgdGhlIGNvbnZlcnNpb24gY2FuIGJlIHZpZXdlZCAob2J2aW91c2x5IHRoaXMKKyAgY2Fubm90IHByb2R1Y2UgYSBwYXRjaCB0aGF0IGNhbiBiZSBhcHBsaWVkLCBzbyB0aGlzIGlzIGRpc2FibGVkIGluCisgIGZvcm1hdC1wYXRjaCBhbW9uZyBvdGhlciB0aGluZ3MpLgorCisqICItLWNhY2hlZCIgb3B0aW9uIHRvICJnaXQgZGlmZiBoYXMgYW4gZWFzaWVyIHRvIHJlbWVtYmVyIHN5bm9ueW0gIi0tc3RhZ2VkIiwKKyAgdG8gYXNrICJ3aGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGdpdmVuIGNvbW1pdCBhbmQgdGhlCisgIGNvbnRlbnRzIHN0YWdlZCBpbiB0aGUgaW5kZXg/IgorCisqICJnaXQgZm9yLWVhY2gtcmVmIiBsZWFybmVkICJyZWZuYW1lOnNob3J0IiB0b2tlbiB0aGF0IGdpdmVzIGFuCisgIHVuYW1iaWd1b3VzbHkgYWJicmV2aWF0ZWQgcmVmbmFtZS4KKworKiBBdXRvLW51bWJlcmluZyBvZiB0aGUgc3ViamVjdCBsaW5lcyBpcyB0aGUgZGVmYXVsdCBmb3IgImdpdAorICBmb3JtYXQtcGF0Y2giIG5vdy4KKworKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdG8gYWNjZXB0IC16IHNpbWlsYXIgdG8gR05VIGdyZXAuCisKKyogImdpdCBoZWxwIiBsZWFybmVkIHRvIHVzZSBHSVRfTUFOX1ZJRVdFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUKKyAgdXNpbmcgIm1hbiIgcHJvZ3JhbS4KKworKiAiZ2l0IGltYXAtc2VuZCIgY2FuIG9wdGlvbmFsbHkgdGFsayBTU0wuCisKKyogImdpdCBpbmRleC1wYWNrIiBpcyBtb3JlIGNhcmVmdWwgYWdhaW5zdCBkaXNrIGNvcnJ1cHRpb24gd2hpbGUKKyAgY29tcGxldGluZyBhIHRoaW4gcGFjay4KKworKiAiZ2l0IGxvZyAtLWNoZWNrIiBhbmQgImdpdCBsb2cgLS1leGl0LWNvZGUiIHBhc3NlcyB0aGVpciB1bmRlcmx5aW5nIGRpZmYKKyAgc3RhdHVzIHdpdGggdGhlaXIgZXhpdCBzdGF0dXMgY29kZS4KKworKiAiZ2l0IGxvZyIgbGVhcm5lZCAtLXNpbXBsaWZ5LW1lcmdlcywgYSBtaWxkZXIgdmFyaWFudCBvZiAtLWZ1bGwtaGlzdG9yeTsKKyAgImdpdGsgLS1zaW1wbGlmeS1tZXJnZXMiIGlzIGVhc2llciB0byB2aWV3IHRoYW4gd2l0aCAtLWZ1bGwtaGlzdG9yeS4KKworKiAiZ2l0IGxvZyIgbGVhcm5lZCAiLS1zb3VyY2UiIHRvIHNob3cgd2hhdCByZWYgZWFjaCBjb21taXQgd2FzIHJlYWNoZWQKKyAgZnJvbS4KKworKiAiZ2l0IGxvZyIgYWxzbyBsZWFybmVkICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iIHRvIHNob3cgdGhlCisgIGJpcmRzLWV5ZS12aWV3IG9mIHRoZSB0b3BvbG9neSBvZiB0aGUgaGlzdG9yeS4KKworKiAiZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6IiBsZWFybmVkICIlZCIgZm9ybWF0IGVsZW1lbnQgdGhhdCBpbnNlcnRzCisgIG5hbWVzIG9mIHRhZ3MgdGhhdCBwb2ludCBhdCB0aGUgY29tbWl0LgorCisqICJnaXQgbWVyZ2UgLS1zcXVhc2giIGFuZCAiZ2l0IG1lcmdlIC0tbm8tZmYiIGludG8gYW4gdW5ib3JuIGJyYW5jaCBhcmUKKyAgbm90aWNlZCBhcyB1c2VyIGVycm9ycy4KKworKiAiZ2l0IG1lcmdlIC1zICRzdHJhdGVneSIgY2FuIHVzZSBhIGN1c3RvbSBidWlsdCBzdHJhdGVneSBpZiB5b3UgaGF2ZSBhCisgIGNvbW1hbmQgImdpdC1tZXJnZS0kc3RyYXRlZ3kiIG9uIHlvdXIgJFBBVEguCisKKyogImdpdCBwdWxsIiAoYW5kICJnaXQgZmV0Y2giKSBjYW4gYmUgdG9sZCB0byBvcGVyYXRlICItdiJlcmJvc2VseSBvcgorICAiLXEidWlldGx5LgorCisqICJnaXQgcHVzaCIgY2FuIGJlIHRvbGQgdG8gcmVqZWN0IGRlbGV0aW9uIG9mIHJlZnMgd2l0aCByZWNlaXZlLmRlbnlEZWxldGVzCisgIGNvbmZpZ3VyYXRpb24uCisKKyogImdpdCByZWJhc2UiIGhvbm91cnMgcHJlLXJlYmFzZSBob29rOyB1c2UgLS1uby12ZXJpZnkgdG8gYnlwYXNzIGl0LgorCisqICJnaXQgcmViYXNlIC1wIiB1c2VzIGludGVyYWN0aXZlIHJlYmFzZSBtYWNoaW5lcnkgbm93IHRvIHByZXNlcnZlIHRoZSBtZXJnZXMuCisKKyogImdpdCByZWZsb2cgZXhwaXJlIGJyYW5jaCIgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgImdpdCByZWZsb2cgZXhwaXJlCisgIHJlZnMvaGVhZHMvYnJhbmNoIi4KKworKiAiZ2l0IHJlbW90ZSBzaG93ICRyZW1vdGUiIGxpc3RzIHJlbW90ZSBicmFuY2hlcyBvbmUtcGVyLWxpbmUgbm93LgorCisqICJnaXQgc2VuZC1lbWFpbCIgY2FuIGJlIGdpdmVuIHJldmlzaW9uIHJhbmdlIGluc3RlYWQgb2YgZmlsZXMgYW5kCisgIG1haWxkaXJzIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBhdXRvbWF0aWNhbGx5IHJ1bnMgZm9ybWF0LXBhdGNoIHRvCisgIGdlbmVyYXRlIHBhdGNoZXMgZm9yIHRoZSBnaXZlbiByZXZpc2lvbiByYW5nZS4KKworKiAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIiBzdWJjb21tYW5kIGFsbG93cyB5b3UgdG8gaXRlcmF0ZSBvdmVyIGNoZWNrZWQKKyAgb3V0IHN1Ym1vZHVsZXMuCisKKyogImdpdCBzdWJtb2R1bGUgc3luYyIgc3ViY29tbWFuZHMgYWxsb3dzIHlvdSB0byB1cGRhdGUgdGhlIG9yaWdpbiBVUkwKKyAgcmVjb3JkZWQgaW4gc3VibW9kdWxlIGRpcmVjdG9yaWVzIGZyb20gdGhlIHRvcGxldmVsIC5naXRtb2R1bGVzIGZpbGUuCisKKyogImdpdCBzdm4gYnJhbmNoIiBjYW4gY3JlYXRlIG5ldyBicmFuY2hlcyBvbiB0aGUgb3RoZXIgZW5kLgorCisqICJnaXR3ZWIiIGNhbiB1c2UgbW9yZSBzYW5lciBQQVRIX0lORk8gYmFzZWQgVVJMLgorCisoaW50ZXJuYWwpCisKKyogImdpdCBoYXNoLW9iamVjdCIgbGVhcm5lZCB0byBsaWUgYWJvdXQgdGhlIHBhdGggYmVpbmcgaGFzaGVkLCBzbyB0aGF0CisgIGNvcnJlY3QgZ2l0YXR0cmlidXRlcyBwcm9jZXNzaW5nIGNhbiBiZSBkb25lIHdoaWxlIGhhc2hpbmcgY29udGVudHMKKyAgc3RvcmVkIGluIGEgdGVtcG9yYXJ5IGZpbGUuCisKKyogdmFyaW91cyBjYWxsZXJzIG9mIGdpdC1tZXJnZS1yZWN1cnNpdmUgYXZvaWQgZm9ya2luZyBpdCBhcyBhbiBleHRlcm5hbAorICBwcm9jZXNzLgorCisqIEdpdCBjbGFzcyBkZWZpbmVkIGluICJHaXQucG0iIGNhbiBiZSBzdWJjbGFzc2VzIGEgYml0IG1vcmUgZWFzaWx5LgorCisqIFdlIHVzZWQgdG8gbGluayBHTlUgcmVnZXggbGlicmFyeSBhcyBhIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIHNvbWUKKyAgcGxhdGZvcm1zLCBidXQgaXQgdHVybnMgb3V0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gbW9zdCBvZiB0aGVtLgorCisqIFNvbWUgcGF0aCBoYW5kbGluZyByb3V0aW5lcyB1c2VkIGZpeGVkIG51bWJlciBvZiBidWZmZXJzIHVzZWQgYWx0ZXJuYXRlbHkKKyAgYnV0IGRlcGVuZGluZyBvbiB0aGUgY2FsbCBkZXB0aCwgdGhpcyBhcnJhbmdlbWVudCBsZWQgdG8gaGFyZCB0byB0cmFjaworICBidWdzLiAgVGhpcyBpc3N1ZSBpcyBiZWluZyBhZGRyZXNzZWQuCisKKworRml4ZXMgc2luY2UgdjEuNi4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjAuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyogUG9yY2VsYWlucyBpbXBsZW1lbnRlZCBhcyBzaGVsbCBzY3JpcHRzIHdlcmUgdXR0ZXJseSBjb25mdXNlZCB3aGVuIHlvdQorICBlbnRlcmVkIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGEgd29yayB0cmVlIGZyb20gc2lkZXdheXMsIGZvbGxvd2luZyBhCisgIHN5bWJvbGljIGxpbmsgKHRoaXMgbWF5IG5lZWQgdG8gYmUgYmFja3BvcnRlZCB0byBvbGRlciByZWxlYXNlcyBsYXRlcikuCisKKyogVHJhY2tpbmcgc3ltYm9saWMgbGlua3Mgd291bGQgd29yayBiZXR0ZXIgb24gZmlsZXN5c3RlbXMgd2hvc2UgbHN0YXQoKQorICByZXR1cm5zIGluY29ycmVjdCBzdF9zaXplIHZhbHVlIGZvciB0aGVtLgorCisqICJnaXQgYWRkIiBhbmQgImdpdCB1cGRhdGUtaW5kZXgiIGluY29ycmVjdGx5IGFsbG93ZWQgYWRkaW5nIFMvRiB3aGVuIFMKKyAgaXMgYSB0cmFja2VkIHN5bWxpbmsgdGhhdCBwb2ludHMgYXQgYSBkaXJlY3RvcnkgRCB0aGF0IGhhcyBhIHBhdGggRiBpbgorICBpdCAod2Ugc3RpbGwgbmVlZCB0byBmaXggYSBzaW1pbGFyIG5vbnNlbnNlIHdoZW4gUyBpcyBhIHN1Ym1vZHVsZSBhbmQgRgorICBpcyBhIHBhdGggaW4gaXQpLgorCisqICJnaXQgYW0iIGFmdGVyIHN0b3BwaW5nIGF0IGEgYnJva2VuIHBhdGNoIGxvc3QgLS13aGl0ZXNwYWNlLCAtQywgLXAgYW5kCisgIC0tM3dheSBvcHRpb25zIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSBpbml0aWFsbHkuCisKKyogImdpdCBkaWZmIC0tc3RkaW4iIHVzZWQgdG8gdGFrZSB0d28gdHJlZXMgb24gYSBsaW5lIGFuZCBjb21wYXJlZCB0aGVtLAorICBidXQgd2UgZHJvcHBlZCBzdXBwb3J0IGZvciBzdWNoIGEgdXNlIGNhc2UgbG9uZyB0aW1lIGFnby4gIFRoaXMgaGFzCisgIGJlZW4gcmVzdXJyZWN0ZWQuCisKKyogImdpdCBmaWx0ZXItYnJhbmNoIiBmYWlsZWQgdG8gcmV3cml0ZSBhIHRhZyBuYW1lIHdpdGggc2xhc2hlcyBpbiBpdC4KKworKiAiZ2l0IGh0dHAtcHVzaCIgZGlkIG5vdCB1bmRlcnN0YW5kIFVSSSBzY2hlbWUgb3RoZXIgdGhhbiBvcGFxdWVsb2NrdG9rZW4KKyAgd2hlbiBhY3F1aXJpbmcgYSBsb2NrIGZyb20gdGhlIHNlcnZlciAodGhpcyBtYXkgbmVlZCB0byBiZSBiYWNrcG9ydGVkIHRvCisgIG9sZGVyIHJlbGVhc2VzIGxhdGVyKS4KKworKiBBZnRlciAiZ2l0IHJlYmFzZSAtcCIgc3RvcHBlZCB3aXRoIGNvbmZsaWN0cyB3aGlsZSByZXBsYXlpbmcgYSBtZXJnZSwKKyAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBkaWQgbm90IHdvcmsgKG1heSBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgdG8gb2xkZXIKKyAgcmVsZWFzZXMpLgorCisqICJnaXQgcmV2ZXJ0IiByZWNvcmRzIHJlbGF0aXZlIHRvIHdoaWNoIHBhcmVudCBhIHJldmVydCB3YXMgbWFkZSB3aGVuCisgIHJldmVydGluZyBhIG1lcmdlLiAgVG9nZXRoZXIgd2l0aCBuZXcgZG9jdW1lbnRhdGlvbiB0aGF0IGV4cGxhaW5zIGlzc3VlcworICBhcm91bmQgcmV2ZXJ0aW5nIGEgbWVyZ2UgYW5kIG1lcmdpbmcgZnJvbSB0aGUgdXBkYXRlZCBicmFuY2ggbGF0ZXIsIHRoaXMKKyAgaG9wZWZ1bGx5IHdpbGwgcmVkdWNlIHVzZXIgY29uZnVzaW9uICh0aGlzIG1heSBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgdG8KKyAgb2xkZXIgcmVsZWFzZXMgbGF0ZXIpLgorCisqICJnaXQgcm0gLS1jYWNoZWQiIHVzZWQgdG8gYWxsb3cgYW4gZW1wdHkgYmxvYiB0aGF0IHdhcyBhZGRlZCBlYXJsaWVyIHRvCisgIGJlIHJlbW92ZWQgd2l0aG91dCAtLWZvcmNlLCBldmVuIHdoZW4gdGhlIGZpbGUgaW4gdGhlIHdvcmsgdHJlZSBoYXMKKyAgc2luY2UgYmVlbiBtb2RpZmllZC4KKworKiAiZ2l0IHB1c2ggLS10YWdzIC0tYWxsICR0aGVyZSIgZmFpbGVkIHdpdGggZ2VuZXJpYyB1c2FnZSBtZXNzYWdlIHdpdGhvdXQKKyAgdGVsbGluZyBzYXlpbmcgdGhlc2UgdHdvIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4KKworKiAiZ2l0IGxvZyAtLWF1dGhvci8tLWNvbW1pdHRlciIgbWF0Y2ggdXNlZCB0byBwb3RlbnRpYWxseSBtYXRjaCB0aGUKKyAgdGltZXN0YW1wIHBhcnQsIGV4cG9zaW5nIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIEFsc28gdGhlc2UgZGlkCisgIG5vdCB3b3JrIHdpdGggLS1maXhlZC1zdHJpbmdzIG1hdGNoIGF0IGFsbC4KKworKiAiZ2l0d2ViIiBkaWQgbm90IG1hcmsgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW1wb3J0ZWQgZnJvbSBleHRlcm5hbCBIVE1MIGZyYWdtZW50cworICBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmEzNjQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4xLnR4dApAQCAtMCwwICsxLDE5IEBACitHSVQgdjEuNi4yLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiAuZ2l0aWdub3JlIGxlYXJuZWQgdG8gaGFuZGxlIGJhY2tzbGFzaCBhcyBhIHF1b3RpbmcgbWVjaGFuaXNtIGZvcgorICBjb21tZW50IGludHJvZHVjdGlvbiBjaGFyYWN0ZXIgIiMiLgorCisqIHRpbWVzdGFtcCBvdXRwdXQgaW4gLS1kYXRlPXJlbGF0aXZlIG1vZGUgdXNlZCB0byBkaXNwbGF5IHRpbWVzdGFtcHMgdGhhdAorICBhcmUgbG9uZyB0aW1lIGFnbyBpbiB0aGUgZGVmYXVsdCBtb2RlOyBpdCBub3cgdXNlcyAiTiB5ZWFycyBNIG1vbnRocworICBhZ28iLCBhbmQgIk4geWVhcnMgYWdvIi4KKworKiBnaXQtYWRkIC1pLy1wIG5vdyB3b3JrcyB3aXRoIG5vbi1BU0NJSSBwYXRobmFtZXMuCisKKyogImdpdCBoYXNoLW9iamVjdCAtdyIgZGlkIG5vdCByZWFkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tIHRoZQorICBjb3JyZWN0IC5naXQgZGlyZWN0b3J5LgorCisqIGdpdC1zZW5kLWVtYWlsIGxlYXJuZWQgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aXBsZSBDYzogYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYTk5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMi50eHQKQEAgLTAsMCArMSw0NSBAQAorR0lUIHYxLjYuMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEEgbG9uZ3N0YW5kaW5nIGNvbmZ1c2luZyBkZXNjcmlwdGlvbiBvZiB3aGF0IC0tcGlja2F4ZSBvcHRpb24gb2YKKyAgZ2l0LWRpZmYgZG9lcyBoYXMgYmVlbiBjbGFyaWZpZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyogImdpdC1ibGFtZSAtUyIgZGlkIG5vdCBxdWl0ZSB3b3JrIG5lYXIgdGhlIGNvbW1pdHMgdGhhdCB3ZXJlIGdpdmVuCisgIG9uIHRoZSBjb21tYW5kIGxpbmUgY29ycmVjdGx5LgorCisqICJnaXQgZGlmZiAtLXBpY2theGUtcmVnZXhwIiBkaWQgbm90IGNvdW50IG92ZXJsYXBwaW5nIG1hdGNoZXMKKyAgY29ycmVjdGx5LgorCisqICJnaXQgZGlmZiIgZGlkIG5vdCBmZWVkIGZpbGVzIGluIHdvcmstdHJlZSByZXByZXNlbnRhdGlvbiB0byBleHRlcm5hbAorICBkaWZmIGFuZCB0ZXh0Y29udi4KKworKiAiZ2l0LWZldGNoIiBpbiBhIHJlcG9zaXRvcnkgdGhhdCB3YXMgbm90IGNsb25lZCBmcm9tIGFueXdoZXJlIHNhaWQKKyAgaXQgY2Fubm90IGZpbmQgJ29yaWdpbicsIHdoaWNoIHdhcyBoYXJkIHRvIHVuZGVyc3RhbmQgZm9yIG5ldyBwZW9wbGUuCisKKyogImdpdC1mb3JtYXQtcGF0Y2ggLS1udW1iZXJlZC1maWxlcyAtLXN0ZG91dCIgZGlkIG5vdCBoYXZlIHRvIGRpZSBvZgorICBpbmNvbXBhdGlibGUgb3B0aW9uczsgaXQgbm93IHNpbXBseSBpZ25vcmVzIC0tbnVtYmVyZWQtZmlsZXMgYXMgbm8gZmlsZXMKKyAgYXJlIHByb2R1Y2VkIGFueXdheS4KKworKiAiZ2l0LWxzLWZpbGVzIC0tZGVsZXRlZCIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCBHSVRfRElSJkdJVF9XT1JLX1RSRUUuCisKKyogImdpdC1yZWFkLXRyZWUgQSBCIEMuLi4iIHdpdGhvdXQgLW0gb3B0aW9uIGhhcyBiZWVuIGJyb2tlbiBmb3IgYSBsb25nCisgIHRpbWUuCisKKyogZ2l0LXNlbmQtZW1haWwgaWdub3JlZCAtLWluLXJlcGx5LXRvIHdoZW4gLS1uby10aHJlYWQgd2FzIGdpdmVuLgorCisqICdnaXQtc3VibW9kdWxlIGFkZCcgZGlkIG5vdCB0b2xlcmF0ZSBleHRyYSBzbGFzaGVzIGFuZCAuLyBpbiB0aGUgcGF0aCBpdAorICBhY2NlcHRlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmU7IGl0IG5vdyBpcyBtb3JlIGxlbmllbnQuCisKKyogZ2l0LXN2biBtaXNiZWhhdmVkIHdoZW4gdGhlIHByb2plY3QgY29udGFpbmVkIGEgcGF0aCB0aGF0IGJlZ2FuIHdpdGgKKyAgdHdvIGRhc2hlcy4KKworKiBpbXBvcnQtemlwcyBzY3JpcHQgKGluIGNvbnRyaWIpIGRpZCBub3QgY29tcHV0ZSB0aGUgY29tbW9uIGRpcmVjdG9yeQorICBwcmVmaXggY29ycmVjdGx5LgorCisqIG1pc2NvbXBpbGF0aW9uIG9mIG5lZ2F0ZWQgZW51bSBjb25zdGFudHMgYnkgb2xkIGdjYyAoMi45KSBhZmZlY3RlZCB0aGUKKyAgY29kZXBhdGhzIHRvIHNwYXduIHN1YnByb2Nlc3Nlcy4KKworTWFueSBzbWFsbCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkIGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDNjMWFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4zLnR4dApAQCAtMCwwICsxLDIyIEBACitHSVQgdjEuNi4yLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogU2V0dGluZyBhbiBvY3RhbCBtb2RlIHZhbHVlIHRvIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIHRvCisgIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeSB0byBncm91cCBtZW1iZXJzIGRpZCBub3Qgd29yayBhcworICBhZHZlcnRpc2VkLgorCisqIEEgZmFpcmx5IGxhcmdlIGFuZCB0cml2aWFsIG1lbW9yeSBsZWFrIHdoaWxlIHJldi1saXN0IHNob3dzIGxpc3Qgb2YKKyAgcmVhY2hhYmxlIG9iamVjdHMgaGFzIGJlZW4gaWRlbnRpZmllZCBhbmQgcGx1Z2dlZC4KKworKiAiZ2l0LWNvbW1pdCAtLWludGVyYWN0aXZlIiBkaWQgbm90IGFib3J0IHdoZW4gdW5kZXJseWluZyAiZ2l0LWFkZCAtaSIKKyAgc2lnbmFsZWQgYSBmYWlsdXJlLgorCisqIGdpdC1yZXBhY2sgKGludm9rZWQgZnJvbSBnaXQtZ2MpIGRpZCBub3Qgd29yayBhcyBuaWNlbHkgYXMgaXQgc2hvdWxkIGluCisgIGEgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3Mgb2JqZWN0cyBmcm9tIG5laWdoYm91cnMgdmlhIGFsdGVybmF0ZXMKKyAgbWVjaGFuaXNtIGVzcGVjaWFsbHkgd2hlbiBzb21lIHBhY2tzIGFyZSBtYXJrZWQgd2l0aCB0aGUgIi5rZWVwIiBmbGFnCisgIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIHJlcGFja2VkLgorCitNYW55IHNtYWxsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQgYXMgd2VsbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmYxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dJVCB2MS42LjIuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjIuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgY29uZmlndXJhdGlvbiBwYXJzZXIgaGFkIGEgYnVmZmVyIG92ZXJmbG93IHdoaWxlIHBhcnNpbmcgYW4gb3ZlcmxvbmcKKyAgdmFsdWUuCisKKyogcHJ1bmluZyByZWZsb2cgZW50cmllcyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBmcm9tIHRoZSB0aXAgb2YgdGhlIHJlZgorICBkdXJpbmcgImdpdCByZWZsb2cgcHJ1bmUiIChoZW5jZSAiZ2l0IGdjIikgd2FzIHZlcnkgaW5lZmZpY2llbnQuCisKKyogImdpdC1hZGQgLXAiIGxhY2tlZCBhIHdheSB0byBzYXkgInEidWl0IHRvIHJlZnVzZSBzdGFnaW5nIGFueSBodW5rcyBmb3IKKyAgdGhlIHJlbWFpbmluZyBwYXRocy4gIFlvdSBoYWQgdG8gc2F5ICJkIiBhbmQgdGhlbiBeQy4KKworKiAiZ2l0LWNoZWNrb3V0IDx0cmVlLWlzaD4gPHN1Ym1vZHVsZT4iIGRpZCBub3QgdXBkYXRlIHRoZSBpbmRleCBlbnRyeSBhdAorICB0aGUgbmFtZWQgcGF0aDsgaXQgbm93IGRvZXMuCisKKyogImdpdC1mYXN0LWV4cG9ydCIgY2hva2VkIHdoZW4gc2VlaW5nIGEgdGFnIHRoYXQgZG9lcyBub3QgcG9pbnQgYXQgY29tbWl0LgorCisqICJnaXQgaW5pdCIgc2VnZmF1bHRlZCB3aGVuIGdpdmVuIGFuIG92ZXJsb25nIHRlbXBsYXRlIGxvY2F0aW9uIHZpYQorICB0aGUgLS10ZW1wbGF0ZT0gb3B0aW9uLgorCisqICJnaXQtbHMtdHJlZSIgYW5kICJnaXQtZGlmZi10cmVlIiB1c2VkIGEgcGF0aHNwZWMgY29ycmVjdGx5IHdoZW4KKyAgZGVjaWRpbmcgdG8gZGVzY2VuZCBpbnRvIGEgc3ViZGlyZWN0b3J5IGJ1dCB0aGV5IGRpZCBub3QgbWF0Y2ggdGhlCisgIGluZGl2aWR1YWwgcGF0aHMgY29ycmVjdGx5LiAgVGhpcyBjYXVzZWQgcGF0aHNwZWNzICJhYmMvZCBhYiIgdG8gbWF0Y2gKKyAgImFiYy8wIiAoImFiYy9kIiBtYWRlIHRoZW0gZGVjaWRlIHRvIGRlc2NlbmQgaW50byB0aGUgZGlyZWN0b3J5ICJhYmMvIiwKKyAgYW5kIHRoZW4gImFiIiBpbmNvcnJlY3RseSBtYXRjaGVkICJhYmMvMCIgd2hlbiBpdCBzaG91bGRuJ3QpLgorCisqICJnaXQtbWVyZ2UtcmVjdXJzaXZlIiB3YXMgYnJva2VuIHdoZW4gYSBzdWJtb2R1bGUgZW50cnkgd2FzIGludm9sdmVkIGluCisgIGEgY3Jpc3MtY3Jvc3MgbWVyZ2Ugc2l0dWF0aW9uLgorCitNYW55IHNtYWxsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQgYXMgd2VsbC4KKworLS0tCitleGVjID4vdmFyL3RtcC8xCitlY2hvIE89JChnaXQgZGVzY3JpYmUgbWFpbnQpCitPPXYxLjYuMi4zLTM4LWczMThiODQ3CitnaXQgc2hvcnRsb2cgLS1uby1tZXJnZXMgJE8uLm1haW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjNmOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi41LnR4dApAQCAtMCwwICsxLDIxIEBACitHSVQgdjEuNi4yLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBhcHBseSIgbWlzaGFuZGxlZCBpZiB5b3UgZmVkIGEgZ2l0IGdlbmVyYXRlZCBwYXRjaCB0aGF0IHJlbmFtZXMKKyAgZmlsZSBBIHRvIEIgYW5kIGZpbGUgQiB0byBBIGF0IHRoZSBzYW1lIHRpbWUuCisKKyogImdpdCBkaWZmIC1jIC1wIiAoYW5kICJkaWZmIC0tY2MiKSBkaWQgbm90IGV4cGVjdCB0byBzZWUgc3VibW9kdWxlCisgIGRpZmZlcmVuY2VzIGFuZCBpbnN0ZWFkIHJlZnVzZWQgdG8gd29yay4KKworKiAiZ2l0IGdyZXAgLWUgJygnIiBzZWdmYXVsdGVkLCBpbnN0ZWFkIG9mIGRpYWdub3NpbmcgYSBtaXNtYXRjaGVkCisgIHBhcmVudGhlc2VzIGVycm9yLgorCisqICJnaXQgZmV0Y2giIGdlbmVyYXRlZCBwYWNrcyB3aXRoIG9mZnNldC1kZWx0YSBlbmNvZGluZyB3aGVuIGJvdGggZW5kcyBvZgorICB0aGUgY29ubmVjdGlvbiBhcmUgY2FwYWJsZSBvZiBwcm9kdWNpbmcgb25lOyB0aGlzIGNhbm5vdCBiZSByZWFkIGJ5CisgIGFuY2llbnQgZ2l0IGFuZCB0aGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXNhYmxlIHRoaXMgYnkgc2V0dGluZworICByZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IGNvbmZpZ3VyYXRpb24gdG8gZmFsc2UuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODBhZGZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi50eHQKQEAgLTAsMCArMSwxNjQgQEAKK0dJVCB2MS42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1dpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSwgImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMKK2N1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4gIFlvdSBjYW4gY2hvb3NlCit3aGF0IHNob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworVG8gZWFzZSB0aGUgdHJhbnNpdGlvbiBwbGFuLCB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2Ygc3VjaCBhCitwdXNoIHJ1bm5pbmcgdGhpcyByZWxlYXNlIHdpbGwgaXNzdWUgYSBiaWcgd2FybmluZyB3aGVuIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgorCisgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2YnB0bHN1eXYuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLworCitmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCit0cmFuc2l0aW9uIHBsYW4uCisKK0ZvciBhIHNpbWlsYXIgcmVhc29uLCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaAorJGtpbGxlZCBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgaWYgJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQKK2JyYW5jaCBwb2ludGVkIGF0IGJ5IGl0cyBIRUFELCBnZXRzIGEgbGFyZ2Ugd2FybmluZy4gIFlvdSBjYW4gY2hvb3NlIHdoYXQKK3Nob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCityZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworCitVcGRhdGVzIHNpbmNlIHYxLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyogZ2l0LXN2biB1cGRhdGVzLgorCisqIGdpdHdlYiB1cGRhdGVzLCBpbmNsdWRpbmcgYSBuZXcgcGF0Y2ggdmlldyBhbmQgUlNTL0F0b20gZmVlZAorICBpbXByb3ZlbWVudHMuCisKKyogKGNvbnRyaWIvZW1hY3MpIGdpdC5lbCBub3cgaGFzIGNvbW1hbmRzIGZvciBjaGVja2luZyBvdXQgYSBicmFuY2gsCisgIGNyZWF0aW5nIGEgYnJhbmNoLCBjaGVycnktcGlja2luZyBhbmQgcmV2ZXJ0aW5nIGNvbW1pdHM7IHZjLWdpdC5lbAorICBpcyBub3Qgc2hpcHBlZCB3aXRoIGdpdCBhbnltb3JlIChpdCBpcyBwYXJ0IG9mIG9mZmljaWFsIEVtYWNzKS4KKworKHBlcmZvcm1hbmNlKQorCisqIHBhY2stb2JqZWN0cyBhdXRvZGV0ZWN0cyB0aGUgbnVtYmVyIG9mIENQVXMgYXZhaWxhYmxlIGFuZCB1c2VzIHRocmVhZGVkCisgIHZlcnNpb24uCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworKiBhdXRvbWF0aWMgdHlwbyBjb3JyZWN0aW9uIHdvcmtzIG9uIGFsaWFzZXMgYXMgd2VsbAorCisqIEB7LTF9IGlzIGEgd2F5IHRvIHJlZmVyIHRvIHRoZSBsYXN0IGJyYW5jaCB5b3Ugd2VyZSBvbi4gIFRoaXMgaXMKKyAgYWNjZXB0ZWQgbm90IG9ubHkgd2hlcmUgYW4gb2JqZWN0IG5hbWUgaXMgZXhwZWN0ZWQsIGJ1dCBhbnl3aGVyZQorICBhIGJyYW5jaCBuYW1lIGlzIGV4cGVjdGVkIGFuZCBhY3RzIGFzIGlmIHlvdSB0eXBlZCB0aGUgYnJhbmNoIG5hbWUuCisgIEUuZy4gImdpdCBicmFuY2ggLS10cmFjayBteWJyYW5jaCBAey0xfSIsICJnaXQgbWVyZ2UgQHstMX0iLCBhbmQKKyAgImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgQHstMX0iIHdvdWxkIHdvcmsgYXMgZXhwZWN0ZWQuCisKKyogV2hlbiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgcG9pbnRzIGF0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCB0aGF0CisgIGhhcyBiZWVuIHBydW5lZCBhd2F5LCBtYW55IGdpdCBvcGVyYXRpb25zIGlzc3VlZCB3YXJuaW5nIHdoZW4gdGhleQorICBpbnRlcm5hbGx5IGVudW1lcmF0ZWQgdGhlIHJlZnMuICBXZSBub3cgd2FybiBvbmx5IHdoZW4geW91IHNheSAib3JpZ2luIgorICB0byByZWZlciB0byB0aGF0IHBydW5lZCBicmFuY2guCisKKyogVGhlIGxvY2F0aW9uIG9mIC5tYWlsbWFwIGZpbGUgY2FuIGJlIGNvbmZpZ3VyZWQsIGFuZCBpdHMgZmlsZSBmb3JtYXQgd2FzCisgIGVuaGFuY2VkIHRvIGFsbG93IG1hcHBpbmcgYW4gaW5jb3JyZWN0IGUtbWFpbCBmaWVsZCBhcyB3ZWxsLgorCisqICJnaXQgYWRkIC1wIiBsZWFybmVkICdnJ290byBhY3Rpb24gdG8ganVtcCBkaXJlY3RseSB0byBhIGh1bmsuCisKKyogImdpdCBhZGQgLXAiIGxlYXJuZWQgdG8gZmluZCBhIGh1bmsgd2l0aCBnaXZlbiB0ZXh0IHdpdGggJy8nLgorCisqICJnaXQgYWRkIC1wIiBvcHRpb25hbGx5IGNhbiBiZSB0b2xkIHRvIHdvcmsgd2l0aCBqdXN0IHRoZSBjb21tYW5kIGxldHRlcgorICB3aXRob3V0IEVudGVyLgorCisqIHdoZW4gImdpdCBhbSIgc3RvcHMgdXBvbiBhIHBhdGNoIHRoYXQgZG9lcyBub3QgYXBwbHksIGl0IHNob3dzIHRoZQorICB0aXRsZSBvZiB0aGUgb2ZmZW5kaW5nIHBhdGNoLgorCisqICJnaXQgYW0gLS1kaXJlY3Rvcnk9PGRpcj4iIGFuZCAiZ2l0IGFtIC0tcmVqZWN0IiBwYXNzZXMgdGhlc2Ugb3B0aW9ucworICB0byB1bmRlcmx5aW5nICJnaXQgYXBwbHkiLgorCisqICJnaXQgYW0iIGxlYXJuZWQgLS1pZ25vcmUtZGF0ZSBvcHRpb24uCisKKyogImdpdCBibGFtZSIgYWxpZ25zIGF1dGhvciBuYW1lcyBiZXR0ZXIgd2hlbiB0aGV5IGFyZSBzcGVsbGVkIGluCisgIG5vbiBVUy1BU0NJSSBlbmNvZGluZy4KKworKiAiZ2l0IGNsb25lIiBub3cgbWFrZXMgaXRzIGJlc3QgZWZmb3J0IHdoZW4gY2xvbmluZyBmcm9tIGFuIGVtcHR5CisgIHJlcG9zaXRvcnkgdG8gc2V0IHVwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRvIHJlZmVyIHRvIHRoZSByZW1vdGUKKyAgcmVwb3NpdG9yeS4KKworKiAiZ2l0IGNoZWNrb3V0IC0iIGlzIGEgc2hvcnRoYW5kIGZvciAiZ2l0IGNoZWNrb3V0IEB7LTF9Ii4KKworKiAiZ2l0IGNoZXJyeSIgZGVmYXVsdHMgdG8gd2hhdGV2ZXIgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHRyYWNraW5nIChpZgorICBleGlzdHMpIHdoZW4gdGhlIDx1cHN0cmVhbT4gYXJndW1lbnQgaXMgbm90IGdpdmVuLgorCisqICJnaXQgY3Zzc2VydmVyIiBjYW4gYmUgdG9sZCBub3QgdG8gYWRkIGV4dHJhICJ2aWEgZ2l0LUNWUyBlbXVsYXRvciIgdG8KKyAgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpdCBzZXJ2ZXMgdmlhIGdpdGN2cy5jb21taXRtc2dhbm5vdGF0aW9uCisgIGNvbmZpZ3VyYXRpb24uCisKKyogImdpdCBjdnNzZXJ2ZXIiIGxlYXJuZWQgdG8gaGFuZGxlICdub29wJyBjb21tYW5kIHNvbWUgQ1ZTIGNsaWVudHMgc2VlbQorICB0byBleHBlY3QgdG8gd29yay4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgYSBuZXcgb3B0aW9uIC0taW50ZXItaHVuay1jb250ZXh0IHRvIGNvYWxlc2NlIGNsb3NlCisgIGh1bmtzIHRvZ2V0aGVyIGFuZCBzaG93IGNvbnRleHQgYmV0d2VlbiB0aGVtLgorCisqIFRoZSBkZWZpbml0aW9uIG9mIHdoYXQgY29uc3RpdHV0ZXMgYSB3b3JkIGZvciAiZ2l0IGRpZmYgLS1jb2xvci13b3JkcyIKKyAgY2FuIGJlIGN1c3RvbWl6ZWQgdmlhIGdpdGF0dHJpYnV0ZXMsIGNvbW1hbmQgbGluZSBvciBhIGNvbmZpZ3VyYXRpb24uCisKKyogImdpdCBkaWZmIiBsZWFybmVkIC0tcGF0aWVuY2UgdG8gcnVuICJwYXRpZW5jZSBkaWZmIiBhbGdvcml0aG0uCisKKyogImdpdCBmaWx0ZXItYnJhbmNoIiBsZWFybmVkIC0tcHJ1bmUtZW1wdHkgb3B0aW9uIHRoYXQgZGlzY2FyZHMgY29tbWl0cworICB0aGF0IGRvIG5vdCBjaGFuZ2UgdGhlIGNvbnRlbnRzLgorCisqICJnaXQgZnNjayIgbm93IGNoZWNrcyBsb29zZSBvYmplY3RzIGluIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLCBpbnN0ZWFkCisgIG9mIG1pc3JlcG9ydGluZyB0aGVtIGFzIG1pc3NpbmcuCisKKyogImdpdCBnYyAtLXBydW5lIiB3YXMgcmVzdXJyZWN0ZWQgdG8gYWxsb3cgImdpdCBnYyAtLW5vLXBydW5lIiBhbmQKKyAgZ2l2aW5nIG5vbi1kZWZhdWx0IGV4cGlyYXRpb24gcGVyaW9kIGUuZy4gImdpdCBnYyAtLXBydW5lPW5vdyIuCisKKyogImdpdCBncmVwIC13IiBhbmQgImdpdCBncmVwIiBmb3IgZml4ZWQgc3RyaW5ncyBoYXZlIGJlZW4gb3B0aW1pemVkLgorCisqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIC15KC0tbm8tcHJvbXB0KSBvcHRpb24gdG8gZGlzYWJsZSBwcm9tcHRpbmcuCisKKyogImdpdCByZWJhc2UgLWkiIGNhbiB0cmFuc3BsYW50IGEgaGlzdG9yeSBkb3duIHRvIHJvb3QgdG8gZWxzZXdoZXJlCisgIHdpdGggLS1yb290IG9wdGlvbi4KKworKiAiZ2l0IHJlc2V0IC0tbWVyZ2UiIGlzIGEgbmV3IG1vZGUgdGhhdCB3b3JrcyBzaW1pbGFyIHRvIHRoZSB3YXkKKyAgImdpdCBjaGVja291dCIgc3dpdGNoZXMgYnJhbmNoZXMsIHRha2luZyB0aGUgbG9jYWwgY2hhbmdlcyB3aGlsZQorICBzd2l0Y2hpbmcgdG8gYW5vdGhlciBjb21taXQuCisKKyogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBsZWFybmVkIC0tbm8tZmV0Y2ggb3B0aW9uLgorCisqICJnaXQgdGFnIiBsZWFybmVkIC0tY29udGFpbnMgdGhhdCB3b3JrcyB0aGUgc2FtZSB3YXkgYXMgdGhlIHNhbWUgb3B0aW9uCisgIGZyb20gImdpdCBicmFuY2giLgorCisKK0ZpeGVzIHNpbmNlIHYxLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi4xLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitIZXJlIGFyZSBmaXhlcyB0aGF0IHRoaXMgcmVsZWFzZSBoYXMsIGJ1dCBoYXZlIG5vdCBiZWVuIGJhY2twb3J0ZWQgdG8KK3YxLjYuMS5YIHNlcmllcy4KKworKiAiZ2l0LWFkZCBzdWIvZmlsZSIgd2hlbiBzdWIgaXMgYSBzdWJtb2R1bGUgaW5jb3JyZWN0bHkgYWRkZWQgdGhlIHBhdGggdG8KKyAgdGhlIHN1cGVycHJvamVjdC4KKworKiAiZ2l0IGJ1bmRsZSIgZGlkIG5vdCBleGNsdWRlIGFubm90YXRlZCB0YWdzIGV2ZW4gd2hlbiBhIHJhbmdlIGdpdmVuCisgIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3YW50ZWQgdG8uCisKKyogImdpdCBmaWx0ZXItYnJhbmNoIiB1bm5lY2Vzc2FyaWx5IHJlZnVzZWQgdG8gd29yayB3aGVuIHlvdSBoYWQKKyAgY2hlY2tlZCBvdXQgYSBkaWZmZXJlbnQgY29tbWl0IGZyb20gd2hhdCBpcyByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0CisgIGluZGV4IGluIGEgc3VibW9kdWxlLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgaW5jb3JyZWN0bHkgdHJpZWQgdG8gdXBkYXRlIGEgbm9uZXhpc3RlbnQgd29yayB0cmVlCisgIGF0IHRoZSBlbmQgd2hlbiBpdCBpcyBydW4gaW4gYSBiYXJlIHJlcG9zaXRvcnkuCisKKyogImdpdCBnYyIgZGlkIG5vdCB3b3JrIGlmIHlvdXIgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZCB3aXRoIGFuIGFuY2llbnQgZ2l0CisgIGFuZCBuZXZlciBoYWQgYW55IHBhY2sgZmlsZXMgaW4gaXQgYmVmb3JlLgorCisqICJnaXQgbWVyZ2V0b29sIiB1c2VkIHRvIGlnbm9yZSBhdXRvY3JsZiBhbmQgb3RoZXIgYXR0cmlidXRlcworICBiYXNlZCBjb250ZW50IHJld3JpdGluZy4KKworKiBicmFuY2ggc3dpdGNoaW5nIGFuZCBtZXJnZXMgaGFkIGEgc2lsbHkgYnVnIHRoYXQgZGlkIG5vdCB2YWxpZGF0ZQorICB0aGUgY29ycmVjdCBkaXJlY3Rvcnkgd2hlbiBtYWtpbmcgc3VyZSBhbiBleGlzdGluZyBzdWJkaXJlY3RvcnkgaXMKKyAgY2xlYW4uCisKKyogImdpdCAtcCBjbWQiIHdoZW4gY21kIGlzIG5vdCBhIGJ1aWx0LWluIG9uZSBsZWZ0IHRoZSBkaXNwbGF5IGluIGZ1bm55IHN0YXRlCisgIHdoZW4ga2lsbGVkIGluIHRoZSBtaWRkbGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDAwYjcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4xLnR4dApAQCAtMCwwICsxLDEwIEBACitHSVQgdjEuNi4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNoZWNrb3V0IC1iIG5ldy1icmFuY2giIHdpdGggYSBzdGFnZWQgY2hhbmdlIGluIHRoZSBpbmRleAorICBpbmNvcnJlY3RseSBwcmltZWQgdGhlIGluLWluZGV4IGNhY2hlLXRyZWUsIHJlc3VsdGluZyBhIHdyb25nIHRyZWUKKyAgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gb3V0IG9mIHRoZSBpbmRleC4gIFRoaXMgaXMgYSBncmF2ZSByZWdyZXNzaW9uCisgIHNpbmNlIHRoZSBsYXN0IDEuNi4yLlggbWFpbnRlbmFuY2UgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZjNmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjIudHh0CkBAIC0wLDAgKzEsNjEgQEAKK0dJVCB2MS42LjMuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjMuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBmZXcgY29kZXBhdGhzIHBpY2tlZCB1cCB0aGUgZmlyc3QgZmV3IGJ5dGVzIGZyb20gYW4gc2hhMVtdIGJ5CisgICBjYXN0aW5nIHRoZSAoY2hhciAqKSBwb2ludGVyIHRvIChpbnQgKik7IEdDQyA0LjQgZGlkIG5vdCBsaWtlIHRoaXMsCisgICBhbmQgYWJvcnRlZCBjb21waWxhdGlvbi4KKworICogU29tZSB1bmxpbmsoMikgZmFpbHVyZXMgd2VudCB1bmRpYWdub3NlZC4KKworICogVGhlICJyZWN1cnNpdmUiIG1lcmdlIHN0cmF0ZWd5IG1pc2JlaGF2ZWQgd2hlbiBmYWNlZCByZW5hbWUvZGVsZXRlCisgICBjb25mbGljdHMgd2hpbGUgY29taW5nIHVwIHdpdGggYW4gaW50ZXJtZWRpYXRlIG1lcmdlIGJhc2UuCisKKyAqIFRoZSBsb3ctbGV2ZWwgbWVyZ2UgYWxnb3JpdGhtIGRpZCBub3QgaGFuZGxlIGEgZGVnZW5lcmF0ZSBjYXNlIG9mCisgICBtZXJnaW5nIGEgZmlsZSB3aXRoIGl0c2VsZiB1c2luZyBpdHNlbGYgYXMgdGhlIGNvbW1vbiBhbmNlc3RvcgorICAgZ3JhY2VmdWxseS4gIEl0IHNob3VsZCBwcm9kdWNlIHRoZSBmaWxlIGl0c2VsZiwgYnV0IGluc3RlYWQKKyAgIHByb2R1Y2VkIGFuIGVtcHR5IHJlc3VsdC4KKworICogR0lUX1RSQUNFIG1lY2hhbmlzbSBzZWdmYXVsdGVkIHdoZW4gdHJhY2luZyBhIHNoZWxsLXF1b3RlZCBhbGlhc2VzLgorCisgKiBPcGVuQlNEIGFsc28gdXNlcyBzdF9jdGltc3BlYyBpbiAic3RydWN0IHN0YXQiLCBpbnN0ZWFkIG9mICJzdF9jdGltIi4KKworICogV2l0aCBOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTLCAibWFrZSBpbnN0YWxsIiBjYW4gYmUgdG9sZCBub3QgdG8KKyAgIGNyZWF0ZSBoYXJkbGlua3MgYmV0d2VlbiAkKGdpdGV4ZWNkaXIpL2dpdC0kYnVpbHRpbl9jb21tYW5kcyBhbmQKKyAgICQoYmluZGlyKS9naXQuCisKKyAqIGNvbW1hbmQgY29tcGxldGlvbiBjb2RlIGluIGJhc2ggZGlkIG5vdCByZWxpYWJseSBkZXRlY3QgdGhhdCB3ZSBhcmUKKyAgIGluIGEgYmFyZSByZXBvc2l0b3J5LgorCisgKiAiZ2l0IGFkZCAuIiBpbiBhbiBlbXB0eSBkaXJlY3RvcnkgY29tcGxhaW5lZCB0aGF0IHBhdGhzcGVjICIuIiBkaWQgbm90CisgICBtYXRjaCBhbnl0aGluZywgd2hpY2ggbWF5IGJlIHRlY2huaWNhbGx5IGNvcnJlY3QsIGJ1dCBub3QgdXNlZnVsLiAgV2UKKyAgIHNpbGVudGx5IG1ha2UgaXQgYSBuby1vcCBub3cuCisKKyAqICJnaXQgYWRkIC1wIiAoYW5kICJwYXRjaCIgYWN0aW9uIGluICJnaXQgYWRkIC1pIikgd2FzIGJyb2tlbiB3aGVuCisgICB0aGUgZmlyc3QgaHVuayB0aGF0IGFkZHMgYSBsaW5lIGF0IHRoZSB0b3Agd2FzIHNwbGl0IGludG8gdHdvIGFuZAorICAgYm90aCBoYWx2ZXMgYXJlIG1hcmtlZCB0byBiZSB1c2VkLgorCisgKiAiZ2l0IGJsYW1lIHBhdGgiIG1pc2JlaGF2ZWQgYXQgdGhlIGNvbW1pdCB3aGVyZSBwYXRoIGJlY2FtZSBmaWxlCisgICBmcm9tIGEgZGlyZWN0b3J5IHdpdGggc29tZSBmaWxlcyBpbiBpdC4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGhhZCBhIHNlZ2ZhdWx0aW5nIGJ1ZyB3aGVuIGRlYWxpbmcgd2l0aCBhIHRhZyBvYmplY3QKKyAgIGNyZWF0ZWQgYnkgYW4gYW5jaWVudCBnaXQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC1rIiBzdGlsbCBhZGRlZCBwYXRjaCBudW1iZXJzIGlmIGZvcm1hdC5udW1iZXJlZAorICAgY29uZmlndXJhdGlvbiB3YXMgc2V0LgorCisgKiAiZ2l0IGdyZXAgLS1jb2xvciAnJyIgZGlkIG5vdCB0ZXJtaW5hdGUuICBUaGUgY29tbWFuZCBhbHNvIGhhZAorICAgc3VidGxlIGJ1Z3Mgd2l0aCBpdHMgLXcgb3B0aW9uLgorCisgKiBodHRwLXB1c2ggaGFkIGEgc21hbGwgdXNlLWFmdGVyLWZyZWUgYnVnLgorCisgKiAiZ2l0IHB1c2giIHdhcyBjb252ZXJ0aW5nIE9GU19ERUxUQSBwYWNrIHJlcHJlc2VudGF0aW9uIGludG8gbGVzcworICAgZWZmaWNpZW50IFJFRl9ERUxUQSByZXByZXNlbnRhdGlvbiB1bmNvbmRpdGlvbmFsbHkgdXBvbiB0cmFuc2ZlciwKKyAgIG1ha2luZyB0aGUgdHJhbnNmZXJyZWQgZGF0YSB1bm5lY2Vzc2FyaWx5IGxhcmdlci4KKworICogImdpdCByZW1vdGUgc2hvdyBvcmlnaW4iIHNlZ2ZhdWx0ZWQgd2hlbiBvcmlnaW4gd2FzIHN0aWxsIGVtcHR5LgorCitNYW55IG90aGVyIGdlbmVyYWwgdXNhYmlsaXR5IHVwZGF0ZXMgYXJvdW5kIGhlbHAgdGV4dCwgZGlhZ25vc3RpYyBtZXNzYWdlcworYW5kIGRvY3VtZW50YXRpb24gYXJlIGluY2x1ZGVkIGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzI4Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4zLnR4dApAQCAtMCwwICsxLDM4IEBACitHSVQgdjEuNi4zLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4zLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYXJjaGl2ZSIgcnVubmluZyBvbiBDeWd3aW4gY2FuIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLgorCisgKiAiZ2l0IGRhZW1vbiIgZGlkIG5vdCBjb3JyZWN0bHkgcGFyc2UgdGhlIGluaXRpYWwgbGluZSB0aGF0IGNhcnJpZXMKKyAgIHZpcnR1YWwgaG9zdCByZXF1ZXN0IGluZm9ybWF0aW9uLgorCisgKiAiZ2l0IGRpZmYgLS10ZXh0Y29udiIgbGVha2VkIG1lbW9yeSBiYWRseSB3aGVuIHRoZSB0ZXh0Y29udiBmaWx0ZXIKKyAgIGVycm9yZWQgb3V0LgorCisgKiBUaGUgYnVpbHQtaW4gcmVndWxhciBleHByZXNzaW9ucyB0byBwaWNrIGZ1bmN0aW9uIG5hbWVzIHRvIHB1dCBvbgorICAgaHVuayBoZWFkZXIgbGluZXMgZm9yIGphdmEgYW5kIG9iamMgd2VyZSB2ZXJ5IGluZWZmaWNpZW50bHkgd3JpdHRlbi4KKworICogaW4gY2VydGFpbiBlcnJvciBzaXR1YXRpb25zIGdpdC1mZXRjaCAoYW5kIGdpdC1jbG9uZSkgb24gV2luZG93cyBkaWRuJ3QKKyAgIGRldGVjdCBjb25uZWN0aW9uIGFib3J0IGFuZCBlbmRlZCB1cCB3YWl0aW5nIGluZGVmaW5pdGVseS4KKworICogaW1wb3J0LXRhcnMgc2NyaXB0IChpbiBjb250cmliKSBkaWQgbm90IGltcG9ydCBzeW1ib2xpYyBsaW5rcyBjb3JyZWN0bHkuCisKKyAqIGh0dHAuYyB1c2VkIENVUkxPUFRfU1NMS0VZIGV2ZW4gb24gbGliY1VSTCB2ZXJzaW9uIDcuOS4yLCBldmVuIHRob3VnaAorICAgaXQgd2FzIG9ubHkgYXZhaWxhYmxlIHN0YXJ0aW5nIDcuOS4zLgorCisgKiBsb3ctbGV2ZWwgZmlsZWxldmVsIG1lcmdlIGRyaXZlciB1c2VkIHJldHVybiB2YWx1ZSBmcm9tIHN0cmR1cCgpCisgICB3aXRob3V0IGNoZWNraW5nIGlmIHdlIHJhbiBvdXQgb2YgbWVtb3J5LgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbGVmdCBzdHJheSBjbG9zaW5nIHBhcmVudGhlc2lzIGluIGl0cyByZWZsb2cgbWVzc2FnZS4KKworICogImdpdCByZW1vdGUgc2hvdyIgZGlkIG5vdCBzaG93IGFsbCB0aGUgVVJMcyBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWVkCisgICByZW1vdGUsIGV2ZW4gdGhvdWdoICJnaXQgcmVtb3RlIC12IiBkaWQuICBNYWRlIHRoZW0gY29uc2lzdGVudCBieQorICAgbWFraW5nIHRoZSBmb3JtZXIgc2hvdyBhbGwgVVJMcy4KKworICogIndoaXRlc3BhY2UiIGF0dHJpYnV0ZSB0aGF0IGlzIHNldCB3YXMgbWVhbnQgdG8gZGV0ZWN0IGFsbCBlcnJvcnMga25vd24KKyAgIHRvIGdpdCwgYnV0IGl0IHRvbGQgZ2l0IHRvIGlnbm9yZSB0cmFpbGluZyBjYXJyaWFnZS1yZXR1cm5zLgorCitJbmNsdWRlcyBvdGhlciBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkNDYxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuNC50eHQKQEAgLTAsMCArMSwzNiBAQAorR0lUIHYxLjYuMy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMy4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFkZCAtLW5vLWlnbm9yZS1lcnJvcnMiIGRpZCBub3Qgb3ZlcnJpZGUgY29uZmlndXJlZAorICAgYWRkLmlnbm9yZS1lcnJvcnMgY29uZmlndXJhdGlvbi4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiBkaWQgbm90IGZpeCB0cmFpbGluZyB3aGl0ZXNwYWNlIG9uIGFuCisgICBpbmNvbXBsZXRlIGxpbmUuCisKKyAqICJnaXQgYnJhbmNoIiBvcGVuZWQgdG9vIG1hbnkgY29tbWl0IG9iamVjdHMgdW5uZWNlc3NhcmlseS4KKworICogImdpdCBjaGVja291dCAtZiAkY29tbWl0IiB3aXRoIGEgcGF0aCB0aGF0IGlzIGEgZmlsZSAob3IgYSBzeW1saW5rKSBpbgorICAgdGhlIHdvcmsgdHJlZSB0byBhIGNvbW1pdCB0aGF0IGhhcyBhIGRpcmVjdG9yeSBhdCB0aGUgcGF0aCBpc3N1ZWQgYW4KKyAgIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2UuCisKKyAqICJnaXQgZGlmZiAtYy8tLWNjIiB3YXMgdmVyeSBpbmVmZmljaWVudCBpbiBjb2FsZXNjaW5nIHRoZSByZW1vdmVkIGxpbmVzCisgICBzaGFyZWQgYmV0d2VlbiBwYXJlbnRzLgorCisgKiAiZ2l0IGRpZmYgLWMvLS1jYyIgc2hvd2VkIHJlbW92ZWQgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpbGUKKyAgIGluY29ycmVjdGx5LgorCisgKiAiZ2l0IHJlbW90ZSBzaG93IG5pY2tuYW1lIiBkaWQgbm90IGhvbm9yIGNvbmZpZ3VyZWQKKyAgIHJlbW90ZS5uaWNrbmFtZS51cGxvYWRwYWNrIHdoZW4gaW5zcGVjdGluZyB0aGUgYnJhbmNoZXMgYXQgdGhlIHJlbW90ZS4KKworICogImdpdCByZXF1ZXN0LXB1bGwiIHdoZW4gdGFsa2luZyB0byB0aGUgdGVybWluYWwgZm9yIGEgcHJldmlldworICAgc2hvd2VkIHNvbWUgb2YgdGhlIG91dHB1dCBpbiB0aGUgcGFnZXIuCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIHN0YXJ0IG5pY2tuYW1lIFtlbmRdIiBkaWQgbm90IGhvbm9yIGNvbmZpZ3VyZWQKKyAgIHJlbW90ZS5uaWNrbmFtZS51cGxvYWRwYWNrIHdoZW4gaXQgcmFuIGdpdC1scy1yZW1vdGUgYWdhaW5zdCB0aGUgcmVtb3RlCisgICByZXBvc2l0b3J5IHRvIGxlYXJuIHRoZSBjdXJyZW50IHRpcCBvZiBicmFuY2hlcy4KKworSW5jbHVkZXMgb3RoZXIgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBtaW5vciBmaXhlcy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmNmZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQKQEAgLTAsMCArMSwxODIgQEAKK0dJVCB2MS42LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1dpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSwgImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMKK2N1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4gIFlvdSBjYW4gY2hvb3NlCit3aGF0IHNob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworVG8gZWFzZSB0aGUgdHJhbnNpdGlvbiBwbGFuLCB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2Ygc3VjaCBhCitwdXNoIHJ1bm5pbmcgdGhpcyByZWxlYXNlIHdpbGwgaXNzdWUgYSBiaWcgd2FybmluZyB3aGVuIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgorCisgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2YnB0bHN1eXYuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLworCitmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCit0cmFuc2l0aW9uIHBsYW4uCisKK0ZvciBhIHNpbWlsYXIgcmVhc29uLCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaAorJGtpbGxlZCBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgaWYgJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQKK2JyYW5jaCBwb2ludGVkIGF0IGJ5IGl0cyBIRUFELCBnZXRzIGEgbGFyZ2Ugd2FybmluZy4gIFlvdSBjYW4gY2hvb3NlIHdoYXQKK3Nob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCityZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworV2hlbiB0aGUgdXNlciBkb2VzIG5vdCB0ZWxsICJnaXQgcHVzaCIgd2hhdCB0byBwdXNoLCBpdCBoYXMgYWx3YXlzCitwdXNoZWQgbWF0Y2hpbmcgcmVmcy4gIEZvciBzb21lIHBlb3BsZSBpdCBpcyB1bmV4cGVjdGVkLCBhbmQgYSBuZXcKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgcHVzaC5kZWZhdWx0IGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYWxsb3cKK2NoYW5naW5nIGEgZGlmZmVyZW50IGRlZmF1bHQgYmVoYXZpb3VyLiAgVG8gYWR2ZXJ0aXNlIHRoZSBuZXcgZmVhdHVyZSwKK2EgYmlnIHdhcm5pbmcgaXMgaXNzdWVkIGlmIHRoaXMgaXMgbm90IGNvbmZpZ3VyZWQgYW5kIGEgZ2l0IHB1c2ggd2l0aG91dAorYXJndW1lbnRzIGlzIGF0dGVtcHRlZC4KKworCitVcGRhdGVzIHNpbmNlIHYxLjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyogdmFyaW91cyBnaXQtc3ZuIHVwZGF0ZXMuCisKKyogZ2l0LWd1aSB1cGRhdGVzLCBpbmNsdWRpbmcgYW4gdXBkYXRlIHRvIFJ1c3NpYW4gdHJhbnNsYXRpb24sIGFuZCBhCisgIGZpeCB0byBhbiBpbmZpbml0ZSBsb29wIHdoZW4gc2hvd2luZyBhbiBlbXB0eSBkaWZmLgorCisqIGdpdGsgdXBkYXRlcywgaW5jbHVkaW5nIGFuIHVwZGF0ZSB0byBSdXNzaWFuIHRyYW5zbGF0aW9uIGFuZCBpbXByb3ZlZCBXaW5kb3dzCisgIHN1cHBvcnQuCisKKyhwZXJmb3JtYW5jZSkKKworKiBtYW55IHVzZXMgb2YgbHN0YXQoMikgaW4gdGhlIGNvZGVwYXRoIGZvciAiZ2l0IGNoZWNrb3V0IiBoYXZlIGJlZW4KKyAgb3B0aW1pemVkIG91dC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqIEJvb2xlYW4gY29uZmlndXJhdGlvbiB2YXJpYWJsZSB5ZXMvbm8gY2FuIGJlIHdyaXR0ZW4gYXMgb24vb2ZmLgorCisqIHJzeW5jOi9wYXRoL3RvL3JlcG8gY2FuIGJlIHVzZWQgdG8gcnVuIGdpdCBvdmVyIHJzeW5jIGZvciBsb2NhbAorICByZXBvc2l0b3JpZXMuICBJdCBtYXkgbm90IGJlIHVzZWZ1bCBpbiBwcmFjdGljZTsgbWVhbnQgcHJpbWFyaWx5IGZvcgorICB0ZXN0aW5nLgorCisqIGh0dHAgdHJhbnNwb3J0IGxlYXJuZWQgdG8gcHJvbXB0IGFuZCB1c2UgcGFzc3dvcmQgd2hlbiBmZXRjaGluZyBmcm9tIG9yCisgIHB1c2hpbmcgdG8gaHR0cDovL3VzZXJAaG9zdC54ei8gVVJMLgorCisqIChtc3lzZ2l0KSBwcm9ncmVzcyBvdXRwdXQgdGhhdCBpcyBzZW50IG92ZXIgdGhlIHNpZGViYW5kIHByb3RvY29sIGNhbgorICBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkgaW4gV2luZG93cyBjb25zb2xlLgorCisqICItLXByZXR0eT08c3R5bGU+IiBvcHRpb24gdG8gdGhlIGxvZyBmYW1pbHkgb2YgY29tbWFuZHMgY2FuIG5vdyBiZQorICBzcGVsbGVkIGFzICItLWZvcm1hdD08c3R5bGU+Ii4gIEluIGFkZGl0aW9uLCAtLWZvcm1hdD0lZm9ybWF0c3RyaW5nCisgIGlzIGEgc2hvcnQtaGFuZCBmb3IgLS1wcmV0dHk9dGZvcm1hdDolZm9ybWF0c3RyaW5nLgorCisqICItLW9uZWxpbmUiIGlzIGEgc3lub255bSBmb3IgIi0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0Ii4KKworKiAiLS1ncmFwaCIgdG8gdGhlICJnaXQgbG9nIiBmYW1pbHkgY2FuIGRyYXcgdGhlIGNvbW1pdCBhbmNlc3RyeSBncmFwaAorICBpbiBjb2xvcnMuCisKKyogSWYgeW91IHJlYWxpemUgdGhhdCB5b3UgYm90Y2hlZCB0aGUgcGF0Y2ggd2hlbiB5b3UgYXJlIGVkaXRpbmcgaHVua3MKKyAgd2l0aCB0aGUgJ2VkaXQnIGFjdGlvbiBpbiBnaXQtYWRkIC1pLy1wLCB5b3UgY2FuIGFib3J0IHRoZSBlZGl0b3IgdG8KKyAgdGVsbCBnaXQgbm90IHRvIGFwcGx5IGl0LgorCisqIEB7LTF9IGlzIGEgbmV3IHdheSB0byByZWZlciB0byB0aGUgbGFzdCBicmFuY2ggeW91IHdlcmUgb24gaW50cm9kdWNlZCBpbgorICAxLjYuMiwgYnV0IHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIGRpZCBub3QgdGVhY2ggdGhpcyB0byBhIGZldworICBjb21tYW5kcy4gIE5vdyB0aGUgc3ludGF4IHdvcmtzIHdpdGggImJyYW5jaCAtbSBAey0xfSBuZXduYW1lIi4KKworKiBnaXQtYXJjaGl2ZSBsZWFybmVkIC0tb3V0cHV0PTxmaWxlPiBvcHRpb24uCisKKyogZ2l0LWFyY2hpdmUgdGFrZXMgYXR0cmlidXRlcyBmcm9tIHRoZSB0cmVlIGJlaW5nIGFyY2hpdmVkOyBzdHJpY3RseQorICBzcGVha2luZywgdGhpcyBpcyBhbiBpbmNvbXBhdGlibGUgYmVoYXZpb3VyIGNoYW5nZSwgYnV0IGlzIGEgZ29vZCBvbmUuCisgIFVzZSAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgb3B0aW9uIHRvIGFsbG93IGl0IHRvIHJlYWQgYXR0cmlidXRlcyBmcm9tCisgIHRoZSB3b3JrIHRyZWUgYXMgYmVmb3JlIChkZXByZWNhdGVkIGdpdC10YXIgdHJlZSBjb21tYW5kIGFsd2F5cyByZWFkcworICBhdHRyaWJ1dGVzIGZyb20gdGhlIHdvcmsgdHJlZSkuCisKKyogZ2l0LWJpc2VjdCBzaG93cyBub3QganVzdCB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBjb21taXRzIHdob3NlIGdvb2RuZXNzCisgIGlzIHVua25vd24sIGJ1dCBhbHNvIHNob3dzIHRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIHJlbWFpbmluZyByb3VuZHMuCisKKyogWW91IGNhbiBnaXZlIC0tZGF0ZT08Zm9ybWF0PiBvcHRpb24gdG8gZ2l0LWJsYW1lLgorCisqICJnaXQtYnJhbmNoIC1yIiBzaG93cyBIRUFEIHN5bXJlZiB0aGF0IHBvaW50cyBhdCBhIHJlbW90ZSBicmFuY2ggaW4KKyAgaW50ZXJlc3Qgb2YgZWFjaCB0cmFja2VkIHJlbW90ZSByZXBvc2l0b3J5LgorCisqICJnaXQtYnJhbmNoIC12IC12IiBpcyBhIG5ldyB3YXkgdG8gZ2V0IGxpc3Qgb2YgbmFtZXMgZm9yIGJyYW5jaGVzIGFuZCB0aGUKKyAgInVwc3RyZWFtIiBicmFuY2ggZm9yIHRoZW0uCisKKyogZ2l0LWNvbmZpZyBsZWFybmVkIC1lIG9wdGlvbiB0byBvcGVuIGFuIGVkaXRvciB0byBlZGl0IHRoZSBjb25maWcgZmlsZQorICBkaXJlY3RseS4KKworKiBnaXQtY2xvbmUgcnVucyBwb3N0LWNoZWNrb3V0IGhvb2sgd2hlbiBydW4gd2l0aG91dCAtLW5vLWNoZWNrb3V0LgorCisqIGdpdC1kaWZmdG9vbCBpcyBub3cgcGFydCBvZiB0aGUgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgY29tbWFuZCwgcHJpbWFyaWx5CisgIG1haW50YWluZWQgYnkgRGF2aWQgQWd1aWxhci4KKworKiBnaXQtZm9yLWVhY2gtcmVmIGxlYXJuZWQgYSBuZXcgInVwc3RyZWFtIiB0b2tlbi4KKworKiBnaXQtZm9ybWF0LXBhdGNoIGNhbiBiZSB0b2xkIHRvIHVzZSBhdHRhY2htZW50IHdpdGggYSBuZXcgY29uZmlndXJhdGlvbiwKKyAgZm9ybWF0LmF0dGFjaC4KKworKiBnaXQtZm9ybWF0LXBhdGNoIGNhbiBiZSB0b2xkIHRvIHByb2R1Y2UgZGVlcCBvciBzaGFsbG93IG1lc3NhZ2UgdGhyZWFkcy4KKworKiBnaXQtZm9ybWF0LXBhdGNoIGNhbiBiZSB0b2xkIHRvIGFsd2F5cyBhZGQgc2lnbi1vZmYgd2l0aCBhIGNvbmZpZ3VyYXRpb24KKyAgdmFyaWFibGUuCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBsZWFybmVkIGZvcm1hdC5oZWFkZXJzIGNvbmZpZ3VyYXRpb24gdG8gYWRkIGV4dHJhCisgIGhlYWRlciBmaWVsZHMgdG8gdGhlIG91dHB1dC4gIFRoaXMgYmVoYXZpb3VyIGlzIHNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nCisgIC0tYWRkLWhlYWRlcj08aGVhZGVyPiBvcHRpb24gb2YgdGhlIGNvbW1hbmQuCisKKyogZ2l0LWZvcm1hdC1wYXRjaCBnaXZlcyBodW1hbiByZWFkYWJsZSBuYW1lcyB0byB0aGUgYXR0YWNoZWQgZmlsZXMsIHdoZW4KKyAgdG9sZCB0byBzZW5kIHBhdGNoZXMgYXMgYXR0YWNobWVudHMuCisKKyogZ2l0LWdyZXAgbGVhcm5lZCB0byBoaWdobGlnaHQgdGhlIGZvdW5kIHN1YnN0cmluZ3MgaW4gY29sb3IuCisKKyogZ2l0LWltYXAtc2VuZCBsZWFybmVkIHRvIHdvcmsgYXJvdW5kIFRodW5kZXJiaXJkJ3MgaW5hYmlsaXR5IHRvIGVhc2lseQorICBkaXNhYmxlIGZvcm1hdD1mbG93ZWQgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLCBpbWFwLnByZWZvcm1hdHRlZEhUTUwuCisKKyogZ2l0LXJlYmFzZSBjYW4gYmUgdG9sZCB0byByZWJhc2UgdGhlIHNlcmllcyBldmVuIGlmIHlvdXIgYnJhbmNoIGlzIGEKKyAgZGVzY2VuZGFudCBvZiB0aGUgY29tbWl0IHlvdSBhcmUgcmViYXNpbmcgb250byB3aXRoIC0tZm9yY2UtcmViYXNlCisgIG9wdGlvbi4KKworKiBnaXQtcmViYXNlIGNhbiBiZSB0b2xkIHRvIHJlcG9ydCBkaWZmc3RhdCB3aXRoIHRoZSAtLXN0YXQgb3B0aW9uLgorCisqIE91dHB1dCBmcm9tIGdpdC1yZW1vdGUgY29tbWFuZCBoYXMgYmVlbiB2YXN0bHkgaW1wcm92ZWQuCisKKyogImdpdCByZW1vdGUgdXBkYXRlIC0tcHJ1bmUgJHJlbW90ZSIgdXBkYXRlcyBmcm9tIHRoZSBuYW1lZCByZW1vdGUgYW5kCisgIHRoZW4gcHJ1bmVzIHN0YWxlIHRyYWNraW5nIGJyYW5jaGVzLgorCisqIGdpdC1zZW5kLWVtYWlsIGxlYXJuZWQgLS1jb25maXJtIG9wdGlvbiB0byByZXZpZXcgdGhlIENjOiBsaXN0IGJlZm9yZQorICBzZW5kaW5nIHRoZSBtZXNzYWdlcyBvdXQuCisKKyhkZXZlbG9wZXJzKQorCisqIFRlc3Qgc2NyaXB0cyBjYW4gYmUgcnVuIHVuZGVyIHZhbGdyaW5kLgorCisqIFRlc3Qgc2NyaXB0cyBjYW4gYmUgcnVuIHdpdGggaW5zdGFsbGVkIGdpdC4KKworKiBNYWtlZmlsZSBsZWFybmVkICdjb3ZlcmFnZScgb3B0aW9uIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZXMgd2l0aAorICBjb3ZlcmFnZSB0cmFja2luZyBlbmFibGVkLgorCisqIEJ1aWxkaW5nIHRoZSBtYW5wYWdlcyB3aXRoIGRvY2Jvb2steHNsIGJldHdlZW4gMS42OS4xIGFuZCAxLjcxLjEgbm93CisgIHJlcXVpcmVzIHNldHRpbmcgRE9DQk9PS19TVVBQUkVTU19TUCB0byB3b3JrIGFyb3VuZCBhIGRvY2Jvb2steHNsIGJ1Zy4KKyAgVGhpcyB3b3JrYXJvdW5kIHVzZWQgdG8gYmUgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgY2F1c2VzIHByb2JsZW1zCisgIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgZG9jYm9vay14c2wuICBJbiBhZGRpdGlvbiwgdGhlcmUgYXJlIGEgZmV3IG1vcmUKKyAga25vYnMgeW91IGNhbiB0d2VhayB0byB3b3JrIGFyb3VuZCBpc3N1ZXMgd2l0aCB2YXJpb3VzIHZlcnNpb25zIG9mIHRoZQorICBkb2Nib29rLXhzbCBwYWNrYWdlLiAgU2VlIGNvbW1lbnRzIGluIERvY3VtZW50YXRpb24vTWFrZWZpbGUgZm9yIGRldGFpbHMuCisKKyogU3VwcG9ydCBmb3IgYnVpbGRpbmcgYW5kIHRlc3RpbmcgYSBzdWJzZXQgb2YgZ2l0IG9uIGEgc3lzdGVtIHdpdGhvdXQgYQorICB3b3JraW5nIHBlcmwgaGFzIGJlZW4gaW1wcm92ZWQuCisKKworRml4ZXMgc2luY2UgdjEuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjIuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK0hlcmUgYXJlIGZpeGVzIHRoYXQgdGhpcyByZWxlYXNlIGhhcywgYnV0IGhhdmUgbm90IGJlZW4gYmFja3BvcnRlZCB0bwordjEuNi4yLlggc2VyaWVzLgorCisqICJnaXQtYXBwbHkiIHJlamVjdGVkIGEgcGF0Y2ggdGhhdCBzd2FwcyB0d28gZmlsZXMgKGkuZS4gcmVuYW1lcyBBIHRvIEIKKyAgYW5kIEIgdG8gQSBhdCB0aGUgc2FtZSB0aW1lKS4gIE1heSBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgYnkgY2hlcnJ5CisgIHBpY2tpbmcgZDhjODFkZiBhbmQgdGhlbiA3ZmFjMGVlKS4KKworKiBUaGUgaW5pdGlhbCBjaGVja291dCBkaWQgbm90IHJlYWQgdGhlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgLmdpdGF0dHJpYnV0ZQorICBmaWxlIHRoYXQgaXMgYmVpbmcgY2hlY2tlZCBvdXQuCisKKyogZ2l0LWdjIHNwZW50IGV4Y2Vzc2l2ZSBhbW91bnQgb2YgdGltZSB0byBkZWNpZGUgaWYgYW4gb2JqZWN0IGFwcGVhcnMKKyAgaW4gYSBsb2NhbGx5IGV4aXN0aW5nIHBhY2sgKGlmIG5lZWRlZCwgYmFja3BvcnQgYnkgbWVyZ2luZyA2OWUwMjBhKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MzllNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjEudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0dJVCB2MS42LjQuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiB1bnF1b3RlZCB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB3aGVuIGl0IGNvbnRhaW5zIG1vcmUgdGhhbgorICAgb25lIHdoaXRlc3BhY2VzIGluIGEgcm93LCBnb3QgdGhlbSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgorCisgKiAiZ2l0IGFtIiB1c2VkIHRvIGFjY2VwdCBhIHNpbmdsZSBwaWVjZSBvZiBlLW1haWwgcGVyIGZpbGUgKG5vdCBhIG1ib3gpCisgICBhcyBpdHMgaW5wdXQsIGJ1dCBtdWx0aXBsZSBpbnB1dCBmb3JtYXQgc3VwcG9ydCBpbiB2MS42LjQgYnJva2UgaXQuCisgICBBcHBhcmVudGx5IG1hbnkgcGVvcGxlIGhhdmUgYmVlbiBkZXBlbmRpbmcgb24gdGhpcyBmZWF0dXJlLgorCisgKiBUaGUgc2hvcnQgaGVscCB0ZXh0IGZvciAiZ2l0IGZpbHRlci1icmFuY2giIGNvbW1hbmQgd2FzIGEgc2luZ2xlIGxvbmcKKyAgIGxpbmUsIHdyYXBwZWQgYnkgdGVybWluYWxzLCBhbmQgd2FzIGhhcmQgdG8gcmVhZC4KKworICogVGhlICJyZWN1cnNpdmUiIHN0cmF0ZWd5IG9mICJnaXQgbWVyZ2UiIHNlZ2ZhdWx0ZWQgd2hlbiBhIG1lcmdlIGhhcworICAgbW9yZSB0aGFuIG9uZSBtZXJnZS1iYXNlcywgYW5kIG1lcmdpbmcgb2YgdGhlc2UgbWVyZ2UtYmFzZXMgaW52b2x2ZXMKKyAgIGEgcmVuYW1lL3JlbmFtZSBvciBhIHJlbmFtZS9hZGQgY29uZmxpY3QuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgZGlkIG5vdCB1c2UgdGhlIHJpZ2h0IGZvcmsgcG9pbnQgd2hlbiB0aGUKKyAgIHJlcG9zaXRvcnkgaGFzIGFscmVhZHkgZmV0Y2hlZCBmcm9tIHRoZSB1cHN0cmVhbSB0aGF0IHJld2luZHMgdGhlCisgICBicmFuY2ggaXQgaXMgYmFzZWQgb24gaW4gYW4gZWFybGllciBmZXRjaC4KKworICogRXhwbGFpbiB0aGUgY29uY2VwdCBvZiBmYXN0LWZvcndhcmQgbW9yZSBmdWxseSBpbiAiZ2l0IHB1c2giCisgICBkb2N1bWVudGF0aW9uLCBhbmQgaGludCB0byByZWZlciB0byBpdCBmcm9tIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUKKyAgIGNvbW1hbmQgcmVmdXNlcyBhbiB1cGRhdGUgdG8gcHJvdGVjdCB0aGUgdXNlci4KKworICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHBhY2suZGVsdGFjYWNoZXNpemUsIHVzZWQgYnkgImdpdCByZXBhY2siLCBpcyBub3cKKyAgIDI1Nk0sIGluc3RlYWQgb2YgdW5ib3VuZGVkLiAgT3RoZXJ3aXNlIGEgcmVwYWNrIG9mIGEgbW9kZXJhdGVseSBzaXplZAorICAgcmVwb3NpdG9yeSB3b3VsZCBuZWVkbGVzc2x5IGVhdCBpbnRvIHN3YXAuCisKKyAqIERvY3VtZW50IGhvdyAiZ2l0IHJlcGFjayIgKGhlbmNlICJnaXQgZ2MiKSBpbnRlcmFjdHMgd2l0aCBhIHJlcG9zaXRvcnkKKyAgIHRoYXQgYm9ycm93cyBpdHMgb2JqZWN0cyBmcm9tIG90aGVyIHJlcG9zaXRvcmllcyAoZS5nLiBvbmVzIGNyZWF0ZWQgYnkKKyAgICJnaXQgY2xvbmUgLXMiKS4KKworICogImdpdCBzaG93IiBvbiBhbiBhbm5vdGF0ZWQgdGFnIGxhY2tlZCBhIGRlbGltaXRpbmcgYmxhbmsgbGluZSBiZXR3ZWVuCisgICB0aGUgdGFnIGl0c2VsZiBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBvYmplY3QgaXQgdGFncy4KKworICogImdpdCB2ZXJpZnktcGFjayAtdiIgZXJyb25lb3VzbHkgcmVwb3J0ZWQgbnVtYmVyIG9mIG9iamVjdHMgd2l0aCB0b28KKyAgIGRlZXAgZGVsdGEgZGVwdGhzIGFzICJjaGFpbiBsZW5ndGggMCIgb2JqZWN0cy4KKworICogTG9uZyBuYW1lcyBvZiBhdXRob3JzIGFuZCBjb21taXR0ZXJzIG91dHNpZGUgVVMtQVNDSUkgd2VyZSBzb21ldGltZXMKKyAgIGluY29ycmVjdGx5IHNob3duIGluICJnaXR3ZWIiLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExZWMwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMi50eHQKQEAgLTAsMCArMSwzMiBAQAorR0lUIHYxLjYuNC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIC0tZGF0ZT1yZWxhdGl2ZSBvdXRwdXQgYmV0d2VlbiAxIGFuZCA1IHllYXJzIGFnbyByb3VuZGVkIHRoZSBudW1iZXIgb2YKKyAgICB5ZWFycyB3aGVuIHNheWluZyBYIHllYXJzIFkgbW9udGhzIGFnbywgaW5zdGVhZCBvZiByb3VuZGluZyBpdCBkb3duLgorCisqICJnaXQgYWRkIC1wIiBkaWQgbm90IGhhbmRsZSBjaGFuZ2VzIGluIGV4ZWN1dGFibGUgYml0cyBjb3JyZWN0bHkKKyAgKGEgcmVncmVzc2lvbiBhcm91bmQgMS42LjMpLgorCisqICJnaXQgYXBwbHkiIGRpZCBub3QgaG9ub3IgR05VIGRpZmYncyBjb252ZW50aW9uIHRvIG1hcmsgdGhlIGNyZWF0aW9uL2RlbGV0aW9uCisgIGV2ZW50IHdpdGggVU5JWCBlcG9jaCB0aW1lc3RhbXAgb24gbWlzc2luZyBzaWRlLgorCisqICJnaXQgY2hlY2tvdXQiIGluY29ycmVjdGx5IHJlbW92ZWQgZmlsZXMgaW4gYSBkaXJlY3RvcnkgcG9pbnRlZCBieSBhCisgIHN5bWJvbGljIGxpbmsgZHVyaW5nIGEgYnJhbmNoIHN3aXRjaCB0aGF0IHJlcGxhY2VzIGEgZGlyZWN0b3J5IHdpdGgKKyAgYSBzeW1ib2xpYyBsaW5rLgorCisqICJnaXQgY2xlYW4gLWQgLWYiIGhhcHBpbHkgZGVzY2VuZGVkIGludG8gYSBzdWJkaXJlY3RvcnkgdGhhdCBpcyBtYW5hZ2VkIGJ5IGEKKyAgc2VwYXJhdGUgZ2l0IHJlcG9zaXRvcnkuICBJdCBub3cgcmVxdWlyZXMgdHdvIC1mIG9wdGlvbnMgZm9yIHNhZmV0eS4KKworKiAiZ2l0IGZldGNoL3B1c2giIG92ZXIgaHR0cCB0cmFuc3BvcnRzIGhhZCB0d28gcmF0aGVyIGdyYXZlIGJ1Z3MuCisKKyogImdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIiIGRpZCBub3QgcHJlcGFyZSB0aGUgY292ZXIgbGV0dGVyIGZpbGUKKyAgZm9yIHVzZSB3aXRoIG5vbi1BU0NJSSBzdHJpbmdzIHdoZW4gdGhlcmUgYXJlIHRoZSBzZXJpZXMgY29udHJpYnV0b3JzIHdpdGgKKyAgbm9uLUFTQ0lJIG5hbWVzLgorCisqICJnaXQgcHVsbCBvcmlnaW4gYnJhbmNoIiBhbmQgImdpdCBmZXRjaCBvcmlnaW4gJiYgZ2l0IG1lcmdlIG9yaWdpbi9icmFuY2giCisgIGxlZnQgZGlmZmVyZW50IG1lcmdlIG1lc3NhZ2VzIGluIHRoZSByZXN1bHRpbmcgY29tbWl0LgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0M2U2NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMy50eHQKQEAgLTAsMCArMSwyOSBAQAorR0lUIHYxLjYuNC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgY2xvbmUiIGZyb20gYW4gZW1wdHkgcmVwb3NpdG9yeSBnYXZlIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2UsCisgIGV2ZW4gdGhvdWdoIGl0IGRpZCBldmVyeXRoaW5nIGVsc2UgY29ycmVjdGx5LgorCisqICJnaXQgY3Zzc2VydmVyIiBpbnZva2VkIGdpdCBjb21tYW5kcyB2aWEgImdpdC1mb28iIHN0eWxlLCB3aGljaCBoYXMgbG9uZworICBiZWVuIGRlcHJlY2F0ZWQuCisKKyogImdpdCBmZXRjaCIgYW5kICJnaXQgY2xvbmUiIGhhZCBhbiBleHRyYSBzYW5pdHkgY2hlY2sgdG8gdmVyaWZ5IHRoZQorICBwcmVzZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZyAqLnBhY2sgZmlsZSBiZWZvcmUgZG93bmxvYWRpbmcgKi5pZHgKKyAgZmlsZSBieSBpc3N1aW5nIGEgSEVBRCByZXF1ZXN0LiAgR2l0aHViIHNlcnZlciBob3dldmVyIHNvbWV0aW1lcworICBnYXZlIDUwMCAoSW50ZXJuYWwgc2VydmVyIGVycm9yKSByZXNwb25zZSB0byBIRUFEIGV2ZW4gaWYgYSBHRVQKKyAgcmVxdWVzdCBmb3IgKi5wYWNrIGZpbGUgdG8gdGhlIHNhbWUgVVJMIHdvdWxkIGhhdmUgc3VjY2VlZGVkLCBhbmQgYnJva2UKKyAgY2xvbmUgb3ZlciBIVFRQIGZyb20gc29tZSBvZiB0aGVpciByZXBvc2l0b3JpZXMuICBBcyBhIHdvcmthcm91bmQsIHRoaXMKKyAgdmVyaWZpY2F0aW9uIGhhcyBiZWVuIHJlbW92ZWQgKGFzIGl0IGlzIG5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSkuCisKKyogImdpdCBncmVwIiBkaWQgbm90IGxpa2UgcmVsYXRpdmUgcGF0aG5hbWUgdG8gcmVmZXIgb3V0c2lkZSB0aGUgY3VycmVudAorICBkaXJlY3Rvcnkgd2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworKiBhbiBlcnJvciBtZXNzYWdlIGZyb20gImdpdCBwdXNoIiB3YXMgZm9ybWF0dGVkIGluIGEgdmVyeSB1Z2x5IHdheS4KKworKiAiZ2l0IHN2biIgZGlkIG5vdCBxdW90ZSB0aGUgc3VidmVyc2lvbiB1c2VyIG5hbWUgY29ycmVjdGx5IHdoZW4KKyAgcnVubmluZyBpdHMgYXV0aG9yLXByb2cgaGVscGVyIHByb2dyYW0uCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWFkNDVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC40LnR4dApAQCAtMCwwICsxLDI2IEBACitHSVQgdjEuNi40LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi40LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIHdvcmthcm91bmQgZm9yIEdpdGh1YiBzZXJ2ZXIgdGhhdCBzb21ldGltZXMgZ2F2ZSA1MDAgKEludGVybmFsIHNlcnZlcgorICBlcnJvcikgcmVzcG9uc2UgdG8gSEVBRCByZXF1ZXN0cyBpbiAxLjYuNC4zIGludHJvZHVjZWQgYSByZWdyZXNzaW9uIHRoYXQKKyAgY2F1c2VkIHJlLWZldGNoaW5nIHByb2plY3RzIG92ZXIgaHR0cCB0byBzZWdmYXVsdCBpbiBjZXJ0YWluIGNhc2VzIGR1ZQorICB0byB1bmluaXRpYWxpemVkIHBvaW50ZXIgYmVpbmcgZnJlZWQuCisKKyogImdpdCBwdWxsIiBvbiBhbiB1bmJvcm4gYnJhbmNoIHVzZWQgdG8gY29uc2lkZXIgYW55dGhpbmcgaW4gdGhlIHdvcmsKKyAgdHJlZSBhbmQgdGhlIGluZGV4IGRpc2NhcmRhYmxlLgorCisqICJnaXQgZGlmZiAtYi93IiBkaWQgbm90IHdvcmsgd2VsbCBvbiB0aGUgaW5jb21wbGV0ZSBsaW5lIGF0IHRoZSBlbmQgb2YKKyAgdGhlIGZpbGUsIGR1ZSB0byBhbiBpbmNvcnJlY3QgaGFzaGluZyBvZiBsaW5lcyBpbiB0aGUgbG93LWxldmVsIHhkaWZmCisgIHJvdXRpbmVzLgorCisqICJnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9JHNvbWV3aGVyZSIgdXNlZCB0byB3b3JrIHdoZW4gJHNvbWV3aGVyZSBpcworICBhIHN5bWJvbGljIGxpbmsgdG8gYSBkaXJlY3RvcnkgZWxzZXdoZXJlLCBidXQgdjEuNi40LjIgYnJva2UgaXQuCisKKyogImdpdCB1bnBhY2stb2JqZWN0cyAtLXN0cmljdCIsIGludm9rZWQgd2hlbiByZWNlaXZlLmZzY2tvYmplY3RzCisgIGNvbmZpZ3VyYXRpb24gaXMgc2V0IGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBvZiAiZ2l0IHB1c2giLCBkaWQgbm90CisgIHByb3Blcmx5IGNoZWNrIHRoZSBvYmplY3RzLCBlc3BlY2lhbGx5IHRoZSBzdWJtb2R1bGUgbGlua3MsIGl0IHJlY2VpdmVkLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2MzA3ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNS50eHQKQEAgLTAsMCArMSwyMCBAQAorR2l0IHYxLjYuNC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBTaW1wbGlmaWVkIGJhc2U4NSBpbXBsZW1lbnRhdGlvbi4KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGNvdW50LW9iamVjdHMiIGRpZCBub3QgaGFuZGxlIHBhY2tzIGxhcmdlciB0aGFuIDRHLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uIiBkaWQgbm90IHN0b3AgYXQgbm9uIG9wdGlvbgorICAgd2hlbiAtLWtlZXAtZGFzaGRhc2ggd2FzIGluIGVmZmVjdC4KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgorCitPdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhMzRiNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQudHh0CkBAIC0wLDAgKzEsMTQ3IEBACitHSVQgdjEuNi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitXaXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzCitjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuICBZb3UgY2FuIGNob29zZQord2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1RvIGVhc2UgdGhlIHRyYW5zaXRpb24gcGxhbiwgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IG9mIHN1Y2ggYQorcHVzaCBydW5uaW5nIHRoaXMgcmVsZWFzZSB3aWxsIGlzc3VlIGEgYmlnIHdhcm5pbmcgd2hlbiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKKworICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmJwdGxzdXl2LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8KKworZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQordHJhbnNpdGlvbiBwbGFuLgorCitGb3IgYSBzaW1pbGFyIHJlYXNvbiwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2gKKyRraWxsZWQgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIGlmICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CiticmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgZ2V0cyBhIGxhcmdlIHdhcm5pbmcuICBZb3UgY2FuIGNob29zZSB3aGF0CitzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKKworVXBkYXRlcyBzaW5jZSB2MS42LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiBnaXR3ZWIgUGVybCBzdHlsZSBjbGVhbi11cC4KKworICogZ2l0LXN2biB1cGRhdGVzLCBpbmNsdWRpbmcgYSBuZXcgLS1hdXRob3JzLXByb2cgb3B0aW9uIHRvIG1hcCBhdXRob3IKKyAgIG5hbWVzIGJ5IGludm9raW5nIGFuIGV4dGVybmFsIHByb2dyYW0sICdnaXQgc3ZuIHJlc2V0JyB0byB1bndpbmQKKyAgICdnaXQgc3ZuIGZldGNoJywgc3VwcG9ydCBmb3IgbW9yZSB0aGFuIG9uZSBicmFuY2hlcywgZG9jdW1lbnRpbmcKKyAgIG9mIHRoZSB1c2VmdWwgLS1taW5pbWl6ZS11cmwgZmVhdHVyZSwgbmV3ICJnaXQgc3ZuIGdjIiBjb21tYW5kLCBldGMuCisKKyhwb3J0YWJpbGl0eSkKKworICogV2UgZmVlZCBpY29udiB3aXRoICJVVEYtOCIgaW5zdGVhZCBvZiAidXRmOCI7IHRoZSBmb3JtZXIgaXMKKyAgIHVuZGVyc3Rvb2QgbW9yZSB3aWRlbHkuICBTaW1pbGFybHkgdXBkYXRlZCB0ZXN0IHNjcmlwdHMgdG8gdXNlCisgICBlbmNvZGluZyBuYW1lcyBtb3JlIHdpZGVseSB1bmRlcnN0b29kIChlLmcuIHVzZSAiSVNPODg1OS0xIiBpbnN0ZWFkCisgICBvZiAiSVNPLTg4NTktMSIpLgorCisgKiBWYXJpb3VzIHBvcnRhYmlsaXR5IGZpeGVzL3dvcmthcm91bmRzIGZvciBkaWZmZXJlbnQgdmludGFnZXMgb2YKKyAgIFN1bk9TLCBJUklYLCBhbmQgV2luZG93cy4KKworICogR2l0LW92ZXItc3NoIHRyYW5zcG9ydCBvbiBXaW5kb3dzIHN1cHBvcnRzIFB1VFRZIHBsaW5rIGFuZCBUb3J0b2lzZVBsaW5rLgorCisocGVyZm9ybWFuY2UpCisKKyAqIE1hbnkgcmVwZWF0ZWQgdXNlIG9mIGxzdGF0KCkgYXJlIG9wdGltaXplZCBvdXQgaW4gImNoZWNrb3V0IiBjb2RlcGF0aC4KKworICogZ2l0LXN0YXR1cyAoYW5kIHVuZGVybHlpbmcgZ2l0LWRpZmYtaW5kZXggLS1jYWNoZWQpIGFyZSBvcHRpbWl6ZWQKKyAgIHRvIHRha2UgYWR2YW50YWdlIG9mIGNhY2hlLXRyZWUgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4LgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyAqICJnaXQgYWRkIC0tZWRpdCIgbGV0cyB1c2VycyBlZGl0IHRoZSB3aG9sZSBwYXRjaCB0ZXh0IHRvIGZpbmUtdHVuZSB3aGF0CisgICBpcyBhZGRlZCB0byB0aGUgaW5kZXguCisKKyAqICJnaXQgYW0iIGFjY2VwdHMgU3RHSVQgc2VyaWVzIGZpbGUgYXMgaXRzIGlucHV0LgorCisgKiAiZ2l0IGJpc2VjdCBza2lwIiBza2lwcyB0byBhIG1vcmUgcmFuZG9tbHkgY2hvc2VuIHBsYWNlIGluIHRoZSBob3BlCisgICB0byBhdm9pZCB0ZXN0aW5nIGEgY29tbWl0IHRoYXQgaXMgdG9vIGNsb3NlIHRvIGEgY29tbWl0IHRoYXQgaXMKKyAgIGFscmVhZHkga25vd24gdG8gYmUgdW50ZXN0YWJsZS4KKworICogImdpdCBjdnNleHBvcnRjb21taXQiIGxlYXJuZWQgLWsgb3B0aW9uIHRvIHN0b3AgQ1ZTIGtleXdvcmRzIGV4cGFuc2lvbgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIHRvIGhhbmRsZSBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIG1vcmUKKyAgIGdyYWNlZnVsbHkuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGxlYXJuZWQgYW4gb3B0aW9uIC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdCB0byBoYW5kbGUKKyAgIGRhbmdsaW5nIHRhZ3MgcmVzdWx0aW5nIGZyb20gaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiBtb3JlIHVzZWZ1bGx5LgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgLXAgb3B0aW9uIHRvIHNob3cgdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaCB1c2luZyB0aGUKKyAgIHNhbWUgY29udGV4dCBodW5rIG1hcmtlciAiZ2l0IGRpZmYiIHVzZXMuCisKKyAqIGh0dHBzIHRyYW5zcG9ydCBjYW4gb3B0aW9uYWxseSBiZSB0b2xkIHRoYXQgdGhlIHVzZWQgY2xpZW50CisgICBjZXJ0aWZpY2F0ZSBpcyBwYXNzd29yZCBwcm90ZWN0ZWQsIGluIHdoaWNoIGNhc2UgaXQgYXNrcyB0aGUKKyAgIHBhc3N3b3JkIG9ubHkgb25jZS4KKworICogImdpdCBpbWFwLXNlbmQiIGlzIElQdjYgYXdhcmUuCisKKyAqICJnaXQgbG9nIC0tZ3JhcGgiIGRyYXdzIGdyYXBocyBtb3JlIGNvbXBhY3RseSBieSB1c2luZyBob3Jpem9udGFsIGxpbmVzCisgICB3aGVuIGFibGUuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIHNob3dzIHNob3J0ZXIgcmVmbmFtZXMgYnkgc3RyaXBwaW5nIHdlbGwta25vd24KKyAgIHJlZnMvKiBwcmVmaXguCisKKyAqICJnaXQgcHVzaCAkbmFtZSIgaG9ub3JzIHJlbW90ZS4kbmFtZS5wdXNodXJsIGlmIHByZXNlbnQgYmVmb3JlCisgICB1c2luZyByZW1vdGUuJG5hbWUudXJsLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBVUkwgdXNlZCBmb3IgZmV0Y2hpbmcKKyAgIGFuZCBwdXNoaW5nIGNhbiBiZSBkaWZmZXJlbnQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgdW5kZXJzdGFuZHMgcXVvdGVkIGFsaWFzZXMgaW4gLm1haWxyYyBmaWxlcyAobWlnaHQKKyAgIGhhdmUgdG8gYmUgYmFja3BvcnRlZCB0byAxLjYuMy5YKS4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gZmV0Y2ggdGhlIHNlbmRlciBhZGRyZXNzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlICJzZW5kbWFpbC5mcm9tIiAoYW5kICJzZW5kbWFpbC48aWRlbnRpdHk+LmZyb20iKS4KKworICogImdpdCBzaG93LWJyYW5jaCIgY2FuIGNvbG9yIGl0cyBvdXRwdXQuCisKKyAqICJhZGQiIGFuZCAidXBkYXRlIiBzdWJjb21tYW5kcyB0byAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCAtLXJlZmVyZW5jZQorICAgb3B0aW9uIHRvIHVzZSBsb2NhbCBjbG9uZSB3aXRoIHJlZmVyZW5jZXMuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgbGVhcm5lZCAtLXJlYmFzZSBvcHRpb24gdG8gdXBkYXRlIGNoZWNrZWQKKyAgIG91dCBzdWJtb2R1bGVzIGJ5IHJlYmFzaW5nIHRoZSBsb2NhbCBjaGFuZ2VzLgorCisgKiAiZ2l0d2ViIiBjYW4gb3B0aW9uYWxseSB1c2UgZ3JhdmF0YXIgdG8gYWRvcm4gYXV0aG9yL2NvbW1pdHRlciBuYW1lcy4KKworKGRldmVsb3BlcnMpCisKKyAqIEEgbWFqb3IgcGFydCBvZiB0aGUgImdpdCBiaXNlY3QiIHdyYXBwZXIgaGFzIG1vdmVkIHRvIEMuCisKKyAqIEZvcm1hdHRpbmcgd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgQXNjaWlEb2MgOC40LjEgaXMgbm93IHN1cHBvcnRlZC4KKworRml4ZXMgc2luY2UgdjEuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjMuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK0hlcmUgYXJlIGZpeGVzIHRoYXQgdGhpcyByZWxlYXNlIGhhcywgYnV0IGhhdmUgbm90IGJlZW4gYmFja3BvcnRlZCB0bwordjEuNi4zLlggc2VyaWVzLgorCisgKiAiZ2l0IGRpZmYtdHJlZSAtciAtdCIgdXNlZCB0byBvbWl0IG5ldyBvciByZW1vdmVkIGRpcmVjdG9yaWVzIGZyb20KKyAgIHRoZSBvdXRwdXQuICBkZjUzM2YzIChkaWZmLXRyZWUgLXIgLXQ6IGluY2x1ZGUgYWRkZWQvcmVtb3ZlZAorICAgZGlyZWN0b3JpZXMgaW4gdGhlIG91dHB1dCwgMjAwOS0wNi0xMykgbWF5IG5lZWQgdG8gYmUgY2hlcnJ5LXBpY2tlZAorICAgdG8gYmFja3BvcnQgdGhpcyBmaXguCisKKyAqIFRoZSB3YXkgR2l0LnBtIHNldHMgdXAgYSBSZXBvc2l0b3J5IG9iamVjdCB3YXMgbm90IGZyaWVuZGx5IHRvIGNhbGxlcnMKKyAgIHRoYXQgY2hkaXIgYXJvdW5kLiAgSXQgbm93IGludGVybmFsbHkgcmVjb3JkcyB0aGUgcmVwb3NpdG9yeSBsb2NhdGlvbgorICAgYXMgYW4gYWJzb2x1dGUgcGF0aCB3aGVuIGF1dG9kZXRlY3RlZC4KKworICogUmVtb3ZpbmcgYSBzZWN0aW9uIHdpdGggImdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiIsIHdoZW4gaXRzCisgICBzZWN0aW9uIGhlYWRlciBoYXMgYSB2YXJpYWJsZSBkZWZpbml0aW9uIG9uIHRoZSBzYW1lIGxpbmUsIGxvc3QKKyAgIHRoYXQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKworICogImdpdCByZWJhc2UgLXAgLS1vbnRvIiB1c2VkIHRvIGFsd2F5cyBsZWF2ZSBzaWRlIGJyYW5jaGVzIG9mIGEgbWVyZ2UKKyAgIGludGFjdCwgZXZlbiB3aGVuIGJvdGggYnJhbmNoZXMgYXJlIHN1YmplY3QgdG8gcmV3cml0aW5nLgorCisgKiAiZ2l0IHJlcGFjayIgdXNlZCB0byBmYWl0aGZ1bGx5IGZvbGxvdyBncmFmdHMgYW5kIGNvbnNpZGVyZWQgdHJ1ZQorICAgcGFyZW50cyByZWNvcmRlZCBpbiB0aGUgY29tbWl0IG9iamVjdCB1bnJlYWNoYWJsZSBmcm9tIHRoZSBjb21taXQuCisgICBBZnRlciBzdWNoIGEgcmVwYWNraW5nLCB5b3UgY2Fubm90IHJlbW92ZSBncmFmdHMgd2l0aG91dCBjb3JydXB0aW5nCisgICB0aGUgcmVwb3NpdG9yeS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGRldGVjdCBlcnJvbmVvdXMgbG9vcHMgaW4gYWxpYXMgZXhwYW5zaW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5YmExOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMS50eHQKQEAgLTAsMCArMSwyMCBAQAorR0lUIHYxLjYuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGNvcnJ1cHQgcGFjayBjb3VsZCBtYWtlIGNvZGVwYXRoIHRvIHJlYWQgb2JqZWN0cyBpbnRvIGFuCisgICBpbmZpbml0ZSBsb29wLgorCisgKiBEb3dubG9hZCB0aHJvdWdocHV0IGRpc3BsYXkgd2FzIGFsd2F5cyBzaG93biBpbiBLaUIvcyBidXQgb24gZmFzdCBsaW5rcworICAgaXQgaXMgbW9yZSBhcHByb3ByaWF0ZSB0byBzaG93IGl0IGluIE1pQi9zLgorCisgKiAiZ2l0IGdyZXAgLWYgZmlsZW5hbWUiIHVzZWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhbmQgc2VnZmF1bHRlZC4KKworICogImdpdCBjbG9uZSAtYiBicmFuY2giIGdhdmUgYSB3cm9uZyBjb21taXQgb2JqZWN0IG5hbWUgdG8gcG9zdC1jaGVja291dAorICAgaG9vay4KKworICogImdpdCBwdWxsIiBvdmVyIGh0dHAgZGlkIG5vdCB3b3JrIG9uIG1zeXMuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdjY2NlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4yLnR4dApAQCAtMCwwICsxLDE5IEBACitHSVQgdjEuNi41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEluc3RhbGxhdGlvbiBvZiB0ZW1wbGF0ZXMgdHJpZ2dlcmVkIGEgYnVnIGluIGJ1c3lib3ggd2hlbiB1c2luZyB0YXIKKyAgIGltcGxlbWVudGF0aW9uIGZyb20gaXQuCisKKyAqICJnaXQgYWRkIC1pIiBpbmNvcnJlY3RseSBpZ25vcmVkIHBhdGhzIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIGluZGV4CisgICBpZiB0aGV5IG1hdGNoZWQgLmdpdGlnbm9yZSBwYXR0ZXJucy4KKworICogImdpdCBkZXNjcmliZSAtLWFsd2F5cyIgc2hvdWxkIGhhdmUgcHJvZHVjZWQgc29tZSBvdXRwdXQgZXZlbiB0aGVyZQorICAgd2VyZSBubyB0YWdzIGluIHRoZSByZXBvc2l0b3J5LCBidXQgaXQgZGlkbid0LgorCisgKiAiZ2l0IGxzLWZpbGVzIiB3aGVuIHNob3dpbmcgdHJhY2tlZCBmaWxlcyBpbmNvcnJlY3RseSBwYWlkIGF0dGVudGlvbgorICAgdG8gdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZhZDFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4zLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjEuNi41LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGluZm8vZ3JhZnRzIGZpbGUgZGlkbid0IGlnbm9yZSB0cmFpbGluZyBDUiBhdCB0aGUgZW5kIG9mIGxpbmVzLgorCisgKiBQYWNrYWdlcyBnZW5lcmF0ZWQgb24gbmV3ZXIgRkMgd2VyZSB1bnJlYWRhYmxlIGJ5IG9sZGVyIHZlcnNpb25zIG9mCisgICBSUE0gYXMgdGhlIG5ldyBkZWZhdWx0IGlzIHRvIHVzZSBzdHJvbmdlciBoYXNoLgorCisgKiBvdXRwdXQgZnJvbSAiZ2l0IGJsYW1lIiB3YXMgdW5yZWFkYWJsZSB3aGVuIHRoZSBmaWxlIGVuZGVkIGluIGFuCisgICBpbmNvbXBsZXRlIGxpbmUuCisKKyAqICJnaXQgYWRkIC1pLy1wIiBkaWRuJ3QgaGFuZGxlIGRlbGV0aW9uIG9mIGVtcHR5IGZpbGVzIGNvcnJlY3RseS4KKworICogImdpdCBjbG9uZSIgdGFrZXMgdXAgdG8gdHdvIHBhcmFtZXRlcnMsIGJ1dCBkaWQgbm90IGNvbXBsYWluIHdoZW4KKyAgIGdpdmVuIG1vcmUgYXJndW1lbnRzIHRoYW4gbmVjZXNzYXJ5IGFuZCBzaWxlbnRseSBpZ25vcmVkIHRoZW0uCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IHJlYWQgZmlsZXMgZ2l2ZW4gYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworICAgY29ycmVjdGx5IHdoZW4gaXQgaXMgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgZGlmZiAtLWNvbG9yLXdvcmRzIC1VMCIgZGlkbid0IHdvcmsgY29ycmVjdGx5LgorCisgKiBUaGUgaGFuZGxpbmcgb2YgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBmaWxlIGJ5ICJnaXQgZGlmZi9hcHBseQorICAgLS13aGl0ZXNwYWNlIiB3YXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIG90aGVyIGtpbmRzIG9mIGVycm9ycy4KKyAgIFRoZXkgYXJlIG5vdyBjb2xvcmVkLCB3YXJuZWQgYWdhaW5zdCwgYW5kIGZpeGVkIHRoZSBzYW1lIHdheSBhcyBvdGhlcnMuCisKKyAqIFRoZXJlIHdhcyBubyB3YXkgdG8gYWxsb3cgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBmaWxlIHdpdGhvdXQKKyAgIGFsbG93aW5nIGV4dHJhIGJsYW5rcyBhdCB0aGUgZW5kIG9mIGxpbmVzLiAgWW91IGNhbiB1c2UgYmxhbmstYXQtZW9mCisgICBhbmQgYmxhbmstYXQtZW9sIHdoaXRlc3BhY2UgZXJyb3IgY2xhc3MgdG8gc3BlY2lmeSB0aGVtIHNlcGFyYXRlbHkuCisgICBUaGUgb2xkIHRyYWlsaW5nLXNwYWNlIGVycm9yIGNsYXNzIGlzIG5vdyBhIHNob3J0LWhhbmQgdG8gc2V0IGJvdGguCisKKyAqICItcCIgb3B0aW9uIHRvICJnaXQgZm9ybWF0LXBhdGNoIiB3YXMgc3VwcG9zZWQgdG8gc3VwcHJlc3MgZGlmZnN0YXQKKyAgIGdlbmVyYXRpb24sIGJ1dCBpdCB3YXMgYnJva2VuIHNpbmNlIDEuNi4xLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZGlkIG5vdCBjb21waWxlIGNsZWFubHkgd2l0aCBuZXdlciBPcGVuU1NMLgorCisgKiAiZ2l0IGhlbHAgLWEiIG91dHNpZGUgb2YgYSBnaXQgcmVwb3NpdG9yeSB3YXMgYnJva2VuLgorCisgKiAiZ2l0IGxzLWZpbGVzIC1pIiB3YXMgc3VwcG9zZWQgdG8gYmUgaW52ZXJzZSBvZiAiZ2l0IGxzLWZpbGVzIiB3aXRob3V0IC1pCisgICB3aXRoIHJlc3BlY3QgdG8gZXhjbHVkZSBwYXR0ZXJucywgYnV0IGl0IHdhcyBicm9rZW4gc2luY2UgMS42LjUuMi4KKworICogImdpdCBscy1yZW1vdGUiIG91dHNpZGUgb2YgYSBnaXQgcmVwb3NpdG9yeSBvdmVyIGh0dHAgd2FzIGJyb2tlbi4KKworICogImdpdCByZWJhc2UgLWkiIGdhdmUgYm9ndXMgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBjb21tYW5kIHdvcmQgd2FzCisgICBtaXNzcGVsbGVkLgorCisgKiAiZ2l0IHJlY2VpdmUtcGFjayIgdGhhdCBpcyBydW4gaW4gcmVzcG9uc2UgdG8gImdpdCBwdXNoIiBkaWQgbm90IHJ1bgorICAgZ2FyYmFnZSBjb2xsZWN0aW9uIG5vciB1cGRhdGUtc2VydmVyLWluZm8sIGJ1dCBpbiBsYXJnZXIgaG9zdGluZyBzaXRlcywKKyAgIHRoZXNlIGFsbW9zdCBhbHdheXMgbmVlZCB0byBiZSBydW4uICBUbyBoZWxwIHNpdGUgYWRtaW5pc3RyYXRvcnMsIHRoZQorICAgY29tbWFuZCBub3cgcnVucyAiZ2MgLS1hdXRvIiBhbmQgInUtcy1pIiBieSBzZXR0aW5nIHJlY2VpdmUuYXV0b2djCisgICBhbmQgcmVjZWl2ZS51cGRhdGVzZXJ2ZXJpbmZvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCByZXNwZWN0aXZlbHkuCisKKyAqIFJlbGVhc2Ugbm90ZXMgc3BlbGxlZCB0aGUgcGFja2FnZSBuYW1lIHdpdGggaW5jb3JyZWN0IGNhcGl0YWxpemF0aW9uLgorCisgKiAiZ2l0d2ViIiBkaWQgbm90IGVzY2FwZSBub24tYXNjaWkgY2hhcmFjdGVycyBjb3JyZWN0bHkgaW4gdGhlIFVSTC4KKworICogImdpdHdlYiIgc2hvd2VkICJwYXRjaCIgbGluayBldmVuIGZvciBtZXJnZSBjb21taXRzLgorCisgKiAiZ2l0d2ViIiBzaG93ZWQgaW5jb3JyZWN0IGxpbmtzIGZvciBibG9iIGxpbmUgbnVtYmVycyBpbiBwYXRoaW5mbyBtb2RlLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0MzMzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQKQEAgLTAsMCArMSwzMiBAQAorR2l0IHYxLjYuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGhlbHAiICh3aXRob3V0IGFyZ3VtZW50KSB1c2VkIHRvIGNoZWNrIGlmIHlvdSBhcmUgaW4gYSBkaXJlY3RvcnkKKyAgIHVuZGVyIGdpdCBjb250cm9sLiBUaGVyZSB3YXMgbm8gYnJlYWthZ2UgaW4gYmVoYXZpb3VyIHBlci1zZSwgYnV0IHRoaXMKKyAgIHdhcyB1bm5lY2Vzc2FyeS4KKworICogImdpdCBwcnVuZS1wYWNrZWQiIGdhdmUgcHJvZ3Jlc3Mgb3V0cHV0IGV2ZW4gd2hlbiBpdHMgc3RhbmRhcmQgZXJyb3IgaXMKKyAgIG5vdCBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbDsgdGhpcyBjYXVzZWQgY3JvbiBqb2JzIHRoYXQgcnVuIGl0IHRvCisgICBwcm9kdWNlIGNydWZ0LgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyAtLWFsbC1wcm9ncmVzcyIgaXMgYW4gb3B0aW9uIHRvIGFzayBwcm9ncmVzcyBvdXRwdXQKKyAgIGZyb20gd3JpdGUtb2JqZWN0IHBoYXNlIF9pZl8gcHJvZ3Jlc3Mgb3V0cHV0IHdlcmUgdG8gYmUgcHJvZHVjZWQsIGFuZAorICAgc2hvdWxkbid0IGhhdmUgZm9yY2VkIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqICJnaXQgYXBwbHkgLXA8bj4gLS1kaXJlY3Rvcnk9PGVsc2V3aGVyZT4iIGRpZCBub3Qgd29yayB3ZWxsIGZvciBhCisgICBub24tZGVmYXVsdCB2YWx1ZSBvZiBuLgorCisgKiAiZ2l0IG1lcmdlIGZvbyBIRUFEIiB3YXMgbWlzcGFyc2VkIGFzIGFuIG9sZC1zdHlsZSBpbnZvY2F0aW9uIG9mIHRoZQorICAgY29tbWFuZCBhbmQgcHJvZHVjZWQgYSBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZS4gIEFzIGl0IGRvZXMgbm90IHNwZWNpZnkKKyAgIGFueSBvdGhlciBicmFuY2ggdG8gbWVyZ2UsIGl0IHNob3VsZG4ndCBiZSBtaXN0YWtlbiBhcyBzdWNoLiAgV2Ugd2lsbAorICAgcmVtb3ZlIHRoZSBvbGQgc3R5bGUgImdpdCBtZXJnZSA8bWVzc2FnZT4gSEVBRCA8Y29tbWl0Pi4uLiIgIHN5bnRheCBpbgorICAgZnV0dXJlIHZlcnNpb25zLCBidXQgbm90IGluIHRoaXMgcmVsZWFzZSwKKworICogImdpdCBtZXJnZSAtbSA8bWVzc2FnZT4gPGJyYW5jaD4uLi4iIGFkZGVkIHRoZSBzdGFuZGFyZCBtZXJnZSBtZXNzYWdlCisgICBvbiBpdHMgb3duIGFmdGVyIHVzZXItc3VwcGxpZWQgbWVzc2FnZSwgd2hpY2ggc2hvdWxkIGhhdmUgb3ZlcnJpZGRlbiB0aGUKKyAgIHN0YW5kYXJkIG9uZS4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZmM1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjUudHh0CkBAIC0wLDAgKzEsNDkgQEAKK0dpdCB2MS42LjUuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTWFudWFsIHBhZ2VzIGNhbiBiZSBmb3JtYXR0ZWQgd2l0aCBvbGRlciB4bWx0byBhZ2Fpbi4KKworICogR1JFUF9PUFRJT05TIGV4cG9ydGVkIGZyb20gdXNlcidzIGVudmlyb25tZW50IGNvdWxkIGhhdmUgYnJva2VuCisgICBvdXIgc2NyaXB0ZWQgY29tbWFuZHMuCisKKyAqIEluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGEgZmV3IHZhcmlhYmxlcyB0aGF0IG5hbWUgcGF0aHMgY2FuIGJlZ2luIHdpdGgKKyAgIH4vIGFuZCB+dXNlcm5hbWUvIGFuZCB0aGV5IGFyZSBleHBhbmRlZCBhcyBleHBlY3RlZC4gIFRoaXMgaXMgbm90IGEKKyAgIGJ1Z2ZpeCBidXQgMS42LjYgd2lsbCBoYXZlIHRoaXMgYW5kIHdpdGhvdXQgYmFja3BvcnRpbmcgdXNlcnMgY2Fubm90CisgICBlYXNpbHkgdXNlIHRoZSBzYW1lIH4vLmdpdGNvbmZpZyBhY3Jvc3MgdmVyc2lvbnMuCisKKyAqICJnaXQgZGlmZiAtQiAtTSIgZGlkIHRoZSBzYW1lIGNvbXB1dGF0aW9uIHRvIGhhc2ggbGluZXMgb2YgY29udGVudHMKKyAgIHR3aWNlLCBhbmQgaGVsZCBvbnRvIG1lbW9yeSBhZnRlciBpdCBoYXMgdXNlZCB0aGUgZGF0YSBpbiBpdAorICAgdW5uZWNlc3NhcmlseSBiZWZvcmUgaXQgZnJlZWQuCisKKyAqICJnaXQgZGlmZiAtQiIgYW5kICJnaXQgZGlmZiAtLWRpcnN0YXQiIHdhcyBub3QgY291bnRpbmcgbmV3bHkgYWRkZWQKKyAgIGNvbnRlbnRzIGNvcnJlY3RseS4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggcmV2aXNpb25zLi4uIC0tIHBhdGgiIGlzc3VlZCBhbiBpbmNvcnJlY3QgZXJyb3IKKyAgIG1lc3NhZ2UgdGhhdCBzdWdnZXN0ZWQgdG8gdXNlICItLSIgb24gdGhlIGNvbW1hbmQgbGluZSB3aGVuIHBhdGgKKyAgIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHdvcmsgdHJlZSAoaXQgaXMgYSBzZXBhcmF0ZSBtYXR0ZXIgaWYKKyAgIGl0IG1ha2VzIHNlbnNlIHRvIGxpbWl0IGZvcm1hdC1wYXRjaCB3aXRoIHBhdGhzcGVjcyBsaWtlIHRoYXQKKyAgIHdpdGhvdXQgdXNpbmcgdGhlIC0tZnVsbC1kaWZmIG9wdGlvbikuCisKKyAqICJnaXQgZ3JlcCAtRiAtaSBTdFJpTmciIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKworICogRW51bWVyYXRpb24gb2YgYXZhaWxhYmxlIG1lcmdlIHN0cmF0ZWdpZXMgaXRlcmF0ZWQgb3ZlciB0aGUgbGlzdCBvZgorICAgY29tbWFuZHMgaW4gYSB3cm9uZyB3YXksIHNvbWV0aW1lcyBwcm9kdWNpbmcgYW4gaW5jb3JyZWN0IHJlc3VsdC4KKworICogImdpdCBzaG9ydGxvZyIgZGlkIG5vdCBob25vciB0aGUgImVuY29kaW5nIiBoZWFkZXIgZW1iZWRkZWQgaW4gdGhlCisgICBjb21taXQgb2JqZWN0IGxpa2UgImdpdCBsb2ciIGRpZC4KKworICogUmVhZGluZyBwcm9ncmVzcyBtZXNzYWdlcyB0aGF0IGNvbWUgZnJvbSB0aGUgcmVtb3RlIHNpZGUgd2hpbGUgcnVubmluZworICAgImdpdCBwdWxsIiBpcyBnaXZlbiBwcmVjZWRlbmNlIG92ZXIgcmVhZGluZyB0aGUgYWN0dWFsIHBhY2sgZGF0YSB0bworICAgcHJldmVudCBnYXJibGVkIHByb2dyZXNzIG1lc3NhZ2Ugb24gdGhlIHVzZXIncyB0ZXJtaW5hbC4KKworICogImdpdCByZWJhc2UiIGdvdCBjb25mdXNlZCB3aGVuIHRoZSBsb2cgbWVzc2FnZSBiZWdhbiB3aXRoIGNlcnRhaW4KKyAgIHN0cmluZ3MgdGhhdCBsb29rZWQgbGlrZSBTdWJqZWN0OiwgRGF0ZTogb3IgRnJvbTogaGVhZGVyLgorCisgKiAiZ2l0IHJlc2V0IiBhY2NpZGVudGFsbHkgcnVuIGluIC5naXQvIGRpcmVjdG9yeSBjaGVja2VkIG91dCB0aGUKKyAgIHdvcmsgdHJlZSBjb250ZW50cyBpbiB0aGVyZS4KKworCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllYWY3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNi50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IHYxLjYuNS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFkZCAtcCIgaGFkIGEgcmVncmVzc2lvbiBzaW5jZSB2MS42LjUuMyB0aGF0IGJyb2tlIGRlbGV0aW9uIG9mCisgICBub24tZW1wdHkgZmlsZXMuCisKKyAqICJnaXQgYXJjaGl2ZSAtbyBvLnppcCAtLSBNYWtlZmlsZSIgcHJvZHVjZWQgYW4gYXJjaGl2ZSBpbiBvLnppcAorICAgYnV0IGluIFBPU0lYIHRhciBmb3JtYXQuCisKKyAqIEVycm9yIG1lc3NhZ2UgZ2l2ZW4gdG8gImdpdCBwdWxsIC0tcmViYXNlIiB3aGVuIHRoZSB1c2VyIGRpZG4ndCBnaXZlCisgICBlbm91Z2ggY2x1ZSBhcyB0byB3aGF0IGJyYW5jaCB0byBpbnRlZ3JhdGUgd2l0aCBzdGlsbCB0YWxrZWQgYWJvdXQKKyAgICJtZXJnaW5nIHdpdGgiIHRoZSBicmFuY2guCisKKyAqIEVycm9yIG1lc3NhZ2VzIGdpdmVuIGJ5ICJnaXQgbWVyZ2UiIHdoZW4gdGhlIG1lcmdlIHJlc3VsdGVkIGluIGEKKyAgIGZhc3QtZm9yd2FyZCBzdGlsbCB3ZXJlIGluIHBsdW1iaW5nIGxpbmdvLCBldmVuIHRob3VnaCBpbiB2MS42LjUKKyAgIHdlIHJld29yZGVkIG1lc3NhZ2VzIGluIG90aGVyIGNhc2VzLgorCisgKiBUaGUgcG9zdC11cGxvYWQtaG9vayBydW4gYnkgdXBsb2FkLXBhY2sgaW4gcmVzcG9uc2UgdG8gImdpdCBmZXRjaCIgaGFzCisgICBiZWVuIHJlbW92ZWQsIGR1ZSB0byBzZWN1cml0eSBjb25jZXJucyAodGhlIGhvb2sgZmlyc3QgYXBwZWFyZWQgaW4KKyAgIDEuNi41KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNTMwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjcudHh0CkBAIC0wLDAgKzEsMTkgQEAKK0dpdCB2MS42LjUuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBJZiBhIHVzZXIgc3BlY2lmaWVzIGEgY29sb3IgZm9yIGEgPHNsb3Q+IChpLmUuIGEgY2xhc3Mgb2YgdGhpbmdzIHRvIHNob3cKKyAgaW4gYSBwYXJ0aWN1bGFyIGNvbG9yKSB0aGF0IGlzIGtub3duIG9ubHkgYnkgbmV3ZXIgdmVyc2lvbnMgb2YgZ2l0CisgIChlLmcuICJjb2xvci5kaWZmLmZ1bmMiIHdhcyByZWNlbnRseSBhZGRlZCBmb3IgdXBjb21pbmcgMS42LjYgcmVsZWFzZSksCisgIGFuIG9sZGVyIHZlcnNpb24gb2YgZ2l0IHNob3VsZCBqdXN0IGlnbm9yZSB0aGVtLiAgSW5zdGVhZCB3ZSBkaWFnbm9zZWQKKyAgaXQgYXMgYW4gZXJyb3IuCisKKyogV2l0aCBoZWxwLmF1dG9jb3JyZWN0IHNldCB0byBub24temVybyB2YWx1ZSwgdGhlIGxvZ2ljIHRvIGd1ZXNzIHR5cG9zCisgIGluIHRoZSBzdWJjb21tYW5kIG5hbWUgbWlzZmlyZWQgYW5kIHJhbiBhIHJhbmRvbSBub25zZW5zZSBjb21tYW5kLgorCisqIElmIGEgY29tbWFuZCBpcyBydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIGFzIGEgcGF0aHNwZWMgaW5zaWRlIGEgYmFyZQorICByZXBvc2l0b3J5LCBlLmcuICJyZXYtbGlzdCBIRUFEIC0tIC9ob21lIiwgdGhlIGNvZGUgdHJpZWQgdG8gcnVuCisgIHN0cmxlbigpIG9uIE5VTEwsIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgZ2V0X2dpdF93b3JrX3RyZWUoKSwgYW5kCisgIHNlZ2ZhdWx0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjgudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS44LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjI0YmViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS44LnR4dApAQCAtMCwwICsxLDI4IEBACitHaXQgdjEuNi41LjggUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBjb3VudC1vYmplY3RzIiBkaWQgbm90IGhhbmRsZSBwYWNrZmlsZXMgdGhhdCBhcmUgYmlnZ2VyIHRoYW4gNEcgb24KKyAgcGxhdGZvcm1zIHdpdGggMzItYml0IG9mZl90LgorCisqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGFib3J0IGNsZWFubHkgaWYgaXQgZmFpbGVkIHRvIGxhdW5jaCB0aGUgZWRpdG9yLgorCisqICJnaXQgYmxhbWUiIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gY29tbWl0IGxhY2tlZCB0aGUgYXV0aG9yIG5hbWUuCisKKyogImdpdCBmYXN0LWltcG9ydCIgY2hva2VkIHdoZW4gaGFuZGxpbmcgYSB0YWcgdGhhdCBwb2ludHMgYXQgYW4gb2JqZWN0CisgIHRoYXQgaXMgbm90IGEgY29tbWl0LgorCisqICJnaXQgcmVzZXQgLS1oYXJkIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudAorICB2YXJpYWJsZSBpcyB1c2VkIHRvIHBvaW50IGF0IHRoZSByb290IG9mIHRoZSB0cnVlIHdvcmsgdHJlZS4KKworKiAiZ2l0IGdyZXAiIGZlZCBhIGJ1ZmZlciB0aGF0IGlzIG5vdCBOVUwtdGVybWluYXRlZCB0byB1bmRlcmx5aW5nCisgIHJlZ2V4ZWMoKS4KKworKiAiZ2l0IGNoZWNrb3V0IC1tIG90aGVyIiB3aGlsZSBvbiBhIGJyYW5jaCB0aGF0IGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdAorICBzZWdmYXVsdGVkLCBpbnN0ZWFkIG9mIGZhaWxpbmcuCisKKyogImdpdCBicmFuY2ggLWEgb3RoZXIiIHNob3VsZCBoYXZlIGRpYWdub3NlZCB0aGUgY29tbWFuZCBhcyBhbiBlcnJvci4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBhbHNvIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS45LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0NjlkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOS50eHQKQEAgLTAsMCArMSwxOCBAQAorR2l0IHYxLjYuNS45IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS44CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBvdmVybG9uZyBsaW5lIGFmdGVyICIuZ2l0ZGlyOiAiIGluIGEgZ2l0IGZpbGUgY2F1c2VkIG91dCBvZiBib3VuZHMKKyAgIGFjY2VzcyB0byBhbiBhcnJheSBvbiB0aGUgc3RhY2suCisKKyAqICJnaXQgYmxhbWUgLUwgJHN0YXJ0LCRlbmQiIHNlZ2ZhdWx0ZWQgd2hlbiB0b28gbGFyZ2UgJHN0YXJ0IHdhcyBnaXZlbi4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiIgZGlkIG5vdCBzdG9wIGF0IG5vbiBvcHRpb24KKyAgIHdoZW4gLS1rZWVwLWRhc2hkYXNoIHdhcyBpbiBlZmZlY3QuCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KKworT3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjN2Y3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LnR4dApAQCAtMCwwICsxLDE2OSBAQAorR0lUIHYxLjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworSW4gZ2l0IDEuNy4wLCB3aGljaCB3YXMgcGxhbm5lZCB0byBiZSB0aGUgcmVsZWFzZSBhZnRlciAxLjYuNSwgImdpdAorcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkKK2RlZmF1bHQuCisKK1lvdSBjYW4gY2hvb3NlIHdoYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggaW4gdGhlIHJlY2VpdmluZworcmVwb3NpdG9yeS4KKworQWxzbywgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2ggJGtpbGxlZCBpbiBhIHJlbW90ZQorcmVwb3NpdG9yeSAkdGhlcmUsIHdoZW4gJGtpbGxlZCBicmFuY2ggaXMgdGhlIGN1cnJlbnQgYnJhbmNoIHBvaW50ZWQgYXQgYnkKK2l0cyBIRUFELCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworWW91IGNhbiBjaG9vc2Ugd2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nCityZXBvc2l0b3J5LgorCitUbyBlYXNlIHRoZSB0cmFuc2l0aW9uIHBsYW4sIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBvZiBzdWNoIGEKK3B1c2ggcnVubmluZyB0aGlzIHJlbGVhc2Ugd2lsbCBpc3N1ZSBhIGJpZyB3YXJuaW5nIHdoZW4gdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CisKKyAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQorICBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZicHRsc3V5di5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmcvCisKK2ZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKK3RyYW5zaXRpb24gcGxhbi4KKworVXBkYXRlcyBzaW5jZSB2MS42LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiB2YXJpb3VzIHVwZGF0ZXMgdG8gZ2l0aywgZ2l0LXN2biBhbmQgZ2l0d2ViLgorCisocG9ydGFiaWxpdHkpCisKKyAqIG1vcmUgaW1wcm92ZW1lbnRzIG9uIG1pbmd3IHBvcnQuCisKKyAqIG1pbmd3IHdpbGwgYWxzbyBnaXZlIEZSU1ggYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBMRVNTCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgb25lLgorCisgKiBpbml0aWFsIHN1cHBvcnQgdG8gY29tcGlsZSBnaXQgb24gV2luZG93cyB3aXRoIE1TVkMuCisKKyhwZXJmb3JtYW5jZSkKKworICogT24gbWFqb3IgcGxhdGZvcm1zLCB0aGUgc3lzdGVtIGNhbiBiZSBjb21waWxlZCB0byB1c2Ugd2l0aCBMaW51cydzCisgICBibG9jay1zaGExIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTSEEtMSBoYXNoIGFsZ29yaXRobSwgd2hpY2gKKyAgIG91dHBlcmZvcm1zIHRoZSBkZWZhdWx0IGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIHdlIGJvcnJvd2VkIGZyb20KKyAgIE1vemlsbGEuCisKKyAqIFVubmVjZXNzYXJ5IGluZWZmaWNpZW5jeSBpbiBkZWVwZW5pbmcgb2YgYSBzaGFsbG93IHJlcG9zaXRvcnkgaGFzCisgICBiZWVuIHJlbW92ZWQuCisKKyAqICJnaXQgY2xvbmUiIGRvZXMgbm90IGdyYWIgb2JqZWN0cyB0aGF0IGl0IGRvZXMgbm90IG5lZWQgKGkuZS4KKyAgIHJlZmVyZW5jZWQgb25seSBmcm9tIHJlZnMgb3V0c2lkZSByZWZzL2hlYWRzIGFuZCByZWZzL3RhZ3MKKyAgIGhpZXJhcmNoeSkgYW55bW9yZS4KKworICogVGhlICJnaXQiIG1haW4gYmluYXJ5IHVzZWQgdG8gbGluayB3aXRoIGxpYmN1cmwsIHdoaWNoIHRoZW4gZHJhZ2dlZAorICAgaW4gYSBsYXJnZSBudW1iZXIgb2YgZXh0ZXJuYWwgbGlicmFyaWVzLiAgV2hlbiB1c2luZyBiYXNpYyBwbHVtYmluZworICAgY29tbWFuZHMgaW4gc2NyaXB0cywgdGhpcyB1bm5lY2Vzc2FyaWx5IHNsb3dlZCB0aGluZ3MgZG93bi4gIFdlIG5vdworICAgaW1wbGVtZW50IGh0dHAvaHR0cHMvZnRwIHRyYW5zZmVyIGFzIGEgc2VwYXJhdGUgZXhlY3V0YWJsZSBhcyB3ZQorICAgdXNlZCB0by4KKworICogImdpdCBjbG9uZSIgcnVuIGxvY2FsbHkgaGFyZGxpbmtzIG9yIGNvcGllcyB0aGUgZmlsZXMgaW4gLmdpdC8gdG8KKyAgIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeS4gIEl0IHVzZWQgdG8gZ2l2ZSBuZXcgbXRpbWUgdG8gY29waWVkIGZpbGVzLAorICAgYnV0IHRoaXMgZGVsYXllZCBnYXJiYWdlIGNvbGxlY3Rpb24gdG8gdHJpZ2dlciB1bm5lY2Vzc2FyaWx5IGluIHRoZQorICAgY2xvbmVkIHJlcG9zaXRvcnkuICBXZSBub3cgcHJlc2VydmUgbXRpbWUgZm9yIHRoZXNlIGZpbGVzIHRvIGF2b2lkCisgICB0aGlzIGlzc3VlLgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyAqIEh1bWFuIHdyaXRhYmxlIGRhdGUgZm9ybWF0IHRvIHZhcmlvdXMgb3B0aW9ucywgZS5nLiAtLXNpbmNlPXllc3RlcmRheSwKKyAgIG1hc3RlckB7MjAwMC4wOS4xN30sIGFyZSB0YXVnaHQgdG8gaW5mZXIgc29tZSBvbWl0dGVkIGlucHV0IHByb3Blcmx5LgorCisgKiBBIGZldyBwcm9ncmFtcyBnYXZlIHZlcmJvc2UgImFkdmljZSIgbWVzc2FnZXMgdG8gaGVscCB1bmluaXRpYXRlZAorICAgcGVvcGxlIHdoZW4gaXNzdWluZyBlcnJvciBtZXNzYWdlcy4gIEFuIGluZnJhc3RydWN0dXJlIHRvIGFsbG93CisgICB1c2VycyB0byBzcXVlbGNoIHRoZW0gaGFzIGJlZW4gaW50cm9kdWNlZCwgYW5kIGEgZmV3IHN1Y2ggbWVzc2FnZXMKKyAgIGNhbiBiZSBzaWxlbmNlZCBub3cuCisKKyAqIHJlZnMvcmVwbGFjZS8gaGllcmFyY2h5IGlzIGRlc2lnbmVkIHRvIGJlIHVzYWJsZSBhcyBhIHJlcGxhY2VtZW50CisgICBvZiB0aGUgImdyYWZ0cyIgbWVjaGFuaXNtLCB3aXRoIHRoZSBhZGRlZCBhZHZhbnRhZ2UgdGhhdCBpdCBjYW4gYmUKKyAgIHRyYW5zZmVycmVkIGFjcm9zcyByZXBvc2l0b3JpZXMuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgdG8gb3B0aW9uYWxseSBpZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcy4KKworICogImdpdCBhbSIgaGFuZGxlcyBpbnB1dCBlLW1haWwgZmlsZXMgdGhhdCBoYXMgQ1JMRiBsaW5lIGVuZGluZ3Mgc2Vuc2libHkuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgIi0tc2Npc3NvcnMiIG9wdGlvbiB0byBhbGxvdyB5b3UgdG8gZGlzY2FyZCBlYXJseSBwYXJ0CisgICBvZiBhbiBpbmNvbWluZyBlLW1haWwuCisKKyAqICJnaXQgYXJjaGl2ZSAtbyBvdXRwdXQuemlwIiB3b3JrcyB3aXRob3V0IGJlaW5nIHRvbGQgd2hhdCBmb3JtYXQgdG8KKyAgIHVzZSB3aXRoIGFuIGV4cGxpY2l0ICItLWZvcm1hdD16aXAiLm9wdGlvbi4KKworICogImdpdCBjaGVja291dCIsICJnaXQgcmVzZXQiIGFuZCAiZ2l0IHN0YXNoIiBsZWFybmVkIHRvIHBpY2sgYW5kCisgICBjaG9vc2UgdG8gdXNlIHNlbGVjdGVkIGNoYW5nZXMgeW91IG1hZGUsIHNpbWlsYXIgdG8gImdpdCBhZGQgLXAiLgorCisgKiAiZ2l0IGNsb25lIiBsZWFybmVkIGEgIi1iIiBvcHRpb24gdG8gcGljayBhIEhFQUQgdG8gY2hlY2sgb3V0CisgICBkaWZmZXJlbnQgZnJvbSB0aGUgcmVtb3RlJ3MgZGVmYXVsdCBicmFuY2guCisKKyAqICJnaXQgY2xvbmUiIGxlYXJuZWQgLS1yZWN1cnNpdmUgb3B0aW9uLgorCisgKiAiZ2l0IGNsb25lIiBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSBvbiBhIGRpZmZlcmVudCBmaWxlc3lzdGVtIHVzZWQgdG8KKyAgIGNvcHkgaW5kaXZpZHVhbCBvYmplY3QgZmlsZXMgd2l0aG91dCBwcmVzZXJ2aW5nIHRoZSBvbGQgdGltZXN0YW1wLCBnaXZpbmcKKyAgIHRoZW0gZXh0cmEgbGlmZXRpbWUgaW4gdGhlIG5ldyByZXBvc2l0b3J5IHVudGlsIHRoZXkgZ2MnZWQuCisKKyAqICJnaXQgY29tbWl0IC0tZHJ5LXJ1biAkYXJncyIgaXMgYSBuZXcgcmVjb21tZW5kZWQgd2F5IHRvIGFzayAid2hhdCB3b3VsZAorICAgaGFwcGVuIGlmIEkgdHJ5IHRvIGNvbW1pdCB3aXRoIHRoZXNlIGFyZ3VtZW50cy4iCisKKyAqICJnaXQgY29tbWl0IC0tZHJ5LXJ1biIgYW5kICJnaXQgc3RhdHVzIiBzaG93cyBjb25mbGljdGVkIHBhdGhzIGluIGEKKyAgIHNlcGFyYXRlIHNlY3Rpb24gdG8gbWFrZSB0aGVtIGVhc2llciB0byBzcG90IGR1cmluZyBhIG1lcmdlLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgbm93IHN1cHBvcnRzIHBhc3N3b3JkLXByb3RlY3RlZCBwc2VydmVyIGFjY2VzcyBldmVuCisgICB3aGVuIHRoZSBwYXNzd29yZCBpcyBub3QgdGFrZW4gZnJvbSB+Ly5jdnNwYXNzIGZpbGUuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGxlYXJuZWQgLS1uby1kYXRhIG9wdGlvbiB0aGF0IGNhbiBiZSB1c2VmdWwgd2hlbgorICAgcmVvcmRlcmluZyBjb21taXRzIGFuZCB0cmVlcyB3aXRob3V0IHRvdWNoaW5nIHRoZSBjb250ZW50cyBvZgorICAgYmxvYnMuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGhhcyBhIHBhaXIgb2YgbmV3IGZyb250LWVuZCBpbiBjb250cmliLyBhcmVhLgorCisgKiAiZ2l0IGluaXQiIGxlYXJuZWQgdG8gbWtkaXIvY2hkaXIgaW50byBhIGRpcmVjdG9yeSB3aGVuIGdpdmVuIGFuCisgICBleHRyYSBhcmd1bWVudCAoaS5lLiAiZ2l0IGluaXQgdGhpcyIpLgorCisgKiAiZ2l0IGluc3Rhd2ViIiBvcHRpb25hbGx5IGNhbiB1c2UgbW9uZ29vc2UgYXMgdGhlIHdlYiBzZXJ2ZXIuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIGNhbiBvcHRpb25hbGx5IGJlIHRvbGQgd2l0aCAtLWRlY29yYXRlPWZ1bGwgdG8KKyAgIGdpdmUgdGhlIHJlZmVyZW5jZSBuYW1lIGluIGZ1bGwuCisKKyAqICJnaXQgbWVyZ2UiIGlzc3VlZCBhbiB1bm5lY2Vzc2FyaWx5IHNjYXJ5IG1lc3NhZ2Ugd2hlbiBpdCBkZXRlY3RlZAorICAgdGhhdCB0aGUgbWVyZ2UgbWF5IGhhdmUgdG8gdG91Y2ggdGhlIHBhdGggdGhhdCB0aGUgdXNlciBoYXMgbG9jYWwKKyAgIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8uIFRoZSBtZXNzYWdlIGhhcyBiZWVuIHJld29yZGVkIHRvIG1ha2UgaXQKKyAgIGNsZWFyIHRoYXQgdGhlIGNvbW1hbmQgYWJvcnRlZCwgd2l0aG91dCBkb2luZyBhbnkgaGFybS4KKworICogImdpdCBwdXNoIiBjYW4gYmUgdG9sZCB0byBiZSAtLXF1aWV0LgorCisgKiAiZ2l0IHB1c2giIHBheXMgYXR0ZW50aW9uIHRvIHVybC4kYmFzZS5wdXNoSW5zdGVhZE9mIGFuZCB1c2VzIGEgVVJMCisgICB0aGF0IGlzIGRlcml2ZWQgZnJvbSB0aGUgVVJMIHVzZWQgZm9yIGZldGNoaW5nLgorCisgKiBpbmZvcm1hdGlvbmFsIG91dHB1dCBmcm9tICJnaXQgcmVzZXQiIHRoYXQgbGlzdHMgdGhlIGxvY2FsbHkgbW9kaWZpZWQKKyAgIHBhdGhzIGlzIG1hZGUgY29uc2lzdGVudCB3aXRoIHRoYXQgb2YgImdpdCBjaGVja291dCAkYW5vdGhlcl9icmFuY2giLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCB0byBnaXZlIHN1Ym1vZHVsZSBuYW1lIHRvIHNjcmlwdHMgcnVuIHdpdGgKKyAgICJmb3JlYWNoIiBzdWJjb21tYW5kLgorCisgKiB2YXJpb3VzIHN1YmNvbW1hbmRzIHRvICJnaXQgc3VibW9kdWxlIiBsZWFybmVkIC0tcmVjdXJzaXZlIG9wdGlvbi4KKworICogImdpdCBzdWJtb2R1bGUgc3VtbWFyeSIgbGVhcm5lZCAtLWZpbGVzIG9wdGlvbiB0byBjb21wYXJlIHRoZSB3b3JrCisgICB0cmVlIHZzIHRoZSBjb21taXQgYm91bmQgYXQgc3VibW9kdWxlIHBhdGgsIGluc3RlYWQgb2YgY29tcGFyaW5nCisgICB0aGUgaW5kZXguCisKKyAqICJnaXQgdXBsb2FkLXBhY2siLCB3aGljaCBpcyB0aGUgc2VydmVyIHNpZGUgc3VwcG9ydCBmb3IgImdpdCBjbG9uZSIgYW5kCisgICAiZ2l0IGZldGNoIiwgY2FuIGNhbGwgYSBuZXcgcG9zdC11cGxvYWQtcGFjayBob29rIGZvciBzdGF0aXN0aWNzIHB1cnBvc2VzLgorCisoZGV2ZWxvcGVycykKKworICogV2l0aCBHSVRfVEVTVF9PUFRTPSItLXJvb3Q9L3AvYS90L2giLCB0ZXN0cyBjYW4gYmUgcnVuIG91dHNpZGUgdGhlCisgICBzb3VyY2UgZGlyZWN0b3J5OyB1c2luZyB0bXBmcyBtYXkgZ2l2ZSBmYXN0ZXIgdHVybmFyb3VuZC4KKworICogV2l0aCBOT19QRVJMX01BS0VNQUtFUiBzZXQsIERFU1RESVI9IGlzIG5vdyBob25vdXJlZCwgc28geW91IGNhbgorICAgYnVpbGQgZm9yIG9uZSBsb2NhdGlvbiwgYW5kIGluc3RhbGwgaW50byBhbm90aGVyIGxvY2F0aW9uIHRvIHRhciBpdAorICAgdXAuCisKK0ZpeGVzIHNpbmNlIHYxLjYuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi40LlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkMGE0YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMS50eHQKQEAgLTAsMCArMSwzNyBAQAorR2l0IHYxLjYuNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYmxhbWUiIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gY29tbWl0IGxhY2tlZCB0aGUgYXV0aG9yIG5hbWUuCisKKyAqICJnaXQgYnJhbmNoIC1hIG5hbWUiIHdhc24ndCBkaWFnbm9zZWQgYXMgYW4gZXJyb3IuCisKKyAqICJnaXQgY291bnQtb2JqZWN0cyIgZGlkIG5vdCBoYW5kbGUgcGFja2ZpbGVzIHRoYXQgYXJlIGJpZ2dlciB0aGFuIDRHIG9uCisgICBwbGF0Zm9ybXMgd2l0aCAzMi1iaXQgb2ZmX3QuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0gb3RoZXIiIHdoaWxlIG9uIGEgYnJhbmNoIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0CisgICBzZWdmYXVsdGVkLCBpbnN0ZWFkIG9mIGZhaWxpbmcuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGNob2tlZCB3aGVuIGZlZCBhIHRhZyB0aGF0IGRvIG5vdCBwb2ludCBhdCBhCisgICBjb21taXQuCisKKyAqICJnaXQgZ3JlcCIgZmluZGluZyBmcm9tIHdvcmsgdHJlZSBmaWxlcyBjb3VsZCBoYXZlIGZlZCBnYXJiYWdlIHRvCisgICB0aGUgdW5kZXJseWluZyByZWdleGVjKDMpLgorCisgKiAiZ2l0IGdyZXAgLUwiIGRpZG4ndCBzaG93IGVtcHR5IGZpbGVzICh0aGV5IHNob3VsZCBuZXZlciBtYXRjaCwgYW5kCisgICB0aGV5IHNob3VsZCBhbHdheXMgYXBwZWFyIGluIC1MIG91dHB1dCBhcyB1bm1hdGNoaW5nKS4KKworICogImdpdCByZWJhc2UgLWkiIGRpZCBub3QgYWJvcnQgY2xlYW5seSBpZiBpdCBmYWlsZWQgdG8gbGF1bmNoIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgcmVzZXQgLS1oYXJkIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudAorICAgdmFyaWFibGUgaXMgdXNlZCB0byBwb2ludCBhdCB0aGUgcm9vdCBvZiB0aGUgdHJ1ZSB3b3JrIHRyZWUuCisKKyAqIGh0dHAtYmFja2VuZCB3YXMgbm90IGxpc3RlZCBpbiB0aGUgY29tbWFuZCBsaXN0IGluIHRoZSBkb2N1bWVudGF0aW9uLgorCisgKiBCdWlsZGluZyBvbiBGcmVlQlNEIChib3RoIDcgYW5kIDgpIG5lZWRzIE9MRF9JQ09OViBzZXQgaW4gdGhlIE1ha2VmaWxlCisKKyAqICJnaXQgY2hlY2tvdXQgLW0gc29tZS1icmFuY2giIHdoaWxlIG9uIGFuIHVuYm9ybiBicmFuY2ggY3Jhc2hlZC4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYWRkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjIudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0dpdCB2MS42LjYuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogcmVjdXJzaXZlIG1lcmdlIGRpZG4ndCBjb3JyZWN0bHkgZGlhZ25vc2UgaXRzIG93biBwcm9ncmFtbWluZyBlcnJvcnMsCisgICBhbmQgaW5zdGVhZCBjYXVzZWQgdGhlIGNhbGxlciB0byBzZWdmYXVsdC4KKworICogVGhlIG5ldyAic21hcnQgaHR0cCIgYXdhcmUgY2xpZW50cyBwcm9iZWQgdGhlIHdlYiBzZXJ2ZXJzIHRvIHNlZSBpZgorICAgdGhleSBzdXBwb3J0IHNtYXJ0IGh0dHAsIGJ1dCBkaWQgbm90IGZhbGwgYmFjayB0byBkdW1iIGh0dHAgdHJhbnNwb3J0CisgICBjb3JyZWN0bHkgd2l0aCBzb21lIHNlcnZlcnMuCisKKyAqIFRpbWUgYmFzZWQgcmVmbG9nIHN5bnRheCBlLmcuICJAe3llc3RlcmRheX0iIGRpZG4ndCBkaWFnbm9zZSBhIG1pc3NwZWxsZWQKKyAgIHRpbWUgc3BlY2lmaWNhdGlvbiBhbmQgaW5zdGVhZCBhc3N1bWVkICJAe25vd30iLgorCisgKiAiZ2l0IGFyY2hpdmUgSEVBRCAtLSBuby1zdWNoLWRpcmVjdG9yeSIgcHJvZHVjZWQgYW4gZW1wdHkgYXJjaGl2ZQorICAgd2l0aG91dCBjb21wbGFpbmluZy4KKworICogImdpdCBibGFtZSAtTCBzdGFydCxlbmQgLS0gZmlsZSIgbWlzYmVoYXZlZCB3aGVuIGdpdmVuIGEgc3RhcnQgdGhhdCBpcworICAgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZS4KKworICogImdpdCBjaGVja291dCAtbSIgZGlkbid0IGNvcnJlY3RseSBjYWxsIGN1c3RvbSBtZXJnZSBiYWNrZW5kIHN1cHBsaWVkCisgICBieSB0aGUgZW5kIHVzZXIuCisKKyAqICJnaXQgY29uZmlnIC1mIDxmaWxlPiIgbWlzYmVoYXZlZCB3aGVuIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IGN2c3NlcnZlciIgZGlkbid0IGxpa2UgaGF2aW5nIHJlZ2V4IG1ldGFjaGFyYWN0ZXJzIChlLmcuICcrJykgaW4KKyAgIENWU1JPT1QgZW52aXJvbm1lbnQuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGRpZCBub3QgY29ycmVjdGx5IGhhbmRsZSBsYXJnZSBibG9icyB0aGF0IG1heQorICAgYnVzdCB0aGUgcGFjayBzaXplIGxpbWl0LgorCisgKiAiZ2l0IGd1aSIgaXMgc3VwcG9zZWQgdG8gd29yayBldmVuIHdoZW4gbGF1bmNoZWQgZnJvbSBpbnNpZGUgYSAuZ2l0CisgICBkaXJlY3RvcnkuCisKKyAqICJnaXQgZ3VpIiBtaXNiZWhhdmVkIHdoZW4gYXBwbHlpbmcgYSBodW5rIHRoYXQgZW5kcyB3aXRoIGRlbGV0aW9uLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZGlkIG5vdCBob25vciBpbWFwLnByZWZvcm1hdHRlZEhUTUwgYXMgZG9jdW1lbnRlZC4KKworICogImdpdCBsb2ciIGZhbWlseSBpbmNvcnJlY3RseSBzaG93ZWQgdGhlIGNvbW1pdCBub3RlcyB1bmNvbmRpdGlvbmFsbHkgYnkKKyAgIG1pc3Rha2UsIHdoaWNoIHdhcyBlc3BlY2lhbGx5IGlycml0YXRpbmcgd2hlbiBydW5uaW5nICJnaXQgbG9nIC0tb25lbGluZSIuCisKKyAqICJnaXQgc3RhdHVzIiBzaG91bGRuJ3QgcmVxdWlyZSBhbiB3cml0ZSBhY2Nlc3MgdG8gdGhlIHJlcG9zaXRvcnkuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTQ4M2FjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4zLnR4dApAQCAtMCwwICsxLDIzIEBACitHaXQgdjEuNi42LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi42LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIG92ZXJsb25nIGxpbmUgYWZ0ZXIgIi5naXRkaXI6ICIgaW4gYSBnaXQgZmlsZSBjYXVzZWQgb3V0IG9mIGJvdW5kcworICAgYWNjZXNzIHRvIGFuIGFycmF5IG9uIHRoZSBzdGFjay4KKworICogImdpdCBiaXNlY3QgJHBhdGgiIGRpZCBub3QgY29ycmVjdGx5IGRpYWdub3NlIGFuIGVycm9yIHdoZW4gZ2l2ZW4gYQorICAgbm9uLWV4aXN0ZW50IHBhdGguCisKKyAqICJnaXQgYmxhbWUgLUwgJHN0YXJ0LCRlbmQiIHNlZ2ZhdWx0ZWQgd2hlbiB0b28gbGFyZ2UgJHN0YXJ0IHdhcyBnaXZlbi4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZCBub3Qgd3JpdGUgZHJhZnQgYm94IHdpdGggQ1JMRiBsaW5lIGVuZGluZ3MgcGVyIFJGQy4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiIgZGlkIG5vdCBzdG9wIGF0IG5vbiBvcHRpb24KKyAgIHdoZW4gLS1rZWVwLWRhc2hkYXNoIHdhcyBpbiBlZmZlY3QuCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KKworT3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDFlMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LnR4dApAQCAtMCwwICsxLDIyNCBAQAorR2l0IHYxLjYuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworTm90ZXMgb24gYmVoYXZpb3VyIGNoYW5nZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBJbiB0aGlzIHJlbGVhc2UsICJnaXQgZnNjayIgZGVmYXVsdHMgdG8gImdpdCBmc2NrIC0tZnVsbCIgYW5kCisgICBjaGVja3MgcGFja2ZpbGVzLCBhbmQgYmVjYXVzZSBvZiB0aGlzIGl0IHdpbGwgdGFrZSBtdWNoIGxvbmdlciB0bworICAgY29tcGxldGUgdGhhbiBiZWZvcmUuICBJZiB5b3UgcHJlZmVyIGEgcXVpY2tlciBjaGVjayBvbmx5IG9uIGxvb3NlCisgICBvYmplY3RzICh0aGUgb2xkIGRlZmF1bHQpLCB5b3UgY2FuIHNheSAiZ2l0IGZzY2sgLS1uby1mdWxsIi4gIFRoaXMKKyAgIGhhcyBiZWVuIHN1cHBvcnRlZCBieSAxLjUuNCBhbmQgbmV3ZXIgdmVyc2lvbnMgb2YgZ2l0LCBzbyBpdCBpcworICAgc2FmZSB0byB3cml0ZSBpdCBpbiB5b3VyIHNjcmlwdCBldmVuIGlmIHlvdSB1c2Ugc2xpZ2h0bHkgb2xkZXIgZ2l0CisgICBvbiBzb21lIG9mIHlvdXIgbWFjaGluZXMuCisKK1ByZXBhcmluZyB5b3Vyc2VsdmVzIGZvciBjb21wYXRpYmlsaXR5IGlzc3VlcyBpbiAxLjcuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGdpdCAxLjcuMCwgd2hpY2ggaXMgcGxhbm5lZCB0byBiZSB0aGUgcmVsZWFzZSBhZnRlciAxLjYuNiwgdGhlcmUgd2lsbAorYmUgYSBoYW5kZnVsIG9mIGJlaGF2aW91ciBjaGFuZ2VzIHRoYXQgd2lsbCBicmVhayBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCitUaGVzZSBjaGFuZ2VzIHdlcmUgZGlzY3Vzc2VkIGxvbmcgdGltZSBhZ28gYW5kIGV4aXN0aW5nIGJlaGF2aW91cnMgaGF2ZQorYmVlbiBpZGVudGlmaWVkIGFzIG1vcmUgcHJvYmxlbWF0aWMgdG8gdGhlIHVzZXJiYXNlIHRoYW4ga2VlcGluZyB0aGVtIGZvcgordGhlIHNha2Ugb2YgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworV2hlbiBuZWNlc3NhcnksIGEgdHJhbnNpdGlvbiBzdHJhdGVneSBmb3IgZXhpc3RpbmcgdXNlcnMgaGFzIGJlZW4gZGVzaWduZWQKK25vdCB0byBmb3JjZSB0aGVtIHJ1bm5pbmcgYXJvdW5kIHNldHRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kCit1cGRhdGluZyB0aGVpciBzY3JpcHRzIGluIG9yZGVyIHRvIGVpdGhlciBrZWVwIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvdXIKK29yIGFkanVzdCB0byB0aGUgbmV3IGJlaGF2aW91ciwgb24gdGhlIGRheSB0aGVpciBzeXNhZG1pbiBkZWNpZGVzIHRvIGluc3RhbGwKK3RoZSBuZXcgdmVyc2lvbiBvZiBnaXQuICBXaGVuIHdlIHN3aXRjaGVkIGZyb20gImdpdC1mb28iIHRvICJnaXQgZm9vIiBpbgorMS42LjAsIGV2ZW4gdGhvdWdoIHRoZSBjaGFuZ2UgaGFkIGJlZW4gYWR2ZXJ0aXNlZCBhbmQgdGhlIHRyYW5zaXRpb24KK2d1aWRlIGhhZCBiZWVuIHByb3ZpZGVkIGZvciBhIHZlcnkgbG9uZyB0aW1lLCB0aGUgdXNlcnMgcHJvY3Jhc3RpbmF0ZWQKK2R1cmluZyB0aGUgZW50aXJlIHRyYW5zaXRpb24gcGVyaW9kLCBhbmQgZW5kZWQgdXAgcGFuaWNraW5nIG9uIHRoZSBkYXkKK3RoZWlyIHN5c2FkbWlucyB1cGRhdGVkIHRoZWlyIGdpdCBpbnN0YWxsYXRpb24uICBXZSBhcmUgdHJ5aW5nIHRvIGF2b2lkCityZXBlYXRpbmcgdGhhdCB1bnBsZWFzYW50bmVzcyBpbiB0aGUgMS43LjAgcmVsZWFzZS4KKworRm9yIGNoYW5nZXMgZGVjaWRlZCB0byBiZSBpbiAxLjcuMCwgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGFmZmVjdGVkCitoYXZlIGJlZW4gbXVjaCBsb3VkZXIgdG8gc3Ryb25nbHkgZGlzY291cmFnZSBzdWNoIHByb2NyYXN0aW5hdGlvbiwgYW5kCit0aGV5IGNvbnRpbnVlIHRvIGJlIGluIHRoaXMgcmVsZWFzZS4gIElmIHlvdSBoYXZlIGJlZW4gdXNpbmcgcmVjZW50Cit2ZXJzaW9ucyBvZiBnaXQsIHlvdSB3b3VsZCBoYXZlIHNlZW4gd2FybmluZ3MgaXNzdWVkIHdoZW4geW91IHVzZWQKK2ZlYXR1cmVzIHdob3NlIGJlaGF2aW91ciB3aWxsIGNoYW5nZSwgd2l0aCBhIGNsZWFyIGluc3RydWN0aW9uIG9uIGhvdwordG8ga2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyIGlmIHlvdSB3YW50IHRvLiAgWW91IGhvcGVmdWxseSBhcmUKK2FscmVhZHkgd2VsbCBwcmVwYXJlZC4KKworT2YgY291cnNlLCB3ZSBoYXZlIGFsc28gYmVlbiBnaXZpbmcgInRoaXMgYW5kIHRoYXQgd2lsbCBjaGFuZ2UgaW4KKzEuNy4wOyBwcmVwYXJlIHlvdXJzZWx2ZXMiIHdhcm5pbmdzIGluIHRoZSByZWxlYXNlIG5vdGVzIGFuZAorYW5ub3VuY2VtZW50IG1lc3NhZ2VzIGZvciB0aGUgcGFzdCBmZXcgcmVsZWFzZXMuICBMZXQncyBzZWUgaG93IHdlbGwKK3VzZXJzIHdpbGwgZmFyZSB0aGlzIHRpbWUuCisKKyAqICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCAoaS5lLiBwb2ludGVkIGJ5CisgICBIRUFEIGluIGEgcmVwb3NpdG9yeSB0aGF0IGlzIG5vdCBiYXJlKSB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworICAgU2ltaWxhcmx5LCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaCAka2lsbGVkCisgICBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgd2hlbiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorICAgYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LgorCisgICBTZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGFuZAorICAgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCB0byAnaWdub3JlJyBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkKKyAgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZXNlIHNhZmV0eSBmZWF0dXJlcy4gIFZlcnNpb25zIG9mIGdpdAorICAgc2luY2UgMS42LjIgaGF2ZSBpc3N1ZWQgYSBsb3VkIHdhcm5pbmcgd2hlbiB5b3UgdHJpZWQgdG8gZG8gdGhlc2UKKyAgIG9wZXJhdGlvbnMgd2l0aG91dCBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uLCBzbyByZXBvc2l0b3JpZXMgb2YKKyAgIHBlb3BsZSB3aG8gc3RpbGwgbmVlZCB0byBiZSBhYmxlIHRvIHBlcmZvcm0gc3VjaCBhIHB1c2ggc2hvdWxkCisgICBhbHJlYWR5IGhhdmUgYmVlbiBmdXR1cmUgcHJvb2ZlZC4KKworICAgUGxlYXNlIHJlZmVyIHRvOgorCisgICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgICBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZicHRsc3V5di5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmcvCisKKyAgIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKKyAgIHRyYW5zaXRpb24gcHJvY2VzcyB0aGF0IGFscmVhZHkgdG9vayBwbGFjZSBzbyBmYXIuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgd2lsbCBub3QgbWFrZSBkZWVwIHRocmVhZHMgYnkgZGVmYXVsdCB3aGVuIHNlbmRpbmcgYQorICAgcGF0Y2ggc2VyaWVzIHdpdGggbW9yZSB0aGFuIHR3byBtZXNzYWdlcy4gIEFsbCBtZXNzYWdlcyB3aWxsIGJlIHNlbnQKKyAgIGFzIGEgcmVwbHkgdG8gdGhlIGZpcnN0IG1lc3NhZ2UsIGkuZS4gY292ZXIgbGV0dGVyLiAgR2l0IDEuNi42ICh0aGlzCisgICByZWxlYXNlKSB3aWxsIGlzc3VlIGEgd2FybmluZyBhYm91dCB0aGUgdXBjb21pbmcgZGVmYXVsdCBjaGFuZ2UsIHdoZW4KKyAgIGl0IHVzZXMgdGhlIHRyYWRpdGlvbmFsICJkZWVwIHRocmVhZGluZyIgYmVoYXZpb3VyIGFzIHRoZSBidWlsdC1pbgorICAgZGVmYXVsdC4gIFRvIHNxdWVsY2ggdGhlIHdhcm5pbmcgYnV0IHN0aWxsIHVzZSB0aGUgImRlZXAgdGhyZWFkaW5nIgorICAgYmVoYXZpb3VyLCBnaXZlIC0tY2hhaW4tcmVwbHktdG8gb3B0aW9uIG9yIHNldCBzZW5kZW1haWwuY2hhaW5yZXBseXRvCisgICB0byB0cnVlLgorCisgICBJdCBoYXMgYmVlbiBwb3NzaWJsZSB0byBjb25maWd1cmUgc2VuZC1lbWFpbCB0byBzZW5kICJzaGFsbG93IHRocmVhZCIKKyAgIGJ5IHNldHRpbmcgc2VuZGVtYWlsLmNoYWlucmVwbHl0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGZhbHNlLgorICAgVGhlIG9ubHkgdGhpbmcgMS43LjAgcmVsZWFzZSB3aWxsIGRvIGlzIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB3aGVuCisgICB5b3UgaGF2ZW4ndCBjb25maWd1cmVkIHRoYXQgdmFyaWFibGUuCisKKyAqICJnaXQgc3RhdHVzIiB3aWxsIG5vdCBiZSAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iLiAgVGhpcyBjaGFuZ2UgZG9lcyBub3QKKyAgIGFmZmVjdCB5b3UgaWYgeW91IHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IHBhdGhzcGVjLgorCisgICBOb2JvZHkgc2FuZSBmb3VuZCB0aGUgY3VycmVudCBiZWhhdmlvdXIgb2YgImdpdCBzdGF0dXMgTWFrZWZpbGUiIHVzZWZ1bAorICAgbm9yIG1lYW5pbmdmdWwsIGFuZCBpdCBjb25mdXNlZCB1c2Vycy4gICJnaXQgY29tbWl0IC0tZHJ5LXJ1biIgaGFzIGJlZW4KKyAgIHByb3ZpZGVkIGFzIGEgd2F5IHRvIGdldCB0aGUgY3VycmVudCBiZWhhdmlvdXIgb2YgdGhpcyBjb21tYW5kIHNpbmNlCisgICAxLjYuNS4KKworICogImdpdCBkaWZmIiB0cmFkaXRpb25hbGx5IHRyZWF0ZWQgdmFyaW91cyAiaWdub3JlIHdoaXRlc3BhY2UiIG9wdGlvbnMKKyAgIG9ubHkgYXMgYSB3YXkgdG8gZmlsdGVyIHRoZSBwYXRjaCBvdXRwdXQuICAiZ2l0IGRpZmYgLS1leGl0LWNvZGUgLWIiCisgICBleGl0ZWQgd2l0aCBub24temVybyBzdGF0dXMgZXZlbiBpZiBhbGwgY2hhbmdlcyB3ZXJlIGFib3V0IGNoYW5naW5nIHRoZQorICAgYW1vdW50IG9mIHdoaXRlc3BhY2UgYW5kIG5vdGhpbmcgZWxzZS4gIGFuZCAiZ2l0IGRpZmYgLWIiIHNob3dlZCB0aGUKKyAgICJkaWZmIC0tZ2l0IiBoZWFkZXIgbGluZSBmb3Igc3VjaCBhIGNoYW5nZSB3aXRob3V0IHBhdGNoIHRleHQuCisKKyAgIEluIDEuNy4wLCB0aGUgImlnbm9yZSB3aGl0ZXNwYWNlcyIgd2lsbCBhZmZlY3QgdGhlIHNlbWFudGljcyBvZiB0aGUKKyAgIGRpZmYgb3BlcmF0aW9uIGl0c2VsZi4gIEEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWZmZWN0IGFueXRoaW5nIGJ1dAorICAgd2hpdGVzcGFjZXMgd2lsbCBiZSByZXBvcnRlZCB3aXRoIHplcm8gZXhpdCBzdGF0dXMgd2hlbiBydW4gd2l0aAorICAgLS1leGl0LWNvZGUsIGFuZCB0aGVyZSB3aWxsIG5vdCBiZSAiZGlmZiAtLWdpdCIgaGVhZGVyIGZvciBzdWNoIGEKKyAgIGNoYW5nZS4KKworCitVcGRhdGVzIHNpbmNlIHYxLjYuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyAqIHZhcmlvdXMgZ2l0ayB1cGRhdGVzIGluY2x1ZGluZyB1c2Ugb2YgdGhlbWVkIHdpZGdldHMgdW5kZXIgVGsgOC41LAorICAgSmFwYW5lc2UgdHJhbnNsYXRpb24sIGEgZml4IHRvIGEgYnVnIHdoZW4gcnVubmluZyAiZ3VpIGJsYW1lIiBmcm9tCisgICBhIHN1YmRpcmVjdG9yeSwgZXRjLgorCisgKiB2YXJpb3VzIGdpdC1ndWkgdXBkYXRlcyBpbmNsdWRpbmcgbmV3IHRyYW5zbGF0aW9ucywgd20gc3RhdGVzIGZpeGVzLAorICAgVGsgYnVnIHdvcmthcm91bmQgYWZ0ZXIgcXVpdHRpbmcsIGltcHJvdmVkIGhldXJpc3RpY3MgdG8gdHJpZ2dlciBnYywKKyAgIGV0Yy4KKworICogdmFyaW91cyBnaXQtc3ZuIHVwZGF0ZXMuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBsZWFybmVkIGEgbmV3IG1vZGUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKKyAgIHRyYWRpdGlvbmFsICJkdW1iIGNvbW1pdCB3YWxrZXIiLgorCisocG9ydGFiaWxpdHkpCisKKyAqIGltYXAtc2VuZCBjYW4gYmUgYnVpbHQgb24gbWluZ3cgcG9ydC4KKworKHBlcmZvcm1hbmNlKQorCisgKiAiZ2l0IGRpZmYgLUIiIGhhcyBzbWFsbGVyIG1lbW9yeSBmb290cHJpbnQuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworICogVGhlIG9iamVjdCByZXBsYWNlIG1lY2hhbmlzbSBjYW4gYmUgYnlwYXNzZWQgd2l0aCAtLW5vLXJlcGxhY2Utb2JqZWN0cworICAgZ2xvYmFsIG9wdGlvbiBnaXZlbiB0byB0aGUgImdpdCIgcHJvZ3JhbS4KKworICogSW4gY29uZmlndXJhdGlvbiBmaWxlcywgYSBmZXcgdmFyaWFibGVzIHRoYXQgbmFtZSBwYXRocyBjYW4gYmVnaW4gd2l0aCB+LworICAgYW5kIH51c2VybmFtZS8gYW5kIHRoZXkgYXJlIGV4cGFuZGVkIGFzIGV4cGVjdGVkLgorCisgKiAiZ2l0IHN1YmNtZCAtaCIgbm93IHNob3dzIHNob3J0IHVzYWdlIGhlbHAgZm9yIG1hbnkgbW9yZSBzdWJjb21tYW5kcy4KKworICogImdpdCBiaXNlY3QgcmVzZXQiIGNhbiByZXNldCB0byBhbiBhcmJpdHJhcnkgY29tbWl0LgorCisgKiAiZ2l0IGNoZWNrb3V0IGZyb3R6IiB3aGVuIHRoZXJlIGlzIG5vIGxvY2FsIGJyYW5jaCAiZnJvdHoiIGJ1dCB0aGVyZQorICAgaXMgb25seSBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCAiZnJvdHoiIGlzIHRha2VuIGFzIGEgcmVxdWVzdCB0bworICAgc3RhcnQgdGhlIG5hbWVkIGJyYW5jaCBhdCB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLgorCisgKiAiZ2l0IGNvbW1pdCAtYy8tQy8tLWFtZW5kIiBjYW4gYmUgdG9sZCB3aXRoIGEgbmV3ICItLXJlc2V0LWF1dGhvciIgb3B0aW9uCisgICB0byBpZ25vcmUgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbiBpbiB0aGUgY29tbWl0IGl0IGlzIHRha2luZyB0aGUgbWVzc2FnZQorICAgZnJvbS4KKworICogImdpdCBkZXNjcmliZSIgY2FuIGJlIHRvbGQgdG8gYWRkICItZGlydHkiIHN1ZmZpeCB3aXRoICItLWRpcnR5IiBvcHRpb24uCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCAtLXN1Ym1vZHVsZSBvcHRpb24gdG8gc2hvdyBhIGxpc3Qgb2Ygb25lLWxpbmUgbG9ncworICAgaW5zdGVhZCBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBjb21taXQgb2JqZWN0IG5hbWVzLgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgdG8gaG9ub3IgZGlmZi5jb2xvci5mdW5jIGNvbmZpZ3VyYXRpb24gdG8gcGFpbnQKKyAgIGZ1bmN0aW9uIG5hbWUgaGludCBwcmludGVkIG9uIHRoZSBodW5rIGhlYWRlciAiQEAgLWosayArbCxtIEBAIiBsaW5lCisgICBpbiB0aGUgc3BlY2lmaWVkIGNvbG9yLgorCisgKiAiZ2l0IGZldGNoIiBsZWFybmVkIC0tYWxsIGFuZCAtLW11bHRpcGxlIG9wdGlvbnMsIHRvIHJ1biBmZXRjaCBmcm9tCisgICBtYW55IHJlcG9zaXRvcmllcywgYW5kIC0tcHJ1bmUgb3B0aW9uIHRvIHJlbW92ZSByZW1vdGUgdHJhY2tpbmcKKyAgIGJyYW5jaGVzIHRoYXQgd2VudCBzdGFsZS4gIFRoZXNlIG1ha2UgImdpdCByZW1vdGUgdXBkYXRlIiBhbmQgImdpdAorICAgcmVtb3RlIHBydW5lIiBsZXNzIG5lY2Vzc2FyeSAodGhlcmUgaXMgbm8gcGxhbiB0byByZW1vdmUgInJlbW90ZQorICAgdXBkYXRlIiBub3IgInJlbW90ZSBwcnVuZSIsIHRob3VnaCkuCisKKyAqICJnaXQgZnNjayIgYnkgZGVmYXVsdCBjaGVja3MgdGhlIHBhY2tmaWxlcyAoaS5lLiAiLS1mdWxsIiBpcyB0aGUKKyAgIGRlZmF1bHQpOyB5b3UgY2FuIHR1cm4gaXQgb2ZmIHdpdGggImdpdCBmc2NrIC0tbm8tZnVsbCIuCisKKyAqICJnaXQgZ3JlcCIgY2FuIHVzZSAtRiAoZml4ZWQgc3RyaW5ncykgYW5kIC1pIChpZ25vcmUgY2FzZSkgdG9nZXRoZXIuCisKKyAqIGltcG9ydC10YXJzIGNvbnRyaWJ1dGVkIGZhc3QtaW1wb3J0IGZyb250ZW5kIGxlYXJuZWQgbW9yZSB0eXBlcyBvZgorICAgY29tcHJlc3NlZCB0YXJiYWxscy4KKworICogImdpdCBpbnN0YXdlYiIga25vd3MgaG93IHRvIHRhbGsgd2l0aCBtb2RfY2dpZCB0byBhcGFjaGUyLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBzaG93cyB0aGUgbG9jYXRpb24gb2YgSEVBRCBhcyB3ZWxsLgorCisgKiAiZ2l0IGxvZyIgYW5kICJnaXQgcmV2LWxpc3QiIGxlYXJuZWQgdG8gdGFrZSByZXZzIGFuZCBwYXRoc3BlY3MgZnJvbQorICAgdGhlIHN0YW5kYXJkIGlucHV0IHdpdGggdGhlIG5ldyAiLS1zdGRpbiIgb3B0aW9uLgorCisgKiAiLS1wcmV0dHk9Zm9ybWF0IiBvcHRpb24gdG8gImxvZyIgZmFtaWx5IG9mIGNvbW1hbmRzIGxlYXJuZWQ6CisKKyAgIC4gdG8gd3JhcCB0ZXh0IHdpdGggdGhlICIldygpIiBzcGVjaWZpZXIuCisgICAuIHRvIHNob3cgcmVmbG9nIGluZm9ybWF0aW9uIHdpdGggIiVnW3NkRF0iIHNwZWNpZmllci4KKworICogImdpdCBub3RlcyIgY29tbWFuZCB0byBhbm5vdGF0ZSBleGlzdGluZyBjb21taXRzLgorCisgKiAiZ2l0IG1lcmdlIiAoYW5kICJnaXQgcHVsbCIpIGxlYXJuZWQgLS1mZi1vbmx5IG9wdGlvbiB0byBtYWtlIGl0IGZhaWwKKyAgIGlmIHRoZSBtZXJnZSBkb2VzIG5vdCByZXN1bHQgaW4gYSBmYXN0LWZvcndhcmQuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIHVzZSBwNG1lcmdlLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbGVhcm5lZCAicmV3b3JkIiB0aGF0IGFjdHMgbGlrZSAiZWRpdCIgYnV0IGltbWVkaWF0ZWx5CisgICBzdGFydHMgYW4gZWRpdG9yIHRvIHR3ZWFrIHRoZSBsb2cgbWVzc2FnZSB3aXRob3V0IHJldHVybmluZyBjb250cm9sIHRvCisgICB0aGUgc2hlbGwsIHdoaWNoIGlzIGRvbmUgYnkgImVkaXQiIHRvIGdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gdHdlYWsgdGhlCisgICBjb250ZW50cy4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gYmUgdG9sZCB3aXRoICItLWVudmVsb3BlLXNlbmRlcj1hdXRvIiB0byB1c2UgdGhlCisgICBzYW1lIGFkZHJlc3MgYXMgIkZyb206IiBhZGRyZXNzIGFzIHRoZSBlbnZlbG9wZSBzZW5kZXIgYWRkcmVzcy4KKworICogImdpdCBzZW5kLWVtYWlsIiB3aWxsIGlzc3VlIGEgd2FybmluZyB3aGVuIGl0IGRlZmF1bHRzIHRvIHRoZQorICAgLS1jaGFpbi1yZXBseS10byBiZWhhdmlvdXIgd2l0aG91dCBiZWluZyB0b2xkIGJ5IHRoZSB1c2VyIGFuZAorICAgaW5zdHJ1Y3RzIHRvIHByZXBhcmUgZm9yIHRoZSBjaGFuZ2Ugb2YgdGhlIGRlZmF1bHQgaW4gMS43LjAgcmVsZWFzZS4KKworICogSW4gImdpdCBzdWJtb2R1bGUgYWRkIDxyZXBvc2l0b3J5PiA8cGF0aD4iLCA8cGF0aD4gaXMgbm93IG9wdGlvbmFsIGFuZAorICAgaW5mZXJyZWQgZnJvbSA8cmVwb3NpdG9yeT4gdGhlIHNhbWUgd2F5ICJnaXQgY2xvbmUgPHJlcG9zaXRvcnk+IiBkb2VzLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCB0byByZWFkIFNWTiAxLjUrIGFuZCBTVksgbWVyZ2UgdGlja2V0cy4KKworICogImdpdCBzdm4iIGxlYXJuZWQgdG8gcmVjcmVhdGUgZW1wdHkgZGlyZWN0b3JpZXMgdHJhY2tlZCBvbmx5IGJ5IFNWTi4KKworICogImdpdHdlYiIgY2FuIG9wdGlvbmFsbHkgcmVuZGVyIGl0cyAiYmxhbWUiIG91dHB1dCBpbmNyZW1lbnRhbGx5ICh0aGlzCisgICByZXF1aXJlcyBKYXZhU2NyaXB0IG9uIHRoZSBjbGllbnQgc2lkZSkuCisKKyAqIEF1dGhvciBuYW1lcyBzaG93biBpbiBnaXR3ZWIgb3V0cHV0IGFyZSBsaW5rcyB0byBzZWFyY2ggY29tbWl0cyBieSB0aGUKKyAgIGF1dGhvci4KKworRml4ZXMgc2luY2UgdjEuNi41CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjUuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmY1YmNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4xLnR4dApAQCAtMCwwICsxLDM1IEBACitHaXQgdjEuNy4wLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW4gYSBmcmVzaGx5IGNyZWF0ZWQgcmVwb3NpdG9yeSAicmV2LXBhcnNlIEhFQUReMCIgY29tcGxhaW5lZCB0aGF0CisgICBpdCBpcyBkYW5nbGluZyBzeW1yZWYsIGV2ZW4gdGhvdWdoICJyZXYtcGFyc2UgSEVBRCIgZGlkbid0LgorCisgKiAiZ2l0IHNob3cgOm5vLXN1Y2gtbmFtZSIgdHJpZWQgdG8gYWNjZXNzIHRoZSBpbmRleCB3aXRob3V0IGJvdW5kcworICAgY2hlY2ssIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgc2VnZmF1bHQuCisKKyAqIE1lc3NhZ2UgZnJvbSAiZ2l0IGNoZXJyeS1waWNrIiB3YXMgaGFyZGVyIHRvIHJlYWQgYW5kIHVzZSB0aGFuIG5lY2Vzc2FyeQorICAgd2hlbiBpdCBzdG9wcGVkIGR1ZSB0byBjb25mbGljdGluZyBjaGFuZ2VzLgorCisgKiBXZSByZWZlcnJlZCB0byAiLmdpdC9yZWZzLyIgdGhyb3VnaG91dCB0aGUgZG9jdW1lbnRhdGlvbiB3aGVuIHdlCisgICBtZWFudCB0byB0YWxrIGFib3V0IGFic3RyYWN0IG5vdGlvbiBvZiAicmVmIG5hbWVzcGFjZSIuICBCZWNhdXNlCisgICBwZW9wbGUncyByZXBvc2l0b3JpZXMgb2Z0ZW4gaGF2ZSBwYWNrZWQgcmVmcyB0aGVzZSBkYXlzLCB0aGlzIHdhcworICAgY29uZnVzaW5nLgorCisgKiAiZ2l0IGRpZmYgLS1vdXRwdXQ9L3BhdGgvdGhhdC9jYW5ub3QvYmUvd3JpdHRlbiIgZGlkIG5vdCBjb3JyZWN0bHkKKyAgIGVycm9yIG91dC4KKworICogImdpdCBncmVwIC1lIC1wYXR0ZXJuLXRoYXQtYmVnaW4td2l0aC1kYXNoIHBhdGhzLi4uIiBjb3VsZCBub3QgYmUKKyAgIHNwZWxsZWQgYXMgImdpdCBncmVwIC0tIC1wYXR0ZXJuLXRoYXQtYmVnaW4td2l0aC1kYXNoIHBhdGhzLi4uIiB3aGljaAorICAgd291bGQgYmUgYSBHTlUgd2F5IHRvIHVzZSAiLS0iIGFzICJlbmQgb2Ygb3B0aW9ucyIuCisKKyAqICJnaXQgZ3JlcCIgY29tcGlsZWQgd2l0aCB0aHJlYWRpbmcgc3VwcG9ydCB0cmllZCB0byBhY2Nlc3MgYW4KKyAgIHVuaW5pdGlhbGl6ZWQgbXV0ZXggb24gYm94ZXMgd2l0aCBhIHNpbmdsZSBDUFUuCisKKyAqICJnaXQgc3Rhc2ggcG9wIC1xIC0taW5kZXgiIGZhaWxlZCBiZWNhdXNlIHRoZSB1bm5lY2Vzc2FyeSAtLWluZGV4CisgICBvcHRpb24gd2FzIHByb3BhZ2F0ZWQgdG8gImdpdCBzdGFzaCBkcm9wIiB0aGF0IGlzIGludGVybmFsbHkgcnVuIGF0IHRoZQorICAgZW5kLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZWQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjIudHh0CkBAIC0wLDAgKzEsNDAgQEAKK0dpdCB2MS43LjAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogR0lUX1BBR0VSIHdhcyBub3QgaG9ub3JlZCBjb25zaXN0ZW50bHkgYnkgc29tZSBzY3JpcHRlZCBQb3JjZWxhaW5zLCBtb3N0CisgICBub3RhYmx5ICJnaXQgYW0iLgorCisgKiB1cGRhdGluZyB3b3JraW5nIHRyZWUgZmlsZXMgYWZ0ZXIgdGVsbGluZyBnaXQgdG8gYWRkIHRoZW0gdG8gdGhlCisgICBpbmRleCBhbmQgd2hpbGUgaXQgaXMgc3RpbGwgd29ya2luZyBjcmVhdGVkIGdhcmJhZ2Ugb2JqZWN0IGZpbGVzIGluCisgICB0aGUgcmVwb3NpdG9yeSB3aXRob3V0IGRpYWdub3NpbmcgaXQgYXMgYW4gZXJyb3IuCisKKyAqICJnaXQgYmlzZWN0IC0tIHBhdGhzcGVjLi4uIiBkaWQgbm90IGRpYWdub3NlIGFuIGVycm9yIGNvbmRpdGlvbiBwcm9wZXJseSB3aGVuCisgICB0aGUgc2ltcGxpZmljYXRpb24gd2l0aCBnaXZlbiBwYXRoc3BlYyBtYWRlIHRoZSBoaXN0b3J5IGVtcHR5LgorCisgKiAiZ2l0IHJldi1saXN0IC0tY2hlcnJ5LXBpY2sgQS4uLkIiIG5vdyBoYXMgYW4gb2J2aW91cyBvcHRpbWl6YXRpb24gd2hlbiB0aGUKKyAgIGhpc3RvcmllcyBoYXZlbid0IGRpdmVyZ2VkIChpLmUuIHdoZW4gb25lIGVuZCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgb3RoZXIpLgorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCAtdyIgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBkaWRuJ3Qgd29yayB3aXRoIGEgbGFyZ2UgaW5wdXQsIGFzIGl0IGxhY2tlZCBzdXBwb3J0CisgICBmb3IgcHJvZHVjaW5nIHRoZSBwYWNrIGluZGV4IGluIHYyIGZvcm1hdC4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZG4ndCB1c2UgQ1JMRiBsaW5lIGVuZGluZ3Mgb3ZlciB0aGUgaW1hcCBwcm90b2NvbAorICAgd2hlbiBzdG9yaW5nIGl0cyBwYXlsb2FkIHRvIHRoZSBkcmFmdCBib3gsIHZpb2xhdGluZyBSRkMgMzUwMS4KKworICogImdpdCBsb2cgLS1mb3JtYXQ9JyV3KHgseSx6KSViJyIgYW5kIGZyaWVuZHMgdGhhdCByZXdyYXAgbWVzc2FnZQorICAgaGFzIGJlZW4gb3B0aW1pemVkIGZvciB1dGYtOCBwYXlsb2FkLgorCisgKiBFcnJvciBtZXNzYWdlcyBnZW5lcmF0ZWQgb24gdGhlIHJlY2VpdmluZyBlbmQgZGlkIG5vdCBjb21lIGJhY2sgdG8gImdpdAorICAgcHVzaCIuCisKKyAqICJnaXQgc3RhdHVzIiBpbiAxLjcuMCBsYWNrZWQgdGhlIG9wdGltaXphdGlvbiB3ZSB1c2VkIHRvIGhhdmUgaW4gMS42Llggc2VyaWVzCisgICB0byBzcGVlZCB1cCBzY2FubmluZyBvZiBsYXJnZSB3b3JraW5nIHRyZWUuCisKKyAqICJnaXR3ZWIiIGRpZCBub3QgZGlhZ25vc2UgcGFyc2luZyBlcnJvcnMgcHJvcGVybHkgd2hpbGUgcmVhZGluZyBpdHMgY29uZmlndXJhdGlvbgorICAgZmlsZS4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjM1NTczCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4zLnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgdjEuNy4wLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9iamVjdCBmaWxlcyBhcmUgY3JlYXRlZCBpbiBhIG1vcmUgQUNMIGZyaWVuZGx5IHdheSBpbiByZXBvc2l0b3JpZXMKKyAgIHdoZXJlIGdyb3VwIHBlcm1pc3Npb24gaXMgQUNMIGNvbnRyb2xsZWQuCisKKyAqICJnaXQgYWRkIC1pIiBkaWRuJ3QgaGFuZGxlIGEgZGVsZXRlZCBwYXRoIHZlcnkgd2VsbC4KKworICogImdpdCBibGFtZSIgcGFkZGVkIGxpbmUgbnVtYmVycyB3aXRoIG9uZSBleHRyYSBTUCB3aGVuIHRoZSB0b3RhbCBudW1iZXIKKyAgIG9mIGxpbmVzIHdhcyBvbmUgbGVzcyB0aGFuIG11bHRpcGxlIG9mIHRlbiBkdWUgdG8gYW4gb2ZmLWJ5LW9uZSBlcnJvci4KKworICogImdpdCBmZXRjaCAtLWFsbC8tLW11bHRpIiB1c2VkIHRvIGRpc2NhcmQgaW5mb3JtYXRpb24gZm9yIHJlbW90ZXMgdGhhdAorICAgYXJlIGZldGNoZWQgZWFybGllci4KKworICogImdpdCBsb2cgLS1hdXRob3I9bWUgLS1ncmVwPWl0IiB0cmllZCB0byBmaW5kIGNvbW1pdHMgdGhhdCBoYXZlICJpdCIKKyAgIG9yIGFyZSB3cml0dGVuIGJ5ICJtZSIsIGluc3RlYWQgb2YgdGhlIG9uZXMgdGhhdCBoYXZlICJpdCIgX2FuZF8gYXJlCisgICB3cml0dGVuIGJ5ICJtZSIuCisKKyAqICJnaXQgbG9nIC1nIGJyYW5jaCIgbWlzYmVoYXZlZCB3aGVuIHRoZXJlIHdhcyBubyBlbnRyaWVzIGluIHRoZSByZWZsb2cKKyAgIGZvciB0aGUgbmFtZWQgYnJhbmNoLgorCisgKiAiZ2l0IG1haWxpbmZvIiAoaGVuY2UgImdpdCBhbSIpIGluY29ycmVjdGx5IHJlbW92ZWQgaW5pdGlhbCBpbmRlbnQgZnJvbQorICAgcGFyYWdyYXBocy4KKworICogImdpdCBwcnVuZSIgYW5kICJnaXQgcmVmbG9nIiAoaGVuY2UgImdpdCBnYyIgYXMgd2VsbCkgZGlkbid0IGhvbm9yCisgICBhbiBpbnN0cnVjdGlvbiBuZXZlciB0byBleHBpcmUgYnkgc2V0dGluZyBnYy5yZWZsb2dleHBpcmUgdG8gbmV2ZXIuCisKKyAqICJnaXQgcHVzaCIgbWlzYmVoYXZlZCB3aGVuIGJyYW5jaC48bmFtZT4ubWVyZ2Ugd2FzIGNvbmZpZ3VyZWQgd2l0aG91dAorICAgbWF0Y2hpbmcgYnJhbmNoLjxuYW1lPi5yZW1vdGUuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3ZjYwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNC50eHQKQEAgLTAsMCArMSwyNyBAQAorR2l0IHYxLjcuMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBPcHRpbWl6ZWQgbnRvaGwvaHRvbmwgb24gYmlnLWVuZGlhbiBtYWNoaW5lcyB3ZXJlIGJyb2tlbi4KKworICogQ29sb3IgdmFsdWVzIGdpdmVuIHRvICJjb2xvci48Y21kPi48c2xvdD4iIGNvbmZpZ3VyYXRpb24gY2FuIG5vdyBoYXZlCisgICBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZXMgKGUuZy4gImJvbGQgdWwiKS4KKworICogImdpdCBhZGQgLXUgbm9uZXhpc3RlbnQtcGF0aCIgZGlkIG5vdCBjb21wbGFpbi4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiBkaWRuJ3Qgd29yayB3ZWxsIHdoZW4gYW4gZWFybHkgcGF0Y2ggaW4KKyAgIGEgcGF0Y2ggc2VyaWVzIGFkZHMgdHJhaWxpbmcgYmxhbmsgbGluZXMgYW5kIGEgbGF0ZXIgb25lIGRlcGVuZGVkIG9uCisgICBzdWNoIGEgYmxvY2sgb2YgYmxhbmsgbGluZXMgYXQgdGhlIGVuZC4KKworICogImdpdCBmYXN0LWV4cG9ydCIgZGlkbid0IGNoZWNrIGVycm9yIHN0YXR1cyBhbmQgc3RvcCB3aGVuIG1hcmtzIGZpbGUKKyAgIGNhbm5vdCBiZSBvcGVuZWQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIiBnYXZlIHVud2FycmFudGVkIGVycm9ycworICAgd2hlbiB0aGUgcmFuZ2Ugd2FzIGVtcHR5LCBpbnN0ZWFkIG9mIHNpbGVudGx5IGZpbmlzaGluZy4KKworICogImdpdCByZW1vdGUgcHJ1bmUiIGRpZCBub3QgZGV0ZWN0IHJlbW90ZSB0cmFja2luZyByZWZzIHRoYXQgYmVjYW1lCisgICBkYW5nbGluZyBjb3JyZWN0bHkuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0OWM5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNS50eHQKQEAgLTAsMCArMSwyNiBAQAorR2l0IHYxLjcuMC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGRhZW1vbiIgZmFpbGVkIHRvIGNvbXBpbGUgb24gcGxhdGZvcm1zIHdpdGhvdXQgc29ja2FkZHJfc3RvcmFnZSB0eXBlLgorCisgKiBPdXRwdXQgZnJvbSAiZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUiIHdhcyB1bnBhcnNhYmxlIHdoZW4gYQorICAgY29tbWl0IGRpZCBub3QgaGF2ZSBhbnkgbWVzc2FnZSwgd2hpY2ggaXMgYWJub3JtYWwgYnV0IHBvc3NpYmxlIGluIGEKKyAgIHJlcG9zaXRvcnkgY29udmVydGVkIGZyb20gZm9yZWlnbiBzY20uCisKKyAqICJnaXQgc3Rhc2ggc2hvdyA8Y29tbWl0LXRoYXQtaXMtbm90LWEtc3Rhc2g+IiBnYXZlIGFuIGVycm9yIG1lc3NhZ2UKKyAgIHRoYXQgd2FzIG5vdCBzbyB1c2VmdWwuICBSZXdvcmRlZCB0aGUgbWVzc2FnZSB0byAiPGl0PiBpcyBub3QgYQorICAgc3Rhc2giLgorCisgKiBQeXRob24gc2NyaXB0cyBpbiBjb250cmliLyBhcmVhIG5vdyBzdGFydCB3aXRoICIjIS91c3IvYmluL2VudiBweXRob24iCisgICB0byBob25vciB1c2VyJ3MgUEFUSC4KKworICogImdpdCBpbWFwLXNlbmQiIHVzZWQgdG8gbWlzdGFrZSBhbnkgbGluZSB0aGF0IGJlZ2lucyB3aXRoICJGcm9tICIgYXMgYQorICAgbWVzc2FnZSBzZXBhcmF0b3IgaW4gZm9ybWF0LXBhdGNoIG91dHB1dC4KKworICogU21hcnQgaHR0cCBzZXJ2ZXIgYmFja2VuZCBmYWlsZWQgdG8gcmVwb3J0IGFuIGludGVybmFsIHNlcnZlciBlcnJvciBhbmQKKyAgIGluZmluaXRlbHkgbG9vcGVkIGluc3RlYWQgYWZ0ZXIgb3V0cHV0IHBpcGUgd2FzIGNsb3NlZC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjg1MmI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC42LnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgdjEuNy4wLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZGlmZiAtLXN0YXQiIHVzZWQgImludCIgdG8gY291bnQgdGhlIHNpemUgb2YgZGlmZmVyZW5jZXMsCisgICB3aGljaCBjb3VsZCByZXN1bHQgaW4gb3ZlcmZsb3dpbmcuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1hYmJyZXYtY29tbWl0IiBkZWZhdWx0ZWQgdG8gNDAtYnl0ZSBhYmJyZXZpYXRpb25zLCB1bmxpa2UKKyAgIG5ld2VyIHRvb2xzIGluIHRoZSBnaXQgdG9vbHNldC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGNiN2NhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC43LnR4dApAQCAtMCwwICsxLDE2IEBACitHaXQgdjEuNy4wLjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJtYWtlIE5PX0NVUkw9Tm9UaGFua3MgaW5zdGFsbCIgd2FzIGJyb2tlbi4KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggY29uZi52YXIiIHRvIGF0dGVtcHQgdG8gZXhwYW5kIGEgdmFyaWFibGUgY29uZi52YXIKKyAgIHRoYXQgdXNlcyAifi8iIHNob3J0LWhhbmQgc2VnZmF1bHRlZCB3aGVuICRIT01FIGVudmlyb25tZW50IHZhcmlhYmxlCisgICB3YXMgbm90IHNldC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjgudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC44LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA1YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC44LnR4dApAQCAtMCwwICsxLDEwIEBACitHaXQgdjEuNy4wLjggUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gYmFja3BvcnQgc3VwcG9ydCBmb3IgdGhlIG5ldyAiYWRkLmlnbm9yZUVycm9ycyIKK25hbWUgZ2l2ZW4gdG8gdGhlIGV4aXN0aW5nICJhZGQuaWdub3JlLWVycm9ycyIgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworVGhlIG5leHQgdmVyc2lvbiwgR2l0IDEuNy40LCBhbmQgZnV0dXJlIHZlcnNpb25zLCB3aWxsIHN1cHBvcnQgYm90aAorb2xkIGFuZCBpbmNvcnJlY3QgbmFtZSBhbmQgdGhlIG5ldyBjb3JyZWN0ZWQgbmFtZSwgYnV0IHdpdGhvdXQgdGhpcworYmFja3BvcnQsIHVzZXJzIHdobyB3YW50IHRvIHVzZSB0aGUgbmV3IG5hbWUgImFkZC5pZ25vcmVFcnJvcnMiIGluCit0aGVpciByZXBvc2l0b3JpZXMgY2Fubm90IHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjkudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC45LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmIzMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC45LnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2MS43LjAuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI4YzBiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC50eHQKQEAgLTAsMCArMSwyMTQgQEAKK0dpdCB2MS43LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGVzIG9uIGJlaGF2aW91ciBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IChpLmUuIHBvaW50ZWQgYXQgYnkKKyAgIEhFQUQgaW4gYSByZXBvc2l0b3J5IHRoYXQgaXMgbm90IGJhcmUpIGlzIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworICAgU2ltaWxhcmx5LCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaCAka2lsbGVkCisgICBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgd2hlbiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorICAgYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LgorCisgICBTZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGFuZAorICAgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCB0byAnaWdub3JlJyBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkKKyAgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZXNlIHNhZmV0eSBmZWF0dXJlcy4KKworICogImdpdCBzZW5kLWVtYWlsIiBkb2VzIG5vdCBtYWtlIGRlZXAgdGhyZWFkcyBieSBkZWZhdWx0IHdoZW4gc2VuZGluZyBhCisgICBwYXRjaCBzZXJpZXMgd2l0aCBtb3JlIHRoYW4gdHdvIG1lc3NhZ2VzLiAgQWxsIG1lc3NhZ2VzIHdpbGwgYmUgc2VudAorICAgYXMgYSByZXBseSB0byB0aGUgZmlyc3QgbWVzc2FnZSwgaS5lLiBjb3ZlciBsZXR0ZXIuCisKKyAgIEl0IGhhcyBiZWVuIHBvc3NpYmxlIGFscmVhZHkgdG8gY29uZmlndXJlIHNlbmQtZW1haWwgdG8gc2VuZCAic2hhbGxvdyB0aHJlYWQiCisgICBieSBzZXR0aW5nIHNlbmRlbWFpbC5jaGFpbnJlcGx5dG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBmYWxzZS4gIFRoZQorICAgb25seSB0aGluZyB0aGlzIHJlbGVhc2UgZG9lcyBpcyB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgd2hlbiB5b3UgaGF2ZW4ndAorICAgY29uZmlndXJlZCB0aGF0IHZhcmlhYmxlLgorCisgKiAiZ2l0IHN0YXR1cyIgaXMgbm90ICJnaXQgY29tbWl0IC0tZHJ5LXJ1biIgYW55bW9yZS4gIFRoaXMgY2hhbmdlIGRvZXMKKyAgIG5vdCBhZmZlY3QgeW91IGlmIHlvdSBydW4gdGhlIGNvbW1hbmQgd2l0aG91dCBhcmd1bWVudC4KKworICogImdpdCBkaWZmIiB0cmFkaXRpb25hbGx5IHRyZWF0ZWQgdmFyaW91cyAiaWdub3JlIHdoaXRlc3BhY2UiIG9wdGlvbnMKKyAgIG9ubHkgYXMgYSB3YXkgdG8gZmlsdGVyIHRoZSBwYXRjaCBvdXRwdXQuICAiZ2l0IGRpZmYgLS1leGl0LWNvZGUgLWIiCisgICBleGl0ZWQgd2l0aCBub24temVybyBzdGF0dXMgZXZlbiBpZiBhbGwgY2hhbmdlcyB3ZXJlIGFib3V0IGNoYW5naW5nIHRoZQorICAgYW1vdW50IG9mIHdoaXRlc3BhY2UgYW5kIG5vdGhpbmcgZWxzZTsgIGFuZCAiZ2l0IGRpZmYgLWIiIHNob3dlZCB0aGUKKyAgICJkaWZmIC0tZ2l0IiBoZWFkZXIgbGluZSBmb3Igc3VjaCBhIGNoYW5nZSB3aXRob3V0IHBhdGNoIHRleHQuCisKKyAgIEluIHRoaXMgcmVsZWFzZSwgdGhlICJpZ25vcmUgd2hpdGVzcGFjZXMiIG9wdGlvbnMgYWZmZWN0IHRoZSBzZW1hbnRpY3MKKyAgIG9mIHRoZSBkaWZmIG9wZXJhdGlvbi4gIEEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWZmZWN0IGFueXRoaW5nIGJ1dAorICAgd2hpdGVzcGFjZXMgaXMgcmVwb3J0ZWQgd2l0aCB6ZXJvIGV4aXQgc3RhdHVzIHdoZW4gcnVuIHdpdGgKKyAgIC0tZXhpdC1jb2RlLCBhbmQgdGhlcmUgaXMgbm8gImRpZmYgLS1naXQiIGhlYWRlciBmb3Igc3VjaCBhIGNoYW5nZS4KKworICogRXh0ZXJuYWwgZGlmZiBhbmQgdGV4dGNvbnYgaGVscGVycyBhcmUgbm93IGV4ZWN1dGVkIHVzaW5nIHRoZSBzaGVsbC4KKyAgIFRoaXMgbWFrZXMgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgcHJvZ3JhbXMgZXhlY3V0ZWQgYnkgZ2l0LCBhbmQKKyAgIGFsbG93cyB5b3UgdG8gcGFzcyBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyB0byB0aGUgaGVscGVycy4gQW55IGhlbHBlcgorICAgcGF0aHMgY29udGFpbmluZyBzcGFjZXMgb3Igb3RoZXIgbWV0YWNoYXJhY3RlcnMgbm93IG5lZWQgdG8gYmUKKyAgIHNoZWxsLXF1b3RlZC4gIFRoZSBhZmZlY3RlZCBoZWxwZXJzIGFyZSBHSVRfRVhURVJOQUxfRElGRiBpbiB0aGUKKyAgIGVudmlyb25tZW50LCBhbmQgZGlmZi4qLmNvbW1hbmQgYW5kIGRpZmYuKi50ZXh0Y29udiBpbiB0aGUgY29uZmlnCisgICBmaWxlLgorCisgKiBUaGUgLS1tYXgtcGFjay1zaXplIGFyZ3VtZW50IHRvICdnaXQgcmVwYWNrJywgJ2dpdCBwYWNrLW9iamVjdHMnLCBhbmQKKyAgICdnaXQgZmFzdC1pbXBvcnQnIHdhcyBhc3N1bWluZyB0aGUgcHJvdmlkZWQgc2l6ZSB0byBiZSBleHByZXNzZWQgaW4gTWlCLAorICAgdW5saWtlIHRoZSBjb3JyZXNwb25kaW5nIGNvbmZpZyB2YXJpYWJsZSBhbmQgb3RoZXIgc2ltaWxhciBvcHRpb25zIGFjY2VwdGluZworICAgYSBzaXplIHZhbHVlLiAgSXQgaXMgbm93IGV4cGVjdGluZyBhIHNpemUgZXhwcmVzc2VkIGluIGJ5dGVzLCB3aXRoIGEgcG9zc2libGUKKyAgIHVuaXQgc3VmZml4IG9mICdrJywgJ20nLCBvciAnZycuCisKK1VwZGF0ZXMgc2luY2UgdjEuNi42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogImdpdCBmYXN0LWltcG9ydCIgdXBkYXRlczsgYWRkcyAib3B0aW9uIiBhbmQgImZlYXR1cmUiIHRvIGRldGVjdCB0aGUKKyAgIG1pc21hdGNoIGJldHdlZW4gZmFzdC1pbXBvcnQgYW5kIHRoZSBmcm9udGVuZHMgdGhhdCBwcm9kdWNlIHRoZSBpbnB1dAorICAgc3RyZWFtLgorCisgKiAiZ2l0IHN2biIgc3VwcG9ydCBvZiBzdWJ2ZXJzaW9uICJtZXJnZSB0aWNrZXRzIiBhbmQgbWlzY2VsbGFuZW91cyBmaXhlcy4KKworICogImdpdGsiIGFuZCAiZ2l0IGd1aSIgdHJhbnNsYXRpb24gdXBkYXRlcy4KKworICogImdpdHdlYiIgdXBkYXRlcyAoY29kZSBjbGVhbi11cCwgbG9hZCBjaGVja2luZyBldGMuKQorCisocG9ydGFiaWxpdHkpCisKKyAqIFNvbWUgbW9yZSBNU1ZDIHBvcnRhYmlsaXR5IHBhdGNoZXMgZm9yIG1zeXNnaXQgcG9ydC4KKworICogTWluaW11bSBQdGhyZWFkcyBlbXVsYXRpb24gZm9yIG1zeXNnaXQgcG9ydC4KKworKHBlcmZvcm1hbmNlKQorCisgKiBNb3JlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHBhdGNoZXMgZm9yIG1zeXNnaXQgcG9ydC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBNb3JlIGNvbW1hbmRzIGxlYXJuZWQgIi0tcXVpZXQiIGFuZCAiLS1bbm8tXXByb2dyZXNzIiBvcHRpb25zLgorCisgKiBWYXJpb3VzIGNvbW1hbmRzIGdpdmVuIGJ5IHRoZSBlbmQgdXNlciAoZS5nLiBkaWZmLnR5cGUudGV4dGNvbnYsCisgICBhbmQgR0lUX0VESVRPUikgY2FuIGJlIHNwZWNpZmllZCB3aXRoIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuICBFLmcuIGl0CisgICBpcyBub3cgcG9zc2libGUgdG8gc2F5ICJbZGlmZiAidXRmOGRvYyJdIHRleHRjb252ID0gbmtmIC13Ii4KKworICogInNwYXJzZSBjaGVja291dCIgZmVhdHVyZSBhbGxvd3Mgb25seSBwYXJ0IG9mIHRoZSB3b3JrIHRyZWUgdG8gYmUKKyAgIGNoZWNrZWQgb3V0LgorCisgKiBIVFRQIHRyYW5zZmVyIGNhbiB1c2UgYXV0aGVudGljYXRpb24gc2NoZW1lIG90aGVyIHRoYW4gYmFzaWMKKyAgIChpLmUuL2UuZy4gZGlnZXN0KS4KKworICogU3dpdGNoaW5nIGZyb20gYSB2ZXJzaW9uIG9mIHN1cGVycHJvamVjdCB0aGF0IHVzZWQgdG8gaGF2ZSBhIHN1Ym1vZHVsZQorICAgdG8gYW5vdGhlciB2ZXJzaW9uIG9mIHN1cGVycHJvamVjdCB0aGF0IG5vIGxvbmdlciBoYXMgaXQgZGlkIG5vdCByZW1vdmUKKyAgIHRoZSBzdWJtb2R1bGUgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkIChuYW1lbHksIHdoZW4geW91IGFyZSBub3QKKyAgIGludGVyZXN0ZWQgaW4gdGhlIHN1Ym1vZHVsZSBhdCBhbGwgYW5kIGRpZG4ndCBjbG9uZS9jaGVja291dCkuCisKKyAqIEEgbmV3IGF0dHJpYnV0ZSBjb25mbGljdC1tYXJrZXItc2l6ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHNpemUgb2YKKyAgIHRoZSBjb25mbGljdCBtYXJrZXJzIGZyb20gdGhlIGRlZmF1bHQgNzsgdGhpcyBpcyB1c2VmdWwgd2hlbiB0cmFja2VkCisgICBjb250ZW50cyAoZS5nLiBnaXQtbWVyZ2UgZG9jdW1lbnRhdGlvbikgaGF2ZSBzdHJpbmdzIHRoYXQgcmVzZW1ibGUgdGhlCisgICBjb25mbGljdCBtYXJrZXJzLgorCisgKiBBIG5ldyBzeW50YXggIjxicmFuY2g+QHt1cHN0cmVhbX0iIGNhbiBiZSB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgdG8KKyAgIHN1YnN0aXR1dGUgdGhlIG5hbWUgb2YgdGhlICJ1cHN0cmVhbSIgb2YgdGhlIGJyYW5jaC4gIE1pc3NpbmcgYnJhbmNoCisgICBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2gsIHNvICJnaXQgZmV0Y2ggJiYgZ2l0IG1lcmdlIEB7dXBzdHJlYW19IgorICAgd2lsbCBiZSBlcXVpdmFsZW50IHRvICJnaXQgcHVsbCIuCisKKyAqICJnaXQgYW0gLS1yZXNvbHZlZCIgaGFzIGEgc3lub255bSAiZ2l0IGFtIC0tY29udGludWUiLgorCisgKiAiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSIgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSAoc3VycHJpc2UhKSB1cHN0cmVhbSwKKyAgIGkuZS4gd2hlcmUgdGhlIGJyYW5jaCBpcyBzdXBwb3NlZCB0byBwdWxsIGFuZCBtZXJnZSBmcm9tIChvciByZWJhc2Ugb250bykuCisKKyAqICJnaXQgY2hlY2tvdXQgQS4uLkIiIGlzIGEgd2F5IHRvIGRldGFjaCBIRUFEIGF0IHRoZSBtZXJnZSBiYXNlIGJldHdlZW4KKyAgIEEgYW5kIEIuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0gcGF0aCIgdG8gcmVzZXQgdGhlIHdvcmsgdHJlZSBmaWxlIGJhY2sgaW50byB0aGUKKyAgIGNvbmZsaWN0ZWQgc3RhdGUgd29ya3MgZXZlbiB3aGVuIHlvdSBhbHJlYWR5IHJhbiAiZ2l0IGFkZCBwYXRoIiBhbmQKKyAgIHJlc29sdmVkIHRoZSBjb25mbGljdHMuCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT0nPGRhdGU+JyIgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGF1dGhvciBkYXRlCisgICBqdXN0IGxpa2UgImdpdCBjb21taXQgLS1hdXRob3I9JzxuYW1lPiA8ZW1haWw+JyIgY2FuIGJlIHVzZWQgdG8KKyAgIG92ZXJyaWRlIHRoZSBhdXRob3IgaWRlbnRpdHkuCisKKyAqICJnaXQgY29tbWl0IC0tbm8tc3RhdHVzIiBjYW4gYmUgdXNlZCB0byBvbWl0IHRoZSBsaXN0aW5nIG9mIHRoZSBpbmRleAorICAgYW5kIHRoZSB3b3JrIHRyZWUgc3RhdHVzIGluIHRoZSBlZGl0b3IgdXNlZCB0byBwcmVwYXJlIHRoZSBsb2cgbWVzc2FnZS4KKworICogImdpdCBjb21taXQiIHdhcm5zIGEgYml0IG1vcmUgYWdncmVzc2l2ZWx5IHVudGlsIHlvdSBjb25maWd1cmUgdXNlci5lbWFpbCwKKyAgIHdob3NlIGRlZmF1bHQgdmFsdWUgYWxtb3N0IGFsd2F5cyBpcyBub3QgKGFuZCBmdW5kYW1lbnRhbGx5IGNhbm5vdCBiZSkKKyAgIHdoYXQgeW91IHdhbnQuCisKKyAqICJnaXQgZGlmZnRvb2wiIGhhcyBiZWVuIGV4dGVuZGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGludGVncmF0ZSBpdAorICAgd2l0aCBnaXRrLgorCisgKiAiZ2l0IGZldGNoIC0tYWxsIiBjYW4gbm93IGJlIHVzZWQgaW4gcGxhY2Ugb2YgImdpdCByZW1vdGUgdXBkYXRlIi4KKworICogImdpdCBncmVwIiBkb2VzIG5vdCByZWx5IG9uIGV4dGVybmFsIGdyZXAgYW55bW9yZS4gIEl0IGNhbiB1c2UgbW9yZSB0aGFuCisgICBvbmUgdGhyZWFkIHRvIGFjY2VsZXJhdGUgdGhlIG9wZXJhdGlvbi4KKworICogImdpdCBncmVwIiBsZWFybmVkICItLXF1aWV0IiBvcHRpb24uCisKKyAqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBsZWFybmVkICItLWdsb2I9aGVhZHMvKiIgc3ludGF4IHRoYXQgaXMgYSBtb3JlCisgICBmbGV4aWJsZSB3YXkgdG8gY29tcGxlbWVudCAiLS1icmFuY2hlcy8tLXRhZ3MvLS1yZW1vdGVzIi4KKworICogImdpdCBtZXJnZSIgbGVhcm5lZCB0byBwYXNzIG9wdGlvbnMgc3BlY2lmaWMgdG8gc3RyYXRlZ3ktYmFja2VuZHMuICBFLmcuCisKKyAgICAtICJnaXQgbWVyZ2UgLVhzdWJ0cmVlPXBhdGgvdG8vZGlyZWN0b3J5IiBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBzdWJ0cmVlCisgICAgICBzdHJhdGVneSBob3cgbXVjaCB0byBzaGlmdCB0aGUgdHJlZXMgZXhwbGljaXRseS4KKworICAgIC0gImdpdCBtZXJnZSAtWHRoZWlycyIgY2FuIGJlIHVzZWQgdG8gYXV0by1tZXJnZSBhcyBtdWNoIGFzIHBvc3NpYmxlLAorICAgICAgd2hpbGUgZGlzY2FyZGluZyB5b3VyIG93biBjaGFuZ2VzIGFuZCB0YWtpbmcgbWVyZ2VkIHZlcnNpb24gaW4KKyAgICAgIGNvbmZsaWN0ZWQgcmVnaW9ucy4KKworICogImdpdCBwdXNoIiBsZWFybmVkICJnaXQgcHVzaCBvcmlnaW4gLS1kZWxldGUgYnJhbmNoIiwgYSBzeW50YWN0aWMgc3VnYXIKKyAgIGZvciAiZ2l0IHB1c2ggb3JpZ2luIDpicmFuY2giLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgImdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtIG9yaWdpbiBmb3JrZXI6Zm9ya2VlIiB0aGF0CisgICBsZXRzIHlvdSBjb25maWd1cmUgeW91ciAiZm9ya2VyIiBicmFuY2ggdG8gbGF0ZXIgcHVsbCBmcm9tICJmb3JrZWUiCisgICBicmFuY2ggYXQgIm9yaWdpbiIuCisKKyAqICJnaXQgcmViYXNlIC0tb250byBBLi4uQiIgbWVhbnMgdGhlIGhpc3RvcnkgaXMgcmVwbGF5ZWQgb24gdG9wIG9mIHRoZQorICAgbWVyZ2UgYmFzZSBiZXR3ZWVuIEEgYW5kIEIuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkIG5ldyBhY3Rpb24gImZpeHVwIiB0aGF0IHNxdWFzaGVzIHRoZSBjaGFuZ2UKKyAgIGJ1dCBkb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgcmViYXNlIC1pIiBhbHNvIGxlYXJuZWQgLS1hdXRvc3F1YXNoIG9wdGlvbiB0aGF0IGlzIHVzZWZ1bAorICAgdG9nZXRoZXIgd2l0aCB0aGUgbmV3ICJmaXh1cCIgYWN0aW9uLgorCisgKiAiZ2l0IHJlbW90ZSIgbGVhcm5lZCBzZXQtdXJsIHN1YmNvbW1hbmQgdGhhdCB1cGRhdGVzIChzdXJwcmlzZSEpIHVybAorICAgZm9yIGFuIGV4aXN0aW5nIHJlbW90ZSBuaWNrbmFtZS4KKworICogImdpdCByZXJlcmUiIGxlYXJuZWQgImZvcmdldCBwYXRoIiBzdWJjb21tYW5kLiAgVG9nZXRoZXIgd2l0aCAiZ2l0CisgICBjaGVja291dCAtbSBwYXRoIiBpdCB3aWxsIGJlIHVzZWZ1bCB3aGVuIHlvdSByZWNvcmRlZCBhIHdyb25nCisgICByZXNvbHV0aW9uLgorCisgKiBVc2Ugb2YgImdpdCByZXNldCAtLW1lcmdlIiBoYXMgYmVjb21lIGVhc2llciB3aGVuIHJlc2V0dGluZyBhd2F5IGEKKyAgIGNvbmZsaWN0ZWQgbWVzcyBsZWZ0IGluIHRoZSB3b3JrIHRyZWUuCisKKyAqICJnaXQgcmVyZXJlIiBoYWQgcmVyZXJlLmF1dG91cGRhdGUgY29uZmlndXJhdGlvbiBidXQgdGhlcmUgd2FzIG5vIHdheQorICAgdG8gY291bnRlcm1hbmQgaXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lOyAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIG9wdGlvbgorICAgZ2l2ZW4gdG8gIm1lcmdlIiwgInJldmVydCIsIGV0Yy4gZml4ZXMgdGhpcy4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgIi1zKGhvcnQpIiBvdXRwdXQgZm9ybWF0LgorCisoZGV2ZWxvcGVycykKKworICogVGhlIGluZnJhc3RydWN0dXJlIHRvIGJ1aWxkIGZvcmVpZ24gU0NNIGludGVyZmFjZSBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBNYW55IG1vcmUgY29tbWFuZHMgYXJlIG5vdyBidWlsdC1pbi4KKworICogVEhSRUFERURfREVMVEFfU0VBUkNIIGlzIG5vIG1vcmUuICBJZiB5b3UgYnVpbGQgd2l0aCB0aHJlYWRzLCBkZWx0YQorICAgY29tcHJlc3Npb24gd2lsbCBhbHdheXMgdGFrZSBhZHZhbnRhZ2Ugb2YgaXQuCisKK0ZpeGVzIHNpbmNlIHYxLjYuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi42LlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiAiZ2l0IGJyYW5jaCAtZCBicmFuY2giIHVzZWQgdG8gcmVmdXNlIGRlbGV0aW5nIHRoZSBicmFuY2ggZXZlbiB3aGVuCisgICB0aGUgYnJhbmNoIGlzIGZ1bGx5IG1lcmdlZCB0byBpdHMgdXBzdHJlYW0gYnJhbmNoIGlmIGl0IGlzIG5vdCBtZXJnZWQKKyAgIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4gIEl0IG5vdyBkZWxldGVzIGl0IGluIHN1Y2ggYSBjYXNlLgorCisgKiAiZmlsdGVyLWJyYW5jaCIgY29tbWFuZCBpbmNvcnJlY3RseSBzYWlkIC0tcHJ1bmUtZW1wdHkgYW5kIC0tZmlsdGVyLWNvbW1pdAorICAgd2VyZSBpbmNvbXBhdGlibGU7IHRoZSBsYXR0ZXIgc2hvdWxkIGJlIHJlYWQgYXMgLS1jb21taXQtZmlsdGVyLgorCisgKiBXaGVuIHVzaW5nICJnaXQgc3RhdHVzIiBvciBhc2tpbmcgImdpdCBkaWZmIiB0byBjb21wYXJlIHRoZSB3b3JrIHRyZWUKKyAgIHdpdGggc29tZXRoaW5nLCB0aGV5IHVzZWQgdG8gY29uc2lkZXIgdGhhdCBhIGNoZWNrZWQtb3V0IHN1Ym1vZHVsZSB3aXRoCisgICB1bmNvbW1pdHRlZCBjaGFuZ2VzIGlzIG5vdCBtb2RpZmllZDsgdGhpcyBjb3VsZCBjYXVzZSBwZW9wbGUgdG8gZm9yZ2V0CisgICBjb21taXR0aW5nIHRoZXNlIGNoYW5nZXMgaW4gdGhlIHN1Ym1vZHVsZSBiZWZvcmUgY29tbWl0dGluZyBpbiB0aGUKKyAgIHN1cGVycHJvamVjdC4gVGhleSBub3cgY29uc2lkZXIgc3VjaCBhIGNoYW5nZSBhcyBhIG1vZGlmaWNhdGlvbiBhbmQKKyAgICJnaXQgZGlmZiIgd2lsbCBhcHBlbmQgYSAiLWRpcnR5IiB0byB0aGUgd29yayB0cmVlIHNpZGUgd2hlbiBnZW5lcmF0aW5nCisgICBwYXRjaCBvdXRwdXQgb3Igd2hlbiB1c2VkIHdpdGggdGhlIC0tc3VibW9kdWxlIG9wdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNmIzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjEudHh0CkBAIC0wLDAgKzEsOTYgQEAKK0dpdCB2MS43LjEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBdXRoZW50aWNhdGlvbiBvdmVyIGh0dHAgdHJhbnNwb3J0IGNhbiBub3cgYmUgbWFkZSBsYXppbHksIGluIHRoYXQgdGhlCisgICByZXF1ZXN0IGNhbiBmaXJzdCBnbyB0byBhIFVSTCB3aXRob3V0IHVzZXJuYW1lLCBnZXQgYSA0MDEgcmVzcG9uc2UgYW5kCisgICB0aGVuIHRoZSBjbGllbnQgd2lsbCBhc2sgZm9yIHRoZSB1c2VybmFtZSB0byB1c2UuCisKKyAqIFdlIHVzZWQgdG8gbWlzdGFrZW5seSB0aGluayAiLi4vd29yayIgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQKKyAgIGRpcmVjdG9yeSB3aGVuIHdlIGFyZSBpbiAiLi4vd29yay14eXoiLgorCisgKiBUaGUgYXR0cmlidXRlIG1lY2hhbmlzbSBub3cgYWxsb3dzIGFuIGVudHJ5IHRoYXQgdXNlcyBhbiBhdHRyaWJ1dGUKKyAgIG1hY3JvIHRoYXQgc2V0L3Vuc2V0IG9uZSBhdHRyaWJ1dGUsIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFuCisgICBvdmVycmlkaW5nIHNldHRpbmc7IHRoaXMgbWFrZXMgYXR0cmlidXRlIG1hY3JvcyBtdWNoIGVhc2llciB0byB1c2UuCisKKyAqIFdlIGRpZG4ndCByZWNvZ25pemUgdGltZXpvbmUgIloiIGFzIGEgc3lub255bSBmb3IgIlVUQyIgKDc1YjM3ZTcwKS4KKworICogSW4gMS43LjAsIHJlYWQtdHJlZSBhbmQgdXNlciBjb21tYW5kcyB0aGF0IHVzZSB0aGUgbWVjaGFuaXNtIHN1Y2ggYXMKKyAgIGNoZWNrb3V0IGFuZCBtZXJnZSB3ZXJlIGZpeGVkIHRvIGhhbmRsZSBzd2l0Y2hpbmcgYmV0d2VlbiBicmFuY2hlcyBvbmUKKyAgIG9mIHdoaWNoIGhhcyBhIGZpbGUgd2hpbGUgdGhlIG90aGVyIGhhcyBhIGRpcmVjdG9yeSBhdCB0aGUgc2FtZSBwYXRoCisgICBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoZXJlIGFyZSBzb21lICJjb25mdXNpbmciIHBhdGhuYW1lcyBpbiB0aGVtLiAgQnV0CisgICB0aGUgYWxnb3JpdGhtIHVzZWQgZm9yIHRoaXMgZml4IHdhcyBzdWJvcHRpbWFsIGFuZCBoYWQgYSB0ZXJyaWJsZQorICAgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gZXNwZWNpYWxseSBpbiBsYXJnZXIgdHJlZXMuCisKKyAqICJnaXQgYW0gLTMiIGRpZCBub3Qgc2hvdyBkaWFnbm9zaXMgd2hlbiB0aGUgcGF0Y2ggaW4gdGhlIG1lc3NhZ2Ugd2FzIGNvcnJ1cHQuCisKKyAqIEFmdGVyICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgcmVtb3ZlZCB0cmFpbGluZyBibGFuayBsaW5lcyBpbiBhbgorICAgcGF0Y2ggaW4gYSBwYXRjaCBzZXJpZXMsIGl0IGZhaWxlZCB0byBhcHBseSBsYXRlciBwYXRjaGVzIHRoYXQgZGVwZW5kCisgICBvbiB0aGUgcHJlc2VuY2Ugb2Ygc3VjaCBibGFuayBsaW5lcy4KKworICogImdpdCBidW5kbGUgLS1zdGRpbiIgc2VnZmF1bHRlZC4KKworICogImdpdCBjaGVja291dCIgYW5kICJnaXQgcmViYXNlIiBvdmVyd3JvdGUgcGF0aHMgdGhhdCBhcmUgbWFya2VkICJhc3N1bWUKKyAgIHVuY2hhbmdlZCIuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQiIG9uIGEgY29tbWl0IHdpdGggYW4gaW52YWxpZCBhdXRob3ItbmFtZSBsaW5lIHRoYXQKKyAgIGxhY2tzIHRoZSBkaXNwbGF5IG5hbWUgZGlkbid0IHdvcmsuCisKKyAqICJnaXQgZGVzY3JpYmUiIGRpZCBub3QgdGllLWJyZWFrIHRhZ3MgdGhhdCBwb2ludCBhdCB0aGUgc2FtZSBjb21taXQKKyAgIGNvcnJlY3RseTsgbmV3ZXIgb25lcyBhcmUgcHJlZmVycmVkIGJ5IHBheWluZyBhdHRlbnRpb24gdG8gdGhlCisgICB0YWdnZXIgZGF0ZSBub3cuCisKKyAqICJnaXQgZGlmZiIgdXNlZCB0byB0ZWxsIHVuZGVybHlpbmcgeGRpZmYgbWFjaGluZXJ5IHRvIHdvcmsgdmVyeSBoYXJkIHRvCisgICBtaW5pbWl6ZSB0aGUgb3V0cHV0LCBidXQgdGhpcyBvZnRlbiB3YXMgc3BlbmRpbmcgdG9vIG1hbnkgZXh0cmEgY3ljbGVzCisgICBmb3IgdmVyeSBsaXR0bGUgZ2Fpbi4KKworICogImdpdCBkaWZmIC0tY29sb3IiIGRpZCBub3QgcGFpbnQgZXh0ZW5kZWQgZGlmZiBoZWFkZXJzIHBlciBsaW5lCisgICAoaS5lLiB0aGUgY29sb3JpbmcgZXNjYXBlIHNlcXVlbmNlIGRpZG4ndCBlbmQgYXQgdGhlIGVuZCBvZiBsaW5lKSwKKyAgIHdoaWNoIGNvbmZ1c2VkICJsZXNzIC1SIi4KKworICogImdpdCBmZXRjaCIgb3ZlciBIVFRQIHZlcmlmaWVzIHRoZSBkb3dubG9hZGVkIHBhY2tmaWxlcyBtb3JlIHJvYnVzdGx5LgorCisgKiBUaGUgbWVtb3J5IHVzYWdlIGJ5ICJnaXQgaW5kZXgtcGFjayIgKHJ1biBkdXJpbmcgImdpdCBmZXRjaCIgYW5kICJnaXQKKyAgIHB1c2giKSBnb3QgbGVhbmVyLgorCisgKiAiR0lUX0RJUj1mb28uZ2l0IGdpdCBpbml0IC0tYmFyZSBiYXIuZ2l0IiBjcmVhdGVkIGZvby5naXQgaW5zdGVhZCBvZiBiYXIuZ2l0LgorCisgKiAiZ2l0IGxvZyAtLWFiYnJldj0kbnVtIC0tZm9ybWF0PSclaCcgaWdub3JlZCAtLWFiYnJldj0kbnVtLgorCisgKiAiZ2l0IGxzLWZpbGVzIC4uL291dC9zaWRlL2N3ZCIgcmVmdXNlZCB0byB3b3JrLgorCisgKiAiZ2l0IG1lcmdlIC0tbG9nIiB1c2VkIHRvIHJlcGxhY2UgdGhlIGN1c3RvbSBtZXNzYWdlIGdpdmVuIGJ5ICItbSIgd2l0aAorICAgdGhlIHNob3J0bG9nLCBpbnN0ZWFkIG9mIGFwcGVuZGluZyB0byBpdC4KKworICogImdpdCBub3RlcyBjb3B5IiB3aXRob3V0IGFueSBvdGhlciBhcmd1bWVudCBzZWdmYXVsdGVkLgorCisgKiAiZ2l0IHB1bGwiIGFjY2VwdGVkICItLWRyeS1ydW4iLCBnYXZlIGl0IHRvIHVuZGVybHlpbmcgImdpdCBmZXRjaCIgYnV0CisgICBpZ25vcmVkIHRoZSBvcHRpb24gaXRzZWxmLCByZXN1bHRpbmcgaW4gYSBib2d1cyBhdHRlbXB0IHRvIG1lcmdlCisgICB1bnJlbGF0ZWQgY29tbWl0LgorCisgKiAiZ2l0IHJlYmFzZSIgZGlkIG5vdCBmYWl0aGZ1bGx5IHJlcHJvZHVjZSBhIG1hbGZvcm1lZCBhdXRob3IgaWRlbnQsIHRoYXQKKyAgIGlzIG9mdGVuIHNlZW4gaW4gYSByZXBvc2l0b3J5IGNvbnZlcnRlZCBmcm9tIGZvcmVpZ24gU0NNcy4KKworICogImdpdCByZXNldCAtLWhhcmQiIHN0YXJ0ZWQgZnJvbSBhIHdyb25nIGRpcmVjdG9yeSBhbmQgYSB3b3JraW5nIHRyZWUgaW4KKyAgIGEgbm9uc3RhbmRhcmQgbG9jYXRpb24gaXMgaW4gdXNlIGdvdCBjb25mdXNlZC4KKworICogImdpdCBzZW5kLWVtYWlsIiBsYWNrZWQgYSB3YXkgdG8gc3BlY2lmeSB0aGUgZG9tYWlubmFtZSB1c2VkIGluIHRoZQorICAgRUhMTy9IRUxPIGV4Y2hhbmdlLCBjYXVzaW5nIHJlamVjdGVkIGNvbm5lY3Rpb24gZnJvbSBwaWNreSBzZXJ2ZXJzLgorICAgSXQgbGVhcm5lZCAtLXNtdHAtZG9tYWluIG9wdGlvbiB0byBzb2x2ZSB0aGlzIGlzc3VlLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgZGVjbGFyZSBhIGNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcgYW5kCisgICBjb250ZW50LXR5cGUgZXZlbiB3aGVuIGl0cyBwYXlsb2FkIG5lZWRzIHRvIGJlIHNlbnQgaW4gOC1iaXQuCisKKyAqICJnaXQgc2hvdyAtQyAtQyIgYW5kIG90aGVyIGNvcm5lciBjYXNlcyBsb3N0IGRpZmYgbWV0YWluZm8gb3V0cHV0CisgICBpbiAxLjcuMC4KKworICogImdpdCBzdGFzaCIgaW5jb3JyZWN0bHkgbG9zdCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgd2VyZQorICAgcHJldmlvdXNseSByZW1vdmVkIGZyb20gdGhlIGluZGV4LgorCisgKiAiZ2l0IHN0YXR1cyIgc3RvcHBlZCByZWZyZXNoaW5nIHRoZSBpbmRleCBieSBtaXN0YWtlIGluIDEuNy4xLgorCisgKiAiZ2l0IHN0YXR1cyIgc2hvd2VkIGV4Y2VzcyAiaGludHMiIGV2ZW4gd2hlbiBhZHZpY2Uuc3RhdHVzSGludHMgaXMgc2V0IHRvIGZhbHNlLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYmExNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjIudHh0CkBAIC0wLDAgKzEsMjggQEAKK0dpdCB2MS43LjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjb21taXQiIGRpZCBub3QgaG9ub3IgR0lUX1JFRkxPR19BQ1RJT04gZW52aXJvbm1lbnQgdmFyaWFibGUsIHJlc3VsdGluZworICAgcmVmbG9nIG1lc3NhZ2VzIGZvciBjaGVycnktcGljayBhbmQgcmV2ZXJ0IGFjdGlvbnMgdG8gYmUgcmVjb3JkZWQgYXMgImNvbW1pdCIuCisKKyAqICJnaXQgY2xvbmUvZmV0Y2gvcHVsbCIgaXNzdWVkIGFuIGluY29ycmVjdCBlcnJvciBtZXNzYWdlIHdoZW4gYSByZWYgYW5kCisgICBhIHN5bXJlZiB0aGF0IHBvaW50cyB0byB0aGUgcmVmIHdlcmUgdXBkYXRlZCBhdCB0aGUgc2FtZSB0aW1lLiAgVGhpcworICAgb2J2aW91c2x5IHdvdWxkIHVwZGF0ZSB0aGVtIHRvIHRoZSBzYW1lIHZhbHVlLCBhbmQgc2hvdWxkIG5vdCByZXN1bHQgaW4KKyAgIGFuIGVycm9yIGNvbmRpdGlvbi4KKworICogImdpdCBkaWZmIiBpbnNpZGUgYSB0cmVlIHdpdGggbWFueSBwYXRobmFtZXMgdGhhdCBoYXZlIGNlcnRhaW4KKyAgIGNoYXJhY3RlcnMgaGFzIGJlY29tZSB2ZXJ5IHNsb3cgaW4gMS43LjAgYnkgbWlzdGFrZS4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiIgZGlkIG5vdCBzdG9wIGF0IG5vbiBvcHRpb24KKyAgIHdoZW4gLS1rZWVwLWRhc2hkYXNoIHdhcyBpbiBlZmZlY3QuCisKKyAqIEFuIG92ZXJsb25nIGxpbmUgYWZ0ZXIgIi5naXRkaXI6ICIgaW4gYSBnaXQgZmlsZSBjYXVzZWQgb3V0IG9mIGJvdW5kcworICAgYWNjZXNzIHRvIGFuIGFycmF5IG9uIHRoZSBzdGFjay4KKworICogImdpdCBjb25maWcgLS1wYXRoIGNvbmYudmFyIiB0byBhdHRlbXB0IHRvIGV4cGFuZCBhIHZhcmlhYmxlIGNvbmYudmFyCisgICB0aGF0IHVzZXMgIn4vIiBzaG9ydC1oYW5kIHNlZ2ZhdWx0ZWQgd2hlbiAkSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgd2FzIG5vdCBzZXQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxODUxOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMy50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IHYxLjcuMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGJhY2twb3J0IHN1cHBvcnQgZm9yIHRoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiCituYW1lIGdpdmVuIHRvIHRoZSBleGlzdGluZyAiYWRkLmlnbm9yZS1lcnJvcnMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3MzRiNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuNC50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjEuNy4xLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4OWZlZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEudHh0CkBAIC0wLDAgKzEsODkgQEAKK0dpdCB2MS43LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy4wCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBFcmljIFJheW1vbmQgaXMgdGhlIG1haW50YWluZXIgb2YgdXBkYXRlZCBDSUFib3Qgc2NyaXB0cywgaW4gY29udHJpYi8uCisKKyAqIGdpdGsgdXBkYXRlcy4KKworICogU29tZSBjb21tYW5kcyAoZS5nLiBzdm4gYW5kIGh0dHAgaW50ZXJmYWNlcykgdGhhdCBpbnRlcmFjdGl2ZWx5IGFzaworICAgZm9yIGEgcGFzc3dvcmQgY2FuIGJlIHRvbGQgdG8gdXNlIGFuIGV4dGVybmFsIHByb2dyYW0gZ2l2ZW4gdmlhCisgICBHSVRfQVNLUEFTUy4KKworICogQ29uZmxpY3QgbWFya2VycyB0aGF0IGxlYWQgdGhlIGNvbW1vbiBhbmNlc3RvciBpbiBkaWZmMy1zdHlsZSBvdXRwdXQKKyAgIG5vdyBoYXZlIGEgbGFiZWwsIHdoaWNoIGhvcGVmdWxseSB3b3VsZCBoZWxwIHRoaXJkLXBhcnR5IHRvb2xzIHRoYXQKKyAgIGV4cGVjdCBvbmUuCisKKyAqIENvbWVzIHdpdGggYW4gdXBkYXRlZCBiYXNoLWNvbXBsZXRpb24gc2NyaXB0LgorCisgKiAiZ2l0IGFtIiBsZWFybmVkICItLWtlZXAtY3IiIG9wdGlvbiB0byBoYW5kbGUgaW5wdXRzIHRoYXQgYXJlCisgICBhIG1peHR1cmUgb2YgY2hhbmdlcyB0byBmaWxlcyB3aXRoIGFuZCB3aXRob3V0IENSTEYgbGluZSBlbmRpbmdzLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgbGVhcm5lZCAtUiBvcHRpb24gdG8gbGVhdmUgcmV2aXNpb24gbWFwcGluZyBiZXR3ZWVuCisgICBDVlMgcmV2aXNpb25zIGFuZCByZXN1bHRpbmcgZ2l0IGNvbW1pdHMuCisKKyAqICJnaXQgZGlmZiAtLXN1Ym1vZHVsZSIgbm90aWNlcyBhbmQgZGVzY3JpYmVzIGRpcnR5IHN1Ym1vZHVsZXMuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBsZWFybmVkICUoc3ltcmVmKSwgJShzeW1yZWY6c2hvcnQpIGFuZCAlKGZsYWcpCisgICB0b2tlbnMuCisKKyAqICJnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyIgY2FuIHRha2UgIi0tbm8tZmlsdGVycyIgb3B0aW9uIG5vdy4KKworICogImdpdCBpbml0IiBjYW4gYmUgdG9sZCB0byBsb29rIGF0IGluaXQudGVtcGxhdGVkaXIgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgKG9idmlvdXNseSB0aGF0IGhhcyB0byBjb21lIGZyb20gZWl0aGVyIC9ldGMvZ2l0Y29uZmlnIG9yCisgICAkSE9NRS8uZ2l0Y29uZmlnKS4KKworICogImdpdCBncmVwIiBsZWFybmVkICItLW5vLWluZGV4IiBvcHRpb24sIHRvIHNlYXJjaCBpbnNpZGUgY29udGVudHMgdGhhdAorICAgYXJlIG5vdCBtYW5hZ2VkIGJ5IGdpdC4KKworICogImdpdCBncmVwIiBsZWFybmVkIC0tY29sb3I9YXV0by9hbHdheXMvbmV2ZXIuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCB0byBwYWludCBmaWxlbmFtZSBhbmQgbGluZS1udW1iZXIgaW4gY29sb3JzLgorCisgKiAiZ2l0IGxvZyAtcCAtLWZpcnN0LXBhcmVudCAtbSIgc2hvd3Mgb25lLXBhcmVudCBkaWZmIGZvciBtZXJnZQorICAgY29tbWl0cywgaW5zdGVhZCBvZiBzaG93aW5nIGNvbWJpbmVkIGRpZmYuCisKKyAqICJnaXQgbWVyZ2UtZmlsZSIgbGVhcm5lZCB0byB1c2UgY3VzdG9tIGNvbmZsaWN0IG1hcmtlciBzaXplIGFuZCBhbHNvCisgICB0byB1c2UgdGhlICJ1bmlvbiBtZXJnZSIgYmVoYXZpb3VyLgorCisgKiAiZ2l0IG5vdGVzIiBjb21tYW5kIGhhcyBiZWVuIHJld3JpdHRlbiBpbiBDIGFuZCBsZWFybmVkIG1hbnkgY29tbWFuZHMKKyAgIGFuZCBmZWF0dXJlcyB0byBoZWxwIHlvdSBjYXJyeSBub3RlcyBmb3J3YXJkIGFjcm9zcyByZWJhc2VzIGFuZCBhbWVuZHMuCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIiBpZGVudGlmaWVzIHRoZSBjb21taXQgdGhlIHJlcXVlc3QgaXMgcmVsYXRpdmUgdG8gaW4KKyAgIGEgbW9yZSByZWFkYWJsZSB3YXkuCisKKyAqICJnaXQgcmVzZXQiIGxlYXJuZWQgIi0ta2VlcCIgb3B0aW9uIHRoYXQgbGV0cyB5b3UgZGlzY2FyZCBjb21taXRzCisgICBuZWFyIHRoZSB0aXAgd2hpbGUgcHJlc2VydmluZyB5b3VyIGxvY2FsIGNoYW5nZXMgaW4gYSB3YXkgc2ltaWxhcgorICAgdG8gaG93ICJnaXQgY2hlY2tvdXQgYnJhbmNoIiBkb2VzLgorCisgKiAiZ2l0IHN0YXR1cyIgbm90aWNlcyBhbmQgZGVzY3JpYmVzIGRpcnR5IHN1Ym1vZHVsZXMuCisKKyAqICJnaXQgc3ZuIiBzaG91bGQgd29yayBiZXR0ZXIgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHJlcG9zaXRvcmllcworICAgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncy4KKworICogImdpdCBpbWFwLXNlbmQiIGxlYXJuZWQgdG8gc3VwcG9ydCBDUkFNLU1ENSBhdXRoZW50aWNhdGlvbi4KKworICogImdpdHdlYiIgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBjYW4gdXNlICJtaW5pZmllZCIganMvY3NzIGZpbGVzCisgICBiZXR0ZXIuCisKKyAqIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCitGaXhlcyBzaW5jZSB2MS43LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjcuMC5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBhZGQgZnJvdHovbml0Zm9sIiBkaWQgbm90IGNvbXBsYWluIHdoZW4gdGhlIGVudGlyZSBmcm90ei8gZGlyZWN0b3J5CisgICB3YXMgaWdub3JlZC4KKworICogImdpdCBkaWZmIC0tc3RhdCIgdXNlZCAiaW50IiB0byBjb3VudCB0aGUgc2l6ZSBvZiBkaWZmZXJlbmNlcywKKyAgIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBvdmVyZmxvd2luZy4KKworICogImdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIiBkaWRuJ3QgdGVybWluYXRlIGEgcmVjb3JkIHdpdGggTEYgZm9yCisgICBjb21taXRzIHdpdGhvdXQgYW55IG1lc3NhZ2UuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1hYmJyZXYtY29tbWl0IiBkZWZhdWx0ZWQgdG8gNDAtYnl0ZSBhYmJyZXZpYXRpb25zLCB1bmxpa2UKKyAgIG5ld2VyIHRvb2xzIGluIHRoZSBnaXQgdG9vbHNldC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhODZjYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjEudHh0CkBAIC0wLDAgKzEsNzggQEAKK0dpdCB2MS43LjEwLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZGl0aW9ucyBzaW5jZSB2MS43LjEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMb2NhbGl6YXRpb24gbWVzc2FnZSBmaWxlcyBmb3IgRGFuaXNoIGFuZCBHZXJtYW4gaGF2ZSBiZWVuIGFkZGVkLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhZGQgLXAiIGlzIG5vdCBkZXNpZ25lZCB0byBkZWFsIHdpdGggdW5tZXJnZWQgcGF0aHMgYnV0IGRpZAorICAgbm90IGV4Y2x1ZGUgdGhlbSBhbmQgdHJpZWQgdG8gYXBwbHkgZnVubnkgcGF0Y2hlcyBvbmx5IHRvIGZhaWwuCisKKyAqICJnaXQgYmxhbWUiIHN0YXJ0ZWQgbWlzc2luZyBxdWl0ZSBhIGZldyBjaGFuZ2VzIGZyb20gdGhlIG9yaWdpbgorICAgc2luY2Ugd2Ugc3RvcHBlZCB1c2luZyB0aGUgZGlmZiBtaW5pbWl6YXRpb24gYnkgZGVmYXVsdCBpbiB2MS43LjIKKyAgIGVyYS4KKworICogV2hlbiBQQVRIIGNvbnRhaW5zIGFuIHVucmVhZGFibGUgZGlyZWN0b3J5LCBhbGlhcyBleHBhbnNpb24gY29kZQorICAgZGlkIG5vdCBraWNrIGluLCBhbmQgZmFpbGVkIHdpdGggYW4gZXJyb3IgdGhhdCBzYWlkICJnaXQtc3ViY21kIgorICAgd2FzIG5vdCBmb3VuZC4KKworICogImdpdCBjbGVhbiAtZCAtZiIgKG5vdCAiLWQgLWYgLWYiKSBpcyBzdXBwb3NlZCB0byBwcm90ZWN0IG5lc3RlZAorICAgd29ya2luZyB0cmVlcyBvZiBpbmRlcGVuZGVudCBnaXQgcmVwb3NpdG9yaWVzIHRoYXQgZXhpc3QgaW4gdGhlCisgICBjdXJyZW50IHByb2plY3Qgd29ya2luZyB0cmVlIGZyb20gZ2V0dGluZyByZW1vdmVkLCBidXQgdGhlCisgICBwcm90ZWN0aW9uIGFwcGxpZWQgb25seSB0byBzdWNoIHdvcmtpbmcgdHJlZXMgdGhhdCBhcmUgYXQgdGhlCisgICB0b3AtbGV2ZWwgb2YgdGhlIGN1cnJlbnQgcHJvamVjdCBieSBtaXN0YWtlLgorCisgKiAiZ2l0IGNvbW1pdCAtLWF1dGhvcj0kbmFtZSIgZGlkIG5vdCB0ZWxsIHRoZSBuYW1lIHRoYXQgd2FzIGJlaW5nCisgICByZWNvcmRlZCBpbiB0aGUgcmVzdWx0aW5nIGNvbW1pdCB0byBob29rcywgZXZlbiB0aG91Z2ggaXQgZG9lcyBkbworICAgc28gd2hlbiB0aGUgZW5kIHVzZXIgb3ZlcnJvZGUgdGhlIGF1dGhvcnNoaXAgdmlhIHRoZQorICAgIkdJVF9BVVRIT1JfTkFNRSIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyAqIFdoZW4gImdpdCBjb21taXQgLS10ZW1wbGF0ZSBGIiBlcnJvcnMgb3V0IGJlY2F1c2UgdGhlIHVzZXIgZGlkIG5vdAorICAgdG91Y2ggdGhlIG1lc3NhZ2UsIGl0IGNsYWltZWQgdGhhdCBpdCBhYm9ydHMgZHVlIHRvICJlbXB0eQorICAgbWVzc2FnZSIsIHdoaWNoIHdhcyB1dHRlcmx5IHdyb25nLgorCisgKiBUaGUgcmVnZXhwIGNvbmZpZ3VyZWQgd2l0aCBkaWZmLndvcmRyZWdleCB3YXMgaW5jb3JyZWN0bHkgcmV1c2VkCisgICBhY3Jvc3MgZmlsZXMuCisKKyAqIEFuIGFnZS1vbGQgY29ybmVyIGNhc2UgYnVnIGluIGNvbWJpbmUgZGlmZiAob25seSB0cmlnZ2VyZWQgd2l0aCAtVTAKKyAgIGFuZCB0aGUgaHVuayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIG5lZWRzIHRvIGJlIHNob3duKSBoYXMKKyAgIGJlZW4gZml4ZWQuCisKKyAqIFJlbmFtZSBkZXRlY3Rpb24gbG9naWMgdXNlZCB0byBtYXRjaCB0d28gZW1wdHkgZmlsZXMgYXMgcmVuYW1lcworICAgZHVyaW5nIG1lcmdlLXJlY3Vyc2l2ZSwgbGVhZGluZyB0byB1bm5hdHVyYWwgbWlzbWVyZ2VzLgorCisgKiBUaGUgcGFyc2VyIGluICJmYXN0LWltcG9ydCIgZGlkIG5vdCBkaWFnbm9zZSAiOjkiIHN0eWxlIHJlZmVyZW5jZXMKKyAgIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5IHJlcXVpcmVkIFNQL0xGIGFzIGFuIGVycm9yLgorCisgKiBXaGVuICJnaXQgZmV0Y2giIGVuY291bnRlcnMgcmVwb3NpdG9yaWVzIHdpdGggdG9vIG1hbnkgcmVmZXJlbmNlcywKKyAgIHRoZSBjb21tYW5kIGxpbmUgb2YgImZldGNoLXBhY2siIHRoYXQgaXMgcnVuIGJ5IGEgaGVscGVyCisgICBlLmcuIHJlbW90ZS1jdXJsLCBtYXkgZmFpbCB0byBob2xkIGFsbCBvZiB0aGVtLiBOb3cgc3VjaCBhbgorICAgaW50ZXJuYWwgaW52b2NhdGlvbiBjYW4gZmVlZCB0aGUgcmVmZXJlbmNlcyB0aHJvdWdoIHRoZSBzdGFuZGFyZAorICAgaW5wdXQgb2YgImZldGNoLXBhY2siLgorCisgKiAiZ2l0IGZldGNoIiB0aGF0IHJlY3Vyc2VzIGludG8gc3VibW9kdWxlcyBvbiBkZW1hbmQgZGlkIG5vdCBjaGVjaworICAgaWYgaXQgbmVlZHMgdG8gZ28gaW50byBzdWJtb2R1bGVzIHdoZW4gbm9uIGJyYW5jaGVzIChtb3N0IG5vdGFibHksCisgICB0YWdzKSBhcmUgZmV0Y2hlZC4KKworICogImxvZyAtcCAtLWdyYXBoIiB1c2VkIHdpdGggIi0tc3RhdCIgaGFkIGEgZmV3IGZvcm1hdHRpbmcgZXJyb3IuCisKKyAqIFJ1bm5pbmcgIm5vdGVzIG1lcmdlIC0tY29tbWl0IiBmYWlsZWQgdG8gcGVyZm9ybSBjb3JyZWN0bHkgd2hlbiBydW4KKyAgIGZyb20gYW55IGRpcmVjdG9yeSBpbnNpZGUgJEdJVF9ESVIvLiAgV2hlbiAibm90ZXMgbWVyZ2UiIHN0b3BzIHdpdGgKKyAgIGNvbmZsaWN0cywgJEdJVF9ESVIvTk9URVNfTUVSR0VfV09SS1RSRUUgaXMgdGhlIHBsYWNlIGEgdXNlciBlZGl0cworICAgdG8gcmVzb2x2ZSBpdC4KKworICogVGhlICdwdXNoIHRvIHVwc3RyZWFtJyBpbXBsZW1lbnRhdGlvbiB3YXMgYnJva2VuIGluIHNvbWUgY29ybmVyCisgICBjYXNlcy4gImdpdCBwdXNoICR0aGVyZSIgd2l0aG91dCByZWZzcGVjLCB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaAorICAgaXMgc2V0IHRvIHB1c2ggdG8gYSByZW1vdGUgZGlmZmVyZW50IGZyb20gJHRoZXJlLCB1c2VkIHRvIHB1c2ggdG8KKyAgICR0aGVyZSB1c2luZyB0aGUgdXBzdHJlYW0gaW5mb3JtYXRpb24gdG8gYSByZW1vdGUgdW5yZWxhdGVkIHRvCisgICAkdGhlcmUuCisKKyAqIEdpdmluZyAiLS1jb250aW51ZSIgdG8gYSBjb25mbGljdGVkICJyZWJhc2UgLWkiIHNlc3Npb24gc2tpcHBlZCBhCisgICBjb21taXQgdGhhdCBvbmx5IHJlc3VsdHMgaW4gY2hhbmdlcyB0byBzdWJtb2R1bGVzLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhN2U5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4yLnR4dApAQCAtMCwwICsxLDg1IEBACitHaXQgdjEuNy4xMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEwLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgdGVzdCBzY2FmZm9sZGluZyBmb3IgZ2l0LWRhZW1vbiB3YXMgZmxha3kuCisKKyAqIFRoZSB0ZXN0IHNjYWZmb2xkaW5nIGZvciBmYXN0LWltcG9ydCB3YXMgZmxha3kuCisKKyAqIFRoZSBmaWxlc3lzdGVtIGJvdW5kYXJ5IHdhcyBub3QgY29ycmVjdGx5IHJlcG9ydGVkIHdoZW4gLmdpdCBkaXJlY3RvcnkKKyAgIGRpc2NvdmVyeSBzdG9wcGVkIGF0IGEgbW91bnQgcG9pbnQuCisKKyAqIEhUVFAgdHJhbnNwb3J0IHRoYXQgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuCisgICBtdWx0aXBsZSBjb25uZWN0aW9ucyBhcmUgdXNlZCBzaW11bHRhbmVvdXNseS4KKworICogTWlub3IgbWVtb3J5IGxlYWsgZHVyaW5nIHVucGFja190cmVlcyAoaGVuY2UgIm1lcmdlIiBhbmQgImNoZWNrb3V0IgorICAgdG8gY2hlY2sgb3V0IGFub3RoZXIgYnJhbmNoKSBoYXMgYmVlbiBwbHVnZ2VkLgorCisgKiBJbiB0aGUgb2xkZXIgZGF5cywgdGhlIGhlYWRlciAiQ29uZmxpY3RzOiIgaW4gImNoZXJyeS1waWNrIiBhbmQgIm1lcmdlIgorICAgd2FzIHNlcGFyYXRlZCBieSBhIGJsYW5rIGxpbmUgZnJvbSB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IGZvbGxvdyBmb3IKKyAgIHJlYWRhYmlsaXR5LCBidXQgd2hlbiAibWVyZ2UiIHdhcyByZXdyaXR0ZW4gaW4gQywgd2UgbG9zdCBpdCBieQorICAgbWlzdGFrZS4gUmVtb3ZlIHRoZSBuZXdsaW5lIGZyb20gImNoZXJyeS1waWNrIiB0byBtYWtlIHRoZW0gbWF0Y2gKKyAgIGFnYWluLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIHBhcnNlciBjaG9rZWQgImdpdCBjaGVycnktcGljayAkbmFtZSIgd2hlbiAkbmFtZSBjYW4KKyAgIGJlIGJvdGggcmV2aXNpb24gbmFtZSBhbmQgYSBwYXRobmFtZSwgZXZlbiB0aG91Z2ggJG5hbWUgY2FuIG5ldmVyIGJlIGEKKyAgIHBhdGggaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNvbW1hbmQuCisKKyAqIFRoZSAiaW5jbHVkZS5wYXRoIiBmYWNpbGl0eSBpbiB0aGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20gYWRkZWQgaW4KKyAgIDEuNy4xMCBmb3Jnb3QgdG8gaW50ZXJwcmV0ICJ+L3BhdGgiIGFuZCAifnVzZXIvcGF0aCIgYXMgaXQgc2hvdWxkLgorCisgKiAiZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIiB0byByZW5hbWUgYW4gZXhpc3Rpbmcgc2VjdGlvbiBpbnRvIGEKKyAgIGJvZ3VzIG9uZSBkaWQgbm90IGNoZWNrIHRoZSBuZXcgbmFtZS4KKworICogVGhlICJkaWZmIC0tbm8taW5kZXgiIGNvZGVwYXRoIHVzZWQgbGltaXRlZC1sZW5ndGggYnVmZmVycywgcmlza2luZworICAgcGF0aG5hbWVzIGdldHRpbmcgdHJ1bmNhdGVkLiAgVXBkYXRlIGl0IHRvIHVzZSB0aGUgc3RyYnVmIEFQSS4KKworICogVGhlIHJlcG9ydCBmcm9tICJnaXQgZmV0Y2giIHNhaWQgIm5ldyBicmFuY2giIGV2ZW4gZm9yIGEgbm9uIGJyYW5jaAorICAgcmVmLgorCisgKiBUaGUgaHR0cC1iYWNrZW5kICh0aGUgc2VydmVyIHNpZGUgb2YgdGhlIHNtYXJ0IGh0dHAgdHJhbnNmZXIpIHVzZWQKKyAgIHRvIG92ZXJ3cml0ZSBHSVRfQ09NTUlUVEVSX05BTUUgYW5kIEdJVF9DT01NSVRURVJfRU1BSUwgd2l0aCB0aGUKKyAgIHZhbHVlIG9idGFpbmVkIGZyb20gUkVNT1RFX1VTRVIgdW5jb25kaXRpb25hbGx5LCBtYWtpbmcgaXQKKyAgIGltcG9zc2libGUgZm9yIHRoZSBzZXJ2ZXIgc2lkZSBzaXRlLXNwZWNpZmljIGN1c3RvbWl6YXRpb24gdG8gdXNlCisgICBkaWZmZXJlbnQgaWRlbnRpdHkgc291cmNlcyB0byBhZmZlY3QgdGhlIG5hbWVzIGxvZ2dlZC4gSXQgbm93IHVzZXMKKyAgIFJFTU9URV9VU0VSIG9ubHkgYXMgYSBmYWxsYmFjayB2YWx1ZS4KKworICogImxvZyAtLWdyYXBoIiB3YXMgbm90IHZlcnkgZnJpZW5kbHkgd2l0aCAiLS1zdGF0IiBvcHRpb24gYW5kIGl0cworICAgb3V0cHV0IGhhZCBsaW5lIGJyZWFrcyBhdCB3cm9uZyBwbGFjZXMuCisKKyAqIE9jdG9wdXMgbWVyZ2Ugc3RyYXRlZ3kgZGlkIG5vdCByZWR1Y2UgaGVhZHMgdGhhdCBhcmUgcmVjb3JkZWQgaW4gdGhlCisgICBmaW5hbCBjb21taXQgY29ycmVjdGx5LgorCisgKiAiZ2l0IHB1c2giIG92ZXIgc21hcnQtaHR0cCBsb3N0IHByb2dyZXNzIG91dHB1dCBhIGZldyByZWxlYXNlcyBhZ287CisgICB0aGlzIHJlbGVhc2UgcmVzdXJyZWN0cyBpdC4KKworICogVGhlIGVycm9yIGFuZCBhZHZpY2UgbWVzc2FnZXMgZ2l2ZW4gYnkgImdpdCBwdXNoIiB3aGVuIGl0IGZhaWxzIGR1ZQorICAgdG8gbm9uLWZmIHdlcmUgbm90IHZlcnkgaGVscGZ1bCB0byBuZXcgdXNlcnM7IGl0IGhhcyBiZWVuIGJyb2tlbgorICAgaW50byB0aHJlZSBjYXNlcywgYW5kIGVhY2ggaXMgZ2l2ZW4gYSBzZXBhcmF0ZSBhZHZpY2UgbWVzc2FnZS4KKworICogVGhlIGluc24gc2hlZXQgZ2l2ZW4gYnkgInJlYmFzZSAtaSIgZGlkIG5vdCBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlCisgICBpbnNuIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkIHRvIGFmZmVjdCB0aGUgb3JkZXIgb2YgdGhlIGNvbW1pdHMgaW4KKyAgIHRoZSByZXN1bHRpbmcgaGlzdG9yeS4KKworICogImdpdCByZXBhY2siIHVzZWQgdG8gd3JpdGUgb3V0IHVucmVhY2hhYmxlIG9iamVjdHMgYXMgbG9vc2Ugb2JqZWN0cworICAgd2hlbiByZXBhY2tpbmcsIGV2ZW4gaWYgc3VjaCBsb29zZSBvYmplY3RzIHdpbGwgaW1tZWRpYXRlbHkgcHJ1bmVkCisgICBkdWUgdG8gaXRzIGFnZS4KKworICogQSBjb250cmliIHNjcmlwdCAicmVyZXJlLXRyYWluIiBkaWQgbm90IHdvcmsgb3V0IG9mIHRoZSBib3ggdW5sZXNzCisgICB1c2VyIGZ1dHplZCB3aXRoIGhlciAkUEFUSC4KKworICogImdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCIgdXNlZCB0byBlbWl0IG5vdGhpbmcgd2hlbiBydW4gYXQgdGhlCisgICB0b3AtbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSwgYnV0IG5vdyBpdCBnaXZlcyBhIGJsYW5rIGxpbmUuCisKKyAqIFRoZSBpMThuIG9mIGVycm9yIG1lc3NhZ2UgImdpdCBzdGFzaCBzYXZlIiB3YXMgbm90IHByb3Blcmx5IGRvbmUuCisKKyAqICJnaXQgc3VibW9kdWxlIiB1c2VkIGEgc2VkIHNjcmlwdCB0aGF0IHNvbWUgcGxhdGZvcm1zIG1pc2hhbmRsZWQuCisKKyAqIFdoZW4gdXNpbmcgYSBQZXJsIHNjcmlwdCBvbiBhIHN5c3RlbSB3aGVyZSAicGVybCIgZm91bmQgb24gdXNlcidzCisgICAkUEFUSCBjb3VsZCBiZSBhbmNpZW50IG9yIG90aGVyd2lzZSBicm9rZW4sIHdlIGFsbG93IGJ1aWxkZXJzIHRvCisgICBzcGVjaWZ5IHRoZSBwYXRoIHRvIGEgZ29vZCBjb3B5IG9mIFBlcmwgd2l0aCAkUEVSTF9QQVRILiAgVGhlCisgICBnaXR3ZWIgdGVzdCBmb3Jnb3QgdG8gdXNlIHRoYXQgUGVybCB3aGVuIHJ1bm5pbmcgaXRzIHRlc3QuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzZmJmMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjMudHh0CkBAIC0wLDAgKzEsNDMgQEAKK0dpdCB2MS43LjEwLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBtZXNzYWdlIGZpbGUgZm9yIEdlcm1hbiB0cmFuc2xhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIGEgYml0LgorCisgKiBSdW5uaW5nICJnaXQgY2hlY2tvdXQiIG9uIGFuIHVuYm9ybiBicmFuY2ggdXNlZCB0byBjb3JydXB0IEhFQUQuCisKKyAqIFdoZW4gY2hlY2tpbmcgb3V0IGFub3RoZXIgY29tbWl0IGZyb20gYW4gYWxyZWFkeSBkZXRhY2hlZCBzdGF0ZSwgd2UKKyAgIHVzZWQgdG8gcmVwb3J0IGFsbCBjb21taXRzIHRoYXQgYXJlIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgb2YgdGhlCisgICByZWZzIGFzIGxvc3NhZ2UsIGJ1dCBzb21lIG9mIHRoZW0gbWlnaHQgYmUgcmVhY2hhYmxlIGZyb20gdGhlIG5ldworICAgSEVBRCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gd2FybiBhYm91dCB0aGVtLgorCisgKiBTb21lIHRpbWUgYWdvLCAiZ2l0IGNsb25lIiBsb3N0IHRoZSBwcm9ncmVzcyBvdXRwdXQgZm9yIGl0cworICAgImNoZWNrb3V0IiBwaGFzZTsgd2hlbiBydW4gd2l0aG91dCBhbnkgIi0tcXVpZXQiIG9wdGlvbiwgaXQgc2hvdWxkCisgICBnaXZlIHByb2dyZXNzIHRvIHRoZSBsZW5ndGh5IG9wZXJhdGlvbi4KKworICogVGhlIGRpcmVjdG9yeSBwYXRoIHVzZWQgaW4gImdpdCBkaWZmIC0tbm8taW5kZXgiLCB3aGVuIGl0IHJlY3Vyc2VzCisgICBkb3duLCB3YXMgYnJva2VuIHdpdGggYSByZWNlbnQgdXBkYXRlIGFmdGVyIHYxLjcuMTAuMSByZWxlYXNlLgorCisgKiAibG9nIC16IC0tcHJldHR5PXRmb3JtYXQ6Li4uIiBkaWQgbm90IHRlcm1pbmF0ZSBlYWNoIHJlY29yZCB3aXRoCisgICBOVUwuICBUaGUgZml4IGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0IHdoZW4gdGhlIG91dHB1dCBhbHNvIGFza3MgZm9yCisgICAtLXBhdGNoIGFuZC9vciAtLXN0YXQsIHRob3VnaC4KKworICogVGhlIERXSU0gYmVoYXZpb3VyIGZvciAibG9nIC0tcHJldHR5PWZvcm1hdDolZ2QgLWciIHdhcyBzb21ld2hhdAorICAgYnJva2VuIGFuZCBnYXZlIHVuZHVlIHByZWNlZGVuY2UgdG8gY29uZmlndXJlZCBsb2cuZGF0ZSwgY2F1c2luZworICAgImdpdCBzdGFzaCBsaXN0IiB0byBzaG93ICJzdGFzaEB7dGltZSBzdGFtcCBzdHJpbmd9Ii4KKworICogImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4iIGlnbm9yZWQgIi0tYnJhbmNoIiBvcHRpb24gYnkgbWlzdGFrZS4gIFRoZQorICAgb3V0cHV0IGZvciAiZ2l0IHN0YXR1cyAtLWJyYW5jaCAteiIgd2FzIGFsc28gaW5jb3JyZWN0IGFuZCBkaWQgbm90CisgICB0ZXJtaW5hdGUgdGhlIHJlY29yZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoIG5hbWUgd2l0aCBOVUwgYXMgYXNrZWQuCisKKyAqIFdoZW4gYSBzdWJtb2R1bGUgcmVwb3NpdG9yeSB1c2VzIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUgbWVjaGFuaXNtLAorICAgc29tZSBjb21tYW5kcyB0aGF0IHdlcmUgc3RhcnRlZCBmcm9tIHRoZSBzdXBlcnByb2plY3QgZGlkIG5vdAorICAgbm90aWNlIGl0IGFuZCBmYWlsZWQgd2l0aCAiTm8gc3VjaCBvYmplY3QiIGVycm9ycy4gIFRoZSBzdWJjb21tYW5kcworICAgb2YgImdpdCBzdWJtb2R1bGUiIGNvbW1hbmQgdGhhdCByZWN1cnNlZCBpbnRvIHRoZSBzdWJtb2R1bGUgaW4gYQorICAgc2VwYXJhdGUgcHJvY2VzcyB3ZXJlIE9LOyBvbmx5IHRoZSBvbmVzIHRoYXQgY2hlYXRlZCBhbmQgcGVla2VkCisgICBkaXJlY3RseSBpbnRvIHRoZSBzdWJtb2R1bGUncyByZXBvc2l0b3J5IGZyb20gdGhlIHByaW1hcnkgcHJvY2VzcworICAgd2VyZSBhZmZlY3RlZC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzU5N2YyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNC50eHQKQEAgLTAsMCArMSwyOSBAQAorR2l0IHYxLjcuMTAuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIG1lc3NhZ2UgZmlsZSBmb3IgU3dlZGlzaCB0cmFuc2xhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIGEgYml0LgorCisgKiBBIG5hbWUgdGFrZW4gZnJvbSBtYWlsbWFwIHdhcyBjb3BpZWQgaW50byBhbiBpbnRlcm5hbCBidWZmZXIKKyAgIGluY29ycmVjdGx5IGFuZCBjb3VsZCBvdmVycnVuIHRoZSBidWZmZXIgaWYgaXQgaXMgdG9vIGxvbmcuCisKKyAqIEEgbWFsZm9ybWVkIGNvbW1pdCBvYmplY3QgdGhhdCBoYXMgYSBoZWFkZXIgbGluZSBjaG9tcGVkIGluIHRoZQorICAgbWlkZGxlIGNvdWxkIGtpbGwgZ2l0IHdpdGggYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCisKKyAqIEFuIGF1dGhvci9jb21taXR0ZXIgbmFtZSB0aGF0IGlzIGEgc2luZ2xlIGNoYXJhY3RlciB3YXMgbWlzaGFuZGxlZAorICAgYXMgYW4gaW52YWxpZCBuYW1lIGJ5IG1pc3Rha2UuCisKKyAqIFRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgZm9yIGEgbGFyZ2UgImdpdCBjaGVja291dCIgd2FzIHNlbnQgdG8KKyAgIHN0ZGVyciBldmVuIGlmIGl0IGlzIG5vdCBhIHRlcm1pbmFsLgorCisgKiAiZ2l0IGdyZXAgLWUgJyRwYXR0ZXJuJyIsIHVubGlrZSB0aGUgY2FzZSB3aGVyZSB0aGUgcGF0dGVybnMgYXJlCisgICByZWFkIGZyb20gYSBmaWxlLCBkaWQgbm90IHRyZWF0IGluZGl2aWR1YWwgbGluZXMgaW4gdGhlIGdpdmVuCisgICBwYXR0ZXJuIGFyZ3VtZW50IGFzIHNlcGFyYXRlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXMgaXQgc2hvdWxkLgorCisgKiBXaGVuICJnaXQgcmViYXNlIiB3YXMgZ2l2ZW4gYSBiYWQgY29tbWl0IHRvIHJlcGxheSB0aGUgaGlzdG9yeSBvbiwKKyAgIGl0cyBlcnJvciBtZXNzYWdlIGRpZCBub3QgY29ycmVjdGx5IGdpdmUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudAorICAgaXQgaGFkIHRyb3VibGUgcGFyc2luZy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGIxNzcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNS50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYxLjcuMTAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMC40CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBmYXN0LWV4cG9ydCIgZGlkIG5vdCBnaXZlIGEgcmVhZGFibGUgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZQorICAgc2FtZSBtYXJrIGVycm9uZW91c2x5IGFwcGVhcmVkIHR3aWNlIGluIHRoZSAtLWltcG9ydC1tYXJrcyBpbnB1dC4KKworICogImdpdCByZWJhc2UgLXAiIHVzZWQgdG8gcGF5IGF0dGVudGlvbiB0byByZWJhc2UuYXV0b3NxdWFzaCB3aGljaAorICAgIHdhcyB3cm9uZy4gICJnaXQgcmViYXNlIC1wIC1pIiBzaG91bGQsIGJ1dCAiZ2l0IHJlYmFzZSAtcCIgYnkKKyAgICBpdHNlbGYgc2hvdWxkIG5vdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEwMGJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAudHh0CkBAIC0wLDAgKzEsMjE5IEBACitHaXQgdjEuNy4xMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbXBhdGliaWxpdHkgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogRnJvbSB0aGlzIHJlbGVhc2Ugb24sIHRoZSAiZ2l0IG1lcmdlIiBjb21tYW5kIGluIGFuIGludGVyYWN0aXZlCisgICBzZXNzaW9uIHdpbGwgc3RhcnQgYW4gZWRpdG9yIHdoZW4gaXQgYXV0b21hdGljYWxseSByZXNvbHZlcyB0aGUKKyAgIG1lcmdlIGZvciB0aGUgdXNlciB0byBleHBsYWluIHRoZSByZXN1bHRpbmcgY29tbWl0LCBqdXN0IGxpa2UgdGhlCisgICAiZ2l0IGNvbW1pdCIgY29tbWFuZCBkb2VzIHdoZW4gaXQgd2Fzbid0IGdpdmVuIGEgY29tbWl0IG1lc3NhZ2UuCisKKyAgIElmIHlvdSBoYXZlIGEgc2NyaXB0IHRoYXQgcnVucyAiZ2l0IG1lcmdlIiBhbmQga2VlcHMgaXRzIHN0YW5kYXJkCisgICBpbnB1dCBhbmQgb3V0cHV0IGF0dGFjaGVkIHRvIHRoZSB1c2VyJ3MgdGVybWluYWwsIGFuZCBpZiB5b3UgZG8gbm90CisgICB3YW50IHRoZSB1c2VyIHRvIGV4cGxhaW4gdGhlIHJlc3VsdGluZyBtZXJnZSBjb21taXRzLCB5b3UgY2FuCisgICBleHBvcnQgR0lUX01FUkdFX0FVVE9FRElUIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byAibm8iLCBsaWtlCisgICB0aGlzOgorCisJIyEvYmluL3NoCisJR0lUX01FUkdFX0FVVE9FRElUPW5vCisJZXhwb3J0IEdJVF9NRVJHRV9BVVRPRURJVAorCisgICB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IgKGlmIHlvdSB3YW50IHlvdXIgdXNlcnMgdG8gZXhwbGFpbiB0aGVpcgorICAgbWVyZ2UgY29tbWl0cywgeW91IGRvIG5vdCBoYXZlIHRvIGRvIGFueXRoaW5nKS4gIEFsdGVybmF0aXZlbHksIHlvdQorICAgY2FuIGdpdmUgdGhlICItLW5vLWVkaXQiIG9wdGlvbiB0byBpbmRpdmlkdWFsIGludm9jYXRpb25zIG9mIHRoZQorICAgImdpdCBtZXJnZSIgY29tbWFuZCBpZiB5b3Uga25vdyBldmVyeWJvZHkgd2hvIHVzZXMgeW91ciBzY3JpcHQgaGFzCisgICBHaXQgdjEuNy44IG9yIG5ld2VyLgorCisgKiBUaGUgIi0tYmluYXJ5Ly1iIiBvcHRpb25zIHRvICJnaXQgYW0iIGhhdmUgYmVlbiBhIG5vLW9wIGZvciBxdWl0ZSBhCisgICB3aGlsZSBhbmQgd2VyZSBkZXByZWNhdGVkIGluIG1pZCAyMDA4ICh2MS42LjApLiAgV2hlbiB5b3UgZ2l2ZSB0aGVzZQorICAgb3B0aW9ucyB0byAiZ2l0IGFtIiwgaXQgd2lsbCBub3cgd2FybiBhbmQgYXNrIHlvdSBub3QgdG8gdXNlIHRoZW0uCisKKyAqIFdoZW4geW91IGRvIG5vdCB0ZWxsIHdoaWNoIGJyYW5jaGVzIGFuZCB0YWdzIHRvIHB1c2ggdG8gdGhlICJnaXQKKyAgIHB1c2giIGNvbW1hbmQgaW4gYW55IHdheSwgdGhlIGNvbW1hbmQgdXNlZCAibWF0Y2hpbmcgcmVmcyIgcnVsZSB0bworICAgdXBkYXRlIHJlbW90ZSBicmFuY2hlcyBhbmQgdGFncyB3aXRoIGJyYW5jaGVzIGFuZCB0YWdzIHdpdGggdGhlCisgICBzYW1lIG5hbWUgeW91IGxvY2FsbHkgaGF2ZS4gIEluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBHaXQsIHRoaXMgd2lsbAorICAgY2hhbmdlIHRvIHB1c2ggb3V0IG9ubHkgeW91ciBjdXJyZW50IGJyYW5jaCBhY2NvcmRpbmcgdG8gZWl0aGVyIHRoZQorICAgInVwc3RyZWFtIiBvciB0aGUgImN1cnJlbnQiIHJ1bGUuICBBbHRob3VnaCAidXBzdHJlYW0iIG1heSBiZSBtb3JlCisgICBwb3dlcmZ1bCBvbmNlIHRoZSB1c2VyIHVuZGVyc3RhbmRzIEdpdCBiZXR0ZXIsIHRoZSBzZW1hbnRpY3MKKyAgICJjdXJyZW50IiBnaXZlcyBpcyBzaW1wbGVyIGFuZCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBmb3IgYmVnaW5uZXJzCisgICBhbmQgbWF5IGJlIGEgc2FmZXIgYW5kIGJldHRlciBkZWZhdWx0IG9wdGlvbi4gIFdlIGhhdmVuJ3QgZGVjaWRlZAorICAgeWV0IHdoaWNoIG9uZSB0byBzd2l0Y2ggdG8uCisKKworVXBkYXRlcyBzaW5jZSB2MS43LjkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiB2YXJpb3VzICJnaXRrIiB1cGRhdGVzLgorICAgLSBzaG93IHRoZSBwYXRoIHRvIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IGluIHRoZSB3aW5kb3cgdGl0bGUKKyAgIC0gdXBkYXRlIHByZWZlcmVuY2UgZWRpdCBkaWFsb2cKKyAgIC0gZGlzcGxheSBmaWxlIGxpc3QgY29ycmVjdGx5IHdoZW4gZGlyZWN0b3JpZXMgYXJlIGdpdmVuIG9uIGNvbW1hbmQgbGluZQorICAgLSBtYWtlICJnaXQtZGVzY3JpYmUiIG91dHB1dCBpbiB0aGUgbG9nIG1lc3NhZ2UgaW50byBhIGNsaWNrYWJsZSBsaW5rCisgICAtIGF2b2lkIG1hdGNoaW5nIHRoZSBVTklYIHRpbWVzdGFtcCBwYXJ0IHdoZW4gc2VhcmNoaW5nIGFsbCBmaWVsZHMKKyAgIC0gZ2l2ZSBwcmVmZXJlbmNlIHRvIHN5bWJvbGljIGZvbnQgbmFtZXMgbGlrZSBzYW5zICYgbW9ub3NwYWNlCisgICAtIGFsbG93IGNvbXBhcmluZyB0d28gY29tbWl0cyB1c2luZyBhIG1hcmsKKyAgIC0gImdpdGsiIGhvbm9ycyBsb2cuc2hvd3Jvb3QgY29uZmlndXJhdGlvbi4KKworICogVGVhbXMgZm9yIGxvY2FsaXppbmcgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIFBvcmNlbGFpbiBsYXllciBvZgorICAgY29tbWFuZHMgYXJlIHN0YXJ0aW5nIHRvIGZvcm0sIHRoYW5rcyB0byBKaWFuZyBYaW4gd2hvIHZvbHVudGVlcmVkCisgICB0byBiZSB0aGUgbG9jYWxpemF0aW9uIGNvb3JkaW5hdG9yLiAgVHJhbnNsYXRlZCBtZXNzYWdlcyBmb3IKKyAgIHNpbXBsaWZpZWQgQ2hpbmVzZSwgU3dlZGlzaCBhbmQgUG9ydHVndWVzZSBhcmUgYXZhaWxhYmxlLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20gbGVhcm5lZCBhbiAiaW5jbHVkZSIgZmFjaWxpdHk7IGFuCisgICBhc3NpZ25tZW50IHRvIHRoZSBpbmNsdWRlLnBhdGggcHNldWRvLXZhcmlhYmxlIGNhdXNlcyB0aGUgbmFtZWQKKyAgIGZpbGUgdG8gYmUgaW5jbHVkZWQgaW4tcGxhY2Ugd2hlbiBHaXQgbG9va3MgdXAgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGVzLgorCisgKiBBIGNvbnRlbnQgZmlsdGVyIChjbGVhbi9zbXVkZ2UpIHVzZWQgdG8gYmUganVzdCBhIHdheSB0byBtYWtlIHRoZQorICAgcmVjb3JkZWQgY29udGVudHMgIm1vcmUgdXNlZnVsIiwgYW5kIGFsbG93ZWQgdG8gZmFpbDsgYSBmaWx0ZXIgY2FuCisgICBub3cgb3B0aW9uYWxseSBiZSBtYXJrZWQgYXMgInJlcXVpcmVkIi4KKworICogT3B0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoICItLW5vLSIgKGUuZy4gdGhlICItLW5vLXZlcmlmeSIKKyAgIG9wdGlvbiBvZiB0aGUgImdpdCBjb21taXQiIGNvbW1hbmQpIGNhbiBiZSBuZWdhdGVkIGJ5IG9taXR0aW5nCisgICAibm8tIiBmcm9tIGl0cyBuYW1lLCBlLmcuICJnaXQgY29tbWl0IC0tdmVyaWZ5Ii4KKworICogImdpdCBhbSIgbGVhcm5lZCB0byBwYXNzICItYiIgb3B0aW9uIHRvIHVuZGVybHlpbmcgImdpdCBtYWlsaW5mbyIsIHNvCisgICB0aGF0IGEgYnJhY2tldGVkIHN0cmluZyBvdGhlciB0aGFuICJQQVRDSCIgYXQgdGhlIGJlZ2lubmluZyBjYW4gYmUga2VwdC4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCAiLS1zaW5nbGUtYnJhbmNoIiBvcHRpb24gdG8gbGltaXQgY2xvbmluZyB0byBhCisgICBzaW5nbGUgYnJhbmNoIChzdXJwcmlzZSEpOyB0YWdzIHRoYXQgZG8gbm90IHBvaW50IGludG8gdGhlIGhpc3RvcnkKKyAgIG9mIHRoZSBicmFuY2ggYXJlIG5vdCBmZXRjaGVkLgorCisgKiAiZ2l0IGNsb25lIiBsZWFybmVkIHRvIGRldGFjaCB0aGUgSEVBRCBpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkKKyAgIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzIGEgdGFnIHdpdGggIi0tYnJhbmNoIiAoZS5nLiwgIi0tYnJhbmNoPXYxLjAiKS4KKyAgIENsb25lIGFsc28gbGVhcm5lZCB0byBwcmludCB0aGUgdXN1YWwgImRldGFjaGVkIEhFQUQiIGFkdmljZSBpbiBzdWNoCisgICBhIGNhc2UsIHNpbWlsYXIgdG8gImdpdCBjaGVja291dCB2MS4wIi4KKworICogV2hlbiBzaG93aW5nIGEgcGF0Y2ggd2hpbGUgaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzLCB0aGUgY29udGV4dAorICAgbGluZXMgYXJlIHRha2VuIGZyb20gdGhlIHBvc3RpbWFnZSwgaW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgdG8KKyAgIHZpZXcgdGhlIG91dHB1dC4KKworICogImdpdCBkaWZmIC0tc3RhdCIgbGVhcm5lZCB0byBhZGp1c3QgdGhlIHdpZHRoIG9mIHRoZSBvdXRwdXQgb24KKyAgIHdpZGVyIHRlcm1pbmFscywgYW5kIGdpdmUgbW9yZSBjb2x1bW5zIHRvIHBhdGhuYW1lcyBhcyBuZWVkZWQuCisKKyAqICJkaWZmLWhpZ2hsaWdodCIgZmlsdGVyIChpbiBjb250cmliLykgd2FzIHVwZGF0ZWQgdG8gcHJvZHVjZSBtb3JlCisgICBhZXN0aGV0aWNhbGx5IHBsZWFzaW5nIG91dHB1dC4KKworICogImZzY2siIGxlYXJuZWQgIi0tbm8tZGFuZ2xpbmciIG9wdGlvbiB0byBvbWl0IGRhbmdsaW5nIG9iamVjdAorICAgaW5mb3JtYXRpb24uCisKKyAqICJnaXQgbG9nIC1HIiBhbmQgImdpdCBsb2cgLVMiIGxlYXJuZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgIi1pIgorICAgb3B0aW9uLiAgV2l0aCAiLWkiLCAibG9nIC1HIiBpZ25vcmVzIHRoZSBjYXNlIHdoZW4gZmluZGluZyBwYXRjaAorICAgaHVua3MgdGhhdCBpbnRyb2R1Y2Ugb3IgcmVtb3ZlIGEgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgIHBhdHRlcm4uICBTaW1pbGFybHkgd2l0aCAiLWkiLCAibG9nIC1TIiBpZ25vcmVzIHRoZSBjYXNlIHdoZW4KKyAgIGZpbmRpbmcgdGhlIGNvbW1pdCB0aGUgZ2l2ZW4gYmxvY2sgb2YgdGV4dCBhcHBlYXJzIG9yIGRpc2FwcGVhcnMKKyAgIGZyb20gdGhlIGZpbGUuCisKKyAqICJnaXQgbWVyZ2UiIGluIGFuIGludGVyYWN0aXZlIHNlc3Npb24gbGVhcm5lZCB0byBzcGF3biB0aGUgZWRpdG9yCisgICBieSBkZWZhdWx0IHRvIGxldCB0aGUgdXNlciBlZGl0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlLAorICAgdG8gZW5jb3VyYWdlIHBlb3BsZSB0byBleHBsYWluIHRoZWlyIG1lcmdlcyBiZXR0ZXIuIExlZ2FjeSBzY3JpcHRzCisgICBjYW4gZXhwb3J0IEdJVF9NRVJHRV9BVVRPRURJVD1ubyB0byByZXRhaW4gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuCisgICBCb3RoICJnaXQgbWVyZ2UiIGFuZCAiZ2l0IHB1bGwiIGNhbiBiZSBnaXZlbiAtLW5vLWVkaXQgZnJvbSB0aGUKKyAgIGNvbW1hbmQgbGluZSB0byBhY2NlcHQgdGhlIGF1dG8tZ2VuZXJhdGVkIG1lcmdlIG1lc3NhZ2UuCisKKyAqIFRoZSBhZHZpY2UgbWVzc2FnZSBnaXZlbiB3aGVuIHRoZSB1c2VyIGRpZG4ndCBnaXZlIGVub3VnaCBjbHVlIG9uCisgICB3aGF0IHRvIG1lcmdlIHRvICJnaXQgcHVsbCIgYW5kICJnaXQgbWVyZ2UiIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGJlIG1vcmUgY29uY2lzZSBhbmQgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCB0aGUgIi0tcHJ1bmUiIG9wdGlvbiwgc2ltaWxhciB0byAiZ2l0IGZldGNoIi4KKworICogVGhlIHdob2xlIGRpcmVjdG9yeSB0aGF0IGhvdXNlcyBhIHRvcC1sZXZlbCBzdXBlcnByb2plY3QgbWFuYWdlZCBieQorICAgImdpdCBzdWJtb2R1bGUiIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIHBsYWNlLgorCisgKiAiZ2l0IHN5bWJvbGljLXJlZiIgbGVhcm5lZCB0aGUgIi0tc2hvcnQiIG9wdGlvbiB0byBhYmJyZXZpYXRlIHRoZQorICAgcmVmbmFtZSBpdCBzaG93cyB1bmFtYmlndW91c2x5LgorCisgKiAiZ2l0IHRhZyAtLWxpc3QiIGNhbiBiZSBnaXZlbiAiLS1wb2ludHMtYXQgPG9iamVjdD4iIHRvIGxpbWl0IGl0cworICAgb3V0cHV0IHRvIHRob3NlIHRoYXQgcG9pbnQgYXQgdGhlIGdpdmVuIG9iamVjdC4KKworICogImdpdHdlYiIgYWxsb3dzIGludGVybWVkaWF0ZSBlbnRyaWVzIGluIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5CisgICB0aGF0IGxlYWRzIHRvIGEgcHJvamVjdCB0byBiZSBjbGlja2VkLCB3aGljaCBpbiB0dXJuIHNob3dzIHRoZQorICAgbGlzdCBvZiBwcm9qZWN0cyBpbnNpZGUgdGhhdCBkaXJlY3RvcnkuCisKKyAqICJnaXR3ZWIiIGxlYXJuZWQgdG8gcmVhZCB2YXJpb3VzIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBmb3IgdGhlCisgICByZXBvc2l0b3JpZXMgbGF6aWx5LCBpbnN0ZWFkIG9mIHJlYWRpbmcgZXZlcnl0aGluZyB0aGF0IGNvdWxkIGJlCisgICBuZWVkZWQgKGluY2x1ZGluZyB0aGUgb25lcyB0aGF0IGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhIHNwZWNpZmljCisgICB0YXNrKS4KKworICogUHJvamVjdCBzZWFyY2ggaW4gImdpdHdlYiIgc2hvd3MgdGhlIHN1YnN0cmluZyB0aGF0IG1hdGNoZWQgaW4gdGhlCisgICBwcm9qZWN0IG5hbWUgYW5kIGRlc2NyaXB0aW9uIGhpZ2hsaWdodGVkLgorCisgKiBIVFRQIHRyYW5zcG9ydCBsZWFybmVkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIGEgcHJveHkgaWYgbmVlZGVkLgorCisgKiBBIG5ldyBzY3JpcHQgImRpZmZhbGwiIGlzIGFkZGVkIHRvIGNvbnRyaWIvOyBpdCBkcml2ZXMgYW4KKyAgIGV4dGVybmFsIHRvb2wgdG8gcGVyZm9ybSBhIGRpcmVjdG9yeSBkaWZmIG9mIHR3byBHaXQgcmV2aXNpb25zCisgICBpbiBvbmUgZ28sIHVubGlrZSAiZGlmZnRvb2wiIHRoYXQgY29tcGFyZXMgb25lIGZpbGUgYXQgYSB0aW1lLgorCitGb3JlaWduIEludGVyZmFjZQorCisgKiBJbXByb3ZlZCBoYW5kbGluZyBvZiB2aWV3cywgbGFiZWxzIGFuZCBicmFuY2hlcyBpbiAiZ2l0LXA0IiAoaW4gY29udHJpYikuCisKKyAqICJnaXQtcDQiIChpbiBjb250cmliKSBzdWZmZXJlZCBmcm9tIHVubmVjZXNzYXJ5IG1lcmdlIGNvbmZsaWN0cyB3aGVuCisgICBwNCBleHBhbmRlZCB0aGUgZW1iZWRkZWQgJFJDUyQtbGlrZSBrZXl3b3JkczsgaXQgY2FuIGJlIG5vdyB0b2xkIHRvCisgICB1bmV4cGFuZCB0aGVtLgorCisgKiBTb21lICJnaXQtc3ZuIiB1cGRhdGVzLgorCisgKiAidmNzLXN2biIvInN2bi1mZSIgbGVhcm5lZCB0byByZWFkIGR1bXBzIHdpdGggc3ZuLWRlbHRhcyBhbmQKKyAgIHN1cHBvcnQgaW5jcmVtZW50YWwgaW1wb3J0cy4KKworICogImdpdCBkaWZmdG9vbC9tZXJnZXRvb2wiIGxlYXJuZWQgdG8gZHJpdmUgRGVsdGFXYWxrZXIuCisKK1BlcmZvcm1hbmNlCisKKyAqIFVubmVjZXNzYXJ5IGNhbGxzIHRvIHBhcnNlX29iamVjdCgpICJnaXQgdXBsb2FkLXBhY2siIG1ha2VzIGluCisgICByZXNwb25zZSB0byAiZ2l0IGZldGNoIiwgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQsIHRvIGhlbHAgcGVyZm9ybWFuY2UKKyAgIGluIHJlcG9zaXRvcmllcyB3aXRoIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgcmVmcy4KKworSW50ZXJuYWwgSW1wbGVtZW50YXRpb24gKHBsZWFzZSByZXBvcnQgcG9zc2libGUgcmVncmVzc2lvbnMpCisKKyAqIFJlY3Vyc2l2ZSBjYWxsIGNoYWlucyBpbiAiZ2l0IGluZGV4LXBhY2siIHRvIGRlYWwgd2l0aCBsb25nIGRlbHRhCisgICBjaGFpbnMgaGF2ZSBiZWVuIGZsYXR0ZW5lZCwgdG8gcmVkdWNlIHRoZSBzdGFjayBmb290cHJpbnQuCisKKyAqIFVzZSBvZiBhZGRfZXh0cmFfcmVmKCkgQVBJIGlzIG5vdyBnb25lLCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvCisgICBjbGVhbmx5IHJlc3RydWN0dXJlIHRoZSBvdmVyYWxsIHJlZnMgQVBJLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIHBhcnNlciBvZiAiZ2l0IHBhY2stb2JqZWN0cyIgbm93IHVzZXMgcGFyc2Utb3B0aW9ucworICAgQVBJLgorCisgKiBUaGUgdGVzdCBzdWl0ZSBzdXBwb3J0cyB0aGUgbmV3ICJ0ZXN0X3BhdXNlIiBoZWxwZXIgZnVuY3Rpb24uCisKKyAqIFBhcmFsbGVsIHRvIHRoZSB0ZXN0IHN1aXRlLCB0aGVyZSBpcyBhIGJlZ2lubmluZyBvZiBwZXJmb3JtYW5jZQorICAgYmVuY2htYXJraW5nIGZyYW1ld29yay4KKworICogdC9NYWtlZmlsZSBpcyBhZGp1c3RlZCB0byBwcmV2ZW50IG5ld2VyIHZlcnNpb25zIG9mIEdOVSBtYWtlIGZyb20KKyAgIHJ1bm5pbmcgdGVzdHMgaW4gc2VlbWluZ2x5IHJhbmRvbSBvcmRlci4KKworICogVGhlIGNvZGUgdG8gY2hlY2sgaWYgYSBwYXRoIHBvaW50cyBhdCBhIGZpbGUgYmV5b25kIGEgc3ltYm9saWMgbGluaworICAgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkIHRvIGJlIHRocmVhZC1zYWZlLgorCisgKiBXaGVuIHBydW5pbmcgZGlyZWN0b3JpZXMgdGhhdCBoYXMgYmVjb21lIGVtcHR5IGR1cmluZyAiZ2l0IHBydW5lIgorICAgYW5kICJnaXQgcHJ1bmUtcGFja2VkIiwgY2FsbCBjbG9zZWRpcigpIHRoYXQgaXRlcmF0ZXMgb3ZlciBhCisgICBkaXJlY3RvcnkgYmVmb3JlIHJtZGlyKCkgaXQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuOSBpbiB0aGUgbWFpbnRlbmFuY2UKK3JlbGVhc2VzIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCisKKyAqIEJ1aWxkIHdpdGggTk9fUEVSTF9NQUtFTUFLRVIgd2FzIGJyb2tlbiBhbmQgR2l0OjpJMThOIGRpZCBub3Qgd29yaworICAgd2l0aCB2ZXJzaW9ucyBvZiBQZXJsIG9sZGVyIHRoYW4gNS44LjMuCisgICAobWVyZ2UgNWViNjYwZSBhYi9wZXJsLWkxOG4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHRhZyAtcyIgaG9ub3JlZCAiZ3BnLnByb2dyYW0iIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgc2luY2UKKyAgIDEuNy45LCBidXQgImdpdCB0YWcgLXYiIGFuZCAiZ2l0IHZlcmlmeS10YWciIGRpZG4ndC4KKyAgIChtZXJnZSBhMmMyNTA2IGF6L3ZlcmlmeS10YWctdXNlLWdwZy1jb25maWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiY29uZmlndXJlIiBzY3JpcHQgbGVhcm5lZCB0byB0YWtlICItLXdpdGgtc2FuZS10b29sLXBhdGgiIGZyb20gdGhlCisgICBjb21tYW5kIGxpbmUgdG8gcmVjb3JkIFNBTkVfVE9PTF9QQVRIICh1c2VkIHRvIGF2b2lkIGJyb2tlbiBwbGF0Zm9ybQorICAgdG9vbHMgaW4gL3Vzci9iaW4pIGluIGNvbmZpZy5tYWsuYXV0b2dlbi4gIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IKKyAgIHBlb3BsZSBvbiBTb2xhcmlzIHdobyBoYXZlIHNhbmVyIHRvb2xzIG91dHNpZGUgL3Vzci94cGdbNDZdL2Jpbi4KKworICogenNoIHBvcnQgb2YgYmFzaCBjb21wbGV0aW9uIHNjcmlwdCBuZWVkZWQgYW5vdGhlciB3b3JrYXJvdW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzdlY2NhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMS50eHQKQEAgLTAsMCArMSw5IEBACitHaXQgdjEuNy4xMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjcm9zcyBsaW5rcyBpbiB0aGUgSFRNTCB2ZXJzaW9uIG9mIG1hbnVhbCBwYWdlcyB3ZXJlIGJyb2tlbi4KKworQWxzbyBjb250YWlucyBtaW5vciB0eXBvZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjZmQwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjIudHh0CkBAIC0wLDAgKzEsNTMgQEAKK0dpdCB2MS43LjExLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9uIEN5Z3dpbiwgdGhlIHBsYXRmb3JtIHByZWFkKDIpIGlzIG5vdCB0aHJlYWQgc2FmZSwganVzdCBsaWtlIG91cgorICAgb3duIGNvbXBhdC8gZW11bGF0aW9uLCBhbmQgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGluZGV4LXBhY2sKKyAgIHByb2dyYW0uICBNYWtlZmlsZSB2YXJpYWJsZSBOT19USFJFQURfU0FGRV9QUkVBRCBjYW4gYmUgZGVmaW5lZCB0bworICAgYXZvaWQgdXNlIG9mIHRoaXMgZnVuY3Rpb24gaW4gYSB0aHJlYWRlZCBwcm9ncmFtLgorCisgKiAiZ2l0IGFkZCIgYWxsb3dzIGFkZGluZyBhIHJlZ3VsYXIgZmlsZSB0byB0aGUgcGF0aCB3aGVyZSBhCisgICBzdWJtb2R1bGUgdXNlZCB0byBleGlzdCwgYnV0ICJnaXQgdXBkYXRlLWluZGV4IiBkb2VzIG5vdCBhbGxvdyBhbgorICAgZXF1aXZhbGVudCBvcGVyYXRpb24gdG8gUG9yY2VsYWluIHdyaXRlcnMuCisKKyAqICJnaXQgYXJjaGl2ZSIgaW5jb3JyZWN0bHkgY29tcHV0ZWQgdGhlIGhlYWRlciBjaGVja3N1bTsgdGhlIHN5bXB0b20KKyAgIHdhcyBvYnNlcnZlZCBvbmx5IHdoZW4gdXNpbmcgcGF0aG5hbWVzIHdpdGggaGktYml0IHNldC4KKworICogImdpdCBibGFtZSIgZGlkIG5vdCB0cnkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFiYnJldmlhdGVkIGNvbW1pdAorICAgb2JqZWN0IG5hbWVzIGluIGl0cyBvdXRwdXQgYXJlIHVuaXF1ZS4KKworICogUnVubmluZyAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIG9uIGEgYnVuZGxlIHRoYXQgcmVjb3JkcyBhIGNvbXBsZXRlCisgICBoaXN0b3J5IHNhaWQgIml0IHJlcXVpcmVzIHRoZXNlIDAgY29tbWl0cyIuCisKKyAqICJnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIiB0byBjbG9uZSBhIHNpbmdsZSBicmFuY2ggZGlkIG5vdCBsaW1pdAorICAgdGhlIGNsb25pbmcgdG8gdGhlIHNwZWNpZmllZCBicmFuY2guCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgYW5kCisgICBkaWQgbm90IGNvcnJlY3RseSBnaXZlIGV4aXQgY29kZXMgd2hlbiBydW4gdW5kZXIgIi0tcXVpZXQiIG9wdGlvbi4KKworICogImdpdCBkaWZmIC0tbm8taW5kZXgiIGRpZCBub3Qgd29yayB3aXRoIHBhZ2VycyBjb3JyZWN0bHkuCisKKyAqICJnaXQgZGlmZiBDT1BZSU5HIEhFQUQ6Q09QWUlORyIgZ2F2ZSBhIG5vbnNlbnNlIGVycm9yIG1lc3NhZ2UgdGhhdAorICAgY2xhaW1lZCB0aGF0IHRoZSB0cmVlLWlzaCBIRUFEIGRpZCBub3QgaGF2ZSBDT1BZSU5HIGluIGl0LgorCisgKiBXaGVuICJnaXQgbG9nIiBnZXRzICItLXNpbXBsaWZ5LW1lcmdlcy9ieS1kZWNvcmF0aW9uIiB0b2dldGhlciB3aXRoCisgICAiLS1maXJzdC1wYXJlbnQiLCB0aGUgY29tYmluYXRpb24gb2YgdGhlc2Ugb3B0aW9ucyBtYWtlcyB0aGUKKyAgIHNpbXBsaWZpY2F0aW9uIGxvZ2ljIHRvIHVzZSBpbi1jb3JlIGNvbW1pdCBvYmplY3RzIHRoYXQgaGF2ZW4ndAorICAgYmVlbiBleGFtaW5lZCBmb3IgcmVsZXZhbmNlLCBlaXRoZXIgcHJvZHVjaW5nIGluY29ycmVjdCByZXN1bHQgb3IKKyAgIHRha2luZyB0b28gbG9uZyB0byBwcm9kdWNlIGFueSBvdXRwdXQuICBUZWFjaCB0aGUgc2ltcGxpZmljYXRpb24KKyAgIGxvZ2ljIHRvIGlnbm9yZSBjb21taXRzIHRoYXQgdGhlIGZpcnN0LXBhcmVudCB0cmF2ZXJzYWwgbG9naWMKKyAgIGlnbm9yZWQgd2hlbiBib3RoIGFyZSBpbiBlZmZlY3QgdG8gd29yayBhcm91bmQgdGhlIGlzc3VlLgorCisgKiAiZ2l0IGxzLWZpbGVzIC0tZXhjbHVkZT10IC1pIiBkaWQgbm90IGNvbnNpZGVyIGFueXRoaW5nIHVuZGVyIHQvIGFzCisgICBleGNsdWRlZCwgYXMgaXQgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIGV4Y2x1c2lvbiBvZiBsZWFkaW5nIHBhdGhzCisgICB3aGlsZSB3YWxraW5nIHRoZSBpbmRleC4gIE90aGVyIHR3byB1c2VycyBvZiBleGNsdWRlZCgpIGFyZSBhbHNvCisgICB1cGRhdGVkLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCAkdXJsIGRldiIgd2hlbiB0aGUgdGlwIG9mICJkZXYiIGJyYW5jaCB3YXMgdGFnZ2VkCisgICB3aXRoICJleHQ0LWZvci1saW51cyIgdXNlZCB0aGUgY29udGVudHMgZnJvbSB0aGUgdGFnIGluIHRoZSBvdXRwdXQKKyAgIGJ1dCBzdGlsbCBhc2tlZCB0aGUgImRldiIgYnJhbmNoIHRvIGJlIHB1bGxlZCwgbm90IHRoZSB0YWcuCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDk0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4zLnR4dApAQCAtMCwwICsxLDUzIEBACitHaXQgdjEuNy4xMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVzaCAkdGhlcmUgOmJvZ28iIChhbmQgaXRzIGVxdWl2YWxlbnQKKyAgICJnaXQgcHVzaCAkdGhlcmUgLS1kZWxldGUgYm9nbyIpIG1lbnRpb25lZCB0aGF0IHdlIHRyaWVkIGFuZCBmYWlsZWQKKyAgIHRvIGd1ZXNzIHdoYXQgcmVmIGlzIGJlaW5nIGRlbGV0ZWQgYmFzZWQgb24gdGhlIExIUyBvZiB0aGUgcmVmc3BlYywKKyAgIHdoaWNoIHdlIGRvbid0LgorCisgKiBBIGhhbmRmdWwgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdlIGNyZWF0ZSBoYWQgdGlnaHRlciB0aGFuCisgICBuZWNlc3NhcnkgcGVybWlzc2lvbiBiaXRzIHdoZW4gdGhlIHVzZXIgd2FudGVkIHRvIGhhdmUgZ3JvdXAKKyAgIHdyaXRhYmlsaXR5IChlLmcuIGJ5IHNldHRpbmcgInVtYXNrIDAwMiIpLgorCisgKiAiY29tbWl0IC0tYW1lbmQiIHVzZWQgdG8gcmVmdXNlIGFtZW5kaW5nIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgbG9nCisgICBtZXNzYWdlLCB3aXRoIG9yIHdpdGhvdXQgIi0tYWxsb3ctZW1wdHktbWVzc2FnZSIuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQgLS1vbmx5IC0tIiB3YXMgbWVhbnQgdG8gYWxsb3cgIkNsZXZlciIgcGVvcGxlIHRvCisgICByZXdyaXRlIHRoZSBjb21taXQgbWVzc2FnZSB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlIGV2ZW4gd2hlbiB0aGV5CisgICBoYXZlIGFscmVhZHkgY2hhbmdlcyBmb3IgdGhlIG5leHQgY29tbWl0IGFkZGVkIHRvIHRoZWlyIGluZGV4LCBidXQKKyAgIGl0IG5ldmVyIHdvcmtlZCBhcyBhZHZlcnRpc2VkIHNpbmNlIGl0IHdhcyBpbnRyb2R1Y2VkIGluIDEuMy4wIGVyYS4KKworICogRXZlbiB0aG91Z2ggdGhlIGluZGV4IGNhbiByZWNvcmQgcGF0aG5hbWVzIGxvbmdlciB0aGFuIDE8PDEyIGJ5dGVzLAorICAgaW4gc29tZSBwbGFjZXMgd2Ugd2VyZSBub3QgY29tcGFyaW5nIHRoZW0gaW4gZnVsbCwgcG90ZW50aWFsbHkKKyAgIHJlcGxhY2luZyBpbmRleCBlbnRyaWVzIGluc3RlYWQgb2YgYWRkaW5nLgorCisgKiAiZ2l0IHNob3ciJ3MgYXV0by13YWxraW5nIGJlaGF2aW91ciB3YXMgYW4gdW5yZWxpYWJsZSBhbmQKKyAgIHVucHJlZGljdGFibGUgaGFjazsgaXQgbm93IGJlaGF2ZXMganVzdCBsaWtlICJnaXQgbG9nIiBkb2VzIHdoZW4gaXQKKyAgIHdhbGtzLgorCisgKiAiZ2l0IGRpZmYiLCAiZ2l0IHN0YXR1cyIgYW5kIGFueXRoaW5nIHRoYXQgaW50ZXJuYWxseSB1c2VzIHRoZQorICAgY29tcGFyaXNvbiBtYWNoaW5lcnkgd2FzIHV0dGVybHkgYnJva2VuIHdoZW4gdGhlIGRpZmZlcmVuY2UKKyAgIGludm9sdmVkIGEgZmlsZSB3aXRoICItIiBhcyBpdHMgbmFtZS4gIFRoaXMgd2FzIGR1ZSB0byB0aGUgd2F5ICJnaXQKKyAgIGRpZmYgLS1uby1pbmRleCIgd2FzIGluY29ycmVjdGx5IGJvbHRlZCBvbiB0byB0aGUgc3lzdGVtLCBtYWtpbmcKKyAgIGFueSBjb21wYXJpc29uIHRoYXQgaW52b2x2ZXMgYSBmaWxlICItIiBhdCB0aGUgcm9vdCBsZXZlbAorICAgaW5jb3JyZWN0bHkgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworICogV2UgZGlkIG5vdCBoYXZlIHRlc3QgdG8gbWFrZSBzdXJlICJnaXQgcmViYXNlIiB3aXRob3V0IGV4dHJhIG9wdGlvbnMKKyAgIGZpbHRlcnMgb3V0IGFuIGVtcHR5IGNvbW1pdCBpbiB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKworICogImdpdCBmYXN0LWV4cG9ydCIgcHJvZHVjZWQgYW4gaW5wdXQgc3RyZWFtIGZvciBmYXN0LWltcG9ydCB3aXRob3V0CisgICBwcm9wZXJseSBxdW90aW5nIHBhdGhuYW1lcyB3aGVuIHRoZXkgY29udGFpbiBTUHMgaW4gdGhlbS4KKworICogImdpdCBjaGVja291dCAtLWRldGFjaCIsIHdoZW4geW91IGFyZSBzdGlsbCBvbiBhbiB1bmJvcm4gYnJhbmNoLAorICAgc2hvdWxkIGJlIGZvcmJpZGRlbiwgYnV0IGl0IHdhc24ndC4KKworICogU29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgUGVybCB0ZXJtaW5hdGVzICJsaW5lcyIgd2l0aCBDUkxGIGV2ZW4gd2hlbgorICAgdGhlIHNjcmlwdCBpcyBvcGVyYXRpbmcgb24ganVzdCBhIHNlcXVlbmNlIG9mIGJ5dGVzLiAgTWFrZSBzdXJlIHRvCisgICB1c2UgIiRQRVJMX1BBVEgiLCB0aGUgdmVyc2lvbiBvZiBQZXJsIHRoZSB1c2VyIHRvbGQgR2l0IHRvIHVzZSwgaW4KKyAgIG91ciB0ZXN0cyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBicmVha2FnZXMgaW4gdGVzdHMuCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjQwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS40LnR4dApAQCAtMCwwICsxLDMxIEBACitHaXQgdjEuNy4xMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiJEdJVF9ESVIvQ09NTUlUX0VESVRNU0ciIGZpbGUgdGhhdCBpcyB1c2VkIHRvIGhvbGQgdGhlIGNvbW1pdCBsb2cKKyAgIG1lc3NhZ2UgdXNlciBlZGl0cyB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAqIFRoZSBhZHZpc2UoKSBmdW5jdGlvbiBkaWQgbm90IHVzZSB2YXJhcmdzIGNvcnJlY3RseSB0byBmb3JtYXQKKyAgIGl0cyBtZXNzYWdlLgorCisgKiBXaGVuICJnaXQgYW0iIGZhaWxlZCwgb2xkIHRpbWVycyBrbmV3IHRvIGNoZWNrIC5naXQvcmViYXNlLWFwcGx5L3BhdGNoCisgICB0byBzZWUgd2hhdCB3ZW50IHdyb25nLCBidXQgd2UgbmV2ZXIgdG9sZCB0aGUgdXNlcnMgYWJvdXQgaXQuCisKKyAqICJnaXQgY29tbWl0LXRyZWUiIGxlYXJuZWQgYSBtb3JlIG5hdHVyYWwgIi1wIDxwYXJlbnQ+IDx0cmVlPiIgb3JkZXIKKyAgIG9mIGFyZ3VtZW50cyBsb25nIHRpbWUgYWdvLCBidXQgcmVjZW50bHkgZm9yZ290IGl0IGJ5IG1pc3Rha2UuCisKKyAqICJnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIiBkaWQgbm90IG91dHB1dCBhbnl0aGluZyBmb3IgYSB0eXBlY2hhbmdlCisgICBmaWxlcGFpciB3aGVuIEdJVF9FWFRFUk5BTF9ESUZGIGlzIGluIGVmZmVjdC4KKworICogSW4gMS43LjkgZXJhLCB3ZSB0YXVnaHQgImdpdCByZWJhc2UiIGFib3V0IHRoZSByYXcgdGltZXN0YW1wIGZvcm1hdAorICAgYnV0IHdlIGRpZCBub3QgdGVhY2ggdGhlIHNhbWUgdHJpY2sgdG8gImZpbHRlci1icmFuY2giLCB3aGljaCByb2xsZWQKKyAgIGEgc2ltaWxhciBsb2dpYyBvbiBpdHMgb3duLgorCisgKiBXaGVuICJnaXQgc3VibW9kdWxlIGFkZCIgY2xvbmVzIGEgc3VibW9kdWxlIHJlcG9zaXRvcnksIGl0IGNhbiBnZXQKKyAgIGNvbmZ1c2VkIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRpbmcgc3VibW9kdWxlIHJlcG9zaXRvcnkgaW4gdGhlCisgICBzdXBlcnByb2plY3QncyAuZ2l0LyBkaXJlY3Rvcnkgd2hlbiB0aGVyZSBpcyBhIHN5bWJvbGljIGxpbmsgaW4gdGhlCisgICBwYXRoIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworQWxzbyBjb250YWlucyBtaW5vciB0eXBvZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyZWQ4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjUudHh0CkBAIC0wLDAgKzEsMzYgQEAKK0dpdCB2MS43LjExLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBNYWtlZmlsZSBydWxlIHRvIGNyZWF0ZSBhc3NlbWJseSBvdXRwdXQgKHByaW1hcmlseSBmb3IKKyAgIGRlYnVnZ2luZyBwdXJwb3NlcykgZGlkIG5vdCBjcmVhdGUgaXQgbmV4dCB0byB0aGUgc291cmNlLgorCisgKiBUaGUgY29kZSB0byBhdm9pZCBtaXN0YWtlbiBhdHRlbXB0IHRvIGFkZCB0aGUgb2JqZWN0IGRpcmVjdG9yeQorICAgaXRzZWxmIGFzIGl0cyBvd24gYWx0ZXJuYXRlIGNvdWxkIHJlYWQgYmV5b25kIGVuZCBvZiBhIHN0cmluZyB3aGlsZQorICAgY29tcGFyaXNvbi4KKworICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCAiYmxvY2stc2hhMSIgZGlkIG5vdCBjb21waWxlIGNvcnJlY3RseQorICAgd2hlbiBjb21waWxlcnMgaW5mZXJyZWQgYWxpZ25tZW50IGd1YXJhbnRlZXMgZnJvbSBvdXIgc291cmNlIHdlCisgICBkaWQgbm90IGludGVuZCB0byBtYWtlLgorCisgKiBXaGVuIHRhbGtpbmcgdG8gYSByZW1vdGUgcnVubmluZyBzc2ggb24gSVB2NiBlbmFibGVkIGhvc3QsIHdob3NlCisgICBhZGRyZXNzIGlzIHNwZWxsZWQgYXMgIltIT1NUXTpQT1JUIiwgd2UgZGlkIG5vdCBwYXJzZSB0aGUgYWRkcmVzcworICAgY29ycmVjdGx5IGFuZCBmYWlsZWQgdG8gY29ubmVjdC4KKworICogZ2l0LWJsYW1lLmVsIChpbiBjb21wYXQvKSBoYXZlIGJlZW4gdXBkYXRlZCB0byB1c2UgRWxpc3AgbW9yZQorICAgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNoZWNrb3V0IDxicmFuY2huYW1lPiIgdG8gY29tZSBiYWNrIGZyb20gYSBkZXRhY2hlZCBIRUFEIHN0YXRlCisgICBpbmNvcnJlY3RseSBjb21wdXRlZCByZWFjaGFiaWxpdHkgb2YgdGhlIGRldGFjaGVkIEhFQUQsIHJlc3VsdGluZworICAgaW4gdW5uZWNlc3Nhcnkgd2FybmluZ3MuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBkaWQgbm90IHN1cHBvcnQgLS10b29sLWhlbHAgb3B0aW9uIHRvIGdpdmUgdGhlIGxpc3QKKyAgIG9mIHN1cHBvcnRlZCBiYWNrZW5kcywgbGlrZSAiZ2l0IGRpZmZ0b29sIiBkb2VzLgorCisgKiAiZ2l0IGdyZXAiIHN0b3BwZWQgc3Bhd25pbmcgYW4gZXh0ZXJuYWwgImdyZXAiIGxvbmcgdGltZSBhZ28sIGJ1dCBhCisgICBkdXBsaWNhdGVkIHRlc3QgdG8gY2hlY2sgaW50ZXJuYWwgYW5kIGV4dGVybmFsICJncmVwIiB3YXMgbGVmdAorICAgYmVoaW5kLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIHR5cG9maXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTdkM2MzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNi50eHQKQEAgLTAsMCArMSw4NCBAQAorR2l0IHYxLjcuMTEuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMS41CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImNpYWJvdCIgc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIGV4dGVuc2l2ZQorICAgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBmb28iIGVycm9yZWQgb3V0IHdpdGggIk5vdCBhIGRpcmVjdG9yeSIgd2hlbiB0aGUgdXNlciBoYWQgYQorICAgbm9uLWRpcmVjdG9yeSBvbiAkUEFUSCwgYW5kIHdvcnNlIHlldCBpdCBtYXNrZWQgYW4gYWxpYXMgImZvbyIgZnJvbQorICAgcnVubmluZy4KKworICogV2hlbiB0aGUgdXNlciBleHBvcnRzIGEgbm9uLWRlZmF1bHQgSUZTIHdpdGhvdXQgSFQsIHNjcmlwdHMgdGhhdAorICAgcmVseSBvbiBiZWluZyBhYmxlIHRvIHBhcnNlICJscy1maWxlcyAtcyB8IHdoaWxlIHJlYWQgYSBiIGMuLi4iCisgICBzdGFydGVkIHRvIGZhaWwuICBQcm90ZWN0IHRoZW0gZnJvbSBzdWNoIGEgbWlzY29uZmlndXJhdGlvbi4KKworICogV2hlbiB0aGUgdXNlciBnaXZlcyBhbiBhcmd1bWVudCB0aGF0IGNhbiBiZSB0YWtlbiBhcyBib3RoIGEKKyAgIHJldmlzaW9uIG5hbWUgYW5kIGEgcGF0aG5hbWUgd2l0aG91dCBkaXNhbWJpZ3VhdGluZyB3aXRoICItLSIsIHdlCisgICB1c2VkIHRvIGdpdmUgYSBoZWxwIG1lc3NhZ2UgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIi4gIFRoZSBtZXNzYWdlCisgICBoYXMgYmVlbiBjbGFyaWZpZWQgdG8gc2hvdyB3aGVyZSB0aGF0ICctLScgZ29lcyBvbiB0aGUgY29tbWFuZAorICAgbGluZS4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXQgaGFkIGEgY29uZnVzaW5nCisgICBleGFtcGxlLgorCisgKiBPbGRlciBwYXJ0cyBvZiB0aGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliZWQgYXMgaWYgaGF2aW5nIGEgcmVndWxhcgorICAgZmlsZSBpbiAuZ2l0L3JlZnMvIGhpZXJhcmNoeSB3ZXJlIHRoZSBvbmx5IHdheSB0byBoYXZlIGJyYW5jaGVzIGFuZAorICAgdGFncywgd2hpY2ggaXMgbm90IHRydWUgZm9yIHF1aXRlIHNvbWUgdGltZS4KKworICogSXQgd2FzIGdlbmVyYWxseSB1bmRlcnN0b29kIHRoYXQgIi0tbG9uZy1vcHRpb24icyB0byBtYW55IG9mIG91cgorICAgc3ViY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIHRoZSB1bmlxdWUgcHJlZml4LCBidXQgaXQgd2FzIG5vdAorICAgZWFzeSB0byBmaW5kIGl0IGRlc2NyaWJlZCBmb3IgbmV3IHJlYWRlcnMgb2YgdGhlIGRvY3VtZW50YXRpb24gc2V0LgorCisgKiBUaGUgIi0tdG9wby1vcmRlciIsICItLWRhdGUtb3JkZXIiIChhbmQgdGhlIGxhY2sgb2YgZWl0aGVyIG1lYW5zCisgICB0aGUgZGVmYXVsdCBvcmRlcikgb3B0aW9ucyB0byAicmV2LWxpc3QiIGFuZCAibG9nIiBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIHdlcmUgcG9vcmx5IGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBjb21taXQgLS1hbWVuZCIgbGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxvZyBtZXNzYWdlIGFuZCB0aGVuCisgICBkaWVkIHdoZW4gdGhlIGh1bWFuLXJlYWRhYmxlIGNvbW1pdHRlciBuYW1lIHdhcyBnaXZlbgorICAgaW5zdWZmaWNpZW50bHkgYnkgZ2V0cHdlbnQoMykuCisKKyAqIFRoZSBleGl0IHN0YXR1cyBjb2RlIGZyb20gImdpdCBjb25maWciIHdhcyB3YXkgb3ZlcnNwZWNpZmllZCB3aGlsZQorICAgYmVpbmcgaW5jb3JyZWN0LiAgVGhlIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gZ2l2ZSB0aGUKKyAgIGRvY3VtZW50ZWQgc3RhdHVzIGZvciBhIGNhc2UgdGhhdCB3YXMgZG9jdW1lbnRlZCwgYW5kIGludHJvZHVjZSBhCisgICBuZXcgY29kZSBmb3IgImFsbCBvdGhlciBlcnJvcnMiLgorCisgKiBUaGUgb3V0cHV0IGZyb20gImdpdCBkaWZmIC1CIiBmb3IgYSBmaWxlIHRoYXQgZW5kcyB3aXRoIGFuCisgICBpbmNvbXBsZXRlIGxpbmUgZGlkIG5vdCBwdXQgIlwgTm8gbmV3bGluZS4uLiIgb24gYSBsaW5lIG9mIGl0cyBvd24uCisKKyAqICJnaXQgZGlmZiIgaGFkIGEgY29uZnVzaW9uIGJldHdlZW4gdGFraW5nIGRhdGEgZnJvbSBhIHBhdGggaW4gdGhlCisgICB3b3JraW5nIHRyZWUgYW5kIHRha2luZyBkYXRhIGZyb20gYW4gb2JqZWN0IHRoYXQgaGFwcGVucyB0byBoYXZlCisgICBuYW1lIDB7NDB9IHJlY29yZGVkIGluIGEgdHJlZS4KKworICogVGhlICItLXJlYmFzZSIgb3B0aW9uIHRvICJnaXQgcHVsbCIgY2FuIGJlIGFiYnJldmlhdGVkIHRvICItciIsCisgICBidXQgd2UgZGlkbid0IGRvY3VtZW50IGl0LgorCisgKiBXaGVuICJnaXQgcHVzaCIgdHJpZ2dlcmVkIHRoZSBhdXRvbWF0aWMgZ2Mgb24gdGhlIHJlY2VpdmluZyBlbmQsIGEKKyAgIG1lc3NhZ2UgZnJvbSAiZ2l0IHBydW5lIiB0aGF0IHNhaWQgaXQgd2FzIHJlbW92aW5nIGNydWZ0IGxlYWtlZCB0bworICAgdGhlIHN0YW5kYXJkIG91dHB1dCwgYnJlYWtpbmcgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wuCisKKyAqIFRoZSByZWZsb2cgZW50cmllcyBsZWZ0IGJ5ICJnaXQgcmViYXNlIiBhbmQgImdpdCByZWJhc2UgLWkiIHdlcmUKKyAgIGluY29uc2lzdGVudCAodGhlIGludGVyYWN0aXZlIG9uZSBnYXZlIGFuIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lKS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IHVucXVvdGUgZW5jb2RlZCB3b3JkcyB0aGF0IGFwcGVhciBvbiB0aGUKKyAgIGhlYWRlciBjb3JyZWN0bHksIGFuZCBsb3N0ICJfIiBmcm9tIHN0cmluZ3MuCisKKyAqICJnaXQgc3Rhc2ggYXBwbHkvcG9wIiBkaWQgbm90IHRyaWdnZXIgInJlcmVyZSIgdXBvbiBjb25mbGljdHMKKyAgIHVubGlrZSBvdGhlciBtZXJneSBvcGVyYXRpb25zLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSA8Y21kPiBwYXRoIiBkaWQgbm90IGVycm9yIG91dCB3aGVuIHRoZSBwYXRoIHRvIHRoZQorICAgc3VibW9kdWxlIHdhcyBtaXNzcGVsdC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIC1mIiBkaWQgbm90IHVwZGF0ZSBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlCisgICB0aGF0IGhhcyBsb2NhbCBjaGFuZ2VzLgorICAgKG1lcmdlIDAxZDQ3MjEgc3ovc3VibW9kdWxlLWZvcmNlLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXR3ZWIiIHdoZW4gdXNlZCB3aXRoIFBBVEhfSU5GTyBmYWlsZWQgdG8gbm90aWNlIGRpcmVjdG9yaWVzIHdpdGgKKyAgIFNQIChhbmQgb3RoZXIgY2hhcmFjdGVycyB0aGF0IG5lZWQgVVJMLXN0eWxlIHF1b3RpbmcpIGluIHRoZW0uCisKKyAqIEZhbGxiYWNrICdnZXRwYXNzJyBpbXBsZW1lbnRhdGlvbiBtYWRlIHVucG9ydGFibGUgdXNlIG9mIHN0ZGlvIEFQSS4KKworICogQSB1dGlsaXR5IHNoZWxsIGZ1bmN0aW9uIHRlc3Rfc2VxIGhhcyBiZWVuIGFkZGVkIGFzIGEgcmVwbGFjZW1lbnQKKyAgIGZvciB0aGUgJ3NlcScgdXRpbGl0eSBmb3VuZCBvbiBzb21lIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0M2EyYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjcudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0dpdCB2MS43LjExLjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBzeW5vcHNpcyBzYWlkICJjaGVja291dCBbLUIgYnJhbmNoXSIgdG8gbWFrZSBpdCBjbGVhciB0aGUKKyAgIGJyYW5jaCBuYW1lIGlzIGEgcGFyYW1ldGVyIHRvIHRoZSBvcHRpb24sIGJ1dCB0aGUgaGVhZGluZyBmb3IgdGhlCisgICBvcHRpb24gZGVzY3JpcHRpb24gd2FzICItQjo6Iiwgbm90ICItQiBicmFuY2g6OiIsIG1ha2luZyB0aGUKKyAgIGRvY3VtZW50YXRpb24gbWlzbGVhZGluZy4KKworICogR2l0IHNoaXBzIHdpdGggYSBmYWxsLWJhY2sgcmVnZXhwIGltcGxlbWVudGF0aW9uIGZvciBwbGF0Zm9ybXMgd2l0aAorICAgYnVnZ3kgcmVnZXhwIGxpYnJhcnksIGJ1dCBpdCB3YXMgZWFzeSBmb3IgcGVvcGxlIHRvIGtlZXAgdXNpbmcgdGhlaXIKKyAgIHBsYXRmb3JtIHJlZ2V4cC4gIEEgbmV3IHRlc3QgaGFzIGJlZW4gYWRkZWQgdG8gY2hlY2sgdGhpcy4KKworICogImdpdCBhcHBseSAtcDAiIGRpZCBub3QgcGFyc2UgcGF0aG5hbWVzIG9uICJkaWZmIC0tZ2l0IiBsaW5lCisgICBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRjaGVzIHRoYXQgaGFkIHBhdGhuYW1lcyBpbiBubyBvdGhlcgorICAgcGxhY2VzIHRvIGJlIG1pc3Rha2VubHkgcmVqZWN0ZWQgKG1vc3Qgbm90YWJseSwgYmluYXJ5IHBhdGNoIHRoYXQKKyAgIGRvZXMgbm90IHJlbmFtZSBub3IgY2hhbmdlIG1vZGUpLiAgVGV4dHVhbCBwYXRjaGVzLCByZW5hbWVzIG9yIG1vZGUKKyAgIGNoYW5nZXMgaGF2ZSBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIHBhdGhuYW1lcyBpbiBkaWZmZXJlbnQgcGxhY2VzCisgICBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcGFyc2VkIHVuYW1iaWd1b3VzbHkgYW5kIGRpZCBub3Qgc3VmZmVyIGZyb20KKyAgIHRoaXMgcHJvYmxlbS4KKworICogQWZ0ZXIgImdpdGsiIHNob3dlZCB0aGUgY29udGVudHMgb2YgYSB0YWcsIG5laXRoZXIgIlJlcmVhZAorICAgcmVmZXJlbmNlcyIgbm9yICJSZWxvYWQiIGRpZCBub3QgdXBkYXRlIHdoYXQgaXMgc2hvd24gYXMgdGhlCisgICBjb250ZW50cyBvZiBpdCwgd2hlbiB0aGUgdXNlciBvdmVyd3JvdGUgdGhlIHRhZyB3aXRoICJnaXQgdGFnIC1mIi4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGRpZCBub3QgY29ycmVjdGx5IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSAtLXNvcnQKKyAgIG9wdGlvbi4KKworICogImdpdCBsb2cgLi4iIGVycm9yZWQgb3V0IHNheWluZyBpdCBpcyBib3RoIHJldiByYW5nZSBhbmQgYSBwYXRoCisgICB3aGVuIHRoZXJlIGlzIG5vIGRpc2FtYmlndWF0aW5nICItLSIgaXMgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgIFVwZGF0ZSB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciB0byBpbnRlcnByZXQgIi4uIiBhcyBhIHBhdGggaW4gc3VjaAorICAgYSBjYXNlLgorCisgKiBQdXNoaW5nIHRvIHNtYXJ0IEhUVFAgc2VydmVyIHdpdGggcmVjZW50IEdpdCBmYWlscyB3aXRob3V0IGhhdmluZworICAgdGhlIHVzZXJuYW1lIGluIHRoZSBVUkwgdG8gZm9yY2UgYXV0aGVudGljYXRpb24sIGlmIHRoZSBzZXJ2ZXIgaXMKKyAgIGNvbmZpZ3VyZWQgdG8gYWxsb3cgR0VUIGFub255bW91c2x5LCB3aGlsZSByZXF1aXJpbmcgYXV0aGVudGljYXRpb24KKyAgIGZvciBQT1NULgorCisgKiAiZ2l0IHNob3cgLS1mb3JtYXQ9JyVjaSciIGRpZCBub3QgZ2l2ZSB0aW1lc3RhbXAgY29ycmVjdGx5IGZvcgorICAgY29tbWl0cyBjcmVhdGVkIHdpdGhvdXQgaHVtYW4gcmVhZGFibGUgbmFtZSBvbiAiY29tbWl0dGVyIiBsaW5lLgorICAgKG1lcmdlIGUyN2RkYjYgamMvbWFpbnQtaWRlbnQtbWlzc2luZy1odW1hbi1uYW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzaG93IC0tcXVpZXQiIG91Z2h0IHRvIGJlIGEgc3lub255bSBmb3IgImdpdCBzaG93IC1zIiwgYnV0CisgICB3YXNuJ3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViOTU0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLnR4dApAQCAtMCwwICsxLDEzOSBAQAorR2l0IHYxLjcuMTEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQSBuZXcgbW9kZSBmb3IgcHVzaCwgInNpbXBsZSIsIHdoaWNoIGlzIGEgY3Jvc3MgYmV0d2VlbiAiY3VycmVudCIKKyAgIGFuZCAidXBzdHJlYW0iLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiAiZ2l0IHB1c2giIHdpdGhvdXQgYW55IHJlZnNwZWMKKyAgIHdpbGwgcHVzaCB0aGUgY3VycmVudCBicmFuY2ggb3V0IHRvIHRoZSBzYW1lIG5hbWUgYXQgdGhlIHJlbW90ZQorICAgcmVwb3NpdG9yeSBvbmx5IHdoZW4gaXQgaXMgc2V0IHRvIHRyYWNrIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZQorICAgbmFtZSBvdmVyIHRoZXJlLiAgVGhlIHBsYW4gaXMgdG8gbWFrZSB0aGlzIG1vZGUgdGhlIG5ldyBkZWZhdWx0CisgICB2YWx1ZSB3aGVuIHB1c2guZGVmYXVsdCBpcyBub3QgY29uZmlndXJlZC4KKworICogQSBjb3VwbGUgb2YgY29tbWFuZHMgbGVhcm5lZCB0aGUgIi0tY29sdW1uIiBvcHRpb24gdG8gcHJvZHVjZQorICAgY29sdW1uYXIgb3V0cHV0LgorCisgKiBBIHRoaXJkLXBhcnR5IHRvb2wgImdpdCBzdWJ0cmVlIiBpcyBkaXN0cmlidXRlZCBpbiBjb250cmliLworCisgKiBBIHJlbW90ZSBoZWxwZXIgdGhhdCBhY3RzIGFzIGEgcHJveHkgYW5kIGNhY2hlcyBzc2wgc2Vzc2lvbiBmb3IgdGhlCisgICBodHRwczovLyB0cmFuc3BvcnQgaXMgYWRkZWQgdG8gdGhlIGNvbnRyaWIvIGFyZWEuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGdpdmVuIHdoZW4gQHt1fSBpcyB1c2VkIGZvciBhIGJyYW5jaCB3aXRob3V0IGl0cworICAgdXBzdHJlYW0gY29uZmlndXJlZCBoYXZlIGJlZW4gY2xhcmlmaWVkLgorCisgKiBFdmVuIHdpdGggdGhlICItcSJ1aWV0IG9wdGlvbiwgImNoZWNrb3V0IiB1c2VkIHRvIHJlcG9ydCBzZXR0aW5nIHVwCisgICB0cmFja2luZy4gIEFsc28gImJyYW5jaCIgbGVhcm5lZCB0aGUgIi1xInVpZXQgb3B0aW9uIHRvIHNxdWVsY2gKKyAgIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4KKworICogWW91ciBidWlsZCBwbGF0Zm9ybSBtYXkgc3VwcG9ydCBoYXJkbGlua3MgYnV0IHlvdSBtYXkgcHJlZmVyIG5vdCB0bworICAgdXNlIHRoZW0sIGUuZy4gd2hlbiBpbnN0YWxsaW5nIHRvIERFU1RESVIgdG8gbWFrZSBhIHRhcmJhbGwgYW5kCisgICB1bnRhcnJpbmcgb24gYSBmaWxlc3lzdGVtIHRoYXQgaGFzIHBvb3Igc3VwcG9ydCBmb3IgaGFyZGxpbmtzLgorICAgVGhlcmUgaXMgYSBNYWtlZmlsZSBvcHRpb24gTk9fSU5TVEFMTF9IQVJETElOS1MgZm9yIHlvdS4KKworICogVGhlIHNtYXJ0LWh0dHAgYmFja2VuZCB1c2VkIHRvIGFsd2F5cyBvdmVycmlkZSBHSVRfQ09NTUlUVEVSXyoKKyAgIHZhcmlhYmxlcyB3aXRoIFJFTU9URV9VU0VSIGFuZCBSRU1PVEVfQUREUiwgYnV0IHRoZXNlIHZhcmlhYmxlcyBhcmUKKyAgIG5vdyBwcmVzZXJ2ZWQgd2hlbiBzZXQuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgdGhlICItLWluY2x1ZGUiIG9wdGlvbiwgd2hpY2ggaXMgYW4gb3Bwb3NpdGUgb2YKKyAgIGV4aXN0aW5nIHRoZSAiLS1leGNsdWRlIiBvcHRpb24uCisKKyAqIFdoZW4gImdpdCBhbSAtMyIgbmVlZHMgdG8gZmFsbCBiYWNrIHRvIGFuIGFwcGxpY2F0aW9uIG9mIHRoZSBwYXRjaAorICAgdG8gYSBzeW50aGVzaXplZCBwcmVpbWFnZSBmb2xsb3dlZCBieSBhIDMtd2F5IG1lcmdlLCB0aGUgcGF0aHMgdGhhdAorICAgbmVlZGVkIHN1Y2ggdHJlYXRtZW50IGFyZSBub3cgcmVwb3J0ZWQgdG8gdGhlIGVuZCB1c2VyLCBzbyB0aGF0IHRoZQorICAgcmVzdWx0IGluIHRoZW0gY2FuIGJlIGV5ZWJhbGxlZCB3aXRoIGV4dHJhIGNhcmUuCisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZGlmZi9sb2cgLS1zdGF0IiB1c2VkIHRvIGFsd2F5cyBhbGxvY2F0ZSA0IGNvbHVtbnMKKyAgIHRvIHNob3cgdGhlIG51bWJlciBvZiBtb2RpZmllZCBsaW5lcywgYnV0IG5vdCBhbnltb3JlLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBsZWFybmVkIHRoZSAiLS1kaXItZGlmZiIgb3B0aW9uIHRvIHNwYXduIGV4dGVybmFsCisgICBkaWZmIHRvb2xzIHRoYXQgY2FuIGNvbXBhcmUgdHdvIGRpcmVjdG9yeSBoaWVyYXJjaGllcyBhdCBhIHRpbWUKKyAgIGFmdGVyIHBvcHVsYXRpbmcgdHdvIHRlbXBvcmFyeSBkaXJlY3RvcmllcywgaW5zdGVhZCBvZiBydW5uaW5nIGFuCisgICBpbnN0YW5jZSBvZiB0aGUgZXh0ZXJuYWwgdG9vbCBvbmNlIHBlciBhIGZpbGUgcGFpci4KKworICogVGhlICJmbXQtbWVyZ2UtbXNnIiBjb21tYW5kIGxlYXJuZWQgdG8gbGlzdCB0aGUgcHJpbWFyeSBjb250cmlidXRvcnMKKyAgIGludm9sdmVkIGluIHRoZSBzaWRlIHRvcGljIHlvdSBhcmUgbWVyZ2luZyBpbiBhIGNvbW1lbnQgaW4gdGhlIG1lcmdlCisgICBjb21taXQgdGVtcGxhdGUuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkga2VlcCBjb21taXRzIHRoYXQgZG8gbm90CisgICBpbnRyb2R1Y2UgYW55IGNoYW5nZSBpbiB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKworICogImdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgbG9vayBpbnRvIHRoZQorICAgaGlzdG9yaWVzIG9mIHN1Ym1vZHVsZXMgYm91bmQgdG8gdGhlIHN1cGVycHJvamVjdCBhbmQgcHVzaCB0aGVtCisgICBvdXQuCisKKyAqIEEgJ3NuYXBzaG90JyByZXF1ZXN0IHRvICJnaXR3ZWIiIGhvbm9ycyBJZi1Nb2RpZmllZC1TaW5jZTogaGVhZGVyLAorICAgYmFzZWQgb24gdGhlIGNvbW1pdCBkYXRlLgorCisgKiAiZ2l0d2ViIiBsZWFybmVkIHRvIGhpZ2hsaWdodCB0aGUgcGF0Y2ggaXQgb3V0cHV0cyBldmVuIG1vcmUuCisKK0ZvcmVpZ24gSW50ZXJmYWNlCisKKyAqICJnaXQgc3ZuIiB1c2VkIHRvIGRpZSB3aXRoIHVud2FudGVkIFNJR1BJUEUgd2hlbiB0YWxraW5nIHdpdGggYW4gSFRUUAorICAgc2VydmVyIHRoYXQgdXNlcyBrZWVwLWFsaXZlLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCB0byB1c2UgcGxhdGZvcm0gc3BlY2lmaWMgYXV0aGVudGljYXRpb24KKyAgIHByb3ZpZGVycywgZS5nLiBnbm9tZS1rZXlyaW5nLCBrd2FsbGV0LCBldGMuCisKKyAqICJnaXQgcDQiIGhhcyBiZWVuIG1vdmVkIG91dCBvZiB0aGUgY29udHJpYi8gYXJlYSBhbmQgaGFzIHNlZW4gbW9yZQorICAgd29yayBvbiBpbXBvcnRpbmcgbGFiZWxzIGFzIHRhZ3MgZnJvbSAoYW5kIGV4cG9ydGluZyB0YWdzIGFzIGxhYmVscworICAgdG8pIHA0LgorCitQZXJmb3JtYW5jZSBhbmQgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24gKHBsZWFzZSByZXBvcnQgcG9zc2libGUgcmVncmVzc2lvbnMpCisKKyAqIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBoYXZlIGJlZW4gY2xlYW5lZCB1cCB0byBtYWtlCisgICBmdXR1cmUgd29yayBvbiBpdCBzaW1wbGVyLgorCisgKiBBbiBleHBlcmltZW50YWwgInZlcnNpb24gNCIgZm9ybWF0IG9mIHRoZSBpbmRleCBmaWxlIGhhcyBiZWVuCisgICBpbnRyb2R1Y2VkIHRvIHJlZHVjZSBvbi1kaXNrIGZvb3RwcmludCBhbmQgSS9PIG92ZXJoZWFkLgorCisgKiAiZ2l0IGFyY2hpdmUiIGxlYXJuZWQgdG8gcHJvZHVjZSBpdHMgb3V0cHV0IHdpdGhvdXQgcmVhZGluZyB0aGUKKyAgIGJsb2Igb2JqZWN0IGl0IHdyaXRlcyBvdXQgaW4gbWVtb3J5IGluIGl0cyBlbnRpcmV0eS4KKworICogImdpdCBpbmRleC1wYWNrIiB0aGF0IHJ1bnMgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nIG9iamVjdHMgdG8KKyAgIGNvbXBsZXRlIHRoZSBwYWNrZmlsZSBvbiB0aGUgcmVjZWl2aW5nIGVuZCBsZWFybmVkIHRvIHVzZSBtdWx0aXBsZQorICAgdGhyZWFkcyB0byBkbyBpdHMgam9iIHdoZW4gYXZhaWxhYmxlLgorCisgKiBUaGUgY29kZSB0byBjb21wdXRlIGhhc2ggdmFsdWVzIGZvciBsaW5lcyB1c2VkIGJ5IHRoZSBpbnRlcm5hbCBkaWZmCisgICBlbmdpbmUgd2FzIG9wdGltaXplZCBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLCB1c2luZyB0aGUgc2FtZQorICAgdHJpY2sgdGhlIGtlcm5lbCBmb2xrcyBjYW1lIHVwIHdpdGguCisKKyAqICJnaXQgYXBwbHkiIGhhZCBzb21lIG1lbW9yeSBsZWFrcyBwbHVnZ2VkLgorCisgKiBTZXR0aW5nIHVwIGEgcmV2aXNpb24gdHJhdmVyc2FsIHdpdGggbWFueSBzdGFydGluZyBwb2ludHMgd2FzCisgICBpbmVmZmljaWVudCBhcyB0aGVzZSB3ZXJlIHBsYWNlZCBpbiBhIGRhdGUtb3JkZXIgcHJpb3JpdHkgcXVldWUKKyAgIG9uZS1ieS1vbmUuICBOb3cgdGhleSBhcmUgY29sbGVjdGVkIGluIHRoZSBxdWV1ZSB1bm9yZGVyZWQgZmlyc3QsCisgICBhbmQgc29ydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBnZXR0aW5nIHVzZWQuCisKKyAqIE1vcmUgbG93ZXItbGV2ZWwgY29tbWFuZHMgbGVhcm5lZCB0byB1c2UgdGhlIHN0cmVhbWluZyBBUEkgdG8gcmVhZAorICAgZnJvbSB0aGUgb2JqZWN0IHN0b3JlIHdpdGhvdXQga2VlcGluZyBldmVyeXRoaW5nIGluIGNvcmUuCisKKyAqIFRoZSB3ZWlnaHRpbmcgcGFyYW1ldGVycyB0byBzdWdnZXN0aW9uIGNvbW1hbmQgbmFtZSB0eXBvIGhhdmUgYmVlbgorICAgdHdlYWtlZCwgc28gdGhhdCAiZ2l0IHRhZ3MiIHdpbGwgc3VnZ2VzdCAidGFnPyIgYW5kIG5vdCAic3RhZ2U/Ii4KKworICogQmVjYXVzZSAic2giIG9uIHRoZSB1c2VyJ3MgUEFUSCBtYXkgYmUgdXR0ZXJseSBicm9rZW4gb24gc29tZQorICAgc3lzdGVtcywgcnVuLWNvbW1hbmQgQVBJIG5vdyB1c2VzIFNIRUxMX1BBVEgsIG5vdCAvYmluL3NoLCB3aGVuCisgICBzcGF3bmluZyBhbiBleHRlcm5hbCBjb21tYW5kIChub3QgYXBwbGljYWJsZSB0byBXaW5kb3dzIHBvcnQpLgorCisgKiBUaGUgQVBJIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcmVmcy8gaGllcmFyY2h5IGhhcyBiZWVuIHR3ZWFrZWQgdG8KKyAgIGFsbG93IHdhbGtpbmcgb25seSBhIHN1YnNldCBvZiBpdCBtb3JlIGVmZmljaWVudGx5LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuMTAgaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBpbml0IiB1c2VkIHRvIHJlcG9ydCAicmVnaXN0ZXJlZCBmb3IgcGF0aCAuLi4iCisgICBldmVuIGZvciBzdWJtb2R1bGVzIHRoYXQgd2VyZSByZWdpc3RlcmVkIGVhcmxpZXIuCisgICAoY2hlcnJ5LXBpY2sgYzFjMjU5ZSBqbC9zdWJtb2R1bGUtcmVwb3J0LW5ldy1wYXRoLW9uY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IiB1c2VkIHRvIGZ1bGx5IGNvdW50IGEgYmluYXJ5IGZpbGUgd2l0aCBtb2RpZmllZAorICAgZXhlY3V0aW9uIGJpdHMgd2hvc2UgY29udGVudHMgaXMgdW5tb2RpZmllZCwgd2hpY2ggd2FzIG5vdCBxdWl0ZQorICAgcmlnaHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjA0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4xLnR4dApAQCAtMCwwICsxLDEzNCBAQAorR2l0IDEuNy4xMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSAtcDAiIGRpZCBub3QgcGFyc2UgcGF0aG5hbWVzIG9uICJkaWZmIC0tZ2l0IiBsaW5lCisgICBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRjaGVzIHRoYXQgaGFkIHBhdGhuYW1lcyBpbiBubyBvdGhlcgorICAgcGxhY2VzIHRvIGJlIG1pc3Rha2VubHkgcmVqZWN0ZWQgKG1vc3Qgbm90YWJseSwgYmluYXJ5IHBhdGNoIHRoYXQKKyAgIGRvZXMgbm90IHJlbmFtZSBub3IgY2hhbmdlIG1vZGUpLiAgVGV4dHVhbCBwYXRjaGVzLCByZW5hbWVzIG9yIG1vZGUKKyAgIGNoYW5nZXMgaGF2ZSBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIHBhdGhuYW1lcyBpbiBkaWZmZXJlbnQgcGxhY2VzCisgICBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcGFyc2VkIHVuYW1iaWd1b3VzbHkgYW5kIGRpZCBub3Qgc3VmZmVyIGZyb20KKyAgIHRoaXMgcHJvYmxlbS4KKworICogImdpdCBjaGVycnktcGljayBBIEMgQiIgdXNlZCB0byByZXBsYXkgY2hhbmdlcyBpbiBBIGFuZCB0aGVuIEIgYW5kCisgICB0aGVuIEMgaWYgdGhlc2UgdGhyZWUgY29tbWl0cyBoYWQgY29tbWl0dGVyIHRpbWVzdGFtcHMgaW4gdGhhdAorICAgb3JkZXIsIHdoaWNoIGlzIG5vdCB3aGF0IHRoZSB1c2VyIHdobyBzYWlkICJBIEMgQiIgbmF0dXJhbGx5CisgICBleHBlY3RzLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHRoZW4KKyAgIGRpZWQgd2hlbiB0aGUgaHVtYW4tcmVhZGFibGUgY29tbWl0dGVyIG5hbWUgd2FzIGdpdmVuCisgICBpbnN1ZmZpY2llbnRseSBieSBnZXRwd2VudCgzKS4KKworICogU29tZSBjYXBhYmlsaXRpZXMgd2VyZSBhc2tlZCBieSBmZXRjaC1wYWNrIGV2ZW4gd2hlbiB1cGxvYWQtcGFjaworICAgZGlkIG5vdCBhZHZlcnRpc2UgdGhhdCB0aGV5IGFyZSBhdmFpbGFibGUuICBmZXRjaC1wYWNrIGhhcyBiZWVuCisgICBmaXhlZCBub3QgdG8gZG8gc28uCisKKyAqICJnaXQgZGlmZiIgaGFkIGEgY29uZnVzaW9uIGJldHdlZW4gdGFraW5nIGRhdGEgZnJvbSBhIHBhdGggaW4gdGhlCisgICB3b3JraW5nIHRyZWUgYW5kIHRha2luZyBkYXRhIGZyb20gYW4gb2JqZWN0IHRoYXQgaGFwcGVucyB0byBoYXZlCisgICBuYW1lIDB7NDB9IHJlY29yZGVkIGluIGEgdHJlZS4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGRpZCBub3QgY29ycmVjdGx5IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSAtLXNvcnQKKyAgIG9wdGlvbi4KKworICogImdpdCBsb2cgLi4iIGVycm9yZWQgb3V0IHNheWluZyBpdCBpcyBib3RoIHJldiByYW5nZSBhbmQgYSBwYXRoCisgICB3aGVuIHRoZXJlIGlzIG5vIGRpc2FtYmlndWF0aW5nICItLSIgaXMgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgIFVwZGF0ZSB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciB0byBpbnRlcnByZXQgIi4uIiBhcyBhIHBhdGggaW4gc3VjaAorICAgYSBjYXNlLgorCisgKiBUaGUgIi0tdG9wby1vcmRlciIsICItLWRhdGUtb3JkZXIiIChhbmQgdGhlIGxhY2sgb2YgZWl0aGVyIG1lYW5zCisgICB0aGUgZGVmYXVsdCBvcmRlcikgb3B0aW9ucyB0byAicmV2LWxpc3QiIGFuZCAibG9nIiBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIHdlcmUgcG9vcmx5IGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBwcnVuZSIgd2l0aG91dCAiLXYiIHVzZWQgdG8gd2FybiBhYm91dCBsZWZ0b3ZlciB0ZW1wb3JhcnkKKyAgIGZpbGVzICh3aGljaCBpcyBhbiBpbmRpY2F0aW9uIG9mIGFuIGVhcmxpZXIgYWJvcnRlZCBvcGVyYXRpb24pLgorCisgKiBQdXNoaW5nIHRvIHNtYXJ0IEhUVFAgc2VydmVyIHdpdGggcmVjZW50IEdpdCBmYWlscyB3aXRob3V0IGhhdmluZworICAgdGhlIHVzZXJuYW1lIGluIHRoZSBVUkwgdG8gZm9yY2UgYXV0aGVudGljYXRpb24sIGlmIHRoZSBzZXJ2ZXIgaXMKKyAgIGNvbmZpZ3VyZWQgdG8gYWxsb3cgR0VUIGFub255bW91c2x5LCB3aGlsZSByZXF1aXJpbmcgYXV0aGVudGljYXRpb24KKyAgIGZvciBQT1NULgorCisgKiBUaGUgcmVmbG9nIGVudHJpZXMgbGVmdCBieSAiZ2l0IHJlYmFzZSIgYW5kICJnaXQgcmViYXNlIC1pIiB3ZXJlCisgICBpbmNvbnNpc3RlbnQgKHRoZSBpbnRlcmFjdGl2ZSBvbmUgZ2F2ZSBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSkuCisKKyAqIFdoZW4gImdpdCBwdXNoIiB0cmlnZ2VyZWQgdGhlIGF1dG9tYXRpYyBnYyBvbiB0aGUgcmVjZWl2aW5nIGVuZCwgYQorICAgbWVzc2FnZSBmcm9tICJnaXQgcHJ1bmUiIHRoYXQgc2FpZCBpdCB3YXMgcmVtb3ZpbmcgY3J1ZnQgbGVha2VkIHRvCisgICB0aGUgc3RhbmRhcmQgb3V0cHV0LCBicmVha2luZyB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbC4KKworICogImdpdCBzaG93IC0tcXVpZXQiIG91Z2h0IHRvIGJlIGEgc3lub255bSBmb3IgImdpdCBzaG93IC1zIiwgYnV0CisgICB3YXNuJ3QuCisKKyAqICJnaXQgc2hvdyAtLWZvcm1hdD0nJWNpJyIgZGlkIG5vdCBnaXZlIHRpbWVzdGFtcCBjb3JyZWN0bHkgZm9yCisgICBjb21taXRzIGNyZWF0ZWQgd2l0aG91dCBodW1hbiByZWFkYWJsZSBuYW1lIG9uICJjb21taXR0ZXIiIGxpbmUuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCB1bnF1b3RlIGVuY29kZWQgd29yZHMgdGhhdCBhcHBlYXIgb24gdGhlCisgICBoZWFkZXIgY29ycmVjdGx5LCBhbmQgbG9zdCAiXyIgZnJvbSBzdHJpbmdzLgorCisgKiBUaGUgaW50ZXJhY3RpdmUgcHJvbXB0ICJnaXQgc2VuZC1lbWFpbCIgZ2l2ZXMgd2FzIGVycm9yIHByb25lLiBJdAorICAgYXNrZWQgIldoYXQgZS1tYWlsIGFkZHJlc3MgZG8geW91IHdhbnQgdG8gdXNlPyIgd2l0aCB0aGUgYWRkcmVzcyBpdAorICAgZ3Vlc3NlZCAoY29ycmVjdGx5KSB0aGUgdXNlciB3b3VsZCB3YW50IHRvIHVzZSBpbiBpdHMgcHJvbXB0LAorICAgdGVtcHRpbmcgdGhlIHVzZXIgdG8gc2F5ICJ5Ii4gQnV0IHRoZSByZXNwb25zZSB3YXMgdGFrZW4gYXMgIk5vLAorICAgcGxlYXNlIHVzZSAneScgYXMgdGhlIGUtbWFpbCBhZGRyZXNzIGluc3RlYWQiLCB3aGljaCBpcyBtb3N0CisgICBjZXJ0YWlubHkgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQuCisKKyAqICJnaXR3ZWIiIHdoZW4gdXNlZCB3aXRoIFBBVEhfSU5GTyBmYWlsZWQgdG8gbm90aWNlIGRpcmVjdG9yaWVzIHdpdGgKKyAgIFNQIChhbmQgb3RoZXIgY2hhcmFjdGVycyB0aGF0IG5lZWQgVVJMLXN0eWxlIHF1b3RpbmcpIGluIHRoZW0uCisKKyAqIFdoZW4gdGhlIHVzZXIgZ2l2ZXMgYW4gYXJndW1lbnQgdGhhdCBjYW4gYmUgdGFrZW4gYXMgYm90aCBhCisgICByZXZpc2lvbiBuYW1lIGFuZCBhIHBhdGhuYW1lIHdpdGhvdXQgZGlzYW1iaWd1YXRpbmcgd2l0aCAiLS0iLCB3ZQorICAgdXNlZCB0byBnaXZlIGEgaGVscCBtZXNzYWdlICJVc2UgJy0tJyB0byBzZXBhcmF0ZSIuICBUaGUgbWVzc2FnZQorICAgaGFzIGJlZW4gY2xhcmlmaWVkIHRvIHNob3cgd2hlcmUgdGhhdCAnLS0nIGdvZXMgb24gdGhlIGNvbW1hbmQKKyAgIGxpbmUuCisKKyAqIFdoZW4gdGhlIHVzZXIgZXhwb3J0cyBhIG5vbi1kZWZhdWx0IElGUyB3aXRob3V0IEhULCBzY3JpcHRzIHRoYXQKKyAgIHJlbHkgb24gYmVpbmcgYWJsZSB0byBwYXJzZSAibHMtZmlsZXMgLXMgfCB3aGlsZSByZWFkIGEgYiBjLi4uIgorICAgc3RhcnRlZCB0byBmYWlsLiAgUHJvdGVjdCB0aGVtIGZyb20gc3VjaCBhIG1pc2NvbmZpZ3VyYXRpb24uCisKKyAqIFRoZSBhdHRyaWJ1dGUgc3lzdGVtIG1heSBiZSBhc2tlZCBmb3IgYSBwYXRoIHRoYXQgaXRzZWxmIG9yIGl0cworICAgbGVhZGluZyBkaXJlY3RvcmllcyBubyBsb25nZXIgZXhpc3RzIGluIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBpdCBpcworICAgZmluZSBpZiB3ZSBjYW5ub3Qgb3BlbiAuZ2l0YXR0cmlidXRlIGZpbGUgaW4gc3VjaCBhIGNhc2UuICBGYWlsdXJlCisgICB0byBvcGVuIHBlci1kaXJlY3RvcnkgLmdpdGF0dHJpYnV0ZXMgd2l0aCBlcnJvciBzdGF0dXMgb3RoZXIgdGhhbgorICAgRU5PRU5UIGFuZCBFTk9URElSIHNob3VsZCBiZSBkaWFnbm9zZWQsIGJ1dCBpdCB3YXNuJ3QuCisKKyAqIEFmdGVyICJnaXRrIiBzaG93ZWQgdGhlIGNvbnRlbnRzIG9mIGEgdGFnLCBuZWl0aGVyICJSZXJlYWQKKyAgIHJlZmVyZW5jZXMiIG5vciAiUmVsb2FkIiBkaWQgbm90IHVwZGF0ZSB3aGF0IGlzIHNob3duIGFzIHRoZQorICAgY29udGVudHMgb2YgaXQsIHdoZW4gdGhlIHVzZXIgb3Zlcndyb3RlIHRoZSB0YWcgd2l0aCAiZ2l0IHRhZyAtZiIuCisKKyAqICJjaWFib3QiIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBleHRlbnNpdmUKKyAgIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQtanVtcCIgc2NyaXB0IChpbiBjb250cmliLykgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbgorICAgZGlmZi5ub3ByZWZpeCBvciBkaWZmLm1uZW1vbmljcHJlZml4IGlzIGluIGVmZmVjdC4KKworICogT2xkZXIgcGFydHMgb2YgdGhlIGRvY3VtZW50YXRpb24gZGVzY3JpYmVkIGFzIGlmIGhhdmluZyBhIHJlZ3VsYXIKKyAgIGZpbGUgaW4gLmdpdC9yZWZzLyBoaWVyYXJjaHkgd2VyZSB0aGUgb25seSB3YXkgdG8gaGF2ZSBicmFuY2hlcyBhbmQKKyAgIHRhZ3MsIHdoaWNoIGlzIG5vdCB0cnVlIGZvciBxdWl0ZSBzb21lIHRpbWUuCisKKyAqIEEgdXRpbGl0eSBzaGVsbCBmdW5jdGlvbiB0ZXN0X3NlcSBoYXMgYmVlbiBhZGRlZCBhcyBhIHJlcGxhY2VtZW50CisgICBmb3IgdGhlICdzZXEnIHV0aWxpdHkgZm91bmQgb24gc29tZSBwbGF0Zm9ybXMuCisKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlciB0byBsZWFybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZQorICAgZGVzY3JpcHRvcnMgd2UgY2FuIG9wZW4gYXJvdW5kIHN5c2NvbmYoX1NDX09QRU5fTUFYKSBhbmQKKyAgIGdldHJsaW1pdChSTElNSVRfTk9fRklMRSkgaGFzIGJlZW4gaW50cm9kdWNlZCBmb3IgcG9ydGFiaWxpdHkuCisKKyAqIFdlIHVzZWQgY3VybF9lYXN5X3N0cmVycm9yKCkgd2l0aG91dCBjaGVja2luZyB2ZXJzaW9uIG9mIGNVUkwsCisgICBicmVha2luZyB0aGUgYnVpbGQgZm9yIHZlcnNpb25zIGJlZm9yZSBjdXJsIDcuMTIuMC4KKworICogQ29kZSB0byB3b3JrIGFyb3VuZCBNYWNPUyBYIFVURi04IGdvdGNoYSBoYXMgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBGYWxsYmFjayAnZ2V0cGFzcycgaW1wbGVtZW50YXRpb24gbWFkZSB1bnBvcnRhYmxlIHVzZSBvZiBzdGRpbyBBUEkuCisKKyAqIFRoZSAiLS1yZWJhc2UiIG9wdGlvbiB0byAiZ2l0IHB1bGwiIGNhbiBiZSBhYmJyZXZpYXRlZCB0byAiLXIiLAorICAgYnV0IHdlIGRpZG4ndCBkb2N1bWVudCBpdC4KKworICogSXQgd2FzIGdlbmVyYWxseSB1bmRlcnN0b29kIHRoYXQgIi0tbG9uZy1vcHRpb24icyB0byBtYW55IG9mIG91cgorICAgc3ViY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIHRoZSB1bmlxdWUgcHJlZml4LCBidXQgaXQgd2FzIG5vdAorICAgZWFzeSB0byBmaW5kIGl0IGRlc2NyaWJlZCBmb3IgbmV3IHJlYWRlcnMgb2YgdGhlIGRvY3VtZW50YXRpb24gc2V0LgorCisgKiBUaGUgc3lub3BzaXMgc2FpZCAiY2hlY2tvdXQgWy1CIGJyYW5jaF0iIHRvIG1ha2UgaXQgY2xlYXIgdGhlCisgICBicmFuY2ggbmFtZSBpcyBhIHBhcmFtZXRlciB0byB0aGUgb3B0aW9uLCBidXQgdGhlIGhlYWRpbmcgZm9yIHRoZQorICAgb3B0aW9uIGRlc2NyaXB0aW9uIHdhcyAiLUI6OiIsIG5vdCAiLUIgYnJhbmNoOjoiLCBtYWtpbmcgdGhlCisgICBkb2N1bWVudGF0aW9uIG1pc2xlYWRpbmcuCisKK0Fsc28gY29udGFpbnMgbnVtZXJvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI1NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMi50eHQKQEAgLTAsMCArMSw0MCBAQAorR2l0IDEuNy4xMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdoZW4gImdpdCBhbSIgaXMgZmVkIGFuIGlucHV0IHRoYXQgaGFzIG11bHRpcGxlICJDb250ZW50LXR5cGU6IC4uLiIKKyAgIGhlYWRlciwgaXQgZGlkIG5vdCBncm9rIGNoYXJzZXQ9IGF0dHJpYnV0ZSBjb3JyZWN0bHkuCisKKyAqIEV2ZW4gZHVyaW5nIGEgY29uZmxpY3RlZCBtZXJnZSwgImdpdCBibGFtZSAkcGF0aCIgYWx3YXlzIG1lYW50IHRvCisgICBibGFtZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIHRoZSAid29ya2luZyB0cmVlIiB2ZXJzaW9uOyBtYWtlIGl0CisgICBtb3JlIHVzZWZ1bCBieSBzaG93aW5nIGNsZWFubHkgbWVyZ2VkIHBhcnRzIGFzIGNvbWluZyBmcm9tIHRoZSBvdGhlcgorICAgYnJhbmNoIHRoYXQgaXMgYmVpbmcgbWVyZ2VkLgorCisgKiAiZ2l0IGJsYW1lIE1BS0VGSUxFIiBydW4gaW4gYSBoaXN0b3J5IHRoYXQgaGFzICJNYWtlZmlsZSIgYnV0IG5vdAorICAgIk1BS0VGSUxFIiBzaG91bGQgc2F5ICJObyBzdWNoIGZpbGUgTUFLRUZJTEUgaW4gSEVBRCIsIGJ1dCBnb3QKKyAgIGNvbmZ1c2VkIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGFuZCBmYWlsZWQgdG8gZG8gc28uCisKKyAqICJnaXQgZmV0Y2ggLS1hbGwiLCB3aGVuIHBhc3NlZCAiLS1uby10YWdzIiwgZGlkIG5vdCBob25vciB0aGUKKyAgICItLW5vLXRhZ3MiIG9wdGlvbiB3aGlsZSBmZXRjaGluZyBmcm9tIGluZGl2aWR1YWwgcmVtb3RlcyAodGhlIHNhbWUKKyAgIGlzc3VlIGV4aXN0ZWQgd2l0aCAiLS10YWdzIiwgYnV0IGNvbWJpbmF0aW9uICItLWFsbCAtLXRhZ3MiIG1ha2VzCisgICBtdWNoIGxlc3Mgc2Vuc2UgdGhhbiAiLS1hbGwgLS1uby10YWdzIikuCisKKyAqICJnaXQgbG9nL2RpZmYvZm9ybWF0LXBhdGNoIC0tc3RhdCIgc2hvd2VkIHRoZSAiTiBsaW5lKHMpIGFkZGVkIgorICAgY29tbWVudCBpbiB1c2VyJ3MgbG9jYWxlIGFuZCBjYXVzZWQgY2FyZWxlc3Mgc3VibWl0dGVycyB0byBzZW5kCisgICBwYXRjaGVzIHdpdGggc3VjaCBhIGxpbmUgaW4gdGhlbSB0byBwcm9qZWN0cyB3aG9zZSBwcm9qZWN0IGxhbmd1YWdlCisgICBpcyBub3QgdGhlaXIgbGFuZ3VhZ2UsIG1pbGRseSBpcnJpdGF0aW5nIG90aGVycy4gTG9jYWxpemF0aW9uIHRvCisgICB0aGUgbGluZSBoYXMgYmVlbiBkaXNhYmxlZCBmb3Igbm93LgorCisgKiAiZ2l0IGxvZyAtLWFsbC1tYXRjaCAtLWdyZXA9QSAtLWdyZXA9QiIgb3VnaHQgdG8gc2hvdyBjb21taXRzIHRoYXQKKyAgIG1lbnRpb24gYm90aCBBIGFuZCBCLCBidXQgd2hlbiB0aGVzZSB0aHJlZSBvcHRpb25zIGFyZSB1c2VkIHdpdGgKKyAgIC0tYXV0aG9yIG9yIC0tY29tbWl0dGVyLCBpdCBzaG93ZWQgY29tbWl0cyB0aGF0IG1lbnRpb24gZWl0aGVyIEEgb3IKKyAgIEIgKG9yIGJvdGgpIGluc3RlYWQuCisKKyAqIFRoZSBzdWJjb21tYW5kIHRvIHJlbW92ZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHJlbW90ZSBpbiAiZ2l0IHJlbW90ZSIKKyAgIHdhcyBuYW1lZCAicm0iIGV2ZW4gdGhvdWdoIGFsbCBvdGhlciBzdWJjb21tYW5kcyB3ZXJlIHNwZWxsZWQgb3V0LgorICAgSW50cm9kdWNlICJnaXQgcmVtb3RlIHJlbW92ZSIgdG8gcmVtb3ZlIGNvbmZ1c2lvbiwgYW5kIGtlZXAgInJtIiBhcworICAgYSBiYWNrd2FyZCBjb21wYXRpYmxlIHN5bm9ueW0uCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4MjI5NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCAxLjcuMTIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEyLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFtIiBtaXNoYW5kbGVkIGEgcGF0Y2ggYXR0YWNoZWQgYXMgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisgICAoZS5nLiBub3QgdGV4dC8qKTsgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyAoZS5nLiBiYXNlNjQpIHdhcyBub3QKKyAgIGhvbm9yZWQgY29ycmVjdGx5LgorCisgKiBJdCB3YXMgdW5jbGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgImdpdCBibGFtZSIgdGhhdCBpdCBpcworICAgdW5uZWNlc3NhcnkgZm9yIHVzZXJzIHRvIHVzZSB0aGUgIi0tZm9sbG93IiBvcHRpb24uCisKKyAqIEEgcmVwb3NpdG9yeSBjcmVhdGVkIHdpdGggImdpdCBjbG9uZSAtLXNpbmdsZSIgaGFkIGl0cyBmZXRjaAorICAgcmVmc3BlY3Mgc2V0IHVwIGp1c3QgbGlrZSBhIGNsb25lIHdpdGhvdXQgIi0tc2luZ2xlIiwgbGVhZGluZyB0aGUKKyAgIHN1YnNlcXVlbnQgImdpdCBmZXRjaCIgdG8gc2x1cnAgYWxsIHRoZSBvdGhlciBicmFuY2hlcywgZGVmZWF0aW5nCisgICB0aGUgd2hvbGUgcG9pbnQgb2Ygc3BlY2lmeWluZyAib25seSB0aGlzIGJyYW5jaCIuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBoYWQgYW4gb2xkIHdvcmthcm91bmQgZm9yIGFuIHVubGlrZWx5IHNlcnZlcgorICAgbWlzY29uZmlndXJhdGlvbjsgaXQgdHVybnMgb3V0IHRoYXQgdGhpcyBodXJ0cyBkZWJ1Z2dhYmlsaXR5IG9mIHRoZQorICAgY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLCBhbmQgaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBhZHZlcnRpc2VkIHRoYXQgaXQgc3VwcG9ydHMgImRlZmxhdGUiLCB3aGljaAorICAgaXMgbXVjaCBsZXNzIGNvbW1vbiwgYW5kIGRpZCBub3QgYWR2ZXJ0aXNlIHRoZSBtb3JlIGNvbW1vbiAiZ3ppcCIgb24KKyAgIGl0cyBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyLgorCisgKiAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSBjb3VudGVycGFydCB0byAiZ2l0IHB1c2giKSBkaWQgbm90IGdpdmUKKyAgIHByb2dyZXNzIG91dHB1dCB3aGlsZSBwcm9jZXNzaW5nIG9iamVjdHMgaXQgcmVjZWl2ZWQgdG8gdGhlIHVzZXIKKyAgIHdoZW4gcnVuIG92ZXIgdGhlIHNtYXJ0LWh0dHAgcHJvdG9jb2wuCisKKyAqICJnaXQgc3RhdHVzIiBob25vcmVkIHRoZSBpZ25vcmU9ZGlydHkgc2V0dGluZ3MgaW4gLmdpdG1vZHVsZXMgYnV0CisgICAiZ2l0IGNvbW1pdCIgZGlkbid0LgorCitBbHNvIGNvbnRhaW5zIGEgaGFuZGZ1bCBvZiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZGEzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi40LnR4dApAQCAtMCwwICsxLDIzIEBACitHaXQgMS43LjEyLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBmZXRjaCIgb3ZlciB0aGUgZHVtYi1odHRwIHJldmlzaW9uIHdhbGtlciBjb3VsZCBzZWdmYXVsdCB3aGVuCisgICBjdXJsJ3MgbXVsdGkgaW50ZXJmYWNlIHdhcyB1c2VkLgorCisgKiBJdCB3YXMgcG9zc2libGUgdG8gZ2l2ZSBzcGVjaWZpYyBwYXRocyBmb3IgImFzY2lpZG9jIiBhbmQgb3RoZXIKKyAgIHRvb2xzIGluIHRoZSBkb2N1bWVudGF0aW9uIHRvb2xjaGFpbiwgYnV0IG5vdCBmb3IgInhtbHRvIi4KKworICogImdpdHdlYiIgZGlkIG5vdCBnaXZlIHRoZSBjb3JyZWN0IGNvbW1pdHRlciB0aW1lem9uZSBpbiBpdHMgZmVlZAorICAgb3V0cHV0IGR1ZSB0byBhIHR5cG8uCisKKyAqIFRoZSAiLVhvdXJzIiAoYW5kIHNpbWlsYXJseSAtWHRoZWlycykgYmFja2VuZCBvcHRpb24gdG8gImdpdAorICAgbWVyZ2UgLXMgcmVjdXJzaXZlIiB3YXMgaWdub3JlZCBmb3IgYmluYXJ5IGZpbGVzLiAgTm93IGl0IGlzCisgICBob25vcmVkLgorCisgKiBUaGUgImJpbmFyeSIgc3ludGhldGljIGF0dHJpYnV0ZSBtYWRlICJkaWZmIiB0byB0cmVhdCB0aGUgcGF0aCBhcworICAgYmluYXJ5LCBidXQgbm90ICJtZXJnZSIuCisKK0Fsc28gY29udGFpbnMgbWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwZDhjNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLnR4dApAQCAtMCwwICsxLDEzNiBAQAorR2l0IHYxLjcuMTIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogR2l0IGNhbiBiZSB0b2xkIHRvIG5vcm1hbGl6ZSBwYXRobmFtZXMgaXQgcmVhZCBmcm9tIHJlYWRkaXIoMykgYW5kCisgICBhbGwgYXJndW1lbnRzIGl0IGdvdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaW50byBwcmVjb21wb3NlZCBVVEYtOAorICAgKGFzc3VtaW5nIHRoYXQgdGhleSBjb21lIGFzIGRlY29tcG9zZWQgVVRGLTgpLCBpbiBvcmRlciB0byB3b3JrCisgICBhcm91bmQgaXNzdWVzIG9uIE1hYyBPUy4KKworICAgSSB0aGluayB0aGVyZSBzdGlsbCBhcmUgb3RoZXIgcGxhY2VzIHRoYXQgbmVlZCBjb252ZXJzaW9uCisgICAoZS5nLiBwYXRocyB0aGF0IGFyZSByZWFkIGZyb20gc3RkaW4gZm9yIHNvbWUgY29tbWFuZHMpLCBidXQgdGhpcworICAgc2hvdWxkIGJlIGEgZ29vZCBmaXJzdCBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCisKKyAqIFBlci11c2VyICRIT01FLy5naXRjb25maWcgZmlsZSBjYW4gb3B0aW9uYWxseSBiZSBzdG9yZWQgaW4KKyAgICRIT01FLy5jb25maWcvZ2l0L2NvbmZpZyBpbnN0ZWFkLCB3aGljaCBpcyBpbiBsaW5lIHdpdGggWERHLgorCisgKiBUaGUgdmFsdWUgb2YgY29yZS5hdHRyaWJ1dGVzZmlsZSBhbmQgY29yZS5leGNsdWRlc2ZpbGUgZGVmYXVsdCB0bworICAgJEhPTUUvLmNvbmZpZy9naXQvYXR0cmlidXRlcyBhbmQgJEhPTUUvLmNvbmZpZy9naXQvaWdub3JlIHJlc3BlY3RpdmVseQorICAgd2hlbiB0aGVzZSBmaWxlcyBleGlzdC4KKworICogTG9naWMgdG8gZGlzYW1iaWd1YXRlIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lcyBoYXZlIGJlZW4gdGF1Z2h0IHRvCisgICB0YWtlIGFkdmFudGFnZSBvZiBvYmplY3QgdHlwZXMgdGhhdCBhcmUgZXhwZWN0ZWQgaW4gdGhlIGNvbnRleHQsCisgICBlLmcuIFhYWFhYWCBpbiB0aGUgImdpdCBkZXNjcmliZSIgb3V0cHV0IHYxLjIuMy1nWFhYWFhYIG11c3QgYmUgYQorICAgY29tbWl0IG9iamVjdCwgbm90IGEgYmxvYiBub3IgYSB0cmVlLiAgVGhpcyB3aWxsIGhlbHAgdXMgcHJvbG9uZworICAgdGhlIGxpZmV0aW1lIG9mIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lcy4KKworICogImdpdCBhcHBseSIgbGVhcm5lZCB0byB3aWdnbGUgdGhlIGJhc2UgdmVyc2lvbiBhbmQgcGVyZm9ybSB0aHJlZS13YXkKKyAgIG1lcmdlIHdoZW4gYSBwYXRjaCBkb2VzIG5vdCBleGFjdGx5IGFwcGx5IHRvIHRoZSB2ZXJzaW9uIHlvdSBoYXZlLgorCisgKiBTY3JpcHRlZCBQb3JjZWxhaW4gd3JpdGVycyBub3cgaGF2ZSBhY2Nlc3MgdG8gdGhlIGNyZWRlbnRpYWwgQVBJIHZpYQorICAgdGhlICJnaXQgY3JlZGVudGlhbCIgcGx1bWJpbmcgY29tbWFuZC4KKworICogImdpdCBoZWxwIiB1c2VkIHRvIGFsd2F5cyBkZWZhdWx0IHRvICJtYW4iIGZvcm1hdCBldmVuIG9uIHBsYXRmb3JtcworICAgd2hlcmUgIm1hbiIgdmlld2VyIGlzIG5vdCB3aWRlbHkgYXZhaWxhYmxlLgorCisgKiAiZ2l0IGNsb25lIC0tbG9jYWwgJHBhdGgiIHN0YXJ0ZWQgaXRzIGxpZmUgYXMgYW4gZXhwZXJpbWVudCB0bworICAgb3B0aW9uYWxseSB1c2UgbGluay9jb3B5IHdoZW4gY2xvbmluZyBhIHJlcG9zaXRvcnkgb24gdGhlIGRpc2ssIGJ1dAorICAgd2UgZGlkbid0IGRlcHJlY2F0ZSBpdCBhZnRlciB3ZSBtYWRlIHRoZSBvcHRpb24gYSBuby1vcCB0byBhbHdheXMKKyAgIHVzZSB0aGUgb3B0aW1pemF0aW9uLiAgVGhlIGNvbW1hbmQgbGVhcm5lZCAiLS1uby1sb2NhbCIgb3B0aW9uIHRvCisgICB0dXJuIHRoaXMgb2ZmLCBhcyBhIG1vcmUgZXhwbGljaXQgYWx0ZXJuYXRpdmUgb3ZlciB1c2Ugb2YgZmlsZTovLworICAgVVJMLgorCisgKiAiZ2l0IGZldGNoIiBhbmQgZnJpZW5kcyB1c2VkIHRvIHNheSAicmVtb3RlIHNpZGUgaHVuZyB1cAorICAgdW5leHBlY3RlZGx5IiB3aGVuIHRoZXkgZmFpbGVkIHRvIGdldCByZXNwb25zZSB0aGV5IGV4cGVjdCBmcm9tIHRoZQorICAgb3RoZXIgc2lkZSwgYnV0IG9uZSBjb21tb24gcmVhc29uIHdoeSB0aGV5IGRvbid0IGdldCBleHBlY3RlZAorICAgcmVzcG9uc2UgaXMgdGhhdCB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgZG9lcyBub3QgZXhpc3Qgb3IgY2Fubm90IGJlCisgICByZWFkLiBUaGUgZXJyb3IgbWVzc2FnZSBpbiB0aGlzIGNhc2Ugd2FzIHVwZGF0ZWQgdG8gZ2l2ZSBiZXR0ZXIKKyAgIGhpbnRzIHRvIHRoZSB1c2VyLgorCisgKiAiZ2l0IGhlbHAgLXcgJGNtZCIgY2FuIHNob3cgSFRNTCB2ZXJzaW9uIG9mIGRvY3VtZW50YXRpb24gZm9yCisgICAiZ2l0LSRjbWQiIGJ5IHNldHRpbmcgaGVscC5odG1scGF0aCB0byBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUKKyAgIGRlZmF1bHQgbG9jYXRpb24gd2hlcmUgdGhlIGJ1aWxkIHByb2NlZHVyZSBpbnN0YWxscyB0aGVtIGxvY2FsbHk7CisgICB0aGUgdmFyaWFibGUgY2FuIGV2ZW4gcG9pbnQgYXQgYSBodHRwOi8vIFVSTC4KKworICogImdpdCByZWJhc2UgWy1pXSAtLXJvb3QgJHRpcCIgY2FuIG5vdyBiZSB1c2VkIHRvIHJld3JpdGUgYWxsIHRoZQorICAgaGlzdG9yeSBsZWFkaW5nIHRvICIkdGlwIiBkb3duIHRvIHRoZSByb290IGNvbW1pdC4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgIi14IDxjbWQ+IiB0byBpbnNlcnQgImV4ZWMgPGNtZD4iIGFmdGVyCisgICBlYWNoIGNvbW1pdCBpbiB0aGUgcmVzdWx0aW5nIGhpc3RvcnkuCisKKyAqICJnaXQgc3RhdHVzIiBnaXZlcyBmaW5lciBjbGFzc2lmaWNhdGlvbiB0byB2YXJpb3VzIHN0YXRlcyBvZiBwYXRocworICAgaW4gY29uZmxpY3RlZCBzdGF0ZSBhbmQgb2ZmZXIgYWR2aWNlIG1lc3NhZ2VzIGluIGl0cyBvdXRwdXQuCisKKyAqICJnaXQgc3VibW9kdWxlIiBsZWFybmVkIHRvIGRlYWwgd2l0aCBuZXN0ZWQgc3VibW9kdWxlIHN0cnVjdHVyZQorICAgd2hlcmUgYSBtb2R1bGUgaXMgY29udGFpbmVkIHdpdGhpbiBhIG1vZHVsZSB3aG9zZSBvcmlnaW4gaXMKKyAgIHNwZWNpZmllZCBhcyBhIHJlbGF0aXZlIFVSTCB0byBpdHMgc3VwZXJwcm9qZWN0J3Mgb3JpZ2luLgorCisgKiBBIHJhdGhlciBoZWF2eS1pc2ggImdpdCBjb21wbGV0aW9uIiBzY3JpcHQgaGFzIGJlZW4gc3BsaXQgdG8gY3JlYXRlCisgICBhIHNlcGFyYXRlICJnaXQgcHJvbXB0aW5nIiBzY3JpcHQsIHRvIGhlbHAgbGF6eS1hdXRvbG9hZGluZyBvZiB0aGUKKyAgIGNvbXBsZXRpb24gcGFydCB3aGlsZSBtYWtpbmcgcHJvbXB0aW5nIHBhcnQgYWx3YXlzIGF2YWlsYWJsZS4KKworICogImdpdHdlYiIgcGF5cyBhdHRlbnRpb24gdG8gdmFyaW91cyBmb3JtcyBvZiBjcmVkaXRzIHRoYXQgYXJlCisgICBzaW1pbGFyIHRvICJTaWduZWQtb2ZmLWJ5OiIgbGluZXMgaW4gdGhlIGNvbW1pdCBvYmplY3RzIGFuZAorICAgaGlnaGxpZ2h0cyB0aGVtIGFjY29yZGluZ2x5LgorCisKK0ZvcmVpZ24gSW50ZXJmYWNlCisKKyAqICJtZWRpYXdpa2kiIHJlbW90ZSBoZWxwZXIgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRvIGhhbmRsZSBmaWxlCisgICBhdHRhY2htZW50cy4KKworICogImdpdCBwNCIgbm93IHVzZXMgIkpvYnM6IiBhbmQgInA0IG1vdmUiIHdoZW4gYXBwcm9wcmlhdGUuCisKKyAqIHZjcy1zdm4gaGFzIGJlZW4gdXBkYXRlZCB0byBjbGVhbi11cCBjb21waWxhdGlvbiwgbGlmdCAzMi1iaXQKKyAgIGxpbWl0YXRpb25zLCBldGMuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuIChwbGVhc2UgcmVwb3J0IHBvc3NpYmxlIHJlZ3Jlc3Npb25zKQorCisgKiBTb21lIHRlc3RzIHNob3dlZCBmYWxzZSBmYWlsdXJlcyBjYXVzZWQgYnkgYSBidWcgaW4gZWNyeXB0b2ZzLgorCisgKiBXZSBubyBsb25nZXIgdXNlIEFzY2lpRG9jNyBzeW50YXggaW4gb3VyIGRvY3VtZW50YXRpb24gYW5kIGZhdm9yIGEKKyAgIG1vcmUgbW9kZXJuIHN0eWxlLgorCisgKiAiZ2l0IGFtIC0tcmViYXNpbmciIGNvZGVwYXRoIHdhcyB0YXVnaHQgdG8gZ3JhYiBhdXRob3JzaGlwLCBsb2cKKyAgIG1lc3NhZ2UgYW5kIHRoZSBwYXRjaCB0ZXh0IGRpcmVjdGx5IG91dCBvZiBleGlzdGluZyBjb21taXRzLiAgVGhpcworICAgd2lsbCBoZWxwIHJlYmFzaW5nIGNvbW1pdHMgdGhhdCBoYXZlIGNvbmZ1c2luZyAiZGlmZiIgb3V0cHV0IGluCisgICB0aGVpciBsb2cgbWVzc2FnZXMuCisKKyAqICJnaXQgaW5kZXgtcGFjayIgYW5kICJnaXQgcGFjay1vYmplY3RzIiB1c2Ugc3RyZWFtaW5nIEFQSSB0byByZWFkCisgICBmcm9tIHRoZSBvYmplY3Qgc3RvcmUgdG8gYXZvaWQgaGF2aW5nIHRvIGhvbGQgYSBsYXJnZSBibG9iIG9iamVjdAorICAgaW4tY29yZSB3aGlsZSB0aGV5IGFyZSBkb2luZyB0aGVpciB0aGluZy4KKworICogQ29kZSB0byBtYXRjaCBwYXRocyB3aXRoIGV4Y2x1ZGUgcGF0dGVybnMgbGVhcm5lZCB0byBhdm9pZCBjYWxsaW5nCisgICBmbm1hdGNoKCkgYnkgY29tcGFyaW5nIGZpeGVkIGxlYWRpbmcgc3Vic3RyaW5nIGxpdGVyYWxseSB3aGVuCisgICBwb3NzaWJsZS4KKworICogImdpdCBsb2cgLW4gMSAtLSByYXJlbHktdG91Y2hlZC1wYXRoIiB3YXMgc3BlbmRpbmcgdW5uZWNlc3NhcnkKKyAgIGN5Y2xlcyBhZnRlciBzaG93aW5nIHRoZSBmaXJzdCBjaGFuZ2UgdG8gZmluZCB0aGUgbmV4dCBvbmUsIG9ubHkgdG8KKyAgIGRpc2NhcmQgaXQuCisKKyAqICJnaXQgc3ZuIiBnb3QgYSBsYXJnZS1sb29raW5nIGNvZGUgcmVvcmdhbml6YXRpb24gYXQgdGhlIGxhc3QKKyAgIG1pbnV0ZSBiZWZvcmUgdGhlIGNvZGUgZnJlZXplLgorCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjExCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjEuNy4xMSBpbiB0aGUgbWFpbnRlbmFuY2UKK3JlbGVhc2VzIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCisKKyAqICJnaXQgc3VibW9kdWxlIGFkZCIgd2FzIGNvbmZ1c2VkIHdoZW4gdGhlIHN1cGVycHJvamVjdCBkaWQgbm90IGhhdmUKKyAgIGl0cyByZXBvc2l0b3J5IGluIGl0cyB1c3VhbCBwbGFjZSBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCBHSVRfRElSCisgICBhbmQgR0lUX1dPUktfVFJFRSB3YXMgdXNlZCB0byBhY2Nlc3MgaXQuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQiIGxldCB0aGUgdXNlciBlZGl0IHRoZSBsb2cgbWVzc2FnZSBhbmQgdGhlbiBkaWVkCisgICB3aGVuIHRoZSBodW1hbi1yZWFkYWJsZSBjb21taXR0ZXIgbmFtZSB3YXMgZ2l2ZW4gaW5zdWZmaWNpZW50bHkgYnkKKyAgIGdldHB3ZW50KDMpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwM2M0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMS50eHQKQEAgLTAsMCArMSwyNSBAQAorR2l0IHYxLjcuMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgaW5zdGF3ZWIiIHdhc24ndCB1c2VmdWwgd2hlbiB5b3VyIEFwYWNoZSB3YXMgaW5zdGFsbGVkIHVuZGVyIGEKKyAgIG5hbWUgb3RoZXIgdGhhbiBhcGFjaGUyIChlLmcuICJodHRwZCIpLgorCisgKiBTaW1pbGFybHksICJnaXQgd2ViLS1icm93c2UiIChpbnZva2VkIGJ5ICJnaXQgaGVscCAtdyIpIGxlYXJuZWQgdGhhdAorICAgY2hyb21lIGJyb3dzZXIgaXMgc29tZXRpbWVzIGNhbGxlZCBnb29nbGUtY2hyb21lLgorCisgKiBBbiBvdmVybG9uZyBsaW5lIGFmdGVyICIuZ2l0ZGlyOiAiIGluIGEgZ2l0IGZpbGUgY2F1c2VkIG91dCBvZiBib3VuZHMKKyAgIGFjY2VzcyB0byBhbiBhcnJheSBvbiB0aGUgc3RhY2suCisKKyAqICJnaXQgY29uZmlnIC0tcGF0aCBjb25mLnZhciIgdG8gYXR0ZW1wdCB0byBleHBhbmQgYSB2YXJpYWJsZSBjb25mLnZhcgorICAgdGhhdCB1c2VzICJ+LyIgc2hvcnQtaGFuZCBzZWdmYXVsdGVkIHdoZW4gJEhPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIHdhcyBub3Qgc2V0LgorCisgKiBEb2N1bWVudGF0aW9uIG9uIEN5Z3dpbiBmYWlsZWQgdG8gYnVpbGQuCisKKyAqIFRoZSBlcnJvciBtZXNzYWdlIGZyb20gImdpdCBwdWxsIGJsYXJnIiB3aGVuICdibGFyZycgaXMgYW4gdW5rbm93bgorICAgcmVtb3RlIG5hbWUgaGFzIGJlZW4gaW1wcm92ZWQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlYjZhOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMi50eHQKQEAgLTAsMCArMSwyMiBAQAorR2l0IHYxLjcuMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBPYmplY3QgdHJhbnNmZXIgb3ZlciBzbWFydCBodHRwIHRyYW5zcG9ydCBkZWFkbG9ja2VkIHRoZSBjbGllbnQgd2hlbgorICAgdGhlIHJlbW90ZSBIVFRQIHNlcnZlciByZXR1cm5lZCBhIGZhaWx1cmUsIGluc3RlYWQgb2YgZXJyb3JpbmcgaXQgb3V0LgorCisgKiBnaXQtZ3VpIGhvbm9ycyBjdXN0b20gdGV4dGNvbnYgZmlsdGVycyB3aGVuIHNob3dpbmcgZGlmZiBhbmQgYmxhbWU7CisKKyAqIGdpdCBkaWZmIC0tcmVsYXRpdmU9c3ViZGlyICh3aXRob3V0IHRoZSBuZWNlc3NhcnkgdHJhaWxpbmcgLykgZGlkIG5vdAorICAgd29yayB3ZWxsOworCisgKiAiZ2l0IGRpZmYtZmlsZXMgLXAgLS1zdWJtb2R1bGUiIHdhcyByZWNlbnRseSBicm9rZW47CisKKyAqICJnaXQgY2hlY2tvdXQgLWIgbiAnOi90b2tlbiciIGRpZCBub3Qgd29yazsKKworICogImdpdCBpbmRleC1wYWNrIiAoaGVuY2UgImdpdCBmZXRjaC9jbG9uZS9wdWxsL3B1c2giKSBlbmFibGVkIHRoZSBvYmplY3QKKyAgIHJlcGxhY2VtZW50IG1hY2hpbmVyeSBieSBtaXN0YWtlIChpdCBuZXZlciBzaG91bGQgaGF2ZSk7CisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwOTYwYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMy50eHQKQEAgLTAsMCArMSwzOSBAQAorR2l0IHYxLjcuMi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXaGVuIHBlb3BsZSB0cnkgaW5zYW5lIHRoaW5ncyBzdWNoIGFzIGRlbHRhLWNvbXByZXNzaW5nIDRHaUIgZmlsZXMsIHdlCisgICB0aHJldyBhbiBhc3NlcnRpb24gZmFpbHVyZS4KKworICogImdpdCBhcmNoaXZlIiBnYXZlIHRoZSBmdWxsIGNvbW1pdCBJRCBmb3IgIiRGb3JtYXQ6JWgkIi4KKworICogImdpdCBmZXRjaCAtLXRhZ3MiIGRpZCBub3QgZmV0Y2ggdGFncyB3aGVuIHJlbW90ZS48bmljaz4udGFnb3B0IHdhcyBzZXQKKyAgIHRvIC0tbm8tdGFncy4gIFRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIG5vdyBvdmVycmlkZXMgdGhlIGNvbmZpZ3VyYXRpb24KKyAgIHNldHRpbmcuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKG9iamVjdG5hbWU6c2hvcnQpJyIgaGFzIGJlZW4gY29tcGxldGVseQorICAgYnJva2VuIGZvciBhIGxvbmcgdGltZS4KKworICogImdpdCBnYyIgaW5jb3JyZWN0bHkgcHJ1bmVkIGEgcmVyZXJlIHJlY29yZCB0aGF0IHdhcyBjcmVhdGVkIGxvbmcKKyAgIHRpbWUgYWdvIGJ1dCBzdGlsbCBpcyBhY3RpdmVseSBhbmQgcmVwZWF0ZWRseSB1c2VkLgorCisgKiAiZ2l0IGxvZyAtLWZvbGxvdyAtTSAtcCIgd2FzIHNlcmlvdXNseSBicm9rZW4gaW4gMS43LjIsIHJlcG9ydGluZworICAgYXNzZXJ0aW9uIGZhaWx1cmUuCisKKyAqIFJ1bm5pbmcgImdpdCBsb2ciIHdpdGggYW4gaW5jb3JyZWN0IG9wdGlvbiBzdGFydGVkIHBhZ2VyIG5ldmVydGhlbGVzcywKKyAgIGZvcmNpbmcgdGhlIHVzZXIgdG8gZGlzbWlzcyBpdC4KKworICogImdpdCByZWJhc2UiIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gdGhlIHVzZXIgaGFzIGRpZmYucmVuYW1lcworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBzZXQuCisKKyAqIEFuIGVhcmxpZXIgKGFuZCByYXRoZXIgb2xkKSBmaXggdG8gImdpdCByZWJhc2UiIGFnYWluc3QgYSByZWJhc2VkCisgICB1cHN0cmVhbSBicm9rZSBhIG1vcmUgbm9ybWFsLCBub24gcmViYXNlZCB1cHN0cmVhbSBjYXNlIHJhdGhlciBiYWRseSwKKyAgIGF0dGVtcHRpbmcgdG8gcmUtYXBwbHkgcGF0Y2hlcyB0aGF0IGFyZSBhbHJlYWR5IGFjY2VwdGVkIHVwc3RyZWFtLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzeW5jIiBmb3Jnb3QgdG8gdXBkYXRlIHRoZSBzdXBlcnByb2plY3QncyBjb25maWcgZmlsZQorICAgd2hlbiBzdWJtb2R1bGUgVVJMIGNoYW5nZWQuCisKKyAqICJnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUiIGRpZCBub3QgcmVtb3ZlIGEgZGlyZWN0b3J5IHRoYXQgaGFzCisgICBiZWNvbWUgZW1wdHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk1MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi40LnR4dApAQCAtMCwwICsxLDEwIEBACitHaXQgdjEuNy4yLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gYmFja3BvcnQgc3VwcG9ydCBmb3IgdGhlIG5ldyAiYWRkLmlnbm9yZUVycm9ycyIKK25hbWUgZ2l2ZW4gdG8gdGhlIGV4aXN0aW5nICJhZGQuaWdub3JlLWVycm9ycyIgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworVGhlIG5leHQgdmVyc2lvbiwgR2l0IDEuNy40LCBhbmQgZnV0dXJlIHZlcnNpb25zLCB3aWxsIHN1cHBvcnQgYm90aAorb2xkIGFuZCBpbmNvcnJlY3QgbmFtZSBhbmQgdGhlIG5ldyBjb3JyZWN0ZWQgbmFtZSwgYnV0IHdpdGhvdXQgdGhpcworYmFja3BvcnQsIHVzZXJzIHdobyB3YW50IHRvIHVzZSB0aGUgbmV3IG5hbWUgImFkZC5pZ25vcmVFcnJvcnMiIGluCit0aGVpciByZXBvc2l0b3JpZXMgY2Fubm90IHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjk3NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi41LnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2MS43LjIuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWNmMDExCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi50eHQKQEAgLTAsMCArMSwxNTEgQEAKK0dpdCB2MS43LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBjb3JlLmVvbCBjb25maWd1cmF0aW9uIGFuZCB0ZXh0L2VvbCBhdHRyaWJ1dGVzIGFyZSB0aGUgbmV3IHdheSB0byBjb250cm9sCisgICB0aGUgZW5kIG9mIGxpbmUgY29udmVudGlvbnMgZm9yIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqIGNvcmUuYXV0b2NybGYgaGFzIGJlZW4gbWFkZSBzYWZlciAtIGl0IHdpbGwgbm93IG9ubHkgaGFuZGxlIGxpbmUKKyAgIGVuZGluZ3MgZm9yIG5ldyBmaWxlcyBhbmQgZmlsZXMgdGhhdCBhcmUgTEYtb25seSBpbiB0aGUKKyAgIHJlcG9zaXRvcnkuIFRvIG5vcm1hbGl6ZSBjb250ZW50IHRoYXQgaGFzIGJlZW4gY2hlY2tlZCBpbiB3aXRoCisgICBDUkxGLCB1c2UgdGhlIG5ldyBlb2wvdGV4dCBhdHRyaWJ1dGVzLgorCisgKiBUaGUgd2hpdGVzcGFjZSBydWxlcyB1c2VkIGluICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlIiBhbmQgImdpdCBkaWZmIgorICAgZ2FpbmVkIGEgbmV3IG1lbWJlciBpbiB0aGUgZmFtaWx5ICh0YWItaW4taW5kZW50KSB0byBoZWxwIHByb2plY3RzIHdpdGgKKyAgIHBvbGljeSB0byBpbmRlbnQgb25seSB3aXRoIHNwYWNlcy4KKworICogV2hlbiB3b3JraW5nIGZyb20gYSBzdWJkaXJlY3RvcnksIGJ5IGRlZmF1bHQsIGdpdCBkb2VzIG5vdCBsb29rIGZvciBpdHMKKyAgIG1ldGFkaXJlY3RvcnkgIi5naXQiIGFjcm9zcyBmaWxlc3lzdGVtcywgcHJpbWFyaWx5IHRvIGhlbHAgcGVvcGxlIHdobworICAgaGF2ZSBpbnZvY2F0aW9ucyBvZiBnaXQgaW4gdGhlaXIgY3VzdG9tIFBTMSBwcm9tcHRzLCBhcyBiZWluZyBvdXRzaWRlCisgICBvZiBhIGdpdCByZXBvc2l0b3J5IHdvdWxkIGxvb2sgZm9yICIuZ2l0IiBhbGwgdGhlIHdheSB1cCB0byB0aGUgcm9vdAorICAgZGlyZWN0b3J5LCBhbmQgTkZTIG1vdW50cyBhcmUgb2Z0ZW4gc2xvdy4gIERJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTQorICAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gdGVsbCBnaXQgbm90IHRvIHN0b3AgYXQgYQorICAgZmlsZXN5c3RlbSBib3VuZGFyeS4KKworICogVXNhZ2UgaGVscCBtZXNzYWdlcyBnZW5lcmF0ZWQgYnkgcGFyc2Utb3B0aW9ucyBsaWJyYXJ5IChpLmUuIG1vc3QKKyAgIG9mIHRoZSBQb3JjZWxhaW4gY29tbWFuZHMpIGFyZSBzZW50IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgbm93LgorCisgKiAnOi88c3RyaW5nPicgbm90YXRpb24gdG8gbG9vayBmb3IgYSBjb21taXQgbm93IHRha2VzIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgYW5kIGl0IGlzIG5vdCBhbmNob3JlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UKKyAgIGFueW1vcmUgKHRoaXMgaXMgYSBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlKS4KKworICogImdpdCIgd3JhcHBlciBsZWFybmVkICItYyBuYW1lPXZhbHVlIiBvcHRpb24gdG8gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisgKiBJbXByb3ZlZCBwb3J0YWJpbGl0eSBmb3IgdmFyaW91cyBwbGF0Zm9ybXMgaW5jbHVkaW5nIG9sZGVyIFN1bk9TLAorICAgSFAtVVggMTAvMTEsIEFJWCwgVHJ1NjQsIGV0Yy4gYW5kIHBsYXRmb3JtcyB3aXRoIFB5dGhvbiAyLjQuCisKKyAqIFRoZSBtZXNzYWdlIGZyb20gImdpdCBhbSAtMyIgaGFzIGJlZW4gaW1wcm92ZWQgd2hlbiBjb25mbGljdAorICAgcmVzb2x1dGlvbiBlbmRlZCB1cCBtYWtpbmcgdGhlIHBhdGNoIGEgbm8tb3AuCisKKyAqICJnaXQgYmxhbWUiIGFwcGxpZXMgdGhlIHRleHRjb252IGZpbHRlciB0byB0aGUgY29udGVudHMgaXQgd29ya3MKKyAgIG9uLCB3aGVuIGF2YWlsYWJsZS4KKworICogImdpdCBjaGVja291dCAtLW9ycGhhbiBuZXdicmFuY2giIGlzIHNpbWlsYXIgdG8gIi1iIG5ld2JyYW5jaCIgYnV0CisgICBwcmVwYXJlcyB0byBjcmVhdGUgYSByb290IGNvbW1pdCB0aGF0IGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55IGV4aXN0aW5nCisgICBjb21taXQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIGxlYXJuZWQgdG8gcGljayBhIHJhbmdlIG9mIGNvbW1pdHMKKyAgIChlLmcuICJjaGVycnktcGljayBBLi5CIiBhbmQgImNoZXJyeS1waWNrIC0tc3RkaW4iKSwgc28gZGlkICJnaXQKKyAgIHJldmVydCI7IHRoZXNlIGRvIG5vdCBzdXBwb3J0IHRoZSBuaWNlciBzZXF1ZW5jaW5nIGNvbnRyb2wgInJlYmFzZQorICAgWy1pXSIgaGFzLCB0aG91Z2guCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgbGVhcm5lZCAtLXN0cmF0ZWd5IG9wdGlvbiB0byBzcGVjaWZ5CisgICB0aGUgbWVyZ2Ugc3RyYXRlZ3kgdG8gYmUgdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhyZWUtd2F5IG1lcmdlcy4KKworICogImdpdCBjdnNzZXJ2ZXIiIGNhbiBiZSB0b2xkIHRvIHVzZSBwc2VydmVyOyBpdHMgcGFzc3dvcmQgZmlsZSBjYW4gYmUKKyAgIHN0b3JlZCBvdXRzaWRlIHRoZSByZXBvc2l0b3J5LgorCisgKiBUaGUgb3V0cHV0IGZyb20gdGhlIHRleHRjb252IGZpbHRlciB1c2VkIGJ5ICJnaXQgZGlmZiIgY2FuIGJlIGNhY2hlZCB0bworICAgc3BlZWQgdXAgdGhlaXIgcmV1c2UuCisKKyAqICJnaXQgZGlmZiAtLXdvcmQtZGlmZj08bW9kZT4iIGV4dGVuZHMgdGhlIGV4aXN0aW5nICItLWNvbG9yLXdvcmRzIgorICAgb3B0aW9uLCBtYWtpbmcgaXQgbW9yZSB1c2VmdWwgaW4gY29sb3ItY2hhbGxlbmdlZCBlbnZpcm9ubWVudHMuCisKKyAqIFRoZSByZWdleHAgdG8gZGV0ZWN0IGZ1bmN0aW9uIGhlYWRlcnMgdXNlZCBieSAiZ2l0IGRpZmYiIGZvciBQSFAgaGFzCisgICBiZWVuIGVuaGFuY2VkIGZvciB2aXNpYmlsaXR5IG1vZGlmaWVycyAocHVibGljLCBwcm90ZWN0ZWQsIGV0Yy4pIHRvCisgICBiZXR0ZXIgc3VwcG9ydCBQSFA1LgorCisgKiAiZGlmZi5ub3ByZWZpeCIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBpbXBsaWNpdGx5CisgICBhc2sgZm9yICJkaWZmIC0tbm8tcHJlZml4IiBiZWhhdmlvdXIuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBsZWFybmVkICIlKG9iamVjdG5hbWU6c2hvcnQpIiB0aGF0IGdpdmVzIHRoZSBvYmplY3QKKyAgIG5hbWUgYWJicmV2aWF0ZWQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIC0tc2lnbmF0dXJlIG9wdGlvbiBhbmQgZm9ybWF0LnNpZ25hdHVyZQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBjdXN0b21pemUgdGhlIGUtbWFpbCBzaWduYXR1cmUgdXNlZCBpbiB0aGUKKyAgIG91dHB1dC4KKworICogVmFyaW91cyBvcHRpb25zIHRvICJnaXQgZ3JlcCIgKGUuZy4gLS1jb3VudCwgLS1uYW1lLW9ubHkpIHdvcmsgYmV0dGVyCisgICB3aXRoIGJpbmFyeSBmaWxlcy4KKworICogImdpdCBncmVwIiBsZWFybmVkICItT3ZpIiB0byBvcGVuIHRoZSBmaWxlcyB3aXRoIGhpdHMgaW4geW91ciBlZGl0b3IuCisKKyAqICJnaXQgaGVscCAtdyIgbGVhcm5lZCAiY2hyb21lIiBhbmQgImNocm9taXVtIiBicm93c2Vycy4KKworICogImdpdCBsb2cgLS1kZWNvcmF0ZSIgc2hvd3MgY29tbWl0IGRlY29yYXRpb25zIGluIHZhcmlvdXMgY29sb3Vycy4KKworICogImdpdCBsb2cgLS1mb2xsb3cgPHBhdGg+IiBmb2xsb3dzIGFjcm9zcyBjb3BpZXMgKGl0IHVzZWQgdG8gb25seSBmb2xsb3cKKyAgIHJlbmFtZXMpLiAgVGhpcyBtYXkgbWFrZSB0aGUgcHJvY2Vzc2luZyBtb3JlIGV4cGVuc2l2ZS4KKworICogImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0Ojx0ZW1wbGF0ZT4iIHNwZWNpZmllciBsZWFybmVkICIlIDxzb21ldGhpbmc+IgorICAgbWFnaWMgdGhhdCBpbnNlcnRzIGEgc3BhY2Ugb25seSB3aGVuICU8c29tZXRoaW5nPiBleHBhbmRzIHRvIGEKKyAgIG5vbi1lbXB0eSBzdHJpbmc7IHRoaXMgaXMgc2ltaWxhciB0byAiJSs8c29tZXRoaW5nPiIgbWFnaWMsIGJ1dCBpcworICAgdXNlZnVsIGluIGEgY29udGV4dCB0byBnZW5lcmF0ZSBhIHNpbmdsZSBsaW5lIG91dHB1dC4KKworICogImdpdCBub3RlcyBwcnVuZSIgbGVhcm5lZCAiLW4iIChkcnktcnVuKSBhbmQgIi12IiBvcHRpb25zLCBzaW1pbGFyIHRvCisgICB3aGF0ICJnaXQgcHJ1bmUiIGhhcy4KKworICogImdpdCBwYXRjaC1pZCIgY2FuIGJlIGZlZCBhIG1ib3ggd2l0aG91dCBnZXR0aW5nIGNvbmZ1c2VkIGJ5IHRoZQorICAgc2lnbmF0dXJlIGxpbmUgaW4gdGhlIGZvcm1hdC1wYXRjaCBvdXRwdXQuCisKKyAqICJnaXQgcmVtb3RlIiBsZWFybmVkICJzZXQtYnJhbmNoZXMiIHN1YmNvbW1hbmQuCisKKyAqICJnaXQgcmV2LWxpc3QgQS4uQiIgbGVhcm5lZCAtLWFuY2VzdHJ5LXBhdGggb3B0aW9uIHRvIGZ1cnRoZXIgbGltaXQKKyAgIHRoZSByZXN1bHQgdG8gdGhlIGNvbW1pdHMgdGhhdCBhcmUgb24gdGhlIGFuY2VzdHJ5IGNoYWluIGJldHdlZW4gQSBhbmQKKyAgIEIgKGkuZS4gY29tbWl0cyB0aGF0IGFyZSBub3QgZGVzY2VuZGFudHMgb2YgQSBhcmUgZXhjbHVkZWQpLgorCisgKiAiZ2l0IHNob3cgLTUiIGlzIGVxdWl2YWxlbnQgdG8gImdpdCBzaG93IC0tZG8td2FsayA1IjsgdGhpcyBpcyBzaW1pbGFyCisgICB0byB0aGUgdXBkYXRlIHRvIG1ha2UgImdpdCBzaG93IG1hc3Rlci4ubmV4dCIgd2FsayB0aGUgaGlzdG9yeSwKKyAgIGludHJvZHVjZWQgaW4gMS42LjQuCisKKyAqICJnaXQgc3RhdHVzIFstc10gLS1pZ25vcmVkIiBjYW4gYmUgdXNlZCB0byBsaXN0IGlnbm9yZWQgcGF0aHMuCisKKyAqICJnaXQgc3RhdHVzIC1zIC1iIiBzaG93cyB0aGUgY3VycmVudCBicmFuY2ggaW4gdGhlIG91dHB1dC4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgIi0taWdub3JlLXN1Ym1vZHVsZXMiIG9wdGlvbi4KKworICogVmFyaW91cyAiZ2l0d2ViIiBlbmhhbmNlbWVudHMgYW5kIGNsZWFuLXVwcywgaW5jbHVkaW5nIHN5bnRheAorICAgaGlnaGxpZ2h0aW5nLCAicGxhY2t1cCIgc3VwcG9ydCBmb3IgaW5zdGF3ZWIsIC5mY2dpIHN1ZmZpeCB0byBydW4KKyAgIGl0IGFzIEZhc3RDR0kgc2NyaXB0LCBldGMuCisKKyAqIFRoZSB0ZXN0IGhhcm5lc3MgaGFzIGJlZW4gdXBkYXRlZCB0byBwcm9kdWNlIFRBUC1mcmllbmRseSBvdXRwdXQuCisKKyAqIE1hbnkgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudCBwYXRjaGVzIGFyZSBhbHNvIGluY2x1ZGVkLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNy4xLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiBXZSBkaWRuJ3QgVVJMIGRlY29kZSAiZmlsZTovLy9wYXRoL3RvL3JlcG8iIGNvcnJlY3RseSB3aGVuIHBhdGgvdG8vcmVwbworICAgaGFkIHBlcmNlbnQtZW5jb2RlZCBjaGFyYWN0ZXJzICg2Mzg3OTRjLCA5ZDJlOTQyLCBjZTgzZWRhLCAzYzczYTFkKS4KKworICogImdpdCBjbG9uZSIgZGlkIG5vdCBjb25maWd1cmUgcmVtb3RlLm9yaWdpbi51cmwgY29ycmVjdGx5IGZvciBiYXJlCisgICBjbG9uZXMgKGRmNjFjODg5KS4KKworICogImdpdCBkaWZmIC0tZ3JhcGgiIHdvcmtzIGJldHRlciB3aXRoICItLWNvbG9yLXdvcmRzIiBhbmQgb3RoZXIgb3B0aW9ucworICAgKDgxZmEwMjQuLjQyOTdjMGEpLgorCisgKiAiZ2l0IGRpZmYiIGNvdWxkIHNob3cgYW1iaWd1b3VzIGFiYnJldmlhdGlvbiBvZiBibG9iIG9iamVjdCBuYW1lcyBvbgorICAgaXRzICJpbmRleCIgbGluZSAoM2U1YTE4OCkuCisKKyAqICJnaXQgcmVzZXQgLS1oYXJkIiBzdGFydGVkIGZyb20gYSB3cm9uZyBkaXJlY3RvcnkgYW5kIGEgd29ya2luZyB0cmVlIGluCisgICBhIG5vbnN0YW5kYXJkIGxvY2F0aW9uIGlzIGluIHVzZSBnb3QgY29uZnVzZWQgKDU2MGZiNmExKS4KKworICogImdpdCByZWFkLXRyZWUgLW0gQSBCIiB1c2VkIHRvIHN3aXRjaCB0byBicmFuY2ggQiB3aGlsZSByZXRhaW5pbmcKKyAgIGxvY2FsIGNoYW5nZXMgYWRkZWQgYW4gaW5jb3JyZWN0IGNhY2hlLXRyZWUgaW5mb3JtYXRpb24gKGIxZjQ3NTE0KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMmM5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjEudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0dpdCB2MS43LjMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHN0YXNoIHNob3cgc3Rhc2hAeyRufSIgd2FzIGFjY2lkZW50YWxseSBicm9rZW4gaW4gMS43LjMgKCJnaXQKKyAgIHN0YXNoIHNob3ciIHdpdGhvdXQgYW55IGFyZ3VtZW50IHN0aWxsIHdvcmtlZCwgdGhvdWdoKS4KKworICogImdpdCBzdGFzaCBicmFuY2ggJGJyYW5jaCBzdGFzaEB7JG59IiB3YXMgYWNjaWRlbnRhbGx5IGJyb2tlbiBpbgorICAgMS43LjMgYW5kIHN0YXJ0ZWQgZHJvcHBpbmcgdGhlIG5hbWVkIHN0YXNoIGV2ZW4gd2hlbiBicmFuY2ggY3JlYXRpb24KKyAgIGZhaWxlZC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzkzYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4yLnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2MS43LjMuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHByaW1hcmlseSB0byBwdXNoIG91dCBtYW55IGRvY3VtZW50YXRpb24gZml4ZXMgYWNjdW11bGF0ZWQgc2luY2UKK3RoZSAxLjcuMy4xIHJlbGVhc2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJiMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4zLnR4dApAQCAtMCwwICsxLDU0IEBACitHaXQgdjEuNy4zLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGZpeGVzLCB0aGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBzdXBwb3J0IGZvcgordGhlIG5ldyAiYWRkLmlnbm9yZUVycm9ycyIgbmFtZSBnaXZlbiB0byB0aGUgZXhpc3RpbmcgImFkZC5pZ25vcmUtZXJyb3JzIgorY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworVGhlIG5leHQgdmVyc2lvbiwgR2l0IDEuNy40LCBhbmQgZnV0dXJlIHZlcnNpb25zLCB3aWxsIHN1cHBvcnQgYm90aAorb2xkIGFuZCBpbmNvcnJlY3QgbmFtZSBhbmQgdGhlIG5ldyBjb3JyZWN0ZWQgbmFtZSwgYnV0IHdpdGhvdXQgdGhpcworYmFja3BvcnQsIHVzZXJzIHdobyB3YW50IHRvIHVzZSB0aGUgbmV3IG5hbWUgImFkZC5pZ25vcmVFcnJvcnMiIGluCit0aGVpciByZXBvc2l0b3JpZXMgY2Fubm90IHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQuCisKK0ZpeGVzIHNpbmNlIHYxLjcuMy4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFwcGx5IiBzZWdmYXVsdGVkIHdoZW4gYSBib2d1cyBpbnB1dCBpcyBmZWQgdG8gaXQuCisKKyAqIFJ1bm5pbmcgImdpdCBjaGVycnktcGljayAtLWZmIiBvbiBhIHJvb3QgY29tbWl0IHNlZ2ZhdWx0ZWQuCisKKyAqICJkaWZmIiwgImJsYW1lIiBhbmQgZnJpZW5kcyBpbmNvcnJlY3RseSBhcHBsaWVkIHRleHRjb252IGZpbHRlcnMgdG8KKyAgIHN5bWxpbmtzLgorCisgKiBIaWdobGlnaHRpbmcgb2Ygd2hpdGVzcGFjZSBicmVha2FnZSBpbiAiZGlmZiIgb3V0cHV0IHdhcyBzaG93aW5nCisgICBpbmNvcnJlY3QgYW1vdW50IG9mIHdoaXRlc3BhY2VzIHdoZW4gYmxhbmstYXQtZW9sIGlzIHNldCBhbmQgdGhlIGxpbmUKKyAgIGNvbnNpc3RlZCBvbmx5IG9mIHdoaXRlc3BhY2VzIGFuZCBhIFRBQi4KKworICogImRpZmYiIHdhcyBvdmVybHkgaW5lZmZpY2llbnQgd2hlbiB0cnlpbmcgdG8gZmluZCB0aGUgbGluZSB0byB1c2UgZm9yCisgICB0aGUgZnVuY3Rpb24gaGVhZGVyIChpLmUuIGVxdWl2YWxlbnQgdG8gLS1zaG93LWMtZnVuY3Rpb24gb2YgR05VIGRpZmYpLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZGVwZW5kcyBvbiBsaWJjcnlwdG8gYnV0IG91ciBidWlsZCBydWxlIHJlbGllZCBvbiB0aGUKKyAgIGxpbmtlciB0byBpbXBsaWNpdGx5IGxpbmsgaXQgdmlhIGxpYnNzbCwgd2hpY2ggd2FzIHdyb25nLgorCisgKiAiZ2l0IG1lcmdlLWZpbGUiIGNhbiBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSBzdWJkaXJlY3Rvcnkgbm93LgorCisgKiAiZ2l0IHJlcGFjayAtZiIgZXhwYW5kZWQgYW5kIHJlY29tcHJlc3NlZCBub24tZGVsdGEgb2JqZWN0cyBpbiB0aGUKKyAgIGV4aXN0aW5nIHBhY2ssIHdoaWNoIHdhcyB3YXN0ZWZ1bC4gIFVzZSBuZXcgIi1GIiBvcHRpb24gaWYgeW91IHJlYWxseQorICAgd2FudCB0byAoZS5nLiB3aGVuIGNoYW5naW5nIHRoZSBwYWNrLmNvbXByZXNzaW9uIGxldmVsKS4KKworICogImdpdCByZXYtbGlzdCAtLWZvcm1hdD0iLi4uJXgwMC4uLiIgaW5jb3JyZWN0bHkgY2hvcHBlZCBpdHMgb3V0cHV0CisgICBhdCBOVUwuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBjb3JyZWN0bHkgcmVtb3ZlIGR1cGxpY2F0ZSBtYWlsIGFkZHJlc3NlcyBmcm9tCisgICB0aGUgQ2M6IGhlYWRlciB0aGF0IGFwcGVhciBvbiB0aGUgVG86IGhlYWRlci4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliL2NvbXBsZXRpb24pIGlnbm9yZWQgbGlnaHR3ZWlnaHQgdGFncworICAgaW4gX19naXRfcHMxKCkuCisKKyAqICJnaXQtYmxhbWUiIG1vZGUgKGluIGNvbnRyaWIvZW1hY3MpIGRpZG4ndCBzYXkgKHJlcXVpcmUgJ2Zvcm1hdC1zcGVjKQorICAgZXZlbiB0aG91Z2ggaXQgZGVwZW5kcyBvbiBpdDsgaXQgZGlkbid0IHdvcmsgd2l0aCBFbWFjcyAyMiBvciBvbGRlcgorICAgdW5sZXNzIEdudXMgaXMgdXNlZC4KKworICogImdpdC1wNCIgKGluIGNvbnRyaWIvKSBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgZGVsZXRlZCBmaWxlcy4KKworT3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgYWxzbyBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2Y3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjQudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0dpdCB2MS43LjMuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjMuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogU21hcnQgSFRUUCB0cmFuc3BvcnQgdXNlZCB0byBpbmNvcnJlY3RseSByZXRyeSByZWRpcmVjdGVkIFBPU1QKKyAgIHJlcXVlc3Qgd2l0aCBHRVQgcmVxdWVzdC4KKworICogImdpdCBhcHBseSIgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIHBhdGNoZXMgdGhhdCBvbmx5IGNoYW5nZSBtb2RlcworICAgaWYgdG9sZCB0byBhcHBseSB3aGlsZSBzdHJpcHBpbmcgbGVhZGluZyBwYXRocyB3aXRoIC1wIG9wdGlvbi4KKworICogImdpdCBhcHBseSIgY2FuIGRlYWwgd2l0aCBwYXRjaGVzIHdpdGggdGltZXpvbmUgZm9ybWF0dGVkIHdpdGggYQorICAgY29sb24gYmV0d2VlbiB0aGUgaG91cnMgYW5kIG1pbnV0ZXMgcGFydCAoZS5nLiAiLTA4OjAwIiBpbnN0ZWFkIG9mCisgICAiLTA4MDAiKS4KKworICogImdpdCBjaGVja291dCIgcmVtb3ZlZCBhbiB1bnRyYWNrZWQgZmlsZSAiZm9vIiBmcm9tIHRoZSB3b3JraW5nCisgICB0cmVlIHdoZW4gc3dpdGNoaW5nIHRvIGEgYnJhbmNoIHRoYXQgY29udGFpbnMgYSB0cmFja2VkIHBhdGgKKyAgICJmb28vYmFyIi4gIFByZXZlbnQgdGhpcywganVzdCBsaWtlIHRoZSBjYXNlIHdoZXJlIHRoZSBjb25mbGljdGluZworICAgcGF0aCB3ZXJlICJmb28iIChjNzUyZTdmLi43OTgwODcyZCkuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIG9yICJnaXQgcmV2ZXJ0IiByZWZ1c2VkIHRvIHdvcmsgd2hlbiBhIHBhdGggdGhhdAorICAgd291bGQgYmUgbW9kaWZpZWQgYnkgdGhlIG9wZXJhdGlvbiB3YXMgc3RhdC1kaXJ0eSB3aXRob3V0IGEgcmVhbAorICAgZGlmZmVyZW5jZSBpbiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCisKKyAqICJnaXQgZGlmZiAtLWNoZWNrIiByZXBvcnRlZCBhbiBpbmNvcnJlY3QgbGluZSBudW1iZXIgZm9yIGFkZGVkCisgICBibGFuayBsaW5lcyBhdCB0aGUgZW5kIG9mIGZpbGUuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBmYWlsZWQgdG8gYnVpbGQgdW5kZXIgTk9fT1BFTlNTTC4KKworICogU2V0dGluZyBsb2cuZGVjb3JhdGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAiMCIgb3IgIjEiIHRvIG1lYW4KKyAgICJmYWxzZSIgb3IgInRydWUiIGRpZCBub3Qgd29yay4KKworICogImdpdCBwdXNoIiBvdmVyIGR1bWIgSFRUUCBwcm90b2NvbCBkaWQgbm90IHdvcmsgYWdhaW5zdCBXZWJEQVYKKyAgIHNlcnZlcnMgdGhhdCBkaWQgbm90IHRlcm1pbmF0ZSBhIGNvbGxlY3Rpb24gbmFtZSB3aXRoIGEgc2xhc2guCisKKyAqICJnaXQgdGFnIC12IiBkaWQgbm90IHdvcmsgd2l0aCBHUEcgc2lnbmF0dXJlcyBpbiByZmMxOTkxIG1vZGUuCisKKyAqIFRoZSBwb3N0LXJlY2VpdmUtZW1haWwgc2FtcGxlIGhvb2sgd2FzIGFjY2lkZW50YWxseSBicm9rZW4gaW4gMS43LjMuMworICAgdXBkYXRlLgorCisgKiAiZ2l0d2ViIiBjYW4gc29tZXRpbWVzIGJlIHRyaWNrZWQgaW50byBwYXJyb3R0aW5nIGEgZmlsZW5hbWUgYXJndW1lbnQKKyAgIGdpdmVuIGluIGEgcmVxdWVzdCB3aXRob3V0IHByb3Blcmx5IHF1b3RpbmcuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGFsc28gaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGYzYmE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy41LnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgMS43LjMuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIFRoZSB4ZnVuY25hbWUgcGF0dGVybiB1c2VkIGJ5ICJnaXQgZGlmZiIgYW5kICJnaXQgZ3JlcCIgdG8gc2hvdyB0aGUKKyAgIGxhc3Qgbm90YWJsZSBsaW5lIGluIGNvbnRleHQgd2VyZSBicm9rZW4gZm9yIHB5dGhvbiBhbmQgcnVieSBmb3IgYSBsb25nCisgICB0aW1lLgorCisgKiAiZ2l0IG1lcmdlIiBpbnRvIGFuIHVuYm9ybiBicmFuY2ggcmVtb3ZlZCBhbiB1bnRyYWNrZWQgZmlsZSAiZm9vIiBmcm9tCisgICB0aGUgd29ya2luZyB0cmVlIHdoZW4gbWVyZ2VkIGJyYW5jaCBoYWQgImZvbyIgKHRoaXMgZml4IHdhcyBhbHJlYWR5IGluCisgICAxLjcuMy4zIGJ1dCB3YXMgb21pdHRlZCBmcm9tIHRoZSByZWxlYXNlIG5vdGVzIGJ5IG1pc3Rha2UpLgorCisgKiAiZ2l0IHN0YXR1cyAtcyIgZGlkIG5vdCBxdW90ZSB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHBhdGhzIGFzCisgICBkb2N1bWVudGVkLgorCisgKiAiZ2l0IGFtIC0tYWJvcnQiIHVzZWQgdG8gYWx3YXlzIHJlc2V0IHRvIHRoZSBjb21taXQgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgdGhlIGxhc3QgImFtIiBpbnZvY2F0aW9uIHRoYXQgaGFzIHN0b3BwZWQsIGxvc2luZyBhbnkgdW5yZWxhdGVkIGNvbW1pdHMKKyAgIHRoYXQgbWF5IGhhdmUgYmVlbiBtYWRlIHNpbmNlIHRoZW4uICBOb3cgaXQgcmVmcmFpbnMgZnJvbSBkb2luZyBzbyBhbmQKKyAgIGluc3RlYWQgaXNzdWVzIGEgd2FybmluZy4KKworICogImdpdCBibGFtZSIgaW5jb3JyZWN0bHkgcmV1c2VkIGJvZ3VzbHkgY2FjaGVkIHJlc3VsdCBvZiB0ZXh0Y29udgorICAgZmlsdGVyIGZvciBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqICJnaXQgY29tbWl0IiB1c2VkIHRvIGFib3J0IGFmdGVyIHRoZSB1c2VyIGVkaXRlZCB0aGUgbG9nIG1lc3NhZ2UKKyAgIHdoZW4gdGhlIGNvbW1pdHRlciBpbmZvcm1hdGlvbiB3YXMgbm90IGNvcnJlY3RseSBzZXQgdXAuICBJdCBub3cKKyAgIGFib3J0cyBiZWZvcmUgc3RhcnRpbmcgdGhlIGVkaXRvci4KKworICogImdpdCBjb21taXQgLS1kYXRlPWludmFsaWQiIHVzZWQgdG8gc2lsZW50bHkgaWdub3JlIHRoZSBpbmNvcnJlY3RseQorICAgc3BlY2lmaWVkIGRhdGU7IGl0IGlzIG5vdyBkaWFnbm9zZWQgYXMgYW4gZXJyb3IuCisKKyAqICJnaXQgcmViYXNlIC0tc2tpcCIgdG8gc2tpcCB0aGUgbGFzdCBjb21taXQgaW4gYSBzZXJpZXMgdXNlZCB0byBmYWlsCisgICB0byBydW4gcG9zdC1yZXdyaXRlIGhvb2sgYW5kIHRvIGNvcHkgbm90ZXMgZnJvbSBvbGQgY29tbWl0cyB0aGF0IGhhdmUKKyAgIHN1Y2Nlc3NmdWxseSBiZWVuIHJlYmFzZWQgc28gZmFyLiAgTm93IGl0IGRvIChiYWNrbWVyZ2UgZWY4OGFkMikuCisKKyAqICJnaXR3ZWIiIHRyaWVkIHRvIHNob3cgYSB3cm9uZyBmZWVkIGxvZ28gd2hlbiBub25lIHdhcyBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOWMzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLnR4dApAQCAtMCwwICsxLDc2IEBACitHaXQgdjEuNy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogZ2l0LWd1aSwgbm93IGF0IHZlcnNpb24gMC4xMy4wLCBnb3QgdmFyaW91cyB1cGRhdGVzIGFuZCBhIG5ldworICAgbWFpbnRhaW5lciwgUGF0IFRob3l0cy4KKworICogR2l0d2ViIGFsbG93cyBpdHMgY29uZmlndXJhdGlvbiB0byBjaGFuZ2UgcGVyIGVhY2ggcmVxdWVzdDsgaXQgdXNlZCB0bworICAgcmVhZCB0aGUgY29uZmlndXJhdGlvbiBvbmNlIHVwb24gc3RhcnR1cC4KKworICogV2hlbiBnaXQgZmluZHMgYSBjb3JydXB0IG9iamVjdCwgaXQgbm93IHJlcG9ydHMgdGhlIGZpbGUgdGhhdCBjb250YWlucworICAgaXQuCisKKyAqICJnaXQgY2hlY2tvdXQgLUIgPGl0PiIgaXMgYSBzaG9ydGVyIHdheSB0byBzYXkgImdpdCBicmFuY2ggLWYgPGl0PiIKKyAgIGZvbGxvd2VkIGJ5ICJnaXQgY2hlY2tvdXQgPGl0PiIuCisKKyAqIFdoZW4gImdpdCBjaGVja291dCIgb3IgImdpdCBtZXJnZSIgcmVmdXNlIHRvIHByb2NlZWQgaW4gb3JkZXIgdG8KKyAgIHByb3RlY3QgbG9jYWwgbW9kaWZpY2F0aW9uIHRvIHlvdXIgd29ya2luZyB0cmVlLCB0aGV5IHVzZWQgdG8gc3RvcAorICAgYWZ0ZXIgc2hvd2luZyBqdXN0IG9uZSBwYXRoIHRoYXQgbWlnaHQgYmUgbG9zdC4gIFRoZXkgbm93IHNob3cgYWxsLAorICAgaW4gYSBmb3JtYXQgdGhhdCBpcyBlYXNpZXIgdG8gcmVhZC4KKworICogImdpdCBjbGVhbiIgbGVhcm5lZCAiLWUiICgiLS1leGNsdWRlIikgb3B0aW9uLgorCisgKiBIdW5rIGhlYWRlcnMgcHJvZHVjZWQgZm9yIEMjIGZpbGVzIGJ5ICJnaXQgZGlmZiIgYW5kIGZyaWVuZHMgc2hvdyBtb3JlCisgICByZWxldmFudCBjb250ZXh0IHRoYW4gYmVmb3JlLgorCisgKiBkaWZmLmlnbm9yZXN1Ym1vZHVsZXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBzcXVlbGNoIHRoZQorICAgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyByZXBvcnRlZCB3aGVuIHJ1bm5pbmcgY29tbWFuZHMgKGUuZy4gImRpZmYiLAorICAgInN0YXR1cyIsIGV0Yy4pIGF0IHRoZSBzdXBlcnByb2plY3QgbGV2ZWwuCisKKyAqIGh0dHAudXNlcmFnZW50IGNvbmZpZ3VyYXRpb24gY2FuIGJlIHVzZWQgdG8gbGllIHdobyB5b3UgYXJlIHRvIHlvdXIKKyAgIHJlc3RyaWN0aXZlIGZpcmV3YWxsLgorCisgKiAiZ2l0IHJlYmFzZSAtLXN0cmF0ZWd5IDxzPiIgbGVhcm5lZCAiLVgiIG9wdGlvbiB0byBwYXNzIGV4dHJhIG9wdGlvbnMKKyAgIHRoYXQgYXJlIHVuZGVyc3Rvb2QgYnkgdGhlIGNob3NlbiBtZXJnZSBzdHJhdGVneS4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgImV4ZWMiIHRoYXQgeW91IGNhbiBpbnNlcnQgaW50byB0aGUgaW5zbiBzaGVldAorICAgdG8gcnVuIGEgY29tbWFuZCBiZXR3ZWVuIGl0cyBzdGVwcy4KKworICogImdpdCByZWJhc2UiIGJldHdlZW4gYnJhbmNoZXMgdGhhdCBoYXZlIG1hbnkgYmluYXJ5IGNoYW5nZXMgdGhhdCBkbworICAgbm90IGNvbmZsaWN0IHNob3VsZCBiZSBmYXN0ZXIuCisKKyAqICJnaXQgcmViYXNlIC1pIiBwZWVrcyBpbnRvIHJlYmFzZS5hdXRvc3F1YXNoIGNvbmZpZ3VyYXRpb24gYW5kIGFjdHMgYXMKKyAgIGlmIHlvdSBnYXZlIC0tYXV0b3NxdWFzaCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjcuMi5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiICh3aGljaCBpcyB0aGUgZGVmYXVsdCkgZGlkIG5vdCBoYW5kbGUgY2FzZXMKKyAgIHdoZXJlIGEgZGlyZWN0b3J5IGJlY29tZXMgYSBmaWxlIChvciB2aWNlIHZlcnNhKSB2ZXJ5IHdlbGwuCisKKyAqICJnaXQgZmV0Y2giIGFuZCBmcmllbmRzIHdlcmUgYWNjaWRlbnRhbGx5IGJyb2tlbiBmb3IgdXJsIHdpdGggIisiIGluCisgICBpdHMgcGF0aCwgZS5nLiAiZ2l0Oi8vZ2l0Lmdub21lLm9yZy9ndGsrIi4KKworICogImdpdCBmZXRjaCAkdXJsIiAoaS5lLiB3aXRob3V0IHJlZnNwZWNzKSB3YXMgYnJva2VuIGZvciBxdWl0ZSBzb21lCisgICB0aW1lLCBpZiB0aGUgY3VycmVudCBicmFuY2ggaGFwcGVuIHRvIGJlIHRyYWNraW5nIHNvbWUgcmVtb3RlLgorCisgKiAiZ2l0IGxzLXRyZWUgZGlyIGRpcmdhcmJhZ2UiLCB3aGVuICJkaXIiIHdhcyBhIGRpcmVjdG9yeSwKKyAgIGluY29ycmVjdGx5IHJlY3Vyc2VkIGludG8gImRpciIuCisKKyAqICJnaXQgbm90ZSByZW1vdmUiIGNyZWF0ZWQgdW5uZWNlc3NhcnkgZXh0cmEgY29tbWl0IHdoZW4gbmFtZWQgb2JqZWN0CisgICBkaWQgbm90IGhhdmUgYW55IG5vdGUgdG8gYmVnaW4gd2l0aC4KKworICogImdpdCByZWJhc2UiIGRpZCBub3Qgd29yayB3ZWxsIGlmIHlvdSBoYWQgZGlmZi5ub3ByZWZpeCBjb25maWd1cmVkLgorCisgKiAiZ2l0IC1jIGZvbz1iYXIgc3ViY21kIiBkaWQgbm90IHdvcmsgd2VsbCBmb3Igc3ViY21kIHRoYXQgaXMgbm90CisgICBpbXBsZW1lbnRlZCBhcyBhIGJ1aWx0LWluIGNvbW1hbmQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTkyM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4xLnR4dApAQCAtMCwwICsxLDI3IEBACitHaXQgdjEuNy40LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogT24gV2luZG93cyBwbGF0Zm9ybSwgdGhlIGNvZGVwYXRoIHRvIHNwYXduIGEgbmV3IGNoaWxkIHByb2Nlc3MgZm9yZ290CisgICB0byBmaXJzdCBmbHVzaCB0aGUgb3V0cHV0IGJ1ZmZlci4KKworICogImdpdCBidW5kbGUiIGRpZCBub3QgdXNlIE9GU19ERUxUQSBlbmNvZGluZywgbWFraW5nIGl0cyBvdXRwdXQgYSBmZXcKKyAgIHBlci1jZW50IGxhcmdlciB0aGFuIG5lY2Vzc2FyaWx5LgorCisgKiBUaGUgb3B0aW9uIHRvIHRlbGwgImdpdCBjbG9uZSIgdG8gcmVjdXJzZSBpbnRvIHRoZSBzdWJtb2R1bGVzIHdhcworICAgbWlzc3BlbGxlZCB3aXRoIGFuIHVuZGVyc2NvcmUgIi0tcmVjdXJzZV9zdWJtb2R1bGVzIi4KKworICogImdpdCBkaWZmIC0tY2FjaGVkIEhFQUQiIGJlZm9yZSB0aGUgZmlyc3QgY29tbWl0IGRvZXMgd2hhdCBhbiBlbmQgdXNlcgorICAgd291bGQgZXhwZWN0IChuYW1lbHksIHNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQgd2l0aG91dCBmdXJ0aGVyICJnaXQKKyAgIGFkZCIpLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBkaWRuJ3QgYWNjZXB0IHRoZSBjb21tYW5kIHRvIGFzayBmb3IgIm5vdGVzIiBmZWF0dXJlCisgICB0byBiZSBwcmVzZW50IGluIGl0cyBpbnB1dCBzdHJlYW0sIGV2ZW4gdGhvdWdoIGl0IHdhcyBjYXBhYmxlIG9mIHRoZQorICAgZmVhdHVyZS4KKworICogImdpdCBmc2NrIiBnYXZlIHVwIHNjYW5uaW5nIGxvb3NlIG9iamVjdCBmaWxlcyBpbiBkaXJlY3RvcmllcyB3aXRoCisgICBnYXJiYWdlIGZpbGVzLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNGNlMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjIudHh0CkBAIC0wLDAgKzEsNTggQEAKK0dpdCB2MS43LjQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjQuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogTWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgdG8gbWF0Y2ggImdpdCBjbWQgLWgiIG91dHB1dCBhbmQgdGhlCisgICBnaXQtY21kIG1hbnVhbCBwYWdlLgorCisgKiBXZSB1c2VkIHRvIGtlZXAgb25lIGZpbGUgZGVzY3JpcHRvciBvcGVuIGZvciBlYWNoIGFuZCBldmVyeSBwYWNrZmlsZQorICAgdGhhdCB3ZSBoYXZlIGEgbW1hcCB3aW5kb3cgb24gaXQgKHJlYWQ6ICJpbiB1c2UiKSwgZXZlbiB3aGVuIGZvciB2ZXJ5CisgICB0aW55IHBhY2tmaWxlcy4gIFdlIG5vdyBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGVhcmx5IHdoZW4gdGhlIGVudGlyZQorICAgcGFja2ZpbGUgZml0cyBpbnNpZGUgb25lIG1tYXAgd2luZG93LgorCisgKiAiZ2l0IGJpc2VjdCB2aXN1YWxpemUiIHRyaWVkIHRvIHJ1biAiZ2l0ayIgaW4gd2luZG93aW5nCisgICBlbnZpcm9ubWVudHMgZXZlbiB3aGVuICJnaXRrIiBpcyBub3QgaW5zdGFsbGVkLCByZXN1bHRpbmcgaW4gYQorICAgc3RyYW5nZSBlcnJvciBtZXNzYWdlLgorCisgKiAiZ2l0IGNsb25lIC9uby9zdWNoL3BhdGgiIGRpZCBub3QgZmFpbCBjb3JyZWN0bHkuCisKKyAqICJnaXQgY29tbWl0IiBkaWQgbm90IGNvcnJlY3RseSBlcnJvciBvdXQgd2hlbiB0aGUgdXNlciBhc2tlZCB0byB1c2UgYQorICAgbm9uIGV4aXN0ZW50IGZpbGUgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlLgorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IC1CIiByYW4gb24gYmluYXJ5IGZpbGVzIGNvdW50ZWQgdGhlIGNoYW5nZXMgaW4gbGluZXMsCisgICB3aGljaCB3YXMgbm9uc2Vuc2ljYWwuCisKKyAqICJnaXQgZGlmZiAtTSIgb3Bwb3J0dW5pc3RpY2FsbHkgZGV0ZWN0ZWQgY29waWVzLCB3aGljaCB3YXMgbm90CisgICBuZWNlc3NhcmlseSBhIGdvb2QgdGhpbmcsIGVzcGVjaWFsbHkgd2hlbiBpdCBpcyBpbnRlcm5hbGx5IHJ1biBieQorICAgcmVjdXJzaXZlIG1lcmdlLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBkaWRuJ3QgdGVsbCAoZyl2aW1kaWZmIHRoYXQgdGhlIGZpbGVzIGl0IGlzIHJlYWRpbmcgYXJlCisgICB0byBiZSBvcGVuZWQgcmVhZC1vbmx5LgorCisgKiAiZ2l0IG1lcmdlIiBkaWRuJ3QgcGF5IGF0dGVudGlvbiB0byBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vaywgZXZlbgorICAgdGhvdWdoIGlmIGEgbWVyZ2UgaXMgY29uZmxpY3RlZCBhbmQgbWFudWFsbHkgcmVzb2x2ZWQsIHRoZSBzdWJzZXF1ZW50CisgICAiZ2l0IGNvbW1pdCIgd291bGQgaGF2ZSB0cmlnZ2VyZWQgdGhlIGhvb2ssIHdoaWNoIHdhcyBpbmNvbnNpc3RlbnQuCisKKyAqICJnaXQgcGF0Y2gtaWQiIChhbmQgY29tbWFuZHMgbGlrZSAiZm9ybWF0LXBhdGNoIC0taWdub3JlLWluLXVwc3RyZWFtIgorICAgdGhhdCB1c2UgaXQgYXMgdGhlaXIgaW50ZXJuYWwgbG9naWMpIGhhbmRsZWQgY2hhbmdlcyB0byBmaWxlcyB0aGF0IGVuZAorICAgd2l0aCBpbmNvbXBsZXRlIGxpbmVzIGluY29ycmVjdGx5LgorCisgKiBUaGUgb2ZmaWNpYWwgdmFsdWUgdG8gdGVsbCAiZ2l0IHB1c2giIHRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGJhY2sKKyAgIHRvIHVwZGF0ZSB0aGUgdXBzdHJlYW0gYnJhbmNoIGl0IGZvcmtlZCBmcm9tIGlzIG5vdyBjYWxsZWQgInVwc3RyZWFtIi4KKyAgIFRoZSBvbGQgbmFtZSAidHJhY2tpbmciIGlzIGFuZCB3aWxsIGJlIHN1cHBvcnRlZC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiB1c2VkIHRvIGhvbm9yIHRoZSAtLW1lcmdlLy0tcmViYXNlIG9wdGlvbiAob3IKKyAgIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMpIGV2ZW4gZm9yIGEgbmV3bHkgY2xvbmVkCisgICBzdWJwcm9qZWN0LCB3aGljaCBtYWRlIG5vIHNlbnNlIChzby9zdWJtb2R1bGUtbm8tdXBkYXRlLWZpcnN0LXRpbWUpLgorCisgKiBnaXR3ZWIncyAiaGlnaGxpZ2h0IiBpbnRlcmZhY2UgbWlzaGFuZGxlZCB0YWJzLgorCisgKiBnaXR3ZWIgZGlkbid0IHVuZGVyc3RhbmQgdGltZXpvbmVzIHdpdGggR01UIG9mZnNldCB0aGF0IGlzIG5vdAorICAgbXVsdGlwbGUgb2YgYSB3aG9sZSBob3VyLgorCisgKiBnaXR3ZWIgaGFkIGEgZmV3IGZvcndhcmQtaW5jb21wYXRpYmxlIHN5bnRhY3RpYyBjb25zdHJ1Y3RzIGFuZAorICAgYWxzbyB1c2VkIGluY29ycmVjdCB2YXJpYWJsZSB3aGVuIHNob3dpbmcgdGhlIGZpbGUgbW9kZSBpbiBhIGRpZmYuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhM2Q1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMy50eHQKQEAgLTAsMCArMSwzMiBAQAorR2l0IHYxLjcuNC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFwcGx5IiB1c2VkIHRvIGNvbmZ1c2UgbGluZXMgdXBkYXRlZCBieSBwcmV2aW91cyBodW5rcyBhcyBsaW5lcworICAgdGhhdCBleGlzdGVkIGJlZm9yZSB3aGVuIGFwcGx5aW5nIGEgaHVuaywgY29udHJpYnV0aW5nIG1pc2FwcGxpY2F0aW9uCisgICBvZiBwYXRjaGVzIHdpdGggb2Zmc2V0cy4KKworICogImdpdCBicmFuY2ggLS10cmFjayIgKGFuZCAiZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLS1icmFuY2giKSB1c2VkIHRvCisgICBhbGxvdyBzZXR0aW5nIHVwIGEgcmFuZG9tIG5vbi1icmFuY2ggdGhhdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGZvbGxvdworICAgYXMgdGhlICJ1cHN0cmVhbSIuICBUaGUgY29tbWFuZCBjb3JyZWN0bHkgZGlhZ25vc2VzIGl0IGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IGNoZWNrb3V0ICRvdGhlcl9icmFuY2giIHNpbGVudGx5IHJlbW92ZWQgdW50cmFja2VkIHN5bWJvbGljIGxpbmtzCisgICBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgYXJlIGluIHRoZSB3YXkgaW4gb3JkZXIgdG8gY2hlY2sgb3V0IHBhdGhzCisgICB1bmRlciBpdCBmcm9tIHRoZSBuYW1lZCBicmFuY2guCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IGJhaWwgb3V0IGltbWVkaWF0ZWx5IHdoZW4gdGhlIGN2cyBzZXJ2ZXIgY2Fubm90CisgICBiZSByZWFjaGVkLCBzcGV3aW5nIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzIHRoYXQgY29tcGxhaW4gYWJvdXQgdGhlCisgICBzZXJ2ZXIgcmVzcG9uc2UgdGhhdCBpdCBuZXZlciBnb3QuCisKKyAqICJnaXQgZGlmZiAtLXF1aWV0IiBkaWQgbm90IHdvcmsgdmVyeSB3ZWxsIHdpdGggdGhlICItLWRpZmYtZmlsdGVyIgorICAgb3B0aW9uLgorCisgKiAiZ2l0IGdyZXAgLW4iIGxhY2tlZCBhIGxvbmctaGFuZCBzeW5vbnltIC0tbGluZS1udW1iZXIuCisKKyAqICJnaXQgc3Rhc2ggYXBwbHkiIHJlcG9ydGVkIHRoZSByZXN1bHQgb2YgaXRzIG9wZXJhdGlvbiBieSBydW5uaW5nCisgICAiZ2l0IHN0YXR1cyIgZnJvbSB0aGUgdG9wLWxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWU7IGl0IHNob3VsZCAoYW5kCisgICBub3cgZG9lcykgcnVuIGl0IGZyb20gdGhlIHVzZXIncyB3b3JraW5nIGRpcmVjdG9yeS4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjA2ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC40LnR4dApAQCAtMCwwICsxLDM1IEBACitHaXQgdjEuNy40LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy40LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENvbXBpbGF0aW9uIG9mIHNoYTFfZmlsZS5jIG9uIEJTRCBwbGF0Zm9ybXMgd2VyZSBicm9rZW4gZHVlIHRvIG91cgorICAgcmVjZW50IHVzZSBvZiBnZXRybGltaXQoKSB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3Jlc291cmNlLmg+LgorCisgKiAiZ2l0IGNvbmZpZyIgZGlkIG5vdCBkaWFnbm9zZSBpbmNvcnJlY3QgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3Qgd3JhcCBhIGxvbmcgc3ViamVjdCBsaW5lIHRoYXQgcmVzdWx0ZWQgZnJvbQorICAgcmZjMjA0NyBlbmNvZGluZy4KKworICogImdpdCBpbnN0YXdlYiIgc2hvdWxkIHdvcmsgYmV0dGVyIGFnYWluIHdpdGggcGxhY2t1cC4KKworICogImdpdCBsb2cgLS1tYXgtY291bnQ9NCAtU2Zvb2JhciIgbm93IHNob3dzIDQgY29tbWl0cyB0aGF0IGNoYW5nZXMgdGhlCisgICBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2Ygc3RyaW5nICJmb29iYXIiOyBpdCB1c2VkIHRvIHNjYW4gb25seSBmb3IgNAorICAgY29tbWl0cyBhbmQgdGhlbiBlbWl0dGVkIG9ubHkgbWF0Y2hpbmcgb25lcy4KKworICogImdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLS1ib3VuZGFyeSAkY14uLiRjIiBzZWdmYXVsdGVkIG9uIGEgbWVyZ2UuCisKKyAqICJnaXQgcHVsbCIgaW50byBhbiBlbXB0eSBicmFuY2ggc2hvdWxkIGhhdmUgYmVoYXZlZCBhcyBpZgorICAgZmFzdC1mb3J3YXJkaW5nIGZyb20gZW1wdGluZXNzIHRvIHRoZSB2ZXJzaW9uIGJlaW5nIHB1bGxlZCwgd2l0aAorICAgdGhlIHVzdWFsIHByb3RlY3Rpb24gYWdhaW5zdCBvdmVyd3JpdGluZyB1bnRyYWNrZWQgZmlsZXMuCisKKyAqICJnaXQgc3VibW9kdWxlIiB0aGF0IGlzIHJ1biB3aGlsZSBhIG1lcmdlIGluIHRoZSBzdXBlcnByb2plY3QgaXMgaW4KKyAgIGNvbmZsaWN0ZWQgc3RhdGUgdHJpZWQgdG8gcHJvY2VzcyBlYWNoIGNvbmZsaWN0ZWQgc3VibW9kdWxlIHVwIHRvCisgICB0aHJlZSB0aW1lcy4KKworICogImdpdCBzdGF0dXMiIHNwZW50IGFsbCB0aGUgZWZmb3J0IHRvIG5vdGljZSByYWNpbHktY2xlYW4gaW5kZXggZW50cmllcworICAgYnV0IGRpZG4ndCB1cGRhdGUgdGhlIGluZGV4IGZpbGUgdG8gaGVscCBsYXRlciBvcGVyYXRpb25zIGdvIGZhc3RlciBpbgorICAgc29tZSBjYXNlcy4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2EwZWViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC41LnR4dApAQCAtMCwwICsxLDQgQEAKK0dpdCB2MS43LjQuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvbnRhaW5zIG9ubHkgbWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcyBhY2N1bXVsYXRlZCBzaW5jZSAxLjcuNC40LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWJjYTczCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC50eHQKQEAgLTAsMCArMSwxNTYgQEAKK0dpdCB2MS43LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBNYWtlZmlsZSBub3cgYXNzdW1lcyBieSBkZWZhdWx0IGFzY2lpZG9jIDggYW5kCisgICBkb2Nib29rLXhzbCA+PSAxLjczLiBJZiB5b3UgaGF2ZSBvbGRlciB2ZXJzaW9ucywgeW91IGNhbiBzZXQKKyAgIEFTQ0lJRE9DNyBhbmQgQVNDSUlET0NfUk9GRiwgcmVzcGVjdGl2ZWx5LgorCisgKiBUaGUgb3B0aW9uIHBhcnNlcnMgb2YgdmFyaW91cyBjb21tYW5kcyB0aGF0IGNyZWF0ZSBuZXcgYnJhbmNoZXMgKG9yCisgICByZW5hbWUgZXhpc3Rpbmcgb25lcyB0byBhIG5ldyBuYW1lKSB3ZXJlIHRvbyBsb29zZSBhbmQgdXNlcnMgd2VyZQorICAgYWxsb3dlZCB0byBnaXZlIGEgYnJhbmNoIGEgbmFtZSB0aGF0IGJlZ2lucyB3aXRoIGEgZGFzaCBieSBjcmVhdGl2ZQorICAgYWJ1c2Ugb2YgdGhlaXIgY29tbWFuZCBsaW5lIG9wdGlvbnMsIHdoaWNoIG9ubHkgbGVkIHRvIGJ1cm5pbmcKKyAgIHRoZW1zZWx2ZXMuICBUaGUgbmFtZSBvZiBhIGJyYW5jaCBjYW5ub3QgYmVnaW4gd2l0aCBhIGRhc2ggbm93LgorCisgKiBTeXN0ZW0td2lkZSBmYWxsYmFjayBkZWZhdWx0IGF0dHJpYnV0ZXMgY2FuIGJlIHN0b3JlZCBpbgorICAgL2V0Yy9naXRhdHRyaWJ1dGVzOyB0aGUgY29yZS5hdHRyaWJ1dGVzZmlsZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbgorICAgYmUgdXNlZCB0byBjdXN0b21pemUgdGhlIHBhdGggdG8gdGhpcyBmaWxlLgorCisgKiBUaGUgdGhyZWFkIHN0cnVjdHVyZSBnZW5lcmF0ZWQgYnkgImdpdCBzZW5kLWVtYWlsIiBoYXMgY2hhbmdlZAorICAgc2xpZ2h0bHkuICBTZXR0aW5nIHRoZSBjb3ZlciBsZXR0ZXIgb2YgdGhlIGxhdGVzdCBzZXJpZXMgYXMgYSByZXBseQorICAgdG8gdGhlIGNvdmVyIGxldHRlciBvZiB0aGUgcHJldmlvdXMgc2VyaWVzIHdpdGggLS1pbi1yZXBseS10byB1c2VkCisgICB0byBtYWtlIHRoZSBuZXcgY292ZXIgbGV0dGVyIGFuZCBhbGwgdGhlIHBhdGNoZXMgcmVwbGllcyB0byB0aGUKKyAgIGNvdmVyIGxldHRlciBvZiB0aGUgcHJldmlvdXMgc2VyaWVzOyB0aGlzIGhhcyBiZWVuIGNoYW5nZWQgdG8gbWFrZQorICAgdGhlIHBhdGNoZXMgaW4gdGhlIG5ldyBzZXJpZXMgcmVwbGllcyB0byB0aGUgbmV3IGNvdmVyIGxldHRlci4KKworICogVGhlIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgaW4gY29udHJpYi8gaGFzIGJlZW4gYWRqdXN0ZWQgdG8gYmUgdXNhYmxlIHdpdGgKKyAgIEJhc2ggNCAob3B0aW9ucyB3aXRoICc9dmFsdWUnIGRpZG4ndCBjb21wbGV0ZSkuICBJdCBoYXMgYmVlbiBhbHNvIG1hZGUKKyAgIHVzYWJsZSB3aXRoIHpzaC4KKworICogRGlmZmVyZW50IHBhZ2VycyBjYW4gYmUgY2hvc2VuIGRlcGVuZGluZyBvbiB3aGljaCBzdWJjb21tYW5kIGlzCisgICBiZWluZyBydW4gdW5kZXIgdGhlIHBhZ2VyLCB1c2luZyB0aGUgInBhZ2VyLjxzdWJjb21tYW5kPiIgdmFyaWFibGUuCisKKyAqIFRoZSBoYXJkY29kZWQgdGFiLXdpZHRoIG9mIDggdGhhdCBpcyB1c2VkIGluIHdoaXRlc3BhY2UgYnJlYWthZ2UgY2hlY2tzIGlzIG5vdworICAgY29uZmlndXJhYmxlIHZpYSB0aGUgYXR0cmlidXRlcyBtZWNoYW5pc20uCisKKyAqIFN1cHBvcnQgb2YgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcyAoaS5lLiAiY29yZS5pZ25vcmVjYXNlIikgaGFzCisgICBiZWVuIGltcHJvdmVkLiAgRm9yIGV4YW1wbGUsIHRoZSBnaXRpZ25vcmUgbWVjaGFuaXNtIGRpZG4ndCBwYXkgYXR0ZW50aW9uCisgICB0byBjYXNlIGluc2Vuc2l0aXZpdHkuCisKKyAqIFRoZSA8dHJlZT46PHBhdGg+IHN5bnRheCBmb3IgbmFtaW5nIGEgYmxvYiBpbiBhIHRyZWUsIGFuZCB0aGUgOjxwYXRoPgorICAgc3ludGF4IGZvciBuYW1pbmcgYSBibG9iIGluIHRoZSBpbmRleCAoZS5nLiAibWFzdGVyOk1ha2VmaWxlIiwKKyAgICI6aGVsbG8uYyIpIGhhdmUgYmVlbiBleHRlbmRlZC4gIFlvdSBjYW4gc3RhcnQgPHBhdGg+IHdpdGggIi4vIiB0bworICAgaW1wbGljaXRseSBoYXZlIHRoZSAoc3ViKWRpcmVjdG9yeSB5b3UgYXJlIGluIHByZWZpeGVkIHRvIHRoZQorICAgbG9va3VwLiAgU2ltaWxhcmx5LCAiOi4uL01ha2VmaWxlIiBmcm9tIGEgc3ViZGlyZWN0b3J5IHdvdWxkIG1lYW4KKyAgICJ0aGUgTWFrZWZpbGUgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkgaW4gdGhlIGluZGV4Ii4KKworICogImdpdCBibGFtZSIgbGVhcm5lZCB0aGUgLS1zaG93LWVtYWlsIG9wdGlvbiB0byBkaXNwbGF5IHRoZSBlLW1haWwKKyAgIGFkZHJlc3NlcyBpbnN0ZWFkIG9mIHRoZSBuYW1lcyBvZiBhdXRob3JzLgorCisgKiAiZ2l0IGNvbW1pdCIgbGVhcm5lZCB0aGUgLS1maXh1cCBhbmQgLS1zcXVhc2ggb3B0aW9ucyB0byBoZWxwIGxhdGVyIGludm9jYXRpb24KKyAgIG9mIGludGVyYWN0aXZlIHJlYmFzZS4KKworICogQ29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gImdpdCBjdnNpbXBvcnQiIHdob3NlIG5hbWVzIGFyZSBpbiBjYXBpdGFsCisgICBsZXR0ZXJzICgtQSwgLU0sIC1SIGFuZCAtUykgY2FuIG5vdyBiZSBzcGVjaWZpZWQgYXMgdGhlIGRlZmF1bHQgaW4KKyAgIHRoZSAuZ2l0L2NvbmZpZyBmaWxlIGJ5IHRoZWlyIGxvbmdlciBuYW1lcyAoY3ZzaW1wb3J0LmF1dGhvcnNGaWxlLAorICAgY3ZzaW1wb3J0Lm1lcmdlUmVnZXgsIGN2c2ltcG9ydC50cmFja1JldmlzaW9ucywgY3ZzaW1wb3J0Lmlnbm9yZVBhdGhzKS4KKworICogImdpdCBkYWVtb24iIGNhbiBiZSBidWlsdCBpbiB0aGUgTWluR1cgZW52aXJvbm1lbnQuCisKKyAqICJnaXQgZGFlbW9uIiBjYW4gdGFrZSBtb3JlIHRoYW4gb25lIC0tbGlzdGVuIG9wdGlvbiB0byBsaXN0ZW4gdG8KKyAgIG11bHRpcGxlIGFkZHJlc3Nlcy4KKworICogImdpdCBkZXNjcmliZSAtLWV4YWN0LW1hdGNoIiB3YXMgb3B0aW1pemVkIG5vdCB0byByZWFkIGNvbW1pdAorICAgb2JqZWN0cyB1bm5lY2Vzc2FyaWx5LgorCisgKiAiZ2l0IGRpZmYiIGFuZCAiZ2l0IGdyZXAiIGxlYXJuZWQgd2hhdCBmdW5jdGlvbnMgYW5kIHN1YnJvdXRpbmVzCisgICBpbiBGb3J0cmFuLCBQYXNjYWwgYW5kIFBlcmwgbG9vayBsaWtlLgorCisgKiAiZ2l0IGZldGNoIiBsZWFybmVkIHRoZSAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIG9wdGlvbi4KKworICogImdpdCBtZXJnZXRvb2wiIHRlbGxzIHZpbS9ndmltIHRvIHNob3cgYSB0aHJlZS13YXkgZGlmZiBieSBkZWZhdWx0CisgICAodXNlIHZpbWRpZmYyL2d2aW1kaWZmMiBhcyB0aGUgdG9vbCBuYW1lIGZvciBvbGQgYmVoYXZpb3IpLgorCisgKiAiZ2l0IGxvZyAtRzxwYXR0ZXJuPiIgbGltaXRzIHRoZSBvdXRwdXQgdG8gY29tbWl0cyB3aG9zZSBjaGFuZ2UgaGFzCisgICBhZGRlZCBvciBkZWxldGVkIGxpbmVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4uCisKKyAqICJnaXQgcmVhZC10cmVlIiB3aXRoIG5vIGFyZ3VtZW50IGFzIGEgd2F5IHRvIGVtcHR5IHRoZSBpbmRleCBpcworICAgZGVwcmVjYXRlZDsgd2UgbWlnaHQgd2FudCB0byByZW1vdmUgaXQgaW4gdGhlIGZ1dHVyZS4gIFVzZXJzIGNhbgorICAgdXNlIHRoZSBuZXcgLS1lbXB0eSBvcHRpb24gdG8gYmUgbW9yZSBleHBsaWNpdCBpbnN0ZWFkLgorCisgKiAiZ2l0IHJlcGFjayAtZiIgZG9lcyBub3Qgc3BlbmQgY3ljbGVzIHRvIHJlY29tcHJlc3Mgb2JqZWN0cyBpbiB0aGUKKyAgIG5vbi1kZWx0YSByZXByZXNlbnRhdGlvbiBhbnltb3JlICh1c2UgLUYgaWYgeW91IHJlYWxseSBtZWFuIGl0CisgICBlLmcuIGFmdGVyIHlvdSBjaGFuZ2VkIHRoZSBjb3JlLmNvbXByZXNzaW9uIHZhcmlhYmxlIHNldHRpbmcpLgorCisgKiAiZ2l0IG1lcmdlIC0tbG9nIiB1c2VkIHRvIGxpbWl0IHRoZSByZXN1bHRpbmcgbWVyZ2UgbG9nIHRvIDIwCisgICBlbnRyaWVzOyB0aGlzIGlzIG5vdyBjdXN0b21pemFibGUgYnkgZ2l2aW5nIGUuZy4gIi0tbG9nPTQ3Ii4KKworICogImdpdCBtZXJnZSIgbWF5IHdvcmsgYmV0dGVyIHdoZW4gYWxsIGZpbGVzIHdlcmUgbW92ZWQgb3V0IG9mIGEKKyAgIGRpcmVjdG9yeSBpbiBvbmUgYnJhbmNoIHdoaWxlIGEgbmV3IGZpbGUgaXMgY3JlYXRlZCBpbiBwbGFjZSBvZiB0aGF0CisgICBkaXJlY3RvcnkgaW4gdGhlIG90aGVyIGJyYW5jaC4KKworICogImdpdCBtZXJnZSIgbGVhcm5lZCB0aGUgIi0tYWJvcnQiIG9wdGlvbiwgc3lub255bW91cyB0bworICAgImdpdCByZXNldCAtLW1lcmdlIiB3aGVuIGEgbWVyZ2UgaXMgaW4gcHJvZ3Jlc3MuCisKKyAqICJnaXQgbm90ZXMiIGxlYXJuZWQgdGhlICJtZXJnZSIgc3ViY29tbWFuZCB0byBtZXJnZSBub3RlcyByZWZzLgorICAgSW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgbWFudWFsIGNvbmZsaWN0IHJlc29sdXRpb24sIHRoZXJlIGFyZQorICAgYWxzbyBzZXZlcmFsIG5vdGVzIG1lcmdlIHN0cmF0ZWdpZXMgZm9yIGF1dG9tYXRpY2FsbHkgcmVzb2x2aW5nCisgICBub3RlcyBtZXJnZSBjb25mbGljdHMuCisKKyAqICJnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCIgY2FuIHVzZSBTSEEtMSBvYmplY3QgbmFtZXMgdG8gbmFtZSB0aGUKKyAgIGNvbW1pdCB3aGljaCBpcyB0byBiZSBmaXhlZCB1cCAoZS5nLiAiZml4dXAhIGU4M2M1MTYzIikuCisKKyAqIFRoZSBkZWZhdWx0ICJyZWN1cnNpdmUiIG1lcmdlIHN0cmF0ZWd5IGxlYXJuZWQgdGhlIC0tcmVuYW1lLXRocmVzaG9sZAorICAgb3B0aW9uIHRvIGluZmx1ZW5jZSB0aGUgcmVuYW1lIGRldGVjdGlvbiwgc2ltaWxhciB0byB0aGUgLU0gb3B0aW9uCisgICBvZiAiZ2l0IGRpZmYiLiAgRnJvbSB0aGUgImdpdCBtZXJnZSIgZnJvbnRlbmQsIHRoZSAiLVg8c3RyYXRlZ3kgb3B0aW9uPiIKKyAgIGludGVyZmFjZSwgZS5nLiAiZ2l0IG1lcmdlIC1YcmVuYW1lLXRocmVzaG9sZD01MCUgLi4uIiwgY2FuIGJlIHVzZWQKKyAgIHRvIHRyaWdnZXIgdGhpcy4KKworICogVGhlICJyZWN1cnNpdmUiIHN0cmF0ZWd5IGFsc28gbGVhcm5lZCB0byBpZ25vcmUgdmFyaW91cyB3aGl0ZXNwYWNlCisgICBjaGFuZ2VzOyB0aGUgbW9zdCBub3RhYmxlIGlzIC1YaWdub3JlLXNwYWNlLWF0LWVvbC4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkICItLXRvLWNtZCIsIHNpbWlsYXIgdG8gIi0tY2MtY21kIiwgdG8gcmVhZAorICAgdGhlIHJlY2lwaWVudCBsaXN0IGZyb20gYSBjb21tYW5kIG91dHB1dC4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIHRvIHJlYWQgYW5kIHVzZSAiVG86IiBmcm9tIGl0cyBpbnB1dCBmaWxlcy4KKworICogeW91IGNhbiBleHRlbmQgImdpdCBzaGVsbCIsIHdoaWNoIGlzIG9mdGVuIHVzZWQgb24gYm94ZXMgdGhhdCBhbGxvdworICAgZ2l0LW9ubHkgbG9naW4gb3ZlciBzc2ggYXMgbG9naW4gc2hlbGwsIHdpdGggYSBjdXN0b20gc2V0IG9mCisgICBjb21tYW5kcy4KKworICogVGhlIGN1cnJlbnQgYnJhbmNoIG5hbWUgaW4gImdpdCBzdGF0dXMiIG91dHB1dCBjYW4gYmUgY29sb3JlZCBkaWZmZXJlbnRseQorICAgZnJvbSB0aGUgZ2VuZXJpYyBoZWFkZXIgY29sb3IgYnkgc2V0dGluZyB0aGUgImNvbG9yLnN0YXR1cy5icmFuY2giIHZhcmlhYmxlLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzeW5jIiB1cGRhdGVzIG1ldGFpbmZvcm1hdGlvbiBmb3IgYWxsIHN1Ym1vZHVsZXMsCisgICBub3QganVzdCB0aGUgb25lcyB0aGF0IGhhdmUgYmVlbiBjaGVja2VkIG91dC4KKworICogZ2l0d2ViIGNhbiB1c2UgYSBjdXN0b20gJ2hpZ2hsaWdodCcgY29tbWFuZCB3aXRoIGl0cyBjb25maWd1cmF0aW9uIGZpbGUuCisKKyAqIG90aGVyIGdpdHdlYiB1cGRhdGVzLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKworRml4ZXMgc2luY2UgdjEuNy4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB0aGUgdjEuNy4zLlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiAiZ2l0IGxvZyAtLWF1dGhvcj1tZSAtLWF1dGhvcj1oZXIiIGRpZCBub3QgZmluZCBjb21taXRzIHdyaXR0ZW4gYnkKKyAgIG1lIG9yIGJ5IGhlcjsgaW5zdGVhZCBpdCBsb29rZWQgZm9yIGNvbW1pdHMgd3JpdHRlbiBieSBtZSBhbmQgYnkKKyAgIGhlciwgd2hpY2ggaXMgaW1wb3NzaWJsZS4KKworICogImdpdCBwdXNoIC0tcHJvZ3Jlc3MiIHNob3dzIHByb2dyZXNzIGluZGljYXRvcnMgbm93LgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgc2hvd2VkIGEgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2Ugd2hlbiBnaXZlbiBhCisgICBicmFuY2ggbmFtZSB0aGF0IGRvZXMgbm90IGV4aXN0LgorCisgKiAiZ2l0IHJlcGFjayIgcGxhY2VzIGl0cyB0ZW1wb3JhcnkgcGFja3MgdW5kZXIgJEdJVF9PQkpFQ1RfRElSRUNUT1JZL3BhY2sKKyAgIGluc3RlYWQgb2YgJEdJVF9PQkpFQ1RfRElSRUNUT1JZLyB0byBhdm9pZCBjcm9zcyBkaXJlY3RvcnkgcmVuYW1lcy4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlIC0tb3RoZXItZmxhZ3MiIHBhc3NlcyBmbGFncyBkb3duCisgICB0byBpdHMgc3ViaW52b2NhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmViZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4xLnR4dApAQCAtMCwwICsxLDQ3IEBACitHaXQgdjEuNy41LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy41CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiBhbiBvYmplY3QgIiR0cmVlOiRwYXRoIiBkb2VzIG5vdCBleGlzdCwgaWYgJHBhdGggZG9lcyBleGlzdCBpbiB0aGUKKyAgIHN1YnRyZWUgb2YgJHRyZWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3ViZGlyZWN0b3J5IHRoZSB1c2VyIGlzIGluLAorICAgZ2l0IG5vdyBzdWdnZXN0cyB1c2luZyAiJHRyZWU6Li8kcGF0aCIgaW4gYWRkaXRpb24gdG8gdGhlIGFkdmljZSB0byB1c2UKKyAgIHRoZSBmdWxsIHBhdGggZnJvbSB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlLgorCisgKiBUaGUgIi0tZGF0ZT1yZWxhdGl2ZSIgb3V0cHV0IGZvcm1hdCB1c2VkIHRvIHNheSAiWCB5ZWFycywgMTIgbW9udGhzIgorICAgd2hlbiBpdCBzaG91bGQgaGF2ZSBzYWlkICJYKzEgeWVhcnMiLgorCisgKiBUaGUgc21hcnQtSFRUUCB0cmFuc2ZlciB3YXMgYnJva2VuIGluIDEuNy41IHdoZW4gdGhlIGNsaWVudCBuZWVkcworICAgdG8gaXNzdWUgYSBzbWFsbCBQT1NUICh3aGljaCB1c2VzIGNvbnRlbnQtbGVuZ3RoKSBhbmQgdGhlbiBhIGxhcmdlCisgICBQT1NUICh3aGljaCB1c2VzIGNodW5rZWQpIGJhY2sgdG8gYmFjay4KKworICogImdpdCBjbGVhbiIgdXNlZCB0byBmYWlsIG9uIGFuIGVtcHR5IGRpcmVjdG9yeSB0aGF0IGlzIG5vdCByZWFkYWJsZSwKKyAgIGV2ZW4gdGhvdWdoIHJtZGlyKDIpIGNvdWxkIHJlbW92ZSBzdWNoIGEgZGlyZWN0b3J5LiAgTm93IHdlIGF0dGVtcHQgaXQKKyAgIGFzIHRoZSBsYXN0IHJlc29ydC4KKworICogVGhlICItLWRpcnN0YXQiIG9wdGlvbiBvZiAiZGlmZiIgZmFtaWx5IG9mIGNvbW1hbmRzIHVzZWQgdG8gdG90YWxseQorICAgaWdub3JlIGEgY2hhbmdlIHRoYXQgb25seSByZWFycmFuZ2VkIGxpbmVzIHdpdGhpbiBhIGZpbGUuICBTdWNoIGEKKyAgIGNoYW5nZSBub3cgY291bnRzIGFzIGF0IGxlYXN0IGEgbWluaW11bSBidXQgbm9uIHplcm8gY2hhbmdlLgorCisgKiBUaGUgIi0tZGlyc3RhdCIgb3B0aW9uIG9mICJkaWZmIiBmYW1pbHkgb2YgY29tbWFuZHMgdXNlZCB0byB1c2UgdGhlCisgICBwYXRobmFtZSBpbiB0aGUgb3JpZ2luYWwsIGluc3RlYWQgb2YgdGhlIHBhdGhuYW1lIGluIHRoZSByZXN1bHQsCisgICB3aGVuIHJlbmFtZXMgYXJlIGludm9sdmVkLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0IiBkaWQgbm90IHRha2UgY29yZS5iaWdmaWxldGhyZWFzaG9sZCBpbnRvIGFjY291bnQKKyAgICh1bmxpa2UgZmFzdC1pbXBvcnQpOyBub3cgaXQgZG9lcy4KKworICogImdpdCByZWZsb2ciIGlnbm9yZWQgb3B0aW9ucyBsaWtlICItLWZvcm1hdD0uLiIgb24gdGhlIGNvbW1hbmQgbGluZS4KKworICogImdpdCBzdGFzaCBhcHBseSIgdXNlZCB0byByZWZ1c2UgdG8gd29yayBpZiB0aGVyZSB3YXMgYW55IGNoYW5nZSBpbgorICAgdGhlIHdvcmtpbmcgdHJlZSwgZXZlbiB3aGVuIHRoZSBjaGFuZ2UgZGlkIG5vdCBvdmVybGFwIHdpdGggdGhlIGNoYW5nZQorICAgdGhlIHN0YXNoIHJlY29yZGVkLgorCisgKiAiZ2l0IHN0YXNoIGFwcGx5IEB7OTk5OTl9IiB3YXMgbm90IGRpYWdub3NlZCBhcyBhbiBlcnJvciwgZXZlbiB3aGVuIHlvdQorICAgZGlkIG5vdCBoYXZlIHRoYXQgbWFueSBzdGFzaCBlbnRyaWVzLgorCisgKiBBbiBlcnJvciBtZXNzYWdlIGZyb20gImdpdCBzZW5kLWVtYWlsIiB0byBkaWFnbm9zZSBhIGJyb2tlbiBTTVRQCisgICBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gbGFja2VkIGEgc3BhY2UgYmV0d2VlbiAiaGVsbG89PHNtdHAtZG9tYWluPiIKKyAgIGFuZCAicG9ydD08c210cC1zZXJ2ZXItcG9ydD4iLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWViN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjIudHh0CkBAIC0wLDAgKzEsNTcgQEAKK0dpdCB2MS43LjUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcmVsZWFzZSBub3RlcyB0byAxLjcuNS4xIGZvcmdvdCB0byBtZW50aW9uOgorCisgKiAiZ2l0IHN0YXNoIC1wIC0tbm8ta2VlcC1pbmRleCIgYW5kICJnaXQgc3Rhc2ggLS1uby1rZWVwLWluZGV4IC1wIiBub3cKKyAgIG1lYW4gdGhlIHNhbWUgdGhpbmcuCisKKyAqICJnaXQgdXBsb2FkLXBhY2siIChoZW5jZSAiZ2l0IHB1c2giIG92ZXIgZ2l0IG5hdGl2ZSBwcm90b2NvbCkgaGFkIGEKKyAgIHN1YnRsZSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gYSBkZWFkbG9jay4KKworRml4ZXMgc2luY2UgdjEuNy41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYWRkIC1wIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gYSBodW5rIGlzIHNwbGl0IGFuZCB0aGVuCisgICBvbmUgb2YgdGhlbSB3YXMgZ2l2ZW4gdG8gdGhlIGVkaXRvci4KKworICogImdpdCBhZGQgLXUiIGRpZCBub3QgcmVzb2x2ZSBhIGNvbmZsaWN0IHdoZXJlIG91ciBoaXN0b3J5IGRlbGV0ZWQgYW5kCisgICB0aGVpciBoaXN0b3J5IG1vZGlmaWVkIHRoZSBzYW1lIGZpbGUsIGFuZCB0aGUgd29ya2luZyB0cmVlIHJlc29sdmVkIHRvCisgICBrZWVwIGEgZmlsZS4KKworICogImdpdCBjdnNpbXBvcnQiIGRpZCBub3Qga25vdyB0aGF0IENWU05UIHN0b3JlcyBpdHMgcGFzc3dvcmQgZmlsZSBpbiBhCisgICBsb2NhdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGUgdHJhZGl0aW9uYWwgQ1ZTLgorCisgKiAiZ2l0IGRpZmYtZmlsZXMiIGRpZCBub3Qgc2hvdyB0aGUgbW9kZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JraW5nCisgICB0cmVlIHNpZGUgb2YgYW4gdW5tZXJnZWQgcGF0aCBjb3JyZWN0bHkuCisKKyAqICJnaXQgZGlmZiAtTSAtLWNhY2hlZCIgdXNlZCB0byB1c2UgdW5tZXJnZWQgcGF0aCBhcyBhIHBvc3NpYmxlIHJlbmFtZQorICAgc291cmNlIGNhbmRpZGF0ZSwgd2hpY2ggbWFkZSBubyBzZW5zZS4KKworICogVGhlIG9wdGlvbiBuYW1lIHBhcnNlciBpbiAiZ2l0IGZhc3QtaW1wb3J0IiB1c2VkIHByZWZpeCBtYXRjaGVzIGZvcgorICAgc29tZSBvcHRpb25zIHdoZXJlIGl0IHNob3VsZG4ndCwgYW5kIGFjY2VwdGVkIG5vbi1leGlzdGVudCBvcHRpb25zLAorICAgZS5nLiAiLS1yZWxhdGl2ZS1tYXJrc21pdGgiIG9yICItLWZvcmNlcHMiLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgZGlkIG5vdCBxdW90ZSBSRkM4MjIgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZQorICAgZW1haWwgYWRkcmVzcyAoZS5nIEZyb206IEp1bmlvIEMuIEhhbWFubyA8amNoQGV4YW1wbGUuY29tPiwgbm90CisgICBGcm9tOiAiSnVuaW8gQy4gSGFtYW5vIiA8amNoQGV4YW1wbGUuY29tPikuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiB3aGVuIHJ1biB3aXRoICItLXF1aWV0IiBvcHRpb24gdXNlZCB0byBwcm9kdWNlIGEKKyAgIG5vbnNlbnNlIHJlc3VsdCB0aGF0IGNvbnNpc3RzIG9mIGFsdGVybmF0aW5nIGVtcHR5IG91dHB1dC4KKworICogSW4gImdpdCBtZXJnZSIsIHBlci1icmFuY2ggYnJhbmNoLjxuYW1lPi5tZXJnZW9wdGlvbnMgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGVzIGRpZCBub3Qgb3ZlcnJpZGUgdGhlIGZhbGxiYWNrIGRlZmF1bHQgbWVyZ2UuPG9wdGlvbj4KKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHN1Y2ggYXMgbWVyZ2UuZmYsIG1lcmdlLmxvZywgZXRjLgorCisgKiAiZ2l0IG1lcmdlLW9uZS1maWxlIiBkaWQgbm90IGhvbm9yIEdJVF9XT1JLX1RSRUUgc2V0dGluZ3Mgd2hlbgorICAgaGFuZGxpbmcgYSAiYm90aCBzaWRlcyBhZGRlZCwgZGlmZmVyZW50bHkiIGNvbmZsaWN0LgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZGlkIG5vdCBoYW5kbGUgY29uZmxpY3RlZCBzdWJtb3VkdWxlcyBncmFjZWZ1bGx5LgorCisgKiAiZ2l0LXA0IiAoaW4gY29udHJpYikgdXNlZCBhIHdyb25nIGJhc2UgaW1hZ2Ugd2hpbGUgbWVyZ2UgYSBmaWxlIHRoYXQKKyAgIHdhcyBhZGRlZCBvbiBib3RoIGJyYW5jaGVzIGRpZmZlcmVudGx5LgorCisgKiAiZ2l0IHJlYmFzZSAtaSAtcCIgZmFpbGVkIHRvIHByZXNlcnZlIHRoZSBoaXN0b3J5IHdoZW4gdGhlcmUgaXMgYQorICAgcmVkdW5kYW50IG1lcmdlIGNyZWF0ZWQgd2l0aCB0aGUgLS1uby1mZiBvcHRpb24uCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyNGVkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQKQEAgLTAsMCArMSwzMiBAQAorR2l0IHYxLjcuNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgYmFzaCBjb21wbGV0aW9uIHNjcmlwdHMgc2hvdWxkIGNvcnJlY3RseSB3b3JrIHVzaW5nIHpzaCdzIGJhc2gKKyAgIGNvbXBsZXRpb24gZW11bGF0aW9uIGxheWVyIG5vdy4KKworICogU2V0dGluZyAkKHByZWZpeCkgaW4gY29uZmlnLm1hayBkaWQgbm90IGFmZmVjdCB3aGVyZSBldGMvZ2l0Y29uZmlnCisgICBmaWxlIGlzIHJlYWQgZnJvbSwgZXZlbiB0aG91Z2ggcGFzc2luZyBpdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgb2YKKyAgICQoTUFLRSkgZGlkLgorCisgKiBUaGUgbG9naWMgdG8gaGFuZGxlICImIiAoZXhwYW5kIHRvIFVOSVggdXNlcm5hbWUpIGluIEdFQ09TIGZpZWxkCisgICBtaXNjb3VudGVkIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgaXQgZm9ybWF0dGVkLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIC1zIHJlc29sdmUiIGZhaWxlZCB0byBjaGVycnktcGljayBhIHJvb3QgY29tbWl0LgorCisgKiAiZ2l0IGRpZmYgLS13b3JkLWRpZmYiIG1pc2JlaGF2ZWQgd2hlbiBkaWZmLnN1cHByZXNzLWJsYW5rLWVtcHR5IHdhcworICAgaW4gZWZmZWN0LgorCisgKiAiZ2l0IGxvZyAtLXN0ZGluIHBhdGgiIHdpdGggYW4gaW5wdXQgdGhhdCBoYXMgYWRkaXRpb25hbCBwYXRoc3BlYworICAgdXNlZCB0byBjb3JydXB0IG1lbW9yeS4KKworICogImdpdCBzZW5kLXBhY2siIChoZW5jZSAiZ2l0IHB1c2giKSBvdmVyIHNtYXJ0LUhUVFAgcHJvdG9jb2wgY291bGQKKyAgIGRlYWRsb2NrIHdoZW4gdGhlIGNsaWVudCBzaWRlIHBhY2stb2JqZWN0IGRpZWQgZWFybHkuCisKKyAqIENvbXByZXNzZWQgdGFyYmFsbCBnaXR3ZWIgZ2VuZXJhdGVzIHVzZWQgdG8gYmUgbWFkZSB3aXRoIHRoZSB0aW1lc3RhbXAKKyAgIG9mIHRoZSB0YXJiYWxsIGdlbmVyYXRpb247IHRoaXMgd2FzIGJhZCBiZWNhdXNlIHNuYXBzaG90IGZyb20gdGhlIHNhbWUKKyAgIHRyZWUgc2hvdWxkIHJlc3VsdCBpbiBhIHNhbWUgdGFyYmFsbC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk2ZGYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS40LnR4dApAQCAtMCwwICsxLDIxIEBACitHaXQgdjEuNy41LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy41LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBzaW5nbGUta2V5IG1vZGUgb2YgImdpdCBhZGQgLXAiIHdhcyBlYXNpbHkgZm9vbGVkIGludG8gdGhpbmtpbmcKKyAgIHRoYXQgaXQgd2FzIHRvbGQgdG8gYWRkIGV2ZXJ5dGhpbmcgKCdhJykgd2hlbiB1cC1hcnJvdyB3YXMgcHJlc3NlZCBieQorICAgbWlzdGFrZS4KKworICogU2V0dGluZyBhIGdpdCBjb21tYW5kIHRoYXQgdXNlcyBjdXN0b20gY29uZmlndXJhdGlvbiB2aWEgIi1jIHZhcj12YWwiCisgICBhcyBhbiBhbGlhcyBjYXVzZWQgYSBjcmFzaCBkdWUgdG8gYSByZWFsbG9jKDMpIGZhaWx1cmUuCisKKyAqICJnaXQgZGlmZiAtQyAtQyIgdXNlZCB0byBkaXNhYmxlIHRoZSByZW5hbWUgZGV0ZWN0aW9uIGVudGlyZWx5IHdoZW4KKyAgIHRoZXJlIGFyZSB0b28gbWFueSBjb3B5IGNhbmRpZGF0ZSBwYXRocyBpbiB0aGUgdHJlZTsgbm93IGl0IGZhbGxzCisgICBiYWNrIHRvICItQyIgd2hlbiBkb2luZyBzbyB3b3VsZCBrZWVwIHRoZSBjb3B5IGNhbmRpZGF0ZSBwYXRocworICAgdW5kZXIgdGhlIHJlbmFtZSBkZXRlY3Rpb24gbGltaXQuCisKKyAqICJnaXQgcmVyZXJlIiBkaWQgbm90IGRpYWdub3NlIGEgY29ycnVwdCBNRVJHRV9SUiBmaWxlIGluIHNvbWUgY2FzZXMuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc5MTljCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS50eHQKQEAgLTAsMCArMSwxMzIgQEAKK0dpdCB2MS43LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBWYXJpb3VzIE1pbkdXIHBvcnRhYmlsaXR5IGZpeGVzLgorCisgKiBWYXJpb3VzIGdpdC1wNCBlbmhhbmNlbWVudHMgKGluIGNvbnRyaWIpLgorCisgKiBWYXJpb3VzIHZjcy1zdm4sIGdpdC1zdm4gYW5kIGdpdGsgZW5oYW5jZW1lbnRzIGFuZCBmaXhlcy4KKworICogVmFyaW91cyBnaXQtZ3VpIHVwZGF0ZXMgKDAuMTQuMCkuCisKKyAqIFVwZGF0ZSB0byBtb3JlIG1vZGVybiBIUC1VWCBwb3J0LgorCisgKiBUaGUgY29kZWJhc2UgaXMgZ2V0dGluZyBwcmVwYXJlZCBmb3IgaTE4bi9sMTBuOyBubyB0cmFuc2xhdGVkCisgICBzdHJpbmdzIG5vciB0cmFuc2xhdGlvbiBtZWNoYW5pc20gaW4gdGhlIGNvZGUgeWV0LCBidXQgdGhlIHN0cmluZ3MKKyAgIGFyZSBiZWluZyBtYXJrZWQgZm9yIGwxMG4uCisKKyAqIFRoZSBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IGNhbiBub3cgY29tcGxldGUgc3ltbWV0cmljIGRpZmZlcmVuY2UKKyAgIGZvciAiZ2l0IGRpZmYiIGNvbW1hbmQsIGUuZy4gImdpdCBkaWZmIC4uLmJyYTxUQUI+Ii4KKworICogVGhlIGRlZmF1bHQgbWluaW11bSBsZW5ndGggb2YgYWJicmV2aWF0ZWQgYW5kIHVuaXF1ZSBvYmplY3QgbmFtZXMKKyAgIGNhbiBub3cgYmUgY29uZmlndXJlZCBieSBzZXR0aW5nIHRoZSBjb3JlLmFiYnJldiBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZS4KKworICogImdpdCBhcHBseSAtdiIgcmVwb3J0cyBvZmZzZXQgbGluZXMgd2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgYXQKKyAgIHRoZSBleGFjdCBsb2NhdGlvbiByZWNvcmRlZCBpbiB0aGUgZGlmZiBvdXRwdXQuCisKKyAqICJnaXQgY29uZmlnIiB1c2VkIHRvIGJlIGFsc28ga25vd24gYXMgImdpdCByZXBvLWNvbmZpZyIsIGJ1dCB0aGUgb2xkCisgICBuYW1lIGlzIG5vdyBvZmZpY2lhbGx5IGRlcHJlY2F0ZWQuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1kZXRhY2ggPGNvbW1pdD4iIGlzIGEgbW9yZSB1c2VyIGZyaWVuZGx5IHN5bm9ueW0gZm9yCisgICAiZ2l0IGNoZWNrb3V0IDxjb21taXQ+XjAiLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBwZXJmb3JtZWQgb24gZGV0YWNoZWQgSEVBRCBnaXZlcyBhIHdhcm5pbmcgYW5kCisgICBhZHZpY2Ugd2hlbiB0aGUgY29tbWl0IGJlaW5nIGxlZnQgYmVoaW5kIHdpbGwgYmVjb21lIHVucmVhY2hhYmxlIGZyb20KKyAgIGFueSBicmFuY2ggb3IgdGFnLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIGNhbiBiZSB0b2xkIHRvIHVzZSBhIGN1c3RvbSBtZXJnZQorICAgc3RyYXRlZ3ksIHNpbWlsYXIgdG8gImdpdCByZWJhc2UiLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiByZW1lbWJlcnMgd2hpY2ggY29tbWl0IGZhaWxlZCB0byBhcHBseSB3aGVuIGl0IGlzCisgICBzdG9wcGVkIGJ5IGNvbmZsaWN0cywgbWFraW5nIGl0IHVubmVjZXNzYXJ5IHRvIHVzZSAiY29tbWl0IC1jICRjb21taXQiCisgICB0byBjb25jbHVkZSBpdC4KKworICogImdpdCBjdnNpbXBvcnQiIGJhaWxzIG91dCBpbW1lZGlhdGVseSB3aGVuIHRoZSBjdnMgc2VydmVyIGNhbm5vdCBiZQorICAgcmVhY2hlZCwgd2l0aG91dCBzcGV3aW5nIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzIHRoYXQgY29tcGxhaW4gYWJvdXQKKyAgIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaXQgbmV2ZXIgZ290LgorCisgKiAiZ2l0IGZldGNoIiB2cyAiZ2l0IHVwbG9hZC1wYWNrIiB0cmFuc2ZlciBsZWFybmVkICduby1kb25lJworICAgcHJvdG9jb2wgZXh0ZW5zaW9uIHRvIHNhdmUgb25lIHJvdW5kLXRyaXAgYWZ0ZXIgdGhlIGNvbnRlbnQKKyAgIG5lZ290aWF0aW9uIGlzIGRvbmUuIFRoaXMgc2F2ZXMgb25lIEhUVFAgUlBDLCByZWR1Y2luZyB0aGUgb3ZlcmFsbAorICAgbGF0ZW5jeSBmb3IgYSB0cml2aWFsIGZldGNoLgorCisgKiAiZ2l0IGZldGNoIiBjYW4gYmUgdG9sZCB0byByZWN1cnNpdmVseSBmZXRjaCBzdWJtb2R1bGVzIG9uLWRlbWFuZC4KKworICogImdpdCBncmVwIC1mIDxmaWxlbmFtZT4iIGxlYXJuZWQgdG8gdHJlYXQgIi0iIGFzICJyZWFkIGZyb20gdGhlCisgICBzdGFuZGFyZCBpbnB1dCBzdHJlYW0iLgorCisgKiAiZ2l0IGdyZXAgLS1uby1pbmRleCIgZGlkIG5vdCBob25vciBwYXRoc3BlY3MgY29ycmVjdGx5LCByZXR1cm5pbmcKKyAgIHBhdGhzIG91dHNpZGUgdGhlIHNwZWNpZmllZCBhcmVhLgorCisgKiAiZ2l0IGluaXQiIGxlYXJuZWQgdGhlIC0tc2VwYXJhdGUtZ2l0LWRpciBvcHRpb24gdG8gYWxsb3cgdGhlIGdpdAorICAgZGlyZWN0b3J5IGZvciBhIG5ldyByZXBvc2l0b3J5IGNyZWF0ZWQgZWxzZXdoZXJlIGFuZCBsaW5rZWQgdmlhIHRoZQorICAgZ2l0ZGlyIG1lY2hhbmlzbS4gVGhpcyBpcyBwcmltYXJpbHkgdG8gaGVscCBzdWJtb2R1bGUgc3VwcG9ydCBsYXRlcgorICAgdG8gc3dpdGNoIGJldHdlZW4gYSBicmFuY2ggb2Ygc3VwZXJwcm9qZWN0IHRoYXQgaGFzIHRoZSBzdWJtb2R1bGUKKyAgIGFuZCBhbm90aGVyIHRoYXQgZG9lcyBub3QuCisKKyAqICJnaXQgbG9nIiB0eXBlIGNvbW1hbmRzIG5vdyB1bmRlcnN0YW5kIGdsb2JiaW5nIHBhdGhzcGVjcy4gIFlvdQorICAgY2FuIHNheSAiZ2l0IGxvZyAtLSAnKi50eHQnIiBmb3IgZXhhbXBsZS4KKworICogImdpdCBsb2ciIGZhbWlseSBvZiBjb21tYW5kcyBsZWFybmVkIC0tY2hlcnJ5IGFuZCAtLWNoZXJyeS1tYXJrCisgICBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gdmlldyB0d28gZGl2ZXJnZWQgYnJhbmNoZXMgd2hpbGUgb21pdHRpbmcKKyAgIG9yIGhpZ2hsaWdodGluZyBlcXVpdmFsZW50IGNoYW5nZXMgdGhhdCBhcHBlYXIgb24gYm90aCBzaWRlcyBvZiBhCisgICBzeW1tZXRyaWMgZGlmZmVyZW5jZSAoZS5nLiAibG9nIC0tY2hlcnJ5IEEuLi5CIikuCisKKyAqIEEgbGF6eSAiZ2l0IG1lcmdlIiB0aGF0IGRpZG4ndCBzYXkgd2hhdCB0byBtZXJnZSB1c2VkIHRvIGJlIGFuIGVycm9yLgorICAgV2hlbiBydW4gb24gYSBicmFuY2ggdGhhdCBoYXMgYW4gdXBzdHJlYW0gZGVmaW5lZCwgaG93ZXZlciwgdGhlIGNvbW1hbmQKKyAgIG5vdyBtZXJnZXMgZnJvbSB0aGUgY29uZmlndXJlZCB1cHN0cmVhbS4KKworICogImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgaG93IHRvIGRyaXZlICJiZXlvbmQgY29tcGFyZSAzIiBhcyB3ZWxsLgorCisgKiAiZ2l0IHJlcmVyZSBmb3JnZXQiIHdpdGhvdXQgcGF0aHNwZWMgdXNlZCB0byBmb3JnZXQgYWxsIHRoZSBzYXZlZAorICAgY29uZmxpY3RzIHRoYXQgcmVsYXRlIHRvIHRoZSBjdXJyZW50IG1lcmdlOyBpdCBub3cgcmVxdWlyZXMgeW91IHRvCisgICBnaXZlIGl0IHBhdGhzcGVjcy4KKworICogImdpdCByZXYtbGlzdCAtLW9iamVjdHMgJHJldnMgLS0gJHBhdGhzcGVjIiBub3cgbGltaXRzIHRoZSBvYmplY3RzIGxpc3RlZAorICAgaW4gaXRzIG91dHB1dCBwcm9wZXJseSB3aXRoIHRoZSBwYXRoc3BlYywgaW4gcHJlcGFyYXRpb24gZm9yIG5hcnJvdworICAgY2xvbmVzLgorCisgKiAiZ2l0IHB1c2giIHdpdGggbm8gcGFyYW1ldGVycyBnaXZlcyBiZXR0ZXIgYWR2aWNlIG1lc3NhZ2VzIHdoZW4KKyAgICJ0cmFja2luZyIgaXMgdXNlZCBhcyB0aGUgcHVzaC5kZWZhdWx0IHNlbWFudGljcyBvciB0aGVyZSBpcyBubyByZW1vdGUKKyAgIGNvbmZpZ3VyZWQgeWV0LgorCisgKiBBIHBvc3NpYmxlIHZhbHVlIHRvIHRoZSAicHVzaC5kZWZhdWx0IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLAorICAgJ3RyYWNraW5nJywgZ2FpbmVkIGEgc3lub255bSB0aGF0IG1vcmUgbmF0dXJhbGx5IGRlc2NyaWJlcyB3aGF0IGl0CisgICBkb2VzLCAndXBzdHJlYW0nLgorCisgKiAiZ2l0IHJlcmVyZSIgbGVhcm5lZCBhIG5ldyBzdWJjb21tYW5kICJyZW1haW5pbmciIHRoYXQgaXMgc2ltaWxhciB0bworICAgInN0YXR1cyIgYW5kIGxpc3RzIHRoZSBwYXRocyB0aGF0IGhhZCBjb25mbGljdHMgd2hpY2ggYXJlIGtub3duIHRvCisgICByZXJlcmUsIGJ1dCBleGNsdWRlcyB0aGUgcGF0aHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMKKyAgIHJlc29sdmVkIGluIHRoZSBpbmRleCBmcm9tIGl0cyBvdXRwdXQuICAiZ2l0IG1lcmdldG9vbCIgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gdXNlIHRoaXMgZmFjaWxpdHkuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKworRml4ZXMgc2luY2UgdjEuNy40CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB0aGUgdjEuNy40LlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiAiZ2l0IGZldGNoIiBmcm9tIGEgY2xpZW50IHRoYXQgaXMgbW9zdGx5IGZvbGxvd2luZyB0aGUgcmVtb3RlCisgICBuZWVkbGVzc2x5IHRvbGQgYWxsIG9mIGl0cyByZWZzIHRvIHRoZSBzZXJ2ZXIgZm9yIGJvdGggc2lkZXMgdG8KKyAgIGNvbXB1dGUgdGhlIHNldCBvZiBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSB0cmFuc2ZlcnJlZCBlZmZpY2llbnRseSwKKyAgIGluc3RlYWQgb2Ygc3RvcHBpbmcgd2hlbiB0aGUgc2VydmVyIGhlYXJkIGVub3VnaC4gSW4gYSBwcm9qZWN0IHdpdGgKKyAgIG1hbnkgdGFncywgdGhpcyB0dXJucyBvdXQgdG8gYmUgZXh0cmVtZWx5IHdhc3RlZnVsLCBlc3BlY2lhbGx5IG92ZXIKKyAgIHRoZSBzbWFydCBIVFRQIHRyYW5zcG9ydCAoc3AvbWFpbnQte3VwbG9hZCxmZXRjaH0tcGFjay1zdG9wLWVhcmx5fjEpLgorCisgKiAiZ2l0IGZldGNoIiBydW4gZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCB1c2VzIHRoZSBzYW1lIHJlcG9zaXRvcnkgYXMKKyAgIGl0cyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIGFzIHRoZSByZXBvc2l0b3J5IGl0IGlzIGZldGNoaW5nIGZyb20KKyAgIGRpZCBub3QgdGVsbCB0aGUgc2VydmVyIHRoYXQgaXQgYWxyZWFkeSBoYXMgYWNjZXNzIHRvIG9iamVjdHMKKyAgIHJlYWNoYWJsZSBmcm9tIHRoZSByZWZzIGluIHRoZWlyIGNvbW1vbiBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlLAorICAgY2F1c2luZyBpdCB0byBmZXRjaCB1bm5lY2Vzc2FyeSBvYmplY3RzIChqYy9tYWludC1mZXRjaC1hbHQpLgorCisgKiAiZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3IiIGNyZWF0ZWQgYSBjb25maWd1cmF0aW9uIHRoYXQgaXMgc3VpdGFibGUgZm9yCisgICBkb2luZyBib3RoIGEgbWlycm9yIGZldGNoIGFuZCBhIG1pcnJvciBwdXNoIGF0IHRoZSBzYW1lIHRpbWUsIHdoaWNoCisgICBtYWRlIGxpdHRsZSBzZW5zZS4gIFdlIG5vdyB3YXJuIGFuZCByZXF1aXJlIHRoZSBjb21tYW5kIGxpbmUgdG8gc3BlY2lmeQorICAgZWl0aGVyIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2guCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmU0NmFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4xLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjEuNy42LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy42CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVmFyaW91cyBjb2RlcGF0aHMgdGhhdCBpbnZva2VkIHpsaWIgZGVmbGF0ZS9pbmZsYXRlIGFzc3VtZWQgdGhhdCB0aGVzZQorICAgZnVuY3Rpb25zIGNhbiBjb21wcmVzcyBvciB1bmNvbXByZXNzIG1vcmUgdGhhbiA0R0IgZGF0YSBpbiBvbmUgY2FsbCBvbgorICAgcGxhdGZvcm1zIHdpdGggNjQtYml0IGxvbmcsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCB1bmV4ZWN1dGFibGUiIHJlcG9ydGVkIHRoYXQgInVuZXhlY3V0YWJsZSIgd2FzIG5vdCBmb3VuZCwgZXZlbgorICAgdGhvdWdoIHRoZSBhY3R1YWwgZXJyb3Igd2FzIHRoYXQgInVuZXhlY3V0YWJsZSIgd2FzIGZvdW5kIGJ1dCBkaWQKKyAgIG5vdCBoYXZlIGEgcHJvcGVyIHNoZS1iYW5nIGxpbmUgdG8gYmUgZXhlY3V0ZWQuCisKKyAqIEVycm9yIGV4aXRzIGZyb20gJFBBR0VSIHdlcmUgc2lsZW50bHkgaWdub3JlZC4KKworICogImdpdCBjaGVja291dCAtYiA8YnJhbmNoPiIgd2FzIGNvbmZ1c2VkIHdoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgYQorICAgYnJhbmNoIHdob3NlIG5hbWUgZW5kcyB3aXRoICItZyIgZm9sbG93ZWQgYnkgaGV4YWRlY2ltYWwgZGlnaXRzLAorICAgYW5kIHJlZnVzZWQgdG8gd29yay4KKworICogImdpdCBjaGVja291dCAtYiA8YnJhbmNoPiIgc29tZXRpbWVzIHdyb3RlIGEgYm9ndXMgcmVmbG9nIGVudHJ5LAorICAgY2F1c2luZyBsYXRlciAiZ2l0IGNoZWNrb3V0IC0iIHRvIGZhaWwuCisKKyAqICJnaXQgZGlmZiAtLWNjIiBsZWFybmVkIHRvIGNvcnJlY3RseSBpZ25vcmUgYmluYXJ5IGZpbGVzLgorCisgKiAiZ2l0IGRpZmYgLWMvLS1jYyIgbWlzaGFuZGxlZCBhIGRlbGV0aW9uIHRoYXQgcmVzb2x2ZXMgYSBjb25mbGljdCwgYW5kCisgICBsb29rZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSBpbnN0ZWFkLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBmb3Jnb3QgdG8gcXVvdGUgcGF0aG5hbWVzIHdpdGggdW5zYWZlIGNoYXJhY3RlcnMKKyAgIGluIGl0cyBvdXRwdXQuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgc21hcnQtaHR0cCB0cmFuc3BvcnQgdXNlZCB0byBhYm9ydCB3aGVuIHRoZQorICAgcmVwb3NpdG9yeSB3YXMgdXBkYXRlZCBiZXR3ZWVuIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gYW5kIHRoZQorICAgc3Vic2VxdWVudCBvYmplY3QgdHJhbnNmZXIuCisKKyAqICJnaXQgZmV0Y2giIGRpZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgaW4gc3ViZGlyZWN0b3JpZXMuCisKKyAqICJnaXQgbHMtdHJlZSIgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBhc2tlZCB0byBzaG93IGEgY29ycnVwdCB0cmVlLgorCisgKiAiZ2l0IHB1bGwiIHdpdGhvdXQgYW55IGFyZ3VtZW50IGxlZnQgYW4gZXh0cmEgd2hpdGVzcGFjZSBhZnRlciB0aGUKKyAgIGNvbW1hbmQgbmFtZSBpbiBpdHMgcmVmbG9nLgorCisgKiAiZ2l0IHB1c2ggLS1xdWlldCIgd2FzIG5vdCByZWFsbHkgcXVpZXQuCisKKyAqICJnaXQgcmViYXNlIC1pIC1wIiBpbmNvcnJlY3RseSBkcm9wcGVkIGNvbW1pdHMgZnJvbSBzaWRlIGJyYW5jaGVzLgorCisgKiAiZ2l0IHJlc2V0IFs8Y29tbWl0Pl0gcGF0aHMuLi4iIGRpZCBub3QgcmVzZXQgdGhlIGluZGV4IGVudHJ5IGNvcnJlY3RseQorICAgZm9yIHVubWVyZ2VkIHBhdGhzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGRpZCBub3QgYWxsb3cgYSByZWxhdGl2ZSByZXBvc2l0b3J5IHBhdGggd2hlbgorICAgdGhlIHN1cGVycHJvamVjdCBkaWQgbm90IGhhdmUgYW55IGRlZmF1bHQgcmVtb3RlIHVybC4KKworICogImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIgZmFpbGVkIHRvIGNvcnJlY3RseSBnaXZlIHRoZSBzdGFuZGFyZCBpbnB1dCB0bworICAgdGhlIHVzZXItc3VwcGxpZWQgY29tbWFuZCBpdCBpbnZva2VkLgorCisgKiBzdWJtb2R1bGVzIHRoYXQgdGhlIHVzZXIgaGFzIG5ldmVyIHNob3dlZCBpbnRlcmVzdCBpbiBieSBydW5uaW5nCisgICAiZ2l0IHN1Ym1vZHVsZSBpbml0IiB3YXMgaW5jb3JyZWN0bHkgbWFya2VkIGFzIGludGVyZXN0aW5nIGJ5ICJnaXQKKyAgIHN1Ym1vZHVsZSBzeW5jIi4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcXVpZXQiIHdhcyBub3QgcmVhbGx5IHF1aWV0LgorCisgICogImdpdCB0YWcgLWwgPGdsb2I+Li4uIiBkaWQgbm90IHRha2UgbXVsdGlwbGUgZ2xvYiBwYXR0ZXJucyBmcm9tIHRoZQorICAgY29tbWFuZCBsaW5lLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhZTQxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMi50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjEuNy42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIHYxLjcuNi4xIGJyb2tlICJnaXQgcHVzaCAtLXF1aWV0IjsgaXQgdXNlZCB0byBiZSBhIG5vLW9wIGFnYWluc3QgYW4gb2xkCisgICB2ZXJzaW9uIG9mIEdpdCBydW5uaW5nIG9uIHRoZSBvdGhlciBlbmQsIGJ1dCB2MS43LjYuMSBtYWRlIGl0IGFib3J0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5NzE4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMy50eHQKQEAgLTAsMCArMSwyNCBAQAorR2l0IHYxLjcuNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IC1jIHZhcj12YWx1ZSBzdWJjbWQiIG1pc3BhcnNlZCB0aGUgY3VzdG9tIGNvbmZpZ3VyYXRpb24gd2hlbgorICAgdmFsdWUgY29udGFpbmVkIGFuIGVxdWFsIHNpZ24uCisKKyAqICJnaXQgZmV0Y2giIGhhZCBhIG1ham9yIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24sIHdhc3RpbmcgbWFueQorICAgbmVlZGxlc3MgY3ljbGVzIGluIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGVyZSBpcyBubyBzdWJtb2R1bGVzCisgICBwcmVzZW50LiBUaGlzIHdhcyBlc3BlY2lhbGx5IGJhZCwgd2hlbiB0aGVyZSB3ZXJlIG1hbnkgcmVmcy4KKworICogImdpdCByZWZsb2cgJHJlZm5hbWUiIGRpZCBub3QgZGVmYXVsdCB0byB0aGUgInNob3ciIHN1YmNvbW1hbmQgYXMKKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFkdmVydGlzZWQgdGhlIGNvbW1hbmQgdG8gZG8uCisKKyAqICJnaXQgcmVzZXQiIGRpZCBub3QgbGVhdmUgbWVhbmluZ2Z1bCBsb2cgbWVzc2FnZSBpbiB0aGUgcmVmbG9nLgorCisgKiAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQiIGRpZCBub3Qgc2hvdyBpZ25vcmVkIGl0ZW1zIHdoZW4gdGhlcmUgaXMgbm8KKyAgIHVudHJhY2tlZCBpdGVtcy4KKworICogImdpdCB0YWcgLS1jb250YWlucyAkY29tbWl0IiB3YXMgdW5uZWNlc3NhcmlseSBpbmVmZmljaWVudC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5YWNhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNC50eHQKQEAgLTAsMCArMSwzMiBAQAorR2l0IHYxLjcuNi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZXJyb3IgcmVwb3J0aW5nIGxvZ2ljIG9mICJnaXQgYW0iIHdoZW4gdGhlIGNvbW1hbmQgaXMgZmVkIGEgZmlsZQorICAgd2hvc2UgbWFpbC1zdG9yYWdlIGZvcm1hdCBpcyB1bmtub3duIHdhcyBmaXhlZC4KKworICogImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gQHstMX0gZm9vIiBkaWQgbm90IGV4cGFuZCBAey0xfSBjb3JyZWN0bHkuCisKKyAqICJnaXQgY2hlY2stcmVmLWZvcm1hdCAtLXByaW50IiB1c2VkIHRvIHBhcnJvdCBhIGNhbmRpZGF0ZSBzdHJpbmcgdGhhdAorICAgYmVnYW4gd2l0aCBhIHNsYXNoIChlLmcuIC9yZWZzL2hlYWRzL21hc3Rlcikgd2l0aG91dCBzdHJpcHBpbmcgaXQsIHRvIG1ha2UKKyAgIHRoZSByZXN1bHQgYSBzdWl0YWJseSBub3JtYWxpemVkIHN0cmluZyB0aGUgY2FsbGVyIGNhbiBhcHBlbmQgdG8gIiRHSVRfRElSLyIuCisKKyAqICJnaXQgY2xvbmUiIGZhaWxlZCB0byBjbG9uZSBsb2NhbGx5IGZyb20gYSAiLmdpdCIgZmlsZSB0aGF0IGl0c2VsZgorICAgaXMgbm90IGEgZGlyZWN0b3J5IGJ1dCBpcyBhIHBvaW50ZXIgdG8gb25lLgorCisgKiAiZ2l0IGNsb25lIiBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3MgZnJvbSBhbm90aGVyCisgICBvYmplY3Qgc3RvcmUgdXNpbmcgYSByZWxhdGl2ZSBwYXRoIGluIGl0cyBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcworICAgZmlsZSBkaWQgbm90IGFkanVzdCB0aGUgYWx0ZXJuYXRlcyBpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1kaXJ0eSIgZGlkIG5vdCByZWZyZXNoIHRoZSBpbmRleCBiZWZvcmUgY2hlY2tpbmcgdGhlCisgICBzdGF0ZSBvZiB0aGUgd29ya2luZyB0cmVlIGZpbGVzLgorCisgKiAiZ2l0IGxzLWZpbGVzIC4uLyRwYXRoIiB0aGF0IGlzIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5IHJlcG9ydGVkIGVycm9ycworICAgaW5jb3JyZWN0bHkgd2hlbiB0aGVyZSBpcyBubyBzdWNoIHBhdGggdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBwYXRoc3BlYy4KKworICogImdpdCBtZXJnZXRvb2wiIGNvdWxkIGxvb3AgZm9yZXZlciBwcm9tcHRpbmcgd2hlbiBub3RoaW5nIGNhbiBiZSByZWFkCisgICBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxMzEzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNS50eHQKQEAgLTAsMCArMSwyNiBAQAorR2l0IHYxLjcuNi41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZGF0ZSBwYXJzZXIgZGlkIG5vdCBhY2NlcHQgdGltZXpvbmUgZGVzaWduYXRvcnMgdGhhdCBsYWNrIG1pbnV0ZXMKKyAgIHBhcnQgYW5kIGFsc28gaGFzIGEgY29sb24gYmV0d2VlbiAiaGg6bW0iLgorCisgKiBBZnRlciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHRoYXQgaGFzIHZlcnkgbG9uZyByZWZuYW1lLCB0aGUgcmVwb3J0aW5nCisgICBvdXRwdXQgY291bGQgaGF2ZSBjb3JydXB0ZWQgYnkgb3ZlcnJ1bm5pbmcgYSBzdGF0aWMgYnVmZmVyLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZGlkIG5vdCB1c2UgaXRzIGFyZ3VtZW50cyBhcyBwYXRoc3BlYywgYnV0IGFzIGEgcGF0aCB0bworICAgdGhlIGZpbGUgdGhhdCBtYXkgbm90IGV2ZW4gaGF2ZSBhbnkgY29uZmxpY3QuCisKKyAqICJnaXQgbmFtZS1yZXYgLS1hbGwiIHRyaWVkIHRvIG5hbWUgYWxsIF9vYmplY3RzXywgbmF0dXJhbGx5IGZhaWxpbmcgdG8KKyAgIGRlc2NyaWJlIG1hbnkgYmxvYnMgYW5kIHRyZWVzLCBpbnN0ZWFkIG9mIHNob3dpbmcgb25seSBjb21taXRzIGFzCisgICBhZHZlcnRpc2VkIGluIGl0cyBkb2N1bWVudGF0aW9uLgorCisgKiAiZ2l0IHJlbW90ZSByZW5hbWUgJGEgJGIiIHdlcmUgbm90IGNhcmVmdWwgdG8gbWF0Y2ggdGhlIHJlbW90ZSBuYW1lCisgICBhZ2FpbnN0ICRhIChpLmUuIHNvdXJjZSBzaWRlIG9mIHRoZSByZW1vdGUgbmlja25hbWUpLgorCisgKiAiZ2l0d2ViIiB1c2VkIHRvIHByb2R1Y2UgYSBub24td29ya2luZyBsaW5rIHdoaWxlIHNob3dpbmcgdGhlIGNvbnRlbnRzCisgICBvZiBhIGJsb2IsIHdoZW4gSmF2YVNjcmlwdCBhY3Rpb25zIGFyZSBlbmFibGVkLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQzZTAwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi42LnR4dApAQCAtMCwwICsxLDE2IEBACitHaXQgdjEuNy42LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb2RlIHRvIGxvb2sgdXAgYXR0cmlidXRlcyBmb3IgcGF0aHMgcmV1c2VkIGVudHJpZXMgZnJvbSBhIHdyb25nCisgICBkaXJlY3Rvcnkgd2hlbiB0d28gcGF0aHMgaW4gcXVlc3Rpb24gYXJlIGluIGFkamFjZW50IGRpcmVjdG9yaWVzIGFuZAorICAgdGhlIG5hbWUgb2YgdGhlIG9uZSBkaXJlY3RvcnkgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyLgorCisgKiBXaGVuIHByb2R1Y2luZyBhICJ0aGluIHBhY2siIChwcmltYXJpbHkgdXNlZCBpbiBidW5kbGVzIGFuZCBzbWFydAorICAgSFRUUCB0cmFuc2ZlcnMpIG91dCBvZiBhIGZ1bGx5IHBhY2tlZCByZXBvc2l0b3J5LCB3ZSB1bm5lY2Vzc2FyaWx5CisgICBhdm9pZGVkIHNlbmRpbmcgcmVjZW50IG9iamVjdHMgYXMgYSBkZWx0YSBhZ2FpbnN0IG9iamVjdHMgd2Uga25vdworICAgdGhlIG90aGVyIHNpZGUgaGFzLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzQ5OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LnR4dApAQCAtMCwwICsxLDEzNiBAQAorR2l0IHYxLjcuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFZhcmlvdXMgZ2l0LXN2biB1cGRhdGVzLgorCisgKiBVcGRhdGVzIHRoZSB3YXkgY29udGVudCB0YWdzIGFyZSBoYW5kbGVkIGluIGdpdHdlYi4gIEFsc28gYWRkcworICAgYSBVSSB0byBjaG9vc2UgY29tbW9uIHRpbWV6b25lIGZvciBkaXNwbGF5aW5nIHRoZSBkYXRlcy4KKworICogU2ltaWxhciB0byBicmFuY2ggbmFtZXMsIHRhZ25hbWVzIHRoYXQgYmVnaW4gd2l0aCAiLSIgYXJlIG5vdworICAgZGlzYWxsb3dlZC4KKworICogQ2xlYW4tdXAgb2YgdGhlIEMgcGFydCBvZiBpMThuIChidXQgbm90IGwxMG4tLS1wbGVhc2Ugd2FpdCkKKyAgIGNvbnRpbnVlcy4KKworICogVGhlIHNjcmlwdGluZyBwYXJ0IG9mIHRoZSBjb2RlYmFzZSBpcyBnZXR0aW5nIHByZXBhcmVkIGZvciBpMThuL2wxMG4uCisKKyAqIFB1c2hpbmcgYW5kIHB1bGxpbmcgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCBsYXJnZSBudW1iZXIgb2YgcmVmcyB0aGF0CisgICBwb2ludCB0byBpZGVudGljYWwgY29tbWl0cyBhcmUgb3B0aW1pemVkIGJ5IG5vdCBsaXN0aW5nIHRoZSBzYW1lIGNvbW1pdAorICAgZHVyaW5nIHRoZSBjb21tb24gYW5jZXN0b3IgbmVnb3RpYXRpb24gZXhjaGFuZ2Ugd2l0aCB0aGUgb3RoZXIgc2lkZS4KKworICogQWRkaW5nIGEgZmlsZSBsYXJnZXIgdGhhbiBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgKGRlZmF1bHRzIHRvIDEvMiBHaWcpCisgICB1c2luZyAiZ2l0IGFkZCIgd2lsbCBzZW5kIHRoZSBjb250ZW50cyBzdHJhaWdodCB0byBhIHBhY2tmaWxlIHdpdGhvdXQKKyAgIGhhdmluZyB0byBob2xkIGl0IGFuZCBpdHMgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBib3RoIGF0IHRoZSBzYW1lCisgICB0aW1lIGluIG1lbW9yeS4KKworICogUHJvY2Vzc2VzIHNwYXduZWQgYnkgIlthbGlhc10gPG5hbWU+ID0gIXByb2Nlc3MiIGluIHRoZSBjb25maWd1cmF0aW9uCisgICBjYW4gaW5zcGVjdCBHSVRfUFJFRklYIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGxlYXJuIHdoZXJlIGluIHRoZQorICAgd29ya2luZyB0cmVlIHRoZSBvcmlnaW5hbCBjb21tYW5kIHdhcyBpbnZva2VkLgorCisgKiBBIG1hZ2ljIHBhdGhzcGVjICI6LyIgdGVsbHMgYSBjb21tYW5kIHRoYXQgbGltaXRzIGl0cyBvcGVyYXRpb24gdG8KKyAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGVuIHJhbiBmcm9tIGEgc3ViZGlyZWN0b3J5IHRvIHdvcmsgb24gdGhlCisgICBlbnRpcmUgd29ya2luZyB0cmVlLiBJbiBnZW5lcmFsLCAiOi9wYXRoL3RvL2ZpbGUiIHdvdWxkIGJlIHJlbGF0aXZlCisgICB0byB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlIGhpZXJhcmNoeS4KKworICAgQWZ0ZXIgImdpdCByZXNldCAtLWhhcmQ7IGVkaXQgTWFrZWZpbGU7IGNkIHQvIiwgImdpdCBhZGQgLXUiIHdvdWxkCisgICBiZSBhIG5vLW9wLCBidXQgImdpdCBhZGQgLXUgOi8iIHdvdWxkIGFkZCB0aGUgdXBkYXRlZCBjb250ZW50cyBvZgorICAgdGhlIE1ha2VmaWxlIGF0IHRoZSB0b3AgbGV2ZWwuIElmIHlvdSB3YW50IHRvIG5hbWUgYSBwYXRoIGluIHRoZQorICAgY3VycmVudCBzdWJkaXJlY3Rvcnkgd2hvc2UgdW51c3VhbCBuYW1lIGJlZ2lucyB3aXRoICI6LyIsIHlvdSBjYW4KKyAgIG5hbWUgaXQgYnkgIi4vOi90aGF0L3BhdGgiIG9yIGJ5ICJcOi90aGF0L3BhdGgiLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybmVkICItLWFiYnJldls9PG4+XSIgb3B0aW9uIHRvIGNvbnRyb2wgdGhlIG1pbmltdW0KKyAgIG51bWJlciBvZiBoZXhkaWdpdHMgc2hvd24gZm9yIGNvbW1pdCBvYmplY3QgbmFtZXMuCisKKyAqICJnaXQgYmxhbWUiIGxlYXJuZWQgIi0tbGluZS1wb3JjZWxhaW4iIHRoYXQgaXMgbGVzcyBlZmZpY2llbnQgYnV0IGlzCisgICBlYXNpZXIgdG8gcGFyc2UuCisKKyAqIEFib3J0aW5nICJnaXQgY29tbWl0IC0taW50ZXJhY3RpdmUiIGRpc2NhcmRzIHVwZGF0ZXMgdG8gdGhlIGluZGV4CisgICBtYWRlIGR1cmluZyB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbi4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgYSAiLS1wYXRjaCIgb3B0aW9uIHRvIGRpcmVjdGx5IGp1bXAgdG8gdGhlCisgICBwZXItaHVuayBzZWxlY3Rpb24gVUkgb2YgdGhlIGludGVyYWN0aXZlIG1vZGUuCisKKyAqICJnaXQgZGlmZiIgYW5kIGl0cyBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCAtLWRpcnN0YXQ9MCB0byBzaG93CisgICBkaXJlY3RvcmllcyB0aGF0IGNvbnRyaWJ1dGUgbGVzcyB0aGFuIDAuMSUgb2YgY2hhbmdlcy4KKworICogImdpdCBkaWZmIiBhbmQgaXRzIGZhbWlseSBvZiBjb21tYW5kcyBsZWFybmVkIC0tZGlyc3RhdD1saW5lcyBtb2RlIHRvCisgICBhc3Nlc3MgZGFtYWdlIHRvIHRoZSBkaXJlY3RvcnkgYmFzZWQgb24gbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBwYXRjaAorICAgb3V0cHV0LCBub3QgYmFzZWQgb24gdGhlIHNpbWlsYXJpdHkgbnVtYmVycy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgIi0tcXVpZXQiIG9wdGlvbiB0byBzdXBwcmVzcyB0aGUgb3V0cHV0IG9mCisgICB0aGUgbmFtZXMgb2YgZ2VuZXJhdGVkIGZpbGVzLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgcXVvdGVzIHBlb3BsZSdzIG5hbWVzIHdoZW4gaXQgaGFzIFJGQzgyMiBzcGVjaWFsCisgICBjaGFyYWN0ZXJzIGluIGl0LCBlLmcuICJKdW5pbyBDLiBIYW1hbm8iIDxqY2hAZXhhbXBsZS5jb20+LiAgRWFybGllcgorICAgaXQgd2FzIHVwIHRvIHRoZSB1c2VyIHRvIGRvIHRoaXMgd2hlbiB1c2luZyBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgY2FuIHRha2UgYW4gZW1wdHkgLS1zdWJqZWN0LXByZWZpeCBub3cuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCB0aGUgIi1QIiBvcHRpb24gdG8gdGFrZSBwY3JlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKKyAqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBsZWFybmVkIGEgbmV3ICItLW5vdGVzIiBvcHRpb24gdG8gcmVwbGFjZSB0aGUKKyAgICItLXNob3ctbm90ZXMiIG9wdGlvbi4gIFVubGlrZSAiLS1zaG93LW5vdGVzIiwgIi0tbm90ZXM9PHJlZj4iIGRvZXMKKyAgIG5vdCBpbXBseSBzaG93aW5nIHRoZSBkZWZhdWx0IG5vdGVzLgorCisgKiBUaGV5IGFsc28gbGVhcm5lZCBhIGxvZy5hYmJyZXZDb21taXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBhdWdtZW50CisgICB0aGUgLS1hYmJyZXYtY29tbWl0IGNvbW1hbmQgbGluZSBvcHRpb24uCisKKyAqICJnaXQgbHMtcmVtb3RlIiBsZWFybmVkICItLWV4aXQtY29kZSIgb3B0aW9uIHRvIGNvbnNpZGVyIGl0IGEKKyAgIGRpZmZlcmVudCBraW5kIG9mIGVycm9yIHdoZW4gbm8gcmVtb3RlIHJlZiB0byBiZSBzaG93bi4KKworICogImdpdCBtZXJnZSIgbGVhcm5lZCAiLSIgYXMgYSBzaG9ydC1oYW5kIGZvciAidGhlIHByZXZpb3VzIGJyYW5jaCIsIGp1c3QKKyAgIGxpa2UgdGhlIHdheSAiZ2l0IGNoZWNrb3V0IC0iIHdvcmtzLgorCisgKiAiZ2l0IG1lcmdlIiB1c2VzICJtZXJnZS5mZiIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBkZWNpZGUgdG8gYWx3YXlzCisgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgKGkuZS4gLS1uby1mZiwgYWthIG1lcmdlLmZmPW5vKSwgcmVmdXNlIHRvIGNyZWF0ZQorICAgYSBtZXJnZSBjb21taXQgKGkuZS4gLS1mZi1vbmx5LCBha2EgbWVyZ2UuZmY9b25seSkuIFNldHRpbmcgbWVyZ2UuZmY9eWVzCisgICAob3Igbm90IHNldHRpbmcgaXQgYXQgYWxsKSByZXN0b3JlcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgYWxsb3dpbmcKKyAgIGZhc3QtZm9yd2FyZCB0byBoYXBwZW4gd2hlbiBwb3NzaWJsZS4KKworICogcDQtaW1wb3J0IChmcm9tIGNvbnRyaWIpIGxlYXJuZWQgYSBuZXcgb3B0aW9uIC0tcHJlc2VydmUtdXNlci4KKworICogImdpdCByZWFkLXRyZWUgLW0iIGxlYXJuZWQgIi0tZHJ5LXJ1biIgb3B0aW9uIHRoYXQgcmVwb3J0cyBpZiBhIG1lcmdlCisgICB3b3VsZCBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGluZGV4IG5vciB0aGUgd29ya2luZyB0cmVlLgorCisgKiAiZ2l0IHJlYmFzZSIgdGhhdCBkb2VzIG5vdCBzcGVjaWZ5IG9uIHRvcCBvZiB3aGljaCBicmFuY2ggdG8gcmViYXNlCisgICB0aGUgY3VycmVudCBicmFuY2ggbm93IHVzZXMgQHt1cHN0cmVhbX0gb2YgdGhlIGN1cnJlbnQgYnJhbmNoLgorCisgKiAiZ2l0IHJlYmFzZSIgZmluaXNoZWQgZWl0aGVyIG5vcm1hbGx5IG9yIHdpdGggLS1hYm9ydCBkaWQgbm90CisgICB1cGRhdGUgdGhlIHJlZmxvZyBmb3IgSEVBRCB0byByZWNvcmQgdGhlIGV2ZW50IHRvIGNvbWUgYmFjayB0bworICAgd2hlcmUgaXQgc3RhcnRlZCBmcm9tLgorCisgKiAiZ2l0IHJlbW90ZSBhZGQgLXQgb25seS10aGlzLWJyYW5jaCAtLW1pcnJvcj1mZXRjaCIgaXMgbm93IGFsbG93ZWQuIEVhcmxpZXIKKyAgIGEgZmV0Y2gtbW9kZSBtaXJyb3IgbWVhbnQgbWlycm9yIGV2ZXJ5dGhpbmcsIGJ1dCBub3cgaXQgb25seSBtZWFucyByZWZzIGFyZQorICAgbm90IHJlbmFtZWQuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1jb3VudCIgdXNlZCB3aXRoICItLWNoZXJyeS1tYXJrIiBjb3VudHMgdGhlIGNoZXJyeS1waWNrZWQKKyAgIGNvbW1pdHMgc2VwYXJhdGVseSwgcHJvZHVjaW5nIG1vcmUgYSB1c2VmdWwgb3V0cHV0LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGxlYXJuZWQgIi0tZm9yY2UiIG9wdGlvbiB0byBnZXQgcmlkIG9mIGxvY2FsCisgICBjaGFuZ2VzIGluIHN1Ym1vZHVsZXMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSB1cC10by1kYXRlIHZlcnNpb24uCisKKyAqICJnaXQgc3RhdHVzIiBhbmQgZnJpZW5kcyBpZ25vcmUgLmdpdG1vZHVsZXMgZmlsZSB3aGlsZSB0aGUgZmlsZSBpcworICAgc3RpbGwgaW4gYSBjb25mbGljdGVkIHN0YXRlIGR1cmluZyBhIG1lcmdlLCB0byBhdm9pZCB1c2luZyBpbmZvcm1hdGlvbgorICAgdGhhdCBpcyBub3QgZmluYWwgYW5kIHBvc3NpYmx5IGNvcnJ1cHQgd2l0aCBjb25mbGljdCBtYXJrZXJzLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBtaW5vciBtaXNjZWxsYW5lb3VzCitjaGFuZ2VzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgaW4gMS43LjUuWCBtYWludGVuYW5jZSB0cmFjayBhcmUKK2luY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworICogImdpdCBjb25maWciIHVzZWQgdG8gY2hva2Ugd2l0aCBhbiBpbnNhbmVseSBsb25nIGxpbmUuCisgICAobWVyZ2UgZWYvbWFpbnQtc3RyYnVmLWluaXQgbGF0ZXIpCisKKyAqICJnaXQgZGlmZiAtLXF1aWV0IiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIC0tZGlmZi1maWx0ZXIuCisgICAobWVyZ2UgamsvZGlmZi1ub3Qtc28tcXVpY2sgbGF0ZXIpCisKKyAqICJnaXQgc3RhdHVzIC16IiBkaWQgbm90IGRlZmF1bHQgdG8gLS1wb3JjZWxhaW4gb3V0cHV0IGZvcm1hdC4KKyAgIChtZXJnZSBiYy9tYWludC1zdGF0dXMtei10by11c2UtcG9yY2VsYWluIGxhdGVyKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5YjgzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMS50eHQKQEAgLTAsMCArMSw2MCBAQAorR2l0IHYxLjcuNy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9uIHNvbWUgQlNEIHN5c3RlbXMsIGFkZGluZyArcyBiaXQgb24gZGlyZWN0b3JpZXMgaXMgZGV0cmltZW50YWwKKyAgIChpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIEJTRCB0byBiZWdpbiB3aXRoKS4gImdpdCBpbml0IC0tc2hhcmVkIgorICAgaGFzIGJlZW4gdXBkYXRlZCB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdpdGhvdXQgZXh0cmEgbWFrZWZpbGUKKyAgIHNldHRpbmdzIG9uIHBsYXRmb3JtcyB0aGUgTWFrZWZpbGUga25vd3MgYWJvdXQuCisKKyAqIEFmdGVyIGluY29ycmVjdGx5IHdyaXR0ZW4gdGhpcmQtcGFydHkgdG9vbHMgc3RvcmUgYSB0YWcgb2JqZWN0IGluCisgICBIRUFELCBnaXQgZGlhZ25vc2VkIGl0IGFzIGEgcmVwb3NpdG9yeSBjb3JydXB0aW9uIGFuZCByZWZ1c2VkIHRvCisgICBwcm9jZWVkIGluIG9yZGVyIHRvIGF2b2lkIHNwcmVhZGluZyB0aGUgZGFtYWdlLiBXZSBub3cgZ3JhY2VmdWxseQorICAgcmVjb3ZlciBmcm9tIHN1Y2ggYSBzaXR1YXRpb24gYnkgcHJldGVuZGluZyBhcyBpZiB0aGUgY29tbWl0IHRoYXQKKyAgIGlzIHBvaW50ZWQgYXQgYnkgdGhlIHRhZyB3ZXJlIGluIEhFQUQuCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWVycm9yIiBkaWQgbm90IGJvdGhlciB0byByZXBvcnQgdGhlIGV4YWN0CisgICBsaW5lIG51bWJlciBpbiB0aGUgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VkIG5ldyBibGFuayBsaW5lcyBhdCB0aGUgZW5kCisgICBvZiB0aGUgZmlsZS4KKworICogImdpdCBhcHBseSAtLWluZGV4IiBkaWQgbm90IGNoZWNrIGNvcnJ1cHRlZCBwYXRjaC4KKworICogImdpdCBjaGVja291dCAkdHJlZSAkZGlyZWN0b3J5LyIgcmVzdXJyZWN0ZWQgcGF0aHMgbG9jYWxseSByZW1vdmVkIG9yCisgICBtb2RpZmllZCBvbmx5IGluIHRoZSB3b3JraW5nIHRyZWUgaW4gJGRpcmVjdG9yeS8gdGhhdCBkaWQgbm90IGFwcGVhcgorICAgaW4gJGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gJHRyZWUuIFRoZXkgc2hvdWxkIGhhdmUgYmVlbiBrZXB0IGludGFjdC4KKworICogImdpdCBkaWZmICR0cmVlICRwYXRoIiB1c2VkIHRvIGFwcGx5IHRoZSBwYXRoc3BlYyBhdCB0aGUgb3V0cHV0IHN0YWdlLAorICAgcmVhZGluZyB0aGUgd2hvbGUgdHJlZSwgd2FzdGluZyByZXNvdXJjZXMuCisKKyAqIFRoZSBjb2RlIHRvIGNoZWNrIGZvciB1cGRhdGVkIHN1Ym1vZHVsZXMgZHVyaW5nIGEgImdpdCBmZXRjaCIgb2YgdGhlCisgICBzdXBlcnByb2plY3QgaGFkIGFuIHVubmVjZXNzYXJ5IHF1YWRyYXRpYyBsb29wLgorCisgKiAiZ2l0IGZldGNoIiBmcm9tIGEgbGFyZ2UgYnVuZGxlIGRpZCBub3QgZW5hYmxlIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqIFdoZW4gImdpdCBmc2NrIC0tbG9zdC1hbmQtZm91bmQiIGZvdW5kIHRoYXQgYW4gZW1wdHkgYmxvYiBvYmplY3QgaW4gdGhlCisgICBvYmplY3Qgc3RvcmUgaXMgdW5yZWFjaGFibGUsIGl0IGluY29ycmVjdGx5IHJlcG9ydGVkIGFuIGVycm9yIGFmdGVyCisgICB3cml0aW5nIHRoZSBsb3N0IGJsb2Igb3V0IHN1Y2Nlc3NmdWxseS4KKworICogImdpdCBmaWx0ZXItYnJhbmNoIiBkaWQgbm90IHJlZnJlc2ggdGhlIGluZGV4IGJlZm9yZSBjaGVja2luZyB0aGF0IHRoZQorICAgd29ya2luZyB0cmVlIHdhcyBjbGVhbi4KKworICogImdpdCBncmVwICR0cmVlIiB3aGVuIHJ1biB3aXRoIG11bHRpcGxlIHRocmVhZHMgaGFkIGFuIHVuc2FmZSBhY2Nlc3MgdG8KKyAgIHRoZSBvYmplY3QgZGF0YWJhc2UgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHByb3RlY3RlZCB3aXRoIG11dGV4LgorCisgKiBUaGUgIi0tYW5jZXN0cnktcGF0aCIgb3B0aW9uIHRvICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBtaXNiZWhhdmVkIGluIGEKKyAgIGhpc3Rvcnkgd2l0aCBjb21wbGV4IGNyaXNzLWNyb3NzIG1lcmdlcyBhbmQgc2hvd2VkIGFuIHVuaW50ZXJlc3RpbmcKKyAgIHNpZGUgaGlzdG9yeSBhcyB3ZWxsLgorCisgKiBUZXN0IHQxMzA0IGFzc3VtZWQgTE9HTkFNRSBpcyBhbHdheXMgc2V0LCB3aGljaCBtYXkgbm90IGJlIHRydWUgb24KKyAgIHNvbWUgc3lzdGVtcy4KKworICogVGVzdHMgd2l0aCAtLXZhbGdyaW5kIGZhaWxlZCB0byBmaW5kICJtZXJnZXRvb2wiIHNjcmlwdGxldHMuCisKKyAqICJnaXQgcGF0Y2gtaWQiIG1pc2NvbXB1dGVkIHRoZSBwYXRjaC1pZCBpbiBhIHBhdGNoIHRoYXQgaGFzIGEgbGluZSBsb25nZXIKKyAgIHRoYW4gMWtCLgorCisgKiBXaGVuIGFuICJleGVjIiBpbnNuIGZhaWxlZCBhZnRlciBtb2RpZnlpbmcgdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZworICAgdHJlZSBkdXJpbmcgInJlYmFzZSAtaSIsIHdlIG5vdyBjaGVjayBhbmQgd2FybiB0aGF0IHRoZSBjaGFuZ2VzIG5lZWQgdG8KKyAgIGJlIGNsZWFuZWQgdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmJiZWYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4yLnR4dApAQCAtMCwwICsxLDQ0IEBACitHaXQgdjEuNy43LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy43LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdlIHVzZWQgdG8gZHJvcCBlcnJvciBtZXNzYWdlcyBmcm9tIGxpYmN1cmwgb24gY2VydGFpbiBraW5kcyBvZgorICAgZXJyb3JzLgorCisgKiBFcnJvciByZXBvcnQgZnJvbSBzbWFydCBIVFRQIHRyYW5zcG9ydCwgd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMKKyAgIGJyb2tlbiBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNmZXIsIHNob3dlZCBhIHVzZWxlc3MgbWVzc2FnZSBvbgorICAgYSBjb3JydXB0IHBhY2tldC4KKworICogImdpdCBmZXRjaCAtLXBydW5lIiB3YXMgdW5zYWZlIHdoZW4gdXNlZCB3aXRoIHJlZnNwZWNzIGZyb20gdGhlCisgICBjb21tYW5kIGxpbmUuCisKKyAqIFRoZSBhdHRyaWJ1dGUgbWVjaGFuaXNtIGRpZCBub3QgdXNlIGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2ggd2hlbgorICAgY29yZS5pZ25vcmVjYXNlIHdhcyBzZXQuCisKKyAqICJnaXQgYmlzZWN0IiBkaWQgbm90IG5vdGljZSB3aGVuIGl0IGZhaWxlZCB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZQorICAgdG8gdGhlIG5leHQgY29tbWl0IHRvIGJlIHRlc3RlZC4KKworICogImdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXJlZ2V4cCIgZmFpbGVkIHRvIHNlcGFyYXRlIHRoZSB2YXJpYWJsZSBuYW1lCisgICBhbmQgaXRzIHZhbHVlICJ0cnVlIiB3aGVuIHRoZSB2YXJpYWJsZSBpcyBkZWZpbmVkIHdpdGhvdXQgIj0gdHJ1ZSIuCisKKyAqICJnaXQgcmVtb3RlIHJlbmFtZSAkYSAkYiIgd2VyZSBub3QgY2FyZWZ1bCB0byBtYXRjaCB0aGUgcmVtb3RlIG5hbWUKKyAgIGFnYWluc3QgJGEgKGkuZS4gc291cmNlIHNpZGUgb2YgdGhlIHJlbW90ZSBuaWNrbmFtZSkuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBkaWQgbm90IHVzZSBpdHMgYXJndW1lbnRzIGFzIHBhdGhzcGVjLCBidXQgYXMgYSBwYXRoIHRvCisgICB0aGUgZmlsZSB0aGF0IG1heSBub3QgZXZlbiBoYXZlIGFueSBjb25mbGljdC4KKworICogImdpdCBkaWZmIC0tW251bV1zdGF0IiB1c2VkIHRvIHVzZSB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIGNvbnRleHQKKyAgIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0LCBwb3RlbnRpYWxseSBnaXZpbmcgZGlmZmVyZW50IHJlc3VsdHMgZnJvbQorICAgImdpdCBkaWZmIHwgZGlmZnN0YXQiIGFuZCBjb25mdXNpbmcgdGhlIHVzZXJzLgorCisgKiAiZ2l0IHB1bGwiIGFuZCAiZ2l0IHJlYmFzZSIgZGlkIG5vdCB3b3JrIHdlbGwgZXZlbiB3aGVuIEdJVF9XT1JLX1RSRUUgaXMKKyAgIHNldCBjb3JyZWN0bHkgd2l0aCBHSVRfRElSIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBvdXRzaWRlIHRoZSB3b3JraW5nCisgICB0cmVlLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgaG9ub3IgdGhlIGNvbmZpZ3VyZWQgaG9zdG5hbWUgd2hlbiByZXN0YXJ0aW5nCisgICB0aGUgSEVMTy9FSExPIGV4Y2hhbmdlIGFmdGVyIHN3aXRjaGluZyBUTFMgb24uCisKKyAqICJnaXR3ZWIiIHVzZWQgdG8gcHJvZHVjZSBhIG5vbi13b3JraW5nIGxpbmsgd2hpbGUgc2hvd2luZyB0aGUgY29udGVudHMKKyAgIG9mIGEgYmxvYiwgd2hlbiBKYXZhU2NyaXB0IGFjdGlvbnMgYXJlIGVuYWJsZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTMwMWYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4zLnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuNy43LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFkanVzdCB0aGUgInF1aWNrLWluc3RhbGwtZG9jIiBwcm9jZWR1cmVzIGFzIHByZWZvcm1hdHRlZAorICAgaHRtbC9tYW5wYWdlIGFyZSBubyBsb25nZXIgaW4gdGhlIHNvdXJjZSByZXBvc2l0b3J5LgorCisgKiBUaGUgbG9naWMgdG8gb3B0aW1pemUgdGhlIGxvY2FsaXR5IG9mIHRoZSBkYXRhIGluIGEgcGFjayBpbnRyb2R1Y2VkIGluCisgICAxLjcuNyB3YXMgZ3Jvc3NseSBpbmVmZmljaWVudC4KKworICogVGhlIGxvZ2ljIHRvIGZpbHRlciBvdXQgZm9ya2VkIHByb2plY3RzIGluIHRoZSBwcm9qZWN0IGxpc3QgaW4KKyAgICJnaXR3ZWIiIHdhcyBicm9rZW4gZm9yIHNvbWUgdGltZS4KKworICogImdpdCBicmFuY2ggLW0vLU0iIGFkdmVydGlzZWQgdG8gdXBkYXRlIFJFTkFNRV9SRUYgcmVmIGluIHRoZQorICAgY29tbWl0IGxvZyBtZXNzYWdlIHRoYXQgaW50cm9kdWNlZCB0aGUgZmVhdHVyZSBidXQgbm90IGFueXdoZXJlIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiwgYW5kIG5ldmVyIGRpZCB1cGRhdGUgc3VjaCBhIHJlZiBhbnl3YXkuIFRoaXMKKyAgIHVuZG9jdW1lbnRlZCBtaXNmZWF0dXJlIHRoYXQgZGlkIG5vdCBleGlzdCBoYXMgYmVlbiBleGNpc2VkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyMzQ0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNC50eHQKQEAgLTAsMCArMSwxNCBAQAorR2l0IHYxLjcuNy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGZldyBoZWFkZXIgZGVwZW5kZW5jaWVzIHdlcmUgbWlzc2luZyBmcm9tIHRoZSBNYWtlZmlsZS4KKworICogU29tZSBuZXdlciBwYXJ0cyBvZiB0aGUgY29kZSB1c2VkIEM5OSBfX1ZBX0FSR1NfXyB3aGlsZSB3ZSBzdGlsbAorICAgdHJ5IHRvIGNhdGVyIHRvIG9sZGVyIGNvbXBpbGVycy4KKworICogImdpdCBuYW1lLXJldiAtLWFsbCIgdHJpZWQgdG8gbmFtZSBhbGwgX29iamVjdHNfLCBuYXR1cmFsbHkgZmFpbGluZyB0bworICAgZGVzY3JpYmUgbWFueSBibG9icyBhbmQgdHJlZXMsIGluc3RlYWQgb2Ygc2hvd2luZyBvbmx5IGNvbW1pdHMgYXMKKyAgIGFkdmVydGlzZWQgaW4gaXRzIGRvY3VtZW50YXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjA5MzE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy41LnR4dApAQCAtMCwwICsxLDE0IEBACitHaXQgdjEuNy43LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy43LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFmdGVyIGZldGNoaW5nIGZyb20gYSByZW1vdGUgdGhhdCBoYXMgdmVyeSBsb25nIHJlZm5hbWUsIHRoZSByZXBvcnRpbmcKKyAgIG91dHB1dCBjb3VsZCBoYXZlIGNvcnJ1cHRlZCBieSBvdmVycnVubmluZyBhIHN0YXRpYyBidWZmZXIuCisKKyAqICJnaXQgY2hlY2tvdXQiIGFuZCAiZ2l0IG1lcmdlIiB0cmVhdGVkIGluLXRyZWUgLmdpdGlnbm9yZSBhbmQgZXhjbHVkZQorICAgZmlsZSBpbiAkR0lUX0RJUi9pbmZvLyBkaXJlY3RvcnkgaW5jb25zaXN0ZW50bHkgd2hlbiBkZWNpZGluZyB3aGljaAorICAgdW50cmFja2VkIGZpbGVzIGFyZSBpZ25vcmVkIGFuZCBleHBlbmRhYmxlLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGY2MDZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy42LnR4dApAQCAtMCwwICsxLDIwIEBACitHaXQgdjEuNy43LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy43LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb2RlIHRvIGxvb2sgdXAgYXR0cmlidXRlcyBmb3IgcGF0aHMgcmV1c2VkIGVudHJpZXMgZnJvbSBhIHdyb25nCisgICBkaXJlY3Rvcnkgd2hlbiB0d28gcGF0aHMgaW4gcXVlc3Rpb24gYXJlIGluIGFkamFjZW50IGRpcmVjdG9yaWVzIGFuZAorICAgdGhlIG5hbWUgb2YgdGhlIG9uZSBkaXJlY3RvcnkgaXMgYSBwcmVmaXggb2YgdGhlIG90aGVyLgorCisgKiBBIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBkZWVwZXIgaGllcmFyY2h5IGdpdmVuIHRvIHRoZSAiZGlmZi1pbmRleCIgY29tbWFuZCwKKyAgIGUuZy4gImdpdCBkaWZmLWluZGV4IEhFQUQgLS0gJyoudHh0JyIsIGluY29ycmVjdGx5IHJlcG9ydGVkIGFkZGl0aW9ucyBvZgorICAgbWF0Y2hpbmcgZmlsZXMgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGNoYW5nZS4KKworICogV2hlbiBwcm9kdWNpbmcgYSAidGhpbiBwYWNrIiAocHJpbWFyaWx5IHVzZWQgaW4gYnVuZGxlcyBhbmQgc21hcnQKKyAgIEhUVFAgdHJhbnNmZXJzKSBvdXQgb2YgYSBmdWxseSBwYWNrZWQgcmVwb3NpdG9yeSwgd2UgdW5uZWNlc3NhcmlseQorICAgYXZvaWRlZCBzZW5kaW5nIHJlY2VudCBvYmplY3RzIGFzIGEgZGVsdGEgYWdhaW5zdCBvYmplY3RzIHdlIGtub3cKKyAgIHRoZSBvdGhlciBzaWRlIGhhcy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5MTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNy50eHQKQEAgLTAsMCArMSwxMyBAQAorR2l0IHYxLjcuNy43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlcnJvciBtZXNzYWdlIGZyb20gJ2dpdCBidW5kbGUnIGhhZCBhbiB1bm1hdGNoZWQgc2luZ2xlIHF1b3RlIHBhaXIgaW4gaXQuCisKKyAqICdnaXQgZGlmZiAtLWhpc3RvZ3JhbScgb3B0aW9uIHdhcyBub3QgZGVzY3JpYmVkLgorCisgKiAnZ2l0IGltYXAtc2VuZCcgY2FycmllZCBhbiB1bnVzZWQgZGVhZCBjb2RlLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZmYxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LnR4dApAQCAtMCwwICsxLDEzNCBAQAorR2l0IHYxLjcuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBzY3JpcHRpbmcgcGFydCBvZiB0aGUgY29kZWJhc2UgaXMgZ2V0dGluZyBwcmVwYXJlZCBmb3IgaTE4bi9sMTBuLgorCisgKiBJbnRlcml4LCBDeWd3aW4gYW5kIE1pbml4IHBvcnRzIGdvdCB1cGRhdGVkLgorCisgKiBWYXJpb3VzIHVwZGF0ZXMgdG8gZ2l0LXA0IChpbiBjb250cmliLyksIGZhc3QtaW1wb3J0LCBhbmQgZ2l0LXN2bi4KKworICogR2l0d2ViIGxlYXJuZWQgdG8gcmVhZCBmcm9tIC9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mIHdoZW4gaXQgZXhpc3RzLAorICAgYmVmb3JlIHJlYWRpbmcgZnJvbSBnaXR3ZWJfY29uZmlnLnBlcmwgb3IgZnJvbSAvZXRjL2dpdHdlYi5jb25mCisgICAodGhpcyBsYXN0IG9uZSBpcyByZWFkIG9ubHkgd2hlbiBwZXItcmVwb3NpdG9yeSBnaXR3ZWJfY29uZmlnLnBlcmwKKyAgIGRvZXMgbm90IGV4aXN0KS4KKworICogVmFyaW91cyBjb2RlcGF0aHMgdGhhdCBpbnZva2VkIHpsaWIgZGVmbGF0ZS9pbmZsYXRlIGFzc3VtZWQgdGhhdCB0aGVzZQorICAgZnVuY3Rpb25zIGNhbiBjb21wcmVzcyBvciB1bmNvbXByZXNzIG1vcmUgdGhhbiA0R0IgZGF0YSBpbiBvbmUgY2FsbCBvbgorICAgcGxhdGZvcm1zIHdpdGggNjQtYml0IGxvbmcsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogR2l0IG5vdyByZWNvZ25pemVzIGxvb3NlIG9iamVjdHMgd3JpdHRlbiBieSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgdGhhdAorICAgdXNlIGEgbm9uLXN0YW5kYXJkIHdpbmRvdyBzaXplIGZvciB6bGliIGRlZmxhdGlvbiAoZS5nLiBBZ2l0IHJ1bm5pbmcgb24KKyAgIEFuZHJvaWQgd2l0aCA0a2Igd2luZG93KS4gV2UgdXNlZCB0byByZWplY3QgYW55dGhpbmcgdGhhdCB3YXMgbm90CisgICBkZWZsYXRlZCB3aXRoIDMya2Igd2luZG93LgorCisgKiBJbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2Ugb2YgcGFnZXIgYW5kIGNvbG9yaW5nIG9mIHRoZSBvdXRwdXQgaGFzCisgICBiZWVuIGltcHJvdmVkLCBlc3BlY2lhbGx5IHdoZW4gYSBjb21tYW5kIHRoYXQgaXMgbm90IGJ1aWx0LWluIHdhcworICAgaW52b2x2ZWQuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgdG8gcGFzcyB0aGUgIi0tZXhjbHVkZT08cGF0aD4iIG9wdGlvbiB0aHJvdWdoIHRvIHVuZGVybHlpbmcKKyAgICJnaXQgYXBwbHkiLgorCisgKiBZb3UgY2FuIG5vdyBmZWVkIG1hbnkgZW1wdHkgbGluZXMgYmVmb3JlIGZlZWRpbmcgYW4gbWJveCBmaWxlIHRvCisgICAiZ2l0IGFtIi4KKworICogImdpdCBhcmNoaXZlIiBjYW4gYmUgdG9sZCB0byBwYXNzIHRoZSBvdXRwdXQgdG8gZ3ppcCBjb21wcmVzc2lvbiBhbmQKKyAgIHByb2R1Y2UgImFyY2hpdmUudGFyLmd6Ii4KKworICogImdpdCBiaXNlY3QiIGNhbiBiZSB1c2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IChwcm92aWRlZCB0aGF0IHRoZSB0ZXN0CisgICB5b3UgcGVyZm9ybSBwZXIgZWFjaCBpdGVyYXRpb24gZG9lcyBub3QgbmVlZCBhIHdvcmtpbmcgdHJlZSwgb2YKKyAgIGNvdXJzZSkuCisKKyAqIFRoZSBsZW5ndGggb2YgYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWVzIGluICJnaXQgYnJhbmNoIC12IiBvdXRwdXQKKyAgIG5vdyBob25vcnMgdGhlIGNvcmUuYWJicmV2IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgY2hlY2stYXR0ciIgY2FuIHRha2UgcmVsYXRpdmUgcGF0aHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisgKiAiZ2l0IGNoZWNrLWF0dHIiIGxlYXJuZWQgYW4gIi0tYWxsIiBvcHRpb24gdG8gbGlzdCB0aGUgYXR0cmlidXRlcyBmb3IgYQorICAgZ2l2ZW4gcGF0aC4KKworICogImdpdCBjaGVja291dCIgKGJvdGggdGhlIGNvZGUgdG8gdXBkYXRlIHRoZSBmaWxlcyB1cG9uIGNoZWNraW5nIG91dCBhCisgICBkaWZmZXJlbnQgYnJhbmNoIGFuZCB0aGUgY29kZSB0byBjaGVja291dCBhIHNwZWNpZmljIHNldCBvZiBmaWxlcykgbGVhcm5lZAorICAgdG8gc3RyZWFtIHRoZSBkYXRhIGZyb20gb2JqZWN0IHN0b3JlIHdoZW4gcG9zc2libGUsIHdpdGhvdXQgaGF2aW5nIHRvCisgICByZWFkIHRoZSBlbnRpcmUgY29udGVudHMgb2YgYSBmaWxlIGludG8gbWVtb3J5IGZpcnN0LiBBbiBlYXJsaWVyIHJvdW5kCisgICBvZiB0aGlzIGNvZGUgdGhhdCBpcyBub3QgaW4gYW55IHJlbGVhc2VkIHZlcnNpb24gaGFkIGEgbGFyZ2UgbGVhayBidXQKKyAgIG5vdyBpdCBoYXMgYmVlbiBwbHVnZ2VkLgorCisgKiAiZ2l0IGNsb25lIiBjYW4gbm93IHRha2UgYSAiLS1jb25maWcga2V5PXZhbHVlIiBvcHRpb24gdG8gc2V0IHRoZQorICAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGluaXRpYWwgY2hlY2tvdXQuCisKKyAqICJnaXQgY29tbWl0IDxwYXRocz4uLi4iIG5vdyBsZXRzIHlvdSBmZWVkIHJlbGF0aXZlIHBhdGhzcGVjcyB0aGF0CisgICByZWZlciB0byBvdXRzaWRlIHlvdXIgY3VycmVudCBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgZGlmZiAtLXN0YXQiIGxlYXJuZWQgYSAtLXN0YXQtY291bnQgb3B0aW9uIHRvIGxpbWl0IHRoZSBvdXRwdXQgb2YKKyAgIGEgZGlmZnN0YXQgcmVwb3J0LgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgYSAiLS1oaXN0b2dyYW0iIG9wdGlvbiB0byB1c2UgYSBkaWZmZXJlbnQgZGlmZgorICAgZ2VuZXJhdGlvbiBtYWNoaW5lcnkgc3RvbGVuIGZyb20gamdpdCwgd2hpY2ggbWlnaHQgZ2l2ZSBiZXR0ZXIKKyAgIHBlcmZvcm1hbmNlLgorCisgKiAiZ2l0IGRpZmYiIGhhZCBhIHdlaXJkIHdvcnN0IGNhc2UgYmVoYXZpb3VyIHRoYXQgY2FuIGJlIHRyaWdnZXJlZAorICAgd2hlbiBjb21wYXJpbmcgZmlsZXMgd2l0aCBwb3RlbnRpYWxseSBtYW55IHBsYWNlcyB0aGF0IGNvdWxkIG1hdGNoLgorCisgKiAiZ2l0IGZldGNoIiwgImdpdCBwdXNoIiBhbmQgZnJpZW5kcyBubyBsb25nZXIgc2hvdyBjb25uZWN0aW9uCisgICBlcnJvcnMgZm9yIGFkZHJlc3NlcyB0aGF0IGNvdWxkbid0IGJlIGNvbm5lY3RlZCB0byB3aGVuIGF0IGxlYXN0IG9uZQorICAgYWRkcmVzcyBzdWNjZWVkcyAodGhpcyBpcyBhcmd1YWJseSBhIHJlZ3Jlc3Npb24gYnV0IGEgZGVsaWJlcmF0ZQorICAgb25lKS4KKworICogImdpdCBncmVwIiBsZWFybmVkICItLWJyZWFrIiBhbmQgIi0taGVhZGluZyIgb3B0aW9ucywgdG8gbGV0IHVzZXJzIG1pbWljCisgICB0aGUgb3V0cHV0IGZvcm1hdCBvZiAiYWNrIi4KKworICogImdpdCBncmVwIiBsZWFybmVkIGEgIi1XIiBvcHRpb24gdGhhdCBzaG93cyB3aWRlciBjb250ZXh0IHVzaW5nIHRoZSBzYW1lCisgICBsb2dpYyB1c2VkIGJ5ICJnaXQgZGlmZiIgdG8gZGV0ZXJtaW5lIHRoZSBodW5rIGhlYWRlci4KKworICogSW52b2tpbmcgdGhlIGxvdy1sZXZlbCAiZ2l0IGh0dHAtZmV0Y2giIHdpdGhvdXQgIi1hIiBvcHRpb24gKHdoaWNoCisgICBnaXQgaXRzZWxmIG5ldmVyIGRpZC0tbm9ybWFsIHVzZXJzIHNob3VsZCBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAorICAgdGhpcykgaXMgbm93IGRlcHJlY2F0ZWQuCisKKyAqIFRoZSAiLS1kZWNvcmF0ZSIgb3B0aW9uIHRvICJnaXQgbG9nIiBhbmQgaXRzIGZhbWlseSBsZWFybmVkIHRvCisgICBoaWdobGlnaHQgZ3JhZnRlZCBhbmQgcmVwbGFjZWQgY29tbWl0cy4KKworICogImdpdCByZWJhc2UgbWFzdGVyIHRvcGNpIiBubyBsb25nZXIgc3Bld3MgdXNhZ2UgaGludHMgYWZ0ZXIgZ2l2aW5nCisgICB0aGUgImZhdGFsOiBubyBzdWNoIGJyYW5jaDogdG9wY2kiIGVycm9yIG1lc3NhZ2UuCisKKyAqIFRoZSByZWN1cnNpdmUgbWVyZ2Ugc3RyYXRlZ3kgaW1wbGVtZW50YXRpb24gZ290IGEgZmFpcmx5IGxhcmdlCisgICBmaXggZm9yIG1hbnkgY29ybmVyIGNhc2VzIHRoYXQgbWF5IHJhcmVseSBoYXBwZW4gaW4gcmVhbCB3b3JsZAorICAgcHJvamVjdHMgKGl0IGhhcyBiZWVuIHZlcmlmaWVkIHRoYXQgbm9uZSBvZiB0aGUgMTYwMDArIG1lcmdlcyBpbgorICAgdGhlIExpbnV4IGtlcm5lbCBoaXN0b3J5IGJhY2sgdG8gdjIuNi4xMiBpcyBhZmZlY3RlZCB3aXRoIHRoZQorICAgY29ybmVyIGNhc2UgYnVncyB0aGlzIHVwZGF0ZSBmaXhlcykuCisKKyAqICJnaXQgc3Rhc2giIGxlYXJuZWQgYW4gIi0taW5jbHVkZS11bnRyYWNrZWQgb3B0aW9uIi4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiB1c2VkIHRvIHN0b3AgYXQgdGhlIGZpcnN0IGVycm9yIHVwZGF0aW5nIGEKKyAgIHN1Ym1vZHVsZTsgaXQgbm93IGdvZXMgb24gdG8gdXBkYXRlIG90aGVyIHN1Ym1vZHVsZXMgdGhhdCBjYW4gYmUKKyAgIHVwZGF0ZWQsIGFuZCByZXBvcnRzIHRoZSBvbmVzIHdpdGggZXJyb3JzIGF0IHRoZSBlbmQuCisKKyAqICJnaXQgcHVzaCIgY2FuIGJlIHRvbGQgd2l0aCB0aGUgIi0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIiBvcHRpb24gdG8KKyAgIHJlZnVzZSBwdXNoaW5nIG9mIHRoZSBzdXBlcm1vZHVsZSwgaWYgYW55IG9mIGl0cyBzdWJtb2R1bGVzJworICAgY29tbWl0cyBoYXNuJ3QgYmVlbiBwdXNoZWQgb3V0IHRvIHRoZWlyIHJlbW90ZXMuCisKKyAqICJnaXQgdXBsb2FkLXBhY2siIGFuZCAiZ2l0IHJlY2VpdmUtcGFjayIgbGVhcm5lZCB0byBwcmV0ZW5kIHRoYXQgb25seSBhCisgICBzdWJzZXQgb2YgdGhlIHJlZnMgZXhpc3QgaW4gYSByZXBvc2l0b3J5LiBUaGlzIG1heSBoZWxwIGEgc2l0ZSB0bworICAgcHV0IG1hbnkgdGlueSByZXBvc2l0b3JpZXMgaW50byBvbmUgcmVwb3NpdG9yeSAodGhpcyB3b3VsZCBub3QgYmUKKyAgIHVzZWZ1bCBmb3IgbGFyZ2VyIHJlcG9zaXRvcmllcyBhcyByZXBhY2tpbmcgd291bGQgYmUgcHJvYmxlbWF0aWMpLgorCisgKiAiZ2l0IHZlcmlmeS1wYWNrIiBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gdXNlIHRoZSAiaW5kZXgtcGFjayIgbWFjaGluZXJ5CisgICB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IGluIHJlYWRpbmcgb2JqZWN0cyBpbiBwYWNrZmlsZXMuCisKKyAqIHRlc3Qgc2NyaXB0cyBmb3IgZ2l0d2ViIHRyaWVkIHRvIHJ1biBldmVuIHdoZW4gQ0dJLXJlbGF0ZWQgcGVybCBtb2R1bGVzCisgICBhcmUgbm90IGluc3RhbGxlZDsgdGhleSBub3cgZXhpdCBlYXJseSB3aGVuIHRoZSBsYXR0ZXIgYXJlIHVuYXZhaWxhYmxlLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBtaW5vciBtaXNjZWxsYW5lb3VzCitjaGFuZ2VzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCBmaXhlcyBpbiB0aGUgMS43LjYuWCBtYWludGVuYW5jZSB0cmFjayBhcmUKK2luY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworICogImdpdCBicmFuY2ggLW0iIGFuZCAiZ2l0IGNoZWNrb3V0IC1iIiBpbmNvcnJlY3RseSBhbGxvd2VkIHRoZSB0aXAKKyAgIG9mIHRoZSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQgdXBkYXRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZGM5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjEudHh0CkBAIC0wLDAgKzEsMzggQEAKK0dpdCB2MS43LjguMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjgKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBJbiBzb21lIGNvZGVwYXRocyAobm90YWJseSwgY2hlY2tvdXQgYW5kIG1lcmdlKSwgdGhlIGlnbm9yZSBwYXR0ZXJucworICAgcmVjb3JkZWQgaW4gJEdJVF9ESVIvaW5mby9leGNsdWRlIHdlcmUgbm90IGhvbm9yZWQuIFRoZXkgbm93IGFyZS4KKworICogImdpdCBhcHBseSAtLWNoZWNrIiBkaWQgbm90IGVycm9yIG91dCB3aGVuIGdpdmVuIGFuIGVtcHR5IGlucHV0CisgICB3aXRob3V0IGFueSBwYXRjaC4KKworICogImdpdCBhcmNoaXZlIiBtaXN0YWtlbmx5IGFsbG93ZWQgcmVtb3RlIGNsaWVudHMgdG8gYXNrIGZvciBjb21taXRzCisgICB0aGF0IGFyZSBub3QgYXQgdGhlIHRpcCBvZiBhbnkgcmVmLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBhbmQgImdpdCBtZXJnZSIgdHJlYXRlZCBpbi10cmVlIC5naXRpZ25vcmUgYW5kIGV4Y2x1ZGUKKyAgIGZpbGUgaW4gJEdJVF9ESVIvaW5mby8gZGlyZWN0b3J5IGluY29uc2lzdGVudGx5IHdoZW4gZGVjaWRpbmcgd2hpY2gKKyAgIHVudHJhY2tlZCBmaWxlcyBhcmUgaWdub3JlZCBhbmQgZXhwZW5kYWJsZS4KKworICogTEYtdG8tQ1JMRiBzdHJlYW1pbmcgZmlsdGVyIHVzZWQgd2hlbiBjaGVja2luZyBvdXQgYSBsYXJnZS1pc2ggYmxvYgorICAgZmVsbCBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2l0aCBhIHJhcmUgaW5wdXQuCisKKyAqIFRoZSBmdW5jdGlvbiBoZWFkZXIgcGF0dGVybiBmb3IgZmlsZXMgd2l0aCAiZGlmZj1jcHAiIGF0dHJpYnV0ZSBkaWQKKyAgIG5vdCBjb25zaWRlciAidHlwZSAqZnVuY25hbWUodHlwZSBwYXJhbTEsLi4uIiBhcyB0aGUgYmVnaW5uaW5nIG9mIGEKKyAgIGZ1bmN0aW9uLgorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgZGlmZiIgYW5kICJnaXQgc3RhdHVzIiB3aGVuIHRoZXkgZmFpbAorICAgdG8gaW5zcGVjdCBjaGFuZ2VzIGluIHN1Ym1vZHVsZXMgZGlkIG5vdCByZXBvcnQgd2hpY2ggc3VibW9kdWxlIHRoZXkKKyAgIGhhZCB0cm91YmxlIHdpdGguCisKKyAqIEFmdGVyIGZldGNoaW5nIGZyb20gYSByZW1vdGUgdGhhdCBoYXMgdmVyeSBsb25nIHJlZm5hbWUsIHRoZSByZXBvcnRpbmcKKyAgIG91dHB1dCBjb3VsZCBoYXZlIGNvcnJ1cHRlZCBieSBvdmVycnVubmluZyBhIHN0YXRpYyBidWZmZXIuCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBhdm9pZHMgY3JlYXRpbmcgY3ljbGljIGRlcGVuZGVuY2llcyBhbW9uZyBkZWx0YXMKKyAgIHdoZW4gc2VlaW5nIGEgYnJva2VuIHBhY2tmaWxlIHRoYXQgcmVjb3JkcyB0aGUgc2FtZSBvYmplY3QgaW4gYm90aAorICAgdGhlIGRlZmxhdGVkIGZvcm0gYW5kIGFzIGEgZGVsdGEuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YzY2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjIudHh0CkBAIC0wLDAgKzEsNzEgQEAKK0dpdCB2MS43LjguMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjguMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUG9yY2VsYWluIGNvbW1hbmRzIGxpa2UgImdpdCByZXNldCIgZGlkIG5vdCBkaXN0aW5ndWlzaCBkZWxldGlvbnMKKyAgIGFuZCB0eXBlLWNoYW5nZXMgZnJvbSBvcmRpbmFyeSBtb2RpZmljYXRpb24sIGFuZCByZXBvcnRlZCB0aGVtIHdpdGgKKyAgIHRoZSBzYW1lICdNJyBtb25pa2VyLiBUaGV5IG5vdyB1c2UgJ0QnIChmb3IgZGVsZXRpb24pIGFuZCAnVCcgKGZvcgorICAgdHlwZS1jaGFuZ2UpIHRvIG1hdGNoICJnaXQgc3RhdHVzIC1zIiBhbmQgImdpdCBkaWZmIC0tbmFtZS1zdGF0dXMiLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIHBhcnNlciB1c2VkIGZvciBzaXplcyAoZS5nLiBiaWdGaWxlVGhyZXNob2xkKQorICAgZGlkIG5vdCBjb3JyZWN0bHkgaW50ZXJwcmV0ICdnJyBzdWZmaXguCisKKyAqIFRoZSByZXBsYWNlbWVudCBpbXBsZW1lbnRhdGlvbiBmb3Igc25wcmludGYgdXNlZCBvbiBwbGF0Zm9ybXMgd2l0aAorICAgbmF0aXZlIHNucHJpbnRmIHRoYXQgaXMgYnJva2VuIGRpZCBub3QgdXNlIHZhX2NvcHkgY29ycmVjdGx5LgorCisgKiBMRi10by1DUkxGIHN0cmVhbWluZyBmaWx0ZXIgcmVwbGFjZWQgYWxsIExGIHdpdGggQ1JMRiwgd2hpY2ggbWlnaHQKKyAgIGJlIHRlY2huaWNhbGx5IGNvcnJlY3QgYnV0IG5vdCBmcmllbmRseSB0byBwZW9wbGUgd2hvIGFyZSB0cnlpbmcKKyAgIHRvIHJlY292ZXIgZnJvbSBlYXJsaWVyIG1pc3Rha2VzIG9mIHVzaW5nIENSTEYgaW4gdGhlIHJlcG9zaXRvcnkKKyAgIGRhdGEgaW4gdGhlIGZpcnN0IHBsYWNlLiBJdCBub3cgcmVmcmFpbnMgZnJvbSBkb2luZyBzbyBmb3IgTEYgdGhhdAorICAgZm9sbG93cyBhIENSLgorCisgKiBnaXQgbmF0aXZlIGNvbm5lY3Rpb24gZ29pbmcgb3ZlciBUQ1AgKG5vdCBvdmVyIFNTSCkgZGlkIG5vdCBzZXQKKyAgIFNPX0tFRVBBTElWRSBvcHRpb24gd2hpY2ggZmFpbGVkIHRvIHJlY2VpdmUgbGluayBsYXllciBlcnJvcnMuCisKKyAqICJnaXQgYnJhbmNoIC1tIDxjdXJyZW50IGJyYW5jaD4gSEVBRCIgaXMgYW4gb2J2aW91cyBuby1vcCBidXQgd2FzIG5vdAorICAgYWxsb3dlZC4KKworICogImdpdCBjaGVja291dCAtbSIgZGlkIG5vdCByZWNyZWF0ZSB0aGUgY29uZmxpY3RlZCBzdGF0ZSBpbiBhICJib3RoCisgICBzaWRlcyBhZGRlZCwgd2l0aG91dCBhbnkgY29tbW9uIGFuY2VzdG9yIHZlcnNpb24iIGNvbmZsaWN0CisgICBzaXR1YXRpb24uCisKKyAqICJnaXQgY2hlcnJ5LXBpY2sgJGNvbW1pdCIgKG5vdCBhIHJhbmdlKSBjcmVhdGVkIGFuIHVubmVjZXNzYXJ5CisgICBzZXF1ZW5jZXIgc3RhdGUgYW5kIGludGVyZmVyZWQgd2l0aCB2YWxpZCB3b3JrZmxvdyB0byB1c2UgdGhlCisgICBjb21tYW5kIGR1cmluZyBhIHNlc3Npb24gdG8gY2hlcnJ5LXBpY2sgbXVsdGlwbGUgY29tbWl0cy4KKworICogWW91IGNvdWxkIG1ha2UgImdpdCBjb21taXQiIHNlZ2ZhdWx0IGJ5IGdpdmluZyB0aGUgIi0tbm8tbWVzc2FnZSIKKyAgIG9wdGlvbi4KKworICogImZhc3QtaW1wb3J0IiBkaWQgbm90IGNvcnJlY3RseSB1cGRhdGUgYW4gZXhpc3Rpbmcgbm90ZXMgdHJlZSwKKyAgIHBvc3NpYmx5IGNvcnJ1cHRpbmcgdGhlIGZhbi1vdXQuCisKKyAqICJnaXQgZmV0Y2gtcGFjayIgYWNjZXB0ZWQgdW5xdWFsaWZpZWQgcmVmcyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRoCisgICByZWZzLyBieSBtaXN0YWtlIGFuZCBjb21wZW5zYXRlZCBpdCBieSBtYXRjaGluZyB0aGUgcmVmc3BlYyB3aXRoCisgICB0YWlsLW1hdGNoLCB3aGljaCB3YXMgZG91Ymx5IHdyb25nLiBUaGlzIGJyb2tlIGZldGNoaW5nIGZyb20gYQorICAgcmVwb3NpdG9yeSB3aXRoIGEgZnVubnkgbmFtZWQgcmVmICJyZWZzL2Zvby9yZWZzL2hlYWRzL21hc3RlciIgYW5kIGEKKyAgICdtYXN0ZXInIGJyYW5jaCB3aXRoICJnaXQgZmV0Y2gtcGFjayByZWZzL2hlYWRzL21hc3RlciIsIGFzIHRoZQorICAgY29tbWFuZCBpbmNvcnJlY3RseSBjb25zaWRlcmVkIHRoZSBmb3JtZXIgYSAibWF0Y2giLgorCisgKiAiZ2l0IGxvZyAtLWZvbGxvdyIgZGlkIG5vdCBob25vciB0aGUgcmVuYW1lIHRocmVzaG9sZCBzY29yZSBnaXZlbgorICAgd2l0aCB0aGUgLU0gb3B0aW9uIChlLmcuICItTTUwJSIpLgorCisgKiAiZ2l0IG12IiBnYXZlIHN1Ym9wdGltYWwgZXJyb3Ivd2FybmluZyBtZXNzYWdlcyB3aGVuIGl0IG92ZXJ3cml0ZXMKKyAgIHRhcmdldCBmaWxlcy4gSXQgYWxzbyBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gIi12IiBvcHRpb24uCisKKyAqIEF1dGhlbnRpY2F0ZWQgImdpdCBwdXNoIiBvdmVyIGR1bWIgSFRUUCB3ZXJlIGJyb2tlbiB3aXRoIGEgcmVjZW50CisgICBjaGFuZ2UgYW5kIGZhaWxlZCB3aXRob3V0IGFza2luZyBmb3IgcGFzc3dvcmQgd2hlbiB1c2VybmFtZSBpcworICAgZ2l2ZW4uCisKKyAqICJnaXQgcHVzaCIgdG8gYW4gZW1wdHkgcmVwb3NpdG9yeSBvdmVyIEhUVFAgd2VyZSBicm9rZW4gd2l0aCBhCisgICByZWNlbnQgY2hhbmdlIHRvIHRoZSByZWYgaGFuZGxpbmcuCisKKyAqICJnaXQgcHVzaCAtdiIgZm9yZ290IGhvdyB0byBiZSB2ZXJib3NlIGJ5IG1pc3Rha2UuIEl0IG5vdyBwcm9wZXJseQorICAgYmVjb21lcyB2ZXJib3NlIHdoZW4gYXNrZWQgdG8uCisKKyAqIFdoZW4gYSAicmV3b3JkIiBhY3Rpb24gaW4gImdpdCByZWJhc2UgLWkiIGZhaWxlZCB0byBydW4gImNvbW1pdCAtLWFtZW5kIiwKKyAgIHdlIGRpZCBub3QgZ2l2ZSB0aGUgY29udHJvbCBiYWNrIHRvIHRoZSB1c2VyIHRvIHJlc29sdmUgdGhlIHNpdHVhdGlvbiwgYW5kCisgICBpbnN0ZWFkIGtlcHQgdGhlIG9yaWdpbmFsIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyNzE0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMy50eHQKQEAgLTAsMCArMSwxNiBAQAorR2l0IHYxLjcuOC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBdHRlbXB0IHRvIGZldGNoIGZyb20gYW4gZW1wdHkgZmlsZSBwcmV0ZW5kaW5nIGl0IHRvIGJlIGEgYnVuZGxlIGRpZAorICAgbm90IGVycm9yIG91dCBjb3JyZWN0bHkuCisKKyAqIGdpdHdlYiBkaWQgbm90IGNvcnJlY3RseSBmYWxsIGJhY2sgdG8gY29uZmlndXJlZCAkZmFsbGJhY2tfZW5jb2RpbmcKKyAgIHRoYXQgaXMgbm90ICdsYXRpbjEnLgorCisgKiAiZ2l0IGNsb25lIC0tZGVwdGggJG4iIGRpZCBub3QgY2F0Y2ggYSBub24tbnVtYmVyIGdpdmVuIGFzICRuIGFzIGFuCisgICBlcnJvci4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlYmRiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNC50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IHYxLjcuOC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY29kZSB0byBsb29rIHVwIGF0dHJpYnV0ZXMgZm9yIHBhdGhzIHJldXNlZCBlbnRyaWVzIGZyb20gYSB3cm9uZworICAgZGlyZWN0b3J5IHdoZW4gdHdvIHBhdGhzIGluIHF1ZXN0aW9uIGFyZSBpbiBhZGphY2VudCBkaXJlY3RvcmllcyBhbmQKKyAgIHRoZSBuYW1lIG9mIHRoZSBvbmUgZGlyZWN0b3J5IGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlci4KKworICogQSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgZGVlcGVyIGhpZXJhcmNoeSBnaXZlbiB0byB0aGUgImRpZmYtaW5kZXgiIGNvbW1hbmQsCisgICBlLmcuICJnaXQgZGlmZi1pbmRleCBIRUFEIC0tICcqLnR4dCciLCBpbmNvcnJlY3RseSByZXBvcnRlZCBhZGRpdGlvbnMgb2YKKyAgIG1hdGNoaW5nIGZpbGVzIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2UuCisKKyAqIFdoZW4gcHJvZHVjaW5nIGEgInRoaW4gcGFjayIgKHByaW1hcmlseSB1c2VkIGluIGJ1bmRsZXMgYW5kIHNtYXJ0CisgICBIVFRQIHRyYW5zZmVycykgb3V0IG9mIGEgZnVsbHkgcGFja2VkIHJlcG9zaXRvcnksIHdlIHVubmVjZXNzYXJpbHkKKyAgIGF2b2lkZWQgc2VuZGluZyByZWNlbnQgb2JqZWN0cyBhcyBhIGRlbHRhIGFnYWluc3Qgb2JqZWN0cyB3ZSBrbm93CisgICB0aGUgb3RoZXIgc2lkZSBoYXMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBwcm9wZXJseSB0cmVhdCBzZW5kZW1haWwubXVsdGllZGl0IGFzIGEKKyAgIGJvb2xlYW4gKGUuZy4gc2V0dGluZyBpdCB0byAiZmFsc2UiIGRpZCBub3QgdHVybiBpdCBvZmYpLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFmZDJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC41LnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuNy44LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy44LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIERlcGVuZGVuY3kgb24gb3VyIHRocmVhZC11dGlscy5oIGhlYWRlciBmaWxlIHdhcyBtaXNzaW5nIGZvcgorICAgb2JqZWN0cyB0aGF0IGRlcGVuZCBvbiBpdCBpbiB0aGUgTWFrZWZpbGUuCisKKyAqICJnaXQgYW0iIHdoZW4gZmVkIGFuIGVtcHR5IGZpbGUgZGlkIG5vdCBjb3JyZWN0bHkgZmluaXNoIHJlYWRpbmcgaXQKKyAgIHdoZW4gaXQgYXR0ZW1wdHMgdG8gZ3Vlc3MgdGhlIGlucHV0IGZvcm1hdC4KKworICogImdpdCBncmVwIC1QIiAod2hlbiBQQ1JFIGlzIGVuYWJsZWQgaW4gdGhlIGJ1aWxkKSBkaWQgbm90IG1hdGNoIHRoZQorICAgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSBsaW5lIGNvcnJlY3RseSB3aXRoIF4gYW5kICQuCisKKyAqICJnaXQgcmViYXNlIC1tIiB0cmllZCB0byBydW4gImdpdCBub3RlcyBjb3B5IiBuZWVkbGVzc2x5IHdoZW4KKyAgIG5vdGhpbmcgd2FzIHJld3JpdHRlbi4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliZjJiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNi50eHQKQEAgLTAsMCArMSwyMiBAQAorR2l0IHYxLjcuOC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlcnJvciBtZXNzYWdlIGZyb20gJ2dpdCBidW5kbGUnIGhhZCBhbiB1bm1hdGNoZWQgc2luZ2xlIHF1b3RlIHBhaXIgaW4gaXQuCisKKyAqICdnaXQgZGlmZiAtLWhpc3RvZ3JhbScgb3B0aW9uIHdhcyBub3QgZGVzY3JpYmVkLgorCisgKiBEb2N1bWVudGF0aW9uIGZvciAnZ2l0IHJldi1saXN0JyBoYWQgbWlub3IgZm9ybWF0dGluZyBlcnJvcnMuCisKKyAqICdnaXQgaW1hcC1zZW5kJyBjYXJyaWVkIGFuIHVudXNlZCBkZWFkIGNvZGUuCisKKyAqIFRoZSB3YXkgJ2dpdCBmZXRjaCcgaW1wbGVtZW50ZWQgaXRzIGNvbm5lY3Rpdml0eSBjaGVjayBvdmVyCisgICByZWNlaXZlZCBvYmplY3RzIHdhcyBvdmVybHkgcGVzc2ltaXN0aWMsIGFuZCB3YXN0ZWQgYSBsb3Qgb2YKKyAgIGN5Y2xlcy4KKworICogVmFyaW91cyBtaW5vciBiYWNrcG9ydHMgb2YgZml4ZXMgZnJvbSB0aGUgJ21hc3RlcicgYW5kIHRoZSAnbWFpbnQnCisgICBicmFuY2guCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5MzExMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0CkBAIC0wLDAgKzEsMTYxIEBACitHaXQgdjEuNy44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuNworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogU29tZSBnaXQtc3ZuLCBnaXQtZ3VpLCBnaXQtcDQgKGluIGNvbnRyaWIpIGFuZCBtc3lzZ2l0IHVwZGF0ZXMuCisKKyAqIFVwZGF0ZXMgdG8gYmFzaCBjb21wbGV0aW9uIHNjcmlwdHMuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgaGFzIGJlZW4gdGF1Z2h0IHRvIHRha2UgYWR2YW50YWdlIG9mIGNvbXB1dGVkCisgICBkZXBlbmRlbmN5IGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaXQuCisKKyAqIFRoZSBkYXRlIHBhcnNlciBub3cgYWNjZXB0cyB0aW1lem9uZSBkZXNpZ25hdG9ycyB0aGF0IGxhY2sgbWludXRlcworICAgcGFydCBhbmQgYWxzbyBoYXMgYSBjb2xvbiBiZXR3ZWVuICJoaDptbSIuCisKKyAqIFRoZSBjb250ZW50cyBvZiB0aGUgL2V0Yy9tYWlsbmFtZSBmaWxlLCBpZiBleGlzdHMsIGlzIHVzZWQgYXMgdGhlCisgICBkZWZhdWx0IHZhbHVlIG9mIHRoZSBob3N0bmFtZSBwYXJ0IG9mIHRoZSBjb21taXR0ZXIvYXV0aG9yIGUtbWFpbC4KKworICogImdpdCBhbSIgbGVhcm5lZCBob3cgdG8gcmVhZCBmcm9tIHBhdGNoZXMgZ2VuZXJhdGVkIGJ5IEhnLgorCisgKiAiZ2l0IGFyY2hpdmUiIHRhbGtpbmcgd2l0aCBhIHJlbW90ZSByZXBvc2l0b3J5IGNhbiByZXBvcnQgZXJyb3JzCisgICBmcm9tIHRoZSByZW1vdGUgc2lkZSBpbiBhIG1vcmUgaW5mb3JtYXRpdmUgd2F5LgorCisgKiAiZ2l0IGJyYW5jaCIgbGVhcm5lZCBhbiBleHBsaWNpdCAtLWxpc3Qgb3B0aW9uIHRvIGFzayBmb3IgYnJhbmNoZXMKKyAgIGxpc3RlZCwgb3B0aW9uYWxseSB3aXRoIGEgZ2xvYiBtYXRjaGluZyBwYXR0ZXJuIHRvIGxpbWl0IGl0cyBvdXRwdXQuCisKKyAqICJnaXQgY2hlY2stYXR0ciIgbGVhcm5lZCAiLS1jYWNoZWQiIG9wdGlvbiB0byBsb29rIGF0IC5naXRhdHRyaWJ1dGVzCisgICBmaWxlcyBmcm9tIHRoZSBpbmRleCwgbm90IGZyb20gdGhlIHdvcmtpbmcgdHJlZS4KKworICogVmFyaWFudHMgb2YgImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IiB0aGF0IHRha2UgbXVsdGlwbGUKKyAgIGNvbW1pdHMgbGVhcm5lZCB0byAiLS1jb250aW51ZSIgYW5kICItLWFib3J0Ii4KKworICogImdpdCBkYWVtb24iIGdpdmVzIG1vcmUgaHVtYW4gcmVhZGFibGUgZXJyb3IgbWVzc2FnZXMgdG8gY2xpZW50cworICAgdXNpbmcgRVJSIHBhY2tldHMgd2hlbiBhcHByb3ByaWF0ZS4KKworICogRXJyb3JzIGF0IHRoZSBuZXR3b3JrIGxheWVyIGlzIGxvZ2dlZCBieSAiZ2l0IGRhZW1vbiIuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCAiLS1taW5pbWFsIiBvcHRpb24gdG8gc3BlbmQgZXh0cmEgY3ljbGVzIHRvIGNvbWUKKyAgIHVwIHdpdGggYSBtaW5pbWFsIHBhdGNoIG91dHB1dC4KKworICogImdpdCBkaWZmIiBsZWFybmVkICItLWZ1bmN0aW9uLWNvbnRleHQiIG9wdGlvbiB0byBzaG93IHRoZSB3aG9sZQorICAgZnVuY3Rpb24gYXMgY29udGV4dCB0aGF0IHdhcyBhZmZlY3RlZCBieSBhIGNoYW5nZS4KKworICogImdpdCBkaWZmdG9vbCIgY2FuIGJlIHRvbGQgdG8gc2tpcCBsYXVuY2hpbmcgdGhlIHRvb2wgZm9yIGEgcGF0aCBieQorICAgYW5zd2VyaW5nICduJyB0byBpdHMgcHJvbXB0LgorCisgKiAiZ2l0IGZldGNoIiBsZWFybmVkIHRvIGhvbm9yIHRyYW5zZmVyLmZzY2tvYmplY3RzIGNvbmZpZ3VyYXRpb24gdG8KKyAgIHZhbGlkYXRlIHRoZSBvYmplY3RzIHRoYXQgd2VyZSByZWNlaXZlZCBmcm9tIHRoZSBvdGhlciBlbmQsIGp1c3QgbGlrZQorICAgImdpdCByZWNlaXZlLXBhY2siICh0aGUgcmVjZWl2aW5nIGVuZCBvZiAiZ2l0IHB1c2giKSBkb2VzLgorCisgKiAiZ2l0IGZldGNoIiBtYWtlcyBzdXJlIHRoYXQgdGhlIHNldCBvZiBvYmplY3RzIGl0IHJlY2VpdmVkIGZyb20gdGhlCisgICBvdGhlciBlbmQgYWN0dWFsbHkgY29tcGxldGVzIHRoZSBoaXN0b3J5IGJlZm9yZSB1cGRhdGluZyB0aGUgcmVmcy4KKyAgICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIHJlY2VpdmluZyBlbmQgb2YgImdpdCBwdXNoIikgbGVhcm5lZCB0byBkbyB0aGUKKyAgIHNhbWUuCisKKyAqICJnaXQgZmV0Y2giIGxlYXJuZWQgdGhhdCBmZXRjaGluZy9jbG9uaW5nIGZyb20gYSByZWd1bGFyIGZpbGUgb24gdGhlCisgICBmaWxlc3lzdGVtIGlzIG5vdCBuZWNlc3NhcmlseSBhIHJlcXVlc3QgdG8gdW5wYWNrIGEgYnVuZGxlIGZpbGU7IHRoZQorICAgZmlsZSBjb3VsZCBiZSAiLmdpdCIgd2l0aCAiZ2l0ZGlyOiA8cGF0aD4iIGluIGl0LgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgbGVhcm5lZCAiJShjb250ZW50czpzdWJqZWN0KSIsICIlKGNvbnRlbnRzOmJvZHkpIgorICAgYW5kICIlKGNvbnRlbnRzOnNpZ25hdHVyZSkiLiBUaGUgbGFzdCBvbmUgaXMgdXNlZnVsIGZvciBzaWduZWQgdGFncy4KKworICogImdpdCBncmVwIiB1c2VkIHRvIGluY29ycmVjdGx5IHBheSBhdHRlbnRpb24gdG8gLmdpdGlnbm9yZSBmaWxlcworICAgc2NhdHRlcmVkIGluIHRoZSBkaXJlY3RvcnkgaXQgd2FzIHdvcmtpbmcgaW4gZXZlbiB3aGVuICItLW5vLWluZGV4IgorICAgb3B0aW9uIHdhcyB1c2VkLiBJdCBubyBsb25nZXIgZG9lcyB0aGlzLiBUaGUgIi0tZXhjbHVkZS1zdGFuZGFyZCIKKyAgIG9wdGlvbiBuZWVkcyB0byBiZSBnaXZlbiB0byBleHBsaWNpdGx5IGFjdGl2YXRlIHRoZSBpZ25vcmUKKyAgIG1lY2hhbmlzbS4KKworICogImdpdCBncmVwIiBsZWFybmVkICItLXVudHJhY2tlZCIgb3B0aW9uLCB3aGVyZSBnaXZlbiBwYXR0ZXJucyBhcmUKKyAgICBzZWFyY2hlZCBpbiB1bnRyYWNrZWQgKGJ1dCBub3QgaWdub3JlZCkgZmlsZXMgYXMgd2VsbCBhcyB0cmFja2VkCisgICAgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgc28gdGhhdCBtYXRjaGVzIGluIG5ldyBidXQgbm90IHlldAorICAgIGFkZGVkIGZpbGVzIGRvIG5vdCBnZXQgbWlzc2VkLgorCisgKiBUaGUgcmVjdXJzaXZlIG1lcmdlIGJhY2tlbmQgbm8gbG9uZ2VyIGxvb2tzIGZvciBtZWFuaW5nbGVzcworICAgZXhpc3RpbmcgbWVyZ2VzIGluIHN1Ym1vZHVsZXMgdW5sZXNzIGluIHRoZSBvdXRlcm1vc3QgbWVyZ2UuCisKKyAqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBsZWFybmVkICItLWNoaWxkcmVuIiBvcHRpb24uCisKKyAqICJnaXQgbHMtcmVtb3RlIiBsZWFybmVkIHRvIHJlc3BvbmQgdG8gIi1oIihlbHApIHJlcXVlc3RzLgorCisgKiAibWVkaWF3aWtpIiByZW1vdGUgaGVscGVyIGNhbiBpbnRlcmFjdCB3aXRoIChzdXJwcmlzZSEpIE1lZGlhV2lraQorICAgd2l0aCAiZ2l0IGZldGNoIiAmICJnaXQgcHVzaCIuCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgdGhlICItLWVkaXQiIG9wdGlvbiB0byBhbGxvdyB1c2VycyB0byBlZGl0IHRoZQorICAgbWVyZ2UgY29tbWl0IGxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgY2FuIGJlIHRvbGQgdG8gdXNlIHNwZWNpYWwgcHVycG9zZSBlZGl0b3Igc3VpdGFibGUKKyAgIG9ubHkgZm9yIGl0cyBpbnNuIHNoZWV0IHZpYSBzZXF1ZW5jZS5lZGl0b3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIHRvIHJlc3BvbmQgdG8gIi1oIihlbHApIHJlcXVlc3RzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGFsbG93cyB0aGUgdmFsdWUgZ2l2ZW4gdG8gc2VuZGVtYWlsLmFsaWFzZmlsZSB0byBiZWdpbgorICAgd2l0aCAifi8iIHRvIHJlZmVyIHRvIHRoZSAkSE9NRSBkaXJlY3RvcnkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZm9yY2VzIHVzZSBvZiBBdXRoZW46OlNBU0w6OlBlcmwgdG8gd29yayBhcm91bmQKKyAgIGlzc3VlcyBiZXR3ZWVuIEF1dGhlbjo6U0FTTDo6Q3lydXMgYW5kIEFVVEggUExBSU4vTE9HSU4uCisKKyAqICJnaXQgc3Rhc2giIGxlYXJuZWQgIi0taW5jbHVkZS11bnRyYWNrZWQiIG9wdGlvbiB0byBzdGFzaCBhd2F5CisgICB1bnRyYWNrZWQvaWdub3JlZCBjcnVmdCBmcm9tIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqICJnaXQgc3VibW9kdWxlIGNsb25lIiBkb2VzIG5vdCBsZWFrIGFuIGVycm9yIG1lc3NhZ2UgdG8gdGhlIFVJCisgICBsZXZlbCB1bm5lY2Vzc2FyaWx5IGFueW1vcmUuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgbGVhcm5lZCB0byBob25vciAibm9uZSIgYXMgdGhlIHZhbHVlIGZvcgorICAgc3VibW9kdWxlLjxuYW1lPi51cGRhdGUgdG8gc3BlY2lmeSB0aGF0IHRoZSBuYW1lZCBzdWJtb2R1bGUgc2hvdWxkCisgICBub3QgYmUgY2hlY2tlZCBvdXQgYnkgZGVmYXVsdC4KKworICogV2hlbiBwb3B1bGF0aW5nIGEgbmV3IHN1Ym1vZHVsZSBkaXJlY3Rvcnkgd2l0aCAiZ2l0IHN1Ym1vZHVsZSBpbml0IiwKKyAgIHRoZSAkR0lUX0RJUiBtZXRhaW5mb3JtYXRpb24gZGlyZWN0b3J5IGZvciBzdWJtb2R1bGVzIGlzIGNyZWF0ZWQgaW5zaWRlCisgICAkR0lUX0RJUi9tb2R1bGVzLzxuYW1lPi8gZGlyZWN0b3J5IG9mIHRoZSBzdXBlcnByb2plY3QgYW5kIHJlZmVyZW5jZWQKKyAgIHZpYSB0aGUgZ2l0ZmlsZSBtZWNoYW5pc20uIFRoaXMgaXMgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBzd2l0Y2gKKyAgIGJldHdlZW4gY29tbWl0cyBpbiB0aGUgc3VwZXJwcm9qZWN0IHRoYXQgaGFzIGFuZCBkb2VzIG5vdCBoYXZlIHRoZQorICAgc3VibW9kdWxlIGluIHRoZSB0cmVlIHdpdGhvdXQgcmUtY2xvbmluZy4KKworICogImdpdHdlYiIgbGVha2VkIHVuZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMgZnJvbSBzeW50YXggaGlsaXRlcgorICAgb3V0cHV0cy4KKworICogImdpdHdlYiIgY2FuIGJlIHRvbGQgdG8gZ2l2ZSBjdXN0b20gc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIEhUTUwKKyAgIEhFQUQgZWxlbWVudC4KKworICogImdpdHdlYiIgbm93IGhhcyBpdHMgb3duIG1hbnVhbCBwYWdlcy4KKworCitBbHNvIGNvbnRhaW5zIG90aGVyIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbWlub3IgY29kZSBjbGVhbnVwcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgZml4ZXMgaW4gdGhlIDEuNy43LlggbWFpbnRlbmFuY2UgdHJhY2sgYXJlCitpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuCisKKyAqIEhUVFAgdHJhbnNwb3J0IGRpZCBub3QgdXNlIHB1c2h1cmwgY29ycmVjdGx5LCBhbmQgYWxzbyBkaWQgbm90IHRlbGwKKyAgIHdoYXQgaG9zdCBpdCBpcyB0cnlpbmcgdG8gYXV0aGVudGljYXRlIHdpdGggd2hlbiBhc2tpbmcgZm9yCisgICBjcmVkZW50aWFscy4KKyAgIChtZXJnZSBkZWJhNDkzIGprL2h0dHAtYXV0aCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYmxhbWUiIHdhcyBhYm9ydGVkIGlmIHN0YXJ0ZWQgZnJvbSBhbiB1bmNvbW1pdHRlZCBjb250ZW50IGFuZAorICAgdGhlIHBhdGggaGFkIHRoZSB0ZXh0Y29udiBmaWx0ZXIgaW4gZWZmZWN0LgorICAgKG1lcmdlIDg1MTgwODggc3MvYmxhbWUtdGV4dGNvbnYtZmFrZS13b3JraW5nLXRyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBZGRpbmcgbWFueSByZWZzIHRvIHRoZSBsb2NhbCByZXBvc2l0b3J5IGluIG9uZSBnbyAoZS5nLiAiZ2l0IGZldGNoIgorICAgdGhhdCBmZXRjaGVzIG1hbnkgdGFncykgYW5kIGxvb2tpbmcgdXAgYSByZWYgYnkgbmFtZSBpbiBhIHJlcG9zaXRvcnkKKyAgIHdpdGggdG9vIG1hbnkgcmVmcyB3ZXJlIHVubmVjZXNzYXJpbHkgc2xvdy4KKyAgIChtZXJnZSAxN2Q2OGE1NGQganAvZ2V0LXJlZi1kaXItdW5zb3J0ZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZXBvcnQgZnJvbSAiZ2l0IGNvbW1pdCIgb24gdW50cmFja2VkIGZpbGVzIHdhcyBjb25mdXNlZCB1bmRlcgorICAgY29yZS5pZ25vcmVjYXNlIG9wdGlvbi4KKyAgIChtZXJnZSAzOTVjNzM1NiBqay9uYW1lLWhhc2gtZGlyZW50IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZSIgZGlkIG5vdCB1bmRlcnN0YW5kICI6LzxwYXR0ZXJuPiIgYXMgYSB3YXkgdG8gbmFtZSBhIGNvbW1pdC4KKworICIgImdpdCBwdXNoIiBvbiB0aGUgcmVjZWl2aW5nIGVuZCB1c2VkIHRvIGNhbGwgcG9zdC1yZWNlaXZlIGFuZCBwb3N0LXVwZGF0ZQorICAgaG9va3MgZm9yIGF0dGVtcHRlZCByZW1vdmFsIG9mIG5vbi1leGlzdGluZyByZWZzLgorICAgKG1lcmdlIDE2MGI4MWVkIHBoL3B1c2gtdG8tZGVsZXRlLW5vdGhpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIZWxwIHRleHQgZm9yICJnaXQgcmVtb3RlIHNldC11cmwiIGFuZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMiCisgICB3ZXJlIG1pc3NwZWxsZWQuCisgICAobWVyZ2UgYzQ5OTA0ZSBmYy9yZW1vdGUtc2V0dXJsLXVzYWdlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjU2Y2RmMCBqYy9yZW1vdGUtc2V0YnJhbmNoZXMtdXNhZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NTcxODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjEudHh0CkBAIC0wLDAgKzEsNjMgQEAKK0dpdCB2MS43LjkuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgbWFrZWZpbGUgYWxsb3dlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBYIHNlZXAgaW50byBpdCByZXN1bHQgaW4KKyAgIGNvbW1hbmQgbmFtZXMgc3VmZml4ZWQgd2l0aCB1bm5lY2Vzc2FyeSBzdHJpbmdzLgorCisgKiBUaGUgc2V0IG9mIGluY2x1ZGVkIGhlYWRlciBmaWxlcyBpbiBjb21wYXQvaW5ldC17bnRvcCxwdG9ufQorICAgd3JhcHBlcnMgd2FzIHVwZGF0ZWQgZm9yIFdpbmRvd3Mgc29tZSB0aW1lIGFnbywgYnV0IGluIGEgd2F5IHRoYXQKKyAgIGJyb2tlIFNvbGFyaXMgYnVpbGQuCisKKyAqIHJwbWJ1aWxkIG5vdGljZWQgYW4gdW5wYWNrYWdlZCBidXQgaW5zdGFsbGVkICoubW8gZmlsZSBhbmQgZmFpbGVkLgorCisgKiBTdWJwcm9jZXNzZXMgc3Bhd25lZCBmcm9tIHZhcmlvdXMgZ2l0IHByb2dyYW1zIHdlcmUgb2Z0ZW4gbGVmdCBydW5uaW5nCisgICB0byBjb21wbGV0aW9uIGV2ZW4gd2hlbiB0aGUgdG9wLWxldmVsIHByb2Nlc3Mgd2FzIGtpbGxlZC4KKworICogImdpdCBhZGQgLWUiIGxlYXJuZWQgbm90IHRvIHNob3cgYSBkaWZmIGZvciBhbiBvdGhlcndpc2UgdW5tb2RpZmllZAorICAgc3VibW9kdWxlIHRoYXQgb25seSBoYXMgdW5jb21taXR0ZWQgbG9jYWwgY2hhbmdlcyBpbiB0aGUgcGF0Y2gKKyAgIHByZXBhcmVkIGJ5IGZvciB0aGUgdXNlciB0byBlZGl0LgorCisgKiBUeXBvIGluICJnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiBteS10cG9pYyIgd2FzIG5vdCBkaWFnbm9zZWQuCisKKyAqIFVzaW5nICJnaXQgZ3JlcCAtbC8tTCIgdG9nZXRoZXIgd2l0aCBvcHRpb25zIC1XIG9yIC0tYnJlYWsgbWF5IG5vdAorICAgbWFrZSBtdWNoIHNlbnNlIGFzIHRoZSBvdXRwdXQgaXMgdG8gb25seSBjb3VudCB0aGUgbnVtYmVyIG9mIGhpdHMKKyAgIGFuZCB0aGVyZSBpcyBubyBwbGFjZSBmb3IgZmlsZSBicmVha3MsIGJ1dCB0aGUgbGF0dGVyIG9wdGlvbnMgbWFkZQorICAgIi1sLy1MIiB0byBtaXNjb3VudCB0aGUgaGl0cy4KKworICogImdpdCBsb2cgLS1maXJzdC1wYXJlbnQgJHBhdGhzcGVjIiBkaWQgbm90IHN0YXkgb24gdGhlIGZpcnN0IHBhcmVudAorICAgY2hhaW4gYW5kIHZlZXJlZCBpbnRvIHNpZGUgYnJhbmNoIGZyb20gd2hpY2ggdGhlIHdob2xlIGNoYW5nZSB0byB0aGUKKyAgIHNwZWNpZmllZCBwYXRocyBjYW1lLgorCisgKiAiZ2l0IG1lcmdlIC0tbm8tZWRpdCAkdGFnIiBmYWlsZWQgdG8gaG9ub3IgdGhlIC0tbm8tZWRpdCBvcHRpb24uCisKKyAqICJnaXQgbWVyZ2UgLS1mZi1vbmx5ICR0YWciIGZhaWxlZCBiZWNhdXNlIGl0IGNhbm5vdCByZWNvcmQgdGhlCisgICByZXF1aXJlZCBtZXJnZXRhZyB3aXRob3V0IGNyZWF0aW5nIGEgbWVyZ2UsIGJ1dCB0aGlzIGlzIHNvIGNvbW1vbgorICAgb3BlcmF0aW9uIGZvciBicmFuY2ggdGhhdCBpcyB1c2VkIF9vbmx5XyB0byBmb2xsb3cgdGhlIHVwc3RyZWFtLCBzbworICAgaXQgd2FzIGNoYW5nZWQgdG8gYWxsb3cgZmFzdC1mb3J3YXJkaW5nIHdpdGhvdXQgcmVjb3JkaW5nIHRoZSBtZXJnZXRhZy4KKworICogImdpdCBtZXJnZXRvb2wiIG5vdyBnaXZlcyBhbiBlbXB0eSBmaWxlIGFzIHRoZSBjb21tb24gYmFzZSB2ZXJzaW9uCisgICB0byB0aGUgYmFja2VuZCB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgImJvdGggc2lkZXMgYWRkZWQsIGRpZmZlcmVudGx5IgorICAgY2FzZS4KKworICogImdpdCBwdXNoIC1xIiB3YXMgbm90IHN1ZmZpY2llbnRseSBxdWlldC4KKworICogV2hlbiAiZ2l0IHB1c2giIGZhaWxzIHRvIHVwZGF0ZSBhbnkgcmVmcywgdGhlIGNsaWVudCBzaWRlIGRpZCBub3QKKyAgIHJlcG9ydCBhbiBlcnJvciBjb3JyZWN0bHkgdG8gdGhlIGVuZCB1c2VyLgorCisgKiAicmViYXNlIiBhbmQgImNvbW1pdCAtLWFtZW5kIiBmYWlsZWQgdG8gd29yayBvbiBjb21taXRzIHdpdGggYW5jaWVudAorICAgdGltZXN0YW1wcyBuZWFyIHllYXIgMTk3MC4KKworICogV2hlbiBhc2tpbmcgZm9yIGEgdGFnIHRvIGJlIHB1bGxlZCwgInJlcXVlc3QtcHVsbCIgZGlkIG5vdCBzaG93IHRoZQorICAgbmFtZSBvZiB0aGUgdGFnIHByZWZpeGVkIHdpdGggInRhZ3MvIiwgd2hpY2ggd291bGQgaGF2ZSBoZWxwZWQgb2xkZXIKKyAgIGNsaWVudHMuCisKKyAqICJnaXQgc3VibW9kdWxlIGFkZCAkcGF0aCIgZm9yZ290IHRvIHJlY29tcHV0ZSB0aGUgbmFtZSB0byBiZSBzdG9yZWQKKyAgIGluIC5naXRtb2R1bGVzIHdoZW4gdGhlIHN1Ym1vZHVsZSBhdCAkcGF0aCB3YXMgb25jZSBhZGRlZCB0byB0aGUKKyAgIHN1cGVycHJvamVjdCBhbmQgYWxyZWFkeSBpbml0aWFsaXplZC4KKworICogTWFueSBzbWFsbCBjb3JuZXIgY2FzZSBidWdzIG9uICJnaXQgdGFnIC1uIiB3YXMgY29ycmVjdGVkLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTAwZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4yLnR4dApAQCAtMCwwICsxLDY5IEBACitHaXQgdjEuNy45LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBkaWQgbm90IGxpa2UgYSBwYXR0ZXJuIHRoYXQKKyAgIGJlZ2lucyB3aXRoIGEgZGFzaCB0byBiZSBwYXNzZWQgdG8gX19naXRfcHMxIGhlbHBlciBmdW5jdGlvbi4KKworICogQWRhcHRhdGlvbiBvZiB0aGUgYmFzaCBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGZvciB6c2gKKyAgIGluY29ycmVjdGx5IGxpc3RlZCBhbGwgc3ViY29tbWFuZHMgd2hlbiAiZ2l0IDxUQUI+PFRBQj4iIHdhcyBnaXZlbgorICAgdG8gYXNrIGZvciBsaXN0IG9mIHBvcmNlbGFpbiBzdWJjb21tYW5kcy4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBmb3IgcHJvZmlsZS1kaXJlY3RlZCBvcHRpbWl6ZWQgYmluYXJ5IHdhcyBub3QKKyAgIHdvcmtpbmcgdmVyeSB3ZWxsLgorCisgKiBTb21lIHN5c3RlbXMgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgLWxjaGFyc2V0IHRvIGdldCBsb2NhbGVfY2hhcnNldCgpLgorCisgKiB0NTU0MSBpZ25vcmVkIHVzZXItc3VwcGxpZWQgcG9ydCBudW1iZXIgdXNlZCBmb3IgSFRUUCBzZXJ2ZXIgdGVzdGluZy4KKworICogVGhlIGVycm9yIG1lc3NhZ2UgZW1pdHRlZCB3aGVuIHdlIHNlZSBhbiBlbXB0eSBsb29zZSBvYmplY3Qgd2FzCisgICBub3QgcGhyYXNlZCBjb3JyZWN0bHkuCisKKyAqIFRoZSBjb2RlIHRvIGFzayBmb3IgcGFzc3dvcmQgZGlkIG5vdCBmYWxsIGJhY2sgdG8gdGhlIHRlcm1pbmFsCisgICBpbnB1dCB3aGVuIEdJVF9BU0tQQVNTIGlzIHNldCBidXQgZG9lcyBub3Qgd29yayAoZS5nLiBsYWNrIG9mIFgKKyAgIHdpdGggR1VJIGFza3Bhc3MgaGVscGVyKS4KKworICogV2UgZmFpbGVkIHRvIGdpdmUgdGhlIHRydWUgdGVybWluYWwgd2lkdGggdG8gYW55IHN1YmNvbW1hbmQgd2hlbgorICAgdGhleSBhcmUgaW52b2tlZCB3aXRoIHRoZSBwYWdlciwgaS5lLiAiZ2l0IC1wIGNtZCIuCisKKyAqIG1hcF91c2VyKCkgd2FzIG5vdCByZXdyaXRpbmcgaXRzIG91dHB1dCBjb3JyZWN0bHksIHdoaWNoIHJlc3VsdGVkCisgICBpbiB0aGUgdXNlciB2aXNpYmxlIHN5bXB0b20gdGhhdCAiZ2l0IGJsYW1lIC1lIiBzb21ldGltZXMgc2hvd2VkCisgICBleGNlc3MgJz4nIGF0IHRoZSBlbmQgb2YgZW1haWwgYWRkcmVzc2VzLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1iIiBkaWQgbm90IGFsbG93IHN3aXRjaGluZyBvdXQgb2YgYW4gdW5ib3JuIGJyYW5jaC4KKworICogV2hlbiB5b3UgaGF2ZSBib3RoIC4uLi9mb28gYW5kIC4uLi9mb28uZ2l0LCAiZ2l0IGNsb25lIC4uLi9mb28iIGRpZCBub3QKKyAgIGZhdm9yIHRoZSBmb3JtZXIgYnV0IHRoZSBsYXR0ZXIuCisKKyAqICJnaXQgY29tbWl0IiByZWZ1c2VkIHRvIGNyZWF0ZSBhIGNvbW1pdCB3aGVuIGVudHJpZXMgYWRkZWQgd2l0aAorICAgImFkZCAtTiIgcmVtYWluZWQgaW4gdGhlIGluZGV4LCB3aXRob3V0IHRlbGxpbmcgR2l0IHdoYXQgdGhlaXIgY29udGVudAorICAgaW4gdGhlIG5leHQgY29tbWl0IHNob3VsZCBiZS4gV2Ugc2hvdWxkIGhhdmUgY3JlYXRlZCB0aGUgY29tbWl0IHdpdGhvdXQKKyAgIHRoZXNlIHBhdGhzLgorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IiBzYWlkICJmaWxlcyIsICJpbnNlcnRpb25zIiwgYW5kICJkZWxldGlvbnMiIGV2ZW4KKyAgIHdoZW4gaXQgaXMgc2hvd2luZyBvbmUgImZpbGUiLCBvbmUgImluc2VydGlvbiIgb3Igb25lICJkZWxldGlvbiIuCisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZ2l0IGRpZmYgLS1zdGF0IiBmb3IgdHdvIHBhdGhzIHRoYXQgaGF2ZSB0aGUgc2FtZQorICAgYW1vdW50IG9mIGNoYW5nZXMgc2hvd2VkIGdyYXBoIGJhcnMgb2YgZGlmZmVyZW50IGxlbmd0aCBkdWUgdG8gdGhlCisgICB3YXkgd2UgaGFuZGxlZCByb3VuZGluZyBlcnJvcnMuCisKKyAqICJnaXQgZ3JlcCIgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIC1kaWZmIChoZW5jZSAtYmluYXJ5KSBhdHRyaWJ1dGUuCisKKyAqIFRoZSB0cmFuc3BvcnQgcHJvZ3JhbXMgKGZldGNoLCBwdXNoLCBjbG9uZSlpZ25vcmVkIC0tbm8tcHJvZ3Jlc3MKKyAgIGFuZCBzaG93ZWQgcHJvZ3Jlc3Mgd2hlbiBzZW5kaW5nIHRoZWlyIG91dHB1dCB0byBhIHRlcm1pbmFsLgorCisgKiBTb21ldGltZXMgZXJyb3Igc3RhdHVzIGRldGVjdGVkIGJ5IGEgY2hlY2sgaW4gYW4gZWFybGllciBwaGFzZSBvZgorICAgImdpdCByZWNlaXZlLXBhY2siICh0aGUgb3RoZXIgZW5kIG9mICJnaXQgcHVzaCIpIHdhcyBsb3N0IGJ5IGxhdGVyCisgICBjaGVja3MsIHJlc3VsdGluZyBpbiBmYWxzZSBpbmRpY2F0aW9uIG9mIHN1Y2Nlc3MuCisKKyAqICJnaXQgcmV2LWxpc3QgLS12ZXJpZnkiIHNvbWV0aW1lcyBza2lwcGVkIHZlcmlmaWNhdGlvbiBkZXBlbmRpbmcgb24KKyAgIHRoZSBwaGFzZSBvZiB0aGUgbW9vbiwgd2hpY2ggZGF0ZXMgYmFjayB0byAxLjcuOC54IHNlcmllcy4KKworICogU2VhcmNoIGJveCBpbiAiZ2l0d2ViIiBkaWQgbm90IGFjY2VwdCBub24tQVNDSUkgY2hhcmFjdGVycyBjb3JyZWN0bHkuCisKKyAqIFNlYXJjaCBpbnRlcmZhY2Ugb2YgImdpdHdlYiIgZGlkIG5vdCBzaG93IG11bHRpcGxlIG1hdGNoZXMgaW4gdGhlIHNhbWUgZmlsZQorICAgY29ycmVjdGx5LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWM2NTAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4zLnR4dApAQCAtMCwwICsxLDUxIEBACitHaXQgdjEuNy45LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgcDQiIChpbiBjb250cmliLykgc3VibWl0IHRoZSBjaGFuZ2VzIHRvIGEgd3JvbmcgcGxhY2Ugd2hlbiB0aGUKKyAgICItLXVzZS1jbGllbnQtc3BlYyIgb3B0aW9uIGlzIHNldC4KKworICogVGhlIGNvbmZpZy5tYWsuYXV0b2dlbiBnZW5lcmF0ZWQgYnkgb3B0aW9uYWwgYXV0b2NvbmYgc3VwcG9ydCB0cmllZAorICAgdG8gbGluayB0aGUgYmluYXJ5IHdpdGggLWxpbnRsIGV2ZW4gd2hlbiBsaWJpbnRsLmggaXMgbWlzc2luZyBmcm9tCisgICB0aGUgc3lzdGVtLgorCisgKiBXaGVuIHRoZSBmaWx0ZXIgZHJpdmVyIGV4aXRzIGJlZm9yZSByZWFkaW5nIHRoZSBjb250ZW50IGJlZm9yZSB0aGUKKyAgIG1haW4gZ2l0IHByb2Nlc3Mgd3JpdGVzIHRoZSBjb250ZW50cyB0byBiZSBmaWx0ZXJlZCB0byB0aGUgcGlwZSB0bworICAgaXQsIHRoZSBsYXR0ZXIgY291bGQgYmUga2lsbGVkIHdpdGggU0lHUElQRSBpbnN0ZWFkIG9mIGlnbm9yaW5nCisgICBzdWNoIGFuIGV2ZW50IGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IGFkZCAtLXJlZnJlc2ggPHBhdGhzcGVjPiIgdXNlZCB0byB3YXJuIGFib3V0IHVubWVyZ2VkIHBhdGhzCisgICBvdXRzaWRlIHRoZSBnaXZlbiBwYXRoc3BlYy4KKworICogVGhlIGJ1bGsgY2hlY2staW4gY29kZXBhdGggaW4gImdpdCBhZGQiIHN0cmVhbWVkIGNvbnRlbnRzIHRoYXQKKyAgIG5lZWRzIHNtdWRnZS9jbGVhbiBmaWx0ZXJzIHdpdGhvdXQgcnVubmluZyB0aGVtLCBpbnN0ZWFkIG9mIHB1bnRpbmcKKyAgIGFuZCBkZWxlZ2F0aW5nIHRvIHRoZSBjb2RlcGF0aCB0byBydW4gZmlsdGVycyBhZnRlciBzbHVycGluZworICAgZXZlcnl0aGluZyB0byBjb3JlLgorCisgKiAiZ2l0IGJyYW5jaCAtLXdpdGggJHRoYXQiIGFzc3VtZWQgaW5jb3JyZWN0bHkgdGhhdCB0aGUgdXNlciB3aWxsIG5ldmVyCisgICBhc2sgdGhlIHF1ZXN0aW9uIHdpdGggbm9uc2Vuc2UgdmFsdWUgaW4gJHRoYXQuCisKKyAqICJnaXQgYnVuZGxlIGNyZWF0ZSIgcHJvZHVjZWQgYSBjb3JydXB0IGJ1bmRsZSBmaWxlIHVwb24gc2VlaW5nCisgICBjb21taXRzIHdpdGggZXhjZXNzaXZlbHkgbG9uZyBzdWJqZWN0IGxpbmUuCisKKyAqIFdoZW4gYSByZW1vdGUgaGVscGVyIGV4aXRzIGJlZm9yZSByZWFkaW5nIHRoZSBibGFuayBsaW5lIGZyb20gdGhlCisgICBtYWluIGdpdCBwcm9jZXNzIHRvIHNpZ25hbCB0aGUgZW5kIG9mIGNvbW1hbmRzLCB0aGUgbGF0dGVyIGNvdWxkIGJlCisgICBraWxsZWQgd2l0aCBTSUdQSVBFLiBJbnN0ZWFkIHdlIHNob3VsZCBpZ25vcmUgc3VjaCBldmVudCBhcyBhCisgICBub24tZXJyb3IuCisKKyAqIFRoZSBjb21taXQgbG9nIHRlbXBsYXRlIGdpdmVuIHdpdGggImdpdCBtZXJnZSAtLWVkaXQiIGRpZCBub3QgaGF2ZQorICAgYSBzaG9ydCBpbnN0cnVjdGl2ZSB0ZXh0IGxpa2Ugd2hhdCAiZ2l0IGNvbW1pdCIgZ2l2ZXMuCisKKyAqICJnaXQgcmV2LWxpc3QgLS12ZXJpZnktb2JqZWN0cyAtcSIgb21pdHRlZCB0aGUgZXh0cmEgdmVyaWZpY2F0aW9uCisgICBpdCBuZWVkcyB0byBkbyBvdmVyICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC1xIiBieSBtaXN0YWtlLgorCisgKiAiZ2l0d2ViIiB1c2VkIHRvIGRyb3Agd2FybmluZ3MgaW4gdGhlIGxvZyBmaWxlIHdoZW4gImhlYWRzIiB2aWV3IGlzCisgICBhY2Nlc3NlZCBpbiBhIHJlcG9zaXRvcnkgd2hvc2UgSEVBRCBkb2VzIG5vdCBwb2ludCBhdCBhIHZhbGlkCisgICBicmFuY2guCisKKyAqIEFuIGludmFsaWQgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gZ2l2ZW4gYnkgYW4gZW5kIHVzZXIgbWFkZQorICAgImdpdHdlYiIgdG8gcmV0dXJuIGdhcmJsZWQgcmVzcG9uc2UuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjE3YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK0dpdCB2MS43LjkuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjkuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGNvZGUgdG8gc3ludGhlc2l6ZSB0aGUgZmFrZSBhbmNlc3RvciB0cmVlIHVzZWQgYnkgMy13YXkgbWVyZ2UKKyAgIGZhbGxiYWNrIGluICJnaXQgYW0iIHdhcyBub3QgcHJlcGFyZWQgdG8gcmVhZCBhIHBhdGNoIGNyZWF0ZWQgd2l0aAorICAgYSBub24tc3RhbmRhcmQgLXA8bnVtPiB2YWx1ZS4KKworICogImdpdCBidW5kbGUiIGRpZCBub3QgcmVjb3JkIGJvdW5kYXJ5IGNvbW1pdHMgY29ycmVjdGx5IHdoZW4gdGhlcmUKKyAgIGFyZSBtYW55IG9mIHRoZW0uCisKKyAqICJnaXQgZGlmZi1pbmRleCIgYW5kIGl0cyBmcmllbmRzIGF0IHRoZSBwbHVtYmluZyBsZXZlbCBzaG93ZWQgdGhlCisgICAiZGlmZiAtLWdpdCIgaGVhZGVyIGFuZCBub3RoaW5nIGVsc2UgZm9yIGEgcGF0aCB3aG9zZSBjYWNoZWQgc3RhdAorICAgaW5mbyBpcyBkaXJ0eSB3aXRob3V0IGFjdHVhbCBkaWZmZXJlbmNlIHdoZW4gYXNrZWQgdG8gcHJvZHVjZSBhCisgICBwYXRjaC4gVGhpcyB3YXMgYSBsb25nc3RhbmRpbmcgYnVnIHRoYXQgd2UgY291bGQgaGF2ZSBmaXhlZCBsb25nCisgICB0aW1lIGFnby4KKworICogImdpdHdlYiIgZGlkIHVzZSBxdW90ZW1ldGEoKSB0byBwcmVwYXJlIHNlYXJjaCBzdHJpbmcgd2hlbiBhc2tlZCB0bworICAgZG8gYSBmaXhlZC1zdHJpbmcgcHJvamVjdCBzZWFyY2gsIGJ1dCBkaWQgbm90IHVzZSBpdCBieSBtaXN0YWtlIGFuZAorICAgdXNlZCB0aGUgdXNlci1zdXBwbGllZCBzdHJpbmcgaW5zdGVhZC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjYzJiYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNS50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IHYxLjcuOS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOS40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXaGVuICJnaXQgY29uZmlnIiBkaWFnbm9zZXMgYW4gZXJyb3IgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCisgICBzaG93cyB0aGUgbGluZSBudW1iZXIgZm9yIHRoZSBvZmZlbmRpbmcgbGluZSwgaXQgbWlzY291bnRlZCBpZiB0aGUKKyAgIGVycm9yIHdhcyBhdCB0aGUgZW5kIG9mIGxpbmUuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGFjY2VwdGVkICJscyIgY29tbWFuZCB3aXRoIGFuIGVtcHR5IHBhdGggYnkKKyAgIG1pc3Rha2UuCisKKyAqIFZhcmlvdXMgbmV3LWlzaCBvdXRwdXQgZGVjb3JhdGlvbiBtb2RlcyBvZiAiZ2l0IGdyZXAiIHdlcmUgbm90CisgICBkb2N1bWVudGVkIGluIHRoZSBtYW51YWwncyBzeW5vcHNpcyBzZWN0aW9uLgorCisgKiBUaGUgInJlbWFpbmluZyIgc3ViY29tbWFuZCB0byAiZ2l0IHJlcmVyZSIgd2FzIG5vdCBkb2N1bWVudGVkLgorCisgKiAiZ2l0d2ViIiB1c2VkIHRvIGRyb3Agd2FybmluZ3MgaW4gdGhlIGxvZyBmaWxlIHdoZW4gImhlYWRzIiB2aWV3IGlzCisgICBhY2Nlc3NlZCBpbiBhIHJlcG9zaXRvcnkgd2hvc2UgSEVBRCBkb2VzIG5vdCBwb2ludCBhdCBhIHZhbGlkCisgICBicmFuY2guCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YmY4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjYudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2MS43LjkuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjkuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBtZXJnZSAkdGFnIiB0byBtZXJnZSBhbiBhbm5vdGF0ZWQgdGFnIGFsd2F5cyBvcGVucyB0aGUgZWRpdG9yCisgICBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgZWRpdCBzZXNzaW9uLiB2MS43LjEwIHNlcmllcyBpbnRyb2R1Y2VkIGFuCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRfTUVSR0VfQVVUT0VESVQgdG8gaGVscCBvbGRlciBzY3JpcHRzIGRlY2xpbmUKKyAgIHRoaXMgYmVoYXZpb3VyLCBidXQgdGhlIG1haW50ZW5hbmNlIHRyYWNrIHNob3VsZCBhbHNvIHN1cHBvcnQgaXQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NjY3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjcudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dpdCB2MS43LjkuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjkuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZXJyb3IgbWVzc2FnZSBmcm9tICdnaXQgYnVuZGxlJyBoYWQgYW4gdW5tYXRjaGVkIHNpbmdsZSBxdW90ZSBwYWlyIGluIGl0LgorCisgKiBUaGUgd2F5ICdnaXQgZmV0Y2gnIGltcGxlbWVudGVkIGl0cyBjb25uZWN0aXZpdHkgY2hlY2sgb3ZlcgorICAgcmVjZWl2ZWQgb2JqZWN0cyB3YXMgb3Zlcmx5IHBlc3NpbWlzdGljLCBhbmQgd2FzdGVkIGEgbG90IG9mCisgICBjeWNsZXMuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzMjBhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkudHh0CkBAIC0wLDAgKzEsMTEyIEBACitHaXQgdjEuNy45IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogZ2l0ayB1cGRhdGVzIGFjY3VtdWxhdGVkIHNpbmNlIGVhcmx5IDIwMTEuCisKKyAqIGdpdC1ndWkgdXBkYXRlZCB0byAwLjE2LjAuCisKKyAqIGdpdC1wNCAoaW4gY29udHJpYi8pIHVwZGF0ZXMuCisKKyAqIEdpdCB1c2VzIGdldHRleHQgdG8gdHJhbnNsYXRlIGl0cyBtb3N0IGNvbW1vbiBpbnRlcmZhY2UgbWVzc2FnZXMKKyAgIGludG8gdGhlIHVzZXIncyBsYW5ndWFnZSBpZiB0cmFuc2xhdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgdGhlCisgICBsb2NhbGUgaXMgYXBwcm9wcmlhdGVseSBzZXQuIERpc3RyaWJ1dG9ycyBjYW4gZHJvcCBuZXcgUE8gZmlsZXMKKyAgIGluIHBvLyB0byBhZGQgbmV3IHRyYW5zbGF0aW9ucy4KKworICogVGhlIGNvZGUgdG8gaGFuZGxlIHVzZXJuYW1lL3Bhc3N3b3JkIGZvciBIVFRQIHRyYW5zYWN0aW9ucyB1c2VkIGluCisgICAiZ2l0IHB1c2giICYgImdpdCBmZXRjaCIgbGVhcm5lZCB0byB0YWxrICJjcmVkZW50aWFsIEFQSSIgdG8KKyAgIGV4dGVybmFsIHByb2dyYW1zIHRvIGNhY2hlIG9yIHN0b3JlIHRoZW0sIHRvIGFsbG93IGludGVncmF0aW9uIHdpdGgKKyAgIHBsYXRmb3JtIG5hdGl2ZSBrZXljaGFpbiBtZWNoYW5pc21zLgorCisgKiBUaGUgaW5wdXQgcHJvbXB0cyBpbiB0aGUgdGVybWluYWwgdXNlIG91ciBvd24gZ2V0cGFzcygpIHJlcGxhY2VtZW50CisgICB3aGVuIHBvc3NpYmxlLiBIVFRQIHRyYW5zYWN0aW9ucyB1c2VkIHRvIGFzayBmb3IgdGhlIHVzZXJuYW1lIHdpdGhvdXQKKyAgIGVjaG9pbmcgYmFjayB3aGF0IHdhcyB0eXBlZCwgYnV0IHdpdGggdGhpcyBjaGFuZ2UgeW91IHdpbGwgc2VlIGl0IGFzCisgICB5b3UgdHlwZS4KKworICogVGhlIGludGVybmFscyBvZiAicmV2ZXJ0L2NoZXJyeS1waWNrIiBoYXZlIGJlZW4gdHdlYWtlZCB0byBwcmVwYXJlCisgICBidWlsZGluZyBtb3JlIGdlbmVyaWMgInNlcXVlbmNlciIgb24gdG9wIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0CisgICBkcml2ZXMgdGhlbS4KKworICogImdpdCByZXYtcGFyc2UgRkVUQ0hfSEVBRCIgYWZ0ZXIgImdpdCBmZXRjaCIgd2l0aG91dCBzcGVjaWZ5aW5nCisgICB3aGF0IHRvIGZldGNoIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aWxsIG5vdyBzaG93IHRoZSBjb21taXQgdGhhdAorICAgd291bGQgYmUgbWVyZ2VkIGlmIHRoZSBjb21tYW5kIHdlcmUgImdpdCBwdWxsIi4KKworICogImdpdCBhZGQiIGxlYXJuZWQgdG8gc3RyZWFtIGxhcmdlIGZpbGVzIGRpcmVjdGx5IGludG8gYSBwYWNrZmlsZQorICAgaW5zdGVhZCBvZiB3cml0aW5nIHRoZW0gaW50byBpbmRpdmlkdWFsIGxvb3NlIG9iamVjdCBmaWxlcy4KKworICogImdpdCBjaGVja291dCAtQiA8Y3VycmVudCBicmFuY2g+IDxlbHNld2hlcmU+IiBpcyBhIG1vcmUgaW50dWl0aXZlCisgICB3YXkgdG8gc3BlbGwgImdpdCByZXNldCAtLWtlZXAgPGVsc2V3aGVyZT4iLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBhbmQgImdpdCBtZXJnZSIgbGVhcm5lZCAiLS1uby1vdmVyd3JpdGUtaWdub3JlIiBvcHRpb24KKyAgIHRvIHRlbGwgR2l0IHRoYXQgdW50cmFja2VkIGFuZCBpZ25vcmVkIGZpbGVzIGFyZSBub3QgZXhwZW5kYWJsZS4KKworICogImdpdCBjb21taXQgLS1hbWVuZCIgbGVhcm5lZCAiLS1uby1lZGl0IiBvcHRpb24gdG8gc2F5IHRoYXQgdGhlCisgICB1c2VyIGlzIGFtZW5kaW5nIHRoZSB0cmVlIGJlaW5nIHJlY29yZGVkLCB3aXRob3V0IHVwZGF0aW5nIHRoZQorICAgY29tbWl0IGxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IGNvbW1pdCIgYW5kICJnaXQgcmVzZXQiIHJlLWxlYXJuZWQgdGhlIG9wdGltaXphdGlvbiB0byBwcmltZQorICAgdGhlIGNhY2hlLXRyZWUgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4LCB3aGljaCBtYWtlcyBpdCBmYXN0ZXIgdG8KKyAgIHdyaXRlIGEgdHJlZSBvYmplY3Qgb3V0IGFmdGVyIHRoZSBpbmRleCBlbnRyaWVzIGFyZSB1cGRhdGVkLgorCisgKiAiZ2l0IGNvbW1pdCIgZGV0ZWN0cyBhbmQgcmVqZWN0cyBhbiBhdHRlbXB0IHRvIHN0dWZmIE5VTCBieXRlIGluCisgICB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IGNvbW1pdCIgbGVhcm5lZCAiLVMiIHRvIEdQRy1zaWduIHRoZSBjb21taXQ7IHRoaXMgY2FuIGJlIHNob3duCisgICB3aXRoIHRoZSAiLS1zaG93LXNpZ25hdHVyZSIgb3B0aW9uIHRvICJnaXQgbG9nIi4KKworICogZnNjayBhbmQgcHJ1bmUgYXJlIHJlbGF0aXZlbHkgbGVuZ3RoeSBvcGVyYXRpb25zIHRoYXQgc3RpbGwgZ28KKyAgIHNpbGVudCB3aGlsZSBtYWtpbmcgdGhlIGVuZC11c2VyIHdhaXQuIFRoZXkgbGVhcm5lZCB0byBnaXZlIHByb2dyZXNzCisgICBvdXRwdXQgbGlrZSBvdGhlciBzbG93IG9wZXJhdGlvbnMuCisKKyAqIFRoZSBzZXQgb2YgYnVpbHQtaW4gZnVuY3Rpb24taGVhZGVyIHBhdHRlcm5zIGZvciB2YXJpb3VzIGxhbmd1YWdlcworICAga25vd3MgTUFUTEFCLgorCisgKiAiZ2l0IGxvZyAtLWZvcm1hdD0nPGZvcm1hdD4nIiBsZWFybmVkIG5ldyAlZ1tuTmVFXSBzcGVjaWZpZXJzIHRvCisgICBzaG93IGluZm9ybWF0aW9uIGZyb20gdGhlIHJlZmxvZyBlbnRyaWVzIHdoZW4gd2Fsa2luZyB0aGUgcmVmbG9nCisgICAoaS5lLiB3aXRoICItZyIpLgorCisgKiAiZ2l0IHB1bGwiIGNhbiBiZSB1c2VkIHRvIGZldGNoIGFuZCBtZXJnZSBhbiBhbm5vdGF0ZWQvc2lnbmVkIHRhZywKKyAgIGluc3RlYWQgb2YgdGhlIHRpcCBvZiBhIHRvcGljIGJyYW5jaC4gVGhlIEdQRyBzaWduYXR1cmUgZnJvbSB0aGUKKyAgIHNpZ25lZCB0YWcgaXMgcmVjb3JkZWQgaW4gdGhlIHJlc3VsdGluZyBtZXJnZSBjb21taXQgZm9yIGxhdGVyCisgICBhdWRpdGluZy4KKworICogImdpdCBsb2ciIGxlYXJuZWQgIi0tc2hvdy1zaWduYXR1cmUiIG9wdGlvbiB0byBzaG93IHRoZSBzaWduZWQgdGFnCisgICB0aGF0IHdhcyBtZXJnZWQgdGhhdCBpcyBlbWJlZGRlZCBpbiB0aGUgbWVyZ2UgY29tbWl0LiBJdCBhbHNvIGNhbgorICAgc2hvdyB0aGUgc2lnbmF0dXJlIG1hZGUgb24gdGhlIGNvbW1pdCB3aXRoICJnaXQgY29tbWl0IC1TIi4KKworICogImdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uIiBjYW4gYmUgdXNlZCB0byBhZGQgZGVzY3JpcHRpdmUgdGV4dAorICAgdG8gZXhwbGFpbiB3aGF0IGEgdG9waWMgYnJhbmNoIGlzIGFib3V0LgorCisgKiAiZ2l0IGZtdC1tZXJnZS1tc2ciIGxlYXJuZWQgdG8gdGFrZSB0aGUgYnJhbmNoIGRlc2NyaXB0aW9uIGludG8KKyAgIGFjY291bnQgd2hlbiBwcmVwYXJpbmcgYSBtZXJnZSBzdW1tYXJ5IHRoYXQgImdpdCBtZXJnZSIgcmVjb3JkcworICAgd2hlbiBtZXJnaW5nIGEgbG9jYWwgYnJhbmNoLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCIgaGFzIGJlZW4gdXBkYXRlZCB0byBjb252ZXkgbW9yZSBpbmZvcm1hdGlvbgorICAgdXNlZnVsIGZvciBpbnRlZ3JhdG9ycyB0byBkZWNpZGUgaWYgYSB0b3BpYyBpcyB3b3J0aCBtZXJnaW5nIGFuZAorICAgd2hhdCBpcyBwdWxsZWQgaXMgaW5kZWVkIHdoYXQgdGhlIHJlcXVlc3RvciBhc2tlZCB0byBwdWxsLAorICAgaW5jbHVkaW5nOgorCisgICAtIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBiZWluZyByZXF1ZXN0ZWQgdG8gYmUgbWVyZ2VkOworICAgLSB0aGUgYnJhbmNoIGRlc2NyaXB0aW9uIGRlc2NyaWJpbmcgd2hhdCB0aGUgdG9waWMgaXMgYWJvdXQ7CisgICAtIHRoZSBjb250ZW50cyBvZiB0aGUgYW5ub3RhdGVkIHRhZywgd2hlbiByZXF1ZXN0aW5nIHRvIHB1bGwgYSB0YWcuCisKKyAqICJnaXQgcHVsbCIgbGVhcm5lZCB0byBub3RpY2UgJ3B1bGwucmViYXNlJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLAorICAgd2hpY2ggc2VydmVzIGFzIGEgZ2xvYmFsIGZhbGxiYWNrIGZvciBzZXR0aW5nICdicmFuY2guPG5hbWU+LnJlYmFzZScKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcGVyIGJyYW5jaC4KKworICogImdpdCB0YWciIGxlYXJuZWQgIi0tY2xlYW51cCIgb3B0aW9uIHRvIGNvbnRyb2wgaG93IHRoZSB3aGl0ZXNwYWNlcworICAgYW5kIGVtcHR5IGxpbmVzIGluIHRhZyBtZXNzYWdlIGFyZSBjbGVhbmVkIHVwLgorCisgKiAiZ2l0d2ViIiBsZWFybmVkIHRvIHNob3cgc2lkZS1ieS1zaWRlIGRpZmYuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjgKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuOCBpbiB0aGUgbWFpbnRlbmFuY2UKK3JlbGVhc2VzIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjM3MmZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC4xLnR4dApAQCAtMCwwICsxLDY0IEBACitHaXQgdjEuOC4wLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyIGhhZCBhbiB1bm5lY2Vzc2FyeSBoYXJkY29kZWQgbGltaXQgb24KKyAgIHZhcmlhYmxlIG5hbWVzIHRoYXQgd2FzIG5vdCBjaGVja2VkIGNvbnNpc3RlbnRseS4KKworICogVGhlICJzYXkiIGZ1bmN0aW9uIGluIHRoZSB0ZXN0IHNjYWZmb2xkaW5nIGluY29ycmVjdGx5IGFsbG93ZWQKKyAgICJlY2hvIiB0byBpbnRlcnByZXQgIlxhIiBhcyBpZiBpdCB3ZXJlIGEgQy1zdHJpbmcgYXNraW5nIGZvciBhCisgICBCRUwgb3V0cHV0LgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZmVlZHMgL2Rldi9udWxsIGFzIGEgY29tbW9uIGFuY2VzdG9yIHdoZW4gZGVhbGluZworICAgd2l0aCBhbiBhZGQvYWRkIGNvbmZsaWN0LCBidXQgcDRtZXJnZSBiYWNrZW5kIGNhbm5vdCBoYW5kbGUKKyAgIGl0LiBXb3JrIGl0IGFyb3VuZCBieSBwYXNzaW5nIGEgdGVtcG9yYXJ5IGVtcHR5IGZpbGUuCisKKyAqICJnaXQgbG9nIC1GIC1FIC0tZ3JlcD0nPGVyZT4nIiBmYWlsZWQgdG8gdXNlIHRoZSBnaXZlbiA8ZXJlPgorICAgcGF0dGVybiBhcyBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBpbnN0ZWFkIGxvb2tlZCBmb3IgdGhlCisgICBzdHJpbmcgbGl0ZXJhbGx5LgorCisgKiAiZ2l0IGdyZXAgLWUgcGF0dGVybiA8dHJlZT4iIGFza2VkIHRoZSBhdHRyaWJ1dGUgc3lzdGVtIHRvIHJlYWQKKyAgICI8dHJlZT46LmdpdGF0dHJpYnV0ZXMiIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2hpY2ggd2FzCisgICBub25zZW5zZS4KKworICogQSBzeW1ib2xpYyByZWYgcmVmcy9oZWFkcy9TWU0gd2FzIG5vdCBjb3JyZWN0bHkgcmVtb3ZlZCB3aXRoICJnaXQKKyAgIGJyYW5jaCAtZCBTWU0iOyB0aGUgY29tbWFuZCByZW1vdmVkIHRoZSByZWYgcG9pbnRlZCBieSBTWU0KKyAgIGluc3RlYWQuCisKKyAqIEVhcmxpZXIgd2UgZml4ZWQgZG9jdW1lbnRhdGlvbiB0byBoeXBoZW5hdGUgInJlbW90ZS10cmFja2luZyBicmFuY2giCisgICB0byBjbGFyaWZ5IHRoYXQgdGhlc2UgYXJlIG5vdCBhIHJlbW90ZSBlbnRpdHksIGJ1dCB1bmh5cGhlbmF0ZWQKKyAgIHNwZWxsaW5nIHNudWNrIGluIHRvIGEgZmV3IHBsYWNlcyBzaW5jZSB0aGVuLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIHJ1biB3aGlsZSB0aGUgSEVBRCBpcyBkZXRhY2hlZCB0cmllZCB0byBmaW5kCisgICB0aGUgdXBzdHJlYW0gYnJhbmNoIG9mIHRoZSBkZXRhY2hlZCBIRUFEICh3aGljaCBieSBkZWZpbml0aW9uCisgICBkb2VzIG5vdCBleGlzdCkgYW5kIGVtaXR0ZWQgdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZXMuCisKKyAqIFRoZSByZWZzL3JlcGxhY2UgaGllcmFyY2h5IHdhcyBub3QgbWVudGlvbmVkIGluIHRoZQorICAgcmVwb3NpdG9yeS1sYXlvdXQgZG9jcy4KKworICogU29tZXRpbWVzIGN1cmxfbXVsdGlfdGltZW91dCgpIGZ1bmN0aW9uIHN1Z2dlc3RlZCBhIHdyb25nIHRpbWVvdXQKKyAgIHZhbHVlIHdoZW4gdGhlcmUgaXMgbm8gZmlsZSBkZXNjcmlwdG9ycyB0byB3YWl0IG9uIGFuZCB0aGUgaHR0cAorICAgdHJhbnNwb3J0IGVuZGVkIHVwIHNsZWVwaW5nIGZvciBtaW51dGVzIGluIHNlbGVjdCgyKSBzeXN0ZW0gY2FsbC4KKyAgIEEgd29ya2Fyb3VuZCBoYXMgYmVlbiBhZGRlZCBmb3IgdGhpcy4KKworICogVmFyaW91cyByZmMyMDQ3IHF1b3RpbmcgaXNzdWVzIGFyb3VuZCBhIG5vbi1BU0NJSSBuYW1lIG9uIHRoZQorICAgRnJvbTogbGluZSBpbiB0aGUgb3V0cHV0IGZyb20gZm9ybWF0LXBhdGNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgZGlmZiAtRzxwYXR0ZXJuPiIgZGlkIG5vdCBob25vciB0ZXh0Y29udiBmaWx0ZXIgd2hlbiBsb29raW5nCisgICBmb3IgY2hhbmdlcy4KKworICogQmFzaCBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGRpZCBub3QgY29ycmVjdGx5IGNvbXBsZXRlIGEKKyAgIGxhenkgImdpdCBjaGVja291dCAkbmFtZV9vZl9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoX3RoYXRfaXNfdW5pcXVlIgorICAgY29tbWFuZCBsaW5lLgorCisgKiBSU1MgZmVlZCBmcm9tICJnaXR3ZWIiIGhhZCBhIHhzcyBob2xlIGluIGl0cyB0aXRsZSBvdXRwdXQuCisKKyAqICJnaXQgY29uZmlnIC0tcGF0aCAka2V5IiBzZWdmYXVsdGVkIG9uICJbc2VjdGlvbl0ga2V5IiAoYSBib29sZWFuCisgICAidHJ1ZSIgc3BlbGxlZCB3aXRob3V0ICI9Iiwgbm90ICJbc2VjdGlvbl0ga2V5ID0gdHJ1ZSIpLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1iIGZvbyIgd2hpbGUgb24gYW4gdW5ib3JuIGJyYW5jaCBkaWQgbm90IHNheQorICAgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnZm9vJyIgbGlrZSBvdGhlciBjYXNlcy4KKworQWxzbyBjb250YWlucyBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5N2UwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMi50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IHYxLjguMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBWYXJpb3VzIGNvZGVwYXRocyBoYXZlIHdvcmthcm91bmQgZm9yIGEgY29tbW9uIG1pc2NvbmZpZ3VyYXRpb24gdG8KKyAgIHNwZWxsICJVVEYtOCIgYXMgInV0ZjgiLCBidXQgaXQgd2FzIG5vdCB1c2VkIHVuaWZvcm1seS4gIE1vc3QKKyAgIG5vdGFibHksIG1haWxpbmZvICh3aGljaCBpcyB1c2VkIGJ5ICJnaXQgYW0iKSBsYWNrZWQgdGhpcyBzdXBwb3J0LgorCisgKiBXZSBmYWlsZWQgdG8gbWVudGlvbiBhIGZpbGUgd2l0aG91dCBhbnkgY29udGVudCBjaGFuZ2UgYnV0IHdob3NlCisgICBwZXJtaXNzaW9uIGJpdCB3YXMgbW9kaWZpZWQsIG9yICh3b3JzZSB5ZXQpIGEgbmV3IGZpbGUgd2l0aG91dCBhbnkKKyAgIGNvbnRlbnQgaW4gdGhlICJnaXQgZGlmZiAtLXN0YXQiIG91dHB1dC4KKworICogV2hlbiAiLS1zdGF0LWNvdW50IiBoaWRlcyBhIGRpZmZzdGF0IGZvciBiaW5hcnkgY29udGVudHMsIHRoZSB0b3RhbAorICAgbnVtYmVyIG9mIGFkZGVkIGFuZCByZW1vdmVkIGxpbmVzIGF0IHRoZSBib3R0b20gd2FzIGNvbXB1dGVkCisgICBpbmNvcnJlY3RseS4KKworICogV2hlbiAiLS1zdGF0LWNvdW50IiBoaWRlcyBhIGRpZmZzdGF0IGZvciB1bm1lcmdlZCBwYXRocywgdGhlIHRvdGFsCisgICBudW1iZXIgb2YgYWZmZWN0ZWQgZmlsZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgImRpZmYgLS1zdGF0IiBvdXRwdXQKKyAgIHdhcyBjb21wdXRlZCBpbmNvcnJlY3RseS4KKworICogImRpZmYgLS1zaG9ydHN0YXQiIG1pc2NvdW50ZWQgdGhlIHRvdGFsIG51bWJlciBvZiBhZmZlY3RlZCBmaWxlcworICAgd2hlbiB0aGVyZSB3ZXJlIHVubWVyZ2VkIHBhdGhzLgorCisgKiAiZ2l0IHA0IiB1c2VkIHRvIHRyeSBleHBhbmRpbmcgbWFsZm9ybWVkICIka2V5d29yZCQiIHRoYXQgc3BhbnMKKyAgIGFjcm9zcyBtdWx0aXBsZSBsaW5lcy4KKworICogImdpdCB1cGRhdGUtcmVmIC1kIC0tZGVyZWYgU1lNIiB0byBkZWxldGUgYSByZWYgdGhyb3VnaCBhIHN5bWJvbGljCisgICByZWYgdGhhdCBwb2ludHMgdG8gaXQgZGlkIG5vdCByZW1vdmUgaXQgY29ycmVjdGx5LgorCisgKiBTeW50YXggaGlnaGxpZ2h0aW5nIGluICJnaXR3ZWIiIHdhcyBub3QgcXVpdGUgd29ya2luZy4KKworQWxzbyBjb250YWlucyBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiMWU0YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMy50eHQKQEAgLTAsMCArMSwxNCBAQAorR2l0IHYxLjguMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGxvZyAtcCAtUzxzdHJpbmc+IiBkaWQgbm90IGFwcGx5IHRoZSB0ZXh0Y29udiBmaWx0ZXIgd2hpbGUKKyAgIGxvb2tpbmcgZm9yIHRoZSA8c3RyaW5nPi4KKworICogSW4gdGhlIGRvY3VtZW50YXRpb24sIHNvbWUgaW52YWxpZCBleGFtcGxlIGUtbWFpbCBhZGRyZXNzZXMgd2VyZQorICAgZm9ybWF0dGVkIGludG8gbWFpbHRvOiBsaW5rcy4KKworQWxzbyBjb250YWlucyBtYW55IGRvY3VtZW50YXRpb24gdXBkYXRlcyBiYWNrcG9ydGVkIGZyb20gdGhlICdtYXN0ZXInCiticmFuY2ggdGhhdCBpcyBwcmVwYXJpbmcgZm9yIHRoZSB1cGNvbWluZyAxLjguMSByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Q2ZTRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQKQEAgLTAsMCArMSwyNjcgQEAKK0dpdCB2MS44LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSAobm90ICp0aGlzKiBvbmUpLCB3ZSB3aWxsIGNoYW5nZSB0aGUKK2JlaGF2aW9yIG9mIHRoZSAiZ2l0IHB1c2giIGNvbW1hbmQuCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgV2Ugd2lsbCB1c2UgdGhlICJzaW1wbGUiIHNlbWFudGljcyB0aGF0IHB1c2hlcyB0aGUKK2N1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQKK2JyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdCByZW1vdGUgYnJhbmNoLiAgVGhlcmUgaXMgYSB1c2VyCitwcmVmZXJlbmNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgInB1c2guZGVmYXVsdCIgdG8gY2hhbmdlIHRoaXMsIGFuZAorImdpdCBwdXNoIiB3aWxsIHdhcm4gYWJvdXQgdGhlIHVwY29taW5nIGNoYW5nZSB1bnRpbCB5b3Ugc2V0IHRoaXMKK3ZhcmlhYmxlIGluIHRoaXMgcmVsZWFzZS4KKworImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0iIGlzIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIGEKK3JlbGF0aXZlbHkgZGlzdGFudCBmdXR1cmUuICAiZ2l0IGJyYW5jaCBbLXV8LS1zZXQtdXBzdHJlYW0tdG9dIiBoYXMKK2JlZW4gaW50cm9kdWNlZCB3aXRoIGEgc2FuZXIgb3JkZXIgb2YgYXJndW1lbnRzLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNy4xMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBBIGNyZWRlbnRpYWwgaGVscGVyIGZvciBXaW4zMiB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIGtleWNoYWluIG9mCisgICB0aGUgbG9nZ2VkLWluIHVzZXIgaGFzIGJlZW4gYWRkZWQuCisKKyAqIEFuIGluaXRpYWwgcG9ydCB0byBIUCBOb25TdG9wLgorCisgKiBBIGNyZWRlbnRpYWwgaGVscGVyIHRvIGFsbG93IGFjY2VzcyB0byB0aGUgR25vbWUga2V5cmluZyBoYXMgYmVlbgorICAgYWRkZWQuCisKKyAqIFdoZW4gImdpdCBhbSIgc2FuaXRpemVzIHRoZSAiU3ViamVjdDoiIGxpbmUsIHdlIHN0cmlwIHRoZSBwcmVmaXggZnJvbQorICAgIlJlOiBzdWJqZWN0IiBhbmQgYWxzbyBmcm9tIGEgbGVzcyBjb21tb24gInJlOiBzdWJqZWN0IiwgYnV0IGxlZnQKKyAgIHRoZSBldmVuIGxlc3MgY29tbW9uICJSRTogc3ViamVjdCIgaW50YWN0LiAgTm93IHdlIHN0cmlwIHRoYXQgdG9vLgorCisgKiBJdCB3YXMgdGVtcHRpbmcgdG8gc2F5ICJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIiLAorICAgYnV0IHRoYXQgdGVsbHMgR2l0IHRvIGFycmFuZ2UgdGhlIGxvY2FsIGJyYW5jaCAib3JpZ2luL21hc3RlciIgdG8KKyAgIGludGVncmF0ZSB3aXRoIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoLCB3aGljaCBpcyBoaWdobHkKKyAgIHVubGlrZWx5IHdoYXQgdGhlIHVzZXIgbWVhbnQuICBUaGUgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IHVzZSB0aGUKKyAgIG5ldyAiLS1zZXQtdXBzdHJlYW0tdG8iICh3aXRoIGEgc2hvcnQtYW5kLXN3ZWV0ICItdSIpIG9wdGlvbgorICAgaW5zdGVhZC4KKworICogImdpdCBjaGVycnktcGljayIgbGVhcm5lZCB0aGUgIi0tYWxsb3ctZW1wdHktbWVzc2FnZSIgb3B0aW9uIHRvCisgICBhbGxvdyBpdCB0byByZXBsYXkgYSBjb21taXQgd2l0aG91dCBhbnkgbG9nIG1lc3NhZ2UuCisKKyAqIEFmdGVyICJnaXQgY2hlcnJ5LXBpY2sgLXMiIGdhdmUgY29udHJvbCBiYWNrIHRvIHRoZSB1c2VyIGFza2luZworICAgaGVscCB0byByZXNvbHZlIGNvbmZsaWN0cywgY29uY2x1ZGluZyAiZ2l0IGNvbW1pdCIgdXNlZCB0byBuZWVkIHRvCisgICBiZSBydW4gd2l0aCAiLXMiIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHNpZ24gaXQgb2ZmOyBub3cgdGhlIGNvbW1hbmQKKyAgIGxlYXZlcyB0aGUgc2lnbi1vZmYgbGluZSBpbiB0aGUgbG9nIHRlbXBsYXRlLgorCisgKiAiZ2l0IGRhZW1vbiIgbGVhcm5lZCB0aGUgIi0tYWNjZXNzLWhvb2siIG9wdGlvbiB0byBhbGxvdyBhbgorICAgZXh0ZXJuYWwgY29tbWFuZCB0byBkZWNsaW5lIHNlcnZpY2UgYmFzZWQgb24gdGhlIGNsaWVudCBhZGRyZXNzLAorICAgcmVwb3NpdG9yeSBwYXRoLCBldGMuCisKKyAqICJnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiIgbGVhcm5lZCB0byB1c2Ugc3ltYm9saWMgbGlua3MgdG8gcHJlcGFyZQorICAgYSB0ZW1wb3JhcnkgY29weSBvZiB0aGUgd29ya2luZyB0cmVlIHdoZW4gYXZhaWxhYmxlLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdG8gdXNlIGEgbm9uLXN0YW5kYXJkIHBhdHRlcm4gdHlwZSBieSBkZWZhdWx0IGlmCisgICBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGVsbHMgaXQgdG8uCisKKyAqIEFjY3VtdWxhdGVkIHVwZGF0ZXMgdG8gImdpdCBndWkiIGhhcyBiZWVuIG1lcmdlZC4KKworICogImdpdCBsb2cgLWciIGxlYXJuZWQgdGhlICItLWdyZXAtcmVmbG9nPTxwYXR0ZXJuPiIgb3B0aW9uIHRvIGxpbWl0CisgICBpdHMgb3V0cHV0IHRvIGNvbW1pdHMgd2l0aCBhIHJlZmxvZyBtZXNzYWdlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgIHBhdHRlcm4uCisKKyAqICJnaXQgbWVyZ2UtYmFzZSIgbGVhcm5lZCB0aGUgIi0taXMtYW5jZXN0b3IgQSBCIiBvcHRpb24gdG8gdGVsbCBpZiBBIGlzCisgICBhbiBhbmNlc3RvciBvZiBCLiAgVGhlIHJlc3VsdCBpcyBpbmRpY2F0ZWQgYnkgaXRzIGV4aXQgc3RhdHVzIGNvZGUuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBub3cgYWxsb3dzIHVzZXJzIHRvIG92ZXJyaWRlIHRoZSBhY3R1YWwgY29tbWFuZCB1c2VkCisgICB3aXRoIHRoZSBtZXJnZXRvb2wuJG5hbWUuY21kIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZXZlbiBmb3IgYnVpbHQtaW4KKyAgIG1lcmdldG9vbCBiYWNrZW5kcy4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgdGhlICItLWVkaXQtdG9kbyIgb3B0aW9uIHRvIG9wZW4gYW4gZWRpdG9yCisgICB0byBlZGl0IHRoZSBpbnN0cnVjdGlvbiBzaGVldC4KKworCitGb3JlaWduIEludGVyZmFjZQorCisgKiAiZ2l0IHN2biIgaGFzIGJlZW4gdXBkYXRlZCB0byB3b3JrIHdpdGggU1ZOIDEuNy4KKworICogImdpdCBwNCIgbGVhcm5lZCB0aGUgIi0tY29uZmxpY3RzIiBvcHRpb24gdG8gc3BlY2lmeSB3aGF0IHRvIGRvIHdoZW4KKyAgIGVuY291bnRlcmluZyBhIGNvbmZsaWN0IGR1cmluZyAicDQgc3VibWl0Ii4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogR2l0IHNoaXBzIHdpdGggYSBmYWxsLWJhY2sgcmVnZXhwIGltcGxlbWVudGF0aW9uIGZvciBwbGF0Zm9ybXMgd2l0aAorICAgYnVnZ3kgcmVnZXhwIGxpYnJhcnksIGJ1dCBpdCB3YXMgZWFzeSBmb3IgcGVvcGxlIHRvIGtlZXAgdXNpbmcgdGhlaXIKKyAgIHBsYXRmb3JtIHJlZ2V4cCBieSBtaXN0YWtlLiAgQSBuZXcgdGVzdCBoYXMgYmVlbiBhZGRlZCB0byBjaGVjayB0aGlzLgorCisgKiBUaGUgImNoZWNrLWRvY3MiIGJ1aWxkIHRhcmdldCBoYXMgYmVlbiB1cGRhdGVkIGFuZCBncmVhdGx5CisgICBzaW1wbGlmaWVkLgorCisgKiBUaGUgdGVzdCBzdWl0ZSBpcyBydW4gdW5kZXIgTUFMTE9DX0NIRUNLXyB3aGVuIHJ1bm5pbmcgd2l0aCBhIGdsaWJjCisgICB0aGF0IHN1cHBvcnRzIHRoZSBmZWF0dXJlLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgVGVYaW5mbyBmb3JtYXQgd2FzIHVzaW5nIGluZGVudGVkIG91dHB1dAorICAgZm9yIG1hdGVyaWFscyBtZWFudCB0byBiZSBleGFtcGxlcyB0aGF0IGFyZSBiZXR0ZXIgdHlwZXNldCBpbgorICAgbW9ub3NwYWNlLgorCisgKiBDb21wYXRpYmlsaXR5IHdyYXBwZXIgYXJvdW5kIHNvbWUgbWtkaXIoMikgaW1wbGVtZW50YXRpb25zIHRoYXQKKyAgIHJlamVjdCBwYXJhbWV0ZXJzIHdpdGggdHJhaWxpbmcgc2xhc2ggaGFzIGJlZW4gaW50cm9kdWNlZC4KKworICogQ29tcGF0aWJpbGl0eSB3cmFwcGVyIGZvciBzeXN0ZW1zIHRoYXQgbGFjayB1c2FibGUgc2V0aXRpbWVyKCkgaGFzCisgICBiZWVuIGFkZGVkLgorCisgKiBUaGUgb3B0aW9uIHBhcnNpbmcgb2YgImdpdCBjaGVja291dCIgaGFkIGVycm9yIGNoZWNraW5nLCBkd2ltIGFuZAorICAgZGVmYXVsdGluZyBtaXNzaW5nIG9wdGlvbnMsIGFsbCBtaXhlZCBpbiB0aGUgY29kZSwgYW5kIGlzc3VpbmcgYW4KKyAgIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2Ugd2l0aCB1c2VmdWwgY29udGV4dCB3YXMgZ2V0dGluZyBoYXJkZXIuCisgICBUaGUgY29kZSBoYXMgYmVlbiByZW9yZ2FuaXplZCB0byBhbGxvdyBnaXZpbmcgYSBwcm9wZXIgZGlhZ25vc2lzCisgICB3aGVuIHRoZSB1c2VyIHNheXMgImdpdCBjaGVja291dCAtYiAtdCBmb28gYmFyIiAoZS5nLiAiLXQiIGlzIG5vdCBhCisgICBnb29kIG5hbWUgZm9yIGEgYnJhbmNoKS4KKworICogTWFueSBpbnRlcm5hbCB1c2VzIG9mIGEgImdpdCBtZXJnZS1iYXNlIiBlcXVpdmFsZW50IHdlcmUgb25seSB0byBzZWUKKyAgIGlmIG9uZSBjb21taXQgZmFzdC1mb3J3YXJkcyB0byB0aGUgb3RoZXIsIHdoaWNoIGRpZCBub3QgbmVlZCB0aGUKKyAgIGZ1bGwgc2V0IG9mIG1lcmdlIGJhc2VzIHRvIGJlIGNvbXB1dGVkLiBUaGV5IGhhdmUgYmVlbiB1cGRhdGVkIHRvCisgICB1c2UgbGVzcyBleHBlbnNpdmUgY2hlY2tzLgorCisgKiBUaGUgaGV1cmlzdGljcyB0byBkZXRlY3QgYW5kIHNpbGVudGx5IGNvbnZlcnQgbGF0aW4xIHRvIHV0Zjggd2hlbgorICAgd2Ugd2VyZSB0b2xkIHRvIHVzZSB1dGYtOCBpbiB0aGUgbG9nIG1lc3NhZ2UgaGFzIGJlZW4gdHJhbnNwbGFudGVkCisgICBmcm9tICJtYWlsaW5mbyIgdG8gImNvbW1pdCIgYW5kICJjb21taXQtdHJlZSIuCisKKyAqIE1lc3NhZ2VzIGdpdmVuIGJ5ICJnaXQgPHN1YmNvbW1hbmQ+IC1oIiBmcm9tIG1hbnkgc3ViY29tbWFuZHMgaGF2ZQorICAgYmVlbiBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uLgorCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjEyCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjEuNy4xMiBpbiB0aGUKK21haW50ZW5hbmNlIHRyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcwordG8gdGhlbSBmb3IgZGV0YWlscykuCisKKyAqIFRoZSBhdHRyaWJ1dGUgc3lzdGVtIG1heSBiZSBhc2tlZCBmb3IgYSBwYXRoIHRoYXQgaXRzZWxmIG9yIGl0cworICAgbGVhZGluZyBkaXJlY3RvcmllcyBubyBsb25nZXIgZXhpc3RzIGluIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBpdCBpcworICAgZmluZSBpZiB3ZSBjYW5ub3Qgb3BlbiAuZ2l0YXR0cmlidXRlIGZpbGUgaW4gc3VjaCBhIGNhc2UuICBGYWlsdXJlCisgICB0byBvcGVuIHBlci1kaXJlY3RvcnkgLmdpdGF0dHJpYnV0ZXMgd2l0aCBlcnJvciBzdGF0dXMgb3RoZXIgdGhhbgorICAgRU5PRU5UIGFuZCBFTk9URElSIHNob3VsZCBiZSBkaWFnbm9zZWQsIGJ1dCBpdCB3YXNuJ3QuCisKKyAqIFdoZW4gbG9va2luZyBmb3IgJEhPTUUvLmdpdGNvbmZpZyBldGMuLCBpdCBpcyBPSyBpZiB3ZSBjYW5ub3QgcmVhZAorICAgdGhlbSBiZWNhdXNlIHRoZXkgZG8gbm90IGV4aXN0LCBidXQgd2UgZGlkIG5vdCBkaWFnbm9zZSBleGlzdGluZworICAgZmlsZXMgdGhhdCB3ZSBjYW5ub3QgcmVhZC4KKworICogV2hlbiAiZ2l0IGFtIiBpcyBmZWQgYW4gaW5wdXQgdGhhdCBoYXMgbXVsdGlwbGUgIkNvbnRlbnQtdHlwZTogLi4uIgorICAgaGVhZGVyLCBpdCBkaWQgbm90IGdyb2sgY2hhcnNldD0gYXR0cmlidXRlIGNvcnJlY3RseS4KKworICogImdpdCBhbSIgbWlzaGFuZGxlZCBhIHBhdGNoIGF0dGFjaGVkIGFzIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgKGUuZy4gbm90IHRleHQvKik7IENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcgKGUuZy4gYmFzZTY0KSB3YXMgbm90CisgICBob25vcmVkIGNvcnJlY3RseS4KKworICogImdpdCBibGFtZSBNQUtFRklMRSIgcnVuIGluIGEgaGlzdG9yeSB0aGF0IGhhcyAiTWFrZWZpbGUiIGJ1dCBub3QKKyAgICJNQUtFRklMRSIgc2hvdWxkIHNheSAiTm8gc3VjaCBmaWxlIE1BS0VGSUxFIGluIEhFQUQiLCBidXQgZ290CisgICBjb25mdXNlZCBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSBhbmQgZmFpbGVkIHRvIGRvIHNvLgorCisgKiBFdmVuIGR1cmluZyBhIGNvbmZsaWN0ZWQgbWVyZ2UsICJnaXQgYmxhbWUgJHBhdGgiIGFsd2F5cyBtZWFudCB0bworICAgYmxhbWUgdW5jb21taXR0ZWQgY2hhbmdlcyB0byB0aGUgIndvcmtpbmcgdHJlZSIgdmVyc2lvbjsgbWFrZSBpdAorICAgbW9yZSB1c2VmdWwgYnkgc2hvd2luZyBjbGVhbmx5IG1lcmdlZCBwYXJ0cyBhcyBjb21pbmcgZnJvbSB0aGUgb3RoZXIKKyAgIGJyYW5jaCB0aGF0IGlzIGJlaW5nIG1lcmdlZC4KKworICogSXQgd2FzIHVuY2xlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yICJnaXQgYmxhbWUiIHRoYXQgaXQgaXMKKyAgIHVubmVjZXNzYXJ5IGZvciB1c2VycyB0byB1c2UgdGhlICItLWZvbGxvdyIgb3B0aW9uLgorCisgKiBPdXRwdXQgZnJvbSAiZ2l0IGJyYW5jaCAtdiIgY29udGFpbnMgIihubyBicmFuY2gpIiB0aGF0IGNvdWxkIGJlCisgICBsb2NhbGl6ZWQsIGJ1dCB0aGUgY29kZSB0byBhbGlnbiBpdCBhbG9uZyB3aXRoIHRoZSBuYW1lcyBvZgorICAgYnJhbmNoZXMgd2FzIGNvdW50aW5nIGluIGJ5dGVzLCBub3QgaW4gZGlzcGxheSBjb2x1bW5zLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIEEgQyBCIiB1c2VkIHRvIHJlcGxheSBjaGFuZ2VzIGluIEEgYW5kIHRoZW4gQiBhbmQKKyAgIHRoZW4gQyBpZiB0aGVzZSB0aHJlZSBjb21taXRzIGhhZCBjb21taXR0ZXIgdGltZXN0YW1wcyBpbiB0aGF0CisgICBvcmRlciwgd2hpY2ggaXMgbm90IHdoYXQgdGhlIHVzZXIgd2hvIHNhaWQgIkEgQyBCIiBuYXR1cmFsbHkKKyAgIGV4cGVjdHMuCisKKyAqIEEgcmVwb3NpdG9yeSBjcmVhdGVkIHdpdGggImdpdCBjbG9uZSAtLXNpbmdsZSIgaGFkIGl0cyBmZXRjaAorICAgcmVmc3BlY3Mgc2V0IHVwIGp1c3QgbGlrZSBhIGNsb25lIHdpdGhvdXQgIi0tc2luZ2xlIiwgbGVhZGluZyB0aGUKKyAgIHN1YnNlcXVlbnQgImdpdCBmZXRjaCIgdG8gc2x1cnAgYWxsIHRoZSBvdGhlciBicmFuY2hlcywgZGVmZWF0aW5nCisgICB0aGUgd2hvbGUgcG9pbnQgb2Ygc3BlY2lmeWluZyAib25seSB0aGlzIGJyYW5jaCIuCisKKyAqIERvY3VtZW50YXRpb24gdGFsa2VkIGFib3V0ICJmaXJzdCBsaW5lIG9mIGNvbW1pdCBsb2ciIHdoZW4gaXQgbWVhbnQKKyAgIHRoZSB0aXRsZSBvZiB0aGUgY29tbWl0LiAgVGhlIGRlc2NyaXB0aW9uIHdhcyBjbGFyaWZpZWQgYnkgZGVmaW5pbmcKKyAgIGhvdyB0aGUgdGl0bGUgaXMgZGVjaWRlZCBhbmQgcmV3b3JkaW5nIHRoZSBjYXN1YWwgbWVudGlvbiBvZiAiZmlyc3QKKyAgIGxpbmUiIHRvICJ0aXRsZSIuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IHRob3JvdWdobHkgY2xlYW5zZSB0YWcgbmFtZXMgdGhhdCBpdAorICAgaW5mZXJyZWQgZnJvbSB0aGUgbmFtZXMgb2YgdGhlIHRhZ3MgaXQgb2J0YWluZWQgZnJvbSBDVlMsIHdoaWNoCisgICBjYXVzZWQgImdpdCB0YWciIHRvIGJhcmYgYW5kIHN0b3AgdGhlIGltcG9ydCBpbiB0aGUgbWlkZGxlLgorCisgKiBFYXJsaWVyIHdlIG1hZGUgdGhlIGRpZmZzdGF0IHN1bW1hcnkgbGluZSB0aGF0IHNob3dzIHRoZSBudW1iZXIgb2YKKyAgIGxpbmVzIGFkZGVkL2RlbGV0ZWQgbG9jYWxpemFibGUsIGJ1dCBpdCB3YXMgZm91bmQgaXJyaXRhdGluZyBoYXZpbmcKKyAgIHRvIHNlZSB0aGVtIGluIHZhcmlvdXMgbGFuZ3VhZ2VzIG9uIGEgbGlzdCB3aG9zZSBkaXNjdXNzaW9uIGxhbmd1YWdlCisgICBpcyBFbmdsaXNoLCBhbmQgdGhpcyBjaGFuZ2UgaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKKyAqICJnaXQgZmV0Y2ggLS1hbGwiLCB3aGVuIHBhc3NlZCAiLS1uby10YWdzIiwgZGlkIG5vdCBob25vciB0aGUKKyAgICItLW5vLXRhZ3MiIG9wdGlvbiB3aGlsZSBmZXRjaGluZyBmcm9tIGluZGl2aWR1YWwgcmVtb3RlcyAodGhlIHNhbWUKKyAgIGlzc3VlIGV4aXN0ZWQgd2l0aCAiLS10YWdzIiwgYnV0IHRoZSBjb21iaW5hdGlvbiAiLS1hbGwgLS10YWdzIiBtYWtlcworICAgbXVjaCBsZXNzIHNlbnNlIHRoYW4gIi0tYWxsIC0tbm8tdGFncyIpLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIGh0dHAgaGFkIGFuIG9sZCB3b3JrYXJvdW5kIGZvciBhbiB1bmxpa2VseSBzZXJ2ZXIKKyAgIG1pc2NvbmZpZ3VyYXRpb247IGl0IHR1cm5zIG91dCB0aGF0IHRoaXMgaHVydHMgZGVidWdnYWJpbGl0eSBvZiB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gaW4gZ2VuZXJhbCwgYW5kIGhhcyBiZWVuIHJldmVydGVkLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIGh0dHAgYWR2ZXJ0aXNlZCB0aGF0IGl0IHN1cHBvcnRzICJkZWZsYXRlIiwgd2hpY2gKKyAgIGlzIG11Y2ggbGVzcyBjb21tb24sIGFuZCBkaWQgbm90IGFkdmVydGlzZSB0aGUgbW9yZSBjb21tb24gImd6aXAiIG9uCisgICBpdHMgQWNjZXB0LUVuY29kaW5nIGhlYWRlci4KKworICogImdpdCBmZXRjaCIgb3ZlciB0aGUgZHVtYi1odHRwIHJldmlzaW9uIHdhbGtlciBjb3VsZCBzZWdmYXVsdCB3aGVuCisgICBjdXJsJ3MgbXVsdGkgaW50ZXJmYWNlIHdhcyB1c2VkLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgbm90aWZpZWQgdGhlIHVzZXIgdGhhdCBhdXRvLXBhY2tpbmcgaGFzIHRyaWdnZXJlZAorICAgIGV2ZW4gdW5kZXIgdGhlICItLXF1aWV0IiBvcHRpb24uCisKKyAqIEFmdGVyICJnaXRrIiBzaG93ZWQgdGhlIGNvbnRlbnRzIG9mIGEgdGFnLCBuZWl0aGVyICJSZXJlYWQKKyAgIHJlZmVyZW5jZXMiIG5vciAiUmVsb2FkIiB1cGRhdGVkIHdoYXQgaXMgc2hvd24gYXMgdGhlCisgICBjb250ZW50cyBvZiBpdCB3aGVuIHRoZSB1c2VyIG92ZXJ3cm90ZSB0aGUgdGFnIHdpdGggImdpdCB0YWcgLWYiLgorCisgKiAiZ2l0IGxvZyAtLWFsbC1tYXRjaCAtLWdyZXA9QSAtLWdyZXA9QiIgb3VnaHQgdG8gc2hvdyBjb21taXRzIHRoYXQKKyAgIG1lbnRpb24gYm90aCBBIGFuZCBCLCBidXQgd2hlbiB0aGVzZSB0aHJlZSBvcHRpb25zIGFyZSB1c2VkIHdpdGgKKyAgIC0tYXV0aG9yIG9yIC0tY29tbWl0dGVyLCBpdCBzaG93ZWQgY29tbWl0cyB0aGF0IG1lbnRpb24gZWl0aGVyIEEgb3IKKyAgIEIgKG9yIGJvdGgpIGluc3RlYWQuCisKKyAqIFRoZSAiLVhvdXJzIiBiYWNrZW5kIG9wdGlvbiB0byAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgd2FzIGlnbm9yZWQKKyAgIGZvciBiaW5hcnkgZmlsZXMuCisKKyAqICJnaXQgcDQiLCB3aGVuICItLXVzZS1jbGllbnQtc3BlYyIgYW5kICItLWRldGVjdC1icmFuY2hlcyIgYXJlIHVzZWQKKyAgIHRvZ2V0aGVyLCBtaXNkZXRlY3RlZCBicmFuY2hlcy4KKworICogImdpdCByZWNlaXZlLXBhY2siICh0aGUgY291bnRlcnBhcnQgdG8gImdpdCBwdXNoIikgZGlkIG5vdCBnaXZlCisgICBwcm9ncmVzcyBvdXRwdXQgd2hpbGUgcHJvY2Vzc2luZyBvYmplY3RzIGl0IHJlY2VpdmVkIHRvIHRoZSB1c2VyCisgICB3aGVuIHJ1biBvdmVyIHRoZSBzbWFydC1odHRwIHByb3RvY29sLgorCisgKiBXaGVuIHlvdSBtaXNzcGVsbCB0aGUgY29tbWFuZCBuYW1lIHlvdSBnaXZlIHRvIHRoZSAiZXhlYyIgYWN0aW9uIGluCisgICB0aGUgImdpdCByZWJhc2UgLWkiIGluc3RydWN0aW9uIHNoZWV0IHlvdSB3ZXJlIHRvbGQgdGhhdCAncmViYXNlJyBpcyBub3QgYQorICAgZ2l0IHN1YmNvbW1hbmQgZnJvbSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIi4KKworICogVGhlIHN1YmNvbW1hbmQgaW4gImdpdCByZW1vdGUiIHRvIHJlbW92ZSBhIGRlZmluZWQgcmVtb3RlIHdhcworICAgInJtIiBhbmQgdGhlIGNvbW1hbmQgZGlkIG5vdCB0YWtlIGEgZnVsbHktc3BlbGxlZCAicmVtb3ZlIi4KKworICogVGhlIGludGVyYWN0aXZlIHByb21wdCB0aGF0ICJnaXQgc2VuZC1lbWFpbCIgZ2l2ZXMgd2FzIGVycm9yIHByb25lLiBJdAorICAgYXNrZWQgIldoYXQgZS1tYWlsIGFkZHJlc3MgZG8geW91IHdhbnQgdG8gdXNlPyIgd2l0aCB0aGUgYWRkcmVzcyBpdAorICAgZ3Vlc3NlZCAoY29ycmVjdGx5KSB0aGUgdXNlciB3b3VsZCB3YW50IHRvIHVzZSBpbiBpdHMgcHJvbXB0LAorICAgdGVtcHRpbmcgdGhlIHVzZXIgdG8gc2F5ICJ5Ii4gQnV0IHRoZSByZXNwb25zZSB3YXMgdGFrZW4gYXMgIk5vLAorICAgcGxlYXNlIHVzZSAneScgYXMgdGhlIGUtbWFpbCBhZGRyZXNzIGluc3RlYWQiLCB3aGljaCBpcyBtb3N0CisgICBjZXJ0YWlubHkgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQuCisKKyAqICJnaXQgc2hvdyAtLWZvcm1hdD0nJWNpJyIgZGlkIG5vdCBnaXZlIHRoZSB0aW1lc3RhbXAgY29ycmVjdGx5IGZvcgorICAgY29tbWl0cyBjcmVhdGVkIHdpdGhvdXQgaHVtYW4gcmVhZGFibGUgbmFtZSBvbiB0aGUgImNvbW1pdHRlciIgbGluZS4KKworICogImdpdCBzaG93IC0tcXVpZXQiIG91Z2h0IHRvIGJlIGEgc3lub255bSBmb3IgImdpdCBzaG93IC1zIiwgYnV0CisgICB3YXNuJ3QuCisKKyAqICJnaXQgc3VibW9kdWxlIGZyb3R6IiB3YXMgbm90IGRpYWdub3NlZCBhcyAiZnJvdHoiIGJlaW5nIGFuIHVua25vd24KKyAgIHN1YmNvbW1hbmQgdG8gImdpdCBzdWJtb2R1bGUiOyB0aGUgdXNlciBpbnN0ZWFkIGdvdCBhIGNvbXBsYWludAorICAgdGhhdCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIHdhcyBydW4gd2l0aCBhbiB1bmtub3duIHBhdGggImZyb3R6Ii4KKworICogImdpdCBzdGF0dXMiIGhvbm9yZWQgdGhlIGlnbm9yZT1kaXJ0eSBzZXR0aW5ncyBpbiAuZ2l0bW9kdWxlcyBidXQKKyAgICJnaXQgY29tbWl0IiBkaWRuJ3QuCisKKyAqICJnaXR3ZWIiIGRpZCBub3QgZ2l2ZSB0aGUgY29ycmVjdCBjb21taXR0ZXIgdGltZXpvbmUgaW4gaXRzIGZlZWQKKyAgIG91dHB1dCBkdWUgdG8gYSB0eXBvLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkZTA3YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMS50eHQKQEAgLTAsMCArMSw4NyBAQAorR2l0IDEuOC4xLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgYXR0cmlidXRlIG1lY2hhbmlzbSBkaWRuJ3QgYWxsb3cgbGltaXRpbmcgYXR0cmlidXRlcyB0byBiZQorICAgYXBwbGllZCB0byBvbmx5IGEgc2luZ2xlIGRpcmVjdG9yeSBpdHNlbGYgd2l0aCAicGF0aC8iIGxpa2UgdGhlCisgICBleGNsdWRlIG1lY2hhbmlzbSBkb2VzLgorCisgKiBXaGVuIGF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgWERHLXN0eWxlICRIT01FLy5jb25maWcvZ2l0L2NvbmZpZyBhbmQKKyAgIGZpbmRpbmcgdGhhdCAkSE9NRS8uY29uZmlnL2dpdCBpcyBhIGZpbGUsIHdlIGdhdmUgYSB3cm9uZyBlcnJvcgorICAgbWVzc2FnZSwgaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgY2FzZSBhcyAiYSBjdXN0b20gY29uZmlnIGZpbGUgZG9lcworICAgbm90IGV4aXN0IHRoZXJlIiBhbmQgbW92aW5nIG9uLgorCisgKiBBZnRlciBmYWlsaW5nIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHVzaW5nIG1rc3RlbXAoKSwgZmFpbGluZworICAgcGF0aG5hbWUgd2FzIG5vdCByZXBvcnRlZCBjb3JyZWN0bHkgb24gc29tZSBwbGF0Zm9ybXMuCisKKyAqIGh0dHAgdHJhbnNwb3J0IHdhcyB3cm9uZyB0byBhc2sgZm9yIHRoZSB1c2VybmFtZSB3aGVuIHRoZQorICAgYXV0aGVudGljYXRpb24gaXMgZG9uZSBieSBjZXJ0aWZpY2F0ZSBpZGVudGl0eS4KKworICogVGhlIGJlaGF2aW91ciB2aXNpYmxlIHRvIHRoZSBlbmQgdXNlcnMgd2FzIGNvbmZ1c2luZywgd2hlbiB0aGV5CisgICBhdHRlbXB0IHRvIGtpbGwgYSBwcm9jZXNzIHNwYXduZWQgaW4gdGhlIGVkaXRvciB0aGF0IHdhcyBpbiB0dXJuCisgICBsYXVuY2hlZCBieSBHaXQgd2l0aCBTSUdJTlQgKG9yIFNJR1FVSVQpLCBhcyBHaXQgd291bGQgY2F0Y2ggdGhhdAorICAgc2lnbmFsIGFuZCBkaWUuICBXZSBpZ25vcmUgdGhlc2Ugc2lnbmFscyBub3cuCisKKyAqIEEgY2hpbGQgcHJvY2VzcyB0aGF0IHdhcyBraWxsZWQgYnkgYSBzaWduYWwgKGUuZy4gU0lHSU5UKSB3YXMKKyAgIHJlcG9ydGVkIGluIGFuIGluY29uc2lzdGVudCB3YXkgZGVwZW5kaW5nIG9uIGhvdyB0aGUgcHJvY2VzcyB3YXMKKyAgIHNwYXduZWQgYnkgdXMsIHdpdGggb3Igd2l0aG91dCBhIHNoZWxsIGluIGJldHdlZW4uCisKKyAqIEFmdGVyICJnaXQgYWRkIC1OIiBhbmQgdGhlbiB3cml0aW5nIGEgdHJlZSBvYmplY3Qgb3V0IG9mIHRoZQorICAgaW5kZXgsIHRoZSBjYWNoZS10cmVlIGRhdGEgc3RydWN0dXJlIGdvdCBjb3JydXB0ZWQuCisKKyAqICJnaXQgYXBwbHkiIG1pc2JlaGF2ZWQgd2hlbiBmaXhpbmcgd2hpdGVzcGFjZSBicmVha2FnZXMgYnkgcmVtb3ZpbmcKKyAgIGV4Y2VzcyB0cmFpbGluZyBibGFuayBsaW5lcyBpbiBzb21lIGNvcm5lciBjYXNlcy4KKworICogQSB0YXIgYXJjaGl2ZSBjcmVhdGVkIGJ5ICJnaXQgYXJjaGl2ZSIgcmVjb3JkZWQgYSBkaXJlY3RvcnkgaW4gYQorICAgd2F5IHRoYXQgbWFkZSBOZXRCU0QncyBpbXBsZW1lbnRhdGlvbiBvZiAidGFyIiBzb21ldGltZXMgdW5oYXBweS4KKworICogV2hlbiAiZ2l0IGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpcj0kb3Zlcl90aGVyZSIgaXMgaW50ZXJydXB0ZWQsIGl0CisgICBmYWlsZWQgdG8gcmVtb3ZlIHRoZSByZWFsIGxvY2F0aW9uIG9mIHRoZSAkR0lUX0RJUiBpdCBjcmVhdGVkLgorICAgVGhpcyB3YXMgbW9zdCB2aXNpYmxlIHdoZW4gaW50ZXJydXB0aW5nIGEgc3VibW9kdWxlIHVwZGF0ZS4KKworICogImdpdCBmZXRjaCAtLW1pcnJvciIgYW5kIGZldGNoIHRoYXQgdXNlcyBvdGhlciBmb3JtcyBvZiByZWZzcGVjCisgICB3aXRoIHdpbGRjYXJkIHVzZWQgdG8gYXR0ZW1wdCB0byB1cGRhdGUgYSBzeW1ib2xpYyByZWYgdGhhdCBtYXRjaAorICAgdGhlIHdpbGRjYXJkIG9uIHRoZSByZWNlaXZpbmcgZW5kLCB3aGljaCBtYWRlIGxpdHRsZSBzZW5zZSAodGhlCisgICByZWFsIHJlZiB0aGF0IGlzIHBvaW50ZWQgYXQgYnkgdGhlIHN5bWJvbGljIHJlZiB3b3VsZCBiZSB1cGRhdGVkCisgICBhbnl3YXkpLiAgU3ltYm9saWMgcmVmcyBubyBsb25nZXIgYXJlIGFmZmVjdGVkIGJ5IHN1Y2ggYSBmZXRjaC4KKworICogVGhlICJsb2cgLS1ncmFwaCIgY29kZXBhdGggZmVsbCBpbnRvIGluZmluaXRlIGxvb3AgaW4gc29tZQorICAgY29ybmVyIGNhc2VzLgorCisgKiAiZ2l0IG1lcmdlIiBzdGFydGVkIGNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2sgbGlrZSAiZ2l0CisgICBjb21taXQiIGRvZXMgc29tZSB0aW1lIGFnbywgYnV0IGZvcmdvdCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBleGl0CisgICBzdGF0dXMgb2YgdGhlIGhvb2suCisKKyAqICJnaXQgcGFjay1yZWZzIiB0aGF0IHJhbiBpbiBwYXJhbGxlbCB0byBhbm90aGVyIHByb2Nlc3MgdGhhdAorICAgY3JlYXRlZCBuZXcgcmVmcyBoYWQgYSByYWNlIHRoYXQgY2FuIGxvc2UgbmV3IG9uZXMuCisKKyAqIFdoZW4gYSBsaW5lIHRvIGJlIHdyYXBwZWQgaGFzIGEgc29saWQgcnVuIG9mIG5vbiBzcGFjZSBjaGFyYWN0ZXJzCisgICB3aG9zZSBsZW5ndGggZXhhY3RseSBpcyB0aGUgd3JhcCB3aWR0aCwgImdpdCBzaG9ydGxvZyAtdyIgZmFpbGVkCisgICB0byBhZGQgYSBuZXdsaW5lIGFmdGVyIHN1Y2ggYSBsaW5lLgorCisgKiBUaGUgd2F5ICJnaXQgc3ZuIiBhc2tlZCBmb3IgcGFzc3dvcmQgdXNpbmcgU1NIX0FTS1BBU1MgYW5kCisgICBHSVRfQVNLUEFTUyB3YXMgbm90IGluIGxpbmUgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgorCisgKiAiZ2l0d2ViIiwgd2hlbiBzb3J0aW5nIGJ5IGFnZSB0byBzaG93IHJlcG9zaXRvcmllcyB3aXRoIG5ldworICAgYWN0aXZpdGllcyBmaXJzdCwgdXNlZCB0byBzb3J0IHJlcG9zaXRvcmllcyB3aXRoIGFic29sdXRlbHkKKyAgIG5vdGhpbmcgaW4gaXQgZWFybHksIHdoaWNoIHdhcyBub3QgdmVyeSB1c2VmdWwuCisKKyAqICJnaXR3ZWIiLCB3aGVuIHNvcnRpbmcgYnkgYWdlIHRvIHNob3cgcmVwb3NpdG9yaWVzIHdpdGggbmV3CisgICBhY3Rpdml0aWVzIGZpcnN0LCB1c2VkIHRvIHNvcnQgcmVwb3NpdG9yaWVzIHdpdGggYWJzb2x1dGVseQorICAgbm90aGluZyBpbiBpdCBlYXJseSwgd2hpY2ggd2FzIG5vdCB2ZXJ5IHVzZWZ1bC4KKworICogV2hlbiBhdXRvY29uZiBpcyB1c2VkLCBhbnkgYnVpbGQgb24gYSBkaWZmZXJlbnQgY29tbWl0IGFsd2F5cyByYW4KKyAgICJjb25maWcuc3RhdHVzIC0tcmVjaGVjayIgZXZlbiB3aGVuIHVubmVjZXNzYXJ5LgorCisgKiBTb21lIHNjcmlwdGVkIHByb2dyYW1zIHdyaXR0ZW4gaW4gUHl0aG9uIGRpZCBub3QgZ2V0IHVwZGF0ZWQgd2hlbgorICAgUFlUSE9OX1BBVEggY2hhbmdlZC4KKworICogV2UgaGF2ZSBiZWVuIGNhcnJ5aW5nIGEgdHJhbnNsYXRlZCBhbmQgbG9uZy11bm1haW50YWluZWQgY29weSBvZiBhbgorICAgb2xkIHZlcnNpb24gb2YgdGhlIHR1dG9yaWFsOyByZW1vdmVkLgorCisgKiBQb3J0YWJpbGl0eSBpc3N1ZXMgaW4gbWFueSBzZWxmLXRlc3Qgc2NyaXB0cyBoYXZlIGJlZW4gYWRkcmVzc2VkLgorCisKK0Fsc28gY29udGFpbnMgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYjdiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjIudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0dpdCAxLjguMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4xLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGVsZW1lbnQgb24gR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgbGlzdCB0aGF0IGRvZXMgbm90IG5hbWUgdGhlCisgICByZWFsIHBhdGggdG8gYSBkaXJlY3RvcnkgKGkuZS4gYSBzeW1ib2xpYyBsaW5rKSBjb3VsZCBoYXZlIGNhdXNlZAorICAgdGhlIEdJVF9ESVIgZGlzY292ZXJ5IGxvZ2ljIHRvIGVzY2FwZSB0aGUgY2VpbGluZy4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yICJ0Y3NoIiBlbWl0dGVkIGFuIHVud2FudGVkIHNwYWNlCisgICBhZnRlciBjb21wbGV0aW5nIGEgc2luZ2xlIGRpcmVjdG9yeSBuYW1lLgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBsZWFrZWQgYW4gdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZSB3aGlsZQorICAgbG9va2luZyBmb3IgcG9zc2libGUgbWF0Y2hlcyB3aXRoIHBhdGhzIGluIDx0cmVlLWlzaD4uCisKKyAqICJnaXQgYXJjaGl2ZSIgZGlkIG5vdCByZWNvcmQgdW5jb21wcmVzc2VkIHNpemUgaW4gdGhlIGhlYWRlciB3aGVuCisgICBzdHJlYW1pbmcgYSB6aXAgYXJjaGl2ZSwgd2hpY2ggY29uZnVzZWQgc29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgdW56aXAuCisKKyAqIFdoZW4gdXNlcnMgc3BlbGxlZCAiY2M6IiBpbiBsb3dlcmNhc2UgaW4gdGhlIGZha2UgImhlYWRlciIgaW4gdGhlCisgICB0cmFpbGVyIHBhcnQsICJnaXQgc2VuZC1lbWFpbCIgZmFpbGVkIHRvIHBpY2sgdXAgdGhlIGFkZHJlc3NlcyBmcm9tCisgICB0aGVyZS4gQXMgZS1tYWlsIGhlYWRlcnMgZmllbGQgbmFtZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIHRoaXMKKyAgIHNjcmlwdCBzaG91bGQgZm9sbG93IHN1aXQgYW5kIHRyZWF0ICJjYzoiIGFuZCAiQ2M6IiB0aGUgc2FtZSB3YXkuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxY2IzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMy50eHQKQEAgLTAsMCArMSw0NyBAQAorR2l0IDEuOC4xLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjEuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGF0dHJpYnV0ZSBtZWNoYW5pc20gZGlkbid0IGFsbG93IGxpbWl0aW5nIGF0dHJpYnV0ZXMgdG8gYmUKKyAgIGFwcGxpZWQgdG8gb25seSBhIHNpbmdsZSBkaXJlY3RvcnkgaXRzZWxmIHdpdGggInBhdGgvIiBsaWtlIHRoZQorICAgZXhjbHVkZSBtZWNoYW5pc20gZG9lcy4gIFRoZSBmaXggZm9yIHRoaXMgaW4gMS44LjEuMiBoYWQKKyAgIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9ucy4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gY29kZSB3YXMgaW5hZHZlcnRlbnRseSBtYWRlIGluY29tcGF0aWJsZSB3aXRoCisgICBvbGRlciB2ZXJzaW9ucyBvZiBiYXNoIGJ5IHVzaW5nIGEgbmV3ZXIgYXJyYXkgbm90YXRpb24uCisKKyAqIFNjcmlwdHMgdG8gdGVzdCBiYXNoIGNvbXBsZXRpb24gd2FzIGluaGVyZW50bHkgZmxha3kgYXMgaXQgd2FzCisgICBhZmZlY3RlZCBieSB3aGF0ZXZlciByYW5kb20gdGhpbmdzIHRoZSB1c2VyIG1heSBoYXZlIG9uICRQQVRILgorCisgKiBBIGZpeCB3YXMgYWRkZWQgdG8gdGhlIGJ1aWxkIHByb2NlZHVyZSB0byB3b3JrIGFyb3VuZCBidWdneQorICAgdmVyc2lvbnMgb2YgY2NhY2hlIGJyb2tlIHRoZSBhdXRvLWdlbmVyYXRpb24gb2YgZGVwZW5kZW5jaWVzLCB3aGljaAorICAgdW5mb3J0dW5hdGVseSBpcyBzdGlsbCByZWxldmFudCBiZWNhdXNlIHNvbWUgcGVvcGxlIHVzZSBhbmNpZW50CisgICBkaXN0cm9zLgorCisgKiBXZSB1c2VkIHRvIHN0dWZmICJ1c2VyQCIgYW5kIHRoZW4gYXBwZW5kIHdoYXQgd2UgcmVhZCBmcm9tCisgICAvZXRjL21haWxuYW1lIHRvIGNvbWUgdXAgd2l0aCBhIGRlZmF1bHQgZS1tYWlsIGlkZW50LCBidXQgYSBidWcKKyAgIGxvc3QgdGhlICJ1c2VyQCIgcGFydC4KKworICogImdpdCBhbSIgZGlkIG5vdCBwYXJzZSBkYXRlc3RhbXAgY29ycmVjdGx5IGZyb20gSGcgZ2VuZXJhdGVkIHBhdGNoLAorICAgd2hlbiBpdCBpcyBydW4gaW4gYSBsb2NhbGUgb3V0c2lkZSBDIChvciBlbikuCisKKyAqIEF0dGVtcHQgdG8gImJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24iIGFuIGV4aXN0aW5nIGJyYW5jaCwgd2hpbGUKKyAgIGJlaW5nIG9uIGEgZGV0YWNoZWQgSEVBRCwgZXJyb3JlZCBvdXQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIGRpZCBub3QgcmVwbGF5IGEgcm9vdCBjb21taXQgdG8gYW4gdW5ib3JuIGJyYW5jaC4KKworICogV2UgZm9yZ290IHRvIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmVhZGluZyBmcm9tICJncGciIG91dHB1dCwKKyAgIGtpbGxpbmcgImdpdCBsb2cgLS1zaG93LXNpZ25hdHVyZSIgb24gYSBsb25nIGhpc3RvcnkuCisKKyAqICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiBsb3N0IGVtcHR5IG1lcmdlcyBpbiByZWNlbnQgdmVyc2lvbnMKKyAgIG9mIEdpdC4KKworICogUmViYXNpbmcgdGhlIGhpc3Rvcnkgb2Ygc3VwZXJwcm9qZWN0IHdpdGggY2hhbmdlIGluIHRoZSBzdWJtb2R1bGUKKyAgIGhhcyBiZWVuIGJyb2tlbiBzaW5jZSB2MS43LjEyLgorCisgKiBBIGZhaWx1cmUgdG8gcHVzaCBkdWUgdG8gbm9uLWZmIHdoaWxlIG9uIGFuIHVuYm9ybiBicmFuY2gKKyAgIGRlcmVmZXJlbmNlZCBhIE5VTEwgcG9pbnRlciB3aGVuIHNob3dpbmcgYW4gZXJyb3IgbWVzc2FnZS4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmFmMWQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS40LnR4dApAQCAtMCwwICsxLDExIEBACitHaXQgMS44LjEuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGltYXAtc2VuZCIgdGFsa2luZyBvdmVyIGltYXBzOi8vIGRpZCBtYWtlIHN1cmUgaXQgcmVjZWl2ZWQgYQorICAgdmFsaWQgY2VydGlmaWNhdGUgZnJvbSB0aGUgb3RoZXIgZW5kLCBidXQgZGlkIG5vdCBjaGVjayBpZiB0aGUKKyAgIGNlcnRpZmljYXRlIG1hdGNoZWQgdGhlIGhvc3QgaXQgdGhvdWdodCBpdCB3YXMgdGFsa2luZyB0by4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmE2OGFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS41LnR4dApAQCAtMCwwICsxLDQ3IEBACitHaXQgMS44LjEuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMS40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBHaXZlbiBhIHN0cmluZyB3aXRoIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgdGhhdCBiZWdpbnMgd2l0aCAnLScgb24KKyAgIHRoZSBjb21tYW5kIGxpbmUgd2hlcmUgYW4gb3B0aW9uIGlzIGV4cGVjdGVkLCB0aGUgb3B0aW9uIHBhcnNlcgorICAgdXNlZCBqdXN0IG9uZSBieXRlIG9mIHRoZSB1bmtub3duIGxldHRlciB3aGVuIHJlcG9ydGluZyBhbiBlcnJvci4KKworICogSW4gdjEuOC4xLCB0aGUgYXR0cmlidXRlIHBhcnNlciB3YXMgdGlnaHRlbmVkIHRvbyByZXN0cmljdGl2ZSB0bworICAgZXJyb3Igb3V0IHVwb24gc2VlaW5nIGFuIGVudHJ5IHRoYXQgYmVnaW5zIHdpdGggYW4gISAoZXhjbGFtYXRpb24pLAorICAgd2hpY2ggbWF5IGNvbmZ1c2UgdXNlcnMgdG8gZXhwZWN0IGEgIm5lZ2F0aXZlIG1hdGNoIiwgd2hpY2ggZG9lcworICAgbm90IGV4aXN0LiAgVGhpcyBoYXMgYmVlbiBkZW1vdGVkIHRvIGEgd2FybmluZzsgc3VjaCBhbiBlbnRyeSBpcworICAgc3RpbGwgaWdub3JlZC4KKworICogImdpdCBhcHBseSAtLXN1bW1hcnkiIGhhcyBiZWVuIHRhdWdodCB0byBtYWtlIHN1cmUgdGhlIHNpbWlsYXJpdHkKKyAgIHZhbHVlIHNob3duIGluIGl0cyBvdXRwdXQgaXMgc2Vuc2libGUsIGV2ZW4gd2hlbiB0aGUgaW5wdXQgaGFkIGEKKyAgIGJvZ3VzIHZhbHVlLgorCisgKiAiZ2l0IGNsZWFuIiBzaG93ZWQgd2hhdCBpdCB3YXMgZ29pbmcgdG8gZG8sIGJ1dCBzb21ldGltZXMgZW5kZWQKKyAgIHVwIGZpbmRpbmcgdGhhdCBpdCB3YXMgbm90IGFsbG93ZWQgdG8gZG8gc28sIHdoaWNoIHJlc3VsdGVkIGluIGEKKyAgIGNvbmZ1c2luZyBvdXRwdXQgKGUuZy4gYWZ0ZXIgc2F5aW5nIHRoYXQgaXQgd2lsbCByZW1vdmUgYW4KKyAgIHVudHJhY2tlZCBkaXJlY3RvcnksIGl0IGZvdW5kIGFuIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5IHRoZXJlCisgICB3aGljaCBpdCBpcyBub3QgYWxsb3dlZCB0byByZW1vdmUpLiAgSXQgbm93IHBlcmZvcm1zIHRoZSBhY3Rpb25zCisgICBhbmQgdGhlbiByZXBvcnRzIHRoZSBvdXRjb21lIG1vcmUgZmFpdGhmdWxseS4KKworICogImdpdCBjbG9uZSIgdXNlZCB0byBhbGxvdyAtLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpcj0kdGhlcmUKKyAgIG9wdGlvbnMgYXQgdGhlIHNhbWUgdGltZSwgd2hpY2ggd2FzIG5vbnNlbnNpY2FsLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgbWlzaGFuZGxlZCB0aW1lc3RhbXBzIGF0IERTVCBib3VuZGFyeS4KKworICogV2UgdXNlZCB0byBoYXZlIGFuIGFyYml0cmFyeSAzMiBsaW1pdCBmb3IgY29tYmluZWQgZGlmZiBpbnB1dCwKKyAgIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGxlYWRpbmcgY29sb25zIHNob3duIHdoZW4gc2hvd2luZworICAgdGhlICItLXJhdyAtLWNjIiBvdXRwdXQuCisKKyAqIFRoZSBzbWFydCBIVFRQIGNsaWVudHMgZm9yZ290IHRvIHZlcmlmeSB0aGUgY29udGVudC10eXBlIHRoYXQgY29tZXMKKyAgIGJhY2sgZnJvbSB0aGUgc2VydmVyIHNpZGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVlc3QgaXMgYmVpbmcKKyAgIGhhbmRsZWQgcHJvcGVybHkuCisKKyAqICJnaXQgaGVscCByZW1vdGUtaGVscGVycyIgZmFpbGVkIHRvIGZpbmQgdGhlIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXR3ZWIiIHBhZ2VzIHNlcnZlZCBvdmVyIEhUVFBTLCB3aGVuIGNvbmZpZ3VyZWQgdG8gc2hvdyBwaWNvbiBvcgorICAgZ3JhdmF0YXIsIHJlZmVycmVkIHRvIHRoZXNlIGV4dGVybmFsIHJlc291cmNlcyB0byBiZSBmZXRjaGVkIHZpYQorICAgSFRUUCwgcmVzdWx0aW5nIGluIG1peGVkIGNvbnRlbnRzIHdhcm5pbmcgaW4gYnJvd3NlcnMuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1Y2YyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNi50eHQKQEAgLTAsMCArMSwzOSBAQAorR2l0IDEuOC4xLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjEuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZWFybGllciBjaGFuZ2UgdG8gdGhlIGF0dHJpYnV0ZSBzeXN0ZW0gaW50cm9kdWNlZCBhdCB2MS44LjEuMiBieQorICAgbWlzdGFrZSBzdG9wcGVkIGEgcGF0dGVybiAiZGlyIiAod2l0aG91dCB0cmFpbGluZyBzbGFzaCkgZnJvbQorICAgbWF0Y2hpbmcgYSBkaXJlY3RvcnkgImRpciIgKGl0IG9ubHkgd2FudGVkIHRvIGFsbG93IHBhdHRlcm4gImRpci8iCisgICB0byBhbHNvIG1hdGNoKS4KKworICogVGhlIGNvZGUgdG8ga2VlcCB0cmFjayBvZiB3aGF0IGRpcmVjdG9yeSBuYW1lcyBhcmUga25vd24gdG8gR2l0IG9uCisgICBwbGF0Zm9ybXMgd2l0aCBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zIGNhbiBnZXQgY29uZnVzZWQgdXBvbiBhCisgICBoYXNoIGNvbGxpc2lvbiBiZXR3ZWVuIHRoZXNlIHBhdGhuYW1lcyBhbmQgbG9vcGVkIGZvcmV2ZXIuCisKKyAqIFdoZW4gdGhlICItLXByZWZpeCIgb3B0aW9uIGlzIHVzZWQgdG8gImNoZWNrb3V0LWluZGV4IiwgdGhlIGNvZGUKKyAgIGRpZCBub3QgcGljayB0aGUgY29ycmVjdCBvdXRwdXQgZmlsdGVyIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGUKKyAgIHNldHRpbmcuCisKKyAqIEFubm90YXRlZCB0YWdzIG91dHNpZGUgcmVmcy90YWdzLyBoaWVyYXJjaHkgd2VyZSBub3QgYWR2ZXJ0aXNlZAorICAgY29ycmVjdGx5IHRvIHRoZSBscy1yZW1vdGUgYW5kIGZldGNoIHdpdGggcmVjZW50IHZlcnNpb24gb2YgR2l0LgorCisgKiBUaGUgbG9naWMgdXNlZCBieSAiZ2l0IGRpZmYgLU0gLS1zdGF0IiB0byBzaG9ydGVuIHRoZSBuYW1lcyBvZgorICAgZmlsZXMgYmVmb3JlIGFuZCBhZnRlciBhIHJlbmFtZSBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gdGhlCisgICBjb21tb24gcHJlZml4IGFuZCBzdWZmaXggYmV0d2VlbiB0aGUgdHdvIGZpbGVuYW1lcyBvdmVybGFwcGVkLgorCisgKiAiZ2l0IHVwZGF0ZS1pbmRleCAtaCIgZGlkIG5vdCBkbyB0aGUgdXN1YWwgIi1oKGVscCkiIHRoaW5nLgorCisgKiBwZXJsL0dpdC5wbTo6Y2F0X2Jsb2Igc2x1cnBlZCBldmVyeXRoaW5nIGluIGNvcmUgb25seSB0byB3cml0ZSBpdAorICAgb3V0IHRvIGEgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCB3YXMgbm90IGEgdmVyeSBzbWFydCB0aGluZyB0byBkby4KKworICogVGhlIFNTTCBwZWVyIHZlcmlmaWNhdGlvbiBkb25lIGJ5ICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IGFzayBmb3IKKyAgIFNlcnZlciBOYW1lIEluZGljYXRpb24gKFJGQyA0MzY2KSwgZmFpbGluZyB0byBjb25uZWN0IFNTTC9UTFMKKyAgIHNpdGVzIHRoYXQgc2VydmUgbXVsdGlwbGUgaG9zdG5hbWVzIG9uIGEgc2luZ2xlIElQLgorCisgKiAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIGRpZCBub3Qgc2F5ICJyZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeSIgZm9yIGEKKyAgIGJ1bmRsZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55IHByZXJlcXVpc2l0ZXMuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmY5NTU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS50eHQKQEAgLTAsMCArMSwyNDEgQEAKK0dpdCB2MS44LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSAobm90ICp0aGlzKiBvbmUpLCB3ZSB3aWxsIGNoYW5nZSB0aGUKK2JlaGF2aW9yIG9mIHRoZSAiZ2l0IHB1c2giIGNvbW1hbmQuCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgV2Ugd2lsbCB1c2UgdGhlICJzaW1wbGUiIHNlbWFudGljcyB0aGF0IHB1c2hlcyB0aGUKK2N1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQKK2JyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdCByZW1vdGUgYnJhbmNoLiAgVGhlcmUgaXMgYSB1c2VyCitwcmVmZXJlbmNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgInB1c2guZGVmYXVsdCIgdG8gY2hhbmdlIHRoaXMsIGFuZAorImdpdCBwdXNoIiB3aWxsIHdhcm4gYWJvdXQgdGhlIHVwY29taW5nIGNoYW5nZSB1bnRpbCB5b3Ugc2V0IHRoaXMKK3ZhcmlhYmxlIGluIHRoaXMgcmVsZWFzZS4KKworImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0iIGlzIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIGEKK3JlbGF0aXZlbHkgZGlzdGFudCBmdXR1cmUuICAiZ2l0IGJyYW5jaCBbLXV8LS1zZXQtdXBzdHJlYW0tdG9dIiBoYXMKK2JlZW4gaW50cm9kdWNlZCB3aXRoIGEgc2FuZXIgb3JkZXIgb2YgYXJndW1lbnRzIHRvIHJlcGxhY2UgaXQuCisKKworVXBkYXRlcyBzaW5jZSB2MS44LjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBDb21tYW5kLWxpbmUgY29tcGxldGlvbiBzY3JpcHRzIGZvciB0Y3NoIGFuZCB6c2ggaGF2ZSBiZWVuIGFkZGVkLgorCisgKiAiZ2l0LXByb21wdCIgc2NyaXB0bGV0IChpbiBjb250cmliL2NvbXBsZXRpb24pIGNhbiBiZSB0b2xkIHRvIHBhaW50CisgICBwaWVjZXMgb2YgdGhlIGhpbnRzIGluIHRoZSBwcm9tcHQgc3RyaW5nIGluIGNvbG9ycy4KKworICogU29tZSBkb2N1bWVudGF0aW9uIHBhZ2VzIHRoYXQgdXNlZCB0byBzaGlwIG9ubHkgaW4gdGhlIHBsYWluIHRleHQKKyAgIGZvcm1hdCBhcmUgbm93IGZvcm1hdHRlZCBpbiBIVE1MIGFzIHdlbGwuCisKKyAqIFdlIHVzZWQgdG8gaGF2ZSBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIGFuY2llbnQgImxlc3MiIHRoYXQKKyAgIGNhdXNlcyBpdCB0byBleGl0IHdpdGhvdXQgYW55IG91dHB1dCB3aGVuIHRoZSB0ZXJtaW5hbCBpcyByZXNpemVkLgorICAgVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiAibGVzcyIgdmVyc2lvbiA0MDYgKEp1bmUgMjAwNyksIGFuZCB0aGUKKyAgIHdvcmthcm91bmQgaGFzIGJlZW4gcmVtb3ZlZCBpbiB0aGlzIHJlbGVhc2UuCisKKyAqIFdoZW4gImdpdCBjaGVja291dCIgY2hlY2tzIG91dCBhIGJyYW5jaCwgaXQgdGVsbHMgdGhlIHVzZXIgaG93IGZhcgorICAgYmVoaW5kIChvciBhaGVhZCkgdGhlIG5ldyBicmFuY2ggaXMgcmVsYXRpdmUgdG8gdGhlIHJlbW90ZSB0cmFja2luZworICAgYnJhbmNoIGl0IGJ1aWxkcyB1cG9uLiAgVGhlIG1lc3NhZ2Ugbm93IGFsc28gYWR2aXNlcyBob3cgdG8gc3luYworICAgdGhlbSB1cCBieSBwdXNoaW5nIG9yIHB1bGxpbmcuICBUaGlzIGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZQorICAgYWR2aWNlLnN0YXR1c0hpbnRzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgY29uZmlnIC0tZ2V0IiB1c2VkIHRvIGRpYWdub3NlIHByZXNlbmNlIG9mIG11bHRpcGxlCisgICBkZWZpbml0aW9ucyBvZiB0aGUgc2FtZSB2YXJpYWJsZSBpbiB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGZpbGUgYXMKKyAgIGFuIGVycm9yLCBidXQgaXQgbm93IGFwcGxpZXMgdGhlICJsYXN0IG9uZSB3aW5zIiBydWxlIHVzZWQgYnkgdGhlCisgICBpbnRlcm5hbCBjb25maWd1cmF0aW9uIGxvZ2ljLiAgU3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgbWF5IGJlIGFuCisgICBBUEkgcmVncmVzc2lvbiBidXQgaXQgaXMgZXhwZWN0ZWQgdGhhdCBub2JvZHkgd2lsbCBub3RpY2UgaXQgaW4KKyAgIHByYWN0aWNlLgorCisgKiBBIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJkaWZmLmNvbnRleHQiIGNhbiBiZSB1c2VkIHRvCisgICBnaXZlIHRoZSBkZWZhdWx0IG51bWJlciBvZiBjb250ZXh0IGxpbmVzIGluIHRoZSBwYXRjaCBvdXRwdXQsIHRvCisgICBvdmVycmlkZSB0aGUgaGFyZGNvZGVkIGRlZmF1bHQgb2YgMyBsaW5lcy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgdGhlICItLW5vdGVzPTxyZWY+IiBvcHRpb24gdG8gZ2l2ZQorICAgbm90ZXMgZm9yIHRoZSBjb21taXQgYWZ0ZXIgdGhlIHRocmVlLWRhc2ggbGluZXMgaW4gaXRzIG91dHB1dC4KKworICogImdpdCBsb2cgLXAgLVM8c3RyaW5nPiIgbm93IGxvb2tzIGZvciB0aGUgPHN0cmluZz4gYWZ0ZXIgYXBwbHlpbmcKKyAgIHRoZSB0ZXh0Y29udiBmaWx0ZXIgKGlmIGRlZmluZWQpOyBlYXJsaWVyIGl0IGluc3BlY3RlZCB0aGUgY29udGVudHMKKyAgIG9mIHRoZSBibG9icyB3aXRob3V0IGZpbHRlcmluZy4KKworICogImdpdCBsb2cgLS1ncmVwPTxwY3JlPiIgbGVhcm5lZCB0byBob25vciB0aGUgImdyZXAucGF0dGVybnR5cGUiCisgICBjb25maWd1cmF0aW9uIHNldCB0byAicGVybCIuCisKKyAqICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0PiIgbm93IGludGVycHJldHMgPG9iamVjdD4gYXMgYW4gZXh0ZW5kZWQKKyAgIFNIQS0xIChlLmcuIEhFQUR+NCBpcyBhbGxvd2VkKSwgaW5zdGVhZCBvZiBvbmx5IGFjY2VwdGluZyBmdWxsIGhleAorICAgb2JqZWN0IG5hbWUuCisKKyAqICJnaXQgcm0gJHN1Ym1vZHVsZSIgdXNlZCB0byBwdW50IG9uIHJlbW92aW5nIGEgc3VibW9kdWxlIHdvcmtpbmcKKyAgIHRyZWUgdG8gYXZvaWQgbG9zaW5nIHRoZSByZXBvc2l0b3J5IGVtYmVkZGVkIGluIGl0LiAgQmVjYXVzZQorICAgcmVjZW50IGdpdCB1c2VzIGEgbWVjaGFuaXNtIHRvIHNlcGFyYXRlIHRoZSBzdWJtb2R1bGUgcmVwb3NpdG9yeQorICAgZnJvbSB0aGUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZSwgImdpdCBybSIgbGVhcm5lZCB0byBkZXRlY3QgdGhpcworICAgY2FzZSBhbmQgcmVtb3ZlcyB0aGUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZSB3aGVuIGl0IGlzIHNhZmUgdG8gZG8gc28uCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgdXNlZCB0byBwcm9tcHQgZm9yIHRoZSBzZW5kZXIgYWRkcmVzcywgZXZlbiB3aGVuCisgICB0aGUgY29tbWl0dGVyIGlkZW50aXR5IGlzIHdlbGwgc3BlY2lmaWVkIChlLmcuIHZpYSB1c2VyLm5hbWUgYW5kCisgICB1c2VyLmVtYWlsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzKS4gIFRoZSBjb21tYW5kIG5vIGxvbmdlciBnaXZlcworICAgdGhpcyBwcm9tcHQgd2hlbiBub3QgbmVjZXNzYXJ5LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgYWxsb3cgbm9uLWFkZHJlc3MgZ2FyYmFnZSBzdHJpbmdzIHRvCisgICBhcHBlYXIgYWZ0ZXIgYWRkcmVzc2VzIG9uIENjOiBsaW5lcyBpbiB0aGUgcGF0Y2ggZmlsZXMgKGFuZCB3aGVuCisgICB0b2xkIHRvIHBpY2sgdGhlbSB1cCB0byBmaW5kIG1vcmUgcmVjaXBpZW50cyksIGUuZy4KKworICAgICBDYzogU3RhYmxlIEtlcm5lbCA8c3RhYmxlQGsub3JnPiAjIGZvciB2My4yIGFuZCB1cAorCisgICBUaGUgY29tbWFuZCBub3cgc3RyaXBzICIgIyBmb3IgdjMuMiBhbmQgdXAiIHBhcnQgYmVmb3JlIGFkZGluZyB0aGUKKyAgIHJlbWFpbmRlciBvZiB0aGlzIGxpbmUgdG8gdGhlIGxpc3Qgb2YgcmVjaXBpZW50cy4KKworICogImdpdCBzdWJtb2R1bGUgYWRkIiBsZWFybmVkIHRvIGFkZCBhIG5ldyBzdWJtb2R1bGUgYXQgdGhlIHNhbWUKKyAgIHBhdGggYXMgdGhlIHBhdGggd2hlcmUgYW4gdW5yZWxhdGVkIHN1Ym1vZHVsZSB3YXMgYm91bmQgdG8gaW4gYW4KKyAgIGV4aXN0aW5nIHJldmlzaW9uIHZpYSB0aGUgIi0tbmFtZSIgb3B0aW9uLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzeW5jIiBsZWFybmVkIHRoZSAiLS1yZWN1cnNpdmUiIG9wdGlvbi4KKworICogImRpZmYuc3VibW9kdWxlIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGdpdmUgY3VzdG9tCisgICBkZWZhdWx0IHZhbHVlIHRvIHRoZSAiZ2l0IGRpZmYgLS1zdWJtb2R1bGUiIG9wdGlvbi4KKworICogImdpdCBzeW1ib2xpYy1yZWYiIGxlYXJuZWQgdGhlICItZCAkc3ltcmVmIiBvcHRpb24gdG8gZGVsZXRlIHRoZQorICAgbmFtZWQgc3ltYm9saWMgcmVmLCB3aGljaCBpcyBtb3JlIGludHVpdGl2ZSB3YXkgdG8gc3BlbGwgaXQgdGhhbgorICAgInVwZGF0ZS1yZWYgLWQgLS1uby1kZXJlZiAkc3ltcmVmIi4KKworCitGb3JlaWduIEludGVyZmFjZQorCisgKiAiZ2l0IGN2c2ltcG9ydCIgY2FuIGJlIHRvbGQgdG8gcmVjb3JkIHRpbWV6b25lcyAob3RoZXIgdGhhbiBHTVQpCisgICBwZXItYXV0aG9yIHZpYSBpdHMgYXV0aG9yIGluZm8gZmlsZS4KKworICogVGhlIHJlbW90ZSBoZWxwZXIgaW50ZXJmYWNlIHRvIGludGVyYWN0IHdpdGggc3VidmVyc2lvbgorICAgcmVwb3NpdG9yaWVzIChvbmUgb2YgdGhlIEdTb0MgMjAxMiBwcm9qZWN0cykgaGFzIGJlZW4gbWVyZ2VkLgorCisgKiBBIG5ldyByZW1vdGUtaGVscGVyIGludGVyZmFjZSBmb3IgTWVyY3VyaWFsIGhhcyBiZWVuIGFkZGVkIHRvCisgICBjb250cmliL3JlbW90ZS1oZWxwZXJzLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgZ2l0KDEpIHdhcyBwb2ludGluZyBhdCBhIHBhZ2UgYXQgYW4gZXh0ZXJuYWwKKyAgIHNpdGUgZm9yIHRoZSBsaXN0IG9mIGF1dGhvcnMgdGhhdCBubyBsb25nZXIgZXhpc3RlZC4gIFRoZSBsaW5rIGhhcworICAgYmVlbiB1cGRhdGVkIHRvIHBvaW50IGF0IGFuIGFsdGVybmF0aXZlIHNpdGUuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqIENvbXBpbGF0aW9uIG9uIEN5Z3dpbiB3aXRoIG5ld2VyIGhlYWRlciBmaWxlcyBhcmUgc3VwcG9ydGVkIG5vdy4KKworICogQSBjb3VwbGUgb2YgbG93LWxldmVsIGltcGxlbWVudGF0aW9uIHVwZGF0ZXMgb24gTWluR1cuCisKKyAqIFRoZSBsb2dpYyB0byBnZW5lcmF0ZSB0aGUgaW5pdGlhbCBhZHZlcnRpc2VtZW50IGZyb20gInVwbG9hZC1wYWNrIgorICAgKGkuZS4gd2hhdCBpcyBpbnZva2VkIGJ5ICJnaXQgZmV0Y2giIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZQorICAgY29ubmVjdGlvbikgdG8gbGlzdCB3aGF0IHJlZnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcmVwb3NpdG9yeSBoYXMKKyAgIGJlZW4gb3B0aW1pemVkLgorCisgKiBUaGUgbG9naWMgdG8gZmluZCBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IG1hdGNoIGEgZ2l2ZW4gcGF0aCBoYXMKKyAgIGJlZW4gb3B0aW1pemVkLgorCisgKiBVc2UgcHJlbG9hZGluZGV4IGluICJnaXQgZGlmZi1pbmRleCIgYW5kICJnaXQgdXBkYXRlLWluZGV4Iiwgd2hpY2gKKyAgIGhhcyBhIG5pY2Ugc3BlZWR1cCBvbiBzeXN0ZW1zIHdpdGggc2xvdyBzdGF0IGNhbGxzIChhbmQgZXZlbiBvbgorICAgTGludXgpLgorCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS44LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjguMCBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHBhcnNlciBoYWQgYW4gdW5uZWNlc3NhcnkgaGFyZGNvZGVkIGxpbWl0IG9uCisgICB2YXJpYWJsZSBuYW1lcyB0aGF0IHdhcyBub3QgY2hlY2tlZCBjb25zaXN0ZW50bHkuCisKKyAqIFRoZSAic2F5IiBmdW5jdGlvbiBpbiB0aGUgdGVzdCBzY2FmZm9sZGluZyBpbmNvcnJlY3RseSBhbGxvd2VkCisgICAiZWNobyIgdG8gaW50ZXJwcmV0ICJcYSIgYXMgaWYgaXQgd2VyZSBhIEMtc3RyaW5nIGFza2luZyBmb3IgYQorICAgQkVMIG91dHB1dC4KKworICogImdpdCBtZXJnZXRvb2wiIGZlZWRzIC9kZXYvbnVsbCBhcyBhIGNvbW1vbiBhbmNlc3RvciB3aGVuIGRlYWxpbmcKKyAgIHdpdGggYW4gYWRkL2FkZCBjb25mbGljdCwgYnV0IHA0bWVyZ2UgYmFja2VuZCBjYW5ub3QgaGFuZGxlCisgICBpdC4gV29yayBpdCBhcm91bmQgYnkgcGFzc2luZyBhIHRlbXBvcmFyeSBlbXB0eSBmaWxlLgorCisgKiAiZ2l0IGxvZyAtRiAtRSAtLWdyZXA9JzxlcmU+JyIgZmFpbGVkIHRvIHVzZSB0aGUgZ2l2ZW4gPGVyZT4KKyAgIHBhdHRlcm4gYXMgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uLCBhbmQgaW5zdGVhZCBsb29rZWQgZm9yIHRoZQorICAgc3RyaW5nIGxpdGVyYWxseS4KKworICogImdpdCBncmVwIC1lIHBhdHRlcm4gPHRyZWU+IiBhc2tlZCB0aGUgYXR0cmlidXRlIHN5c3RlbSB0byByZWFkCisgICAiPHRyZWU+Oi5naXRhdHRyaWJ1dGVzIiBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUsIHdoaWNoIHdhcworICAgbm9uc2Vuc2UuCisKKyAqIEEgc3ltYm9saWMgcmVmIHJlZnMvaGVhZHMvU1lNIHdhcyBub3QgY29ycmVjdGx5IHJlbW92ZWQgd2l0aCAiZ2l0CisgICBicmFuY2ggLWQgU1lNIjsgdGhlIGNvbW1hbmQgcmVtb3ZlZCB0aGUgcmVmIHBvaW50ZWQgYnkgU1lNCisgICBpbnN0ZWFkLgorCisgKiBVcGRhdGUgInJlbW90ZSB0cmFja2luZyBicmFuY2giIGluIHRoZSBkb2N1bWVudGF0aW9uIHRvCisgICAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCIuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgcnVuIHdoaWxlIHRoZSBIRUFEIGlzIGRldGFjaGVkIHRyaWVkIHRvIGZpbmQKKyAgIHRoZSB1cHN0cmVhbSBicmFuY2ggb2YgdGhlIGRldGFjaGVkIEhFQUQgKHdoaWNoIGJ5IGRlZmluaXRpb24KKyAgIGRvZXMgbm90IGV4aXN0KSBhbmQgZW1pdHRlZCB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcy4KKworICogVGhlIHJlZnMvcmVwbGFjZSBoaWVyYXJjaHkgd2FzIG5vdCBtZW50aW9uZWQgaW4gdGhlCisgICByZXBvc2l0b3J5LWxheW91dCBkb2NzLgorCisgKiBWYXJpb3VzIHJmYzIwNDcgcXVvdGluZyBpc3N1ZXMgYXJvdW5kIGEgbm9uLUFTQ0lJIG5hbWUgb24gdGhlCisgICBGcm9tOiBsaW5lIGluIHRoZSBvdXRwdXQgZnJvbSBmb3JtYXQtcGF0Y2ggaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKworICogU29tZXRpbWVzIGN1cmxfbXVsdGlfdGltZW91dCgpIGZ1bmN0aW9uIHN1Z2dlc3RlZCBhIHdyb25nIHRpbWVvdXQKKyAgIHZhbHVlIHdoZW4gdGhlcmUgaXMgbm8gZmlsZSBkZXNjcmlwdG9yIHRvIHdhaXQgb24gYW5kIHRoZSBodHRwCisgICB0cmFuc3BvcnQgZW5kZWQgdXAgc2xlZXBpbmcgZm9yIG1pbnV0ZXMgaW4gc2VsZWN0KDIpIHN5c3RlbSBjYWxsLgorICAgQSB3b3JrYXJvdW5kIGhhcyBiZWVuIGFkZGVkIGZvciB0aGlzLgorCisgKiBGb3IgYSBmZXRjaCByZWZzcGVjIChvciB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHdpbGRjYXJkIG9uIG9uZSksCisgICB3ZSBhbHdheXMgd2FudCB0aGUgUkhTIHRvIG1hcCB0byBzb21ldGhpbmcgaW5zaWRlICJyZWZzLyIKKyAgIGhpZXJhcmNoeSwgYnV0IHRoZSBsb2dpYyB0byBjaGVjayBpdCB3YXMgbm90IGV4YWN0bHkgcmlnaHQuCisgICAobWVyZ2UgNWMwOGMxZiBqYy9tYWludC1mZXRjaC10aWdodGVuLXJlZm5hbWUtY2hlY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLUc8cGF0dGVybj4iIGRpZCBub3QgaG9ub3IgdGV4dGNvbnYgZmlsdGVyIHdoZW4gbG9va2luZworICAgZm9yIGNoYW5nZXMuCisKKyAqIFNvbWUgSFRUUCBzZXJ2ZXJzIGFzayBmb3IgYXV0aCBvbmx5IGR1cmluZyB0aGUgYWN0dWFsIHBhY2tpbmcgcGhhc2UKKyAgIChub3QgaW4gbHMtcmVtb3RlIHBoYXNlKTsgdGhpcyBpcyBub3QgcmVhbGx5IGEgcmVjb21tZW5kZWQKKyAgIGNvbmZpZ3VyYXRpb24sIGJ1dCB0aGUgY2xpZW50cyB1c2VkIHRvIGZhaWwgdG8gYXV0aGVudGljYXRlIHdpdGgKKyAgIHN1Y2ggc2VydmVycy4KKyAgIChtZXJnZSAyZTczNmZkIGprL21haW50LWh0dHAtaGFsZi1hdXRoLWZldGNoIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwNCIgdXNlZCB0byB0cnkgZXhwYW5kaW5nIG1hbGZvcm1lZCAiJGtleXdvcmQkIiB0aGF0IHNwYW5zCisgICBhY3Jvc3MgbXVsdGlwbGUgbGluZXMuCisKKyAqIFN5bnRheCBoaWdobGlnaHRpbmcgaW4gImdpdHdlYiIgd2FzIG5vdCBxdWl0ZSB3b3JraW5nLgorCisgKiBSU1MgZmVlZCBmcm9tICJnaXR3ZWIiIGhhZCBhIHhzcyBob2xlIGluIGl0cyB0aXRsZSBvdXRwdXQuCisKKyAqICJnaXQgY29uZmlnIC0tcGF0aCAka2V5IiBzZWdmYXVsdGVkIG9uICJbc2VjdGlvbl0ga2V5IiAoYSBib29sZWFuCisgICAidHJ1ZSIgc3BlbGxlZCB3aXRob3V0ICI9Iiwgbm90ICJbc2VjdGlvbl0ga2V5ID0gdHJ1ZSIpLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1iIGZvbyIgd2hpbGUgb24gYW4gdW5ib3JuIGJyYW5jaCBkaWQgbm90IHNheQorICAgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnZm9vJyIgbGlrZSBvdGhlciBjYXNlcy4KKworICogVmFyaW91cyBjb2RlcGF0aHMgaGF2ZSB3b3JrYXJvdW5kIGZvciBhIGNvbW1vbiBtaXNjb25maWd1cmF0aW9uIHRvCisgICBzcGVsbCAiVVRGLTgiIGFzICJ1dGY4IiwgYnV0IGl0IHdhcyBub3QgdXNlZCB1bmlmb3JtbHkuICBNb3N0CisgICBub3RhYmx5LCBtYWlsaW5mbyAod2hpY2ggaXMgdXNlZCBieSAiZ2l0IGFtIikgbGFja2VkIHRoaXMgc3VwcG9ydC4KKworICogV2UgZmFpbGVkIHRvIG1lbnRpb24gYSBmaWxlIHdpdGhvdXQgYW55IGNvbnRlbnQgY2hhbmdlIGJ1dCB3aG9zZQorICAgcGVybWlzc2lvbiBiaXQgd2FzIG1vZGlmaWVkLCBvciAod29yc2UgeWV0KSBhIG5ldyBmaWxlIHdpdGhvdXQgYW55CisgICBjb250ZW50IGluIHRoZSAiZ2l0IGRpZmYgLS1zdGF0IiBvdXRwdXQuCisKKyAqIFdoZW4gIi0tc3RhdC1jb3VudCIgaGlkZXMgYSBkaWZmc3RhdCBmb3IgYmluYXJ5IGNvbnRlbnRzLCB0aGUgdG90YWwKKyAgIG51bWJlciBvZiBhZGRlZCBhbmQgcmVtb3ZlZCBsaW5lcyBhdCB0aGUgYm90dG9tIHdhcyBjb21wdXRlZAorICAgaW5jb3JyZWN0bHkuCisKKyAqIFdoZW4gIi0tc3RhdC1jb3VudCIgaGlkZXMgYSBkaWZmc3RhdCBmb3IgdW5tZXJnZWQgcGF0aHMsIHRoZSB0b3RhbAorICAgbnVtYmVyIG9mIGFmZmVjdGVkIGZpbGVzIGF0IHRoZSBib3R0b20gb2YgdGhlICJkaWZmIC0tc3RhdCIgb3V0cHV0CisgICB3YXMgY29tcHV0ZWQgaW5jb3JyZWN0bHkuCisKKyAqICJkaWZmIC0tc2hvcnRzdGF0IiBtaXNjb3VudGVkIHRoZSB0b3RhbCBudW1iZXIgb2YgYWZmZWN0ZWQgZmlsZXMKKyAgIHdoZW4gdGhlcmUgd2VyZSB1bm1lcmdlZCBwYXRocy4KKworICogInVwZGF0ZS1yZWYgLWQgLS1kZXJlZiBTWU0iIHRvIGRlbGV0ZSBhIHJlZiB0aHJvdWdoIGEgc3ltYm9saWMgcmVmCisgICB0aGF0IHBvaW50cyB0byBpdCBkaWQgbm90IHJlbW92ZSBpdCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjlhNmZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4xLnR4dApAQCAtMCwwICsxLDExNSBAQAorR2l0IHYxLjguMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGVhcmxpZXIgY2hhbmdlIHRvIHRoZSBhdHRyaWJ1dGUgc3lzdGVtIGludHJvZHVjZWQgYXQgdjEuOC4xLjIgYnkKKyAgIG1pc3Rha2Ugc3RvcHBlZCBhIHBhdHRlcm4gImRpciIgKHdpdGhvdXQgdHJhaWxpbmcgc2xhc2gpIGZyb20KKyAgIG1hdGNoaW5nIGEgZGlyZWN0b3J5ICJkaXIiIChpdCBvbmx5IHdhbnRlZCB0byBhbGxvdyBwYXR0ZXJuICJkaXIvIgorICAgdG8gYWxzbyBtYXRjaCkuCisKKyAqIFZlcmlmaWNhdGlvbiBvZiBzaWduZWQgdGFncyB3ZXJlIG5vdCBkb25lIGNvcnJlY3RseSB3aGVuIG5vdCBpbiBDCisgICBvciBlbi9VUyBsb2NhbGUuCisKKyAqICdnaXQgY29tbWl0IC1tICIkbXNnIicgdXNlZCB0byBhZGQgYW4gZXh0cmEgbmV3bGluZSBldmVuIHdoZW4KKyAgICRtc2cgYWxyZWFkeSBlbmRlZCB3aXRoIG9uZS4KKworICogVGhlICItLW1hdGNoPTxwYXR0ZXJuPiIgb3B0aW9uIG9mICJnaXQgZGVzY3JpYmUiLCB3aGVuIHVzZWQgd2l0aAorICAgIi0tYWxsIiB0byBhbGxvdyByZWZzIHRoYXQgYXJlIG5vdCBhbm5vdGF0ZWQgdGFncyB0byBiZSB1c2VkIGFzIGEKKyAgIGJhc2Ugb2YgZGVzY3JpcHRpb24sIGRpZCBub3QgcmVzdHJpY3QgdGhlIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kCisgICB0byB0aG9zZSB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuLgorCisgKiBBbiBhbGlhc2VkIGNvbW1hbmQgc3Bhd25lZCBmcm9tIGEgYmFyZSByZXBvc2l0b3J5IHRoYXQgZG9lcyBub3Qgc2F5CisgICBpdCBpcyBiYXJlIHdpdGggImNvcmUuYmFyZSA9IHllcyIgaXMgdHJlYXRlZCBhcyBub24tYmFyZSBieSBtaXN0YWtlLgorCisgKiBXaGVuICJmb3JtYXQtcGF0Y2giIHF1b3RlZCBhIG5vbi1hc2NpaSBzdHJpbmdzIG9uIHRoZSBoZWFkZXIgZmlsZXMsCisgICBpdCBpbmNvcnJlY3RseSBhcHBsaWVkIHJmYzIwNDcgYW5kIGNob3BwZWQgYSBzaW5nbGUgY2hhcmFjdGVyIGluCisgICB0aGUgbWlkZGxlIG9mIGl0LgorCisgKiAiZ2l0IGFyY2hpdmUiIHJlcG9ydHMgYSBmYWlsdXJlIHdoZW4gYXNrZWQgdG8gY3JlYXRlIGFuIGFyY2hpdmUgb3V0CisgICBvZiBhbiBlbXB0eSB0cmVlLiAgSXQgd291bGQgYmUgbW9yZSBpbnR1aXRpdmUgdG8gZ2l2ZSBhbiBlbXB0eQorICAgYXJjaGl2ZSBiYWNrIGluIHN1Y2ggYSBjYXNlLgorCisgKiAiZ2l0IHRhZyAtZiA8dGFnPiIgYWx3YXlzIHNhaWQgIlVwZGF0ZWQgdGFnICc8dGFnPiciIGV2ZW4gd2hlbgorICAgY3JlYXRpbmcgYSBuZXcgdGFnIChpLmUuIG5vdCBvdmVyd3JpdGluZyBub3IgdXBkYXRpbmcpLgorCisgKiAiZ2l0IGNtZCAtLSAnOih0b3AnIiB3YXMgbm90IGRpYWdub3NlZCBhcyBhbiBpbnZhbGlkIHN5bnRheCwgYW5kCisgICBpbnN0ZWFkIHRoZSBwYXJzZXIga2VwdCByZWFkaW5nIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisKKyAqIEFubm90YXRlZCB0YWdzIG91dHNpZGUgcmVmcy90YWdzLyBoaWVyYXJjaHkgd2VyZSBub3QgYWR2ZXJ0aXNlZAorICAgY29ycmVjdGx5IHRvIHRoZSBscy1yZW1vdGUgYW5kIGZldGNoIHdpdGggcmVjZW50IHZlcnNpb24gb2YgR2l0LgorCisgKiBUaGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIHdoYXQgZGlyZWN0b3J5IG5hbWVzIGFyZSBrbm93biB0byBHaXQgb24KKyAgIHBsYXRmb3JtcyB3aXRoIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMgY2FuIGdldCBjb25mdXNlZCB1cG9uIGEKKyAgIGhhc2ggY29sbGlzaW9uIGJldHdlZW4gdGhlc2UgcGF0aG5hbWVzIGFuZCBsb29wZWQgZm9yZXZlci4KKworICogVGhlIGxvZ2ljIHVzZWQgYnkgImdpdCBkaWZmIC1NIC0tc3RhdCIgdG8gc2hvcnRlbiB0aGUgbmFtZXMgb2YKKyAgIGZpbGVzIGJlZm9yZSBhbmQgYWZ0ZXIgYSByZW5hbWUgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZQorICAgY29tbW9uIHByZWZpeCBhbmQgc3VmZml4IGJldHdlZW4gdGhlIHR3byBmaWxlbmFtZXMgb3ZlcmxhcHBlZC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiwgd2hlbiByZWN1cnNlZCBpbnRvIHN1Yi1zdWJtb2R1bGVzLCBkaWQgbm90CisgICBhY2N1bXVsYXRlIHRoZSBwcmVmaXggcGF0aHMuCisKKyAqICJnaXQgYW0gJG1haWxkaXIvIiBhcHBsaWVkIG1lc3NhZ2VzIGluIGFuIHVuZXhwZWN0ZWQgb3JkZXI7IHNvcnQKKyAgIGZpbGVuYW1lcyByZWFkIGZyb20gdGhlIG1haWxkaXIvIGluIGEgd2F5IHRoYXQgaXMgbW9yZSBsaWtlbHkgdG8KKyAgIHNvcnQgbWVzc2FnZXMgaW4gdGhlIG9yZGVyIHRoZSB3cml0aW5nIE1VQSBtZWFudCB0bywgYnkgc29ydGluZworICAgbnVtZXJpYyBzZWdtZW50IGluIG51bWVyaWMgb3JkZXIgYW5kIG5vbi1udW1lcmljIHNlZ21lbnQgaW4KKyAgIGFscGhhYmV0aWNhbCBvcmRlci4KKworICogV2hlbiBleHBvcnQtc3Vic3QgaXMgdXNlZCwgInppcCIgb3V0cHV0IHJlY29yZGVkIGluY29ycmVjdAorICAgc2l6ZSBvZiB0aGUgZmlsZS4KKworICogU29tZSBwbGF0Zm9ybXMgYW5kIHVzZXJzIHNwZWxsIFVURi04IGRpZmZlcmVudGx5OyByZXRyeSB3aXRoIHRoZQorICAgbW9zdCBvZmZpY2lhbCAiVVRGLTgiIHdoZW4gdGhlIHN5c3RlbSBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZQorICAgdXNlci1zdXBwbGllZCBlbmNvZGluZyBuYW1lIHRoYXQgYXJlIHRoZSBjb21tb24gYWx0ZXJuYXRpdmUKKyAgIHNwZWxsaW5ncyBvZiBVVEYtOC4KKworICogImdpdCBicmFuY2giIGRpZCBub3QgYm90aGVyIHRvIGNoZWNrIG5vbnNlbnNlIGNvbW1hbmQgbGluZQorICAgcGFyYW1ldGVycyBhbmQgaXNzdWUgZXJyb3JzIGluIG1hbnkgY2FzZXMuCisKKyAqICJnaXQgdXBkYXRlLWluZGV4IC1oIiBkaWQgbm90IGRvIHRoZSB1c3VhbCAiLWgoZWxwKSIgdGhpbmcuCisKKyAqIHBlcmwvR2l0LnBtOjpjYXRfYmxvYiBzbHVycGVkIGV2ZXJ5dGhpbmcgaW4gY29yZSBvbmx5IHRvIHdyaXRlIGl0CisgICBvdXQgdG8gYSBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHdhcyBub3QgYSB2ZXJ5IHNtYXJ0IHRoaW5nIHRvIGRvLgorCisgKiBUaGUgU1NMIHBlZXIgdmVyaWZpY2F0aW9uIGRvbmUgYnkgImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgYXNrIGZvcgorICAgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiAoUkZDIDQzNjYpLCBmYWlsaW5nIHRvIGNvbm5lY3QgU1NML1RMUworICAgc2l0ZXMgdGhhdCBzZXJ2ZSBtdWx0aXBsZSBob3N0bmFtZXMgb24gYSBzaW5nbGUgSVAuCisKKyAqICJnaXQgaW5kZXgtcGFjayIgaGFkIGEgYnVmZmVyLW92ZXJmbG93IHdoaWxlIHByZXBhcmluZyBhbgorICAgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5zbGF0ZWQgdmVyc2lvbiBvZiBpdCB3YXMgdG9vCisgICBsb25nLgorCisgKiBDbGFyaWZ5IGluIHRoZSBkb2N1bWVudGF0aW9uICJ3aGF0IiBnZXRzIHB1c2hlZCB0byAid2hlcmUiIHdoZW4gdGhlCisgICBjb21tYW5kIGxpbmUgdG8gImdpdCBwdXNoIiBkb2VzIG5vdCBzYXkgdGhlc2UgZXhwbGljaXRseS4KKworICogSW4gImdpdCByZWZsb2cgZXhwaXJlIiwgUkVBQ0hBQkxFIGJpdCB3YXMgbm90IGNsZWFyZWQgZnJvbSB0aGUKKyAgIGNvcnJlY3Qgb2JqZWN0cy4KKworICogVGhlICItLWNvbG9yPTx3aGVuPiIgYXJndW1lbnQgdG8gdGhlIGNvbW1hbmRzIGluIHRoZSBkaWZmIGZhbWlseQorICAgd2FzIGRlc2NyaWJlZCBwb29ybHkuCisKKyAqIFRoZSBhcmd1bWVudHMgZ2l2ZW4gdG8gcHJlLXJlYmFzZSBob29rIHdlcmUgbm90IGRvY3VtZW50ZWQuCisKKyAqIFRoZSB2NCBpbmRleCBmb3JtYXQgd2FzIG5vdCBkb2N1bWVudGVkLgorCisgKiBUaGUgIi0tbWF0Y2g9PHBhdHRlcm4+IiBhcmd1bWVudCAiZ2l0IGRlc2NyaWJlIiB0YWtlcyB1c2VzIGdsb2IKKyAgIHBhdHRlcm4gYnV0IGl0IHdhc24ndCBvYnZpb3VzIGZyb20gdGhlIGRvY3VtZW50YXRpb24uCisKKyAqIFNvbWUgc291cmNlcyBmYWlsZWQgdG8gY29tcGlsZSBvbiBzeXN0ZW1zIHRoYXQgbGFjayBOSV9NQVhIT1NUIGluCisgICB0aGVpciBzeXN0ZW0gaGVhZGVyIChlLmcuIHovT1MpLgorCisgKiBBZGQgYW4gZXhhbXBsZSB1c2Ugb2YgIi0tZW52LWZpbHRlciIgaW4gImZpbHRlci1icmFuY2giCisgICBkb2N1bWVudGF0aW9uLgorCisgKiAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIGRpZCBub3Qgc2F5ICJyZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeSIgZm9yIGEKKyAgIGJ1bmRsZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55IHByZXJlcXVpc2l0ZXMuCisKKyAqIEluIHRoZSB2MS44LjAgZXJhLCB3ZSBjaGFuZ2VkIHN5bWJvbHMgdGhhdCBkbyBub3QgaGF2ZSB0byBiZSBnbG9iYWwKKyAgIHRvIGZpbGUgc2NvcGUgc3RhdGljLCBidXQgYSBmZXcgZnVuY3Rpb25zIGluIGdyYXBoLmMgd2VyZSB1c2VkIGJ5CisgICBDR2l0IGZyb20gc2lkZXdheXMgYnlwYXNzaW5nIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhlIEFQSSB0aGUKKyAgIGluLXRyZWUgdXNlcnMgdXNlLgorCisgKiAiZ2l0IG1lcmdlLXRyZWUiIGhhZCBhIHR5cG8gaW4gdGhlIGxvZ2ljIHRvIGRldGVjdCBkL2YgY29uZmxpY3RzLAorICAgd2hpY2ggY2F1c2VkIGl0IHRvIHNlZ2ZhdWx0IGluIHNvbWUgY2FzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhkZjFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4yLnR4dApAQCAtMCwwICsxLDYxIEBACitHaXQgdjEuOC4yLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4yLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFpzaCBjb21wbGV0aW9uIGZvcmdvdCB0aGF0ICclJyBjaGFyYWN0ZXIgdXNlZCB0byBzaWduYWwgdW50cmFja2VkCisgICBmaWxlcyBuZWVkcyB0byBiZSBlc2NhcGVkIHdpdGggYW5vdGhlciAnJScuCisKKyAqIEEgY29tbWl0IG9iamVjdCB3aG9zZSBhdXRob3Igb3IgY29tbWl0dGVyIGlkZW50IGFyZSBtYWxmb3JtZWQKKyAgIGNyYXNoZWQgc29tZSBjb2RlIHRoYXQgdHJ1c3RlZCB0aGF0IGEgbmFtZSwgYW4gZW1haWwgYW5kIGFuCisgICB0aW1lc3RhbXAgY2FuIGFsd2F5cyBiZSBmb3VuZCBpbiBpdC4KKworICogVGhlIG5ldyBjb3JlLmNvbW1lbnRjaGFyIGNvbmZpZ3VyYXRpb24gd2FzIG5vdCBhcHBsaWVkIHRvIGEgZmV3CisgICBwbGFjZXMuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgZGlkIG5vdCBwYXNzICItdi8tcSIgb3B0aW9ucyB0byB1bmRlcmx5aW5nCisgICAiZ2l0IHJlYmFzZSIuCisKKyAqIFdoZW4gcmVjZWl2ZS1wYWNrIGRldGVjdHMgZXJyb3IgaW4gdGhlIHBhY2sgaGVhZGVyIGl0IHJlY2VpdmVkIGluCisgICBvcmRlciB0byBkZWNpZGUgd2hpY2ggb2YgdW5wYWNrLW9iamVjdHMgb3IgaW5kZXgtcGFjayB0byBydW4sIGl0CisgICByZXR1cm5lZCB3aXRob3V0IGNsb3NpbmcgdGhlIGVycm9yIHN0cmVhbSwgd2hpY2ggbGVkIHRvIGEgaGFuZworICAgc2lkZWJhbmQgdGhyZWFkLgorCisgKiAiZ2l0IGRpZmYgLS1kaWZmLWFsZ29yaXRobT1hbGdvIiB3YXMgdW5kZXJzdG9vZCBieSB0aGUgY29tbWFuZCBsaW5lCisgICBwYXJzZXIsIGJ1dCAiZ2l0IGRpZmYgLS1kaWZmLWFsZ29yaXRobSBhbGdvIiB3YXMgbm90LgorCisgKiAiZ2l0IGxvZyAtUy8tRyIgc3RhcnRlZCBwYXlpbmcgYXR0ZW50aW9uIHRvIHRleHRjb252IGZpbHRlciwgYnV0CisgICB0aGVyZSB3YXMgbm8gd2F5IHRvIGRpc2FibGUgdGhpcy4gIE1ha2UgaXQgaG9ub3IgLS1uby10ZXh0Y29udgorICAgb3B0aW9uLgorCisgKiAiZ2l0IG1lcmdlICQoZ2l0IHJldi1wYXJzZSB2MS44LjIpIiBiZWhhdmVkIHF1aXRlIGRpZmZlcmVudGx5IGZyb20KKyAgICJnaXQgbWVyZ2UgdjEuOC4yIiwgYXMgaWYgdjEuOC4yIHdlcmUgd3JpdHRlbiBhcyB2MS44LjJeMCBhbmQgZGlkCisgICBub3QgcGF5IG11Y2ggYXR0ZW50aW9uIHRvIHRoZSBhbm5vdGF0ZWQgdGFnIHBheWxvYWQuICBNYWtlIHRoZSBjb2RlCisgICBub3RpY2UgdGhlIHR5cGUgb2YgdGhlIHRhZyBvYmplY3QsIGluIGFkZGl0aW9uIHRvIHRoZSBkd2ltX3JlZigpCisgICBiYXNlZCBjbGFzc2lmaWNhdGlvbiB0aGUgY3VycmVudCBjb2RlIHVzZXMgKGkuZS4gdGhlIG5hbWUgYXBwZWFycworICAgaW4gcmVmcy90YWdzLykgdG8gZGVjaWRlIHdoZW4gdG8gc3BlY2lhbCBjYXNlIG1lcmdpbmcgb2YgdGFncy4KKworICogImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IiBjYW4gdGFrZSBtb3JlIHRoYW4gb25lIGNvbW1pdAorICAgb24gdGhlIGNvbW1hbmQgbGluZSB0aGVzZSBkYXlzLCBidXQgaXQgd2FzIG5vdCBtZW50aW9uZWQgb24gdGhlIHVzYWdlCisgICB0ZXh0LgorCisgKiBQZXJsIHNjcmlwdHMgbGlrZSAiZ2l0LXN2biIgY2xvc2VkIChub3QgcmVkaXJlY3RpbmcgdG8gL2Rldi9udWxsKQorICAgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSwgd2hpY2ggaXMgbm90IGEgdmVyeSBzbWFydCB0aGluZyB0byBkby4KKyAgIExhdGVyIG9wZW4gbWF5IHJldHVybiBmaWxlIGRlc2NyaXB0b3IgIzIgZm9yIHVucmVsYXRlZCBwdXJwb3NlLCBhbmQKKyAgIGVycm9yIHJlcG9ydGluZyBjb2RlIG1heSB3cml0ZSBpbnRvIHRoZW0uCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgd2FzIG5vdCBwcmVwYXJlZCB0byBzZWUgYSBsaW5lIGdldHRpbmcKKyAgIGxvbmdlciBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZXMgKGUuZy4gdGFiLWluLWluZGVudCBha2EgUHl0aG9uKS4KKworICogImdpdCBkaWZmL2xvZyAtLWNjIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIG9wdGlvbnMgdGhhdCBpZ25vcmUKKyAgIHdoaXRlc3BhY2UgY2hhbmdlcy4KKworICogRG9jdW1lbnRhdGlvbiBvbiBzZXR0aW5nIHVwIGEgaHR0cCBzZXJ2ZXIgdGhhdCByZXF1aXJlcworICAgYXV0aGVudGljYXRpb24gb25seSBvbiB0aGUgcHVzaCBidXQgbm90IGZldGNoIGhhcyBiZWVuIGNsYXJpZmllZC4KKworICogQSBmZXcgYnVnZml4ZXMgdG8gImdpdCByZXJlcmUiIHdvcmtpbmcgb24gY29ybmVyIGNhc2UgbWVyZ2UKKyAgIGNvbmZsaWN0cyBoYXZlIGJlZW4gYXBwbGllZC4KKworICogImdpdCBidW5kbGUiIGRpZCBub3QgbGlrZSBhIGJ1bmRsZSBjcmVhdGVkIHVzaW5nIGEgY29tbWl0IHdpdGhvdXQKKyAgIGFueSBtZXNzYWdlIGFzIGl0cyBvbmUgb2YgdGhlIHByZXJlcXVpc2l0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTM5NDgyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi4zLnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuOC4yLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4yLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJyZXYtbGlzdCAtLXN0ZGluIiBhbmQgZnJpZW5kcyBrZXB0IGJvZ3VzIHBvaW50ZXJzIGludG8gdGhlIGlucHV0CisgICBidWZmZXIgYXJvdW5kIGFzIGh1bWFuIHJlYWRhYmxlIG9iamVjdCBuYW1lcy4gIFRoaXMgd2FzIG5vdCBhCisgICBodWdlIHByb2JsZW0gYnV0IHdhcyBleHBvc2VkIGJ5IGEgbmV3IGNoYW5nZSB0aGF0IHVzZXMgdGhlc2UKKyAgIG5hbWVzIGluIGVycm9yIG91dHB1dC4KKworICogV2hlbiAiZ2l0IGRpZmZ0b29sIiBkcm92ZSAia2RpZmYzIiwgaXQgbWlzdGFrZW5seSBwYXNzZWQgLS1hdXRvCisgICBvcHRpb24gdGhhdCB3YXMgbWVhbnQgd2hpbGUgcmVzb2x2aW5nIG1lcmdlIGNvbmZsaWN0cy4KKworICogImdpdCByZW1vdGUgYWRkIiBjb21tYW5kIGRpZCBub3QgZGlhZ25vc2UgZXh0cmEgY29tbWFuZCBsaW5lCisgICBhcmd1bWVudHMgYXMgYW4gZXJyb3IgYW5kIHNpbGVudGx5IGlnbm9yZWQgdGhlbS4KKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2YgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcywgZG9jdW1lbnRhdGlvbgordXBkYXRlcywgdXBkYXRlcyB0byB0aGUgdGVzdCBzdWl0ZSwgZXRjLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzYwNmFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMi50eHQKQEAgLTAsMCArMSw0OTUgQEAKK0dpdCB2MS44LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgKHRoaXMgcmVsZWFzZSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdCBwdXNoICR0aGVyZSB0YWcgdjEuMi4zIiB1c2VkIHRvIGFsbG93IHJlcGxhY2luZyBhIHRhZyB2MS4yLjMKK3RoYXQgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlcG9zaXRvcnkgJHRoZXJlLCBpZiB0aGUgcmV3cml0dGVuIHRhZworeW91IGFyZSBwdXNoaW5nIHBvaW50cyBhdCBhIGNvbW1pdCB0aGF0IGlzIGEgZGVzY2VuZGFudCBvZiBhIGNvbW1pdAordGhhdCB0aGUgb2xkIHRhZyB2MS4yLjMgcG9pbnRzIGF0LiAgVGhpcyB3YXMgZm91bmQgdG8gYmUgZXJyb3IgcHJvbmUKK2FuZCBzdGFydGluZyB3aXRoIHRoaXMgcmVsZWFzZSwgYW55IGF0dGVtcHQgdG8gdXBkYXRlIGFuIGV4aXN0aW5nCityZWYgdW5kZXIgcmVmcy90YWdzLyBoaWVyYXJjaHkgd2lsbCBmYWlsLCB3aXRob3V0ICItLWZvcmNlIi4KKworV2hlbiAiZ2l0IGFkZCAtdSIgYW5kICJnaXQgYWRkIC1BIiB0aGF0IGRvZXMgbm90IHNwZWNpZnkgd2hhdCBwYXRocwordG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgcnVuIGZyb20gaW5zaWRlIGEgc3ViZGlyZWN0b3J5LCB0aGUKK3Njb3BlIG9mIHRoZSBvcGVyYXRpb24gaGFzIGFsd2F5cyBiZWVuIGxpbWl0ZWQgdG8gdGhlIHN1YmRpcmVjdG9yeS4KK01hbnkgdXNlcnMgZm91bmQgdGhpcyBjb3VudGVyLWludHVpdGl2ZSwgZ2l2ZW4gdGhhdCAiZ2l0IGNvbW1pdCAtYSIKK2FuZCBvdGhlciBjb21tYW5kcyBvcGVyYXRlIG9uIHRoZSBlbnRpcmUgdHJlZSByZWdhcmRsZXNzIG9mIHdoZXJlIHlvdQorYXJlLiAgSW4gdGhpcyByZWxlYXNlLCB0aGVzZSBjb21tYW5kcyBnaXZlIGEgd2FybmluZyBtZXNzYWdlIHRoYXQKK3N1Z2dlc3RzIHRoZSB1c2VycyB0byB1c2UgImdpdCBhZGQgLXUvLUEgLiIgd2hlbiB0aGV5IHdhbnQgdG8gbGltaXQKK3RoZSBzY29wZSB0byB0aGUgY3VycmVudCBkaXJlY3Rvcnk7IGRvaW5nIHNvIHdpbGwgc3F1ZWxjaCB0aGUgbWVzc2FnZSwKK3doaWxlIHRyYWluaW5nIHRoZWlyIGZpbmdlcnMuCisKKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcyAoZm9yIEdpdCAyLjApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiAiZ2l0IHB1c2ggWyR0aGVyZV0iIGRvZXMgbm90IHNheSB3aGF0IHRvIHB1c2gsIHdlIGhhdmUgdXNlZCB0aGUKK3RyYWRpdGlvbmFsICJtYXRjaGluZyIgc2VtYW50aWNzIHNvIGZhciAoYWxsIHlvdXIgYnJhbmNoZXMgd2VyZSBzZW50Cit0byB0aGUgcmVtb3RlIGFzIGxvbmcgYXMgdGhlcmUgYWxyZWFkeSBhcmUgYnJhbmNoZXMgb2YgdGhlIHNhbWUgbmFtZQorb3ZlciB0aGVyZSkuICBJbiBHaXQgMi4wLCB0aGUgZGVmYXVsdCB3aWxsIGNoYW5nZSB0byB0aGUgInNpbXBsZSIKK3NlbWFudGljcyB0aGF0IHB1c2hlcyB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lCituYW1lLCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHNldCB0byBpbnRlZ3JhdGUgd2l0aCB0aGF0CityZW1vdGUgYnJhbmNoLiAgVGhlcmUgaXMgYSB1c2VyIHByZWZlcmVuY2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorInB1c2guZGVmYXVsdCIgdG8gY2hhbmdlIHRoaXMuICBJZiB5b3UgYXJlIGFuIG9sZC10aW1lciB3aG8gaXMgdXNlZAordG8gdGhlICJtYXRjaGluZyIgc2VtYW50aWNzLCB5b3UgY2FuIHNldCBpdCB0byAibWF0Y2hpbmciIHRvIGtlZXAgdGhlCit0cmFkaXRpb25hbCBiZWhhdmlvdXIuICBJZiB5b3Ugd2FudCB0byBsaXZlIGluIHRoZSBmdXR1cmUgZWFybHksCit5b3UgY2FuIHNldCBpdCB0byAic2ltcGxlIiB0b2RheSB3aXRob3V0IHdhaXRpbmcgZm9yIEdpdCAyLjAuCisKK1doZW4gImdpdCBhZGQgLXUiIGFuZCAiZ2l0IGFkZCAtQSIsIHRoYXQgZG9lcyBub3Qgc3BlY2lmeSB3aGF0IHBhdGhzCit0byBhZGQgb24gdGhlIGNvbW1hbmQgbGluZSBpcyBydW4gZnJvbSBpbnNpZGUgYSBzdWJkaXJlY3RvcnksIHRoZXNlCitjb21tYW5kcyB3aWxsIG9wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIGluIEdpdCAyLjAgZm9yIGNvbnNpc3RlbmN5Cit3aXRoICJnaXQgY29tbWl0IC1hIiBhbmQgb3RoZXIgY29tbWFuZHMuIEJlY2F1c2UgdGhlcmUgd2lsbCBiZSBubworbWVjaGFuaXNtIHRvIG1ha2UgImdpdCBhZGQgLXUiIGJlaGF2ZSBhcyBpZiAiZ2l0IGFkZCAtdSAuIiwgaXQgaXMKK2ltcG9ydGFudCBmb3IgdGhvc2Ugd2hvIGFyZSB1c2VkIHRvICJnaXQgYWRkIC11IiAod2l0aG91dCBwYXRoc3BlYykKK3VwZGF0aW5nIHRoZSBpbmRleCBvbmx5IGZvciBwYXRocyBpbiB0aGUgY3VycmVudCBzdWJkaXJlY3RvcnkgdG8gc3RhcnQKK3RyYWluaW5nIHRoZWlyIGZpbmdlcnMgdG8gZXhwbGljaXRseSBzYXkgImdpdCBhZGQgLXUgLiIgd2hlbiB0aGV5IG1lYW4KK2l0IGJlZm9yZSBHaXQgMi4wIGNvbWVzLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuOC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogSW5pdGlhbCBwb3J0cyB0byBRTlggYW5kIHovT1MgVU5JWCBTeXN0ZW0gU2VydmljZXMgaGF2ZSBzdGFydGVkLgorCisgKiBPdXRwdXQgZnJvbSB0aGUgdGVzdHMgaXMgY29sb3VyZWQgdXNpbmcgImdyZWVuIGlzIG9rYXksIHllbGxvdyBpcworICAgcXVlc3Rpb25hYmxlLCByZWQgaXMgYmFkIGFuZCBibHVlIGlzIGluZm9ybWF0aXZlIiBzY2hlbWUuCisKKyAqIE1lbnRpb24gb2YgIkdJVC9HaXQvZ2l0IiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgYmUgbW9yZSB1bmlmb3JtIGFuZCBjb25zaXN0ZW50LiAgVGhlIG5hbWUgb2YgdGhlIHN5c3RlbSBhbmQgdGhlCisgICBjb25jZXB0IGl0IGVtYm9kaWVzIGlzICJHaXQiOyB0aGUgY29tbWFuZCB0aGUgdXNlcnMgdHlwZSBpcyAiZ2l0Ii4KKyAgIEFsbC1jYXBzICJHSVQiIHdhcyBtZXJlbHkgYSB3YXkgdG8gaW1pdGF0ZSAiR2l0IiB0eXBlc2V0IGluIHNtYWxsCisgICBjYXBzIGluIG91ciBBU0NJSSB0ZXh0IG9ubHkgZG9jdW1lbnRhdGlvbiBhbmQgdG8gYmUgYXZvaWRlZC4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliL2NvbXBsZXRpb24pIHVzZWQgdG8gbGV0IHRoZQorICAgZGVmYXVsdCBjb21wbGV0ZXIgdG8gc3VnZ2VzdCBwYXRobmFtZXMsIHdoaWNoIGdhdmUgdG9vIG1hbnkKKyAgIGlycmVsZXZhbnQgY2hvaWNlcyAoZS5nLiAiZ2l0IGFkZCIgd291bGQgbm90IHdhbnQgdG8gYWRkIGFuCisgICB1bm1vZGlmaWVkIHBhdGgpLiAgSXQgbGVhcm50IHRvIHVzZSBhIG1vcmUgZ2l0LWF3YXJlIGxvZ2ljIHRvCisgICBlbnVtZXJhdGUgb25seSByZWxldmFudCBvbmVzLgorCisgKiBJbiBiYXJlIHJlcG9zaXRvcmllcywgImdpdCBzaG9ydGxvZyIgYW5kIG90aGVyIGNvbW1hbmRzIG5vdyByZWFkCisgICBtYWlsbWFwIGZpbGVzIGZyb20gdGhlIHRpcCBvZiB0aGUgaGlzdG9yeSwgdG8gaGVscCBydW5uaW5nIHRoZXNlCisgICB0b29scyBpbiBzZXJ2ZXIgc2V0dGluZ3MuCisKKyAqIENvbG9yIHNwZWNpZmllcnMsIGUuZy4gIiVDKGJsdWUpSGVsbG8lQyhyZXNldCkiLCB1c2VkIGluIHRoZQorICAgIi0tZm9ybWF0PSIgb3B0aW9uIG9mICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBjYW4gYmUgZGlzYWJsZWQgd2hlbgorICAgdGhlIG91dHB1dCBpcyBub3Qgc2VudCB0byBhIHRlcm1pbmFsIGJ5IHByZWZpeGluZyB0aGVtIHdpdGgKKyAgICJhdXRvLCIsIGUuZy4gIiVDKGF1dG8sYmx1ZSlIZWxsbyVDKGF1dG8scmVzZXQpIi4KKworICogU2NyaXB0cyBjYW4gYXNrIEdpdCB0aGF0IHdpbGRjYXJkIHBhdHRlcm5zIGluIHBhdGhzcGVjcyB0aGV5IGdpdmUgZG8KKyAgIG5vdCBoYXZlIGFueSBzaWduaWZpY2FuY2UsIGkuZS4gdGFrZSB0aGVtIGFzIGxpdGVyYWwgc3RyaW5ncy4KKworICogVGhlIHBhdHRlcm5zIGluIC5naXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzIGZpbGVzIGNhbiBoYXZlICoqLywKKyAgIGFzIGEgcGF0dGVybiB0aGF0IG1hdGNoZXMgMCBvciBtb3JlIGxldmVscyBvZiBzdWJkaXJlY3RvcnkuCisgICBFLmcuICJmb28vKiovYmFyIiBtYXRjaGVzICJiYXIiIGluICJmb28iIGl0c2VsZiBvciBpbiBhCisgICBzdWJkaXJlY3Rvcnkgb2YgImZvbyIuCisKKyAqIFdoZW4gZ2l2aW5nIGFyZ3VtZW50cyB3aXRob3V0ICItLSIgZGlzYW1iaWd1YXRpb24sIG9iamVjdCBuYW1lcworICAgdGhhdCBjb21lIGVhcmxpZXIgb24gdGhlIGNvbW1hbmQgbGluZSBtdXN0IG5vdCBiZSBpbnRlcnByZXRhYmxlIGFzCisgICBwYXRoc3BlY3MgYW5kIHBhdGhzcGVjcyB0aGF0IGNvbWUgbGF0ZXIgb24gdGhlIGNvbW1hbmQgbGluZSBtdXN0CisgICBub3QgYmUgaW50ZXJwcmV0YWJsZSBhcyBvYmplY3QgbmFtZXMuICBUaGlzIGRpc2FtYmlndWF0aW9uIHJ1bGUgaGFzCisgICBiZWVuIHR3ZWFrZWQgc28gdGhhdCAiOi8iIChubyBvdGhlciBzdHJpbmcgYmVmb3JlIG9yIGFmdGVyKSBpcworICAgYWx3YXlzIGludGVycHJldGVkIGFzIGEgcGF0aHNwZWM7ICJnaXQgY21kIC0tIDovIiBpcyBubyBsb25nZXIKKyAgIG5lZWRlZCwgeW91IGNhbiBqdXN0IHNheSAiZ2l0IGNtZCA6LyIuCisKKyAqIFZhcmlvdXMgImhpbnQiIGxpbmVzIEdpdCBnaXZlcyB3aGVuIGl0IGFza3MgdGhlIHVzZXIgdG8gZWRpdAorICAgbWVzc2FnZXMgaW4gdGhlIGVkaXRvciBhcmUgY29tbWVudGVkIG91dCB3aXRoICcjJyBieSBkZWZhdWx0LiBUaGUKKyAgIGNvcmUuY29tbWVudGNoYXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUKKyAgIHRoaXMgJyMnIHRvIGEgZGlmZmVyZW50IGNoYXJhY3Rlci4KKworICogImdpdCBhZGQgLXUiIGFuZCAiZ2l0IGFkZCAtQSIgd2l0aG91dCBwYXRoc3BlYyBpc3N1ZXMgd2FybmluZyB0bworICAgbWFrZSB1c2VycyBhd2FyZSB0aGF0IHRoZXkgYXJlIG9ubHkgb3BlcmF0aW5nIG9uIHBhdGhzIGluc2lkZSB0aGUKKyAgIHN1YmRpcmVjdG9yeSB0aGV5IGFyZSBpbi4gIFVzZSAiOi8iIChldmVyeXRoaW5nIGZyb20gdGhlIHRvcCkgb3IKKyAgICIuIiAoZXZlcnl0aGluZyBmcm9tIHRoZSAkY3dkKSB0byBkaXNhbWJpZ3VhdGUuCisKKyAqICJnaXQgYmxhbWUiIChhbmQgImdpdCBkaWZmIikgbGVhcm5lZCB0aGUgIi0tbm8tZm9sbG93IiBvcHRpb24uCisKKyAqICJnaXQgYnJhbmNoIiBub3cgcmVqZWN0cyBzb21lIG5vbnNlbnNlIGNvbWJpbmF0aW9ucyBvZiBjb21tYW5kIGxpbmUKKyAgIGFyZ3VtZW50cyAoZS5nLiBnaXZpbmcgbW9yZSB0aGFuIG9uZSBicmFuY2ggbmFtZSB0byByZW5hbWUpIHdpdGgKKyAgIG1vcmUgY2FzZS1zcGVjaWZpYyBlcnJvciBtZXNzYWdlcy4KKworICogImdpdCBjaGVjay1pZ25vcmUiIGNvbW1hbmQgdG8gaGVscCBkZWJ1Z2dpbmcgLmdpdGlnbm9yZSBmaWxlcyBoYXMKKyAgIGJlZW4gYWRkZWQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIGNhbiBiZSB1c2VkIHRvIHJlcGxheSBhIHJvb3QgY29tbWl0IHRvIGFuIHVuYm9ybgorICAgYnJhbmNoLgorCisgKiAiZ2l0IGNvbW1pdCIgY2FuIGJlIHRvbGQgdG8gdXNlIC0tY2xlYW51cD13aGl0ZXNwYWNlIGJ5IHNldHRpbmcgdGhlCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvbW1pdC5jbGVhbnVwIHRvICd3aGl0ZXNwYWNlJy4KKworICogImdpdCBkaWZmIiBhbmQgb3RoZXIgUG9yY2VsYWluIGNvbW1hbmRzIGNhbiBiZSB0b2xkIHRvIHVzZSBhCisgICBub24tc3RhbmRhcmQgYWxnb3JpdGhtIGJ5IHNldHRpbmcgZGlmZi5hbGdvcml0aG0gY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUuCisKKyAqICJnaXQgZmV0Y2ggLS1taXJyb3IiIGFuZCBmZXRjaCB0aGF0IHVzZXMgb3RoZXIgZm9ybXMgb2YgcmVmc3BlYworICAgd2l0aCB3aWxkY2FyZCB1c2VkIHRvIGF0dGVtcHQgdG8gdXBkYXRlIGEgc3ltYm9saWMgcmVmIHRoYXQgbWF0Y2gKKyAgIHRoZSB3aWxkY2FyZCBvbiB0aGUgcmVjZWl2aW5nIGVuZCwgd2hpY2ggbWFkZSBsaXR0bGUgc2Vuc2UgKHRoZQorICAgcmVhbCByZWYgdGhhdCBpcyBwb2ludGVkIGF0IGJ5IHRoZSBzeW1ib2xpYyByZWYgd291bGQgYmUgdXBkYXRlZAorICAgYW55d2F5KS4gIFN5bWJvbGljIHJlZnMgbm8gbG9uZ2VyIGFyZSBhZmZlY3RlZCBieSBzdWNoIGEgZmV0Y2guCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBub3cgZGV0ZWN0cyBtb3JlIGNhc2VzIGluIHdoaWNoIGEgd2hvbGUgYnJhbmNoCisgICBpcyBiZWluZyBleHBvcnRlZCwgYW5kIHVzZXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoLCB3aGVuCisgICBhc2tlZCB0byB3cml0ZSBhIGNvdmVyIGxldHRlciBmb3IgdGhlIHNlcmllcy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgIi12ICRjb3VudCIgb3B0aW9uLCBhbmQgcHJlcGVuZHMgYQorICAgc3RyaW5nICJ2JGNvdW50LSIgdG8gdGhlIG5hbWVzIG9mIGl0cyBvdXRwdXQgZmlsZXMsIGFuZCBhbHNvCisgICBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIHN1YmplY3QgcHJlZml4IHRvICJQQVRDSCB2JGNvdW50Ii4gVGhpcworICAgYWxsb3dzIHBhdGNoZXMgZnJvbSByZXJvbGxlZCBzZXJpZXMgdG8gYmUgc3RvcmVkIHVuZGVyIGRpZmZlcmVudAorICAgbmFtZXMgYW5kIG1ha2VzIGl0IGVhc2llciB0byByZXVzZSBjb3ZlciBsZXR0ZXIgbWVzc2FnZXMuCisKKyAqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBjYW4gYmUgdG9sZCB3aXRoIC0tdXNlLW1haWxtYXAgb3B0aW9uIHRvCisgICByZXdyaXRlIHRoZSBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIHBlb3BsZSB1c2luZyB0aGUgbWFpbG1hcAorICAgbWVjaGFuaXNtLgorCisgKiAiZ2l0IGxvZyAtLWNjIC0tZ3JhcGgiIG5vdyBzaG93cyB0aGUgY29tYmluZWQgZGlmZiBvdXRwdXQgd2l0aCB0aGUKKyAgIGFuY2VzdHJ5IGdyYXBoLgorCisgKiAiZ2l0IGxvZyAtLWdyZXA9PHBhdHRlcm4+IiBob25vcnMgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyB0byBsb29rCisgICBmb3IgdGhlIHBhdHRlcm4gYWZ0ZXIgZml4aW5nIHRoZSBsb2cgbWVzc2FnZSB0byB0aGUgc3BlY2lmaWVkCisgICBlbmNvZGluZy4KKworICogImdpdCBtZXJnZXRvb2wiIGFuZCAiZ2l0IGRpZmZ0b29sIiBsZWFybmVkIHRvIGxpc3QgdGhlIGF2YWlsYWJsZQorICAgdG9vbCBiYWNrZW5kcyBpbiBhIG1vcmUgY29uc2lzdGVudCBtYW5uZXIuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBpcyBhd2FyZSBvZiBUb3J0b2lzZUdpdE1lcmdlIG5vdyBhbmQgdXNlcyBpdCBvdmVyCisgICBUb3J0b2lzZU1lcmdlIHdoZW4gYXZhaWxhYmxlLgorCisgKiAiZ2l0IHB1c2giIG5vdyByZXF1aXJlcyAiLWYiIHRvIHVwZGF0ZSBhIHRhZywgZXZlbiBpZiBpdCBpcyBhCisgICBmYXN0LWZvcndhcmQsIGFzIHRhZ3MgYXJlIG1lYW50IHRvIGJlIGZpeGVkIHBvaW50cy4KKworICogRXJyb3IgbWVzc2FnZXMgZnJvbSAiZ2l0IHB1c2giIHdoZW4gaXQgc3RvcHMgdG8gcHJldmVudCByZW1vdGUgcmVmcworICAgZnJvbSBnZXR0aW5nIG92ZXJ3cml0dGVuIGJ5IG1pc3Rha2UgaGF2ZSBiZWVuIGltcHJvdmVkIHRvIGV4cGxhaW4KKyAgIHZhcmlvdXMgc2l0dWF0aW9ucyBzZXBhcmF0ZWx5LgorCisgKiAiZ2l0IHB1c2giIHdpbGwgc3RvcCB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGlmIHRoZSBuZXcgInByZS1wdXNoIgorICAgaG9vayBleGlzdHMgYW5kIGV4aXRzIHdpdGggYSBmYWlsdXJlLgorCisgKiBXaGVuICJnaXQgcmViYXNlIiBmYWlscyB0byBnZW5lcmF0ZSBwYXRjaGVzIHRvIGJlIGFwcGxpZWQgKGUuZy4gZHVlCisgICB0byBvb20pLCBpdCBmYWlsZWQgdG8gZGV0ZWN0IHRoZSBmYWlsdXJlIGFuZCBpbnN0ZWFkIGJlaGF2ZWQgYXMgaWYKKyAgIHRoZXJlIHdlcmUgbm90aGluZyB0byBkby4gIEEgd29ya2Fyb3VuZCB0byB1c2UgYSB0ZW1wb3JhcnkgZmlsZSBoYXMKKyAgIGJlZW4gYXBwbGllZCwgYnV0IHdlIHByb2JhYmx5IHdvdWxkIHdhbnQgdG8gcmV2aXNpdCB0aGlzIGxhdGVyLCBhcworICAgaXQgaHVydHMgdGhlIGNvbW1vbiBjYXNlIG9mIG5vdCBmYWlsaW5nIGF0IGFsbC4KKworICogSW5wdXQgYW5kIHByZWNvbmRpdGlvbnMgdG8gImdpdCByZXNldCIgaGFzIGJlZW4gbG9vc2VuZWQgd2hlcmUKKyAgIGFwcHJvcHJpYXRlLiAgImdpdCByZXNldCAkZnJvbXRyZWUgTWFrZWZpbGUiIHJlcXVpcmVzICRmcm9tdHJlZSB0bworICAgYmUgYW55IHRyZWUgKGl0IHVzZWQgdG8gcmVxdWlyZSBpdCB0byBiZSBhIGNvbW1pdCksIGZvciBleGFtcGxlLgorICAgImdpdCByZXNldCIgKHdpdGhvdXQgb3B0aW9ucyBvciBwYXJhbWV0ZXJzKSB1c2VkIHRvIGVycm9yIG91dCB3aGVuCisgICB5b3UgZG8gbm90IGhhdmUgYW55IGNvbW1pdHMgaW4geW91ciBoaXN0b3J5LCBidXQgaXQgbm93IGdpdmVzIHlvdQorICAgYW4gZW1wdHkgaW5kZXggKHRvIG1hdGNoIG5vbi1leGlzdGVudCBjb21taXQgeW91IGFyZSBub3QgZXZlbiBvbikuCisKKyAqICJnaXQgc3RhdHVzIiBzYXlzIHdoYXQgYnJhbmNoIGlzIGJlaW5nIGJpc2VjdGVkIG9yIHJlYmFzZWQgd2hlbgorICAgYWJsZSwgbm90IGp1c3QgImJpc2VjdGluZyIgb3IgInJlYmFzaW5nIi4KKworICogImdpdCBzdWJtb2R1bGUiIHN0YXJ0ZWQgbGVhcm5pbmcgYSBuZXcgbW9kZSB0byBpbnRlZ3JhdGUgd2l0aCB0aGUKKyAgIHRpcCBvZiB0aGUgcmVtb3RlIGJyYW5jaCAoYXMgb3Bwb3NlZCB0byBpbnRlZ3JhdGluZyB3aXRoIHRoZSBjb21taXQKKyAgIHJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QncyBnaXRsaW5rKS4KKworICogImdpdCB1cGxvYWQtcGFjayIgd2hpY2ggaW1wbGVtZW50cyB0aGUgc2VydmljZSAibHMtcmVtb3RlIiBhbmQKKyAgICJmZXRjaCIgdGFsayB0byBjYW4gYmUgdG9sZCB0byBoaWRlIHJlZiBoaWVyYXJjaGllcyB0aGUgc2VydmVyCisgICBzaWRlIGludGVybmFsbHkgdXNlcyAoYW5kIHRoYXQgY2xpZW50cyBoYXZlIG5vIGJ1c2luZXNzIGxlYXJuaW5nCisgICBhYm91dCkgd2l0aCB0cmFuc2Zlci5oaWRlcmVmcyBjb25maWd1cmF0aW9uLgorCisKK0ZvcmVpZ24gSW50ZXJmYWNlCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIGl0cyB1c2UgaW4gdGhlIGNvbnRleHQgb2YKKyAgIHRoZSByZW1vdGUgaGVscGVyIGludGVyZmFjZS4KKworICogQSBuZXcgcmVtb3RlIGhlbHBlciB0byBpbnRlcmFjdCB3aXRoIGJ6ciBoYXMgYmVlbiBhZGRlZCB0byBjb250cmliLy4KKworICogImdpdCBwNCIgZ290IHZhcmlvdXMgYnVnZml4ZXMgYXJvdW5kIGl0cyBicmFuY2ggaGFuZGxpbmcuICBJdCBpcworICAgYWxzbyBtYWRlIHVzYWJsZSB3aXRoIFB5dGhvbiAyLjQvMi41LiAgSW4gYWRkaXRpb24sIGl0cyB2YXJpb3VzCisgICBwb3J0YWJpbGl0eSBpc3N1ZXMgZm9yIEN5Z3dpbiBoYXZlIGJlZW4gYWRkcmVzc2VkLgorCisgKiBUaGUgcmVtb3RlIGhlbHBlciB0byBpbnRlcmFjdCB3aXRoIEhnIGluIGNvbnRyaWIvIGhhcyBzZWVuIGEgZmV3CisgICBmaXhlcy4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogImdpdCBmc2NrIiBoYXMgYmVlbiB0YXVnaHQgdG8gYmUgcGlja2llciBhYm91dCBlbnRyaWVzIGluIHRyZWUKKyAgIG9iamVjdHMgdGhhdCBzaG91bGQgbm90IGJlIHRoZXJlLCBlLmcuICIuIiwgIi5naXQiLCBhbmQgIi4uIi4KKworICogTWF0Y2hpbmcgcGF0aHMgd2l0aCBjb21tb24gZm9ybXMgb2YgcGF0aHNwZWNzIHRoYXQgY29udGFpbiB3aWxkY2FyZAorICAgY2hhcmFjdGVycyBoYXMgYmVlbiBvcHRpbWl6ZWQgZnVydGhlci4KKworICogV2Ugc3RvcHBlZCBwYXlpbmcgYXR0ZW50aW9uIHRvICRHSVRfQ09ORklHIGVudmlyb25tZW50IHRoYXQgcG9pbnRzCisgICBhdCBhIHNpbmdsZSBjb25maWd1cmF0aW9uIGZpbGUgZnJvbSBhbnkgY29tbWFuZCBvdGhlciB0aGFuICJnaXQgY29uZmlnIgorICAgcXVpdGUgYSB3aGlsZSBhZ28sIGJ1dCAiZ2l0IGNsb25lIiBpbnRlcm5hbGx5IHNldCwgZXhwb3J0ZWQsIGFuZAorICAgdGhlbiB1bmV4cG9ydGVkIHRoZSB2YXJpYWJsZSBkdXJpbmcgaXRzIG9wZXJhdGlvbiB1bm5lY2Vzc2FyaWx5LgorCisgKiAiZ2l0IHJlc2V0IiBpbnRlcm5hbHMgaGFzIGJlZW4gcmV3b3JrZWQgYW5kIHNob3VsZCBiZSBmYXN0ZXIgaW4KKyAgIGdlbmVyYWwuIFdlIHRyaWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGJyZWFrIGFueSBiZWhhdmlvdXIgYnV0CisgICB0aGVyZSBjb3VsZCBiZSBjb3JuZXIgY2FzZXMsIGVzcGVjaWFsbHkgd2hlbiBydW5uaW5nIHRoZSBjb21tYW5kCisgICBmcm9tIGEgY29uZmxpY3RlZCBzdGF0ZSwgdGhhdCB3ZSBtYXkgaGF2ZSBtaXNzZWQuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAiaW1hcC1zZW5kIiBoYXMgYmVlbiB1cGRhdGVkIHRvIHJldXNlIHhtbAorICAgcXVvdGluZyBjb2RlIGZyb20gaHR0cC1wdXNoIGNvZGVwYXRoLCBhbmQgbG9zdCBhIGxvdCBvZiB1bnVzZWQKKyAgIGNvZGUuCisKKyAqIFRoZXJlIGlzIGEgc2ltcGxlLW1pbmRlZCBjaGVja2VyIGZvciB0aGUgdGVzdCBzY3JpcHRzIGluIHQvCisgICBkaXJlY3RvcnkgdG8gY2F0Y2ggbW9zdCBjb21tb24gbWlzdGFrZXMgKGl0IGlzIG5vdCBlbmFibGVkIGJ5CisgICBkZWZhdWx0KS4KKworICogWW91IGNhbiBidWlsZCB3aXRoIFVTRV9XSUxETUFUQ0g9WWVzUGxlYXNlIHRvIHVzZSBhIHJlcGxhY2VtZW50CisgICBpbXBsZW1lbnRhdGlvbiBvZiBwYXR0ZXJuIG1hdGNoaW5nIGxvZ2ljIHVzZWQgZm9yIHBhdGhuYW1lLWxpa2UKKyAgIHRoaW5ncywgZS5nLiByZWZuYW1lcyBhbmQgcGF0aHMgaW4gdGhlIHJlcG9zaXRvcnkuICBUaGlzIG5ldworICAgaW1wbGVtZW50YXRpb24gaXMgbm90IGV4cGVjdGVkIGNoYW5nZSB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyIG9mIEdpdAorICAgaW4gdGhpcyByZWxlYXNlLCBleGNlcHQgZm9yICJnaXQgZm9yLWVhY2gtcmVmIiB3aGVyZSB5b3UgY2FuIG5vdworICAgc2F5ICJyZWZzLyoqL21hc3RlciIgYW5kIG1hdGNoIHdpdGggYm90aCByZWZzL2hlYWRzL21hc3RlciBhbmQKKyAgIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyLiAgV2UgcGxhbiB0byB1c2UgdGhpcyBuZXcgaW1wbGVtZW50YXRpb24KKyAgIGluIHdpZGVyIHBsYWNlcyAoZS5nLiAiZ2l0IGxzLWZpbGVzICcqKi9NYWtlZmlsZScgbWF5IGZpbmQgTWFrZWZpbGUKKyAgIGF0IHRoZSB0b3AtbGV2ZWwsIGFuZCAiZ2l0IGxvZyAnKiovdCouc2gnIiBtYXkgZmluZCBjb21taXRzIHRoYXQKKyAgIHRvdWNoIGEgc2hlbGwgc2NyaXB0IHdob3NlIG5hbWUgYmVnaW5zIHdpdGggInQiIGF0IGFueSBsZXZlbCkgaW4KKyAgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBHaXQsIGJ1dCB3ZSBhcmUgbm90IHRoZXJlIHlldC4gIEJ5IGJ1aWxkaW5nIHdpdGgKKyAgIFVTRV9XSUxETUFUQ0gsIHVzaW5nIHRoZSByZXN1bHRpbmcgR2l0IGRhaWx5IGFuZCByZXBvcnRpbmcgd2hlbiB5b3UKKyAgIGZpbmQgYnJlYWthZ2VzLCB5b3UgY2FuIGhlbHAgdXMgZ2V0IGNsb3NlciB0byB0aGF0IGdvYWwuCisKKyAqIFNvbWUgcmVpbXBsZW1lbnRhdGlvbnMgb2YgR2l0IGRvIG5vdCB3cml0ZSBhbGwgdGhlIHN0YXQgaW5mbyBiYWNrCisgICB0byB0aGUgaW5kZXggZHVlIHRvIHRoZWlyIGltcGxlbWVudGF0aW9uIGxpbWl0YXRpb25zIChlLmcuIGpnaXQpLgorICAgQSBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gdGVsbCBHaXQgdG8gaWdub3JlIGNoYW5nZXMgdG8gbW9zdCBvZgorICAgdGhlIHN0YXQgZmllbGRzIGFuZCBvbmx5IHBheSBhdHRlbnRpb24gdG8gbXRpbWUgYW5kIHNpemUsIHdoaWNoCisgICB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgY2FuIHJlbGlhYmx5IHVwZGF0ZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KKyAgIGF2b2lkIGV4Y2Vzc2l2ZSByZXZhbGlkYXRpb24gb2YgY29udGVudHMuCisKKyAqIFNvbWUgcGxhdGZvcm1zIHNoaXAgd2l0aCBvbGQgdmVyc2lvbiBvZiBleHBhdCB3aGVyZSB4bWxwYXJzZS5oCisgICBuZWVkcyB0byBiZSBpbmNsdWRlZCBpbnN0ZWFkIG9mIGV4cGF0Lmg7IHRoZSBidWlsZCBwcm9jZWR1cmUgaGFzCisgICBiZWVuIHRhdWdodCBhYm91dCB0aGlzLgorCisgKiAibWFrZSBjbGVhbiIgb24gcGxhdGZvcm1zIHRoYXQgY2Fubm90IGNvbXB1dGUgaGVhZGVyIGRlcGVuZGVuY2llcworICAgb24gdGhlIGZseSBkaWQgbm90IHdvcmsgd2l0aCBpbXBsZW1lbnRhdGlvbnMgb2YgInJtIiB0aGF0IGRvIG5vdAorICAgbGlrZSBhbiBlbXB0eSBhcmd1bWVudCBsaXN0LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuOC4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS44LjEgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiBBbiBlbGVtZW50IG9uIEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTIGxpc3QgdGhhdCBkb2VzIG5vdCBuYW1lIHRoZQorICAgcmVhbCBwYXRoIHRvIGEgZGlyZWN0b3J5IChpLmUuIGEgc3ltYm9saWMgbGluaykgY291bGQgaGF2ZSBjYXVzZWQKKyAgIHRoZSBHSVRfRElSIGRpc2NvdmVyeSBsb2dpYyB0byBlc2NhcGUgdGhlIGNlaWxpbmcuCisKKyAqIFdoZW4gYXR0ZW1wdGluZyB0byByZWFkIHRoZSBYREctc3R5bGUgJEhPTUUvLmNvbmZpZy9naXQvY29uZmlnIGFuZAorICAgZmluZGluZyB0aGF0ICRIT01FLy5jb25maWcvZ2l0IGlzIGEgZmlsZSwgd2UgZ2F2ZSBhIHdyb25nIGVycm9yCisgICBtZXNzYWdlLCBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBjYXNlIGFzICJhIGN1c3RvbSBjb25maWcgZmlsZSBkb2VzCisgICBub3QgZXhpc3QgdGhlcmUiIGFuZCBtb3Zpbmcgb24uCisKKyAqIFRoZSBiZWhhdmlvdXIgdmlzaWJsZSB0byB0aGUgZW5kIHVzZXJzIHdhcyBjb25mdXNpbmcsIHdoZW4gdGhleQorICAgYXR0ZW1wdCB0byBraWxsIGEgcHJvY2VzcyBzcGF3bmVkIGluIHRoZSBlZGl0b3IgdGhhdCB3YXMgaW4gdHVybgorICAgbGF1bmNoZWQgYnkgR2l0IHdpdGggU0lHSU5UIChvciBTSUdRVUlUKSwgYXMgR2l0IHdvdWxkIGNhdGNoIHRoYXQKKyAgIHNpZ25hbCBhbmQgZGllLiAgV2UgaWdub3JlIHRoZXNlIHNpZ25hbHMgbm93LgorICAgKG1lcmdlIDAzOThmYzM0IHBmL2VkaXRvci1pZ25vcmUtc2lnaW50IGxhdGVyIHRvIG1haW50KS4KKworICogQSBjaGlsZCBwcm9jZXNzIHRoYXQgd2FzIGtpbGxlZCBieSBhIHNpZ25hbCAoZS5nLiBTSUdJTlQpIHdhcworICAgcmVwb3J0ZWQgaW4gYW4gaW5jb25zaXN0ZW50IHdheSBkZXBlbmRpbmcgb24gaG93IHRoZSBwcm9jZXNzIHdhcworICAgc3Bhd25lZCBieSB1cywgd2l0aCBvciB3aXRob3V0IGEgc2hlbGwgaW4gYmV0d2Vlbi4KKworICogQWZ0ZXIgZmFpbGluZyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSB1c2luZyBta3N0ZW1wKCksIGZhaWxpbmcKKyAgIHBhdGhuYW1lIHdhcyBub3QgcmVwb3J0ZWQgY29ycmVjdGx5IG9uIHNvbWUgcGxhdGZvcm1zLgorCisgKiBXZSB1c2VkIHRvIHN0dWZmICJ1c2VyQCIgYW5kIHRoZW4gYXBwZW5kIHdoYXQgd2UgcmVhZCBmcm9tCisgICAvZXRjL21haWxuYW1lIHRvIGNvbWUgdXAgd2l0aCBhIGRlZmF1bHQgZS1tYWlsIGlkZW50LCBidXQgYSBidWcKKyAgIGxvc3QgdGhlICJ1c2VyQCIgcGFydC4KKworICogVGhlIGF0dHJpYnV0ZSBtZWNoYW5pc20gZGlkbid0IGFsbG93IGxpbWl0aW5nIGF0dHJpYnV0ZXMgdG8gYmUKKyAgIGFwcGxpZWQgdG8gb25seSBhIHNpbmdsZSBkaXJlY3RvcnkgaXRzZWxmIHdpdGggInBhdGgvIiBsaWtlIHRoZQorICAgZXhjbHVkZSBtZWNoYW5pc20gZG9lcy4gIFRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgdGhhdAorICAgd2FzIG1lcmdlZCB0byAnbWFpbnQnIGFuZCAxLjguMS4yIHdhcyB3aXRoIGEgc2V2ZXJlIHBlcmZvcm1hbmNlCisgICBkZWdyYWRhdGlvbnMgYW5kIG5lZWRzIHRvIG1lcmdlIGEgZml4LXVwIHRvcGljLgorCisgKiBUaGUgc21hcnQgSFRUUCBjbGllbnRzIGZvcmdvdCB0byB2ZXJpZnkgdGhlIGNvbnRlbnQtdHlwZSB0aGF0IGNvbWVzCisgICBiYWNrIGZyb20gdGhlIHNlcnZlciBzaWRlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1ZXN0IGlzIGJlaW5nCisgICBoYW5kbGVkIHByb3Blcmx5LgorCisgKiAiZ2l0IGFtIiBkaWQgbm90IHBhcnNlIGRhdGVzdGFtcCBjb3JyZWN0bHkgZnJvbSBIZyBnZW5lcmF0ZWQgcGF0Y2gsCisgICB3aGVuIGl0IGlzIHJ1biBpbiBhIGxvY2FsZSBvdXRzaWRlIEMgKG9yIGVuKS4KKworICogImdpdCBhcHBseSIgbWlzYmVoYXZlZCB3aGVuIGZpeGluZyB3aGl0ZXNwYWNlIGJyZWFrYWdlcyBieSByZW1vdmluZworICAgZXhjZXNzIHRyYWlsaW5nIGJsYW5rIGxpbmVzLgorCisgKiAiZ2l0IGFwcGx5IC0tc3VtbWFyeSIgaGFzIGJlZW4gdGF1Z2h0IHRvIG1ha2Ugc3VyZSB0aGUgc2ltaWxhcml0eQorICAgdmFsdWUgc2hvd24gaW4gaXRzIG91dHB1dCBpcyBzZW5zaWJsZSwgZXZlbiB3aGVuIHRoZSBpbnB1dCBoYWQgYQorICAgYm9ndXMgdmFsdWUuCisKKyAqIEEgdGFyIGFyY2hpdmUgY3JlYXRlZCBieSAiZ2l0IGFyY2hpdmUiIHJlY29yZGVkIGEgZGlyZWN0b3J5IGluIGEKKyAgIHdheSB0aGF0IG1hZGUgTmV0QlNEJ3MgaW1wbGVtZW50YXRpb24gb2YgInRhciIgc29tZXRpbWVzIHVuaGFwcHkuCisKKyAqICJnaXQgYXJjaGl2ZSIgZGlkIG5vdCByZWNvcmQgdW5jb21wcmVzc2VkIHNpemUgaW4gdGhlIGhlYWRlciB3aGVuCisgICBzdHJlYW1pbmcgYSB6aXAgYXJjaGl2ZSwgd2hpY2ggY29uZnVzZWQgc29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgdW56aXAuCisKKyAqICJnaXQgYXJjaGl2ZSIgZGlkIG5vdCBwYXJzZSBjb25maWd1cmF0aW9uIHZhbHVlcyBpbiB0YXIuKiBuYW1lc3BhY2UKKyAgIGNvcnJlY3RseS4KKyAgIChtZXJnZSBiMzg3M2MzIGprL2NvbmZpZy1wYXJzaW5nLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBdHRlbXB0IHRvICJicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uIiBhbiBleGlzdGluZyBicmFuY2gsIHdoaWxlCisgICBiZWluZyBvbiBhIGRldGFjaGVkIEhFQUQsIGVycm9yZWQgb3V0LgorCisgKiAiZ2l0IGNsZWFuIiBzaG93ZWQgd2hhdCBpdCB3YXMgZ29pbmcgdG8gZG8sIGJ1dCBzb21ldGltZXMgZW5kIHVwCisgICBmaW5kaW5nIHRoYXQgaXQgd2FzIG5vdCBhbGxvd2VkIHRvIGRvIHNvLCB3aGljaCByZXN1bHRlZCBpbiBhCisgICBjb25mdXNpbmcgb3V0cHV0IChlLmcuIGFmdGVyIHNheWluZyB0aGF0IGl0IHdpbGwgcmVtb3ZlIGFuCisgICB1bnRyYWNrZWQgZGlyZWN0b3J5LCBpdCBmb3VuZCBhbiBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeSB0aGVyZQorICAgd2hpY2ggaXQgaXMgbm90IGFsbG93ZWQgdG8gcmVtb3ZlKS4gIEl0IG5vdyBwZXJmb3JtcyB0aGUgYWN0aW9ucworICAgYW5kIHRoZW4gcmVwb3J0cyB0aGUgb3V0Y29tZSBtb3JlIGZhaXRoZnVsbHkuCisKKyAqIFdoZW4gImdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXI9JG92ZXJfdGhlcmUiIGlzIGludGVycnVwdGVkLCBpdAorICAgZmFpbGVkIHRvIHJlbW92ZSB0aGUgcmVhbCBsb2NhdGlvbiBvZiB0aGUgJEdJVF9ESVIgaXQgY3JlYXRlZC4KKyAgIFRoaXMgd2FzIG1vc3QgdmlzaWJsZSB3aGVuIGludGVycnVwdGluZyBhIHN1Ym1vZHVsZSB1cGRhdGUuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBtaXNoYW5kbGVkIHRpbWVzdGFtcHMgYXQgRFNUIGJvdW5kYXJ5LgorCisgKiBXZSB1c2VkIHRvIGhhdmUgYW4gYXJiaXRyYXJ5IDMyIGxpbWl0IGZvciBjb21iaW5lZCBkaWZmIGlucHV0LAorICAgcmVzdWx0aW5nIGluIGluY29ycmVjdCBudW1iZXIgb2YgbGVhZGluZyBjb2xvbnMgc2hvd24gd2hlbiBzaG93aW5nCisgICB0aGUgIi0tcmF3IC0tY2MiIG91dHB1dC4KKworICogImdpdCBmZXRjaCAtLWRlcHRoIiB3YXMgYnJva2VuIGluIGF0IGxlYXN0IHRocmVlIHdheXMuICBUaGUKKyAgIHJlc3VsdGluZyBoaXN0b3J5IHdhcyBkZWVwZXIgdGhhbiBzcGVjaWZpZWQgYnkgb25lIGNvbW1pdCwgaXQgd2FzCisgICB1bmNsZWFyIGhvdyB0byB3aXBlIHRoZSBzaGFsbG93bmVzcyBvZiB0aGUgcmVwb3NpdG9yeSB3aXRoIHRoZQorICAgY29tbWFuZCwgYW5kIGRvY3VtZW50YXRpb24gd2FzIG1pc2xlYWRpbmcuCisgICAobWVyZ2UgY2ZiNzBlMSBuZC9mZXRjaC1kZXB0aC1pcy1icm9rZW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxvZyAtLWFsbCAtcCIgdGhhdCB3YWxrZWQgcmVmcy9ub3Rlcy90ZXh0Y29udi8gcmVmIGNhbiBsYXRlcgorICAgdHJ5IHRvIHVzZSB0aGUgdGV4dGNvbnYgZGF0YSBpbmNvcnJlY3RseSBhZnRlciBpdCBnZXRzIGZyZWVkLgorCisgKiBXZSBmb3Jnb3QgdG8gY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciByZWFkaW5nIGZyb20gImdwZyIgb3V0cHV0LAorICAga2lsbGluZyAiZ2l0IGxvZyAtLXNob3ctc2lnbmF0dXJlIiBvbiBhIGxvbmcgaGlzdG9yeS4KKworICogVGhlIHdheSAiZ2l0IHN2biIgYXNrZWQgZm9yIHBhc3N3b3JkIHVzaW5nIFNTSF9BU0tQQVNTIGFuZAorICAgR0lUX0FTS1BBU1Mgd2FzIG5vdCBpbiBsaW5lIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KKworICogVGhlIC0tZ3JhcGggY29kZSBmZWxsIGludG8gaW5maW5pdGUgbG9vcCB3aGVuIGFza2VkIHRvIGRvIHdoYXQgdGhlCisgICBjb2RlIGRpZCBub3QgZXhwZWN0LgorCisgKiBodHRwIHRyYW5zcG9ydCB3YXMgd3JvbmcgdG8gYXNrIGZvciB0aGUgdXNlcm5hbWUgd2hlbiB0aGUKKyAgIGF1dGhlbnRpY2F0aW9uIGlzIGRvbmUgYnkgY2VydGlmaWNhdGUgaWRlbnRpdHkuCisKKyAqICJnaXQgcGFjay1yZWZzIiB0aGF0IHJhbiBpbiBwYXJhbGxlbCB0byBhbm90aGVyIHByb2Nlc3MgdGhhdAorICAgY3JlYXRlZCBuZXcgcmVmcyBoYWQgYSBuYXN0eSByYWNlLgorCisgKiBSZWJhc2luZyB0aGUgaGlzdG9yeSBvZiBzdXBlcnByb2plY3Qgd2l0aCBjaGFuZ2UgaW4gdGhlIHN1Ym1vZHVsZQorICAgaGFzIGJlZW4gYnJva2VuIHNpbmNlIHYxLjcuMTIuCisKKyAqIEFmdGVyICJnaXQgYWRkIC1OIiBhbmQgdGhlbiB3cml0aW5nIGEgdHJlZSBvYmplY3Qgb3V0IG9mIHRoZQorICAgaW5kZXgsIHRoZSBjYWNoZS10cmVlIGRhdGEgc3RydWN0dXJlIGdvdCBjb3JydXB0ZWQuCisKKyAqICJnaXQgY2xvbmUiIHVzZWQgdG8gYWxsb3cgLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXI9JHRoZXJlCisgICBvcHRpb25zIGF0IHRoZSBzYW1lIHRpbWUsIHdoaWNoIHdhcyBub25zZW5zaWNhbC4KKworICogImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMiIGxvc3QgZW1wdHkgbWVyZ2VzIGluIHJlY2VudCB2ZXJzaW9ucworICAgb2YgR2l0LgorCisgKiAiZ2l0IG1lcmdlIC0tbm8tZWRpdCIgY29tcHV0ZWQgd2hvIHdlcmUgaW52b2x2ZWQgaW4gdGhlIHdvcmsgZG9uZQorICAgb24gdGhlIHNpZGUgYnJhbmNoLCBldmVuIHRob3VnaCB0aGF0IGluZm9ybWF0aW9uIGlzIHRvIGJlIGRpc2NhcmRlZAorICAgd2l0aG91dCBnZXR0aW5nIHNlZW4gaW4gdGhlIGVkaXRvci4KKworICogImdpdCBtZXJnZSIgc3RhcnRlZCBjYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rIGxpa2UgImdpdAorICAgY29tbWl0IiBkb2VzIHNvbWUgdGltZSBhZ28sIGJ1dCBmb3Jnb3QgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgZXhpdAorICAgc3RhdHVzIG9mIHRoZSBob29rLgorCisgKiBBIGZhaWx1cmUgdG8gcHVzaCBkdWUgdG8gbm9uLWZmIHdoaWxlIG9uIGFuIHVuYm9ybiBicmFuY2gKKyAgIGRlcmVmZXJlbmNlZCBhIE5VTEwgcG9pbnRlciB3aGVuIHNob3dpbmcgYW4gZXJyb3IgbWVzc2FnZS4KKworICogV2hlbiB1c2VycyBzcGVsbCAiY2M6IiBpbiBsb3dlcmNhc2UgaW4gdGhlIGZha2UgImhlYWRlciIgaW4gdGhlCisgICB0cmFpbGVyIHBhcnQsICJnaXQgc2VuZC1lbWFpbCIgZmFpbGVkIHRvIHBpY2sgdXAgdGhlIGFkZHJlc3NlcyBmcm9tCisgICB0aGVyZS4gQXMgZS1tYWlsIGhlYWRlcnMgZmllbGQgbmFtZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIHRoaXMKKyAgIHNjcmlwdCBzaG91bGQgZm9sbG93IHN1aXQgYW5kIHRyZWF0ICJjYzoiIGFuZCAiQ2M6IiB0aGUgc2FtZSB3YXkuCisKKyAqIE91dHB1dCBmcm9tICJnaXQgc3RhdHVzIC0taWdub3JlZCIgc2hvd2VkIGFuIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb24KKyAgIHdpdGggIi0tdW50cmFja2VkIi4KKworICogImdpdHdlYiIsIHdoZW4gc29ydGluZyBieSBhZ2UgdG8gc2hvdyByZXBvc2l0b3JpZXMgd2l0aCBuZXcKKyAgIGFjdGl2aXRpZXMgZmlyc3QsIHVzZWQgdG8gc29ydCByZXBvc2l0b3JpZXMgd2l0aCBhYnNvbHV0ZWx5CisgICBub3RoaW5nIGluIGl0IGVhcmx5LCB3aGljaCB3YXMgbm90IHZlcnkgdXNlZnVsLgorCisgKiAiZ2l0d2ViIidzIGNvZGUgdG8gc2FuaXRpemUgY29udHJvbCBjaGFyYWN0ZXJzIGJlZm9yZSBwYXNzaW5nIGl0IHRvCisgICAiaGlnaGxpZ2h0IiBmaWx0ZXIgbG9zdCBrbm93bi10by1iZS1zYWZlIGNvbnRyb2wgY2hhcmFjdGVycyBieQorICAgbWlzdGFrZS4KKworICogImdpdHdlYiIgcGFnZXMgc2VydmVkIG92ZXIgSFRUUFMsIHdoZW4gY29uZmlndXJlZCB0byBzaG93IHBpY29uIG9yCisgICBncmF2YXRhciwgcmVmZXJyZWQgdG8gdGhlc2UgZXh0ZXJuYWwgcmVzb3VyY2VzIHRvIGJlIGZldGNoZWQgdmlhCisgICBIVFRQLCByZXN1bHRpbmcgaW4gbWl4ZWQgY29udGVudHMgd2FybmluZyBpbiBicm93c2Vycy4KKworICogV2hlbiBhIGxpbmUgdG8gYmUgd3JhcHBlZCBoYXMgYSBzb2xpZCBydW4gb2Ygbm9uIHNwYWNlIGNoYXJhY3RlcnMKKyAgIHdob3NlIGxlbmd0aCBleGFjdGx5IGlzIHRoZSB3cmFwIHdpZHRoLCAiZ2l0IHNob3J0bG9nIC13IiBmYWlsZWQKKyAgIHRvIGFkZCBhIG5ld2xpbmUgYWZ0ZXIgc3VjaCBhIGxpbmUuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIGxlYWtlZCBhbiB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlIHdoaWxlCisgICBsb29raW5nIGZvciBwb3NzaWJsZSBtYXRjaGVzIHdpdGggcGF0aHMgaW4gPHRyZWUtaXNoPi4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yICJ0Y3NoIiBlbWl0dGVkIGFuIHVud2FudGVkIHNwYWNlCisgICBhZnRlciBjb21wbGV0aW5nIGEgc2luZ2xlIGRpcmVjdG9yeSBuYW1lLgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBjb2RlIHdhcyBpbmFkdmVydGVudGx5IG1hZGUgaW5jb21wYXRpYmxlIHdpdGgKKyAgIG9sZGVyIHZlcnNpb25zIG9mIGJhc2ggYnkgdXNpbmcgYSBuZXdlciBhcnJheSBub3RhdGlvbi4KKworICogImdpdCBwdXNoIiB3YXMgdGF1Z2h0IHRvIHJlZnVzZSB1cGRhdGluZyB0aGUgYnJhbmNoIHRoYXQgaXMKKyAgIGN1cnJlbnRseSBjaGVja2VkIG91dCBsb25nIHRpbWUgYWdvLCBidXQgdGhlIHVzZXIgbWFudWFsIHdhcyBsZWZ0CisgICBzdGFsZS4KKyAgIChtZXJnZSA1MDk5NWVkIHdrL21hbi1kZW55LWN1cnJlbnQtYnJhbmNoLWlzLWRlZmF1bHQtdGhlc2UtZGF5cyBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgc2hlbGxzIGRvIG5vdCBiZWhhdmUgY29ycmVjdGx5IHdoZW4gSUZTIGlzIHVuc2V0OyB3b3JrIGl0CisgICBhcm91bmQgYnkgZXhwbGljaXRseSBzZXR0aW5nIGl0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLgorCisgKiBTb21lIHNjcmlwdGVkIHByb2dyYW1zIHdyaXR0ZW4gaW4gUHl0aG9uIGRpZCBub3QgZ2V0IHVwZGF0ZWQgd2hlbgorICAgUFlUSE9OX1BBVEggY2hhbmdlZC4KKyAgIChjaGVycnktcGljayA5NmE0NjQ3ZmNhNTQwMzE5NzRjZDZhZDEgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIGF1dG9jb25mIGlzIHVzZWQsIGFueSBidWlsZCBvbiBhIGRpZmZlcmVudCBjb21taXQgYWx3YXlzIHJhbgorICAgImNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrIiBldmVuIHdoZW4gdW5uZWNlc3NhcnkuCisKKyAqIEEgZml4IHdhcyBhZGRlZCB0byB0aGUgYnVpbGQgcHJvY2VkdXJlIHRvIHdvcmsgYXJvdW5kIGJ1Z2d5CisgICB2ZXJzaW9ucyBvZiBjY2FjaGUgYnJva2UgdGhlIGF1dG8tZ2VuZXJhdGlvbiBvZiBkZXBlbmRlbmNpZXMsIHdoaWNoCisgICB1bmZvcnR1bmF0ZWx5IGlzIHN0aWxsIHJlbGV2YW50IGJlY2F1c2Ugc29tZSBwZW9wbGUgdXNlIGFuY2llbnQKKyAgIGRpc3Ryb3MuCisKKyAqIFRoZSBhdXRvY29uZiBzdWJzeXN0ZW0gcGFzc2VkIC0tbWFuZGlyIGRvd24gdG8gZ2VuZXJhdGVkCisgICBjb25maWcubWFrLmF1dG9nZW4gYnV0IGZvcmdvdCB0byBkbyB0aGUgc2FtZSBmb3IgLS1odG1sZGlyLgorICAgKG1lcmdlIDU1ZDliZjAgY3QvYXV0b2NvbmYtaHRtbGRpciBsYXRlciB0byBtYWludCkuCisKKyAqIEEgY2hhbmdlIG1hZGUgb24gdjEuOC4xLnggbWFpbnRlbmFuY2UgdHJhY2sgaGFkIGEgbmFzdHkgcmVncmVzc2lvbgorICAgdG8gYnJlYWsgdGhlIGJ1aWxkIHdoZW4gYXV0b2NvbmYgaXMgdXNlZC4KKyAgIChtZXJnZSA3ZjFiNjk3IGpuL2xlc3MtcmVjb25maWd1cmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBoYXZlIGJlZW4gY2FycnlpbmcgYSB0cmFuc2xhdGVkIGFuZCBsb25nLXVubWFpbnRhaW5lZCBjb3B5IG9mIGFuCisgICBvbGQgdmVyc2lvbiBvZiB0aGUgdHV0b3JpYWw7IHJlbW92ZWQuCisKKyAqIHQwMDUwIGhhZCB0ZXN0cyBleHBlY3RpbmcgZmFpbHVyZXMgZnJvbSBhIGJ1ZyB0aGF0IHdhcyBmaXhlZCBzb21lCisgICB0aW1lIGFnby4KKworICogdDQwMTQsIHQ5NTAyIGFuZCB0MDIwMCB0ZXN0cyBoYWQgdmFyaW91cyBwb3J0YWJpbGl0eSBpc3N1ZXMgdGhhdAorICAgYnJva2Ugb24gT3BlbkJTRC4KKworICogdDkwMjAgYW5kIHQzNjAwIHRlc3RzIGhhZCB2YXJpb3VzIHBvcnRhYmlsaXR5IGlzc3Vlcy4KKworICogdDkyMDAgcnVucyAiY3ZzIGluaXQiIG9uIGEgZGlyZWN0b3J5IHRoYXQgYWxyZWFkeSBleGlzdHMsIGJ1dCBhCisgICBwbGF0Zm9ybSBjYW4gY29uZmlndXJlIHRoaXMgZmFpbCBmb3IgdGhlIGN1cnJlbnQgdXNlciAoZS5nLiB5b3UKKyAgIG5lZWQgdG8gYmUgaW4gdGhlIGN2c2FkbWluIGdyb3VwIG9uIE5ldEJTRCA2LjApLgorCisgKiB0OTAyMCBhbmQgdDk4MTAgaGFkIGEgZmV3IG5vbi1wb3J0YWJsZSBzaGVsbCBzY3JpcHQgY29uc3RydWN0LgorCisgKiBTY3JpcHRzIHRvIHRlc3QgYmFzaCBjb21wbGV0aW9uIHdhcyBpbmhlcmVudGx5IGZsYWt5IGFzIGl0IHdhcworICAgYWZmZWN0ZWQgYnkgd2hhdGV2ZXIgcmFuZG9tIHRoaW5ncyB0aGUgdXNlciBtYXkgaGF2ZSBvbiAkUEFUSC4KKworICogQW4gZWxlbWVudCBvbiBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyBjb3VsZCBiZSBhICJsb2dpY2FsIiBwYXRobmFtZQorICAgdGhhdCB1c2VzIGEgc3ltYm9saWMgbGluayB0byBwb2ludCBhdCBzb21ld2hlcmUgZWxzZSAoZS5nLiAvaG9tZS9tZQorICAgdGhhdCBwb2ludHMgYXQgL25ldC9ob3N0L2V4cG9ydC9ob21lL21lLCBhbmQgdGhlIGxhdHRlciBkaXJlY3RvcnkKKyAgIGlzIGF1dG9tb3VudGVkKS4gRWFybGllciB3aGVuIEdpdCBzYXcgc3VjaCBhIHBhdGhuYW1lIGUuZy4gL2hvbWUvbWUKKyAgIG9uIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSAiY2VpbGluZyIgbWVjaGFuaXNtIGRpZCBub3QgdGFrZQorICAgZWZmZWN0LiBXaXRoIHRoaXMgcmVsZWFzZSAodGhlIGZpeCBoYXMgYWxzbyBiZWVuIG1lcmdlZCB0byB0aGUKKyAgIHYxLjguMS54IG1haW50ZW5hbmNlIHNlcmllcyksIGVsZW1lbnRzIG9uIEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCisgICBhcmUgYnkgZGVmYXVsdCBjaGVja2VkIGZvciBzdWNoIGFsaWFzaW5nIGNvbWluZyBmcm9tIHN5bWJvbGljCisgICBsaW5rcy4gQXMgdGhpcyBuZWVkcyB0byBhY3R1YWxseSByZXNvbHZlIHN5bWJvbGljIGxpbmtzIGZvciBlYWNoCisgICBlbGVtZW50IG9uIHRoZSBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUywgeW91IGNhbiBkaXNhYmxlIHRoaXMKKyAgIG1lY2hhbmlzbSBmb3Igc29tZSBlbGVtZW50cyBieSBsaXN0aW5nIHRoZW0gYWZ0ZXIgYW4gZW1wdHkgZWxlbWVudAorICAgb24gdGhlIEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTLiBlLmcuIFNldHRpbmcgL2hvbWUvbWU6Oi9ob21lL2hpbSB0bworICAgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgbWFrZXMgR2l0IHJlc29sdmUgc3ltYm9saWMgbGlua3MgaW4KKyAgIC9ob21lL21lIHdoZW4gY2hlY2tpbmcgaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHVuZGVyIC9ob21lL21lLAorICAgYnV0IGRvZXMgbm90IGRvIHNvIGZvciAvaG9tZS9oaW0uCisgICAobWVyZ2UgN2VjMzBhYSBtaC9tYWludC1jZWlsLWFic29sdXRlIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NjYzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjEudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0dpdCB2MS44LjMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXaGVuICRIT01FIGlzIG1pc2NvbmZpZ3VyZWQgdG8gcG9pbnQgYXQgYW4gdW5yZWFkYWJsZSBkaXJlY3RvcnksIHdlCisgICB1c2VkIHRvIGNvbXBsYWluIGFuZCBkaWUuIFRoZSBjaGVjayBoYXMgYmVlbiBsb29zZW5lZC4KKworICogSGFuZGxpbmcgb2YgbmVnYXRpdmUgZXhjbHVkZSBwYXR0ZXJuIGZvciBkaXJlY3RvcmllcyAiIWRpciIgd2FzCisgICBicm9rZW4gaW4gdGhlIHVwZGF0ZSB0byB2MS44LjMuCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIHRyaXZpYWwgY29kZSBjbGVhbi11cHMsIGRvY3VtZW50YXRpb24KK3VwZGF0ZXMsIHVwZGF0ZXMgdG8gdGhlIHRlc3Qgc3VpdGUsIGV0Yy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YWUxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjIudHh0CkBAIC0wLDAgKzEsNTkgQEAKK0dpdCB2MS44LjMuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjMuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ2xvbmluZyB3aXRoICJnaXQgY2xvbmUgLS1kZXB0aCBOIiB3aGlsZSBmZXRjaC5mc2Nrb2JqZWN0cyAob3IKKyAgIHRyYW5zZmVyLmZzY2tvYmplY3RzKSBpcyBzZXQgdG8gdHJ1ZSBkaWQgbm90IHRlbGwgdGhlIGN1dC1vZmYKKyAgIHBvaW50cyBvZiB0aGUgc2hhbGxvdyBoaXN0b3J5IHRvIHRoZSBwcm9jZXNzIHRoYXQgdmFsaWRhdGVzIHRoZQorICAgb2JqZWN0cyBhbmQgdGhlIGhpc3RvcnkgcmVjZWl2ZWQsIGNhdXNpbmcgdGhlIHZhbGlkYXRpb24gdG8gZmFpbC4KKworICogImdpdCBjaGVja291dCBmb28iIERXSU1zIHRoZSBpbnRlbmRlZCAidXBzdHJlYW0iIGFuZCB0dXJucyBpdCBpbnRvCisgICAiZ2l0IGNoZWNrb3V0IC10IC1iIGZvbyByZW1vdGVzL29yaWdpbi9mb28iLiBUaGlzIGNvZGVwYXRoIGhhcyBiZWVuCisgICB1cGRhdGVkIHRvIGNvcnJlY3RseSB0YWtlIGV4aXN0aW5nIHJlbW90ZSBkZWZpbml0aW9ucyBpbnRvIGFjY291bnQuCisKKyAqICJnaXQgZmV0Y2giIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnkgZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBkb2VzCisgICBub3Qga25vdyBhYm91dCB0aGUgc2hhbGxvdyBib3VuZGFyeSBjb21taXRzIChlLmcuIGEgZGlmZmVyZW50IGZvcmsKKyAgIGZyb20gdGhlIHJlcG9zaXRvcnkgdGhlIGN1cnJlbnQgc2hhbGxvdyByZXBvc2l0b3J5IHdhcyBjbG9uZWQgZnJvbSkKKyAgIGRpZCBub3Qgd29yayBjb3JyZWN0bHkuCisKKyAqICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBoYWQgb25lIGNvZGVwYXRoIHdpdGggbG9vc2UgZXJyb3IKKyAgIGNoZWNrcyB0byBsb3NlIGRhdGEgYXQgdGhlIHJlbW90ZSBzaWRlLgorCisgKiAiZ2l0IGxvZyAtLWFuY2VzdHJ5LXBhdGggQS4uLkIiIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZCwgYXMgaXQgZGlkCisgICBub3QgcGF5IGF0dGVudGlvbiB0byB0aGUgZmFjdCB0aGF0IHRoZSBtZXJnZSBiYXNlIGJldHdlZW4gQSBhbmQgQgorICAgd2FzIHRoZSBib3R0b20gb2YgdGhlIHJhbmdlIGJlaW5nIHNwZWNpZmllZC4KKworICogImdpdCBkaWZmIC1jIC1wIiB3YXMgbm90IHNob3dpbmcgYSBkZWxldGVkIGxpbmUgZnJvbSBhIGh1bmsgd2hlbgorICAgYW5vdGhlciBodW5rIGltbWVkaWF0ZWx5IGJlZ2lucyB3aGVyZSB0aGUgZWFybGllciBvbmUgZW5kcy4KKworICogImdpdCBtZXJnZSBAey0xfX4yMiIgd2FzIHJld3JpdHRlbiB0byAiZ2l0IG1lcmdlIGZyb3R6QHsxfX4yMiIKKyAgIGluY29ycmVjdGx5IHdoZW4geW91ciBwcmV2aW91cyBicmFuY2ggd2FzICJmcm90eiIgKGl0IHNob3VsZCBiZQorICAgcmV3cml0dGVuIHRvICJnaXQgbWVyZ2UgZnJvdHp+MjIiIGluc3RlYWQpLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gJyciIHNob3VsZCBub3Qgc3RhcnQgYW4KKyAgIGVkaXRvci4KKworICogImdpdCBwdXNoIC0tW25vLV12ZXJpZnkiIHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogQW4gZW50cnkgZm9yICJmaWxlOi8vIiBzY2hlbWUgaW4gdGhlIGVudW1lcmF0aW9uIG9mIFVSTCB0eXBlcyBHaXQKKyAgIGNhbiB0YWtlIGluIHRoZSBIVE1MIGRvY3VtZW50YXRpb24gd2FzIG1hZGUgaW50byBhIGNsaWNrYWJsZSBsaW5rCisgICBieSBtaXN0YWtlLgorCisgKiB6c2ggcHJvbXB0IHNjcmlwdCB0aGF0IGJvcnJvd2VkIGZyb20gYmFzaCBwcm9tcHQgc2NyaXB0IGRpZCBub3QKKyAgIHdvcmsgZHVlIHRvIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBhcnJheSB2YXJpYWJsZSBub3RhdGlvbiBiZXR3ZWVuCisgICB0aGVzZSB0d28gc2hlbGxzLgorCisgKiBUaGUgYmFzaCBwcm9tcHQgY29kZSAoaW4gY29udHJpYi8pIGRpc3BsYXllZCB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoCisgICBiZWluZyByZWJhc2VkIHdoZW4gInJlYmFzZSAtaS8tbS8tcCIgbW9kZXMgYXJlIGluIHVzZSwgYnV0IG5vdCB0aGUKKyAgIHBsYWluIHZhbmlsbGEgInJlYmFzZSIuCisKKyAqICJnaXQgcHVzaCAkdGhlcmUgSEVBRDpicmFuY2giIGRpZCBub3QgcmVzb2x2ZSBIRUFEIGVhcmx5IGVub3VnaCwgc28KKyAgIGl0IHdhcyBlYXN5IHRvIGZsaXAgaXQgYXJvdW5kIHdoaWxlIHB1c2ggaXMgc3RpbGwgZ29pbmcgb24gYW5kIHB1c2gKKyAgIG91dCBhIGJyYW5jaCB0aGF0IHRoZSB1c2VyIGRpZCBub3Qgb3JpZ2luYWxseSBpbnRlbmRlZCB3aGVuIHRoZQorICAgY29tbWFuZCB3YXMgc3RhcnRlZC4KKworICogImRpZmZ0b29sIC0tZGlyLWRpZmYiIGRpZCBub3QgY29weSBiYWNrIGNoYW5nZXMgbWFkZSBieSB0aGUKKyAgIGVuZC11c2VyIGluIHRoZSBkaWZmIHRvb2wgYmFja2VuZCB0byB0aGUgd29ya2luZyB0cmVlIGluIHNvbWUKKyAgIGNhc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhNGY0ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMy50eHQKQEAgLTAsMCArMSw0NyBAQAorR2l0IHYxLjguMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMy4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFwcGx5IiBwYXJzZWQgcGF0Y2hlcyB0aGF0IGFkZCBuZXcgZmlsZXMsIGdlbmVyYXRlZCBieSBwcm9ncmFtcworICAgb3RoZXIgdGhhbiBHaXQsIGluY29ycmVjdGx5LiAgVGhpcyBpcyBhbiBvbGQgYnJlYWthZ2UgaW4gdjEuNy4xMS4KKworICogT2xkZXIgY1VSTCB3YW50ZWQgcGllY2Ugb2YgbWVtb3J5IHdlIGNhbGwgaXQgd2l0aCB0byBiZSBzdGFibGUsIGJ1dAorICAgd2UgdXBkYXRlZCB0aGUgYXV0aCBtYXRlcmlhbCBhZnRlciBoYW5kaW5nIGl0IHRvIGEgY2FsbC4KKworICogImdpdCBwdWxsIiBpbnRvIG5vdGhpbmcgdHJhc2hlZCAibG9jYWwgY2hhbmdlcyIgdGhhdCB3ZXJlIGluIHRoZQorICAgaW5kZXguCisKKyAqIE1hbnkgImdpdCBzdWJtb2R1bGUiIG9wZXJhdGlvbnMgZGlkIG5vdCB3b3JrIG9uIGEgc3VibW9kdWxlIGF0IGEKKyAgIHBhdGggd2hvc2UgbmFtZSBpcyBub3QgaW4gQVNDSUkuCisKKyAqICJjaGVycnktcGljayIgaGFkIGEgc21hbGwgbGVhayBpbiBpdHMgZXJyb3IgY29kZXBhdGguCisKKyAqIExvZ2ljIHVzZWQgYnkgZ2l0LXNlbmQtZW1haWwgdG8gc3VwcHJlc3MgY2MgbWlzaGFuZGxlZCBuYW1lcyBsaWtlCisgICAiQSBVLiBUaG9yIiA8YXV0aG9yQGV4YW1wbGUueHo+LCB3aGVyZSB0aGUgaHVtYW4gcmVhZGFibGUgcGFydAorICAgbmVlZHMgdG8gYmUgcXVvdGVkICh0aGUgdXNlciBpbnB1dCBtYXkgbm90IGhhdmUgdGhlIGRvdWJsZSBxdW90ZXMKKyAgIGFyb3VuZCB0aGUgbmFtZSwgYW5kIGNvbXBhcmlzb24gd2FzIGRvbmUgYmV0d2VlbiBxdW90ZWQgYW5kCisgICB1bnF1b3RlZCBzdHJpbmdzKS4gIEl0IGFsc28gbWlzaGFuZGxlZCBuYW1lcyB0aGF0IG5lZWQgUkZDMjA0NworICAgcXVvdGluZy4KKworICogImdpdHdlYiIgZm9yZ290IHRvIGNsZWFyIGEgZ2xvYmFsIHZhcmlhYmxlICRzZWFyY2hfcmVnZXhwIHVwb24gZWFjaAorICAgcmVxdWVzdCwgbWlzdGFrZW5seSBjYXJyeWluZyBvdmVyIHRoZSBwcmV2aW91cyBzZWFyY2ggdG8gYSBuZXcgb25lCisgICB3aGVuIHVzZWQgYXMgYSBwZXJzaXN0ZW50IENHSS4KKworICogVGhlIHdpbGRtYXRjaCBlbmdpbmUgZGlkIG5vdCBob25vciBXTV9DQVNFRk9MRCBvcHRpb24gY29ycmVjdGx5LgorCisgKiAiZ2l0IGxvZyAtYyAtLWZvbGxvdyAkcGF0aCIgc2VnZmF1bHRlZCB1cG9uIGhpdHRpbmcgdGhlIGNvbW1pdCB0aGF0CisgICByZW5hbWVkIHRoZSAkcGF0aCBiZWluZyBmb2xsb3dlZC4KKworICogV2hlbiBhIHJlZmxvZyBub3RhdGlvbiBpcyB1c2VkIGZvciBpbXBsaWNpdCAiY3VycmVudCBicmFuY2giLAorICAgZS5nLiAiZ2l0IGxvZyBAe3V9Iiwgd2UgZGlkIG5vdCBzYXkgd2hpY2ggYnJhbmNoIGFuZCB3b3JzZSBzYWlkCisgICAiYnJhbmNoICcnIiBpbiB0aGUgZXJyb3IgbWVzc2FnZXMuCisKKyAqIE1hYyBPUyBYIGRvZXMgbm90IGxpa2UgdG8gd3JpdGUoMikgbW9yZSB0aGFuIElOVF9NQVggbnVtYmVyIG9mCisgICBieXRlczsgd29yayBpdCBhcm91bmQgYnkgY2hvcHBpbmcgd3JpdGUoMikgaW50byBzbWFsbGVyIHBpZWNlcy4KKworICogTmV3ZXIgTWFjT1MgWCBlbmNvdXJhZ2VzIHRoZSBwcm9ncmFtcyB0byBjb21waWxlIGFuZCBsaW5rIHdpdGgKKyAgIHRoZWlyIENvbW1vbkNyeXB0bywgbm90IHdpdGggT3BlblNTTC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZjEwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjQudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dpdCB2MS44LjMuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHVwZGF0ZSBpcyBtb3N0bHkgdG8gcHJvcGFnYXRlIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIHRlc3QKK3VwZGF0ZXMgZnJvbSB0aGUgbWFzdGVyIGZyb250IGJhY2sgdG8gdGhlIG1haW50ZW5hbmNlIHRyYWNrLgorCitGaXhlcyBzaW5jZSB2MS44LjMuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGJpc2VjdCBsb2cgbGlzdGVkIGluY29ycmVjdCBjb21taXRzIHdoZW4gYmlzZWN0aW9uIGVuZHMgd2l0aAorICAgb25seSBza2lwcGVkIG9uZXMuCisKKyAqIFRoZSB0ZXN0IGNvdmVyYWdlIGZyYW1ld29yayB3YXMgbGVmdCBicm9rZW4gZm9yIHNvbWUgdGltZS4KKworICogVGhlIHRlc3Qgc3VpdGUgZm9yIEhUVFAgdHJhbnNwb3J0IGRpZCBub3QgcnVuIHdpdGggQXBhY2hlIDIuNC4KKworICogImdpdCBkaWZmIiB1c2VkIHRvIGZhaWwgd2hlbiBjb3JlLnNhZmVjcmxmIGlzIHNldCBhbmQgdGhlIHdvcmtpbmcKKyAgIHRyZWUgY29udGVudHMgaGFkIG1peGVkIENSTEYvTEYgbGluZSBlbmRpbmdzLiBDb21taXR0aW5nIHN1Y2ggYQorICAgY29udGVudCBtdXN0IGJlIHByb2hpYml0ZWQsIGJ1dCAiZ2l0IGRpZmYiIHNob3VsZCBoZWxwIHRoZSB1c2VyIHRvCisgICBsb2NhdGUgYW5kIGZpeCBzdWNoIHByb2JsZW1zIHdpdGhvdXQgZmFpbGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkNTY4ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMudHh0CkBAIC0wLDAgKzEsNDM2IEBACitHaXQgdjEuOC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzIChmb3IgR2l0IDIuMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIEluIEdpdCAyLjAsIHRoZSBkZWZhdWx0IHdpbGwgY2hhbmdlIHRvIHRoZSAic2ltcGxlIgorc2VtYW50aWNzIHRoYXQgcHVzaGVzIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZQorbmFtZSwgYW5kIG9ubHkgd2hlbiB0aGUgY3VycmVudCBicmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQKK3JlbW90ZSBicmFuY2guICBVc2UgdGhlIHVzZXIgcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisicHVzaC5kZWZhdWx0IiB0byBjaGFuZ2UgdGhpcy4gIElmIHlvdSBhcmUgYW4gb2xkLXRpbWVyIHdobyBpcyB1c2VkCit0byB0aGUgIm1hdGNoaW5nIiBzZW1hbnRpY3MsIHlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZSB0byAibWF0Y2hpbmciCit0byBrZWVwIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvdXIuICBJZiB5b3Ugd2FudCB0byBsaXZlIGluIHRoZSBmdXR1cmUKK2Vhcmx5LCB5b3UgY2FuIHNldCBpdCB0byAic2ltcGxlIiB0b2RheSB3aXRob3V0IHdhaXRpbmcgZm9yIEdpdCAyLjAuCisKK1doZW4gImdpdCBhZGQgLXUiIChhbmQgImdpdCBhZGQgLUEiKSBpcyBydW4gaW5zaWRlIGEgc3ViZGlyZWN0b3J5IGFuZAorZG9lcyBub3Qgc3BlY2lmeSB3aGljaCBwYXRocyB0byBhZGQgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQKK3dpbGwgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHRyZWUgaW4gR2l0IDIuMCBmb3IgY29uc2lzdGVuY3kKK3dpdGggImdpdCBjb21taXQgLWEiIGFuZCBvdGhlciBjb21tYW5kcy4gIFRoZXJlIHdpbGwgYmUgbm8KK21lY2hhbmlzbSB0byBtYWtlIHBsYWluICJnaXQgYWRkIC11IiBiZWhhdmUgbGlrZSAiZ2l0IGFkZCAtdSAuIi4KK0N1cnJlbnQgdXNlcnMgb2YgImdpdCBhZGQgLXUiICh3aXRob3V0IGEgcGF0aHNwZWMpIHNob3VsZCBzdGFydAordHJhaW5pbmcgdGhlaXIgZmluZ2VycyB0byBleHBsaWNpdGx5IHNheSAiZ2l0IGFkZCAtdSAuIgorYmVmb3JlIEdpdCAyLjAgY29tZXMuICBBIHdhcm5pbmcgaXMgaXNzdWVkIHdoZW4gdGhlc2UgY29tbWFuZHMgYXJlCitydW4gd2l0aG91dCBhIHBhdGhzcGVjIGFuZCB3aGVuIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgb3V0c2lkZSB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZSBiZWhhdmlvdXIgaW4gR2l0IDIuMCB3aWxsIGJlIGRpZmZlcmVudAorZnJvbSB0b2RheSdzIHZlcnNpb24gaW4gc3VjaCBhIHNpdHVhdGlvbi4KKworSW4gR2l0IDIuMCwgImdpdCBhZGQgPHBhdGg+IiB3aWxsIGJlaGF2ZSBhcyAiZ2l0IGFkZCAtQSA8cGF0aD4iLCBzbwordGhhdCAiZ2l0IGFkZCBkaXIvIiB3aWxsIG5vdGljZSBwYXRocyB5b3UgcmVtb3ZlZCBmcm9tIHRoZSBkaXJlY3RvcnkKK2FuZCByZWNvcmQgdGhlIHJlbW92YWwuICBWZXJzaW9ucyBiZWZvcmUgR2l0IDIuMCwgaW5jbHVkaW5nIHRoaXMKK3JlbGVhc2UsIHdpbGwga2VlcCBpZ25vcmluZyByZW1vdmFscywgYnV0IHRoZSB1c2VycyB3aG8gcmVseSBvbiB0aGlzCitiZWhhdmlvdXIgYXJlIGVuY291cmFnZWQgdG8gc3RhcnQgdXNpbmcgImdpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8cGF0aD4iCitub3cgYmVmb3JlIDIuMCBpcyByZWxlYXNlZC4KKworCitVcGRhdGVzIHNpbmNlIHYxLjguMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yZWlnbiBpbnRlcmZhY2UKKworICogcmVtb3RlLWhnIGFuZCByZW1vdGUtYnpyIGhlbHBlcnMgKGluIGNvbnRyaWIvIHNpbmNlIHYxLjguMikgaGF2ZQorICAgYmVlbiB1cGRhdGVkOyBlc3BlY2lhbGx5LCB0aGUgbGF0dGVyIGhhcyBiZWVuIGRvbmUgaW4gYW4KKyAgIGFjY2VsZXJhdGVkIHNjaGVkdWxlIChyZWFkOiB3ZSBtYXkgbm90IGhhdmUgbWVyZ2VkIHRvIHRoaXMgcmVsZWFzZQorICAgaWYgd2Ugd2VyZSBmb2xsb3dpbmcgdGhlIHVzdWFsICJjb29rIHN1ZmZpY2llbnRseSBpbiBuZXh0IGJlZm9yZQorICAgdW5sZWFzaGluZyBpdCB0byB0aGUgd29ybGQiIHdvcmtmbG93KSBpbiBvcmRlciB0byBoZWxwIEVtYWNzIGZvbGtzLAorICAgd2hvc2UgcHJpbWFyeSBTQ00gc2VlbXMgdG8gYmUgc3RhZ25hdGluZy4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQSBoYW5kZnVsIG9mIHVwZGF0ZXMgYXBwbGllZCB0byBnaXRrLCBpbmNsdWRpbmcgYW4gYWRkaXRpb24gb2YKKyAgICJyZXZlcnQiIGFjdGlvbiwgc2hvd2luZyBkYXRlcyBpbiB0YWdzIGluIGEgbmljZXIgd2F5LCBtYWtpbmcKKyAgIGNvbG9ycyBjb25maWd1cmFibGUsIGFuZCBzdXBwb3J0IGZvciAtRydwaWNrYXhlJyBzZWFyY2guCisKKyAqIFRoZSBwcm9tcHQgc3RyaW5nIGdlbmVyYXRvciAoaW4gY29udHJpYi9jb21wbGV0aW9uLykgbGVhcm5lZCB0bworICAgc2hvdyBob3cgbWFueSBjaGFuZ2VzIHRoZXJlIGFyZSBpbiB0b3RhbCBhbmQgaG93IG1hbnkgaGF2ZSBiZWVuCisgICByZXBsYXllZCBkdXJpbmcgYSAiZ2l0IHJlYmFzZSIgc2Vzc2lvbi4KKworICogImdpdCBicmFuY2ggLS12diIgbGVhcm5lZCB0byBwYWludCB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGl0CisgICBpbnRlZ3JhdGVzIHdpdGggaW4gYSBkaWZmZXJlbnQgY29sb3IgKGNvbG9yLmJyYW5jaC51cHN0cmVhbSwKKyAgIHdoaWNoIGRlZmF1bHRzIHRvIGJsdWUpLgorCisgKiBJbiBhIHNwYXJzZWx5IHBvcHVsYXRlZCB3b3JraW5nIHRyZWUsICJnaXQgY2hlY2tvdXQgPHBhdGhzcGVjPiIgbm8KKyAgIGxvbmdlciB1bm1hcmtzIHBhdGhzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdGhzcGVjIHRoYXQgd2VyZQorICAgb3JpZ2luYWxseSBpZ25vcmVkIHdpdGggIi0tc3BhcnNlIiAodXNlIC0taWdub3JlLXNraXAtd29ya3RyZWUtYml0cworICAgb3B0aW9uIHRvIHJlc3VycmVjdCB0aGVzZSBwYXRocyBvdXQgb2YgdGhlIGluZGV4IGlmIHlvdSByZWFsbHkgd2FudAorICAgdG8pLgorCisgKiAiZ2l0IGxvZyAtLWZvcm1hdCIgc3BlY2lmaWVyIGxlYXJuZWQgJUMoYXV0bykgdG9rZW4gdGhhdCB0ZWxscyBHaXQKKyAgIHRvIHVzZSBjb2xvciB3aGVuIGludGVycG9sYXRpbmcgJWQgKGRlY29yYXRpb24pLCAlaCAoc2hvcnQgY29tbWl0CisgICBvYmplY3QgbmFtZSksIGV0Yy4gZm9yIHRlcm1pbmFsIG91dHB1dC4KKworICogImdpdCBiaXNlY3QiIGxlYXZlcyB0aGUgZmluYWwgb3V0Y29tZSBhcyBhIGNvbW1lbnQgaW4gaXRzIGJpc2VjdAorICAgbG9nIGZpbGUuCisKKyAqICJnaXQgY2xvbmUgLS1yZWZlcmVuY2UiIGNhbiBub3cgcmVmZXIgdG8gYSBnaXRmaWxlICJ0ZXh0dWFsIHN5bWxpbmsiCisgICB0aGF0IHBvaW50cyBhdCB0aGUgcmVhbCBsb2NhdGlvbiBvZiB0aGUgcmVwb3NpdG9yeS4KKworICogImdpdCBjb3VudC1vYmplY3RzIiBsZWFybmVkICItLWh1bWFuLXJlYWRhYmxlIiBha2EgIi1IIiBvcHRpb24gdG8KKyAgIHNob3cgdmFyaW91cyBsYXJnZSBudW1iZXJzIGluIEtpL01pL0dpQiBzY2FsZWQgYXMgbmVjZXNzYXJ5LgorCisgKiAiZ2l0IGNoZXJyeS1waWNrICRibG9iIiBhbmQgImdpdCBjaGVycnktcGljayAkdHJlZSIgYXJlIG5vbnNlbnNlLAorICAgYW5kIGEgbW9yZSByZWFkYWJsZSBlcnJvciBtZXNzYWdlIGUuZy4gImNhbid0IGNoZXJyeS1waWNrIGEgdHJlZSIKKyAgIGlzIGdpdmVuICh3ZSB1c2VkIHRvIHNheSAiZXhwZWN0ZWQgZXhhY3RseSBvbmUgY29tbWl0IikuCisKKyAqIFRoZSAiLS1hbm5vdGF0ZSIgb3B0aW9uIHRvICJnaXQgc2VuZC1lbWFpbCIgY2FuIGJlIHR1cm5lZCBvbiAob3IKKyAgIG9mZikgYnkgZGVmYXVsdCB3aXRoIHNlbmRlbWFpbC5hbm5vdGF0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICh5b3UKKyAgIGNhbiB1c2UgLS1uby1hbm5vdGF0ZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdG8gb3ZlcnJpZGUgaXQpLgorCisgKiBUaGUgIi0tY292ZXItbGV0dGVyIiBvcHRpb24gdG8gImdpdCBmb3JtYXQtcGF0Y2giIGNhbiBiZSB0dXJuZWQgb24KKyAgIChvciBvZmYpIGJ5IGRlZmF1bHQgd2l0aCBmb3JtYXQuY292ZXJMZXR0ZXIgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUuIEJ5IHNldHRpbmcgaXQgdG8gJ2F1dG8nLCB5b3UgY2FuIHR1cm4gaXQgb24gb25seSBmb3IgYQorICAgc2VyaWVzIHdpdGggdHdvIG9yIG1vcmUgcGF0Y2hlcy4KKworICogVGhlIGJhc2ggY29tcGxldGlvbiBzdXBwb3J0IChpbiBjb250cmliLykgbGVhcm5lZCB0aGF0IGNoZXJyeS1waWNrCisgICB0YWtlcyBhIGZldyBtb3JlIG9wdGlvbnMgdGhhbiBpdCBhbHJlYWR5IGtuZXcgYWJvdXQuCisKKyAqICJnaXQgaGVscCIgbGVhcm5lZCAiLWciIG9wdGlvbiB0byBzaG93IHRoZSBsaXN0IG9mIGd1aWRlcyBqdXN0IGxpa2UKKyAgIGxpc3Qgb2YgY29tbWFuZHMgYXJlIGdpdmVuIHdpdGggIi1hIi4KKworICogQSB0cmlhbmd1bGFyICJwdWxsIGZyb20gb25lIHBsYWNlLCBwdXNoIHRvIGFub3RoZXIgcGxhY2UiIHdvcmtmbG93CisgICBpcyBzdXBwb3J0ZWQgYmV0dGVyIGJ5IG5ldyByZW1vdGUucHVzaGRlZmF1bHQgKG92ZXJyaWRlcyB0aGUKKyAgICJvcmlnaW4iIHRoaW5nKSBhbmQgYnJhbmNoLioucHVzaHJlbW90ZSAob3ZlcnJpZGVzIHRoZQorICAgYnJhbmNoLioucmVtb3RlKSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgdG8gcmVwb3J0IHRoYXQgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgIHJldmVydCBzZXNzaW9uLCBqdXN0IGxpa2UgaXQgZG9lcyBmb3IgYSBjaGVycnktcGljayBhbmQgYSBiaXNlY3QKKyAgIHNlc3Npb24uCisKKyAqIFRoZSBoYW5kbGluZyBieSAiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byIgYWdhaW5zdCB2YXJpb3VzIGZvcm1zCisgICBvZiBlcnJvbmVvdXMgaW5wdXRzIHdhcyBzdWJvcHRpbWFsIGFuZCBoYXMgYmVlbiBpbXByb3ZlZC4KKworICogV2hlbiB0aGUgaW50ZXJhY3RpdmUgYWNjZXNzIHRvIGdpdC1zaGVsbCBpcyBub3QgZW5hYmxlZCwgaXQgaXNzdWVzCisgICBhIG1lc3NhZ2UgbWVhbnQgdG8gaGVscCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gZW5hYmxlIGl0LiAgQW4KKyAgIGV4cGxpY2l0IHdheSBoYXMgYmVlbiBhZGRlZCB0byBpc3N1ZSBjdXN0b20gbWVzc2FnZXMgdG8gcmVmdXNlIGFuCisgICBhY2Nlc3Mgb3ZlciB0aGUgbmV0d29yayB0byBoZWxwIHRoZSBlbmQgdXNlcnMgd2hvIGNvbm5lY3QgdG8gdGhlCisgICBzZXJ2aWNlIGV4cGVjdGluZyBhbiBpbnRlcmFjdGl2ZSBzaGVsbC4KKworICogSW4gYWRkaXRpb24gdG8gdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgZWRpdHMgdGhlIGxvZyBtZXNzYWdlIHdpdGgKKyAgIHRoZSAiZSlkaXQiIG9wdGlvbiBvZiAiYW0gLWkiLCByZXBsYWNlIHRoZSAiQXBwbHlpbmc6IHRoaXMgcGF0Y2giCisgICBtZXNzYWdlIHdpdGggdGhlIGZpbmFsIGxvZyBtZXNzYWdlIGNvbnRlbnRzIGFmdGVyIGFwcGx5bXNnIGhvb2sKKyAgIG11bmdlcyBpdC4KKworICogImdpdCBzdGF0dXMiIHN1Z2dlc3RzIHVzZXJzIHRvIGxvb2sgaW50byB1c2luZyAtLXVudHJhY2tlZD1ubyBvcHRpb24KKyAgIHdoZW4gaXQgdGFrZXMgdG9vIGxvbmcuCisKKyAqICJnaXQgc3RhdHVzIiBzaG93cyBhIGJpdCBtb3JlIGluZm9ybWF0aW9uIGR1cmluZyBhIHJlYmFzZS9iaXNlY3QKKyAgIHNlc3Npb24uCisKKyAqICJnaXQgZmV0Y2giIGxlYXJuZWQgdG8gZmV0Y2ggYSBjb21taXQgYXQgdGhlIHRpcCBvZiBhbiB1bmFkdmVydGlzZWQKKyAgIHJlZiBieSBzcGVjaWZ5aW5nIGEgcmF3IG9iamVjdCBuYW1lIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aGVuIHRoZQorICAgc2VydmVyIHNpZGUgc3VwcG9ydHMgdGhpcyBmZWF0dXJlLgorCisgKiBPdXRwdXQgZnJvbSAiZ2l0IGxvZyAtLWdyYXBoIiB3b3JrcyBiZXR0ZXIgd2l0aCBzdWJtb2R1bGUgbG9nCisgICBvdXRwdXQgbm93LgorCisgKiAiZ2l0IGNvdW50LW9iamVjdHMgLXYiIGxlYXJuZWQgdG8gcmVwb3J0IGxlZnRvdmVyIHRlbXBvcmFyeQorICAgcGFja2ZpbGVzIGFuZCBvdGhlciBnYXJiYWdlIGluIHRoZSBvYmplY3Qgc3RvcmUuCisKKyAqIEEgbmV3IHJlYWQtb25seSBjcmVkZW50aWFsIGhlbHBlciAoaW4gY29udHJpYi8pIHRvIGludGVyYWN0IHdpdGgKKyAgIHRoZSAubmV0cmMvLmF1dGhpbmZvIGZpbGVzIGhhcyBiZWVuIGFkZGVkLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGNhbiBiZSB1c2VkIHdpdGggdGhlIGNyZWRlbnRpYWwgaGVscGVyIHN5c3RlbS4KKworICogVGhlcmUgd2FzIG5vIFBvcmNlbGFpbiB3YXkgdG8gc2F5ICJJIG5vIGxvbmdlciBhbSBpbnRlcmVzdGVkIGluCisgICB0aGlzIHN1Ym1vZHVsZSIsIG9uY2UgeW91IGV4cHJlc3MgeW91ciBpbnRlcmVzdCBpbiBhIHN1Ym1vZHVsZSB3aXRoCisgICAic3VibW9kdWxlIGluaXQiLiAgInN1Ym1vZHVsZSBkZWluaXQiIGlzIHRoZSB3YXkgdG8gZG8gc28uCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgbGVhcm5lZCB0byBwYXNzICItdi8tcSIgb3B0aW9ucyB0byB1bmRlcmx5aW5nCisgICAiZ2l0IHJlYmFzZSIuCisKKyAqIFRoZSBuZXcgIi0tZm9sbG93LXRhZ3MiIG9wdGlvbiB0ZWxscyAiZ2l0IHB1c2giIHRvIHB1c2ggcmVsZXZhbnQKKyAgIGFubm90YXRlZCB0YWdzIHdoZW4gcHVzaGluZyBicmFuY2hlcyBvdXQuCisKKyAqICJnaXQgbWVyZ2UiIGFuZCAiZ2l0IHB1bGwiIGNhbiBvcHRpb25hbGx5IGJlIHRvbGQgdG8gaW5zcGVjdCBhbmQKKyAgIHJlamVjdCB3aGVuIG1lcmdpbmcgYSBjb21taXQgdGhhdCBkb2VzIG5vdCBjYXJyeSBhIHRydXN0ZWQgR1BHCisgICBzaWduYXR1cmUuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBub3cgZmVlZHMgZmlsZXMgdG8gdGhlICJwNG1lcmdlIiBiYWNrZW5kIGluIHRoZQorICAgb3JkZXIgdGhhdCBtYXRjaGVzIHRoZSBwNCBjb252ZW50aW9uLCB3aGVyZSAidGhlaXJzIiBpcyB1c3VhbGx5CisgICBzaG93biBvbiB0aGUgbGVmdCBzaWRlLCB3aGljaCBpcyB0aGUgb3Bwb3NpdGUgZnJvbSB3aGF0IG90aGVyIGJhY2tlbmRzCisgICBleHBlY3QuCisKKyAqICJzaG93L2xvZyIgbm93IGhvbm9ycyBncGcucHJvZ3JhbSBjb25maWd1cmF0aW9uIGp1c3QgbGlrZSBvdGhlcgorICAgcGFydHMgb2YgdGhlIGNvZGUgdGhhdCB1c2UgR251UEcuCisKKyAqICJnaXQgbG9nIiB0aGF0IHNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHBhcmVudCBhbmQgdGhlCisgICBjaGlsZCBoYXMgYmVlbiBvcHRpbWl6ZWQgc29tZXdoYXQuCisKKyAqICJnaXQgZGlmZnRvb2wiIGFsbG93cyB0aGUgdXNlciB0byB3cml0ZSBpbnRvIHRoZSB0ZW1wb3JhcnkgZmlsZXMKKyAgIGJlaW5nIHNob3duOyBpZiB0aGUgdXNlciBtYWtlcyBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nIHRyZWUgYXQgdGhlCisgICBzYW1lIHRpbWUsIGl0IG5vdyByZWZyYWlucyBmcm9tIG92ZXJ3cml0aW5nIHRoZSBjb3B5IGluIHRoZSB3b3JraW5nCisgICB0cmVlIGFuZCBsZWF2ZXMgdGhlIHRlbXBvcmFyeSBmaWxlIHNvIHRoYXQgY2hhbmdlcyBjYW4gYmUgbWVyZ2VkCisgICBtYW51YWxseS4KKworICogVGhlcmUgd2FzIG5vIGdvb2Qgd2F5IHRvIGFzayAiSSBoYXZlIGEgcmFuZG9tIHN0cmluZyB0aGF0IGNhbWUgZnJvbQorICAgb3V0c2lkZSB3b3JsZC4gSSB3YW50IHRvIHR1cm4gaXQgaW50byBhIDQwLWhleCBvYmplY3QgbmFtZSB3aGlsZQorICAgbWFraW5nIHN1cmUgc3VjaCBhbiBvYmplY3QgZXhpc3RzIi4gIEEgbmV3IHBlZWxpbmcgc3VmZml4IF57b2JqZWN0fQorICAgY2FuIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgdG9nZXRoZXIgd2l0aCAicmV2LXBhcnNlIC0tdmVyaWZ5Ii4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogVXBkYXRlcyBmb3IgYnVpbGRpbmcgdW5kZXIgbXN2Yy4KKworICogQSBoYW5kZnVsIG9mIGlzc3VlcyBpbiB0aGUgY29kZSB0aGF0IHRyYXZlcnNlcyB0aGUgd29ya2luZyB0cmVlIHRvIGZpbmQKKyAgIHVudHJhY2tlZCBhbmQvb3IgaWdub3JlZCBmaWxlcyBoYXZlIGJlZW4gZml4ZWQsIGFuZCB0aGUgZ2VuZXJhbAorICAgY29kZXBhdGggaW52b2x2ZWQgaW4gInN0YXR1cyAtdSIgYW5kICJjbGVhbiIgaGF2ZSBiZWVuIGNsZWFuZWQgdXAKKyAgIGFuZCBvcHRpbWl6ZWQuCisKKyAqIFRoZSBzdGFjayBmb290cHJpbnQgb2Ygc29tZSBjb2RlcGF0aHMgdGhhdCBhY2Nlc3MgYW4gb2JqZWN0IGZyb20gYQorICAgcGFjayBoYXMgYmVlbiBzaHJ1bmsuCisKKyAqIFRoZSBsb2dpYyB0byBjb2FsZXNjZSB0aGUgc2FtZSBsaW5lcyByZW1vdmVkIGZyb20gdGhlIHBhcmVudHMgaW4KKyAgIHRoZSBvdXRwdXQgZnJvbSAiZGlmZiAtYy8tLWNjIiBoYXMgYmVlbiB1cGRhdGVkLCBidXQgd2l0aCBPKG5eMikKKyAgIGNvbXBsZXhpdHksIHNvIHRoaXMgbWlnaHQgdHVybiBvdXQgdG8gYmUgdW5kZXNpcmFibGUuCisKKyAqIFRoZSBjb2RlIHRvIGVuZm9yY2UgcGVybWlzc2lvbiBiaXRzIG9uIGZpbGVzIGluICRHSVRfRElSLyBmb3IKKyAgIHNoYXJlZCByZXBvc2l0b3JpZXMgaGFzIGJlZW4gc2ltcGxpZmllZC4KKworICogQSBmZXcgY29kZXBhdGhzIGtub3cgaG93IG11Y2ggZGF0YSB0aGV5IG5lZWQgdG8gcHV0IGluIHRoZQorICAgaGFzaHRhYmxlcyB0aGV5IHVzZSB3aGVuIHRoZXkgc3RhcnQsIGJ1dCBzdGlsbCBiZWdhbiB3aXRoIHNtYWxsIHRhYmxlcworICAgYW5kIHJlcGVhdGVkbHkgZ3JldyBhbmQgcmVoYXNoZWQgdGhlbS4KKworICogVGhlIEFQSSB0byB3YWxrIHJlZmxvZyBlbnRyaWVzIGZyb20gdGhlIGxhdGVzdCB0byBvbGRlciwgd2hpY2ggd2FzCisgICBuZWNlc3NhcnkgZm9yIG9wZXJhdGlvbnMgc3VjaCBhcyAiZ2l0IGNoZWNrb3V0IC0iLCB3YXMgY3VtYmVyc29tZQorICAgdG8gdXNlIGNvcnJlY3RseSBhbmQgYWxzbyBpbmVmZmljaWVudC4KKworICogQ29kZXBhdGhzIHRoYXQgaW5zcGVjdCBsb2ctbWVzc2FnZS10by1iZSBhbmQgZGVjaWRlIHdoZW4gdG8gYWRkIGEKKyAgIG5ldyBTaWduZWQtb2ZmLWJ5IGxpbmUgaW4gdmFyaW91cyBjb21tYW5kcyBoYXZlIGJlZW4gY29uc29saWRhdGVkLgorCisgKiBUaGUgcGt0LWxpbmUgQVBJLCBpbXBsZW1lbnRhdGlvbiBhbmQgaXRzIGNhbGxlcnMgaGF2ZSBiZWVuIGNsZWFuZWQKKyAgIHVwIHRvIG1ha2UgdGhlbSBtb3JlIHJvYnVzdC4KKworICogVGhlIEN5Z3dpbiBwb3J0IGhhcyBhIGZhc3Rlci1idXQtbHlpbmcgbHN0YXQoMikgZW11bGF0aW9uIHdob3NlCisgICBpbmNvcnJlY3RuZXNzIGRvZXMgbm90IG1hdHRlciBpbiBwcmFjdGljZSBleGNlcHQgZm9yIGEgZmV3CisgICBjb2RlcGF0aHMsIGFuZCBzZXR0aW5nIHBlcm1pc3Npb24gYml0cyBvbiBkaXJlY3RvcmllcyBpcyBhIGNvZGVwYXRoCisgICB0aGF0IG5lZWRzIHRvIHVzZSBhIG1vcmUgY29ycmVjdCBvbmUuCisKKyAqICJnaXQgY2hlY2tvdXQiIGhhZCByZXBlYXRlZCBwYXRoc3BlYyBtYXRjaGVzIG9uIHRoZSBzYW1lIHBhdGhzLAorICAgd2hpY2ggaGF2ZSBiZWVuIGNvbnNvbGlkYXRlZC4gIEFsc28gYSBidWcgaW4gImdpdCBjaGVja291dCBkaXIvIgorICAgdGhhdCBpcyBzdGFydGVkIGZyb20gYW4gdW5tZXJnZWQgaW5kZXggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgZmV3IGJ1Z2ZpeGVzIHRvICJnaXQgcmVyZXJlIiB3b3JraW5nIG9uIGNvcm5lciBjYXNlIG1lcmdlCisgICBjb25mbGljdHMgaGF2ZSBiZWVuIGFwcGxpZWQuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuOC4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS44LjIgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiBSZWNlbnQgdmVyc2lvbnMgb2YgRmlsZTo6VGVtcCAodXNlZCBieSAiZ2l0IHN2biIpIHN0YXJ0ZWQgYmxvd2luZworICAgdXAgd2hlbiBpdHMgdGVtcGZpbGUgc3ViIGlzIGNhbGxlZCBhcyBhIGNsYXNzIG1ldGhvZDsgdXBkYXRlZCB0aGUKKyAgIGNhbGxzaXRlIHRvIGNhbGwgaXQgYXMgYSBwbGFpbiB2YW5pbGxhIGZ1bmN0aW9uIHRvIGZpeCBpdC4KKyAgIChtZXJnZSBlYWZjMmRkIGhiL2dpdC1wbS10ZW1wZmlsZSBsYXRlciB0byBtYWludCkuCisKKyAqIFZhcmlvdXMgc3ViY29tbWFuZHMgb2YgImdpdCByZW1vdGUiIHNpbXBseSBpZ25vcmVkIGV4dHJhbmVvdXMKKyAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgaW5zdGVhZCBvZiBkaWFnbm9zaW5nIHRoZW0gYXMgZXJyb3JzLgorCisgKiBXaGVuIHJlY2VpdmUtcGFjayBkZXRlY3RzIGFuIGVycm9yIGluIHRoZSBwYWNrIGhlYWRlciBpdCByZWNlaXZlZCBpbgorICAgb3JkZXIgdG8gZGVjaWRlIHdoaWNoIG9mIHVucGFjay1vYmplY3RzIG9yIGluZGV4LXBhY2sgdG8gcnVuLCBpdAorICAgcmV0dXJuZWQgd2l0aG91dCBjbG9zaW5nIHRoZSBlcnJvciBzdHJlYW0sIHdoaWNoIGxlZCB0byBhIGh1bmcKKyAgIHNpZGViYW5kIHRocmVhZC4KKworICogWnNoIGNvbXBsZXRpb24gZm9yZ290IHRoYXQgdGhlICclJyBjaGFyYWN0ZXIgdXNlZCB0byBzaWduYWwgdW50cmFja2VkCisgICBmaWxlcyBuZWVkcyB0byBiZSBlc2NhcGVkIHdpdGggYW5vdGhlciAnJScuCisKKyAqIEEgY29tbWl0IG9iamVjdCB3aG9zZSBhdXRob3Igb3IgY29tbWl0dGVyIGlkZW50IGFyZSBtYWxmb3JtZWQKKyAgIGNyYXNoZWQgc29tZSBjb2RlIHRoYXQgdHJ1c3RlZCB0aGF0IGEgbmFtZSwgYW4gZW1haWwgYW5kIGEKKyAgIHRpbWVzdGFtcCBjYW4gYWx3YXlzIGJlIGZvdW5kIGluIGl0LgorCisgKiBXaGVuICJ1cGxvYWQtcGFjayIgZmFpbHMgd2hpbGUgZ2VuZXJhdGluZyBhIHBhY2sgaW4gcmVzcG9uc2UgdG8KKyAgICJnaXQgZmV0Y2giIChvciAiZ2l0IGNsb25lIiksIHRoZSByZWNlaXZpbmcgc2lkZSBoYWQKKyAgIGEgcHJvZ3JhbW1pbmcgZXJyb3IgdGhhdCB0cmlnZ2VyZWQgdGhlIGRpZSBoYW5kbGVyCisgICByZWN1cnNpdmVseS4KKworICogInJldi1saXN0IC0tc3RkaW4iIGFuZCBmcmllbmRzIGtlcHQgYm9ndXMgcG9pbnRlcnMgaW50byB0aGUgaW5wdXQKKyAgIGJ1ZmZlciBhcm91bmQgYXMgaHVtYW4gcmVhZGFibGUgb2JqZWN0IG5hbWVzLiAgVGhpcyB3YXMgbm90IGEgaHVnZQorICAgcHJvYmxlbSBidXQgd2FzIGV4cG9zZWQgYnkgYSBuZXcgY2hhbmdlIHRoYXQgdXNlcyB0aGVzZSBuYW1lcyBpbgorICAgZXJyb3Igb3V0cHV0LgorCisgKiBTbWFydC1jYXBhYmxlIEhUVFAgc2VydmVycyB3ZXJlIG5vdCByZXN0cmljdGVkIHZpYSB0aGUKKyAgIEdJVF9OQU1FU1BBQ0UgbWVjaGFuaXNtIHdoZW4gdGFsa2luZyB3aXRoIGNvbW1pdC13YWxraW5nIGNsaWVudHMsCisgICBsaWtlIHRoZXkgYXJlIHdoZW4gdGFsa2luZyB3aXRoIHNtYXJ0IEhUVFAgY2xpZW50cy4KKyAgIChtZXJnZSA2MTMwZjg2IGprL2h0dHAtZHVtYi1uYW1lc3BhY2VzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZS10cmVlIiBkaWQgbm90IG9taXQgYSBtZXJnZSByZXN1bHQgdGhhdCBpcyBpZGVudGljYWwgdG8KKyAgIHRoZSAib3VyIiBzaWRlIGluIGNlcnRhaW4gY2FzZXMuCisgICAobWVyZ2UgYWFjZWNjMyBqay9tZXJnZS10cmVlLWFkZGVkLWlkZW50aWNhbGx5IGxhdGVyIHRvIG1haW50KS4KKworICogUGVybCBzY3JpcHRzIGxpa2UgImdpdC1zdm4iIGNsb3NlZCAoaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byAvZGV2L251bGwpCisgICB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLCB3aGljaCBpcyBub3QgYSB2ZXJ5IHNtYXJ0IHRoaW5nIHRvIGRvLgorICAgQSBsYXRlciBvcGVuIG1heSByZXR1cm4gZmlsZSBkZXNjcmlwdG9yICMyIGZvciBhbiB1bnJlbGF0ZWQgcHVycG9zZSwgYW5kCisgICBlcnJvciByZXBvcnRpbmcgY29kZSBtYXkgd3JpdGUgaW50byBpdC4KKworICogImdpdCBzaG93LWJyYW5jaCIgd2FzIG5vdCBwcmVwYXJlZCB0byBzaG93IGEgdmVyeSBsb25nIHJ1biBvZgorICAgYW5jZXN0b3Igb3BlcmF0b3JzIGUuZy4gZm9vYmFyXjJ+Ml4yXjJeMi4uLl4yfjQgY29ycmVjdGx5LgorCisgKiAiZ2l0IGRpZmYgLS1kaWZmLWFsZ29yaXRobSBhbGdvIiBpcyBhbHNvIHVuZGVyc3Rvb2QgYXMgImdpdCBkaWZmCisgICAtLWRpZmYtYWxnb3JpdGhtPWFsZ28iLgorCisgKiBUaGUgbmV3IGNvcmUuY29tbWVudGNoYXIgY29uZmlndXJhdGlvbiB3YXMgbm90IGFwcGxpZWQgaW4gYSBmZXcKKyAgIHBsYWNlcy4KKworICogImdpdCBidW5kbGUiIGVycm9uZW91c2x5IGJhaWxlZCBvdXQgd2hlbiBwYXJzaW5nIGEgdmFsaWQgYnVuZGxlCisgICBjb250YWluaW5nIGEgcHJlcmVxdWlzaXRlIGNvbW1pdCB3aXRob3V0IGEgY29tbWl0IG1lc3NhZ2UuCisKKyAqICJnaXQgbG9nIC1TLy1HIiBzdGFydGVkIHBheWluZyBhdHRlbnRpb24gdG8gdGV4dGNvbnYgZmlsdGVyLCBidXQKKyAgIHRoZXJlIHdhcyBubyB3YXkgdG8gZGlzYWJsZSB0aGlzLiAgTWFrZSBpdCBob25vciB0aGUgLS1uby10ZXh0Y29udgorICAgb3B0aW9uLgorCisgKiBXaGVuIHVzZWQgd2l0aCB0aGUgIi1kIHRlbXBvcmFyeS1kaXJlY3RvcnkiIG9wdGlvbiwgImdpdCBmaWx0ZXItYnJhbmNoIgorICAgZmFpbGVkIHRvIGNvbWUgYmFjayB0byB0aGUgb3JpZ2luYWwgd29ya2luZyB0cmVlIHRvIHBlcmZvcm0gdGhlCisgICBmaW5hbCBjbGVhbi11cCBwcm9jZWR1cmUuCisKKyAqICJnaXQgbWVyZ2UgJChnaXQgcmV2LXBhcnNlIHYxLjguMikiIGJlaGF2ZWQgcXVpdGUgZGlmZmVyZW50bHkgZnJvbQorICAgImdpdCBtZXJnZSB2MS44LjIiLCBhcyBpZiB2MS44LjIgd2VyZSB3cml0dGVuIGFzIHYxLjguMl4wIGFuZCBkaWQKKyAgIG5vdCBwYXkgbXVjaCBhdHRlbnRpb24gdG8gdGhlIGFubm90YXRlZCB0YWcgcGF5bG9hZC4gIE1ha2UgdGhlIGNvZGUKKyAgIG5vdGljZSB0aGUgdHlwZSBvZiB0aGUgdGFnIG9iamVjdCwgaW4gYWRkaXRpb24gdG8gdGhlIGR3aW1fcmVmKCkKKyAgIGJhc2VkIGNsYXNzaWZpY2F0aW9uIHRoZSBjdXJyZW50IGNvZGUgdXNlcyAoaS5lLiB0aGUgbmFtZSBhcHBlYXJzCisgICBpbiByZWZzL3RhZ3MvKSB0byBkZWNpZGUgd2hlbiB0byBzcGVjaWFsLWNhc2UgdGFnIG1lcmdpbmcuCisKKyAqIEZpeCBhIDEuOC4xLnggcmVncmVzc2lvbiB0aGF0IHN0b3BwZWQgbWF0Y2hpbmcgImRpciIgKHdpdGhvdXQgYQorICAgdHJhaWxpbmcgc2xhc2gpIHRvIGEgZGlyZWN0b3J5ICJkaXIiLgorCisgKiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXgiIHdhcyBub3QgcHJlcGFyZWQgdG8gc2VlIGEgbGluZSBnZXR0aW5nCisgICBsb25nZXIgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2VzIChlLmcuIHRhYi1pbi1pbmRlbnQgYWthIFB5dGhvbikuCisKKyAqIFRoZSBwcm9tcHQgc3RyaW5nIGdlbmVyYXRvciAoaW4gY29udHJpYi9jb21wbGV0aW9uLykgZGlkIG5vdCBub3RpY2UKKyAgIHdoZW4gd2UgYXJlIGluIGEgbWlkZGxlIG9mIGEgImdpdCByZXZlcnQiIHNlc3Npb24uCisKKyAqICJzdWJtb2R1bGUgc3VtbWFyeSAtLXN1bW1hcnktbGltaXQiIG9wdGlvbiBkaWQgbm90IHN1cHBvcnQgdGhlCisgICAiLS1vcHRpb249dmFsdWUiIGZvcm0uCisKKyAqICJpbmRleC1wYWNrIC0tZml4LXRoaW4iIHVzZWQgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSB0byBjb21wdXRlCisgICB0aGUgZGVsdGEgZGVwdGhzIG9mIG9iamVjdHMgaXQgYXBwZW5kcyB0byB0aGUgcmVzdWx0aW5nIHBhY2suCisKKyAqICJpbmRleC1wYWNrIC0tdmVyaWZ5LXN0YXQiIHVzZWQgYSBmZXcgY291bnRlcnMgb3V0c2lkZSB0aGUgcHJvdGVjdGlvbgorICAgb2YgYSBtdXRleCwgcG9zc2libHkgc2hvd2luZyBpbmNvcnJlY3QgbnVtYmVycy4KKworICogVGhlIGNvZGUgdG8ga2VlcCB0cmFjayBvZiB3aGF0IGRpcmVjdG9yeSBuYW1lcyBhcmUga25vd24gdG8gR2l0IG9uCisgICBwbGF0Zm9ybXMgd2l0aCBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zIGNvdWxkIGdldCBjb25mdXNlZCB1cG9uIGEKKyAgIGhhc2ggY29sbGlzaW9uIGJldHdlZW4gdGhlc2UgcGF0aG5hbWVzIGFuZCB3b3VsZCBsb29wIGZvcmV2ZXIuCisKKyAqIEFubm90YXRlZCB0YWdzIG91dHNpZGUgdGhlIHJlZnMvdGFncy8gaGllcmFyY2h5IHdlcmUgbm90IGFkdmVydGlzZWQKKyAgIGNvcnJlY3RseSB0byBscy1yZW1vdGUgYW5kIGZldGNoIHdpdGggcmVjZW50IHZlcnNpb25zIG9mIEdpdC4KKworICogUmVjZW50IG9wdGltaXphdGlvbnMgYnJva2Ugc2hhbGxvdyBjbG9uZXMuCisKKyAqICJnaXQgY21kIC0tICc6KHRvcCciIHdhcyBub3QgZGlhZ25vc2VkIGFzIGFuIGludmFsaWQgc3ludGF4LCBhbmQKKyAgIGluc3RlYWQgdGhlIHBhcnNlciBrZXB0IHJlYWRpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKworICogImdpdCB0YWcgLWYgPHRhZz4iIGFsd2F5cyBzYWlkICJVcGRhdGVkIHRhZyAnPHRhZz4nIiBldmVuIHdoZW4KKyAgIGNyZWF0aW5nIGEgbmV3IHRhZyAoaS5lLiBuZWl0aGVyIG92ZXJ3cml0aW5nIG5vciB1cGRhdGluZykuCisKKyAqICJnaXQgcDQiIGRpZCBub3QgYmVoYXZlIHdlbGwgd2hlbiB0aGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgUDQKKyAgIGNsaWVudCB3YXMgbm90IGl0cyByZWFsIHBhdGguCisgICAobWVyZ2UgYmJkODQ4NiBwdy9wNC1zeW1saW5rZWQtcm9vdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXJjaGl2ZSIgcmVwb3J0ZWQgYSBmYWlsdXJlIHdoZW4gYXNrZWQgdG8gY3JlYXRlIGFuIGFyY2hpdmUgb3V0CisgICBvZiBhbiBlbXB0eSB0cmVlLiAgSXQgaXMgbW9yZSBpbnR1aXRpdmUgdG8gZ2l2ZSBhbiBlbXB0eQorICAgYXJjaGl2ZSBiYWNrIGluIHN1Y2ggYSBjYXNlLgorCisgKiBXaGVuICJmb3JtYXQtcGF0Y2giIHF1b3RlZCBhIG5vbi1hc2NpaSBzdHJpbmcgaW4gaGVhZGVyIGZpbGVzLAorICAgaXQgaW5jb3JyZWN0bHkgYXBwbGllZCByZmMyMDQ3IGFuZCBjaG9wcGVkIGEgc2luZ2xlIGNoYXJhY3RlciBpbgorICAgdGhlIG1pZGRsZSBvZiB0aGUgc3RyaW5nLgorCisgKiBBbiBhbGlhc2VkIGNvbW1hbmQgc3Bhd25lZCBmcm9tIGEgYmFyZSByZXBvc2l0b3J5IHRoYXQgZG9lcyBub3Qgc2F5CisgICBpdCBpcyBiYXJlIHdpdGggImNvcmUuYmFyZSA9IHllcyIgd2FzIHRyZWF0ZWQgYXMgbm9uLWJhcmUgYnkgbWlzdGFrZS4KKworICogSW4gImdpdCByZWZsb2cgZXhwaXJlIiwgdGhlIFJFQUNIQUJMRSBiaXQgd2FzIG5vdCBjbGVhcmVkIGZyb20gdGhlCisgICBjb3JyZWN0IG9iamVjdHMuCisKKyAqIFRoZSBsb2dpYyB1c2VkIGJ5ICJnaXQgZGlmZiAtTSAtLXN0YXQiIHRvIHNob3J0ZW4gdGhlIG5hbWVzIG9mCisgICBmaWxlcyBiZWZvcmUgYW5kIGFmdGVyIGEgcmVuYW1lIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUKKyAgIGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCBiZXR3ZWVuIHRoZSB0d28gZmlsZW5hbWVzIG92ZXJsYXBwZWQuCisKKyAqIFRoZSAiLS1tYXRjaD08cGF0dGVybj4iIG9wdGlvbiBvZiAiZ2l0IGRlc2NyaWJlIiwgd2hlbiB1c2VkIHdpdGgKKyAgICItLWFsbCIgdG8gYWxsb3cgcmVmcyB0aGF0IGFyZSBub3QgYW5ub3RhdGVkIHRhZ3MgdG8gYmUgYQorICAgYmFzZSBvZiBkZXNjcmlwdGlvbiwgZGlkIG5vdCByZXN0cmljdCB0aGUgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQKKyAgIHRvIHRob3NlIHJlZnMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybi4KKworICogQ2xhcmlmeSBpbiB0aGUgZG9jdW1lbnRhdGlvbiAid2hhdCIgZ2V0cyBwdXNoZWQgdG8gIndoZXJlIiB3aGVuIHRoZQorICAgY29tbWFuZCBsaW5lIHRvICJnaXQgcHVzaCIgZG9lcyBub3Qgc2F5IHRoZXNlIGV4cGxpY2l0bHkuCisKKyAqIFRoZSAiLS1jb2xvcj08d2hlbj4iIGFyZ3VtZW50IHRvIHRoZSBjb21tYW5kcyBpbiB0aGUgZGlmZiBmYW1pbHkKKyAgIHdhcyBkZXNjcmliZWQgcG9vcmx5LgorCisgKiBUaGUgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBwcmUtcmViYXNlIGhvb2sgd2VyZSBub3QgZG9jdW1lbnRlZC4KKworICogVGhlIHY0IGluZGV4IGZvcm1hdCB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAqIFRoZSAiLS1tYXRjaD08cGF0dGVybj4iIGFyZ3VtZW50ICJnaXQgZGVzY3JpYmUiIHRha2VzIHVzZXMgZ2xvYgorICAgcGF0dGVybiBidXQgaXQgd2Fzbid0IG9idmlvdXMgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogU29tZSBzb3VyY2VzIGZhaWxlZCB0byBjb21waWxlIG9uIHN5c3RlbXMgdGhhdCBsYWNrIE5JX01BWEhPU1QgaW4KKyAgIHRoZWlyIHN5c3RlbSBoZWFkZXIgKGUuZy4gei9PUykuCisKKyAqIEFkZCBhbiBleGFtcGxlIHVzZSBvZiAiLS1lbnYtZmlsdGVyIiBpbiAiZmlsdGVyLWJyYW5jaCIKKyAgIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQgYnVuZGxlIHZlcmlmeSIgZGlkIG5vdCBzYXkgInJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5IiBmb3IgYQorICAgYnVuZGxlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgcHJlcmVxdWlzaXRlcy4KKworICogSW4gdGhlIHYxLjguMCBlcmEsIHdlIGNoYW5nZWQgc3ltYm9scyB0aGF0IGRvIG5vdCBoYXZlIHRvIGJlIGdsb2JhbAorICAgdG8gZmlsZSBzY29wZSBzdGF0aWMsIGJ1dCBhIGZldyBmdW5jdGlvbnMgaW4gZ3JhcGguYyB3ZXJlIHVzZWQgYnkKKyAgIENHaXQgc2lkZXdheXMsIGJ5cGFzc2luZyB0aGUgZW50cnkgcG9pbnRzIG9mIHRoZSBBUEkgdGhlCisgICBpbi10cmVlIHVzZXJzIHVzZS4KKworICogImdpdCB1cGRhdGUtaW5kZXggLWgiIGRpZCBub3QgZG8gdGhlIHVzdWFsICItaChlbHApIiB0aGluZy4KKworICogImdpdCBpbmRleC1wYWNrIiBoYWQgYSBidWZmZXItb3ZlcmZsb3cgd2hpbGUgcHJlcGFyaW5nIGFuCisgICBpbmZvcm1hdGlvbmFsIG1lc3NhZ2Ugd2hlbiB0aGUgdHJhbnNsYXRlZCB2ZXJzaW9uIG9mIGl0IHdhcyB0b28KKyAgIGxvbmcuCisKKyAqICdnaXQgY29tbWl0IC1tICIkbXNnIicgdXNlZCB0byBhZGQgYW4gZXh0cmEgbmV3bGluZSBldmVuIHdoZW4KKyAgICRtc2cgYWxyZWFkeSBlbmRlZCB3aXRoIG9uZS4KKworICogVGhlIFNTTCBwZWVyIHZlcmlmaWNhdGlvbiBkb25lIGJ5ICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IGFzayBmb3IKKyAgIFNlcnZlciBOYW1lIEluZGljYXRpb24gKFJGQyA0MzY2KSwgZmFpbGluZyB0byBjb25uZWN0IHRvIFNTTC9UTFMKKyAgIHNpdGVzIHRoYXQgc2VydmUgbXVsdGlwbGUgaG9zdG5hbWVzIG9uIGEgc2luZ2xlIElQLgorCisgKiBwZXJsL0dpdC5wbTo6Y2F0X2Jsb2Igc2x1cnBlZCBldmVyeXRoaW5nIGluIGNvcmUgb25seSB0byB3cml0ZSBpdAorICAgb3V0IHRvIGEgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCB3YXMgbm90IGEgdmVyeSBzbWFydCB0aGluZyB0byBkby4KKworICogImdpdCBicmFuY2giIGRpZCBub3QgYm90aGVyIHRvIGNoZWNrIG5vbnNlbnNlIGNvbW1hbmQgbGluZQorICAgcGFyYW1ldGVycy4gIEl0IG5vdyBpc3N1ZXMgZXJyb3JzIGluIG1hbnkgY2FzZXMuCisKKyAqIFZlcmlmaWNhdGlvbiBvZiBzaWduZWQgdGFncyB3YXMgbm90IGRvbmUgY29ycmVjdGx5IHdoZW4gbm90IGluIEMKKyAgIG9yIGVuL1VTIGxvY2FsZS4KKworICogU29tZSBwbGF0Zm9ybXMgYW5kIHVzZXJzIHNwZWxsIFVURi04IGRpZmZlcmVudGx5OyByZXRyeSB3aXRoIHRoZQorICAgbW9zdCBvZmZpY2lhbCAiVVRGLTgiIHdoZW4gdGhlIHN5c3RlbSBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZQorICAgdXNlci1zdXBwbGllZCBlbmNvZGluZyBuYW1lIHRoYXQgaXMgYSBjb21tb24gYWx0ZXJuYXRpdmUKKyAgIHNwZWxsaW5nIG9mIFVURi04LgorCisgKiBXaGVuIGV4cG9ydC1zdWJzdCBpcyB1c2VkLCAiemlwIiBvdXRwdXQgcmVjb3JkZWQgYW4gaW5jb3JyZWN0CisgICBzaXplIG9mIHRoZSBmaWxlLgorCisgKiAiZ2l0IGFtICRtYWlsZGlyLyIgYXBwbGllZCBtZXNzYWdlcyBpbiBhbiB1bmV4cGVjdGVkIG9yZGVyOyBzb3J0CisgICBmaWxlbmFtZXMgcmVhZCBmcm9tIHRoZSBtYWlsZGlyLyBpbiBhIHdheSB0aGF0IGlzIG1vcmUgbGlrZWx5IHRvCisgICBzb3J0IHRoZSBtZXNzYWdlcyBpbiB0aGUgb3JkZXIgdGhlIHdyaXRpbmcgTVVBIG1lYW50IHRvLCBieSBzb3J0aW5nCisgICBudW1lcmljIHNlZ21lbnRzIGluIG51bWVyaWMgb3JkZXIgYW5kIG5vbi1udW1lcmljIHNlZ21lbnRzIGluCisgICBhbHBoYWJldGljYWwgb3JkZXIuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIsIHdoZW4gcmVjdXJzZWQgaW50byBzdWItc3VibW9kdWxlcywgZGlkIG5vdAorICAgYWNjdW11bGF0ZSB0aGUgcHJlZml4IHBhdGhzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1N2JlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMS50eHQKQEAgLTAsMCArMSw3MSBAQAorR2l0IHYxLjguNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFNvbWUgb2xkIHZlcnNpb25zIG9mIGJhc2ggZG8gbm90IGdyb2sgc29tZSBjb25zdHJ1Y3RzIGxpa2UKKyAgICdwcmludGYgLXYgdmFybmFtZScgd2hpY2ggdGhlIHByb21wdCBhbmQgY29tcGxldGlvbiBjb2RlIHN0YXJ0ZWQKKyAgIHRvIHVzZSByZWNlbnRseS4gIFRoZSBjb21wbGV0aW9uIGFuZCBwcm9tcHQgc2NyaXB0cyBoYXZlIGJlZW4KKyAgIGFkanVzdGVkIHRvIHdvcmsgYmV0dGVyIHdpdGggdGhlc2Ugb2xkIHZlcnNpb25zIG9mIGJhc2guCisKKyAqIEluIEZyZWVCU0QncyBhbmQgTmV0QlNEJ3MgInNoIiwgYSByZXR1cm4gaW4gYSBkb3Qgc2NyaXB0IGluIGEKKyAgIGZ1bmN0aW9uIHJldHVybnMgZnJvbSB0aGUgZnVuY3Rpb24sIG5vdCBvbmx5IGluIHRoZSBkb3Qgc2NyaXB0LAorICAgYnJlYWtpbmcgImdpdCByZWJhc2UiIG9uIHRoZXNlIHBsYXRmb3JtcyAocmVncmVzc2lvbiBpbnRyb2R1Y2VkCisgICBpbiAxLjguNC1yYzEpLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgYW5kIG90aGVyIHNjcmlwdGVkIGNvbW1hbmRzIHdlcmUgZmVlZGluZyBhCisgICByYW5kb20sIGRhdGEgZGVwZW5kZW50IGVycm9yIG1lc3NhZ2UgdG8gJ2VjaG8nIGFuZCBleHBlY3RpbmcgaXQKKyAgIHRvIGNvbWUgb3V0IGxpdGVyYWxseS4KKworICogU2V0dGluZyB0aGUgInN1Ym1vZHVsZS48bmFtZT4ucGF0aCIgdmFyaWFibGUgdG8gdGhlIGVtcHR5CisgICAidHJ1ZSIgY2F1c2VkIHRoZSBjb25maWd1cmF0aW9uIHBhcnNlciB0byBzZWdmYXVsdC4KKworICogT3V0cHV0IGZyb20gImdpdCBsb2cgLS1mdWxsLWRpZmYgLS0gPHBhdGhzcGVjPiIgbG9va2VkIHN0cmFuZ2UKKyAgIGJlY2F1c2UgY29tcGFyaXNvbiB3YXMgZG9uZSB3aXRoIHRoZSBwcmV2aW91cyBhbmNlc3RvciB0aGF0CisgICB0b3VjaGVkIHRoZSBzcGVjaWZpZWQgPHBhdGhzcGVjPiwgY2F1c2luZyB0aGUgcGF0Y2hlcyBmb3IgcGF0aHMKKyAgIG91dHNpZGUgdGhlIHBhdGhzcGVjIHRvIHNob3cgbW9yZSB0aGFuIHRoZSBzaW5nbGUgY29tbWl0IGhhcworICAgY2hhbmdlZC4KKworICogVGhlIGF1dG8tdGFnLWZvbGxvd2luZyBjb2RlIGluICJnaXQgZmV0Y2giIHRyaWVzIHRvIHJldXNlIHRoZQorICAgc2FtZSB0cmFuc3BvcnQgdHdpY2Ugd2hlbiB0aGUgc2VydmluZyBlbmQgZG9lcyBub3QgY29vcGVyYXRlIGFuZAorICAgZG9lcyBub3QgZ2l2ZSB0YWdzIHRoYXQgcG9pbnQgdG8gY29tbWl0cyB0aGF0IGFyZSBhc2tlZCBmb3IgYXMKKyAgIHBhcnQgb2YgdGhlIHByaW1hcnkgdHJhbnNmZXIuICBVbmZvcnR1bmF0ZWx5LCBHaXQtYXdhcmUgdHJhbnNwb3J0CisgICBoZWxwZXIgaW50ZXJmYWNlIGlzIG5vdCBkZXNpZ25lZCB0byBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlLCBoZW5jZQorICAgdGhpcyBkaWQgbm90IHdvcmsgb3ZlciBzbWFydC1odHRwIHRyYW5zZmVyLiAgRml4ZWQuCisKKyAqIFNlbmQgYSBsYXJnZSByZXF1ZXN0IHRvIHJlYWQoMikvd3JpdGUoMikgYXMgYSBzbWFsbGVyIGJ1dCBzdGlsbAorICAgcmVhc29uYWJseSBsYXJnZSBjaHVua3MsIHdoaWNoIHdvdWxkIGltcHJvdmUgdGhlIGxhdGVuY3kgd2hlbiB0aGUKKyAgIG9wZXJhdGlvbiBuZWVkcyB0byBiZSBraWxsZWQgYW5kIGluY2lkZW50YWxseSB3b3JrcyBhcm91bmQgYnJva2VuCisgICA2NC1iaXQgc3lzdGVtcyB0aGF0IGNhbm5vdCB0YWtlIGEgMkdCIHdyaXRlIG9yIHJlYWQgaW4gb25lIGdvLgorCisgKiBBICIubWFpbG1hcCIgZmlsZSB0aGF0IGVuZHMgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUsIHdoZW4gcmVhZAorICAgZnJvbSBhIGJsb2IsIHdhcyBub3QgaGFuZGxlZCBwcm9wZXJseS4KKworICogVGhlIHJlY2VudCAic2hvcnQtY3V0IGNsb25lIGNvbm5lY3Rpdml0eSBjaGVjayIgdG9waWMgYnJva2UgYQorICAgc2hhbGxvdyByZXBvc2l0b3J5IHdoZW4gYSBmZXRjaCBvcGVyYXRpb24gdHJpZXMgdG8gYXV0by1mb2xsb3cKKyAgIHRhZ3MuCisKKyAqIFdoZW4gc2VuZC1lbWFpbCBjb21lcyB1cCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgdG8gZGllIHdpdGggdXBvbgorICAgZmFpbHVyZSB0byBzdGFydCBhbiBTU0wgc2Vzc2lvbiwgaXQgdHJpZWQgdG8gcmVhZCB0aGUgZXJyb3IKKyAgIHN0cmluZyBmcm9tIGEgd3JvbmcgcGxhY2UuCisKKyAqIEEgY2FsbCB0byB4cmVhZCgpIHdhcyB1c2VkIHdpdGhvdXQgYSBsb29wIHRvIGNvcGUgd2l0aCBzaG9ydAorICAgcmVhZCBpbiB0aGUgY29kZXBhdGggdG8gc3RyZWFtIGxhcmdlIGJsb2JzIHRvIGEgcGFjay4KKworICogT24gcGxhdGZvcm1zIHdpdGggZmdldGMoKSBhbmQgZnJpZW5kcyBkZWZpbmVkIGFzIG1hY3JvcywgdGhlCisgICBjb25maWd1cmF0aW9uIHBhcnNlciBkaWQgbm90IGNvbXBpbGUuCisKKyAqIE5ldyB2ZXJzaW9ucyBvZiBNZWRpYVdpa2kgaW50cm9kdWNlZCBhIG5ldyBBUEkgZm9yIHJldHVybmluZworICAgbW9yZSB0aGFuIDUwMCByZXN1bHRzIGluIHJlc3BvbnNlIHRvIGEgcXVlcnksIHdoaWNoIHdvdWxkIGNhdXNlCisgICB0aGUgTWVkaWFXaWtpIHJlbW90ZSBoZWxwZXIgdG8gZ28gaW50byBhbiBpbmZpbml0ZSBsb29wLgorCisgKiBTdWJ2ZXJzaW9uJ3Mgc2VyZiBhY2Nlc3MgbWV0aG9kICh0aGUgb25seSBvbmUgYXZhaWxhYmxlIGluCisgICBTdWJ2ZXJzaW9uIDEuOCkgZm9yIGh0dHAgYW5kIGh0dHBzIFVSTHMgaW4gc2tlbHRhIG1vZGUgdGVsbHMgaXRzCisgICBjYWxsZXIgdG8gb3BlbiBtdWx0aXBsZSBmaWxlcyBhdCBhIHRpbWUsIHdoaWNoIG1hZGUgImdpdCBzdm4KKyAgIGZldGNoIiBjb21wbGFpbiB0aGF0ICJUZW1wIGZpbGUgd2l0aCBtb25pa2VyICdzdm5fZGVsdGEnIGFscmVhZHkKKyAgIGluIHVzZSIgaW5zdGVhZCBvZiBmZXRjaGluZy4KKworCitBbHNvIGNvbnRhaW5zIGEgaGFuZGZ1bCBvZiB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLCBkb2N1bWVudGF0aW9uCit1cGRhdGVzLCB1cGRhdGVzIHRvIHRoZSB0ZXN0IHN1aXRlLCBldGMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjZmYjFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4yLnR4dApAQCAtMCwwICsxLDc3IEBACitHaXQgdjEuOC40LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC40LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY2xvbmUiIGdhdmUgc29tZSBwcm9ncmVzcyBtZXNzYWdlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LCBub3QKKyAgIHRvIHRoZSBzdGFuZGFyZCBlcnJvciwgYW5kIGRpZCBub3QgYWxsb3cgc3VwcHJlc3NpbmcgdGhlbSB3aXRoIHRoZQorICAgIi0tbm8tcHJvZ3Jlc3MiIG9wdGlvbi4KKworICogImZvcm1hdC1wYXRjaCAtLWZyb209PHdob20+IiBmb3Jnb3QgdG8gb21pdCB1bm5lY2Vzc2FyeSBpbi1ib2R5CisgICBmcm9tIGxpbmUsIGkuZS4gd2hlbiA8d2hvbT4gaXMgdGhlIHNhbWUgYXMgdGhlIHJlYWwgYXV0aG9yLgorCisgKiAiZ2l0IHNob3J0bG9nIiB1c2VkIHRvIGNob2tlIGFuZCBkaWUgd2hlbiB0aGVyZSBpcyBhIG1hbGZvcm1lZAorICAgY29tbWl0IChlLmcuIG1pc3NpbmcgYXV0aG9ycyk7IGl0IG5vdyBzaW1wbHkgaWdub3JlIHN1Y2ggYSBjb21taXQKKyAgIGFuZCBrZWVwcyBnb2luZy4KKworICogImdpdCBtZXJnZS1yZWN1cnNpdmUiIGRpZCBub3QgcGFyc2UgaXRzICItLWRpZmYtYWxnb3JpdGhtPSIgY29tbWFuZAorICAgbGluZSBvcHRpb24gY29ycmVjdGx5LgorCisgKiAiZ2l0IGJyYW5jaCAtLXRyYWNrIiBoYWQgYSBtaW5vciByZWdyZXNzaW9uIGluIHYxLjguMy4yIGFuZCBsYXRlcgorICAgdGhhdCBtYWRlIGl0IGltcG9zc2libGUgdG8gYmFzZSB5b3VyIGxvY2FsIHdvcmsgb24gYW55dGhpbmcgYnV0IGEKKyAgIGxvY2FsIGJyYW5jaCBvZiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSB5b3UgYXJlIHRyYWNraW5nIGZyb20uCisKKyAqICJnaXQgbHMtZmlsZXMgLWsiIG5lZWRzIHRvIGNyYXdsIG9ubHkgdGhlIHBhcnQgb2YgdGhlIHdvcmtpbmcgdHJlZQorICAgdGhhdCBtYXkgb3ZlcmxhcCB0aGUgcGF0aHMgaW4gdGhlIGluZGV4IHRvIGZpbmQga2lsbGVkIGZpbGVzLCBidXQKKyAgIHNoYXJlZCBjb2RlIHdpdGggdGhlIGxvZ2ljIHRvIGZpbmQgYWxsIHRoZSB1bnRyYWNrZWQgZmlsZXMsIHdoaWNoCisgICBtYWRlIGl0IHVubmVjZXNzYXJpbHkgaW5lZmZpY2llbnQuCisKKyAqIFdoZW4gdGhlcmUgaXMgbm8gc3VmZmljaWVudCBvdmVybGFwIGJldHdlZW4gb2xkIGFuZCBuZXcgaGlzdG9yeQorICAgZHVyaW5nIGEgImdpdCBmZXRjaCIgaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSwgb2JqZWN0cyB0aGF0IHRoZQorICAgc2VuZGluZyBzaWRlIGtub3dzIHRoZSByZWNlaXZpbmcgZW5kIGhhcyB3ZXJlIHVubmVjZXNzYXJpbHkgc2VudC4KKworICogV2hlbiBydW5uaW5nICJmZXRjaCAtcSIsIGEgbG9uZyBzaWxlbmNlIHdoaWxlIHRoZSBzZW5kZXIgc2lkZQorICAgY29tcHV0ZXMgdGhlIHNldCBvZiBvYmplY3RzIHRvIHNlbmQgY2FuIGJlIG1pc3Rha2VuIGJ5IHByb3hpZXMgYXMKKyAgIGRyb3BwZWQgY29ubmVjdGlvbi4gIFRoZSBzZXJ2ZXIgc2lkZSBoYXMgYmVlbiB0YXVnaHQgdG8gc2VuZCBhCisgICBzbWFsbCBlbXB0eSBtZXNzYWdlcyB0byBrZWVwIHRoZSBjb25uZWN0aW9uIGFsaXZlLgorCisgKiBXaGVuIHRoZSB3ZWJzZXJ2ZXIgcmVzcG9uZHMgd2l0aCAiNDA1IE1ldGhvZCBOb3QgQWxsb3dlZCIsICJnaXQKKyAgIGh0dHAtYmFja2VuZCIgc2hvdWxkIHRlbGwgdGhlIGNsaWVudCB3aGF0IG1ldGhvZHMgYXJlIGFsbG93ZWQgd2l0aAorICAgdGhlICJBbGxvdyIgaGVhZGVyLgorCisgKiAiZ2l0IGN2c3NlcnZlciIgY29tcHV0ZWQgdGhlIHBlcm1pc3Npb24gbW9kZSBiaXRzIGluY29ycmVjdGx5IGZvcgorICAgZXhlY3V0YWJsZSBmaWxlcy4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mICJhZGQgLWkiIGhhcyBhIGNyaXBwbGluZyBjb2RlIHRvIHdvcmsgYXJvdW5kCisgICBBY3RpdmVTdGF0ZSBQZXJsIGxpbWl0YXRpb24gYnV0IGl0IGJ5IG1pc3Rha2UgYWxzbyB0cmlnZ2VyZWQgb24gR2l0CisgICBmb3IgV2luZG93cyB3aGVyZSBNU1lTIHBlcmwgaXMgdXNlZC4KKworICogV2UgbWFkZSBzdXJlIHRoYXQgd2Ugbm90aWNlIHRoZSB1c2VyLXN1cHBsaWVkIEdJVF9ESVIgaXMgYWN0dWFsbHkgYQorICAgZ2l0ZmlsZSwgYnV0IGRpZCBub3QgZG8gdGhlIHNhbWUgd2hlbiB0aGUgZGVmYXVsdCAiLmdpdCIgaXMgYQorICAgZ2l0ZmlsZS4KKworICogV2hlbiBhbiBvYmplY3QgaXMgbm90IGZvdW5kIGFmdGVyIGNoZWNraW5nIHRoZSBwYWNrZmlsZXMgYW5kIHRoZW4KKyAgIGxvb3NlIG9iamVjdCBkaXJlY3RvcnksIHJlYWRfc2hhMV9maWxlKCkgcmUtY2hlY2tzIHRoZSBwYWNrZmlsZXMgdG8KKyAgIHByZXZlbnQgcmFjaW5nIHdpdGggYSBjb25jdXJyZW50IHJlcGFja2VyOyB0ZWFjaCB0aGUgc2FtZSBsb2dpYyB0bworICAgaGFzX3NoYTFfZmlsZSgpLgorCisgKiAiZ2l0IGNvbW1pdCAtLWF1dGhvcj0kbmFtZSIsIHdoZW4gJG5hbWUgaXMgbm90IGluIHRoZSBjYW5vbmljYWwKKyAgICJBLiBVLiBUaG9yIDxhdS50aG9yQGV4YW1wbGUueHo+IiBmb3JtYXQsIGxvb2tzIGZvciBhIG1hdGNoaW5nIG5hbWUKKyAgIGZyb20gZXhpc3RpbmcgaGlzdG9yeSwgYnV0IGRpZCBub3QgY29uc3VsdCBtYWlsbWFwIHRvIGdyYWIgdGhlCisgICBwcmVmZXJyZWQgYXV0aG9yIG5hbWUuCisKKyAqIFRoZSBjb21taXQgb2JqZWN0IG5hbWVzIGluIHRoZSBpbnNuIHNoZWV0IHRoYXQgd2FzIHByZXBhcmVkIGF0IHRoZQorICAgYmVnaW5uaW5nIG9mICJyZWJhc2UgLWkiIHNlc3Npb24gY2FuIGJlY29tZSBhbWJpZ3VvdXMgYXMgdGhlCisgICByZWJhc2luZyBwcm9ncmVzc2VzIGFuZCB0aGUgcmVwb3NpdG9yeSBnYWlucyBtb3JlIGNvbW1pdHMuIE1ha2UKKyAgIHN1cmUgdGhlIGludGVybmFsIHJlY29yZCBpcyBrZXB0IHdpdGggZnVsbCA0MC1oZXggb2JqZWN0IG5hbWVzLgorCisgKiAiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyIgaW50ZXJuYWxseSB1c2VkIHRoZSBtZXJnZSBtYWNoaW5lcnkKKyAgIGFuZCBhcyBhIHNpZGUgZWZmZWN0LCBsZWZ0IG1lcmdlIHN1bW1hcnkgbWVzc2FnZSBpbiB0aGUgbG9nLCBidXQKKyAgIHdoZW4gcmViYXNpbmcsIHRoZXJlIHNob3VsZCBub3QgYmUgYSBuZWVkIGZvciBtZXJnZSBzdW1tYXJ5LgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgZm9yZ290IHRoYXQgdGhlIGNvbW1lbnQgY2hhcmFjdGVyIGNhbiBiZQorICAgY29uZmlndXJhYmxlIHdoaWxlIHJlYWRpbmcgaXRzIGluc24gc2hlZXQuCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIHRyaXZpYWwgY29kZSBjbGVhbi11cHMsIGRvY3VtZW50YXRpb24KK3VwZGF0ZXMsIHVwZGF0ZXMgdG8gdGhlIHRlc3Qgc3VpdGUsIGV0Yy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2ExYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjMudHh0CkBAIC0wLDAgKzEsNTQgQEAKK0dpdCB2MS44LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdXNlIG9mIFBlcmwgaW4gb3VyIHRlc3Qgc3VpdGUgYW5kIE5PX1BFUkwKKyAgIGhhcyBiZWVuIGNsYXJpZmllZCBhIGJpdC4KKworICogQSBmYXN0LWltcG9ydCBzdHJlYW0gZXhwcmVzc2VzIGEgcGF0aG5hbWUgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzIGJ5CisgICBxdW90aW5nIHRoZW0gaW4gQyBzdHlsZTsgcmVtb3RlLWhnIHJlbW90ZSBoZWxwZXIgKGluIGNvbnRyaWIvKQorICAgZm9yZ290IHRvIHVucXVvdGUgc3VjaCBhIHBhdGguCisKKyAqIE9uZSBsb25nLXN0YW5kaW5nIGZsYXcgaW4gdGhlIHBhY2sgdHJhbnNmZXIgcHJvdG9jb2wgdXNlZCBieSAiZ2l0CisgICBjbG9uZSIgd2FzIHRoYXQgdGhlcmUgd2FzIG5vIHdheSB0byB0ZWxsIHRoZSBvdGhlciBlbmQgd2hpY2ggYnJhbmNoCisgICAiSEVBRCIgcG9pbnRzIGF0LCBhbmQgdGhlIHJlY2VpdmluZyBlbmQgbmVlZGVkIHRvIGd1ZXNzLiAgQSBuZXcKKyAgIGNhcGFiaWxpdHkgaGFzIGJlZW4gZGVmaW5lZCBpbiB0aGUgcGFjayBwcm90b2NvbCB0byBjb252ZXkgdGhpcworICAgaW5mb3JtYXRpb24gc28gdGhhdCBjbG9uaW5nIGZyb20gYSByZXBvc2l0b3J5IHdpdGggbW9yZSB0aGFuIG9uZQorICAgYnJhbmNoZXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY29tbWl0IHdoZXJlIHRoZSBIRUFEIGlzIGF0IG5vdworICAgcmVsaWFibHkgc2V0cyB0aGUgaW5pdGlhbCBicmFuY2ggaW4gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5LgorCisgKiBXZSBkaWQgbm90IGhhbmRsZSBjYXNlcyB3aGVyZSBodHRwIHRyYW5zcG9ydCBnZXRzIHJlZGlyZWN0ZWQgZHVyaW5nCisgICB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IChlLmcuIGZyb20gaHR0cDovLyB0byBodHRwczovLykuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIF52MS4wXiB2MS4wIiBnYXZlIHYxLjAgdGFnIGl0c2VsZiBpbiB0aGUKKyAgIG91dHB1dCwgYnV0ICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIHYxLjBeLi52MS4wIiBkaWQgbm90LgorCisgKiBUaGUgZmFsbC1iYWNrIHBhcnNpbmcgb2YgY29tbWl0IG9iamVjdHMgd2l0aCBicm9rZW4gYXV0aG9yIG9yCisgICBjb21taXR0ZXIgbGluZXMgd2VyZSBsZXNzIHJvYnVzdCB0aGFuIGlkZWFsIGluIHBpY2tpbmcgdXAgdGhlCisgICB0aW1lc3RhbXBzLgorCisgKiBCYXNoIHByb21wdGluZyBjb2RlIHRvIGRlYWwgd2l0aCBhbiBTVk4gcmVtb3RlIGFzIGFuIHVwc3RyZWFtCisgICB3ZXJlIGNvZGVkIGluIGEgd2F5IG5vdCBzdXBwb3J0ZWQgYnkgb2xkZXIgQmFzaCB2ZXJzaW9ucyAoMy54KS4KKworICogImdpdCBjaGVja291dCB0b3BpYyIsIHdoZW4gdGhlcmUgaXMgbm90IHlldCBhIGxvY2FsICJ0b3BpYyIgYnJhbmNoCisgICBidXQgdGhlcmUgaXMgYSB1bmlxdWUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgYSByZW1vdGUgInRvcGljIgorICAgYnJhbmNoLCBwcmV0ZW5kZWQgYXMgaWYgImdpdCBjaGVja291dCAtdCAtYiB0b3BpYyByZW1vdGUvJHIvdG9waWMiCisgICAoZm9yIHRoYXQgdW5pcXVlIHJlbW90ZSAkcikgd2FzIHJ1bi4gVGhpcyBoYWNrIGhvd2V2ZXIgd2FzIG5vdAorICAgaW1wbGVtZW50ZWQgZm9yICJnaXQgY2hlY2tvdXQgdG9waWMgLS0iLgorCisgKiBDb2xvcmluZyBhcm91bmQgb2N0b3B1cyBtZXJnZXMgaW4gImxvZyAtLWdyYXBoIiBvdXRwdXQgd2FzIHNjcmV3eS4KKworICogV2UgZGlkIG5vdCBnZW5lcmF0ZSBIVE1MIHZlcnNpb24gb2YgZG9jdW1lbnRhdGlvbiB0byAiZ2l0IHN1YnRyZWUiCisgICBpbiBjb250cmliLy4KKworICogVGhlIHN5bm9wc2lzIHNlY3Rpb24gb2YgImdpdCB1bnBhY2stb2JqZWN0cyIgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbgorICAgY2xhcmlmaWVkIGEgYml0LgorCisgKiBBbiBhbmNpZW50IEhvdy1UbyBvbiBzZXJ2aW5nIEdpdCByZXBvc2l0b3JpZXMgb24gYW4gSFRUUCBzZXJ2ZXIKKyAgIGxhY2tlZCBhIHdhcm5pbmcgdGhhdCBpdCBoYXMgYmVlbiBtb3N0bHkgc3VwZXJzZWRlZCB3aXRoIG1vcmUKKyAgIG1vZGVybiB3YXkuCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIHRyaXZpYWwgY29kZSBjbGVhbi11cHMsIGRvY3VtZW50YXRpb24KK3VwZGF0ZXMsIHVwZGF0ZXMgdG8gdGhlIHRlc3Qgc3VpdGUsIGV0Yy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzFjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dpdCB2MS44LjQuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjQuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGZpeCBpbiB2MS44LjQuMyB0byB0aGUgcGFjayB0cmFuc2ZlciBwcm90b2NvbCB0byBwcm9wYWdhdGUKKyAgIHRoZSB0YXJnZXQgb2Ygc3ltYm9saWMgcmVmcyBicm9rZSAiZ2l0IGNsb25lL2dpdCBmZXRjaCIgZnJvbSBhCisgICByZXBvc2l0b3J5IHdpdGggdG9vIG1hbnkgc3ltYm9saWMgcmVmcy4gQXMgYSBob3RmaXgvd29ya2Fyb3VuZCwKKyAgIHdlIHRyYW5zZmVyIG9ubHkgdGhlIGluZm9ybWF0aW9uIG9uIEhFQUQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTViZDFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC41LnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgdjEuOC40LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC40LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gcmVtb3RlLWhnIHRoYXQgYXR0ZW1wdGVkIHRvIG1ha2UgaXQgd29yayBiZXR0ZXIKKyAgIHdpdGggbm9uIEFTQ0lJIHBhdGhuYW1lcyBmZWQgVW5pY29kZSBzdHJpbmdzIHRvIHRoZSB1bmRlcmx5aW5nIEhnCisgICBBUEksIHdoaWNoIHdhcyB3cm9uZy4KKworICogImdpdCBzdWJtb2R1bGUgaW5pdCIgY29waWVkICJzdWJtb2R1bGUuJG5hbWUudXBkYXRlIiBzZXR0aW5ncyBmcm9tCisgICAuZ2l0bW9kdWxlcyB0byAuZ2l0L2NvbmZpZyB3aXRob3V0IG1ha2luZyBzdXJlIGlmIHRoZSBzdWdnZXN0ZWQKKyAgIHZhbHVlIHdhcyBzZW5zaWJsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1ZTE4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQudHh0CkBAIC0wLDAgKzEsNDg2IEBACitHaXQgdjEuOC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzIChmb3IgR2l0IDIuMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIEluIEdpdCAyLjAsIHRoZSBkZWZhdWx0IHdpbGwgY2hhbmdlIHRvIHRoZSAic2ltcGxlIgorc2VtYW50aWNzIHRoYXQgcHVzaGVzOgorCisgLSBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgYW5kIG9ubHkKKyAgIHdoZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHNldCB0byBpbnRlZ3JhdGUgd2l0aCB0aGF0IHJlbW90ZQorICAgYnJhbmNoLCBpZiB5b3UgYXJlIHB1c2hpbmcgdG8gdGhlIHNhbWUgcmVtb3RlIGFzIHlvdSBmZXRjaCBmcm9tOyBvcgorCisgLSBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgaWYgeW91CisgICBhcmUgcHVzaGluZyB0byBhIHJlbW90ZSB0aGF0IGlzIG5vdCB3aGVyZSB5b3UgdXN1YWxseSBmZXRjaCBmcm9tLgorCitVc2UgdGhlIHVzZXIgcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvCitjaGFuZ2UgdGhpcy4gIElmIHlvdSBhcmUgYW4gb2xkLXRpbWVyIHdobyBpcyB1c2VkIHRvIHRoZSAibWF0Y2hpbmciCitzZW1hbnRpY3MsIHlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZSB0byAibWF0Y2hpbmciIHRvIGtlZXAgdGhlCit0cmFkaXRpb25hbCBiZWhhdmlvdXIuICBJZiB5b3Ugd2FudCB0byBsaXZlIGluIHRoZSBmdXR1cmUgZWFybHksIHlvdQorY2FuIHNldCBpdCB0byAic2ltcGxlIiB0b2RheSB3aXRob3V0IHdhaXRpbmcgZm9yIEdpdCAyLjAuCisKK1doZW4gImdpdCBhZGQgLXUiIChhbmQgImdpdCBhZGQgLUEiKSBpcyBydW4gaW5zaWRlIGEgc3ViZGlyZWN0b3J5IGFuZAorZG9lcyBub3Qgc3BlY2lmeSB3aGljaCBwYXRocyB0byBhZGQgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQKK3dpbGwgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHRyZWUgaW4gR2l0IDIuMCBmb3IgY29uc2lzdGVuY3kKK3dpdGggImdpdCBjb21taXQgLWEiIGFuZCBvdGhlciBjb21tYW5kcy4gIFRoZXJlIHdpbGwgYmUgbm8KK21lY2hhbmlzbSB0byBtYWtlIHBsYWluICJnaXQgYWRkIC11IiBiZWhhdmUgbGlrZSAiZ2l0IGFkZCAtdSAuIi4KK0N1cnJlbnQgdXNlcnMgb2YgImdpdCBhZGQgLXUiICh3aXRob3V0IGEgcGF0aHNwZWMpIHNob3VsZCBzdGFydAordHJhaW5pbmcgdGhlaXIgZmluZ2VycyB0byBleHBsaWNpdGx5IHNheSAiZ2l0IGFkZCAtdSAuIgorYmVmb3JlIEdpdCAyLjAgY29tZXMuICBBIHdhcm5pbmcgaXMgaXNzdWVkIHdoZW4gdGhlc2UgY29tbWFuZHMgYXJlCitydW4gd2l0aG91dCBhIHBhdGhzcGVjIGFuZCB3aGVuIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgb3V0c2lkZSB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZSBiZWhhdmlvdXIgaW4gR2l0IDIuMCB3aWxsIGJlIGRpZmZlcmVudAorZnJvbSB0b2RheSdzIHZlcnNpb24gaW4gc3VjaCBhIHNpdHVhdGlvbi4KKworSW4gR2l0IDIuMCwgImdpdCBhZGQgPHBhdGg+IiB3aWxsIGJlaGF2ZSBhcyAiZ2l0IGFkZCAtQSA8cGF0aD4iLCBzbwordGhhdCAiZ2l0IGFkZCBkaXIvIiB3aWxsIG5vdGljZSBwYXRocyB5b3UgcmVtb3ZlZCBmcm9tIHRoZSBkaXJlY3RvcnkKK2FuZCByZWNvcmQgdGhlIHJlbW92YWwuICBWZXJzaW9ucyBiZWZvcmUgR2l0IDIuMCwgaW5jbHVkaW5nIHRoaXMKK3JlbGVhc2UsIHdpbGwga2VlcCBpZ25vcmluZyByZW1vdmFscywgYnV0IHRoZSB1c2VycyB3aG8gcmVseSBvbiB0aGlzCitiZWhhdmlvdXIgYXJlIGVuY291cmFnZWQgdG8gc3RhcnQgdXNpbmcgImdpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8cGF0aD4iCitub3cgYmVmb3JlIDIuMCBpcyByZWxlYXNlZC4KKworCitVcGRhdGVzIHNpbmNlIHYxLjguMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yZWlnbiBpbnRlcmZhY2VzLCBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4KKworICogQ3lnd2luIHBvcnQgaGFzIGJlZW4gdXBkYXRlZCBmb3IgbW9yZSByZWNlbnQgQ3lnd2luIDEuNy4KKworICogImdpdCByZWJhc2UgLWkiIG5vdyBob25vcnMgLS1zdHJhdGVneSBhbmQgLVggb3B0aW9ucy4KKworICogR2l0LWd1aSBoYXMgYmVlbiB1cGRhdGVkIHRvIGl0cyAwLjE4LjAgdmVyc2lvbi4KKworICogTWVkaWFXaWtpIHJlbW90ZSBoZWxwZXIgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUKKyAgIGNyZWRlbnRpYWwgaGVscGVyIGludGVyZmFjZSBmcm9tIEdpdC5wbS4KKworICogVXBkYXRlIGJ1aWxkIGZvciBDeWd3aW4gMS5bNTddLiAgVG9yc3RlbiBCw7ZnZXJzaGF1c2VuIHJlcG9ydHMgdGhhdAorICAgdGhpcyBpcyBmaW5lIHdpdGggQ3lnd2luIDEuNyAoY2YuIDw1MUE2MDZBMC41MDYwMTAxQHdlYi5kZT4pIHNvIGxldCdzIHRyeSBtb3ZpbmcgaXQKKyAgIGFoZWFkLgorCisgKiBUaGUgY3JlZGVudGlhbCBoZWxwZXIgdG8gdGFsayB0byBrZXljaGFpbiBvbiBPUyBYIChpbiBjb250cmliLykgaGFzCisgICBiZWVuIHVwZGF0ZWQgdG8ga2ljayBpbiBub3QganVzdCB3aGVuIHRhbGtpbmcgaHR0cC9odHRwcyBidXQgYWxzbworICAgaW1hcChzKSBhbmQgc210cC4KKworICogUmVtb3RlIHRyYW5zcG9ydCBoZWxwZXIgaGFzIGJlZW4gdXBkYXRlZCB0byByZXBvcnQgZXJyb3JzIGFuZAorICAgbWFpbnRhaW4gcmVmIGhpZXJhcmNoeSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgaXRzIG93biBzdGF0ZSBiZXR0ZXIuCisKKyAqIFdpdGggImV4cG9ydCIgcmVtb3RlLWhlbHBlciBwcm90b2NvbCwgKDEpIGEgcHVzaCB0aGF0IHRyaWVzIHRvCisgICB1cGRhdGUgYSByZW1vdGUgcmVmIHdob3NlIG5hbWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIHB1c2hpbmcgc2lkZQorICAgZG9lcyBub3Qgd29yayB5ZXQsIGFuZCAoMikgdGhlIGhlbHBlciBtYXkgbm90IGtub3cgaG93IHRvIGRvCisgICAtLWRyeS1ydW47IHRoZXNlIHByb2JsZW1hdGljIGNhc2VzIGFyZSBkaXNhYmxlZCBmb3Igbm93LgorCisgKiBnaXQtcmVtb3RlLWhnL2J6ciAoaW4gY29udHJpYi8pIHVwZGF0ZXMuCisKKyAqIGdpdC1yZW1vdGUtbXcgKGluIGNvbnRyaWIvKSBoaW50cyB1c2VycyB0byBjaGVjayB0aGUgY2VydGlmaWNhdGUsCisgICB3aGVuIGh0dHBzOi8vIGNvbm5lY3Rpb24gZmFpbGVkLgorCisgKiBnaXQtcmVtb3RlLW13IChpbiBjb250cmliLykgYWRkcyBhIGNvbW1hbmQgdG8gYWxsb3cgcHJldmlld2luZyB0aGUKKyAgIGNvbnRlbnRzIGxvY2FsbHkgYmVmb3JlIHB1c2hpbmcgaXQgb3V0LCB3aGVuIHdvcmtpbmcgd2l0aCBhCisgICBNZWRpYVdpa2kgcmVtb3RlLgorCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBTYW1wbGUgInBvc3QtcmVjZWl2ZS1lbWFpbCIgaG9vayBzY3JpcHQgZ290IGFuIGVuaGFuY2VkIHJlcGxhY2VtZW50CisgICAibXVsdGltYWlsIiAoaW4gY29udHJpYi8pLgorCisgKiBBbHNvIGluIGNvbnRyaWIvIGlzIGEgbmV3ICJjb250YWN0cyIgc2NyaXB0IHRoYXQgcnVucyAiZ2l0IGJsYW1lIgorICAgdG8gZmluZCBvdXQgdGhlIHBlb3BsZSB3aG8gbWF5IGJlIGludGVyZXN0ZWQgaW4gYSBzZXQgb2YgY2hhbmdlcy4KKworICogImdpdCBjbGVhbiIgY29tbWFuZCBsZWFybmVkIGFuIGludGVyYWN0aXZlIG1vZGUuCisKKyAqIFRoZSAiLS1oZWFkIiBvcHRpb24gdG8gImdpdCBzaG93LXJlZiIgd2FzIG9ubHkgdG8gYWRkICJIRUFEIiB0byB0aGUKKyAgIGxpc3Qgb2YgY2FuZGlkYXRlIHJlZnMgdG8gYmUgZmlsdGVyZWQgYnkgdGhlIHVzdWFsIHJ1bGVzCisgICAoZS5nLiAiLS1oZWFkcyIgdGhhdCBvbmx5IHNob3cgcmVmcyB1bmRlciByZWZzL2hlYWRzKS4gIFRoZSBtZWFuaW5nCisgICBvZiB0aGUgb3B0aW9uIGhhcyBiZWVuIGNoYW5nZWQgdG8gYWx3YXlzIHNob3cgIkhFQUQiIHJlZ2FyZGxlc3Mgb2YKKyAgIHdoYXQgZmlsdGVyaW5nIHdpbGwgYmUgYXBwbGllZCB0byBhbnkgb3RoZXIgcmVmLgorCisgICBUaGlzIGlzIGEgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZSBhbmQgbWlnaHQgY2F1c2UgYnJlYWthZ2VzIHRvCisgICBwZW9wbGUncyBleGlzdGluZyBzY3JpcHRzLgorCisgKiAiZ2l0IHNob3cgLXMiIHdhcyBsZXNzIGRpc2NvdmVyYWJsZSB0aGFuIGl0IHNob3VsZCBoYXZlIGJlZW4uICBJdAorICAgbm93IGhhcyBhIG5hdHVyYWwgc3lub255bSAiZ2l0IHNob3cgLS1uby1wYXRjaCIuCisKKyAqICJnaXQgY2hlY2stbWFpbG1hcCIgaXMgYSBuZXcgY29tbWFuZCB0aGF0IGxldHMgeW91IG1hcCB1c2VybmFtZXMKKyAgIGFuZCBlLW1haWwgYWRkcmVzc2VzIHRocm91Z2ggdGhlIG1haWxtYXAgbWVjaGFuaXNtLCBqdXN0IGxpa2UgbWFueQorICAgYnVpbHQtaW4gY29tbWFuZHMgZG8uCisKKyAqICJnaXQgbmFtZS1yZXYiIGxlYXJuZWQgdG8gbmFtZSBhbiBhbm5vdGF0ZWQgdGFnIG9iamVjdCBiYWNrIHRvIGl0cworICAgdGFnbmFtZTsgImdpdCBuYW1lLXJldiAkKGdpdCByZXYtcGFyc2UgdjEuMC4wKSIgZ2l2ZXMgInRhZ3MvdjEuMC4wIiwKKyAgIGZvciBleGFtcGxlLgorCisgKiAiZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9PGZvcm1hdD4iIGlzIGFkZGVkLCBwcmltYXJpbHkgdG8gYWxsb3cKKyAgIG9uLWRpc2sgZm9vdHByaW50IG9mIG9iamVjdHMgaW4gcGFja2ZpbGVzIChvZnRlbiB0aGV5IGFyZSBhIGxvdAorICAgc21hbGxlciB0aGFuIHRoZWlyIHRydWUgc2l6ZSwgd2hlbiBleHByZXNzZWQgYXMgZGVsdGFzKSB0byBiZQorICAgcmVwb3J0ZWQuCisKKyAqICJnaXQgcmViYXNlIFstaV0iIHVzZWQgdG8gbGVhdmUganVzdCAicmViYXNlIiBhcyBpdHMgcmVmbG9nIG1lc3NhZ2VzCisgICBmb3Igc29tZSBvcGVyYXRpb25zLiBUaGV5IGhhdmUgYmVlbiByZXdvcmRlZCB0byBiZSBtb3JlIGluZm9ybWF0aXZlLgorCisgKiBJbiBhZGRpdGlvbiB0byB0aGUgY2hvaWNlIGZyb20gInJlYmFzZSwgbWVyZ2UsIG9yIGNoZWNrb3V0LWRldGFjaCIsCisgICAic3VibW9kdWxlIHVwZGF0ZSIgY2FuIGFsbG93IGEgY3VzdG9tIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiB0bworICAgdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUgb2Ygc3VibW9kdWxlcyB2aWEgdGhlICJzdWJtb2R1bGUuKi51cGRhdGUiCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGNhbiBvcHRpb25hbGx5IGNsb25lIHRoZSBzdWJtb2R1bGUKKyAgIHJlcG9zaXRvcmllcyBzaGFsbG93bHkuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkICItLWZyb21bPXdob21dIiBvcHRpb24sIHdoaWNoIHNldHMgdGhlCisgICAiRnJvbTogIiBoZWFkZXIgdG8gdGhlIHNwZWNpZmllZCBwZXJzb24gKG9yIHRoZSBwZXJzb24gd2hvIHJ1bnMgdGhlCisgICBjb21tYW5kLCBpZiAiPXdob20iIHBhcnQgaXMgbWlzc2luZykgYW5kIG1vdmUgdGhlIG9yaWdpbmFsIGF1dGhvcgorICAgaW5mb3JtYXRpb24gdG8gYW4gaW4tYm9keSBGcm9tOiBoZWFkZXIgYXMgbmVjZXNzYXJ5LgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAibWVyZ2UuZmYiIHdhcyBjbGVhcnkgYSB0cmktc3RhdGUgdG8KKyAgIGNob29zZSBvbmUgZnJvbSAiZmF2b3IgZmFzdC1mb3J3YXJkIHdoZW4gcG9zc2libGUiLCAiYWx3YXlzIGNyZWF0ZQorICAgYSBtZXJnZSBldmVuIHdoZW4gdGhlIGhpc3RvcnkgY291bGQgZmFzdC1mb3J3YXJkIiBhbmQgImRvIG5vdAorICAgY3JlYXRlIGFueSBtZXJnZSwgb25seSB1cGRhdGUgd2hlbiB0aGUgaGlzdG9yeSBmYXN0LWZvcndhcmRzIiwgYnV0CisgICB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciBkaWQgbm90IGltcGxlbWVudCB0aGUgdXN1YWwgY29udmVudGlvbiBvZgorICAgImxhc3Qgb25lIHdpbnMsIGFuZCBjb21tYW5kIGxpbmUgb3ZlcnJpZGVzIHRoZSBjb25maWd1cmF0aW9uIgorICAgY29ycmVjdGx5LgorCisgKiAiZ2l0d2ViIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgcGxhY2UgZXh0cmEgbGlua3MgdGhhdCBwb2ludCBhdCB0aGUKKyAgIGxldmVscyBoaWdoZXIgdGhhbiB0aGUgR2l0d2ViIHBhZ2VzIHRoZW1zZWx2ZXMgaW4gdGhlIGJyZWFkY3J1bWJzLAorICAgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGluc3RhbGxhdGlvbi4KKworICogImdpdCBsb2cgLS1mb3JtYXQ9IiBub3cgaG9ub3JzIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUuCisKKyAqIFRoZSAicHVzaC5kZWZhdWx0PXNpbXBsZSIgbW9kZSBvZiAiZ2l0IHB1c2giIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGJlaGF2ZSBsaWtlICJjdXJyZW50IiB3aXRob3V0IHJlcXVpcmluZyBhIHJlbW90ZSB0cmFja2luZworICAgaW5mb3JtYXRpb24sIHdoZW4geW91IHB1c2ggdG8gYSByZW1vdGUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB3aGVyZQorICAgeW91IGZldGNoIGZyb20gKGkuZS4gYSB0cmlhbmd1bGFyIHdvcmtmbG93KS4KKworICogSGF2aW5nIG11bHRpcGxlICJmaXh1cCEiIG9uIGEgbGluZSBpbiB0aGUgcmViYXNlIGluc3RydWN0aW9uIHNoZWV0CisgICBkaWQgbm90IHdvcmsgdmVyeSB3ZWxsIHdpdGggImdpdCByZWJhc2UgLWkgLS1hdXRvc3F1YXNoIi4KKworICogImdpdCBsb2ciIGxlYXJuZWQgdGhlICItLWF1dGhvci1kYXRlLW9yZGVyIiBvcHRpb24sIHdpdGggd2hpY2ggdGhlCisgICBvdXRwdXQgaXMgdG9wb2xvZ2ljYWxseSBzb3J0ZWQgYW5kIGNvbW1pdHMgaW4gcGFyYWxsZWwgaGlzdG9yaWVzCisgICBhcmUgc2hvd24gaW50ZXJtaXhlZCB0b2dldGhlciBiYXNlZCBvbiB0aGUgYXV0aG9yIHRpbWVzdGFtcC4KKworICogVmFyaW91cyBzdWJjb21tYW5kcyBvZiAiZ2l0IHN1Ym1vZHVsZSIgcmVmdXNlZCB0byBydW4gZnJvbSBhbnl3aGVyZQorICAgb3RoZXIgdGhhbiB0aGUgdG9wIG9mIHRoZSB3b3JraW5nIHRyZWUgb2YgdGhlIHN1cGVycHJvamVjdCwgYnV0CisgICB0aGV5IGhhdmUgYmVlbiB0YXVnaHQgdG8gbGV0IHlvdSBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICogImdpdCBkaWZmIiBsZWFybmVkIGEgbW9kZSB0aGF0IGlnbm9yZXMgaHVua3Mgd2hvc2UgY2hhbmdlIGNvbnNpc3RzCisgICBvbmx5IG9mIGFkZGl0aW9ucyBhbmQgcmVtb3ZhbHMgb2YgYmxhbmsgbGluZXMsIHdoaWNoIGlzIHRoZSBzYW1lIGFzCisgICAiZGlmZiAtQiIgKGlnbm9yZSBibGFuayBsaW5lcykgb2YgR05VIGRpZmYuCisKKyAqICJnaXQgcm0iIGdpdmVzIGEgc2luZ2xlIG1lc3NhZ2UgZm9sbG93ZWQgYnkgbGlzdCBvZiBwYXRocyB0byByZXBvcnQKKyAgIG11bHRpcGxlIHBhdGhzIHRoYXQgY2Fubm90IGJlIHJlbW92ZWQuCisKKyAqICJnaXQgcmViYXNlIiBjYW4gYmUgdG9sZCB3aXRoICI6L2xvb2sgZm9yIHRoaXMgc3RyaW5nIiBzeW50YXggY29tbWl0cworICAgdG8gcmVwbGF5IHRoZSBjaGFuZ2VzIG9udG8gYW5kIHdoZXJlIHRoZSB3b3JrIHRvIGJlIHJlcGxheWVkIGJlZ2lucy4KKworICogTWFueSB0dXRvcmlhbHMgdGVhY2ggdXNlcnMgdG8gc2V0ICJjb2xvci51aSIgdG8gImF1dG8iIGFzIHRoZSBmaXJzdAorICAgdGhpbmcgYWZ0ZXIgeW91IHNldCAidXNlci5uYW1lL2VtYWlsIiB0byBpbnRyb2R1Y2UgeW91cnNlbHZlcyB0bworICAgR2l0LiAgTm93IHRoZSB2YXJpYWJsZSBkZWZhdWx0cyB0byAiYXV0byIuCisKKyAqIE9uIEN5Z3dpbiwgImN5Z3N0YXJ0IiBpcyBub3cgcmVjb2duaXNlZCBhcyBhIHBvc3NpYmxlIHdheSB0byBzdGFydAorICAgYSB3ZWIgYnJvd3NlciAodXNlZCBpbiAiaGVscCAtdyIgYW5kICJpbnN0YXdlYiIgYW1vbmcgb3RoZXJzKS4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgc3RhdHVzLmJyYW5jaCBhbmQgc3RhdHVzLnNob3J0IGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlcyB0byB1c2UgLS1icmFuY2ggYW5kIC0tc2hvcnQgb3B0aW9ucyBieSBkZWZhdWx0IChvdmVycmlkZQorICAgd2l0aCAtLW5vLWJyYW5jaCBhbmQgLS1uby1zaG9ydCBvcHRpb25zIGZyb20gdGhlIGNvbW1hbmQgbGluZSkuCisKKyAqICJnaXQgY21kIDxuYW1lPiIsIHdoZW4gPG5hbWU+IGhhcHBlbnMgdG8gYmUgYSA0MC1oZXggc3RyaW5nLAorICAgZGlyZWN0bHkgdXNlcyB0aGUgNDAtaGV4IHN0cmluZyBhcyBhbiBvYmplY3QgbmFtZSwgZXZlbiBpZiBhIHJlZgorICAgInJlZnMvPHNvbWUgaGllcmFyY2h5Pi88bmFtZT4iIGV4aXN0cy4gIFRoaXMgZGlzYW1iaWd1YXRpb24gb3JkZXIKKyAgIGlzIHVubGlrZWx5IHRvIGNoYW5nZSwgYnV0IHdlIHNob3VsZCB3YXJuIGFib3V0IHRoZSBhbWJpZ3VpdHkganVzdAorICAgbGlrZSB3ZSB3YXJuIHdoZW4gbW9yZSB0aGFuIG9uZSByZWZzLyBoaWVyYXJjaGllcyBzaGFyZSB0aGUgc2FtZQorICAgbmFtZS4KKworICogImdpdCByZWJhc2UiIGxlYXJuZWQgIi0tW25vLV1hdXRvc3Rhc2giIG9wdGlvbiB0byBzYXZlIGxvY2FsCisgICBjaGFuZ2VzIGluc3RlYWQgb2YgcmVmdXNpbmcgdG8gcnVuICh0byB3aGljaCBwZW9wbGUncyBub3JtYWwKKyAgIHJlc3BvbnNlIHdhcyB0byBzdGFzaCB0aGVtIGFuZCByZS1ydW4pLiAgVGhpcyBpbnRyb2R1Y2VkIGEgY29ybmVyCisgICBjYXNlIGJyZWFrYWdlIHRvICJnaXQgYW0gLS1hYm9ydCIgYnV0IGl0IGhhcyBiZWVuIGZpeGVkLgorCisgKiAiY2hlY2staWdub3JlIiAobmV3IGZlYXR1cmUgc2luY2UgMS44LjIpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yaworICAgbW9yZSBsaWtlICJjaGVjay1hdHRyIiBvdmVyIGJpZGktcGlwZXMuCisKKyAqICJnaXQgZGVzY3JpYmUiIGxlYXJuZWQgIi0tZmlyc3QtcGFyZW50IiBvcHRpb24gdG8gbGltaXQgaXRzIGNsb3Nlc3QKKyAgIHRhZ2dlZCBjb21taXQgc2VhcmNoIHRvIHRoZSBmaXJzdC1wYXJlbnQgY2hhaW4uCisKKyAqICJnaXQgbWVyZ2UgZm9vIiB0aGF0IG1pZ2h0IGhhdmUgbWVhbnQgImdpdCBtZXJnZSBvcmlnaW4vZm9vIiBpcworICAgZGlhZ25vc2VkIHdpdGggYSBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UuCisKKyAqICJnaXQgbG9nIC1MPGxpbmU+LDxyYW5nZT46PGZpbGVuYW1lPiIgaGFzIGJlZW4gYWRkZWQuICBUaGlzIG1heQorICAgc3RpbGwgaGF2ZSBsZWFrcyBhbmQgcm91Z2ggZWRnZXMsIHRob3VnaC4KKworICogV2UgdXNlZCB0aGUgYXBwcm94aWRhdGUoKSBwYXJzZXIgZm9yICItLWV4cGlyZT08dGltZXN0YW1wPiIgb3B0aW9ucworICAgb2YgdmFyaW91cyBjb21tYW5kcywgYnV0IGl0IGlzIGJldHRlciB0byB0cmVhdCAtLWV4cGlyZT1hbGwgYW5kCisgICAtLWV4cGlyZT1ub3cgYSBiaXQgbW9yZSBzcGVjaWFsbHkgdGhhbiB1c2luZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuCisgICAiZ2l0IGdjIiBhbmQgImdpdCByZWZsb2ciIGhhdmUgYmVlbiB1cGRhdGVkIHdpdGggYSBuZXcgcGFyc2luZworICAgZnVuY3Rpb24gZm9yIGV4cGlyeSBkYXRlcy4KKworICogVXBkYXRlcyB0byBjb21wbGV0aW9uIChib3RoIGJhc2ggYW5kIHpzaCkgaGVscGVycy4KKworICogVGhlIGJlaGF2aW91ciBvZiB0aGUgIi0tY2hhaW4tcmVwbHktdG8iIG9wdGlvbiBvZiAiZ2l0IHNlbmQtZW1haWwiCisgICBoYXZlIGNoYW5nZWQgYXQgMS43LjAsIGFuZCB3ZSBhZGRlZCBhIHdhcm5pbmcvYWR2aWNlIG1lc3NhZ2UgdG8KKyAgIGhlbHAgdXNlcnMgYWRqdXN0IHRvIHRoZSBuZXcgYmVoYXZpb3VyIGJhY2sgdGhlbiwgYnV0IHdlIGtlcHQgaXQKKyAgIGFyb3VuZCBmb3IgdG9vIGxvbmcuICBUaGUgbWVzc2FnZSBoYXMgZmluYWxseSBiZWVuIHJlbW92ZWQuCisKKyAqICJnaXQgZmV0Y2ggb3JpZ2luIG1hc3RlciIgdW5saWtlICJnaXQgZmV0Y2ggb3JpZ2luIiBvciAiZ2l0IGZldGNoIgorICAgZGlkIG5vdCB1cGRhdGUgInJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIjsgdGhpcyB3YXMgYW4gZWFybHkKKyAgIGRlc2lnbiBkZWNpc2lvbiB0byBrZWVwIHRoZSB1cGRhdGUgb2YgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzCisgICBwcmVkaWN0YWJsZSwgYnV0IGluIHByYWN0aWNlIGl0IHR1cm5zIG91dCB0aGF0IHBlb3BsZSBmaW5kIGl0IG1vcmUKKyAgIGNvbnZlbmllbnQgdG8gb3Bwb3J0dW5pc3RpY2FsbHkgdXBkYXRlIHRoZW0gd2hlbmV2ZXIgd2UgaGF2ZSBhCisgICBjaGFuY2UsIGFuZCB3ZSBoYXZlIGJlZW4gdXBkYXRpbmcgdGhlbSB3aGVuIHdlIHJ1biAiZ2l0IHB1c2giIHdoaWNoCisgICBhbHJlYWR5IGJyZWFrcyB0aGUgb3JpZ2luYWwgInByZWRpY3RhYmlsaXR5IiBhbnl3YXkuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvcmUuY2hlY2tzdGF0IHdhcyBhZHZlcnRpc2VkIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBidXQgdGhlIGNvZGUgZXhwZWN0ZWQgY29yZS5zdGF0aW5mbyBpbnN0ZWFkLgorICAgRm9yIG5vdywgd2UgYWNjZXB0IGJvdGggY29yZS5jaGVja3N0YXQgYW5kIGNvcmUuc3RhdGluZm8sIGJ1dCB0aGUKKyAgIGxhdHRlciB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGxvbmdlciB0ZXJtLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiBPbiBDeWd3aW4sIHdlIHVzZWQgdG8gdXNlIG91ciBvd24gbHN0YXQoMikgZW11bGF0aW9uIHRoYXQgaXMKKyAgIGFsbGVnZWRseSBmYXN0ZXIgdGhhbiB0aGUgcGxhdGZvcm0gb25lIGluIGNvZGVwYXRocyB3aGVyZSBzb21lIG9mCisgICB0aGUgaW5mb3JtYXRpb24gaXQgcmV0dXJucyBkaWQgbm90IG1hdHRlciwgYnV0IGl0IHN0YXJ0ZWQgdG8gYml0ZQorICAgdXMgaW4gYSBmZXcgY29kZXBhdGhzIHdoZXJlIHRoZSB0cmljayBpdCB1c2VzIHRvIGNoZWF0IGRvZXMgc2hvdworICAgYnJlYWthZ2VzLiBUaGlzIGVtdWxhdGlvbiBoYXMgYmVlbiByZW1vdmVkIGFuZCB3ZSB1c2UgdGhlIG5hdGl2ZQorICAgbHN0YXQoMikgZW11bGF0aW9uIHN1cHBsaWVkIGJ5IEN5Z3dpbiBub3cuCisKKyAqIFRoZSBmdW5jdGlvbiBhdHRyaWJ1dGVzIGV4dGVuc2lvbnMgYXJlIHVzZWQgdG8gY2F0Y2ggbWlzdGFrZXMgaW4KKyAgIHVzZSBvZiBvdXIgb3duIHZhcmlhZGljIGZ1bmN0aW9ucyB0aGF0IHVzZSBOVUxMIHNlbnRpbmVsIGF0IHRoZSBlbmQKKyAgIChpLmUuIGxpa2UgZXhlY2woMykpIGFuZCBmb3JtYXQgc3RyaW5ncyAoaS5lLiBsaWtlIHByaW50ZigzKSkuCisKKyAqIFRoZSBjb2RlIHRvIGFsbG93IGNvbmZpZ3VyYXRpb24gZGF0YSB0byBiZSByZWFkIGZyb20gaW4tdHJlZSBibG9iCisgICBvYmplY3RzIGlzIGluLiAgVGhpcyBtYXkgaGVscCB3b3JraW5nIGluIGEgYmFyZSByZXBvc2l0b3J5IGFuZAorICAgc3VibW9kdWxlIHVwZGF0ZXMuCisKKyAqIEZldGNoaW5nIGJldHdlZW4gcmVwb3NpdG9yaWVzIHdpdGggbWFueSByZWZzIGVtcGxveWVkIE8obl4yKQorICAgYWxnb3JpdGhtIHRvIG1hdGNoIHVwIHRoZSBjb21tb24gb2JqZWN0cywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgb3JpZ2luYWwgd2F5IHRvIHNwZWNpZnkgcmVtb3RlIHJlcG9zaXRvcnkgdXNpbmcgLmdpdC9icmFuY2hlcy8KKyAgIHVzZWQgdG8gaGF2ZSBhIG5pZnR5IGZlYXR1cmUuICBUaGUgY29kZSB0byBzdXBwb3J0IHRoZSBmZWF0dXJlIHdhcworICAgc3RpbGwgaW4gYSBmdW5jdGlvbiBidXQgdGhlIGNhbGxlciB3YXMgY2hhbmdlZCBub3QgdG8gY2FsbCBpdCA1CisgICB5ZWFycyBhZ28sIGJyZWFraW5nIHRoYXQgZmVhdHVyZSBhbmQgbGVhdmluZyB0aGUgc3VwcG9ydGluZyBjb2RlCisgICB1bnJlYWNoYWJsZS4gIFRoZSBkZWFkIGNvZGUgaGFzIGJlZW4gcmVtb3ZlZC4KKworICogImdpdCBwYWNrLXJlZnMiIHRoYXQgcmFjZXMgd2l0aCBuZXcgcmVmIGNyZWF0aW9uIG9yIGRlbGV0aW9uIGhhdmUKKyAgIGJlZW4gc3VzY2VwdGlibGUgdG8gbG9zc2FnZSBvZiByZWZzIHVuZGVyIHJpZ2h0IGNvbmRpdGlvbnMsIHdoaWNoCisgICBoYXMgYmVlbiB0aWdodGVuZWQgdXAuCisKKyAqIFdlIHJlYWQgbG9vc2UgYW5kIHBhY2tlZCByZWZlcmVuY2VzIGluIHR3byBzdGVwcywgYnV0IGFmdGVyCisgICBkZWNpZGluZyB0byByZWFkIGEgbG9vc2UgcmVmIGJ1dCBiZWZvcmUgYWN0dWFsbHkgb3BlbmluZyBpdCB0byByZWFkCisgICBpdCwgYW5vdGhlciBwcm9jZXNzIHJhY2luZyB3aXRoIHVzIGNhbiB1bmxpbmsgaXQsIHdoaWNoIHdvdWxkIGNhdXNlCisgICB1cyB0byBiYXJmLiAgVGhlIGNvZGVwYXRoIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmV0cnkgd2hlbiBzdWNoIGEKKyAgIHJhY2UgaXMgZGV0ZWN0ZWQsIGluc3RlYWQgb2Ygb3V0cmlnaHQgZmFpbGluZy4KKworICogVXNlcyBvZiB0aGUgcGxhdGZvcm0gZm5tYXRjaCgzKSBmdW5jdGlvbiAobWFueSBwbGFjZXMgaW4gdGhlIGNvZGUsCisgICBtYXRjaGluZyBwYXRoc3BlYywgLmdpdGlnbm9yZSBhbmQgLmdpdGF0dHJpYnV0ZXMgdG8gbmFtZSBhIGZldykKKyAgIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHdpbGRtYXRjaCwgYWxsb3dpbmcgImZvby8qKi9iYXIiIHRoYXQgd291bGQKKyAgIG1hdGNoIGZvby9iYXIsIGZvby9hL2JhciwgZm9vL2EvYi9iYXIsIGV0Yy4KKworICogTWVtb3J5IG93bmVyc2hpcCBhbmQgbGlmZXRpbWUgcnVsZXMgZm9yIHdoYXQgZm9yLWVhY2gtcmVmIGZlZWRzIHRvCisgICBpdHMgY2FsbGJhY2tzIGhhdmUgYmVlbiBjbGFyaWZpZWQgKGluIHNob3J0LCAieW91IGRvIG5vdCBvd24gaXQsIHNvCisgICBtYWtlIGEgY29weSBpZiB5b3Ugd2FudCB0byBrZWVwIGl0IikuCisKKyAqIFRoZSByZXZpc2lvbiB0cmF2ZXJzYWwgbG9naWMgdG8gaW1wcm92ZSBjdWxsaW5nIG9mIGlycmVsZXZhbnQKKyAgIHBhcmVudHMgd2hpbGUgdHJhdmVyc2luZyBhIG1lcmd5IGhpc3RvcnkgaGFzIGJlZW4gdXBkYXRlZC4KKworICogU29tZSBsZWFrcyBpbiB1bnBhY2stdHJlZXMgKHVzZWQgaW4gbWVyZ2UsIGNoZXJyeS1waWNrIGFuZCBvdGhlcgorICAgY29kZXBhdGhzKSBoYXZlIGJlZW4gcGx1Z2dlZC4KKworICogVGhlIGNvZGVwYXRoIHRvIHJlYWQgZnJvbSBtYXJrcyBmaWxlcyBpbiBmYXN0LWltcG9ydC9leHBvcnQgZGlkIG5vdAorICAgaGF2ZSB0byBhY2NlcHQgYW55dGhpbmcgYnV0IDQwLWhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0CisgICBuYW1lLiAgRnVydGhlciwgZmFzdC1leHBvcnQgZGlkIG5vdCBuZWVkIGZ1bGwgaW4tY29yZSBvYmplY3QKKyAgIHJlcHJlc2VudGF0aW9uIHRvIGhhdmUgcGFyc2VkIHdlbiByZWFkaW5nIGZyb20gdGhlbS4gIFRoZXNlCisgICBjb2RlcGF0aHMgaGF2ZSBiZWVuIG9wdGltaXplZCBieSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZXNlIGFjY2VzcworICAgcGF0dGVybnMuCisKKyAqIE9iamVjdCBsb29rdXAgbG9naWMsIHdoZW4gdGhlIG9iamVjdCBoYXNodGFibGUgc3RhcnRzIHRvIGJlY29tZQorICAgY3Jvd2RlZCwgaGFzIGJlZW4gb3B0aW1pemVkLgorCisgKiBXaGVuIFRFU1RfT1VUUFVUX0RJUkVDVE9SWSBzZXR0aW5nIGlzIHVzZWQsIGl0IHdhcyBoYW5kbGVkIHNvbWV3aGF0CisgICBpbmNvbnNpc3RlbnRseSBiZXR3ZWVuIHRoZSB0ZXN0IGZyYW1ld29yayBhbmQgdC9NYWtlZmlsZSwgYW5kIGxvZ2ljCisgICB0byBzdW1tYXJpemUgdGhlIHJlc3VsdHMgbG9va2VkIGF0IGEgd3JvbmcgcGxhY2UuCisKKyAqICJnaXQgY2xvbmUiIHVzZXMgYSBsaWdodGVyLXdlaWdodCBpbXBsZW1lbnRhdGlvbiB3aGVuIG1ha2luZyBzdXJlCisgICB0aGF0IHRoZSBoaXN0b3J5IGJlaGluZCByZWZzIGFyZSBjb21wbGV0ZS4KKworICogTWFueSB3YXJuaW5ncyBmcm9tIHNwYXJzZSBzb3VyY2UgY2hlY2tlciBpbiBjb21wYXQvIGFyZWEgaGFzIGJlZW4KKyAgIHNxdWVsY2hlZC4KKworICogVGhlIGNvZGUgdG8gcmVhZGluZyBhbmQgdXBkYXRpbmcgcGFja2VkLXJlZnMgZmlsZSBoYXMgYmVlbiB1cGRhdGVkLAorICAgY29ycmVjdGluZyBjb3JuZXIgY2FzZSBidWdzLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjguMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjEuOC4zIGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSByZWxlYXNlIG5vdGVzIHRvIHRoZW0gZm9yCitkZXRhaWxzKS4KKworICogTmV3ZXIgTmV0OjpTTVRQOjpTU0wgbW9kdWxlIGRvZXMgbm90IHdhbnQgdGhlIHVzZXIgcHJvZ3JhbXMgdG8gdXNlCisgICB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgdG8gbGV0IHNlcnZlciBjZXJ0aWZpY2F0ZSBnbyB3aXRob3V0CisgICB2ZXJpZmljYXRpb24sIHNvIGJ5IGRlZmF1bHQgZW5hYmxlIHRoZSB2ZXJpZmljYXRpb24gd2l0aCBhCisgICBtZWNoYW5pc20gdG8gdHVybiBpdCBvZmYgaWYgbmVlZGVkLgorICAgKG1lcmdlIDM1MDM1YmIgcnIvc2VuZC1lbWFpbC1zc2wtdmVyaWZ5IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiAiZ2l0IiBpcyBzcGF3bmVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhbnkgb2YgdGhlIGxvdyAzIGZpbGUKKyAgIGRlc2NyaXB0b3JzIGlzIGNsb3NlZCwgb3VyIGZpcnN0IG9wZW4oKSBtYXkgeWllbGQgZmlsZSBkZXNjcmlwdG9yIDIsCisgICBhbmQgd3JpdGluZyBlcnJvciBtZXNzYWdlIHRvIGl0IHdvdWxkIHNjcmV3IHRoaW5ncyB1cCBpbiBhIGJpZyB3YXkuCisgICAobWVyZ2UgYTExYzM5NiB0ci9wcm90ZWN0LWxvdy0zLWZkcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBtYWlsbWFwIG1lY2hhbmlzbSB1bm5lY2Vzc2FyaWx5IGRvd25jYXNlZCB0aGUgZS1tYWlsIGFkZHJlc3NlcworICAgaW4gdGhlIG91dHB1dCwgYW5kIGFsc28gaWdub3JlZCB0aGUgaHVtYW4gbmFtZSB3aGVuIGl0IGlzIGEgc2luZ2xlCisgICBjaGFyYWN0ZXIgbmFtZS4KKyAgIChtZXJnZSBiZDIzNzk0IGpjL21haWxtYXAtY2FzZS1pbnNlbnNpdGl2aXR5IGxhdGVyIHRvIG1haW50KS4KKworICogSW4gdHdvIHBsYWNlcyB3ZSBkaWQgbm90IGNoZWNrIHJldHVybiB2YWx1ZSAoZXhwZWN0ZWQgdG8gYmUgYSBmaWxlCisgICBkZXNjcmlwdG9yKSBjb3JyZWN0bHkuCisgICAobWVyZ2UgYTc3ZjEwNiB0ci9mZC1nb3RjaGEtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBMb2dpYyB0byBhdXRvLWRldGVjdCBjaGFyYWN0ZXIgZW5jb2RpbmdzIGluIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UKKyAgIGRpZCBub3QgcmVqZWN0IG92ZXJsb25nIGFuZCBpbnZhbGlkIFVURi04IGNoYXJhY3RlcnMuCisgICAobWVyZ2UgODEwNTBhYyBiYy9jb21taXQtaW52YWxpZC11dGY4IGxhdGVyIHRvIG1haW50KS4KKworICogUGFzcyBwb3J0IG51bWJlciBhcyBhIHNlcGFyYXRlIGFyZ3VtZW50IHdoZW4gInNlbmQtZW1haWwiIGluaXRpYWxpemVzCisgICBOZXQ6OlNNVFAsIGluc3RlYWQgb2YgYXMgYSBwYXJ0IG9mIHRoZSBob3N0bmFtZSwgaS5lLiBob3N0OnBvcnQuCisgICBUaGlzIGFsbG93cyBHU1NBUEkgY29kZXBhdGggdG8gbWF0Y2ggd2l0aCB0aGUgaG9zdG5hbWUgZ2l2ZW4uCisgICAobWVyZ2UgMWE3NDFiZiBiYy9zZW5kLWVtYWlsLXVzZS1wb3J0LWFzLXNlcGFyYXRlLXBhcmFtIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIiByZWZ1c2VkIHRvIGV2ZW4gc2hvdyBkaWZmZXJlbmNlIHdoZW4gY29yZS5zYWZlY3JsZiBpcworICAgc2V0IHRvIHRydWUgKGkuZS4gZXJyb3Igb3V0KSBhbmQgdGhlcmUgYXJlIG9mZmVuZGluZyBsaW5lcyBpbiB0aGUKKyAgIHdvcmtpbmcgdHJlZSBmaWxlcy4KKyAgIChtZXJnZSA1NDMwYmIyIGpjL21haW50LWRpZmYtY29yZS1zYWZlY3JsZiBsYXRlciB0byBtYWludCkuCisKKyAqIEEgdGVzdCB0aGF0IHNob3VsZCBoYXZlIGZhaWxlZCBidXQgZGlkbid0IHJldmVhbGVkIGEgYnVnIHRoYXQgbmVlZHMKKyAgIHRvIGJlIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA5NGQ3NWQxIGpjL3QxNTEyLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIG92ZXJsb25nIHBhdGggdG8gYSAuZ2l0IGRpcmVjdG9yeSBtYXkgaGF2ZSBvdmVyZmxvd24gdGhlCisgICB0ZW1wb3JhcnkgcGF0aCBidWZmZXIgdXNlZCB0byBjcmVhdGUgYSBuYW1lIGZvciBsb2NrZmlsZXMuCisgICAobWVyZ2UgMmZiZDRmOSBtaC9tYWludC1sb2NrZmlsZS1vdmVyZmxvdyBsYXRlciB0byBtYWludCkuCisKKyAqIEludm9jYXRpb25zIG9mICJnaXQgY2hlY2tvdXQiIHVzZWQgaW50ZXJuYWxseSBieSAiZ2l0IHJlYmFzZSIgd2VyZQorICAgY291bnRlZCBhcyAiY2hlY2tvdXQiLCBhbmQgYWZmZWN0ZWQgbGF0ZXIgImdpdCBjaGVja291dCAtIiB0byB0aGUKKyAgIHRoZSB1c2VyIHRvIGFuIHVuZXhwZWN0ZWQgcGxhY2UuCisgICAobWVyZ2UgM2JlZDI5MSByci9yZWJhc2UtY2hlY2tvdXQtcmVmbG9nIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29sdW1uLnVpIHdhcyBwb29ybHkgZG9jdW1lbnRlZC4KKyAgIChtZXJnZSA1ZTYyY2MxIHJyL2NvbHVtbi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG5hbWUtcmV2IC0tcmVmcz10YWdzL3YqIiB3ZXJlIGZvcmJpZGRlbiwgd2hpY2ggd2FzIGEgYml0CisgICBpbmNvbnZlbmllbnQgKHlvdSBoYWQgdG8gZ2l2ZSBhIHBhdHRlcm4gdG8gbWF0Y2ggcmVmcyBmdWxseSwgbGlrZQorICAgLS1yZWZzPXJlZnMvdGFncy92KikuCisgICAobWVyZ2UgOThjNWM0YSBuay9uYW1lLXJldi1hYmJyZXZpYXRlZC1yZWZzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhcHBseSIgcGFyc2VkIHBhdGNoZXMgdGhhdCBhZGQgbmV3IGZpbGVzLCBnZW5lcmF0ZWQgYnkKKyAgIHByb2dyYW1zIG90aGVyIHRoYW4gR2l0LCBpbmNvcnJlY3RseS4gIFRoaXMgaXMgYW4gb2xkIGJyZWFrYWdlIGluCisgICB2MS43LjExIGFuZCB3aWxsIG5lZWQgdG8gYmUgbWVyZ2VkIGRvd24gdG8gdGhlIG1haW50ZW5hbmNlIHRyYWNrcy4KKworICogT2xkZXIgY1VSTCB3YW50ZWQgcGllY2Ugb2YgbWVtb3J5IHdlIGNhbGwgaXQgd2l0aCB0byBiZSBzdGFibGUsIGJ1dAorICAgd2UgdXBkYXRlZCB0aGUgYXV0aCBtYXRlcmlhbCBhZnRlciBoYW5kaW5nIGl0IHRvIGEgY2FsbC4KKworICogImdpdCBwdWxsIiBpbnRvIG5vdGhpbmcgdHJhc2hlZCAibG9jYWwgY2hhbmdlcyIgdGhhdCB3ZXJlIGluIHRoZQorICAgaW5kZXgsIGFuZCB0aGlzIGF2b2lkcyBpdC4KKworICogTWFueSAiZ2l0IHN1Ym1vZHVsZSIgb3BlcmF0aW9ucyBkbyBub3Qgd29yayBvbiBhIHN1Ym1vZHVsZSBhdCBhCisgICBwYXRoIHdob3NlIG5hbWUgaXMgbm90IGluIEFTQ0lJLgorCisgKiAiY2hlcnJ5LXBpY2siIGhhZCBhIHNtYWxsIGxlYWsgaW4gYW4gZXJyb3IgY29kZXBhdGguCisKKyAqIExvZ2ljIHVzZWQgYnkgZ2l0LXNlbmQtZW1haWwgdG8gc3VwcHJlc3MgY2MgbWlzaGFuZGxlZCBuYW1lcyBsaWtlCisgICAiQSBVLiBUaG9yIiA8YXV0aG9yQGV4YW1wbGUueHo+LCB3aGVyZSB0aGUgaHVtYW4gcmVhZGFibGUgcGFydAorICAgbmVlZHMgdG8gYmUgcXVvdGVkICh0aGUgdXNlciBpbnB1dCBtYXkgbm90IGhhdmUgdGhlIGRvdWJsZSBxdW90ZXMKKyAgIGFyb3VuZCB0aGUgbmFtZSwgYW5kIGNvbXBhcmlzb24gd2FzIGRvbmUgYmV0d2VlbiBxdW90ZWQgYW5kCisgICB1bnF1b3RlZCBzdHJpbmdzKS4gIEl0IGFsc28gbWlzaGFuZGxlZCBuYW1lcyB0aGF0IG5lZWQgUkZDMjA0NworICAgcXVvdGluZy4KKworICogQ2FsbCB0byBkaXNjYXJkX2NhY2hlL2Rpc2NhcmRfaW5kZXggKHVzZWQgd2hlbiB3ZSB1c2UgZGlmZmVyZW50CisgICBjb250ZW50cyBvZiB0aGUgaW5kZXggaW4tY29yZSwgaW4gbWFueSBvcGVyYXRpb25zIGxpa2UgY29tbWl0LAorICAgYXBwbHksIGFuZCBtZXJnZSkgdXNlZCB0byBsZWFrIG1lbW9yeSB0aGF0IGhlbGQgdGhlIGFycmF5IG9mIGluZGV4CisgICBlbnRyaWVzLCB3aGljaCBoYXMgYmVlbiBwbHVnZ2VkLgorICAgKG1lcmdlIGEwZmM0ZGIgcnMvZGlzY2FyZC1pbmRleC1kaXNjYXJkLWFycmF5IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdHdlYiIgZm9yZ290IHRvIGNsZWFyIGEgZ2xvYmFsIHZhcmlhYmxlICRzZWFyY2hfcmVnZXhwIHVwb24gZWFjaAorICAgcmVxdWVzdCwgbWlzdGFrZW5seSBjYXJyeWluZyBvdmVyIHRoZSBwcmV2aW91cyBzZWFyY2ggdG8gYSBuZXcgb25lCisgICB3aGVuIHVzZWQgYXMgYSBwZXJzaXN0ZW50IENHSS4KKworICogVGhlIHdpbGRtYXRjaCBlbmdpbmUgZGlkIG5vdCBob25vciBXTV9DQVNFRk9MRCBvcHRpb24gY29ycmVjdGx5LgorCisgKiAiZ2l0IGxvZyAtYyAtLWZvbGxvdyAkcGF0aCIgc2VnZmF1bHRlZCB1cG9uIGhpdHRpbmcgdGhlIGNvbW1pdCB0aGF0CisgICByZW5hbWVkIHRoZSAkcGF0aCBiZWluZyBmb2xsb3dlZC4KKworICogV2hlbiBhIHJlZmxvZyBub3RhdGlvbiBpcyB1c2VkIGZvciBpbXBsaWNpdCAiY3VycmVudCBicmFuY2giLCB3ZQorICAgZGlkIG5vdCBzYXkgd2hpY2ggYnJhbmNoIGFuZCB3b3JzZSBzYWlkICJicmFuY2ggJyciLgorCisgKiAiZGlmZnRvb2wgLS1kaXItZGlmZiIgZGlkIG5vdCBjb3B5IGJhY2sgY2hhbmdlcyBtYWRlIGJ5IHRoZQorICAgZW5kLXVzZXIgaW4gdGhlIGRpZmYgdG9vbCBiYWNrZW5kIHRvIHRoZSB3b3JraW5nIHRyZWUgaW4gc29tZQorICAgY2FzZXMuCisKKyAqICJnaXQgcHVzaCAkdGhlcmUgSEVBRDpicmFuY2giIGRpZCBub3QgcmVzb2x2ZSBIRUFEIGVhcmx5IGVub3VnaCwgc28KKyAgIGl0IHdhcyBlYXN5IHRvIGZsaXAgaXQgYXJvdW5kIHdoaWxlIHB1c2ggaXMgc3RpbGwgZ29pbmcgb24gYW5kIHB1c2gKKyAgIG91dCBhIGJyYW5jaCB0aGF0IHRoZSB1c2VyIGRpZCBub3Qgb3JpZ2luYWxseSBpbnRlbmRlZCB3aGVuIHRoZQorICAgY29tbWFuZCB3YXMgc3RhcnRlZC4KKworICogVGhlIGJhc2ggcHJvbXB0IGNvZGUgKGluIGNvbnRyaWIvKSBkaXNwbGF5ZWQgdGhlIG5hbWUgb2YgdGhlIGJyYW5jaAorICAgYmVpbmcgcmViYXNlZCB3aGVuICJyZWJhc2UgLWkvLW0vLXAiIG1vZGVzIGFyZSBpbiB1c2UsIGJ1dCBub3QgdGhlCisgICBwbGFpbiB2YW5pbGxhICJyZWJhc2UiLgorCisgKiBIYW5kbGluZyBvZiBuZWdhdGl2ZSBleGNsdWRlIHBhdHRlcm4gZm9yIGRpcmVjdG9yaWVzICIhZGlyIiB3YXMKKyAgIGJyb2tlbiBpbiB0aGUgdXBkYXRlIHRvIHYxLjguMy4KKworICogenNoIHByb21wdCBzY3JpcHQgdGhhdCBib3Jyb3dlZCBmcm9tIGJhc2ggcHJvbXB0IHNjcmlwdCBkaWQgbm90CisgICB3b3JrIGR1ZSB0byBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gYXJyYXkgdmFyaWFibGUgbm90YXRpb24gYmV0d2VlbgorICAgdGhlc2UgdHdvIHNoZWxscy4KKworICogQW4gZW50cnkgZm9yICJmaWxlOi8vIiBzY2hlbWUgaW4gdGhlIGVudW1lcmF0aW9uIG9mIFVSTCB0eXBlcyBHaXQKKyAgIGNhbiB0YWtlIGluIHRoZSBIVE1MIGRvY3VtZW50YXRpb24gd2FzIG1hZGUgaW50byBhIGNsaWNrYWJsZSBsaW5rCisgICBieSBtaXN0YWtlLgorCisgKiAiZ2l0IHB1c2ggLS1bbm8tXXZlcmlmeSIgd2FzIG5vdCBkb2N1bWVudGVkLgorCisgKiBTdG9wIGluc3RhbGxpbmcgdGhlIGdpdC1yZW1vdGUtdGVzdHB5IHNjcmlwdCB0aGF0IGlzIG9ubHkgdXNlZCBmb3IKKyAgIHRlc3RpbmcuCisKKyAqICJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtbSAnJyIgc2hvdWxkIG5vdCBzdGFydCBhbgorICAgZWRpdG9yLgorCisgKiAiZ2l0IG1lcmdlIEB7LTF9fjIyIiB3YXMgcmV3cml0dGVuIHRvICJnaXQgbWVyZ2UgZnJvdHpAezF9fjIyIgorICAgaW5jb3JyZWN0bHkgd2hlbiB5b3VyIHByZXZpb3VzIGJyYW5jaCB3YXMgImZyb3R6IiAoaXQgc2hvdWxkIGJlCisgICByZXdyaXR0ZW4gdG8gImdpdCBtZXJnZSBmcm90en4yMiIgaW5zdGVhZCkuCisKKyAqICJnaXQgZGlmZiAtYyAtcCIgd2FzIG5vdCBzaG93aW5nIGEgZGVsZXRlZCBsaW5lIGZyb20gYSBodW5rIHdoZW4KKyAgIGFub3RoZXIgaHVuayBpbW1lZGlhdGVseSBiZWdpbnMgd2hlcmUgdGhlIGVhcmxpZXIgb25lIGVuZHMuCisKKyAqICJnaXQgbG9nIC0tYW5jZXN0cnktcGF0aCBBLi4uQiIgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLCBhcyBpdCBkaWQKKyAgIG5vdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBmYWN0IHRoYXQgdGhlIG1lcmdlIGJhc2UgYmV0d2VlbiBBIGFuZCBCCisgICB3YXMgdGhlIGJvdHRvbSBvZiB0aGUgcmFuZ2UgYmVpbmcgc3BlY2lmaWVkLgorCisgKiBNYWMgT1MgWCBkb2VzIG5vdCBsaWtlIHRvIHdyaXRlKDIpIG1vcmUgdGhhbiBJTlRfTUFYIG51bWJlciBvZgorICAgYnl0ZXM7IHdvcmsgaXQgYXJvdW5kIGJ5IGNob3BwaW5nIHdyaXRlKDIpIGludG8gc21hbGxlciBwaWVjZXMuCisKKyAqIE5ld2VyIE1hY09TIFggZW5jb3VyYWdlcyB0aGUgcHJvZ3JhbXMgdG8gY29tcGlsZSBhbmQgbGluayB3aXRoCisgICB0aGVpciBDb21tb25DcnlwdG8sIG5vdCB3aXRoIE9wZW5TU0wuCisKKyAqICJnaXQgY2xvbmUgZm9vL2JhcjpiYXoiIGNhbm5vdCBiZSBhIHJlcXVlc3QgdG8gY2xvbmUgZnJvbSBhIHJlbW90ZQorICAgb3ZlciBnaXQtb3Zlci1zc2ggc3BlY2lmaWVkIGluIHRoZSBzY3Agc3R5bGUuICBUaGlzIGNhc2UgaXMgbm93CisgICBkZXRlY3RlZCBhbmQgY2xvbmVzIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IGF0ICJmb28vYmFyOmJheiIuCisKKyAqIFdoZW4gJEhPTUUgaXMgbWlzY29uZmlndXJlZCB0byBwb2ludCBhdCBhbiB1bnJlYWRhYmxlIGRpcmVjdG9yeSwgd2UKKyAgIHVzZWQgdG8gY29tcGxhaW4gYW5kIGRpZS4gTG9vc2VuIHRoZSBjaGVjay4KKworICogImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIGhhZCBvbmUgY29kZXBhdGggd2l0aCBsb29zZSBlcnJvcgorICAgY2hlY2tzIHRvIGxvc2UgZGF0YSBhdCB0aGUgcmVtb3RlIHNpZGUuCisKKyAqICJnaXQgZmV0Y2giIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnkgZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBkb2VzCisgICBub3Qga25vdyBhYm91dCB0aGUgc2hhbGxvdyBib3VuZGFyeSBjb21taXRzIChlLmcuIGEgZGlmZmVyZW50IGZvcmsKKyAgIGZyb20gdGhlIHJlcG9zaXRvcnkgdGhlIGN1cnJlbnQgc2hhbGxvdyByZXBvc2l0b3J5IHdhcyBjbG9uZWQgZnJvbSkKKyAgIGRpZCBub3Qgd29yayBjb3JyZWN0bHkuCisKKyAqICJnaXQgY2hlY2tvdXQgZm9vIiBEV0lNcyB0aGUgaW50ZW5kZWQgInVwc3RyZWFtIiBhbmQgdHVybnMgaXQgaW50bworICAgImdpdCBjaGVja291dCAtdCAtYiBmb28gcmVtb3Rlcy9vcmlnaW4vZm9vIi4gVGhpcyBjb2RlcGF0aCBoYXMgYmVlbgorICAgdXBkYXRlZCB0byBjb3JyZWN0bHkgdGFrZSBleGlzdGluZyByZW1vdGUgZGVmaW5pdGlvbnMgaW50byBhY2NvdW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzNmFhZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMS50eHQKQEAgLTAsMCArMSw5IEBACitHaXQgdjEuOC41LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC41CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBzdWJtb2R1bGUgaW5pdCIgY29waWVkICJzdWJtb2R1bGUuJG5hbWUudXBkYXRlIiBzZXR0aW5ncyBmcm9tCisgICAuZ2l0bW9kdWxlcyB0byAuZ2l0L2NvbmZpZyB3aXRob3V0IG1ha2luZyBzdXJlIGlmIHRoZSBzdWdnZXN0ZWQKKyAgIHZhbHVlIHdhcyBzZW5zaWJsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzQ5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjIudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dpdCB2MS44LjUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBkaWZmIC0tICc6KGljYXNlKW1ha2VmaWxlJyIgd2FzIHVubmVjZXNzYXJpbHkgcmVqZWN0ZWQgYXQgdGhlCisgICBjb21tYW5kIGxpbmUgcGFyc2VyLgorCisgKiAiZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9b2siIGRpZCBub3QgY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZgorICAgdGhlIG5hbWVkIG9iamVjdC4KKworICogImdpdCBhbSAtLWFib3J0IiBzb21ldGltZXMgY29tcGxhaW5lZCBhYm91dCBub3QgYmVpbmcgYWJsZSB0byB3cml0ZQorICAgYSB0cmVlIHdpdGggYW4gMHs0MH0gb2JqZWN0IGluIGl0LgorCisgKiBUd28gcHJvY2Vzc2VzIGNyZWF0aW5nIGxvb3NlIG9iamVjdHMgYXQgdGhlIHNhbWUgdGltZSBjb3VsZCBoYXZlCisgICBmYWlsZWQgdW5uZWNlc3NhcmlseSB3aGVuIHRoZSBuYW1lIG9mIHRoZWlyIG5ldyBvYmplY3RzIHN0YXJ0ZWQKKyAgIHdpdGggdGhlIHNhbWUgYnl0ZSB2YWx1ZSwgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGUyZGQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4zLnR4dApAQCAtMCwwICsxLDI3IEBACitHaXQgdjEuOC41LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSAiLS1bbm8tXWluZm9ybWF0aXZlLWVycm9ycyIgb3B0aW9ucyB0byAiZ2l0IGRhZW1vbiIgd2VyZSBwYXJzZWQKKyAgIGEgYml0IHRvbyBsb29zZWx5LCBhbGxvd2luZyBhbnkgb3RoZXIgc3RyaW5nIGFmdGVyIHRoZXNlIG9wdGlvbgorICAgbmFtZXMuCisKKyAqIEEgImdjIiBwcm9jZXNzIHJ1bm5pbmcgYXMgYSBkaWZmZXJlbnQgdXNlciBzaG91bGQgYmUgYWJsZSB0byBzdG9wIGEKKyAgIG5ldyAiZ2MiIHByb2Nlc3MgZnJvbSBzdGFydGluZy4KKworICogQW4gZWFybGllciAiY2xlYW4tdXAiIGludHJvZHVjZWQgYW4gdW5uZWNlc3NhcnkgbWVtb3J5IGxlYWsgdG8gdGhlCisgICBjcmVkZW50aWFsIHN1YnN5c3RlbS4KKworICogImdpdCBtdiBBIEIvIiwgd2hlbiBCIGRvZXMgbm90IGV4aXN0IGFzIGEgZGlyZWN0b3J5LCBzaG91bGQgZXJyb3IKKyAgIG91dCwgYnV0IGl0IGRpZG4ndC4KKworICogImdpdCByZXYtcGFyc2UgPHJldnM+IC0tIDxwYXRocz4iIGRpZCBub3QgaW1wbGVtZW50IHRoZSB1c3VhbAorICAgZGlzYW1iaWd1YXRpb24gcnVsZXMgdGhlIGNvbW1hbmRzIGluIHRoZSAiZ2l0IGxvZyIgZmFtaWx5IHVzZWQgaW4KKyAgIHRoZSBzYW1lIHdheS4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoPSIsIGFuIGFkbWl0dGVkbHkgdXNlbGVzcyBjb21tYW5kLCBkaWQgbm90CisgICBiZWhhdmUgdmVyeSB3ZWxsLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4YzQwMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuNC50eHQKQEAgLTAsMCArMSw0OCBAQAorR2l0IHYxLjguNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGZldGNoIC0tZGVwdGg9MCIgd2FzIGEgbm8tb3AsIGFuZCB3YXMgc2lsZW50bHkgaWdub3JlZC4KKyAgIERpYWdub3NlIGl0IGFzIGFuIGVycm9yLgorCisgKiBSZW1vdGUgcmVwb3NpdG9yeSBVUkwgZXhwcmVzc2VkIGluIHNjcC1zdHlsZSBob3N0OnBhdGggbm90YXRpb24gYXJlCisgICBwYXJzZWQgbW9yZSBjYXJlZnVsbHkgKGUuZy4gImZvby9iYXI6YmF6IiBpcyBsb2NhbCwgIls6OjFdOi9+dXNlciIgYXNrcworICAgdG8gY29ubmVjdCB0byB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgb24gaG9zdCBhdCBhZGRyZXNzIDo6MS4KKworICogU1NMLXJlbGF0ZWQgb3B0aW9ucyB3ZXJlIG5vdCBwYXNzZWQgY29ycmVjdGx5IHRvIHVuZGVybHlpbmcgc29ja2V0CisgICBsYXllciBpbiAiZ2l0IHNlbmQtZW1haWwiLgorCisgKiAiZ2l0IGNvbW1pdCAtdiIgYXBwZW5kcyB0aGUgcGF0Y2ggdG8gdGhlIGxvZyBtZXNzYWdlIGJlZm9yZQorICAgZWRpdGluZywgYW5kIHRoZW4gcmVtb3ZlcyB0aGUgcGF0Y2ggd2hlbiB0aGUgZWRpdG9yIHJldHVybmVkCisgICBjb250cm9sLiBIb3dldmVyLCB0aGUgcGF0Y2ggd2FzIG5vdCBzdHJpcHBlZCBjb3JyZWN0bHkgd2hlbiB0aGUKKyAgIGZpcnN0IG1vZGlmaWVkIHBhdGggd2FzIGEgc3VibW9kdWxlLgorCisgKiAiZ2l0IG12IEEgQi8iLCB3aGVuIEIgZG9lcyBub3QgZXhpc3QgYXMgYSBkaXJlY3RvcnksIHNob3VsZCBlcnJvcgorICAgb3V0LCBidXQgaXQgZGlkbid0LgorCisgKiBXaGVuIHdlIGZpZ3VyZSBvdXQgaG93IG1hbnkgZmlsZSBkZXNjcmlwdG9ycyB0byBhbGxvY2F0ZSBmb3IKKyAgIGtlZXBpbmcgcGFja2ZpbGVzIG9wZW4sIGEgc3lzdGVtIHdpdGggbm9uLXdvcmtpbmcgZ2V0cmxpbWl0KCkgY291bGQKKyAgIGNhdXNlIHVzIHRvIGRpZSgpLCBidXQgYmVjYXVzZSB3ZSBtYWtlIHRoaXMgY2FsbCBvbmx5IHRvIGdldCBhCisgICByb3VnaCBlc3RpbWF0ZSBvZiBob3cgbWFueSBpcyBhdmFpbGFibGUgYW5kIHdlIGRvIG5vdCBldmVuIGF0dGVtcHQKKyAgIHRvIHVzZSB1cCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUgb3Vyc2VsdmVzLCBpdCBpcyBuaWNlciB0bworICAgZmFsbCBiYWNrIHRvIGEgcmVhc29uYWJsZSBsb3cgdmFsdWUgcmF0aGVyIHRoYW4gZHlpbmcuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIGRpZCBub3QgaGFuZGxlIGEgdGFnIHBvaW50ZWQgYnkgYW5vdGhlciB0YWcKKyAgIG5pY2VseS4KKworICogImdpdCBhZGQgLUEiIChubyBvdGhlciBhcmd1bWVudHMpIGluIGEgdG90YWxseSBlbXB0eSB3b3JraW5nIHRyZWUKKyAgIHVzZWQgdG8gZW1pdCBhbiBlcnJvci4KKworICogVGhlcmUgaXMgbm8gcmVhc29uIHRvIGhhdmUgYSBoYXJkY29kZWQgdXBwZXIgbGltaXQgb2YgdGhlIG51bWJlciBvZgorICAgcGFyZW50cyBmb3IgYW4gb2N0b3B1cyBtZXJnZSwgY3JlYXRlZCB2aWEgdGhlIGdyYWZ0IG1lY2hhbmlzbSwgYnV0CisgICB0aGVyZSB3YXMuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAnZ2l0IHN0YXNoICRjbWQgInN0YXNoQHsuLi59IicgZGlkIG5vdCBxdW90ZQorICAgdGhlIHN0YXNoIGFyZ3VtZW50IHByb3Blcmx5IGFuZCBsZWZ0IGl0IHNwbGl0IGF0IElGUyB3aGl0ZXNwYWNlLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiB0byAiZ2l0IHB1bGwiIGhpbnRlZCB0aGVyZSBpcyBhbiAiLW0iIG9wdGlvbgorICAgYmVjYXVzZSBpdCBpbmNvcnJlY3RseSBzaGFyZWQgdGhlIGRvY3VtZW50YXRpb24gd2l0aCAiZ2l0IG1lcmdlIi4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOTFjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjUudHh0CkBAIC0wLDAgKzEsMzcgQEAKK0dpdCB2MS44LjUuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHBhdGhzcGVjIG1hdGNoaW5nIGNvZGUsIHdoaWxlIGNvbXBhcmluZyB0d28gdHJlZXMgKGUuZy4gImdpdAorICAgZGlmZiBBIEIgLS0gcGF0aDEgcGF0aDIiKSB3YXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGZhaWxlZCB0byBtYXRjaAorICAgc29tZSBwYXRocyB3aGVuIG11bHRpcGxlIHBhdGhzcGVjcyB3ZXJlIGludm9sdmVkLgorCisgKiAiZ2l0IHJlcGFjayAtLW1heC1wYWNrLXNpemU9OGciIHN0b3BwZWQgYmVpbmcgcGFyc2VkIGNvcnJlY3RseSB3aGVuCisgICB0aGUgY29tbWFuZCB3YXMgcmVpbXBsZW1lbnRlZCBpbiBDLgorCisgKiBBIHJlY2VudCB1cGRhdGUgdG8gImdpdCBzZW5kLWVtYWlsIiBicm9rZSBwbGF0Zm9ybXMgd2hlcmUKKyAgIC9ldGMvc3NsL2NlcnRzLyBkaXJlY3RvcnkgZXhpc3RzIGJ1dCBjYW5ub3QgYmUgdXNlZCBhcyBTU0xfY2FfcGF0aAorICAgKGUuZy4gRmVkb3JhIHJhd2hpZGUpLgorCisgKiBBIGhhbmRmdWwgb2YgYnVncyBhcm91bmQgaW50ZXJwcmV0aW5nICRicmFuY2hAe3Vwc3RyZWFtfSBub3RhdGlvbgorICAgYW5kIGl0cyBsb29rYWxpa2UsIHdoZW4gJGJyYW5jaCBwYXJ0IGhhcyBpbnRlcmVzdGluZyBjaGFyYWN0ZXJzLAorICAgZS5nLiAiQCIsIGFuZCAiOiIsIGhhdmUgYmVlbiBmaXhlZC4KKworICogImdpdCBjbG9uZSIgd291bGQgZmFpbCB0byBjbG9uZSBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IGhhcyBhIHJlZgorICAgZGlyZWN0bHkgdW5kZXIgInJlZnMvIiwgZS5nLiAicmVmcy9zdGFzaCIsIGJlY2F1c2UgZGlmZmVyZW50CisgICB2YWxpZGF0aW9uIHBhdGhzIGRvIGRpZmZlcmVudCB0aGluZ3Mgb24gc3VjaCBhIHJlZm5hbWUuICBMb29zZW4gdGhlCisgICBjbGllbnQgc2lkZSdzIHZhbGlkYXRpb24gdG8gYWxsb3cgc3VjaCBhIHJlZi4KKworICogImdpdCBsb2cgLS1sZWZ0LXJpZ2h0IEEuLi5CIiBsb3N0IHRoZSAibGVmdG5lc3MiIG9mIGNvbW1pdHMKKyAgIHJlYWNoYWJsZSBmcm9tIEEgd2hlbiBBIGlzIGEgdGFnIGFzIGEgc2lkZSBlZmZlY3Qgb2YgYSByZWNlbnQKKyAgIGJ1Z2ZpeC4gIFRoaXMgaXMgYSByZWdyZXNzaW9uIGluIDEuOC40Lnggc2VyaWVzLgorCisgKiAiZ2l0IG1lcmdlLWJhc2UgLS1vY3RvcHVzIiB1c2VkIHRvIGxlYXZlIGNsZWFuaW5nIHVwIHN1Ym9wdGltYWwKKyAgIHJlc3VsdCB0byB0aGUgY2FsbGVyLCBidXQgbm93IGl0IGRvZXMgdGhlIGNsZWFuLXVwIGl0c2VsZi4KKworICogImdpdCBtdiBBIEIvIiwgd2hlbiBCIGRvZXMgbm90IGV4aXN0IGFzIGEgZGlyZWN0b3J5LCBzaG91bGQgZXJyb3IKKyAgIG91dCwgYnV0IGl0IGRpZG4ndC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZmY5MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjYudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCB2MS44LjUuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2UgdXNlZCB0byBhbGxvdyBjb21taXR0aW5nIGEgcGF0aCAiLkdpdC9jb25maWciIHdpdGggR2l0IHRoYXQgaXMKKyAgIHJ1bm5pbmcgb24gYSBjYXNlIHNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBidXQgYW4gYXR0ZW1wdCB0byBjaGVjayBvdXQKKyAgIHN1Y2ggYSBwYXRoIHdpdGggR2l0IHRoYXQgcnVucyBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbQorICAgd291bGQgaGF2ZSBjbG9iYmVyZWQgIi5naXQvY29uZmlnIiwgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdAorICAgdGhlIHVzZXIgd291bGQgaGF2ZSBleHBlY3RlZC4gIEdpdCBub3cgcHJldmVudHMgeW91IGZyb20gdHJhY2tpbmcKKyAgIGEgcGF0aCB3aXRoICIuR2l0IiAoaW4gYW55IGNhc2UgY29tYmluYXRpb24pIGFzIGEgcGF0aCBjb21wb25lbnQuCisKKyAqIE9uIFdpbmRvd3MsIGNlcnRhaW4gcGF0aCBjb21wb25lbnRzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tICIuZ2l0IgorICAgYXJlIG1hcHBlZCB0byAiLmdpdCIsIGUuZy4gImdpdH4xL2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlCisgICAiLmdpdC9jb25maWciLiAgSEZTKyBoYXMgYSBzaW1pbGFyIGlzc3VlLCB3aGVyZSBjZXJ0YWluIHVuaWNvZGUKKyAgIGNvZGVwb2ludHMgYXJlIGlnbm9yZWQsIGUuZy4gIi5nXHUyMDBjaXQvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmCisgICBpdCB3ZXJlICIuZ2l0L2NvbmZpZyIuICBQYXRobmFtZXMgd2l0aCB0aGVzZSBwb3RlbnRpYWwgaXNzdWVzIGFyZQorICAgcmVqZWN0ZWQgb24gdGhlIGFmZmVjdGVkIHN5c3RlbXMuICBHaXQgb24gc3lzdGVtcyB0aGF0IGFyZSBub3QKKyAgIGFmZmVjdGVkIGJ5IHRoaXMgaXNzdWUgKGUuZy4gTGludXgpIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8KKyAgIHJlamVjdCB0aGVtIHRvIGVuc3VyZSBjcm9zcyBwbGF0Zm9ybSBpbnRlcm9wZXJhYmlsaXR5IG9mIHRoZSBob3N0ZWQKKyAgIHByb2plY3RzLgorCisgKiAiZ2l0IGZzY2siIG5vdGljZXMgYSB0cmVlIG9iamVjdCB0aGF0IHJlY29yZHMgc3VjaCBhIHBhdGggdGhhdCBjYW4KKyAgIGJlIGNvbmZ1c2VkIHdpdGggIi5naXQiLCBhbmQgd2l0aCByZWNlaXZlLmZzY2tPYmplY3RzIGNvbmZpZ3VyYXRpb24KKyAgIHNldCB0byB0cnVlLCBhbiBhdHRlbXB0IHRvICJnaXQgcHVzaCIgc3VjaCBhIHRyZWUgb2JqZWN0IHdpbGwgYmUKKyAgIHJlamVjdGVkLiAgU3VjaCBhIHBhdGggbWF5IG5vdCBiZSBhIHByb2JsZW0gb24gYSB3ZWxsIGJlaGF2aW5nCisgICBmaWxlc3lzdGVtIGJ1dCBpbiBvcmRlciB0byBwcm90ZWN0IHRob3NlIG9uIEhGUysgYW5kIG9uIGNhc2UKKyAgIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zLCB0aGlzIGNoZWNrIGlzIGVuYWJsZWQgb24gYWxsIHBsYXRmb3Jtcy4KKworQSBiaWcgInRoYW5rcyEiIGZvciBicmluZ2luZyB0aGlzIGlzc3VlIHRvIHVzIGdvZXMgdG8gb3VyIGZyaWVuZHMgaW4KK3RoZSBNZXJjdXJpYWwgbGFuZCwgbmFtZWx5LCBNYXR0IE1hY2thbGwgYW5kIEF1Z2llIEZhY2tsZXIuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMmRmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LnR4dApAQCAtMCwwICsxLDQ1NiBAQAorR2l0IHYxLjguNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcyAoZm9yIEdpdCAyLjApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiAiZ2l0IHB1c2ggWyR0aGVyZV0iIGRvZXMgbm90IHNheSB3aGF0IHRvIHB1c2gsIHdlIGhhdmUgdXNlZCB0aGUKK3RyYWRpdGlvbmFsICJtYXRjaGluZyIgc2VtYW50aWNzIHNvIGZhciAoYWxsIHlvdXIgYnJhbmNoZXMgd2VyZSBzZW50Cit0byB0aGUgcmVtb3RlIGFzIGxvbmcgYXMgdGhlcmUgYWxyZWFkeSBhcmUgYnJhbmNoZXMgb2YgdGhlIHNhbWUgbmFtZQorb3ZlciB0aGVyZSkuICBJbiBHaXQgMi4wLCB0aGUgZGVmYXVsdCB3aWxsIGNoYW5nZSB0byB0aGUgInNpbXBsZSIKK3NlbWFudGljcywgd2hpY2ggcHVzaGVzOgorCisgLSBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgYW5kIG9ubHkKKyAgIHdoZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHNldCB0byBpbnRlZ3JhdGUgd2l0aCB0aGF0IHJlbW90ZQorICAgYnJhbmNoLCBpZiB5b3UgYXJlIHB1c2hpbmcgdG8gdGhlIHNhbWUgcmVtb3RlIGFzIHlvdSBmZXRjaCBmcm9tOyBvcgorCisgLSBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgaWYgeW91CisgICBhcmUgcHVzaGluZyB0byBhIHJlbW90ZSB0aGF0IGlzIG5vdCB3aGVyZSB5b3UgdXN1YWxseSBmZXRjaCBmcm9tLgorCitVc2UgdGhlIHVzZXIgcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvCitjaGFuZ2UgdGhpcy4gIElmIHlvdSBhcmUgYW4gb2xkLXRpbWVyIHdobyBpcyB1c2VkIHRvIHRoZSAibWF0Y2hpbmciCitzZW1hbnRpY3MsIHlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZSB0byAibWF0Y2hpbmciIHRvIGtlZXAgdGhlCit0cmFkaXRpb25hbCBiZWhhdmlvdXIuICBJZiB5b3Ugd2FudCB0byBsaXZlIGluIHRoZSBmdXR1cmUgZWFybHksIHlvdQorY2FuIHNldCBpdCB0byAic2ltcGxlIiB0b2RheSB3aXRob3V0IHdhaXRpbmcgZm9yIEdpdCAyLjAuCisKK1doZW4gImdpdCBhZGQgLXUiIChhbmQgImdpdCBhZGQgLUEiKSBpcyBydW4gaW5zaWRlIGEgc3ViZGlyZWN0b3J5IGFuZAorZG9lcyBub3Qgc3BlY2lmeSB3aGljaCBwYXRocyB0byBhZGQgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQKK3dpbGwgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHRyZWUgaW4gR2l0IDIuMCBmb3IgY29uc2lzdGVuY3kKK3dpdGggImdpdCBjb21taXQgLWEiIGFuZCBvdGhlciBjb21tYW5kcy4gIFRoZXJlIHdpbGwgYmUgbm8KK21lY2hhbmlzbSB0byBtYWtlIHBsYWluICJnaXQgYWRkIC11IiBiZWhhdmUgbGlrZSAiZ2l0IGFkZCAtdSAuIi4KK0N1cnJlbnQgdXNlcnMgb2YgImdpdCBhZGQgLXUiICh3aXRob3V0IGEgcGF0aHNwZWMpIHNob3VsZCBzdGFydAordHJhaW5pbmcgdGhlaXIgZmluZ2VycyB0byBleHBsaWNpdGx5IHNheSAiZ2l0IGFkZCAtdSAuIgorYmVmb3JlIEdpdCAyLjAgY29tZXMuICBBIHdhcm5pbmcgaXMgaXNzdWVkIHdoZW4gdGhlc2UgY29tbWFuZHMgYXJlCitydW4gd2l0aG91dCBhIHBhdGhzcGVjIGFuZCB3aGVuIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgb3V0c2lkZSB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZSBiZWhhdmlvdXIgaW4gR2l0IDIuMCB3aWxsIGJlIGRpZmZlcmVudAorZnJvbSB0b2RheSdzIHZlcnNpb24gaW4gc3VjaCBhIHNpdHVhdGlvbi4KKworSW4gR2l0IDIuMCwgImdpdCBhZGQgPHBhdGg+IiB3aWxsIGJlaGF2ZSBhcyAiZ2l0IGFkZCAtQSA8cGF0aD4iLCBzbwordGhhdCAiZ2l0IGFkZCBkaXIvIiB3aWxsIG5vdGljZSBwYXRocyB5b3UgcmVtb3ZlZCBmcm9tIHRoZSBkaXJlY3RvcnkKK2FuZCByZWNvcmQgdGhlIHJlbW92YWwuICBWZXJzaW9ucyBiZWZvcmUgR2l0IDIuMCwgaW5jbHVkaW5nIHRoaXMKK3JlbGVhc2UsIHdpbGwga2VlcCBpZ25vcmluZyByZW1vdmFscywgYnV0IHRoZSB1c2VycyB3aG8gcmVseSBvbiB0aGlzCitiZWhhdmlvdXIgYXJlIGVuY291cmFnZWQgdG8gc3RhcnQgdXNpbmcgImdpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8cGF0aD4iCitub3cgYmVmb3JlIDIuMCBpcyByZWxlYXNlZC4KKworVGhlIGRlZmF1bHQgcHJlZml4IGZvciAiZ2l0IHN2biIgd2lsbCBjaGFuZ2UgaW4gR2l0IDIuMC4gIEZvciBhIGxvbmcKK3RpbWUsICJnaXQgc3ZuIiBjcmVhdGVkIGl0cyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgZGlyZWN0bHkgdW5kZXIKK3JlZnMvcmVtb3RlcywgYnV0IGl0IHdpbGwgcGxhY2UgdGhlbSB1bmRlciByZWZzL3JlbW90ZXMvb3JpZ2luLyB1bmxlc3MKK2l0IGlzIHRvbGQgb3RoZXJ3aXNlIHdpdGggaXRzIC0tcHJlZml4IG9wdGlvbi4KKworCitVcGRhdGVzIHNpbmNlIHYxLjguNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yZWlnbiBpbnRlcmZhY2VzLCBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4KKworICogImdpdC1zdm4iIGhhcyBiZWVuIHRhdWdodCB0byB1c2UgdGhlIHNlcmYgbGlicmFyeSwgd2hpY2ggaXMgdGhlCisgICBvbmx5IG9wdGlvbiBTVk4gMS44LjAgb2ZmZXJzIHVzIHdoZW4gdGFsa2luZyB0aGUgSFRUUCBwcm90b2NvbC4KKworICogImdpdC1zdm4iIHRhbGtpbmcgb3ZlciBhbiBodHRwczovLyBjb25uZWN0aW9uIHVzaW5nIHRoZSBzZXJmIGxpYnJhcnkKKyAgIGR1bXBlZCBjb3JlIGR1ZSB0byBhIGJ1ZyBpbiB0aGUgc2VyZiBsaWJyYXJ5IHRoYXQgU1ZOIHVzZXMuICBXb3JrCisgICBhcm91bmQgaXQgb24gb3VyIHNpZGUsIGV2ZW4gdGhvdWdoIHRoZSBTVk4gc2lkZSBpcyBiZWluZyBmaXhlZC4KKworICogT24gTWFjT1MgWCwgd2UgZGV0ZWN0ZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgdGhlICJwcmUtY29tcG9zZWQKKyAgIHVuaWNvZGUgc3RyaW5ncyIgd29ya2Fyb3VuZCwgYnV0IGRpZCBub3QgYXV0b21hdGljYWxseSBlbmFibGUgaXQuCisgICBOb3cgd2UgZG8uCisKKyAqIHJlbW90ZS1oZyByZW1vdGUgaGVscGVyIG1pc2JlaGF2ZWQgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGEgbG9jYWwgSGcKKyAgIHJlcG9zaXRvcnkgcmVsYXRpdmUgdG8gdGhlIGhvbWUgZGlyZWN0b3J5LCBlLmcuICJjbG9uZSBoZzo6fi90aGVyZSIuCisKKyAqIGltYXAtc2VuZCBwb3J0ZWQgdG8gT1MgWCB1c2VzIEFwcGxlJ3Mgc2VjdXJpdHkgZnJhbWV3b3JrIGluc3RlYWQgb2YKKyAgIE9wZW5TU0wncy4KKworICogImdpdCBmYXN0LWltcG9ydCIgdHJlYXRzIGFuIGVtcHR5IHBhdGggZ2l2ZW4gdG8gImxzIiBhcyB0aGUgcm9vdCBvZgorICAgdGhlIHRyZWUuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIHhkZy1vcGVuIGNhbiBiZSB1c2VkIGFzIGEgYnJvd3NlciBiYWNrZW5kIGZvciAiZ2l0IHdlYi1icm93c2UiCisgICAoaGVuY2UgdG8gc2hvdyAiZ2l0IGhlbHAgLXciIG91dHB1dCksIHdoZW4gYXZhaWxhYmxlLgorCisgKiAiZ2l0IGdyZXAiIGFuZCAiZ2l0IHNob3ciIHBheSBhdHRlbnRpb24gdG8gdGhlICItLXRleHRjb252IiBvcHRpb24KKyAgIHdoZW4gdGhlc2UgY29tbWFuZHMgYXJlIHRvbGQgdG8gb3BlcmF0ZSBvbiBibG9iIG9iamVjdHMgKGUuZy4gImdpdAorICAgZ3JlcCAtZSBwYXR0ZXJuIC0tdGV4dGNvbnYgSEVBRDpNYWtlZmlsZSIpLgorCisgKiAiZ2l0IHJlcGxhY2UiIGhlbHBlciBubyBsb25nZXIgYWxsb3dzIGFuIG9iamVjdCB0byBiZSByZXBsYWNlZCB3aXRoCisgICBhbm90aGVyIG9iamVjdCBvZiBhIGRpZmZlcmVudCB0eXBlIHRvIGF2b2lkIGNvbmZ1c2lvbiAoeW91IGNhbgorICAgc3RpbGwgbWFudWFsbHkgY3JhZnQgc3VjaCBhIHJlcGxhY2VtZW50IHVzaW5nICJnaXQgdXBkYXRlLXJlZiIsIGFzIGFuCisgICBlc2NhcGUgaGF0Y2gpLgorCisgKiAiZ2l0IHN0YXR1cyIgbm8gbG9uZ2VyIHByaW50cyB0aGUgZGlydHkgc3RhdHVzIGluZm9ybWF0aW9uIG9mCisgICBzdWJtb2R1bGVzIGZvciB3aGljaCBzdWJtb2R1bGUuJG5hbWUuaWdub3JlIGlzIHNldCB0byAiYWxsIi4KKworICogImdpdCByZWJhc2UgLWkiIGhvbm91cnMgY29yZS5hYmJyZXYgd2hlbiBwcmVwYXJpbmcgdGhlIGluc24gc2hlZXQKKyAgIGZvciBlZGl0aW5nLgorCisgKiAiZ2l0IHN0YXR1cyIgZHVyaW5nIGEgY2hlcnJ5LXBpY2sgc2hvd3Mgd2hpY2ggb3JpZ2luYWwgY29tbWl0IGlzCisgICBiZWluZyBwaWNrZWQuCisKKyAqIEluc3RlYWQgb2YgdHlwaW5nIGZvdXIgY2FwaXRhbCBsZXR0ZXJzICJIRUFEIiwgeW91IGNhbiBzYXkgIkAiIG5vdywKKyAgIGUuZy4gImdpdCBsb2cgQCIuCisKKyAqICJnaXQgY2hlY2staWdub3JlIiBmb2xsb3dzIHRoZSBzYW1lIHJ1bGUgYXMgImdpdCBhZGQiIGFuZCAiZ2l0CisgICBzdGF0dXMiIGluIHRoYXQgdGhlIGlnbm9yZS9leGNsdWRlIG1lY2hhbmlzbSBkb2VzIG5vdCB0YWtlIGVmZmVjdAorICAgb24gcGF0aHMgdGhhdCBhcmUgYWxyZWFkeSB0cmFja2VkLiAgV2l0aCB0aGUgIi0tbm8taW5kZXgiIG9wdGlvbiwgaXQKKyAgIGNhbiBiZSB1c2VkIHRvIGRpYWdub3NlIHdoaWNoIHBhdGhzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBpZ25vcmVkCisgICBoYXZlIGJlZW4gbWlzdGFrZW5seSBhZGRlZCB0byB0aGUgaW5kZXguCisKKyAqIFNvbWUgaXJyZWxldmFudCAiYWR2aWNlIiBtZXNzYWdlcyB0aGF0IGFyZSBzaGFyZWQgd2l0aCAiZ2l0IHN0YXR1cyIKKyAgIG91dHB1dCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb21taXQgbG9nIHRlbXBsYXRlLgorCisgKiAidXBkYXRlLXJlZnMiIGxlYXJuZWQgYSAiLS1zdGRpbiIgb3B0aW9uIHRvIHJlYWQgbXVsdGlwbGUgdXBkYXRlCisgICByZXF1ZXN0cyBhbmQgcGVyZm9ybSB0aGVtIGluIGFuIGFsbC1vci1ub25lIGZhc2hpb24uCisKKyAqIEp1c3QgbGlrZSAibWFrZSAtQyA8ZGlyZWN0b3J5PiIsICJnaXQgLUMgPGRpcmVjdG9yeT4gLi4uIiB0ZWxscyBHaXQKKyAgIHRvIGdvIHRoZXJlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLgorCisgKiBKdXN0IGxpa2UgImdpdCBjaGVja291dCAtIiBrbm93cyB0byBjaGVjayBvdXQsIGFuZCAiZ2l0IG1lcmdlIC0iCisgICBrbm93cyB0byBtZXJnZSwgdGhlIGJyYW5jaCB5b3Ugd2VyZSBwcmV2aW91c2x5IG9uLCAiZ2l0IGNoZXJyeS1waWNrIgorICAgbm93IHVuZGVyc3RhbmRzICJnaXQgY2hlcnJ5LXBpY2sgLSIgdG8gcGljayBmcm9tIHRoZSBwcmV2aW91cworICAgYnJhbmNoLgorCisgKiAiZ2l0IHN0YXR1cyIgbm93IG9taXRzIHRoZSBwcmVmaXggdG8gbWFrZSBpdHMgb3V0cHV0IGEgY29tbWVudCBpbiBhCisgICBjb21taXQgbG9nIGVkaXRvciwgd2hpY2ggaXMgbm90IG5lY2Vzc2FyeSBmb3IgaHVtYW4gY29uc3VtcHRpb24uCisgICBTY3JpcHRzIHRoYXQgcGFyc2UgdGhlIG91dHB1dCBvZiAiZ2l0IHN0YXR1cyIgYXJlIGFkdmlzZWQgdG8gdXNlCisgICAiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIgaW5zdGVhZCwgYXMgaXRzIGZvcm1hdCBpcyBzdGFibGUgYW5kIGVhc2llcgorICAgdG8gcGFyc2UuCisKKyAqIFRoZSByZWYgc3ludGF4ICJmb29ee3RhZ30iICh3aXRoIHRoZSBsaXRlcmFsIHN0cmluZyAie3RhZ30iKSBwZWVscyBhCisgICB0YWcgcmVmIHRvIGl0c2VsZiwgaS5lLiBpdCdzIGEgbm8tb3AuLCBhbmQgZmFpbHMgaWYKKyAgICJmb28iIGlzIG5vdCBhIHRhZy4gICJnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHYxLjBee3RhZ30iIGlzCisgICBhIG1vcmUgY29udmVuaWVudCB3YXkgdGhhbiAidGVzdCAkKGdpdCBjYXQtZmlsZSAtdCB2MS4wKSA9IHRhZyIgdG8KKyAgIGNoZWNrIGlmIHYxLjAgaXMgYSB0YWcuCisKKyAqICJnaXQgYnJhbmNoIC12IC12IiAoYW5kICJnaXQgc3RhdHVzIikgZGlkIG5vdCBkaXN0aW5ndWlzaCBhbW9uZyBhCisgICBicmFuY2ggdGhhdCBpcyBub3QgYmFzZWQgb24gYW55IG90aGVyIGJyYW5jaCwgYSBicmFuY2ggdGhhdCBpcyBpbgorICAgc3luYyB3aXRoIGl0cyB1cHN0cmVhbSBicmFuY2gsIGFuZCBhIGJyYW5jaCB0aGF0IGlzIGNvbmZpZ3VyZWQgd2l0aCBhbgorICAgdXBzdHJlYW0gYnJhbmNoIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy4KKworICogRWFybGllciB3ZSBzdGFydGVkIHJlamVjdGluZyBhbnkgYXR0ZW1wdCB0byBhZGQgdGhlIDB7NDB9IG9iamVjdCBuYW1lIHRvCisgICB0aGUgaW5kZXggYW5kIHRvIHRyZWUgb2JqZWN0cywgYnV0IGl0IHNvbWV0aW1lcyBpcyBuZWNlc3NhcnkgdG8KKyAgIGFsbG93IHRoaXMgdG8gYmUgYWJsZSB0byB1c2UgdG9vbHMgbGlrZSBmaWx0ZXItYnJhbmNoIHRvIGNvcnJlY3Qgc3VjaAorICAgYnJva2VuIHRyZWUgb2JqZWN0cy4gICJmaWx0ZXItYnJhbmNoIiBjYW4gYWdhaW4gYmUgdXNlZCB0byBkbyB0aGlzLgorCisgKiAiZ2l0IGNvbmZpZyIgZGlkIG5vdCBwcm92aWRlIGEgd2F5IHRvIHNldCBvciBhY2Nlc3MgbnVtYmVycyBsYXJnZXIKKyAgIHRoYW4gYSBuYXRpdmUgImludCIgb24gdGhlIHBsYXRmb3JtOyBpdCBub3cgcHJvdmlkZXMgNjQtYml0IHNpZ25lZAorICAgaW50ZWdlcnMgb24gYWxsIHBsYXRmb3Jtcy4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBhbHdheXMgY2hvc2UgdG8gZG8gdGhlIGJvZy1zdGFuZGFyZCBmbGF0dGVuaW5nCisgICByZWJhc2UuICBZb3UgY2FuIHRlbGwgaXQgdG8gcnVuICJyZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMiIHdpdGgKKyAgICJnaXQgcHVsbCAtLXJlYmFzZT1wcmVzZXJ2ZSIgb3IgYnkKKyAgIHNldHRpbmcgInB1bGwucmViYXNlIiBjb25maWd1cmF0aW9uIHRvICJwcmVzZXJ2ZSIuCisKKyAqICJnaXQgcHVzaCAtLW5vLXRoaW4iIGFjdHVhbGx5IGRpc2FibGVzIHRoZSAidGhpbiBwYWNrIHRyYW5zZmVyIgorICAgb3B0aW1pemF0aW9uLgorCisgKiBNYWdpYyBwYXRoc3BlY3MgbGlrZSAiOihpY2FzZSltYWtlZmlsZSIgKG1hdGNoZXMgYm90aCBNYWtlZmlsZQorICAgYW5kIG1ha2VmaWxlKSBhbmQgIjooZ2xvYilmb28vKiovYmFyIiAobWF0Y2hlcyAiYmFyIiBpbiAiZm9vIgorICAgYW5kIGFueSBzdWJkaXJlY3Rvcnkgb2YgImZvbyIpIGNhbiBiZSB1c2VkIGluIG1vcmUgcGxhY2VzLgorCisgKiBUaGUgImh0dHAuKiIgdmFyaWFibGVzIGNhbiBub3cgYmUgc3BlY2lmaWVkIGZvciBpbmRpdmlkdWFsIFVSTHMuCisgICBGb3IgZXhhbXBsZSwKKworICAgW2h0dHBdCisgICAgICAgc3NsVmVyaWZ5ID0gdHJ1ZQorICAgW2h0dHAgImh0dHBzOi8vd2Vhay5leGFtcGxlLmNvbS8iXQorICAgICAgIHNzbFZlcmlmeSA9IGZhbHNlCisKKyAgIHdvdWxkIGZsaXAgaHR0cC5zc2xWZXJpZnkgb2ZmIG9ubHkgd2hlbiB0YWxraW5nIHRvIHRoYXQgc3BlY2lmaWMKKyAgIHNpdGUuCisKKyAqICJnaXQgbXYgQSBCIiB3aGVuIG1vdmluZyBhIHN1Ym1vZHVsZSBoYXMgYmVlbiB0YXVnaHQgdG8KKyAgIHJlbG9jYXRlIHRoZSBzdWJtb2R1bGUncyB3b3JraW5nIHRyZWUgYW5kIHRvIGFkanVzdCB0aGUgcGF0aHMgaW4gdGhlCisgICAuZ2l0bW9kdWxlcyBmaWxlLgorCisgKiAiZ2l0IGJsYW1lIiBjYW4gbm93IHRha2UgbW9yZSB0aGFuIG9uZSAtTCBvcHRpb24gdG8gZGlzY292ZXIgdGhlCisgICBvcmlnaW4gb2YgbXVsdGlwbGUgYmxvY2tzIG9mIGxpbmVzLgorCisgKiBUaGUgaHR0cCB0cmFuc3BvcnQgY2xpZW50cyBjYW4gb3B0aW9uYWxseSBhc2sgdG8gc2F2ZSBjb29raWVzCisgICB3aXRoIHRoZSBodHRwLnNhdmVjb29raWVzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCBhIG1vcmUgZmluZSBncmFpbmVkIGNvbnRyb2wgb3ZlciBhIGJsdW50CisgICAiLS1mb3JjZSIgd2hlbiByZXF1ZXN0aW5nIGEgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgd2l0aCB0aGUKKyAgICItLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+OjxleHBlY3RlZCBvYmplY3QgbmFtZT4iIG9wdGlvbi4KKworICogImdpdCBkaWZmIC0tZGlmZi1maWx0ZXI9PGNsYXNzZXMgb2YgY2hhbmdlcz4iIGNhbiBub3cgdGFrZQorICAgbG93ZXJjYXNlIGxldHRlcnMgKGUuZy4gIi0tZGlmZi1maWx0ZXI9ZCIpIHRvIG1lYW4gInNob3cKKyAgIGV2ZXJ5dGhpbmcgYnV0IHRoZXNlIGNsYXNzZXMiLiAgImdpdCBkaWZmLWZpbGVzIC1xIiBpcyBub3cgYQorICAgZGVwcmVjYXRlZCBzeW5vbnltIGZvciAiZ2l0IGRpZmYtZmlsZXMgLS1kaWZmLWZpbHRlcj1kIi4KKworICogImdpdCBmZXRjaCIgKGhlbmNlICJnaXQgcHVsbCIgYXMgd2VsbCkgbGVhcm5lZCB0byBjaGVjaworICAgImZldGNoLnBydW5lIiBhbmQgInJlbW90ZS4qLnBydW5lIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQKKyAgIHRvIGJlaGF2ZSBhcyBpZiB0aGUgIi0tcHJ1bmUiIGNvbW1hbmQgbGluZSBvcHRpb24gd2FzIGdpdmVuLgorCisgKiAiZ2l0IGNoZWNrLWlnbm9yZSAteiIgYXBwbGllZCB0aGUgTlVMIHRlcm1pbmF0aW9uIHRvIGJvdGggaXRzIGlucHV0CisgICAod2l0aCAtLXN0ZGluKSBhbmQgaXRzIG91dHB1dCwgYnV0ICJnaXQgY2hlY2stYXR0ciAteiIgaWdub3JlZCB0aGUKKyAgIG9wdGlvbiBvbiB0aGUgb3V0cHV0IHNpZGUuIE1ha2UgYm90aCBob25vciAteiBvbiB0aGUgaW5wdXQgYW5kCisgICBvdXRwdXQgc2lkZSB0aGUgc2FtZSB3YXkuCisKKyAqICJnaXQgd2hhdGNoYW5nZWQiIG1heSBzdGlsbCBiZSB1c2VkIGJ5IG9sZCB0aW1lcnMsIGJ1dCBtZW50aW9uIG9mCisgICBpdCBpbiBkb2N1bWVudHMgbWVhbnQgZm9yIG5ldyB1c2VycyB3aWxsIG9ubHkgd2FzdGUgcmVhZGVycycgdGltZQorICAgd29uZGVyaW5nIHdoYXQgdGhlIGRpZmZlcmVuY2UgaXMgYmV0d2VlbiBpdCBhbmQgImdpdCBsb2ciLiAgTWFrZSBpdAorICAgbGVzcyBwcm9taW5lbnQgaW4gdGhlIGdlbmVyYWwgcGFydCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZXhwbGFpbgorICAgdGhhdCBpdCBpcyBtZXJlbHkgYSAiZ2l0IGxvZyIgd2l0aCBkaWZmZXJlbnQgZGVmYXVsdCBiZWhhdmlvdXIgaW4KKyAgIGl0cyBvd24gZG9jdW1lbnQuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiB3aGVuIGFza2luZyBmb3IgbWVyZWx5IHRoZSBvYmplY3QgbmFtZSBkb2VzIG5vdAorICAgaGF2ZSB0byBwYXJzZSB0aGUgb2JqZWN0IHBvaW50ZWQgYXQgYnkgdGhlIHJlZnM7IHRoZSBjb2RlcGF0aCBoYXMKKyAgIGJlZW4gb3B0aW1pemVkLgorCisgKiBUaGUgSFRUUCB0cmFuc3BvcnQgd2lsbCB0cnkgdG8gdXNlIFRDUCBrZWVwYWxpdmUgd2hlbiBhYmxlLgorCisgKiAiZ2l0IHJlcGFjayIgaXMgbm93IHdyaXR0ZW4gaW4gQy4KKworICogQnVpbGQgcHJvY2VkdXJlIGZvciBNU1ZDIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIElmIGEgYnVpbGQtdGltZSBmYWxsYmFjayBpcyBzZXQgdG8gImNhdCIgaW5zdGVhZCBvZiAibGVzcyIsIHdlCisgICBzaG91bGQgYXBwbHkgdGhlIHNhbWUgIm5vIHN1YnByb2Nlc3Mgb3IgcGlwZSIgb3B0aW1pemF0aW9uIGFzIHdlCisgICBhcHBseSB0byB1c2VyLXN1cHBsaWVkIEdJVF9QQUdFUj1jYXQuCisKKyAqIE1hbnkgY29tbWFuZHMgdXNlIGEgLS1kYXNoZWQtb3B0aW9uIGFzIGFuIG9wZXJhdGlvbiBtb2RlIHNlbGVjdG9yCisgICAoZS5nLiAiZ2l0IHRhZyAtLWRlbGV0ZSIpIHRoYXQgZXhjbHVkZXMgb3RoZXIgb3BlcmF0aW9uIG1vZGVzCisgICAoZS5nLiAiZ2l0IHRhZyAtLWRlbGV0ZSAtLXZlcmlmeSIgaXMgbm9uc2Vuc2UpIGFuZCB0aGF0IGNhbm5vdCBiZQorICAgbmVnYXRlZCAoZS5nLiAiZ2l0IHRhZyAtLW5vLWRlbGV0ZSIgaXMgbm9uc2Vuc2UpLiAgVGhlIHBhcnNlLW9wdGlvbnMKKyAgIEFQSSBsZWFybmVkIGEgbmV3IE9QVF9DTURNT0RFIG1hY3JvIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGltcGxlbWVudAorICAgc3VjaCBhIHNldCBvZiBvcHRpb25zLgorCisgKiBPUFRfQk9PTEVBTigpIGluIHRoZSBwYXJzZS1vcHRpb25zIEFQSSB3YXMgbWlzZGVzaWduZWQgdG8gYmUgImNvdW50aW5nCisgICB1cCIgYnV0IG1hbnkgc3ViY29tbWFuZHMgZXhwZWN0IGl0IHRvIGJlaGF2ZSBhcyAib24vb2ZmIi4gVXBkYXRlCisgICB0aGVtIHRvIHVzZSBPUFRfQk9PTCgpIHdoaWNoIGlzIGEgcHJvcGVyIGJvb2xlYW4uCisKKyAqICJnaXQgZ2MiIGV4aXRzIGVhcmx5IHdpdGhvdXQgZG9pbmcgYW55IHdvcmsgd2hlbiBpdCBkZXRlY3RzCisgICB0aGF0IGFub3RoZXIgaW5zdGFuY2Ugb2YgaXRzZWxmIGlzIGFscmVhZHkgcnVubmluZy4KKworICogVW5kZXIgbWVtb3J5IHByZXNzdXJlIGFuZC9vciBmaWxlIGRlc2NyaXB0b3IgcHJlc3N1cmUsIHdlIHVzZWQgdG8KKyAgIGNsb3NlIHBhY2sgd2luZG93cyB0aGF0IGFyZSBub3QgdXNlZCBhbmQgYWxzbyBjbG9zZWQgZmlsZWhhbmRsZXMgdG8KKyAgIG9wZW4gYnV0IHVudXNlZCBwYWNrZmlsZXMuIFRoZXNlIGFyZSBub3cgY29udHJvbGxlZCBzZXBhcmF0ZWx5CisgICB0byBiZXR0ZXIgY29wZSB3aXRoIHRoZSBsb2FkLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS44LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjguNCBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJyBub3RlcyBmb3IKK2RldGFpbHMpLgorCisgKiBBbiBhbmNpZW50IEhvdy1UbyBvbiBzZXJ2aW5nIEdpdCByZXBvc2l0b3JpZXMgb24gYW4gSFRUUCBzZXJ2ZXIKKyAgIGxhY2tlZCBhIHdhcm5pbmcgdGhhdCBpdCBoYXMgYmVlbiBtb3N0bHkgc3VwZXJzZWRlZCB3aXRoIGEgbW9yZQorICAgbW9kZXJuIHdheS4KKyAgIChtZXJnZSA2ZDUyYmMzIHNjL2RvYy1ob3d0by1kdW1iLWh0dHAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlIG9mIFBlcmwgaW4gb3VyIHRlc3Qgc3VpdGUgYW5kIE5PX1BFUkwKKyAgIGhhcyBiZWVuIGNsYXJpZmllZCBhIGJpdC4KKyAgIChtZXJnZSBmOGZjMGVlIGpuL3Rlc3QtcHJlcmVxLXBlcmwtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHN5bm9wc2lzIHNlY3Rpb24gb2YgdGhlICJnaXQgdW5wYWNrLW9iamVjdHMiIGRvY3VtZW50YXRpb24gaGFzIGJlZW4KKyAgIGNsYXJpZmllZCBhIGJpdC4KKyAgIChtZXJnZSA2MWUyZTIyIHZkL2RvYy11bnBhY2stb2JqZWN0cyBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIGRpZCBub3QgZ2VuZXJhdGUgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiB0byAiZ2l0IHN1YnRyZWUiCisgICBpbiBjb250cmliLy4KKyAgIChtZXJnZSA5NWM2MmZiIGprL3N1YnRyZWUtaW5zdGFsbC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGZhc3QtaW1wb3J0IHN0cmVhbSBleHByZXNzZXMgYSBwYXRobmFtZSB3aXRoIGZ1bm55IGNoYXJhY3RlcnMgYnkKKyAgIHF1b3RpbmcgdGhlbSBpbiBDIHN0eWxlOyB0aGUgcmVtb3RlLWhnIHJlbW90ZSBoZWxwZXIgZm9yZ290IHRvIHVucXVvdGUKKyAgIHN1Y2ggYSBwYXRoLgorICAgKG1lcmdlIDExMzYyNjUgYXAvcmVtb3RlLWhnLXVucXVvdGUtY3F1b3RlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXNldCAtcCBIRUFEIiBoYXMgYSBjb2RlcGF0aCB0byBzcGVjaWFsLWNhc2UgaXQgdG8gYmVoYXZlCisgICBkaWZmZXJlbnRseSBmcm9tIHJlc2V0dGluZyB0byBjb250ZW50cyBvZiBvdGhlciBjb21taXRzLCBidXQgYQorICAgcmVjZW50IGNoYW5nZSBicm9rZSBpdC4KKworICogQ29sb3JpbmcgYXJvdW5kIG9jdG9wdXMgbWVyZ2VzIGluICJsb2cgLS1ncmFwaCIgb3V0cHV0IHdhcyBzY3Jld3kuCisgICAobWVyZ2UgMzM5YzE3YiBobi9sb2ctZ3JhcGgtY29sb3Itb2N0b3B1cyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2tvdXQgdG9waWMiLCB3aGVuIHRoZXJlIGlzIG5vdCB5ZXQgYSBsb2NhbCAidG9waWMiIGJyYW5jaAorICAgYnV0IHRoZXJlIGlzIGEgdW5pcXVlIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yIGEgcmVtb3RlICJ0b3BpYyIKKyAgIGJyYW5jaCwgcHJldGVuZGVkIGFzIGlmICJnaXQgY2hlY2tvdXQgLXQgLWIgdG9waWMgcmVtb3RlLyRyL3RvcGljIgorICAgKGZvciB0aGF0IHVuaXF1ZSByZW1vdGUgJHIpIHdhcyBydW4uIFRoaXMgaGFjayBob3dldmVyIHdhcyBub3QKKyAgIGltcGxlbWVudGVkIGZvciAiZ2l0IGNoZWNrb3V0IHRvcGljIC0tIi4KKyAgIChtZXJnZSBiY2EzOTY5IG1tL2NoZWNrb3V0LWF1dG8tdHJhY2stZml4IGxhdGVyIHRvIG1haW50KS4KKworICogT25lIGxvbmctc3RhbmRpbmcgZmxhdyBpbiB0aGUgcGFjayB0cmFuc2ZlciBwcm90b2NvbCB1c2VkIGJ5ICJnaXQKKyAgIGNsb25lIiB3YXMgdGhhdCB0aGVyZSB3YXMgbm8gd2F5IHRvIHRlbGwgdGhlIG90aGVyIGVuZCB3aGljaCBicmFuY2gKKyAgICJIRUFEIiBwb2ludHMgYXQsIGFuZCB0aGUgcmVjZWl2aW5nIGVuZCBuZWVkZWQgdG8gZ3Vlc3MuICBBIG5ldworICAgY2FwYWJpbGl0eSBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBwYWNrIHByb3RvY29sIHRvIGNvbnZleSB0aGlzCisgICBpbmZvcm1hdGlvbiBzbyB0aGF0IGNsb25pbmcgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCBtb3JlIHRoYW4gb25lCisgICBicmFuY2ggcG9pbnRpbmcgYXQgdGhlIHNhbWUgY29tbWl0IHdoZXJlIHRoZSBIRUFEIGlzIGF0IG5vdworICAgcmVsaWFibHkgc2V0cyB0aGUgaW5pdGlhbCBicmFuY2ggaW4gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5LgorICAgKG1lcmdlIDM2MGEzMjYgamMvdXBsb2FkLXBhY2stc2VuZC1zeW1yZWYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBkaWQgbm90IGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgaHR0cCB0cmFuc3BvcnQgZ2V0cyByZWRpcmVjdGVkIGR1cmluZworICAgdGhlIGF1dGhvcml6YXRpb24gcmVxdWVzdCAoZS5nLiBmcm9tIGh0dHA6Ly8gdG8gaHR0cHM6Ly8pLgorICAgKG1lcmdlIDcwOTAwZWQgamsvaHR0cC1hdXRoLXJlZGlyZWN0cyBsYXRlciB0byBtYWludCkuCisKKyAqIEJhc2ggcHJvbXB0aW5nIGNvZGUgdG8gZGVhbCB3aXRoIGFuIFNWTiByZW1vdGUgYXMgYW4gdXBzdHJlYW0KKyAgIHdhcyBjb2RlZCBpbiBhIHdheSB1bnN1cHBvcnRlZCBieSBvbGRlciBCYXNoIHZlcnNpb25zICgzLngpLgorICAgKG1lcmdlIDUyZWM4ODkgc2cvcHJvbXB0LXN2bi1yZW1vdGUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGZhbGwtYmFjayBwYXJzaW5nIG9mIGNvbW1pdCBvYmplY3RzIHdpdGggYnJva2VuIGF1dGhvciBvcgorICAgY29tbWl0dGVyIGxpbmVzIHdhcyBsZXNzIHJvYnVzdCB0aGFuIGlkZWFsIGluIHBpY2tpbmcgdXAgdGhlCisgICB0aW1lc3RhbXBzLgorICAgKG1lcmdlIDAzODE4YTQgamsvc3BsaXQtYnJva2VuLWlkZW50IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXYtbGlzdCAtLW9iamVjdHMgXnYxLjBeIHYxLjAiIGdhdmUgdGhlIHYxLjAgdGFnIGl0c2VsZiBpbiB0aGUKKyAgIG91dHB1dCwgYnV0ICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIHYxLjBeLi52MS4wIiBkaWQgbm90LgorICAgKG1lcmdlIDg5NWM1YmEgamMvcmV2aXNpb24tcmFuZ2UtdW5wZWVsIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjbG9uZSIgd3JvdGUgc29tZSBwcm9ncmVzcyBtZXNzYWdlcyB0byBzdGFuZGFyZCBvdXRwdXQsIG5vdAorICAgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBkaWQgbm90IHN1cHByZXNzIHRoZW0gd2l0aCB0aGUKKyAgIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uLgorICAgKG1lcmdlIDY0M2Y5MTggamsvY2xvbmUtcHJvZ3Jlc3MtdG8tc3RkZXJyIGxhdGVyIHRvIG1haW50KS4KKworICogImZvcm1hdC1wYXRjaCAtLWZyb209PHdob20+IiBmb3Jnb3QgdG8gb21pdCBhbiB1bm5lY2Vzc2FyeSBpbi1ib2R5CisgICBmcm9tIGxpbmUsIGkuZS4gd2hlbiA8d2hvbT4gaXMgdGhlIHNhbWUgYXMgdGhlIHJlYWwgYXV0aG9yLgorICAgKG1lcmdlIDY2MmNjMzAgamsvZm9ybWF0LXBhdGNoLWZyb20gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHNob3J0bG9nIiB1c2VkIHRvIGNob2tlIGFuZCBkaWUgd2hlbiB0aGVyZSBpcyBhIG1hbGZvcm1lZAorICAgY29tbWl0IChlLmcuIG1pc3NpbmcgYXV0aG9ycyk7IGl0IG5vdyBzaW1wbHkgaWdub3JlcyBzdWNoIGEgY29tbWl0CisgICBhbmQga2VlcHMgZ29pbmcuCisgICAobWVyZ2UgY2Q0ZjA5ZSBqay9zaG9ydGxvZy10b2xlcmF0ZS1icm9rZW4tY29tbWl0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZS1yZWN1cnNpdmUiIGRpZCBub3QgcGFyc2UgaXRzICItLWRpZmYtYWxnb3JpdGhtPSIgY29tbWFuZAorICAgbGluZSBvcHRpb24gY29ycmVjdGx5LgorICAgKG1lcmdlIDY1NjI5MjggamsvZGlmZi1hbGdvIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBydW5uaW5nICJmZXRjaCAtcSIsIGEgbG9uZyBzaWxlbmNlIHdoaWxlIHRoZSBzZW5kZXIgc2lkZQorICAgY29tcHV0ZXMgdGhlIHNldCBvZiBvYmplY3RzIHRvIHNlbmQgY2FuIGJlIG1pc3Rha2VuIGJ5IHByb3hpZXMgYXMKKyAgIGRyb3BwZWQgY29ubmVjdGlvbi4gIFRoZSBzZXJ2ZXIgc2lkZSBoYXMgYmVlbiB0YXVnaHQgdG8gc2VuZCBhCisgICBzbWFsbCBlbXB0eSBtZXNzYWdlcyB0byBrZWVwIHRoZSBjb25uZWN0aW9uIGFsaXZlLgorICAgKG1lcmdlIDExNWRlZGQgamsvdXBsb2FkLXBhY2sta2VlcGFsaXZlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIGhhZCBhIHBvcnRhYmlsaXR5IHJlZ3Jlc3Npb24gaW4gdjEuOC40IHRoYXQgdHJpZ2dlcmVkIGEKKyAgIGJ1ZyBpbiBzb21lIEJTRCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMuCisgICAobWVyZ2UgOTk4NTVkZCBtbS9yZWJhc2UtY29udGludWUtZnJlZWJzZC1XQiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYnJhbmNoIC0tdHJhY2siIGhhZCBhIG1pbm9yIHJlZ3Jlc3Npb24gaW4gdjEuOC4zLjIgYW5kIGxhdGVyCisgICB0aGF0IG1hZGUgaXQgaW1wb3NzaWJsZSB0byBiYXNlIHlvdXIgbG9jYWwgd29yayBvbiBhbnl0aGluZyBidXQgYQorICAgbG9jYWwgYnJhbmNoIG9mIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5IHlvdSBhcmUgdHJhY2tpbmcuCisgICAobWVyZ2UgYjBmNDlmZiBqaC9jaGVja291dC1hdXRvLXRyYWNraW5nIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiB0aGUgd2ViIHNlcnZlciByZXNwb25kcyB3aXRoICI0MDUgTWV0aG9kIE5vdCBBbGxvd2VkIiwgImdpdAorICAgaHR0cC1iYWNrZW5kIiBzaG91bGQgdGVsbCB0aGUgY2xpZW50IHdoYXQgbWV0aG9kcyBhcmUgYWxsb3dlZCB3aXRoCisgICB0aGUgIkFsbG93IiBoZWFkZXIuCisgICAobWVyZ2UgOTI0N2JlMCBiYy9odHRwLWJhY2tlbmQtYWxsb3ctNDA1IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiB0aGVyZSBpcyBubyBzdWZmaWNpZW50IG92ZXJsYXAgYmV0d2VlbiBvbGQgYW5kIG5ldyBoaXN0b3J5CisgICBkdXJpbmcgYSAiZ2l0IGZldGNoIiBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5LCBvYmplY3RzIHRoYXQgdGhlCisgICBzZW5kaW5nIHNpZGUga25vd3MgdGhlIHJlY2VpdmluZyBlbmQgaGFzIHdlcmUgdW5uZWNlc3NhcmlseSBzZW50LgorICAgKG1lcmdlIGYyMWQyYTcgbmQvZmV0Y2gtaW50by1zaGFsbG93IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjdnNzZXJ2ZXIiIGNvbXB1dGVkIHRoZSBwZXJtaXNzaW9uIG1vZGUgYml0cyBpbmNvcnJlY3RseSBmb3IKKyAgIGV4ZWN1dGFibGUgZmlsZXMuCisgICAobWVyZ2UgMWI0OGQ1NiBqYy9jdnNzZXJ2ZXItcGVybS1iaXQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBzZW5kLWVtYWlsIG9idGFpbnMgYW4gZXJyb3IgbWVzc2FnZSB0byBkaWUgd2l0aCB1cG9uCisgICBmYWlsdXJlIHRvIHN0YXJ0IGFuIFNTTCBzZXNzaW9uLCBpdCB0cmllZCB0byByZWFkIHRoZSBlcnJvciBzdHJpbmcKKyAgIGZyb20gYSB3cm9uZyBwbGFjZS4KKyAgIChtZXJnZSA2Y2IwYzg4IGJjL3NlbmQtZW1haWwtc3NsLWRpZS1tZXNzYWdlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAiYWRkIC1pIiBoYXMgc29tZSBjcmlwcGxpbmcgY29kZSB0byB3b3JrIGFyb3VuZCBhbgorICAgQWN0aXZlU3RhdGUgUGVybCBsaW1pdGF0aW9uIGJ1dCBpdCBieSBtaXN0YWtlIGFsc28gdHJpZ2dlcmVkIG9uIEdpdAorICAgZm9yIFdpbmRvd3Mgd2hlcmUgTVNZUyBwZXJsIGlzIHVzZWQuCisgICAobWVyZ2UgZGYxN2U3NyBqcy9hZGQtaS1taW5ndyBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIG1hZGUgc3VyZSB0aGF0IHdlIG5vdGljZSB3aGVuIHRoZSB1c2VyLXN1cHBsaWVkIEdJVF9ESVIgaXMgYWN0dWFsbHkgYQorICAgZ2l0ZmlsZSwgYnV0IGRpZCBub3QgZG8gdGhlIHNhbWUgd2hlbiB0aGUgZGVmYXVsdCAiLmdpdCIgaXMgYQorICAgZ2l0ZmlsZS4KKyAgIChtZXJnZSA0ODdhMmI3IG5kL2dpdC1kaXItcG9pbnRpbmctYXQtZ2l0ZmlsZSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gYW4gb2JqZWN0IGlzIG5vdCBmb3VuZCBhZnRlciBjaGVja2luZyB0aGUgcGFja2ZpbGVzIGFuZCB0aGUKKyAgIGxvb3NlIG9iamVjdCBkaXJlY3RvcnksIHJlYWRfc2hhMV9maWxlKCkgcmUtY2hlY2tzIHRoZSBwYWNrZmlsZXMgdG8KKyAgIHByZXZlbnQgcmFjaW5nIHdpdGggYSBjb25jdXJyZW50IHJlcGFja2VyOyB0ZWFjaCB0aGUgc2FtZSBsb2dpYyB0bworICAgaGFzX3NoYTFfZmlsZSgpLgorICAgKG1lcmdlIDQ1ZThhNzQgamsvaGFzLXNoYTEtZmlsZS1yZXRyeS1wYWNrZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNvbW1pdCAtLWF1dGhvcj0kbmFtZSIsIHdoZW4gJG5hbWUgaXMgbm90IGluIHRoZSBjYW5vbmljYWwKKyAgICJBLiBVLiBUaG9yIDxhdS50aG9yQGV4YW1wbGUueHo+IiBmb3JtYXQsIGxvb2tzIGZvciBhIG1hdGNoaW5nIG5hbWUKKyAgIGZyb20gZXhpc3RpbmcgaGlzdG9yeSwgYnV0IGRpZCBub3QgY29uc3VsdCBtYWlsbWFwIHRvIGdyYWIgdGhlCisgICBwcmVmZXJyZWQgYXV0aG9yIG5hbWUuCisgICAobWVyZ2UgZWExNjc5NCBhcC9jb21taXQtYXV0aG9yLW1haWxtYXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxzLWZpbGVzIC1rIiBuZWVkcyB0byBjcmF3bCBvbmx5IHRoZSBwYXJ0IG9mIHRoZSB3b3JraW5nIHRyZWUKKyAgIHRoYXQgbWF5IG92ZXJsYXAgdGhlIHBhdGhzIGluIHRoZSBpbmRleCB0byBmaW5kIGtpbGxlZCBmaWxlcywgYnV0CisgICBzaGFyZWQgY29kZSB3aXRoIHRoZSBsb2dpYyB0byBmaW5kIGFsbCB0aGUgdW50cmFja2VkIGZpbGVzLCB3aGljaAorICAgbWFkZSBpdCB1bm5lY2Vzc2FyaWx5IGluZWZmaWNpZW50LgorICAgKG1lcmdlIDY4MGJlMDQgamMvbHMtZmlsZXMta2lsbGVkLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNob3J0ZW5lZCBjb21taXQgb2JqZWN0IG5hbWVzIGluIHRoZSBpbnNuIHNoZWV0IHRoYXQgaXMgcHJlcGFyZWQgYXQgdGhlCisgICBiZWdpbm5pbmcgb2YgYSAicmViYXNlIC1pIiBzZXNzaW9uIGNhbiBiZWNvbWUgYW1iaWd1b3VzIGFzIHRoZQorICAgcmViYXNpbmcgcHJvZ3Jlc3NlcyBhbmQgdGhlIHJlcG9zaXRvcnkgZ2FpbnMgbW9yZSBjb21taXRzLiBNYWtlCisgICBzdXJlIHRoZSBpbnRlcm5hbCByZWNvcmQgaXMga2VwdCB3aXRoIGZ1bGwgNDAtaGV4IG9iamVjdCBuYW1lcy4KKyAgIChtZXJnZSA3NWM2OTc2IGVzL3JlYmFzZS1pLW5vLWFiYnJldiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiBpbnRlcm5hbGx5IHVzZWQgdGhlIG1lcmdlIG1hY2hpbmVyeQorICAgYW5kIGFzIGEgc2lkZSBlZmZlY3QgbGVmdCB0aGUgbWVyZ2Ugc3VtbWFyeSBtZXNzYWdlIGluIHRoZSBsb2csIGJ1dAorICAgd2hlbiByZWJhc2luZyB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGUgbWVyZ2Ugc3VtbWFyeS4KKyAgIChtZXJnZSBhOWY3MzljIHJ0L3JlYmFzZS1wLW5vLW1lcmdlLXN1bW1hcnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGNhbGwgdG8geHJlYWQoKSB3YXMgdXNlZCB3aXRob3V0IGEgbG9vcCBhcm91bmQgaXQgdG8gY29wZSB3aXRoIHNob3J0CisgICByZWFkcyBpbiB0aGUgY29kZXBhdGggdG8gc3RyZWFtIG5ldyBjb250ZW50cyB0byBhIHBhY2suCisgICAobWVyZ2UgZTkyNTI3YyBqcy94cmVhZC1pbi1mdWxsIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIGZvcmdvdCB0aGF0IHRoZSBjb21tZW50IGNoYXJhY3RlciBpcworICAgY29uZmlndXJhYmxlIHdoaWxlIHJlYWRpbmcgaXRzIGluc24gc2hlZXQuCisgICAobWVyZ2UgN2JjYTdhZiBlcy9yZWJhc2UtaS1yZXNwZWN0LWNvcmUtY29tbWVudGNoYXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWFpbG1hcCBzdXBwb3J0IGNvZGUgcmVhZCBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHdoZW4gdGhlCisgICBtYWlsbWFwIGZpbGUgZW5kZWQgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUuCisgICAobWVyZ2UgZjk3MmExNiBqay9tYWlsbWFwLWluY29tcGxldGUtbGluZSBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHVzZWQgdG8gc2VuZCBhIGxhcmdlIHJlcXVlc3QgdG8gcmVhZCgyKS93cml0ZSgyKSBhcyBhIHNpbmdsZQorICAgc3lzdGVtIGNhbGwsIHdoaWNoIHdhcyBiYWQgZnJvbSB0aGUgbGF0ZW5jeSBwb2ludCBvZiB2aWV3IHdoZW4KKyAgIHRoZSBvcGVyYXRpb24gbmVlZHMgdG8gYmUga2lsbGVkLCBhbmQgYWxzbyB0cmlnZ2VyZWQgYW4gZXJyb3Igb24KKyAgIGJyb2tlbiA2NC1iaXQgc3lzdGVtcyB0aGF0IHJlZnVzZSB0byByZWFkIG9yIHdyaXRlIG1vcmUgdGhhbiAyR0IKKyAgIGluIG9uZSBnby4KKyAgIChtZXJnZSBhNDg3OTE2IHNwL2NsaXAtcmVhZC13cml0ZS10by04bWIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoIiB0aGF0IGF1dG8tZm9sbG93ZWQgdGFncyBpbmNvcnJlY3RseSByZXVzZWQgdGhlCisgICBjb25uZWN0aW9uIHdpdGggR2l0LWF3YXJlIHRyYW5zcG9ydCBoZWxwZXIgKGxpa2UgdGhlIHNhbXBsZSAiZXh0OjoiCisgICBoZWxwZXIgc2hpcHBlZCB3aXRoIEdpdCkuCisgICAobWVyZ2UgMGY3M2Y4YiBqYy90cmFuc3BvcnQtZG8tbm90LXVzZS1jb25uZWN0LXR3aWNlLWluLWZldGNoIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLS1mdWxsLWRpZmYgLS0gPHBhdGhzcGVjPiIgc2hvd2VkIGEgaHVnZSBkaWZmIGZvciBwYXRocworICAgb3V0c2lkZSB0aGUgZ2l2ZW4gPHBhdGhzcGVjPiBmb3IgZWFjaCBjb21taXQsIGluc3RlYWQgb2Ygc2hvd2luZworICAgdGhlIGNoYW5nZSByZWxhdGl2ZSB0byB0aGUgcGFyZW50IG9mIHRoZSBjb21taXQuICAiZ2l0IHJlZmxvZyAtcCIKKyAgIGhhZCBhIHNpbWlsYXIgcHJvYmxlbS4KKyAgIChtZXJnZSA4MzhmOWExIHRyL2xvZy1mdWxsLWRpZmYta2VlcC10cnVlLXBhcmVudHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTZXR0aW5nIGEgc3VibW9kdWxlLioucGF0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHRydWUgKHdpdGhvdXQKKyAgIGdpdmluZyAiPSB2YWx1ZSIpIGNhdXNlZCBHaXQgdG8gc2VnZmF1bHQuCisgICAobWVyZ2UgNGIwNTQ0MCBqbC9zb21lLXN1Ym1vZHVsZS1jb25maWctYXJlLW5vdC1ib29sZWFuIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiICh0aGVyZSBjb3VsZCBiZSBvdGhlcnMsIGFzIHRoZSByb290IGNhdXNlIGlzIHByZXR0eQorICAgZ2VuZXJpYykgZmVkIGEgcmFuZG9tLCBkYXRhIGRlcGVuZGVudCBzdHJpbmcgdG8gJ2VjaG8nIGFuZAorICAgZXhwZWN0ZWQgaXQgdG8gY29tZSBvdXQgbGl0ZXJhbGx5LCBjb3JydXB0aW5nIGl0cyBlcnJvciBtZXNzYWdlLgorICAgKG1lcmdlIDg5YjAyMzAgbW0vbm8tc2hlbGwtZXNjYXBlLWluLWRpZS1tZXNzYWdlIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBwZW9wbGUgc3RpbGwgdXNlIHJhdGhlciBvbGQgdmVyc2lvbnMgb2YgYmFzaCwgd2hpY2ggY2Fubm90CisgICBncm9rIHNvbWUgY29uc3RydWN0cyBsaWtlICdwcmludGYgLXYgdmFybmFtZScgd2hpY2ggdGhlIHByb21wdCBhbmQKKyAgIGNvbXBsZXRpb24gY29kZSBzdGFydGVkIHRvIHVzZSByZWNlbnRseS4KKyAgIChtZXJnZSBhNDRhYTY5IGJjL2NvbXBsZXRpb24tZm9yLWJhc2gtMy4wIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSB0byByZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGJsb2Igb2JqZWN0IGRpZCBub3QgY29tcGlsZSBvbgorICAgcGxhdGZvcm1zIHdpdGggZmdldGMoKSBldGMuIGltcGxlbWVudGVkIGFzIG1hY3Jvcy4KKyAgIChtZXJnZSA0OWQ2Y2ZhIGh2L2NvbmZpZy1mcm9tLWJsb2IgbGF0ZXIgdG8gbWFpbnQtMS44LjMpLgorCisgKiBUaGUgcmVjZW50ICJzaG9ydC1jdXQgY2xvbmUgY29ubmVjdGl2aXR5IGNoZWNrIiB0b3BpYyBicm9rZSBhCisgICBzaGFsbG93IHJlcG9zaXRvcnkgd2hlbiBhIGZldGNoIG9wZXJhdGlvbiB0cmllcyB0byBhdXRvLWZvbGxvdyB0YWdzLgorICAgKG1lcmdlIDZkYThiZGMgbmQvZmV0Y2gtcGFjay1zaGFsbG93LWZpeCBsYXRlciB0byBtYWludC0xLjguMykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNGI4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4wLnR4dApAQCAtMCwwICsxLDM0NSBAQAorR2l0IHYxLjkuMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICRjbWQgJGFyZ3MiIHVzZWQgdG8gdHJlYXQgIiRjbWQgJGFyZ3MiIHRoZSBzYW1lCit3YXkgInNzaCIgZGlkLCBjb25jYXRlbmF0aW5nIHRoZW0gaW50byBhIHNpbmdsZSBzdHJpbmcgYW5kIGxldHRpbmcgdGhlCitzaGVsbCB1bnF1b3RlLiBDYXJlbGVzcyB1c2VycyB3aG8gZm9yZ2V0IHRvIHN1ZmZpY2llbnRseSBxdW90ZSAkYXJncworZ2V0IHRoZWlyIGFyZ3VtZW50IHNwbGl0IGF0ICRJRlMgd2hpdGVzcGFjZXMgYnkgdGhlIHNoZWxsLCBhbmQgZ290Cit1bmV4cGVjdGVkIHJlc3VsdHMgZHVlIHRvIHRoaXMuIFN0YXJ0aW5nIGZyb20gdGhpcyByZWxlYXNlLCB0aGUKK2NvbW1hbmQgbGluZSBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIHNoZWxsLCBpZiBpdCBoYXMgYW4gYXJndW1lbnQuCisKK1JlYWQtb25seSBzdXBwb3J0IGZvciBleHBlcmltZW50YWwgbG9vc2Utb2JqZWN0IGZvcm1hdCwgaW4gd2hpY2ggdXNlcnMKK2NvdWxkIG9wdGlvbmFsbHkgY2hvb3NlIHRvIHdyaXRlIHRoZWlyIGxvb3NlIG9iamVjdHMgZm9yIGEgc2hvcnQKK3doaWxlIGJldHdlZW4gdjEuNC4zIGFuZCB2MS41LjMgZXJhLCBoYXMgYmVlbiBkcm9wcGVkLgorCitUaGUgbWVhbmluZ3Mgb2YgdGhlICItLXRhZ3MiIG9wdGlvbiB0byAiZ2l0IGZldGNoIiBoYXMgY2hhbmdlZDsgdGhlCitjb21tYW5kIGZldGNoZXMgdGFncyBfaW4gYWRkaXRpb24gdG9fIHdoYXQgaXMgZmV0Y2hlZCBieSB0aGUgc2FtZQorY29tbWFuZCBsaW5lIHdpdGhvdXQgdGhlIG9wdGlvbi4KKworVGhlIHdheSAiZ2l0IHB1c2ggJHRoZXJlICR3aGF0IiBpbnRlcnByZXRzIHRoZSAkd2hhdCBwYXJ0IGdpdmVuIG9uIHRoZQorY29tbWFuZCBsaW5lLCB3aGVuIGl0IGRvZXMgbm90IGhhdmUgYSBjb2xvbiB0aGF0IGV4cGxpY2l0bHkgdGVsbHMgdXMKK3doYXQgcmVmIGF0IHRoZSAkdGhlcmUgcmVwb3NpdG9yeSBpcyB0byBiZSB1cGRhdGVkLCBoYXMgYmVlbiBlbmhhbmNlZC4KKworQSBoYW5kZnVsIG9mIGFuY2llbnQgY29tbWFuZHMgdGhhdCBoYXZlIGxvbmcgYmVlbiBkZXByZWNhdGVkIGFyZQorZmluYWxseSBnb25lIChyZXBvLWNvbmZpZywgdGFyLXRyZWUsIGxvc3QtZm91bmQsIGFuZCBwZWVrLXJlbW90ZSkuCisKKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcyAoZm9yIEdpdCAyLjAuMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgSW4gR2l0IDIuMCwgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgdG8gdGhlICJzaW1wbGUiCitzZW1hbnRpY3MsIHdoaWNoIHB1c2hlczoKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGFuZCBvbmx5CisgICB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdCByZW1vdGUKKyAgIGJyYW5jaCwgaWYgeW91IGFyZSBwdXNoaW5nIHRvIHRoZSBzYW1lIHJlbW90ZSBhcyB5b3UgZmV0Y2ggZnJvbTsgb3IKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGlmIHlvdQorICAgYXJlIHB1c2hpbmcgdG8gYSByZW1vdGUgdGhhdCBpcyBub3Qgd2hlcmUgeW91IHVzdWFsbHkgZmV0Y2ggZnJvbS4KKworVXNlIHRoZSB1c2VyIHByZWZlcmVuY2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAicHVzaC5kZWZhdWx0IiB0bworY2hhbmdlIHRoaXMuICBJZiB5b3UgYXJlIGFuIG9sZC10aW1lciB3aG8gaXMgdXNlZCB0byB0aGUgIm1hdGNoaW5nIgorc2VtYW50aWNzLCB5b3UgY2FuIHNldCB0aGUgdmFyaWFibGUgdG8gIm1hdGNoaW5nIiB0byBrZWVwIHRoZQordHJhZGl0aW9uYWwgYmVoYXZpb3VyLiAgSWYgeW91IHdhbnQgdG8gbGl2ZSBpbiB0aGUgZnV0dXJlIGVhcmx5LCB5b3UKK2NhbiBzZXQgaXQgdG8gInNpbXBsZSIgdG9kYXkgd2l0aG91dCB3YWl0aW5nIGZvciBHaXQgMi4wLgorCitXaGVuICJnaXQgYWRkIC11IiAoYW5kICJnaXQgYWRkIC1BIikgaXMgcnVuIGluc2lkZSBhIHN1YmRpcmVjdG9yeSBhbmQKK2RvZXMgbm90IHNwZWNpZnkgd2hpY2ggcGF0aHMgdG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0Cit3aWxsIG9wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIGluIEdpdCAyLjAgZm9yIGNvbnNpc3RlbmN5Cit3aXRoICJnaXQgY29tbWl0IC1hIiBhbmQgb3RoZXIgY29tbWFuZHMuICBUaGVyZSB3aWxsIGJlIG5vCittZWNoYW5pc20gdG8gbWFrZSBwbGFpbiAiZ2l0IGFkZCAtdSIgYmVoYXZlIGxpa2UgImdpdCBhZGQgLXUgLiIuCitDdXJyZW50IHVzZXJzIG9mICJnaXQgYWRkIC11IiAod2l0aG91dCBhIHBhdGhzcGVjKSBzaG91bGQgc3RhcnQKK3RyYWluaW5nIHRoZWlyIGZpbmdlcnMgdG8gZXhwbGljaXRseSBzYXkgImdpdCBhZGQgLXUgLiIKK2JlZm9yZSBHaXQgMi4wIGNvbWVzLiAgQSB3YXJuaW5nIGlzIGlzc3VlZCB3aGVuIHRoZXNlIGNvbW1hbmRzIGFyZQorcnVuIHdpdGhvdXQgYSBwYXRoc3BlYyBhbmQgd2hlbiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIG91dHNpZGUgdGhlCitjdXJyZW50IGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUgYmVoYXZpb3VyIGluIEdpdCAyLjAgd2lsbCBiZSBkaWZmZXJlbnQKK2Zyb20gdG9kYXkncyB2ZXJzaW9uIGluIHN1Y2ggYSBzaXR1YXRpb24uCisKK0luIEdpdCAyLjAsICJnaXQgYWRkIDxwYXRoPiIgd2lsbCBiZWhhdmUgYXMgImdpdCBhZGQgLUEgPHBhdGg+Iiwgc28KK3RoYXQgImdpdCBhZGQgZGlyLyIgd2lsbCBub3RpY2UgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB0aGUgZGlyZWN0b3J5CithbmQgcmVjb3JkIHRoZSByZW1vdmFsLiAgVmVyc2lvbnMgYmVmb3JlIEdpdCAyLjAsIGluY2x1ZGluZyB0aGlzCityZWxlYXNlLCB3aWxsIGtlZXAgaWdub3JpbmcgcmVtb3ZhbHMsIGJ1dCB0aGUgdXNlcnMgd2hvIHJlbHkgb24gdGhpcworYmVoYXZpb3VyIGFyZSBlbmNvdXJhZ2VkIHRvIHN0YXJ0IHVzaW5nICJnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGg+Igorbm93IGJlZm9yZSAyLjAgaXMgcmVsZWFzZWQuCisKK1RoZSBkZWZhdWx0IHByZWZpeCBmb3IgImdpdCBzdm4iIHdpbGwgY2hhbmdlIGluIEdpdCAyLjAuICBGb3IgYSBsb25nCit0aW1lLCAiZ2l0IHN2biIgY3JlYXRlZCBpdHMgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGRpcmVjdGx5IHVuZGVyCityZWZzL3JlbW90ZXMsIGJ1dCBpdCB3aWxsIHBsYWNlIHRoZW0gdW5kZXIgcmVmcy9yZW1vdGVzL29yaWdpbi8gdW5sZXNzCitpdCBpcyB0b2xkIG90aGVyd2lzZSB3aXRoIGl0cyAtLXByZWZpeCBvcHRpb24uCisKKworVXBkYXRlcyBzaW5jZSB2MS44LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvcmVpZ24gaW50ZXJmYWNlcywgc3Vic3lzdGVtcyBhbmQgcG9ydHMuCisKKyAqIFRoZSBIVFRQIHRyYW5zcG9ydCwgd2hlbiB0YWxraW5nIEdTUy1OZWdvdGlhdGUsIHVzZXMgIjEwMAorICAgQ29udGludWUiIHJlc3BvbnNlIHRvIGF2b2lkIGhhdmluZyB0byByZXdpbmQgYW5kIHJlc2VuZCBhIGxhcmdlCisgICBwYXlsb2FkLCB3aGljaCBtYXkgbm90IGJlIGFsd2F5cyBkb2FibGUuCisKKyAqIFZhcmlvdXMgYnVnZml4ZXMgdG8gcmVtb3RlLWJ6ciBhbmQgcmVtb3RlLWhnIChpbiBjb250cmliLykuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgaXMgYXdhcmUgb2YgTWlyQlNEIG5vdy4KKworICogVmFyaW91cyAiZ2l0IHA0IiwgImdpdCBzdm4iIGFuZCAiZ2l0ayIgdXBkYXRlcy4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogRmV0Y2hpbmcgZnJvbSBhIHNoYWxsb3dseS1jbG9uZWQgcmVwb3NpdG9yeSB1c2VkIHRvIGJlIGZvcmJpZGRlbiwKKyAgIHByaW1hcmlseSBiZWNhdXNlIHRoZSBjb2RlcGF0aHMgaW52b2x2ZWQgd2VyZSBub3QgY2FyZWZ1bGx5IHZldHRlZAorICAgYW5kIHdlIGRpZCBub3QgYm90aGVyIHN1cHBvcnRpbmcgc3VjaCB1c2FnZS4gVGhpcyByZWxlYXNlIGF0dGVtcHRzCisgICB0byBhbGxvdyBvYmplY3QgdHJhbnNmZXIgb3V0IG9mIGEgc2hhbGxvd2x5LWNsb25lZCByZXBvc2l0b3J5IGluIGEKKyAgIG1vcmUgY29udHJvbGxlZCB3YXkgKGkuZS4gdGhlIHJlY2VpdmVyIGJlY29tZXMgYSBzaGFsbG93IHJlcG9zaXRvcnkKKyAgIHdpdGggYSB0cnVuY2F0ZWQgaGlzdG9yeSkuCisKKyAqIEp1c3QgbGlrZSB3ZSBnaXZlIGEgcmVhc29uYWJsZSBkZWZhdWx0IGZvciAibGVzcyIgdmlhIHRoZSBMRVNTCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2Ugbm93IHNwZWNpZnkgYSByZWFzb25hYmxlIGRlZmF1bHQgZm9yICJsdiIKKyAgIHZpYSB0aGUgIkxWIiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHNwYXduaW5nIHRoZSBwYWdlci4KKworICogVHdvLWxldmVsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMgaW4gImJyYW5jaC4qIiBhbmQgInJlbW90ZS4qIgorICAgaGllcmFyY2hpZXMsIHdob3NlIHZhcmlhYmxlcyBhcmUgcHJlZG9taW5hbnRseSB0aHJlZS1sZXZlbCwgd2VyZQorICAgbm90IGNvbXBsZXRlZCBieSBoaXR0aW5nIGEgPFRBQj4gaW4gYmFzaCBhbmQgenNoIGNvbXBsZXRpb25zLgorCisgKiBGZXRjaGluZyBhICdmcm90eicgYnJhbmNoIHdpdGggImdpdCBmZXRjaCIsIHdoaWxlIGEgJ2Zyb3R6L25pdGZvbCcKKyAgIHJlbW90ZS10cmFja2luZyBicmFuY2ggZnJvbSBhbiBlYXJsaWVyIGZldGNoIHdhcyBzdGlsbCB0aGVyZSwgd291bGQKKyAgIGVycm9yIG91dCwgcHJpbWFyaWx5IGJlY2F1c2UgdGhlIGNvbW1hbmQgd2FzIG5vdCB0b2xkIHRoYXQgaXQgaXMKKyAgIGFsbG93ZWQgdG8gbG9zZSBhbnkgaW5mb3JtYXRpb24gb24gb3VyIHNpZGUuICAiZ2l0IGZldGNoIC0tcHJ1bmUiCisgICBub3cgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlICdmcm90ei9uaXRmb2wnIHRvIG1ha2Ugcm9vbSBmb3IgZmV0Y2hpbmcgYW5kCisgICBzdG9yaW5nIHRoZSAnZnJvdHonIHJlbW90ZS10cmFja2luZyBicmFuY2guCisKKyAqICJkaWZmLm9yZGVyZmlsZT08ZmlsZT4iIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8KKyAgIHByZXRlbmQgYXMgaWYgdGhlICItTzxmaWxlPiIgb3B0aW9uIHdlcmUgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZAorICAgbGluZSBvZiAiZ2l0IGRpZmYiLCBldGMuCisKKyAqIFRoZSBuZWdhdGl2ZSBwYXRoc3BlYyBzeW50YXggYWxsb3dzICJnaXQgbG9nIC0tIC4gJzohZGlyJyIgdG8gdGVsbAorICAgdXMgIkkgYW0gaW50ZXJlc3RlZCBpbiBldmVyeXRoaW5nIGJ1dCAnZGlyJyBkaXJlY3RvcnkiLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBzaG93cyBob3cgbWFueSBkaWZmZXJlbnQgcGF0aHMgdGhlcmUgYXJlIGluIHRvdGFsLAorICAgYW5kIGhvdyBtYW55IG9mIHRoZW0gaGF2ZSBiZWVuIHNob3duIHNvIGZhciwgdG8gaW5kaWNhdGUgcHJvZ3Jlc3MuCisKKyAqICJnaXQgcHVzaCBvcmlnaW4gbWFzdGVyIiB1c2VkIHRvIHB1c2ggb3VyICdtYXN0ZXInIGJyYW5jaCB0byB1cGRhdGUKKyAgIHRoZSAnbWFzdGVyJyBicmFuY2ggYXQgdGhlICdvcmlnaW4nIHJlcG9zaXRvcnkuICBUaGlzIGhhcyBiZWVuCisgICBlbmhhbmNlZCB0byB1c2UgdGhlIHNhbWUgcmVmIG1hcHBpbmcgImdpdCBwdXNoIG9yaWdpbiIgd291bGQgdXNlIHRvCisgICBkZXRlcm1pbmUgd2hhdCByZWYgYXQgdGhlICdvcmlnaW4nIHRvIGJlIHVwZGF0ZWQgd2l0aCBvdXIgJ21hc3RlcicuCisgICBGb3IgZXhhbXBsZSwgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24KKworICAgW3JlbW90ZSAib3JpZ2luIl0KKyAgICAgIHB1c2ggPSByZWZzL2hlYWRzLyo6cmVmcy9yZXZpZXcvKgorCisgICB0aGF0IHdvdWxkIGNhdXNlICJnaXQgcHVzaCBvcmlnaW4iIHRvIHB1c2ggb3V0IG91ciBsb2NhbCBicmFuY2hlcworICAgdG8gY29ycmVzcG9uZGluZyByZWZzIHVuZGVyIHJlZnMvcmV2aWV3LyBoaWVyYXJjaHkgYXQgJ29yaWdpbicsCisgICAiZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciIgd291bGQgdXBkYXRlICdyZWZzL3Jldmlldy9tYXN0ZXInIG92ZXIKKyAgIHRoZXJlLiAgQWx0ZXJuYXRpdmVseSwgaWYgcHVzaC5kZWZhdWx0IGlzIHNldCB0byAndXBzdHJlYW0nIGFuZCBvdXIKKyAgICdtYXN0ZXInIGlzIHNldCB0byBpbnRlZ3JhdGUgd2l0aCAndG9waWMnIGZyb20gdGhlICdvcmlnaW4nIGJyYW5jaCwKKyAgIHJ1bm5pbmcgImdpdCBwdXNoIG9yaWdpbiIgd2hpbGUgb24gb3VyICdtYXN0ZXInIHdvdWxkIHVwZGF0ZSB0aGVpcgorICAgJ3RvcGljJyBicmFuY2gsIGFuZCBydW5uaW5nICJnaXQgcHVzaCBvcmlnaW4gbWFzdGVyIiB3aGlsZSBvbiBhbnkKKyAgIG9mIG91ciBicmFuY2hlcyBkb2VzIHRoZSBzYW1lLgorCisgKiAiZ2l0d2ViIiBsZWFybmVkIHRvIHRyZWF0IHJlZiBoaWVyYXJjaGllcyBvdGhlciB0aGFuIHJlZnMvaGVhZHMgYXMKKyAgIGlmIHRoZXkgYXJlIGFkZGl0aW9uYWwgYnJhbmNoIG5hbWVzcGFjZXMgKGUuZy4gcmVmcy9jaGFuZ2VzLyBpbgorICAgR2Vycml0KS4KKworICogImdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9Li4uIiBsZWFybmVkIGEgZmV3IGZvcm1hdHRpbmcgZGlyZWN0aXZlczsKKyAgIGUuZy4gIiUoY29sb3I6cmVkKSUoSEVBRCklKGNvbG9yOnJlc2V0KSAlKHJlZm5hbWU6c2hvcnQpICUoc3ViamVjdCkiLgorCisgKiBUaGUgY29tbWFuZCBzdHJpbmcgZ2l2ZW4gdG8gImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIgaXMgcGFzc2VkCisgICBkaXJlY3RseSB0byB0aGUgc2hlbGwsIHdpdGhvdXQgYmVpbmcgZXZhbCdlZC4gIFRoaXMgaXMgYSBiYWNrd2FyZAorICAgaW5jb21wYXRpYmxlIGNoYW5nZSB0aGF0IG1heSBicmVhayBleGlzdGluZyB1c2Vycy4KKworICogImdpdCBsb2ciIGFuZCBmcmllbmRzIGxlYXJuZWQgdGhlICItLWV4Y2x1ZGU9PGdsb2I+IiBvcHRpb24sIHRvCisgICBhbGxvdyBwZW9wbGUgdG8gc2F5ICJsaXN0IGhpc3Rvcnkgb2YgYWxsIGJyYW5jaGVzIGV4Y2VwdCB0aG9zZSB0aGF0CisgICBtYXRjaCB0aGlzIHBhdHRlcm4iIHdpdGggImdpdCBsb2cgLS1leGNsdWRlPScqLyonIC0tYnJhbmNoZXMiLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IiBsZWFybmVkIGEgbmV3ICItLXN0dWNrLWxvbmciIG9wdGlvbiB0bworICAgaGVscCBzY3JpcHRzIHBhcnNlIG9wdGlvbnMgd2l0aCBhbiBvcHRpb25hbCBwYXJhbWV0ZXIuCisKKyAqIFRoZSAiLS10YWdzIiBvcHRpb24gdG8gImdpdCBmZXRjaCIgbm8gbG9uZ2VyIHRlbGxzIHRoZSBjb21tYW5kIHRvCisgICBmZXRjaCBfb25seV8gdGhlIHRhZ3MuIEl0IGluc3RlYWQgZmV0Y2hlcyB0YWdzIF9pbiBhZGRpdGlvbiB0b18KKyAgIHdoYXQgYXJlIGZldGNoZWQgYnkgdGhlIHNhbWUgY29tbWFuZCBsaW5lIHdpdGhvdXQgdGhlIG9wdGlvbi4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogV2hlbiBwYXJzaW5nIGEgNDAtaGV4IHN0cmluZyBpbnRvIHRoZSBvYmplY3QgbmFtZSwgdGhlIHN0cmluZyBpcworICAgY2hlY2tlZCB0byBzZWUgaWYgaXQgY2FuIGJlIGludGVycHJldGVkIGFzIGEgcmVmIHNvIHRoYXQgYSB3YXJuaW5nCisgICBjYW4gYmUgZ2l2ZW4gZm9yIGFtYmlndWl0eS4gVGhlIGNvZGUga2lja2VkIGluIGV2ZW4gd2hlbiB0aGUKKyAgIGNvcmUud2FybmFtYmlndW91c3JlZnMgaXMgc2V0IHRvIGZhbHNlIHRvIHNxdWVsY2ggdGhpcyB3YXJuaW5nLCBpbgorICAgd2hpY2ggY2FzZSB0aGUgY3ljbGVzIHNwZW50IHRvIGxvb2sgYXQgdGhlIHJlZiBuYW1lc3BhY2Ugd2VyZSBhbgorICAgZXhwZW5zaXZlIG5vLW9wLCBhcyB0aGUgcmVzdWx0IHdhcyBkaXNjYXJkZWQgd2l0aG91dCBiZWluZyB1c2VkLgorCisgKiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgdGhlIHBhY2tmaWxlcyBoYXMgYmVlbiB1cGRhdGVkOyBpdCB1c2VkIHRvCisgICBiZSBiYXNlZCBvbiB0aGUgZW51bWVyYXRpb24gb2YgbmFtZXMgb2YgdGhlIG9iamVjdHMgdGhhdCBhcmUKKyAgIGNvbnRhaW5lZCBpbiB0aGUgcGFjaywgYnV0IG5vdyBpdCBhbHNvIGRlcGVuZHMgb24gaG93IHRoZSBwYWNrZWQKKyAgIHJlc3VsdCBpcyByZXByZXNlbnRlZC0tcGFja2luZyB0aGUgc2FtZSBzZXQgb2Ygb2JqZWN0cyB1c2luZworICAgZGlmZmVyZW50IHNldHRpbmdzIChvciBkZWx0YSBvcmRlcikgd291bGQgcHJvZHVjZSBhIHBhY2sgd2l0aAorICAgZGlmZmVyZW50IG5hbWUuCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBtb2RlIHVzZWQgdG8gdW5uZWNlc3NhcmlseSBhdHRlbXB0IHRvIHJlYWQKKyAgIHRoZSBpbmRleCB3aGVuIHRoZXJlIGlzIG9uZS4KKworICogVGhlIGRlcHJlY2F0ZWQgcGFyc2Utb3B0aW9ucyBtYWNybyBPUFRfQk9PTEVBTiBoYXMgYmVlbiByZW1vdmVkOworICAgdXNlIE9QVF9CT09MIG9yIE9QVF9DT1VOVFVQIGluIG5ldyBjb2RlLgorCisgKiBBIGZldyBkdXBsaWNhdGUgaW1wbGVtZW50YXRpb25zIG9mIHByZWZpeC9zdWZmaXggc3RyaW5nIGNvbXBhcmlzb24KKyAgIGZ1bmN0aW9ucyBoYXZlIGJlZW4gdW5pZmllZCB0byBzdGFydHNfd2l0aCgpIGFuZCBlbmRzX3dpdGgoKS4KKworICogVGhlIG5ldyBQRVJMTElCX0VYVFJBIG1ha2VmaWxlIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKKyAgIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgUGVybCBtb2R1bGVzIChlLmcuIHRoZSBvbmVzIG5lY2Vzc2FyeSB0byBydW4KKyAgIGdpdC1zdm4pIGFyZSBpbnN0YWxsZWQgb24gdGhlIHBsYXRmb3JtIHdoZW4gYnVpbGRpbmcuCisKKyAqICJnaXQgbWVyZ2UtYmFzZSIgbGVhcm5lZCB0aGUgIi0tZm9yay1wb2ludCIgbW9kZSwgdGhhdCBpbXBsZW1lbnRzCisgICB0aGUgc2FtZSBsb2dpYyB1c2VkIGluICJnaXQgcHVsbCAtLXJlYmFzZSIgdG8gZmluZCBhIHN1aXRhYmxlIGZvcmsKKyAgIHBvaW50IG91dCBvZiB0aGUgcmVmbG9nIGVudHJpZXMgZm9yIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHRoZQorICAgd29yayBoYXMgYmVlbiBiYXNlZCBvbi4gICJnaXQgcmViYXNlIiBoYXMgdGhlIHNhbWUgbG9naWMgdGhhdCBjYW4gYmUKKyAgIHRyaWdnZXJlZCB3aXRoIHRoZSAiLS1mb3JrLXBvaW50IiBvcHRpb24uCisKKyAqIEEgdGhpcmQtcGFydHkgInJlY2VpdmUtcGFjayIgKHRoZSByZXNwb25kZXIgdG8gImdpdCBwdXNoIikgY2FuCisgICBhZHZlcnRpc2UgdGhlICJuby10aGluIiBjYXBhYmlsaXR5IHRvIHRlbGwgImdpdCBwdXNoIiBub3QgdG8gdXNlCisgICB0aGUgdGhpbi1wYWNrIG9wdGltaXphdGlvbi4gT3VyIHJlY2VpdmUtcGFjayBoYXMgYWx3YXlzIGJlZW4KKyAgIGNhcGFibGUgb2YgYWNjZXB0aW5nIGFuZCBmYXR0ZW5pbmcgYSB0aGluLXBhY2ssIGFuZCB3aWxsIGNvbnRpbnVlCisgICBub3QgdG8gYXNrICJnaXQgcHVzaCIgdG8gdXNlIGEgbm9uLXRoaW4gcGFjay4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS44LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjguNSBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJyBub3RlcworZm9yIGRldGFpbHMpLgorCisgKiBUaGUgcGF0aHNwZWMgbWF0Y2hpbmcgY29kZSwgd2hpbGUgY29tcGFyaW5nIHR3byB0cmVlcyAoZS5nLiAiZ2l0CisgICBkaWZmIEEgQiAtLSBwYXRoMSBwYXRoMiIpIHdhcyB0b28gYWdncmVzc2l2ZSBhbmQgZmFpbGVkIHRvIG1hdGNoCisgICBzb21lIHBhdGhzIHdoZW4gbXVsdGlwbGUgcGF0aHNwZWNzIHdlcmUgaW52b2x2ZWQuCisKKyAqICJnaXQgcmVwYWNrIC0tbWF4LXBhY2stc2l6ZT04ZyIgc3RvcHBlZCBiZWluZyBwYXJzZWQgY29ycmVjdGx5IHdoZW4KKyAgIHRoZSBjb21tYW5kIHdhcyByZWltcGxlbWVudGVkIGluIEMuCisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIGluIHYxLjguNC54IHRvICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIiB3aXRoCisgICBuZWdhdGl2ZSByZWYgaGFkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbi4KKyAgIChtZXJnZSAyMDBhYmU3IGprL21hcmstZWRnZXMtdW5pbnRlcmVzdGluZyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcmVjZW50IHVwZGF0ZSB0byAiZ2l0IHNlbmQtZW1haWwiIGJyb2tlIHBsYXRmb3JtcyB3aGVyZQorICAgL2V0Yy9zc2wvY2VydHMvIGRpcmVjdG9yeSBleGlzdHMgYnV0IGNhbm5vdCBiZSB1c2VkIGFzIFNTTF9jYV9wYXRoCisgICAoZS5nLiBGZWRvcmEgcmF3aGlkZSkuCisKKyAqIEEgaGFuZGZ1bCBvZiBidWdzIGFyb3VuZCBpbnRlcnByZXRpbmcgJGJyYW5jaEB7dXBzdHJlYW19IG5vdGF0aW9uCisgICBhbmQgaXRzIGxvb2thbGlrZSwgd2hlbiAkYnJhbmNoIHBhcnQgaGFzIGludGVyZXN0aW5nIGNoYXJhY3RlcnMsCisgICBlLmcuICJAIiwgYW5kICI6IiwgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNsb25lIiB3b3VsZCBmYWlsIHRvIGNsb25lIGZyb20gYSByZXBvc2l0b3J5IHRoYXQgaGFzIGEgcmVmCisgICBkaXJlY3RseSB1bmRlciAicmVmcy8iLCBlLmcuICJyZWZzL3N0YXNoIiwgYmVjYXVzZSBkaWZmZXJlbnQKKyAgIHZhbGlkYXRpb24gcGF0aHMgZG8gZGlmZmVyZW50IHRoaW5ncyBvbiBzdWNoIGEgcmVmbmFtZS4gIExvb3NlbiB0aGUKKyAgIGNsaWVudCBzaWRlJ3MgdmFsaWRhdGlvbiB0byBhbGxvdyBzdWNoIGEgcmVmLgorCisgKiAiZ2l0IGxvZyAtLWxlZnQtcmlnaHQgQS4uLkIiIGxvc3QgdGhlICJsZWZ0bmVzcyIgb2YgY29tbWl0cworICAgcmVhY2hhYmxlIGZyb20gQSB3aGVuIEEgaXMgYSB0YWcgYXMgYSBzaWRlIGVmZmVjdCBvZiBhIHJlY2VudAorICAgYnVnZml4LiAgVGhpcyBpcyBhIHJlZ3Jlc3Npb24gaW4gMS44LjQueCBzZXJpZXMuCisKKyAqIGRvY3VtZW50YXRpb25zIHRvICJnaXQgcHVsbCIgaGludGVkIHRoZXJlIGlzIGFuICItbSIgb3B0aW9uIGJlY2F1c2UKKyAgIGl0IGluY29ycmVjdGx5IHNoYXJlZCB0aGUgZG9jdW1lbnRhdGlvbiB3aXRoICJnaXQgbWVyZ2UiLgorCisgKiAiZ2l0IGRpZmYgQSBCIHN1Ym1vZCIgYW5kICJnaXQgZGlmZiBBIEIgc3VibW9kLyIgb3VnaHQgdG8gaGF2ZSBkb25lCisgICB0aGUgc2FtZSBmb3IgYSBzdWJtb2R1bGUgInN1Ym1vZCIsIGJ1dCBkaWRuJ3QuCisKKyAqICJnaXQgY2xvbmUgJG9yaWdpbiBmb29cYmFyXGJheiIgb24gV2luZG93cyBmYWlsZWQgdG8gY3JlYXRlIHRoZQorICAgbGVhZGluZyBkaXJlY3RvcmllcyAoaS5lLiBhIG1vcmFsLWVxdWl2YWxlbnQgb2YgIm1rZGlyIC1wIikuCisKKyAqICJzdWJtb2R1bGUuKi51cGRhdGU9Y2hlY2tvdXQiLCB3aGVuIHByb3BhZ2F0ZWQgZnJvbSAuZ2l0bW9kdWxlcyB0bworICAgLmdpdC9jb25maWcsIHR1cm5lZCBpbnRvIGEgInN1Ym1vZHVsZS4qLnVwZGF0ZT1ub25lIiwgd2hpY2ggZGlkIG5vdAorICAgbWFrZSBtdWNoIHNlbnNlLgorICAgKG1lcmdlIGVmYThmZDcgZnAvc3VibW9kdWxlLWNoZWNrb3V0LW1vZGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgJ2dpdCBzdGFzaCAkY21kICJzdGFzaEB7Li4ufSInIGRpZCBub3QgcXVvdGUKKyAgIHRoZSBzdGFzaCBhcmd1bWVudCBwcm9wZXJseSBhbmQgbGVmdCBpdCBzcGxpdCBhdCBJRlMgd2hpdGVzcGFjZS4KKworICogVGhlICItLVtuby1daW5mb3JtYXRpdmUtZXJyb3JzIiBvcHRpb25zIHRvICJnaXQgZGFlbW9uIiB3ZXJlIHBhcnNlZAorICAgYSBiaXQgdG9vIGxvb3NlbHksIGFsbG93aW5nIGFueSBvdGhlciBzdHJpbmcgYWZ0ZXIgdGhlc2Ugb3B0aW9uCisgICBuYW1lcy4KKworICogVGhlcmUgaXMgbm8gcmVhc29uIHRvIGhhdmUgYSBoYXJkY29kZWQgdXBwZXIgbGltaXQgZm9yIHRoZSBudW1iZXIgb2YKKyAgIHBhcmVudHMgb2YgYW4gb2N0b3B1cyBtZXJnZSwgY3JlYXRlZCB2aWEgdGhlIGdyYWZ0IG1lY2hhbmlzbSwgYnV0CisgICB0aGVyZSB3YXMuCisKKyAqIFRoZSBiYXNpYyB0ZXN0IHVzZWQgdG8gbGVhdmUgdW5uZWNlc3NhcnkgdHJhc2ggZGlyZWN0b3JpZXMgaW4gdGhlCisgICB0LyBkaXJlY3RvcnkuCisgICAobWVyZ2UgNzM4YThiZSBqay90ZXN0LWZyYW1ld29yay11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZS1iYXNlIC0tb2N0b3B1cyIgdXNlZCB0byBsZWF2ZSBjbGVhbmluZyB1cCBzdWJvcHRpbWFsCisgICByZXN1bHQgdG8gdGhlIGNhbGxlciwgYnV0IG5vdyBpdCBkb2VzIHRoZSBjbGVhbi11cCBpdHNlbGYuCisKKyAqIEEgImdjIiBwcm9jZXNzIHJ1bm5pbmcgYXMgYSBkaWZmZXJlbnQgdXNlciBzaG91bGQgYmUgYWJsZSB0byBzdG9wIGEKKyAgIG5ldyAiZ2MiIHByb2Nlc3MgZnJvbSBzdGFydGluZywgYnV0IGl0IGRpZG4ndC4KKworICogQW4gZWFybGllciAiY2xlYW4tdXAiIGludHJvZHVjZWQgYW4gdW5uZWNlc3NhcnkgbWVtb3J5IGxlYWsuCisKKyAqICJnaXQgYWRkIC1BIiAobm8gb3RoZXIgYXJndW1lbnRzKSBpbiBhIHRvdGFsbHkgZW1wdHkgd29ya2luZyB0cmVlCisgICB1c2VkIHRvIGVtaXQgYW4gZXJyb3IuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIGRpZCBub3QgaGFuZGxlIGEgdGFnIHBvaW50ZWQgYnkgYW5vdGhlciB0YWcKKyAgIG5pY2VseS4KKworICogV2hlbiB3ZSBmaWd1cmUgb3V0IGhvdyBtYW55IGZpbGUgZGVzY3JpcHRvcnMgdG8gYWxsb2NhdGUgZm9yCisgICBrZWVwaW5nIHBhY2tmaWxlcyBvcGVuLCBhIHN5c3RlbSB3aXRoIG5vbi13b3JraW5nIGdldHJsaW1pdCgpIGNvdWxkCisgICBjYXVzZSB1cyB0byBkaWUoKSwgYnV0IGJlY2F1c2Ugd2UgbWFrZSB0aGlzIGNhbGwgb25seSB0byBnZXQgYQorICAgcm91Z2ggZXN0aW1hdGUgb2YgaG93IG1hbnkgYXJlIGF2YWlsYWJsZSBhbmQgd2UgZG8gbm90IGV2ZW4gYXR0ZW1wdAorICAgdG8gdXNlIHVwIGFsbCBhdmFpbGFibGUgZmlsZSBkZXNjcmlwdG9ycyBvdXJzZWx2ZXMsIGl0IGlzIG5pY2VyIHRvCisgICBmYWxsIGJhY2sgdG8gYSByZWFzb25hYmxlIGxvdyB2YWx1ZSByYXRoZXIgdGhhbiBkeWluZy4KKworICogcmVhZF9zaGExX2ZpbGUoKSwgdGhhdCBpcyB0aGUgd29ya2hvcnNlIHRvIHJlYWQgdGhlIGNvbnRlbnRzIGdpdmVuCisgICBhbiBvYmplY3QgbmFtZSwgaG9ub3VyZWQgb2JqZWN0IHJlcGxhY2VtZW50cywgYnV0IHRoZXJlIHdhcyBubworICAgY29ycmVzcG9uZGluZyBtZWNoYW5pc20gdG8gc2hhMV9vYmplY3RfaW5mbygpIHRoYXQgd2FzIHVzZWQgdG8KKyAgIG9idGFpbiB0aGUgbWV0YWluZm8gKGUuZy4gdHlwZSAmIHNpemUpIGFib3V0IHRoZSBvYmplY3QuICBUaGlzIGxlZAorICAgY2FsbGVycyB0byB3ZWlyZCBpbmNvbnNpc3RlbmNpZXMuCisgICAobWVyZ2UgNjYzYTg1NiBjYy9yZXBsYWNlLW9iamVjdC1pbmZvIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoPSIsIGFuIGFkbWl0dGVkbHkgdXNlbGVzcyBjb21tYW5kLCBkaWQgbm90CisgICBiZWhhdmUgdmVyeSB3ZWxsLgorCisgKiAiZ2l0IHJldi1wYXJzZSA8cmV2cz4gLS0gPHBhdGhzPiIgZGlkIG5vdCBpbXBsZW1lbnQgdGhlIHVzdWFsCisgICBkaXNhbWJpZ3VhdGlvbiBydWxlcyB0aGUgY29tbWFuZHMgaW4gdGhlICJnaXQgbG9nIiBmYW1pbHkgdXNlZCBpbgorICAgdGhlIHNhbWUgd2F5LgorCisgKiAiZ2l0IG12IEEgQi8iLCB3aGVuIEIgZG9lcyBub3QgZXhpc3QgYXMgYSBkaXJlY3RvcnksIHNob3VsZCBlcnJvcgorICAgb3V0LCBidXQgaXQgZGlkbid0LgorCisgKiBBIHdvcmthcm91bmQgdG8gYW4gb2xkIGJ1ZyBpbiBnbGliYyBwcmlvciB0byBnbGliYyAyLjE3IGhhcyBiZWVuCisgICByZXRpcmVkOyB0aGlzIHdvdWxkIHJlbW92ZSBhIHNpZGUgZWZmZWN0IG9mIHRoZSB3b3JrYXJvdW5kIHRoYXQKKyAgIGNvcnJ1cHRzIHN5c3RlbSBlcnJvciBtZXNzYWdlcyBpbiBub24tQyBsb2NhbGVzLgorCisgKiBTU0wtcmVsYXRlZCBvcHRpb25zIHdlcmUgbm90IHBhc3NlZCBjb3JyZWN0bHkgdG8gdW5kZXJseWluZyBzb2NrZXQKKyAgIGxheWVyIGluICJnaXQgc2VuZC1lbWFpbCIuCisKKyAqICJnaXQgY29tbWl0IC12IiBhcHBlbmRzIHRoZSBwYXRjaCB0byB0aGUgbG9nIG1lc3NhZ2UgYmVmb3JlCisgICBlZGl0aW5nLCBhbmQgdGhlbiByZW1vdmVzIHRoZSBwYXRjaCB3aGVuIHRoZSBlZGl0b3IgcmV0dXJuZWQKKyAgIGNvbnRyb2wuIEhvd2V2ZXIsIHRoZSBwYXRjaCB3YXMgbm90IHN0cmlwcGVkIGNvcnJlY3RseSB3aGVuIHRoZQorICAgZmlyc3QgbW9kaWZpZWQgcGF0aCB3YXMgYSBzdWJtb2R1bGUuCisKKyAqICJnaXQgZmV0Y2ggLS1kZXB0aD0wIiB3YXMgYSBuby1vcCwgYW5kIHdhcyBzaWxlbnRseSBpZ25vcmVkLgorICAgRGlhZ25vc2UgaXQgYXMgYW4gZXJyb3IuCisKKyAqIFJlbW90ZSByZXBvc2l0b3J5IFVSTHMgZXhwcmVzc2VkIGluIHNjcC1zdHlsZSBob3N0OnBhdGggbm90YXRpb24gYXJlCisgICBwYXJzZWQgbW9yZSBjYXJlZnVsbHkgKGUuZy4gImZvby9iYXI6YmF6IiBpcyBsb2NhbCwgIls6OjFdOi9+dXNlciIgYXNrcworICAgdG8gY29ubmVjdCB0byB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgb24gaG9zdCBhdCBhZGRyZXNzIDo6MS4KKworICogImdpdCBkaWZmIC0tICc6KGljYXNlKW1ha2VmaWxlJyIgd2FzIHVubmVjZXNzYXJpbHkgcmVqZWN0ZWQgYXQgdGhlCisgICBjb21tYW5kIGxpbmUgcGFyc2VyLgorCisgKiAiZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9b2siIGRpZCBub3QgY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZgorICAgdGhlIG5hbWVkIG9iamVjdC4KKworICogImdpdCBhbSAtLWFib3J0IiBzb21ldGltZXMgY29tcGxhaW5lZCBhYm91dCBub3QgYmVpbmcgYWJsZSB0byB3cml0ZQorICAgYSB0cmVlIHdpdGggYW4gMHs0MH0gb2JqZWN0IGluIGl0LgorCisgKiBUd28gcHJvY2Vzc2VzIGNyZWF0aW5nIGxvb3NlIG9iamVjdHMgYXQgdGhlIHNhbWUgdGltZSBjb3VsZCBoYXZlCisgICBmYWlsZWQgdW5uZWNlc3NhcmlseSB3aGVuIHRoZSBuYW1lIG9mIHRoZWlyIG5ldyBvYmplY3RzIHN0YXJ0ZWQKKyAgIHdpdGggdGhlIHNhbWUgYnl0ZSB2YWx1ZSwgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMDYwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4xLnR4dApAQCAtMCwwICsxLDU5IEBACitHaXQgdjEuOS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS45LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGNsZWFuIC1kIHBhdGhzcGVjIiBkaWQgbm90IHVzZSB0aGUgZ2l2ZW4gcGF0aHNwZWMgY29ycmVjdGx5CisgICBhbmQgZW5kZWQgdXAgY2xlYW5pbmcgdG9vIG11Y2guCisKKyAqICJnaXQgZGlmZnRvb2wiIG1pc2JlaGF2ZWQgd2hlbiB0aGUgcmVwb3NpdG9yeSBpcyBib3VuZCB0byB0aGUKKyAgIHdvcmtpbmcgdHJlZSB3aXRoIHRoZSAiLmdpdCBmaWxlIiBtZWNoYW5pc20sIHdoZXJlIGEgdGV4dHVhbCBmaWxlCisgICAiLmdpdCIgdGVsbHMgdXMgd2hlcmUgaXQgaXMuCisKKyAqICJnaXQgcHVzaCIgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIGJyYW5jaC4qLnB1c2hyZW1vdGUgaWYgaXQgaXMKKyAgIGRlZmluZWQgZWFybGllciB0aGFuIHJlbW90ZS5wdXNoZGVmYXVsdDsgdGhlIG9yZGVyIG9mIHRoZXNlIHR3bworICAgdmFyaWFibGVzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIG5vdCBtYXR0ZXIsIGJ1dCBpdCBkaWQKKyAgIGJ5IG1pc3Rha2UuCisKKyAqIENvZGVwYXRocyB0aGF0IHBhcnNlIHRpbWVzdGFtcHMgaW4gY29tbWl0IG9iamVjdHMgaGF2ZSBiZWVuCisgICB0aWdodGVuZWQuCisKKyAqICJnaXQgZGlmZiAtLWV4dGVybmFsLWRpZmYiIGluY29ycmVjdGx5IGZlZCB0aGUgc3VibW9kdWxlIGRpcmVjdG9yeQorICAgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgZXh0ZXJuYWwgZGlmZiBkcml2ZXIgd2hlbiBpdCBrbmV3IGl0IGlzCisgICB0aGUgc2FtZSBhcyBvbmUgb2YgdGhlIHZlcnNpb25zIGJlaW5nIGNvbXBhcmVkLgorCisgKiAiZ2l0IHJlc2V0IiBuZWVkcyB0byByZWZyZXNoIHRoZSBpbmRleCB3aGVuIHdvcmtpbmcgaW4gYSB3b3JraW5nCisgICB0cmVlIChpdCBjYW4gYWxzbyBiZSB1c2VkIHRvIG1hdGNoIHRoZSBpbmRleCB0byB0aGUgSEVBRCBpbiBhbgorICAgb3RoZXJ3aXNlIGJhcmUgcmVwb3NpdG9yeSksIGJ1dCBpdCBmYWlsZWQgdG8gc2V0IHVwIHRoZSB3b3JraW5nCisgICB0cmVlIHByb3Blcmx5LCBjYXVzaW5nIEdJVF9XT1JLX1RSRUUgdG8gYmUgaWdub3JlZC4KKworICogImdpdCBjaGVjay1hdHRyIiB3aGVuIHdvcmtpbmcgb24gYSByZXBvc2l0b3J5IHdpdGggYSB3b3JraW5nIHRyZWUKKyAgIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gdGhlIHdvcmtpbmcgdHJlZSB3YXMgc3BlY2lmaWVkIHZpYSB0aGUKKyAgIC0td29yay10cmVlIChhbmQgb2J2aW91c2x5IHdpdGggLS1naXQtZGlyKSBvcHRpb24uCisKKyAqICJtZXJnZS1yZWN1cnNpdmUiIHdhcyBicm9rZW4gaW4gMS43LjcgZXJhIGFuZCBzdG9wcGVkIHdvcmtpbmcgaW4KKyAgIGFuIGVtcHR5ICh0ZW1wb3JhcnkpIHdvcmtpbmcgdHJlZSwgd2hlbiB0aGVyZSBhcmUgcmVuYW1lcworICAgaW52b2x2ZWQuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCByZXYtcGFyc2UiIHdhcyBsb29zZSBpbiByZWplY3RpbmcgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworICAgdGhhdCBkbyBub3QgbWFrZSBzZW5zZSwgZS5nLiAiLS1kZWZhdWx0IiB3aXRob3V0IHRoZSByZXF1aXJlZAorICAgdmFsdWUgZm9yIHRoYXQgb3B0aW9uLgorCisgKiBpbmNsdWRlLnBhdGggdmFyaWFibGUgKG9yIGFueSB2YXJpYWJsZSB0aGF0IGV4cGVjdHMgYSBwYXRoIHRoYXQKKyAgIGNhbiB1c2UgfnVzZXJuYW1lIGV4cGFuc2lvbikgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBub3QgYQorICAgYm9vbGVhbiwgYnV0IHRoZSBjb2RlIGZhaWxlZCB0byBjaGVjayBpdC4KKworICogImdpdCBkaWZmIC0tcXVpZXQgLS0gcGF0aHNwZWMxIHBhdGhzcGVjMiIgc29tZXRpbWVzIGRpZCBub3QgcmV0dXJuCisgICBjb3JyZWN0IHN0YXR1cyB2YWx1ZS4KKworICogQXR0ZW1wdGluZyB0byBkZWVwZW4gYSBzaGFsbG93IHJlcG9zaXRvcnkgYnkgZmV0Y2hpbmcgb3ZlciBzbWFydAorICAgSFRUUCB0cmFuc3BvcnQgZmFpbGVkIGluIHRoZSBwcm90b2NvbCBleGNoYW5nZSwgd2hlbiBuby1kb25lCisgICBleHRlbnNpb24gd2FzIHVzZWQuICBUaGUgZmV0Y2hpbmcgc2lkZSB3YWl0ZWQgZm9yIHRoZSBsaXN0IG9mCisgICBzaGFsbG93IGJvdW5kYXJ5IGNvbW1pdHMgYWZ0ZXIgdGhlIHNlbmRpbmcgZW5kIHN0b3BwZWQgdGFsa2luZyB0bworICAgaXQuCisKKyAqIEFsbG93ICJnaXQgY21kIHBhdGgvIiwgd2hlbiB0aGUgJ3BhdGgnIGlzIHdoZXJlIGEgc3VibW9kdWxlIGlzCisgICBib3VuZCB0byB0aGUgdG9wLWxldmVsIHdvcmtpbmcgdHJlZSwgdG8gbWF0Y2ggJ3BhdGgnLCBkZXNwaXRlIHRoZQorICAgZXh0cmEgYW5kIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoIChzdWNoIGEgc2xhc2ggaXMgb2Z0ZW4KKyAgIGdpdmVuIGJ5IGNvbW1hbmQgbGluZSBjb21wbGV0aW9uKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhMzRjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjIudHh0CkBAIC0wLDAgKzEsNjcgQEAKK0dpdCB2MS45LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjkuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIERvY3VtZW50YXRpb24gYW5kIGluLWNvZGUgY29tbWVudHMgaGFkIG1hbnkgaW5zdGFuY2VzIG9mIG1pc3Rha2VuCisgICB1c2Ugb2YgIm5vciIsIHdoaWNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgZmV0Y2ggLS1wcnVuZSIsIHdoZW4gdGhlIHJpZ2h0LWhhbmQtc2lkZSBvZiBtdWx0aXBsZSBmZXRjaAorICAgcmVmc3BlY3Mgb3ZlcmxhcCAoZS5nLiBzdG9yaW5nICJyZWZzL2hlYWRzLyoiIHRvCisgICAicmVmcy9yZW1vdGVzL29yaWdpbi8qIiwgd2hpbGUgc3RvcmluZyAicmVmcy9mcm90ei8qIiB0bworICAgInJlZnMvcmVtb3Rlcy9vcmlnaW4vZnIvKiIpLCBhZ2dyZXNzaXZlbHkgdGhvdWdodCB0aGF0IGxhY2sgb2YKKyAgICJyZWZzL2hlYWRzL2ZyL290eiIgb24gdGhlIG9yaWdpbiBzaXRlIG1lYW50IHdlIHNob3VsZCByZW1vdmUKKyAgICJyZWZzL3JlbW90ZXMvb3JpZ2luL2ZyL290eiIgZnJvbSB1cywgd2l0aG91dCBjaGVja2luZyB0aGVpcgorICAgInJlZnMvZnJvdHovb3R6IiBmaXJzdC4KKworICAgTm90ZSB0aGF0IHN1Y2ggYSBjb25maWd1cmF0aW9uIGlzIGluaGVyZW50bHkgdW5zYWZlICh0aGluayB3aGF0CisgICBzaG91bGQgaGFwcGVuIHdoZW4gInJlZnMvaGVhZHMvZnIvb3R6IiBkb2VzIGFwcGVhciBvbiB0aGUgb3JpZ2luCisgICBzaXRlKSwgYnV0IHRoYXQgaXMgbm90IGEgcmVhc29uIG5vdCB0byBiZSBleHRyYSBjYXJlZnVsLgorCisgKiAiZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiIgZGlkIG5vdCBmYWlsIGEgcmVxdWVzdCB0byBjcmVhdGUgYSByZWYKKyAgIHdoZW4gdGhlIHJlZiBhbHJlYWR5IGV4aXN0ZWQuCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IC1NcSBhIGIiIGZlbGwgaW50byBhbiBpbmZpbml0ZSBsb29wLgorCisgKiBXaGVuIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZWRpdCBhIGNvbW1pdCBsb2cgbWVzc2FnZSAoZS5nLiAiZ2l0CisgICBjb21taXQgLW0iIGlzIGdpdmVuIGEgbWVzc2FnZSB3aXRob3V0IHNwZWNpZnlpbmcgIi1lIiksIHdlIHVzZWQgdG8KKyAgIGRpc2FibGUgdGhlIHNwYXduaW5nIG9mIHRoZSBlZGl0b3IgYnkgb3ZlcnJpZGluZyBHSVRfRURJVE9SLCBidXQKKyAgIHRoaXMgbWVhbnMgYWxsIHRoZSB1c2VzIG9mIHRoZSBlZGl0b3IsIG90aGVyIHRoYW4gdG8gZWRpdCB0aGUKKyAgIGNvbW1pdCBsb2cgbWVzc2FnZSwgYXJlIGFsc28gYWZmZWN0ZWQuCisKKyAqICJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tYnJhbmNoIiBzaG93ZWQgaXRzIG91dHB1dCB3aXRoIGxhYmVscworICAgImFoZWFkL2JlaGluZC9nb25lIiB0cmFuc2xhdGVkIHRvIHRoZSB1c2VyJ3MgbG9jYWxlLgorCisgKiAiZ2l0IG12IiB0aGF0IG1vdmVzIGEgc3VibW9kdWxlIGZvcmdvdCB0byBhZGp1c3QgdGhlIGFycmF5IHRoYXQKKyAgIHVzZXMgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBzdWJtb2R1bGVzIHdlcmUgdG8gYmUgbW92ZWQgdG8gdXBkYXRlCisgICBpdHMgY29uZmlndXJhdGlvbi4KKworICogTGVuZ3RoIGxpbWl0IGZvciB0aGUgcGF0aG5hbWUgdXNlZCB3aGVuIHJlbW92aW5nIGEgcGF0aCBpbiBhIGRlZXAKKyAgIHN1YmRpcmVjdG9yeSBoYXMgYmVlbiByZW1vdmVkIHRvIGF2b2lkIGJ1ZmZlciBvdmVyZmxvd3MuCisKKyAqIFRoZSB0ZXN0IGhlbHBlciBsaWItdGVybWluYWwgYWx3YXlzIHJ1biBhbiBhY3R1YWwgdGVzdF9leHBlY3RfKgorICAgd2hlbiBpbmNsdWRlZCwgd2hpY2ggc2NyZXdlZCB1cCB3aXRoIHRoZSB1c2Ugb2Ygc2tpbC1hbGwgdGhhdCBtYXkKKyAgIGhhdmUgdG8gYmUgZG9uZSBsYXRlci4KKworICogImdpdCBpbmRleC1wYWNrIiB1c2VkIGEgd3JvbmcgdmFyaWFibGUgdG8gbmFtZSB0aGUga2VlcC1maWxlIGluIGFuCisgICBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHdyaXR0ZW4gb3IgY2xvc2VkLgorCisgKiAicmViYXNlIC1pIiBwcm9kdWNlZCBhIGJyb2tlbiBpbnNuIHNoZWV0IHdoZW4gdGhlIHRpdGxlIG9mIGEgY29tbWl0CisgICBoYXBwZW5lZCB0byBjb250YWluICdcbicgKG9yIGVuZGVkIHdpdGggJ1xjJykgZHVlIHRvIGEgY2FyZWxlc3MgdXNlCisgICBvZiAnZWNobycuCisKKyAqIFRoZXJlIHdlcmUgYSBmZXcgaW5zdGFuY2VzIG9mICdnaXQtZm9vJyByZW1haW5pbmcgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzcGVsbGVkICdnaXQgZm9vJy4KKworICogU2VydmluZyBvYmplY3RzIGZyb20gYSBzaGFsbG93IHJlcG9zaXRvcnkgbmVlZHMgdG8gd3JpdGUgYQorICAgbmV3IGZpbGUgdG8gaG9sZCB0aGUgdGVtcG9yYXJ5IHNoYWxsb3cgYm91bmRhcmllcyBidXQgaXQgd2FzIG5vdAorICAgY2xlYW5lZCB3aGVuIHdlIGV4aXQgZHVlIHRvIGRpZSgpIG9yIGEgc2lnbmFsLgorCisgKiBXaGVuICJnaXQgc3Rhc2ggcG9wIiBzdG9wcyBhZnRlciBmYWlsaW5nIHRvIGFwcGx5IHRoZSBzdGFzaAorICAgKGUuZy4gZHVlIHRvIGNvbmZsaWN0aW5nIGNoYW5nZXMpLCB0aGUgc3Rhc2ggaXMgbm90IGRyb3BwZWQuIFN0YXRlCisgICB0aGF0IGV4cGxpY2l0bHkgaW4gdGhlIG91dHB1dCB0byBsZXQgdGhlIHVzZXJzIGtub3cuCisKKyAqIFRoZSBsYWJlbHMgaW4gImdpdCBzdGF0dXMiIG91dHB1dCB0aGF0IGRlc2NyaWJlIHRoZSBuYXR1cmUgb2YKKyAgIGNvbmZsaWN0cyAoZS5nLiAiYm90aCBkZWxldGVkIikgd2VyZSBsaW1pdGVkIHRvIDIwIGJ5dGVzLCB3aGljaCB3YXMKKyAgIHRvbyBzaG9ydCBmb3Igc29tZSBsMTBuIChlLmcuIGZyKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiMDVjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjMudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0dpdCB2MS45LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjkuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgcDQiIGRlYWxpbmcgd2l0aCBjaGFuZ2VzIGluIGJpbmFyeSBmaWxlcyB3ZXJlIGJyb2tlbiBieSBhCisgICBjaGFuZ2UgaW4gMS45IHJlbGVhc2UuCisKKyAqIFRoZSBzaGVsbCBwcm9tcHQgc2NyaXB0IChpbiBjb250cmliLyksIHdoZW4gdXNpbmcgdGhlIFBST01QVF9DT01NQU5ECisgICBpbnRlcmZhY2UsIHVzZWQgYW4gdW5zYWZlIGNvbnN0cnVjdCB3aGVuIHNob3dpbmcgdGhlIGJyYW5jaCBuYW1lIGluCisgICAkUFMxLgorCisgKiAiZ2l0IHJlYmFzZSIgdXNlZCBhIFBPU0lYIHNoZWxsIGNvbnN0cnVjdCBGcmVlQlNEIC9iaW4vc2ggZG9lcyBub3QKKyAgIHdvcmsgd2VsbCB3aXRoLgorCisgKiBTb21lIG1vcmUgVW5pY29kZSBjb2RlcG9pbnRzIGRlZmluZWQgaW4gVW5pY29kZSA2LjMgYXMgaGF2aW5nCisgICB6ZXJvIHdpZHRoIGhhdmUgYmVlbiB0YXVnaHQgdG8gb3VyIGRpc3BsYXkgY29sdW1uIGNvdW50aW5nIGxvZ2ljLgorCisgKiBTb21lIHRlc3RzIHVzZWQgc2hlbGwgY29uc3RydWN0cyB0aGF0IGRpZCBub3Qgd29yayB3ZWxsIG9uCisgICBGcmVlQlNELgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWQxODM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuNC50eHQKQEAgLTAsMCArMSwxNiBAQAorR2l0IHYxLjkuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOS4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ29tbWFuZHMgdGhhdCB0YWtlIHBhdGhzcGVjcyBvbiB0aGUgY29tbWFuZCBsaW5lIG1pc2JlaGF2ZWQgd2hlbgorICAgdGhlIHBhdGhzcGVjIGlzIGdpdmVuIGFzIGFuIGFic29sdXRlIHBhdGhuYW1lICh3aGljaCBpcyBhCisgICBwcmFjdGljZSBub3QgcGFydGljdWxhcmx5IGVuY291cmFnZWQpIHRoYXQgcG9pbnRzIGF0IGEgc3ltYm9saWMKKyAgIGxpbmsgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworICogQW4gZWFybGllciBmaXggdG8gdGhlIHNoZWxsIHByb21wdCBzY3JpcHQgKGluIGNvbnRyaWIvKSBmb3IgdXNpbmcKKyAgIHRoZSBQUk9NUFRfQ09NTUFORCBpbnRlcmZhY2UgZGlkIG5vdCBjb3JyZWN0bHkgY2hlY2sgaWYgdGhlIGV4dHJhCisgICBjb2RlIHBhdGggbmVlZHMgdG8gdHJpZ2dlciwgY2F1c2luZyB0aGUgYnJhbmNoIG5hbWUgbm90IHRvIGFwcGVhcgorICAgd2hlbiAncHJvbXB0dmFycycgb3B0aW9uIGlzIGRpc2FibGVkIGluIGJhc2ggb3IgUFJPTVBUX1NVQlNUIGlzCisgICB1bnNldCBpbiB6c2guCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNmFjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS41LnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgdjEuOS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS45LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXZSB1c2VkIHRvIGFsbG93IGNvbW1pdHRpbmcgYSBwYXRoICIuR2l0L2NvbmZpZyIgd2l0aCBHaXQgdGhhdCBpcworICAgcnVubmluZyBvbiBhIGNhc2Ugc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dCBhbiBhdHRlbXB0IHRvIGNoZWNrIG91dAorICAgc3VjaCBhIHBhdGggd2l0aCBHaXQgdGhhdCBydW5zIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtCisgICB3b3VsZCBoYXZlIGNsb2JiZXJlZCAiLmdpdC9jb25maWciLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCB3aGF0CisgICB0aGUgdXNlciB3b3VsZCBoYXZlIGV4cGVjdGVkLiAgR2l0IG5vdyBwcmV2ZW50cyB5b3UgZnJvbSB0cmFja2luZworICAgYSBwYXRoIHdpdGggIi5HaXQiIChpbiBhbnkgY2FzZSBjb21iaW5hdGlvbikgYXMgYSBwYXRoIGNvbXBvbmVudC4KKworICogT24gV2luZG93cywgY2VydGFpbiBwYXRoIGNvbXBvbmVudHMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gIi5naXQiCisgICBhcmUgbWFwcGVkIHRvICIuZ2l0IiwgZS5nLiAiZ2l0fjEvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmIGl0IHdlcmUKKyAgICIuZ2l0L2NvbmZpZyIuICBIRlMrIGhhcyBhIHNpbWlsYXIgaXNzdWUsIHdoZXJlIGNlcnRhaW4gdW5pY29kZQorICAgY29kZXBvaW50cyBhcmUgaWdub3JlZCwgZS5nLiAiLmdcdTIwMGNpdC9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYKKyAgIGl0IHdlcmUgIi5naXQvY29uZmlnIi4gIFBhdGhuYW1lcyB3aXRoIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgYXJlCisgICByZWplY3RlZCBvbiB0aGUgYWZmZWN0ZWQgc3lzdGVtcy4gIEdpdCBvbiBzeXN0ZW1zIHRoYXQgYXJlIG5vdAorICAgYWZmZWN0ZWQgYnkgdGhpcyBpc3N1ZSAoZS5nLiBMaW51eCkgY2FuIGFsc28gYmUgY29uZmlndXJlZCB0bworICAgcmVqZWN0IHRoZW0gdG8gZW5zdXJlIGNyb3NzIHBsYXRmb3JtIGludGVyb3BlcmFiaWxpdHkgb2YgdGhlIGhvc3RlZAorICAgcHJvamVjdHMuCisKKyAqICJnaXQgZnNjayIgbm90aWNlcyBhIHRyZWUgb2JqZWN0IHRoYXQgcmVjb3JkcyBzdWNoIGEgcGF0aCB0aGF0IGNhbgorICAgYmUgY29uZnVzZWQgd2l0aCAiLmdpdCIsIGFuZCB3aXRoIHJlY2VpdmUuZnNja09iamVjdHMgY29uZmlndXJhdGlvbgorICAgc2V0IHRvIHRydWUsIGFuIGF0dGVtcHQgdG8gImdpdCBwdXNoIiBzdWNoIGEgdHJlZSBvYmplY3Qgd2lsbCBiZQorICAgcmVqZWN0ZWQuICBTdWNoIGEgcGF0aCBtYXkgbm90IGJlIGEgcHJvYmxlbSBvbiBhIHdlbGwgYmVoYXZpbmcKKyAgIGZpbGVzeXN0ZW0gYnV0IGluIG9yZGVyIHRvIHByb3RlY3QgdGhvc2Ugb24gSEZTKyBhbmQgb24gY2FzZQorICAgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMsIHRoaXMgY2hlY2sgaXMgZW5hYmxlZCBvbiBhbGwgcGxhdGZvcm1zLgorCitBIGJpZyAidGhhbmtzISIgZm9yIGJyaW5naW5nIHRoaXMgaXNzdWUgdG8gdXMgZ29lcyB0byBvdXIgZnJpZW5kcyBpbgordGhlIE1lcmN1cmlhbCBsYW5kLCBuYW1lbHksIE1hdHQgTWFja2FsbCBhbmQgQXVnaWUgRmFja2xlci4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxNzM3MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjAudHh0CkBAIC0wLDAgKzEsMzY0IEBACitHaXQgdjIuMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiAiZ2l0IHB1c2ggWyR0aGVyZV0iIGRvZXMgbm90IHNheSB3aGF0IHRvIHB1c2gsIHdlIGhhdmUgdXNlZCB0aGUKK3RyYWRpdGlvbmFsICJtYXRjaGluZyIgc2VtYW50aWNzIHNvIGZhciAoYWxsIHlvdXIgYnJhbmNoZXMgd2VyZSBzZW50Cit0byB0aGUgcmVtb3RlIGFzIGxvbmcgYXMgdGhlcmUgYWxyZWFkeSBhcmUgYnJhbmNoZXMgb2YgdGhlIHNhbWUgbmFtZQorb3ZlciB0aGVyZSkuICBJbiBHaXQgMi4wLCB0aGUgZGVmYXVsdCBpcyBub3cgdGhlICJzaW1wbGUiIHNlbWFudGljcywKK3doaWNoIHB1c2hlczoKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGFuZCBvbmx5CisgICB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdCByZW1vdGUKKyAgIGJyYW5jaCwgaWYgeW91IGFyZSBwdXNoaW5nIHRvIHRoZSBzYW1lIHJlbW90ZSBhcyB5b3UgZmV0Y2ggZnJvbTsgb3IKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGlmIHlvdQorICAgYXJlIHB1c2hpbmcgdG8gYSByZW1vdGUgdGhhdCBpcyBub3Qgd2hlcmUgeW91IHVzdWFsbHkgZmV0Y2ggZnJvbS4KKworWW91IGNhbiB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgInB1c2guZGVmYXVsdCIgdG8gY2hhbmdlCit0aGlzLiAgSWYgeW91IGFyZSBhbiBvbGQtdGltZXIgd2hvIHdhbnRzIHRvIGtlZXAgdXNpbmcgdGhlCisibWF0Y2hpbmciIHNlbWFudGljcywgeW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlIHRvICJtYXRjaGluZyIsIGZvcgorZXhhbXBsZS4gIFJlYWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIG90aGVyIHBvc3NpYmlsaXRpZXMuCisKK1doZW4gImdpdCBhZGQgLXUiIGFuZCAiZ2l0IGFkZCAtQSIgYXJlIHJ1biBpbnNpZGUgYSBzdWJkaXJlY3RvcnkKK3dpdGhvdXQgc3BlY2lmeWluZyB3aGljaCBwYXRocyB0byBhZGQgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhleQorb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHRyZWUgZm9yIGNvbnNpc3RlbmN5IHdpdGggImdpdCBjb21taXQgLWEiIGFuZAorb3RoZXIgY29tbWFuZHMgKHRoZXNlIGNvbW1hbmRzIHVzZWQgdG8gb3BlcmF0ZSBvbmx5IG9uIHRoZSBjdXJyZW50CitzdWJkaXJlY3RvcnkpLiAgU2F5ICJnaXQgYWRkIC11IC4iIG9yICJnaXQgYWRkIC1BIC4iIGlmIHlvdSB3YW50IHRvCitsaW1pdCB0aGUgb3BlcmF0aW9uIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworImdpdCBhZGQgPHBhdGg+IiBpcyB0aGUgc2FtZSBhcyAiZ2l0IGFkZCAtQSA8cGF0aD4iIG5vdywgc28gdGhhdAorImdpdCBhZGQgZGlyLyIgd2lsbCBub3RpY2UgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB0aGUgZGlyZWN0b3J5IGFuZAorcmVjb3JkIHRoZSByZW1vdmFsLiAgSW4gb2xkZXIgdmVyc2lvbnMgb2YgR2l0LCAiZ2l0IGFkZCA8cGF0aD4iIHVzZWQKK3RvIGlnbm9yZSByZW1vdmFscy4gIFlvdSBjYW4gc2F5ICJnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGg+IiB0bworYWRkIG9ubHkgYWRkZWQgb3IgbW9kaWZpZWQgcGF0aHMgaW4gPHBhdGg+LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8uCisKK1RoZSAiLXEiIG9wdGlvbiB0byAiZ2l0IGRpZmYtZmlsZXMiLCB3aGljaCBkb2VzICpOT1QqIG1lYW4gInF1aWV0IiwKK2hhcyBiZWVuIHJlbW92ZWQgKGl0IHRvbGQgR2l0IHRvIGlnbm9yZSBkZWxldGlvbiwgd2hpY2ggeW91IGNhbiBkbword2l0aCAiZ2l0IGRpZmYtZmlsZXMgLS1kaWZmLWZpbHRlcj1kIikuCisKKyJnaXQgcmVxdWVzdC1wdWxsIiBsb3N0IGEgZmV3ICJoZXVyaXN0aWNzIiB0aGF0IG9mdGVuIGxlZCB0byBtaXN0YWtlcy4KKworVGhlIGRlZmF1bHQgcHJlZml4IGZvciAiZ2l0IHN2biIgaGFzIGNoYW5nZWQgaW4gR2l0IDIuMC4gIEZvciBhIGxvbmcKK3RpbWUsICJnaXQgc3ZuIiBjcmVhdGVkIGl0cyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgZGlyZWN0bHkgdW5kZXIKK3JlZnMvcmVtb3RlcywgYnV0IGl0IG5vdyBwbGFjZXMgdGhlbSB1bmRlciByZWZzL3JlbW90ZXMvb3JpZ2luLyB1bmxlc3MKK2l0IGlzIHRvbGQgb3RoZXJ3aXNlIHdpdGggaXRzICItLXByZWZpeCIgb3B0aW9uLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuOSBzZXJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSAibXVsdGktbWFpbCIgcG9zdC1yZWNlaXZlIGhvb2sgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB1cGRhdGVkCisgICB0byBhIG1vcmUgcmVjZW50IHZlcnNpb24gZnJvbSB1cHN0cmVhbS4KKworICogVGhlICJyZW1vdGUtaGcvYnpyIiByZW1vdGUtaGVscGVyIGludGVyZmFjZXMgKHVzZWQgdG8gYmUgaW4KKyAgIGNvbnRyaWIvKSBhcmUgbm8gbW9yZS4gIFRoZXkgYXJlIG5vdyBtYWludGFpbmVkIHNlcGFyYXRlbHkgYXMKKyAgIHRoaXJkLXBhcnR5IHBsdWctaW5zIGluIHRoZWlyIG93biByZXBvc2l0b3JpZXMuCisKKyAqICJnaXQgZ2MgLS1hZ2dyZXNzaXZlIiBsZWFybmVkICItLWRlcHRoIiBvcHRpb24gYW5kCisgICAiZ2MuYWdncmVzc2l2ZURlcHRoIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGFsbG93IHVzZSBvZiBhIGxlc3MKKyAgIGluc2FuZSBkZXB0aCB0aGFuIHRoZSBidWlsdC1pbiBkZWZhdWx0IHZhbHVlIG9mIDI1MC4KKworICogImdpdCBsb2ciIGxlYXJuZWQgdGhlICItLXNob3ctbGluZWFyLWJyZWFrIiBvcHRpb24gdG8gc2hvdyB3aGVyZSBhCisgICBzaW5nbGUgc3RyYW5kLW9mLXBlYXJscyBpcyBicm9rZW4gaW4gaXRzIG91dHB1dC4KKworICogVGhlICJyZXYtcGFyc2UgLS1wYXJzZW9wdCIgbWVjaGFuaXNtIHVzZWQgYnkgc2NyaXB0ZWQgUG9yY2VsYWlucyB0bworICAgcGFyc2UgY29tbWFuZC1saW5lIG9wdGlvbnMgYW5kIHRvIGdpdmUgaGVscCB0ZXh0IGxlYXJuZWQgdG8gdGFrZQorICAgdGhlIGFyZ3YtaGVscCAodGhlIHBsYWNlaG9sZGVyIHN0cmluZyBmb3IgYW4gb3B0aW9uIHBhcmFtZXRlciwKKyAgIGUuZy4gImtleS1pZCIgaW4gIi0tZ3BnLXNpZ249PGtleS1pZD4iKS4KKworICogVGhlIHBhdHRlcm4gdG8gZmluZCB3aGVyZSB0aGUgZnVuY3Rpb24gYmVnaW5zIGluIEMvQysrIHVzZWQgaW4KKyAgICJkaWZmIiBhbmQgImdyZXAgLXAiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaW1wcm92ZSB2aWV3aW5nIEMrKworICAgc291cmNlcy4KKworICogImdpdCByZWJhc2UiIGxlYXJuZWQgdG8gaW50ZXJwcmV0IGEgbG9uZSAiLSIgYXMgIkB7LTF9IiwgdGhlCisgICBicmFuY2ggdGhhdCB3ZSB3ZXJlIHByZXZpb3VzbHkgb24uCisKKyAqICJnaXQgY29tbWl0IC0tY2xlYW51cD08bW9kZT4iIGxlYXJuZWQgYSBuZXcgbW9kZSwgc2Npc3NvcnMuCisKKyAqICJnaXQgdGFnIC0tbGlzdCIgb3V0cHV0IGNhbiBiZSBzb3J0ZWQgdXNpbmcgInZlcnNpb24gc29ydCIgd2l0aAorICAgIi0tc29ydD12ZXJzaW9uOnJlZm5hbWUiLgorCisgKiBEaXNjYXJkIHRoZSBhY2N1bXVsYXRlZCAiaGV1cmlzdGljcyIgdG8gZ3Vlc3MgZnJvbSB3aGljaCBicmFuY2ggdGhlCisgICByZXN1bHQgd2FudHMgdG8gYmUgcHVsbGVkIGZyb20gYW5kIG1ha2Ugc3VyZSB0aGF0IHdoYXQgdGhlIGVuZCB1c2VyCisgICBzcGVjaWZpZWQgaXMgbm90IHNlY29uZC1ndWVzc2VkIGJ5ICJnaXQgcmVxdWVzdC1wdWxsIiwgdG8gYXZvaWQKKyAgIG1pc3Rha2VzLiAgV2hlbiB5b3UgcHVzaGVkIG91dCB5b3VyICdtYXN0ZXInIGJyYW5jaCB0byB5b3VyIHB1YmxpYworICAgcmVwb3NpdG9yeSBhcyAnZm9yLWxpbnVzJywgdXNlIHRoZSBuZXcgIm1hc3Rlcjpmb3ItbGludXMiIHN5bnRheCB0bworICAgZGVub3RlIHRoZSBicmFuY2ggdG8gYmUgcHVsbGVkLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdG8gYmVoYXZlIGluIGEgd2F5IHNpbWlsYXIgdG8gbmF0aXZlIGdyZXAgd2hlbgorICAgIi1oIiAobm8gaGVhZGVyKSBhbmQgIi1jIiAoY291bnQpIG9wdGlvbnMgYXJlIGdpdmVuLgorCisgKiAiZ2l0IHB1c2giIHZpYSB0cmFuc3BvcnQtaGVscGVyIGludGVyZmFjZSBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBhbGxvdyBmb3JjZWQgcmVmIHVwZGF0ZXMgaW4gYSB3YXkgc2ltaWxhciB0byB0aGUgbmF0aXZlbHkKKyAgIHN1cHBvcnRlZCB0cmFuc3BvcnRzLgorCisgKiBUaGUgInNpbXBsZSIgbW9kZSBpcyB0aGUgZGVmYXVsdCBmb3IgImdpdCBwdXNoIi4KKworICogImdpdCBhZGQgLXUiIGFuZCAiZ2l0IGFkZCAtQSIsIHdoZW4gcnVuIHdpdGhvdXQgYW55IHBhdGhzcGVjLCBpcyBhCisgICB0cmVlLXdpZGUgb3BlcmF0aW9uIGV2ZW4gd2hlbiBydW4gaW5zaWRlIGEgc3ViZGlyZWN0b3J5IG9mIGEKKyAgIHdvcmtpbmcgdHJlZS4KKworICogImdpdCBhZGQgPHBhdGg+IiBpcyB0aGUgc2FtZSBhcyAiZ2l0IGFkZCAtQSA8cGF0aD4iIG5vdy4KKworICogImNvcmUuc3RhdGluZm8iIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdoaWNoIGlzIGEKKyAgIG5ldmVyLWFkdmVydGlzZWQgc3lub255bSB0byAiY29yZS5jaGVja3N0YXQiLCBoYXMgYmVlbiByZW1vdmVkLgorCisgKiBUaGUgIi1xIiBvcHRpb24gdG8gImdpdCBkaWZmLWZpbGVzIiwgd2hpY2ggZG9lcyAqTk9UKiBtZWFuCisgICAicXVpZXQiLCBoYXMgYmVlbiByZW1vdmVkIChpdCB0b2xkIEdpdCB0byBpZ25vcmUgZGVsZXRpb24sIHdoaWNoCisgICB5b3UgY2FuIGRvIHdpdGggImdpdCBkaWZmLWZpbGVzIC0tZGlmZi1maWx0ZXI9ZCIpLgorCisgKiBTZXJ2ZXIgb3BlcmF0b3JzIGNhbiBsb29zZW4gdGhlICJ0aXBzIG9mIHJlZnMgb25seSIgcmVzdHJpY3Rpb24gZm9yCisgICB0aGUgcmVtb3RlIGFyY2hpdmUgc2VydmljZSB3aXRoIHRoZSB1cGxvYWRhcmNoaXZlLmFsbG93VW5yZWFjaGFibGUKKyAgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgorCisgKiBUaGUgcHJvZ3Jlc3MgaW5kaWNhdG9ycyBmcm9tIHZhcmlvdXMgdGltZS1jb25zdW1pbmcgY29tbWFuZHMgaGF2ZQorICAgYmVlbiBtYXJrZWQgZm9yIGkxOG4vbDEwbi4KKworICogImdpdCBub3RlcyAtQyA8YmxvYj4iIGRpYWdub3NlcyBhcyBhbiBlcnJvciBhbiBhdHRlbXB0IHRvIHVzZSBhbgorICAgb2JqZWN0IHRoYXQgaXMgbm90IGEgYmxvYi4KKworICogImdpdCBjb25maWciIGxlYXJuZWQgdG8gcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCB3aGVuICItIiBpcworICAgZ2l2ZW4gYXMgdGhlIHZhbHVlIHRvIGl0cyAiLS1maWxlIiBwYXJhbWV0ZXIgKGF0dGVtcHRpbmcgYW4KKyAgIG9wZXJhdGlvbiB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIHN0YW5kYXJkIGlucHV0IGlzCisgICByZWplY3RlZCwgb2YgY291cnNlKS4KKworICogVHJhaWxpbmcgd2hpdGVzcGFjZXMgaW4gLmdpdGlnbm9yZSBmaWxlcywgdW5sZXNzIHRoZXkgYXJlIHF1b3RlZAorICAgZm9yIGZubWF0Y2goMyksIGUuZy4gInBhdGhcICIsIGFyZSB3YXJuZWQgYW5kIGlnbm9yZWQuICBTdHJpY3RseQorICAgc3BlYWtpbmcsIHRoaXMgaXMgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlLCBidXQgdmVyeSB1bmxpa2VseQorICAgdG8gYml0ZSBhbnkgc2FuZSB1c2VyIGFuZCBhZGp1c3Rpbmcgc2hvdWxkIGJlIG9idmlvdXMgYW5kIGVhc3kuCisKKyAqIE1hbnkgY29tbWFuZHMgdGhhdCBjcmVhdGUgY29tbWl0cywgZS5nLiAicHVsbCIgYW5kICJyZWJhc2UiLAorICAgbGVhcm5lZCB0byB0YWtlIHRoZSAiLS1ncGctc2lnbiIgb3B0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAqICJnaXQgY29tbWl0IiBjYW4gYmUgdG9sZCB0byBhbHdheXMgR1BHIHNpZ24gdGhlIHJlc3VsdGluZyBjb21taXQKKyAgIGJ5IHNldHRpbmcgdGhlICJjb21taXQuZ3Bnc2lnbiIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAidHJ1ZSIKKyAgICh0aGUgY29tbWFuZC1saW5lIG9wdGlvbiAiLS1uby1ncGctc2lnbiIgc2hvdWxkIG92ZXJyaWRlIGl0KS4KKworICogImdpdCBwdWxsIiBjYW4gYmUgdG9sZCB0byBvbmx5IGFjY2VwdCBmYXN0LWZvcndhcmQgYnkgc2V0dGluZyB0aGUKKyAgIG5ldyAicHVsbC5mZiIgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCByZXNldCIgbGVhcm5lZCB0aGUgIi1OIiBvcHRpb24sIHdoaWNoIGRvZXMgbm90IHJlc2V0IHRoZSBpbmRleAorICAgZnVsbHkgZm9yIHBhdGhzIHRoZSBpbmRleCBrbm93cyBhYm91dCBidXQgdGhlIHRyZWUtaXNoIHRoZSBjb21tYW5kCisgICByZXNldHMgdG8gZG9lcyBub3QgKHRoZXNlIHBhdGhzIGFyZSBrZXB0IGFzIGludGVuZC10by1hZGQgZW50cmllcykuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqIFRoZSBjb21waWxhdGlvbiBvcHRpb25zIHRvIHBvcnQgdG8gQUlYIGFuZCB0byBNU1ZDIGhhdmUgYmVlbgorICAgdXBkYXRlZC4KKworICogV2Ugc3RhcnRlZCB1c2luZyB3aWxkbWF0Y2goKSBpbiBwbGFjZSBvZiBmbm1hdGNoKDMpIGEgZmV3IHJlbGVhc2VzCisgICBhZ287IGNvbXBsZXRlIHRoZSBwcm9jZXNzIGFuZCBzdG9wIHVzaW5nIGZubWF0Y2goMykuCisKKyAqIFVzZXMgb2YgY3VybCdzICJtdWx0aSIgaW50ZXJmYWNlIGFuZCAiZWFzeSIgaW50ZXJmYWNlIGRvIG5vdCBtaXgKKyAgIHdlbGwgd2hlbiB3ZSBhdHRlbXB0IHRvIHJldXNlIG91dGdvaW5nIGNvbm5lY3Rpb25zLiAgVGVhY2ggdGhlIFJQQworICAgb3ZlciBIVFRQIGNvZGUsIHVzZWQgaW4gdGhlIHNtYXJ0IEhUVFAgdHJhbnNwb3J0LCBub3QgdG8gdXNlIHRoZQorICAgImVhc3kiIGludGVyZmFjZS4KKworICogVGhlIGJpdG1hcC1pbmRleCBmZWF0dXJlIGZyb20gSkdpdCBoYXMgYmVlbiBwb3J0ZWQsIHdoaWNoIHNob3VsZAorICAgc2lnbmlmaWNhbnRseSBpbXByb3ZlIHBlcmZvcm1hbmNlIHdoZW4gc2VydmluZyBvYmplY3RzIGZyb20gYQorICAgcmVwb3NpdG9yeSB0aGF0IHVzZXMgaXQuCisKKyAqIFRoZSB3YXkgImdpdCBsb2cgLS1jYyIgc2hvd3MgYSBjb21iaW5lZCBkaWZmIGFnYWluc3QgbXVsdGlwbGUKKyAgIHBhcmVudHMgaGFzIGJlZW4gb3B0aW1pemVkLgorCisgKiBUaGUgcHJlZml4Y21wKCkgYW5kIHN1ZmZpeGNtcCgpIGZ1bmN0aW9ucyBhcmUgZ29uZS4gIFVzZQorICAgc3RhcnRzX3dpdGgoKSBhbmQgZW5kc193aXRoKCksIGFuZCBhbHNvIGNvbnNpZGVyIGlmIHNraXBfcHJlZml4KCkKKyAgIHN1aXRzIHlvdXIgbmVlZHMgYmV0dGVyIHdoZW4gdXNpbmcgdGhlIGZvcm1lci4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4gIE1hbnkKK29mIHRoZW0gY2FtZSBmcm9tIGZsdXJyeSBvZiBhY3Rpdml0aWVzIGFzIEdTb0MgY2FuZGlkYXRlIG1pY3JvcHJvamVjdAorZXhlcmNpc2VzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjkgc2VyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjkgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogImdpdCBwNCIgd2FzIGJyb2tlbiBpbiAxLjkgcmVsZWFzZSB0byBkZWFsIHdpdGggY2hhbmdlcyBpbiBiaW5hcnkKKyAgIGZpbGVzLgorICAgKG1lcmdlIDc0OWI2NjggY2wvcDQtdXNlLWRpZmYtdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzaGVsbCBwcm9tcHQgc2NyaXB0IChpbiBjb250cmliLyksIHdoZW4gdXNpbmcgdGhlIFBST01QVF9DT01NQU5ECisgICBpbnRlcmZhY2UsIHVzZWQgYW4gdW5zYWZlIGNvbnN0cnVjdCB3aGVuIHNob3dpbmcgdGhlIGJyYW5jaCBuYW1lIGluCisgICAkUFMxLgorICAgKG1lcmdlIDFlNDExOWM4IHJoL3Byb21wdC1wY21vZGUtYXZvaWQtZXZhbC1vbi1yZWZuYW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UiIHVzZWQgYSBQT1NJWCBzaGVsbCBjb25zdHJ1Y3QgRnJlZUJTRCdzIC9iaW4vc2ggZG9lcyBub3QKKyAgIHdvcmsgd2VsbCB3aXRoLgorICAgKG1lcmdlIDhjZDY1OTYga20vYXZvaWQtbm9uLWZ1bmN0aW9uLXJldHVybi1pbi1yZWJhc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiB6c2ggcHJvbXB0IChpbiBjb250cmliLykgbGVha2VkIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzLgorCisgKiBCYXNoIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSBkaWQgbm90IGNvbXBsZXRlIHRoZSByZWZzIGFuZCByZW1vdGVzCisgICBjb3JyZWN0bHkgZ2l2ZW4gImdpdCBwdTxUQUI+IiB3aGVuICJwdSIgaXMgYWxpYXNlZCB0byAicHVzaCIuCisKKyAqIFNvbWUgbW9yZSBVbmljb2RlIGNvZGUgcG9pbnRzLCBkZWZpbmVkIGluIFVuaWNvZGUgNi4zIGFzIGhhdmluZyB6ZXJvCisgICB3aWR0aCwgaGF2ZSBiZWVuIHRhdWdodCB0byBvdXIgZGlzcGxheSBjb2x1bW4gY291bnRpbmcgbG9naWMuCisgICAobWVyZ2UgZDgxM2FiOSB0Yi91bmljb2RlLTYuMy16ZXJvLXdpZHRoIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSB0ZXN0cyB1c2VkIHNoZWxsIGNvbnN0cnVjdHMgdGhhdCBkaWQgbm90IHdvcmsgd2VsbCBvbiBGcmVlQlNECisgICAobWVyZ2UgZmY3YTFjNiBrbS9hdm9pZC1icy1pbi1zaGVsbC1nbG9iIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwMDc2NGNhIGttL2F2b2lkLWNwLWEgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiIgZGlkIG5vdCBmYWlsIGEgcmVxdWVzdCB0byBjcmVhdGUgYSByZWYKKyAgIHdoZW4gdGhlIHJlZiBhbHJlYWR5IGV4aXN0ZWQuCisgICAobWVyZ2UgYjlkNTZiNSBtaC91cGRhdGUtcmVmLWJhdGNoLWNyZWF0ZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCAtTXEgYSBiIiBmZWxsIGludG8gYW4gaW5maW5pdGUgbG9vcC4KKyAgIChtZXJnZSBhZDFjM2ZiIGpjL2ZpeC1kaWZmLW5vLWluZGV4LWRpZmYtb3B0LXBhcnNlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCAtLXBydW5lIiwgd2hlbiB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIG11bHRpcGxlIGZldGNoCisgICByZWZzcGVjcyBvdmVybGFwIChlLmcuIHN0b3JpbmcgInJlZnMvaGVhZHMvKiIgdG8KKyAgICJyZWZzL3JlbW90ZXMvb3JpZ2luLyoiLCB3aGlsZSBzdG9yaW5nICJyZWZzL2Zyb3R6LyoiIHRvCisgICAicmVmcy9yZW1vdGVzL29yaWdpbi9mci8qIiksIGFnZ3Jlc3NpdmVseSB0aG91Z2h0IHRoYXQgbGFjayBvZgorICAgInJlZnMvaGVhZHMvZnIvb3R6IiBvbiB0aGUgb3JpZ2luIHNpdGUgbWVhbnQgd2Ugc2hvdWxkIHJlbW92ZQorICAgInJlZnMvcmVtb3Rlcy9vcmlnaW4vZnIvb3R6IiBmcm9tIHVzLCB3aXRob3V0IGNoZWNraW5nIHRoZWlyCisgICAicmVmcy9mcm90ei9vdHoiIGZpcnN0LgorCisgICBOb3RlIHRoYXQgc3VjaCBhIGNvbmZpZ3VyYXRpb24gaXMgaW5oZXJlbnRseSB1bnNhZmUgKHRoaW5rIHdoYXQKKyAgIHNob3VsZCBoYXBwZW4gd2hlbiAicmVmcy9oZWFkcy9mci9vdHoiIGRvZXMgYXBwZWFyIG9uIHRoZSBvcmlnaW4KKyAgIHNpdGUpLCBidXQgdGhhdCBpcyBub3QgYSByZWFzb24gbm90IHRvIGJlIGV4dHJhIGNhcmVmdWwuCisgICAobWVyZ2UgZTZmNjM3MSBjbi9mZXRjaC1wcnVuZS1vdmVybGFwcGluZy1kZXN0aW5hdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tYnJhbmNoIiBzaG93ZWQgaXRzIG91dHB1dCB3aXRoIGxhYmVscworICAgImFoZWFkL2JlaGluZC9nb25lIiB0cmFuc2xhdGVkIHRvIHRoZSB1c2VyJ3MgbG9jYWxlLgorICAgKG1lcmdlIDdhNzZjMjggbW0vc3RhdHVzLXBvcmNlbGFpbi1mb3JtYXQtaTE4bi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHN0cmF5IGVudmlyb25tZW50IHZhcmlhYmxlICRwcmVmaXggY291bGQgaGF2ZSBsZWFrZWQgaW50byBhbmQKKyAgIGFmZmVjdGVkIHRoZSBiZWhhdmlvdXIgb2YgdGhlICJzdWJ0cmVlIiBzY3JpcHQgKGluIGNvbnRyaWIvKS4KKworICogV2hlbiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGVkaXQgYSBjb21taXQgbG9nIG1lc3NhZ2UgKGUuZy4gImdpdAorICAgY29tbWl0IC1tIiBpcyBnaXZlbiBhIG1lc3NhZ2Ugd2l0aG91dCBzcGVjaWZ5aW5nICItZSIpLCB3ZSB1c2VkIHRvCisgICBkaXNhYmxlIHRoZSBzcGF3bmluZyBvZiB0aGUgZWRpdG9yIGJ5IG92ZXJyaWRpbmcgR0lUX0VESVRPUiwgYnV0CisgICB0aGlzIG1lYW5zIGFsbCB0aGUgdXNlcyBvZiB0aGUgZWRpdG9yLCBvdGhlciB0aGFuIHRvIGVkaXQgdGhlCisgICBjb21taXQgbG9nIG1lc3NhZ2UsIGFyZSBhbHNvIGFmZmVjdGVkLgorICAgKG1lcmdlIGI1NDliZTAgYnAvY29tbWl0LXAtZWRpdG9yIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtdiIgdGhhdCBtb3ZlcyBhIHN1Ym1vZHVsZSBmb3Jnb3QgdG8gYWRqdXN0IHRoZSBhcnJheSB0aGF0CisgICB1c2VzIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc3VibW9kdWxlcyB3ZXJlIHRvIGJlIG1vdmVkIHRvIHVwZGF0ZQorICAgaXRzIGNvbmZpZ3VyYXRpb24uCisgICAobWVyZ2UgZmI4YTRlOCBqay9tdi1zdWJtb2R1bGVzLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIExlbmd0aCBsaW1pdCBmb3IgdGhlIHBhdGhuYW1lIHVzZWQgd2hlbiByZW1vdmluZyBhIHBhdGggaW4gYSBkZWVwCisgICBzdWJkaXJlY3RvcnkgaGFzIGJlZW4gcmVtb3ZlZCB0byBhdm9pZCBidWZmZXIgb3ZlcmZsb3dzLgorICAgKG1lcmdlIDJmMjllMGMgbWgvcmVtb3ZlLXN1YnRyZWUtbG9uZy1wYXRobmFtZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGVzdCBoZWxwZXIgbGliLXRlcm1pbmFsIGFsd2F5cyBydW4gYW4gYWN0dWFsIHRlc3RfZXhwZWN0XyoKKyAgIHdoZW4gaW5jbHVkZWQsIHdoaWNoIHNjcmV3ZWQgdXAgd2l0aCB0aGUgdXNlIG9mIHNraWwtYWxsIHRoYXQgbWF5CisgICBoYXZlIHRvIGJlIGRvbmUgbGF0ZXIuCisgICAobWVyZ2UgN2UyNzE3MyBqay9saWItdGVybWluYWwtbGF6eSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgaW5kZXgtcGFjayIgdXNlZCBhIHdyb25nIHZhcmlhYmxlIHRvIG5hbWUgdGhlIGtlZXAtZmlsZSBpbiBhbgorICAgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIG9yIGNsb3NlZC4KKyAgIChtZXJnZSBkZTk4M2EwIG5kL2luZGV4LXBhY2stZXJyb3ItbWVzc2FnZSBsYXRlciB0byBtYWludCkuCisKKyAqICJyZWJhc2UgLWkiIHByb2R1Y2VkIGEgYnJva2VuIGluc24gc2hlZXQgd2hlbiB0aGUgdGl0bGUgb2YgYSBjb21taXQKKyAgIGhhcHBlbmVkIHRvIGNvbnRhaW4gJ1xuJyAob3IgZW5kZWQgd2l0aCAnXGMnKSBkdWUgdG8gYSBjYXJlbGVzcyB1c2UKKyAgIG9mICdlY2hvJy4KKyAgIChtZXJnZSBjYjFhZWZkIHVzL3ByaW50Zi1ub3QtZWNobyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZXJlIHdlcmUgYSBmZXcgaW5zdGFuY2VzIG9mICdnaXQtZm9vJyByZW1haW5pbmcgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzcGVsbGVkICdnaXQgZm9vJy4KKyAgIChtZXJnZSAzYzNlNmY1IHJyL2RvYy1tZXJnZS1zdHJhdGVnaWVzIGxhdGVyIHRvIG1haW50KS4KKworICogU2VydmluZyBvYmplY3RzIGZyb20gYSBzaGFsbG93IHJlcG9zaXRvcnkgbmVlZHMgdG8gd3JpdGUgYQorICAgbmV3IGZpbGUgdG8gaG9sZCB0aGUgdGVtcG9yYXJ5IHNoYWxsb3cgYm91bmRhcmllcywgYnV0IGl0IHdhcyBub3QKKyAgIGNsZWFuZWQgd2hlbiB3ZSBleGl0IGR1ZSB0byBkaWUoKSBvciBhIHNpZ25hbC4KKyAgIChtZXJnZSA3ODM5NjMyIGprL3NoYWxsb3ctdXBkYXRlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gImdpdCBzdGFzaCBwb3AiIHN0b3BzIGFmdGVyIGZhaWxpbmcgdG8gYXBwbHkgdGhlIHN0YXNoCisgICAoZS5nLiBkdWUgdG8gY29uZmxpY3RpbmcgY2hhbmdlcyksIHRoZSBzdGFzaCBpcyBub3QgZHJvcHBlZC4gU3RhdGUKKyAgIHRoYXQgZXhwbGljaXRseSBpbiB0aGUgb3V0cHV0IHRvIGxldCB0aGUgdXNlcnMga25vdy4KKyAgIChtZXJnZSAyZDRjOTkzIGpjL3N0YXNoLXBvcC1ub3QtcG9wcGVkIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGxhYmVscyBpbiAiZ2l0IHN0YXR1cyIgb3V0cHV0IHRoYXQgZGVzY3JpYmUgdGhlIG5hdHVyZSBvZgorICAgY29uZmxpY3RzIChlLmcuICJib3RoIGRlbGV0ZWQiKSB3ZXJlIGxpbWl0ZWQgdG8gMjAgYnl0ZXMsIHdoaWNoIHdhcworICAgdG9vIHNob3J0IGZvciBzb21lIGwxMG4gKGUuZy4gZnIpLgorICAgKG1lcmdlIGM3Y2IzMzMgam4vd3Qtc3RhdHVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjbGVhbiAtZCBwYXRoc3BlYyIgZGlkIG5vdCB1c2UgdGhlIGdpdmVuIHBhdGhzcGVjIGNvcnJlY3RseQorICAgYW5kIGVuZGVkIHVwIGNsZWFuaW5nIHRvbyBtdWNoLgorICAgKG1lcmdlIDFmMmUxMDggamsvY2xlYW4tZC1wYXRoc3BlYyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZnRvb2wiIG1pc2JlaGF2ZWQgd2hlbiB0aGUgcmVwb3NpdG9yeSBpcyBib3VuZCB0byB0aGUKKyAgIHdvcmtpbmcgdHJlZSB3aXRoIHRoZSAiLmdpdCBmaWxlIiBtZWNoYW5pc20sIHdoZXJlIGEgdGV4dHVhbCBmaWxlCisgICAiLmdpdCIgdGVsbHMgdXMgd2hlcmUgaXQgaXMuCisgICAobWVyZ2UgZmNmZWM4YiBkYS9kaWZmdG9vbC1naXQtZmlsZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1c2giIGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byAiYnJhbmNoLioucHVzaHJlbW90ZSIgaWYgaXQgaXMKKyAgIGRlZmluZWQgZWFybGllciB0aGFuICJyZW1vdGUucHVzaGRlZmF1bHQiOyB0aGUgb3JkZXIgb2YgdGhlc2UgdHdvCisgICB2YXJpYWJsZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG91bGQgbm90IG1hdHRlciwgYnV0IGl0IGRpZAorICAgYnkgbWlzdGFrZS4KKyAgIChtZXJnZSA5OGI0MDZmIGprL3JlbW90ZS1wdXNocmVtb3RlLWNvbmZpZy1yZWFkaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBwYXRocyB0aGF0IHBhcnNlIHRpbWVzdGFtcHMgaW4gY29tbWl0IG9iamVjdHMgaGF2ZSBiZWVuCisgICB0aWdodGVuZWQuCisgICAobWVyZ2UgZjgwZDFmOSBqay9jb21taXQtZGF0ZXMtcGFyc2luZy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1leHRlcm5hbC1kaWZmIiBpbmNvcnJlY3RseSBmZWQgdGhlIHN1Ym1vZHVsZSBkaXJlY3RvcnkKKyAgIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGV4dGVybmFsIGRpZmYgZHJpdmVyIHdoZW4gaXQga25ldyB0aGF0IGl0CisgICBpcyB0aGUgc2FtZSBhcyBvbmUgb2YgdGhlIHZlcnNpb25zIGJlaW5nIGNvbXBhcmVkLgorICAgKG1lcmdlIGFiYTQ3MjcgdHIvZGlmZi1zdWJtb2R1bGUtbm8tcmV1c2Utd29ya3RyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlc2V0IiBuZWVkcyB0byByZWZyZXNoIHRoZSBpbmRleCB3aGVuIHdvcmtpbmcgaW4gYSB3b3JraW5nCisgICB0cmVlIChpdCBjYW4gYWxzbyBiZSB1c2VkIHRvIG1hdGNoIHRoZSBpbmRleCB0byB0aGUgSEVBRCBpbiBhbgorICAgb3RoZXJ3aXNlIGJhcmUgcmVwb3NpdG9yeSksIGJ1dCBpdCBmYWlsZWQgdG8gc2V0IHVwIHRoZSB3b3JraW5nCisgICB0cmVlIHByb3Blcmx5LCBjYXVzaW5nIEdJVF9XT1JLX1RSRUUgdG8gYmUgaWdub3JlZC4KKyAgIChtZXJnZSBiNzc1NmQ0IG5kL3Jlc2V0LXNldHVwLXdvcmt0cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVjay1hdHRyIiB3aGVuIHdvcmtpbmcgb24gYSByZXBvc2l0b3J5IHdpdGggYSB3b3JraW5nIHRyZWUKKyAgIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gdGhlIHdvcmtpbmcgdHJlZSB3YXMgc3BlY2lmaWVkIHZpYSB0aGUKKyAgICItLXdvcmstdHJlZSIgKGFuZCBvYnZpb3VzbHkgd2l0aCAiLS1naXQtZGlyIikgb3B0aW9uLgorICAgKG1lcmdlIGNkYmY2MjMgamMvY2hlY2stYXR0ci1ob25vci13b3JraW5nLXRyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAibWVyZ2UtcmVjdXJzaXZlIiB3YXMgYnJva2VuIGluIDEuNy43IGVyYSBhbmQgc3RvcHBlZCB3b3JraW5nIGluCisgICBhbiBlbXB0eSAodGVtcG9yYXJ5KSB3b3JraW5nIHRyZWUsIHdoZW4gdGhlcmUgYXJlIHJlbmFtZXMKKyAgIGludm9sdmVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNmUyMDY4YSBiay9yZWZyZXNoLW1pc3Npbmctb2staW4tbWVyZ2UtcmVjdXJzaXZlIGxhdGVyIHRvIG1haW50LikKKworICogImdpdCByZXYtcGFyc2UiIHdhcyBsb29zZSBpbiByZWplY3RpbmcgY29tbWFuZC1saW5lIGFyZ3VtZW50cworICAgdGhhdCBkbyBub3QgbWFrZSBzZW5zZSwgZS5nLiAiLS1kZWZhdWx0IiB3aXRob3V0IHRoZSByZXF1aXJlZAorICAgdmFsdWUgZm9yIHRoYXQgb3B0aW9uLgorICAgKG1lcmdlIGE0MzIxOWYgZHMvcmV2LXBhcnNlLXJlcXVpcmVkLWFyZ3MgbGF0ZXIgdG8gbWFpbnQuKQorCisgKiAiaW5jbHVkZS5wYXRoIiB2YXJpYWJsZSAob3IgYW55IHZhcmlhYmxlIHRoYXQgZXhwZWN0cyBhIHBhdGggdGhhdAorICAgY2FuIHVzZSB+dXNlcm5hbWUgZXhwYW5zaW9uKSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIG5vdCBhCisgICBib29sZWFuLCBidXQgdGhlIGNvZGUgZmFpbGVkIHRvIGNoZWNrIGl0LgorICAgKG1lcmdlIDY3YmViNjAgamsvY29uZmlnLXBhdGgtaW5jbHVkZS1maXggbGF0ZXIgdG8gbWFpbnQuKQorCisgKiBDb21tYW5kcyB0aGF0IHRha2UgcGF0aHNwZWNzIG9uIHRoZSBjb21tYW5kIGxpbmUgbWlzYmVoYXZlZCB3aGVuCisgICB0aGUgcGF0aHNwZWMgaXMgZ2l2ZW4gYXMgYW4gYWJzb2x1dGUgcGF0aG5hbWUgKHdoaWNoIGlzIGEKKyAgIHByYWN0aWNlIG5vdCBwYXJ0aWN1bGFybHkgZW5jb3VyYWdlZCkgdGhhdCBwb2ludHMgYXQgYSBzeW1ib2xpYworICAgbGluayBpbiB0aGUgd29ya2luZyB0cmVlLgorICAgKG1lcmdlIDYxMjdmZjYgbXcvc3ltbGlua3MgbGF0ZXIgdG8gbWFpbnQuKQorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCAtLSBwYXRoc3BlYzEgcGF0aHNwZWMyIiBzb21ldGltZXMgZGlkIG5vdCByZXR1cm4KKyAgIHRoZSBjb3JyZWN0IHN0YXR1cyB2YWx1ZS4KKyAgIChtZXJnZSBmMzRiMjA1IG5kL2RpZmYtcXVpZXQtc3RhdC1kaXJ0eSBsYXRlciB0byBtYWludC4pCisKKyAqIEF0dGVtcHRpbmcgdG8gZGVlcGVuIGEgc2hhbGxvdyByZXBvc2l0b3J5IGJ5IGZldGNoaW5nIG92ZXIgc21hcnQKKyAgIEhUVFAgdHJhbnNwb3J0IGZhaWxlZCBpbiB0aGUgcHJvdG9jb2wgZXhjaGFuZ2UsIHdoZW4gdGhlIG5vLWRvbmUKKyAgIGV4dGVuc2lvbiB3YXMgdXNlZC4gIFRoZSBmZXRjaGluZyBzaWRlIHdhaXRlZCBmb3IgdGhlIGxpc3Qgb2YKKyAgIHNoYWxsb3cgYm91bmRhcnkgY29tbWl0cyBhZnRlciB0aGUgc2VuZGluZyBzaWRlIHN0b3BwZWQgdGFsa2luZyB0bworICAgaXQuCisgICAobWVyZ2UgMDIzMjg1MiBuZC9odHRwLWZldGNoLXNoYWxsb3ctZml4IGxhdGVyIHRvIG1haW50LikKKworICogQWxsb3cgImdpdCBjbWQgcGF0aC8iLCB3aGVuIHRoZSAncGF0aCcgaXMgd2hlcmUgYSBzdWJtb2R1bGUgaXMKKyAgIGJvdW5kIHRvIHRoZSB0b3AtbGV2ZWwgd29ya2luZyB0cmVlLCB0byBtYXRjaCAncGF0aCcsIGRlc3BpdGUgdGhlCisgICBleHRyYSBhbmQgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2ggKHN1Y2ggYSBzbGFzaCBpcyBvZnRlbgorICAgZ2l2ZW4gYnkgY29tbWFuZC1saW5lIGNvbXBsZXRpb24pLgorICAgKG1lcmdlIDJlNzBjMDEgbmQvc3VibW9kdWxlLXBhdGhzcGVjLWVuZGluZy13aXRoLXNsYXNoIGxhdGVyIHRvIG1haW50LikKKworICogRG9jdW1lbnRhdGlvbiBhbmQgaW4tY29kZSBjb21tZW50cyBoYWQgbWFueSBpbnN0YW5jZXMgb2YgbWlzdGFrZW4KKyAgIHVzZSBvZiAibm9yIiwgd2hpY2ggaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAyMzVlOGQ1IGpsL25vci1vci1uYW5kLWFuZCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTU3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4xLnR4dApAQCAtMCwwICsxLDExNSBAQAorR2l0IHYyLjAuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICogV2UgdXNlZCB0byB1bmNvbmRpdGlvbmFsbHkgZGlzYWJsZSB0aGUgcGFnZXIgaW4gdGhlIHBhZ2VyIHByb2Nlc3MKKyAgIHdlIHNwYXduIHRvIGZlZWQgb3V0IG91dHB1dCwgYnV0IHRoYXQgcHJldmVudGVkIHBlb3BsZSB3aG8gd2FudCB0bworICAgcnVuICJsZXNzIiB3aXRoaW4gImxlc3MiIGZyb20gZG9pbmcgc28uCisKKyAqIFRvb2xzIHRoYXQgcmVhZCBkaWFnbm9zdGljIG91dHB1dCBpbiBvdXIgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGRvCisgICBub3Qgd2FudCB0byBzZWUgdGVybWluYWwgY29udHJvbCBzZXF1ZW5jZSAoZS5nLiBlcmFzZS10by1lb2wpLgorICAgRGV0ZWN0IHRoZW0gYnkgY2hlY2tpbmcgaWYgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBjb25uZWN0ZWQKKyAgIHRvIGEgdHR5LgorICogUmV3b3JkZWQgdGhlIGVycm9yIG1lc3NhZ2UgZ2l2ZW4gdXBvbiBhIGZhaWx1cmUgdG8gb3BlbiBhbiBleGlzdGluZworICAgbG9vc2Ugb2JqZWN0IGZpbGUgZHVlIHRvIGUuZy4gcGVybWlzc2lvbiBpc3N1ZXM7IGl0IHdhcyByZXBvcnRlZCBhcworICAgdGhlIG9iamVjdCBiZWluZyBjb3JydXB0LCBidXQgdGhhdCBpcyBub3QgcXVpdGUgdHJ1ZS4KKworICogImdpdCBsb2cgLTJtYXN0ZXIiIGlzIGEgY29tbW9uIHR5cG8gdGhhdCBzaG93cyB0d28gY29tbWl0cyBzdGFydGluZworICAgZnJvbSB3aGljaGV2ZXIgcmFuZG9tIGJyYW5jaCB0aGF0IGlzIG5vdCAnbWFzdGVyJyB0aGF0IGhhcHBlbnMgdG8KKyAgIGJlIGNoZWNrZWQgb3V0IGN1cnJlbnRseS4KKworICogVGhlICIlPCgxMCx0cnVuYyklcyIgcHJldHR5IGZvcm1hdCBzcGVjaWZpZXIgaW4gdGhlIGxvZyBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIGlzIHVzZWQgdG8gdHJ1bmNhdGUgdGhlIHN0cmluZyB0byBhIGdpdmVuIGxlbmd0aCAoZS5nLiAxMAorICAgaW4gdGhlIGV4YW1wbGUpIHdpdGggcGFkZGluZyB0byBjb2x1bW4tYWxpZ24gdGhlIG91dHB1dCwgYnV0IGRpZAorICAgbm90IHRha2UgaW50byBhY2NvdW50IHRoYXQgbnVtYmVyIG9mIGJ5dGVzIGFuZCBudW1iZXIgb2YgZGlzcGxheQorICAgY29sdW1ucyBhcmUgZGlmZmVyZW50LgorCisgKiBUaGUgIm1haWxtYXAuZmlsZSIgY29uZmlndXJhdGlvbiBvcHRpb24gZGlkIG5vdCBzdXBwb3J0IHRoZSB0aWxkZQorICAgZXhwYW5zaW9uIChpLmUuIH51c2VyL3BhdGggYW5kIH4vcGF0aCkuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdHMgKGluIGNvbnRyaWIvKSBkaWQgbm90IGtub3cgYWJvdXQgcXVpdGUgYSBmZXcKKyAgIG9wdGlvbnMgdGhhdCBhcmUgY29tbW9uIGJldHdlZW4gImdpdCBtZXJnZSIgYW5kICJnaXQgcHVsbCIsIGFuZCBhCisgICBjb3VwbGUgb2Ygb3B0aW9ucyB1bmlxdWUgdG8gImdpdCBtZXJnZSIuCisKKyAqICItLWlnbm9yZS1zcGFjZS1jaGFuZ2UiIG9wdGlvbiBvZiAiZ2l0IGFwcGx5IiBpZ25vcmVkIHRoZSBzcGFjZXMKKyAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgbGluZSB0b28gYWdncmVzc2l2ZWx5LCB3aGljaCBpcyBpbmNvbnNpc3RlbnQKKyAgIHdpdGggdGhlIG9wdGlvbiBvZiB0aGUgc2FtZSBuYW1lICJkaWZmIiBhbmQgImdpdCBkaWZmIiBoYXZlLgorCisgKiAiZ2l0IGJsYW1lIiBtaXNjb3VudGVkIG51bWJlciBvZiBjb2x1bW5zIG5lZWRlZCB0byBzaG93IGxvY2FsaXplZAorICAgdGltZXN0YW1wcywgcmVzdWx0aW5nIGluIGphZ2d5IGxlZnQtc2lkZS1lZGdlIG9mIHRoZSBzb3VyY2UgY29kZQorICAgbGluZXMgaW4gaXRzIG91dHB1dC4KKworICogImdpdCBibGFtZSIgYXNzaWduZWQgdGhlIGJsYW1lIHRvIHRoZSBjb3B5IGluIHRoZSB3b3JraW5nLXRyZWUgaWYKKyAgIHRoZSByZXBvc2l0b3J5IGlzIHNldCB0byBjb3JlLmF1dG9jcmxmPWlucHV0IGFuZCB0aGUgZmlsZSB1c2VkIENSTEYKKyAgIGxpbmUgZW5kaW5ncy4KKworICogImdpdCBjb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1DICRjb21taXQiIGRpZCBub3Qgd29yayB3aGVuIHRoZQorICAgY29tbWl0IGRpZCBub3QgaGF2ZSBhbnkgbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgZGlmZiAtLWZpbmQtY29waWVzLWhhcmRlciIgc29tZXRpbWVzIHByZXRlbmRlZCBhcyBpZiB0aGUgbW9kZQorICAgYml0cyBoYXZlIGNoYW5nZWQgZm9yIHBhdGhzIHRoYXQgYXJlIG1hcmtlZCB3aXRoIGFzc3VtZS11bmNoYW5nZWQKKyAgIGJpdC4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3QgZW5mb3JjZSB0aGUgcnVsZSB0aGF0IHRoZSAiLS1mb2xsb3ciCisgICBvcHRpb24gZnJvbSB0aGUgbG9nL2RpZmYgZmFtaWx5IG9mIGNvbW1hbmRzIG11c3QgYmUgdXNlZCB3aXRoCisgICBleGFjdGx5IG9uZSBwYXRoc3BlYy4KKworICogImdpdCBnYyAtLWF1dG8iIHdhcyByZWNlbnRseSBjaGFuZ2VkIHRvIHJ1biBpbiB0aGUgYmFja2dyb3VuZCB0bworICAgZ2l2ZSBjb250cm9sIGJhY2sgZWFybHkgdG8gdGhlIGVuZC11c2VyIHNpdHRpbmcgaW4gZnJvbnQgb2YgdGhlCisgICB0ZXJtaW5hbCwgYnV0IGl0IGZvcmdvdCB0aGF0IGhvdXNla2VlcGluZyBpbnZvbHZpbmcgcmVmbG9ncyBzaG91bGQKKyAgIGJlIGRvbmUgd2l0aG91dCBvdGhlciBwcm9jZXNzZXMgY29tcGV0aW5nIGZvciBhY2Nlc3NlcyB0byB0aGUgcmVmcy4KKworICogImdpdCBncmVwIC1PIiB0byBzaG93IHRoZSBsaW5lcyB0aGF0IGhpdCBpbiB0aGUgcGFnZXIgZGlkIG5vdCB3b3JrCisgICB3ZWxsIHdpdGggY2FzZSBpbnNlbnNpdGl2ZSBzZWFyY2guICBXZSBub3cgc3Bhd24gImxlc3MiIHdpdGggaXRzCisgICAiLUkiIG9wdGlvbiB3aGVuIGl0IGlzIHVzZWQgYXMgdGhlIHBhZ2VyICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuCisKKyAqIFdlIHVzZWQgdG8gZGlzYWJsZSB0aHJlYWRlZCAiZ2l0IGluZGV4LXBhY2siIG9uIHBsYXRmb3JtcyB3aXRob3V0CisgICB0aHJlYWQtc2FmZSBwcmVhZCgpOyB1c2UgYSBkaWZmZXJlbnQgd29ya2Fyb3VuZCBmb3Igc3VjaAorICAgcGxhdGZvcm1zIHRvIGFsbG93IHRocmVhZGVkICJnaXQgaW5kZXgtcGFjayIuCisKKyAqIFRoZSBlcnJvciByZXBvcnRpbmcgZnJvbSAiZ2l0IGluZGV4LXBhY2siIGhhcyBiZWVuIGltcHJvdmVkIHRvCisgICBkaXN0aW5ndWlzaCBtaXNzaW5nIG9iamVjdHMgZnJvbSB0eXBlIGVycm9ycy4KKworICogImdpdCBtYWlsaW5mbyIgdXNlZCB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIGhlYWRlciBzdHJpbmcgd2hpbGUKKyAgIHBhcnNpbmcgYW4gaW5jb21pbmcgZS1tYWlsIG1lc3NhZ2UgdG8gZXh0cmFjdCB0aGUgcGF0Y2guCisKKyAqIE9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBtZXJnZS1yZWN1cnNpdmUgaW5jb3JyZWN0bHkKKyAgIGRlbGV0ZWQgdGhlIGZpbGUgdGhhdCBpcyB0byBiZSByZW5hbWVkIHRvIGEgbmFtZSB0aGF0IGlzIHRoZSBzYW1lCisgICBleGNlcHQgZm9yIGNhc2UgZGlmZmVyZW5jZXMuCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiB1bm5lY2Vzc2FyaWx5IGNvcGllZCB0aGUgcHJldmlvdXMgY29udGVudHMgd2hlbgorICAgZXh0ZW5kaW5nIHRoZSBoYXNodGFibGUsIGV2ZW4gdGhvdWdoIGl0IHdpbGwgcG9wdWxhdGUgdGhlIHRhYmxlCisgICBmcm9tIHNjcmF0Y2ggYW55d2F5LgorCisgKiAiZ2l0IHJlcmVyZSBmb3JnZXQiIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gbWVyZ2UuY29uZmxpY3RzdHlsZQorICAgd2FzIHNldCB0byBhIG5vbi1kZWZhdWx0IHZhbHVlLgorCisgKiAiZ2l0IHJlbW90ZSBybSIgYW5kICJnaXQgcmVtb3RlIHBydW5lIiBjYW4gaW52b2x2ZSByZW1vdmluZyBtYW55CisgICByZWZzIGF0IG9uY2UsIHdoaWNoIGlzIG5vdCBhIHZlcnkgZWZmaWNpZW50IHRoaW5nIHRvIGRvIHdoZW4gdmVyeQorICAgbWFueSByZWZzIGV4aXN0IGluIHRoZSBwYWNrZWQtcmVmcyBmaWxlLgorCisgKiAiZ2l0IGxvZyAtLWV4Y2x1ZGU9PGdsb2I+IC0tYWxsIHwgZ2l0IHNob3J0bG9nIiB3b3JrZWQgYXMgZXhwZWN0ZWQsCisgICBidXQgImdpdCBzaG9ydGxvZyAtLWV4Y2x1ZGU9PGdsb2I+IC0tYWxsIiwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUKKyAgIGlkZW50aWNhbCB0byB0aGUgYWJvdmUgcGlwZWxpbmUsIHdhcyBub3QgYWNjZXB0ZWQgYXQgdGhlIGNvbW1hbmQKKyAgIGxpbmUgYXJndW1lbnQgcGFyc2VyIGxldmVsLgorCisgKiBUaGUgYXV0b3N0YXNoIG1vZGUgb2YgImdpdCByZWJhc2UgLWkiIGRpZCBub3QgcmVzdG9yZSB0aGUgZGlydHkKKyAgIHdvcmtpbmcgdHJlZSBzdGF0ZSBpZiB0aGUgdXNlciBhYm9ydGVkIHRoZSBpbnRlcmFjdGl2ZSByZWJhc2UgYnkKKyAgIGVtcHR5aW5nIHRoZSBpbnNuIHNoZWV0LgorCisgKiAiZ2l0IHNob3cgLXMiIChpLmUuIHNob3cgbG9nIG1lc3NhZ2Ugb25seSkgdXNlZCB0byBpbmNvcnJlY3RseSBlbWl0CisgICBhbiBleHRyYSBibGFuayBsaW5lIGFmdGVyIGEgbWVyZ2UgY29tbWl0LgorCisgKiAiZ2l0IHN0YXR1cyIsIGV2ZW4gdGhvdWdoIGl0IGlzIGEgcmVhZC1vbmx5IG9wZXJhdGlvbiwgdHJpZXMgdG8KKyAgIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZWZyZXNoZWQgbHN0YXQoMikgaW5mbyB0byBvcHRpbWl6ZSBmdXR1cmUKKyAgIGFjY2Vzc2VzIHRvIHRoZSB3b3JraW5nIHRyZWUgb3Bwb3J0dW5pc3RpY2FsbHksIGJ1dCB0aGlzIGNvdWxkCisgICByYWNlIHdpdGggYSAicmVhZC13cml0ZSIgb3BlcmF0aW9uIHRoYXQgbW9kaWZ5IHRoZSBpbmRleCB3aGlsZSBpdAorICAgaXMgcnVubmluZy4gIERldGVjdCBzdWNoIGEgcmFjZSBhbmQgYXZvaWQgb3ZlcndyaXRpbmcgdGhlIGluZGV4LgorCisgKiAiZ2l0IHN0YXR1cyIgKGFuZCAiZ2l0IGNvbW1pdCIpIGJlaGF2ZWQgYXMgaWYgY2hhbmdlcyBpbiBhIG1vZGlmaWVkCisgICBzdWJtb2R1bGUgYXJlIG5vdCB0aGVyZSBpZiBzdWJtb2R1bGUuKi5pZ25vcmUgY29uZmlndXJhdGlvbiBpcyBzZXQsCisgICB3aGljaCB3YXMgbWlzbGVhZGluZy4gIFRoZSBjb25maWd1cmF0aW9uIGlzIG9ubHkgdG8gdW5jbHV0dGVyIGRpZmYKKyAgIG91dHB1dCBkdXJpbmcgdGhlIGNvdXJzZSBvZiBkZXZlbG9wbWVudCwgYW5kIHNob3VsZCBub3QgdG8gaGlkZQorICAgY2hhbmdlcyBpbiB0aGUgInN0YXR1cyIgb3V0cHV0IHRvIGNhdXNlIHRoZSB1c2VycyBmb3JnZXQgdG8gY29tbWl0CisgICB0aGVtLgorCisgKiBUaGUgbW9kZSB0byBydW4gdGVzdHMgd2l0aCBIVFRQIHNlcnZlciB0ZXN0cyBkaXNhYmxlZCB3YXMgYnJva2VuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTgzMjFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMi50eHQKQEAgLTAsMCArMSwzMiBAQAorR2l0IHYyLjAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICogRG9jdW1lbnRhdGlvbiBmb3IgImdpdCBzdWJtb2R1bGUgc3luYyIgZm9yZ290IHRvIHNheSB0aGF0IHRoZSBzdWJjb21tYW5kCisgICBjYW4gdGFrZSB0aGUgIi0tcmVjdXJzaXZlIiBvcHRpb24uCisKKyAqIE1pc2hhbmRsaW5nIG9mIHBhdHRlcm5zIGluIC5naXRpZ25vcmUgdGhhdCBoYXMgdHJhaWxpbmcgU1BzIHF1b3RlZAorICAgd2l0aCBiYWNrc2xhc2hlcyAoZS5nLiBvbmVzIHRoYXQgZW5kIHdpdGggIlwgIikgaGF2ZSBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFJlY2VudCB1cGRhdGVzIHRvICJnaXQgcmVwYWNrIiBzdGFydGVkIHRvIGR1cGxpY2F0ZSBvYmplY3RzIHRoYXQKKyAgIGFyZSBpbiBwYWNrZmlsZXMgbWFya2VkIHdpdGggLmtlZXAgZmxhZyBpbnRvIHRoZSBuZXcgcGFja2ZpbGUgYnkKKyAgIG1pc3Rha2UuCisKKyAqICJnaXQgY2xvbmUgLWIgYnJlZnMvdGFncy9iYXIiIHdvdWxkIGhhdmUgbWlzdGFrZW5seSB0aG91Z2h0IHdlIHdlcmUKKyAgIGZvbGxvd2luZyBhIHNpbmdsZSB0YWcsIGV2ZW4gdGhvdWdoIGl0IHdhcyBhIG5hbWUgb2YgdGhlIGJyYW5jaCwKKyAgIGJlY2F1c2UgaXQgaW5jb3JyZWN0bHkgdXNlZCBzdHJzdHIoKS4KKworICogIiVHIiAobm90aGluZyBhZnRlciBHKSBpcyBhbiBpbnZhbGlkIHByZXR0eSBmb3JtYXQgc3BlY2lmaWVyLCBidXQKKyAgIHRoZSBwYXJzZXIgZGlkIG5vdCBub3RpY2UgaXQgYXMgZ2FyYmFnZS4KKworICogQ29kZSB0byBhdm9pZCBhZGRpbmcgdGhlIHNhbWUgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSB0d2ljZSB3YXMKKyAgIHN1YnRseSBicm9rZW4gZm9yIGEgbG9uZyB0aW1lLCBidXQgbm9ib2R5IHNlZW1zIHRvIGhhdmUgbm90aWNlZC4KKworICogQSBoYW5kZnVsIG9mIGNvZGUgcGF0aHMgaGFkIHRvIHJlYWQgdGhlIGNvbW1pdCBvYmplY3QgbW9yZSB0aGFuCisgICBvbmNlIHdoZW4gc2hvd2luZyBoZWFkZXIgZmllbGRzIHRoYXQgYXJlIHVzdWFsbHkgbm90IHBhcnNlZC4gIFRoZQorICAgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdAorICAgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVkdWNlIHRoZSBuZWVkIGZvciB0aGlzIGRvdWJsZS1yZWFkaW5nLAorICAgYW5kIHRvIGFsbG93IHRoZSBjYWxsZXIgZmluZCB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QuCisKKyAqIER1cmluZyAiZ2l0IHJlYmFzZSAtLW1lcmdlIiwgYSBjb25mbGljdGVkIHBhdGNoIGNvdWxkIG5vdCBiZQorICAgc2tpcHBlZCB3aXRoICItLXNraXAiIGlmIHRoZSBuZXh0IG9uZSBhbHNvIGNvbmZsaWN0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNDdiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4zLnR4dApAQCAtMCwwICsxLDE3IEBACitHaXQgdjIuMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBBbiBhbmNpZW50IHJld3JpdGUgcGFzc2VkIGEgd3JvbmcgcG9pbnRlciB0byBhIGN1cmwgbGlicmFyeQorICAgZnVuY3Rpb24gaW4gYSByYXJlbHkgdXNlZCBjb2RlIHBhdGguCisKKyAqICJmaWx0ZXItYnJhbmNoIiBsZWZ0IGFuIGVtcHR5IHNpbmdsZS1wYXJlbnQgY29tbWl0IHRoYXQgcmVzdWx0cyB3aGVuCisgICBhbGwgcGFyZW50cyBvZiBhIG1lcmdlIGNvbW1pdCBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBjb21taXQsIGV2ZW4KKyAgIHVuZGVyICItLXBydW5lLWVtcHR5Ii4KKworICogImxvZyAtLXNob3ctc2lnbmF0dXJlIiBpbmNvcnJlY3RseSBkZWNpZGVkIHRoZSBjb2xvciB0byBwYWludCBhCisgICBtZXJnZXRhZyB0aGF0IHdhcyBhbmQgd2FzIG5vdCBjb3JyZWN0bHkgdmFsaWRhdGVkLgorCisgKiAibG9nIC0tc2hvdy1zaWduYXR1cmUiIGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byAiLS1ncmFwaCIgb3B0aW9uLgorCitBbHNvIGEgbG90IG9mIGZpeGVzIHRvIHRoZSB0ZXN0cyBhbmQgc29tZSB1cGRhdGVzIHRvIHRoZSBkb2NzIGFyZQoraW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzQwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC40LnR4dApAQCAtMCwwICsxLDUgQEAKK0dpdCB2Mi4wLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIHRvIHYyLjAuMiBicm9rZW4gb3V0cHV0IGZyb20gImdpdCBkaWZmLXRyZWUiLAorICAgd2hpY2ggaXMgZml4ZWQgaW4gdGhpcyByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTE2ZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuNS50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IHYyLjAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMC40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2UgdXNlZCB0byBhbGxvdyBjb21taXR0aW5nIGEgcGF0aCAiLkdpdC9jb25maWciIHdpdGggR2l0IHRoYXQgaXMKKyAgIHJ1bm5pbmcgb24gYSBjYXNlIHNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBidXQgYW4gYXR0ZW1wdCB0byBjaGVjayBvdXQKKyAgIHN1Y2ggYSBwYXRoIHdpdGggR2l0IHRoYXQgcnVucyBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbQorICAgd291bGQgaGF2ZSBjbG9iYmVyZWQgIi5naXQvY29uZmlnIiwgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdAorICAgdGhlIHVzZXIgd291bGQgaGF2ZSBleHBlY3RlZC4gIEdpdCBub3cgcHJldmVudHMgeW91IGZyb20gdHJhY2tpbmcKKyAgIGEgcGF0aCB3aXRoICIuR2l0IiAoaW4gYW55IGNhc2UgY29tYmluYXRpb24pIGFzIGEgcGF0aCBjb21wb25lbnQuCisKKyAqIE9uIFdpbmRvd3MsIGNlcnRhaW4gcGF0aCBjb21wb25lbnRzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tICIuZ2l0IgorICAgYXJlIG1hcHBlZCB0byAiLmdpdCIsIGUuZy4gImdpdH4xL2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlCisgICAiLmdpdC9jb25maWciLiAgSEZTKyBoYXMgYSBzaW1pbGFyIGlzc3VlLCB3aGVyZSBjZXJ0YWluIHVuaWNvZGUKKyAgIGNvZGVwb2ludHMgYXJlIGlnbm9yZWQsIGUuZy4gIi5nXHUyMDBjaXQvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmCisgICBpdCB3ZXJlICIuZ2l0L2NvbmZpZyIuICBQYXRobmFtZXMgd2l0aCB0aGVzZSBwb3RlbnRpYWwgaXNzdWVzIGFyZQorICAgcmVqZWN0ZWQgb24gdGhlIGFmZmVjdGVkIHN5c3RlbXMuICBHaXQgb24gc3lzdGVtcyB0aGF0IGFyZSBub3QKKyAgIGFmZmVjdGVkIGJ5IHRoaXMgaXNzdWUgKGUuZy4gTGludXgpIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8KKyAgIHJlamVjdCB0aGVtIHRvIGVuc3VyZSBjcm9zcyBwbGF0Zm9ybSBpbnRlcm9wZXJhYmlsaXR5IG9mIHRoZSBob3N0ZWQKKyAgIHByb2plY3RzLgorCisgKiAiZ2l0IGZzY2siIG5vdGljZXMgYSB0cmVlIG9iamVjdCB0aGF0IHJlY29yZHMgc3VjaCBhIHBhdGggdGhhdCBjYW4KKyAgIGJlIGNvbmZ1c2VkIHdpdGggIi5naXQiLCBhbmQgd2l0aCByZWNlaXZlLmZzY2tPYmplY3RzIGNvbmZpZ3VyYXRpb24KKyAgIHNldCB0byB0cnVlLCBhbiBhdHRlbXB0IHRvICJnaXQgcHVzaCIgc3VjaCBhIHRyZWUgb2JqZWN0IHdpbGwgYmUKKyAgIHJlamVjdGVkLiAgU3VjaCBhIHBhdGggbWF5IG5vdCBiZSBhIHByb2JsZW0gb24gYSB3ZWxsIGJlaGF2aW5nCisgICBmaWxlc3lzdGVtIGJ1dCBpbiBvcmRlciB0byBwcm90ZWN0IHRob3NlIG9uIEhGUysgYW5kIG9uIGNhc2UKKyAgIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zLCB0aGlzIGNoZWNrIGlzIGVuYWJsZWQgb24gYWxsIHBsYXRmb3Jtcy4KKworQSBiaWcgInRoYW5rcyEiIGZvciBicmluZ2luZyB0aGlzIGlzc3VlIHRvIHVzIGdvZXMgdG8gb3VyIGZyaWVuZHMgaW4KK3RoZSBNZXJjdXJpYWwgbGFuZCwgbmFtZWx5LCBNYXR0IE1hY2thbGwgYW5kIEF1Z2llIEZhY2tsZXIuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNDc1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4wLnR4dApAQCAtMCwwICsxLDM5MSBAQAorR2l0IHYyLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBkZWZhdWx0IHZhbHVlIHdlIGdpdmUgdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExFU1MgaGFzIGJlZW4KKyAgIGNoYW5nZWQgZnJvbSAiRlJTWCIgdG8gIkZSWCIsIGxvc2luZyAiUyIgKGNob3AgbG9uZyBsaW5lcyBpbnN0ZWFkCisgICBvZiB3cmFwcGluZykuICBFeGlzdGluZyB1c2VycyB3aG8gcHJlZmVyIG5vdCB0byBzZWUgbGluZS13cmFwcGVkCisgICBvdXRwdXQgbWF5IHdhbnQgdG8gc2V0CisKKyAgICAgJCBnaXQgY29uZmlnIGNvcmUucGFnZXIgImxlc3MgLVMiCisKKyAgIHRvIHJlc3RvcmUgdGhlIHRyYWRpdGlvbmFsIGJlaGF2aW91ci4gIEl0IGlzIGV4cGVjdGVkIHRoYXQgcGVvcGxlCisgICBmaW5kIG91dHB1dCBmcm9tIG1vc3Qgc3ViY29tbWFuZHMgZWFzaWVyIHRvIHJlYWQgd2l0aCB0aGUgbmV3CisgICBkZWZhdWx0LCBleGNlcHQgZm9yICJibGFtZSIgd2hpY2ggdGVuZHMgdG8gcHJvZHVjZSByZWFsbHkgbG9uZworICAgbGluZXMuICBUbyBvdmVycmlkZSB0aGUgbmV3IGRlZmF1bHQgb25seSBmb3IgImdpdCBibGFtZSIsIHlvdSBjYW4KKyAgIGRvIHRoaXM6CisKKyAgICAgJCBnaXQgY29uZmlnIHBhZ2VyLmJsYW1lICJsZXNzIC1TIgorCisgKiBBIGZldyBkaXN1c2VkIGRpcmVjdG9yaWVzIGluIGNvbnRyaWIvIGhhdmUgYmVlbiByZXRpcmVkLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBTaW5jZSB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgR2l0LCB3ZSBnYXZlIHRoZSBMRVNTIGVudmlyb25tZW50IGEKKyAgIGRlZmF1bHQgdmFsdWUgIkZSU1giIHdoZW4gd2Ugc3Bhd24gImxlc3MiIGFzIHRoZSBwYWdlci4gICJTIiAoY2hvcAorICAgbG9uZyBsaW5lcyBpbnN0ZWFkIG9mIHdyYXBwaW5nKSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhpcyBkZWZhdWx0CisgICBzZXQgb2Ygb3B0aW9ucywgYmVjYXVzZSBpdCBpcyBtb3JlIG9yIGxlc3MgYSBwZXJzb25hbCB0YXN0ZSB0aGluZywKKyAgIGFzIG9wcG9zZWQgdG8gdGhlIG90aGVycyB0aGF0IGhhdmUgZ29vZCBqdXN0aWZpY2F0aW9ucyAoaS5lLiAiUiIgaXMKKyAgIHZlcnkgbXVjaCBqdXN0aWZpZWQgYmVjYXVzZSBtYW55IGtpbmRzIG9mIG91dHB1dCB3ZSBwcm9kdWNlIGFyZQorICAgY29sb3JlZCBhbmQgIkZYIiBpcyBqdXN0aWZpZWQgYmVjYXVzZSBvdXRwdXQgd2UgcHJvZHVjZSBpcyBvZnRlbgorICAgc2hvcnRlciB0aGFuIGEgcGFnZSkuCisKKyAqIFRoZSBsb2dpYyBhbmQgZGF0YSB1c2VkIHRvIGNvbXB1dGUgdGhlIGRpc3BsYXkgd2lkdGggbmVlZGVkIGZvcgorICAgVVRGLTggc3RyaW5ncyBoYXZlIGJlZW4gdXBkYXRlZCB0byBtYXRjaCBVbmljb2RlIDcuMCBiZXR0ZXIuCisKKyAqIEhUVFAtYmFzZWQgdHJhbnNwb3J0cyBsZWFybmVkIHRvIGJldHRlciBwcm9wYWdhdGUgdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20KKyAgIHRoZSB3ZWJzZXJ2ZXIgdG8gdGhlIGNsaWVudCBjb21pbmcgb3ZlciB0aGUgSFRUUCB0cmFuc3BvcnQuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCBmb3IgYmFzaCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGJldHRlciBoYW5kbGUgYWxpYXNlcyB0aGF0IGRlZmluZSBhIGNvbXBsZXggc2VxdWVuY2Ugb2YgY29tbWFuZHMuCisKKyAqIFRoZSAiY29yZS5wcmVsb2FkaW5kZXgiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LAorICAgYWxsb3dpbmcgbW9kZXJuIHBsYXRmb3JtcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVpcgorICAgbXVsdGlwbGUgY29yZXMuCisKKyAqICJnaXQgY2xvbmUiIGFwcGxpZXMgdGhlICJpZiBjbG9uaW5nIGZyb20gYSBsb2NhbCBkaXNrLCBwaHlzaWNhbGx5CisgICBjb3B5IHRoZSByZXBvc2l0b3J5IHVzaW5nIGhhcmRsaW5rcywgdW5sZXNzIG90aGVyd2lzZSB0b2xkIG5vdCB0byB3aXRoCisgICAtLW5vLWxvY2FsIiBvcHRpbWl6YXRpb24gd2hlbiB0aGUgdXJsLiouaW5zdGVhZE9mIG1lY2hhbmlzbSByZXdyaXRlcyBhCisgICByZW1vdGUtcmVwb3NpdG9yeSAiZ2l0IGNsb25lICRVUkwiIGludG8gYQorICAgY2xvbmUgZnJvbSBhIGxvY2FsIGRpc2suCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT08ZGF0ZT4iIG9wdGlvbiBsZWFybmVkIG1vcmUKKyAgIHRpbWVzdGFtcCBmb3JtYXRzLCBpbmNsdWRpbmcgIi0tZGF0ZT1ub3ciLgorCisgKiBUaGUgYGNvcmUuY29tbWVudENoYXJgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgdXNlZCB0byBzcGVjaWZ5IGEKKyAgIGN1c3RvbSBjb21tZW50IGNoYXJhY3RlciAob3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAiIyIpIGZvcgorICAgdGhlIGNvbW1pdCBtZXNzYWdlIGVkaXRvci4gIFRoaXMgY2FuIGJlIHNldCB0byBgYXV0b2AgdG8gYXR0ZW1wdCB0bworICAgY2hvb3NlIGEgZGlmZmVyZW50IGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGNvbmZsaWN0IHdpdGggYW55IHRoYXQKKyAgIGFscmVhZHkgc3RhcnRzIGEgbGluZSBpbiB0aGUgbWVzc2FnZSBiZWluZyBlZGl0ZWQsIGZvciBjYXNlcyBsaWtlCisgICAiZ2l0IGNvbW1pdCAtLWFtZW5kIi4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgLS1zaWduYXR1cmUtZmlsZT08ZmlsZT4gdG8gYWRkIHRoZSBjb250ZW50cworICAgb2YgYSBmaWxlIGFzIGEgc2lnbmF0dXJlIHRvIHRoZSBtYWlsIG1lc3NhZ2UgaXQgcHJvZHVjZXMuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCB0aGUgZ3JlcC5mdWxsbmFtZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGZvcmNlCisgICAiLS1mdWxsLW5hbWUiIHRvIGJlIHRoZSBkZWZhdWx0LiAgVGhpcyBtYXkgY2F1c2UgcmVncmVzc2lvbnMgZm9yCisgICBzY3JpcHRlZCB1c2VycyB3aG8gZG8gbm90IGV4cGVjdCB0aGlzIG5ldyBiZWhhdmlvdXIuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBsZWFybmVkIHRvIGFzayB0aGUgY3JlZGVudGlhbCBoZWxwZXIgZm9yIGF1dGgKKyAgIG1hdGVyaWFsLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbm93IHVuZGVyc3RhbmQgdGhlIHZhbHVlICJhdXRvIiBmb3IgdGhlCisgICAibG9nLmRlY29yYXRlIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGVuYWJsZSB0aGUgIi0tZGVjb3JhdGUiCisgICBvcHRpb24gYXV0b21hdGljYWxseSB3aGVuIHRoZSBvdXRwdXQgaXMgc2VudCB0byB0dHkuCisKKyAqICJnaXQgbWVyZ2UiIHdpdGhvdXQgYW4gYXJndW1lbnQsIGV2ZW4gd2hlbiB0aGVyZSBpcyBhbiB1cHN0cmVhbQorICAgZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLCByZWZ1c2VkIHRvIHJ1biB1bnRpbAorICAgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gaXMgc2V0IHRvIHRydWUuICBGbGlwIHRoZSBkZWZhdWx0IG9mIHRoYXQKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gdHJ1ZS4KKworICogImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgdG8gZHJpdmUgdGhlIHZpbWRpZmYzIGJhY2tlbmQuCisKKyAqIG1lcmdldG9vbC5wcm9tcHQgdXNlZCB0byBkZWZhdWx0IHRvICd0cnVlJywgYWx3YXlzIGFza2luZyAiZG8geW91CisgICByZWFsbHkgd2FudCB0byBydW4gdGhlIHRvb2wgb24gdGhpcyBwYXRoPyIuICBUaGUgZGVmYXVsdCBoYXMgYmVlbgorICAgY2hhbmdlZCB0byAnZmFsc2UnLiAgSG93ZXZlciwgdGhlIHByb21wdCB3aWxsIHN0aWxsIGFwcGVhciBpZgorICAgbWVyZ2V0b29sIHVzZWQgaXRzIGF1dG9kZXRlY3Rpb24gc3lzdGVtIHRvIGd1ZXNzIHdoaWNoIHRvb2wgdG8gdXNlLgorICAgVXNlcnMgd2hvIGV4cGxpY2l0bHkgc3BlY2lmeSBvciBjb25maWd1cmUgYSB0b29sIHdpbGwgbm8gbG9uZ2VyIHNlZQorICAgdGhlIHByb21wdCBieSBkZWZhdWx0LgorCisgICBTdHJpY3RseSBzcGVha2luZywgdGhpcyBpcyBhIGJhY2t3YXJkIGluY29tcGF0aWJsZSBjaGFuZ2UgYW5kCisgICB1c2VycyBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB2YXJpYWJsZSB0byAndHJ1ZScgaWYgdGhleSB3YW50CisgICB0byBiZSBwcm9tcHRlZCB0byBjb25maXJtIHJ1bm5pbmcgdGhlIHRvb2wgb24gZWFjaCBwYXRoLgorCisgKiAiZ2l0IHJlcGxhY2UiIGxlYXJuZWQgdGhlICItLWVkaXQiIHN1YmNvbW1hbmQgdG8gY3JlYXRlIGEKKyAgIHJlcGxhY2VtZW50IGJ5IGVkaXRpbmcgYW4gZXhpc3Rpbmcgb2JqZWN0LgorCisgKiAiZ2l0IHJlcGxhY2UiIGxlYXJuZWQgYSAiLS1ncmFmdCIgb3B0aW9uIHRvIHJld3JpdGUgdGhlIHBhcmVudHMgb2YgYQorICAgY29tbWl0LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgIi0tdG8tY292ZXIiIGFuZCAiLS1jYy1jb3ZlciIgb3B0aW9ucywgdG8KKyAgIHRlbGwgaXQgdG8gY29weSBUbzogYW5kIENjOiBoZWFkZXJzIGZvdW5kIGluIHRoZSBmaXJzdCBpbnB1dCBmaWxlCisgICB3aGVuIGVtaXR0aW5nIGxhdGVyIGlucHV0IGZpbGVzLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCB0byBjb3BlIHdpdGggbWFsZm9ybWVkIHRpbWVzdGFtcHMgd2l0aCBvbmx5IG9uZQorICAgZGlnaXQgaW4gdGhlIGhvdXIgcGFydCwgZS5nLiAyMDE0LTAxLTA3VDU6MDE6MDIuMDQ4MTc2WiwgZW1pdHRlZAorICAgYnkgc29tZSBicm9rZW4gc3VidmVyc2lvbiBzZXJ2ZXIgaW1wbGVtZW50YXRpb25zLgorCisgKiAiZ2l0IHRhZyIgd2hlbiBlZGl0aW5nIHRoZSB0YWcgbWVzc2FnZSBzaG93cyB0aGUgbmFtZSBvZiB0aGUgdGFnCisgICBiZWluZyBlZGl0ZWQgYXMgYSBjb21tZW50IGluIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgdGFnIiBsZWFybmVkIHRvIHBheSBhdHRlbnRpb24gdG8gInRhZy5zb3J0IiBjb25maWd1cmF0aW9uLCB0bworICAgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIHdoZW4gbm8gLS1zb3J0PTx2YWx1ZT4gb3B0aW9uCisgICBpcyBnaXZlbi4KKworICogQSBuZXcgImdpdCB2ZXJpZnktY29tbWl0IiBjb21tYW5kLCB0byBjaGVjayBHUEcgc2lnbmF0dXJlcyBpbiBzaWduZWQKKyAgIGNvbW1pdHMsIGluIGEgd2F5IHNpbWlsYXIgdG8gImdpdCB2ZXJpZnktdGFnIiBpcyB1c2VkIHRvIGNoZWNrCisgICBzaWduZWQgdGFncywgd2FzIGFkZGVkLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiBCdWlsZCBwcm9jZWR1cmUgZm9yICdzdWJ0cmVlJyAoaW4gY29udHJpYi8pIGhhcyBiZWVuIGNsZWFuZWQgdXAuCisKKyAqIFN1cHBvcnQgZm9yIHRoZSBwcm9maWxlLWZlZWRiYWNrIGJ1aWxkLCB3aGljaCBoYXMKKyAgIGJpdC1yb3R0ZWQgZm9yIHF1aXRlIGEgd2hpbGUsIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIEFuIGV4cGVyaW1lbnRhbCBmb3JtYXQgdG8gdXNlIHR3byBmaWxlcyAodGhlIGJhc2UgZmlsZSBhbmQKKyAgIGluY3JlbWVudGFsIGNoYW5nZXMgcmVsYXRpdmUgdG8gaXQpIHRvIHJlcHJlc2VudCB0aGUgaW5kZXggaGFzIGJlZW4KKyAgIGludHJvZHVjZWQ7IHRoaXMgbWF5IHJlZHVjZSBJL08gY29zdCBvZiByZXdyaXRpbmcgYSBsYXJnZSBpbmRleAorICAgd2hlbiBvbmx5IHNtYWxsIHBhcnQgb2YgdGhlIHdvcmtpbmcgdHJlZSBjaGFuZ2VzLgorCisgKiBFZmZvcnQgdG8gc2hyaW5rIHRoZSBzaXplIG9mIHBhdGNoZXMgV2luZG93cyBmb2xrcyBtYWludGFpbiBvbiB0b3AKKyAgIGJ5IHVwc3RyZWFtaW5nIHRoZW0gY29udGludWVzLiAgTW9yZSB0ZXN0cyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZQorICAgdG8gdGhlIFdpbmRvd3MgZW52aXJvbm1lbnQgYXJlIGlkZW50aWZpZWQgYW5kIGVpdGhlciBza2lwcGVkIG9yCisgICBtYWRlIG1vcmUgcG9ydGFibGUuCisKKyAqIEVyYWRpY2F0aW9uIG9mICJ0ZXN0ICRjb25kaXRpb24gLWEgJGNvbmRpdGlvbiIgZnJvbSBvdXIgc2NyaXB0cworICAgY29udGludWVzLgorCisgKiBUaGUgYGNvcmUuZGVsdGFiYXNlY2FjaGVsaW1pdGAgdXNlZCB0byBkZWZhdWx0IHRvIDE2IE1pQiAsIGJ1dCB0aGlzCisgICBwcm92ZWQgdG8gYmUgdG9vIHNtYWxsLCBhbmQgaGFzIGJlZW4gYnVtcGVkIHRvIDk2IE1pQi4KKworICogImdpdCBibGFtZSIgaGFzIGJlZW4gb3B0aW1pemVkIGdyZWF0bHkgYnkgcmVvcmdhbmlzaW5nIHRoZSBkYXRhCisgICBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHdvcmsgdG8gYmUgZG9uZS4KKworICogImdpdCBkaWZmIiB0aGF0IGNvbXBhcmVzIDMtb3ItbW9yZSB0cmVlcyAoZS5nLiBwYXJlbnRzIGFuZCB0aGUKKyAgIHJlc3VsdCBvZiBhIG1lcmdlKSBoYXMgYmVlbiBvcHRpbWl6ZWQuCisKKyAqIFRoZSBBUEkgdG8gdXBkYXRlL2RlbGV0ZSByZWZlcmVuY2VzIGFyZSBiZWluZyBjb252ZXJ0ZWQgdG8gaGFuZGxlCisgICB1cGRhdGVzIHRvIG11bHRpcGxlIHJlZmVyZW5jZXMgaW4gYSB0cmFuc2FjdGlvbmFsIHdheS4gIEFzIGFuCisgICBleGFtcGxlLCAidXBkYXRlLXJlZiAtLXN0ZGluIFstel0iIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoaXMKKyAgIEFQSS4KKworICogc2tpcF9wcmVmaXgoKSBhbmQgc3RyaXBfc3VmZml4KCkgQVBJIGZ1bmN0aW9ucyBhcmUgdXNlZCBhIGxvdCBtb3JlCisgICB3aWRlbHkgdGhyb3VnaG91dCB0aGUgY29kZWJhc2Ugbm93LgorCisgKiBQYXJ0cyBvZiB0aGUgdGVzdCBzY3JpcHRzIGNhbiBiZSBza2lwcGVkIGJ5IHVzaW5nIGEgcmFuZ2Ugbm90YXRpb24sCisgICBlLmcuICJzaCB0MTIzNC10ZXN0LnNoIC0tcnVuPScxLTQgNiA4LSciIHRvIG9taXQgdGVzdCBwaWVjZSA1IGFuZCA3CisgICBhbmQgcnVuIGV2ZXJ5dGhpbmcgZWxzZS4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4wCistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuMCBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiBXZSB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBkaXNhYmxlIHRoZSBwYWdlciBpbiB0aGUgcGFnZXIgcHJvY2VzcworICAgd2Ugc3Bhd24gdG8gZmVlZCBvdXQgb3V0cHV0LCBidXQgdGhhdCBwcmV2ZW50ZWQgcGVvcGxlIHdobyB3YW50IHRvCisgICBydW4gImxlc3MiIHdpdGhpbiAibGVzcyIgZnJvbSBkb2luZyBzby4KKyAgIChtZXJnZSBjMDQ1OWNhIGplL3BhZ2VyLWRvLW5vdC1yZWN1cnNlIGxhdGVyIHRvIG1haW50KS4KKworICogVG9vbHMgdGhhdCByZWFkIGRpYWdub3N0aWMgb3V0cHV0IGluIG91ciBzdGFuZGFyZCBlcnJvciBzdHJlYW0gZG8KKyAgIG5vdCB3YW50IHRvIHNlZSB0ZXJtaW5hbCBjb250cm9sIHNlcXVlbmNlIChlLmcuIGVyYXNlLXRvLWVvbCkuCisgICBEZXRlY3QgdGhlbSBieSBjaGVja2luZyBpZiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIGNvbm5lY3RlZAorICAgdG8gYSB0dHkuCisgICAobWVyZ2UgMzhkZTE1NiBtbi9zaWRlYmFuZC1uby1hbnNpIGxhdGVyIHRvIG1haW50KS4KKworICogTWlzaGFuZGxpbmcgb2YgcGF0dGVybnMgaW4gLmdpdGlnbm9yZSB0aGF0IGhhdmUgdHJhaWxpbmcgU1BzIHF1b3RlZAorICAgd2l0aCBiYWNrc2xhc2hlcyAoZS5nLiBvbmVzIHRoYXQgZW5kIHdpdGggIlwgIikgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA5N2MxMzY0YmU2YiBwYi90cmltLXRyYWlsaW5nLXNwYWNlcyBsYXRlciB0byBtYWludCkuCisKKyAqIFJld29yZGVkIHRoZSBlcnJvciBtZXNzYWdlIGdpdmVuIHVwb24gYSBmYWlsdXJlIHRvIG9wZW4gYW4gZXhpc3RpbmcKKyAgIGxvb3NlIG9iamVjdCBmaWxlIGR1ZSB0byBlLmcuIHBlcm1pc3Npb24gaXNzdWVzOyBpdCB3YXMgcmVwb3J0ZWQgYXMKKyAgIHRoZSBvYmplY3QgYmVpbmcgY29ycnVwdCwgYnV0IHRoYXQgaXMgbm90IHF1aXRlIHRydWUuCisgICAobWVyZ2UgZDZjOGEwNSBqay9yZXBvcnQtZmFpbC10by1yZWFkLW9iamVjdHMtYmV0dGVyIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLTJtYXN0ZXIiIGlzIGEgY29tbW9uIHR5cG8gdGhhdCBzaG93cyB0d28gY29tbWl0cyBzdGFydGluZworICAgZnJvbSB3aGljaGV2ZXIgcmFuZG9tIGJyYW5jaCB0aGF0IGlzIG5vdCAnbWFzdGVyJyB0aGF0IGhhcHBlbnMgdG8KKyAgIGJlIGNoZWNrZWQgb3V0IGN1cnJlbnRseS4KKyAgIChtZXJnZSBlM2ZhNTY4IGpjL3JldmlzaW9uLWRhc2gtY291bnQtcGFyc2luZyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgdG8gYXZvaWQgYWRkaW5nIHRoZSBzYW1lIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUgdHdpY2Ugd2FzCisgICBzdWJ0bHkgYnJva2VuIGZvciBhIGxvbmcgdGltZSwgYnV0IG5vYm9keSBzZWVtcyB0byBoYXZlIG5vdGljZWQuCisgICAobWVyZ2UgODBiNDc4NSBycy9maXgtYWx0LW9kYi1wYXRoLWNvbXBhcmlzb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUzOWU3NTAgZWsvYWx0LW9kYi1lbnRyeS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgIiU8KDEwLHRydW5jKSVzIiBwcmV0dHkgZm9ybWF0IHNwZWNpZmllciBpbiB0aGUgbG9nIGZhbWlseSBvZgorICAgY29tbWFuZHMgaXMgdXNlZCB0byB0cnVuY2F0ZSB0aGUgc3RyaW5nIHRvIGEgZ2l2ZW4gbGVuZ3RoIChlLmcuIDEwCisgICBpbiB0aGUgZXhhbXBsZSkgd2l0aCBwYWRkaW5nIHRvIGNvbHVtbi1hbGlnbiB0aGUgb3V0cHV0LCBidXQgZGlkCisgICBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhhdCBudW1iZXIgb2YgYnl0ZXMgYW5kIG51bWJlciBvZiBkaXNwbGF5CisgICBjb2x1bW5zIGFyZSBkaWZmZXJlbnQuCisgICAobWVyZ2UgN2Q1MDk4NyBhcy9wcmV0dHktdHJ1bmNhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiJUciIChub3RoaW5nIGFmdGVyIEcpIGlzIGFuIGludmFsaWQgcHJldHR5IGZvcm1hdCBzcGVjaWZpZXIsIGJ1dAorICAgdGhlIHBhcnNlciBkaWQgbm90IG5vdGljZSBpdCBhcyBnYXJiYWdlLgorICAgKG1lcmdlIDk1OGIyZWIgamsvcHJldHR5LUctZm9ybWF0LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogQSBoYW5kZnVsIG9mIGNvZGUgcGF0aHMgaGFkIHRvIHJlYWQgdGhlIGNvbW1pdCBvYmplY3QgbW9yZSB0aGFuCisgICBvbmNlIHdoZW4gc2hvd2luZyBoZWFkZXIgZmllbGRzIHRoYXQgYXJlIHVzdWFsbHkgbm90IHBhcnNlZC4gIFRoZQorICAgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdAorICAgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVkdWNlIHRoZSBuZWVkIGZvciB0aGlzIGRvdWJsZS1yZWFkaW5nLAorICAgYW5kIHRvIGFsbG93IHRoZSBjYWxsZXIgZmluZCB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QuCisgICAobWVyZ2UgMjE4YWEzYSBqay9jb21taXQtYnVmZmVyLWxlbmd0aCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAibWFpbG1hcC5maWxlIiBjb25maWd1cmF0aW9uIG9wdGlvbiBkaWQgbm90IHN1cHBvcnQgdGlsZGUKKyAgIGV4cGFuc2lvbiAoaS5lLiB+dXNlci9wYXRoIGFuZCB+L3BhdGgpLgorICAgKG1lcmdlIDkzNTJmZDUgb3cvY29uZmlnLW1haWxtYXAtcGF0aG5hbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHRzIChpbiBjb250cmliLykgZGlkIG5vdCBrbm93IGFib3V0IHF1aXRlIGEgZmV3CisgICBvcHRpb25zIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuICJnaXQgbWVyZ2UiIGFuZCAiZ2l0IHB1bGwiLCBhbmQgYQorICAgY291cGxlIG9mIG9wdGlvbnMgdW5pcXVlIHRvICJnaXQgbWVyZ2UiLgorICAgKG1lcmdlIDhmZWU4NzIgamsvY29tcGxldGUtbWVyZ2UtcHVsbCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB1bml4LWRvbWFpbiBzb2NrZXQgdXNlZCBieSB0aGUgc2FtcGxlIGNyZWRlbnRpYWwgY2FjaGUgZGFlbW9uCisgICB0cmllZCB0byB1bmxpbmsgYW4gZXhpc3Rpbmcgc3RhbGUgb25lIGF0IGEgd3JvbmcgcGF0aCwgaWYgdGhlIHBhdGgKKyAgIHRvIHRoZSBzb2NrZXQgd2FzIGdpdmVuIGFzIGFuIG92ZXJsb25nIHBhdGggdGhhdCBkb2VzIG5vdCBmaXQgaW4KKyAgIHRoZSBzdW5fcGF0aCBtZW1iZXIgb2YgdGhlIHNvY2thZGRyX3VuIHN0cnVjdHVyZS4KKyAgIChtZXJnZSAyODY5YjNlIHJzL2ZpeC11bmxpbmstdW5peC1zb2NrZXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBhbmNpZW50IHJld3JpdGUgcGFzc2VkIGEgd3JvbmcgcG9pbnRlciB0byBhIGN1cmwgbGlicmFyeQorICAgZnVuY3Rpb24gaW4gYSByYXJlbHkgdXNlZCBjb2RlIHBhdGguCisgICAobWVyZ2UgNDc5ZWFhOCBhaC9maXgtaHR0cC1wdXNoIGxhdGVyIHRvIG1haW50KS4KKworICogIi0taWdub3JlLXNwYWNlLWNoYW5nZSIgb3B0aW9uIG9mICJnaXQgYXBwbHkiIGlnbm9yZWQgdGhlIHNwYWNlcworICAgYXQgdGhlIGJlZ2lubmluZyBvZiBsaW5lcyB0b28gYWdncmVzc2l2ZWx5LCB3aGljaCBpcyBpbmNvbnNpc3RlbnQKKyAgIHdpdGggdGhlIG9wdGlvbiBvZiB0aGUgc2FtZSBuYW1lIHRoYXQgImRpZmYiIGFuZCAiZ2l0IGRpZmYiIGhhdmUuCisgICAobWVyZ2UgMTRkM2JiNCBqYy9hcHBseS1pZ25vcmUtd2hpdGVzcGFjZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYmxhbWUiIG1pc2NvdW50ZWQgdGhlIG51bWJlciBvZiBjb2x1bW5zIG5lZWRlZCB0byBzaG93IGxvY2FsaXplZAorICAgdGltZXN0YW1wcywgcmVzdWx0aW5nIGluIGEgamFnZ3kgbGVmdC1zaWRlLWVkZ2UgZm9yIHRoZSBzb3VyY2UgY29kZQorICAgbGluZXMgaW4gaXRzIG91dHB1dC4KKyAgIChtZXJnZSBkZDc1NTUzIGp4L2JsYW1lLWFsaWduLXJlbGF0aXZlLXRpbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIiBhc3NpZ25lZCB0aGUgYmxhbWUgdG8gdGhlIGNvcHkgaW4gdGhlIHdvcmtpbmctdHJlZSBpZgorICAgdGhlIHJlcG9zaXRvcnkgaXMgc2V0IHRvIGNvcmUuYXV0b2NybGY9aW5wdXQgYW5kIHRoZSBmaWxlIHVzZWQgQ1JMRgorICAgbGluZSBlbmRpbmdzLgorICAgKG1lcmdlIDRkNDgxM2EgYmMvYmxhbWUtY3JsZi10ZXN0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjbG9uZSAtYiBicmVmcy90YWdzL2JhciIgd291bGQgaGF2ZSBtaXN0YWtlbmx5IHRob3VnaHQgd2Ugd2VyZQorICAgZm9sbG93aW5nIGEgc2luZ2xlIHRhZywgZXZlbiB0aG91Z2ggaXQgd2FzIGEgbmFtZSBvZiB0aGUgYnJhbmNoLAorICAgYmVjYXVzZSBpdCBpbmNvcnJlY3RseSB1c2VkIHN0cnN0cigpLgorICAgKG1lcmdlIDYwYTVmNWYgamMvZml4LWNsb25lLXNpbmdsZS1zdGFydGluZy1hdC1hLXRhZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtQyAkY29tbWl0IiBkaWQgbm90IHdvcmsgd2hlbiB0aGUKKyAgIGNvbW1pdCBkaWQgbm90IGhhdmUgYW55IGxvZyBtZXNzYWdlLgorICAgKG1lcmdlIDA3NmNiZDYgamsvY29tbWl0LUMtcGljay1lbXB0eSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtLWZpbmQtY29waWVzLWhhcmRlciIgc29tZXRpbWVzIHByZXRlbmRlZCBhcyBpZiB0aGUgbW9kZQorICAgYml0cyBoYXZlIGNoYW5nZWQgZm9yIHBhdGhzIHRoYXQgYXJlIG1hcmtlZCB3aXRoIHRoZSBhc3N1bWUtdW5jaGFuZ2VkCisgICBiaXQuCisgICAobWVyZ2UgNTMwNDgxMCBqay9kaWZmLWZpbGVzLWFzc3VtZS11bmNoYW5nZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZmlsdGVyLWJyYW5jaCIgbGVmdCBhbiBlbXB0eSBzaW5nbGUtcGFyZW50IGNvbW1pdCB0aGF0IHJlc3VsdHMgd2hlbgorICAgYWxsIHBhcmVudHMgb2YgYSBtZXJnZSBjb21taXQgZ2V0IG1hcHBlZCB0byB0aGUgc2FtZSBjb21taXQsIGV2ZW4KKyAgIHVuZGVyICItLXBydW5lLWVtcHR5Ii4KKyAgIChtZXJnZSA3OWJjNGVmIGNiL2ZpbHRlci1icmFuY2gtcHJ1bmUtZW1wdHktZGVnZW5lcmF0ZS1tZXJnZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgZGlkIG5vdCBlbmZvcmNlIHRoZSBydWxlIHRoYXQgdGhlICItLWZvbGxvdyIKKyAgIG9wdGlvbiBmcm9tIHRoZSBsb2cvZGlmZiBmYW1pbHkgb2YgY29tbWFuZHMgbXVzdCBiZSB1c2VkIHdpdGgKKyAgIGV4YWN0bHkgb25lIHBhdGhzcGVjLgorICAgKG1lcmdlIGRkNjNmMTYgamsvZGlmZi1mb2xsb3ctbXVzdC10YWtlLW9uZS1wYXRoc3BlYyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZ2MgLS1hdXRvIiB3YXMgcmVjZW50bHkgY2hhbmdlZCB0byBydW4gaW4gdGhlIGJhY2tncm91bmQgdG8KKyAgIGdpdmUgY29udHJvbCBiYWNrIGVhcmx5IHRvIHRoZSBlbmQtdXNlciBzaXR0aW5nIGluIGZyb250IG9mIHRoZQorICAgdGVybWluYWwsIGJ1dCBpdCBmb3Jnb3QgdGhhdCBob3VzZWtlZXBpbmcgaW52b2x2aW5nIHJlZmxvZ3Mgc2hvdWxkCisgICBiZSBkb25lIHdpdGhvdXQgb3RoZXIgcHJvY2Vzc2VzIGNvbXBldGluZyBmb3IgYWNjZXNzZXMgdG8gdGhlIHJlZnMuCisgICAobWVyZ2UgNjJhYWQxOCBuZC9kYWVtb25pemUtZ2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGdyZXAgLU8iIHRvIHNob3cgdGhlIGxpbmVzIHRoYXQgaGl0IGluIHRoZSBwYWdlciBkaWQgbm90IHdvcmsKKyAgIHdlbGwgd2l0aCBjYXNlIGluc2Vuc2l0aXZlIHNlYXJjaC4gIFdlIG5vdyBzcGF3biAibGVzcyIgd2l0aCBpdHMKKyAgICItSSIgb3B0aW9uIHdoZW4gaXQgaXMgdXNlZCBhcyB0aGUgcGFnZXIgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KS4KKyAgIChtZXJnZSBmN2ZlYmJlIHNrL3NwYXduLWxlc3MtY2FzZS1pbnNlbnNpdGl2ZWx5LWZyb20tZ3JlcC1PLWkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSB1c2VkIHRvIGRpc2FibGUgdGhyZWFkZWQgImdpdCBpbmRleC1wYWNrIiBvbiBwbGF0Zm9ybXMgd2l0aG91dAorICAgdGhyZWFkLXNhZmUgcHJlYWQoKTsgdXNlIGEgZGlmZmVyZW50IHdvcmthcm91bmQgZm9yIHN1Y2gKKyAgIHBsYXRmb3JtcyB0byBhbGxvdyB0aHJlYWRlZCAiZ2l0IGluZGV4LXBhY2siLgorICAgKG1lcmdlIDM5NTM5NDkgbmQvaW5kZXgtcGFjay1vbmUtZmQtcGVyLXRocmVhZCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBlcnJvciByZXBvcnRpbmcgZnJvbSAiZ2l0IGluZGV4LXBhY2siIGhhcyBiZWVuIGltcHJvdmVkIHRvCisgICBkaXN0aW5ndWlzaCBtaXNzaW5nIG9iamVjdHMgZnJvbSB0eXBlIGVycm9ycy4KKyAgIChtZXJnZSA3NzU4M2U3IGprL2luZGV4LXBhY2stcmVwb3J0LW1pc3NpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAibG9nIC0tc2hvdy1zaWduYXR1cmUiIGluY29ycmVjdGx5IGRlY2lkZWQgdGhlIGNvbG9yIHRvIHBhaW50IGEKKyAgIG1lcmdldGFnIHRoYXQgd2FzIGFuZCB3YXMgbm90IGNvcnJlY3RseSB2YWxpZGF0ZWQuCisgICAobWVyZ2UgNDJjNTVjZSBtZy9maXgtbG9nLW1lcmdldGFnLWNvbG9yIGxhdGVyIHRvIG1haW50KS4KKworICogImxvZyAtLXNob3ctc2lnbmF0dXJlIiBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gdGhlICItLWdyYXBoIiBvcHRpb24uCisgICAobWVyZ2UgY2YzOTgzZCB6ay9sb2ctZ3JhcGgtc2hvd3NpZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWFpbGluZm8iIHVzZWQgdG8gcmVhZCBiZXlvbmQgdGhlIGVuZHMgb2YgaGVhZGVyIHN0cmluZ3Mgd2hpbGUKKyAgIHBhcnNpbmcgYW4gaW5jb21pbmcgZS1tYWlsIG1lc3NhZ2UgdG8gZXh0cmFjdCB0aGUgcGF0Y2guCisgICAobWVyZ2UgYjFhMDEzZCBycy9tYWlsaW5mby1oZWFkZXItY21wIGxhdGVyIHRvIG1haW50KS4KKworICogT24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIG1lcmdlLXJlY3Vyc2l2ZSBpbmNvcnJlY3RseQorICAgZGVsZXRlZCB0aGUgZmlsZSB0aGF0IGlzIHRvIGJlIHJlbmFtZWQgdG8gYSBuYW1lIHRoYXQgaXMgdGhlIHNhbWUKKyAgIGV4Y2VwdCBmb3IgY2FzZSBkaWZmZXJlbmNlcy4KKyAgIChtZXJnZSBiYWEzN2JmIGR0L21lcmdlLXJlY3Vyc2l2ZS1jYXNlLWluc2Vuc2l0aXZlIGxhdGVyIHRvIG1haW50KS4KKworICogTWVyZ2luZyBjaGFuZ2VzIGludG8gYSBmaWxlIHRoYXQgZW5kcyBpbiBhbiBpbmNvbXBsZXRlIGxpbmUgbWFkZSB0aGUKKyAgIGxhc3QgbGluZSBpbnRvIGEgY29tcGxldGUgb25lLCBldmVuIHdoZW4gdGhlIG90aGVyIGJyYW5jaCBkaWQgbm90CisgICBjaGFuZ2UgYW55dGhpbmcgYXJvdW5kIHRoZSBlbmQgb2YgZmlsZS4KKyAgIChtZXJnZSBiYTMxMTgwIG1rL21lcmdlLWluY29tcGxldGUtZmlsZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgdW5uZWNlc3NhcmlseSBjb3BpZWQgdGhlIHByZXZpb3VzIGNvbnRlbnRzIHdoZW4KKyAgIGV4dGVuZGluZyB0aGUgaGFzaHRhYmxlLCBldmVuIHRob3VnaCBpdCB3aWxsIHBvcHVsYXRlIHRoZSB0YWJsZQorICAgZnJvbSBzY3JhdGNoIGFueXdheS4KKyAgIChtZXJnZSBmYjc5OTQ3IHJzL3BhY2stb2JqZWN0cy1uby11bm5lY2Vzc2FyeS1yZWFsbG9jIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHVwZGF0ZXMgdG8gImdpdCByZXBhY2siIHN0YXJ0ZWQgdG8gZHVwbGljYXRlIG9iamVjdHMgdGhhdAorICAgYXJlIGluIHBhY2tmaWxlcyBtYXJrZWQgd2l0aCB0aGUgLmtlZXAgZmxhZyBpbnRvIHRoZSBuZXcgcGFja2ZpbGUgYnkKKyAgIG1pc3Rha2UuCisgICAobWVyZ2UgZDA3OGQ4NSBqay9yZXBhY2stcGFjay1rZWVwLW9iamVjdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlcmVyZSBmb3JnZXQiIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gbWVyZ2UuY29uZmxpY3RzdHlsZQorICAgd2FzIHNldCB0byBhIG5vbi1kZWZhdWx0IHZhbHVlLgorICAgKG1lcmdlIGRlM2Q4YmIgZmMvcmVyZXJlLWNvbmZsaWN0LXN0eWxlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZW1vdGUgcm0iIGFuZCAiZ2l0IHJlbW90ZSBwcnVuZSIgY2FuIGludm9sdmUgcmVtb3ZpbmcgbWFueQorICAgcmVmcyBhdCBvbmNlLCB3aGljaCBpcyBub3QgYSB2ZXJ5IGVmZmljaWVudCB0aGluZyB0byBkbyB3aGVuIHZlcnkKKyAgIG1hbnkgcmVmcyBleGlzdCBpbiB0aGUgcGFja2VkLXJlZnMgZmlsZS4KKyAgIChtZXJnZSBlNmJlYTY2IGpsL3JlbW90ZS1ybS1wcnVuZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tZXhjbHVkZT08Z2xvYj4gLS1hbGwgfCBnaXQgc2hvcnRsb2ciIHdvcmtlZCBhcyBleHBlY3RlZCwKKyAgIGJ1dCAiZ2l0IHNob3J0bG9nIC0tZXhjbHVkZT08Z2xvYj4gLS1hbGwiLCB3aGljaCBpcyBzdXBwb3NlZCB0byBiZQorICAgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSBwaXBlbGluZSwgd2FzIG5vdCBhY2NlcHRlZCBhdCB0aGUgY29tbWFuZAorICAgbGluZSBhcmd1bWVudCBwYXJzZXIgbGV2ZWwuCisgICAobWVyZ2UgZWIwNzc3NCBqYy9zaG9ydGxvZy1yZWYtZXhjbHVkZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBhdXRvc3Rhc2ggbW9kZSBvZiAiZ2l0IHJlYmFzZSAtaSIgZGlkIG5vdCByZXN0b3JlIHRoZSBkaXJ0eQorICAgd29ya2luZyB0cmVlIHN0YXRlIGlmIHRoZSB1c2VyIGFib3J0ZWQgdGhlIGludGVyYWN0aXZlIHJlYmFzZSBieQorICAgZW1wdHlpbmcgdGhlIGluc24gc2hlZXQuCisgICAobWVyZ2UgZGRiNTQzMiByci9yZWJhc2UtYXV0b3N0YXNoLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tZm9yay1wb2ludCIgZGlkIG5vdCBmaWx0ZXIgb3V0IHBhdGNoLWlkZW50aWNhbAorICAgY29tbWl0cyBjb3JyZWN0bHkuCisKKyAqIER1cmluZyAiZ2l0IHJlYmFzZSAtLW1lcmdlIiwgYSBjb25mbGljdGVkIHBhdGNoIGNvdWxkIG5vdCBiZQorICAgc2tpcHBlZCB3aXRoICItLXNraXAiIGlmIHRoZSBuZXh0IG9uZSBhbHNvIGNvbmZsaWN0ZWQuCisgICAobWVyZ2UgOTUxMDRjNyBiYy9maXgtcmViYXNlLW1lcmdlLXNraXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHNob3cgLXMiIChpLmUuIHNob3cgbG9nIG1lc3NhZ2Ugb25seSkgdXNlZCB0byBpbmNvcnJlY3RseSBlbWl0CisgICBhbiBleHRyYSBibGFuayBsaW5lIGFmdGVyIGEgbWVyZ2UgY29tbWl0LgorICAgKG1lcmdlIGFkMmY3MjUgbWsvc2hvdy1zLW5vLWV4dHJhLWJsYW5rLWxpbmUtZm9yLW1lcmdlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3RhdHVzIiwgZXZlbiB0aG91Z2ggaXQgaXMgYSByZWFkLW9ubHkgb3BlcmF0aW9uLCB0cmllcyB0bworICAgdXBkYXRlIHRoZSBpbmRleCB3aXRoIHJlZnJlc2hlZCBsc3RhdCgyKSBpbmZvIHRvIG9wdGltaXplIGZ1dHVyZQorICAgYWNjZXNzZXMgdG8gdGhlIHdvcmtpbmcgdHJlZSBvcHBvcnR1bmlzdGljYWxseSwgYnV0IHRoaXMgY291bGQKKyAgIHJhY2Ugd2l0aCBhICJyZWFkLXdyaXRlIiBvcGVyYXRpb24gdGhhdCBtb2RpZmllcyB0aGUgaW5kZXggd2hpbGUgaXQKKyAgIGlzIHJ1bm5pbmcuICBEZXRlY3Qgc3VjaCBhIHJhY2UgYW5kIGF2b2lkIG92ZXJ3cml0aW5nIHRoZSBpbmRleC4KKyAgIChtZXJnZSA0MjZkZGVlIHltL2ZpeC1vcHBvcnR1bmlzdGljLWluZGV4LXVwZGF0ZS1yYWNlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzdGF0dXMiIChhbmQgImdpdCBjb21taXQiKSBiZWhhdmVkIGFzIGlmIGNoYW5nZXMgaW4gYSBtb2RpZmllZAorICAgc3VibW9kdWxlIGFyZSBub3QgdGhlcmUgaWYgc3VibW9kdWxlLiouaWdub3JlIGNvbmZpZ3VyYXRpb24gaXMgc2V0LAorICAgd2hpY2ggd2FzIG1pc2xlYWRpbmcuICBUaGUgY29uZmlndXJhdGlvbiBpcyBvbmx5IHRvIHVuY2x1dHRlciBkaWZmCisgICBvdXRwdXQgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgZGV2ZWxvcG1lbnQsIGFuZCBub3QgdG8gaGlkZQorICAgY2hhbmdlcyBpbiB0aGUgInN0YXR1cyIgb3V0cHV0IHRvIGNhdXNlIHRoZSB1c2VycyBmb3JnZXQgdG8gY29tbWl0CisgICB0aGVtLgorICAgKG1lcmdlIGMyMTVkM2Qgamwvc3RhdHVzLWFkZGVkLXN1Ym1vZHVsZS1pcy1uZXZlci1pZ25vcmVkIGxhdGVyIHRvIG1haW50KS4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgImdpdCBzdWJtb2R1bGUgc3luYyIgZm9yZ290IHRvIHNheSB0aGF0IHRoZSBzdWJjb21tYW5kCisgICBjYW4gdGFrZSB0aGUgIi0tcmVjdXJzaXZlIiBvcHRpb24uCisgICAobWVyZ2UgOTM5M2FlNyBtYy9kb2Mtc3VibW9kdWxlLXN5bmMtcmVjdXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIiBpbiAyLjAgcmVsZWFzZSBjcmFzaGVkIG9uIGEKKyAgIG1hbGZvcm1lZCBjb21tYW5kIGxpbmUuCisgICAobWVyZ2UgYzhlMWVlNCBqYy9yZXYtcGFyc2UtYXJnaC1kYXNoZWQtbXVsdGktd29yZHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbW9kZSB0byBydW4gdGVzdHMgd2l0aCBIVFRQIHNlcnZlciB0ZXN0cyBkaXNhYmxlZCB3YXMgYnJva2VuLgorICAgKG1lcmdlIGFmYTUzZmUgbmEvbm8taHR0cC10ZXN0LWluLXRoZS1taWRkbGUgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzBmYzNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMS50eHQKQEAgLTAsMCArMSw0NCBAQAorR2l0IHYyLjEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICogR2l0IDIuMCBoYWQgYSByZWdyZXNzaW9uIHdoZXJlICJnaXQgZmV0Y2giIGludG8gYSBzaGFsbG93bHkKKyAgIGNsb25lZCByZXBvc2l0b3J5IGZyb20gYSByZXBvc2l0b3J5IHdpdGggYml0bWFwIG9iamVjdCBpbmRleAorICAgZW5hYmxlZCBkaWQgbm90IHdvcmsgY29ycmVjdGx5LiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEdpdCAyLjAgaGFkIGEgcmVncmVzc2lvbiB3aGljaCBicm9rZSAocmFyZWx5IHVzZWQpICJnaXQgZGlmZi10cmVlCisgICAtdCIuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBsb2cgLS1wcmV0dHkvZm9ybWF0PSIgd2l0aCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nIGRpZCBub3QKKyAgIG1lYW4gdGhlIG1vcmUgb2J2aW91cyAiTm8gb3V0cHV0IHdoYXRzb2V2ZXIiIGJ1dCAiVXNlIGRlZmF1bHQKKyAgIGZvcm1hdCIsIHdoaWNoIHdhcyBjb3VudGVyaW50dWl0aXZlLiAgTm93IGl0IG1lYW5zICJub3RoaW5nIHNob3duCisgICBmb3IgdGhlIGxvZyBtZXNzYWdlIHBhcnQiLgorCisgKiAiZ2l0IC1jIHNlY3Rpb24udmFyIGNvbW1hbmQiIGFuZCAiZ2l0IC1jIHNlY3Rpb24udmFyPSBjb21tYW5kIgorICAgc2hvdWxkIHBhc3MgdGhlIGNvbmZpZ3VyYXRpb24gZGlmZmVyZW50bHkgKHRoZSBmb3JtZXIgc2hvdWxkIGJlIGEKKyAgIGJvb2xlYW4gdHJ1ZSwgdGhlIGxhdHRlciBzaG91bGQgYmUgYW4gZW1wdHkgc3RyaW5nKSwgYnV0IHRoZXkKKyAgIGRpZG4ndCB3b3JrIHRoYXQgd2F5LiAgTm93IGl0IGRvZXMuCisKKyAqIEFwcGx5aW5nIGEgcGF0Y2ggbm90IGdlbmVyYXRlZCBieSBHaXQgaW4gYSBzdWJkaXJlY3RvcnkgdXNlZCB0bworICAgY2hlY2sgdGhlIHdoaXRlc3BhY2UgYnJlYWthZ2UgdXNpbmcgdGhlIGF0dHJpYnV0ZXMgZm9yIGluY29ycmVjdAorICAgcGF0aHMuIEFsc28gd2hpdGVzcGFjZSBjaGVja3Mgd2VyZSBwZXJmb3JtZWQgZXZlbiBmb3IgcGF0aHMKKyAgIGV4Y2x1ZGVkIHZpYSAiZ2l0IGFwcGx5IC0tZXhjbHVkZT08cGF0aD4iIG1lY2hhbmlzbS4KKworICogImdpdCBidW5kbGUgY3JlYXRlIiB3aXRoIGRhdGUtcmFuZ2Ugc3BlY2lmaWNhdGlvbiB3ZXJlIG1lYW50IHRvCisgICBleGNsdWRlIHRhZ3Mgb3V0c2lkZSB0aGUgcmFuZ2UsIGJ1dCBpdCBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCisgKiAiZ2l0IGFkZCB4IiB3aGVyZSB4IHRoYXQgdXNlZCB0byBiZSBhIGRpcmVjdG9yeSBoYXMgYmVjb21lIGEKKyAgIHN5bWJvbGljIGxpbmsgdG8gYSBkaXJlY3RvcnkgbWlzYmVoYXZlZC4KKworICogVGhlIHByb21wdCBzY3JpcHQgY2hlY2tlZCAkR0lUX0RJUi9yZWYvc3Rhc2ggZmlsZSB0byBzZWUgaWYgdGhlcmUKKyAgIGlzIGEgc3Rhc2gsIHdoaWNoIHdhcyBhIG5vLW5vLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIiBkaWQgbm90IHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB3aGlsZSBjYXJyeWluZworICAgdGhlIGxvY2FsIGNoYW5nZXMgZm9yd2FyZCB3aGVuIGEgcGF0aCB3YXMgZGVsZXRlZCBmcm9tIHRoZSBpbmRleC4KKworICogV2l0aCBzdWZmaWNpZW50bHkgbG9uZyByZWZuYW1lcywgZmFzdC1pbXBvcnQgY291bGQgaGF2ZSBvdmVyZmxvd24KKyAgIGFuIG9uLXN0YWNrIGJ1ZmZlci4KKworICogQWZ0ZXIgInBhY2stcmVmcyAtLXBydW5lIiBwYWNrZWQgcmVmcyBhdCB0aGUgdG9wLWxldmVsLCBpdCBmYWlsZWQKKyAgIHRvIHBydW5lIHRoZW0uCisKKyAqICJnaXQgZ2MgLS1hdXRvIiB0cmlnZ2VyZWQgZnJvbSAiZ2l0IGZldGNoIC0tcXVpZXQiIHdhcyBub3QgcXVpZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzNiODkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4yLnR4dApAQCAtMCwwICsxLDIwIEBACitHaXQgdjIuMS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiAiZ2l0IHB1c2giIG92ZXIgSFRUUCB0cmFuc3BvcnQgaGFkIGFuIGFydGlmaWNpYWwgbGltaXQgb24gbnVtYmVyIG9mCisgICByZWZzIHRoYXQgY2FuIGJlIHB1c2hlZCBpbXBvc2VkIGJ5IHRoZSBjb21tYW5kIGxpbmUgbGVuZ3RoLgorCisgKiBXaGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIHBhY2sgc3RyZWFtIHRoYXQgcmVjb3JkcyB0aGUgc2FtZSBvYmplY3QKKyAgIHR3aWNlLCBtdWx0aXBsZSB0aHJlYWRzIGdvdCBjb25mdXNlZCBkdWUgdG8gYSByYWNlLgorCisgKiBBbiBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgZW50aXJlIHRyZWUgaW4gdGhlICJnaXQgZmFzdC1pbXBvcnQiIGlucHV0CisgICBzdHJlYW0gY2F1c2VkIGl0IHRvIG1pc2JlaGF2ZS4KKworICogUmVhY2hhYmlsaXR5IGNoZWNrICh1c2VkIGluICJnaXQgcHJ1bmUiIGFuZCBmcmllbmRzKSBkaWQgbm90IGFkZCBhCisgICBkZXRhY2hlZCBIRUFEIGFzIGEgc3RhcnRpbmcgcG9pbnQgdG8gdHJhdmVyc2Ugb2JqZWN0cyBzdGlsbCBpbiB1c2UuCisKKyAqICJnaXQgY29uZmlnIC0tYWRkIHNlY3Rpb24udmFyIHZhbCIgdXNlZCB0byBsb3NlIGV4aXN0aW5nCisgICBzZWN0aW9uLnZhciB3aG9zZSB2YWx1ZSB3YXMgYW4gZW1wdHkgc3RyaW5nLgorCisgKiAiZ2l0IGZzY2siIGZhaWxlZCB0byByZXBvcnQgdGhhdCBpdCBmb3VuZCBjb3JydXB0IG9iamVjdHMgdmlhIGl0cworICAgZXhpdCBzdGF0dXMgaW4gc29tZSBjYXNlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmYjE3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjMudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0dpdCB2Mi4xLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIFNvbWUgTVVBcyBtYW5nbGVkIGEgbGluZSBpbiBhIG1lc3NhZ2UgdGhhdCBiZWdpbnMgd2l0aCAiRnJvbSAiIHRvCisgICAiPkZyb20gIiB3aGVuIHdyaXRpbmcgdG8gYSBtYWlsYm94IGZpbGUgYW5kIGZlZWRpbmcgc3VjaCBhbiBpbnB1dCB0bworICAgImdpdCBhbSIgdXNlZCB0byBsb3NlIHN1Y2ggYSBsaW5lLgorCisgKiAiZ2l0IGRhZW1vbiIgKHdpdGggTk9fSVBWNiBidWlsZCBjb25maWd1cmF0aW9uKSB1c2VkIHRvIGluY29ycmVjdGx5CisgICB1c2UgdGhlIGhvc3RuYW1lIGV2ZW4gd2hlbiBnZXRob3N0YnluYW1lKCkgcmVwb3J0ZWQgdGhhdCB0aGUgZ2l2ZW4KKyAgIGhvc3RuYW1lIGlzIG5vdCBmb3VuZC4KKworICogTmV3ZXIgdmVyc2lvbnMgb2YgJ21lbGQnIGJyZWFrcyB0aGUgYXV0by1kZXRlY3Rpb24gd2UgdXNlIHRvIHNlZSBpZgorICAgdGhleSBhcmUgbmV3IGVub3VnaCB0byBzdXBwb3J0IHRoZSBgLS1vdXRwdXRgIG9wdGlvbi4KKworICogImdpdCBwYWNrLW9iamVjdHMiIGZvcmdvdCB0byBkaXNhYmxlIHRoZSBjb2RlcGF0aCB0byBnZW5lcmF0ZQorICAgb2JqZWN0IHJlYWNoYWJpbGl0eSBiaXRtYXAgd2hlbiBpdCBuZWVkcyB0byBzcGxpdCB0aGUgcmVzdWx0aW5nCisgICBwYWNrLgorCisgKiAiZ2l0d2ViIiB1c2VkIGRlcHJlY2F0ZWQgQ0dJOjpzdGFydGZyb20sIHdoaWNoIHdhcyByZW1vdmVkIGZyb20KKyAgIENHSS5wbSBhcyBvZiA0LjA0OyB1c2UgQ0dJOjpzdGFydF9mcm9tIGluc3RlYWQuCisKKyAqICJnaXQgbG9nIiBkb2N1bWVudGF0aW9uIGhhZCBhbiBleGFtcGxlIHNlY3Rpb24gbWFya2VkIHVwIG5vdAorICAgcXVpdGUgY29ycmVjdGx5LCB3aGljaCBwYXNzZWQgQXNjaWlEb2MgYnV0IGZhaWxlZCB3aXRoCisgICBBc2NpaURvY3Rvci4KKworQWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2ZTVmMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjQudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCB2Mi4xLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdlIHVzZWQgdG8gYWxsb3cgY29tbWl0dGluZyBhIHBhdGggIi5HaXQvY29uZmlnIiB3aXRoIEdpdCB0aGF0IGlzCisgICBydW5uaW5nIG9uIGEgY2FzZSBzZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0IGFuIGF0dGVtcHQgdG8gY2hlY2sgb3V0CisgICBzdWNoIGEgcGF0aCB3aXRoIEdpdCB0aGF0IHJ1bnMgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0KKyAgIHdvdWxkIGhhdmUgY2xvYmJlcmVkICIuZ2l0L2NvbmZpZyIsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQKKyAgIHRoZSB1c2VyIHdvdWxkIGhhdmUgZXhwZWN0ZWQuICBHaXQgbm93IHByZXZlbnRzIHlvdSBmcm9tIHRyYWNraW5nCisgICBhIHBhdGggd2l0aCAiLkdpdCIgKGluIGFueSBjYXNlIGNvbWJpbmF0aW9uKSBhcyBhIHBhdGggY29tcG9uZW50LgorCisgKiBPbiBXaW5kb3dzLCBjZXJ0YWluIHBhdGggY29tcG9uZW50cyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSAiLmdpdCIKKyAgIGFyZSBtYXBwZWQgdG8gIi5naXQiLCBlLmcuICJnaXR+MS9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZQorICAgIi5naXQvY29uZmlnIi4gIEhGUysgaGFzIGEgc2ltaWxhciBpc3N1ZSwgd2hlcmUgY2VydGFpbiB1bmljb2RlCisgICBjb2RlcG9pbnRzIGFyZSBpZ25vcmVkLCBlLmcuICIuZ1x1MjAwY2l0L2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZgorICAgaXQgd2VyZSAiLmdpdC9jb25maWciLiAgUGF0aG5hbWVzIHdpdGggdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBhcmUKKyAgIHJlamVjdGVkIG9uIHRoZSBhZmZlY3RlZCBzeXN0ZW1zLiAgR2l0IG9uIHN5c3RlbXMgdGhhdCBhcmUgbm90CisgICBhZmZlY3RlZCBieSB0aGlzIGlzc3VlIChlLmcuIExpbnV4KSBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvCisgICByZWplY3QgdGhlbSB0byBlbnN1cmUgY3Jvc3MgcGxhdGZvcm0gaW50ZXJvcGVyYWJpbGl0eSBvZiB0aGUgaG9zdGVkCisgICBwcm9qZWN0cy4KKworICogImdpdCBmc2NrIiBub3RpY2VzIGEgdHJlZSBvYmplY3QgdGhhdCByZWNvcmRzIHN1Y2ggYSBwYXRoIHRoYXQgY2FuCisgICBiZSBjb25mdXNlZCB3aXRoICIuZ2l0IiwgYW5kIHdpdGggcmVjZWl2ZS5mc2NrT2JqZWN0cyBjb25maWd1cmF0aW9uCisgICBzZXQgdG8gdHJ1ZSwgYW4gYXR0ZW1wdCB0byAiZ2l0IHB1c2giIHN1Y2ggYSB0cmVlIG9iamVjdCB3aWxsIGJlCisgICByZWplY3RlZC4gIFN1Y2ggYSBwYXRoIG1heSBub3QgYmUgYSBwcm9ibGVtIG9uIGEgd2VsbCBiZWhhdmluZworICAgZmlsZXN5c3RlbSBidXQgaW4gb3JkZXIgdG8gcHJvdGVjdCB0aG9zZSBvbiBIRlMrIGFuZCBvbiBjYXNlCisgICBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgdGhpcyBjaGVjayBpcyBlbmFibGVkIG9uIGFsbCBwbGF0Zm9ybXMuCisKK0EgYmlnICJ0aGFua3MhIiBmb3IgYnJpbmdpbmcgdGhpcyBpc3N1ZSB0byB1cyBnb2VzIHRvIG91ciBmcmllbmRzIGluCit0aGUgTWVyY3VyaWFsIGxhbmQsIG5hbWVseSwgTWF0dCBNYWNrYWxsIGFuZCBBdWdpZSBGYWNrbGVyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTJiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMC50eHQKQEAgLTAsMCArMSw2NzUgQEAKK0dpdCAyLjEwIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVcGRhdGVzIHNpbmNlIHYyLjkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogImdpdCBwdWxsIC0tcmViYXNlIC0tdmVyaWZ5LXNpZ25hdHVyZSIgbGVhcm5lZCB0byB3YXJuIHRoZSB1c2VyCisgICB0aGF0ICItLXZlcmlmeS1zaWduYXR1cmUiIGlzIGEgbm8tb3Agd2hlbiByZWJhc2luZy4KKworICogQW4gdXBzdHJlYW0gcHJvamVjdCBjYW4gbWFrZSBhIHJlY29tbWVuZGF0aW9uIHRvIHNoYWxsb3dseSBjbG9uZQorICAgc29tZSBzdWJtb2R1bGVzIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGl0IHNoaXBzLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCIgbGVhcm5lZCB0aGF0ICctJyBjYW4gYmUgdXNlZCBhcyBhIHNob3J0LWhhbmQgZm9yCisgICAiQHstMX0iLCB0aGUgcHJldmlvdXMgYnJhbmNoLgorCisgKiBVcGRhdGUgdGhlIGZ1bmNuYW1lIGRlZmluaXRpb24gdG8gc3VwcG9ydCBjc3MgZmlsZXMuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gY29tcGxldGUgImdpdAorICAgc3RhdHVzIiBvcHRpb25zLgorCisgKiBNZXNzYWdlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgYnkgYXV0byBnYyBkdXJpbmcgImdpdCBwdXNoIiBvbiB0aGUKKyAgIHJlY2VpdmluZyBlbmQgYXJlIG5vdyBwYXNzZWQgYmFjayB0byB0aGUgc2VuZGluZyBlbmQgaW4gc3VjaCBhIHdheQorICAgdGhhdCB0aGV5IGFyZSBzaG93biB3aXRoICJyZW1vdGU6ICIgcHJlZml4IHRvIGF2b2lkIGNvbmZ1c2luZyB0aGUKKyAgIHVzZXJzLgorCisgKiAiZ2l0IGFkZCAtaS8tcCIgbGVhcm5lZCB0byBob25vciBkaWZmLmNvbXBhY3Rpb25IZXVyaXN0aWMKKyAgIGV4cGVyaW1lbnRhbCBrbm9iLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiB3b3JrIG9uIHRoZSBzYW1lIGh1bmsgc3BsaXQKKyAgIGFzICJnaXQgZGlmZiIgb3V0cHV0LgorCisgKiAidXBsb2FkLXBhY2siIGFsbG93cyBhIGN1c3RvbSAiZ2l0IHBhY2stb2JqZWN0cyIgcmVwbGFjZW1lbnQgd2hlbgorICAgcmVzcG9uZGluZyB0byAiZmV0Y2gvY2xvbmUiIHZpYSB0aGUgdXBsb2FkcGFjay5wYWNrT2JqZWN0c0hvb2suCisgICAobWVyZ2UgYjczODM5NiBqay91cGxvYWQtcGFjay1ob29rIGxhdGVyIHRvIG1haW50KS4KKworICogVGVhY2ggZm9ybWF0LXBhdGNoIGFuZCBtYWlsc3BsaXQgKGhlbmNlICJhbSIpIGhvdyBhIGxpbmUgdGhhdAorICAgaGFwcGVucyB0byBiZWdpbiB3aXRoICJGcm9tICIgaW4gdGhlIGUtbWFpbCBtZXNzYWdlIGlzIHF1b3RlZCB3aXRoCisgICAiPiIsIHNvIHRoYXQgdGhlc2UgbGluZXMgY2FuIGJlIHJlc3RvcmVkIHRvIHRoZWlyIG9yaWdpbmFsIHNoYXBlLgorICAgKG1lcmdlIGQ5OTI1ZDEgZXcvbWJveHJkLWZvcm1hdC1hbSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVwYWNrIiBsZWFybmVkIHRoZSAiLS1rZWVwLXVucmVhY2hhYmxlIiBvcHRpb24sIHdoaWNoIHNlbmRzCisgICBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIHRvIGEgcGFjayBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlbSBsb29zZS4KKyAgIFRoaXMgaGVscHMgaGV1cmlzdGljcyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGxvb3NlIG9iamVjdHMKKyAgIChlLmcuICJnYyAtLWF1dG8iKS4KKyAgIChtZXJnZSBlMjZhOGM0IGprL3JlcGFjay1rZWVwLXVucmVhY2hhYmxlIGxhdGVyIHRvIG1haW50KS4KKworICogImxvZyAtLWdyYXBoIC0tZm9ybWF0PSIgbGVhcm5lZCB0aGF0ICIlPnwoTikiIHNwZWNpZmllcyB0aGUgd2lkdGgKKyAgIHJlbGF0aXZlIHRvIHRoZSB0ZXJtaW5hbCdzIGxlZnQgZWRnZSwgbm90IHJlbGF0aXZlIHRvIHRoZSBhcmVhIHRvCisgICBkcmF3IHRleHQgdGhhdCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGFuY2VzdHJ5LWdyYXBoIHNlY3Rpb24uICBJdAorICAgYWxzbyBub3cgYWNjZXB0cyBuZWdhdGl2ZSBOIHRoYXQgbWVhbnMgdGhlIGNvbHVtbiBsaW1pdCBpcyByZWxhdGl2ZQorICAgdG8gdGhlIHJpZ2h0IGJvcmRlci4KKworICogQSBjYXJlbGVzcyBpbnZvY2F0aW9uIG9mICJnaXQgc2VuZC1lbWFpbCBkaXJlY3RvcnkvIiBhZnRlciBlZGl0aW5nCisgICAwMDAxLWNoYW5nZS5wYXRjaCB3aXRoIGFuIGVkaXRvciBvZnRlbiBlbmRzIHVwIHNlbmRpbmcgYm90aAorICAgMDAwMS1jaGFuZ2UucGF0Y2ggYW5kIGl0cyBiYWNrdXAgZmlsZSwgMDAwMS1jaGFuZ2UucGF0Y2h+LCBjYXVzaW5nCisgICBlbWJhcnJhc3NtZW50IGFuZCBhIG1pbm9yIGNvbmZ1c2lvbi4gIERldGVjdCBzdWNoIGFuIGlucHV0IGFuZAorICAgb2ZmZXIgdG8gc2tpcCB0aGUgYmFja3VwIGZpbGVzIHdoZW4gc2VuZGluZyB0aGUgcGF0Y2hlcyBvdXQuCisgICAobWVyZ2UgNTMxMjIwYiBqYy9zZW5kLWVtYWlsLXNraXAtYmFja3VwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiB0aGF0IGRyaXZlcyBtYW55ICJnaXQgY2xvbmUiIGNvdWxkCisgICBldmVudHVhbGx5IGhpdCBmbGFreSBzZXJ2ZXJzL25ldHdvcmsgY29uZGl0aW9ucyBvbiBvbmUgb2YgdGhlCisgICBzdWJtb2R1bGVzOyB0aGUgY29tbWFuZCBsZWFybmVkIHRvIHJldHJ5IHRoZSBhdHRlbXB0LgorCisgKiBUaGUgb3V0cHV0IGNvbG9yaW5nIHNjaGVtZSBsZWFybmVkIHR3byBuZXcgYXR0cmlidXRlcywgaXRhbGljIGFuZAorICAgc3RyaWtlLCBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBib2xkLCByZXZlcnNlLCBldGMuCisKKyAqICJnaXQgbG9nIiBsZWFybnMgbG9nLnNob3dTaWduYXR1cmUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kIGEKKyAgIGNvbW1hbmQgbGluZSBvcHRpb24gIi0tbm8tc2hvdy1zaWduYXR1cmUiIHRvIGNvdW50ZXJtYW5kIGl0LgorICAgKG1lcmdlIGZjZTA0YzMgbWovbG9nLXNob3ctc2lnbmF0dXJlLWNvbmYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNb3JlIG1hcmtpbmdzIG9mIG1lc3NhZ2VzIGZvciBpMThuLCB3aXRoIHVwZGF0ZXMgdG8gdmFyaW91cyB0ZXN0cworICAgdG8gcGFzcyBHRVRURVhUX1BPSVNPTiB0ZXN0cy4KKworICogImdpdCBhcmNoaXZlIiBsZWFybmVkIHRvIGhhbmRsZSBmaWxlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiA4R0IgYW5kCisgICBjb21taXRzIGZhciBpbiB0aGUgZnV0dXJlIHRoYW4gZXhwcmVzc2libGUgYnkgdGhlIHRyYWRpdGlvbmFsIFVTLVRBUgorICAgZm9ybWF0LgorICAgKG1lcmdlIDU2MGIwZTggamsvYmlnLWFuZC1mdXR1cmUtYXJjaGl2ZS10YXIgbGF0ZXIgdG8gbWFpbnQpLgorCisKKyAqIEEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29yZS5zc2hDb21tYW5kIGhhcyBiZWVuIGFkZGVkIHRvCisgICBzcGVjaWZ5IHdoYXQgdmFsdWUgZm9yIEdJVF9TU0hfQ09NTUFORCB0byB1c2UgcGVyIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgd29ya3RyZWUgcHJ1bmUiIHByb3RlY3RlZCB3b3JrdHJlZXMgdGhhdCBhcmUgbWFya2VkIGFzCisgICAibG9ja2VkIiBieSBjcmVhdGluZyBhIGZpbGUgaW4gYSBrbm93biBsb2NhdGlvbi4gICJnaXQgd29ya3RyZWUiCisgICBjb21tYW5kIGxlYXJuZWQgYSBkZWRpY2F0ZWQgY29tbWFuZCBwYWlyIHRvIGNyZWF0ZSBhbmQgcmVtb3ZlIHN1Y2gKKyAgIGEgZmlsZSwgc28gdGhhdCB0aGUgdXNlcnMgZG8gbm90IGhhdmUgdG8gZG8gdGhpcyB3aXRoIGVkaXRvci4KKworICogQSBoYW5kZnVsIG9mICJnaXQgc3ZuIiB1cGRhdGVzLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgdG8gYWNjZXB0IGFuZCBwYXNzIGV4dHJhIG9wdGlvbnMgdG8gdGhlCisgICByZWNlaXZpbmcgZW5kIHNvIHRoYXQgaG9va3MgY2FuIHJlYWQgYW5kIHJlYWN0IHRvIHRoZW0uCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHRvIHN1Z2dlc3QgIm1lcmdlIC0tYWJvcnQiIGR1cmluZyBhIGNvbmZsaWN0ZWQKKyAgIG1lcmdlLCBqdXN0IGxpa2UgaXQgYWxyZWFkeSBzdWdnZXN0cyAicmViYXNlIC0tYWJvcnQiIGR1cmluZyBhCisgICBjb25mbGljdGVkIHJlYmFzZS4KKworICogImdpdCBqdW1wIiBzY3JpcHQgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB1cGRhdGVkIGEgYml0LgorICAgKG1lcmdlIGE5MWU2OTIgamsvZ2l0LWp1bXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1c2giIGFuZCAiZ2l0IGNsb25lIiBsZWFybmVkIHRvIGdpdmUgYmV0dGVyIHByb2dyZXNzIG1ldGVycworICAgdG8gdGhlIGVuZCB1c2VyIHdobyBpcyB3YWl0aW5nIG9uIHRoZSB0ZXJtaW5hbC4KKworICogQW4gZW50cnkgImdpdCBsb2cgLS1kZWNvcmF0ZSIgZm9yIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGlzCisgICBzaG93biBhcyAiSEVBRCAtPiBuYW1lIiAod2hlcmUgIm5hbWUiIGlzIHRoZSBuYW1lIG9mIHRoZSBicmFuY2gpOworICAgdGhlIGFycm93IGlzIG5vdyBwYWludGVkIGluIHRoZSBzYW1lIGNvbG9yIGFzICJIRUFEIiwgbm90IGluIHRoZQorICAgY29sb3IgZm9yIGNvbW1pdHMuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIGZvcm1hdC5mcm9tIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8KKyAgIHNwZWNpZnkgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGl0cyAiLS1mcm9tIiBvcHRpb24uCisKKyAqICJnaXQgYW0gLTMiIGNhbGxzICJnaXQgbWVyZ2UtcmVjdXJzaXZlIiB3aGVuIGl0IG5lZWRzIHRvIGZhbGwgYmFjaworICAgdG8gYSB0aHJlZS13YXkgbWVyZ2U7IHRoaXMgY2FsbCBoYXMgYmVlbiB0dXJuZWQgaW50byBhbiBpbnRlcm5hbAorICAgc3Vicm91dGluZSBjYWxsIGluc3RlYWQgb2Ygc3Bhd25pbmcgYSBzZXBhcmF0ZSBzdWJwcm9jZXNzLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gc2NyaXB0cyAoaW4gY29udHJpYi8pIG5vdyBrbm93cyBhYm91dAorICAgImdpdCBicmFuY2ggLS1kZWxldGUvLS1tb3ZlIFstLXJlbW90ZV0iLgorICAgKG1lcmdlIDI3MDNjMjIgdnMvY29tcGxldGlvbi1icmFuY2gtZnVsbHktc3BlbGxlZC1kLW0tciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggaG9va3MvPGhvb2s+IiBsZWFybmVkIHRvIHRha2UKKyAgIGNvcmUuaG9va3NQYXRoIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGludHJvZHVjZWQgZHVyaW5nIDIuOSBjeWNsZSkKKyAgIGludG8gYWNjb3VudC4KKyAgIChtZXJnZSA5NDQ1YjQ5IGFiL2hvb2tzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLS1zaG93LXNpZ25hdHVyZSIgYW5kIG90aGVyIGNvbW1hbmRzIHRoYXQgZGlzcGxheSB0aGUKKyAgIHZlcmlmaWNhdGlvbiBzdGF0dXMgb2YgUEdQIHNpZ25hdHVyZSBub3cgc2hvd3MgdGhlIGxvbmdlciBrZXktaWQsCisgICBhcyAzMi1iaXQga2V5LWlkIGlzIHNvIGxhc3QgY2VudHVyeS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBsZWFybmVkIHRoZSBzYW1lIHBlcmZvcm1hbmNlIHRyaWNrIHRvIGF2b2lkCisgICBjcmVhdGluZyB0b28gc21hbGwgYSBwYWNrZmlsZSBhcyAiZ2l0IGZldGNoIiBhbmQgImdpdCBwdXNoIiBoYXZlLAorICAgdXNpbmcgKi51bnBhY2tMaW1pdCBjb25maWd1cmF0aW9uLgorCisgKiBXaGVuICJnaXQgZGFlbW9uIiBpcyBydW4gd2l0aG91dCAtLVtpbml0LV10aW1lb3V0IHNwZWNpZmllZCwgYQorICAgY29ubmVjdGlvbiBmcm9tIGEgY2xpZW50IHRoYXQgc2lsZW50bHkgZ29lcyBvZmZsaW5lIGNhbiBoYW5nIGFyb3VuZAorICAgZm9yIGEgbG9uZyB0aW1lLCB3YXN0aW5nIHJlc291cmNlcy4gIFRoZSBzb2NrZXQtbGV2ZWwgS0VFUEFMSVZFIGhhcworICAgYmVlbiBlbmFibGVkIHRvIGFsbG93IHRoZSBPUyB0byBub3RpY2Ugc3VjaCBmYWlsZWQgY29ubmVjdGlvbnMuCisKKyAqICJnaXQgdXBsb2FkLXBhY2siIGNvbW1hbmQgaGFzIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIHBhcnNlLW9wdGlvbnMKKyAgIEFQSS4KKworICogVGhlICJnaXQgYXBwbHkiIHN0YW5kYWxvbmUgcHJvZ3JhbSBpcyBiZWluZyBsaWJpZmllZDsgdGhlIGZpcnN0CisgICBzdGVwIHRvIG1vdmUgbWFueSBzdGF0ZSB2YXJpYWJsZXMgaW50byBhIHN0cnVjdHVyZSB0aGF0IGNhbiBiZQorICAgZXhwbGljaXRseSAocmUpaW5pdGlhbGl6ZWQgdG8gbWFrZSB0aGUgbWFjaGluZXJ5IGNhbGxhYmxlIG1vcmUKKyAgIHRoYW4gb25jZSBoYXMgYmVlbiBtZXJnZWQuCisKKyAqIEhUVFAgdHJhbnNwb3J0IGdhaW5lZCBhbiBvcHRpb24gdG8gcHJvZHVjZSBtb3JlIGRldGFpbGVkIGRlYnVnZ2luZworICAgdHJhY2UuCisgICAobWVyZ2UgNzNlNTdhYSBlcC9odHRwLWN1cmwtdHJhY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbnN0ZWFkIG9mIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBhIHN0cnVjdCBzdHJpbmdfbGlzdAorICAgdGhhdCBpcyBhbGxvY2F0ZWQgd2l0aCBhbGwgTlVMcyBoYXBwZW5zIHRvIGJlIHRoZSBJTklUX05PRFVQIGtpbmQsCisgICB0aGUgdXNlcnMgb2Ygc3RyaW5nX2xpc3Qgc3RydWN0dXJlcyBhcmUgdGF1Z2h0IHRvIGluaXRpYWxpemUgdGhlbQorICAgZXhwbGljaXRseSBhcyBzdWNoLCB0byBkb2N1bWVudCB0aGVpciBiZWhhdmlvdXIgYmV0dGVyLgorICAgKG1lcmdlIDI3MjFjZTIgamsvc3RyaW5nLWxpc3Qtc3RhdGljLWluaXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIVFRQZCB0ZXN0cyBsZWFybmVkIHRvIHNob3cgdGhlIHNlcnZlciBlcnJvciBsb2cgdG8gaGVscCBkaWFnbm9zaW5nCisgICBhIGZhaWxpbmcgdGVzdHMuCisgICAobWVyZ2UgNDRmMjQzZCBuZC90ZXN0LWxpYi1odHRwZC1zaG93LWVycm9yLWxvZy1pbi12ZXJib3NlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG93bmVyc2hpcCBydWxlIGZvciB0aGUgcGllY2Ugb2YgbWVtb3J5IHRoYXQgaG9sZCByZWZlcmVuY2VzIHRvCisgICBiZSBmZXRjaGVkIGluICJnaXQgZmV0Y2giIHdhcyBzY3Jld3ksIHdoaWNoIGhhcyBiZWVuIGNsZWFuZWQgdXAuCisKKyAqICJnaXQgYmlzZWN0IiBtYWtlcyBhbiBpbnRlcm5hbCBjYWxsIHRvICJnaXQgZGlmZi10cmVlIiB3aGVuCisgICBiaXNlY3Rpb24gZmluZHMgdGhlIGN1bHByaXQsIGJ1dCB0aGlzIGNhbGwgZGlkIG5vdCBpbml0aWFsaXplIHRoZQorICAgZGF0YSBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgZGlmZi10cmVlIEFQSSBjb3JyZWN0bHkuCisKKyAqIEZ1cnRoZXIgcHJlcGFyYXRvcnkgY2xlYW4tdXAgZm9yICJ3b3JrdHJlZSIgZmVhdHVyZSBjb250aW51ZXMuCisgICAobWVyZ2UgMDQwOWUwYiBuZC93b3JrdHJlZS1jbGVhbnVwLXBvc3QtaGVhZC1wcm90ZWN0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogRm9ybWF0cyBvZiB0aGUgdmFyaW91cyBkYXRhIChhbmQgaG93IHRvIHZhbGlkYXRlIHRoZW0pIHdoZXJlIHdlIHVzZQorICAgR1BHIHNpZ25hdHVyZSBoYXZlIGJlZW4gZG9jdW1lbnRlZC4KKworICogQSBuZXcgcnVuLWNvbW1hbmQgQVBJIGZ1bmN0aW9uIHBpcGVfY29tbWFuZCgpIGlzIGludHJvZHVjZWQgdG8KKyAgIHNhbmVseSBmZWVkIGRhdGEgdG8gdGhlIHN0YW5kYXJkIGlucHV0IHdoaWxlIGNhcHR1cmluZyBkYXRhIGZyb20KKyAgIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHRoZSBzdGFuZGFyZCBlcnJvciBvZiBhbiBleHRlcm5hbCBwcm9jZXNzLAorICAgd2hpY2ggaXMgY3VtYmVyc29tZSB0byBoYW5kLXJvbGwgY29ycmVjdGx5IHdpdGhvdXQgZGVhZGxvY2tpbmcuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBzaWduIGRhdGEgaW4gYSBwcmVwYXJlZCBidWZmZXIgd2l0aCBHUEcgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gdXNlIHRoaXMgQVBJIHRvIHJlYWQgZnJvbSB0aGUgc3RhdHVzLWZkIHRvIGNoZWNrIGZvcgorICAgZXJyb3JzIChpbnN0ZWFkIG9mIHJlbHlpbmcgb24gR1BHJ3MgZXhpdCBzdGF0dXMpLgorICAgKG1lcmdlIGVmZWU5NTUgamsvZ3BnLWludGVyZmFjZS1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogQWxsb3cgdC9wZXJmIGZyYW1ld29yayB0byB1c2UgdGhlIGZlYXR1cmVzIGZyb20gdGhlIG1vc3QgcmVjZW50CisgICB2ZXJzaW9uIG9mIEdpdCBldmVuIHdoZW4gdGVzdGluZyBhbiBvbGRlciBpbnN0YWxsZWQgdmVyc2lvbi4KKworICogVGhlIGNvbW1hbmRzIGluIHRoZSAibG9nL2RpZmYiIGZhbWlseSBoYXZlIGhhZCBhbiBGSUxFKiBwb2ludGVyIGluIHRoZQorICAgZGF0YSBzdHJ1Y3R1cmUgdGhleSBwYXNzIGFyb3VuZCBmb3IgYSBsb25nIHRpbWUsIGJ1dCBzb21lIGNvZGVwYXRocworICAgdXNlZCB0byBhbHdheXMgd3JpdGUgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIEFzIGEgcHJlcGFyYXRvcnkgc3RlcAorICAgdG8gbWFrZSAiZ2l0IGZvcm1hdC1wYXRjaCIgYXZhaWxhYmxlIHRvIHRoZSBpbnRlcm5hbCBjYWxsZXJzLCB0aGVzZQorICAgY29kZXBhdGhzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGNvbnNpc3RlbnRseSB3cml0ZSBpbnRvIHRoYXQgRklMRSoKKyAgIGluc3RlYWQuCisKKyAqIENvbnZlcnNpb24gZnJvbSB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdIHRvIHN0cnVjdCBvYmplY3RfaWQKKyAgIGNvbnRpbnVlcy4KKworICogSW1wcm92ZSB0aGUgbG9vayBvZiB0aGUgd2F5ICJnaXQgZmV0Y2giIHJlcG9ydHMgd2hhdCBoYXBwZW5lZCB0bworICAgZWFjaCByZWYgdGhhdCB3YXMgZmV0Y2hlZC4KKworICogVGhlIC5jLy5oIHNvdXJjZXMgYXJlIG1hcmtlZCBhcyBzdWNoIGluIG91ciAuZ2l0YXR0cmlidXRlcyBmaWxlIHNvCisgICB0aGF0ICJnaXQgZGlmZiAtVyIgYW5kIGZyaWVuZHMgd291bGQgd29yayBiZXR0ZXIuCisKKyAqIENvZGUgY2xlYW4tdXAgdG8gYXZvaWQgdXNpbmcgYSB2YXJpYWJsZSBzdHJpbmcgdGhhdCBjb21waWxlcnMgbWF5CisgICBmZWVsIHVudHJ1c3RhYmxlIGFzIHByaW50Zi1zdHlsZSBmb3JtYXQgZ2l2ZW4gdG8gd3JpdGVfZmlsZSgpCisgICBoZWxwZXIgZnVuY3Rpb24uCisKKyAqICJnaXQgcDQiIHVzZWQgYSBsb2NhdGlvbiBvdXRzaWRlICRHSVRfRElSL3JlZnMvIHRvIHBsYWNlIGl0cworICAgdGVtcG9yYXJ5IGJyYW5jaGVzLCB3aGljaCBoYXMgYmVlbiBtb3ZlZCB0byByZWZzL2dpdC1wNC10bXAvLgorCisgKiBFeGlzdGluZyBhdXRvY29uZiBnZW5lcmF0ZWQgdGVzdCBmb3IgdGhlIG5lZWQgdG8gbGluayB3aXRoIHB0aHJlYWQKKyAgIGxpYnJhcnkgZGlkIG5vdCBjaGVjayBhbGwgdGhlIGZ1bmN0aW9ucyBmcm9tIHB0aHJlYWQgbGlicmFyaWVzOworICAgcmVjZW50IEZyZWVCU0QgaGFzIHNvbWUgZnVuY3Rpb25zIGluIGxpYmMgYnV0IG5vdCBvdGhlcnMsIGFuZCB3ZQorICAgbWlzdGFrZW5seSB0aG91Z2h0IGxpbmtpbmcgd2l0aCBsaWJjIGlzIGVub3VnaCB3aGVuIGl0IGlzIG5vdC4KKworICogV2hlbiAiZ2l0IGZzY2siIHJlcG9ydHMgYSBicm9rZW4gbGluayAoZS5nLiBhIHRyZWUgb2JqZWN0IGNvbnRhaW5zCisgICBhIGJsb2IgdGhhdCBkb2VzIG5vdCBleGlzdCksIGJvdGggY29udGFpbmluZyBvYmplY3QgYW5kIHRoZSBvYmplY3QKKyAgIHRoYXQgaXMgcmVmZXJyZWQgdG8gd2VyZSByZXBvcnRlZCB3aXRoIHRoZWlyIDQwLWhleCBvYmplY3QgbmFtZXMuCisgICBUaGUgY29tbWFuZCBsZWFybmVkIHRoZSAiLS1uYW1lLW9iamVjdHMiIG9wdGlvbiB0byBzaG93IHRoZSBwYXRoIHRvCisgICB0aGUgY29udGFpbmluZyBvYmplY3QgZnJvbSBleGlzdGluZyByZWZzIChlLmcuICJIRUFEfjI0XjI6ZmlsZS50eHQiKS4KKworICogQWxsb3cgaHR0cCBkYWVtb24gdGVzdHMgaW4gVHJhdmlzIENJIHRlc3RzLgorCisgKiBNYWtlZmlsZSBhc3N1bWVkIHRoYXQgLWxydCBpcyBhbHdheXMgYXZhaWxhYmxlIG9uIHBsYXRmb3JtcyB0aGF0CisgICB3YW50IHRvIHVzZSBjbG9ja19nZXR0aW1lKCkgYW5kIENMT0NLX01PTk9UT05JQywgd2hpY2ggaXMgbm90IGEKKyAgIGNhc2UgZm9yIHJlY2VudCBNYWMgT1MgWC4gIFRoZSBuZWNlc3Nhcnkgc3ltYm9scyBhcmUgb2Z0ZW4gZm91bmQgaW4KKyAgIGxpYmMgb24gbWFueSBtb2Rlcm4gc3lzdGVtcyBhbmQgaGF2aW5nIC1scnQgb24gdGhlIGNvbW1hbmQgbGluZSwgYXMKKyAgIGxvbmcgYXMgdGhlIGxpYnJhcnkgZXhpc3RzLCBoYWQgbm8gZWZmZWN0LCBidXQgd2hlbiB0aGUgcGxhdGZvcm0KKyAgIHJlbW92ZXMgbGlicnQuYSB0aGF0IGlzIGEgZGlmZmVyZW50IG1hdHRlci0taGF2aW5nIC1scnQgd2lsbCBicmVhaworICAgdGhlIGxpbmthZ2UuCisKKyAgIFRoaXMgY2hhbmdlIGNvdWxkIGJlIHNlZW4gYXMgYSByZWdyZXNzaW9uIGZvciB0aG9zZSB3aG8gZG8gbmVlZCB0bworICAgc3BlY2lmeSAtbHJ0LCBhcyB0aGV5IG5vdyBzcGVjaWZpY2FsbHkgYXNrIGZvciBORUVEU19MSUJSVCB3aGVuCisgICBidWlsZGluZy4gSG9wZWZ1bGx5IHRoZXkgYXJlIGluIHRoZSBtaW5vcml0eSB0aGVzZSBkYXlzLgorCisgKiBGdXJ0aGVyIHByZXBhcmF0b3J5IHdvcmsgb24gdGhlIHJlZnMgQVBJIGJlZm9yZSB0aGUgcGx1Z2dhYmxlCisgICBiYWNrZW5kIHNlcmllcyBjYW4gbGFuZC4KKworICogRXJyb3IgaGFuZGxpbmcgaW4gdGhlIGNvZGVwYXRocyB0aGF0IHVwZGF0ZXMgcmVmcyBoYXMgYmVlbgorICAgaW1wcm92ZWQuCisKKyAqIFRoZSBBUEkgdG8gaXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVmcyAoaS5lLiBmb3JfZWFjaF9yZWYoKSwgZXRjLikKKyAgIGhhcyBiZWVuIHJldmFtcGVkLgorCisgKiBUaGUgaGFuZGxpbmcgb2YgdGhlICJ0ZXh0PWF1dG8iIGF0dHJpYnV0ZSBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAkIGVjaG8gIiogdGV4dD1hdXRvIGVvbD1jcmxmIiA+LmdpdGF0dHJpYnV0ZXMKKyAgIHVzZWQgdG8gaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKKyAgICQgZWNobyAiKiB0ZXh0IGVvbD1jcmxmIiA+LmdpdGF0dHJpYnV0ZXMKKyAgIGkuZS4gZGVjbGFyaW5nIGFsbCBmaWxlcyBhcmUgdGV4dCAoaWdub3JpbmcgImF1dG8iKS4gIFRoZQorICAgY29tYmluYXRpb24gaGFzIGJlZW4gZml4ZWQgdG8gYmUgZXF1aXZhbGVudCB0byBkb2luZworICAgJCBnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZQorCisgKiBEb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gc2hvdyBiZXR0ZXIgZXhhbXBsZSB1c2FnZQorICAgb2YgdGhlIHVwZGF0ZWQgInRleHQ9YXV0byIgYXR0cmlidXRlLgorCisgKiBBIGZldyB0ZXN0cyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgImdpdCByZWJhc2UgLWkiIGhhdmUgYmVlbgorICAgYWRkZWQuCisKKyAqIER1bWIgaHR0cCB0cmFuc3BvcnQgb24gdGhlIGNsaWVudCBzaWRlIGhhcyBiZWVuIG9wdGltaXplZC4KKyAgIChtZXJnZSBlY2JhMTk1IGV3L2h0dHAtd2Fsa2VyIGxhdGVyIHRvIG1haW50KS4KKworICogVXNlcnMgb2YgdGhlIHBhcnNlX29wdGlvbnNfY29uY2F0KCkgQVBJIGZ1bmN0aW9uIG5lZWQgdG8gYWxsb2NhdGUKKyAgIGV4dHJhIHNsb3RzIGluIGFkdmFuY2UgYW5kIGZpbGwgdGhlbSB3aXRoIE9QVF9FTkQoKSB3aGVuIHRoZXkgd2FudAorICAgdG8gZGVjaWRlIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIG9wdGlvbnMgZHluYW1pY2FsbHksIHdoaWNoIG1ha2VzIHRoZQorICAgY29kZSBlcnJvci1wcm9uZSBhbmQgaGFyZCB0byByZWFkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgdHdlYWtpbmcKKyAgIHRoZSBBUEkgdG8gYWxsb2NhdGUgYW5kIHJldHVybiBhIG5ldyBjb3B5IG9mICJzdHJ1Y3Qgb3B0aW9uIiBhcnJheS4KKworICogImdpdCBmZXRjaCIgZXhjaGFuZ2VzIGJhdGNoZWQgaGF2ZS9hY2sgbWVzc2FnZXMgYmV0d2VlbiB0aGUgc2VuZGVyCisgICBhbmQgdGhlIHJlY2VpdmVyLCBpbml0aWFsbHkgZG91YmxpbmcgZXZlcnkgdGltZSBhbmQgdGhlbiBmYWxsaW5nCisgICBiYWNrIHRvIGVubGFyZ2UgdGhlIHdpbmRvdyBzaXplIGxpbmVhcmx5LiAgVGhlICJzbWFydCBodHRwIgorICAgdHJhbnNwb3J0LCBiZWluZyBhbiBoYWxmLWR1cGxleCBwcm90b2NvbCwgb3V0Z3Jvd3MgdGhlIHByZXNldCBsaW1pdAorICAgdG9vIHF1aWNrbHkgYW5kIGJlY29tZXMgaW5lZmZpY2llbnQgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGEgbGFyZ2UKKyAgIHJlcG9zaXRvcnkuICBUaGUgaW50ZXJuYWwgbWVjaGFuaXNtIGxlYXJuZWQgdG8gZ3JvdyB0aGUgd2luZG93IHNpemUKKyAgIG1vcmUgYWdncmVzc2l2ZWx5IHdoZW4gd29ya2luZyB3aXRoIHRoZSAic21hcnQgaHR0cCIgdHJhbnNwb3J0LgorCisgKiBUZXN0cyBmb3IgImdpdCBzdm4iIGhhdmUgYmVlbiB0YXVnaHQgdG8gcmV1c2UgdGhlIGxpYi1odHRwZCB0ZXN0CisgICBpbmZyYXN0cnVjdHVyZSB3aGVuIHRlc3RpbmcgdGhlIHN1YnZlcnNpb24gaW50ZWdyYXRpb24gdGhhdAorICAgaW50ZXJhY3RzIHdpdGggc3VidmVyc2lvbiByZXBvc2l0b3JpZXMgc2VydmVkIG92ZXIgdGhlIGh0dHA6Ly8KKyAgIHByb3RvY29sLgorICAgKG1lcmdlIGE4YTVkMjUgZXcvZ2l0LXN2bi1odHRwLXRlc3RzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwYWNrLW9iamVjdHMiIGhhcyBhIGZldyBvcHRpb25zIHRoYXQgdGVsbCBpdCBub3QgdG8gcGFjaworICAgb2JqZWN0cyBmb3VuZCBpbiBjZXJ0YWluIHBhY2tmaWxlcywgd2hpY2ggcmVxdWlyZSBpdCB0byBzY2FuIC5pZHgKKyAgIGZpbGVzIG9mIGFsbCBhdmFpbGFibGUgcGFja3MuICBUaGUgY29kZXBhdGhzIGludm9sdmVkIGluIHRoZXNlCisgICBvcGVyYXRpb25zIGhhdmUgYmVlbiBvcHRpbWl6ZWQgZm9yIGEgY29tbW9uIGNhc2Ugb2Ygbm90IGhhdmluZyBhbnkKKyAgIG5vbi1sb2NhbCBwYWNrIGFuZC9vciBhbnkgLmtlcHQgcGFjay4KKworICogVGhlIHQzNzAwIHRlc3QgYWJvdXQgImFkZCAtLWNobW9kPS14IiBoYXZlIGJlZW4gbWFkZSBhIGJpdCBtb3JlCisgICByb2J1c3QgYW5kIGdlbmVyYWxseSBjbGVhbmVkIHVwLgorICAgKG1lcmdlIDc2NmNkYzQgaWIvdDM3MDAtYWRkLWNobW9kLXgtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgbGVhcm5lZCBQQUdFUl9FTlYga25vYiB0aGF0IGxpc3RzIHdoYXQgZGVmYXVsdAorICAgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0dGluZ3MgdG8gZXhwb3J0IGZvciBwb3B1bGFyIHBhZ2Vycy4gIFRoaXMKKyAgIG1lY2hhbmlzbSBpcyB1c2VkIHRvIHR3ZWFrIHRoZSBkZWZhdWx0IHNldHRpbmdzIHRvIE1PUkUgb24gRnJlZUJTRC4KKyAgIChtZXJnZSA5OTViYzIyIGV3L2J1aWxkLXRpbWUtcGFnZXItdHdlYWtzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGh0dHAtYmFja2VuZCAodGhlIHNlcnZlci1zaWRlIGNvbXBvbmVudCBvZiBzbWFydC1odHRwCisgICB0cmFuc3BvcnQpIHVzZWQgdG8gdHJpY2tsZSB0aGUgSFRUUCBoZWFkZXIgb25lIGF0IGEgdGltZS4gIE5vdworICAgdGhlc2Ugd3JpdGUoMilzIGFyZSBiYXRjaGVkLgorICAgKG1lcmdlIGIzNjA0NWMgZXcvaHR0cC1iYWNrZW5kLWJhdGNoLWhlYWRlcnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuICJnaXQgcmViYXNlIiB0cmllcyB0byBjb21wYXJlIHNldCBvZiBjaGFuZ2VzIG9uIHRoZSB1cGRhdGVkCisgICB1cHN0cmVhbSBhbmQgb3VyIG93biBicmFuY2gsIGl0IGNvbXB1dGVzIHBhdGNoLWlkIGZvciBhbGwgb2YgdGhlc2UKKyAgIGNoYW5nZXMgYW5kIGF0dGVtcHRzIHRvIGZpbmQgbWF0Y2hlcy4gVGhpcyBoYXMgYmVlbiBvcHRpbWl6ZWQgYnkKKyAgIGxhemlseSBjb21wdXRpbmcgdGhlIGZ1bGwgcGF0Y2gtaWQgKHdoaWNoIGlzIGV4cGVuc2l2ZSkgdG8gYmUKKyAgIGNvbXBhcmVkIG9ubHkgZm9yIGNoYW5nZXMgdGhhdCB0b3VjaCB0aGUgc2FtZSBzZXQgb2YgcGF0aHMuCisgICAobWVyZ2UgYmE2NzUwNCBrdy9wYXRjaC1pZHMtb3B0aW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGhhbmRmdWwgb2YgdGVzdHMgdGhhdCB3ZXJlIGJyb2tlbiB1bmRlciBnZXR0ZXh0LXBvaXNvbiBidWlsZCBoYXZlCisgICBiZWVuIGZpeGVkLgorCisgKiBUaGUgcmVjZW50IGkxOG4gcGF0Y2ggd2UgYWRkZWQgZHVyaW5nIHRoaXMgY3ljbGUgZGlkIGEgYml0IHRvbyBtdWNoCisgICByZWZhY3RvcmluZyBvZiB0aGUgbWVzc2FnZXMgdG8gYXZvaWQgd29yZC1sZWdvczsgdGhlIHJlcGV0aXRpb24gaGFzCisgICBiZWVuIHJlZHVjZWQgdG8gaGVscCB0cmFuc2xhdG9ycy4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi45CistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuOCBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiBUaGUgY29tbWFuZHMgaW4gYGdpdCBsb2dgIGZhbWlseSB0YWtlICVDKGF1dG8pIGluIGEgY3VzdG9tIGZvcm1hdAorICAgc3RyaW5nLiAgVGhpcyB1bmNvbmRpdGlvbmFsbHkgdHVybmVkIHRoZSBjb2xvciBvbiwgaWdub3JpbmcKKyAgIC0tbm8tY29sb3Igb3Igd2l0aCAtLWNvbG9yPWF1dG8gd2hlbiB0aGUgb3V0cHV0IGlzIG5vdCBjb25uZWN0ZWQgdG8KKyAgIGEgdHR5OyB0aGlzIHdhcyBjb3JyZWN0ZWQgdG8gbWFrZSB0aGUgZm9ybWF0IHRydWx5IGJlaGF2ZSBhcworICAgImF1dG8iLgorCisgKiAiZ2l0IHJldi1saXN0IC0tY291bnQiIHdob3NlIHdhbGstbGVuZ3RoIGlzIGxpbWl0ZWQgd2l0aCAiLW4iCisgICBvcHRpb24gZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCB0aGUgY291bnRpbmcgb3B0aW1pemVkIHRvIGxvb2sgYXQgdGhlCisgICBiaXRtYXAgaW5kZXguCisKKyAqICJnaXQgc2hvdyAtVyIgKGV4dGVuZCBodW5rcyB0byBjb3ZlciB0aGUgZW50aXJlIGZ1bmN0aW9uLCBkZWxpbWl0ZWQKKyAgIGJ5IGxpbmVzIHRoYXQgbWF0Y2ggdGhlICJmdW5jbmFtZSIgcGF0dGVybikgdXNlZCB0byBzaG93IHRoZSBlbnRpcmUKKyAgIGZpbGUgd2hlbiBhIGNoYW5nZSBhZGRlZCBhbiBlbnRpcmUgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKKyAgIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBzZXQgaGFzIGJlZW4gdXBkYXRlZCBzbyB0aGF0IGxpdGVyYWwgY29tbWFuZHMsCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBjb25zaXN0ZW50bHkKKyAgIHR5cGVzZXQgaW4gZml4ZWQtd2lkdGggZm9udCBhbmQgYm9sZCBpbiBtYW5wYWdlcy4KKworICogImdpdCBzdm4gcHJvcHNldCIgc3ViY29tbWFuZCB0aGF0IHdhcyBhZGRlZCBpbiAyLjMgZGF5cyBpcworICAgZG9jdW1lbnRlZCBub3cuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIHRyaWVzIHRvIGNvbnNpc3RlbnRseSBzcGVsbCAiR1BHIjsgd2hlbgorICAgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG5hbWUsICJncGciIGlzIHVzZWQuCisKKyAqICJnaXQgcmVmbG9nIiBzdG9wcGVkIHVwb24gc2VlaW5nIGFuIGVudHJ5IHRoYXQgZGVub3RlcyBhIGJyYW5jaAorICAgY3JlYXRpb24gZXZlbnQgKGFrYSAidW5ib3JuIiksIHdoaWNoIG1hZGUgaXQgYXBwZWFyIGFzIGlmIHRoZQorICAgcmVmbG9nIHdhcyB0cnVuY2F0ZWQuCisKKyAqIFRoZSBnaXQtcHJvbXB0IHNjcmlwdGxldCAoaW4gY29udHJpYi8pIHdhcyBub3QgZnJpZW5kbHkgd2l0aCB0aG9zZQorICAgd2hvIHVzZXMgInNldCAtdSIsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBjb21wYXQvcmVnZXggY29kZSBkaWQgbm90IGNsZWFubHkgY29tcGlsZS4KKworICogQSBjb2RlcGF0aCB0aGF0IHVzZWQgYWxsb2NhKDMpIHRvIHBsYWNlIGFuIHVuYm91bmRlZCBhbW91bnQgb2YgZGF0YQorICAgb24gdGhlIHN0YWNrIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYXZvaWQgZG9pbmcgc28uCisKKyAqICJnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2htb2Q9K3ggZmlsZSIgbWF5IGJlIHVzYWJsZSBhcyBhbiBlc2NhcGUKKyAgIGhhdGNoLCBidXQgbm90IGEgZnJpZW5kbHkgdGhpbmcgdG8gZm9yY2UgZm9yIHBlb3BsZSB3aG8gZG8gbmVlZCB0bworICAgdXNlIGl0IHJlZ3VsYXJseS4gICJnaXQgYWRkIC0tY2htb2Q9K3ggZmlsZSIgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworICogQnVpbGQgaW1wcm92ZW1lbnRzIGZvciBnbm9tZS1rZXlyaW5nIChpbiBjb250cmliLykKKworICogImdpdCBzdGF0dXMiIHVzZWQgdG8gc2F5ICJ3b3JraW5nIGRpcmVjdG9yeSIgd2hlbiBpdCBtZWFudCAid29ya2luZworICAgdHJlZSIuCisKKyAqIENvbW1lbnRzIGFib3V0IG1pc2JlaGF2aW5nIEZyZWVCU0Qgc2hlbGxzIGhhdmUgYmVlbiBjbGFyaWZpZWQgd2l0aAorICAgdGhlIHZlcnNpb24gbnVtYmVyICg5LnggYW5kIGJlZm9yZSBhcmUgYnJva2VuLCBuZXdlciBvbmVzIGFyZSBPSykuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2sgQSIgd29ya2VkIG9uIGFuIHVuYm9ybiBicmFuY2gsIGJ1dCAiZ2l0CisgICBjaGVycnktcGljayBBLi5CIiBkaWRuJ3QuCisKKyAqIEZpeCBhbiB1bmludGVuZGVkIHJlZ3Jlc3Npb24gaW4gdjIuOSB0aGF0IGJyZWFrcyAiY2xvbmUgLS1kZXB0aCIKKyAgIHRoYXQgcmVjdXJzZXMgZG93biB0byBzdWJtb2R1bGVzIGJ5IGZvcmNpbmcgdGhlIHN1Ym1vZHVsZXMgdG8gYWxzbworICAgYmUgY2xvbmVkIHNoYWxsb3dseSwgd2hpY2ggbWFueSBzZXJ2ZXIgaW5zdGFuY2VzIHRoYXQgaG9zdCB1cHN0cmVhbQorICAgb2YgdGhlIHN1Ym1vZHVsZXMgYXJlIG5vdCBwcmVwYXJlZCBmb3IuCisKKyAqIEZpeCB1bm5lY2Vzc2FyaWx5IHdhc3RlIGluIHRoZSBpZGlvbWF0aWMgdXNlIG9mICc6ICR7VkFSPWRlZmF1bHR9JworICAgdG8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlLCB3aXRob3V0IGVuY2xvc2luZyBpdCBpbiBkb3VibGUgcXVvdGVzLgorCisgKiBTb21lIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgaGFkIG5vbi1BTlNJIHN0cmljdCBkZWNsYXJhdGlvbnMgb2YgQworICAgZnVuY3Rpb25zIHRoYXQgZG8gbm90IHRha2UgYW55IHBhcmFtZXRlcnMsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSBpbnRlcm5hbCBjb2RlIHVzZWQgdG8gc2hvdyBsb2NhbCB0aW1lem9uZSBvZmZzZXQgaXMgbm90CisgICBwcmVwYXJlZCB0byBoYW5kbGUgdGltZXN0YW1wcyBiZXlvbmQgeWVhciAyMTAwLCBhbmQgZ2F2ZSBhCisgICBib2d1cyBvZmZzZXQgdmFsdWUgdG8gdGhlIGNhbGxlci4gIFVzZSBhIG1vcmUgYmVuaWduIGxvb2tpbmcKKyAgICswMDAwIGluc3RlYWQgYW5kIGxldCAiZ2l0IGxvZyIgZ29pbmcgaW4gc3VjaCBhIGNhc2UsIGluc3RlYWQKKyAgIG9mIGFib3J0aW5nLgorCisgKiBPbmUgYW1vbmcgZm91ciBpbnZvY2F0aW9ucyBvZiByZWFkbGluaygxKSBpbiBvdXIgdGVzdCBzdWl0ZSBoYXMKKyAgIGJlZW4gcmV3cml0dGVuIHNvIHRoYXQgdGhlIHRlc3QgY2FuIHJ1biBvbiBzeXN0ZW1zIHdpdGhvdXQgdGhlCisgICBjb21tYW5kIChvdGhlcnMgYXJlIGluIHZhbGdyaW5kIHRlc3QgZnJhbWV3b3JrIGFuZCB0OTgwMikuCisKKyAqIHQvcGVyZiBuZWVkcyAvdXNyL2Jpbi90aW1lIHdpdGggR05VIGV4dGVuc2lvbjsgdGhlIGludm9jYXRpb24gb2YgaXQKKyAgIGlzIHVwZGF0ZWQgdG8gImd0aW1lIiBvbiBEYXJ3aW4uCisKKyAqIEEgYnVnLCB3aGljaCBjYXVzZWQgImdpdCBwNCIgd2hpbGUgcnVubmluZyB1bmRlciB2ZXJib3NlIG1vZGUgdG8KKyAgIHJlcG9ydCBwYXRocyB0aGF0IGFyZSBvbWl0dGVkIGR1ZSB0byBicmFuY2ggcHJlZml4IGluY29ycmVjdGx5LCBoYXMKKyAgIGJlZW4gZml4ZWQ7IHRoZSBjb21tYW5kIHNhaWQgIklnbm9yaW5nIGZpbGUgb3V0c2lkZSBvZiBwcmVmaXgiIGZvcgorICAgcGF0aHMgdGhhdCBhcmUgX2luc2lkZV8uCisKKyAqIFRoZSB0b3AgbGV2ZWwgZG9jdW1lbnRhdGlvbiAiZ2l0IGhlbHAgZ2l0IiBzdGlsbCBwb2ludGVkIGF0IHRoZQorICAgZG9jdW1lbnRhdGlvbiBzZXQgaG9zdGVkIGF0IG5vdy1kZWZ1bmN0IGdvb2dsZS1jb2RlIHJlcG9zaXRvcnkuCisgICBVcGRhdGUgaXQgdG8gcG9pbnQgdG8gaHR0cHM6Ly9naXQuZ2l0aHViLmlvL2h0bWxkb2NzL2dpdC5odG1sCisgICBpbnN0ZWFkLgorCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBjb250ZW50cyBvZiBhIGNvbW1pdCBvYmplY3QgYW5kCisgICBmaW5kcyBpdHMgc3ViamVjdCBsaW5lIGRpZCBub3QgaWdub3JlIGxlYWRpbmcgYmxhbmsgbGluZXMsIGFzIGlzCisgICBjb21tb25seSBkb25lIGJ5IG90aGVyIGNvZGVwYXRocy4gIE1ha2UgaXQgaWdub3JlIGxlYWRpbmcgYmxhbmsKKyAgIGxpbmVzIHRvIG1hdGNoLgorCisgKiBGb3IgYSBsb25nIHRpbWUsIHdlIGNhcnJpZWQgYW4gaW4tY29kZSBjb21tZW50IHRoYXQgc2FpZCBvdXIKKyAgIGNvbG9yZWQgb3V0cHV0IHdvdWxkIHdvcmsgb25seSB3aGVuIHdlIHVzZSBmcHJpbnRmL2ZwdXRzIG9uCisgICBXaW5kb3dzLCB3aGljaCBubyBsb25nZXIgaXMgdGhlIGNhc2UgZm9yIHRoZSBwYXN0IGZldyB5ZWFycy4KKworICogImdjLmF1dG9QYWNrTGltaXQiIHdoZW4gc2V0IHRvIDEgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgcmVwYWNraW5nCisgICB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHBhY2ssIGJ1dCB0aGUgY29kZSBjb3VudGVkIHBvb3JseSBhbmQgZGlkCisgICBzby4KKworICogQWRkIGEgdGVzdCB0byBzcGVjaWZ5IHRoZSBkZXNpcmVkIGJlaGF2aW91ciB0aGF0IGN1cnJlbnRseSBpcyBub3QKKyAgIGF2YWlsYWJsZSBpbiAiZ2l0IHJlYmFzZSAtWHN1YnRyZWU9Li4uIi4KKworICogTW9yZSBtYXJrLXVwIHVwZGF0ZXMgdG8gdHlwZXNldCBzdHJpbmdzIHRoYXQgYXJlIGV4cGVjdGVkIHRvCisgICBsaXRlcmFsbHkgdHlwZWQgYnkgdGhlIGVuZCB1c2VyIGluIGZpeGVkLXdpZHRoIGZvbnQuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1TIiBmb3IgYSBjb21taXQgd2l0aG91dAorICAgYW55IG1lc3NhZ2UgYm9keSBjb3VsZCBoYXZlIG1pc2lkZW50aWZpZWQgd2hlcmUgdGhlIGhlYWRlciBvZiB0aGUKKyAgIGNvbW1pdCBvYmplY3QgZW5kcy4KKworICogImdpdCByZWJhc2UgLWkgLS1hdXRvc3Rhc2giIGRpZCBub3QgcmVzdG9yZSB0aGUgYXV0by1zdGFzaGVkIGNoYW5nZQorICAgd2hlbiB0aGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLgorCisgKiBHaXQgZG9lcyBub3Qga25vdyB3aGF0IHRoZSBjb250ZW50cyBpbiB0aGUgaW5kZXggc2hvdWxkIGJlIGZvciBhCisgICBwYXRoIGFkZGVkIHdpdGggImdpdCBhZGQgLU4iIHlldCwgc28gImdpdCBncmVwIC0tY2FjaGVkIiBzaG91bGQgbm90CisgICBzaG93IGhpdHMgKG9yIHNob3cgbGFjayBvZiBoaXRzLCB3aXRoIC1MKSBpbiBzdWNoIGEgcGF0aCwgYnV0IHRoYXQKKyAgIGxvZ2ljIGRvZXMgbm90IGFwcGx5IHRvICJnaXQgZ3JlcCIsIGkuZS4gc2VhcmNoaW5nIGluIHRoZSB3b3JraW5nCisgICB0cmVlIGZpbGVzLiAgQnV0IHdlIGRpZCBzbyBieSBtaXN0YWtlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYmxhbWUgLU0iIG1pc3NlZCBhIHNpbmdsZSBsaW5lIHRoYXQgd2FzIG1vdmVkIHdpdGhpbiB0aGUgZmlsZS4KKworICogRml4IHJlY2VudGx5IGludHJvZHVjZWQgY29kZXBhdGhzIHRoYXQgYXJlIGludm9sdmVkIGluIHBhcmFsbGVsCisgICBzdWJtb2R1bGUgb3BlcmF0aW9ucywgd2hpY2ggZ2F2ZSB1cCBvbiByZWFkaW5nIHRvbyBlYXJseSwgYW5kCisgICBjb3VsZCBoYXZlIHdhc3RlZCBDUFUgd2hpbGUgYXR0ZW1wdGluZyB0byB3cml0ZSB1bmRlciBhIGNvcm5lcgorICAgY2FzZSBjb25kaXRpb24uCisKKyAqICJnaXQgZ3JlcCAtaSIgaGFzIGJlZW4gdGF1Z2h0IHRvIGZvbGQgY2FzZSBpbiBub24tYXNjaWkgbG9jYWxlcworICAgY29ycmVjdGx5LgorCisgKiBBIHRlc3QgdGhhdCB1bmNvbmRpdGlvbmFsbHkgdXNlZCAibWt0ZW1wIiBsZWFybmVkIHRoYXQgdGhlIGNvbW1hbmQKKyAgIGlzIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgZXZlcnl3aGVyZS4KKworICogVGhlcmUgYXJlIGNlcnRhaW4gaG91c2Uta2VlcGluZyB0YXNrcyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIGF0CisgICB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgYW55IEdpdCBwcm9ncmFtLCBhbmQgcHJvZ3JhbXMgdGhhdCBhcmUgbm90CisgICBidWlsdC1pbiBjb21tYW5kcyBoYWQgdG8gZG8gdGhlbSBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyAiZ2l0IgorICAgcG90dHkgZG9lcy4gIEl0IHdhcyBlYXN5IHRvIG1ha2UgbWlzdGFrZXMgaW4gb25lLW9mZiBzdGFuZGFsb25lCisgICBwcm9ncmFtcyAobGlrZSB0ZXN0IGhlbHBlcnMpLiAgQSBjb21tb24gIm1haW4oKSIgZnVuY3Rpb24gdGhhdAorICAgY2FsbHMgY21kX21haW4oKSBvZiBpbmRpdmlkdWFsIHByb2dyYW0gaGFzIGJlZW4gaW50cm9kdWNlZCB0bworICAgbWFrZSBpdCBoYXJkZXIgdG8gbWFrZSBtaXN0YWtlcy4KKyAgIChtZXJnZSBkZTYxY2ViIGprL2NvbW1vbi1tYWluIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRlc3QgZnJhbWV3b3JrIGxlYXJuZWQgYSBuZXcgaGVscGVyIHRlc3RfbWF0Y2hfc2lnbmFsIHRvCisgICBjaGVjayBhbiBleGl0IGNvZGUgZnJvbSBnZXR0aW5nIGtpbGxlZCBieSBhbiBleHBlY3RlZCBzaWduYWwuCisKKyAqIEdlbmVyYWwgY29kZSBjbGVhbi11cCBhcm91bmQgYSBoZWxwZXIgZnVuY3Rpb24gdG8gd3JpdGUgYQorICAgc2luZ2xlLWxpbmVyIHRvIGEgZmlsZS4KKyAgIChtZXJnZSA3ZWI2ZTEwIGprL3dyaXRlLWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbmUgcGFydCBvZiAiZ2l0IGFtIiBoYWQgYW4gb2RkYmFsbCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBjYWxsZWQKKyAgIHN0dWZmIGZyb20gb3V0c2lkZSAiaGlzIiBhcyBvcHBvc2VkIHRvIGNhbGxpbmcgd2hhdCB3ZSBoYXZlICJvdXJzIiwKKyAgIHdoaWNoIHdhcyBub3QgZ2VuZGVyLW5ldXRyYWwgYW5kIGFsc28gaW5jb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YKKyAgIHRoZSBzeXN0ZW0gd2hlcmUgb3V0c2lkZSBzdHVmZiBpcyB1c3VhbGx5IGNhbGxlZCAidGhlaXJzIiBpbgorICAgY29udHJhc3QgdG8gIm91cnMiLgorCisgKiAiZ2l0IGJsYW1lIGZpbGUiIGFsbG93ZWQgdGhlIGxpbmVhZ2Ugb2YgbGluZXMgaW4gdGhlIHVuY29tbWl0dGVkLAorICAgdW5hZGRlZCBjb250ZW50cyBvZiAiZmlsZSIgdG8gYmUgaW5zcGVjdGVkLCBidXQgaXQgcmVmdXNlZCB3aGVuCisgICAiZmlsZSIgZGlkIG5vdCBhcHBlYXIgaW4gdGhlIGN1cnJlbnQgY29tbWl0LiAgV2hlbiAiZmlsZSIgd2FzCisgICBjcmVhdGVkIGJ5IHJlbmFtaW5nIGFuIGV4aXN0aW5nIGZpbGUgKGJ1dCB0aGUgY2hhbmdlIGhhcyBub3QgYmVlbgorICAgY29tbWl0dGVkKSwgdGhpcyByZXN0cmljdGlvbiB3YXMgdW5uZWNlc3NhcmlseSB0aWdodC4KKworICogImdpdCBhZGQgLU4gZGlyL2ZpbGUgJiYgZ2l0IHdyaXRlLXRyZWUiIHByb2R1Y2VkIGFuIGluY29ycmVjdCB0cmVlCisgICB3aGVuIHRoZXJlIGFyZSBvdGhlciBwYXRocyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgdGhhdCBzb3J0cyBhZnRlcgorICAgImZpbGUiLgorCisgKiAiZ2l0IGZldGNoIGh0dHA6Ly91c2VyOnBhc3NAaG9zdC9yZXBvLi4uIiBzY3J1YmJlZCB0aGUgdXNlcmluZm8KKyAgIHBhcnQsIGJ1dCAiZ2l0IHB1c2giIGRpZG4ndC4KKworICogImdpdCBtZXJnZSIgd2l0aCByZW5vcm1hbGl6YXRpb24gZGlkIG5vdCB3b3JrIHdlbGwgd2l0aAorICAgbWVyZ2UtcmVjdXJzaXZlLCBkdWUgdG8gInNhZmVyIGNybGYiIGNvbnZlcnNpb24ga2lja2luZyBpbiB3aGVuIGl0CisgICBzaG91bGRuJ3QuCisgICAobWVyZ2UgMTMzNWQ3NiBqYy9yZW5vcm1hbGl6ZS1tZXJnZS1raWxsLXNhZmVyLWNybGYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdXNlIG9mIHN0cmJ1ZiBpbiAiZ2l0IHJtIiB0byBidWlsZCBmaWxlbmFtZSB0byByZW1vdmUgd2FzIGEgYml0CisgICBzdWJvcHRpbWFsLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogQW4gYWdlIG9sZCBidWcgdGhhdCBjYXVzZWQgImdpdCBkaWZmIC0taWdub3JlLXNwYWNlLWF0LWVvbCIKKyAgIG1pc2JlaGF2ZSBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBub3RlcyBtZXJnZSIgaGFkIGEgY29kZSB0byBzZWUgaWYgYSBwYXRoIGV4aXN0cyAoYW5kIGZhaWxzIGlmCisgICBpdCBkb2VzKSBhbmQgdGhlbiBvcGVuIHRoZSBwYXRoIGZvciB3cml0aW5nICh3aGVuIGl0IGRvZXNuJ3QpLgorICAgUmVwbGFjZSBpdCB3aXRoIG9wZW4gd2l0aCBPX0VYQ0wuCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBhbmQgImdpdCBpbmRleC1wYWNrIiBtb3N0bHkgb3BlcmF0ZSB3aXRoIG9mZl90CisgICB3aGVuIHRhbGtpbmcgYWJvdXQgdGhlIG9mZnNldCBvZiBvYmplY3RzIGluIGEgcGFja2ZpbGUsIGJ1dCB0aGVyZQorICAgd2VyZSBhIGhhbmRmdWwgb2YgcGxhY2VzIHRoYXQgdXNlZCAidW5zaWduZWQgbG9uZyIgdG8gaG9sZCB0aGF0CisgICB2YWx1ZSwgbGVhZGluZyB0byBhbiB1bmludGVuZGVkIHRydW5jYXRpb24uCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gImdpdCBkYWVtb24iIHRyaWVzIHRvIGVuYWJsZSB0aGUgc29ja2V0LWxldmVsCisgICBLRUVQQUxJVkUsIGJ1dCB3aGVuIGl0IGlzIHNwYXduZWQgdmlhIGluZXRkLCB0aGUgc3RhbmRhcmQgaW5wdXQKKyAgIGZpbGUgZGVzY3JpcHRvciBtYXkgbm90IG5lY2Vzc2FyaWx5IGJlIGNvbm5lY3RlZCB0byBhIHNvY2tldC4KKyAgIFN1cHByZXNzIGFuIEVOT1RTT0NLIGVycm9yIGZyb20gc2V0c29ja29wdCgpLgorCisgKiBSZWNlbnQgRnJlZUJTRCBzdG9wcGVkIG1ha2luZyBwZXJsIGF2YWlsYWJsZSBhdCAvdXNyL2Jpbi9wZXJsOworICAgc3dpdGNoIHRoZSBkZWZhdWx0IHRoZSBidWlsdC1pbiBwYXRoIHRvIC91c3IvbG9jYWwvYmluL3Blcmwgb24gbm90CisgICB0b28gYW5jaWVudCBGcmVlQlNEIHJlbGVhc2VzLgorCisgKiAiZ2l0IGNvbW1pdCAtLWhlbHAiIHNhaWQgIi0tbm8tdmVyaWZ5IiBpcyBvbmx5IGFib3V0IHNraXBwaW5nIHRoZQorICAgcHJlLWNvbW1pdCBob29rLCBhbmQgZmFpbGVkIHRvIHNheSB0aGF0IGl0IGFsc28gc2tpcHBlZCB0aGUKKyAgIGNvbW1pdC1tc2cgaG9vay4KKworICogImdpdCBtZXJnZSIgaW4gR2l0IHYyLjkgd2FzIHRhdWdodCB0byBmb3JiaWQgbWVyZ2luZyBhbiB1bnJlbGF0ZWQKKyAgIGxpbmVzIG9mIGhpc3RvcnkgYnkgZGVmYXVsdCwgYnV0IHRoYXQgaXMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZworICAgdGhlICItLXJlam9pbiIgbW9kZSBvZiAiZ2l0IHN1YnRyZWUiIChpbiBjb250cmliLykgd2FudHMgdG8gZG8uCisgICAiZ2l0IHN1YnRyZWUiIGhhcyBiZWVuIHRhdWdodCB0byB1c2UgdGhlICItLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMiCisgICBvcHRpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgZm9yICJnaXQgcGVyc2lzdGVudC1odHRwcyIgaGVscGVyIChpbiBjb250cmliLykKKyAgIGhhcyBiZWVuIHVwZGF0ZWQgc28gdGhhdCBpdCBjYW4gYmUgYnVpbHQgd2l0aCBtb3JlIHJlY2VudCB2ZXJzaW9ucworICAgb2YgR28uCisKKyAqIFRoZXJlIGlzIGFuIG9wdGltaXphdGlvbiB1c2VkIGluICJnaXQgZGlmZiAkdHJlZUEgJHRyZWVCIiB0byBib3Jyb3cKKyAgIGFuIGFscmVhZHkgY2hlY2tlZC1vdXQgY29weSBpbiB0aGUgd29ya2luZyB0cmVlIHdoZW4gaXQgaXMga25vd24gdG8KKyAgIGJlIHRoZSBzYW1lIGFzIHRoZSBibG9iIGJlaW5nIGNvbXBhcmVkLCBleHBlY3RpbmcgdGhhdCBvcGVuL21tYXAgb2YKKyAgIHN1Y2ggYSBmaWxlIGlzIGZhc3RlciB0aGFuIHJlYWRpbmcgaXQgZnJvbSB0aGUgb2JqZWN0IHN0b3JlLCB3aGljaAorICAgaW52b2x2ZXMgaW5mbGF0aW5nIGFuZCBhcHBseWluZyBkZWx0YS4gIFRoaXMgaG93ZXZlciBraWNrZWQgaW4gZXZlbgorICAgd2hlbiB0aGUgY2hlY2tlZC1vdXQgY29weSBuZWVkcyB0byBnbyB0aHJvdWdoIHRoZSBjb252ZXJ0LXRvLWdpdAorICAgY29udmVyc2lvbiAoaW5jbHVkaW5nIHRoZSBjbGVhbiBmaWx0ZXIpLCB3aGljaCBkZWZlYXRzIHRoZSB3aG9sZQorICAgcG9pbnQgb2YgdGhlIG9wdGltaXphdGlvbi4gIFRoZSBvcHRpbWl6YXRpb24gaGFzIGJlZW4gZGlzYWJsZWQgd2hlbgorICAgdGhlIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LgorCisgKiAiZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgbG9nIC0tYmFzaWMtcmVnZXhwIiBtaXNiZWhhdmVkCisgICBiZWNhdXNlIHRoZSBpbnRlcm5hbCBBUEkgdG8gYWNjZXNzIHRoZSBncmVwIG1hY2hpbmVyeSB3YXMgbm90CisgICBkZXNpZ25lZCB3ZWxsLgorCisgKiBXaW5kb3dzIHBvcnQgd2FzIGZhaWxpbmcgc29tZSB0ZXN0cyBpbiB0NDEzMCwgZHVlIHRvIHRoZSBsYWNrIG9mCisgICBpbnVtIGluIHRoZSByZXR1cm5lZCB2YWx1ZXMgYnkgaXRzIGxzdGF0KDIpIGVtdWxhdGlvbi4KKworICogVGhlIHJlZmxvZyBvdXRwdXQgZm9ybWF0IGlzIGRvY3VtZW50ZWQgYmV0dGVyLCBhbmQgYSBuZXcgZm9ybWF0CisgICAtLWRhdGU9dW5peCB0byByZXBvcnQgdGhlIHNlY29uZHMtc2luY2UtZXBvY2ggKHdpdGhvdXQgdGltZXpvbmUpCisgICBoYXMgYmVlbiBhZGRlZC4KKyAgIChtZXJnZSA0NDJmNmZkIGprL3JlZmxvZy1kYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmdG9vbCA8cGF0aHM+Li4uIiBzdGFydGVkIGluIGEgc3ViZGlyZWN0b3J5IGZhaWxlZCB0bworICAgaW50ZXJwcmV0IHRoZSBwYXRocyByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGZpeGVkLgorCisgKiBUaGUgY2hhcmFjdGVycyBpbiB0aGUgbGFiZWwgc2hvd24gZm9yIHRhZ3MvcmVmcyBmb3IgY29tbWl0cyBpbgorICAgImdpdHdlYiIgb3V0cHV0IGFyZSBub3cgcHJvcGVybHkgZXNjYXBlZCBmb3IgcHJvcGVyIEhUTUwgb3V0cHV0LgorCisgKiBGcmVlQlNEIGNhbiBsaWUgd2hlbiBhc2tlZCBtdGltZSBvZiBhIGRpcmVjdG9yeSwgd2hpY2ggbWFkZSB0aGUKKyAgIHVudHJhY2tlZCBjYWNoZSBjb2RlIHRvIGZhbGwgYmFjayB0byBhIHNsb3ctcGF0aCwgd2hpY2ggaW4gdHVybgorICAgY2F1c2VkIHRlc3RzIGluIHQ3MDYzIHRvIGZhaWwgYmVjYXVzZSBpdCB3YW50ZWQgdG8gdmVyaWZ5IHRoZQorICAgYmVoYXZpb3VyIG9mIHRoZSBmYXN0LXBhdGguCisKKyAqIFNxdWVsY2ggY29tcGlsZXIgd2FybmluZ3MgZm9yIG5lZG1hbGxvYyAoaW4gY29tcGF0LykgbGlicmFyeS4KKworICogQSBzbWFsbCBtZW1vcnkgbGVhayBpbiB0aGUgY29tbWFuZCBsaW5lIHBhcnNpbmcgb2YgImdpdCBibGFtZSIKKyAgIGhhcyBiZWVuIHBsdWdnZWQuCisKKyAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgaGFzaG1hcCB3YXMgdW5jbGVhciBpZiBoYXNobWFwX2VudHJ5CisgICBjYW4gYmUgc2FmZWx5IGRpc2NhcmRlZCB3aXRob3V0IGFueSBvdGhlciBjb25zaWRlcmF0aW9uLiAgU3RhdGUKKyAgIHRoYXQgaXQgaXMgc2FmZSB0byBkbyBzby4KKworICogTm90LXNvLXJlY2VudCByZXdyaXRlIG9mICJnaXQgYW0iIHRoYXQgc3RhcnRlZCBtYWtpbmcgaW50ZXJuYWwKKyAgIGNhbGxzIGludG8gdGhlIGNvbW1pdCBtYWNoaW5lcnkgaGFkIGFuIHVuaW50ZW5kZWQgcmVncmVzc2lvbiwgaW4KKyAgIHRoYXQgbm8gbWF0dGVyIGhvdyBtYW55IHNlY29uZHMgaXQgdG9vayB0byBhcHBseSBtYW55IHBhdGNoZXMsIHRoZQorICAgcmVzdWx0aW5nIGNvbW1pdHRlciB0aW1lc3RhbXAgZm9yIHRoZSByZXN1bHRpbmcgY29tbWl0cyB3ZXJlIGFsbAorICAgdGhlIHNhbWUuCisKKyAqICJnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2UiIGFscmVhZHkgaGFkIGVub3VnaCBsb2dpYyB0byBhbGxvdworICAgZW5zdXJpbmcgdGhhdCBzdWNoIGEgcHVzaCByZXN1bHRzIGluIGNyZWF0aW9uIG9mIGEgcmVmIChpLmUuIHRoZQorICAgcmVjZWl2aW5nIGVuZCBkaWQgbm90IGhhdmUgYW5vdGhlciBwdXNoIGZyb20gc2lkZXdheXMgdGhhdCB3b3VsZCBiZQorICAgZGlzY2FyZGVkIGJ5IG91ciBmb3JjZS1wdXNoaW5nKSwgYnV0IGRpZG4ndCBleHBvc2UgdGhpcyBwb3NzaWJpbGl0eQorICAgdG8gdGhlIHVzZXJzLiAgSXQgZG9lcyBzbyBub3cuCisgICAobWVyZ2UgOWVlZDRmMyBqay9wdXNoLWZvcmNlLXdpdGgtbGVhc2UtY3JlYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWVjaGFuaXNtIHRvIGxpbWl0IHRoZSBwYWNrIHdpbmRvdyBtZW1vcnkgc2l6ZSwgd2hlbiBwYWNraW5nIGlzCisgICBkb25lIHVzaW5nIG11bHRpcGxlIHRocmVhZHMgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgaXMgcGVyLXRocmVhZCwKKyAgIGJ1dCB0aGlzIHdhcyBub3QgZG9jdW1lbnRlZCBjbGVhcmx5LgorICAgKG1lcmdlIDk1NDE3NmMgbXMvZG9jdW1lbnQtcGFjay13aW5kb3ctbWVtb3J5LWlzLXBlci10aHJlYWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiaW1wb3J0LXRhcnMiIGZhc3QtaW1wb3J0IHNjcmlwdCAoaW4gY29udHJpYi8pIHVzZWQgdG8gaWdub3JlIGEKKyAgIGhhcmRsaW5rIHRhcmdldCBhbmQgcmVwbGFjZWQgaXQgd2l0aCBhbiBlbXB0eSBmaWxlLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkIHRvIHJlY29yZCB0aGUgc2FtZSBibG9iIGFzIHRoZSBvdGhlciBmaWxlIHRoZSBoYXJkbGluayBpcworICAgc2hhcmVkIHdpdGguCisgICAobWVyZ2UgMDRlMDg2OSBqcy9pbXBvcnQtdGFycy1oYXJkbGlua3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG12IGRpciBub24tZXhpc3RpbmctZGlyLyIgZGlkIG5vdCB3b3JrIGluIHNvbWUgZW52aXJvbm1lbnRzCisgICB0aGUgc2FtZSB3YXkgYXMgZXhpc3RpbmcgbWFpbnN0cmVhbSBwbGF0Zm9ybXMuICBUaGUgY29kZSBub3cgbW92ZXMKKyAgICJkaXIiIHRvICJub24tZXhpc3RpbmctZGlyIiwgd2l0aG91dCByZWx5aW5nIG9uIHJlbmFtZSgiQSIsICJCLyIpCisgICB0aGF0IHN0cmlwcyB0aGUgdHJhaWxpbmcgc2xhc2ggb2YgJy8nLgorICAgKG1lcmdlIDE4OWQwMzUganMvbXYtZGlyLXRvLW5ldy1kaXJlY3RvcnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgInQvIiBoaWVyYXJjaHkgaXMgcHJvbmUgdG8gZ2V0IGFuIHVudXN1YWwgcGF0aG5hbWU7ICJtYWtlIHRlc3QiCisgICBoYXMgYmVlbiB0YXVnaHQgdG8gbWFrZSBzdXJlIHRoZXkgZG8gbm90IGNvbnRhaW4gcGF0aHMgdGhhdCBjYW5ub3QKKyAgIGJlIGNoZWNrZWQgb3V0IG9uIFdpbmRvd3MgKGFuZCB0aGUgbWVjaGFuaXNtIGNhbiBiZSByZXVzYWJsZSB0bworICAgY2F0Y2ggcGF0aG5hbWVzIHRoYXQgYXJlIG5vdCBwb3J0YWJsZSB0byBvdGhlciBwbGF0Zm9ybXMgYXMgbmVlZAorICAgYXJpc2VzKS4KKyAgIChtZXJnZSBjMmNhZmQzIGpzL3Rlc3QtbGludC1wYXRobmFtZSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gImdpdCBtZXJnZS1yZWN1cnNpdmUiIHdvcmtzIG9uIGhpc3Rvcnkgd2l0aCBtYW55IGNyaXNzLWNyb3NzCisgICBtZXJnZXMgaW4gInZlcmJvc2UiIG1vZGUsIHRoZSBuYW1lcyB0aGUgY29tbWFuZCBhc3NpZ25zIHRvIHRoZQorICAgdmlydHVhbCBtZXJnZSBiYXNlcyBjb3VsZCBoYXZlIG92ZXJ3cml0dGVuIGVhY2ggb3RoZXIgYnkgdW5pbnRlbmRlZAorICAgcmV1c2Ugb2YgdGhlIHNhbWUgcGllY2Ugb2YgbWVtb3J5LgorICAgKG1lcmdlIDU0NDdhNzYgcnMvcHVsbC1zaWduZWQtdGFnIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVja291dCAtLWRldGFjaCA8YnJhbmNoPiIgdXNlZCB0byBnaXZlIHRoZSBzYW1lIGFkdmljZQorICAgbWVzc2FnZSBhcyB0aGF0IGlzIGlzc3VlZCB3aGVuICJnaXQgY2hlY2tvdXQgPHRhZz4iIChvciBhbnl0aGluZworICAgdGhhdCBpcyBub3QgYSBicmFuY2ggbmFtZSkgaXMgZ2l2ZW4sIGJ1dCBhc2tpbmcgd2l0aCAiLS1kZXRhY2giIGlzCisgICBhbiBleHBsaWNpdCBlbm91Z2ggc2lnbiB0aGF0IHRoZSB1c2VyIGtub3dzIHdoYXQgaXMgZ29pbmcgb24uICBUaGUKKyAgIGFkdmljZSBtZXNzYWdlIGhhcyBiZWVuIHNxdWVsY2hlZCBpbiB0aGlzIGNhc2UuCisgICAobWVyZ2UgNzc5Yjg4YSBzYi9jaGVja291dC1leHBsaXQtZGV0YWNoLW5vLWFkdmljZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZnRvb2wiIGJ5IGRlZmF1bHQgaWdub3JlcyB0aGUgZXJyb3IgZXhpdCBmcm9tIHRoZSBiYWNrZW5kCisgICBjb21tYW5kcyBpdCBzcGF3bnMsIGJlY2F1c2Ugb2Z0ZW4gdGhleSBzaWduYWwgdGhhdCB0aGV5IGZvdW5kCisgICBkaWZmZXJlbmNlcyBieSBleGl0aW5nIHdpdGggYSBub24temVybyBzdGF0dXMgY29kZSBqdXN0IGxpa2UgImRpZmYiCisgICBkb2VzOyB0aGUgZXhpdCBzdGF0dXMgY29kZXMgMTI2IGFuZCBhYm92ZSBob3dldmVyIGFyZSBzcGVjaWFsIGluCisgICB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gc2lnbmFsIHRoYXQgdGhlIGNvbW1hbmQgaXMgbm90IGV4ZWN1dGFibGUsCisgICBkb2VzIG5vdCBleGlzdCwgb3Iga2lsbGVkIGJ5IGEgc2lnbmFsLiAgImdpdCBkaWZmdG9vbCIgaGFzIGJlZW4KKyAgIHRhdWdodCB0byBub3RpY2UgdGhlc2UgZXhpdCBzdGF0dXMgY29kZXMuCisgICAobWVyZ2UgNDVhNGY1ZCBqay9kaWZmdG9vbC1jb21tYW5kLW5vdC1mb3VuZCBsYXRlciB0byBtYWludCkuCisKKyAqIE9uIFdpbmRvd3MsIGhlbHAuYnJvd3NlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHVzZWQgdG8gYmUgaWdub3JlZCwKKyAgIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA2ZGI1OTY3IGpzL25vLWh0bWwtYnlwYXNzLW9uLXdpbmRvd3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImdpdCAtYyB2YXJbPXZhbF0gY21kIiBmYWNpbGl0eSB0byBhcHBlbmQgYSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSBkZWZpbml0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaCBvcmRlciB3YXMgZGVzY3JpYmVkIGluCisgICBnaXQoMSkgbWFudWFsIHBhZ2UsIGJ1dCBub3QgaW4gZ2l0LWNvbmZpZygxKSwgd2hpY2ggd2FzIG1vcmUgbGlrZWx5CisgICBwbGFjZSBmb3IgcGVvcGxlIHRvIGxvb2sgZm9yIHdoZW4gdGhleSBhc2sgImNhbiBJIG1ha2UgYSBvbmUtc2hvdAorICAgb3ZlcnJpZGUsIGFuZCBpZiBzbyBob3c/IgorICAgKG1lcmdlIGFlMWY3MDkgZGcvZG9jdW1lbnQtZ2l0LWMtaW4tZ2l0LWNvbmZpZy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGVtcGZpbGUgKGhlbmNlIGl0cyB1c2VyIGxvY2tmaWxlKSBBUEkgbGV0cyB0aGUgY2FsbGVyIHRvIG9wZW4KKyAgIGEgZmlsZSBkZXNjcmlwdG9yIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIHdyaXRlIGludG8gaXQgYW5kIHRoZW4KKyAgIGZpbmFsaXplIGl0IGJ5IGZpcnN0IGNsb3NpbmcgdGhlIGZpbGVoYW5kbGUgYW5kIHRoZW4gZWl0aGVyCisgICByZW1vdmluZyBvciByZW5hbWluZyB0aGUgdGVtcG9yYXJ5IGZpbGUuICBXaGVuIHRoZSBwcm9jZXNzIHNwYXducyBhCisgICBzdWJwcm9jZXNzIGFmdGVyIG9idGFpbmluZyB0aGUgZmlsZSBkZXNjcmlwdG9yLCBhbmQgaWYgdGhlCisgICBzdWJwcm9jZXNzIGhhcyBub3QgZXhpdGVkIHdoZW4gdGhlIGF0dGVtcHQgdG8gcmVtb3ZlIG9yIHJlbmFtZSBpcworICAgbWFkZSwgdGhlIGxhc3Qgc3RlcCBmYWlscyBvbiBXaW5kb3dzLCBiZWNhdXNlIHRoZSBzdWJwcm9jZXNzIGhhcworICAgdGhlIGZpbGUgZGVzY3JpcHRvciBzdGlsbCBvcGVuLiAgT3BlbiB0ZW1wZmlsZSB3aXRoIE9fQ0xPRVhFQyBmbGFnCisgICB0byBhdm9pZCB0aGlzIChvbiBXaW5kb3dzLCB0aGlzIGlzIG1hcHBlZCB0byBPX05PSU5IRVJJVCkuCisgICAobWVyZ2UgMDVkMWVkNiBidy9taW5ndy1hdm9pZC1pbmhlcml0aW5nLWZkLXRvLWxvY2tmaWxlIGxhdGVyIHRvIG1haW50KS4KKworICogQ29ycmVjdCBhbiBhZ2Utb2xkIGNhbGNvIChpcyB0aGF0IGEgdHlwby1saWtlIHdvcmQgZm9yIGNhbGMpCisgICBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgIChtZXJnZSA3ODQxYzQ4IGxzL3BhY2tldC1saW5lLXByb3RvY29sLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBtaW5vciBjbGVhbi11cHMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcworICAgKG1lcmdlIDAyYThjZmEgcnMvbWVyZ2UtYWRkLXN0cmF0ZWdpZXMtc2ltcGxpZmljYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFmNDk0MWQgcnMvbWVyZ2UtcmVjdXJzaXZlLXN0cmluZy1saXN0LWluaXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDFlYjQ3ZjEgcnMvdXNlLXN0cmJ1Zi1hZGQtdW5pcXVlLWFiYnJldiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGRkMGJmYSBqay90aWdodGVuLWFsbG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlY2YzMGIyIHJzL21haWxpbmZvLWxpYiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGViNzVjZSBzZy9yZWZsb2ctcGFzdC1yb290IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0MzY5NTIzIGh2L2RvYy1jb21taXQtcmVmZXJlbmNlLXN0eWxlIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQ2MmY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjEudHh0CkBAIC0wLDAgKzEsMTMxIEBACitHaXQgdjIuMTAuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEwCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDbGFyaWZ5IHZhcmlvdXMgd2F5cyB0byBzcGVjaWZ5IHRoZSAicmV2aXNpb24gcmFuZ2VzIiBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24uCisKKyAqICJkaWZmLWhpZ2hsaWdodCIgc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0byB3b3JrIGJldHRlciB3aXRoCisgICAiZ2l0IGxvZyAtcCAtLWdyYXBoIiBvdXRwdXQuCisKKyAqIFRoZSB0ZXN0IGZyYW1ld29yayBsZWZ0IHRoZSBudW1iZXIgb2YgdGVzdHMgYW5kIHN1Y2Nlc3MvZmFpbHVyZQorICAgY291bnQgaW4gdGhlIHQvdGVzdC1yZXN1bHRzIGRpcmVjdG9yeSwga2V5ZWQgYnkgdGhlIG5hbWUgb2YgdGhlCisgICB0ZXN0IHNjcmlwdCBwbHVzIHRoZSBwcm9jZXNzIElELiAgVGhlIGxhdHRlciBob3dldmVyIHR1cm5lZCBvdXQgbm90CisgICB0byBzZXJ2ZSBhbnkgdXNlZnVsIHB1cnBvc2UuICBUaGUgcHJvY2VzcyBJRCBwYXJ0IG9mIHRoZSBmaWxlbmFtZQorICAgaGFzIGJlZW4gcmVtb3ZlZC4KKworICogSGF2aW5nIGEgc3VibW9kdWxlIHdob3NlICIuZ2l0IiByZXBvc2l0b3J5IGlzIHNvbWVob3cgY29ycnVwdAorICAgY2F1c2VkIGEgZmV3IGNvbW1hbmRzIHRoYXQgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgbG9vcCBmb3JldmVyLgorCisgKiAiZ2l0IHN5bWJvbGljLXJlZiAtZCBIRUFEIiBoYXBwaWx5IHJlbW92ZXMgdGhlIHN5bWJvbGljIHJlZiwgYnV0CisgICB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkgYmVjb21lcyBhbiBpbnZhbGlkIG9uZS4gIFRlYWNoIHRoZSBjb21tYW5kCisgICB0byBmb3JiaWQgcmVtb3ZhbCBvZiBIRUFELgorCisgKiBBIHRlc3Qgc3Bhd25lZCBhIHNob3J0LWxpdmVkIGJhY2tncm91bmQgcHJvY2Vzcywgd2hpY2ggc29tZXRpbWVzCisgICBwcmV2ZW50ZWQgdGhlIHRlc3QgZGlyZWN0b3J5IGZyb20gZ2V0dGluZyByZW1vdmVkIGF0IHRoZSBlbmQgb2YgdGhlCisgICBzY3JpcHQgb24gc29tZSBwbGF0Zm9ybXMuCisKKyAqIFVwZGF0ZSBhIGZldyB0ZXN0cyB0aGF0IHVzZWQgdG8gdXNlIEdJVF9DVVJMX1ZFUkJPU0UgdG8gdXNlIHRoZQorICAgbmV3ZXIgR0lUX1RSQUNFX0NVUkwuCisKKyAqIFVwZGF0ZSBKYXBhbmVzZSB0cmFuc2xhdGlvbiBmb3IgImdpdC1ndWkiLgorCisgKiAiZ2l0IGZldGNoIGh0dHA6Oi9zaXRlL3BhdGgiIGRpZCBub3QgZGllIGNvcnJlY3RseSBhbmQgc2VnZmF1bHRlZAorICAgaW5zdGVhZC4KKworICogImdpdCBjb21taXQtdHJlZSIgc3RvcHBlZCByZWFkaW5nIGNvbW1pdC5ncGdzaWduIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIHRoYXQgd2FzIG1lYW50IGZvciBQb3JjZWxhaW4gImdpdCBjb21taXQiIGluIEdpdCAyLjk7IHdlCisgICBmb3Jnb3QgdG8gdXBkYXRlICJnaXQgZ3VpIiB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHRvIG1hdGNoCisgICB0aGlzIGNoYW5nZS4KKworICogImdpdCBsb2cgLS1jaGVycnktcGljayIgdXNlZCB0byBpbmNsdWRlIG1lcmdlIGNvbW1pdHMgYXMgY2FuZGlkYXRlcworICAgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIG90aGVyIGNvbW1pdHMsIHJlc3VsdGluZyBhIGxvdCBvZiB3YXN0ZWQgdGltZS4KKyAgIFRoZSBwYXRjaC1pZCBnZW5lcmF0aW9uIGxvZ2ljIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaWdub3JlIG1lcmdlcyB0bworICAgYXZvaWQgdGhlIHdhc3RhZ2UuCisKKyAqIFRoZSBodHRwIHRyYW5zcG9ydCAod2l0aCBjdXJsLW11bHRpIG9wdGlvbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQKKyAgIHRoZXNlIGRheXMpIGZhaWxlZCB0byByZW1vdmUgY3VybC1lYXN5IGhhbmRsZSBmcm9tIGEgY3VybG0gc2Vzc2lvbiwKKyAgIHdoaWNoIGxlZCB0byB1bm5lY2Vzc2FyeSBBUEkgZmFpbHVyZXMuCisKKyAqICJnaXQgZGlmZiAtVyIgb3V0cHV0IG5lZWRzIHRvIGV4dGVuZCB0aGUgY29udGV4dCBiYWNrd2FyZCB0bworICAgaW5jbHVkZSB0aGUgaGVhZGVyIGxpbmUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gYW5kIGFsc28gZm9yd2FyZCB0bworICAgaW5jbHVkZSB0aGUgYm9keSBvZiB0aGUgZW50aXJlIGN1cnJlbnQgZnVuY3Rpb24gdXAgdG8gdGhlIGhlYWRlcgorICAgbGluZSBvZiB0aGUgbmV4dCBvbmUuICBUaGlzIHByb2Nlc3MgbWF5IGhhdmUgdG8gbWVyZ2UgdG8gYWRqYWNlbnQKKyAgIGh1bmtzLCBidXQgdGhlIGNvZGUgZm9yZ290IHRvIGRvIHNvIGluIHNvbWUgY2FzZXMuCisKKyAqIFBlcmZvcm1hbmNlIHRlc3RzIGRvbmUgdmlhICJ0L3BlcmYiIGRpZCBub3QgdXNlIHRoZSBzYW1lIHNldCBvZgorICAgYnVpbGQgY29uZmlndXJhdGlvbiBpZiB0aGUgdXNlciByZWxpZWQgb24gYXV0b2NvbmYgZ2VuZXJhdGVkCisgICBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWJhc2U9Li4uIiBmZWF0dXJlIHRoYXQgd2FzIHJlY2VudGx5IGFkZGVkCisgICBzaG93ZWQgdGhlIGJhc2UgY29tbWl0IGluZm9ybWF0aW9uIGFmdGVyICItLSAiIGUtbWFpbCBzaWduYXR1cmUKKyAgIGxpbmUsIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgaW5jb252ZW5pZW50LiAgVGhlIGJhc2UgaW5mb3JtYXRpb24KKyAgIGhhcyBiZWVuIG1vdmVkIGFib3ZlIHRoZSBzaWduYXR1cmUgbGluZS4KKworICogRXZlbiB3aGVuICJnaXQgcHVsbCAtLXJlYmFzZT1wcmVzZXJ2ZSIgKGFuZCB0aGUgdW5kZXJseWluZyAiZ2l0CisgICByZWJhc2UgLS1wcmVzZXJ2ZSIpIGNhbiBjb21wbGV0ZSB3aXRob3V0IGNyZWF0aW5nIGFueSBuZXcgY29tbWl0CisgICAoaS5lLiBmYXN0LWZvcndhcmRzKSwgaXQgc3RpbGwgaW5zaXN0ZWQgb24gaGF2aW5nIGEgdXNhYmxlIGlkZW50CisgICBpbmZvcm1hdGlvbiAocmVhZDogdXNlci5lbWFpbCBpcyBzZXQgY29ycmVjdGx5KSwgd2hpY2ggd2FzIGxlc3MKKyAgIHRoYW4gbmljZS4gIEFzIHRoZSB1bmRlcmx5aW5nIGNvbW1hbmRzIHVzZWQgaW5zaWRlICJnaXQgcmViYXNlIgorICAgd291bGQgZmFpbCB3aXRoIGEgbW9yZSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2UgYW5kIGFkdmljZSB0ZXh0CisgICB3aGVuIHRoZSBib2d1cyBpZGVudCBtYXR0ZXJzLCB0aGlzIGV4dHJhIGNoZWNrIHdhcyByZW1vdmVkLgorCisgKiAiZ2l0IGdjIC0tYWdncmVzc2l2ZSIgdXNlZCB0byBsaW1pdCB0aGUgZGVsdGEtY2hhaW4gbGVuZ3RoIHRvIDI1MCwKKyAgIHdoaWNoIGlzIHdheSB0b28gZGVlcCBmb3IgZ2FpbmluZyBhZGRpdGlvbmFsIHNwYWNlIHNhdmluZ3MgYW5kIGlzCisgICBkZXRyaW1lbnRhbCBmb3IgcnVudGltZSBwZXJmb3JtYW5jZS4gIFRoZSBsaW1pdCBoYXMgYmVlbiByZWR1Y2VkIHRvCisgICA1MC4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0byBjb250cm9sIHVzZQorICAgb2YgY29sb3IgKGxpa2UgYGNvbG9yLmdyZXBgKSBzYWlkIHRoYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZSBpcworICAgJ2ZhbHNlJywgaW5zdGVhZCBvZiBzYXlpbmcgdGhlaXIgZGVmYXVsdCBpcyB0YWtlbiBmcm9tIGBjb2xvci51aWAuCisgICBXaGVuIHdlIHVwZGF0ZWQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGNvbG9yLnVpIGZyb20gJ2ZhbHNlJyB0bworICAgJ2F1dG8nIHF1aXRlIGEgd2hpbGUgYWdvLCBhbGwgb2YgdGhlbSBicm9rZS4gIFRoaXMgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogQSBzaGVsbCBzY3JpcHQgZXhhbXBsZSBpbiBjaGVjay1yZWYtZm9ybWF0IGRvY3VtZW50YXRpb24gaGFzIGJlZW4KKyAgIGZpeGVkLgorCisgKiAiZ2l0IGNoZWNrb3V0IDx3b3JkPiIgZG9lcyBub3QgZm9sbG93IHRoZSB1c3VhbCBkaXNhbWJpZ3VhdGlvbgorICAgcnVsZXMgd2hlbiB0aGUgPHdvcmQ+IGNhbiBiZSBib3RoIGEgcmV2IGFuZCBhIHBhdGgsIHRvIGFsbG93CisgICBjaGVja2luZyBvdXQgYSBicmFuY2ggJ2ZvbycgaW4gYSBwcm9qZWN0IHRoYXQgaGFwcGVucyB0byBoYXZlIGEKKyAgIGZpbGUgJ2ZvbycgaW4gdGhlIHdvcmtpbmcgdHJlZSB3aXRob3V0IGhhdmluZyB0byBkaXNhbWJpZ3VhdGUuCisgICBUaGlzIHdhcyBwb29ybHkgZG9jdW1lbnRlZCBhbmQgdGhlIGNoZWNrIHdhcyBpbmNvcnJlY3Qgd2hlbiB0aGUKKyAgIGNvbW1hbmQgd2FzIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgKiBTb21lIGNvZGVwYXRocyBpbiAiZ2l0IGRpZmYiIHVzZWQgcmVnZXhlYygzKSBvbiBhIGJ1ZmZlciB0aGF0IHdhcworICAgbW1hcCgyKWVkLCB3aGljaCBtYXkgbm90IGhhdmUgYSB0ZXJtaW5hdGluZyBOVUwsIGxlYWRpbmcgdG8gYSByZWFkCisgICBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbWFwcGVkIHJlZ2lvbi4gIFRoaXMgd2FzIGZpeGVkIGJ5IGludHJvZHVjaW5nCisgICBhIHJlZ2V4ZWNfYnVmKCkgaGVscGVyIHRoYXQgdGFrZXMgYSA8cHRyLGxlbj4gcGFpciB3aXRoIFJFR19TVEFSVEVORAorICAgZXh0ZW5zaW9uLgorCisgKiBUaGUgcHJvY2VkdXJlIHRvIGJ1aWxkIEdpdCBvbiBNYWMgT1MgWCBmb3IgVHJhdmlzIENJIGhhcmRjb2RlZCB0aGUKKyAgIGludGVybmFsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2UgYXNzdW1lZCBIb21lQnJldyB1c2VzLCB3aGljaCB3YXMgYQorICAgbm8tbm8uICBUaGUgcHJvY2VkdXJlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYXNrIEhvbWVCcmV3IHRoaW5ncyB3ZQorICAgbmVlZCB0byBrbm93IHRvIGZpeCB0aGlzLgorCisgKiBXaGVuICJnaXQgcmViYXNlIC1pIiBpcyBnaXZlbiBhIGJyb2tlbiBpbnN0cnVjdGlvbiwgaXQgdG9sZCB0aGUKKyAgIHVzZXIgdG8gZml4IGl0IHdpdGggIi0tZWRpdC10b2RvIiwgYnV0IGRpZG4ndCBzYXkgd2hhdCB0aGUgc3RlcAorICAgYWZ0ZXIgdGhhdCB3YXMgKGkuZS4gIi0tY29udGludWUiKS4KKworICogImdpdCBhZGQgLS1jaG1vZD0reCIgYWRkZWQgcmVjZW50bHkgbGFja2VkIGRvY3VtZW50YXRpb24sIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYWRkIC0tY2htb2Q9K3ggPHBhdGhzcGVjPiIgYWRkZWQgcmVjZW50bHkgb25seSB0b2dnbGVkIHRoZQorICAgZXhlY3V0YWJsZSBiaXQgZm9yIHBhdGhzIHRoYXQgYXJlIGVpdGhlciBuZXcgb3IgbW9kaWZpZWQuIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZCB0byBmbGlwIHRoZSBleGVjdXRhYmxlIGJpdCBmb3IgYWxsIHBhdGhzIHRoYXQgbWF0Y2gKKyAgIHRoZSBnaXZlbiBwYXRoc3BlYy4KKworICogImdpdCBwYWNrLW9iamVjdHMgLS1pbmNsdWRlLXRhZyIgd2FzIHRhdWdodCB0aGF0IHdoZW4gd2Uga25vdyB0aGF0CisgICB3ZSBhcmUgc2VuZGluZyBhbiBvYmplY3QgQywgd2Ugd2FudCBhIHRhZyBCIHRoYXQgZGlyZWN0bHkgcG9pbnRzIGF0CisgICBDIGJ1dCBhbHNvIGEgdGFnIEEgdGhhdCBwb2ludHMgYXQgdGhlIHRhZyBCLiAgV2UgdXNlZCB0byBtaXNzIHRoZQorICAgaW50ZXJtZWRpYXRlIHRhZyBCIGluIHNvbWUgY2FzZXMuCisKKyAqIERvY3VtZW50YXRpb24gYXJvdW5kIHRvb2xzIHRvIGltcG9ydCBmcm9tIENWUyB3YXMgZmFpcmx5IG91dGRhdGVkLgorCisgKiBJbiB0aGUgY29kZXBhdGggdGhhdCBjb21lcyB1cCB3aXRoIHRoZSBob3N0bmFtZSB0byBiZSB1c2VkIGluIGFuCisgICBlLW1haWwgd2hlbiB0aGUgdXNlciBkaWRuJ3QgdGVsbCB1cywgd2UgbG9va2VkIGF0IGFpX2Nhbm9ubmFtZQorICAgZmllbGQgaW4gc3RydWN0IGFkZHJpbmZvIHdpdGhvdXQgbWFraW5nIHN1cmUgaXQgaXMgbm90IE5VTEwgZmlyc3QuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJkMzMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjIudHh0CkBAIC0wLDAgKzEsMTExIEBACitHaXQgdjIuMTAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEwLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGNvZGUgdGhhdCBwYXJzZXMgdGhlIGZvcm1hdCBwYXJhbWV0ZXIgb2YgZm9yLWVhY2gtcmVmIGNvbW1hbmQKKyAgIGhhcyBzZWVuIGEgbWljcm8tb3B0aW1pemF0aW9uLgorCisgKiBUaGUgImdyYXBoIiBBUEkgdXNlZCBpbiAiZ2l0IGxvZyAtLWdyYXBoIiBtaXNjb3VudGVkIHRoZSBudW1iZXIgb2YKKyAgIG91dHB1dCBjb2x1bW5zIGNvbnN1bWVkIHNvIGZhciB3aGVuIGRyYXdpbmcgYSBwYWRkaW5nIGxpbmUsIHdoaWNoCisgICBoYXMgYmVlbiBmaXhlZDsgdGhpcyBkaWQgbm90IGFmZmVjdCBhbnkgZXhpc3RpbmcgY29kZSBhcyBub2JvZHkKKyAgIHRyaWVkIHRvIHdyaXRlIGFueXRoaW5nIGFmdGVyIHRoZSBwYWRkaW5nIG9uIHN1Y2ggYSBsaW5lLCB0aG91Z2guCisKKyAqIEFsbW9zdCBldmVyeWJvZHkgdXNlcyBERUZBVUxUX0FCQlJFViB0byByZWZlciB0byB0aGUgZGVmYXVsdAorICAgc2V0dGluZyBmb3IgdGhlIGFiYnJldmlhdGlvbiwgYnV0ICJnaXQgYmxhbWUiIHBlZWtlZCBpbnRvCisgICB1bmRlcmx5aW5nIHZhcmlhYmxlIGJ5cGFzc2luZyB0aGUgbWFjcm8gZm9yIG5vIGdvb2QgcmVhc29uLgorCisgKiBEb2MgdXBkYXRlIHRvIGNsYXJpZnkgd2hhdCAibG9nIC0zIC0tcmV2ZXJzZSIgZG9lcy4KKworICogQW4gYXV0aG9yIG5hbWUsIHRoYXQgc3BlbGxlZCBhIGJhY2tzbGFzaC1xdW90ZWQgZG91YmxlIHF1b3RlIGluIHRoZQorICAgaHVtYW4gcmVhZGFibGUgcGFydCAiTXkgXCJkb3VibGUgcXVvdGVkXCIgbmFtZSIsIHdhcyBub3QgdW5xdW90ZWQKKyAgIGNvcnJlY3RseSB3aGlsZSBhcHBseWluZyBhIHBhdGNoIGZyb20gYSBwaWVjZSBvZiBlLW1haWwuCisKKyAqIFRoZSBvcmlnaW5hbCBjb21tYW5kIGxpbmUgc3ludGF4IGZvciAiZ2l0IG1lcmdlIiwgd2hpY2ggd2FzICJnaXQKKyAgIG1lcmdlIDxtc2c+IEhFQUQgPHBhcmVudD4uLi4iLCBoYXMgYmVlbiBkZXByZWNhdGVkIGZvciBxdWl0ZSBzb21lCisgICB0aW1lLCBhbmQgImdpdCBndWkiIHdhcyB0aGUgbGFzdCBpbi10cmVlIHVzZXIgb2YgdGhlIHN5bnRheC4gIFRoaXMKKyAgIGlzIGZpbmFsbHkgZml4ZWQsIHNvIHRoYXQgd2UgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBkZXByZWNhdGlvbi4KKworICogQ29kZXBhdGhzIHRoYXQgcmVhZCBmcm9tIGFuIG9uLWRpc2sgbG9vc2Ugb2JqZWN0IHdlcmUgdG9vIGxvb3NlIGluCisgICB2YWxpZGF0aW5nIHdoYXQgdGhleSBhcmUgcmVhZGluZyBpcyBhIHByb3BlciBvYmplY3QgZmlsZSBhbmQKKyAgIHNvbWV0aW1lcyByZWFkIHBhc3QgdGhlIGRhdGEgdGhleSByZWFkIGZyb20gdGhlIGRpc2ssIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuICBIL3QgdG8gR3VzdGF2byBHcmllY28gZm9yIHJlcG9ydGluZy4KKworICogImdpdCB3b3JrdHJlZSIsIGV2ZW4gdGhvdWdoIGl0IHVzZWQgdGhlIGRlZmF1bHRfYWJicmV2IHNldHRpbmcgdGhhdAorICAgb3VnaHQgdG8gYmUgYWZmZWN0ZWQgYnkgY29yZS5hYmJyZXYgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgaWdub3JlZAorICAgdGhlIHZhcmlhYmxlIHNldHRpbmcuICBUaGUgY29tbWFuZCBoYXMgYmVlbiB0YXVnaHQgdG8gcmVhZCB0aGUKKyAgIGRlZmF1bHQgc2V0IG9mIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRvIGNvcnJlY3QgdGhpcy4KKworICogQSBsb3ctbGV2ZWwgZnVuY3Rpb24gdmVyaWZ5X3BhY2tmaWxlKCkgd2FzIG1lYW50IHRvIHNob3cgZXJyb3JzCisgICB0aGF0IHdlcmUgZGV0ZWN0ZWQgd2l0aG91dCBkeWluZyBpdHNlbGYsIGJ1dCB1bmRlciBzb21lIGNvbmRpdGlvbnMKKyAgIGl0IGRpZG4ndCBhbmQgZGllZCBpbnN0ZWFkLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogV2hlbiAiZ2l0IGZldGNoIiB0cmllcyB0byBmaW5kIHdoZXJlIHRoZSBoaXN0b3J5IG9mIHRoZSByZXBvc2l0b3J5CisgICBpdCBydW5zIGluIGhhcyBkaXZlcmdlZCBmcm9tIHdoYXQgdGhlIG90aGVyIHNpZGUgaGFzLCBpdCBoYXMgYQorICAgbWVjaGFuaXNtIHRvIGF2b2lkIGRpZ2dpbmcgdG9vIGRlZXAgaW50byBpcnJlbGV2YW50IHNpZGUgYnJhbmNoZXMuCisgICBUaGlzIGhvd2V2ZXIgZGlkIG5vdCB3b3JrIHdlbGwgb3ZlciB0aGUgInNtYXJ0LWh0dHAiIHRyYW5zcG9ydCBkdWUKKyAgIHRvIGEgZGVzaWduIGJ1Zywgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFdoZW4gd2Ugc3RhcnRlZCBjVVJMIHRvIHRhbGsgdG8gaW1hcCBzZXJ2ZXIgd2hlbiBhIG5ldyBlbm91Z2gKKyAgIHZlcnNpb24gb2YgY1VSTCBsaWJyYXJ5IGlzIGF2YWlsYWJsZSwgd2UgZm9yZ290IHRvIGV4cGxpY2l0bHkgYWRkCisgICBpbWFwKHMpOi8vIGJlZm9yZSB0aGUgZGVzdGluYXRpb24uICBUbyBzb21lIGZvbGtzLCB0aGF0IGRpZG4ndCB3b3JrCisgICBhbmQgdGhlIGxpYnJhcnkgdHJpZWQgdG8gbWFrZSBIVFRQKHMpIHJlcXVlc3RzIGluc3RlYWQuCisKKyAqIFRoZSAuL2NvbmZpZ3VyZSBzY3JpcHQgZ2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIHdhcyB0YXVnaHQgaG93CisgICB0byBkZXRlY3Qgc3VwcG9ydCBvZiBTU0wgYnkgbGliY3VybCBiZXR0ZXIuCisKKyAqIGh0dHAuZW1wdHlhdXRoIGNvbmZpZ3VyYXRpb24gaXMgYSB3YXkgdG8gYWxsb3cgYW4gZW1wdHkgdXNlcm5hbWUgdG8KKyAgIHBhc3Mgd2hlbiBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZSB1c2luZyBtZWNoYW5pc21zIGxpa2UKKyAgIEtlcmJlcm9zLiAgV2UgdG9vayBhbiB1bnNwZWNpZmllZCAoTlVMTCkgdXNlcm5hbWUgYW5kIHNlbnQgIjoiCisgICAoaS5lLiBubyB1c2VybmFtZSwgbm8gcGFzc3dvcmQpIHRvIENVUkxPUFRfVVNFUlBXRCwgYnV0IGRpZCBub3QgZG8KKyAgIHRoZSBzYW1lIHdoZW4gdGhlIHVzZXJuYW1lIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGFuIGVtcHR5IHN0cmluZy4KKworICogImdpdCBjbG9uZSIgb2YgYSBsb2NhbCByZXBvc2l0b3J5IGNhbiBiZSBkb25lIGF0IHRoZSBmaWxlc3lzdGVtCisgICBsZXZlbCwgYnV0IHRoZSBjb2RlcGF0aCBkaWQgbm90IGNoZWNrIGVycm9ycyB3aGlsZSBjb3B5aW5nIGFuZAorICAgYWRqdXN0aW5nIHRoZSBmaWxlIHRoYXQgbGlzdHMgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMuCisKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgY29tbWl0IiB3YXMgdXBkYXRlZCB0byBjbGFyaWZ5IHRoYXQgImNvbW1pdAorICAgLXAgPHBhdGhzPiIgYWRkcyB0byB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgaW5kZXggdG8gY29tZSB1cAorICAgd2l0aCB3aGF0IHRvIGNvbW1pdC4KKworICogQSBzdHJheSBzeW1ib2xpYyBsaW5rIGluICRHSVRfRElSL3JlZnMvIGRpcmVjdG9yeSBjb3VsZCBtYWtlIG5hbWUKKyAgIHJlc29sdXRpb24gbG9vcCBmb3JldmVyLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSAic3VibW9kdWxlLjxuYW1lPi5wYXRoIiBzdG9yZWQgaW4gLmdpdG1vZHVsZXMgaXMgbmV2ZXIgY29waWVkCisgICB0byAuZ2l0L2NvbmZpZyBhbmQgc3VjaCBhIGtleSBpbiAuZ2l0L2NvbmZpZyBoYXMgbm8gbWVhbmluZywgYnV0CisgICB0aGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliZWQgaXQgYW5kIHN1Ym1vZHVsZS48bmFtZT4udXJsIG5leHQgdG8KKyAgIGVhY2ggb3RoZXIgYXMgaWYgYm90aCBiZWxvbmcgdG8gLmdpdC9jb25maWcuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiBSZWNlbnQgZ2l0IGFsbG93cyBzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaCB0byB1c2UgYSBzcGVjaWFsIHRva2VuCisgICAiLiIgaW5zdGVhZCBvZiB0aGUgYnJhbmNoIG5hbWU7IHRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQKKyAgIHRvIGRlc2NyaWJlIGl0LgorCisgKiBJbiBhIHdvcmt0cmVlIGNvbm5lY3RlZCB0byBhIHJlcG9zaXRvcnkgZWxzZXdoZXJlLCBjcmVhdGVkIHZpYSAiZ2l0CisgICB3b3JrdHJlZSIsICJnaXQgY2hlY2tvdXQiIGF0dGVtcHRzIHRvIHByb3RlY3QgdXNlcnMgZnJvbSBjb25mdXNpb24KKyAgIGJ5IHJlZnVzaW5nIHRvIGNoZWNrIG91dCBhIGJyYW5jaCB0aGF0IGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4KKyAgIGFub3RoZXIgd29ya3RyZWUuICBIb3dldmVyLCB0aGlzIGFsc28gcHJldmVudGVkIGNoZWNraW5nIG91dCBhCisgICBicmFuY2gsIHdoaWNoIGlzIGRlc2lnbmF0ZWQgYXMgdGhlIHByaW1hcnkgYnJhbmNoIG9mIGEgYmFyZQorICAgcmVwb3NpdG9yeSwgaW4gYSB3b3JrdHJlZSB0aGF0IGlzIGNvbm5lY3RlZCB0byB0aGUgYmFyZQorICAgcmVwb3NpdG9yeS4gIFRoZSBjaGVjayBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gYWxsb3cgaXQuCisKKyAqICJnaXQgcmViYXNlIiBpbW1lZGlhdGVseSBhZnRlciAiZ2l0IGNsb25lIiBmYWlsZWQgdG8gZmluZCB0aGUgZm9yaworICAgcG9pbnQgZnJvbSB0aGUgdXBzdHJlYW0uCisKKyAqIFdoZW4gZmV0Y2hpbmcgZnJvbSBhIHJlbW90ZSB0aGF0IGhhcyBtYW55IHRhZ3MgdGhhdCBhcmUgaXJyZWxldmFudAorICAgdG8gYnJhbmNoZXMgd2UgYXJlIGZvbGxvd2luZywgd2UgdXNlZCB0byB3YXN0ZSB3YXkgdG9vIG1hbnkgY3ljbGVzCisgICB3aGVuIGNoZWNraW5nIGlmIHRoZSBvYmplY3QgcG9pbnRlZCBhdCBieSBhIHRhZyAodGhhdCB3ZSBhcmUgbm90CisgICBnb2luZyB0byBmZXRjaCEpIGV4aXN0cyBpbiBvdXIgcmVwb3NpdG9yeSB0b28gY2FyZWZ1bGx5LgorCisgKiBUaGUgVHJhdmlzIENJIGNvbmZpZ3VyYXRpb24gd2Ugc2hpcCByYW4gdGhlIHRlc3RzIHdpdGggLS12ZXJib3NlCisgICBvcHRpb24gYnV0IHRoaXMgcmlza3Mgbm9uLVRBUCBvdXRwdXQgdGhhdCBoYXBwZW5zIHRvIGJlICJvayIgdG8gYmUKKyAgIG1pc2ludGVycHJldGVkIGFzIFRBUCBzaWduYWxsaW5nIGEgdGVzdCB0aGF0IHBhc3NlZC4gIFRoaXMgcmVzdWx0ZWQKKyAgIGluIHVubmVjZXNzYXJ5IGZhaWx1cmUuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBieSBpbnRyb2R1Y2luZyBhCisgICBuZXcgbW9kZSB0byBydW4gb3VyIHRlc3RzIGluIHRoZSB0ZXN0IGhhcm5lc3MgdG8gc2VuZCB0aGUgdmVyYm9zZQorICAgb3V0cHV0IHNlcGFyYXRlbHkgdG8gdGhlIGxvZyBmaWxlLgorCisgKiBTb21lIEFzY2lpRG9jIGZvcm1hdHRlciBtaXNoYW5kbGVzIGEgZGlzcGxheWVkIGlsbHVzdHJhdGlvbiB3aXRoCisgICB0YWJzIGluIGl0LiAgQWRqdXN0IGEgZmV3IG9mIHRoZW0gaW4gbWVyZ2UtYmFzZSBkb2N1bWVudGF0aW9uIHRvCisgICB3b3JrIGFyb3VuZCB0aGVtLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2YTAxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4zLnR4dApAQCAtMCwwICsxLDU1IEBACitHaXQgdjIuMTAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEwLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogRXh0cmFjdCBhIHNtYWxsIGhlbHBlciBvdXQgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgcmVhZHMgdGhlIGF1dGhvcnMKKyAgIHNjcmlwdCBmaWxlICJnaXQgYW0iIGludGVybmFsbHkgdXNlcy4KKyAgIFRoaXMgYnkgaXRzZWxmIGlzIG5vdCB1c2VmdWwgdW50aWwgYSBzZWNvbmQgY2FsbGVyIGFwcGVhcnMgaW4gdGhlCisgICBmdXR1cmUgZm9yICJyZWJhc2UgLWkiIGhlbHBlci4KKworICogVGhlIGNvbW1hbmQtbGluZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8KKyAgIGNvbXBsZXRlICJnaXQgY21kIF5tYXM8SFQ+IiB0byBjb21wbGV0ZSB0aGUgbmVnYXRpdmUgZW5kIG9mCisgICByZWZlcmVuY2UgdG8gImdpdCBjbWQgXm1hc3RlciIuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgYXR0ZW1wdHMgdG8gcGljayB1cCB2YWxpZCBlLW1haWxzIGZyb20gdGhlCisgICB0cmFpbGVycywgYnV0IHBlb3BsZSBpbiByZWFsIHdvcmxkIHdyaXRlIG5vbi1hZGRyZXNzZXMgdGhlcmUsIGxpa2UKKyAgICJDYzogU3RhYmxlIDxhZGRAcmUuc3M+ICMgNC44KyIsIHdoaWNoIGJyb2tlIHRoZSBvdXRwdXQgZGVwZW5kaW5nCisgICBvbiB0aGUgYXZhaWxhYmlsaXR5IGFuZCB2aW50YWdlIG9mIE1haWw6OkFkZHJlc3MgcGVybCBtb2R1bGUuCisKKyAqIFRoZSBjb2RlIHRoYXQgd2UgaGF2ZSB1c2VkIGZvciB0aGUgcGFzdCAxMCsgeWVhcnMgdG8gY3ljbGUKKyAgIDQtZWxlbWVudCByaW5nIGJ1ZmZlcnMgdHVybnMgb3V0IHRvIGJlIG5vdCBxdWl0ZSBwb3J0YWJsZSBpbgorICAgdGhlb3JldGljYWwgd29ybGQuCisKKyAqICJnaXQgZGFlbW9uIiB1c2VkIGZpeGVkLWxlbmd0aCBidWZmZXJzIHRvIHR1cm4gVVJMIHRvIHRoZQorICAgcmVwb3NpdG9yeSB0aGUgY2xpZW50IGFza2VkIGZvciBpbnRvIHRoZSBzZXJ2ZXIgc2lkZSBkaXJlY3RvcnkKKyAgIHBhdGgsIHVzaW5nIHNucHJpbnRmKCkgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgdGhlc2UgYnVmZmVycywgYnV0CisgICBhbGxvd2VkIHBvc3NpYmx5IHRydW5jYXRlZCBwYXRocyB0byB0aGUgZGlyZWN0b3J5LiAgVGhpcyBoYXMgYmVlbgorICAgdGlnaHRlbmVkIHRvIHJlamVjdCBzdWNoIGEgcmVxdWVzdCB0aGF0IGNhdXNlcyBvdmVybG9uZyBwYXRoIHRvIGJlCisgICByZXF1aXJlZCB0byBzZXJ2ZS4KKworICogUmVjZW50IHVwZGF0ZSB0byBnaXQtc2gtc2V0dXAgKGEgbGlicmFyeSBvZiBzaGVsbCBmdW5jdGlvbnMgdGhhdAorICAgYXJlIHVzZWQgYnkgb3VyIGluLXRyZWUgc2NyaXB0ZWQgUG9yY2VsYWluIGNvbW1hbmRzKSBpbmNsdWRlZAorICAgYW5vdGhlciBzaGVsbCBsaWJyYXJ5IGdpdC1zaC1pMThuIHdpdGhvdXQgc3BlY2lmeWluZyB3aGVyZSBpdCBpcywKKyAgIHJlbHlpbmcgb24gdGhlICRQQVRILiAgVGhpcyBoYXMgYmVlbiBmaXhlZCB0byBiZSBtb3JlIGV4cGxpY2l0IGJ5CisgICBwcmVmaXhpbmcgJChnaXQgLS1leGVjLXBhdGgpIG91dHB1dCBpbiBmcm9udC4KKworICogRml4IGZvciBhIHJhY3kgZmFsc2UtcG9zaXRpdmUgdGVzdCBmYWlsdXJlLgorCisgKiBQb3J0YWJpbGl0eSB1cGRhdGUgYW5kIHdvcmthcm91bmQgZm9yIGJ1aWxkcyBvbiByZWNlbnQgTWFjIE9TIFguCisKKyAqIFVwZGF0ZSB0byB0aGUgdGVzdCBmcmFtZXdvcmsgbWFkZSBpbiAyLjkgdGltZWZyYW1lIGJyb2tlIHJ1bm5pbmcKKyAgIHRoZSB0ZXN0cyB1bmRlciB2YWxncmluZCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEltcHJvdmUgdGhlIHJ1bGUgdG8gY29udmVydCAidW5zaWduZWQgY2hhciBbMjBdIiBpbnRvICJzdHJ1Y3QKKyAgIG9iamVjdF9pZCAqIiBpbiBjb250cmliL2NvY2NpbmVsbGUvCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTgxNDJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjQudHh0CkBAIC0wLDAgKzEsNCBAQAorR2l0IHYyLjEwLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgZm9yd2FyZC1wb3J0cyB0aGUgZml4IGZvciAic3NoOi8vLi4uIiBVUkwgZnJvbSBHaXQgdjIuNy42CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5OGZkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC41LnR4dApAQCAtMCwwICsxLDE3IEBACitHaXQgdjIuMTAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEwLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjdnNzZXJ2ZXIiIG5vIGxvbmdlciBpcyBpbnZva2VkIGJ5ICJnaXQgZGFlbW9uIiBieSBkZWZhdWx0LAorICAgYXMgaXQgaXMgb2xkIGFuZCBsYXJnZWx5IHVubWFpbnRhaW5lZC4KKworICogVmFyaW91cyBQZXJsIHNjcmlwdHMgZGlkIG5vdCB1c2Ugc2FmZV9waXBlX2NhcHR1cmUoKSBpbnN0ZWFkIG9mCisgICBiYWNrdGlja3MsIGxlYXZpbmcgdGhlbSBzdXNjZXB0aWJsZSB0byBlbmQtdXNlciBpbnB1dC4gIFRoZXkgaGF2ZQorICAgYmVlbiBjb3JyZWN0ZWQuCisKK0NyZWRpdHMgZ28gdG8gam9lcm5jaGVuIDxqb2VybmNoZW5AcGhlbm9lbGl0LmRlPiBmb3IgZmluZGluZyB0aGUKK3Vuc2FmZSBjb25zdHJ1Y3RzIGluICJnaXQgY3Zzc2VydmVyIiwgYW5kIHRvIEplZmYgS2luZyBhdCBHaXRIdWIgZm9yCitmaW5kaW5nIGFuZCBmaXhpbmcgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGlzc3VlIGluIG90aGVyIHNjcmlwdHMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I3ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjAudHh0CkBAIC0wLDAgKzEsNTkzIEBACitHaXQgMi4xMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMuCisKKyAqIEFuIGVtcHR5IHN0cmluZyB1c2VkIGFzIGEgcGF0aHNwZWMgZWxlbWVudCBoYXMgYWx3YXlzIG1lYW50CisgICAnZXZlcnl0aGluZyBtYXRjaGVzJywgYnV0IGl0IGlzIHRvbyBlYXN5IHRvIHdyaXRlIGEgc2NyaXB0IHRoYXQKKyAgIGZpbmRzIGEgcGF0aCB0byByZW1vdmUgaW4gJHBhdGggYW5kIHJ1biAnZ2l0IHJtICIkcGFodCInIGJ5CisgICBtaXN0YWtlICh3aGVuIHRoZSB1c2VyIG1lYW50IHRvIGdpdmUgIiRwYXRoIiksIHdoaWNoIGVuZHMgdXAKKyAgIHJlbW92aW5nIGV2ZXJ5dGhpbmcuICBUaGlzIHJlbGVhc2Ugc3RhcnRzIHdhcm5pbmcgYWJvdXQgdGhlCisgICB1c2Ugb2YgYW4gZW1wdHkgc3RyaW5nIHRoYXQgaXMgdXNlZCBmb3IgJ2V2ZXJ5dGhpbmcgbWF0Y2hlcycgYW5kCisgICBhc2tzIHVzZXJzIHRvIHVzZSBhIG1vcmUgZXhwbGljaXQgJy4nIGZvciB0aGF0IGluc3RlYWQuCisKKyAgIFRoZSBob3BlIGlzIHRoYXQgZXhpc3RpbmcgdXNlcnMgd2lsbCBub3QgbWluZCB0aGlzIGNoYW5nZSwgYW5kCisgICBldmVudHVhbGx5IHRoZSB3YXJuaW5nIGNhbiBiZSB0dXJuZWQgaW50byBhIGhhcmQgZXJyb3IsIHVwZ3JhZGluZworICAgdGhlIGRlcHJlY2F0aW9uIGludG8gcmVtb3ZhbCBvZiB0aGlzIChtaXMpZmVhdHVyZS4KKworICogVGhlIGhpc3RvcmljYWwgYXJndW1lbnQgb3JkZXIgImdpdCBtZXJnZSA8bXNnPiBIRUFEIDxjb21taXQ+Li4uIgorICAgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgcXVpdGUgc29tZSB0aW1lLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZQorICAgbmV4dCByZWxlYXNlIChub3QgdGhpcyBvbmUpLgorCisgKiBUaGUgZGVmYXVsdCBhYmJyZXZpYXRpb24gbGVuZ3RoLCB3aGljaCBoYXMgaGlzdG9yaWNhbGx5IGJlZW4gNywgbm93CisgICBzY2FsZXMgYXMgdGhlIHJlcG9zaXRvcnkgZ3Jvd3MsIHVzaW5nIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YKKyAgIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkgYW5kIGEgYml0IG9mIG1hdGggYXJvdW5kIHRoZSBiaXJ0aGRheQorICAgcGFyYWRveC4gIFRoZSBsb2dpYyBzdWdnZXN0cyB0byB1c2UgMTIgaGV4ZGlnaXRzIGZvciB0aGUgTGludXgKKyAgIGtlcm5lbCwgYW5kIDkgdG8gMTAgZm9yIEdpdCBpdHNlbGYuCisKKworVXBkYXRlcyBzaW5jZSB2Mi4xMAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQ29tZXMgd2l0aCBuZXcgdmVyc2lvbiBvZiBnaXQtZ3VpLCBub3cgYXQgaXRzIDAuMjEuMCB0YWcuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIEhFQUReIiB0byBmb3JtYXQgYSBzaW5nbGUgcGF0Y2gKKyAgIHdpdGggYSBzZXBhcmF0ZSBjb3ZlciBsZXR0ZXIgbm93IG51bWJlcnMgdGhlIG91dHB1dCBhcyBbUEFUQ0ggMC8xXQorICAgYW5kIFtQQVRDSCAxLzFdIGJ5IGRlZmF1bHQuCisKKyAqIEFuIGluY29taW5nICJnaXQgcHVzaCIgdGhhdCBhdHRlbXB0cyB0byBwdXNoIHRvbyBtYW55IGJ5dGVzIGNhbiBub3cKKyAgIGJlIHJlamVjdGVkIGJ5IHNldHRpbmcgYSBuZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhdCB0aGUgcmVjZWl2aW5nCisgICBlbmQuCisKKyAqICJnaXQgbm9zdWNoY29tbWFuZCAtLWhlbHAiIHNhaWQgIk5vIG1hbnVhbCBlbnRyeSBmb3IgZ2l0bm9zdWNoY29tbWFuZCIsCisgICB3aGljaCB3YXMgbm90IGludHVpdGl2ZSwgZ2l2ZW4gdGhhdCAiZ2l0IG5vc3VjaGNvbW1hbmQiIHNhaWQgImdpdDoKKyAgICdub3N1Y2hjb21tYW5kJyBpcyBub3QgYSBnaXQgY29tbWFuZCIuCisKKyAqICJnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1yZWZlcmVuY2UgJHBhdGggJFVSTCIgaXMgYSB3YXkgdG8KKyAgIHJlZHVjZSBuZXR3b3JrIHRyYW5zZmVyIGNvc3QgYnkgYm9ycm93aW5nIG9iamVjdHMgaW4gYW4gZXhpc3RpbmcKKyAgICRwYXRoIHJlcG9zaXRvcnkgd2hlbiBjbG9uaW5nIHRoZSBzdXBlcnByb2plY3QgZnJvbSAkVVJMOyBpdAorICAgbGVhcm5lZCB0byBhbHNvIHBlZWsgaW50byAkcGF0aCBmb3IgcHJlc2VuY2Ugb2YgY29ycmVzcG9uZGluZworICAgcmVwb3NpdG9yaWVzIG9mIHN1Ym1vZHVsZXMgYW5kIGJvcnJvdyBvYmplY3RzIGZyb20gdGhlcmUgd2hlbiBhYmxlLgorCisgKiBUaGUgImdpdCBkaWZmIC0tc3VibW9kdWxlPXtzaG9ydCxsb2d9IiBtZWNoYW5pc20gaGFzIGJlZW4gZW5oYW5jZWQKKyAgIHRvIGFsbG93ICItLXN1Ym1vZHVsZT1kaWZmIiB0byBzaG93IHRoZSBwYXRjaCBiZXR3ZWVuIHRoZSBzdWJtb2R1bGUKKyAgIGNvbW1pdHMgYm91bmQgdG8gdGhlIHN1cGVycHJvamVjdC4KKworICogRXZlbiB0aG91Z2ggImdpdCBoYXNoLW9iamVjdHMiLCB3aGljaCBpcyBhIHRvb2wgdG8gdGFrZSBhbgorICAgb24tZmlsZXN5c3RlbSBkYXRhIHN0cmVhbSBhbmQgcHV0IGl0IGludG8gdGhlIEdpdCBvYmplY3Qgc3RvcmUsCisgICBjYW4gcGVyZm9ybSAib3V0c2lkZS13b3JsZC10by1HaXQiIGNvbnZlcnNpb25zIChlLmcuCisgICBlbmQtb2YtbGluZSBjb252ZXJzaW9ucyBhbmQgYXBwbGljYXRpb24gb2YgdGhlIGNsZWFuLWZpbHRlciksIGFuZAorICAgaXQgaGFzIGhhZCB0aGlzIGZlYXR1cmUgb24gYnkgZGVmYXVsdCBmcm9tIHZlcnkgZWFybHkgZGF5cywgaXRzIHJldmVyc2UKKyAgIG9wZXJhdGlvbiAiZ2l0IGNhdC1maWxlIiwgd2hpY2ggdGFrZXMgYW4gb2JqZWN0IGZyb20gdGhlIEdpdCBvYmplY3QKKyAgIHN0b3JlIGFuZCBleHRlcm5hbGl6ZXMgaXQgZm9yIGNvbnN1bXB0aW9uIGJ5IHRoZSBvdXRzaWRlIHdvcmxkLAorICAgbGFja2VkIGFuIGVxdWl2YWxlbnQgbWVjaGFuaXNtIHRvIHJ1biB0aGUgIkdpdC10by1vdXRzaWRlLXdvcmxkIgorICAgY29udmVyc2lvbi4gIFRoZSBjb21tYW5kIGxlYXJuZWQgdGhlICItLWZpbHRlcnMiIG9wdGlvbiB0byBkbyBzby4KKworICogT3V0cHV0IGZyb20gImdpdCBkaWZmIiBjYW4gYmUgbWFkZSBlYXNpZXIgdG8gcmVhZCBieSBpbnRlbGxpZ2VudGx5IHNlbGVjdGluZworICAgd2hpY2ggbGluZXMgYXJlIGNvbW1vbiBhbmQgd2hpY2ggbGluZXMgYXJlIGFkZGVkL2RlbGV0ZWQKKyAgIHdoZW4gdGhlIGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNoYW5nZWQgc2VjdGlvbgorICAgYXJlIHRoZSBzYW1lLiAgQSBjb21tYW5kIGxpbmUgb3B0aW9uICgtLWluZGVudC1oZXVyaXN0aWMpIGFuZCBhCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChkaWZmLmluZGVudEhldXJpc3RpYykgYXJlIGFkZGVkIHRvIGhlbHAgd2l0aCB0aGUKKyAgIGV4cGVyaW1lbnQgdG8gZmluZCBnb29kIGhldXJpc3RpY3MuCisKKyAqIEluIHNvbWUgcHJvamVjdHMsIGl0IGlzIGNvbW1vbiB0byB1c2UgIltSRkMgUEFUQ0hdIiBhcyB0aGUgc3ViamVjdAorICAgcHJlZml4IGZvciBhIHBhdGNoIG1lYW50IGZvciBkaXNjdXNzaW9uIHJhdGhlciB0aGFuIGFwcGxpY2F0aW9uLiAgQQorICAgbmV3IGZvcm1hdC1wYXRjaCBvcHRpb24gIi0tcmZjIiBpcyBhIHNob3J0LWhhbmQgZm9yICItLXN1YmplY3QtcHJlZml4PVJGQyBQQVRDSCIKKyAgIHRvIGhlbHAgdGhlIHBhcnRpY2lwYW50cyBvZiBzdWNoIHByb2plY3RzLgorCisgKiAiZ2l0IGFkZCAtLWNobW9kPXsrLC19eCA8cGF0aHNwZWM+IiBvbmx5IGNoYW5nZWQgdGhlCisgICBleGVjdXRhYmxlIGJpdCBmb3IgcGF0aHMgdGhhdCBhcmUgZWl0aGVyIG5ldyBvciBtb2RpZmllZC4gVGhpcyBoYXMKKyAgIGJlZW4gY29ycmVjdGVkIHRvIGNoYW5nZSB0aGUgZXhlY3V0YWJsZSBiaXQgZm9yIGFsbCBwYXRocyB0aGF0IG1hdGNoCisgICB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisKKyAqIFdoZW4gImdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQiIG91dHB1dCBpcyBwbGFjZWQgYXMgYW4gaW4tYm9keQorICAgaGVhZGVyIGFuZCBpdCB1c2VzIFJGQzI4MjIgaGVhZGVyIGZvbGRpbmcsICJnaXQgYW0iIGZhaWxzIHRvCisgICBwdXQgdGhlIGhlYWRlciBsaW5lIGJhY2sgaW50byBhIHNpbmdsZSBsb2dpY2FsIGxpbmUuICBUaGUKKyAgIHVuZGVybHlpbmcgImdpdCBtYWlsaW5mbyIgd2FzIHRhdWdodCB0byBoYW5kbGUgdGhpcyBwcm9wZXJseS4KKworICogImdpdHdlYiIgY2FuIHNwYXduICJoaWdobGlnaHQiIHRvIHNob3cgYmxvYiBjb250ZW50cyB3aXRoCisgICAocHJvZ3JhbW1pbmcpIGxhbmd1YWdlLXNwZWNpZmljIHN5bnRheCBoaWdobGlnaHRpbmcsIGJ1dCBvbmx5CisgICB3aGVuIHRoZSBsYW5ndWFnZSBpcyBrbm93bi4gICJoaWdobGlnaHQiIGNhbiBob3dldmVyIGJlIHRvbGQKKyAgIHRvIGd1ZXNzIHRoZSBsYW5ndWFnZSBpdHNlbGYgYnkgZ2l2aW5nIGl0ICItLWZvcmNlIiBvcHRpb24sIHdoaWNoCisgICBoYXMgYmVlbiBlbmFibGVkLgorCisgKiAiZ2l0IGd1aSIgbDEwbiB0byBQb3J0dWd1ZXNlLgorCisgKiBXaGVuIGdpdmVuIGFuIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lIHRoYXQgaXMgbm90IChvciBtb3JlCisgICByZWFsaXN0aWNhbGx5LCAibm8gbG9uZ2VyIikgdW5pcXVlLCB3ZSBnYXZlIGEgZmF0YWwgZXJyb3IKKyAgICJhbWJpZ3VvdXMgYXJndW1lbnQiLiAgVGhpcyBlcnJvciBpcyBub3cgYWNjb21wYW5pZWQgYnkgYSBoaW50IHRoYXQKKyAgIGxpc3RzIHRoZSBvYmplY3RzIGJlZ2lubmluZyB3aXRoIHRoZSBnaXZlbiBwcmVmaXguICBEdXJpbmcgdGhlCisgICBjb3Vyc2Ugb2YgZGV2ZWxvcG1lbnQgb2YgdGhpcyBuZXcgZmVhdHVyZSwgbnVtZXJvdXMgbWlub3IgYnVncyB3ZXJlCisgICB1bmNvdmVyZWQgYW5kIGNvcnJlY3RlZCwgdGhlIG1vc3Qgbm90YWJsZSBvbmUgb2Ygd2hpY2ggaXMgdGhhdCB3ZQorICAgZ2F2ZSAic2hvcnQgU0hBMSB4eHh4IGlzIGFtYmlndW91cy4iIHR3aWNlIHdpdGhvdXQgZ29vZCByZWFzb24uCisKKyAqICJnaXQgbG9nIHJldl4uLnJldiIgaXMgYW4gb2Z0ZW4tdXNlZCByZXZpc2lvbiByYW5nZSBzcGVjaWZpY2F0aW9uCisgICB0byBzaG93IHdoYXQgd2FzIGRvbmUgb24gYSBzaWRlIGJyYW5jaCBtZXJnZWQgYXQgcmV2LiAgVGhpcyBoYXMKKyAgIGdhaW5lZCBhIHNob3J0LWhhbmQgInJldl4tMSIuICBJbiBnZW5lcmFsICJyZXZeLSRuIiBpcyB0aGUgc2FtZSBhcworICAgIl5yZXZeJG4gcmV2IiwgaS5lLiB3aGF0IGhhcyBoYXBwZW5lZCBvbiBvdGhlciBicmFuY2hlcyB3aGlsZSB0aGUKKyAgIGhpc3RvcnkgbGVhZGluZyB0byBudGggcGFyZW50IHdhcyBsb29raW5nIHRoZSBvdGhlciB3YXkuCisKKyAqIEluIHJlY2VudCB2ZXJzaW9ucyBvZiBjVVJMLCBHU1NBUEkgY3JlZGVudGlhbCBkZWxlZ2F0aW9uIGlzCisgICBkaXNhYmxlZCBieSBkZWZhdWx0IGR1ZSB0byBDVkUtMjAxMS0yMTkyOyBpbnRyb2R1Y2UgYSBodHRwLmRlbGVnYXRpb24KKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gc2VsZWN0aXZlbHkgYWxsb3cgZW5hYmxpbmcgdGhpcy4KKyAgIChtZXJnZSAyNmE3YjIzNDI5IHBzL2h0dHAtZ3NzYXBpLWNyZWQtZGVsZWdhdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIGhvbm9yICItTzxvcmRlcmZpbGU+IiB0byBjb250cm9sIHRoZQorICAgb3JkZXIgb2YgcGF0aHMgdG8gcHJlc2VudCB0byB0aGUgZW5kIHVzZXIuCisKKyAqICJnaXQgZGlmZi9sb2cgLS13cy1lcnJvci1oaWdobGlnaHQ9PGtpbmQ+IiBsYWNrZWQgdGhlIGNvcnJlc3BvbmRpbmcKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGRpZmYud3NFcnJvckhpZ2hsaWdodCkgdG8gc2V0IGl0IGJ5IGRlZmF1bHQuCisKKyAqICJnaXQgbHMtZmlsZXMiIGxlYXJuZWQgdGhlICItLXJlY3Vyc2Utc3VibW9kdWxlcyIgb3B0aW9uCisgICB0byBnZXQgYSBsaXN0aW5nIG9mIHRyYWNrZWQgZmlsZXMgYWNyb3NzIHN1Ym1vZHVsZXMgKGkuZS4gdGhpcworICAgb25seSB3b3JrcyB3aXRoIHRoZSAiLS1jYWNoZWQiIG9wdGlvbiwgbm90IGZvciBsaXN0aW5nIHVudHJhY2tlZCBvcgorICAgaWdub3JlZCBmaWxlcykuICBUaGlzIHdvdWxkIGJlIGEgdXNlZnVsIHRvb2wgdG8gc2l0IG9uIHRoZSB1cHN0cmVhbQorICAgc2lkZSBvZiBhIHBpcGUgdGhhdCBpcyByZWFkIHdpdGggeGFyZ3MgdG8gd29yayBvbiBhbGwgd29ya2luZyB0cmVlCisgICBmaWxlcyBmcm9tIHRoZSB0b3AtbGV2ZWwgc3VwZXJwcm9qZWN0LgorCisgKiBBIG5ldyBjcmVkZW50aWFsIGhlbHBlciB0aGF0IHRhbGtzIHZpYSAibGlic2VjcmV0IiB3aXRoCisgICBpbXBsZW1lbnRhdGlvbnMgb2YgWERHIFNlY3JldCBTZXJ2aWNlIEFQSSBoYXMgYmVlbiBhZGRlZCB0bworICAgY29udHJpYi9jcmVkZW50aWFsLy4KKworICogVGhlIEdQRyB2ZXJpZmljYXRpb24gc3RhdHVzIHNob3duIGJ5IHRoZSAiJUc/IiBwcmV0dHkgZm9ybWF0IHNwZWNpZmllcgorICAgd2FzIG5vdCByaWNoIGVub3VnaCB0byBkaWZmZXJlbnRpYXRlIGEgc2lnbmF0dXJlIG1hZGUgYnkgYW4gZXhwaXJlZAorICAga2V5LCBhIHNpZ25hdHVyZSBtYWRlIGJ5IGEgcmV2b2tlZCBrZXksIGV0Yy4gIE5ldyBvdXRwdXQgbGV0dGVycworICAgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGV4cHJlc3MgdGhlbS4KKworICogSW4gYWRkaXRpb24gdG8gcHVyZWx5IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgbmFtZXMsICJnaXR3ZWIiCisgICBsZWFybmVkIHRvIHR1cm4gImdpdCBkZXNjcmliZSIgb3V0cHV0IChlLmcuIHYyLjkuMy01OTktZzIzNzZkMzE3ODcpCisgICBpbnRvIGNsaWNrYWJsZSBsaW5rcyBpbiBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGNvbW1pdCIgY3JlYXRlZCBhbiBlbXB0eSBjb21taXQgd2hlbiBpbnZva2VkIHdpdGggYW4gaW5kZXgKKyAgIGNvbnNpc3Rpbmcgc29sZWx5IG9mIGludGVuZC10by1hZGQgcGF0aHMgKGFkZGVkIHdpdGggImdpdCBhZGQgLU4iKS4KKyAgIEl0IG5vdyByZXF1aXJlcyB0aGUgIi0tYWxsb3ctZW1wdHkiIG9wdGlvbiB0byBjcmVhdGUgc3VjaCBhIGNvbW1pdC4KKyAgIFRoZSBzYW1lIGxvZ2ljIHByZXZlbnRlZCAiZ2l0IHN0YXR1cyIgZnJvbSBzaG93aW5nIHN1Y2ggcGF0aHMgYXMgIm5ldyBmaWxlcyIgaW4gdGhlCisgICAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQiIHNlY3Rpb24uCisKKyAqIFRoZSBzbXVkZ2UvY2xlYW4gZmlsdGVyIEFQSSBzcGF3bnMgYW4gZXh0ZXJuYWwgcHJvY2VzcworICAgdG8gZmlsdGVyIHRoZSBjb250ZW50cyBvZiBlYWNoIHBhdGggdGhhdCBoYXMgYSBmaWx0ZXIgZGVmaW5lZC4gIEEKKyAgIG5ldyB0eXBlIG9mICJwcm9jZXNzIiBmaWx0ZXIgQVBJIGhhcyBiZWVuIGFkZGVkIHRvIGFsbG93IHRoZSBmaXJzdAorICAgcmVxdWVzdCB0byBydW4gdGhlIGZpbHRlciBmb3IgYSBwYXRoIHRvIHNwYXduIGEgc2luZ2xlIHByb2Nlc3MsIGFuZAorICAgYWxsIGZpbHRlcmluZyBpcyBzZXJ2ZWQgYnkgdGhpcyBzaW5nbGUgcHJvY2VzcyBmb3IgbXVsdGlwbGUKKyAgIHBhdGhzLCByZWR1Y2luZyB0aGUgcHJvY2VzcyBjcmVhdGlvbiBvdmVyaGVhZC4KKworICogVGhlIHVzZXIgYWx3YXlzIGhhcyB0byBzYXkgInN0YXNoQHskTn0iIHdoZW4gbmFtaW5nIGEgc2luZ2xlCisgICBlbGVtZW50IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBzdGFzaCwgaS5lLiByZWZsb2dzIGluCisgICByZWZzL3N0YXNoLiAgVGhlICJnaXQgc3Rhc2giIGNvbW1hbmQgbGVhcm5lZCB0byBhY2NlcHQgImdpdCBzdGFzaAorICAgYXBwbHkgNCIgYXMgYSBzaG9ydC1oYW5kIGZvciAiZ2l0IHN0YXNoIGFwcGx5IHN0YXNoQHs0fSIuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogVGhlIGRlbHRhLWJhc2UtY2FjaGUgbWVjaGFuaXNtIGhhcyBiZWVuIGEga2V5IHRvIHRoZSBwZXJmb3JtYW5jZSBpbgorICAgYSByZXBvc2l0b3J5IHdpdGggYSB0aWdodGx5IHBhY2tlZCBwYWNrZmlsZSwgYnV0IGl0IGRpZCBub3Qgc2NhbGUKKyAgIHdlbGwgZXZlbiB3aXRoIGEgbGFyZ2VyIHZhbHVlIG9mIGNvcmUuZGVsdGFCYXNlQ2FjaGVMaW1pdC4KKworICogRW5oYW5jZSAiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIgb3V0cHV0IGJ5IGNvbGxlY3RpbmcgbW9yZSBkYXRhIG9uCisgICB0aGUgc3RhdGUgb2YgdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIGZpbGVzLCB3aGljaCBtYXkKKyAgIGZ1cnRoZXIgYmUgdXNlZCB0byB0ZWFjaCBnaXQtcHJvbXB0IChpbiBjb250cmliLykgdG8gbWFrZSBmZXdlcgorICAgY2FsbHMgdG8gZ2l0LgorCisgKiBFeHRyYWN0IGEgc21hbGwgaGVscGVyIG91dCBvZiB0aGUgZnVuY3Rpb24gdGhhdCByZWFkcyB0aGUgYXV0aG9ycworICAgc2NyaXB0IGZpbGUgImdpdCBhbSIgaW50ZXJuYWxseSB1c2VzLgorICAgKG1lcmdlIGE3NzU5OGUgamMvYW0tcmVhZC1hdXRob3ItZmlsZSBsYXRlciB0byBtYWludCkuCisKKyAqIExpZnQgY2FsbHMgdG8gZXhpdCgyKSBhbmQgZGllKCkgaGlnaGVyIGluIHRoZSBjYWxsY2hhaW4gaW4KKyAgIHNlcXVlbmNlci5jIGZpbGVzIHNvIHRoYXQgbW9yZSBoZWxwZXIgZnVuY3Rpb25zIGluIGl0IGNhbiBiZSB1c2VkCisgICBieSBjYWxsZXJzIHRoYXQgd2FudCB0byBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyB0aGVtc2VsdmVzLgorCisgKiAiZ2l0IGFtIiBoYXMgYmVlbiB0YXVnaHQgdG8gbWFrZSBhbiBpbnRlcm5hbCBjYWxsIHRvICJnaXQgYXBwbHkiJ3MKKyAgIGlubmFyZHMgd2l0aG91dCBzcGF3bmluZyB0aGUgbGF0dGVyIGFzIGEgc2VwYXJhdGUgcHJvY2Vzcy4KKworICogVGhlIHJlZi1zdG9yZSBhYnN0cmFjdGlvbiB3YXMgaW50cm9kdWNlZCB0byB0aGUgcmVmcyBBUEkgc28gdGhhdCB3ZQorICAgY2FuIHBsdWcgaW4gZGlmZmVyZW50IGJhY2tlbmRzIHRvIHN0b3JlIHJlZmVyZW5jZXMuCisKKyAqIFRoZSAidW5zaWduZWQgY2hhciBzaGExWzIwXSIgdG8gInN0cnVjdCBvYmplY3RfaWQiIGNvbnZlcnNpb24KKyAgIGNvbnRpbnVlcy4gIE5vdGFibGUgY2hhbmdlcyBpbiB0aGlzIHJvdW5kIGluY2x1ZGVzIHRoYXQgY2UtPnNoYTEsCisgICBpLmUuIHRoZSBvYmplY3QgbmFtZSByZWNvcmRlZCBpbiB0aGUgY2FjaGVfZW50cnksIHR1cm5zIGludG8gYW4KKyAgIG9iamVjdF9pZC4KKworICogSkdpdCBjYW4gc2hvdyBhIGZha2UgcmVmICJjYXBhYmlsaXRpZXNee30iIHRvICJnaXQgZmV0Y2giIHdoZW4gaXQKKyAgIGRvZXMgbm90IGFkdmVydGlzZSBhbnkgcmVmcywgYnV0ICJnaXQgZmV0Y2giIHdhcyBub3QgcHJlcGFyZWQgdG8KKyAgIHNlZSBzdWNoIGFuIGFkdmVydGlzZW1lbnQuICBXaGVuIHRoZSBvdGhlciBzaWRlIGRpc2Nvbm5lY3RzIHdpdGhvdXQKKyAgIGdpdmluZyBhbnkgcmVmIGFkdmVydGlzZW1lbnQsIHdlIHVzZWQgdG8gc2F5ICJ0aGVyZSBtYXkgbm90IGJlIGEKKyAgIHJlcG9zaXRvcnkgYXQgdGhhdCBVUkwiLCBidXQgd2UgbWF5IGhhdmUgc2VlbiBvdGhlciBhZHZlcnRpc2VtZW50cworICAgbGlrZSAic2hhbGxvdyIgYW5kICIuaGF2ZSIgaW4gd2hpY2ggY2FzZSB3ZSBkZWZpbml0ZWx5IGtub3cgdGhhdCBhCisgICByZXBvc2l0b3J5IGlzIHRoZXJlLiAgVGhlIGNvZGUgdG8gZGV0ZWN0IHRoaXMgY2FzZSBoYXMgYWxzbyBiZWVuCisgICB1cGRhdGVkLgorCisgKiBTb21lIGNvZGVwYXRocyBpbiAiZ2l0IHBhY2stb2JqZWN0cyIgd2VyZSBub3QgcmVhZHkgdG8gdXNlIGFuCisgICBleGlzdGluZyBwYWNrIGJpdG1hcDsgbm93IHRoZXkgYXJlIGFuZCBhcyBhIHJlc3VsdCB0aGV5IGhhdmUKKyAgIGJlY29tZSBmYXN0ZXIuCisKKyAqIFRoZSBjb2RlcGF0aCBpbiAiZ2l0IGZzY2siIHRvIGRldGVjdCBtYWxmb3JtZWQgdHJlZSBvYmplY3RzIGhhcworICAgYmVlbiB1cGRhdGVkIG5vdCB0byBkaWUgYnV0IGtlZXAgZ29pbmcgYWZ0ZXIgZGV0ZWN0aW5nIHRoZW0uCisKKyAqIFdlIGNhbGwgInFzb3J0KGFycmF5LCBuZWxlbSwgc2l6ZW9mKGFycmF5WzBdKSwgZm4pIiwgYW5kIG1vc3Qgb2YKKyAgIHRoZSB0aW1lIHRoaXJkIHBhcmFtZXRlciBpcyByZWR1bmRhbnQuICBBIG5ldyBRU09SVCgpIG1hY3JvIGxldHMgdXMKKyAgIG9taXQgaXQuCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBpbiBhIHJlcG9zaXRvcnkgd2l0aCBtYW55IHBhY2tmaWxlcyB1c2VkIHRvCisgICBzcGVuZCBhIGxvdCBvZiB0aW1lIGxvb2tpbmcgZm9yL2F0IG9iamVjdHMgaW4gdGhlbTsgdGhlIGFjY2Vzc2VzIHRvCisgICB0aGUgcGFja2ZpbGVzIGFyZSBub3cgb3B0aW1pemVkIGJ5IGNoZWNraW5nIHRoZSBtb3N0LXJlY2VudGx5LXVzZWQKKyAgIHBhY2tmaWxlIGZpcnN0LgorICAgKG1lcmdlIGM5YWY3MDhiMWEgamsvcGFjay1vYmplY3RzLW9wdGltLW1ydSBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGVwYXRocyBpbnZvbHZlZCBpbiBpbnRlcmFjdGluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcyBoYXZlCisgICBiZWVuIGNsZWFuZWQgdXAuCisKKyAqIEluIG9yZGVyIGZvciB0aGUgcmVjZWl2aW5nIGVuZCBvZiAiZ2l0IHB1c2giIHRvIGluc3BlY3QgdGhlCisgICByZWNlaXZlZCBoaXN0b3J5IGFuZCBkZWNpZGUgdG8gcmVqZWN0IHRoZSBwdXNoLCB0aGUgb2JqZWN0cyBzZW50CisgICBmcm9tIHRoZSBzZW5kaW5nIGVuZCBuZWVkIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBob29rIGFuZAorICAgdGhlIG1lY2hhbmlzbSBmb3IgdGhlIGNvbm5lY3Rpdml0eSBjaGVjaywgYW5kIHRoaXMgd2FzIGRvbmUKKyAgIHRyYWRpdGlvbmFsbHkgYnkgc3RvcmluZyB0aGUgb2JqZWN0cyBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkKKyAgIGFuZCBsZXR0aW5nICJnaXQgZ2MiIGV4cGlyZSB0aGVtLiAgSW5zdGVhZCwgc3RvcmUgdGhlIG5ld2x5CisgICByZWNlaXZlZCBvYmplY3RzIGluIGEgdGVtcG9yYXJ5IGFyZWEsIGFuZCBtYWtlIHRoZW0gYXZhaWxhYmxlIGJ5CisgICByZXVzaW5nIHRoZSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIG1lY2hhbmlzbSB0byB0aGVtIG9ubHkgd2hpbGUgd2UKKyAgIGRlY2lkZSBpZiB3ZSBhY2NlcHQgdGhlIGNoZWNrLCBhbmQgb25jZSB3ZSBkZWNpZGUsIGVpdGhlciBtaWdyYXRlCisgICB0aGVtIHRvIHRoZSByZXBvc2l0b3J5IG9yIHB1cmdlIHRoZW0gaW1tZWRpYXRlbHkuCisKKyAqIFRoZSByZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSgpIGhlbHBlciB3YXMgcmVjcmVhdGVkIGluIEMgd2hlbiAiZ2l0CisgICBwdWxsIiB3YXMgcmV3cml0dGVuIGZyb20gc2hlbGw7IHRoZSBoZWxwZXIgaXMgbm93IG1hZGUgYXZhaWxhYmxlIHRvCisgICBvdGhlciBjYWxsZXJzIGluIHByZXBhcmF0aW9uIGZvciB1cGNvbWluZyAicmViYXNlIC1pIiB3b3JrLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiBoYWQgaXRzIGNvZGUgY2xlYW5lZC11cCBhbmQgcGVyZm9ybWFuY2UgaW1wcm92ZWQKKyAgIGJ5IHJlZHVjaW5nIHVzZSBvZiB0aW1lc3RhbXAtb3JkZXJlZCBjb21taXQtbGlzdCwgd2hpY2ggd2FzCisgICByZXBsYWNlZCB3aXRoIGEgcHJpb3JpdHkgcXVldWUuCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBjb2RlcGF0aCBoYXMgYmVlbiB1cGRhdGVkIG5vdCB0byB0cnkgdG8gcGVlaworICAgaW50byBhIC5naXQvIGRpcmVjdG9yeSB0aGF0IGhhcHBlbnMgdG8gYmUgdW5kZXIgdGhlIGN1cnJlbnQKKyAgIGRpcmVjdG9yeSwgd2hlbiB3ZSBrbm93IHdlIGFyZSBvcGVyYXRpbmcgb3V0c2lkZSBhbnkgcmVwb3NpdG9yeS4KKworICogVXBkYXRlIG9mIHRoZSBzZXF1ZW5jZXIgY29kZWJhc2UgdG8gbWFrZSBpdCByZXVzYWJsZSB0byByZWltcGxlbWVudAorICAgInJlYmFzZSAtaSIgY29udGludWVzLgorCisgKiBHaXQgZ2VuZXJhbGx5IGRvZXMgbm90IGV4cGxpY2l0bHkgY2xvc2UgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IHdlcmUKKyAgIG9wZW4gaW4gdGhlIHBhcmVudCBwcm9jZXNzIHdoZW4gc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzLCBidXQgbW9zdAorICAgb2YgdGhlIHRpbWUgdGhlIGNoaWxkIGRvZXMgbm90IHdhbnQgdG8gYWNjZXNzIHRoZW0uIEFzIFdpbmRvd3MgZG9lcworICAgbm90IGFsbG93IHJlbW92aW5nIG9yIHJlbmFtaW5nIGEgZmlsZSB0aGF0IGhhcyBhIGZpbGUgZGVzY3JpcHRvcgorICAgb3BlbiwgYSBzbG93LXRvLWV4aXQgY2hpbGQgY2FuIGV2ZW4gYnJlYWsgdGhlIHBhcmVudCBwcm9jZXNzIGJ5CisgICBob2xkaW5nIG9udG8gdGhlbS4gIFVzZSBPX0NMT0VYRUMgZmxhZyB0byBvcGVuIGZpbGVzIGluIHZhcmlvdXMKKyAgIGNvZGVwYXRocy4KKworICogVXBkYXRlICJpbnRlcnByZXQtdHJhaWxlcnMiIG1hY2hpbmVyeSBhbmQgdGVhY2ggaXQgdGhhdCBwZW9wbGUgaW4KKyAgIHRoZSByZWFsIHdvcmxkIHdyaXRlIGFsbCBzb3J0cyBvZiBjcnVmdCBpbiB0aGUgInRyYWlsZXIiIHRoYXQgd2FzCisgICBvcmlnaW5hbGx5IGRlc2lnbmVkIHRvIGhhdmUgdGhlIG5lYXQtbyAiTWFpbC1IZWFkZXI6IGxpa2UgdGhpbmciCisgICBhbmQgbm90aGluZyBlbHNlLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjEwCistLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjkgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogQ2xhcmlmeSB2YXJpb3VzIHdheXMgdG8gc3BlY2lmeSB0aGUgInJldmlzaW9uIHJhbmdlcyIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uLgorCisgKiAiZGlmZi1oaWdobGlnaHQiIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gd29yayBiZXR0ZXIgd2l0aAorICAgImdpdCBsb2cgLXAgLS1ncmFwaCIgb3V0cHV0LgorCisgKiBUaGUgdGVzdCBmcmFtZXdvcmsgbGVmdCB0aGUgbnVtYmVyIG9mIHRlc3RzIGFuZCBzdWNjZXNzL2ZhaWx1cmUKKyAgIGNvdW50IGluIHRoZSB0L3Rlc3QtcmVzdWx0cyBkaXJlY3RvcnksIGtleWVkIGJ5IHRoZSBuYW1lIG9mIHRoZQorICAgdGVzdCBzY3JpcHQgcGx1cyB0aGUgcHJvY2VzcyBJRC4gIFRoZSBsYXR0ZXIgaG93ZXZlciB0dXJuZWQgb3V0IG5vdAorICAgdG8gc2VydmUgYW55IHVzZWZ1bCBwdXJwb3NlLiAgVGhlIHByb2Nlc3MgSUQgcGFydCBvZiB0aGUgZmlsZW5hbWUKKyAgIGhhcyBiZWVuIHJlbW92ZWQuCisKKyAqIEhhdmluZyBhIHN1Ym1vZHVsZSB3aG9zZSAiLmdpdCIgcmVwb3NpdG9yeSBpcyBzb21laG93IGNvcnJ1cHQKKyAgIGNhdXNlZCBhIGZldyBjb21tYW5kcyB0aGF0IHJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIHRvIGxvb3AgZm9yZXZlci4KKworICogImdpdCBzeW1ib2xpYy1yZWYgLWQgSEVBRCIgaGFwcGlseSByZW1vdmVzIHRoZSBzeW1ib2xpYyByZWYsIGJ1dAorICAgdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5IGJlY29tZXMgYW4gaW52YWxpZCBvbmUuICBUZWFjaCB0aGUgY29tbWFuZAorICAgdG8gZm9yYmlkIHJlbW92YWwgb2YgSEVBRC4KKworICogQSB0ZXN0IHNwYXduZWQgYSBzaG9ydC1saXZlZCBiYWNrZ3JvdW5kIHByb2Nlc3MsIHdoaWNoIHNvbWV0aW1lcworICAgcHJldmVudGVkIHRoZSB0ZXN0IGRpcmVjdG9yeSBmcm9tIGdldHRpbmcgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZQorICAgc2NyaXB0IG9uIHNvbWUgcGxhdGZvcm1zLgorCisgKiBVcGRhdGUgYSBmZXcgdGVzdHMgdGhhdCB1c2VkIHRvIHVzZSBHSVRfQ1VSTF9WRVJCT1NFIHRvIHVzZSB0aGUKKyAgIG5ld2VyIEdJVF9UUkFDRV9DVVJMLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyAtLWluY2x1ZGUtdGFnIiB3YXMgdGF1Z2h0IHRoYXQgd2hlbiB3ZSBrbm93IHRoYXQKKyAgIHdlIGFyZSBzZW5kaW5nIGFuIG9iamVjdCBDLCB3ZSB3YW50IGEgdGFnIEIgdGhhdCBkaXJlY3RseSBwb2ludHMgYXQKKyAgIEMgYnV0IGFsc28gYSB0YWcgQSB0aGF0IHBvaW50cyBhdCB0aGUgdGFnIEIuICBXZSB1c2VkIHRvIG1pc3MgdGhlCisgICBpbnRlcm1lZGlhdGUgdGFnIEIgaW4gc29tZSBjYXNlcy4KKworICogVXBkYXRlIEphcGFuZXNlIHRyYW5zbGF0aW9uIGZvciAiZ2l0LWd1aSIuCisKKyAqICJnaXQgZmV0Y2ggaHR0cDo6L3NpdGUvcGF0aCIgZGlkIG5vdCBkaWUgY29ycmVjdGx5IGFuZCBzZWdmYXVsdGVkCisgICBpbnN0ZWFkLgorCisgKiAiZ2l0IGNvbW1pdC10cmVlIiBzdG9wcGVkIHJlYWRpbmcgY29tbWl0LmdwZ3NpZ24gY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgdGhhdCB3YXMgbWVhbnQgZm9yIFBvcmNlbGFpbiAiZ2l0IGNvbW1pdCIgaW4gR2l0IDIuOTsgd2UKKyAgIGZvcmdvdCB0byB1cGRhdGUgImdpdCBndWkiIHRvIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gbWF0Y2gKKyAgIHRoaXMgY2hhbmdlLgorCisgKiAiZ2l0IGFkZCAtLWNobW9kPXsrLC19eCIgYWRkZWQgcmVjZW50bHkgbGFja2VkIGRvY3VtZW50YXRpb24sIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgbG9nIC0tY2hlcnJ5LXBpY2siIHVzZWQgdG8gaW5jbHVkZSBtZXJnZSBjb21taXRzIGFzIGNhbmRpZGF0ZXMKKyAgIHRvIGJlIG1hdGNoZWQgdXAgd2l0aCBvdGhlciBjb21taXRzLCByZXN1bHRpbmcgYSBsb3Qgb2Ygd2FzdGVkIHRpbWUuCisgICBUaGUgcGF0Y2gtaWQgZ2VuZXJhdGlvbiBsb2dpYyBoYXMgYmVlbiB1cGRhdGVkIHRvIGlnbm9yZSBtZXJnZXMgYW5kCisgICBhdm9pZCB0aGUgd2FzdGFnZS4KKworICogVGhlIGh0dHAgdHJhbnNwb3J0ICh3aXRoIGN1cmwtbXVsdGkgb3B0aW9uLCB3aGljaCBpcyB0aGUgZGVmYXVsdAorICAgdGhlc2UgZGF5cykgZmFpbGVkIHRvIHJlbW92ZSBjdXJsLWVhc3kgaGFuZGxlIGZyb20gYSBjdXJsbSBzZXNzaW9uLAorICAgd2hpY2ggbGVkIHRvIHVubmVjZXNzYXJ5IEFQSSBmYWlsdXJlcy4KKworICogVGhlcmUgd2VyZSBudW1lcm91cyBjb3JuZXIgY2FzZXMgaW4gd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyAgIGFyZSByZWFkIGFuZCB1c2VkIG9yIG5vdCByZWFkIGF0IGFsbCBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdG9yeSBhCisgICBHaXQgY29tbWFuZCB3YXMgcnVuLCBsZWFkaW5nIHRvIGluY29uc2lzdGVudCBiZWhhdmlvdXIuICBUaGUgY29kZQorICAgdG8gc2V0LXVwIHJlcG9zaXRvcnkgYWNjZXNzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBHaXQgcHJvY2VzcyBoYXMKKyAgIGJlZW4gdXBkYXRlZCB0byBmaXggdGhlbS4KKyAgIChtZXJnZSA0ZDBlZmExIGprL3NldHVwLXNlcXVlbmNlLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtVyIgb3V0cHV0IG5lZWRzIHRvIGV4dGVuZCB0aGUgY29udGV4dCBiYWNrd2FyZCB0bworICAgaW5jbHVkZSB0aGUgaGVhZGVyIGxpbmUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gYW5kIGFsc28gZm9yd2FyZCB0bworICAgaW5jbHVkZSB0aGUgYm9keSBvZiB0aGUgZW50aXJlIGN1cnJlbnQgZnVuY3Rpb24gdXAgdG8gdGhlIGhlYWRlcgorICAgbGluZSBvZiB0aGUgbmV4dCBvbmUuICBUaGlzIHByb2Nlc3MgbWF5IGhhdmUgdG8gbWVyZ2UgdHdvIGFkamFjZW50CisgICBodW5rcywgYnV0IHRoZSBjb2RlIGZvcmdvdCB0byBkbyBzbyBpbiBzb21lIGNhc2VzLgorCisgKiBQZXJmb3JtYW5jZSB0ZXN0cyBkb25lIHZpYSAidC9wZXJmIiBkaWQgbm90IHVzZSB0aGUgcmlnaHQKKyAgIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaWYgdGhlIHVzZXIgcmVsaWVkIG9uIGF1dG9jb25mIGdlbmVyYXRlZAorICAgY29uZmlndXJhdGlvbi4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLS1iYXNlPS4uLiIgZmVhdHVyZSB0aGF0IHdhcyByZWNlbnRseSBhZGRlZAorICAgc2hvd2VkIHRoZSBiYXNlIGNvbW1pdCBpbmZvcm1hdGlvbiBhZnRlciB0aGUgIi0tICIgZS1tYWlsIHNpZ25hdHVyZQorICAgbGluZSwgd2hpY2ggdHVybmVkIG91dCB0byBiZSBpbmNvbnZlbmllbnQuICBUaGUgYmFzZSBpbmZvcm1hdGlvbgorICAgaGFzIGJlZW4gbW92ZWQgYWJvdmUgdGhlIHNpZ25hdHVyZSBsaW5lLgorCisgKiBNb3JlIGkxOG4uCisKKyAqIEV2ZW4gd2hlbiAiZ2l0IHB1bGwgLS1yZWJhc2U9cHJlc2VydmUiIChhbmQgdGhlIHVuZGVybHlpbmcgImdpdAorICAgcmViYXNlIC0tcHJlc2VydmUiKSBjYW4gY29tcGxldGUgd2l0aG91dCBjcmVhdGluZyBhbnkgbmV3IGNvbW1pdHMKKyAgIChpLmUuIGZhc3QtZm9yd2FyZHMpLCBpdCBzdGlsbCBpbnNpc3RlZCBvbiBoYXZpbmcgdXNhYmxlIGlkZW50CisgICBpbmZvcm1hdGlvbiAocmVhZDogdXNlci5lbWFpbCBpcyBzZXQgY29ycmVjdGx5KSwgd2hpY2ggd2FzIGxlc3MKKyAgIHRoYW4gbmljZS4gIEFzIHRoZSB1bmRlcmx5aW5nIGNvbW1hbmRzIHVzZWQgaW5zaWRlICJnaXQgcmViYXNlIgorICAgd291bGQgZmFpbCB3aXRoIGEgbW9yZSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2UgYW5kIGFkdmljZSB0ZXh0CisgICB3aGVuIHRoZSBib2d1cyBpZGVudCBtYXR0ZXJzLCB0aGlzIGV4dHJhIGNoZWNrIHdhcyByZW1vdmVkLgorCisgKiAiZ2l0IGdjIC0tYWdncmVzc2l2ZSIgdXNlZCB0byBsaW1pdCB0aGUgZGVsdGEtY2hhaW4gbGVuZ3RoIHRvIDI1MCwKKyAgIHdoaWNoIGlzIHdheSB0b28gZGVlcCBmb3IgZ2FpbmluZyBhZGRpdGlvbmFsIHNwYWNlIHNhdmluZ3MgYW5kIGlzCisgICBkZXRyaW1lbnRhbCBmb3IgcnVudGltZSBwZXJmb3JtYW5jZS4gIFRoZSBsaW1pdCBoYXMgYmVlbiByZWR1Y2VkIHRvCisgICA1MC4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0byBjb250cm9sIHVzZQorICAgb2YgY29sb3IgKGxpa2UgYGNvbG9yLmdyZXBgKSBzYWlkIHRoYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZSBpcworICAgJ2ZhbHNlJywgaW5zdGVhZCBvZiBzYXlpbmcgdGhlaXIgZGVmYXVsdCBpcyB0YWtlbiBmcm9tIGBjb2xvci51aWAuCisgICBXaGVuIHdlIHVwZGF0ZWQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGNvbG9yLnVpIGZyb20gJ2ZhbHNlJyB0bworICAgJ2F1dG8nIHF1aXRlIGEgd2hpbGUgYWdvLCBhbGwgb2YgdGhlbSBicm9rZS4gIFRoaXMgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIHByZXR0eS1mb3JtYXQgc3BlY2lmaWVyICIlQyhhdXRvKSIgdXNlZCBieSB0aGUgImxvZyIgZmFtaWx5IG9mCisgICBjb21tYW5kcyB0byBlbmFibGUgY29sb3Jpbmcgb2YgdGhlIG91dHB1dCBpcyB0YXVnaHQgdG8gYWxzbyBpc3N1ZSBhCisgICBjb2xvci1yZXNldCBzZXF1ZW5jZSB0byB0aGUgb3V0cHV0LgorCisgKiBBIHNoZWxsIHNjcmlwdCBleGFtcGxlIGluIGNoZWNrLXJlZi1mb3JtYXQgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqICJnaXQgY2hlY2tvdXQgPHdvcmQ+IiBkb2VzIG5vdCBmb2xsb3cgdGhlIHVzdWFsIGRpc2FtYmlndWF0aW9uCisgICBydWxlcyB3aGVuIHRoZSA8d29yZD4gY2FuIGJlIGJvdGggYSByZXYgYW5kIGEgcGF0aCwgdG8gYWxsb3cKKyAgIGNoZWNraW5nIG91dCBhIGJyYW5jaCAnZm9vJyBpbiBhIHByb2plY3QgdGhhdCBoYXBwZW5zIHRvIGhhdmUgYQorICAgZmlsZSAnZm9vJyBpbiB0aGUgd29ya2luZyB0cmVlIHdpdGhvdXQgaGF2aW5nIHRvIGRpc2FtYmlndWF0ZS4KKyAgIFRoaXMgd2FzIHBvb3JseSBkb2N1bWVudGVkIGFuZCB0aGUgY2hlY2sgd2FzIGluY29ycmVjdCB3aGVuIHRoZQorICAgY29tbWFuZCB3YXMgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqIFNvbWUgY29kZXBhdGhzIGluICJnaXQgZGlmZiIgdXNlZCByZWdleGVjKDMpIG9uIGEgYnVmZmVyIHRoYXQgd2FzCisgICBtbWFwKDIpZWQsIHdoaWNoIG1heSBub3QgaGF2ZSBhIHRlcm1pbmF0aW5nIE5VTCwgbGVhZGluZyB0byBhIHJlYWQKKyAgIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBtYXBwZWQgcmVnaW9uLiAgVGhpcyB3YXMgZml4ZWQgYnkgaW50cm9kdWNpbmcKKyAgIGEgcmVnZXhlY19idWYoKSBoZWxwZXIgdGhhdCB0YWtlcyBhIDxwdHIsbGVuPiBwYWlyIHdpdGggUkVHX1NUQVJURU5ECisgICBleHRlbnNpb24uCisKKyAqIFRoZSBwcm9jZWR1cmUgdG8gYnVpbGQgR2l0IG9uIE1hYyBPUyBYIGZvciBUcmF2aXMgQ0kgaGFyZGNvZGVkIHRoZQorICAgaW50ZXJuYWwgZGlyZWN0b3J5IHN0cnVjdHVyZSB3ZSBhc3N1bWVkIEhvbWVCcmV3IHVzZXMsIHdoaWNoIHdhcyBhCisgICBuby1uby4gIFRoZSBwcm9jZWR1cmUgaGFzIGJlZW4gdXBkYXRlZCB0byBhc2sgSG9tZUJyZXcgdGhpbmdzIHdlCisgICBuZWVkIHRvIGtub3cgdG8gZml4IHRoaXMuCisKKyAqIFdoZW4gImdpdCByZWJhc2UgLWkiIGlzIGdpdmVuIGEgYnJva2VuIGluc3RydWN0aW9uLCBpdCB0b2xkIHRoZQorICAgdXNlciB0byBmaXggaXQgd2l0aCAiLS1lZGl0LXRvZG8iLCBidXQgZGlkbid0IHNheSB3aGF0IHRoZSBzdGVwCisgICBhZnRlciB0aGF0IHdhcyAoaS5lLiAiLS1jb250aW51ZSIpLgorCisgKiBEb2N1bWVudGF0aW9uIGFyb3VuZCB0b29scyB0byBpbXBvcnQgZnJvbSBDVlMgd2FzIGZhaXJseSBvdXRkYXRlZC4KKworICogImdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgbG9zdCB0aGUgcHJvZ3Jlc3MgZXllLWNhbmR5IGluCisgICBhIHJlY2VudCB1cGRhdGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQSBsb3ctbGV2ZWwgZnVuY3Rpb24gdmVyaWZ5X3BhY2tmaWxlKCkgd2FzIG1lYW50IHRvIHNob3cgZXJyb3JzCisgICB0aGF0IHdlcmUgZGV0ZWN0ZWQgd2l0aG91dCBkeWluZyBpdHNlbGYsIGJ1dCB1bmRlciBzb21lIGNvbmRpdGlvbnMKKyAgIGl0IGRpZG4ndCBhbmQgZGllZCBpbnN0ZWFkLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogV2hlbiAiZ2l0IGZldGNoIiB0cmllcyB0byBmaW5kIHdoZXJlIHRoZSBoaXN0b3J5IG9mIHRoZSByZXBvc2l0b3J5CisgICBpdCBydW5zIGluIGhhcyBkaXZlcmdlZCBmcm9tIHdoYXQgdGhlIG90aGVyIHNpZGUgaGFzLCBpdCBoYXMgYQorICAgbWVjaGFuaXNtIHRvIGF2b2lkIGRpZ2dpbmcgdG9vIGRlZXAgaW50byBpcnJlbGV2YW50IHNpZGUgYnJhbmNoZXMuCisgICBUaGlzIGhvd2V2ZXIgZGlkIG5vdCB3b3JrIHdlbGwgb3ZlciB0aGUgInNtYXJ0LWh0dHAiIHRyYW5zcG9ydCBkdWUKKyAgIHRvIGEgZGVzaWduIGJ1Zywgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEluIHRoZSBjb2RlcGF0aCB0aGF0IGNvbWVzIHVwIHdpdGggdGhlIGhvc3RuYW1lIHRvIGJlIHVzZWQgaW4gYW4KKyAgIGUtbWFpbCB3aGVuIHRoZSB1c2VyIGRpZG4ndCB0ZWxsIHVzLCB3ZSBsb29rZWQgYXQgdGhlIGFpX2Nhbm9ubmFtZQorICAgZmllbGQgaW4gc3RydWN0IGFkZHJpbmZvIHdpdGhvdXQgbWFraW5nIHN1cmUgaXQgaXMgbm90IE5VTEwgZmlyc3QuCisKKyAqICJnaXQgd29ya3RyZWUiLCBldmVuIHRob3VnaCBpdCB1c2VkIHRoZSBkZWZhdWx0X2FiYnJldiBzZXR0aW5nIHRoYXQKKyAgIG91Z2h0IHRvIGJlIGFmZmVjdGVkIGJ5IHRoZSBjb3JlLmFiYnJldiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBpZ25vcmVkCisgICB0aGUgdmFyaWFibGUgc2V0dGluZy4gIFRoZSBjb21tYW5kIGhhcyBiZWVuIHRhdWdodCB0byByZWFkIHRoZQorICAgZGVmYXVsdCBzZXQgb2YgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdG8gY29ycmVjdCB0aGlzLgorCisgKiAiZ2l0IGluaXQiIHRyaWVkIHRvIHJlY29yZCBjb3JlLndvcmt0cmVlIGluIHRoZSByZXBvc2l0b3J5J3MKKyAgICdjb25maWcnIGZpbGUgd2hlbiB0aGUgR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3YXMgc2V0IGFuZAorICAgaXQgd2FzIGRpZmZlcmVudCBmcm9tIHdoZXJlIEdJVF9ESVIgYXBwZWFycyBhcyAiLmdpdCIgYXQgaXRzIHRvcCwKKyAgIGJ1dCB0aGUgbG9naWMgd2FzIGZhdWx0eSB3aGVuIC5naXQgaXMgYSAiZ2l0ZGlyOiIgZmlsZSB0aGF0IHBvaW50cworICAgYXQgdGhlIHJlYWwgcGxhY2UsIGNhdXNpbmcgdHJvdWJsZSBpbiB3b3JraW5nIHRyZWVzIHRoYXQgYXJlCisgICBtYW5hZ2VkIGJ5ICJnaXQgd29ya3RyZWUiLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIENvZGVwYXRocyB0aGF0IHJlYWQgZnJvbSBhbiBvbi1kaXNrIGxvb3NlIG9iamVjdCB3ZXJlIHRvbyBsb29zZSBpbgorICAgdmFsaWRhdGluZyB0aGF0IHRoZXkgYXJlIHJlYWRpbmcgYSBwcm9wZXIgb2JqZWN0IGZpbGUgYW5kCisgICBzb21ldGltZXMgcmVhZCBwYXN0IHRoZSBkYXRhIHRoZXkgcmVhZCBmcm9tIHRoZSBkaXNrLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLiAgSC90IHRvIEd1c3Rhdm8gR3JpZWNvIGZvciByZXBvcnRpbmcuCisKKyAqIFRoZSBvcmlnaW5hbCBjb21tYW5kIGxpbmUgc3ludGF4IGZvciAiZ2l0IG1lcmdlIiwgd2hpY2ggd2FzICJnaXQKKyAgIG1lcmdlIDxtc2c+IEhFQUQgPHBhcmVudD4uLi4iLCBoYXMgYmVlbiBkZXByZWNhdGVkIGZvciBxdWl0ZSBzb21lCisgICB0aW1lLCBhbmQgImdpdCBndWkiIHdhcyB0aGUgbGFzdCBpbi10cmVlIHVzZXIgb2YgdGhlIHN5bnRheC4gIFRoaXMKKyAgIGlzIGZpbmFsbHkgZml4ZWQsIHNvIHRoYXQgd2UgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBkZXByZWNhdGlvbi4KKworICogQW4gYXV0aG9yIG5hbWUgdGhhdCBoYXMgYSBiYWNrc2xhc2gtcXVvdGVkIGRvdWJsZSBxdW90ZSBpbiB0aGUKKyAgIGh1bWFuIHJlYWRhYmxlIHBhcnQgKCJNeSBcImRvdWJsZSBxdW90ZWRcIiBuYW1lIiksIHdhcyBub3QgdW5xdW90ZWQKKyAgIGNvcnJlY3RseSB3aGlsZSBhcHBseWluZyBhIHBhdGNoIGZyb20gYSBwaWVjZSBvZiBlLW1haWwuCisKKyAqIERvYyB1cGRhdGUgdG8gY2xhcmlmeSB3aGF0ICJsb2cgLTMgLS1yZXZlcnNlIiBkb2VzLgorCisgKiBBbG1vc3QgZXZlcnlib2R5IHVzZXMgREVGQVVMVF9BQkJSRVYgdG8gcmVmZXIgdG8gdGhlIGRlZmF1bHQKKyAgIHNldHRpbmcgZm9yIHRoZSBhYmJyZXZpYXRpb24sIGJ1dCAiZ2l0IGJsYW1lIiBwZWVrZWQgaW50bworICAgdW5kZXJseWluZyB2YXJpYWJsZSBieXBhc3NpbmcgdGhlIG1hY3JvIGZvciBubyBnb29kIHJlYXNvbi4KKworICogVGhlICJncmFwaCIgQVBJIHVzZWQgaW4gImdpdCBsb2cgLS1ncmFwaCIgbWlzY291bnRlZCB0aGUgbnVtYmVyIG9mCisgICBvdXRwdXQgY29sdW1ucyBjb25zdW1lZCBzbyBmYXIgd2hlbiBkcmF3aW5nIGEgcGFkZGluZyBsaW5lLCB3aGljaAorICAgaGFzIGJlZW4gZml4ZWQ7IHRoaXMgZGlkIG5vdCBhZmZlY3QgYW55IGV4aXN0aW5nIGNvZGUgYXMgbm9ib2R5CisgICB0cmllZCB0byB3cml0ZSBhbnl0aGluZyBhZnRlciB0aGUgcGFkZGluZyBvbiBzdWNoIGEgbGluZSwgdGhvdWdoLgorCisgKiBUaGUgY29kZSB0aGF0IHBhcnNlcyB0aGUgZm9ybWF0IHBhcmFtZXRlciBvZiB0aGUgZm9yLWVhY2gtcmVmIGNvbW1hbmQKKyAgIGhhcyBzZWVuIGEgbWljcm8tb3B0aW1pemF0aW9uLgorCisgKiBXaGVuIHdlIHN0YXJ0ZWQgdG8gdXNlIGNVUkwgdG8gdGFsayB0byBhbiBpbWFwIHNlcnZlciwgd2UgZm9yZ290IHRvIGV4cGxpY2l0bHkgYWRkCisgICBpbWFwKHMpOi8vIGJlZm9yZSB0aGUgZGVzdGluYXRpb24uICBUbyBzb21lIGZvbGtzLCB0aGF0IGRpZG4ndCB3b3JrCisgICBhbmQgdGhlIGxpYnJhcnkgdHJpZWQgdG8gbWFrZSBIVFRQKHMpIHJlcXVlc3RzIGluc3RlYWQuCisKKyAqIFRoZSAuL2NvbmZpZ3VyZSBzY3JpcHQgZ2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIHdhcyB0YXVnaHQgaG93CisgICB0byBkZXRlY3Qgc3VwcG9ydCBvZiBTU0wgYnkgbGliY3VybCBiZXR0ZXIuCisKKyAqIFRoZSBjb21tYW5kLWxpbmUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRvCisgICBjb21wbGV0ZSAiZ2l0IGNtZCBebWFzPEhUPiIgdG8gY29tcGxldGUgdGhlIG5lZ2F0aXZlIGVuZCBvZgorICAgcmVmZXJlbmNlIHRvICJnaXQgY21kIF5tYXN0ZXIiLgorICAgKG1lcmdlIDQ5NDE2YWQyMmEgY3AvY29tcGxldGlvbi1uZWdhdGl2ZS1yZWZzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGV4aXN0aW5nICJnaXQgZmV0Y2ggLS1kZXB0aD08bj4iIG9wdGlvbiB3YXMgaGFyZCB0byB1c2UKKyAgIGNvcnJlY3RseSB3aGVuIG1ha2luZyB0aGUgaGlzdG9yeSBvZiBhbiBleGlzdGluZyBzaGFsbG93IGNsb25lCisgICBkZWVwZXIuICBBIG5ldyBvcHRpb24sICItLWRlZXBlbj08bj4iLCBoYXMgYmVlbiBhZGRlZCB0byBtYWtlIHRoaXMKKyAgIGVhc2llciB0byB1c2UuICAiZ2l0IGNsb25lIiBhbHNvIGxlYXJuZWQgIi0tc2hhbGxvdy1zaW5jZT08ZGF0ZT4iCisgICBhbmQgIi0tc2hhbGxvdy1leGNsdWRlPTx0YWc+IiBvcHRpb25zIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwZWNpZnkKKyAgICJJIGFtIGludGVyZXN0ZWQgb25seSBpbiB0aGUgcmVjZW50IE4gbW9udGhzIHdvcnRoIG9mIGhpc3RvcnkiIGFuZAorICAgIkdpdmUgbWUgb25seSB0aGUgaGlzdG9yeSBzaW5jZSB0aGF0IHZlcnNpb24iLgorICAgKG1lcmdlIGNjY2Y3NGUyZGEgbmQvc2hhbGxvdy1kZWVwZW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIC0tcmV2ZXJzZSBPTEQgcGF0aCIgaXMgbm93IERXSU1tZWQgdG8gc2hvdyBob3cgbGluZXMKKyAgIGluIHBhdGggaW4gYW4gb2xkIHJldmlzaW9uIE9MRCBoYXZlIHN1cnZpdmVkIHVwIHRvIHRoZSBjdXJyZW50CisgICBjb21taXQuCisgICAobWVyZ2UgZTFkMDk3MDFhNCBqYy9ibGFtZS1yZXZlcnNlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGh0dHAuZW1wdHlhdXRoIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgYSB3YXkgdG8gYWxsb3cgYW4gZW1wdHkgdXNlcm5hbWUgdG8KKyAgIHBhc3Mgd2hlbiBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZSB1c2luZyBtZWNoYW5pc21zIGxpa2UKKyAgIEtlcmJlcm9zLiAgV2UgdG9vayBhbiB1bnNwZWNpZmllZCAoTlVMTCkgdXNlcm5hbWUgYW5kIHNlbnQgIjoiCisgICAoaS5lLiBubyB1c2VybmFtZSwgbm8gcGFzc3dvcmQpIHRvIENVUkxPUFRfVVNFUlBXRCwgYnV0IGRpZCBub3QgZG8KKyAgIHRoZSBzYW1lIHdoZW4gdGhlIHVzZXJuYW1lIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGFuIGVtcHR5IHN0cmluZy4KKworICogImdpdCBjbG9uZSIgb2YgYSBsb2NhbCByZXBvc2l0b3J5IGNhbiBiZSBkb25lIGF0IHRoZSBmaWxlc3lzdGVtCisgICBsZXZlbCwgYnV0IHRoZSBjb2RlcGF0aCBkaWQgbm90IGNoZWNrIGVycm9ycyB3aGlsZSBjb3B5aW5nIGFuZAorICAgYWRqdXN0aW5nIHRoZSBmaWxlIHRoYXQgbGlzdHMgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMuCisKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgY29tbWl0IiB3YXMgdXBkYXRlZCB0byBjbGFyaWZ5IHRoYXQgImNvbW1pdAorICAgLXAgPHBhdGhzPiIgYWRkcyB0byB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgaW5kZXggdG8gY29tZSB1cAorICAgd2l0aCB3aGF0IHRvIGNvbW1pdC4KKworICogQSBzdHJheSBzeW1ib2xpYyBsaW5rIGluIHRoZSAkR0lUX0RJUi9yZWZzLyBkaXJlY3RvcnkgY291bGQgbWFrZSBuYW1lCisgICByZXNvbHV0aW9uIGxvb3AgZm9yZXZlciwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgInN1Ym1vZHVsZS48bmFtZT4ucGF0aCIgc3RvcmVkIGluIC5naXRtb2R1bGVzIGlzIG5ldmVyIGNvcGllZAorICAgdG8gLmdpdC9jb25maWcgYW5kIHN1Y2ggYSBrZXkgaW4gLmdpdC9jb25maWcgaGFzIG5vIG1lYW5pbmcsIGJ1dAorICAgdGhlIGRvY3VtZW50YXRpb24gZGVzY3JpYmVkIGl0IG5leHQgdG8gc3VibW9kdWxlLjxuYW1lPi51cmwKKyAgIGFzIGlmIGJvdGggYmVsb25nIHRvIC5naXQvY29uZmlnLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogSW4gYSB3b3JrdHJlZSBjcmVhdGVkIHZpYSAiZ2l0CisgICB3b3JrdHJlZSIsICJnaXQgY2hlY2tvdXQiIGF0dGVtcHRzIHRvIHByb3RlY3QgdXNlcnMgZnJvbSBjb25mdXNpb24KKyAgIGJ5IHJlZnVzaW5nIHRvIGNoZWNrIG91dCBhIGJyYW5jaCB0aGF0IGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4KKyAgIGFub3RoZXIgd29ya3RyZWUuICBIb3dldmVyLCB0aGlzIGFsc28gcHJldmVudGVkIGNoZWNraW5nIG91dCBhCisgICBicmFuY2ggd2hpY2ggaXMgZGVzaWduYXRlZCBhcyB0aGUgcHJpbWFyeSBicmFuY2ggb2YgYSBiYXJlCisgICByZXBvc2l0b3J5LCBpbiBhIHdvcmt0cmVlIHRoYXQgaXMgY29ubmVjdGVkIHRvIHRoZSBiYXJlCisgICByZXBvc2l0b3J5LiAgVGhlIGNoZWNrIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBhbGxvdyBpdC4KKworICogImdpdCByZWJhc2UiIGltbWVkaWF0ZWx5IGFmdGVyICJnaXQgY2xvbmUiIGZhaWxlZCB0byBmaW5kIHRoZSBmb3JrCisgICBwb2ludCBmcm9tIHRoZSB1cHN0cmVhbS4KKworICogV2hlbiBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHRoYXQgaGFzIG1hbnkgdGFncyB0aGF0IGFyZSBpcnJlbGV2YW50CisgICB0byBicmFuY2hlcyB3ZSBhcmUgZm9sbG93aW5nLCB3ZSB1c2VkIHRvIHdhc3RlIHdheSB0b28gbWFueSBjeWNsZXMKKyAgIGNoZWNraW5nIGlmIHRoZSBvYmplY3QgcG9pbnRlZCBhdCBieSBhIHRhZyAodGhhdCB3ZSBhcmUgbm90CisgICBnb2luZyB0byBmZXRjaCEpIGV4aXN0cyBpbiBvdXIgcmVwb3NpdG9yeSB0b28gY2FyZWZ1bGx5LgorCisgKiBQcm90ZWN0IG91ciBjb2RlIGZyb20gb3Zlci1lYWdlciBjb21waWxlcnMuCisKKyAqIFJlY2VudCBnaXQgYWxsb3dzIHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoIHRvIHVzZSBhIHNwZWNpYWwgdG9rZW4KKyAgICIuIiBpbnN0ZWFkIG9mIHRoZSBicmFuY2ggbmFtZTsgdGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZAorICAgdG8gZGVzY3JpYmUgaXQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgYXR0ZW1wdHMgdG8gcGljayB1cCB2YWxpZCBlLW1haWxzIGZyb20gdGhlCisgICB0cmFpbGVycywgYnV0IHBlb3BsZSBpbiB0aGUgcmVhbCB3b3JsZCB3cml0ZSBub24tYWRkcmVzc2VzIHRoZXJlLCBsaWtlCisgICAiQ2M6IFN0YWJsZSA8YWRkQHJlLnNzPiAjIDQuOCsiLCB3aGljaCBicm9rZSB0aGUgb3V0cHV0IGRlcGVuZGluZworICAgb24gdGhlIGF2YWlsYWJpbGl0eSBhbmQgdmludGFnZSBvZiB0aGUgTWFpbDo6QWRkcmVzcyBwZXJsIG1vZHVsZS4KKyAgIChtZXJnZSBkY2ZhZmM1MjE0IG1tL3NlbmQtZW1haWwtY2MtY3J1ZnQtYWZ0ZXItYWRkcmVzcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBUcmF2aXMgQ0kgY29uZmlndXJhdGlvbiB3ZSBzaGlwIHJhbiB0aGUgdGVzdHMgd2l0aCB0aGUgLS12ZXJib3NlCisgICBvcHRpb24gYnV0IHRoaXMgcmlza3Mgbm9uLVRBUCBvdXRwdXQgdGhhdCBoYXBwZW5zIHRvIGJlICJvayIgdG8gYmUKKyAgIG1pc2ludGVycHJldGVkIGFzIFRBUCBzaWduYWxsaW5nIGEgdGVzdCB0aGF0IHBhc3NlZC4gIFRoaXMgcmVzdWx0ZWQKKyAgIGluIHVubmVjZXNzYXJ5IGZhaWx1cmVzLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgYnkgaW50cm9kdWNpbmcgYQorICAgbmV3IG1vZGUgdG8gcnVuIG91ciB0ZXN0cyBpbiB0aGUgdGVzdCBoYXJuZXNzIHRvIHNlbmQgdGhlIHZlcmJvc2UKKyAgIG91dHB1dCBzZXBhcmF0ZWx5IHRvIHRoZSBsb2cgZmlsZS4KKworICogU29tZSBBc2NpaURvYyBmb3JtYXR0ZXJzIG1pc2hhbmRsZSBhIGRpc3BsYXllZCBpbGx1c3RyYXRpb24gd2l0aAorICAgdGFicyBpbiBpdC4gIEFkanVzdCBhIGZldyBvZiB0aGVtIGluIG1lcmdlLWJhc2UgZG9jdW1lbnRhdGlvbiB0bworICAgd29yayBhcm91bmQgdGhlbS4KKworICogRml4ZWQgYSBtaW5vciByZWdyZXNzaW9uIGluICJnaXQgc3VibW9kdWxlIiB0aGF0IHdhcyBpbnRyb2R1Y2VkCisgICB3aGVuIG1vcmUgaGVscGVyIGZ1bmN0aW9ucyB3ZXJlIHJlaW1wbGVtZW50ZWQgaW4gQy4KKyAgIChtZXJnZSA3N2I2M2FjMzFlIHNiL3N1Ym1vZHVsZS1pZ25vcmUtdHJhaWxpbmctc2xhc2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0aGF0IHdlIGhhdmUgdXNlZCBmb3IgdGhlIHBhc3QgMTArIHllYXJzIHRvIGN5Y2xlCisgICA0LWVsZW1lbnQgcmluZyBidWZmZXJzIHR1cm5zIG91dCB0byBiZSBub3QgcXVpdGUgcG9ydGFibGUgaW4KKyAgIHRoZW9yZXRpY2FsIHdvcmxkLgorICAgKG1lcmdlIGJiODQ3MzVjODAgcnMvcmluZy1idWZmZXItd3JhcGFyb3VuZCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGFlbW9uIiB1c2VkIGZpeGVkLWxlbmd0aCBidWZmZXJzIHRvIHR1cm4gVVJMcyB0byB0aGUKKyAgIHJlcG9zaXRvcnkgdGhlIGNsaWVudCBhc2tlZCBmb3IgaW50byB0aGUgc2VydmVyIHNpZGUgZGlyZWN0b3J5CisgICBwYXRocywgdXNpbmcgc25wcmludGYoKSB0byBhdm9pZCBvdmVyZmxvd2luZyB0aGVzZSBidWZmZXJzLCBidXQKKyAgIGFsbG93ZWQgcG9zc2libHkgdHJ1bmNhdGVkIHBhdGhzIHRvIHRoZSBkaXJlY3RvcnkuICBUaGlzIGhhcyBiZWVuCisgICB0aWdodGVuZWQgdG8gcmVqZWN0IHN1Y2ggYSByZXF1ZXN0IHRoYXQgY2F1c2VzIGFuIG92ZXJsb25nIHBhdGggdG8gYmUKKyAgIHNlcnZlZC4KKyAgIChtZXJnZSA2YmRiMDA4M2JlIGprL2RhZW1vbi1wYXRoLW9rLWNoZWNrLXRydW5jYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvIGdpdC1zaC1zZXR1cCAoYSBsaWJyYXJ5IG9mIHNoZWxsIGZ1bmN0aW9ucyB0aGF0CisgICBhcmUgdXNlZCBieSBvdXIgaW4tdHJlZSBzY3JpcHRlZCBQb3JjZWxhaW4gY29tbWFuZHMpIGluY2x1ZGVkCisgICBhbm90aGVyIHNoZWxsIGxpYnJhcnkgZ2l0LXNoLWkxOG4gd2l0aG91dCBzcGVjaWZ5aW5nIHdoZXJlIGl0IGlzLAorICAgcmVseWluZyBvbiB0aGUgJFBBVEguICBUaGlzIGhhcyBiZWVuIGZpeGVkIHRvIGJlIG1vcmUgZXhwbGljaXQgYnkKKyAgIHByZWZpeGluZyB3aXRoICQoZ2l0IC0tZXhlYy1wYXRoKSBvdXRwdXQuCisgICAobWVyZ2UgMTA3MzA5NGYzMCBhay9zaC1zZXR1cC1kb3Qtc291cmNlLWkxOG4tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogRml4IGZvciBhIHJhY3kgZmFsc2UtcG9zaXRpdmUgdGVzdCBmYWlsdXJlLgorICAgKG1lcmdlIGZkZjRmNmM3OWIgYXMvbWVyZ2UtYXR0ci1zbGVlcCBsYXRlciB0byBtYWludCkuCisKKyAqIFBvcnRhYmlsaXR5IHVwZGF0ZSBhbmQgd29ya2Fyb3VuZCBmb3IgYnVpbGRzIG9uIHJlY2VudCBNYWMgT1MgWC4KKyAgIChtZXJnZSBhMjk2YmMwMTMyIGxzL21hY29zLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFVzaW5nIGEgJShIRUFEKSBwbGFjZWhvbGRlciBpbiAiZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIgb3B0aW9uCisgICBjYXVzZWQgdGhlIGNvbW1hbmQgdG8gc2VnZmF1bHQgd2hlbiBvbiBhbiB1bmJvcm4gYnJhbmNoLgorICAgKG1lcmdlIDg0Njc5ZDQ3MGQgamMvZm9yLWVhY2gtcmVmLWhlYWQtc2VnZmF1bHQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggdGhlIGNvcmUuY29tbWVudGNoYXIKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIHR3byByZWFzb25zLCBib3RoIG9mIHdoaWNoIGhhdmUgYmVlbgorICAgZml4ZWQuCisgICAobWVyZ2UgODgyY2QyMzc3NyBqcy9yZWJhc2UtaS1jb21tZW50Y2hhci1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBtaW5vciBkb2MsIHRlc3QgYW5kIGJ1aWxkIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW51cHMuCisgICAobWVyZ2UgNWMyMzhlMjlhOCBqay9jb21tb24tbWFpbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWE1NzQ5ZTQ1YiBhay9wcmUtcmVjZWl2ZS1ob29rLXRlbXBsYXRlLW1vZGVmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDZkODM0YWM4ZjEgamsvcmViYXNlLWNvbmZpZy1pbnNuLWZtdC1kb2NmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRlOWY3ZmEzYjAgcnMvY29tbWl0LXBwdHItc2ltcGxpZnkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQyNTlkNjkzZmMgc2MvZm10LW1lcmdlLW1zZy1kb2MtbWFya3VwLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjhmYWI3YjIzZCBuZC90ZXN0LWhlbHBlcnMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGMyYmIwYzFkMWUgcnMvY29jY2kgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDMyODViN2JhZGIgcHMvY29tbW9uLWluZm8tZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYjA5MDgyMmU4IG5kL3dvcmt0cmVlLWxvY2sgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRiZDQ4OGVhN2MgamsvY3JlYXRlLWJyYW5jaC1yZW1vdmUtdW51c2VkLXBhcmFtIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5NzRlMDA0NGQ2IHRrL2RpZmZjb3JlLWRlbHRhLXJlbW92ZS11bnVzZWQgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzVjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMS50eHQKQEAgLTAsMCArMSwxNjggQEAKK0dpdCB2Mi4xMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTEKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBkZWZhdWx0IFRyYXZpcy1DSSBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBuZXdlciBQNCBhbmQgR2l0TEZTLgorCisgKiBUaGUgY2hhcmFjdGVyIHdpZHRoIHRhYmxlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gbWF0Y2ggVW5pY29kZSA5LjAKKworICogVXBkYXRlIHRoZSBpc2F0dHkoKSBlbXVsYXRpb24gZm9yIFdpbmRvd3MgYnkgdXBkYXRpbmcgdGhlIHByZXZpb3VzCisgICBoYWNrIHRoYXQgZGVwZW5kZWQgb24gaW50ZXJuYWxzIG9mIChvbGRlcikgTVNWQyBydW50aW1lLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIiBmYWlsZWQgd2l0aCBhIG1vcmUgcmVjZW50IG5vdGF0aW9uIGxpa2UKKyAgICJIRUFEXi0xIiBhbmQgIkhFQUReISIuCisKKyAqIEFuIGVtcHR5IGRpcmVjdG9yeSBpbiBhIHdvcmtpbmcgdHJlZSB0aGF0IGNhbiBzaW1wbHkgYmUgbnVrZWQgdXNlZAorICAgdG8gaW50ZXJmZXJlIHdoaWxlIG1lcmdpbmcgb3IgY2hlcnJ5LXBpY2tpbmcgYSBjaGFuZ2UgdG8gY3JlYXRlIGEKKyAgIHN1Ym1vZHVsZSBkaXJlY3RvcnkgdGhlcmUsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLi4KKworICogVGhlIGNvZGUgaW4gImdpdCBwdXNoIiB0byBjb21wdXRlIGlmIGFueSBjb21taXQgYmVpbmcgcHVzaGVkIGluIHRoZQorICAgc3VwZXJwcm9qZWN0IGJpbmRzIGEgY29tbWl0IGluIGEgc3VibW9kdWxlIHRoYXQgaGFzbid0IGJlZW4gcHVzaGVkCisgICBvdXQgd2FzIG92ZXJseSBpbmVmZmljaWVudCwgbWFraW5nIGl0IHVudXNhYmxlIGV2ZW4gZm9yIGEgc21hbGwKKyAgIHByb2plY3QgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBzdWJtb2R1bGUgYnV0IGhhdmUgYSByZWFzb25hYmxlCisgICBudW1iZXIgb2YgcmVmcy4KKworICogImdpdCBwdXNoIC0tZHJ5LXJ1biAtLXJlY3Vyc2Utc3VibW9kdWxlPW9uLWRlbWFuZCIgd2Fzbid0CisgICAiLS1kcnktcnVuIiBpbiB0aGUgc3VibW9kdWxlcy4KKworICogVGhlIG91dHB1dCBmcm9tICJnaXQgd29ya3RyZWUgbGlzdCIgd2FzIG1hZGUgaW4gcmVhZGRpcigpIG9yZGVyLAorICAgYW5kIHdhcyB1bnN0YWJsZS4KKworICogbWVyZ2V0b29sLjx0b29sPi50cnVzdEV4aXRDb2RlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZGlkIG5vdCBhcHBseQorICAgdG8gYnVpbHQtaW4gdG9vbHMsIGJ1dCBub3cgaXQgZG9lcy4KKworICogImdpdCBwNCIgTEZTIHN1cHBvcnQgd2FzIGJyb2tlbiB3aGVuIExGUyBzdG9yZXMgYW4gZW1wdHkgYmxvYi4KKworICogRml4IGEgY29ybmVyIGNhc2UgaW4gbWVyZ2UtcmVjdXJzaXZlIHJlZ3Jlc3Npb24gdGhhdCBjcmVwdCBpbgorICAgZHVyaW5nIDIuMTAgZGV2ZWxvcG1lbnQgY3ljbGUuCisKKyAqIFVwZGF0ZSB0aGUgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgZHVtYi1odHRwIGNsaWVudCB3aGVuIGl0IGZhaWxzCisgICB0byBvYnRhaW4gbG9vc2Ugb2JqZWN0czsgd2UgdXNlZCB0byBnaXZlIHNlbnNpYmxlIGVycm9yIG1lc3NhZ2UKKyAgIG9ubHkgdXBvbiA0MDQgYnV0IHdlIG5vdyBmb3JiaWQgdW5leHBlY3RlZCByZWRpcmVjdHMgdGhhdCBuZWVkcyB0bworICAgYmUgcmVwb3J0ZWQgd2l0aCBzb21ldGhpbmcgc2Vuc2libGUuCisKKyAqIFdoZW4gZGlmZi5yZW5hbWVzIGNvbmZpZ3VyYXRpb24gaXMgb24gKGFuZCB3aXRoIEdpdCAyLjkgYW5kIGxhdGVyLAorICAgaXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBtYWRlIGl0IHdvcnNlKSwgImdpdCBzdGFzaCIKKyAgIG1pc2JlaGF2ZWQgaWYgYSBmaWxlIGlzIHJlbW92ZWQgYW5kIGFub3RoZXIgZmlsZSB3aXRoIGEgdmVyeQorICAgc2ltaWxhciBjb250ZW50IGlzIGFkZGVkLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgZGlkIG5vdCB0YWtlICItLW5vLWFiYnJldiIgb3B0aW9uLgorCisgKiAiZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYiIGhhZCBhIG1pbm9yIHJlZ3Jlc3Npb24gd2hlbiBzdGFydGVkIGZyb20KKyAgIGEgc3ViZGlyZWN0b3J5LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLW9ubHkiIChubyBwYXRoc3BlYykgd2l0aCBkaXJ0eSBpbmRleAorICAgb3VnaHQgdG8gYmUgYW4gYWNjZXB0YWJsZSB3YXkgdG8gY3JlYXRlIGEgbmV3IGNvbW1pdCB0aGF0IGRvZXMgbm90CisgICBjaGFuZ2UgYW55IHBhdGhzLCBidXQgaXQgd2FzIGZvcmJpZGRlbiwgcGVyaGFwcyBiZWNhdXNlIG5vYm9keQorICAgbmVlZGVkIGl0IHNvIGZhci4KKworICogQSBwYXRobmFtZSB0aGF0IGJlZ2lucyB3aXRoICIvLyIgb3IgIlxcIiBvbiBXaW5kb3dzIGlzIHNwZWNpYWwgYnV0CisgICBwYXRoIG5vcm1hbGl6YXRpb24gbG9naWMgd2FzIHVuYXdhcmUgb2YgaXQuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIsIHdoZW4gdGhlcmUgaXMgbm8gbmV3IGNvbW1pdHMgb24gb3VyIHNpZGUgc2luY2UKKyAgIHdlIGZvcmtlZCBmcm9tIHRoZSB1cHN0cmVhbSwgc2hvdWxkIGJlIGFibGUgdG8gZmFzdC1mb3J3YXJkIHdpdGhvdXQKKyAgIGludm9raW5nICJnaXQgcmViYXNlIiwgYnV0IGl0IGRpZG4ndC4KKworICogVGhlIHdheSB0byBzcGVjaWZ5IGhvdGtleXMgdG8gInh4ZGlmZiIgdGhhdCBpcyB1c2VkIGJ5ICJnaXQKKyAgIG1lcmdldG9vbCIgaGFzIGJlZW4gbW9kZXJuaXplZCB0byBtYXRjaCByZWNlbnQgdmVyc2lvbnMgb2YgeHhkaWZmLgorCisgKiBVbmxpa2UgImdpdCBhbSAtLWFib3J0IiwgImdpdCBjaGVycnktcGljayAtLWFib3J0IiBtb3ZlZCBIRUFEIGJhY2sKKyAgIHRvIHdoZXJlIGNoZXJyeS1waWNrIHN0YXJ0ZWQgd2hpbGUgcGlja2luZyBtdWx0aXBsZSBjaGFuZ2VzLCB3aGVuCisgICB0aGUgY2hlcnJ5LXBpY2sgc3RvcHBlZCB0byBhc2sgZm9yIGhlbHAgZnJvbSB0aGUgdXNlciwgYW5kIHRoZSB1c2VyCisgICBkaWQgImdpdCByZXNldCAtLWhhcmQiIHRvIGEgZGlmZmVyZW50IGNvbW1pdCBpbiBvcmRlciB0byByZS1hdHRlbXB0CisgICB0aGUgb3BlcmF0aW9uLgorCisgKiBDb2RlIGNsZWFudXAgaW4gc2hhbGxvdyBib3VuZGFyeSBjb21wdXRhdGlvbi4KKworICogQSByZWNlbnQgdXBkYXRlIHRvIHJlY2VpdmUtcGFjayB0byBtYWtlIGl0IGVhc2llciB0byBkcm9wIGdhcmJhZ2UKKyAgIG9iamVjdHMgbWFkZSBpdCBjbGVhciB0aGF0IEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTIGNhbm5vdAorICAgaGF2ZSBhIHBhdGhuYW1lIHdpdGggYSBjb2xvbiBpbiBpdCAobm8gc3VycHJpc2UhKSwgYW5kIHRoaXMgaW4gdHVybgorICAgbWFkZSBpdCBpbXBvc3NpYmxlIHRvIHB1c2ggaW50byBhIHJlcG9zaXRvcnkgYXQgc3VjaCBhIHBhdGguICBUaGlzCisgICBoYXMgYmVlbiBmaXhlZCBieSBpbnRyb2R1Y2luZyBhIHF1b3RpbmcgbWVjaGFuaXNtIHVzZWQgd2hlbgorICAgYXBwZW5kaW5nIHN1Y2ggYSBwYXRoIHRvIHRoZSBjb2xvbi1zZXBhcmF0ZWQgbGlzdC4KKworICogVGhlIGZ1bmN0aW9uIHVzYWdlX21zZ19vcHQoKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHNheSAiZmF0YWw6IgorICAgYmVmb3JlIHRoZSBjdXN0b20gbWVzc2FnZSBwcm9ncmFtcyBnaXZlLCB3aGVuIHRoZXkgd2FudCB0byBkaWUKKyAgIHdpdGggYSBtZXNzYWdlIGFib3V0IHdyb25nIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvbGxvd2VkIGJ5IHRoZQorICAgc3RhbmRhcmQgdXNhZ2Ugc3RyaW5nLgorCisgKiAiZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiIgbmVlZHMgYW4gYWNjZXNzIHRvIGFuIGV4aXN0aW5nIHJlcG9zaXRvcnksCisgICBidXQgImdpdCBpbmRleC1wYWNrIGZpbGUucGFjayIgdG8gZ2VuZXJhdGUgYW4gLmlkeCBmaWxlIHRoYXQKKyAgIGNvcnJlc3BvbmRzIHRvIGEgcGFja2ZpbGUgZG9lcyBub3QuCisKKyAqIEZpeCBmb3IgTkRFQlVHIGJ1aWxkcy4KKworICogQSBsYXp5ICJnaXQgcHVzaCIgd2l0aG91dCByZWZzcGVjIGRpZCBub3QgaW50ZXJuYWxseSB1c2UgYSBmdWxseQorICAgc3BlY2lmaWVkIHJlZnNwZWMgdG8gcGVyZm9ybSAnY3VycmVudCcsICdzaW1wbGUnLCBvciAndXBzdHJlYW0nCisgICBwdXNoLCBjYXVzaW5nIHVubmVjZXNzYXJ5ICJhbWJpZ3VvdXMgcmVmIiBlcnJvcnMuCisKKyAqICJnaXQgcDQiIG1pc2JlaGF2ZWQgd2hlbiBzd2FwcGluZyBhIGRpcmVjdG9yeSBhbmQgYSBzeW1ib2xpYyBsaW5rLgorCisgKiBFdmVuIHRob3VnaCBhbiBmaXggd2FzIGF0dGVtcHRlZCBpbiBHaXQgMi45LjMgZGF5cywgYnV0IHJ1bm5pbmcKKyAgICJnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiIgZnJvbSBhIHN1YmRpcmVjdG9yeSBuZXZlciB3b3JrZWQuIFRoaXMKKyAgIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IHA0IiB0aGF0IHRyYWNrcyBtdWx0aXBsZSBwNCBwYXRocyBpbXBvcnRlZCBhIHNpbmdsZSBjaGFuZ2VsaXN0CisgICB0aGF0IHRvdWNoZXMgZmlsZXMgaW4gdGhlc2UgbXVsdGlwbGUgcGF0aHMgYXMgb25lIGNvbW1pdCwgZm9sbG93ZWQKKyAgIGJ5IG1hbnkgZW1wdHkgY29tbWl0cy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIEEgcG90ZW50aWFsIGJ1dCB1bmxpa2VseSBidWZmZXIgb3ZlcmZsb3cgaW4gV2luZG93cyBwb3J0IGhhcyBiZWVuCisgICBmaXhlZC4KKworICogV2hlbiB0aGUgaHR0cCBzZXJ2ZXIgZ2l2ZXMgYW4gaW5jb21wbGV0ZSByZXNwb25zZSB0byBhIHNtYXJ0LWh0dHAKKyAgIHJwYyBjYWxsLCBpdCBjb3VsZCBsZWFkIHRvIGNsaWVudCB3YWl0aW5nIGZvciBhIGZ1bGwgcmVzcG9uc2UgdGhhdAorICAgd2lsbCBuZXZlciBjb21lLiAgVGVhY2ggdGhlIGNsaWVudCBzaWRlIHRvIG5vdGljZSB0aGlzIGNvbmRpdGlvbgorICAgYW5kIGFib3J0IHRoZSB0cmFuc2Zlci4KKworICogU29tZSBwbGF0Zm9ybXMgbm8gbG9uZ2VyIHVuZGVyc3RhbmQgImxhdGluLTEiIHRoYXQgaXMgc3RpbGwgc2VlbiBpbgorICAgdGhlIHdpbGQgaW4gZS1tYWlsIGhlYWRlcnM7IHJlcGxhY2UgdGhlbSB3aXRoICJpc28tODg1OS0xIiB0aGF0IGlzCisgICBtb3JlIHdpZGVseSBrbm93biB3aGVuIGNvbnZlcnNpb24gZmFpbHMgZnJvbS90byBpdC4KKworICogVXBkYXRlIHRoZSBwcm9jZWR1cmUgdG8gZ2VuZXJhdGUgInRhZ3MiIGZvciBkZXZlbG9wZXIgc3VwcG9ydC4KKworICogVXBkYXRlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBNYWNPU1ggdGVzdCBlbnZpcm9ubWVudCB1c2VkIGJ5CisgICBUcmF2aXNDSS4KKworICogQSBmZXcgZ2l0LXN2biB1cGRhdGVzLgorCisgKiBDb21wcmVzc2lvbiBzZXR0aW5nIGZvciBwcm9kdWNpbmcgcGFja2ZpbGVzIHdlcmUgc3ByZWFkIGFjcm9zcworICAgdGhyZWUgY29kZXBhdGhzLCBvbmUgb2Ygd2hpY2ggZGlkIG5vdCBob25vciBhbnkgY29uZmlndXJhdGlvbi4KKyAgIFVuaWZ5IHRoZXNlIHNvIHRoYXQgYWxsIG9mIHRoZW0gaG9ub3IgY29yZS5jb21wcmVzc2lvbiBhbmQKKyAgIHBhY2suY29tcHJlc3Npb24gdmFyaWFibGVzIHRoZSBzYW1lIHdheS4KKworICogImdpdCBmYXN0LWltcG9ydCIgc29tZXRpbWVzIG1pc2hhbmRsZWQgd2hpbGUgcmViYWxhbmNpbmcgbm90ZXMKKyAgIHRyZWUsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvIHRoZSBkZWZhdWx0IGFiYnJldmlhdGlvbiBsZW5ndGggdGhhdCBhdXRvLXNjYWxlcworICAgbGFja2VkIGRvY3VtZW50YXRpb24gdXBkYXRlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIExlYWthZ2Ugb2YgbG9ja2ZpbGVzIGluIHRoZSBjb25maWcgc3Vic3lzdGVtIGhhcyBiZWVuIGZpeGVkLgorCisgKiBJdCBpcyBuYXR1cmFsIHRoYXQgImdpdCBnYyAtLWF1dG8iIG1heSBub3QgYXR0ZW1wdCB0byBwYWNrCisgICBldmVyeXRoaW5nIGludG8gYSBzaW5nbGUgcGFjaywgYW5kIHRoZXJlIGlzIG5vIHBvaW50IGluIHdhcm5pbmcKKyAgIHdoZW4gdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdGhlIHN5c3RlbSB0byB1c2UgdGhlIHBhY2sgYml0bWFwLAorICAgbGVhZGluZyB0byBkaXNhYmxpbmcgZnVydGhlciAiZ2MiLgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3QgcmVhZCB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kCisgICBmYWlsZWQgdG8gbm90aWNlIGEgZmlsZSB0aGF0IGlzIG1hcmtlZCBhcyBiaW5hcnkgdmlhIHRoZSB1c2VyZGlmZgorICAgZHJpdmVyIGNvbmZpZ3VyYXRpb24uCisKKyAqICJnaXQgYmxhbWUgLS1wb3JjZWxhaW4iIG1pc2lkZW50aWZpZWQgdGhlICJwcmV2aW91cyIgPGNvbW1pdCwgcGF0aD4KKyAgIHBhaXIgKGFrYSAic291cmNlIikgd2hlbiBjb250ZW50cyBjYW1lIGZyb20gdHdvIG9yIG1vcmUgZmlsZXMuCisKKyAqICJnaXQgcmViYXNlIC1pIiB3aXRoIGEgcmVjZW50IHVwZGF0ZSBzdGFydGVkIHNob3dpbmcgYW4gaW5jb3JyZWN0CisgICBjb3VudCB3aGVuIHNxdWFzaGluZyBtb3JlIHRoYW4gMTAgY29tbWl0cy4KKworICogImdpdCA8Y21kPiBAe3B1c2h9IiBvbiBhIGRldGFjaGVkIEhFQUQgdXNlZCB0byBzZWdmYXVsdDsgaXQgaGFzCisgICBiZWVuIGNvcnJlY3RlZCB0byBlcnJvciBvdXQgd2l0aCBhIG1lc3NhZ2UuCisKKyAqIFRpZ2h0ZW4gYSB0ZXN0IHRvIGF2b2lkIG1pc3Rha2luZyBhbiBleHRlbmRlZCBFUkUgcmVnZXhwIGVuZ2luZSBhcworICAgYSBQUkUgcmVnZXhwIGVuZ2luZS4KKworICogVHlwaW5nIF5DIHRvIHBhZ2VyLCB3aGljaCB1c3VhbGx5IGRvZXMgbm90IGtpbGwgaXQsIGtpbGxlZCBHaXQgYW5kCisgICB0b29rIHRoZSBwYWdlciBkb3duIGFzIGEgY29sbGF0ZXJhbCBkYW1hZ2UgaW4gY2VydGFpbiBwcm9jZXNzLXRyZWUKKyAgIHN0cnVjdHVyZS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Mjg4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMi50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYyLjExLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMS4xCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzYjc4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4zLnR4dApAQCAtMCwwICsxLDQgQEAKK0dpdCB2Mi4xMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZvcndhcmQtcG9ydHMgdGhlIGZpeCBmb3IgInNzaDovLy4uLiIgVVJMIGZyb20gR2l0IHYyLjcuNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNGRhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuNC50eHQKQEAgLTAsMCArMSwxNyBAQAorR2l0IHYyLjExLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMS4zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY3Zzc2VydmVyIiBubyBsb25nZXIgaXMgaW52b2tlZCBieSAiZ2l0IGRhZW1vbiIgYnkgZGVmYXVsdCwKKyAgIGFzIGl0IGlzIG9sZCBhbmQgbGFyZ2VseSB1bm1haW50YWluZWQuCisKKyAqIFZhcmlvdXMgUGVybCBzY3JpcHRzIGRpZCBub3QgdXNlIHNhZmVfcGlwZV9jYXB0dXJlKCkgaW5zdGVhZCBvZgorICAgYmFja3RpY2tzLCBsZWF2aW5nIHRoZW0gc3VzY2VwdGlibGUgdG8gZW5kLXVzZXIgaW5wdXQuICBUaGV5IGhhdmUKKyAgIGJlZW4gY29ycmVjdGVkLgorCitDcmVkaXRzIGdvIHRvIGpvZXJuY2hlbiA8am9lcm5jaGVuQHBoZW5vZWxpdC5kZT4gZm9yIGZpbmRpbmcgdGhlCit1bnNhZmUgY29uc3RydWN0cyBpbiAiZ2l0IGN2c3NlcnZlciIsIGFuZCB0byBKZWZmIEtpbmcgYXQgR2l0SHViIGZvcgorZmluZGluZyBhbmQgZml4aW5nIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBpc3N1ZSBpbiBvdGhlciBzY3JpcHRzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmNmE4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4wLnR4dApAQCAtMCwwICsxLDUwMCBAQAorR2l0IDIuMTIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzLgorCisgKiBVc2Ugb2YgYW4gZW1wdHkgc3RyaW5nIHRoYXQgaXMgdXNlZCBmb3IgJ2V2ZXJ5dGhpbmcgbWF0Y2hlcycgaXMKKyAgIHN0aWxsIHdhcm5lZCBhbmQgR2l0IGFza3MgdXNlcnMgdG8gdXNlIGEgbW9yZSBleHBsaWNpdCAnLicgZm9yIHRoYXQKKyAgIGluc3RlYWQuICBUaGUgaG9wZSBpcyB0aGF0IGV4aXN0aW5nIHVzZXJzIHdpbGwgbm90IG1pbmQgdGhpcworICAgY2hhbmdlLCBhbmQgZXZlbnR1YWxseSB0aGUgd2FybmluZyBjYW4gYmUgdHVybmVkIGludG8gYSBoYXJkIGVycm9yLAorICAgdXBncmFkaW5nIHRoZSBkZXByZWNhdGlvbiBpbnRvIHJlbW92YWwgb2YgdGhpcyAobWlzKWZlYXR1cmUuICBUaGF0CisgICBpcyBub3Qgc2NoZWR1bGVkIHRvIGhhcHBlbiBpbiB0aGUgdXBjb21pbmcgcmVsZWFzZSAoeWV0KS4KKworICogVGhlIGhpc3RvcmljYWwgYXJndW1lbnQgb3JkZXIgImdpdCBtZXJnZSA8bXNnPiBIRUFEIDxjb21taXQ+Li4uIgorICAgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgcXVpdGUgc29tZSB0aW1lLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEKKyAgIGZ1dHVyZSByZWxlYXNlLgorCisgKiBBbiBhbmNpZW50IHNjcmlwdCAiZ2l0IHJlbGluayIgaGFzIGJlZW4gcmVtb3ZlZC4KKworCitVcGRhdGVzIHNpbmNlIHYyLjExCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBWYXJpb3VzIHVwZGF0ZXMgdG8gImdpdCBwNCIuCisKKyAqICJnaXQgcDQiIGRpZG4ndCBpbnRlcmFjdCB3aXRoIHRoZSBpbnRlcm5hbCBvZiAuZ2l0IGRpcmVjdG9yeQorICAgY29ycmVjdGx5IGluIHRoZSBtb2Rlcm4gImdpdC13b3JrdHJlZSItZW5hYmxlZCB3b3JsZC4KKworICogImdpdCBicmFuY2ggLS1saXN0IiBhbmQgZnJpZW5kcyBsZWFybmVkICItLWlnbm9yZS1jYXNlIiBvcHRpb24gdG8KKyAgIG9wdGlvbmFsbHkgc29ydCBicmFuY2hlcyBhbmQgdGFncyBjYXNlIGluc2Vuc2l0aXZlbHkuCisKKyAqIEluIGFkZGl0aW9uIHRvICUoc3ViamVjdCksICUoYm9keSksICJsb2cgLS1wcmV0dHk9Zm9ybWF0Oi4uLiIKKyAgIGxlYXJuZWQgYSBuZXcgcGxhY2Vob2xkZXIgJSh0cmFpbGVycykuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkICItLXF1aXQiIG9wdGlvbiwgd2hpY2ggYWxsb3dzIGEgdXNlciB0bworICAgcmVtb3ZlIHRoZSBtZXRhZGF0YSBsZWZ0IGJ5IGFuIGVhcmxpZXIgImdpdCByZWJhc2UiIHRoYXQgd2FzCisgICBtYW51YWxseSBhYm9ydGVkIHdpdGhvdXQgdXNpbmcgImdpdCByZWJhc2UgLS1hYm9ydCIuCisKKyAqICJnaXQgY2xvbmUgLS1yZWZlcmVuY2UgJHRoZXJlIC0tcmVjdXJzZS1zdWJtb2R1bGVzICRzdXBlciIgaGFzIGJlZW4KKyAgIHRhdWdodCB0byBndWVzcyByZXBvc2l0b3JpZXMgdXNhYmxlIGFzIHJlZmVyZW5jZXMgZm9yIHN1Ym1vZHVsZXMgb2YKKyAgICRzdXBlciB0aGF0IGFyZSBlbWJlZGRlZCBpbiAkdGhlcmUgd2hpbGUgbWFraW5nIGEgY2xvbmUgb2YgdGhlCisgICBzdXBlcnByb2plY3QgYm9ycm93IG9iamVjdHMgZnJvbSAkdGhlcmU7IGV4dGVuZCB0aGUgbWVjaGFuaXNtIHRvCisgICBhbHNvIGFsbG93IHN1Ym1vZHVsZXMgb2YgdGhlc2Ugc3VibW9kdWxlcyB0byBib3Jyb3cgcmVwb3NpdG9yaWVzCisgICBlbWJlZGRlZCBpbiB0aGVzZSBjbG9uZXMgb2YgdGhlIHN1Ym1vZHVsZXMgZW1iZWRkZWQgaW4gdGhlIGNsb25lIG9mCisgICB0aGUgc3VwZXJwcm9qZWN0LgorCisgKiBQb3JjZWxhaW4gc2NyaXB0cyB3cml0dGVuIGluIFBlcmwgYXJlIGdldHRpbmcgaW50ZXJuYXRpb25hbGl6ZWQuCisKKyAqICJnaXQgbWVyZ2UgLS1jb250aW51ZSIgaGFzIGJlZW4gYWRkZWQgYXMgYSBzeW5vbnltIHRvICJnaXQgY29tbWl0IgorICAgdG8gY29uY2x1ZGUgYSBtZXJnZSB0aGF0IGhhcyBzdG9wcGVkIGR1ZSB0byBjb25mbGljdHMuCisKKyAqIEZpbmVyLWdyYWluZWQgY29udHJvbCBvZiB3aGF0IHByb3RvY29scyBhcmUgYWxsb3dlZCBmb3IgdHJhbnNwb3J0cworICAgZHVyaW5nIGNsb25lL2ZldGNoL3B1c2ggaGF2ZSBiZWVuIGVuYWJsZWQgdmlhIGEgbmV3IGNvbmZpZ3VyYXRpb24KKyAgIG1lY2hhbmlzbS4KKworICogImdpdCBzaG9ydGxvZyIgbGVhcm5lZCAiLS1jb21taXR0ZXIiIG9wdGlvbiB0byBncm91cCBjb21taXRzIGJ5CisgICBjb21taXR0ZXIsIGluc3RlYWQgb2YgYXV0aG9yLgorCisgKiBHaXRMRlMgaW50ZWdyYXRpb24gd2l0aCAiZ2l0IHA0IiBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBUaGUgaXNhdHR5KCkgZW11bGF0aW9uIGZvciBXaW5kb3dzIGhhcyBiZWVuIHVwZGF0ZWQgdG8gZXJhZGljYXRlCisgICB0aGUgcHJldmlvdXMgaGFjayB0aGF0IGRlcGVuZGVkIG9uIGludGVybmFscyBvZiAob2xkZXIpIE1TVkMKKyAgIHJ1bnRpbWUuCisKKyAqIFNvbWUgcGxhdGZvcm1zIG5vIGxvbmdlciB1bmRlcnN0YW5kICJsYXRpbi0xIiB0aGF0IGlzIHN0aWxsIHNlZW4gaW4KKyAgIHRoZSB3aWxkIGluIGUtbWFpbCBoZWFkZXJzOyByZXBsYWNlIHRoZW0gd2l0aCAiaXNvLTg4NTktMSIgdGhhdCBpcworICAgbW9yZSB3aWRlbHkga25vd24gd2hlbiBjb252ZXJzaW9uIGZhaWxzIGZyb20vdG8gaXQuCisKKyAqICJnaXQgZ3JlcCIgaGFzIGJlZW4gdGF1Z2h0IHRvIG9wdGlvbmFsbHkgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMuCisKKyAqICJnaXQgcm0iIHVzZWQgdG8gcmVmdXNlIHRvIHJlbW92ZSBhIHN1Ym1vZHVsZSB3aGVuIGl0IGhhcyBpdHMgb3duCisgICBnaXQgcmVwb3NpdG9yeSBlbWJlZGRlZCBpbiBpdHMgd29ya2luZyB0cmVlLiAgSXQgbGVhcm5lZCB0byBtb3ZlCisgICB0aGUgcmVwb3NpdG9yeSBhd2F5IHRvICRHSVRfRElSL21vZHVsZXMvIG9mIHRoZSBzdXBlcnByb2plY3QKKyAgIGluc3RlYWQsIGFuZCBhbGxvdyB0aGUgc3VibW9kdWxlIHRvIGJlIGRlbGV0ZWQgKGFzIGxvbmcgYXMgdGhlcmUKKyAgIHdpbGwgYmUgbm8gbG9zcyBvZiBsb2NhbCBtb2RpZmljYXRpb25zLCB0aGF0IGlzKS4KKworICogQSByZWNlbnQgdXBkYXRlcyB0byAiZ2l0IHA0IiB3YXMgbm90IHVzYWJsZSBmb3Igb2xkZXIgcDQgYnV0IGl0CisgICBjb3VsZCBiZSBtYWRlIHRvIHdvcmsgd2l0aCBtaW5pbXVtIGNoYW5nZXMuICBEbyBzby4KKworICogImdpdCBkaWZmIiBsZWFybmVkIGRpZmYuaW50ZXJIdW5rQ29udGV4dCBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICB0aGF0IGdpdmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBpdHMgLS1pbnRlci1odW5rLWNvbnRleHQgb3B0aW9uLgorCisgKiBUaGUgcHJlcmVsZWFzZVN1ZmZpeCBmZWF0dXJlIG9mIHZlcnNpb24gY29tcGFyaXNvbiB0aGF0IGlzIHVzZWQgaW4KKyAgICJnaXQgdGFnIC1sIiBkaWQgbm90IGNvcnJlY3RseSB3aGVuIHR3byBvciBtb3JlIHByZXJlbGVhc2VzIGZvciB0aGUKKyAgIHNhbWUgcmVsZWFzZSB3ZXJlIHByZXNlbnQgKGUuZy4gd2hlbiAyLjAsIDIuMC1iZXRhMSwgYW5kIDIuMC1iZXRhMgorICAgYXJlIHRoZXJlIGFuZCB0aGUgY29kZSBuZWVkcyB0byBjb21wYXJlIDIuMC1iZXRhMSBhbmQgMi4wLWJldGEyKS4KKworICogImdpdCBzdWJtb2R1bGUgcHVzaCIgbGVhcm5lZCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b25seSBvcHRpb24gdG8KKyAgIHB1c2ggc3VibW9kdWxlcyBvdXQgd2l0aG91dCBwdXNoaW5nIHRoZSB0b3AtbGV2ZWwgc3VwZXJwcm9qZWN0LgorCisgKiAiZ2l0IHRhZyIgYW5kICJnaXQgdmVyaWZ5LXRhZyIgbGVhcm5lZCB0byBwdXQgR1BHIHZlcmlmaWNhdGlvbgorICAgc3RhdHVzIGluIHRoZWlyICItLWZvcm1hdD08cGxhY2Vob2xkZXJzPiIgb3V0cHV0IGZvcm1hdC4KKworICogQW4gYW5jaWVudCByZXBvc2l0b3J5IGNvbnZlcnNpb24gdG9vbCBsZWZ0IGluIGNvbnRyaWIvIGhhcyBiZWVuCisgICByZW1vdmVkLgorCisgKiAiZ2l0IHNob3ctcmVmIEhFQUQiIHVzZWQgd2l0aCAiLS12ZXJpZnkiIGJlY2F1c2UgdGhlIHVzZXIgaXMgbm90CisgICBpbnRlcmVzdGVkIGluIHNlZWluZyByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQsIGFuZCB1c2VkIHdpdGgKKyAgICItLWhlYWQiIGJlY2F1c2UgdGhlIHVzZXIgZG9lcyBub3Qgd2FudCBIRUFEIHRvIGJlIGZpbHRlcmVkIG91dCwKKyAgIGkuZS4gImdpdCBzaG93LXJlZiAtLWhlYWQgLS12ZXJpZnkgSEVBRCIsIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKworICogImdpdCBzdWJtb2R1bGUgYWRkIiB1c2VkIHRvIGJlIGNvbmZ1c2VkIGFuZCByZWZ1c2VkIHRvIGFkZCBhCisgICBsb2NhbGx5IGNyZWF0ZWQgcmVwb3NpdG9yeTsgdXNlcnMgY2FuIG5vdyB1c2UgIi0tZm9yY2UiIG9wdGlvbgorICAgdG8gYWRkIHRoZW0uCisgICAobWVyZ2UgNjE5YWNmYzc4YyBzYi9zdWJtb2R1bGUtYWRkLWZvcmNlIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBwZW9wbGUgZmVlbCB0aGUgZGVmYXVsdCBzZXQgb2YgY29sb3JzIHVzZWQgYnkgImdpdCBsb2cgLS1ncmFwaCIKKyAgIHJhdGhlciBsaW1pdGluZy4gIEEgbWVjaGFuaXNtIHRvIGN1c3RvbWl6ZSB0aGUgc2V0IG9mIGNvbG9ycyBoYXMKKyAgIGJlZW4gaW50cm9kdWNlZC4KKworICogImdpdCByZWFkLXRyZWUiIGFuZCBpdHMgdW5kZXJseWluZyB1bnBhY2tfdHJlZXMoKSBtYWNoaW5lcnkgbGVhcm5lZAorICAgdG8gcmVwb3J0IHByb2JsZW1hdGljIHBhdGhzIHByZWZpeGVkIHdpdGggdGhlIC0tc3VwZXItcHJlZml4IG9wdGlvbi4KKworICogV2hlbiBhIHN1Ym1vZHVsZSAiQSIsIHdoaWNoIGhhcyBhbm90aGVyIHN1Ym1vZHVsZSAiQiIgbmVzdGVkIHdpdGhpbgorICAgaXQsIGlzICJhYnNvcmJlZCIgaW50byB0aGUgdG9wLWxldmVsIHN1cGVycHJvamVjdCwgdGhlIGlubmVyCisgICBzdWJtb2R1bGUgIkIiIHVzZWQgdG8gYmUgbGVmdCBpbiBhIHN0cmFuZ2Ugc3RhdGUuICBUaGUgbG9naWMgdG8KKyAgIGFkanVzdCB0aGUgLmdpdCBwb2ludGVycyBpbiB0aGVzZSBzdWJtb2R1bGVzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIHVzZXIgY2FuIHNwZWNpZnkgYSBjdXN0b20gdXBkYXRlIG1ldGhvZCB0aGF0IGlzIHJ1biB3aGVuCisgICAic3VibW9kdWxlIHVwZGF0ZSIgdXBkYXRlcyBhbiBhbHJlYWR5IGNoZWNrZWQgb3V0IHN1Ym1vZHVsZS4gIFRoaXMKKyAgIHdhcyBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgdGhlIHN1Ym1vZHVsZSBvdXQgZm9yIHRoZSBmaXJzdCB0aW1lIGFuZAorICAgd2UgaW5zdGVhZCBhbHdheXMganVzdCBjaGVja2VkIG91dCB0aGUgY29tbWl0IHRoYXQgaXMgYm91bmQgdG8gdGhlCisgICBwYXRoIGluIHRoZSBzdXBlcnByb2plY3QncyBpbmRleC4KKworICogVGhlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIChpbiBjb250cmliLykgbGVhcm5lZCB0aGF0CisgICAiZ2l0IGRpZmYgLS1zdWJtb2R1bGU9IiBjYW4gdGFrZSAiZGlmZiIgYXMgYSByZWNlbnRseSBhZGRlZCBvcHRpb24uCisKKyAqIFRoZSAiY29yZS5sb2dBbGxSZWZVcGRhdGVzIiB0aGF0IHVzZWQgdG8gYmUgYm9vbGVhbiBoYXMgYmVlbgorICAgZW5oYW5jZWQgdG8gdGFrZSAnYWx3YXlzJyBhcyB3ZWxsLCB0byByZWNvcmQgcmVmIHVwZGF0ZXMgdG8gcmVmcworICAgb3RoZXIgdGhhbiB0aGUgb25lcyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSB1cGRhdGVkIChpLmUuIGJyYW5jaGVzLAorICAgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFuZCBub3RlcykuCisKKyAqIENvbWVzIHdpdGggbW9yZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIGZvciByZWNlbnRseQorICAgaW50cm9kdWNlZCBvcHRpb25zLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIENvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiBhIGxvZyBtZXNzYWdlIGFuZCBhZGQgbGluZXMgdG8gdGhlIHRyYWlsZXIKKyAgIGJsb2Nrcywgc3VjaCBhcyAiZm9ybWF0LXBhdGNoIC1zIiwgImNoZXJyeS1waWNrICgteHwtcykiLCBhbmQKKyAgICJjb21taXQgLXMiLCBoYXZlIGJlZW4gdGF1Z2h0IHRvIHVzZSB0aGUgbG9naWMgb2YgYW5kIHNoYXJlIHRoZQorICAgY29kZSB3aXRoICJnaXQgaW50ZXJwcmV0LXRyYWlsZXIiLgorCisgKiBUaGUgZGVmYXVsdCBUcmF2aXMtQ0kgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgbmV3ZXIgUDQgYW5kIEdpdExGUy4KKworICogVGhlICJmYXN0IGhhc2giIHRoYXQgaGFkIGRpc2FzdHJvdXMgcGVyZm9ybWFuY2UgaXNzdWVzIGluIHNvbWUKKyAgIGNvcm5lciBjYXNlcyBoYXMgYmVlbiByZXRpcmVkIGZyb20gdGhlIGludGVybmFsIGRpZmYuCisKKyAqIFRoZSBjaGFyYWN0ZXIgd2lkdGggdGFibGUgaGFzIGJlZW4gdXBkYXRlZCB0byBtYXRjaCBVbmljb2RlIDkuMAorCisgKiBVcGRhdGUgdGhlIHByb2NlZHVyZSB0byBnZW5lcmF0ZSAidGFncyIgZm9yIGRldmVsb3BlciBzdXBwb3J0LgorCisgKiBUaGUgY29kZWZsb3cgb2Ygc2V0dGluZyBOT0FUSU1FIGFuZCBDTE9FWEVDIG9uIGZpbGUgZGVzY3JpcHRvcnMgR2l0CisgICBvcGVucyBoYXMgYmVlbiBzaW1wbGlmaWVkLgorCisgKiAiZ2l0IGRpZmYiIGFuZCBpdHMgZmFtaWx5IGhhZCB0d28gZXhwZXJpbWVudGFsIGhldXJpc3RpY3MgdG8gc2hpZnQKKyAgIHRoZSBjb250ZW50cyBvZiBhIGh1bmsgdG8gbWFrZSB0aGUgcGF0Y2ggZWFzaWVyIHRvIHJlYWQuICBPbmUgb2YKKyAgIHRoZW0gdHVybnMgb3V0IHRvIGJlIGJldHRlciB0aGFuIHRoZSBvdGhlciwgc28gbGVhdmUgb25seSB0aGUKKyAgICItLWluZGVudC1oZXVyaXN0aWMiIG9wdGlvbiBhbmQgcmVtb3ZlIHRoZSBvdGhlciBvbmUuCisKKyAqIEEgbmV3IHN1Ym1vZHVsZSBoZWxwZXIgImdpdCBzdWJtb2R1bGUgZW1iZWRnaXRkaXJzIiB0byBtYWtlIGl0CisgICBlYXNpZXIgdG8gbW92ZSBlbWJlZGRlZCAuZ2l0LyBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZXMgaW4gYQorICAgc3VwZXJwcm9qZWN0IHRvIC5naXQvbW9kdWxlcy8gKGFuZCBwb2ludCB0aGUgbGF0dGVyIHdpdGggdGhlIGZvcm1lcgorICAgdGhhdCBpcyB0dXJuZWQgaW50byBhICJnaXRkaXI6IiBmaWxlKSBoYXMgYmVlbiBhZGRlZC4KKworICogImdpdCBwdXNoIFxcc2VydmVyXHNoYXJlXGRpciIgaGFzIHJlY2VudGx5IHJlZ3Jlc3NlZCBhbmQgdGhlbgorICAgZml4ZWQuICBBIHRlc3QgaGFzIHJldHJvYWN0aXZlbHkgYmVlbiBhZGRlZCBmb3IgdGhpcyBicmVha2FnZS4KKworICogQnVpbGQgdXBkYXRlcyBmb3IgQ3lnd2luLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgInJlYWxfcGF0aCgpIiB3YXMgdG8gZ28gdGhlcmUgd2l0aCBjaGRpcigyKQorICAgYW5kIGNhbGwgZ2V0Y3dkKDMpLCBidXQgdGhpcyBvYnZpb3VzbHkgd291bGRuJ3QgYmUgdXNhYmxlIGluIGEKKyAgIHRocmVhZGVkIGVudmlyb25tZW50LiAgUmV3cml0ZSBpdCB0byBtYW51YWxseSByZXNvbHZlIHJlbGF0aXZlCisgICBwYXRocyBpbmNsdWRpbmcgc3ltYm9saWMgbGlua3MgaW4gcGF0aCBjb21wb25lbnRzLgorCisgKiBBZGp1c3QgZG9jdW1lbnRhdGlvbiB0byBoZWxwIEFzY2lpRG9jdG9yIHJlbmRlciBiZXR0ZXIgd2hpbGUgbm90CisgICBicmVha2luZyB0aGUgcmVuZGVyaW5nIGRvbmUgYnkgQXNjaWlEb2MuCisKKyAqIFRoZSBzZXF1ZW5jZXIgbWFjaGluZXJ5IGhhcyBiZWVuIGZ1cnRoZXIgZW5oYW5jZWQgc28gdGhhdCBhIGxhdGVyCisgICBzZXQgb2YgcGF0Y2hlcyBjYW4gc3RhcnQgdXNpbmcgaXQgdG8gcmVpbXBsZW1lbnQgInJlYmFzZSAtaSIuCisKKyAqIFVwZGF0ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgTWFjT1NYIHRlc3QgZW52aXJvbm1lbnQgdXNlZCBieQorICAgVHJhdmlzQ0kuCisKKyAqIFJld3JpdGUgYSBzY3JpcHRlZCBwb3JjZWxhaW4gImdpdCBkaWZmdG9vbCIgaW4gQy4KKworICogIm1ha2UgLUMgdCBmYWlsZWQiIHdpbGwgbm93IHJ1biBvbmx5IHRoZSB0ZXN0cyB0aGF0IGZhaWxlZCBpbiB0aGUKKyAgIHByZXZpb3VzIHJ1bi4gIFRoaXMgaXMgdXNhYmxlIG9ubHkgd2hlbiBwcm92ZSBpcyBub3QgdXNlLCBhbmQgZ2l2ZXMKKyAgIGEgdXNlbGVzcyBlcnJvciBtZXNzYWdlIHdoZW4gcnVuIGFmdGVyICJtYWtlIGNsZWFuIiwgYnV0IG90aGVyd2lzZQorICAgaXMgc2VydmljZWFibGUuCisKKyAqICJ1Y2hhciBbNDBdIiB0byAic3RydWN0IG9iamVjdF9pZCIgY29udmVyc2lvbiBjb250aW51ZXMuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKK0ZpeGVzIHNpbmNlIHYyLjEwCistLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjkgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogV2Ugb2Z0ZW4gZGVjaWRlIGlmIGEgc2Vzc2lvbiBpcyBpbnRlcmFjdGl2ZSBieSBjaGVja2luZyBpZiB0aGUKKyAgIHN0YW5kYXJkIEkvTyBzdHJlYW1zIGFyZSBjb25uZWN0ZWQgdG8gYSBUVFksIGJ1dCBpc2F0dHkoKSB0aGF0CisgICBjb21lcyB3aXRoIFdpbmRvd3MgaW5jb3JyZWN0bHkgcmV0dXJuZWQgdHJ1ZSBpZiBpdCBpcyB1c2VkIG9uIE5VTAorICAgKGkuZS4gYW4gZXF1aXZhbGVudCB0byAvZGV2L251bGwpLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBzdm4iIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggcGF0aCBjb21wb25lbnRzIHRoYXQgYXJlICIwIiwgYW5kCisgICBzb21lIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXQgdXNlcyB3ZXJlIG5vdCBkb2N1bWVudGVkLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIiBmYWlsZWQgd2l0aCBhIG1vcmUgcmVjZW50IG5vdGF0aW9uIGxpa2UKKyAgICJIRUFEXi0xIiBhbmQgIkhFQUReISIuCisKKyAqIEFuIGVtcHR5IGRpcmVjdG9yeSBpbiBhIHdvcmtpbmcgdHJlZSB0aGF0IGNhbiBzaW1wbHkgYmUgbnVrZWQgdXNlZAorICAgdG8gaW50ZXJmZXJlIHdoaWxlIG1lcmdpbmcgb3IgY2hlcnJ5LXBpY2tpbmcgYSBjaGFuZ2UgdG8gY3JlYXRlIGEKKyAgIHN1Ym1vZHVsZSBkaXJlY3RvcnkgdGhlcmUsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLi4KKworICogVGhlIGNvZGUgaW4gImdpdCBwdXNoIiB0byBjb21wdXRlIGlmIGFueSBjb21taXQgYmVpbmcgcHVzaGVkIGluIHRoZQorICAgc3VwZXJwcm9qZWN0IGJpbmRzIGEgY29tbWl0IGluIGEgc3VibW9kdWxlIHRoYXQgaGFzbid0IGJlZW4gcHVzaGVkCisgICBvdXQgd2FzIG92ZXJseSBpbmVmZmljaWVudCwgbWFraW5nIGl0IHVudXNhYmxlIGV2ZW4gZm9yIGEgc21hbGwKKyAgIHByb2plY3QgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBzdWJtb2R1bGUgYnV0IGhhdmUgYSByZWFzb25hYmxlCisgICBudW1iZXIgb2YgcmVmcy4KKworICogImdpdCBwdXNoIC0tZHJ5LXJ1biAtLXJlY3Vyc2Utc3VibW9kdWxlPW9uLWRlbWFuZCIgd2Fzbid0CisgICAiLS1kcnktcnVuIiBpbiB0aGUgc3VibW9kdWxlcy4KKworICogVGhlIG91dHB1dCBmcm9tICJnaXQgd29ya3RyZWUgbGlzdCIgd2FzIG1hZGUgaW4gcmVhZGRpcigpIG9yZGVyLAorICAgYW5kIHdhcyB1bnN0YWJsZS4KKworICogbWVyZ2V0b29sLjx0b29sPi50cnVzdEV4aXRDb2RlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZGlkIG5vdCBhcHBseQorICAgdG8gYnVpbHQtaW4gdG9vbHMsIGJ1dCBub3cgaXQgZG9lcy4KKworICogImdpdCBwNCIgTEZTIHN1cHBvcnQgd2FzIGJyb2tlbiB3aGVuIExGUyBzdG9yZXMgYW4gZW1wdHkgYmxvYi4KKworICogQSBjb3JuZXIgY2FzZSBpbiBtZXJnZS1yZWN1cnNpdmUgcmVncmVzc2lvbiB0aGF0IGNyZXB0IGluCisgICBkdXJpbmcgMi4xMCBkZXZlbG9wbWVudCBjeWNsZSBoYXMgYmVlbiBmaXhlZC4KKworICogVHJhbnNwb3J0IHdpdGggZHVtYiBodHRwIGNhbiBiZSBmb29sZWQgaW50byBmb2xsb3dpbmcgZm9yZWlnbiBVUkxzCisgICB0aGF0IHRoZSBlbmQgdXNlciBkb2VzIG5vdCBpbnRlbmQgdG8sIGVzcGVjaWFsbHkgd2l0aCB0aGUgc2VydmVyCisgICBzaWRlIHJlZGlyZWN0cyBhbmQgaHR0cC1hbHRlcm5hdGVzIG1lY2hhbmlzbSwgd2hpY2ggY2FuIGxlYWQgdG8KKyAgIHNlY3VyaXR5IGlzc3Vlcy4gIFRpZ2h0ZW4gdGhlIHJlZGlyZWN0aW9uIGFuZCBtYWtlIGl0IG1vcmUgb2J2aW91cworICAgdG8gdGhlIGVuZCB1c2VyIHdoZW4gaXQgaGFwcGVucy4KKworICogVXBkYXRlIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHRoZSBkdW1iLWh0dHAgY2xpZW50IHdoZW4gaXQgZmFpbHMKKyAgIHRvIG9idGFpbiBsb29zZSBvYmplY3RzOyB3ZSB1c2VkIHRvIGdpdmUgc2Vuc2libGUgZXJyb3IgbWVzc2FnZQorICAgb25seSB1cG9uIDQwNCBidXQgd2Ugbm93IGZvcmJpZCB1bmV4cGVjdGVkIHJlZGlyZWN0cyB0aGF0IG5lZWRzIHRvCisgICBiZSByZXBvcnRlZCB3aXRoIHNvbWV0aGluZyBzZW5zaWJsZS4KKworICogV2hlbiBkaWZmLnJlbmFtZXMgY29uZmlndXJhdGlvbiBpcyBvbiAoYW5kIHdpdGggR2l0IDIuOSBhbmQgbGF0ZXIsCisgICBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIG1hZGUgaXQgd29yc2UpLCAiZ2l0IHN0YXNoIgorICAgbWlzYmVoYXZlZCBpZiBhIGZpbGUgaXMgcmVtb3ZlZCBhbmQgYW5vdGhlciBmaWxlIHdpdGggYSB2ZXJ5CisgICBzaW1pbGFyIGNvbnRlbnQgaXMgYWRkZWQuCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBkaWQgbm90IHRha2UgIi0tbm8tYWJicmV2IiBvcHRpb24uCisKKyAqICJnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiIgaGFkIGEgbWlub3IgcmVncmVzc2lvbiB3aGVuIHN0YXJ0ZWQgZnJvbQorICAgYSBzdWJkaXJlY3RvcnksIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tb25seSIgKG5vIHBhdGhzcGVjKSB3aXRoIGRpcnR5IGluZGV4CisgICBvdWdodCB0byBiZSBhbiBhY2NlcHRhYmxlIHdheSB0byBjcmVhdGUgYSBuZXcgY29tbWl0IHRoYXQgZG9lcyBub3QKKyAgIGNoYW5nZSBhbnkgcGF0aHMsIGJ1dCBpdCB3YXMgZm9yYmlkZGVuLCBwZXJoYXBzIGJlY2F1c2Ugbm9ib2R5CisgICBuZWVkZWQgaXQgc28gZmFyLgorCisgKiBHaXQgMi4xMSBoYWQgYSBtaW5vciByZWdyZXNzaW9uIGluICJtZXJnZSAtLWZmLW9ubHkiIHRoYXQgY29tcGV0ZWQKKyAgIHdpdGggYW5vdGhlciBwcm9jZXNzIHRoYXQgc2ltdWx0YW5lb3VzbHkgYXR0ZW1wdGVkIHRvIHVwZGF0ZSB0aGUKKyAgIGluZGV4LiBXZSB1c2VkIHRvIGV4cGxhaW4gd2hhdCB3ZW50IHdyb25nIHdpdGggYW4gZXJyb3IgbWVzc2FnZSwKKyAgIGJ1dCB0aGUgbmV3IGNvZGUgc2lsZW50bHkgZmFpbGVkLiAgVGhlIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4KKyAgIHJlc3VycmVjdGVkLgorCisgKiBBIHBhdGhuYW1lIHRoYXQgYmVnaW5zIHdpdGggIi8vIiBvciAiXFwiIG9uIFdpbmRvd3MgaXMgc3BlY2lhbCBidXQKKyAgIHBhdGggbm9ybWFsaXphdGlvbiBsb2dpYyB3YXMgdW5hd2FyZSBvZiBpdC4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiwgd2hlbiB0aGVyZSBpcyBubyBuZXcgY29tbWl0cyBvbiBvdXIgc2lkZSBzaW5jZQorICAgd2UgZm9ya2VkIGZyb20gdGhlIHVwc3RyZWFtLCBzaG91bGQgYmUgYWJsZSB0byBmYXN0LWZvcndhcmQgd2l0aG91dAorICAgaW52b2tpbmcgImdpdCByZWJhc2UiLCBidXQgaXQgZGlkbid0LgorCisgKiBUaGUgd2F5IHRvIHNwZWNpZnkgaG90a2V5cyB0byAieHhkaWZmIiB0aGF0IGlzIHVzZWQgYnkgImdpdAorICAgbWVyZ2V0b29sIiBoYXMgYmVlbiBtb2Rlcm5pemVkIHRvIG1hdGNoIHJlY2VudCB2ZXJzaW9ucyBvZiB4eGRpZmYuCisKKyAqIFVubGlrZSAiZ2l0IGFtIC0tYWJvcnQiLCAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiIG1vdmVkIEhFQUQgYmFjaworICAgdG8gd2hlcmUgY2hlcnJ5LXBpY2sgc3RhcnRlZCB3aGlsZSBwaWNraW5nIG11bHRpcGxlIGNoYW5nZXMsIHdoZW4KKyAgIHRoZSBjaGVycnktcGljayBzdG9wcGVkIHRvIGFzayBmb3IgaGVscCBmcm9tIHRoZSB1c2VyLCBhbmQgdGhlIHVzZXIKKyAgIGRpZCAiZ2l0IHJlc2V0IC0taGFyZCIgdG8gYSBkaWZmZXJlbnQgY29tbWl0IGluIG9yZGVyIHRvIHJlLWF0dGVtcHQKKyAgIHRoZSBvcGVyYXRpb24uCisKKyAqIENvZGUgY2xlYW51cCBpbiBzaGFsbG93IGJvdW5kYXJ5IGNvbXB1dGF0aW9uLgorCisgKiBBIHJlY2VudCB1cGRhdGUgdG8gcmVjZWl2ZS1wYWNrIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRyb3AgZ2FyYmFnZQorICAgb2JqZWN0cyBtYWRlIGl0IGNsZWFyIHRoYXQgR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMgY2Fubm90CisgICBoYXZlIGEgcGF0aG5hbWUgd2l0aCBhIGNvbG9uIGluIGl0IChubyBzdXJwcmlzZSEpLCBhbmQgdGhpcyBpbiB0dXJuCisgICBtYWRlIGl0IGltcG9zc2libGUgdG8gcHVzaCBpbnRvIGEgcmVwb3NpdG9yeSBhdCBzdWNoIGEgcGF0aC4gIFRoaXMKKyAgIGhhcyBiZWVuIGZpeGVkIGJ5IGludHJvZHVjaW5nIGEgcXVvdGluZyBtZWNoYW5pc20gdXNlZCB3aGVuCisgICBhcHBlbmRpbmcgc3VjaCBhIHBhdGggdG8gdGhlIGNvbG9uLXNlcGFyYXRlZCBsaXN0LgorCisgKiBUaGUgZnVuY3Rpb24gdXNhZ2VfbXNnX29wdCgpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gc2F5ICJmYXRhbDoiCisgICBiZWZvcmUgdGhlIGN1c3RvbSBtZXNzYWdlIHByb2dyYW1zIGdpdmUsIHdoZW4gdGhleSB3YW50IHRvIGRpZQorICAgd2l0aCBhIG1lc3NhZ2UgYWJvdXQgd3JvbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9sbG93ZWQgYnkgdGhlCisgICBzdGFuZGFyZCB1c2FnZSBzdHJpbmcuCisKKyAqICJnaXQgaW5kZXgtcGFjayAtLXN0ZGluIiBuZWVkcyBhbiBhY2Nlc3MgdG8gYW4gZXhpc3RpbmcgcmVwb3NpdG9yeSwKKyAgIGJ1dCAiZ2l0IGluZGV4LXBhY2sgZmlsZS5wYWNrIiB0byBnZW5lcmF0ZSBhbiAuaWR4IGZpbGUgdGhhdAorICAgY29ycmVzcG9uZHMgdG8gYSBwYWNrZmlsZSBkb2VzIG5vdC4KKworICogRml4IGZvciBOREVCVUcgYnVpbGRzLgorCisgKiBBIGxhenkgImdpdCBwdXNoIiB3aXRob3V0IHJlZnNwZWMgZGlkIG5vdCBpbnRlcm5hbGx5IHVzZSBhIGZ1bGx5CisgICBzcGVjaWZpZWQgcmVmc3BlYyB0byBwZXJmb3JtICdjdXJyZW50JywgJ3NpbXBsZScsIG9yICd1cHN0cmVhbScKKyAgIHB1c2gsIGNhdXNpbmcgdW5uZWNlc3NhcnkgImFtYmlndW91cyByZWYiIGVycm9ycy4KKworICogImdpdCBwNCIgbWlzYmVoYXZlZCB3aGVuIHN3YXBwaW5nIGEgZGlyZWN0b3J5IGFuZCBhIHN5bWJvbGljIGxpbmsuCisKKyAqIEV2ZW4gdGhvdWdoIGFuIGZpeCB3YXMgYXR0ZW1wdGVkIGluIEdpdCAyLjkuMyBkYXlzLCBidXQgcnVubmluZworICAgImdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIiBmcm9tIGEgc3ViZGlyZWN0b3J5IG5ldmVyIHdvcmtlZC4gVGhpcworICAgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgcDQiIHRoYXQgdHJhY2tzIG11bHRpcGxlIHA0IHBhdGhzIGltcG9ydGVkIGEgc2luZ2xlIGNoYW5nZWxpc3QKKyAgIHRoYXQgdG91Y2hlcyBmaWxlcyBpbiB0aGVzZSBtdWx0aXBsZSBwYXRocyBhcyBvbmUgY29tbWl0LCBmb2xsb3dlZAorICAgYnkgbWFueSBlbXB0eSBjb21taXRzLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogQSBwb3RlbnRpYWwgYnV0IHVubGlrZWx5IGJ1ZmZlciBvdmVyZmxvdyBpbiBXaW5kb3dzIHBvcnQgaGFzIGJlZW4KKyAgIGZpeGVkLgorCisgKiBXaGVuIHRoZSBodHRwIHNlcnZlciBnaXZlcyBhbiBpbmNvbXBsZXRlIHJlc3BvbnNlIHRvIGEgc21hcnQtaHR0cAorICAgcnBjIGNhbGwsIGl0IGNvdWxkIGxlYWQgdG8gY2xpZW50IHdhaXRpbmcgZm9yIGEgZnVsbCByZXNwb25zZSB0aGF0CisgICB3aWxsIG5ldmVyIGNvbWUuICBUZWFjaCB0aGUgY2xpZW50IHNpZGUgdG8gbm90aWNlIHRoaXMgY29uZGl0aW9uCisgICBhbmQgYWJvcnQgdGhlIHRyYW5zZmVyLgorCisgKiBDb21wcmVzc2lvbiBzZXR0aW5nIGZvciBwcm9kdWNpbmcgcGFja2ZpbGVzIHdlcmUgc3ByZWFkIGFjcm9zcworICAgdGhyZWUgY29kZXBhdGhzLCBvbmUgb2Ygd2hpY2ggZGlkIG5vdCBob25vciBhbnkgY29uZmlndXJhdGlvbi4KKyAgIFVuaWZ5IHRoZXNlIHNvIHRoYXQgYWxsIG9mIHRoZW0gaG9ub3IgY29yZS5jb21wcmVzc2lvbiBhbmQKKyAgIHBhY2suY29tcHJlc3Npb24gdmFyaWFibGVzIHRoZSBzYW1lIHdheS4KKworICogImdpdCBmYXN0LWltcG9ydCIgc29tZXRpbWVzIG1pc2hhbmRsZWQgd2hpbGUgcmViYWxhbmNpbmcgbm90ZXMKKyAgIHRyZWUsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvIHRoZSBkZWZhdWx0IGFiYnJldmlhdGlvbiBsZW5ndGggdGhhdCBhdXRvLXNjYWxlcworICAgbGFja2VkIGRvY3VtZW50YXRpb24gdXBkYXRlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIExlYWthZ2Ugb2YgbG9ja2ZpbGVzIGluIHRoZSBjb25maWcgc3Vic3lzdGVtIGhhcyBiZWVuIGZpeGVkLgorCisgKiBJdCBpcyBuYXR1cmFsIHRoYXQgImdpdCBnYyAtLWF1dG8iIG1heSBub3QgYXR0ZW1wdCB0byBwYWNrCisgICBldmVyeXRoaW5nIGludG8gYSBzaW5nbGUgcGFjaywgYW5kIHRoZXJlIGlzIG5vIHBvaW50IGluIHdhcm5pbmcKKyAgIHdoZW4gdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdGhlIHN5c3RlbSB0byB1c2UgdGhlIHBhY2sgYml0bWFwLAorICAgbGVhZGluZyB0byBkaXNhYmxpbmcgZnVydGhlciAiZ2MiLgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3QgcmVhZCB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kCisgICBmYWlsZWQgdG8gbm90aWNlIGEgZmlsZSB0aGF0IGlzIG1hcmtlZCBhcyBiaW5hcnkgdmlhIHRoZSB1c2VyZGlmZgorICAgZHJpdmVyIGNvbmZpZ3VyYXRpb24uCisKKyAqICJnaXQgYmxhbWUgLS1wb3JjZWxhaW4iIG1pc2lkZW50aWZpZWQgdGhlICJwcmV2aW91cyIgPGNvbW1pdCwgcGF0aD4KKyAgIHBhaXIgKGFrYSAic291cmNlIikgd2hlbiBjb250ZW50cyBjYW1lIGZyb20gdHdvIG9yIG1vcmUgZmlsZXMuCisKKyAqICJnaXQgcmViYXNlIC1pIiB3aXRoIGEgcmVjZW50IHVwZGF0ZSBzdGFydGVkIHNob3dpbmcgYW4gaW5jb3JyZWN0CisgICBjb3VudCB3aGVuIHNxdWFzaGluZyBtb3JlIHRoYW4gMTAgY29tbWl0cy4KKworICogImdpdCA8Y21kPiBAe3B1c2h9IiBvbiBhIGRldGFjaGVkIEhFQUQgdXNlZCB0byBzZWdmYXVsdDsgaXQgaGFzCisgICBiZWVuIGNvcnJlY3RlZCB0byBlcnJvciBvdXQgd2l0aCBhIG1lc3NhZ2UuCisKKyAqIFJ1bm5pbmcgImdpdCBhZGQgYS9iIiB3aGVuICJhIiBpcyBhIHN1Ym1vZHVsZSBjb3JyZWN0bHkgZXJyb3JlZAorICAgb3V0LCBidXQgd2l0aG91dCBhIG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZS4KKyAgIChtZXJnZSAyZDgxYzQ4ZmE3IHNiL3BhdGhzcGVjLWVycm9ycyBsYXRlciB0byBtYWludCkuCisKKyAqIFR5cGluZyBeQyB0byBwYWdlciwgd2hpY2ggdXN1YWxseSBkb2VzIG5vdCBraWxsIGl0LCBraWxsZWQgR2l0IGFuZAorICAgdG9vayB0aGUgcGFnZXIgZG93biBhcyBhIGNvbGxhdGVyYWwgZGFtYWdlIGluIGNlcnRhaW4gcHJvY2Vzcy10cmVlCisgICBzdHJ1Y3R1cmUuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgd2l0aG91dCBhbnkgcGF0aHNwZWMgb24gdGhlIGNvbW1hbmQgbGluZSB0aGF0IGlzCisgICBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSBiZWNhbWUgbm8tb3AgaW4gR2l0IHYyLjExIGJ5IG1pc3Rha2UsIHdoaWNoCisgICBoYXMgYmVlbiBmaXhlZC4KKworICogUmV0aXJlIGxvbmcgdW51c2VkL3VubWFpbnRhaW5lZCBnaXR2aWV3IGZyb20gdGhlIGNvbnRyaWIvIGFyZWEuCisgICAobWVyZ2UgMzEyMDkyNWMyNSBzYi9yZW1vdmUtZ2l0dmlldyBsYXRlciB0byBtYWludCkuCisKKyAqIFRpZ2h0ZW4gYSB0ZXN0IHRvIGF2b2lkIG1pc3Rha2luZyBhbiBleHRlbmRlZCBFUkUgcmVnZXhwIGVuZ2luZSBhcworICAgYSBQUkUgcmVnZXhwIGVuZ2luZS4KKworICogQW4gZXJyb3IgbWVzc2FnZSB3aXRoIGFuIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyIGxpa2UgJ1xyJyBpbiBpdAorICAgY2FuIGFsdGVyIHRoZSBtZXNzYWdlIHRvIGhpZGUgaXRzIGVhcmx5IHBhcnQsIHdoaWNoIGlzIHByb2JsZW1hdGljCisgICB3aGVuIGEgcmVtb3RlIHNpZGUgZ2l2ZXMgc3VjaCBhbiBlcnJvciBtZXNzYWdlIHRoYXQgdGhlIGxvY2FsIHNpZGUKKyAgIHdpbGwgcmVsYXkgd2l0aCBhICJyZW1vdGU6ICIgcHJlZml4LgorICAgKG1lcmdlIGYyOTAwODk4NzkgamsvdnJlcG9ydC1zYW5pdGl6ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZnNjayIgaW5zcGVjdHMgbG9vc2Ugb2JqZWN0cyBtb3JlIGNhcmVmdWxseSBub3cuCisgICAobWVyZ2UgY2NlMDQ0ZGY3ZiBqay9sb29zZS1vYmplY3QtZnNjayBsYXRlciB0byBtYWludCkuCisKKyAqIEEgY3Jhc2hpbmcgYnVnIGludHJvZHVjZWQgaW4gdjIuMTEgdGltZWZyYW1lIGhhcyBiZWVuIGZvdW5kIChpdCBpcworICAgdHJpZ2dlcmFibGUgb25seSBpbiBmYXN0LWltcG9ydCkgYW5kIGZpeGVkLgorICAgKG1lcmdlIGFiZDVhMDAyNjggamsvY2xlYXItZGVsdGEtYmFzZS1jYWNoZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaXRoIGFuIGFudGljaXBhdG9yeSB0d2VhayBmb3IgcmVtb3RlcyBkZWZpbmVkIGluIH4vLmdpdGNvbmZpZworICAgKGUuZy4gInJlbW90ZS5vcmlnaW4ucHJ1bmUiIHNldCB0byB0cnVlLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgb3IKKyAgIG1heSBub3QgYWN0dWFsbHkgYmUgIm9yaWdpbiIgcmVtb3RlIGRlZmluZWQgaW4gYSBwYXJ0aWN1bGFyIEdpdAorICAgcmVwb3NpdG9yeSksICJnaXQgcmVtb3RlIHJlbmFtZSIgYW5kIG90aGVyIGNvbW1hbmRzIG1pc2ludGVycHJldGVkCisgICBhbmQgYmVoYXZlZCBhcyBpZiBzdWNoIGEgbm9uLWV4aXN0aW5nIHJlbW90ZSBhY3R1YWxseSBleGlzdGVkLgorICAgKG1lcmdlIGU0NTliMDczZmIganMvcmVtb3RlLXJlbmFtZS13aXRoLWhhbGYtY29uZmlndXJlZC1yZW1vdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGZldyBjb2RlcGF0aHMgaGFkIHRvIHJlbHkgb24gYSBnbG9iYWwgdmFyaWFibGUgd2hlbiBzb3J0aW5nCisgICBlbGVtZW50cyBvZiBhbiBhcnJheSBiZWNhdXNlIHNvcnQoMykgQVBJIGRvZXMgbm90IGFsbG93IGV4dHJhIGRhdGEKKyAgIHRvIGJlIHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbi4gIFVzZSBxc29ydF9zKCkgd2hlbgorICAgbmF0aXZlbHkgYXZhaWxhYmxlLCBhbmQgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBpdCB3aGVuIG5vdCwKKyAgIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCwgd2hpY2ggaXMgYSBwcmVyZXF1aXNpdGUgZm9yIG1ha2luZyB0aGUKKyAgIGNvZGVwYXRoIHJlZW50cmFudC4KKworICogImdpdCBmc2NrIC0tY29ubmVjdGl2aXR5LWNoZWNrIiB3YXMgbm90IHdvcmtpbmcgYXQgYWxsLgorICAgKG1lcmdlIGEyYjIyODU0YmQgamsvZnNjay1jb25uZWN0aXZpdHktY2hlY2stZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQWZ0ZXIgc3RhcnRpbmcgImdpdCByZWJhc2UgLWkiLCB3aGljaCBmaXJzdCBvcGVucyB0aGUgdXNlcidzIGVkaXRvcgorICAgdG8gZWRpdCB0aGUgc2VyaWVzIG9mIHBhdGNoZXMgdG8gYXBwbHksIGJ1dCBiZWZvcmUgc2F2aW5nIHRoZQorICAgY29udGVudHMgb2YgdGhhdCBmaWxlLCAiZ2l0IHN0YXR1cyIgZmFpbGVkIHRvIHNob3cgdGhlIGN1cnJlbnQKKyAgIHN0YXRlIChpLmUuIHlvdSBhcmUgaW4gYW4gaW50ZXJhY3RpdmUgcmViYXNlIHNlc3Npb24sIGJ1dCB5b3UgaGF2ZQorICAgYXBwbGllZCBubyBzdGVwcyB5ZXQpIGNvcnJlY3RseS4KKyAgIChtZXJnZSBkZjlkZWQ0OTg0IGpzL3N0YXR1cy1wcmUtcmViYXNlLWkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUZXN0IHR3ZWFrIGZvciBGcmVlQlNEIHdoZXJlIC91c3IvYmluL3VuemlwIGlzIHVuc3VpdGFibGUgdG8gcnVuCisgICBvdXIgdGVzdHMgYnV0IC91c3IvbG9jYWwvYmluL3VuemlwIGlzIHVzYWJsZS4KKyAgIChtZXJnZSBkOThiMmM1ZmNlIGpzL3VuemlwLWluLXVzci1iaW4td29ya2Fyb3VuZCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcDQiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggbXVsdGlwbGUgZ2l0LXA0Lm1hcFVzZXIgZW50cmllcyBvbgorICAgV2luZG93cy4KKyAgIChtZXJnZSBjM2MyYjA1Nzc2IGd2L21pbmd3LXA0LW1hcHVzZXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGhlbHAiIGVudW1lcmF0ZXMgZXhlY3V0YWJsZSBmaWxlcyBpbiAkUEFUSDsgdGhlIGltcGxlbWVudGF0aW9uCisgICBvZiAiaXMgdGhpcyBmaWxlIGV4ZWN1dGFibGU/IiBvbiBXaW5kb3dzIGhhcyBiZWVuIG9wdGltaXplZC4KKyAgIChtZXJnZSBjNzU1MDE1Zjc5IGh2L21pbmd3LWhlbHAtaXMtZXhlY3V0YWJsZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRlc3QgdHdlYWtzIGZvciB0aG9zZSB3aG8gaGF2ZSBkZWZhdWx0IEFDTCBpbiB0aGVpciBnaXQgc291cmNlIHRyZWUKKyAgIHRoYXQgaW50ZXJmZXJlIHdpdGggdGhlIHVtYXNrIHRlc3QuCisgICAobWVyZ2UgZDU0OWQyMTMwNyBtbS9yZXNldC1mYWNsLWJlZm9yZS11bWFzay10ZXN0IGxhdGVyIHRvIG1haW50KS4KKworICogTmFtZXMgb2YgdGhlIHZhcmlvdXMgaG9vayBzY3JpcHRzIG11c3QgYmUgc3BlbGxlZCBleGFjdGx5LCBidXQgb24KKyAgIFdpbmRvd3MsIGFuIC5leGUgYmluYXJ5IG11c3QgYmUgbmFtZWQgd2l0aCAuZXhlIHN1ZmZpeDsgbm90aWNlCisgICAkR0lUX0RJUi9ob29rcy88aG9va25hbWU+LmV4ZSBhcyBhIHZhbGlkIDxob29rbmFtZT4gaG9vay4KKyAgIChtZXJnZSAyMzViZTUxZmJlIGpzL21pbmd3LWhvb2tzLXdpdGgtZXhlLXN1ZmZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEFzY2lpZG9jdG9yLCBhbiBhbHRlcm5hdGl2ZSByZWltcGxlbWVudGF0aW9uIG9mIEFzY2lpRG9jLCBzdGlsbAorICAgbmVlZHMgc29tZSBjaGFuZ2VzIHRvIHdvcmsgd2l0aCBkb2N1bWVudHMgbWVhbnQgdG8gYmUgZm9ybWF0dGVkCisgICB3aXRoIEFzY2lpRG9jLiAgIm1ha2UgVVNFX0FTQ0lJRE9DVE9SPVllc1BsZWFzZSIgdG8gdXNlIGl0IG91dCBvZgorICAgdGhlIGJveCB0byBkb2N1bWVudCBvdXIgcGFnZXMgaXMgZ2V0dGluZyBjbG9zZXIgdG8gcmVhbGl0eS4KKworICogQ29ycmVjdCBjb21tYW5kIGxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIG9uICJnaXQgc3ZuIgorICAgKG1lcmdlIDJjYmFkMTc2NDIgZXcvY29tcGxldGUtc3ZuLWF1dGhvcnNoaXAtb3B0aW9ucyBsYXRlciB0byBtYWludCkuCisKKyAqIEluY29ycmVjdCB1c2FnZSBoZWxwIG1lc3NhZ2UgZm9yICJnaXQgd29ya3RyZWUgcHJ1bmUiIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIDI0ODhkY2FiMjIgcHMvd29ya3RyZWUtcHJ1bmUtaGVscC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBZGp1c3QgYSBwZXJmIHRlc3QgdG8gbmV3IHdvcmxkIG9yZGVyIHdoZXJlIGNvbW1hbmRzIHRoYXQgZG8KKyAgIHJlcXVpcmUgYSByZXBvc2l0b3J5IGFyZSByZWFsbHkgc3RyaWN0IGFib3V0IGhhdmluZyBhIHJlcG9zaXRvcnkuCisgICAobWVyZ2UgYzg2MDAwYzFhNyBycy9wNTMwMi1jcmVhdGUtcmVwb3NpdG9yaWVzLWJlZm9yZS10ZXN0cyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tZ3JhcGgiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggIi0tbmFtZS1vbmx5IiwgZXZlbiB0aG91Z2gKKyAgIG90aGVyIGZvcm1zIG9mICJkaWZmIiBvdXRwdXQgd2VyZSBoYW5kbGVkIGNvcnJlY3RseS4KKyAgIChtZXJnZSBmNTAyMmI1ZmVkIGprL2xvZy1ncmFwaC1uYW1lLW9ubHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcHVzaC1vcHRpb25zIGdpdmVuIHZpYSB0aGUgIi0tcHVzaC1vcHRpb25zIiBvcHRpb24gd2VyZSBub3QKKyAgIHBhc3NlZCB0aHJvdWdoIHRvIGV4dGVybmFsIHJlbW90ZSBoZWxwZXJzIHN1Y2ggYXMgInNtYXJ0IEhUVFAiIHRoYXQKKyAgIGFyZSBpbnZva2VkIHZpYSB0aGUgdHJhbnNwb3J0IGhlbHBlci4KKworICogVGhlIGRvY3VtZW50YXRpb24gZXhwbGFpbmVkIHdoYXQgImdpdCBzdGFzaCIgZG9lcyB0byB0aGUgd29ya2luZworICAgdHJlZSAoYWZ0ZXIgc3Rhc2hpbmcgYXdheSB0aGUgbG9jYWwgY2hhbmdlcykgaW4gdGVybXMgb2YgInJlc2V0CisgICAtLWhhcmQiLCB3aGljaCB3YXMgZXhwb3NpbmcgYW4gdW5uZWNlc3NhcnkgaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgKG1lcmdlIDIwYTdlMDYxNzIgdGcvc3Rhc2gtZG9jLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuICJnaXQgcDQiIGltcG9ydHMgY2hhbmdlbGlzdCB0aGF0IHJlbW92ZXMgcGF0aHMsIGl0IGZhaWxlZCB0bworICAgY29udmVydCBwYXRobmFtZXMgd2hlbiB0aGUgcDQgdXNlZCBlbmNvZGluZyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lCisgICB1c2VkIG9uIHRoZSBHaXQgc2lkZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGE4YjA1MTYyZTggbHMvcDQtcGF0aC1lbmNvZGluZyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgbmV3IGNvY2NpbmVsbGUgcnVsZSB0aGF0IGNhdGNoZXMgYSBjaGVjayBvZiAhcG9pbnRlciBiZWZvcmUgdGhlCisgICBwb2ludGVyIGlzIGZyZWUoMylkLCB3aGljaCBtb3N0IGxpa2VseSBpcyBhIGJ1Zy4KKyAgIChtZXJnZSBlYzZjZDE0YzdhIHJzL2NvY2NpLWNoZWNrLWZyZWUtb25seS1udWxsIGxhdGVyIHRvIG1haW50KS4KKworICogImxzLWZpbGVzIiBydW4gd2l0aCBwYXRoc3BlYyBoYXMgYmVlbiBtaWNyby1vcHRpbWl6ZWQgdG8gYXZvaWQKKyAgIGhhdmluZyB0byBtZW1tb3ZlKDMpIHVubmVjZXNzYXJ5IGJ5dGVzLgorICAgKG1lcmdlIDk2ZjZkM2Y2MWEgcnMvbHMtZmlsZXMtcGFydGlhbC1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIEEgaG90Zml4IGZvciBhIHRvcGljIGFscmVhZHkgaW4gJ21hc3RlcicuCisgICAobWVyZ2UgYTRkOTJkNTc5ZiBqcy9taW5ndy1pc2F0dHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBtaW5vciBkb2MsIHRlc3QgYW5kIGJ1aWxkIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW51cHMuCisgICAobWVyZ2UgZjI2MjdkOWIxOSBzYi9zdWJtb2R1bGUtY29uZmlnLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM4NGYxYTE2N2Igc2IvdW5wYWNrLXRyZWVzLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg3NDQ0NGI3MDQgcmgvZGlmZi1vcmRlcmZpbGUtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlYWZkNWQ5NDgzIGN3L2RvYy1zaWduLW9mZiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGFhYWQ0MTViYyBycy9hYnNvbHV0ZS1wYXRoZHVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0NDMyZGQ2YjViIHJzL3JlY2VpdmUtcGFjay1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NDBhMzk4ZTljIHNnL21haWxtYXAtc2VsZiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjA5ZGYyNjlhNiBuZC9yZXYtbGlzdC1hbGwtaW5jbHVkZXMtSEVBRC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDk0MWI5YzUyNzAgc2IvZG9jLXVuaWZ5LWJvdHRvbSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmFhZjM3YjYyYyBqay9kb2MtcmVtb3RlLWhlbHBlcnMtbWFya3VwLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTkxNDYxYjMzMiBqay9kb2Mtc3VibW9kdWxlLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhhYjk3NDBkOWYgZHAvc3VibW9kdWxlLWRvYy1tYXJrdXAtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwODM4Y2JjMjJmIGprL3RlbXBmaWxlLWZlcnJvci1mY2xvc2UtY29uZnVzaW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMTVhNDBhZGQ2IGRyL2RvYy1jaGVjay1yZWYtZm9ybWF0LW5vcm1hbGl6ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTMzZjBhMjk5ZCBncC9kb2N1bWVudC1kb3RmaWxlcy1pbi10ZW1wbGF0ZXMtYXJlLW5vdC1jb3BpZWQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJiMzVhOWY0YzcgYmMvYmxhbWUtZG9jLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2U4MjM4ODAyNCBwcy9kb2MtZ2MtYWdncmVzc2l2ZS1kZXB0aC11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDk5OTNhN2M1ZjEgYmMvd29ya3RyZWUtZG9jLWZpeC1kZXRhY2hlZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTUxOWVjY2RmNCBydC9hbGlnbi1hZGQtaS1oZWxwLXRleHQgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NGY3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMS50eHQKQEAgLTAsMCArMSw0MSBAQAorR2l0IHYyLjEyLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMgorLS0tLS0tLS0tLS0tLS0tLS0KKworICogUmVkdWNlIGF1dGhlbnRpY2F0aW9uIHJvdW5kLXRyaXAgb3ZlciBIVFRQIHdoZW4gdGhlIHNlcnZlciBzdXBwb3J0cworICAganVzdCBhIHNpbmdsZSBhdXRoZW50aWNhdGlvbiBtZXRob2QuICBUaGlzIGFsc28gaW1wcm92ZXMgdGhlCisgICBiZWhhdmlvdXIgd2hlbiBHaXQgaXMgbWlzY29uZmlndXJlZCB0byBlbmFibGUgaHR0cC5lbXB0eUF1dGgKKyAgIGFnYWluc3QgYSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBhdXRoZW50aWNhdGUgd2l0aG91dCBhIHVzZXJuYW1lCisgICAoaS5lLiBub3QgdXNpbmcgS2VyYmVyb3MgZXRjLiwgd2hpY2ggbWFrZXMgaHR0cC5lbXB0eUF1dGgKKyAgIHBvaW50bGVzcykuCisKKyAqIFdpbmRvd3MgcG9ydCB3YW50cyB0byB1c2UgT3BlblNTTCdzIGltcGxlbWVudGF0aW9uIG9mIFNIQS0xCisgICByb3V0aW5lcywgc28gbGV0IHRoZW0uCisKKyAqIEFkZCAzMi1iaXQgTGludXggdmFyaWFudCB0byB0aGUgc2V0IG9mIHBsYXRmb3JtcyB0byBiZSB0ZXN0ZWQgd2l0aAorICAgVHJhdmlzIENJLgorCisgKiBXaGVuIGEgcmVkaXJlY3RlZCBodHRwIHRyYW5zcG9ydCBnZXRzIGFuIGVycm9yIGR1cmluZyB0aGUKKyAgIHJlZGlyZWN0ZWQgcmVxdWVzdCwgd2UgaWdub3JlZCB0aGUgZXJyb3Igd2UgZ290IGZyb20gdGhlIHNlcnZlciwKKyAgIGFuZCBlbmRlZCB1cCBnaXZpbmcgYSBub3Qtc28tdXNlZnVsIGVycm9yIG1lc3NhZ2UuCisKKyAqIFRoZSBwYXRjaCBzdWJjb21tYW5kIG9mICJnaXQgYWRkIC1pIiB3YXMgbWVhbnQgdG8gaGF2ZSBwYXRocworICAgc2VsZWN0aW9uIHByb21wdCBqdXN0IGxpa2Ugb3RoZXIgc3ViY29tbWFuZCwgdW5saWtlICJnaXQgYWRkIC1wIgorICAgZGlyZWN0bHkganVtcHMgdG8gaHVuayBzZWxlY3Rpb24uICBSZWNlbnRseSwgdGhpcyB3YXMgYnJva2VuIGFuZAorICAgImFkZCAtaSIgbG9zdCB0aGUgcGF0aHMgc2VsZWN0aW9uIGRpYWxvZywgYnV0IGl0IG5vdyBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqIEdpdCB2Mi4xMiB3YXMgc2hpcHBlZCB3aXRoIGFuIGVtYmFycmFzc2luZyBicmVha2FnZSB3aGVyZSB2YXJpb3VzCisgICBvcGVyYXRpb25zIHRoYXQgdmVyaWZ5IHBhdGhzIGdpdmVuIGZyb20gdGhlIHVzZXIgc3RvcHBlZCBkeWluZyB3aGVuCisgICBzZWVpbmcgYW4gaXNzdWUsIGFuZCBpbnN0ZWFkIGxhdGVyIHRyaWdnZXJpbmcgc2VnZmF1bHQuCisKKyAqIFRoZSBjb2RlIHRvIHBhcnNlICJnaXQgbG9nIC1MLi4uIiBjb21tYW5kIGxpbmUgd2FzIGJ1Z2d5IHdoZW4gdGhlcmUKKyAgIGFyZSBtYW55IHJhbmdlcyBzcGVjaWZpZWQgd2l0aCAtTDsgb3ZlcnJ1biBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlcgorICAgaGFzIGJlZW4gZml4ZWQuCisKKyAqIFRoZSBjb21tYW5kLWxpbmUgcGFyc2luZyBvZiAiZ2l0IGxvZyAtTCIgY29waWVkIGludGVybmFsIGRhdGEKKyAgIHN0cnVjdHVyZXMgdXNpbmcgaW5jb3JyZWN0IHNpemUgb24gSUxQMzIgc3lzdGVtcy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxOTM5NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4yLnR4dApAQCAtMCwwICsxLDgzIEBACitHaXQgdjIuMTIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEyLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4iIGlzIHN1cHBvc2VkIHRvIGdpdmUgYSBzdGFibGUgb3V0cHV0LCBidXQgYQorICAgZmV3IHN0cmluZ3Mgd2VyZSBsZWZ0IGFzIHRyYW5zbGF0YWJsZSBieSBtaXN0YWtlLgorCisgKiAiRHVtYiBodHRwIiB0cmFuc3BvcnQgdXNlZCB0byBtaXNwYXJzZSBhIG5vbnNlbnNlIGh0dHAtYWx0ZXJuYXRlcworICAgcmVzcG9uc2UsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCIgcmVsaWVzIG9uIHRoZSBzaXplIGZpZWxkIGluIGRpZmZfZmlsZXNwZWMgdG8gYmUKKyAgIGNvcnJlY3RseSBwb3B1bGF0ZWQsIGJ1dCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKCkgaGVscGVyIGZ1bmN0aW9uCisgICBtYWRlIGFuIGluY29ycmVjdCBzaG9ydC1jdXQgd2hlbiBhc2tlZCBvbmx5IHRvIHBvcHVsYXRlIHRoZSBzaXplCisgICBmaWVsZCBmb3IgcGF0aHMgdGhhdCBuZWVkIHRvIGdvIHRocm91Z2ggY29udmVydF90b19naXQoKSAoZS5nLiBDUkxGCisgICBjb252ZXJzaW9uKS4KKworICogVGhlcmUgaXMgbm8gbmVlZCBmb3IgUHl0aG9uIG9ubHkgdG8gZ2l2ZSBhIGZldyBtZXNzYWdlcyB0byB0aGUKKyAgIHN0YW5kYXJkIGVycm9yIHN0cmVhbSwgYnV0IHdlIHNvbWVob3cgZGlkLgorCisgKiBBIGxlYWsgaW4gYSBjb2RlcGF0aCB0byByZWFkIGZyb20gYSBwYWNrZWQgb2JqZWN0IGluIChyYXJlKSBjYXNlcworICAgaGFzIGJlZW4gcGx1Z2dlZC4KKworICogImdpdCB1cGxvYWQtcGFjayIsIHdoaWNoIGlzIGEgY291bnRlci1wYXJ0IG9mICJnaXQgZmV0Y2giLCBkaWQgbm90CisgICByZXBvcnQgYSByZXF1ZXN0IGZvciBhIHJlZiB0aGF0IHdhcyBub3QgYWR2ZXJ0aXNlZCBhcyBpbnZhbGlkLgorICAgVGhpcyBpcyBnZW5lcmFsbHkgbm90IGEgcHJvYmxlbSAoYmVjYXVzZSAiZ2l0IGZldGNoIiB3aWxsIHN0b3AKKyAgIGJlZm9yZSBtYWtpbmcgc3VjaCBhIHJlcXVlc3QpLCBidXQgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorCisgKiBBICJnYy5sb2ciIGZpbGUgbGVmdCBieSBhIGJhY2tncm91bmRlZCAiZ2MgLS1hdXRvIiBkaXNhYmxlcyBmdXJ0aGVyCisgICBhdXRvbWF0aWMgZ2M7IGl0IGhhcyBiZWVuIHRhdWdodCB0byBydW4gYXQgbGVhc3Qgb25jZSBhIGRheSAoYnkKKyAgIGRlZmF1bHQpIGJ5IGlnbm9yaW5nIGEgc3RhbGUgImdjLmxvZyIgZmlsZSB0aGF0IGlzIHRvbyBvbGQuCisKKyAqICJnaXQgcmVtb3RlIHJtIFgiLCB3aGVuIGEgYnJhbmNoIGhhcyByZW1vdGUgWCBjb25maWd1cmVkIGFzIHRoZQorICAgdmFsdWUgb2YgaXRzIGJyYW5jaC4qLnJlbW90ZSwgdHJpZWQgdG8gcmVtb3ZlIGJyYW5jaC4qLnJlbW90ZSBhbmQKKyAgIGJyYW5jaC4qLm1lcmdlIGFuZCBmYWlsZWQgaWYgZWl0aGVyIGlzIHVuc2V0LgorCisgKiBBIGNhbGxlciBvZiB0ZW1wZmlsZSBBUEkgdGhhdCB1c2VzIHN0ZGlvIGludGVyZmFjZSB0byB3cml0ZSB0bworICAgZmlsZXMgbWF5IGlnbm9yZSBlcnJvcnMgd2hpbGUgd3JpdGluZywgd2hpY2ggaXMgZGV0ZWN0ZWQgd2hlbgorICAgdGVtcGZpbGUgaXMgY2xvc2VkICh3aXRoIGEgY2FsbCB0byBmZXJyb3IoKSkuICBCeSB0aGF0IHRpbWUsIHRoZQorICAgb3JpZ2luYWwgZXJybm8gdGhhdCBtYXkgaGF2ZSB0b2xkIHVzIHdoYXQgd2VudCB3cm9uZyBpcyBsaWtlbHkgdG8KKyAgIGJlIGxvbmcgZ29uZSBhbmQgd2FzIG92ZXJ3cml0dGVuIGJ5IGFuIGlycmVsZXZhbnQgdmFsdWUuCisgICBjbG9zZV90ZW1wZmlsZSgpIG5vdyByZXNldHMgZXJybm8gdG8gRUlPIHRvIG1ha2UgZXJybm8gYXQgbGVhc3QKKyAgIHByZWRpY3RhYmxlLgorCisgKiAiZ2l0IHNob3ctYnJhbmNoIiBleHBlY3RlZCB0aGVyZSB3ZXJlIG9ubHkgdmVyeSBzaG9ydCBicmFuY2ggbmFtZXMKKyAgIGluIHRoZSByZXBvc2l0b3J5IGFuZCB1c2VkIGEgZml4ZWQtbGVuZ3RoIGJ1ZmZlciB0byBob2xkIHRoZW0KKyAgIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93LgorCisgKiBUaGUgY29kZSB0aGF0IHBhcnNlcyBoZWFkZXIgZmllbGRzIGluIHRoZSBjb21taXQgb2JqZWN0IGhhcyBiZWVuCisgICB1cGRhdGVkIGZvciAobWljcm8pcGVyZm9ybWFuY2UgYW5kIGNvZGUgaHlnaWVuZS4KKworICogQSB0ZXN0IHRoYXQgY3JlYXRlcyBhIGNvbmZ1c2luZyBicmFuY2ggd2hvc2UgbmFtZSBpcyBIRUFEIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQgbm90IHRvIGRvIHNvLgorCisgKiAiQ2M6IiBvbiB0aGUgdHJhaWxlciBwYXJ0IGRvZXMgbm90IGhhdmUgdG8gY29uZm9ybSB0byBSRkMgc3RyaWN0bHksCisgICB1bmxpa2UgaW4gdGhlIGUtbWFpbCBoZWFkZXIuICAiZ2l0IHNlbmQtZW1haWwiIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGlnbm9yZSBhbnl0aGluZyBhZnRlciAnPicgd2hlbiBwaWNraW5nIGFkZHJlc3NlcywgdG8gYWxsb3cgbm9uLWFkZHJlc3MKKyAgIGNydWZ0IGxpa2UgIiAjIHN0YWJsZSA0LjQiIGFmdGVyIHRoZSBhZGRyZXNzLgorCisgKiAiZ2l0IHB1c2giIGhhZCBhIGhhbmRmdWwgb2YgY29kZXBhdGhzIHRoYXQgY291bGQgbGVhZCB0byBhIGRlYWRsb2NrCisgICB3aGVuIHVuZXhwZWN0ZWQgZXJyb3IgaGFwcGVuZWQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBDb2RlIHRvIHJlYWQgc3VibW9kdWxlLjxuYW1lPi5pZ25vcmUgY29uZmlnIGRpZCBub3Qgc3RhdGUgdGhlCisgICB2YXJpYWJsZSBuYW1lIGNvcnJlY3RseSB3aGVuIGdpdmluZyBhbiBlcnJvciBtZXNzYWdlIGRpYWdub3NpbmcKKyAgIG1pc2NvbmZpZ3VyYXRpb24uCisKKyAqICJnaXQgbHMtcmVtb3RlIiBhbmQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIiBhcmUgZGVzaWduZWQgdG8gd29yaworICAgd2l0aG91dCBiZWluZyBpbiBhIGRpcmVjdG9yeSB1bmRlciBHaXQncyBjb250cm9sLiAgSG93ZXZlciwgcmVjZW50CisgICB1cGRhdGVzIHJldmVhbGVkIHRoYXQgd2UgcmFuZG9tbHkgbG9vayBpbnRvIGEgZGlyZWN0b3J5IGNhbGxlZAorICAgLmdpdC8gd2l0aG91dCBhY3R1YWxseSBkb2luZyBuZWNlc3Nhcnkgc2V0LXVwIHdoZW4gd29ya2luZyBpbiBhCisgICByZXBvc2l0b3J5LiAgU3RvcCBkb2luZyBzby4KKworICogVGhlIGNvZGUgdG8gcGFyc2UgdGhlIGNvbW1hbmQgbGluZSAiZ2l0IGdyZXAgPHBhdHRlcm5zPi4uLiA8cmV2PgorICAgW1stLV0gPHBhdGhzcGVjPi4uLl0iIGhhcyBiZWVuIGNsZWFuZWQgdXAsIGFuZCBhIGhhbmRmdWwgb2YgYnVncworICAgaGF2ZSBiZWVuIGZpeGVkIChlLmcuIHdlIHVzZWQgdG8gY2hlY2sgIi0tIiBpZiBpdCBpcyBhIHJldikuCisKKyAqIFRoZSBjb2RlIHRvIHBhcnNlICJnaXQgLWMgVkFSPVZBTCBjbWQiIGFuZCBzZXQgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgZm9yIHRoZSBkdXJhdGlvbiBvZiBjbWQgaGFkIHR3byBzbWFsbCBidWdzLCB3aGljaCBoYXZlCisgICBiZWVuIGZpeGVkLgorICAgVGhpcyBzdXBlcnNlZGVzIGpjL2NvbmZpZy1jYXNlLWNtZGxpbmUgdG9waWMgdGhhdCBoYXMgYmVlbiBkaXNjYXJkZWQuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViY2E4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMy50eHQKQEAgLTAsMCArMSw2NCBAQAorR2l0IHYyLjEyLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMi4yCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSAicGFyc2VfY29uZmlnX2tleSgpIiBBUEkgZnVuY3Rpb24gaGFzIGJlZW4gY2xlYW5lZCB1cC4KKworICogQW4gaGVscGVyIGZ1bmN0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGFwcGVuZCB0aGUgcmVzdWx0IGZyb20KKyAgIHJlYWxfcGF0aCgpIHRvIGEgc3RyYnVmIGhhcyBiZWVuIGFkZGVkLgorCisgKiBUaGUgdC9wZXJmIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGUgd2FzIG5vdCBwcmVwYXJlZCB0byB0ZXN0IG5vdCBzbworICAgb2xkIHZlcnNpb25zIG9mIEdpdCwgYnV0IG5vdyBpdCBjb3ZlcnMgdmVyc2lvbnMgb2YgR2l0IHRoYXQgYXJlIG5vdAorICAgc28gYW5jaWVudC4KKworICogUGlja2luZyB0d28gdmVyc2lvbnMgb2YgR2l0IGFuZCBydW5uaW5nIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGUKKyAgIG9sZGVyIG9uZSBhbmQgdGhlIG5ld2VyIG9uZSBpbnRlcm9wZXJhdGUgaGFwcGlseSBoYXMgbm93IGJlY29tZQorICAgcG9zc2libGUuCisKKyAqIFRlYWNoIHRoZSAiZGVidWciIGhlbHBlciB1c2VkIGluIHRoZSB0ZXN0IGZyYW1ld29yayB0aGF0IGFsbG93cyBhCisgICBjb21tYW5kIHRvIHJ1biB1bmRlciAiZ2RiIiB0byBtYWtlIHRoZSBzZXNzaW9uIGludGVyYWN0aXZlLgorCisgKiAiZ2l0IHJlcGFjayAtLWRlcHRoPTxuPiIgZm9yIGEgbG9uZyB0aW1lIGJ1c3RlZCB0aGUgc3BlY2lmaWVkIGRlcHRoCisgICB3aGVuIHJldXNpbmcgZGVsdGEgZnJvbSBleGlzdGluZyBwYWNrcy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiB1c2VyLmVtYWlsIHRoYXQgY29uc2lzdHMgb2Ygb25seSBjcnVmdCBjaGFycyBzaG91bGQgY29uc2lzdGVudGx5CisgICBlcnJvciBvdXQsIGJ1dCBkaWRuJ3QuCisKKyAqIEEgZmV3IHRlc3RzIHdlcmUgcnVuIGNvbmRpdGlvbmFsbHkgdW5kZXIgKHJhcmUpIGNvbmRpdGlvbnMgd2hlcmUKKyAgIHRoZXkgY2Fubm90IGJlIHJ1biAobGlrZSBydW5uaW5nIGN2cyB0ZXN0cyB1bmRlciAncm9vdCcgYWNjb3VudCkuCisKKyAqICJnaXQgYnJhbmNoIEAiIGNyZWF0ZWQgcmVmcy9oZWFkcy9AIGFzIGEgYnJhbmNoLCBhbmQgaW4gZ2VuZXJhbCB0aGUKKyAgIGNvZGUgdGhhdCBoYW5kbGVkIEB7LTF9IGFuZCBAe3Vwc3RyZWFtfSB3YXMgYSBiaXQgdG9vIGxvb3NlIGluCisgICBkaXNhbWJpZ3VhdGluZy4KKworICogImdpdCBmZXRjaCIgdGhhdCByZXF1ZXN0cyBhIGNvbW1pdCBieSBvYmplY3QgbmFtZSwgd2hlbiB0aGUgb3RoZXIKKyAgIHNpZGUgZG9lcyBub3QgYWxsb3cgc3VjaCBhbiByZXF1ZXN0LCBmYWlsZWQgd2l0aG91dCBtdWNoCisgICBleHBsYW5hdGlvbi4KKworICogImdpdCBmaWx0ZXItYnJhbmNoIC0tcHJ1bmUtZW1wdHkiIGRyb3BzIGEgc2luZ2xlLXBhcmVudCBjb21taXQgdGhhdAorICAgYmVjb21lcyBhIG5vLW9wLCBidXQgZGlkIG5vdCBkcm9wIGEgcm9vdCBjb21taXQgd2hvc2UgdHJlZSBpcyBlbXB0eS4KKworICogUmVjZW50IHZlcnNpb25zIG9mIEdpdCB0cmVhdHMgaHR0cCBhbHRlcm5hdGVzICh1c2VkIGluIGR1bWIgaHR0cAorICAgdHJhbnNwb3J0KSBqdXN0IGxpa2UgSFRUUCByZWRpcmVjdHMgYW5kIHJlcXVpcmVzIHRoZSBjbGllbnQgdG8KKyAgIGVuYWJsZSBmb2xsb3dpbmcgaXQsIGR1ZSB0byBzZWN1cml0eSBjb25jZXJucy4gIEJ1dCB3ZSBmb3Jnb3QgdG8KKyAgIGdpdmUgYSB3YXJuaW5nIHdoZW4gd2UgZGVjaWRlIG5vdCB0byBob25vciB0aGUgYWx0ZXJuYXRlcy4KKworICogTk9fUFRIUkVBRFMgYnVpbGQgaGFzIGJlZW4gYnJva2VuIGZvciBzb21lIHRpbWU7IG5vdyBmaXhlZC4KKworICogRml4IGZvciBwb3RlbnRpYWwgc2VndiBpbnRyb2R1Y2VkIGluIHYyLjExLjAgYW5kIGxhdGVyIChhbHNvCisgICB2Mi4xMC4yKS4KKworICogQSBmZXcgdW50ZXJtaW5hdGVkIGhlcmUgZG9jdW1lbnRzIGluIHRlc3RzIHdlcmUgZml4ZWQsIHdoaWNoIGluCisgICB0dXJuIHJldmVhbGVkIGluY29ycmVjdCBleHBlY3RhdGlvbnMgdGhlIHRlc3RzIG1ha2UuIFRoZXNlIHRlc3RzCisgICBoYXZlIGJlZW4gdXBkYXRlZC4KKworICogImdpdC1zaGVsbCIgcmVqZWN0cyBhIHJlcXVlc3QgdG8gc2VydmUgYSByZXBvc2l0b3J5IHdob3NlIG5hbWUKKyAgIGJlZ2lucyB3aXRoIGEgZGFzaCwgd2hpY2ggbWFrZXMgaXQgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIGdldCBpdAorICAgY29uZnVzZWQgaW50byBzcGF3bmluZyBzZXJ2aWNlIHByb2dyYW1zIGxpa2UgImdpdC11cGxvYWQtcGFjayIgd2l0aAorICAgYW4gb3B0aW9uIGxpa2UgIi0taGVscCIsIHdoaWNoIGluIHR1cm4gd291bGQgc3Bhd24gYW4gaW50ZXJhY3RpdmUKKyAgIHBhZ2VyLCBpbnN0ZWFkIG9mIHdvcmtpbmcgd2l0aCB0aGUgcmVwb3NpdG9yeSB1c2VyIGFza2VkIHRvIGFjY2VzcworICAgKGkuZS4gdGhlIG9uZSB3aG9zZSBuYW1lIGlzICItLWhlbHAiKS4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1NjkzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi40LnR4dApAQCAtMCwwICsxLDQgQEAKK0dpdCB2Mi4xMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZvcndhcmQtcG9ydHMgdGhlIGZpeCBmb3IgInNzaDovLy4uLiIgVVJMIGZyb20gR2l0IHYyLjcuNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYTczY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuNS50eHQKQEAgLTAsMCArMSwxNyBAQAorR2l0IHYyLjEyLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMi40CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY3Zzc2VydmVyIiBubyBsb25nZXIgaXMgaW52b2tlZCBieSAiZ2l0IGRhZW1vbiIgYnkgZGVmYXVsdCwKKyAgIGFzIGl0IGlzIG9sZCBhbmQgbGFyZ2VseSB1bm1haW50YWluZWQuCisKKyAqIFZhcmlvdXMgUGVybCBzY3JpcHRzIGRpZCBub3QgdXNlIHNhZmVfcGlwZV9jYXB0dXJlKCkgaW5zdGVhZCBvZgorICAgYmFja3RpY2tzLCBsZWF2aW5nIHRoZW0gc3VzY2VwdGlibGUgdG8gZW5kLXVzZXIgaW5wdXQuICBUaGV5IGhhdmUKKyAgIGJlZW4gY29ycmVjdGVkLgorCitDcmVkaXRzIGdvIHRvIGpvZXJuY2hlbiA8am9lcm5jaGVuQHBoZW5vZWxpdC5kZT4gZm9yIGZpbmRpbmcgdGhlCit1bnNhZmUgY29uc3RydWN0cyBpbiAiZ2l0IGN2c3NlcnZlciIsIGFuZCB0byBKZWZmIEtpbmcgYXQgR2l0SHViIGZvcgorZmluZGluZyBhbmQgZml4aW5nIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBpc3N1ZSBpbiBvdGhlciBzY3JpcHRzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0N2I0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4wLnR4dApAQCAtMCwwICsxLDYxOCBAQAorR2l0IDIuMTMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzLgorCisgKiBVc2Ugb2YgYW4gZW1wdHkgc3RyaW5nIGFzIGEgcGF0aHNwZWMgZWxlbWVudCB0aGF0IGlzIHVzZWQgZm9yCisgICAnZXZlcnl0aGluZyBtYXRjaGVzJyBpcyBzdGlsbCB3YXJuZWQgYW5kIEdpdCBhc2tzIHVzZXJzIHRvIHVzZSBhCisgICBtb3JlIGV4cGxpY2l0ICcuJyBmb3IgdGhhdCBpbnN0ZWFkLiAgVGhlIGhvcGUgaXMgdGhhdCBleGlzdGluZworICAgdXNlcnMgd2lsbCBub3QgbWluZCB0aGlzIGNoYW5nZSwgYW5kIGV2ZW50dWFsbHkgdGhlIHdhcm5pbmcgY2FuIGJlCisgICB0dXJuZWQgaW50byBhIGhhcmQgZXJyb3IsIHVwZ3JhZGluZyB0aGUgZGVwcmVjYXRpb24gaW50byByZW1vdmFsIG9mCisgICB0aGlzIChtaXMpZmVhdHVyZS4gIFRoYXQgaXMgbm90IHNjaGVkdWxlZCB0byBoYXBwZW4gaW4gdGhlIHVwY29taW5nCisgICByZWxlYXNlICh5ZXQpLgorCisgKiBUaGUgaGlzdG9yaWNhbCBhcmd1bWVudCBvcmRlciAiZ2l0IG1lcmdlIDxtc2c+IEhFQUQgPGNvbW1pdD4uLi4iCisgICBoYXMgYmVlbiBkZXByZWNhdGVkIGZvciBxdWl0ZSBzb21lIHRpbWUsIGFuZCBpcyBub3cgcmVtb3ZlZC4KKworICogVGhlIGRlZmF1bHQgbG9jYXRpb24gIn4vLmdpdC1jcmVkZW50aWFsLWNhY2hlL3NvY2tldCIgZm9yIHRoZQorICAgc29ja2V0IHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY3JlZGVudGlhbC1jYWNoZSBkYWVtb24gaGFzCisgICBiZWVuIG1vdmVkIHRvICJ+Ly5jYWNoZS9naXQvY3JlZGVudGlhbC9zb2NrZXQiLgorCisgKiBHaXQgbm93IGF2b2lkcyBibGluZGx5IGZhbGxpbmcgYmFjayB0byAiLmdpdCIgd2hlbiB0aGUgc2V0dXAKKyAgIHNlcXVlbmNlIHNhaWQgd2UgYXJlIF9ub3RfIGluIEdpdCByZXBvc2l0b3J5LiAgQSBjb3JuZXIgY2FzZSB0aGF0CisgICBoYXBwZW5zIHRvIHdvcmsgcmlnaHQgbm93IG1heSBiZSBicm9rZW4gYnkgYSBjYWxsIHRvIGRpZSgiQlVHIikuCisgICBXZSd2ZSB0cmllZCBoYXJkIHRvIGxvY2F0ZSBzdWNoIGNhc2VzIGFuZCBmaXhlZCB0aGVtLCBidXQgdGhlcmUKKyAgIG1pZ2h0IHN0aWxsIGJlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQtLWJ1ZyByZXBvcnRzIGFyZQorICAgZ3JlYXRseSBhcHByZWNpYXRlZC4KKworCitVcGRhdGVzIHNpbmNlIHYyLjEyCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiAiZ2l0IGRlc2NyaWJlIiBhbmQgImdpdCBuYW1lLXJldiIgaGF2ZSBiZWVuIHRhdWdodCB0byB0YWtlIG1vcmUKKyAgIHRoYW4gb25lIHJlZm5hbWUgcGF0dGVybnMgdG8gcmVzdHJpY3QgdGhlIHNldCBvZiByZWZzIHRvIGJhc2UgdGhlaXIKKyAgIG5hbWluZyBvdXRwdXQgb24sIGFuZCBhbHNvIGxlYXJuZWQgdG8gdGFrZSBuZWdhdGl2ZSBwYXR0ZXJucyB0bworICAgbmFtZSByZWZzIG5vdCB0byBiZSB1c2VkIGZvciBuYW1pbmcgdmlhIHRoZWlyICItLWV4Y2x1ZGUiIG9wdGlvbi4KKworICogRGVsZXRpb24gb2YgYSBicmFuY2ggImZvby9iYXIiIGNvdWxkIHJlbW92ZSAuZ2l0L3JlZnMvaGVhZHMvZm9vCisgICBvbmNlIHRoZXJlIG5vIGxvbmdlciBpcyBhbnkgb3RoZXIgYnJhbmNoIHdob3NlIG5hbWUgYmVnaW5zIHdpdGgKKyAgICJmb28vIiwgYnV0IHdlIGRpZG4ndCBkbyBzbyBzbyBmYXIuICBOb3cgd2UgZG8uCisKKyAqIFdoZW4gImdpdCBtZXJnZSIgZGV0ZWN0cyBhIHBhdGggdGhhdCBpcyByZW5hbWVkIGluIG9uZSBoaXN0b3J5CisgICB3aGlsZSB0aGUgb3RoZXIgaGlzdG9yeSBkZWxldGVkIChvciBtb2RpZmllZCkgaXQsIGl0IG5vdyByZXBvcnRzCisgICBib3RoIHBhdGhzIHRvIGhlbHAgdGhlIHVzZXIgdW5kZXJzdGFuZCB3aGF0IGlzIGdvaW5nIG9uIGluIHRoZSB0d28KKyAgIGhpc3RvcmllcyBiZWluZyBtZXJnZWQuCisKKyAqIFRoZSA8dXJsPiBwYXJ0IGluICJodHRwLjx1cmw+Ljx2YXJpYWJsZT4iIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgIGNhbiBub3cgYmUgc3BlbGxlZCB3aXRoICcqJyB0aGF0IHNlcnZlcyBhcyB3aWxkY2FyZC4KKyAgIEUuZy4gImh0dHAuaHR0cHM6Ly8qLmV4YW1wbGUuY29tLnByb3h5IiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZQorICAgcHJveHkgdXNlZCBmb3IgaHR0cHM6Ly9hLmV4YW1wbGUuY29tLCBodHRwczovL2IuZXhhbXBsZS5jb20sIGV0Yy4sCisgICBpLmUuIGFueSBob3N0IGluIHRoZSBleGFtcGxlLmNvbSBkb21haW4uCisKKyAqICJnaXQgdGFnIiBkaWQgbm90IGxlYXZlIHVzZWZ1bCBtZXNzYWdlIHdoZW4gYWRkaW5nIGEgbmV3IGVudHJ5IHRvCisgICByZWZsb2c7IHRoaXMgd2FzIGxlZnQgdW5ub3RpY2VkIGZvciBhIGxvbmcgdGltZSBiZWNhdXNlIHJlZnMvdGFncy8qCisgICBkb2Vzbid0IGtlZXAgcmVmbG9nIGJ5IGRlZmF1bHQuCisKKyAqIFRoZSAibmVnYXRpdmUiIHBhdGhzcGVjIGZlYXR1cmUgd2FzIHNvbWV3aGF0IG1vcmUgY3VtYmVyc29tZSB0byB1c2UKKyAgIHRoYW4gbmVjZXNzYXJ5IGluIHRoYXQgaXRzIHNob3J0LWhhbmQgdXNlZCAiISIgd2hpY2ggbmVlZGVkIHRvIGJlCisgICBlc2NhcGVkIGZyb20gc2hlbGxzLCBhbmQgaXQgcmVxdWlyZWQgImV4Y2x1ZGUgZnJvbSB3aGF0PyIgc3BlY2lmaWVkLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIHNzaCBpbnZvY2F0aW9uIG5lZWRzIHRvIGJlIHR3ZWFrZWQgZm9yCisgICBzb21lIGltcGxlbWVudGF0aW9ucyBvZiBTU0ggKGUuZy4gUHVUVFkgcGxpbmsgd2FudHMgIi1QIDxwb3J0PiIKKyAgIHdoaWxlIE9wZW5TU0ggd2FudHMgIi1wIDxwb3J0PiIgdG8gc3BlY2lmeSBwb3J0IHRvIGNvbm5lY3QgdG8pLCBhbmQKKyAgIHRoZSB2YXJpYW50IHdhcyBndWVzc2VkIHdoZW4gR0lUX1NTSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1c2VkCisgICB0byBzcGVjaWZ5IGl0LiAgVGhlIGxvZ2ljIHRvIGd1ZXNzIG5vdyBhcHBsaWVzIHRvIHRoZSBjb21tYW5kCisgICBzcGVjaWZpZWQgYnkgdGhlIG5ld2VyIEdJVF9TU0hfQ09NTUFORCBhbmQgYWxzbyBjb3JlLnNzaGNvbW1hbmQKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCBjb21lcyB3aXRoIGFuIGVzY2FwZSBoYXRjaCBmb3IgdXNlcnMgdG8KKyAgIGRlYWwgd2l0aCBtaXNkZXRlY3RlZCBjYXNlcy4KKworICogVGhlICItLWdpdC1wYXRoIiwgIi0tZ2l0LWNvbW1vbi1kaXIiLCBhbmQgIi0tc2hhcmVkLWluZGV4LXBhdGgiCisgICBvcHRpb25zIG9mICJnaXQgcmV2LXBhcnNlIiBkaWQgbm90IHByb2R1Y2UgdXNhYmxlIG91dHB1dC4gIFRoZXkgYXJlCisgICBub3cgdXBkYXRlZCB0byBzaG93IHRoZSBwYXRoIHRvIHRoZSBjb3JyZWN0IGZpbGUsIHJlbGF0aXZlIHRvIHdoZXJlCisgICB0aGUgY2FsbGVyIGlzLgorCisgKiAiZ2l0IGRpZmYgLVciIGhhcyBiZWVuIHRhdWdodCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBuZXcKKyAgIGZ1bmN0aW9uIGlzIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYmV0dGVyLgorCisgKiAiZ2l0IHVwZGF0ZS1yZWYgLWQiIGFuZCBvdGhlciBvcGVyYXRpb25zIHRvIGRlbGV0ZSByZWZlcmVuY2VzIGRpZAorICAgbm90IGxlYXZlIGFueSBlbnRyeSBpbiBIRUFEJ3MgcmVmbG9nIHdoZW4gdGhlIHJlZmVyZW5jZSBiZWluZworICAgZGVsZXRlZCB3YXMgdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGluIHByYWN0aWNlCisgICBiZWNhdXNlIHlvdSBkbyBub3Qgd2FudCB0byBkZWxldGUgdGhlIGJyYW5jaCB5b3UgYXJlIGN1cnJlbnRseSBvbiwKKyAgIGJ1dCBjYXVzZWQgcmVuYW1pbmcgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHNvbWV0aGluZyBlbHNlIG5vdCB0bworICAgYmUgbG9nZ2VkIGluIGEgdXNlZnVsIHdheS4KKworICogIkNjOiIgb24gdGhlIHRyYWlsZXIgcGFydCBkb2VzIG5vdCBoYXZlIHRvIGNvbmZvcm0gdG8gUkZDIHN0cmljdGx5LAorICAgdW5saWtlIGluIHRoZSBlLW1haWwgaGVhZGVyLiAgImdpdCBzZW5kLWVtYWlsIiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBpZ25vcmUgYW55dGhpbmcgYWZ0ZXIgJz4nIHdoZW4gcGlja2luZyBhZGRyZXNzZXMsIHRvIGFsbG93IG5vbi1hZGRyZXNzCisgICBjcnVmdCBsaWtlICIgIyBzdGFibGUgNC40IiBhZnRlciB0aGUgYWRkcmVzcy4KKworICogV2hlbiAiZ2l0IHN1Ym1vZHVsZSBpbml0IiBkZWNpZGVzIHRoYXQgdGhlIHN1Ym1vZHVsZSBpbiB0aGUgd29ya2luZworICAgdHJlZSBpcyBpdHMgdXBzdHJlYW0sIGl0IG5vdyBnaXZlcyBhIHdhcm5pbmcgYXMgaXQgaXMgbm90IGEgdmVyeQorICAgY29tbW9uIHNldHVwLgorCisgKiAiZ2l0IHN0YXNoIHB1c2giIHRha2VzIGEgcGF0aHNwZWMgc28gdGhhdCB0aGUgbG9jYWwgY2hhbmdlcyBjYW4gYmUKKyAgIHN0YXNoZWQgYXdheSBvbmx5IHBhcnRpYWxseS4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgImdpdCBscy1maWxlcyIgZGlkIG5vdCByZWZlciB0byBjb3JlLnF1b3RlUGF0aC4KKworICogVGhlIGV4cGVyaW1lbnRhbCAic3BsaXQgaW5kZXgiIGZlYXR1cmUgaGFzIGdhaW5lZCBhIGZldworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlLgorCisgKiBGcm9tIGEgd29ya2luZyB0cmVlIG9mIGEgcmVwb3NpdG9yeSwgYSBuZXcgb3B0aW9uIG9mICJyZXYtcGFyc2UiCisgICBsZXRzIHlvdSBhc2sgaWYgdGhlIHJlcG9zaXRvcnkgaXMgdXNlZCBhcyBhIHN1Ym1vZHVsZSBvZiBhbm90aGVyCisgICBwcm9qZWN0LCBhbmQgd2hlcmUgdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSBvZiB0aGF0CisgICBwcm9qZWN0IChpLmUuIHlvdXIgc3VwZXJwcm9qZWN0KSBpcy4KKworICogVGhlIHBhdGhzcGVjIG1lY2hhbmlzbSBsZWFybmVkIHRvIGZ1cnRoZXIgbGltaXQgdGhlIHBhdGhzIHRoYXQKKyAgIG1hdGNoIHRoZSBwYXR0ZXJuIHRvIHRob3NlIHRoYXQgaGF2ZSBzcGVjaWZpZWQgYXR0cmlidXRlcyBhdHRhY2hlZAorICAgdmlhIHRoZSBnaXRhdHRyaWJ1dGVzIG1lY2hhbmlzbS4KKworICogT3VyIHNvdXJjZSBjb2RlIGhhcyB1c2VkIHRoZSBTSEExX0hFQURFUiBjcHAgbWFjcm8gYWZ0ZXIgIiNpbmNsdWRlIgorICAgaW4gdGhlIEMgY29kZSB0byBzd2l0Y2ggYW1vbmcgdGhlIFNIQS0xIGltcGxlbWVudGF0aW9ucy4gSW5zdGVhZCwKKyAgIGxpc3QgdGhlIGV4YWN0IGhlYWRlciBmaWxlIG5hbWVzIGFuZCBzd2l0Y2ggYW1vbmcgaW1wbGVtZW50YXRpb25zCisgICB1c2luZyAiI2lmZGVmIEJMS19TSEExLyNpbmNsdWRlICJibG9jay1zaGExL3NoYTEuaCIvLi4uLyNlbmRpZiI7CisgICB0aGlzIGhlbHBzIHNvbWUgSURFIHRvb2xzLgorCisgKiBUaGUgc3RhcnQtdXAgc2VxdWVuY2Ugb2YgImdpdCIgbmVlZHMgdG8gZmlndXJlIG91dCBzb21lIGNvbmZpZ3VyZWQKKyAgIHNldHRpbmdzIGJlZm9yZSBpdCBmaW5kcyBhbmQgc2V0IGl0c2VsZiB1cCBpbiB0aGUgbG9jYXRpb24gb2YgdGhlCisgICByZXBvc2l0b3J5IGFuZCB3YXMgcXVpdGUgbWVzc3kgZHVlIHRvIGl0cyAiY2hpY2tlbi1hbmQtZWdnIiBuYXR1cmUuCisgICBUaGUgY29kZSBoYXMgYmVlbiByZXN0cnVjdHVyZWQuCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgcHJvbXB0IChpbiBjb250cmliLykgbGVhcm5lZCBhIG5ldyAndGFnJyBzdHlsZQorICAgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHdpdGggR0lUX1BTMV9ERVNDUklCRV9TVFlMRSwgdG8gZGVzY3JpYmUgYQorICAgZGV0YWNoZWQgSEVBRCB3aXRoICJnaXQgZGVzY3JpYmUgLS10YWdzIi4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBsZWFybmVkIGEgbmV3ICJpbmNsdWRlSWYuPGNvbmRpdGlvbj4ucGF0aCIKKyAgIHRoYXQgaW5jbHVkZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBwYXRoIG9ubHkgd2hlbiB0aGUKKyAgIGNvbmRpdGlvbiBob2xkcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBzYXkgImluY2x1ZGUgdGhpcyB3b3JrLXJlbGF0ZWQKKyAgIGJpdCBvbmx5IGluIHRoZSByZXBvc2l0b3JpZXMgdW5kZXIgbXkgfi93b3JrLyBkaXJlY3RvcnkiLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvICJyZWJhc2UgLWkiIHN0YXJ0ZWQgc2hvd2luZyBhIG1lc3NhZ2UgdGhhdCBpcyBub3QKKyAgIGEgd2FybmluZyB3aXRoICJ3YXJuaW5nOiIgcHJlZml4IGJ5IG1pc3Rha2UuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiBSZWNlbnRseSB3ZSBzdGFydGVkIHBhc3NpbmcgdGhlICItLXB1c2gtb3B0aW9ucyIgdGhyb3VnaCB0aGUKKyAgIGV4dGVybmFsIHJlbW90ZSBoZWxwZXIgaW50ZXJmYWNlOyBub3cgdGhlICJzbWFydCBIVFRQIiByZW1vdGUKKyAgIGhlbHBlciB1bmRlcnN0YW5kcyB3aGF0IHRvIGRvIHdpdGggdGhlIHBhc3NlZCBpbmZvcm1hdGlvbi4KKworICogImdpdCBkZXNjcmliZSAtLWRpcnR5IiBkaWVzIHdoZW4gaXQgY2Fubm90IGJlIGRldGVybWluZWQgaWYgdGhlCisgICBzdGF0ZSBpbiB0aGUgd29ya2luZyB0cmVlIG1hdGNoZXMgdGhhdCBvZiBIRUFEIChlLmcuIGJyb2tlbgorICAgcmVwb3NpdG9yeSBvciBicm9rZW4gc3VibW9kdWxlKS4gIFRoZSBjb21tYW5kIGxlYXJuZWQgYSBuZXcgb3B0aW9uCisgICAiZ2l0IGRlc2NyaWJlIC0tYnJva2VuIiB0byBnaXZlICIkbmFtZS1icm9rZW4iICh3aGVyZSAkbmFtZSBpcyB0aGUKKyAgIGRlc2NyaXB0aW9uIG9mIEhFQUQpIGluIHN1Y2ggYSBjYXNlLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBpcyB0YXVnaHQgdGhlICItLXJlY3Vyc2Utc3VibW9kdWxlcyIgb3B0aW9uLgorCisgKiBSZWNlbnQgZW5oYW5jZW1lbnQgdG8gImdpdCBzdGFzaCBwdXNoIiBjb21tYW5kIHRvIHN1cHBvcnQgcGF0aHNwZWMKKyAgIHRvIGFsbG93IG9ubHkgYSBzdWJzZXQgb2Ygd29ya2luZyB0cmVlIGNoYW5nZXMgdG8gYmUgc3Rhc2hlZCBhd2F5CisgICB3YXMgZm91bmQgdG8gYmUgdG9vIGNoYXR0eSBhbmQgZXhwb3NlZCB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24KKyAgIGRldGFpbCAoZS5nLiB3aGVuIGl0IHVzZXMgcmVzZXQgdG8gbWF0Y2ggdGhlIGluZGV4IHRvIEhFQUQgYmVmb3JlCisgICBkb2luZyBvdGhlciB0aGluZ3MsIG91dHB1dCBmcm9tIHJlc2V0IHNlZXBlZCBvdXQpLiAgVGhlc2UsIGFuZAorICAgb3RoZXIgY2hhdHR5bmVzcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBtZXJnZSA8bWVzc2FnZT4gSEVBRCA8Y29tbWl0PiIgc3ludGF4IHRoYXQgaGFzIGJlZW4gZGVwcmVjYXRlZAorICAgc2luY2UgT2N0b2JlciAyMDA3IGhhcyBiZWVuIHJlbW92ZWQuCisKKyAqIFRoZSByZWZzIGNvbXBsZXRpb24gZm9yIGxhcmdlIG51bWJlciBvZiByZWZzIGhhcyBiZWVuIHNwZWQgdXAsCisgICBwYXJ0bHkgYnkgZ2l2aW5nIHVwIGRpc2FtYmlndWF0aW5nIGFtYmlndW91cyByZWZzIGFuZCBwYXJ0bHkgYnkKKyAgIGVsaW1pbmF0aW5nIG1vc3Qgb2YgdGhlIHNoZWxsIHByb2Nlc3NpbmcgYmV0d2VlbiAnZ2l0IGZvci1lYWNoLXJlZicKKyAgIGFuZCAnbHMtcmVtb3RlJyBhbmQgQmFzaCdzIGNvbXBsZXRpb24gZmFjaWxpdHkuCisKKyAqIE9uIG1hbnkga2V5Ym9hcmRzLCB0eXBpbmcgIkB7IiBpbnZvbHZlcyBob2xkaW5nIGRvd24gU0hJRlQga2V5IGFuZAorICAgb25lIGNhbiBlYXNpbHkgZW5kIHVwIHdpdGggIkB7VXAuLi4iIHdoZW4gdHlwaW5nICJAe3Vwc3RyZWFtfSIuICBBcworICAgdGhlIHVwc3RyZWFtL3B1c2gga2V5d29yZHMgZG8gbm90IGFwcGVhciBhbnl3aGVyZSBlbHNlIGluIHRoZSBzeW50YXgsCisgICB3ZSBjYW4gc2FmZWx5IGFjY2VwdCB0aGVtIGNhc2UgaW5zZW5zaXRpdmVseSB3aXRob3V0IGludHJvZHVjaW5nCisgICBhbWJpZ3VpdHkgb3IgY29uZnVzaW9uIHRvIHNvbHZlIHRoaXMuCisKKyAqICJnaXQgdGFnL2JyYW5jaC9mb3ItZWFjaC1yZWYiIGZhbWlseSBvZiBjb21tYW5kcyBsb25nIGFsbG93ZWQgdG8KKyAgIGZpbHRlciB0aGUgcmVmcyBieSAiLS1jb250YWlucyBYIiAoc2hvdyBvbmx5IHRoZSByZWZzIHRoYXQgYXJlCisgICBkZXNjZW5kYW50cyBvZiBYKSwgIi0tbWVyZ2VkIFgiIChzaG93IG9ubHkgdGhlIHJlZnMgdGhhdCBhcmUKKyAgIGFuY2VzdG9ycyBvZiBYKSwgIi0tbm8tbWVyZ2VkIFgiIChzaG93IG9ubHkgdGhlIHJlZnMgdGhhdCBhcmUgbm90CisgICBhbmNlc3RvcnMgb2YgWCkuICBPbmUgY3VyaW91cyBvbWlzc2lvbiwgIi0tbm8tY29udGFpbnMgWCIgKHNob3cKKyAgIG9ubHkgdGhlIHJlZnMgdGhhdCBhcmUgbm90IGRlc2NlbmRhbnRzIG9mIFgpIGhhcyBiZWVuIGFkZGVkIHRvCisgICB0aGVtLgorCisgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgImdpdCBsb2ciIGluIGFuIGludGVyYWN0aXZlIHNlc3Npb24gaGFzCisgICBiZWVuIGNoYW5nZWQgdG8gZW5hYmxlICItLWRlY29yYXRlIi4KKworICogVGhlIG91dHB1dCBmcm9tICJnaXQgc3RhdHVzIC0tc2hvcnQiIGhhcyBiZWVuIGV4dGVuZGVkIHRvIHNob3cKKyAgIHZhcmlvdXMga2luZHMgb2YgZGlydGluZXNzIGluIHN1Ym1vZHVsZXMgZGlmZmVyZW50bHk7IGluc3RlYWQgb2YgdG8KKyAgICJNIiBmb3IgbW9kaWZpZWQsICdtJyBhbmQgJz8nIGNhbiBiZSBzaG93biB0byBzaWduYWwgY2hhbmdlcyBvbmx5CisgICB0byB0aGUgd29ya2luZyB0cmVlIG9mIHRoZSBzdWJtb2R1bGUgYnV0IG5vdCB0aGUgY29tbWl0IHRoYXQgaXMKKyAgIGNoZWNrZWQgb3V0LgorCisgKiBBbGxvdyB0aGUgaHR0cC5wb3N0YnVmZmVyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYmUgc2V0IHRvIGEKKyAgIHNpemUgdGhhdCBjYW4gYmUgZXhwcmVzc2VkIGluIHNpemVfdCwgd2hpY2ggY2FuIGJlIGxhcmdlciB0aGFuCisgICB1bG9uZyBvbiBzb21lIHBsYXRmb3Jtcy4KKworICogImdpdCByZWJhc2UiIGxlYXJucyAiLS1zaWdub2ZmIiBvcHRpb24uCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gY29tcGxldGUgImdpdCBwdXNoCisgICAtLWRlbGV0ZSBiPFRBQj4iIHRvIGNvbXBsZXRlIGJyYW5jaCBuYW1lIHRvIGJlIGRlbGV0ZWQuCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIC0tbG9jayIgYWxsb3dzIHRvIGxvY2sgYSB3b3JrdHJlZSBpbW1lZGlhdGVseQorICAgYWZ0ZXIgaXQncyBjcmVhdGVkLiBUaGlzIGhlbHBzIHByZXZlbnQgYSByYWNlIGJldHdlZW4gImdpdCB3b3JrdHJlZQorICAgYWRkOyBnaXQgd29ya3RyZWUgbG9jayIgYW5kICJnaXQgd29ya3RyZWUgcHJ1bmUiLgorCisgKiBDb21wbGV0aW9uIGZvciAiZ2l0IGNoZWNrb3V0IDxicmFuY2g+IiB0aGF0IGF1dG8tY3JlYXRlcyB0aGUgYnJhbmNoCisgICBvdXQgb2YgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGNhbiBub3cgYmUgZGlzYWJsZWQsIGFzIHRoaXMKKyAgIGNvbXBsZXRpb24gb2Z0ZW4gZ2V0cyBpbiB0aGUgd2F5IHdoZW4gY29tcGxldGluZyB0byBjaGVja291dCBhbgorICAgZXhpc3RpbmcgbG9jYWwgYnJhbmNoIHRoYXQgaGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBwcmVmaXggd2l0aAorICAgYnVuY2ggb2YgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFRoZSBjb2RlIHRvIGxpc3QgYnJhbmNoZXMgaW4gImdpdCBicmFuY2giIGhhcyBiZWVuIGNvbnNvbGlkYXRlZAorICAgd2l0aCB0aGUgbW9yZSBnZW5lcmljIHJlZi1maWx0ZXIgQVBJLgorCisgKiBSZXNvdXJjZSB1c2FnZSB3aGlsZSBlbnVtZXJhdGluZyByZWZzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZQorICAgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGhlbHAgcmVjZWl2aW5nIGVuZCBvZiAicHVzaCIgdGhhdCBob3N0cyBhCisgICByZXBvc2l0b3J5IHdpdGggbWFueSAiZm9ya3MiLgorCisgKiBUaGUgZ2l0YXR0cmlidXRlcyBtYWNoaW5lcnkgaXMgYmVpbmcgdGF1Z2h0IHRvIHdvcmsgYmV0dGVyIGluIGEKKyAgIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50LgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgc3RhcnRzIHVzaW5nIHRoZSByZWNlbnRseSB1cGRhdGVkICJzZXF1ZW5jZXIiIGNvZGUuCisKKyAqIENvZGUgYW5kIGRlc2lnbiBjbGVhbi11cCBmb3IgdGhlIHJlZnMgQVBJLgorCisgKiBUaGUgcHJlbG9hZC1pbmRleCBjb2RlIGhhcyBiZWVuIHRhdWdodCBub3QgdG8gYm90aGVyIHdpdGggdGhlIGluZGV4CisgICBlbnRyaWVzIHRoYXQgYXJlIHBhdGhzIHRoYXQgYXJlIG5vdCBjaGVja2VkIG91dCBieSAic3BhcnNlIGNoZWNrb3V0Ii4KKworICogU29tZSB3YXJuaW5nKCkgbWVzc2FnZXMgZnJvbSAiZ2l0IGNsZWFuIiB3ZXJlIHVwZGF0ZWQgdG8gc2hvdyB0aGUKKyAgIGVycm5vIGZyb20gZmFpbGVkIHN5c3RlbSBjYWxscy4KKworICogVGhlICJwYXJzZV9jb25maWdfa2V5KCkiIEFQSSBmdW5jdGlvbiBoYXMgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBBIHRlc3QgdGhhdCBjcmVhdGVzIGEgY29uZnVzaW5nIGJyYW5jaCB3aG9zZSBuYW1lIGlzIEhFQUQgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCBub3QgdG8gZG8gc28uCisKKyAqIFRoZSBjb2RlIHRoYXQgcGFyc2VzIGhlYWRlciBmaWVsZHMgaW4gdGhlIGNvbW1pdCBvYmplY3QgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgZm9yIChtaWNybylwZXJmb3JtYW5jZSBhbmQgY29kZSBoeWdpZW5lLgorCisgKiBBbiBoZWxwZXIgZnVuY3Rpb24gdG8gbWFrZSBpdCBlYXNpZXIgdG8gYXBwZW5kIHRoZSByZXN1bHQgZnJvbQorICAgcmVhbF9wYXRoKCkgdG8gYSBzdHJidWYgaGFzIGJlZW4gYWRkZWQuCisKKyAqIFJlZHVjZSBhdXRoZW50aWNhdGlvbiByb3VuZC10cmlwIG92ZXIgSFRUUCB3aGVuIHRoZSBzZXJ2ZXIgc3VwcG9ydHMKKyAgIGp1c3QgYSBzaW5nbGUgYXV0aGVudGljYXRpb24gbWV0aG9kLiAgVGhpcyBhbHNvIGltcHJvdmVzIHRoZQorICAgYmVoYXZpb3VyIHdoZW4gR2l0IGlzIG1pc2NvbmZpZ3VyZWQgdG8gZW5hYmxlIGh0dHAuZW1wdHlBdXRoCisgICBhZ2FpbnN0IGEgc2VydmVyIHRoYXQgZG9lcyBub3QgYXV0aGVudGljYXRlIHdpdGhvdXQgYSB1c2VybmFtZQorICAgKGkuZS4gbm90IHVzaW5nIEtlcmJlcm9zIGV0Yy4sIHdoaWNoIG1ha2VzIGh0dHAuZW1wdHlBdXRoCisgICBwb2ludGxlc3MpLgorCisgKiBXaW5kb3dzIHBvcnQgd2FudHMgdG8gdXNlIE9wZW5TU0wncyBpbXBsZW1lbnRhdGlvbiBvZiBTSEEtMQorICAgcm91dGluZXMsIHNvIGxldCB0aGVtLgorCisgKiBUaGUgdC9wZXJmIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGUgd2FzIG5vdCBwcmVwYXJlZCB0byB0ZXN0IG5vdCBzbworICAgb2xkIHZlcnNpb25zIG9mIEdpdCwgYnV0IG5vdyBpdCBjb3ZlcnMgdmVyc2lvbnMgb2YgR2l0IHRoYXQgYXJlIG5vdAorICAgc28gYW5jaWVudC4KKworICogQWRkIDMyLWJpdCBMaW51eCB2YXJpYW50IHRvIHRoZSBzZXQgb2YgcGxhdGZvcm1zIHRvIGJlIHRlc3RlZCB3aXRoCisgICBUcmF2aXMgQ0kuCisKKyAqICJnaXQgYnJhbmNoIC0tbGlzdCIgdGFrZXMgdGhlICItLWFiYnJldiIgYW5kICItLW5vLWFiYnJldiIgb3B0aW9ucworICAgdG8gY29udHJvbCB0aGUgb3V0cHV0IG9mIHRoZSBvYmplY3QgbmFtZSBpbiBpdHMgIi12IihlcmJvc2UpCisgICBvdXRwdXQsIGJ1dCBhIHJlY2VudCB1cGRhdGUgc3RhcnRlZCBpZ25vcmluZyB0aGVtOyBmaXggaXQgYmVmb3JlCisgICB0aGUgYnJlYWthZ2UgcmVhY2hlcyB0byBhbnkgcmVsZWFzZWQgdmVyc2lvbi4KKworICogUGlja2luZyB0d28gdmVyc2lvbnMgb2YgR2l0IGFuZCBydW5uaW5nIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGUKKyAgIG9sZGVyIG9uZSBhbmQgdGhlIG5ld2VyIG9uZSBpbnRlcm9wZXJhdGUgaGFwcGlseSBoYXMgbm93IGJlY29tZQorICAgcG9zc2libGUuCisKKyAqICJnaXQgdGFnIC0tY29udGFpbnMiIHVzZWQgdG8gKGFiKXVzZSB0aGUgb2JqZWN0IGJpdHMgdG8ga2VlcCB0cmFjaworICAgb2YgdGhlIHN0YXRlIG9mIG9iamVjdCByZWFjaGFiaWxpdHkgd2l0aG91dCBjbGVhcmluZyB0aGVtIGFmdGVyCisgICB1c2U7IHRoaXMgaGFzIGJlZW4gY2xlYW5lZCB1cCBhbmQgbWFkZSB0byB1c2UgdGhlIG5ld2VyIGNvbW1pdC1zbGFiCisgICBmYWNpbGl0eS4KKworICogVGhlICJkZWJ1ZyIgaGVscGVyIHVzZWQgaW4gdGhlIHRlc3QgZnJhbWV3b3JrIGxlYXJuZWQgdG8gcnVuCisgICBhIGNvbW1hbmQgdW5kZXIgImdkYiIgaW50ZXJhY3RpdmVseS4KKworICogVGhlICJkZXRlY3QgYXR0ZW1wdCB0byBjcmVhdGUgY29sbGlzaW9ucyIgdmFyaWFudCBvZiBTSEEtMQorICAgaW1wbGVtZW50YXRpb24gYnkgTWFyYyBTdGV2ZW5zIChDV0kpIGFuZCBEYW4gU2h1bW93IChNaWNyb3NvZnQpCisgICBoYXMgYmVlbiBpbnRlZ3JhdGVkIGFuZCBtYWRlIHRoZSBkZWZhdWx0LgorCisgKiBUaGUgdGVzdCBmcmFtZXdvcmsgbGVhcm5lZCB0byBkZXRlY3QgdW50ZXJtaW5hdGVkIGhlcmUgZG9jdW1lbnRzLgorCisgKiBUaGUgbmFtZS1oYXNoIHVzZWQgZm9yIGRldGVjdGluZyBwYXRocyB0aGF0IGFyZSBkaWZmZXJlbnQgb25seSBpbgorICAgY2FzZXMgKHdoaWNoIG1hdHRlciBvbiBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zKSBoYXMgYmVlbgorICAgb3B0aW1pemVkIHRvIHRha2UgYWR2YW50YWdlIG9mIG11bHRpLXRocmVhZGluZyB3aGVuIGl0IG1ha2VzIHNlbnNlLgorCisgKiBBbiBlYXJsaWVyIHZlcnNpb24gb2Ygc2hhMWRjL3NoYTEuYyB0aGF0IHdhcyBtZXJnZWQgdG8gJ21hc3RlcicKKyAgIGNvbXBpbGVkIGluY29ycmVjdGx5IG9uIFdpbmRvd3MsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAid2hhdCBVUkwgZG8gd2Ugd2FudCB0byB1cGRhdGUgdGhpcyBzdWJtb2R1bGU/IiBhbmQgImFyZSB3ZQorICAgaW50ZXJlc3RlZCBpbiB0aGlzIHN1Ym1vZHVsZT8iIGFyZSBzcGxpdCBpbnRvIHR3byBkaXN0aW5jdAorICAgY29uY2VwdHMsIGFuZCB0aGVuIHRoZSB3YXkgdXNlZCB0byBleHByZXNzIHRoZSBsYXR0ZXIgZ290IGV4dGVuZGVkLAorICAgcGF2aW5nIGEgd2F5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIG1hbmFnZSBhIHByb2plY3Qgd2l0aCBtYW55CisgICBzdWJtb2R1bGVzIGFuZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGxhdGVyIGV4dGVuZCB1c2Ugb2YgbXVsdGlwbGUKKyAgIHdvcmt0cmVlcyBmb3IgYSBwcm9qZWN0IHdpdGggc3VibW9kdWxlcy4KKworICogU29tZSBkZWJ1Z2dpbmcgb3V0cHV0IGZyb20gImdpdCBkZXNjcmliZSIgd2VyZSBtYXJrZWQgZm9yIGwxMG4sCisgICBidXQgc29tZSB3ZXJlbid0LiAgTWFyayBtaXNzaW5nIG9uZXMgZm9yIGwxMG4uCisKKyAqIERlZmluZSBhIG5ldyB0YXNrIGluIC50cmF2aXMueW1sIHRoYXQgdHJpZ2dlcnMgYSB0ZXN0IHNlc3Npb24gb24KKyAgIFdpbmRvd3MgcnVuIGVsc2V3aGVyZS4KKworICogQ29udmVyc2lvbiBmcm9tIHVjaGFyWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogVGhlICJzdWJtb2R1bGUiIHNwZWNpZmljIGZpZWxkIGluIHRoZSByZWZfc3RvcmUgc3RydWN0dXJlIGlzCisgICByZXBsYWNlZCB3aXRoIGEgbW9yZSBnZW5lcmljICJnaXRkaXIiIHRoYXQgY2FuIGxhdGVyIGJlIHVzZWQgYWxzbworICAgd2hlbiBkZWFsaW5nIHdpdGggcmVmX3N0b3JlIHRoYXQgcmVwcmVzZW50cyB0aGUgc2V0IG9mIHJlZnMgdmlzaWJsZQorICAgZnJvbSB0aGUgb3RoZXIgd29ya3RyZWVzLgorCisgKiBUaGUgc3RyaW5nLWxpc3QgQVBJIHVzZWQgYSBjdXN0b20gcmVhbGxvY2F0aW9uIHN0cmF0ZWd5IHRoYXQgd2FzCisgICB2ZXJ5IGluZWZmaWNpZW50LCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSB1c3VhbCBBTExPQ19HUk9XKCkgbWFjcm8sCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA5NTBhMjM0Y2JkIGpoL3N0cmluZy1saXN0LW1pY3JvLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogSW4gYSAyLSBhbmQgMy13YXkgbWVyZ2Ugb2YgdHJlZXMsIG1vcmUgdGhhbiBvbmUgc291cmNlIHRyZWVzIG9mdGVuCisgICBlbmQgdXAgc2hhcmluZyBhbiBpZGVudGljYWwgc3VidHJlZTsgb3B0aW1pemUgYnkgbm90IHJlYWRpbmcgdGhlCisgICBzYW1lIHRyZWUgbXVsdGlwbGUgdGltZXMgaW4gc3VjaCBhIGNhc2UuCisgICAobWVyZ2UgZDEyYThjZjBhZiBqaC91bnBhY2stdHJlZXMtbWljcm8tb3B0aW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW5kZXggZmlsZSBoYXMgYSB0cmFpbGluZyBTSEEtMSBjaGVja3N1bSB0byBkZXRlY3QgZmlsZQorICAgY29ycnVwdGlvbiwgYW5kIGhpc3RvcmljYWxseSB3ZSBjaGVja2VkIGl0IGV2ZXJ5IHRpbWUgdGhlIGluZGV4CisgICBmaWxlIGlzIHVzZWQuICBPbWl0IHRoZSB2YWxpZGF0aW9uIGR1cmluZyBub3JtYWwgdXNlLCBhbmQgaW5zdGVhZAorICAgdmVyaWZ5IG9ubHkgaW4gImdpdCBmc2NrIi4KKworICogSGF2aW5nIGEgZ2l0IGNvbW1hbmQgb24gdGhlIHVwc3RyZWFtIHNpZGUgb2YgYSBwaXBlIGluIGEgdGVzdAorICAgc2NyaXB0IHdpbGwgaGlkZSB0aGUgZXhpdCBzdGF0dXMgZnJvbSB0aGUgY29tbWFuZCwgd2hpY2ggbWF5IGNhdXNlCisgICB1cyB0byBmYWlsIHRvIG5vdGljZSBhIGJyZWFrYWdlOyByZXdyaXRlIHRlc3RzIGluIGEgc2NyaXB0IHRvIGF2b2lkCisgICB0aGlzIGlzc3VlLgorCisgKiBUcmF2aXMgQ0kgbGVhcm5zIHRvIHJ1biBjb2NjaWNoZWNrLgorCisgKiAiZ2l0IGNoZWNrb3V0IiB0aGF0IGhhbmRsZXMgYSBsb3Qgb2YgcGF0aHMgaGFzIGJlZW4gb3B0aW1pemVkIGJ5CisgICByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHVubmVjZXNzYXJ5IGNoZWNrcyBvZiBwYXRocyBpbiB0aGUKKyAgIGhhc19kaXJfbmFtZSgpIGZ1bmN0aW9uLgorCisgKiBUaGUgaW50ZXJuYWxzIG9mIHRoZSByZWZzIEFQSSBhcm91bmQgdGhlIGNhY2hlZCByZWZzIGhhcyBiZWVuCisgICBzdHJlYW1saW5lZC4KKworICogT3V0cHV0IGZyb20gcGVyZiB0ZXN0cyBoYXZlIGJlZW4gdXBkYXRlZCB0byBhbGlnbiB0aGVpciB0aXRsZXMuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjEyCistLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjEyIGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqICJnaXQgcmVwYWNrIC0tZGVwdGg9PG4+IiBmb3IgYSBsb25nIHRpbWUgYnVzdGVkIHRoZSBzcGVjaWZpZWQgZGVwdGgKKyAgIHdoZW4gcmV1c2luZyBkZWx0YSBmcm9tIGV4aXN0aW5nIHBhY2tzLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBjb2RlIHRvIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgImdpdCBncmVwIDxwYXR0ZXJucz4uLi4gPHJldj4KKyAgIFtbLS1dIDxwYXRoc3BlYz4uLi5dIiBoYXMgYmVlbiBjbGVhbmVkIHVwLCBhbmQgYSBoYW5kZnVsIG9mIGJ1Z3MKKyAgIGhhdmUgYmVlbiBmaXhlZCAoZS5nLiB3ZSB1c2VkIHRvIGNoZWNrICItLSIgaWYgaXQgaXMgYSByZXYpLgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgYW5kICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSIgYXJlIGRlc2lnbmVkIHRvIHdvcmsKKyAgIHdpdGhvdXQgYmVpbmcgaW4gYSBkaXJlY3RvcnkgdW5kZXIgR2l0J3MgY29udHJvbC4gIEhvd2V2ZXIsIHJlY2VudAorICAgdXBkYXRlcyByZXZlYWxlZCB0aGF0IHdlIHJhbmRvbWx5IGxvb2sgaW50byBhIGRpcmVjdG9yeSBjYWxsZWQKKyAgIC5naXQvIHdpdGhvdXQgYWN0dWFsbHkgZG9pbmcgbmVjZXNzYXJ5IHNldC11cCB3aGVuIHdvcmtpbmcgaW4gYQorICAgcmVwb3NpdG9yeS4gIFN0b3AgZG9pbmcgc28uCisKKyAqICJnaXQgc2hvdy1icmFuY2giIGV4cGVjdGVkIHRoZXJlIHdlcmUgb25seSB2ZXJ5IHNob3J0IGJyYW5jaCBuYW1lcworICAgaW4gdGhlIHJlcG9zaXRvcnkgYW5kIHVzZWQgYSBmaXhlZC1sZW5ndGggYnVmZmVyIHRvIGhvbGQgdGhlbQorICAgd2l0aG91dCBjaGVja2luZyBmb3Igb3ZlcmZsb3cuCisKKyAqIEEgY2FsbGVyIG9mIHRlbXBmaWxlIEFQSSB0aGF0IHVzZXMgc3RkaW8gaW50ZXJmYWNlIHRvIHdyaXRlIHRvCisgICBmaWxlcyBtYXkgaWdub3JlIGVycm9ycyB3aGlsZSB3cml0aW5nLCB3aGljaCBpcyBkZXRlY3RlZCB3aGVuCisgICB0ZW1wZmlsZSBpcyBjbG9zZWQgKHdpdGggYSBjYWxsIHRvIGZlcnJvcigpKS4gIEJ5IHRoYXQgdGltZSwgdGhlCisgICBvcmlnaW5hbCBlcnJubyB0aGF0IG1heSBoYXZlIHRvbGQgdXMgd2hhdCB3ZW50IHdyb25nIGlzIGxpa2VseSB0bworICAgYmUgbG9uZyBnb25lIGFuZCB3YXMgb3ZlcndyaXR0ZW4gYnkgYW4gaXJyZWxldmFudCB2YWx1ZS4KKyAgIGNsb3NlX3RlbXBmaWxlKCkgbm93IHJlc2V0cyBlcnJubyB0byBFSU8gdG8gbWFrZSBlcnJubyBhdCBsZWFzdAorICAgcHJlZGljdGFibGUuCisKKyAqICJnaXQgcmVtb3RlIHJtIFgiLCB3aGVuIGEgYnJhbmNoIGhhcyByZW1vdGUgWCBjb25maWd1cmVkIGFzIHRoZQorICAgdmFsdWUgb2YgaXRzIGJyYW5jaC4qLnJlbW90ZSwgdHJpZWQgdG8gcmVtb3ZlIGJyYW5jaC4qLnJlbW90ZSBhbmQKKyAgIGJyYW5jaC4qLm1lcmdlIGFuZCBmYWlsZWQgaWYgZWl0aGVyIGlzIHVuc2V0LgorCisgKiBBICJnYy5sb2ciIGZpbGUgbGVmdCBieSBhIGJhY2tncm91bmRlZCAiZ2MgLS1hdXRvIiBkaXNhYmxlcyBmdXJ0aGVyCisgICBhdXRvbWF0aWMgZ2M7IGl0IGhhcyBiZWVuIHRhdWdodCB0byBydW4gYXQgbGVhc3Qgb25jZSBhIGRheSAoYnkKKyAgIGRlZmF1bHQpIGJ5IGlnbm9yaW5nIGEgc3RhbGUgImdjLmxvZyIgZmlsZSB0aGF0IGlzIHRvbyBvbGQuCisKKyAqIFRoZSBjb2RlIHRvIHBhcnNlICJnaXQgLWMgVkFSPVZBTCBjbWQiIGFuZCBzZXQgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgZm9yIHRoZSBkdXJhdGlvbiBvZiBjbWQgaGFkIHR3byBzbWFsbCBidWdzLCB3aGljaCBoYXZlCisgICBiZWVuIGZpeGVkLgorCisgKiB1c2VyLmVtYWlsIHRoYXQgY29uc2lzdHMgb2Ygb25seSBjcnVmdCBjaGFycyBzaG91bGQgY29uc2lzdGVudGx5CisgICBlcnJvciBvdXQsIGJ1dCBkaWRuJ3QuCisKKyAqICJnaXQgdXBsb2FkLXBhY2siLCB3aGljaCBpcyBhIGNvdW50ZXItcGFydCBvZiAiZ2l0IGZldGNoIiwgZGlkIG5vdAorICAgcmVwb3J0IGEgcmVxdWVzdCBmb3IgYSByZWYgdGhhdCB3YXMgbm90IGFkdmVydGlzZWQgYXMgaW52YWxpZC4KKyAgIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBhIHByb2JsZW0gKGJlY2F1c2UgImdpdCBmZXRjaCIgd2lsbCBzdG9wCisgICBiZWZvcmUgbWFraW5nIHN1Y2ggYSByZXF1ZXN0KSwgYnV0IGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KKworICogQSBsZWFrIGluIGEgY29kZXBhdGggdG8gcmVhZCBmcm9tIGEgcGFja2VkIG9iamVjdCBpbiAocmFyZSkgY2FzZXMKKyAgIGhhcyBiZWVuIHBsdWdnZWQuCisKKyAqIFdoZW4gYSByZWRpcmVjdGVkIGh0dHAgdHJhbnNwb3J0IGdldHMgYW4gZXJyb3IgZHVyaW5nIHRoZQorICAgcmVkaXJlY3RlZCByZXF1ZXN0LCB3ZSBpZ25vcmVkIHRoZSBlcnJvciB3ZSBnb3QgZnJvbSB0aGUgc2VydmVyLAorICAgYW5kIGVuZGVkIHVwIGdpdmluZyBhIG5vdC1zby11c2VmdWwgZXJyb3IgbWVzc2FnZS4KKworICogVGhlIHBhdGNoIHN1YmNvbW1hbmQgb2YgImdpdCBhZGQgLWkiIHdhcyBtZWFudCB0byBoYXZlIHBhdGhzCisgICBzZWxlY3Rpb24gcHJvbXB0IGp1c3QgbGlrZSBvdGhlciBzdWJjb21tYW5kLCB1bmxpa2UgImdpdCBhZGQgLXAiCisgICBkaXJlY3RseSBqdW1wcyB0byBodW5rIHNlbGVjdGlvbi4gIFJlY2VudGx5LCB0aGlzIHdhcyBicm9rZW4gYW5kCisgICAiYWRkIC1pIiBsb3N0IHRoZSBwYXRocyBzZWxlY3Rpb24gZGlhbG9nLCBidXQgaXQgbm93IGhhcyBiZWVuCisgICBmaXhlZC4KKworICogR2l0IHYyLjEyIHdhcyBzaGlwcGVkIHdpdGggYW4gZW1iYXJyYXNzaW5nIGJyZWFrYWdlIHdoZXJlIHZhcmlvdXMKKyAgIG9wZXJhdGlvbnMgdGhhdCB2ZXJpZnkgcGF0aHMgZ2l2ZW4gZnJvbSB0aGUgdXNlciBzdG9wcGVkIGR5aW5nIHdoZW4KKyAgIHNlZWluZyBhbiBpc3N1ZSwgYW5kIGluc3RlYWQgbGF0ZXIgdHJpZ2dlcmluZyBzZWdmYXVsdC4KKworICogVGhlcmUgaXMgbm8gbmVlZCBmb3IgUHl0aG9uIG9ubHkgdG8gZ2l2ZSBhIGZldyBtZXNzYWdlcyB0byB0aGUKKyAgIHN0YW5kYXJkIGVycm9yIHN0cmVhbSwgYnV0IHdlIHNvbWVob3cgZGlkLgorCisgKiBUaGUgY29kZSB0byBwYXJzZSAiZ2l0IGxvZyAtTC4uLiIgY29tbWFuZCBsaW5lIHdhcyBidWdneSB3aGVuIHRoZXJlCisgICBhcmUgbWFueSByYW5nZXMgc3BlY2lmaWVkIHdpdGggLUw7IG92ZXJydW4gb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIKKyAgIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgY29tbWFuZC1saW5lIHBhcnNpbmcgb2YgImdpdCBsb2cgLUwiIGNvcGllZCBpbnRlcm5hbCBkYXRhCisgICBzdHJ1Y3R1cmVzIHVzaW5nIGluY29ycmVjdCBzaXplIG9uIElMUDMyIHN5c3RlbXMuCisKKyAqICJnaXQgZGlmZiAtLXF1aWV0IiByZWxpZXMgb24gdGhlIHNpemUgZmllbGQgaW4gZGlmZl9maWxlc3BlYyB0byBiZQorICAgY29ycmVjdGx5IHBvcHVsYXRlZCwgYnV0IGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoKSBoZWxwZXIgZnVuY3Rpb24KKyAgIG1hZGUgYW4gaW5jb3JyZWN0IHNob3J0LWN1dCB3aGVuIGFza2VkIG9ubHkgdG8gcG9wdWxhdGUgdGhlIHNpemUKKyAgIGZpZWxkIGZvciBwYXRocyB0aGF0IG5lZWQgdG8gZ28gdGhyb3VnaCBjb252ZXJ0X3RvX2dpdCgpIChlLmcuIENSTEYKKyAgIGNvbnZlcnNpb24pLgorCisgKiBBIGZldyB0ZXN0cyB3ZXJlIHJ1biBjb25kaXRpb25hbGx5IHVuZGVyIChyYXJlKSBjb25kaXRpb25zIHdoZXJlCisgICB0aGV5IGNhbm5vdCBiZSBydW4gKGxpa2UgcnVubmluZyBjdnMgdGVzdHMgdW5kZXIgJ3Jvb3QnIGFjY291bnQpLgorCisgKiAiZ2l0IGJyYW5jaCBAIiBjcmVhdGVkIHJlZnMvaGVhZHMvQCBhcyBhIGJyYW5jaCwgYW5kIGluIGdlbmVyYWwgdGhlCisgICBjb2RlIHRoYXQgaGFuZGxlZCBAey0xfSBhbmQgQHt1cHN0cmVhbX0gd2FzIGEgYml0IHRvbyBsb29zZSBpbgorICAgZGlzYW1iaWd1YXRpbmcuCisKKyAqICJnaXQgZmV0Y2giIHRoYXQgcmVxdWVzdHMgYSBjb21taXQgYnkgb2JqZWN0IG5hbWUsIHdoZW4gdGhlIG90aGVyCisgICBzaWRlIGRvZXMgbm90IGFsbG93IHN1Y2ggYW4gcmVxdWVzdCwgZmFpbGVkIHdpdGhvdXQgbXVjaAorICAgZXhwbGFuYXRpb24uCisKKyAqICJnaXQgZmlsdGVyLWJyYW5jaCAtLXBydW5lLWVtcHR5IiBkcm9wcyBhIHNpbmdsZS1wYXJlbnQgY29tbWl0IHRoYXQKKyAgIGJlY29tZXMgYSBuby1vcCwgYnV0IGRpZCBub3QgZHJvcCBhIHJvb3QgY29tbWl0IHdob3NlIHRyZWUgaXMgZW1wdHkuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBHaXQgdHJlYXRzIGh0dHAgYWx0ZXJuYXRlcyAodXNlZCBpbiBkdW1iIGh0dHAKKyAgIHRyYW5zcG9ydCkganVzdCBsaWtlIEhUVFAgcmVkaXJlY3RzIGFuZCByZXF1aXJlcyB0aGUgY2xpZW50IHRvCisgICBlbmFibGUgZm9sbG93aW5nIGl0LCBkdWUgdG8gc2VjdXJpdHkgY29uY2VybnMuICBCdXQgd2UgZm9yZ290IHRvCisgICBnaXZlIGEgd2FybmluZyB3aGVuIHdlIGRlY2lkZSBub3QgdG8gaG9ub3IgdGhlIGFsdGVybmF0ZXMuCisKKyAqICJnaXQgcHVzaCIgaGFkIGEgaGFuZGZ1bCBvZiBjb2RlcGF0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2sKKyAgIHdoZW4gdW5leHBlY3RlZCBlcnJvciBoYXBwZW5lZCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJEdW1iIGh0dHAiIHRyYW5zcG9ydCB1c2VkIHRvIG1pc3BhcnNlIGEgbm9uc2Vuc2UgaHR0cC1hbHRlcm5hdGVzCisgICByZXNwb25zZSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgYWRkIC1wIDxwYXRoc3BlYz4iIHVubmVjZXNzYXJpbHkgZXhwYW5kZWQgdGhlIHBhdGhzcGVjIHRvIGEKKyAgIGxpc3Qgb2YgaW5kaXZpZHVhbCBmaWxlcyB0aGF0IG1hdGNoZXMgdGhlIHBhdGhzcGVjIGJ5IHJ1bm5pbmcgImdpdAorICAgbHMtZmlsZXMgPHBhdGhzcGVjPiIsIGJlZm9yZSBmZWVkaW5nIGl0IHRvICJnaXQgZGlmZi1pbmRleCIgdG8gc2VlCisgICB3aGljaCBwYXRocyBoYXZlIGNoYW5nZXMsIGJlY2F1c2UgaGlzdG9yaWNhbGx5IHRoZSBwYXRoc3BlYworICAgbGFuZ3VhZ2Ugc3VwcG9ydGVkIGJ5ICJkaWZmLWluZGV4IiB3YXMgd2Vha2VyLiAgVGhlc2UgZGF5cyB0aGV5IGFyZQorICAgZXF1aXZhbGVudCBhbmQgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGludGVybmFsbHkgZXhwYW5kIGl0LiAgVGhpcworICAgaGVscHMgYm90aCBwZXJmb3JtYW5jZSBhbmQgYXZvaWRzIGNvbW1hbmQgbGluZSBhcmd1bWVudCBsaW1pdCBvbgorICAgc29tZSBwbGF0Zm9ybXMuCisgICAobWVyZ2UgNzI4OGUxMmNjZSBqay9hZGQtaS11c2UtcGF0aHNwZWNzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4iIGlzIHN1cHBvc2VkIHRvIGdpdmUgYSBzdGFibGUgb3V0cHV0LCBidXQgYQorICAgZmV3IHN0cmluZ3Mgd2VyZSBsZWZ0IGFzIHRyYW5zbGF0YWJsZSBieSBtaXN0YWtlLgorCisgKiAiZ2l0IHJldmVydCAtbSAwICRtZXJnZV9jb21taXQiIGNvbXBsYWluZWQgdGhhdCByZXZlcnRpbmcgYSBtZXJnZQorICAgbmVlZHMgdG8gc2F5IHJlbGF0aXZlIHRvIHdoaWNoIHBhcmVudCB0aGUgcmV2ZXJzaW9uIG5lZWRzIHRvCisgICBoYXBwZW4sIGFzIGlmICItbSAwIiB3ZXJlbid0IGdpdmVuLiAgVGhlIGNvcnJlY3QgZGlhZ25vc2lzIGlzIHRoYXQKKyAgICItbSAwIiBkb2VzIG5vdCByZWZlciB0byB0aGUgZmlyc3QgcGFyZW50ICgiLW0gMSIgZG9lcykuICBUaGlzIGhhcworICAgYmVlbiBmaXhlZC4KKworICogQ29kZSB0byByZWFkIHN1Ym1vZHVsZS48bmFtZT4uaWdub3JlIGNvbmZpZyBkaWQgbm90IHN0YXRlIHRoZQorICAgdmFyaWFibGUgbmFtZSBjb3JyZWN0bHkgd2hlbiBnaXZpbmcgYW4gZXJyb3IgbWVzc2FnZSBkaWFnbm9zaW5nCisgICBtaXNjb25maWd1cmF0aW9uLgorCisgKiBGaXggZm9yIE5PX1BUSFJFQURTIGJ1aWxkLgorCisgKiBGaXggZm9yIHBvdGVudGlhbCBzZWd2IGludHJvZHVjZWQgaW4gdjIuMTEuMCBhbmQgbGF0ZXIgKGFsc28KKyAgIHYyLjEwLjIpIHRvICJnaXQgbG9nIC0tcGlja2F4ZS1yZWdleCAtUyIuCisKKyAqIEEgZmV3IHVudGVybWluYXRlZCBoZXJlIGRvY3VtZW50cyBpbiB0ZXN0cyB3ZXJlIGZpeGVkLCB3aGljaCBpbgorICAgdHVybiByZXZlYWxlZCBpbmNvcnJlY3QgZXhwZWN0YXRpb25zIHRoZSB0ZXN0cyBtYWtlLiBUaGVzZSB0ZXN0cworICAgaGF2ZSBiZWVuIHVwZGF0ZWQuCisKKyAqIEZpeCBmb3IgTk9fUFRIUkVBRFMgb3B0aW9uLgorICAgKG1lcmdlIDIyMjVlMWVhMjAgYncvZ3JlcC1yZWN1cnNlLXN1Ym1vZHVsZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBHaXQgbm93IGF2b2lkcyBibGluZGx5IGZhbGxpbmcgYmFjayB0byAiLmdpdCIgd2hlbiB0aGUgc2V0dXAKKyAgIHNlcXVlbmNlIHNhaWQgd2UgYXJlIF9ub3RfIGluIEdpdCByZXBvc2l0b3J5LiAgQSBjb3JuZXIgY2FzZSB0aGF0CisgICBoYXBwZW5zIHRvIHdvcmsgcmlnaHQgbm93IG1heSBiZSBicm9rZW4gYnkgYSBjYWxsIHRvIGRpZSgiQlVHIikuCisgICAobWVyZ2UgYjFlZjQwMGVlYyBqay9uby1sb29raW5nLWF0LWRvdGdpdC1vdXRzaWRlLXJlcG8tZmluYWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGZldyBjb21tYW5kcyB0aGF0IHJlY2VudGx5IGxlYXJuZWQgdGhlICItLXJlY3Vyc2Utc3VibW9kdWxlIgorICAgb3B0aW9uIG1pc2JlaGF2ZWQgd2hlbiBzdGFydGVkIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICBzdXBlcnByb2plY3QuCisgICAobWVyZ2UgYjJkZmViN2MwMCBidy9yZWN1cnNlLXN1Ym1vZHVsZXMtcmVsYXRpdmUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogRnJlZUJTRCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRjd2QoMykgYmVoYXZlZCBkaWZmZXJlbnRseSB3aGVuIGFuCisgICBpbnRlcm1lZGlhdGUgZGlyZWN0b3J5IGlzIHVucmVhZGFibGUvdW5zZWFyY2hhYmxlIGRlcGVuZGluZyBvbiB0aGUKKyAgIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHByb3ZpZGVkLCB3aGljaCBvdXIgc3RyYnVmX2dldGN3ZCgpIHdhcyBub3QKKyAgIGF3YXJlIG9mLiAgc3RyYnVmX2dldGN3ZCgpIGhhcyBiZWVuIHRhdWdodCB0byBjb3BlIHdpdGggaXQgYmV0dGVyLgorICAgKG1lcmdlIGE1NGU5MzhlNWIgcnMvZnJlZWJzZC1nZXRjd2Qtd29ya2Fyb3VuZCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcmVjZW50IHVwZGF0ZSB0byAicmViYXNlIC1pIiBzdG9wcGVkIHJ1bm5pbmcgaG9va3MgZm9yIHRoZSAiZ2l0CisgICBjb21taXQiIGNvbW1hbmQgZHVyaW5nICJyZXdvcmQiIGFjdGlvbiwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIFJlbW92aW5nIGFuIGVudHJ5IGZyb20gYSBub3RlcyB0cmVlIGFuZCB0aGVuIGxvb2tpbmcgYW5vdGhlciBub3RlCisgICBlbnRyeSBmcm9tIHRoZSByZXN1bHRpbmcgdHJlZSB1c2luZyB0aGUgaW50ZXJuYWwgbm90ZXMgQVBJCisgICBmdW5jdGlvbnMgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiAgTm8gaW4tdHJlZSB1c2VycyBvZiB0aGUgQVBJCisgICBoYXMgc3VjaCBhY2Nlc3MgcGF0dGVybiwgYnV0IGl0IHN0aWxsIGlzIHdvcnRoIGZpeGluZy4KKworICogImdpdCByZWNlaXZlLXBhY2siIGNvdWxkIGhhdmUgYmVlbiBmb3JjZWQgdG8gZGllIGJ5IGF0dGVtcHRpbmcKKyAgIGFsbG9jYXRlIGFuIHVucmVhc29uYWJseSBsYXJnZSBhbW91bnQgb2YgbWVtb3J5IHdpdGggYSBjcmFmdGVkIHB1c2gKKyAgIGNlcnRpZmljYXRlOyB0aGlzIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGYyMjE0ZGVkZTkgYmMvcHVzaC1jZXJ0LXJlY2VpdmUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVXBkYXRlIGVycm9yIGhhbmRsaW5nIGZvciBjb2RlcGF0aCB0aGF0IGRlYWxzIHdpdGggY29ycnVwdCBsb29zZQorICAgb2JqZWN0cy4KKyAgIChtZXJnZSA1MTA1NDE3N2IzIGprL2xvb3NlLW9iamVjdC1pbmZvLXJlcG9ydC1lcnJvciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtLXN1Ym1vZHVsZT1kaWZmIiBsZWFybmVkIHRvIHdvcmsgYmV0dGVyIGluIGEgcHJvamVjdAorICAgd2l0aCBhIHN1Ym1vZHVsZSB0aGF0IGluIHR1cm4gaGFzIGl0cyBvd24gc3VibW9kdWxlcy4KKyAgIChtZXJnZSAxN2IyNTRjZGE2IHNiL3Nob3ctZGlmZi1mb3Itc3VibW9kdWxlLWluLWRpZmYtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVXBkYXRlIHRoZSBidWlsZCBkZXBlbmRlbmN5IHNvIHRoYXQgYW4gdXBkYXRlIHRvIC91c3IvYmluL3BlcmwKKyAgIGV0Yy4gcmVzdWx0IGluIHJlY29tcHV0YXRpb24gb2YgcGVybC5tYWsgZmlsZS4KKyAgIChtZXJnZSBjNTljNDkzOWMyIGFiL3JlZ2VuLXBlcmwtbWFrLXdpdGgtZGlmZmVyZW50LXBlcmwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1wdXNoLW9wdGlvbj08c3RyaW5nPiIgbGVhcm5lZCB0bworICAgcHJvcGFnYXRlIHRoZSBwdXNoIG9wdGlvbiByZWN1cnNpdmVseSBkb3duIHRvIHB1c2hlcyBpbiBzdWJtb2R1bGVzLgorCisgKiBJZiBhIHBhdGNoIGUtbWFpbCBoYWQgaXRzIGZpcnN0IHBhcmFncmFwaCBhZnRlciBhbiBpbi1ib2R5IGhlYWRlcgorICAgaW5kZW50ZWQgKGV2ZW4gYWZ0ZXIgYSBibGFuayBsaW5lIGFmdGVyIHRoZSBpbi1ib2R5IGhlYWRlciBsaW5lKSwKKyAgIHRoZSBpbmRlbnRlZCBsaW5lIHdhcyBtaXN0b29rIGFzIGEgY29udGludWF0aW9uIG9mIHRoZSBpbi1ib2R5CisgICBoZWFkZXIuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGZkMTA2MmU1MmUgbHQvbWFpbGluZm8taW4tYm9keS1oZWFkZXItY29udGludWF0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogQ2xlYW4gdXAgZmFsbG91dHMgZnJvbSByZWNlbnQgdGlnaHRlbmluZyBvZiB0aGUgc2V0LXVwIHNlcXVlbmNlLAorICAgd2hlcmUgR2l0IGJhcmZzIHdoZW4gcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiBpcyBhY2Nlc3NlZCB3aXRob3V0CisgICBmaXJzdCBlbnN1cmluZyB0aGF0IGl0IHdhcyBzdGFydGVkIGluIGEgcmVwb3NpdG9yeS4KKyAgIChtZXJnZSBiY2NiMjJjYmIxIGprL25vLWxvb2tpbmctYXQtZG90Z2l0LW91dHNpZGUtcmVwbyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcDQiIHVzZWQgIm5hbWUtcmV2IEhFQUQiIHdoZW4gaXQgd2FudHMgdG8gbGVhcm4gd2hhdCBicmFuY2ggaXMKKyAgIGNoZWNrZWQgb3V0OyBpdCBzaG91bGQgdXNlICJzeW1ib2xpYy1yZWYgSEVBRCIuCisgICAobWVyZ2UgZWZmNDUxMTAxZCBsZC9wNC1jdXJyZW50LWJyYW5jaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiaHR0cC5wcm94eSIgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIHVzYWdlIG9mCisgICBwcm94eS4gIFdlIGJyb2tlIHRoaXMgZWFybHkgbGFzdCB5ZWFyLgorICAgKG1lcmdlIGFlNTFkOTExMDUgc3IvaHR0cC1wcm94eS1jb25maWd1cmF0aW9uLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICRHSVRfRElSIG1heSBpbiBzb21lIGNhc2VzIGJlIG5vcm1hbGl6ZWQgd2l0aCBhbGwgc3ltbGlua3MgcmVzb2x2ZWQKKyAgIHdoaWxlICJnaXRkaXIiIHBhdGggZXhwYW5zaW9uIGluIHRoZSBwYXR0ZXJuIGRvZXMgbm90IHJlY2VpdmUgdGhlCisgICBzYW1lIHRyZWF0bWVudCwgbGVhZGluZyB0byBpbmNvcnJlY3QgbWlzbWF0Y2guICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgc2NyaXB0IGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIHN0cmFuZ2UgcGF0aG5hbWVzLgorICAgUHJvdGVjdCBpdCBmcm9tIGEgcGF0aCB3aXRoIHNsYXNoZXMgaW4gdGhlbSwgYXQgbGVhc3QuCisKKyAqICJnaXQgZmV0Y2gtcGFjayIgd2FzIG5vdCBwcmVwYXJlZCB0byBhY2NlcHQgRVJSIHBhY2tldCB0aGF0IHRoZQorICAgdXBsb2FkLXBhY2sgY2FuIHNlbmQgd2l0aCBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuICBJdAorICAgc2hvd2VkIHRoZSBwYWNrZXQgY29udGVudHMgd2l0aCBFUlIgcHJlZml4LCBzbyB0aGVyZSB3YXMgbm8gZGF0YQorICAgbG9zcywgYnV0IGl0IHdhcyByZWR1bmRhbnQgdG8gc2F5ICJFUlIiIGluIGFuIGVycm9yIG1lc3NhZ2UuCisgICAobWVyZ2UgOGUyYzdiZWYwMyBqdC9mZXRjaC1wYWNrLWVycm9yLXJlcG9ydGluZyBsYXRlciB0byBtYWludCkuCisKKyAqICJscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgZGlkIG5vdCBxdWl0ZSB3b3JrIHdlbGwgaW4gYQorICAgcHJvamVjdCB3aXRoIG5lc3RlZCBzdWJtb2R1bGVzLgorCisgKiBnZXRob3N0bmFtZSgyKSBtYXkgbm90IE5VTCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlciBpZiBob3N0bmFtZSBkb2VzCisgICBub3QgZml0OyB1bmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIHNlZSBpZiBvdXIgYnVmZmVyCisgICB3YXMgdG9vIHNtYWxsLCBidXQgYXQgbGVhc3QgdGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSB3aWxsIG5vdCBlbmQgdXAKKyAgIHVzaW5nIGdhcmJhZ2UgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisgICAobWVyZ2UgNTc4MWE5YTI3MCBkdC94Z2V0aG9zdG5hbWUtbnVsLXRlcm1pbmF0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogQSByZWNlbnQgdXBkYXRlIGJyb2tlICJnaXQgYWRkIC1wIC4uL2ZvbyIgZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICogV2hpbGUgaGFuZHksICJnaXRfcGF0aCgpIiBpcyBhIGRhbmdlcm91cyBmdW5jdGlvbiB0byB1c2UgYXMgYQorICAgY2FsbHNpdGUgdGhhdCB1c2VzIGl0IHNhZmVseSBvbmUgZGF5IGNhbiBiZSBicm9rZW4gYnkgY2hhbmdlcworICAgdG8gb3RoZXIgY29kZSB0aGF0IGNhbGxzIGl0LiAgUmVkdWN0aW9uIG9mIGl0cyB1c2UgY29udGludWVzLgorICAgKG1lcmdlIDE2ZDI2NzZjOWUgamsvd2FyLW9uLWdpdC1wYXRoIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNwbGl0LWluZGV4IGNvZGUgY29uZmlndXJhdGlvbiBjb2RlIHVzZWQgYW4gdW5zYWZlIGdpdF9wYXRoKCkKKyAgIGZ1bmN0aW9uIHdpdGhvdXQgY29weWluZyBpdHMgcmVzdWx0IG91dC4KKworICogTWFueSBzdGFsZSBIVFRQKHMpIGxpbmtzIGhhdmUgYmVlbiB1cGRhdGVkIGluIG91ciBkb2N1bWVudGF0aW9uLgorICAgKG1lcmdlIDYxMzQxNmYwYmUgamsvdXBkYXRlLWxpbmtzLWluLWRvY3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0LXNoZWxsIiByZWplY3RzIGEgcmVxdWVzdCB0byBzZXJ2ZSBhIHJlcG9zaXRvcnkgd2hvc2UgbmFtZQorICAgYmVnaW5zIHdpdGggYSBkYXNoLCB3aGljaCBtYWtlcyBpdCBubyBsb25nZXIgcG9zc2libGUgdG8gZ2V0IGl0CisgICBjb25mdXNlZCBpbnRvIHNwYXduaW5nIHNlcnZpY2UgcHJvZ3JhbXMgbGlrZSAiZ2l0LXVwbG9hZC1wYWNrIiB3aXRoCisgICBhbiBvcHRpb24gbGlrZSAiLS1oZWxwIiwgd2hpY2ggaW4gdHVybiB3b3VsZCBzcGF3biBhbiBpbnRlcmFjdGl2ZQorICAgcGFnZXIsIGluc3RlYWQgb2Ygd29ya2luZyB3aXRoIHRoZSByZXBvc2l0b3J5IHVzZXIgYXNrZWQgdG8gYWNjZXNzCisgICAoaS5lLiB0aGUgb25lIHdob3NlIG5hbWUgaXMgIi0taGVscCIpLgorCisgKiBPdGhlciBtaW5vciBkb2MsIHRlc3QgYW5kIGJ1aWxkIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW51cHMuCisgICAobWVyZ2UgZGYyYTZlMzhiNyBqay9wYWdlci1pbi11c2UgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc1ZWM0YTZjYjAgYWIvYnJhbmNoLWxpc3QtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzZTViMzZjNjM3IHNnL3NraXAtcHJlZml4LWluLXByZXR0aWZ5LXJlZm5hbWUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJjNWUyODY1Y2MgamsvZmFzdC1pbXBvcnQtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDQ3MzA2MGJjMiBhYi90ZXN0LXJlYWRtZS11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0OGE5Njk3MmZkIGFiL2RvYy1zdWJtaXR0aW5nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmNWMyYmMyYjk2IGprL21ha2UtY29jY2ljaGVjay1kZXRlY3QtZXJyb3JzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjMTA1ZjU2M2QxIGNjL3VudHJhY2tlZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODY2ODk3NmI1MyBqYy91bnVzZWQtc3ltYm9scyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmJhMjc1ZGM5MyBqYy9icy10LWlzLW5vdC1hLXRhYi1mb3Itc2VkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiZTZlZDE0NWRlIG1tL2xzLWZpbGVzLXMtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2MGIwOTFjNjc5IHFwL2Jpc2VjdC1kb2NmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ3MjQyY2QxMDMgYWgvZGlmZi1maWxlcy1vdXJzLXRoZWlycy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM1YWQ0NGNiZDggc2Ivc3VibW9kdWxlLXJtLWFic29yYiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDMwMWYxZmQ5MiB2YS9pMThuLXBlcmwtc2NyaXB0cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzMzZTA2NGQ5OCB2bi9yZXZpc2lvbi1zaG9ydGhhbmQtZm9yLXNpZGUtYnJhbmNoLWxvZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODU5OTk3NDNlNyB0Yi9kb2MtZW9sLW5vcm1hbGl6YXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDA3NDdmYjQ5ZmQgamsvbG9vc2Utb2JqZWN0LWZzY2sgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ4ZjQ0ODFjNGYgamsvcXVhcmFudGluZS1yZWNlaXZlZC1vYmplY3RzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3YmExY2VlZjk1IHh5L2Zvcm1hdC1wYXRjaC1iYXNlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmYTE5MTJjODlhIHJzL21pc2MtY3BwY2hlY2stZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYxN2Q2NDJkM2IgYWIvcHVzaC1jYXMtZG9jLW4tdGVzdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjFlMjgyNDI1YSBzcy9naXRtb2R1bGVzLWlnbm9yZS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhkMzA0N2NkNWIgc3Mvc3VibW9kdWxlLXNoYWxsb3ctZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxZjllMThiNzcyIGprL3ByaW8tcXVldWUtYXZvaWQtc3dhcC13aXRoLXNlbGYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDYyN2ZkZTEwMjUgamsvc3VibW9kdWxlLWluaXQtc2Vndi1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQzOTU3NDVkODEgcmcvZG9jLXB1bGwtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDFlNjBhOWEyMiByZy9kb2Mtc3VibWl0dGluZ3BhdGNoZXMtd29yZGZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTAxZDNjZDdiOCBzci9ob29rcy1jd2QtZG9jIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDdjZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjEudHh0CkBAIC0wLDAgKzEsMTE0IEBACitHaXQgdjIuMTMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEzCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgV2ViIGludGVyZmFjZSB0byBnbWFuZSBuZXdzIGFyY2hpdmUgaXMgbG9uZyBnb25lLCBldmVuIHRob3VnaAorICAgdGhlIGFydGljbGVzIGFyZSBzdGlsbCBhY2Nlc3NpYmxlIHZpYSBOVFRQLiAgUmVwbGFjZSB0aGUgbGlua3Mgd2l0aAorICAgb25lcyB0byBwdWJsaWMtaW5ib3gub3JnLiAgQmVjYXVzZSB0aGVpciBtZXNzYWdlIGlkZW50aWZpY2F0aW9uIGlzCisgICBiYXNlZCBvbiB0aGUgYWN0dWFsIG1lc3NhZ2UtaWQsIGl0IGlzIGxpa2VseSB0aGF0IGl0IHdpbGwgYmUgZWFzaWVyCisgICB0byBtaWdyYXRlIGF3YXkgZnJvbSBpdCBpZi93aGVuIG5lY2Vzc2FyeS4KKworICogVXBkYXRlIHRlc3RzIHRvIHBhc3MgdW5kZXIgR0VUVEVYVF9QT0lTT04gKGEgbWVjaGFuaXNtIHRvIGVuc3VyZQorICAgdGhhdCBvdXRwdXQgc3RyaW5ncyB0aGF0IHNob3VsZCBub3QgYmUgdHJhbnNsYXRlZCBhcmUgbm90CisgICB0cmFuc2xhdGVkIGJ5IG1pc3Rha2UpLCBhbmQgdGVsbCBUcmF2aXNDSSB0byBydW4gdGhlbS4KKworICogU2V0dGluZyAibG9nLmRlY29yYXRlPWZhbHNlIiBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGRpZCBub3QgdGFrZQorICAgZWZmZWN0IGluIHYyLjEzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIHRvIHRlc3QgNzQwMCBuZWVkZWQgdG8gYmUgc2tpcHBlZCBvbiBDWUdXSU4uCisKKyAqIEdpdCBzb21ldGltZXMgZ2l2ZXMgYW4gYWR2aWNlIGluIGEgcmhldG9yaWNhbCBxdWVzdGlvbiB0aGF0IGRvZXMKKyAgIG5vdCByZXF1aXJlIGFuIGFuc3dlciwgd2hpY2ggY2FuIGNvbmZ1c2UgbmV3IHVzZXJzIGFuZCBub24gbmF0aXZlCisgICBzcGVha2Vycy4gIEF0dGVtcHQgdG8gcmVwaHJhc2UgdGhlbS4KKworICogImdpdCByZWFkLXRyZWUgLW0iIChubyB0cmVlLWlzaCkgZ2F2ZSBhIG5vbnNlbnNlIHN1Z2dlc3Rpb24gInVzZQorICAgLS1lbXB0eSBpZiB5b3Ugd2FudCB0byBjbGVhciB0aGUgaW5kZXgiLiAgV2l0aCAiLW0iLCBzdWNoIGEgcmVxdWVzdAorICAgd2lsbCBzdGlsbCBmYWlsIGFueXdheSwgYXMgeW91J2QgbmVlZCB0byBuYW1lIGF0IGxlYXN0IG9uZSB0cmVlLWlzaAorICAgdG8gYmUgbWVyZ2VkLgorCisgKiBUaGUgY29kZXBhdGggaW4gImdpdCBhbSIgdGhhdCBpcyB1c2VkIHdoZW4gcnVubmluZyAiZ2l0IHJlYmFzZSIKKyAgIGxlYWtlZCBtZW1vcnkgaGVsZCBmb3IgdGhlIGxvZyBtZXNzYWdlIG9mIHRoZSBjb21taXRzIGJlaW5nIHJlYmFzZWQuCisKKyAqICJwYWNrLW9iamVjdHMiIGNhbiBzdHJlYW0gYSBzbGljZSBvZiBhbiBleGlzdGluZyBwYWNrZmlsZSBvdXQgd2hlbgorICAgdGhlIHBhY2sgYml0bWFwIGNhbiB0ZWxsIHRoYXQgdGhlIHJlYWNoYWJsZSBvYmplY3RzIGFyZSBhbGwgbmVlZGVkCisgICBpbiB0aGUgb3V0cHV0LCB3aXRob3V0IGluc3BlY3RpbmcgaW5kaXZpZHVhbCBvYmplY3RzLiAgVGhpcworICAgc3RyYXRlZ3kgaG93ZXZlciB3b3VsZCBub3Qgd29yayB3ZWxsIHdoZW4gIi0tbG9jYWwiIGFuZCBvdGhlcgorICAgb3B0aW9ucyBhcmUgaW4gdXNlLCBhbmQgbmVlZCB0byBiZSBkaXNhYmxlZC4KKworICogQ2xhcmlmeSBkb2N1bWVudGF0aW9uIGZvciBpbmNsdWRlLnBhdGggYW5kIGluY2x1ZGVJZi48Y29uZGl0aW9uPi5wYXRoCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworICogVGFnIG9iamVjdHMsIHdoaWNoIGFyZSBub3QgcmVhY2hhYmxlIGZyb20gYW55IHJlZiwgdGhhdCBwb2ludCBhdAorICAgbWlzc2luZyBvYmplY3RzIHdlcmUgbWlzaGFuZGxlZCBieSAiZ2l0IGdjIiBhbmQgZnJpZW5kcyAodGhleQorICAgc2hvdWxkIHNpbGVudGx5IGJlIGlnbm9yZWQgaW5zdGVhZCkKKworICogQSBmZXcgaHR0cDovLyBsaW5rcyB0aGF0IGFyZSByZWRpcmVjdGVkIHRvIGh0dHBzOi8vIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBoYXZlIGJlZW4gdXBkYXRlZCB0byBodHRwczovLyBsaW5rcy4KKworICogTWFrZSBzdXJlIG91ciB0ZXN0cyB3b3VsZCBwYXNzIHdoZW4gdGhlIHNvdXJjZXMgYXJlIGNoZWNrZWQgb3V0CisgICB3aXRoICJwbGF0Zm9ybSBuYXRpdmUiIGxpbmUgZW5kaW5nIGNvbnZlbnRpb24gYnkgZGVmYXVsdCBvbgorICAgV2luZG93cy4gIFNvbWUgInRleHQiIGZpbGVzIG91dCB0ZXN0cyB1c2UgYW5kIHRoZSB0ZXN0IHNjcmlwdHMKKyAgIHRoZW1zZWx2ZXMgdGhhdCBhcmUgbWVhbnQgdG8gYmUgcnVuIHdpdGggL2Jpbi9zaCwgb3VnaHQgdG8gYmUKKyAgIGNoZWNrZWQgb3V0IHdpdGggZW9sPUxGIGV2ZW4gb24gV2luZG93cy4KKworICogRml4IG1lbW9yeSBsZWFrcyBwb2ludGVkIG91dCBieSBDb3Zlcml0eSAoYW5kIHBlb3BsZSkuCisKKyAqIFRoZSByZWNlaXZlLXBhY2sgcHJvZ3JhbSBub3cgbWFrZXMgc3VyZSB0aGF0IHRoZSBwdXNoIGNlcnRpZmljYXRlCisgICByZWNvcmRzIHRoZSBzYW1lIHNldCBvZiBwdXNoIG9wdGlvbnMgdXNlZCBmb3IgcHVzaGluZy4KKworICogImdpdCBjaGVycnktcGljayIgYW5kIG90aGVyIHVzZXMgb2YgdGhlIHNlcXVlbmNlciBtYWNoaW5lcnkKKyAgIG1pc2hhbmRsZWQgYSB0cmFpbGVyIGJsb2NrIHdob3NlIGxhc3QgbGluZSBpcyBhbiBpbmNvbXBsZXRlIGxpbmUuCisgICBUaGlzIGhhcyBiZWVuIGZpeGVkIHNvIHRoYXQgYW4gYWRkaXRpb25hbCBzaWduLW9mZiBldGMuIGFyZSBhZGRlZAorICAgYWZ0ZXIgY29tcGxldGluZyB0aGUgZXhpc3RpbmcgaW5jb21wbGV0ZSBsaW5lLgorCisgKiBUaGUgc2hlbGwgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkICJnaXQgc3Rhc2giIGhhcworICAgYSBuZXcgInB1c2giIHN1YmNvbW1hbmQuCisKKyAqIFRyYXZpcyBDSSBnYWluZWQgYSB0YXNrIHRvIGZvcm1hdCB0aGUgZG9jdW1lbnRhdGlvbiB3aXRoIGJvdGgKKyAgIEFzY2lpRG9jIGFuZCBBc2NpaURvY3Rvci4KKworICogVXBkYXRlIHRoZSBDIHN0eWxlIHJlY29tbWVuZGF0aW9uIGZvciBub3RlcyBmb3IgdHJhbnNsYXRvcnMsIGFzCisgICByZWNlbnQgdmVyc2lvbnMgb2YgZ2V0dGV4dCB0b29scyBjYW4gd29yayB3aXRoIG91ciBzdHlsZSBvZgorICAgbXVsdGktbGluZSBjb21tZW50cy4KKworICogImdpdCBjbG9uZSAtLWNvbmZpZyB2YXI9dmFsIiBpcyBhIHdheSB0byBwb3B1bGF0ZSB0aGUKKyAgIHBlci1yZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZmlsZSBvZiB0aGUgbmV3IHJlcG9zaXRvcnksIGJ1dCBpdCBkaWQKKyAgIG5vdCB3b3JrIHdlbGwgd2hlbiB2YWwgaXMgYW4gZW1wdHkgc3RyaW5nLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogQSBmZXcgY29kZXBhdGhzIGluICJjaGVja291dCIgYW5kICJhbSIgd29ya2luZyBvbiBhbiB1bmJvcm4gYnJhbmNoCisgICB0cmllZCB0byBhY2Nlc3MgYW4gdW5pbml0aWFsaXplZCBwaWVjZSBvZiBtZW1vcnkuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PS4uLiIgd2l0aCAlKEhFQUQpIGluIHRoZSBmb3JtYXQgdXNlZCB0bworICAgcmVzb2x2ZSB0aGUgSEVBRCBzeW1yZWYgYXMgbWFueSB0aW1lcyBhcyBpdCBoYWQgcHJvY2Vzc2VkIHJlZnMsCisgICB3aGljaCB3YXMgd2FzdGVmdWwsIGFuZCAiZ2l0IGJyYW5jaCIgc2hhcmVkIHRoZSBzYW1lIHByb2JsZW0uCisKKyAqICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiwgd2hlbiB1c2VkIGFzIEdJVF9FRElUT1IgZm9yICJnaXQgY29tbWl0CisgICAtdiIsIGxvb2tlZCBmb3IgYW5kIGFwcGVuZGVkIHRvIGEgdHJhaWxlciBibG9jayBhdCB0aGUgdmVyeSBlbmQsCisgICBpLmUuIGF0IHRoZSBlbmQgb2YgdGhlICJkaWZmIiBvdXRwdXQuICBUaGUgY29tbWFuZCBoYXMgYmVlbgorICAgY29ycmVjdGVkIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIGN1dC1tYXJrIGxpbmUgImNvbW1pdCAtdiIgYWRkcyB0bworICAgdGhlIGJ1ZmZlci0tLXRoZSByZWFsIHRyYWlsZXIgYmxvY2sgc2hvdWxkIGFwcGVhciBqdXN0IGJlZm9yZSBpdC4KKworICogQSB0ZXN0IGFsbG93ZWQgYm90aCAiZ2l0IHB1c2giIGFuZCAiZ2l0IHJlY2VpdmUtcGFjayIgb24gdGhlIG90aGVyCisgICBlbmQgd3JpdGUgdGhlaXIgdHJhY2VzIGludG8gdGhlIHNhbWUgZmlsZS4gIFRoaXMgaXMgT0sgb24gcGxhdGZvcm1zCisgICB0aGF0IGFsbG93cyBhdG9taWNhbGx5IGFwcGVuZGluZyB0byBhIGZpbGUgb3BlbmVkIHdpdGggT19BUFBFTkQsCisgICBidXQgb24gb3RoZXIgcGxhdGZvcm1zIGxlZCB0byBhIG1hbmdsZWQgb3V0cHV0LCBjYXVzaW5nCisgICBpbnRlcm1pdHRlbnQgdGVzdCBmYWlsdXJlcy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQgYnkgZGlzYWJsaW5nCisgICB0cmFjZXMgZnJvbSAicmVjZWl2ZS1wYWNrIiBpbiB0aGUgdGVzdC4KKworICogImZvb1xiYXJcYmF6IiBpbiAiZ2l0IGZldGNoIGZvb1xiYXJcYmF6IiwgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm8KKyAgIHNsYXNoZXMgaW4gaXQsIGNhbm5vdCBiZSBhIG5pY2tuYW1lIGZvciBhIHJlbW90ZSBvbiBXaW5kb3dzLCBhcworICAgdGhhdCBpcyBsaWtlbHkgdG8gYmUgYSBwYXRobmFtZSBvbiBhIGxvY2FsIGZpbGVzeXN0ZW0uCisKKyAqIFRoZSAiY29sbGlzaW9uIGRldGVjdGluZyIgU0hBLTEgaW1wbGVtZW50YXRpb24gc2hpcHBlZCB3aXRoIDIuMTMKKyAgIHdhcyBxdWl0ZSBicm9rZW4gb24gc29tZSBiaWctZW5kaWFuIHBsYXRmb3JtcyBhbmQvb3IgcGxhdGZvcm1zIHRoYXQKKyAgIGRvIG5vdCBsaWtlIHVuYWxpZ25lZCBmZXRjaGVzLiAgVXBkYXRlIHRvIHRoZSB1cHN0cmVhbSBjb2RlIHdoaWNoCisgICBoYXMgYWxyZWFkeSBmaXhlZCB0aGVzZSBpc3N1ZXMuCisKKyAqICJnaXQgYW0gLWgiIHRyaWdnZXJlZCBhIEJVRygpLgorCisgKiBUaGUgaW50ZXJhY3Rpb24gb2YgInVybC4qLmluc3RlYWRPZiIgYW5kIGN1c3RvbSBVUkwgc2NoZW1lJ3MKKyAgIHdoaXRlbGlzdGluZyBpcyBub3cgZG9jdW1lbnRlZCBiZXR0ZXIuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMmIyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMi50eHQKQEAgLTAsMCArMSw1NCBAQAorR2l0IHYyLjEzLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMy4xCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSAiY29sbGlzaW9uIGRldGVjdGluZyIgU0hBLTEgaW1wbGVtZW50YXRpb24gc2hpcHBlZCB3aXRoIDIuMTMuMQorICAgd2FzIHN0aWxsIGJyb2tlbiBvbiBzb21lIHBsYXRmb3Jtcy4gIFVwZGF0ZSB0byB0aGUgdXBzdHJlYW0gY29kZQorICAgYWdhaW4gdG8gdGFrZSB0aGVpciBmaXguCisKKyAqICJnaXQgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGRpZCBub3QgcXVpdGUgd29yayB3aXRoIGEKKyAgIHN1Ym1vZHVsZSB0aGF0IGl0c2VsZiBoYXMgc3VibW9kdWxlcy4KKworICogSW50cm9kdWNlIHRoZSBCVUcoKSBtYWNybyB0byBpbXByb3ZlIGRpZSgiQlVHOiAuLi4iKS4KKworICogVGhlICJydW4tY29tbWFuZCIgQVBJIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIG1hZGUgbW9yZSByb2J1c3QKKyAgIGFnYWluc3QgZGVhZC1sb2NraW5nIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQuCisKKyAqIEEgcmVjZW50IHVwZGF0ZSB0byB0NTU0NS1wdXNoLW9wdGlvbnMuc2ggc3RhcnRlZCBza2lwcGluZyBhbGwgdGhlCisgICB0ZXN0cyBpbiB0aGUgc2NyaXB0IHdoZW4gYSB3ZWIgc2VydmVyIHRlc3RpbmcgaXMgZGlzYWJsZWQgb3IKKyAgIHVuYXZhaWxhYmxlLCBub3QganVzdCB0aGUgb25lcyB0aGF0IHJlcXVpcmUgYSB3ZWIgc2VydmVyLiAgTm9uIEhUVFAKKyAgIHRlc3RzIGhhdmUgYmVlbiBzYWx2YWdlZCB0byBhbHdheXMgcnVuIGluIHRoaXMgc2NyaXB0LgorCisgKiAiZ2l0IGNsZWFuIC1kIiB1c2VkIHRvIGNsZWFuIGRpcmVjdG9yaWVzIHRoYXQgaGFzIGlnbm9yZWQgZmlsZXMsCisgICBldmVuIHRob3VnaCB0aGUgY29tbWFuZCBzaG91bGQgbm90IGxvc2UgaWdub3JlZCBvbmVzIHdpdGhvdXQgIi14Ii4KKyAgICJnaXQgc3RhdHVzIC0taWdub3JlZCIgIGRpZCBub3QgbGlzdCBpZ25vcmVkIGFuZCB1bnRyYWNrZWQgZmlsZXMKKyAgIHdpdGhvdXQgIi11YWxsIi4gIFRoZXNlIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSB0aW1lc3RhbXAgb2YgdGhlIGluZGV4IGZpbGUgaXMgbm93IHRha2VuIGFmdGVyIHRoZSBmaWxlIGlzCisgICBjbG9zZWQsIHRvIGhlbHAgV2luZG93cywgb24gd2hpY2ggYSBzdGFsZSB0aW1lc3RhbXAgaXMgcmVwb3J0ZWQgYnkKKyAgIGZzdGF0KCkgb24gYSBmaWxlIHRoYXQgaXMgb3BlbmVkIGZvciB3cml0aW5nIGFuZCBkYXRhIHdhcyB3cml0dGVuCisgICBidXQgbm90IHlldCBjbG9zZWQuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSAtLWF1dG9zdGFzaCIgZGlkbid0IGF1dG8tc3Rhc2ggd2hlbiB0aGUgbG9jYWwgaGlzdG9yeQorICAgZmFzdC1mb3J3YXJkcyB0byB0aGUgdXBzdHJlYW0uCisKKyAqICJnaXQgZGVzY3JpYmUgLS1jb250YWlucyIgcGVuYWxpemVkIGxpZ2h0LXdlaWdodCB0YWdzIHNvIG11Y2ggdGhhdAorICAgdGhleSB3ZXJlIGFsbW9zdCBuZXZlciBjb25zaWRlcmVkLiAgSW5zdGVhZCwgZ2l2ZSB0aGVtIGFib3V0IHRoZQorICAgc2FtZSBjaGFuY2UgdG8gYmUgY29uc2lkZXJlZCBhcyBhbiBhbm5vdGF0ZWQgdGFnIHRoYXQgaXMgdGhlIHNhbWUKKyAgIGFnZSBhcyB0aGUgdW5kZXJseWluZyBjb21taXQgd291bGQuCisKKyAqIFRoZSByZXN1bHQgZnJvbSAiZ2l0IGRpZmYiIHRoYXQgY29tcGFyZXMgdHdvIGJsb2JzLCBlLmcuICJnaXQgZGlmZgorICAgJGNvbW1pdDE6JHBhdGggJGNvbW1pdDI6JHBhdGgiLCB1c2VkIHRvIGJlIHNob3duIHdpdGggdGhlIGZ1bGwKKyAgIG9iamVjdCBuYW1lIGFzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCBpdCBpcyBtb3JlIG5hdHVyYWwgdG8KKyAgIHVzZSB0aGUgJHBhdGggaW4gdGhlIG91dHB1dCBhbmQgdXNlIGl0IHRvIGxvb2sgdXAgLmdpdGF0dHJpYnV0ZXMuCisKKyAqIEEgZmxha3kgdGVzdCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEhlbHAgY29udHJpYnV0b3JzIHRoYXQgdmlzaXQgdXMgYXQgR2l0SHViLgorCisgKiAiZ2l0IHN0YXNoIHB1c2ggPHBhdGhzcGVjPiIgZGlkIG5vdCB3b3JrIGZyb20gYSBzdWJkaXJlY3RvcnkgYXQgYWxsLgorICAgQnVnZml4IGZvciBhIHRvcGljIGluIHYyLjEzCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NGU0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMy50eHQKQEAgLTAsMCArMSw2MiBAQAorR2l0IHYyLjEzLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xMy4yCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSAiY29sbGlzaW9uIGRldGVjdGluZyIgU0hBLTEgaW1wbGVtZW50YXRpb24gc2hpcHBlZCB3aXRoIDIuMTMuMgorICAgd2FzIHN0aWxsIGJyb2tlbiBvbiBzb21lIHBsYXRmb3Jtcy4gIFVwZGF0ZSB0byB0aGUgdXBzdHJlYW0gY29kZQorICAgYWdhaW4gdG8gdGFrZSB0aGVpciBmaXguCisKKyAqIFRoZSAnZGlmZi1oaWdobGlnaHQnIHByb2dyYW0gKGluIGNvbnRyaWIvKSBoYXMgYmVlbiByZXN0cnVjdHVyZWQKKyAgIGZvciBlYXNpZXIgcmV1c2UgYnkgYW4gZXh0ZXJuYWwgcHJvamVjdCAnZGlmZi1zby1mYW5jeScuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIHdvcmsgYXJvdW5kIGEgd3JhcHBlciBNYWNPUyBYIGFkZHMKKyAgIGFyb3VuZCB1bmRlcmx5aW5nIG1lbGQuCisKKyAqIEFuIGV4YW1wbGUgaW4gZG9jdW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHdvcmsgaW4gbXVsdGkgd29ya3RyZWUKKyAgIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgcHJldHR5LWZvcm1hdCBzcGVjaWZpZXJzIGxpa2UgJyVoJywgJyV0JywgZXRjLiBoYWQgYW4KKyAgIG9wdGltaXphdGlvbiB0aGF0IG5vIGxvbmdlciB3b3JrcyBjb3JyZWN0bHkuICBJbiBwcmVwYXJhdGlvbi9ob3BlCisgICBvZiBnZXR0aW5nIGl0IGNvcnJlY3RseSBpbXBsZW1lbnRlZCwgZmlyc3QgZGlzY2FyZCB0aGUgb3B0aW1pemF0aW9uCisgICB0aGF0IGlzIGJyb2tlbi4KKworICogVGhlIGNvZGUgdG8gcGljayB1cCBhbmQgZXhlY3V0ZSBjb21tYW5kIGFsaWFzIGRlZmluaXRpb24gZnJvbSB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBzd2l0Y2ggdG8gdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlIGFuZAorICAgdGhlbiBjb21lIGJhY2sgd2hlbiB0aGUgZXhwYW5kZWQgYWxpYXMgd2FzIGV4ZWN1dGVkLCB3aGljaCB3YXMKKyAgIHVubmVjZXNzYXJpbHkgY29tcGxleC4gIEF0dGVtcHQgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljIGJ5IHVzaW5nIHRoZQorICAgZWFybHktY29uZmlnIG1lY2hhbmlzbSB0aGF0IGRvZXMgbm90IGNoZGlyIGFyb3VuZC4KKworICogImdpdCBhZGQgLXAiIHdlcmUgdXBkYXRlZCBpbiAyLjEyIHRpbWVmcmFtZSB0byBjb3BlIHdpdGggY3VzdG9tCisgICBjb3JlLmNvbW1lbnRjaGFyIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gd2FzIGJ1Z2d5IGFuZCBhCisgICBtZXRhY2hhcmFjdGVyIGxpa2UgJCBhbmQgKiBkaWQgbm90IHdvcmsuCisKKyAqIEZpeCBhIHJlY2VudCByZWdyZXNzaW9uIHRvICJnaXQgcmViYXNlIC1pIiBhbmQgYWRkIHRlc3RzIHRoYXQgd291bGQKKyAgIGhhdmUgY2F1Z2h0IGl0IGFuZCBvdGhlcnMuCisKKyAqIEFuIHVuYWxpZ25lZCAzMi1iaXQgYWNjZXNzIGluIHBhY2stYml0bWFwIGNvZGUgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaWdodGVuIGVycm9yIGNoZWNrcyBmb3IgaW52YWxpZCAiZ2l0IGFwcGx5IiBpbnB1dC4KKworICogVGhlIHNwbGl0IGluZGV4IGNvZGUgZGlkIG5vdCBob25vciBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgc2V0dGluZworICAgY29ycmVjdGx5LgorCisgKiBUaGUgTWFrZWZpbGUgcnVsZSBpbiBjb250cmliL3N1YnRyZWUgZm9yIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24KKyAgIGxlYXJuZWQgdG8gaG9ub3VyIFVTRV9BU0NJSURPQ1RPUiBqdXN0IGxpa2UgdGhlIG1haW4gZG9jdW1lbnRhdGlvbgorICAgc2V0IGRvZXMuCisKKyAqIEEgZmV3IHRlc3RzIHRoYXQgdHJpZWQgdG8gdmVyaWZ5IHRoZSBjb250ZW50cyBvZiBwdXNoIGNlcnRpZmljYXRlcworICAgZGlkIG5vdCB1c2UgJ2dpdCByZXYtcGFyc2UnIHRvIGZvcm11bGF0ZSB0aGUgbGluZSB0byBsb29rIGZvciBpbgorICAgdGhlIGNlcnRpZmljYXRlIGNvcnJlY3RseS4KKworICogQWZ0ZXIgImdpdCBicmFuY2ggLS1tb3ZlIiBvZiB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCwgdGhlCisgICBjb2RlIHRvIHdhbGsgdGhlIHJlZmxvZyBvZiBIRUFEIHZpYSAibG9nIC1nIiBhbmQgZnJpZW5kcworICAgaW5jb3JyZWN0bHkgc3RvcHBlZCBhdCB0aGUgcmVmbG9nIGVudHJ5IHRoYXQgcmVjb3JkcyB0aGUgcmVuYW1pbmcKKyAgIG9mIHRoZSBicmFuY2guCisKKyAqIFRoZSByZXdyaXRlIG9mICJnaXQgYnJhbmNoIC0tbGlzdCIgdXNpbmcgZm9yLWVhY2gtcmVmJ3MgaW50ZXJuYWxzCisgICB0aGF0IGhhcHBlbmVkIGluIHYyLjEzIHJlZ3Jlc3NlZCBpdHMgaGFuZGxpbmcgb2YgY29sb3IuYnJhbmNoLmxvY2FsOworICAgdGhpcyBoYXMgYmVlbiBmaXhlZC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5ZjhmOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy40LnR4dApAQCAtMCwwICsxLDI4IEBACitHaXQgdjIuMTMuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEzLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVXBkYXRlIHRoZSBjaGFyYWN0ZXIgd2lkdGggdGFibGVzLgorCisgKiBBIHJlY2VudCB1cGRhdGUgYnJva2UgYW4gYWxpYXMgdGhhdCBjb250YWluZWQgYW4gdXBwZXJjYXNlIGxldHRlciwKKyAgIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBPbiBDeWd3aW4sIHNpbWlsYXIgdG8gV2luZG93cywgImdpdCBwdXNoIC8vc2VydmVyL3NoYXJlL3JlcG9zaXRvcnkiCisgICBvdWdodCB0byBtZWFuIGEgcmVwb3NpdG9yeSBvbiBhIG5ldHdvcmsgc2hhcmUgdGhhdCBjYW4gYmUgYWNjZXNzZWQKKyAgIGxvY2FsbHksIGJ1dCB0aGlzIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgZHVlIHRvIHN0cmlwcGluZyB0aGUgZG91YmxlCisgICBzbGFzaGVzIGF0IHRoZSBiZWdpbm5pbmcuCisKKyAqIFRoZSBwcm9ncmVzcyBtZXRlciBkaWQgbm90IGdpdmUgYSB1c2VmdWwgb3V0cHV0IHdoZW4gd2UgaGF2ZW4ndCBoYWQKKyAgIDAuNSBzZWNvbmRzIHRvIG1lYXN1cmUgdGhlIHRocm91Z2hwdXQgZHVyaW5nIHRoZSBpbnRlcnZhbC4gIEluc3RlYWQKKyAgIHNob3cgdGhlIG92ZXJhbGwgdGhyb3VnaHB1dCByYXRlIGF0IHRoZSBlbmQsIHdoaWNoIGlzIGEgbXVjaCBtb3JlCisgICB1c2VmdWwgbnVtYmVyLgorCisgKiBXZSBydW4gYW4gZWFybHkgcGFydCBvZiAiZ2l0IGdjIiB0aGF0IGRlYWxzIHdpdGggcmVmcyBiZWZvcmUKKyAgIGRhZW1vbmlzaW5nIChhbmQgbm90IHVuZGVyIGxvY2spIGV2ZW4gd2hlbiBydW5uaW5nIGEgYmFja2dyb3VuZAorICAgYXV0by1nYywgd2hpY2ggY2F1c2VkIG11bHRpcGxlIGdjIHByb2Nlc3NlcyBhdHRlbXB0aW5nIHRvIHJ1biB0aGUKKyAgIGVhcmx5IHBhcnQgYXQgdGhlIHNhbWUgdGltZS4gIFRoaXMgaXMgbm93IHByZXZlbnRlZCBieSBydW5uaW5nIHRoZQorICAgZWFybHkgcGFydCBhbHNvIHVuZGVyIHRoZSBHQyBsb2NrLgorCitBbHNvIGNvbnRhaW5zIGEgaGFuZGZ1bCBvZiBzbWFsbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTQ5ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjUudHh0CkBAIC0wLDAgKzEsNCBAQAorR2l0IHYyLjEzLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgZm9yd2FyZC1wb3J0cyB0aGUgZml4IGZvciAic3NoOi8vLi4uIiBVUkwgZnJvbSBHaXQgdjIuNy42CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjYWU5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy42LnR4dApAQCAtMCwwICsxLDE3IEBACitHaXQgdjIuMTMuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjEzLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjdnNzZXJ2ZXIiIG5vIGxvbmdlciBpcyBpbnZva2VkIGJ5ICJnaXQgZGFlbW9uIiBieSBkZWZhdWx0LAorICAgYXMgaXQgaXMgb2xkIGFuZCBsYXJnZWx5IHVubWFpbnRhaW5lZC4KKworICogVmFyaW91cyBQZXJsIHNjcmlwdHMgZGlkIG5vdCB1c2Ugc2FmZV9waXBlX2NhcHR1cmUoKSBpbnN0ZWFkIG9mCisgICBiYWNrdGlja3MsIGxlYXZpbmcgdGhlbSBzdXNjZXB0aWJsZSB0byBlbmQtdXNlciBpbnB1dC4gIFRoZXkgaGF2ZQorICAgYmVlbiBjb3JyZWN0ZWQuCisKK0NyZWRpdHMgZ28gdG8gam9lcm5jaGVuIDxqb2VybmNoZW5AcGhlbm9lbGl0LmRlPiBmb3IgZmluZGluZyB0aGUKK3Vuc2FmZSBjb25zdHJ1Y3RzIGluICJnaXQgY3Zzc2VydmVyIiwgYW5kIHRvIEplZmYgS2luZyBhdCBHaXRIdWIgZm9yCitmaW5kaW5nIGFuZCBmaXhpbmcgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGlzc3VlIGluIG90aGVyIHNjcmlwdHMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZjMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjcudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0dpdCB2Mi4xMy43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTMuNgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBTdWJtb2R1bGUgIm5hbWVzIiBjb21lIGZyb20gdGhlIHVudHJ1c3RlZCAuZ2l0bW9kdWxlcyBmaWxlLCBidXQgd2UKKyAgIGJsaW5kbHkgYXBwZW5kIHRoZW0gdG8gJEdJVF9ESVIvbW9kdWxlcyB0byBjcmVhdGUgb3VyIG9uLWRpc2sgcmVwbworICAgcGF0aHMuIFRoaXMgbWVhbnMgeW91IGNhbiBkbyBiYWQgdGhpbmdzIGJ5IHB1dHRpbmcgIi4uLyIgaW50byB0aGUKKyAgIG5hbWUuIFdlIG5vdyBlbmZvcmNlIHNvbWUgcnVsZXMgZm9yIHN1Ym1vZHVsZSBuYW1lcyB3aGljaCB3aWxsIGNhdXNlCisgICBHaXQgdG8gaWdub3JlIHRoZXNlIG1hbGljaW91cyBuYW1lcyAoQ1ZFLTIwMTgtMTEyMzUpLgorCisgICBDcmVkaXQgZm9yIGZpbmRpbmcgdGhpcyB2dWxuZXJhYmlsaXR5IGFuZCB0aGUgcHJvb2Ygb2YgY29uY2VwdCBmcm9tCisgICB3aGljaCB0aGUgdGVzdCBzY3JpcHQgd2FzIGFkYXB0ZWQgZ29lcyB0byBFdGllbm5lIFN0YWxtYW5zLgorCisgKiBJdCB3YXMgcG9zc2libGUgdG8gdHJpY2sgdGhlIGNvZGUgdGhhdCBzYW5pdHktY2hlY2tzIHBhdGhzIG9uIE5URlMKKyAgIGludG8gcmVhZGluZyByYW5kb20gcGllY2Ugb2YgbWVtb3J5IChDVkUtMjAxOC0xMTIzMykuCisKK0NyZWRpdCBmb3IgZml4aW5nIGZvciB0aGVzZSBidWdzIGdvZXMgdG8gSmVmZiBLaW5nLCBKb2hhbm5lcworU2NoaW5kZWxpbiBhbmQgb3RoZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MTFhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMC50eHQKQEAgLTAsMCArMSw1MTcgQEAKK0dpdCAyLjE0IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcyBhbmQgb3RoZXIgbm90YWJsZSBjaGFuZ2VzLgorCisgKiBVc2Ugb2YgYW4gZW1wdHkgc3RyaW5nIGFzIGEgcGF0aHNwZWMgZWxlbWVudCB0aGF0IGlzIHVzZWQgZm9yCisgICAnZXZlcnl0aGluZyBtYXRjaGVzJyBpcyBzdGlsbCB3YXJuZWQgYW5kIEdpdCBhc2tzIHVzZXJzIHRvIHVzZSBhCisgICBtb3JlIGV4cGxpY2l0ICcuJyBmb3IgdGhhdCBpbnN0ZWFkLiAgVGhlIGhvcGUgaXMgdGhhdCBleGlzdGluZworICAgdXNlcnMgd2lsbCBub3QgbWluZCB0aGlzIGNoYW5nZSwgYW5kIGV2ZW50dWFsbHkgdGhlIHdhcm5pbmcgY2FuIGJlCisgICB0dXJuZWQgaW50byBhIGhhcmQgZXJyb3IsIHVwZ3JhZGluZyB0aGUgZGVwcmVjYXRpb24gaW50byByZW1vdmFsIG9mCisgICB0aGlzIChtaXMpZmVhdHVyZS4gIFRoYXQgaXMgbm90IHNjaGVkdWxlZCB0byBoYXBwZW4gaW4gdGhlIHVwY29taW5nCisgICByZWxlYXNlICh5ZXQpLgorCisgKiBHaXQgbm93IGF2b2lkcyBibGluZGx5IGZhbGxpbmcgYmFjayB0byAiLmdpdCIgd2hlbiB0aGUgc2V0dXAKKyAgIHNlcXVlbmNlIHNhaWQgd2UgYXJlIF9ub3RfIGluIEdpdCByZXBvc2l0b3J5LiAgQSBjb3JuZXIgY2FzZSB0aGF0CisgICBoYXBwZW5zIHRvIHdvcmsgcmlnaHQgbm93IG1heSBiZSBicm9rZW4gYnkgYSBjYWxsIHRvIGRpZSgiQlVHIikuCisgICBXZSd2ZSB0cmllZCBoYXJkIHRvIGxvY2F0ZSBzdWNoIGNhc2VzIGFuZCBmaXhlZCB0aGVtLCBidXQgdGhlcmUKKyAgIG1pZ2h0IHN0aWxsIGJlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQtLWJ1ZyByZXBvcnRzIGFyZQorICAgZ3JlYXRseSBhcHByZWNpYXRlZC4KKworICogVGhlIGV4cGVyaW1lbnQgdG8gaW1wcm92ZSB0aGUgaHVuay1ib3VuZGFyeSBzZWxlY3Rpb24gb2YgdGV4dHVhbAorICAgZGlmZiBvdXRwdXQgaGFzIGZpbmlzaGVkLCBhbmQgdGhlICJpbmRlbnQgaGV1cmlzdGljcyIgaGFzIG5vdworICAgYmVjb21lIHRoZSBkZWZhdWx0LgorCisgKiBHaXQgY2FuIG5vdyBiZSBidWlsdCB3aXRoIFBDUkUgdjIgaW5zdGVhZCBvZiB2MSBvZiB0aGUgUENSRQorICAgbGlicmFyeS4gUmVwbGFjZSBVU0VfTElCUENSRT1ZZXNQbGVhc2Ugd2l0aCBVU0VfTElCUENSRTI9WWVzUGxlYXNlCisgICBpbiBleGlzdGluZyBidWlsZCBzY3JpcHRzIHRvIGJ1aWxkIGFnYWluc3QgdGhlIG5ldyB2ZXJzaW9uLiAgQXMgdGhlCisgICB1cHN0cmVhbSBQQ1JFIG1haW50YWluZXIgaGFzIGFiYW5kb25lZCB2MSBtYWludGVuYW5jZSBmb3IgYWxsIGJ1dAorICAgdGhlIG1vc3QgY3JpdGljYWwgYnVnIGZpeGVzLCB1c2Ugb2YgdjIgaXMgcmVjb21tZW5kZWQuCisKKworVXBkYXRlcyBzaW5jZSB2Mi4xMworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogVGhlIGNvbG9ycyBpbiB3aGljaCAiZ2l0IHN0YXR1cyAtLXNob3J0IC0tYnJhbmNoIiBzaG93ZWQgdGhlIG5hbWVzCisgICBvZiB0aGUgY3VycmVudCBicmFuY2ggYW5kIGl0cyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGFyZSBub3cKKyAgIGNvbmZpZ3VyYWJsZS4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCB0aGUgIi0tbm8tdGFncyIgb3B0aW9uIG5vdCB0byBmZXRjaCBhbGwgdGFncworICAgaW5pdGlhbGx5LCBhbmQgYWxzbyBzZXQgdXAgdGhlIHRhZ29wdCBub3QgdG8gZm9sbG93IGFueSB0YWdzIGluCisgICBzdWJzZXF1ZW50IGZldGNoZXMuCisKKyAqICJnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAiIGxlYXJuZWQgdG8gdXNlIHppcDY0IGV4dGVuc2lvbiB3aGVuCisgICBuZWNlc3NhcnkgdG8gZ28gYmV5b25kIHRoZSA0R0IgbGltaXQuCisKKyAqICJnaXQgcmVzZXQiIGxlYXJuZWQgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIiBvcHRpb24uCisKKyAqICJnaXQgZGlmZiAtLXN1Ym1vZHVsZT1kaWZmIiBub3cgcmVjdXJzZXMgaW50byBuZXN0ZWQgc3VibW9kdWxlcy4KKworICogImdpdCByZXBhY2siIGxlYXJuZWQgdG8gYWNjZXB0IHRoZSAtLXRocmVhZHM9PG4+IG9wdGlvbiBhbmQgcGFzcyBpdAorICAgdG8gcGFjay1vYmplY3RzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgdG8gcnVuIHNlbmRlbWFpbC12YWxpZGF0ZSBob29rIHRvIGluc3BlY3QKKyAgIGFuZCByZWplY3QgYSBtZXNzYWdlIGJlZm9yZSBzZW5kaW5nIGl0IG91dC4KKworICogVGhlcmUgaXMgbm8gZ29vZCByZWFzb24gd2h5ICJnaXQgZmV0Y2ggJHRoZXJlICRzaGExIiBzaG91bGQgZmFpbAorICAgd2hlbiB0aGUgJHNoYTEgbmFtZXMgYW4gb2JqZWN0IGF0IHRoZSB0aXAgb2YgYW4gYWR2ZXJ0aXNlZCByZWYsCisgICBldmVuIHdoZW4gdGhlIG90aGVyIHNpZGUgaGFzbid0IGVuYWJsZWQgYWxsb3dUaXBTSEExSW5XYW50LgorCisgKiBUaGUgIltpbmNsdWRlSWYgImdpdGRpcjokZGlyIl0gcGF0aD0uLi4iIG1lY2hhbmlzbSBpbnRyb2R1Y2VkIGluCisgICAyLjEzLjAgd291bGQgY2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIHRoZSBnaXRkaXIgYmVpbmcgbWF0Y2hlZCwKKyAgIGFuZCBkaWQgbm90IG1hdGNoIGUuZy4gImdpdGRpcjp+L3dvcmsvKiIgYWdhaW5zdCBhIHJlcG8gaW4KKyAgICJ+L3dvcmsvbWFpbiIgaWYgIn4vd29yayIgd2FzIGEgc3ltbGluayB0byAiL21udC9zdG9yYWdlL3dvcmsiLgorICAgTm93IHdlIG1hdGNoIGJvdGggdGhlIHJlc29sdmVkIGNhbm9uaWNhbCBwYXRoIGFuZCB3aGF0ICJwd2QiIHdvdWxkCisgICBzaG93LiBUaGUgaW5jbHVkZSB3aWxsIGhhcHBlbiBpZiBlaXRoZXIgb25lIG1hdGNoZXMuCisKKyAqIFRoZSAiaW5kZW50IiBoZXVyaXN0aWNzIGlzIG5vdyB0aGUgZGVmYXVsdCBpbiAiZGlmZiIuIFRoZQorICAgZGlmZi5pbmRlbnRIZXVyaXN0aWMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvICJmYWxzZSIKKyAgIGZvciB0aG9zZSB3aG8gZG8gbm90IHdhbnQgaXQuCisKKyAqIE1hbnkgY29tbWFuZHMgbGVhcm5lZCB0byBwYXkgYXR0ZW50aW9uIHRvIHN1Ym1vZHVsZS5yZWN1cnNlCisgICBjb25maWd1cmF0aW9uLgorCisgKiBUaGUgY29udmVudGlvbiBmb3IgYSBjb21tYW5kIGxpbmUgaXMgdG8gZm9sbG93ICJnaXQgY21kbmFtZQorICAgLS1vcHRpb25zIiB3aXRoIHJldmlzaW9ucyBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCAiLS0iCisgICBkaXNhbWJpZ3VhdG9yIGFuZCB0aGVuIGZpbmFsbHkgcGF0aHNwZWNzLiAgV2hlbiAiLS0iIGlzIG5vdCB0aGVyZSwKKyAgIHdlIG1ha2Ugc3VyZSBlYXJseSBvbmVzIGFyZSBhbGwgaW50ZXJwcmV0YWJsZSBhcyByZXZzIChhbmQgZG8gbm90CisgICBsb29rIGxpa2UgcGF0aHMpIGFuZCBsYXRlciBvbmVzIGFyZSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gIEEKKyAgIHBhdGhzcGVjIHdpdGggIm1hZ2ljIiAoZS5nLiAiOi9wL2EvdC9oIiB0aGF0IG1hdGNoZXMgcC9hL3QvaCBmcm9tCisgICB0aGUgdG9wLWxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUsIG5vIG1hdHRlciB3aGF0IHN1YmRpcmVjdG9yeSB5b3UKKyAgIGFyZSB3b3JraW5nIGZyb20pIGFyZSBjb25zZXJ2YXRpdmVseSBqdWRnZWQgYXMgIm5vdCBhIHBhdGgiLCB3aGljaAorICAgcmVxdWlyZWQgZGlzYW1iaWd1YXRpb24gbW9yZSBvZnRlbi4gIFRoZSBjb21tYW5kIGxpbmUgcGFyc2VyCisgICBsZWFybmVkIHRvIHNheSAiaXQncyBhIHBhdGhzcGVjIiBhIGJpdCBtb3JlIG9mdGVuIHdoZW4gdGhlIHN5bnRheAorICAgbG9va3MgbGlrZSBzby4KKworICogVXBkYXRlICJwZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9uIiBzdXBwb3J0IHRvIGVuYWJsZSBKSVQKKyAgIGFuZCBhbHNvIGFsbG93IGxpbmtpbmcgd2l0aCB0aGUgbmV3ZXIgUENSRSB2MiBsaWJyYXJ5LgorCisgKiAiZmlsdGVyLWJyYW5jaCIgbGVhcm5lZCBhIHBzZXVkbyBmaWx0ZXIgIi0tc2V0dXAiIHRoYXQgY2FuIGJlIHVzZWQKKyAgIHRvIGRlZmluZSBjb21tb24gZnVuY3Rpb25zL3ZhcmlhYmxlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IG90aGVyCisgICBmaWx0ZXJzLgorCisgKiBVc2luZyAiZ2l0IGFkZCBkL2kvciIgd2hlbiBkL2kvciBpcyB0aGUgdG9wIG9mIHRoZSB3b3JraW5nIHRyZWUgb2YKKyAgIGEgc2VwYXJhdGUgcmVwb3NpdG9yeSB3b3VsZCBjcmVhdGUgYSBnaXRsaW5rIGluIHRoZSBpbmRleCwgd2hpY2gKKyAgIHdvdWxkIGFwcGVhciBhcyBhIG5vdC1xdWl0ZS1pbml0aWFsaXplZCBzdWJtb2R1bGUgdG8gb3RoZXJzLiAgV2UKKyAgIGxlYXJuZWQgdG8gZ2l2ZSB3YXJuaW5ncyB3aGVuIHRoaXMgaGFwcGVucy4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgdG8gb3B0aW9uYWxseSBnaXZlIGhvdyBtYW55IHN0YXNoIGVudHJpZXMgdGhlcmUKKyAgIGFyZSBpbiBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IHN0YXR1cyIgaGFzIGxvbmcgc2hvd24gZXNzZW50aWFsbHkgdGhlIHNhbWUgbWVzc2FnZSBhcyAiZ2l0CisgICBjb21taXQiOyB0aGUgbWVzc2FnZSBpdCBnaXZlcyB3aGlsZSBwcmVwYXJpbmcgZm9yIHRoZSByb290IGNvbW1pdCwKKyAgIGkuZS4gIkluaXRpYWwgY29tbWl0Iiwgd2FzIGhhcmQgdG8gdW5kZXJzdGFuZCBmb3Igc29tZSBuZXcgdXNlcnMuCisgICBOb3cgaXQgc2F5cyAiTm8gY29tbWl0cyB5ZXQiIHRvIHN0cmVzcyBtb3JlIG9uIHRoZSBjdXJyZW50IHN0YXR1cworICAgKHJhdGhlciB0aGFuIHRoZSBjb21taXQgdGhlIHVzZXIgaXMgcHJlcGFyaW5nIGZvciwgd2hpY2ggaXMgbW9yZSBpbgorICAgbGluZSB3aXRoIHRoZSBmb2N1cyBvZiAiZ2l0IGNvbW1pdCIpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIG5vdyBoYXMgLS1iYXRjaC1zaXplIGFuZCAtLXJlbG9naW4tZGVsYXkgb3B0aW9ucworICAgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG92ZXJjb21lIGxpbWl0YXRpb25zIG9uIFNNVFAgc2VydmVycyB0aGF0CisgICAgcmVzdHJpY3Qgb24gaG93IG1hbnkgb2YgZS1tYWlscyBjYW4gYmUgc2VudCBpbiBhIHNpbmdsZSBzZXNzaW9uLgorCisgKiBBbiBvbGQgbWVzc2FnZSBzaG93biBpbiB0aGUgY29tbWl0IGxvZyB0ZW1wbGF0ZSB3YXMgcmVtb3ZlZCwgYXMgaXQKKyAgIGhhcyBvdXRsaXZlZCBpdHMgdXNlZnVsbmVzcy4KKworICogImdpdCBwdWxsIC0tcmViYXNlIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBsZWFybnMgdG8gcmViYXNlIHRoZQorICAgYnJhbmNoIGluIHRoZSBzdWJtb2R1bGVzIHRvIGFuIHVwZGF0ZWQgYmFzZS4KKworICogImdpdCBsb2ciIGxlYXJuZWQgLVAgYXMgYSBzeW5vbnltIGZvciAtLXBlcmwtcmVnZXhwLCAiZ2l0IGdyZXAiCisgICBhbHJlYWR5IGhhZCBzdWNoIGEgc3lub255bS4KKworICogImdpdCBsb2ciIGRpZG4ndCB1bmRlcnN0YW5kIC0tcmVnZXhwLWlnbm9yZS1jYXNlIHdoZW4gY29tYmluZWQgd2l0aAorICAgLS1wZXJsLXJlZ2V4cC4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogVGhlIGRlZmF1bHQgcGFja2VkLWdpdCBsaW1pdCB2YWx1ZSBoYXMgYmVlbiByYWlzZWQgb24gbGFyZ2VyCisgICBwbGF0Zm9ybXMgdG8gc2F2ZSAiZ2l0IGZldGNoIiBmcm9tIGEgKHJlY292ZXJhYmxlKSBmYWlsdXJlIHdoaWxlCisgICAiZ2MiIGlzIHJ1bm5pbmcgaW4gcGFyYWxsZWwuCisKKyAqIENvZGUgdG8gdXBkYXRlIHRoZSBjYWNoZS10cmVlIGhhcyBiZWVuIHRpZ2h0ZW5lZCBzbyB0aGF0IHdlIHdvbid0CisgICBhY2NpZGVudGFsbHkgd3JpdGUgb3V0IGFueSAwezQwfSBlbnRyeSBpbiB0aGUgdHJlZSBvYmplY3QuCisKKyAqIEF0dGVtcHQgdG8gYWxsb3cgdXMgbm90aWNlICJmaXNoeSIgc2l0dWF0aW9uIHdoZXJlIHdlIGZhaWwgdG8KKyAgIHJlbW92ZSB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB1c2VkIGR1cmluZyB0aGUgdGVzdC4KKworICogVHJhdmlzIENJIGdhaW5lZCBhIHRhc2sgdG8gZm9ybWF0IHRoZSBkb2N1bWVudGF0aW9uIHdpdGggYm90aAorICAgQXNjaWlEb2MgYW5kIEFzY2lpRG9jdG9yLgorCisgKiBTb21lIHBsYXRmb3JtcyBoYXZlIHVsb25nIHRoYXQgaXMgc21hbGxlciB0aGFuIHRpbWVfdCwgYW5kIG91cgorICAgaGlzdG9yaWNhbCB1c2Ugb2YgdWxvbmcgZm9yIHRpbWVzdGFtcCB3b3VsZCBtZWFuIHRoZXkgY2Fubm90CisgICByZXByZXNlbnQgc29tZSB0aW1lc3RhbXAgdGhhdCB0aGUgcGxhdGZvcm0gYWxsb3dzLiAgSW52ZW50IGEKKyAgIHNlcGFyYXRlIGFuZCBkZWRpY2F0ZWQgdGltZXN0YW1wX3QgKHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoCisgICB0aW1lc3RhbXBzIGFuZCBhIHZhbmlsbGEgdWxvbmdzLCB3aGljaCBhbG9uZyBpcyBhbHJlYWR5IGEgZ29vZAorICAgbW92ZSksIGFuZCB0aGVuIGRlY2xhcmUgdWludG1heF90IGlzIHRoZSB0eXBlIHRvIGJlIHVzZWQgYXMgdGhlCisgICB0aW1lc3RhbXBfdC4KKworICogV2UgY2FuIHRyaWdnZXIgV2luZG93cyBhdXRvLWJ1aWxkIHRlc3RlciAoY3JlZGl0czogRHNjaG8gJgorICAgTWljcm9zb2Z0KSBmcm9tIG91ciBleGlzdGluZyBUcmF2aXMgQ0kgdGVzdGVyIG5vdy4KKworICogQ29udmVyc2lvbiBmcm9tIHVjaGFyWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogU2ltcGxpZnkgcGFyc2VfcGF0aHNwZWMoKSBjb2RlcGF0aCBhbmQgc3RvcCBpdCBmcm9tIGxvb2tpbmcgYXQgdGhlCisgICBkZWZhdWx0IGluLWNvcmUgaW5kZXguCisKKyAqIEFkZCBwZXJmLXRlc3QgZm9yIHdpbGRtYXRjaC4KKworICogQ29kZSBmcm9tICJjb252ZXJzaW9uIHVzaW5nIGV4dGVybmFsIHByb2Nlc3MiIGNvZGVwYXRoIGhhcyBiZWVuCisgICBleHRyYWN0ZWQgdG8gYSBzZXBhcmF0ZSBzdWItcHJvY2Vzcy5bY2hdIG1vZHVsZS4KKworICogV2hlbiAiZ2l0IGNoZWNrb3V0IiwgImdpdCBtZXJnZSIsIGV0Yy4gbWFuaXB1bGF0ZXMgdGhlIGluLWNvcmUKKyAgIGluZGV4LCB2YXJpb3VzIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZXh0ZW5zaW9ucyBhcmUKKyAgIGRpc2NhcmRlZCBmcm9tIHRoZSBvcmlnaW5hbCBzdGF0ZSwgYXMgaXQgaXMgdXN1YWxseSBub3QgdGhlIGNhc2UKKyAgIHRoYXQgdGhleSBhcmUga2VwdCB1cC10by1kYXRlIGFuZCBpbi1zeW5jIHdpdGggdGhlIG9wZXJhdGlvbiBvbiB0aGUKKyAgIG1haW4gaW5kZXguICBUaGUgdW50cmFja2VkIGNhY2hlIGV4dGVuc2lvbiBpcyBjb3BpZWQgYWNyb3NzIHRoZXNlCisgICBvcGVyYXRpb25zIG5vdywgd2hpY2ggd291bGQgc3BlZWQgdXAgImdpdCBzdGF0dXMiIChhcyBsb25nIGFzIHRoZQorICAgY2FjaGUgaXMgcHJvcGVybHkgaW52YWxpZGF0ZWQpLgorCisgKiBUaGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgImdpdCBncmVwIiBoYXMgc2VlbiBzb21lIGNsZWFuLXVwLgorCisgKiBVcGRhdGUgdGhlIEMgc3R5bGUgcmVjb21tZW5kYXRpb24gZm9yIG5vdGVzIGZvciB0cmFuc2xhdG9ycywgYXMKKyAgIHJlY2VudCB2ZXJzaW9ucyBvZiBnZXR0ZXh0IHRvb2xzIGNhbiB3b3JrIHdpdGggb3VyIHN0eWxlIG9mCisgICBtdWx0aS1saW5lIGNvbW1lbnRzLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgInJlZiIgQVBJIGFyb3VuZCB0aGUgInBhY2tlZCByZWZzIiBoYXZlIGJlZW4KKyAgIGNsZWFuZWQgdXAsIGluIHByZXBhcmF0aW9uIGZvciBmdXJ0aGVyIGNoYW5nZXMuCisKKyAqIFRoZSBpbnRlcm5hbCBsb2dpYyB1c2VkIGluICJnaXQgYmxhbWUiIGhhcyBiZWVuIGxpYmlmaWVkIHRvIG1ha2UgaXQKKyAgIGVhc2llciB0byB1c2UgYnkgY2dpdC4KKworICogT3VyIGNvZGUgb2Z0ZW4gb3BlbnMgYSBwYXRoIHRvIGFuIG9wdGlvbmFsIGZpbGUsIHRvIHdvcmsgb24gaXRzCisgICBjb250ZW50cyB3aGVuIHdlIGNhbiBzdWNjZXNzZnVsbHkgb3BlbiBpdC4gIFdlIGNhbiBpZ25vcmUgYSBmYWlsdXJlCisgICB0byBvcGVuIGlmIHN1Y2ggYW4gb3B0aW9uYWwgZmlsZSBkb2VzIG5vdCBleGlzdCwgYnV0IHdlIGRvIHdhbnQgdG8KKyAgIHJlcG9ydCBhIGZhaWx1cmUgaW4gb3BlbmluZyBmb3Igb3RoZXIgcmVhc29ucyAoZS5nLiB3ZSBnb3QgYW4gSS9PCisgICBlcnJvciwgb3IgdGhlIGZpbGUgaXMgdGhlcmUsIGJ1dCB3ZSBsYWNrIHRoZSBwZXJtaXNzaW9uIHRvIG9wZW4pLgorCisgICBUaGUgZXhhY3QgZXJyb3JzIHdlIG5lZWQgdG8gaWdub3JlIGFyZSBFTk9FTlQgKG9idmlvdXNseSkgYW5kCisgICBFTk9URElSIChsZXNzIG9idmlvdXMpLiAgSW5zdGVhZCBvZiByZXBlYXRpbmcgY29tcGFyaXNvbiBvZiBlcnJubworICAgd2l0aCB0aGVzZSB0d28gY29uc3RhbnRzLCBpbnRyb2R1Y2UgYSBoZWxwZXIgZnVuY3Rpb24gdG8gZG8gc28uCisKKyAqIFdlIG9mdGVuIHRyeSB0byBvcGVuIGEgZmlsZSBmb3IgcmVhZGluZyB3aG9zZSBleGlzdGVuY2UgaXMKKyAgIG9wdGlvbmFsLCBhbmQgc2lsZW50bHkgaWdub3JlIGVycm9ycyBmcm9tIG9wZW4vZm9wZW47IHJlcG9ydCBzdWNoCisgICBlcnJvcnMgaWYgdGhleSBhcmUgbm90IGR1ZSB0byBtaXNzaW5nIGZpbGVzLgorCisgKiBXaGVuIGFuIGV4aXN0aW5nIHJlcG9zaXRvcnkgaXMgdXNlZCBmb3IgdC9wZXJmIHRlc3RpbmcsIHdlIGZpcnN0CisgICBjcmVhdGUgYml0LWZvci1iaXQgY29weSBvZiBpdCwgd2hpY2ggbWF5IGdyYWIgYSB0cmFuc2llbnQgc3RhdGUgb2YKKyAgIHRoZSByZXBvc2l0b3J5IGFuZCBmcmVlemUgaXQgaW50byB0aGUgcmVwb3NpdG9yeSB1c2VkIGZvciB0ZXN0aW5nLAorICAgd2hpY2ggdGhlbiBtYXkgY2F1c2UgR2l0IG9wZXJhdGlvbnMgdG8gZmFpbC4gIFNpbmdsZSBvdXQgInRoZSBpbmRleAorICAgYmVpbmcgbG9ja2VkIiBjYXNlIGFuZCBmb3JjaWJseSBkcm9wIHRoZSBsb2NrIGZyb20gdGhlIGNvcHkuCisKKyAqIFRocmVlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBoZWxwZXIgZnVuY3Rpb24gaGF2ZSBiZWVuIGNvbnNvbGlkYXRlZAorICAgdG8gb25lLgorCisgKiAiZmFzdC1pbXBvcnQiIHVzZXMgYSBkZWZhdWx0IHBhY2sgY2hhaW4gZGVwdGggdGhhdCBpcyBjb25zaXN0ZW50CisgICB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCisKKyAqIEEgbmV3IHRlc3QgdG8gc2hvdyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgcGF0dGVybiBbXmEtel0KKyAgICh3aGljaCBtYXRjaGVzICcvJykgYW5kIGEgc2xhc2ggaW4gYSBwYXRoIGhhcyBiZWVuIGFkZGVkLiAgVGhlCisgICBwYXR0ZXJuIHNob3VsZCBub3QgbWF0Y2ggdGhlIHNsYXNoIHdpdGggInBhdGhtYXRjaCIsIGJ1dCBzaG91bGQKKyAgIHdpdGggIndpbGRtYXRjaCIuCisKKyAqIFRoZSAnZGlmZi1oaWdobGlnaHQnIHByb2dyYW0gKGluIGNvbnRyaWIvKSBoYXMgYmVlbiByZXN0cnVjdHVyZWQKKyAgIGZvciBlYXNpZXIgcmV1c2UgYnkgYW4gZXh0ZXJuYWwgcHJvamVjdCAnZGlmZi1zby1mYW5jeScuCisKKyAqIEEgY29tbW9uIHBhdHRlcm4gdG8gZnJlZSBhIHBpZWNlIG9mIG1lbW9yeSBhbmQgYXNzaWduIE5VTEwgdG8gdGhlCisgICBwb2ludGVyIHRoYXQgdXNlZCB0byBwb2ludCBhdCBpdCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgbmV3CisgICBGUkVFX0FORF9OVUxMKCkgbWFjcm8uCisKKyAqIFRyYWRpdGlvbmFsbHksIHRoZSBkZWZhdWx0IGRpZSgpIHJvdXRpbmUgaGFkIGEgY29kZSB0byBwcmV2ZW50IGl0CisgICBmcm9tIGdldHRpbmcgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCB3aGljaCBpbnRlcmFjdGVkIGJhZGx5IHdoZW4gYQorICAgdGhyZWFkZWQgcHJvZ3JhbSB1c2VkIGl0IChvbmUgZG93bnNpZGUgaXMgdGhhdCB0aGUgcmVhbCBlcnJvciBtYXkKKyAgIGJlIGhpZGRlbiBhbmQgaW5zdGVhZCB0aGUgb25seSBlcnJvciBtZXNzYWdlIGdpdmVuIHRvIHRoZSB1c2VyIG1heQorICAgZW5kIHVwIGJlaW5nICJkaWUgcmVjdXJzaW9uIGRldGVjdGVkIiwgd2hpY2ggaXMgbm90IHZlcnkgdXNlZnVsKS4KKworICogSW50cm9kdWNlIGEgInJlcG9zaXRvcnkiIG9iamVjdCB0byBldmVudHVhbGx5IG1ha2UgaXQgZWFzaWVyIHRvCisgICB3b3JrIGluIG11bHRpcGxlIHJlcG9zaXRvcmllcyAodGhlIHByaW1hcnkgZm9jdXMgaXMgdG8gd29yayB3aXRoCisgICB0aGUgc3VwZXJwcm9qZWN0IGFuZCBpdHMgc3VibW9kdWxlcykgaW4gYSBzaW5nbGUgcHJvY2Vzcy4KKworICogT3B0aW1pemUgIndoYXQgYXJlIHRoZSBvYmplY3QgbmFtZXMgYWxyZWFkeSB0YWtlbiBpbiBhbiBhbHRlcm5hdGUKKyAgIG9iamVjdCBkYXRhYmFzZT8iIHF1ZXJ5IHRoYXQgaXMgdXNlZCB0byBkZXJpdmUgdGhlIGxlbmd0aCBvZiBwcmVmaXgKKyAgIGFuIG9iamVjdCBuYW1lIGlzIHVuaXF1ZWx5IGFiYnJldmlhdGVkIHRvLgorCisgKiBUaGUgaGFzaG1hcCBBUEkgaGFzIGJlZW4gdXBkYXRlZCBzbyB0aGF0IGRhdGEgdG8gY3VzdG9taXplIHRoZQorICAgYmVoYXZpb3VyIG9mIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXQgdGhlIHRpbWUgYQorICAgaGFzaG1hcCBpcyBpbml0aWFsaXplZC4KKworICogVGhlICJjb2xsaXNpb24gZGV0ZWN0aW5nIiBTSEEtMSBpbXBsZW1lbnRhdGlvbiBzaGlwcGVkIHdpdGggMi4xMyBpcworICAgbm93IGludGVncmF0ZWQgaW50byBnaXQuZ2l0IGFzIGEgc3VibW9kdWxlICh0aGUgZmlyc3Qgc3VibW9kdWxlIHRvCisgICBzaGlwIHdpdGggZ2l0LmdpdCkuIENsb25lIGdpdC5naXQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyB0byBnZXQKKyAgIGl0LiBGb3Igbm93IGEgbm9uLXN1Ym1vZHVsZSBjb3B5IG9mIHRoZSBzYW1lIGNvZGUgaXMgYWxzbyBzaGlwcGVkCisgICBhcyBwYXJ0IG9mIHRoZSB0cmVlLgorCisgKiBBIHJlY2VudCB1cGRhdGUgbWFkZSBpdCBlYXNpZXIgdG8gdXNlICItZnNhbml0aXplPSIgb3B0aW9uIHdoaWxlCisgICBjb21waWxpbmcgYnV0IHN1cHBvcnRlZCBvbmx5IG9uZSBzYW5pdGl6ZSBvcHRpb24uICBBbGxvdyBtb3JlIHRoYW4KKyAgIG9uZSB0byBiZSBjb21iaW5lZCwgam9pbmVkIHdpdGggYSBjb21tYSwgbGlrZSAibWFrZSBTQU5JVElaRT1mb28sYmFyIi4KKworICogVXNlICJwNCAtRyIgdG8gbWFrZSAicDQgY2hhbmdlcyIgb3V0cHV0IG1vcmUgUHl0aG9uLWZyaWVuZGx5CisgICB0byBwYXJzZS4KKworICogV2Ugc3RhcnRlZCB1c2luZyAiJSIgUFJJdGltZSwgaW1pdGF0aW5nICIlIiBQUkl1TUFYIGFuZCBmcmllbmRzLCBhcworICAgYSB3YXkgdG8gZm9ybWF0IHRoZSBpbnRlcm5hbCB0aW1lc3RhbXAgdmFsdWUsIGJ1dCB0aGlzIGRvZXMgbm90CisgICBwbGF5IHdlbGwgd2l0aCBnZXR0ZXh0KDEpIGkxOG4gZnJhbWV3b3JrLCBhbmQgY2F1c2VzICJtYWtlIHBvdCIKKyAgIHRoYXQgaXMgcnVuIGJ5IHRoZSBsMTBuIGNvb3JkaW5hdG9yIHRvIGNyZWF0ZSBhIGJyb2tlbiBwby9naXQucG90CisgICBmaWxlLiAgVGhpcyBpcyBhIHBvc3NpYmxlIHdvcmthcm91bmQgZm9yIHRoYXQgcHJvYmxlbS4KKworICogSXQgdHVybnMgb3V0IHRoYXQgQ3lnd2luIGFsc28gbmVlZHMgdGhlIGZvcGVuKCkgd3JhcHBlciB0aGF0CisgICByZXR1cm5zIGZhaWx1cmUgd2hlbiBhIGRpcmVjdG9yeSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjEzCistLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjEzIGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqICJnaXQgZ2MiIGRpZCBub3QgaW50ZXJhY3Qgd2VsbCB3aXRoICJnaXQgd29ya3RyZWUiLW1hbmFnZWQKKyAgIHBlci13b3JrdHJlZSByZWZzLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgb3RoZXIgdXNlcyBvZiB0aGUgc2VxdWVuY2VyIG1hY2hpbmVyeQorICAgbWlzaGFuZGxlZCBhIHRyYWlsZXIgYmxvY2sgd2hvc2UgbGFzdCBsaW5lIGlzIGFuIGluY29tcGxldGUgbGluZS4KKyAgIFRoaXMgaGFzIGJlZW4gZml4ZWQgc28gdGhhdCBhbiBhZGRpdGlvbmFsIHNpZ24tb2ZmIGV0Yy4gYXJlIGFkZGVkCisgICBhZnRlciBjb21wbGV0aW5nIHRoZSBleGlzdGluZyBpbmNvbXBsZXRlIGxpbmUuCisKKyAqIFRoZSBjb2RlcGF0aCBpbiAiZ2l0IGFtIiB0aGF0IGlzIHVzZWQgd2hlbiBydW5uaW5nICJnaXQgcmViYXNlIgorICAgbGVha2VkIG1lbW9yeSBoZWxkIGZvciB0aGUgbG9nIG1lc3NhZ2Ugb2YgdGhlIGNvbW1pdHMgYmVpbmcgcmViYXNlZC4KKworICogImdpdCBjbG9uZSAtLWNvbmZpZyB2YXI9dmFsIiBpcyBhIHdheSB0byBwb3B1bGF0ZSB0aGUKKyAgIHBlci1yZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZmlsZSBvZiB0aGUgbmV3IHJlcG9zaXRvcnksIGJ1dCBpdCBkaWQKKyAgIG5vdCB3b3JrIHdlbGwgd2hlbiB2YWwgaXMgYW4gZW1wdHkgc3RyaW5nLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogU2V0dGluZyAibG9nLmRlY29yYXRlPWZhbHNlIiBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGRpZCBub3QgdGFrZQorICAgZWZmZWN0IGluIHYyLjEzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEEgZmV3IGNvZGVwYXRocyBpbiAiY2hlY2tvdXQiIGFuZCAiYW0iIHdvcmtpbmcgb24gYW4gdW5ib3JuIGJyYW5jaAorICAgdHJpZWQgdG8gYWNjZXNzIGFuIHVuaW5pdGlhbGl6ZWQgcGllY2Ugb2YgbWVtb3J5LgorCisgKiBUaGUgV2ViIGludGVyZmFjZSB0byBnbWFuZSBuZXdzIGFyY2hpdmUgaXMgbG9uZyBnb25lLCBldmVuIHRob3VnaAorICAgdGhlIGFydGljbGVzIGFyZSBzdGlsbCBhY2Nlc3NpYmxlIHZpYSBOVFRQLiAgUmVwbGFjZSB0aGUgbGlua3Mgd2l0aAorICAgb25lcyB0byBwdWJsaWMtaW5ib3gub3JnLiAgQmVjYXVzZSB0aGVpciBtZXNzYWdlIGlkZW50aWZpY2F0aW9uIGlzCisgICBiYXNlZCBvbiB0aGUgYWN0dWFsIG1lc3NhZ2UtaWQsIGl0IGlzIGxpa2VseSB0aGF0IGl0IHdpbGwgYmUgZWFzaWVyCisgICB0byBtaWdyYXRlIGF3YXkgZnJvbSBpdCBpZi93aGVuIG5lY2Vzc2FyeS4KKworICogVGhlIHJlY2VpdmUtcGFjayBwcm9ncmFtIG5vdyBtYWtlcyBzdXJlIHRoYXQgdGhlIHB1c2ggY2VydGlmaWNhdGUKKyAgIHJlY29yZHMgdGhlIHNhbWUgc2V0IG9mIHB1c2ggb3B0aW9ucyB1c2VkIGZvciBwdXNoaW5nLgorCisgKiBUZXN0cyBoYXZlIGJlZW4gdXBkYXRlZCB0byBwYXNzIHVuZGVyIEdFVFRFWFRfUE9JU09OIChhIG1lY2hhbmlzbQorICAgdG8gZW5zdXJlIHRoYXQgb3V0cHV0IHN0cmluZ3MgdGhhdCBzaG91bGQgbm90IGJlIHRyYW5zbGF0ZWQgYXJlCisgICBub3QgdHJhbnNsYXRlZCBieSBtaXN0YWtlKSwgYW5kIFRyYXZpc0NJIGlzIHRvbGQgdG8gcnVuIHRoZW0uCisKKyAqICJnaXQgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGRpZCBub3QgcXVpdGUgd29yayB3aXRoIGEKKyAgIHN1Ym1vZHVsZSB0aGF0IGl0c2VsZiBoYXMgc3VibW9kdWxlcy4KKworICogInBhY2stb2JqZWN0cyIgY2FuIHN0cmVhbSBhIHNsaWNlIG9mIGFuIGV4aXN0aW5nIHBhY2tmaWxlIG91dCB3aGVuCisgICB0aGUgcGFjayBiaXRtYXAgY2FuIHRlbGwgdGhhdCB0aGUgcmVhY2hhYmxlIG9iamVjdHMgYXJlIGFsbCBuZWVkZWQKKyAgIGluIHRoZSBvdXRwdXQsIHdpdGhvdXQgaW5zcGVjdGluZyBpbmRpdmlkdWFsIG9iamVjdHMuICBUaGlzCisgICBzdHJhdGVneSBob3dldmVyIHdvdWxkIG5vdCB3b3JrIHdlbGwgd2hlbiAiLS1sb2NhbCIgYW5kIG90aGVyCisgICBvcHRpb25zIGFyZSBpbiB1c2UsIGFuZCBuZWVkIHRvIGJlIGRpc2FibGVkLgorCisgKiBGaXggbWVtb3J5IGxlYWtzIHBvaW50ZWQgb3V0IGJ5IENvdmVyaXR5IChhbmQgcGVvcGxlKS4KKworICogImdpdCByZWFkLXRyZWUgLW0iIChubyB0cmVlLWlzaCkgZ2F2ZSBhIG5vbnNlbnNlIHN1Z2dlc3Rpb24gInVzZQorICAgLS1lbXB0eSBpZiB5b3Ugd2FudCB0byBjbGVhciB0aGUgaW5kZXgiLiAgV2l0aCAiLW0iLCBzdWNoIGEgcmVxdWVzdAorICAgd2lsbCBzdGlsbCBmYWlsIGFueXdheSwgYXMgeW91J2QgbmVlZCB0byBuYW1lIGF0IGxlYXN0IG9uZSB0cmVlLWlzaAorICAgdG8gYmUgbWVyZ2VkLgorCisgKiBNYWtlIHN1cmUgb3VyIHRlc3RzIHdvdWxkIHBhc3Mgd2hlbiB0aGUgc291cmNlcyBhcmUgY2hlY2tlZCBvdXQKKyAgIHdpdGggInBsYXRmb3JtIG5hdGl2ZSIgbGluZSBlbmRpbmcgY29udmVudGlvbiBieSBkZWZhdWx0IG9uCisgICBXaW5kb3dzLiAgU29tZSAidGV4dCIgZmlsZXMgb3V0IHRlc3RzIHVzZSBhbmQgdGhlIHRlc3Qgc2NyaXB0cworICAgdGhlbXNlbHZlcyB0aGF0IGFyZSBtZWFudCB0byBiZSBydW4gd2l0aCAvYmluL3NoLCBvdWdodCB0byBiZQorICAgY2hlY2tlZCBvdXQgd2l0aCBlb2w9TEYgZXZlbiBvbiBXaW5kb3dzLgorCisgKiBJbnRyb2R1Y2UgdGhlIEJVRygpIG1hY3JvIHRvIGltcHJvdmUgZGllKCJCVUc6IC4uLiIpLgorCisgKiBDbGFyaWZ5IGRvY3VtZW50YXRpb24gZm9yIGluY2x1ZGUucGF0aCBhbmQgaW5jbHVkZUlmLjxjb25kaXRpb24+LnBhdGgKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorCisgKiBHaXQgc29tZXRpbWVzIGdpdmVzIGFuIGFkdmljZSBpbiBhIHJoZXRvcmljYWwgcXVlc3Rpb24gdGhhdCBkb2VzCisgICBub3QgcmVxdWlyZSBhbiBhbnN3ZXIsIHdoaWNoIGNhbiBjb25mdXNlIG5ldyB1c2VycyBhbmQgbm9uIG5hdGl2ZQorICAgc3BlYWtlcnMuICBBdHRlbXB0IHRvIHJlcGhyYXNlIHRoZW0uCisKKyAqIEEgZmV3IGh0dHA6Ly8gbGlua3MgdGhhdCBhcmUgcmVkaXJlY3RlZCB0byBodHRwczovLyBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gaHR0cHM6Ly8gbGlua3MuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PS4uLiIgd2l0aCAlKEhFQUQpIGluIHRoZSBmb3JtYXQgdXNlZCB0bworICAgcmVzb2x2ZSB0aGUgSEVBRCBzeW1yZWYgYXMgbWFueSB0aW1lcyBhcyBpdCBoYWQgcHJvY2Vzc2VkIHJlZnMsCisgICB3aGljaCB3YXMgd2FzdGVmdWwsIGFuZCAiZ2l0IGJyYW5jaCIgc2hhcmVkIHRoZSBzYW1lIHByb2JsZW0uCisKKyAqIFJlZ3Jlc3Npb24gZml4IHRvIHRvcGljIHJlY2VudGx5IG1lcmdlZCB0byAnbWFzdGVyJy4KKworICogVGhlIHNoZWxsIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCAiZ2l0IHN0YXNoIiBoYXMKKyAgIGEgbmV3ICJwdXNoIiBzdWJjb21tYW5kLgorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIsIHdoZW4gdXNlZCBhcyBHSVRfRURJVE9SIGZvciAiZ2l0IGNvbW1pdAorICAgLXYiLCBsb29rZWQgZm9yIGFuZCBhcHBlbmRlZCB0byBhIHRyYWlsZXIgYmxvY2sgYXQgdGhlIHZlcnkgZW5kLAorICAgaS5lLiBhdCB0aGUgZW5kIG9mIHRoZSAiZGlmZiIgb3V0cHV0LiAgVGhlIGNvbW1hbmQgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjdXQtbWFyayBsaW5lICJjb21taXQgLXYiIGFkZHMgdG8KKyAgIHRoZSBidWZmZXItLS10aGUgcmVhbCB0cmFpbGVyIGJsb2NrIHNob3VsZCBhcHBlYXIganVzdCBiZWZvcmUgaXQuCisKKyAqIEEgdGVzdCBhbGxvd2VkIGJvdGggImdpdCBwdXNoIiBhbmQgImdpdCByZWNlaXZlLXBhY2siIG9uIHRoZSBvdGhlcgorICAgZW5kIHdyaXRlIHRoZWlyIHRyYWNlcyBpbnRvIHRoZSBzYW1lIGZpbGUuICBUaGlzIGlzIE9LIG9uIHBsYXRmb3JtcworICAgdGhhdCBhbGxvd3MgYXRvbWljYWxseSBhcHBlbmRpbmcgdG8gYSBmaWxlIG9wZW5lZCB3aXRoIE9fQVBQRU5ELAorICAgYnV0IG9uIG90aGVyIHBsYXRmb3JtcyBsZWQgdG8gYSBtYW5nbGVkIG91dHB1dCwgY2F1c2luZworICAgaW50ZXJtaXR0ZW50IHRlc3QgZmFpbHVyZXMuICBUaGlzIGhhcyBiZWVuIGZpeGVkIGJ5IGRpc2FibGluZworICAgdHJhY2VzIGZyb20gInJlY2VpdmUtcGFjayIgaW4gdGhlIHRlc3QuCisKKyAqIFRhZyBvYmplY3RzLCB3aGljaCBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIGFueSByZWYsIHRoYXQgcG9pbnQgYXQKKyAgIG1pc3Npbmcgb2JqZWN0cyB3ZXJlIG1pc2hhbmRsZWQgYnkgImdpdCBnYyIgYW5kIGZyaWVuZHMgKHRoZXkKKyAgIHNob3VsZCBzaWxlbnRseSBiZSBpZ25vcmVkIGluc3RlYWQpCisKKyAqICJnaXQgZGVzY3JpYmUgLS1jb250YWlucyIgcGVuYWxpemVkIGxpZ2h0LXdlaWdodCB0YWdzIHNvIG11Y2ggdGhhdAorICAgdGhleSB3ZXJlIGFsbW9zdCBuZXZlciBjb25zaWRlcmVkLiAgSW5zdGVhZCwgZ2l2ZSB0aGVtIGFib3V0IHRoZQorICAgc2FtZSBjaGFuY2UgdG8gYmUgY29uc2lkZXJlZCBhcyBhbiBhbm5vdGF0ZWQgdGFnIHRoYXQgaXMgdGhlIHNhbWUKKyAgIGFnZSBhcyB0aGUgdW5kZXJseWluZyBjb21taXQgd291bGQuCisKKyAqIFRoZSAicnVuLWNvbW1hbmQiIEFQSSBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0CisgICBhZ2FpbnN0IGRlYWQtbG9ja2luZyBpbiBhIHRocmVhZGVkIGVudmlyb25tZW50LgorCisgKiBBIHJlY2VudCB1cGRhdGUgdG8gdDU1NDUtcHVzaC1vcHRpb25zLnNoIHN0YXJ0ZWQgc2tpcHBpbmcgYWxsIHRoZQorICAgdGVzdHMgaW4gdGhlIHNjcmlwdCB3aGVuIGEgd2ViIHNlcnZlciB0ZXN0aW5nIGlzIGRpc2FibGVkIG9yCisgICB1bmF2YWlsYWJsZSwgbm90IGp1c3QgdGhlIG9uZXMgdGhhdCByZXF1aXJlIGEgd2ViIHNlcnZlci4gIE5vbiBIVFRQCisgICB0ZXN0cyBoYXZlIGJlZW4gc2FsdmFnZWQgdG8gYWx3YXlzIHJ1biBpbiB0aGlzIHNjcmlwdC4KKworICogImdpdCBzZW5kLWVtYWlsIiBub3cgdXNlcyBOZXQ6OlNNVFA6OlNTTCwgd2hpY2ggaXMgb2Jzb2xldGUsIG9ubHkKKyAgIHdoZW4gbmVlZGVkLiAgUmVjZW50IHZlcnNpb25zIG9mIE5ldDo6U01UUCBjYW4gZG8gVExTIG5hdGl2ZWx5LgorCisgKiAiZm9vXGJhclxiYXoiIGluICJnaXQgZmV0Y2ggZm9vXGJhclxiYXoiLCBldmVuIHRob3VnaCB0aGVyZSBpcyBubworICAgc2xhc2hlcyBpbiBpdCwgY2Fubm90IGJlIGEgbmlja25hbWUgZm9yIGEgcmVtb3RlIG9uIFdpbmRvd3MsIGFzCisgICB0aGF0IGlzIGxpa2VseSB0byBiZSBhIHBhdGhuYW1lIG9uIGEgbG9jYWwgZmlsZXN5c3RlbS4KKworICogImdpdCBjbGVhbiAtZCIgdXNlZCB0byBjbGVhbiBkaXJlY3RvcmllcyB0aGF0IGhhcyBpZ25vcmVkIGZpbGVzLAorICAgZXZlbiB0aG91Z2ggdGhlIGNvbW1hbmQgc2hvdWxkIG5vdCBsb3NlIGlnbm9yZWQgb25lcyB3aXRob3V0ICIteCIuCisgICAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQiICBkaWQgbm90IGxpc3QgaWdub3JlZCBhbmQgdW50cmFja2VkIGZpbGVzCisgICB3aXRob3V0ICItdWFsbCIuICBUaGVzZSBoYXZlIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgcmVzdWx0IGZyb20gImdpdCBkaWZmIiB0aGF0IGNvbXBhcmVzIHR3byBibG9icywgZS5nLiAiZ2l0IGRpZmYKKyAgICRjb21taXQxOiRwYXRoICRjb21taXQyOiRwYXRoIiwgdXNlZCB0byBiZSBzaG93biB3aXRoIHRoZSBmdWxsCisgICBvYmplY3QgbmFtZSBhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBidXQgaXQgaXMgbW9yZSBuYXR1cmFsIHRvCisgICB1c2UgdGhlICRwYXRoIGluIHRoZSBvdXRwdXQgYW5kIHVzZSBpdCB0byBsb29rIHVwIC5naXRhdHRyaWJ1dGVzLgorCisgKiBUaGUgImNvbGxpc2lvbiBkZXRlY3RpbmciIFNIQS0xIGltcGxlbWVudGF0aW9uIHNoaXBwZWQgd2l0aCAyLjEzCisgICB3YXMgcXVpdGUgYnJva2VuIG9uIHNvbWUgYmlnLWVuZGlhbiBwbGF0Zm9ybXMgYW5kL29yIHBsYXRmb3JtcyB0aGF0CisgICBkbyBub3QgbGlrZSB1bmFsaWduZWQgZmV0Y2hlcy4gIFVwZGF0ZSB0byB0aGUgdXBzdHJlYW0gY29kZSB3aGljaAorICAgaGFzIGFscmVhZHkgZml4ZWQgdGhlc2UgaXNzdWVzLgorCisgKiAiZ2l0IGFtIC1oIiB0cmlnZ2VyZWQgYSBCVUcoKS4KKworICogVGhlIGludGVyYWN0aW9uIG9mICJ1cmwuKi5pbnN0ZWFkT2YiIGFuZCBjdXN0b20gVVJMIHNjaGVtZSdzCisgICB3aGl0ZWxpc3RpbmcgaXMgbm93IGRvY3VtZW50ZWQgYmV0dGVyLgorCisgKiBUaGUgdGltZXN0YW1wIG9mIHRoZSBpbmRleCBmaWxlIGlzIG5vdyB0YWtlbiBhZnRlciB0aGUgZmlsZSBpcworICAgY2xvc2VkLCB0byBoZWxwIFdpbmRvd3MsIG9uIHdoaWNoIGEgc3RhbGUgdGltZXN0YW1wIGlzIHJlcG9ydGVkIGJ5CisgICBmc3RhdCgpIG9uIGEgZmlsZSB0aGF0IGlzIG9wZW5lZCBmb3Igd3JpdGluZyBhbmQgZGF0YSB3YXMgd3JpdHRlbgorICAgYnV0IG5vdCB5ZXQgY2xvc2VkLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UgLS1hdXRvc3Rhc2giIGRpZG4ndCBhdXRvLXN0YXNoIHdoZW4gdGhlIGxvY2FsIGhpc3RvcnkKKyAgIGZhc3QtZm9yd2FyZHMgdG8gdGhlIHVwc3RyZWFtLgorCisgKiBBIGZsYWt5IHRlc3QgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0ICRjbWQgLWgiIGZvciBidWlsdGluIGNvbW1hbmRzIGNhbGxzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKyAgIGNvbW1hbmQgKGkuZS4gY21kXyRjbWQoKSBmdW5jdGlvbikgd2l0aG91dCBkb2luZyBhbnkgcmVwb3NpdG9yeQorICAgc2V0LXVwLCBhbmQgdGhlIGNvbW1hbmRzIHRoYXQgZXhwZWN0IFJVTl9TRVRVUCBpcyBkb25lIGJ5IHRoZSBHaXQKKyAgIHBvdHR5IG5lZWRzIHRvIGJlIHByZXBhcmVkIHRvIHNob3cgdGhlIGhlbHAgdGV4dCB3aXRob3V0IGJhcmZpbmcuCisgICAobWVyZ2UgZDY5MTU1MTE5MiBqay9jb25zaXN0ZW50LWggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIZWxwIGNvbnRyaWJ1dG9ycyB0aGF0IHZpc2l0IHVzIGF0IEdpdEh1Yi4KKworICogImdpdCBzdGFzaCBwdXNoIDxwYXRoc3BlYz4iIGRpZCBub3Qgd29yayBmcm9tIGEgc3ViZGlyZWN0b3J5IGF0IGFsbC4KKyAgIEJ1Z2ZpeCBmb3IgYSB0b3BpYyBpbiB2Mi4xMworCisgKiBBcyB0aGVyZSBpcyBubyBwb3J0YWJsZSB3YXkgdG8gcGFzcyB0aW1lem9uZSBpbmZvcm1hdGlvbiB0bworICAgc3RyZnRpbWUsIHNvbWUgb3V0cHV0IGZvcm1hdCBmcm9tICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBhcmUKKyAgIGltcG9zc2libGUgdG8gcHJvZHVjZS4gIFRlYWNoIG91ciBvd24gc3RyYnVmX2FkZGZ0aW1lIHRvIHJlcGxhY2UgJXoKKyAgIGFuZCAlWiB3aXRoIGNhbGxlci1zdXBwbGllZCB2YWx1ZXMgdG8gaGVscCB3b3JraW5nIGFyb3VuZCB0aGlzLgorICAgKG1lcmdlIDZlY2VkM2VjNWUgcnMvc3RyYnVmLWFkZGZ0aW1lLXpaIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgdG8gd29yayBhcm91bmQgYSB3cmFwcGVyIE1hY09TIFggYWRkcworICAgYXJvdW5kIHVuZGVybHlpbmcgbWVsZC4KKworICogQW4gZXhhbXBsZSBpbiBkb2N1bWVudGF0aW9uIHRoYXQgZG9lcyBub3Qgd29yayBpbiBtdWx0aSB3b3JrdHJlZQorICAgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBwcmV0dHktZm9ybWF0IHNwZWNpZmllcnMgbGlrZSAnJWgnLCAnJXQnLCBldGMuIGhhZCBhbgorICAgb3B0aW1pemF0aW9uIHRoYXQgbm8gbG9uZ2VyIHdvcmtzIGNvcnJlY3RseS4gIEluIHByZXBhcmF0aW9uL2hvcGUKKyAgIG9mIGdldHRpbmcgaXQgY29ycmVjdGx5IGltcGxlbWVudGVkLCBmaXJzdCBkaXNjYXJkIHRoZSBvcHRpbWl6YXRpb24KKyAgIHRoYXQgaXMgYnJva2VuLgorCisgKiBUaGUgY29kZSB0byBwaWNrIHVwIGFuZCBleGVjdXRlIGNvbW1hbmQgYWxpYXMgZGVmaW5pdGlvbiBmcm9tIHRoZQorICAgY29uZmlndXJhdGlvbiB1c2VkIHRvIHN3aXRjaCB0byB0aGUgdG9wIG9mIHRoZSB3b3JraW5nIHRyZWUgYW5kCisgICB0aGVuIGNvbWUgYmFjayB3aGVuIHRoZSBleHBhbmRlZCBhbGlhcyB3YXMgZXhlY3V0ZWQsIHdoaWNoIHdhcworICAgdW5uZWNlc3NhcmlseSBjb21wbGV4LiAgQXR0ZW1wdCB0byBzaW1wbGlmeSB0aGUgbG9naWMgYnkgdXNpbmcgdGhlCisgICBlYXJseS1jb25maWcgbWVjaGFuaXNtIHRoYXQgZG9lcyBub3QgY2hkaXIgYXJvdW5kLgorCisgKiBGaXggY29uZmlndXJhdGlvbiBjb2RlcGF0aCB0byBwYXkgcHJvcGVyIGF0dGVudGlvbiB0byBjb21tb25kaXIKKyAgIHRoYXQgaXMgdXNlZCBpbiBtdWx0aS13b3JrdHJlZSBzaXR1YXRpb24sIGFuZCBpc29sYXRlIGNvbmZpZyBBUEkKKyAgIGludG8gaXRzIG93biBoZWFkZXIgZmlsZS4KKyAgIChtZXJnZSBkYzg0NDFmZGI0IGJ3L2NvbmZpZy1oIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhZGQgLXAiIHdlcmUgdXBkYXRlZCBpbiAyLjEyIHRpbWVmcmFtZSB0byBjb3BlIHdpdGggY3VzdG9tCisgICBjb3JlLmNvbW1lbnRjaGFyIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gd2FzIGJ1Z2d5IGFuZCBhCisgICBtZXRhY2hhcmFjdGVyIGxpa2UgJCBhbmQgKiBkaWQgbm90IHdvcmsuCisKKyAqIEEgcmVjZW50IHJlZ3Jlc3Npb24gaW4gImdpdCByZWJhc2UgLWkiIGhhcyBiZWVuIGZpeGVkIGFuZCB0ZXN0cworICAgdGhhdCB3b3VsZCBoYXZlIGNhdWdodCBpdCBhbmQgb3RoZXJzIGhhdmUgYmVlbiBhZGRlZC4KKworICogQW4gdW5hbGlnbmVkIDMyLWJpdCBhY2Nlc3MgaW4gcGFjay1iaXRtYXAgY29kZSBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRpZ2h0ZW4gZXJyb3IgY2hlY2tzIGZvciBpbnZhbGlkICJnaXQgYXBwbHkiIGlucHV0LgorCisgKiBUaGUgc3BsaXQgaW5kZXggY29kZSBkaWQgbm90IGhvbm9yIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBzZXR0aW5nCisgICBjb3JyZWN0bHkuCisKKyAqIFRoZSBNYWtlZmlsZSBydWxlIGluIGNvbnRyaWIvc3VidHJlZSBmb3IgYnVpbGRpbmcgZG9jdW1lbnRhdGlvbgorICAgbGVhcm5lZCB0byBob25vdXIgVVNFX0FTQ0lJRE9DVE9SIGp1c3QgbGlrZSB0aGUgbWFpbiBkb2N1bWVudGF0aW9uCisgICBzZXQgZG9lcy4KKworICogQ29kZSBjbGVhbi11cCB0byBmaXggcG9zc2libGUgYnVmZmVyIG92ZXItcmVhZGluZy4KKworICogQSBmZXcgdGVzdHMgdGhhdCB0cmllZCB0byB2ZXJpZnkgdGhlIGNvbnRlbnRzIG9mIHB1c2ggY2VydGlmaWNhdGVzCisgICBkaWQgbm90IHVzZSAnZ2l0IHJldi1wYXJzZScgdG8gZm9ybXVsYXRlIHRoZSBsaW5lIHRvIGxvb2sgZm9yIGluCisgICB0aGUgY2VydGlmaWNhdGUgY29ycmVjdGx5LgorCisgKiBVcGRhdGUgdGhlIGNoYXJhY3RlciB3aWR0aCB0YWJsZXMuCisKKyAqIEFmdGVyICJnaXQgYnJhbmNoIC0tbW92ZSIgb2YgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2gsIHRoZQorICAgY29kZSB0byB3YWxrIHRoZSByZWZsb2cgb2YgSEVBRCB2aWEgImxvZyAtZyIgYW5kIGZyaWVuZHMKKyAgIGluY29ycmVjdGx5IHN0b3BwZWQgYXQgdGhlIHJlZmxvZyBlbnRyeSB0aGF0IHJlY29yZHMgdGhlIHJlbmFtaW5nCisgICBvZiB0aGUgYnJhbmNoLgorCisgKiBUaGUgcmV3cml0ZSBvZiAiZ2l0IGJyYW5jaCAtLWxpc3QiIHVzaW5nIGZvci1lYWNoLXJlZidzIGludGVybmFscworICAgdGhhdCBoYXBwZW5lZCBpbiB2Mi4xMyByZWdyZXNzZWQgaXRzIGhhbmRsaW5nIG9mIGNvbG9yLmJyYW5jaC5sb2NhbDsKKyAgIHRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgaGFzIGJlZW4gaW1wcm92ZWQgdG8gYWxsb3cgYnVpbGRpbmcgYW5kIHRlc3RpbmcKKyAgIEdpdCB3aXRoIGFkZHJlc3Mgc2FuaXRpemVyIG1vcmUgZWFzaWx5LgorICAgKG1lcmdlIDQyNWNhNjcxMGIgamsvYnVpbGQtd2l0aC1hc2FuIGxhdGVyIHRvIG1haW50KS4KKworICogT24gQ3lnd2luLCBzaW1pbGFyIHRvIFdpbmRvd3MsICJnaXQgcHVzaCAvL3NlcnZlci9zaGFyZS9yZXBvc2l0b3J5IgorICAgb3VnaHQgdG8gbWVhbiBhIHJlcG9zaXRvcnkgb24gYSBuZXR3b3JrIHNoYXJlIHRoYXQgY2FuIGJlIGFjY2Vzc2VkCisgICBsb2NhbGx5LCBidXQgdGhpcyBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGR1ZSB0byBzdHJpcHBpbmcgdGhlIGRvdWJsZQorICAgc2xhc2hlcyBhdCB0aGUgYmVnaW5uaW5nLgorCisgKiBUaGUgcHJvZ3Jlc3MgbWV0ZXIgZGlkIG5vdCBnaXZlIGEgdXNlZnVsIG91dHB1dCB3aGVuIHdlIGhhdmVuJ3QgaGFkCisgICAwLjUgc2Vjb25kcyB0byBtZWFzdXJlIHRoZSB0aHJvdWdocHV0IGR1cmluZyB0aGUgaW50ZXJ2YWwuICBJbnN0ZWFkCisgICBzaG93IHRoZSBvdmVyYWxsIHRocm91Z2hwdXQgcmF0ZSBhdCB0aGUgZW5kLCB3aGljaCBpcyBhIG11Y2ggbW9yZQorICAgdXNlZnVsIG51bWJlci4KKworICogQ29kZSBjbGVhbi11cCwgdGhhdCBtYWtlcyB1cyBpbiBzeW5jIHdpdGggRGViaWFuIGJ5IG9uZSBwYXRjaC4KKworICogV2UgcnVuIGFuIGVhcmx5IHBhcnQgb2YgImdpdCBnYyIgdGhhdCBkZWFscyB3aXRoIHJlZnMgYmVmb3JlCisgICBkYWVtb25pc2luZyAoYW5kIG5vdCB1bmRlciBsb2NrKSBldmVuIHdoZW4gcnVubmluZyBhIGJhY2tncm91bmQKKyAgIGF1dG8tZ2MsIHdoaWNoIGNhdXNlZCBtdWx0aXBsZSBnYyBwcm9jZXNzZXMgYXR0ZW1wdGluZyB0byBydW4gdGhlCisgICBlYXJseSBwYXJ0IGF0IHRoZSBzYW1lIHRpbWUuICBUaGlzIGlzIG5vdyBwcmV2ZW50ZWQgYnkgcnVubmluZyB0aGUKKyAgIGVhcmx5IHBhcnQgYWxzbyB1bmRlciB0aGUgR0MgbG9jay4KKworICogQSByZWNlbnQgdXBkYXRlIGJyb2tlIGFuIGFsaWFzIHRoYXQgY29udGFpbmVkIGFuIHVwcGVyY2FzZSBsZXR0ZXIuCisKKyAqIE90aGVyIG1pbm9yIGRvYywgdGVzdCBhbmQgYnVpbGQgdXBkYXRlcyBhbmQgY29kZSBjbGVhbnVwcy4KKyAgIChtZXJnZSA1MDUzMzEzNTYyIHJzL3VybG1hdGNoLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQyYzc4YTIxNmUgcnMvdXNlLWRpdi1yb3VuZC11cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWU4ZDI3MjlhZSBycy93dC1zdGF0dXMtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmM5YjdlMjA3ZiBhcy9kaWZmLW9wdGlvbnMtZ3JhbW1vZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhYzA1MjIyYjMxIGFoL3BhdGNoLWlkLWRvYyBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwMzM0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4xLnR4dApAQCAtMCwwICsxLDQgQEAKK0dpdCB2Mi4xNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZvcndhcmQtcG9ydHMgdGhlIGZpeCBmb3IgInNzaDovLy4uLiIgVVJMIGZyb20gR2l0IHYyLjcuNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzkxODYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMi50eHQKQEAgLTAsMCArMSwxMDUgQEAKK0dpdCB2Mi4xNC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTQuMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCZWNhdXNlIHJlY2VudCBHaXQgZm9yIFdpbmRvd3MgZG8gY29tZSB3aXRoIGEgcmVhbCBtc2dmbXQsIHRoZQorICAgYnVpbGQgcHJvY2VkdXJlIGZvciBnaXQtZ3VpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIGl0IGluc3RlYWQgb2YgYQorICAgaGFuZC1yb2xsZWQgc3Vic3RpdHV0ZS4KKworICogIiVDKGNvbG9yIG5hbWUpIiBpbiB0aGUgcHJldHR5IHByaW50IGZvcm1hdCBhbHdheXMgcHJvZHVjZWQgQU5TSQorICAgY29sb3IgZXNjYXBlIGNvZGVzLCB3aGljaCB3YXMgYW4gZWFybHkgZGVzaWduIG1pc3Rha2UuICBUaGV5IG5vdworICAgaG9ub3IgdGhlIGNvbmZpZ3VyYXRpb24gKGUuZy4gImNvbG9yLnVpID0gbmV2ZXIiKSBhbmQgYWxzbyB0dHktbmVzcworICAgb2YgdGhlIG91dHB1dCBtZWRpdW0uCisKKyAqIFRoZSBodHRwLntzc2xrZXksc3NsQ2VydH0gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYXJlIHRvIGJlCisgICBpbnRlcnByZXRlZCBhcyBhIHBhdGhuYW1lIHRoYXQgaG9ub3JzICJ+W3VzZXJuYW1lXS8iIHByZWZpeCwgYnV0CisgICB3ZXJlbid0LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogTnVtZXJvdXMgYnVncyBpbiB3YWxraW5nIG9mIHJlZmxvZ3MgdmlhICJsb2cgLWciIGFuZCBmcmllbmRzIGhhdmUKKyAgIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY29tbWl0IiB3aGVuIHNlZWluZyBhbiB0b3RhbGx5IGVtcHR5IG1lc3NhZ2Ugc2FpZCAieW91IGRpZCBub3QKKyAgIGVkaXQgdGhlIG1lc3NhZ2UiLCB3aGljaCBpcyBjbGVhcmx5IHdyb25nLiAgVGhlIG1lc3NhZ2UgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogV2hlbiBhIGRpcmVjdG9yeSBpcyBub3QgcmVhZGFibGUsICJnaXR3ZWIiIGZhaWxzIHRvIGJ1aWxkIHRoZQorICAgcHJvamVjdCBsaXN0LiAgV29yayB0aGlzIGFyb3VuZCBieSBza2lwcGluZyBzdWNoIGEgZGlyZWN0b3J5LgorCisgKiBBIHJlY2VudGx5IGFkZGVkIHRlc3QgZm9yIHRoZSAiY3JlZGVudGlhbC1jYWNoZSIgaGVscGVyIHJldmVhbGVkCisgICB0aGF0IEVPRiBkZXRlY3Rpb24gZG9uZSBhcm91bmQgdGhlIHRpbWUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGNhY2hlCisgICBkYWVtb24gaXMgdG9ybiBkb3duIHdlcmUgZmxha3kuICBUaGlzIHdhcyBmaXhlZCBieSByZWFjdGluZyB0bworICAgRUNPTk5SRVNFVCBhbmQgYmVoYXZpbmcgYXMgaWYgd2UgZ290IGFuIEVPRi4KKworICogU29tZSB2ZXJzaW9ucyBvZiBHbnVQRyBmYWlsIHRvIGtpbGwgZ3BnLWFnZW50IGl0IGF1dG8tc3Bhd25lZAorICAgYW5kIHN1Y2ggYSBsZWZ0LW92ZXIgYWdlbnQgY2FuIGludGVyZmVyZSB3aXRoIGEgdGVzdC4gIFdvcmsgaXQKKyAgIGFyb3VuZCBieSBhdHRlbXB0aW5nIHRvIGtpbGwgb25lIGJlZm9yZSBzdGFydGluZyBhIG5ldyB0ZXN0LgorCisgKiAiZ2l0IGxvZyAtLXRhZz1uby1zdWNoLXRhZyIgc2hvd2VkIGxvZyBzdGFydGluZyBmcm9tIEhFQUQsIHdoaWNoCisgICBoYXMgYmVlbiBmaXhlZC0tLWl0IG5vdyBzaG93cyBub3RoaW5nLgorCisgKiBUaGUgInRhZy5wYWdlciIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3YXMgdXNlbGVzcyBmb3IgdGhvc2Ugd2hvCisgICBhY3R1YWxseSBjcmVhdGUgdGFnIG9iamVjdHMsIGFzIGl0IGludGVyZmVyZWQgd2l0aCB0aGUgdXNlIG9mIGFuCisgICBlZGl0b3IuICBBIG5ldyBtZWNoYW5pc20gaGFzIGJlZW4gaW50cm9kdWNlZCBmb3IgY29tbWFuZHMgdG8gZW5hYmxlCisgICBwYWdlciBkZXBlbmRpbmcgb24gd2hhdCBvcGVyYXRpb24gaXMgYmVpbmcgY2FycmllZCBvdXQgdG8gZml4IHRoaXMsCisgICBhbmQgdGhlbiAiZ2l0IHRhZyAtbCIgaXMgbWFkZSB0byBydW4gcGFnZXIgYnkgZGVmYXVsdC4KKworICogImdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzICR0aGVyZSBIRUFEOiR0YXJnZXQiIHdhcyBub3QKKyAgIHByb3BhZ2F0ZWQgZG93biB0byB0aGUgc3VibW9kdWxlcywgYnV0IG5vdyBpdCBpcy4KKworICogQ29tbWFuZHMgbGlrZSAiZ2l0IHJlYmFzZSIgYWNjZXB0ZWQgdGhlIC0tcmVyZXJlLWF1dG91cGRhdGUgb3B0aW9uCisgICBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCBkaWQgbm90IGFsd2F5cyB1c2UgaXQuICBUaGlzIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogImdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLXF1aWV0IiBkaWQgbm90IHBhc3MgdGhlIHF1aWV0CisgICBvcHRpb24gZG93biB0byBzdWJtb2R1bGVzLgorCisgKiAiZ2l0IGFtIC1zIiBoYXMgYmVlbiB0YXVnaHQgdGhhdCBzb21lIGlucHV0IG1heSBlbmQgd2l0aCBhIHRyYWlsZXIKKyAgIGJsb2NrIHRoYXQgaXMgbm90IFNpZ25lZC1vZmYtYnk6IGFuZCBpdCBzaG91bGQgcmVmcmFpbiBmcm9tIGFkZGluZworICAgYW4gZXh0cmEgYmxhbmsgbGluZSBiZWZvcmUgYWRkaW5nIGEgbmV3IHNpZ24tb2ZmIGluIHN1Y2ggYSBjYXNlLgorCisgKiAiZ2l0IHN2biIgdXNlZCB3aXRoICItLWxvY2FsdGltZSIgb3B0aW9uIGRpZCBub3QgY29tcHV0ZSB0aGUgdHoKKyAgIG9mZnNldCBmb3IgdGhlIHRpbWVzdGFtcCBpbiBxdWVzdGlvbiBhbmQgaW5zdGVhZCBhbHdheXMgdXNlZCB0aGUKKyAgIGN1cnJlbnQgdGltZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBNZW1vcnkgbGVha3MgaW4gYSBmZXcgZXJyb3IgY29kZXBhdGhzIGhhdmUgYmVlbiBwbHVnZ2VkLgorCisgKiBiYXNoIDQuNCBvciBuZXdlciBnYXZlIGEgd2FybmluZyBvbiBOVUwgYnl0ZSBpbiBjb21tYW5kCisgICBzdWJzdGl0dXRpb24gZG9uZSBpbiAiZ2l0IHN0YXNoIjsgdGhpcyBoYXMgYmVlbiBzcXVlbGNoZWQuCisKKyAqICJnaXQgZ3JlcCAtTCIgYW5kICJnaXQgZ3JlcCAtLXF1aWV0IC1MIiByZXBvcnRlZCBkaWZmZXJlbnQgZXhpdAorICAgY29kZXM7IHRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBXaGVuIGhhbmRzaGFrZSB3aXRoIGEgc3VicHJvY2VzcyBmaWx0ZXIgbm90aWNlcyB0aGF0IHRoZSBwcm9jZXNzCisgICBhc2tlZCBmb3IgYW4gdW5rbm93biBjYXBhYmlsaXR5LCBHaXQgZGlkIG5vdCByZXBvcnQgd2hhdCBwcm9ncmFtCisgICB0aGUgb2ZmZW5kaW5nIHN1YnByb2Nlc3Mgd2FzIHJ1bm5pbmcuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBhcHBseSIgdGhhdCBpcyB1c2VkIGFzIGEgYmV0dGVyICJwYXRjaCAtcDEiIGZhaWxlZCB0byBhcHBseSBhCisgICB0YWtlbiBmcm9tIGEgZmlsZSB3aXRoIENSTEYgbGluZSBlbmRpbmdzIHRvIGEgZmlsZSB3aXRoIENSTEYgbGluZQorICAgZW5kaW5ncy4gIFRoZSByb290IGNhdXNlIHdhcyBiZWNhdXNlIGl0IG1pc3VzZWQgY29udmVydF90b19naXQoKQorICAgdGhhdCB0cmllZCB0byBkbyAic2FmZS1jcmxmIiBwcm9jZXNzaW5nIGJ5IGxvb2tpbmcgYXQgdGhlIGluZGV4CisgICBlbnRyeSBhdCB0aGUgc2FtZSBwYXRoLCB3aGljaCBpcyBhIG5vbnNlbnNlLS0taW4gdGhhdCBtb2RlLCAiYXBwbHkiCisgICBpcyBub3Qgd29ya2luZyBvbiB0aGUgZGF0YSBpbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgaW5kZXggYXQgYWxsLgorICAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogS2lsbGluZyAiZ2l0IG1lcmdlIC0tZWRpdCIgYmVmb3JlIHRoZSBlZGl0b3IgcmV0dXJucyBjb250cm9sIGxlZnQKKyAgIHRoZSByZXBvc2l0b3J5IGluIGEgc3RhdGUgd2l0aCBNRVJHRV9NU0cgYnV0IHdpdGhvdXQgTUVSR0VfSEVBRCwKKyAgIHdoaWNoIGluY29ycmVjdGx5IHRlbGxzIHRoZSBzdWJzZXF1ZW50ICJnaXQgY29tbWl0IiB0aGF0IHRoZXJlIHdhcworICAgYSBzcXVhc2ggbWVyZ2UgaW4gcHJvZ3Jlc3MuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggcGF0aHNwZWNzIGFuZCB0aGUKKyAgIGV4cG9ydC1pZ25vcmUgYXR0cmlidXRlLgorCisgKiAiZ2l0IGN2c3NlcnZlciIgbm8gbG9uZ2VyIGlzIGludm9rZWQgYnkgImdpdCBkYWVtb24iIGJ5IGRlZmF1bHQsCisgICBhcyBpdCBpcyBvbGQgYW5kIGxhcmdlbHkgdW5tYWludGFpbmVkLgorCisgKiBWYXJpb3VzIFBlcmwgc2NyaXB0cyBkaWQgbm90IHVzZSBzYWZlX3BpcGVfY2FwdHVyZSgpIGluc3RlYWQgb2YKKyAgIGJhY2t0aWNrcywgbGVhdmluZyB0aGVtIHN1c2NlcHRpYmxlIHRvIGVuZC11c2VyIGlucHV0LiAgVGhleSBoYXZlCisgICBiZWVuIGNvcnJlY3RlZC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKK0NyZWRpdHMgZ28gdG8gam9lcm5jaGVuIDxqb2VybmNoZW5AcGhlbm9lbGl0LmRlPiBmb3IgZmluZGluZyB0aGUKK3Vuc2FmZSBjb25zdHJ1Y3RzIGluICJnaXQgY3Zzc2VydmVyIiwgYW5kIHRvIEplZmYgS2luZyBhdCBHaXRIdWIgZm9yCitmaW5kaW5nIGFuZCBmaXhpbmcgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGlzc3VlIGluIG90aGVyIHNjcmlwdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3YzllOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4zLnR4dApAQCAtMCwwICsxLDk5IEBACitHaXQgdjIuMTQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjE0LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBoZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCBhIHNpbmdsZSB3aG9sZSBsaW5lIGludG8gc3RyYnVmCisgICBtaXN0YWtlbmx5IHRyaWdnZXJlZCBPT00gZXJyb3IgYXQgRU9GIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywKKyAgIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBJbiBhZGRpdGlvbiB0byAiY2M6IDxhQGRkLnJlLnNzPiAjIGNydWZ0IiwgImNjOiBhQGRkLnJlLnNzICMgY3J1ZnQiCisgICB3YXMgdGF1Z2h0IHRvICJnaXQgc2VuZC1lbWFpbCIgYXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBpdCB0aGF0IGl0CisgICBuZWVkcyB0byBhbHNvIHNlbmQgYSBjYXJib24gY29weSB0byA8YUBkZC5yZS5zcz4gaW4gdGhlIHRyYWlsZXIKKyAgIHNlY3Rpb24uCisKKyAqIEZpeCByZWdyZXNzaW9uIHRvICJnaXRrIC0tYmlzZWN0IiBieSBhIHJlY2VudCB1cGRhdGUuCisKKyAqIFVubGlrZSAiZ2l0IGNvbW1pdC10cmVlIDwgZmlsZSIsICJnaXQgY29tbWl0LXRyZWUgLUYgZmlsZSIgZGlkIG5vdAorICAgcGFzcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdmVyYmF0aW0gYW5kIGluc3RlYWQgY29tcGxldGVkIGFuCisgICBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZCwgaWYgZXhpc3RzLiAgVGhlIGxhdHRlciBoYXMgYmVlbiB1cGRhdGVkCisgICB0byBtYXRjaCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBmb3JtZXIuCisKKyAqICJnaXQgYXJjaGl2ZSIsIGVzcGVjaWFsbHkgd2hlbiB1c2VkIHdpdGggcGF0aHNwZWMsIHN0b3JlZCBhbiBlbXB0eQorICAgZGlyZWN0b3J5IGluIGl0cyBvdXRwdXQsIGV2ZW4gdGhvdWdoIEdpdCBpdHNlbGYgbmV2ZXIgZG9lcyBzby4KKyAgIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqIEFQSSBlcnJvci1wcm9vZmluZyB3aGljaCBoYXBwZW5zIHRvIGFsc28gc3F1ZWxjaCB3YXJuaW5ncyBmcm9tIEdDQy4KKworICogImdpdCBnYyIgdHJpZXMgdG8gYXZvaWQgcnVubmluZyB0d28gaW5zdGFuY2VzIGF0IHRoZSBzYW1lIHRpbWUgYnkKKyAgIHJlYWRpbmcgYW5kIHdyaXRpbmcgcGlkL2hvc3QgZnJvbSBhbmQgdG8gYSBsb2NrIGZpbGU7IGl0IHVzZWQgdG8KKyAgIHVzZSBhbiBpbmNvcnJlY3QgZnNjYW5mKCkgZm9ybWF0IHdoZW4gcmVhZGluZywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIHRlc3QgbGludGVyIGhhcyBiZWVuIHRhdWdodCB0aGF0IHdlIGRvIG5vdCBsaWtlICJlY2hvIC1lIi4KKworICogQ29kZSBjbXAuc3RkLmMgbml0cGljay4KKworICogImdpdCBkZXNjcmliZSAtLW1hdGNoIiBsZWFybmVkIHRvIHRha2UgbXVsdGlwbGUgcGF0dGVybnMgaW4gdjIuMTMKKyAgIHNlcmllcywgYnV0IHRoZSBmZWF0dXJlIGlnbm9yZWQgdGhlIHBhdHRlcm5zIGFmdGVyIHRoZSBmaXJzdCBvbmUKKyAgIGFuZCBkaWQgbm90IHdvcmsgYXQgYWxsLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBjYXQtZmlsZSAtLXRleHRjb252IiBzdGFydGVkIHNlZ2ZhdWx0aW5nIHJlY2VudGx5LCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgYnVpbHQtaW4gcGF0dGVybiB0byBkZXRlY3QgdGhlICJmdW5jdGlvbiBoZWFkZXIiIGZvciBIVE1MIGRpZAorICAgbm90IG1hdGNoIDxIMT4uLjxINj4gZWxlbWVudHMgd2l0aG91dCBhbnkgYXR0cmlidXRlcywgd2hpY2ggaGFzCisgICBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IG1haWxpbmZvIiB3YXMgbG9vc2UgaW4gZGVjb2RpbmcgcXVvdGVkIHByaW50YWJsZSBhbmQgcHJvZHVjZWQKKyAgIGdhcmJhZ2Ugd2hlbiB0aGUgdHdvIGxldHRlcnMgYWZ0ZXIgdGhlIGVxdWFsIHNpZ24gYXJlIG5vdAorICAgaGV4YWRlY2ltYWwuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgJy1YPG9wdGlvbj4nIGZvciBtZXJnZXMgd2FzIG1pc2xlYWRpbmdseQorICAgd3JpdHRlbiB0byBzdWdnZXN0IHRoYXQgIi1zIHRoZWlycyIgZXhpc3RzLCB3aGljaCBpcyBub3QgdGhlIGNhc2UuCisKKyAqIFNwZWxsIHRoZSBuYW1lIG9mIG91ciBzeXN0ZW0gYXMgIkdpdCIgaW4gdGhlIG91dHB1dCBmcm9tCisgICByZXF1ZXN0LXB1bGwgc2NyaXB0LgorCisgKiBGaXhlcyBmb3IgYSBoYW5kZnVsIG1lbW9yeSBhY2Nlc3MgaXNzdWVzIGlkZW50aWZpZWQgYnkgdmFsZ3JpbmQuCisKKyAqIEJhY2twb3J0cyBhIG1vcmFsIGVxdWl2YWxlbnQgb2YgMjAxNSBmaXggdG8gdGhlIHBvbGwgZW11bGF0aW9uIGZyb20KKyAgIHRoZSB1cHN0cmVhbSBnbnVsaWIgdG8gZml4IG9jY2FzaW9uYWwgYnJlYWthZ2VzIG9uIEhQRSBOb25TdG9wLgorCisgKiBJbiB0aGUgIi0tZm9ybWF0PS4uLiIgb3B0aW9uIG9mIHRoZSAiZ2l0IGZvci1lYWNoLXJlZiIgY29tbWFuZCAoYW5kCisgICBpdHMgZnJpZW5kcywgaS5lLiB0aGUgbGlzdGluZyBtb2RlIG9mICJnaXQgYnJhbmNoL3RhZyIpLCAiJShhdG9tOikiCisgICAoZS5nLiAiJShyZWZuYW1lOikiLCAiJShib2R5OikiIHVzZWQgdG8gZXJyb3Igb3V0LiAgSW5zdGVhZCwgdHJlYXQKKyAgIHRoZW0gYXMgaWYgdGhlIGNvbG9uIGFuZCBhbiBlbXB0eSBzdHJpbmcgdGhhdCBmb2xsb3dzIGl0IHdlcmUgbm90CisgICB0aGVyZS4KKworICogVXNlcnMgd2l0aCAiY29sb3IudWkgPSBhbHdheXMiIGluIHRoZWlyIGNvbmZpZ3VyYXRpb24gd2VyZSBicm9rZW4KKyAgIGJ5IGEgcmVjZW50IGNoYW5nZSB0aGF0IG1hZGUgcGx1bWJpbmcgY29tbWFuZHMgdG8gcGF5IGF0dGVudGlvbiB0bworICAgdGhlbSBhcyB0aGUgcGF0Y2ggY3JlYXRlZCBpbnRlcm5hbGx5IGJ5ICJnaXQgYWRkIC1wIiB3ZXJlIGNvbG9yZWQKKyAgIChoZWgpIGFuZCBtYWRlIHVudXNhYmxlLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBicmFuY2ggLU0gYSBiIiB3aGlsZSBvbiBhIGJyYW5jaCB0aGF0IGlzIGNvbXBsZXRlbHkgdW5yZWxhdGVkCisgICB0byBlaXRoZXIgYnJhbmNoIGEgb3IgYnJhbmNoIGIgbWlzYmVoYXZlZCB3aGVuIG11bHRpcGxlIHdvcmt0cmVlCisgICB3YXMgaW4gdXNlLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBmYXN0LWV4cG9ydCIgd2l0aCAtTS8tQyBvcHRpb24gaXNzdWVkICJjb3B5IiBpbnN0cnVjdGlvbiBvbiBhCisgICBwYXRoIHRoYXQgaXMgc2ltdWx0YW5lb3VzbHkgbW9kaWZpZWQsIHdoaWNoIHdhcyBpbmNvcnJlY3QuCisKKyAqIFRoZSBjaGVja3BvaW50IGNvbW1hbmQgImdpdCBmYXN0LWltcG9ydCIgZGlkIG5vdCBmbHVzaCB1cGRhdGVzIHRvCisgICByZWZzIGFuZCBtYXJrcyB1bmxlc3MgYXQgbGVhc3Qgb25lIG9iamVjdCB3YXMgY3JlYXRlZCBzaW5jZSB0aGUKKyAgIGxhc3QgY2hlY2twb2ludCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLCBhcyB0aGVzZSB0aGluZ3MgY2FuCisgICBoYXBwZW4gd2l0aG91dCBhbnkgbmV3IG9iamVjdCBnZXR0aW5nIGNyZWF0ZWQuCisKKyAqIFRoZSBzY3JpcHRzIHRvIGRyaXZlIFRyYXZpc0NJIGhhcyBiZWVuIHJlb3JnYW5pemVkIGFuZCB0aGVuIGFuCisgICBvcHRpbWl6YXRpb24gdG8gYXZvaWQgc3BlbmRpbmcgY3ljbGVzIG9uIGEgYnJhbmNoIHdob3NlIHRpcCBpcworICAgdGFnZ2VkIGhhcyBiZWVuIGltcGxlbWVudGVkLgorCisgKiAiZ2l0IGZldGNoIDx0aGVyZT4gPHNyYz46PGRzdD4iIGFsbG93cyBhbiBvYmplY3QgbmFtZSBvbiB0aGUgPHNyYz4KKyAgIHNpZGUgd2hlbiB0aGUgb3RoZXIgc2lkZSBhY2NlcHRzIHN1Y2ggYSByZXF1ZXN0IHNpbmNlIEdpdCB2Mi41LCBidXQKKyAgIHRoZSBkb2N1bWVudGF0aW9uIHdhcyBsZWZ0IHN0YWxlLgorCisgKiBBIHJlZ3Jlc3Npb24gaW4gMi4xMSB0aGF0IG1hZGUgdGhlIGNvZGUgdG8gcmVhZCB0aGUgbGlzdCBvZgorICAgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMgb3ZlcnJ1biB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgaGFzIGJlZW4KKyAgIGZpeGVkLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzc1NWE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjQudHh0CkBAIC0wLDAgKzEsNSBAQAorR2l0IHYyLjE0LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgaXMgdG8gZm9yd2FyZC1wb3J0IHRoZSBmaXhlcyBtYWRlIGluIHRoZSB2Mi4xMy43IHZlcnNpb24KK29mIEdpdC4gIFNlZSBpdHMgcmVsZWFzZSBub3RlcyBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzA2NDVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjUudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0dpdCB2Mi4xNC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGlzIHRvIGFkZHJlc3MgdGhlIHJlY2VudGx5IHJlcG9ydGVkIENWRS0yMDE4LTE3NDU2LgorCitGaXhlcyBzaW5jZSB2Mi4xNC40CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFN1Ym1vZHVsZXMnICJVUkwicyBjb21lIGZyb20gdGhlIHVudHJ1c3RlZCAuZ2l0bW9kdWxlcyBmaWxlLCBidXQKKyAgIHdlIGJsaW5kbHkgZ2F2ZSBpdCB0byAiZ2l0IGNsb25lIiB0byBjbG9uZSBzdWJtb2R1bGVzIHdoZW4gImdpdAorICAgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIHdhcyB1c2VkIHRvIGNsb25lIGEgcHJvamVjdCB0aGF0IGhhcworICAgc3VjaCBhIHN1Ym1vZHVsZS4gIFRoZSBjb2RlIGhhcyBiZWVuIGhhcmRlbmVkIHRvIHJlamVjdCBzdWNoCisgICBtYWxmb3JtZWQgVVJMcyAoZS5nLiBvbmUgdGhhdCBiZWdpbnMgd2l0aCBhIGRhc2gpLgorCitDcmVkaXQgZm9yIGZpbmRpbmcgYW5kIGZpeGluZyB0aGlzIHZ1bG5lcmFiaWxpdHkgZ29lcyB0byBqb2VybmNoZW4KK2FuZCBKZWZmIEtpbmcsIHJlc3BlY3RpdmVseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmI3YWY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjYudHh0CkBAIC0wLDAgKzEsNTQgQEAKK0dpdCB2Mi4xNC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGFkZHJlc3NlcyB0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsCitDVkUtMjAxOS0xMzQ5LCBDVkUtMjAxOS0xMzUwLCBDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLAorQ1ZFLTIwMTktMTM1MywgQ1ZFLTIwMTktMTM1NCwgYW5kIENWRS0yMDE5LTEzODcuCisKK0ZpeGVzIHNpbmNlIHYyLjE0LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQ1ZFLTIwMTktMTM0ODoKKyAgIFRoZSAtLWV4cG9ydC1tYXJrcyBvcHRpb24gb2YgZ2l0IGZhc3QtaW1wb3J0IGlzIGV4cG9zZWQgYWxzbyB2aWEKKyAgIHRoZSBpbi1zdHJlYW0gY29tbWFuZCBmZWF0dXJlIGV4cG9ydC1tYXJrcz0uLi4gYW5kIGl0IGFsbG93cworICAgb3ZlcndyaXRpbmcgYXJiaXRyYXJ5IHBhdGhzLgorCisgKiBDVkUtMjAxOS0xMzQ5OgorICAgV2hlbiBzdWJtb2R1bGVzIGFyZSBjbG9uZWQgcmVjdXJzaXZlbHksIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcworICAgR2l0IGNvdWxkIGJlIGZvb2xlZCBpbnRvIHVzaW5nIHRoZSBzYW1lIEdpdCBkaXJlY3RvcnkgdHdpY2UuIFdlIG5vdworICAgcmVxdWlyZSB0aGUgZGlyZWN0b3J5IHRvIGJlIGVtcHR5LgorCisgKiBDVkUtMjAxOS0xMzUwOgorICAgSW5jb3JyZWN0IHF1b3Rpbmcgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbGxvd2VkIHJlbW90ZSBjb2RlCisgICBleGVjdXRpb24gZHVyaW5nIGEgcmVjdXJzaXZlIGNsb25lIGluIGNvbmp1bmN0aW9uIHdpdGggU1NIIFVSTHMuCisKKyAqIENWRS0yMDE5LTEzNTE6CisgICBXaGlsZSB0aGUgb25seSBwZXJtaXR0ZWQgZHJpdmUgbGV0dGVycyBmb3IgcGh5c2ljYWwgZHJpdmVzIG9uCisgICBXaW5kb3dzIGFyZSBsZXR0ZXJzIG9mIHRoZSBVUy1FbmdsaXNoIGFscGhhYmV0LCB0aGlzIHJlc3RyaWN0aW9uCisgICBkb2VzIG5vdCBhcHBseSB0byB2aXJ0dWFsIGRyaXZlcyBhc3NpZ25lZCB2aWEgc3Vic3QgPGxldHRlcj46CisgICA8cGF0aD4uIEdpdCBtaXN0b29rIHN1Y2ggcGF0aHMgZm9yIHJlbGF0aXZlIHBhdGhzLCBhbGxvd2luZyB3cml0aW5nCisgICBvdXRzaWRlIG9mIHRoZSB3b3JrdHJlZSB3aGlsZSBjbG9uaW5nLgorCisgKiBDVkUtMjAxOS0xMzUyOgorICAgR2l0IHdhcyB1bmF3YXJlIG9mIE5URlMgQWx0ZXJuYXRlIERhdGEgU3RyZWFtcywgYWxsb3dpbmcgZmlsZXMKKyAgIGluc2lkZSB0aGUgLmdpdC8gZGlyZWN0b3J5IHRvIGJlIG92ZXJ3cml0dGVuIGR1cmluZyBhIGNsb25lLgorCisgKiBDVkUtMjAxOS0xMzUzOgorICAgV2hlbiBydW5uaW5nIEdpdCBpbiB0aGUgV2luZG93cyBTdWJzeXN0ZW0gZm9yIExpbnV4IChhbHNvIGtub3duIGFzCisgICAiV1NMIikgd2hpbGUgYWNjZXNzaW5nIGEgd29ya2luZyBkaXJlY3Rvcnkgb24gYSByZWd1bGFyIFdpbmRvd3MKKyAgIGRyaXZlLCBub25lIG9mIHRoZSBOVEZTIHByb3RlY3Rpb25zIHdlcmUgYWN0aXZlLgorCisgKiBDVkUtMjAxOS0xMzU0OgorICAgRmlsZW5hbWVzIG9uIExpbnV4L1VuaXggY2FuIGNvbnRhaW4gYmFja3NsYXNoZXMuIE9uIFdpbmRvd3MsCisgICBiYWNrc2xhc2hlcyBhcmUgZGlyZWN0b3J5IHNlcGFyYXRvcnMuIEdpdCBkaWQgbm90IHVzZSB0byByZWZ1c2UgdG8KKyAgIHdyaXRlIG91dCB0cmFja2VkIGZpbGVzIHdpdGggc3VjaCBmaWxlbmFtZXMuCisKKyAqIENWRS0yMDE5LTEzODc6CisgICBSZWN1cnNpdmUgY2xvbmVzIGFyZSBjdXJyZW50bHkgYWZmZWN0ZWQgYnkgYSB2dWxuZXJhYmlsaXR5IHRoYXQgaXMKKyAgIGNhdXNlZCBieSB0b28tbGF4IHZhbGlkYXRpb24gb2Ygc3VibW9kdWxlIG5hbWVzLCBhbGxvd2luZyB2ZXJ5CisgICB0YXJnZXRlZCBhdHRhY2tzIHZpYSByZW1vdGUgY29kZSBleGVjdXRpb24gaW4gcmVjdXJzaXZlIGNsb25lcy4KKworQ3JlZGl0IGZvciBmaW5kaW5nIHRoZXNlIHZ1bG5lcmFiaWxpdGllcyBnb2VzIHRvIE1pY3Jvc29mdCBTZWN1cml0eQorUmVzcG9uc2UgQ2VudGVyLCBpbiBwYXJ0aWN1bGFyIHRvIE5pY29sYXMgSm9seS4gVGhlIGBmYXN0LWltcG9ydGAKK2ZpeGVzIHdlcmUgcHJvdmlkZWQgYnkgSmVmZiBLaW5nLCB0aGUgb3RoZXIgZml4ZXMgYnkgSm9oYW5uZXMKK1NjaGluZGVsaW4gd2l0aCBoZWxwIGZyb20gR2FyaW1hIFNpbmdoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDc2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTUuMC50eHQKQEAgLTAsMCArMSw1MDggQEAKK0dpdCAyLjE1IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcyBhbmQgb3RoZXIgbm90YWJsZSBjaGFuZ2VzLgorCisgKiBVc2Ugb2YgYW4gZW1wdHkgc3RyaW5nIGFzIGEgcGF0aHNwZWMgZWxlbWVudCB0aGF0IGlzIHVzZWQgZm9yCisgICAnZXZlcnl0aGluZyBtYXRjaGVzJyBpcyBzdGlsbCB3YXJuZWQgYW5kIEdpdCBhc2tzIHVzZXJzIHRvIHVzZSBhCisgICBtb3JlIGV4cGxpY2l0ICcuJyBmb3IgdGhhdCBpbnN0ZWFkLiAgVGhlIGhvcGUgaXMgdGhhdCBleGlzdGluZworICAgdXNlcnMgd2lsbCBub3QgbWluZCB0aGlzIGNoYW5nZSwgYW5kIGV2ZW50dWFsbHkgdGhlIHdhcm5pbmcgY2FuIGJlCisgICB0dXJuZWQgaW50byBhIGhhcmQgZXJyb3IsIHVwZ3JhZGluZyB0aGUgZGVwcmVjYXRpb24gaW50byByZW1vdmFsIG9mCisgICB0aGlzIChtaXMpZmVhdHVyZS4gIFRoYXQgaXMgbm93IHNjaGVkdWxlZCB0byBoYXBwZW4gaW4gR2l0IHYyLjE2LAorICAgdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBhZnRlciB0aGlzIG9uZS4KKworICogR2l0IG5vdyBhdm9pZHMgYmxpbmRseSBmYWxsaW5nIGJhY2sgdG8gIi5naXQiIHdoZW4gdGhlIHNldHVwCisgICBzZXF1ZW5jZSBzYWlkIHdlIGFyZSBfbm90XyBpbiBHaXQgcmVwb3NpdG9yeS4gIEEgY29ybmVyIGNhc2UgdGhhdAorICAgaGFwcGVucyB0byB3b3JrIHJpZ2h0IG5vdyBtYXkgYmUgYnJva2VuIGJ5IGEgY2FsbCB0byBCVUcoKS4KKyAgIFdlJ3ZlIHRyaWVkIGhhcmQgdG8gbG9jYXRlIHN1Y2ggY2FzZXMgYW5kIGZpeGVkIHRoZW0sIGJ1dCB0aGVyZQorICAgbWlnaHQgc3RpbGwgYmUgY2FzZXMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZC0tYnVnIHJlcG9ydHMgYXJlCisgICBncmVhdGx5IGFwcHJlY2lhdGVkLgorCisgKiAiYnJhbmNoIC0tc2V0LXVwc3RyZWFtIiB0aGF0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gR2l0IDEuOCBoYXMKKyAgIGZpbmFsbHkgYmVlbiByZXRpcmVkLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEFuIGV4YW1wbGUgdGhhdCBpcyBub3cgb2Jzb2xldGUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGEgc2FtcGxlIGhvb2ssCisgICBhbmQgYW4gb2xkIGV4YW1wbGUgaW4gaXQgdGhhdCBhZGRlZCBhIHNpZ24tb2ZmIG1hbnVhbGx5IGhhcyBiZWVuCisgICBpbXByb3ZlZCB0byB1c2UgdGhlIGludGVycHJldC10cmFpbGVycyBjb21tYW5kLgorCisgKiBUaGUgYWR2aWNlIG1lc3NhZ2UgZ2l2ZW4gd2hlbiAiZ2l0IHJlYmFzZSIgc3RvcHMgZm9yIGNvbmZsaWN0aW5nCisgICBjaGFuZ2VzIGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiBUaGUgInJlcmVyZS10cmFpbiIgc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0aGUgIi0tb3ZlcndyaXRlIgorICAgb3B0aW9uIHRvIGFsbG93IG92ZXJ3cml0aW5nIGV4aXN0aW5nIHJlY29yZGVkIHJlc29sdXRpb25zLgorCisgKiAiZ2l0IGNvbnRhY3RzIiAoaW4gY29udHJpYi8pIG5vdyBsaXN0cyB0aGUgYWRkcmVzcyBvbiB0aGUKKyAgICJSZXBvcnRlZC1ieToiIHRyYWlsZXIgdG8gaXRzIG91dHB1dCwgaW4gYWRkaXRpb24gdG8gdGhvc2Ugb24KKyAgIFMtby1iOiBhbmQgb3RoZXIgdHJhaWxlcnMsIHRvIG1ha2UgaXQgZWFzaWVyIHRvIG5vdGlmeSAoYW5kIHRoYW5rKQorICAgdGhlIG9yaWdpbmFsIGJ1ZyByZXBvcnRlci4KKworICogImdpdCByZWJhc2UiLCBlc3BlY2lhbGx5IHdoZW4gaXQgaXMgcnVuIGJ5IG1pc3Rha2UgYW5kIGVuZHMgdXAKKyAgIHRyeWluZyB0byByZXBsYXkgbWFueSBjaGFuZ2VzLCBzcGVudCBsb25nIHRpbWUgaW4gc2lsZW5jZS4gIFRoZQorICAgY29tbWFuZCBoYXMgYmVlbiB0YXVnaHQgdG8gc2hvdyBwcm9ncmVzcyByZXBvcnQgd2hlbiBpdCBzcGVuZHMKKyAgIGxvbmcgdGltZSBwcmVwYXJpbmcgdGhlc2UgbWFueSBjaGFuZ2VzIHRvIHJlcGxheSAod2hpY2ggd291bGQgZ2l2ZQorICAgdGhlIHVzZXIgYSBjaGFuY2UgdG8gYWJvcnQgd2l0aCBeQykuCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgYSAiLS1zaWdub2ZmIiBvcHRpb24gdG8gYWRkIHRoZSBTaWduZWQtb2ZmLWJ5OgorICAgdHJhaWxlciB3aXRoIHRoZSBjb21taXR0ZXIncyBuYW1lLgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgdG8gb3B0aW9uYWxseSBwYWludCBuZXcgbGluZXMgdGhhdCBhcmUgdGhlIHNhbWUKKyAgIGFzIGRlbGV0ZWQgbGluZXMgZWxzZXdoZXJlIGRpZmZlcmVudGx5IGZyb20gZ2VudWluZWx5IG5ldyBsaW5lcy4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGxlYXJuZWQgdG8gdGFrZSB0aGUgdHJhaWxlciBzcGVjaWZpY2F0aW9ucworICAgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRoYXQgb3ZlcnJpZGVzIHRoZSBjb25maWd1cmVkIHZhbHVlcy4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGhhcyBiZWVuIHRhdWdodCBhICItLXBhcnNlIiBhbmQgYSBmZXcKKyAgIG90aGVyIG9wdGlvbnMgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHNjcmlwdHMgdG8gZ3JhYiBleGlzdGluZworICAgdHJhaWxlciBsaW5lcyBmcm9tIGEgY29tbWl0IGxvZyBtZXNzYWdlLgorCisgKiBUaGUgIi0tZm9ybWF0PSUodHJhaWxlcnMpIiBvcHRpb24gImdpdCBsb2ciIGFuZCBpdHMgZnJpZW5kcyB0YWtlCisgICBsZWFybmVkIHRvIHRha2UgdGhlICd1bmZvbGQnIGFuZCAnb25seScgbW9kaWZpZXJzIHRvIG5vcm1hbGl6ZSBpdHMKKyAgIG91dHB1dCwgZS5nLiAiZ2l0IGxvZyAtLWZvcm1hdD0lKHRyYWlsZXJzOm9ubHksdW5mb2xkKSIuCisKKyAqICJnaXR3ZWIiIHNob3dzIGEgbGluayB0byB2aXNpdCB0aGUgJ3JhdycgY29udGVudHMgb2YgYmxvYnMgaW4gdGhlCisgICBoaXN0b3J5IG92ZXJ2aWV3IHBhZ2UuCisKKyAqICJbZ2NdIHJlcmVyZVJlc29sdmVkID0gNS5kYXlzIiB1c2VkIHRvIGJlIGludmFsaWQsIGFzIHRoZSB2YXJpYWJsZQorICAgaXMgZGVmaW5lZCB0byB0YWtlIGFuIGludGVnZXIgY291bnRpbmcgdGhlIG51bWJlciBvZiBkYXlzLiAgSXQgbm93CisgICBpcyBhbGxvd2VkLgorCisgKiBUaGUgY29kZSB0byBhY3F1aXJlIGEgbG9jayBvbiBhIHJlZmVyZW5jZSAoZS5nLiB3aGlsZSBhY2NlcHRpbmcgYQorICAgcHVzaCBmcm9tIGEgY2xpZW50KSB1c2VkIHRvIGltbWVkaWF0ZWx5IGZhaWwgd2hlbiB0aGUgcmVmZXJlbmNlIGlzCisgICBhbHJlYWR5IGxvY2tlZC0tLW5vdyBpdCB3YWl0cyBmb3IgYSB2ZXJ5IHNob3J0IHdoaWxlIGFuZCByZXRyaWVzLAorICAgd2hpY2ggY2FuIG1ha2UgaXQgc3VjY2VlZCBpZiB0aGUgbG9jayBob2xkZXIgd2FzIGhvbGRpbmcgaXQgZHVyaW5nCisgICBhIHJlYWQtb25seSBvcGVyYXRpb24uCisKKyAqICJicmFuY2ggLS1zZXQtdXBzdHJlYW0iIHRoYXQgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBHaXQgMS44IGhhcworICAgZmluYWxseSBiZWVuIHJldGlyZWQuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBjYWxsIGV4dGVybmFsIHByb2Nlc3MgZmlsdGVyIGZvciBzbXVkZ2UvY2xlYW4KKyAgIG9wZXJhdGlvbiBsZWFybmVkIHRvIHNob3cgdGhlIHByb2dyZXNzIG1ldGVyLgorCisgKiAiZ2l0IHJldi1wYXJzZSIgbGVhcm5lZCAiLS1pcy1zaGFsbG93LXJlcG9zaXRvcnkiLCB0aGF0IGlzIHRvIGJlCisgICB1c2VkIGluIGEgd2F5IHNpbWlsYXIgdG8gZXhpc3RpbmcgIi0taXMtYmFyZS1yZXBvc2l0b3J5IiBhbmQKKyAgIGZyaWVuZHMuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1tYXRjaCA8cGF0dGVybj4iIGhhcyBiZWVuIHRhdWdodCB0byBwbGF5IHdlbGwgd2l0aAorICAgdGhlICItLWFsbCIgb3B0aW9uLgorCisgKiAiZ2l0IGJyYW5jaCIgbGVhcm5lZCAiLWMvLUMiIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgY29weWluZyBhbgorICAgZXhpc3Rpbmcgb25lLgorCisgKiBTb21lIGNvbW1hbmRzIChtb3N0IG5vdGFibHkgImdpdCBzdGF0dXMiKSBtYWtlcyBhbiBvcHBvcnR1bmlzdGljCisgICB1cGRhdGUgd2hlbiBwZXJmb3JtaW5nIGEgcmVhZC1vbmx5IG9wZXJhdGlvbiB0byBoZWxwIG9wdGltaXplIGxhdGVyCisgICBvcGVyYXRpb25zIGluIHRoZSBzYW1lIHJlcG9zaXRvcnkuICBUaGUgbmV3ICItLW5vLW9wdGlvbmFsLWxvY2tzIgorICAgb3B0aW9uIGNhbiBiZSBwYXNzZWQgdG8gR2l0IHRvIGRpc2FibGUgdGhlbS4KKworICogImdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9Li4uIiBsZWFybmVkIGEgbmV3IGZvcm1hdCBlbGVtZW50LAorICAgJSh0cmFpbGVycyksIHRvIHNob3cgb25seSB0aGUgY29tbWl0IGxvZyB0cmFpbGVyIHBhcnQgb2YgdGhlIGxvZworICAgbWVzc2FnZS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBDb252ZXJzaW9uIGZyb20gdWNoYXJbMjBdIHRvIHN0cnVjdCBvYmplY3RfaWQgY29udGludWVzLgorCisgKiBTdGFydCB1c2luZyBzZWxlY3RlZCBjOTkgY29uc3RydWN0cyBpbiBzbWFsbCwgc3RhYmxlIGFuZAorICAgZXNzZW50aWFsIHBhcnQgb2YgdGhlIHN5c3RlbSB0byBjYXRjaCBwZW9wbGUgd2hvIGNhcmUgYWJvdXQKKyAgIG9sZGVyIGNvbXBpbGVycyB0aGF0IGRvIG5vdCBncm9rIHRoZW0uCisKKyAqIFRoZSBmaWx0ZXItcHJvY2VzcyBpbnRlcmZhY2UgbGVhcm5lZCB0byBhbGxvdyBhIHByb2Nlc3Mgd2l0aCBsb25nCisgICBsYXRlbmN5IGdpdmUgYSAiZGVsYXllZCIgcmVzcG9uc2UuCisKKyAqIE1hbnkgdXNlcyBvZiBjb21wYXJpc29uIGNhbGxiYWNrIGZ1bmN0aW9uIHRoZSBoYXNobWFwIEFQSSB1c2VzCisgICBjYXN0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0eXBlIHdoZW4gcmVnaXN0ZXJpbmcgaXQgdG8KKyAgIGhhc2htYXBfaW5pdCgpLCB3aGljaCBkZWZlYXRzIHRoZSBjb21waWxlIHRpbWUgdHlwZSBjaGVja2luZyB3aGVuCisgICB0aGUgY2FsbGJhY2sgaW50ZXJmYWNlIGNoYW5nZXMgKGUuZy4gZ2FpbmluZyBtb3JlIHBhcmFtZXRlcnMpLgorICAgVGhlIGNhbGxiYWNrIGltcGxlbWVudGF0aW9ucyBoYXZlIGJlZW4gdXBkYXRlZCB0byB0YWtlICJ2b2lkICoiCisgICBwb2ludGVycyBhbmQgY2FzdCB0aGVtIHRvIHRoZSB0eXBlIHRoZXkgZXhwZWN0IGluc3RlYWQuCisKKyAqIEJlY2F1c2UgcmVjZW50IEdpdCBmb3IgV2luZG93cyBkbyBjb21lIHdpdGggYSByZWFsIG1zZ2ZtdCwgdGhlCisgICBidWlsZCBwcm9jZWR1cmUgZm9yIGdpdC1ndWkgaGFzIGJlZW4gdXBkYXRlZCB0byB1c2UgaXQgaW5zdGVhZCBvZiBhCisgICBoYW5kLXJvbGxlZCBzdWJzdGl0dXRlLgorCisgKiAiZ2l0IGdyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGhhcyBiZWVuIHJld29ya2VkIHRvIGdpdmUgYSBtb3JlCisgICBjb25zaXN0ZW50IG91dHB1dCBhY3Jvc3Mgc3VibW9kdWxlIGJvdW5kYXJ5IChhbmQgZG8gaXRzIHRoaW5nCisgICB3aXRob3V0IGhhdmluZyB0byBmb3JrIGEgc2VwYXJhdGUgcHJvY2VzcykuCisKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgYSBzaW5nbGUgd2hvbGUgbGluZSBpbnRvIHN0cmJ1ZgorICAgbWlzdGFrZW5seSB0cmlnZ2VyZWQgT09NIGVycm9yIGF0IEVPRiB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlICJyZWYtc3RvcmUiIGNvZGUgcmVvcmdhbml6YXRpb24gY29udGludWVzLgorCisgKiAiZ2l0IGNvbW1pdCIgdXNlZCB0byBkaXNjYXJkIHRoZSBpbmRleCBhbmQgcmUtcmVhZCBmcm9tIHRoZSBmaWxlc3lzdGVtCisgICBqdXN0IGluIGNhc2UgdGhlIHByZS1jb21taXQgaG9vayBoYXMgdXBkYXRlZCBpdCBpbiB0aGUgbWlkZGxlOyB0aGlzCisgICBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0IHdoZW4gd2Uga25vdyB3ZSBkbyBub3QgcnVuIHRoZSBwcmUtY29tbWl0IGhvb2suCisgICAobWVyZ2UgNjgwZWU1NTBkNyBrdy9jb21taXQta2VlcC1pbmRleC13aGVuLXByZS1jb21taXQtaXMtbm90LXJ1biBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZXMgdG8gdGhlIEhUVFAgbGF5ZXIgd2UgbWFkZSByZWNlbnRseSB1bmNvbmRpdGlvbmFsbHkgdXNlZAorICAgZmVhdHVyZXMgb2YgbGliQ3VybCB3aXRob3V0IGNoZWNraW5nIHRoZSBleGlzdGVuY2Ugb2YgdGhlbSwgY2F1c2luZworICAgY29tcGlsYXRpb24gZXJyb3JzLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4gIEFsc28gbWlncmF0ZSB0aGUgY29kZSB0bworICAgY2hlY2sgZmVhdHVyZSBtYWNyb3MsIG5vdCB2ZXJzaW9uIG51bWJlcnMsIHRvIGNvcGUgYmV0dGVyIHdpdGgKKyAgIGxpYkN1cmwgdGhhdCB2ZW5kb3Igc2hpcHMgd2l0aCBiYWNrcG9ydGVkIGZlYXR1cmVzLgorCisgKiBUaGUgQVBJIHRvIHN0YXJ0IHNob3dpbmcgcHJvZ3Jlc3MgbWV0ZXIgYWZ0ZXIgYSBzaG9ydCBkZWxheSBoYXMKKyAgIGJlZW4gc2ltcGxpZmllZC4KKyAgIChtZXJnZSA4YWFkZTEwN2RkIGpjL3NpbXBsaWZ5LXByb2dyZXNzIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBjbGVhbi11cCB0byBhdm9pZCBtaXhpbmcgdmFsdWVzIHJlYWQgZnJvbSB0aGUgLmdpdG1vZHVsZXMgZmlsZQorICAgYW5kIHZhbHVlcyByZWFkIGZyb20gdGhlIC5naXQvY29uZmlnIGZpbGUuCisKKyAqIFdlIHVzZWQgdG8gc3BlbmQgbW9yZSB0aGFuIG5lY2Vzc2FyeSBjeWNsZXMgYWxsb2NhdGluZyBhbmQgZnJlZWluZworICAgcGllY2Ugb2YgbWVtb3J5IHdoaWxlIHdyaXRpbmcgZWFjaCBpbmRleCBlbnRyeSBvdXQuICBUaGlzIGhhcyBiZWVuCisgICBvcHRpbWl6ZWQuCisKKyAqIFBsYXRmb3JtcyB0aGF0IHNoaXAgd2l0aCBhIHNlcGFyYXRlIHNoYTEgd2l0aCBjb2xsaXNpb24gZGV0ZWN0aW9uCisgICBsaWJyYXJ5IGNhbiBsaW5rIHRvIGl0IGluc3RlYWQgb2YgdXNpbmcgdGhlIGNvcHkgd2Ugc2hpcCBhcyBwYXJ0IG9mCisgICBvdXIgc291cmNlIHRyZWUuCisKKyAqIENvZGUgYXJvdW5kICJub3RlcyIgaGF2ZSBiZWVuIGNsZWFuZWQgdXAuCisgICAobWVyZ2UgMzk2NDI4MTUyNCBtaC9ub3Rlcy1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGxvbmctc3RhbmRpbmcgcnVsZSB0aGF0IGFuIGluLWNvcmUgbG9ja2ZpbGUgaW5zdGFuY2UsIG9uY2UgaXQKKyAgIGlzIHVzZWQsIG11c3Qgbm90IGJlIGZyZWVkLCBoYXMgYmVlbiBsaWZ0ZWQgYW5kIHRoZSBsb2NrZmlsZSBhbmQKKyAgIHRlbXBmaWxlIEFQSXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgcHJvZ3JhbW1pbmcKKyAgIGVycm9ycy4KKworICogT3VyIGhhc2htYXAgaW1wbGVtZW50YXRpb24gaW4gaGFzaG1hcC5bY2hdIGlzIG5vdCB0aHJlYWQtc2FmZSB3aGVuCisgICBhZGRpbmcgYSBuZXcgaXRlbSBuZWVkcyB0byBleHBhbmQgdGhlIGhhc2h0YWJsZSBieSByZWhhc2hpbmc7IGFkZAorICAgYW4gQVBJIHRvIGRpc2FibGUgdGhlIGF1dG9tYXRpYyByZWhhc2hpbmcgdG8gd29yayBpdCBhcm91bmQuCisKKyAqIE1hbnkgb2Ygb3VyIHByb2dyYW1zIGNvbnNpZGVyIHRoYXQgaXQgaXMgT0sgdG8gcmVsZWFzZSBkeW5hbWljCisgICBzdG9yYWdlIHRoYXQgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBsaWZlIG9mIHRoZSBwcm9ncmFtIGJ5IHNpbXBseQorICAgZXhpdGluZywgYnV0IHRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIGxlYWsgZGV0ZWN0aW9uIHRvb2xzIHRvIGF2b2lkCisgICByZXBvcnRpbmcgZmFsc2UgcG9zaXRpdmVzLiAgUGx1ZyBtYW55IGV4aXN0aW5nIGxlYWtzIGFuZCBpbnRyb2R1Y2UKKyAgIGEgbWVjaGFuaXNtIGZvciBkZXZlbG9wZXJzIHRvIG1hcmsgdGhhdCB0aGUgcmVnaW9uIG9mIG1lbW9yeQorICAgcG9pbnRlZCBieSBhIHBvaW50ZXIgaXMgbm90IGxvc3QvbGVha2luZyB0byBoZWxwIHRoZXNlIHRvb2xzLgorCisgKiBBcyAiZ2l0IGNvbW1pdCIgdG8gY29uY2x1ZGUgYSBjb25mbGljdGVkICJnaXQgbWVyZ2UiIGhvbm9ycyB0aGUKKyAgIGNvbW1pdC1tc2cgaG9vaywgImdpdCBtZXJnZSIgdGhhdCByZWNvcmRzIGEgbWVyZ2UgY29tbWl0IHRoYXQKKyAgIGNsZWFubHkgYXV0by1tZXJnZXMgc2hvdWxkLCBidXQgaXQgZGlkbid0LgorCisgKiBUaGUgY29kZXBhdGggZm9yICJnaXQgbWVyZ2UtcmVjdXJzaXZlIiBoYXMgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBNYW55IGxlYWtzIG9mIHN0cmJ1ZiBoYXZlIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBoYXMgb3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHJvdG9jb2wgYW5kIGFsc28KKyAgIGNhbiB1c2UgbW9yZSByZWNlbnQgbGliQ3VybCB3aXRoIHRoZSBpbWFwIHByb3RvY29sIHN1cHBvcnQuICBVcGRhdGUKKyAgIHRoZSBsYXR0ZXIgc28gdGhhdCBpdCBjYW4gdXNlIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSwgYW5kIHRoZW4KKyAgIG1ha2UgaXQgdGhlIGRlZmF1bHQgb3B0aW9uIHRvIHVzZSwgc28gdGhhdCB3ZSBjYW4gZXZlbnR1YWxseQorICAgZGVwcmVjYXRlIGFuZCByZW1vdmUgdGhlIGZvcm1lci4KKworICogIm1ha2Ugc3R5bGUiIHJ1bnMgZ2l0LWNsYW5nLWZvcm1hdCB0byBoZWxwIGRldmVsb3BlcnMgYnkgcG9pbnRpbmcKKyAgIG91dCBjb2Rpbmcgc3R5bGUgaXNzdWVzLgorCisgKiBBIHRlc3QgdG8gZGVtb25zdHJhdGUgImdpdCBtdiIgZmFpbGluZyB0byBhZGp1c3QgbmVzdGVkIHN1Ym1vZHVsZXMKKyAgIGhhcyBiZWVuIGFkZGVkLgorICAgKG1lcmdlIGM1MTQxNjdkZjIgaHYvbXYtbmVzdGVkLXN1Ym1vZHVsZXMtdGVzdCBsYXRlciB0byBtYWludCkuCisKKyAqIE9uIEN5Z3dpbiwgInVsaW1pdCAtcyIgZG9lcyBub3QgcmVwb3J0IGZhaWx1cmUgYnV0IGl0IGRvZXMgbm90IHdvcmsKKyAgIGF0IGFsbCwgd2hpY2ggY2F1c2VzIGFuIHVuZXhwZWN0ZWQgc3VjY2VzcyBvZiBzb21lIHRlc3RzIHRoYXQKKyAgIGV4cGVjdCBmYWlsdXJlcyB1bmRlciBhIGxpbWl0ZWQgc3RhY2sgc2l0dWF0aW9uLiAgVGhpcyBoYXMgYmVlbgorICAgZml4ZWQuCisKKyAqIE1hbnkgY29kZXBhdGhzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHNxdWVsY2ggLVdpbXBsaWNpdC1mYWxsdGhyb3VnaAorICAgd2FybmluZ3MgZnJvbSBHY2MgNyAod2hpY2ggaXMgYSBnb29kIGNvZGUgaHlnaWVuZSkuCisKKyAqIEFkZCBhIGhlbHBlciBmb3IgRExMIGxvYWRpbmcgaW4gYW50aWNpcGF0aW9uIGZvciBpdHMgbmVlZCBpbiBhCisgICBmdXR1cmUgdG9waWMgUlNOLgorCisgKiAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQiLCB3aGVuIG5vdGljaW5nIHRoYXQgYSBkaXJlY3Rvcnkgd2l0aG91dCBhbnkKKyAgIHRyYWNrZWQgcGF0aCBpcyBpZ25vcmVkLCBzdGlsbCBlbnVtZXJhdGVkIGFsbCB0aGUgaWdub3JlZCBwYXRocyBpbgorICAgdGhlIGRpcmVjdG9yeSwgd2hpY2ggaXMgdW5uZWNlc3NhcnkuICBUaGUgY29kZXBhdGggaGFzIGJlZW4KKyAgIG9wdGltaXplZCB0byBhdm9pZCB0aGlzIG92ZXJoZWFkLgorCisgKiBUaGUgZmluYWwgYmF0Y2ggdG8gImdpdCByZWJhc2UgLWkiIHVwZGF0ZXMgdG8gbW92ZSBtb3JlIGNvZGUgZnJvbQorICAgdGhlIHNoZWxsIHNjcmlwdCB0byBDIGhhcyBiZWVuIG1lcmdlZC4KKworICogT3BlcmF0aW9ucyB0aGF0IGRvIG5vdCB0b3VjaCAobWFqb3JpdHkgb2YpIHBhY2tlZCByZWZzIGhhdmUgYmVlbgorICAgb3B0aW1pemVkIGJ5IG1ha2luZyBhY2Nlc3NlcyB0byBwYWNrZWQtcmVmcyBmaWxlIGxhenk7IHdlIG5vIGxvbmdlcgorICAgcHJlLXBhcnNlIGV2ZXJ5dGhpbmcsIGFuZCBhbiBhY2Nlc3MgdG8gYSBzaW5nbGUgcmVmIGluIHRoZQorICAgcGFja2VkLXJlZnMgZG9lcyBub3QgdG91Y2ggbWFqb3JpdHkgb2YgaXJyZWxldmFudCByZWZzLCBlaXRoZXIuCisKKyAqIEFkZCBjb21tZW50IHRvIGNsYXJpZnkgdGhhdCB0aGUgc3R5bGUgZmlsZSBpcyBtZWFudCB0byBiZSB1c2VkIHdpdGgKKyAgIGNsYW5nLTUgYW5kIHRoZSBydWxlcyBhcmUgc3RpbGwgd29yayBpbiBwcm9ncmVzcy4KKworICogTWFueSB2YXJpYWJsZXMgdGhhdCBwb2ludHMgYXQgYSByZWdpb24gb2YgbWVtb3J5IHRoYXQgd2lsbCBsaXZlCisgICB0aHJvdWdob3V0IHRoZSBsaWZlIG9mIHRoZSBwcm9ncmFtIGhhdmUgYmVlbiBtYXJrZWQgd2l0aCBVTkxFQUsKKyAgIG1hcmtlciB0byBoZWxwIHRoZSBsZWFrIGNoZWNrZXJzIGNvbmNlbnRyYXRlIG9uIHJlYWwgbGVha3MuLgorCisgKiBQbGFucyBmb3Igd2VhbmluZyB1cyBvZmYgb2YgU0hBLTEgaGFzIGJlZW4gZG9jdW1lbnRlZC4KKworICogQSBuZXcgIm9pZG1hcCIgQVBJIGhhcyBiZWVuIGludHJvZHVjZWQgYW5kIG9pZHNldCBBUEkgaGFzIGJlZW4KKyAgIHJld3JpdHRlbiB0byB1c2UgaXQuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuMTQKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICIlQyhjb2xvciBuYW1lKSIgaW4gdGhlIHByZXR0eSBwcmludCBmb3JtYXQgYWx3YXlzIHByb2R1Y2VkIEFOU0kKKyAgIGNvbG9yIGVzY2FwZSBjb2Rlcywgd2hpY2ggd2FzIGFuIGVhcmx5IGRlc2lnbiBtaXN0YWtlLiAgVGhleSBub3cKKyAgIGhvbm9yIHRoZSBjb25maWd1cmF0aW9uIChlLmcuICJjb2xvci51aSA9IG5ldmVyIikgYW5kIGFsc28gdHR5LW5lc3MKKyAgIG9mIHRoZSBvdXRwdXQgbWVkaXVtLgorCisgKiBUaGUgaHR0cC57c3Nsa2V5LHNzbENlcnR9IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSB0byBiZQorICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXRobmFtZSB0aGF0IGhvbm9ycyAiflt1c2VybmFtZV0vIiBwcmVmaXgsIGJ1dAorICAgd2VyZW4ndCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIE51bWVyb3VzIGJ1Z3MgaW4gd2Fsa2luZyBvZiByZWZsb2dzIHZpYSAibG9nIC1nIiBhbmQgZnJpZW5kcyBoYXZlCisgICBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNvbW1pdCIgd2hlbiBzZWVpbmcgYW4gdG90YWxseSBlbXB0eSBtZXNzYWdlIHNhaWQgInlvdSBkaWQgbm90CisgICBlZGl0IHRoZSBtZXNzYWdlIiwgd2hpY2ggaXMgY2xlYXJseSB3cm9uZy4gIFRoZSBtZXNzYWdlIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFdoZW4gYSBkaXJlY3RvcnkgaXMgbm90IHJlYWRhYmxlLCAiZ2l0d2ViIiBmYWlscyB0byBidWlsZCB0aGUKKyAgIHByb2plY3QgbGlzdC4gIFdvcmsgdGhpcyBhcm91bmQgYnkgc2tpcHBpbmcgc3VjaCBhIGRpcmVjdG9yeS4KKworICogU29tZSB2ZXJzaW9ucyBvZiBHbnVQRyBmYWlscyB0byBraWxsIGdwZy1hZ2VudCBpdCBhdXRvLXNwYXduZWQKKyAgIGFuZCBzdWNoIGEgbGVmdC1vdmVyIGFnZW50IGNhbiBpbnRlcmZlcmUgd2l0aCBhIHRlc3QuICBXb3JrIGl0CisgICBhcm91bmQgYnkgYXR0ZW1wdGluZyB0byBraWxsIG9uZSBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgdGVzdC4KKworICogQSByZWNlbnRseSBhZGRlZCB0ZXN0IGZvciB0aGUgImNyZWRlbnRpYWwtY2FjaGUiIGhlbHBlciByZXZlYWxlZAorICAgdGhhdCBFT0YgZGV0ZWN0aW9uIGRvbmUgYXJvdW5kIHRoZSB0aW1lIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBjYWNoZQorICAgZGFlbW9uIGlzIHRvcm4gZG93biB3ZXJlIGZsYWt5LiAgVGhpcyB3YXMgZml4ZWQgYnkgcmVhY3RpbmcgdG8KKyAgIEVDT05OUkVTRVQgYW5kIGJlaGF2aW5nIGFzIGlmIHdlIGdvdCBhbiBFT0YuCisKKyAqICJnaXQgbG9nIC0tdGFnPW5vLXN1Y2gtdGFnIiBzaG93ZWQgbG9nIHN0YXJ0aW5nIGZyb20gSEVBRCwgd2hpY2gKKyAgIGhhcyBiZWVuIGZpeGVkLS0taXQgbm93IHNob3dzIG5vdGhpbmcuCisKKyAqIFRoZSAidGFnLnBhZ2VyIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdhcyB1c2VsZXNzIGZvciB0aG9zZSB3aG8KKyAgIGFjdHVhbGx5IGNyZWF0ZSB0YWcgb2JqZWN0cywgYXMgaXQgaW50ZXJmZXJlZCB3aXRoIHRoZSB1c2Ugb2YgYW4KKyAgIGVkaXRvci4gIEEgbmV3IG1lY2hhbmlzbSBoYXMgYmVlbiBpbnRyb2R1Y2VkIGZvciBjb21tYW5kcyB0byBlbmFibGUKKyAgIHBhZ2VyIGRlcGVuZGluZyBvbiB3aGF0IG9wZXJhdGlvbiBpcyBiZWluZyBjYXJyaWVkIG91dCB0byBmaXggdGhpcywKKyAgIGFuZCB0aGVuICJnaXQgdGFnIC1sIiBpcyBtYWRlIHRvIHJ1biBwYWdlciBieSBkZWZhdWx0LgorCisgKiAiZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgJHRoZXJlIEhFQUQ6JHRhcmdldCIgd2FzIG5vdAorICAgcHJvcGFnYXRlZCBkb3duIHRvIHRoZSBzdWJtb2R1bGVzLCBidXQgbm93IGl0IGlzLgorCisgKiBDb21tYW5kcyBsaWtlICJnaXQgcmViYXNlIiBhY2NlcHRlZCB0aGUgLS1yZXJlcmUtYXV0b3VwZGF0ZSBvcHRpb24KKyAgIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYnV0IGRpZCBub3QgYWx3YXlzIHVzZSBpdC4gIFRoaXMgaGFzIGJlZW4KKyAgIGZpeGVkLgorCisgKiAiZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tcXVpZXQiIGRpZCBub3QgcGFzcyB0aGUgcXVpZXQKKyAgIG9wdGlvbiBkb3duIHRvIHN1Ym1vZHVsZXMuCisKKyAqIFRlc3QgcG9ydGFiaWxpdHkgZml4IGZvciBPQlNELgorCisgKiBQb3J0YWJpbGl0eSBmaXggZm9yIE9CU0QuCisKKyAqICJnaXQgYW0gLXMiIGhhcyBiZWVuIHRhdWdodCB0aGF0IHNvbWUgaW5wdXQgbWF5IGVuZCB3aXRoIGEgdHJhaWxlcgorICAgYmxvY2sgdGhhdCBpcyBub3QgU2lnbmVkLW9mZi1ieTogYW5kIGl0IHNob3VsZCByZWZyYWluIGZyb20gYWRkaW5nCisgICBhbiBleHRyYSBibGFuayBsaW5lIGJlZm9yZSBhZGRpbmcgYSBuZXcgc2lnbi1vZmYgaW4gc3VjaCBhIGNhc2UuCisKKyAqICJnaXQgc3ZuIiB1c2VkIHdpdGggIi0tbG9jYWx0aW1lIiBvcHRpb24gZGlkIG5vdCBjb21wdXRlIHRoZSB0egorICAgb2Zmc2V0IGZvciB0aGUgdGltZXN0YW1wIGluIHF1ZXN0aW9uIGFuZCBpbnN0ZWFkIGFsd2F5cyB1c2VkIHRoZQorICAgY3VycmVudCB0aW1lLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIE1lbW9yeSBsZWFrIGluIGFuIGVycm9yIGNvZGVwYXRoIGhhcyBiZWVuIHBsdWdnZWQuCisKKyAqICJnaXQgc3Rhc2ggLXUiIHVzZWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXR0ZWQgdmVyc2lvbiBvZiB0aGUKKyAgICIuZ2l0aWdub3JlIiBmaWxlIHRvIGRlY2lkZSB3aGljaCBwYXRocyBhcmUgaWdub3JlZCwgZXZlbiB3aGVuIHRoZQorICAgZmlsZSBoYXMgbG9jYWwgY2hhbmdlcy4gIFRoZSBjb21tYW5kIGhhcyBiZWVuIHRhdWdodCB0byBpbnN0ZWFkIHVzZQorICAgdGhlIGxvY2FsbHkgbW9kaWZpZWQgY29udGVudHMuCisKKyAqIGJhc2ggNC40IG9yIG5ld2VyIGdhdmUgYSB3YXJuaW5nIG9uIE5VTCBieXRlIGluIGNvbW1hbmQKKyAgIHN1YnN0aXR1dGlvbiBkb25lIGluICJnaXQgc3Rhc2giOyB0aGlzIGhhcyBiZWVuIHNxdWVsY2hlZC4KKworICogImdpdCBncmVwIC1MIiBhbmQgImdpdCBncmVwIC0tcXVpZXQgLUwiIHJlcG9ydGVkIGRpZmZlcmVudCBleGl0CisgICBjb2RlczsgdGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFdoZW4gaGFuZHNoYWtlIHdpdGggYSBzdWJwcm9jZXNzIGZpbHRlciBub3RpY2VzIHRoYXQgdGhlIHByb2Nlc3MKKyAgIGFza2VkIGZvciBhbiB1bmtub3duIGNhcGFiaWxpdHksIEdpdCBkaWQgbm90IHJlcG9ydCB3aGF0IHByb2dyYW0KKyAgIHRoZSBvZmZlbmRpbmcgc3VicHJvY2VzcyB3YXMgcnVubmluZy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGFwcGx5IiB0aGF0IGlzIHVzZWQgYXMgYSBiZXR0ZXIgInBhdGNoIC1wMSIgZmFpbGVkIHRvIGFwcGx5IGEKKyAgIHRha2VuIGZyb20gYSBmaWxlIHdpdGggQ1JMRiBsaW5lIGVuZGluZ3MgdG8gYSBmaWxlIHdpdGggQ1JMRiBsaW5lCisgICBlbmRpbmdzLiAgVGhlIHJvb3QgY2F1c2Ugd2FzIGJlY2F1c2UgaXQgbWlzdXNlZCBjb252ZXJ0X3RvX2dpdCgpCisgICB0aGF0IHRyaWVkIHRvIGRvICJzYWZlLWNybGYiIHByb2Nlc3NpbmcgYnkgbG9va2luZyBhdCB0aGUgaW5kZXgKKyAgIGVudHJ5IGF0IHRoZSBzYW1lIHBhdGgsIHdoaWNoIGlzIGEgbm9uc2Vuc2UtLS1pbiB0aGF0IG1vZGUsICJhcHBseSIKKyAgIGlzIG5vdCB3b3JraW5nIG9uIHRoZSBkYXRhIGluIChvciBkZXJpdmVkIGZyb20pIHRoZSBpbmRleCBhdCBhbGwuCisgICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiBLaWxsaW5nICJnaXQgbWVyZ2UgLS1lZGl0IiBiZWZvcmUgdGhlIGVkaXRvciByZXR1cm5zIGNvbnRyb2wgbGVmdAorICAgdGhlIHJlcG9zaXRvcnkgaW4gYSBzdGF0ZSB3aXRoIE1FUkdFX01TRyBidXQgd2l0aG91dCBNRVJHRV9IRUFELAorICAgd2hpY2ggaW5jb3JyZWN0bHkgdGVsbHMgdGhlIHN1YnNlcXVlbnQgImdpdCBjb21taXQiIHRoYXQgdGhlcmUgd2FzCisgICBhIHNxdWFzaCBtZXJnZSBpbiBwcm9ncmVzcy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgYXJjaGl2ZSIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCBwYXRoc3BlY3MgYW5kIHRoZQorICAgZXhwb3J0LWlnbm9yZSBhdHRyaWJ1dGUuCisKKyAqIEluIGFkZGl0aW9uIHRvICJjYzogPGFAZGQucmUuc3M+ICMgY3J1ZnQiLCAiY2M6IGFAZGQucmUuc3MgIyBjcnVmdCIKKyAgIHdhcyB0YXVnaHQgdG8gImdpdCBzZW5kLWVtYWlsIiBhcyBhIHZhbGlkIHdheSB0byB0ZWxsIGl0IHRoYXQgaXQKKyAgIG5lZWRzIHRvIGFsc28gc2VuZCBhIGNhcmJvbiBjb3B5IHRvIDxhQGRkLnJlLnNzPiBpbiB0aGUgdHJhaWxlcgorICAgc2VjdGlvbi4KKworICogImdpdCBicmFuY2ggLU0gYSBiIiB3aGlsZSBvbiBhIGJyYW5jaCB0aGF0IGlzIGNvbXBsZXRlbHkgdW5yZWxhdGVkCisgICB0byBlaXRoZXIgYnJhbmNoIGEgb3IgYnJhbmNoIGIgbWlzYmVoYXZlZCB3aGVuIG11bHRpcGxlIHdvcmt0cmVlCisgICB3YXMgaW4gdXNlLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSAzMTgyNGQxODBkIG5kL3dvcmt0cmVlLWtpbGwtcGFyc2UtcmVmIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBnYyIgYW5kIGZyaWVuZHMgd2hlbiBtdWx0aXBsZSB3b3JrdHJlZXMgYXJlIHVzZWQgb2ZmIG9mIGEKKyAgIHNpbmdsZSByZXBvc2l0b3J5IGRpZCBub3QgY29uc2lkZXIgdGhlIGluZGV4IGFuZCBwZXItd29ya3RyZWUgcmVmcworICAgb2Ygb3RoZXIgd29ya3RyZWVzIGFzIHRoZSByb290IGZvciByZWFjaGFiaWxpdHkgdHJhdmVyc2FsLCBtYWtpbmcKKyAgIG9iamVjdHMgdGhhdCBhcmUgaW4gdXNlIG9ubHkgaW4gb3RoZXIgd29ya3RyZWVzIHRvIGJlIHN1YmplY3QgdG8KKyAgIGdhcmJhZ2UgY29sbGVjdGlvbi4KKworICogQSByZWdyZXNzaW9uIHRvICJnaXRrIC0tYmlzZWN0IiBieSBhIHJlY2VudCB1cGRhdGUgaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgLWMgc3VibW9kdWxlLnJlY3Vyc2U9eWVzIHB1bGwiIGRpZCBub3Qgd29yayBhcyBpZiB0aGUKKyAgICItLXJlY3Vyc2Utc3VibW9kdWxlcyIgb3B0aW9uIHdhcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisgICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVW5saWtlICJnaXQgY29tbWl0LXRyZWUgPCBmaWxlIiwgImdpdCBjb21taXQtdHJlZSAtRiBmaWxlIiBkaWQgbm90CisgICBwYXNzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSB2ZXJiYXRpbSBhbmQgaW5zdGVhZCBjb21wbGV0ZWQgYW4KKyAgIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kLCBpZiBleGlzdHMuICBUaGUgbGF0dGVyIGhhcyBiZWVuIHVwZGF0ZWQKKyAgIHRvIG1hdGNoIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGZvcm1lci4KKworICogTWFueSBjb2RlcGF0aHMgZGlkIG5vdCBkaWFnbm9zZSB3cml0ZSBmYWlsdXJlcyBjb3JyZWN0bHkgd2hlbiBkaXNrcworICAgZ28gZnVsbCwgZHVlIHRvIHRoZWlyIG1pc3VzZSBvZiB3cml0ZV9pbl9mdWxsKCkgaGVscGVyIGZ1bmN0aW9uLAorICAgd2hpY2ggaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBmNDhlY2QzOGNiIGprL3dyaXRlLWluLWZ1bGwtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBoZWxwIGNvIiBub3cgc2F5cyAiY28gaXMgYWxpYXNlZCB0byAuLi4iLCBub3QgImdpdCBjbyBpcyIuCisgICAobWVyZ2UgYjNhODA3NmUwZCBrcy9oZWxwLWFsaWFzLWxhYmVsIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhcmNoaXZlIiwgZXNwZWNpYWxseSB3aGVuIHVzZWQgd2l0aCBwYXRoc3BlYywgc3RvcmVkIGFuIGVtcHR5CisgICBkaXJlY3RvcnkgaW4gaXRzIG91dHB1dCwgZXZlbiB0aG91Z2ggR2l0IGl0c2VsZiBuZXZlciBkb2VzIHNvLgorICAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogQVBJIGVycm9yLXByb29maW5nIHdoaWNoIGhhcHBlbnMgdG8gYWxzbyBzcXVlbGNoIHdhcm5pbmdzIGZyb20gR0NDLgorCisgKiBUaGUgZXhwbGFuYXRpb24gb2YgdGhlIGN1dC1saW5lIGluIHRoZSBjb21taXQgbG9nIGVkaXRvciBoYXMgYmVlbgorICAgc2xpZ2h0bHkgdHdlYWtlZC4KKyAgIChtZXJnZSA4YzRiMWEzNTkzIGtzL2NvbW1pdC1kby1ub3QtdG91Y2gtY3V0LWxpbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGdjIiB0cmllcyB0byBhdm9pZCBydW5uaW5nIHR3byBpbnN0YW5jZXMgYXQgdGhlIHNhbWUgdGltZSBieQorICAgcmVhZGluZyBhbmQgd3JpdGluZyBwaWQvaG9zdCBmcm9tIGFuZCB0byBhIGxvY2sgZmlsZTsgaXQgdXNlZCB0bworICAgdXNlIGFuIGluY29ycmVjdCBmc2NhbmYoKSBmb3JtYXQgd2hlbiByZWFkaW5nLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBUaGUgc2NyaXB0cyB0byBkcml2ZSBUcmF2aXNDSSBoYXMgYmVlbiByZW9yZ2FuaXplZCBhbmQgdGhlbiBhbgorICAgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHNwZW5kaW5nIGN5Y2xlcyBvbiBhIGJyYW5jaCB3aG9zZSB0aXAgaXMKKyAgIHRhZ2dlZCBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKyAgIChtZXJnZSA4Mzc2ZWI0YThmIGxzL3RyYXZpcy1zY3JpcHRpZnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGVzdCBsaW50ZXIgaGFzIGJlZW4gdGF1Z2h0IHRoYXQgd2UgZG8gbm90IGxpa2UgImVjaG8gLWUiLgorCisgKiBDb2RlIGNtcC5zdGQuYyBuaXRwaWNrLgorCisgKiBBIHJlZ3Jlc3Npb24gZml4IGZvciAyLjExIHRoYXQgbWFkZSB0aGUgY29kZSB0byByZWFkIHRoZSBsaXN0IG9mCisgICBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcyBvdmVycnVuIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKyAgIChtZXJnZSBmMGY3YmViZWY3IGprL2luZm8tYWx0ZXJuYXRlcy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tbWF0Y2giIGxlYXJuZWQgdG8gdGFrZSBtdWx0aXBsZSBwYXR0ZXJucyBpbiB2Mi4xMworICAgc2VyaWVzLCBidXQgdGhlIGZlYXR1cmUgaWdub3JlZCB0aGUgcGF0dGVybnMgYWZ0ZXIgdGhlIGZpcnN0IG9uZQorICAgYW5kIGRpZCBub3Qgd29yayBhdCBhbGwuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGZpbHRlci1icmFuY2giIGNhbm5vdCByZXByb2R1Y2UgYSBoaXN0b3J5IHdpdGggYSB0YWcgd2l0aG91dAorICAgdGhlIHRhZ2dlciBmaWVsZCwgd2hpY2ggb25seSBhbmNpZW50IHZlcnNpb25zIG9mIEdpdCBhbGxvd2VkIHRvIGJlCisgICBjcmVhdGVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYjJjMWNhNmI0YiBpYy9maXgtZmlsdGVyLWJyYW5jaC10by1oYW5kbGUtdGFnLXdpdGhvdXQtdGFnZ2VyIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjYXQtZmlsZSAtLXRleHRjb252IiBzdGFydGVkIHNlZ2ZhdWx0aW5nIHJlY2VudGx5LCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgYnVpbHQtaW4gcGF0dGVybiB0byBkZXRlY3QgdGhlICJmdW5jdGlvbiBoZWFkZXIiIGZvciBIVE1MIGRpZAorICAgbm90IG1hdGNoIDxIMT4uLjxINj4gZWxlbWVudHMgd2l0aG91dCBhbnkgYXR0cmlidXRlcywgd2hpY2ggaGFzCisgICBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IG1haWxpbmZvIiB3YXMgbG9vc2UgaW4gZGVjb2RpbmcgcXVvdGVkIHByaW50YWJsZSBhbmQgcHJvZHVjZWQKKyAgIGdhcmJhZ2Ugd2hlbiB0aGUgdHdvIGxldHRlcnMgYWZ0ZXIgdGhlIGVxdWFsIHNpZ24gYXJlIG5vdAorICAgaGV4YWRlY2ltYWwuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgbWFjaGluZXJ5IHRvIGNyZWF0ZSB4ZGVsdGEgdXNlZCBpbiBwYWNrIGZpbGVzIHJlY2VpdmVkIHRoZQorICAgc2l6ZXMgb2YgdGhlIGRhdGEgaW4gc2l6ZV90LCBidXQgbG9zdCB0aGUgaGlnaGVyIGJpdHMgb2YgdGhlbSBieQorICAgc3RvcmluZyB0aGVtIGluICJ1bnNpZ25lZCBpbnQiIGR1cmluZyB0aGUgY29tcHV0YXRpb24sIHdoaWNoIGlzCisgICBmaXhlZC4KKworICogVGhlIGRlbHRhIGZvcm1hdCB1c2VkIGluIHRoZSBwYWNrZmlsZSBjYW5ub3QgcmVmZXJlbmNlIGRhdGEgYXQKKyAgIG9mZnNldCBsYXJnZXIgdGhhbiB3aGF0IGNhbiBiZSBleHByZXNzZWQgaW4gNC1ieXRlLCBidXQgdGhlCisgICBnZW5lcmF0b3IgZm9yIHRoZSBkYXRhIGZhaWxlZCB0byBtYWtlIHN1cmUgdGhlIG9mZnNldCBkb2VzIG5vdAorICAgb3ZlcmZsb3cuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGRvY3VtZW50YXRpb24gZm9yICctWDxvcHRpb24+JyBmb3IgbWVyZ2VzIHdhcyBtaXNsZWFkaW5nbHkKKyAgIHdyaXR0ZW4gdG8gc3VnZ2VzdCB0aGF0ICItcyB0aGVpcnMiIGV4aXN0cywgd2hpY2ggaXMgbm90IHRoZSBjYXNlLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiB3aXRoIC1NLy1DIG9wdGlvbiBpc3N1ZWQgImNvcHkiIGluc3RydWN0aW9uIG9uIGEKKyAgIHBhdGggdGhhdCBpcyBzaW11bHRhbmVvdXNseSBtb2RpZmllZCwgd2hpY2ggd2FzIGluY29ycmVjdC4KKyAgIChtZXJnZSBiM2U4Y2E4OWNmIGp0L2Zhc3QtZXhwb3J0LWNvcHktbW9kaWZ5LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIE1hbnkgY29kZXBhdGhzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHNxdWVsY2ggLVdzaWduLWNvbXBhcmUKKyAgIHdhcm5pbmdzLgorICAgKG1lcmdlIDA3MWJjYWFiNjQgcmovbm8tc2lnbi1jb21wYXJlIGxhdGVyIHRvIG1haW50KS4KKworICogTWVtb3J5IGxlYWtzIGluIHZhcmlvdXMgY29kZXBhdGhzIGhhdmUgYmVlbiBwbHVnZ2VkLgorICAgKG1lcmdlIDRkMDFhN2ZhNjUgbWEvbGVha3BsdWdzIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHZlcnNpb25zIG9mICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQiIGRpZCBub3QgcGFyc2UgdGhlCisgICBvcHRpb24gc3BlY2lmaWNhdGlvbiB0aGF0IGRvZXMgbm90IGhhdmUgdGhlIG9wdGlvbmFsIGZsYWdzICgqPT8hKQorICAgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYTYzMDRmYTRjMiBiYy9yZXYtcGFyc2UtcGFyc2VvcHQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNoZWNrcG9pbnQgY29tbWFuZCAiZ2l0IGZhc3QtaW1wb3J0IiBkaWQgbm90IGZsdXNoIHVwZGF0ZXMgdG8KKyAgIHJlZnMgYW5kIG1hcmtzIHVubGVzcyBhdCBsZWFzdCBvbmUgb2JqZWN0IHdhcyBjcmVhdGVkIHNpbmNlIHRoZQorICAgbGFzdCBjaGVja3BvaW50LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQsIGFzIHRoZXNlIHRoaW5ncyBjYW4KKyAgIGhhcHBlbiB3aXRob3V0IGFueSBuZXcgb2JqZWN0IGdldHRpbmcgY3JlYXRlZC4KKyAgIChtZXJnZSAzMGUyMTVhNjVjIGVyL2Zhc3QtaW1wb3J0LWR1bXAtcmVmcy1vbi1jaGVja3BvaW50IGxhdGVyIHRvIG1haW50KS4KKworICogU3BlbGwgdGhlIG5hbWUgb2Ygb3VyIHN5c3RlbSBhcyAiR2l0IiBpbiB0aGUgb3V0cHV0IGZyb20KKyAgIHJlcXVlc3QtcHVsbCBzY3JpcHQuCisKKyAqIEZpeGVzIGZvciBhIGhhbmRmdWwgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgaWRlbnRpZmllZCBieSB2YWxncmluZC4KKworICogQmFja3BvcnRzIGEgbW9yYWwgZXF1aXZhbGVudCBvZiAyMDE1IGZpeCB0byB0aGUgcG9sbCgpIGVtdWxhdGlvbgorICAgZnJvbSB0aGUgdXBzdHJlYW0gZ251bGliIHRvIGZpeCBvY2Nhc2lvbmFsIGJyZWFrYWdlcyBvbiBIUEUgTm9uU3RvcC4KKworICogVXNlcnMgd2l0aCAiY29sb3IudWkgPSBhbHdheXMiIGluIHRoZWlyIGNvbmZpZ3VyYXRpb24gd2VyZSBicm9rZW4KKyAgIGJ5IGEgcmVjZW50IGNoYW5nZSB0aGF0IG1hZGUgcGx1bWJpbmcgY29tbWFuZHMgdG8gcGF5IGF0dGVudGlvbiB0bworICAgdGhlbSBhcyB0aGUgcGF0Y2ggY3JlYXRlZCBpbnRlcm5hbGx5IGJ5ICJnaXQgYWRkIC1wIiB3ZXJlIGNvbG9yZWQKKyAgIChoZWgpIGFuZCBtYWRlIHVudXNhYmxlLiAgVGhpcyBoYXMgYmVlbiBmaXhlZCBieSByZXZlcnRpbmcgdGhlCisgICBvZmZlbmRpbmcgY2hhbmdlLgorCisgKiBJbiB0aGUgIi0tZm9ybWF0PS4uLiIgb3B0aW9uIG9mIHRoZSAiZ2l0IGZvci1lYWNoLXJlZiIgY29tbWFuZCAoYW5kCisgICBpdHMgZnJpZW5kcywgaS5lLiB0aGUgbGlzdGluZyBtb2RlIG9mICJnaXQgYnJhbmNoL3RhZyIpLCAiJShhdG9tOikiCisgICAoZS5nLiAiJShyZWZuYW1lOikiLCAiJShib2R5OikiIHVzZWQgdG8gZXJyb3Igb3V0LiAgSW5zdGVhZCwgdHJlYXQKKyAgIHRoZW0gYXMgaWYgdGhlIGNvbG9uIGFuZCBhbiBlbXB0eSBzdHJpbmcgdGhhdCBmb2xsb3dzIGl0IHdlcmUgbm90CisgICB0aGVyZS4KKworICogQW4gYW5jaWVudCBidWcgdGhhdCBtYWRlIEdpdCBtaXNiZWhhdmUgd2l0aCBjcmVhdGlvbi9yZW5hbWluZyBvZgorICAgcmVmcyBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBmZXRjaCA8dGhlcmU+IDxzcmM+Ojxkc3Q+IiBhbGxvd3MgYW4gb2JqZWN0IG5hbWUgb24gdGhlIDxzcmM+CisgICBzaWRlIHdoZW4gdGhlIG90aGVyIHNpZGUgYWNjZXB0cyBzdWNoIGEgcmVxdWVzdCBzaW5jZSBHaXQgdjIuNSwgYnV0CisgICB0aGUgZG9jdW1lbnRhdGlvbiB3YXMgbGVmdCBzdGFsZS4KKyAgIChtZXJnZSA4MzU1OGE0MTJhIGpjL2ZldGNoLXJlZnNwZWMtZG9jLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgImdpdCBmaWx0ZXItYnJhbmNoIiBzbyB0aGF0IHRoZSBmaWx0ZXIKKyAgIG9wdGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBhcHBsaWVkLCBhcworICAgZGVzY3JpYmVkIGluIGFuIGVhcmxpZXIgcGFydCBvZiB0aGUgZG9jLgorICAgKG1lcmdlIDA3YzQ5ODQ1MDggZGcvZmlsdGVyLWJyYW5jaC1maWx0ZXItb3JkZXItZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogQSBwb3NzaWJsZSBvb20gZXJyb3IgaXMgbm93IGNhdWdodCBhcyBhIGZhdGFsIGVycm9yLCBpbnN0ZWFkIG9mCisgICBjb250aW51aW5nIGFuZCBkZXJlZmVyZW5jaW5nIE5VTEwuCisgICAobWVyZ2UgNTVkN2QxNTg0NyBhby9wYXRoLXVzZS14bWFsbG9jIGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgbWlub3IgZG9jLCB0ZXN0IGFuZCBidWlsZCB1cGRhdGVzIGFuZCBjb2RlIGNsZWFudXBzLgorICAgKG1lcmdlIGYwOTRiODlhNGQgbWEvcGFyc2UtbWF5YmUtYm9vbCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNmNkZjhhNzkyOSBtYS90cy1jbGVhbnVwcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzU2MGY1NDdlNiBtYS91cC10by1kYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwZGIzZGM3NWYzIHJzL2FwcGx5LWVwb2NoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNzZkMGUzNWMwIG1hL3NwbGl0LXN5bXJlZi11cGRhdGUtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmNzc3NjIzNTE0IGtzL2JyYW5jaC10d2Vhay1lcnJvci1tZXNzYWdlLWZvci1leHRyYS1hcmdzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzM2YzYzY4M2VjIGtzL3ZlcmlmeS1maWxlbmFtZS1ub24tb3B0aW9uLWVycm9yLW1lc3NhZ2UtdHdlYWsgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdjYmJmOWQ2YTIgbHMvZmlsdGVyLXByb2Nlc3MtZGVsYXllZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDg4YWE2NWM4ZiB3ay9tZXJnZS1vcHRpb25zLWdwZy1zaWduLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTYxY2IxOWEyNyBqYy9icmFuY2gtZm9yY2UtZG9jLXJlYWRhYmlsaXR5LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzJmY2ViYTNmZCBucC9jb25maWctcGF0aC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGUzOGM2ODFmYjcgc2IvcmV2LXBhcnNlLXNob3ctc3VwZXJwcm9qZWN0LXJvb3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRmODUxZGM4ODMgc2cvcmV2LWxpc3QtZG9jLXJlb3JkZXItZml4IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA2NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjEudHh0CkBAIC0wLDAgKzEsODggQEAKK0dpdCB2Mi4xNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTUKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRyYXZpc0NJIGJ1aWxkIHVwZGF0ZXMuCisKKyAqICJhdXRvIiBhcyBhIHZhbHVlIGZvciB0aGUgY29sdW1uYXIgb3V0cHV0IGNvbmZpZ3VyYXRpb24gb3VnaHQgdG8KKyAgIGp1ZGdlICJpcyB0aGUgb3V0cHV0IGNvbnN1bWVkIGJ5IGh1bWFucz8iIHdpdGggdGhlIHNhbWUgY3JpdGVyaWEgYXMKKyAgICJhdXRvIiBmb3IgY29sb3VyZWQgb3V0cHV0IGNvbmZpZ3VyYXRpb24sIGkuZS4gZWl0aGVyIHRoZSBzdGFuZGFyZAorICAgb3V0cHV0IHN0cmVhbSBpcyBnb2luZyB0byB0dHksIG9yIGEgcGFnZXIgaXMgaW4gdXNlLiAgV2UgZm9yZ290IHRoZQorICAgbGF0dGVyLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlIGV4cGVyaW1lbnRhbCAiY29sb3IgbW92ZWQgbGluZXMgZGlmZmVyZW50bHkgaW4gZGlmZiBvdXRwdXQiCisgICBmZWF0dXJlIHdhcyBidWdneSBhcm91bmQgImlnbm9yZSB3aGl0ZXNwYWNlIGNoYW5nZXMiIGVkZ2VzLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBJbnN0ZWFkIG9mIHVzaW5nIGN1c3RvbSBsaW5lIGNvbXBhcmlzb24gYW5kIGhhc2hpbmcgZnVuY3Rpb25zIHRvCisgICBpbXBsZW1lbnQgIm1vdmVkIGxpbmVzIiBjb2xvcmluZyBpbiB0aGUgZGlmZiBvdXRwdXQsIHVzZSB0aGUgcGFpcgorICAgb2YgdGhlc2UgZnVuY3Rpb25zIGZyb20gbG93ZXItbGF5ZXIgeGRpZmYvIGNvZGUuCisKKyAqIFNvbWUgY29kZXBhdGhzIGRpZCBub3QgY2hlY2sgZm9yIGVycm9ycyB3aGVuIGFza2luZyB3aGF0IGJyYW5jaCB0aGUKKyAgIEhFQUQgcG9pbnRzIGF0LCB3aGljaCBoYXZlIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY29tbWl0IiwgYWZ0ZXIgbWFraW5nIGEgY29tbWl0LCBkaWQgbm90IGNoZWNrIGZvciBlcnJvcnMgd2hlbgorICAgYXNraW5nIG9uIHdoYXQgYnJhbmNoIGl0IG1hZGUgdGhlIGNvbW1pdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQgLXUiIGRpZCBub3Qgc3RvcCBhdCBhIHdvcmtpbmcgdHJlZSBvZiBhCisgICBzZXBhcmF0ZSBwcm9qZWN0IHRoYXQgaXMgZW1iZWRkZWQgaW4gYW4gaWdub3JlZCBkaXJlY3RvcnkgYW5kCisgICBsaXN0ZWQgZmlsZXMgaW4gdGhhdCBvdGhlciBwcm9qZWN0LCBpbnN0ZWFkIG9mIGp1c3Qgc2hvd2luZyB0aGUKKyAgIGRpcmVjdG9yeSBpdHNlbGYgYXMgaWdub3JlZC4KKworICogQSBicm9rZW4gYWNjZXNzIHRvIG9iamVjdCBkYXRhYmFzZXMgaW4gcmVjZW50IHVwZGF0ZSB0byAiZ2l0IGdyZXAKKyAgIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBoYXMgYmVlbiBmaXhlZC4KKworICogQSByZWNlbnQgcmVncmVzc2lvbiBpbiAiZ2l0IHJlYmFzZSAtaSIgdGhhdCBicm9rZSBleGVjdXRpb24gb2YgZ2l0CisgICBjb21tYW5kcyBmcm9tIHN1YmRpcmVjdG9yaWVzIHZpYSAiZXhlYyIgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfSIgYml0IGEgIkJVRygpIiB3aGVuIHJ1bgorICAgb3V0c2lkZSBhIHJlcG9zaXRvcnkgZm9yIG9idmlvdXMgcmVhc29uczsgY2xhcmlmeSB0aGUgZG9jdW1lbnRhdGlvbgorICAgYW5kIG1ha2Ugc3VyZSB3ZSBkbyBub3QgZXZlbiB0cnkgdG8gZXhwYW5kIHRoZSBhdC1tYXJrIG1hZ2ljIGluCisgICBzdWNoIGEgY2FzZSwgYnV0IHN0aWxsIGNhbGwgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGJyYW5jaCBuYW1lcy4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSB1cGRhdGUuCisKKyAqIERlc2NyaXB0aW9uIG9mIGJsYW1lLntzaG93cm9vdCxibGFua2JvdW5kYXJ5LHNob3dlbWFpbCxkYXRlfQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaGF2ZSBiZWVuIGFkZGVkIHRvICJnaXQgY29uZmlnIC0taGVscCIuCisKKyAqIEFmdGVyIGFuIGVycm9yIGZyb20gbHN0YXQoKSwgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYygpIGZ1bmN0aW9uCisgICBzb21ldGltZXMgc3RpbGwgd2VudCBhaGVhZCBhbmQgdXNlZCBpbnZhbGlkIGRhdGEgaW4gc3RydWN0IHN0YXQsCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVU5DIHBhdGhzIGFyZSBhbHNvIHJlbGV2YW50IGluIEN5Z3dpbiBidWlsZHMgYW5kIHRoZXkgYXJlIG5vdworICAgdGVzdGVkIGp1c3QgbGlrZSBNaW5ndyBidWlsZHMuCisKKyAqIENvcnJlY3Qgc3RhcnQtdXAgc2VxdWVuY2Ugc28gdGhhdCBhIHJlcG9zaXRvcnkgY291bGQgYmUgcGxhY2VkCisgICBpbW1lZGlhdGVseSB1bmRlciB0aGUgcm9vdCBkaXJlY3RvcnkgYWdhaW4gKHdoaWNoIHdhcyBicm9rZW4gYXQKKyAgIGFyb3VuZCBHaXQgMi4xMykuCisKKyAqIFRoZSBjcmVkZW50aWFsIGhlbHBlciBmb3IgbGlic2VjcmV0IChpbiBjb250cmliLykgaGFzIGJlZW4gaW1wcm92ZWQKKyAgIHRvIGFsbG93IHBvc3NpYmx5IHByb21wdGluZyB0aGUgZW5kIHVzZXIgdG8gdW5sb2NrIHNlY3JldHMgdGhhdCBhcmUKKyAgIGN1cnJlbnRseSBsb2NrZWQgKG90aGVyd2lzZSB0aGUgc2VjcmV0cyBtYXkgbm90IGJlIGxvYWRlZCkuCisKKyAqIFVwZGF0ZXMgZnJvbSBHZlcgcHJvamVjdC4KKworICogImdpdCByZWJhc2UgLWkiIHJlY2VudGx5IHN0YXJ0ZWQgbWlzYmVoYXZpbmcgd2hlbiBhIHN1Ym1vZHVsZSB0aGF0CisgICBpcyBjb25maWd1cmVkIHdpdGggJ3N1Ym1vZHVsZS48bmFtZT4uaWdub3JlJyBpcyBkaXJ0eTsgdGhpcyBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorCisgKiBTb21lIGVycm9yIG1lc3NhZ2VzIGRpZCBub3QgcXVvdGUgZmlsZW5hbWVzIHNob3duIGluIGl0LCB3aGljaCBoYXZlCisgICBiZWVuIGZpeGVkLgorCisgKiBCdWlsZGluZyB3aXRoIE5PX0xJQlBDUkUxX0pJVCBkaWQgbm90IGRpc2FibGUgaXQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBXZSB1c2VkIHRvIGFkZCBhbiBlbXB0eSBhbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlIHRvIHRoZSBzeXN0ZW0KKyAgIHRoYXQgZG9lcyBub3QgaGVscCBhbnl0aGluZzsgaXQgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBFcnJvciBjaGVja2luZyBpbiAiZ2l0IGltYXAtc2VuZCIgZm9yIGVtcHR5IHJlc3BvbnNlIGhhcyBiZWVuCisgICBpbXByb3ZlZC4KKworICogQW4gYW5jaWVudCBidWcgaW4gImdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UiIGNvZGVwYXRoIGhhcworICAgYmVlbiBmaXhlZC4KKworICogVGhlcmUgd2FzIGEgcmVjZW50IHNlbWFudGljIG1pc21lcmdlIGluIHRoZSBjb2RlcGF0aCB0byB3cml0ZSBvdXQgYQorICAgc2VjdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDgwZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjIudHh0CkBAIC0wLDAgKzEsNTAgQEAKK0dpdCB2Mi4xNS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTUuMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBSZWNlbnQgdXBkYXRlIHRvIHRoZSByZWZzIGluZnJhc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIHN0YXJ0ZWQKKyAgIHJld3JpdGluZyBwYWNrZWQtcmVmcyBmaWxlIG1vcmUgb2Z0ZW4gdGhhbiBiZWZvcmU7IHRoaXMgaGFzIGJlZW4KKyAgIG9wdGltaXplZCBhZ2FpbiBmb3IgbW9zdCB0cml2aWFsIGNhc2VzLgorCisgKiBUaGUgU3VibWl0dGluZ1BhdGNoZXMgZG9jdW1lbnQgaGFzIGJlZW4gY29udmVydGVkIHRvIHByb2R1Y2UgYW4KKyAgIEhUTUwgdmVyc2lvbiB2aWEgQXNjaWlEb2MvQXNjaWlkb2N0b3IuCisKKyAqIENvbnRyYXJ5IHRvIHRoZSBkb2N1bWVudGF0aW9uLCAiZ2l0IHB1bGwgLTQvLTYgb3RoZXItYXJncyIgZGlkIG5vdAorICAgYXNrIHRoZSB1bmRlcmx5aW5nICJnaXQgZmV0Y2giIHRvIGdvIG92ZXIgSVB2NC9JUHY2LCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBXaGVuICJnaXQgcmViYXNlIiBwcmVwYXJlZCBhbiBtYWlsYm94IG9mIGNoYW5nZXMgYW5kIGZlZCBpdCB0byAiZ2l0CisgICBhbSIgdG8gcmVwbGF5IHRoZW0sIGl0IHdhcyBjb25mdXNlZCB3aGVuIGEgc3RyYXkgIkZyb20gIiBoYXBwZW5lZAorICAgdG8gYmUgaW4gdGhlIGxvZyBtZXNzYWdlIG9mIG9uZSBvZiB0aGUgcmVwbGF5ZWQgY2hhbmdlcy4gIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB0YXVnaHQgYWJvdXQgdGhlCisgICAiLS1jb3B5IiBvcHRpb24gb2YgImdpdCBicmFuY2giLgorCisgKiAiZ2l0IGFwcGx5IC0taW5hY2N1cmF0ZS1lb2YiIHdoZW4gdXNlZCB3aXRoICItLWlnbm9yZS1zcGFjZS1jaGFuZ2UiCisgICB0cmlnZ2VyZWQgYW4gaW50ZXJuYWwgc2FuaXR5IGNoZWNrLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVGhlIHNlcXVlbmNlciBtYWNoaW5lcnkgKHVzZWQgYnkgImdpdCBjaGVycnktcGljayBBLi5CIiwgYW5kICJnaXQKKyAgIHJlYmFzZSAtaSIsIGFtb25nIG90aGVyIHRoaW5ncykgd291bGQgaGF2ZSBsb3N0IGEgY29tbWl0IGlmIHN0b3BwZWQKKyAgIGR1ZSB0byBhbiB1bmxvY2thYmxlIGluZGV4IGZpbGUsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgdGhyZWUtd2F5IG1lcmdlIHBlcmZvcm1lZCBieSAiZ2l0IGNoZXJyeS1waWNrIiB3YXMgY29uZnVzZWQKKyAgIHdoZW4gYSBuZXcgc3VibW9kdWxlIHdhcyBhZGRlZCBpbiB0aGUgbWVhbnRpbWUsIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZCAob3IgInBhcGVyZWQgb3ZlciIpLgorCisgKiAiZ2l0IG5vdGVzIiBzZW50IGl0cyBlcnJvciBtZXNzYWdlIHRvIGl0cyBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtLAorICAgd2hpY2ggd2FzIGNvcnJlY3RlZC4KKworICogQSBmZXcgc2NyaXB0cyAoYm90aCBpbiBwcm9kdWN0aW9uIGFuZCB0ZXN0cykgaW5jb3JyZWN0bHkgcmVkaXJlY3RlZAorICAgdGhlaXIgZXJyb3Igb3V0cHV0LiAgVGhlc2UgaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKworICogQ2xhcmlmeSBhbmQgZW5oYW5jZSBkb2N1bWVudGF0aW9uIGZvciAibWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQiLCBhcworICAgaXQgd2FzIGNsZWFyIHdoYXQgaXQgY29tcHV0ZWQgYnV0IG5vdCB3aHkvd2hhdCBmb3IuCisKKyAqIFRoaXMgcmVsZWFzZSBhbHNvIGNvbnRhaW5zIHRoZSBmaXhlcyBtYWRlIGluIHRoZSB2Mi4xMy43IHZlcnNpb24gb2YKKyAgIEdpdC4gIFNlZSBpdHMgcmVsZWFzZSBub3RlcyBmb3IgZGV0YWlscy4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDJlNmY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjMudHh0CkBAIC0wLDAgKzEsNiBAQAorR2l0IHYyLjE1LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC41IHRvIGFkZHJlc3MKK3RoZSByZWNlbnRseSByZXBvcnRlZCBDVkUtMjAxOC0xNzQ1Njsgc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0Cit2ZXJzaW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMjQxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTUuNC50eHQKQEAgLTAsMCArMSwxMSBAQAorR2l0IHYyLjE1LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC42IHRvIGFkZHJlc3MKK3RoZSBzZWN1cml0eSBpc3N1ZXMgQ1ZFLTIwMTktMTM0OCwgQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwKK0NWRS0yMDE5LTEzNTEsIENWRS0yMDE5LTEzNTIsIENWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIGFuZAorQ1ZFLTIwMTktMTM4Nzsgc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0IHZlcnNpb24gZm9yIGRldGFpbHMuCisKK0luIGNvbmp1bmN0aW9uIHdpdGggYSB2dWxuZXJhYmlsaXR5IHRoYXQgd2FzIGZpeGVkIGluIHYyLjIwLjIsCitgLmdpdG1vZHVsZXNgIGlzIG5vIGxvbmdlciBhbGxvd2VkIHRvIGNvbnRhaW4gZW50cmllcyBvZiB0aGUgZm9ybQorYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlPSFjb21tYW5kYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc0NzgxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjAudHh0CkBAIC0wLDAgKzEsNDgyIEBACitHaXQgMi4xNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgYW5kIG90aGVyIG5vdGFibGUgY2hhbmdlcy4KKworICogVXNlIG9mIGFuIGVtcHR5IHN0cmluZyBhcyBhIHBhdGhzcGVjIGVsZW1lbnQgdGhhdCBpcyB1c2VkIGZvcgorICAgJ2V2ZXJ5dGhpbmcgbWF0Y2hlcycgaXMgbm93IGFuIGVycm9yLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMTUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEFuIGVtcHR5IHN0cmluZyBhcyBhIHBhdGhzcGVjIGVsZW1lbnQgdGhhdCBtZWFucyAiZXZlcnl0aGluZyIKKyAgIGkuZS4gJ2dpdCBhZGQgIiInLCBpcyBub3cgaWxsZWdhbC4gIFdlIHN0YXJ0ZWQgdGhpcyBieSBmaXJzdAorICAgZGVwcmVjYXRpbmcgYW5kIHdhcm5pbmcgYSBwYXRoc3BlYyB0aGF0IGhhcyBzdWNoIGFuIGVsZW1lbnQgaW4KKyAgIDIuMTEgKE5vdiAyMDE2KS4KKworICogQSBob29rIHNjcmlwdCB0aGF0IGlzIHNldCB1bmV4ZWN1dGFibGUgaXMgc2ltcGx5IGlnbm9yZWQuICBHaXQKKyAgIG5vdGlmaWVzIHdoZW4gc3VjaCBhIGZpbGUgaXMgaWdub3JlZCwgdW5sZXNzIHRoZSBtZXNzYWdlIGlzCisgICBzcXVlbGNoZWQgdmlhIGFkdmljZS5pZ25vcmVkSG9vayBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0IHB1bGwiIGhhcyBiZWVuIHRhdWdodCB0byBhY2NlcHQgIi0tW25vLV1zaWdub2ZmIiBvcHRpb24gYW5kCisgICBwYXNzIGl0IGRvd24gdG8gImdpdCBtZXJnZSIuCisKKyAqIFRoZSAiLS1wdXNoLW9wdGlvbj08c3RyaW5nPiIgb3B0aW9uIHRvICJnaXQgcHVzaCIgbm93IGRlZmF1bHRzIHRvIGEKKyAgIGxpc3Qgb2Ygc3RyaW5ncyBjb25maWd1cmVkIHZpYSBwdXNoLnB1c2hPcHRpb24gdmFyaWFibGUuCisKKyAqICJnaXR3ZWIiIGNoZWNrcyBpZiBhIGRpcmVjdG9yeSBpcyBzZWFyY2hhYmxlIHdpdGggUGVybCdzICIteCIKKyAgIG9wZXJhdG9yLCB3aGljaCBjYW4gYmUgZW5oYW5jZWQgYnkgdXNpbmcgImZpbGV0ZXN0ICdhY2Nlc3MnIgorICAgcHJhZ21hLCB3aGljaCBub3cgd2UgZG8uCisKKyAqICJnaXQgc3Rhc2ggc2F2ZSIgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgImdpdCBzdGFzaCBwdXNoIi4KKworICogVGhlIHNldCBvZiBwYXRocyBvdXRwdXQgZnJvbSAiZ2l0IHN0YXR1cyAtLWlnbm9yZWQiIHdhcyB0aWVkCisgICBjbG9zZWx5IHdpdGggaXRzICItLXVudHJhY2tlZD08bW9kZT4iIG9wdGlvbiwgYnV0IG5vdyBpdCBjYW4gYmUKKyAgIGNvbnRyb2xsZWQgbW9yZSBmbGV4aWJseS4gIE1vc3Qgbm90YWJseSwgYSBkaXJlY3RvcnkgdGhhdCBpcworICAgaWdub3JlZCBiZWNhdXNlIGl0IGlzIGxpc3RlZCB0byBiZSBpZ25vcmVkIGluIHRoZSBpZ25vcmUvZXhjbHVkZQorICAgbWVjaGFuaXNtIGNhbiBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IGZyb20gYSBkaXJlY3RvcnkgdGhhdCBlbmRzIHVwCisgICB0byBiZSBpZ25vcmVkIG9ubHkgYmVjYXVzZSBhbGwgZmlsZXMgaW4gaXQgYXJlIGlnbm9yZWQuCisKKyAqIFRoZSByZW1vdGUtaGVscGVyIGZvciB0YWxraW5nIHRvIE1lZGlhV2lraSBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICB0cnVuY2F0ZSBhbiBvdmVybG9uZyBwYWdlbmFtZSBzbyB0aGF0ICIubXciIHN1ZmZpeCBjYW4gc3RpbGwgYmUKKyAgIGFkZGVkLgorCisgKiBUaGUgcmVtb3RlLWhlbHBlciBmb3IgdGFsa2luZyB0byBNZWRpYVdpa2kgaGFzIGJlZW4gdXBkYXRlZCB0bworICAgd29yayB3aXRoIG1lZGlhd2lraSBuYW1lc3BhY2VzLgorCisgKiBUaGUgIi0tZm9ybWF0PS4uLiIgb3B0aW9uICJnaXQgZm9yLWVhY2gtcmVmIiB0YWtlcyBsZWFybmVkIHRvIHNob3cKKyAgIHRoZSBuYW1lIG9mIHRoZSAncmVtb3RlJyByZXBvc2l0b3J5IGFuZCB0aGUgcmVmIGF0IHRoZSByZW1vdGUgc2lkZQorICAgdGhhdCBpcyBhZmZlY3RlZCBmb3IgJ3Vwc3RyZWFtJyBhbmQgJ3B1c2gnIHZpYSAiJShwdXNoOnJlbW90ZW5hbWUpIgorICAgYW5kIGZyaWVuZHMuCisKKyAqIERvYyBhbmQgbWVzc2FnZSB1cGRhdGVzIHRvIHRlYWNoIHVzZXJzICJiaXNlY3QgdmlldyIgaXMgYSBzeW5vbnltCisgICBmb3IgImJpc2VjdCB2aXN1YWxpemUiLgorCisgKiAiZ2l0IGJpc2VjdCBydW4iIHRoYXQgZGlkIG5vdCBzcGVjaWZ5IGFueSBjb21tYW5kIHRvIHJ1biB1c2VkIHRvIGdvCisgICBhaGVhZCBhbmQgdHJlYXRlZCBhbGwgY29tbWl0cyB0byBiZSB0ZXN0ZWQgYXMgJ2dvb2QnLiAgVGhpcyBoYXMKKyAgIGJlZW4gY29ycmVjdGVkIGJ5IG1ha2luZyB0aGUgY29tbWFuZCBlcnJvciBvdXQuCisKKyAqIFRoZSBTdWJtaXR0aW5nUGF0Y2hlcyBkb2N1bWVudCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gcHJvZHVjZSBhbgorICAgSFRNTCB2ZXJzaW9uIHZpYSBBc2NpaURvYy9Bc2NpaWRvY3Rvci4KKworICogV2UgbGVhcm5lZCB0byBvcHRpb25hbGx5IHRhbGsgdG8gYSBmaWxlIHN5c3RlbSBtb25pdG9yIHZpYSBuZXcKKyAgIGZzbW9uaXRvciBleHRlbnNpb24gdG8gc3BlZWQgdXAgImdpdCBzdGF0dXMiIGFuZCBvdGhlciBvcGVyYXRpb25zCisgICB0aGF0IG5lZWQgdG8gc2VlIHdoaWNoIHBhdGhzIGhhdmUgYmVlbiBtb2RpZmllZC4gIEN1cnJlbnRseSB3ZSBvbmx5CisgICBzdXBwb3J0ICJ3YXRjaG1hbiIuICBTZWUgRmlsZSBTeXN0ZW0gTW9uaXRvciBzZWN0aW9uIG9mCisgICBnaXQtdXBkYXRlLWluZGV4KDEpIGZvciBtb3JlIGRldGFpbC4KKworICogVGhlICJkaWZmIiBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCB0byBpZ25vcmUgZGlmZmVyZW5jZXMgaW4KKyAgIGNhcnJpYWdlIHJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUuCisKKyAqIFBsYWNlcyB0aGF0IGtub3cgYWJvdXQgInNlbmRlbWFpbC50byIsIGxpa2UgZG9jdW1lbnRhdGlvbiBhbmQgc2hlbGwKKyAgIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSBoYXZlIGJlZW4gdGF1Z2h0IGFib3V0ICJzZW5kZW1haWwudG9jbWQiLAorICAgdG9vLgorCisgKiAiZ2l0IGFkZCAtLXJlbm9ybWFsaXplIC4iIGlzIGEgbmV3IGFuZCBzYWZlciB3YXkgdG8gcmVjb3JkIHRoZSBmYWN0CisgICB0aGF0IHlvdSBhcmUgY29ycmVjdGluZyB0aGUgZW5kLW9mLWxpbmUgY29udmVudGlvbiBhbmQgb3RoZXIKKyAgICJjb252ZXJ0X3RvX2dpdCgpIiBnbGl0Y2hlcyBpbiB0aGUgaW4tcmVwb3NpdG9yeSBkYXRhLgorCisgKiAiZ2l0IGJyYW5jaCIgYW5kICJnaXQgY2hlY2tvdXQgLWIiIGFyZSBub3cgZm9yYmlkZGVuIGZyb20gY3JlYXRpbmcKKyAgIGEgYnJhbmNoIHdob3NlIG5hbWUgaXMgIkhFQUQiLgorCisgKiAiZ2l0IGJyYW5jaCAtLWxpc3QiIGxlYXJuZWQgdG8gc2hvdyBpdHMgb3V0cHV0IHRocm91Z2ggdGhlIHBhZ2VyIGJ5CisgICBkZWZhdWx0IHdoZW4gdGhlIG91dHB1dCBpcyBnb2luZyB0byBhIHRlcm1pbmFsLCB3aGljaCBpcyBjb250cm9sbGVkCisgICBieSB0aGUgcGFnZXIuYnJhbmNoIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBUaGlzIGlzIHNpbWlsYXIgdG8gYQorICAgcmVjZW50IGNoYW5nZSB0byAiZ2l0IHRhZyAtLWxpc3QiLgorCisgKiAiZ2l0IGdyZXAgLVciLCAiZ2l0IGRpZmYgLVciIGFuZCB0aGVpciBmcmllbmRzIGxlYXJuZWQgYSBoZXVyaXN0aWMKKyAgIHRvIGV4dGVuZCBhIHByZS1jb250ZXh0IGJleW9uZCB0aGUgbGluZSB0aGF0IG1hdGNoZXMgdGhlICJmdW5jdGlvbgorICAgcGF0dGVybiIgKGFrYSAiZGlmZi4qLnhmdW5jbmFtZSIpIHRvIGluY2x1ZGUgYSBjb21tZW50IGJsb2NrLCBpZgorICAgZXhpc3RzLCB0aGF0IGltbWVkaWF0ZWx5IHByZWNlZGVzIGl0LgorCisgKiAiZ2l0IGNvbmZpZyAtLWV4cGlyeS1kYXRlIGdjLnJlZmxvZ2V4cGlyZSIgY2FuIHJlYWQgIjIud2Vla3MiIGZyb20KKyAgIHRoZSBjb25maWd1cmF0aW9uIGFuZCByZXBvcnQgaXQgYXMgYSB0aW1lc3RhbXAsIGp1c3QgbGlrZSAiLS1pbnQiCisgICB3b3VsZCByZWFkICIxayIgYW5kIHJlcG9ydCAxMDI0LCB0byBoZWxwIGNvbnN1bXB0aW9uIGJ5IHNjcmlwdHMuCisKKyAqIFRoZSBzaGVsbCBjb21wbGV0aW9uIChpbiBjb250cmliLykgbGVhcm5lZCB0aGF0ICJnaXQgcHVsbCIgY2FuIHRha2UKKyAgIHRoZSAiLS1hdXRvc3Rhc2giIG9wdGlvbi4KKworICogVGhlIHRhZ25hbWVzICJnaXQgbG9nIC0tZGVjb3JhdGUiIHVzZXMgdG8gYW5ub3RhdGUgdGhlIGNvbW1pdHMgY2FuCisgICBub3cgYmUgbGltaXRlZCB0byBzdWJzZXQgb2YgYXZhaWxhYmxlIHJlZnMgd2l0aCB0aGUgdHdvIGFkZGl0aW9uYWwKKyAgIG9wdGlvbnMsIC0tZGVjb3JhdGUtcmVmc1stZXhjbHVkZV09PHBhdHRlcm4+LgorCisgKiAiZ2l0IGdyZXAiIGNvbXBpbGVkIHdpdGggbGlicGNyZTIgc29tZXRpbWVzIHRyaWdnZXJlZCBhIHNlZ2ZhdWx0LAorICAgd2hpY2ggaXMgYmVpbmcgZml4ZWQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgdHJpZXMgdG8gc2VlIGlmIHRoZSBzZW5kbWFpbCBwcm9ncmFtIGlzIGF2YWlsYWJsZQorICAgaW4gL3Vzci9saWIgYW5kIC91c3Ivc2JpbjsgZXh0ZW5kIHRoZSBsaXN0IG9mIGxvY2F0aW9ucyB0byBiZQorICAgY2hlY2tlZCB0byBhbHNvIGluY2x1ZGUgZGlyZWN0b3JpZXMgb24gJFBBVEguCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCwgIi0tYW5jaG9yZWQiLCBhIHZhcmlhbnQgb2YgdGhlICItLXBhdGllbmNlIgorICAgYWxnb3JpdGhtLCB0byB3aGljaCB0aGUgdXNlciBjYW4gc3BlY2lmeSB3aGljaCAndW5pcXVlJyBsaW5lIHRvIGJlCisgICB1c2VkIGFzIGFuY2hvcmluZyBwb2ludHMuCisKKyAqIFRoZSB3YXkgImdpdCB3b3JrdHJlZSBhZGQiIGRldGVybWluZXMgd2hhdCBicmFuY2ggdG8gY3JlYXRlIGZyb20KKyAgIHdoZXJlIGFuZCBjaGVja291dCBpbiB0aGUgbmV3IHdvcmt0cmVlIGhhcyBiZWVuIHVwZGF0ZWQgYSBiaXQuCisKKyAqIEFuY2llbnQgcGFydCBvZiBjb2RlYmFzZSBzdGlsbCBzaG93cyBkb3RzIGFmdGVyIGFuIGFiYnJldmlhdGVkCisgICBvYmplY3QgbmFtZSBqdXN0IHRvIHNob3cgdGhhdCBpdCBpcyBub3QgYSBmdWxsIG9iamVjdCBuYW1lLCBidXQKKyAgIHRoZXNlIGVsbGlwc2VzIGFyZSBjb25mdXNpbmcgdG8gcGVvcGxlIHdobyBuZXdseSBkaXNjb3ZlcmVkIEdpdAorICAgd2hvIGFyZSB1c2VkIHRvIHNlZWluZyBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMgYW5kIGZpbmQgdGhlbQorICAgY29uZnVzaW5nIHdpdGggdGhlIHJhbmdlIHN5bnRheC4KKworICogV2l0aCBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmViYXNlLmFiYnJldmlhdGVDb21tYW5kcyBzZXQsCisgICAiZ2l0IHJlYmFzZSAtaSIgcHJvZHVjZXMgdGhlIHRvZG8gbGlzdCB3aXRoIGEgc2luZ2xlLWxldHRlcgorICAgY29tbWFuZCBuYW1lcy4KKworICogImdpdCB3b3JrdHJlZSBhZGQiIGxlYXJuZWQgdG8gcnVuIHRoZSBwb3N0LWNoZWNrb3V0IGhvb2ssIGp1c3QgbGlrZQorICAgImdpdCBjaGVja291dCIgZG9lcywgYWZ0ZXIgdGhlIGluaXRpYWwgY2hlY2tvdXQuCisKKyAqICJnaXQgc3ZuIiBoYXMgYmVlbiB1cGRhdGVkIHRvIHN0cmlwIENScyBpbiB0aGUgY29tbWl0IG1lc3NhZ2VzLCBhcworICAgcmVjZW50IHZlcnNpb25zIG9mIFN1YnZlcnNpb24gcmVqZWN0cyB0aGVtLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZGlkIG5vdCBjb3JyZWN0bHkgcXVvdGUgdGhlIGZvbGRlciBuYW1lIHdoZW4KKyAgIG1ha2luZyBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBFcnJvciBtZXNzYWdlcyBmcm9tICJnaXQgcmViYXNlIiBoYXZlIGJlZW4gc29tZXdoYXQgY2xlYW5lZCB1cC4KKworICogR2l0IGhhcyBiZWVuIHRhdWdodCB0byBzdXBwb3J0IGFuIGh0dHBzOi8vIFVSTCB1c2VkIGZvciBodHRwLnByb3h5CisgICB3aGVuIHVzaW5nIHJlY2VudCB2ZXJzaW9ucyBvZiBsaWJjdXJsLgorCisgKiAiZ2l0IG1lcmdlIiBsZWFybmVkIHRvIHBheSBhdHRlbnRpb24gdG8gbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhbmQgcHJldGVuZCBhcyBpZiAnLS12ZXJpZnktc2lnbmF0dXJlcycKKyAgIG9wdGlvbiB3YXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisgKiAiZ2l0IGRlc2NyaWJlIiB3YXMgdGF1Z2h0IHRvIGRpZyB0cmVlcyBkZWVwZXIgdG8gZmluZCBhCisgICA8Y29tbWl0LWlzaD46PHBhdGg+IHRoYXQgcmVmZXJzIHRvIGEgZ2l2ZW4gYmxvYiBvYmplY3QuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogQW4gZWFybGllciB1cGRhdGUgbWFkZSBpdCBwb3NzaWJsZSB0byB1c2UgYW4gb24tc3RhY2sgaW4tY29yZQorICAgbG9ja2ZpbGUgc3RydWN0dXJlIChhcyBvcHBvc2VkIHRvIGhhdmluZyB0byBkZWxpYmVyYXRlbHkgbGVhayBhbgorICAgb24taGVhcCBvbmUpLiAgTWFueSBjb2RlcGF0aHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGFrZSBhZHZhbnRhZ2UKKyAgIG9mIHRoaXMgbmV3IGZhY2lsaXR5LgorCisgKiBDYWxsaW5nIGNtZF9mb28oKSBhcyBpZiBpdCBpcyBhIGdlbmVyYWwgcHVycG9zZSBoZWxwZXIgZnVuY3Rpb24gaXMKKyAgIGEgbm8tbm8uICBDb3JyZWN0IHR3byBpbnN0YW5jZXMgb2Ygc3VjaCB0byBzZXQgYW4gZXhhbXBsZS4KKworICogV2UgdHJ5IHRvIHNlZSBpZiBzb21lYm9keSBydW5zIG91ciB0ZXN0IHN1aXRlIHdpdGggYSBzaGVsbCB0aGF0CisgICBkb2VzIG5vdCBzdXBwb3J0ICJsb2NhbCIgbGlrZSBiYXNoL2Rhc2ggZG9lcy4KKworICogQW4gZWFybHkgcGFydCBvZiBwaWVjZS1ieS1waWVjZSByZXdyaXRlIG9mICJnaXQgYmlzZWN0IiBpbiBDLgorCisgKiBHU29DIHRvIHBpZWNlLWJ5LXBpZWNlIHJld3JpdGUgImdpdCBzdWJtb2R1bGUiIGluIEMuCisKKyAqIE9wdGltaXplIHRoZSBjb2RlIHRvIGZpbmQgc2hvcnRlc3QgdW5pcXVlIHByZWZpeCBvZiBvYmplY3QgbmFtZXMuCisKKyAqIFBhdGhzcGVjLWxpbWl0ZWQgcmV2aXNpb24gdHJhdmVyc2FsIHdhcyB0YXVnaHQgbm90IHRvIGtlZXAgZmluZGluZworICAgdW5uZWVkZWQgZGlmZmVyZW5jZXMgb25jZSBpdCBrbm93cyB0d28gdHJlZXMgYXJlIGRpZmZlcmVudCBpbnNpZGUKKyAgIGdpdmVuIHBhdGhzcGVjLgorCisgKiBDb252ZXJzaW9uIGZyb20gdWNoYXJbMjBdIHRvIHN0cnVjdCBvYmplY3RfaWQgY29udGludWVzLgorCisgKiBDb2RlIGNsZWFudXAuCisKKyAqIEEgc2luZ2xlLXdvcmQgInVuc2lnbmVkIGZsYWdzIiBpbiB0aGUgZGlmZiBvcHRpb25zIGlzIGJlaW5nIHNwbGl0CisgICBpbnRvIGEgc3RydWN0dXJlIHdpdGggbWFueSBiaXRmaWVsZHMuCisKKyAqIFRyYXZpc0NJIGJ1aWxkIHVwZGF0ZXMuCisKKyAqIFBhcnRzIG9mIGEgdGVzdCB0byBkcml2ZSB0aGUgbG9uZy1ydW5uaW5nIGNvbnRlbnQgZmlsdGVyIGludGVyZmFjZQorICAgaGFzIGJlZW4gc3BsaXQgaW50byBpdHMgb3duIG1vZHVsZSwgaG9wZWZ1bGx5IHRvIGV2ZW50dWFsbHkgYmVjb21lCisgICByZXVzYWJsZS4KKworICogRHJvcCAocGVyaGFwcyBvdmVybHkgY2F1dGlvdXMpIHNhbml0eSBjaGVjayBiZWZvcmUgdXNpbmcgdGhlIGluZGV4CisgICByZWFkIGZyb20gdGhlIGZpbGVzeXN0ZW0gYXQgcnVudGltZS4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBoYXMgYmVlbiB0YXVnaHQgdG8gYXZvaWQgc29tZSB1bm5lY2Vzc2FyeQorICAgaW5zdGFiaWxpdHkgaW4gdGhlIGJ1aWxkIHByb2R1Y3RzLgorCisgKiBBIG5ldyBtZWNoYW5pc20gdG8gdXBncmFkZSB0aGUgd2lyZSBwcm90b2NvbCBpbiBwbGFjZSBpcyBwcm9wb3NlZAorICAgYW5kIGRlbW9uc3RyYXRlZCB0aGF0IGl0IHdvcmtzIHdpdGggdGhlIG9sZGVyIHZlcnNpb25zIG9mIEdpdAorICAgd2l0aG91dCBoYXJtaW5nIHRoZW0uCisKKyAqIEFuIGluZnJhc3RydWN0dXJlIHRvIGRlZmluZSB3aGF0IGhhc2ggZnVuY3Rpb24gaXMgdXNlZCBpbiBHaXQgaXMKKyAgIGludHJvZHVjZWQsIGFuZCBhbiBlZmZvcnQgdG8gcGx1bWIgdGhhdCB0aHJvdWdob3V0IHZhcmlvdXMKKyAgIGNvZGVwYXRocyBoYXMgYmVlbiBzdGFydGVkLgorCisgKiBUaGUgY29kZSB0byBpdGVyYXRlIG92ZXIgbG9vc2Ugb2JqZWN0IGZpbGVzIGdvdCBvcHRpbWl6ZWQuCisKKyAqIEFuIGludGVybmFsIGZ1bmN0aW9uIHRoYXQgd2FzIGxlZnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaGFzCisgICBiZWVuIHJlbW92ZWQsIGFzIHRoZXJlIGlzIG5vIHJlbWFpbmluZyBjYWxsZXJzLgorCisgKiBIaXN0b3JpY2FsbHksIHRoZSBkaWZmIG1hY2hpbmVyeSBmb3IgcmVuYW1lIGRldGVjdGlvbiBoYWQgYQorICAgaGFyZGNvZGVkIGxpbWl0IG9mIDMyayBwYXRoczsgdGhpcyBpcyBiZWluZyBsaWZ0ZWQgdG8gYWxsb3cgdXNlcnMKKyAgIHRyYWRlIGN5Y2xlcyB3aXRoIGEgKHBvc3NpYmx5KSBlYXNpZXIgdG8gcmVhZCByZXN1bHQuCisKKyAqIFRoZSB0cmFjaW5nIGluZnJhc3RydWN0dXJlIGhhcyBiZWVuIG9wdGltaXplZCBmb3IgY2FzZXMgd2hlcmUgbm8KKyAgIHRyYWNpbmcgaXMgcmVxdWVzdGVkLgorCisgKiBJbiBwcmVwYXJhdGlvbiBmb3IgaW1wbGVtZW50aW5nIG5hcnJvdy9wYXJ0aWFsIGNsb25lLCB0aGUgb2JqZWN0CisgICB3YWxraW5nIG1hY2hpbmVyeSBoYXMgYmVlbiB0YXVnaHQgYSB3YXkgdG8gdGVsbCBpdCB0byAiZmlsdGVyIiBzb21lCisgICBvYmplY3RzIGZyb20gZW51bWVyYXRpb24uCisKKyAqIEEgZmV3IHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyB0aGF0IGFyZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mCisgICB0aGUgZGVjb3JhdGUgQVBJIGhhdmUgYmVlbiByZW5hbWVkIGFuZCB0aGVuIHRoZSBBUEkgZ290IGRvY3VtZW50ZWQKKyAgIGJldHRlci4KKworICogQXNzb3J0ZWQgdXBkYXRlcyBmb3IgVHJhdmlzQ0kgaW50ZWdyYXRpb24uCisgICAobWVyZ2UgNGYyNjM2NjY3OSBzZy90cmF2aXMtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbnRyb2R1Y2UgYSBoZWxwZXIgdG8gc2ltcGxpZnkgY29kZSB0byBwYXJzZSBhIGNvbW1vbiBwYXR0ZXJuIHRoYXQKKyAgIGV4cGVjdHMgZWl0aGVyICItLWtleSIgb3IgIi0ta2V5PTxzb21ldGhpbmc+Ii4KKworICogImdpdCB2ZXJzaW9uIC0tYnVpbGQtb3B0aW9ucyIgbGVhcm5lZCB0byByZXBvcnQgdGhlIGhvc3QgQ1BVIGFuZAorICAgdGhlIGV4YWN0IGNvbW1pdCBvYmplY3QgbmFtZSB0aGUgYmluYXJ5IHdhcyBidWlsdCBmcm9tLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4xNQorLS0tLS0tLS0tLS0tLS0tLS0KKworICogImF1dG8iIGFzIGEgdmFsdWUgZm9yIHRoZSBjb2x1bW5hciBvdXRwdXQgY29uZmlndXJhdGlvbiBvdWdodCB0bworICAganVkZ2UgImlzIHRoZSBvdXRwdXQgY29uc3VtZWQgYnkgaHVtYW5zPyIgd2l0aCB0aGUgc2FtZSBjcml0ZXJpYSBhcworICAgImF1dG8iIGZvciBjb2xvdXJlZCBvdXRwdXQgY29uZmlndXJhdGlvbiwgaS5lLiBlaXRoZXIgdGhlIHN0YW5kYXJkCisgICBvdXRwdXQgc3RyZWFtIGlzIGdvaW5nIHRvIHR0eSwgb3IgYSBwYWdlciBpcyBpbiB1c2UuICBXZSBmb3Jnb3QgdGhlCisgICBsYXR0ZXIsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgZXhwZXJpbWVudGFsICJjb2xvciBtb3ZlZCBsaW5lcyBkaWZmZXJlbnRseSBpbiBkaWZmIG91dHB1dCIKKyAgIGZlYXR1cmUgd2FzIGJ1Z2d5IGFyb3VuZCAiaWdub3JlIHdoaXRlc3BhY2UgY2hhbmdlcyIgZWRnZXMsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEluc3RlYWQgb2YgdXNpbmcgY3VzdG9tIGxpbmUgY29tcGFyaXNvbiBhbmQgaGFzaGluZyBmdW5jdGlvbnMgdG8KKyAgIGltcGxlbWVudCAibW92ZWQgbGluZXMiIGNvbG9yaW5nIGluIHRoZSBkaWZmIG91dHB1dCwgdXNlIHRoZSBwYWlyCisgICBvZiB0aGVzZSBmdW5jdGlvbnMgZnJvbSBsb3dlci1sYXllciB4ZGlmZi8gY29kZS4KKworICogU29tZSBjb2RlcGF0aHMgZGlkIG5vdCBjaGVjayBmb3IgZXJyb3JzIHdoZW4gYXNraW5nIHdoYXQgYnJhbmNoIHRoZQorICAgSEVBRCBwb2ludHMgYXQsIHdoaWNoIGhhdmUgYmVlbiBmaXhlZC4KKworICogImdpdCBjb21taXQiLCBhZnRlciBtYWtpbmcgYSBjb21taXQsIGRpZCBub3QgY2hlY2sgZm9yIGVycm9ycyB3aGVuCisgICBhc2tpbmcgb24gd2hhdCBicmFuY2ggaXQgbWFkZSB0aGUgY29tbWl0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgc3RhdHVzIC0taWdub3JlZCAtdSIgZGlkIG5vdCBzdG9wIGF0IGEgd29ya2luZyB0cmVlIG9mIGEKKyAgIHNlcGFyYXRlIHByb2plY3QgdGhhdCBpcyBlbWJlZGRlZCBpbiBhbiBpZ25vcmVkIGRpcmVjdG9yeSBhbmQKKyAgIGxpc3RlZCBmaWxlcyBpbiB0aGF0IG90aGVyIHByb2plY3QsIGluc3RlYWQgb2YganVzdCBzaG93aW5nIHRoZQorICAgZGlyZWN0b3J5IGl0c2VsZiBhcyBpZ25vcmVkLgorCisgKiBBIGJyb2tlbiBhY2Nlc3MgdG8gb2JqZWN0IGRhdGFiYXNlcyBpbiByZWNlbnQgdXBkYXRlIHRvICJnaXQgZ3JlcAorICAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGhhcyBiZWVuIGZpeGVkLgorCisgKiBBIHJlY2VudCByZWdyZXNzaW9uIGluICJnaXQgcmViYXNlIC1pIiB0aGF0IGJyb2tlIGV4ZWN1dGlvbiBvZiBnaXQKKyAgIGNvbW1hbmRzIGZyb20gc3ViZGlyZWN0b3JpZXMgdmlhICJleGVjIiBpbnN0cnVjdGlvbiBoYXMgYmVlbiBmaXhlZC4KKworICogQSAocG9zc2libHkgZmxha2V5KSB0ZXN0IGZpeC4KKworICogImdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9IiBiaXQgYSAiQlVHKCkiIHdoZW4gcnVuCisgICBvdXRzaWRlIGEgcmVwb3NpdG9yeSBmb3Igb2J2aW91cyByZWFzb25zOyBjbGFyaWZ5IHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQgbWFrZSBzdXJlIHdlIGRvIG5vdCBldmVuIHRyeSB0byBleHBhbmQgdGhlIGF0LW1hcmsgbWFnaWMgaW4KKyAgIHN1Y2ggYSBjYXNlLCBidXQgc3RpbGwgY2FsbCB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYnJhbmNoIG5hbWVzLgorCisgKiAiZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBub3cga25vd3MgdGhhdCBzdWJtb2R1bGVzIGNhbiBiZQorICAgbW92ZWQgYXJvdW5kIGluIHRoZSBzdXBlcnByb2plY3QgaW4gYWRkaXRpb24gdG8gZ2V0dGluZyB1cGRhdGVkLAorICAgYW5kIGZpbmRzIHRoZSBvbmVzIHRoYXQgbmVlZCB0byBiZSBmZXRjaGVkIGFjY29yZGluZ2x5LgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIHVwZGF0ZS4KKworICogRGVzY3JpcHRpb24gb2YgYmxhbWUue3Nob3dyb290LGJsYW5rYm91bmRhcnksc2hvd2VtYWlsLGRhdGV9CisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBoYXZlIGJlZW4gYWRkZWQgdG8gImdpdCBjb25maWcgLS1oZWxwIi4KKworICogQWZ0ZXIgYW4gZXJyb3IgZnJvbSBsc3RhdCgpLCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKCkgZnVuY3Rpb24KKyAgIHNvbWV0aW1lcyBzdGlsbCB3ZW50IGFoZWFkIGFuZCB1c2VkIGludmFsaWQgZGF0YSBpbiBzdHJ1Y3Qgc3RhdCwKKyAgIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBVTkMgcGF0aHMgYXJlIGFsc28gcmVsZXZhbnQgaW4gQ3lnd2luIGJ1aWxkcyBhbmQgdGhleSBhcmUgbm93CisgICB0ZXN0ZWQganVzdCBsaWtlIE1pbmd3IGJ1aWxkcy4KKworICogQ29ycmVjdCBzdGFydC11cCBzZXF1ZW5jZSBzbyB0aGF0IGEgcmVwb3NpdG9yeSBjb3VsZCBiZSBwbGFjZWQKKyAgIGltbWVkaWF0ZWx5IHVuZGVyIHRoZSByb290IGRpcmVjdG9yeSBhZ2FpbiAod2hpY2ggd2FzIGJyb2tlbiBhdAorICAgYXJvdW5kIEdpdCAyLjEzKS4KKworICogVGhlIGNyZWRlbnRpYWwgaGVscGVyIGZvciBsaWJzZWNyZXQgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiBpbXByb3ZlZAorICAgdG8gYWxsb3cgcG9zc2libHkgcHJvbXB0aW5nIHRoZSBlbmQgdXNlciB0byB1bmxvY2sgc2VjcmV0cyB0aGF0IGFyZQorICAgY3VycmVudGx5IGxvY2tlZCAob3RoZXJ3aXNlIHRoZSBzZWNyZXRzIG1heSBub3QgYmUgbG9hZGVkKS4KKworICogTWluR1cgdXBkYXRlcy4KKworICogRXJyb3IgY2hlY2tpbmcgaW4gImdpdCBpbWFwLXNlbmQiIGZvciBlbXB0eSByZXNwb25zZSBoYXMgYmVlbgorICAgaW1wcm92ZWQuCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gdGhlIHJlZnMgaW5mcmFzdHJ1Y3R1cmUgaW1wbGVtZW50YXRpb24gc3RhcnRlZAorICAgcmV3cml0aW5nIHBhY2tlZC1yZWZzIGZpbGUgbW9yZSBvZnRlbiB0aGFuIGJlZm9yZTsgdGhpcyBoYXMgYmVlbgorICAgb3B0aW1pemVkIGFnYWluIGZvciBtb3N0IHRyaXZpYWwgY2FzZXMuCisKKyAqIFNvbWUgZXJyb3IgbWVzc2FnZXMgZGlkIG5vdCBxdW90ZSBmaWxlbmFtZXMgc2hvd24gaW4gaXQsIHdoaWNoIGhhdmUKKyAgIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIiByZWNlbnRseSBzdGFydGVkIG1pc2JlaGF2aW5nIHdoZW4gYSBzdWJtb2R1bGUgdGhhdAorICAgaXMgY29uZmlndXJlZCB3aXRoICdzdWJtb2R1bGUuPG5hbWU+Lmlnbm9yZScgaXMgZGlydHk7IHRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogQnVpbGRpbmcgd2l0aCBOT19MSUJQQ1JFMV9KSVQgZGlkIG5vdCBkaXNhYmxlIGl0LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogV2UgdXNlZCB0byBhZGQgYW4gZW1wdHkgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZSB0byB0aGUgc3lzdGVtCisgICB0aGF0IGRvZXMgbm90IGhlbHAgYW55dGhpbmc7IGl0IGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogRG9jIHVwZGF0ZSBhcm91bmQgdXNlIG9mICJmb3JtYXQtcGF0Y2ggLS1zdWJqZWN0LXByZWZpeCIgZXRjLgorCisgKiBBIGZpeCBmb3IgYW4gYW5jaWVudCBidWcgaW4gImdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UiIGNvZGVwYXRoLgorCisgKiBDbGFyaWZ5IGFuZCBlbmhhbmNlIGRvY3VtZW50YXRpb24gZm9yICJtZXJnZS1iYXNlIC0tZm9yay1wb2ludCIsIGFzCisgICBpdCB3YXMgY2xlYXIgd2hhdCBpdCBjb21wdXRlZCBidXQgbm90IHdoeS93aGF0IGZvci4KKworICogQSBmZXcgc2NyaXB0cyAoYm90aCBpbiBwcm9kdWN0aW9uIGFuZCB0ZXN0cykgaW5jb3JyZWN0bHkgcmVkaXJlY3RlZAorICAgdGhlaXIgZXJyb3Igb3V0cHV0LiAgVGhlc2UgaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBub3RlcyIgc2VudCBpdHMgZXJyb3IgbWVzc2FnZSB0byBpdHMgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSwKKyAgIHdoaWNoIHdhcyBjb3JyZWN0ZWQuCisKKyAqIFRoZSB0aHJlZS13YXkgbWVyZ2UgcGVyZm9ybWVkIGJ5ICJnaXQgY2hlcnJ5LXBpY2siIHdhcyBjb25mdXNlZAorICAgd2hlbiBhIG5ldyBzdWJtb2R1bGUgd2FzIGFkZGVkIGluIHRoZSBtZWFudGltZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGZpeGVkIChvciAicGFwZXJlZCBvdmVyIikuCisKKyAqIFRoZSBzZXF1ZW5jZXIgbWFjaGluZXJ5ICh1c2VkIGJ5ICJnaXQgY2hlcnJ5LXBpY2sgQS4uQiIsIGFuZCAiZ2l0CisgICByZWJhc2UgLWkiLCBhbW9uZyBvdGhlciB0aGluZ3MpIHdvdWxkIGhhdmUgbG9zdCBhIGNvbW1pdCBpZiBzdG9wcGVkCisgICBkdWUgdG8gYW4gdW5sb2NrYWJsZSBpbmRleCBmaWxlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBhcHBseSAtLWluYWNjdXJhdGUtZW9mIiB3aGVuIHVzZWQgd2l0aCAiLS1pZ25vcmUtc3BhY2UtY2hhbmdlIgorICAgdHJpZ2dlcmVkIGFuIGludGVybmFsIHNhbml0eSBjaGVjaywgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIChpbiBjb250cmliLykgaGFzIGJlZW4gdGF1Z2h0IGFib3V0IHRoZQorICAgIi0tY29weSIgb3B0aW9uIG9mICJnaXQgYnJhbmNoIi4KKworICogV2hlbiAiZ2l0IHJlYmFzZSIgcHJlcGFyZWQgYSBtYWlsYm94IG9mIGNoYW5nZXMgYW5kIGZlZCBpdCB0byAiZ2l0CisgICBhbSIgdG8gcmVwbGF5IHRoZW0sIGl0IHdhcyBjb25mdXNlZCB3aGVuIGEgc3RyYXkgIkZyb20gIiBoYXBwZW5lZAorICAgdG8gYmUgaW4gdGhlIGxvZyBtZXNzYWdlIG9mIG9uZSBvZiB0aGUgcmVwbGF5ZWQgY2hhbmdlcy4gIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlcmUgd2FzIGEgcmVjZW50IHNlbWFudGljIG1pc21lcmdlIGluIHRoZSBjb2RlcGF0aCB0byB3cml0ZSBvdXQgYQorICAgc2VjdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBNZW50aW9ucyBvZiAiZ2l0LXJlYmFzZSIgYW5kICJnaXQtYW0iIChkYXNoZWQgZm9ybSkgc3RpbGwgcmVtYWluZWQKKyAgIGluIGVuZC11c2VyIHZpc2libGUgc3RyaW5ncyBlbWl0dGVkIGJ5IHRoZSAiZ2l0IHJlYmFzZSIgY29tbWFuZDsKKyAgIHRoZXkgaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKworICogQ29udHJhcnkgdG8gdGhlIGRvY3VtZW50YXRpb24sICJnaXQgcHVsbCAtNC8tNiBvdGhlci1hcmdzIiBkaWQgbm90CisgICBhc2sgdGhlIHVuZGVybHlpbmcgImdpdCBmZXRjaCIgdG8gZ28gb3ZlciBJUHY0L0lQdjYsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1yZWN1cnNpdmUiIG1heSBvdmVyd3JpdGUgYW5kIHJld2luZCB0aGUgaGlzdG9yeSBvZgorICAgdGhlIGJyYW5jaCB0aGF0IGhhcHBlbnMgdG8gYmUgY2hlY2tlZCBvdXQgaW4gc3VibW9kdWxlCisgICByZXBvc2l0b3JpZXMsIHdoaWNoIG1pZ2h0IG5vdCBiZSBkZXNpcmFibGUuICBEZXRhY2ggdGhlIEhFQUQgYnV0CisgICBzdGlsbCBhbGxvdyB0aGUgcmVjdXJzaXZlIGNoZWNrb3V0IHRvIHN1Y2NlZWQgaW4gc3VjaCBhIGNhc2UuCisgICAobWVyZ2UgNTdmMjJiZjk5NyBzYi9zdWJtb2R1bGUtcmVjdXJzaXZlLWNoZWNrb3V0LWRldGFjaC1oZWFkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0iIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIChzb3J0IG9mKQorICAgcmVtb3ZlZCwgYXMgIi0tc2V0LXVwc3RyZWFtLXRvIiBpcyB0aGUgcHJlZmVycmVkIG9uZSB0aGVzZSBkYXlzLgorICAgVGhlIGRvY3VtZW50YXRpb24gc3RpbGwgaGFkICItLXNldC11cHN0cmVhbSIgbGlzdGVkIG9uIGl0cworICAgc3lub3BzaXMgc2VjdGlvbiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGEwNjBmM2QzZDggdHovYnJhbmNoLWRvYy1yZW1vdmUtc2V0LXVwc3RyZWFtIGxhdGVyIHRvIG1haW50KS4KKworICogSW50ZXJuYWxseSB3ZSB1c2UgMHs0MH0gYXMgYSBwbGFjZWhvbGRlciBvYmplY3QgbmFtZSB0byBzaWduYWwgdGhlCisgICBjb2RlcGF0aCB0aGF0IHRoZXJlIGlzIG5vIHN1Y2ggb2JqZWN0IChlLmcuIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sKKyAgIHdoaWxlICJnaXQgZmV0Y2giIHN0b3JlcyBhIG5ldyByZW1vdGUtdHJhY2tpbmcgcmVmIHNheXMgIndlIGtub3cKKyAgIHRoZXJlIGlzIG5vICdvbGQnIHRoaW5nIHBvaW50ZWQgYXQgYnkgdGhlIHJlZiwgYXMgd2UgYXJlIGNyZWF0aW5nCisgICBpdCBhbmV3IiBieSBwYXNzaW5nIDB7NDB9IGZvciB0aGUgJ29sZCcgc2lkZSksIGFuZCBleHBlY3QgdGhhdCBhCisgICBjb2RlcGF0aCB0byBsb2NhdGUgYW4gaW4tY29yZSBvYmplY3QgdG8gcmV0dXJuIE5VTEwgYXMgYSBzaWduIHRoYXQKKyAgIHRoZSBvYmplY3QgZG9lcyBub3QgZXhpc3QuICBBIGxvb2stdXAgZm9yIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90CisgICBleGlzdCBob3dldmVyIGlzIHF1aXRlIGNvc3RseSB3aXRoIGEgcmVwb3NpdG9yeSB3aXRoIGxhcmdlIG51bWJlcgorICAgb2YgcGFja2ZpbGVzLiAgVGhpcyBhY2Nlc3MgcGF0dGVybiBoYXMgYmVlbiBvcHRpbWl6ZWQuCisgICAobWVyZ2UgODdiNWUyMzZhMSBqay9mZXdlci1wYWNrLXJlc2NhbiBsYXRlciB0byBtYWludCkuCisKKyAqIEluIGFkZGl0aW9uIHRvICJnaXQgc3Rhc2ggLW0gbWVzc2FnZSIsIHRoZSBjb21tYW5kIGxlYXJuZWQgdG8KKyAgIGFjY2VwdCAiZ2l0IHN0YXNoIC1tbWVzc2FnZSIgZm9ybS4KKyAgIChtZXJnZSA1Njc1NDczZmNiIHBoL3N0YXNoLXNhdmUtbS1vcHRpb24tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQHstTn0gaW4gImdpdCBjaGVja291dCBAey1OfSIgbWF5IHJlZmVyIHRvIGEgZGV0YWNoZWQgSEVBRCBzdGF0ZSwKKyAgIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiB3YXMgbm90IGNsZWFyIGFib3V0IGl0LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA3NWNlMTQ5NTc1IGtzL2RvYy1jaGVja291dC1wcmV2aW91cyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcmVncmVzc2lvbiBpbiB0aGUgcHJvZ3Jlc3MgZXllLWNhbmR5IHdhcyBmaXhlZC4KKyAgIChtZXJnZSA5YzU5NTFjYWNmIGprL3Byb2dyZXNzLWRlbGF5LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIGludGVybmFsIHRvIHRoZSByZWN1cnNpdmUgbWVyZ2Ugc3RyYXRlZ3kgd2FzIG5vdCBmdWxseQorICAgcHJlcGFyZWQgdG8gc2VlIGEgcGF0aCB0aGF0IGlzIHJlbmFtZWQgdG8gdHJ5IG92ZXJ3cml0aW5nIGFub3RoZXIKKyAgIHBhdGggdGhhdCBpcyBvbmx5IGRpZmZlcmVudCBpbiBjYXNlIG9uIGNhc2UgaW5zZW5zaXRpdmUgc3lzdGVtcy4KKyAgIFRoaXMgZG9lcyBub3QgbWF0dGVyIGluIHRoZSBjdXJyZW50IGNvZGUsIGJ1dCB3aWxsIHN0YXJ0IHRvIG1hdHRlcgorICAgb25jZSB0aGUgcmVuYW1lIGRldGVjdGlvbiBsb2dpYyBzdGFydHMgdGFraW5nIGhpbnRzIGZyb20gbmVhcmJ5CisgICBwYXRocyBtb3ZpbmcgdG8gc29tZSBkaXJlY3RvcnkgYW5kIG1vdmVzIGEgbmV3IHBhdGggYWxvbmcgd2l0aCB0aGVtLgorICAgKG1lcmdlIDRjYmEyYjAxMDggZW4vbWVyZ2UtcmVjdXJzaXZlLWljYXNlLXJlbW92YWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiB2Mi4xMi1lcmEgcmVncmVzc2lvbiBpbiBwYXRoc3BlYyBtYXRjaCBsb2dpYywgd2hpY2ggbWFkZSBpdCBsb29rCisgICBpbnRvIHN1Ym1vZHVsZSB0cmVlIGV2ZW4gd2hlbiBpdCBpcyBub3QgZGVzaXJlZCwgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZWVmM2RmNWE5MyBidy9wYXRoc3BlYy1tYXRjaC1zdWJtb2R1bGUtYm91bmRhcnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbWVuZGluZyBjb21taXRzIGluIGdpdC1ndWkgYnJva2UgdGhlIGF1dGhvciBuYW1lIHRoYXQgaXMgbm9uLWFzY2lpCisgICBkdWUgdG8gaW5jb3JyZWN0IGVuY29kaW5nIGNvbnZlcnNpb24uCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gdGhlIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIGNvZGUgYnJva2UgImRpZmYtdHJlZSIKKyAgIGJ5IGFjY2lkZW50YWxseSBzdG9wcGluZyB0byByZWFkIGZyb20gdGhlIGluZGV4IHVwZnJvbnQuCisgICAobWVyZ2UgZmQ2NmJjYzMxZiBidy9zdWJtb2R1bGUtY29uZmlnLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBHaXQgc2hvd3MgYSBtZXNzYWdlIHRvIHRlbGwgdGhlIHVzZXIgdGhhdCBpdCBpcyB3YWl0aW5nIGZvciB0aGUKKyAgIHVzZXIgdG8gZmluaXNoIGVkaXRpbmcgd2hlbiBzcGF3bmluZyBhbiBlZGl0b3IsIGluIGNhc2UgdGhlIGVkaXRvcgorICAgb3BlbnMgdG8gYSBoaWRkZW4gd2luZG93IG9yIHNvbWV3aGVyZSBvYnNjdXJlIGFuZCB0aGUgdXNlciBnZXRzCisgICBsb3N0LgorICAgKG1lcmdlIGFiZmIwNGQwYzcgbHMvZWRpdG9yLXdhaXRpbmctbWVzc2FnZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAic2FmZSBjcmxmIiBjaGVjayBpbmNvcnJlY3RseSB0cmlnZ2VyZWQgZm9yIGNvbnRlbnRzIHRoYXQgZG9lcworICAgbm90IHVzZSBDUkxGIGFzIGxpbmUgZW5kaW5ncywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDY0OWYxZjA5NDggdGIvY2hlY2stY3JsZi1mb3Itc2FmZS1jcmxmIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjbG9uZSAtLXNoYXJlZCIgdG8gYm9ycm93IGZyb20gYSAoc2Vjb25kYXJ5KSB3b3JrdHJlZSBkaWQgbm90CisgICB3b3JrLCBldmVuIHRob3VnaCAiZ2l0IGNsb25lIC0tbG9jYWwiIGRpZC4gIEJvdGggYXJlIG5vdyBhY2NlcHRlZC4KKyAgIChtZXJnZSBiM2IwNTk3MWMxIGVzL2Nsb25lLXNoYXJlZC13b3JrdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgbm93IGFsbG93cyBub3QganVzdCB0aGUgcmVwb3NpdG9yaWVzIGJ1dCBhbHNvCisgICB0aGUgcmVmcyB0byBiZSB1c2VkIHRvIHRha2UgcHJlLWZvcm1hdHRlZCBtYW5wYWdlcyBhbmQgaHRtbAorICAgZG9jdW1lbnRzIHRvIGluc3RhbGwuCisgICAobWVyZ2UgNjUyODllOWRjZCByYi9xdWljay1pbnN0YWxsLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSB0aGUgc2hlbGwgcHJvbXB0IHNjcmlwdCAoaW4gY29udHJpYi8pIHRvIHN0cmlwIHRyYWlsaW5nIENSCisgICBmcm9tIHN0cmluZ3MgcmVhZCBmcm9tIHZhcmlvdXMgInN0YXRlIiBmaWxlcy4KKyAgIChtZXJnZSAwNDFmZThmYzgzIHJhL3Byb21wdC1lcmVhZC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgZGlkIG5vdCBjb3JyZWN0bHkgYWJvcnQgd2hlbiB0aGUgaW5kZXggaXMKKyAgIGRpcnR5LCBpZiB0aGUgbWVyZ2VkIHRyZWUgaGFwcGVuZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQKKyAgIEhFQUQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBCeXRlcyB3aXRoIGhpZ2gtYml0IHNldCB3ZXJlIGVuY29kZWQgaW5jb3JyZWN0bHkgYW5kIG1hZGUKKyAgIGNyZWRlbnRpYWwgaGVscGVyIGZhaWwuCisgICAobWVyZ2UgNGMyNjdmMmFlMyBqZC9maXgtc3RyYnVmLWFkZC11cmxlbmNvZGUtYnl0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtcCAtWDxvcHRpb24+IiBkaWQgbm90IHByb3BhZ2F0ZSB0aGUgb3B0aW9uIHByb3Blcmx5CisgICBkb3duIHRvIHVuZGVybHlpbmcgbWVyZ2Ugc3RyYXRlZ3kgYmFja2VuZC4KKyAgIChtZXJnZSBkZDZmYjAwNTNjIGpzL2ZpeC1tZXJnZS1hcmctcXVvdGluZy1pbi1yZWJhc2UtcCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIiBkaWQgbm90IGNvcnJlY3RseSBhYm9ydCB3aGVuIHRoZSBpbmRleCBpcworICAgZGlydHksIGlmIHRoZSBtZXJnZWQgdHJlZSBoYXBwZW5lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudAorICAgSEVBRCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZjMwOWU4ZTc2OCBldy9lbXB0eS1tZXJnZS13aXRoLWRpcnR5LWluZGV4LW1haW50IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgbWlub3IgZG9jLCB0ZXN0IGFuZCBidWlsZCB1cGRhdGVzIGFuZCBjb2RlIGNsZWFudXBzLgorICAgKG1lcmdlIDFhMWZjMmQ1YjUgcmQvbWFuLXBydW5lLXByb2dyZXNzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwYmEwMTQwMzVhIHJkL21hbi1yZWZsb2ctYWRkLW4gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU1NGI2MzM1OWYgcmQvZG9jLW5vdGVzLXBydW5lLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmY0YzliNDEzYSBzcC9kb2MtaW5mby1hdHRyaWJ1dGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3ZGIyY2JmNGYxIGpjL3JlY2VpdmUtcGFjay1ob29rLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWEwNTI2MjY0YiB0Zy90LXJlYWRtZS11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1ZTgzY2NhMGI4IGprL25vLW9wdGlvbmFsLWxvY2tzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4MjZjNzc4ZjdjIGpzL2hhc2htYXAtdXBkYXRlLXNhbXBsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTc2YjJkMzI4YyBzZy9zZXR1cC1kb2MtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxYjA5MDczNTE0IHJzL2FtLWJ1aWx0aW4tbGVha2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWRkY2Y2Y2ZkZSBycy9mbXQtbWVyZ2UtbXNnLXN0cmluZy1sZWFrLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzNmZjhmNmMxNCBycy9zdHJidWYtcmVhZC1vbmNlLXJlc2V0LWxlbmd0aCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNmIwZWI4ODRmOSBkYi9kb2Mtd29ya2Zsb3dzLW5ldXRlci10aGUtbWFpbnRhaW5lciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGM4N2JkZmIyMSBqay9jdnNpbXBvcnQtcXVvdGluZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTc2Y2I5NzlmZSBycy9mbXQtbWVyZ2UtbXNnLWxlYWtmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVhMDMzNjBlNzMgdGIvZGVsaW1pdC1wcmV0dHktdHJhaWxlcnMtYXJncy13aXRoLWNvbW1hIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkMGU2MzI2MDI2IG90L3ByZXR0eSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDQxMDNmNDE5NyBzYi90ZXN0LWhlbHBlci1leGNsdWRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTcwMDc4NjkzZiBqdC90cmFuc3BvcnQtbm8tbW9yZS1yc3luYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzA3YjNhZGZmMSBidy9wYXRoLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmY5ZDdkZjk1MCB0ei9saWItZ2l0LXN2bi1zdm5zZXJ2ZS10ZXN0cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGVjMzY2YzlhOCBzci9odHRwLXNzbHZlcmlmeS1jb25maWctZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzZjgyNGU5MWM4IGprL3Rlc3Qtc3VpdGUtdHJhY2luZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMWZlYjA2MTcwMSBkYi9kb2MtY29uZmlnLXNlY3Rpb24tbmFtZXMtd2l0aC1icyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzRkZWEwZTEzYyBqaC9tZW1paGFzaC1vcHQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJlOWZkYzc5NWMgbWEvYmlzZWN0LWxlYWtmaXggbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZTY0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMS50eHQKQEAgLTAsMCArMSwxMSBAQAorR2l0IHYyLjE2LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xNgorLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjbG9uZSIgc2VnZmF1bHRlZCB3aGVuIGNsb25pbmcgYSBwcm9qZWN0IHRoYXQgaGFwcGVucyB0bworICAgdHJhY2sgdHdvIHBhdGhzIHRoYXQgZGlmZmVyIG9ubHkgaW4gY2FzZSBvbiBhIGNhc2UgaW5zZW5zaXRpdmUKKyAgIGZpbGVzeXN0ZW0uCisKK0RvZXMgbm90IGNvbnRhaW4gYW55IG90aGVyIGRvY3VtZW50YXRpb24gdXBkYXRlcyBvciBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjE2NDY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjIudHh0CkBAIC0wLDAgKzEsMzAgQEAKK0dpdCB2Mi4xNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTYuMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBvbGQgcmVncmVzc2lvbiBpbiAiZ2l0IGRlc2NyaWJlIC0tYWxsICRhbm5vdGF0ZWRfdGFnXjAiIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogImdpdCBzdm4gZGNvbW1pdCIgZGlkIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IGEKKyAgIHN2bitzc2g6Ly8gVVJMIHdpdGggYSB1c2VybmFtZUAgKHR5cGljYWxseSB1c2VkIGZvciBwdXNoaW5nKSByZWZlcnMKKyAgIHRvIHRoZSBzYW1lIFNWTiByZXBvc2l0b3J5IHdpdGhvdXQgdGhlIHVzZXJuYW1lQCBhbmQgZmFpbGVkIHdoZW4KKyAgIHN2bi5wdXNobWVyZ2VpbmZvIG9wdGlvbiBpcyBzZXQuCisKKyAqICJnaXQgbWVyZ2UgLVhvdXJzLy1YdGhlaXJzIiBsZWFybmVkIHRvIHVzZSBvdXIvdGhlaXIgdmVyc2lvbiB3aGVuCisgICByZXNvbHZpbmcgYSBjb25mbGljdGluZyB1cGRhdGVzIHRvIGEgc3ltYm9saWMgbGluay4KKworICogImdpdCBjbG9uZSAkdGhlcmUgJGhlcmUiIGlzIGFsbG93ZWQgZXZlbiB3aGVuIGhlcmUgZGlyZWN0b3J5IGV4aXN0cworICAgYXMgbG9uZyBhcyBpdCBpcyBhbiBlbXB0eSBkaXJlY3RvcnksIGJ1dCB0aGUgY29tbWFuZCBpbmNvcnJlY3RseQorICAgcmVtb3ZlZCBpdCB1cG9uIGEgZmFpbHVyZSBvZiB0aGUgb3BlcmF0aW9uLgorCisgKiAiZ2l0IHN0YXNoIC0tIDxwYXRoc3BlYz4iIGluY29ycmVjdGx5IGJsZXcgYXdheSB1bnRyYWNrZWQgZmlsZXMgaW4KKyAgIHRoZSBkaXJlY3RvcnkgdGhhdCBtYXRjaGVkIHRoZSBwYXRoc3BlYywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGFkZCAtcCIgd2FzIHRhdWdodCB0byBpZ25vcmUgbG9jYWwgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGFzCisgICB0aGV5IGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgcGFydGlhbCBhZGRpdGlvbiBvZiByZWd1bGFyIGNoYW5nZXMKKyAgIGFueXdheS4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDEyMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjMudHh0CkBAIC0wLDAgKzEsNDkgQEAKK0dpdCB2Mi4xNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTYuMgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHN0YXR1cyIgYWZ0ZXIgbW92aW5nIGEgcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlIChoZW5jZSBtYWtpbmcKKyAgIGl0IGFwcGVhciAicmVtb3ZlZCIpIGFuZCB0aGVuIGFkZGluZyB3aXRoIHRoZSAtTiBvcHRpb24gKGhlbmNlCisgICBtYWtpbmcgdGhhdCBhcHBlYXIgImFkZGVkIikgZGV0ZWN0ZWQgaXQgYXMgYSByZW5hbWUsIGJ1dCBkaWQgbm90CisgICByZXBvcnQgdGhlICBvbGQgYW5kIG5ldyBwYXRobmFtZXMgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNvbW1pdCAtLWZpeHVwIiBkaWQgbm90IGFsbG93ICItbTxtZXNzYWdlPiIgb3B0aW9uIHRvIGJlIHVzZWQKKyAgIGF0IHRoZSBzYW1lIHRpbWU7IGFsbG93IGl0IHRvIGFubm90YXRlIHJlc3VsdGluZyBjb21taXQgd2l0aCBtb3JlCisgICB0ZXh0LgorCisgKiBXaGVuIHJlc2V0dGluZyB0aGUgd29ya2luZyB0cmVlIGZpbGVzIHJlY3Vyc2l2ZWx5LCB0aGUgd29ya2luZyB0cmVlCisgICBvZiBzdWJtb2R1bGVzIGFyZSBub3cgYWxzbyByZXNldCB0byBtYXRjaC4KKworICogRml4IGZvciBhIGNvbW1lbnRlZC1vdXQgY29kZSB0byBhZGp1c3QgaXQgdG8gYSByYXRoZXIgb2xkIEFQSSBjaGFuZ2UKKyAgIGFyb3VuZCBvYmplY3QgSUQuCisKKyAqIFdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IGNoYW5nZWQgcGF0aHMsICJnaXQgZGlmZiIgc2hvd2VkIGEgd2FybmluZworICAgbWVzc2FnZSBidXQgaW4gdGhlIG1pZGRsZSBvZiBhIGxpbmUuCisKKyAqIFRoZSBodHRwIHRyYWNpbmcgY29kZSwgb2Z0ZW4gdXNlZCB0byBkZWJ1ZyBjb25uZWN0aW9uIGlzc3VlcywKKyAgIGxlYXJuZWQgdG8gcmVkYWN0IHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBmcm9tIGl0cyBvdXRwdXQKKyAgIHNvIHRoYXQgaXQgY2FuIGJlIG1vcmUgc2FmZWx5IHNoYXJlYWJsZS4KKworICogQ3Jhc2ggZml4IGZvciBhIGNvcm5lciBjYXNlIHdoZXJlIGFuIGVycm9yIGNvZGVwYXRoIHRyaWVkIHRvIHVubG9jaworICAgd2hhdCBpdCBkaWQgbm90IGFjcXVpcmUgbG9jayBvbi4KKworICogVGhlIHNwbGl0LWluZGV4IG1vZGUgaGFkIGEgZmV3IGNvcm5lciBjYXNlIGJ1Z3MgZml4ZWQuCisKKyAqIEFzc29ydGVkIGZpeGVzIHRvICJnaXQgZGFlbW9uIi4KKworICogQ29tcGxldGlvbiBvZiAiZ2l0IG1lcmdlIC1zPHN0cmF0ZWd5PiIgKGluIGNvbnRyaWIvKSBkaWQgbm90IHdvcmsKKyAgIHdlbGwgaW4gbm9uLUMgbG9jYWxlLgorCisgKiBXb3JrYXJvdW5kIGZvciBzZWdmYXVsdCB3aXRoIG1vcmUgcmVjZW50IHZlcnNpb25zIG9mIFNWTi4KKworICogUmVjZW50bHkgaW50cm9kdWNlZCBsZWFrcyBpbiBmc2NrIGhhdmUgYmVlbiBwbHVnZ2VkLgorCisgKiBUcmF2aXMgQ0kgaW50ZWdyYXRpb24gbm93IGJ1aWxkcyB0aGUgZXhlY3V0YWJsZSBpbiAnc2NyaXB0JyBwaGFzZQorICAgdG8gZm9sbG93IHRoZSBlc3RhYmxpc2hlZCBwcmFjdGljZSwgcmF0aGVyIHRoYW4gZHVyaW5nCisgICAnYmVmb3JlX3NjcmlwdCcgcGhhc2UuICBUaGlzIGFsbG93cyB0aGUgQ0kgY2F0ZWdvcml6ZSB0aGUgZmFpbHVyZXMKKyAgIGJldHRlciAoJ2ZhaWxlZCcgaXMgcHJvamVjdCdzIGZhdWx0LCAnZXJyb3JlZCcgaXMgYnVpbGQKKyAgIGVudmlyb25tZW50J3MpLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmU1MzhiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjQudHh0CkBAIC0wLDAgKzEsNSBAQAorR2l0IHYyLjE2LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgaXMgdG8gZm9yd2FyZC1wb3J0IHRoZSBmaXhlcyBtYWRlIGluIHRoZSB2Mi4xMy43IHZlcnNpb24KK29mIEdpdC4gIFNlZSBpdHMgcmVsZWFzZSBub3RlcyBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhlZTAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjUudHh0CkBAIC0wLDAgKzEsNiBAQAorR2l0IHYyLjE2LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC41IHRvIGFkZHJlc3MKK3RoZSByZWNlbnRseSByZXBvcnRlZCBDVkUtMjAxOC0xNzQ1Njsgc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGF0Cit2ZXJzaW9uIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzODMwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuNi50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjIuMTYuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYgYW5kIGluCit2Mi4xNS40IGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LCBDVkUtMjAxOS0xMzQ5LAorQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwgQ1ZFLTIwMTktMTM1MywKK0NWRS0yMDE5LTEzNTQsIGFuZCBDVkUtMjAxOS0xMzg3OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRob3NlCit2ZXJzaW9ucyBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjE3YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjAudHh0CkBAIC0wLDAgKzEsMzk4IEBACitHaXQgMi4xNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuMTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqICJkaWZmIiBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCAiLS1maW5kLW9iamVjdD08b2JqZWN0LWlkPiIgb3B0aW9uCisgICB0byBsaW1pdCB0aGUgZmluZGluZ3MgdG8gY2hhbmdlcyB0aGF0IGludm9sdmUgdGhlIG5hbWVkIG9iamVjdC4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgdG8gZ2l2ZSA3Mi1jb2xzIHRvIGRpZmZzdGF0LCB3aGljaCBpcworICAgY29uc2lzdGVudCB3aXRoIG90aGVyIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGUgc3ViY29tbWFuZCB1c2VzIGZvcgorICAgaXRzIG91dHB1dCBtZWFudCBmb3IgZS1tYWlscy4KKworICogVGhlIGxvZyBmcm9tICJnaXQgZGFlbW9uIiBjYW4gYmUgcmVkaXJlY3RlZCB3aXRoIGEgbmV3IG9wdGlvbjsgb25lCisgICByZWxldmFudCB1c2UgY2FzZSBpcyB0byBzZW5kIHRoZSBsb2cgdG8gc3RhbmRhcmQgZXJyb3IgKGluc3RlYWQgb2YKKyAgIHN5c2xvZykgd2hlbiBydW5uaW5nIGl0IGZyb20gaW5ldGQuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkIHRvIHRha2UgIi0tYWxsb3ctZW1wdHktbWVzc2FnZSIgb3B0aW9uLgorCisgKiAiZ2l0IGFtIiBoYXMgbGVhcm5lZCB0aGUgIi0tcXVpdCIgb3B0aW9uLCBpbiBhZGRpdGlvbiB0byB0aGUKKyAgIGV4aXN0aW5nICItLWFib3J0IiBvcHRpb247IGhhdmluZyB0aGUgcGFpciBtaXJyb3JzIGEgZmV3IG90aGVyCisgICBjb21tYW5kcyBsaWtlICJyZWJhc2UiIGFuZCAiY2hlcnJ5LXBpY2siLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCIgbGVhcm5lZCB0byBydW4gdGhlIHBvc3QtY2hlY2tvdXQgaG9vaywganVzdCBsaWtlCisgICAiZ2l0IGNsb25lIiBydW5zIGl0IHVwb24gdGhlIGluaXRpYWwgY2hlY2tvdXQuCisKKyAqICJnaXQgdGFnIiBsZWFybmVkIGFuIGV4cGxpY2l0ICItLWVkaXQiIG9wdGlvbiB0aGF0IGFsbG93cyB0aGUKKyAgIG1lc3NhZ2UgZ2l2ZW4gdmlhICItbSIgYW5kICItRiIgdG8gYmUgZnVydGhlciBlZGl0ZWQuCisKKyAqICJnaXQgZmV0Y2ggLS1wcnVuZS10YWdzIiBtYXkgYmUgdXNlZCBhcyBhIGhhbmR5IHNob3J0LWhhbmQgZm9yCisgICBnZXR0aW5nIHJpZCBvZiBzdGFsZSB0YWdzIHRoYXQgYXJlIGxvY2FsbHkgaGVsZC4KKworICogVGhlIG5ldyAiLS1zaG93LWN1cnJlbnQtcGF0Y2giIG9wdGlvbiBnaXZlcyBhbiBlbmQtdXNlciBmYWNpbmcgd2F5CisgICB0byBnZXQgdGhlIGRpZmYgYmVpbmcgYXBwbGllZCB3aGVuICJnaXQgcmViYXNlIiAoYW5kICJnaXQgYW0iKQorICAgc3RvcHMgd2l0aCBhIGNvbmZsaWN0LgorCisgKiAiZ2l0IGFkZCAtcCIgdXNlZCB0byBvZmZlciAiLyIgKGxvb2sgZm9yIGEgbWF0Y2hpbmcgaHVuaykgYXMgYQorICAgY2hvaWNlLCBldmVuIHRoZXJlIHdhcyBvbmx5IG9uZSBodW5rLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICBBbHNvIHRoZSBzaW5nbGUta2V5IGhlbHAgaXMgbm93IGdpdmVuIG9ubHkgZm9yIGtleXMgdGhhdCBhcmUKKyAgIGVuYWJsZWQgKGUuZy4gaGVscCBmb3IgJy8nIHdvbid0IGJlIHNob3duIHdoZW4gdGhlcmUgaXMgb25seSBvbmUKKyAgIGh1bmspLgorCisgKiBTaW5jZSBHaXQgMS43LjksICJnaXQgbWVyZ2UiIGRlZmF1bHRlZCB0byAtLW5vLWZmIChpLmUuIGV2ZW4gd2hlbgorICAgdGhlIHNpZGUgYnJhbmNoIGJlaW5nIG1lcmdlZCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgY29tbWl0LAorICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IGluc3RlYWQgb2YgZmFzdC1mb3J3YXJkaW5nKSB3aGVuIG1lcmdpbmcgYQorICAgdGFnIG9iamVjdC4gIFRoaXMgd2FzIGFwcHJvcHJpYXRlIGRlZmF1bHQgZm9yIGludGVncmF0b3JzIHdobyBwdWxsCisgICBzaWduZWQgdGFncyBmcm9tIHRoZWlyIGRvd25zdHJlYW0gY29udHJpYnV0b3JzLCBidXQgY2F1c2VkIGFuCisgICB1bm5lY2Vzc2FyeSBtZXJnZXMgd2hlbiB1c2VkIGJ5IGRvd25zdHJlYW0gY29udHJpYnV0b3JzIHdobworICAgaGFiaXR1YWxseSAiY2F0Y2ggdXAiIHRoZWlyIHRvcGljIGJyYW5jaGVzIHdpdGggdGFnZ2VkIHJlbGVhc2VzCisgICBmcm9tIHRoZSB1cHN0cmVhbS4gIFVwZGF0ZSAiZ2l0IG1lcmdlIiB0byBkZWZhdWx0IHRvIC0tbm8tZmYgb25seQorICAgd2hlbiBtZXJnaW5nIGEgdGFnIG9iamVjdCB0aGF0IGRvZXMgKm5vdCogc2l0IGF0IGl0cyB1c3VhbCBwbGFjZSBpbgorICAgcmVmcy90YWdzLyBoaWVyYXJjaHksIGFuZCBhbGxvdyBmYXN0LWZvcndhcmRpbmcgb3RoZXJ3aXNlLCB0bworICAgbWl0aWdhdGUgdGhlIHByb2JsZW0uCisKKyAqICJnaXQgc3RhdHVzIiBjYW4gc3BlbmQgYSBsb3Qgb2YgY3ljbGVzIHRvIGNvbXB1dGUgdGhlIHJlbGF0aW9uCisgICBiZXR3ZWVuIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgaXRzIHVwc3RyZWFtLCB3aGljaCBjYW4gbm93IGJlCisgICBkaXNhYmxlZCB3aXRoICItLW5vLWFoZWFkLWJlaGluZCIgb3B0aW9uLgorCisgKiAiZ2l0IGRpZmYiIGFuZCBmcmllbmRzIGxlYXJuZWQgZnVuY25hbWUgcGF0dGVybnMgZm9yIEdvIGxhbmd1YWdlCisgICBzb3VyY2UgZmlsZXMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCAiLS1yZXBseS10bz08YWRkcmVzcz4iIG9wdGlvbi4KKworICogRnVuY25hbWUgcGF0dGVybiB1c2VkIGZvciBDIyBub3cgcmVjb2duaXplcyAiYXN5bmMiIGtleXdvcmQuCisKKyAqIEluIGEgd2F5IHNpbWlsYXIgdG8gaG93ICJnaXQgdGFnIiBsZWFybmVkIHRvIGhvbm9yIHRoZSBwYWdlcgorICAgc2V0dGluZyBvbmx5IGluIHRoZSBsaXN0IG1vZGUsICJnaXQgY29uZmlnIiBsZWFybmVkIHRvIGlnbm9yZSB0aGUKKyAgIHBhZ2VyIHNldHRpbmcgd2hlbiBpdCBpcyB1c2VkIGZvciBzZXR0aW5nIHZhbHVlcyAoaS5lLiB3aGVuIHRoZQorICAgcHVycG9zZSBvZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCB0byAic2hvdyIpLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIE1vcmUgcGVyZiB0ZXN0cyBmb3IgdGhyZWFkZWQgZ3JlcAorCisgKiAicGVyZiIgdGVzdCBvdXRwdXQgY2FuIGJlIHNlbnQgdG8gY29kZXNwZWVkIHNlcnZlci4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBmb3IgcGVybC8gcGFydCBoYXMgYmVlbiBncmVhdGx5IHNpbXBsaWZpZWQgYnkKKyAgIHdlYW5pbmcgb3Vyc2VsdmVzIG9mZiBvZiBNYWtlTWFrZXIuCisKKyAqIFBlcmwgNS44IG9yIGdyZWF0ZXIgaGFzIGJlZW4gcmVxdWlyZWQgc2luY2UgR2l0IDEuNy40IHJlbGVhc2VkIGluCisgICAyMDEwLCBidXQgd2UgY29udGludWVkIHRvIGFzc3VtZSBzb21lIGNvcmUgbW9kdWxlcyBtYXkgbm90IGV4aXN0IGFuZAorICAgdXNlZCBhIGNvbmRpdGlvbmFsICJldmFsIHsgcmVxdWlyZSA8PG1vZHVsZT4+IH0iOyB3ZSBubyBsb25nZXIgZG8KKyAgIHRoaXMuICBTb21lIHBsYXRmb3JtcyAoRmVkb3JhL1JlZEhhdC9DZW50T1MsIGZvciBleGFtcGxlKSBzaGlwIFBlcmwKKyAgIHdpdGhvdXQgYWxsIGNvcmUgbW9kdWxlcyBieSBkZWZhdWx0IChlLmcuIERpZ2VzdDo6TUQ1LCBGaWxlOjpUZW1wLAorICAgRmlsZTo6U3BlYywgTmV0OjpEb21haW4sIE5ldDo6U01UUCkuICBVc2VycyBvbiBzdWNoIHBsYXRmb3JtcyBtYXkKKyAgIG5lZWQgdG8gaW5zdGFsbCB0aGVzZSBhZGRpdGlvbmFsIG1vZHVsZXMuCisKKyAqIEFzIGEgY29udmVuaWVuY2UsIHdlIGluc3RhbGwgY29waWVzIG9mIFBlcmwgbW9kdWxlcyB3ZSByZXF1aXJlIHdoaWNoCisgICBhcmUgbm90IHBhcnQgb2YgdGhlIGNvcmUgUGVybCBkaXN0cmlidXRpb24gKGUuZy4gRXJyb3IgYW5kCisgICBNYWlsOjpBZGRyZXNzKS4gIFVzZXJzIGFuZCBwYWNrYWdlcnMgd2hvc2Ugb3BlcmF0aW5nIHN5c3RlbSBwcm92aWRlcworICAgdGhlc2UgbW9kdWxlcyBjYW4gc2V0IE5PX1BFUkxfQ1BBTl9GQUxMQkFDS1MgdG8gYXZvaWQgaW5zdGFsbGluZyB0aGUKKyAgIGJ1bmRsZWQgbW9kdWxlcy4KKworICogSW4gcHJlcGFyYXRpb24gZm9yIGltcGxlbWVudGluZyBuYXJyb3cvcGFydGlhbCBjbG9uZSwgdGhlIG1hY2hpbmVyeQorICAgZm9yIGNoZWNraW5nIG9iamVjdCBjb25uZWN0aXZpdHkgdXNlZCBieSBnYyBhbmQgZnNjayBoYXMgYmVlbgorICAgdGF1Z2h0IHRoYXQgYSBtaXNzaW5nIG9iamVjdCBpcyBPSyB3aGVuIGl0IGlzIHJlZmVyZW5jZWQgYnkgYQorICAgcGFja2ZpbGUgc3BlY2lhbGx5IG1hcmtlZCBhcyBjb21pbmcgZnJvbSB0cnVzdGVkIHJlcG9zaXRvcnkgdGhhdAorICAgcHJvbWlzZXMgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSBvbi1kZW1hbmQgYW5kIGxhemlseS4KKworICogVGhlIG1hY2hpbmVyeSB0byBjbG9uZSAmIGZldGNoLCB3aGljaCBpbiB0dXJuIGludm9sdmVzIHBhY2tpbmcgYW5kCisgICB1bnBhY2tpbmcgb2JqZWN0cywgaGFzIGJlZW4gdG9sZCBob3cgdG8gb21pdCBjZXJ0YWluIG9iamVjdHMgdXNpbmcKKyAgIHRoZSBmaWx0ZXJpbmcgbWVjaGFuaXNtIGludHJvZHVjZWQgYnkgYW5vdGhlciB0b3BpYy4gIEl0IG5vdyBrbm93cworICAgdG8gbWFyayB0aGUgcmVzdWx0aW5nIHBhY2sgYXMgYSBwcm9taXNvciBwYWNrIHRvIHRvbGVyYXRlIG1pc3NpbmcKKyAgIG9iamVjdHMsIGxheWluZyBmb3VuZGF0aW9uIGZvciAibmFycm93IiBjbG9uZXMuCisKKyAqIFRoZSBmaXJzdCBzdGVwIHRvIGdldHRpbmcgcmlkIG9mIG1ydSBBUEkgYW5kIHVzaW5nIHRoZQorICAgZG91Ymx5LWxpbmtlZCBsaXN0IEFQSSBkaXJlY3RseSBpbnN0ZWFkLgorCisgKiBSZXRpcmUgbXJ1IEFQSSBhcyBpdCBkb2VzIG5vdCBnaXZlIGVub3VnaCBhYnN0cmFjdGlvbiBvdmVyCisgICB1bmRlcmx5aW5nIGxpc3QgQVBJIHRvIGJlIHdvcnRoIGl0LgorCisgKiBSZXdyaXRlIHR3byBtb3JlICJnaXQgc3VibW9kdWxlIiBzdWJjb21tYW5kcyBpbiBDLgorCisgKiBUaGUgdHJhY2luZyBtYWNoaW5lcnkgbGVhcm5lZCB0byByZXBvcnQgdHdlYWtpbmcgb2YgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlcyBhcyB3ZWxsLgorCisgKiBVcGRhdGUgQ29jY2luZWxsZSBydWxlcyB0byBjYXRjaCBhbmQgb3B0aW1pemUgc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzIiwgc3RyKQorCisgKiBQcmV2ZW50ICJjbGFuZy1mb3JtYXQiIGZyb20gYnJlYWtpbmcgbGluZSBhZnRlciBmdW5jdGlvbiByZXR1cm4gdHlwZS4KKworICogVGhlIHNlcXVlbmNlciBpbmZyYXN0cnVjdHVyZSBpcyBzaGFyZWQgYWNyb3NzICJnaXQgY2hlcnJ5LXBpY2siLAorICAgImdpdCByZWJhc2UgLWkiLCBldGMuLCBhbmQgaGFzIGFsd2F5cyBzcGF3bmVkICJnaXQgY29tbWl0IiB3aGVuIGl0CisgICBuZWVkcyB0byBjcmVhdGUgYSBjb21taXQuICBJdCBoYXMgYmVlbiB0YXVnaHQgdG8gZG8gc28gaW50ZXJuYWxseSwKKyAgIHdoZW4gYWJsZSwgYnkgcmV1c2luZyB0aGUgY29kZXBhdGggImdpdCBjb21taXQiIGl0c2VsZiB1c2VzLCB3aGljaAorICAgZ2l2ZXMgcGVyZm9ybWFuY2UgYm9vc3QgZm9yIGEgZmV3IHRlbnMgb2YgcGVyY2VudHMgaW4gc29tZSBzYW1wbGUKKyAgIHNjZW5hcmlvcy4KKworICogUHVzaCB0aGUgc3VibW9kdWxlIHZlcnNpb24gb2YgY29sbGlzaW9uLWRldGVjdGluZyBTSEEtMSBoYXNoCisgICBpbXBsZW1lbnRhdGlvbiBhIGJpdCBoYXJkZXIgb24gYnVpbGRlcnMuCisKKyAqIEF2b2lkIG1tYXBwaW5nIHNtYWxsIGZpbGVzIHdoaWxlIHVzaW5nIHBhY2tlZCByZWZzIChlc3BlY2lhbGx5IG9uZXMKKyAgIHdpdGggemVybyBzaXplLCB3aGljaCB3b3VsZCBjYXVzZSBsYXRlciBtdW5tYXAoKSB0byBmYWlsKS4KKworICogQ29udmVyc2lvbiBmcm9tIHVjaGFyWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogTW9yZSB0ZXN0cyBmb3Igd2lsZG1hdGNoIGZ1bmN0aW9ucy4KKworICogVGhlIGNvZGUgdG8gYmluYXJ5IHNlYXJjaCBzdGFydGluZyBmcm9tIGEgZmFuLW91dCB0YWJsZSAod2hpY2ggaXMKKyAgIGhvdyB0aGUgcGFja2ZpbGUgaXMgaW5kZXhlZCB3aXRoIG9iamVjdCBuYW1lcykgaGFzIGJlZW4gcmVmYWN0b3JlZAorICAgaW50byBhIHJldXNhYmxlIGhlbHBlci4KKworICogV2Ugbm93IGF2b2lkIHVzaW5nIGlkZW50aWZpZXJzIHRoYXQgY2xhc2ggd2l0aCBDKysga2V5d29yZHMuICBFdmVuCisgICB0aG91Z2ggaXQgaXMgbm90IGEgZ29hbCB0byBjb21waWxlIEdpdCB3aXRoIEMrKyBjb21waWxlcnMsIGNoYW5nZXMKKyAgIGxpa2UgdGhpcyBoZWxwIHVzZSBvZiBjb2RlIGFuYWx5c2lzIHRvb2xzIHRoYXQgdGFyZ2V0cyBDKysgb24gb3VyCisgICBjb2RlYmFzZS4KKworICogVGhlIGV4ZWN1dGFibGUgaXMgbm93IGJ1aWx0IGluICdzY3JpcHQnIHBoYXNlIGluIFRyYXZpcyBDSSBpbnRlZ3JhdGlvbiwKKyAgIHRvIGZvbGxvdyB0aGUgZXN0YWJsaXNoZWQgcHJhY3RpY2UsIHJhdGhlciB0aGFuIGR1cmluZyAnYmVmb3JlX3NjcmlwdCcKKyAgIHBoYXNlLiAgVGhpcyBhbGxvd3MgdGhlIENJIGNhdGVnb3JpemUgdGhlIGZhaWx1cmVzIGJldHRlciAoJ2ZhaWxlZCcKKyAgIGlzIHByb2plY3QncyBmYXVsdCwgJ2Vycm9yZWQnIGlzIGJ1aWxkIGVudmlyb25tZW50J3MpLgorICAgKG1lcmdlIDNjOTNiODI5MjAgc2cvdHJhdmlzLWJ1aWxkLWR1cmluZy1zY3JpcHQtcGhhc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXcml0aW5nIG91dCB0aGUgaW5kZXggZmlsZSB3aGVuIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2hhbmdlZCBpbiBpdAorICAgaXMgdGhlIHVudHJhY2tlZCBjYWNoZSBpbmZvcm1hdGlvbiBpcyBvZnRlbiB3YXN0ZWZ1bCwgYW5kIHRoaXMgaGFzCisgICBiZWVuIG9wdGltaXplZCBvdXQuCisKKyAqIFZhcmlvdXMgcGllY2VzIG9mIFBlcmwgY29kZSB3ZSBoYXZlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBJbnRlcm5hbCBBUEkgY2xlYW4tdXAgdG8gYWxsb3cgd3JpdGVfbG9ja2VkX2luZGV4KCkgb3B0aW9uYWxseSBza2lwCisgICB3cml0aW5nIHRoZSBpbi1jb3JlIGluZGV4IHdoZW4gaXQgaXMgbm90IG1vZGlmaWVkLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjE2CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBvbGQgcmVncmVzc2lvbiBpbiAiZ2l0IGRlc2NyaWJlIC0tYWxsICRhbm5vdGF0ZWRfdGFnXjAiIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogImdpdCBzdGF0dXMiIGFmdGVyIG1vdmluZyBhIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZSAoaGVuY2UgbWFraW5nCisgICBpdCBhcHBlYXIgInJlbW92ZWQiKSBhbmQgdGhlbiBhZGRpbmcgd2l0aCB0aGUgLU4gb3B0aW9uIChoZW5jZQorICAgbWFraW5nIHRoYXQgYXBwZWFyICJhZGRlZCIpIGRldGVjdGVkIGl0IGFzIGEgcmVuYW1lLCBidXQgZGlkIG5vdAorICAgcmVwb3J0IHRoZSAgb2xkIGFuZCBuZXcgcGF0aG5hbWVzIGNvcnJlY3RseS4KKworICogImdpdCBzdm4gZGNvbW1pdCIgZGlkIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGUgZmFjdCB0aGF0IGEKKyAgIHN2bitzc2g6Ly8gVVJMIHdpdGggYSB1c2VybmFtZUAgKHR5cGljYWxseSB1c2VkIGZvciBwdXNoaW5nKSByZWZlcnMKKyAgIHRvIHRoZSBzYW1lIFNWTiByZXBvc2l0b3J5IHdpdGhvdXQgdGhlIHVzZXJuYW1lQCBhbmQgZmFpbGVkIHdoZW4KKyAgIHN2bi5wdXNobWVyZ2VpbmZvIG9wdGlvbiBpcyBzZXQuCisKKyAqIEFQSSBjbGVhbi11cCBhcm91bmQgcmV2aXNpb24gdHJhdmVyc2FsLgorCisgKiAiZ2l0IG1lcmdlIC1Yb3Vycy8tWHRoZWlycyIgbGVhcm5lZCB0byB1c2Ugb3VyL3RoZWlyIHZlcnNpb24gd2hlbgorICAgcmVzb2x2aW5nIGEgY29uZmxpY3RpbmcgdXBkYXRlcyB0byBhIHN5bWJvbGljIGxpbmsuCisKKyAqICJnaXQgY2xvbmUgJHRoZXJlICRoZXJlIiBpcyBhbGxvd2VkIGV2ZW4gd2hlbiBoZXJlIGRpcmVjdG9yeSBleGlzdHMKKyAgIGFzIGxvbmcgYXMgaXQgaXMgYW4gZW1wdHkgZGlyZWN0b3J5LCBidXQgdGhlIGNvbW1hbmQgaW5jb3JyZWN0bHkKKyAgIHJlbW92ZWQgaXQgdXBvbiBhIGZhaWx1cmUgb2YgdGhlIG9wZXJhdGlvbi4KKworICogImdpdCBjb21taXQgLS1maXh1cCIgZGlkIG5vdCBhbGxvdyAiLW08bWVzc2FnZT4iIG9wdGlvbiB0byBiZSB1c2VkCisgICBhdCB0aGUgc2FtZSB0aW1lOyBhbGxvdyBpdCB0byBhbm5vdGF0ZSByZXN1bHRpbmcgY29tbWl0IHdpdGggbW9yZQorICAgdGV4dC4KKworICogV2hlbiByZXNldHRpbmcgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyByZWN1cnNpdmVseSwgdGhlIHdvcmtpbmcgdHJlZQorICAgb2Ygc3VibW9kdWxlcyBhcmUgbm93IGFsc28gcmVzZXQgdG8gbWF0Y2guCisKKyAqICJnaXQgc3Rhc2ggLS0gPHBhdGhzcGVjPiIgaW5jb3JyZWN0bHkgYmxldyBhd2F5IHVudHJhY2tlZCBmaWxlcyBpbgorICAgdGhlIGRpcmVjdG9yeSB0aGF0IG1hdGNoZWQgdGhlIHBhdGhzcGVjLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEluc3RlYWQgb2YgbWFpbnRhaW5pbmcgaG9tZS1ncm93biBlbWFpbCBhZGRyZXNzIHBhcnNpbmcgY29kZSwgc2hpcAorICAgYSBjb3B5IG9mIHJlYXNvbmFibHkgcmVjZW50IE1haWw6OkFkZHJlc3MgdG8gYmUgdXNlZCBhcyBhIGZhbGxiYWNrCisgICBpbiAnZ2l0IHNlbmQtZW1haWwnIHdoZW4gdGhlIHBsYXRmb3JtIGxhY2tzIGl0LgorICAgKG1lcmdlIGQ2MGJlOGFjYWIgbW0vc2VuZC1lbWFpbC1mYWxsYmFjay10by1sb2NhbC1tYWlsLWFkZHJlc3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFkZCAtcCIgd2FzIHRhdWdodCB0byBpZ25vcmUgbG9jYWwgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGFzCisgICB0aGV5IGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgcGFydGlhbCBhZGRpdGlvbiBvZiByZWd1bGFyIGNoYW5nZXMKKyAgIGFueXdheS4KKworICogQXZvaWQgc2hvd2luZyBhIHdhcm5pbmcgbWVzc2FnZSBpbiB0aGUgbWlkZGxlIG9mIGEgbGluZSBvZiAiZ2l0CisgICBkaWZmIiBvdXRwdXQuCisgICAobWVyZ2UgNGUwNTZjOTg5ZiBuZC9kaWZmLWZsdXNoLWJlZm9yZS13YXJuaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGh0dHAgdHJhY2luZyBjb2RlLCBvZnRlbiB1c2VkIHRvIGRlYnVnIGNvbm5lY3Rpb24gaXNzdWVzLAorICAgbGVhcm5lZCB0byByZWRhY3QgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGZyb20gaXRzIG91dHB1dAorICAgc28gdGhhdCBpdCBjYW4gYmUgbW9yZSBzYWZlbHkgc2hhcmVhYmxlLgorICAgKG1lcmdlIDhiYTE4ZTZmYTQganQvaHR0cC1yZWRhY3QtY29va2llcyBsYXRlciB0byBtYWludCkuCisKKyAqIENyYXNoIGZpeCBmb3IgYSBjb3JuZXIgY2FzZSB3aGVyZSBhbiBlcnJvciBjb2RlcGF0aCB0cmllZCB0byB1bmxvY2sKKyAgIHdoYXQgaXQgZGlkIG5vdCBhY3F1aXJlIGxvY2sgb24uCisgICAobWVyZ2UgODFmY2I2OThlMCBtci9wYWNrZWQtcmVmLXN0b3JlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzcGxpdC1pbmRleCBtb2RlIGhhZCBhIGZldyBjb3JuZXIgY2FzZSBidWdzIGZpeGVkLgorICAgKG1lcmdlIGFlNTlhNGU0NGYgdGcvc3BsaXQtaW5kZXgtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBc3NvcnRlZCBmaXhlcyB0byAiZ2l0IGRhZW1vbiIuCisgICAobWVyZ2UgZWQxNWU1OGVmZSBqay9kYWVtb24tZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb21wbGV0aW9uIG9mICJnaXQgbWVyZ2UgLXM8c3RyYXRlZ3k+IiAoaW4gY29udHJpYi8pIGRpZCBub3Qgd29yaworICAgd2VsbCBpbiBub24tQyBsb2NhbGUuCisgICAobWVyZ2UgN2NjNzYzYWFhMyBuZC9saXN0LW1lcmdlLXN0cmF0ZWd5IGxhdGVyIHRvIG1haW50KS4KKworICogV29ya2Fyb3VuZCBmb3Igc2VnZmF1bHQgd2l0aCBtb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBTVk4uCisgICAobWVyZ2UgN2Y2Zjc1ZTk3YSBldy9zdm4tYnJhbmNoLXNlZ2ZhdWx0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFBsdWcgcmVjZW50bHkgaW50cm9kdWNlZCBsZWFrcyBpbiBmc2NrLgorICAgKG1lcmdlIGJhM2EwOGNhMGUganQvZnNjay1jb2RlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGRpZCBub3QgcGFzcyB2ZXJib3NpdHkgc2V0dGluZyBkb3duIHdoZW4KKyAgIHJlY3Vyc2luZyBpbnRvIGEgc3VibW9kdWxlLgorICAgKG1lcmdlIGE1Njc3MWE2Njggc2IvcHVsbC1yZWJhc2Utc3VibW9kdWxlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHdheSAiZ2l0IHJlc2V0IC0taGFyZCIgcmVwb3J0cyB0aGUgY29tbWl0IHRoZSB1cGRhdGVkIEhFQUQKKyAgIHBvaW50cyBhdCBpcyBtYWRlIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IGhvdyB0aGUgY29tbWl0IHRpdGxlIGlzCisgICBnZW5lcmF0ZWQgYnkgdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uICBUaGlzIG1hdHRlcnMgd2hlbiB0aGUKKyAgIHRpdGxlIGlzIHNwcmVhZCBhY3Jvc3MgcGh5c2ljYWxseSBtdWx0aXBsZSBsaW5lcy4KKyAgIChtZXJnZSAxY2Y4MjNmYjY4IHRnL3Jlc2V0LWhhcmQtc2hvdy1oZWFkLXdpdGgtcHJldHR5IGxhdGVyIHRvIG1haW50KS4KKworICogVGVzdCBmaXhlcy4KKyAgIChtZXJnZSA2M2IxYTE3NWVlIHNnL3Rlc3QtaTE4bmdyZXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIGJ1Z3MgYXJvdW5kICJ1bnRyYWNrZWQgY2FjaGUiIGZlYXR1cmUgaGF2ZSBiZWVuIGZpeGVkLiAgVGhpcworICAgd2lsbCBub3RpY2UgY29ycnVwdCBkYXRhIGluIHRoZSB1bnRyYWNrZWQgY2FjaGUgbGVmdCBieSBvbGQgYW5kCisgICBidWdneSBjb2RlIGFuZCBpc3N1ZSBhIHdhcm5pbmctLS10aGUgaW5kZXggY2FuIGJlIGZpeGVkIGJ5IGNsZWFyaW5nCisgICB0aGUgdW50cmFja2VkIGNhY2hlIGZyb20gaXQuCisgICAobWVyZ2UgMGNhY2ViZjA5OSBuZC9maXgtdW50cmFja2VkLWNhY2hlLWludmFsaWRhdGlvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2JmMGJlNzUwMSBhYi91bnRyYWNrZWQtY2FjaGUtaW52YWxpZGF0aW9uLWRvY3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIEhFQUQgQ09QWUlORyIgaW4gYSBiYXJlIHJlcG9zaXRvcnkgZmFpbGVkIHRvIHJ1biwgd2hpbGUKKyAgICJnaXQgYmxhbWUgSEVBRCAtLSBDT1BZSU5HIiBydW4ganVzdCBmaW5lLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYWRkIiBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIGJ1dCBzcGVsbGluZyB0aGUgZGlyZWN0b3J5CisgICBwYXRoIGluIGRpZmZlcmVudCBjYXNlcyBvbiBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGNvcnJ1cHRlZAorICAgdGhlIG5hbWUgaGFzaCBkYXRhIHN0cnVjdHVyZSBhbmQgbGVkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gIFRoaXMKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBjOTU1MjVlOTBkIGJwL25hbWUtaGFzaC1kaXJuYW1lLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1wIiBtYW5nbGVkIGxvZyBtZXNzYWdlcyBvZiBhIG1lcmdlIGNvbW1pdCwgd2hpY2ggaXMKKyAgIG5vdyBmaXhlZC4KKyAgIChtZXJnZSBlZDUxNDRkN2ViIGpzL2ZpeC1tZXJnZS1hcmctcXVvdGluZy1pbi1yZWJhc2UtcCBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgbG93IGxldmVsIHByb3RvY29sIGNvZGVwYXRoIGNvdWxkIGNyYXNoIHdoZW4gdGhleSBnZXQgYW4KKyAgIHVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0LCB3aGljaCBpcyBub3cgZml4ZWQuCisgICAobWVyZ2UgYmIxMzU2ZGM2NCBqcy9wYWNrZXQtcmVhZC1saW5lLWNoZWNrLW51bGwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrLWlnbm9yZSIgd2l0aCBtdWx0aXBsZSBwYXRocyBnb3QgY29uZnVzZWQgd2hlbiBvbmUgaXMgYQorICAgZmlsZSBhbmQgdGhlIG90aGVyIGlzIGEgZGlyZWN0b3J5LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBkNjA3NzFlOTMwIHJzL2NoZWNrLWlnbm9yZS1tdWx0aSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGVzY3JpYmUgJGdhcmJhZ2UiIHN0b3BwZWQgZ2l2aW5nIGFueSBlcnJvcnMgd2hlbiB0aGUgZ2FyYmFnZQorICAgaGFwcGVucyB0byBiZSBhIHN0cmluZyB3aXRoIDQwIGhleGFkZWNpbWFsIGxldHRlcnMuCisgICAobWVyZ2UgYThlN2EyYmYwZiBzYi9kZXNjcmliZS1ibG9iIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSB0byB1bnF1b3RlIHNpbmdsZS1xdW90ZWQgc3RyaW5nICh1c2VkIGluIHRoZSBwYXJzZXIgZm9yCisgICBjb25maWd1cmF0aW9uIGZpbGVzLCBldGMuKSBkaWQgbm90IGRpYWdub3NlIGJvZ3VzIGlucHV0IGNvcnJlY3RseQorICAgYW5kIHByb2R1Y2VkIGJvZ3VzIHJlc3VsdHMgaW5zdGVhZC4KKyAgIChtZXJnZSBkZGJiZjhlYjI1IGprL3NxLWRlcXVvdGUtb24tYm9ndXMtaW5wdXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNYW55IHBsYWNlcyBpbiAiZ2l0IGFwcGx5IiBrbmV3IHRoYXQgIi9kZXYvbnVsbCIgdGhhdCBzaWduYWxzCisgICAidGhlcmUgaXMgbm8gc3VjaCBmaWxlIG9uIHRoaXMgc2lkZSBvZiB0aGUgZGlmZiIgY2FuIGJlIGZvbGxvd2VkIGJ5CisgICB3aGl0ZXNwYWNlIGFuZCBnYXJiYWdlIHdoZW4gcGFyc2luZyBhIHBhdGNoLCBleGNlcHQgZm9yIG9uZSwgd2hpY2gKKyAgIG1hZGUgYW4gb3RoZXJ3aXNlIHZhbGlkIHBhdGNoIChlLmcuIG9uZXMgZnJvbSBzdWJ2ZXJzaW9uKSByZWplY3RlZC4KKyAgIChtZXJnZSBlNDU0YWQ0YmVjIHRrL2FwcGx5LWRldi1udWxsLXZlcmlmeS1uYW1lLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIG5vIGxvbmdlciBjcmVhdGUgYW55ICouc3BlYyBmaWxlLCBzbyAibWFrZSBjbGVhbiIgc2hvdWxkIG5vdAorICAgcmVtb3ZlIGl0LgorICAgKG1lcmdlIDQzMjFiZGNhYmIgdHovZG8tbm90LWNsZWFuLXNwZWMtZmlsZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVzaCIgb3ZlciBodHRwIHRyYW5zcG9ydCBkaWQgbm90IHVucXVvdGUgdGhlIHB1c2gtb3B0aW9ucworICAgY29ycmVjdGx5LgorICAgKG1lcmdlIDkwZGNlMjFlYjAgamsvcHVzaC1vcHRpb25zLXZpYS10cmFuc3BvcnQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIHRvIGNvbXBsYWluIHdoZW4gdGhlIGJhdGNoLXNpemUgb3B0aW9uIGlzCisgICBub3QgZGVmaW5lZCB3aGVuIHRoZSByZWxvZ2luLWRlbGF5IG9wdGlvbiBpcywgc2luY2UgdGhlc2UgdHdvIGFyZQorICAgbXV0dWFsbHkgcmVxdWlyZWQuCisgICAobWVyZ2UgOWNhYTcwNjk3YiB4ei9zZW5kLWVtYWlsLWJhdGNoLXNpemUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBZMmsyMCBmaXggOy0pIGZvciBvdXIgcGVybCBzY3JpcHRzLgorICAgKG1lcmdlIGE0MGUwNmVlMzMgYncvcGVybC10aW1lZ20tdGltZWxvY2FsLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRocmVhZGVkICJnaXQgZ3JlcCIgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGF2b2lkIGFsbG9jYXRpb24gaW4gY29kZQorICAgc2VjdGlvbiB0aGF0IGlzIGNvdmVyZWQgdW5kZXIgYSBtdXRleC4KKyAgIChtZXJnZSAzOGVmMjRkY2NmIHJ2L2dyZXAtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VidHJlZSIgc2NyaXB0IChpbiBjb250cmliLykgc2NyaXB0ZWQgYXJvdW5kICJnaXQgbG9nIiwgd2hvc2UKKyAgIG91dHB1dCBnb3QgYWZmZWN0ZWQgYnkgZW5kLXVzZXIgY29uZmlndXJhdGlvbiBsaWtlIGxvZy5zaG93c2lnbmF0dXJlCisgICAobWVyZ2UgODg0MWI1MjIyYyBzZy9zdWJ0cmVlLXNpZ25lZC1jb21taXRzIGxhdGVyIHRvIG1haW50KS4KKworICogV2hpbGUgZmluZGluZyB1bmlxdWUgb2JqZWN0IG5hbWUgYWJicmV2aWF0aW9uLCB0aGUgY29kZSBtYXkKKyAgIGFjY2lkZW50YWxseSBoYXZlIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFycmF5IG9mIG9iamVjdCBuYW1lcworICAgaW4gYSBwYWNrLgorICAgKG1lcmdlIDIxYWJlZDUwMGMgZHMvZmluZC11bmlxdWUtYWJicmV2LW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogTWljcm8gb3B0aW1pemF0aW9uIGluIHJldmlzaW9uIHRyYXZlcnNhbCBjb2RlLgorICAgKG1lcmdlIGViYmVkM2JhMDQgZHMvbWFyay1wYXJlbnRzLXVuaW50ZXJlc3Rpbmctb3B0aW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNvbW1pdCIgdXNlZCB0byBydW4gImdjIC0tYXV0byIgbmVhciB0aGUgZW5kLCB3aGljaCB3YXMgbG9zdAorICAgd2hlbiB0aGUgY29tbWFuZCB3YXMgcmVpbXBsZW1lbnRlZCBpbiBDIGJ5IG1pc3Rha2UuCisgICAobWVyZ2UgMDk1Yzc0MWVkZCBhYi9nYy1hdXRvLWluLWNvbW1pdCBsYXRlciB0byBtYWludCkuCisKKyAqIEFsbG93IHJ1bm5pbmcgYSBjb3VwbGUgb2YgdGVzdHMgd2l0aCAic2ggLXgiLgorICAgKG1lcmdlIGMyMGJmOTRhYmMgc2cvY3ZzLXRlc3RzLXdpdGgteCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlcGF0aCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGluIHRoZSBpbmRleCBoYWQgYSBidWcgaW4KKyAgIHVwZGF0aW5nIHRoZSBuYW1lIGhhc2ggc3RydWN0dXJlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSAwZTI2N2I3YTI0IGJwL3JlZnJlc2gtY2FjaGUtZW50LXJlaGFzaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdHJhbnNmZXIuZnNja29iamVjdHMgY29uZmlndXJhdGlvbiB0ZWxscyAiZ2l0IGZldGNoIiB0bworICAgdmFsaWRhdGUgdGhlIGRhdGEgYW5kIGNvbm5lY3RlZC1uZXNzIG9mIG9iamVjdHMgaW4gdGhlIHJlY2VpdmVkCisgICBwYWNrOyB0aGUgY29kZSB0byBwZXJmb3JtIHRoaXMgY2hlY2sgaGFzIGJlZW4gdGF1Z2h0IGFib3V0IHRoZQorICAgbmFycm93IGNsb25lJ3MgY29udmVudGlvbiB0aGF0IG1pc3Npbmcgb2JqZWN0cyB0aGF0IGFyZSByZWFjaGFibGUKKyAgIGZyb20gb2JqZWN0cyBpbiBhIHBhY2sgdGhhdCBjYW1lIGZyb20gYSBwcm9taXNvciByZW1vdGUgaXMgT0suCisKKyAqIFRoZXJlIHdhcyBhbiB1bnVzZWQgZmlsZS1zY29wZSBzdGF0aWMgdmFyaWFibGUgbGVmdCBpbiBodHRwLmMgd2hlbgorICAgYnVpbGRpbmcgZm9yIHZlcnNpb25zIG9mIGxpYkNVUkwgdGhhdCBpcyBvbGRlciB0aGFuIDcuMTkuNCwgd2hpY2gKKyAgIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGI4ZmQ2MDA4ZWMgcmovaHR0cC1jb2RlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTaGVsbCBzY3JpcHQgcG9ydGFiaWxpdHkgZml4LgorICAgKG1lcmdlIDIwNmE2YWUwMTMgbWwvZmlsdGVyLWJyYW5jaC1wb3J0YWJpbGl0eS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBtaW5vciBkb2MsIHRlc3QgYW5kIGJ1aWxkIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW51cHMuCisgICAobWVyZ2UgZTJhNWEwMjhjNyBidy9vaWRtYXAtYXV0b2luaXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGVjM2I0YjA2ZjggY2wvdDkwMDEtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTFiM2YzZGQzOCBrcy9zdWJtb2R1bGUtZG9jLXVwZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZiYWM1NThhOWIgcnMvZGVzY3JpYmUtdW5pcXVlLWFiYnJldiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODQ2MmZmNDNlNCB0Yi9jcmxmLWNvbnYtZmxhZ3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdkNjhiYjA3NjYgcmIvaGFzaG1hcC1oLWNvbXBpbGF0aW9uLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzQ0OTg0NzE2OCBjYy9zaGExLWZpbGUtbmFtZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWQ2MjJhMjU2ZiBkcy91c2UtZ2V0LWJlNjQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY5MTlmZmViZWQgc2cvY29jY2ktbW92ZS1hcnJheSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNGU4MDE0NjNjNyBqYy9tYWlsaW5mby1jbGVhbnVwLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWY1YjNhNmM1ZSBuZC9zaGFyZWQtaW5kZXgtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5ZjUyNThjYmI4IHR6L2RvYy1zaG93LWRlZmF1bHRzLXRvLWhlYWQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI3ODBlNDQwN2QgamMvd29ya3RyZWUtYWRkLXNob3J0LWhlbHAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFlMjM5ZmM4ZTUgcnMvY29jY2ktc3RyYnVmLWFkZGYtdG8tYWRkc3RyIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyZTIyYTg1ZTVjIG5kL2lnbm9yZS1nbG9iLWRvYy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM3MzgwMzE1ODEgamsvZ2V0dGV4dC1wb2lzb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU0MzYwYTE5NTYgcmovc3BhcnNlLXVwZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDEyZTMxYTZiMTIgc2cvZG9jLXRlc3QtbXVzdC1mYWlsLWFyZ3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc2MGYxYWQxMDEgYmMvZG9jLWludGVycHJldC10cmFpbGVycy1ncmFtbW9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRjY2Y0NjFmNTYgYnAvZnNtb25pdG9yIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhNjExOWY4MmIxIGprL3Rlc3QtaGFzaG1hcC11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1YWVhOWZlNmNjIHJkL3R5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU0ZTVkYTI3OTYgc2Ivc3RhdHVzLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc5NzZlOTAxYzggZ3MvdGVzdC11bnNldC14ZGctY2FjaGUtaG9tZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDAyM2RmMWVlNiB0Zy93b3JrdHJlZS1jcmVhdGUtdHJhY2tpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRjYmU5MmZkNDEgc20vbXYtZHJ5LXJ1bi11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc1ZTVlOWMzZjcgc2IvY29sb3ItaC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNzA4ZWY0YWY2IHNnL3Q2MzAwLW1vZGVybml6ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDg4ZTkyZDRlMCBidy9kb2Mtc3VibW9kdWxlLXJlY3Vyc2UtY29uZmlnLXdpdGgtY2xvbmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY3NGJiYzhkZDIgamsvY2FjaGVkLWNvbW1pdC1idWZmZXIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDEzMTY0MTY5MDMgbXMvbm9uLWFzY2lpLXRpY2tzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4NzgwNTYwMDVlIHJzL3N0cmJ1Zi1yZWFkLWZpbGUtb3Itd2hpbmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDc5ZjBiYTE1NDcgamsvc3RyYnVmLXJlYWQtZmlsZS1jbG9zZS1lcnJvciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWRmYjhiYTA2OCBvdC9yZWYtZmlsdGVyLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDExMzk1YTNiNGIgamMvdGVzdC1tdXN0LWJlLWVtcHR5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NjhiOWQ2ZGI3IG1rL2RvYy1wcmV0dHktZmlsbCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmNhYTdiOGQyNyBhYi9tYW4tc2VjLWxpc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQwYzE3ZWIxODQga3MvdDMyMDAtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmQ5OTU4YzM1OCBkcC9tZXJnZS1zdHJhdGVneS1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5ZWUwNTQwYTQwIGpzL21pbmctc3RyZnRpbWUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE3NzVlOTkwZjcgdHovY29tcGxldGUtdGFnLWRlbGV0ZS10YWduYW1lIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwMGE0YjAzNTAxIHJqL3dhcm5pbmctdW5pbml0aWFsaXplZC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI2MzVlZDk3YTAgamsvYXR0cmlidXRlcy1wYXRoLWRvYyBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxMzg0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4xLnR4dApAQCAtMCwwICsxLDE2IEBACitHaXQgdjIuMTcuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjE3CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGlzIHJlbGVhc2UgY29udGFpbnMgdGhlIHNhbWUgZml4ZXMgbWFkZSBpbiB0aGUgdjIuMTMuNyB2ZXJzaW9uIG9mCisgICBHaXQsIGNvdmVyaW5nIENWRS0yMDE4LTExMjMzIGFuZCAxMTIzNSwgYW5kIGZvcndhcmQtcG9ydGVkIHRvCisgICB2Mi4xNC40LCB2Mi4xNS4yIGFuZCB2Mi4xNi40IHJlbGVhc2VzLiAgU2VlIHJlbGVhc2Ugbm90ZXMgdG8KKyAgIHYyLjEzLjcgZm9yIGRldGFpbHMuCisKKyAqIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBmaXhlcywgdGhpcyByZWxlYXNlIGhhcyBzdXBwb3J0IG9uIHRoZQorICAgc2VydmVyIHNpZGUgdG8gcmVqZWN0IHB1c2hlcyB0byByZXBvc2l0b3JpZXMgdGhhdCBhdHRlbXB0IHRvIGNyZWF0ZQorICAgc3VjaCBwcm9ibGVtYXRpYyAuZ2l0bW9kdWxlcyBmaWxlIGV0Yy4gYXMgdHJhY2tlZCBjb250ZW50cywgdG8gaGVscAorICAgaG9zdGluZyBzaXRlcyBwcm90ZWN0IHRoZWlyIGN1c3RvbWVycyBieSBwcmV2ZW50aW5nIG1hbGljaW91cworICAgY29udGVudHMgZnJvbSBzcHJlYWRpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwMjFiZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4yLnR4dApAQCAtMCwwICsxLDEyIEBACitHaXQgdjIuMTcuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjUgdG8gYWRkcmVzcwordGhlIHJlY2VudGx5IHJlcG9ydGVkIENWRS0yMDE4LTE3NDU2OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoYXQKK3ZlcnNpb24gZm9yIGRldGFpbHMuCisKK0luIGFkZGl0aW9uLCB0aGlzIHJlbGVhc2UgYWxzbyB0ZWFjaGVzICJmc2NrIiBhbmQgdGhlIHNlcnZlciBzaWRlCitsb2dpYyB0byByZWplY3QgcHVzaGVzIHRvIHJlcG9zaXRvcmllcyB0aGF0IGF0dGVtcHQgdG8gY3JlYXRlIHN1Y2ggYQorcHJvYmxlbWF0aWMgIi5naXRtb2R1bGVzIiBmaWxlIGFzIHRyYWNrZWQgY29udGVudHMsIHRvIGhlbHAgaG9zdGluZworc2l0ZXMgcHJvdGVjdCB0aGVpciBjdXN0b21lcnMgYnkgcHJldmVudGluZyBtYWxpY2lvdXMgY29udGVudHMgZnJvbQorc3ByZWFkaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNDZjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMy50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYyLjE3LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC42IGFuZCBpbgordjIuMTUuNCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMgQ1ZFLTIwMTktMTM0OCwgQ1ZFLTIwMTktMTM0OSwKK0NWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsIENWRS0yMDE5LTEzNTIsIENWRS0yMDE5LTEzNTMsCitDVkUtMjAxOS0xMzU0LCBhbmQgQ1ZFLTIwMTktMTM4Nzsgc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aG9zZQordmVyc2lvbnMgZm9yIGRldGFpbHMuCisKK0luIGFkZGl0aW9uLCBgZ2l0IGZzY2tgIHdhcyB0YXVnaHQgdG8gaWRlbnRpZnkgYC5naXRtb2R1bGVzYCBlbnRyaWVzCitvZiB0aGUgZm9ybSBgc3VibW9kdWxlLjxuYW1lPi51cGRhdGU9IWNvbW1hbmRgLCB3aGljaCBoYXZlIGJlZW4KK2Rpc2FsbG93ZWQgaW4gdjIuMTUuNC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzhhMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjAudHh0CkBAIC0wLDAgKzEsNTgzIEBACitHaXQgMi4xOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuMTcKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFJlbmFtZSBkZXRlY3Rpb24gbG9naWMgdGhhdCBpcyB1c2VkIGluICJtZXJnZSIgYW5kICJjaGVycnktcGljayIgaGFzCisgICBsZWFybmVkIHRvIGd1ZXNzIHdoZW4gYWxsIG9mIHgvYSwgeC9iIGFuZCB4L2MgaGF2ZSBtb3ZlZCB0byB6L2EsCisgICB6L2IgYW5kIHovYywgaXQgaXMgbGlrZWx5IHRoYXQgeC9kIGFkZGVkIGluIHRoZSBtZWFudGltZSB3b3VsZCBhbHNvCisgICB3YW50IHRvIG1vdmUgdG8gei9kIGJ5IHRha2luZyB0aGUgaGludCB0aGF0IHRoZSBlbnRpcmUgZGlyZWN0b3J5CisgICAneCcgbW92ZWQgdG8gJ3onLiAgQSBidWcgY2F1c2luZyBkaXJ0eSBmaWxlcyBpbnZvbHZlZCBpbiBhIHJlbmFtZQorICAgdG8gYmUgb3ZlcndyaXR0ZW4gZHVyaW5nIG1lcmdlIGhhcyBhbHNvIGJlZW4gZml4ZWQgYXMgcGFydCBvZiB0aGlzCisgICB3b3JrLiAgSW5jaWRlbnRhbGx5LCB0aGlzIGFsc28gYXZvaWRzIHVwZGF0aW5nIGEgZmlsZSBpbiB0aGUKKyAgIHdvcmtpbmcgdHJlZSBhZnRlciBhIChub24tdHJpdmlhbCkgbWVyZ2Ugd2hvc2UgcmVzdWx0IG1hdGNoZXMgd2hhdAorICAgb3VyIHNpZGUgb3JpZ2luYWxseSBoYWQuCisKKyAqICJnaXQgZmlsdGVyLWJyYW5jaCIgbGVhcm5lZCB0byB1c2UgYSBkaWZmZXJlbnQgZXhpdCBjb2RlIHRvIGFsbG93CisgICB0aGUgY2FsbGVycyB0byB0ZWxsIHRoZSBjYXNlIHdoZXJlIHRoZXJlIHdhcyBubyBuZXcgY29tbWl0cyB0bworICAgcmV3cml0ZSBmcm9tIG90aGVyIGVycm9yIGNhc2VzLgorCisgKiBXaGVuIGJ1aWx0IHdpdGggbW9yZSByZWNlbnQgY1VSTCwgR0lUX1NTTF9WRVJTSU9OIGNhbiBub3cgc3BlY2lmeQorICAgInRsc3YxLjMiIGFzIGl0cyB2YWx1ZS4KKworICogImdpdCBndWkiIGxlYXJuZWQgdGhhdCAifi8uc3NoL2lkX2VjZHNhLnB1YiIgYW5kCisgICAifi8uc3NoL2lkX2VkMjU1MTkucHViIiBhcmUgYWxzbyBwb3NzaWJsZSBTU0gga2V5IGZpbGVzLgorICAgKG1lcmdlIDJlMmYwMjg4ZWYgYmIvZ2l0LWd1aS1zc2gta2V5LWZpbGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBndWkiIHBlcmZvcm1zIGNvbW1pdCB1cG9uIENUUkwvQ01EK0VOVEVSIGJ1dCB0aGUKKyAgIENUUkwvQ01EK0tQX0VOVEVSIChpLmUuIGVudGVyIGtleSBvbiB0aGUgbnVtcGFkKSBkaWQgbm90IGhhdmUgdGhlCisgICBzYW1lIGtleSBiaW5kaW5nLiAgSXQgbm93IGRvZXMuCisgICAobWVyZ2UgMjhhMWQ5NGEwNiBicC9naXQtZ3VpLWJpbmQta3AtZW50ZXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGd1aSIgaGFzIGJlZW4gdGF1Z2h0IHRvIHdvcmsgd2l0aCBvbGQgdmVyc2lvbnMgb2YgdGsgKGxpa2UKKyAgIDguNS43KSB0aGF0IGRvIG5vdCBzdXBwb3J0ICJ0dGs6OnN0eWxlIHRoZW1lIHVzZSIgYXMgYSB3YXkgdG8gcXVlcnkKKyAgIHRoZSBjdXJyZW50IHRoZW1lLgorICAgKG1lcmdlIDQ4OTE5NjExMDUgY2IvZ2l0LWd1aS10dGstc3R5bGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSIgaGFzIGxlYXJuZWQgdG8gaG9ub3IgIi0tc2lnbm9mZiIgb3B0aW9uIHdoZW4gdXNpbmcKKyAgIGJhY2tlbmRzIG90aGVyIHRoYW4gImFtIiAoYnV0IG5vdCAiLS1wcmVzZXJ2ZS1tZXJnZXMiKS4KKworICogImdpdCBicmFuY2ggLS1saXN0IiBkdXJpbmcgYW4gaW50ZXJydXB0ZWQgInJlYmFzZSAtaSIgbm93IGxldHMKKyAgIHVzZXJzIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIGEgZGV0YWNoZWQgSEVBRCBpcyBiZWluZyByZWJhc2VkCisgICBhbmQgYSBub3JtYWwgYnJhbmNoIGlzIGJlaW5nIHJlYmFzZWQuCisKKyAqICJnaXQgbWVyZ2V0b29scyIgbGVhcm5lZCB0YWxraW5nIHRvIGd1aWZmeS4KKworICogVGhlIHNjcmlwdHMgaW4gY29udHJpYi9lbWFjcy8gaGF2ZSBvdXRsaXZlZCB0aGVpciB1c2VmdWxuZXNzIGFuZAorICAgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYSBzdHViIHRoYXQgZXJyb3JzIG91dCBhbmQgdGVsbHMgdGhlIHVzZXIKKyAgIHRoZXJlIGFyZSByZXBsYWNlbWVudHMuCisKKyAqIFRoZSBuZXcgIndvcmtpbmctdHJlZS1lbmNvZGluZyIgYXR0cmlidXRlIGNhbiBhc2sgR2l0IHRvIGNvbnZlcnQgdGhlCisgICBjb250ZW50cyB0byB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIHdoZW4gY2hlY2tpbmcgb3V0IHRvIHRoZSB3b3JraW5nCisgICB0cmVlIChhbmQgdGhlIG90aGVyIHdheSBhcm91bmQgd2hlbiBjaGVja2luZyBpbikuCisKKyAqIFRoZSAiZ2l0IGNvbmZpZyIgY29tbWFuZCB1c2VzIHNlcGFyYXRlIG9wdGlvbnMgZS5nLiAiLS1pbnQiLAorICAgIi0tYm9vbCIsIGV0Yy4gdG8gc3BlY2lmeSB3aGF0IHR5cGUgdGhlIGNhbGxlciB3YW50cyB0aGUgdmFsdWUgdG8KKyAgIGJlIGludGVycHJldGVkIGFzLiAgQSBuZXcgIi0tdHlwZT08dHlwZW5hbWU+IiBvcHRpb24gaGFzIGJlZW4KKyAgIGludHJvZHVjZWQsIHdoaWNoIHdvdWxkIG1ha2UgaXQgY2xlYW5lciB0byBkZWZpbmUgbmV3IHR5cGVzLgorCisgKiAiZ2l0IGNvbmZpZyAtLWdldCIgbGVhcm5lZCB0aGUgIi0tZGVmYXVsdCIgb3B0aW9uLCB0byBoZWxwIHRoZQorICAgY2FsbGluZyBzY3JpcHQuICBCdWlsZGluZyBvbiB0b3Agb2YgdGhlIGFib3ZlIGNoYW5nZXMsIHRoZQorICAgImdpdCBjb25maWciIGxlYXJucyAiLS10eXBlPWNvbG9yIiB0eXBlLiAgVGFrZW4gdG9nZXRoZXIsIHlvdSBjYW4KKyAgIGRvIHRoaW5ncyBsaWtlICJnaXQgY29uZmlnIC0tZ2V0IGZvby5jb2xvciAtLWRlZmF1bHQgYmx1ZSIgYW5kIGdldAorICAgdGhlIEFOU0kgY29sb3Igc2VxdWVuY2UgZm9yIHRoZSBjb2xvciBnaXZlbiB0byBmb28uY29sb3IgdmFyaWFibGUsCisgICBvciAiYmx1ZSIgaWYgdGhlIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0LgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgbGVhcm5lZCBhbiBvcHRpb24gdG8gYWxsb3cgc29ydGluZyBpdHMgb3V0cHV0IGJhc2VkCisgICBvbiB0aGUgcmVmbmFtZXMgYmVpbmcgc2hvd24uCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHRhdWdodCB0aGF0ICJnaXQKKyAgIHN0YXNoIHNhdmUiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgKCJnaXQgc3Rhc2ggcHVzaCIgaXMgdGhlIHByZWZlcnJlZAorICAgc3BlbGxpbmcgaW4gdGhlIG5ldyB3b3JsZCkgYW5kIGRvZXMgbm90IG9mZmVyIGl0IGFzIGEgcG9zc2libGUKKyAgIGNvbXBsZXRpb24gY2FuZGlkYXRlIHdoZW4gImdpdCBzdGFzaCBwdXNoIiBjYW4gYmUuCisKKyAqICJnaXQgZ2MgLS1wcnVuZT1ub25zZW5zZSIgc3BlbnQgbG9uZyB0aW1lIHJlcGFja2luZyBhbmQgdGhlbgorICAgc2lsZW50bHkgZmFpbGVkIHdoZW4gdW5kZXJseWluZyAiZ2l0IHBydW5lIC0tZXhwaXJlPW5vbnNlbnNlIgorICAgZmFpbGVkIHRvIHBhcnNlIGl0cyBjb21tYW5kIGxpbmUuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogRXJyb3IgbWVzc2FnZXMgZnJvbSAiZ2l0IHB1c2giIGNhbiBiZSBwYWludGVkIGZvciBtb3JlIHZpc2liaWxpdHkuCisKKyAqICJnaXQgaHR0cC1mZXRjaCIgKGRlcHJlY2F0ZWQpIGhhZCBhbiBvcHRpb25hbCBhbmQgZXhwZXJpbWVudGFsCisgICAiZmVhdHVyZSIgdG8gZmV0Y2ggb25seSBjb21taXRzIGFuZC9vciB0cmVlcywgd2hpY2ggbm9ib2R5IHVzZWQuCisgICBUaGlzIGhhcyBiZWVuIHJlbW92ZWQuCisKKyAqIFRoZSBmdW5jdGlvbmFsaXR5IG9mICIkR0lUX0RJUi9pbmZvL2dyYWZ0cyIgaGFzIGJlZW4gc3VwZXJzZWRlZCBieQorICAgdGhlICJyZWZzL3JlcGxhY2UvIiBtZWNoYW5pc20gZm9yIHNvbWUgdGltZSBub3csIGJ1dCB0aGUgaW50ZXJuYWwKKyAgIGNvZGUgaGFkIHN1cHBvcnQgZm9yIGl0IGluIG1hbnkgcGxhY2VzLCB3aGljaCBoYXMgYmVlbiBjbGVhbmVkIHVwCisgICBpbiBvcmRlciB0byBkcm9wIHN1cHBvcnQgb2YgdGhlICJncmFmdHMiIG1lY2hhbmlzbS4KKworICogImdpdCB3b3JrdHJlZSBhZGQiIGxlYXJuZWQgdG8gY2hlY2sgb3V0IGFuIGV4aXN0aW5nIGJyYW5jaC4KKworICogImdpdCAtLW5vLXBhZ2VyIGNtZCIgZGlkIG5vdCBoYXZlIHNob3J0LWFuZC1zd2VldCBzaW5nbGUgbGV0dGVyCisgICBvcHRpb24uIE5vdyBpdCBkb2VzIGFzICItUCIuCisgICAobWVyZ2UgNzIxM2MyODgxOCBqcy9uby1wYWdlci1zaG9ydGhhbmQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSIgbGVhcm5lZCAiLS1yZWJhc2UtbWVyZ2VzIiB0byB0cmFuc3BsYW50IHRoZSB3aG9sZQorICAgdG9wb2xvZ3kgb2YgY29tbWl0IGdyYXBoIGVsc2V3aGVyZS4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgdG8gcGF5IGF0dGVudGlvbiB0byBVSSByZWxhdGVkIGRpZmYKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHN1Y2ggYXMgZGlmZi5yZW5hbWVzLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gbWVjaGFuaXNtIChpbiBjb250cmliLykgbGVhcm5lZCB0byBsb2FkCisgICBjdXN0b20gY29tcGxldGlvbiBmaWxlIGZvciAiZ2l0ICRjb21tYW5kIiB3aGVyZSAkY29tbWFuZCBpcyBhCisgICBjdXN0b20gImdpdC0kY29tbWFuZCIgdGhhdCB0aGUgZW5kIHVzZXIgaGFzIG9uIHRoZSAkUEFUSCB3aGVuIHVzaW5nCisgICBuZXdlciB2ZXJzaW9uIG9mIGJhc2gtY29tcGxldGlvbi4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gc29tZXRpbWVzIG9mZmVyIGNvbmZpcm1hdGlvbiBkaWFsb2cgIlNlbmQgdGhpcworICAgZW1haWw/IiB3aXRoIGNob2ljZXMgJ1llcycsICdObycsICdRdWl0JywgYW5kICdBbGwnLiAgQSBuZXcgYWN0aW9uCisgICAnRWRpdCcgaGFzIGJlZW4gYWRkZWQgdG8gdGhpcyBkaWFsb2cncyBjaG9pY2UuCisKKyAqIFdpdGggbWVyZ2UucmVuYW1lcyBjb25maWd1cmF0aW9uIHNldCB0byBmYWxzZSwgdGhlIHJlY3Vyc2l2ZSBtZXJnZQorICAgc3RyYXRlZ3kgY2FuIGJlIHRvbGQgbm90IHRvIHNwZW5kIGN5Y2xlcyB0cnlpbmcgdG8gZmluZCByZW5hbWVkCisgICBwYXRocyBhbmQgbWVyZ2UgdGhlbSBhY2NvcmRpbmdseS4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgdG8gaG9ub3IgYSBuZXcgc3RhdHVzLnJlbmFtZXMgY29uZmlndXJhdGlvbiB0bworICAgc2tpcCByZW5hbWUgZGV0ZWN0aW9uLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgZm9yIHRob3NlIHdobyB3YW50IHRvCisgICBkbyBzbyB3aXRob3V0IGRpc2FibGluZyB0aGUgZGVmYXVsdCByZW5hbWUgZGV0ZWN0aW9uIGRvbmUgYnkgdGhlCisgICAiZ2l0IGRpZmYiIGNvbW1hbmQuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIChpbiBjb250cmliLykgbGVhcm5lZCB0byBjb21wbGV0ZSBwYXRobmFtZXMKKyAgIGZvciB2YXJpb3VzIGNvbW1hbmRzIGJldHRlci4KKworICogImdpdCBibGFtZSIgbGVhcm5zIHRvIHVuaGlnaGxpZ2h0IHVuaW50ZXJlc3RpbmcgbWV0YWRhdGEgZnJvbSB0aGUKKyAgIG9yaWdpbmF0aW5nIGNvbW1pdCBvbiBsaW5lcyB0aGF0IGFyZSB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgb25lLAorICAgYW5kIGFsc28gcGFpbnQgbGluZXMgaW4gZGlmZmVyZW50IGNvbG9ycyBkZXBlbmRpbmcgb24gdGhlIGFnZSBvZgorICAgdGhlIGNvbW1pdC4KKworICogVHJhbnNmZXIgcHJvdG9jb2wgdjIgbGVhcm5lZCB0byBzdXBwb3J0IHRoZSBwYXJ0aWFsIGNsb25lLgorCisgKiBXaGVuIGEgc2hvcnQgaGV4YWRlY2ltYWwgc3RyaW5nIGlzIHVzZWQgdG8gbmFtZSBhbiBvYmplY3QgYnV0IHRoZXJlCisgICBhcmUgbXVsdGlwbGUgb2JqZWN0cyB0aGF0IHNoYXJlIHRoZSBzdHJpbmcgYXMgdGhlIHByZWZpeCBvZiB0aGVpcgorICAgbmFtZXMsIHRoZSBjb2RlIGxpc3RzIHRoZXNlIGFtYmlndW91cyBjYW5kaWRhdGVzIGluIGEgaGVscCBtZXNzYWdlLgorICAgVGhlc2Ugb2JqZWN0IG5hbWVzIGFyZSBub3cgc29ydGVkIGFjY29yZGluZyB0byB0aGVpciB0eXBlcyBmb3IKKyAgIGVhc2llciBleWViYWxsaW5nLgorCisgKiAiZ2l0IGZldGNoICR0aGVyZSAkcmVmc3BlYyIgdGhhdCB0YWxrcyBvdmVyIHByb3RvY29sIHYyIGNhbiB0YWtlCisgICBhZHZhbnRhZ2Ugb2Ygc2VydmVyLXNpZGUgcmVmIGZpbHRlcmluZzsgdGhlIGNvZGUgaGFzIGJlZW4gZXh0ZW5kZWQKKyAgIHNvIHRoYXQgdGhpcyBtZWNoYW5pc20gdHJpZ2dlcnMgYWxzbyB3aGVuIGZldGNoaW5nIHdpdGggY29uZmlndXJlZAorICAgcmVmc3BlYy4KKworICogT3VyIEhUVFAgY2xpZW50IGNvZGUgdXNlZCB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhY2NlcHQgZ3ppcCBlbmNvZGluZworICAgZnJvbSB0aGUgb3RoZXIgc2lkZTsgaW5zdGVhZCwganVzdCBsZXQgY1VSTCBsaWJyYXJ5IHRvIGFkdmVydGlzZQorICAgYW5kIG5lZ290aWF0ZSB0aGUgYmVzdCBvbmUuCisKKyAqICJnaXQgcDQiIGxlYXJuZWQgdG8gInVuc2hlbHZlIiBzaGVsdmVkIGNvbW1pdCBmcm9tIFA0LgorICAgKG1lcmdlIDEyM2Y2MzE3NjEgbGQvcDQtdW5zaGVsdmUgbGF0ZXIgdG8gbWFpbnQpLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIEEgImdpdCBmZXRjaCIgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCBpbnNhbmUgbnVtYmVyIG9mIHJlZnMgaW50byBhCisgICByZXBvc2l0b3J5IHRoYXQgaXMgYWxyZWFkeSB1cC10by1kYXRlIHN0aWxsIHdhc3RlZCB0b28gbWFueSBjeWNsZXMKKyAgIG1ha2luZyBtYW55IGxzdGF0KDIpIGNhbGxzIHRvIHNlZSBpZiB0aGVzZSBvYmplY3RzIGF0IHRoZSB0aXBzCisgICBleGlzdCBhcyBsb29zZSBvYmplY3RzIGxvY2FsbHkuICBUaGVzZSBsc3RhdCgyKSBjYWxscyBhcmUgb3B0aW1pemVkCisgICBhd2F5IGJ5IGVudW1lcmF0aW5nIGFsbCBsb29zZSBvYmplY3RzIGJlZm9yZWhhbmQuCisgICBJdCBpcyB1bmtub3duIGlmIHRoZSBuZXcgc3RyYXRlZ3kgbmVnYXRpdmVseSBhZmZlY3RzIGV4aXN0aW5nIHVzZQorICAgY2FzZXMsIGZldGNoaW5nIGludG8gYSByZXBvc2l0b3J5IHdpdGggbWFueSBsb29zZSBvYmplY3RzIGZyb20gYQorICAgcmVwb3NpdG9yeSB3aXRoIHNtYWxsIG51bWJlciBvZiByZWZzLgorCisgKiBHaXQgY2FuIGJlIGJ1aWx0IHRvIHVzZSBlaXRoZXIgdjEgb3IgdjIgb2YgdGhlIFBDUkUgbGlicmFyeSwgYW5kIHNvCisgICBmYXIsIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gVVNFX0xJQlBDUkU9WWVzUGxlYXNlIGluc3RydWN0ZWQKKyAgIHRoZSBidWlsZCBwcm9jZWR1cmUgdG8gdXNlIHYxLCBidXQgbm93IGl0IG1lYW5zIHYyLiAgVVNFX0xJQlBDUkUxCisgICBhbmQgVVNFX0xJQlBDUkUyIGNhbiBiZSB1c2VkIHRvIGV4cGxpY2l0bHkgY2hvb3NlIHdoaWNoIHZlcnNpb24gdG8KKyAgIHVzZSwgYXMgYmVmb3JlLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGxlYXJuZWQgdG8gb3B0aW9uYWxseSB1c2Ugc3ltYm9saWMgbGlua3MKKyAgIChpbnN0ZWFkIG9mIGhhcmRsaW5rcyBhbmQgY29waWVzKSB0byBpbnN0YWxsICJnaXQtZm9vIiBmb3IgYnVpbHQtaW4KKyAgIGNvbW1hbmRzLCB3aG9zZSBiaW5hcmllcyBhcmUgYWxsIGlkZW50aWNhbC4KKworICogQ29udmVyc2lvbiBmcm9tIHVjaGFyWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogVGhlIHdheSAiZ2l0IHdvcmt0cmVlIHBydW5lIiB3b3JrZWQgaW50ZXJuYWxseSBoYXMgYmVlbiBzaW1wbGlmaWVkLAorICAgYnkgYXNzdW1pbmcgaG93ICJnaXQgd29ya3RyZWUgbW92ZSIgbW92ZXMgYW4gZXhpc3Rpbmcgd29ya3RyZWUgdG8gYQorICAgZGlmZmVyZW50IHBsYWNlLgorCisgKiBDb2RlIGNsZWFuLXVwIGZvciB0aGUgInJlcG9zaXRvcnkiIGFic3RyYWN0aW9uLgorICAgKG1lcmdlIDAwYTNkYTJhMTMgbmQvcmVtb3ZlLWlnbm9yZS1lbnYtZmllbGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIHRvIGZpbmQgdGhlIGxlbmd0aCB0byB1bmlxdWVseSBhYmJyZXZpYXRlIG9iamVjdCBuYW1lcyBiYXNlZAorICAgb24gcGFja2ZpbGUgY29udGVudCwgd2hpY2ggaXMgYSByZWxhdGl2ZWx5IHJlY2VudCBhZGRpdGlvbiwgaGFzIGJlZW4KKyAgIG9wdGltaXplZCB0byB1c2UgdGhlIHNhbWUgZmFuLW91dCB0YWJsZS4KKworICogVGhlIG1lY2hhbmlzbSB0byB1c2UgcGFyc2Utb3B0aW9ucyBBUEkgdG8gYXV0b21hdGUgdGhlIGNvbW1hbmQgbGluZQorICAgY29tcGxldGlvbiBjb250aW51ZXMgdG8gZ2V0IGV4dGVuZGVkIGFuZCBwb2xpc2hlZC4KKworICogQ29waWVzIG9mIG9sZCBzY3JpcHRlZCBQb3JjZWxhaW4gY29tbWFuZHMgaW4gY29udHJpYi9leGFtcGxlcy8gaGF2ZQorICAgYmVlbiByZW1vdmVkLgorCisgKiBTb21lIHRlc3RzIHRoYXQgcmVseSBvbiB0aGUgZXhhY3QgaGFyZGNvZGVkIHZhbHVlcyBvZiBvYmplY3QgbmFtZXMKKyAgIGhhdmUgYmVlbiB1cGRhdGVkIGluIHByZXBhcmF0aW9uIGZvciBoYXNoIGZ1bmN0aW9uIG1pZ3JhdGlvbi4KKworICogUGVyZi10ZXN0IHVwZGF0ZS4KKworICogVGVzdCBoZWxwZXIgdXBkYXRlLgorCisgKiBUaGUgZWZmb3J0IGNvbnRpbnVlcyB0byByZWZhY3RvciB0aGUgaW50ZXJuYWwgZ2xvYmFsIGRhdGEgc3RydWN0dXJlCisgICB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIG9wZW4gbXVsdGlwbGUgcmVwb3NpdG9yaWVzLCB3b3JrIHdpdGggYW5kCisgICB0aGVuIGNsb3NlIHRoZW0sCisKKyAqIFNtYWxsIHRlc3QtaGVscGVyIHByb2dyYW1zIGhhdmUgYmVlbiBjb25zb2xpZGF0ZWQgaW50byBhIHNpbmdsZQorICAgYmluYXJ5LgorCisgKiBBUEkgY2xlYW4tdXAgYXJvdW5kIHJlZi1maWx0ZXIgY29kZS4KKworICogU2hlbGwgY29tcGxldGlvbiAoaW4gY29udHJpYikgdGhhdCBnaXZlcyBsaXN0IG9mIHBhdGhzIGhhdmUgYmVlbgorICAgb3B0aW1pemVkIHNvbWV3aGF0LgorCisgKiBUaGUgaW5kZXggZmlsZSBpcyB1cGRhdGVkIHRvIHJlY29yZCB0aGUgZnNtb25pdG9yIHNlY3Rpb24gYWZ0ZXIgYQorICAgZnVsbCBzY2FuIHdhcyBtYWRlLCB0byBhdm9pZCB3YXN0aW5nIHRoZSBlZmZvcnQgdGhhdCBoYXMgYWxyZWFkeQorICAgc3BlbnQuCisKKyAqIFBlcmZvcm1hbmNlIG1lYXN1cmluZyBmcmFtZXdvcmsgaW4gdC9wZXJmIGxlYXJuZWQgdG8gaGVscCBiaXNlY3RpbmcKKyAgIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zLgorCisgKiBTb21lIG11bHRpLXdvcmQgc291cmNlIGZpbGVuYW1lcyBhcmUgYmVpbmcgcmVuYW1lZCB0byBzZXBhcmF0ZQorICAgd29yZHMgd2l0aCBkYXNoZXMgaW5zdGVhZCBvZiB1bmRlcnNjb3Jlcy4KKworICogQW4gcmV1c2FibGUgIm1lbW9yeSBwb29sIiBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiBleHRyYWN0ZWQgZnJvbQorICAgZmFzdC1pbXBvcnQuYywgd2hpY2ggaW4gdHVybiBoYXMgYmVjb21lIHRoZSBmaXJzdCB1c2VyIG9mIHRoZQorICAgbWVtLXBvb2wgQVBJLgorCisgKiBBIGJ1aWxkLXRpbWUgb3B0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIGFsbG93IEdpdCB0byBiZSB0b2xkIHRvIHJlZmVyCisgICB0byBpdHMgYXNzb2NpYXRlZCBmaWxlcyByZWxhdGl2ZSB0byB0aGUgbWFpbiBiaW5hcnksIGluIHRoZSBzYW1lCisgICB3YXkgdGhhdCBoYXMgYmVlbiBwb3NzaWJsZSBvbiBXaW5kb3dzIGZvciBxdWl0ZSBzb21lIHRpbWUsIGZvcgorICAgTGludXgsIEJTRHMgYW5kIERhcndpbi4KKworICogUHJlY29tcHV0ZSBhbmQgc3RvcmUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciBhbmNlc3RyeSB0cmF2ZXJzYWwKKyAgIGluIGEgc2VwYXJhdGUgZmlsZSB0byBvcHRpbWl6ZSBncmFwaCB3YWxraW5nLgorCisgKiBUaGUgZWZmb3J0IHRvIHBhc3MgdGhlIHJlcG9zaXRvcnkgaW4tY29yZSBzdHJ1Y3R1cmUgdGhyb3VnaG91dCB0aGUKKyAgIEFQSSBjb250aW51ZXMuICBUaGlzIHJvdW5kIGRlYWxzIHdpdGggdGhlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIHRoZQorICAgcmVmcy9yZXBsYWNlLyBtZWNoYW5pc20uCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgIm1ha2UgREVWRUxPUEVSPVllc1BsZWFzZSIgbGVhcm5lZCB0byBlbmFibGUgYQorICAgYml0IG1vcmUgd2FybmluZyBvcHRpb25zIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIgdXNlZCB0byBoZWxwCisgICBkZXZlbG9wZXJzIG1vcmUuICBUaGVyZSBhbHNvIGlzICJtYWtlIERFVk9QVFM9dG9rZW5zIiBrbm9iCisgICBhdmFpbGFibGUgbm93LCBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gaGVscCBmaXhpbmcgd2FybmluZ3Mgd2UKKyAgIHVzdWFsbHkgaWdub3JlLCBmb3IgZXhhbXBsZS4KKworICogQSBuZXcgdmVyc2lvbiBvZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sIGlzIGJlaW5nIHdvcmtlZCBvbi4KKworICogVGhlIGNvZGUgdG8gaW50ZXJmYWNlIHRvIEdQRyBoYXMgYmVlbiByZXN0cnVjdHVyZWQgc29tZXdoYXQgdG8gbWFrZQorICAgaXQgY2xlYW5lciB0byBpbnRlZ3JhdGUgd2l0aCBvdGhlciB0eXBlcyBvZiBzaWduYXR1cmUgc3lzdGVtcyBsYXRlci4KKworICogVGhlIGNvZGUgaGFzIGJlZW4gdGF1Z2h0IHRvIHVzZSB0aGUgZHVwbGljYXRlZCBpbmZvcm1hdGlvbiBzdG9yZWQKKyAgIGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSB0byBsZWFybiB0aGUgdHJlZSBvYmplY3QgbmFtZSBmb3IgYSBjb21taXQKKyAgIHRvIGF2b2lkIG9wZW5pbmcgYW5kIHBhcnNpbmcgdGhlIGNvbW1pdCBvYmplY3Qgd2hlbiBpdCBtYWtlcyBzZW5zZQorICAgdG8gZG8gc28uCisKKyAqICJnaXQgZ2MiIGluIGEgbGFyZ2UgcmVwb3NpdG9yeSB0YWtlcyBhIGxvdCBvZiB0aW1lIGFzIGl0IGNvbnNpZGVycworICAgdG8gcmVwYWNrIGFsbCBvYmplY3RzIGludG8gb25lIHBhY2sgYnkgZGVmYXVsdC4gIFRoZSBjb21tYW5kIGhhcworICAgYmVlbiB0YXVnaHQgdG8gcHJldGVuZCBhcyBpZiB0aGUgbGFyZ2VzdCBleGlzdGluZyBwYWNrZmlsZSBpcworICAgbWFya2VkIHdpdGggIi5rZWVwIiBzbyB0aGF0IGl0IGlzIGxlZnQgdW50b3VjaGVkIHdoaWxlIG9iamVjdHMgaW4KKyAgIG90aGVyIHBhY2tzIGFuZCBsb29zZSBvbmVzIGFyZSByZXBhY2tlZC4KKworICogVGhlIHRyYW5zcG9ydCBwcm90b2NvbCB2MiBpcyBnZXR0aW5nIHVwZGF0ZWQgZnVydGhlci4KKworICogVGhlIGNvZGVwYXRoIGFyb3VuZCBvYmplY3QtaW5mbyBBUEkgaGFzIGJlZW4gdGF1Z2h0IHRvIHRha2UgdGhlCisgICByZXBvc2l0b3J5IG9iamVjdCAod2hpY2ggaW4gdHVybiB0ZWxscyB0aGUgQVBJIHdoaWNoIG9iamVjdCBzdG9yZQorICAgdGhlIG9iamVjdHMgYXJlIHRvIGJlIGxvY2F0ZWQpLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgbmVlZHMgdG8gYWxsb2NhdGUgdG9ucyBvZiAic3RydWN0IG9iamVjdF9lbnRyeSIKKyAgIHdoaWxlIGRvaW5nIGl0cyB3b3JrLCBhbmQgc2hyaW5raW5nIGl0cyBzaXplIGhlbHBzIHRoZSBwZXJmb3JtYW5jZQorICAgcXVpdGUgYSBiaXQuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAiZ2l0IHJlYmFzZSAtaSAtLXJvb3QiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlCisgICB0aGUgc2VxdWVuY2VyIG1hY2hpbmVyeSBtb3JlLgorCisgKiBEZXZlbG9wZXIgc3VwcG9ydCB1cGRhdGUsIGJ5IHVzaW5nIEJVRygpIG1hY3JvIGluc3RlYWQgb2YgZGllKCkgdG8KKyAgIG1hcmsgY29kZXBhdGhzIHRoYXQgc2hvdWxkIG5vdCBoYXBwZW4gbW9yZSBjbGVhcmx5LgorCisgKiBEZXZlbG9wZXIgc3VwcG9ydC4gIFVzZSBuZXdlciBHQ0Mgb24gb25lIG9mIHRoZSBidWlsZHMgZG9uZSBhdAorICAgVHJhdmlzQ0kub3JnIHRvIGdldCBtb3JlIHdhcm5pbmdzIGFuZCBlcnJvcnMgZGlhZ25vc2VkLgorCisgKiBDb252ZXJzaW9uIGZyb20gdWNoYXJbMjBdIHRvIHN0cnVjdCBvYmplY3RfaWQgY29udGludWVzLgorCisgKiBCeSBjb2RlIHJlc3RydWN0dXJpbmcgb2Ygc3VibW9kdWxlIG1lcmdlIGluIG1lcmdlLXJlY3Vyc2l2ZSwKKyAgIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgZnJvbSB0aGUgY29kZXBhdGggYXJlIG5vdyBnaXZlbiB1c2luZyB0aGUKKyAgIHNhbWUgbWVjaGFuaXNtIGFzIG90aGVyIG91dHB1dCwgYW5kIGhvbm9yIHRoZSBtZXJnZS52ZXJib3NpdHkKKyAgIGNvbmZpZ3VyYXRpb24uICBUaGUgY29kZSBhbHNvIGxlYXJuZWQgdG8gZ2l2ZSBhIGZldyBuZXcgbWVzc2FnZXMKKyAgIHdoZW4gYSBzdWJtb2R1bGUgdGhyZWUtd2F5IG1lcmdlIHJlc29sdmVzIGNsZWFubHkgd2hlbiBvbmUgc2lkZQorICAgcmVjb3JkcyBhIGRlc2NlbmRhbnQgb2YgdGhlIGNvbW1pdCBjaG9zZW4gYnkgdGhlIG90aGVyIHNpZGUuCisKKyAqIEF2b2lkIHVuY2hlY2tlZCBzbnByaW50ZigpIHRvIG1ha2UgZnV0dXJlIGNvZGUgYXVkaXRpbmcgZWFzaWVyLgorICAgKG1lcmdlIGFjNDg5NmYwMDcgamsvc25wcmludGYtdHJ1bmNhdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIE1hbnkgdGVzdHMgaGFyZGNvZGUgdGhlIHJhdyBvYmplY3QgbmFtZXMsIHdoaWNoIHdvdWxkIGNoYW5nZSBvbmNlCisgICB3ZSBtaWdyYXRlIGF3YXkgZnJvbSBTSEEtMS4gIFdoaWxlIHNvbWUgb2YgdGhlbSBtdXN0IHRlc3QgYWdhaW5zdAorICAgZXhhY3Qgb2JqZWN0IG5hbWVzLCBtb3N0IG9mIHRoZW0gZG8gbm90IGhhdmUgdG8gdXNlIGhhcmRjb2RlZAorICAgY29uc3RhbnRzIGluIHRoZSB0ZXN0LiAgVGhlIGxhdHRlciBraW5kIG9mIHRlc3RzIGhhdmUgYmVlbiB1cGRhdGVkCisgICB0byB0ZXN0IHRoZSBtb3JhbCBlcXVpdmFsZW50IG9mIHRoZSBvcmlnaW5hbCB3aXRob3V0IGhhcmRjb2RpbmcgdGhlCisgICBhY3R1YWwgb2JqZWN0IG5hbWVzLgorCisgKiBUaGUgbGlzdCBvZiBjb21tYW5kcyB3aXRoIHRoZWlyIHZhcmlvdXMgYXR0cmlidXRlcyB3ZXJlIHNwcmVhZAorICAgYWNyb3NzIGEgZmV3IHBsYWNlcyBpbiB0aGUgYnVpbGQgcHJvY2VkdXJlLCBidXQgaXQgbm93IGlzIGdldHRpbmcgYQorICAgYml0IG1vcmUgY29uc29saWRhdGVkIHRvIGFsbG93IG1vcmUgYXV0b21hdGlvbi4KKworICogUXVpdGUgYSBtYW55IHRlc3RzIGFzc3VtZWQgdGhhdCBuZXdseSBjcmVhdGVkIHJlZnMgYXJlIG1hZGUgYXMKKyAgIGxvb3NlIHJlZnMgdXNpbmcgdGhlIGZpbGVzIGJhY2tlbmQsIHdoaWNoIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHVzZQorICAgcHJvcGVyIHBsdW1iaW5nIGxpa2UgcmV2LXBhcnNlIGFuZCB1cGRhdGUtcmVmLCB0byBhdm9pZCBicmVha2FnZQorICAgb25jZSB3ZSBzdGFydCB1c2luZyBkaWZmZXJlbnQgcmVmIGJhY2tlbmRzLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjE3CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHNob3J0bG9nIGNydWZ0IiBhYm9ydGVkIHdpdGggYSBCVUcgbWVzc2FnZSB3aGVuIHJ1biBvdXRzaWRlIGEKKyAgIEdpdCByZXBvc2l0b3J5LiAgVGhlIGNvbW1hbmQgaGFzIGJlZW4gdGF1Z2h0IHRvIGNvbXBsYWluIGFib3V0CisgICBleHRyYSBhbmQgdW53YW50ZWQgYXJndW1lbnRzIG9uIGl0cyBjb21tYW5kIGxpbmUgaW5zdGVhZCBpbiBzdWNoIGEKKyAgIGNhc2UuCisgICAobWVyZ2UgNGFhMDE2MWU4MyBtYS9zaG9ydGxvZy1yZXZwYXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3Rhc2ggcHVzaCAtdSAtLSA8cGF0aHNwZWM+IiBnYXZlIGFuIHVubmVjZXNzYXJ5IGFuZCBjb25mdXNpbmcKKyAgIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGVyZSB3YXMgbm8gdHJhY2tlZCBmaWxlcyB0aGF0IG1hdGNoIHRoZQorICAgPHBhdGhzcGVjPiwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgMzUzMjc4Njg3ZSB0Zy9zdGFzaC11bnRyYWNrZWQtd2l0aC1wYXRoc3BlYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHRhZyAtLWNvbnRhaW5zIG5vLXN1Y2gtY29tbWl0IiBnYXZlIGEgZnVsbCBsaXN0IG9mIG9wdGlvbnMKKyAgIGFmdGVyIGdpdmluZyBhbiBlcnJvciBtZXNzYWdlLgorICAgKG1lcmdlIDNiYjA5MjNmMDYgcHMvY29udGFpbnMtaWQtZXJyb3ItbWVzc2FnZSBsYXRlciB0byBtYWludCkuCisKKyAqICJkaWZmLWhpZ2hsaWdodCIgZmlsdGVyIChpbiBjb250cmliLykgbGVhcm5lZCB0byB1bmRlcnN0YW5kICJnaXQgbG9nCisgICAtLWdyYXBoIiBvdXRwdXQgYmV0dGVyLgorICAgKG1lcmdlIDQ1NTFmYmJhMTQgamsvZGlmZi1oaWdobGlnaHQtZ3JhcGgtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogd2hlbiByZWZzIHRoYXQgZG8gbm90IHBvaW50IGF0IGNvbW1pdHRpc2ggYXJlIGdpdmVuLCAiZ2l0CisgICBmaWx0ZXItYnJhbmNoIiBnYXZlIGEgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlcy4gIFRoaXMgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBmNzhhYjM1NWU3IHlrL2ZpbHRlci1icmFuY2gtbm9uLWNvbW1pdHRpc2gtcmVmcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VibW9kdWxlIHN0YXR1cyIgbWlzYmVoYXZlZCBvbiBhIHN1Ym1vZHVsZSB0aGF0IGhhcyBiZWVuCisgICByZW1vdmVkIGZyb20gdGhlIHdvcmtpbmcgdHJlZS4KKyAgIChtZXJnZSA3NGI2YmRhMzJmIHJzL3N0YXR1cy13aXRoLXJlbW92ZWQtc3VibW9kdWxlIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBjcmVkZW50aWFsIGhlbHBlciBleGl0cyB2ZXJ5IHF1aWNrbHkgd2l0aG91dCByZWFkaW5nIGl0cworICAgaW5wdXQsIGl0IHVzZWQgdG8gY2F1c2UgR2l0IHRvIGRpZSB3aXRoIFNJR1BJUEUsIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZC4KKyAgIChtZXJnZSBhMGQ1MWU4ZDBlIGViL2NyZWQtaGVscGVyLWlnbm9yZS1zaWdwaXBlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLS1rZWVwLWVtcHR5IiBzdGlsbCByZW1vdmVkIGFuIGVtcHR5IGNvbW1pdCBpZiB0aGUKKyAgIG90aGVyIHNpZGUgY29udGFpbmVkIGFuIGVtcHR5IGNvbW1pdCAoZHVlIHRvIHRoZSAiZG9lcyBhbgorICAgZXF1aXZhbGVudCBwYXRjaCBleGlzdCBhbHJlYWR5PyIgY2hlY2spLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgM2Q5NDYxNjVlMSBwdy9yZWJhc2Uta2VlcC1lbXB0eS1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgY29kZXBhdGhzLCBpbmNsdWRpbmcgdGhlIHJlZnMgQVBJLCBnZXQgYW5kIGtlZXAgcmVsYXRpdmUKKyAgIHBhdGhzLCB0aGF0IGdvIG91dCBvZiBzeW5jIHdoZW4gdGhlIHByb2Nlc3MgZG9lcyBjaGRpcigyKS4gIFRoZQorICAgY2hkaXItbm90aWZ5IEFQSSBpcyBpbnRyb2R1Y2VkIHRvIGxldCB0aGVzZSBjb2RlcGF0aHMgYWRqdXN0IHRoZXNlCisgICBjYWNoZWQgcGF0aHMgdG8gdGhlIG5ldyBjdXJyZW50IGRpcmVjdG9yeS4KKyAgIChtZXJnZSBmYjljMmQyNzAzIGprL3JlbGF0aXZlLWRpcmVjdG9yeS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiY2Qgc3ViL2RpciAmJiBnaXQgY29tbWl0IC4uL3BhdGgiIG91Z2h0IHRvIHJlY29yZCB0aGUgY2hhbmdlcyB0bworICAgdGhlIGZpbGUgInN1Yi9wYXRoIiwgYnV0IHRoaXMgcmVncmVzc2VkIGxvbmcgdGltZSBhZ28uCisgICAobWVyZ2UgODYyMzhlMDdlZiBidy9jb21taXQtcGFydGlhbC1mcm9tLXN1YmRpcmVjdG9yeS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgaW50cm9kdWN0aW9uIG9mICItLWxvZy1kZXN0aW5hdGlvbiIgb3B0aW9uIHRvICJnaXQgZGFlbW9uIgorICAgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiB0aGUgZGFlbW9uIHdhcyBydW4gdW5kZXIgIi0taW5ldGQiIG1vZGUuCisgICAobWVyZ2UgZTY3ZDkwNmQ3MyBsdy9kYWVtb24tbG9nLWRlc3RpbmF0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogU21hbGwgZml4IHRvIHRoZSBhdXRvY29uZiBidWlsZCBwcm9jZWR1cmUuCisgICAobWVyZ2UgMjQ5NDgyZGFmMCBlcy9mcmVhZC1yZWFkcy1kaXItYXV0b2NvbmYtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogRml4IGFuIHVuZXhwbG9pdGFibGUgKGJlY2F1c2UgdGhlIG92ZXJzaXplZCBjb250ZW50cyBhcmUgbm90IHVuZGVyCisgICBhdHRhY2tlcidzIGNvbnRyb2wpIGJ1ZmZlciBvdmVyZmxvdy4KKyAgIChtZXJnZSBkODU3OWFjY2ZhIGJwL2ZzbW9uaXRvci1idWZzaXplLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCBzaW1wbGlmaWNhdGlvbiBvZiBidWlsZCBwcm9jZWR1cmUgZm9yZ290IGEgYml0IG9mIHR3ZWFrIHRvCisgICB0aGUgYnVpbGQgcHJvY2VkdXJlIG9mIGNvbnRyaWIvbXctdG8tZ2l0LworICAgKG1lcmdlIGQ4Njk4OTg3ZjMgYWIvc2ltcGxpZnktcGVybC1tYWtlZmlsZSBsYXRlciB0byBtYWludCkuCisKKyAqIE1vdmluZyBhIHN1Ym1vZHVsZSB0aGF0IGl0c2VsZiBoYXMgc3VibW9kdWxlIGluIGl0IHdpdGggImdpdCBtdiIKKyAgIGZvcmdvdCB0byBtYWtlIG5lY2Vzc2FyeSBhZGp1c3RtZW50IHRvIHRoZSBuZXN0ZWQgc3ViLXN1Ym1vZHVsZXM7CisgICBub3cgdGhlIGNvZGVwYXRoIGxlYXJuZWQgdG8gcmVjdXJzZSBpbnRvIHRoZSBzdWJtb2R1bGVzLgorCisgKiAiZ2l0IGNvbmZpZyAtLXVuc2V0IGEuYiIsIHdoZW4gImEuYiIgaXMgdGhlIGxhc3QgdmFyaWFibGUgaW4gYW4KKyAgIG90aGVyd2lzZSBlbXB0eSBzZWN0aW9uICJhIiwgbGVmdCBhbiBlbXB0eSBzZWN0aW9uICJhIiBiZWhpbmQsIGFuZAorICAgd29yc2UgeWV0LCBhIHN1YnNlcXVlbnQgImdpdCBjb25maWcgYS5jIHZhbHVlIiBkaWQgbm90IHJldXNlIHRoYXQKKyAgIGVtcHR5IHNoZWxsIGFuZCBpbnN0ZWFkIGNyZWF0ZWQgYSBuZXcgb25lLiAgVGhlc2UgaGF2ZSBiZWVuCisgICAocGFydGlhbGx5KSBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYzcxZDhiYjM4YSBqcy9lbXB0eS1jb25maWctc2VjdGlvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHdvcmt0cmVlIHJlbW92ZSIgbGVhcm5lZCB0aGF0ICItZiIgaXMgYSBzaG9ydGhhbmQgZm9yCisgICAiLS1mb3JjZSIgb3B0aW9uLCBqdXN0IGxpa2UgZm9yICJnaXQgd29ya3RyZWUgYWRkIi4KKyAgIChtZXJnZSBkMjI4ZWVhNTE0IHNiL3dvcmt0cmVlLXJlbW92ZS1vcHQtZm9yY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRvIGNsZWFyIGNhY2hlZCBsaXN0IG9mCisgICBjb21tYW5kIGxpbmUgb3B0aW9ucyB1cG9uIGRvdC1zb3VyY2luZyBpdCBhZ2FpbiBpbiBhIG1vcmUgZWZmaWNpZW50CisgICB3YXkuCisgICAobWVyZ2UgOTQ0MDhkYzcxYyBzZy9jb21wbGV0aW9uLWNsZWFyLWNhY2hlZCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3ZuIiBoYWQgYSBtaW5vciB0aGlua28vdHlwbyB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA1MWRiMjcxNTg3IGFiL2dpdC1zdm4tZ2V0LXJlY29yZC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKworICogRHVyaW5nIGEgInJlYmFzZSAtaSIgc2Vzc2lvbiwgdGhlIGNvZGUgY291bGQgZ2l2ZSBvbGRlciB0aW1lc3RhbXAKKyAgIHRvIGNvbW1pdHMgY3JlYXRlZCBieSBsYXRlciAicGljayIgdGhhbiBhbiBlYXJsaWVyICJyZXdvcmQiLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDEyZjdiYWJkNmIganMvaWRlbnQtZGF0ZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIGRpZCBub3QgY2hlY2sgdGhlIHN5bWJvbGljIHJldmlzaW9uIG5hbWUgaXQKKyAgIGNvbXB1dGVkIGZvciB0aGUgc3VibW9kdWxlIEhFQUQgaXMgbm90IHRoZSBOVUxMLCBhbmQgdGhyZXcgaXQgYXQKKyAgIHByaW50ZiByb3V0aW5lcywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDBiNWUyZWE3Y2YgbmQvc3VibW9kdWxlLXN0YXR1cy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIGZlZCBpbnB1dCB0aGF0IGFscmVhZHkgaGFzIEluLVJlcGx5LVRvOiBhbmQvb3IgUmVmZXJlbmNlczoKKyAgIGhlYWRlcnMgYW5kIHRvbGQgdG8gYWRkIHRoZSBzYW1lIGluZm9ybWF0aW9uLCAiZ2l0IHNlbmQtZW1haWwiCisgICBhZGRlZCB0aGVzZSBoZWFkZXJzIHNlcGFyYXRlbHksIGluc3RlYWQgb2YgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nCisgICBvbmUsIHdoaWNoIGlzIGEgdmlvbGF0aW9uIG9mIHRoZSBSRkMuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAyNTZiZTFkM2YwIHNhL3NlbmQtZW1haWwtZGVkdXAtc29tZS1oZWFkZXJzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmYXN0LWV4cG9ydCIgaGFkIGEgcmVncmVzc2lvbiBpbiB2Mi4xNS4wIGVyYSB3aGVyZSBpdCBza2lwcGVkCisgICBzb21lIG1lcmdlIGNvbW1pdHMgaW4gY2VydGFpbiBjYXNlcywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGJlMDExYmJlMDAgbWEvZmFzdC1leHBvcnQtc2tpcC1tZXJnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSBkaWQgbm90IHByb3BhZ2F0ZSB0aGUgdGVybWluYWwgd2lkdGggdG8gc3VicHJvY2Vzc2VzIHZpYQorICAgQ09MVU1OUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggaXQgbm93IGRvZXMuICBUaGlzIGNhdXNlZAorICAgdHJvdWJsZSB0byAiZ2l0IGNvbHVtbiIgaGVscGVyIHN1YnByb2Nlc3Mgd2hlbiAiZ2l0IHRhZyAtLWNvbHVtbj1yb3ciCisgICB0cmllZCB0byBsaXN0IHRoZSBleGlzdGluZyB0YWdzIG9uIGEgZGlzcGxheSB3aXRoIG5vbi1kZWZhdWx0IHdpZHRoLgorICAgKG1lcmdlIGI1ZDVhNTY3ZmIgbmQvdGVybS1jb2x1bW5zIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgbGVhcm5lZCB0aGF0IG91ciBzb3VyY2UgZmlsZXMgd2l0aCAiLnBsIiBhbmQgIi5weSIgZXh0ZW5zaW9ucworICAgYXJlIFBlcmwgYW5kIFB5dGhvbiBmaWxlcyByZXNwZWN0aXZlbHkgYW5kIGNoYW5nZXMgdG8gdGhlbSBhcmUKKyAgIGJldHRlciB2aWV3ZWQgYXMgc3VjaCB3aXRoIGFwcHJvcHJpYXRlIGRpZmYgZHJpdmVycy4KKyAgIChtZXJnZSA3ODE4YjYxOWUyIGFiL3BlcmwtcHl0aG9uLWF0dHJzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIHNvbWV0aW1lcyBsZWZ0IGludGVybWVkaWF0ZSAiIyBUaGlzIGlzIGEKKyAgIGNvbWJpbmF0aW9uIG9mIE4gY29tbWl0cyIgbWVzc2FnZSBtZWFudCBmb3IgdGhlIGh1bWFuIGNvbnN1bXB0aW9uCisgICBpbnNpZGUgYW4gZWRpdG9yIGluIHRoZSBmaW5hbCByZXN1bHQgaW4gY2VydGFpbiBjb3JuZXIgY2FzZXMsIHdoaWNoCisgICBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSAxNWVmNjkzMTRkIGpzL3JlYmFzZS1pLWNsZWFuLW1zZy1hZnRlci1maXh1cC1jb250aW51ZSBsYXRlciB0byBtYWludCkuCisKKyAqIEEgdGVzdCB0byBzZWUgaWYgdGhlIGZpbGVzeXN0ZW0gbm9ybWFsaXplcyBVVEYtOCBmaWxlbmFtZSBoYXMgYmVlbgorICAgdXBkYXRlZCB0byBjaGVjayB3aGF0IHdlIG5lZWQgdG8ga25vdyBpbiBhIG1vcmUgZGlyZWN0IHdheSwgaS5lLiBhCisgICBwYXRoIGNyZWF0ZWQgaW4gTkZDIGZvcm0gY2FuIGJlIGFjY2Vzc2VkIHdpdGggTkZEIGZvcm0gKG9yIHZpY2UKKyAgIHZlcnNhKSB0byBjb3BlIHdpdGggQVBGUyBhcyB3ZWxsIGFzIEhGUy4KKyAgIChtZXJnZSA3NDJhZTEwZTM1IHRiL3Rlc3QtYXBmcy11dGY4LW5vcm1hbGl6YXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyIC0tYXR0YWNoIiBjcmVhdGVkIGEgYnJva2VuIE1JTUUgbXVsdGlwYXJ0CisgICBtZXNzYWdlIGZvciB0aGUgY292ZXIgbGV0dGVyLCB3aGljaCBoYXMgYmVlbiBmaXhlZCBieSBrZWVwaW5nIHRoZQorICAgY292ZXIgbGV0dGVyIGFzIHBsYWluIHRleHQgZmlsZS4KKyAgIChtZXJnZSA1MGNkNTRlZjRlIGJjL2Zvcm1hdC1wYXRjaC1jb3Zlci1uby1hdHRhY2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgc3BsaXQtaW5kZXggZmVhdHVyZSBoYWQgYSBsb25nLXN0YW5kaW5nIGFuZCBkb3JtYW50IGJ1ZyBpbgorICAgY2VydGFpbiB1c2Ugb2YgdGhlIGluLWNvcmUgbWVyZ2UgbWFjaGluZXJ5LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA3ZGIxMTgzMDNhIGVuL3VucGFjay10cmVlcy1zcGxpdC1pbmRleC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBc2NpaWRvY3RvciBnaXZlcyBhIHJlYXNvbmFibGUgaW1pdGF0aW9uIGZvciBBc2NpaURvYywgYnV0IGRvZXMgbm90CisgICByZW5kZXIgaWxsdXN0cmF0aW9uIGluIGEgbGl0ZXJhbCBibG9jayBjb3JyZWN0bHkgd2hlbiBpbmRlbnRlZCB3aXRoCisgICBIVCBieSBkZWZhdWx0LiBUaGUgcHJvYmxlbSBpcyBmaXhlZCBieSBmb3JjaW5nIDgtc3BhY2UgdGFicy4KKyAgIChtZXJnZSAzNzk4MDUwNTFkIGJjL2FzY2lpZG9jdG9yLXRhYi13aWR0aCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAgdG8gYWRqdXN0IHRvIGEgbW9yZSByZWNlbnQgbG9ja2ZpbGUgQVBJIGNvbnZlbnRpb24gdGhhdAorICAgYWxsb3dzIGxvY2tmaWxlIGluc3RhbmNlcyBrZXB0IG9uIHRoZSBzdGFjay4KKyAgIChtZXJnZSAwZmE1YTJlZDhkIG1hL2xvY2tmaWxlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiB0aGVfcmVwb3NpdG9yeS0+aW5kZXggaXMgbm90IGEgYWxsb2NhdGVkIHBpZWNlIG9mIG1lbW9yeSBidXQKKyAgIHJlcG9fY2xlYXIoKSBpbmRpc2NyaW1pbmF0ZWx5IGF0dGVtcHRlZCB0byBmcmVlKDMpIGl0LCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDc0MzczYjVmMTAgbmQvcmVwby1jbGVhci1rZWVwLXRoZS1pbmRleCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAgdG8gYXZvaWQgbm9uLXN0YW5kYXJkLWNvbmZvcm1hbnQgcG9pbnRlciBhcml0aG1ldGljLgorICAgKG1lcmdlIGMxMTIwODRhZjkgcnMvbm8tbnVsbC1wdHItYXJpdGgtaW4tZmFzdC1leHBvcnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFuLXVwIHRvIHR1cm4gaGlzdG9yeSB0cmF2ZXJzYWwgbW9yZSByb2J1c3QgaW4gYQorICAgc2VtaS1jb3JydXB0IHJlcG9zaXRvcnkuCisgICAobWVyZ2UgODcwMmIzMGZkNyBqay91bmF2YWlsYWJsZS1jYW4tYmUtbWlzc2luZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgdXBkYXRlLXJlZiBBIEIiIGlzIHN1cHBvc2VkIHRvIGVuc3VyZSB0aGF0IHJlZiBBIGRvZXMgbm90IHlldAorICAgZXhpc3Qgd2hlbiBCIGlzIGEgTlVMTCBPSUQsIGJ1dCB0aGlzIGNoZWNrIHdhcyBub3QgZG9uZSBjb3JyZWN0bHkKKyAgIGZvciBwc2V1ZG8tcmVmcyBvdXRzaWRlIHJlZnMvIGhpZXJhcmNoeSwgZS5nLiBNRVJHRV9IRUFELgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGFuZCAiZ2l0IHN1Ym1vZHVsZSBhZGQiIHN1cHBvcnRlZCB0aGUKKyAgICItLXJlZmVyZW5jZSIgb3B0aW9uIHRvIGJvcnJvdyBvYmplY3RzIGZyb20gYSBuZWlnaGJvdXJpbmcgbG9jYWwKKyAgIHJlcG9zaXRvcnkgbGlrZSAiZ2l0IGNsb25lIiBkb2VzLCBidXQgbGFja2VkIHRoZSBtb3JlIHJlY2VudAorICAgaW52ZW50aW9uICItLWRpc3NvY2lhdGUiLiAgQWxzbyAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGhhcyBiZWVuIHRhdWdodAorICAgdG8gdGFrZSB0aGUgIi0tcHJvZ3Jlc3MiIG9wdGlvbi4KKyAgIChtZXJnZSBhMGVmMjkzNDFhIGNmL3N1Ym1vZHVsZS1wcm9ncmVzcy1kaXNzb2NpYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogVXBkYXRlIGNyZWRlbnRpYWwtbmV0cmMgaGVscGVyIChpbiBjb250cmliLykgdG8gYWxsb3cgY3VzdG9taXppbmcKKyAgIHRoZSBHUEcgdXNlZCB0byBkZWNyeXB0IHRoZSBlbmNyeXB0ZWQgLm5ldHJjIGZpbGUuCisgICAobWVyZ2UgNzg2ZWY1MGEyMyBsbS9jcmVkZW50aWFsLW5ldHJjIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBhdHRlbXB0cyB0d28gZGlmZmVyZW50IGtpbmRzIG9mICJnaXQgZmV0Y2giCisgICBhZ2FpbnN0IHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5IHRvIGdyYWIgYSBjb21taXQgYm91bmQgYXQgdGhlCisgICBzdWJtb2R1bGUncyBwYXRoLCBidXQgaXQgaW5jb3JyZWN0bHkgZ2F2ZSB1cCBpZiB0aGUgZmlyc3Qga2luZAorICAgKGkuZS4gYSBub3JtYWwgZmV0Y2gpIGZhaWxlZCwgbWFraW5nIHRoZSBzZWNvbmQgImxhc3QgcmVzb3J0IiBvbmUKKyAgIChpLmUuIGZldGNoaW5nIGFuIGV4YWN0IGNvbW1pdCBvYmplY3QgYnkgb2JqZWN0IG5hbWUpIGluZWZmZWN0aXZlLgorICAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZTMwZDgzMzY3MSBzYi9zdWJtb2R1bGUtdXBkYXRlLXRyeS1oYXJkZXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBFcnJvciBiZWhhdmlvdXIgb2YgImdpdCBncmVwIiB3aGVuIGl0IGNhbm5vdCByZWFkIHRoZSBpbmRleCB3YXMKKyAgIGluY29uc2lzdGVudCB3aXRoIG90aGVyIGNvbW1hbmRzIHRoYXQgdXNlcyB0aGUgaW5kZXgsIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQgdG8gZXJyb3Igb3V0IGVhcmx5LgorICAgKG1lcmdlIGIyYWE4NGM3ODkgc2IvZ3JlcC1kaWUtb24tdW5yZWFkYWJsZS1pbmRleCBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHVzZWQgdG8gY2FsbCByZWdmcmVlKCkgYWZ0ZXIgcmVnY29tcCgpIGZhaWxlZCBpbiBzb21lIGNvZGVwYXRocywKKyAgIHdoaWNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMTcxNTRiMTU3NiBtYS9yZWdleC1uby1yZWdmcmVlLWFmdGVyLWNvbXAtZmFpbCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBpbXBvcnQtdGFycyBzY3JpcHQgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB0YXVnaHQgdG8gaGFuZGxlCisgICB0YXJiYWxscyB3aXRoIG92ZXJseSBsb25nIHBhdGhzIHRoYXQgdXNlIFBBWCBleHRlbmRlZCBoZWFkZXJzLgorICAgKG1lcmdlIDEyZWNlYTQ2ZTMgcGEvaW1wb3J0LXRhcnMtbG9uZy1uYW1lcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmV2LXBhcnNlIFkuLi4iIGV0Yy4gbWlzYmVoYXZlZCB3aGVuIGdpdmVuIGVuZHBvaW50cyB3ZXJlCisgICBub3QgY29tbWl0dGlzaGVzLgorICAgKG1lcmdlIDBlZDU1NmQzOGYgZW4vcmV2LXBhcnNlLWludmFsaWQtcmFuZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1bGwgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1yZWJhc2UiLCB3aGVuIHRoZSBzdWJtb2R1bGUKKyAgIHJlcG9zaXRvcnkncyBoaXN0b3J5IGRpZCBub3QgaGF2ZSBhbnl0aGluZyBjb21tb24gYmV0d2VlbiBvdXJzIGFuZAorICAgdGhlIHVwc3RyZWFtJ3MsIGZhaWxlZCB0byBleGVjdXRlLiAgV2UgbmVlZCB0byBmZXRjaCBmcm9tIHRoZW0gdG8KKyAgIGNvbnRpbnVlIGV2ZW4gaW4gc3VjaCBhIGNhc2UuCisgICAobWVyZ2UgNGQzNmY4OGJlNyBqdC9zdWJtb2R1bGUtcHVsbC1yZWN1cnNlLXJlYmFzZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVtb3RlIHVwZGF0ZSIgY2FuIHRha2UgYm90aCBhIHNpbmdsZSByZW1vdGUgbmlja25hbWUgYW5kIGEKKyAgIG5pY2tuYW1lIGZvciByZW1vdGUgZ3JvdXBzLCBidXQgb25seSBvbmUgb2YgdGhlbSB3YXMgZG9jdW1lbnRlZC4KKyAgIChtZXJnZSBhOTc0NDdhNDJhIG5kL3JlbW90ZS11cGRhdGUtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogImluZGV4LXBhY2sgLS1zdHJpY3QiIGhhcyBiZWVuIHRhdWdodCB0byBtYWtlIHN1cmUgdGhhdCBpdCBydW5zIHRoZQorICAgZmluYWwgb2JqZWN0IGludGVncml0eSBjaGVja3MgYWZ0ZXIgbWFraW5nIHRoZSBmcmVzaGx5IGluZGV4ZWQKKyAgIHBhY2tmaWxlIGF2YWlsYWJsZSB0byBpdHNlbGYuCisgICAobWVyZ2UgMzczNzc0NjEyMCBqay9pbmRleC1wYWNrLW1haW50IGxhdGVyIHRvIG1haW50KS4KKworICogTWFrZSB6bGliIGluZmxhdGUgY29kZXBhdGggbW9yZSByb2J1c3QgYWdhaW5zdCB2ZXJzaW9ucyBvZiB6bGliCisgICB0aGF0IGNsb2JiZXIgdW51c2VkIHBvcnRpb24gb2Ygb3V0YnVmLgorICAgKG1lcmdlIGI2MTEzOTZlOTcgamwvemxpYi1yZXN0b3JlLW51bC10ZXJtaW5hdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBvbGQgbWVyZ2UgZ2xpdGNoIGluIERvY3VtZW50YXRpb24gZHVyaW5nIHYyLjEzLXJjMCBlcmEuCisgICAobWVyZ2UgMjhjYjA2MDIwYiBtdy9kb2MtbWVyZ2UtZW51bWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIHJlYWQgY29tcHJlc3NlZCBiaXRtYXAgd2FzIG5vdCBjYXJlZnVsIHRvIGF2b2lkIHJlYWRpbmcKKyAgIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDExNDBiZjAxZWMgamsvZXdhaC1ib3VuZHMtY2hlY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAibWFrZSBOT19JQ09OVj1Ob1RoYW5rcyIgZGlkIG5vdCBvdmVycmlkZSBORUVEU19MSUJJQ09OVgorICAgKGkuZS4gbGlua2FnZSBvZiAtbGludGwsIC1saWNvbnYsIGV0Yy4gdGhhdCBhcmUgcGxhdGZvcm0tc3BlY2lmaWMKKyAgIHR3ZWFrcyksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBmZGIxZmJiYzdkIGVzL21ha2Utbm8taWNvbnYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBtaW5vciBkb2MsIHRlc3QgYW5kIGJ1aWxkIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW51cHMuCisgICAobWVyZ2UgMjQ4ZjY2ZWQ4ZSBuZC90cmFjZS13aXRoLWVudiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTRjZWQ1NTYyYyB5cy9iaXNlY3Qtb2JqZWN0LWlkLW1pc3NpbmctY29udmVyc2lvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU5ODhlYjYzMWEgYWIvZG9jLWhhc2gtYnJva2VubmVzcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTRkNGUzMmE3MCBway90ZXN0LWF2b2lkLXBpcGUtaGlkaW5nLWV4aXQtc3RhdHVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwNWUyOTNjMWFjIGprL2Zsb2NrZmlsZS1zdGRpbyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTkxODRiMDc4OSBqay90NTU2MS1taXNzaW5nLWN1cmwgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGIxODAxYjg1YTMgbmQvd29ya3RyZWUtbW92ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYmJkMzc0ZGQyMCBhay9iaXNlY3QtZG9jLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ4NTVmMDZmYjMgbW4vc2VuZC1lbWFpbC1jcmVkZW50aWFsLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODUyM2IxZTM1NSBlbi9kb2MtdHlwb2VzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0M2I0NGNjZmU3IGpzL3Q1NDA0LXBhdGgtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkZWNmNzExZmMxIHBzL3Rlc3QtY2htdGltZS1nZXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDIyZDExYTZlOGUgZXMvd29ya3RyZWUtZG9jcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTJhNWRiYmMyMiB0Zy91c2UtZ2l0LWNvbnRhY3RzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhZGM4ODcyMjFmIHRxL3QxNTEwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiZWQyMWE4YWQ2IHNnL2RvYy1nYy1xdW90ZS1taXNtYXRjaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDczMzY0ZTRmMTAgdHovZG9jLWdpdC11cmxzLXJlZmVyZW5jZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2QxZTYwNmJhZCBiYy9tYWlsbWFwLXNlbGYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY3OTk3ZTM2ODIgYW8vY29uZmlnLWFwaS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGVlOTMwNzU0ZDggamsvYXBwbHktcC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDAxMWI2NDg2NDYgbmQvcGFjay1mb3JtYXQtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4N2E2YmI3MDFhIHNnL3Q1MzEwLWpnaXQtYml0bWFwLXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY2YjgyOTcwYWEgc2cvdDU1MTYtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQzNjJkYTA3OGUgc2cvdDcwMDUtc3BhY2VzLWluLWZpbGVuYW1lcy1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3ZDBlZTQ3YzExIGpzL3Rlc3QtdW5zZXQtcHJlcmVxIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MzU2YTNjMzU0IGFoL21pc2MtZG9jLXVwZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDkyYzRhN2ExMjkgbmQvY29tcGxldGlvbi1hbGlhc2ZpbGV0eXBlLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU4YmQ3N2I2NmEgbmQvcGFjay11bnJlYWNoYWJsZS1vYmplY3RzLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNGVkNzlkNTIwMyBzZy90NjUwMC1uby1yZWRpcmVjdC1vZi1zdGRpbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTdiOGEyZDZjZCBqay9jb25maWctYmxvYi1zYW5zLXJlcG8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU5MDU1MWNhMmMgcmQvdGFnLWRvYy1saWdodHdlaWdodCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDRmNTYwZmMxNiByZC9pbml0LXR5cG8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYxNTZhMDkzNGEgcmQvcDQtZG9jLW1hcmt1cC1lbnYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJhMDA1MDJiMTQgdGcvZG9jLXNlYy1saXN0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0N2NjOTEzMTBhIGprL3N1Ym1vZHVsZS1mc2NrLWxvb3NlLWZpeHVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlZmRlN2I3MjVjIHJkL2NvbW1lbnQtdHlwb2ZpeC1pbi1zaGExLWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdlZWRhZDE1ZGYgcmQvZGlmZi1vcHRpb25zLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU4ZWJkOTM2Y2Mga20vZG9jLXdvcmtmbG93cy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzMGFhOTZjZGY4IHJkL2RvYy1yZW1vdGUtdHJhY2tpbmctd2l0aC1oeXBoZW4gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNmMzE3ODc3ZTMga3MvYnJhbmNoLXNldC11cHN0cmVhbSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGRlMTlkNmJlOCBzZy90NzQwNi1jaGFpbi1maXggbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOThjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMS50eHQKQEAgLTAsMCArMSw2IEBACitHaXQgdjIuMTguMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjUgYW5kIGluCit2Mi4xNy4yIHRvIGFkZHJlc3MgdGhlIHJlY2VudGx5IHJlcG9ydGVkIENWRS0yMDE4LTE3NDU2OyBzZWUgdGhlCityZWxlYXNlIG5vdGVzIGZvciB0aG9zZSB2ZXJzaW9ucyBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGIxNjhhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjIudHh0CkBAIC0wLDAgKzEsOCBAQAorR2l0IHYyLjE4LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC42LCB2Mi4xNS40CithbmQgaW4gdjIuMTcuMywgYWRkcmVzc2luZyB0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsCitDVkUtMjAxOS0xMzQ5LCBDVkUtMjAxOS0xMzUwLCBDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLAorQ1ZFLTIwMTktMTM1MywgQ1ZFLTIwMTktMTM1NCwgYW5kIENWRS0yMDE5LTEzODc7IHNlZSB0aGUgcmVsZWFzZSBub3RlcworZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MWM3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMC50eHQKQEAgLTAsMCArMSw2MTUgQEAKK0dpdCAyLjE5IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi4xOAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogImdpdCBkaWZmIiBjb21wYXJlcyB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUuICBGb3IgcGF0aHMKKyAgIGFkZGVkIHdpdGggaW50ZW50LXRvLWFkZCBiaXQsIHRoZSBjb21tYW5kIHNob3dzIHRoZSBmdWxsIGNvbnRlbnRzCisgICBvZiB0aGVtIGFzIGFkZGVkLCBidXQgdGhlIHBhdGhzIHRoZW1zZWx2ZXMgd2VyZSBub3QgbWFya2VkIGFzIG5ldworICAgZmlsZXMuICBUaGV5IGFyZSBub3cgc2hvd24gYXMgbmV3IGJ5IGRlZmF1bHQuCisKKyAgICJnaXQgYXBwbHkiIGxlYXJuZWQgdGhlICItLWludGVudC10by1hZGQiIG9wdGlvbiBzbyB0aGF0IGFuCisgICBvdGhlcndpc2Ugd29ya2luZy10cmVlLW9ubHkgYXBwbGljYXRpb24gb2YgYSBwYXRjaCB3aWxsIGFkZCBuZXcKKyAgIHBhdGhzIHRvIHRoZSBpbmRleCBtYXJrZWQgd2l0aCB0aGUgImludGVudC10by1hZGQiIGJpdC4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRoZSAiLS1jb2x1bW4iIG9wdGlvbiB0aGF0IGdpdmVzIG5vdCBqdXN0IHRoZQorICAgbGluZSBudW1iZXIgYnV0IHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBoaXQuCisKKyAqIFRoZSAiLWwiIG9wdGlvbiBpbiAiZ2l0IGJyYW5jaCAtbCIgaXMgYW4gdW5mb3J0dW5hdGUgc2hvcnQtaGFuZCBmb3IKKyAgICItLWNyZWF0ZS1yZWZsb2ciLCBidXQgbWFueSB1c2VycywgYm90aCBvbGQgYW5kIG5ldywgc29tZWhvdyBleHBlY3QKKyAgIGl0IHRvIGJlIHNvbWV0aGluZyBlbHNlLCBwZXJoYXBzICItLWxpc3QiLiAgVGhpcyBzdGVwIHdhcm5zIHdoZW4gIi1sIgorICAgaXMgdXNlZCBhcyBhIHNob3J0LWhhbmQgZm9yICItLWNyZWF0ZS1yZWZsb2ciIGFuZCB3YXJucyBhYm91dCB0aGUKKyAgIGZ1dHVyZSByZXB1cnBvc2luZyBvZiB0aGUgaXQgd2hlbiBpdCBpcyB1c2VkLgorCisgKiBUaGUgdXNlcmRpZmYgcGF0dGVybiBmb3IgLnBocCBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBUaGUgY29udGVudC10cmFuc2Zlci1lbmNvZGluZyBvZiB0aGUgbWVzc2FnZSAiZ2l0IHNlbmQtZW1haWwiIHNlbmRzCisgICBvdXQgYnkgZGVmYXVsdCB3YXMgOGJpdCwgd2hpY2ggY2FuIGNhdXNlIHRyb3VibGUgd2hlbiB0aGVyZSBpcyBhbgorICAgb3ZlcmxvbmcgbGluZSB0byBidXN0IFJGQyA1MzIyLzI4MjIgbGltaXQuICBBIG5ldyBvcHRpb24gJ2F1dG8nIHRvCisgICBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byBxdW90ZWQtcHJpbnRhYmxlIHdoZW4gdGhlcmUgaXMgc3VjaCBhIGxpbmUKKyAgIGluIHRoZSBwYXlsb2FkIGhhcyBiZWVuIGludHJvZHVjZWQgYW5kIGlzIG1hZGUgdGhlIGRlZmF1bHQuCisKKyAqICJnaXQgY2hlY2tvdXQiIGFuZCAiZ2l0IHdvcmt0cmVlIGFkZCIgbGVhcm5lZCB0byBob25vcgorICAgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZSB3aGVuIGF1dG8tdml2aWZ5aW5nIGEgbG9jYWwgYnJhbmNoIG91dCBvZiBhCisgICByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGluIGEgcmVwb3NpdG9yeSB3aXRoIG11bHRpcGxlIHJlbW90ZXMgdGhhdAorICAgaGF2ZSB0cmFja2luZyBicmFuY2hlcyB0aGF0IHNoYXJlIHRoZSBzYW1lIG5hbWVzLgorICAgKG1lcmdlIDhkN2I1NThiYWUgYWIvY2hlY2tvdXQtZGVmYXVsdC1yZW1vdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdGhlICItLW9ubHktbWF0Y2hpbmciIG9wdGlvbi4KKworICogImdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzIiBtb2RlIG5vdyBoYW5kbGVzIG9jdG9wdXMgbWVyZ2VzIGFzCisgICB3ZWxsLgorCisgKiBBZGQgYSBzZXJ2ZXItc2lkZSBrbm9iIHRvIHNraXAgY29tbWl0cyBpbiBleHBvbmVudGlhbC9maWJib25hY2NpCisgICBzdHJpZGUgaW4gYW4gYXR0ZW1wdCB0byBjb3ZlciB3aWRlciBzd2F0aCBvZiBoaXN0b3J5IHdpdGggYSBzbWFsbGVyCisgICBudW1iZXIgb2YgaXRlcmF0aW9ucywgcG90ZW50aWFsbHkgYWNjZXB0aW5nIGEgbGFyZ2VyIHBhY2tmaWxlCisgICB0cmFuc2ZlciwgaW5zdGVhZCBvZiBnb2luZyBiYWNrIG9uZSBjb21taXQgYSB0aW1lIGR1cmluZyBjb21tb24KKyAgIGFuY2VzdG9yIGRpc2NvdmVyeSBkdXJpbmcgdGhlICJnaXQgZmV0Y2giIHRyYW5zYWN0aW9uLgorICAgKG1lcmdlIDQyY2M3NDg1YTIganQvZmV0Y2gtbmVnb3RpYXRvci1za2lwcGluZyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29yZS51c2VyZXBsYWNlcmVmcyBoYXMgYmVlbiBhZGRlZCwKKyAgIHByaW1hcmlseSB0byBoZWxwIHNlcnZlciBpbnN0YWxsYXRpb25zIHRoYXQgd2FudCB0byBpZ25vcmUgdGhlCisgICByZXBsYWNlIG1lY2hhbmlzbSBhbHRvZ2V0aGVyLgorCisgKiBUZWFjaCAiZ2l0IHRhZyAtcyIgZXRjLiBhIGZldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyAoZ3BnLmZvcm1hdAorICAgdGhhdCBjYW4gYmUgc2V0IHRvICJvcGVucGdwIiBvciAieDUwOSIsIGFuZCBncGcuPGZvcm1hdD4ucHJvZ3JhbQorICAgdGhhdCBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBwcm9ncmFtIHRvIHVzZSB0byBkZWFsIHdpdGggdGhlIGZvcm1hdCkKKyAgIHRvIGFsbG93IHguNTA5IGNlcnRzIHdpdGggQ01TIHZpYSAiZ3Bnc20iIHRvIGJlIHVzZWQgaW5zdGVhZCBvZgorICAgb3BlbnBncCB2aWEgImdudXBnIi4KKworICogTWFueSBtb3JlIHN0cmluZ3MgYXJlIHByZXBhcmVkIGZvciBsMTBuLgorCisgKiAiZ2l0IHA0IHN1Ym1pdCIgbGVhcm5zIHRvIGFzayBpdHMgb3duIHByZS1zdWJtaXQgaG9vayBpZiBpdCBzaG91bGQKKyAgIGNvbnRpbnVlIHdpdGggc3VibWl0dGluZy4KKworICogVGhlIHRlc3QgcGVyZm9ybWVkIGF0IHRoZSByZWNlaXZpbmcgZW5kIG9mICJnaXQgcHVzaCIgdG8gcHJldmVudAorICAgYmFkIG9iamVjdHMgZnJvbSBlbnRlcmluZyByZXBvc2l0b3J5IGNhbiBiZSBjdXN0b21pemVkIHZpYQorICAgcmVjZWl2ZS5mc2NrLiogY29uZmlndXJhdGlvbiB2YXJpYWJsZXM7IHdlIG5vdyBoYXZlIGdhaW5lZCBhCisgICBjb3VudGVycGFydCB0byBkbyB0aGUgc2FtZSBvbiB0aGUgImdpdCBmZXRjaCIgc2lkZSwgd2l0aAorICAgZmV0Y2guZnNjay4qIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2U9aW50ZXJhY3RpdmUiIGxlYXJuZWQgImkiIGFzIGEgc2hvcnQtaGFuZCBmb3IKKyAgICJpbnRlcmFjdGl2ZSIuCisKKyAqICJnaXQgaW5zdGF3ZWIiIGhhcyBiZWVuIGFkanVzdGVkIHRvIHJ1biBiZXR0ZXIgd2l0aCBuZXdlciBBcGFjaGUgb24KKyAgIFJlZEhhdCBiYXNlZCBkaXN0cm9zLgorCisgKiAiZ2l0IHJhbmdlLWRpZmYiIGlzIGEgcmVpbXBsZW1lbnRhdGlvbiBvZiAiZ2l0IHRiZGlmZiIgdGhhdCBsZXRzIHVzCisgICBjb21wYXJlIGluZGl2aWR1YWwgcGF0Y2hlcyBpbiB0d28gaXRlcmF0aW9ucyBvZiBhIHRvcGljLgorCisgKiBUaGUgc2lkZWJhbmQgY29kZSBsZWFybmVkIHRvIG9wdGlvbmFsbHkgcGFpbnQgc2VsZWN0ZWQga2V5d29yZHMgYXQKKyAgIHRoZSBiZWdpbm5pbmcgb2YgaW5jb21pbmcgbGluZXMgb24gdGhlIHJlY2VpdmluZyBlbmQuCisKKyAqICJnaXQgYnJhbmNoIC0tbGlzdCIgbGVhcm5lZCB0byB0YWtlIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgZnJvbSB0aGUKKyAgICdicmFuY2guc29ydCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwganVzdCBsaWtlICJnaXQgdGFnIC0tbGlzdCIKKyAgIHBheXMgYXR0ZW50aW9uIHRvICd0YWcuc29ydCcuCisKKyAqICJnaXQgd29ya3RyZWUiIGNvbW1hbmQgbGVhcm5lZCAiLS1xdWlldCIgb3B0aW9uIHRvIG1ha2UgaXQgbGVzcworICAgdmVyYm9zZS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUaGUgYnVsayBvZiAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIiBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworICogVGhlIGluLWNvcmUgImNvbW1pdCIgb2JqZWN0IGhhZCBhbiBhbGwtcHVycG9zZSAidm9pZCAqdXRpbCIgZmllbGQsCisgICB3aGljaCB3YXMgdHJpY2t5IHRvIHVzZSBlc3BlY2lhbGx5IGluIGxpYnJhcnktaXNoIHBhcnQgb2YgdGhlCisgICBjb2RlLiAgQWxsIG9mIHRoZSBleGlzdGluZyB1c2VzIG9mIHRoZSBmaWVsZCBoYXMgYmVlbiBtaWdyYXRlZCB0byBhCisgICBtb3JlIGRlZGljYXRlZCAiY29tbWl0LXNsYWIiIG1lY2hhbmlzbSBhbmQgdGhlIGZpZWxkIGlzIGVsaW1pbmF0ZWQuCisKKyAqIEEgbGVzcyBvZnRlbiB1c2VkIGNvbW1hbmQgImdpdCBzaG93LWluZGV4IiBoYXMgYmVlbiBtb2Rlcm5pemVkLgorICAgKG1lcmdlIGZiMzAxMGMzMWYgamsvc2hvdy1pbmRleCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb252ZXJzaW9uIHRvIHBhc3MgInRoZV9yZXBvc2l0b3J5IiBhbmQgdGhlbiAiYV9yZXBvc2l0b3J5IgorICAgdGhyb3VnaG91dCB0aGUgb2JqZWN0IGFjY2VzcyBBUEkgY29udGludWVzLgorCisgKiBDb250aW51aW5nIHdpdGggdGhlIGlkZWEgdG8gcHJvZ3JhbW1hdGljYWxseSBlbnVtZXJhdGUgdmFyaW91cworICAgcGllY2VzIG9mIGRhdGEgcmVxdWlyZWQgZm9yIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uLCB0ZWFjaCB0aGUKKyAgIGNvZGViYXNlIHRvIHJlcG9ydCB0aGUgbGlzdCBvZiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgc3ViY29tbWFuZHMgY2FyZSBhYm91dCB0byBoZWxwIGNvbXBsZXRlIHRoZW0uCisKKyAqIFNlcGFyYXRlICJyZWJhc2UgLXAiIGNvZGVwYXRoIG91dCBvZiAicmViYXNlIC1pIiBpbXBsZW1lbnRhdGlvbiB0bworICAgc2xpbSBkb3duIHRoZSBsYXR0ZXIgYW5kIG1ha2UgaXQgZWFzaWVyIHRvIG1hbmFnZS4KKworICogTWFrZSByZWZzcGVjIHBhcnNpbmcgY29kZXBhdGggbW9yZSByb2J1c3QuCisKKyAqIFNvbWUgZmxha3kgdGVzdHMgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiBDb250aW51aW5nIHdpdGggdGhlIGlkZWEgdG8gcHJvZ3JhbW1hdGljYWxseSBlbnVtZXJhdGUgdmFyaW91cworICAgcGllY2VzIG9mIGRhdGEgcmVxdWlyZWQgZm9yIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uLCB0aGUgY29kZWJhc2UKKyAgIGhhcyBiZWVuIHRhdWdodCB0byBlbnVtZXJhdGUgb3B0aW9ucyBwcmVmaXhlZCB3aXRoICItLW5vLSIgdG8KKyAgIG5lZ2F0ZSB0aGVtLgorCisgKiBCdWlsZCBhbmQgdGVzdCBwcm9jZWR1cmUgZm9yIG5ldHJjIGNyZWRlbnRpYWwgaGVscGVyIChpbiBjb250cmliLykKKyAgIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucyBmcm9tIGV3YWgKKyAgIGJpdG1hcCBzdWJzeXN0ZW0uCisKKyAqIENvZGUgcHJlcGFyYXRpb24gdG8gbWFrZSAiZ2l0IHA0IiBjbG9zZXIgdG8gYmUgdXNhYmxlIHdpdGggUHl0aG9uIDMuCisKKyAqIFRpZ2h0ZW4gdGhlIEFQSSB0byBtYWtlIGl0IGhhcmRlciB0byBtaXN1c2UgaW4tdHJlZSAuZ2l0bW9kdWxlcworICAgZmlsZSwgZXZlbiB0aG91Z2ggaXQgc2hhcmVzIHRoZSBzYW1lIHN5bnRheCB3aXRoIGNvbmZpZ3VyYXRpb24KKyAgIGZpbGVzLCB0byByZWFkIHJhbmRvbSBjb25maWd1cmF0aW9uIGl0ZW1zIGZyb20gaXQuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYXZvaWQgYXR0ZW1wdGluZyB0byBjcmVhdGUKKyAgIGRlbHRhIGFnYWluc3QgYSB6ZXJvLWJ5dGUtbG9uZyBzdHJpbmcsIHdoaWNoIGlzIHBvaW50bGVzcy4KKworICogVGhlIGNvZGViYXNlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY29tcGlsZSBjbGVhbmx5IHdpdGggLXBlZGFudGljCisgICBvcHRpb24uCisgICAobWVyZ2UgMmI2NDdhMDVkNyBiYi9wZWRhbnRpYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjaGFyYWN0ZXIgZGlzcGxheSB3aWR0aCB0YWJsZSBoYXMgYmVlbiB1cGRhdGVkIHRvIG1hdGNoIHRoZQorICAgbGF0ZXN0IFVuaWNvZGUgc3RhbmRhcmQuCisgICAobWVyZ2UgNTcwOTUxZWVhMiBiYi91bmljb2RlLTExLXdpZHRoIGxhdGVyIHRvIG1haW50KS4KKworICogdGVzdC1saW50IG5vdyBsb29rcyBmb3IgYnJva2VuIHVzZSBvZiAiVkFSPVZBTCBzaGVsbF9mdW5jIiBpbiB0ZXN0CisgICBzY3JpcHRzLgorCisgKiBDb252ZXJzaW9uIGZyb20gdWNoYXJbNDBdIHRvIHN0cnVjdCBvYmplY3RfaWQgY29udGludWVzLgorCisgKiBSZWNlbnQgInNlY3VyaXR5IGZpeCIgdG8gcGF5IGF0dGVudGlvbiB0byBjb250ZW50cyBvZiAiLmdpdG1vZHVsZXMiCisgICB3aGlsZSBhY2NlcHRpbmcgImdpdCBwdXNoIiB3YXMgYSBiaXQgb3Zlcmx5IHN0cmljdCB0aGFuIG5lY2Vzc2FyeSwKKyAgIHdoaWNoIGhhcyBiZWVuIGFkanVzdGVkLgorCisgKiAiZ2l0IGZzY2siIGxlYXJucyB0byBtYWtlIHN1cmUgdGhlIG9wdGlvbmFsIGNvbW1pdC1ncmFwaCBmaWxlIGlzIGluCisgICBhIHNhbmUgc3RhdGUuCisKKyAqICJnaXQgZGlmZiAtLWNvbG9yLW1vdmVkIiBmZWF0dXJlIGhhcyBmdXJ0aGVyIGJlZW4gdHdlYWtlZC4KKworICogQ29kZSByZXN0cnVjdHVyaW5nIGFuZCBhIHNtYWxsIGZpeCB0byB0cmFuc3BvcnQgcHJvdG9jb2wgdjIgZHVyaW5nCisgICBmZXRjaGluZy4KKworICogUGFyc2luZyBvZiAtTFs8Tj5dWyxbPE0+XV0gcGFyYW1ldGVycyAiZ2l0IGJsYW1lIiBhbmQgImdpdCBsb2ciCisgICB0YWtlIGhhcyBiZWVuIHR3ZWFrZWQuCisKKyAqIGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKCkgYW5kIGZyaWVuZHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gZmluZAorICAgaW4tY29yZSBvYmplY3QgZm9yIGEgc3BlY2lmaWMgaW4tY29yZSByZXBvc2l0b3J5IGluc3RhbmNlLgorCisgKiBWYXJpb3VzIGdsaXRjaGVzIGluIHRoZSBoZXVyaXN0aWNzIG9mIG1lcmdlLXJlY3Vyc2l2ZSBzdHJhdGVneSBoYXZlCisgICBiZWVuIGRvY3VtZW50ZWQgaW4gbmV3IHRlc3RzLgorCisgKiAiZ2l0IGZldGNoIiBsZWFybmVkIGEgbmV3IG9wdGlvbiAiLS1uZWdvdGlhdGlvbi10aXAiIHRvIGxpbWl0IHRoZQorICAgc2V0IG9mIGNvbW1pdHMgaXQgdGVsbHMgdGhlIG90aGVyIGVuZCBhcyAiaGF2ZSIsIHRvIHJlZHVjZSB3YXN0ZWQKKyAgIGJhbmR3aWR0aCBhbmQgY3ljbGVzLCB3aGljaCB3b3VsZCBiZSBoZWxwZnVsIHdoZW4gdGhlIHJlY2VpdmluZworICAgcmVwb3NpdG9yeSBoYXMgYSBsb3Qgb2YgcmVmcyB0aGF0IGhhdmUgbGl0dGxlIHRvIGRvIHdpdGggdGhlCisgICBoaXN0b3J5IGF0IHRoZSByZW1vdGUgaXQgaXMgZmV0Y2hpbmcgZnJvbS4KKworICogRm9yIGEgbGFyZ2UgdHJlZSwgdGhlIGluZGV4IG5lZWRzIHRvIGhvbGQgbWFueSBjYWNoZSBlbnRyaWVzCisgICBhbGxvY2F0ZWQgb24gaGVhcC4gIFRoZXNlIGNhY2hlIGVudHJpZXMgYXJlIG5vdyBhbGxvY2F0ZWQgb3V0IG9mIGEKKyAgIGRlZGljYXRlZCBtZW1vcnkgcG9vbCB0byBhbW9ydGl6ZSBtYWxsb2MoMykgb3ZlcmhlYWQuCisKKyAqIFRlc3RzIHRvIGNvdmVyIHZhcmlvdXMgY29uZmxpY3RpbmcgY2FzZXMgaGF2ZSBiZWVuIGFkZGVkIGZvcgorICAgbWVyZ2UtcmVjdXJzaXZlLgorCisgKiBUZXN0cyB0byBjb3ZlciBjb25mbGljdCBjYXNlcyB0aGF0IGludm9sdmUgc3VibW9kdWxlcyBoYXZlIGJlZW4KKyAgIGFkZGVkIGZvciBtZXJnZS1yZWN1cnNpdmUuCisKKyAqIExvb2sgZm9yIGJyb2tlbiAiJiYiIGNoYWlucyB0aGF0IGFyZSBoaWRkZW4gaW4gc3Vic2hlbGwsIG1hbnkgb2YKKyAgIHdoaWNoIGhhdmUgYmVlbiBmb3VuZCBhbmQgY29ycmVjdGVkLgorCisgKiBUaGUgc2luZ2xldG9uIGNvbW1pdC1ncmFwaCBpbi1jb3JlIGluc3RhbmNlIGlzIG1hZGUgcGVyIGluLWNvcmUKKyAgIHJlcG9zaXRvcnkgaW5zdGFuY2UuCisKKyAqICJtYWtlIERFVkVMT1BFUj0xIERFVk9QVFM9cGVkYW50aWMiIGFsbG93cyBkZXZlbG9wZXJzIHRvIGNvbXBpbGUKKyAgIHdpdGggLXBlZGFudGljIG9wdGlvbiwgd2hpY2ggbWF5IGNhdGNoIG1vcmUgcHJvYmxlbWF0aWMgcHJvZ3JhbQorICAgY29uc3RydWN0cyBhbmQgcG90ZW50aWFsIGJ1Z3MuCisKKyAqIFByZXBhcmF0b3J5IGNvZGUgdG8gbGF0ZXIgYWRkIGpzb24gb3V0cHV0IGZvciB0ZWxlbWV0cnkgZGF0YSBoYXMKKyAgIGJlZW4gYWRkZWQuCisKKyAqIFVwZGF0ZSB0aGUgd2F5IHdlIHVzZSBDb2NjaW5lbGxlIHRvIGZpbmQgb3V0LW9mLXN0eWxlIGNvZGUgdGhhdAorICAgbmVlZCB0byBiZSBtb2Rlcm5pc2VkLgorCisgKiBJdCBpcyB0b28gZWFzeSB0byBtaXN1c2Ugc3lzdGVtIEFQSSBmdW5jdGlvbnMgc3VjaCBhcyBzdHJjYXQoKTsKKyAgIHRoZXNlIHNlbGVjdGVkIGZ1bmN0aW9ucyBhcmUgbm93IGZvcmJpZGRlbiBpbiB0aGlzIGNvZGViYXNlIGFuZAorICAgd2lsbCBjYXVzZSBhIGNvbXBpbGF0aW9uIGZhaWx1cmUuCisKKyAqIEFkZCBhIHNjcmlwdCAoaW4gY29udHJpYi8pIHRvIGhlbHAgdXNlcnMgb2YgVlNDb2RlIHdvcmsgYmV0dGVyIHdpdGgKKyAgIG91ciBjb2RlYmFzZS4KKworICogVGhlIFRyYXZpcyBDSSBzY3JpcHRzIHdlcmUgdGF1Z2h0IHRvIHNoaXAgYmFjayB0aGUgdGVzdCBkYXRhIGZyb20KKyAgIGZhaWxlZCB0ZXN0cy4KKyAgIChtZXJnZSBhZWE4ODc5YTZhIHNnL3RyYXZpcy1yZXRyaWV2ZS10cmFzaC11cG9uLWZhaWx1cmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcGFyc2Utb3B0aW9ucyBtYWNoaW5lcnkgbGVhcm5lZCB0byByZWZyYWluIGZyb20gZW5jbG9zaW5nCisgICBwbGFjZWhvbGRlciBzdHJpbmcgaW5zaWRlIGEgIjxicmEiIGFuZCAia2V0PiIgcGFpciBhdXRvbWF0aWNhbGx5CisgICB3aXRob3V0IFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAuICBFeGlzdGluZyBoZWxwIHRleHQgZm9yIG9wdGlvbgorICAgYXJndW1lbnRzIHRoYXQgYXJlIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5IGhhdmUgYmVlbiBpZGVudGlmaWVkIGFuZAorICAgZml4ZWQuCisgICAobWVyZ2UgNWYwZGY0NGNkNyBycy9wYXJzZS1vcHQtbGl0aGVscCBsYXRlciB0byBtYWludCkuCisKKyAqIE5vaXNld29yZCAiZXh0ZXJuIiBoYXMgYmVlbiByZW1vdmVkIGZyb20gZnVuY3Rpb24gZGVjbHMgaW4gdGhlCisgICBoZWFkZXIgZmlsZXMuCisKKyAqIEEgZmV3IGF0b21zIGxpa2UgJShvYmplY3R0eXBlKSBhbmQgJShvYmplY3RzaXplKSBpbiB0aGUgZm9ybWF0CisgICBzcGVjaWZpZXIgb2YgImZvci1lYWNoLXJlZiAtLWZvcm1hdD08Zm9ybWF0PiIgY2FuIGJlIGZpbGxlZCB3aXRob3V0CisgICBnZXR0aW5nIHRoZSBmdWxsIGNvbnRlbnRzIG9mIHRoZSBvYmplY3QsIGJ1dCBqdXN0IHdpdGggdGhlIG9iamVjdAorICAgaGVhZGVyLiAgVGhlc2UgY2FzZXMgaGF2ZSBiZWVuIG9wdGltaXplZCBieSBjYWxsaW5nCisgICBvaWRfb2JqZWN0X2luZm8oKSBBUEkgKGluc3RlYWQgb2YgcmVhZGluZyBhbmQgaW5zcGVjdGluZyB0aGUgZGF0YSkuCisKKyAqIFRoZSBlbmQgcmVzdWx0IG9mIGRvY3VtZW50YXRpb24gdXBkYXRlIGhhcyBiZWVuIG1hZGUgdG8gYmUKKyAgIGluc3BlY3RlZCBtb3JlIGVhc2lseSB0byBoZWxwIGRldmVsb3BlcnMuCisKKyAqIFRoZSBBUEkgdG8gaXRlcmF0ZSBvdmVyIGFsbCBvYmplY3RzIGxlYXJuZWQgdG8gb3B0aW9uYWxseSBsaXN0CisgICBvYmplY3RzIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiBwYWNrZmlsZXMsIHdoaWNoIGhlbHBzIGxvY2FsaXR5CisgICBvZiBhY2Nlc3MgaWYgdGhlIGNhbGxlciBhY2Nlc3NlcyB0aGVzZSBvYmplY3RzIHdoaWxlIGFzIG9iamVjdHMgYXJlCisgICBlbnVtZXJhdGVkLgorCisgKiBJbXByb3ZlIGJ1aWx0LWluIGZhY2lsaXR5IHRvIGNhdGNoIGJyb2tlbiAmJi1jaGFpbiBpbiB0aGUgdGVzdHMuCisKKyAqIFRoZSBtb3JlIGxpYnJhcnktaXNoIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSBsZWFybmVkIHRvIHdvcmsgb24gdGhlCisgICBpbi1jb3JlIGluZGV4LXN0YXRlIGluc3RhbmNlIHRoYXQgaXMgcGFzc2VkIGluIGJ5IHRoZWlyIGNhbGxlcnMsCisgICBpbnN0ZWFkIG9mIGFsd2F5cyB3b3JraW5nIG9uIHRoZSBzaW5nbGV0b24gInRoZV9pbmRleCIgaW5zdGFuY2UuCisKKyAqIEEgdGVzdCBwcmVyZXF1aXNpdGUgZGVmaW5lZCBieSB2YXJpb3VzIHRlc3Qgc2NyaXB0cyB3aXRoIHNsaWdodGx5CisgICBkaWZmZXJlbnQgc2VtYW50aWNzIGhhcyBiZWVuIGNvbnNvbGlkYXRlZCBpbnRvIGEgc2luZ2xlIGNvcHkgYW5kCisgICBtYWRlIGludG8gYSBsYXppbHkgZGVmaW5lZCBvbmUuCisgICAobWVyZ2UgNmVjNjMzMDU5YSB3Yy9tYWtlLWZ1bm55bmFtZXMtc2hhcmVkLWxhenktcHJlcmVxIGxhdGVyIHRvIG1haW50KS4KKworICogQWZ0ZXIgYSBwYXJ0aWFsIGNsb25lLCByZXBlYXRlZCBmZXRjaGVzIGZyb20gcHJvbWlzb3IgcmVtb3RlIHdvdWxkCisgICBoYXZlIGFjY3VtdWxhdGVkIG1hbnkgcGFja2ZpbGVzIG1hcmtlZCB3aXRoIC5wcm9taXNvciBiaXQgd2l0aG91dAorICAgZ2V0dGluZyB0aGVtIGNvYWxlc2NlZCBpbnRvIGZld2VyIHBhY2tmaWxlcywgaHVydGluZyBwZXJmb3JtYW5jZS4KKyAgICJnaXQgcmVwYWNrIiBub3cgbGVhcm5lZCB0byByZXBhY2sgdGhlbS4KKworICogUGFydGlhbGx5IHJldmVydCB0aGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgaGFzaCBmdW5jdGlvbnMgdG8gcmVnYWluCisgICBoYXNoIGNvbXBhcmlzb24gcGVyZm9ybWFuY2U7IHdlJ2QgdGhpbmsgb2YgYSB3YXkgdG8gZG8gdGhpcyBiZXR0ZXIKKyAgIGluIHRoZSBuZXh0IGN5Y2xlLgorCisgKiAiZ2l0IGhlbHAgLS1jb25maWciICh3aGljaCBpcyB1c2VkIGluIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uKQorICAgbWlzc2VkIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBub3QgZGVzY3JpYmVkIGluIHRoZSBtYWluCisgICBjb25maWcudHh0IGZpbGUgYnV0IGFyZSBkZXNjcmliZWQgaW4gYW5vdGhlciBmaWxlIHRoYXQgaXMgaW5jbHVkZWQKKyAgIGJ5IGl0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSB0ZXN0IGxpbnRlciBjb2RlIGhhcyBsZWFybmVkIHRoYXQgdGhlIGVuZCBvZiBoZXJlLWRvYyBtYXJrCisgICAiRU9GIiBjYW4gYmUgcXVvdGVkIGluIGEgZG91YmxlLXF1b3RlIHBhaXIsIG5vdCBqdXN0IGluIGEKKyAgIHNpbmdsZS1xdW90ZSBwYWlyLgorCisKK0ZpeGVzIHNpbmNlIHYyLjE4CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHJlbW90ZSB1cGRhdGUiIGNhbiB0YWtlIGJvdGggYSBzaW5nbGUgcmVtb3RlIG5pY2tuYW1lIGFuZCBhCisgICBuaWNrbmFtZSBmb3IgcmVtb3RlIGdyb3VwcywgYW5kIHRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pCisgICBoYXMgYmVlbiB0YXVnaHQgYWJvdXQgaXQuCisgICAobWVyZ2UgOWNkNDM4MmFkNSBscy9jb21wbGV0ZS1yZW1vdGUtdXBkYXRlLW5hbWVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCAtLXNoYWxsb3ctc2luY2U9PGN1dG9mZj4iIHRoYXQgc3BlY2lmaWVzIHRoZSBjdXQtb2ZmCisgICBwb2ludCB0aGF0IGlzIG5ld2VyIHRoYW4gdGhlIGV4aXN0aW5nIGhpc3RvcnkgdXNlZCB0byBlbmQgdXAKKyAgIGdyYWJiaW5nIHRoZSBlbnRpcmUgaGlzdG9yeS4gIFN1Y2ggYSByZXF1ZXN0IG5vdyBlcnJvcnMgb3V0LgorICAgKG1lcmdlIGUzNGRlNzNjNTYgbmQvcmVqZWN0LWVtcHR5LXNoYWxsb3ctcmVxdWVzdCBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBmb3IgMi4xNy1lcmEgcmVncmVzc2lvbiBhcm91bmQgYGNvcmUuc2FmZWNybGZgLgorICAgKG1lcmdlIDZjYjA5MTI1YmUgYXMvc2FmZWNybGYtcXVpZXQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlY2VudCBhZGRpdGlvbiBvZiAicGFydGlhbCBjbG9uZSIgZXhwZXJpbWVudGFsIGZlYXR1cmUga2lja2VkCisgICBpbiB3aGVuIGl0IHNob3VsZG4ndCwgbmFtZWx5LCB3aGVuIHRoZXJlIGlzIG5vIHBhcnRpYWwtY2xvbmUgZmlsdGVyCisgICBkZWZpbmVkIGV2ZW4gaWYgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgaXMgc2V0LgorICAgKG1lcmdlIGNhYzExMzdkYzQgamgvcGFydGlhbC1jbG9uZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc2VuZC1wYWNrIC0tc2lnbmVkIiAoaGVuY2UgImdpdCBwdXNoIC0tc2lnbmVkIiBvdmVyIHRoZSBodHRwCisgICB0cmFuc3BvcnQpIGRpZCBub3QgcmVhZCB1c2VyIGlkZW50IGZyb20gdGhlIGNvbmZpZyBtZWNoYW5pc20gdG8KKyAgIGRldGVybWluZSB3aG9tIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUgYXMsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZDA2N2Q5ODg4NyBtcy9zZW5kLXBhY2staG9ub3ItY29uZmlnIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaC1wYWNrIC0tYWxsIiB1c2VkIHRvIHVubmVjZXNzYXJpbHkgZmFpbCB1cG9uIHNlZWluZyBhbgorICAgYW5ub3RhdGVkIHRhZyB0aGF0IHBvaW50cyBhdCBhbiBvYmplY3Qgb3RoZXIgdGhhbiBhIGNvbW1pdC4KKyAgIChtZXJnZSBjMTJjOWRmNTI3IGprL2ZldGNoLWFsbC1wZWVsZWQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiB1c2VyIGVkaXRzIHRoZSBwYXRjaCBpbiAiZ2l0IGFkZCAtcCIgYW5kIHRoZSB1c2VyJ3MgZWRpdG9yIGlzCisgICBzZXQgdG8gc3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZXMgaW5kaXNjcmltaW5hdGVseSwgYW4gZW1wdHkgbGluZQorICAgdGhhdCBpcyB1bmNoYW5nZWQgaW4gdGhlIHBhdGNoIHdvdWxkIGJlY29tZSBjb21wbGV0ZWx5IGVtcHR5CisgICAoaW5zdGVhZCBvZiBhIGxpbmUgd2l0aCBhIHNvbGUgU1Agb24gaXQpLiAgVGhlIGNvZGUgaW50cm9kdWNlZCBpbgorICAgR2l0IDIuMTcgdGltZWZyYW1lIGZhaWxlZCB0byBwYXJzZSBzdWNoIGEgcGF0Y2gsIGJ1dCBub3cgaXQgbGVhcm5lZAorICAgdG8gbm90aWNlIHRoZSBzaXR1YXRpb24gYW5kIGNvcGUgd2l0aCBpdC4KKyAgIChtZXJnZSBmNGQzNWE2YjQ5IHB3L2FkZC1wLXJlY291bnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byB0cnkgc2VlaW5nIGlmIGEgZmV0Y2ggaXMgbmVjZXNzYXJ5IGluIGEgc3VibW9kdWxlCisgICBkdXJpbmcgYSBmZXRjaCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIGdvdCBjb25mdXNlZCB3aGVuIHRoZSBwYXRoCisgICB0byB0aGUgc3VibW9kdWxlIHdhcyBjaGFuZ2VkIGluIHRoZSByYW5nZSBvZiBjb21taXRzIGluIHRoZQorICAgc3VwZXJwcm9qZWN0LCBzb21ldGltZXMgc2hvd2luZyAiKG51bGwpIi4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBCdWdmaXggZm9yICJyZWJhc2UgLWkiIGNvcm5lciBjYXNlIHJlZ3Jlc3Npb24uCisgICAobWVyZ2UgYTkyNzljNjc4NSBwdy9yZWJhc2UtaS1rZWVwLXJld29yZC1hZnRlci1jb25mbGljdCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudGx5IGFkZGVkICItLWJhc2UiIG9wdGlvbiB0byAiZ2l0IGZvcm1hdC1wYXRjaCIgY29tbWFuZCBkaWQKKyAgIG5vdCBjb3JyZWN0bHkgZ2VuZXJhdGUgcHJlcmVxIHBhdGNoIGlkcy4KKyAgIChtZXJnZSAxNWI3NmMxZmIzIHh5L2Zvcm1hdC1wYXRjaC1wcmVyZXEtcGF0Y2gtaWQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogUE9TSVggcG9ydGFiaWxpdHkgZml4IGluIE1ha2VmaWxlIHRvIGZpeCBhIGdsaXRjaCBpbnRyb2R1Y2VkIGEgZmV3CisgICByZWxlYXNlcyBhZ28uCisgICAobWVyZ2UgNjYwMDA1NGU5YiBkai9ydW50aW1lLXByZWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmlsdGVyLWJyYW5jaCIgd2hlbiB1c2VkIHdpdGggdGhlICItLXN0YXRlLWJyYW5jaCIgb3B0aW9uCisgICBzdGlsbCBhdHRlbXB0ZWQgdG8gcmV3cml0ZSB0aGUgY29tbWl0cyB3aG9zZSBmaWx0ZXJlZCByZXN1bHQgaXMKKyAgIGtub3duIGZyb20gdGhlIHByZXZpb3VzIGF0dGVtcHQgKHdoaWNoIGlzIHJlY29yZGVkIG9uIHRoZSBzdGF0ZQorICAgYnJhbmNoKTsgdGhlIGNvbW1hbmQgaGFzIGJlZW4gY29ycmVjdGVkIG5vdCB0byB3YXN0ZSBjeWNsZXMgZG9pbmcKKyAgIHNvLgorICAgKG1lcmdlIDcwOWNmZTg0OGEgbWIvZmlsdGVyLWJyYW5jaC1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIENsYXJpZnkgdGhhdCBzZXR0aW5nIGNvcmUuaWdub3JlQ2FzZSB0byBkZXZpYXRlIGZyb20gcmVhbGl0eSB3b3VsZAorICAgbm90IHR1cm4gYSBjYXNlLWluY2FwYWJsZSBmaWxlc3lzdGVtIGludG8gYSBjYXNlLWNhcGFibGUgb25lLgorICAgKG1lcmdlIDQ4Mjk0YjUxMmEgbXMvY29yZS1pY2FzZS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZnNjay5za2lwTGlzdCIgZGlkIG5vdCBwcmV2ZW50IGEgYmxvYiBvYmplY3QgbGlzdGVkIHRoZXJlIGZyb20KKyAgIGJlaW5nIGluc3BlY3RlZCBmb3IgaXMgY29udGVudHMgKGUuZy4gd2UgcmVjZW50bHkgc3RhcnRlZCB0bworICAgaW5zcGVjdCB0aGUgY29udGVudHMgb2YgIi5naXRtb2R1bGVzIiBmb3IgY2VydGFpbiBtYWxpY2lvdXMKKyAgIHBhdHRlcm5zKSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGZiMTYyODc3MTkgcmovc3VibW9kdWxlLWZzY2stc2tpcCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgYW5vdGhlci1icmFuY2giIGRpZCBub3QgcmVwb3J0CisgICBpbiB3aGljaCBzdWJtb2R1bGUgaXQgZmFpbGVkIHRvIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlLCB3aGljaAorICAgcmVzdWx0ZWQgaW4gYW4gdW5oZWxwZnVsIGVycm9yIG1lc3NhZ2UuCisgICAobWVyZ2UgYmE5NWQ0ZTRiZCBzYi9zdWJtb2R1bGUtbW92ZS1oZWFkLWVycm9yLW1zZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIiBiZWhhdmVkIHNsaWdodGx5IGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGljaCBvbmUgb2YKKyAgIHRoZSB0aHJlZSBiYWNrZW5kcyBnZXRzIHVzZWQ7IHRoaXMgaGFzIGJlZW4gZG9jdW1lbnRlZCBhbmQgYW4KKyAgIGVmZm9ydCB0byBtYWtlIHRoZW0gbW9yZSB1bmlmb3JtIGhhcyBiZWd1bi4KKyAgIChtZXJnZSBiMDBiZjFjOWE4IGVuL3JlYmFzZS1jb25zaXN0ZW5jeSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAiLS1pZ25vcmUtY2FzZSIgb3B0aW9uIG9mICJnaXQgZm9yLWVhY2gtcmVmIiAoYW5kIGl0cyBmcmllbmRzKQorICAgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZTY3NGViMjUyOCBqay9mb3ItZWFjaC1yZWYtaWNhc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoIiBmYWlsZWQgdG8gY29ycmVjdGx5IHZhbGlkYXRlIHRoZSBzZXQgb2Ygb2JqZWN0cyBpdAorICAgcmVjZWl2ZWQgd2hlbiBtYWtpbmcgYSBzaGFsbG93IGhpc3RvcnkgZGVlcGVyLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIGNmMWU3YzA3NzAganQvY29ubmVjdGl2aXR5LWNoZWNrLWFmdGVyLXVuc2hhbGxvdyBsYXRlciB0byBtYWludCkuCisKKyAqIFBhcnRpYWwgY2xvbmUgc3VwcG9ydCBvZiAiZ2l0IGNsb25lIiBoYXMgYmVlbiB1cGRhdGVkIHRvIGNvcnJlY3RseQorICAgdmFsaWRhdGUgdGhlIG9iamVjdHMgaXQgcmVjZWl2ZXMgZnJvbSB0aGUgb3RoZXIgc2lkZS4gIFRoZSBzZXJ2ZXIKKyAgIHNpZGUgaGFzIGJlZW4gY29ycmVjdGVkIHRvIHNlbmQgb2JqZWN0cyB0aGF0IGFyZSBkaXJlY3RseQorICAgcmVxdWVzdGVkLCBldmVuIGlmIHRoZXkgbWF5IG1hdGNoIHRoZSBmaWx0ZXJpbmcgY3JpdGVyaWEgKGUuZy4gd2hlbgorICAgZG9pbmcgYSAibGF6eSBibG9iIiBwYXJ0aWFsIGNsb25lKS4KKyAgIChtZXJnZSBhN2U2N2MxMWI4IGp0L3BhcnRpYWwtY2xvbmUtZnNjay1jb25uZWN0aXZpdHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIYW5kbGluZyBvZiBhbiBlbXB0eSByYW5nZSBieSAiZ2l0IGNoZXJyeS1waWNrIiB3YXMgaW5jb25zaXN0ZW50CisgICBkZXBlbmRpbmcgb24gaG93IHRoZSByYW5nZSBlbmRlZCB1cCB0byBiZSBlbXB0eSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBjNWUzNThkMDczIGprL2VtcHR5LXBpY2stZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXNldCAtLW1lcmdlIiAoaGVuY2UgImdpdCBtZXJnZSAtLS1hYm9ydCIpIGFuZCAiZ2l0IHJlc2V0IC0taGFyZCIKKyAgIGhhZCB0cm91YmxlIHdvcmtpbmcgY29ycmVjdGx5IGluIGEgc3BhcnNlbHkgY2hlY2tlZCBvdXQgd29ya2luZworICAgdHJlZSBhZnRlciBhIGNvbmZsaWN0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYjMzZmRmYzM0YyBtay9tZXJnZS1pbi1zcGFyc2UtY2hlY2tvdXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb3JyZWN0IGEgYnJva2VuIHVzZSBvZiAiVkFSPVZBTCBzaGVsbF9mdW5jIiBpbiBhIHRlc3QuCisgICAobWVyZ2UgNjUwMTYxYTI3NyBqYy90MzQwNC1vbmUtc2hvdC1leHBvcnQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXYtcGFyc2UgJzovc3Vic3RyaW5nJyIgZGlkIG5vdCBjb25zaWRlciB0aGUgaGlzdG9yeSBsZWFkaW5nCisgICBvbmx5IHRvIEhFQUQgd2hlbiBsb29raW5nIGZvciBhIGNvbW1pdCB3aXRoIHRoZSBnaXZlbiBzdWJzdHJpbmcsCisgICB3aGVuIHRoZSBIRUFEIGlzIGRldGFjaGVkLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA2YjMzNTFlNzk5IHdjL2ZpbmQtY29tbWl0LXdpdGgtcGF0dGVybi1vbi1kZXRhY2hlZC1oZWFkIGxhdGVyIHRvIG1haW50KS4KKworICogQnVpbGQgZG9jIHVwZGF0ZSBmb3IgV2luZG93cy4KKyAgIChtZXJnZSBlZGU4ZDg5YmIxIG5kL2NvbW1hbmQtbGlzdCBsYXRlciB0byBtYWludCkuCisKKyAqIGNvcmUuY29tbWVudGNoYXIgaXMgbm93IGhvbm9yZWQgd2hlbiBwcmVwYXJpbmcgdGhlIGxpc3Qgb2YgY29tbWl0cworICAgdG8gcmVwbGF5IGluICJyZWJhc2UgLWkiLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIG9uIGEgY29ycnVwdCBIRUFEIGNhdXNlZCBhIHNlZ2ZhdWx0LiAgSW4KKyAgIGdlbmVyYWwgd2Ugc3Vic3RpdHV0ZSBhbiBlbXB0eSB0cmVlIG9iamVjdCB3aGVuIHJ1bm5pbmcgdGhlIGluLWNvcmUKKyAgIGVxdWl2YWxlbnQgb2YgdGhlIGRpZmYtaW5kZXggY29tbWFuZCwgYW5kIHRoZSBjb2RlcGF0aCBoYXMgYmVlbgorICAgY29ycmVjdGVkIHRvIGRvIHNvIGFzIHdlbGwgdG8gZml4IHRoaXMgaXNzdWUuCisgICAobWVyZ2UgMzUwNmRjOTQ0NSBqay9oYXMtdW5jb21taXR0ZWQtY2hhbmdlcy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBodHRwZCB0ZXN0cyBzYXcgb2NjYXNpb25hbCBicmVha2FnZSBkdWUgdG8gdGhlIHdheSBpdHMgYWNjZXNzIGxvZworICAgZ2V0cyBpbnNwZWN0ZWQgYnkgdGhlIHRlc3RzLCB3aGljaCBoYXMgYmVlbiB1cGRhdGVkIHRvIG1ha2UgdGhlbQorICAgbGVzcyBmbGFreS4KKyAgIChtZXJnZSBlOGIzYjJlMjc1IHNnL2h0dHBkLXRlc3QtdW5mbGFrZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRlc3RzIHRvIGNvdmVyIG1vcmUgRC9GIGNvbmZsaWN0IGNhc2VzIGhhdmUgYmVlbiBhZGRlZCBmb3IKKyAgIG1lcmdlLXJlY3Vyc2l2ZS4KKworICogImdpdCBnYyAtLWF1dG8iIG9wZW5zIGZpbGUgZGVzY3JpcHRvcnMgZm9yIHRoZSBwYWNrZmlsZXMgYmVmb3JlCisgICBzcGF3bmluZyAiZ2l0IHJlcGFjay9wcnVuZSIsIHdoaWNoIHdvdWxkIHVwc2V0IFdpbmRvd3MgdGhhdCBkb2VzCisgICBub3Qgd2FudCBhIHByb2Nlc3MgdG8gd29yayBvbiBhIGZpbGUgdGhhdCBpcyBvcGVuIGJ5IGFub3RoZXIKKyAgIHByb2Nlc3MuICBUaGUgaXNzdWUgaGFzIGJlZW4gd29ya2VkIGFyb3VuZC4KKyAgIChtZXJnZSAxMmU3M2EzY2U0IGtnL2djLWF1dG8td2luZG93cy13b3JrYXJvdW5kIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlY3Vyc2l2ZSBtZXJnZSBzdHJhdGVneSBkaWQgbm90IHByb3Blcmx5IGVuc3VyZSB0aGVyZSB3YXMgbm8KKyAgIGNoYW5nZSBiZXR3ZWVuIEhFQUQgYW5kIHRoZSBpbmRleCBiZWZvcmUgcGVyZm9ybWluZyBpdHMgb3BlcmF0aW9uLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDU1ZjM5Y2Y3NTUgZW4vZGlydHktbWVyZ2UtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSIgc3RhcnRlZCBleHBvcnRpbmcgR0lUX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQKKyAgIGV4cG9zaW5nIGl0IHRvIGhvb2sgc2NyaXB0cyB3aGVuIHBhcnQgb2YgaXQgZ290IHJld3JpdHRlbiBpbiBDLgorICAgSW5zdGVhZCBvZiBtYXRjaGluZyB0aGUgb2xkIHNjcmlwdGVkIFBvcmNlbGFpbnMnIGJlaGF2aW91ciwKKyAgIGNvbXBlbnNhdGUgYnkgYWxzbyBleHBvcnRpbmcgR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudCBhcyB3ZWxsIHRvCisgICBsZXNzZW4gdGhlIGRhbWFnZS4gIFRoaXMgY2FuIGhhcm0gZXhpc3RpbmcgaG9va3MgdGhhdCB3YW50IHRvCisgICBvcGVyYXRlIG9uIGRpZmZlcmVudCByZXBvc2l0b3J5LCBidXQgdGhlIGN1cnJlbnQgYmVoYXZpb3VyIGlzCisgICBhbHJlYWR5IGJyb2tlbiBmb3IgdGhlbSBhbnl3YXkuCisgICAobWVyZ2UgYWI1ZTY3ZDc1MSBiYy9zZXF1ZW5jZXItZXhwb3J0LXdvcmstdHJlZS1hcy13ZWxsIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzZW5kLWVtYWlsIiB3aGVuIHVzaW5nIGluIGEgYmF0Y2hlZCBtb2RlIHRoYXQgbGltaXRzIHRoZQorICAgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgaW4gYSBzaW5nbGUgU01UUCBzZXNzaW9uIGxvc3QgdGhlIGNvbnRlbnRzCisgICBvZiB0aGUgdmFyaWFibGUgdXNlZCB0byBjaG9vc2UgYmV0d2VlbiB0bHMvc3NsLCB1bmFibGUgdG8gc2VuZCB0aGUKKyAgIHNlY29uZCBhbmQgbGF0ZXIgYmF0Y2hlcywgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgNjM2ZjNkN2FjNSBqbS9zZW5kLWVtYWlsLXRscy1hdXRoLW9uLWJhdGNoIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGxhenkgY2xvbmUgc3VwcG9ydCBoYWQgYSBmZXcgcGxhY2VzIHdoZXJlIG1pc3NpbmcgYnV0IHByb21pc2VkCisgICBvYmplY3RzIHdlcmUgbm90IGNvcnJlY3RseSB0b2xlcmF0ZWQsIHdoaWNoIGhhdmUgYmVlbiBmaXhlZC4KKworICogT25lIG9mIHRoZSAiZGlmZiAtLWNvbG9yLW1vdmVkIiBtb2RlICJkaW1tZWRfemVicmEiIHRoYXQgd2FzIG5hbWVkCisgICBpbiBhbiB1bnVzdWFsIHdheSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieQorICAgImRpbW1lZC16ZWJyYSIuCisgICAobWVyZ2UgZTNmMmY1ZjljZCBlcy9kaWZmLWNvbG9yLW1vdmVkLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB3aXJlLXByb3RvY29sIHYyIHJlbGllcyBvbiB0aGUgY2xpZW50IHRvIHNlbmQgInJlZiBwcmVmaXhlcyIgdG8KKyAgIGxpbWl0IHRoZSBiYW5kd2lkdGggc3BlbnQgb24gdGhlIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQuICAiZ2l0CisgICBjbG9uZSIgd2hlbiBsZWFybmVkIHRvIHNwZWFrIHYyIGZvcmdvdCB0byBkbyBzbywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA0MDJjNDdkOTM5IGJ3L2Nsb25lLXJlZi1wcmVmaXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtLWhpc3RvZ3JhbSIgaGFkIGEgYmFkIG1lbW9yeSB1c2FnZSBwYXR0ZXJuLCB3aGljaCBoYXMKKyAgIGJlZW4gcmVhcnJhbmdlZCB0byByZWR1Y2UgdGhlIHBlYWsgdXNhZ2UuCisgICAobWVyZ2UgNzljYjJlYmI5MiBzYi9oaXN0b2dyYW0tbGVzcy1tZW1vcnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFuLXVwIHRvIHVzZSBzaXplX3Qvc3NpemVfdCB3aGVuIHRoZXkgYXJlIHRoZSByaWdodCB0eXBlLgorICAgKG1lcmdlIDc3MjZkMzYwYjUgamsvc2l6ZS10IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHdpcmUtcHJvdG9jb2wgdjIgcmVsaWVzIG9uIHRoZSBjbGllbnQgdG8gc2VuZCAicmVmIHByZWZpeGVzIiB0bworICAgbGltaXQgdGhlIGJhbmR3aWR0aCBzcGVudCBvbiB0aGUgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudC4gICJnaXQKKyAgIGZldGNoICRyZW1vdGUgYnJhbmNoOmJyYW5jaCIgdGhhdCBhc2tzIHRhZ3MgdGhhdCBwb2ludCBpbnRvIHRoZQorICAgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSAiYnJhbmNoIiBhdXRvbWF0aWNhbGx5IGZvbGxvd2VkIHNlbnQgdG8KKyAgIG5hcnJvdyBwcmVmaXggYW5kIGJyb2tlIHRoZSB0YWcgZm9sbG93aW5nLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSAyYjU1NDM1M2E1IGp0L3RhZy1mb2xsb3dpbmctd2l0aC1wcm90by12Mi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIHRoZSBzcGFyc2UgY2hlY2tvdXQgZmVhdHVyZSBpcyBpbiB1c2UsICJnaXQgY2hlcnJ5LXBpY2siIGFuZAorICAgb3RoZXIgbWVyZ3kgb3BlcmF0aW9ucyBsb3N0IHRoZSBza2lwX3dvcmt0cmVlIGJpdCB3aGVuIGEgcGF0aCB0aGF0CisgICBpcyBleGNsdWRlZCBmcm9tIGNoZWNrb3V0IHJlcXVpcmVzIGNvbnRlbnQgbGV2ZWwgbWVyZ2UsIHdoaWNoIGlzCisgICByZXNvbHZlZCBhcyB0aGUgc2FtZSBhcyB0aGUgSEVBRCB2ZXJzaW9uLCB3aXRob3V0IG1hdGVyaWFsaXppbmcgdGhlCisgICBtZXJnZSByZXN1bHQgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2hpY2ggbWFkZSB0aGUgcGF0aCBhcHBlYXIgYXMKKyAgIGRlbGV0ZWQuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBieSBwcmVzZXJ2aW5nIHRoZSBza2lwX3dvcmt0cmVlCisgICBiaXQgKGFuZCBub3QgbWF0ZXJpYWxpemluZyB0aGUgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlKS4KKyAgIChtZXJnZSAyYjc1ZmI2MDFjIGVuL21lcmdlLXJlY3Vyc2l2ZS1za2lwLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAiYXV0aG9yLXNjcmlwdCIgZmlsZSAiZ2l0IHJlYmFzZSAtaSIgY3JlYXRlcyBnb3QgYnJva2VuIHdoZW4KKyAgIHdlIHN0YXJ0ZWQgdG8gbW92ZSB0aGUgY29tbWFuZCBhd2F5IGZyb20gc2hlbGwgc2NyaXB0LCB3aGljaCBpcworICAgZ2V0dGluZyBmaXhlZCBub3cuCisgICAobWVyZ2UgNTUyMmJiYWMyMCBlcy9yZWJhc2UtaS1hdXRob3Itc2NyaXB0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBhdXRvbWF0aWMgdHJlZS1tYXRjaGluZyBpbiAiZ2l0IG1lcmdlIC1zIHN1YnRyZWUiIHdhcyBicm9rZW4gNQorICAgeWVhcnMgYWdvIGFuZCBub2JvZHkgaGFzIG5vdGljZWQgc2luY2UgdGhlbiwgd2hpY2ggaXMgbm93IGZpeGVkLgorICAgKG1lcmdlIDJlYzQxNTA3MTMgamsvbWVyZ2Utc3VidHJlZS1oZXVyaXN0aWNzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCAkdGhlcmUgcmVmcy9oZWFkcy9zIiBvdWdodCB0byBmZXRjaCB0aGUgdGlwIG9mIHRoZQorICAgYnJhbmNoICdzJywgYnV0IHdoZW4gInJlZnMvaGVhZHMvcmVmcy9oZWFkcy9zIiwgaS5lLiBhIGJyYW5jaCB3aG9zZQorICAgbmFtZSBpcyAicmVmcy9oZWFkcy9zIiBleGlzdHMgYXQgdGhlIHNhbWUgdGltZSwgZmV0Y2hlZCB0aGF0IG9uZQorICAgaW5zdGVhZCBieSBtaXN0YWtlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gaG9ub3IgdGhlIHVzdWFsCisgICBkaXNhbWJpZ3VhdGlvbiBydWxlcyBmb3IgYWJicmV2aWF0ZWQgcmVmbmFtZXMuCisgICAobWVyZ2UgNjA2NTBhNDhjMCBqdC9yZWZzcGVjLWR3aW0tcHJlY2VkZW5jZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGdXR1cmVwcm9vZmluZyBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IGNhbiBlYXNpbHkgYmUgbWlzdXNlZC4KKyAgIChtZXJnZSA2NWJiMjFlNzdlIGVzL3dhbnQtY29sb3ItZmQtZGVmZW5zaXZlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGh0dHAtYmFja2VuZCAodXNlZCBmb3Igc21hcnQtaHR0cCB0cmFuc3BvcnQpIHVzZWQgdG8gc2x1cnAgdGhlCisgICB3aG9sZSBpbnB1dCB1bnRpbCBFT0YsIHdpdGhvdXQgcGF5aW5nIGF0dGVudGlvbiB0byBDT05URU5UX0xFTkdUSAorICAgdGhhdCBpcyBzdXBwbGllZCBpbiB0aGUgZW52aXJvbm1lbnQgYW5kIGluc3RlYWQgZXhwZWN0aW5nIHRoZSBXZWIKKyAgIHNlcnZlciB0byBjbG9zZSB0aGUgaW5wdXQgc3RyZWFtLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBlZWJmZTQwOTYyIG1rL2h0dHAtYmFja2VuZC1jb250ZW50LWxlbmd0aCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UgLS1hYm9ydCIgZXRjLiBkaWQgbm90IGNsZWFuIHRoaW5ncyB1cCBwcm9wZXJseSB3aGVuCisgICB0aGVyZSB3ZXJlIGNvbmZsaWN0ZWQgZW50cmllcyBpbiB0aGUgaW5kZXggaW4gY2VydGFpbiBvcmRlciB0aGF0CisgICBhcmUgaW52b2x2ZWQgaW4gRC9GIGNvbmZsaWN0cy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGFkMzc2MjA0MmEgZW4vYWJvcnQtZGYtY29uZmxpY3QtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1pbmRlbnQtaGV1cmlzdGljIiBoYWQgYSBiYWQgY29ybmVyIGNhc2UgcGVyZm9ybWFuY2UuCisgICAobWVyZ2UgMzAxZWY4NTQwMSBzYi9pbmRlbnQtaGV1cmlzdGljLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICItLWV4ZWMiIG9wdGlvbiB0byAiZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMiIHBsYWNlZCB0aGUgZXhlYworICAgY29tbWFuZHMgYXQgd3JvbmcgcGxhY2VzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgdmVyaWZ5LXRhZyIgYW5kICJnaXQgdmVyaWZ5LWNvbW1pdCIgaGF2ZSBiZWVuIHRhdWdodCB0byB1c2UKKyAgIHRoZSBleGl0IHN0YXR1cyBvZiB1bmRlcmx5aW5nICJncGcgLS12ZXJpZnkiIHRvIHNpZ25hbCBiYWQgb3IKKyAgIHVudHJ1c3RlZCBzaWduYXR1cmUgdGhleSBmb3VuZC4KKyAgIChtZXJnZSA0ZTVkYzljYTE3IGpjL2dwZy1zdGF0dXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgc3RvcHBlZCBhbmQgZ2F2ZSBhbiBleHRyYSBwcm9tcHQgdG8gY29udGludWUgYWZ0ZXIKKyAgIHRoZSBsYXN0IHBhdGggaGFzIGJlZW4gaGFuZGxlZCwgd2hpY2ggZGlkIG5vdCBtYWtlIG11Y2ggc2Vuc2UuCisgICAobWVyZ2UgZDY1MWE1NGI4YSBuZy9tZXJnZXRvb2wtbG9zZS1maW5hbC1wcm9tcHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbW9uZyB0aGUgdGhyZWUgY29kZXBhdGhzIHdlIHVzZSBPX0FQUEVORCB0byBvcGVuIGEgZmlsZSBmb3IKKyAgIGFwcGVuZGluZywgb25lIHVzZWQgZm9yIHdyaXRpbmcgR0lUX1RSQUNFIG91dHB1dCByZXF1aXJlcyBPX0FQUEVORAorICAgaW1wbGVtZW50YXRpb24gdGhhdCBiZWhhdmVzIHNlbnNpYmx5IHdoZW4gbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZQorICAgd3JpdGluZyB0byB0aGUgc2FtZSBmaWxlLiAgUE9TSVggZW11bGF0aW9uIHVzZWQgaW4gdGhlIFdpbmRvd3MgcG9ydAorICAgaGFzIGJlZW4gdXBkYXRlZCB0byBpbXByb3ZlIGluIHRoaXMgYXJlYS4KKyAgIChtZXJnZSBkNjQxMDk3NTg5IGpzL21pbmd3LW8tYXBwZW5kIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdWxsIC0tcmViYXNlIC12IiBpbiBhIHJlcG9zaXRvcnkgd2l0aCBhIHN1Ym1vZHVsZSBiYXJmZWQgYXMKKyAgIGFuIGludGVybWVkaWF0ZSBwcm9jZXNzIGRpZCBub3QgdW5kZXJzdGFuZCB3aGF0ICItdihlcmJvc2UpIiBmbGFnCisgICBtZWFudCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZTg0YzNjZjNkYyBzYi9wdWxsLXJlYmFzZS1zdWJtb2R1bGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvICJnaXQgY29uZmlnIiBicm9rZSB1cGRhdGluZyB2YXJpYWJsZSBpbiBhCisgICBzdWJzZWN0aW9uLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYmZmN2RmN2E4NyBzYi9jb25maWctd3JpdGUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiAiZ2l0IHJlYmFzZSAtaSIgaXMgdG9sZCB0byBzcXVhc2ggdHdvIG9yIG1vcmUgY29tbWl0cyBpbnRvCisgICBvbmUsIGl0IGxhYmVsZWQgdGhlIGxvZyBtZXNzYWdlIGZvciBlYWNoIGNvbW1pdCB3aXRoIGl0cyBudW1iZXIuCisgICBJdCBjb3JyZWN0bHkgY2FsbGVkIHRoZSBmaXJzdCBvbmUgIjFzdCBjb21taXQiLCBidXQgdGhlIG5leHQgb25lCisgICB3YXMgImNvbW1pdCAjMSIsIHdoaWNoIHdhcyBvZmYtYnktb25lLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZGQyZTM2ZWJhYyBwdy9yZWJhc2UtaS1zcXVhc2gtbnVtYmVyLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiwgd2hlbiBhICdtZXJnZSA8YnJhbmNoPicgaW5zbiBpbiBpdHMgdG9kbyBsaXN0CisgICBmYWlscywgc2VnZmF1bHRlZCwgd2hpY2ggaGFzIGJlZW4gKG1pbmltYWxseSkgY29ycmVjdGVkLgorICAgKG1lcmdlIGJjOTIzOGJiMDkgcHcvcmViYXNlLWktbWVyZ2Utc2Vndi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdCIgZmFpbGVkIHRvIHJlbW92ZSBDSEVSUllfUElDS19IRUFEIGV2ZW4KKyAgIHRob3VnaCB3ZSB3b24ndCBiZSBpbiBhIGNoZXJyeS1waWNrIHNlc3Npb24gYWZ0ZXIgaXQgcmV0dXJucywgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAzZTdkZDk5MjA4IG5kL2NoZXJyeS1waWNrLXF1aXQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogSW4gYSByZWNlbnQgdXBkYXRlIGluIDIuMTggZXJhLCAiZ2l0IHBhY2stb2JqZWN0cyIgc3RhcnRlZAorICAgcHJvZHVjaW5nIGEgbGFyZ2VyIHRoYW4gbmVjZXNzYXJ5IHBhY2tmaWxlcyBieSBtaXNzaW5nCisgICBvcHBvcnR1bml0aWVzIHRvIHVzZSBsYXJnZSBkZWx0YXMuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIG1lYW5pbmcgb2YgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGUgImNvcmUuY2hlY2tTdGF0IgorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gdGFrZSB3ZXJlIG5vdCBhZGVxdWF0ZWx5IGRvY3VtZW50ZWQsCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA5YmY1ZDRjNGUyIG5kL2NvbmZpZy1jb3JlLWNoZWNrc3RhdC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgImdpdCByZWJhc2UgLWkiIHVwZGF0ZSBzdGFydGVkIHRvIHdyaXRlIGJvZ3VzbHkgZm9ybWF0dGVkCisgICBhdXRob3Itc2NyaXB0LCB3aXRoIGEgbWF0Y2hpbmcgYnJva2VuIHJlYWRpbmcgY29kZS4gIFRoZXNlIGFyZQorICAgZml4ZWQuCisKKyAqIFJlY2VudCBhZGRpdGlvbiBvZiAiZGlyZWN0b3J5IHJlbmFtZSIgaGV1cmlzdGljcyB0byB0aGUKKyAgIG1lcmdlLXJlY3Vyc2l2ZSBiYWNrZW5kIG1ha2VzIHRoZSBjb21tYW5kIHN1c2NlcHRpYmxlIHRvIGZhbHNlCisgICBwb3NpdGl2ZXMgYW5kIGZhbHNlIG5lZ2F0aXZlcy4gIEluIHRoZSBjb250ZXh0IG9mICJnaXQgYW0gLTMiLAorICAgd2hpY2ggZG9lcyBub3Qga25vdyBhYm91dCBzdXJyb3VuZGluZyB1bm1vZGlmaWVkIHBhdGhzIGFuZCB0aHVzCisgICBjYW5ub3QgaW5mb3JtIHRoZSBtZXJnZSBtYWNoaW5lcnkgYWJvdXQgdGhlIGZ1bGwgdHJlZXMgaW52b2x2ZWQsCisgICB0aGlzIHJpc2sgaXMgcGFydGljdWxhcmx5IHNldmVyZS4gIEFzIHN1Y2gsIHRoZSBoZXVyaXN0aWMgaXMKKyAgIGRpc2FibGVkIGZvciAiZ2l0IGFtIC0zIiB0byBrZWVwIHRoZSBtYWNoaW5lcnkgIm1vcmUgc3R1cGlkIGJ1dAorICAgcHJlZGljdGFibGUiLgorCisgKiAiZ2l0IG1lcmdlLWJhc2UiIGluIDIuMTktcmMxIGhhcyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdoZW4gdGhlCisgICAoZXhwZXJpbWVudGFsKSBjb21taXQtZ3JhcGggZmVhdHVyZSBpcyBpbiB1c2UsIHdoaWNoIGhhcyBiZWVuCisgICBtaXRpZ2F0ZWQuCisKKyAqIENvZGUgY2xlYW51cCwgZG9jZml4LCBidWlsZCBmaXgsIGV0Yy4KKyAgIChtZXJnZSBhZWU5YmUyZWJlIHNnL3VwZGF0ZS1yZWYtc3RkaW4tY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDM3NzE0MjUyZiBqYy9jbGVhbi1hZnRlci1zYW5pdHktdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDViMjZjM2M5NDEgZW4vbWVyZ2UtcmVjdXJzaXZlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDBkY2JjMDM5MmUgYncvY29uZmlnLXJlZmVyLXRvLWdpdHN1Ym1vZHVsZXMtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiYjRkMDAwZTg3IGJ3L3Byb3RvY29sLXYyIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5MjhmMGFiNGJhIHZzL3R5cG9maXhlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDdmNTkwYmU4NCBlbi9yZWJhc2UtaS1taWNyb2ZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4MWQzOTVjYzg1IGpzL3JlYmFzZS1yZWNyZWF0ZS1tZXJnZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTFkMTg2MzE2OCB0ei9leGNsdWRlLWRvYy1zbWFsbGZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhOWFhM2MwOTI3IGRzL2NvbW1pdC1ncmFwaCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWNmOGUwNjQ3NCBqcy9lbmhhbmNlZC12ZXJzaW9uLWluZm8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDZhYWRlZDU1MDkgdGIvY29uZmlnLWRlZmF1bHQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDAyMmQyYWMxZjMgc2IvYmxhbWUtY29sb3IgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVhMDZhMjBlMGMgYnAvdGVzdC1kcm9wLWNhY2hlcy1mb3Itd2luZG93cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGQ2MWNjMWMyZSBqay91aS1jb2xvci1hbHdheXMtdG8tYXV0byBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMWU4M2I5YmZkZCBzYi90cmFpbGVycy1kb2NmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFiMjlmMWIzMjkgc2cvZmFzdC1pbXBvcnQtZHVtcC1yZWZzLW9uLWNoZWNrcG9pbnQtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2YThhZDg4MGYwIGpuL3N1YnRyZWUtdGVzdC1maXhlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmZiZDUxY2M2MCBuZC9wYWNrLW9iamVjdHMtdGhyZWFkaW5nLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTlkYWM3YmU2MCBlcy9tdy10by1naXQtY2hhaW4tZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmZTU4M2M2YzdhIHJzL3JlbW90ZS1tdi1sZWFrZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OTg4NWFiMDE1IGVuL3QzMDMxLXRpdGxlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODU3ODAzN2JlZCBuZC9jb25maWctYmxhbWUtc29ydCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGFkMTY5YzRiYSBobi9jb25maWctaW4tY29kZS1jb21tZW50IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiNzQ0NmZjZmRmIGFyL3Q0MTUwLWFtLXNjaXNzb3JzLXRlc3QtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhODEzMjQxMGVlIGpzL3R5cG9maXhlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzg4ZDBmZjZlNSBlbi91cGRhdGUtaW5kZXgtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlMDVhYTY4OGRkIGpjL3VwZGF0ZS1pbmRleC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDEwYzYwMDE3MmMgc2cvdDUzMTAtZW1wdHktaW5wdXQtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NjQxZWI5NDY1IGpoL3BhcnRpYWwtY2xvbmUtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNzExYjFhZDVlIGFiL3N1Ym1vZHVsZS1yZWxhdGl2ZS11cmwtdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNlNTI4ZGUwMjMgYWIvdW5jb25kaXRpb25hbC1mcmVlLWFuZC1udWxsIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiYmMwNzJmNWQ4IHJzL29wdC11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OWQ4NDZmMDUzIGprL3VzZS1jb21wYXQtdXRpbC1pbi10ZXN0LXRvb2wgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE4MjA3MDMwNDUganMvbGFyZ2VyLXRpbWVzdGFtcHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGM4YjM1Yjk1ZTEgc2cvdDQwNTEtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzMDYxMmNiNjcwIHNnL3QwMDIwLWNvbnZlcnNpb24tZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNWRhNzUzNzA5IHNnL3Q3NTAxLXRoaW5rb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzliMDRmOWI2MCBzZy90MzkwMy1taXNzaW5nLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjc0NTgxNzAyOCBzZy90MzQyMC1hdXRvc3Rhc2gtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3YWZiMGQ2Nzc3IHNnL3Rlc3QtcmViYXNlLWVkaXRvci1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDZjNmNlMjFiYWEgZXMvZnJlZWJzZC1pY29udi1wb3J0YWJpbGl0eSBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3NjcyNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4xLnR4dApAQCAtMCwwICsxLDYgQEAKK0dpdCB2Mi4xOS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNSBhbmQgaW4KK3YyLjE3LjIgdG8gYWRkcmVzcyB0aGUgcmVjZW50bHkgcmVwb3J0ZWQgQ1ZFLTIwMTgtMTc0NTY7IHNlZSB0aGUKK3JlbGVhc2Ugbm90ZXMgZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OWU2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMi50eHQKQEAgLTAsMCArMSwxMDggQEAKK0dpdCB2Mi4xOS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMTkuMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgYW5kIGl0cyB1bmRlcmx5aW5nIG1hY2hpbmVyeSBoYWQgYSBidWdneQorICAgY29kZSB0aGF0IGF0dGVtcHRlZCB0byBpZ25vcmUgcGF0Y2ggdGV4dCBhZnRlciBjb21taXQgbG9nIG1lc3NhZ2UsCisgICB3aGljaCB0cmlnZ2VyZWQgaW4gdmFyaW91cyBjb2RlcGF0aHMgdGhhdCB3aWxsIGFsd2F5cyBnZXQgdGhlIGxvZworICAgbWVzc2FnZSBhbG9uZSBhbmQgbmV2ZXIgZ2V0IHN1Y2ggYW4gaW5wdXQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGNsZWFyIHRoZSBzdGF0ZSBmaWxlcyBjb3JyZWN0bHkgd2hlbiBhIHJ1bgorICAgb2YgInNxdWFzaC9maXh1cCIgaXMgYWJvcnRlZCBhbmQgdGhlbiB0aGUgdXNlciBtYW51YWxseSBhbWVuZGVkIHRoZQorICAgY29tbWl0IGluc3RlYWQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogV2hlbiBmc21vbml0b3IgaXMgaW4gdXNlLCBhZnRlciBvcGVyYXRpb24gb24gc3VibW9kdWxlcyB1cGRhdGVzCisgICAuZ2l0bW9kdWxlcywgd2UgbG9zdCB0cmFjayBvZiB0aGUgZmFjdCB0aGF0IHdlIGRpZCBzbyBhbmQgcmVsaWVkIG9uCisgICBzdGFsZSBmc21vbml0b3IgZGF0YS4KKworICogRml4IGZvciBhIGxvbmctc3RhbmRpbmcgYnVnIHRoYXQgbGVhdmVzIHRoZSBpbmRleCBmaWxlIGNvcnJ1cHQgd2hlbgorICAgaXQgc2hyaW5rcyBkdXJpbmcgYSBwYXJ0aWFsIGNvbW1pdC4KKworICogRnVydGhlciBmaXggZm9yIE9fQVBQRU5EIGVtdWxhdGlvbiBvbiBXaW5kb3dzCisKKyAqIEEgY29ybmVyIGNhc2UgYnVnZml4IGluICJnaXQgcmVyZXJlIiBjb2RlLgorCisgKiAiZ2l0IGFkZCAnOihhdHRyOmZvbyknIiBpcyBub3Qgc3VwcG9ydGVkIGFuZCBpcyBzdXBwb3NlZCB0byBiZQorICAgcmVqZWN0ZWQgd2hpbGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIHBhcnNlZCwgYnV0IHdlIGZhaWwKKyAgIHRvIHJlamVjdCBzdWNoIGEgY29tbWFuZCBsaW5lIHVwZnJvbnQuCisKKyAqICJnaXQgcmViYXNlIiBldGMuIGluIEdpdCAyLjE5IGZhaWxzIHRvIGFib3J0IHdoZW4gZ2l2ZW4gYW4gZW1wdHkKKyAgIGNvbW1pdCBsb2cgbWVzc2FnZSBhcyByZXN1bHQgb2YgZWRpdGluZywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgY29kZSB0byBiYWNrZmlsbCBvYmplY3RzIGluIGxhemlseSBjbG9uZWQgcmVwb3NpdG9yeSBkaWQgbm90CisgICB3b3JrIGNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBVcGRhdGUgZXJyb3IgbWVzc2FnZXMgZ2l2ZW4gYnkgImdpdCByZW1vdGUiIGFuZCBtYWtlIHRoZW0gY29uc2lzdGVudC4KKworICogImdpdCB1cGRhdGUtcmVmIiBsZWFybmVkIHRvIG1ha2UgYm90aCAiLS1uby1kZXJlZiIgYW5kICItLXN0ZGluIgorICAgd29yayBhdCB0aGUgc2FtZSB0aW1lLgorCisgKiBSZWNlbnRseSBhZGRlZCAicmFuZ2UtZGlmZiIgaGFkIGEgY29ybmVyLWNhc2UgYnVnIHRvIGNhdXNlIGl0CisgICBzZWdmYXVsdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgcmVjZW50bHkgaW50cm9kdWNlZCBjb21taXQtZ3JhcGggYXV4aWxpYXJ5IGRhdGEgaXMgaW5jb21wYXRpYmxlCisgICB3aXRoIG1lY2hhbmlzbXMgc3VjaCBhcyByZXBsYWNlICYgZ3JhZnRzIHRoYXQgImJyZWFrcyIgaW1tdXRhYmxlCisgICBuYXR1cmUgb2YgdGhlIG9iamVjdCByZWZlcmVuY2UgcmVsYXRpb25zaGlwLiAgRGlzYWJsZSBvcHRpbWl6YXRpb25zCisgICBiYXNlZCBvbiBpdHMgdXNlIChhbmQgdXBkYXRpbmcgZXhpc3RpbmcgY29tbWl0LWdyYXBoKSB3aGVuIHRoZXNlCisgICBpbmNvbXBhdGlibGUgZmVhdHVyZXMgYXJlIGluIHVzZSBpbiB0aGUgcmVwb3NpdG9yeS4KKworICogVGhlIG1haWxtYXAgZmlsZSB1cGRhdGUuCisKKyAqIFRoZSBjb2RlIGluICJnaXQgc3RhdHVzIiBzb21ldGltZXMgaGl0IGFuIGFzc2VydGlvbiBmYWlsdXJlLiAgVGhpcworICAgd2FzIGNhdXNlZCBieSBhIHN0cnVjdHVyZSB0aGF0IHdhcyByZXVzZWQgd2l0aG91dCBjbGVhbmluZyB0aGUgZGF0YQorICAgdXNlZCBmb3IgdGhlIGZpcnN0IHJ1biwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBIGNvcm5lci1jYXNlIGJ1Z2ZpeC4KKworICogQSBwYXJ0aWFsIGNsb25lIHRoYXQgaXMgY29uZmlndXJlZCB0byBsYXppbHkgZmV0Y2ggbWlzc2luZyBvYmplY3RzCisgICB3aWxsIG9uLWRlbWFuZCBpc3N1ZSBhICJnaXQgZmV0Y2giIHJlcXVlc3QgdG8gdGhlIG9yaWdpbmF0aW5nCisgICByZXBvc2l0b3J5IHRvIGZpbGwgbm90LXlldC1vYnRhaW5lZCBvYmplY3RzLiAgVGhlIHJlcXVlc3QgaGFzIGJlZW4KKyAgIG9wdGltaXplZCBmb3IgcmVxdWVzdGluZyBhIHRyZWUgb2JqZWN0IChhbmQgbm90IHRoZSBsZWFmIGJsb2IKKyAgIG9iamVjdHMgY29udGFpbmVkIGluIGl0KSBieSB0ZWxsaW5nIHRoZSBvcmlnaW5hdGluZyByZXBvc2l0b3J5IHRoYXQKKyAgIG5vIGJsb2JzIGFyZSBuZWVkZWQuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBzdXBwb3J0IHRoZSBleHBlcmltZW50YWwgc3BsaXQtaW5kZXggbW9kZSBoYWQKKyAgIHJlbWFpbmluZyAicmFjaWx5IGNsZWFuIiBpc3N1ZXMgZml4ZWQuCisKKyAqICJnaXQgbG9nIC0tZ3JhcGgiIHNob3dpbmcgYW4gb2N0b3B1cyBtZXJnZSBzb21ldGltZXMgbWlzY291bnRlZCB0aGUKKyAgIG51bWJlciBvZiBkaXNwbGF5IGNvbHVtbnMgaXQgaXMgY29uc3VtaW5nIHRvIHNob3cgdGhlIG1lcmdlIGFuZCBpdHMKKyAgIHBhcmVudCBjb21taXRzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBydW5fY29tbWFuZCgpIEFQSSBvbiB0aGUgVU5JWCBwbGF0Zm9ybXMgaGFkIGEKKyAgIGJ1ZyB0aGF0IGNhdXNlZCBhIGNvbW1hbmQgbm90IG9uICRQQVRIIHRvIGJlIGZvdW5kIGluIHRoZSBjdXJyZW50CisgICBkaXJlY3RvcnkuCisKKyAqIEEgbXV0ZXggdXNlZCBpbiAiZ2l0IHBhY2stb2JqZWN0cyIgd2VyZSBub3QgY29ycmVjdGx5IGluaXRpYWxpemVkCisgICBhbmQgdGhpcyBjYXVzZWQgImdpdCByZXBhY2siIHRvIGR1bXAgY29yZSBvbiBXaW5kb3dzLgorCisgKiBVbmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsICJnaXQgZGlmZiBEOi9hL2IvYyBEOi9hL2IvZCIgb24KKyAgIFdpbmRvd3Mgd291bGQgc3RyaXAgaW5pdGlhbCBwYXJ0cyBmcm9tIHRoZSBwYXRocyBiZWNhdXNlIHRoZXkKKyAgIHdlcmUgbm90IHJlY29nbml6ZWQgYXMgYWJzb2x1dGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2g9dXBkYXRlSW5zdGVhZCBjb2RlcGF0aCBraWNrZWQgaW4gZXZlbgorICAgd2hlbiB0aGUgcHVzaCBzaG91bGQgaGF2ZSBiZWVuIHJlamVjdGVkIGR1ZSB0byBvdGhlciByZWFzb25zLCBzdWNoCisgICBhcyBpdCBkb2VzIG5vdCBmYXN0LWZvcndhcmQgb3IgdGhlIHVwZGF0ZS1ob29rIHJlamVjdHMgaXQsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmVwYWNrIiBpbiBhIHNoYWxsb3cgY2xvbmUgZGlkIG5vdCBjb3JyZWN0bHkgdXBkYXRlIHRoZQorICAgc2hhbGxvdyBwb2ludHMgaW4gdGhlIHJlcG9zaXRvcnksIGxlYWRpbmcgdG8gYSByZXBvc2l0b3J5IHRoYXQKKyAgIGRvZXMgbm90IHBhc3MgZnNjay4KKworICogT3BlcmF0aW9ucyBvbiBwcm9taXNvciBvYmplY3RzIG1ha2Ugc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2Ygb25seSBhCisgICBzbWFsbCBzdWJzZXQgb2YgdGhlIGNvbW1hbmRzIHRoYXQgaW50ZXJuYWxseSB1c2UgdGhlIHJldmlzaW9ucworICAgbWFjaGluZXJ5LCBidXQgdGhlICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIgb3B0aW9uIHdlcmUgdGFrZW4KKyAgIGFuZCBsZWQgdG8gbm9uc2Vuc2UgcmVzdWx0cyBieSBjb21tYW5kcyBsaWtlICJsb2ciLCB0byB3aGljaCBpdAorICAgZGlkbid0IG1ha2UgbXVjaCBzZW5zZS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgImNvbnRhaW5lciIgbW9kZSBvZiBUcmF2aXNDSSBpcyBnb2luZyBhd2F5LiAgT3VyIC50cmF2aXMueW1sCisgICBmaWxlIGlzIGdldHRpbmcgcHJlcGFyZWQgZm9yIHRoZSB0cmFuc2l0aW9uLgorCisgKiBPdXIgdGVzdCBzY3JpcHRzIGNhbiBub3cgdGFrZSB0aGUgJy1WJyBvcHRpb24gYXMgYSBzeW5vbnltIGZvciB0aGUKKyAgICctLXZlcmJvc2UtbG9nJyBvcHRpb24uCisKKyAqIEEgcmVncmVzc2lvbiBpbiBHaXQgMi4xMiBlcmEgbWFkZSAiZ2l0IGZzY2siIGZhbGwgaW50byBhbiBpbmZpbml0ZQorICAgbG9vcCB3aGlsZSBwcm9jZXNzaW5nIHRydW5jYXRlZCBsb29zZSBvYmplY3RzLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmQ3Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjMudHh0CkBAIC0wLDAgKzEsOCBAQAorR2l0IHYyLjE5LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC42LCB2Mi4xNS40CithbmQgaW4gdjIuMTcuMywgYWRkcmVzc2luZyB0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsCitDVkUtMjAxOS0xMzQ5LCBDVkUtMjAxOS0xMzUwLCBDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLAorQ1ZFLTIwMTktMTM1MywgQ1ZFLTIwMTktMTM1NCwgYW5kIENWRS0yMDE5LTEzODc7IHNlZSB0aGUgcmVsZWFzZSBub3RlcworZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOThlY2JjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMC50eHQKQEAgLTAsMCArMSwzMTMgQEAKK0dpdCB2Mi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworUG9ydHMKKworICogQnVpbGRpbmcgb24gb2xkZXIgTWFjT1MgWCBzeXN0ZW1zIGF1dG9tYXRpY2FsbHkgc2V0cworICAgdGhlIG5lY2Vzc2FyeSBOT19BUFBMRV9DT01NT05fQ1JZUFRPIGJ1aWxkLXRpbWUgb3B0aW9uLgorCisgKiBCdWlsZGluZyB3aXRoIE5PX1BUSFJFQURTIGhhcyBiZWVuIHJlc3VycmVjdGVkLgorCisgKiBDb21waWxhdGlvbiBvcHRpb25zIGhhdmUgYmVlbiB1cGRhdGVkIGEgYml0IHRvIGJldHRlciBzdXBwb3J0IHRoZQorICAgei9PUyBwb3J0LgorCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiAiZ2l0IGFyY2hpdmUiIGxlYXJuZWQgdG8gZmlsdGVyIHdoYXQgZ2V0cyBhcmNoaXZlZCB3aXRoIGEgcGF0aHNwZWMuCisKKyAqICJnaXQgY29uZmlnIC0tZWRpdCAtLWdsb2JhbCIgc3RhcnRzIGZyb20gYSBza2VsZXRhbCBwZXItdXNlcgorICAgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRlbnRzLCBpbnN0ZWFkIG9mIGEgdG90YWwgYmxhbmssIHdoZW4gdGhlCisgICB1c2VyIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbnkgZ2xvYmFsIGNvbmZpZy4gIFRoaXMgaW1tZWRpYXRlbHkKKyAgIHJlZHVjZXMgdGhlIG5lZWQgdG8gbGF0ZXIgYXNrICJIYXZlIHlvdSBmb3Jnb3R0ZW4gdG8gc2V0CisgICBjb3JlLnVzZXI/IiwgYW5kIHdlIGNhbiBhZGQgbW9yZSB0byB0aGUgdGVtcGxhdGUgYXMgd2UgZ2FpbgorICAgbW9yZSBleHBlcmllbmNlLgorCisgKiAiZ2l0IHN0YXNoIGxpc3QgLXAiIHVzZWQgdG8gYmUgYWxtb3N0IGFsd2F5cyBhIG5vLW9wIGJlY2F1c2UgZWFjaAorICAgc3Rhc2ggZW50cnkgaXMgcmVwcmVzZW50ZWQgYXMgYSBtZXJnZSBjb21taXQuICBJdCBsZWFybmVkIHRvIHNob3cKKyAgIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGJhc2UgY29tbWl0IHZlcnNpb24gYW5kIHRoZSB3b3JraW5nIHRyZWUKKyAgIHZlcnNpb24sIHdoaWNoIGlzIGluIGxpbmUgd2l0aCB3aGF0ICJnaXQgc3Rhc2ggc2hvdyIgZ2l2ZXMuCisKKyAqIFNvbWV0aW1lcyB1c2VycyB3YW50IHRvIHJlcG9ydCBhIGJ1ZyB0aGV5IGV4cGVyaWVuY2Ugb24gdGhlaXIKKyAgIHJlcG9zaXRvcnksIGJ1dCB0aGV5IGFyZSBub3QgYXQgbGliZXJ0eSB0byBzaGFyZSB0aGUgY29udGVudHMgb2YKKyAgIHRoZSByZXBvc2l0b3J5LiAgImZhc3QtZXhwb3J0IiB3YXMgdGF1Z2h0IGFuICItLWFub255bWl6ZSIgb3B0aW9uCisgICB0byByZXBsYWNlIGJsb2IgY29udGVudHMsIG5hbWVzIG9mIHBlb3BsZSwgcGF0aHMgYW5kIGxvZworICAgbWVzc2FnZXMgd2l0aCBibGFuZCBhbmQgc2ltcGxlIHN0cmluZ3MgdG8gaGVscCB0aGVtLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBsZWFybmVkIGFuIG9wdGlvbiB0byBzdG9wIGZlZWRpbmcgcGF0aHMgdG8gdGhlCisgICBkaWZmIGJhY2tlbmQgd2hlbiBpdCBleGl0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdG8gcGFpbnQgKG9yIG5vdCBwYWludCkgcGFydGlhbCBtYXRjaGVzIG9uCisgICBjb250ZXh0IGxpbmVzIHdoZW4gc2hvd2luZyAiZ3JlcCAtQzxudW0+IiBvdXRwdXQgaW4gY29sb3IuCisKKyAqICJsb2cgLS1kYXRlPWlzbyIgdXNlcyBhIHNsaWdodCB2YXJpYW50IG9mIHRoZSBJU08gODYwMSBmb3JtYXQgdGhhdCBpcworICAgbW9yZSBodW1hbiByZWFkYWJsZS4gIEEgbmV3ICItLWRhdGU9aXNvLXN0cmljdCIgb3B0aW9uIGdpdmVzCisgICBkYXRldGltZSBvdXRwdXQgdGhhdCBjb25mb3JtcyBtb3JlIHN0cmljdGx5LgorCisgKiBUaGUgbG9naWMgImdpdCBwcnVuZSIgdXNlcyBpcyBtb3JlIHJlc2lsaWVudCBhZ2FpbnN0IHZhcmlvdXMgY29ybmVyCisgICBjYXNlcy4KKworICogQSBicm9rZW4gcmVpbXBsZW1lbnRhdGlvbiBvZiBHaXQgY291bGQgd3JpdGUgYW4gaW52YWxpZCBpbmRleCB0aGF0CisgICByZWNvcmRzIGJvdGggc3RhZ2UgIzAgYW5kIGhpZ2hlci1zdGFnZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBwYXRoLgorICAgV2Ugbm93IG5vdGljZSBhbmQgcmVqZWN0IHN1Y2ggYW4gaW5kZXgsIGFzIHRoZXJlIGlzIG5vIHNlbnNpYmxlCisgICBmYWxsYmFjayAod2UgZG8gbm90IGtub3cgaWYgdGhlIGJyb2tlbiB0b29sIHdhbnRlZCB0byByZXNvbHZlIGFuZAorICAgZm9yZ290IHRvIHJlbW92ZSB0aGUgaGlnaGVyLXN0YWdlIGVudHJpZXMsIG9yIGlmIGl0IHdhbnRlZCB0byB1bnJlc29sdmUKKyAgIGFuZCBmb3Jnb3QgdG8gcmVtb3ZlIHRoZSBzdGFnZSAjMCBlbnRyeSkuCisKKyAqIFRoZSB0ZW1wb3JhcnkgZmlsZXMgImdpdCBtZXJnZXRvb2wiIHVzZXMgYXJlIHJlbmFtZWQgdG8gYXZvaWQgdG9vCisgICBtYW55IGRvdHMgaW4gdGhlbSAoZS5nLiBhIHRlbXBvcmFyeSBmaWxlIGZvciAiaGVsbG8uYyIgdXNlZCB0byBiZQorICAgbmFtZWQgZS5nLiAiaGVsbG8uQkFTRS40MzIxLmMiIGJ1dCBub3cgdXNlcyB1bmRlcnNjb3JlIGluc3RlYWQsCisgICBlLmcuICJoZWxsb19CQVNFXzQzMjEuYyIsIHRvIGFsbG93IHVzIHRvIGhhdmUgbXVsdGlwbGUgdmFyaWFudHMpLgorCisgKiBUaGUgdGVtcG9yYXJ5IGZpbGVzICJnaXQgbWVyZ2V0b29sIiB1c2VzIGNhbiBiZSBwbGFjZWQgaW4gYSBuZXdseQorICAgY3JlYXRlZCB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgYnkKKyAgIHNldHRpbmcgdGhlIG1lcmdldG9vbC53cml0ZVRvVGVtcCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgdW5kZXJzdGFuZHMgIi0tdG9vbCBiYyIgbm93LCBhcyB2ZXJzaW9uIDQgb2YKKyAgIEJleW9uZENvbXBhcmUgY2FuIGJlIGRyaXZlbiB0aGUgc2FtZSB3YXkgYXMgaXRzIHZlcnNpb24gMyBhbmQgaXQKKyAgIGZlZWxzIGF3a3dhcmQgdG8gc2F5ICItLXRvb2wgYmMzIiB0byBydW4gdmVyc2lvbiA0LgorCisgKiBUaGUgInByZS1yZWNlaXZlIiBhbmQgInBvc3QtcmVjZWl2ZSIgaG9va3MgYXJlIG5vIGxvbmdlciByZXF1aXJlZAorICAgdG8gY29uc3VtZSB0aGVpciBpbnB1dCBmdWxseSAobm90IGZvbGxvd2luZyB0aGlzIHJlcXVpcmVtZW50IHVzZWQKKyAgIHRvIHJlc3VsdCBpbiBpbnRlcm1pdHRlbnQgZXJyb3JzIGluICJnaXQgcHVzaCIpLgorCisgKiBUaGUgcHJldHR5LWZvcm1hdCBzcGVjaWZpZXIgIiVkIiwgd2hpY2ggZXhwYW5kcyB0byAiICh0YWduYW1lKSIKKyAgIGZvciBhIHRhZ2dlZCBjb21taXQsIGdhaW5lZCBhIGNvdXNpbiAiJUQiIHRoYXQganVzdCBnaXZlcyB0aGUKKyAgICJ0YWduYW1lIiB3aXRob3V0IGZyaWxscy4KKworICogImdpdCBwdXNoIiBsZWFybmVkICItLXNpZ25lZCIgcHVzaCwgdGhhdCBhbGxvd3MgYSBwdXNoIChpLmUuCisgICByZXF1ZXN0IHRvIHVwZGF0ZSB0aGUgcmVmcyBvbiB0aGUgb3RoZXIgc2lkZSB0byBwb2ludCBhdCBhIG5ldworICAgaGlzdG9yeSwgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNtaXNzaW9uIG9mIG5lY2Vzc2FyeSBvYmplY3RzKSB0byBiZQorICAgc2lnbmVkLCBzbyB0aGF0IGl0IGNhbiBiZSB2ZXJpZmllZCBhbmQgYXVkaXRlZCwgdXNpbmcgdGhlIEdQRworICAgc2lnbmF0dXJlIG9mIHRoZSBwZXJzb24gd2hvIHB1c2hlZCwgdGhhdCB0aGUgdGlwcyBvZiBicmFuY2hlcyBhdCBhCisgICBwdWJsaWMgcmVwb3NpdG9yeSByZWFsbHkgcG9pbnQgdGhlIGNvbW1pdHMgdGhlIHB1c2hlciB3YW50ZWQgdG8sCisgICB3aXRob3V0IGhhdmluZyB0byAidHJ1c3QiIHRoZSBzZXJ2ZXIuCisKKyAqICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiBpcyBhIG5ldyBmaWx0ZXIgdG8gcHJvZ3JhbW1hdGljYWxseSBlZGl0CisgICB0aGUgdGFpbCBlbmQgb2YgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZXMsIGUuZy4gIlNpZ25lZC1vZmYtYnk6Ii4KKworICogImdpdCBoZWxwIGV2ZXJ5ZGF5IiBzaG93cyB0aGUgIkV2ZXJ5ZGF5IEdpdCBpbiAyMCBjb21tYW5kcyBvciBzbyIKKyAgIGRvY3VtZW50LCB3aG9zZSBjb250ZW50cyBoYXZlIGJlZW4gdXBkYXRlZCB0byBtYXRjaCBtb3JlIG1vZGVybgorICAgR2l0IHByYWN0aWNlLgorCisgKiBPbiB0aGUgImdpdCBzdm4iIGZyb250LCB3b3JrIHByb2dyZXNzZXMgdG8gcmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiBhbmQKKyAgIHRvIGltcHJvdmUgaGFuZGxpbmcgb2YgbWVyZ2VpbmZvLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFRoZSBBUEkgdG8gbWFuaXB1bGF0ZSB0aGUgInJlZnMiIGhhcyBiZWVuIHJlc3RydWN0dXJlZCB0byBtYWtlIGl0CisgICBtb3JlIHRyYW5zYWN0aW9uYWwsIHdpdGggdGhlIGV2ZW50dWFsIGdvYWwgdG8gYWxsb3cgYWxsLW9yLW5vbmUKKyAgIGF0b21pYyB1cGRhdGVzIGFuZCBtaWdyYXRpbmcgdGhlIHN0b3JhZ2UgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4KKyAgIHRoZSB0cmFkaXRpb25hbCBmaWxlc3lzdGVtIGJhc2VkIG9uZSAoZS5nLiBkYXRhYmFzZXMpLgorCisgKiBUaGUgbG9ja2ZpbGUgQVBJIGFuZCBpdHMgdXNlcnMgaGF2ZSBiZWVuIGNsZWFuZWQgdXAuCisKKyAqIFdlIG5vIGxvbmdlciBhdHRlbXB0IHRvIGtlZXAgdHJhY2sgb2YgaW5kaXZpZHVhbCBkZXBlbmRlbmNpZXMgdG8KKyAgIHRoZSBoZWFkZXIgZmlsZXMgaW4gdGhlIGJ1aWxkIHByb2NlZHVyZSwgcmVseWluZyBpbnN0ZWFkIG9uIGF1dG9tYXRlZAorICAgZGVwZW5kZW5jeSBnZW5lcmF0aW9uIHN1cHBvcnQgZnJvbSBtb2Rlcm4gY29tcGlsZXJzLgorCisgKiBJbiB0ZXN0cywgd2UgaGF2ZSBiZWVuIHVzaW5nIE5PVF97TUlOR1csQ1lHV0lOfSB0ZXN0IHByZXJlcXVpc2l0ZXMKKyAgIGxvbmcgYmVmb3JlIG5lZ2F0ZWQgcHJlcmVxdWlzaXRlcyBlLmcuICFNSU5HVyB3ZXJlIGludmVudGVkLgorICAgVGhlIGZvcm1lciBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gdGhlIGxhdHRlciB0byBhdm9pZCBjb25mdXNpb24uCisKKyAqIE9wdGltaXplZCBsb29raW5nIHVwIGEgcmVtb3RlJ3MgY29uZmlndXJhdGlvbiBpbiBhIHJlcG9zaXRvcnkgd2l0aCB2ZXJ5IG1hbnkKKyAgIHJlbW90ZXMgZGVmaW5lZC4KKworICogVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHlvdSBsb2NrIGFuZCBvcGVuIHRvIHdyaXRlIGEgZmlsZSwgY2xvc2UgaXQKKyAgIHRvIHNob3cgdGhlIHVwZGF0ZWQgY29udGVudHMgdG8gYW4gZXh0ZXJuYWwgcHJvY2Vzc2VzLCBhbmQgdGhlbiBoYXZlCisgICB0byB1cGRhdGUgdGhlIGZpbGUgYWdhaW4gd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgbm93IHRoZQorICAgbG9ja2ZpbGUgQVBJIGhhcyBzdXBwb3J0IGZvciBzdWNoIGFuIGFjY2VzcyBwYXR0ZXJuLgorCisgKiBUaGUgQVBJIHRvIGFsbG9jYXRlIHRoZSBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiBjb21taXQKKyAgIGRlY29yYXRpb24gaGFzIGJlZW4gdXBkYXRlZCB0byBtYWtlIGl0IGxlc3MgY3VtYmVyc29tZSB0byB1c2UuCisKKyAqIEFuIGluLWNvcmUgY2FjaGluZyBsYXllciB0byBsZXQgdXMgYXZvaWQgcmVhZGluZyB0aGUgc2FtZQorICAgY29uZmlndXJhdGlvbiBmaWxlcyBzZXZlcmFsIHRpbWVzIGhhcyBiZWVuIGFkZGVkLiAgQSBmZXcgY29tbWFuZHMKKyAgIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdXNlIHRoaXMgc3Vic3lzdGVtLgorCisgKiBWYXJpb3VzIGNvZGUgcGF0aHMgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgYW5kIHNpbXBsaWZpZWQgYnkgdXNpbmcKKyAgIHRoZSAic3RyYnVmIiwgInN0YXJ0c193aXRoKCkiLCBhbmQgInNraXBfcHJlZml4KCkiIEFQSXMgbW9yZS4KKworICogQSBmZXcgY29kZXBhdGhzIHRoYXQgZGllZCB3aGVuIGxhcmdlIGJsb2JzIHRoYXQgd291bGQgbm90IGZpdCBpbgorICAgY29yZSBhcmUgaW52b2x2ZWQgaW4gdGhlaXIgb3BlcmF0aW9uIGhhdmUgYmVlbiB0YXVnaHQgdG8gcHVudAorICAgaW5zdGVhZCwgYnkgZS5nLiBtYXJraW5nIGEgdG9vLWxhcmdlIGJsb2IgYXMgbm90IHRvIGJlIGRpZmZlZC4KKworICogQSBmZXcgbW9yZSBjb2RlIHBhdGhzIGluICJjb21taXQiIGFuZCAiY2hlY2tvdXQiIGhhdmUgYmVlbiB0YXVnaHQKKyAgIHRvIHJlcG9wdWxhdGUgdGhlIGNhY2hlLXRyZWUgaW4gdGhlIGluZGV4LCB0byBoZWxwIHNwZWVkIHVwIGxhdGVyCisgICAid3JpdGUtdHJlZSIgKHVzZWQgaW4gImNvbW1pdCIpIGFuZCAiZGlmZi1pbmRleCAtLWNhY2hlZCIgKHVzZWQgaW4KKyAgICJzdGF0dXMiKS4KKworICogQSBjb21tb24gcHJvZ3JhbW1pbmcgbWlzdGFrZSB0byBhc3NpZ24gdGhlIHNhbWUgc2hvcnQgb3B0aW9uIG5hbWUKKyAgIHRvIHR3byBzZXBhcmF0ZSBvcHRpb25zIGlzIGRldGVjdGVkIGJ5IHRoZSBwYXJzZV9vcHRpb25zKCkgQVBJIHRvIGhlbHAKKyAgIGRldmVsb3BlcnMuCisKKyAqIFRoZSBjb2RlIHBhdGggdG8gd3JpdGUgb3V0IHRoZSBwYWNrZWQtcmVmcyBmaWxlIGhhcyBiZWVuIG9wdGltaXplZCwKKyAgIHdoaWNoIGVzcGVjaWFsbHkgbWF0dGVycyBpbiBhIHJlcG9zaXRvcnkgd2l0aCBhIGxhcmdlIG51bWJlciBvZgorICAgcmVmcy4KKworICogVGhlIGNoZWNrIHRvIHNlZSBpZiBhIHJlZiAkRiBjYW4gYmUgY3JlYXRlZCBieSBtYWtpbmcgc3VyZSBubworICAgZXhpc3RpbmcgcmVmIGhhcyAkRi8gYXMgaXRzIHByZWZpeCBoYXMgYmVlbiBvcHRpbWl6ZWQsIHdoaWNoCisgICBlc3BlY2lhbGx5IG1hdHRlcnMgaW4gYSByZXBvc2l0b3J5IHdpdGggYSBsYXJnZSBudW1iZXIgb2YgZXhpc3RpbmcKKyAgIHJlZnMuCisKKyAqICJnaXQgZnNjayIgd2FzIHRhdWdodCB0byBjaGVjayB0aGUgY29udGVudHMgb2YgdGFnIG9iamVjdHMgYSBiaXQgbW9yZS4KKworICogImdpdCBoYXNoLW9iamVjdCIgd2FzIHRhdWdodCBhICItLWxpdGVyYWxseSIgb3B0aW9uIHRvIGhlbHAKKyAgIGRlYnVnZ2luZy4KKworICogV2hlbiBydW5uaW5nIGEgcmVxdWlyZWQgY2xlYW4gZmlsdGVyLCB3ZSBkbyBub3QgaGF2ZSB0byBtbWFwIHRoZQorICAgb3JpZ2luYWwgYmVmb3JlIGZlZWRpbmcgdGhlIGZpbHRlci4gIEluc3RlYWQsIHN0cmVhbSB0aGUgZmlsZQorICAgY29udGVudHMgZGlyZWN0bHkgdG8gdGhlIGZpbHRlciBhbmQgcHJvY2VzcyBpdHMgb3V0cHV0LgorCisgKiBUaGUgc2NyaXB0cyBpbiB0aGUgdGVzdCBzdWl0ZSBjYW4gYmUgcnVuIHdpdGggdGhlICIteCIgb3B0aW9uIHRvIHNob3cKKyAgIGEgc2hlbGwtdHJhY2Ugb2YgZWFjaCBjb21tYW5kIHRoZXkgcnVuLgorCisgKiBUaGUgInJ1bi1jb21tYW5kIiBBUEkgbGVhcm5lZCB0byBtYW5hZ2UgdGhlIGFyZ3YgYW5kIGVudmlyb25tZW50CisgICBhcnJheXMgZm9yIGNoaWxkIHByb2Nlc3MsIGFsbGV2aWF0aW5nIHRoZSBuZWVkIGZvciB0aGUgY2FsbGVycyB0bworICAgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgdGhlbS4KKworICogU29tZSBwZW9wbGUgdXNlIEFzY2lpRG9jdG9yLCBpbnN0ZWFkIG9mIEFzY2lpRG9jLCB0byBmb3JtYXQgb3VyCisgICBkb2N1bWVudGF0aW9uIHNldDsgdGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gYWRqdXN0ZWQgdG8gYmUgdXNhYmxlCisgICBieSBib3RoLCBhcyBBc2NpaURvY3RvciBpcyBwaWNraWVyIHRoYW4gQXNjaWlEb2MgYWJvdXQgaXRzIGlucHV0CisgICBtYXJrLXVwLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjEKKy0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi4xIGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqICJnaXQgbG9nIC0tcHJldHR5L2Zvcm1hdD0iIHdpdGggYW4gZW1wdHkgZm9ybWF0IHN0cmluZyBkaWQgbm90CisgICBtZWFuIHRoZSBtb3JlIG9idmlvdXMgIk5vIG91dHB1dCB3aGF0c29ldmVyIiBidXQgIlVzZSBkZWZhdWx0CisgICBmb3JtYXQiLCB3aGljaCB3YXMgY291bnRlcmludHVpdGl2ZS4KKworICogImdpdCAtYyBzZWN0aW9uLnZhciBjb21tYW5kIiBhbmQgImdpdCAtYyBzZWN0aW9uLnZhcj0gY29tbWFuZCIKKyAgIHNob3VsZCBwYXNzIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlIGRpZmZlcmVudGx5ICh0aGUgZm9ybWVyIHNob3VsZCBiZSBhCisgICBib29sZWFuIHRydWUsIHRoZSBsYXR0ZXIgc2hvdWxkIGJlIGFuIGVtcHR5IHN0cmluZykuCisKKyAqIEFwcGx5aW5nIGEgcGF0Y2ggbm90IGdlbmVyYXRlZCBieSBHaXQgaW4gYSBzdWJkaXJlY3RvcnkgdXNlZCB0bworICAgY2hlY2sgZm9yIHdoaXRlc3BhY2UgYnJlYWthZ2UgdXNpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgaW5jb3JyZWN0CisgICBwYXRocy4gQWxzbyB3aGl0ZXNwYWNlIGNoZWNrcyB3ZXJlIHBlcmZvcm1lZCBldmVuIGZvciBwYXRocworICAgZXhjbHVkZWQgdmlhIHRoZSAiZ2l0IGFwcGx5IC0tZXhjbHVkZT08cGF0aD4iIG1lY2hhbmlzbS4KKworICogImdpdCBidW5kbGUgY3JlYXRlIiB3aXRoIGEgZGF0ZS1yYW5nZSBzcGVjaWZpY2F0aW9uIHdhcyBtZWFudCB0bworICAgZXhjbHVkZSB0YWdzIG91dHNpZGUgdGhlIHJhbmdlLCBidXQgaXQgZGlkbid0LgorCisgKiAiZ2l0IGFkZCB4IiB3aGVyZSB4IHVzZWQgdG8gYmUgYSBkaXJlY3RvcnkgYW5kIGlzIG5vdyBhCisgICBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5IG1pc2JlaGF2ZWQuCisKKyAqIFRoZSBwcm9tcHQgc2NyaXB0IGNoZWNrZWQgdGhlICRHSVRfRElSL3JlZi9zdGFzaCBmaWxlIHRvIHNlZSBpZiB0aGVyZQorICAgaXMgYSBzdGFzaCwgd2hpY2ggd2FzIGEgbm8tbm8uCisKKyAqIFBhY2stcHJvdG9jb2wgZG9jdW1lbnRhdGlvbiBoYWQgYSBtaW5vciB0eXBvLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIiBkaWQgbm90IHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB3aGlsZSBjYXJyeWluZworICAgdGhlIGxvY2FsIGNoYW5nZXMgZm9yd2FyZCB3aGVuIGEgcGF0aCB3YXMgZGVsZXRlZCBmcm9tIHRoZSBpbmRleC4KKworICogImdpdCBkYWVtb24iICh3aXRoIE5PX0lQVjYgYnVpbGQgY29uZmlndXJhdGlvbikgdXNlZCB0byBpbmNvcnJlY3RseQorICAgdXNlIHRoZSBob3N0bmFtZSBldmVuIHdoZW4gZ2V0aG9zdGJ5bmFtZSgpIHJlcG9ydGVkIHRoYXQgdGhlIGdpdmVuCisgICBob3N0bmFtZSBpcyBub3QgZm91bmQuCisgICAobWVyZ2UgMTA3ZWZiZSBycy9kYWVtb24tZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaXRoIHN1ZmZpY2llbnRseSBsb25nIHJlZm5hbWVzLCAiZ2l0IGZhc3QtaW1wb3J0IiBjb3VsZCBoYXZlCisgICBvdmVyZmxvd2VkIGFuIG9uLXN0YWNrIGJ1ZmZlci4KKworICogQWZ0ZXIgInBhY2stcmVmcyAtLXBydW5lIiBwYWNrZWQgcmVmcyBhdCB0aGUgdG9wLWxldmVsLCBpdCBmYWlsZWQKKyAgIHRvIHBydW5lIHRoZW0uCisKKyAqIFByb2dyZXNzIG91dHB1dCBmcm9tICJnaXQgZ2MgLS1hdXRvIiB3YXMgdmlzaWJsZSBpbiAiZ2l0IGZldGNoIC1xIi4KKworICogV2UgdXNlZCB0byBwYXNzIC0xMDAwIHRvIHBvbGwoMiksIGV4cGVjdGluZyBpdCB0byBhbHNvIG1lYW4gIm5vCisgICB0aW1lb3V0Iiwgd2hpY2ggc2hvdWxkIGJlIHNwZWxsZWQgYXMgLTEuCisKKyAqICJnaXQgcmViYXNlIiBkb2N1bWVudGF0aW9uIHdhcyB1bmNsZWFyIHRoYXQgaXQgaXMgcmVxdWlyZWQgdG8KKyAgIHNwZWNpZnkgb24gd2hhdCA8dXBzdHJlYW0+IHRoZSByZWJhc2UgaXMgdG8gYmUgZG9uZSB3aGVuIHRlbGxpbmcgaXQKKyAgIHRvIGZpcnN0IGNoZWNrIG91dCA8YnJhbmNoPi4KKyAgIChtZXJnZSA5NWM2ODI2IHNvL3JlYmFzZS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1c2giIG92ZXIgSFRUUCB0cmFuc3BvcnQgaGFkIGFuIGFydGlmaWNpYWwgbGltaXQgb24gdGhlIG51bWJlciBvZgorICAgcmVmcyB0aGF0IGNhbiBiZSBwdXNoZWQsIGltcG9zZWQgYnkgdGhlIGNvbW1hbmQgbGluZSBsZW5ndGguCisgICAobWVyZ2UgMjZiZTE5YiBqay9zZW5kLXBhY2stbWFueS1yZWZzcGVjcyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gcmVjZWl2aW5nIGFuIGludmFsaWQgcGFjayBzdHJlYW0gdGhhdCByZWNvcmRzIHRoZSBzYW1lIG9iamVjdAorICAgdHdpY2UsIG11bHRpcGxlIHRocmVhZHMgZ290IGNvbmZ1c2VkIGR1ZSB0byBhIHJhY2UuCisgICAobWVyZ2UgYWI3OTFkZCBqay9pbmRleC1wYWNrLXRocmVhZGluZy1yYWNlcyBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGF0dGVtcHQgdG8gcmVtb3ZlIHRoZSBlbnRpcmUgdHJlZSBpbiB0aGUgImdpdCBmYXN0LWltcG9ydCIgaW5wdXQKKyAgIHN0cmVhbSBjYXVzZWQgaXQgdG8gbWlzYmVoYXZlLgorICAgKG1lcmdlIDI2NjhkNjkgbWIvZmFzdC1pbXBvcnQtZGVsZXRlLXJvb3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWFjaGFiaWxpdHkgY2hlY2sgKHVzZWQgaW4gImdpdCBwcnVuZSIgYW5kIGZyaWVuZHMpIGRpZCBub3QgYWRkIGEKKyAgIGRldGFjaGVkIEhFQUQgYXMgYSBzdGFydGluZyBwb2ludCB0byB0cmF2ZXJzZSBvYmplY3RzIHN0aWxsIGluIHVzZS4KKyAgIChtZXJnZSBjNDBmZGQwIG1rL3JlYWNoYWJsZS1wcm90ZWN0LWRldGFjaGVkLWhlYWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNvbmZpZyAtLWFkZCBzZWN0aW9uLnZhciB2YWwiIHdoZW4gc2VjdGlvbi52YXIgYWxyZWFkeSBoYXMgYW4KKyAgIGVtcHR5LXN0cmluZyB2YWx1ZSB1c2VkIHRvIGxvc2UgdGhlIGVtcHR5LXN0cmluZyB2YWx1ZS4KKyAgIChtZXJnZSBjMTA2M2JlIHRhL2NvbmZpZy1hZGQtdG8tZW1wdHktb3ItdHJ1ZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZzY2siIGZhaWxlZCB0byByZXBvcnQgdGhhdCBpdCBmb3VuZCBjb3JydXB0IG9iamVjdHMgdmlhIGl0cworICAgZXhpdCBzdGF0dXMgaW4gc29tZSBjYXNlcy4KKyAgIChtZXJnZSAzMGQxMDM4IGprL2ZzY2stZXhpdC1jb2RlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFVzZSBvZiB0aGUgIi0tdmVyYm9zZSIgb3B0aW9uIHVzZWQgdG8gYnJlYWsgImdpdCBicmFuY2ggLS1tZXJnZWQiLgorICAgKG1lcmdlIDEyOTk0ZGQgamsvbWFpbnQtYnJhbmNoLXZlcmJvc2UtbWVyZ2VkIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBNVUFzIG1hbmdsZSBhIGxpbmUgaW4gYSBtZXNzYWdlIHRoYXQgYmVnaW5zIHdpdGggIkZyb20gIiB0bworICAgIj5Gcm9tICIgd2hlbiB3cml0aW5nIHRvIGEgbWFpbGJveCBmaWxlLCBhbmQgZmVlZGluZyBzdWNoIGFuIGlucHV0CisgICB0byAiZ2l0IGFtIiB1c2VkIHRvIGxvc2Ugc3VjaCBhIGxpbmUuCisgICAobWVyZ2UgODVkZTg2YSBqay9tYm94LWZyb20tbGluZSBsYXRlciB0byBtYWludCkuCisKKyAqICJyZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAkbmFtZSIgaXMgbWVhbnQgdG8gcXVpZXRseSBleGl0IHdpdGggYQorICAgbm9uLXplcm8gc3RhdHVzIHdoZW4gJG5hbWUgaXMgbm90IGEgdmFsaWQgb2JqZWN0IG5hbWUsIGJ1dCBzdGlsbAorICAgZ2F2ZSBlcnJvciBtZXNzYWdlcyBpbiBzb21lIGNhc2VzLgorCisgKiBBIGhhbmRmdWwgb2YgQyBzb3VyY2UgZmlsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gaW5jbHVkZQorICAgImdpdC1jb21wYXQtdXRpbC5oIiBhcyB0aGUgZmlyc3QgdGhpbmcsIHRvIGNvbmZvcm0gYmV0dGVyIHRvIG91cgorICAgY29kaW5nIGd1aWRlbGluZXMuCisgICAobWVyZ2UgMWM0YjY2MCBkYS9pbmNsdWRlLWNvbXBhdC11dGlsLWZpcnN0LWluLWMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdDcwMDQgdGVzdCwgd2hpY2ggdHJpZWQgdG8gcnVuIEdpdCB3aXRoIHNtYWxsIHN0YWNrIHNwYWNlLCBoYXMgYmVlbgorICAgdXBkYXRlZCB0byB1c2UgYSBiaXQgbGFyZ2VyIHN0YWNrIHRvIGF2b2lkIGZhbHNlIGJyZWFrYWdlIG9uIHNvbWUKKyAgIHBsYXRmb3Jtcy4KKyAgIChtZXJnZSBiOWExOTA3IHNrL3RhZy1jb250YWlucy13by1yZWN1cnNpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGZldyBkb2N1bWVudGF0aW9uIHBhZ2VzIGhhZCBleGFtcGxlIHNlY3Rpb25zIG1hcmtlZCB1cCBub3QgcXVpdGUKKyAgIGNvcnJlY3RseSwgd2hpY2ggcGFzc2VkIEFzY2lpRG9jIGJ1dCBmYWlsZWQgd2l0aCBBc2NpaURvY3Rvci4KKyAgIChtZXJnZSBjMzBjNDNjIGJjL2FzY2lpZG9jLXByZXR0eS1mb3JtYXRzLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjhhNDhhZiBiYy9hc2NpaWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXR3ZWIiIHVzZWQgZGVwcmVjYXRlZCBDR0k6OnN0YXJ0ZnJvbSwgd2hpY2ggd2FzIHJlbW92ZWQgZnJvbQorICAgQ0dJLnBtIGFzIG9mIDQuMDQ7IHVzZSBDR0k6OnN0YXJ0X2Zyb20gaW5zdGVhZC4KKyAgIChtZXJnZSA0NzUwZjRiIHJtL2dpdHdlYi1zdGFydC1mb3JtIGxhdGVyIHRvIG1haW50KS4KKworICogTmV3ZXIgdmVyc2lvbnMgb2YgJ21lbGQnIGJyZWFrIHRoZSBhdXRvLWRldGVjdGlvbiB3ZSB1c2UgdG8gc2VlIGlmCisgICB0aGV5IGFyZSBuZXcgZW5vdWdoIHRvIHN1cHBvcnQgdGhlIGAtLW91dHB1dGAgb3B0aW9uLgorICAgKG1lcmdlIGIxMmQwNDUgZGEvbWVyZ2V0b29sLW1lbGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgZm9yZ290IHRvIGRpc2FibGUgdGhlIGNvZGVwYXRoIHRvIGdlbmVyYXRlIHRoZQorICAgb2JqZWN0IHJlYWNoYWJpbGl0eSBiaXRtYXAgd2hlbiBpdCBuZWVkcyB0byBzcGxpdCB0aGUgcmVzdWx0aW5nCisgICBwYWNrLgorICAgKG1lcmdlIDIxMTM0NzEgamsvcGFjay1vYmplY3RzLW5vLWJpdG1hcC13aGVuLXNwbGl0dGluZyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIHVzZSBjYWNoZS10cmVlIHRydXN0ZWQgdGhlIG9uLWRpc2sgZGF0YSB0b28gbXVjaCBhbmQKKyAgIGZlbGwgaW50byBhbiBpbmZpbml0ZSBsb29wIHVwb24gc2VlaW5nIGFuIGluY29ycmVjdGx5IHJlY29yZGVkCisgICBpbmRleCBmaWxlLgorICAgKG1lcmdlIDcyOWRiYmQgamsvY2FjaGUtdHJlZS1wcm90ZWN0LWZyb20tYnJva2VuLWxpYmdpdDIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoIiBpbnRvIGEgcmVwb3NpdG9yeSB3aGVyZSBicmFuY2ggQiB3YXMgZGVsZXRlZCBlYXJsaWVyLAorICAgYmFjayB3aGVuIGl0IGhhZCByZWZsb2cgZW5hYmxlZCwgYW5kIHRoZW4gYnJhbmNoIEIvQyBpcyBmZXRjaGVkCisgICBpbnRvIGl0IHdpdGhvdXQgcmVmbG9nIGVuYWJsZWQsIHdoaWNoIGlzIGFyZ3VhYmx5IGFuIHVubGlrZWx5CisgICBjb3JuZXIgY2FzZSwgdW5uZWNlc3NhcmlseSBmYWlsZWQuCisgICAobWVyZ2UgYWFlODI4YiBqay9mZXRjaC1yZWZsb2ctZGYtY29uZmxpY3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCAtTC4uLiIgdXNlZCB0byBjcmFzaC4KKyAgIChtZXJnZSBhODc4N2M1IHRtL2xpbmUtbG9nLWZpcnN0LXBhcmVudCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTNjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4xLnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgdjIuMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4yCistLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdlIHVzZWQgdG8gYWxsb3cgY29tbWl0dGluZyBhIHBhdGggIi5HaXQvY29uZmlnIiB3aXRoIEdpdCB0aGF0IGlzCisgICBydW5uaW5nIG9uIGEgY2FzZSBzZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0IGFuIGF0dGVtcHQgdG8gY2hlY2sgb3V0CisgICBzdWNoIGEgcGF0aCB3aXRoIEdpdCB0aGF0IHJ1bnMgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0KKyAgIHdvdWxkIGhhdmUgY2xvYmJlcmVkICIuZ2l0L2NvbmZpZyIsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQKKyAgIHRoZSB1c2VyIHdvdWxkIGhhdmUgZXhwZWN0ZWQuICBHaXQgbm93IHByZXZlbnRzIHlvdSBmcm9tIHRyYWNraW5nCisgICBhIHBhdGggd2l0aCAiLkdpdCIgKGluIGFueSBjYXNlIGNvbWJpbmF0aW9uKSBhcyBhIHBhdGggY29tcG9uZW50LgorCisgKiBPbiBXaW5kb3dzLCBjZXJ0YWluIHBhdGggY29tcG9uZW50cyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSAiLmdpdCIKKyAgIGFyZSBtYXBwZWQgdG8gIi5naXQiLCBlLmcuICJnaXR+MS9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZQorICAgIi5naXQvY29uZmlnIi4gIEhGUysgaGFzIGEgc2ltaWxhciBpc3N1ZSwgd2hlcmUgY2VydGFpbiB1bmljb2RlCisgICBjb2RlcG9pbnRzIGFyZSBpZ25vcmVkLCBlLmcuICIuZ1x1MjAwY2l0L2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZgorICAgaXQgd2VyZSAiLmdpdC9jb25maWciLiAgUGF0aG5hbWVzIHdpdGggdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBhcmUKKyAgIHJlamVjdGVkIG9uIHRoZSBhZmZlY3RlZCBzeXN0ZW1zLiAgR2l0IG9uIHN5c3RlbXMgdGhhdCBhcmUgbm90CisgICBhZmZlY3RlZCBieSB0aGlzIGlzc3VlIChlLmcuIExpbnV4KSBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvCisgICByZWplY3QgdGhlbSB0byBlbnN1cmUgY3Jvc3MgcGxhdGZvcm0gaW50ZXJvcGVyYWJpbGl0eSBvZiB0aGUgaG9zdGVkCisgICBwcm9qZWN0cy4KKworICogImdpdCBmc2NrIiBub3RpY2VzIGEgdHJlZSBvYmplY3QgdGhhdCByZWNvcmRzIHN1Y2ggYSBwYXRoIHRoYXQgY2FuCisgICBiZSBjb25mdXNlZCB3aXRoICIuZ2l0IiwgYW5kIHdpdGggcmVjZWl2ZS5mc2NrT2JqZWN0cyBjb25maWd1cmF0aW9uCisgICBzZXQgdG8gdHJ1ZSwgYW4gYXR0ZW1wdCB0byAiZ2l0IHB1c2giIHN1Y2ggYSB0cmVlIG9iamVjdCB3aWxsIGJlCisgICByZWplY3RlZC4gIFN1Y2ggYSBwYXRoIG1heSBub3QgYmUgYSBwcm9ibGVtIG9uIGEgd2VsbCBiZWhhdmluZworICAgZmlsZXN5c3RlbSBidXQgaW4gb3JkZXIgdG8gcHJvdGVjdCB0aG9zZSBvbiBIRlMrIGFuZCBvbiBjYXNlCisgICBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgdGhpcyBjaGVjayBpcyBlbmFibGVkIG9uIGFsbCBwbGF0Zm9ybXMuCisKK0EgYmlnICJ0aGFua3MhIiBmb3IgYnJpbmdpbmcgdGhpcyBpc3N1ZSB0byB1cyBnb2VzIHRvIG91ciBmcmllbmRzIGluCit0aGUgTWVyY3VyaWFsIGxhbmQsIG5hbWVseSwgTWF0dCBNYWNrYWxsIGFuZCBBdWdpZSBGYWNrbGVyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTlhMzVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMi50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0IHYyLjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMi4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjaGVja291dCAkdHJlZWlzaCAkcGF0aCIsIHdoZW4gJHBhdGggaW4gdGhlIGluZGV4IGFuZCB0aGUKKyAgIHdvcmtpbmcgdHJlZSBhbHJlYWR5IG1hdGNoZWQgd2hhdCBpcyBpbiAkdHJlZWlzaCBhdCB0aGUgJHBhdGgsCisgICBzdGlsbCBvdmVyd3JvdGUgdGhlICRwYXRoIHVubmVjZXNzYXJpbHkuCisKKyAqICJnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIiBkaWQgbm90IHBhcnNlIGl0cyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisgICBjYXJlZnVsbHkuCisKKyAqIG9wZW4oKSBlbXVsYXRlZCBvbiBXaW5kb3dzIHBsYXRmb3JtcyBkaWQgbm90IGdpdmUgRUlTRElSIHVwb24KKyAgIGFuIGF0dGVtcHQgdG8gb3BlbiBhIGRpcmVjdG9yeSBmb3Igd3JpdGluZy4KKworICogQSBmZXcgY29kZSBwYXRocyB1c2VkIGFicygpIHdoZW4gdGhleSBzaG91bGQgaGF2ZSB1c2VkIGxhYnMoKSBvbgorICAgbG9uZyBpbnRlZ2Vycy4KKworICogImdpdHdlYiIgdXNlZCB0byBkZXBlbmQgb24gYSBiZWhhdmlvdXIgcmVjZW50IENHSS5wbSBkZXByZWNhdGVkLgorCisgKiAiZ2l0IGluaXQiIChoZW5jZSAiZ2l0IGNsb25lIikgaW5pdGlhbGl6ZWQgdGhlIHBlci1yZXBvc2l0b3J5CisgICBjb25maWd1cmF0aW9uIGZpbGUgLmdpdC9jb25maWcgd2l0aCB4LWJpdCBieSBtaXN0YWtlLgorCisgKiBHaXQgMi4wIHdhcyBzdXBwb3NlZCB0byBtYWtlIHRoZSAic2ltcGxlIiBtb2RlIGZvciB0aGUgZGVmYXVsdCBvZgorICAgImdpdCBwdXNoIiwgYnV0IGl0IGRpZG4ndC4KKworICogIkV2ZXJ5ZGF5IiBkb2N1bWVudCBoYWQgYSBicm9rZW4gbGluay4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBkaWQgbm90IGJvdGhlciBmaXhpbmcgcGVybCBhbmQgcHl0aG9uIHNjcmlwdHMKKyAgIHdoZW4gTk9fUEVSTCBhbmQgTk9fUFlUSE9OIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VkLgorCisgKiBUaGUgY29kZSB0aGF0IHJlYWRzIHRoZSByZWZsb2cgZnJvbSB0aGUgbmV3ZXIgdG8gdGhlIG9sZGVyIGVudHJpZXMKKyAgIGRpZCBub3QgaGFuZGxlIGFuIGVudHJ5IHRoYXQgY3Jvc3NlcyBhIGJvdW5kYXJ5IG9mIGJsb2NrIGl0IHVzZXMgdG8KKyAgIHJlYWQgdGhlbSBjb3JyZWN0bHkuCisKKyAqICJnaXQgYXBwbHkiIHdhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gdG8gdGFrZSAtLWlnbm9yZS1kYXRlCisgICBvcHRpb24sIHdoaWNoIGl0IGRvZXMgbm90LgorCisgKiBUcmFkaXRpb25hbGx5IHdlIHRyaWVkIHRvIGF2b2lkIGludGVycHJldGluZyBkYXRlIHN0cmluZ3MgZ2l2ZW4gYnkKKyAgIHRoZSB1c2VyIGFzIGZ1dHVyZSBkYXRlcywgZS5nLiBHSVRfQ09NTUlUVEVSX0RBVEU9MjAxNC0xMi0xMCB3aGVuCisgICB1c2VkIGVhcmx5IE5vdmVtYmVyIDIwMTQgd2FzIHRha2VuIGFzICJPY3RvYmVyIDEyLCAyMDE0IiBiZWNhdXNlIGl0CisgICBpcyBsaWtlbHkgdGhhdCBhIGRhdGUgaW4gdGhlIGZ1dHVyZSwgRGVjZW1iZXIgMTAsIGlzIGEgbWlzdGFrZS4KKyAgIFRoaXMgaGV1cmlzdGljcyBoYXMgYmVlbiBsb29zZW5lZCB0byBhbGxvdyBwZW9wbGUgdG8gZXhwcmVzcyBmdXR1cmUKKyAgIGRhdGVzIChtb3N0IG5vdGFibHksIC0tdW50aWw9PGRhdGU+IG1heSB3YW50IHRvIGJlIGZhciBpbiB0aGUKKyAgIGZ1dHVyZSkgYW5kIHdlIG5vIGxvbmdlciB0aWVicmVhayBieSBmdXR1cmUtbmVzcyBvZiB0aGUgZGF0ZSB3aGVuCisKKyAgICAoMSkgSVNPLWxpa2UgZm9ybWF0IGlzIHVzZWQsIGFuZAorICAgICgyKSB0aGUgc3RyaW5nIGNhbiBtYWtlIHNlbnNlIGludGVycHJldGVkIGFzIGJvdGggeS1tLWQgYW5kIHktZC1tLgorCisgICBHaXQgbWF5IHN0aWxsIGhhdmUgdG8gdXNlIHRoZSBoZXVyaXN0aWNzIHRvIHRpZWJyZWFrIGJldHdlZW4gZGQvbW0veXkKKyAgIGFuZCBtbS9kZC95eSwgdGhvdWdoLgorCisgKiBUaGUgY29kZSB0byBhYmJyZXZpYXRlIGFuIG9iamVjdCBuYW1lIHRvIGl0cyBzaG9ydCB1bmlxdWUgcHJlZml4CisgICBoYXMgYmVlbiBvcHRpbWl6ZWQgd2hlbiBubyBhYmJyZXZpYXRpb24gd2FzIHJlcXVlc3RlZC4KKworICogImdpdCBhZGQgLS1pZ25vcmUtZXJyb3JzIC4uLiIgZGlkIG5vdCBpZ25vcmUgYW4gZXJyb3IgdG8KKyAgIGdpdmUgYSBmaWxlIHRoYXQgZGlkIG5vdCBleGlzdC4KKworICogR2l0IGRpZCBub3QgY29ycmVjdGx5IHJlYWQgYW4gb3ZlcmxvbmcgcmVmbmFtZSBmcm9tIGEgcGFja2VkIHJlZnMKKyAgIGZpbGUuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmZmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4zLnR4dApAQCAtMCwwICsxLDkgQEAKK0dpdCB2Mi4yLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjIuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlcGF0aHMgdGhhdCB1c2VkIHRvIHVzZSBmaXhlZC1zaXplZCBhcnJheXMgdG8gaG9sZAorICAgcGF0aG5hbWVzIGhhdmUgYmVlbiBjb3JyZWN0ZWQgdG8gdXNlIHN0cmJ1ZiBhbmQgb3RoZXIgbWVjaGFuaXNtcyB0bworICAgYWxsb3cgbG9uZ2VyIHBhdGhuYW1lcyB3aXRob3V0IGZlYXJpbmcgb3ZlcmZsb3dzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZDdlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjAuMC50eHQKQEAgLTAsMCArMSw3MDAgQEAKK0dpdCAyLjIwIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGJyYW5jaCAtbCA8Zm9vPiIgdXNlZCB0byBiZSBhIHdheSB0byBhc2sgYSByZWZsb2cgdG8gYmUKKyAgIGNyZWF0ZWQgd2hpbGUgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCBidXQgdGhhdCBpcyBubyBsb25nZXIgdGhlCisgICBjYXNlLiAgSXQgaXMgYSBzaG9ydC1oYW5kIGZvciAiZ2l0IGJyYW5jaCAtLWxpc3QgPGZvbz4iIG5vdy4KKworICogImdpdCBwdXNoIiBpbnRvIHJlZnMvdGFncy8qIGhpZXJhcmNoeSBpcyByZWplY3RlZCB3aXRob3V0IGdldHRpbmcKKyAgIGZvcmNlZCwgYnV0ICJnaXQgZmV0Y2giIChtaXNndWlkZWRseSkgdXNlZCB0aGUgImZhc3QgZm9yd2FyZGluZyIKKyAgIHJ1bGUgdXNlZCBmb3IgdGhlIHJlZnMvaGVhZHMvKiBoaWVyYXJjaHk7IHRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLAorICAgd2hpY2ggbWVhbnMgc29tZSBmZXRjaGVzIG9mIHRhZ3MgdGhhdCBkaWQgbm90IGZhaWwgd2l0aCBvbGRlcgorICAgdmVyc2lvbiBvZiBHaXQgd2lsbCBmYWlsIHdpdGhvdXQgIi0tZm9yY2UiIHdpdGggdGhpcyB2ZXJzaW9uLgorCisgKiAiZ2l0IGhlbHAgLWEiIG5vdyBnaXZlcyB2ZXJib3NlIG91dHB1dCAoc2FtZSBhcyAiZ2l0IGhlbHAgLWF2IikuCisgICBUaG9zZSB3aG8gd2FudCB0aGUgb2xkIG91dHB1dCBtYXkgc2F5ICJnaXQgaGVscCAtLW5vLXZlcmJvc2UgLWEiLi4KKworICogImdpdCBjcG4gLS1oZWxwIiwgd2hlbiAiY3BuIiBpcyBhbiBhbGlhcyB0bywgc2F5LCAiY2hlcnJ5LXBpY2sgLW4iLAorICAgcmVwb3J0ZWQgb25seSB0aGUgYWxpYXMgZXhwYW5zaW9uIG9mICJjcG4iIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YKKyAgIEdpdC4gIEl0IG5vdyBydW5zICJnaXQgY2hlcnJ5LXBpY2sgLS1oZWxwIiB0byBzaG93IHRoZSBtYW51YWwgcGFnZQorICAgb2YgdGhlIGNvbW1hbmQsIHdoaWxlIHNlbmRpbmcgdGhlIGFsaWFzIGV4cGFuc2lvbiB0byB0aGUgc3RhbmRhcmQKKyAgIGVycm9yIHN0cmVhbS4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIHRvIGdyYWIgYWRkcmVzcy1sb29raW5nIHN0cmluZyBvbiBhbnkKKyAgIHRyYWlsZXIgd2hvc2UgbmFtZSBlbmRzIHdpdGggIi1ieSIuIFRoaXMgaXMgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUKKyAgIGNoYW5nZS4gIEFkZGluZyAiLS1zdXBwcmVzcy1jYz1taXNjLWJ5IiBvbiB0aGUgY29tbWFuZCBsaW5lLCBvcgorICAgc2V0dGluZyBzZW5kZW1haWwuc3VwcHJlc3NjYyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICJtaXNjLWJ5IiwKKyAgIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvdXIuCisKKworVXBkYXRlcyBzaW5jZSB2Mi4xOQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogUnVubmluZyAiZ2l0IGNsb25lIiBhZ2FpbnN0IGEgcHJvamVjdCB0aGF0IGNvbnRhaW4gdHdvIGZpbGVzIHdpdGgKKyAgIHBhdGhuYW1lcyB0aGF0IGRpZmZlciBvbmx5IGluIGNhc2VzIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZQorICAgZmlsZXN5c3RlbSB3b3VsZCByZXN1bHQgaW4gb25lIG9mIHRoZSBmaWxlcyBsb3N0IGJlY2F1c2UgdGhlCisgICB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gaXMgaW5jYXBhYmxlIG9mIGhvbGRpbmcgYm90aCBhdCB0aGUgc2FtZQorICAgdGltZS4gIEFuIGF0dGVtcHQgaXMgbWFkZSB0byBkZXRlY3Qgc3VjaCBhIGNhc2UgYW5kIHdhcm4uCisKKyAqICJnaXQgY2hlY2tvdXQgLWIgbmV3YnJhbmNoIFtIRUFEXSIgc2hvdWxkIG5vdCBoYXZlIHRvIGRvIGFzIG11Y2ggYXMKKyAgIGNoZWNraW5nIG91dCBhIGNvbW1pdCBkaWZmZXJlbnQgZnJvbSBIRUFELiAgQW4gYXR0ZW1wdCBpcyBtYWRlIHRvCisgICBvcHRpbWl6ZSB0aGlzIHNwZWNpYWwgY2FzZS4KKworICogImdpdCByZXYtbGlzdCAtLXN0ZGluIDwvZGV2L251bGwiIHVzZWQgdG8gYmUgYW4gZXJyb3I7IGl0IG5vdyBzaG93cworICAgbm8gb3V0cHV0IHdpdGhvdXQgYW4gZXJyb3IuICAiZ2l0IHJldi1saXN0IC0tc3RkaW4gLS1kZWZhdWx0IEhFQUQiCisgICBzdGlsbCBmYWxscyBiYWNrIHRvIHRoZSBnaXZlbiBkZWZhdWx0IHdoZW4gbm90aGluZyBpcyBnaXZlbiBvbiB0aGUKKyAgIHN0YW5kYXJkIGlucHV0LgorCisgKiBMaWZ0IGNvZGUgZnJvbSBHaXRIdWIgdG8gcmVzdHJpY3QgZGVsdGEgY29tcHV0YXRpb24gc28gdGhhdCBhbgorICAgb2JqZWN0IHRoYXQgZXhpc3RzIGluIG9uZSBmb3JrIGlzIG5vdCBtYWRlIGludG8gYSBkZWx0YSBhZ2FpbnN0CisgICBhbm90aGVyIG9iamVjdCB0aGF0IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgc2FtZSBmb3JrZWQgcmVwb3NpdG9yeS4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgbmV3ICItLWludGVyZGlmZiIgYW5kICItLXJhbmdlLWRpZmYiCisgICBvcHRpb25zIHRvIGV4cGxhaW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIHZlcnNpb24gYW5kIHRoZQorICAgcHJldmlvdXMgYXR0ZW1wdCBpbiB0aGUgY292ZXIgbGV0dGVyIChvciBhZnRlciB0aGUgdGhyZWUtZGFzaGVzIGFzCisgICBhIGNvbW1lbnQpLgorCisgKiAiZ2l0IG1haWxpbmZvIiB1c2VkIGluICJnaXQgYW0iIGxlYXJuZWQgdG8gbWFrZSBhIGJlc3QtZWZmb3J0CisgICByZWNvdmVyeSBvZiBhIHBhdGNoIGNvcnJ1cHRlZCBieSBNVUEgdGhhdCBzZW5kcyB0ZXh0L3BsYWluIHdpdGgKKyAgIGZvcm1hdD1mbGF3ZWQgb3B0aW9uLgorICAgKG1lcmdlIDNhYTRkODFmODggcnMvbWFpbGluZm8tZm9ybWF0LWZsb3dlZCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBydWxlcyB1c2VkIGJ5ICJnaXQgcHVzaCIgYW5kICJnaXQgZmV0Y2giIHRvIGRldGVybWluZSBpZiBhIHJlZgorICAgY2FuIG9yIGNhbm5vdCBiZSB1cGRhdGVkIHdlcmUgaW5jb25zaXN0ZW50OyBzcGVjaWZpY2FsbHksIGZldGNoaW5nCisgICB0byB1cGRhdGUgZXhpc3RpbmcgdGFncyB3ZXJlIGFsbG93ZWQgZXZlbiB0aG91Z2ggdGFncyBhcmUgc3VwcG9zZWQKKyAgIHRvIGJlIHVubW92aW5nIGFuY2hvcmluZyBwb2ludHMuICAiZ2l0IGZldGNoIiB3YXMgdGF1Z2h0IHRvIGZvcmJpZAorICAgdXBkYXRlcyB0byBleGlzdGluZyB0YWdzIHdpdGhvdXQgdGhlICItLWZvcmNlIiBvcHRpb24uCisKKyAqICJnaXQgbXVsdGktcGFjay1pbmRleCIgbGVhcm5lZCB0byBkZXRlY3QgY29ycnVwdGlvbiBpbiB0aGUgLm1pZHgKKyAgIGZpbGUgaXQgdXNlcywgYW5kIHRoaXMgZmVhdHVyZSBoYXMgYmVlbiBpbnRlZ3JhdGVkIGludG8gImdpdCBmc2NrIi4KKworICogR2VuZXJhdGlvbiBvZiAoZXhwZXJpbWVudGFsKSBjb21taXQtZ3JhcGggZmlsZXMgaGF2ZSBzbyBmYXIgYmVlbgorICAgZmFpcmx5IHNpbGVudCwgZXZlbiB0aG91Z2ggaXQgdGFrZXMgbm90aWNlYWJsZSBhbW91bnQgb2YgdGltZSBpbiBhCisgICBtZWFuaW5nZnVsbHkgbGFyZ2UgcmVwb3NpdG9yeS4gIFRoZSB1c2VycyB3aWxsIG5vdyBzZWUgcHJvZ3Jlc3MKKyAgIG91dHB1dC4KKworICogVGhlIG1pbmltdW0gdmVyc2lvbiBvZiBXaW5kb3dzIHN1cHBvcnRlZCBieSBXaW5kb3dzIHBvcnQgb2YgR2l0IGlzCisgICBub3cgc2V0IHRvIFZpc3RhLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRvIGNvbXBsZXRlIGEgaGFuZGZ1bCBvZgorICAgb3B0aW9ucyAiZ2l0IHN0YXNoIGxpc3QiIGNvbW1hbmQgdGFrZXMuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdGhhdCAiZ2l0IGZldGNoCisgICAtLW11bHRpcGxlIiBvbmx5IHRha2VzIHJlbW90ZSBuYW1lcyBhcyBhcmd1bWVudHMgYW5kIG5vIHJlZnNwZWNzLgorCisgKiAiZ2l0IHN0YXR1cyIgbGVhcm5zIHRvIHNob3cgcHJvZ3Jlc3MgYmFyIHdoZW4gcmVmcmVzaGluZyB0aGUgaW5kZXgKKyAgIHRha2VzIGEgbG9uZyB0aW1lLgorICAgKG1lcmdlIGFlOWFmMTIyODcgbmQvc3RhdHVzLXJlZnJlc2gtcHJvZ3Jlc3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGhlbHAgLWEiIGFuZCAiZ2l0IGhlbHAgLWF2IiBnaXZlIGRpZmZlcmVudCBwaWVjZXMgb2YKKyAgIGluZm9ybWF0aW9uLCBhbmQgZ2VuZXJhbGx5IHRoZSAidmVyYm9zZSIgdmVyc2lvbiBpcyBtb3JlIGZyaWVuZGx5CisgICB0byB0aGUgbmV3IHVzZXJzLiAgImdpdCBoZWxwIC1hIiBieSBkZWZhdWx0IG5vdyB1c2VzIHRoZSBtb3JlCisgICB2ZXJib3NlIG91dHB1dCAod2l0aCAiLS1uby12ZXJib3NlIiwgeW91IGNhbiBnbyBiYWNrIHRvIHRoZQorICAgb3JpZ2luYWwpLiAgQWxzbyAiZ2l0IGhlbHAgLWF2IiBub3cgbGlzdHMgYWxpYXNlcyBhbmQgZXh0ZXJuYWwKKyAgIGNvbW1hbmRzLCB3aGljaCBpdCBkaWQgbm90IHVzZWQgdG8uCisKKyAqIFVubGlrZSAiZ3JlcCIsICJnaXQgZ3JlcCIgYnkgZGVmYXVsdCByZWN1cnNlcyB0byB0aGUgd2hvbGUgdHJlZS4KKyAgIFRoZSBjb21tYW5kIGxlYXJuZWQgImdpdCBncmVwIC0tcmVjdXJzaXZlIiBvcHRpb24sIHNvIHRoYXQgImdpdAorICAgZ3JlcCAtLW5vLXJlY3Vyc2l2ZSIgY2FuIHNlcnZlIGFzIGEgc3lub255bSB0byBzZXR0aW5nIHRoZQorICAgbWF4LWRlcHRoIHRvIDAuCisKKyAqIFdoZW4gcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3MgaXRzIG9iamVjdHMgZnJvbSBhbgorICAgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSwgImdpdCByZWNlaXZlLXBhY2siIHRoYXQgcmVzcG9uZHMgdG8gdGhlCisgICBwdXNoIHJlcXVlc3Qgb24gdGhlIG90aGVyIHNpZGUgbGlzdHMgdGhlIHRpcHMgb2YgcmVmcyBpbiB0aGUKKyAgIGFsdGVybmF0ZSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBvYmplY3RzIHRyYW5zZmVycmVkLiAgVGhpcworICAgc29tZXRpbWVzIGlzIGRldHJpbWVudGFsIHdoZW4gdGhlIG51bWJlciBvZiByZWZzIGluIHRoZSBhbHRlcm5hdGUKKyAgIGlzIGFic3VyZGx5IGxhcmdlLCBpbiB3aGljaCBjYXNlIHRoZSBiYW5kd2lkdGggc2F2ZWQgaW4gcG90ZW50aWFsbHkKKyAgIGZld2VyIG9iamVjdHMgdHJhbnNmZXJyZWQgaXMgd2FzdGVkIGluIGV4Y2Vzc2l2ZWx5IGxhcmdlIHJlZgorICAgYWR2ZXJ0aXNlbWVudC4gIFRoZSBhbHRlcm5hdGUgcmVmcyB0aGF0IGFyZSBhZHZlcnRpc2VkIGFyZSBub3cKKyAgIGNvbmZpZ3VyYWJsZSB3aXRoIGEgcGFpciBvZiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworICogImdpdCBjbWQgLS1oZWxwIiB3aGVuICJjbWQiIGlzIGFsaWFzZWQgdXNlZCB0byBvbmx5IHNheSAiY21kIGlzCisgICBhbGlhc2VkIHRvIC4uLiIuICBOb3cgaXQgc2hvd3MgdGhhdCB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisgICBhbmQgcnVucyAiZ2l0ICRjbWQgLS1oZWxwIiB3aGVyZSAkY21kIGlzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZQorICAgYWxpYXMgZXhwYW5zaW9uLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiAiZ2l0IGdjIiBoYXMgYmVlbiB1cGRhdGVkIHRvIG1lbnRpb24gdGhhdCBpdAorICAgaXMgbm8gbG9uZ2VyIGxpbWl0ZWQgdG8gInBydW5pbmcgYXdheSBjcnVmdCIgYnV0IGFsc28gdXBkYXRlcworICAgYW5jaWxsYXJ5IGZpbGVzIGxpa2UgY29tbWl0LWdyYXBoIGFzIGEgcGFydCBvZiByZXBvc2l0b3J5CisgICBvcHRpbWl6YXRpb24uCisKKyAqICJnaXQgcDQgdW5zaGVsdmUiIGltcHJvdmVtZW50cy4KKworICogVGhlIGxvZ2ljIHRvIHNlbGVjdCB0aGUgZGVmYXVsdCB1c2VyIG5hbWUgYW5kIGUtbWFpbCBvbiBXaW5kb3dzIGhhcworICAgYmVlbiBpbXByb3ZlZC4KKyAgIChtZXJnZSA1MDFhZmNiOGIwIGpzL21pbmd3LWRlZmF1bHQtaWRlbnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgInJldi1saXN0IC0tZmlsdGVyIiBmZWF0dXJlIGxlYXJuZWQgdG8gZXhjbHVkZSBhbGwgdHJlZXMgdmlhCisgICAidHJlZTowIiBmaWx0ZXIuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byBncmFiIGFkZHJlc3MtbG9va2luZyBzdHJpbmcgb24gYW55CisgICB0cmFpbGVyIHdob3NlIG5hbWUgZW5kcyB3aXRoICItYnkiOyAtLXN1cHByZXNzLWNjPW1pc2MtYnkgb24gdGhlCisgICBjb21tYW5kIGxpbmUsIG9yIHNldHRpbmcgc2VuZGVtYWlsLnN1cHByZXNzY2MgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgdG8gIm1pc2MtYnkiLCBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3VyLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCB0byB0YWtlIHRoZSAiLS1bbm8tXWd1aSIgb3B0aW9uLCBqdXN0IGxpa2UKKyAgICJnaXQgZGlmZnRvb2wiIGRvZXMuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkIGEgbmV3IGluc24sICdicmVhaycsIHRoYXQgdGhlIHVzZXIgY2FuCisgICBpbnNlcnQgaW4gdGhlIHRvLWRvIGxpc3QuICBVcG9uIGhpdHRpbmcgaXQsIHRoZSBjb21tYW5kIHJldHVybnMKKyAgIGNvbnRyb2wgYmFjayB0byB0aGUgdXNlci4KKworICogTmV3ICItLXByZXR0eT1mb3JtYXQ6IiBwbGFjZWhvbGRlcnMgJUdGIGFuZCAlR1AgdGhhdCBzaG93IHRoZSBHUEcKKyAgIGtleSBmaW5nZXJwcmludHMgaGF2ZSBiZWVuIGludmVudGVkLgorCisgKiBPbiBwbGF0Zm9ybXMgd2l0aCByZWNlbnQgY1VSTCBsaWJyYXJ5LCBodHRwLnNzbEJhY2tlbmQgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gY2hvb3NlIGEgZGlmZmVyZW50IFNTTCBiYWNrZW5kIGF0IHJ1bnRpbWUuCisgICBUaGUgV2luZG93cyBwb3J0IHVzZXMgdGhpcyBtZWNoYW5pc20gdG8gc3dpdGNoIGJldHdlZW4gT3BlblNTTCBhbmQKKyAgIFNlY3VyZSBDaGFubmVsIHdoaWxlIHRhbGtpbmcgb3ZlciB0aGUgSFRUUFMgcHJvdG9jb2wuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byBkaXNhYmxlIFNNVFAgYXV0aGVudGljYXRpb24gdmlhIHRoZQorICAgIi0tc210cC1hdXRoPW5vbmUiIG9wdGlvbiwgZXZlbiB3aGVuIHRoZSBzbXRwIHVzZXJuYW1lIGlzIGdpdmVuCisgICAod2hpY2ggdHVybnMgdGhlIGF1dGhlbnRpY2F0aW9uIG9uIGJ5IGRlZmF1bHQpLgorCisgKiBBIGZvdXJ0aCBjbGFzcyBvZiBjb25maWd1cmF0aW9uIGZpbGVzIChpbiBhZGRpdGlvbiB0byB0aGUKKyAgIHRyYWRpdGlvbmFsICJzeXN0ZW0gd2lkZSIsICJwZXIgdXNlciBpbiB0aGUgJEhPTUUgZGlyZWN0b3J5IiBhbmQKKyAgICJwZXIgcmVwb3NpdG9yeSBpbiB0aGUgJEdJVF9ESVIvY29uZmlnIikgaGFzIGJlZW4gaW50cm9kdWNlZCBzbworICAgdGhhdCBkaWZmZXJlbnQgd29ya3RyZWVzIHRoYXQgc2hhcmUgdGhlIHNhbWUgcmVwb3NpdG9yeSAoaGVuY2UgdGhlCisgICBzYW1lICRHSVRfRElSL2NvbmZpZyBmaWxlKSBjYW4gdXNlIGRpZmZlcmVudCBjdXN0b21pemF0aW9uLgorCisgKiBBIHBhdHRlcm4gd2l0aCAnKionIHRoYXQgZG9lcyBub3QgaGF2ZSBhIHNsYXNoIG9uIGVpdGhlciBzaWRlIHVzZWQKKyAgIHRvIGJlIGFuIGludmFsaWQgb25lLCBidXQgdGhlIGNvZGUgbm93IHRyZWF0cyBzdWNoIGRvdWJsZS1hc3Rlcmlza3MKKyAgIHRoZSBzYW1lIHdheSBhcyB0d28gbm9ybWFsIGFzdGVyaXNrcyB0aGF0IGhhcHBlbiB0byBiZSBhZGphY2VudCB0bworICAgZWFjaCBvdGhlci4KKyAgIChtZXJnZSBlNWJiZTA5ZTg4IG5kL3dpbGRtYXRjaC1kb3VibGUtYXN0ZXJpc2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgIi0tbm8tcGF0Y2giIG9wdGlvbiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbAorICAgb3ZlcnZpZXcgd2l0aG91dCB0aGUgYWN0dWFsIGxpbmUtYnktbGluZSBwYXRjaCBkaWZmZXJlbmNlIHNob3duLCBvZgorICAgdGhlICJyYW5nZS1kaWZmIiBjb21tYW5kIHdhcyBlYXJsaWVyIGJyb2tlbiwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIHJlY2VudGx5IG1lcmdlZCAicmViYXNlIGluIEMiIGhhcyBhbiBlc2NhcGUgaGF0Y2ggdG8gdXNlIHRoZQorICAgc2NyaXB0ZWQgdmVyc2lvbiB3aGVuIG5lY2Vzc2FyeSwgYnV0IGl0IGhhc24ndCBiZWVuIGRvY3VtZW50ZWQsCisgICB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogRGV2ZWxvcGVyIGJ1aWxkcyBub3cgdXNlIC1XdW51c2VkLWZ1bmN0aW9uIGNvbXBpbGF0aW9uIG9wdGlvbi4KKworICogT25lIG9mIG91ciBDSSB0ZXN0cyB0byBydW4gd2l0aCAidW51c3VhbC9leHBlcmltZW50YWwvcmFuZG9tIgorICAgc2V0dGluZ3Mgbm93IGFsc28gdXNlcyBjb21taXQtZ3JhcGggYW5kIG1pZHguCisKKyAqIFdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IHBhY2tmaWxlcyBpbiBhIHJlcG9zaXRvcnkgKHdoaWNoIGlzIG5vdAorICAgcmVjb21tZW5kZWQpLCBsb29raW5nIHVwIGFuIG9iamVjdCBpbiB0aGVzZSB3b3VsZCByZXF1aXJlCisgICBjb25zdWx0aW5nIG1hbnkgcGFjayAuaWR4IGZpbGVzOyBhIG5ldyBtZWNoYW5pc20gdG8gaGF2ZSBhIHNpbmdsZQorICAgZmlsZSB0aGF0IGNvbnNvbGlkYXRlcyBhbGwgb2YgdGhlc2UgLmlkeCBmaWxlcyBpcyBpbnRyb2R1Y2VkLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGlzIGdldHRpbmcgcmV3cml0dGVuIHBpZWNlLWJ5LXBpZWNlIGludG8gQy4KKworICogVGhlIGNvZGUgZm9yIGNvbXB1dGluZyBoaXN0b3J5IHJlYWNoYWJpbGl0eSBoYXMgYmVlbiBzaHVmZmxlZCwKKyAgIG9idGFpbmVkIGEgYnVuY2ggb2YgbmV3IHRlc3RzIHRvIGNvdmVyIHRoZW0sIGFuZCB0aGVuIGJlaW5nCisgICBpbXByb3ZlZC4KKworICogVGhlIHVucGFja190cmVlcygpIEFQSSB1c2VkIGluIGNoZWNraW5nIG91dCBhIGJyYW5jaCBhbmQgbWVyZ2luZworICAgd2Fsa3Mgb25lIG9yIG1vcmUgdHJlZXMgYWxvbmcgd2l0aCB0aGUgaW5kZXguICBXaGVuIHRoZSBjYWNoZS10cmVlCisgICBpbiB0aGUgaW5kZXggdGVsbHMgdXMgdGhhdCB3ZSBhcmUgd2Fsa2luZyBhIHRyZWUgd2hvc2UgZmxhdHRlbmVkCisgICBjb250ZW50cyBpcyBrbm93biAoaS5lLiBtYXRjaGVzIGEgc3BhbiBpbiB0aGUgaW5kZXgpLCBhcyBsaW5lYXJseQorICAgc2Nhbm5pbmcgYSBzcGFuIGluIHRoZSBpbmRleCBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gaGF2aW5nIHRvCisgICBvcGVuIHRyZWUgb2JqZWN0cyByZWN1cnNpdmVseSBhbmQgbGlzdGluZyB0aGVpciBlbnRyaWVzLCB0aGUgd2FsaworICAgY2FuIGJlIG9wdGltaXplZCwgd2hpY2ggaGFzIGJlZW4gZG9uZS4KKworICogV2hlbiBjcmVhdGluZyBhIHRoaW4gcGFjaywgd2hpY2ggYWxsb3dzIG9iamVjdHMgdG8gYmUgbWFkZSBpbnRvIGEKKyAgIGRlbHRhIGFnYWluc3QgYW5vdGhlciBvYmplY3QgdGhhdCBpcyBub3QgaW4gdGhlIHJlc3VsdGluZyBwYWNrIGJ1dAorICAgaXMga25vd24gdG8gYmUgcHJlc2VudCBvbiB0aGUgcmVjZWl2aW5nIGVuZCwgdGhlIGNvZGUgbGVhcm5lZCB0bworICAgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHJlYWNoYWJpbGl0eSBiaXRtYXA7IHRoaXMgYWxsb3dzIHRoZSBzZXJ2ZXIKKyAgIHRvIHNlbmQgYSBkZWx0YSBhZ2FpbnN0IGEgYmFzZSBiZXlvbmQgdGhlICJib3VuZGFyeSIgY29tbWl0LgorCisgKiBzcGF0Y2ggdHJhbnNmb3JtYXRpb24gdG8gcmVwbGFjZSBib29sZWFuIHVzZXMgb2YgIWhhc2hjbXAoKSB0bworICAgbmV3bHkgaW50cm9kdWNlZCBvaWRlcSgpIGlzIGFkZGVkLCBhbmQgYXBwbGllZCwgdG8gcmVnYWluCisgICBwZXJmb3JtYW5jZSBsb3N0IGR1ZSB0byBzdXBwb3J0IG9mIG11bHRpcGxlIGhhc2ggYWxnb3JpdGhtcy4KKworICogRml4IGEgYnVnIGluIHdoaWNoIHRoZSBzYW1lIHBhdGggY291bGQgYmUgcmVnaXN0ZXJlZCB1bmRlciBtdWx0aXBsZQorICAgd29ya3RyZWUgZW50cmllcyBpZiB0aGUgcGF0aCB3YXMgbWlzc2luZyAoZm9yIGluc3RhbmNlLCB3YXMgcmVtb3ZlZAorICAgbWFudWFsbHkpLiAgQWxzbywgYXMgYSBjb252ZW5pZW5jZSwgZXhwYW5kIHRoZSBudW1iZXIgb2YgY2FzZXMgaW4KKyAgIHdoaWNoIC0tZm9yY2UgaXMgYXBwbGljYWJsZS4KKworICogU3BsaXQgRG9jdW1lbnRhdGlvbi9jb25maWcudHh0IGZvciBlYXNpZXIgbWFpbnRlbmFuY2UuCisgICAobWVyZ2UgNjAxNDM2M2YwYiBuZC9jb25maWctc3BsaXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUZXN0IGhlbHBlciBiaW5hcmllcyBjbGVhbi11cC4KKyAgIChtZXJnZSBjOWExZjQxNjFmIG5kL3Rlc3QtdG9vbCBsYXRlciB0byBtYWludCkuCisKKyAqIFZhcmlvdXMgdGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3dhcCB0aGUKKyAgIGhhc2ggZnVuY3Rpb24gdXNlZCBmb3Igb2JqZWN0IGlkZW50aWZpY2F0aW9uLgorICAgKG1lcmdlIGFlMGM4OWQ0MWIgYmMvaGFzaC1pbmRlcGVuZGVudC10ZXN0cyBsYXRlciB0byBtYWludCkuCisKKyAqIFVwZGF0ZSBmc2NrLnNraXBMaXN0IGltcGxlbWVudGF0aW9uIGFuZCBkb2N1bWVudGF0aW9uLgorICAgKG1lcmdlIDM3MWE2NTUwNzQgYWIvZnNjay1za2lwbGlzdCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGFsaWFzIHRoYXQgZXhwYW5kcyB0byBhbm90aGVyIGFsaWFzIGhhcyBzbyBmYXIgYmVlbiBmb3JiaWRkZW4sCisgICBidXQgbm93IGl0IGlzIGFsbG93ZWQgdG8gY3JlYXRlIHN1Y2ggYW4gYWxpYXMuCisKKyAqIFZhcmlvdXMgdGVzdCBzY3JpcHRzIGhhdmUgYmVlbiB1cGRhdGVkIGZvciBzdHlsZSBhbmQgYWxzbyBjb3JyZWN0CisgICBoYW5kbGluZyBvZiBleGl0IHN0YXR1cyBvZiB2YXJpb3VzIGNvbW1hbmRzLgorCisgKiAiZ2MgLS1hdXRvIiBlbmRlZCB1cCBjYWxsaW5nIGV4aXQoLTEpIHVwb24gZXJyb3IsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQgdG8gdXNlIGV4aXQoMSkuICBBbHNvIHRoZSBlcnJvciByZXBvcnRpbmcgYmVoYXZpb3VyIHdoZW4KKyAgIGRhZW1vbml6ZWQgaGFzIGJlZW4gdXBkYXRlZCB0byBleGl0IHdpdGggemVybyBzdGF0dXMgd2hlbiBzdG9wcGluZworICAgZHVlIHRvIGEgcHJldmlvdXNseSBkaXNjb3ZlcmVkIGVycm9yICh3aGljaCBpbXBsaWVzIHRoZXJlIGlzIG5vCisgICBwb2ludCBydW5uaW5nIGdjIHRvIGltcHJvdmUgdGhlIHNpdHVhdGlvbik7IHdlIHVzZWQgdG8gZXhpdCB3aXRoCisgICBmYWlsdXJlIGluIHN1Y2ggYSBjYXNlLgorCisgKiBWYXJpb3VzIGNvZGVwYXRocyBpbiB0aGUgY29yZS1pc2ggcGFydCBsZWFybmVkIHRvIHdvcmsgb24gYW4KKyAgIGFyYml0cmFyeSBpbi1jb3JlIGluZGV4IHN0cnVjdHVyZSwgbm90IG5lY2Vzc2FyaWx5IHRoZSBkZWZhdWx0CisgICBpbnN0YW5jZSAidGhlX2luZGV4Ii4KKyAgIChtZXJnZSBiM2M3ZWVmOWIwIG5kL3RoZS1pbmRleCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAgaW4gdGhlIGludGVybmFsIG1hY2hpbmVyeSB1c2VkIGJ5ICJnaXQgc3RhdHVzIiBhbmQKKyAgICJnaXQgY29tbWl0IC0tZHJ5LXJ1biIuCisgICAobWVyZ2UgNzNiYTVkNzhiNCBzcy93dC1zdGF0dXMtY29tbWl0dGFibGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgdGhlIHJ1bnRpbWUgb3B0aW9ucyBvZiBHaXQKKyAgIHVzZWQgZHVyaW5nIHRlc3RzIGFyZSBnZXR0aW5nIHJlbmFtZWQgZm9yIGNvbnNpc3RlbmN5LgorICAgKG1lcmdlIDQyMzFkMWJhOTkgYnAvcmVuYW1lLXRlc3QtZW52LXZhciBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcGFpciBvZiBuZXcgZXh0ZW5zaW9ucyB0byB0aGUgaW5kZXggZmlsZSBoYXZlIGJlZW4gaW50cm9kdWNlZC4KKyAgIFRoZXkgYWxsb3cgdGhlIGluZGV4IGZpbGUgdG8gYmUgcmVhZCBpbiBwYXJhbGxlbCBmb3IgcGVyZm9ybWFuY2UuCisKKyAqIFRoZSBvaWRzZXQgQVBJIHdhcyBidWlsdCBvbiB0b3Agb2YgdGhlIG9pZG1hcCBBUEkgd2hpY2ggaW4gdHVybiBpcworICAgb24gdGhlIGhhc2htYXAgQVBJLiAgUmVwbGFjZSB0aGUgaW1wbGVtZW50YXRpb24gdG8gYnVpbGQgb24gdG9wIG9mCisgICB0aGUga2hhc2ggQVBJIGFuZCBnYWluIHBlcmZvcm1hbmNlLgorCisgKiBPdmVyIHNvbWUgdHJhbnNwb3J0cywgZmV0Y2hpbmcgb2JqZWN0cyB3aXRoIGFuIGV4YWN0IGNvbW1pdCBvYmplY3QKKyAgIG5hbWUgY2FuIGJlIGRvbmUgd2l0aG91dCBmaXJzdCBzZWVpbmcgdGhlIHJlZiBhZHZlcnRpc2VtZW50cy4gIFRoZQorICAgY29kZSBoYXMgYmVlbiBvcHRpbWl6ZWQgdG8gZXhwbG9pdCB0aGlzLgorCisgKiBJbiBhIHBhcnRpYWwgY2xvbmUgdGhhdCB3aWxsIGxhemlseSBiZSBoeWRyYXRlZCBmcm9tIHRoZQorICAgb3JpZ2luYXRpbmcgcmVwb3NpdG9yeSwgd2UgZ2VuZXJhbGx5IHdhbnQgdG8gYXZvaWQgImRvZXMgdGhpcworICAgb2JqZWN0IGV4aXN0IChsb2NhbGx5KT8iIG9uIG9iamVjdHMgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgb21pdHRlZAorICAgd2hlbiB3ZSBjcmVhdGVkIHRoZSBjbG9uZS4gIFRoZSBjYWNoZS10cmVlIGNvZGVwYXRoICh3aGljaCBpcyB1c2VkCisgICB0byB3cml0ZSBhIHRyZWUgb2JqZWN0IG91dCBvZiB0aGUgaW5kZXgpIGhvd2V2ZXIgaW5zaXN0ZWQgdGhhdCB0aGUKKyAgIG9iamVjdCBleGlzdHMsIGV2ZW4gZm9yIHBhdGhzIHRoYXQgYXJlIG91dHNpZGUgb2YgdGhlIHBhcnRpYWwKKyAgIGNoZWNrb3V0IGFyZWEuICBUaGUgY29kZSBoYXMgYmVlbiB1cGRhdGVkIHRvIGF2b2lkIHN1Y2ggYSBjaGVjay4KKworICogVG8gaGVscCBkZXZlbG9wZXJzLCBhbiBFZGl0b3JDb25maWcgZmlsZSB0aGF0IGF0dGVtcHRzIHRvIGZvbGxvdworICAgdGhlIHByb2plY3QgY29udmVudGlvbiBoYXMgYmVlbiBhZGRlZC4KKyAgIChtZXJnZSBiNTQ4ZDY5OGEwIGJjL2VkaXRvcmNvbmZpZyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSByZXN1bHQgb2YgY292ZXJhZ2UgdGVzdCBjYW4gYmUgY29tYmluZWQgd2l0aCAiZ2l0IGJsYW1lIiB0bworICAgY2hlY2sgdGhlIHRlc3QgY292ZXJhZ2Ugb2YgY29kZSBpbnRyb2R1Y2VkIHJlY2VudGx5IHdpdGggYSBuZXcKKyAgICdjb3ZlcmFnZS1kaWZmJyB0b29sIChpbiBjb250cmliLykuCisgICAobWVyZ2UgNzgzZmFlZGQ2NSBkcy9jb3ZlcmFnZS1kaWZmIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gZXhwZXJpbWVudCB0byBmdXp6IHRlc3QgYSBmZXcgYXJlYXMsIGhvcGVmdWxseSB3ZSBjYW4gZ2FpbiBtb3JlCisgICBjb3ZlcmFnZSB0byB2YXJpb3VzIGFyZWFzLgorCisgKiBNb3JlIGNvZGVwYXRocyBhcmUgbW92aW5nIGF3YXkgZnJvbSBoYXJkY29kZWQgaGFzaCBzaXplcy4KKworICogVGhlIHdheSB0aGUgV2luZG93cyBwb3J0IGZpZ3VyZXMgb3V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBoYXMgYmVlbgorICAgaW1wcm92ZWQuCisKKyAqIFRoZSB3YXkgRExMcyBhcmUgbG9hZGVkIG9uIHRoZSBXaW5kb3dzIHBvcnQgaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAqIFNvbWUgdGVzdHMgaGF2ZSBiZWVuIHJlb3JnYW5pemVkIGFuZCByZW5hbWVkOyAibHMgdC8iIG5vdyBnaXZlcyBhCisgICBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hhdCBpcyB0ZXN0ZWQgZm9yIHRoZXNlIHNjcmlwdHMgdGhhbiBiZWZvcmUuCisKKyAqICJnaXQgcmViYXNlIiBhbmQgImdpdCByZWJhc2UgLWkiIGhhdmUgYmVlbiByZWltcGxlbWVudGVkIGluIEMuCisKKyAqIFdpbmRvd3MgcG9ydCBsZWFybmVkIHRvIHVzZSBuYW5vLXNlY29uZCByZXNvbHV0aW9uIGZpbGUgdGltZXN0YW1wcy4KKworICogVGhlIG92ZXJseSBsYXJnZSBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQgZmlsZSBoYXZlIGJlZW4gc3BsaXQgaW50bworICAgbWlsbGlvbiBsaXR0bGUgcGllY2VzLiAgVGhpcyBwb3RlbnRpYWxseSBhbGxvd3MgZWFjaCBpbmRpdmlkdWFsIHBpZWNlCisgICB0byBiZSBpbmNsdWRlZCBpbnRvIHRoZSBtYW51YWwgcGFnZSBvZiB0aGUgY29tbWFuZCBpdCBhZmZlY3RzIG1vcmUgZWFzaWx5LgorCisgKiBSZXBsYWNlIHRocmVlIHN0cmluZy1saXN0IGluc3RhbmNlcyB1c2VkIGFzIGxvb2stdXAgdGFibGVzIGluICJnaXQKKyAgIGZldGNoIiB3aXRoIGhhc2htYXBzLgorCisgKiBVbmlmeSBjb2RlIHRvIHJlYWQgdGhlIGF1dGhvci1zY3JpcHQgdXNlZCBpbiAiZ2l0IGFtIiBhbmQgdGhlCisgICBjb21tYW5kcyB0aGF0IHVzZSB0aGUgc2VxdWVuY2VyIG1hY2hpbmVyeSwgZS5nLiAiZ2l0IHJlYmFzZSAtaSIuCisKKyAqIEluIHByZXBhcmF0aW9uIHRvIHRoZSBkYXkgd2hlbiB3ZSBjYW4gZGVwcmVjYXRlIGFuZCByZW1vdmUgdGhlCisgICAicmViYXNlIC1wIiwgbWFrZSBzdXJlIHdlIGNhbiBza2lwIGFuZCBsYXRlciByZW1vdmUgdGVzdHMgZm9yCisgICBpdC4KKworICogVGhlIGhpc3RvcnkgdHJhdmVyc2FsIHVzZWQgdG8gaW1wbGVtZW50IHRoZSB0YWctZm9sbG93aW5nIGhhcyBiZWVuCisgICBvcHRpbWl6ZWQgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyLgorCisgKiBUaGUgaGVscGVyIGZ1bmN0aW9uIHRvIHJlZnJlc2ggdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIGluIHRoZQorICAgaW4tY29yZSBpbmRleCBoYXMgbGVhcm5lZCB0byBwZXJmb3JtIHRoZSBsc3RhdCgpIHBhcnQgb2YgdGhlCisgICBvcGVyYXRpb24gaW4gcGFyYWxsZWwgb24gbXVsdGktY29yZSBwbGF0Zm9ybXMuCisKKyAqIFRoZSBjb2RlIHRvIHRyYXZlcnNlIG9iamVjdHMgZm9yIHJlYWNoYWJpbGl0eSwgdXNlZCB0byBkZWNpZGUgd2hhdAorICAgb2JqZWN0cyBhcmUgdW5yZWZlcmVuY2VkIGFuZCBleHBlbmRhYmxlLCBoYXZlIGJlZW4gdGF1Z2h0IHRvIGFsc28KKyAgIGNvbnNpZGVyIHBlci13b3JrdHJlZSByZWZzIG9mIG90aGVyIHdvcmt0cmVlcyBhcyBzdGFydGluZyBwb2ludHMgdG8KKyAgIHByZXZlbnQgZGF0YSBsb3NzLgorCisgKiAiZ2l0IGFkZCIgbmVlZHMgdG8gaW50ZXJuYWxseSBydW4gImRpZmYtZmlsZXMiIGVxdWl2YWxlbnQsIGFuZCB0aGUKKyAgIGNvZGVwYXRoIGxlYXJuZWQgdGhlIHNhbWUgb3B0aW1pemF0aW9uIGFzICJkaWZmLWZpbGVzIiBoYXMgdG8gcnVuCisgICBsc3RhdCgyKSBpbiBwYXJhbGxlbCB0byBmaW5kIHdoaWNoIHBhdGhzIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZQorICAgd29ya2luZyB0cmVlLgorCisgKiBUaGUgcHJvY2VkdXJlIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzIGJlZm9yZSB0ZXN0aW5nIGF0IFRyYXZpcyBDSQorICAgaXMgZ2V0dGluZyByZXZhbXBlZCBmb3IgYm90aCBzaW1wbGljaXR5IGFuZCBmbGV4aWJpbGl0eSwgdGFraW5nCisgICBhZHZhbnRhZ2Ugb2YgdGhlIHJlY2VudCBtb3ZlIHRvIHRoZSB2bS1iYXNlZCBlbnZpcm9ubWVudC4KKworICogVGhlIHN1cHBvcnQgZm9yIGZvcm1hdC1wYXRjaCAoYW5kIHNlbmQtZW1haWwpIGJ5IHRoZSBjb21tYW5kLWxpbmUKKyAgIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gc2ltcGxpZmllZCBhIGJpdC4KKworICogVGhlIHJldmlzaW9uIHdhbGtlciBtYWNoaW5lcnkgbGVhcm5lZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUKKyAgIGNvbW1pdCBnZW5lcmF0aW9uIG51bWJlcnMgc3RvcmVkIGluIHRoZSBjb21taXQtZ3JhcGggZmlsZS4KKworICogVGhlIGNvZGViYXNlIGhhcyBiZWVuIGNsZWFuZWQgdXAgdG8gcmVkdWNlICIjaWZuZGVmIE5PX1BUSFJFQURTIi4KKworICogVGhlIHdheSAtbGN1cmwgbGlicmFyeSBnZXRzIGxpbmtlZCBoYXMgYmVlbiBzaW1wbGlmaWVkIGJ5IHRha2luZworICAgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgd2UgY2FuIGp1c3QgYXNrIGN1cmwtY29uZmlnIGNvbW1hbmQgaG93LgorCisgKiBWYXJpb3VzIGZ1bmN0aW9ucyBoYXZlIGJlZW4gYXVkaXRlZCBmb3IgIi1XdW51c2VkLXBhcmFtZXRlciIgd2FybmluZ3MKKyAgIGFuZCBidWdzIGluIHRoZW0gZ290IGZpeGVkLgorCisgKiBBIHNhbml0eSBjaGVjayBmb3Igc3RhcnQtdXAgc2VxdWVuY2UgaGFzIGJlZW4gYWRkZWQgaW4gdGhlIGNvbmZpZworICAgQVBJIGNvZGVwYXRoLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIHRvIGxpbmsgZm9yIGZ1enppbmcgdGVzdCBoYXMgYmVlbiBtYWRlCisgICBjdXN0b21pemFibGUgd2l0aCBhIG5ldyBNYWtlZmlsZSB2YXJpYWJsZS4KKworICogVGhlIHdheSAiZ2l0IHJlYmFzZSIgcGFyc2VzIGFuZCBmb3J3YXJkcyB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyAgIG1lYW50IGZvciB1bmRlcmx5aW5nICJnaXQgYW0iIGhhcyBiZWVuIHJldmFtcGVkLCB3aGljaCBmaXhlZCBmb3IKKyAgIG9wdGlvbnMgd2l0aCBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBub3QgcGFzc2VkIGNvcnJlY3RseS4KKworICogT3VyIHRlc3RpbmcgZnJhbWV3b3JrIHVzZXMgYSBzcGVjaWFsIGkxOG4gInBvaXNvbmVkIGxvY2FsaXphdGlvbiIKKyAgIGZlYXR1cmUgdG8gZmluZCBtZXNzYWdlcyB0aGF0IG91Z2h0IHRvIHN0YXkgY29uc3RhbnQgYnV0IGFyZQorICAgaW5jb3JyZWN0bHkgbWFya2VkIHRvIGJlIHRyYW5zbGF0ZWQuICBUaGlzIGZlYXR1cmUgaGFzIGJlZW4gbWFkZQorICAgaW50byBhIHJ1bnRpbWUgb3B0aW9uIChpdCB1c2VkIHRvIGJlIGEgY29tcGlsZS10aW1lIG9wdGlvbikuCisKKyAqICJnaXQgcHVzaCIgdXNlZCB0byBjaGVjayBhbWJpZ3VpdGllcyBiZXR3ZWVuIG9iamVjdC1uYW1lcyBhbmQKKyAgIHJlZm5hbWVzIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGxpc3Qgb2YgcmVmcycgb2xkIGFuZCBuZXcgdmFsdWVzLAorICAgd2hpY2ggd2FzIHVubmVjZXNzYXJ5IChhcyBpdCBrbmV3IHRoYXQgaXQgaXMgZmVlZGluZyByYXcgb2JqZWN0CisgICBuYW1lcykuICBUaGlzIGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCisKKyAqIFRoZSB4Y3VybF9vZmZfdCgpIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VkIHRvIGNhc3Qgc2l6ZV90IHRvCisgICBjdXJsX29mZl90LCBidXQgc29tZSBjb21waWxlcnMgZ2F2ZSB3YXJuaW5ncyBhZ2FpbnN0IHRoZSBjb2RlIHRvCisgICBlbnN1cmUgdGhlIGNhc3RpbmcgaXMgZG9uZSB3aXRob3V0IHdyYXBhcm91bmQsIHdoZW4gc2l6ZV90IGlzCisgICBuYXJyb3dlciB0aGFuIGN1cmxfb2ZmX3QuICBUaGlzIHdhcm5pbmcgaGFzIGJlZW4gc3F1ZWxjaGVkLgorCisgKiBDb2RlIHByZXBhcmF0aW9uIHRvIHJlcGxhY2UgdWxvbmcgdmFycyB3aXRoIHNpemVfdCB2YXJzIHdoZXJlCisgICBhcHByb3ByaWF0ZSBjb250aW51ZXMuCisKKyAqIFRoZSAidGVzdCBpbnN0YWxsZWQgR2l0IiBtb2RlIG9mIG91ciB0ZXN0IHN1aXRlIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIHdvcmsgYmV0dGVyLgorCisgKiBBIGNvZGluZyBjb252ZW50aW9uIGFyb3VuZCB0aGUgQ29jY2luZWxsZSBzZW1hbnRpYyBwYXRjaGVzIHRvIGhhdmUKKyAgIHR3byBjbGFzc2VzIHRvIGVhc2UgY29kZSBtaWdyYXRpb24gcHJvY2VzcyBoYXMgYmVlbiBwcm9wb3NlZCBhbmQKKyAgIGl0cyBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBNYWtlZmlsZS4KKworICogVGhlICJjb250YWluZXIiIG1vZGUgb2YgVHJhdmlzQ0kgaXMgZ29pbmcgYXdheS4gIE91ciAudHJhdmlzLnltbAorICAgZmlsZSBpcyBnZXR0aW5nIHByZXBhcmVkIGZvciB0aGUgdHJhbnNpdGlvbi4KKyAgIChtZXJnZSAzMmVlMzg0YmU4IHNzL3RyYXZpcy1jaS1mb3JjZS12bS1tb2RlIGxhdGVyIHRvIG1haW50KS4KKworICogT3VyIHRlc3Qgc2NyaXB0cyBjYW4gbm93IHRha2UgdGhlICctVicgb3B0aW9uIGFzIGEgc3lub255bSBmb3IgdGhlCisgICAnLS12ZXJib3NlLWxvZycgb3B0aW9uLgorICAgKG1lcmdlIGE1ZjUyYzZkYWIgc2cvdGVzdC12ZXJib3NlLWxvZyBsYXRlciB0byBtYWludCkuCisKKworRml4ZXMgc2luY2UgdjIuMTkKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiBhbmQgaXRzIHVuZGVybHlpbmcgbWFjaGluZXJ5IGhhZCBhIGJ1Z2d5CisgICBjb2RlIHRoYXQgYXR0ZW1wdGVkIHRvIGlnbm9yZSBwYXRjaCB0ZXh0IGFmdGVyIGNvbW1pdCBsb2cgbWVzc2FnZSwKKyAgIHdoaWNoIHRyaWdnZXJlZCBpbiB2YXJpb3VzIGNvZGVwYXRocyB0aGF0IHdpbGwgYWx3YXlzIGdldCB0aGUgbG9nCisgICBtZXNzYWdlIGFsb25lIGFuZCBuZXZlciBnZXQgc3VjaCBhbiBpbnB1dC4KKyAgIChtZXJnZSA2NmU4M2Q5YjQxIGprL3RyYWlsZXItZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNYWxmb3JtZWQgb3IgY3JhZnRlZCBkYXRhIGluIHBhY2tzdHJlYW0gY2FuIG1ha2Ugb3VyIGNvZGUgYXR0ZW1wdAorICAgdG8gcmVhZCBvciB3cml0ZSBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIGFuZCBhYm9ydCwgaW5zdGVhZCBvZgorICAgcmVwb3J0aW5nIGFuIGVycm9yLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCByZWJhc2UgLWkiIGRpZCBub3QgY2xlYXIgdGhlIHN0YXRlIGZpbGVzIGNvcnJlY3RseSB3aGVuIGEgcnVuCisgICBvZiAic3F1YXNoL2ZpeHVwIiBpcyBhYm9ydGVkIGFuZCB0aGVuIHRoZSB1c2VyIG1hbnVhbGx5IGFtZW5kZWQgdGhlCisgICBjb21taXQgaW5zdGVhZCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDEwZDJmMzU0MzYganMvcmViYXNlLWktYXV0b3NxdWFzaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIGZzbW9uaXRvciBpcyBpbiB1c2UsIGFmdGVyIG9wZXJhdGlvbiBvbiBzdWJtb2R1bGVzIHVwZGF0ZXMKKyAgIC5naXRtb2R1bGVzLCB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBmYWN0IHRoYXQgd2UgZGlkIHNvIGFuZCByZWxpZWQgb24KKyAgIHN0YWxlIGZzbW9uaXRvciBkYXRhLgorICAgKG1lcmdlIDQzZjExODA4MTQgYnAvbXYtc3VibW9kdWxlcy13aXRoLWZzbW9uaXRvciBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBmb3IgYSBsb25nLXN0YW5kaW5nIGJ1ZyB0aGF0IGxlYXZlcyB0aGUgaW5kZXggZmlsZSBjb3JydXB0IHdoZW4KKyAgIGl0IHNocmlua3MgZHVyaW5nIGEgcGFydGlhbCBjb21taXQuCisgICAobWVyZ2UgNmMwMDNkNmZmYiBqay9yZW9wZW4tdGVtcGZpbGUtdHJ1bmNhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGdXJ0aGVyIGZpeCBmb3IgT19BUFBFTkQgZW11bGF0aW9uIG9uIFdpbmRvd3MKKyAgIChtZXJnZSBlZWFmN2RkYWM3IGpzL21pbmd3LW8tYXBwZW5kIGxhdGVyIHRvIG1haW50KS4KKworICogQSBjb3JuZXIgY2FzZSBidWdmaXggaW4gImdpdCByZXJlcmUiIGNvZGUuCisgICAobWVyZ2UgYWQyYmYwZDliNCBlbi9yZXJlcmUtbXVsdGktc3RhZ2UtMS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFkZCAnOihhdHRyOmZvbyknIiBpcyBub3Qgc3VwcG9ydGVkIGFuZCBpcyBzdXBwb3NlZCB0byBiZQorICAgcmVqZWN0ZWQgd2hpbGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIHBhcnNlZCwgYnV0IHdlIGZhaWwKKyAgIHRvIHJlamVjdCBzdWNoIGEgY29tbWFuZCBsaW5lIHVwZnJvbnQuCisgICAobWVyZ2UgODRkOTM4YjczMiBuZC9hdHRyLXBhdGhzcGVjLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCB1cGRhdGUgYnJva2UgdGhlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0gd2hlbiByZWZzIChlLmcuCisgICB0YWdzKSB0aGF0IHBvaW50IGF0IG9iamVjdHMgdGhhdCBhcmUgbm90IGNvbW1pdCB3ZXJlIGludm9sdmVkLAorICAgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgcmViYXNlIiBldGMuIGluIEdpdCAyLjE5IGZhaWxzIHRvIGFib3J0IHdoZW4gZ2l2ZW4gYW4gZW1wdHkKKyAgIGNvbW1pdCBsb2cgbWVzc2FnZSBhcyByZXN1bHQgb2YgZWRpdGluZywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGEzZWM5ZWFmMzggZW4vc2VxdWVuY2VyLWVtcHR5LWVkaXQtcmVzdWx0LWFib3J0cyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIGJhY2tmaWxsIG9iamVjdHMgaW4gbGF6aWx5IGNsb25lZCByZXBvc2l0b3J5IGRpZCBub3QKKyAgIHdvcmsgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZTY4MzAyMDExYyBqdC9sYXp5LW9iamVjdC1mZXRjaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVcGRhdGUgZXJyb3IgbWVzc2FnZXMgZ2l2ZW4gYnkgImdpdCByZW1vdGUiIGFuZCBtYWtlIHRoZW0gY29uc2lzdGVudC4KKyAgIChtZXJnZSA1MDI1NDI1ZGZmIG1zL3JlbW90ZS1lcnJvci1tZXNzYWdlLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgdXBkYXRlLXJlZiIgbGVhcm5lZCB0byBtYWtlIGJvdGggIi0tbm8tZGVyZWYiIGFuZCAiLS1zdGRpbiIKKyAgIHdvcmsgYXQgdGhlIHNhbWUgdGltZS4KKyAgIChtZXJnZSBkMzQ1ZTlmYmU3IGVuL3VwZGF0ZS1yZWYtbm8tZGVyZWYtc3RkaW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnRseSBhZGRlZCAicmFuZ2UtZGlmZiIgaGFkIGEgY29ybmVyLWNhc2UgYnVnIHRvIGNhdXNlIGl0CisgICBzZWdmYXVsdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGU0NjdhOTBjN2EgdGcvcmFuZ2UtZGlmZi1jb3JuZXItY2FzZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcmVjZW50bHkgaW50cm9kdWNlZCBjb21taXQtZ3JhcGggYXV4aWxpYXJ5IGRhdGEgaXMgaW5jb21wYXRpYmxlCisgICB3aXRoIG1lY2hhbmlzbXMgc3VjaCBhcyByZXBsYWNlICYgZ3JhZnRzIHRoYXQgImJyZWFrcyIgaW1tdXRhYmxlCisgICBuYXR1cmUgb2YgdGhlIG9iamVjdCByZWZlcmVuY2UgcmVsYXRpb25zaGlwLiAgRGlzYWJsZSBvcHRpbWl6YXRpb25zCisgICBiYXNlZCBvbiBpdHMgdXNlIChhbmQgdXBkYXRpbmcgZXhpc3RpbmcgY29tbWl0LWdyYXBoKSB3aGVuIHRoZXNlCisgICBpbmNvbXBhdGlibGUgZmVhdHVyZXMgYXJlIGluIHVzZSBpbiB0aGUgcmVwb3NpdG9yeS4KKyAgIChtZXJnZSA4MjlhMzIxNTY5IGRzL2NvbW1pdC1ncmFwaC13aXRoLWdyYWZ0cyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBtYWlsbWFwIGZpbGUgdXBkYXRlLgorICAgKG1lcmdlIDI1NWViMDNlZGYgam4vbWFpbG1hcC11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSBpbiAiZ2l0IHN0YXR1cyIgc29tZXRpbWVzIGhpdCBhbiBhc3NlcnRpb24gZmFpbHVyZS4gIFRoaXMKKyAgIHdhcyBjYXVzZWQgYnkgYSBzdHJ1Y3R1cmUgdGhhdCB3YXMgcmV1c2VkIHdpdGhvdXQgY2xlYW5pbmcgdGhlIGRhdGEKKyAgIHVzZWQgZm9yIHRoZSBmaXJzdCBydW4sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAzZTczY2M2MmMwIGVuL3N0YXR1cy1tdWx0aXBsZS1yZW5hbWVzLXRvLXRoZS1zYW1lLXRhcmdldC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoICRyZXBvICRvYmplY3QiIGluIGEgcGFydGlhbCBjbG9uZSBkaWQgbm90IGNvcnJlY3RseQorICAgZmV0Y2ggdGhlIGFza2VkLWZvciBvYmplY3QgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IGFuIG9iamVjdCBpbgorICAgcHJvbWlzb3IgcGFja2ZpbGUsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBBIGNvcm5lci1jYXNlIGJ1Z2ZpeC4KKyAgIChtZXJnZSBjNWNiYjI3Y2I1IHNtL3Nob3ctc3VwZXJwcm9qZWN0LXdoaWxlLWNvbmZsaWN0ZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBWYXJpb3VzIGZpeGVzIHRvICJkaWZmIC0tY29sb3ItbW92ZWQtd3MiLgorCisgKiBBIHBhcnRpYWwgY2xvbmUgdGhhdCBpcyBjb25maWd1cmVkIHRvIGxhemlseSBmZXRjaCBtaXNzaW5nIG9iamVjdHMKKyAgIHdpbGwgb24tZGVtYW5kIGlzc3VlIGEgImdpdCBmZXRjaCIgcmVxdWVzdCB0byB0aGUgb3JpZ2luYXRpbmcKKyAgIHJlcG9zaXRvcnkgdG8gZmlsbCBub3QteWV0LW9idGFpbmVkIG9iamVjdHMuICBUaGUgcmVxdWVzdCBoYXMgYmVlbgorICAgb3B0aW1pemVkIGZvciByZXF1ZXN0aW5nIGEgdHJlZSBvYmplY3QgKGFuZCBub3QgdGhlIGxlYWYgYmxvYgorICAgb2JqZWN0cyBjb250YWluZWQgaW4gaXQpIGJ5IHRlbGxpbmcgdGhlIG9yaWdpbmF0aW5nIHJlcG9zaXRvcnkgdGhhdAorICAgbm8gYmxvYnMgYXJlIG5lZWRlZC4KKyAgIChtZXJnZSA0YzdmOTU2N2VhIGp0L25vbi1ibG9iLWxhenktZmV0Y2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZXBhdGggdG8gc3VwcG9ydCB0aGUgZXhwZXJpbWVudGFsIHNwbGl0LWluZGV4IG1vZGUgaGFkCisgICByZW1haW5pbmcgInJhY2lseSBjbGVhbiIgaXNzdWVzIGZpeGVkLgorICAgKG1lcmdlIDRjNDkwZjNkMzIgc2cvc3BsaXQtaW5kZXgtcmFjZWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tZ3JhcGgiIHNob3dpbmcgYW4gb2N0b3B1cyBtZXJnZSBzb21ldGltZXMgbWlzY291bnRlZCB0aGUKKyAgIG51bWJlciBvZiBkaXNwbGF5IGNvbHVtbnMgaXQgaXMgY29uc3VtaW5nIHRvIHNob3cgdGhlIG1lcmdlIGFuZCBpdHMKKyAgIHBhcmVudCBjb21taXRzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMDQwMDU4MzRlZCBucC9sb2ctZ3JhcGgtb2N0b3B1cy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJhbmdlLWRpZmYiIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gdGhlIGNvbXBhcmVkIHJhbmdlcyBoYWQKKyAgIGNoYW5nZXMgaW4gc3VibW9kdWxlcyBhbmQgdGhlICItLXN1Ym1vZHVsZT1sb2ciIHdhcyB1c2VkLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgcnVuX2NvbW1hbmQoKSBBUEkgb24gdGhlIFVOSVggcGxhdGZvcm1zIGhhZCBhCisgICBidWcgdGhhdCBjYXVzZWQgYSBjb21tYW5kIG5vdCBvbiAkUEFUSCB0byBiZSBmb3VuZCBpbiB0aGUgY3VycmVudAorICAgZGlyZWN0b3J5LgorICAgKG1lcmdlIGY2N2I5ODA3NzEgamsvcnVuLWNvbW1hbmQtbm90ZG90IGxhdGVyIHRvIG1haW50KS4KKworICogQSBtdXRleCB1c2VkIGluICJnaXQgcGFjay1vYmplY3RzIiB3ZXJlIG5vdCBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQKKyAgIGFuZCB0aGlzIGNhdXNlZCAiZ2l0IHJlcGFjayIgdG8gZHVtcCBjb3JlIG9uIFdpbmRvd3MuCisgICAobWVyZ2UgMzQyMDRjODE2NiBqcy9wYWNrLW9iamVjdHMtbXV0ZXgtaW5pdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVbmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsICJnaXQgZGlmZiBEOi9hL2IvYyBEOi9hL2IvZCIgb24KKyAgIFdpbmRvd3Mgd291bGQgc3RyaXAgaW5pdGlhbCBwYXJ0cyBmcm9tIHRoZSBwYXRocyBiZWNhdXNlIHRoZXkKKyAgIHdlcmUgbm90IHJlY29nbml6ZWQgYXMgYWJzb2x1dGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBmZmQwNGU5MmUyIGpzL2RpZmYtbm90aWNlLWhhcy1kcml2ZS1wcmVmaXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaD11cGRhdGVJbnN0ZWFkIGNvZGVwYXRoIGtpY2tlZCBpbiBldmVuCisgICB3aGVuIHRoZSBwdXNoIHNob3VsZCBoYXZlIGJlZW4gcmVqZWN0ZWQgZHVlIHRvIG90aGVyIHJlYXNvbnMsIHN1Y2gKKyAgIGFzIGl0IGRvZXMgbm90IGZhc3QtZm9yd2FyZCBvciB0aGUgdXBkYXRlLWhvb2sgcmVqZWN0cyBpdCwgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBiMDcyYTI1ZmFkIGpjL3JlY2VpdmUtZGVueS1jdXJyZW50LWJyYW5jaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbG9naWMgdG8gZGV0ZXJtaW5lIHRoZSBhcmNoaXZlIHR5cGUgImdpdCBhcmNoaXZlIiB1c2VzIGRpZCBub3QKKyAgIGNvcnJlY3RseSBraWNrIGluIGZvciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUiLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiAiZ2l0IHJlcGFjayIgaW4gYSBzaGFsbG93IGNsb25lIGRpZCBub3QgY29ycmVjdGx5IHVwZGF0ZSB0aGUKKyAgIHNoYWxsb3cgcG9pbnRzIGluIHRoZSByZXBvc2l0b3J5LCBsZWFkaW5nIHRvIGEgcmVwb3NpdG9yeSB0aGF0CisgICBkb2VzIG5vdCBwYXNzIGZzY2suCisgICAobWVyZ2UgNWRjZmJmNTY0YyBqcy9zaGFsbG93LWFuZC1mZXRjaC1wcnVuZSBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgY29kZXBhdGhzIGZhaWxlZCB0byBmb3JtIGEgcHJvcGVyIFVSTCB3aGVuIC5naXRtb2R1bGVzIHJlY29yZAorICAgdGhlIFVSTCB0byBhIHN1Ym1vZHVsZSByZXBvc2l0b3J5IGFzIHJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IG9mCisgICBzdXBlcnByb2plY3QsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBlMGE4NjJmZGFmIHNiL3N1Ym1vZHVsZS11cmwtdG8tYWJzb2x1dGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIHByb3RvY29sIHYyIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnkgZmFpbGVkIHRvCisgICBmZXRjaCBmdWxsIGhpc3RvcnkgYmVoaW5kIGEgbmV3IHRpcCBvZiBoaXN0b3J5IHRoYXQgd2FzIGRpdmVyZ2VkCisgICBiZWZvcmUgdGhlIGN1dC1vZmYgcG9pbnQgb2YgdGhlIGhpc3RvcnkgdGhhdCB3YXMgcHJldmlvdXNseSBmZXRjaGVkCisgICBzaGFsbG93bHkuCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBtYWNoaW5lcnkgKGluIGNvbnRyaWIvKSBoYXMgYmVlbgorICAgdXBkYXRlZCB0byBhbGxvdyB0aGUgY29tcGxldGlvbiBzY3JpcHQgdG8gdHdlYWsgdGhlIGxpc3Qgb2Ygb3B0aW9ucworICAgdGhhdCBhcmUgcmVwb3J0ZWQgYnkgdGhlIHBhcnNlLW9wdGlvbnMgbWFjaGluZXJ5IGNvcnJlY3RseS4KKyAgIChtZXJnZSAyNzZiNDlmZjM0IG5kL2NvbXBsZXRpb24tbmVnYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPcGVyYXRpb25zIG9uIHByb21pc29yIG9iamVjdHMgbWFrZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBvbmx5IGEKKyAgIHNtYWxsIHN1YnNldCBvZiB0aGUgY29tbWFuZHMgdGhhdCBpbnRlcm5hbGx5IHVzZSB0aGUgcmV2aXNpb25zCisgICBtYWNoaW5lcnksIGJ1dCB0aGUgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIiBvcHRpb24gd2VyZSB0YWtlbgorICAgYW5kIGxlZCB0byBub25zZW5zZSByZXN1bHRzIGJ5IGNvbW1hbmRzIGxpa2UgImxvZyIsIHRvIHdoaWNoIGl0CisgICBkaWRuJ3QgbWFrZSBtdWNoIHNlbnNlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNjY5YjFkMmFhZSBtZC9leGNsdWRlLXByb21pc29yLW9iamVjdHMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQSByZWdyZXNzaW9uIGluIEdpdCAyLjEyIGVyYSBtYWRlICJnaXQgZnNjayIgZmFsbCBpbnRvIGFuIGluZmluaXRlCisgICBsb29wIHdoaWxlIHByb2Nlc3NpbmcgdHJ1bmNhdGVkIGxvb3NlIG9iamVjdHMuCisgICAobWVyZ2UgMThhZDEzZTViMiBqay9kZXRlY3QtdHJ1bmNhdGVkLXpsaWItaW5wdXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxzLXJlbW90ZSAkdGhlcmUgZm9vIiB3YXMgYnJva2VuIGJ5IHJlY2VudCB1cGRhdGUgZm9yIHRoZQorICAgcHJvdG9jb2wgdjIgYW5kIHN0b3BwZWQgc2hvd2luZyByZWZzIHRoYXQgbWF0Y2ggJ2ZvbycgdGhhdCBhcmUgbm90CisgICByZWZzL3toZWFkcyx0YWdzfS9mb28sIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIDZhMTM5Y2RkNzQgamsvcHJvdG8tdjItcmVmLXByZWZpeC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBZGRpdGlvbmFsIGNvbW1lbnQgb24gYSB0cmlja3kgcGllY2Ugb2YgY29kZSB0byBoZWxwIGRldmVsb3BlcnMuCisgICAobWVyZ2UgMGFmYmUzZTgwNiBqay9zdHJlYW0tcGFjay1ub24tZGVsdGEtY2xhcmlmaWNhdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIEEgY291cGxlIG9mIHRlc3RzIHVzZWQgdG8gbGVhdmUgdGhlIHJlcG9zaXRvcnkgaW4gYSBzdGF0ZSB0aGF0IGlzCisgICBkZWxpYmVyYXRlbHkgY29ycnVwdCwgd2hpY2ggaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhYTk4NGRiZTVlIGFiL3BhY2stdGVzdHMtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzdWJtb2R1bGUgc3VwcG9ydCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlYWQgZnJvbSB0aGUgYmxvYiBhdAorICAgSEVBRDouZ2l0bW9kdWxlcyB3aGVuIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIG1pc3NpbmcgZnJvbSB0aGUKKyAgIHdvcmtpbmcgdHJlZS4KKyAgIChtZXJnZSAyYjEyNTdlNDYzIGFvL3N1Ym1vZHVsZS13by1naXRtb2R1bGVzLWNoZWNrZWQtb3V0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgd2FzIGEgYml0IGxvb3NlIGluIHBhcnNpbmcgcmVzcG9uc2VzIGZyb20gdGhlIG90aGVyIHNpZGUKKyAgIHdoZW4gdGFsa2luZyBvdmVyIHRoZSBwcm90b2NvbCB2Mi4KKworICogImdpdCByZXYtcGFyc2UgLS1leGNsdWRlPSogLS1icmFuY2hlcyAtLWJyYW5jaGVzIiAgKGkuZS4gZmlyc3QKKyAgIHNheWluZyAiYWRkIG9ubHkgdGhpbmdzIHRoYXQgZG8gbm90IG1hdGNoICcqJyBvdXQgb2YgYWxsIGJyYW5jaGVzIgorICAgYW5kIHRoZW4gYWRkaW5nIGFsbCBicmFuY2hlcywgd2l0aG91dCBhbnkgZXhjbHVzaW9uIHRoaXMgdGltZSkKKyAgIHdvcmtlZCBhcyBleHBlY3RlZCwgYnV0ICItLWV4Y2x1ZGU9KiAtLWFsbCAtLWFsbCIgZGlkIG5vdCB3b3JrIHRoZQorICAgc2FtZSB3YXksIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIDUyMjEwNDgwOTIgYWcvcmV2LXBhcnNlLWFsbC1leGNsdWRlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCAtLXRyYW5zZmVyLWVuY29kaW5nPS4uLiIgaW4gcmVjZW50IHZlcnNpb25zIG9mIEdpdAorICAgc29tZXRpbWVzIHByb2R1Y2VkIGFuIGVtcHR5ICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiIgaGVhZGVyLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDNjODhlNDZmMWEgYWwvc2VuZC1lbWFpbC1hdXRvLWN0ZS1maXh1cCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBpbnRlcmZhY2UgaW50byAieGRpZmYiIGxpYnJhcnkgdXNlZCB0byBkaXNjb3ZlciB0aGUgb2Zmc2V0IGFuZAorICAgc2l6ZSBvZiBhIGdlbmVyYXRlZCBwYXRjaCBodW5rIGJ5IGZpcnN0IGZvcm1hdHRpbmcgaXQgaW50byB0aGUKKyAgIHRleHR1YWwgaHVuayBoZWFkZXIgIkBAIC1uLG0gK2ssbCBAQCIgYW5kIHRoZW4gcGFyc2luZyB0aGUgbnVtYmVycworICAgb3V0LiAgQSBuZXcgaW50ZXJmYWNlIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYWxsb3cgY2FsbGVycyBhIG1vcmUKKyAgIGRpcmVjdCBhY2Nlc3MgdG8gdGhlbS4KKyAgIChtZXJnZSA1ZWFkZTA3NDZlIGprL3hkaWZmLWludGVyZmFjZSBsYXRlciB0byBtYWludCkuCisKKyAqIFBhdGhzcGVjIG1hdGNoaW5nIGFnYWluc3QgYSB0cmVlIG9iamVjdCB3ZXJlIGJ1Z2d5IHdoZW4gbmVnYXRpdmUKKyAgIHBhdGhzcGVjIGVsZW1lbnRzIHdlcmUgaW52b2x2ZWQsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGI3ODQ1Y2ViYzAgbmQvdHJlZS13YWxrLXBhdGgtZXhjbHVzaW9uIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZSIgYW5kICJnaXQgcHVsbCIgdGhhdCBtZXJnZXMgaW50byBhbiB1bmJvcm4gYnJhbmNoIHVzZWQKKyAgIHRvIGNvbXBsZXRlbHkgaWdub3JlICItLXZlcmlmeS1zaWduYXR1cmVzIiwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwMWEzMWYzYmNhIGprL3ZlcmlmeS1zaWctbWVyZ2UtaW50by12b2lkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLS1hdXRvc3Rhc2giIGRpZCBub3QgY29ycmVjdGx5IHJlLWF0dGFjaCB0aGUgSEVBRCBhdCB0aW1lcy4KKworICogInJldi1wYXJzZSAtLWV4Y2x1ZGU9PHBhdHRlcm4+IC0tYnJhbmNoZXM9PHBhdHRlcm4+IiBldGMuIGRpZCBub3QKKyAgIHF1aXRlIHdvcmssIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA5YWI5YjVkZjBlIHJhL3Jldi1wYXJzZS1leGNsdWRlLWdsb2IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIGVkaXRpbmcgYSBwYXRjaCBpbiBhICJnaXQgYWRkIC1pIiBzZXNzaW9uLCBhIGh1bmsgY291bGQgYmUKKyAgIG1hZGUgdG8gbm8tb3AuICBUaGUgImdpdCBhcHBseSIgcHJvZ3JhbSB1c2VkIHRvIHJlamVjdCBhIHBhdGNoIHdpdGgKKyAgIHN1Y2ggYSBuby1vcCBodW5rIHRvIGNhdGNoIHVzZXIgbWlzdGFrZXMsIGJ1dCBpdCBpcyBub3cgdXBkYXRlZCB0bworICAgZXhwbGljaXRseSBhbGxvdyBhIG5vLW9wIGh1bmsgaW4gYW4gZWRpdGVkIHBhdGNoLgorICAgKG1lcmdlIDIyY2IzODM1YjkganMvYXBwbHktcmVjb3VudC1hbGxvdy1ub29wIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIFVSTCB0byBhbiBNU0ROIHBhZ2UgaW4gYSBjb21tZW50IGhhcyBiZWVuIHVwZGF0ZWQuCisgICAobWVyZ2UgMmVmMmFlMjkxNyBqcy9taW5ndy1tc2RuLXVybCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbHMtcmVtb3RlIC0tc29ydD08dGhpbmc+IiBjYW4gZmVlZCBhbiBvYmplY3QgdGhhdCBpcyBub3QgeWV0CisgICBhdmFpbGFibGUgaW50byB0aGUgY29tcGFyaXNvbiBtYWNoaW5lcnkgYW5kIHNlZ2ZhdWx0LCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkIHRvIGNoZWNrIHN1Y2ggYSByZXF1ZXN0IHVwZnJvbnQgYW5kIHJlamVjdCBpdC4KKworICogV2hlbiAiZ2l0IGJ1bmRsZSIgYWJvcnRzIGR1ZSB0byBhbiBlbXB0eSBjb21taXQgcmFuZ2VzCisgICAoaS5lLiByZXN1bHRpbmcgaW4gYW4gZW1wdHkgcGFjayksIGl0IGxlZnQgYSBmaWxlIGRlc2NyaXB0b3IgdG8gYW4KKyAgIGxvY2tmaWxlIG9wZW4sIHdoaWNoIHJlc3VsdGVkIGluIGxlZnRvdmVyIGxvY2tmaWxlIG9uIFdpbmRvd3Mgd2hlcmUKKyAgIHlvdSBjYW5ub3QgcmVtb3ZlIGEgZmlsZSB3aXRoIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLiAgVGhpcyBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDJjOGVlMWY1M2MgamsvY2xvc2UtZHVwZWQtZmQtYmVmb3JlLXVubG9jay1mb3ItYnVuZGxlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLS1zdGF0PTx3aWR0aD4iIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHdpZHRoCisgICB1c2VkIGJ5IHRoZSBkaWZmc3RhdCAoc2hvd24gaW4gdGhlIGNvdmVyIGxldHRlcikuCisgICAobWVyZ2UgMjg0YWViN2U2MCBuZC9mb3JtYXQtcGF0Y2gtY292ZXItbGV0dGVyLXN0YXQtd2lkdGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgd2F5IC5naXQvaW5kZXggYW5kIC5naXQvc2hhcmVkaW5kZXgqIGZpbGVzIHdlcmUgaW5pdGlhbGx5CisgICBjcmVhdGVkIGdhdmUgdGhlc2UgZmlsZXMgZGlmZmVyZW50IHBlcm0gYml0cyB1bnRpbCB0aGV5IHdlcmUKKyAgIGFkanVzdGVkIGZvciBzaGFyZWQgcmVwb3NpdG9yeSBzZXR0aW5ncy4gIFRoaXMgd2FzIG1hZGUgY29uc2lzdGVudC4KKyAgIChtZXJnZSBjOWQ2Yzc4ODcwIGNjL3NoYXJlZC1pbmRleC1wZXJtYml0cyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tc3RhdCIgdG8gdHJhbnNwbGFudCBhIHBpZWNlIG9mIGhpc3Rvcnkgb250byBhIHRvdGFsbHkKKyAgIHVucmVsYXRlZCBoaXN0b3J5IHdlcmUgbm90IHdvcmtpbmcgYmVmb3JlIGFuZCBzaWxlbnRseSBzaG93ZWQgd3JvbmcKKyAgIHJlc3VsdC4gIFdpdGggdGhlIHJlY2VudCByZWltcGxlbWVudGF0aW9uIGluIEMsIGl0IHN0YXJ0ZWQgdG8gaW5zdGVhZAorICAgZGllIHdpdGggYW4gZXJyb3IgbWVzc2FnZSwgYXMgdGhlIG9yaWdpbmFsIGxvZ2ljIHdhcyBub3QgcHJlcGFyZWQKKyAgIHRvIGNvcGUgd2l0aCB0aGlzIGNhc2UuICBUaGlzIGhhcyBub3cgYmVlbiBmaXhlZC4KKworICogVGhlIGFkdmljZSBtZXNzYWdlIHRvIHRlbGwgdGhlIHVzZXIgdG8gbWlncmF0ZSBhbiBleGlzdGluZyBncmFmdAorICAgZmlsZSB0byB0aGUgcmVwbGFjZSBzeXN0ZW0gd2hlbiBhIGdyYWZ0IGZpbGUgd2FzIHJlYWQgd2FzIHNob3duCisgICBldmVuIHdoZW4gImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlIiBjb21tYW5kLCB3aGljaCBpcyB0aGUKKyAgIHdheSB0aGUgbWVzc2FnZSBzdWdnZXN0cyB0byB1c2UsIHdhcyBydW5uaW5nLCB3aGljaCBtYWRlIGxpdHRsZQorICAgc2Vuc2UuCisgICAobWVyZ2UgODgyMWU5MGEwOSBhYi9yZXBsYWNlLWdyYWZ0LXdpdGgtcmVwbGFjZS1hZHZpY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1yYXciIGxvc3QgZWxsaXBzZXMgdG8gYWRqdXN0IHRoZSBvdXRwdXQgY29sdW1ucyBmb3IKKyAgIHNvbWUgdGltZSBub3csIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBzdGlsbCBzaG93ZWQgdGhlbS4KKworICogQ29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIDk2YTc1MDFhYWQgdHMvZG9jLWJ1aWxkLW1hbnBhZ2UteHNsLXF1aWV0bHkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI5YjA3ZWZkYjIgdGcvY29uZmxpY3QtbWFya2VyLXNpemUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZhMGFlZWE3NzAgc2cvZG9jLXRyYWNlLWFwcGVuZHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ2NDMyNGNiNjAgdGIvdm9pZC1jaGVjay1hdHRyIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjM2I5YmM5NGI5IGVuL2RvdWJsZS1zZW1pY29sb24tZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3OTMzNjExNmY1IHNnL3QzNzAxLXRpZ2h0ZW4tdHJhY2UgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDgwMWZhNjNhOTAgamsvZGV2LWJ1aWxkLWZvcm1hdC1zZWN1cml0eSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDU5N2RkNjJiYSBzYi9zdHJpbmctbGlzdC1yZW1vdmUtdW51c2VkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkYjJkMzZmYWQ4IGJ3L3Byb3RvY29sLXYyIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0NTZkN2NkM2E5IHNnL3NwbGl0LWluZGV4LXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdiNjA1N2M4NTIgdHEvcmVmcy1pbnRlcm5hbC1jb21tZW50LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjllOGRjNTBhZCB0Zy90NTU1MS13aXRoLWN1cmwtNy42MS4xIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NWY2YmNlMmM5IGZlL2RvYy11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3OTg3ZDIyMzJkIGprL2NoZWNrLWV2ZXJ5dGhpbmctY29ubmVjdGVkLWlzLWxvbmctZ29uZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNGJhM2M5YmU0NyBkei9jcmVkZW50aWFsLWRvYy11cmwtbWF0Y2hpbmctcnVsZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRjMzk5NDQyZjcgbWEvY29tbWl0LWdyYXBoLWRvY3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZjMDUwM2IwNGUgbWEvdDE0MDAtdW5kZWJ1Zy10ZXN0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlNTZiNTM1NTNhIG5kL3BhY2tvYmplY3RzaG9vay1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjNTYxNzBhMGM0IG1hL21haWxpbmctbGlzdC1hZGRyZXNzLWluLWdpdC1oZWxwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2ZThmYzcwZmNlIHJzL3NlcXVlbmNlci1vaWRzZXQtaW5zZXJ0LWF2b2lkcy1kdXBzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhZDBiOGY5NTc1IG13L2RvYy10eXBvZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ5ZjA3OWFkMWEgamMvaG93LXRvLWRvY3VtZW50LWFwaSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYjE0OTJiZjMxNSBtYS90NzAwNS1iYXNoLXdvcmthcm91bmQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFjMWY5OGEwZGYgZHUvcmV2LXBhcnNlLWlzLXBsdW1iaW5nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjYThlZDQ0M2E1IG1tL2RvYy1uby1kYXNoZWQtZ2l0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjZTM2NmE4MTQ0IGR1L2dldC10YXItY29tbWl0LWlkLWlzLXBsdW1iaW5nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2MTAxOGZlOWUwIGR1L2NoZXJyeS1pcy1wbHVtYmluZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzdlNWZlNzliOSBzYi9zdHJidWYtaC11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDhkMjAwODE5NmIgdHEvYnJhbmNoLWNyZWF0ZS13by1icmFuY2gtZ2V0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyZTNjODk0ZjRiIHRxL2JyYW5jaC1zdHlsZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGM1ZDg0NGFmOWMgc2cvZG9jLXNob3ctYnJhbmNoLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDA4MWQ5MTYxOGIgYWgvZG9jLXVwZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI4NGM3ODM4ODIgamMvY29jY2ktcHJlaW5jciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWU0OTVmODEyMiB1ay9tZXJnZS1zdWJ0cmVlLWRvYy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFhYWE4ODE4MjIgamsvdXBsb2FkcGFjay1wYWNrb2JqZWN0c2hvb2stZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzMDYzNDc3NDQ1IHRiL2NoYXItbWF5LWJlLXVuc2lnbmVkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4YzY0YmM5NDIwIHNnL3Rlc3QtcmViYXNlLWVkaXRvci1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDcxNTcxY2Q3ZDYgbWEvc2VxdWVuY2VyLWRvLXJlc2V0LXNhbmVyLWxvb3AtdGVybWluYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDlhNGNiODc4MWUgY2Ivbm90ZXMtZnJlZWluZy1hbHdheXMtbnVsbC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDMwMDZmNWVlMTYgbWEvcmVzZXQtZG9jLXJlbmRlcmluZy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRjMmViMDY0MTkgc2cvZGFlbW9uLXRlc3Qtc2lnbmFsLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDI3NTI1ZTUxOSBzcy9tc3ZjLXN0cmNhc2VjbXAgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmE4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjAuMS50eHQKQEAgLTAsMCArMSwyMCBAQAorR2l0IHYyLjIwLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgaXMgcHJpbWFyaWx5IHRvIGZpeCBicm93bi1wYXBlci1iYWcgYnJlYWthZ2VzIGluIHRoZQorMi4yMC4wIHJlbGVhc2UuCisKK0ZpeGVzIHNpbmNlIHYyLjIwCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGZldyBuZXdseSBhZGRlZCB0ZXN0cyB3ZXJlIG5vdCBwb3J0YWJsZSBhbmQgY2F1c2VkIG1pbm9yaXR5CisgICBwbGF0Zm9ybXMgdG8gcmVwb3J0IGZhbHNlIGJyZWFrYWdlcywgd2hpY2ggaGF2ZSBiZWVuIGZpeGVkLgorCisgKiBQb3J0YWJpbGl0eSBmaXggZm9yIGEgcmVjZW50IHVwZGF0ZSB0byBwYXJzZS1vcHRpb25zIEFQSS4KKworICogImdpdCBoZWxwIC1hIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGFuIG92ZXJseSBsb25nIGFsaWFzIGlzCisgICBkZWZpbmVkLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEEgcmVjZW50IHVwZGF0ZSBhY2NpZGVudGFsbHkgc3F1ZWxjaGVkIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUKKyAgIHJ1bl9jb21tYW5kIEFQSSBmYWlsZWQgdG8gcnVuIGEgbWlzc2luZyBjb21tYW5kLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjgwY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjAuMi50eHQKQEAgLTAsMCArMSwxOCBAQAorR2l0IHYyLjIwLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC42LCB2Mi4xNS40CithbmQgaW4gdjIuMTcuMywgYWRkcmVzc2luZyB0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsCitDVkUtMjAxOS0xMzQ5LCBDVkUtMjAxOS0xMzUwLCBDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLAorQ1ZFLTIwMTktMTM1MywgQ1ZFLTIwMTktMTM1NCwgYW5kIENWRS0yMDE5LTEzODc7IHNlZSB0aGUgcmVsZWFzZSBub3RlcworZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgorCitUaGUgY2hhbmdlIHRvIGRpc2FsbG93IGBzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZT0hY29tbWFuZGAgZW50cmllcyBpbgorYC5naXRtb2R1bGVzYCB3aGljaCB3YXMgaW50cm9kdWNlZCB2Mi4xNS40IChhbmQgZm9yIHdoaWNoIHYyLjE3LjMKK2FkZGVkIGV4cGxpY2l0IGZzY2sgY2hlY2tzKSBmaXhlcyB0aGUgdnVsbmVyYWJpbGl0eSBpbiB2Mi4yMC54IHdoZXJlIGEKK3JlY3Vyc2l2ZSBjbG9uZSBmb2xsb3dlZCBieSBhIHN1Ym1vZHVsZSB1cGRhdGUgY291bGQgZXhlY3V0ZSBjb2RlCitjb250YWluZWQgd2l0aGluIHRoZSByZXBvc2l0b3J5IHdpdGhvdXQgdGhlIHVzZXIgZXhwbGljaXRseSBoYXZpbmcKK2Fza2VkIGZvciB0aGF0IChDVkUtMjAxOS0xOTYwNCkuCisKK0NyZWRpdCBmb3IgZmluZGluZyB0aGlzIHZ1bG5lcmFiaWxpdHkgZ29lcyB0byBKb2VybiBTY2huZWV3ZWlzeiwKK2NyZWRpdCBmb3IgdGhlIGZpeGVzIGdvZXMgdG8gSm9uYXRoYW4gTmllZGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIxLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIxLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDlkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjEuMC50eHQKQEAgLTAsMCArMSw0NTEgQEAKK0dpdCAyLjIxIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBIaXN0b3JpY2FsbHksIHRoZSAiLW0iIChtYWlubGluZSkgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZm9yICJnaXQKKyAgIGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIHdoZW4gd29ya2luZyB3aXRoIGEgbWVyZ2UgY29tbWl0LgorICAgVGhpcyB2ZXJzaW9uIG9mIEdpdCBubyBsb25nZXIgd2FybnMgb3IgZXJyb3JzIG91dCB3aGVuIHdvcmtpbmcgd2l0aAorICAgYSBzaW5nbGUtcGFyZW50IGNvbW1pdCwgYXMgbG9uZyBhcyB0aGUgYXJndW1lbnQgdG8gdGhlICItbSIgb3B0aW9uCisgICBpcyAxIChpLmUuIGl0IGhhcyBvbmx5IG9uZSBwYXJlbnQsIGFuZCB0aGUgcmVxdWVzdCBpcyB0byBwaWNrIG9yCisgICByZXZlcnQgcmVsYXRpdmUgdG8gdGhhdCBmaXJzdCBwYXJlbnQpLiAgU2NyaXB0cyB0aGF0IHJlbGllZCBvbiB0aGUKKyAgIGJlaGF2aW91ciBtYXkgZ2V0IGJyb2tlbiB3aXRoIHRoaXMgY2hhbmdlLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSAiaHR0cC52ZXJzaW9uIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHdpdGggcmVjZW50CisgICBlbm91Z2ggdmVyc2lvbnMgb2YgY1VSTCBsaWJyYXJ5IHRvIGZvcmNlIHRoZSB2ZXJzaW9uIG9mIEhUVFAgdXNlZAorICAgdG8gdGFsayB3aGVuIGZldGNoaW5nIGFuZCBwdXNoaW5nLgorCisgKiBTbWFsbCBmaXhlcyBhbmQgZmVhdHVyZXMgZm9yIGZhc3QtZXhwb3J0IGFuZCBmYXN0LWltcG9ydCwgbW9zdGx5IG9uCisgICB0aGUgZmFzdC1leHBvcnQgc2lkZSBoYXMgYmVlbiBtYWRlLgorCisgKiAiZ2l0IHB1c2ggJHRoZXJlICRzcmM6JGRzdCIgcmVqZWN0cyB3aGVuICRkc3QgaXMgbm90IGEgZnVsbHkKKyAgIHF1YWxpZmllZCByZWZuYW1lIGFuZCBpdCBpcyBub3QgY2xlYXIgd2hhdCB0aGUgZW5kIHVzZXIgbWVhbnQuICBUaGUKKyAgIGNvZGVwYXRoIGhhcyBiZWVuIHRhdWdodCB0byBnaXZlIGEgY2xlYXJlciBlcnJvciBtZXNzYWdlLCBhbmQgYWxzbworICAgZ3Vlc3Mgd2hlcmUgdGhlIHB1c2ggc2hvdWxkIGdvIGJ5IHRha2luZyB0aGUgdHlwZSBvZiB0aGUgcHVzaGVkCisgICBvYmplY3QgaW50byBhY2NvdW50IChlLmcuIGEgdGFnIG9iamVjdCB3b3VsZCB3YW50IHRvIGdvIHVuZGVyCisgICByZWZzL3RhZ3MvKS4KKworICogImdpdCBjaGVja291dCBbPHRyZWUtaXNoPl0gcGF0aC4uLiIgbGVhcm5lZCB0byByZXBvcnQgdGhlIG51bWJlciBvZgorICAgcGF0aHMgdGhhdCBoYXZlIGJlZW4gY2hlY2tlZCBvdXQgb2YgdGhlIGluZGV4IG9yIHRoZSB0cmVlLWlzaCwKKyAgIHdoaWNoIGdpdmVzIGl0IHRoZSBzYW1lIGRlZ3JlZSBvZiBub2lzeS1uZXNzIGFzIHRoZSBjYXNlIGluIHdoaWNoCisgICB0aGUgY29tbWFuZCBjaGVja3Mgb3V0IGEgYnJhbmNoLiAgImdpdCBjaGVja291dCAtbSA8cGF0aHNwZWM+IiB0bworICAgdW5kbyBjb25mbGljdCByZXNvbHV0aW9uIGdpdmVzIGEgc2ltaWxhciBtZXNzYWdlLgorCisgKiAiZ2l0IHF1aWx0aW1wb3J0IiBsZWFybmVkICItLWtlZXAtbm9uLXBhdGNoIiBvcHRpb24uCisKKyAqICJnaXQgd29ya3RyZWUgcmVtb3ZlIiBhbmQgImdpdCB3b3JrdHJlZSBtb3ZlIiByZWZ1c2VkIHRvIHdvcmsgd2hlbgorICAgdGhlcmUgaXMgYSBzdWJtb2R1bGUgaW52b2x2ZWQuICBUaGlzIGhhcyBiZWVuIGxvb3NlbmVkIHRvIGlnbm9yZQorICAgdW5pbml0aWFsaXplZCBzdWJtb2R1bGVzLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIC1tMSIgd2FzIGZvcmJpZGRlbiB3aGVuIHBpY2tpbmcgYSBub24tbWVyZ2UKKyAgIGNvbW1pdCwgZXZlbiB0aG91Z2ggdGhlcmUgX2lzXyBwYXJlbnQgbnVtYmVyIDEgZm9yIHN1Y2ggYSBjb21taXQuCisgICBUaGlzIHdhcyBkb25lIHRvIGF2b2lkIG1pc3Rha2VzIGJhY2sgd2hlbiAiY2hlcnJ5LXBpY2siIHdhcyBhYm91dAorICAgcGlja2luZyBhIHNpbmdsZSBjb21taXQsIGJ1dCBpcyBubyBsb25nZXIgdXNlZnVsIHdpdGggImNoZXJyeS1waWNrIgorICAgdGhhdCBjYW4gcGljayBhIHJhbmdlIG9mIGNvbW1pdHMuICBOb3cgdGhlICItbSRudW0iIG9wdGlvbiBpcworICAgYWxsb3dlZCB3aGVuIHBpY2tpbmcgYW55IGNvbW1pdCwgYXMgbG9uZyBhcyAkbnVtIG5hbWVzIGFuIGV4aXN0aW5nCisgICBwYXJlbnQgb2YgdGhlIGNvbW1pdC4KKworICogVXBkYXRlICJnaXQgbXVsdGltYWlsIiBmcm9tIHRoZSB1cHN0cmVhbS4KKworICogImdpdCBwNCIgdXBkYXRlLgorCisgKiBUaGUgIi0tZm9ybWF0PTxwbGFjZWhvbGRlcj4iIG9wdGlvbiBvZiBmb3ItZWFjaC1yZWYsIGJyYW5jaCBhbmQgdGFnCisgICBsZWFybmVkIHRvIHNob3cgYSBmZXcgbW9yZSB0cmFpdHMgb2Ygb2JqZWN0cyB0aGF0IGNhbiBiZSBsZWFybmVkIGJ5CisgICB0aGUgb2JqZWN0X2luZm8gQVBJLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbGVhcm5lZCB0byByZS1leGVjdXRlIGEgY29tbWFuZCBnaXZlbiB3aXRoICdleGVjJworICAgdG8gcnVuIGFmdGVyIGl0IGZhaWxlZCB0aGUgbGFzdCB0aW1lLgorCisgKiAiZ2l0IGRpZmYgLS1jb2xvci1tb3ZlZC13cyIgdXBkYXRlcy4KKworICogQ3VzdG9tIHVzZXJmb3JtYXQgImxvZyAtLWZvcm1hdCIgbGVhcm5lZCAlUyBhdG9tIHRoYXQgc3RhbmRzIGZvcgorICAgdGhlIHRpcCB0aGUgdHJhdmVyc2FsIHJlYWNoZWQgdGhlIGNvbW1pdCBmcm9tLCBpLmUuIC0tc291cmNlLgorCisgKiAiZ2l0IGluc3Rhd2ViIiBsZWFybmVkIHRvIGRyaXZlIGh0dHAuc2VydmVyIHRoYXQgY29tZXMgd2l0aAorICAgImJhdHRlcmllcyBpbmNsdWRlZCIgUHl0aG9uIGluc3RhbGxhdGlvbiAoYm90aCBQeXRob24yICYgMykuCisKKyAqIEEgbmV3IGVuY29kaW5nIFVURi0xNkxFLUJPTSBoYXMgYmVlbiBpbnZlbnRlZCB0byBmb3JjZSBlbmNvZGluZyB0bworICAgVVRGLTE2IHdpdGggQk9NIGluIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlciwgd2hpY2ggY2Fubm90IGJlIGRpcmVjdGx5CisgICBnZW5lcmF0ZWQgYnkgdXNpbmcgaWNvbnYuCisKKyAqIEEgbmV3IGRhdGUgZm9ybWF0ICItLWRhdGU9aHVtYW4iIHRoYXQgbW9ycGhzIGl0cyBvdXRwdXQgZGVwZW5kaW5nCisgICBvbiBob3cgZmFyIHRoZSB0aW1lIGlzIGZyb20gdGhlIGN1cnJlbnQgdGltZSBoYXMgYmVlbiBpbnRyb2R1Y2VkLgorICAgIi0tZGF0ZT1hdXRvOmh1bWFuIiBjYW4gYmUgdXNlZCB0byB1c2UgdGhpcyBuZXcgZm9ybWF0IChvciBhbnkKKyAgIGV4aXN0aW5nIGZvcm1hdCkgd2hlbiB0aGUgb3V0cHV0IGlzIGdvaW5nIHRvIHRoZSBwYWdlciBvciB0byB0aGUKKyAgIHRlcm1pbmFsLCBhbmQgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGZvcm1hdC4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBDb2RlIGNsZWFuLXVwIHdpdGggb3B0aW1pemF0aW9uIGZvciB0aGUgY29kZXBhdGggdGhhdCBjaGVja3MKKyAgIChub24tKWV4aXN0ZW5jZSBvZiBsb29zZSBvYmplY3RzLgorCisgKiBNb3JlIGNvZGVwYXRocyBoYXZlIGJlY29tZSBhd2FyZSBvZiB3b3JraW5nIHdpdGggaW4tY29yZSByZXBvc2l0b3J5CisgICBpbnN0YW5jZXMgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAidGhlX3JlcG9zaXRvcnkiLgorCisgKiBUaGUgInN0cm5jYXQoKSIgZnVuY3Rpb24gaXMgbm93IGFtb25nIHRoZSBiYW5uZWQgZnVuY3Rpb25zLgorCisgKiBQb3J0YWJpbGl0eSB1cGRhdGVzIGZvciB0aGUgSFBFIE5vblN0b3AgcGxhdGZvcm0uCisKKyAqIEVhcmxpZXIgd2UgYWRkZWQgIi1XZm9ybWF0LXNlY3VyaXR5IiB0byBkZXZlbG9wZXIgYnVpbGRzLCBhc3N1bWluZworICAgdGhhdCAiLVdhbGwiICh3aGljaCBpbmNsdWRlcyAiLVdmb3JtYXQiIHdoaWNoIGluIHR1cm4gaXMgcmVxdWlyZWQKKyAgIHRvIHVzZSAiLVdmb3JtYXQtc2VjdXJpdHkiKSBpcyBhbHdheXMgaW4gZWZmZWN0LiAgVGhpcyBpcyBub3QgdHJ1ZQorICAgd2hlbiBjb25maWcubWFrLmF1dG9nZW4gaXMgaW4gdXNlLCB1bmZvcnR1bmF0ZWx5LiAgVGhpcyBoYXMgYmVlbgorICAgZml4ZWQgYnkgdW5jb25kaXRpb25hbGx5IGFkZGluZyAiLVdhbGwiIHRvIGRldmVsb3BlciBidWlsZHMuCisKKyAqIFRoZSBsb29zZSBvYmplY3QgY2FjaGUgdXNlZCB0byBvcHRpbWl6ZSBleGlzdGVuY2UgbG9vay11cCBoYXMgYmVlbgorICAgdXBkYXRlZC4KKworICogRmxha3kgdGVzdHMgY2FuIG5vdyBiZSByZXBlYXRlZGx5IHJ1biB1bmRlciBsb2FkIHdpdGggdGhlCisgICAiLS1zdHJlc3MiIG9wdGlvbi4KKworICogRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBpcyBnZXR0aW5nIHByZXBhcmVkIGZvciBtYW5wYWdlCisgICBsb2NhbGl6YXRpb24uCisKKyAqICJnaXQgZmV0Y2gtcGFjayIgbm93IGNhbiB0YWxrIHRoZSB2ZXJzaW9uIDIgcHJvdG9jb2wuCisKKyAqIHNoYS0yNTYgaGFzaCBoYXMgYmVlbiBhZGRlZCBhbmQgcGx1bWJlZCB0aHJvdWdoIHRoZSBjb2RlIHRvIGFsbG93CisgICBidWlsZGluZyBHaXQgd2l0aCB0aGUgIk5ld0hhc2giLgorCisgKiBEZWJ1Z2dpbmcgaGVscCBmb3IgaHR0cCB0cmFuc3BvcnQuCisKKyAqICJnaXQgZmV0Y2ggLS1kZWVwZW49PG1vcmU+IiBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gd29yayBvdmVyIHYyCisgICBwcm90b2NvbC4KKworICogVGhlIGNvZGUgdG8gd2FsayB0cmVlIG9iamVjdHMgaGFzIGJlZW4gdGF1Z2h0IHRoYXQgd2UgbWF5IGJlCisgICB3b3JraW5nIHdpdGggb2JqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCBjb21wdXRlZCB3aXRoIFNIQS0xLgorCisgKiBUaGUgaW4tY29yZSByZXBvc2l0b3J5IGluc3RhbmNlcyBhcmUgcGFzc2VkIHRocm91Z2ggbW9yZSBjb2RlcGF0aHMuCisKKyAqIFVwZGF0ZSB0aGUgcHJvdG9jb2wgbWVzc2FnZSBzcGVjaWZpY2F0aW9uIHRvIGFsbG93IG9ubHkgdGhlIGxpbWl0ZWQKKyAgIHVzZSBvZiBzY2FsZWQgcXVhbnRpdGllcy4gIFRoaXMgaXMgdG8gZW5zdXJlIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5CisgICBpc3N1ZXMgd2lsbCBub3QgZ2V0IG91dCBvZiBoYW5kLgorCisgKiBNaWNyby1vcHRpbWl6ZSB0aGUgY29kZSB0aGF0IHByZXBhcmVzIGNvbW1pdCBvYmplY3RzIHRvIGJlIHdhbGtlZAorICAgYnkgImdpdCByZXYtbGlzdCIgd2hlbiB0aGUgY29tbWl0LWdyYXBoIGlzIGF2YWlsYWJsZS4KKworICogImdpdCBmZXRjaCIgYW5kICJnaXQgdXBsb2FkLXBhY2siIGxlYXJuZWQgdG8gc2VuZCBhbGwgZXhjaGFuZ2VzIG92ZXIKKyAgIHRoZSBzaWRlYmFuZCBjaGFubmVsIHdoaWxlIHRhbGtpbmcgdGhlIHYyIHByb3RvY29sLgorCisgKiBUaGUgY29kZXBhdGggdG8gd3JpdGUgb3V0IGNvbW1pdC1ncmFwaCBoYXMgYmVlbiBvcHRpbWl6ZWQgYnkKKyAgIGZvbGxvd2luZyB0aGUgdXN1YWwgcGF0dGVybiBvZiB2aXNpdGluZyBvYmplY3RzIGluIGluLXBhY2sgb3JkZXIuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBzaG93IHByb2dyZXNzIG1ldGVyIHdoaWxlIHdyaXRpbmcgb3V0IGNvbW1pdC1ncmFwaAorICAgZmlsZSBoYXMgYmVlbiBpbXByb3ZlZC4KKworICogQ29jY2kgcnVsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gZW5jb3VyYWdlIHVzZSBvZiBzdHJidWZfYWRkYnVmKCkuCisKKyAqICJnaXQgcmViYXNlIC0tbWVyZ2UiIGhhcyBiZWVuIHJlaW1wbGVtZW50ZWQgYnkgcmV1c2luZyB0aGUgaW50ZXJuYWwKKyAgIG1hY2hpbmVyeSB1c2VkIGZvciAiZ2l0IHJlYmFzZSAtaSIuCisKKyAqIE1vcmUgY29kZSBpbiAiZ2l0IGJpc2VjdCIgaGFzIGJlZW4gcmV3cml0dGVuIGluIEMuCisKKyAqIEluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCAiZ2l0LXJlYmFzZS0tYW0iIHNjcmlwdGxldCB0byB1c2UgdGhlICJhbSIKKyAgIGJhY2tlbmQsIHRoZSBidWlsdC1pbiB2ZXJzaW9uIG9mICJnaXQgcmViYXNlIiBsZWFybmVkIHRvIGRyaXZlIHRoZQorICAgImFtIiBiYWNrZW5kIGRpcmVjdGx5LgorCisgKiBUaGUgYXNzdW1wdGlvbiB0byB3b3JrIG9uIHRoZSBzaW5nbGUgImluLWNvcmUgaW5kZXgiIGluc3RhbmNlIGhhcworICAgYmVlbiByZWR1Y2VkIGZyb20gdGhlIGxpYnJhcnktaXNoIHBhcnQgb2YgdGhlIGNvZGViYXNlLgorCisgKiBUaGUgdGVzdCBsaW50IGxlYXJuZWQgdG8gY2F0Y2ggbm9uLXBvcnRhYmxlICJzZWQiIG9wdGlvbnMuCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBsZWFybmVkIGFub3RoZXIgYWxnb3JpdGhtIHRvIGNvbXB1dGUgdGhlIHNldCBvZgorICAgb2JqZWN0cyB0byBzZW5kLCB0aGF0IHRyYWRlcyB0aGUgcmVzdWx0aW5nIHBhY2tmaWxlIG9mZiB0byBzYXZlCisgICB0cmF2ZXJzYWwgY29zdCB0byBmYXZvciBzbWFsbCBwdXNoZXMuCisKKyAqIFRoZSB0cmF2aXMgQ0kgc2NyaXB0cyBoYXZlIGJlZW4gY29ycmVjdGVkIHRvIGJ1aWxkIEdpdCB3aXRoIHRoZQorICAgY29tcGlsZXIocykgb2Ygb3VyIGNob2ljZS4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBsZWFybmVkIHRvIGFib3J0IGVhcmx5IHdoZW4gY29yZS53b3JrdHJlZQorICAgZm9yIHRoZSBzdWJtb2R1bGUgaXMgbm90IHNldCBjb3JyZWN0bHkgdG8gcHJldmVudCBzcHJlYWRpbmcgZGFtYWdlLgorCisgKiBUZXN0IHN1aXRlIGhhcyBiZWVuIGFkanVzdGVkIHRvIHJ1biBvbiBBenVyZSBQaXBlbGluZS4KKworICogUnVubmluZyAiRG9jdW1lbnRhdGlvbi9kb2MtZGlmZiB4IiBmcm9tIGFueXdoZXJlIG90aGVyIHRoYW4gdGhlCisgICB0b3AtbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSBkaWQgbm90IHNob3cgdGhlIHVzYWdlIHN0cmluZworICAgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogVXNlIG9mIHRoZSBzcGFyc2UgdG9vbCBnb3QgZWFzaWVyIHRvIGN1c3RvbWl6ZSBmcm9tIHRoZSBjb21tYW5kCisgICBsaW5lIHRvIGhlbHAgZGV2ZWxvcGVycy4KKworICogQSBuZXcgdGFyZ2V0ICJjb3ZlcmFnZS1wcm92ZSIgdG8gcnVuIHRoZSBjb3ZlcmFnZSB0ZXN0IHVuZGVyCisgICAicHJvdmUiIGhhcyBiZWVuIGFkZGVkLgorCisgKiBBIGZsYWtleSAicDQiIHRlc3QgaGFzIGJlZW4gcmVtb3ZlZC4KKworICogVGhlIGNvZGUgYW5kIHRlc3RzIGFzc3VtZSB0aGF0IHRoZSBzeXN0ZW0gc3VwcGxpZWQgaWNvbnYoKSB3b3VsZAorICAgYWx3YXlzIHVzZSBCT00gaW4gaXRzIG91dHB1dCB3aGVuIGFza2VkIHRvIGVuY29kZSB0byBVVEYtMTYgKG9yCisgICBVVEYtMzIpLCBidXQgYXBwYXJlbnRseSBzb21lIGltcGxlbWVudGF0aW9ucyBvdXRwdXQgYmlnLWVuZGlhbgorICAgd2l0aG91dCBCT00uICBBIGNvbXBpbGUtdGltZSBrbm9iIGhhcyBiZWVuIGFkZGVkIHRvIGhlbHAgc3VjaAorICAgc3lzdGVtcyAoZS5nLiBOb25TdG9wKSB0byBhZGQgQk9NIHRvIHRoZSBvdXRwdXQgdG8gaW5jcmVhc2UKKyAgIHBvcnRhYmlsaXR5LgorCisKK0ZpeGVzIHNpbmNlIHYyLjIwCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiBVcGRhdGVzIGZvciBjb3JuZXIgY2FzZXMgaW4gbWVyZ2UtcmVjdXJzaXZlLgorICAgKG1lcmdlIGNjNGNiMDkwMmMgZW4vbWVyZ2UtcGF0aC1jb2xsaXNpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0IGZyb3R6IiAod2l0aG91dCBhbnkgZG91YmxlLWRhc2gpIGF2b2lkcyBhbWJpZ3VpdHkgYnkKKyAgIG1ha2luZyBzdXJlICdmcm90eicgY2Fubm90IGJlIGludGVycHJldGVkIGFzIGEgcmV2aXNpb24gYW5kIGFzIGEKKyAgIHBhdGggYXQgdGhlIHNhbWUgdGltZS4gIFRoaXMgc2FmZXR5IGhhcyBiZWVuIHVwZGF0ZWQgdG8gY2hlY2sgYWxzbworICAgYSB1bmlxdWUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnZnJvdHonIGluIGEgcmVtb3RlLCB3aGVuIGR3aW1taW5nCisgICB0byBjcmVhdGUgYSBsb2NhbCBicmFuY2ggJ2Zyb3R6JyBvdXQgb2YgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCisgICAnZnJvdHonIGZyb20gYSByZW1vdGUuCisgICAobWVyZ2UgYmU0OTA4ZjEwMyBuZC9jaGVja291dC1kd2ltLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlZnNwZWNzIGNvbmZpZ3VyZWQgd2l0aCAiZ2l0IC1jIHZhcj12YWwgY2xvbmUiIGRpZCBub3QgcHJvcGFnYXRlCisgICB0byB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA3ZWFlNGEzYWM0IHNnL2Nsb25lLWluaXRpYWwtZmV0Y2gtY29uZmlndXJhdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcHJvcGVybHkgY29uZmlndXJlZCB1c2VybmFtZS9lbWFpbCBpcyByZXF1aXJlZCB1bmRlcgorICAgdXNlci51c2VDb25maWdPbmx5IGluIG9yZGVyIHRvIGNyZWF0ZSBjb21taXRzOyBub3cgImdpdCBzdGFzaCIKKyAgIChldmVuIHRob3VnaCBpdCBjcmVhdGVzIGNvbW1pdCBvYmplY3RzIHRvIHJlcHJlc2VudCBzdGFzaCBlbnRyaWVzKQorICAgY29tbWFuZCBpcyBleGVtcHQgZnJvbSB0aGUgcmVxdWlyZW1lbnQuCisgICAobWVyZ2UgM2JjMjExMWZjMiBzZC9zdGFzaC13by11c2VyLW5hbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaHR0cC1iYWNrZW5kIENHSSBwcm9jZXNzIGRpZCBub3QgY29ycmVjdGx5IGNsZWFuIHVwIHRoZSBjaGlsZAorICAgcHJvY2Vzc2VzIGl0IHNwYXducyB0byBydW4gdXBsb2FkLXBhY2sgZXRjLiB3aGVuIGl0IGRpZXMgaXRzZWxmLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDAyODE4YTk4ZDcgbWsvaHR0cC1iYWNrZW5kLWtpbGwtY2hpbGRyZW4tYmVmb3JlLWV4aXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1saXN0IC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIiBoYWQgdG8gdGFrZSBhbiBvYmplY3QKKyAgIHRoYXQgZG9lcyBub3QgZXhpc3QgbG9jYWxseSAoYW5kIGlzIGxhemlseSBhdmFpbGFibGUpIGZyb20gdGhlCisgICBjb21tYW5kIGxpbmUgd2l0aG91dCBiYXJmaW5nLCBidXQgdGhlIGNvZGUgZGVyZWZlcmVuY2VkIE5VTEwuCisgICAobWVyZ2UgNGNmNjc4NjliMiBtZC9saXN0LWxhenktb2JqZWN0cy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdHJhdmVyc2FsIG92ZXIgdHJlZSBvYmplY3RzIGhhcyBsZWFybmVkIHRvIGhvbm9yCisgICAiOihhdHRyOmxhYmVsKSIgcGF0aHNwZWMgbWF0Y2gsIHdoaWNoIGhhcyBiZWVuIGltcGxlbWVudGVkIG9ubHkgZm9yCisgICBlbnVtZXJhdGluZyBwYXRocyBvbiB0aGUgZmlsZXN5c3RlbS4KKyAgIChtZXJnZSA1YTBiOTdiMzRjIG5kL2F0dHItcGF0aHNwZWMtaW4tdHJlZS13YWxrIGxhdGVyIHRvIG1haW50KS4KKworICogQlNEIHBvcnQgdXBkYXRlcy4KKyAgIChtZXJnZSA0ZTNlY2JkNDM5IGNiL29wZW5ic2QtYWxsb3dzLXJlYWRpbmctZGlyZWN0b3J5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiNmJkYzJhMGY1IGNiL3Q1MDA0LWVtcHR5LXRhci1hcmNoaXZlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODJjYmM4Y2RlMiBjYi90ZXN0LWxpbnQtY3AtYSBsYXRlciB0byBtYWludCkuCisKKyAqIExpbmVzIHRoYXQgYmVnaW4gd2l0aCBhIGNlcnRhaW4ga2V5d29yZCB0aGF0IGNvbWUgb3ZlciB0aGUgd2lyZSwgYXMKKyAgIHdlbGwgYXMgbGluZXMgdGhhdCBjb25zaXN0IG9ubHkgb2Ygb25lIG9mIHRoZXNlIGtleXdvcmRzLCBvdWdodCB0bworICAgYmUgcGFpbnRlZCBpbiBjb2xvciBmb3IgZWFzaWVyIGV5ZWJhbGxpbmcsIGJ1dCB0aGUgbGF0dGVyIHdhcworICAgYnJva2VuIGV2ZXIgc2luY2UgdGhlIGZlYXR1cmUgd2FzIGludHJvZHVjZWQgaW4gMi4xOSwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAxZjY3MjkwNDUwIGhuL2hpZ2hsaWdodC1zaWRlYmFuZC1rZXl3b3JkcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC1HPHJlZ2V4PiIgbG9va2VkIGZvciBhIGh1bmsgaW4gdGhlICJnaXQgbG9nIC1wIiBwYXRjaAorICAgb3V0cHV0IHRoYXQgY29udGFpbmVkIGEgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAgIE9wdGltaXplIHRoaXMgY29kZSB0byBpZ25vcmUgYmluYXJ5IGZpbGVzLCB3aGljaCBieSBkZWZhdWx0IHdpbGwKKyAgIG5vdCBzaG93IGFueSBodW5rIHRoYXQgd291bGQgbWF0Y2ggYW55IHBhdHRlcm4gKHVubGVzcyB0ZXh0Y29udiBvcgorICAgdGhlIC0tdGV4dCBvcHRpb24gaXMgaW4gZWZmZWN0LCB0aGF0IGlzKS4KKyAgIChtZXJnZSBlMGU3Y2I4MDgwIHRiL2xvZy1HLWJpbmFyeSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgb3VnaHQgdG8gdXNlIGEgc2luZ2xlIGpvYiB1bmxlc3MgYXNrZWQsIGJ1dAorICAgYnkgbWlzdGFrZSB1c2VkIG11bHRpcGxlIGpvYnMsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGUzYTlkMWFjYTkgc2Ivc3VibW9kdWxlLWZldGNoam9icy1kZWZhdWx0LXRvLW9uZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3RyaXBzcGFjZSIgc2hvdWxkIGJlIHVzYWJsZSBvdXRzaWRlIGEgZ2l0IHJlcG9zaXRvcnksIGJ1dAorICAgdW5kZXIgdGhlICItcyIgb3IgIi1jIiBtb2RlLCBpdCBkaWRuJ3QuCisgICAobWVyZ2UgOTU3ZGE3NTgwMiBqbi9zdHJpcHNwYWNlLXdvLXJlcG9zaXRvcnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIG9mIHRoZSBkb2N1bWVudGF0aW9uIHBhZ2VzIGZvcm1hdHRlZCBpbmNvcnJlY3RseSB3aXRoCisgICBBc2NpaWRvY3Rvciwgd2hpY2ggaGF2ZSBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGI2MmViMWQyZjQgbWEvYXNjaWlkb2N0b3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29yZS53b3JrdHJlZSBzZXR0aW5nIGluIGEgc3VibW9kdWxlIHJlcG9zaXRvcnkgc2hvdWxkIG5vdCBiZQorICAgcG9pbnRpbmcgYXQgYSBkaXJlY3Rvcnkgd2hlbiB0aGUgc3VibW9kdWxlIGxvc2VzIGl0cyB3b3JraW5nIHRyZWUKKyAgIChlLmcuIGdldHRpbmcgZGVpbml0J2VkKSwgYnV0IHRoZSBjb2RlIGRpZCBub3QgcHJvcGVybHkgbWFpbnRhaW4KKyAgIHRoaXMgaW52YXJpYW50LgorCisgKiBXaXRoIHpzaCwgImdpdCBjbWQgcGF0aDxUQUI+IiB3YXMgY29tcGxldGVkIHRvICJnaXQgY21kIHBhdGggbmFtZSIKKyAgIHdoZW4gdGhlIGNvbXBsZXRlZCBwYXRoIGhhcyBhIHNwZWNpYWwgY2hhcmFjdGVyIGxpa2UgU1AgaW4gaXQsCisgICB3aXRob3V0IGFueSBhdHRlbXB0IHRvIGtlZXAgInBhdGggbmFtZSIgYSBzaW5nbGUgZmlsZW5hbWUuICBUaGlzCisgICBoYXMgYmVlbiBmaXhlZCB0byBjb21wbGV0ZSBpdCB0byAiZ2l0IGNtZCBwYXRoXCBuYW1lIiBqdXN0IGxpa2UKKyAgIEJhc2ggY29tcGxldGlvbiBkb2VzLgorCisgKiBUaGUgdGVzdCBzdWl0ZSB0cmllZCB0byBzZWUgaWYgaXQgaXMgcnVuIHVuZGVyIGJhc2gsIGJ1dCB0aGUgY2hlY2sKKyAgIGl0c2VsZiBmYWlsZWQgdW5kZXIgc29tZSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2Ygc2hlbGwgKG5vdGFibHkKKyAgIHVuZGVyIE5ldEJTRCkuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA1NGVhNzJmMDljIHNnL3Rlc3QtYmFzaC12ZXJzaW9uLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZ2MiIGFuZCAiZ2l0IHJlcGFjayIgZGlkIG5vdCBjbG9zZSB0aGUgb3BlbiBwYWNrZmlsZXMgdGhhdAorICAgdGhleSBmb3VuZCB1bm5lZWRlZCBiZWZvcmUgcmVtb3ZpbmcgdGhlbSwgd2hpY2ggZGlkbid0IHdvcmsgb24gYQorICAgcGxhdGZvcm0gaW5jYXBhYmxlIG9mIHJlbW92aW5nIGFuIG9wZW4gZmlsZS4gIFRoaXMgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA1YmRlY2UwZDcwIGpzL2djLXJlcGFjay1jbG9zZS1iZWZvcmUtcmVtb3ZlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdG8gZHJpdmUgR0lUX0VYVEVSTkFMX0RJRkYgY29tbWFuZCByZWxpZWQgb24gdGhlIHN0cmluZworICAgcmV0dXJuZWQgZnJvbSBnZXRlbnYoKSB0byBiZSBub24tdm9sYXRpbGUsIHdoaWNoIGlzIG5vdCB0cnVlLCB0aGF0CisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNjc3NmE4NGRhZSBrZy9leHRlcm5hbC1kaWZmLXNhdmUtZW52IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlcmUgd2VyZSBtYW55IHBsYWNlcyB0aGUgY29kZSByZWxpZWQgb24gdGhlIHN0cmluZyByZXR1cm5lZCBmcm9tCisgICBnZXRlbnYoKSB0byBiZSBub24tdm9sYXRpbGUsIHdoaWNoIGlzIG5vdCB0cnVlLCB0aGF0IGhhdmUgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIDBkYTBlOTI2OGIgamsvc2F2ZS1nZXRlbnYtcmVzdWx0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHYyIHVwbG9hZC1wYWNrIHByb3RvY29sIGltcGxlbWVudGF0aW9uIGZhaWxlZCB0byBob25vcgorICAgaGlkZGVuLXJlZiBjb25maWd1cmF0aW9uLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZTIwYjQxOTJhMyBqay9wcm90by12Mi1oaWRkZW4tcmVmcy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBtYXkgbm90IGZldGNoIHRoZSBuZWNlc3NhcnkgY29tbWl0CisgICB0aGF0IGlzIGJvdW5kIHRvIHRoZSBzdXBlcnByb2plY3QsIHdoaWNoIGlzIGdldHRpbmcgY29ycmVjdGVkLgorICAgKG1lcmdlIGJlNzZjMjEyODIgc2Ivc3VibW9kdWxlLXJlY3Vyc2l2ZS1mZXRjaC1nZXRzLXRoZS10aXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSIgaW50ZXJuYWxseSBydW5zICJjaGVja291dCIgdG8gc3dpdGNoIGJldHdlZW4gYnJhbmNoZXMsCisgICBhbmQgdGhlIGNvbW1hbmQgdXNlZCB0byBjYWxsIHRoZSBwb3N0LWNoZWNrb3V0IGhvb2ssIGJ1dCB0aGUKKyAgIHJlaW1wbGVtZW50YXRpb24gc3RvcHBlZCBkb2luZyBzbywgd2hpY2ggaXMgZ2V0dGluZyBmaXhlZC4KKworICogImdpdCBhZGQgLWUiIGdvdCBjb25mdXNlZCB3aGVuIHRoZSBjaGFuZ2UgaXQgd2FudHMgdG8gbGV0IHRoZSB1c2VyCisgICBlZGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgcHJldmlvdXMgY2hhbmdlIHRoYXQgd2FzIGxlZnQgb3ZlciBpbiBhCisgICB0ZW1wb3JhcnkgZmlsZS4KKyAgIChtZXJnZSBmYTZmMjI1ZTAxIGpzL2FkZC1lLWNsZWFyLXBhdGNoLWJlZm9yZS1zdGF0aW5nIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwNCIgZmFpbGVkIHRvIHVwZGF0ZSBhIHNoZWx2ZWQgY2hhbmdlIHdoZW4gdGhlcmUgd2VyZSBtb3ZlZAorICAgZmlsZXMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA3YTEwOTQ2YWI5IGxkL2dpdC1wNC1zaGVsdmUtdXBkYXRlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlcGF0aCB0byByZWFkIGZyb20gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIGF0dGVtcHRlZCB0byByZWFkCisgICBwYXN0IHRoZSBlbmQgb2YgaXQgd2hlbiB0aGUgZmlsZSdzIHRhYmxlLW9mLWNvbnRlbnRzIHdhcyBjb3JydXB0LgorCisgKiBUaGUgY29tcGF0L29ic3RhY2sgY29kZSBoYWQgY2FzdHMgdGhhdCAtV2Nhc3QtZnVuY3Rpb24tdHlwZQorICAgY29tcGlsYXRpb24gb3B0aW9uIGZvdW5kIHF1ZXN0aW9uYWJsZS4KKyAgIChtZXJnZSA3NjQ0NzNkMjU3IHNnL29ic3RhY2stY2FzdC1mdW5jdGlvbi10eXBlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIG9idmlvdXMgdHlwbyBpbiBhbiBhc3NlcnRpb24gZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSAzYzI3ZTJlMDU5IGNjL3Rlc3QtcmVmLXN0b3JlLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbiBHaXQgZm9yIFdpbmRvd3MsICJnaXQgY2xvbmUgXFxzZXJ2ZXJcc2hhcmVccGF0aCIgZXRjLiB0aGF0IHVzZXMKKyAgIFVOQyBwYXRocyBmcm9tIGNvbW1hbmQgbGluZSBoYWQgYmFkIGludGVyYWN0aW9uIHdpdGggaXRzIHNoZWxsCisgICBlbXVsYXRpb24uCisKKyAqICJnaXQgYWRkIC0taWdub3JlLWVycm9ycyIgZGlkIG5vdCB3b3JrIGFzIGFkdmVydGlzZWQgYW5kIGluc3RlYWQKKyAgIHdvcmtlZCBhcyBhbiB1bmludGVuZGVkIHN5bm9ueW0gZm9yICJnaXQgYWRkIC0tcmVub3JtYWxpemUiLCB3aGljaAorICAgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZTJjMmEzNzU0NSBqay9hZGQtaWdub3JlLWVycm9ycy1iaXQtYXNzaWdubWVudC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSwgd2UgZmFpbGVkIHRvIGNvbXBhcmUgdGhlIHBhcnQgb2YKKyAgIHRoZSBwYXRoIHRoYXQgaXMgYWJvdmUgdGhlIHdvcmt0cmVlIGRpcmVjdG9yeSBpbiBhbiBhYnNvbHV0ZQorICAgcGF0aG5hbWUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQXNraW5nICJnaXQgY2hlY2stYXR0ciIgYWJvdXQgYSBtYWNybyAoZS5nLiAiYmluYXJ5Iikgb24gYSBzcGVjaWZpYworICAgcGF0aCBkaWQgbm90IHdvcmsgY29ycmVjdGx5LCBldmVuIHRob3VnaCAiZ2l0IGNoZWNrLWF0dHIgLWEiIGxpc3RlZAorICAgc3VjaCBhIG1hY3JvIGNvcnJlY3RseS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDdiOTU4NDliZTQgamsvYXR0ci1tYWNyby1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgaW5jb3JyZWN0bHkgdXNlZCB1bmluaXRpYWxpemVkIG11dGV4LCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGVkYjY3M2NmMTAgcGgvcGFjay1vYmplY3RzLW11dGV4LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2tvdXQgLWIgPG5ldz4gW0hFQURdIiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGZyb20gdGhlCisgICBjdXJyZW50IGNvbW1pdCBhbmQgY2hlY2sgaXQgb3V0IG91Z2h0IHRvIGJlIGEgbm8tb3AgaW4gdGhlIGluZGV4CisgICBhbmQgdGhlIHdvcmtpbmcgdHJlZSBpbiBub3JtYWwgY2FzZXMsIGJ1dCB0aGVyZSBhcmUgY29ybmVyIGNhc2VzCisgICB0aGF0IGRvIHJlcXVpcmUgdXBkYXRlcyB0byB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUuICBSdW5uaW5nCisgICBpdCBpbW1lZGlhdGVseSBhZnRlciAiZ2l0IGNsb25lIC0tbm8tY2hlY2tvdXQiIGlzIG9uZSBvZiB0aGVzZQorICAgY2FzZXMgdGhhdCBhbiBlYXJsaWVyIG9wdGltaXphdGlvbiBraWNrZWQgaW4gaW5jb3JyZWN0bHksIHdoaWNoIGhhcworICAgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA4NDI0YmZkNDViIGJwL2NoZWNrb3V0LW5ldy1icmFuY2gtb3B0aW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1jb2xvci1tb3ZlZCAtLWNjIC0tc3RhdCAtcCIgZGlkIG5vdCB3b3JrIHdlbGwgZHVlIHRvCisgICBmdW5ueSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGEgYnVnIGluIGNvbG9yLW1vdmVkIGFuZCB0aGUgcmVzdCwgd2hpY2gKKyAgIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGRhYzAzYjU1MTggamsvZGlmZi1jYy1zdGF0LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiBHSVRfU0VRVUVOQ0VfRURJVE9SIGlzIHNldCwgdGhlIGNvbW1hbmQgd2FzIGluY29ycmVjdGx5CisgICBzdGFydGVkIHdoZW4gbW9kZXMgb2YgImdpdCByZWJhc2UiIHRoYXQgaW1wbGljaXRseSB1c2VzIHRoZQorICAgbWFjaGluZXJ5IGZvciB0aGUgaW50ZXJhY3RpdmUgcmViYXNlIGFyZSBydW4sIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgODkxZDRhMDMxMyBwdy9uby1lZGl0b3ItaW4tcmViYXNlLWktaW1wbGljaXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29tbWl0LWdyYXBoIGZhY2lsaXR5IGRpZCBub3Qgd29yayB3aGVuIGluLWNvcmUgb2JqZWN0cyB0aGF0CisgICBhcmUgcHJvbW90ZWQgZnJvbSB1bmtub3duIHR5cGUgdG8gY29tbWl0IChlLmcuIGEgY29tbWl0IHRoYXQgaXMKKyAgIGFjY2Vzc2VkIHZpYSBhIHRhZyB0aGF0IHJlZmVycyB0byBpdCkgd2VyZSBpbnZvbHZlZCwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA0NDY4ZDQ0MzVjIHNnL29iamVjdC1hcy10eXBlLWNvbW1pdC1ncmFwaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoIiBvdXRwdXQgY2xlYW51cC4KKyAgIChtZXJnZSBkYzQwYjI0ZGY0IG5kL2ZldGNoLWNvbXBhY3QtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoIiByZXBvcnRlZCBhIGRhbmdsaW5nIHN5bWJvbGljIGxpbmsgYnkKKyAgIG1pc3Rha2UsIHdoZW4gaXQgd2FudGVkIHRvIHJlcG9ydCB0aGF0IGEgZ2l2ZW4gbmFtZSBpcyBhbWJpZ3VvdXMuCisKKyAqIERvY3VtZW50YXRpb24gYXJvdW5kIGNvcmUuY3JsZiBoYXMgYmVlbiB1cGRhdGVkLgorICAgKG1lcmdlIGM5NDQ2ZjA1MDQgamsvYXV0b2NybGYtb3ZlcnJpZGVzLWVvbC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiAiZ2l0IGNvbW1pdC10cmVlIiBzYWlkIHRoYXQgdGhlIGNvbW1hbmQKKyAgIHVuZGVyc3RhbmRzICItLWdwZy1zaWduIiBpbiBhZGRpdGlvbiB0byAiLVMiLCBidXQgdGhlIGNvbW1hbmQgbGluZQorICAgcGFyc2VyIGRpZCBub3Qga25vdyBhYm91dCB0aGUgbG9uZ2hhbmQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCByZWJhc2UgLXggJGNtZCIgZGlkIG5vdCByZWplY3QgbXVsdGktbGluZSBjb21tYW5kLCBldmVuIHRob3VnaAorICAgdGhlIGNvbW1hbmQgaXMgaW5jYXBhYmxlIG9mIGhhbmRsaW5nIHN1Y2ggYSBjb21tYW5kLiAgSXQgbm93IGlzCisgICByZWplY3RlZCB1cGZyb250LgorICAgKG1lcmdlIGM3NjJhYWRhMWEgcHcvcmViYXNlLXgtc2FuaXR5LWNoZWNrIGxhdGVyIHRvIG1haW50KS4KKworICogT3V0cHV0IGZyb20gImdpdCBoZWxwIiB3YXMgbm90IGNvcnJlY3RseSBhbGlnbmVkLCB3aGljaCBoYXMgYmVlbgorICAgZml4ZWQuCisgICAobWVyZ2UgNjE5NWE3NmRhNCBuZC9oZWxwLWFsaWduLWNvbW1hbmQtZGVzYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAiZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IiBzdWJjb21tYW5kIHNob3dlZCBzaG9ydGVuZWQgY29tbWl0CisgICBvYmplY3QgbmFtZXMgYnkgbWVjaGFuaWNhbGx5IHRydW5jYXRpbmcgdGhlbSBhdCA3LWhleGRpZ2l0LCB3aGljaAorICAgaGFzIGJlZW4gaW1wcm92ZWQgdG8gbGV0ICJyZXYtcGFyc2UgLS1zaG9ydCIgc2NhbGUgdGhlIGxlbmd0aCBvZgorICAgdGhlIGFiYnJldmlhdGlvbiB3aXRoIHRoZSBzaXplIG9mIHRoZSByZXBvc2l0b3J5LgorICAgKG1lcmdlIDA1ODZhNDM4ZjYgc2gvc3VibW9kdWxlLXN1bW1hcnktYWJicmV2LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB3YXkgdGhlIE9TWCBidWlsZCBqb2JzIHVwZGF0ZXMgaXRzIGJ1aWxkIGVudmlyb25tZW50IHVzZWQgdGhlCisgICAiLS1xdWlldCIgb3B0aW9uIHRvICJicmV3IHVwZGF0ZSIgY29tbWFuZCwgYnV0IGl0IHdhc24ndCBhbGwgdGhhdAorICAgcXVpZXQgdG8gYmUgdXNlZnVsLiAgVGhlIHVzZSBvZiB0aGUgb3B0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKKyAgIGFuIGV4cGxpY2l0IHJlZGlyZWN0aW9uIHRvIHRoZSAvZGV2L251bGwgKHdoaWNoIGluY2lkZW50YWxseSB3b3VsZAorICAgaGF2ZSB3b3JrZWQgYXJvdW5kIGEgYnJlYWthZ2UgYnkgcmVjZW50IHVwZGF0ZXMgdG8gaG9tZWJyZXcsIHdoaWNoCisgICBoYXMgZml4ZWQgaXRzZWxmIGFscmVhZHkpLgorICAgKG1lcmdlIGExY2NhZWRkNjIgc2cvdHJhdmlzLW9zeC1icmV3LWJyZWFrYWdlLXdvcmthcm91bmQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IC0td29yay10cmVlPSR0aGVyZSAtLWdpdC1kaXI9JGhlcmUgZGVzY3JpYmUgLS1kaXJ0eSIgZGlkIG5vdAorICAgd29yayBjb3JyZWN0bHkgYXMgaXQgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgIHdvcmt0cmVlIHNwZWNpZmllZCBieSB0aGUgdXNlciBieSBtaXN0YWtlLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIGM4MDExNzBiMGMgc3MvZGVzY3JpYmUtZGlydHktaW4tdGhlLXJpZ2h0LWRpcmVjdG9yeSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgcHJvdG9jb2wgdjIgdGhhdCBuZWVkcyB0byBtYWtlIGEgc2Vjb25kIGNvbm5lY3Rpb24KKyAgIHRvIGJhY2tmaWxsIHRhZ3MgZGlkIG5vdCBjbGVhciBhIHZhcmlhYmxlIHRoYXQgaG9sZHMgc2hhbGxvdworICAgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiBjb3JyZWN0bHksIGxlYWRpbmcgdG8gYW4gYWNjZXNzIG9mIGZyZWVkCisgICBwaWVjZSBvZiBtZW1vcnkuCisKKyAqIFNvbWUgZXJyb3JzIGZyb20gdGhlIG90aGVyIHNpZGUgY29taW5nIG92ZXIgc21hcnQgSFRUUCB0cmFuc3BvcnQKKyAgIHdlcmUgbm90IG5vdGljZWQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQ29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIDg5YmE5YTc5YWUgaGIvdDAwNjEtZG90LWluLXBhdGgtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkMTczZTc5OWVhIHNiL2RpZmYtY29sb3ItbW92ZWQtY29uZmlnLW9wdGlvbi1maXh1cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYThmNWE1OTA2NyBlbi9kaXJlY3RvcnktcmVuYW1lcy1ub3RoYW5rcy1kb2MtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlYzM2YzQyYTYzIG5kL2luZGVudGF0aW9uLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjExNmVlMjFjZCBkby9naXR3ZWItc3RyaWN0LWV4cG9ydC1jb25mLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTEyZWE0MjY2MyBmZC9naXR3ZWItc25hcHNob3QtY29uZi1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxY2FkYWQ2ZjY1IHRiL3VzZS1jb21tb24td2luMzItcGF0aGZ1bmNzLW9uLWN5Z3dpbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTdlOWRjYWE2NSBrbS9yZWJhc2UtZG9jLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI4YjRjYjI3ZTYgZHMvZ2MtZG9jLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDNiMzM1NzYyNmUgbmQvc3R5bGUtb3BlbmluZy1icmFjZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYjQ1ODNkNTU5NSBlcy9kb2Mtd29ya3RyZWUtZ3Vlc3NyZW1vdGUtY29uZmlnIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjY2U5OWNkOGM2IGRzL2NvbW1pdC1ncmFwaC1hc3NlcnQtbWlzc2luZy1wYXJlbnRzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwNjUwNjE0OTgyIGN5L2NvbXBsZXRpb24tdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjg4MTkyNWVmNSBycy9zaGExLWZpbGUtY2xvc2UtbWFwcGVkLWZpbGUtb24tZXJyb3IgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJkOGQ2ZjBkZWYgZW4vc2hvdy1yZWYtZG9jLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTc0NzEyNWUyYyBjYy9wYXJ0aWFsLWNsb25lLWRvYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlMDEzNzg3NTNkIGNjL2ZldGNoLWVycm9yLW1lc3NhZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NGU4YzExMjE1IGprL3JlbW90ZS1pbnN0ZWFkb2YtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDYwOTYxNWY0OCBqcy90ZXN0LWdpdC1pbnN0YWxsZWQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJhMTcwNTE3YmUgamEvZG9jLXN0eWxlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODZmYjFjNGU3NyBrbS9pbml0LWRvYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1Y2ZkNGE5ZDEwIG5kL2NvbW1pdC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDlmY2UxOWE0MzEgYWIvZGlmZi10cmVlLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJlMjg1ZTc4MDMgdHovZ3BnLXRlc3QtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NDI3ZGU5NjBiIGtsL3ByZXR0eS1kb2MtbWFya3VwLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzgxNWY2NGIwZCBqcy9taW5ndy1ob3N0LWNwdSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWZlODE0MzhiNSByai9zZXF1ZW5jZXItc2lnbi1vZmYtaGVhZGVyLXN0YXRpYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMThhNGY2YmU2YiBuZC9maWxlbm8tbWF5LWJlLW1hY3JvIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5OWU5YWI1NGFiIGtkL3QwMDI4LW9jdGFsLWRlbC1pcy0zNzctbm90LTc3NyBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc1OTQxNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMS4xLnR4dApAQCAtMCwwICsxLDEyIEBACitHaXQgdjIuMjEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYsIHYyLjE1LjQsCit2Mi4xNy4zIGFuZCBpbiB2Mi4yMC4yLCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMgQ1ZFLTIwMTktMTM0OCwKK0NWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsIENWRS0yMDE5LTEzNTIsCitDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBDVkUtMjAxOS0xMzg3LCBhbmQgQ1ZFLTIwMTktMTk2MDQ7CitzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgorCitBZGRpdGlvbmFsbHksIHRoaXMgdmVyc2lvbiBhbHNvIGluY2x1ZGVzIGEgY291cGxlIG9mIGZpeGVzIGZvciB0aGUKK1dpbmRvd3Mtc3BlY2lmaWMgcXVvdGluZyBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHdoZW4gR2l0IGV4ZWN1dGVzCithIFVuaXggc2hlbGwgb24gV2luZG93cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMi4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMi4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWU2YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjAudHh0CkBAIC0wLDAgKzEsNTk3IEBACitHaXQgMi4yMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuMjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlCisKKyAqIFRoZSBmaWx0ZXIgc3BlY2lmaWNhdGlvbiAiLS1maWx0ZXI9c3BhcnNlOnBhdGg9PHBhdGg+IiB1c2VkIHRvCisgICBjcmVhdGUgYSBsYXp5L3BhcnRpYWwgY2xvbmUgaGFzIGJlZW4gcmVtb3ZlZC4gIFVzaW5nIGEgYmxvYiB0aGF0IGlzCisgICBwYXJ0IG9mIHRoZSBwcm9qZWN0IGFzIHNwYXJzZSBzcGVjaWZpY2F0aW9uIGlzIHN0aWxsIHN1cHBvcnRlZCB3aXRoCisgICB0aGUgIi0tZmlsdGVyPXNwYXJzZTpvaWQ9PGJsb2I+IiBvcHRpb24uCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiAiZ2l0IGNoZWNrb3V0IC0tbm8tb3ZlcmxheSIgY2FuIGJlIHVzZWQgdG8gdHJpZ2dlciBhIG5ldyBtb2RlIG9mCisgICBjaGVja2luZyBvdXQgcGF0aHMgb3V0IG9mIHRoZSB0cmVlLWlzaCwgdGhhdCBhbGxvd3MgcGF0aHMgdGhhdAorICAgbWF0Y2ggdGhlIHBhdGhzcGVjIHRoYXQgYXJlIGluIHRoZSBjdXJyZW50IGluZGV4IGFuZCB3b3JraW5nIHRyZWUKKyAgIGFuZCBhcmUgbm90IGluIHRoZSB0cmVlLWlzaC4KKworICogVGhlICUodHJhaWxlcnMpIGZvcm1hdHRlciBpbiAiZ2l0IGxvZyAtLWZvcm1hdD0uLi4iICBub3cgYWxsb3dzIHRvCisgICBvcHRpb25hbGx5IHBpY2sgdHJhaWxlcnMgc2VsZWN0aXZlbHkgYnkga2V5d29yZCwgc2hvdyBvbmx5IHZhbHVlcywKKyAgIGV0Yy4KKworICogRm91ciBuZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMge2F1dGhvcixjb21taXR0ZXJ9LntuYW1lLGVtYWlsfQorICAgaGF2ZSBiZWVuIGludHJvZHVjZWQgdG8gb3ZlcnJpZGUgdXNlci57bmFtZSxlbWFpbH0gaW4gbW9yZSBzcGVjaWZpYworICAgY2FzZXMuCisKKyAqIENvbW1hbmQtbGluZSBjb21wbGV0aW9uIChpbiBjb250cmliLykgbGVhcm5lZCB0byB0YWItY29tcGxldGUgdGhlCisgICAiZ2l0IHN1Ym1vZHVsZSBhYnNvcmJnaXRkaXJzIiBzdWJjb21tYW5kLgorCisgKiAiZ2l0IGJyYW5jaCIgbGVhcm5lZCBhIG5ldyBzdWJjb21tYW5kICItLXNob3ctY3VycmVudCIuCisKKyAqIE91dHB1dCBmcm9tICJkaWZmIC0tY2MiIGRpZCBub3Qgc2hvdyB0aGUgb3JpZ2luYWwgcGF0aHMgd2hlbiB0aGUKKyAgIG1lcmdlIGludm9sdmVkIHJlbmFtZXMuICBBIG5ldyBvcHRpb24gYWRkcyB0aGUgcGF0aHMgaW4gdGhlCisgICBvcmlnaW5hbCB0cmVlcyB0byB0aGUgb3V0cHV0LgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB0YXVnaHQgdG8KKyAgIGNvbXBsZXRlIG1vcmUgc3ViY29tbWFuZCBwYXJhbWV0ZXJzLgorCisgKiBUaGUgZmluYWwgcmVwb3J0IGZyb20gImdpdCBiaXNlY3QiIHVzZWQgdG8gc2hvdyB0aGUgc3VzcGVjdGVkCisgICBjdWxwcml0IHVzaW5nIGEgcmF3ICJkaWZmLXRyZWUiLCB3aXRoIHdoaWNoIHRoZXJlIGlzIG5vIG91dHB1dCBmb3IKKyAgIGEgbWVyZ2UgY29tbWl0LiAgVGhpcyBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSBhIG1vcmUgbW9kZXJuIGFuZAorICAgaHVtYW4gcmVhZGFibGUgb3V0cHV0IHRoYXQgc3RpbGwgaXMgY29uY2lzZSBlbm91Z2guCisKKyAqICJnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyIgcmVwbGFjZXMgaXRzIG9sZCAiLS1wcmVzZXJ2ZS1tZXJnZXMiCisgICBvcHRpb247IHRoZSBsYXR0ZXIgaXMgbm93IG1hcmtlZCBhcyBkZXByZWNhdGVkLgorCisgKiBFcnJvciBtZXNzYWdlIGdpdmVuIHdoaWxlIGNsb25pbmcgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBoYXMKKyAgIGJlZW4gdXBkYXRlZC4KKworICogVGhlIGNvbXBsZXRpb24gaGVscGVyIGNvZGUgbm93IHBheXMgYXR0ZW50aW9uIHRvIHJlcG9zaXRvcnktbG9jYWwKKyAgIGNvbmZpZ3VyYXRpb24gKHdoZW4gYXZhaWxhYmxlKSwgd2hpY2ggYWxsb3dzIC0tbGlzdC1jbWRzIHRvIGhvbm91cgorICAgYSByZXBvc2l0b3J5IHNwZWNpZmljIHNldHRpbmcgb2YgY29tcGxldGlvbi5jb21tYW5kcywgZm9yIGV4YW1wbGUuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIG9mZmVyIFN1YmxpbWUgTWVyZ2UgKHNtZXJnZSkgYXMgb25lIG9mCisgICBpdHMgYmFja2VuZHMuCisKKyAqIEEgbmV3IGhvb2sgInBvc3QtaW5kZXgtY2hhbmdlIiBpcyBjYWxsZWQgd2hlbiB0aGUgb24tZGlzayBpbmRleAorICAgZmlsZSBjaGFuZ2VzLCB3aGljaCBjYW4gaGVscCBlLmcuIGEgdmlydHVhbGl6ZWQgd29ya2luZyB0cmVlCisgICBpbXBsZW1lbnRhdGlvbi4KKworICogImdpdCBkaWZmdG9vbCIgY2FuIG5vdyBydW4gb3V0c2lkZSBhIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0gPG90aGVyPiIgd2FzIGFib3V0IGNhcnJ5aW5nIHRoZSBkaWZmZXJlbmNlcworICAgYmV0d2VlbiBIRUFEIGFuZCB0aGUgd29ya2luZy10cmVlIGZpbGVzIGZvcndhcmQgd2hpbGUgY2hlY2tpbmcgb3V0CisgICBhbm90aGVyIGJyYW5jaCwgYW5kIGlnbm9yZWQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gSEVBRCBhbmQgdGhlCisgICBpbmRleC4gIFRoZSBjb21tYW5kIGhhcyBiZWVuIHRhdWdodCB0byBhYm9ydCB3aGVuIHRoZSBpbmRleCBhbmQgdGhlCisgICBIRUFEIGFyZSBkaWZmZXJlbnQuCisKKyAqIEEgcHJvZ3Jlc3MgaW5kaWNhdG9yIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSAiaW5kZXgtcGFjayIgc3RlcCwgd2hpY2gKKyAgIG9mdGVuIG1ha2VzIHVzZXJzIHdhaXQgZm9yIGNvbXBsZXRpb24gZHVyaW5nICJnaXQgY2xvbmUiLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5zICJzZXQtYnJhbmNoIiBzdWJjb21tYW5kIHRoYXQgYWxsb3dzIHRoZQorICAgc3VibW9kdWxlLiouYnJhbmNoIHNldHRpbmdzIHRvIGJlIG1vZGlmaWVkLgorCisgKiAiZ2l0IG1lcmdlLXJlY3Vyc2l2ZSIgYmFja2VuZCByZWNlbnRseSBsZWFybmVkIGEgbmV3IGhldXJpc3RpY3MgdG8KKyAgIGluZmVyIGZpbGUgbW92ZW1lbnQgYmFzZWQgb24gaG93IG90aGVyIGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgbW92ZWQuICBBcyB0aGlzIGlzIGluaGVyZW50bHkgbGVzcyByb2J1c3QgaGV1cmlzdGljcyB0aGFuIHRoZSBvbmUKKyAgIGJhc2VkIG9uIHRoZSBjb250ZW50IHNpbWlsYXJpdHkgb2YgdGhlIGZpbGUgaXRzZWxmIChyYXRoZXIgdGhhbgorICAgYmFzZWQgb24gd2hhdCBpdHMgbmVpZ2hib3VycyBhcmUgZG9pbmcpLCBpdCBzb21ldGltZXMgZ2l2ZXMgYW4KKyAgIG91dGNvbWUgdW5leHBlY3RlZCBieSB0aGUgZW5kIHVzZXJzLiAgVGhpcyBoYXMgYmVlbiB0b25lZCBkb3duIHRvCisgICBsZWF2ZSB0aGUgcmVuYW1lZCBwYXRocyBpbiBoaWdoZXIvY29uZmxpY3RlZCBzdGFnZXMgaW4gdGhlIGluZGV4IHNvCisgICB0aGF0IHRoZSB1c2VyIGNhbiBleGFtaW5lIGFuZCBjb25maXJtIHRoZSByZXN1bHQuCisKKyAqICJnaXQgdGFnIiBsZWFybmVkIHRvIGdpdmUgYW4gYWR2aWNlIHN1Z2dlc3RpbmcgaXQgbWlnaHQgYmUgYQorICAgbWlzdGFrZSB3aGVuIGNyZWF0aW5nIGFuIGFubm90YXRlZCBvciBzaWduZWQgdGFnIHRoYXQgcG9pbnRzIGF0CisgICBhbm90aGVyIHRhZy4KKworICogVGhlICJnaXQgcGFjay1vYmplY3RzIiBjb21tYW5kIGxlYXJuZWQgdG8gcmVwb3J0IHRoZSBudW1iZXIgb2YKKyAgIG9iamVjdHMgaXQgcGFja2VkIHZpYSB0aGUgdHJhY2UyIG1lY2hhbmlzbS4KKworICogVGhlIGxpc3Qgb2YgY29uZmxpY3RlZCBwYXRocyBzaG93biBpbiB0aGUgZWRpdG9yIHdoaWxlIGNvbmNsdWRpbmcgYQorICAgY29uZmxpY3RlZCBtZXJnZSB3YXMgc2hvd24gYWJvdmUgdGhlIHNjaXNzb3JzIGxpbmUgd2hlbiB0aGUKKyAgIGNsZWFuLXVwIG1vZGUgaXMgc2V0IHRvICJzY2lzc29ycyIsIGV2ZW4gdGhvdWdoIGl0IHdhcyBjb21tZW50ZWQKKyAgIG91dCBqdXN0IGxpa2UgdGhlIGxpc3Qgb2YgdXBkYXRlZCBwYXRocyBhbmQgb3RoZXIgaW5mb3JtYXRpb24gdG8KKyAgIGhlbHAgdGhlIHVzZXIgZXhwbGFpbiB0aGUgbWVyZ2UgYmV0dGVyLgorCisgKiBUaGUgdHJhY2UyIHRyYWNpbmcgZmFjaWxpdHkgbGVhcm5lZCB0byBhdXRvLWdlbmVyYXRlIGEgZmlsZW5hbWUKKyAgIHdoZW4gdG9sZCB0byBsb2cgdG8gYSBkaXJlY3RvcnkuCisKKyAqICJnaXQgY2xvbmUiIGxlYXJuZWQgYSBuZXcgLS1zZXJ2ZXItb3B0aW9uIG9wdGlvbiB3aGVuIHRhbGtpbmcgb3ZlcgorICAgdGhlIHByb3RvY29sIHZlcnNpb24gMi4KKworICogVGhlIGNvbm5lY3Rpdml0eSBiaXRtYXBzIGFyZSBjcmVhdGVkIGJ5IGRlZmF1bHQgaW4gYmFyZQorICAgcmVwb3NpdG9yaWVzIG5vdzsgYWxzbyB0aGUgcGF0aG5hbWUgaGFzaC1jYWNoZSBpcyBjcmVhdGVkIGJ5CisgICBkZWZhdWx0IHRvIGF2b2lkIG1ha2luZyBjcmFwcHkgZGVsdGFzIHdoZW4gcmVwYWNraW5nLgorCisgKiAiZ2l0IGJyYW5jaCBuZXcgQS4uLkIiIGFuZCAiZ2l0IGNoZWNrb3V0IC1iIG5ldyBBLi4uQiIgaGF2ZSBiZWVuCisgICB0YXVnaHQgdGhhdCBpbiB0aGVpciBjb250ZXh0cywgdGhlIG5vdGF0aW9uIEEuLi5CIG1lYW5zICJ0aGUgbWVyZ2UKKyAgIGJhc2UgYmV0d2VlbiB0aGVzZSB0d28gY29tbWl0cyIsIGp1c3QgbGlrZSAiZ2l0IGNoZWNrb3V0IEEuLi5CIgorICAgZGV0YWNoZXMgSEVBRCBhdCB0aGF0IGNvbW1pdC4KKworICogVXBkYXRlICJnaXQgZGlmZnRvb2wiIGFuZCAiZ2l0IG1lcmdldG9vbCIgc28gdGhhdCB0aGUgY29tYmluYXRpb25zCisgICBvZiB7ZGlmZixtZXJnZX0ue3Rvb2wsZ3VpdG9vbH0gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgc2VydmUgYXMKKyAgIGZhbGxiYWNrIHNldHRpbmdzIG9mIGVhY2ggb3RoZXIgaW4gYSBzZW5zaWJsZSBvcmRlci4KKworICogVGhlICItLWRpci1kaWZmIiBtb2RlIG9mICJnaXQgZGlmZnRvb2wiIGlzIG5vdCB1c2VmdWwgaW4gIi0tbm8taW5kZXgiCisgICBtb2RlOyB0aGV5IGFyZSBub3cgZXhwbGljaXRseSBtYXJrZWQgYXMgbXV0dWFsbHkgaW5jb21wYXRpYmxlLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFRoZSBkaWZmIG1hY2hpbmVyeSwgb25lIG9mIHRoZSBvbGRlc3QgcGFydHMgb2YgdGhlIHN5c3RlbSwgd2hpY2gKKyAgIGxvbmcgcHJlZGF0ZXMgdGhlIHBhcnNlLW9wdGlvbnMgQVBJLCB1c2VzIGZhaXJseSBsb25nIGFuZCBjb21wbGV4CisgICBoYW5kY3JhZnRlZCBvcHRpb24gcGFyc2VyLiAgVGhpcyBpcyBiZWluZyByZXdyaXR0ZW4gdG8gdXNlIHRoZQorICAgcGFyc2Utb3B0aW9ucyBBUEkuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBwYWNrLXJlZHVuZGFudCBoYXMgYmVlbiB1cGRhdGVkIGZvcgorICAgcGVyZm9ybWFuY2UgaW4gYSByZXBvc2l0b3J5IHdpdGggbWFueSBwYWNrZmlsZXMuCisKKyAqIEEgbW9yZSBzdHJ1Y3R1cmVkIHdheSB0byBvYnRhaW4gZXhlY3V0aW9uIHRyYWNlIGhhcyBiZWVuIGFkZGVkLgorCisgKiAiZ2l0IHBydW5lIiBoYXMgYmVlbiB0YXVnaHQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgcmVhY2hhYmlsaXR5CisgICBiaXRtYXAgd2hlbiBhYmxlLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIHBhcnNlciBvZiAiZ2l0IGNvbW1pdC10cmVlIiBoYXMgYmVlbiByZXdyaXR0ZW4gdG8KKyAgIHVzZSB0aGUgcGFyc2Utb3B0aW9ucyBBUEkuCisKKyAqIFN1Z2dlc3QgR2l0R2l0R2FkZ2V0IGluc3RlYWQgb2Ygc3VibWl0R2l0IGFzIGEgd2F5IHRvIHN1Ym1pdAorICAgcGF0Y2hlcyBiYXNlZCBvbiBHaXRIdWIgUFIgdG8gdXMuCisKKyAqIFRoZSB0ZXN0IGZyYW1ld29yayBoYXMgYmVlbiB1cGRhdGVkIHRvIGhlbHAgZGV2ZWxvcGVycyBieSBtYWtpbmcgaXQKKyAgIGVhc2llciB0byBydW4gbW9zdCBvZiB0aGUgdGVzdHMgdW5kZXIgZGlmZmVyZW50IHZlcnNpb25zIG9mCisgICBvdmVyLXRoZS13aXJlIHByb3RvY29scy4KKworICogRGV2IHN1cHBvcnQgdXBkYXRlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvbXBhcmUgdHdvIGZvcm1hdHRlZAorICAgcmVzdWx0cyBmcm9tIG91ciBkb2N1bWVudGF0aW9uLgorCisgKiBUaGUgc2NyaXB0ZWQgImdpdCByZWJhc2UiIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIHJldGlyZWQuCisKKyAqICJnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkiIGRpZCBub3Qgc2NhbGUgd2VsbCB3aXRoIHRoZSBudW1iZXIgb2YKKyAgIHBhY2tmaWxlcywgd2hpY2ggaXMgYmVpbmcgaW1wcm92ZWQuCisKKyAqICJnaXQgc3Rhc2giIGhhcyBiZWVuIHJld3JpdHRlbiBpbiBDLgorCisgKiBUaGUgImNoZWNrLWRvY3MiIE1ha2VmaWxlIHRhcmdldCB0byBzdXBwb3J0IGRldmVsb3BlcnMgaGFzIGJlZW4KKyAgIHVwZGF0ZWQuCisKKyAqIFRoZSB0ZXN0cyBoYXZlIGJlZW4gdXBkYXRlZCBub3QgdG8gcmVseSBvbiB0aGUgYWJicmV2aWF0ZWQgb3B0aW9uCisgICBuYW1lcyB0aGUgcGFyc2Utb3B0aW9ucyBBUEkgb2ZmZXJzLCB0byBwcm90ZWN0IHVzIGZyb20gYW4KKyAgIGFiYnJldmlhdGVkIGZvcm0gb2YgYW4gb3B0aW9uIHRoYXQgdXNlZCB0byBiZSB1bmlxdWUgd2l0aGluIHRoZQorICAgY29tbWFuZCBnZXR0aW5nIG5vbi11bmlxdWUgd2hlbiBhIG5ldyBvcHRpb24gdGhhdCBzaGFyZSB0aGUgc2FtZQorICAgcHJlZml4IGlzIGFkZGVkLgorCisgKiBUaGUgc2NyaXB0ZWQgdmVyc2lvbiBvZiAiZ2l0IHJlYmFzZSAtaSIgd3JvdGUgYW5kIHJld3JvdGUgdGhlIHRvZG8KKyAgIGxpc3QgbWFueSB0aW1lcyBkdXJpbmcgYSBzaW5nbGUgc3RlcCBvZiBpdHMgb3BlcmF0aW9uLCBhbmQgdGhlCisgICByZWNlbnQgQy1yZXdyaXRlIG1hZGUgYSBmYWl0aGZ1bCBjb252ZXJzaW9uIG9mIHRoZSBsb2dpYyB0byBDLiAgVGhlCisgICBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGNhcnJ5IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbgorICAgYXJvdW5kIGluLWNvcmUgdG8gYXZvaWQgcmV3cml0aW5nIHRoZSBzYW1lIGZpbGUgb3ZlciBhbmQgb3ZlcgorICAgdW5uZWNlc3NhcmlseS4KKworICogVGVzdCBmcmFtZXdvcmsgdXBkYXRlIHRvIG1vcmUgcm9idXN0bHkgY2xlYW4gdXAgbGVmdG92ZXIgZmlsZXMgYW5kCisgICBwcm9jZXNzZXMgYWZ0ZXIgdGVzdHMgYXJlIGRvbmUuCisKKyAqIENvbnZlcnNpb24gZnJvbSB1bnNpZ25lZCBjaGFyWzIwXSB0byBzdHJ1Y3Qgb2JqZWN0X2lkIGNvbnRpbnVlcy4KKworICogV2hpbGUgcnVubmluZyAiZ2l0IGRpZmYiIGluIGEgbGF6eSBjbG9uZSwgd2UgY2FuIHVwZnJvbnQga25vdyB3aGljaAorICAgbWlzc2luZyBibG9icyB3ZSB3aWxsIG5lZWQsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIG9uLWRlbWFuZAorICAgbWFjaGluZXJ5IHRvIGRpc2NvdmVyIHRoZW0gb25lIGJ5IG9uZS4gIFRoZSBjb2RlIGxlYXJuZWQgdG8gYWltIHRvCisgICBhY2hpZXZlIGJldHRlciBwZXJmb3JtYW5jZSBieSBiYXRjaGluZyB0aGUgcmVxdWVzdCBmb3IgdGhlc2UKKyAgIHByb21pc2VkIGJsb2JzLgorCisgKiBEdXJpbmcgYW4gaW5pdGlhbCAiZ2l0IGNsb25lIC0tZGVwdGg9Li4uIiBwYXJ0aWFsIGNsb25lLCBpdCBpcworICAgcG9pbnRsZXNzIHRvIHNwZW5kIGN5Y2xlcyBmb3IgYSBsYXJnZSBwb3J0aW9uIG9mIHRoZSBjb25uZWN0aXZpdHkKKyAgIGNoZWNrIHRoYXQgZW51bWVyYXRlcyBhbmQgc2tpcHMgcHJvbWlzb3Igb2JqZWN0cyAod2hpY2ggYnkKKyAgIGRlZmluaXRpb24gaXMgYWxsIG9iamVjdHMgZmV0Y2hlZCBmcm9tIHRoZSBvdGhlciBzaWRlKS4gIFRoaXMgaGFzCisgICBiZWVuIG9wdGltaXplZCBvdXQuCisKKyAqIE1lY2hhbmljYWxseSBhbmQgc3lzdGVtYXRpY2FsbHkgZHJvcCAiZXh0ZXJuIiBmcm9tIGZ1bmN0aW9uCisgICBkZWNsYXJhdGlvbi4KKworICogVGhlIHNjcmlwdCB0byBhZ2dyZWdhdGUgcGVyZiByZXN1bHQgdW5jb25kaXRpb25hbGx5IGRlcGVuZGVkIG9uCisgICBsaWJqc29uLXBlcmwgZXZlbiB0aG91Z2ggaXQgZGlkIG5vdCBoYXZlIHRvLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBUaGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgImdpdCByZWJhc2UgLWkiIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGF2b2lkIGZvcmtpbmcgYSBzZXBhcmF0ZSAicmViYXNlLS1pbnRlcmFjdGl2ZSIgcHJvY2Vzcy4KKworICogQWxsb3cgREVQIGFuZCBBU0xSIGZvciBXaW5kb3dzIGJ1aWxkIHRvIGZvciBzZWN1cml0eSBoYXJkZW5pbmcuCisKKyAqIFBlcmZvcm1hbmNlIHRlc3QgZnJhbWV3b3JrIGhhcyBiZWVuIGJyb2tlbiBhbmQgbWVhc3VyZWQgdGhlIHZlcnNpb24KKyAgIG9mIEdpdCB0aGF0IGhhcHBlbnMgdG8gYmUgb24gJFBBVEgsIG5vdCB0aGUgc3BlY2lmaWVkIG9uZSB0bworICAgbWVhc3VyZSwgZm9yIGEgd2hpbGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogT3B0aW9uYWxseSAibWFrZSBjb2NjaWNoZWNrIiBjYW4gZmVlZCBtdWx0aXBsZSBzb3VyY2UgZmlsZXMgdG8KKyAgIHNwYXRjaCwgZ2FpbmluZyBwZXJmb3JtYW5jZSB3aGlsZSBzcGVuZGluZyBtb3JlIG1lbW9yeS4KKworICogQXR0ZW1wdCB0byB1c2UgYW4gYWJicmV2aWF0ZWQgb3B0aW9uIGluICJnaXQgY2xvbmUgLS1yZWN1cnMiIGlzCisgICByZXNwb25kZWQgYnkgYSByZXF1ZXN0IHRvIGRpc2FtYmlndWF0ZSBiZXR3ZWVuIC0tcmVjdXJzaXZlIGFuZAorICAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMsIHdoaWNoIGlzIGJhZCBiZWNhdXNlIHRoZXNlIHR3byBhcmUgc3lub255bXMuCisgICBUaGUgcGFyc2Utb3B0aW9ucyBBUEkgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gZGVmaW5lIHN1Y2ggc3lub255bXMKKyAgIG1vcmUgZWFzaWx5IGFuZCBub3QgcHJvZHVjZSBhbiB1bm5lY2Vzc2FyeSBmYWlsdXJlLgorCisgKiBBIHBhaXIgb2YgcHJpdmF0ZSBmdW5jdGlvbnMgaW4gaHR0cC5jIHRoYXQgaGFkIG5hbWVzIHNpbWlsYXIgdG8KKyAgIGZyZWFkL2Z3cml0ZSBkaWQgbm90IHJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLCB3aGljaCB3YXMgZm91bmQKKyAgIHRvIGJlIGNvbmZ1c2luZy4KKworICogVXBkYXRlIGNvbGxpc2lvbi1kZXRlY3RpbmcgU0hBLTEgY29kZSB0byBidWlsZCBwcm9wZXJseSBvbiBIUC1VWC4KKworCitGaXhlcyBzaW5jZSB2Mi4yMQorLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBwcnVuZS1wYWNrZWQiIGRpZCBub3Qgbm90aWNlIGFuZCBjb21wbGFpbiBhZ2FpbnN0IGV4Y2VzcworICAgYXJndW1lbnRzIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgd2hpY2ggbm93IGl0IGRvZXMuCisgICAobWVyZ2UgOWIwYmQ4N2VkMiByai9wcnVuZS1wYWNrZWQtZXhjZXNzLWFyZ3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTcGxpdC1pbmRleCBmaXguCisgICAobWVyZ2UgNmUzN2M4ZWQzYyBuZC9zcGxpdC1pbmRleC1udWxsLWJhc2UtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tbm8taW5kZXgiIG1heSBzdGlsbCB3YW50IHRvIGFjY2VzcyBHaXQgZ29vZGllcyBsaWtlCisgICAtLWV4dC1kaWZmIGFuZCAtLXRleHRjb252LCBidXQgc28gZmFyIHRoZXNlIGhhdmUgYmVlbiBpZ25vcmVkLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDI4N2FiMjhiZmEgamsvZGlmZi1uby1pbmRleC1pbml0aWFsaXplIGxhdGVyIHRvIG1haW50KS4KKworICogVW5pZnkgUlBDIGNvZGUgZm9yIHNtYXJ0IGh0dHAgaW4gcHJvdG9jb2wgdjAvdjEgYW5kIHYyLCB3aGljaCBmaXhlcworICAgYSBidWcgaW4gdGhlIGxhdHRlciAobGFjayBvZiBhdXRoZW50aWNhdGlvbiByZXRyeSkgYW5kIGdlbmVyYWxseQorICAgaW1wcm92ZXMgdGhlIGNvZGUgYmFzZS4KKyAgIChtZXJnZSBhOTdkMDA3OTlhIGp0L2h0dHAtYXV0aC1wcm90by12Mi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW5jbHVkZSBmaWxlIGNvbXBhdC9ic3dhcC5oIGhhcyBiZWVuIHVwZGF0ZWQgc28gdGhhdCBpdCBpcyBzYWZlCisgICB0byAoYWNjaWRlbnRhbGx5KSBpbmNsdWRlIGl0IG1vcmUgdGhhbiBvbmNlLgorICAgKG1lcmdlIDMzYWE1NzlhNTUgamsvZ3VhcmQtYnN3YXAtaGVhZGVyIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNldCBvZiBoZWFkZXIgZmlsZXMgdXNlZCBieSAibWFrZSBoZHItY2hlY2siIHVuY29uZGl0aW9uYWxseQorICAgaW5jbHVkZWQgc2hhMjU2L2djcnlwdC5oLCBldmVuIHdoZW4gaXQgaXMgbm90IHVzZWQsIGNhdXNpbmcgdGhlCisgICBtYWtlIHRhcmdldCB0byBmYWlsLiAgV2Ugbm93IHNraXAgaXQgd2hlbiBHQ1JZUFRfU0hBMjU2IGlzIG5vdCBpbgorICAgdXNlLgorICAgKG1lcmdlIGYyM2FhMThlN2YgcmovaGRyLWNoZWNrLWdjcnlwdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgTWFrZWZpbGUgdXNlcyAnZmluZCcgdXRpbGl0eSB0byBlbnVtZXJhdGUgYWxsIHRoZSAqLmggaGVhZGVyCisgICBmaWxlcywgd2hpY2ggaXMgZXhwZW5zaXZlIG9uIHBsYXRmb3JtcyB3aXRoIHNsb3cgZmlsZXN5c3RlbXM7IGl0CisgICBub3cgb3B0aW9uYWxseSB1c2VzICJscy1maWxlcyIgaWYgd29ya2luZyB3aXRoaW4gYSByZXBvc2l0b3J5LAorICAgd2hpY2ggaXMgYSB0cmljayBzaW1pbGFyIHRvIGhvdyBhbGwgc291cmNlcyBhcmUgZW51bWVyYXRlZCB0byBydW4KKyAgIEVUQUdTIG9uLgorICAgKG1lcmdlIDkyYjg4ZWJhOWYganMvZmluZC1saWItaC13aXRoLWxzLWZpbGVzLXdoZW4tcG9zc2libGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSIgdGhhdCB3YXMgcmVpbXBsZW1lbnRlZCBpbiBDIGRpZCBub3Qgc2V0IE9SSUdfSEVBRAorICAgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgY2JkMjllYWQ5MiBqcy9yZWJhc2Utb3JpZy1oZWFkLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIERldiBzdXBwb3J0LgorICAgKG1lcmdlIGY1NDU3MzcxNDQganMvc3RyZXNzLXRlc3QtdWktdHdlYWsgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDRkxBR1Mgbm93IGNhbiBiZSB0d2Vha2VkIHdoZW4gaW52b2tpbmcgTWFrZSB3aGlsZSB1c2luZworICAgREVWRUxPUEVSPVllc1BsZWFzZTsgdGhpcyBkaWQgbm90IHdvcmsgd2VsbCBiZWZvcmUuCisgICAobWVyZ2UgNmQ1ZDRiNGU5MyBhYi9tYWtlZmlsZS1oZWxwLWRldnMtbW9yZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZnNjayAtLWNvbm5lY3Rpdml0eS1vbmx5IiBvbWl0cyBjb21wdXRhdGlvbiBuZWNlc3NhcnkgdG8gc2lmdAorICAgdGhlIG9iamVjdHMgdGhhdCBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUgcmVmcyBpbnRvCisgICB1bnJlYWNoYWJsZSBhbmQgZGFuZ2xpbmcuICBUaGlzIGlzIG5vdyBlbmFibGVkIHdoZW4gZGFuZ2xpbmcKKyAgIG9iamVjdHMgYXJlIHJlcXVlc3RlZCAod2hpY2ggaXMgZG9uZSBieSBkZWZhdWx0LCBidXQgY2FuIGJlCisgICBvdmVycmlkZGVuIHdpdGggdGhlICItLW5vLWRhbmdsaW5nIiBvcHRpb24pLgorICAgKG1lcmdlIDhkOGMyYTVhZWYgamsvZnNjay1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbiBwbGF0Zm9ybXMgd2hlcmUgImdpdCBmZXRjaCIgaXMga2lsbGVkIHdpdGggU0lHUElQRSAoZS5nLiBPU1gpLAorICAgdGhlIHVwbG9hZC1wYWNrIHRoYXQgcnVucyBvbiB0aGUgb3RoZXIgZW5kIHRoYXQgaGFuZ3MgdXAgYWZ0ZXIKKyAgIGRldGVjdGluZyBhbiBlcnJvciBjb3VsZCBjYXVzZSAiZ2l0IGZldGNoIiB0byBkaWUgd2l0aCBhIHNpZ25hbCwKKyAgIHdoaWNoIGxlZCB0byBhIGZsYWt5IHRlc3QuICAiZ2l0IGZldGNoIiBub3cgaWdub3JlcyBTSUdQSVBFIGR1cmluZworICAgdGhlIG5ldHdvcmsgcG9ydGlvbiBvZiBpdHMgb3BlcmF0aW9uICh0aGlzIGlzIG5vdCBhIHByb2JsZW0gYXMgd2UKKyAgIGNoZWNrIHRoZSByZXR1cm4gc3RhdHVzIGZyb20gb3VyIHdyaXRlKDIpcykuCisgICAobWVyZ2UgMTQzNTg4OTQ5YyBqay9uby1zaWdwaXBlLWR1cmluZy1uZXR3b3JrLXRyYW5zcG9ydCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgcmVjZW50IHVwZGF0ZSBicm9rZSAiaXMgdGhpcyBvYmplY3QgYXZhaWxhYmxlIHRvIHVzPyIgY2hlY2sgZm9yCisgICB3ZWxsLWtub3duIG9iamVjdHMgbGlrZSBhbiBlbXB0eSB0cmVlICh3aGljaCBzaG91bGQgeWllbGQgInllcyIsCisgICBldmVuIHdoZW4gdGhlcmUgaXMgbm8gb24tZGlzayBvYmplY3QgZm9yIGFuIGVtcHR5IHRyZWUpLCB3aGljaCBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGYwNmFiMDI3ZWYgamsvdmlydHVhbC1vYmplY3RzLWRvLWV4aXN0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNldHVwIGNvZGUgaGFzIGJlZW4gY2xlYW5lZCB1cCB0byBhdm9pZCBsZWFrcyBhcm91bmQgdGhlCisgICByZXBvc2l0b3J5X2Zvcm1hdCBzdHJ1Y3R1cmUuCisgICAobWVyZ2UgZTg4MDVhZjFjMyBtYS9jbGVhci1yZXBvc2l0b3J5LWZvcm1hdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY29uZmlnIC0tdHlwZT1jb2xvciAuLi4iIGlzIG1lYW50IHRvIHJlcGxhY2UgImdpdCBjb25maWcgLS1nZXQtY29sb3IiCisgICBidXQgdGhlcmUgaXMgYSBzbGlnaHQgZGlmZmVyZW5jZSB0aGF0IHdhc24ndCBkb2N1bWVudGVkLCB3aGljaCBpcworICAgbm93IGZpeGVkLgorICAgKG1lcmdlIGNkOGU3NTkzYjkgamsvY29uZmlnLXR5cGUtY29sb3ItZW5kcy13aXRoLWxmIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiB0aGUgImNsZWFuIiBmaWx0ZXIgY2FuIHJlZHVjZSB0aGUgc2l6ZSBvZiBhIGh1Z2UgZmlsZSBpbiB0aGUKKyAgIHdvcmtpbmcgdHJlZSBkb3duIHRvIGEgc21hbGwgInRva2VuIiAoYSBsYSBHaXQgTEZTKSwgdGhlcmUgaXMgbm8KKyAgIHBvaW50IGluIGFsbG9jYXRpbmcgYSBodWdlIHNjcmF0Y2ggYXJlYSB1cGZyb250LCBidXQgdGhlIGJ1ZmZlciBpcworICAgc2l6ZWQgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGZpbGUgc2l6ZS4gIFRoZSBjb252ZXJ0IG1lY2hhbmlzbSBub3cKKyAgIGFsbG9jYXRlcyB2ZXJ5IG1pbmltdW0gYW5kIHJlYWxsb2NhdGVzIGFzIGl0IHJlY2VpdmVzIHRoZSBvdXRwdXQKKyAgIGZyb20gdGhlIGNsZWFuIGZpbHRlciBwcm9jZXNzLgorICAgKG1lcmdlIDAyMTU2YWIwMzEgamgvcmVzaXplLWNvbnZlcnQtc2NyYXRjaC1idWZmZXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSIgdXNlcyB0aGUgcmVmcy9yZXdyaXR0ZW4vIGhpZXJhcmNoeSB0byBzdG9yZSBpdHMKKyAgIGludGVybWVkaWF0ZSBzdGF0ZXMsIHdoaWNoIGluaGVyZW50bHkgbWFrZXMgdGhlIGhpZXJhcmNoeSBwZXIKKyAgIHdvcmt0cmVlLCBidXQgaXQgZGlkbid0IHF1aXRlIHdvcmsgd2VsbC4KKyAgIChtZXJnZSBiOTMxN2Q1NWEzIG5kL3Jld3JpdHRlbi1yZWYtaXMtcGVyLXdvcmt0cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLUw8ZnJvbT4sPHRvPjo8cGF0aD4iIHdpdGggIi1zIiBkaWQgbm90IHN1cHByZXNzIHRoZSBwYXRjaAorICAgb3V0cHV0IGFzIGl0IHNob3VsZC4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDA1MzE0ZWZhZWEgamsvbGluZS1sb2ctd2l0aC1wYXRjaCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgd29ya3RyZWUgYWRkIiB1c2VkIHRvIGRvIGEgImZpbmQgYW4gYXZhaWxhYmxlIG5hbWUgd2l0aCBzdGF0CisgICBhbmQgdGhlbiBta2RpciIsIHdoaWNoIGlzIHJhY2UtcHJvbmUuICBUaGlzIGhhcyBiZWVuIGZpeGVkIGJ5IHVzaW5nCisgICBta2RpciBhbmQgcmVhY3RpbmcgdG8gRUVYSVNUIGluIGEgbG9vcC4KKyAgIChtZXJnZSA3YWYwMWYyMzY3IG1zL3dvcmt0cmVlLWFkZC1hdG9taWMtbWtkaXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBCdWlsZCB1cGRhdGUgZm9yIFNIQS0xIHdpdGggY29sbGlzaW9uIGRldGVjdGlvbi4KKyAgIChtZXJnZSAwN2EyMGY1NjliIGprL3NoYTFkYyBsYXRlciB0byBtYWludCkuCisKKyAqIEJ1aWxkIHByb2NlZHVyZSBoYXMgYmVlbiBmaXhlZCBhcm91bmQgdXNlIG9mIGFzY2lpZG9jdG9yIGluc3RlYWQgb2YKKyAgIGFzY2lpZG9jLgorICAgKG1lcmdlIDE4NWY5YTBlYTAgbWEvYXNjaWlkb2N0b3ItZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiByZW1vdGUtaHR0cCB0cmFuc3BvcnQgZGlkIG5vdCBhbm9ueW1pemUgVVJMcyByZXBvcnRlZCBpbiBpdHMgZXJyb3IKKyAgIG1lc3NhZ2VzIGF0IHBsYWNlcy4KKyAgIChtZXJnZSBjMTI4NGIyMWYyIGpzL2Fub255bWl6ZS1yZW1vdGUtY3VybC1kaWFnIGxhdGVyIHRvIG1haW50KS4KKworICogRXJyb3IgbWVzc2FnZXMgZ2l2ZW4gZnJvbSB0aGUgaHR0cCB0cmFuc3BvcnQgaGF2ZSBiZWVuIHVwZGF0ZWQgc28KKyAgIHRoYXQgdGhleSBjYW4gYmUgbG9jYWxpemVkLgorICAgKG1lcmdlIGVkOGI0MTMyYzgganMvcmVtb3RlLWN1cmwtaTE4biBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgaW5pdCIgZm9yZ290IHRvIHJlYWQgcGxhdGZvcm0tc3BlY2lmaWMgcmVwb3NpdG9yeQorICAgY29uZmlndXJhdGlvbiwgd2hpY2ggbWFkZSBXaW5kb3dzIHBvcnQgdG8gaWdub3JlIHNldHRpbmdzIG9mCisgICBjb3JlLmhpZGVkb3RmaWxlcywgZm9yIGV4YW1wbGUuCisKKyAqIEEgY29ybmVyLWNhc2Ugb2JqZWN0IG5hbWUgYW1iaWd1aXR5IHdoaWxlIHRoZSBzZXF1ZW5jZXIgbWFjaGluZXJ5CisgICBpcyB3b3JraW5nIChlLmcuICJyZWJhc2UgLWkgLXgiKSBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3QgZGlhZ25vc2UgYW4gZXJyb3Igd2hpbGUgb3BlbmluZyB0aGUKKyAgIG91dHB1dCBmaWxlIGZvciB0aGUgY292ZXItbGV0dGVyLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMmZlOTVmNDk0YyBqYy9mb3JtYXQtcGF0Y2gtZXJyb3ItY2hlY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1mIDxicmFuY2g+IiB3aGlsZSB0aGUgaW5kZXggaGFzIGFuIHVubWVyZ2VkIHBhdGgKKyAgIGluY29ycmVjdGx5IGxlZnQgc29tZSBwYXRocyBpbiBhbiB1bm1lcmdlZCBzdGF0ZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogQSBjb3JuZXIgY2FzZSBidWcgaW4gdGhlIHJlZnMgQVBJIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBkMzMyMmViMjhiIGprL3JlZnMtZG91YmxlLWFib3J0IGxhdGVyIHRvIG1haW50KS4KKworICogVW5pY29kZSB1cGRhdGUuCisgICAobWVyZ2UgNTg0YjYyYzM3YiBiYi91bmljb2RlLTEyIGxhdGVyIHRvIG1haW50KS4KKworICogZHVtYi1odHRwIHdhbGtlciBoYXMgYmVlbiB1cGRhdGVkIHRvIHNoYXJlIG1vcmUgZXJyb3IgcmVjb3ZlcnkKKyAgIHN0cmF0ZWd5IHdpdGggdGhlIG5vcm1hbCBjb2RlcGF0aC4KKworICogQSBidWdsZXQgaW4gY29uZmlndXJhdGlvbiBwYXJzZXIgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgMTllN2ZkYWE1OCBuZC9pbmNsdWRlLWlmLXdpbGRtYXRjaCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGZvciAiZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IiBoYXMgYmVlbiB1cGRhdGVkLgorICAgKG1lcmdlIGI1YTBiZDY5NGMgbmQvcmVhZC10cmVlLXJlc2V0LWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAgYXJvdW5kIGEgbXVjaC1sZXNzLWltcG9ydGFudC10aGFuLWl0LXVzZWQtdG8tYmUKKyAgIHVwZGF0ZV9zZXJ2ZXJfaW5mbygpIGZ1bmN0aW9uLgorICAgKG1lcmdlIGIzMjIzNzYxYzggamsvc2VydmVyLWluZm8tcmFiYml0LWhvbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWVzc2FnZSBnaXZlbiB3aGVuICJnaXQgY29tbWl0IC1hIDxwYXRocz4iIGVycm9ycyBvdXQgaGFzIGJlZW4KKyAgIHVwZGF0ZWQuCisgICAobWVyZ2UgNWExZGJkNDhiYyBuZC9jb21taXQtYS13aXRoLXBhdGhzLW1zZy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIC0tb3B0aW9ucyBBLi5CIiwgYWZ0ZXIgZ2l2aW5nIGNvbnRyb2wgYmFjayB0byB0aGUKKyAgIHVzZXIgdG8gYXNrIGhlbHAgcmVzb2x2aW5nIGEgY29uZmxpY3RlZCBzdGVwLCBkaWQgbm90IGhvbm9yIHRoZQorICAgb3B0aW9ucyBpdCBvcmlnaW5hbGx5IHJlY2VpdmVkLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFZhcmlvdXMgZ2xpdGNoZXMgaW4gImdpdCBnYyIgYXJvdW5kIHJlZmxvZyBoYW5kbGluZyBoYXZlIGJlZW4gZml4ZWQuCisKKyAqIFRoZSBjb2RlIHRvIHJlYWQgZnJvbSBjb21taXQtZ3JhcGggZmlsZSBoYXMgYmVlbiBjbGVhbnVwIHdpdGggbW9yZQorICAgY2FyZWZ1bCBlcnJvciBjaGVja2luZyBiZWZvcmUgdXNpbmcgZGF0YSByZWFkIGZyb20gaXQuCisKKyAqIFBlcmZvcm1hbmNlIGZpeCBhcm91bmQgImdpdCBmZXRjaCIgdGhhdCBncmFicyBtYW55IHJlZnMuCisgICAobWVyZ2UgYjc2NDMwMDkxMiBqdC9mZXRjaC1wYWNrLXdhbnRlZC1yZWZzLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogUHJvdG9jb2wgdjIgc3VwcG9ydCBpbiAiZ2l0IGZldGNoLXBhY2siIG9mIHNoYWxsb3cgY2xvbmVzIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFBlcmZvcm1hbmNlIGZpeCBhcm91bmQgImdpdCBibGFtZSIsIGVzcGVjaWFsbHkgaW4gYSBsaW5lYXIgaGlzdG9yeQorICAgKHdoaWNoIGlzIHRoZSBub3JtIHdlIHNob3VsZCBvcHRpbWl6ZSBmb3IpLgorICAgKG1lcmdlIGY4OTIwMTQ5NDMgZGsvYmxhbWUta2VlcC1vcmlnaW4tYmxvYiBsYXRlciB0byBtYWludCkuCisKKyAqIFBlcmZvcm1hbmNlIGZpeCBmb3IgInJldi1saXN0IC0tcGFyZW50cyAtLSBwYXRoc3BlYyIuCisgICAobWVyZ2UgODMyMGIxZGJlNyBqay9yZXZpc2lvbi1yZXdyaXR0ZW4tcGFyZW50cy1pbi1wcmlvLXF1ZXVlIGxhdGVyIHRvIG1haW50KS4KKworICogVXBkYXRpbmcgdGhlIGRpc3BsYXkgd2l0aCBwcm9ncmVzcyBtZXNzYWdlIGhhcyBiZWVuIGNsZWFuZWQgdXAgdG8KKyAgIGRlYWwgYmV0dGVyIHdpdGggb3ZlcmxvbmcgbWVzc2FnZXMuCisgICAobWVyZ2UgNTQ1ZGMzNDVlYiBzZy9vdmVybG9uZy1wcm9ncmVzcy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIC0tIHBhdGgiIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeSBzdGFydHMgYmxhbWluZyBmcm9tCisgICB0aGUgd29ya2luZyB0cmVlLCBhbmQgdGhlIHNhbWUgY29tbWFuZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSBlcnJvcnMKKyAgIG91dCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdvcmtpbmcgdHJlZSBieSBkZWZpbml0aW9uLiAgVGhlIGNvbW1hbmQKKyAgIGhhcyBiZWVuIHRhdWdodCB0byBpbnN0ZWFkIHN0YXJ0IGJsYW1pbmcgZnJvbSB0aGUgY29tbWl0IGF0IEhFQUQsCisgICB3aGljaCBpcyBtb3JlIHVzZWZ1bC4KKyAgIChtZXJnZSBhNTQ0ZmIwOGY4IHNnL2JsYW1lLWluLWJhcmUtc3RhcnQtYXQtaGVhZCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIHVuZGVyYWxsb2NhdGlvbiBpbiB0aGUgY29kZSB0byByZWFkIHRoZSB1bnRyYWNrZWQgY2FjaGUKKyAgIGV4dGVuc2lvbiBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgM2E3YjQ1YTYyMyBqcy91bnRyYWNrZWQtY2FjaGUtYWxsb2NmaXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSBpcyB1cGRhdGVkIHRvIGNoZWNrIHRoZSByZXN1bHQgb2YgbWVtb3J5IGFsbG9jYXRpb24gYmVmb3JlCisgICBpdCBpcyB1c2VkIGluIG1vcmUgcGxhY2VzLCBieSB1c2luZyB4bWFsbG9jIGFuZC9vciB4Y2FsbG9jIGNhbGxzLgorICAgKG1lcmdlIDk5OWI5NTFiMjggamsveG1hbGxvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBHRVRURVhUX1BPSVNPTiB0ZXN0IG9wdGlvbiBoYXMgYmVlbiBxdWl0ZSBicm9rZW4gZXZlciBzaW5jZSBpdAorICAgd2FzIG1hZGUgcnVudGltZS10dW5hYmxlLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSBmODhiOWNiNjAzIGpjL2dldHRleHQtdGVzdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUZXN0IGZpeCBvbiBBUEZTIHRoYXQgaXMgaW5jYXBhYmxlIG9mIHN0b3JlIHBhdGhzIGluIExhdGluLTEuCisgICAobWVyZ2UgMzg4OTE0OTYxOSBqcy9pc284ODk1LXRlc3Qtb24tYXBmcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VibW9kdWxlIGZvcmVhY2ggPGNvbW1hbmQ+IC0tcXVpZXQiIGRpZCBub3QgcGFzcyB0aGUgb3B0aW9uCisgICBkb3duIGNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGEyODJmNWE5MDYgbmQvc3VibW9kdWxlLWZvcmVhY2gtcXVpZXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGhhcyBiZWVuIHRhdWdodCB0byB1c2UgcXVvdGVkLXByaW50YWJsZSB3aGVuIHRoZQorICAgcGF5bG9hZCBjb250YWlucyBjYXJyaWFnZS1yZXR1cm4uICBUaGUgdXNlIG9mIHRoZSBtZWNoYW5pc20gaXMgaW4KKyAgIGxpbmUgd2l0aCB0aGUgZGVzaWduIG9yaWdpbmFsbHkgYWRkZWQgdGhlIGNvZGVwYXRoIHRoYXQgY2hvb3NlcyBRUAorICAgd2hlbiB0aGUgcGF5bG9hZCBoYXMgb3Zlcmx5IGxvbmcgbGluZXMuCisgICAobWVyZ2UgNzRkNzZhMTcwMSBiYy9zZW5kLWVtYWlsLXFwLWNyIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlY2VudGx5IGFkZGVkIGZlYXR1cmUgdG8gYWRkIGFkZHJlc3NlcyB0aGF0IGFyZSBvbgorICAgYW55dGhpbmctYnk6IHRyYWlsZXJzIGluICdnaXQgc2VuZC1lbWFpbCcgd2FzIGZvdW5kIHRvIGJlIHdheSB0b28KKyAgIGVhZ2VyIGFuZCBjb25zaWRlcmVkIG5vbnNlbnNlIHN0cmluZ3MgYXMgaWYgdGhleSBjYW4gYmUgbGVnaXRpbWF0ZQorICAgYmVnaW5uaW5nIG9mICotYnk6IHRyYWlsZXIuICBUaGlzIGhhcyBiZWVuIHRpZ2h0ZW5lZC4KKworICogQnVpbGRzIHdpdGggZ2V0dGV4dCBicm9rZSBvbiByZWNlbnQgbWFjT1Mgdy8gSG9tZWJyZXcsIHdoaWNoCisgICBzZWVtcyB0byBoYXZlIHN0b3BwZWQgaW5jbHVkaW5nIGZyb20gL3Vzci9sb2NhbC9pbmNsdWRlOyB0aGlzCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOTJhMTM3N2EyYSBqcy9tYWNvcy1nZXR0ZXh0LWJ1aWxkIGxhdGVyIHRvIG1haW50KS4KKworICogUnVubmluZyAiZ2l0IGFkZCIgb24gYSByZXBvc2l0b3J5IGNyZWF0ZWQgaW5zaWRlIHRoZSBjdXJyZW50CisgICByZXBvc2l0b3J5IGlzIGFuIGV4cGxpY2l0IGluZGljYXRpb24gdGhhdCB0aGUgdXNlciB3YW50cyB0byBhZGQgaXQKKyAgIGFzIGEgc3VibW9kdWxlLCBidXQgd2hlbiB0aGUgSEVBRCBvZiB0aGUgaW5uZXIgcmVwb3NpdG9yeSBpcyBvbiBhbgorICAgdW5ib3JuIGJyYW5jaCwgaXQgY2Fubm90IGJlIGFkZGVkIGFzIGEgc3VibW9kdWxlLiAgV29yc2UsIHRoZSBmaWxlcworICAgaW4gaXRzIHdvcmtpbmcgdHJlZSBjYW4gYmUgYWRkZWQgYXMgaWYgdGhleSBhcmUgYSBwYXJ0IG9mIHRoZSBvdXRlcgorICAgcmVwb3NpdG9yeSwgd2hpY2ggaXMgbm90IHdoYXQgdGhlIHVzZXIgd2FudHMuICBUaGVzZSBwcm9ibGVtcyBhcmUKKyAgIGJlaW5nIGFkZHJlc3NlZC4KKyAgIChtZXJnZSBmOTM3YmMyZjg2IGttL2VtcHR5LXJlcG8taXMtc3RpbGwtYS1yZXBvIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVycnktcGljayIgcnVuIHdpdGggdGhlICIteCIgb3IgdGhlICItLXNpZ25vZmYiIG9wdGlvbiB1c2VkCisgICB0byAoYW5kIG1vcmUgaW1wb3J0YW50bHksIG91Z2h0IHRvKSBjbGVhbiB1cCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlCisgICB3aXRoIHRoZSAtLWNsZWFudXA9c3BhY2Ugb3B0aW9uIGJ5IGRlZmF1bHQsIGJ1dCB0aGlzIGhhcyBiZWVuCisgICBicm9rZW4gc2luY2UgbGF0ZSAyMDE3LiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICogV2hlbiBnaXZlbiBhIHRhZyB0aGF0IHBvaW50cyBhdCBhIGNvbW1pdC1pc2gsICJnaXQgcmVwbGFjZSAtLWdyYWZ0IgorICAgZmFpbGVkIHRvIHBlZWwgdGhlIHRhZyBiZWZvcmUgd3JpdGluZyBhIHJlcGxhY2UgcmVmLCB3aGljaCBkaWQgbm90CisgICBtYWtlIHNlbnNlIGJlY2F1c2UgdGhlIG9sZCBncmFmdCBtZWNoYW5pc20gdGhlIGZlYXR1cmUgd2FudHMgdG8KKyAgIG1pbWljIG9ubHkgYWxsb3dlZCB0byByZXBsYWNlIG9uZSBjb21taXQgb2JqZWN0IHdpdGggYW5vdGhlci4KKyAgIFRoaXMgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgZWU1MjFlYzRjYiBjYy9yZXBsYWNlLWdyYWZ0LXBlZWwtdGFncyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgdGlnaHRlbmluZyBhZ2FpbnN0IGEgIndyb25nIiBvYmplY3QgYXBwZWFyaW5nIHdoZXJlIGFuIG9iamVjdAorICAgb2YgYSBkaWZmZXJlbnQgdHlwZSBpcyBleHBlY3RlZCwgaW5zdGVhZCBvZiBibGluZGx5IGFzc3VtaW5nIHRoYXQKKyAgIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gb2JqZWN0cyBhcmUgY29ycmVjdGx5IG1hZGUuCisgICAobWVyZ2UgOTdkZDUxMmFmNyB0Yi91bmV4cGVjdGVkIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gZWFybGllciB1cGRhdGUgZm9yIE1pbkdXIGFuZCBDeWd3aW4gYWNjaWRlbnRhbGx5IGJyb2tlIE1TVkMgYnVpbGQsCisgICB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSAyMmMzNjM0YzBmIHNzL21zdmMtcGF0aC11dGlscy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAlKHB1c2g6dHJhY2spIHRva2VuIHVzZWQgaW4gdGhlIC0tZm9ybWF0IG9wdGlvbiB0byAiZ2l0CisgICBmb3ItZWFjaC1yZWYiIGFuZCBmcmllbmRzIHdhcyBub3Qgc2hvd2luZyB0aGUgcmlnaHQgYnJhbmNoLCB3aGljaAorICAgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgYzY0NmQwOTM0ZSBkci9yZWYtZmlsdGVyLXB1c2gtdHJhY2stZml4IGxhdGVyIHRvIG1haW50KS4KKworICogIm1ha2UgY2hlY2stZG9jcyIsICJnaXQgaGVscCAtYSIsIGV0Yy4gZGlkIG5vdCBhY2NvdW50IGZvciBjYXNlcworICAgd2hlcmUgYSBwYXJ0aWN1bGFyIGJ1aWxkIG1heSBkZWxpYmVyYXRlbHkgb21pdCBzb21lIHN1YmNvbW1hbmRzLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgbG9naWMgdG8gdGVsbCBpZiBhIEdpdCByZXBvc2l0b3J5IGhhcyBhIHdvcmtpbmcgdHJlZSBwcm90ZWN0cworICAgImdpdCBicmFuY2ggLUQiIGZyb20gcmVtb3ZpbmcgdGhlIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkCisgICBvdXQgYnkgbWlzdGFrZS4gIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxvZ2ljIHdhcyBicm9rZW4gZm9yCisgICByZXBvc2l0b3JpZXMgd2l0aCB1bnVzdWFsIG5hbWUsIHdoaWNoIHVuZm9ydHVuYXRlbHkgaXMgdGhlIG5vcm0gZm9yCisgICBzdWJtb2R1bGVzIHRoZXNlIGRheXMuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIGYzNTM0Yzk4ZTQganQvc3VibW9kdWxlLXJlcG8taXMtd2l0aC13b3JrdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqIEFJWCBzaGFyZWQgdGhlIHNhbWUgYnVpbGQgaXNzdWVzIHdpdGggb3RoZXIgQlNEcyBhcm91bmQgZmlsZW5vKGZwKSwKKyAgIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBlZTY2MmJmNWM2IGNjL2FpeC1oYXMtZmlsZW5vLWFzLWEtbWFjcm8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYXV0b2NvbmYgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgZmFpbGVkIHRvIHVzZSB0aGUgcmlnaHQKKyAgIGdldHRleHQoKSBpbXBsZW1lbnRhdGlvbnMgZnJvbSAtbGliaW50bCBieSBpZ25vcmluZyB1c2VsZXNzIHN0dWIKKyAgIGltcGxlbWVudGF0aW9ucyBzaGlwcGVkIGluIHNvbWUgQyBsaWJyYXJ5LCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorICAgKG1lcmdlIGI3MWU1NmE2ODMgdmsvYXV0b2NvbmYtZ2V0dGV4dCBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBpbmRleC1wYWNrIHBlcmYgdGVzdCBzbyB0aGF0IHRoZSByZXBlYXRlZCBpbnZvY2F0aW9ucyBhbHdheXMKKyAgIHJ1biBpbiBhbiBlbXB0eSByZXBvc2l0b3J5LCB3aGljaCBlbXVsYXRlcyB0aGUgaW5pdGlhbCBjbG9uZQorICAgc2l0dWF0aW9uIGJldHRlci4KKyAgIChtZXJnZSA3NzVjNzFlMTZkIGprL3A1MzAyLWF2b2lkLWNvbGxpc2lvbi1jaGVjay1jb3N0IGxhdGVyIHRvIG1haW50KS4KKworICogQSAibHMtZmlsZXMiIHRoYXQgZW11bGF0ZXMgImZpbmQiIHRvIGVudW1lcmF0ZSBmaWxlcyBpbiB0aGUgd29ya2luZworICAgdHJlZSByZXN1bHRlZCBpbiBkdXBsaWNhdGVkIE1ha2VmaWxlIHJ1bGVzIHRoYXQgY2F1c2VkIHRoZSBidWlsZCB0bworICAgaXNzdWUgYW4gdW5uZWNlc3Nhcnkgd2FybmluZyBkdXJpbmcgYSB0cmlhbCBidWlsZCBhZnRlciBtZXJnZQorICAgY29uZmxpY3RzIGFyZSByZXNvbHZlZCBpbiB3b3JraW5nIHRyZWUgKi5oIGZpbGVzIGJ1dCBiZWZvcmUgdGhlCisgICByZXNvbHZlZCByZXN1bHRzIGFyZSBhZGRlZCB0byB0aGUgaW5kZXguICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBjaGVycnktcGljayIgKGFuZCAicmV2ZXJ0IiB0aGF0IHNoYXJlcyB0aGUgc2FtZSBydW50aW1lIGVuZ2luZSkKKyAgIHRoYXQgZGVhbHMgd2l0aCBtdWx0aXBsZSBjb21taXRzIGdvdCBjb25mdXNlZCB3aGVuIHRoZSBmaW5hbCBzdGVwCisgICBnZXRzIHN0b3BwZWQgd2l0aCBhIGNvbmZsaWN0IGFuZCB0aGUgdXNlciBjb25jbHVkZWQgdGhlIHNlcXVlbmNlCisgICB3aXRoICJnaXQgY29tbWl0Ii4gIEF0dGVtcHQgdG8gZml4IGl0IGJ5IGNsZWFuaW5nIHVwIHRoZSBzdGF0ZQorICAgZmlsZXMgdXNlZCBieSB0aGVzZSBjb21tYW5kcyBpbiBzdWNoIGEgc2l0dWF0aW9uLgorICAgKG1lcmdlIDRhNzI0ODZkZTkgcHcvY2xlYW4tc2VxdWVuY2VyLXN0YXRlLXVwb24tZmluYWwtY29tbWl0IGxhdGVyIHRvIG1haW50KS4KKworICogT24gYSBmaWxlc3lzdGVtIGxpa2UgSEZTKywgdGhlIG5hbWVzIG9mIHRoZSByZWZzIHN0b3JlZCBhcyBmaWxlc3lzdGVtCisgICBlbnRpdGllcyBtYXkgYmVjb21lIGRpZmZlcmVudCBmcm9tIHdoYXQgdGhlIGVuZC11c2VyIGV4cGVjdHMsIGp1c3QKKyAgIGxpa2UgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBnZXQgInJlbmFtZWQiLiAgV29yayBhcm91bmQgdGhlCisgICBtaXNtYXRjaCBieSBwYXlpbmcgYXR0ZW50aW9uIHRvIHRoZSBjb3JlLnByZWNvbXBvc2VVbmljb2RlCisgICBjb25maWd1cmF0aW9uLgorICAgKG1lcmdlIDhlNzEyZWY2ZmMgZW4vdW5pY29kZS1pbi1yZWZuYW1lcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIGdlbmVyYXRlIHRoZSBtdWx0aS1wYWNrIGlkeCBmaWxlIHdhcyBub3QgcHJlcGFyZWQgdG8KKyAgIHNlZSB0b28gbWFueSBwYWNrZmlsZXMgYW5kIHJhbiBvdXQgb2Ygb3BlbiBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRvIHJ1biB0ZXN0cyBmb3IgR2l0IFNWTiwgb3VyIHNjcmlwdHMgZm9yIENJIHVzZWQgdG8gaW5zdGFsbCB0aGUKKyAgIGdpdC1zdm4gcGFja2FnZSAoaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBicmluZyBpbiB0aGUgcmlnaHQKKyAgIGRlcGVuZGVuY2llcykuICBUaGlzIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaW5zdGFsbCB0aGUgbW9yZSBkaXJlY3QKKyAgIGRlcGVuZGVuY3ksIG5hbWVseSwgbGlic3ZuLXBlcmwuCisgICAobWVyZ2UgZGI4NjQzMDZjZiBzZy9jaS1saWJzdm4tcGVybCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiBydW5uaW5nIG9uIG1zeXMgZGlkIG5vdCBleHBlY3QgY3ZzbnQgc2hvd2VkCisgICAiY3ZzIHN0YXR1cyIgb3V0cHV0IHdpdGggQ1JMRiBsaW5lIGVuZGluZ3MuCisKKyAqIFRoZSBmc21vbml0b3IgaW50ZXJmYWNlIGdvdCBvdXQgb2Ygc3luYyBhZnRlciB0aGUgaW4tY29yZSBpbmRleAorICAgZmlsZSBnZXRzIGRpc2NhcmRlZCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDM5OGEzYjA4OTkganMvZnNtb25pdG9yLXJlZnJlc2gtYWZ0ZXItZGlzY2FyZGluZy1pbmRleCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3RhdHVzIiBkaWQgbm90IGtub3cgdGhhdCB0aGUgImxhYmVsIiBpbnN0cnVjdGlvbiBpbiB0aGUKKyAgIHRvZG8tbGlzdCAicmViYXNlIC1pIC1yIiB1c2VzIHNob3VsZCBub3QgYmUgc2hvd24gYXMgYSBoZXggb2JqZWN0CisgICBuYW1lLgorCisgKiBBIHByZXJlcXVpc2l0ZSBjaGVjayBpbiB0aGUgdGVzdCBzdWl0ZSB0byBzZWUgaWYgYSB3b3JraW5nIGpnaXQgaXMKKyAgIGF2YWlsYWJsZSB3YXMgbWFkZSBtb3JlIHJvYnVzdC4KKyAgIChtZXJnZSBhYmQwZjI4OTgzIHR6L3Rlc3QtbGliLWNoZWNrLXdvcmtpbmctamdpdCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBwYXJzZSA6PHBhdGg+IHRoYXQgb2J0YWlucyB0aGUgb2JqZWN0IG5hbWUgZm9yIGFuCisgICBpbmRleGVkIG9iamVjdCBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0LgorCisgKiBDb2RlIGNsZWFudXAsIGRvY2ZpeCwgYnVpbGQgZml4LCBldGMuCisgICAobWVyZ2UgMTFmNDcwYWVlNyBqYy90ZXN0LXllcy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDkwNTAzYTI0MGIganMvZG9jLXN5bXJlZi1pbi1wcm90by12MSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWMzMjZkMTI1MiBqay91bnVzZWQtcGFyYW1zIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OGNhYmJmZGEzIGRsL2RvYy1zdWJtb2R1bGUtd28tc3ViY29tbWFuZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTkwMzYyMzc2MSBhYi9yZWNlaXZlLXBhY2stdXNlLWFmdGVyLWZyZWUtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxZWRlNDVlNDRiIGVuL21lcmdlLW9wdGlvbnMtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzZTE0ZGQyYzhlIHJkL2RvYy1ob29rLXVzZWQtaW4tc2FtcGxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjMjcxZGMyOGZkIG5kL25vLW1vcmUtY2hlY2stcmFjeSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTZlMTUxOTRhOCB5Yi91dGYtMTZsZS1ib20tc3BlbGxmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJiMTAxYWFmMGMgcmQvYXR0ci5jLWNvbW1lbnQtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzE2YTVhZjgxMiByZC9nYy1wcnVuZS1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MGIyMDYzNzFkIGpzL3VudHJhdmlzLXdpbmRvd3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRiZjQ3MjE1ZTMganMvcmViYXNlLXJlY3JlYXRlLW1lcmdlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NmNiMmQzMGY4IGRsL3Jlc2V0LWRvYy1uby13cnQtYWJicmV2IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2NGVjYTMwNmEyIGphL2Rpci1yZW5hbWUtZG9jLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFmOTFiMDIzMGMgZGwvaWdub3JlLWRvY3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU5YTA2ZTk0N2IgcmEvdDM2MDAtdGVzdC1wYXRoLWZ1bmNzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlMDQxZDA3ODFiIGFyL3Q0MTUwLXJlbW92ZS1jcnVmdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGQ3NWExZDE4MyBtYS9hc2NpaWRvY3Rvci1maXhlcy1tb3JlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NGNjNTQ3YjBmIG1oL3BhY2stcHJvdG9jb2wtZG9jLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWQzMTg1MWZhNiBhYi9kb2MtbWlzYy10eXBvZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE3MjU2ZGViZDQgbmQvY2hlY2tvdXQtbS1kb2MtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzYTllMWFkNzhkIGp0L3Q1NTUxLXByb3RvY29sLXYyLWRvZXMtbm90LWhhdmUtaGFsZi1hdXRoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwYjkxOGI3NWFmIHNnL3Q1MzE4LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDY4ZWQ3MWI1M2MgY2IvZG9jby1tb25vIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhMzRkY2EyNDUxIG5kL2ludGVycHJldC10cmFpbGVycy1kb2NmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNmN2I4NTdhNzcgZW4vZmFzdC1pbXBvcnQtcGFyc2luZy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZlNjFjY2JjMzUgcG8vcmVyZXJlLWRvYy1mbXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZmZWEwMjQ4YmYgcG8vZGVzY3JpYmUtbm90LW5lY2Vzc2FyaWx5LTcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdjYjcyODNhZGIgdGcvbHMtZmlsZXMtZGVidWctZm9ybWF0LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjY0YTIxYmQ4MiB0ei9kb2MtYXBvc3Ryb3BoZS1uby1sb25nZXItbmVlZGVkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkYmU3YjQxMDE5IGpzL3QzMzAxLXVuYnJlYWstbm90ZXMtdGVzdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDgwODNlNDE4MCBrbS90MzAwMC1yZXRpdGxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5ZTRjYmNjYmQ3IHR6L2dpdC1zdm4tZG9jLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRhOWNhOTU1YTcgamsvbHMtZmlsZXMtZG9jLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDY4MDRiYTNhNTggY3cvZGlmZi1oaWdobGlnaHQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDFhODc4NzE0NGQgbmQvc3VibW9kdWxlLWhlbHBlci1pbmNvbXBsZXRlLWxpbmUtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkOWVmNTczODM3IGprL2FwYWNoZS1sc2FuIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjODcxZmJlZTJiIGpzL3Q2NTAwLXVzZS13aW5kb3dzLXBpZC1vbi1taW5ndyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2U0YzdiZmM5MCBibC90NDI1My1leGl0LWNvZGUtZnJvbS1mb3JtYXQtcGF0Y2ggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM5N2E0NmRiNzgganMvdDU1ODAtdW5jLWFsdGVybmF0ZS10ZXN0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkNDkwNzcyMGEyIGNtL25vdGVzLWNvbW1lbnQtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5ZGRlMDZkZTEzIGNiL2h0dHAtcHVzaC1udWxsLWluLW1lc3NhZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0Yzc4NWMwZWRjIGpzL3JlYmFzZS1jb25maWctYml0Zml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4ZTlmZTE2Yzg3IGVzL2RvYy1naXRzdWJtb2R1bGVzLW1hcmt1cCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyNzYyZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMi4xLnR4dApAQCAtMCwwICsxLDE1MCBAQAorR2l0IDIuMjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMjIKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgcmVsYXRpdmUgcGF0aG5hbWUgZ2l2ZW4gdG8gImdpdCBpbml0IC0tdGVtcGxhdGU9PHBhdGg+IDxyZXBvPiIKKyAgIG91Z2h0IHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgImdpdCBpbml0IiBnZXRzIGludm9rZWQgaW4sCisgICBidXQgaXQgaW5zdGVhZCB3YXMgbWFkZSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogImdpdCB3b3JrdHJlZSBhZGQiIHVzZWQgdG8gZmFpbCB3aGVuIGFub3RoZXIgd29ya3RyZWUgY29ubmVjdGVkIHRvCisgICB0aGUgc2FtZSByZXBvc2l0b3J5IHdhcyBjb3JydXB0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBvd25lcnNoaXAgcnVsZSBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciB0byBmYXN0LWltcG9ydCByZW1vdGUKKyAgIGJhY2tlbmQgd2FzIG1peGVkIHVwLCBsZWFkaW5nIHRvIHVucmVsYXRlZCBmaWxlIGRlc2NyaXB0b3IgZ2V0dGluZworICAgY2xvc2VkLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogImdpdCB1cGRhdGUtc2VydmVyLWluZm8iIHVzZWQgdG8gbGVhdmUgc3RhbGUgcGFja2ZpbGVzIGluIGl0cworICAgb3V0cHV0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBzZXJ2ZXIgc2lkZSBzdXBwb3J0IGZvciAiZ2l0IGZldGNoIiB1c2VkIHRvIHNob3cgaW5jb3JyZWN0CisgICB2YWx1ZSBmb3IgdGhlIEhFQUQgc3ltYm9saWMgcmVmIHdoZW4gdGhlIG5hbWVzcGFjZSBmZWF0dXJlIGlzIGluCisgICB1c2UsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBhbSAtaSAtLXJlc29sdmVkIiBzZWdmYXVsdGVkIGFmdGVyIHRyeWluZyB0byBzZWUgYSBjb21taXQgYXMKKyAgIGlmIGl0IHdlcmUgYSB0cmVlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYnVuZGxlIHZlcmlmeSIgbmVlZHMgdG8gc2VlIGlmIHByZXJlcXVpc2l0ZSBvYmplY3RzIGV4aXN0IGluCisgICB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnksIGJ1dCB0aGUgY29tbWFuZCBkaWQgbm90IGNoZWNrIGlmIHdlIGFyZQorICAgaW4gYSByZXBvc2l0b3J5IHVwZnJvbnQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBtZXJnZSAtLXNxdWFzaCIgaXMgZGVzaWduZWQgdG8gdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZQorICAgaW5kZXggd2l0aG91dCBjcmVhdGluZyB0aGUgY29tbWl0LCBhbmQgdGhpcyBjYW5ub3QgYmUgY291bnRlcm1hbmRlZAorICAgYnkgYWRkaW5nIHRoZSAiLS1jb21taXQiIG9wdGlvbjsgdGhlIGNvbW1hbmQgbm93IHJlZnVzZXMgdG8gd29yaworICAgd2hlbiBib3RoIG9wdGlvbnMgYXJlIGdpdmVuLgorCisgKiBUaGUgZGF0YSBjb2xsZWN0ZWQgYnkgZnNtb25pdG9yIHdhcyBub3QgcHJvcGVybHkgd3JpdHRlbiBiYWNrIHRvCisgICB0aGUgb24tZGlzayBpbmRleCBmaWxlLCBicmVha2luZyB0NzUxOSB0ZXN0cyBvY2Nhc2lvbmFsbHksIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFVwZGF0ZSB0byBVbmljb2RlIDEyLjEgd2lkdGggdGFibGUuCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgdG8gaW52b2tlIGEgImdpdCBjYXQtZmlsZSIgY29tbWFuZCBmcm9tIGluc2lkZQorICAgImdpdCBwNCIgd2FzIG5vdCBwcm9wZXJseSBxdW90ZWQgdG8gcHJvdGVjdCBhIGNhcmV0IGFuZCBydW5uaW5nIGEKKyAgIGJyb2tlbiBjb21tYW5kIG9uIFdpbmRvd3MsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCByZXF1ZXN0LXB1bGwiIGxlYXJuZWQgdG8gd2FybiB3aGVuIHRoZSByZWYgd2UgYXNrIHRoZW0gdG8gcHVsbAorICAgZnJvbSBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeSBhbmQgaW4gdGhlIHB1Ymxpc2hlZCByZXBvc2l0b3J5IGFyZQorICAgZGlmZmVyZW50LgorCisgKiBXaGVuIGNyZWF0aW5nIGEgcGFydGlhbCBjbG9uZSwgdGhlIG9iamVjdCBmaWx0ZXJpbmcgY3JpdGVyaWEgaXMKKyAgIHJlY29yZGVkIGZvciB0aGUgb3JpZ2luIG9mIHRoZSBjbG9uZSwgYnV0IHRoaXMgaW5jb3JyZWN0bHkgdXNlZCBhCisgICBoYXJkY29kZWQgbmFtZSAib3JpZ2luIiB0byBuYW1lIHRoYXQgcmVtb3RlOyBpdCBoYXMgYmVlbiBjb3JyZWN0ZWQKKyAgIHRvIGhvbm9yIHRoZSAiLS1vcmlnaW4gPG5hbWU+IiBvcHRpb24uCisKKyAqICJnaXQgZmV0Y2giIGludG8gYSBsYXp5IGNsb25lIGZvcmdvdCB0byBmZXRjaCBiYXNlIG9iamVjdHMgdGhhdCBhcmUKKyAgIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSBkZWx0YSBpbiBhIHRoaW4gcGFja2ZpbGUsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSBmaWx0ZXJfZGF0YSB1c2VkIGluIHRoZSBsaXN0LW9iamVjdHMtZmlsdGVyICh3aGljaCBtYW5hZ2VzIGEKKyAgIGxhemlseSBzcGFyc2UgY2xvbmUgcmVwb3NpdG9yeSkgZGlkIG5vdCB1c2UgdGhlIGR5bmFtaWMgYXJyYXkgQVBJCisgICBjb3JyZWN0bHktLS0nbnInIGlzIHN1cHBvc2VkIHRvIHBvaW50IGF0IG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQKKyAgIG9mIHRoZSBhcnJheSBpbiB1c2UuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGRlc2NyaXB0aW9uIGFib3V0IHNsYXNoZXMgaW4gZ2l0aWdub3JlIHBhdHRlcm5zICh1c2VkIHRvCisgICBpbmRpY2F0ZSB0aGluZ3MgbGlrZSAiYW5jaG9yZWQgdG8gdGhpcyBsZXZlbCBvbmx5IiBhbmQgIm9ubHkKKyAgIG1hdGNoZXMgZGlyZWN0b3JpZXMiKSBoYXMgYmVlbiByZXZhbXBlZC4KKworICogVGhlIFVSTCBkZWNvZGluZyBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYXZvaWQgZ29pbmcgcGFzdCB0aGUgZW5kCisgICBvZiB0aGUgc3RyaW5nIHdoaWxlIHBhcnNpbmcgJS08aGV4Pi08aGV4PiBzZXF1ZW5jZS4KKworICogVGhlIGxpc3Qgb2YgZm9yLWVhY2ggbGlrZSBtYWNyb3MgdXNlZCBieSBjbGFuZy1mb3JtYXQgaGFzIGJlZW4KKyAgIHVwZGF0ZWQuCisKKyAqICJnaXQgcHVzaCAtLWF0b21pYyIgdGhhdCBnb2VzIG92ZXIgdGhlIHRyYW5zcG9ydC1oZWxwZXIgKG5hbWVseSwKKyAgIHRoZSBzbWFydCBodHRwIHRyYW5zcG9ydCkgZmFpbGVkIHRvIHByZXZlbnQgcmVmcyB0byBiZSBwdXNoZWQgd2hlbgorICAgaXQgY2FuIGxvY2FsbHkgdGVsbCB0aGF0IG9uZSBvZiB0aGUgcmVmIHVwZGF0ZSB3aWxsIGZhaWwgd2l0aG91dAorICAgaGF2aW5nIHRvIGNvbnN1bHQgdGhlIG90aGVyIGVuZCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGNsZWFuIiBzaWxlbnRseSBza2lwcGVkIGEgcGF0aCB3aGVuIGl0IGNhbm5vdCBsc3RhdCgpIGl0OyBub3cKKyAgIGl0IGdpdmVzIGEgd2FybmluZy4KKworICogQSBjb2RlcGF0aCB0aGF0IHJlYWRzIGZyb20gR1BHIGZvciBzaWduZWQgb2JqZWN0IHZlcmlmaWNhdGlvbiByZWFkCisgICBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlciwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgcm0iIHRvIHJlc29sdmUgYSBjb25mbGljdGVkIHBhdGggbGVha2VkIGFuIGludGVybmFsIG1lc3NhZ2UKKyAgICJuZWVkcyBtZXJnZSIgYmVmb3JlIGFjdHVhbGx5IHJlbW92aW5nIHRoZSBwYXRoLCB3aGljaCB3YXMKKyAgIGNvbmZ1c2luZy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgImdpdCBjbG9uZSIgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gY29tbWFuZCBsaW5lIG9wdGlvbnMgaW4gaXRzCisgICBkZXNjcmlwdGlvbiBpbiB0aGUgc2hvcnQgZm9ybTsgdGhleSBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBsb25nCisgICBmb3JtcyB0byBtYWtlIHRoZW0gbW9yZSByZWNvZ25pc2FibGUuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlYmFzZS5yZXNjaGVkdWxlRmFpbGVkRXhlYyBzaG91bGQgYmUKKyAgIGVmZmVjdGl2ZSBvbmx5IHdoaWxlIHJ1bm5pbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIGFuZCBzaG91bGQgbm90CisgICBhZmZlY3QgYW55dGhpbmcgd2hlbiBydW5uaW5nIGEgbm9uLWludGVyYWN0aXZlIG9uZSwgd2hpY2ggd2FzIG5vdAorICAgdGhlIGNhc2UuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIgZGlkIG5vdCBwcm90ZWN0IGNvbW1hbmQgbGluZSBvcHRpb25zIHBhc3NlZAorICAgdG8gdGhlIGNvbW1hbmQgdG8gYmUgcnVuIGluIGVhY2ggc3VibW9kdWxlIGNvcnJlY3RseSwgd2hlbiB0aGUKKyAgICItLXJlY3Vyc2l2ZSIgb3B0aW9uIHdhcyBpbiB1c2UuCisKKyAqIFVzZSAiRXJhc2UgaW4gTGluZSIgQ1NJIHNlcXVlbmNlIHRoYXQgaXMgYWxyZWFkeSB1c2VkIGluIHRoZSBlZGl0b3IKKyAgIHN1cHBvcnQgdG8gY2xlYXIgY3J1ZnQgaW4gdGhlIHByb2dyZXNzIG91dHB1dC4KKworICogVGhlIGNvZGVwYXRoIHRvIGNvbXB1dGUgZGVsdGEgaXNsYW5kcyB1c2VkIHRvIHNwZXcgcHJvZ3Jlc3Mgb3V0cHV0CisgICB3aXRob3V0IGdpdmluZyB0aGUgY2FsbGVycyBhbnkgd2F5IHRvIHNxdWVsY2ggaXQsIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZC4KKworICogVGhlIGNvZGUgdG8gcGFyc2Ugc2NhbGVkIG51bWJlcnMgb3V0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgaGFzCisgICBiZWVuIG1hZGUgbW9yZSByb2J1c3QgYW5kIGFsc28gZWFzaWVyIHRvIGZvbGxvdy4KKworICogQW4gaW5jb3JyZWN0IGxpc3Qgb2Ygb3B0aW9ucyB3YXMgY2FjaGVkIGFmdGVyIGNvbW1hbmQgbGluZQorICAgY29tcGxldGlvbiBmYWlsZWQgKGUuZy4gdHJ5aW5nIHRvIGNvbXBsZXRlIGEgY29tbWFuZCB0aGF0IHJlcXVpcmVzCisgICBhIHJlcG9zaXRvcnkgb3V0c2lkZSBvbmUpLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIC0tYWJvcnQiIHVzZWQgdG8gbGVhdmUgcmVmcy9yZXdyaXR0ZW4vIHdoZW4gY29uY2x1ZGluZworICAgImdpdCByZWJhc2UgLXIiLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgc3Rhc2ggc2hvdyAyMyIgdXNlZCB0byB3b3JrLCBidXQgbm8gbW9yZSBhZnRlciBnZXR0aW5nCisgICByZXdyaXR0ZW4gaW4gQzsgdGhpcyByZWdyZXNzaW9uIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGFsd2F5cyB0cmVhdGVkICcjJyBhcyB0aGUgY29tbWVudAorICAgY2hhcmFjdGVyLCByZWdhcmRsZXNzIG9mIGNvcmUuY29tbWVudENoYXIgc2V0dGluZywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogQ29kZSBjbGVhbi11cCB0byBhdm9pZCBzaWduZWQgaW50ZWdlciBvdmVybGFwcyBkdXJpbmcgYmluYXJ5IHNlYXJjaC4KKworICogImdpdCBjaGVja291dCAtcCIgbmVlZHMgdG8gc2VsZWN0aXZlbHkgYXBwbHkgYSBwYXRjaCBpbiByZXZlcnNlLAorICAgd2hpY2ggZGlkIG5vdCB3b3JrIHdlbGwuCisKKyAqIFRoZSBjb21taXQtZ3JhcGggZmlsZSBpcyBub3cgcGFydCBvZiB0aGUgImZpbGVzIHRoYXQgdGhlIHJ1bnRpbWUKKyAgIG1heSBrZWVwIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBvbiwgYWxsIG9mIHdoaWNoIHdvdWxkIG5lZWQgdG8gYmUKKyAgIGNsb3NlZCB3aGVuIGRvbmUgd2l0aCB0aGUgb2JqZWN0IHN0b3JlIiwgYW5kIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8KKyAgIGFuIGV4aXN0aW5nIGNvbW1pdC1ncmFwaCBmaWxlIG5vdyBpcyBjbG9zZWQgYmVmb3JlICJnYyIgZmluYWxpemVzIGEKKyAgIG5ldyBpbnN0YW5jZSB0byByZXBsYWNlIGl0LgorCisgKiBDb2RlIHJlc3RydWN0dXJpbmcgZHVyaW5nIDIuMjAgcGVyaW9kIGJyb2tlIGZldGNoaW5nIHRhZ3MgdmlhCisgICAiaW1wb3J0IiBiYXNlZCB0cmFuc3BvcnRzLgorCisgKiBXZSBoYXZlIGJlZW4gdHJ5aW5nIG91dCBhIGZldyBsYW5ndWFnZSBmZWF0dXJlcyBvdXRzaWRlIGM4OTsgdGhlCisgICBjb2RpbmcgZ3VpZGVsaW5lcyBkb2N1bWVudCBkaWQgbm90IHRhbGsgYWJvdXQgdGhlbSBhbmQgaW5zdGVhZCBoYWQKKyAgIGEgYmxhbmtldCBiYW4gYWdhaW5zdCB0aGVtLgorCisgKiBUaGUgaW50ZXJuYWwgZGlmZiBtYWNoaW5lcnkgY2FuIGJlIG1hZGUgdG8gcmVhZCBvdXQgb2YgYm91bmRzIHdoaWxlCisgICBsb29raW5nIGZvciAtLWZ1bmNpb24tY29udGV4dCBsaW5lIGluIGEgY29ybmVyIGNhc2UsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIGNvZGUgY2xlYW4tdXBzIGFuZCBtaW5vciBmaXh1cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwYTIzZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMi4yLnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2Mi4yMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiwgdjIuMTUuNCwKK3YyLjE3LjMsIHYyLjIwLjIgYW5kIGluIHYyLjIxLjEsIGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcworQ1ZFLTIwMTktMTM0OCwgQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwKK0NWRS0yMDE5LTEzNTIsIENWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIENWRS0yMDE5LTEzODcsIGFuZAorQ1ZFLTIwMTktMTk2MDQ7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhvc2UgdmVyc2lvbnMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjNGU3OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMy4wLnR4dApAQCAtMCwwICsxLDM0OCBAQAorR2l0IDIuMjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjIyCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZQorCisgKiBUaGUgIi0tYmFzZSIgb3B0aW9uIG9mICJmb3JtYXQtcGF0Y2giIGNvbXB1dGVkIHRoZSBwYXRjaC1pZHMgZm9yCisgICBwcmVyZXF1aXNpdGUgcGF0Y2hlcyBpbiBhbiB1bnN0YWJsZSB3YXksIHdoaWNoIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGNvbXB1dGUgaW4gYSB3YXkgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggImdpdCBwYXRjaC1pZCAtLXN0YWJsZSIuCisKKyAqIFRoZSAiZ2l0IGxvZyIgY29tbWFuZCBieSBkZWZhdWx0IGJlaGF2ZXMgYXMgaWYgdGhlIC0tbWFpbG1hcCBvcHRpb24KKyAgIHdhcyBnaXZlbi4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogVGhlICJnaXQgZmFzdC1leHBvcnQvaW1wb3J0IiBwYWlyIGhhcyBiZWVuIHRhdWdodCB0byBoYW5kbGUgY29tbWl0cworICAgd2l0aCBsb2cgbWVzc2FnZXMgaW4gZW5jb2Rpbmcgb3RoZXIgdGhhbiBVVEYtOCBiZXR0ZXIuCisKKyAqIEluIHJlY2VudCB2ZXJzaW9ucyBvZiBHaXQsIHBlci13b3JrdHJlZSByZWZzIGFyZSBleHBvc2VkIGluCisgICByZWZzL3dvcmt0cmVlcy88d3RuYW1lPi8gaGllcmFyY2h5LCB3aGljaCBtZWFucyB0aGF0IHdvcmt0cmVlIG5hbWVzCisgICBtdXN0IGJlIGEgdmFsaWQgcmVmbmFtZSBjb21wb25lbnQuICBUaGUgY29kZSBub3cgc2FuaXRpemVzIHRoZSBuYW1lcworICAgZ2l2ZW4gdG8gd29ya3RyZWVzLCB0byBtYWtlIHN1cmUgdGhlc2UgcmVmcyBhcmUgd2VsbC1mb3JtZWQuCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgIi0tcXVpdCIgb3B0aW9uIHRoYXQgY2xlYW5zIHVwIHRoZSBpbi1wcm9ncmVzcworICAgbWVyZ2Ugd2hpbGUgbGVhdmluZyB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggc3RpbGwgaW4gYSBtZXNzLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5zIGEgY29uZmlndXJhdGlvbiB0byBzZXQgdGhlIGRlZmF1bHQgZm9yCisgICBpdHMgLS1ub3Rlcz08cmVmPiBvcHRpb24uCisKKyAqIFRoZSBjb2RlIHRvIHNob3cgYXJncyB3aXRoIHBvdGVudGlhbCB0eXBvIHRoYXQgY2Fubm90IGJlCisgICBpbnRlcnByZXRlZCBhcyBhIGNvbW1pdC1pc2ggaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAqICJnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGxlYXJuZWQgdG8gc2V0IHVwIHRoZSBzdWJtb2R1bGVzCisgICB0byBpZ25vcmUgY29tbWl0IG9iamVjdCBuYW1lcyByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGdpdGxpbmsKKyAgIGFuZCBpbnN0ZWFkIHVzZSB0aGUgY29tbWl0cyB0aGF0IGhhcHBlbiB0byBiZSBhdCB0aGUgdGlwIG9mIHRoZQorICAgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZyb20gdGhlIGdldC1nbywgYnkgcGFzc2luZyB0aGUgbmV3CisgICAiLS1yZW1vdGUtc3VibW9kdWxlcyIgb3B0aW9uLgorCisgKiBUaGUgcGF0dGVybiAiZ2l0IGRpZmYvZ3JlcCIgdXNlIHRvIGV4dHJhY3QgZnVuY25hbWUgYW5kIHdvcmRzCisgICBib3VuZGFyeSBmb3IgTWF0bGFiIGhhcyBiZWVuIGV4dGVuZCB0byBjb3ZlciBPY3RhdmUsIHdoaWNoIGlzIG1vcmUKKyAgIG9yIGxlc3MgZXF1aXZhbGVudC4KKworICogImdpdCBoZWxwIGdpdCIgd2FzIGhhcmQgdG8gZGlzY292ZXIgKHdlbGwsIGF0IGxlYXN0IGZvciBzb21lCisgICBwZW9wbGUpLgorCisgKiBUaGUgcGF0dGVybiAiZ2l0IGRpZmYvZ3JlcCIgdXNlIHRvIGV4dHJhY3QgZnVuY25hbWUgYW5kIHdvcmRzCisgICBib3VuZGFyeSBmb3IgUnVzdCBoYXMgYmVlbiBhZGRlZC4KKworICogImdpdCBzdGF0dXMiIGNhbiBiZSB0b2xkIGEgbm9uLXN0YW5kYXJkIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQorICAgIi0tW25vLV1haGVhZC1iZWhpbmQiIG9wdGlvbiB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgIHN0YXR1cy5haGVhZEJlaGluZC4KKworICogImdpdCBmZXRjaCIgYW5kICJnaXQgcHVsbCIgcmVwb3J0cyB3aGVuIGEgZmV0Y2ggcmVzdWx0cyBpbgorICAgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzIHRvIGxldCB0aGUgdXNlciBub3RpY2UgdW51c3VhbCBzaXR1YXRpb24uCisgICBUaGUgY29tbWFuZHMgbGVhcm5lZCAiLS1uby1zaG93LWZvcmNlZC11cGRhdGVzIiBvcHRpb24gdG8gZGlzYWJsZQorICAgdGhpcyBzYWZldHkgZmVhdHVyZS4KKworICogVHdvIG5ldyBjb21tYW5kcyAiZ2l0IHN3aXRjaCIgYW5kICJnaXQgcmVzdG9yZSIgYXJlIGludHJvZHVjZWQgdG8KKyAgIHNwbGl0ICJjaGVja2luZyBvdXQgYSBicmFuY2ggdG8gd29yayBvbiBhZHZhbmNpbmcgaXRzIGhpc3RvcnkiIGFuZAorICAgImNoZWNraW5nIG91dCBwYXRocyBvdXQgb2YgdGhlIGluZGV4IGFuZC9vciBhIHRyZWUtaXNoIHRvIHdvcmsgb24KKyAgIGFkdmFuY2luZyB0aGUgY3VycmVudCBoaXN0b3J5IiBvdXQgb2YgdGhlIHNpbmdsZSAiZ2l0IGNoZWNrb3V0IgorICAgY29tbWFuZC4KKworICogImdpdCBicmFuY2ggLS1saXN0IiBsZWFybmVkIHRvIGFsd2F5cyBvdXRwdXQgdGhlIGRldGFjaGVkIEhFQUQgYXMKKyAgIHRoZSBmaXJzdCBpdGVtICh3aGVuIHRoZSBIRUFEIGlzIGRldGFjaGVkLCBvZiBjb3Vyc2UpLCByZWdhcmRsZXNzCisgICBvZiB0aGUgbG9jYWxlLgorCisgKiBUaGUgY29uZGl0aW9uYWwgaW5jbHVzaW9uIG1lY2hhbmlzbSBsZWFybmVkIHRvIGJhc2UgdGhlIGNob2ljZSBvbgorICAgdGhlIGJyYW5jaCB0aGUgSEVBRCBjdXJyZW50bHkgaXMgb24uCisKKyAqICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIiBsZWFybmVkIHRoZSAiLS1uby1vYmplY3QtbmFtZXMiIG9wdGlvbiB0bworICAgc3F1ZWxjaCB0aGUgcGF0aCB0byB0aGUgb2JqZWN0IHRoYXQgaXMgdXNlZCBhcyBhIGdyb3VwaW5nIGhpbnQgZm9yCisgICBwYWNrLW9iamVjdHMuCisKKyAqIEEgbmV3IHRhZy5ncGdTaWduIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdHVybnMgImdpdCB0YWcgLWEiIGludG8KKyAgICJnaXQgdGFnIC1zIi4KKworICogImdpdCBtdWx0aS1wYWNrLWluZGV4IiBsZWFybmVkIGV4cGlyZSBhbmQgcmVwYWNrIHN1YmNvbW1hbmRzLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybmVkIHRvICJpZ25vcmUiIGNvbW1pdHMgaW4gdGhlIGhpc3RvcnksIHdob3NlCisgICBlZmZlY3RzIChhcyB3ZWxsIGFzIHRoZWlyIHByZXNlbmNlKSBnZXQgaWdub3JlZC4KKworICogImdpdCBjaGVycnktcGljay9yZXZlcnQiIGxlYXJuZWQgYSBuZXcgIi0tc2tpcCIgYWN0aW9uLgorCisgKiBUaGUgdGlwcyBvZiByZWZzIGZyb20gdGhlIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUgY2FuIGJlIHVzZWQgYXMKKyAgIHN0YXJ0aW5nIHBvaW50IGZvciByZWFjaGFiaWxpdHkgY29tcHV0YXRpb24gbm93LgorCisgKiBFeHRyYSBibGFuayBsaW5lcyBpbiAiZ2l0IHN0YXR1cyIgb3V0cHV0IGhhdmUgYmVlbiByZWR1Y2VkLgorCisgKiBUaGUgY29tbWl0cyBpbiBhIHJlcG9zaXRvcnkgY2FuIGJlIGRlc2NyaWJlZCBieSBtdWx0aXBsZQorICAgY29tbWl0LWdyYXBoIGZpbGVzIG5vdywgd2hpY2ggYWxsb3dzIHRoZSBjb21taXQtZ3JhcGggZmlsZXMgdG8gYmUKKyAgIHVwZGF0ZWQgaW5jcmVtZW50YWxseS4KKworICogImdpdCByYW5nZS1kaWZmIiBvdXRwdXQgaGFzIGJlZW4gdHdlYWtlZCBmb3IgZWFzaWVyIGlkZW50aWZpY2F0aW9uCisgICBvZiB3aGljaCBwYXJ0IG9mIHdoYXQgZmlsZSB0aGUgcGF0Y2ggc2hvd24gaXMgYWJvdXQuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogVXBkYXRlIHN1cHBvcnRpbmcgcGFydHMgb2YgImdpdCByZWJhc2UiIHRvIHJlbW92ZSBjb2RlIHRoYXQgc2hvdWxkCisgICBubyBsb25nZXIgYmUgdXNlZC4KKworICogRGV2ZWxvcGVyIHN1cHBvcnQgdG8gZW11bGF0ZSB1bnNhdGlzZmllZCBwcmVyZXF1aXNpdGVzIGluIHRlc3RzIHRvCisgICBlbnN1cmUgdGhhdCB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXN0cyBzdGlsbCBzdWNjZWVkcyB3aGVuIHRlc3RzCisgICB3aXRoIHByZXJlcXVpc2l0ZXMgYXJlIHNraXBwZWQuCisKKyAqICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIiBsZWFybmVkIG5vdCB0byByZXdyaXRlIHRoZSBmaWxlIHdpdGggdGhlCisgICBzYW1lIGNvbnRlbnRzLgorCisgKiBUaGUgd2F5IG9mIHNwZWNpZnlpbmcgdGhlIHBhdGggdG8gZmluZCBkeW5hbWljIGxpYnJhcmllcyBhdCBydW50aW1lCisgICBoYXMgYmVlbiBzaW1wbGlmaWVkLiAgVGhlIG9sZCBkZWZhdWx0IHRvIHBhc3MgLVIvcGF0aC90by9kaXIgaGFzIGJlZW4KKyAgIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBkZWZhdWx0IHRvIHBhc3MgLVdsLC1ycGF0aCwvcGF0aC90by9kaXIsCisgICB3aGljaCBpcyB0aGUgbW9yZSByZWNlbnQgR0NDIHVzZXMuICBUaG9zZSB3aG8gbmVlZCB0byBidWlsZCB3aXRoIGFuCisgICBvbGQgR0NDIGNhbiBzdGlsbCB1c2UgIkNDX0xEX0RZTlBBVEg9LVIiCisKKyAqIFByZXBhcmUgdXNlIG9mIHJlYWNoYWJpbGl0eSBpbmRleCBpbiB0b3BvbG9naWNhbCB3YWxrZXIgdGhhdCB3b3JrcworICAgb24gYSByYW5nZSAoQS4uQikuCisKKyAqIEEgbmV3IHR1dG9yaWFsIHRhcmdldGluZyBzcGVjaWZpY2FsbHkgYXNwaXJpbmcgZ2l0LWNvcmUKKyAgIGRldmVsb3BlcnMgaGFzIGJlZW4gYWRkZWQuCisKKyAqIEF1dG8tZGV0ZWN0IGhvdyB0byB0ZWxsIEhQLVVYIGFDQyB3aGVyZSB0byB1c2UgZHluYW1pY2FsbHkgbGlua2VkCisgICBsaWJyYXJpZXMgZnJvbSBhdCBydW50aW1lLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgYW5kIGl0cyB0ZXN0cyBub3cgc3Bhd24gZmV3ZXIgc3VicHJvY2Vzc2VzLgorCisgKiBEZXYgc3VwcG9ydCB1cGRhdGUgdG8gaGVscCB0cmFjaW5nIG91dCB0ZXN0cy4KKworICogU3VwcG9ydCB0byBidWlsZCB3aXRoIE1TVkMgaGFzIGJlZW4gdXBkYXRlZC4KKworICogImdpdCBmZXRjaCIgdGhhdCBncmFicyBmcm9tIGEgZ3JvdXAgb2YgcmVtb3RlcyBsZWFybmVkIHRvIHJ1biB0aGUKKyAgIGF1dG8tZ2Mgb25seSBvbmNlIGF0IHRoZSB2ZXJ5IGVuZC4KKworICogQSBoYW5kZnVsIG9mIFdpbmRvd3MgYnVpbGQgcGF0Y2hlcyBoYXZlIGJlZW4gdXBzdHJlYW1lZC4KKworICogVGhlIGNvZGUgdG8gcmVhZCBzdGF0ZSBmaWxlcyB1c2VkIGJ5IHRoZSBzZXF1ZW5jZXIgbWFjaGluZXJ5IGZvcgorICAgImdpdCBzdGF0dXMiIGhhcyBiZWVuIG1hZGUgbW9yZSByb2J1c3QgYWdhaW5zdCBhIGNvcnJ1cHQgb3Igc3RhbGUKKyAgIHN0YXRlIGZpbGVzLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgd2l0aCBtdWx0aXBsZSBwYXR0ZXJucyBoYXZlIGJlZW4gb3B0aW1pemVkLgorCisgKiBUaGUgdHJlZS13YWxrIEFQSSBsZWFybmVkIHRvIHBhc3MgYW4gaW4tY29yZSByZXBvc2l0b3J5CisgICBpbnN0YW5jZSB0aHJvdWdob3V0IG1vcmUgY29kZXBhdGhzLgorCisgKiBXaGVuIG9uZSBzdGVwIGluIG11bHRpIHN0ZXAgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIHJlc2V0IG9yCisgICBjb21taXR0ZWQsIHRoZSBjb21tYW5kIGxpbmUgcHJvbXB0IHNjcmlwdCBmYWlsZWQgdG8gbm90aWNlIHRoZQorICAgY3VycmVudCBzdGF0dXMsIHdoaWNoIGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiBNYW55IEdJVF9URVNUXyogZW52aXJvbm1lbnQgdmFyaWFibGVzIGNvbnRyb2wgdmFyaW91cyBhc3BlY3RzIG9mCisgICBob3cgb3VyIHRlc3RzIGFyZSBydW4sIGJ1dCBhIGZldyBmb2xsb3dlZCAibm9uLWVtcHR5IGlzIHRydWUsIGVtcHR5CisgICBvciB1bnNldCBpcyBmYWxzZSIgd2hpbGUgb3RoZXJzIGZvbGxvd2VkIHRoZSB1c3VhbCAidGhlcmUgYXJlIGEgZmV3CisgICB3YXlzIHRvIHNwZWxsIHRydWUsIGxpa2UgeWVzLCBvbiwgZXRjLiwgYW5kIGFsc28gd2F5cyB0byBzcGVsbAorICAgZmFsc2UsIGxpa2Ugbm8sIG9mZiwgZXRjLiIgY29udmVudGlvbi4KKworICogQWRqdXN0IHRoZSBkaXItaXRlcmF0b3IgQVBJIGFuZCBhcHBseSBpdCB0byB0aGUgbG9jYWwgY2xvbmUKKyAgIG9wdGltaXphdGlvbiBjb2RlcGF0aC4KKworICogV2UgaGF2ZSBiZWVuIHRyeWluZyBvdXQgYSBmZXcgbGFuZ3VhZ2UgZmVhdHVyZXMgb3V0c2lkZSBjODk7IHRoZQorICAgY29kaW5nIGd1aWRlbGluZXMgZG9jdW1lbnQgZGlkIG5vdCB0YWxrIGFib3V0IHRoZW0gYW5kIGluc3RlYWQgaGFkCisgICBhIGJsYW5rZXQgYmFuIGFnYWluc3QgdGhlbS4KKworICogQSB0ZXN0IGhlbHBlciBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIG9wdGltaXplIHByZXBhcmF0aW9uIG9mIHRlc3QKKyAgIHJlcG9zaXRvcmllcyB3aXRoIG1hbnkgc2ltcGxlIGNvbW1pdHMsIGFuZCBhIGhhbmRmdWwgb2YgdGVzdAorICAgc2NyaXB0cyBoYXZlIGJlZW4gdXBkYXRlZCB0byB1c2UgaXQuCisKKworRml4ZXMgc2luY2UgdjIuMjIKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgcmVsYXRpdmUgcGF0aG5hbWUgZ2l2ZW4gdG8gImdpdCBpbml0IC0tdGVtcGxhdGU9PHBhdGg+IDxyZXBvPiIKKyAgIG91Z2h0IHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgImdpdCBpbml0IiBnZXRzIGludm9rZWQgaW4sCisgICBidXQgaXQgaW5zdGVhZCB3YXMgbWFkZSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogImdpdCB3b3JrdHJlZSBhZGQiIHVzZWQgdG8gZmFpbCB3aGVuIGFub3RoZXIgd29ya3RyZWUgY29ubmVjdGVkIHRvCisgICB0aGUgc2FtZSByZXBvc2l0b3J5IHdhcyBjb3JydXB0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBvd25lcnNoaXAgcnVsZSBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciB0byBmYXN0LWltcG9ydCByZW1vdGUKKyAgIGJhY2tlbmQgd2FzIG1peGVkIHVwLCBsZWFkaW5nIHRvIGFuIHVucmVsYXRlZCBmaWxlIGRlc2NyaXB0b3IgZ2V0dGluZworICAgY2xvc2VkLCB3aGljaCBoYXMgYmVlbiBmaXhlZC4KKworICogQSAibWVyZ2UgLWMiIGluc3RydWN0aW9uIGR1cmluZyAiZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMiIHNob3VsZAorICAgZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0byBlZGl0IHRoZSBsb2cgbWVzc2FnZSwgZXZlbiB3aGVuIHRoZXJlIGlzCisgICBvdGhlcndpc2Ugbm8gbmVlZCB0byBjcmVhdGUgYSBuZXcgbWVyZ2UgYW5kIHJlcGxhY2UgdGhlIGV4aXN0aW5nCisgICBvbmUgKGkuZS4gZmFzdC1mb3J3YXJkIGluc3RlYWQpLCBidXQgZGlkIG5vdC4gIFdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIENvZGUgY2xlYW51cCBhbmQgZnV0dXJlcHJvb2YuCisKKyAqIE1vcmUgcGFyYW1ldGVyIHZhbGlkYXRpb24uCisKKyAqICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIiB1c2VkIHRvIGxlYXZlIHN0YWxlIHBhY2tmaWxlcyBpbiBpdHMKKyAgIG91dHB1dCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgc2VydmVyIHNpZGUgc3VwcG9ydCBmb3IgImdpdCBmZXRjaCIgdXNlZCB0byBzaG93IGluY29ycmVjdAorICAgdmFsdWUgZm9yIHRoZSBIRUFEIHN5bWJvbGljIHJlZiB3aGVuIHRoZSBuYW1lc3BhY2UgZmVhdHVyZSBpcyBpbgorICAgdXNlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYW0gLWkgLS1yZXNvbHZlZCIgc2VnZmF1bHRlZCBhZnRlciB0cnlpbmcgdG8gc2VlIGEgY29tbWl0IGFzCisgICBpZiBpdCB3ZXJlIGEgdHJlZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIG5lZWRzIHRvIHNlZSBpZiBwcmVyZXF1aXNpdGUgb2JqZWN0cyBleGlzdCBpbgorICAgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LCBidXQgdGhlIGNvbW1hbmQgZGlkIG5vdCBjaGVjayBpZiB3ZSBhcmUKKyAgIGluIGEgcmVwb3NpdG9yeSB1cGZyb250LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgbWVyZ2UgLS1zcXVhc2giIGlzIGRlc2lnbmVkIHRvIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUKKyAgIGluZGV4IHdpdGhvdXQgY3JlYXRpbmcgdGhlIGNvbW1pdCwgYW5kIHRoaXMgY2Fubm90IGJlIGNvdW50ZXJtYW5kZWQKKyAgIGJ5IGFkZGluZyB0aGUgIi0tY29tbWl0IiBvcHRpb247IHRoZSBjb21tYW5kIG5vdyByZWZ1c2VzIHRvIHdvcmsKKyAgIHdoZW4gYm90aCBvcHRpb25zIGFyZSBnaXZlbi4KKworICogVGhlIGRhdGEgY29sbGVjdGVkIGJ5IGZzbW9uaXRvciB3YXMgbm90IHByb3Blcmx5IHdyaXR0ZW4gYmFjayB0bworICAgdGhlIG9uLWRpc2sgaW5kZXggZmlsZSwgYnJlYWtpbmcgdDc1MTkgdGVzdHMgb2NjYXNpb25hbGx5LCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBVcGRhdGUgdG8gVW5pY29kZSAxMi4xIHdpZHRoIHRhYmxlLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIHRvIGludm9rZSBhICJnaXQgY2F0LWZpbGUiIGNvbW1hbmQgZnJvbSBpbnNpZGUKKyAgICJnaXQgcDQiIHdhcyBub3QgcHJvcGVybHkgcXVvdGVkIHRvIHByb3RlY3QgYSBjYXJldCBhbmQgcnVubmluZyBhCisgICBicm9rZW4gY29tbWFuZCBvbiBXaW5kb3dzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIiBsZWFybmVkIHRvIHdhcm4gd2hlbiB0aGUgcmVmIHdlIGFzayB0aGVtIHRvIHB1bGwKKyAgIGZyb20gaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkgYW5kIGluIHRoZSBwdWJsaXNoZWQgcmVwb3NpdG9yeSBhcmUKKyAgIGRpZmZlcmVudC4KKworICogV2hlbiBjcmVhdGluZyBhIHBhcnRpYWwgY2xvbmUsIHRoZSBvYmplY3QgZmlsdGVyaW5nIGNyaXRlcmlhIGlzCisgICByZWNvcmRlZCBmb3IgdGhlIG9yaWdpbiBvZiB0aGUgY2xvbmUsIGJ1dCB0aGlzIGluY29ycmVjdGx5IHVzZWQgYQorICAgaGFyZGNvZGVkIG5hbWUgIm9yaWdpbiIgdG8gbmFtZSB0aGF0IHJlbW90ZTsgaXQgaGFzIGJlZW4gY29ycmVjdGVkCisgICB0byBob25vciB0aGUgIi0tb3JpZ2luIDxuYW1lPiIgb3B0aW9uLgorCisgKiAiZ2l0IGZldGNoIiBpbnRvIGEgbGF6eSBjbG9uZSBmb3Jnb3QgdG8gZmV0Y2ggYmFzZSBvYmplY3RzIHRoYXQgYXJlCisgICBuZWNlc3NhcnkgdG8gY29tcGxldGUgZGVsdGEgaW4gYSB0aGluIHBhY2tmaWxlLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBUaGUgZmlsdGVyX2RhdGEgdXNlZCBpbiB0aGUgbGlzdC1vYmplY3RzLWZpbHRlciAod2hpY2ggbWFuYWdlcyBhCisgICBsYXppbHkgc3BhcnNlIGNsb25lIHJlcG9zaXRvcnkpIGRpZCBub3QgdXNlIHRoZSBkeW5hbWljIGFycmF5IEFQSQorICAgY29ycmVjdGx5LS0tJ25yJyBpcyBzdXBwb3NlZCB0byBwb2ludCBhdCBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CisgICBvZiB0aGUgYXJyYXkgaW4gdXNlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBkZXNjcmlwdGlvbiBhYm91dCBzbGFzaGVzIGluIGdpdGlnbm9yZSBwYXR0ZXJucyAodXNlZCB0bworICAgaW5kaWNhdGUgdGhpbmdzIGxpa2UgImFuY2hvcmVkIHRvIHRoaXMgbGV2ZWwgb25seSIgYW5kICJvbmx5CisgICBtYXRjaGVzIGRpcmVjdG9yaWVzIikgaGFzIGJlZW4gcmV2YW1wZWQuCisKKyAqIFRoZSBVUkwgZGVjb2RpbmcgY29kZSBoYXMgYmVlbiB1cGRhdGVkIHRvIGF2b2lkIGdvaW5nIHBhc3QgdGhlIGVuZAorICAgb2YgdGhlIHN0cmluZyB3aGlsZSBwYXJzaW5nICUtPGhleD4tPGhleD4gc2VxdWVuY2UuCisKKyAqIFRoZSBsaXN0IG9mIGZvci1lYWNoIGxpa2UgbWFjcm9zIHVzZWQgYnkgY2xhbmctZm9ybWF0IGhhcyBiZWVuCisgICB1cGRhdGVkLgorCisgKiAiZ2l0IGJyYW5jaCAtLWxpc3QiIGxlYXJuZWQgdG8gc2hvdyBicmFuY2hlcyB0aGF0IGFyZSBjaGVja2VkIG91dAorICAgaW4gb3RoZXIgd29ya3RyZWVzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSByZXBvc2l0b3J5IHByZWZpeGVkIHdpdGgKKyAgICcrJywgc2ltaWxhciB0byB0aGUgd2F5IHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoIGlzIHNob3duCisgICB3aXRoICcqJyBpbiBmcm9udC4KKyAgIChtZXJnZSA2ZTkzODE0NjllIG5iL2JyYW5jaC1zaG93LW90aGVyLXdvcmt0cmVlcy1oZWFkIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSByZXN0cnVjdHVyaW5nIGR1cmluZyAyLjIwIHBlcmlvZCBicm9rZSBmZXRjaGluZyB0YWdzIHZpYQorICAgImltcG9ydCIgYmFzZWQgdHJhbnNwb3J0cy4KKworICogVGhlIGNvbW1pdC1ncmFwaCBmaWxlIGlzIG5vdyBwYXJ0IG9mIHRoZSAiZmlsZXMgdGhhdCB0aGUgcnVudGltZQorICAgbWF5IGtlZXAgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIG9uLCBhbGwgb2Ygd2hpY2ggd291bGQgbmVlZCB0byBiZQorICAgY2xvc2VkIHdoZW4gZG9uZSB3aXRoIHRoZSBvYmplY3Qgc3RvcmUiLCBhbmQgdGhlIGZpbGUgZGVzY3JpcHRvciB0bworICAgYW4gZXhpc3RpbmcgY29tbWl0LWdyYXBoIGZpbGUgbm93IGlzIGNsb3NlZCBiZWZvcmUgImdjIiBmaW5hbGl6ZXMgYQorICAgbmV3IGluc3RhbmNlIHRvIHJlcGxhY2UgaXQuCisKKyAqICJnaXQgY2hlY2tvdXQgLXAiIG5lZWRzIHRvIHNlbGVjdGl2ZWx5IGFwcGx5IGEgcGF0Y2ggaW4gcmV2ZXJzZSwKKyAgIHdoaWNoIGRpZCBub3Qgd29yayB3ZWxsLgorCisgKiBDb2RlIGNsZWFuLXVwIHRvIGF2b2lkIHNpZ25lZCBpbnRlZ2VyIHdyYXBhcm91bmRzIGR1cmluZyBiaW5hcnkgc2VhcmNoLgorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgYWx3YXlzIHRyZWF0ZWQgJyMnIGFzIHRoZSBjb21tZW50CisgICBjaGFyYWN0ZXIsIHJlZ2FyZGxlc3Mgb2YgY29yZS5jb21tZW50Q2hhciBzZXR0aW5nLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiAiZ2l0IHN0YXNoIHNob3cgMjMiIHVzZWQgdG8gd29yaywgYnV0IG5vIG1vcmUgYWZ0ZXIgZ2V0dGluZworICAgcmV3cml0dGVuIGluIEM7IHRoaXMgcmVncmVzc2lvbiBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIC0tYWJvcnQiIHVzZWQgdG8gbGVhdmUgcmVmcy9yZXdyaXR0ZW4vIHdoZW4gY29uY2x1ZGluZworICAgImdpdCByZWJhc2UgLXIiLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEFuIGluY29ycmVjdCBsaXN0IG9mIG9wdGlvbnMgd2FzIGNhY2hlZCBhZnRlciBjb21tYW5kIGxpbmUKKyAgIGNvbXBsZXRpb24gZmFpbGVkIChlLmcuIHRyeWluZyB0byBjb21wbGV0ZSBhIGNvbW1hbmQgdGhhdCByZXF1aXJlcworICAgYSByZXBvc2l0b3J5IG91dHNpZGUgb25lKSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgY29kZSB0byBwYXJzZSBzY2FsZWQgbnVtYmVycyBvdXQgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBoYXMKKyAgIGJlZW4gbWFkZSBtb3JlIHJvYnVzdCBhbmQgYWxzbyBlYXNpZXIgdG8gZm9sbG93LgorCisgKiBUaGUgY29kZXBhdGggdG8gY29tcHV0ZSBkZWx0YSBpc2xhbmRzIHVzZWQgdG8gc3BldyBwcm9ncmVzcyBvdXRwdXQKKyAgIHdpdGhvdXQgZ2l2aW5nIHRoZSBjYWxsZXJzIGFueSB3YXkgdG8gc3F1ZWxjaCBpdCwgd2hpY2ggaGFzIGJlZW4KKyAgIGZpeGVkLgorCisgKiBQcm90b2NvbCBjYXBhYmlsaXRpZXMgdGhhdCBnbyBvdmVyIHdpcmUgc2hvdWxkIG5ldmVyIGJlIHRyYW5zbGF0ZWQsCisgICBidXQgaXQgd2FzIGluY29ycmVjdGx5IG1hcmtlZCBmb3IgdHJhbnNsYXRpb24sIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuICBUaGUgb3V0cHV0IG9mIHByb3RvY29sIGNhcGFiaWxpdGllcyBmb3IgZGVidWdnaW5nIGhhcworICAgYmVlbiB0d2Vha2VkIGEgYml0LgorCisgKiBVc2UgIkVyYXNlIGluIExpbmUiIENTSSBzZXF1ZW5jZSB0aGF0IGlzIGFscmVhZHkgdXNlZCBpbiB0aGUgZWRpdG9yCisgICBzdXBwb3J0IHRvIGNsZWFyIGNydWZ0IGluIHRoZSBwcm9ncmVzcyBvdXRwdXQuCisKKyAqICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGRpZCBub3QgcHJvdGVjdCBjb21tYW5kIGxpbmUgb3B0aW9ucyBwYXNzZWQKKyAgIHRvIHRoZSBjb21tYW5kIHRvIGJlIHJ1biBpbiBlYWNoIHN1Ym1vZHVsZSBjb3JyZWN0bHksIHdoZW4gdGhlCisgICAiLS1yZWN1cnNpdmUiIG9wdGlvbiB3YXMgaW4gdXNlLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZWJhc2UucmVzY2hlZHVsZUZhaWxlZEV4ZWMgc2hvdWxkIGJlCisgICBlZmZlY3RpdmUgb25seSB3aGlsZSBydW5uaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSBhbmQgc2hvdWxkIG5vdAorICAgYWZmZWN0IGFueXRoaW5nIHdoZW4gcnVubmluZyBhIG5vbi1pbnRlcmFjdGl2ZSBvbmUsIHdoaWNoIHdhcyBub3QKKyAgIHRoZSBjYXNlLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSAiZ2l0IGNsb25lIiBkb2N1bWVudGF0aW9uIHJlZmVycyB0byBjb21tYW5kIGxpbmUgb3B0aW9ucyBpbiBpdHMKKyAgIGRlc2NyaXB0aW9uIGluIHRoZSBzaG9ydCBmb3JtOyB0aGV5IGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIGxvbmcKKyAgIGZvcm1zIHRvIG1ha2UgdGhlbSBtb3JlIHJlY29nbmlzYWJsZS4KKworICogR2VuZXJhdGlvbiBvZiBwYWNrIGJpdG1hcHMgYXJlIG5vdyBkaXNhYmxlZCB3aGVuIC5rZWVwIGZpbGVzIGV4aXN0LAorICAgYXMgdGhlc2UgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBmZWF0dXJlcy4KKyAgIChtZXJnZSA3MzI4NDgyMjUzIGV3L3JlcGFjay13aXRoLWJpdG1hcHMtYnktZGVmYXVsdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcm0iIHRvIHJlc29sdmUgYSBjb25mbGljdGVkIHBhdGggbGVha2VkIGFuIGludGVybmFsIG1lc3NhZ2UKKyAgICJuZWVkcyBtZXJnZSIgYmVmb3JlIGFjdHVhbGx5IHJlbW92aW5nIHRoZSBwYXRoLCB3aGljaCB3YXMKKyAgIGNvbmZ1c2luZy4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHN0YXNoIC0ta2VlcC1pbmRleCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSBvbiBwYXRocyB0aGF0IGhhdmUKKyAgIGJlZW4gcmVtb3ZlZCwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgYjkzMmY2YTVlOCB0Zy9zdGFzaC1rZWVwLWluZGV4LXdpdGgtcmVtb3ZlZC1wYXRocyBsYXRlciB0byBtYWludCkuCisKKyAqIFdpbmRvdyA3IHVwZGF0ZSA7LSkKKworICogQSBjb2RlcGF0aCB0aGF0IHJlYWRzIGZyb20gR1BHIGZvciBzaWduZWQgb2JqZWN0IHZlcmlmaWNhdGlvbiByZWFkCisgICBwYXN0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIGJ1ZmZlciwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY2xlYW4iIHNpbGVudGx5IHNraXBwZWQgYSBwYXRoIHdoZW4gaXQgY2Fubm90IGxzdGF0KCkgaXQ7IG5vdworICAgaXQgZ2l2ZXMgYSB3YXJuaW5nLgorCisgKiAiZ2l0IHB1c2ggLS1hdG9taWMiIHRoYXQgZ29lcyBvdmVyIHRoZSB0cmFuc3BvcnQtaGVscGVyIChuYW1lbHksCisgICB0aGUgc21hcnQgaHR0cCB0cmFuc3BvcnQpIGZhaWxlZCB0byBwcmV2ZW50IHJlZnMgdG8gYmUgcHVzaGVkIHdoZW4KKyAgIGl0IGNhbiBsb2NhbGx5IHRlbGwgdGhhdCBvbmUgb2YgdGhlIHJlZiB1cGRhdGUgd2lsbCBmYWlsIHdpdGhvdXQKKyAgIGhhdmluZyB0byBjb25zdWx0IHRoZSBvdGhlciBlbmQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGludGVybmFsIGRpZmYgbWFjaGluZXJ5IGNhbiBiZSBtYWRlIHRvIHJlYWQgb3V0IG9mIGJvdW5kcyB3aGlsZQorICAgbG9va2luZyBmb3IgLS1mdW5jdGlvbi1jb250ZXh0IGxpbmUgaW4gYSBjb3JuZXIgY2FzZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBiNzc3ZjNmZDYxIGprL3hkaWZmLWNsYW1wLWZ1bmNuYW1lLWNvbnRleHQtaW5kZXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBjb2RlIGNsZWFudXAsIGRvY2ZpeCwgYnVpbGQgZml4LCBldGMuCisgICAobWVyZ2UgZmJlYzA1YzIxMCBjYy90ZXN0LW9pZG1hcCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2EwNmZiMDM4YyBqay9uby1zeXN0ZW0taW5jbHVkZXMtaW4tZG90LWMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDgxZWQyYjQwNWMgY2IveGRpZmYtbm8tc3lzdGVtLWluY2x1ZGVzLWluLWRvdC1jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkNjFlNmNlMWRkIHNnL2ZzY2stY29uZmlnLWluLWRvYyBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4M2I0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMy4xLnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2Mi4yMy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiwgdjIuMTUuNCwKK3YyLjE3LjMsIHYyLjIwLjIgYW5kIGluIHYyLjIxLjEsIGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcworQ1ZFLTIwMTktMTM0OCwgQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwKK0NWRS0yMDE5LTEzNTIsIENWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIENWRS0yMDE5LTEzODcsIGFuZAorQ1ZFLTIwMTktMTk2MDQ7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhvc2UgdmVyc2lvbnMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlMTU0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4wLnR4dApAQCAtMCwwICsxLDM5OCBAQAorR2l0IDIuMjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYyLjIzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZQorCisgKiAiZmlsdGVyLWJyYW5jaCIgaXMgc2hvd2luZyBpdHMgYWdlIGFuZCBhbHRlcm5hdGl2ZXMgYXJlIGF2YWlsYWJsZS4KKyAgIEZyb20gdGhpcyByZWxlYXNlLCB3ZSBzdGFydGVkIHRvIGRpc2NvdXJhZ2UgaXRzIHVzZSBhbmQgaGludAorICAgcGVvcGxlIGFib3V0IGZpbHRlci1yZXBvLgorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogV2Ugbm93IGhhdmUgYW4gYWN0aXZlIGludGVyaW0gbWFpbnRhaW5lciBmb3IgdGhlIEdpdC1HdWkgcGFydCBvZgorICAgdGhlIHN5c3RlbS4gIFByYWlzZSBhbmQgdGhhbmsgUHJhdHl1c2ggWWFkYXYgZm9yIHZvbHVudGVlcmluZy4KKworICogVGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgbGVhcm5lZCAiLS1lbmQtb2Ytb3B0aW9ucyIgbm90YXRpb247IHRoZQorICAgc3RhbmRhcmQgY29udmVudGlvbiBmb3Igc2NyaXB0ZXJzIHRvIGhhdmUgaGFyZGNvZGVkIHNldCBvZiBvcHRpb25zCisgICBmaXJzdCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgZm9yY2UgdGhlIGNvbW1hbmQgdG8gdHJlYXQgZW5kLXVzZXIKKyAgIGlucHV0IGFzIG5vbi1vcHRpb25zLCBoYXMgYmVlbiB0byB1c2UgIi0tIiBhcyB0aGUgZGVsaW1pdGVyLCBidXQKKyAgIHRoYXQgd291bGQgbm90IHdvcmsgZm9yIGNvbW1hbmRzIHRoYXQgdXNlICItLSIgYXMgYSBkZWxpbWl0ZXIKKyAgIGJldHdlZW4gcmV2cyBhbmQgcGF0aHNwZWMuCisKKyAqIEEgbWVjaGFuaXNtIHRvIGFmZmVjdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBhIChyZWxhdGVkKSBncm91cCBvZgorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaXMgaW50cm9kdWNlZC4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCAiLS1zZXQtdXBzdHJlYW0iIG9wdGlvbiB0byBoZWxwIHRob3NlIHdobyBmaXJzdAorICAgY2xvbmUgZnJvbSB0aGVpciBwcml2YXRlIGZvcmsgdGhleSBpbnRlbmQgdG8gcHVzaCB0bywgYWRkIHRoZSB0cnVlCisgICB1cHN0cmVhbSB2aWEgImdpdCByZW1vdGUgYWRkIiBhbmQgdGhlbiAiZ2l0IGZldGNoIiBmcm9tIGl0LgorCisgKiBEZXZpY2UtdHJlZSBmaWxlcyBsZWFybmVkIHRoZWlyIG93biB1c2VyZGlmZiBwYXR0ZXJucy4KKyAgIChtZXJnZSAzYzgxNzYwYmM2IHNiL3VzZXJkaWZmLWR0cyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyIgbGVhcm5lZCB0byBkcml2ZSBkaWZmZXJlbnQgbWVyZ2UKKyAgIHN0cmF0ZWdpZXMgYW5kIHBhc3Mgc3RyYXRlZ3kgc3BlY2lmaWMgb3B0aW9ucyB0byB0aGVtLgorCisgKiBBIG5ldyAicHJlLW1lcmdlLWNvbW1pdCIgaG9vayBoYXMgYmVlbiBpbnRyb2R1Y2VkLgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiB1cGRhdGVzIGZvciAiZ2l0IC1jIHZhci5uYW1lPXZhbCIgaGF2ZSBiZWVuCisgICBhZGRlZC4KKworICogVGhlIGxhenkgY2xvbmUgbWFjaGluZXJ5IGhhcyBiZWVuIHRhdWdodCB0aGF0IHRoZXJlIGNhbiBiZSBtb3JlCisgICB0aGFuIG9uZSBwcm9taXNvciByZW1vdGUgYW5kIGNvbnN1bHQgdGhlbSBpbiBvcmRlciB3aGVuIGRvd25sb2FkaW5nCisgICBtaXNzaW5nIG9iamVjdHMgb24gZGVtYW5kLgorCisgKiBUaGUgbGlzdC1vYmplY3RzLWZpbHRlciBBUEkgKHVzZWQgdG8gY3JlYXRlIGEgc3BhcnNlL2xhenkgY2xvbmUpCisgICBsZWFybmVkIHRvIHRha2UgYSBjb21iaW5lZCBmaWx0ZXIgc3BlY2lmaWNhdGlvbi4KKworICogVGhlIGRvY3VtZW50YXRpb24gYW5kIHRlc3RzIGZvciAiZ2l0IGZvcm1hdC1wYXRjaCIgaGF2ZSBiZWVuCisgICBjbGVhbmVkIHVwLgorCisgKiBPbiBXaW5kb3dzLCB0aGUgcm9vdCBsZXZlbCBvZiBVTkMgc2hhcmUgaXMgbm93IGFsbG93ZWQgdG8gYmUgdXNlZAorICAganVzdCBsaWtlIGFueSBvdGhlciBkaXJlY3RvcnkuCisKKyAqIFRoZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBzdXBwb3J0IChpbiBjb250cmliLykgbGVhcm5lZCBhYm91dCB0aGUKKyAgICItLXNraXAiIG9wdGlvbiBvZiAiZ2l0IHJldmVydCIgYW5kICJnaXQgY2hlcnJ5LXBpY2siLgorCisgKiAiZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSA8dXBzdHJlYW0+IiB0cmllcyB0byBmaW5kIHRoZSBvcmlnaW5hbCBiYXNlCisgICBvZiB0aGUgdG9waWMgYmVpbmcgcmViYXNlZCBhbmQgcmViYXNlIG9uIHRvcCBvZiB0aGF0IHNhbWUgYmFzZSwKKyAgIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhlICJnaXQgcmViYXNlIC1pIiAoYW5kIGl0cyBsaW1pdGVkCisgICB2YXJpYW50ICJnaXQgcmViYXNlIC14IikuCisKKyAgIFRoZSBjb21tYW5kIGFsc28gaGFzIGxlYXJuZWQgdG8gZmFzdC1mb3J3YXJkIGluIG1vcmUgY2FzZXMgd2hlcmUgaXQKKyAgIGNhbiBpbnN0ZWFkIG9mIHJlcGxheWluZyB0byByZWNyZWF0ZSBpZGVudGljYWwgY29tbWl0cy4KKworICogQSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRlbGxzICJnaXQgZmV0Y2giIHRvIHdyaXRlIHRoZSBjb21taXQKKyAgIGdyYXBoIGFmdGVyIGZpbmlzaGluZy4KKworICogImdpdCBhZGQgLWkiIGhhcyBiZWVuIHRhdWdodCB0byBzaG93IHRoZSB0b3RhbCBudW1iZXIgb2YgaHVua3MgYW5kCisgICB0aGUgaHVua3MgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQgc28gZmFyIHdoZW4gc2hvd2luZyBwcm9tcHRzLgorCisgKiAiZ2l0IGZldGNoIC0tam9icz08bj4iIGFsbG93ZWQgPG4+IHBhcmFsbGVsIGpvYnMgd2hlbiBmZXRjaGluZworICAgc3VibW9kdWxlcywgYnV0IHRoaXMgZGlkIG5vdCBhcHBseSB0byAiZ2l0IGZldGNoIC0tbXVsdGlwbGUiIHRoYXQKKyAgIGZldGNoZXMgZnJvbSBtdWx0aXBsZSByZW1vdGUgcmVwb3NpdG9yaWVzLiAgSXQgbm93IGRvZXMuCisKKyAqIFRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb24gZm9yIHpzaCBjb21wbGV0aW9uIHNjcmlwdCAoaW4KKyAgIGNvbnRyaWIvKSBoYXMgYmVlbiBhIGJpdCBpbXByb3ZlZC4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUaGUgY29kZSB0byB3cml0ZSBjb21taXQtZ3JhcGggb3ZlciBnaXZlbiBjb21taXQgb2JqZWN0IG5hbWVzIGhhcworICAgYmVlbiBtYWRlIGEgYml0IG1vcmUgcm9idXN0LgorCisgKiBUaGUgZmlyc3QgbGluZSBvZiB2ZXJib3NlIG91dHB1dCBmcm9tIGVhY2ggdGVzdCBwaWVjZSBub3cgY2FycmllcworICAgdGhlIHRlc3QgbmFtZSBhbmQgbnVtYmVyIHRvIGhlbHAgc2Nhbm5pbmcgd2l0aCBleWViYWxscy4KKworICogRnVydGhlciBjbGVhbi11cCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KKworICogeG1hbGxvYygpIHVzZWQgdG8gaGF2ZSBhIG1lY2hhbmlzbSB0byBkaXRjaCBtZW1vcnkgYW5kIGFkZHJlc3MKKyAgIHNwYWNlIHJlc291cmNlcyBhcyB0aGUgbGFzdCByZXNvcnQgdXBvbiBzZWVpbmcgYW4gYWxsb2NhdGlvbgorICAgZmFpbHVyZSBmcm9tIHRoZSB1bmRlcmx5aW5nIG1hbGxvYygpLCB3aGljaCBtYWRlIHRoZSBjb2RlIGNvbXBsZXgKKyAgIGFuZCB0aHJlYWQtdW5zYWZlIHdpdGggZHViaW91cyBiZW5lZml0LCBhcyBtYWpvciBtZW1vcnkgcmVzb3VyY2UKKyAgIHVzZXJzIGFscmVhZHkgZG8gbGltaXQgdGhlaXIgdXNlcyB3aXRoIHZhcmlvdXMgb3RoZXIgbWVjaGFuaXNtcy4KKyAgIEl0IGhhcyBiZWVuIHNpbXBsaWZpZWQgYXdheS4KKworICogVW5uZWNlc3NhcnkgZnVsbC10cmVlIGRpZmYgaW4gImdpdCBsb2cgLUwiIG1hY2hpbmVyeSBoYXMgYmVlbgorICAgb3B0aW1pemVkIGF3YXkuCisKKyAqIFRoZSBodHRwIHRyYW5zcG9ydCBsYWNrZWQgc29tZSBvcHRpbWl6YXRpb24gdGhlIG5hdGl2ZSB0cmFuc3BvcnRzCisgICBsZWFybmVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlZiBhZHZlcnRpc2VtZW50LCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBQcmVwYXJhdGlvbiBmb3IgU0hBLTI1NiB1cGdyYWRlIGNvbnRpbnVlcyBpbiB0aGUgdGVzdCBkZXBhcnRtZW50LgorICAgKG1lcmdlIDBjMzdjNDFkMTMgYmMvaGFzaC1pbmRlcGVuZGVudC10ZXN0cy1wYXJ0LTUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWVtb3J5IG93bmVyc2hpcCBtb2RlbCBvZiB0aGUgImdpdCBmYXN0LWltcG9ydCIgZ290CisgICBzdHJhaWdodGVuZWQgb3V0LgorCisgKiBPdXRwdXQgZnJvbSB0cmFjZTIgc3Vic3lzdGVtIGlzIGZvcm1hdHRlZCBtb3JlIHByZXR0aWx5IG5vdy4KKworICogVGhlIGludGVybmFsIGNvZGUgb3JpZ2luYWxseSBpbnZlbnRlZCBmb3IgIi5naXRpZ25vcmUiIHByb2Nlc3NpbmcKKyAgIGdvdCByZXNodWZmbGVkIGFuZCByZW5hbWVkIHRvIG1ha2UgaXQgbGVzcyB0aWVkIHRvICJleGNsdWRpbmciIGFuZAorICAgc3RyZXNzIG1vcmUgdGhhdCBpdCBpcyBhYm91dCAibWF0Y2hpbmciLCBhcyBpdCBoYXMgYmVlbiByZXVzZWQgZm9yCisgICB0aGluZ3MgbGlrZSBzcGFyc2UgY2hlY2tvdXQgc3BlY2lmaWNhdGlvbiB0aGF0IHdhbnQgdG8gY2hlY2sgaWYgYQorICAgcGF0aCBpcyAiaW5jbHVkZWQiLgorCisgKiAiZ2l0IHN0YXNoIiBsZWFybmVkIHRvIHdyaXRlIHJlZnJlc2hlZCBpbmRleCBiYWNrIHRvIGRpc2suCisKKyAqIENvY2NpbmVsbGUgY2hlY2tzIGFyZSBkb25lIG9uIG1vcmUgc291cmNlIGZpbGVzIHRoYW4gYmVmb3JlIG5vdy4KKworICogVGhlIGNhY2hlLXRyZWUgY29kZSBoYXMgYmVlbiB0YXVnaHQgdG8gYmUgbGVzcyBhZ2dyZXNzaXZlIGluCisgICBhdHRlbXB0aW5nIHRvIHNlZSBpZiBhIHRyZWUgb2JqZWN0IGl0IGNvbXB1dGVkIGFscmVhZHkgZXhpc3RzIGluCisgICB0aGUgcmVwb3NpdG9yeS4KKworICogVGhlIGNvZGUgdG8gcGFyc2UgYW5kIHVzZSB0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGJlZW4gbWFkZSBtb3JlCisgICByb2J1c3QgYWdhaW5zdCBjb3JydXB0ZWQgaW5wdXQuCisKKyAqIFRoZSBoZy10by1naXQgc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZCB0byB3b3JrIHdpdGgKKyAgIFB5dGhvbiAzLgorCisgKiBVcGRhdGUgdGhlIHdheSBidWlsZCBhcnRpZmFjdHMgaW4gdC9oZWxwZXIvIGRpcmVjdG9yeSBhcmUgaWdub3JlZC4KKworICogUHJlcGFyYXRpb24gZm9yIFNIQS0yNTYgdXBncmFkZSBjb250aW51ZXMuCisKKyAqICJnaXQgbG9nIC0tZ3JhcGgiIGZvciBhbiBvY3RvcHVzIG1lcmdlIGlzIHNvbWV0aW1lcyBjb2xvcmVkCisgICBpbmNvcnJlY3RseSwgd2hpY2ggaXMgZGVtb25zdHJhdGVkIGFuZCBkb2N1bWVudGVkIGJ1dCBub3QgeWV0CisgICBmaXhlZC4KKworICogVGhlIHRyYWNlMiBvdXRwdXQsIHdoZW4gc2VuZGluZyB0aGVtIHRvIGZpbGVzIGluIGEgZGVzaWduYXRlZAorICAgZGlyZWN0b3J5LCBjYW4gcG9wdWxhdGUgdGhlIGRpcmVjdG9yeSB3aXRoIHRvbyBtYW55IGZpbGVzOyBhCisgICBtZWNoYW5pc20gaXMgaW50cm9kdWNlZCB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzIGFuZAorICAgZGlzY2FyZCBmdXJ0aGVyIGxvZ3Mgd2hlbiB0aGUgbWF4aW11bSBpcyByZWFjaGVkLgorCisgKiBXZSBoYXZlIGFkb3B0ZWQgYSBDb2RlLW9mLWNvbmR1Y3QgZG9jdW1lbnQuCisgICAobWVyZ2UgM2Y5ZWY4NzRhNyBqay9jb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisKK0ZpeGVzIHNpbmNlIHYyLjIzCistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGdyZXAgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIHRoYXQgbG9va3MgYXQgdGhlIHdvcmtpbmcgdHJlZQorICAgZmlsZXMgbG9va2VkIGF0IHRoZSBjb250ZW50cyBpbiB0aGUgaW5kZXggaW4gc3VibW9kdWxlcywgaW5zdGVhZCBvZgorICAgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKyAgIChtZXJnZSA2YTI4OWQ0NWMwIG10L2dyZXAtc3VibW9kdWxlcy13b3JraW5nLXRyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlcGF0aHMgdG8gd2FsayB0cmVlIG9iamVjdHMgaGF2ZSBiZWVuIGF1ZGl0ZWQgZm9yIGludGVnZXIKKyAgIG92ZXJmbG93cyBhbmQgaGFyZGVuZWQuCisgICAobWVyZ2UgNWFhMDJmOTg2OCBqay90cmVlLXdhbGstb3ZlcmZsb3cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHBhY2stcmVmcyIgY2FuIGxvc2UgcmVmcyB0aGF0IGFyZSBjcmVhdGVkIHdoaWxlIHJ1bm5pbmcsIHdoaWNoCisgICBpcyBnZXR0aW5nIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBhNjEzZDRmODE3IHNjL3BhY2stcmVmcy1kZWxldGlvbi1yYWNlZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVja291dCIgYW5kICJnaXQgcmVzdG9yZSIgdG8gcmUtcG9wdWxhdGUgdGhlIGluZGV4IGZyb20gYQorICAgdHJlZS1pc2ggKHR5cGljYWxseSBIRUFEKSBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGZvciBhIHBhdGggdGhhdAorICAgd2FzIHJlbW92ZWQgYW5kIHRoZW4gYWRkZWQgYWdhaW4gd2l0aCB0aGUgaW50ZW50LXRvLWFkZCBiaXQsIHdoZW4KKyAgIHRoZSBjb3JyZXNwb25kaW5nIHdvcmtpbmcgdHJlZSBmaWxlIHdhcyBlbXB0eS4gIFRoaXMgaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogQ29tcGlsYXRpb24gZml4LgorICAgKG1lcmdlIDcwNTk3ZTgzODYgcnMvbmVkYWxsb2MtZml4bGV0cyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZ3VpIiBsZWFybmVkIHRvIGNhbGwgdGhlIGNsZWFuLXVwIHByb2NlZHVyZSBiZWZvcmUgZXhpdGluZy4KKyAgIChtZXJnZSAwZDg4ZjNkMmM1IHB5L2dpdC1ndWktZG8tcXVpdCBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHByb21vdGVkIHRoZSAiaW5kZW50IGhldXJpc3RpY3MiIHRoYXQgZGVjaWRlcyB3aGVyZSB0byBzcGxpdAorICAgZGlmZiBodW5rcyBmcm9tIGV4cGVyaW1lbnRhbCB0byB0aGUgZGVmYXVsdCBhIGZldyB5ZWFycyBhZ28sIGJ1dAorICAgc29tZSBzdGFsZSBkb2N1bWVudGF0aW9uIHN0aWxsIG1hcmtlZCBpdCBhcyBleHBlcmltZW50YWwsIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNjRlNWUxZmJhMSBzZy9kaWZmLWluZGVudC1oZXVyaXN0aWMtbm9uLWV4cGVyaW1lbnRhbCBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBhIG1pc21lcmdlIHRoYXQgaGFwcGVuZWQgaW4gMi4yMiB0aW1lZnJhbWUuCisgICAobWVyZ2UgYWNiN2RhMDVhYyBlbi9jaGVja291dC1taXNtZXJnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFyY2hpdmUiIHJlY29yZGVkIGluY29ycmVjdCBsZW5ndGggaW4gZXh0ZW5kZWQgcGF4IGhlYWRlciBpbgorICAgc29tZSBjb3JuZXIgY2FzZXMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA3MWQ0MWZmNjUxIHJzL3BheC1leHRlbmRlZC1oZWFkZXItbGVuZ3RoLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIE9uLWRlbWFuZCBvYmplY3QgZmV0Y2hpbmcgaW4gbGF6eSBjbG9uZSBpbmNvcnJlY3RseSB0cmllZCB0byBmZXRjaAorICAgY29tbWl0cyBmcm9tIHN1Ym1vZHVsZSBwcm9qZWN0cywgd2hpbGUgc3RpbGwgd29ya2luZyBpbiB0aGUKKyAgIHN1cGVycHJvamVjdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGE2MzY5NGY1MjMganQvZGlmZi1sYXp5LWZldGNoLXN1Ym1vZHVsZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQcmVwYXJlIGdldF9zaG9ydF9vaWQoKSBjb2RlcGF0aCB0byBiZSB0aHJlYWQtc2FmZS4KKyAgIChtZXJnZSA3Y2ZjYjE2YjBlIHJzL3NvcnQtb2lkLWFycmF5LXRocmVhZC1zYWZlIGxhdGVyIHRvIG1haW50KS4KKworICogImZvci1lYWNoLXJlZiIgYW5kIGZyaWVuZHMgdGhhdCBzaG93IHJlZnMgZGlkIG5vdCBwcm90ZWN0IHRoZW1zZWx2ZXMKKyAgIGFnYWluc3QgYW5jaWVudCB0YWdzIHRoYXQgZGlkIG5vdCByZWNvcmQgdGFnZ2VyIG5hbWVzIHdoZW4gYXNrZWQgdG8KKyAgIHNob3cgIiUodGFnZ2VybmFtZSkiLCB3aGljaCBoYXZlIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDhiM2YzM2VmMTEgbXAvZm9yLWVhY2gtcmVmLW1pc3NpbmctbmFtZS1vci1lbWFpbCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAiZ2l0IGFtIiBiYXNlZCBiYWNrZW5kIG9mICJnaXQgcmViYXNlIiBpZ25vcmVkIHRoZSByZXN1bHQgb2YKKyAgIHVwZGF0aW5nICIuZ2l0YXR0cmlidXRlcyIgZG9uZSBpbiBvbmUgc3RlcCB3aGVuIHJlcGxheWluZworICAgc3Vic2VxdWVudCBzdGVwcy4KKyAgIChtZXJnZSAyYzY1ZDkwZjc1IGJjL3JlcmVhZC1hdHRyaWJ1dGVzLWR1cmluZy1yZWJhc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUZWxsIGNVUkwgbGlicmFyeSB0byB1c2UgdGhlIHNhbWUgbWFsbG9jKCkgaW1wbGVtZW50YXRpb24sIHdpdGggdGhlCisgICB4bWFsbG9jKCkgd3JhcHBlciwgYXMgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSwgZm9yIGNvbnNpc3RlbmN5LgorICAgKG1lcmdlIDkzYjk4MGU1OGYgY2IvY3VybC11c2UteG1hbGxvYyBsYXRlciB0byBtYWludCkuCisKKyAqIEJ1aWxkIGZpeCB0byBhZGp1c3QgLmdpdGlnbm9yZSB0byB1bmlnbm9yZSBhIHBhdGggdGhhdCB3ZSBzdGFydGVkIHRvIHRyYWNrLgorICAgKG1lcmdlIGFhYzZmZjdiNWIganMvdmlzdWFsLXN0dWRpbyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgZmV3IGltcGxlbWVudGF0aW9uIGZpeGVzIGluIHRoZSBub3RlcyBBUEkuCisgICAobWVyZ2UgNjBmZTQ3N2EwYiBtaC9ub3Rlcy1kdXBsaWNhdGUtZW50cmllcyBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBhbiBlYXJsaWVyIHJlZ3Jlc3Npb24gdG8gImdpdCBwdXNoIC0tYWxsIiB3aGljaCBzaG91bGQgaGF2ZQorICAgYmVlbiBmb3JiaWRkZW4gd2hlbiB0aGUgdGFyZ2V0IHJlbW90ZSByZXBvc2l0b3J5IGlzIHNldCB0byBiZSBhCisgICBtaXJyb3IuCisgICAobWVyZ2UgOGU0YzhhZjA1OCB0Zy9wdXNoLWFsbC1pbi1taXJyb3ItZm9yYmlkZGVuIGxhdGVyIHRvIG1haW50KS4KKworICogRml4IGFuIGVhcmxpZXIgcmVncmVzc2lvbiBpbiB0aGUgdGVzdCBzdWl0ZSwgd2hpY2ggbWlzdGFrZW5seQorICAgc3RvcHBlZCBydW5uaW5nIEhUVFBEIHRlc3RzLgorICAgKG1lcmdlIDM5NjAyOTA2NzUgc2cvZ2l0LXRlc3QtYm9vbGVhbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tYXV0b3N0YXNoIDx1cHN0cmVhbT4gPGJyYW5jaD4iLCB3aGVuIDxicmFuY2g+IGlzCisgICBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBicmFuY2gsIGluY29ycmVjdGx5IG1vdmVkIHRoZSB0aXAgb2YgdGhlCisgICBjdXJyZW50IGJyYW5jaCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGJmMWUyOGUwYWQgYncvcmViYXNlLWF1dG9zdGFzaC1rZWVwLWN1cnJlbnQtYnJhbmNoIGxhdGVyIHRvIG1haW50KS4KKworICogVXBkYXRlIHN1cHBvcnQgZm9yIEFzY2lpZG9jdG9yIGRvY3VtZW50YXRpb24gdG9vbGNoYWluLgorICAgKG1lcmdlIDgzYjBiODk1M2UgbWEvYXNjaWlkb2N0b3ItcmVmbWlzY2luZm8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTdGFydCB1c2luZyBEb2NCb29rIDUgKGluc3RlYWQgb2YgRG9jQm9vayA0LjUpIGFzIEFzY2lpZG9jdG9yIDIuMAorICAgbm8gbG9uZ2VyIHdvcmtzIHdpdGggdGhlIG9sZGVyIG9uZS4KKyAgIChtZXJnZSBmNjQ2MWI4MmI5IGJjL2RvYy11c2UtZG9jYm9vay01IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1hcmt1cCB1c2VkIGluIHVzZXItbWFudWFsIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayBiZXR0ZXIgd2l0aAorICAgYXNjaWlkb2N0b3IuCisgICAobWVyZ2UgYzRkMmY2MTQzYSBtYS91c2VyLW1hbnVhbC1tYXJrdXAtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogTWFrZSBzdXJlIHRoZSBncmVwIG1hY2hpbmVyeSBkb2VzIG5vdCBhYm9ydCB3aGVuIHNlZWluZyBhIHBheWxvYWQKKyAgIHRoYXQgaXMgbm90IFVURi04IGV2ZW4gd2hlbiBKSVQgaXMgbm90IGluIHVzZSB3aXRoIFBDUkUxLgorICAgKG1lcmdlIGFkN2M1NDNlM2IgY2Ivc2tpcC11dGY4LWNoZWNrLXdpdGgtcGNyZTEgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbmFtZSBvZiB0aGUgYmxvYiBvYmplY3QgdGhhdCBzdG9yZXMgdGhlIGZpbHRlciBzcGVjaWZpY2F0aW9uCisgICBmb3Igc3BhcnNlIGNsb25pbmcvZmV0Y2hpbmcgd2FzIGludGVycHJldGVkIGluIGEgd3JvbmcgcGxhY2UgaW4gdGhlCisgICBjb2RlLCBjYXVzaW5nIEdpdCB0byBhYm9ydC4KKworICogImdpdCBsb2cgLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9PHBhdHRlcm4+IiB3YXMgaW5jb3JyZWN0bHkKKyAgIG92ZXJydWxlZCB3aGVuIHRoZSAiLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uIiBvcHRpb24gaXMgdXNlZCwgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwY2M3MzgwZDg4IHJzL3NpbXBsaWZ5LWJ5LWRlY28td2l0aC1kZWNvLXJlZnMtZXhjbHVkZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAidXBsb2FkLXBhY2siICh0aGUgY291bnRlcnBhcnQgb2YgImdpdCBmZXRjaCIpIG5lZWRzIHRvIGRpc2FibGUKKyAgIGNvbW1pdC1ncmFwaCB3aGVuIHJlc3BvbmRpbmcgdG8gYSBzaGFsbG93IGNsb25lL2ZldGNoIHJlcXVlc3QsIGJ1dAorICAgdGhlIHdheSB0aGlzIHdhcyBkb25lIG1hZGUgR2l0IHBhbmljLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBvYmplY3QgdHJhdmVyc2FsIG1hY2hpbmVyeSBoYXMgYmVlbiBvcHRpbWl6ZWQgbm90IHRvIGxvYWQgdHJlZQorICAgb2JqZWN0cyB3aGVuIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gY29tbWl0IGhpc3RvcnkuCisgICAobWVyZ2UgNzJlZDgwYzc4NCBqay9saXN0LW9iamVjdHMtb3B0aW0td28tdHJlZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgb2JqZWN0IG5hbWUgcGFyc2VyIGZvciAiTnRoIHBhcmVudCIgc3ludGF4IGhhcyBiZWVuIG1hZGUgbW9yZQorICAgcm9idXN0IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvd3MuCisgICAobWVyZ2UgNTlmYTVmNWEyNSBycy9udGgtcGFyZW50LXBhcnNlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdXNlZCBpbiBmb2xsb3dpbmcgdGFncyBpbiAiZ2l0IGZldGNoIiBoYXMgYmVlbiBvcHRpbWl6ZWQuCisgICAobWVyZ2UgYjdlMmQ4YmNhNSBtcy9mZXRjaC1mb2xsb3ctdGFnLW9wdGltIGxhdGVyIHRvIG1haW50KS4KKworICogUmVncmVzc2lvbiBmaXggZm9yIHByb2dyZXNzIG91dHB1dC4KKyAgIChtZXJnZSAyYmI3NGI1M2E0IHNnL3Byb2dyZXNzLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgYnVnIGluIG1lcmdlLXJlY3Vyc2l2ZSBjb2RlIHRoYXQgdHJpZ2dlcnMgd2hlbiBhIGJyYW5jaCB3aXRoIGEKKyAgIHN5bWJvbGljIGxpbmsgaXMgbWVyZ2VkIHdpdGggYSBicmFuY2ggdGhhdCByZXBsYWNlcyBpdCB3aXRoIGEKKyAgIGRpcmVjdG9yeSBoYXMgYmVlbiBmaXhlZC4KKyAgIChtZXJnZSA4M2UzYWQzYjEyIGp0L21lcmdlLXJlY3Vyc2l2ZS1zeW1saW5rLWlzLW5vdC1hLWRpci1pbi13YXkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcmVuYW1lIGRldGVjdGlvbiBsb2dpYyBzb3J0cyBhIGxpc3Qgb2YgcmVuYW1lIHNvdXJjZSBjYW5kaWRhdGVzCisgICBieSBzaW1pbGFyaXR5IHRvIHBpY2sgdGhlIGJlc3QgY2FuZGlkYXRlLCB3aGljaCBtZWFucyB0aGF0IGEgdGllCisgICBiZXR3ZWVuIHNvdXJjZXMgd2l0aCB0aGUgc2FtZSBzaW1pbGFyaXR5IGlzIGJyb2tlbiBieSB0aGUgb3JpZ2luYWwKKyAgIGxvY2F0aW9uIGluIHRoZSBvcmlnaW5hbCBjYW5kaWRhdGUgbGlzdCAod2hpY2ggaXMgc29ydGVkIGJ5IHBhdGgpLgorICAgRm9yY2UgdGhlIHNvcnRpbmcgYnkgc2ltaWxhcml0eSBkb25lIHdpdGggYSBzdGFibGUgc29ydCwgd2hpY2ggaXMKKyAgIG5vdCBwcm9taXNlZCBieSBzeXN0ZW0gc3VwcGxpZWQgcXNvcnQoMyksIHRvIGVuc3VyZSBjb25zaXN0ZW50CisgICByZXN1bHRzIGFjcm9zcyBwbGF0Zm9ybXMuCisgICAobWVyZ2UgMjA0OWI4ZGM2NSBqcy9kaWZmLXJlbmFtZS1mb3JjZS1zdGFibGUtc29ydCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIHNraXAgIlVURiIgYW5kICJVVEYtIiBwcmVmaXgsIHdoZW4gY29tcHV0aW5nIGFuIGFkdmljZQorICAgbWVzc2FnZSwgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZSBwcmVmaXggd2FzICJVVEYiLCB3aGljaAorICAgaGFzIGJlZW4gZml4ZWQuCisgICAobWVyZ2UgYjE4MTY3NmNlOSBycy9jb252ZXJ0LWZpeC11dGYtd2l0aG91dC1kYXNoIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGF1dGhvciBuYW1lcyB0YWtlbiBmcm9tIFNWTiByZXBvc2l0b3JpZXMgbWF5IGhhdmUgZXh0cmEgbGVhZGluZworICAgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZXMsIHdoaWNoIGFyZSBub3cgbXVuZ2VkIGF3YXkuCisgICAobWVyZ2UgNGRkZDRiZGRiMSB0ay9naXQtc3ZuLXRyaW0tYXV0aG9yLW5hbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgc2hvd2VkIGEgd3JvbmcgSEVBRCB3aGlsZSAicmV3b3JkIiBvcGVuIHRoZSBlZGl0b3IuCisgICAobWVyZ2UgYjBhMzE4NjE0MCBwdy9yZWJhc2UtaS1zaG93LUhFQUQtdG8tcmV3b3JkIGxhdGVyIHRvIG1haW50KS4KKworICogQSBmZXcgc2ltcGxpZmljYXRpb24gYW5kIGJ1Z2ZpeGVzIHRvIFBDUkUgaW50ZXJmYWNlLgorICAgKG1lcmdlIGM1ODFlNGE3NDkgYWIvcGNyZS1qaXQtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQQ1JFIGZpeGVzLgorICAgKG1lcmdlIGZmNjE2ODFiNDYgY2IvcGNyZTEtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmFuZ2UtZGlmZiIgc2VnZmF1bHRlZCB3aGVuIGRpZmYubm9wcmVmaXggY29uZmlndXJhdGlvbiB3YXMKKyAgIHVzZWQsIGFzIGl0IGJsaW5kbHkgZXhwZWN0ZWQgdGhlIHBhdGNoIGl0IGludGVybmFsbHkgZ2VuZXJhdGVzIHRvCisgICBoYXZlIHRoZSBzdGFuZGFyZCBhLyBhbmQgYi8gcHJlZml4ZXMuICBUaGUgY29tbWFuZCBub3cgZm9yY2VzIHRoZQorICAgaW50ZXJuYWwgcGF0Y2ggdG8gYmUgYnVpbHQgd2l0aG91dCBhbnkgcHJlZml4LCBub3QgdG8gYmUgYWZmZWN0ZWQKKyAgIGJ5IGFueSBlbmQtdXNlciBjb25maWd1cmF0aW9uLgorICAgKG1lcmdlIDkzN2I3NmVkNDkganMvcmFuZ2UtZGlmZi1ub3ByZWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3Rhc2ggYXBwbHkiIGluIGEgc3ViZGlyZWN0b3J5IG9mIGEgc2Vjb25kYXJ5IHdvcmt0cmVlIGZhaWxlZAorICAgdG8gYWNjZXNzIHRoZSB3b3JrdHJlZSBjb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBkZmQ1NTdjOTc4IGpzL3N0YXNoLWFwcGx5LWluLXNlY29uZGFyeS13b3JrdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBtZXJnZS1yZWN1cnNpdmUgbWFjaGluZXJ5IGlzIG9uZSBvZiB0aGUgbW9zdCBjb21wbGV4IHBhcnRzIG9mCisgICB0aGUgc3lzdGVtIHRoYXQgYWNjdW11bGF0ZWQgY3J1ZnQgb3ZlciB0aW1lLiAgVGhpcyBsYXJnZSBzZXJpZXMKKyAgIGNsZWFucyB1cCB0aGUgaW1wbGVtZW50YXRpb24gcXVpdGUgYSBiaXQuCisgICAobWVyZ2UgYjY1NzA0NzcxOSBlbi9tZXJnZS1yZWN1cnNpdmUtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisKKyAqIFByZXR0eS1wcmludGVkIGNvbW1hbmQgbGluZSBmb3JtYXR0ZXIgKHVzZWQgaW4gZS5nLiByZXBvcnRpbmcgdGhlCisgICBjb21tYW5kIGJlaW5nIHJ1biBieSB0aGUgdHJhY2luZyBBUEkpIGhhZCBhIGJ1ZyB0aGF0IGxvc3QgYW4KKyAgIGFyZ3VtZW50IHRoYXQgaXMgYW4gZW1wdHkgc3RyaW5nLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgY2UyZDdlZDJmZCBncy9zcS1xdW90ZS1idWYtcHJldHR5IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByYW5nZS1kaWZmIiBmYWlsZWQgdG8gaGFuZGxlIG1vZGUtb25seSBjaGFuZ2UsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMmI2YTliMTNjYSB0Zy9yYW5nZS1kaWZmLW91dHB1dC11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBEZXYgc3VwcG9ydCB1cGRhdGUuCisgICAobWVyZ2UgNGYzYzFkYzVkNiBkbC9hbGxvdy1ydW5uaW5nLWNvY2NpLXZlcmJvc2VseSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC1vIDxvdXRkaXI+IiBkaWQgYW4gZXF1aXZhbGVudCBvZiAibWtkaXIgPG91dGRpcj4iCisgICBub3QgIm1rZGlyIC1wIDxvdXRkaXI+Iiwgd2hpY2ggd2FzIGNvcnJlY3RlZC4KKworICogImdpdCBzdGFzaCBzYXZlIiBsb3N0IGxvY2FsIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA1NTY4OTVkMGM4IGpqL3N0YXNoLXJlc2V0LW9ubHktdG9wbGV2ZWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYXRvbWljIHB1c2ggb3ZlciBzbWFydCBIVFRQIHRyYW5zcG9ydCBkaWQgbm90IHdvcmssIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNmYxMTk0MjQ2YSBiYy9zbWFydC1odHRwLWF0b21pYy1wdXNoIGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgY29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIGQxMzg3ZDM4OTUgZW4vZmFzdC1pbXBvcnQtbWVyZ2UtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxYzI0YTU0ZWE0IGJtL3JlcG9zaXRvcnktbGF5b3V0LXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQxNWI3NzBiODggZHMvbWlkeC1leHBpcmUtcmVwYWNrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxOTgwMGJkYzNmIG5kL2RpZmYtcGFyc2VvcHQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU4MTY2YzJlOWQgdGcvdDAwMjEtcmFjZWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzAyN2Y1MDhjNyBkbC9jb21wYXQtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTc3MGZiZmVmZiBqYy90ZXN0LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDFmZDg4MWQ0MDQgcnMvdHJhY2UyLWRzdC13YXJuaW5nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3ZTkyNzU2NzUxIG1oL2h0dHAtdXJsbWF0Y2gtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTc4NGY5NzMyMSBtaC9yZWxlYXNlLWNvbW1pdC1tZW1vcnktZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2MGQxOThkMDIyIHRiL2Jhbm5lZC12c3ByaW50Zi1uYW1lZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4MGUzNjU4NjQ3IHJzL2hlbHAtdW5rbm93bi1yZWYtZG9lcy1ub3QtcmV0dXJuIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwYThiYzcwNjhmIGR0L3JlbW90ZS1oZWxwZXItZG9jLXJlLWxvY2stb3B0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyN2ZkMWU0ZWE3IGVuL21lcmdlLW9wdGlvbnMtZmYtYW5kLWZyaWVuZHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUwMmMzODZmZjkgc2cvY2xlYW4tbmVzdGVkLXJlcG8td2l0aC1pZ25vcmVkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNmUzZDFjYmVhIGFtL21haWxtYXAtYW5kcmV5LW1hem8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ3YjI3Yzk2ZmEgc3MvZ2V0LXRpbWUtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGQyZTUwYTg0ZSBqay9jb21taXQtZ3JhcGgtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNGZkMzljNzZlNiBjcy9wcmV0dHktZm9ybWF0cy1kb2MtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDBlNzQ3ZTg5ZCBkbC9zdWJtb2R1bGUtc2V0LWJyYW5jaCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjg5YTE0NmM5MSBycy9jb21taXQtZ3JhcGgtdXNlLWxpc3QtY291bnQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDBlYjdjMzdhOGEganMvZG9jLXBhdGNoLXRleHQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRiM2FhMTcwZDEgcnMvbnRoLXN3aXRjaC1jb2RlLXNpbXBsaWZpY2F0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwZDQzMDRjMTI0IGFoL2RvYy1zdWJtb2R1bGUtaWdub3JlLXN1Ym1vZHVsZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFmNzgyNDk0NjMgY2Mvc3ZuLWZlLXB5LXNoZWJhbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdiZDk3ZDZkZmYgcnMvYWxpYXMtdXNlLWNvcHktYXJyYXkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGM0NmViYzI0OTYgc2cvdHJhdmlzLWhlbHAtZGVidWcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI0YzY4MTc5NGYgcHMvbXktZmlyc3QtY29udHJpYnV0aW9uLWFscGhhc29ydCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzViMmMxNTQzNSBjYi9kby1ub3QtdXNlLXRlc3QtY21wLXdpdGgtYSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2RhMGQ0OTdlMyBidy9zdWJtb2R1bGUtaGVscGVyLXVzYWdlLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmUwZWQ1ZDVlOSBhbS92aXN1YWwtc3R1ZGlvLWNvbmZpZy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJlMDljMDEyMzIgc2cvbmFtZS1yZXYtY3V0b2ZmLXVuZGVyZmxvdy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRkYjNjODU2ZjMgYXMvc2hhbGxvdy1zbGFiLXVzZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDcxZjQ5NjBiOTEganMvbWluZ3ctc3Bhd24td2l0aC1zcGFjZXMtaW4tcGF0aCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTNkNjg3YmY1ZiBhaC9jbGVhbnVwcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjUzNzQ4NWZhNSBycy90ZXN0LXJlbW92ZS11c2VsZXNzLWRlYnVnZ2luZy1jYXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDExYTNkM2FhZGQgZGwvcmV2LWxpc3QtZG9jLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ5MjhhODM4OGEgYW0vdDAwMjgtdXRmMTYtdGVzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGIwNWI0MDkzMGUgZGwvdDAwMDAtc2tpcC10ZXN0LXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDAzZDNiMTI5N2MganMveGRpZmZpLWNvbW1lbnQtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTdkOGY0YjRjNyBqcy9kb2Mtc3Rhc2gtc2F2ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGMxY2ZkNThlMyB0YS90MTMwOC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmYTM2NGFkNzkwIGJiL3V0Zjgtd2N3aWR0aC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OGI2OTIxMWIyIGJiL2NvbXBhdC11dGlsLWNvbW1lbnQtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1Y2M2YTRiZTExIHJzL2h0dHAtcHVzaC1zaW1wbGlmeSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTgxZTQyZDIzNSBycy9jb2x1bW4tdXNlLXV0Zjgtc3RybndpZHRoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwNjJhMzA5ZDM2IHJzL3JlbW90ZS1jdXJsLXVzZS1hcmd2LWFycmF5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzYjNjNzlmNmM5IG5yL2RpZmYtaGlnaGxpZ2h0LWluZGVudC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM0NDRlYzJlYjIgd2IvZnNtb25pdG9yLWJpdG1hcC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDEwZGEwMzBhYjcgY2IvcGNyZTItY2hhcnRhYmxlcy1sZWFrZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2MGU2NTY5YTEyIGpzL21pbmd3LW5lZWRzLWhpZGluZy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUyYmQzZTQ2NTcgcmwvZ2l0d2ViLWJsYW1lLXByZXYtZml4IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODEwNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI0LjEudHh0CkBAIC0wLDAgKzEsOCBAQAorR2l0IHYyLjI0LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgbWVyZ2VzIHVwIHRoZSBmaXhlcyB0aGF0IGFwcGVhciBpbiB2Mi4xNC42LCB2Mi4xNS40LAordjIuMTcuMywgdjIuMjAuMiBhbmQgaW4gdjIuMjEuMSwgYWRkcmVzc2luZyB0aGUgc2VjdXJpdHkgaXNzdWVzCitDVkUtMjAxOS0xMzQ4LCBDVkUtMjAxOS0xMzQ5LCBDVkUtMjAxOS0xMzUwLCBDVkUtMjAxOS0xMzUxLAorQ1ZFLTIwMTktMTM1MiwgQ1ZFLTIwMTktMTM1MywgQ1ZFLTIwMTktMTM1NCwgQ1ZFLTIwMTktMTM4NywgYW5kCitDVkUtMjAxOS0xOTYwNDsgc2VlIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aG9zZSB2ZXJzaW9ucyBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNlYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjAudHh0CkBAIC0wLDAgKzEsMzcwIEBACitHaXQgMi4yNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuMjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcworCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBBIHR1dG9yaWFsIG9uIG9iamVjdCBlbnVtZXJhdGlvbiBoYXMgYmVlbiBhZGRlZC4KKworICogVGhlIGJyYW5jaCBkZXNjcmlwdGlvbiAoImdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uIikgaGFzIGJlZW4KKyAgIHVzZWQgdG8gZmlsbCB0aGUgYm9keSBvZiB0aGUgY292ZXIgbGV0dGVycyBieSB0aGUgZm9ybWF0LXBhdGNoCisgICBjb21tYW5kOyB0aGlzIGhhcyBiZWVuIGVuaGFuY2VkIHNvIHRoYXQgdGhlIHN1YmplY3QgY2FuIGFsc28gYmUKKyAgIGZpbGxlZC4KKworICogImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMiIGhhcyBiZWVuIG1hcmtlZCBhcyBkZXByZWNhdGVkOyB0aGlzCisgICByZWxlYXNlIHN0b3BzIGFkdmVydGlzaW5nIGl0IGluIHRoZSAiZ2l0IHJlYmFzZSAtaCIgb3V0cHV0LgorCisgKiBUaGUgY29kZSB0byBnZW5lcmF0ZSBtdWx0aS1wYWNrIGluZGV4IGxlYXJuZWQgdG8gc2hvdyAob3Igbm90IHRvCisgICBzaG93KSBwcm9ncmVzcyBpbmRpY2F0b3JzLgorCisgKiAiZ2l0IGFwcGx5IC0tM3dheSIgbGVhcm5lZCB0byBob25vciBtZXJnZS5jb25mbGljdFN0eWxlCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBsaWtlIG1lcmdlcyB3b3VsZC4KKworICogVGhlIGN1c3RvbSBmb3JtYXQgZm9yICJnaXQgbG9nIC0tZm9ybWF0PTxmb3JtYXQ+IiBsZWFybmVkIHRoZSBsL0wKKyAgIHBsYWNlaG9sZGVyIHRoYXQgaXMgc2ltaWxhciB0byBlL0UgdGhhdCBmaWxscyBpbiB0aGUgZS1tYWlsCisgICBhZGRyZXNzLCBidXQgb25seSB0aGUgbG9jYWwgcGFydCBvbiB0aGUgbGVmdCBzaWRlIG9mICdAJy4KKworICogRG9jdW1lbnRhdGlvbiBwYWdlcyBmb3IgImdpdCBzaG9ydGxvZyIgbm93IGxpc3QgY29tbWl0IGxpbWl0aW5nCisgICBvcHRpb25zIGV4cGxpY2l0bHkuCisKKyAqIFRoZSBwYXR0ZXJucyB0byBkZXRlY3QgZnVuY3Rpb24gYm91bmRhcnkgZm9yIEVsaXhpciBsYW5ndWFnZSBoYXMKKyAgIGJlZW4gYWRkZWQuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdGhhdCB0aGUgIi0tb250byIKKyAgIG9wdGlvbiBvZiAiZ2l0IHJlYmFzZSIgY2FuIHRha2UgaXRzIGFyZ3VtZW50IGFzIHRoZSB2YWx1ZSBvZiB0aGUKKyAgIG9wdGlvbi4KKworICogVGhlIHVzZXJkaWZmIG1hY2hpbmVyeSBoYXMgYmVlbiB0YXVnaHQgdGhhdCAiYXN5bmMgZGVmIiBpcyBhbm90aGVyCisgICB3YXkgdG8gYmVnaW4gYSAiZnVuY3Rpb24iIGluIFB5dGhvbi4KKworICogImdpdCByYW5nZS1kaWZmIiBsZWFybmVkIHRvIHRha2UgdGhlICItLW5vdGVzPTxyZWY+IiBhbmQgdGhlCisgICAiLS1uby1ub3RlcyIgb3B0aW9ucyB0byBjb250cm9sIHRoZSBjb21taXQgbm90ZXMgaW5jbHVkZWQgaW4gdGhlCisgICBsb2cgbWVzc2FnZSB0aGF0IGdldHMgY29tcGFyZWQuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCIgcnVuIG91dHNpZGUgb2YgYW55IHdvcmtpbmcgdHJlZSBkaWQKKyAgIG5vdCBlcnJvciBvdXQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQSBmZXcgY29tbWFuZHMgbGVhcm5lZCB0byB0YWtlIHRoZSBwYXRoc3BlYyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dAorICAgb3IgYSBuYW1lZCBmaWxlLCBpbnN0ZWFkIG9mIHRha2luZyBpdCBhcyB0aGUgY29tbWFuZCBsaW5lCisgICBhcmd1bWVudHMsIHdpdGggdGhlICItLXBhdGhzcGVjLWZyb20tZmlsZSIgb3B0aW9uLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCBhIHN1YmNvbW1hbmQgInNldC11cmwiLgorCisgKiAiZ2l0IGxvZyIgZmFtaWx5IGxlYXJuZWQgIi0tcHJldHR5PXJlZmVyZW5jZSIgdGhhdCBnaXZlcyB0aGUgbmFtZQorICAgb2YgYSBjb21taXQgaW4gdGhlIGZvcm1hdCB0aGF0IGlzIG9mdGVuIHVzZWQgdG8gcmVmZXIgdG8gaXQgaW4gbG9nCisgICBtZXNzYWdlcy4KKworICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gImdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyIgYW5kCisgICBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIHdhcyBpbGwtZGVzaWduZWQuICBUaGUgZG9jdW1lbnRhdGlvbiBhbmQKKyAgIGNvZGUgaGF2ZSBiZWVuIHRhdWdodCB0byBtYWtlIG1vcmUgY2xlYXIgcmVjb21tZW5kYXRpb25zIHdoZW4gdGhlCisgICB1c2VycyBzZWUgZmFpbHVyZXMuCisKKyAqIE1hbmFnZW1lbnQgb2Ygc3BhcnNlbHkgY2hlY2tlZC1vdXQgd29ya2luZyB0cmVlIGhhcyBnYWluZWQgYQorICAgZGVkaWNhdGVkICJzcGFyc2UtY2hlY2tvdXQiIGNvbW1hbmQuCisKKyAqIE1pc2NlbGxhbmVvdXMgc21hbGwgVVggaW1wcm92ZW1lbnRzIG9uICJnaXQtcDQiLgorCisgKiAiZ2l0IHNwYXJzZS1jaGVja291dCBsaXN0IiBzdWJjb21tYW5kIGxlYXJuZWQgdG8gZ2l2ZSBpdHMgb3V0cHV0IGluCisgICBhIG1vcmUgY29uY2lzZSBmb3JtIHdoZW4gdGhlICJjb25lIiBtb2RlIGlzIGluIGVmZmVjdC4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBEZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgbGF6eSBjbG9uaW5nIGhhcyBiZWVuIGEgYml0IGltcHJvdmVkLgorCisgKiBNb3ZlIHRoZSBkZWZpbml0aW9uIG9mIGEgc2V0IG9mIGJpdG1hc2sgY29uc3RhbnRzIGZyb20gMGN0YWwKKyAgIGxpdGVyYWwgdG8gKDFVPDxjb3VudCkgbm90YXRpb24uCisKKyAqIFRlc3QgdXBkYXRlcyB0byBwcmVwYXJlIGZvciBTSEEtMiB0cmFuc2l0aW9uIGNvbnRpbnVlcy4KKworICogQ3J1ZnR5IGNvZGUgYW5kIGxvZ2ljIGFjY3VtdWxhdGVkIG92ZXIgdGltZSBhcm91bmQgdGhlIG9iamVjdAorICAgcGFyc2luZyBhbmQgbG93LWxldmVsIG9iamVjdCBhY2Nlc3MgdXNlZCBpbiAiZ2l0IGZzY2siIGhhdmUgYmVlbgorICAgY2xlYW5lZCB1cC4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mICJnaXQgbG9nIC0tZ3JhcGgiIGdvdCByZWZhY3RvcmVkIGFuZCB0aGVuIGl0cworICAgb3V0cHV0IGdvdCBzaW1wbGlmaWVkLgorCisgKiBGb2xsb3cgcmVjZW50IHB1c2ggdG8gbW92ZSBBUEkgZG9jcyBmcm9tIERvY3VtZW50YXRpb24vIHRvIGhlYWRlcgorICAgZmlsZXMgYW5kIHVwZGF0ZSBjb25maWcuaAorCisgKiAiZ2l0IGJ1bmRsZSIgaGFzIGJlZW4gdGF1Z2h0IHRvIHVzZSB0aGUgcGFyc2Ugb3B0aW9ucyBBUEkuICAiZ2l0CisgICBidW5kbGUgdmVyaWZ5IiBsZWFybmVkICItLXF1aWV0IiBhbmQgImdpdCBidW5kbGUgY3JlYXRlIiBsZWFybmVkCisgICBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIHByb2dyZXNzIG91dHB1dC4KKworICogSGFuZGxpbmcgb2YgY29tbWl0IG9iamVjdHMgdGhhdCB1c2Ugbm9uIFVURi04IGVuY29kaW5nIGR1cmluZworICAgInJlYmFzZSAtaSIgaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAqIFRoZSBiZWdpbm5pbmcgb2YgcmV3cml0aW5nICJnaXQgYWRkIC1pIiBpbiBDLgorCisgKiBBIGxhYmVsIHVzZWQgaW4gdGhlIHRvZG8gbGlzdCB0aGF0IGFyZSBnZW5lcmF0ZWQgYnkgImdpdCByZWJhc2UKKyAgIC0tcmViYXNlLW1lcmdlcyIgaXMgdXNlZCBhcyBhIHBhcnQgb2YgYSByZWZuYW1lOyB0aGUgbG9naWMgdG8gY29tZQorICAgdXAgd2l0aCB0aGUgbGFiZWwgaGFzIGJlZW4gdGlnaHRlbmVkIHRvIGF2b2lkIG5hbWVzIHRoYXQgY2Fubm90IGJlCisgICB1c2VkIGFzIHN1Y2guCisKKyAqIFRoZSBsb2dpYyB0byBhdm9pZCBkdXBsaWNhdGUgbGFiZWwgbmFtZXMgZ2VuZXJhdGVkIGJ5ICJnaXQgcmViYXNlCisgICAtLXJlYmFzZS1tZXJnZXMiIGZvcmdvdCB0aGF0IHRoZSBtYWNoaW5lcnkgaXRzZWxmIHVzZXMgIm9udG8iIGFzIGEKKyAgIGxhYmVsIG5hbWUsIHdoaWNoIG11c3QgYmUgYXZvaWRlZCBieSBhdXRvLWdlbmVyYXRlZCBsYWJlbHMsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFdlIGhhdmUgaGFkIGNvbXBhdGliaWxpdHkgZmFsbGJhY2sgbWFjcm8gZGVmaW5pdGlvbnMgZm9yICJQUkl1TUFYIiwKKyAgICJQUkl1MzIiLCBldGMuIGJ1dCBkaWQgbm90IGZvciAiUFJJZE1BWCIsIHdoaWxlIHRoZSBjb2RlIHVzZWQgdGhlCisgICBsYXN0IG9uZSBhcHBhcmVudGx5IHdpdGhvdXQgYW55IGhpY2N1cCByZXBvcnRlZCByZWNlbnRseS4gIFRoZQorICAgZmFsbGJhY2sgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIHRoZXNlIDxpbnR0eXBlcy5oPiBtYWNyb3MgdGhhdCBtdXN0CisgICBhcHBlYXIgaW4gQzk5IHN5c3RlbXMgaGF2ZSBiZWVuIHJlbW92ZWQuCisKKyAqIFJlY2VudGx5IHdlIGhhdmUgZGVjbGFyZWQgdGhhdCBHSVRfVEVTVF8qIHZhcmlhYmxlcyB0YWtlIHRoZQorICAgdXN1YWwgYm9vbGVhbiB2YWx1ZXMgKGl0IHVzZWQgdG8gYmUgdGhhdCBzb21lIHVzZWQgIm5vbi1lbXB0eQorICAgbWVhbnMgdHJ1ZSIgYW5kIHRha2luZyBHSVRfVEVTVF9WQVI9WWVzUGxlYXNlIGFzIHRydWUpOyBtYWtlCisgICBzdXJlIHdlIG5vdGljZSBhbmQgZmFpbCB3aGVuIG5vbi1ib29sIHN0cmluZ3MgYXJlIGdpdmVuIHRvCisgICB0aGVzZSB2YXJpYWJsZXMuCisKKyAqIFVzZXJzIG9mIG9uZXdheV9tZXJnZSgpIChsaWtlICJyZXNldCAtLWhhcmQiKSBsZWFybmVkIHRvIHRha2UKKyAgIGFkdmFudGFnZSBvZiBmc21vbml0b3IgdG8gYXZvaWQgdW5uZWNlc3NhcnkgbHN0YXQoMikgY2FsbHMuCisKKyAqIFBlcmZvcm1hbmNlIHR3ZWFrIG9uICJnaXQgcHVzaCIgaW50byBhIHJlcG9zaXRvcnkgd2l0aCBtYW55IHJlZnMKKyAgIHRoYXQgcG9pbnQgYXQgb2JqZWN0cyB3ZSBoYXZlIG5ldmVyIGhlYXJkIG9mLgorCisgKiBQZXJmVGVzdCBmaXggdG8gYXZvaWQgc3RhbGUgcmVzdWx0IG1peGVkIHVwIHdpdGggdGhlIGxhdGVzdCByb3VuZAorICAgb2YgdGVzdCByZXN1bHRzLgorCisgKiBIaWRlIGxvd2VyLWxldmVsIHZlcmlmeV9zaWduZWQtYnVmZmVyKCkgQVBJIGFzIGEgcHVyZSBoZWxwZXIgdG8KKyAgIGltcGxlbWVudCB0aGUgcHVibGljIGNoZWNrX3NpZ25hdHVyZSgpIGZ1bmN0aW9uLCBpbiBvcmRlciB0bworICAgZW5jb3VyYWdlIG5ldyBjYWxsZXJzIHRvIHVzZSB0aGUgY29ycmVjdCBhbmQgbW9yZSBzdHJpY3QKKyAgIHZhbGlkYXRpb24uCisKKyAqIFVubmVjZXNzYXJ5IHJlYWRpbmcgb2Ygc3RhdGUgdmFyaWFibGVzIGJhY2sgZnJvbSB0aGUgZGlzayBkdXJpbmcKKyAgIHNlcXVlbmNlciBvcGVyYXRpb24gaGFzIGJlZW4gcmVkdWNlZC4KKworICogVGhlIGNvZGUgaGFzIGJlZW4gbWFkZSB0byBhdm9pZCBnbXRpbWUoKSBhbmQgbG9jYWx0aW1lKCkgYW5kIHByZWZlcgorICAgdGhlaXIgcmVlbnRyYW50IGNvdW50ZXJwYXJ0cy4KKworICogSW4gYSByZXBvc2l0b3J5IHdpdGggbWFueSBwYWNrZmlsZXMsIHRoZSBjb3N0IG9mIHRoZSBwcm9jZWR1cmUgdGhhdAorICAgYXZvaWRzIHJlZ2lzdGVyaW5nIHRoZSBzYW1lIHBhY2tmaWxlIHR3aWNlIHdhcyB1bm5lY2Vzc2FyaWx5IGhpZ2gKKyAgIGJ5IHVzaW5nIGFuIGluZWZmaWNpZW50IHNlYXJjaCBhbGdvcml0aG0sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogUmVkbyAiZ2l0IG5hbWUtcmV2IiB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMuCisKKyAqIEZyZWVCU0QgQ0kgc3VwcG9ydCB2aWEgQ2lycnVzLUNJIGhhcyBiZWVuIGFkZGVkLgorCisKK0ZpeGVzIHNpbmNlIHYyLjI0CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAicmViYXNlIC1pIiBjZWFzZWQgdG8gcnVuIHBvc3QtY29tbWl0IGhvb2sgYnkgbWlzdGFrZSBpbiBhbiBlYXJsaWVyCisgICB1cGRhdGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBub3RlcyBjb3B5ICRvcmlnaW5hbCIgb3VnaHQgdG8gY29weSB0aGUgbm90ZXMgYXR0YWNoZWQgdG8gdGhlCisgICBvcmlnaW5hbCBvYmplY3QgdG8gSEVBRCwgYnV0IGEgbWlzdGFrZW4gdGlnaHRlbmluZyB0byBjb21tYW5kIGxpbmUKKyAgIHBhcmFtZXRlciB2YWxpZGF0aW9uIG1hZGUgZWFybGllciBkaXNhYmxlZCB0aGF0IGZlYXR1cmUgYnkgbWlzdGFrZS4KKworICogV2hlbiBhbGwgZmlsZXMgZnJvbSBzb21lIHN1YmRpcmVjdG9yeSB3ZXJlIHJlbmFtZWQgdG8gdGhlIHJvb3QKKyAgIGRpcmVjdG9yeSwgdGhlIGRpcmVjdG9yeSByZW5hbWUgaGV1cmlzdGljcyB3b3VsZCBmYWlsIHRvIGRldGVjdCB0aGF0CisgICBhcyBhIHJlbmFtZS9tZXJnZSBvZiB0aGUgc3ViZGlyZWN0b3J5IHRvIHRoZSByb290IGRpcmVjdG9yeSwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogQ29kZSBjbGVhbi11cCBhbmQgYSBidWdmaXggaW4gdGhlIGxvZ2ljIHVzZWQgdG8gdGVsbCB3b3JrdHJlZSBsb2NhbAorICAgYW5kIHJlcG9zaXRvcnkgZ2xvYmFsIHJlZnMgYXBhcnQuCisgICAobWVyZ2UgZjQ1Zjg4YjJlNCBzZy9kaXItdHJpZS1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3Rhc2ggc2F2ZSIgaW4gYSB3b3JraW5nIHRyZWUgdGhhdCBpcyBzcGFyc2VseSBjaGVja2VkIG91dAorICAgbWlzdGFrZW5seSByZW1vdmVkIHBhdGhzIHRoYXQgYXJlIG91dHNpZGUgdGhlIGFyZWEgb2YgaW50ZXJlc3QuCisgICAobWVyZ2UgNGE1OGMzZDdmNyBqcy91cGRhdGUtaW5kZXgtaWdub3JlLXJlbW92YWwtZm9yLXNraXAtd29ya3RyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIEhFQUQubG9jayIgZGlkIG5vdCBnaXZlIHRoZSByaWdodCBwYXRoCisgICB3aGVuIHJ1biBpbiBhIHNlY29uZGFyeSB3b3JrdHJlZS4KKyAgIChtZXJnZSA3NmE1M2Q2NDBmIGpzL2dpdC1wYXRoLWhlYWQtZG90LWxvY2stZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZSAtLW5vLWNvbW1pdCIgbmVlZHMgIi0tbm8tZmYiIGlmIHlvdSBkbyBub3Qgd2FudCB0byBtb3ZlCisgICBIRUFELCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQgaW4gdGhlIG1hbnVhbCBwYWdlIGZvciAiZ2l0IGJpc2VjdCIuCisgICAobWVyZ2UgOGRkMzI3YjI0NiBtYS9iaXNlY3QtZG9jLXNhbXBsZS11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCIgaW50ZXJuYWxseSBjYWxscyAicmVzZXQgLS1oYXJkIiB0aGF0IHNob3VsZCBub3QKKyAgIGRlc2NlbmQgaW50byBzdWJtb2R1bGVzLCBldmVuIHdoZW4gc3VibW9kdWxlLnJlY3Vyc2UgY29uZmlndXJhdGlvbgorICAgaXMgc2V0LCBidXQgaXQgd2FzIGFmZmVjdGVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNDc4MmNmMmFiNiBwYi9uby1yZWN1cnNpdmUtcmVzZXQtaGFyZC1pbi13b3JrdHJlZS1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNZXNzYWdlcyBmcm9tIGRpZSgpIGV0Yy4gY2FuIGJlIG1peGVkIHVwIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzCisgICB3aXRob3V0IGV2ZW4gbGluZSBidWZmZXJpbmcgb24gV2luZG93cywgd2hpY2ggaGFzIGJlZW4gd29ya2VkCisgICBhcm91bmQuCisgICAobWVyZ2UgMTE2ZDFmYTZjNiBqcy92cmVwb3J0Zi13by1idWZmZXJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIVFRQIHRyYW5zcG9ydCBoYWQgcG9zc2libGUgYWxsb2NhdG9yL2RlYWxsb2NhdG9yIG1pc21hdGNoLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgd2F0Y2htYW4gaW50ZWdyYXRpb24gZm9yIGZzbW9uaXRvciB3YXMgcmFjeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KKyAgIChtZXJnZSBkZDBiNjFmNTc3IGt3L2ZzbW9uaXRvci13YXRjaG1hbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGZXRjaGluZyBmcm9tIG11bHRpcGxlIHJlbW90ZXMgaW50byB0aGUgc2FtZSByZXBvc2l0b3J5IGluIHBhcmFsbGVsCisgICBoYWQgYSBiYWQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVjZW50IGNoYW5nZSB0byAob3B0aW9uYWxseSkgdXBkYXRlCisgICB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGEgZmV0Y2ggam9iIGZpbmlzaGVzLCBhcyB0aGVzZSBwYXJhbGxlbAorICAgZmV0Y2hlcyBjb21wZXRlIHdpdGggZWFjaCBvdGhlci4gIFdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogUmVjZW50IHVwZGF0ZSB0byAiZ2l0IHN0YXNoIHBvcCIgbWFkZSB0aGUgY29tbWFuZCBlbXB0eSB0aGUgaW5kZXgKKyAgIHdoZW4gcnVuIHdpdGggdGhlICItLXF1aWV0IiBvcHRpb24sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBmZXRjaCIgY29kZXBhdGggaGFkIGEgYmlnICJkbyBub3QgbGF6aWx5IGZldGNoIG1pc3Npbmcgb2JqZWN0cworICAgd2hlbiBJIGFzayBpZiBzb21ldGhpbmcgZXhpc3RzIiBzd2l0Y2guICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBieQorICAgbWFya2luZyB0aGUgImRvZXMgdGhpcyB0aGluZyBleGlzdD8iIGNhbGxzIHdpdGggImlmIG5vdCBwbGVhc2UgZG8gbm90CisgICBsYXppbHkgZmV0Y2ggaXQiIGZsYWcuCisKKyAqIFRlc3QgdXBkYXRlIHRvIGF2b2lkIHdhc3RlZCBjeWNsZXMuCisgICAobWVyZ2UgZTAzMTY2OTVlYyBzZy9za2lwLXNraXBwZWQtcHJlcmVxIGxhdGVyIHRvIG1haW50KS4KKworICogRXJyb3IgaGFuZGxpbmcgYWZ0ZXIgImdpdCBwdXNoIiBmaW5pc2hlcyBzZW5kaW5nIHRoZSBwYWNrZGF0YSBhbmQKKyAgIHdhaXRzIGZvciB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSBzaWRlIGhhcyBiZWVuIGltcHJvdmVkLgorICAgKG1lcmdlIGFkN2E0MDMyNjggamsvc2VuZC1wYWNrLXJlbW90ZS1mYWlsdXJlIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBjb2RlcGF0aHMgaW4gImdpdHdlYiIgdGhhdCBmb3Jnb3QgdG8gZXNjYXBlIFVSTHMgZ2VuZXJhdGVkCisgICBiYXNlZCBvbiBlbmQtdXNlciBpbnB1dCBoYXZlIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGEzNzZlMzdiMmMgamsvZ2l0d2ViLWFudGkteHNzIGxhdGVyIHRvIG1haW50KS4KKworICogQ0kgam9icyBmb3IgbWFjT1MgaGFzIGJlZW4gbWFkZSBsZXNzIGNoYXR0eSB3aGVuIHVwZGF0aW5nIHBlcmZvcmNlCisgICBwYWNrYWdlIHVzZWQgZHVyaW5nIHRlc3RpbmcuCisgICAobWVyZ2UgMGRiYzRhMGVkZiBqYy9henVyZS1jaS1vc3gtZml4LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgdW5wYWNrLW9iamVjdHMiIHVzZWQgdG8gc2hvdyBwcm9ncmVzcyBiYXNlZCBvbmx5IG9uIHRoZSBudW1iZXIKKyAgIG9mIHJlY2VpdmVkIGFuZCB1bnBhY2tlZCBvYmplY3RzLCB3aGljaCBzdGFsbGVkIHdoZW4gaXQgaGFzIHRvCisgICBoYW5kbGUgYW4gdW51c3VhbGx5IGxhcmdlIG9iamVjdC4gIEl0IG5vdyBzaG93cyB0aGUgdGhyb3VnaHB1dCBhcworICAgd2VsbC4KKyAgIChtZXJnZSBiYWU2MGJhN2U5IHNnL3VucGFjay1wcm9ncmVzcy10aHJvdWdocHV0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNlcXVlbmNlciBtYWNoaW5lcnkgY29tcGFyZWQgdGhlIEhFQUQgYW5kIHRoZSBzdGF0ZSBpdCBpcworICAgYXR0ZW1wdGluZyB0byBjb21taXQgdG8gZGVjaWRlIGlmIHRoZSByZXN1bHQgd291bGQgYmUgYSBuby1vcAorICAgY29tbWl0LCBldmVuIHdoZW4gYW1lbmRpbmcgYSBjb21taXQsIHdoaWNoIHdhcyBpbmNvcnJlY3QsIGFuZAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgY29kZSB0byBwYXJzZSBHUEcgb3V0cHV0IHVzZWQgdG8gYXNzdW1lIGluY29ycmVjdGx5IHRoYXQgdGhlCisgICBmaW50ZXJwcmludCBmb3IgdGhlIHByaW1hcnkga2V5IHdvdWxkIGFsd2F5cyBiZSBwcmVzZW50IGZvciBhIHZhbGlkCisgICBzaWduYXR1cmUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA2N2E2ZWE2MzAwIGhpL2dwZy1vcHRpb25hbC1wa2ZwLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VibW9kdWxlIHN0YXR1cyIgYW5kICJnaXQgc3VibW9kdWxlIHN0YXR1cyAtLWNhY2hlZCIgc2hvdworICAgZGlmZmVyZW50IHRoaW5ncywgYnV0IHRoZSBkb2N1bWVudGF0aW9uIGRpZCBub3QgY292ZXIgdGhlbQorICAgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOGQ0ODNjODQwOCBtZy9kb2Mtc3VibW9kdWxlLXN0YXR1cy1jYWNoZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlc2V0IC0tcGF0Y2ggJG9iamVjdCIgd2l0aG91dCBhbnkgcGF0aHNwZWMgc2hvdWxkIGFsbG93IGEKKyAgIHRyZWUgb2JqZWN0IHRvIGJlIGdpdmVuLCBidXQgaW5jb3JyZWN0bHkgcmVxdWlyZWQgYSBjb21taXR0aXNoLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIHRoYXQgaXMgcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICBzdXBlcnByb2plY3QgZGlkIG5vdCB3b3JrIHdlbGwsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAxZjNhZWEyMmM3IG1nL3N1Ym1vZHVsZS1zdGF0dXMtZnJvbS1hLXN1YmRpcmVjdG9yeSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSByZXZpc2lvbiB3YWxraW5nIG1hY2hpbmVyeSB1c2VzIHJlc291cmNlcyBsaWtlIHBlci1vYmplY3QgZmxhZworICAgYml0cyB0aGF0IG5lZWQgdG8gYmUgcmVzZXQgYmVmb3JlIGEgbmV3IGl0ZXJhdGlvbiBvZiB3YWxraW5nCisgICBiZWdpbnMsIGJ1dCB0aGUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdG9wb2xvZ2ljYWwgd2FsayB3ZXJlIG5vdAorICAgY2xlYXJlZCBjb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwYWEwYzJiMmVjIG1oL2NsZWFyLXRvcG8td2Fsay11cG9uLXJlc2V0IGxhdGVyIHRvIG1haW50KS4KKworICogVHJhdmlzQ0kgdXBkYXRlLgorICAgKG1lcmdlIDE3NjQ0MWJmYjUgc2cvb3N4LWZvcmNlLWdjYy05IGxhdGVyIHRvIG1haW50KS4KKworICogV2hpbGUgcnVubmluZyAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2sgLS1lZGl0IiBmb3IgbXVsdGlwbGUKKyAgIGNvbW1pdHMsIGEgcmVjZW50IHJlZ3Jlc3Npb24gaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgIm5vdGhpbmcgdG8KKyAgIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuIiwgaW5zdGVhZCBvZiByZXBsYXlpbmcgdGhlIGNvbW1pdHMsCisgICB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYmVmZDRmNmE4MSBzZy9hc3N1bWUtbm8tdG9kby11cGRhdGUtaW4tY2hlcnJ5LXBpY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXb3JrIGFyb3VuZCBhIGlzc3VlIHdoZXJlIGEgRkQgdGhhdCBpcyBsZWZ0IG9wZW4gd2hlbiBzcGF3bmluZyBhCisgICBjaGlsZCBwcm9jZXNzIGFuZCBpcyBrZXB0IG9wZW4gaW4gdGhlIGNoaWxkIGNhbiBpbnRlcmZlcmUgd2l0aCB0aGUKKyAgIG9wZXJhdGlvbiBpbiB0aGUgcGFyZW50IHByb2Nlc3Mgb24gV2luZG93cy4KKworICogT25lIGtpbmQgb2YgcHJvZ3Jlc3MgbWVzc2FnZXMgd2VyZSBhbHdheXMgZ2l2ZW4gZHVyaW5nIGNvbW1pdC1ncmFwaAorICAgZ2VuZXJhdGlvbiwgaW5zdGVhZCBvZiBmb2xsb3dpbmcgdGhlICJpZiBpdCB0YWtlcyBtb3JlIHRoYW4gdHdvCisgICBzZWNvbmRzLCBzaG93IHByb2dyZXNzIiBwYXR0ZXJuLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGZvcm1hdC51c2VBdXRvQmFzZQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBzZXQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlICJkaWZmIiBtYWNoaW5lcnkgbGVhcm5lZCBub3QgdG8gbG9zZSBhZGRlZC9yZW1vdmVkIGJsYW5rIGxpbmVzCisgICBpbiB0aGUgY29udGV4dCB3aGVuIC0taWdub3JlLWJsYW5rLWxpbmVzIGFuZCAtLWZ1bmN0aW9uLWNvbnRleHQgYXJlCisgICB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAobWVyZ2UgMGJiMzEzYTU1MiBycy94ZGlmZi1pZ25vcmUtd3Mtdy1mdW5jLWNvbnRleHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGVzdCBvbiAiZmFzdC1pbXBvcnQiIHVzZWQgdG8gZ2V0IHN0dWNrIHdoZW4gImZhc3QtaW1wb3J0IiBkaWVkCisgICBpbiB0aGUgbWlkZGxlLgorICAgKG1lcmdlIDBkOWIwZDc4ODUgc2cvdDkzMDAtcm9idXN0aWZ5IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGNhbiB0YWtlIGEgc2V0IG9mIGNvbmZpZ3VyZWQgZm9ybWF0Lm5vdGVzIHZhbHVlcworICAgdG8gc3BlY2lmeSB3aGljaCBub3RlcyByZWZzIHRvIHVzZSBpbiB0aGUgbG9nIG1lc3NhZ2UgcGFydCBvZiB0aGUKKyAgIG91dHB1dC4gIFRoZSBiZWhhdmlvdXIgb2YgdGhpcyB3YXMgbm90IGNvbnNpc3RlbnQgd2l0aCBtdWx0aXBsZQorICAgLS1ub3RlcyBjb21tYW5kIGxpbmUgb3B0aW9ucywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGUwZjkwOTVhYWEgZGwvZm9ybWF0LXBhdGNoLW5vdGVzLWNvbmZpZy1maXh1cCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcDQiIHVzZWQgdG8gaWdub3JlIGxmcy5zdG9yYWdlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdoaWNoCisgICBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZWE5NGIxNmZiOCByYi9wNC1sZnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBc3NvcnRlZCBmaXhlcyB0byB0aGUgZGlyZWN0b3J5IHRyYXZlcnNhbCBBUEkuCisgICAobWVyZ2UgNjgzNmQyZmUwNiBlbi9maWxsLWRpcmVjdG9yeS1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqIEZvcmJpZCBwYXRobmFtZXMgdGhhdCB0aGUgcGxhdGZvcm0ncyBmaWxlc3lzdGVtIGNhbm5vdCByZXByZXNlbnQgb24KKyAgIE1pbkdXLgorICAgKG1lcmdlIDRkYzQyYzZjMTgganMvbWluZ3ctcmVzZXJ2ZWQtZmlsZW5hbWVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLS1zaWdub2ZmIiBzdG9wcGVkIHdvcmtpbmcgd2hlbiB0aGUgY29tbWFuZCB3YXMgd3JpdHRlbgorICAgaW4gQywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDRmZTdlNDNjNTMgZW4vcmViYXNlLXNpZ25vZmYtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQW4gZWFybGllciB1cGRhdGUgdG8gR2l0IGZvciBXaW5kb3dzIGRlY2xhcmVkIHRoYXQgYSB0cmVlIG9iamVjdCBpcworICAgaW52YWxpZCBpZiBpdCBoYXMgYSBwYXRoIGNvbXBvbmVudCB3aXRoIGJhY2tzbGFzaCBpbiBpdCwgd2hpY2ggd2FzCisgICBvdmVybHkgc3RyaWN0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuICBUaGUgb25seSBwcm90ZWN0aW9uIHRoZQorICAgV2luZG93cyB1c2VycyBuZWVkIGlzIHRvIHByZXZlbnQgc3VjaCBwYXRoIChvciBhbnkgcGF0aCB0aGF0IHRoZWlyCisgICBmaWxlc3lzdGVtIGNhbm5vdCBjaGVjayBvdXQpIGZyb20gZW50ZXJpbmcgdGhlIGluZGV4LgorICAgKG1lcmdlIDIyNGM3ZDcwZmEganMvbWluZ3ctbG9vc2VuLW92ZXJzdHJpY3QtdHJlZS1lbnRyeS1jaGVja3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byB3cml0ZSBzcGxpdCBjb21taXQtZ3JhcGggZmlsZShzKSB1cG9uIGZldGNoaW5nIGNvbXB1dGVkCisgICBib2d1cyB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciB1c2VkIGluIHNwbGl0dGluZyB0aGUgcmVzdWx0aW5nCisgICBmaWxlcywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDYzMDIwZjE3NWYgZHMvY29tbWl0LWdyYXBoLXNldC1zaXplLW11bHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBjb2RlIGNsZWFudXAsIGRvY2ZpeCwgYnVpbGQgZml4LCBldGMuCisgICAobWVyZ2UgODA3MzZkN2M1ZSBqYy9hbS1zaG93LWN1cnJlbnQtcGF0Y2gtZG9jZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4YjY1NjU3MmNhIHNnL2NvbW1pdC1ncmFwaC11c2FnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDZjMDIwNDIxMzkgbXIvY2xvbmUtZGlyLWV4aXN0cy10by1wYXRoLWV4aXN0cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDRhZTEzMWUzOCBzZy9ibGFtZS1pbmRlbnQtaGV1cmlzdGljcy1pcy1ub3ctdGhlLWRlZmF1bHQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDAxMTVlNWQ5MjkgZGwvZG9jLWRpZmYtbm8taW5kZXgtaW1wbGllcy1leGl0LWNvZGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI3MGRlNmFjYmUgZW4vdDYwMjQtc3R5bGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0YzQ3NzZkNzUgbnMvdGVzdC1kZXNjLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDY4ZDQwZjMwYzQgZGovdHlwb2ZpeC1tZXJnZS1zdHJhdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjY2ZTA0MDFhYiBqay9vcHRpbS1pbi1wYWNrLWlkeC1jb252ZXJzaW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNjliZWQ3NDIxIHJzL3BhcnNlLW9wdGlvbnMtZHVwLW51bGwtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MWJkNmJlMzJkIHJzL3VzZS1jb3B5LWFycmF5LWluLW1pbmd3LXNoZWxsLWNvbW1hbmQtcHJlcGFyYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGIwMTg3MTk5MjcgbWEvdDcwMDQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDkzMjc1N2IwY2MgYXIvaW5zdGFsbC1kb2MtdXBkYXRlLWNtZHMtbmVlZGluZy10aGUtc2hlbGwgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ2ZWZkMjhiZTEgZXAvZ3VhcmQta3NldC10YXItaGVhZGVycyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWU1YWZkZjk5NyBlYy9mZXRjaC1tYXJrLWNvbW1vbi1yZWZzLXRyYWNlMiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjBlNThiM2ZlOCBwYi9zdWJtb2R1bGUtdXBkYXRlLWZldGNoZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDJhMDIyNjIwNzggZGwvdDU1MjAtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTRmYjAxNmJhMSBqcy9wa3QtbGluZS1oLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU0YTdhNjQ2MTMgcnMvc2ltcGxpZnktcHJlcGFyZS1jbWQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDNlYWUzMGU0NjQgamsvbG9yZS1pcy10aGUtYXJjaGl2ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTRiNzY2NGRmOCBkbC9sb3JlLWlzLXRoZS1hcmNoaXZlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwZTQwYTczYTRjIHBvL2J1bmRsZS1kb2MtY2xvbmFibGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU3MTRiODk4YzYgYXMvdDc4MTItbWlzc2luZy1yZWRpcmVjdHMtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MjhkOWU2ZDAxIGprL3BlcmYtd28tZ2l0LWRvdC1wbSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmM0MmYyMGUyNCBzZy90ZXN0LXNxdWVsY2gtbm9pc2UtaW4tY29tbWl0LWJ1bGsgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGM2NDM2OGUzYTIgYmMvdDkwMDEtenNoLWluLXBvc2l4LWVtdWxhdGlvbi1tb2RlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMWRlOGRkN2VmIGRyL2JyYW5jaC11c2FnZS1jYXNlZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlMDVlOGNmMDc0IHJzL2FyY2hpdmUtemlwLWNvZGUtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTQ3ZWUzNTU1OCBycy9jb21taXQtZXhwb3J0LWVudi1zaW1wbGlmeSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNDUwN2VjYzc3MSBycy9wYXRjaC1pZC11c2Utb2lkLXRvLWhleCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTFhMGE0ZWQ5NSBtci9iaXNlY3QtdXNlLWFmdGVyLWZyZWUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNjMmJkNWM0NWQgcGIvc3VibW9kdWxlLWRvYy14cmVmIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkZjViZTAxNjY5IGphL2RvYy1tYXJrdXAtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2M1Y2VhNzI0MiBtci9iaXNlY3Qtc2F2ZS1wb2ludGVyLXRvLWNvbnN0LXN0cmluZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjBhNjdlOGNlOSBqcy91c2UtdGVzdC10b29sLW9uLXBhdGggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRlNjFiMjIxNGQgZXcvcGFja2ZpbGUtc3lzY2FsbC1vcHRpbSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWNlMGY4NmM3ZiBwYi9jbGFyaWZ5LWxpbmUtbG9nLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzYzYTU5ZTcxYyBlbi9tZXJnZS1yZWN1cnNpdmUtb2lkLWVxLXNpbXBsaWZ5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0ZTJjNGMwZDRmIGRvL2dpdHdlYi10eXBvZml4LWluLWNvbW1lbnRzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0MjFjMGZmYjAyIGpiL2RvYy1tdWx0aS1wYWNrLWlkeC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY4NzQwYzU4NmIgcG0vYW0taW4tYm9keS1oZWFkZXItZG9jLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTgxNGQ0NGQ5YiB0bS9kb2Mtc3VibW9kdWxlLWFic29yYi1maXggbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODY5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMS50eHQKQEAgLTAsMCArMSw1NSBAQAorR2l0IDIuMjUuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMjUKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY29tbWl0IiBnaXZlcyBvdXRwdXQgc2ltaWxhciB0byAiZ2l0IHN0YXR1cyIgd2hlbiB0aGVyZSBpcworICAgbm90aGluZyB0byBjb21taXQsIGJ1dCB3aXRob3V0IGhvbm9yaW5nIHRoZSBhZHZpc2Uuc3RhdHVzSGludHMKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogaGFzX29iamVjdF9maWxlKCkgc2FpZCAibm8iIGdpdmVuIGFuIG9iamVjdCByZWdpc3RlcmVkIHRvIHRoZQorICAgc3lzdGVtIHZpYSBwcmV0ZW5kX29iamVjdF9maWxlKCksIG1ha2luZyBpdCBpbmNvbnNpc3RlbnQgd2l0aAorICAgcmVhZF9vYmplY3RfZmlsZSgpLCBjYXVzaW5nIGxhenkgZmV0Y2ggdG8gYXR0ZW1wdCBmZXRjaGluZyBhbgorICAgZW1wdHkgdHJlZSBmcm9tIHByb21pc29yIHJlbW90ZXMuCisKKyAqIFRoZSBjb2RlIHRoYXQgdHJpZXMgdG8gc2tpcCBvdmVyIHRoZSBlbnRyaWVzIGZvciB0aGUgcGF0aHMgaW4gYQorICAgc2luZ2xlIGRpcmVjdG9yeSB1c2luZyB0aGUgY2FjaGUtdHJlZSB3YXMgbm90IGNhcmVmdWwgZW5vdWdoCisgICBhZ2FpbnN0IGNvcnJ1cHQgaW5kZXggZmlsZS4KKworICogQ29tcGxldGUgYW4gdXBkYXRlIHRvIHR1dG9yaWFsIHRoYXQgZW5jb3VyYWdlcyAiZ2l0IHN3aXRjaCIgb3ZlcgorICAgImdpdCBjaGVja291dCIgdGhhdCB3YXMgZG9uZSBvbmx5IGhhbGYtd2F5LgorCisgKiBSZWR1Y2UgdW5uZWNlc3Nhcnkgcm91bmQtdHJpcCB3aGVuIHJ1bm5pbmcgImxzLXJlbW90ZSIgb3ZlciB0aGUKKyAgIHN0YXRlbGVzcyBSUEMgbWVjaGFuaXNtLgorCisgKiAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQiIGRpZCBub3QgY29ycmVjdGx5IHVwZGF0ZSB0aGUgY2FjaGUtdHJlZQorICAgc3RydWN0dXJlLCByZXN1bHRpbmcgaW4gYm9ndXMgdHJlZXMgdG8gYmUgd3JpdHRlbiBhZnRlcndhcmRzLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgY29kZSByZWNlbnRseSBhZGRlZCB0byBtb3ZlIHRvIHRoZSBlbnRyeSBiZXlvbmQgdGhlIG9uZXMgaW4gdGhlCisgICBzYW1lIGRpcmVjdG9yeSBpbiB0aGUgaW5kZXggaW4gdGhlIHNwYXJzZS1jb25lIG1vZGUgZGlkIG5vdCBjb3VudAorICAgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIHNraXAgb3ZlciBpbmNvcnJlY3RseSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogV29yayBhcm91bmQgdGVzdCBicmVha2FnZXMgY2F1c2VkIGJ5IGN1c3RvbSByZWdleCBlbmdpbmUgdXNlZCBpbgorICAgbGliYXNhbiwgd2hlbiBhZGRyZXNzIHNhbml0aXplciBpcyB1c2VkIHdpdGggbW9yZSByZWNlbnQgdmVyc2lvbnMKKyAgIG9mIGdjYyBhbmQgY2xhbmcuCisKKyAqICJnaXQgZmV0Y2ggLS1yZWZtYXA9IiBvcHRpb24gaGFzIGdvdCBhIGJldHRlciBkb2N1bWVudGF0aW9uLgorCisgKiBDb3JuZXIgY2FzZSBidWdzIGluICJnaXQgY2xlYW4iIHRoYXQgc3RlbXMgZnJvbSBhIChuZWNlc3NhcmlseSBmb3IKKyAgIHBlcmZvcm1hbmNlIHJlYXNvbnMpIGF3a3dhcmQgY2FsbGluZyBjb252ZW50aW9uIGluIHRoZSBkaXJlY3RvcnkKKyAgIGVudW1lcmF0aW9uIEFQSSBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgZ3JlcCAtLW5vLWluZGV4IiBzaG91bGQgbm90IGdldCBhZmZlY3RlZCBieSB0aGUgY29udGVudHMgb2YKKyAgIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGJ1dCB3aGVuICItLXJlY3Vyc2Utc3VibW9kdWxlcyIgaXMgZ2l2ZW4gb3IKKyAgIHRoZSAic3VibW9kdWxlLnJlY3Vyc2UiIHZhcmlhYmxlIGlzIHNldCwgaXQgZGlkLiAgTm93IHRoZXNlCisgICBzZXR0aW5ncyBhcmUgaWdub3JlZCBpbiB0aGUgIi0tbm8taW5kZXgiIG1vZGUuCisKKyAqIFRlY2huaWNhbCBkZXRhaWxzIG9mIHRoZSBidW5kbGUgZm9ybWF0IGhhcyBiZWVuIGRvY3VtZW50ZWQuCisKKyAqIFVuaGVscGZ1bCB3YXJuaW5nIG1lc3NhZ2VzIGR1cmluZyBkb2N1bWVudGF0aW9uIGJ1aWxkIGhhdmUgYmVlbgorICAgc3F1ZWxjaGVkLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBjb2RlIGNsZWFuLXVwcyBhbmQgbWlub3IgZml4dXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwM2M1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMi50eHQKQEAgLTAsMCArMSw2MCBAQAorR2l0IDIuMjUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBNaW5vciBidWdmaXhlcyB0byAiZ2l0IGFkZCAtaSIgdGhhdCBoYXMgcmVjZW50bHkgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworICogQW4gZWFybGllciB1cGRhdGUgdG8gc2hvdyB0aGUgbG9jYXRpb24gb2Ygd29ya2luZyB0cmVlIGluIHRoZSBlcnJvcgorICAgbWVzc2FnZSBkaWQgbm90IGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGEgZ2l0IGNvbW1hbmQgbWF5IGJlCisgICBydW4gaW4gYSBiYXJlIHJlcG9zaXRvcnksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlICItLXJlY3Vyc2Utc3VibW9kdWxlcyIgb3B0aW9uIG9mIHZhcmlvdXMgc3ViY29tbWFuZHMgZGlkIG5vdAorICAgd29yayB3ZWxsIHdoZW4gcnVuIGluIGFuIGFsdGVybmF0ZSB3b3JrdHJlZSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogUnVubmluZyAiZ2l0IHJtIiBvbiBhIHN1Ym1vZHVsZSBmYWlsZWQgdW5uZWNlc3NhcmlseSB3aGVuCisgICAuZ2l0bW9kdWxlcyBpcyBvbmx5IGNhY2hlLWRpcnR5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBpZGVudGlmaWVzIGV4aXN0aW5nIGNvbW1pdHMgaW4gaXRzIHRvZG8gZmlsZSB3aXRoCisgICB0aGVpciBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSwgd2hpY2ggY291bGQgYmVjb21lIGFtYmlnb3VzIGFzIGl0CisgICBnb2VzIHRvIGNyZWF0ZSBuZXcgY29tbWl0cywgYW5kIGhhcyBhIG1lY2hhbmlzbSB0byBhdm9pZCBhbWJpZ3VpdHkKKyAgIGluIHRoZSBtYWluIHBhcnQgb2YgaXRzIGV4ZWN1dGlvbi4gIEEgZmV3IG90aGVyIGNhc2VzIGhvd2V2ZXIgd2VyZQorICAgbm90IGNvdmVyZWQgYnkgdGhlIHByb3RlY3Rpb24gYWdhaW5zdCBhbWJpZ3VpdHksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSBpbmRleC1wYWNrIGNvZGUgbm93IGRpYWdub3NlcyBhIGJhZCBpbnB1dCBwYWNrc3RyZWFtIHRoYXQKKyAgIHJlY29yZHMgdGhlIHNhbWUgb2JqZWN0IHR3aWNlIHdoZW4gaXQgaXMgdXNlZCBhcyBkZWx0YSBiYXNlOyB0aGUKKyAgIGNvZGUgdXNlZCB0byBkZWNsYXJlIGEgc29mdHdhcmUgYnVnIHdoZW4gZW5jb3VudGVyaW5nIHN1Y2ggYW4KKyAgIGlucHV0LCBidXQgaXQgaXMgYW4gaW5wdXQgZXJyb3IuCisKKyAqIFRoZSBjb2RlIHRvIGF1dG9tYXRpY2FsbHkgc2hyaW5rIHRoZSBmYW4tb3V0IGluIHRoZSBub3RlcyB0cmVlIGhhZAorICAgYW4gb2ZmLWJ5LW9uZSBidWcsIHdoaWNoIGhhcyBiZWVuIGtpbGxlZC4KKworICogImdpdCBjaGVjay1pZ25vcmUiIGRpZCBub3Qgd29yayB3aGVuIHRoZSBnaXZlbiBwYXRoIGlzIGV4cGxpY2l0bHkKKyAgIG1hcmtlZCBhcyBub3QgaWdub3JlZCB3aXRoIGEgbmVnYXRpdmUgZW50cnkgaW4gdGhlIC5naXRpZ25vcmUgZmlsZS4KKworICogVGhlIG1lcmdlLXJlY3Vyc2l2ZSBtYWNoaW5lcnkgZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGNhY2hlIGVudHJ5IGZvcgorICAgYSBtZXJnZSByZXN1bHQgaW4gYSBjb3VwbGUgb2YgcGxhY2VzLCByZXN1bHRpbmcgaW4gYW4gdW5uZWNlc3NhcnkKKyAgIG1lcmdlIGZhaWx1cmUsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBGaXggZm9yIGEgYnVnIHJldmVhbGVkIGJ5IGEgcmVjZW50IGNoYW5nZSB0byBtYWtlIHRoZSBwcm90b2NvbCB2MgorICAgdGhlIGRlZmF1bHQuCisKKyAqICJnaXQgbWVyZ2Ugc2lnbmVkLXRhZyIgd2hpbGUgbGFja2luZyB0aGUgcHVibGljIGtleSBzdGFydGVkIHRvIHNheQorICAgIk5vIHNpZ25hdHVyZSIsIHdoaWNoIHdhcyB1dHRlcmx5IHdyb25nLiAgVGhpcyByZWdyZXNzaW9uIGhhcyBiZWVuCisgICByZXZlcnRlZC4KKworICogTWluR1cncyBwb2xsKCkgZW11bGF0aW9uIGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiAiZ2l0IHNob3ciIGFuZCBvdGhlcnMgZ2F2ZSBhbiBvYmplY3QgbmFtZSBpbiByYXcgZm9ybWF0IGluIGl0cworICAgZXJyb3Igb3V0cHV0LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gZ2l2ZSBpdCBpbiBoZXguCisKKyAqIEJvdGggImdpdCBscy1yZW1vdGUgLWgiIGFuZCAiZ2l0IGdyZXAgLWgiIGdpdmUgc2hvcnQgdXNhZ2UgaGVscCwKKyAgIGxpa2UgYW55IG90aGVyIEdpdCBzdWJjb21tYW5kLCBidXQgaXQgaXMgbm90IHVucmVhc29uYWJsZSB0byBleHBlY3QKKyAgIHRoYXQgdGhlIGZvcm1lciB3b3VsZCBiZWhhdmUgdGhlIHNhbWUgYXMgImdpdCBscy1yZW1vdGUgLS1oZWFkIgorICAgKHRoZXJlIGlzIG5vIG90aGVyIHNlbnNpYmxlIGJlaGF2aW91ciBmb3IgdGhlIGxhdHRlcikuICBUaGUKKyAgIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZCBpbiBhbiBhdHRlbXB0IHRvIGNsYXJpZnkgdGhpcy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcywgY29kZSBjbGVhbi11cHMgYW5kIG1pbm9yIGZpeHVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNi4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNi4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTdhNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI2LjAudHh0CkBAIC0wLDAgKzEsMzQxIEBACitHaXQgMi4yNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuMjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcworCisgKiAiZ2l0IHJlYmFzZSIgdXNlcyBhIGRpZmZlcmVudCBiYWNrZW5kIHRoYXQgaXMgYmFzZWQgb24gdGhlICdtZXJnZScKKyAgIG1hY2hpbmVyeSBieSBkZWZhdWx0LiAgVGhlcmUgYXJlIGEgZmV3IGtub3duIGRpZmZlcmVuY2VzIGluIHRoZQorICAgYmVoYXZpb3VyIGZyb20gdGhlIHRyYWRpdGlvbmFsIG1hY2hpbmVyeSBiYXNlZCBvbiBwYXRjaCthcHBseS4KKworICAgSWYgeW91ciB3b3JrZmxvdyBpcyBuZWdhdGl2ZWx5IGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLCBwbGVhc2UKKyAgIHJlcG9ydCBpdCB0byBnaXRAdmdlci5rZXJuZWwub3JnIHNvIHRoYXQgd2UgY2FuIHRha2UgYSBsb29rIGludG8KKyAgIGl0LiAgQWZ0ZXIgZG9pbmcgc28sIHlvdSBjYW4gc2V0IHRoZSAncmViYXNlLmJhY2tlbmQnIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIHRvICdhcHBseScsIGluIG9yZGVyIHRvIHVzZSB0aGUgb2xkIGRlZmF1bHQgYmVoYXZpb3VyIGluCisgICB0aGUgbWVhbnRpbWUuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFNhbXBsZSBjcmVkZW50aWFsIGhlbHBlciBmb3IgdXNpbmcgLm5ldHJjIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yaworICAgb3V0IG9mIHRoZSBib3guCisKKyAqIGdwZy5taW5UcnVzdExldmVsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaGFzIGJlZW4gaW50cm9kdWNlZCB0bworICAgdGVsbCB2YXJpb3VzIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gY29kZXBhdGhzIHRoZSByZXF1aXJlZCBtaW5pbXVtCisgICB0cnVzdCBsZXZlbC4KKworICogVGhlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIChpbiBjb250cmliLykgbGVhcm5lZCB0byBjb21wbGV0ZQorICAgc3ViY29tbWFuZHMgYW5kIGFyZ3VtZW50cyB0byAiZ2l0IHdvcmt0cmVlIi4KKworICogRGlzYW1iaWd1YXRpb24gbG9naWMgdG8gdGVsbCByZXZpc2lvbnMgYW5kIHBhdGhzcGVjIGFwYXJ0IGhhcyBiZWVuCisgICB0d2Vha2VkIHNvIHRoYXQgYmFja3NsYXNoLWVzY2FwZWQgZ2xvYiBzcGVjaWFsIGNoYXJhY3RlcnMgZG8gbm90CisgICBjb3VudCBpbiB0aGUgIndpbGRjYXJkcyBhcmUgcGF0aHNwZWMiIHJ1bGUuCisKKyAqIE9uZSBlZmZlY3Qgb2Ygc3BlY2lmeWluZyB3aGVyZSB0aGUgR0lUX0RJUiBpcyAoZWl0aGVyIHdpdGggdGhlCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3Igd2l0aCB0aGUgImdpdCAtLWdpdC1kaXI9PHdoZXJlPiBjbWQiCisgICBvcHRpb24pIGlzIHRvIGRpc2FibGUgdGhlIHJlcG9zaXRvcnkgZGlzY292ZXJ5LiAgVGhpcyBoYXMgYmVlbgorICAgcGxhY2VkIGEgYml0IG1vcmUgc3RyZXNzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBhcyBuZXcgdXNlcnMgb2Z0ZW4KKyAgIGdldCBjb25mdXNlZC4KKworICogVHdvIGhlbHAgbWVzc2FnZXMgZ2l2ZW4gd2hlbiAiZ2l0IGFkZCIgbm90aWNlcyB0aGUgdXNlciBnYXZlIGl0CisgICBub3RoaW5nIHRvIGFkZCBoYXZlIGJlZW4gdXBkYXRlZCB0byB1c2UgYWR2aXNlKCkgQVBJLgorCisgKiBBIG5ldyB2ZXJzaW9uIG9mIGZzbW9uaXRvci13YXRjaG1hbiBob29rIGhhcyBiZWVuIGludHJvZHVjZWQsIHRvCisgICBhdm9pZCByYWNlcy4KKworICogImdpdCBjb25maWciIGxlYXJuZWQgdG8gc2hvdyBpbiB3aGljaCAic2NvcGUiLCBpbiBhZGRpdGlvbiB0byBpbgorICAgd2hpY2ggZmlsZSwgZWFjaCBjb25maWcgc2V0dGluZyBjb21lcyBmcm9tLgorCisgKiBUaGUgYmFzaWMgNyBjb2xvcnMgbGVhcm5lZCB0aGUgYnJpZ2h0ZXIgY291bnRlcnBhcnRzCisgICAoZS5nLiAiYnJpZ2h0cmVkIikuCisKKyAqICJnaXQgc3BhcnNlLWNoZWNrb3V0IiBsZWFybmVkIGEgbmV3ICJhZGQiIHN1YmNvbW1hbmQuCisKKyAqIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IHVzZWQgZm9yIGNyZWRlbnRpYWwgc3Vic3lzdGVtIGNhbiBub3cgdXNlCisgICB3aWxkY2FyZCBwYXR0ZXJuIHRvIHNwZWNpZnkgZm9yIHdoaWNoIHNldCBvZiBVUkxzIHRoZSBlbnRyeQorICAgYXBwbGllcy4KKworICogImdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLXNpbmdsZS1icmFuY2giIG5vdyB1c2VzIHRoZSBzYW1lCisgICBzaW5nbGUtYnJhbmNoIG9wdGlvbiB3aGVuIGNsb25pbmcgdGhlIHN1Ym1vZHVsZXMuCisKKyAqICJnaXQgcm0iIGFuZCAiZ2l0IHN0YXNoIiBsZWFybnMgdGhlIG5ldyAiLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisgICBvcHRpb24uCisKKyAqICJnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2giIGlzIGEgd2F5IHRvIHNob3cgdGhlIHBpZWNlIG9mIGUtbWFpbAorICAgZm9yIHRoZSBzdG9wcGVkIHN0ZXAsIHdoaWNoIGlzIG5vdCBzdWl0YWJsZSB0byBkaXJlY3RseSBmZWVkICJnaXQKKyAgIGFwcGx5IiAoaXQgaXMgZGVzaWduZWQgdG8gYmUgYSBnb29kICJnaXQgYW0iIGlucHV0KS4gIEl0IGxlYXJuZWQgYQorICAgbmV3IG9wdGlvbiB0byBzaG93IG9ubHkgdGhlIHBhdGNoIHBhcnQuCisKKyAqIEhhbmRsaW5nIG9mIGNvbmZsaWN0aW5nIHJlbmFtZXMgaW4gbWVyZ2UtcmVjdXJzaXZlIGhhdmUgZnVydGhlcgorICAgYmVlbiBtYWRlIGNvbnNpc3RlbnQgd2l0aCBob3cgZXhpc3RpbmcgY29kZXBhdGhzIHRyeSB0byBtaW1pYyB3aGF0CisgICBpcyBkb25lIHRvIGFkZC9hZGQgY29uZmxpY3RzLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFRlbGwgLmVkaXRvcmNvbmZpZyB0aGF0IGluIHRoaXMgcHJvamVjdCwgKi50eHQgZmlsZXMgYXJlIGluZGVudGVkCisgICB3aXRoIHRhYnMuCisKKyAqIFRoZSB0ZXN0LWxpbnQgbWFjaGluZXJ5IGtuZXcgdG8gY2hlY2sgIlZBUj1WQUwgc2hlbGxfZnVuY3Rpb24iCisgICBjb25zdHJ1Y3QsIGJ1dCBkaWQgbm90IGNoZWNrICJWQVI9IHNoZWxsX2Z1bmN0aW9uIiwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogUmVwbGFjZSAiZ2l0IGNvbmZpZyAtLWJvb2wiIGNhbGxzIHdpdGggImdpdCBjb25maWcgLS10eXBlPWJvb2wiIGluCisgICBzYW1wbGUgdGVtcGxhdGVzLgorCisgKiBUaGUgZWZmb3J0IHRvIG1vdmUgImdpdC1hZGQtLWludGVyYWN0aXZlIiB0byBDIGNvbnRpbnVlcy4KKworICogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRpb24gZm9yICJnaXQgc3VibW9kdWxlIGFkZCIuCisKKyAqIFByZXBhcmF0aW9uIG9mIHRlc3Qgc2NyaXB0cyBmb3IgdGhlIGRheSB3aGVuIHRoZSBvYmplY3QgbmFtZXMgd2lsbAorICAgdXNlIFNIQS0yNTYgY29udGludWVzLgorCisgKiBXYXJuIHByb2dyYW1tZXJzIGFib3V0IHByZXRlbmRfb2JqZWN0X2ZpbGUoKSB0aGF0IGFsbG93cyB0aGUgY29kZQorICAgdG8gdGVudGF0aXZlbHkgdXNlIGluLWNvcmUgb2JqZWN0cy4KKworICogVGhlIHdheSAiZ2l0IHBhY2stb2JqZWN0cyIgcmV1c2VzIG9iamVjdHMgc3RvcmVkIGluIGV4aXN0aW5nIHBhY2sKKyAgIHRvIGdlbmVyYXRlIGl0cyByZXN1bHQgaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAqIFRoZSB0cmFuc3BvcnQgcHJvdG9jb2wgdmVyc2lvbiAyIGJlY29tZXMgdGhlIGRlZmF1bHQgb25lLgorCisgKiBUcmFkaXRpb25hbGx5LCB3ZSBhdm9pZGVkIHRocmVhZGVkIGdyZXAgd2hpbGUgc2VhcmNoaW5nIGluIG9iamVjdHMKKyAgIChhcyBvcHBvc2VkIHRvIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUpIGFzIGFjY2Vzc2VzIHRvIHRoZSBvYmplY3QKKyAgIGxheWVyIGlzIG5vdCB0aHJlYWQtc2FmZS4gIFRoaXMgbGltaXRhdGlvbiBpcyBnZXR0aW5nIGxpZnRlZC4KKworICogImdpdCByZWJhc2UgLWkiIChhbmQgZnJpZW5kcykgdXNlZCB0byB1bm5lY2Vzc2FyaWx5IGNoZWNrIG91dCB0aGUKKyAgIHRpcCBvZiB0aGUgYnJhbmNoIHRvIGJlIHJlYmFzZWQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQSBsb3ctbGV2ZWwgQVBJIGZ1bmN0aW9uIGdldF9vaWQoKSwgdGhhdCBhY2NlcHRzIHZhcmlvdXMgd2F5cyB0bworICAgbmFtZSBhbiBvYmplY3QsIHVzZWQgdG8gaXNzdWUgZW5kLXVzZXIgZmFjaW5nIGVycm9yIG1lc3NhZ2VzCisgICB3aXRob3V0IGwxMG4sIHdoaWNoIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYmUgdHJhbnNsYXRhYmxlLgorCisgKiBVbm5lZWRlZCBjb25uZWN0aXZpdHkgY2hlY2sgaXMgbm93IGRpc2FibGVkIGluIGEgcGFydGlhbCBjbG9uZSB3aGVuCisgICBmZXRjaGluZyBpbnRvIGl0LgorCisgKiBTb21lIHJvdWdoIGVkZ2VzIGluIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmVhdHVyZSwgZXNwZWNpYWxseSBhcm91bmQKKyAgIHRoZSBjb25lIG1vZGUsIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBUaGUgZGlmZi0qIHBsdW1iaW5nIGZhbWlseSBvZiBzdWJjb21tYW5kcyBub3cgcGF5IGF0dGVudGlvbiB0byB0aGUKKyAgIGRpZmYud3NFcnJvckhpZ2hsaWdodCBjb25maWd1cmF0aW9uLCB3aGljaCBoYXMgYmVlbiBpZ25vcmVkIGJlZm9yZTsKKyAgIHRoaXMgYWxsb3dzICJnaXQgYWRkIC1wIiB0byBhbHNvIHNob3cgdGhlIHdoaXRlc3BhY2UgcHJvYmxlbXMgdG8KKyAgIHRoZSBlbmQgdXNlci4KKworICogU29tZSBjb2RlcGF0aHMgd2VyZSBnaXZlbiBhIHJlcG9zaXRvcnkgaW5zdGFuY2UgYXMgYSBwYXJhbWV0ZXIgdG8KKyAgIHdvcmsgaW4gdGhlIHJlcG9zaXRvcnksIGJ1dCBwYXNzZWQgdGhlX3JlcG9zaXRvcnkgaW5zdGFuY2UgdG8gaXRzCisgICBjYWxsZWVzLCB3aGljaCBoYXMgYmVlbiBjbGVhbmVkIHVwIChzb21ld2hhdCkuCisKKyAqIE1lbW9yeSBmb290cHJpbnQgYW5kIHBlcmZvcm1hbmNlIG9mICJnaXQgbmFtZS1yZXYiIGhhcyBiZWVuCisgICBpbXByb3ZlZC4KKworICogVGhlIG9iamVjdCByZWFjaGFiaWxpdHkgYml0bWFwIG1hY2hpbmVyeSBhbmQgdGhlIHBhcnRpYWwgY2xvbmluZworICAgbWFjaGluZXJ5IHdlcmUgbm90IHByZXBhcmVkIHRvIHdvcmsgd2VsbCB0b2dldGhlciwgYmVjYXVzZSBzb21lCisgICBvYmplY3QtZmlsdGVyaW5nIGNyaXRlcmlhIHRoYXQgcGFydGlhbCBjbG9uZXMgdXNlIGluaGVyZW50bHkgcmVseQorICAgb24gb2JqZWN0IHRyYXZlcnNhbCwgYnV0IHRoZSBiaXRtYXAgbWFjaGluZXJ5IGlzIGFuIG9wdGltaXphdGlvbgorICAgdG8gYnlwYXNzIHRoYXQgb2JqZWN0IHRyYXZlcnNhbC4gIFRoZXJlIGhvd2V2ZXIgYXJlIHNvbWUgY2FzZXMKKyAgIHdoZXJlIHRoZXkgY2FuIHdvcmsgdG9nZXRoZXIsIGFuZCB0aGV5IHdlcmUgdGF1Z2h0IGFib3V0IHRoZW0uCisKKyAqICJnaXQgcmViYXNlIiBoYXMgbGVhcm5lZCB0byB1c2UgdGhlIG1lcmdlIGJhY2tlbmQgKGkuZS4gdGhlCisgICBtYWNoaW5lcnkgdGhhdCBkcml2ZXMgInJlYmFzZSAtaSIpIGJ5IGRlZmF1bHQsIHdoaWxlIGFsbG93aW5nCisgICAiLS1hcHBseSIgb3B0aW9uIHRvIHVzZSB0aGUgImFwcGx5IiBiYWNrZW5kIChlLmcuIHRoZSBtb3JhbAorICAgZXF1aXZhbGVudCBvZiAiZm9ybWF0LXBhdGNoIHBpcGVkIHRvIGFtIikuICBUaGUgcmViYXNlLmJhY2tlbmQKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHNldCB0byBjdXN0b21pemUuCisKKyAqIFVuZGVybHlpbmcgbWFjaGluZXJ5IG9mICJnaXQgYmlzZWN0LS1oZWxwZXIiIGlzIGJlaW5nIHJlZmFjdG9yZWQKKyAgIGludG8gcGllY2VzIHRoYXQgYXJlIG1vcmUgZWFzaWx5IHJldXNlZC4KKworCitGaXhlcyBzaW5jZSB2Mi4yNQorLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjb21taXQiIGdpdmVzIG91dHB1dCBzaW1pbGFyIHRvICJnaXQgc3RhdHVzIiB3aGVuIHRoZXJlIGlzCisgICBub3RoaW5nIHRvIGNvbW1pdCwgYnV0IHdpdGhvdXQgaG9ub3JpbmcgdGhlIGFkdmlzZS5zdGF0dXNIaW50cworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBoYXNfb2JqZWN0X2ZpbGUoKSBzYWlkICJubyIgZ2l2ZW4gYW4gb2JqZWN0IHJlZ2lzdGVyZWQgdG8gdGhlCisgICBzeXN0ZW0gdmlhIHByZXRlbmRfb2JqZWN0X2ZpbGUoKSwgbWFraW5nIGl0IGluY29uc2lzdGVudCB3aXRoCisgICByZWFkX29iamVjdF9maWxlKCksIGNhdXNpbmcgbGF6eSBmZXRjaCB0byBhdHRlbXB0IGZldGNoaW5nIGFuCisgICBlbXB0eSB0cmVlIGZyb20gcHJvbWlzb3IgcmVtb3Rlcy4KKworICogQ29tcGxldGUgYW4gdXBkYXRlIHRvIHR1dG9yaWFsIHRoYXQgZW5jb3VyYWdlcyAiZ2l0IHN3aXRjaCIgb3ZlcgorICAgImdpdCBjaGVja291dCIgdGhhdCB3YXMgZG9uZSBvbmx5IGhhbGYtd2F5LgorCisgKiBDIHBlZGFudHJ5IDstKSBmaXguCisKKyAqIFRoZSBjb2RlIHRoYXQgdHJpZXMgdG8gc2tpcCBvdmVyIHRoZSBlbnRyaWVzIGZvciB0aGUgcGF0aHMgaW4gYQorICAgc2luZ2xlIGRpcmVjdG9yeSB1c2luZyB0aGUgY2FjaGUtdHJlZSB3YXMgbm90IGNhcmVmdWwgZW5vdWdoCisgICBhZ2FpbnN0IGNvcnJ1cHQgaW5kZXggZmlsZS4KKworICogUmVkdWNlIHVubmVjZXNzYXJ5IHJvdW5kLXRyaXAgd2hlbiBydW5uaW5nICJscy1yZW1vdGUiIG92ZXIgdGhlCisgICBzdGF0ZWxlc3MgUlBDIG1lY2hhbmlzbS4KKworICogImdpdCByZXN0b3JlIC0tc3RhZ2VkIiBkaWQgbm90IGNvcnJlY3RseSB1cGRhdGUgdGhlIGNhY2hlLXRyZWUKKyAgIHN0cnVjdHVyZSwgcmVzdWx0aW5nIGluIGJvZ3VzIHRyZWVzIHRvIGJlIHdyaXR0ZW4gYWZ0ZXJ3YXJkcywgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIGNvZGUgcmVjZW50bHkgYWRkZWQgdG8gbW92ZSB0byB0aGUgZW50cnkgYmV5b25kIHRoZSBvbmVzIGluIHRoZQorICAgc2FtZSBkaXJlY3RvcnkgaW4gdGhlIGluZGV4IGluIHRoZSBzcGFyc2UtY29uZSBtb2RlIGRpZCBub3QgY291bnQKKyAgIHRoZSBudW1iZXIgb2YgZW50cmllcyB0byBza2lwIG92ZXIgaW5jb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFJlbmRlcmluZyBieSAiZ2l0IGxvZyAtLWdyYXBoIiBvZiBhbmNlc3RyeSBsaW5lcyBsZWFkaW5nIHRvIGEgbWVyZ2UKKyAgIGNvbW1pdCB3ZXJlIG1hZGUgc3Vib3B0aW1hbCB0byB3YXN0ZSB2ZXJ0aWNhbCBzcGFjZSBhIGJpdCB3aXRoIGEKKyAgIHJlY2VudCB1cGRhdGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogV29yayBhcm91bmQgdGVzdCBicmVha2FnZXMgY2F1c2VkIGJ5IGN1c3RvbSByZWdleCBlbmdpbmUgdXNlZCBpbgorICAgbGliYXNhbiwgd2hlbiBhZGRyZXNzIHNhbml0aXplciBpcyB1c2VkIHdpdGggbW9yZSByZWNlbnQgdmVyc2lvbnMKKyAgIG9mIGdjYyBhbmQgY2xhbmcuCisKKyAqIE1pbm9yIGJ1Z2ZpeGVzIHRvICJnaXQgYWRkIC1pIiB0aGF0IGhhcyByZWNlbnRseSBiZWVuIHJld3JpdHRlbiBpbiBDLgorCisgKiAiZ2l0IGZldGNoIC0tcmVmbWFwPSIgb3B0aW9uIGhhcyBnb3QgYSBiZXR0ZXIgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBjaGVja291dCBYIiBkaWQgbm90IGNvcnJlY3RseSBmYWlsIHdoZW4gWCBpcyBub3QgYSBsb2NhbAorICAgYnJhbmNoIGJ1dCBjb3VsZCBuYW1lIG1vcmUgdGhhbiBvbmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzCisgICAoaS5lLiB0byBiZSBkd2ltbWVkIGFzIHRoZSBzdGFydGluZyBwb2ludCB0byBjcmVhdGUgYSBjb3JyZXNwb25kaW5nCisgICBsb2NhbCBicmFuY2gpLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZmE3NDE4MGQwOCBhbS9jaGVja291dC1maWxlLWFuZC1yZWYtcmVmLWFtYmlndWl0eSBsYXRlciB0byBtYWludCkuCisKKyAqIENvcm5lciBjYXNlIGJ1Z3MgaW4gImdpdCBjbGVhbiIgdGhhdCBzdGVtcyBmcm9tIGEgKG5lY2Vzc2FyaWx5IGZvcgorICAgcGVyZm9ybWFuY2UgcmVhc29ucykgYXdrd2FyZCBjYWxsaW5nIGNvbnZlbnRpb24gaW4gdGhlIGRpcmVjdG9yeQorICAgZW51bWVyYXRpb24gQVBJIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQSBmZXRjaCB0aGF0IGlzIHRvbGQgdG8gcmVjdXJzaXZlbHkgZmV0Y2ggdXBkYXRlcyBpbiBzdWJtb2R1bGVzCisgICBpbmV2aXRhYmx5IHByb2R1Y2VzIHJlYW1zIG9mIG91dHB1dCwgYW5kIGl0IGJlY29tZXMgaGFyZCB0byBzcG90CisgICBlcnJvciBtZXNzYWdlcy4gIFRoZSBjb21tYW5kIGhhcyBiZWVuIHRhdWdodCB0byBlbnVtZXJhdGUKKyAgIHN1Ym1vZHVsZXMgdGhhdCBoYWQgZXJyb3JzIGF0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbi4KKyAgIChtZXJnZSAwMjIyNTQwODI3IGVzL2ZldGNoLXNob3ctZmFpbGVkLXN1Ym1vZHVsZXMtYXRlbmQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIiBvcHRpb24gb2YgdmFyaW91cyBzdWJjb21tYW5kcyBkaWQgbm90CisgICB3b3JrIHdlbGwgd2hlbiBydW4gaW4gYW4gYWx0ZXJuYXRlIHdvcmt0cmVlLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBGdXR1cmVwcm9vZmluZyBhIHRlc3Qgbm90IHRvIGRlcGVuZCBvbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorICAgZGV0YWlsLgorCisgKiBSdW5uaW5nICJnaXQgcm0iIG9uIGEgc3VibW9kdWxlIGZhaWxlZCB1bm5lY2Vzc2FyaWx5IHdoZW4KKyAgIC5naXRtb2R1bGVzIGlzIG9ubHkgY2FjaGUtZGlydHksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQyBwZWRhbnRyeSA7LSkgZml4LgorCisgKiAiZ2l0IGdyZXAgLS1uby1pbmRleCIgc2hvdWxkIG5vdCBnZXQgYWZmZWN0ZWQgYnkgdGhlIGNvbnRlbnRzIG9mCisgICB0aGUgLmdpdG1vZHVsZXMgZmlsZSBidXQgd2hlbiAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGlzIGdpdmVuIG9yCisgICB0aGUgInN1Ym1vZHVsZS5yZWN1cnNlIiB2YXJpYWJsZSBpcyBzZXQsIGl0IGRpZC4gIE5vdyB0aGVzZQorICAgc2V0dGluZ3MgYXJlIGlnbm9yZWQgaW4gdGhlICItLW5vLWluZGV4IiBtb2RlLgorCisgKiBUZWNobmljYWwgZGV0YWlscyBvZiB0aGUgYnVuZGxlIGZvcm1hdCBoYXMgYmVlbiBkb2N1bWVudGVkLgorCisgKiBVbmhlbHBmdWwgd2FybmluZyBtZXNzYWdlcyBkdXJpbmcgZG9jdW1lbnRhdGlvbiBidWlsZCBoYXZlIGJlZW4gc3F1ZWxjaGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgaWRlbnRpZmllcyBleGlzdGluZyBjb21taXRzIGluIGl0cyB0b2RvIGZpbGUgd2l0aAorICAgdGhlaXIgYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUsIHdoaWNoIGNvdWxkIGJlY29tZSBhbWJpZ3VvdXMgYXMgaXQKKyAgIGdvZXMgdG8gY3JlYXRlIG5ldyBjb21taXRzLCBhbmQgaGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIGFtYmlndWl0eQorICAgaW4gdGhlIG1haW4gcGFydCBvZiBpdHMgZXhlY3V0aW9uLiAgQSBmZXcgb3RoZXIgY2FzZXMgaG93ZXZlciB3ZXJlCisgICBub3QgY292ZXJlZCBieSB0aGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGFtYmlndWl0eSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogQWxsb3cgdGhlIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIGNvbmZpZ3VyYXRpb24gdG8ga2ljayBpbiB3aGVuCisgICAicmViYXNlIC0tZWRpdC10b2RvIiBhbmQgInJlYmFzZSAtLWNvbnRpbnVlIiByZXN0YXJ0cyB0aGUgcHJvY2VkdXJlLgorICAgKG1lcmdlIDVhNTQ0NWQ4NzggYWcvZWRpdC10b2RvLWRyb3AtY2hlY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgd2F5ICJnaXQgc3VibW9kdWxlIHN0YXR1cyIgcmVwb3J0cyBhbiBpbml0aWFsaXplZCBidXQgbm90IHlldAorICAgcG9wdWxhdGVkIHN1Ym1vZHVsZSBoYXMgbm90IGJlZW4gcmVpbXBsZW1lbnRlZCBjb3JyZWN0bHkgd2hlbiBhCisgICBwYXJ0IG9mIHRoZSAiZ2l0IHN1Ym1vZHVsZSIgY29tbWFuZCB3YXMgcmV3cml0dGVuIGluIEMsIHdoaWNoIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZjM4YzkyNDUyZCBway9zdGF0dXMtb2YtdW5jbG9uZWQtc3VibW9kdWxlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdG8gYXV0b21hdGljYWxseSBzaHJpbmsgdGhlIGZhbi1vdXQgaW4gdGhlIG5vdGVzIHRyZWUgaGFkCisgICBhbiBvZmYtYnktb25lIGJ1Zywgd2hpY2ggaGFzIGJlZW4ga2lsbGVkLgorCisgKiBUaGUgaW5kZXgtcGFjayBjb2RlIG5vdyBkaWFnbm9zZXMgYSBiYWQgaW5wdXQgcGFja3N0cmVhbSB0aGF0CisgICByZWNvcmRzIHRoZSBzYW1lIG9iamVjdCB0d2ljZSB3aGVuIGl0IGlzIHVzZWQgYXMgZGVsdGEgYmFzZTsgdGhlCisgICBjb2RlIHVzZWQgdG8gZGVjbGFyZSBhIHNvZnR3YXJlIGJ1ZyB3aGVuIGVuY291bnRlcmluZyBzdWNoIGFuCisgICBpbnB1dCwgYnV0IGl0IGlzIGFuIGlucHV0IGVycm9yLgorCisKKyAqIFRoZSBjb2RlIHRvIGNvbXB1dGUgdGhlIGNvbW1pdC1ncmFwaCBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIGEgbW9yZQorICAgcm9idXN0IHdheSB0byB0ZWxsIGlmIHR3byBvYmplY3QgZGlyZWN0b3JpZXMgcmVmZXIgdG8gdGhlIHNhbWUKKyAgIHRoaW5nLgorICAgKG1lcmdlIGE3ZGY2MGNhYzggdGIvY29tbWl0LWdyYXBoLW9iamVjdC1kaXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlbW90ZSByZW5hbWUgWCBZIiBuZWVkcyB0byBhZGp1c3QgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgIChlLmcuIGJyYW5jaC48bmFtZT4ucmVtb3RlKSB3aG9zZSB2YWx1ZSB1c2VkIHRvIGJlIFggdG8gWS4KKyAgIGJyYW5jaC48bmFtZT4ucHVzaFJlbW90ZSBpcyBub3cgYWxzbyB1cGRhdGVkLgorCisgKiBVcGRhdGUgdG8gZG9jLWRpZmYuCisKKyAqIERvYyBtYXJrdXAgZml4LgorCisgKiAiZ2l0IGNoZWNrLWlnbm9yZSIgZGlkIG5vdCB3b3JrIHdoZW4gdGhlIGdpdmVuIHBhdGggaXMgZXhwbGljaXRseQorICAgbWFya2VkIGFzIG5vdCBpZ25vcmVkIHdpdGggYSBuZWdhdGl2ZSBlbnRyeSBpbiB0aGUgLmdpdGlnbm9yZSBmaWxlLgorCisgKiBUaGUgbWVyZ2UtcmVjdXJzaXZlIG1hY2hpbmVyeSBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgY2FjaGUgZW50cnkgZm9yCisgICBhIG1lcmdlIHJlc3VsdCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMsIHJlc3VsdGluZyBpbiBhbiB1bm5lY2Vzc2FyeQorICAgbWVyZ2UgZmFpbHVyZSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQuCisKKyAqIEZpeCBmb3IgYSBidWcgcmV2ZWFsZWQgYnkgYSByZWNlbnQgY2hhbmdlIHRvIG1ha2UgdGhlIHByb3RvY29sIHYyCisgICB0aGUgZGVmYXVsdC4KKworICogSW4gcmFyZSBjYXNlcyAiZ2l0IHdvcmt0cmVlIGFkZCA8cGF0aD4iIGNvdWxkIHRoaW5rIHRoYXQgPHBhdGg+CisgICB3YXMgYWxyZWFkeSBhIHJlZ2lzdGVyZWQgd29ya3RyZWUgZXZlbiB3aGVuIGl0IHdhc24ndCBhbmQgcmVmdXNlCisgICB0byBhZGQgdGhlIG5ldyB3b3JrdHJlZS4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYmI2OWIzYjAwOSBlcy93b3JrdHJlZS1hdm9pZC1kdXBsaWNhdGlvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1c2giIHNob3VsZCBzdG9wIGZyb20gdXBkYXRpbmcgYSBicmFuY2ggdGhhdCBpcyBjaGVja2VkIG91dAorICAgd2hlbiByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGNvbmZpZ3VyYXRpb24gaXMgc2V0LCBidXQgaXQgZmFpbGVkCisgICB0byBwYXkgYXR0ZW50aW9uIHRvIGNoZWNrb3V0cyBpbiBzZWNvbmRhcnkgd29ya3RyZWVzLiAgVGhpcyBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDRkODY0ODk1YTIgaHYvcmVjZWl2ZS1kZW55Y3VycmVudC1ldmVyeXdoZXJlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgQkFTRSBCUkFOQ0giIHJlYmFzZWQvdXBkYXRlZCB0aGUgdGlwIG9mIEJSQU5DSCBhbmQKKyAgIGNoZWNrZWQgaXQgb3V0LCBldmVuIHdoZW4gdGhlIEJSQU5DSCBpcyBjaGVja2VkIG91dCBpbiBhIGRpZmZlcmVudAorICAgd29ya3RyZWUuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBiNWNhYmI0YTk2IGVzL2RvLW5vdC1sZXQtcmViYXNlLXN3aXRjaC10by1wcm90ZWN0ZWQtYnJhbmNoIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkZXNjcmliZSIgaW4gYSByZXBvc2l0b3J5IHdpdGggbXVsdGlwbGUgcm9vdCBjb21taXRzIHNvbWV0aW1lcworICAgZ2F2ZSB1cCBsb29raW5nIGZvciB0aGUgYmVzdCB0YWcgdG8gZGVzY3JpYmUgYSBnaXZlbiBjb21taXQgd2l0aAorICAgdG9vIGVhcmx5LCB3aGljaCBoYXMgYmVlbiBhZGp1c3RlZC4KKworICogImdpdCBtZXJnZSBzaWduZWQtdGFnIiB3aGlsZSBsYWNraW5nIHRoZSBwdWJsaWMga2V5IHN0YXJ0ZWQgdG8gc2F5CisgICAiTm8gc2lnbmF0dXJlIiwgd2hpY2ggd2FzIHV0dGVybHkgd3JvbmcuICBUaGlzIHJlZ3Jlc3Npb24gaGFzIGJlZW4KKyAgIHJldmVydGVkLgorCisgKiBNaW5HVydzIHBvbGwoKSBlbXVsYXRpb24gaGFzIGJlZW4gaW1wcm92ZWQuCisKKyAqICJnaXQgc2hvdyIgYW5kIG90aGVycyBnYXZlIGFuIG9iamVjdCBuYW1lIGluIHJhdyBmb3JtYXQgaW4gaXRzCisgICBlcnJvciBvdXRwdXQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBnaXZlIGl0IGluIGhleC4KKworICogImdpdCBmZXRjaCIgb3ZlciBIVFRQIHdhbGtlciBwcm90b2NvbCBkaWQgbm90IHNob3cgYW55IHByb2dyZXNzCisgICBvdXRwdXQuICBXZSBpbmhlcmVudGx5IGRvIG5vdCBrbm93IGhvdyBtdWNoIHdvcmsgcmVtYWlucywgYnV0IHN0aWxsCisgICB3ZSBjYW4gc2hvdyBzb21ldGhpbmcgbm90IHRvIGJvcmUgdXNlcnMuCisgICAobWVyZ2UgNzY1NWI0MTE5ZCBycy9zaG93LXByb2dyZXNzLWluLWR1bWItaHR0cC1mZXRjaCBsYXRlciB0byBtYWludCkuCisKKyAqIEJvdGggImdpdCBscy1yZW1vdGUgLWgiIGFuZCAiZ2l0IGdyZXAgLWgiIGdpdmUgc2hvcnQgdXNhZ2UgaGVscCwKKyAgIGxpa2UgYW55IG90aGVyIEdpdCBzdWJjb21tYW5kLCBidXQgaXQgaXMgbm90IHVucmVhc29uYWJsZSB0byBleHBlY3QKKyAgIHRoYXQgdGhlIGZvcm1lciB3b3VsZCBiZWhhdmUgdGhlIHNhbWUgYXMgImdpdCBscy1yZW1vdGUgLS1oZWFkIgorICAgKHRoZXJlIGlzIG5vIG90aGVyIHNlbnNpYmxlIGJlaGF2aW91ciBmb3IgdGhlIGxhdHRlcikuICBUaGUKKyAgIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZCBpbiBhbiBhdHRlbXB0IHRvIGNsYXJpZnkgdGhpcy4KKworICogT3RoZXIgY29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIGQwZDBhMzU3YTEgYW0vdXBkYXRlLXBhdGhzcGVjLWYtZi10ZXN0cyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjk0ZjdiZDAwZCBhbS90ZXN0LXBhdGhzcGVjLWYtZi1lcnJvci1jYXNlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzUxM2E5NThiNiBzcy90NjAyNS1tb2Rlcm5pemUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI0NDE3MTcyNTYgZGwvdGVzdC1tdXN0LWZhaWwtZml4ZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQwMzEwNDlkYTMgbXQvc3BhcnNlLWNoZWNrb3V0LWRvYy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0NTEzNmE5NWEgamMvc2tpcC1wcmVmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUyOTBkNDUxMzQgamsvYWxsb2MtY2xlYW51cHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdhOWY4Y2E4MDUgcnMvcGFyc2Utb3B0aW9ucy1jb25jYXQtZHVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MTdiNjA1NjRlIHJzL3N0cmJ1Zi1pbnNlcnRzdHIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY2OTZhMmIxYzggamsvbWFpbGluZm8tY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZGUyNmYwMmRiMSBqcy90ZXN0LWF2b2lkLXBpcGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGEyZGM0MzQxNGMgZXMvZG9jLW1lbnRvcmluZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDJiYmJlOWRmOSBlcy93b3JrdHJlZS1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyY2U2ZDA3NWZhIHJzL21pY3JvLWNsZWFudXBzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyN2YxODJiM2ZjIHJzL2JsYW1lLXR5cGVmaXgtZm9yLWZpbmdlcnByaW50IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzYzI5ZTIxZWIwIG1hL3Rlc3QtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjQwZmMwNGY4MSBhZy9yZWJhc2UtcmVtb3ZlLXJlZHVuZGFudC1jb2RlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkNjhjZTkwNmM3IHJzL2NvbW1pdC1ncmFwaC1jb2RlLXNpbXBsaWZpY2F0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhNTFkOWU4ZjA3IHJqL3QxMDUwLXVzZS10ZXN0LXBhdGgtaXMtZmlsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmQwYmMxNzU1NyBray9jb21wbGV0ZS1kaWZmLWNvbG9yLW1vdmVkIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2NWJmODIwZDBlIGVuL3Rlc3QtY2xlYW51cCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYzYzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4wLnR4dApAQCAtMCwwICsxLDMwMCBAQAorR2l0IHYyLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIG9uZSBlbmRlZCB1cCB0byBiZSBhIHJlbGVhc2Ugd2l0aCBsb3RzIG9mIHNtYWxsIGNvcnJlY3Rpb25zIGFuZAoraW1wcm92ZW1lbnRzIHdpdGhvdXQgYmlnIHVuY29tZm9ydGFibHkgZXhjaXRpbmcgZmVhdHVyZXMuICBUaGUgcmVjZW50CitzZWN1cml0eSBmaXggdGhhdCB3ZW50IHRvIDIuMi4xIGFuZCBvbGRlciBtYWludGVuYW5jZSB0cmFja3MgaXMgYWxzbworY29udGFpbmVkIGluIHRoaXMgdXBkYXRlLgorCisKK1VwZGF0ZXMgc2luY2UgdjIuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BvcnRzCisKKyAqIFJlY2VudCBnY2MgdG9vbGNoYWluIG9uIEN5Z3dpbiBzdGFydGVkIHRocm93aW5nIGNvbXBpbGF0aW9uIHdhcm5pbmcsCisgICB3aGljaCBoYXMgYmVlbiBzcXVlbGNoZWQuCisKKyAqIEEgZmV3IHVwZGF0ZXMgdG8gYnVpbGQgb24gcGxhdGZvcm1zIHRoYXQgbGFjayB0dl9uc2VjLAorICAgY2xvY2tfZ2V0dGltZSwgQ0xPQ0tfTU9OT1RPTklDIGFuZCBITUFDX0NUWF9jbGVhbnVwIChlLmcuIG9sZGVyCisgICBSSEVMKSBoYXZlIGJlZW4gYWRkZWQuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEl0IHdhcyBjdW1iZXJzb21lIHRvIHVzZSAiR0lUX1NTSCIgbWVjaGFuaXNtIHdoZW4gdGhlIHVzZXIgd2FudGVkCisgICB0byBwYXNzIGFuIGV4dHJhIHNldCBvZiBhcmd1bWVudHMgdG8gdGhlIHVuZGVybHlpbmcgc3NoLiAgQSBuZXcKKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIEdJVF9TU0hfQ09NTUFORCBjYW4gYmUgdXNlZCBmb3IgdGhpcy4KKworICogQSByZXF1ZXN0IHRvIHN0b3JlIGFuIGVtcHR5IG5vdGUgdmlhICJnaXQgbm90ZXMiIG1lYW50IHRvIHJlbW92ZQorICAgbm90ZSBmcm9tIHRoZSBvYmplY3QgYnV0IHdpdGggLS1hbGxvdy1lbXB0eSB3ZSB3aWxsIHN0b3JlIGEKKyAgIChzdXJwcmlzZSEpICBub3RlIHRoYXQgaXMgZW1wdHkuCisKKyAqICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiBsZWFybmVkIHRvIHByb3Blcmx5IGhhbmRsZSB0aGUKKyAgICJDb25mbGljdHM6IiBibG9jayBhdCB0aGUgZW5kLgorCisgKiAiZ2l0IGFtIiBsZWFybmVkICItLW1lc3NhZ2UtaWQiIG9wdGlvbiB0byBjb3B5IHRoZSBtZXNzYWdlIElEIG9mCisgICB0aGUgaW5jb21pbmcgZS1tYWlsIHRvIHRoZSBsb2cgbWVzc2FnZSBvZiByZXN1bHRpbmcgY29tbWl0LgorCisgKiAiZ2l0IGNsb25lIC0tcmVmZXJlbmNlPTxvdmVyIHRoZXJlPiIgbGVhcm5lZCB0aGUgIi0tZGlzc29jaWF0ZSIKKyAgIG9wdGlvbiB0byBnbyB3aXRoIGl0OyBpdCBib3Jyb3dzIG9iamVjdHMgZnJvbSB0aGUgcmVmZXJlbmNlIG9iamVjdAorICAgc3RvcmUgd2hpbGUgY2xvbmluZyBvbmx5IHRvIHJlZHVjZSBuZXR3b3JrIHRyYWZmaWMgYW5kIHRoZW4KKyAgIGRpc3NvY2lhdGVzIHRoZSByZXN1bHRpbmcgY2xvbmUgZnJvbSB0aGUgcmVmZXJlbmNlIGJ5IHBlcmZvcm1pbmcKKyAgIGxvY2FsIGNvcGllcyBvZiBib3Jyb3dlZCBvYmplY3RzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgIi0tdHJhbnNmZXItZW5jb2RpbmciIG9wdGlvbiB0byBmb3JjZSBhCisgICBub24tZmF1bHQgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBoZWFkZXIgKGUuZy4gYmFzZTY0KS4KKworICogImdpdCBzZW5kLWVtYWlsIiBub3JtYWxseSBpZGVudGlmaWVzIGl0c2VsZiB2aWEgWC1NYWlsZXI6IGhlYWRlciBpbgorICAgdGhlIG1lc3NhZ2UgaXQgc2VuZHMgb3V0LiAgQSBuZXcgY29tbWFuZCBsaW5lIGZsYWcgLS1uby14bWFpbGVyCisgICBhbGxvd3MgdGhlIHVzZXIgdG8gc3F1ZWxjaCB0aGUgaGVhZGVyLgorCisgKiAiZ2l0IHB1c2giIGludG8gYSByZXBvc2l0b3J5IHdpdGggYSB3b3JraW5nIHRyZWUgbm9ybWFsbHkgcmVmdXNlcworICAgdG8gbW9kaWZ5IHRoZSBicmFuY2ggdGhhdCBpcyBjaGVja2VkIG91dC4gIFRoZSBjb21tYW5kIGxlYXJuZWQgdG8KKyAgIG9wdGlvbmFsbHkgZG8gYW4gZXF1aXZhbGVudCBvZiAiZ2l0IHJlc2V0IC0taGFyZCIgb25seSB3aGVuIHRoZXJlCisgICBpcyBubyBjaGFuZ2UgdG8gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IGluc3RlYWQsIHdoaWNoIHdvdWxkCisgICBiZSB1c2VmdWwgdG8gImRlcGxveSIgYnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeS4KKworICogImdpdCBuZXctd29ya2RpciIgKGluIGNvbnRyaWIvKSBjYW4gYmUgdXNlZCB0byBwb3B1bGF0ZSBhbiBlbXB0eQorICAgYW5kIGV4aXN0aW5nIGRpcmVjdG9yeSBub3cuCisKKyAqIENyZWRlbnRpYWwgaGVscGVycyBhcmUgYXNrZWQgaW4gdHVybiB1bnRpbCBvbmUgb2YgdGhlbSBnaXZlCisgICBwb3NpdGl2ZSByZXNwb25zZSwgd2hpY2ggaXMgY3VtYmVyc29tZSB0byB0dXJuIG9mZiB3aGVuIHlvdSBuZWVkIHRvCisgICBydW4gR2l0IGluIGFuIGF1dG9tYXRlZCBzZXR0aW5nLiAgVGhlIGNyZWRlbnRpYWwgaGVscGVyIGludGVyZmFjZQorICAgbGVhcm5lZCB0byBhbGxvdyBhIGhlbHBlciB0byBzYXkgInN0b3AsIGRvbid0IGFzayBvdGhlciBoZWxwZXJzLiIKKyAgIEFsc28gR0lUX1RFUk1JTkFMX1BST01QVCBlbnZpcm9ubWVudCBjYW4gYmUgc2V0IHRvIGZhbHNlIHRvIGRpc2FibGUKKyAgIG91ciBidWlsdC1pbiBwcm9tcHQgbWVjaGFuaXNtIGZvciBwYXNzd29yZHMuCisKKyAqICJnaXQgYnJhbmNoIC1kIiAoZGVsZXRlKSBhbmQgImdpdCBicmFuY2ggLW0iIChtb3ZlKSBsZWFybmVkIHRvCisgICBob25vciAiLWYiIChmb3JjZSkgZmxhZzsgdW5saWtlIG1hbnkgb3RoZXIgc3ViY29tbWFuZHMsIHRoZSB3YXkgdG8KKyAgIGZvcmNlIHRoZXNlIGhhdmUgYmVlbiB3aXRoIHNlcGFyYXRlICItRC8tTSIgb3B0aW9ucywgd2hpY2ggd2FzCisgICBpbmNvbnNpc3RlbnQuCisKKyAqICJkaWZmLWhpZ2hsaWdodCIgZmlsdGVyIChpbiBjb250cmliLykgYWxsb3dzIGl0cyBjb2xvciBvdXRwdXQgdG8gYmUKKyAgIGN1c3RvbWl6ZWQgdmlhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgbGVhcm5lZCB0byB0YWtlICItdiIgKHZlcmJvc2UpIGFuZCAiLXEiIChxdWlldCkKKyAgIGNvbW1hbmQgbGluZSBvcHRpb25zLgorCisgKiAiZ2l0IHJlbW90ZSBhZGQgJG5hbWUgJFVSTCIgaXMgbm93IGFsbG93ZWQgd2hlbiAidXJsLiRVUkwuaW5zdGVhZE9mIgorICAgaXMgYWxyZWFkeSBkZWZpbmVkLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgbm93IGNhbiBiZSBidWlsdCB0byB1c2UgY1VSTCBsaWJyYXJ5IHRvIHRhbGsgdG8KKyAgIElNQVAgc2VydmVycyAoaWYgdGhlIGxpYnJhcnkgaXMgcmVjZW50IGVub3VnaCwgb2YgY291cnNlKS4KKyAgIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgYXV0aGVudGljYXRlIG1ldGhvZCBvdGhlciB0aGFuIENSQU0tTUQ1LAorICAgYW1vbmcgb3RoZXIgdGhpbmdzLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgbm93IGFsbG93cyBHSVRfQ1VSTF9WRVJCT1NFIGVudmlyb25tZW50IHZhcmlhYmxlIHRvCisgICBjb250cm9sIHRoZSB2ZXJib3NpdHkgd2hlbiB0YWxraW5nIHZpYSB0aGUgY1VSTCBsaWJyYXJ5LgorCisgKiBUaGUgcHJvbXB0IHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgdG8gb3B0aW9uYWxseSBoaWRlIHByb21wdAorICAgd2hlbiBpbiBhbiBpZ25vcmVkIGRpcmVjdG9yeSBieSBzZXR0aW5nIEdJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRAorICAgc2hlbGwgdmFyaWFibGUuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogRWFybGllciB3ZSBtYWRlICJyZXYtbGlzdCAtLW9iamVjdC1lZGdlIiBtb3JlIGFnZ3Jlc3NpdmVseSBsaXN0IHRoZQorICAgb2JqZWN0cyBhdCB0aGUgZWRnZSBjb21taXRzLCBpbiBvcmRlciB0byByZWR1Y2UgbnVtYmVyIG9mIG9iamVjdHPjgIAKKyAgIGZldGNoZWQgaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSwgYnV0IHRoZSBjaGFuZ2UgYWZmZWN0ZWQgY2FzZXMKKyAgIG90aGVyIHRoYW4gImZldGNoaW5nIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnkiIGFuZCBtYWRlIGl0CisgICB1bnVzYWJseSBzbG93IChlLmcuIGZldGNoaW5nIGludG8gYSBub3JtYWwgcmVwb3NpdG9yeSBzaG91bGQgbm90CisgICBoYXZlIHRvIHN1ZmZlciB0aGUgb3ZlcmhlYWQgZnJvbSBleHRyYSBwcm9jZXNzaW5nKS4gIExpbWl0IGl0IHRvIGEKKyAgIG1vcmUgc3BlY2lmaWMgY2FzZSBieSBpbnRyb2R1Y2luZyAtLW9iamVjdHMtZWRnZS1hZ2dyZXNzaXZlLCBhIG5ldworICAgb3B0aW9uIHRvIHJldi1saXN0LgorCisgKiBTcXVlbGNoZWQgdXNlbGVzcyBjb21waWxlciB3YXJuaW5ncyBvbiBNYWMgT1MgWCByZWdhcmRpbmcgdGhlCisgICBjcnlwdG8gQVBJLgorCisgKiBUaGUgcHJvY2VkdXJlIHRvIGdlbmVyYXRlIHVuaWNvZGUgdGFibGUgaGFzIGJlZW4gc2ltcGxpZmllZC4KKworICogU29tZSBmaWxlc3lzdGVtcyBhc3NpZ24gZmlsZW1vZGVzIGluIGEgc3RyYW5nZSB3YXksIGZvb2xpbmcgdGhlbgorICAgYXV0b21hdGljICJmaWxlbW9kZSB0cnVzdGFiaWxpdHkiIGNoZWNrIGRvbmUgZHVyaW5nIGEgbmV3CisgICByZXBvc2l0b3J5IGNyZWF0aW9uLiAgVGhlIGluaXRpYWxpemF0aW9uIGNvZGVwYXRoIGhhcyBiZWVuIGhhcmRlbmVkCisgICBhZ2FpbnN0IHRoaXMgaXNzdWUuCisKKyAqIFRoZSBjb2RlcGF0aCBpbiAiZ2l0IHJlbW90ZSB1cGRhdGUgLS1wcnVuZSIgdG8gZHJvcCBtYW55IHJlZnMgaGFzCisgICBiZWVuIG9wdGltaXplZC4KKworICogVGhlIEFQSSBpbnRvIGdldF9tZXJnZV9iYXNlcyooKSBmYW1pbHkgb2YgZnVuY3Rpb25zIHdhcyBlYXN5IHRvCisgICBtaXN1c2UsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBtYWtlIGl0IGhhcmRlciB0byBkbyBzby4KKworICogTG9uZyBvdmVyZHVlIGRlcGFydHVyZSBmcm9tIHRoZSBhc3N1bXB0aW9uIHRoYXQgU19JRk1UIGlzIHNoYXJlZCBieQorICAgZXZlcnlib2R5IG1hZGUgaW4gMjAwNSwgd2hpY2ggd2FzIG5lY2Vzc2FyeSB0byBwb3J0IHRvIHovT1MuCisKKyAqICJnaXQgcHVzaCIgYW5kICJnaXQgZmV0Y2giIGRpZCBub3QgY29tbXVuaWNhdGUgYW4gb3ZlcmxvbmcgcmVmbmFtZQorICAgY29ycmVjdGx5LiAgTm93IGl0IHVzZXMgNjRrQiBzaWRlYmFuZCB0byBhY2NvbW1vZGF0ZSBsb25nZXIgb25lcy4KKworICogUmVjZW50IEdQRyBjaGFuZ2VzIHRoZSBrZXlyaW5nIGZvcm1hdCBhbmQgZHJvcHMgc3VwcG9ydCBmb3IgUkZDMTk5MQorICAgZm9ybWF0dGVkIHNpZ25hdHVyZXMsIGJyZWFraW5nIG91ciBleGlzdGluZyB0ZXN0cy4KKworICogImdpdC1wcm9tcHQiIChpbiBjb250cmliLykgdXNlZCBhIHZhcmlhYmxlIGZyb20gdGhlIGdsb2JhbCBzY29wZSwKKyAgIHBvc3NpYmx5IGNvbnRhbWluYXRpbmcgZW5kLXVzZXIncyBuYW1lc3BhY2UuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuMgorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjIgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogImdpdCBodHRwLXB1c2giIG92ZXIgV2ViREFWIChha2EgZHVtYiBodHRwLXB1c2gpIHdhcyBicm9rZW4gaW4KKyAgIHYyLjIuMiB3aGVuIHBhcnNpbmcgYSBzeW1ib2xpYyByZWYsIHJlc3VsdGluZyBpbiBhIGJvZ3VzIHJlcXVlc3QKKyAgIHRoYXQgZ2V0cyByZWplY3RlZCBieSByZWNlbnQgdmVyc2lvbnMgb2YgY1VSTCBsaWJyYXJ5LgorICAgKG1lcmdlIGY2Nzg2YzggamsvaHR0cC1wdXNoLXN5bXJlZi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbG9naWMgaW4gImdpdCBiaXNlY3QgYmFkIEhFQUQiIGV0Yy4gdG8gYXZvaWQgZm9yY2luZyB0aGUgdGVzdAorICAgb2YgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiBiYWQgYW5kIGdvb2QgY29tbWl0cyB3YXMgYnJva2VuLgorICAgKG1lcmdlIDA3OTEzZDUgY2MvYmlzZWN0LXJldi1wYXJzaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjaGVja291dC1pbmRleCAtLXRlbXA9JHRhcmdldCAkcGF0aCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseQorICAgZm9yIHBhdGhzIG91dHNpZGUgdGhlIGN1cnJlbnQgc3ViZGlyZWN0b3J5IGluIHRoZSBwcm9qZWN0LgorICAgKG1lcmdlIDc0YzRkZTUgZXMvY2hlY2tvdXQtaW5kZXgtdGVtcCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSByZXBvcnQgZnJvbSAiZ2l0IGNoZWNrb3V0IiBvbiBhIGJyYW5jaCB0aGF0IGJ1aWxkcyBvbiBhbm90aGVyCisgICBsb2NhbCBicmFuY2ggYnkgc2V0dGluZyBpdHMgYnJhbmNoLioubWVyZ2UgdG8gYnJhbmNoIG5hbWUgKG5vdCBhCisgICBmdWxsIHJlZm5hbWUpIGluY29ycmVjdGx5IHNhaWQgdGhhdCB0aGUgdXBzdHJlYW0gaXMgZ29uZS4KKyAgIChtZXJnZSAwNWU3MzY4IGpjL2NoZWNrb3V0LWxvY2FsLXRyYWNrLXJlcG9ydCBsYXRlciB0byBtYWludCkuCisKKyAqIFdpdGggVGhlIGdpdC1wcm9tcHQgc3VwcG9ydCAoaW4gY29udHJpYi8pLCB1c2luZyB0aGUgZXhpdCBzdGF0dXMgb2YKKyAgIHRoZSBsYXN0IGNvbW1hbmQgaW4gdGhlIHByb21wdCwgZS5nLiAgUFMxPSckKF9fZ2l0X3BzMSkgJD8gJywgZGlkCisgICBub3Qgd29yayB3ZWxsLCBiZWNhdXNlIHRoZSBoZWxwZXIgZnVuY3Rpb24gc3RvbXBlZCBvbiB0aGUgZXhpdAorICAgc3RhdHVzLgorICAgKG1lcmdlIDZiYWJlNzYgdGYvcHJvbXB0LXByZXNlcnZlLWV4aXQtc3RhdHVzIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHVwZGF0ZSB0byAiZ2l0IGNvbW1pdCIgYnJva2UgYW1lbmRpbmcgYW4gZXhpc3RpbmcgY29tbWl0CisgICB3aXRoIGJvZ3VzIGF1dGhvci9jb21taXR0ZXIgbGluZXMgd2l0aG91dCBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLgorICAgKG1lcmdlIGM4M2E1MDkgamsvY29tbWl0LWRhdGUtYXBwcm94aWRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbG9ja2ZpbGUgQVBJIHVzZWQgdG8gZ2V0IGNvbmZ1c2VkIHdoaWNoIGZpbGUgdG8gY2xlYW4gdXAgd2hlbgorICAgdGhlIHByb2Nlc3MgbW92ZWQgdGhlICRjd2QgYWZ0ZXIgY3JlYXRpbmcgYSBsb2NrZmlsZS4KKyAgIChtZXJnZSBmYTEzN2Y2IG5kL2xvY2tmaWxlLWFic29sdXRlIGxhdGVyIHRvIG1haW50KS4KKworICogVHJhZGl0aW9uYWxseSB3ZSB0cmllZCB0byBhdm9pZCBpbnRlcnByZXRpbmcgZGF0ZSBzdHJpbmdzIGdpdmVuIGJ5CisgICB0aGUgdXNlciBhcyBmdXR1cmUgZGF0ZXMsIGUuZy4gR0lUX0NPTU1JVFRFUl9EQVRFPTIwMTQtMTItMTAgd2hlbgorICAgdXNlZCBlYXJseSBOb3ZlbWJlciAyMDE0IHdhcyB0YWtlbiBhcyAiT2N0b2JlciAxMiwgMjAxNCIgYmVjYXVzZSBpdAorICAgaXMgbGlrZWx5IHRoYXQgYSBkYXRlIGluIHRoZSBmdXR1cmUsIERlY2VtYmVyIDEwLCBpcyBhIG1pc3Rha2UuCisgICBUaGlzIGhldXJpc3RpY3MgaGFzIGJlZW4gbG9vc2VuZWQgdG8gYWxsb3cgcGVvcGxlIHRvIGV4cHJlc3MgZnV0dXJlCisgICBkYXRlcyAobW9zdCBub3RhYmx5LCAtLXVudGlsPTxkYXRlPiBtYXkgd2FudCB0byBiZSBmYXIgaW4gdGhlCisgICBmdXR1cmUpIGFuZCB3ZSBubyBsb25nZXIgdGllYnJlYWsgYnkgZnV0dXJlLW5lc3Mgb2YgdGhlIGRhdGUgd2hlbgorCisgICAgKDEpIElTTy1saWtlIGZvcm1hdCBpcyB1c2VkLCBhbmQKKyAgICAoMikgdGhlIHN0cmluZyBjYW4gbWFrZSBzZW5zZSBpbnRlcnByZXRlZCBhcyBib3RoIHktbS1kIGFuZCB5LWQtbS4KKworICAgR2l0IG1heSBzdGlsbCBoYXZlIHRvIHVzZSB0aGUgaGV1cmlzdGljcyB0byB0aWVicmVhayBiZXR3ZWVuIGRkL21tL3l5CisgICBhbmQgbW0vZGQveXksIHRob3VnaC4KKyAgIChtZXJnZSBkMzcyMzk1IGprL2FwcHJveGlkYXRlLWF2b2lkLXktZC1tLW92ZXItZnV0dXJlLWRhdGVzIGxhdGVyIHRvIG1haW50KS4KKworICogR2l0IGRpZCBub3QgY29ycmVjdGx5IHJlYWQgYW4gb3ZlcmxvbmcgcmVmbmFtZSBmcm9tIGEgcGFja2VkIHJlZnMKKyAgIGZpbGUuCisgICAobWVyZ2UgZWE0MTc4MyBqay9yZWFkLXBhY2tlZC1yZWZzLXdpdGhvdXQtcGF0aC1tYXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFwcGx5IiB3YXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIHRvIHRha2UgLS1pZ25vcmUtZGF0ZQorICAgb3B0aW9uLCB3aGljaCBpdCBkb2VzIG5vdC4KKyAgIChtZXJnZSAwY2VmNGU3IHJ3L2FwcGx5LWRvZXMtbm90LXRha2UtaWdub3JlLWRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFkZCAtaSIgZGlkIG5vdCBub3RpY2Ugd2hlbiB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBpbnB1dAorICAgc3RyZWFtIHdlbnQgYXdheSBhbmQga2VwdCBhc2tpbmcgdGhlIHNhbWUgcXVlc3Rpb24uCisgICAobWVyZ2UgYThiZWM3YSBqay9hZGQtaS1yZWFkLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGhhbmRsZSBSRkMgMjA0NyBlbmNvZGVkIGhlYWRlcnMgcXVpdGUKKyAgIHJpZ2h0LgorICAgKG1lcmdlIGFiNDdlMmEgcmQvc2VuZC1lbWFpbC0yMDQ3LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIE5ldyB0YWcgb2JqZWN0IGZvcm1hdCB2YWxpZGF0aW9uIGFkZGVkIGluIDIuMiBzaG93ZWQgZ2FyYmFnZSBhZnRlcgorICAgYSB0YWduYW1lIGl0IHJlcG9ydGVkIGluIGl0cyBlcnJvciBtZXNzYWdlLgorICAgKG1lcmdlIGExZTkyMGEganMvZnNjay10YWctdmFsaWRhdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRoYXQgcmVhZHMgdGhlIHJlZmxvZyBmcm9tIHRoZSBuZXdlciB0byB0aGUgb2xkZXIgZW50cmllcworICAgZGlkIG5vdCBoYW5kbGUgYW4gZW50cnkgdGhhdCBjcm9zc2VzIGEgYm91bmRhcnkgb2YgYmxvY2sgaXQgdXNlcyB0bworICAgcmVhZCB0aGVtIGNvcnJlY3RseS4KKyAgIChtZXJnZSA2OTIxNmJmIGprL2Zvci1lYWNoLXJlZmxvZy1lbnQtcmV2ZXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtQiAtTSIgYWZ0ZXIgbWFraW5nIGEgbmV3IGNvcHkgQiBvdXQgb2YgYW4gZXhpc3RpbmcgZmlsZQorICAgQSBhbmQgdGhlbiBlZGl0aW5nIEEgZXh0ZW5zaXZlbHkgb3VnaHQgdG8gcmVwb3J0IHRoYXQgQiB3YXMgY3JlYXRlZAorICAgYnkgY29weWluZyBBIGFuZCBBIHdhcyBtb2RpZmllZCwgd2hpY2ggaXMgd2hhdCAiZ2l0IGRpZmYgLUMiCisgICByZXBvcnRzLCBidXQgaXQgaW5zdGVhZCBzYWlkIEEgd2FzIHJlbmFtZWQgdG8gQiBhbmQgQSB3YXMgZWRpdGVkCisgICBoZWF2aWx5IGluIHBsYWNlLiAgVGhpcyB3YXMgbm90IGp1c3QgaW5jb2hlcmVudCBidXQgYWxzbyBmYWlsZWQgdG8KKyAgIGFwcGx5IHdpdGggImdpdCBhcHBseSIuICBUaGUgcmVwb3J0IGhhcyBiZWVuIGNvcnJlY3RlZCB0byBtYXRjaCB3aGF0CisgICAiZ2l0IGRpZmYgLUMiIHByb2R1Y2VzIGZvciB0aGlzIGNhc2UuCisgICAobWVyZ2UgNjkzNmI1OCBqYy9kaWZmLWItbSBsYXRlciB0byBtYWludCkuCisKKyAqIEluIGZpbGVzIHdlIHByZS1wb3B1bGF0ZSBmb3IgdGhlIHVzZXIgdG8gZWRpdCB3aXRoIGNvbW1lbnRlZCBoaW50cywKKyAgIGEgbGluZSBvZiBoaW50IHRoYXQgaXMgaW5kZW50ZWQgd2l0aCBhIHRhYiB1c2VkIHRvIHNob3cgYXMgJyMnIChvcgorICAgYW55IGNvbW1lbnQgY2hhciksICcgJyAoc3BhY2UpLCBhbmQgdGhlbiB0aGUgaGludCB0ZXh0IHRoYXQgYmVnYW4KKyAgIHdpdGggdGhlIHRhYiwgd2hpY2ggc29tZSBlZGl0b3JzIGZsYWcgYXMgYW4gaW5kZW50YXRpb24gZXJyb3IgKHRhYgorICAgZm9sbG93aW5nIHNwYWNlKS4gIFdlIG5vdyBvbWl0IHRoZSBzcGFjZSBhZnRlciB0aGUgY29tbWVudCBjaGFyIGluCisgICBzdWNoIGEgY2FzZS4KKyAgIChtZXJnZSBkNTVhZWI3IGpjL3N0cmJ1Zi1hZGQtbGluZXMtYXZvaWQtc3AtaHQtc2VxdWVuY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxzLXRyZWUiIGRvZXMgbm90IHN1cHBvcnQgcGF0aCBzZWxlY3Rpb24gYmFzZWQgb24gbmVnYXRpdmUKKyAgIHBhdGhzcGVjcywgYnV0IGRpZCBub3QgZXJyb3Igb3V0IHdoZW4gbmVnYXRpdmUgcGF0aHNwZWNzIGFyZSBnaXZlbi4KKyAgIChtZXJnZSBmMWY2MjI0IG5kL2xzLXRyZWUtcGF0aHNwZWMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZnVuY3Rpb24gc29tZXRpbWVzIHJldHVybmVkIGEgbm9uLWZyZWVhYmxlIG1lbW9yeSBhbmQgc29tZQorICAgb3RoZXIgdGltZXMgcmV0dXJuZWQgYSBwaWVjZSBvZiBtZW1vcnkgdGhhdCBtdXN0IGJlIGZyZWVkLCBsZWFkaW5nCisgICB0byBpbmV2aXRhYmxlIGxlYWtzLgorICAgKG1lcmdlIDU5MzYyZTUgamMvZXhlYy1jbWQtc3lzdGVtLXBhdGgtbGVhay1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byBhYmJyZXZpYXRlIGFuIG9iamVjdCBuYW1lIHRvIGl0cyBzaG9ydCB1bmlxdWUgcHJlZml4CisgICBoYXMgYmVlbiBvcHRpbWl6ZWQgd2hlbiBubyBhYmJyZXZpYXRpb24gd2FzIHJlcXVlc3RlZC4KKyAgIChtZXJnZSA2MWU3MDRlIG1oL2ZpbmQtdW5pcS1hYmJyZXYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFkZCAtLWlnbm9yZS1lcnJvcnMgLi4uIiBkaWQgbm90IGlnbm9yZSBhbiBlcnJvciB0bworICAgZ2l2ZSBhIGZpbGUgdGhhdCBkaWQgbm90IGV4aXN0LgorICAgKG1lcmdlIDFkMzFlNWEgbWcvYWRkLWlnbm9yZS1lcnJvcnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0ICR0cmVlaXNoICRwYXRoIiwgd2hlbiAkcGF0aCBpbiB0aGUgaW5kZXggYW5kIHRoZQorICAgd29ya2luZyB0cmVlIGFscmVhZHkgbWF0Y2hlZCB3aGF0IGlzIGluICR0cmVlaXNoIGF0IHRoZSAkcGF0aCwKKyAgIHN0aWxsIG92ZXJ3cm90ZSB0aGUgJHBhdGggdW5uZWNlc3NhcmlseS4KKyAgIChtZXJnZSBjNTMyNmJkIGprL2NoZWNrb3V0LWZyb20tdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIiBkaWQgbm90IHBhcnNlIGl0cyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisgICBjYXJlZnVsbHkuCisgICAobWVyZ2UgY2IzNTcyMiBqay9jb2xvcnMtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogb3BlbigpIGVtdWxhdGVkIG9uIFdpbmRvd3MgcGxhdGZvcm1zIGRpZCBub3QgZ2l2ZSBFSVNESVIgdXBvbgorICAgYW4gYXR0ZW1wdCB0byBvcGVuIGEgZGlyZWN0b3J5IGZvciB3cml0aW5nLgorICAgKG1lcmdlIGJhNmZhZDAganMvd2luZG93cy1vcGVuLWVpc2Rpci1lcnJvciBsYXRlciB0byBtYWludCkuCisKKyAqIEEgZmV3IGNvZGUgcGF0aHMgdXNlZCBhYnMoKSB3aGVuIHRoZXkgc2hvdWxkIGhhdmUgdXNlZCBsYWJzKCkgb24KKyAgIGxvbmcgaW50ZWdlcnMuCisgICAobWVyZ2UgODM5MTViYSBycy9tYWludC1jb25maWctdXNlLWxhYnMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDMxYThhYTEgcnMvcmVjZWl2ZS1wYWNrLXVzZS1sYWJzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdHdlYiIgdXNlZCB0byBkZXBlbmQgb24gYSBiZWhhdmlvdXIgcmVjZW50IENHSS5wbSBkZXByZWNhdGVkLgorICAgKG1lcmdlIDEzZGJmNDYgamsvZ2l0d2ViLXdpdGgtbmV3ZXItY2dpLW11bHRpLXBhcmFtIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBpbml0IiAoaGVuY2UgImdpdCBjbG9uZSIpIGluaXRpYWxpemVkIHRoZSBwZXItcmVwb3NpdG9yeQorICAgY29uZmlndXJhdGlvbiBmaWxlIC5naXQvY29uZmlnIHdpdGggeC1iaXQgYnkgbWlzdGFrZS4KKyAgIChtZXJnZSAxZjMyZWNmIG1oL2NvbmZpZy1mbGlwLXhiaXQtYmFjay1hZnRlci1jaGVja2luZyBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCB1cGRhdGUgaW4gR2l0IDIuMiBzdGFydGVkIGNyZWF0aW5nIG9iamVjdHMvaW5mby9wYWNrcyBhbmQKKyAgIGluZm8vcmVmcyBmaWxlcyB3aXRoIHBlcm1pc3Npb24gYml0cyB0aWdodGVyIHRoYW4gdXNlcidzIHVtYXNrLgorICAgKG1lcmdlIGQ5MTE3NWIgamsvcHJ1bmUtcGFja2VkLXNlcnZlci1pbmZvIGxhdGVyIHRvIG1haW50KS4KKworICogR2l0IDIuMCB3YXMgc3VwcG9zZWQgdG8gbWFrZSB0aGUgInNpbXBsZSIgbW9kZSBmb3IgdGhlIGRlZmF1bHQgb2YKKyAgICJnaXQgcHVzaCIsIGJ1dCBpdCBkaWRuJ3QuCisgICAobWVyZ2UgMDBhNmZhMCBqay9wdXNoLXNpbXBsZSBsYXRlciB0byBtYWludCkuCisKKyAqICJFdmVyeWRheSIgZG9jdW1lbnQgaGFkIGEgYnJva2VuIGxpbmsuCisgICAobWVyZ2UgMzY2YzhkNCBwby9ldmVyeWRheS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGZldyB0ZXN0IGZpeGVzLgorICAgKG1lcmdlIDg4MGVmNTggamsvbm8tcGVybC10ZXN0cyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgZGlkIG5vdCBib3RoZXIgZml4aW5nIHBlcmwgYW5kIHB5dGhvbiBzY3JpcHRzCisgICB3aGVuIE5PX1BFUkwgYW5kIE5PX1BZVEhPTiBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gY2hhbmdlZC4KKyAgIChtZXJnZSBjYTIwNTFkIGprL3JlYnVpbGQtcGVybC1zY3JpcHRzLXdpdGgtbm8tcGVybC1zZXRpbmctY2hhbmdlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHVzYWdlIHN0cmluZyBvZiAiZ2l0IGxvZyIgY29tbWFuZCB3YXMgbWFya2VkIGluY29ycmVjdGx5IGZvcgorICAgbDEwbi4KKyAgIChtZXJnZSBlNjZkYzBjIGttL2xvZy11c2FnZS1zdHJpbmctaTE4biBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBtaXNoYW5kbGVkIC0tZm9ybWF0PSIlKHVwc3RyZWFtOnRyYWNrKSIgd2hlbiBhCisgICBicmFuY2ggaXMgbWFya2VkIHRvIGhhdmUgZm9ya2VkIGZyb20gYSBub24tZXhpc3RpbmcgYnJhbmNoLgorICAgKG1lcmdlIGI2MTYwZDkgcmMvZm9yLWVhY2gtcmVmLXRyYWNraW5nIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y5NjE4NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjEudHh0CkBAIC0wLDAgKzEsNTIgQEAKK0dpdCB2Mi4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMKKy0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGludGVyYWN0aXZlICJzaG93IGEgbGlzdCBhbmQgbGV0IHRoZSB1c2VyIGNob29zZSBmcm9tIGl0IgorICAgaW50ZXJmYWNlICJhZGQgLWkiIHVzZWQgc2hvd2VkIGFuZCBwcm9tcHRlZCB0byB0aGUgdXNlciBldmVuIHdoZW4KKyAgIHRoZSBjYW5kaWRhdGUgbGlzdCB3YXMgZW1wdHksIGFnYWluc3Qgd2hpY2ggdGhlIG9ubHkgImNob2ljZSIgdGhlCisgICB1c2VyIGNvdWxkIGhhdmUgbWFkZSB3YXMgdG8gY2hvb3NlIG5vdGhpbmcuCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgdXNlZCB0byB1bmRlci1hbGxvY2F0ZSB0aGUgbWVtb3J5CisgICB3aGVuIHRoZSBmaXggcmVzdWx0ZWQgaW4gYSBsb25nZXIgdGV4dCB0aGFuIHRoZSBvcmlnaW5hbCBwYXRjaC4KKworICogImdpdCBsb2cgLS1oZWxwIiB1c2VkIHRvIHNob3cgcmV2LWxpc3Qgb3B0aW9ucyB0aGF0IGFyZSBpcnJlbGV2YW50CisgICB0byB0aGUgImxvZyIgY29tbWFuZC4KKworICogVGhlIGVycm9yIG1lc3NhZ2UgZnJvbSAiZ2l0IGNvbW1pdCIsIHdoZW4gYSBub24tZXhpc3RpbmcgYXV0aG9yCisgICBuYW1lIHdhcyBnaXZlbiBhcyB2YWx1ZSB0byB0aGUgIi0tYXV0aG9yPSIgcGFyYW1ldGVyLCBoYXMgYmVlbgorICAgcmV3b3JkZWQgdG8gYXZvaWQgbWlzdW5kZXJzdGFuZGluZy4KKworICogQSBicm9rZW4gcGFjayAuaWR4IGZpbGUgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IHByZXZlbnRlZCB0aGUKKyAgIGR1bWIgaHR0cCB0cmFuc3BvcnQgZnJvbSBmZXRjaGluZyBhIGdvb2QgY29weSBvZiBpdCBmcm9tIHRoZSBvdGhlcgorICAgc2lkZS4KKworICogVGhlIGRvY3VtZW50YXRpb24gaW5jb3JyZWN0bHkgc2FpZCB0aGF0IEMob3B5KSBhbmQgUihlbmFtZSkgYXJlIHRoZQorICAgb25seSBvbmVzIHRoYXQgY2FuIGJlIGZvbGxvd2VkIGJ5IHRoZSBzY29yZSBudW1iZXIgaW4gdGhlIG91dHB1dCBpbgorICAgdGhlIC0tcmF3IGZvcm1hdC4KKworICogRml4IGEgbWlzc3BlbGxlZCBjb25kaXRpb25hbCB0aGF0IGlzIGFsd2F5cyB0cnVlLgorCisgKiBDb2RlIHRvIHJlYWQgYnJhbmNoIG5hbWUgZnJvbSB2YXJpb3VzIGZpbGVzIGluIC5naXQvIGRpcmVjdG9yeQorICAgd291bGQgaGF2ZSBtaXNiZWhhdmVkIGlmIHRoZSBjb2RlIHRvIHdyaXRlIHRoZW0gbGVmdCBhbiBlbXB0eSBmaWxlLgorCisgKiBUaGUgImdpdCBwdXNoIiBkb2N1bWVudGF0aW9uIG1hZGUgdGhlICItLXJlcG89PHRoZXJlPiIgb3B0aW9uCisgICBlYXNpbHkgbWlzdW5kZXJzdG9vZC4KKworICogQWZ0ZXIgYXR0ZW1wdGluZyBhbmQgZmFpbGluZyBhIHBhc3N3b3JkLWxlc3MgYXV0aGVudGljYXRpb24KKyAgIChlLmcuIGtlcmJlcm9zKSwgbGliY1VSTCByZWZ1c2VzIHRvIGZhbGwgYmFjayB0byBwYXNzd29yZCBiYXNlZAorICAgQmFzaWMgYXV0aGVudGljYXRpb24gd2l0aG91dCBhIGJpdCBvZiBoZWxwL2VuY291cmFnZW1lbnQuCisKKyAqIFNldHRpbmcgZGlmZi5zdWJtb2R1bGUgdG8gJ2xvZycgbWFkZSAiZ2l0IGZvcm1hdC1wYXRjaCIgcHJvZHVjZQorICAgYnJva2VuIHBhdGNoZXMuCisKKyAqICJnaXQgcmVyZXJlIiAoaW52b2tlZCBpbnRlcm5hbGx5IGZyb20gbWFueSBtZXJneSBvcGVyYXRpb25zKSBkaWQKKyAgIG5vdCBjb3JyZWN0bHkgc2lnbmFsIGVycm9ycyB3aGVuIHRvbGQgdG8gdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUKKyAgIGZpbGVzIGFuZCBmYWlsZWQgdG8gZG8gc28gZm9yIHdoYXRldmVyIHJlYXNvbi4KKworICogImdpdCBibGFtZSBIRUFEIC0tIG1pc3NpbmciIGZhaWxlZCB0byBjb3JyZWN0bHkgc2F5ICJIRUFEIiB3aGVuIGl0CisgICB0cmllZCB0byBzYXkgIk5vIHN1Y2ggcGF0aCAnbWlzc2luZycgaW4gSEVBRCIuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4xMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjMmQyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjEwLnR4dApAQCAtMCwwICsxLDE4IEBACitHaXQgdjIuMy4xMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuOQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIHhkaWZmIGNvZGUgd2UgdXNlIHRvIGdlbmVyYXRlIGRpZmZzIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKKyAgIGV4dHJlbWVseSBsYXJnZSBmaWxlcy4gIEl0IHVzZXMgImludCIgaW4gbWFueSBwbGFjZXMsIHdoaWNoIGNhbgorICAgb3ZlcmZsb3cgaWYgd2UgaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIGxpbmVzIG9yIGV2ZW4gYnl0ZXMgaW4KKyAgIG91ciBpbnB1dCBmaWxlcywgZm9yIGV4YW1wbGUuICBDYXAgdGhlIGlucHV0IHNpemUgdG8gc29tZXdoZXJlCisgICBhcm91bmQgMUdCIGZvciBub3cuCisKKyAqIFNvbWUgcHJvdG9jb2xzIChsaWtlIGdpdC1yZW1vdGUtZXh0KSBjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZQorICAgZm91bmQgaW4gdGhlIFVSTC4gIFRoZSBVUkxzIHRoYXQgc3VibW9kdWxlcyB1c2UgbWF5IGNvbWUgZnJvbQorICAgYXJiaXRyYXJ5IHNvdXJjZXMgKGUuZy4sIC5naXRtb2R1bGVzIGZpbGVzIGluIGEgcmVtb3RlCisgICByZXBvc2l0b3J5KSwgYW5kIGNhbiBodXJ0IHRob3NlIHdobyBibGluZGx5IGVuYWJsZSByZWN1cnNpdmUKKyAgIGZldGNoLiAgUmVzdHJpY3QgdGhlIGFsbG93ZWQgcHJvdG9jb2xzIHRvIHdlbGwga25vd24gYW5kIHNhZmUKKyAgIG9uZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNDYyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4yLnR4dApAQCAtMCwwICsxLDc5IEBACitHaXQgdjIuMy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4zLjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAidXBkYXRlLWluZGV4IC0tcmVmcmVzaCIgdXNlZCB0byBsZWFrIHdoZW4gYW4gZW50cnkgY2Fubm90IGJlCisgICByZWZyZXNoZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4KKworICogImdpdCBmYXN0LWltcG9ydCIgdXNlZCB0byBjcmFzaCB3aGVuIGl0IGNvdWxkIG5vdCBjbG9zZSBhbmQKKyAgIGNvbmNsdWRlIHRoZSByZXN1bHRpbmcgcGFja2ZpbGUgY2xlYW5seS4KKworICogImdpdCBibGFtZSIgZGllZCwgdHJ5aW5nIHRvIGZyZWUgYW4gdW5pbml0aWFsaXplZCBwaWVjZSBvZiBtZW1vcnkuCisKKyAqICJnaXQgbWVyZ2UtZmlsZSIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSBpbiBhIHN1YmRpcmVjdG9yeS4KKworICogImdpdCBzdWJtb2R1bGUgYWRkIiBmYWlsZWQgdG8gc3F1YXNoICJwYXRoL3RvLy4vLi9zdWJtb2R1bGUiIHRvCisgICAicGF0aC90by9zdWJtb2R1bGUiLgorCisgKiBJbiB2Mi4yLjAsIHdlIGJyb2tlICJnaXQgcHJ1bmUiIHRoYXQgcnVucyBpbiBhIHJlcG9zaXRvcnkgdGhhdAorICAgYm9ycm93cyBmcm9tIGFuIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUuCisKKyAqIENlcnRhaW4gb2xkZXIgdmludGFnZXMgb2YgY1VSTCBnaXZlIGlycmVndWxhciBvdXRwdXQgZnJvbQorICAgImN1cmwtY29uZmlnIC0tdmVybnVtIiwgd2hpY2ggY29uZnVzZWQgb3VyIGJ1aWxkIHN5c3RlbS4KKworICogQW4gZWFybGllciB3b3JrYXJvdW5kIHRvIHNxdWVsY2ggdW5oZWxwZnVsIGRlcHJlY2F0aW9uIHdhcm5pbmdzCisgICBmcm9tIHRoZSBjb21waWxlciBvbiBNYWMgT1NYIHVubmVjZXNzYXJpbHkgc2V0IG1pbmltdW0gcmVxdWlyZWQKKyAgIHZlcnNpb24gb2YgdGhlIE9TLCB3aGljaCB0aGUgdXNlciBtaWdodCB3YW50IHRvIHJhaXNlIChvciBsb3dlcikKKyAgIGZvciBvdGhlciByZWFzb25zLgorCisgKiBMb25nc3RhbmRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1pbmcgcnVsZXMgaGFzIGJlZW4gYWRkZWQgdG8KKyAgIHRoZSBkb2N1bWVudGF0aW9uLgorCisgKiBUaGUgY3JlZGVudGlhbCBoZWxwZXIgZm9yIFdpbmRvd3MgKGluIGNvbnRyaWIvKSB1c2VkIHRvIG1pc2hhbmRsZQorICAgYSB1c2VyIG5hbWUgd2l0aCBhbiBhdC1zaWduIGluIGl0LgorCisgKiBPbGRlciBHbnVQRyBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBjb3JyZWN0bHkgaW1wb3J0IHRoZSBrZXlyaW5nCisgICBtYXRlcmlhbCB3ZSBwcmVwYXJlIGZvciB0aGUgdGVzdHMgdG8gdXNlLgorCisgKiBDbGFyaWZ5IGluIHRoZSBkb2N1bWVudGF0aW9uIHRoYXQgInJlbW90ZS48bmljaz4ucHVzaFVSTCIgYW5kCisgICAicmVtb3RlLjxuaWNrPi5VUkwiIGFyZSB0aGVyZSB0byBuYW1lIHRoZSBzYW1lIHJlcG9zaXRvcnkgYWNjZXNzZWQKKyAgIHZpYSBkaWZmZXJlbnQgdHJhbnNwb3J0cywgbm90IHR3byBzZXBhcmF0ZSByZXBvc2l0b3JpZXMuCisKKyAqIFRoZSBwYWNrIGJpdG1hcCBzdXBwb3J0IGRpZCBub3QgYnVpbGQgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBHQ0MuCisKKyAqIFJlYWRpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgYmxvYiBvYmplY3QsIHdoZW4gaXQgZW5kcyB3aXRoIGEgbG9uZQorICAgQ1IsIHVzZSB0byBjb25mdXNlIHRoZSBjb25maWd1cmF0aW9uIHBhcnNlci4KKworICogV2UgZGlkbid0IGZvcm1hdCBhbiBpbnRlZ2VyIHRoYXQgd291bGRuJ3QgZml0IGluICJpbnQiIGJ1dCBpbgorICAgInVpbnRtYXhfdCIgY29ycmVjdGx5LgorCisgKiAiZ2l0IHB1c2ggLS1zaWduZWQiIGdhdmUgYW4gaW5jb3JyZWN0bHkgd29yZGVkIGVycm9yIG1lc3NhZ2Ugd2hlbgorICAgdGhlIG90aGVyIHNpZGUgZGlkIG5vdCBzdXBwb3J0IHRoZSBjYXBhYmlsaXR5LgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIGEgcmVtb3RlLWhlbHBlciB0aGF0IGNhbm5vdCByZXNwb25kIHRvICJsaXN0IgorICAgY29tbWFuZCBjb3VsZCBub3QgZmV0Y2ggZnJvbSBhIHN5bWJvbGljIHJlZmVyZW5jZSBlLmcuIEhFQUQuCisKKyAqIFRoZSBpbnNuIHNoZWV0ICJnaXQgcmViYXNlIC1pIiBjcmVhdGVzIGRpZCBub3QgZnVsbHkgaG9ub3IKKyAgIGNvcmUuYWJicmV2IHNldHRpbmdzLgorCisgKiBUaGUgdGVzdHMgdGhhdCB3YW50ZWQgdG8gc2VlIHRoYXQgZmlsZSBiZWNvbWVzIHVucmVhZGFibGUgYWZ0ZXIKKyAgIHJ1bm5pbmcgImNobW9kIGEtciBmaWxlIiwgYW5kIHRoZSB0ZXN0cyB0aGF0IHdhbnRlZCB0byBtYWtlIHN1cmUgaXQKKyAgIGlzIG5vdCBydW4gYXMgcm9vdCwgd2UgdXNlZCAiY2FuIHdlIHdyaXRlIGludG8gdGhlIC8gZGlyZWN0b3J5PyIgYXMKKyAgIGEgY2hlYXAgc3Vic3RpdHV0ZSwgYnV0IG9uIHNvbWUgcGxhdGZvcm1zIHRoYXQgaXMgbm90IGEgZ29vZAorICAgaGV1cmlzdGljcy4gIFRoZSB0ZXN0cyBhbmQgdGhlaXIgcHJlcmVxdWlzaXRlcyBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgY2hlY2sgd2hhdCB0aGV5IHJlYWxseSByZXF1aXJlLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnbWFpbGluZm8uc2Npc3NvcnMnIHdhcyBoYXJkIHRvCisgICBkaXNjb3ZlciBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogQ29ycmVjdCBhIGJyZWFrYWdlIHRvIGdpdC1zdm4gYXJvdW5kIHYyLjIgZXJhIHRoYXQgdHJpZ2dlcnMKKyAgIHByZW1hdHVyZSBjbG9zaW5nIG9mIEZpbGVIYW5kbGUuCisKKyAqIEV2ZW4gdGhvdWdoIHdlIG9mZmljaWFsbHkgaGF2ZW4ndCBkcm9wcGVkIFBlcmwgNS44IHN1cHBvcnQsIHRoZQorICAgR2V0b3B0OjpMb25nIHBhY2thZ2UgdGhhdCBjYW1lIHdpdGggaXQgZG9lcyBub3Qgc3VwcG9ydCAiLS1uby0iCisgICBwcmVmaXggdG8gbmVnYXRlIGEgYm9vbGVhbiBvcHRpb247IG1hbnVhbGx5IGFkZCBzdXBwb3J0IHRvIGhlbHAKKyAgIHBlb3BsZSB3aXRoIG9sZGVyIEdldG9wdDo6TG9uZyBwYWNrYWdlLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTBkYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMy50eHQKQEAgLTAsMCArMSwzOSBAQAorR2l0IHYyLjMuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBjb3JydXB0IGlucHV0IHRvICJnaXQgZGlmZiAtTSIgdXNlZCBjYXVzZSB1cyB0byBzZWdmYXVsdC4KKworICogVGhlIGJvcnJvd2VkIGNvZGUgaW4ga3dzZXQgQVBJIGRpZCBub3QgZm9sbG93IG91ciB1c3VhbCBjb252ZW50aW9uCisgICB0byB1c2UgInVuc2lnbmVkIGNoYXIiIHRvIHN0b3JlIHZhbHVlcyB0aGF0IHJhbmdlIGZyb20gMC0yNTUuCisKKyAqIERlc2NyaXB0aW9uIGdpdmVuIGJ5ICJncmVwIC1oIiBmb3IgaXRzIC0tZXhjbHVkZS1zdGFuZGFyZCBvcHRpb24KKyAgIHdhcyBwaHJhc2VkIHBvb3JseS4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgImdpdCByZW1vdGUgYWRkIiBtZW50aW9uZWQgIi0tdGFncyIgYW5kCisgICAiLS1uby10YWdzIiBhbmQgaXQgd2FzIG5vdCBjbGVhciB0aGF0IGZldGNoIGZyb20gdGhlIHJlbW90ZSBpbgorICAgdGhlIGZ1dHVyZSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiBuZWl0aGVyIGlzIGdpdmVuCisgICB0byBvdmVycmlkZSBpdC4KKworICogImdpdCBkaWZmIC0tc2hvcnRzdGF0IC0tZGlyc3RhdD1jaGFuZ2VzIiBzaG93ZWQgYSBkaXJzdGF0IGJhc2VkIG9uCisgICBsaW5lcyB0aGF0IHdhcyBuZXZlciBhc2tlZCBieSB0aGUgZW5kIHVzZXIgaW4gYWRkaXRpb24gdG8gdGhlCisgICBkaXJzdGF0IHRoYXQgdGhlIHVzZXIgYXNrZWQgZm9yLgorCisgKiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGFuZCB0aGUKKyAgIHN1Ym1vZHVsZS4qLnVwZGF0ZSBjb25maWd1cmF0aW9uIHdhcyBub3QgY2xlYXJseSBkb2N1bWVudGVkLgorCisgKiAiZ2l0IGFwcGx5IiB3YXMgbm90IHZlcnkgY2FyZWZ1bCBhYm91dCByZWFkaW5nIGZyb20sIHJlbW92aW5nLAorICAgdXBkYXRpbmcgYW5kIGNyZWF0aW5nIHBhdGhzIG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSAodW5kZXIKKyAgIC0taW5kZXgvLS1jYWNoZWQpIG9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAod2hlbiB1c2VkIGFzIGEKKyAgIHJlcGxhY2VtZW50IGZvciBHTlUgcGF0Y2gpLgorCisgKiAiZ2l0IGRhZW1vbiIgbG9va2VkIHVwIHRoZSBob3N0bmFtZSBldmVuIHdoZW4gIiVDSCIgYW5kICIlSVAiCisgICBpbnRlcnBvbGF0aW9ucyBhcmUgbm90IHJlcXVlc3RlZCwgd2hpY2ggd2FzIHVubmVjZXNzYXJ5LgorCisgKiBUaGUgImludGVycG9sYXRlZC1wYXRoIiBvcHRpb24gb2YgImdpdCBkYWVtb24iIGluc2VydGVkIGFueSBzdHJpbmcKKyAgIGNsaWVudCBkZWNsYXJlZCBvbiB0aGUgImhvc3Q9IiBjYXBhYmlsaXR5IHJlcXVlc3Qgd2l0aG91dCBjaGVja2luZy4KKyAgIFNhbml0aXplIGFuZCBsaW1pdCAlSCBhbmQgJUNIIHRvIGEgc2FuZXIgYW5kIGEgdmFsaWQgRE5TIG5hbWUuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NGM3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy40LnR4dApAQCAtMCwwICsxLDMyIEBACitHaXQgdjIuMy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4zLjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgJ2NvbG9yLnN0YXR1cy51bm1lcmdlZCcgY29uZmlndXJhdGlvbiB3YXMgbm90IGRlc2NyaWJlZC4KKworICogImdpdCBsb2cgLS1kZWNvcmF0ZSIgZGlkIG5vdCByZXNldCBjb2xvcnMgY29ycmVjdGx5IGFyb3VuZCB0aGUKKyAgIGJyYW5jaCBuYW1lcy4KKworICogImdpdCAtQyAnJyBzdWJjbWQiIHJlZnVzZWQgdG8gd29yayBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHVubGlrZQorICAgImNkICcnIiB3aGljaCBzaWxlbnRseSBiZWhhdmVzIGFzIGEgbm8tb3AuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgdGFsayB3aXRoIGFuIElNQVAgc2VydmVyIHZpYQorICAgbGliY1VSTDsgYmVjYXVzZSB0aGVyZSBpcyBubyBvdGhlciBvcHRpb24gd2hlbiBHaXQgaXMgYnVpbHQgd2l0aAorICAgTk9fT1BFTlNTTCBvcHRpb24sIHVzZSB0aGF0IGNvZGVwYXRoIGJ5IGRlZmF1bHQgdW5kZXIgc3VjaAorICAgY29uZmlndXJhdGlvbi4KKworICogQSB3b3JrYXJvdW5kIGZvciBjZXJ0YWluIGJ1aWxkIG9mIEdQRyB0aGF0IHRyaWdnZXJlZCBmYWxzZSBicmVha2FnZQorICAgaW4gYSB0ZXN0IGhhcyBiZWVuIGFkZGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgcmVjZW50bHkgc3RhcnRlZCB0byBpbmNsdWRlIHRoZSBudW1iZXIgb2YKKyAgIGNvbW1pdHMgaW4gdGhlIGluc24gc2hlZXQgdG8gYmUgcHJvY2Vzc2VkLCBidXQgb24gYSBwbGF0Zm9ybQorICAgdGhhdCBwcmVwZW5kcyBsZWFkaW5nIHdoaXRlc3BhY2VzIHRvICJ3YyAtbCIgb3V0cHV0LCB0aGUgbnVtYmVycworICAgYXJlIHNob3duIHdpdGggZXh0cmEgd2hpdGVzcGFjZXMgdGhhdCBhcmVuJ3QgbmVjZXNzYXJ5LgorCisgKiBXZSBkaWQgbm90IHBhcnNlIHVzZXJuYW1lIGZvbGxvd2VkIGJ5IGxpdGVyYWwgSVB2NiBhZGRyZXNzIGluIFNTSAorICAgdHJhbnNwb3J0IFVSTHMsIGUuZy4gc3NoOi8vdXNlckBbMjAwMTpkYjg6OjFdOjIyL3JlcG8uZ2l0CisgICBjb3JyZWN0bHkuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMzA5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy41LnR4dApAQCAtMCwwICsxLDQ0IEBACitHaXQgdjIuMy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4zLjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgcHJvbXB0IHNjcmlwdCAoaW4gY29udHJpYi8pIGRpZCBub3Qgc2hvdyB0aGUgdW50cmFja2VkIHNpZ24KKyAgIHdoZW4gd29ya2luZyBpbiBhIHN1YmRpcmVjdG9yeSB3aXRob3V0IGFueSB1bnRyYWNrZWQgZmlsZXMuCisKKyAqIEV2ZW4gdGhvdWdoICJnaXQgZ3JlcCAtLXF1aWV0IiBpcyBydW4gbWVyZWx5IHRvIGFzayBmb3IgdGhlIGV4aXQKKyAgIHN0YXR1cywgd2Ugc3Bhd25lZCB0aGUgcGFnZXIgcmVnYXJkbGVzcy4gIFN0b3AgZG9pbmcgdGhhdC4KKworICogUmVjb21tZW5kIGZvcm1hdC1wYXRjaCBhbmQgc2VuZC1lbWFpbCBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gc3VibWl0CisgICBwYXRjaGVzIHRvIHRoaXMgcHJvamVjdC4KKworICogQW4gZmFpbHVyZSBlYXJseSBpbiB0aGUgImdpdCBjbG9uZSIgdGhhdCBzdGFydGVkIGNyZWF0aW5nIHRoZQorICAgd29ya2luZyB0cmVlIGFuZCByZXBvc2l0b3J5IGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gc29tZSBkaXJlY3RvcmllcworICAgYW5kIGZpbGVzIGxlZnQgd2l0aG91dCBnZXR0aW5nIGNsZWFuZWQgdXAuCisKKyAqICJnaXQgZmV0Y2giIHRoYXQgZmV0Y2hlcyBhIGNvbW1pdCB1c2luZyB0aGUgYWxsb3ctdGlwLXNoYTEtaW4td2FudAorICAgZXh0ZW5zaW9uIGNvdWxkIGhhdmUgZmFpbGVkIHRvIGZldGNoIGFsbCB0aGUgcmVxdWVzdGVkIHJlZnMuCisKKyAqIFRoZSBzcGxpdC1pbmRleCBtb2RlIGludHJvZHVjZWQgYXQgdjIuMy4wLXJjMH40MSB3YXMgYnJva2VuIGluIHRoZQorICAgY29kZXBhdGggdG8gcHJvdGVjdCB1cyBhZ2FpbnN0IGEgYnJva2VuIHJlaW1wbGVtZW50YXRpb24gb2YgR2l0CisgICB0aGF0IHdyaXRlcyBhbiBpbnZhbGlkIGluZGV4IHdpdGggZHVwbGljYXRlZCBpbmRleCBlbnRyaWVzLCBldGMuCisKKyAqICJnaXQgcHJ1bmUiIHVzZWQgdG8gbGFyZ2VseSBpZ25vcmUgYnJva2VuIHJlZnMgd2hlbiBkZWNpZGluZyB3aGljaAorICAgb2JqZWN0cyBhcmUgc3RpbGwgYmVpbmcgdXNlZCwgd2hpY2ggY291bGQgc3ByZWFkIGFuIGV4aXN0aW5nIHNtYWxsCisgICBkYW1hZ2UgYW5kIG1ha2UgaXQgYSBsYXJnZXIgb25lLgorCisgKiAiZ2l0IHRhZyAtaCIgdXNlZCB0byBzaG93IHRoZSAiLS1jb2x1bW4iIGFuZCAiLS1zb3J0IiBvcHRpb25zCisgICB0aGF0IGFyZSBhYm91dCBsaXN0aW5nIGluIGEgd3Jvbmcgc2VjdGlvbi4KKworICogVGhlIHRyYW5zZmVyLmhpZGVyZWZzIHN1cHBvcnQgZGlkIG5vdCBxdWl0ZSB3b3JrIGZvciBzbWFydC1odHRwCisgICB0cmFuc3BvcnQuCisKKyAqIFRoZSBjb2RlIHRoYXQgcmVhZHMgZnJvbSB0aGUgY3RhZ3MgZmlsZSBpbiB0aGUgY29tcGxldGlvbiBzY3JpcHQKKyAgIChpbiBjb250cmliLykgZGlkIG5vdCBzcGVsbCAke3BhcmFtL3BhdHRlcm4vc3RyaW5nfSBzdWJzdGl0dXRpb24KKyAgIGNvcnJlY3RseSwgd2hpY2ggaGFwcGVuZWQgdG8gd29yayB3aXRoIGJhc2ggYnV0IG5vdCB3aXRoIHpzaC4KKworICogVGhlIGV4cGxhbmF0aW9uIG9uICJyZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMiLCAicHVsbCAtLXJlYmFzZT1wcmVzZXJ2ZSIsCisgICBhbmQgInB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIiBpbiB0aGUgZG9jdW1lbnRhdGlvbiB3YXMgdW5jbGVhci4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyZjc3MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjYudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dpdCB2Mi4zLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJkaWZmLWhpZ2hsaWdodCIgKGluIGNvbnRyaWIvKSB1c2VkIHRvIHNob3cgYnl0ZS1ieS1ieXRlCisgICBkaWZmZXJlbmNlcywgd2hpY2ggbWVhbnQgdGhhdCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgY2FuIGJlIGNob3BwZWQKKyAgIGluIHRoZSBtaWRkbGUuICBJdCBsZWFybmVkIHRvIHBheSBhdHRlbnRpb24gdG8gY2hhcmFjdGVyIGJvdW5kYXJpZXMKKyAgIChhc3N1bWluZyB0aGUgVVRGLTggcGF5bG9hZCkuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzY5MTg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQKQEAgLTAsMCArMSwyMSBAQAorR2l0IHYyLjMuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy42CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZWFybGllciB1cGRhdGUgdG8gdGhlIHBhcnNlciB0aGF0IGRpc3NlY3RzIGEgVVJMIGJyb2tlIGFuCisgICBhZGRyZXNzLCBmb2xsb3dlZCBieSBhIGNvbG9uLCBmb2xsb3dlZCBieSBhbiBlbXB0eSBzdHJpbmcgKGluc3RlYWQKKyAgIG9mIHRoZSBwb3J0IG51bWJlciksIGUuZy4gc3NoOi8vZXhhbXBsZS5jb206L3BhdGgvdG8vcmVwby4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgY29udGFtaW5hdGVkIGdsb2JhbCBuYW1lc3BhY2UKKyAgIGFuZCBjbG9iYmVyZWQgb24gYSBzaGVsbCB2YXJpYWJsZSAkeC4KKworICogVGhlICJnaXQgcHVzaCAtLXNpZ25lZCIgcHJvdG9jb2wgZXh0ZW5zaW9uIGRpZCBub3QgbGltaXQgd2hhdCB0aGUKKyAgICJub25jZSIgdGhhdCBpcyBhIHNlcnZlci1jaG9zZW4gc3RyaW5nIGNhbiBjb250YWluIG9yIGhvdyBsb25nIGl0CisgICBjYW4gYmUsIHdoaWNoIHdhcyB1bm5lY2Vzc2FyaWx5IGxheC4gIExpbWl0IGJvdGggdGhlIGxlbmd0aCBhbmQgdGhlCisgICBhbHBoYWJldCB0byBhIHJlYXNvbmFibHkgc21hbGwgc3BhY2UgdGhhdCBjYW4gc3RpbGwgaGF2ZSBlbm91Z2gKKyAgIGVudHJvcHkuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuOC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy44LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY3MjY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuOC50eHQKQEAgLTAsMCArMSwyMiBAQAorR2l0IHYyLjMuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy43CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHVzdWFsICJnaXQgZGlmZiIgd2hlbiBzZWVpbmcgYSBmaWxlIHR1cm5pbmcgaW50byBhIGRpcmVjdG9yeQorICAgc2hvd2VkIGEgcGF0Y2hzZXQgdG8gcmVtb3ZlIHRoZSBmaWxlIGFuZCBjcmVhdGUgYWxsIGZpbGVzIGluIHRoZQorICAgZGlyZWN0b3J5LCBidXQgImdpdCBkaWZmIC0tbm8taW5kZXgiIHNpbXBseSByZWZ1c2VkIHRvIHdvcmsuICBBbHNvLAorICAgd2hlbiBhc2tlZCB0byBjb21wYXJlIGEgZmlsZSBhbmQgYSBkaXJlY3RvcnksIGltaXRhdGUgUE9TSVggImRpZmYiCisgICBhbmQgY29tcGFyZSB0aGUgZmlsZSB3aXRoIHRoZSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpbiB0aGUKKyAgIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiByZWZ1c2luZyB0byBydW4uCisKKyAqIFRoZSBkZWZhdWx0ICRIT01FLy5naXRjb25maWcgZmlsZSBjcmVhdGVkIHVwb24gImdpdCBjb25maWcgLS1nbG9iYWwiCisgICB0aGF0IGVkaXRzIGl0IGhhZCBpbmNvcnJlY3RseSBzcGVsbGVkIHVzZXIubmFtZSBhbmQgdXNlci5lbWFpbAorICAgZW50cmllcyBpbiBpdC4KKworICogImdpdCBjb21taXQgLS1kYXRlPW5vdyIgb3IgYW55dGhpbmcgdGhhdCByZWxpZXMgb24gYXBwcm94aWRhdGUgbG9zdAorICAgdGhlIGRheWxpZ2h0LXNhdmluZy10aW1lIG9mZnNldC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy45LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmFkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy45LnR4dApAQCAtMCwwICsxLDkgQEAKK0dpdCB2Mi4zLjkgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuOAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlcGF0aHMgdGhhdCB1c2VkIHRvIHVzZSBmaXhlZC1zaXplZCBhcnJheXMgdG8gaG9sZAorICAgcGF0aG5hbWVzIGhhdmUgYmVlbiBjb3JyZWN0ZWQgdG8gdXNlIHN0cmJ1ZiBhbmQgb3RoZXIgbWVjaGFuaXNtcyB0bworICAgYWxsb3cgbG9uZ2VyIHBhdGhuYW1lcyB3aXRob3V0IGZlYXJpbmcgb3ZlcmZsb3dzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGU2NGJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMC50eHQKQEAgLTAsMCArMSw1MTQgQEAKK0dpdCAyLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2FybmluZyhzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVsZWFzZSBoYXMgYSBmZXcgY2hhbmdlcyBpbiB0aGUgdXNlci12aXNpYmxlIG91dHB1dCBmcm9tCitQb3JjZWxhaW4gY29tbWFuZHMuIFRoZXNlIGFyZSBub3QgbWVhbnQgdG8gYmUgcGFyc2VkIGJ5IHNjcmlwdHMsIGJ1dAordXNlcnMgc3RpbGwgbWF5IHdhbnQgdG8gYmUgYXdhcmUgb2YgdGhlIGNoYW5nZXM6CisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZ2l0IGxvZyAtLWRlY29yYXRlIiAoYW5kLCBtb3JlIGdlbmVyYWxseSwgdGhlICIlZCIKKyAgIGZvcm1hdCBzcGVjaWZpZXIgdXNlZCBpbiB0aGUgIi0tZm9ybWF0PTxzdHJpbmc+IiBwYXJhbWV0ZXIgdG8gdGhlCisgICAiZ2l0IGxvZyIgZmFtaWx5IG9mIGNvbW1hbmRzKSBoYXMgY2hhbmdlZC4gSXQgdXNlZCB0byBsaXN0ICJIRUFEIgorICAganVzdCBsaWtlIG90aGVyIGJyYW5jaGVzOyBlLmcuLAorCisgICAgICQgZ2l0IGxvZyAtLWRlY29yYXRlIC0xIG1hc3RlcgorICAgICBjb21taXQgYmRiMGY2Nzg4ZmE1ZTNjYWNjNDMxNWU5ZmYzMThhMjdiMjY3NmZmNCAoSEVBRCwgbWFzdGVyKQorICAgICAuLi4KKworICAgVGhpcyByZWxlYXNlIGNoYW5nZXMgdGhlIG91dHB1dCBzbGlnaHRseSB3aGVuIEhFQUQgcmVmZXJzIHRvIGEKKyAgIGJyYW5jaCB3aG9zZSBuYW1lIGlzIGFsc28gc2hvd24gaW4gdGhlIG91dHB1dC4gVGhlIGFib3ZlIGlzIG5vdworICAgc2hvd24gYXM6CisKKyAgICAgJCBnaXQgbG9nIC0tZGVjb3JhdGUgLTEgbWFzdGVyCisgICAgIGNvbW1pdCBiZGIwZjY3ODhmYTVlM2NhY2M0MzE1ZTlmZjMxOGEyN2IyNjc2ZmY0IChIRUFEIC0+IG1hc3RlcikKKyAgICAgLi4uCisKKyAqIFRoZSBwaHJhc2luZyAiZ2l0IGJyYW5jaCIgdXNlcyB0byBkZXNjcmliZSBhIGRldGFjaGVkIEhFQUQgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gYWdyZWUgd2l0aCB0aGUgcGhyYXNpbmcgdXNlZCBieSAiZ2l0IHN0YXR1cyI6CisKKyAgICAtIFdoZW4gSEVBRCBpcyBhdCB0aGUgc2FtZSBjb21taXQgYXMgd2hlbiBpdCB3YXMgb3JpZ2luYWxseQorICAgICAgZGV0YWNoZWQsIHRoZXkgbm93IGJvdGggc2hvdyAiZGV0YWNoZWQgYXQgPGNvbW1pdCBvYmplY3QgbmFtZT4iLgorCisgICAgLSBXaGVuIEhFQUQgaGFzIG1vdmVkIHNpbmNlIGl0IHdhcyBvcmlnaW5hbGx5IGRldGFjaGVkLCB0aGV5IG5vdworICAgICAgYm90aCBzaG93ICJkZXRhY2hlZCBmcm9tIDxjb21taXQgb2JqZWN0IG5hbWU+Ii4KKworICAgUHJldmlvdXNseSwgImdpdCBicmFuY2giIGFsd2F5cyB1c2VkICJmcm9tIi4KKworCitVcGRhdGVzIHNpbmNlIHYyLjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitQb3J0cworCisgKiBPdXIgZGVmYXVsdCBJL08gc2l6ZSAoOCBNaUIpIGZvciBsYXJnZSBmaWxlcyB3YXMgdG9vIGxhcmdlIGZvciBzb21lCisgICBwbGF0Zm9ybXMgd2l0aCBzbWFsbGVyIFNTSVpFX01BWCwgbGVhZGluZyB0byByZWFkKDIpL3dyaXRlKDIpCisgICBmYWlsdXJlcy4KKworICogV2UgZGlkIG5vdCBjaGVjayB0aGUgY3VybCBsaWJyYXJ5IHZlcnNpb24gYmVmb3JlIHVzaW5nIHRoZQorICAgQ1VSTE9QVF9QUk9YWUFVVEggZmVhdHVyZSwgd2hpY2ggZGlkIG5vdCBleGlzdCBpbiBvbGRlciB2ZXJzaW9ucyBvZgorICAgdGhlIGxpYnJhcnkuCisKKyAqIFdlIG5vdyBkZXRlY3QgbnVtYmVyIG9mIENQVXMgb24gb2xkZXIgQlNELWRlcml2ZWQgc3lzdGVtcy4KKworICogUG9ydGFiaWxpdHkgZml4ZXMgYW5kIHdvcmthcm91bmRzIGZvciBzaGVsbCBzY3JpcHRzIGhhdmUgYmVlbiBhZGRlZAorICAgdG8gaGVscCBCU0QtZGVyaXZlZCBzeXN0ZW1zLgorCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBUaGUgY29tbWFuZCB1c2FnZSBpbmZvIHN0cmluZ3MgZ2l2ZW4gYnkgImdpdCBjbWQgLWgiIGFuZCBpbgorICAgZG9jdW1lbnRhdGlvbiBoYXZlIGJlZW4gdHdlYWtlZCBmb3IgY29uc2lzdGVuY3kuCisKKyAqIFRoZSAic3luYyIgc3ViY29tbWFuZCBvZiAiZ2l0IHA0IiBub3cgYWxsb3dzIHVzZXJzIHRvIGV4Y2x1ZGUKKyAgIHN1YmRpcmVjdG9yaWVzIGxpa2UgaXRzICJjbG9uZSIgc3ViY29tbWFuZCBkb2VzLgorCisgKiAiZ2l0IGxvZyAtLWludmVydC1ncmVwIC0tZ3JlcD1XSVAiIHdpbGwgc2hvdyBvbmx5IGNvbW1pdHMgdGhhdCBkbworICAgbm90IGhhdmUgdGhlIHN0cmluZyAiV0lQIiBpbiB0aGVpciBtZXNzYWdlcy4KKworICogImdpdCBwdXNoIiBoYXMgYmVlbiB0YXVnaHQgYW4gIi0tYXRvbWljIiBvcHRpb24gdGhhdCBtYWtlcyBhIHB1c2gKKyAgIHRoYXQgdXBkYXRlcyBtb3JlIHRoYW4gb25lIHJlZiBhbiAiYWxsLW9yLW5vbmUiIGFmZmFpci4KKworICogRXh0ZW5kaW5nIHRoZSAicHVzaCB0byBkZXBsb3kiIGZlYXR1cmUgdGhhdCB3YXMgYWRkZWQgaW4gMi4zLCB0aGUKKyAgIGJlaGF2aW91ciBvZiAiZ2l0IHB1c2giIHdoZW4gdXBkYXRpbmcgdGhlIGJyYW5jaCB0aGF0IGlzIGNoZWNrZWQKKyAgIG91dCBjYW4gbm93IGJlIHR3ZWFrZWQgYnkgYSAicHVzaC10by1jaGVja291dCIgaG9vay4KKworICogSFRUUC1iYXNlZCB0cmFuc3BvcnRzIG5vdyBzZW5kIEFjY2VwdC1MYW5ndWFnZSB3aGVuIG1ha2luZworICAgcmVxdWVzdHMuIFRoZSBsYW5ndWFnZXMgdG8gYWNjZXB0IGFyZSBpbmZlcnJlZCBmcm9tIGVudmlyb25tZW50CisgICB2YXJpYWJsZXMgb24gdGhlIGNsaWVudCBzaWRlIChMQU5HVUFHRSwgZXRjKS4KKworICogImdpdCBzZW5kLWVtYWlsIiB1c2VkIHRvIGFjY2VwdCBhIG1pc3Rha2VuICJ5IiAob3IgInllcyIpIGFzIGFuCisgICBhbnN3ZXIgdG8gIldoYXQgZW5jb2RpbmcgZG8geW91IHdhbnQgdG8gdXNlIFtVVEYtOF0/IiB3aXRob3V0CisgICBxdWVzdGlvbmluZy4gTm93IGl0IGFza3MgZm9yIGNvbmZpcm1hdGlvbiB3aGVuIHRoZSBhbnN3ZXIgbG9va3MgdG9vCisgICBzaG9ydCB0byBiZSBhIHZhbGlkIGVuY29kaW5nIG5hbWUuCisKKyAqIFdoZW4gImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiBmaXhlZCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUKKyAgIGNvbW1vbiBjb250ZXh0IGxpbmVzLCB0aGUgY29tbWFuZCByZXBvcnRzIHRoYXQgaXQgZGlkIHNvLgorCisgKiAiZ2l0IHN0YXR1cyIgbm93IGFsbG93cyB0aGUgIi12IiBvcHRpb24gdG8gYmUgZ2l2ZW4gdHdpY2UsIGluIHdoaWNoCisgICBjYXNlIGl0IGFsc28gc2hvd3MgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCBhcmUgbm90CisgICBzdGFnZWQgdG8gYmUgY29tbWl0dGVkLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiB1c2VkIHRvIGNsZWFuIHVwIHRoZSBsb2cgbWVzc2FnZSBldmVuIHdoZW4gaXQgaXMKKyAgIG1lcmVseSByZXBsYXlpbmcgYW4gZXhpc3RpbmcgY29tbWl0LiBJdCBub3cgcmVwbGF5cyB0aGUgbWVzc2FnZQorICAgdmVyYmF0aW0gdW5sZXNzIHlvdSBhcmUgZWRpdGluZyB0aGUgbWVzc2FnZSBvZiB0aGUgcmVzdWx0aW5nCisgICBjb21taXQuCisKKyAqICJnaXQgYXJjaGl2ZSIgY2FuIG5vdyBiZSB0b2xkIHRvIHNldCB0aGUgJ3RleHQnIGF0dHJpYnV0ZSBpbiB0aGUKKyAgIHJlc3VsdGluZyB6aXAgYXJjaGl2ZS4KKworICogT3V0cHV0IGZyb20gImdpdCBsb2cgLS1kZWNvcmF0ZSIgbm93IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhCisgICBkZXRhY2hlZCBIRUFEIHZzLiBhIEhFQUQgdGhhdCBwb2ludHMgYXQgYSBicmFuY2guCisKKyAgIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlOyBzZWUgYWJvdmUgZm9yCisgICBtb3JlIGluZm9ybWF0aW9uLgorCisgKiBXaGVuIEhFQUQgd2FzIGRldGFjaGVkIHdoZW4gYXQgY29tbWl0IHh5eiBhbmQgaGFzbid0IGJlZW4gbW92ZWQKKyAgIHNpbmNlIGl0IHdhcyBkZXRhY2hlZCwgImdpdCBzdGF0dXMiIHdvdWxkIHJlcG9ydCAiZGV0YWNoZWQgYXQgeHl6IgorICAgd2hlcmVhcyAiZ2l0IGJyYW5jaCIgd291bGQgcmVwb3J0ICJkZXRhY2hlZCBmcm9tIHh5eiIuIE5vdyB0aGUKKyAgIG91dHB1dCBvZiAiZ2l0IGJyYW5jaCIgYWdyZWVzIHdpdGggdGhhdCBvZiAiZ2l0IHN0YXR1cyIuCisKKyAgIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlOyBzZWUgYWJvdmUgZm9yCisgICBtb3JlIGluZm9ybWF0aW9uLgorCisgKiAiZ2l0IC1DICcnIHN1YmNtZCIgbm93IHdvcmtzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAoYW5hbG9nb3VzbHkKKyAgIHRvICJjZCAnJyIpIHJhdGhlciB0aGFuIGR5aW5nIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4KKyAgIChtZXJnZSA2YTUzNmUyIGtuL2dpdC1jZC10by1lbXB0eSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQKKyAgIHRvIHNwZWNpZnkgdGhhdCwgZm9yIGV4YW1wbGUsIHYxLjAtcHJlMSBjb21lcyBiZWZvcmUgdjEuMC4KKworICogQSBuZXcgInB1c2guZm9sbG93VGFncyIgY29uZmlndXJhdGlvbiB0dXJucyB0aGUgIi0tZm9sbG93LXRhZ3MiCisgICBvcHRpb24gb24gYnkgZGVmYXVsdCBmb3IgdGhlICJnaXQgcHVzaCIgY29tbWFuZC4KKworICogImdpdCBsb2cgLS1ncmFwaCAtLW5vLXdhbGsgQSBCLi4uIiBpcyBhIG5vbnNlbnNpY2FsIGNvbWJpbmF0aW9uIG9mCisgICBvcHRpb25zOiAiLS1uby13YWxrIiByZXF1ZXN0cyBkaXNjcmV0ZSBwb2ludHMgaW4gdGhlIGhpc3RvcnksIHdoaWxlCisgICAiLS1ncmFwaCIgYXNrcyB0byBkcmF3IGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlc2UgZGlzY3JldGUgcG9pbnRzLgorICAgRm9yYmlkIHRoZSB1c2Ugb2YgdGhlc2Ugb3B0aW9ucyB0b2dldGhlci4KKworICogImdpdCByZXYtbGlzdCAtLWJpc2VjdCAtLWZpcnN0LXBhcmVudCIgZG9lcyBub3Qgd29yayAoeWV0KSBhbmQgY2FuCisgICBldmVuIGNhdXNlIFNFR1Y7IGZvcmJpZCBpdC4gImdpdCBsb2cgLS1iaXNlY3QgLS1maXJzdC1wYXJlbnQiIHdvdWxkCisgICBub3QgYmUgdXNlZnVsIHVudGlsICJnaXQgYmlzZWN0IC0tZmlyc3QtcGFyZW50IiBtYXRlcmlhbGl6ZXMsIHNvCisgICBhbHNvIGZvcmJpZCBpdCBmb3Igbm93LgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFNsaWdodGx5IGNoYW5nZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE5fKCkgbWFjcm8gdG8gaGVscCB1cworICAgZGV0ZWN0IG1pc3Rha2VzLgorCisgKiBSZXN0cnVjdHVyZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgInJlZmxvZyBleHBpcmUiIHRvIGZpdCBiZXR0ZXIKKyAgIHdpdGggdGhlIHJlY2VudGx5IHVwZGF0ZWQgcmVmZXJlbmNlIEFQSS4KKworICogVGhlIHRyYW5zcG9ydC1oZWxwZXIgZGlkIG5vdCBwYXNzIHRyYW5zcG9ydCBvcHRpb25zIHN1Y2ggYXMKKyAgIHZlcmJvc2l0eSwgcHJvZ3Jlc3MsIGNsb25pbmcsIGV0Yy4gdG8gaW1wb3J0IGFuZCBleHBvcnQgYmFzZWQKKyAgIGhlbHBlcnMsIGxpa2UgaXQgZGlkIGZvciBmZXRjaCBhbmQgcHVzaCBiYXNlZCBoZWxwZXJzLCByb2JiaW5nIHRoZW0KKyAgIG9mIHRoZSBjaGFuY2UgdG8gaG9ub3IgdGhlIHdpc2ggb2YgdGhlIGVuZC11c2VycyBiZXR0ZXIuCisKKyAqIFRoZSB0ZXN0cyB0aGF0IHdhbnRlZCB0byBzZWUgdGhhdCBhIGZpbGUgYmVjb21lcyB1bnJlYWRhYmxlIGFmdGVyCisgICBydW5uaW5nICJjaG1vZCBhLXIgZmlsZSIsIGFuZCB0aGUgdGVzdHMgdGhhdCB3YW50ZWQgdG8gbWFrZSBzdXJlCisgICB0aGF0IHRoZXkgYXJlIG5vdCBydW4gYXMgcm9vdCwgdXNlZCAiY2FuIHdlIHdyaXRlIGludG8gdGhlIC8KKyAgIGRpcmVjdG9yeT8iIGFzIGEgY2hlYXAgc3Vic3RpdHV0ZS4gQnV0IG9uIHNvbWUgcGxhdGZvcm1zIHRoYXQgaXMKKyAgIG5vdCBhIGdvb2QgaGV1cmlzdGljLiBUaGUgdGVzdHMgYW5kIHRoZWlyIHByZXJlcXVpc2l0ZXMgaGF2ZSBiZWVuCisgICB1cGRhdGVkIHRvIGNoZWNrIHdoYXQgdGhleSByZWFsbHkgcmVxdWlyZS4KKyAgIChtZXJnZSBmNDAwZTUxIGprL3Nhbml0eSBsYXRlciB0byBtYWludCkuCisKKyAqIFZhcmlvdXMgaXNzdWVzIGFyb3VuZCAicmVmbG9nIGV4cGlyZSIsIGUuZy4gdXNpbmcgLS11cGRhdGVyZWYgd2hlbgorICAgZXhwaXJpbmcgYSByZWZsb2cgZm9yIGEgc3ltYm9saWMgcmVmZXJlbmNlLCBoYXZlIGJlZW4gY29ycmVjdGVkCisgICBhbmQvb3IgbWFkZSBzYW5lci4KKworICogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzdHJidWYgQVBJIGhhZCBiZWVuIHNwbGl0IGJldHdlZW4gdGhlIEFQSQorICAgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIGhlYWRlciBmaWxlLiBDb25zb2xpZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBpbgorICAgc3RyYnVmLmguCisKKyAqIFRoZSBlcnJvciBoYW5kbGluZyBmdW5jdGlvbnMgYW5kIGNvbnZlbnRpb25zIGFyZSBub3cgZG9jdW1lbnRlZCBpbgorICAgdGhlIEFQSSBtYW51YWwgKGluIGFwaS1lcnJvci1oYW5kbGluZy50eHQpLgorCisgKiBPcHRpbWl6ZSBnaXRhdHRyaWJ1dGUgbG9vay11cCwgbW9zdGx5IHVzZWZ1bCBpbiAiZ2l0IGdyZXAiIG9uIGEKKyAgIHByb2plY3QgdGhhdCBkb2VzIG5vdCB1c2UgbWFueSBhdHRyaWJ1dGVzLCBieSBhdm9pZGluZyBpdCB3aGVuIHdlCisgICAoc2hvdWxkKSBrbm93IHRoYXQgdGhlIGF0dHJpYnV0ZXMgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBmaXJzdAorICAgcGxhY2UuCisKKyAqIFR5cG9maXggaW4gY29tbWVudHMuCisgICAobWVyZ2UgZWYyOTU2YSBhay9naXQtcG0tdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAuCisgICAobWVyZ2UgMGI4NjhmMCBzYi9oZXgtb2JqZWN0LW5hbWUtaXMtYXQtbW9zdC00MS1ieXRlcy1sb25nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1ZDMwODUxIGRwL3JlbW92ZS1kdXBsaWNhdGVkLWhlYWRlci1pbmNsdXNpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTaW1wbGlmeSB0aGUgcmVmIHRyYW5zYWN0aW9uIEFQSSBmb3IgdmVyaWZ5aW5nIHRoYXQgInRoZSByZWYgc2hvdWxkCisgICBiZSBwb2ludGluZyBhdCB0aGlzIG9iamVjdCIuCisKKyAqIFNpbXBsaWZ5IHRoZSBjb2RlIGluICJnaXQgZGFlbW9uIiB0aGF0IHBhcnNlcyBvdXQgYW5kIGhvbGRzCisgICBob3N0bmFtZXMgdXNlZCBpbiByZXF1ZXN0IGludGVycG9sYXRpb24uCisKKyAqIFJlc3RydWN0dXJlIHRoZSAiZ2l0IHB1c2giIGNvZGVwYXRoIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBuZXcKKyAgIGNvbmZpZ3VyYXRpb24gYml0cy4KKworICogVGhlIHJ1bi1jb21tYW5kIGludGVyZmFjZSBtYWRlIGl0IGVhc3kgdG8gbWFrZSBhIHBpcGUgZm9yIHVzIHRvCisgICByZWFkIGZyb20gYSBwcm9jZXNzLCB3YWl0IGZvciB0aGUgcHJvY2VzcyB0byBmaW5pc2gsIGFuZCB0aGVuCisgICBhdHRlbXB0IHRvIHJlYWQgaXRzIG91dHB1dC4gQnV0IHRoaXMgcGF0dGVybiBjYW4gbGVhZCB0byBkZWFkbG9jay4KKyAgIFNvIGludHJvZHVjZSBhIGhlbHBlciB0byBkbyB0aGlzIGNvcnJlY3RseSAoaS5lLiwgZmlyc3QgcmVhZCwgYW5kCisgICB0aGVuIHdhaXQgdGhlIHByb2Nlc3MgdG8gZmluaXNoKSBhbmQgYWxzbyBhZGQgY29kZSB0byBwcmV2ZW50IHN1Y2gKKyAgIGFidXNlIGluIHRoZSBydW4tY29tbWFuZCBoZWxwZXIuCisKKyAqIFBlb3BsZSBvZnRlbiBmb3JnZXQgdG8gY2hhaW4gdGhlIGNvbW1hbmRzIGluIHRoZWlyIHRlc3QgdG9nZXRoZXIKKyAgIHdpdGggJiYsIGxldHRpbmcgYSBmYWlsdXJlIGZyb20gYW4gZWFybGllciBjb21tYW5kIGluIHRoZSB0ZXN0IGdvCisgICB1bm5vdGljZWQuIFRoZSBuZXcgR0lUX1RFU1RfQ0hBSU5fTElOVCBtZWNoYW5pc20gYWxsb3dzIHlvdSB0bworICAgY2F0Y2ggc3VjaCBhIG1pc3Rha2UgbW9yZSBlYXNpbHkuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuMworLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjMgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogImdpdCBibGFtZSBIRUFEIC0tIG1pc3NpbmciIGZhaWxlZCB0byBjb3JyZWN0bHkgc2F5ICJIRUFEIiB3aGVuIGl0CisgICB0cmllZCB0byBzYXkgIk5vIHN1Y2ggcGF0aCAnbWlzc2luZycgaW4gSEVBRCIuCisgICAobWVyZ2UgYTQ2NDQyZiBqay9ibGFtZS1jb21taXQtbGFiZWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlcmVyZSIgKGludm9rZWQgaW50ZXJuYWxseSBmcm9tIG1hbnkgbWVyZ3kgb3BlcmF0aW9ucykgZGlkCisgICBub3QgY29ycmVjdGx5IHNpZ25hbCBlcnJvcnMgd2hlbiBpdCBhdHRlbXB0ZWQgdG8gdXBkYXRlIHRoZSB3b3JraW5nCisgICB0cmVlIGZpbGVzIGJ1dCBmYWlsZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4KKyAgIChtZXJnZSA4OWVhOTAzIGpuL3JlcmVyZS1mYWlsLW9uLWF1dG8tdXBkYXRlLWZhaWx1cmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTZXR0aW5nIGRpZmYuc3VibW9kdWxlIHRvICdsb2cnIG1hZGUgImdpdCBmb3JtYXQtcGF0Y2giIHByb2R1Y2UKKyAgIGJyb2tlbiBwYXRjaGVzLgorICAgKG1lcmdlIDMzOWRlNTAgZGsvZm9ybWF0LXBhdGNoLWlnbm9yZS1kaWZmLXN1Ym1vZHVsZSBsYXRlciB0byBtYWludCkuCisKKyAqIEFmdGVyIGF0dGVtcHRpbmcgYW5kIGZhaWxpbmcgYSBwYXNzd29yZC1sZXNzIGF1dGhlbnRpY2F0aW9uIChlLmcuLAorICAgS2VyYmVyb3MpLCBsaWJjVVJMIHJlZnVzZXMgdG8gZmFsbCBiYWNrIHRvIHBhc3N3b3JkLWJhc2VkIEJhc2ljCisgICBhdXRoZW50aWNhdGlvbiB3aXRob3V0IGEgYml0IG9mIGhlbHAvZW5jb3VyYWdlbWVudC4KKyAgIChtZXJnZSA0ZGJlNjY0IGJjL2h0dHAtZmFsbGJhY2stdG8tcGFzc3dvcmQtYWZ0ZXIta3JiLWZhaWxzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJnaXQgcHVzaCIgZG9jdW1lbnRhdGlvbiBmb3IgdGhlICItLXJlcG89PHRoZXJlPiIgb3B0aW9uIHdhcworICAgZWFzaWx5IG1pc3VuZGVyc3Rvb2QuCisgICAobWVyZ2UgNTdiOTJhNyBtZy9wdXNoLXJlcG8tb3B0aW9uLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgdG8gcmVhZCBhIGJyYW5jaCBuYW1lIGZyb20gdmFyaW91cyBmaWxlcyBpbiB0aGUgLmdpdC8KKyAgIGRpcmVjdG9yeSB3b3VsZCBoYXZlIG92ZXJydW4gYXJyYXkgbGltaXRzIGlmIGFza2VkIHRvIHJlYWQgYW4gZW1wdHkKKyAgIGZpbGUuCisgICAobWVyZ2UgNjZlYzkwNCBqay9zdGF0dXMtcmVhZC1icmFuY2gtbmFtZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZW1vdmUgYSBzdXBlcmZsdW91cyBjb25kaXRpb25hbCB0aGF0IGlzIGFsd2F5cyB0cnVlLgorICAgKG1lcmdlIDk0ZWU4ZTIgamsvcmVtb3RlLWN1cmwtYW4tYXJyYXktaW4tc3RydWN0LWNhbm5vdC1iZS1udWxsIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJnaXQgZGlmZiAtLXJhdyIgZG9jdW1lbnRhdGlvbiBpbmNvcnJlY3RseSBpbXBsaWVkIHRoYXQgQyhvcHkpCisgICBhbmQgUihlbmFtZSkgYXJlIHRoZSBvbmx5IHN0YXR1c2VzIHRoYXQgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgc2NvcmUKKyAgIG51bWJlci4KKyAgIChtZXJnZSBhYzFjMmQ5IGpjL2RpZmYtZm9ybWF0LWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgYnJva2VuIHBhY2sgLmlkeCBmaWxlIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBwcmV2ZW50ZWQgdGhlCisgICBkdW1iIGh0dHAgdHJhbnNwb3J0IGZyb20gZmV0Y2hpbmcgYSBnb29kIGNvcHkgb2YgaXQgZnJvbSB0aGUgb3RoZXIKKyAgIHNpZGUuCisgICAobWVyZ2UgOGI5YzJkZCBqay9kdW1iLWh0dHAtaWR4LWZldGNoLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBlcnJvciBtZXNzYWdlIGZyb20gImdpdCBjb21taXQiLCB3aGVuIGEgbm9uLWV4aXN0aW5nIGF1dGhvcgorICAgbmFtZSB3YXMgZ2l2ZW4gYXMgdmFsdWUgdG8gdGhlICItLWF1dGhvcj0iIHBhcmFtZXRlciwgaGFzIGJlZW4KKyAgIHJld29yZGVkIHRvIGF2b2lkIG1pc3VuZGVyc3RhbmRpbmcuCisgICAobWVyZ2UgMTA0NGIxZiBtZy9jb21taXQtYXV0aG9yLW5vLW1hdGNoLW1hbGZvcm1lZC1tZXNzYWdlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLS1oZWxwIiB1c2VkIHRvIHNob3cgcmV2LWxpc3Qgb3B0aW9ucyB0aGF0IGFyZSBpcnJlbGV2YW50CisgICB0byB0aGUgImxvZyIgY29tbWFuZC4KKyAgIChtZXJnZSAzY2FiMDJkIGpjL2RvYy1sb2ctcmV2LWxpc3Qtb3B0aW9ucyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgdXNlZCB0byB1bmRlci1hbGxvY2F0ZSBtZW1vcnkgd2hlbiB0aGUKKyAgIGZpeCByZXN1bHRlZCBpbiBhIGxvbmdlciB0ZXh0IHRoYW4gdGhlIG9yaWdpbmFsIHBhdGNoLgorICAgKG1lcmdlIDQwN2E3OTIgamMvYXBwbHktd3MtZml4LWV4cGFuZHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW50ZXJhY3RpdmUgInNob3cgYSBsaXN0IGFuZCBsZXQgdGhlIHVzZXIgY2hvb3NlIGZyb20gaXQiCisgICBpbnRlcmZhY2UgdXNlZCBieSAiZ2l0IGFkZCAtaSIgdW5uZWNlc3NhcmlseSBwcm9tcHRlZCB0aGUgdXNlciBldmVuCisgICB3aGVuIHRoZSBjYW5kaWRhdGUgbGlzdCB3YXMgZW1wdHksIGFnYWluc3Qgd2hpY2ggdGhlIG9ubHkgImNob2ljZSIKKyAgIHRoZSB1c2VyIGNvdWxkIGhhdmUgbWFkZSB3YXMgdG8gY2hvb3NlIG5vdGhpbmcuCisgICAobWVyZ2UgYTljNDY0MSBhay9hZGQtaS1lbXB0eS1jYW5kaWRhdGVzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRvZG8gbGlzdCBjcmVhdGVkIGJ5ICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGZ1bGx5IGhvbm9yCisgICBjb3JlLmFiYnJldiBzZXR0aW5ncy4KKyAgIChtZXJnZSBlZGI3MmQ1IGtzL3JlYmFzZS1pLWFiYnJldiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgYSByZW1vdGUtaGVscGVyIHRoYXQgY2Fubm90IHJlc3BvbmQgdG8gdGhlICJsaXN0IgorICAgY29tbWFuZCBjb3VsZCBub3QgZmV0Y2ggZnJvbSBhIHN5bWJvbGljIHJlZmVyZW5jZSAoZS5nLiwgSEVBRCkuCisgICAobWVyZ2UgMzNjYWU1NCBtaC9kZXJlZi1zeW1yZWYtb3Zlci1oZWxwZXItdHJhbnNwb3J0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIC0tc2lnbmVkIiBnYXZlIGFuIGluY29ycmVjdGx5IHdvcmRlZCBlcnJvciBtZXNzYWdlIHdoZW4KKyAgIHRoZSBvdGhlciBzaWRlIGRpZCBub3Qgc3VwcG9ydCB0aGUgY2FwYWJpbGl0eS4KKworICogVGhlICJnaXQgcHVzaCAtLXNpZ25lZCIgcHJvdG9jb2wgZXh0ZW5zaW9uIGRpZCBub3QgbGltaXQgd2hhdCB0aGUKKyAgICJub25jZSIgKGEgc2VydmVyLWNob3NlbiBzdHJpbmcpIGNvdWxkIGNvbnRhaW4gbm9yIGhvdyBsb25nIGl0CisgICBjb3VsZCBiZSwgd2hpY2ggd2FzIHVubmVjZXNzYXJpbHkgbGF4LiBMaW1pdCBib3RoIHRoZSBsZW5ndGggYW5kCisgICB0aGUgYWxwaGFiZXQgdG8gYSByZWFzb25hYmx5IHNtYWxsIHNwYWNlIHRoYXQgY2FuIHN0aWxsIGhhdmUgZW5vdWdoCisgICBlbnRyb3B5LgorICAgKG1lcmdlIGFmY2I2ZWUgamMvcHVzaC1jZXJ0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgY2xvYmJlcmVkIHRoZSBzaGVsbCB2YXJpYWJsZSAkeAorICAgaW4gdGhlIGdsb2JhbCBzaGVsbCBuYW1lc3BhY2UuCisgICAobWVyZ2UgODUyZmYxYyBtYS9iYXNoLWNvbXBsZXRpb24tbGVha2luZy14IGxhdGVyIHRvIG1haW50KS4KKworICogV2UgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIGEgInVpbnRtYXhfdCIgaW50ZWdlciB0aGF0IGRvZXNuJ3QgZml0IGluCisgICAiaW50Ii4KKyAgIChtZXJnZSBkMzA2ZjNkIGprL2RlY2ltYWwtd2lkdGgtZm9yLXVpbnRtYXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiBwYXJzZXIgdXNlZCB0byBiZSBjb25mdXNlZCB3aGVuIHJlYWRpbmcKKyAgIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGJsb2Igb2JqZWN0IHRoYXQgZW5kcyB3aXRoIGEgbG9uZSBDUi4KKyAgIChtZXJnZSAxZDA2NTVjIGprL2NvbmZpZy1uby11bmdldGMtZW9mIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHBhY2sgYml0bWFwIHN1cHBvcnQgZGlkIG5vdCBidWlsZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEdDQy4KKyAgIChtZXJnZSBiZDRlODgyIGprL3BhY2stYml0bWFwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGRvY3VtZW50YXRpb24gd2Fzbid0IGNsZWFyIHRoYXQgInJlbW90ZS48bmljaz4ucHVzaFVSTCIgYW5kCisgICAicmVtb3RlLjxuaWNrPi5VUkwiIGFyZSB0aGVyZSB0byBuYW1lIHRoZSBzYW1lIHJlcG9zaXRvcnkgYWNjZXNzZWQKKyAgIHZpYSBkaWZmZXJlbnQgdHJhbnNwb3J0cywgbm90IHR3byBzZXBhcmF0ZSByZXBvc2l0b3JpZXMuCisgICAobWVyZ2UgNjk3ZjY1MiBqYy9yZW1vdGUtc2V0LXVybC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbGRlciBHbnVQRyBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBjb3JyZWN0bHkgaW1wb3J0IHRoZSBrZXlyaW5nCisgICBtYXRlcmlhbCB3ZSBwcmVwYXJlIGZvciB0aGUgdGVzdHMgdG8gdXNlLgorICAgKG1lcmdlIDFmOTg1ZDYgY2gvbmV3LWdwZy1kcm9wcy1yZmMtMTk5MSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjcmVkZW50aWFsIGhlbHBlciBmb3IgV2luZG93cyAoaW4gY29udHJpYi8pIHVzZWQgdG8gbWlzaGFuZGxlCisgICB1c2VyIG5hbWVzIHRoYXQgY29udGFpbiBhbiBhdC1zaWduLgorICAgKG1lcmdlIDEzZDI2MWUgYXYvd2luY3JlZC13aXRoLWF0LWluLXVzZXJuYW1lLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJkaWZmLWhpZ2hsaWdodCIgKGluIGNvbnRyaWIvKSB1c2VkIHRvIHNob3cgYnl0ZS1ieS1ieXRlCisgICBkaWZmZXJlbmNlcywgd2hpY2ggY291bGQgY2F1c2UgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHRvIGJlIGNob3BwZWQKKyAgIGluIHRoZSBtaWRkbGUuIEl0IGxlYXJuZWQgdG8gcGF5IGF0dGVudGlvbiB0byBjaGFyYWN0ZXIgYm91bmRhcmllcworICAgKGFzc3VtaW5nIFVURi04KS4KKyAgIChtZXJnZSA4ZDAwNjYyIGprL2NvbG9ycyBsYXRlciB0byBtYWludCkuCisKKyAqIERvY3VtZW50IGxvbmdzdGFuZGluZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWluZyBydWxlcyBpbgorICAgQ29kaW5nR3VpZGVsaW5lcy4KKyAgIChtZXJnZSAzNTg0MGEzIGpjL2NvbmYtdmFyLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGVhcmxpZXIgd29ya2Fyb3VuZCB0byBzcXVlbGNoIHVuaGVscGZ1bCBkZXByZWNhdGlvbiB3YXJuaW5ncworICAgZnJvbSB0aGUgY29tcGlsZXIgb24gT1MgWCB1bm5lY2Vzc2FyaWx5IHNldCBhIG1pbmltdW0gcmVxdWlyZWQKKyAgIHZlcnNpb24gb2YgdGhlIE9TLCB3aGljaCB0aGUgdXNlciBtaWdodCB3YW50IHRvIHJhaXNlIChvciBsb3dlcikKKyAgIGZvciBvdGhlciByZWFzb25zLgorICAgKG1lcmdlIDg4YzAzZWIgZXMvc3F1ZWxjaC1vcGVuc3NsLXdhcm5pbmdzLW9uLW1hY29zeCBsYXRlciB0byBtYWludCkuCisKKyAqIENlcnRhaW4gb2xkZXIgdmludGFnZXMgb2YgY1VSTCBnaXZlIGlycmVndWxhciBvdXRwdXQgZnJvbQorICAgImN1cmwtY29uZmlnIC0tdmVybnVtIiwgd2hpY2ggY29uZnVzZWQgb3VyIGJ1aWxkIHN5c3RlbS4KKyAgIChtZXJnZSAzYWY2NzkyIHRjL2N1cmwtdmVybnVtLW91dHB1dC1icm9rZW4taW4tNy4xMSBsYXRlciB0byBtYWludCkuCisKKyAqIEluIHYyLjIuMCwgd2UgYnJva2UgImdpdCBwcnVuZSIgdGhhdCBydW5zIGluIGEgcmVwb3NpdG9yeSB0aGF0CisgICBib3Jyb3dzIGZyb20gYW4gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZS4KKyAgIChtZXJnZSBiMGE0MjY0IGprL3BydW5lLW10aW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzdWJtb2R1bGUgYWRkIiBmYWlsZWQgdG8gc3F1YXNoICJwYXRoL3RvLy4vLi9zdWJtb2R1bGUiIHRvCisgICAicGF0aC90by9zdWJtb2R1bGUiLgorICAgKG1lcmdlIDgxOTZlNzIgcHMvc3VibW9kdWxlLXNhbml0aXplLXBhdGgtdXBvbi1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdlLWZpbGUiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiBpbnZva2VkIGluIGEKKyAgIHN1YmRpcmVjdG9yeS4KKyAgIChtZXJnZSAyMDRhOGZmIGFiL21lcmdlLWZpbGUtcHJlZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBibGFtZSIgY291bGQgZGllIHRyeWluZyB0byBmcmVlIGFuIHVuaW5pdGlhbGl6ZWQgcGllY2Ugb2YKKyAgIG1lbW9yeS4KKyAgIChtZXJnZSBlNjAwNTkyIGVzL2JsYW1lLWNvbW1pdC1pbmZvLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIHVzZWQgdG8gY3Jhc2ggd2hlbiBpdCBjb3VsZCBub3QgY2xvc2UgYW5kCisgICBmaW5hbGl6ZSB0aGUgcmVzdWx0aW5nIHBhY2tmaWxlIGNsZWFubHkuCisgICAobWVyZ2UgNWU5MTVmMyBqay9mYXN0LWltcG9ydC1kaWUtbmljZWx5LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJ1cGRhdGUtaW5kZXggLS1yZWZyZXNoIiB1c2VkIHRvIGxlYWsgbWVtb3J5IHdoZW4gYW4gZW50cnkgY291bGQKKyAgIG5vdCBiZSByZWZyZXNoZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4KKyAgIChtZXJnZSBiYzFjMmNhIHNiL3BsdWctbGVhay1pbi1tYWtlLWNhY2hlLWVudHJ5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJpbnRlcnBvbGF0ZWQtcGF0aCIgb3B0aW9uIG9mICJnaXQgZGFlbW9uIiBpbnNlcnRlZCBhbnkgc3RyaW5nCisgICB0aGUgY2xpZW50IGRlY2xhcmVkIG9uIHRoZSAiaG9zdD0iIGNhcGFiaWxpdHkgcmVxdWVzdCB3aXRob3V0CisgICBjaGVja2luZy4gU2FuaXRpemUgYW5kIGxpbWl0ICVIIGFuZCAlQ0ggdG8gYSBzYW5lciBhbmQgYSB2YWxpZCBETlMKKyAgIG5hbWUuCisgICAobWVyZ2UgYjQ4NTM3MyBqay9kYWVtb24taW50ZXJwb2xhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRhZW1vbiIgdW5uZWNlc3NhcmlseSBsb29rZWQgdXAgdGhlIGhvc3RuYW1lIGV2ZW4gd2hlbiAiJUNIIgorICAgYW5kICIlSVAiIGludGVycG9sYXRpb25zIHdlcmUgbm90IHJlcXVlc3RlZC4KKyAgIChtZXJnZSBkYzhlZGM4IHJzL2RhZW1vbi1pbnRlcnBvbGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHJlbGllZCBvbiAiLS1uby0iIHByZWZpeCBoYW5kbGluZyBpbiBQZXJsJ3MgR2V0b3B0OjpMb25nCisgICBwYWNrYWdlLCBldmVuIHRob3VnaCB0aGF0IHN1cHBvcnQgZGlkbid0IGV4aXN0IGluIFBlcmwgNS44ICh3aGljaAorICAgd2Ugc3RpbGwgc3VwcG9ydCkuIE1hbnVhbGx5IGFkZCBzdXBwb3J0IHRvIGhlbHAgcGVvcGxlIHdpdGggb2xkZXIKKyAgIEdldG9wdDo6TG9uZyBwYWNrYWdlcy4KKyAgIChtZXJnZSBmNDcxNDk0IGttL3NlbmQtZW1haWwtZ2V0b3B0LWxvbmctd29ya2Fyb3VuZHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFwcGx5IiB3YXMgbm90IHZlcnkgY2FyZWZ1bCBhYm91dCByZWFkaW5nIGZyb20sIHJlbW92aW5nLAorICAgdXBkYXRpbmcgYW5kIGNyZWF0aW5nIHBhdGhzIG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSAodW5kZXIKKyAgIC0taW5kZXgvLS1jYWNoZWQpIG9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAod2hlbiB1c2VkIGFzIGEKKyAgIHJlcGxhY2VtZW50IGZvciBHTlUgcGF0Y2gpLgorICAgKG1lcmdlIGUwZDIwMWIgamMvYXBwbHktYmV5b25kLXN5bWxpbmsgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb3JyZWN0IGEgYnJlYWthZ2UgaW4gZ2l0LXN2biwgaW50cm9kdWNlZCBhcm91bmQgdGhlIHYyLjIgZXJhLCB0aGF0CisgICBjYW4gY2F1c2UgRmlsZUhhbmRsZXMgdG8gYmUgY2xvc2VkIHByZW1hdHVyZWx5LgorICAgKG1lcmdlIGU0MjYzMTEgZXcvc3ZuLW1haW50LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgZGlkIG5vdCBwYXJzZSB1c2VybmFtZXMgZm9sbG93ZWQgYnkgbGl0ZXJhbCBJUHY2IGFkZHJlc3NlcworICAgY29ycmVjdGx5IGluIFNTSCB0cmFuc3BvcnQgVVJMczsgZS5nLiwKKyAgIHNzaDovL3VzZXJAWzIwMDE6ZGI4OjoxXToyMi9yZXBvLmdpdC4KKyAgIChtZXJnZSA2YjZjNWY3IHRiL2Nvbm5lY3QtaXB2Ni1wYXJzZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnbWFpbGluZm8uc2Npc3NvcnMnIHdhcyBoYXJkIHRvCisgICBkaXNjb3ZlciBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgIChtZXJnZSBhZmI1ZGU3IG1tL2FtLWMtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBhbmQgdGhlCisgICBzdWJtb2R1bGUuKi51cGRhdGUgY29uZmlndXJhdGlvbiB3YXMgbm90IGNsZWFybHkgZG9jdW1lbnRlZC4KKyAgIChtZXJnZSA1YzMxYWNmIG1zL3N1Ym1vZHVsZS11cGRhdGUtY29uZmlnLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtLXNob3J0c3RhdCIgdXNlZCB0b2dldGhlciB3aXRoICItLWRpcnN0YXQ9Y2hhbmdlcyIgb3IKKyAgICItLWRpcnN0YXQ9ZmlsZXMiIGluY29ycmVjdGx5IG91dHB1dCBkaXJzdGF0IGluZm9ybWF0aW9uIHR3aWNlLgorICAgKG1lcmdlIGFiMjczODkgbWsvZGlmZi1zaG9ydHN0YXQtZGlyc3RhdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWFucGFnZSBmb3IgImdpdCByZW1vdGUgYWRkIiBtZW50aW9uZWQgIi0tdGFncyIgYW5kICItLW5vLXRhZ3MiCisgICBidXQgZGlkIG5vdCBleHBsYWluIHdoYXQgaGFwcGVucyBpZiBuZWl0aGVyIG9wdGlvbiBpcyBwcm92aWRlZC4KKyAgIChtZXJnZSBhYWJhMGFiIG1nL2RvYy1yZW1vdGUtdGFncy1vci1ub3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZGVzY3JpcHRpb24gb2YgIi0tZXhjbHVkZS1zdGFuZGFyZCBvcHRpb24iIGluIHRoZSBvdXRwdXQgb2YKKyAgICJnaXQgZ3JlcCAtaCIgd2FzIHBocmFzZWQgcG9vcmx5LgorICAgKG1lcmdlIDc3ZmRiOGEgbmQvZ3JlcC1leGNsdWRlLXN0YW5kYXJkLWhlbHAtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIHJlY2VudGx5IHN0YXJ0ZWQgdG8gaW5jbHVkZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMKKyAgIGluIHRoZSB0b2RvIGxpc3QsIGJ1dCB0aGF0IG91dHB1dCBpbmNsdWRlZCBleHRyYW5lb3VzIHdoaXRlc3BhY2Ugb24KKyAgIGEgcGxhdGZvcm0gdGhhdCBwcmVwZW5kcyBsZWFkaW5nIHdoaXRlc3BhY2VzIHRvIGl0cyAid2MgLWwiIG91dHB1dC4KKyAgIChtZXJnZSAyMTg1ZDNiIGVzL3JlYmFzZS1pLWNvdW50LXRvZG8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYm9ycm93ZWQgY29kZSBpbiB0aGUga3dzZXQgQVBJIGRpZCBub3QgZm9sbG93IG91ciB1c3VhbAorICAgY29udmVudGlvbiB0byB1c2UgInVuc2lnbmVkIGNoYXIiIHRvIHN0b3JlIHZhbHVlcyB0aGF0IHJhbmdlIGZyb20KKyAgIDAtMjU1LgorICAgKG1lcmdlIDE4OWM4NjAgYncva3dzZXQtdXNlLXVuc2lnbmVkIGxhdGVyIHRvIG1haW50KS4KKworICogQSBjb3JydXB0IGlucHV0IHRvICJnaXQgZGlmZiAtTSIgdXNlZCB0byBjYXVzZSBpdCB0byBzZWdmYXVsdC4KKyAgIChtZXJnZSA0ZDZiZTAzIGprL2RpZmZjb3JlLXJlbmFtZS1kdXBsaWNhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDZXJ0YWluIGJ1aWxkcyBvZiBHUEcgdHJpZ2dlcmVkIGZhbHNlIGJyZWFrYWdlcyBpbiBhIHRlc3QuCisgICAobWVyZ2UgM2Y4OGMxYiBtZy92ZXJpZnktY29tbWl0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBpbWFwLXNlbmQiIGxlYXJuZWQgdG8gb3B0aW9uYWxseSB0YWxrIHdpdGggYW4gSU1BUCBzZXJ2ZXIgdmlhCisgICBsaWJjVVJMLiBCZWNhdXNlIHRoZXJlIGlzIG5vIG90aGVyIG9wdGlvbiB3aGVuIEdpdCBpcyBidWlsdCB3aXRoCisgICB0aGUgTk9fT1BFTlNTTCBvcHRpb24sIHVzZSBsaWJjVVJMIGJ5IGRlZmF1bHQgaW4gdGhhdCBjYXNlLgorICAgKG1lcmdlIGRjZDAxZWEga20vaW1hcC1zZW5kLWxpYmN1cmwtb3B0aW9ucyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIGRpZCBub3QgcmVzZXQgY29sb3JzIGNvcnJlY3RseSBhcm91bmQgdGhlCisgICBicmFuY2ggbmFtZXMuCisgICAobWVyZ2UgNWVlODc1OCBqYy9kZWNvcmF0ZS1sZWFreS1zZXBhcmF0b3ItY29sb3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0aGF0IHJlYWRzIGZyb20gdGhlIGN0YWdzIGZpbGUgaW4gdGhlIGNvbXBsZXRpb24gc2NyaXB0CisgICAoaW4gY29udHJpYi8pIGRpZCBub3Qgc3BlbGwgJHtwYXJhbS9wYXR0ZXJuL3N0cmluZ30gc3Vic3RpdHV0aW9uCisgICBjb3JyZWN0bHksIHdoaWNoIGhhcHBlbmVkIHRvIHdvcmsgd2l0aCBiYXNoIGJ1dCBub3Qgd2l0aCB6c2guCisgICAobWVyZ2UgZGI4ZDc1MCBqcy9jb21wbGV0aW9uLWN0YWdzLXBhdHRlcm4tc3Vic3RpdHV0aW9uLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB0cmFuc2Zlci5oaWRlcmVmcyBzdXBwb3J0IGRpZCBub3QgcXVpdGUgd29yayBmb3Igc21hcnQtaHR0cAorICAgdHJhbnNwb3J0LgorICAgKG1lcmdlIDhkZGYzY2Egamsvc21hcnQtaHR0cC1oaWRlLXJlZnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbiB0aGUgImdpdCB0YWcgLWgiIG91dHB1dCwgbW92ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICAiLS1jb2x1bW4iIGFuZCAiLS1zb3J0IiBvcHRpb25zIHRvIHRoZSAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKKyAgIHNlY3Rpb24uCisgICAobWVyZ2UgZGQwNTljNiBqay90YWctaC1jb2x1bW4taXMtYS1saXN0aW5nLW9wdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHJ1bmUiIHVzZWQgdG8gbGFyZ2VseSBpZ25vcmUgYnJva2VuIHJlZnMgd2hlbiBkZWNpZGluZyB3aGljaAorICAgb2JqZWN0cyBhcmUgc3RpbGwgYmVpbmcgdXNlZCwgd2hpY2ggY291bGQgY2F1c2UgcmVmZXJlbmNlCisgICBjb3JydXB0aW9uIHRvIGxlYWQgdG8gb2JqZWN0IGxvc3MuCisgICAobWVyZ2UgZWE1NmM0ZSBqay9wcnVuZS13aXRoLWNvcnJ1cHQtcmVmcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzcGxpdC1pbmRleCBtb2RlIGludHJvZHVjZWQgaW4gdjIuMy4wLXJjMH40MSB3YXMgYnJva2VuIGluIHRoZQorICAgY29kZXBhdGggdG8gcHJvdGVjdCB1cyBhZ2FpbnN0IGEgYnJva2VuIHJlaW1wbGVtZW50YXRpb24gb2YgR2l0CisgICB0aGF0IHdyaXRlcyBhbiBpbnZhbGlkIGluZGV4IHdpdGggZHVwbGljYXRlZCBpbmRleCBlbnRyaWVzLCBldGMuCisgICAobWVyZ2UgMDNmMTVhNyB0Zy9maXgtY2hlY2stb3JkZXItd2l0aC1zcGxpdC1pbmRleCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2giLCB3aGVuIGZldGNoaW5nIGEgY29tbWl0IHVzaW5nIHRoZQorICAgYWxsb3ctdGlwLXNoYTEtaW4td2FudCBleHRlbnNpb24sIGNvdWxkIGhhdmUgZmFpbGVkIHRvIGZldGNoIGFsbCBvZgorICAgdGhlIHJlcXVlc3RlZCByZWZzLgorICAgKG1lcmdlIDMyZDA0NjIgamsvZmV0Y2gtcGFjayBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGZhaWx1cmUgZWFybHkgaW4gdGhlICJnaXQgY2xvbmUiIHRoYXQgc3RhcnRlZCBjcmVhdGluZyB0aGUKKyAgIHdvcmtpbmcgdHJlZSBhbmQgcmVwb3NpdG9yeSBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIHRoZSBmYWlsdXJlIHRvCisgICBjbGVhbiB1cCBzb21lIGRpcmVjdG9yaWVzIGFuZCBmaWxlcy4KKyAgIChtZXJnZSAxNmVmZjZjIGprL2NsZWFudXAtZmFpbGVkLWNsb25lIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjb21tZW5kIGZvcm1hdC1wYXRjaCBhbmQgc2VuZC1lbWFpbCBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gc3VibWl0CisgICBwYXRjaGVzIHRvIHRoaXMgcHJvamVjdC4KKyAgIChtZXJnZSBiMjVjNDY5IGpjL3N1Ym1pdHRpbmctcGF0Y2hlcy1tZW50aW9uLXNlbmQtZW1haWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBEbyBub3Qgc3Bhd24gdGhlIHBhZ2VyIHdoZW4gImdpdCBncmVwIiBpcyBydW4gd2l0aCAiLS1xdWlldCIuCisgICAobWVyZ2UgYzIwNDhmMCB3cy9ncmVwLXF1aWV0LW5vLXBhZ2VyIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHByb21wdCBzY3JpcHQgKGluIGNvbnRyaWIvKSBkaWQgbm90IHNob3cgdGhlIHVudHJhY2tlZCBzaWduCisgICB3aGVuIHdvcmtpbmcgaW4gYSBzdWJkaXJlY3Rvcnkgd2l0aG91dCBhbnkgdW50cmFja2VkIGZpbGVzLgorICAgKG1lcmdlIDliZGM1MTcgY3QvcHJvbXB0LXVudHJhY2tlZC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBlYXJsaWVyIHVwZGF0ZSB0byB0aGUgVVJMIHBhcnNlciBicm9rZSBhbiBhZGRyZXNzIHRoYXQgY29udGFpbnMKKyAgIGEgY29sb24gYnV0IGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIHBvcnQgbnVtYmVyLCBsaWtlCisgICBzc2g6Ly9leGFtcGxlLmNvbTovcGF0aC90by9yZXBvLgorICAgKG1lcmdlIDZiNmM1ZjcgdGIvY29ubmVjdC1pcHY2LXBhcnNlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW51cHMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KKyAgIChtZXJnZSAyY2U2M2U5IHJzL3NpbXBsZS1jbGVhbnVwcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzNiYWE2OSByai9uby14b3Blbi1zb3VyY2UtZm9yLWN5Z3dpbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODE3ZDAzZSBqYy9kaWZmLXRlc3QtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWIzMmM2NiBhay90NTUxNi10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiY2Q1N2NiIG1yL2RvYy1jbGVhbi1mLWYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDBkNmFjY2MgbWcvZG9jLXN0YXR1cy1jb2xvci1zbG90IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1M2U1M2M3IHNnL2NvbXBsZXRpb24tcmVtb3RlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4ZmE3OTc1IGFrL2dpdC1kb25lLWhlbHAtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWE2ZjEyOCBycy9kZWZsYXRlLWluaXQtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNmY3NWQ0NSBycy91c2UtaXN4ZGlnaXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM3NmU0YjMgamsvdGVzdC1hbm5veWFuY2VzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3MDMyMDU0IG5kL2RvYy1naXQtaW5kZXgtdmVyc2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTg2OWM1ZSB0Zy90ZXN0LWluZGV4LXY0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1OTlkMjIzIGprL3NpbXBsaWZ5LWNzdW0tZmlsZS1zaGExZmQtY2hlY2sgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI2MGQ1ODUgc2cvY29tcGxldGlvbi1naXRjb21wLW5sLWZvci1yZWZzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NzdjNTVhIGpjL3JlcG9ydC1wYXRoLWVycm9yLXRvLWRpciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmRkZmFmOCBwaC9wdXNoLWRvYy1jYXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ1MGQzMWUgc3MvcHVsbC1yZWJhc2UtcHJlc2VydmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGM4YzNmMWQgcHQvZW50ZXItcmVwby1jb21tZW50LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDdiZmI5ZSBqei9naXR3ZWItY29uZi1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmOTA3MjgyIGprL2NoZXJyeS1waWNrLWRvY2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDNjMDgxMSBpdS9maXgtcGFyc2Utb3B0aW9ucy1oLWNvbW1lbnQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDZjM2IyYWYgamcvY2d1aWRlLXdlLWNhbm5vdC1jb3VudCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmI4YmQ0NCBqay9wYWNrLWNvcnJ1cHRpb24tcG9zdC1tb3J0ZW0gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDk1ODVjYjggam4vZG9jLWZhc3QtaW1wb3J0LW5vLTE2LW9jdG9wdXMtbGltaXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVkY2QxYjEgcHMvZ3JlcC1oZWxwLWFsbC1jYWxsYmFjay1hcmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYxZjRjODQgdmEvZml4LWdpdC1wNC10ZXN0cyBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NWE2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xLnR4dApAQCAtMCwwICsxLDQwIEBACitHaXQgdjIuNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40CistLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSB1c3VhbCAiZ2l0IGRpZmYiIHdoZW4gc2VlaW5nIGEgZmlsZSB0dXJuaW5nIGludG8gYSBkaXJlY3RvcnkKKyAgIHNob3dlZCBhIHBhdGNoc2V0IHRvIHJlbW92ZSB0aGUgZmlsZSBhbmQgY3JlYXRlIGFsbCBmaWxlcyBpbiB0aGUKKyAgIGRpcmVjdG9yeSwgYnV0ICJnaXQgZGlmZiAtLW5vLWluZGV4IiBzaW1wbHkgcmVmdXNlZCB0byB3b3JrLiAgQWxzbywKKyAgIHdoZW4gYXNrZWQgdG8gY29tcGFyZSBhIGZpbGUgYW5kIGEgZGlyZWN0b3J5LCBpbWl0YXRlIFBPU0lYICJkaWZmIgorICAgYW5kIGNvbXBhcmUgdGhlIGZpbGUgd2l0aCB0aGUgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gdGhlCisgICBkaXJlY3RvcnksIGluc3RlYWQgb2YgcmVmdXNpbmcgdG8gcnVuLgorCisgKiBUaGUgZGVmYXVsdCAkSE9NRS8uZ2l0Y29uZmlnIGZpbGUgY3JlYXRlZCB1cG9uICJnaXQgY29uZmlnIC0tZ2xvYmFsIgorICAgdGhhdCBlZGl0cyBpdCBoYWQgaW5jb3JyZWN0bHkgc3BlbGxlZCB1c2VyLm5hbWUgYW5kIHVzZXIuZW1haWwKKyAgIGVudHJpZXMgaW4gaXQuCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT1ub3ciIG9yIGFueXRoaW5nIHRoYXQgcmVsaWVzIG9uIGFwcHJveGlkYXRlIGxvc3QKKyAgIHRoZSBkYXlsaWdodC1zYXZpbmctdGltZSBvZmZzZXQuCisKKyAqICJnaXQgY2F0LWZpbGUgYmwgJGJsb2IiIGZhaWxlZCB0byBiYXJmIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIG5vCisgICBvYmplY3QgdHlwZSB0aGF0IGlzICJibCIuCisKKyAqIFRlYWNoIHRoZSBjb2RlcGF0aHMgdGhhdCByZWFkIC5naXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzIGZpbGVzCisgICB0aGF0IHRoZXNlIGZpbGVzIGVuY29kZWQgaW4gVVRGLTggbWF5IGhhdmUgVVRGLTggQk9NIG1hcmtlciBhdCB0aGUKKyAgIGJlZ2lubmluZzsgdGhpcyBtYWtlcyBpdCBpbiBsaW5lIHdpdGggd2hhdCB3ZSBkbyBmb3IgY29uZmlndXJhdGlvbgorICAgZmlsZXMgYWxyZWFkeS4KKworICogQWNjZXNzIHRvIG9iamVjdHMgaW4gcmVwb3NpdG9yaWVzIHRoYXQgYm9ycm93IGZyb20gYW5vdGhlciBvbmUgb24gYQorICAgc2xvdyBORlMgc2VydmVyIHVubmVjZXNzYXJpbHkgZ290IG1vcmUgZXhwZW5zaXZlIGR1ZSB0byByZWNlbnQgY29kZQorICAgYmVjb21pbmcgbW9yZSBjYXV0aW91cyBpbiBhIG5haXZlIHdheSBub3QgdG8gbG9zZSBvYmplY3RzIHRvIHBydW5pbmcuCisKKyAqIFdlIGF2b2lkIHNldHRpbmcgY29yZS53b3JrdHJlZSB3aGVuIHRoZSByZXBvc2l0b3J5IGxvY2F0aW9uIGlzIHRoZQorICAgIi5naXQiIGRpcmVjdG9yeSBkaXJlY3RseSBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUsIGJ1dAorICAgdGhlIGNvZGUgbWlzZGV0ZWN0ZWQgdGhlIGNhc2UgaW4gd2hpY2ggdGhlIHdvcmtpbmcgdHJlZSBpcyBhdCB0aGUKKyAgIHJvb3QgbGV2ZWwgb2YgdGhlIGZpbGVzeXN0ZW0gKHdoaWNoIGFyZ3VhYmx5IGlzIGEgc2lsbHkgdGhpbmcgdG8KKyAgIGRvLCBidXQgc3RpbGwgdmFsaWQpLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEwLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDJkOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTAudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi40LjEwIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC45CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogeGRpZmYgY29kZSB3ZSB1c2UgdG8gZ2VuZXJhdGUgZGlmZnMgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorICAgZXh0cmVtZWx5IGxhcmdlIGZpbGVzLiAgSXQgdXNlcyAiaW50IiBpbiBtYW55IHBsYWNlcywgd2hpY2ggY2FuCisgICBvdmVyZmxvdyBpZiB3ZSBoYXZlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgbGluZXMgb3IgZXZlbiBieXRlcyBpbgorICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb21ld2hlcmUKKyAgIGFyb3VuZCAxR0IgZm9yIG5vdy4KKworICogU29tZSBwcm90b2NvbHMgKGxpa2UgZ2l0LXJlbW90ZS1leHQpIGNhbiBleGVjdXRlIGFyYml0cmFyeSBjb2RlCisgICBmb3VuZCBpbiB0aGUgVVJMLiAgVGhlIFVSTHMgdGhhdCBzdWJtb2R1bGVzIHVzZSBtYXkgY29tZSBmcm9tCisgICBhcmJpdHJhcnkgc291cmNlcyAoZS5nLiwgLmdpdG1vZHVsZXMgZmlsZXMgaW4gYSByZW1vdGUKKyAgIHJlcG9zaXRvcnkpLCBhbmQgY2FuIGh1cnQgdGhvc2Ugd2hvIGJsaW5kbHkgZW5hYmxlIHJlY3Vyc2l2ZQorICAgZmV0Y2guICBSZXN0cmljdCB0aGUgYWxsb3dlZCBwcm90b2NvbHMgdG8gd2VsbCBrbm93biBhbmQgc2FmZQorICAgb25lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjExLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjMzNjAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTEudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0dpdCB2Mi40LjExIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC4xMAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWdmaXggcGF0Y2hlcyB3ZXJlIGJhY2twb3J0ZWQgZnJvbSB0aGUgJ21hc3RlcicgZnJvbnQgdG8gcGx1ZyBoZWFwCisgICBjb3JydXB0aW9uIGhvbGVzLCB0byBjYXRjaCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjb21wdXRhdGlvbiBvZgorICAgcGF0aG5hbWUgbGVuZ3RocywgYW5kIHRvIGdldCByaWQgb2YgdGhlIG5hbWVfcGF0aCBBUEkuICBCb3RoIG9mCisgICB0aGVzZSB3b3VsZCBoYXZlIHJlc3VsdGVkIGluIHdyaXRpbmcgb3ZlciBhbiB1bmRlci1hbGxvY2F0ZWQgYnVmZmVyCisgICB3aGVuIGZvcm11bGF0aW5nIHBhdGhuYW1lcyB3aGlsZSB0cmVlIHRyYXZlcnNhbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEyLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDE1Zjk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTIudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2Mi40LjEyIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC4xMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0LXNoZWxsIiByZWplY3RzIGEgcmVxdWVzdCB0byBzZXJ2ZSBhIHJlcG9zaXRvcnkgd2hvc2UgbmFtZQorICAgYmVnaW5zIHdpdGggYSBkYXNoLCB3aGljaCBtYWtlcyBpdCBubyBsb25nZXIgcG9zc2libGUgdG8gZ2V0IGl0CisgICBjb25mdXNlZCBpbnRvIHNwYXduaW5nIHNlcnZpY2UgcHJvZ3JhbXMgbGlrZSAiZ2l0LXVwbG9hZC1wYWNrIiB3aXRoCisgICBhbiBvcHRpb24gbGlrZSAiLS1oZWxwIiwgd2hpY2ggaW4gdHVybiB3b3VsZCBzcGF3biBhbiBpbnRlcmFjdGl2ZQorICAgcGFnZXIsIGluc3RlYWQgb2Ygd29ya2luZyB3aXRoIHRoZSByZXBvc2l0b3J5IHVzZXIgYXNrZWQgdG8gYWNjZXNzCisgICAoaS5lLiB0aGUgb25lIHdob3NlIG5hbWUgaXMgIi0taGVscCIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTBjZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMi50eHQKQEAgLTAsMCArMSw0NSBAQAorR2l0IHYyLjQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCByZXYtbGlzdCAtLW9iamVjdHMgJG9sZCAtLW5vdCAtLWFsbCIgdG8gc2VlIGlmIGV2ZXJ5dGhpbmcgdGhhdAorICAgaXMgcmVhY2hhYmxlIGZyb20gJG9sZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byB0aGUgZXhpc3RpbmcgcmVmcworICAgd2FzIHZlcnkgaW5lZmZpY2llbnQuCisKKyAqICJoYXNoLW9iamVjdCAtLWxpdGVyYWxseSIgaW50cm9kdWNlZCBpbiB2Mi4yIHdhcyBub3QgcHJlcGFyZWQgdG8KKyAgIHRha2UgYSByZWFsbHkgbG9uZyBvYmplY3QgdHlwZSBuYW1lLgorCisgKiAiZ2l0IHJlYmFzZSAtLXF1aWV0IiB3YXMgbm90IHF1aXRlIHF1aWV0IHdoZW4gdGhlcmUgaXMgbm90aGluZyB0bworICAgZG8uCisKKyAqIFRoZSBjb21wbGV0aW9uIGZvciAibG9nIC0tZGVjb3JhdGU9IiBwYXJhbWV0ZXIgdmFsdWUgd2FzIGluY29ycmVjdC4KKworICogImZpbHRlci1icmFuY2giIGNvcnJ1cHRlZCBjb21taXQgbG9nIG1lc3NhZ2UgdGhhdCBlbmRzIHdpdGggYW4KKyAgIGluY29tcGxldGUgbGluZSBvbiBwbGF0Zm9ybXMgd2l0aCBzb21lICJzZWQiIGltcGxlbWVudGF0aW9ucyB0aGF0CisgICBtdW5nZSBzdWNoIGEgbGluZS4gIFdvcmsgaXQgYXJvdW5kIGJ5IGF2b2lkaW5nIHRvIHVzZSAic2VkIi4KKworICogImdpdCBkYWVtb24iIGZhaWxzIHRvIGJ1aWxkIGZyb20gdGhlIHNvdXJjZSB1bmRlciBOT19JUFY2CisgICBjb25maWd1cmF0aW9uIChyZWdyZXNzaW9uIGluIDIuNCkuCisKKyAqICJnaXQgc3Rhc2ggcG9wL2FwcGx5IiBmb3Jnb3QgdG8gbWFrZSBzdXJlIHRoYXQgbm90IGp1c3QgdGhlIHdvcmtpbmcKKyAgIHRyZWUgaXMgY2xlYW4gYnV0IGFsc28gdGhlIGluZGV4IGlzIGNsZWFuLiBUaGUgbGF0dGVyIGlzIGltcG9ydGFudAorICAgYXMgYSBzdGFzaCBhcHBsaWNhdGlvbiBjYW4gY29uZmxpY3QgYW5kIHRoZSBpbmRleCB3aWxsIGJlIHVzZWQgZm9yCisgICBjb25mbGljdCByZXNvbHV0aW9uLgorCisgKiBXZSBoYXZlIHByZXBlbmRlZCAkR0lUX0VYRUNfUEFUSCBhbmQgdGhlIHBhdGggImdpdCIgaXMgaW5zdGFsbGVkIGluCisgICAodHlwaWNhbGx5ICIvdXNyL2JpbiIpIHRvICRQQVRIIHdoZW4gaW52b2tpbmcgc3VicHJvZ3JhbXMgYW5kIGhvb2tzCisgICBmb3IgYWxtb3N0IGV0ZXJuaXR5LCBidXQgdGhlIG9yaWdpbmFsIHVzZSBjYXNlIHRoZSBsYXR0ZXIgdHJpZWQgdG8KKyAgIHN1cHBvcnQgd2FzIHNlbWktYm9ndXMgKGkuZS4gaW5zdGFsbCBnaXQgdG8gL29wdC9mb28vZ2l0IGFuZCBydW4gaXQKKyAgIHdpdGhvdXQgaGF2aW5nIC9vcHQvZm9vIG9uICRQQVRIKSwgYW5kIG1vcmUgaW1wb3J0YW50bHkgaXQgaGFzCisgICBiZWNvbWUgbGVzcyBhbmQgbGVzcyByZWxldmFudCBhcyBHaXQgZ3JldyBtb3JlIG1haW5zdHJlYW0gKGkuZS4gdGhlCisgICB1c2VycyB3b3VsZCBfd2FudF8gdG8gaGF2ZSBpdCBvbiB0aGVpciAkUEFUSCkuICBTdG9wIHByZXBlbmRpbmcgdGhlCisgICBwYXRoIGluIHdoaWNoICJnaXQiIGlzIGluc3RhbGxlZCB0byB1c2VycycgJFBBVEgsIGFzIHRoYXQgd291bGQKKyAgIGludGVyZmVyZSB0aGUgY29tbWFuZCBzZWFyY2ggb3JkZXIgcGVvcGxlIGRlcGVuZCBvbiAoZS5nLiB0aGV5IG1heQorICAgbm90IGxpa2UgdmVyc2lvbnMgb2YgcHJvZ3JhbXMgdGhhdCBhcmUgdW5yZWxhdGVkIHRvIEdpdCBpbiAvdXNyL2JpbgorICAgYW5kIHdhbnQgdG8gb3ZlcnJpZGUgdGhlbSBieSBoYXZpbmcgZGlmZmVyZW50IG9uZXMgaW4gL3Vzci9sb2NhbC9iaW4KKyAgIGFuZCBoYXZlIHRoZSBsYXR0ZXIgZGlyZWN0b3J5IGVhcmxpZXIgaW4gdGhlaXIgJFBBVEgpLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyZTkzMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjMudHh0CkBAIC0wLDAgKzEsNzYgQEAKK0dpdCB2Mi40LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEVycm9yIG1lc3NhZ2VzIGZyb20gImdpdCBicmFuY2giIGNhbGxlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYXMKKyAgICJyZW1vdGUgYnJhbmNoZXMiLgorCisgKiAiZ2l0IHJlcmVyZSBmb3JnZXQiIGluIGEgcmVwb3NpdG9yeSB3aXRob3V0IHJlcmVyZSBlbmFibGVkIGdhdmUgYQorICAgY3J5cHRpYyBlcnJvciBtZXNzYWdlOyBpdCBzaG91bGQgYmUgYSBzaWxlbnQgbm8tb3AgaW5zdGVhZC4KKworICogImdpdCBwdWxsIC0tbG9nIiBhbmQgImdpdCBwdWxsIC0tbm8tbG9nIiB3b3JrZWQgYXMgZXhwZWN0ZWQsIGJ1dAorICAgImdpdCBwdWxsIC0tbG9nPTIwIiBkaWQgbm90LgorCisgKiBUaGUgcHVsbC5mZiBjb25maWd1cmF0aW9uIHdhcyBzdXBwb3NlZCB0byBvdmVycmlkZSB0aGUgbWVyZ2UuZmYKKyAgIGNvbmZpZ3VyYXRpb24sIGJ1dCBpdCBkaWRuJ3QuCisKKyAqIFRoZSBjb2RlIHRvIHJlYWQgcGFjay1iaXRtYXAgd2FudGVkIHRvIGFsbG9jYXRlIGEgZmV3IGh1bmRyZWQKKyAgIHBvaW50ZXJzIHRvIGEgc3RydWN0dXJlLCBidXQgYnkgbWlzdGFrZSBhbGxvY2F0ZWQgYW5kIGxlYWtlZCBtZW1vcnkKKyAgIGVub3VnaCB0byBob2xkIHRoYXQgbWFueSBhY3R1YWwgc3RydWN0dXJlcy4gIENvcnJlY3QgdGhlIGFsbG9jYXRpb24KKyAgIHNpemUgYW5kIGFsc28gaGF2ZSBpdCBvbiBzdGFjaywgYXMgaXQgaXMgc21hbGwgZW5vdWdoLgorCisgKiBWYXJpb3VzIGRvY3VtZW50YXRpb24gbWFyay11cCBmaXhlcyB0byBtYWtlIHRoZSBvdXRwdXQgbW9yZQorICAgY29uc2lzdGVudCBpbiBnZW5lcmFsIGFuZCBhbHNvIG1ha2UgQXNjaWlEb2N0b3IgKGFuIGFsdGVybmF0aXZlCisgICBmb3JtYXR0ZXIpIGhhcHBpZXIuCisKKyAqICJnaXQgYnVuZGxlIHZlcmlmeSIgZGlkIG5vdCBkaWFnbm9zZSBleHRyYSBwYXJhbWV0ZXJzIG9uIHRoZQorICAgY29tbWFuZCBsaW5lLgorCisgKiBNdWx0aS1yZWYgdHJhbnNhY3Rpb24gc3VwcG9ydCB3ZSBtZXJnZWQgYSBmZXcgcmVsZWFzZXMgYWdvCisgICB1bm5lY2Vzc2FyaWx5IGtlcHQgbWFueSBmaWxlIGRlc2NyaXB0b3JzIG9wZW4sIHJpc2tpbmcgdG8gZmFpbCB3aXRoCisgICByZXNvdXJjZSBleGhhdXN0aW9uLgorCisgKiBUaGUgcmVmIEFQSSBkaWQgbm90IGhhbmRsZSBjYXNlcyB3aGVyZSAncmVmcy9oZWFkcy94eXp6eS9mcm90eicgaXMKKyAgIHJlbW92ZWQgYXQgdGhlIHNhbWUgdGltZSBhcyAncmVmcy9oZWFkcy94eXp6eScgaXMgYWRkZWQgKG9yIHZpY2UKKyAgIHZlcnNhKSB2ZXJ5IHdlbGwuCisKKyAqIFRoZSAibG9nIC0tZGVjb3JhdGUiIGVuaGFuY2VtZW50IGluIEdpdCAyLjQgdGhhdCBzaG93cyB0aGUgY29tbWl0CisgICBhdCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBlLmcuICJIRUFEIC0+IG1hc3RlciIsIGRpZCBub3QKKyAgIHdvcmsgd2l0aCAtLWRlY29yYXRlPWZ1bGwuCisKKyAqIFRoZXJlIHdhcyBhIGNvbW1lbnRlZC1vdXQgKGluc3RlYWQgb2YgYmVpbmcgbWFya2VkIHRvIGV4cGVjdAorICAgZmFpbHVyZSkgdGVzdCB0aGF0IGRvY3VtZW50ZWQgYSBicmVha2FnZSB0aGF0IHdhcyBmaXhlZCBzaW5jZSB0aGUKKyAgIHRlc3Qgd2FzIHdyaXR0ZW47IHR1cm4gaXQgaW50byBhIHByb3BlciB0ZXN0LgorCisgKiBjb3JlLmV4Y2x1ZGVzZmlsZSAoZGVmYXVsdGluZyB0byAkWERHX0hPTUUvZ2l0L2lnbm9yZSkgaXMgc3VwcG9zZWQKKyAgIHRvIGJlIG92ZXJyaWRkZW4gYnkgcmVwb3NpdG9yeS1zcGVjaWZpYyAuZ2l0L2luZm8vZXhjbHVkZSBmaWxlLCBidXQKKyAgIHRoZSBvcmRlciB3YXMgc3dhcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuIFRoaXMgYmVsYXRlZGx5IGZpeGVzIGl0LgorCisgKiBUaGUgY29ubmVjdGlvbiBpbml0aWF0aW9uIGNvZGUgZm9yICJzc2giIHRyYW5zcG9ydCB0cmllZCB0byBhYnNvcmIKKyAgIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHN0b2NrICJzc2giIGFuZCBQdXR0eS1zdXBwbGllZCAicGxpbmsiIGFuZAorICAgaXRzIGRlcml2YXRpdmVzLCBidXQgdGhlIGxvZ2ljIHRvIHRlbGwgdGhhdCB3ZSBhcmUgdXNpbmcgInBsaW5rIgorICAgdmFyaWFudHMgd2VyZSB0b28gbG9vc2UgYW5kIGZhbHNlbHkgdHJpZ2dlcmVkIHdoZW4gInBsaW5rIiBhcHBlYXJlZAorICAgYW55d2hlcmUgaW4gdGhlIHBhdGggKGUuZy4gIi9ob21lL21lL2Jpbi91cGxpbmsvc3NoIikuCisKKyAqICJnaXQgcmViYXNlIC1pIiBtb3ZlZCB0aGUgImN1cnJlbnQiIGNvbW1hbmQgZnJvbSAidG9kbyIgdG8gImRvbmUiIGEKKyAgIGJpdCB0b28gcHJlbWF0dXJlbHksIGxvc2luZyBhIHN0ZXAgd2hlbiBhICJwaWNrIiBkaWQgbm90IGV2ZW4gc3RhcnQuCisKKyAqICJnaXQgYWRkIC1lIiBkaWQgbm90IGFsbG93IHRoZSB1c2VyIHRvIGFib3J0IHRoZSBvcGVyYXRpb24gYnkKKyAgIGtpbGxpbmcgdGhlIGVkaXRvci4KKworICogR2l0IDIuNCBicm9rZSBzZXR0aW5nIHZlcmJvc2l0eSBhbmQgcHJvZ3Jlc3MgbGV2ZWxzIG9uICJnaXQgY2xvbmUiCisgICB3aXRoIG5hdGl2ZSB0cmFuc3BvcnRzLgorCisgKiBTb21lIHRpbWUgYWdvLCAiZ2l0IGJsYW1lIiAoaW5jb3JyZWN0bHkpIGxvc3QgdGhlIGNvbnZlcnRfdG9fZ2l0KCkKKyAgIGNhbGwgd2hlbiBzeW50aGVzaXppbmcgYSBmYWtlICJ0aXAiIGNvbW1pdCB0aGF0IHJlcHJlc2VudHMgdGhlCisgICBzdGF0ZSBpbiB0aGUgd29ya2luZyB0cmVlLCB3aGljaCBicm9rZSBmb2xrcyB3aG8gcmVjb3JkIHRoZSBoaXN0b3J5CisgICB3aXRoIExGIGxpbmUgZW5kaW5nIHRvIG1ha2UgdGhlaXIgcHJvamVjdCBwb3J0YWJsZSBhY3Jvc3MKKyAgIHBsYXRmb3JtcyB3aGlsZSB0ZXJtaW5hdGluZyBsaW5lcyBpbiB0aGVpciB3b3JraW5nIHRyZWUgZmlsZXMgd2l0aAorICAgQ1JMRiBmb3IgdGhlaXIgcGxhdGZvcm0uCisKKyAqIENvZGUgY2xlYW4tdXAgZm9yIHhkZyBjb25maWd1cmF0aW9uIHBhdGggc3VwcG9ydC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxY2NkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC40LnR4dApAQCAtMCwwICsxLDM1IEBACitHaXQgdjIuNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBsMTBuIHVwZGF0ZXMgZm9yIEdlcm1hbi4KKworICogQW4gZWFybGllciBsZWFrZml4IHRvIGJpdG1hcCB0ZXN0aW5nIGNvZGUgd2FzIGluY29tcGxldGUuCisKKyAqICJnaXQgY2xlYW4gcGF0aHNwZWMuLi4iIHRyaWVkIHRvIGxzdGF0KDIpIGFuZCBjb21wbGFpbiBldmVuIGZvcgorICAgcGF0aHMgb3V0c2lkZSB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisKKyAqIENvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgSFRUUCBzZXJ2ZXIgYW5kIGh0dHBfYmFja2VuZCBwcm9jZXNzIGNhbgorICAgbGVhZCB0byBhIGRlYWQtbG9jayB3aGVuIHJlbGF5aW5nIGEgbGFyZ2UgcmVmIG5lZ290aWF0aW9uIHJlcXVlc3QuCisgICBEaWFnbm9zZSB0aGUgc2l0dWF0aW9uIGJldHRlciwgYW5kIG1pdGlnYXRlIGl0IGJ5IHJlYWRpbmcgc3VjaCBhCisgICByZXF1ZXN0IGZpcnN0IGludG8gY29yZSAodG8gYSByZWFzb25hYmxlIGxpbWl0KS4KKworICogVGhlIGNsZWFuL3NtdWRnZSBpbnRlcmZhY2UgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiBmaWx0ZXJpbmcgYW4KKyAgIGVtcHR5IGNvbnRlbnRzIChmYWlsZWQgYW5kIHRoZW4gcGFzc2VkIHRoZSBlbXB0eSBpbnB1dCB0aHJvdWdoKS4KKyAgIEl0IGNhbiBiZSBhcmd1ZWQgdGhhdCBhIGZpbHRlciB0aGF0IHByb2R1Y2VzIGFueXRoaW5nIGJ1dCBlbXB0eSBmb3IKKyAgIGFuIGVtcHR5IGlucHV0IGlzIG5vbnNlbnNlLCBidXQgaWYgdGhlIHVzZXIgd2FudHMgdG8gZG8gc3RyYW5nZQorICAgdGhpbmdzLCB0aGVuIHdoeSBub3Q/CisKKyAqIE1ha2UgImdpdCBzdGFzaCBzb21ldGhpbmcgLS1oZWxwIiBlcnJvciBvdXQsIHNvIHRoYXQgdXNlcnMgY2FuCisgICBzYWZlbHkgc2F5ICJnaXQgc3Rhc2ggZHJvcCAtLWhlbHAiLgorCisgKiBDbGFyaWZ5IHRoYXQgImxvZyAtLXJhdyIgYW5kICJsb2cgLS1mb3JtYXQ9cmF3IiBhcmUgdW5yZWxhdGVkCisgICBjb25jZXB0cy4KKworICogQ2F0Y2ggYSBwcm9ncmFtbWVyIG1pc3Rha2UgdG8gZmVlZCBhIHBvaW50ZXIgbm90IGFuIGFycmF5IHRvCisgICBBUlJBWV9TSVpFKCkgbWFjcm8sIGJ5IHVzaW5nIGEgY291cGxlIG9mIEdDQyBleHRlbnNpb25zLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4Mjk3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjUudHh0CkBAIC0wLDAgKzEsMjggQEAKK0dpdCB2Mi40LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBzZXR1cCBjb2RlIHVzZWQgdG8gZGllIHdoZW4gY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIGFyZSBzZXQKKyAgIGluY29uc2lzdGVudGx5LCBldmVuIGZvciBjb21tYW5kcyB0aGF0IGRvIG5vdCBuZWVkIHdvcmtpbmcgdHJlZS4KKworICogVGhlcmUgd2FzIGEgZGVhZCBjb2RlIHRoYXQgdXNlZCB0byBoYW5kbGUgImdpdCBwdWxsIC0tdGFncyIgYW5kCisgICBzaG93IHNwZWNpYWwtY2FzZWQgZXJyb3IgbWVzc2FnZSwgd2hpY2ggd2FzIG1hZGUgaXJyZWxldmFudCB3aGVuCisgICB0aGUgc2VtYW50aWNzIG9mIHRoZSBvcHRpb24gY2hhbmdlZCBiYWNrIGluIEdpdCAxLjkgZGF5cy4KKworICogImNvbG9yLmRpZmYucGxhaW4iIHdhcyBhIG1pc25vbWVyOyBnaXZlIGl0ICdjb2xvci5kaWZmLmNvbnRleHQnIGFzCisgICBhIG1vcmUgbG9naWNhbCBzeW5vbnltLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiByZWFkZXIvd3JpdGVyIHVzZXMgbW1hcCgyKSBpbnRlcmZhY2UgdG8gYWNjZXNzCisgICB0aGUgZmlsZXM7IHdoZW4gd2UgZmluZCBhIGRpcmVjdG9yeSwgaXQgYmFyZmVkIHdpdGggIk91dCBvZiBtZW1vcnk/Ii4KKworICogUmVjZW50ICJnaXQgcHJ1bmUiIHRyYXZlcnNlcyB5b3VuZyB1bnJlYWNoYWJsZSBvYmplY3RzIHRvIHNhZmVrZWVwCisgICBvbGQgb2JqZWN0cyBpbiB0aGUgcmVhY2hhYmlsaXR5IGNoYWluIGZyb20gdGhlbSwgd2hpY2ggc29tZXRpbWVzCisgICBzaG93ZWQgdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZXMgdGhhdCBhcmUgYWxhcm1pbmcuCisKKyAqICJnaXQgcmViYXNlIC1pIiBmaXJlZCBwb3N0LXJld3JpdGUgaG9vayB3aGVuIGl0IHNob3VsZG4ndCAobmFtZWx5LAorICAgd2hlbiBpdCB3YXMgdG9sZCB0byBzdG9wIHNlcXVlbmNpbmcgd2l0aCAnZXhlYycgaW5zbikuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTNmMzUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNi50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IHYyLjQuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC41CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBmZXRjaCAtLWRlcHRoPTxkZXB0aD4iIGFuZCAiZ2l0IGNsb25lIC0tZGVwdGg9PGRlcHRoPiIgaXNzdWVkCisgICBhIHNoYWxsb3cgdHJhbnNmZXIgcmVxdWVzdCBldmVuIHRvIGFuIHVwbG9hZC1wYWNrIHRoYXQgZG9lcyBub3QKKyAgIHN1cHBvcnQgdGhlIGNhcGFiaWxpdHkuCisKKyAqICJnaXQgZnNjayIgdXNlZCB0byBpZ25vcmUgbWlzc2luZyBvciBpbnZhbGlkIG9iamVjdHMgcmVjb3JkZWQgaW4gcmVmbG9nLgorCisgKiBUaGUgdGNzaCBjb21wbGV0aW9uIHdyaXRlcyBhIGJhc2ggc2NyaXB0bGV0IGJ1dCB0aGF0IHdvdWxkIGhhdmUKKyAgIGZhaWxlZCBmb3IgdXNlcnMgd2l0aCBub2Nsb2JiZXIgc2V0LgorCisgKiBSZWNlbnQgTWFjIE9TIFggdXBkYXRlcyBicmVha3MgdGhlIGxvZ2ljIHRvIGRldGVjdCB0aGF0IHRoZSBtYWNoaW5lCisgICBpcyBvbiB0aGUgQUMgcG93ZXIgaW4gdGhlIHNhbXBsZSBwcmUtYXV0by1nYyBzY3JpcHQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLXVwc3RyZWFtIEEuLkIiIGRpZCBub3QgbGlrZSB0byBiZSBmZWQKKyAgIHRhZ3MgYXMgYm91bmRhcnkgY29tbWl0cy4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWM0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC43LnR4dApAQCAtMCwwICsxLDUzIEBACitHaXQgdjIuNC43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIG1pbm9yIHJlZ3Jlc3Npb24gdG8gImdpdCBmc2NrIiBpbiB2Mi4yIGVyYSB3YXMgZml4ZWQ7IGl0CisgICBjb21wbGFpbmVkIGFib3V0IGEgYm9keS1sZXNzIHRhZyBvYmplY3Qgd2hlbiBpdCBsYWNrZWQgYQorICAgc2VwYXJhdG9yIGVtcHR5IGxpbmUgYWZ0ZXIgaXRzIGhlYWRlciB0byBzZXBhcmF0ZSBpdCB3aXRoIGEKKyAgIG5vbi1leGlzdGVudCBib2R5LgorCisgKiBXZSB1c2VkIHRvIGFzayBsaWJDVVJMIHRvIHVzZSB0aGUgbW9zdCBzZWN1cmUgYXV0aGVudGljYXRpb24gbWV0aG9kCisgICBhdmFpbGFibGUgd2hlbiB0YWxraW5nIHRvIGFuIEhUVFAgcHJveHkgb25seSB3aGVuIHdlIHdlcmUgdG9sZCB0bworICAgdGFsayB0byBvbmUgdmlhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgV2Ugbm93IGFzayBsaWJDVVJMIHRvCisgICBhbHdheXMgdXNlIHRoZSBtb3N0IHNlY3VyZSBhdXRoZW50aWNhdGlvbiBtZXRob2QsIGJlY2F1c2UgdGhlIHVzZXIKKyAgIGNhbiB0ZWxsIGxpYkNVUkwgdG8gdXNlIGFuIEhUVFAgcHJveHkgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlCisgICB3aXRob3V0IHVzaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorCisgKiBXaGVuIHlvdSBzYXkgIiE8RU5URVI+IiB3aGlsZSBydW5uaW5nIHNheSAiZ2l0IGxvZyIsIHlvdSdkIGNvbmZ1c2UKKyAgIHlvdXJzZWxmIGluIHRoZSByZXN1bHRpbmcgc2hlbGwsIHRoYXQgbWF5IGxvb2sgYXMgaWYgeW91IHRvb2sKKyAgIGNvbnRyb2wgYmFjayB0byB0aGUgb3JpZ2luYWwgc2hlbGwgeW91IHNwYXduZWQgImdpdCBsb2ciIGZyb20gYnV0CisgICB0aGF0IGlzbid0IHdoYXQgaXMgaGFwcGVuaW5nLiAgVG8gdGhhdCBuZXcgc2hlbGwsIHdlIGxlYWtlZAorICAgR0lUX1BBR0VSX0lOX1VTRSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdhcyBtZWFudCBhcyBhIGxvY2FsCisgICBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIG9yaWdpbmFsICJHaXQiIGFuZCBzdWJwcm9jZXNzZXMgdGhhdCB3YXMKKyAgIHNwYXduZWQgYnkgaXQgYWZ0ZXIgd2UgbGF1bmNoZWQgdGhlIHBhZ2VyLCB3aGljaCBjYXVzZWQgbWFueQorICAgImludGVyZXN0aW5nIiB0aGluZ3MgdG8gaGFwcGVuLCBlLmcuICJnaXQgZGlmZiB8IGNhdCIgc3RpbGwgcGFpbnRzCisgICBpdHMgb3V0cHV0IGluIGNvbG9yIGJ5IGRlZmF1bHQuCisKKyAgIFN0b3AgbGVha2luZyB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBwYWdlcidzIGhhbGYgb2YgdGhlCisgICBmb3JrOyB3ZSBvbmx5IG5lZWQgaXQgb24gIkdpdCIgc2lkZSB3aGVuIHdlIHNwYXduIHRoZSBwYWdlci4KKworICogQXZvaWQgcG9zc2libGUgc3NpemVfdCB0byBpbnQgdHJ1bmNhdGlvbi4KKworICogImdpdCBjb25maWciIGZhaWxlZCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGVuIHRoZQorICAgdW5kZXJseWluZyBmaWxlc3lzdGVtIGlzIGluY2FwYWJsZSBvZiByZW5hbWluZyBhIGZpbGUgdGhhdCBpcyBzdGlsbAorICAgb3Blbi4KKworICogQSBtaW5vciBidWdmaXggd2hlbiBwYWNrIGJpdG1hcCBpcyB1c2VkIHdpdGggInJldi1saXN0IC0tY291bnQiLgorCisgKiBBbiBhbmNpZW50IHRlc3QgZnJhbWV3b3JrIGVuaGFuY2VtZW50IHRvIGFsbG93IGNvbG9yIHdhcyBub3QKKyAgIGVudGlyZWx5IGNvcnJlY3Q7IHRoaXMgbWFrZXMgaXQgd29yayBldmVuIHdoZW4gdHB1dCBuZWVkcyB0byByZWFkCisgICBmcm9tIHRoZSB+Ly50ZXJtaW5mbyB1bmRlciB0aGUgdXNlcidzIHJlYWwgSE9NRSBkaXJlY3RvcnkuCisKKyAqIEZpeCBhIHNtYWxsIGJ1ZyBpbiBvdXIgdXNlIG9mIHVtYXNrKCkgcmV0dXJuIHZhbHVlLgorCisgKiAiZ2l0IHJlYmFzZSIgZGlkIG5vdCBleGl0IHdpdGggZmFpbHVyZSB3aGVuIGZvcm1hdC1wYXRjaCBpdCBpbnZva2VkCisgICBmYWlsZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4KKworICogRGlzYWJsZSAiaGF2ZSB3ZSBsb3N0IGEgcmFjZSB3aXRoIGNvbXBldGluZyByZXBhY2s/IiBjaGVjayB3aGlsZQorICAgcmVjZWl2aW5nIGEgaHVnZSBvYmplY3QgdHJhbnNmZXIgdGhhdCBydW5zIGluZGV4LXBhY2suCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuOC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC44LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDk0NmIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuOC50eHQKQEAgLTAsMCArMSwyMSBAQAorR2l0IHYyLjQuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC43CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQWJhbmRvbmluZyBhbiBhbHJlYWR5IGFwcGxpZWQgY2hhbmdlIGluICJnaXQgcmViYXNlIC1pIiB3aXRoCisgICAiLS1jb250aW51ZSIgbGVmdCBDSEVSUllfUElDS19IRUFEIGFuZCBjb25mdXNlZCBsYXRlciBzdGVwcy4KKworICogVmFyaW91cyBmaXhlcyBhcm91bmQgImdpdCBhbSIgdGhhdCBhcHBsaWVzIGEgcGF0Y2ggdG8gYSBoaXN0b3J5CisgICB0aGF0IGlzIG5vdCB0aGVyZSB5ZXQuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiByZXBvcnRlZCAibWlzc2luZyBvYmplY3QiIGZvciAwezQwfSB3aGVuIGl0CisgICBlbmNvdW50ZXJzIGEgYnJva2VuIHJlZi4gIFRoZSBsYWNrIG9mIG9iamVjdCB3aG9zZSBuYW1lIGlzIDB7NDB9IGlzCisgICBub3QgdGhlIHByb2JsZW07IHRoZSByZWYgYmVpbmcgYnJva2VuIGlzLgorCisgKiAiZ2l0IGNvbW1pdCAtLWNsZWFudXA9c2Npc3NvcnMiIHdhcyBub3QgY2FyZWZ1bCBlbm91Z2ggdG8gcHJvdGVjdAorICAgYWdhaW5zdCBnZXR0aW5nIGZvb2xlZCBieSBhIGxpbmUgdGhhdCBsb29rZWQgbGlrZSBzY2lzc29ycy4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC45LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YWY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC45LnR4dApAQCAtMCwwICsxLDkgQEAKK0dpdCB2Mi40LjkgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQuOQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlcGF0aHMgdGhhdCB1c2VkIHRvIHVzZSBmaXhlZC1zaXplZCBhcnJheXMgdG8gaG9sZAorICAgcGF0aG5hbWVzIGhhdmUgYmVlbiBjb3JyZWN0ZWQgdG8gdXNlIHN0cmJ1ZiBhbmQgb3RoZXIgbWVjaGFuaXNtcyB0bworICAgYWxsb3cgbG9uZ2VyIHBhdGhuYW1lcyB3aXRob3V0IGZlYXJpbmcgb3ZlcmZsb3dzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDcyM2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMC50eHQKQEAgLTAsMCArMSw1NjQgQEAKK0dpdCAyLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBUaGUgYmFzaCBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGxlYXJuZWQgYSBmZXcgb3B0aW9ucyB0aGF0CisgICAiZ2l0IHJldmVydCIgdGFrZXMuCisKKyAqIFdoaXRlc3BhY2UgYnJlYWthZ2VzIGluIGRlbGV0ZWQgYW5kIGNvbnRleHQgbGluZXMgY2FuIGFsc28gYmUKKyAgIHBhaW50ZWQgaW4gdGhlIG91dHB1dCBvZiAiZ2l0IGRpZmYiIGFuZCBmcmllbmRzIHdpdGggdGhlIG5ldworICAgLS13cy1lcnJvci1oaWdobGlnaHQgb3B0aW9uLgorCisgKiBMaXN0IG9mIGNvbW1hbmRzIHNob3duIGJ5ICJnaXQgaGVscCIgYXJlIGdyb3VwZWQgYWxvbmcgdGhlIHdvcmtmbG93CisgICBlbGVtZW50cyB0byBoZWxwIGVhcmx5IGxlYXJuZXJzLgorCisgKiAiZ2l0IHA0IiBub3cgZGV0ZWN0cyB0aGUgZmlsZXR5cGUgKGUuZy4gYmluYXJ5KSBjb3JyZWN0bHkgZXZlbiB3aGVuCisgICB0aGUgZmlsZXMgYXJlIG9wZW5lZCBleGNsdXNpdmVseS4KKworICogZ2l0IHA0IGF0dGVtcHRzIHRvIGJldHRlciBoYW5kbGUgYnJhbmNoZXMgaW4gUGVyZm9yY2UuCisKKyAqICJnaXQgcDQiIGxlYXJuZWQgIi0tY2hhbmdlcy1ibG9jay1zaXplIDxuPiIgdG8gcmVhZCB0aGUgY2hhbmdlcyBpbgorICAgY2h1bmtzIGZyb20gUGVyZm9yY2UsIGluc3RlYWQgb2YgbWFraW5nIG9uZSBjYWxsIHRvICJwNCBjaGFuZ2VzIgorICAgdGhhdCBtYXkgdHJpZ2dlciAidG9vIG1hbnkgcm93cyBzY2FubmVkIiBlcnJvciBmcm9tIFBlcmZvcmNlLgorCisgKiBNb3JlIHdvcmthcm91bmQgZm9yIFBlcmZvcmNlJ3Mgcm93IG51bWJlciBsaW1pdCBpbiAiZ2l0IHA0Ii4KKworICogVW5saWtlICIkRURJVE9SIiBhbmQgIiRHSVRfRURJVE9SIiB0aGF0IGNhbiBob2xkIHRoZSBwYXRoIHRvIHRoZQorICAgY29tbWFuZCBhbmQgaW5pdGlhbCBvcHRpb25zIChlLmcuICIvcGF0aC90by9lbWFjcyAtbnciKSwgJ2dpdCBwNCcKKyAgIGRpZCBub3QgbGV0IHRoZSBzaGVsbCBpbnRlcnBvbGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGVudmlyb25tZW50CisgICB2YXJpYWJsZSB0aGF0IG5hbWUgdGhlIGVkaXRvciAiJFA0RURJVE9SIiAoYW5kICIkRURJVE9SIiwgdG9vKS4KKyAgIFRoaXMgcmVsZWFzZSBtYWtlcyBpdCBpbiBsaW5lIHdpdGggdGhlIHJlc3Qgb2YgR2l0LCBhcyB3ZWxsIGFzIHdpdGgKKyAgIFBlcmZvcmNlLgorCisgKiBBIG5ldyBzaG9ydC1oYW5kIDxicmFuY2g+QHtwdXNofSBkZW5vdGVzIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCisgICB0aGF0IHRyYWNrcyB0aGUgYnJhbmNoIGF0IHRoZSByZW1vdGUgdGhlIDxicmFuY2g+IHdvdWxkIGJlIHB1c2hlZAorICAgdG8uCisKKyAqICJnaXQgc2hvdy1icmFuY2ggLS10b3BpY3MgSEVBRCIgKHdpdGggbm8gb3RoZXIgYXJndW1lbnRzKSBkaWQgbm90CisgICBkbyBhbnl0aGluZyBpbnRlcmVzdGluZy4gIEluc3RlYWQsIGNvbnRyYXN0IHRoZSBnaXZlbiByZXZpc2lvbgorICAgYWdhaW5zdCBhbGwgdGhlIGxvY2FsIGJyYW5jaGVzIGJ5IGRlZmF1bHQuCisKKyAqIEEgcmVwbGFjZW1lbnQgZm9yIGNvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIgdGhhdCBkb2VzIG5vdAorICAgcmVseSBvbiBzeW1ib2xpYyBsaW5rcyBhbmQgbWFrZSBzaGFyaW5nIG9mIG9iamVjdHMgYW5kIHJlZnMgc2FmZXIKKyAgIGJ5IG1ha2luZyB0aGUgYm9ycm93ZWUgYW5kIGJvcnJvd2VycyBhd2FyZSBvZiBlYWNoIG90aGVyLgorCisgICBDb25zaWRlciB0aGlzIGFzIHN0aWxsIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlOyBpdHMgVUkgaXMgc3RpbGwKKyAgIGxpa2VseSB0byBjaGFuZ2UuCisKKyAqIFR3ZWFrIHRoZSBzYW1wbGUgInN0b3JlIiBiYWNrZW5kIG9mIHRoZSBjcmVkZW50aWFsIGhlbHBlciB0byBob25vcgorICAgWERHIGNvbmZpZ3VyYXRpb24gZmlsZSBsb2NhdGlvbnMgd2hlbiBzcGVjaWZpZWQuCisKKyAqIEEgaGV1cmlzdGljIHdlIHVzZSB0byBjYXRjaCBtaXN0eXBlZCBwYXRocyBvbiB0aGUgY29tbWFuZCBsaW5lCisgICAiZ2l0IDxjbWQ+IDxyZXZzPiA8cGF0aHNwZWM+IiBpcyB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIG5vbi1yZXYKKyAgIHBhcmFtZXRlcnMgaW4gdGhlIGxhdGVyIHBhcnQgb2YgdGhlIGNvbW1hbmQgbGluZSBhcmUgbmFtZXMgb2YgdGhlCisgICBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLCBidXQgdGhhdCBtZWFucyAiZ2l0IGdyZXAgJHN0ciAtLSBcKi5jIgorICAgbXVzdCBhbHdheXMgYmUgZGlzYW1iaWd1YXRlZCB3aXRoICItLSIsIGJlY2F1c2Ugbm9ib2R5IHNhbmUgd2lsbAorICAgY3JlYXRlIGEgZmlsZSB3aG9zZSBuYW1lIGxpdGVyYWxseSBpcyBhc3Rlcmlzay1kb3Qtc2VlLiAgTG9vc2VuIHRoZQorICAgaGV1cmlzdGljIHRvIGRlY2xhcmUgdGhhdCB3aXRoIGEgd2lsZGNhcmQgc3RyaW5nIHRoZSB1c2VyIGxpa2VseQorICAgbWVhbnQgdG8gZ2l2ZSB1cyBhIHBhdGhzcGVjLgorCisgKiAiZ2l0IG1lcmdlIEZFVENIX0hFQUQiIGxlYXJuZWQgdGhhdCB0aGUgcHJldmlvdXMgImdpdCBmZXRjaCIgY291bGQKKyAgIGJlIHRvIGNyZWF0ZSBhbiBPY3RvcHVzIG1lcmdlLCBpLmUuIHJlY29yZGluZyBtdWx0aXBsZSBicmFuY2hlcworICAgdGhhdCBhcmUgbm90IG1hcmtlZCBhcyAibm90LWZvci1tZXJnZSI7IHRoaXMgYWxsb3dzIHVzIHRvIGxvc2UgYW4KKyAgIG9sZCBzdHlsZSBpbnZvY2F0aW9uICJnaXQgbWVyZ2UgPG1zZz4gSEVBRCAkY29tbWl0cy4uLiIgaW4gdGhlCisgICBpbXBsZW1lbnRhdGlvbiBvZiAiZ2l0IHB1bGwiIHNjcmlwdDsgdGhlIG9sZCBzdHlsZSBzeW50YXggY2FuIG5vdworICAgYmUgZGVwcmVjYXRlZCAoYnV0IG5vdCByZW1vdmVkIHlldCkuCisKKyAqIEZpbHRlciBzY3JpcHRzIHdlcmUgcnVuIHdpdGggU0lHUElQRSBkaXNhYmxlZCBvbiB0aGUgR2l0IHNpZGUsCisgICBleHBlY3RpbmcgdGhhdCB0aGV5IG1heSBub3QgcmVhZCB3aGF0IEdpdCBmZWVkcyB0aGVtIHRvIGZpbHRlci4KKyAgIFdlIGhvd2V2ZXIgdHJlYXRlZCBhIGZpbHRlciB0aGF0IGRvZXMgbm90IHJlYWQgaXRzIGlucHV0IGZ1bGx5CisgICBiZWZvcmUgZXhpdGluZyBhcyBhbiBlcnJvci4gIFdlIG5vIGxvbmdlciBkbyBhbmQgaWdub3JlIEVQSVBFCisgICB3aGVuIHdyaXRpbmcgdG8gZmVlZCB0aGUgZmlsdGVyIHNjcmlwdHMuCisKKyAgIFRoaXMgY2hhbmdlcyBzZW1hbnRpY3MsIGJ1dCBhcmd1YWJseSBpbiBhIGdvb2Qgd2F5LiAgSWYgYSBmaWx0ZXIKKyAgIGNhbiBwcm9kdWNlIGl0cyBvdXRwdXQgd2l0aG91dCBmdWxseSBjb25zdW1pbmcgaXRzIGlucHV0IHVzaW5nCisgICB3aGF0ZXZlciBtYWdpYywgd2Ugbm93IGxldCBpdCBkbyBzbywgaW5zdGVhZCBvZiBkaWFnbm9zaW5nIGl0CisgICBhcyBhIHByb2dyYW1taW5nIGVycm9yLgorCisgKiBJbnN0ZWFkIG9mIGR5aW5nIGltbWVkaWF0ZWx5IHVwb24gZmFpbGluZyB0byBvYnRhaW4gYSBsb2NrLCB0aGUKKyAgIGxvY2tpbmcgKG9mIHJlZnMgZXRjKSByZXRyaWVzIGFmdGVyIGEgc2hvcnQgd2hpbGUgd2l0aCBiYWNrb2ZmLgorCisgKiBJbnRyb2R1Y2UgaHR0cC48dXJsPi5TU0xDaXBoZXJMaXN0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gdHdlYWsKKyAgIHRoZSBsaXN0IG9mIGNpcGhlciBzdWl0ZSB0byBiZSB1c2VkIHdpdGggbGliY1VSTCB3aGVuIHRhbGtpbmcgd2l0aAorICAgaHR0cHM6Ly8gc2l0ZXMuCisKKyAqICJnaXQgc3VidHJlZSIgc2NyaXB0IChpbiBjb250cmliLykgdXNlZCAiZWNobyAtbiIgdG8gcHJvZHVjZQorICAgcHJvZ3Jlc3MgbWVzc2FnZXMgaW4gYSBub24tcG9ydGFibGUgd2F5LgorCisgKiAiZ2l0IHN1YnRyZWUiIHNjcmlwdCAoaW4gY29udHJpYi8pIGRvZXMgbm90IGhhdmUgLS1zcXVhc2ggb3B0aW9uCisgICB3aGVuIHB1c2hpbmcsIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgaGVscCB0ZXh0IHByZXRlbmRlZCBhcyBpZgorICAgaXQgZGlkLgorCisgKiBUaGUgR2l0IHN1YmNvbW1hbmQgY29tcGxldGlvbiAoaW4gY29udHJpYi8pIG5vIGxvbmdlciBsaXN0cyBjcmVkZW50aWFsCisgICBoZWxwZXJzIGFtb25nIGNhbmRpZGF0ZXM7IHRoZXkgYXJlIG5vdCBzb21ldGhpbmcgdGhlIGVuZCB1c2VyIHdvdWxkCisgICBpbnZva2UgaW50ZXJhY3RpdmVseS4KKworICogVGhlIGluZGV4IGZpbGUgY2FuIGJlIHRhdWdodCB3aXRoICJ1cGRhdGUtaW5kZXggLS11bnRyYWNrZWQtY2FjaGUiCisgICB0byBvcHRpb25hbGx5IHJlbWVtYmVyIGFscmVhZHkgc2VlbiB1bnRyYWNrZWQgZmlsZXMsIGluIG9yZGVyIHRvCisgICBzcGVlZCB1cCAiZ2l0IHN0YXR1cyIgaW4gYSB3b3JraW5nIHRyZWUgd2l0aCB0b25zIG9mIGNydWZ0LgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCB0byBkcml2ZSBXaW5NZXJnZSBhcyBhIGJhY2tlbmQuCisKKyAqICJnaXQgdXBsb2FkLXBhY2siIHRoYXQgc2VydmVzICJnaXQgZmV0Y2giIGNhbiBiZSB0b2xkIHRvIHNlcnZlCisgICBjb21taXRzIHRoYXQgYXJlIG5vdCBhdCB0aGUgdGlwIG9mIGFueSByZWYsIGFzIGxvbmcgYXMgdGhleSBhcmUKKyAgIHJlYWNoYWJsZSBmcm9tIGEgcmVmLCB3aXRoIHVwbG9hZHBhY2suYWxsb3dSZWFjaGFibGVTSEExSW5XYW50CisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IGNhdC1maWxlIC0tYmF0Y2goLWNoZWNrKSIgbGVhcm5lZCB0aGUgIi0tZm9sbG93LXN5bWxpbmtzIgorICAgb3B0aW9uIHRoYXQgZm9sbG93cyBhbiBpbi10cmVlIHN5bWJvbGljIGxpbmsgd2hlbiBhc2tlZCBhYm91dCBhbgorICAgb2JqZWN0IHZpYSBleHRlbmRlZCBTSEEtMSBzeW50YXgsIGUuZy4gSEVBRDpSZWxOb3RlcyB0aGF0IHBvaW50cyBhdAorICAgRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMC50eHQuICBXaXRoIHRoZSBuZXcgb3B0aW9uLCB0aGUgY29tbWFuZAorICAgYmVoYXZlcyBhcyBpZiBIRUFEOkRvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0IHdhcyBnaXZlbiBhcworICAgaW5wdXQgaW5zdGVhZC4KKworICAgQ29uc2lkZXIgdGhpcyBhcyBzdGlsbCBhbiBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgZmVhdHVyZToKKworICAgIC0gV2UgbWF5IHdhbnQgdG8gZG8gdGhlIHNhbWUgZm9yIGluLWluZGV4IG9iamVjdHMsIGUuZy4KKyAgICAgIGFza2luZyBmb3IgOlJlbE5vdGVzIHdpdGggdGhpcyBvcHRpb24gc2hvdWxkIGdpdmUKKyAgICAgIDpEb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dCwgdG9vCisKKyAgICAtICJnaXQgY2F0LWZpbGUgLS1mb2xsb3ctc3ltbGlua3MgYmxvYiBIRUFEOlJlbE5vdGVzIgorICAgICAgbWF5IGFsc28gYmUgc29tZXRoaW5nIHdlIHdhbnQgdG8gYWxsb3cgaW4gdGhlIGZ1dHVyZS4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIHRoZSBhbGlhcyBmaWxlIGZvcm1hdCB1c2VkIGJ5IHRoZSBzZW5kbWFpbAorICAgcHJvZ3JhbSAoaW4gYSBzaW1wbGlmaWVkIGZvcm07IHdlIG9idmlvdXNseSBkbyBub3QgZmVlZCBwaXBlcykuCisKKyAqIFRyYWRpdGlvbmFsbHksIGV4dGVybmFsIGxvdy1sZXZlbCAzLXdheSBtZXJnZSBkcml2ZXJzIGFyZSBleHBlY3RlZAorICAgdG8gcHJvZHVjZSB0aGVpciByZXN1bHRzIGJhc2VkIHNvbGVseSBvbiB0aGUgY29udGVudHMgb2YgdGhlIHRocmVlCisgICB2YXJpYW50cyBnaXZlbiBpbiB0ZW1wb3JhcnkgZmlsZXMgbmFtZWQgYnkgJU8sICVBIGFuZCAlQiBvbiB0aGVpcgorICAgY29tbWFuZCBsaW5lLiAgQWRkaXRpb25hbGx5IGFsbG93IHRoZW0gdG8gbG9vayBhdCB0aGUgZmluYWwgcGF0aAorICAgKGdpdmVuIGJ5ICVQKS4KKworICogImdpdCBibGFtZSIgbGVhcm5lZCBibGFtZS5zaG93RW1haWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCBhcHBseSIgY2Fubm90IGRpYWdub3NlIGEgcGF0Y2ggY29ycnVwdGlvbiB3aGVuIHRoZSBicmVha2FnZSBpcworICAgdG8gbWFyayB0aGUgbGVuZ3RoIG9mIHRoZSBodW5rIHNob3J0ZXIgdGhhbiBpdCByZWFsbHkgaXMgb24gdGhlCisgICBodW5rIGhlYWRlciBsaW5lICJAQCAtbCxrICttLG4gQEAiOyBvbmUgc3BlY2lhbCBjYXNlIGl0IGNvdWxkIGlzCisgICB3aGVuIHRoZSBodW5rIGJlY29tZXMgbm8tb3AgKGUuZy4gayA9PSBuID09IDIgZm9yIHR3by1saW5lIGNvbnRleHQKKyAgIHBhdGNoIG91dHB1dCksIGFuZCBpdCBsZWFybmVkIHRvIGRvIHNvIGluIHRoaXMgc3BlY2lhbCBjYXNlLgorCisgKiBBZGQgdGhlICItLWFsbG93LXVua25vd24tdHlwZSIgb3B0aW9uIHRvICJjYXQtZmlsZSIgdG8gYWxsb3cKKyAgIGluc3BlY3RpbmcgbG9vc2Ugb2JqZWN0cyBvZiBhbiBleHBlcmltZW50YWwgb3IgYSBicm9rZW4gdHlwZS4KKworICogTWFueSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9ucyBzaG93IHByb2dyZXNzIGV5ZS1jYW5keSwgZXZlbiB3aGVuCisgICB0aGV5IGFyZSBsYXRlciBiYWNrZ3JvdW5kZWQuICBIaWRlIHRoZSBleWUtY2FuZHkgd2hlbiB0aGUgcHJvY2VzcworICAgaXMgc2VudCB0byB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkLgorICAgKG1lcmdlIGE0ZmI3NmMgbG0vc3F1ZWxjaC1iZy1wcm9ncmVzcyBsYXRlciB0byBtYWludCkuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogInVuc2lnbmVkIGNoYXIgWzIwXSIgdXNlZCB0aHJvdWdob3V0IHRoZSBjb2RlIHRvIHJlcHJlc2VudCBvYmplY3QKKyAgIG5hbWVzIGFyZSBiZWluZyBjb252ZXJ0ZWQgaW50byBhIHNlbWktb3BhcXVlICJzdHJ1Y3Qgb2JqZWN0X2lkIi4KKyAgIFRoaXMgZWZmb3J0IGlzIGV4cGVjdGVkIHRvIGludGVyZmVyZSB3aXRoIG90aGVyIHRvcGljcyBpbiBmbGlnaHQsCisgICBidXQgaG9wZWZ1bGx5IHdpbGwgZ2l2ZSB1cyBvbmUgZXh0cmEgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gaW4gdGhlCisgICBlbmQsIHdoZW4gY29tcGxldGVkLgorCisgKiBmb3JfZWFjaF9yZWYoKSBjYWxsYmFjayBmdW5jdGlvbnMgd2VyZSB0YXVnaHQgdG8gbmFtZSB0aGUgb2JqZWN0cworICAgbm90IHdpdGggInVuc2lnbmVkIGNoYXIgc2hhMVsyMF0iIGJ1dCB3aXRoICJzdHJ1Y3Qgb2JqZWN0X2lkIi4KKworICogQ2F0Y2ggYSBwcm9ncmFtbWVyIG1pc3Rha2UgdG8gZmVlZCBhIHBvaW50ZXIgbm90IGFuIGFycmF5IHRvCisgICBBUlJBWV9TSVpFKCkgbWFjcm8sIGJ5IHVzaW5nIGEgY291cGxlIG9mIEdDQyBleHRlbnNpb25zLgorCisgKiBTb21lIGVycm9yIG1lc3NhZ2VzIGluICJnaXQgY29uZmlnIiB3ZXJlIGVtaXR0ZWQgd2l0aG91dCBjYWxsaW5nCisgICB0aGUgdXN1YWwgZXJyb3IoKSBmYWNpbGl0eS4KKworICogV2hlbiAiYWRkLS1pbnRlcmFjdGl2ZSIgc3BsaXRzIGEgaHVuayBpbnRvIHR3byBvdmVybGFwcGluZyBodW5rcworICAgYW5kIHRoZW4gbGV0IHRoZSB1c2VyIGNob29zZSBvbmx5IG9uZSwgaXQgc29tZXRpbWVzIGZlZWRzIGFuCisgICBpbmNvcnJlY3QgcGF0Y2ggdGV4dCB0byAiZ2l0IGFwcGx5Ii4gIEFkZCB0ZXN0cyB0byBkZW1vbnN0cmF0ZQorICAgdGhpcy4KKworICAgSSBoYXZlIGEgc2xpZ2h0IHN1c3BpY2lvbiB0aGF0IHRoaXMgbWF5IGJlCisgICBjZi4gPDd2dHpmNzd3anAuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnPiBjb21pbmcgYmFjaworICAgYW5kIGJpdGluZyB1cyAoSSBzZWVtIHRvIGhhdmUgc2FpZCAibGV0J3MgcnVuIHdpdGggdGhpcyBhbmQgc2VlCisgICB3aGF0IGhhcHBlbnMiIGJhY2sgdGhlbikuCisKKyAqIE1vcmUgbGluZS1lbmRpbmcgdGVzdHMuCisKKyAqIEFuIGVhcmxpZXIgcmV3cml0ZSB0byB1c2Ugc3RyYnVmX2dldHdob2xlbGluZSgpIGluc3RlYWQgb2YgZmdldHMoMykKKyAgIHRvIHJlYWQgcGFja2VkLXJlZnMgZmlsZSByZXZlYWxlZCB0aGF0IHRoZSBmb3JtZXIgaXMgdW5hY2NlcHRhYmx5CisgICBpbmVmZmljaWVudC4gIEl0IGhhcyBiZWVuIG9wdGltaXplZCBieSB1c2luZyBnZXRkZWxpbSgzKSB3aGVuCisgICBhdmFpbGFibGUuCisKKyAqIFRoZSByZWZzIEFQSSB1c2VzIHJlZl9sb2NrIHN0cnVjdCB3aGljaCBoYWQgaXRzIG93biAiaW50IGZkIiwgZXZlbgorICAgdGhvdWdoIHRoZSBzYW1lIGZpbGUgZGVzY3JpcHRvciB3YXMgaW4gdGhlIGxvY2sgc3RydWN0IGl0IGNvbnRhaW5zLgorICAgQ2xlYW4tdXAgdGhlIGNvZGUgdG8gbG9zZSB0aGlzIHJlZHVuZGFudCBmaWVsZC4KKworICogVGhlcmUgd2FzIGEgZGVhZCBjb2RlIHRoYXQgdXNlZCB0byBoYW5kbGUgImdpdCBwdWxsIC0tdGFncyIgYW5kCisgICBzaG93IHNwZWNpYWwtY2FzZWQgZXJyb3IgbWVzc2FnZSwgd2hpY2ggd2FzIG1hZGUgaXJyZWxldmFudCB3aGVuCisgICB0aGUgc2VtYW50aWNzIG9mIHRoZSBvcHRpb24gY2hhbmdlZCBiYWNrIGluIEdpdCAxLjkgZGF5cy4KKyAgIChtZXJnZSAxOWQxMjJiIHB0L3B1bGwtdGFncy1lcnJvci1kaWFnIGxhdGVyIHRvIG1haW50KS4KKworICogSGVscCB1cyB0byBmaW5kIGJyb2tlbiB0ZXN0IHNjcmlwdCB0aGF0IHNwbGl0cyB0aGUgYm9keSBwYXJ0IG9mIHRoZQorICAgdGVzdCBieSBtaXN0YWtlbiB1c2Ugb2Ygd3Jvbmcga2luZCBvZiBxdW90ZXMuCisgICAobWVyZ2UgZDkzZDVkNSBqYy90ZXN0LXByZXJlcS12YWxpZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIERldmVsb3BlciBzdXBwb3J0IHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGJyb2tlbiAmJi1jaGFpbiBpbiB0aGUKKyAgIHRlc3Qgc2NyaXB0cyBpcyBub3cgdHVybmVkIG9uIGJ5IGRlZmF1bHQuCisgICAobWVyZ2UgOTJiMjY5ZiBqay90ZXN0LWNoYWluLWxpbnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBFcnJvciByZXBvcnRpbmcgbWVjaGFuaXNtIHVzZWQgaW4gInJlZnMiIEFQSSBoYXMgYmVlbiBtYWRlIG1vcmUKKyAgIGNvbnNpc3RlbnQuCisKKyAqICJnaXQgcHVsbCIgaGFzIG1vcmUgdGVzdCBjb3ZlcmFnZSBub3cuCisKKyAqICJnaXQgcHVsbCIgaGFzIGJlY29tZSBtb3JlIGF3YXJlIG9mIHRoZSBvcHRpb25zIG1lYW50IGZvcgorICAgdW5kZXJseWluZyAiZ2l0IGZldGNoIiBhbmQgdGhlbiBsZWFybmVkIHRvIHVzZSBwYXJzZS1vcHRpb25zCisgICBwYXJzZXIuCisKKyAqIENsYXJpZnkgaW4gdGhlIE1ha2VmaWxlIGEgZ3VpZGVsaW5lIHRvIGRlY2lkZSB1c2Ugb2YgVVNFX05TRUMuCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjQKKy0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi40IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqIEdpdCAyLjQgYnJva2Ugc2V0dGluZyB2ZXJib3NpdHkgYW5kIHByb2dyZXNzIGxldmVscyBvbiAiZ2l0IGNsb25lIgorICAgd2l0aCBuYXRpdmUgdHJhbnNwb3J0cy4KKyAgIChtZXJnZSA4MjJmMGM0IG1oL2Nsb25lLXZlcmJvc2l0eS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFkZCAtZSIgZGlkIG5vdCBhbGxvdyB0aGUgdXNlciB0byBhYm9ydCB0aGUgb3BlcmF0aW9uIGJ5CisgICBraWxsaW5nIHRoZSBlZGl0b3IuCisgICAobWVyZ2UgY2I2NDgwMCBqay9hZGQtZS1raWxsLWVkaXRvciBsYXRlciB0byBtYWludCkuCisKKyAqIE1lbW9yeSB1c2FnZSBvZiAiZ2l0IGluZGV4LXBhY2siIGhhcyBiZWVuIHRyaW1tZWQgYnkgdGVucyBvZgorICAgcGVyLWNlbnQuCisgICAobWVyZ2UgZjBlN2YxMSBuZC9zbGltLWluZGV4LXBhY2stbWVtb3J5LXVzYWdlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXYtbGlzdCAtLW9iamVjdHMgJG9sZCAtLW5vdCAtLWFsbCIgdG8gc2VlIGlmIGV2ZXJ5dGhpbmcgdGhhdAorICAgaXMgcmVhY2hhYmxlIGZyb20gJG9sZCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byB0aGUgZXhpc3RpbmcgcmVmcworICAgd2FzIHZlcnkgaW5lZmZpY2llbnQuCisgICAobWVyZ2UgYjZlOGEzYiBqay9zdGlsbC1pbnRlcmVzdGluZyBsYXRlciB0byBtYWludCkuCisKKyAqICJoYXNoLW9iamVjdCAtLWxpdGVyYWxseSIgaW50cm9kdWNlZCBpbiB2Mi4yIHdhcyBub3QgcHJlcGFyZWQgdG8KKyAgIHRha2UgYSByZWFsbHkgbG9uZyBvYmplY3QgdHlwZSBuYW1lLgorICAgKG1lcmdlIDE0MjdhN2YgamMvaGFzaC1vYmplY3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtLXF1aWV0IiB3YXMgbm90IHF1aXRlIHF1aWV0IHdoZW4gdGhlcmUgaXMgbm90aGluZyB0bworICAgZG8uCisgICAobWVyZ2UgMjI5NDZhOSBqay9yZWJhc2UtcXVpZXQtbm9vcCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb21wbGV0aW9uIGZvciAibG9nIC0tZGVjb3JhdGU9IiBwYXJhbWV0ZXIgdmFsdWUgd2FzIGluY29ycmVjdC4KKyAgIChtZXJnZSBhZjE2YmRhIHNnL2NvbXBsZXRlLWRlY29yYXRlLWZ1bGwtbm90LWxvbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZmlsdGVyLWJyYW5jaCIgY29ycnVwdGVkIGNvbW1pdCBsb2cgbWVzc2FnZSB0aGF0IGVuZHMgd2l0aCBhbgorICAgaW5jb21wbGV0ZSBsaW5lIG9uIHBsYXRmb3JtcyB3aXRoIHNvbWUgInNlZCIgaW1wbGVtZW50YXRpb25zIHRoYXQKKyAgIG11bmdlIHN1Y2ggYSBsaW5lLiAgV29yayBpdCBhcm91bmQgYnkgYXZvaWRpbmcgdG8gdXNlICJzZWQiLgorICAgKG1lcmdlIGRmMDYyMDEgamsvZmlsdGVyLWJyYW5jaC11c2Utb2Ytc2VkLW9uLWluY29tcGxldGUtbGluZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGFlbW9uIiBmYWlscyB0byBidWlsZCBmcm9tIHRoZSBzb3VyY2UgdW5kZXIgTk9fSVBWNgorICAgY29uZmlndXJhdGlvbiAocmVncmVzc2lvbiBpbiAyLjQpLgorICAgKG1lcmdlIGQzNThmNzcgamMvZGFlbW9uLW5vLWlwdjYtZm9yLTIuNC4xIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSB0aW1lIGFnbywgImdpdCBibGFtZSIgKGluY29ycmVjdGx5KSBsb3N0IHRoZSBjb252ZXJ0X3RvX2dpdCgpCisgICBjYWxsIHdoZW4gc3ludGhlc2l6aW5nIGEgZmFrZSAidGlwIiBjb21taXQgdGhhdCByZXByZXNlbnRzIHRoZQorICAgc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2hpY2ggYnJva2UgZm9sa3Mgd2hvIHJlY29yZCB0aGUgaGlzdG9yeQorICAgd2l0aCBMRiBsaW5lIGVuZGluZyB0byBtYWtlIHRoZWlyIHByb2plY3QgcG9ydGFibGUgYWNyb3NzIHBsYXRmb3JtcworICAgd2hpbGUgdGVybWluYXRpbmcgbGluZXMgaW4gdGhlaXIgd29ya2luZyB0cmVlIGZpbGVzIHdpdGggQ1JMRiBmb3IKKyAgIHRoZWlyIHBsYXRmb3JtLgorICAgKG1lcmdlIDRiZjI1NmQgdGIvYmxhbWUtcmVzdXJyZWN0LWNvbnZlcnQtdG8tZ2l0IGxhdGVyIHRvIG1haW50KS4KKworICogV2UgYXZvaWQgc2V0dGluZyBjb3JlLndvcmt0cmVlIHdoZW4gdGhlIHJlcG9zaXRvcnkgbG9jYXRpb24gaXMgdGhlCisgICAiLmdpdCIgZGlyZWN0b3J5IGRpcmVjdGx5IGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSwgYnV0CisgICB0aGUgY29kZSBtaXNkZXRlY3RlZCB0aGUgY2FzZSBpbiB3aGljaCB0aGUgd29ya2luZyB0cmVlIGlzIGF0IHRoZQorICAgcm9vdCBsZXZlbCBvZiB0aGUgZmlsZXN5c3RlbSAod2hpY2ggYXJndWFibHkgaXMgYSBzaWxseSB0aGluZyB0bworICAgZG8sIGJ1dCBzdGlsbCB2YWxpZCkuCisgICAobWVyZ2UgODRjY2FkOCBqay9pbml0LWNvcmUtd29ya3RyZWUtYXQtcm9vdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT1ub3ciIG9yIGFueXRoaW5nIHRoYXQgcmVsaWVzIG9uIGFwcHJveGlkYXRlIGxvc3QKKyAgIHRoZSBkYXlsaWdodC1zYXZpbmctdGltZSBvZmZzZXQuCisgICAobWVyZ2UgZjZlNjM2MiBqYy9lcG9jaHRpbWUtd28tdHogbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBY2Nlc3MgdG8gb2JqZWN0cyBpbiByZXBvc2l0b3JpZXMgdGhhdCBib3Jyb3cgZnJvbSBhbm90aGVyIG9uZSBvbiBhCisgICBzbG93IE5GUyBzZXJ2ZXIgdW5uZWNlc3NhcmlseSBnb3QgbW9yZSBleHBlbnNpdmUgZHVlIHRvIHJlY2VudCBjb2RlCisgICBiZWNvbWluZyBtb3JlIGNhdXRpb3VzIGluIGEgbmFpdmUgd2F5IG5vdCB0byBsb3NlIG9iamVjdHMgdG8gcHJ1bmluZy4KKyAgIChtZXJnZSBlZTFjNmMzIGprL3BydW5lLW10aW1lIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGVwYXRocyB0aGF0IHJlYWQgLmdpdGlnbm9yZSBhbmQgLmdpdGF0dHJpYnV0ZXMgZmlsZXMgaGF2ZSBiZWVuCisgICB0YXVnaHQgdGhhdCB0aGVzZSBmaWxlcyBlbmNvZGVkIGluIFVURi04IG1heSBoYXZlIFVURi04IEJPTSBtYXJrZXIgYXQKKyAgIHRoZSBiZWdpbm5pbmc7IHRoaXMgbWFrZXMgaXQgaW4gbGluZSB3aXRoIHdoYXQgd2UgZG8gZm9yIGNvbmZpZ3VyYXRpb24KKyAgIGZpbGVzIGFscmVhZHkuCisgICAobWVyZ2UgMjc1NDdlNSBjbi9ib20taW4tZ2l0aWdub3JlIGxhdGVyIHRvIG1haW50KS4KKworICogYSBmZXcgaGVscGVyIHNjcmlwdHMgaW4gdGhlIHRlc3Qgc3VpdGUgZGlkIG5vdCByZXBvcnQgZXJyb3JzCisgICBjb3JyZWN0bHkuCisgICAobWVyZ2UgZGUyNDhlOSBlcC9maXgtdGVzdC1saWItZnVuY3Rpb25zLXJlcG9ydCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBkZWZhdWx0ICRIT01FLy5naXRjb25maWcgZmlsZSBjcmVhdGVkIHVwb24gImdpdCBjb25maWcgLS1nbG9iYWwiCisgICB0aGF0IGVkaXRzIGl0IGhhZCBpbmNvcnJlY3RseSBzcGVsbGVkIHVzZXIubmFtZSBhbmQgdXNlci5lbWFpbAorICAgZW50cmllcyBpbiBpdC4KKyAgIChtZXJnZSA3ZTExMDUyIG9oL2ZpeC1jb25maWctZGVmYXVsdC11c2VyLW5hbWUtc2VjdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2F0LWZpbGUgYmwgJGJsb2IiIGZhaWxlZCB0byBiYXJmIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIG5vCisgICBvYmplY3QgdHlwZSB0aGF0IGlzICJibCIuCisgICAobWVyZ2UgYjc5OTRhZiBqay90eXBlLWZyb20tc3RyaW5nLWdlbnRseSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB1c3VhbCAiZ2l0IGRpZmYiIHdoZW4gc2VlaW5nIGEgZmlsZSB0dXJuaW5nIGludG8gYSBkaXJlY3RvcnkKKyAgIHNob3dlZCBhIHBhdGNoc2V0IHRvIHJlbW92ZSB0aGUgZmlsZSBhbmQgY3JlYXRlIGFsbCBmaWxlcyBpbiB0aGUKKyAgIGRpcmVjdG9yeSwgYnV0ICJnaXQgZGlmZiAtLW5vLWluZGV4IiBzaW1wbHkgcmVmdXNlZCB0byB3b3JrLiAgQWxzbywKKyAgIHdoZW4gYXNrZWQgdG8gY29tcGFyZSBhIGZpbGUgYW5kIGEgZGlyZWN0b3J5LCBpbWl0YXRlIFBPU0lYICJkaWZmIgorICAgYW5kIGNvbXBhcmUgdGhlIGZpbGUgd2l0aCB0aGUgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gdGhlCisgICBkaXJlY3RvcnksIGluc3RlYWQgb2YgcmVmdXNpbmcgdG8gcnVuLgorICAgKG1lcmdlIDA2MTUxNzMgamMvZGlmZi1uby1pbmRleC1kLWYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbW92ZWQgdGhlICJjdXJyZW50IiBjb21tYW5kIGZyb20gInRvZG8iIHRvICJkb25lIiBhCisgICBiaXQgdG9vIHByZW1hdHVyZWx5LCBsb3NpbmcgYSBzdGVwIHdoZW4gYSAicGljayIgZGlkIG5vdCBldmVuIHN0YXJ0LgorICAgKG1lcmdlIDhjYmM1N2MgcGgvcmViYXNlLWktcmVkbyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb25uZWN0aW9uIGluaXRpYXRpb24gY29kZSBmb3IgInNzaCIgdHJhbnNwb3J0IHRyaWVkIHRvIGFic29yYgorICAgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc3RvY2sgInNzaCIgYW5kIFB1dHR5LXN1cHBsaWVkICJwbGluayIgYW5kCisgICBpdHMgZGVyaXZhdGl2ZXMsIGJ1dCB0aGUgbG9naWMgdG8gdGVsbCB0aGF0IHdlIGFyZSB1c2luZyAicGxpbmsiCisgICB2YXJpYW50cyB3ZXJlIHRvbyBsb29zZSBhbmQgZmFsc2VseSB0cmlnZ2VyZWQgd2hlbiAicGxpbmsiIGFwcGVhcmVkCisgICBhbnl3aGVyZSBpbiB0aGUgcGF0aCAoZS5nLiAiL2hvbWUvbWUvYmluL3VwbGluay9zc2giKS4KKyAgIChtZXJnZSBiYWFmMjMzIGJjL2Nvbm5lY3QtcGxpbmsgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBoYXZlIHByZXBlbmRlZCAkR0lUX0VYRUNfUEFUSCBhbmQgdGhlIHBhdGggImdpdCIgaXMgaW5zdGFsbGVkIGluCisgICAodHlwaWNhbGx5ICIvdXNyL2JpbiIpIHRvICRQQVRIIHdoZW4gaW52b2tpbmcgc3VicHJvZ3JhbXMgYW5kIGhvb2tzCisgICBmb3IgYWxtb3N0IGV0ZXJuaXR5LCBidXQgdGhlIG9yaWdpbmFsIHVzZSBjYXNlIHRoZSBsYXR0ZXIgdHJpZWQgdG8KKyAgIHN1cHBvcnQgd2FzIHNlbWktYm9ndXMgKGkuZS4gaW5zdGFsbCBnaXQgdG8gL29wdC9mb28vZ2l0IGFuZCBydW4gaXQKKyAgIHdpdGhvdXQgaGF2aW5nIC9vcHQvZm9vIG9uICRQQVRIKSwgYW5kIG1vcmUgaW1wb3J0YW50bHkgaXQgaGFzCisgICBiZWNvbWUgbGVzcyBhbmQgbGVzcyByZWxldmFudCBhcyBHaXQgZ3JldyBtb3JlIG1haW5zdHJlYW0gKGkuZS4gdGhlCisgICB1c2VycyB3b3VsZCBfd2FudF8gdG8gaGF2ZSBpdCBvbiB0aGVpciAkUEFUSCkuICBTdG9wIHByZXBlbmRpbmcgdGhlCisgICBwYXRoIGluIHdoaWNoICJnaXQiIGlzIGluc3RhbGxlZCB0byB1c2VycycgJFBBVEgsIGFzIHRoYXQgd291bGQKKyAgIGludGVyZmVyZSB0aGUgY29tbWFuZCBzZWFyY2ggb3JkZXIgcGVvcGxlIGRlcGVuZCBvbiAoZS5nLiB0aGV5IG1heQorICAgbm90IGxpa2UgdmVyc2lvbnMgb2YgcHJvZ3JhbXMgdGhhdCBhcmUgdW5yZWxhdGVkIHRvIEdpdCBpbiAvdXNyL2JpbgorICAgYW5kIHdhbnQgdG8gb3ZlcnJpZGUgdGhlbSBieSBoYXZpbmcgZGlmZmVyZW50IG9uZXMgaW4gL3Vzci9sb2NhbC9iaW4KKyAgIGFuZCBoYXZlIHRoZSBsYXR0ZXIgZGlyZWN0b3J5IGVhcmxpZXIgaW4gdGhlaXIgJFBBVEgpLgorICAgKG1lcmdlIGEwYjQ1MDcgamsvZ2l0LW5vLW1vcmUtYXJndjAtcGF0aC1tdW5naW5nIGxhdGVyIHRvIG1haW50KS4KKworICogY29yZS5leGNsdWRlc2ZpbGUgKGRlZmF1bHRpbmcgdG8gJFhER19IT01FL2dpdC9pZ25vcmUpIGlzIHN1cHBvc2VkCisgICB0byBiZSBvdmVycmlkZGVuIGJ5IHJlcG9zaXRvcnktc3BlY2lmaWMgLmdpdC9pbmZvL2V4Y2x1ZGUgZmlsZSwgYnV0CisgICB0aGUgb3JkZXIgd2FzIHN3YXBwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIGJlbGF0ZWRseSBmaXhlcyBpdC4KKyAgIChtZXJnZSAwOTlkMmQ4IGpjL2dpdGlnbm9yZS1wcmVjZWRlbmNlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlcmUgd2FzIGEgY29tbWVudGVkLW91dCAoaW5zdGVhZCBvZiBiZWluZyBtYXJrZWQgdG8gZXhwZWN0CisgICBmYWlsdXJlKSB0ZXN0IHRoYXQgZG9jdW1lbnRlZCBhIGJyZWFrYWdlIHRoYXQgd2FzIGZpeGVkIHNpbmNlIHRoZQorICAgdGVzdCB3YXMgd3JpdHRlbjsgdHVybiBpdCBpbnRvIGEgcHJvcGVyIHRlc3QuCisgICAobWVyZ2UgNjZkMmUwNCBzYi90MTAyMC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJsb2cgLS1kZWNvcmF0ZSIgZW5oYW5jZW1lbnQgaW4gR2l0IDIuNCB0aGF0IHNob3dzIHRoZSBjb21taXQKKyAgIGF0IHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGUuZy4gIkhFQUQgLT4gbWFzdGVyIiwgZGlkIG5vdAorICAgd29yayB3aXRoIC0tZGVjb3JhdGU9ZnVsbC4KKyAgIChtZXJnZSA0MjlhZDIwIG1nL2xvZy1kZWNvcmF0ZS1IRUFEIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlZiBBUEkgZGlkIG5vdCBoYW5kbGUgY2FzZXMgd2hlcmUgJ3JlZnMvaGVhZHMveHl6enkvZnJvdHonIGlzCisgICByZW1vdmVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgJ3JlZnMvaGVhZHMveHl6enknIGlzIGFkZGVkIChvciB2aWNlCisgICB2ZXJzYSkgdmVyeSB3ZWxsLgorICAgKG1lcmdlIGM2MjhlZGYgbWgvcmVmLWRpcmVjdG9yeS1maWxlIGxhdGVyIHRvIG1haW50KS4KKworICogTXVsdGktcmVmIHRyYW5zYWN0aW9uIHN1cHBvcnQgd2UgbWVyZ2VkIGEgZmV3IHJlbGVhc2VzIGFnbworICAgdW5uZWNlc3NhcmlseSBrZXB0IG1hbnkgZmlsZSBkZXNjcmlwdG9ycyBvcGVuLCByaXNraW5nIHRvIGZhaWwgd2l0aAorICAgcmVzb3VyY2UgZXhoYXVzdGlvbi4gIFRoaXMgaXMgZm9yIDIuNC54IHRyYWNrLgorICAgKG1lcmdlIDE4NWNlM2EgbWgvd3JpdGUtcmVmcy1zb29uZXItMi40IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBidW5kbGUgdmVyaWZ5IiBkaWQgbm90IGRpYWdub3NlIGV4dHJhIHBhcmFtZXRlcnMgb24gdGhlCisgICBjb21tYW5kIGxpbmUuCisgICAobWVyZ2UgNzg4NmNmYSBwcy9idW5kbGUtdmVyaWZ5LWFyZyBsYXRlciB0byBtYWludCkuCisKKyAqIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiBtYXJrLXVwIGZpeGVzIHRvIG1ha2UgdGhlIG91dHB1dCBtb3JlCisgICBjb25zaXN0ZW50IGluIGdlbmVyYWwgYW5kIGFsc28gbWFrZSBBc2NpaURvY3RvciAoYW4gYWx0ZXJuYXRpdmUKKyAgIGZvcm1hdHRlcikgaGFwcGllci4KKyAgIChtZXJnZSBkMDI1OGI5IGprL2FzY2lpZG9jLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFkMzk2N2Egamsvc3RyaXBzcGFjZS1hc2NpaWRvY3Rvci1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDk3NWUzODIgamEvdHV0b3JpYWwtYXNjaWlkb2N0b3ItZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdG8gcmVhZCBwYWNrLWJpdG1hcCB3YW50ZWQgdG8gYWxsb2NhdGUgYSBmZXcgaHVuZHJlZAorICAgcG9pbnRlcnMgdG8gYSBzdHJ1Y3R1cmUsIGJ1dCBieSBtaXN0YWtlIGFsbG9jYXRlZCBhbmQgbGVha2VkIG1lbW9yeQorICAgZW5vdWdoIHRvIGhvbGQgdGhhdCBtYW55IGFjdHVhbCBzdHJ1Y3R1cmVzLiAgQ29ycmVjdCB0aGUgYWxsb2NhdGlvbgorICAgc2l6ZSBhbmQgYWxzbyBoYXZlIGl0IG9uIHN0YWNrLCBhcyBpdCBpcyBzbWFsbCBlbm91Z2guCisgICAobWVyZ2UgNTk5ZGM3NiBycy9wbHVnLWxlYWstaW4tcGFjay1iaXRtYXBzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHB1bGwuZmYgY29uZmlndXJhdGlvbiB3YXMgc3VwcG9zZWQgdG8gb3ZlcnJpZGUgdGhlIG1lcmdlLmZmCisgICBjb25maWd1cmF0aW9uLCBidXQgaXQgZGlkbid0LgorICAgKG1lcmdlIGRiOWJiMjggcHQvcHVsbC1mZi12cy1tZXJnZS1mZiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVsbCAtLWxvZyIgYW5kICJnaXQgcHVsbCAtLW5vLWxvZyIgd29ya2VkIGFzIGV4cGVjdGVkLCBidXQKKyAgICJnaXQgcHVsbCAtLWxvZz0yMCIgZGlkIG5vdC4KKyAgIChtZXJnZSA1MDYxYTQ0IHB0L3B1bGwtbG9nLW4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlcmVyZSBmb3JnZXQiIGluIGEgcmVwb3NpdG9yeSB3aXRob3V0IHJlcmVyZSBlbmFibGVkIGdhdmUgYQorICAgY3J5cHRpYyBlcnJvciBtZXNzYWdlOyBpdCBzaG91bGQgYmUgYSBzaWxlbnQgbm8tb3AgaW5zdGVhZC4KKyAgIChtZXJnZSAwNTQ0NTc0IGprL3JlcmVyZS1mb3JnZXQtY2hlY2stZW5hYmxlZCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBmaXJlZCBwb3N0LXJld3JpdGUgaG9vayB3aGVuIGl0IHNob3VsZG4ndCAobmFtZWx5LAorICAgd2hlbiBpdCB3YXMgdG9sZCB0byBzdG9wIHNlcXVlbmNpbmcgd2l0aCAnZXhlYycgaW5zbikuCisgICAobWVyZ2UgMTQxZmY4ZiBtbS9yZWJhc2UtaS1wb3N0LXJld3JpdGUtZXhlYyBsYXRlciB0byBtYWludCkuCisKKyAqIENsYXJpZnkgdGhhdCAibG9nIC0tcmF3IiBhbmQgImxvZyAtLWZvcm1hdD1yYXciIGFyZSB1bnJlbGF0ZWQKKyAgIGNvbmNlcHRzLgorICAgKG1lcmdlIDkyZGU5MjEgbW0vbG9nLWZvcm1hdC1yYXctZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogTWFrZSAiZ2l0IHN0YXNoIHNvbWV0aGluZyAtLWhlbHAiIGVycm9yIG91dCwgc28gdGhhdCB1c2VycyBjYW4KKyAgIHNhZmVseSBzYXkgImdpdCBzdGFzaCBkcm9wIC0taGVscCIuCisgICAobWVyZ2UgNWJhMjgzMSBqay9zdGFzaC1vcHRpb25zIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNsZWFuL3NtdWRnZSBpbnRlcmZhY2UgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiBmaWx0ZXJpbmcgYW4KKyAgIGVtcHR5IGNvbnRlbnRzIChmYWlsZWQgYW5kIHRoZW4gcGFzc2VkIHRoZSBlbXB0eSBpbnB1dCB0aHJvdWdoKS4KKyAgIEl0IGNhbiBiZSBhcmd1ZWQgdGhhdCBhIGZpbHRlciB0aGF0IHByb2R1Y2VzIGFueXRoaW5nIGJ1dCBlbXB0eSBmb3IKKyAgIGFuIGVtcHR5IGlucHV0IGlzIG5vbnNlbnNlLCBidXQgaWYgdGhlIHVzZXIgd2FudHMgdG8gZG8gc3RyYW5nZQorICAgdGhpbmdzLCB0aGVuIHdoeSBub3Q/CisgICAobWVyZ2UgZjZhMWUxZSBqaC9maWx0ZXItZW1wdHktY29udGVudHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIEhUVFAgc2VydmVyIGFuZCBodHRwX2JhY2tlbmQgcHJvY2VzcyBjYW4KKyAgIGxlYWQgdG8gYSBkZWFkLWxvY2sgd2hlbiByZWxheWluZyBhIGxhcmdlIHJlZiBuZWdvdGlhdGlvbiByZXF1ZXN0LgorICAgRGlhZ25vc2UgdGhlIHNpdHVhdGlvbiBiZXR0ZXIsIGFuZCBtaXRpZ2F0ZSBpdCBieSByZWFkaW5nIHN1Y2ggYQorICAgcmVxdWVzdCBmaXJzdCBpbnRvIGNvcmUgKHRvIGEgcmVhc29uYWJsZSBsaW1pdCkuCisgICAobWVyZ2UgNjM2NjE0ZiBqay9odHRwLWJhY2tlbmQtZGVhZGxvY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNsZWFuIHBhdGhzcGVjLi4uIiB0cmllZCB0byBsc3RhdCgyKSBhbmQgY29tcGxhaW4gZXZlbiBmb3IKKyAgIHBhdGhzIG91dHNpZGUgdGhlIGdpdmVuIHBhdGhzcGVjLgorICAgKG1lcmdlIDgzOGQ2YTkgZHQvY2xlYW4tcGF0aHNwZWMtZmlsdGVyLXRoZW4tbHN0YXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgImdpdCBwcnVuZSIgdHJhdmVyc2VzIHlvdW5nIHVucmVhY2hhYmxlIG9iamVjdHMgdG8gc2FmZWtlZXAKKyAgIG9sZCBvYmplY3RzIGluIHRoZSByZWFjaGFiaWxpdHkgY2hhaW4gZnJvbSB0aGVtLCB3aGljaCBzb21ldGltZXMKKyAgIGNhdXNlZCBlcnJvciBtZXNzYWdlcyB0aGF0IGFyZSB1bm5lY2Vzc2FyaWx5IGFsYXJtaW5nLgorICAgKG1lcmdlIGNlNGU3YjIgamsvc3F1ZWxjaC1taXNzaW5nLWxpbmstd2FybmluZy1mb3ItdW5yZWFjaGFibGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiByZWFkZXIvd3JpdGVyIHVzZXMgbW1hcCgyKSBpbnRlcmZhY2UgdG8gYWNjZXNzCisgICB0aGUgZmlsZXM7IHdoZW4gd2UgZmluZCBhIGRpcmVjdG9yeSwgaXQgYmFyZmVkIHdpdGggIk91dCBvZiBtZW1vcnk/Ii4KKyAgIChtZXJnZSA5Y2EwYWFmIGprL2RpYWdub3NlLWNvbmZpZy1tbWFwLWZhaWx1cmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiY29sb3IuZGlmZi5wbGFpbiIgd2FzIGEgbWlzbm9tZXI7IGdpdmUgaXQgJ2NvbG9yLmRpZmYuY29udGV4dCcgYXMKKyAgIGEgbW9yZSBsb2dpY2FsIHN5bm9ueW0uCisgICAobWVyZ2UgOGRiZjNlYiBqay9jb2xvci1kaWZmLXBsYWluLWlzLWNvbnRleHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgc2V0dXAgY29kZSB1c2VkIHRvIGRpZSB3aGVuIGNvcmUuYmFyZSBhbmQgY29yZS53b3JrdHJlZSBhcmUgc2V0CisgICBpbmNvbnNpc3RlbnRseSwgZXZlbiBmb3IgY29tbWFuZHMgdGhhdCBkbyBub3QgbmVlZCB3b3JraW5nIHRyZWUuCisgICAobWVyZ2UgZmFkYTc2NyBqay9kaWUtb24tYm9ndXMtd29ya3RyZWUtbGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCBNYWMgT1MgWCB1cGRhdGVzIGJyZWFrcyB0aGUgbG9naWMgdG8gZGV0ZWN0IHRoYXQgdGhlIG1hY2hpbmUKKyAgIGlzIG9uIHRoZSBBQyBwb3dlciBpbiB0aGUgc2FtcGxlIHByZS1hdXRvLWdjIHNjcmlwdC4KKyAgIChtZXJnZSBjNTRjN2IzIHBhL2F1dG8tZ2MtbWFjLW9zeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY29tbWl0IC0tY2xlYW51cD1zY2lzc29ycyIgd2FzIG5vdCBjYXJlZnVsIGVub3VnaCB0byBwcm90ZWN0CisgICBhZ2FpbnN0IGdldHRpbmcgZm9vbGVkIGJ5IGEgbGluZSB0aGF0IGxvb2tlZCBsaWtlIHNjaXNzb3JzLgorICAgKG1lcmdlIGZiZmEwOTcgc2cvY29tbWl0LWNsZWFudXAtc2Npc3NvcnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiSGF2ZSB3ZSBsb3N0IGEgcmFjZSB3aXRoIGNvbXBldGluZyByZXBhY2s/IiBjaGVjayB3YXMgdG9vCisgICBleHBlbnNpdmUsIGVzcGVjaWFsbHkgd2hpbGUgcmVjZWl2aW5nIGEgaHVnZSBvYmplY3QgdHJhbnNmZXIKKyAgIHRoYXQgcnVucyBpbmRleC1wYWNrIChlLmcuICJjbG9uZSIgb3IgImZldGNoIikuCisgICAobWVyZ2UgMGVlYjA3NyBqay9pbmRleC1wYWNrLXJlZHVjZS1yZWNoZWNrIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRjc2ggY29tcGxldGlvbiB3cml0ZXMgYSBiYXNoIHNjcmlwdGxldCBidXQgdGhhdCB3b3VsZCBoYXZlCisgICBmYWlsZWQgZm9yIHVzZXJzIHdpdGggbm9jbG9iYmVyIHNldC4KKyAgIChtZXJnZSAwYjFmNjg4IGFmL3Rjc2gtY29tcGxldGlvbi1ub2Nsb2JiZXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgcmVwb3J0ZWQgIm1pc3Npbmcgb2JqZWN0IiBmb3IgMHs0MH0gd2hlbiBpdAorICAgZW5jb3VudGVycyBhIGJyb2tlbiByZWYuICBUaGUgbGFjayBvZiBvYmplY3Qgd2hvc2UgbmFtZSBpcyAwezQwfSBpcworICAgbm90IHRoZSBwcm9ibGVtOyB0aGUgcmVmIGJlaW5nIGJyb2tlbiBpcy4KKyAgIChtZXJnZSA1MDFjZjQ3IG1oL3JlcG9ydGluZy1icm9rZW4tcmVmcy1mcm9tLWZvci1lYWNoLXJlZiBsYXRlciB0byBtYWludCkuCisKKyAqIFZhcmlvdXMgZml4ZXMgYXJvdW5kICJnaXQgYW0iIHRoYXQgYXBwbGllcyBhIHBhdGNoIHRvIGEgaGlzdG9yeQorICAgdGhhdCBpcyBub3QgdGhlcmUgeWV0LgorICAgKG1lcmdlIDZlYTNiNjcgcHQvYW0tYWJvcnQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmc2NrIiB1c2VkIHRvIGlnbm9yZSBtaXNzaW5nIG9yIGludmFsaWQgb2JqZWN0cyByZWNvcmRlZCBpbiByZWZsb2cuCisgICAobWVyZ2UgMTliZjZjOSBtaC9mc2NrLXJlZmxvZy1lbnRyaWVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtdXBzdHJlYW0gQS4uQiIgZGlkIG5vdCBsaWtlIHRvIGJlIGZlZAorICAgdGFncyBhcyBib3VuZGFyeSBjb21taXRzLgorICAgKG1lcmdlIDliN2E2MWQgamMvZG8tbm90LWZlZWQtdGFncy10by1jbGVhci1jb21taXQtbWFya3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZldGNoIC0tZGVwdGg9PGRlcHRoPiIgYW5kICJnaXQgY2xvbmUgLS1kZXB0aD08ZGVwdGg+IiBpc3N1ZWQKKyAgIGEgc2hhbGxvdyB0cmFuc2ZlciByZXF1ZXN0IGV2ZW4gdG8gYW4gdXBsb2FkLXBhY2sgdGhhdCBkb2VzIG5vdAorICAgc3VwcG9ydCB0aGUgY2FwYWJpbGl0eS4KKyAgIChtZXJnZSBlYjg2YTUwIG1lL2ZldGNoLWludG8tc2hhbGxvdy1zYWZldHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSIgZGlkIG5vdCBleGl0IHdpdGggZmFpbHVyZSB3aGVuIGZvcm1hdC1wYXRjaCBpdCBpbnZva2VkCisgICBmYWlsZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4KKyAgIChtZXJnZSA2MGQ3MDhiIGNiL3JlYmFzZS1hbS1leGl0LWNvZGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGaXggYSBzbWFsbCBidWcgaW4gb3VyIHVzZSBvZiB1bWFzaygpIHJldHVybiB2YWx1ZS4KKyAgIChtZXJnZSAzMDk2YjJlIGprL2ZpeC1yZWZyZXNoLXV0aW1lIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gYW5jaWVudCB0ZXN0IGZyYW1ld29yayBlbmhhbmNlbWVudCB0byBhbGxvdyBjb2xvciB3YXMgbm90CisgICBlbnRpcmVseSBjb3JyZWN0OyB0aGlzIG1ha2VzIGl0IHdvcmsgZXZlbiB3aGVuIHRwdXQgbmVlZHMgdG8gcmVhZAorICAgZnJvbSB0aGUgfi8udGVybWluZm8gdW5kZXIgdGhlIHVzZXIncyByZWFsIEhPTUUgZGlyZWN0b3J5LgorICAgKG1lcmdlIGQ1YzFiN2MgcmgvdGVzdC1jb2xvci1hdm9pZC10ZXJtaW5mby1pbi1vcmlnaW5hbC1ob21lIGxhdGVyIHRvIG1haW50KS4KKworICogQSBtaW5vciBidWdmaXggd2hlbiBwYWNrIGJpdG1hcCBpcyB1c2VkIHdpdGggInJldi1saXN0IC0tY291bnQiLgorICAgKG1lcmdlIGM4YTcwZDMgamsvcmV2LWxpc3Qtbm8tYml0bWFwLXdoaWxlLXBydW5pbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNvbmZpZyIgZmFpbGVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdoZW4gdGhlCisgICB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gaXMgaW5jYXBhYmxlIG9mIHJlbmFtaW5nIGEgZmlsZSB0aGF0IGlzIHN0aWxsCisgICBvcGVuLgorICAgKG1lcmdlIDdhNjQ1OTIga2IvY29uZmlnLXVubWFwLWJlZm9yZS1yZW5hbWluZyBsYXRlciB0byBtYWludCkuCisKKyAqIEF2b2lkIHBvc3NpYmxlIHNzaXplX3QgdG8gaW50IHRydW5jYXRpb24uCisgICAobWVyZ2UgNmM4YWZlNCBtaC9zdHJidWYtcmVhZC1maWxlLXJldHVybnMtc3NpemUtdCBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4geW91IHNheSAiITxFTlRFUj4iIHdoaWxlIHJ1bm5pbmcgc2F5ICJnaXQgbG9nIiwgeW91J2QgY29uZnVzZQorICAgeW91cnNlbGYgaW4gdGhlIHJlc3VsdGluZyBzaGVsbCwgdGhhdCBtYXkgbG9vayBhcyBpZiB5b3UgdG9vaworICAgY29udHJvbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaGVsbCB5b3Ugc3Bhd25lZCAiZ2l0IGxvZyIgZnJvbSBidXQKKyAgIHRoYXQgaXNuJ3Qgd2hhdCBpcyBoYXBwZW5pbmcuICBUbyB0aGF0IG5ldyBzaGVsbCwgd2UgbGVha2VkCisgICBHSVRfUEFHRVJfSU5fVVNFIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgd2FzIG1lYW50IGFzIGEgbG9jYWwKKyAgIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgb3JpZ2luYWwgIkdpdCIgYW5kIHN1YnByb2Nlc3NlcyB0aGF0IHdhcworICAgc3Bhd25lZCBieSBpdCBhZnRlciB3ZSBsYXVuY2hlZCB0aGUgcGFnZXIsIHdoaWNoIGNhdXNlZCBtYW55CisgICAiaW50ZXJlc3RpbmciIHRoaW5ncyB0byBoYXBwZW4sIGUuZy4gImdpdCBkaWZmIHwgY2F0IiBzdGlsbCBwYWludHMKKyAgIGl0cyBvdXRwdXQgaW4gY29sb3IgYnkgZGVmYXVsdC4KKworICAgU3RvcCBsZWFraW5nIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHBhZ2VyJ3MgaGFsZiBvZiB0aGUKKyAgIGZvcms7IHdlIG9ubHkgbmVlZCBpdCBvbiAiR2l0IiBzaWRlIHdoZW4gd2Ugc3Bhd24gdGhlIHBhZ2VyLgorICAgKG1lcmdlIDEyNGI1MTkgamMvdW5leHBvcnQtZ2l0LXBhZ2VyLWluLXVzZS1pbi1wYWdlciBsYXRlciB0byBtYWludCkuCisKKyAqIEFiYW5kb25pbmcgYW4gYWxyZWFkeSBhcHBsaWVkIGNoYW5nZSBpbiAiZ2l0IHJlYmFzZSAtaSIgd2l0aAorICAgIi0tY29udGludWUiIGxlZnQgQ0hFUlJZX1BJQ0tfSEVBRCBhbmQgY29uZnVzZWQgbGF0ZXIgc3RlcHMuCisgICAobWVyZ2UgMGUwYWZmNCBqcy9yZWJhc2UtaS1jbGVhbi11cC11cG9uLWNvbnRpbnVlLXRvLXNraXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSB1c2VkIHRvIGFzayBsaWJDVVJMIHRvIHVzZSB0aGUgbW9zdCBzZWN1cmUgYXV0aGVudGljYXRpb24gbWV0aG9kCisgICBhdmFpbGFibGUgd2hlbiB0YWxraW5nIHRvIGFuIEhUVFAgcHJveHkgb25seSB3aGVuIHdlIHdlcmUgdG9sZCB0bworICAgdGFsayB0byBvbmUgdmlhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgV2Ugbm93IGFzayBsaWJDVVJMIHRvCisgICBhbHdheXMgdXNlIHRoZSBtb3N0IHNlY3VyZSBhdXRoZW50aWNhdGlvbiBtZXRob2QsIGJlY2F1c2UgdGhlIHVzZXIKKyAgIGNhbiB0ZWxsIGxpYkNVUkwgdG8gdXNlIGFuIEhUVFAgcHJveHkgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlCisgICB3aXRob3V0IHVzaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorICAgKG1lcmdlIDU4NDE1MjAgZXQvaHR0cC1wcm94eWF1dGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGZpeCB0byBhIG1pbm9yIHJlZ3Jlc3Npb24gdG8gImdpdCBmc2NrIiBpbiB2Mi4yIGVyYSB0aGF0IHN0YXJ0ZWQKKyAgIGNvbXBsYWluaW5nIGFib3V0IGEgYm9keS1sZXNzIHRhZyBvYmplY3Qgd2hlbiBpdCBsYWNrcyBhIHNlcGFyYXRvcgorICAgZW1wdHkgbGluZSBhZnRlciBpdHMgaGVhZGVyIHRvIHNlcGFyYXRlIGl0IHdpdGggYSBub24tZXhpc3RlbnQgYm9keS4KKyAgIChtZXJnZSA4NGQxOGMwIGpjL2ZzY2stcmV0aXJlLXJlcXVpcmUtZW9oIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBjbGVhbnVwcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorICAgKG1lcmdlIDAyNjlmOTYgbW0vdXNhZ2UtbG9nLWwtY2FuLXRha2UtcmVnZXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDY0ZjI1ODkgbmQvdDE1MDktY2hyb290LXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQyMDFhMWUgc2IvdGVzdC1iaXRtYXAtZnJlZS1hdC1lbmQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDA1YmZjN2Qgc2IvbGluZS1sb2ctcGx1Zy1wYWlyZGlmZi1sZWFrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4NDZlNWRmIHB0L3hkZy1jb25maWctcGF0aCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTE1NGFhNCBqYy9wbHVnLWZtdC1tZXJnZS1tc2ctbGVhayBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzE5YjY3OCBqay9zaGExLWZpbGUtcmVkdWNlLXVzZWxlc3Mtd2FybmluZ3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDlhMzVjMTQgZmcvZG9jdW1lbnQtY29tbWl0LW1lc3NhZ2Utc3RyaXBwaW5nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiYmY0MzFjIHBzL2RvYy1wYWNrZmlsZS12cy1wYWNrLWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDMwOWE5ZTMgamsvc2tpcC1odHRwLXRlc3RzLXVuZGVyLW5vLWN1cmwgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGNjZDU5M2MgZGwvYnJhbmNoLWVycm9yLW1lc3NhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDIyNTcwYjYgcnMvamFuaXRvcmlhbCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWMyYTU4MSBtYy9jb21taXQtZG9jLWdyYW1tb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2U0MTcyMCBhaC91c2FnZS1zdHJpbmdzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlNmEyNjhjIHNiL2dsb3NzYXJ5LXN1Ym1vZHVsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWM0OGE3NiBzYi9zdWJtb2R1bGUtZG9jLWludHJvIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNGY4YjliIGprL2Nsb25lLWRpc3NvY2lhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDA1NWM3ZTkgc2IvcGFjay1wcm90b2NvbC1tZW50aW9uLXNtYXJ0LWh0dHAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdjMzdhNWQgamsvbWFrZS1maXgtZGVwZW5kZW5jaWVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmYzBhYTM5IHNnL21lcmdlLXN1bW1hcnktY29uZmlnIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzMjlhZjZjIHB0L3QwMzAyLW5lZWRzLXNhbml0eSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDYxNGYwNyBmay9kb2MtZm9ybWF0LXBhdGNoLXZuIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3MmRiYjM2IHNnL2NvbXBsZXRpb24tY29tbWl0LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU2NTRlYjIgZXMvdXRmOC1zdHVwaWQtY29tcGlsZXItd29ya2Fyb3VuZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzRiOTM1YyBlcy9vc3gtaGVhZGVyLXBvbGx1dGVzLW1hc2stbWFjcm8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFiN2ZhZGUgamMvcHJvbXB0LWRvY3VtZW50LXBzMS1zdGF0ZS1zZXBhcmF0b3IgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI1ZjYwMGUgbW0vZGVzY3JpYmUtZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4M2ZlMTY3IG1tL2JyYW5jaC1kb2MtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNzVkMmU1YSBscy9oaW50LXJldi1saXN0LWNvdW50IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlZGM4ZjcxIGNiL3N1YnRyZWUtdGVzdHMtdXBkYXRlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MzMwZTZlIHNiL3A1MzEwLWFuZC1jaGFpbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYzRhYzUyNSB0Yi9jaGVja291dC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU0NzljNWYgamsvcHJldHR5LWVuY29kaW5nLWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2U4MzdjNiBzcy9jbG9uZS1ndWVzcy1kaXItbmFtZS1zaW1wbGlmeSBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MDU1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4xLnR4dApAQCAtMCwwICsxLDY1IEBACitHaXQgdjIuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi41CistLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJ1bm5pbmcgYW4gYWxpYXNlZCBjb21tYW5kIGZyb20gYSBzdWJkaXJlY3Rvcnkgd2hlbiB0aGUgLmdpdCB0aGluZworICAgaW4gdGhlIHdvcmtpbmcgdHJlZSBpcyBhIGdpdGZpbGUgcG9pbnRpbmcgZWxzZXdoZXJlIGRpZCBub3Qgd29yay4KKworICogT2Z0ZW4gYSBmYXN0LWltcG9ydCBzdHJlYW0gYnVpbGRzIGEgbmV3IGNvbW1pdCBvbiB0b3Agb2YgdGhlCisgICBwcmV2aW91cyBjb21taXQgaXQgYnVpbHQsIGFuZCBpdCBvZnRlbiB1bmNvbmRpdGlvbmFsbHkgZW1pdHMgYQorICAgImZyb20iIGNvbW1hbmQgdG8gc3BlY2lmeSB0aGUgZmlyc3QgcGFyZW50LCB3aGljaCBjYW4gYmUgb21pdHRlZCBpbgorICAgc3VjaCBhIGNhc2UuICBUaGlzIGNhdXNlZCBmYXN0LWltcG9ydCB0byBmb3JnZXQgdGhlIHRyZWUgb2YgdGhlCisgICBwcmV2aW91cyBjb21taXQgYW5kIHRoZW4gcmUtcmVhZCBpdCBmcm9tIHNjcmF0Y2gsIHdoaWNoIHdhcworICAgaW5lZmZpY2llbnQuICBPcHRpbWl6ZSBmb3IgdGhpcyBjb21tb24gY2FzZS4KKworICogVGhlICJyZXYtcGFyc2UgLS1wYXJzZW9wdCIgbW9kZSBwYXJzZWQgdGhlIG9wdGlvbiBzcGVjaWZpY2F0aW9uCisgICBhbmQgdGhlIGFyZ3VtZW50IGhpbnQgaW4gYSBzdHJhbmdlIHdheSB0byBhbGxvdyAnPScgYW5kIG90aGVyCisgICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIG9wdGlvbiBuYW1lIHdoaWxlIGZvcmJpZGRpbmcgdGhlbSBmcm9tCisgICB0aGUgYXJndW1lbnQgaGludC4gIFRoaXMgbWFkZSBpdCBpbXBvc3NpYmxlIHRvIGRlZmluZSBhbiBvcHRpb24KKyAgIGxpa2UgIi0tcGFpciA8a2V5Pj08dmFsdWU+IiB3aXRoICJwYWlyPWtleT12YWx1ZSIgc3BlY2lmaWNhdGlvbiwKKyAgIHdoaWNoIGluc3RlYWQgd291bGQgaGF2ZSBkZWZpbmVkIGEgIi0tcGFpcj1rZXkgPHZhbHVlPiIgb3B0aW9uLgorCisgKiBBICJyZWJhc2UiIHJlcGxheXMgY2hhbmdlcyBvZiB0aGUgbG9jYWwgYnJhbmNoIG9uIHRvcCBvZiBzb21ldGhpbmcKKyAgIGVsc2UsIGFzIHN1Y2ggdGhleSBhcmUgcGxhY2VkIGluIHN0YWdlICMzIGFuZCByZWZlcnJlZCB0byBhcworICAgInRoZWlycyIsIHdoaWxlIHRoZSBjaGFuZ2VzIGluIHRoZSBuZXcgYmFzZSwgdHlwaWNhbGx5IGEgZm9yZWlnbgorICAgd29yaywgYXJlIHBsYWNlZCBpbiBzdGFnZSAjMiBhbmQgcmVmZXJyZWQgdG8gYXMgIm91cnMiLiAgQ2xhcmlmeQorICAgdGhlICJjaGVja291dCAtLW91cnMvLS10aGVpcnMiLgorCisgKiBBbiBleHBlcmltZW50YWwgInVudHJhY2tlZCBjYWNoZSIgZmVhdHVyZSB1c2VkIHVuYW1lKDIpIGluIGEKKyAgIHNsaWdodGx5IHVucG9ydGFibGUgd2F5LgorCisgKiAic3BhcnNlIGNoZWNrb3V0IiBtaXNiZWhhdmVkIGZvciBhIHBhdGggdGhhdCBpcyBleGNsdWRlZCBmcm9tIHRoZQorICAgY2hlY2tvdXQgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBicmFuY2hlcyB0aGF0IGRpZmZlciBhdCB0aGUgcGF0aC4KKworICogVGhlIGxvdy1sZXZlbCAiZ2l0IHNlbmQtcGFjayIgZGlkIG5vdCBob25vciAndXNlci5zaWduaW5na2V5JworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3aGVuIHNlbmRpbmcgYSBzaWduZWQtcHVzaC4KKworICogQW4gYXR0ZW1wdCB0byBkZWxldGUgYSByZWYgYnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aG9zZSBIRUFECisgICBzeW1ib2xpYyByZWZlcmVuY2UgcG9pbnRzIGF0IGFuIHVuYm9ybiBicmFuY2ggdGhhdCBjYW5ub3QgYmUKKyAgIGNyZWF0ZWQgZHVlIHRvIHJlZiBEL0YgY29uZmxpY3QgKGUuZy4gcmVmcy9oZWFkcy9hL2IgZXhpc3RzLCBIRUFECisgICBwb2ludHMgYXQgcmVmcy9oZWFkcy9hKSBmYWlsZWQuCisKKyAqICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBkZXBlbmRlZCBvbiAiZ2l0IGxvZyIgb3V0cHV0IHRvIGJlCisgICBzdGFibGUsIHdoaWNoIHdhcyBhIG5vLW5vLiAgQXBwbHkgYSB3b3JrYXJvdW5kIHRvIGZvcmNlIGEKKyAgIHBhcnRpY3VsYXIgZGF0ZSBmb3JtYXQuCisKKyAqICJnaXQgY2xvbmUgJFVSTCIgaW4gcmVjZW50IHJlbGVhc2VzIG9mIEdpdCBjb250YWlucyBhIHJlZ3Jlc3Npb24gaW4KKyAgIHRoZSBjb2RlIHRoYXQgaW52ZW50cyBhIG5ldyByZXBvc2l0b3J5IG5hbWUgaW5jb3JyZWN0bHkgYmFzZWQgb24KKyAgIHRoZSAkVVJMLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZGIyZTIyMCBqay9ndWVzcy1yZXBvLW5hbWUtcmVncmVzc2lvbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSdW5uaW5nIHRlc3RzIHdpdGggdGhlICIteCIgb3B0aW9uIHRvIG1ha2UgdGhlbSB2ZXJib3NlIGhhZCBzb21lCisgICB1bnBsZWFzYW50IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZlYXR1cmVzIG9mIHRoZSB0ZXN0IHN1aXRlLgorICAgKG1lcmdlIDliNWZlNzggamsvdGVzdC13aXRoLXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHB1bGwiIGluIHJlY2VudCByZWxlYXNlcyBvZiBHaXQgaGFzIGEgcmVncmVzc2lvbiBpbiB0aGUgY29kZQorICAgdGhhdCBhbGxvd3MgY3VzdG9tIHBhdGggdG8gdGhlIC0tdXBsb2FkLXBhY2s9PHByb2dyYW0+LiAgVGhpcyBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorCisgKiBwaXBlKCkgZW11bGF0aW9uIHVzZWQgaW4gR2l0IGZvciBXaW5kb3dzIGxvb2tlZCBhdCBhIHdyb25nIHZhcmlhYmxlCisgICB3aGVuIGNoZWNraW5nIGZvciBhbiBlcnJvciBmcm9tIGFuIF9vcGVuX29zZmhhbmRsZSgpIGNhbGwuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjc0OTM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMi50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0IHYyLjUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBpbml0IGVtcHR5ICYmIGdpdCAtQyBlbXB0eSBsb2ciIHNhaWQgImJhZCBkZWZhdWx0IHJldmlzaW9uICdIRUFEJyIsCisgICB3aGljaCB3YXMgZm91bmQgdG8gYmUgYSBiaXQgY29uZnVzaW5nIHRvIG5ldyB1c2Vycy4KKworICogVGhlICJpbnRlcnByZXQtdHJhaWxlcnMiIGhlbHBlciBtaXN0b29rIGEgbXVsdGktcGFyYWdyYXBoIHRpdGxlIG9mCisgICBhIGNvbW1pdCBsb2cgbWVzc2FnZSB3aXRoIGEgY29sb24gaW4gaXQgYXMgdGhlIGVuZCBvZiB0aGUgdHJhaWxlcgorICAgYmxvY2suCisKKyAqIFdoZW4gcmUtcHJpbWluZyB0aGUgY2FjaGUtdHJlZSBvcHBvcnR1bmlzdGljYWxseSB3aGlsZSBjb21taXR0aW5nCisgICB0aGUgaW4tY29yZSBpbmRleCBhcy1pcywgd2UgbWlzdGFrZW5seSBpbnZhbGlkYXRlZCB0aGUgaW4tY29yZQorICAgaW5kZXggdG9vIGFnZ3Jlc3NpdmVseSwgY2F1c2luZyB0aGUgZXhwZXJpbWVudGFsIHNwbGl0LWluZGV4IGNvZGUKKyAgIHRvIHVubmVjZXNzYXJpbHkgcmV3cml0ZSB0aGUgb24tZGlzayBpbmRleCBmaWxlKHMpLgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3QgdXNlIHppcDY0IGV4dGVuc2lvbiB3aGVuIGNyZWF0aW5nIGFuIGFyY2hpdmUKKyAgIHdpdGggbW9yZSB0aGFuIDY0ayBlbnRyaWVzLCB3aGljaCBub2JvZHkgc2hvdWxkIG5lZWQsIHJpZ2h0IDstKT8KKworICogVGhlIGNvZGUgaW4gIm11bHRpcGxlLXdvcmt0cmVlIiBzdXBwb3J0IHRoYXQgYXR0ZW1wdGVkIHRvIHJlY292ZXIKKyAgIGZyb20gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHVwZGF0ZWQgYW4gaW5jb3JyZWN0IGZpbGUuCisKKyAqICJnaXQgcmV2LWxpc3QiIGRvZXMgbm90IHRha2UgIi0tbm90ZXMiIG9wdGlvbiwgYnV0IGRpZCBub3QgY29tcGxhaW4KKyAgIHdoZW4gb25lIGlzIGdpdmVuLgorCisgKiBCZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBhbGxvdyAiYWxpYXMuMGZvbyIgYW5kCisgICAicGFnZXIuMGZvbyIgYXMgdGhlIGNvbmZpZ3VyYXRpb24ga2V5LCB0aGUgdXNlciBjYW5ub3QgdXNlICcwZm9vJworICAgYXMgYSBjdXN0b20gY29tbWFuZCBuYW1lIGFueXdheSwgYnV0ICJnaXQgMGZvbyIgdHJpZWQgdG8gbG9vayB0aGVzZQorICAga2V5cyB1cCBhbmQgZW1pdHRlZCB1c2VsZXNzIHdhcm5pbmdzIGJlZm9yZSBzYXlpbmcgJzBmb28gaXMgbm90IGEKKyAgIGdpdCBjb21tYW5kJy4gIFRoZXNlIHdhcm5pbmcgbWVzc2FnZXMgaGF2ZSBiZWVuIHNxdWVsY2hlZC4KKworICogV2UgcmVjZW50bHkgcmV3cm90ZSBvbmUgb2YgdGhlIGJ1aWxkIHNjcmlwdHMgaW4gUGVybCwgd2hpY2ggbWFkZSBpdAorICAgbmVjZXNzYXJ5IHRvIGhhdmUgUGVybCB0byBidWlsZCBHaXQuICBSZWR1Y2VkIFBlcmwgZGVwZW5kZW5jeSBieQorICAgcmV3cml0aW5nIGl0IGFnYWluIHVzaW5nIHNlZC4KKworICogdDE1MDkgdGVzdCB0aGF0IHJlcXVpcmVzIGEgZGVkaWNhdGVkIFZNIGVudmlyb25tZW50IGhhZCBzb21lCisgICBiaXRyb3QsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogc3RyYnVmX3JlYWQoKSB1c2VkIHRvIGhhdmUgb25lIGV4dHJhIGl0ZXJhdGlvbiAoYW5kIGFuIHVubmVjZXNzYXJ5CisgICBzdHJidWZfZ3JvdygpIG9mIDhrQiksIHdoaWNoIHdhcyBlbGltaW5hdGVkLgorCisgKiBUaGUgY29kZXBhdGggdG8gcHJvZHVjZSBlcnJvciBtZXNzYWdlcyBoYWQgYSBoYXJkLWNvZGVkIGxpbWl0IHRvCisgICB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSwgcHJpbWFyaWx5IHRvIGF2b2lkIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWxlCisgICBjYWxsaW5nIGRpZSgpLgorCisgKiBXaGVuIHRyeWluZyB0byBzZWUgdGhhdCBhbiBvYmplY3QgZG9lcyBub3QgZXhpc3QsIGEgc3RhdGUgZXJybm8KKyAgIGxlYWtlZCBmcm9tIG91ciAiZmlyc3QgdHJ5IHRvIG9wZW4gYSBwYWNrZmlsZSB3aXRoIE9fTk9BVElNRSBhbmQKKyAgIHRoZW4gaWYgaXQgZmFpbHMgcmV0cnkgd2l0aG91dCBpdCIgbG9naWMgb24gYSBzeXN0ZW0gdGhhdCByZWZ1c2VzCisgICBPX05PQVRJTUUuICBUaGlzIGNvbmZ1c2VkIHVzIGFuZCBjYXVzZWQgdXMgdG8gZGllLCBzYXlpbmcgdGhhdCB0aGUKKyAgIHBhY2tmaWxlIGlzIHVucmVhZGFibGUsIHdoZW4gd2Ugc2hvdWxkIGhhdmUganVzdCByZXBvcnRlZCB0aGF0IHRoZQorICAgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoYXQgcGFja2ZpbGUgdG8gdGhlIGNhbGxlci4KKworICogQW4gb2ZmLWJ5LW9uZSBlcnJvciBtYWRlICJnaXQgcmVtb3RlIiB0byBtaXNoYW5kbGUgYSByZW1vdGUgd2l0aCBhCisgICBzaW5nbGUgbGV0dGVyIG5pY2tuYW1lLgorCisgKiBBIGhhbmRmdWwgb2YgY29kZXBhdGhzIHRoYXQgdXNlZCB0byB1c2UgZml4ZWQtc2l6ZWQgYXJyYXlzIHRvIGhvbGQKKyAgIHBhdGhuYW1lcyBoYXZlIGJlZW4gY29ycmVjdGVkIHRvIHVzZSBzdHJidWYgYW5kIG90aGVyIG1lY2hhbmlzbXMgdG8KKyAgIGFsbG93IGxvbmdlciBwYXRobmFtZXMgd2l0aG91dCBmZWFyaW5nIG92ZXJmbG93cy4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNDM2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4zLnR4dApAQCAtMCwwICsxLDE3IEBACitHaXQgdjIuNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZXhwZXJpbWVudGFsIHVudHJhY2tlZC1jYWNoZSBmZWF0dXJlIHdlcmUgYnVnZ3kgd2hlbiBwYXRocyB3aXRoCisgICBhIGZldyBsZXZlbHMgb2Ygc3ViZGlyZWN0b3JpZXMgYXJlIGludm9sdmVkLgorCisgKiBSZWNlbnQgdmVyc2lvbnMgb2Ygc2NyaXB0ZWQgImdpdCBhbSIgaGFzIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbgorICAgaW4gImdpdCBhbSAtLXNraXAiIGNvZGVwYXRoLCB3aGljaCBubyBsb25nZXIgZXhpc3RzIGluIHRoZQorICAgYnVpbHQtaW4gdmVyc2lvbiBvbiB0aGUgJ21hc3RlcicgZnJvbnQuICBGaXggdGhlIHJlZ3Jlc3Npb24gaW4KKyAgIHRoZSBsYXN0IHNjcmlwdGVkIHZlcnNpb24gdGhhdCBhcHBlYXIgaW4gMi41LnggbWFpbnRlbmFuY2UgdHJhY2sKKyAgIGFuZCBvbGRlci4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTJmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS40LnR4dApAQCAtMCwwICsxLDE4IEBACitHaXQgdjIuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiB4ZGlmZiBjb2RlIHdlIHVzZSB0byBnZW5lcmF0ZSBkaWZmcyBpcyBub3QgcHJlcGFyZWQgdG8gaGFuZGxlCisgICBleHRyZW1lbHkgbGFyZ2UgZmlsZXMuICBJdCB1c2VzICJpbnQiIGluIG1hbnkgcGxhY2VzLCB3aGljaCBjYW4KKyAgIG92ZXJmbG93IGlmIHdlIGhhdmUgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBsaW5lcyBvciBldmVuIGJ5dGVzIGluCisgICBvdXIgaW5wdXQgZmlsZXMsIGZvciBleGFtcGxlLiAgQ2FwIHRoZSBpbnB1dCBzaXplIHRvIHNvbWV3aGVyZQorICAgYXJvdW5kIDFHQiBmb3Igbm93LgorCisgKiBTb21lIHByb3RvY29scyAobGlrZSBnaXQtcmVtb3RlLWV4dCkgY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUKKyAgIGZvdW5kIGluIHRoZSBVUkwuICBUaGUgVVJMcyB0aGF0IHN1Ym1vZHVsZXMgdXNlIG1heSBjb21lIGZyb20KKyAgIGFyYml0cmFyeSBzb3VyY2VzIChlLmcuLCAuZ2l0bW9kdWxlcyBmaWxlcyBpbiBhIHJlbW90ZQorICAgcmVwb3NpdG9yeSksIGFuZCBjYW4gaHVydCB0aG9zZSB3aG8gYmxpbmRseSBlbmFibGUgcmVjdXJzaXZlCisgICBmZXRjaC4gIFJlc3RyaWN0IHRoZSBhbGxvd2VkIHByb3RvY29scyB0byB3ZWxsIGtub3duIGFuZCBzYWZlCisgICBvbmVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2VhZTlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuNS50eHQKQEAgLTAsMCArMSwxMSBAQAorR2l0IHYyLjUuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNS40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQnVnZml4IHBhdGNoZXMgd2VyZSBiYWNrcG9ydGVkIGZyb20gdGhlICdtYXN0ZXInIGZyb250IHRvIHBsdWcgaGVhcAorICAgY29ycnVwdGlvbiBob2xlcywgdG8gY2F0Y2ggaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgY29tcHV0YXRpb24gb2YKKyAgIHBhdGhuYW1lIGxlbmd0aHMsIGFuZCB0byBnZXQgcmlkIG9mIHRoZSBuYW1lX3BhdGggQVBJLiAgQm90aCBvZgorICAgdGhlc2Ugd291bGQgaGF2ZSByZXN1bHRlZCBpbiB3cml0aW5nIG92ZXIgYW4gdW5kZXItYWxsb2NhdGVkIGJ1ZmZlcgorICAgd2hlbiBmb3JtdWxhdGluZyBwYXRobmFtZXMgd2hpbGUgdHJlZSB0cmF2ZXJzYWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZDAyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS42LnR4dApAQCAtMCwwICsxLDEyIEBACitHaXQgdjIuNS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi41LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0LXNoZWxsIiByZWplY3RzIGEgcmVxdWVzdCB0byBzZXJ2ZSBhIHJlcG9zaXRvcnkgd2hvc2UgbmFtZQorICAgYmVnaW5zIHdpdGggYSBkYXNoLCB3aGljaCBtYWtlcyBpdCBubyBsb25nZXIgcG9zc2libGUgdG8gZ2V0IGl0CisgICBjb25mdXNlZCBpbnRvIHNwYXduaW5nIHNlcnZpY2UgcHJvZ3JhbXMgbGlrZSAiZ2l0LXVwbG9hZC1wYWNrIiB3aXRoCisgICBhbiBvcHRpb24gbGlrZSAiLS1oZWxwIiwgd2hpY2ggaW4gdHVybiB3b3VsZCBzcGF3biBhbiBpbnRlcmFjdGl2ZQorICAgcGFnZXIsIGluc3RlYWQgb2Ygd29ya2luZyB3aXRoIHRoZSByZXBvc2l0b3J5IHVzZXIgYXNrZWQgdG8gYWNjZXNzCisgICAoaS5lLiB0aGUgb25lIHdob3NlIG5hbWUgaXMgIi0taGVscCIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjg4YWFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuMC50eHQKQEAgLTAsMCArMSwzNzAgQEAKK0dpdCAyLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBBbiBhc3RlcmlzayBhcyBhIHN1YnN0cmluZyAoYXMgb3Bwb3NlZCB0byB0aGUgZW50aXJldHkpIG9mIGEgcGF0aAorICAgY29tcG9uZW50IGZvciBib3RoIHNpZGUgb2YgYSByZWZzcGVjLCBlLmcuCisgICAicmVmcy9oZWFkcy9vKjpyZWZzL3JlbW90ZXMvaGVhZHMvaSoiLCBpcyBub3cgYWxsb3dlZC4KKworICogTmV3IHVzZXJkaWZmIHBhdHRlcm4gZGVmaW5pdGlvbiBmb3IgZm91bnRhaW4gc2NyZWVud3JpdGluZyBtYXJrdXAKKyAgIGZvcm1hdCBoYXMgYmVlbiBhZGRlZC4KKworICogImdpdCBsb2ciIGFuZCBmcmllbmRzIGxlYXJuZWQgYSBuZXcgIi0tZGF0ZT1mb3JtYXQ6Li4uIiBvcHRpb24gdG8KKyAgIGZvcm1hdCB0aW1lc3RhbXBzIHVzaW5nIHN5c3RlbSdzIHN0cmZ0aW1lKDMpLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBsZWFybmVkIHRvIHJlc3BvbmQgdG8gdGhlIGdldC1tYXJrIGNvbW1hbmQgdmlhCisgICBpdHMgY2F0LWJsb2ItZmQgaW50ZXJmYWNlLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbGVhcm5lZCAiZHJvcCBjb21taXQtb2JqZWN0LW5hbWUgc3ViamVjdCIgY29tbWFuZAorICAgYXMgYW5vdGhlciB3YXkgdG8gc2tpcCByZXBsYXlpbmcgb2YgYSBjb21taXQuCisKKyAqIEEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGVuYWJsZSAiLS1mb2xsb3ciIGF1dG9tYXRpY2FsbHkKKyAgIHdoZW4gImdpdCBsb2ciIGlzIHJ1biB3aXRoIG9uZSBwYXRoc3BlYyBhcmd1bWVudC4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgdG8gc2hvdyBhIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nCisgICB0aGUgInJlYmFzZSAtaSIgc2Vzc2lvbiBpbiBwcm9ncmVzcy4KKworICogImdpdCBjYXQtZmlsZSIgbGVhcm5lZCAiLS1iYXRjaC1hbGwtb2JqZWN0cyIgb3B0aW9uIHRvIGVudW1lcmF0ZSBhbGwKKyAgIGF2YWlsYWJsZSBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5IG1vcmUgcXVpY2tseSB0aGFuICJyZXYtbGlzdAorICAgLS1hbGwgLS1vYmplY3RzIiAodGhlIG91dHB1dCBpbmNsdWRlcyB1bnJlYWNoYWJsZSBvYmplY3RzLCB0aG91Z2gpLgorCisgKiAiZ2l0IGZzY2siIGxlYXJuZWQgdG8gaWdub3JlIGVycm9ycyBvbiBhIHNldCBvZiBrbm93bi10by1iZS1iYWQKKyAgIG9iamVjdHMsIGFuZCBhbHNvIGFsbG93cyB0aGUgd2FybmluZyBsZXZlbHMgb2YgdmFyaW91cyBraW5kcyBvZgorICAgbm9uLWNyaXRpY2FsIGJyZWFrYWdlcyB0byBiZSB0d2Vha2VkLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIncyBsaXN0IG9mIHRvZG8gaXMgbWFkZSBjb25maWd1cmFibGUuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbm93IHBlcmZvcm1zIGFsaWFzLWV4cGFuc2lvbiBvbiBuYW1lcyB0aGF0IGFyZQorICAgZ2l2ZW4gdmlhIC0tY2NjbWQsIGV0Yy4KKworICogQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUX1JFUExBQ0VfUkVGX0JBU0UgdGVsbHMgR2l0IHRvIGxvb2sgaW50bworICAgcmVmcyBoaWVyYXJjaHkgb3RoZXIgdGhhbiByZWZzL3JlcGxhY2UvIGZvciB0aGUgb2JqZWN0IHJlcGxhY2VtZW50CisgICBkYXRhLgorCisgKiBBbGxvdyB1bnRyYWNrZWQgY2FjaGUgKGV4cGVyaW1lbnRhbCkgdG8gYmUgdXNlZCB3aGVuIHNwYXJzZQorICAgY2hlY2tvdXQgKGV4cGVyaW1lbnRhbCkgaXMgYWxzbyBpbiB1c2UuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgaGFzIGJlZW4gdGF1Z2h0IHRvIHBheSBhdHRlbnRpb24gdG8KKyAgIHJlYmFzZS5hdXRvc3Rhc2ggY29uZmlndXJhdGlvbi4KKworICogVGhlIGNvbW1hbmQtbGluZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIEEgbmVnYXRpdmUgIXJlZiBlbnRyeSBpbiBtdWx0aS12YWx1ZSB0cmFuc2Zlci5oaWRlUmVmcworICAgY29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZCB0byBzYXkgImRvbid0IGhpZGUgdGhpcyBvbmUiLgorCisgKiBBZnRlciAiZ2l0IGFtIiB3aXRob3V0ICItMyIgc3RvcHMsIHJ1bm5pbmcgImdpdCBhbSAtMyIgcGF5cyBhdHRlbnRpb24KKyAgIHRvICItMyIgb25seSBmb3IgdGhlIHBhdGNoIHRoYXQgY2F1c2VkIHRoZSBvcmlnaW5hbCBpbnZvY2F0aW9uCisgICB0byBzdG9wLgorCisgKiBXaGVuIGxpbmtlZCB3b3JrdHJlZSBpcyB1c2VkLCBzaW11bHRhbmVvdXMgIm5vdGVzIG1lcmdlIiBpbnN0YW5jZXMKKyAgIGZvciB0aGUgc2FtZSByZWYgaW4gcmVmcy9ub3Rlcy8qIGFyZSBwcmV2ZW50ZWQgZnJvbSBzdG9tcGluZyBvbgorICAgZWFjaCBvdGhlci4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIGEgbmV3IG9wdGlvbiAtLXNtdHAtYXV0aCB0byBsaW1pdCB0aGUgU01UUAorICAgQVVUSCBtZWNoYW5pc21zIHRvIGJlIHVzZWQgdG8gYSBzdWJzZXQgb2Ygd2hhdCB0aGUgc3lzdGVtIGxpYnJhcnkKKyAgIHN1cHBvcnRzLgorCisgKiBBIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGh0dHAuc3NsVmVyc2lvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisgICB3aGF0IHNwZWNpZmljIHZlcnNpb24gb2YgU1NML1RMUyB0byB1c2UgdG8gbWFrZSBhIGNvbm5lY3Rpb24uCisKKyAqICJnaXQgbm90ZXMgbWVyZ2UiIGNhbiBiZSB0b2xkIHdpdGggIi0tc3RyYXRlZ3k9PGhvdz4iIG9wdGlvbiBob3cgdG8KKyAgIGF1dG9tYXRpY2FsbHkgaGFuZGxlIGNvbmZsaWN0czsgdGhpcyBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgYnkKKyAgIHNldHRpbmcgbm90ZXMubWVyZ2VTdHJhdGVneSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IGxvZyAtLWNjIiBkaWQgbm90IHNob3cgYW55IHBhdGNoLCBldmVuIHRob3VnaCBtb3N0IG9mIHRoZSB0aW1lCisgICB0aGUgdXNlciBtZWFudCAiZ2l0IGxvZyAtLWNjIC1wIC1tIiB0byBzZWUgcGF0Y2ggb3V0cHV0IGZvciBjb21taXRzCisgICB3aXRoIGEgc2luZ2xlIHBhcmVudCwgYW5kIGNvbWJpbmVkIGRpZmYgZm9yIG1lcmdlIGNvbW1pdHMuICBUaGUKKyAgIGNvbW1hbmQgaXMgdGF1Z2h0IHRvIERXSU0gIi0tY2MiICh3aXRob3V0ICItLXJhdyIgYW5kIG90aGVyIGZvcm1zCisgICBvZiBvdXRwdXQgc3BlY2lmaWNhdGlvbikgdG8gIi0tY2MgLXAgLW0iLgorCisgKiAiZ2l0IGNvbmZpZyAtLWxpc3QiIG91dHB1dCB3YXMgaGFyZCB0byBwYXJzZSB3aGVuIHZhbHVlcyBjb25zaXN0IG9mCisgICBtdWx0aXBsZSBsaW5lcy4gICItLW5hbWUtb25seSIgb3B0aW9uIGlzIGFkZGVkIHRvIGhlbHAgdGhpcy4KKworICogQSBoYW5kZnVsIG9mIHVzYWJpbGl0eSAmIGNvc21ldGljIGZpeGVzIHRvIGdpdGsgYW5kIGwxMG4gdXBkYXRlcy4KKworICogQSBjb21wbGV0ZWx5IGVtcHR5IGUtbWFpbCBhZGRyZXNzIDw+IGlzIG5vdyBhbGxvd2VkIGluIHRoZSBhdXRob3JzCisgICBmaWxlIHVzZWQgYnkgZ2l0LXN2biwgdG8gbWF0Y2ggdGhlIHdheSBpdCBhY2NlcHRzIHRoZSBvdXRwdXQgZnJvbQorICAgYXV0aG9ycy1wcm9nLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIEluIHByZXBhcmF0aW9uIGZvciBhbGxvd2luZyBkaWZmZXJlbnQgImJhY2tlbmRzIiB0byBzdG9yZSB0aGUgcmVmcworICAgaW4gYSB3YXkgZGlmZmVyZW50IGZyb20gdGhlIHRyYWRpdGlvbmFsICJvbmUgcmVmIHBlciBmaWxlIGluCisgICAkR0lUX0RJUiBvciBpbiBhICRHSVRfRElSL3BhY2tlZC1yZWZzIGZpbGUiIGZpbGVzeXN0ZW0gc3RvcmFnZSwKKyAgIGRpcmVjdCBmaWxlc3lzdGVtIGFjY2VzcyB0byByZWYtbGlrZSB0aGluZ3MgbGlrZSBDSEVSUllfUElDS19IRUFECisgICBmcm9tIHNjcmlwdHMgYW5kIHByb2dyYW1zIGhhcyBiZWVuIHJlZHVjZWQuCisKKyAqIENvbXB1dGF0aW9uIG9mIHVudHJhY2tlZCBzdGF0dXMgaW5kaWNhdG9yIGJ5IGJhc2ggcHJvbXB0CisgICBzY3JpcHQgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiBvcHRpbWl6ZWQuCisKKyAqIE1lbW9yeSB1c2UgcmVkdWN0aW9uIHdoZW4gY29tbWl0LXNsYWIgZmFjaWxpdHkgaXMgdXNlZCB0byBhbm5vdGF0ZQorICAgc3BhcnNlbHkgKHdoaWNoIGlzIG5vdCByZWNvbW1lbmRlZCBpbiB0aGUgZmlyc3QgcGxhY2UpLgorCisgKiBDbGVhbiB1cCByZWZzIEFQSSBhbmQgbWFrZSAiZ2l0IGNsb25lIiBsZXNzIGludGltYXRlIHdpdGggdGhlCisgICBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisKKyAqICJnaXQgcHVsbCIgd2FzIHJlaW1wbGVtZW50ZWQgaW4gQy4KKworICogVGhlIHBhY2tldCB0cmFjaW5nIG1hY2hpbmVyeSBhbGxvd3MgdG8gY2FwdHVyZSBhbiBpbmNvbWluZyBwYWNrCisgICBkYXRhIHRvIGEgZmlsZSBmb3IgZGVidWdnaW5nLgorCisgKiBNb3ZlIG1hY2hpbmVyeSB0byBwYXJzZSBodW1hbi1yZWFkYWJsZSBzY2FsZWQgbnVtYmVycyBsaWtlIDFrLCA0TSwKKyAgIGFuZCAyRyBhcyBhbiBvcHRpb24gcGFyYW1ldGVyJ3MgdmFsdWUgZnJvbSBwYWNrLW9iamVjdHMgdG8KKyAgIHBhcnNlLW9wdGlvbnMgQVBJLCB0byBtYWtlIGl0IGF2YWlsYWJsZSB0byBvdGhlciBjb2RlcGF0aHMuCisKKyAqICJnaXQgdmVyaWZ5LXRhZyIgYW5kICJnaXQgdmVyaWZ5LWNvbW1pdCIgaGF2ZSBiZWVuIHRhdWdodCB0byBzaGFyZQorICAgbW9yZSBjb2RlLCBhbmQgdGhlbiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgc2hvdyB0aGUgdmVyaWZpY2F0aW9uCisgICBtZXNzYWdlIGZyb20gdGhlIHVuZGVybHlpbmcgR1BHIGltcGxlbWVudGF0aW9uLgorCisgKiBWYXJpb3VzIGVuaGFuY2VtZW50cyBhcm91bmQgImdpdCBhbSIgcmVhZGluZyBwYXRjaGVzIGdlbmVyYXRlZCBieQorICAgZm9yZWlnbiBTQ00gaGF2ZSBiZWVuIG1hZGUuCisKKyAqIFJlZiBsaXN0aW5nIGJ5ICJnaXQgYnJhbmNoIC1sIiBhbmQgImdpdCB0YWcgLWwiIGNvbW1hbmRzIGhhcworICAgc3RhcnRlZCB0byBiZSByZWJ1aWx0LCBiYXNlZCBvbiB0aGUgZm9yLWVhY2gtcmVmIG1hY2hpbmVyeS4KKworICogVGhlIGNvZGUgdG8gcGVyZm9ybSBtdWx0aS10cmVlIG1lcmdlcyBoYXMgYmVlbiB0YXVnaHQgdG8gcmVwb3B1bGF0ZQorICAgdGhlIGNhY2hlLXRyZWUgdXBvbiBhIHN1Y2Nlc3NmdWwgbWVyZ2UgaW50byB0aGUgaW5kZXgsIHNvIHRoYXQKKyAgIHN1YnNlcXVlbnQgImRpZmYtaW5kZXggLS1jYWNoZWQiIChoZW5jZSAic3RhdHVzIikgYW5kICJ3cml0ZS10cmVlIgorICAgKGhlbmNlICJjb21taXQiKSB3aWxsIGdvIGZhc3Rlci4KKworICAgVGhlIHNhbWUgbG9naWMgaW4gImdpdCBjaGVja291dCIgbWF5IG5vdyBiZSByZW1vdmVkLCBidXQgdGhhdCBpcyBhCisgICBzZXBhcmF0ZSBpc3N1ZS4KKworICogVGVzdHMgdGhhdCBhc3N1bWUgaG93IHJlZmxvZ3MgYXJlIHJlcHJlc2VudGVkIG9uIHRoZSBmaWxlc3lzdGVtIHRvbworICAgbXVjaCBoYXZlIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGFtIiBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gIkMiLgorCisgKiBnaXRfcGF0aCgpIGFuZCBta3BhdGgoKSBhcmUgaGFuZHkgaGVscGVyIGZ1bmN0aW9ucyBidXQgaXQgaXMgZWFzeQorICAgdG8gbWlzdXNlLCBhcyB0aGUgY2FsbGVycyBuZWVkIHRvIGJlIGNhcmVmdWwgdG8ga2VlcCB0aGUgbnVtYmVyIG9mCisgICBhY3RpdmUgcmVzdWx0cyBiZWxvdyA0LiAgVGhlaXIgdXNlcyBoYXZlIGJlZW4gcmVkdWNlZC4KKworICogVGhlICJsb2NrZmlsZSIgQVBJIGhhcyBiZWVuIHJlYnVpbHQgb24gdG9wIG9mIGEgbmV3ICJ0ZW1wZmlsZSIgQVBJLgorCisgKiBUbyBwcmVwYXJlIGZvciBhbGxvd2luZyBhIGRpZmZlcmVudCAicmVmIiBiYWNrZW5kIHRvIGJlIHBsdWdnZWQgaW4KKyAgIHRvIHRoZSBzeXN0ZW0sIHVwZGF0ZV9yZWYoKS9kZWxldGVfcmVmKCkgaGF2ZSBiZWVuIHRhdWdodCBhYm91dAorICAgcmVmLWxpa2UgdGhpbmdzIGxpa2UgTUVSR0VfSEVBRCB0aGF0IGFyZSBwZXItd29ya3RyZWUgKHRoZXkgd2lsbAorICAgYWx3YXlzIGJlIHdyaXR0ZW4gdG8gdGhlIGZpbGVzeXN0ZW0gaW5zaWRlICRHSVRfRElSKS4KKworICogVGhlIGdpdG1vZHVsZXMgQVBJIHRoYXQgaXMgYWNjZXNzZWQgZnJvbSB0aGUgQyBjb2RlIGxlYXJuZWQgdG8KKyAgIGNhY2hlIHN0dWZmIGxhemlseS4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi41CistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuNSBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IHN1YnRyZWUiIChpbiBjb250cmliLykgZGVwZW5kZWQgb24gImdpdCBsb2ciIG91dHB1dCB0byBiZQorICAgc3RhYmxlLCB3aGljaCB3YXMgYSBuby1uby4gIEFwcGx5IGEgd29ya2Fyb3VuZCB0byBmb3JjZSBhCisgICBwYXJ0aWN1bGFyIGRhdGUgZm9ybWF0LgorICAgKG1lcmdlIGU3YWFjNDQgZGEvc3VidHJlZS1kYXRlLWNvbmZ1c2lvbiBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGF0dGVtcHQgdG8gZGVsZXRlIGEgcmVmIGJ5IHB1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgd2hvc2UgSEVBRAorICAgc3ltYm9saWMgcmVmZXJlbmNlIHBvaW50cyBhdCBhbiB1bmJvcm4gYnJhbmNoIHRoYXQgY2Fubm90IGJlCisgICBjcmVhdGVkIGR1ZSB0byByZWYgRC9GIGNvbmZsaWN0IChlLmcuIHJlZnMvaGVhZHMvYS9iIGV4aXN0cywgSEVBRAorICAgcG9pbnRzIGF0IHJlZnMvaGVhZHMvYSkgZmFpbGVkLgorICAgKG1lcmdlIGIxMTJiMTQgangvZG8tbm90LWNyYXNoLXJlY2VpdmUtcGFjay13by1oZWFkIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGxvdy1sZXZlbCAiZ2l0IHNlbmQtcGFjayIgZGlkIG5vdCBob25vciAndXNlci5zaWduaW5na2V5JworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3aGVuIHNlbmRpbmcgYSBzaWduZWQtcHVzaC4KKyAgIChtZXJnZSBkODMwZDM5IGRiL3NlbmQtcGFjay11c2VyLXNpZ25pbmdrZXkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAic3BhcnNlIGNoZWNrb3V0IiBtaXNiZWhhdmVkIGZvciBhIHBhdGggdGhhdCBpcyBleGNsdWRlZCBmcm9tIHRoZQorICAgY2hlY2tvdXQgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBicmFuY2hlcyB0aGF0IGRpZmZlciBhdCB0aGUgcGF0aC4KKyAgIChtZXJnZSA3ZDc4MjQxIGFzL3NwYXJzZS1jaGVja291dC1yZW1vdmFsIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gZXhwZXJpbWVudGFsICJ1bnRyYWNrZWQgY2FjaGUiIGZlYXR1cmUgdXNlZCB1bmFtZSgyKSBpbiBhCisgICBzbGlnaHRseSB1bnBvcnRhYmxlIHdheS4KKyAgIChtZXJnZSAxMDBlNDMzIGNiL3VuYW1lLWluLXVudHJhY2tlZCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgInJlYmFzZSIgcmVwbGF5cyBjaGFuZ2VzIG9mIHRoZSBsb2NhbCBicmFuY2ggb24gdG9wIG9mIHNvbWV0aGluZworICAgZWxzZSwgYXMgc3VjaCB0aGV5IGFyZSBwbGFjZWQgaW4gc3RhZ2UgIzMgYW5kIHJlZmVycmVkIHRvIGFzCisgICAidGhlaXJzIiwgd2hpbGUgdGhlIGNoYW5nZXMgaW4gdGhlIG5ldyBiYXNlLCB0eXBpY2FsbHkgYSBmb3JlaWduCisgICB3b3JrLCBhcmUgcGxhY2VkIGluIHN0YWdlICMyIGFuZCByZWZlcnJlZCB0byBhcyAib3VycyIuICBDbGFyaWZ5CisgICB0aGUgImNoZWNrb3V0IC0tb3Vycy8tLXRoZWlycyIuCisgICAobWVyZ2UgZjMwMzAxNiBzZS9kb2MtY2hlY2tvdXQtb3Vycy10aGVpcnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgInJldi1wYXJzZSAtLXBhcnNlb3B0IiBtb2RlIHBhcnNlZCB0aGUgb3B0aW9uIHNwZWNpZmljYXRpb24KKyAgIGFuZCB0aGUgYXJndW1lbnQgaGludCBpbiBhIHN0cmFuZ2Ugd2F5IHRvIGFsbG93ICc9JyBhbmQgb3RoZXIKKyAgIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgb3B0aW9uIG5hbWUgd2hpbGUgZm9yYmlkZGluZyB0aGVtIGZyb20KKyAgIHRoZSBhcmd1bWVudCBoaW50LiAgVGhpcyBtYWRlIGl0IGltcG9zc2libGUgdG8gZGVmaW5lIGFuIG9wdGlvbgorICAgbGlrZSAiLS1wYWlyIDxrZXk+PTx2YWx1ZT4iIHdpdGggInBhaXI9a2V5PXZhbHVlIiBzcGVjaWZpY2F0aW9uLAorICAgd2hpY2ggaW5zdGVhZCB3b3VsZCBoYXZlIGRlZmluZWQgYSAiLS1wYWlyPWtleSA8dmFsdWU+IiBvcHRpb24uCisgICAobWVyZ2UgMmQ4OTNkZiBpYi9zY3JpcHRlZC1wYXJzZS1vcHQtYmV0dGVyLWhpbnQtc3RyaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogT2Z0ZW4gYSBmYXN0LWltcG9ydCBzdHJlYW0gYnVpbGRzIGEgbmV3IGNvbW1pdCBvbiB0b3Agb2YgdGhlCisgICBwcmV2aW91cyBjb21taXQgaXQgYnVpbHQsIGFuZCBpdCBvZnRlbiB1bmNvbmRpdGlvbmFsbHkgZW1pdHMgYQorICAgImZyb20iIGNvbW1hbmQgdG8gc3BlY2lmeSB0aGUgZmlyc3QgcGFyZW50LCB3aGljaCBjYW4gYmUgb21pdHRlZCBpbgorICAgc3VjaCBhIGNhc2UuICBUaGlzIGNhdXNlZCBmYXN0LWltcG9ydCB0byBmb3JnZXQgdGhlIHRyZWUgb2YgdGhlCisgICBwcmV2aW91cyBjb21taXQgYW5kIHRoZW4gcmUtcmVhZCBpdCBmcm9tIHNjcmF0Y2gsIHdoaWNoIHdhcworICAgaW5lZmZpY2llbnQuICBPcHRpbWl6ZSBmb3IgdGhpcyBjb21tb24gY2FzZS4KKyAgIChtZXJnZSAwZGYzMjQ1IG1oL2Zhc3QtaW1wb3J0LW9wdGltaXplLWN1cnJlbnQtZnJvbSBsYXRlciB0byBtYWludCkuCisKKyAqIFJ1bm5pbmcgYW4gYWxpYXNlZCBjb21tYW5kIGZyb20gYSBzdWJkaXJlY3Rvcnkgd2hlbiB0aGUgLmdpdCB0aGluZworICAgaW4gdGhlIHdvcmtpbmcgdHJlZSBpcyBhIGdpdGZpbGUgcG9pbnRpbmcgZWxzZXdoZXJlIGRpZCBub3Qgd29yay4KKyAgIChtZXJnZSBkOTUxMzhlIG5kL2V4cG9ydC13b3JrdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqICJJcyB0aGlzIHN1YmRpcmVjdG9yeSBhIHNlcGFyYXRlIHJlcG9zaXRvcnkgdGhhdCBzaG91bGQgbm90IGJlCisgICB0b3VjaGVkPyIgY2hlY2sgImdpdCBjbGVhbiIgd2FzIGluZWZmaWNpZW50LiAgVGhpcyB3YXMgcmVwbGFjZWQKKyAgIHdpdGggYSBtb3JlIG9wdGltaXplZCBjaGVjay4KKyAgIChtZXJnZSBmYmYyZmVjIGVlL2NsZWFuLXJlbW92ZS1kaXJzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJuZXctd29ya3RyZWUtbW9kZSIgaGFjayBpbiAiY2hlY2tvdXQiIHRoYXQgd2FzIGFkZGVkIGluCisgICBuZC9tdWx0aXBsZS13b3JrLXRyZWVzIHRvcGljIGhhcyBiZWVuIHJlbW92ZWQgYnkgdXBkYXRpbmcgdGhlCisgICBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgIndvcmt0cmVlIGFkZCIuCisgICAobWVyZ2UgNjVmOWI3NSBlcy93b3JrdHJlZS1hZGQtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlbW92ZSByZW1haW5pbmcgY3J1ZnQgZnJvbSAgImdpdCBjaGVja291dCAtLXRvIiwgd2hpY2gKKyAgIHRyYW5zaXRpb25lZCB0byAiZ2l0IHdvcmt0cmVlIGFkZCIuCisgICAobWVyZ2UgMTE0ZmY4OCBlcy93b3JrdHJlZS1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBvZmYtYnktb25lIGVycm9yIG1hZGUgImdpdCByZW1vdGUiIHRvIG1pc2hhbmRsZSBhIHJlbW90ZSB3aXRoIGEKKyAgIHNpbmdsZSBsZXR0ZXIgbmlja25hbWUuCisgICAobWVyZ2UgYmM1OThjMyBtaC9nZXQtcmVtb3RlLWdyb3VwLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xvbmUgJFVSTCIsIHdoZW4gY2xvbmluZyBmcm9tIGEgc2l0ZSB3aG9zZSBzb2xlIHB1cnBvc2UgaXMgdG8KKyAgIGhvc3QgYSBzaW5nbGUgcmVwb3NpdG9yeSAoaGVuY2UsIG5vIHBhdGggYWZ0ZXIgPHNjaGVtZT46Ly88c2l0ZT4vKSwKKyAgIHRyaWVkIHRvIHVzZSB0aGUgc2l0ZSBuYW1lIGFzIHRoZSBuZXcgcmVwb3NpdG9yeSBuYW1lLCBidXQgZGlkIG5vdAorICAgcmVtb3ZlIHVzZXJuYW1lIG9yIHBhc3N3b3JkIHdoZW4gPHNpdGU+IHBhcnQgd2FzIG9mIHRoZSBmb3JtCisgICA8dXNlcj5APHBhc3M+Ojxob3N0Pi4gIFRoZSBjb2RlIGlzIHRhdWdodCB0byByZWRhY3QgdGhlc2UuCisgICAobWVyZ2UgYWRlZjk1NiBwcy9ndWVzcy1yZXBvLW5hbWUtYXQtcm9vdCBsYXRlciB0byBtYWludCkuCisKKyAqIFJ1bm5pbmcgdGVzdHMgd2l0aCB0aGUgIi14IiBvcHRpb24gdG8gbWFrZSB0aGVtIHZlcmJvc2UgaGFkIHNvbWUKKyAgIHVucGxlYXNhbnQgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMgb2YgdGhlIHRlc3Qgc3VpdGUuCisgICAobWVyZ2UgOWI1ZmU3OCBqay90ZXN0LXdpdGgteCBsYXRlciB0byBtYWludCkuCisKKyAqIHQxNTA5IHRlc3QgdGhhdCByZXF1aXJlcyBhIGRlZGljYXRlZCBWTSBlbnZpcm9ubWVudCBoYWQgc29tZQorICAgYml0cm90LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgZmFhY2M1YSBwcy90MTUwOS1jaHJvb3QtdGVzdC1maXh1cCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVsbCIgaW4gcmVjZW50IHJlbGVhc2VzIG9mIEdpdCBoYXMgYSByZWdyZXNzaW9uIGluIHRoZSBjb2RlCisgICB0aGF0IGFsbG93cyBjdXN0b20gcGF0aCB0byB0aGUgLS11cGxvYWQtcGFjaz08cHJvZ3JhbT4uICBUaGlzIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAgIE5vdGUgdGhhdCB0aGlzIGlzIGlycmVsZXZhbnQgZm9yICdtYXN0ZXInIHdpdGggImdpdCBwdWxsIiByZXdyaXR0ZW4KKyAgIGluIEMuCisgICAobWVyZ2UgMTNlMGUyOCBtbS9wdWxsLXVwbG9hZC1wYWNrIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiB0cnlpbmcgdG8gc2VlIHRoYXQgYW4gb2JqZWN0IGRvZXMgbm90IGV4aXN0LCBhIHN0YXRlIGVycm5vCisgICBsZWFrZWQgZnJvbSBvdXIgImZpcnN0IHRyeSB0byBvcGVuIGEgcGFja2ZpbGUgd2l0aCBPX05PQVRJTUUgYW5kCisgICB0aGVuIGlmIGl0IGZhaWxzIHJldHJ5IHdpdGhvdXQgaXQiIGxvZ2ljIG9uIGEgc3lzdGVtIHRoYXQgcmVmdXNlcworICAgT19OT0FUSU1FLiAgVGhpcyBjb25mdXNlZCB1cyBhbmQgY2F1c2VkIHVzIHRvIGRpZSwgc2F5aW5nIHRoYXQgdGhlCisgICBwYWNrZmlsZSBpcyB1bnJlYWRhYmxlLCB3aGVuIHdlIHNob3VsZCBoYXZlIGp1c3QgcmVwb3J0ZWQgdGhhdCB0aGUKKyAgIG9iamVjdCBkb2VzIG5vdCBleGlzdCBpbiB0aGF0IHBhY2tmaWxlIHRvIHRoZSBjYWxsZXIuCisgICAobWVyZ2UgZGZmNmYyOCBjYi9vcGVuLW5vYXRpbWUtY2xlYXItZXJybm8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZXBhdGggdG8gcHJvZHVjZSBlcnJvciBtZXNzYWdlcyBoYWQgYSBoYXJkLWNvZGVkIGxpbWl0IHRvCisgICB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSwgcHJpbWFyaWx5IHRvIGF2b2lkIG1lbW9yeSBhbGxvY2F0aW9uIHdoaWxlCisgICBjYWxsaW5nIGRpZSgpLgorICAgKG1lcmdlIGY0YzNlZGMgamsvbG9uZy1lcnJvci1tZXNzYWdlcyBsYXRlciB0byBtYWludCkuCisKKyAqIHN0cmJ1Zl9yZWFkKCkgdXNlZCB0byBoYXZlIG9uZSBleHRyYSBpdGVyYXRpb24gKGFuZCBhbiB1bm5lY2Vzc2FyeQorICAgc3RyYnVmX2dyb3coKSBvZiA4a0IpLCB3aGljaCB3YXMgZWxpbWluYXRlZC4KKyAgIChtZXJnZSAzZWJiZDAwIGpoL3N0cmJ1Zi1yZWFkLXVzZS1yZWFkLWluLWZ1bGwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSByZXdyb3RlIG9uZSBvZiB0aGUgYnVpbGQgc2NyaXB0cyBpbiBQZXJsIGJ1dCB0aGlzIHJlaW1wbGVtZW50cworICAgaW4gQm91cm5lIHNoZWxsLgorICAgKG1lcmdlIDU3Y2VlOGEgc2cvaGVscC1ncm91cCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBleHBlcmltZW50YWwgdW50cmFja2VkLWNhY2hlIGZlYXR1cmUgd2VyZSBidWdneSB3aGVuIHBhdGhzIHdpdGgKKyAgIGEgZmV3IGxldmVscyBvZiBzdWJkaXJlY3RvcmllcyBhcmUgaW52b2x2ZWQuCisgICAobWVyZ2UgNzNmOTE0NSBkdC91bnRyYWNrZWQtc3ViZGlyIGxhdGVyIHRvIG1haW50KS4KKworICogImludGVycHJldC10cmFpbGVycyIgaGVscGVyIG1pc3Rvb2sgYSBzaW5nbGUtbGluZXIgbG9nIG1lc3NhZ2UgdGhhdAorICAgaGFzIGEgY29sb24gYXMgdGhlIGVuZCBvZiBleGlzdGluZyB0cmFpbGVyLgorCisgKiBUaGUgImludGVycHJldC10cmFpbGVycyIgaGVscGVyIG1pc3Rvb2sgYSBtdWx0aS1wYXJhZ3JhcGggdGl0bGUgb2YKKyAgIGEgY29tbWl0IGxvZyBtZXNzYWdlIHdpdGggYSBjb2xvbiBpbiBpdCBhcyB0aGUgZW5kIG9mIHRoZSB0cmFpbGVyCisgICBibG9jay4KKyAgIChtZXJnZSA1Yzk5OTk1IGNjL3RyYWlsZXJzLWNvcm5lci1jYXNlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGVzY3JpYmUiIHdpdGhvdXQgYXJndW1lbnQgZGVmYXVsdGVkIHRvIGRlc2NyaWJlIHRoZSBIRUFECisgICBjb21taXQsIGJ1dCAiZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMiIGRpZG4ndC4gIEFyZ3VhYmx5LCBpbiBhCisgICByZXBvc2l0b3J5IHVzZWQgZm9yIGFjdGl2ZSBkZXZlbG9wbWVudCwgc3VjaCBkZWZhdWx0aW5nIHdvdWxkIG5vdAorICAgYmUgdmVyeSB1c2VmdWwgYXMgdGhlIHRpcCBvZiBicmFuY2ggaXMgdHlwaWNhbGx5IG5vdCB0YWdnZWQsIGJ1dCBpdAorICAgaXMgYmV0dGVyIHRvIGJlIGNvbnNpc3RlbnQuCisgICAobWVyZ2UgMmJkMDcwNiBzZy9kZXNjcmliZS1jb250YWlucyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjbGllbnQgc2lkZSBjb2RlcGF0aHMgaW4gImdpdCBwdXNoIiBoYXZlIGJlZW4gY2xlYW5lZCB1cAorICAgYW5kIHRoZSB1c2VyIGNhbiByZXF1ZXN0IHRvIHBlcmZvcm0gYW4gb3B0aW9uYWwgInNpZ25lZCBwdXNoIiwKKyAgIGkuZS4gc2lnbiBvbmx5IHdoZW4gdGhlIG90aGVyIGVuZCBhY2NlcHRzIHNpZ25lZCBwdXNoLgorICAgKG1lcmdlIDY4Yzc1N2YgZGIvcHVzaC1zaWduLWlmLWFza2VkIGxhdGVyIHRvIG1haW50KS4KKworICogQmVjYXVzZSB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gZG9lcyBub3QgYWxsb3cgImFsaWFzLjBmb28iIGFuZAorICAgInBhZ2VyLjBmb28iIGFzIHRoZSBjb25maWd1cmF0aW9uIGtleSwgdGhlIHVzZXIgY2Fubm90IHVzZSAnMGZvbycKKyAgIGFzIGEgY3VzdG9tIGNvbW1hbmQgbmFtZSBhbnl3YXksIGJ1dCAiZ2l0IDBmb28iIHRyaWVkIHRvIGxvb2sgdGhlc2UKKyAgIGtleXMgdXAgYW5kIGVtaXR0ZWQgdXNlbGVzcyB3YXJuaW5ncyBiZWZvcmUgc2F5aW5nICcwZm9vIGlzIG5vdCBhCisgICBnaXQgY29tbWFuZCcuICBUaGVzZSB3YXJuaW5nIG1lc3NhZ2VzIGhhdmUgYmVlbiBzcXVlbGNoZWQuCisgICAobWVyZ2UgOWU5ZGUxOCBqay9maXgtYWxpYXMtcGFnZXItY29uZmlnLWtleS13YXJuaW5ncyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmV2LWxpc3QiIGRvZXMgbm90IHRha2UgIi0tbm90ZXMiIG9wdGlvbiwgYnV0IGRpZCBub3QgY29tcGxhaW4KKyAgIHdoZW4gb25lIGlzIGdpdmVuLgorICAgKG1lcmdlIDJhZWE3YTUgamsvcmV2LWxpc3QtaGFzLW5vLW5vdGVzIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiByZS1wcmltaW5nIHRoZSBjYWNoZS10cmVlIG9wcG9ydHVuaXN0aWNhbGx5IHdoaWxlIGNvbW1pdHRpbmcKKyAgIHRoZSBpbi1jb3JlIGluZGV4IGFzLWlzLCB3ZSBtaXN0YWtlbmx5IGludmFsaWRhdGVkIHRoZSBpbi1jb3JlCisgICBpbmRleCB0b28gYWdncmVzc2l2ZWx5LCBjYXVzaW5nIHRoZSBleHBlcmltZW50YWwgc3BsaXQtaW5kZXggY29kZQorICAgdG8gdW5uZWNlc3NhcmlseSByZXdyaXRlIHRoZSBvbi1kaXNrIGluZGV4IGZpbGUocykuCisgICAobWVyZ2UgNDc1YTM0NCBkdC9jb21taXQtcHJlc2VydmUtYmFzZS1pbmRleC11cG9uLW9wcG9ydHVuaXN0aWMtY2FjaGUtdHJlZS11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFyY2hpdmUiIGRpZCBub3QgdXNlIHppcDY0IGV4dGVuc2lvbiB3aGVuIGNyZWF0aW5nIGFuIGFyY2hpdmUKKyAgIHdpdGggbW9yZSB0aGFuIDY0ayBlbnRyaWVzLCB3aGljaCBub2JvZHkgc2hvdWxkIG5lZWQsIHJpZ2h0IDstKT8KKyAgIChtZXJnZSA4ODMyOWNhIHJzL2FyY2hpdmUtemlwLW1hbnkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSBpbiAibXVsdGlwbGUtd29ya3RyZWUiIHN1cHBvcnQgdGhhdCBhdHRlbXB0ZWQgdG8gcmVjb3ZlcgorICAgZnJvbSBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdXBkYXRlZCBhbiBpbmNvcnJlY3QgZmlsZS4KKyAgIChtZXJnZSA4MmZkZTg3IG5kL2ZpeHVwLWxpbmtlZC1naXRkaXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbiBjYXNlIGluc2Vuc2l0aXZlIHN5c3RlbXMsICJnaXQgcDQiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggY2xpZW50CisgICBzcGVjcy4KKworICogImdpdCBpbml0IGVtcHR5ICYmIGdpdCAtQyBlbXB0eSBsb2ciIHNhaWQgImJhZCBkZWZhdWx0IHJldmlzaW9uICdIRUFEJyIsCisgICB3aGljaCB3YXMgZm91bmQgdG8gYmUgYSBiaXQgY29uZnVzaW5nIHRvIG5ldyB1c2Vycy4KKyAgIChtZXJnZSBjZTExMzYwIGprL2xvZy1taXNzaW5nLWRlZmF1bHQtSEVBRCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBzY3JpcHRlZCAiZ2l0IGFtIiBoYXMgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGluCisgICAiZ2l0IGFtIC0tc2tpcCIgY29kZXBhdGgsIHdoaWNoIG5vIGxvbmdlciBleGlzdHMgaW4gdGhlIGJ1aWx0LWluCisgICB2ZXJzaW9uIG9uIHRoZSAnbWFzdGVyJyBmcm9udC4gIEZpeCB0aGUgcmVncmVzc2lvbiBpbiB0aGUgbGFzdAorICAgc2NyaXB0ZWQgdmVyc2lvbiB0aGF0IGFwcGVhciBpbiAyLjUueCBtYWludGVuYW5jZSB0cmFjayBhbmQgb2xkZXIuCisgICAobWVyZ2UgYjlkNjY4OSBqcy9tYWludC1hbS1za2lwLXBlcmZvcm1hbmNlLXJlZ3Jlc3Npb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYnJhbmNoIGRlc2NyaXB0aW9ucyB0aGF0IGFyZSBzZXQgd2l0aCAiZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24iCisgICBvcHRpb24gd2VyZSB1c2VkIGluIG1hbnkgcGxhY2VzIGJ1dCB0aGV5IHdlcmVuJ3QgY2xlYXJseSBkb2N1bWVudGVkLgorICAgKG1lcmdlIDU2MWQyYjcgcG8vZG9jLWJyYW5jaC1kZXNjIGxhdGVyIHRvIG1haW50KS4KKworICogQ29kZSBjbGVhbnVwcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorICAgKG1lcmdlIDFjNjAxYWYgZXMvZG9jLWNsZWFuLW91dGRhdGVkLXRvb2xzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzNTgxMzA0IGtuL3RhZy1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzYTU5ZTU5IGtiL2kxOG4tZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0NWFiZGVlIHNiL3JlbW92ZS11bnVzZWQtdmFyLWZyb20tYnVpbHRpbi1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0NjkxZTMgc2IvcGFyc2Utb3B0aW9ucy1jb2RlZm9ybWF0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0YTZhZGEzIGFkL2Jpc2VjdC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkYTRjNWFkIHRhL2RvY2ZpeC1pbmRleC1mb3JtYXQtdGVjaCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWUyNWZkMyBzYi9jaGVjay1yZXR1cm4tZnJvbS1yZWFkLXJlZiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYjMzMjVkZiBuZC9kd2ltLXdpbGRjYXJkcy1hcy1wYXRoc3BlY3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDdhYTliOWIgc2cvd3Qtc3RhdHVzLWhlYWRlci1pbmNsdXNpb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYwNGM2OTAgYXMvZG9jZml4LXJlZmxvZy1leHBpcmUtdW5yZWFjaGFibGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDEyNjk4NDcgc2cvdDMwMjAtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGI1NGMyMyBqYy9jYWxsb2MtcGF0aHNwZWMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE2OTI2YjggcG8vcG8tcmVhZG1lIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NGQxNjBlIHNzL2ZpeC1jb25maWctZmQtbGVhayBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYjgwZmE4NCBhaC9zdWJtb2R1bGUtdHlwb2ZpeC1pbi1lcnJvciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTk4ODViYyBhaC9yZWZsb2ctdHlwb2ZpeC1pbi1lcnJvciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTQ3NmMyYyBhaC9yZWFkLXRyZWUtdXNhZ2Utc3RyaW5nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiOGMxZDI3IGFoL3BhY2stb2JqZWN0cy11c2FnZS1zdHJpbmdzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0ODZlMWUxIGJyL3N2bi1kb2MtaW5jbHVkZS1wYXRocy1jb25maWcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE3MzNlZDMgZWUvY2xlYW4tdGVzdC1maXhlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNWZjYWRjMyBnYi9hcHBseS1jb21tZW50LXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI4OTRkM2UgbXAvdDcwNjAtZGlmZi1pbmRleC10ZXN0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkMjM4NzEwIGFzL2NvbmZpZy1kb2MtbWFya3VwLWZpeCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzN2VhODkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4xLnR4dApAQCAtMCwwICsxLDE4IEBACitHaXQgdjIuNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi42CistLS0tLS0tLS0tLS0tLS0tCisKKyAqIHhkaWZmIGNvZGUgd2UgdXNlIHRvIGdlbmVyYXRlIGRpZmZzIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKKyAgIGV4dHJlbWVseSBsYXJnZSBmaWxlcy4gIEl0IHVzZXMgImludCIgaW4gbWFueSBwbGFjZXMsIHdoaWNoIGNhbgorICAgb3ZlcmZsb3cgaWYgd2UgaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIGxpbmVzIG9yIGV2ZW4gYnl0ZXMgaW4KKyAgIG91ciBpbnB1dCBmaWxlcywgZm9yIGV4YW1wbGUuICBDYXAgdGhlIGlucHV0IHNpemUgdG8gc29tZXdoZXJlCisgICBhcm91bmQgMUdCIGZvciBub3cuCisKKyAqIFNvbWUgcHJvdG9jb2xzIChsaWtlIGdpdC1yZW1vdGUtZXh0KSBjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZQorICAgZm91bmQgaW4gdGhlIFVSTC4gIFRoZSBVUkxzIHRoYXQgc3VibW9kdWxlcyB1c2UgbWF5IGNvbWUgZnJvbQorICAgYXJiaXRyYXJ5IHNvdXJjZXMgKGUuZy4sIC5naXRtb2R1bGVzIGZpbGVzIGluIGEgcmVtb3RlCisgICByZXBvc2l0b3J5KSwgYW5kIGNhbiBodXJ0IHRob3NlIHdobyBibGluZGx5IGVuYWJsZSByZWN1cnNpdmUKKyAgIGZldGNoLiAgUmVzdHJpY3QgdGhlIGFsbG93ZWQgcHJvdG9jb2xzIHRvIHdlbGwga25vd24gYW5kIHNhZmUKKyAgIG9uZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjVlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4yLnR4dApAQCAtMCwwICsxLDY1IEBACitHaXQgdjIuNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGVyZSB3ZXJlIHNvbWUgY2xhc3NlcyBvZiBlcnJvcnMgdGhhdCAiZ2l0IGZzY2siIGRpYWdub3NlZCB0byBpdHMKKyAgIHN0YW5kYXJkIGVycm9yIHRoYXQgZGlkIG5vdCBjYXVzZSBpdCB0byBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLgorCisgKiBBIHRlc3Qgc2NyaXB0IGZvciB0aGUgSFRUUCBzZXJ2aWNlIGhhZCBhIHRpbWluZyBkZXBlbmRlbnQgYnVnLAorICAgd2hpY2ggd2FzIGZpeGVkLgorCisgKiBQZXJmb3JtYW5jZS1tZWFzdXJlbWVudCB0ZXN0cyBkaWQgbm90IHdvcmsgd2l0aG91dCBhbiBpbnN0YWxsZWQgR2l0LgorCisgKiBPbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMsIHNldHRpbmcgR0lUX1dPUktfVFJFRSB2YXJpYWJsZQorICAgdXNpbmcgYSByYW5kb20gY2FzZXMgdGhhdCBkb2VzIG5vdCBhZ3JlZSB3aXRoIHdoYXQgdGhlIGZpbGVzeXN0ZW0KKyAgIHRoaW5rcyBjb25mdXNlZCBHaXQgdGhhdCBpdCB3YXNuJ3QgaW5zaWRlIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqIFdoZW4gImdpdCBhbSIgd2FzIHJld3JpdHRlbiBhcyBhIGJ1aWx0LWluLCBpdCBzdG9wcGVkIHBheWluZworICAgYXR0ZW50aW9uIHRvIHVzZXIuc2lnbmluZ2tleSwgd2hpY2ggd2FzIGZpeGVkLgorCisgKiBBZnRlciAiZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIiwgImdpdCBzdGF0dXMiIHJlcG9ydGVkIGEgZmFpcmx5CisgICB1c2VsZXNzICJIRUFEIGRldGFjaGVkIGF0IEhFQUQiLCBpbnN0ZWFkIG9mIHNheWluZyBhdCB3aGljaCBleGFjdAorICAgY29tbWl0LgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgaGFkIGEgbWlub3IgcmVncmVzc2lvbiByZWNlbnRseSwgd2hpY2ggc3RvcHBlZAorICAgY29uc2lkZXJpbmcgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggYW4gaW5kZW50ZWQgJyMnIGluIGl0cyBpbnNuCisgICBzaGVldCBub3QgYSBjb21tZW50LCB3aGljaCBpcyBub3cgZml4ZWQuCisKKyAqIERlc2NyaXB0aW9uIG9mIHRoZSAibG9nLmZvbGxvdyIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiAiZ2l0IGxvZyIKKyAgIGRvY3VtZW50YXRpb24gaXMgbm93IGFsc28gY29waWVkIHRvICJnaXQgY29uZmlnIiBkb2N1bWVudGF0aW9uLgorCisgKiBBbGxvY2F0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBzdGRpbyBhcmUgdW5zYWZlIHRoaW5ncyB0byBjYWxsCisgICBpbnNpZGUgYSBzaWduYWwgaGFuZGxlciwgYW5kIGluZGVlZCBraWxsaW5nIHRoZSBwYWdlciBjYW4gY2F1c2UKKyAgIGdsaWJjIHRvIGRlYWRsb2NrIHdhaXRpbmcgb24gYWxsb2NhdGlvbiBtdXRleCBhcyBvdXIgc2lnbmFsIGhhbmRsZXIKKyAgIHRyaWVzIHRvIGZyZWUoKSBzb21lIGRhdGEgc3RydWN0dXJlcyBpbiB3YWl0X2Zvcl9wYWdlcigpLiAgUmVkdWNlCisgICB0aGVzZSB1bnNhZmUgY2FsbHMuCisKKyAqIFRoZSB3YXkgaG93IC0tcmVmLy0tbm90ZXMgdG8gc3BlY2lmeSB0aGUgbm90ZXMgdHJlZSByZWZlcmVuY2UgYXJlCisgICBEV0lNbWVkIHdhcyBub3QgY2xlYXJseSBkb2N1bWVudGVkLgorCisgKiBDdXN0b21pemF0aW9uIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIHdpdGggIm1ha2UgLXciIGFuZCAibWFrZSAtcyIKKyAgIGluIG91ciBNYWtlZmlsZSB3YXMgYnJva2VuIHdoZW4gdGhleSB3ZXJlIHVzZWQgdG9nZXRoZXIuCisKKyAqIFRoZSBNYWtlZmlsZSBhbHdheXMgcnVucyB0aGUgbGlicmFyeSBhcmNoaXZlciB3aXRoIGhhcmRjb2RlZCAiY3JzIgorICAgb3B0aW9ucywgd2hpY2ggd2FzIGluY29udmVuaWVudCBmb3IgZXhvdGljIHBsYXRmb3JtcyBvbiB3aGljaAorICAgcGVvcGxlIHdhbnQgdG8gdXNlIHByb2dyYW1zIHdpdGggdG90YWxseSBkaWZmZXJlbnQgc2V0IG9mIGNvbW1hbmQKKyAgIGxpbmUgb3B0aW9ucy4KKworICogVGhlIHNzaCB0cmFuc3BvcnQsIGp1c3QgbGlrZSBhbnkgb3RoZXIgdHJhbnNwb3J0IG92ZXIgdGhlIG5ldHdvcmssCisgICBkaWQgbm90IGNsZWFyIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcywgYnV0IGl0IGlzIHBvc3NpYmxlIHRvCisgICB1c2UgU2VuZEVudiBhbmQgQWNjZXB0RW52IHRvIGxlYWsgdGhlbSB0byB0aGUgcmVtb3RlIGludm9jYXRpb24gb2YKKyAgIEdpdCwgd2hpY2ggaXMgbm90IGEgZ29vZCBpZGVhIGF0IGFsbC4gIEV4cGxpY2l0bHkgY2xlYXIgdGhlbSBqdXN0CisgICBsaWtlIHdlIGRvIGZvciB0aGUgbG9jYWwgdHJhbnNwb3J0LgorCisgKiAiZ2l0IGJsYW1lIC0tZmlyc3QtcGFyZW50IHYxLjAuLnYyLjAiIHdhcyBub3QgcmVqZWN0ZWQgYnV0IGRpZCBub3QKKyAgIGxpbWl0IHRoZSBibGFtZSB0byBjb21taXRzIG9uIHRoZSBmaXJzdCBwYXJlbnQgY2hhaW4uCisKKyAqIFZlcnkgc21hbGwgbnVtYmVyIG9mIG9wdGlvbnMgdGFrZSBhIHBhcmFtZXRlciB0aGF0IGlzIG9wdGlvbmFsCisgICAod2hpY2ggaXMgbm90IGEgZ3JlYXQgVUkgZWxlbWVudCBhcyB0aGV5IGNhbiBvbmx5IGFwcGVhciBhdCB0aGUgZW5kCisgICBvZiB0aGUgY29tbWFuZCBsaW5lKS4gIEFkZCBub3RpY2UgdG8gZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGFuZAorICAgZXZlcnkgb25lIG9mIHRoZW0uCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzZmZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuMy50eHQKQEAgLTAsMCArMSwxMTEgQEAKK0dpdCB2Mi42LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBlcnJvciBtZXNzYWdlIGZyb20gImdpdCBibGFtZSAtLWNvbnRlbnRzIC0tcmV2ZXJzZSIgaW5jb3JyZWN0bHkKKyAgIHRhbGtlZCBhYm91dCAiLS1jb250ZW50cyAtLWNoaWxkcmVuIi4KKworICogImdpdCBtZXJnZS1maWxlIiB0cmllZCB0byBzaWduYWwgaG93IG1hbnkgY29uZmxpY3RzIGl0IGZvdW5kLCB3aGljaAorICAgb2J2aW91c2x5IHdvdWxkIG5vdCB3b3JrIHdlbGwgd2hlbiB0aGVyZSBhcmUgdG9vIG1hbnkgb2YgdGhlbS4KKworICogVGhlIG5hbWUtaGFzaCBzdWJzeXN0ZW0gdGhhdCBpcyB1c2VkIHRvIGNvcGUgd2l0aCBjYXNlIGluc2Vuc2l0aXZlCisgICBmaWxlc3lzdGVtcyBrZWVwcyB0cmFjayBvZiBkaXJlY3RvcmllcyBhbmQgdGhlaXIgb24tZmlsZXN5c3RlbQorICAgY2FzZXMgZm9yIGFsbCB0aGUgcGF0aHMgaW4gdGhlIGluZGV4IGJ5IGhvbGRpbmcgYSBwb2ludGVyIHRvIGEKKyAgIHJhbmRvbWx5IGNob3NlbiBjYWNoZSBlbnRyeSB0aGF0IGlzIGluc2lkZSB0aGUgZGlyZWN0b3J5IChmb3IgaXRzCisgICBjZS0+Y2VfbmFtZSBjb21wb25lbnQpLiAgVGhpcyBwb2ludGVyIHdhcyBub3QgdXBkYXRlZCBldmVuIHdoZW4gdGhlCisgICBjYWNoZSBlbnRyeSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBpbmRleCwgbGVhZGluZyB0byB1c2UgYWZ0ZXIgZnJlZS4KKyAgIFRoaXMgd2FzIGZpeGVkIGJ5IHJlY29yZGluZyB0aGUgcGF0aCBmb3IgZWFjaCBkaXJlY3RvcnkgaW5zdGVhZCBvZgorICAgYm9ycm93aW5nIGNhY2hlIGVudHJpZXMgYW5kIHJlc3RydWN0dXJpbmcgdGhlIEFQSSBzb21ld2hhdC4KKworICogV2hlbiB0aGUgImdpdCBhbSIgY29tbWFuZCB3YXMgcmVpbXBsZW1lbnRlZCBpbiBDLCAiZ2l0IGFtIC0zIiBoYWQgYQorICAgc21hbGwgcmVncmVzc2lvbiB3aGVyZSBpdCBpcyBhYm9ydGVkIGluIGl0cyBlcnJvciBoYW5kbGluZyBjb2RlcGF0aAorICAgd2hlbiB1bmRlcmx5aW5nIG1lcmdlLXJlY3Vyc2l2ZSBmYWlsZWQgaW4gc29tZSB3YXlzLgorCisgKiBUaGUgc3lub3BzaXMgdGV4dCBhbmQgdGhlIHVzYWdlIHN0cmluZyBvZiBzdWJjb21tYW5kcyB0aGF0IHJlYWQKKyAgIGxpc3Qgb2YgdGhpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFyZSBvZnRlbiBzaG93biBhcyBpZiB0aGV5CisgICBvbmx5IHRha2UgaW5wdXQgZnJvbSBhIGZpbGUgb24gYSBmaWxlc3lzdGVtLCB3aGljaCB3YXMgbWlzbGVhZGluZy4KKworICogQSBjb3VwbGUgb2YgY29tbWFuZHMgc3RpbGwgc2hvd2VkICJbb3B0aW9uc10iIGluIHRoZWlyIHVzYWdlIHN0cmluZworICAgdG8gbm90ZSB3aGVyZSBvcHRpb25zIHNob3VsZCBjb21lIG9uIHRoZWlyIGNvbW1hbmQgbGluZSwgYnV0IHdlCisgICBzcGVsbCB0aGF0ICJbPG9wdGlvbnM+XSIgaW4gbW9zdCBwbGFjZXMgdGhlc2UgZGF5cy4KKworICogVGhlIHN1Ym1vZHVsZSBjb2RlIGhhcyBiZWVuIHRhdWdodCB0byB3b3JrIGJldHRlciB3aXRoIHNlcGFyYXRlCisgICB3b3JrIHRyZWVzIGNyZWF0ZWQgdmlhICJnaXQgd29ya3RyZWUgYWRkIi4KKworICogV2hlbiAiZ2l0IGdjIC0tYXV0byIgaXMgYmFja2dyb3VuZGVkLCBpdHMgZGlhZ25vc2lzIG1lc3NhZ2UgaXMKKyAgIGxvc3QuICBJdCBub3cgaXMgc2F2ZWQgdG8gYSBmaWxlIGluICRHSVRfRElSIGFuZCBpcyBzaG93biBuZXh0IHRpbWUKKyAgIHRoZSAiZ2MgLS1hdXRvIiBpcyBydW4uCisKKyAqIFdvcmsgYXJvdW5kICJnaXQgcDQiIGZhaWxpbmcgd2hlbiB0aGUgUDQgZGVwb3QgcmVjb3JkcyB0aGUgY29udGVudHMKKyAgIGluIFVURi0xNiB3aXRob3V0IFVURi0xNiBCT00uCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gInJlYmFzZSAtaSIgdGhhdCB0cmllcyB0byBzYW5pdHkgY2hlY2sgdGhlIGVkaXRlZAorICAgaW5zbiBzaGVldCBiZWZvcmUgaXQgdXNlcyBpdCBoYXMgYmVjb21lIHRvbyBwaWNreSBvbiBXaW5kb3dzIHdoZXJlCisgICBDUkxGIGxlZnQgYnkgdGhlIGVkaXRvciBpcyB0dXJuZWQgaW50byBhIHRyYWlsaW5nIENSIG9uIHRoZSBsaW5lCisgICByZWFkIHZpYSB0aGUgInJlYWQiIGJ1aWx0LWluIGNvbW1hbmQuCisKKyAqICJnaXQgY2xvbmUgLS1kaXNzb2NpYXRlIiBydW5zIGEgYmlnICJnaXQgcmVwYWNrIiBwcm9jZXNzIGF0IHRoZQorICAgZW5kLCBhbmQgaXQgaGVscHMgdG8gY2xvc2UgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGFyZSBvcGVuIG9uIHRoZQorICAgcGFja3MgYW5kIHRoZWlyIGlkeCBmaWxlcyBiZWZvcmUgZG9pbmcgc28gb24gZmlsZXN5c3RlbXMgdGhhdAorICAgY2Fubm90IHJlbW92ZSBhIGZpbGUgdGhhdCBpcyBzdGlsbCBvcGVuLgorCisgKiBDb3JyZWN0ICJnaXQgcDQgLS1kZXRlY3QtbGFiZWxzIiBzbyB0aGF0IGl0IGRvZXMgbm90IGZhaWwgdG8gY3JlYXRlCisgICBhIHRhZyB0aGF0IHBvaW50cyBhdCBhIGNvbW1pdCB0aGF0IGlzIGFsc28gYmVpbmcgaW1wb3J0ZWQuCisKKyAqIFRoZSBpbnRlcm5hbCBzdHJpcHNwYWNlKCkgZnVuY3Rpb24gaGFzIGJlZW4gbW92ZWQgdG8gd2hlcmUgaXQKKyAgIGxvZ2ljYWxseSBiZWxvbmdzIHRvLCBpLmUuIHN0cmJ1ZiBBUEksIGFuZCB0aGUgY29tbWFuZCBsaW5lIHBhcnNlcgorICAgb2YgImdpdCBzdHJpcHNwYWNlIiBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgcGFyc2Vfb3B0aW9ucyBBUEkuCisKKyAqIFByZXBhcmUgZm9yIEdpdCBvbi1kaXNrIHJlcG9zaXRvcnkgcmVwcmVzZW50YXRpb24gdG8gdW5kZXJnbworICAgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZXMgYnkgaW50cm9kdWNpbmcgYSBuZXcgcmVwb3NpdG9yeQorICAgZm9ybWF0IHZlcnNpb24gIjEiLCB3aXRoIGFuIGV4dGVuc2lvbiBtZWNoYW5pc20uCisKKyAqICJnaXQgZ2MiIHVzZWQgdG8gYmFyZiB3aGVuIGEgc3ltYm9saWMgcmVmIGhhcyBnb25lIGRhbmdsaW5nCisgICAoZS5nLiB0aGUgYnJhbmNoIHRoYXQgdXNlZCB0byBiZSB5b3VyIHVwc3RyZWFtJ3MgZGVmYXVsdCB3aGVuIHlvdQorICAgY2xvbmVkIGZyb20gaXQgaXMgbm93IGdvbmUsIGFuZCB5b3UgZGlkICJmZXRjaCAtLXBydW5lIikuCisKKyAqIFRoZSBub3JtYWxpemVfY2VpbGluZ19lbnRyeSgpIGZ1bmN0aW9uIGRvZXMgbm90IG11Y2sgd2l0aCB0aGUgZW5kCisgICBvZiB0aGUgcGF0aCBpdCBhY2NlcHRzLCBhbmQgdGhlIHJlYWwgd29ybGQgY2FsbGVycyBkbyByZWx5IG9uIHRoYXQsCisgICBidXQgYSB0ZXN0IGluc2lzdGVkIHRoYXQgdGhlIGZ1bmN0aW9uIGRyb3BzIGEgdHJhaWxpbmcgc2xhc2guCisKKyAqICJnaXQgZ2MiIGlzIHNhZmUgdG8gcnVuIGFueXRpbWUgb25seSBiZWNhdXNlIGl0IGhhcyB0aGUgYnVpbHQtaW4KKyAgIGdyYWNlIHBlcmlvZCB0byBwcm90ZWN0IHlvdW5nIG9iamVjdHMuICBJbiBvcmRlciB0byBydW4gd2l0aCBubworICAgZ3JhY2UgcGVyaW9kLCB0aGUgdXNlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXBvc2l0b3J5IGlzCisgICBxdWllc2NlbnQuCisKKyAqIEEgcmVjZW50ICJmaWx0ZXItYnJhbmNoIC0tbXNnLWZpbHRlciIgYnJva2Ugc2tpcHBpbmcgb2YgdGhlIGNvbW1pdAorICAgb2JqZWN0IGhlYWRlciwgd2hpY2ggaXMgZml4ZWQuCisKKyAqICJnaXQgLS1saXRlcmFsLXBhdGhzcGVjcyBhZGQgLXUvLUEiIHdpdGhvdXQgYW55IGNvbW1hbmQgbGluZQorICAgYXJndW1lbnQgbWlzYmVoYXZlZCBldmVyIHNpbmNlIEdpdCAyLjAuCisKKyAqIE1lcmdpbmcgYSBicmFuY2ggdGhhdCByZW1vdmVzIGEgcGF0aCBhbmQgYW5vdGhlciB0aGF0IGNoYW5nZXMgdGhlCisgICBtb2RlIGJpdHMgb24gdGhlIHNhbWUgcGF0aCBzaG91bGQgaGF2ZSBjb25mbGljdGVkIGF0IHRoZSBwYXRoLCBidXQKKyAgIGl0IGRpZG4ndCBhbmQgc2lsZW50bHkgZmF2b3VyZWQgdGhlIHJlbW92YWwuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IGNvbXBpbGUgd2VsbCB3aXRoIG9sZGVyIHZlcnNpb24gb2YgY1VSTCBsaWJyYXJ5LgorCisgKiBUaGUgbGlua2FnZSBvcmRlciBvZiBsaWJyYXJpZXMgd2FzIHdyb25nIGluIHBsYWNlcyBhcm91bmQgbGliY3VybC4KKworICogSXQgd2FzIG5vdCBwb3NzaWJsZSB0byB1c2UgYSByZXBvc2l0b3J5LWxvb2thbGlrZSBjcmVhdGVkIGJ5ICJnaXQKKyAgIHdvcmt0cmVlIGFkZCIgYXMgYSBsb2NhbCBzb3VyY2Ugb2YgImdpdCBjbG9uZSIuCisKKyAqIFdoZW4gImdpdCBzZW5kLWVtYWlsIiB3YW50ZWQgdG8gdGFsayBvdmVyIE5ldDo6U01UUDo6U1NMLAorICAgTmV0OjpDbWQ6OmRhdGFzZW5kKCkgZGlkIG5vdCBsaWtlIHRvIGJlIGZlZCB0b28gbWFueSBieXRlcyBhdCB0aGUKKyAgIHNhbWUgdGltZSBhbmQgZmFpbGVkIHRvIHNlbmQgbWVzc2FnZXMuICBTZW5kIHRoZSBwYXlsb2FkIG9uZSBsaW5lCisgICBhdCBhIHRpbWUgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0uCisKKyAqIFdlIHBlZWsgb2JqZWN0cyBmcm9tIHN1Ym1vZHVsZSdzIG9iamVjdCBzdG9yZSBieSBsaW5raW5nIGl0IHRvIHRoZQorICAgbGlzdCBvZiBhbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlcywgYnV0IHRoZSBjb2RlIHRvIGRvIHNvIGZvcmdvdCB0bworICAgY29ycmVjdGx5IGluaXRpYWxpemUgdGhlIGxpc3QuCisKKyAqICJnaXQgc3RhdHVzIC0tYnJhbmNoIC0tc2hvcnQiIGFjY2Vzc2VkIGJleW9uZCB0aGUgY29uc3RhbnQgc3RyaW5nCisgICAiSEVBRCIsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBkYWVtb24iIHVzZXMgInJ1bl9jb21tYW5kKCkiIHdpdGhvdXQgImZpbmlzaF9jb21tYW5kKCkiLCBzbyBpdAorICAgbmVlZHMgdG8gcmVsZWFzZSByZXNvdXJjZXMgaXRzZWxmLCB3aGljaCBpdCBmb3Jnb3QgdG8gZG8uCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDI1NmEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuNC50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0IHYyLjYuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlICJjb25maWd1cmUiIHNjcmlwdCBkaWQgbm90IHRlc3QgZm9yIC1scHRocmVhZCBjb3JyZWN0bHksIHdoaWNoCisgICB1cHNldCBzb21lIGxpbmtlcnMuCisKKyAqIEFkZCBzdXBwb3J0IGZvciB0YWxraW5nIGh0dHAvaHR0cHMgb3ZlciBzb2NrcyBwcm94eS4KKworICogUG9ydGFiaWxpdHkgZml4IGZvciBXaW5kb3dzLCB3aGljaCBtYXkgcmV3cml0ZSAkU0hFTEwgdmFyaWFibGUgdXNpbmcKKyAgIG5vbi1QT1NJWCBwYXRocy4KKworICogV2Ugbm93IGNvbnNpc3RlbnRseSBhbGxvdyBhbGwgaG9va3MgdG8gaWdub3JlIHRoZWlyIHN0YW5kYXJkIGlucHV0LAorICAgcmF0aGVyIHRoYW4gaGF2aW5nIGdpdCBjb21wbGFpbiBvZiBTSUdQSVBFLgorCisgKiBGaXggc2hlbGwgcXVvdGluZyBpbiBjb250cmliIHNjcmlwdC4KKworICogVGVzdCBwb3J0YWJpbGl0eSBmaXggZm9yIGEgdG9waWMgaW4gdjIuNi4xLgorCisgKiBBbGxvdyB0aWxkZS1leHBhbnNpb24gaW4gc29tZSBodHRwIGNvbmZpZyB2YXJpYWJsZXMuCisKKyAqIEdpdmUgYSB1c2VmdWwgc3BlY2lhbCBjYXNlICJkaWZmL3Nob3cgLS13b3JkLWRpZmYtcmVnZXg9LiIgYXMgYW4KKyAgIGV4YW1wbGUgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAqIEZpeCBmb3IgYSBjb3JuZXIgY2FzZSBpbiBmaWx0ZXItYnJhbmNoLgorCisgKiBNYWtlIGdpdC1wNCB3b3JrIG9uIGEgZGV0YWNoZWQgaGVhZC4KKworICogRG9jdW1lbnRhdGlvbiBjbGFyaWZpY2F0aW9uIGZvciAiY2hlY2staWdub3JlIiB3aXRob3V0ICItLXZlcmJvc2UiLgorCisgKiBKdXN0IGxpa2UgdGhlIHdvcmtpbmcgdHJlZSBpcyBjbGVhbmVkIHVwIHdoZW4gdGhlIHVzZXIgY2FuY2VsbGVkCisgICBzdWJtaXNzaW9uIGluIFA0U3VibWl0LmFwcGx5Q29tbWl0KCksIGNsZWFuIHVwIHRoZSBtZXNzIGlmICJwNAorICAgc3VibWl0IiBmYWlscy4KKworICogSGF2aW5nIGEgbGVmdG92ZXIgLmlkeCBmaWxlIHdpdGhvdXQgY29ycmVzcG9uZGluZyAucGFjayBmaWxlIGluCisgICB0aGUgcmVwb3NpdG9yeSBodXJ0cyBwZXJmb3JtYW5jZTsgImdpdCBnYyIgbGVhcm5lZCB0byBwcnVuZSB0aGVtLgorCisgKiBUaGUgY29kZSB0byBwcmVwYXJlIHRoZSB3b3JraW5nIHRyZWUgc2lkZSBvZiB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICBmb3IgdGhlICJkaXItZGlmZiIgZmVhdHVyZSBmb3Jnb3QgdGhhdCBzeW1ib2xpYyBsaW5rcyBuZWVkIG5vdCBiZQorICAgY29waWVkIChvciBzeW1saW5rZWQpIHRvIHRoZSB0ZW1wb3JhcnkgYXJlYSwgYXMgdGhlIGNvZGUgYWxyZWFkeQorICAgc3BlY2lhbCBjYXNlcyBhbmQgb3ZlcndyaXRlcyB0aGVtLiAgQmVzaWRlcywgaXQgd2FzIHdyb25nIHRvIHRyeQorICAgY29tcHV0aW5nIHRoZSBvYmplY3QgbmFtZSBvZiB0aGUgdGFyZ2V0IG9mIHN5bWJvbGljIGxpbmssIHdoaWNoIG1heQorICAgbm90IGV2ZW4gZXhpc3Qgb3IgbWF5IGJlIGEgZGlyZWN0b3J5LgorCisgKiBUaGVyZSB3YXMgbm8gd2F5IHRvIGRlZmVhdCBhIGNvbmZpZ3VyZWQgcmViYXNlLmF1dG9zdGFzaCB2YXJpYWJsZQorICAgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBhcyAiZ2l0IHJlYmFzZSAtLW5vLWF1dG9zdGFzaCIgd2FzIG1pc3NpbmcuCisKKyAqIEFsbG93ICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIiB0byBydW4gb3V0c2lkZSBvZiBhIEdpdCByZXBvc2l0b3J5LgorCisgKiBQcm9kdWNlIGNvcnJlY3QgImRpcnR5IiBtYXJrZXIgZm9yIHNoZWxsIHByb21wdHMsIGV2ZW4gd2hlbiB3ZQorICAgYXJlIG9uIGFuIG9ycGhhbiBvciBhbiB1bmJvcm4gYnJhbmNoLgorCisgKiBTb21lIGNvcm5lciBjYXNlcyBoYXZlIGJlZW4gZml4ZWQgaW4gc3RyaW5nLW1hdGNoaW5nIGRvbmUgaW4gImdpdAorICAgc3RhdHVzIi4KKworICogQXBwbGUncyBjb21tb24gY3J5cHRvIGltcGxlbWVudGF0aW9uIG9mIFNIQTFfVXBkYXRlKCkgZG9lcyBub3QgdGFrZQorICAgbW9yZSB0aGFuIDRHQiBhdCBhIHRpbWUsIGFuZCB3ZSBub3cgaGF2ZSBhIGNvbXBpbGUtdGltZSB3b3JrYXJvdW5kCisgICBmb3IgaXQuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDkyNGI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuNS50eHQKQEAgLTAsMCArMSw1OCBAQAorR2l0IHYyLjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNi40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQmVjYXVzZSAidGVzdF93aGVuX2ZpbmlzaGVkIiBpbiBvdXIgdGVzdCBmcmFtZXdvcmsgcXVldWVzIHRoZQorICAgY2xlYW4tdXAgdGFza3MgdG8gYmUgZG9uZSBpbiBhIHNoZWxsIHZhcmlhYmxlLCBpdCBzaG91bGQgbm90IGJlCisgICB1c2VkIGluc2lkZSBhIHN1YnNoZWxsLiAgQWRkIGEgbWVjaGFuaXNtIHRvIGFsbG93ICdiYXNoJyB0byBjYXRjaAorICAgc3VjaCB1c2VzLCBhbmQgZml4IHRoZSBvbmVzIHRoYXQgd2VyZSBmb3VuZC4KKworICogVXBkYXRlICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBzbyB0aGF0IGl0IGNhbiB0YWtlIHdoaXRlc3BhY2VzCisgICBpbiB0aGUgcGF0aG5hbWVzLCBub3Qgb25seSBpbiB0aGUgaW4tdHJlZSBwYXRobmFtZSBidXQgdGhlIG5hbWUgb2YKKyAgIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgcmVwb3NpdG9yeSBpcyBpbi4KKworICogQ29zbWV0aWMgaW1wcm92ZW1lbnQgdG8gbG9jay1maWxlIGVycm9yIG1lc3NhZ2VzLgorCisgKiBtYXJrX3RyZWVfdW5pbnRlcmVzdGluZygpIGhhcyBjb2RlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBpdCBnZXRzCisgICBwYXNzZWQgYSBOVUxMIHBvaW50ZXIgaW4gaXRzICd0cmVlJyBwYXJhbWV0ZXIsIGJ1dCB0aGUgZnVuY3Rpb24gaGFkCisgICAnb2JqZWN0ID0gJnRyZWUtPm9iamVjdCcgYXNzaWdubWVudCBiZWZvcmUgY2hlY2tpbmcgaWYgdHJlZSBpcworICAgTlVMTC4gIFRoaXMgZ2l2ZXMgYSBjb21waWxlciBhbiBleGN1c2UgdG8gZGVjbGFyZSB0aGF0IHRyZWUgd2lsbAorICAgbmV2ZXIgYmUgTlVMTCBhbmQgYXBwbHkgYSB3cm9uZyBvcHRpbWl6YXRpb24uICBBdm9pZCBpdC4KKworICogVGhlIGhlbHBlciB1c2VkIHRvIGl0ZXJhdGUgb3ZlciBsb29zZSBvYmplY3QgZGlyZWN0b3JpZXMgdG8gcHJ1bmUKKyAgIHN0YWxlIG9iamVjdHMgZGlkIG5vdCBjbG9zZWRpcigpIGltbWVkaWF0ZWx5IHdoZW4gaXQgaXMgZG9uZSB3aXRoIGEKKyAgIGRpcmVjdG9yeS0tYSBjYWxsYmFjayBzdWNoIGFzIHRoZSBvbmUgdXNlZCBmb3IgImdpdCBwcnVuZSIgbWF5IHdhbnQKKyAgIHRvIGRvIHJtZGlyKCksIGJ1dCBpdCB3b3VsZCBmYWlsIG9uIG9wZW4gZGlyZWN0b3J5IG9uIHBsYXRmb3JtcworICAgc3VjaCBhcyBXaW5YUC4KKworICogImdpdCBwNCIgdXNlZCB0byBpbXBvcnQgUGVyZm9yY2UgQ0xzIHRoYXQgdG91Y2ggb25seSBwYXRocyBvdXRzaWRlCisgICB0aGUgY2xpZW50IHNwZWMgYXMgZW1wdHkgY29tbWl0cy4gIEl0IGhhcyBiZWVuIGNvcnJlY3RlZCB0byBpZ25vcmUKKyAgIHRoZW0gaW5zdGVhZCwgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uIGdpdC1wNC5rZWVwRW1wdHlDb21taXRzIGFzIGEKKyAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkga25vYi4KKworICogVGhlIGV4aXQgY29kZSBvZiBnaXQtZnNjayBkaWQgbm90IHJlZmxlY3Qgc29tZSB0eXBlcyBvZiBlcnJvcnMKKyAgIGZvdW5kIGluIHBhY2tlZCBvYmplY3RzLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi8pIHVzZWQgdG8gbGlzdCAiZ2l0IGNvbHVtbiIKKyAgICh3aGljaCBpcyBub3QgYW4gZW5kLXVzZXIgZmFjaW5nIGNvbW1hbmQpIGFzIG9uZSBvZiB0aGUgY2hvaWNlcworCisgKiBJbXByb3ZlIGVycm9yIHJlcG9ydGluZyB3aGVuIFNNVFAgVExTIGZhaWxzLgorCisgKiBXaGVuIGdldHB3dWlkKCkgb24gdGhlIHN5c3RlbSByZXR1cm5lZCBOVUxMIChlLmcuIHRoZSB1c2VyIGlzIG5vdAorICAgaW4gdGhlIC9ldGMvcGFzc3dkIGZpbGUgb3Igb3RoZXIgdWlkLXRvLW5hbWUgbWFwcGluZ3MpLCB0aGUKKyAgIGNvZGVwYXRoIHRvIGZpbmQgd2hvIHRoZSB1c2VyIGlzIHRvIHJlY29yZCBpdCBpbiB0aGUgcmVmbG9nIGJhcmZlZAorICAgYW5kIGRpZWQuICBMb29zZW4gdGhlIGNoZWNrIGluIHRoaXMgY29kZXBhdGgsIHdoaWNoIGFscmVhZHkgYWNjZXB0cworICAgcXVlc3Rpb25hYmxlIGlkZW50IHN0cmluZyAoZS5nLiBob3N0IHBhcnQgb2YgdGhlIGUtbWFpbCBhZGRyZXNzIGlzCisgICBvYnZpb3VzbHkgYm9ndXMpLCBhbmQgaW4gZ2VuZXJhbCB3aGVuIHdlIG9wZXJhdGUgZm10X2lkZW50KCkgZnVuY3Rpb24KKyAgIGluIG5vbi1zdHJpY3QgbW9kZS4KKworICogImdpdCBzeW1ib2xpYy1yZWYiIGZvcmdvdCB0byByZXBvcnQgYSBmYWlsdXJlIHdpdGggaXRzIGV4aXQgc3RhdHVzLgorCisgKiBIaXN0b3J5IHRyYXZlcnNhbCB3aXRoICJnaXQgbG9nIC0tc291cmNlIiB0aGF0IHN0YXJ0cyB3aXRoIGFuCisgICBhbm5vdGF0ZWQgdGFnIGZhaWxlZCB0byByZXBvcnQgdGhlIHRhZyBhcyAic291cmNlIiwgZHVlIHRvIGFuCisgICBvbGQgcmVncmVzc2lvbiBpbiB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciBiYWNrIGluIHYyLjIgZGF5cy4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyM2FkODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi42LnR4dApAQCAtMCwwICsxLDExIEBACitHaXQgdjIuNi42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWdmaXggcGF0Y2hlcyB3ZXJlIGJhY2twb3J0ZWQgZnJvbSB0aGUgJ21hc3RlcicgZnJvbnQgdG8gcGx1ZyBoZWFwCisgICBjb3JydXB0aW9uIGhvbGVzLCB0byBjYXRjaCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjb21wdXRhdGlvbiBvZgorICAgcGF0aG5hbWUgbGVuZ3RocywgYW5kIHRvIGdldCByaWQgb2YgdGhlIG5hbWVfcGF0aCBBUEkuICBCb3RoIG9mCisgICB0aGVzZSB3b3VsZCBoYXZlIHJlc3VsdGVkIGluIHdyaXRpbmcgb3ZlciBhbiB1bmRlci1hbGxvY2F0ZWQgYnVmZmVyCisgICB3aGVuIGZvcm11bGF0aW5nIHBhdGhuYW1lcyB3aGlsZSB0cmVlIHRyYXZlcnNhbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzNWRlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjcudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2Mi42LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjYuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzY2JmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dApAQCAtMCwwICsxLDQxNCBAQAorR2l0IDIuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi42CistLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSBhcHBlYXJhbmNlIG9mICJnaXRrIiwgcGFydGljdWxhcmx5IG9uIGhpZ2ggRFBJIG1vbml0b3JzLCBoYXZlCisgICBiZWVuIGltcHJvdmVkLiAgImdpdGsiIGFsc28gY29tZXMgd2l0aCBhbiB1bmRhdGVkIHRyYW5zbGF0aW9uIGZvcgorICAgU3dlZGlzaCBhbmQgSmFwYW5lc2UuCisKKyAqICJnaXQgcmVtb3RlIiBsZWFybmVkICJnZXQtdXJsIiBzdWJjb21tYW5kIHRvIHNob3cgdGhlIFVSTCBmb3IgYQorICAgZ2l2ZW4gcmVtb3RlIG5hbWUgdXNlZCBmb3IgZmV0Y2hpbmcgYW5kIHB1c2hpbmcuCisKKyAqIFRoZXJlIHdhcyBubyB3YXkgdG8gZGVmZWF0IGEgY29uZmlndXJlZCByZWJhc2UuYXV0b3N0YXNoIHZhcmlhYmxlCisgICBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGFzICJnaXQgcmViYXNlIC0tbm8tYXV0b3N0YXNoIiB3YXMgbWlzc2luZy4KKworICogImdpdCBsb2cgLS1kYXRlPWxvY2FsIiB1c2VkIHRvIG9ubHkgc2hvdyB0aGUgbm9ybWFsIChkZWZhdWx0KQorICAgZm9ybWF0IGluIHRoZSBsb2NhbCB0aW1lem9uZS4gIFRoZSBjb21tYW5kIGxlYXJuZWQgdG8gdGFrZSAnbG9jYWwnCisgICBhcyBhbiBpbnN0cnVjdGlvbiB0byB1c2UgdGhlIGxvY2FsIHRpbWV6b25lIHdpdGggb3RoZXIgZm9ybWF0cywKKworICogVGhlIHJlZnMgdXNlZCBkdXJpbmcgYSAiZ2l0IGJpc2VjdCIgc2Vzc2lvbiBpcyBub3cgcGVyLXdvcmt0cmVlIHNvCisgICB0aGF0IGluZGVwZW5kZW50IGJpc2VjdCBzZXNzaW9ucyBjYW4gYmUgZG9uZSBpbiBkaWZmZXJlbnQgd29ya3RyZWVzCisgICBjcmVhdGVkIHdpdGggImdpdCB3b3JrdHJlZSBhZGQiLgorCisgKiBVc2VycyB3aG8gYXJlIHRvbyBidXN5IHRvIHR5cGUgdGhyZWUgZXh0cmEga2V5c3Ryb2tlcyB0byBhc2sgZm9yCisgICAiZ2l0IHN0YXNoIHNob3cgLXAiIGNhbiBub3cgc2V0IHN0YXNoLnNob3dQYXRjaCBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSB0byB0cnVlIHRvIGFsd2F5cyBzZWUgdGhlIGFjdHVhbCBwYXRjaCwgbm90IGp1c3QgdGhlIGxpc3QKKyAgIG9mIHBhdGhzIGFmZmVjdGVkIHdpdGggZmVlbCBmb3IgdGhlIGV4dGVudCBvZiBkYW1hZ2UgdmlhIGRpZmZzdGF0LgorCisgKiAicXVpbHRpbXBvcnQiIGFsbG93cyB0byBzcGVjaWZ5IHRoZSBzZXJpZXMgZmlsZSBieSBob25vcmluZyB0aGUKKyAgICRRVUlMVF9TRVJJRVMgZW52aXJvbm1lbnQgYW5kIGFsc28gLS1zZXJpZXMgY29tbWFuZCBsaW5lIG9wdGlvbi4KKworICogVGhlIHVzZSBvZiAnZ29vZC9iYWQnIGluICJnaXQgYmlzZWN0IiBtYWRlIGl0IGNvbmZ1c2luZyB0byB1c2Ugd2hlbgorICAgaHVudGluZyBmb3IgYSBzdGF0ZSBjaGFuZ2UgdGhhdCBpcyBub3QgYSByZWdyZXNzaW9uIChlLmcuIGJ1Z2ZpeCkuCisgICBUaGUgY29tbWFuZCBsZWFybmVkICdvbGQvbmV3JyBhbmQgdGhlbiBhbGxvd3MgdGhlIGVuZCB1c2VyIHRvCisgICBzYXkgZS5nLiAiYmlzZWN0IHN0YXJ0IC0tdGVybS1vbGQ9ZmFzdCAtLXRlcm0tbmV3PXNsb3ciIHRvIGZpbmQgYQorICAgcGVyZm9ybWFuY2UgcmVncmVzc2lvbi4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGNhbiBub3cgcnVuIG91dHNpZGUgb2YgYSBHaXQgcmVwb3NpdG9yeS4KKworICogImdpdCBwNCIgbGVhcm5lZCB0byByZS1lbmNvZGUgdGhlIHBhdGhuYW1lIGl0IHVzZXMgdG8gY29tbXVuaWNhdGUKKyAgIHdpdGggdGhlIHA0IGRlcG90IHdpdGggYSBuZXcgb3B0aW9uLgorCisgKiBHaXZlIHByb2dyZXNzIG1ldGVyIHRvICJnaXQgZmlsdGVyLWJyYW5jaCIuCisKKyAqIEFsbG93IGEgbGF0ZXIgIiEvYWJjL2RlZiIgdG8gb3ZlcnJpZGUgYW4gZWFybGllciAiL2FiYyIgdGhhdAorICAgYXBwZWFycyBpbiB0aGUgc2FtZSAuZ2l0aWdub3JlIGZpbGUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZXhwcmVzcworICAgImV2ZXJ5dGhpbmcgaW4gL2FiYyBkaXJlY3RvcnkgaXMgaWdub3JlZCwgZXhjZXB0IGZvciAuLi4iLgorCisgKiBUZWFjaCAiZ2l0IHA0IiB0byBzZW5kIGxhcmdlIGJsb2JzIG91dHNpZGUgdGhlIHJlcG9zaXRvcnkgYnkKKyAgIHRhbGtpbmcgdG8gR2l0IExGUy4KKworICogUHJlcGFyZSBmb3IgR2l0IG9uLWRpc2sgcmVwb3NpdG9yeSByZXByZXNlbnRhdGlvbiB0byB1bmRlcmdvCisgICBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlcyBieSBpbnRyb2R1Y2luZyBhIG5ldyByZXBvc2l0b3J5CisgICBmb3JtYXQgdmVyc2lvbiAiMSIsIHdpdGggYW4gZXh0ZW5zaW9uIG1lY2hhbmlzbS4KKworICogImdpdCB3b3JrdHJlZSIgbGVhcm5lZCBhICJsaXN0IiBzdWJjb21tYW5kLgorCisgKiAiZ2l0IGNsb25lIC0tZGlzc29jaWF0ZSIgbGVhcm5lZCB0aGF0IGl0IGNhbiBiZSB1c2VkIGV2ZW4gd2hlbgorICAgIi0tcmVmZXJlbmNlIiB3YXMgbm90IHVzZWQgYXQgdGhlIHNhbWUgdGltZS4KKworICogImdpdCBibGFtZSIgbGVhcm50IHRvIHRha2UgIi0tZmlyc3QtcGFyZW50IiBhbmQgIi0tcmV2ZXJzZSIgYXQgdGhlCisgICBzYW1lIHRpbWUgd2hlbiBpdCBtYWtlcyBzZW5zZS4KKworICogImdpdCBjaGVja291dCIgZGlkIG5vdCBmb2xsb3cgdGhlIHVzdWFsICItLVtuby1dcHJvZ3Jlc3MiCisgICBjb252ZW50aW9uIGFuZCBpbXBsZW1lbnRlZCBvbmx5ICItLXF1aWV0IiB0aGF0IGlzIGVzc2VudGlhbGx5CisgICBhIHN1cGVyc2V0IG9mICItLW5vLXByb2dyZXNzIi4gIEV4dGVuZCB0aGUgY29tbWFuZCB0byBzdXBwb3J0IHRoZQorICAgdXN1YWwgIi0tW25vLV1wcm9ncmVzcyIuCisKKyAqIFRoZSBzZW1hbnRpY3Mgb2YgdHJhbnNmZXIuaGlkZVJlZnMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBoYXZlIGJlZW4KKyAgIGV4dGVuZGVkIHRvIHdvcmsgYmV0dGVyIHdpdGggdGhlIHJlZiAibmFtZXNwYWNlIiBmZWF0dXJlIHRoYXQgbGV0cworICAgeW91IHRocm93IHVucmVsYXRlZCBidW5jaGVzIG9mIHJlcG9zaXRvcmllcyBpbiBhIHNpbmdsZSBwaHlzaWNhbAorICAgcmVwb3NpdG9yeSBhbmQgdmlydHVhbGx5IHNlcnZlIHRoZW0gYXMgc2VwYXJhdGUgb25lcy4KKworICogc2VuZC1lbWFpbCBjb25maWcgdmFyaWFibGVzIHdob3NlIHZhbHVlcyBhcmUgcGF0aG5hbWVzIG5vdyBnbworICAgdGhyb3VnaCB0aGUgfnVzZXJuYW1lLyBleHBhbnNpb24uCisKKyAqIGJhc2ggY29tcGxldGlvbiBsZWFybnQgdG8gVEFCLWNvbXBsZXRlIHJlY2lwaWVudCBhZGRyZXNzZXMgZ2l2ZW4KKyAgIHRvIHNlbmQtZW1haWwuCisKKyAqIFRoZSBjcmVkZW50aWFsLWNhY2hlIGRhZW1vbiBjYW4gYmUgdG9sZCB0byBpZ25vcmUgU0lHSFVQIHRvIHdvcmsKKyAgIGFyb3VuZCBpc3N1ZSB3aGVuIHJ1bm5pbmcgR2l0IGZyb20gaW5zaWRlIGVtYWNzLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgbmV3IGNvbmZpZ3VyYXRpb24gZm9yIGRvaW5nICItLXJlY3Vyc2Utc3VibW9kdWxlcyIKKyAgIG9uIGVhY2ggcHVzaC4KKworICogImZvcm1hdC1wYXRjaCIgaGFzIGxlYXJuZWQgYSBuZXcgb3B0aW9uIHRvIHplcm8tb3V0IHRoZSBjb21taXQKKyAgIG9iamVjdCBuYW1lIG9uIHRoZSBtYm94ICJGcm9tICIgbGluZS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUaGUgaW5mcmFzdHJ1Y3R1cmUgdG8gcmV3cml0ZSAiZ2l0IHN1Ym1vZHVsZSIgaW4gQyBpcyBiZWluZyBidWlsdAorICAgaW5jcmVtZW50YWxseS4gIExldCdzIHBvbGlzaCB0aGVzZSBlYXJseSBwYXJ0cyB3ZWxsIGVub3VnaCBhbmQgbWFrZQorICAgdGhlbSBncmFkdWF0ZSB0byAnbmV4dCcgYW5kICdtYXN0ZXInLCBzbyB0aGF0IHRoZSBtb3JlIGludm9sdmVkCisgICBmb2xsb3ctdXAgY2FuIHN0YXJ0IGNvb2tpbmcgb24gYSBzb2xpZCBncm91bmQuCisKKyAqIFNvbWUgZmVhdHVyZXMgZnJvbSAiZ2l0IHRhZyAtbCIgYW5kICJnaXQgYnJhbmNoIC1sIiBoYXZlIGJlZW4gbWFkZQorICAgYXZhaWxhYmxlIHRvICJnaXQgZm9yLWVhY2gtcmVmIiBzbyB0aGF0IGV2ZW50dWFsbHkgdGhlIHVuaWZpZWQKKyAgIGltcGxlbWVudGF0aW9uIGNhbiBiZSBzaGFyZWQgYWNyb3NzIGFsbCB0aHJlZS4gIFRoZSB2ZXJzaW9uIG1lcmdlZAorICAgdG8gdGhlICdtYXN0ZXInIGJyYW5jaCBlYXJsaWVyIGhhZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4gInRhZworICAgLS1jb250YWlucyIsIHdoaWNoIGhhcyBzaW5jZSBiZWVuIGNvcnJlY3RlZC4KKworICogQmVjYXVzZSAidGVzdF93aGVuX2ZpbmlzaGVkIiBpbiBvdXIgdGVzdCBmcmFtZXdvcmsgcXVldWVzIHRoZQorICAgY2xlYW4tdXAgdGFza3MgdG8gYmUgZG9uZSBpbiBhIHNoZWxsIHZhcmlhYmxlLCBpdCBzaG91bGQgbm90IGJlCisgICB1c2VkIGluc2lkZSBhIHN1YnNoZWxsLiAgQWRkIGEgbWVjaGFuaXNtIHRvIGFsbG93ICdiYXNoJyB0byBjYXRjaAorICAgc3VjaCB1c2VzLCBhbmQgZml4IHRoZSBvbmVzIHRoYXQgd2VyZSBmb3VuZC4KKworICogVGhlIGRlYnVnZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgcGt0LWxpbmUgYmFzZWQgY29tbXVuaWNhdGlvbiBoYXMKKyAgIGJlZW4gaW1wcm92ZWQgdG8gbWFyayB0aGUgc2lkZS1iYW5kIGNvbW11bmljYXRpb24gc3BlY2lmaWNhbGx5LgorCisgKiBVcGRhdGUgImdpdCBicmFuY2giIHRoYXQgbGlzdCBleGlzdGluZyBicmFuY2hlcywgdXNpbmcgdGhlCisgICByZWYtZmlsdGVyIEFQSSB0aGF0IGlzIHNoYXJlZCB3aXRoICJnaXQgdGFnIiBhbmQgImdpdAorICAgZm9yLWVhY2gtcmVmIi4KKworICogVGhlIHRlc3QgZm9yIHZhcmlvdXMgbGluZS1lbmRpbmcgY29udmVyc2lvbnMgaGFzIGJlZW4gZW5oYW5jZWQuCisKKyAqIEEgZmV3IHRlc3Qgc2NyaXB0cyBhcm91bmQgImdpdCBwNCIgaGF2ZSBiZWVuIGltcHJvdmVkIGZvcgorICAgcG9ydGFiaWxpdHkuCisKKyAqIE1hbnkgYWxsb2NhdGlvbnMgdGhhdCBpcyBtYW51YWxseSBjb3VudGVkIChjb3JyZWN0bHkpIHRoYXQgYXJlCisgICBmb2xsb3dlZCBieSBzdHJjcHkvc3ByaW50ZiBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGxlc3MgZXJyb3IKKyAgIHByb25lIGNvbnN0cnVjdHMgc3VjaCBhcyB4c3RyZm10LgorCisgKiBUaGUgaW50ZXJuYWwgc3RyaXBzcGFjZSgpIGZ1bmN0aW9uIGhhcyBiZWVuIG1vdmVkIHRvIHdoZXJlIGl0CisgICBsb2dpY2FsbHkgYmVsb25ncyB0bywgaS5lLiBzdHJidWYgQVBJLCBhbmQgdGhlIGNvbW1hbmQgbGluZSBwYXJzZXIKKyAgIG9mICJnaXQgc3RyaXBzcGFjZSIgaGFzIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIHBhcnNlX29wdGlvbnMgQVBJLgorCisgKiAiZ2l0IGFtIiB1c2VkIHRvIHNwYXduICJnaXQgbWFpbGluZm8iIHZpYSBydW5fY29tbWFuZCgpIEFQSSBvbmNlCisgICBwZXIgZWFjaCBwYXRjaCwgYnV0IGxlYXJuZWQgdG8gbWFrZSBhIGRpcmVjdCBjYWxsIHRvIG1haWxpbmZvKCkKKyAgIGluc3RlYWQuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAiZ2l0IG1haWxpbmZvIiB3YXMgcmVmYWN0b3JlZCBzbyB0aGF0IGEKKyAgIG1haWxpbmZvKCkgZnVuY3Rpb24gY2FuIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGluc2lkZSBhIHByb2Nlc3MuCisKKyAqIFdpdGggYSAiZGVidWciIGhlbHBlciwgZGVidWdnaW5nIG9mIGEgc2luZ2xlICJnaXQiIGludm9jYXRpb24gaW4KKyAgIG91ciB0ZXN0IHNjcmlwdHMgaGFzIGJlY29tZSBhIGxvdCBlYXNpZXIuCisKKyAqIFRoZSAiY29uZmlndXJlIiBzY3JpcHQgZGlkIG5vdCB0ZXN0IGZvciAtbHB0aHJlYWQgY29ycmVjdGx5LCB3aGljaAorICAgdXBzZXQgc29tZSBsaW5rZXJzLgorCisgKiBDcm9zcyBjb21wbGV0ZWQgdGFzayBvZmYgb2Ygc3VidHJlZSBwcm9qZWN0J3MgdG9kbyBsaXN0LgorCisgKiBUZXN0IGNsZWFudXBzIGZvciB0aGUgc3VidHJlZSBwcm9qZWN0LgorCisgKiBDbGVhbiB1cCBzdHlsZSBpbiBhbiBhbmNpZW50IHRlc3QgdDkzMDAuCisKKyAqIFdvcmsgYXJvdW5kIHNvbWUgdGVzdCBmbGFraW5lc3Mgd2l0aCBwNGQuCisKKyAqIEZzY2sgZGlkIG5vdCBjb3JyZWN0bHkgZGV0ZWN0IGEgTlVMLXRydW5jYXRlZCBoZWFkZXIgaW4gYSB0YWcuCisKKyAqIFVzZSBhIHNhZmVyIGJlaGF2aW9yIHdoZW4gd2UgaGl0IGVycm9ycyB2ZXJpZnlpbmcgcmVtb3RlIGNlcnRpZmljYXRlcy4KKworICogU3BlZWQgdXAgZmlsdGVyLWJyYW5jaCBmb3IgY2FzZXMgd2hlcmUgd2Ugb25seSBjYXJlIGFib3V0IHJld3JpdGluZworICAgY29tbWl0cywgbm90IHRyZWUgZGF0YS4KKworICogVGhlIHBhcnNlLW9wdGlvbnMgQVBJIGhhcyBiZWVuIHVwZGF0ZWQgdG8gbWFrZSAiLWgiIGNvbW1hbmQgbGluZQorICAgb3B0aW9uIHdvcmsgbW9yZSBjb25zaXN0ZW50bHkgaW4gYWxsIGNvbW1hbmRzLgorCisgKiAiZ2l0IHN2biByZWJhc2UvbWtkaXJzIiBnb3Qgb3B0aW1pemVkIGJ5IGtlZXBpbmcgdHJhY2sgb2YgZW1wdHkKKyAgIGRpcmVjdG9yaWVzIGJldHRlci4KKworICogRml4IHNvbWUgcmFjeSBjbGllbnQvc2VydmVyIHRlc3RzIGJ5IHRyZWF0aW5nIFNJR1BJUEUgdGhlIHNhbWUgYXMgYQorICAgbm9ybWFsIG5vbi16ZXJvIGV4aXQuCisKKyAqIFRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgdG8gYnVpbGQgdG9waWNzIHVzaW5nIHRoZSBmcmVlIFRyYXZpcworICAgQ0kgaGFzIGJlZW4gYWRkZWQuIERldmVsb3BlcnMgZm9ya2luZyBmcm9tIHRoaXMgdG9waWMgKGFuZCBlbmFibGluZworICAgVHJhdmlzKSBjYW4gZG8gdGhlaXIgb3duIGJ1aWxkcywgYW5kIHdlIGNhbiB0dXJuIG9uIGF1dG8tYnVpbGRzIGZvcgorICAgZ2l0L2dpdCAoaW5jbHVkaW5nIGJ1aWxkLXN0YXR1cyBmb3IgcHVsbCByZXF1ZXN0cyB0aGF0IHBlb3BsZQorICAgb3BlbikuCisKKyAqIFRoZSB3cml0ZSgyKSBlbXVsYXRpb24gZm9yIFdpbmRvd3MgbGVhcm5lZCB0byBzZXQgZXJybm8gdG8gRVBJUEUKKyAgIHdoZW4gbmVjZXNzYXJ5LgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjYKKy0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi42IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqIFZlcnkgc21hbGwgbnVtYmVyIG9mIG9wdGlvbnMgdGFrZSBhIHBhcmFtZXRlciB0aGF0IGlzIG9wdGlvbmFsCisgICAod2hpY2ggaXMgbm90IGEgZ3JlYXQgVUkgZWxlbWVudCBhcyB0aGV5IGNhbiBvbmx5IGFwcGVhciBhdCB0aGUgZW5kCisgICBvZiB0aGUgY29tbWFuZCBsaW5lKS4gIEFkZCBub3RpY2UgdG8gZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGFuZAorICAgZXZlcnkgb25lIG9mIHRoZW0uCisKKyAqICJnaXQgYmxhbWUgLS1maXJzdC1wYXJlbnQgdjEuMC4udjIuMCIgd2FzIG5vdCByZWplY3RlZCBidXQgZGlkIG5vdAorICAgbGltaXQgdGhlIGJsYW1lIHRvIGNvbW1pdHMgb24gdGhlIGZpcnN0IHBhcmVudCBjaGFpbi4KKworICogImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIG5vdyBjYW4gdGFrZSB3aGl0ZXNwYWNlcyBpbiB0aGUKKyAgIHBhdGhuYW1lcywgbm90IG9ubHkgaW4gdGhlIGluLXRyZWUgcGF0aG5hbWUgYnV0IHRoZSBuYW1lIG9mIHRoZQorICAgZGlyZWN0b3J5IHRoYXQgdGhlIHJlcG9zaXRvcnkgaXMgaW4uCisKKyAqIFRoZSBzc2ggdHJhbnNwb3J0LCBqdXN0IGxpa2UgYW55IG90aGVyIHRyYW5zcG9ydCBvdmVyIHRoZSBuZXR3b3JrLAorICAgZGlkIG5vdCBjbGVhciBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0bworICAgdXNlIFNlbmRFbnYgYW5kIEFjY2VwdEVudiB0byBsZWFrIHRoZW0gdG8gdGhlIHJlbW90ZSBpbnZvY2F0aW9uIG9mCisgICBHaXQsIHdoaWNoIGlzIG5vdCBhIGdvb2QgaWRlYSBhdCBhbGwuICBFeHBsaWNpdGx5IGNsZWFyIHRoZW0ganVzdAorICAgbGlrZSB3ZSBkbyBmb3IgdGhlIGxvY2FsIHRyYW5zcG9ydC4KKworICogQ29ycmVjdCAiZ2l0IHA0IC0tZGV0ZWN0LWxhYmVscyIgc28gdGhhdCBpdCBkb2VzIG5vdCBmYWlsIHRvIGNyZWF0ZQorICAgYSB0YWcgdGhhdCBwb2ludHMgYXQgYSBjb21taXQgdGhhdCBpcyBhbHNvIGJlaW5nIGltcG9ydGVkLgorCisgKiBUaGUgTWFrZWZpbGUgYWx3YXlzIHJ1bnMgdGhlIGxpYnJhcnkgYXJjaGl2ZXIgd2l0aCBoYXJkY29kZWQgImNycyIKKyAgIG9wdGlvbnMsIHdoaWNoIHdhcyBpbmNvbnZlbmllbnQgZm9yIGV4b3RpYyBwbGF0Zm9ybXMgb24gd2hpY2gKKyAgIHBlb3BsZSB3YW50IHRvIHVzZSBwcm9ncmFtcyB3aXRoIHRvdGFsbHkgZGlmZmVyZW50IHNldCBvZiBjb21tYW5kCisgICBsaW5lIG9wdGlvbnMuCisKKyAqIEN1c3RvbWl6YXRpb24gdG8gY2hhbmdlIHRoZSBiZWhhdmlvdXIgd2l0aCAibWFrZSAtdyIgYW5kICJtYWtlIC1zIgorICAgaW4gb3VyIE1ha2VmaWxlIHdhcyBicm9rZW4gd2hlbiB0aGV5IHdlcmUgdXNlZCB0b2dldGhlci4KKworICogQWxsb2NhdGlvbiByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc3RkaW8gYXJlIHVuc2FmZSB0aGluZ3MgdG8gY2FsbAorICAgaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIsIGFuZCBpbmRlZWQga2lsbGluZyB0aGUgcGFnZXIgY2FuIGNhdXNlCisgICBnbGliYyB0byBkZWFkbG9jayB3YWl0aW5nIG9uIGFsbG9jYXRpb24gbXV0ZXggYXMgb3VyIHNpZ25hbCBoYW5kbGVyCisgICB0cmllcyB0byBmcmVlKCkgc29tZSBkYXRhIHN0cnVjdHVyZXMgaW4gd2FpdF9mb3JfcGFnZXIoKS4gIFJlZHVjZQorICAgdGhlc2UgdW5zYWZlIGNhbGxzLgorCisgKiBUaGUgd2F5IGhvdyAtLXJlZi8tLW5vdGVzIHRvIHNwZWNpZnkgdGhlIG5vdGVzIHRyZWUgcmVmZXJlbmNlIGFyZQorICAgRFdJTW1lZCB3YXMgbm90IGNsZWFybHkgZG9jdW1lbnRlZC4KKworICogImdpdCBnYyIgdXNlZCB0byBiYXJmIHdoZW4gYSBzeW1ib2xpYyByZWYgaGFzIGdvbmUgZGFuZ2xpbmcKKyAgIChlLmcuIHRoZSBicmFuY2ggdGhhdCB1c2VkIHRvIGJlIHlvdXIgdXBzdHJlYW0ncyBkZWZhdWx0IHdoZW4geW91CisgICBjbG9uZWQgZnJvbSBpdCBpcyBub3cgZ29uZSwgYW5kIHlvdSBkaWQgImZldGNoIC0tcHJ1bmUiKS4KKworICogImdpdCBjbG9uZSAtLWRpc3NvY2lhdGUiIHJ1bnMgYSBiaWcgImdpdCByZXBhY2siIHByb2Nlc3MgYXQgdGhlCisgICBlbmQsIGFuZCBpdCBoZWxwcyB0byBjbG9zZSBmaWxlIGRlc2NyaXB0b3JzIHRoYXQgYXJlIG9wZW4gb24gdGhlCisgICBwYWNrcyBhbmQgdGhlaXIgaWR4IGZpbGVzIGJlZm9yZSBkb2luZyBzbyBvbiBmaWxlc3lzdGVtcyB0aGF0CisgICBjYW5ub3QgcmVtb3ZlIGEgZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4uCisKKyAqIERlc2NyaXB0aW9uIG9mIHRoZSAibG9nLmZvbGxvdyIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiAiZ2l0IGxvZyIKKyAgIGRvY3VtZW50YXRpb24gaXMgbm93IGFsc28gY29waWVkIHRvICJnaXQgY29uZmlnIiBkb2N1bWVudGF0aW9uLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgaGFkIGEgbWlub3IgcmVncmVzc2lvbiByZWNlbnRseSwgd2hpY2ggc3RvcHBlZAorICAgY29uc2lkZXJpbmcgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggYW4gaW5kZW50ZWQgJyMnIGluIGl0cyBpbnNuCisgICBzaGVldCBub3QgYSBjb21tZW50LiBGdXJ0aGVyLCB0aGUgY29kZSB3YXMgc3RpbGwgdG9vIHBpY2t5IG9uCisgICBXaW5kb3dzIHdoZXJlIENSTEYgbGVmdCBieSB0aGUgZWRpdG9yIGlzIHR1cm5lZCBpbnRvIGEgdHJhaWxpbmcgQ1IKKyAgIG9uIHRoZSBsaW5lIHJlYWQgdmlhIHRoZSAicmVhZCIgYnVpbHQtaW4gY29tbWFuZCBvZiBiYXNoLiAgQm90aCBvZgorICAgdGhlc2UgaXNzdWVzIGFyZSBub3cgZml4ZWQuCisKKyAqIEFmdGVyICJnaXQgY2hlY2tvdXQgLS1kZXRhY2giLCAiZ2l0IHN0YXR1cyIgcmVwb3J0ZWQgYSBmYWlybHkKKyAgIHVzZWxlc3MgIkhFQUQgZGV0YWNoZWQgYXQgSEVBRCIsIGluc3RlYWQgb2Ygc2F5aW5nIGF0IHdoaWNoIGV4YWN0CisgICBjb21taXQuCisKKyAqIFdoZW4gImdpdCBzZW5kLWVtYWlsIiB3YW50ZWQgdG8gdGFsayBvdmVyIE5ldDo6U01UUDo6U1NMLAorICAgTmV0OjpDbWQ6OmRhdGFzZW5kKCkgZGlkIG5vdCBsaWtlIHRvIGJlIGZlZCB0b28gbWFueSBieXRlcyBhdCB0aGUKKyAgIHNhbWUgdGltZSBhbmQgZmFpbGVkIHRvIHNlbmQgbWVzc2FnZXMuICBTZW5kIHRoZSBwYXlsb2FkIG9uZSBsaW5lCisgICBhdCBhIHRpbWUgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0uCisKKyAqIFdoZW4gImdpdCBhbSIgd2FzIHJld3JpdHRlbiBhcyBhIGJ1aWx0LWluLCBpdCBzdG9wcGVkIHBheWluZworICAgYXR0ZW50aW9uIHRvIHVzZXIuc2lnbmluZ2tleSwgd2hpY2ggd2FzIGZpeGVkLgorCisgKiBJdCB3YXMgbm90IHBvc3NpYmxlIHRvIHVzZSBhIHJlcG9zaXRvcnktbG9va2FsaWtlIGNyZWF0ZWQgYnkgImdpdAorICAgd29ya3RyZWUgYWRkIiBhcyBhIGxvY2FsIHNvdXJjZSBvZiAiZ2l0IGNsb25lIi4KKworICogT24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zLCBzZXR0aW5nIEdJVF9XT1JLX1RSRUUgdmFyaWFibGUKKyAgIHVzaW5nIGEgcmFuZG9tIGNhc2VzIHRoYXQgZG9lcyBub3QgYWdyZWUgd2l0aCB3aGF0IHRoZSBmaWxlc3lzdGVtCisgICB0aGlua3MgY29uZnVzZWQgR2l0IHRoYXQgaXQgd2Fzbid0IGluc2lkZSB0aGUgd29ya2luZyB0cmVlLgorCisgKiBQZXJmb3JtYW5jZS1tZWFzdXJlbWVudCB0ZXN0cyBkaWQgbm90IHdvcmsgd2l0aG91dCBhbiBpbnN0YWxsZWQgR2l0LgorCisgKiBBIHRlc3Qgc2NyaXB0IGZvciB0aGUgSFRUUCBzZXJ2aWNlIGhhZCBhIHRpbWluZyBkZXBlbmRlbnQgYnVnLAorICAgd2hpY2ggd2FzIGZpeGVkLgorCisgKiBUaGVyZSB3ZXJlIHNvbWUgY2xhc3NlcyBvZiBlcnJvcnMgdGhhdCAiZ2l0IGZzY2siIGRpYWdub3NlZCB0byBpdHMKKyAgIHN0YW5kYXJkIGVycm9yIHRoYXQgZGlkIG5vdCBjYXVzZSBpdCB0byBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLgorCisgKiBXb3JrIGFyb3VuZCAiZ2l0IHA0IiBmYWlsaW5nIHdoZW4gdGhlIFA0IGRlcG90IHJlY29yZHMgdGhlIGNvbnRlbnRzCisgICBpbiBVVEYtMTYgd2l0aG91dCBVVEYtMTYgQk9NLgorCisgKiBXaGVuICJnaXQgZ2MgLS1hdXRvIiBpcyBiYWNrZ3JvdW5kZWQsIGl0cyBkaWFnbm9zaXMgbWVzc2FnZSBpcworICAgbG9zdC4gIFNhdmUgaXQgdG8gYSBmaWxlIGluICRHSVRfRElSIGFuZCBzaG93IGl0IG5leHQgdGltZSB0aGUgImdjCisgICAtLWF1dG8iIGlzIHJ1bi4KKworICogVGhlIHN1Ym1vZHVsZSBjb2RlIGhhcyBiZWVuIHRhdWdodCB0byB3b3JrIGJldHRlciB3aXRoIHNlcGFyYXRlCisgICB3b3JrIHRyZWVzIGNyZWF0ZWQgdmlhICJnaXQgd29ya3RyZWUgYWRkIi4KKworICogImdpdCBnYyIgaXMgc2FmZSB0byBydW4gYW55dGltZSBvbmx5IGJlY2F1c2UgaXQgaGFzIHRoZSBidWlsdC1pbgorICAgZ3JhY2UgcGVyaW9kIHRvIHByb3RlY3QgeW91bmcgb2JqZWN0cy4gIEluIG9yZGVyIHRvIHJ1biB3aXRoIG5vCisgICBncmFjZSBwZXJpb2QsIHRoZSB1c2VyIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlcG9zaXRvcnkgaXMKKyAgIHF1aWVzY2VudC4KKworICogQSByZWNlbnQgImZpbHRlci1icmFuY2ggLS1tc2ctZmlsdGVyIiBicm9rZSBza2lwcGluZyBvZiB0aGUgY29tbWl0CisgICBvYmplY3QgaGVhZGVyLCB3aGljaCBpcyBmaXhlZC4KKworICogVGhlIG5vcm1hbGl6ZV9jZWlsaW5nX2VudHJ5KCkgZnVuY3Rpb24gZG9lcyBub3QgbXVjayB3aXRoIHRoZSBlbmQKKyAgIG9mIHRoZSBwYXRoIGl0IGFjY2VwdHMsIGFuZCB0aGUgcmVhbCB3b3JsZCBjYWxsZXJzIGRvIHJlbHkgb24gdGhhdCwKKyAgIGJ1dCBhIHRlc3QgaW5zaXN0ZWQgdGhhdCB0aGUgZnVuY3Rpb24gZHJvcHMgYSB0cmFpbGluZyBzbGFzaC4KKworICogQSB0ZXN0IGZvciBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVudHJhY2tlZCBjYWNoZSBhbmQgc3BhcnNlIGNoZWNrb3V0CisgICBhZGRlZCBpbiBHaXQgMi41IGRheXMgd2VyZSBmbGFreS4KKworICogQSBjb3VwbGUgb2YgY29tbWFuZHMgc3RpbGwgc2hvd2VkICJbb3B0aW9uc10iIGluIHRoZWlyIHVzYWdlIHN0cmluZworICAgdG8gbm90ZSB3aGVyZSBvcHRpb25zIHNob3VsZCBjb21lIG9uIHRoZWlyIGNvbW1hbmQgbGluZSwgYnV0IHdlCisgICBzcGVsbCB0aGF0ICJbPG9wdGlvbnM+XSIgaW4gbW9zdCBwbGFjZXMgdGhlc2UgZGF5cy4KKworICogVGhlIHN5bm9wc2lzIHRleHQgYW5kIHRoZSB1c2FnZSBzdHJpbmcgb2Ygc3ViY29tbWFuZHMgdGhhdCByZWFkCisgICBsaXN0IG9mIHRoaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBhcmUgb2Z0ZW4gc2hvd24gYXMgaWYgdGhleQorICAgb25seSB0YWtlIGlucHV0IGZyb20gYSBmaWxlIG9uIGEgZmlsZXN5c3RlbSwgd2hpY2ggd2FzIG1pc2xlYWRpbmcuCisKKyAqICJnaXQgYW0gLTMiIGhhZCBhIHNtYWxsIHJlZ3Jlc3Npb24gd2hlcmUgaXQgaXMgYWJvcnRlZCBpbiBpdHMgZXJyb3IKKyAgIGhhbmRsaW5nIGNvZGVwYXRoIHdoZW4gdW5kZXJseWluZyBtZXJnZS1yZWN1cnNpdmUgZmFpbGVkIGluIGNlcnRhaW4KKyAgIHdheXMsIGFzIGl0IGFzc3VtZWQgdGhhdCB0aGUgaW50ZXJuYWwgY2FsbCB0byBtZXJnZS1yZWN1cnNpdmUgd2lsbAorICAgbmV2ZXIgZGllLCB3aGljaCBpcyBub3QgdGhlIGNhc2UgKHlldCkuCisKKyAqIFRoZSBsaW5rYWdlIG9yZGVyIG9mIGxpYnJhcmllcyB3YXMgd3JvbmcgaW4gcGxhY2VzIGFyb3VuZCBsaWJjdXJsLgorCisgKiBUaGUgbmFtZS1oYXNoIHN1YnN5c3RlbSB0aGF0IGlzIHVzZWQgdG8gY29wZSB3aXRoIGNhc2UgaW5zZW5zaXRpdmUKKyAgIGZpbGVzeXN0ZW1zIGtlZXBzIHRyYWNrIG9mIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBvbi1maWxlc3lzdGVtCisgICBjYXNlcyBmb3IgYWxsIHRoZSBwYXRocyBpbiB0aGUgaW5kZXggYnkgaG9sZGluZyBhIHBvaW50ZXIgdG8gYQorICAgcmFuZG9tbHkgY2hvc2VuIGNhY2hlIGVudHJ5IHRoYXQgaXMgaW5zaWRlIHRoZSBkaXJlY3RvcnkgKGZvciBpdHMKKyAgIGNlLT5jZV9uYW1lIGNvbXBvbmVudCkuICBUaGlzIHBvaW50ZXIgd2FzIG5vdCB1cGRhdGVkIGV2ZW4gd2hlbiB0aGUKKyAgIGNhY2hlIGVudHJ5IHdhcyByZW1vdmVkIGZyb20gdGhlIGluZGV4LCBsZWFkaW5nIHRvIHVzZSBhZnRlciBmcmVlLgorICAgVGhpcyB3YXMgZml4ZWQgYnkgcmVjb3JkaW5nIHRoZSBwYXRoIGZvciBlYWNoIGRpcmVjdG9yeSBpbnN0ZWFkIG9mCisgICBib3Jyb3dpbmcgY2FjaGUgZW50cmllcyBhbmQgcmVzdHJ1Y3R1cmluZyB0aGUgQVBJIHNvbWV3aGF0LgorCisgKiAiZ2l0IG1lcmdlLWZpbGUiIHRyaWVkIHRvIHNpZ25hbCBob3cgbWFueSBjb25mbGljdHMgaXQgZm91bmQsIHdoaWNoCisgICBvYnZpb3VzbHkgd291bGQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZXJlIGFyZSB0b28gbWFueSBvZiB0aGVtLgorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgYmxhbWUgLS1jb250ZW50cyAtLXJldmVyc2UiIGluY29ycmVjdGx5CisgICB0YWxrZWQgYWJvdXQgIi0tY29udGVudHMgLS1jaGlsZHJlbiIuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IGNvbXBpbGUgd2VsbCB3aXRoIG9sZGVyIHZlcnNpb24gb2YgY1VSTCBsaWJyYXJ5LgorCisgKiBNZXJnaW5nIGEgYnJhbmNoIHRoYXQgcmVtb3ZlcyBhIHBhdGggYW5kIGFub3RoZXIgdGhhdCBjaGFuZ2VzIHRoZQorICAgbW9kZSBiaXRzIG9uIHRoZSBzYW1lIHBhdGggc2hvdWxkIGhhdmUgY29uZmxpY3RlZCBhdCB0aGUgcGF0aCwgYnV0CisgICBpdCBkaWRuJ3QgYW5kIHNpbGVudGx5IGZhdm91cmVkIHRoZSByZW1vdmFsLgorCisgKiAiZ2l0IC0tbGl0ZXJhbC1wYXRoc3BlY3MgYWRkIC11Ly1BIiB3aXRob3V0IGFueSBjb21tYW5kIGxpbmUKKyAgIGFyZ3VtZW50IG1pc2JlaGF2ZWQgZXZlciBzaW5jZSBHaXQgMi4wLgorCisgKiAiZ2l0IGRhZW1vbiIgdXNlcyAicnVuX2NvbW1hbmQoKSIgd2l0aG91dCAiZmluaXNoX2NvbW1hbmQoKSIsIHNvIGl0CisgICBuZWVkcyB0byByZWxlYXNlIHJlc291cmNlcyBpdHNlbGYsIHdoaWNoIGl0IGZvcmdvdCB0byBkby4KKworICogImdpdCBzdGF0dXMgLS1icmFuY2ggLS1zaG9ydCIgYWNjZXNzZWQgYmV5b25kIHRoZSBjb25zdGFudCBzdHJpbmcKKyAgICJIRUFEIiwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBXZSBwZWVrIG9iamVjdHMgZnJvbSBzdWJtb2R1bGUncyBvYmplY3Qgc3RvcmUgYnkgbGlua2luZyBpdCB0byB0aGUKKyAgIGxpc3Qgb2YgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZXMsIGJ1dCB0aGUgY29kZSB0byBkbyBzbyBmb3Jnb3QgdG8KKyAgIGNvcnJlY3RseSBpbml0aWFsaXplIHRoZSBsaXN0LgorCisgKiBUaGUgY29kZSB0byBwcmVwYXJlIHRoZSB3b3JraW5nIHRyZWUgc2lkZSBvZiB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICBmb3IgdGhlICJkaXItZGlmZiIgZmVhdHVyZSBmb3Jnb3QgdGhhdCBzeW1ib2xpYyBsaW5rcyBuZWVkIG5vdCBiZQorICAgY29waWVkIChvciBzeW1saW5rZWQpIHRvIHRoZSB0ZW1wb3JhcnkgYXJlYSwgYXMgdGhlIGNvZGUgYWxyZWFkeQorICAgc3BlY2lhbCBjYXNlcyBhbmQgb3ZlcndyaXRlcyB0aGVtLiAgQmVzaWRlcywgaXQgd2FzIHdyb25nIHRvIHRyeQorICAgY29tcHV0aW5nIHRoZSBvYmplY3QgbmFtZSBvZiB0aGUgdGFyZ2V0IG9mIHN5bWJvbGljIGxpbmssIHdoaWNoIG1heQorICAgbm90IGV2ZW4gZXhpc3Qgb3IgbWF5IGJlIGEgZGlyZWN0b3J5LgorCisgKiBBIFJhbmdlOiByZXF1ZXN0IGNhbiBiZSByZXNwb25kZWQgd2l0aCBhIGZ1bGwgcmVzcG9uc2UgYW5kIHdoZW4KKyAgIGFza2VkIHByb3Blcmx5IGxpYmN1cmwga25vd3MgaG93IHRvIHN0cmlwIHRoZSByZXN1bHQgZG93biB0byB0aGUKKyAgIHJlcXVlc3RlZCByYW5nZS4gIEhvd2V2ZXIsIHdlIHdlcmUgaGFuZC1jcmFmdGluZyBhIHJhbmdlIHJlcXVlc3QKKyAgIGFuZCBpdCBkaWQgbm90IGtpY2sgaW4uCisKKyAqIEhhdmluZyBhIGxlZnRvdmVyIC5pZHggZmlsZSB3aXRob3V0IGNvcnJlc3BvbmRpbmcgLnBhY2sgZmlsZSBpbgorICAgdGhlIHJlcG9zaXRvcnkgaHVydHMgcGVyZm9ybWFuY2U7ICJnaXQgZ2MiIGxlYXJuZWQgdG8gcHJ1bmUgdGhlbS4KKworICogQXBwbGUncyBjb21tb24gY3J5cHRvIGltcGxlbWVudGF0aW9uIG9mIFNIQTFfVXBkYXRlKCkgZG9lcyBub3QgdGFrZQorICAgbW9yZSB0aGFuIDRHQiBhdCBhIHRpbWUsIGFuZCB3ZSBub3cgaGF2ZSBhIGNvbXBpbGUtdGltZSB3b3JrYXJvdW5kCisgICBmb3IgaXQuCisKKyAqIFByb2R1Y2UgY29ycmVjdCAiZGlydHkiIG1hcmtlciBmb3Igc2hlbGwgcHJvbXB0cywgZXZlbiB3aGVuIHdlCisgICBhcmUgb24gYW4gb3JwaGFuIG9yIGFuIHVuYm9ybiBicmFuY2guCisKKyAqIEEgYnVpbGQgd2l0aG91dCBOT19JUHY2IHVzZWQgdG8gdXNlIGdldGhvc3RieW5hbWUoKSB3aGVuIGd1ZXNzaW5nCisgICB1c2VyJ3MgaG9zdG5hbWUsIGluc3RlYWQgb2YgZ2V0YWRkcmluZm8oKSB0aGF0IGlzIHVzZWQgaW4gb3RoZXIKKyAgIGNvZGVwYXRocyBpbiBzdWNoIGEgYnVpbGQuCisKKyAqIFRoZSBleGl0IGNvZGUgb2YgZ2l0LWZzY2sgZGlkIG5vdCByZWZsZWN0IHNvbWUgdHlwZXMgb2YgZXJyb3JzCisgICBmb3VuZCBpbiBwYWNrZWQgb2JqZWN0cywgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgaGVscGVyIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIGxvb3NlIG9iamVjdCBkaXJlY3RvcmllcyB0byBwcnVuZQorICAgc3RhbGUgb2JqZWN0cyBkaWQgbm90IGNsb3NlZGlyKCkgaW1tZWRpYXRlbHkgd2hlbiBpdCBpcyBkb25lIHdpdGggYQorICAgZGlyZWN0b3J5LS1hIGNhbGxiYWNrIHN1Y2ggYXMgdGhlIG9uZSB1c2VkIGZvciAiZ2l0IHBydW5lIiBtYXkgd2FudAorICAgdG8gZG8gcm1kaXIoKSwgYnV0IGl0IHdvdWxkIGZhaWwgb24gb3BlbiBkaXJlY3Rvcnkgb24gcGxhdGZvcm1zCisgICBzdWNoIGFzIFdpblhQLgorCisgKiAiZ2l0IHA0IiB1c2VkIHRvIGltcG9ydCBQZXJmb3JjZSBDTHMgdGhhdCB0b3VjaCBvbmx5IHBhdGhzIG91dHNpZGUKKyAgIHRoZSBjbGllbnQgc3BlYyBhcyBlbXB0eSBjb21taXRzLiAgSXQgaGFzIGJlZW4gY29ycmVjdGVkIHRvIGlnbm9yZQorICAgdGhlbSBpbnN0ZWFkLCB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24gZ2l0LXA0LmtlZXBFbXB0eUNvbW1pdHMgYXMgYQorICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBrbm9iLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSB1c2VkIHRvIGxpc3QgImdpdCBjb2x1bW4iCisgICAod2hpY2ggaXMgbm90IGFuIGVuZC11c2VyIGZhY2luZyBjb21tYW5kKSBhcyBvbmUgb2YgdGhlIGNob2ljZXMKKyAgIChtZXJnZSAxNjBmY2RiIHNnL2NvbXBsZXRpb24tbm8tY29sdW1uIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGVycm9yIHJlcG9ydGluZyBmcm9tICJnaXQgc2VuZC1lbWFpbCIsIHdoZW4gU01UUCBUTFMgZmFpbHMsIGhhcworICAgYmVlbiBpbXByb3ZlZC4KKyAgIChtZXJnZSA5ZDYwNTI0IGprL3NlbmQtZW1haWwtc3NsLWVycm9ycyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gZ2V0cHd1aWQoKSBvbiB0aGUgc3lzdGVtIHJldHVybmVkIE5VTEwgKGUuZy4gdGhlIHVzZXIgaXMgbm90CisgICBpbiB0aGUgL2V0Yy9wYXNzd2QgZmlsZSBvciBvdGhlciB1aWQtdG8tbmFtZSBtYXBwaW5ncyksIHRoZQorICAgY29kZXBhdGggdG8gZmluZCB3aG8gdGhlIHVzZXIgaXMgdG8gcmVjb3JkIGl0IGluIHRoZSByZWZsb2cgYmFyZmVkCisgICBhbmQgZGllZC4gIExvb3NlbiB0aGUgY2hlY2sgaW4gdGhpcyBjb2RlcGF0aCwgd2hpY2ggYWxyZWFkeSBhY2NlcHRzCisgICBxdWVzdGlvbmFibGUgaWRlbnQgc3RyaW5nIChlLmcuIGhvc3QgcGFydCBvZiB0aGUgZS1tYWlsIGFkZHJlc3MgaXMKKyAgIG9idmlvdXNseSBib2d1cyksIGFuZCBpbiBnZW5lcmFsIHdoZW4gd2Ugb3BlcmF0ZSBmbXRfaWRlbnQoKSBmdW5jdGlvbgorICAgaW4gbm9uLXN0cmljdCBtb2RlLgorICAgKG1lcmdlIDkyYmNiYjkgamsvaWRlbnQtbG9vc2VuLWdldHB3dWlkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzeW1ib2xpYy1yZWYiIGZvcmdvdCB0byByZXBvcnQgYSBmYWlsdXJlIHdpdGggaXRzIGV4aXQgc3RhdHVzLgorICAgKG1lcmdlIGY5MWIyNzMgamsvc3ltYm9saWMtcmVmLW1haW50IGxhdGVyIHRvIG1haW50KS4KKworICogSGlzdG9yeSB0cmF2ZXJzYWwgd2l0aCAiZ2l0IGxvZyAtLXNvdXJjZSIgdGhhdCBzdGFydHMgd2l0aCBhbgorICAgYW5ub3RhdGVkIHRhZyBmYWlsZWQgdG8gcmVwb3J0IHRoZSB0YWcgYXMgInNvdXJjZSIsIGR1ZSB0byBhbgorICAgb2xkIHJlZ3Jlc3Npb24gaW4gdGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgYmFjayBpbiB2Mi4yIGRheXMuCisgICAobWVyZ2UgNzI4MzUwYiBqay9wZW5kaW5nLWtlZXAtdGFnLW5hbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHA0IiB3aGVuIGludGVyYWN0aW5nIHdpdGggbXVsdGlwbGUgZGVwb3RzIGF0IHRoZSBzYW1lIHRpbWUKKyAgIHVzZWQgdG8gaW5jb3JyZWN0bHkgZHJvcCBjaGFuZ2VzLgorCisgKiBDb2RlIGNsZWFuLXVwLCBtaW5vciBmaXhlcyBldGMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjNmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4xLnR4dApAQCAtMCwwICsxLDg3IEBACitHaXQgdjIuNy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi43CistLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGVhcmxpZXIgY2hhbmdlIGluIDIuNS54LWVyYSBicm9rZSB1c2VycycgaG9va3MgYW5kIGFsaWFzZXMgYnkKKyAgIGV4cG9ydGluZyBHSVRfV09SS19UUkVFIHRvIHBvaW50IGF0IHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUsCisgICBpbnRlcmZlcmluZyB3aGVuIHRoZXkgdHJpZWQgdG8gdXNlIGEgZGlmZmVyZW50IHdvcmtpbmcgdHJlZSB3aXRob3V0CisgICBzZXR0aW5nIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQgdGhlbXNlbHZlcy4KKworICogVGhlICJleGNsdWRlX2xpc3QiIHN0cnVjdHVyZSBoYXMgdGhlIHVzdWFsICJhbGxvYywgbnIiIHBhaXIgb2YKKyAgIGZpZWxkcyB0byBiZSB1c2VkIGJ5IEFMTE9DX0dST1coKSwgYnV0IGNsZWFyX3BhdHRlcm5fbGlzdCgpIGZvcmdvdAorICAgdG8gcmVzZXQgJ2FsbG9jJyB0byAwIHdoZW4gaXQgY2xlYXJlZCAnbnInIHRvIGRpc2NhcmQgdGhlIG1hbmFnZWQKKyAgIGFycmF5LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHdhcyBjb25mdXNlZCBieSBlc2NhcGVkIHF1b3RlcyBzdG9yZWQgaW4gdGhlIGFsaWFzCisgICBmaWxlcyBzYXZlZCBieSAibXV0dCIsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQSBmZXcgdW5wb3J0YWJsZSBDIGNvbnN0cnVjdCBoYXZlIGJlZW4gc3BvdHRlZCBieSBjbGFuZyBjb21waWxlcgorICAgYW5kIGhhdmUgYmVlbiBmaXhlZC4KKworICogVGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZCB0byBoaW50IHRoZSBjb25uZWN0aW9uIGJldHdlZW4KKyAgIHRoZSAnLS1zaWdub2ZmJyBvcHRpb24gYW5kIERDTy4KKworICogImdpdCByZWZsb2ciIGluY29ycmVjdGx5IGFzc3VtZWQgdGhhdCBhbGwgb2JqZWN0cyB0aGF0IHVzZWQgdG8gYmUKKyAgIGF0IHRoZSB0aXAgb2YgYSByZWYgbXVzdCBiZSBjb21taXRzLCB3aGljaCBjYXVzZWQgaXQgdG8gc2VnZmF1bHQuCisKKyAqIFRoZSBpZ25vcmUgbWVjaGFuaXNtIHNhdyBhIGZldyByZWdyZXNzaW9ucyBhcm91bmQgdW50cmFja2VkIGZpbGUKKyAgIGxpc3RpbmcgYW5kIHNwYXJzZSBjaGVja291dCBzZWxlY3Rpb24gYXJlYXMgaW4gMi43LjA7IHRoZSBjaGFuZ2UKKyAgIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSByZWdyZXNzaW9uIGhhcyBiZWVuIHJldmVydGVkLgorCisgKiBTb21lIGNvZGVwYXRocyB1c2VkIGZvcGVuKDMpIHdoZW4gb3BlbmluZyBhIGZpeGVkIHBhdGggaW4gJEdJVF9ESVIKKyAgIChlLmcuIENPTU1JVF9FRElUTVNHKSB0aGF0IGlzIG1lYW50IHRvIGJlIGxlZnQgYWZ0ZXIgdGhlIGNvbW1hbmQgaXMKKyAgIGRvbmUuICBUaGlzIGhvd2V2ZXIgZGlkIG5vdCB3b3JrIHdlbGwgaWYgdGhlIHJlcG9zaXRvcnkgaXMgc2V0IHRvCisgICBiZSBzaGFyZWQgd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgYW5kIHRoZSB1bWFzayBvZiB0aGUgcHJldmlvdXMKKyAgIHVzZXIgaXMgdGlnaHRlci4gIFRoZXkgaGF2ZSBiZWVuIG1hZGUgdG8gd29yayBiZXR0ZXIgYnkgY2FsbGluZworICAgdW5saW5rKDIpIGFuZCByZXRyeWluZyBhZnRlciBmb3BlbigzKSBmYWlscyB3aXRoIEVQRVJNLgorCisgKiBBc2tpbmcgZ2l0d2ViIGZvciBhIG5vbmV4aXN0ZW50IGNvbW1pdCBsZWZ0IGEgd2FybmluZyBpbiB0aGUgc2VydmVyCisgICBsb2cuCisKKyAqICJnaXQgcmViYXNlIiwgdW5saWtlIGFsbCBvdGhlciBjYWxsZXJzIG9mICJnYyAtLWF1dG8iLCBkaWQgbm90CisgICBpZ25vcmUgdGhlIGV4aXQgY29kZSBmcm9tICJnYyAtLWF1dG8iLgorCisgKiBNYW55IGNvZGVwYXRocyB0aGF0IHJ1biAiZ2MgLS1hdXRvIiBiZWZvcmUgZXhpdGluZyBrZXB0IHBhY2tmaWxlcworICAgbWFwcGVkIGFuZCBsZWZ0IHRoZSBmaWxlIGRlc2NyaXB0b3JzIHRvIHRoZW0gb3Blbiwgd2hpY2ggd2FzIG5vdAorICAgZnJpZW5kbHkgdG8gc3lzdGVtcyB0aGF0IGNhbm5vdCByZW1vdmUgZmlsZXMgdGhhdCBhcmUgb3Blbi4gIFRoZXkKKyAgIG5vdyBjbG9zZSB0aGUgcGFja3MgYmVmb3JlIGRvaW5nIHNvLgorCisgKiBBIHJlY2VudCBvcHRpbWl6YXRpb24gdG8gZmlsdGVyLWJyYW5jaCBpbiB2Mi43LjAgaW50cm9kdWNlZCBhCisgICByZWdyZXNzaW9uIHdoZW4gLS1wcnVuZS1lbXB0eSBmaWx0ZXIgaXMgdXNlZCwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZC4KKworICogVGhlIGRlc2NyaXB0aW9uIGZvciBTQU5JVFkgcHJlcmVxdWlzaXRlIHRoZSB0ZXN0IHN1aXRlIHVzZXMgaGFzCisgICBiZWVuIGNsYXJpZmllZCBib3RoIGluIHRoZSBjb21tZW50IGFuZCBpbiB0aGUgaW1wbGVtZW50YXRpb24uCisKKyAqICJnaXQgdGFnIiBzdGFydGVkIGxpc3RpbmcgYSB0YWcgImZvbyIgYXMgInRhZ3MvZm9vIiB3aGVuIGEgYnJhbmNoCisgICBuYW1lZCAiZm9vIiBleGlzdHMgaW4gdGhlIHNhbWUgcmVwb3NpdG9yeTsgcmVtb3ZlIHRoaXMgdW5uZWNlc3NhcnkKKyAgIGRpc2FtYmlndWF0aW9uLCB3aGljaCBpcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiB2Mi43LjAuCisKKyAqIFRoZSB3YXkgImdpdCBzdm4iIHVzZXMgYXV0aCBwYXJhbWV0ZXIgd2FzIGJyb2tlbiBieSBTdWJ2ZXJzaW9uCisgICAxLjkuMCBhbmQgbGF0ZXIuCisKKyAqIFRoZSAic3BsaXQiIHN1YmNvbW1hbmQgb2YgImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIGluY29ycmVjdGx5CisgICBza2lwcGVkIG1lcmdlcyB3aGVuIGl0IHNob3VsZG4ndCwgd2hpY2ggd2FzIGNvcnJlY3RlZC4KKworICogQSBmZXcgb3B0aW9ucyBvZiAiZ2l0IGRpZmYiIGRpZCBub3Qgd29yayB3ZWxsIHdoZW4gdGhlIGNvbW1hbmQgd2FzCisgICBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICogZGlybmFtZSgpIGVtdWxhdGlvbiBoYXMgYmVlbiBhZGRlZCwgYXMgTXN5czIgbGFja3MgaXQuCisKKyAqIFRoZSB1bmRlcmx5aW5nIG1hY2hpbmVyeSB1c2VkIGJ5ICJscy1maWxlcyAtbyIgYW5kIG90aGVyIGNvbW1hbmRzCisgICBoYXZlIGJlZW4gdGF1Z2h0IG5vdCB0byBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIHJlZiBjYWNoZSBmb3IgYQorICAgZGlyZWN0b3J5IHRoYXQgaXMgbm90IGEgc3VibW9kdWxlLiAgVGhpcyByZW1vdmVzIGEgdG9uIG9mIHdhc3RlZAorICAgQ1BVIGN5Y2xlcy4KKworICogRHJvcCBhIGZldyBvbGQgInRvZG8iIGl0ZW1zIGJ5IGRlY2lkaW5nIHRoYXQgdGhlIGNoYW5nZSBvbmUgb2YgdGhlbQorICAgc3VnZ2VzdHMgaXMgbm90IHN1Y2ggYSBnb29kIGlkZWEsIGFuZCBkb2luZyB0aGUgY2hhbmdlIHRoZSBvdGhlcgorICAgb25lIHN1Z2dlc3RlZCB0byBkby4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgImdpdCBmZXRjaCAtLWRlcHRoIiBoYXMgYmVlbiB1cGRhdGVkIGZvciBjbGFyaXR5LgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gbGVhcm5lZCBhIGhhbmRmdWwgb2YgYWRkaXRpb25hbCBvcHRpb25zCisgICBhbmQgY29tbWFuZCBzcGVjaWZpYyBzeW50YXguCisKK0Fsc28gaW5jbHVkZXMgYSBoYW5kZnVsIG9mIGRvY3VtZW50YXRpb24gYW5kIHRlc3QgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlZWY3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjIudHh0CkBAIC0wLDAgKzEsNDEgQEAKK0dpdCB2Mi43LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjcuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBsb3ctbGV2ZWwgbWVyZ2UgbWFjaGluZXJ5IGhhcyBiZWVuIHRhdWdodCB0byB1c2UgQ1JMRiBsaW5lCisgICB0ZXJtaW5hdGlvbiB3aGVuIGluc2VydGluZyBjb25mbGljdCBtYXJrZXJzIHRvIG1lcmdlZCBjb250ZW50cyB0aGF0CisgICBhcmUgdGhlbXNlbHZlcyBDUkxGIGxpbmUtdGVybWluYXRlZC4KKworICogImdpdCB3b3JrdHJlZSIgaGFkIGEgYnJva2VuIGNvZGUgdGhhdCBhdHRlbXB0ZWQgdG8gYXV0by1maXgKKyAgIHBvc3NpYmxlIGluY29uc2lzdGVuY3kgdGhhdCByZXN1bHRzIGZyb20gZW5kLXVzZXJzIG1vdmluZyBhCisgICB3b3JrdHJlZSB0byBkaWZmZXJlbnQgcGxhY2VzIHdpdGhvdXQgdGVsbGluZyBHaXQgKHRoZSBvcmlnaW5hbAorICAgcmVwb3NpdG9yeSBuZWVkcyB0byBtYWludGFpbiBiYWNrcG9pbnRlcnMgdG8gaXRzIHdvcmt0cmVlcywgYnV0CisgICAibXYiIHJ1biBieSBlbmQtdXNlcnMgd2hvIGFyZSBub3QgZmFtaWxpYXIgd2l0aCB0aGF0IGZhY3Qgd2lsbAorICAgb2J2aW91c2x5IG5vdCBhZGp1c3QgdGhlbSksIHdoaWNoIGFjdHVhbGx5IG1hZGUgdGhpbmdzIHdvcnNlCisgICB3aGVuIHRyaWdnZXJlZC4KKworICogImdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZSIgaGFzIGJlZW4gdGF1Z2h0IHRvIHJlcG9ydCBpZiB0aGUgcHVzaAorICAgbmVlZGVkIHRvIGZvcmNlIChvciBmYXN0LWZvcndhcmRlZCkuCisKKyAqIFRoZSBlbXVsYXRlZCAieWVzIiBjb21tYW5kIHVzZWQgaW4gb3VyIHRlc3Qgc2NyaXB0cyBoYXMgYmVlbgorICAgdHdlYWtlZCBub3QgdG8gc3BlbmQgdG9vIG11Y2ggdGltZSBnZW5lcmF0aW5nIHVubmVjZXNzYXJ5IG91dHB1dAorICAgdGhhdCBpcyBub3QgdXNlZCwgdG8gaGVscCB0aG9zZSB3aG8gdGVzdCBvbiBXaW5kb3dzIHdoZXJlIGl0IHdvdWxkCisgICBub3Qgc3RvcCB1bnRpbCBpdCBmaWxscyB0aGUgcGlwZSBidWZmZXIgZHVlIHRvIGxhY2sgb2YgU0lHUElQRS4KKworICogVGhlIHZpbWRpZmYgYmFja2VuZCBmb3IgImdpdCBtZXJnZXRvb2wiIGhhcyBiZWVuIHR3ZWFrZWQgdG8gYXJyYW5nZQorICAgYW5kIG51bWJlciBidWZmZXJzIGluIHRoZSBvcmRlciB0aGF0IHdvdWxkIG1hdGNoIHRoZSBleHBlY3RhdGlvbiBvZgorICAgbWFqb3JpdHkgb2YgcGVvcGxlIHdobyByZWFkIGxlZnQgdG8gcmlnaHQsIHRoZW4gdG9wIGRvd24gYW5kIGFzc2lnbgorICAgYnVmZmVycyAxIDIgMyA0ICJtZW50YWxseSIgdG8gbG9jYWwgYmFzZSByZW1vdGUgbWVyZ2Ugd2luZG93cyBiYXNlZAorICAgb24gdGhhdCBvcmRlci4KKworICogVGhlIGRvY3VtZW50YXRpb24gZm9yICJnaXQgY2xlYW4iIGhhcyBiZWVuIGNvcnJlY3RlZDsgaXQgbWVudGlvbmVkCisgICB0aGF0IC5naXQvbW9kdWxlcy8qIGFyZSByZW1vdmVkIGJ5IGdpdmluZyB0d28gIi1mIiwgd2hpY2ggaGFzIG5ldmVyCisgICBiZWVuIHRoZSBjYXNlLgorCisgKiBQYXRocyB0aGF0IGhhdmUgYmVlbiB0b2xkIHRoZSBpbmRleCBhYm91dCB3aXRoICJhZGQgLU4iIGFyZSBub3QKKyAgIHF1aXRlIHlldCBpbiB0aGUgaW5kZXgsIGJ1dCBhIGZldyBjb21tYW5kcyBiZWhhdmVkIGFzIGlmIHRoZXkKKyAgIGFscmVhZHkgYXJlIGluIGEgaGFybWZ1bCB3YXkuCisKK0Fsc28gaW5jbHVkZXMgdGlueSBkb2N1bWVudGF0aW9uIGFuZCB0ZXN0IHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MThkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4zLnR4dApAQCAtMCwwICsxLDYyIEBACitHaXQgdjIuNy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUcmFkaXRpb25hbGx5LCB0aGUgdGVzdHMgdGhhdCB0cnkgY29tbWFuZHMgdGhhdCB3b3JrIG9uIHRoZQorICAgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB3ZXJlIG5hbWVkIHdpdGggIndvcmt0cmVlIiBpbiB0aGVpcgorICAgZmlsZW5hbWVzLCBidXQgd2l0aCB0aGUgcmVjZW50IGFkZGl0aW9uIG9mICJnaXQgd29ya3RyZWUiCisgICBzdWJjb21tYW5kLCB3aG9zZSB0ZXN0cyBhcmUgYWxzbyBuYW1lZCBzaW1pbGFybHksIGl0IGhhcyBiZWNvbWUKKyAgIGhhcmRlciB0byB0ZWxsIHRoZW0gYXBhcnQuICBUaGUgdHJhZGl0aW9uYWwgdGVzdHMgaGF2ZSBiZWVuIHJlbmFtZWQKKyAgIHRvIHVzZSAid29yay10cmVlIiBpbnN0ZWFkIGluIGFuIGF0dGVtcHQgdG8gZGlmZmVyZW50aWF0ZSB0aGVtLgorCisgKiBNYW55IGNvZGVwYXRocyBmb3JnZXQgdG8gY2hlY2sgcmV0dXJuIHZhbHVlIGZyb20gZ2l0X2NvbmZpZ19zZXQoKTsKKyAgIHRoZSBmdW5jdGlvbiBpcyBtYWRlIHRvIGRpZSgpIHRvIG1ha2Ugc3VyZSB3ZSBkbyBub3QgcHJvY2VlZCB3aGVuCisgICBzZXR0aW5nIGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmYWlsZWQuCisKKyAqIEhhbmRsaW5nIG9mIGVycm9ycyB3aGlsZSB3cml0aW5nIGludG8gb3VyIGludGVybmFsIGFzeW5jaHJvbm91cworICAgcHJvY2VzcyBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0LCB3aGljaCByZWR1Y2VzIGZsYWtpbmVzcyBpbiBvdXIKKyAgIHRlc3RzLgorCisgKiAiZ2l0IHNob3cgJ0hFQUQ6Rm9vW0JBUl1CYXonIiBkaWQgbm90IGludGVycHJldCB0aGUgYXJndW1lbnQgYXMgYQorICAgcmV2LCBpLmUuIHRoZSBvYmplY3QgbmFtZWQgYnkgdGhlIHBhdGhuYW1lIHdpdGggd2lsZGNhcmQKKyAgIGNoYXJhY3RlcnMgaW4gYSB0cmVlIG9iamVjdC4KKworICogImdpdCByZXYtcGFyc2UgLS1naXQtY29tbW9uLWRpciIgdXNlZCBpbiB0aGUgd29ya3RyZWUgZmVhdHVyZQorICAgbWlzYmVoYXZlZCB3aGVuIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgKiBUaGUgInYoaWV3KSIgc3ViY29tbWFuZCBvZiB0aGUgaW50ZXJhY3RpdmUgImdpdCBhbSAtaSIgY29tbWFuZCB3YXMKKyAgIGJyb2tlbiBpbiAyLjYuMCB0aW1lZnJhbWUgd2hlbiB0aGUgY29tbWFuZCB3YXMgcmV3cml0dGVuIGluIEMuCisKKyAqICJnaXQgbWVyZ2UtdHJlZSIgdXNlZCB0byBtaXNoYW5kbGUgImJvdGggc2lkZXMgYWRkZWQiIGNvbmZsaWN0IHdpdGgKKyAgIGl0cyBvd24gImNyZWF0ZSBhIGZha2UgYW5jZXN0b3IgZmlsZSB0aGF0IGhhcyB0aGUgY29tbW9uIHBhcnRzIG9mCisgICB3aGF0IGJvdGggc2lkZXMgaGF2ZSBhZGRlZCBhbmQgZG8gYSAzLXdheSBtZXJnZSIgbG9naWM7IHRoaXMgaGFzCisgICBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSB1c3VhbCAiMy13YXkgbWVyZ2Ugd2l0aCBhbiBlbXB0eSBibG9iIGFzCisgICB0aGUgZmFrZSBjb21tb24gYW5jZXN0b3IgZmlsZSIgYXBwcm9hY2ggdXNlZCBpbiB0aGUgcmVzdCBvZiB0aGUKKyAgIHN5c3RlbS4KKworICogVGhlIG1lbW9yeSBvd25lcnNoaXAgcnVsZSBvZiBmaWxsX3RleHRjb252KCkgQVBJLCB3aGljaCB3YXMgYSBiaXQKKyAgIHRyaWNreSwgaGFzIGJlZW4gZG9jdW1lbnRlZCBhIGJpdCBiZXR0ZXIuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGRpZCBub3QgY2xlYXJseSBzdGF0ZSB0aGF0IHRoZSAnc2ltcGxlJyBtb2RlIGlzCisgICBub3cgdGhlIGRlZmF1bHQgZm9yICJnaXQgcHVzaCIgd2hlbiBwdXNoLmRlZmF1bHQgY29uZmlndXJhdGlvbiBpcworICAgbm90IHNldC4KKworICogUmVjZW50IHZlcnNpb25zIG9mIEdOVSBncmVwIGFyZSBwaWNraWVyIHdoZW4gdGhlaXIgaW5wdXQgY29udGFpbnMKKyAgIGFyYml0cmFyeSBiaW5hcnkgZGF0YSwgd2hpY2ggc29tZSBvZiBvdXIgdGVzdHMgdXNlcy4gIFJld3JpdGUgdGhlCisgICB0ZXN0cyB0byBzaWRlc3RlcCB0aGUgcHJvYmxlbS4KKworICogQSBoZWxwZXIgZnVuY3Rpb24gImdpdCBzdWJtb2R1bGUiIHVzZXMgc2luY2UgdjIuNy4wIHRvIGxpc3QgdGhlCisgICBtb2R1bGVzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzcGVjIGFyZ3VtZW50IGdpdmVuIHRvIGl0cyBzdWJjb21tYW5kcworICAgKGUuZy4gInN1Ym1vZHVsZSBhZGQgPHJlcG8+IDxwYXRoPiIpIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNvbmZpZyBzZWN0aW9uLnZhciB2YWx1ZSIgdG8gc2V0IGEgdmFsdWUgaW4gcGVyLXJlcG9zaXRvcnkKKyAgIGNvbmZpZ3VyYXRpb24gZmlsZSBmYWlsZWQgd2hlbiBpdCB3YXMgcnVuIG91dHNpZGUgYW55IHJlcG9zaXRvcnksCisgICBidXQgZGlkbid0IHNheSB0aGUgcmVhc29uIGNvcnJlY3RseS4KKworICogVGhlIGNvZGUgdG8gcmVhZCB0aGUgcGFjayBkYXRhIHVzaW5nIHRoZSBvZmZzZXRzIHN0b3JlZCBpbiB0aGUgcGFjaworICAgaWR4IGZpbGUgaGFzIGJlZW4gbWFkZSBtb3JlIGNhcmVmdWxseSBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlCisgICBkYXRhIGluIHRoZSBpZHguCisKK0Fsc28gaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGVzdCB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODNhZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuNC50eHQKQEAgLTAsMCArMSwxMSBAQAorR2l0IHYyLjcuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNy4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQnVnZml4IHBhdGNoZXMgd2VyZSBiYWNrcG9ydGVkIGZyb20gdGhlICdtYXN0ZXInIGZyb250IHRvIHBsdWcgaGVhcAorICAgY29ycnVwdGlvbiBob2xlcywgdG8gY2F0Y2ggaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgY29tcHV0YXRpb24gb2YKKyAgIHBhdGhuYW1lIGxlbmd0aHMsIGFuZCB0byBnZXQgcmlkIG9mIHRoZSBuYW1lX3BhdGggQVBJLiAgQm90aCBvZgorICAgdGhlc2Ugd291bGQgaGF2ZSByZXN1bHRlZCBpbiB3cml0aW5nIG92ZXIgYW4gdW5kZXItYWxsb2NhdGVkIGJ1ZmZlcgorICAgd2hlbiBmb3JtdWxhdGluZyBwYXRobmFtZXMgd2hpbGUgdHJlZSB0cmF2ZXJzYWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNTU5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy41LnR4dApAQCAtMCwwICsxLDE0IEBACitHaXQgdjIuNy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi43LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0LXNoZWxsIiByZWplY3RzIGEgcmVxdWVzdCB0byBzZXJ2ZSBhIHJlcG9zaXRvcnkgd2hvc2UgbmFtZQorICAgYmVnaW5zIHdpdGggYSBkYXNoLCB3aGljaCBtYWtlcyBpdCBubyBsb25nZXIgcG9zc2libGUgdG8gZ2V0IGl0CisgICBjb25mdXNlZCBpbnRvIHNwYXduaW5nIHNlcnZpY2UgcHJvZ3JhbXMgbGlrZSAiZ2l0LXVwbG9hZC1wYWNrIiB3aXRoCisgICBhbiBvcHRpb24gbGlrZSAiLS1oZWxwIiwgd2hpY2ggaW4gdHVybiB3b3VsZCBzcGF3biBhbiBpbnRlcmFjdGl2ZQorICAgcGFnZXIsIGluc3RlYWQgb2Ygd29ya2luZyB3aXRoIHRoZSByZXBvc2l0b3J5IHVzZXIgYXNrZWQgdG8gYWNjZXNzCisgICAoaS5lLiB0aGUgb25lIHdob3NlIG5hbWUgaXMgIi0taGVscCIpLgorCitBbHNvIGNvbnRhaW5zIGEgZmV3IGZpeGVzIGJhY2twb3J0ZWQgZnJvbSBsYXRlciBkZXZlbG9wbWVudCB0cmFja3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNmQxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy42LnR4dApAQCAtMCwwICsxLDI1IEBACitHaXQgdjIuNy42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi43LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBICJzc2g6Ly8uLi4iIFVSTCBjYW4gcmVzdWx0IGluIGEgInNzaCIgY29tbWFuZCBsaW5lIHdpdGggYQorICAgaG9zdG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIGRhc2ggIi0iLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgInNzaCIKKyAgIGNvbW1hbmQgdG8gaW5zdGVhZCAobWlzKXRyZWF0IGl0IGFzIGFuIG9wdGlvbi4gIFRoaXMgaXMgbm93CisgICBwcmV2ZW50ZWQgYnkgZm9yYmlkZGluZyBzdWNoIGEgaG9zdG5hbWUgKHdoaWNoIHdpbGwgbm90IGJlCisgICBuZWNlc3NhcnkgaW4gdGhlIHJlYWwgd29ybGQpLgorCisgKiBTaW1pbGFybHksIHdoZW4gR0lUX1BST1hZX0NPTU1BTkQgaXMgY29uZmlndXJlZCwgdGhlIGNvbW1hbmQgaXMKKyAgIHJ1biB3aXRoIGhvc3QgYW5kIHBvcnQgdGhhdCBhcmUgcGFyc2VkIG91dCBmcm9tICJzc2g6Ly8uLi4iIFVSTDsKKyAgIGEgcG9vcmx5IHdyaXR0ZW4gR0lUX1BST1hZX0NPTU1BTkQgY291bGQgYmUgdHJpY2tlZCBpbnRvIHRyZWF0aW5nCisgICBhIHN0cmluZyB0aGF0IGJlZ2lucyB3aXRoIGEgZGFzaCAiLSIuICBUaGlzIGlzIG5vdyBwcmV2ZW50ZWQgYnkKKyAgIGZvcmJpZGRpbmcgc3VjaCBhIGhvc3RuYW1lIGFuZCBwb3J0IG51bWJlciAoYWdhaW4sIHdoaWNoIHdpbGwgbm90CisgICBiZSBuZWNlc3NhcnkgaW4gdGhlIHJlYWwgd29ybGQpLgorCisgKiBJbiB0aGUgc2FtZSBzcGlyaXQsIGEgcmVwb3NpdG9yeSBuYW1lIHRoYXQgYmVnaW5zIHdpdGggYSBkYXNoICItIgorICAgaXMgYWxzbyBmb3JiaWRkZW4gbm93LgorCitDcmVkaXRzIGdvIHRvIEJyaWFuIE5lZWwgYXQgR2l0TGFiLCBKb2VybiBTY2huZWV3ZWlzeiBvZiBSZWN1cml0eQorTGFicyBhbmQgSmVmZiBLaW5nIGF0IEdpdEh1Yi4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzMyMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMC50eHQKQEAgLTAsMCArMSw0MzkgQEAKK0dpdCAyLjggUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByc3luYzovLyB0cmFuc3BvcnQgaGFzIGJlZW4gcmVtb3ZlZC4KKworCitVcGRhdGVzIHNpbmNlIHYyLjcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogSXQgdHVybnMgb3V0ICJnaXQgY2xvbmUiIG92ZXIgcnN5bmMgdHJhbnNwb3J0IGhhcyBiZWVuIGJyb2tlbiB3aGVuCisgICB0aGUgc291cmNlIHJlcG9zaXRvcnkgaGFzIHBhY2tlZCByZWZlcmVuY2VzIGZvciBhIGxvbmcgdGltZSwgYW5kCisgICBub2JvZHkgbm90aWNlZCBub3IgY29tcGxhaW5lZCBhYm91dCBpdC4KKworICogInB1c2giIGxlYXJuZWQgdGhhdCBpdHMgIi0tZGVsZXRlIiBvcHRpb24gY2FuIGJlIHNob3J0ZW5lZCB0bworICAgIi1kIiwganVzdCBsaWtlICJicmFuY2ggLS1kZWxldGUiIGFuZCAiYnJhbmNoIC1kIiBhcmUgdGhlIHNhbWUKKyAgIHRoaW5nLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybmVkIHRvIHByb2R1Y2UgdGhlIHByb2dyZXNzIGV5ZS1jYW5keSB3aGVuIGl0IHRha2VzCisgICB0b28gbXVjaCB0aW1lIGJlZm9yZSBlbWl0dGluZyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgcmVzdWx0LgorCisgKiAiZ2l0IGdyZXAiIGNhbiBub3cgYmUgY29uZmlndXJlZCAob3IgdG9sZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUpCisgICBob3cgbWFueSB0aHJlYWRzIHRvIHVzZSB3aGVuIHNlYXJjaGluZyBpbiB0aGUgd29ya2luZyB0cmVlIGZpbGVzLgorCisgKiBTb21lICJnaXQgbm90ZXMiIG9wZXJhdGlvbnMsIGUuZy4gImdpdCBsb2cgLS1ub3Rlcz08bm90ZT4iLCBzaG91bGQKKyAgIGJlIGFibGUgdG8gcmVhZCBub3RlcyBmcm9tIGFueSB0cmVlLWlzaCB0aGF0IGlzIHNoYXBlZCBsaWtlIGEgbm90ZXMKKyAgIHRyZWUsIGJ1dCB0aGUgbm90ZXMgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgdGhhdCB0aGUgYXJndW1lbnQgbXVzdAorICAgYmUgYSByZWYgdW5kZXIgcmVmcy9ub3Rlcy8uICBMb29zZW4gaXQgdG8gcmVxdWlyZSBhIHZhbGlkIHJlZiBvbmx5CisgICB3aGVuIHRoZSBvcGVyYXRpb24gd291bGQgdXBkYXRlIHRoZSBub3RlcyAoaW4gd2hpY2ggY2FzZSB3ZSBtdXN0CisgICBoYXZlIGEgcGxhY2UgdG8gc3RvcmUgdGhlIHVwZGF0ZWQgbm90ZXMgdHJlZSwgaW93LCBhIHJlZikuCisKKyAqICJnaXQgZ3JlcCIgYnkgZGVmYXVsdCBkb2VzIG5vdCBmYWxsIGJhY2sgdG8gaXRzICItLW5vLWluZGV4IgorICAgYmVoYXZpb3Igb3V0c2lkZSBhIGRpcmVjdG9yeSB1bmRlciBHaXQncyBjb250cm9sIChvdGhlcndpc2UgdGhlCisgICB1c2VyIG1heSBieSBtaXN0YWtlIGVuZCB1cCBydW5uaW5nIGEgaHVnZSByZWN1cnNpdmUgc2VhcmNoKTsgd2l0aCBhCisgICBuZXcgY29uZmlndXJhdGlvbiAoc2V0IGluICRIT01FLy5naXRjb25maWctLWJ5IGRlZmluaXRpb24gdGhpcworICAgY2Fubm90IGJlIHNldCBpbiB0aGUgY29uZmlnIGZpbGUgcGVyIHByb2plY3QpLCB0aGlzIHNhZmV0eSBjYW4gYmUKKyAgIGRpc2FibGVkLgorCisgKiAiZ2l0IHB1bGwgLS1yZWJhc2UiIGhhcyBiZWVuIGV4dGVuZGVkIHRvIGFsbG93IGludm9raW5nCisgICAicmViYXNlIC1pIi4KKworICogImdpdCBwNCIgbGVhcm5lZCB0byBjb3BlIHdpdGggdGhlIHR5cGUgb2YgYSBmaWxlIGdldHRpbmcgY2hhbmdlZC4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGxlYXJuZWQgdG8gbm90aWNlIGZvcm1hdC5vdXRwdXREaXJlY3RvcnkKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBUaGlzIGFsbG93cyAiLW8gPGRpcj4iIG9wdGlvbiB0byBiZQorICAgb21pdHRlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGlmIHlvdSBhbHdheXMgdXNlIHRoZSBzYW1lIGRpcmVjdG9yeSBpbgorICAgeW91ciB3b3JrZmxvdy4KKworICogImludGVycHJldC10cmFpbGVycyIgaGFzIGJlZW4gdGF1Z2h0IHRvIG9wdGlvbmFsbHkgdXBkYXRlIGEgZmlsZSBpbgorICAgcGxhY2UsIGluc3RlYWQgb2YgYWx3YXlzIHdyaXRpbmcgdGhlIHJlc3VsdCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCisgKiBNYW55IGNvbW1hbmRzIHRoYXQgcmVhZCBmaWxlcyB0aGF0IGFyZSBleHBlY3RlZCB0byBjb250YWluIHRleHQKKyAgIHRoYXQgaXMgZ2VuZXJhdGVkIChvciBjYW4gYmUgZWRpdGVkKSBieSB0aGUgZW5kIHVzZXIgdG8gY29udHJvbAorICAgdGhlaXIgYmVoYXZpb3IgKGUuZy4gImdpdCBncmVwIC1mIDxmaWxlbmFtZT4iKSBoYXZlIGJlZW4gdXBkYXRlZAorICAgdG8gYmUgbW9yZSB0b2xlcmFudCB0byBsaW5lcyB0aGF0IGFyZSB0ZXJtaW5hdGVkIHdpdGggQ1JMRiAodGhleQorICAgdXNlZCB0byB0cmVhdCBzdWNoIGEgbGluZSB0byBjb250YWluIHBheWxvYWQgdGhhdCBlbmRzIHdpdGggQ1IsCisgICB3aGljaCBpcyB1c3VhbGx5IG5vdCB3aGF0IHRoZSB1c2VycyBleHBlY3QpLgorCisgKiAiZ2l0IG5vdGVzIG1lcmdlIiB1c2VkIHRvIGxpbWl0IHRoZSBzb3VyY2Ugb2YgdGhlIG1lcmdlZCBub3RlcyB0cmVlCisgICB0byBzb21ld2hlcmUgdW5kZXIgcmVmcy9ub3Rlcy8gaGllcmFyY2h5LCB3aGljaCB3YXMgdG9vIGxpbWl0aW5nCisgICB3aGVuIGludmVudGluZyBhIHdvcmtmbG93IHRvIGV4Y2hhbmdlIG5vdGVzIHdpdGggcmVtb3RlCisgICByZXBvc2l0b3JpZXMgdXNpbmcgcmVtb3RlLXRyYWNraW5nIG5vdGVzIHRyZWVzIChsb2NhdGVkIGluIGUuZy4KKyAgIHJlZnMvcmVtb3RlLW5vdGVzLyBvciBzb21lc3VjaCkuCisKKyAqICJnaXQgbHMtZmlsZXMiIGxlYXJuZWQgYSBuZXcgIi0tZW9sIiBvcHRpb24gdG8gaGVscCBkaWFnbm9zZQorICAgZW5kLW9mLWxpbmUgcHJvYmxlbXMuCisKKyAqICJscy1yZW1vdGUiIGxlYXJuZWQgYW4gb3B0aW9uIHRvIHNob3cgd2hpY2ggYnJhbmNoIHRoZSByZW1vdGUKKyAgIHJlcG9zaXRvcnkgYWR2ZXJ0aXNlcyBhcyBpdHMgcHJpbWFyeSBieSBwb2ludGluZyBpdHMgSEVBRCBhdC4KKworICogTmV3IGh0dHAucHJveHlBdXRoTWV0aG9kIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8KKyAgIHNwZWNpZnkgd2hhdCBhdXRoZW50aWNhdGlvbiBtZXRob2QgdG8gdXNlLCBhcyBhIHdheSB0byB3b3JrIGFyb3VuZAorICAgcHJveGllcyB0aGF0IGRvIG5vdCBnaXZlIGVycm9yIHJlc3BvbnNlIGV4cGVjdGVkIGJ5IGxpYmN1cmwgd2hlbgorICAgQ1VSTEFVVEhfQU5ZIGlzIHVzZWQuICBBbHNvLCB0aGUgY29kZXBhdGggZm9yIHByb3h5IGF1dGhlbnRpY2F0aW9uCisgICBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIGNyZWRlbnRpYWwgQVBJIHRvIHN0b3JlIHRoZSBhdXRoZW50aWNhdGlvbgorICAgbWF0ZXJpYWwgaW4gdXNlcidzIGtleXJpbmdzLgorCisgKiBVcGRhdGUgdGhlIHVudHJhY2tlZCBjYWNoZSBzdWJzeXN0ZW0gYW5kIGNoYW5nZSBpdHMgcHJpbWFyeSBVSSBmcm9tCisgICAiZ2l0IHVwZGF0ZS1pbmRleCIgdG8gImdpdCBjb25maWciLgorCisgKiBUaGVyZSB3ZXJlIGEgZmV3ICJub3cgSSBhbSBkb2luZyB0aGlzIHRoaW5nIiBwcm9ncmVzcyBtZXNzYWdlcyBpbgorICAgdGhlIFRDUCBjb25uZWN0aW9uIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHNldHRpbmcgYSB2ZXJib3NlCisgICBvcHRpb24gaW50ZXJuYWxseSBpbiB0aGUgY29kZSwgYnV0ICJnaXQgZmV0Y2ggLXYiIGFuZCBmcmllbmRzIG5ldmVyCisgICBwYXNzZWQgdGhlIHZlcmJvc2Ugb3B0aW9uIGRvd24gdG8gdGhhdCBjb2RlcGF0aC4KKworICogQ2xlYW4vc211ZGdlIGZpbHRlcnMgZGVmaW5lZCBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSBvZiBsb3dlcgorICAgcHJlY2VkZW5jZSBjYW4gbm93IGJlIG92ZXJyaWRkZW4gdG8gYmUgYSBwYXNzLXRocm91Z2ggbm8tb3AgYnkKKyAgIHNldHRpbmcgdGhlIHZhcmlhYmxlIHRvIGFuIGVtcHR5IHN0cmluZy4KKworICogQSBuZXcgIjxicmFuY2g+XnsvIS08cGF0dGVybj59IiBub3RhdGlvbiBjYW4gYmUgdXNlZCB0byBuYW1lIGEKKyAgIGNvbW1pdCB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIDxicmFuY2g+IHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlCisgICBnaXZlbiA8cGF0dGVybj4uCisKKyAqIFRoZSAidXNlci51c2VDb25maWdPbmx5IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvCisgICBmb3JjZSB0aGUgdXNlciB0byBhbHdheXMgc2V0IHVzZXIuZW1haWwgJiB1c2VyLm5hbWUgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGVzLCBzZXJ2aW5nIGFzIGEgcmVtaW5kZXIgZm9yIHRob3NlIHdobyB3b3JrIG9uIG11bHRpcGxlCisgICBwcm9qZWN0cyBhbmQgZG8gbm90IHdhbnQgdG8gcHV0IHRoZXNlIGluIHRoZWlyICRIT01FLy5naXRjb25maWcuCisKKyAqICJnaXQgZmV0Y2giIGFuZCBmcmllbmRzIHRoYXQgbWFrZSBuZXR3b3JrIGNvbm5lY3Rpb25zIGNhbiBub3cgYmUKKyAgIHRvbGQgdG8gb25seSB1c2UgaXB2NCAob3IgaXB2NikuCisKKyAqIFNvbWUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBkbyBub3QgbmVlZCB1c2VybmFtZSBvciBwYXNzd29yZCwgYnV0CisgICBsaWJjdXJsIG5lZWRzIHNvbWUgaGludCB0aGF0IGl0IG5lZWRzIHRvIHBlcmZvcm0gYXV0aGVudGljYXRpb24uCisgICBTdXBwbHlpbmcgYW4gZW1wdHkgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHN0cmluZyBpcyBhIHZhbGlkIHdheSB0bworICAgZG8gc28sIGJ1dCB5b3UgY2FuIHNldCB0aGUgaHR0cC5bPHVybD4uXWVtcHR5QXV0aCBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSB0byBhY2hpZXZlIHRoZSBzYW1lLCBpZiB5b3UgZmluZCBpdCBjbGVhbmVyLgorCisgKiBZb3UgY2FuIG5vdyBzZXQgaHR0cC5bPHVybD4uXXBpbm5lZHB1YmtleSB0byBzcGVjaWZ5IHRoZSBwaW5uZWQKKyAgIHB1YmxpYyBrZXkgd2hlbiBidWlsZGluZyB3aXRoIHJlY2VudCBlbm91Z2ggdmVyc2lvbnMgb2YgbGliY1VSTC4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGhhcyBiZWVuIHRhdWdodCB0byBwaHJhc2Ugd2hlcmUgaXQgZm91bmQgYQorICAgYmFkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW4gYSBiZXR0ZXIgd2F5IGluIGl0cyBlcnJvciBtZXNzYWdlcy4KKyAgICJnaXQgY29uZmlnIiBsZWFybnQgYSBuZXcgIi0tc2hvdy1vcmlnaW4iIG9wdGlvbiB0byBpbmRpY2F0ZSB3aGVyZQorICAgdGhlIHZhbHVlcyBjb21lIGZyb20uCisKKyAqIFRoZSAiY3JlZGVudGlhbC1jYWNoZSIgZGFlbW9uIHByb2Nlc3MgdXNlZCB0byBydW4gaW4gd2hhdGV2ZXIKKyAgIGRpcmVjdG9yeSBpdCBoYXBwZW5lZCB0byBzdGFydCBpbiwgYnV0IHRoaXMgbWFkZSB1bW91bnQoMilpbmcgdGhlCisgICBmaWxlc3lzdGVtIHRoYXQgaG91c2VzIHRoZSByZXBvc2l0b3J5IGhhcmRlcjsgbm93IHRoZSBwcm9jZXNzCisgICBjaGRpcigpcyB0byB0aGUgZGlyZWN0b3J5IHRoYXQgaG91c2UgaXRzIG93biBzb2NrZXQgb24gc3RhcnR1cC4KKworICogV2hlbiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGRpZCBub3QgcmVzdWx0IGluIGZldGNoaW5nIHRoZSBjb21taXQKKyAgIG9iamVjdCBpbiB0aGUgc3VibW9kdWxlIHRoYXQgaXMgcmVmZXJlbmNlZCBieSB0aGUgc3VwZXJwcm9qZWN0LCB0aGUKKyAgIGNvbW1hbmQgbGVhcm5lZCB0byByZXRyeSBhbm90aGVyIGZldGNoLCBzcGVjaWZpY2FsbHkgYXNraW5nIGZvcgorICAgdGhhdCBjb21taXQgdGhhdCBtYXkgbm90IGJlIGNvbm5lY3RlZCB0byB0aGUgcmVmcyBpdCB1c3VhbGx5CisgICBmZXRjaGVzLgorCisgKiAiZ2l0IG1lcmdlLXJlY3Vyc2l2ZSIgbGVhcm5lZCAiLS1uby1yZW5hbWVzIiBvcHRpb24gdG8gZGlzYWJsZSBpdHMKKyAgIHJlbmFtZSBkZXRlY3Rpb24gbG9naWMuCisKKyAqIEFjcm9zcyB0aGUgdHJhbnNpdGlvbiBhdCBhcm91bmQgR2l0IHZlcnNpb24gMi4wLCB0aGUgdXNlciB1c2VkIHRvCisgICBnZXQgYSBwcmV0dHkgbG91ZCB3YXJuaW5nIHdoZW4gcnVubmluZyAiZ2l0IHB1c2giIHdpdGhvdXQgc2V0dGluZworICAgcHVzaC5kZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBXZSBubyBsb25nZXIgd2FybiBiZWNhdXNlIHRoZQorICAgdHJhbnNpdGlvbiB3YXMgY29tcGxldGVkIGEgbG9uZyB0aW1lIGFnby4KKworICogUkVBRE1FIGhhcyBiZWVuIHJlbmFtZWQgdG8gUkVBRE1FLm1kIGFuZCBpdHMgY29udGVudHMgZ290IHR3ZWFrZWQKKyAgIHNsaWdodGx5IHRvIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBleWVzLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIEFkZCBhIGZyYW1ld29yayB0byBzcGF3biBhIGdyb3VwIG9mIHByb2Nlc3NlcyBpbiBwYXJhbGxlbCwgYW5kIHVzZQorICAgaXQgdG8gcnVuICJnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGluIHBhcmFsbGVsLgorCisgKiBBIHNsaWdodCB1cGRhdGUgdG8gdGhlIE1ha2VmaWxlIHRvIG1hcmsgIi5QSE9OWSIgdGFyZ2V0cyBhcyBzdWNoCisgICBjb3JyZWN0bHkuCisKKyAqIEluLWNvcmUgc3RvcmFnZSBvZiB0aGUgcmV2ZXJzZSBpbmRleCBmb3IgLnBhY2sgZmlsZXMgKHdoaWNoIGxldHMKKyAgIHlvdSBnbyBmcm9tIGEgcGFjayBvZmZzZXQgdG8gYW4gb2JqZWN0IG5hbWUpIGhhcyBiZWVuIHN0cmVhbWxpbmVkLgorCisgKiBkOTUxMzhlNiAoc2V0dXA6IHNldCBlbnYgJEdJVF9XT1JLX1RSRUUgd2hlbiB3b3JrIHRyZWUgaXMgc2V0LCBsaWtlCisgICAkR0lUX0RJUiwgMjAxNS0wNi0yNikgYXR0ZW1wdGVkIHRvIHdvcmsgYXJvdW5kIGEgZ2xpdGNoIGluIGFsaWFzCisgICBoYW5kbGluZyBieSBvdmVyd3JpdGluZyBHSVRfV09SS19UUkVFIGVudmlyb25tZW50IHZhcmlhYmxlIHRvCisgICBhZmZlY3Qgc3VicHJvY2Vzc2VzIHdoZW4gc2V0X2dpdF93b3JrX3RyZWUoKSBnZXRzIGNhbGxlZCwgd2hpY2gKKyAgIHJlc3VsdGVkIGluIGEgcmF0aGVyIHVucGxlYXNhbnQgcmVncmVzc2lvbiB0byAiY2xvbmUiIGFuZCAiaW5pdCIuCisgICBUcnkgdG8gYWRkcmVzcyB0aGUgc2FtZSBpc3N1ZSBieSBhbHdheXMgcmVzdG9yaW5nIHRoZSBlbnZpcm9ubWVudAorICAgYW5kIHJlc3Bhd25pbmcgdGhlIHJlYWwgdW5kZXJseWluZyBjb21tYW5kIHdoZW4gaGFuZGxpbmcgYWxpYXMuCisKKyAqIFRoZSBsb3ctbGV2ZWwgY29kZSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIHN5bWJvbGljIHJlZmVyZW5jZXMgaGFzCisgICBiZWVuIHVwZGF0ZWQgdG8gc2hhcmUgbW9yZSBjb2RlIHdpdGggdGhlIGNvZGUgdGhhdCBkZWFscyB3aXRoCisgICBub3JtYWwgcmVmZXJlbmNlcy4KKworICogc3RyYnVmX2dldGxpbmUoKSBhbmQgZnJpZW5kcyBoYXZlIGJlZW4gcmVkZWZpbmVkIHRvIG1ha2UgaXQgZWFzaWVyCisgICB0byBpZGVudGlmeSB3aGljaCBjYWxsc2l0ZSBvZiAobmV3KSBzdHJidWZfZ2V0bGluZV9sZigpIHNob3VsZAorICAgYWxsb3cgYW5kIHNpbGVudGx5IGlnbm9yZSBjYXJyaWFnZS1yZXR1cm4gYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0bworICAgaGVscCB1c2VycyBvbiBET1NzeSBzeXN0ZW1zLgorCisgKiAiZ2l0IHNob3J0bG9nIiB1c2VkIHRvIGFjY3VtdWxhdGUgdmFyaW91cyBwaWVjZXMgb2YgaW5mb3JtYXRpb24KKyAgIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB3YXMgYXNrZWQgdG8gYmUgc2hvd24gaW4gdGhlIGZpbmFsIG91dHB1dC4gIEl0CisgICBoYXMgYmVlbiBvcHRpbWl6ZWQgYnkgbm90aWNpbmcgd2hhdCBuZWVkIG5vdCB0byBiZSBjb2xsZWN0ZWQKKyAgIChlLmcuIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29sbGVjdCB0aGUgbG9nIG1lc3NhZ2VzIHdoZW4gc2hvd2luZworICAgb25seSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMpLgorCisgKiAiZ2l0IGNoZWNrb3V0ICRicmFuY2giIChhbmQgb3RoZXIgb3BlcmF0aW9ucyB0aGF0IHNoYXJlIHRoZSBzYW1lCisgICB1bmRlcmx5aW5nIG1hY2hpbmVyeSkgaGFzIGJlZW4gb3B0aW1pemVkLgorCisgKiBBdXRvbWF0ZWQgdGVzdHMgaW4gVHJhdmlzIENJIGVudmlyb25tZW50IGhhcyBiZWVuIG9wdGltaXplZCBieQorICAgcGVyc2lzdGluZyBydW50aW1lIHN0YXRpc3RpY3Mgb2YgcHJldmlvdXMgInByb3ZlIiBydW4sIGV4ZWN1dGluZworICAgdGVzdHMgdGhhdCB0YWtlIGxvbmdlciBiZWZvcmUgb3RoZXIgb25lczsgdGhpcyByZWR1Y2VzIHRoZSB0b3RhbAorICAgd2FsbGNsb2NrIHRpbWUuCisKKyAqIFRlc3Qgc2NyaXB0cyBoYXZlIGJlZW4gdXBkYXRlZCB0byByZW1vdmUgYXNzdW1wdGlvbnMgdGhhdCBhcmUgbm90CisgICBwb3J0YWJsZSBiZXR3ZWVuIEdpdCBmb3IgUE9TSVggYW5kIEdpdCBmb3IgV2luZG93cywgb3IgdG8gc2tpcCBvbmVzCisgICB3aXRoIGV4cGVjdGF0aW9ucyB0aGF0IGFyZSBub3Qgc2F0aXNmaWFibGUgb24gR2l0IGZvciBXaW5kb3dzLgorCisgKiBTb21lIGNhbGxzIHRvIHN0cmNweSgzKSB0cmlnZ2VycyBhIGZhbHNlIHdhcm5pbmcgZnJvbSBzdGF0aWMKKyAgIGFuYWx5emVycyB0aGF0IGFyZSBsZXNzIGludGVsbGlnZW50IHRoYW4gaHVtYW5zLCBhbmQgcmVkdWNpbmcgdGhlCisgICBudW1iZXIgb2YgdGhlc2UgZmFsc2UgaGl0cyBoZWxwcyB1cyBub3RpY2UgcmVhbCBpc3N1ZXMuICBBIGZldworICAgY2FsbHMgdG8gc3RyY3B5KDMpIGluIGEgY291cGxlIG9mIHByb2dyYW1zIHRoYXQgYXJlIGFscmVhZHkgc2FmZQorICAgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGF2b2lkIGZhbHNlIHdhcm5pbmdzLgorCisgKiBUaGUgIm5hbWVfcGF0aCIgQVBJIHdhcyBhbiBhdHRlbXB0IHRvIHJlZHVjZSB0aGUgbmVlZCB0byBjb25zdHJ1Y3QKKyAgIHRoZSBmdWxsIHBhdGggb3V0IG9mIGEgc2VyaWVzIG9mIHBhdGggY29tcG9uZW50cyB3aGlsZSB3YWxraW5nIGEKKyAgIHRyZWUgaGllcmFyY2h5LCBidXQgb3ZlciB0aW1lIG1hZGUgbGVzcyBlZmZpY2llbnQgYmVjYXVzZSB0aGUgcGF0aAorICAgbmVlZHMgdG8gYmUgZmxhdHRlbmVkLCBlLmcuIHRvIGJlIGNvbXBhcmVkIHdpdGggYW5vdGhlciBwYXRoIHRoYXQKKyAgIGlzIGFscmVhZHkgZmxhdC4gIFRoZSBBUEkgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgaXRzIHVzZXJzIGhhdmUgYmVlbgorICAgcmV3cml0dGVuIHRvIHNpbXBsaWZ5IHRoZSBvdmVyYWxsIGNvZGUgY29tcGxleGl0eS4KKworICogSGVscCB0aG9zZSB3aG8gZGVidWcgaHR0cChzKSBwYXJ0IG9mIHRoZSBzeXN0ZW0uCisgICAobWVyZ2UgMDA1NDA0NSBzcC9yZW1vdGUtY3VybC1zc2wtc3RyZXJyb3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW50ZXJuYWwgQVBJIHRvIGludGVyYWN0IHdpdGggInJlbW90ZS4qIiBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZXMgaGFzIGJlZW4gc3RyZWFtbGluZWQuCisKKyAqIFRoZSByZWYtZmlsdGVyJ3MgZm9ybWF0LXBhcnNpbmcgY29kZSBoYXMgYmVlbiByZWZhY3RvcmVkLCBpbgorICAgcHJlcGFyYXRpb24gZm9yICJicmFuY2ggLS1mb3JtYXQiIGFuZCBmcmllbmRzLgorCisgKiBUcmFkaXRpb25hbGx5LCB0aGUgdGVzdHMgdGhhdCB0cnkgY29tbWFuZHMgdGhhdCB3b3JrIG9uIHRoZQorICAgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB3ZXJlIG5hbWVkIHdpdGggIndvcmt0cmVlIiBpbiB0aGVpcgorICAgZmlsZW5hbWVzLCBidXQgd2l0aCB0aGUgcmVjZW50IGFkZGl0aW9uIG9mICJnaXQgd29ya3RyZWUiCisgICBzdWJjb21tYW5kLCB3aG9zZSB0ZXN0cyBhcmUgYWxzbyBuYW1lZCBzaW1pbGFybHksIGl0IGhhcyBiZWNvbWUKKyAgIGhhcmRlciB0byB0ZWxsIHRoZW0gYXBhcnQuICBUaGUgdHJhZGl0aW9uYWwgdGVzdHMgaGF2ZSBiZWVuIHJlbmFtZWQKKyAgIHRvIHVzZSAid29yay10cmVlIiBpbnN0ZWFkIGluIGFuIGF0dGVtcHQgdG8gZGlmZmVyZW50aWF0ZSB0aGVtLgorICAgKG1lcmdlIDU1NDkwMjkgbWcvd29yay10cmVlLXRlc3RzIGxhdGVyIHRvIG1haW50KS4KKworICogTWFueSBjb2RlcGF0aHMgZm9yZ2V0IHRvIGNoZWNrIHJldHVybiB2YWx1ZSBmcm9tIGdpdF9jb25maWdfc2V0KCk7CisgICB0aGUgZnVuY3Rpb24gaXMgbWFkZSB0byBkaWUoKSB0byBtYWtlIHN1cmUgd2UgZG8gbm90IHByb2NlZWQgd2hlbgorICAgc2V0dGluZyBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZmFpbGVkLgorICAgKG1lcmdlIDNkMTgwNjQgcHMvY29uZmlnLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKworICogSGFuZGxpbmcgb2YgZXJyb3JzIHdoaWxlIHdyaXRpbmcgaW50byBvdXIgaW50ZXJuYWwgYXN5bmNocm9ub3VzCisgICBwcm9jZXNzIGhhcyBiZWVuIG1hZGUgbW9yZSByb2J1c3QsIHdoaWNoIHJlZHVjZXMgZmxha2luZXNzIGluIG91cgorICAgdGVzdHMuCisgICAobWVyZ2UgNDNmM2FmYyBqay9lcGlwZS1pbi1hc3luYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZXJlIGlzIGEgbmV3IERFVkVMT1BFUiBrbm9iIHRoYXQgZW5hYmxlcyBtYW55IGNvbXBpbGVyIHdhcm5pbmcKKyAgIG9wdGlvbnMgaW4gdGhlIE1ha2VmaWxlLgorCisgKiBUaGUgd2F5IHRoZSB0ZXN0IHNjcmlwdHMgY29uZmlndXJlIHRoZSBBcGFjaGUgd2ViIHNlcnZlciBoYXMgYmVlbgorICAgdXBkYXRlZCB0byB3b3JrIGFsc28gZm9yIEFwYWNoZSAyLjQgcnVubmluZyBvbiBSZWRIYXQgZGVyaXZlZAorICAgZGlzdHJvcy4KKworICogT3V0IG9mIG1haW50ZW5hbmNlIGdjYyBvbiBPU1ggMTAuNiBmYWlscyB0byBjb21waWxlIHRoZSBjb2RlIGluCisgICAnbWFzdGVyJzsgd29yayBpdCBhcm91bmQgYnkgdXNpbmcgY2xhbmcgYnkgZGVmYXVsdCBvbiB0aGUgcGxhdGZvcm0uCisKKyAqIFRoZSAibmFtZV9wYXRoIiBBUEkgd2FzIGFuIGF0dGVtcHQgdG8gcmVkdWNlIHRoZSBuZWVkIHRvIGNvbnN0cnVjdAorICAgdGhlIGZ1bGwgcGF0aCBvdXQgb2YgYSBzZXJpZXMgb2YgcGF0aCBjb21wb25lbnRzIHdoaWxlIHdhbGtpbmcgYQorICAgdHJlZSBoaWVyYXJjaHksIGJ1dCBvdmVyIHRpbWUgbWFkZSBsZXNzIGVmZmljaWVudCBiZWNhdXNlIHRoZSBwYXRoCisgICBuZWVkcyB0byBiZSBmbGF0dGVuZWQsIGUuZy4gdG8gYmUgY29tcGFyZWQgd2l0aCBhbm90aGVyIHBhdGggdGhhdAorICAgaXMgYWxyZWFkeSBmbGF0LCBpbiBtYW55IGNhc2VzLiAgVGhlIEFQSSBoYXMgYmVlbiByZW1vdmVkIGFuZCBpdHMKKyAgIHVzZXJzIGhhdmUgYmVlbiByZXdyaXR0ZW4gdG8gc2ltcGxpZnkgdGhlIG92ZXJhbGwgY29kZSBjb21wbGV4aXR5LgorICAgVGhpcyBpbmNpZGVudGFsbHkgYWxzbyBjbG9zZXMgc29tZSBoZWFwLWNvcnJ1cHRpb24gaG9sZXMuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBHTlUgZ3JlcCBpcyBwaWNraWVyIHRoYW4gYmVmb3JlIHRvIGRlY2lkZSBpZiBhCisgICBmaWxlIGlzICJiaW5hcnkiIGFuZCByZWZ1c2UgdG8gZ2l2ZSBsaW5lLW9yaWVudGVkIGhpdHMgd2hlbiB3ZQorICAgZXhwZWN0IGl0IHRvLCB1bmxlc3MgZXhwbGljaXRseSB0b2xkIHdpdGggIi1hIiBvcHRpb24uICBBcyBvdXIKKyAgIHNjcmlwdGVkIFBvcmNlbGFpbnMgdXNlIHNhbmVfZ3JlcCB3cmFwcGVyIGZvciBsaW5lLW9yaWVudGVkIGRhdGEsCisgICBldmVuIHdoZW4gdGhlIGxpbmUgbWF5IGNvbnRhaW4gbm9uLUFTQ0lJIHBheWxvYWQgd2UgdG9vayBmcm9tCisgICBlbmQtdXNlciBkYXRhLCB1c2UgImdyZXAgLWEiIHRvIGltcGxlbWVudCBzYW5lX2dyZXAgd3JhcHBlciB3aGVuCisgICB1c2luZyBhbiBpbXBsZW1lbnRhdGlvbiBvZiAiZ3JlcCIgdGhhdCB0YWtlcyB0aGUgIi1hIiBvcHRpb24uCisKKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi43CistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuNyBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiBBbiBlYXJsaWVyIGNoYW5nZSBpbiAyLjUueC1lcmEgYnJva2UgdXNlcnMnIGhvb2tzIGFuZCBhbGlhc2VzIGJ5CisgICBleHBvcnRpbmcgR0lUX1dPUktfVFJFRSB0byBwb2ludCBhdCB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlLAorICAgaW50ZXJmZXJpbmcgd2hlbiB0aGV5IHRyaWVkIHRvIHVzZSBhIGRpZmZlcmVudCB3b3JraW5nIHRyZWUgd2l0aG91dAorICAgc2V0dGluZyBHSVRfV09SS19UUkVFIGVudmlyb25tZW50IHRoZW1zZWx2ZXMuCisKKyAqIFRoZSAiZXhjbHVkZV9saXN0IiBzdHJ1Y3R1cmUgaGFzIHRoZSB1c3VhbCAiYWxsb2MsIG5yIiBwYWlyIG9mCisgICBmaWVsZHMgdG8gYmUgdXNlZCBieSBBTExPQ19HUk9XKCksIGJ1dCBjbGVhcl9wYXR0ZXJuX2xpc3QoKSBmb3Jnb3QKKyAgIHRvIHJlc2V0ICdhbGxvYycgdG8gMCB3aGVuIGl0IGNsZWFyZWQgJ25yJyB0byBkaXNjYXJkIHRoZSBtYW5hZ2VkCisgICBhcnJheS4KKworICogUGF0aHMgdGhhdCBoYXZlIGJlZW4gdG9sZCB0aGUgaW5kZXggYWJvdXQgd2l0aCAiYWRkIC1OIiBhcmUgbm90CisgICBxdWl0ZSB5ZXQgaW4gdGhlIGluZGV4LCBidXQgYSBmZXcgY29tbWFuZHMgYmVoYXZlZCBhcyBpZiB0aGV5CisgICBhbHJlYWR5IGFyZSBpbiBhIGhhcm1mdWwgd2F5LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIHdhcyBjb25mdXNlZCBieSBlc2NhcGVkIHF1b3RlcyBzdG9yZWQgaW4gdGhlIGFsaWFzCisgICBmaWxlcyBzYXZlZCBieSAibXV0dCIsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogQSBmZXcgbm9uLXBvcnRhYmxlIEMgY29uc3RydWN0IGhhdmUgYmVlbiBzcG90dGVkIGJ5IGNsYW5nIGNvbXBpbGVyCisgICBhbmQgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGhpbnQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbgorICAgdGhlICctLXNpZ25vZmYnIG9wdGlvbiBhbmQgRENPLgorCisgKiAiZ2l0IHJlZmxvZyIgaW5jb3JyZWN0bHkgYXNzdW1lZCB0aGF0IGFsbCBvYmplY3RzIHRoYXQgdXNlZCB0byBiZQorICAgYXQgdGhlIHRpcCBvZiBhIHJlZiBtdXN0IGJlIGNvbW1pdHMsIHdoaWNoIGNhdXNlZCBpdCB0byBzZWdmYXVsdC4KKworICogVGhlIGlnbm9yZSBtZWNoYW5pc20gc2F3IGEgZmV3IHJlZ3Jlc3Npb25zIGFyb3VuZCB1bnRyYWNrZWQgZmlsZQorICAgbGlzdGluZyBhbmQgc3BhcnNlIGNoZWNrb3V0IHNlbGVjdGlvbiBhcmVhcyBpbiAyLjcuMDsgdGhlIGNoYW5nZQorICAgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHJlZ3Jlc3Npb24gaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKKyAqIFNvbWUgY29kZXBhdGhzIHVzZWQgZm9wZW4oMykgd2hlbiBvcGVuaW5nIGEgZml4ZWQgcGF0aCBpbiAkR0lUX0RJUgorICAgKGUuZy4gQ09NTUlUX0VESVRNU0cpIHRoYXQgaXMgbWVhbnQgdG8gYmUgbGVmdCBhZnRlciB0aGUgY29tbWFuZCBpcworICAgZG9uZS4gIFRoaXMgaG93ZXZlciBkaWQgbm90IHdvcmsgd2VsbCBpZiB0aGUgcmVwb3NpdG9yeSBpcyBzZXQgdG8KKyAgIGJlIHNoYXJlZCB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBhbmQgdGhlIHVtYXNrIG9mIHRoZSBwcmV2aW91cworICAgdXNlciBpcyB0aWdodGVyLiAgVGhleSBoYXZlIGJlZW4gbWFkZSB0byB3b3JrIGJldHRlciBieSBjYWxsaW5nCisgICB1bmxpbmsoMikgYW5kIHJldHJ5aW5nIGFmdGVyIGZvcGVuKDMpIGZhaWxzIHdpdGggRVBFUk0uCisKKyAqIEFza2luZyBnaXR3ZWIgZm9yIGEgbm9uZXhpc3RlbnQgY29tbWl0IGxlZnQgYSB3YXJuaW5nIGluIHRoZSBzZXJ2ZXIKKyAgIGxvZy4KKworICAgU29tZWJvZHkgbWF5IHdhbnQgdG8gZm9sbG93IHRoaXMgdXAgd2l0aCBhbiBhZGRpdGlvbmFsIHRlc3QsIHBlcmhhcHM/CisgICBJSVJDLCB3ZSBkbyB0ZXN0IHRoYXQgbm8gUGVybCB3YXJuaW5ncyBhcmUgZ2l2ZW4gdG8gdGhlIHNlcnZlciBsb2csCisgICBzbyB0aGlzIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGlmIG91ciB0ZXN0IGNvdmVyYWdlIHdlcmUgZ29vZC4KKworICogImdpdCByZWJhc2UiLCB1bmxpa2UgYWxsIG90aGVyIGNhbGxlcnMgb2YgImdjIC0tYXV0byIsIGRpZCBub3QKKyAgIGlnbm9yZSB0aGUgZXhpdCBjb2RlIGZyb20gImdjIC0tYXV0byIuCisKKyAqIE1hbnkgY29kZXBhdGhzIHRoYXQgcnVuICJnYyAtLWF1dG8iIGJlZm9yZSBleGl0aW5nIGtlcHQgcGFja2ZpbGVzCisgICBtYXBwZWQgYW5kIGxlZnQgdGhlIGZpbGUgZGVzY3JpcHRvcnMgdG8gdGhlbSBvcGVuLCB3aGljaCB3YXMgbm90CisgICBmcmllbmRseSB0byBzeXN0ZW1zIHRoYXQgY2Fubm90IHJlbW92ZSBmaWxlcyB0aGF0IGFyZSBvcGVuLiAgVGhleQorICAgbm93IGNsb3NlIHRoZSBwYWNrcyBiZWZvcmUgZG9pbmcgc28uCisKKyAqIEEgcmVjZW50IG9wdGltaXphdGlvbiB0byBmaWx0ZXItYnJhbmNoIGluIHYyLjcuMCBpbnRyb2R1Y2VkIGEKKyAgIHJlZ3Jlc3Npb24gd2hlbiAtLXBydW5lLWVtcHR5IGZpbHRlciBpcyB1c2VkLCB3aGljaCBoYXMgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBUaGUgZGVzY3JpcHRpb24gZm9yIFNBTklUWSBwcmVyZXF1aXNpdGUgdGhlIHRlc3Qgc3VpdGUgdXNlcyBoYXMKKyAgIGJlZW4gY2xhcmlmaWVkIGJvdGggaW4gdGhlIGNvbW1lbnQgYW5kIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KKworICogImdpdCB0YWciIHN0YXJ0ZWQgbGlzdGluZyBhIHRhZyAiZm9vIiBhcyAidGFncy9mb28iIHdoZW4gYSBicmFuY2gKKyAgIG5hbWVkICJmb28iIGV4aXN0cyBpbiB0aGUgc2FtZSByZXBvc2l0b3J5OyByZW1vdmUgdGhpcyB1bm5lY2Vzc2FyeQorICAgZGlzYW1iaWd1YXRpb24sIHdoaWNoIGlzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIHYyLjcuMC4KKworICogVGhlIHdheSAiZ2l0IHN2biIgdXNlcyBhdXRoIHBhcmFtZXRlciB3YXMgYnJva2VuIGJ5IFN1YnZlcnNpb24KKyAgIDEuOS4wIGFuZCBsYXRlci4KKworICogVGhlICJzcGxpdCIgc3ViY29tbWFuZCBvZiAiZ2l0IHN1YnRyZWUiIChpbiBjb250cmliLykgaW5jb3JyZWN0bHkKKyAgIHNraXBwZWQgbWVyZ2VzIHdoZW4gaXQgc2hvdWxkbid0LCB3aGljaCB3YXMgY29ycmVjdGVkLgorCisgKiBBIGZldyBvcHRpb25zIG9mICJnaXQgZGlmZiIgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiB0aGUgY29tbWFuZCB3YXMKKyAgIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisgKiBUaGUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gbGVhcm5lZCBhIGhhbmRmdWwgb2YgYWRkaXRpb25hbCBvcHRpb25zCisgICBhbmQgY29tbWFuZCBzcGVjaWZpYyBzeW50YXguCisKKyAqIGRpcm5hbWUoKSBlbXVsYXRpb24gaGFzIGJlZW4gYWRkZWQsIGFzIE1zeXMyIGxhY2tzIGl0LgorCisgKiBUaGUgdW5kZXJseWluZyBtYWNoaW5lcnkgdXNlZCBieSAibHMtZmlsZXMgLW8iIGFuZCBvdGhlciBjb21tYW5kcworICAgaGFzIGJlZW4gdGF1Z2h0IG5vdCB0byBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIHJlZiBjYWNoZSBmb3IgYQorICAgZGlyZWN0b3J5IHRoYXQgaXMgbm90IGEgc3VibW9kdWxlLiAgVGhpcyByZW1vdmVzIGEgdG9uIG9mIHdhc3RlZAorICAgQ1BVIGN5Y2xlcy4KKworICogImdpdCB3b3JrdHJlZSIgaGFkIGEgYnJva2VuIGNvZGUgdGhhdCBhdHRlbXB0ZWQgdG8gYXV0by1maXgKKyAgIHBvc3NpYmxlIGluY29uc2lzdGVuY3kgdGhhdCByZXN1bHRzIGZyb20gZW5kLXVzZXJzIG1vdmluZyBhCisgICB3b3JrdHJlZSB0byBkaWZmZXJlbnQgcGxhY2VzIHdpdGhvdXQgdGVsbGluZyBHaXQgKHRoZSBvcmlnaW5hbAorICAgcmVwb3NpdG9yeSBuZWVkcyB0byBtYWludGFpbiBiYWNrLXBvaW50ZXJzIHRvIGl0cyB3b3JrdHJlZXMsCisgICBidXQgIm12IiBydW4gYnkgZW5kLXVzZXJzIHdobyBhcmUgbm90IGZhbWlsaWFyIHdpdGggdGhhdCBmYWN0CisgICB3aWxsIG9idmlvdXNseSBub3QgYWRqdXN0IHRoZW0pLCB3aGljaCBhY3R1YWxseSBtYWRlIHRoaW5ncworICAgd29yc2Ugd2hlbiB0cmlnZ2VyZWQuCisKKyAqIFRoZSBsb3ctbGV2ZWwgbWVyZ2UgbWFjaGluZXJ5IGhhcyBiZWVuIHRhdWdodCB0byB1c2UgQ1JMRiBsaW5lCisgICB0ZXJtaW5hdGlvbiB3aGVuIGluc2VydGluZyBjb25mbGljdCBtYXJrZXJzIHRvIG1lcmdlZCBjb250ZW50cyB0aGF0CisgICBhcmUgdGhlbXNlbHZlcyBDUkxGIGxpbmUtdGVybWluYXRlZC4KKworICogImdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZSIgaGFzIGJlZW4gdGF1Z2h0IHRvIHJlcG9ydCBpZiB0aGUgcHVzaAorICAgbmVlZGVkIHRvIGZvcmNlIChvciBmYXN0LWZvcndhcmRlZCkuCisKKyAqIFRoZSBlbXVsYXRlZCAieWVzIiBjb21tYW5kIHVzZWQgaW4gb3VyIHRlc3Qgc2NyaXB0cyBoYXMgYmVlbgorICAgdHdlYWtlZCBub3QgdG8gc3BlbmQgdG9vIG11Y2ggdGltZSBnZW5lcmF0aW5nIHVubmVjZXNzYXJ5IG91dHB1dAorICAgdGhhdCBpcyBub3QgdXNlZCwgdG8gaGVscCB0aG9zZSB3aG8gdGVzdCBvbiBXaW5kb3dzIHdoZXJlIGl0IHdvdWxkCisgICBub3Qgc3RvcCB1bnRpbCBpdCBmaWxscyB0aGUgcGlwZSBidWZmZXIgZHVlIHRvIGxhY2sgb2YgU0lHUElQRS4KKworICogVGhlIGRvY3VtZW50YXRpb24gZm9yICJnaXQgY2xlYW4iIGhhcyBiZWVuIGNvcnJlY3RlZDsgaXQgbWVudGlvbmVkCisgICB0aGF0IC5naXQvbW9kdWxlcy8qIGFyZSByZW1vdmVkIGJ5IGdpdmluZyB0d28gIi1mIiwgd2hpY2ggaGFzIG5ldmVyCisgICBiZWVuIHRoZSBjYXNlLgorCisgKiBUaGUgdmltZGlmZiBiYWNrZW5kIGZvciAiZ2l0IG1lcmdldG9vbCIgaGFzIGJlZW4gdHdlYWtlZCB0byBhcnJhbmdlCisgICBhbmQgbnVtYmVyIGJ1ZmZlcnMgaW4gdGhlIG9yZGVyIHRoYXQgd291bGQgbWF0Y2ggdGhlIGV4cGVjdGF0aW9uIG9mCisgICBtYWpvcml0eSBvZiBwZW9wbGUgd2hvIHJlYWQgbGVmdCB0byByaWdodCwgdGhlbiB0b3AgZG93biBhbmQgYXNzaWduCisgICBidWZmZXJzIDEgMiAzIDQgIm1lbnRhbGx5IiB0byBsb2NhbCBiYXNlIHJlbW90ZSBtZXJnZSB3aW5kb3dzIGJhc2VkCisgICBvbiB0aGF0IG9yZGVyLgorCisgKiAiZ2l0IHNob3cgJ0hFQUQ6Rm9vW0JBUl1CYXonIiBkaWQgbm90IGludGVycHJldCB0aGUgYXJndW1lbnQgYXMgYQorICAgcmV2LCBpLmUuIHRoZSBvYmplY3QgbmFtZWQgYnkgdGhlIHRoZSBwYXRobmFtZSB3aXRoIHdpbGRjYXJkCisgICBjaGFyYWN0ZXJzIGluIGEgdHJlZSBvYmplY3QuCisgICAobWVyZ2UgYWFjNGZhYyBuZC9kd2ltLXdpbGRjYXJkcy1hcy1wYXRoc3BlY3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyIiB1c2VkIGluIHRoZSB3b3JrdHJlZSBmZWF0dXJlCisgICBtaXNiZWhhdmVkIHdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisgICAobWVyZ2UgMTdmMTM2NSBuZC9naXQtY29tbW9uLWRpci1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCAtQiA8YnJhbmNobmFtZT4iIGRpZCBub3Qgd29yay4KKworICogVGhlICJ2KGlldykiIHN1YmNvbW1hbmQgb2YgdGhlIGludGVyYWN0aXZlICJnaXQgYW0gLWkiIGNvbW1hbmQgd2FzCisgICBicm9rZW4gaW4gMi42LjAgdGltZWZyYW1lIHdoZW4gdGhlIGNvbW1hbmQgd2FzIHJld3JpdHRlbiBpbiBDLgorICAgKG1lcmdlIDcwOGI4Y2MgamMvYW0taS12LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UtdHJlZSIgdXNlZCB0byBtaXNoYW5kbGUgImJvdGggc2lkZXMgYWRkZWQiIGNvbmZsaWN0IHdpdGgKKyAgIGl0cyBvd24gImNyZWF0ZSBhIGZha2UgYW5jZXN0b3IgZmlsZSB0aGF0IGhhcyB0aGUgY29tbW9uIHBhcnRzIG9mCisgICB3aGF0IGJvdGggc2lkZXMgaGF2ZSBhZGRlZCBhbmQgZG8gYSAzLXdheSBtZXJnZSIgbG9naWM7IHRoaXMgaGFzCisgICBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSB1c3VhbCAiMy13YXkgbWVyZ2Ugd2l0aCBhbiBlbXB0eSBibG9iIGFzCisgICB0aGUgZmFrZSBjb21tb24gYW5jZXN0b3IgZmlsZSIgYXBwcm9hY2ggdXNlZCBpbiB0aGUgcmVzdCBvZiB0aGUKKyAgIHN5c3RlbS4KKyAgIChtZXJnZSA5MDc2ODFlIGprL25vLWRpZmYtZW1pdC1jb21tb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWVtb3J5IG93bmVyc2hpcCBydWxlIG9mIGZpbGxfdGV4dGNvbnYoKSBBUEksIHdoaWNoIHdhcyBhIGJpdAorICAgdHJpY2t5LCBoYXMgYmVlbiBkb2N1bWVudGVkIGEgYml0IGJldHRlci4KKyAgIChtZXJnZSBhNjRlNmE0IGprL21vcmUtY29tbWVudHMtb24tdGV4dGNvbnYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVcGRhdGUgdmFyaW91cyBjb2RlcGF0aHMgdG8gYXZvaWQgbWFudWFsbHktY291bnRlZCBtYWxsb2MoKS4KKyAgIChtZXJnZSAwOGM5NWRmIGprL3RpZ2h0ZW4tYWxsb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBkaWQgbm90IGNsZWFybHkgc3RhdGUgdGhhdCB0aGUgJ3NpbXBsZScgbW9kZSBpcworICAgbm93IHRoZSBkZWZhdWx0IGZvciAiZ2l0IHB1c2giIHdoZW4gcHVzaC5kZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMKKyAgIG5vdCBzZXQuCisgICAobWVyZ2UgZjZiMWZiMyBtbS9wdXNoLXNpbXBsZS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgdmVyc2lvbnMgb2YgR05VIGdyZXAgYXJlIHBpY2tpZXIgd2hlbiB0aGVpciBpbnB1dCBjb250YWlucworICAgYXJiaXRyYXJ5IGJpbmFyeSBkYXRhLCB3aGljaCBzb21lIG9mIG91ciB0ZXN0cyB1c2VzLiAgUmV3cml0ZSB0aGUKKyAgIHRlc3RzIHRvIHNpZGVzdGVwIHRoZSBwcm9ibGVtLgorICAgKG1lcmdlIDNiMTQ0MmQgamsvZ3JlcC1iaW5hcnktd29ya2Fyb3VuZC1pbi10ZXN0IGxhdGVyIHRvIG1haW50KS4KKworICogQSBoZWxwZXIgZnVuY3Rpb24gImdpdCBzdWJtb2R1bGUiIHVzZXMgc2luY2UgdjIuNy4wIHRvIGxpc3QgdGhlCisgICBtb2R1bGVzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzcGVjIGFyZ3VtZW50IGdpdmVuIHRvIGl0cyBzdWJjb21tYW5kcworICAgKGUuZy4gInN1Ym1vZHVsZSBhZGQgPHJlcG8+IDxwYXRoPiIpIGhhcyBiZWVuIGZpeGVkLgorICAgKG1lcmdlIDJiNTZiYjcgc2Ivc3VibW9kdWxlLW1vZHVsZS1saXN0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY29uZmlnIHNlY3Rpb24udmFyIHZhbHVlIiB0byBzZXQgYSB2YWx1ZSBpbiBwZXItcmVwb3NpdG9yeQorICAgY29uZmlndXJhdGlvbiBmaWxlIGZhaWxlZCB3aGVuIGl0IHdhcyBydW4gb3V0c2lkZSBhbnkgcmVwb3NpdG9yeSwKKyAgIGJ1dCBkaWRuJ3Qgc2F5IHRoZSByZWFzb24gY29ycmVjdGx5LgorICAgKG1lcmdlIDYzOGZhNjIganMvY29uZmlnLXNldC1pbi1ub24tcmVwb3NpdG9yeSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIHJlYWQgdGhlIHBhY2sgZGF0YSB1c2luZyB0aGUgb2Zmc2V0cyBzdG9yZWQgaW4gdGhlIHBhY2sKKyAgIGlkeCBmaWxlIGhhcyBiZWVuIG1hZGUgbW9yZSBjYXJlZnVsbHkgY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZQorICAgZGF0YSBpbiB0aGUgaWR4LgorICAgKG1lcmdlIDc0NjVmZWIgamsvcGFjay1pZHgtY29ycnVwdGlvbi1zYWZldHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPdGhlciBtaW5vciBjbGVhbi11cHMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcworICAgKG1lcmdlIGY0NTk4MjMgYWsvZXh0cmFjdC1hcmd2MC1sYXN0LWRpci1zZXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDYzY2ExYzAgYWsvZ2l0LXN0cmlwLWV4dGVuc2lvbi1mcm9tLWRhc2hlZC1jb21tYW5kIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0ODY3ZjExIHBzL3BsdWcteGRsLW1lcmdlLWxlYWsgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ5Mzg2ODYgZHQvaW5pdGlhbC1yZWYteG4tY29tbWl0LWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTUzN2YyMSBtYS91cGRhdGUtaG9va3Mtc2FtcGxlLXR5cG9maXggbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZkODBiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMS50eHQKQEAgLTAsMCArMSw5IEBACitHaXQgdjIuOC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi44CistLS0tLS0tLS0tLS0tLS0tCisKKyAqICJtYWtlIHJwbWJ1aWxkIiB0YXJnZXQgd2FzIGJyb2tlbiBhcyBpdHMgaW5wdXQsIGdpdC5zcGVjLmluLCB3YXMKKyAgIG5vdCB1cGRhdGVkIHRvIG1hdGNoIGEgZmlsZSBpdCBkZXNjcmliZXMgdGhhdCBoYXMgYmVlbiByZW5hbWVkCisgICByZWNlbnRseS4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0N2IxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4yLnR4dApAQCAtMCwwICsxLDcwIEBACitHaXQgdjIuOC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi44LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZW1iZWRkZWQgYXJncyBhcmd2LWFycmF5IGluIHRoZSBjaGlsZCBwcm9jZXNzIGlzIHVzZWQgdG8gYnVpbGQKKyAgIHRoZSBjb21tYW5kIGxpbmUgdG8gcnVuIHBhY2stb2JqZWN0cyBpbnN0ZWFkIG9mIHVzaW5nIGEgc2VwYXJhdGUKKyAgIGFycmF5IG9mIHN0cmluZ3MuCisKKyAqIEJ1bmNoIG9mIHRlc3RzIG9uICJnaXQgY2xvbmUiIGhhcyBiZWVuIHJlbnVtYmVyZWQgZm9yIGJldHRlcgorICAgb3JnYW5pemF0aW9uLgorCisgKiBUaGUgdGVzdHMgdGhhdCBpbnZvbHZlIHJ1bm5pbmcgaHR0cGQgbGVha2VkIHRoZSBzeXN0ZW0td2lkZQorICAgY29uZmlndXJhdGlvbiBpbiAvZXRjL2dpdGNvbmZpZyB0byB0aGUgdGVzdGVkIGVudmlyb25tZW50LgorCisgKiAiaW5kZXgtcGFjayAtLWtlZXA9PG1zZz4iIHdhcyBicm9rZW4gc2luY2UgdjIuMS4wIHRpbWVmcmFtZS4KKworICogImdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2giLCB1bmxpa2Ugb3RoZXIgdmFyaWFudHMgb2YgdGhlICJnaXQKKyAgIGNvbmZpZyAtLWdldCIgZmFtaWx5LCBkaWQgbm90IHNpZ25hbCBlcnJvciB3aXRoIGl0cyBleGl0IHN0YXR1cworICAgd2hlbiB0aGVyZSB3YXMgbm8gbWF0Y2hpbmcgY29uZmlndXJhdGlvbi4KKworICogVGhlICItLWxvY2FsLWVudi12YXJzIiBhbmQgIi0tcmVzb2x2ZS1naXQtZGlyIiBvcHRpb25zIG9mICJnaXQKKyAgIHJldi1wYXJzZSIgZmFpbGVkIHRvIHdvcmsgb3V0c2lkZSBhIHJlcG9zaXRvcnkgd2hlbiB0aGUgY29tbWFuZCdzCisgICBvcHRpb24gcGFyc2luZyB3YXMgcmV3cml0dGVuIGluIDEuOC41IGVyYS4KKworICogRmV0Y2hpbmcgb2YgaGlzdG9yeSBieSBuYW1pbmcgYSBjb21taXQgb2JqZWN0IG5hbWUgZGlyZWN0bHkgZGlkbid0CisgICB3b3JrIGFjcm9zcyByZW1vdGUtY3VybCB0cmFuc3BvcnQuCisKKyAqIEEgc21hbGwgbWVtb3J5IGxlYWsgaW4gYW4gZXJyb3IgY29kZXBhdGggaGFzIGJlZW4gcGx1Z2dlZCBpbiB4ZGlmZgorICAgY29kZS4KKworICogc3RyYnVmX2dldHdob2xlbGluZSgpIGRpZCBub3QgTlVMLXRlcm1pbmF0ZSB0aGUgYnVmZmVyIG9uIGNlcnRhaW4KKyAgIGNvcm5lciBjYXNlcyBpbiBpdHMgZXJyb3IgY29kZXBhdGguCisKKyAqIFRoZSBzdGFydHVwX2luZm8gZGF0YSwgd2hpY2ggcmVjb3JkcyBpZiB3ZSBhcmUgd29ya2luZyBpbnNpZGUgYQorICAgcmVwb3NpdG9yeSAoYW1vbmcgb3RoZXIgdGhpbmdzKSwgYXJlIG5vdyB1bmlmb3JtbHkgYXZhaWxhYmxlIHRvIEdpdAorICAgc3ViY29tbWFuZCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBHaXQgYXZvaWRzIGF0dGVtcHRpbmcgdG8gdG91Y2gKKyAgIHJlZmVyZW5jZXMgd2hlbiB3ZSBhcmUgbm90IGluIGEgcmVwb3NpdG9yeS4KKworICogImdpdCBtZXJnZXRvb2wiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggY29uZmxpY3RzIHRoYXQgYm90aCBzaWRlcworICAgZGVsZXRlZC4KKworICogImdpdCBzZW5kLWVtYWlsIiBoYWQgdHJvdWJsZSBwYXJzaW5nIGFsaWFzIGZpbGUgaW4gbWFpbHJjIGZvcm1hdAorICAgd2hlbiBsaW5lcyBpbiBpdCBoYWQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgb24gdGhlbS4KKworICogV2hlbiAiZ2l0IG1lcmdlIC0tc3F1YXNoIiBzdG9wcGVkIGR1ZSB0byBjb25mbGljdCwgdGhlIGNvbmNsdWRpbmcKKyAgICJnaXQgY29tbWl0IiBmYWlsZWQgdG8gcmVhZCBpbiB0aGUgU1FVQVNIX01TRyB0aGF0IHNob3dzIHRoZSBsb2cKKyAgIG1lc3NhZ2VzIGZyb20gYWxsIHRoZSBzcXVhc2hlZCBjb21taXRzLgorCisgKiAiZ2l0IG1lcmdlIEZFVENIX0hFQUQiIGRlcmVmZXJlbmNlZCBOVUxMIHBvaW50ZXIgd2hlbiBtZXJnaW5nCisgICBub3RoaW5nIGludG8gYW4gdW5ib3JuIGhpc3RvcnkgKHdoaWNoIGlzIGFyZ3VhYmx5IHVudXN1YWwgdXNhZ2UsCisgICB3aGljaCBwZXJoYXBzIHdhcyB0aGUgcmVhc29uIHdoeSBub2JvZHkgbm90aWNlZCBpdCkuCisKKyAqIEJ1aWxkIHVwZGF0ZXMgZm9yIE1TVkMuCisKKyAqICJnaXQgZGlmZiAtTSIgdXNlZCB0byB3b3JrIGJldHRlciB3aGVuIHR3byBvcmlnaW5hbGx5IGlkZW50aWNhbAorICAgZmlsZXMgQSBhbmQgQiBnb3QgcmVuYW1lZCB0byBYL0EgYW5kIFgvQiBieSBwYWlyaW5nIEEgdG8gWC9BIGFuZCBCCisgICB0byBYL0IsIGJ1dCB0aGlzIHdhcyBicm9rZW4gaW4gdGhlIDIuMCB0aW1lZnJhbWUuCisKKyAqICJnaXQgc2VuZC1wYWNrIC0tYWxsIDx0aGVyZT4iIHdhcyBicm9rZW4gd2hlbiBpdHMgY29tbWFuZCBsaW5lCisgICBvcHRpb24gcGFyc2luZyB3YXMgd3JpdHRlbiBpbiB0aGUgMi42IHRpbWVmcmFtZS4KKworICogV2hlbiBydW5uaW5nICJnaXQgYmxhbWUgJHBhdGgiIHdpdGggdW5ub3JtYWxpemVkIGRhdGEgaW4gdGhlIGluZGV4CisgICBmb3IgdGhlIHBhdGgsIHRoZSBkYXRhIGluIHRoZSB3b3JraW5nIHRyZWUgd2FzIGJsYW1lZCwgZXZlbiB0aG91Z2gKKyAgICJnaXQgYWRkIiB3b3VsZCBub3QgaGF2ZSBjaGFuZ2VkIHdoYXQgaXMgYWxyZWFkeSBpbiB0aGUgaW5kZXgsIGR1ZQorICAgdG8gInNhZmUgY3JsZiIgdGhhdCBkaXNhYmxlcyB0aGUgbGluZS1lbmQgY29udmVyc2lvbi4gIEl0IGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzODI1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjMudHh0CkBAIC0wLDAgKzEsMTAxIEBACitHaXQgdjIuOC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi44LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHNlbmQtZW1haWwiIG5vdyB1c2VzIGEgbW9yZSByZWFkYWJsZSB0aW1lc3RhbXBzIHdoZW4KKyAgIGZvcm11bGF0aW5nIGEgbWVzc2FnZSBJRC4KKworICogVGhlIHJlcG9zaXRvcnkgc2V0LXVwIHNlcXVlbmNlIGhhcyBiZWVuIHN0cmVhbWxpbmVkICh0aGUgYmlnZ2VzdAorICAgY2hhbmdlIGlzIHRoYXQgdGhlcmUgaXMgbm8gbG9uZ2VyIGdpdF9jb25maWdfZWFybHkoKSksIHNvIHRoYXQgd2UKKyAgIGRvIG5vdCBhdHRlbXB0IHRvIGxvb2sgaW50byByZWZzLyogd2hlbiB3ZSBrbm93IHdlIGRvIG5vdCBoYXZlIGEKKyAgIEdpdCByZXBvc2l0b3J5LgorCisgKiBXaGVuICJnaXQgd29ya3RyZWUiIGZlYXR1cmUgaXMgaW4gdXNlLCAiZ2l0IGJyYW5jaCAtZCIgYWxsb3dlZAorICAgZGVsZXRpb24gb2YgYSBicmFuY2ggdGhhdCBpcyBjaGVja2VkIG91dCBpbiBhbm90aGVyIHdvcmt0cmVlCisKKyAqIFdoZW4gImdpdCB3b3JrdHJlZSIgZmVhdHVyZSBpcyBpbiB1c2UsICJnaXQgYnJhbmNoIC1tIiByZW5hbWVkIGEKKyAgIGJyYW5jaCB0aGF0IGlzIGNoZWNrZWQgb3V0IGluIGFub3RoZXIgd29ya3RyZWUgd2l0aG91dCBhZGp1c3RpbmcKKyAgIHRoZSBIRUFEIHN5bWJvbGljIHJlZiBmb3IgdGhlIHdvcmt0cmVlLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWhlbHAiIHNob3dlZCBgLXNgIGFuZCBgLS1uby1wYXRjaGAgYXMgaWYgdGhlc2UKKyAgIGFyZSB2YWxpZCBvcHRpb25zIHRvIHRoZSBjb21tYW5kLiAgV2UgYWxyZWFkeSBoaWRlIGAtLXBhdGNoYCBvcHRpb24KKyAgIGZyb20gdGhlIGRvY3VtZW50YXRpb24sIGJlY2F1c2UgZm9ybWF0LXBhdGNoIGlzIGFib3V0IHNob3dpbmcgdGhlCisgICBkaWZmLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gbm93IGhpZGVzIHRoZXNlIG9wdGlvbnMgYXMgd2VsbC4KKworICogQSBjaGFuZ2UgYmFjayBpbiB2ZXJzaW9uIDIuNyB0byAiZ2l0IGJyYW5jaCIgYnJva2UgZGlzcGxheSBvZiBhCisgICBzeW1ib2xpYyByZWYgaW4gYSBub24tc3RhbmRhcmQgcGxhY2UgaW4gdGhlIHJlZnMvIGhpZXJhcmNoeSAod2UKKyAgIGV4cGVjdCBzeW1ib2xpYyByZWZzIHRvIGFwcGVhciBpbiByZWZzL3JlbW90ZXMvKi9IRUFEIHRvIHBvaW50IGF0CisgICB0aGUgcHJpbWFyeSBicmFuY2ggdGhlIHJlbW90ZSBoYXMsIGFuZCBhcyAuZ2l0L0hFQUQgdG8gcG9pbnQgYXQgdGhlCisgICBicmFuY2ggd2UgbG9jYWxseSBjaGVja2VkIG91dCkuCisKKyAqIEEgcGFydGlhbCByZXdyaXRlIG9mICJnaXQgc3VibW9kdWxlIiBpbiB0aGUgMi43IHRpbWVmcmFtZSBjaGFuZ2VkCisgICB0aGUgd2F5IHRoZSBnaXRkaXI6IHBvaW50ZXIgaW4gdGhlIHN1Ym1vZHVsZXMgcG9pbnQgYXQgdGhlIHJlYWwKKyAgIHJlcG9zaXRvcnkgbG9jYXRpb24gdG8gdXNlIGFic29sdXRlIHBhdGhzIGJ5IGFjY2lkZW50LiAgVGhpcyBoYXMKKyAgIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGNvbW1pdCIgbWlzYmVoYXZlZCBpbiBhIGZldyBtaW5vciB3YXlzIHdoZW4gYW4gZW1wdHkgbWVzc2FnZQorICAgaXMgZ2l2ZW4gdmlhIC1tICcnLCBhbGwgb2Ygd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBTdXBwb3J0IGZvciBDUkFNLU1ENSBhdXRoZW50aWNhdGlvbiBtZXRob2QgaW4gImdpdCBpbWFwLXNlbmQiIGRpZAorICAgbm90IHdvcmsgd2VsbC4KKworICogVGhlIHNvY2tzNTovLyBwcm94eSBzdXBwb3J0IGFkZGVkIGJhY2sgaW4gMi42LjQgZGF5cyB3YXMgbm90IGF3YXJlCisgICB0aGF0IHNvY2tzNWg6Ly8gcHJveGllcyBiZWhhdmUgZGlmZmVyZW50bHkuCisKKyAqICJnaXQgY29uZmlnIiBoYWQgYSBjb2RlcGF0aCB0aGF0IHRyaWVkIHRvIHBhc3MgYSBOVUxMIHRvCisgICBwcmludGYoIiVzIiksIHdoaWNoIG5vYm9keSBzZWVtcyB0byBoYXZlIG5vdGljZWQuCisKKyAqIE9uIEN5Z3dpbiwgb2JqZWN0IGNyZWF0aW9uIHVzZXMgdGhlICJjcmVhdGUgYSB0ZW1wb3JhcnkgYW5kIHRoZW4KKyAgIHJlbmFtZSBpdCB0byB0aGUgZmluYWwgbmFtZSIgcGF0dGVybiwgbm90ICJjcmVhdGUgYSB0ZW1wb3JhcnksCisgICBoYXJkbGluayBpdCB0byB0aGUgZmluYWwgbmFtZSBhbmQgdGhlbiB1bmxpbmsgdGhlIHRlbXBvcmFyeSIKKyAgIHBhdHRlcm4uCisKKyAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHVzZSBHaXQgb24gV2luZG93cyBzaGFyZWQgZGlyZWN0b3JpZXMsIGFuZCBpcworICAgYWxyZWFkeSBlbmFibGVkIGZvciB0aGUgTWluR1cgYW5kIHBsYWluIFdpbmRvd3MgYnVpbGRzLiAgSXQgYWxzbworICAgaGFzIGJlZW4gdXNlZCBpbiBDeWd3aW4gcGFja2FnZWQgdmVyc2lvbnMgb2YgR2l0IGZvciBxdWl0ZSBhIHdoaWxlLgorICAgU2VlIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE2MDQxOTA5MTA1NS5HRjIzNDVAZGlud29vZGllLm9yZy8KKyAgIGFuZCBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNTA4MTExMDA1MjcuR1cxNDQ2NkBkaW53b29kaWUub3JnLy4KKworICogImdpdCByZXBsYWNlIC1lIiBkaWQgbm90IGhvbm91ciAiY29yZS5lZGl0b3IiIGNvbmZpZ3VyYXRpb24uCisKKyAqIFVwY29taW5nIE9wZW5TU0wgMS4xLjAgd2lsbCBicmVhayBjb21waWxhdGlvbiBiIHVwZGF0aW5nIGEgZmV3IEFQSXMKKyAgIHdlIHVzZSBpbiBpbWFwLXNlbmQsIHdoaWNoIGhhcyBiZWVuIGFkanVzdGVkIGZvciB0aGUgY2hhbmdlLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgcmVwb3J0cyB0aGUgcGF0aHMgb2Ygc3VibW9kdWxlcyB0aGUgY29tbWFuZAorICAgcmVjdXJzZXMgaW50bywgYnV0IHRoaXMgd2FzIGluY29ycmVjdCB3aGVuIHRoZSBjb21tYW5kIHdhcyBub3QgcnVuCisgICBmcm9tIHRoZSByb290IGxldmVsIG9mIHRoZSBzdXBlcnByb2plY3QuCisKKyAqIFRoZSB0ZXN0IHNjcmlwdHMgZm9yICJnaXQgcDQiIChidXQgbm90ICJnaXQgcDQiIGltcGxlbWVudGF0aW9uCisgICBpdHNlbGYpIGhhcyBiZWVuIHVwZGF0ZWQgc28gdGhhdCB0aGV5IHdvdWxkIHdvcmsgZXZlbiBvbiBhIHN5c3RlbQorICAgd2hlcmUgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFB5dGhvbiBpcyBweXRob24gMy4KKworICogVGhlICJ1c2VyLnVzZUNvbmZpZ09ubHkiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbWFrZXMgaXQgYW4gZXJyb3IKKyAgIGlmIHVzZXJzIGRvIG5vdCBleHBsaWNpdGx5IHNldCB1c2VyLm5hbWUgYW5kIHVzZXIuZW1haWwuICBIb3dldmVyLAorICAgaXRzIGNoZWNrIHdhcyBub3QgZG9uZSBlYXJseSBlbm91Z2ggYW5kIGFsbG93ZWQgYW5vdGhlciBlcnJvciB0bworICAgdHJpZ2dlciwgcmVwb3J0aW5nIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgd2UgZ3Vlc3NlZCBmcm9tIHRoZQorICAgc3lzdGVtIHNldHRpbmcgd2FzIHVudXNhYmxlLiAgVGhpcyB3YXMgYSBzdWJvcHRpbWFsIGVuZC11c2VyCisgICBleHBlcmllbmNlIGFzIHdlIHdhbnQgdGhlIHVzZXJzIHRvIHNldCB1c2VyLm5hbWUvdXNlci5lbWFpbCB3aXRob3V0CisgICByZWx5aW5nIG9uIHRoZSBhdXRvLWRldGVjdGlvbiBhdCBhbGwuCisKKyAqICJnaXQgbXYgb2xkIG5ldyIgZGlkIG5vdCBhZGp1c3QgdGhlIHBhdGggZm9yIGEgc3VibW9kdWxlIHRoYXQgbGl2ZXMKKyAgIGFzIGEgc3ViZGlyZWN0b3J5IGluc2lkZSBvbGQvIGRpcmVjdG9yeSBjb3JyZWN0bHkuCisKKyAqICJnaXQgcHVzaCIgZnJvbSBhIGNvcnJ1cHQgcmVwb3NpdG9yeSB0aGF0IGF0dGVtcHRzIHRvIHB1c2ggYSBsYXJnZQorICAgbnVtYmVyIG9mIHJlZnMgZGVhZGxvY2tlZDsgdGhlIHRocmVhZCB0byByZWxheSByZWplY3Rpb24gbm90aWNlcworICAgZm9yIHRoZXNlIHJlZiB1cGRhdGVzIGJsb2NrZWQgb24gd3JpdGluZyB0aGVtIHRvIHRoZSBtYWluIHRocmVhZCwKKyAgIGFmdGVyIHRoZSBtYWluIHRocmVhZCBhdCB0aGUgcmVjZWl2aW5nIGVuZCBub3RpY2VzIHRoYXQgdGhlIHB1c2gKKyAgIGZhaWxlZCBhbmQgZGVjaWRlcyBub3QgdG8gcmVhZCB0aGVzZSBub3RpY2VzIGFuZCByZXR1cm4gYSBmYWlsdXJlLgorCisgKiBBIHF1ZXN0aW9uIGJ5ICJnaXQgc2VuZC1lbWFpbCIgdG8gYXNrIHRoZSBpZGVudGl0eSBvZiB0aGUgc2VuZGVyCisgICBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvIEdpdCBMRlMgYnJva2UgImdpdCBwNCIgYnkgY2hhbmdpbmcgdGhlIG91dHB1dCBmcm9tCisgICBpdHMgImxmcyBwb2ludGVyIiBzdWJjb21tYW5kLgorCisgKiBTb21lIG11bHRpLWJ5dGUgZW5jb2RpbmcgY2FuIGhhdmUgYSBiYWNrc2xhc2ggYnl0ZSBhcyBhIGxhdGVyIHBhcnQKKyAgIG9mIG9uZSBsZXR0ZXIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgImhpZ2hsaWdodCIgZmlsdGVyIHVzZWQgaW4KKyAgIGdpdHdlYi4KKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGUyNTUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguNC50eHQKQEAgLTAsMCArMSw2OSBAQAorR2l0IHYyLjguNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuOC4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogRG9jdW1lbnRhdGlvbiBmb3IgImdpdCBtZXJnZSAtLXZlcmlmeS1zaWduYXR1cmVzIiBoYXMgYmVlbiB1cGRhdGVkCisgICB0byBjbGFyaWZ5IHRoYXQgdGhlIHNpZ25hdHVyZSBvZiBvbmx5IHRoZSBjb21taXQgYXQgdGhlIHRpcCBpcworICAgdmVyaWZpZWQuICBBbHNvIHRoZSBwaHJhc2luZyB1c2VkIGZvciBzaWduYXR1cmUgYW5kIGtleSB2YWxpZGl0eSBpcworICAgYWRqdXN0ZWQgdG8gYWxpZ24gd2l0aCB0aGF0IHVzZWQgYnkgT3BlblBHUC4KKworICogT24gV2luZG93cywgLmdpdCBhbmQgb3B0aW9uYWxseSBhbnkgZmlsZXMgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBhCisgICBkb3QgYXJlIG5vdyBtYXJrZWQgYXMgaGlkZGVuLCB3aXRoIGEgY29yZS5oaWRlRG90RmlsZXMga25vYiB0bworICAgY3VzdG9taXplIHRoaXMgYmVoYXZpb3VyLgorCisgKiBQb3J0YWJpbGl0eSBlbmhhbmNlbWVudCBmb3IgInJlYmFzZSAtaSIgdG8gaGVscCBwbGF0Zm9ybXMgd2hvc2UKKyAgIHNoZWxsIGRvZXMgbm90IGxpa2UgImZvciBpIGluIDxlbXB0eT4iICh3aGljaCBpcyBub3QgUE9TSVgta29zaGVyKS4KKworICogImdpdCBmc2NrIiBsZWFybmVkIHRvIGNhdGNoIE5VTCBieXRlIGluIGEgY29tbWl0IG9iamVjdCBhcworICAgcG90ZW50aWFsIGVycm9yIGFuZCB3YXJuLgorCisgKiBDSSB0ZXN0IHdhcyB0YXVnaHQgdG8gYnVpbGQgZG9jdW1lbnRhdGlvbiBwYWdlcy4KKworICogTWFueSAnbGlua2dpdDo8Z2l0IGRvY3VtZW50YXRpb24gcGFnZT4nIHJlZmVyZW5jZXMgd2VyZSBicm9rZW4sCisgICB3aGljaCBhcmUgYWxsIGZpeGVkIHdpdGggdGhpcy4KKworICogImdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIiBvZnRlbiBtYWRlIGEgaGFyZC10by1qdXN0aWZ5IGNob2ljZSBvZgorICAgdGFnIHRvIGdpdmUgbmFtZSB0byBhIGdpdmVuIGNvbW1pdCwgYmVjYXVzZSBpdCB0cmllZCB0byBjb21lIHVwCisgICB3aXRoIGEgbmFtZSB3aXRoIHNtYWxsZXN0IG51bWJlciBvZiBob3BzIGZyb20gYSB0YWcsIGNhdXNpbmcgYW4gb2xkCisgICBjb21taXQgd2hvc2UgY2xvc2UgZGVzY2VuZGFudCB0aGF0IGlzIHJlY2VudGx5IHRhZ2dlZCB3ZXJlIG5vdAorICAgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byBhbiBvbGQgdGFnIGJ1dCB3aXRoIGEgbmV3ZXIgdGFnLiAgSXQgZGlkCisgICBub3QgaGVscCB0aGF0IGl0cyBjb21wdXRhdGlvbiBvZiAiaG9wIiBjb3VudCB3YXMgZnVydGhlciB0d2Vha2VkIHRvCisgICBwZW5hbGl6ZSBiZWluZyBvbiBhIHNpZGUgYnJhbmNoIG9mIGEgbWVyZ2UuICBUaGUgbG9naWMgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gZmF2b3IgdXNpbmcgdGhlIHRhZyB3aXRoIHRoZSBvbGRlc3QgdGFnZ2VyIGRhdGUsIHdoaWNoCisgICBpcyBhIGxvdCBlYXNpZXIgdG8gZXhwbGFpbiB0byB0aGUgZW5kIHVzZXJzOiAiV2UgZGVzY3JpYmUgYSBjb21taXQKKyAgIGluIHRlcm1zIG9mIHRoZSAoY2hyb25vbG9naWNhbGx5KSBvbGRlc3QgdGFnIHRoYXQgY29udGFpbnMgdGhlCisgICBjb21taXQuIgorCisgKiBSdW5uaW5nIHRlc3RzIHdpdGggJy14JyBvcHRpb24gdG8gdHJhY2UgdGhlIGluZGl2aWR1YWwgY29tbWFuZAorICAgZXhlY3V0aW9ucyBpcyBhIHVzZWZ1bCB3YXkgdG8gZGVidWcgdGVzdCBzY3JpcHRzLCBidXQgc29tZSB0ZXN0cworICAgdGhhdCBjYXB0dXJlIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gYW5kIGNoZWNrIHdoYXQgdGhlIGNvbW1hbmQKKyAgIHNhaWQgY2FuIGJlIGJyb2tlbiB3aXRoIHRoZSB0cmFjZSBvdXRwdXQgbWl4ZWQgaW4uICBXaGVuIHJ1bm5pbmcKKyAgIG91ciB0ZXN0cyB1bmRlciAiYmFzaCIsIGhvd2V2ZXIsIHdlIGNhbiByZWRpcmVjdCB0aGUgdHJhY2Ugb3V0cHV0CisgICB0byBhbm90aGVyIGZpbGUgZGVzY3JpcHRvciB0byBrZWVwIHRoZSBzdGFuZGFyZCBlcnJvciBvZiBwcm9ncmFtcworICAgYmVpbmcgdGVzdGVkIGludGFjdC4KKworICogImh0dHAuY29va2llRmlsZSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjbGVhcmx5IHdhbnRzIGEgcGF0aG5hbWUsCisgICBidXQgd2UgZm9yZ290IHRvIHRyZWF0IGl0IGFzIHN1Y2ggYnkgZS5nLiBhcHBseWluZyB0aWxkZSBleHBhbnNpb24uCisKKyAqIFdoZW4gZGUtaW5pdGlhbGlzaW5nIGFsbCBzdWJtb2R1bGVzLCAiZ2l0IHN1Ym1vZHVsZSBkZWluaXQiIGdhdmUgYQorICAgZmF1bHR5IHJlY29tbWVuZGF0aW9uIHRvIHVzZSAiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLiIsIHdoaWNoIHdvdWxkCisgICByZXN1bHQgaW4gYSBzdHJhbmdlIGVycm9yIG1lc3NhZ2UgaW4gYSBwYXRob2xvZ2ljYWwgY29ybmVyIGNhc2UuCisgICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBzdWdnZXN0ICJzdWJtb2R1bGUgZGVpbml0IC0tYWxsIiBpbnN0ZWFkLgorCisgKiBNYW55IGNvbW1hbmRzIG5vcm1hbGl6ZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZyb20gTkZEIHRvIE5GQworICAgdmFyaWFudCBvZiBVVEYtOCBvbiBPU1gsIGJ1dCBjb21tYW5kcyBpbiB0aGUgImRpZmYiIGZhbWlseSBkaWQKKyAgIG5vdCwgY2F1c2luZyAiZ2l0IGRpZmYgJHBhdGgiIHRvIGNvbXBsYWluIHRoYXQgbm8gc3VjaCBwYXRoIGlzCisgICBrbm93biB0byBHaXQuICBUaGV5IGhhdmUgYmVlbiB0YXVnaHQgdG8gZG8gdGhlIG5vcm1hbGl6YXRpb24uCisKKyAqIEEgY291cGxlIG9mIGJ1Z3MgYXJvdW5kIGNvcmUuYXV0b2NybGYgaGF2ZSBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBsZWFybmVkIHRvIGhhbmRsZSB1bm1lcmdlZCBwYXRocyBjb3JyZWN0bHkgaW4KKyAgIGRpci1kaWZmIG1vZGUuCisKKyAqIFRoZSAiYXJlIHdlIHRhbGtpbmcgd2l0aCBUVFksIGRvaW5nIGFuIGludGVyYWN0aXZlIHNlc3Npb24/IgorICAgZGV0ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayBiZXR0ZXIgZm9yICJHaXQgZm9yIFdpbmRvd3MiLgorCisKK0Fsc28gY29udGFpbnMgb3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkMTc5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjUudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2Mi44LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjguNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZGI1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC42LnR4dApAQCAtMCwwICsxLDQgQEAKK0dpdCB2Mi44LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBmb3J3YXJkLXBvcnRzIHRoZSBmaXggZm9yICJzc2g6Ly8uLi4iIFVSTCBmcm9tIEdpdCB2Mi43LjYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxNjQwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjAudHh0CkBAIC0wLDAgKzEsNTEyIEBACitHaXQgMi45IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlbmQtdXNlciBmYWNpbmcgUG9yY2VsYWluIGxldmVsIGNvbW1hbmRzIGluIHRoZSAiZ2l0IGRpZmYiIGFuZAorImdpdCBsb2ciIGZhbWlseSBieSBkZWZhdWx0IGVuYWJsZSB0aGUgcmVuYW1lIGRldGVjdGlvbjsgeW91IGNhbiBzdGlsbAordXNlICJkaWZmLnJlbmFtZXMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZGlzYWJsZSB0aGlzLgorCitNZXJnaW5nIHR3byBicmFuY2hlcyB0aGF0IGhhdmUgbm8gY29tbW9uIGFuY2VzdG9yIHdpdGggImdpdCBtZXJnZSIgaXMKK2J5IGRlZmF1bHQgZm9yYmlkZGVuIG5vdyB0byBwcmV2ZW50IGNyZWF0aW5nIHN1Y2ggYW4gdW51c3VhbCBtZXJnZSBieQorbWlzdGFrZS4KKworVGhlIG91dHB1dCBmb3JtYXRzIG9mICJnaXQgbG9nIiB0aGF0IGluZGVudHMgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBieQorNCBzcGFjZXMgbm93IGV4cGFuZHMgSFQgaW4gdGhlIGxvZyBtZXNzYWdlIGJ5IGRlZmF1bHQuICBZb3UgY2FuIHVzZQordGhlICItLW5vLWV4cGFuZC10YWJzIiBvcHRpb24gdG8gZGlzYWJsZSB0aGlzLgorCisiZ2l0IGNvbW1pdC10cmVlIiBwbHVtYmluZyBjb21tYW5kIHJlcXVpcmVkIHRoZSB1c2VyIHRvIGFsd2F5cyBzaWduCitpdHMgcmVzdWx0IHdoZW4gdGhlIHVzZXIgc2V0cyB0aGUgY29tbWl0LmdwZ3NpZ24gY29uZmlndXJhdGlvbgordmFyaWFibGUsIHdoaWNoIHdhcyBhbiBhbmNpZW50IG1pc3Rha2UsIHdoaWNoIHRoaXMgcmVsZWFzZSBjb3JyZWN0cy4KK0Egc2NyaXB0IHRoYXQgZHJpdmVzIGNvbW1pdC10cmVlLCBpZiBpdCByZWxpZXMgb24gdGhpcyBtaXN0YWtlLCBub3cKK25lZWRzIHRvIHJlYWQgY29tbWl0LmdwZ3NpZ24gYW5kIHBhc3MgdGhlIC1TIG9wdGlvbiBhcyBuZWNlc3NhcnkuCisKKworVXBkYXRlcyBzaW5jZSB2Mi44CistLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIENvbWVzIHdpdGggZ2l0LW11bHRpbWFpbCAxLjMuMSAoaW4gY29udHJpYi8pLgorCisgKiBUaGUgZW5kLXVzZXIgZmFjaW5nIGNvbW1hbmRzIGxpa2UgImdpdCBkaWZmIiBhbmQgImdpdCBsb2ciCisgICBub3cgZW5hYmxlIHRoZSByZW5hbWUgZGV0ZWN0aW9uIGJ5IGRlZmF1bHQuCisKKyAqIFRoZSBjcmVkZW50aWFsLmhlbHBlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIGN1bXVsYXRpdmUgYW5kCisgICB0aGVyZSBpcyBubyBnb29kIHdheSB0byBvdmVycmlkZSBpdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBBcworICAgYSBzcGVjaWFsIGNhc2UsIGdpdmluZyBhbiBlbXB0eSBzdHJpbmcgYXMgaXRzIHZhbHVlIG5vdyBzZXJ2ZXMKKyAgIGFzIHRoZSBzaWduYWwgdG8gY2xlYXIgdGhlIHZhbHVlcyBzcGVjaWZpZWQgaW4gdmFyaW91cyBmaWxlcy4KKworICogQSBuZXcgImludGVyYWN0aXZlLmRpZmZGaWx0ZXIiIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHVzZWQgdG8KKyAgIGN1c3RvbWl6ZSB0aGUgZGlmZiBzaG93biBpbiAiZ2l0IGFkZCAtaSIgc2Vzc2lvbnMuCisKKyAqICJnaXQgcDQiIG5vdyBhbGxvd3MgUDQgYXV0aG9yIG5hbWVzIHRvIGJlIG1hcHBlZCB0byBHaXQgYXV0aG9yCisgICBuYW1lcy4KKworICogImdpdCByZWJhc2UgLXgiIGNhbiBiZSB1c2VkIHdpdGhvdXQgcGFzc2luZyAiLWkiIG9wdGlvbi4KKworICogImdpdCAtYyBjcmVkZW50aWFsLjx2YXI+PTx2YWx1ZT4gc3VibW9kdWxlIiBjYW4gbm93IGJlIHVzZWQgdG8KKyAgIHByb3BhZ2F0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyByZWxhdGVkIHRvIGNyZWRlbnRpYWwgaGVscGVyCisgICBkb3duIHRvIHRoZSBzdWJtb2R1bGVzLgorCisgKiAiZ2l0IHRhZyIgY2FuIGNyZWF0ZSBhbiBhbm5vdGF0ZWQgdGFnIHdpdGhvdXQgZXhwbGljaXRseSBnaXZlbiBhbgorICAgIi1hIiAob3IgIi1zIikgb3B0aW9uIChpLmUuIHdoZW4gYSB0YWcgbWVzc2FnZSBpcyBnaXZlbikuICBBIG5ldworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgdGFnLmZvcmNlU2lnbkFubm90YXRlZCwgY2FuIGJlIHVzZWQgdG8gdGVsbAorICAgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHNpZ25lZCB0YWcgaW4gc3VjaCBhIHNpdHVhdGlvbi4KKworICogImdpdCBtZXJnZSIgdXNlZCB0byBhbGxvdyBtZXJnaW5nIHR3byBicmFuY2hlcyB0aGF0IGhhdmUgbm8gY29tbW9uCisgICBiYXNlIGJ5IGRlZmF1bHQsIHdoaWNoIGxlZCB0byBhIGJyYW5kIG5ldyBoaXN0b3J5IG9mIGFuIGV4aXN0aW5nCisgICBwcm9qZWN0IGNyZWF0ZWQgYW5kIHRoZW4gZ2V0IHB1bGxlZCBieSBhbiB1bnN1c3BlY3RpbmcgbWFpbnRhaW5lciwKKyAgIHdoaWNoIGFsbG93ZWQgYW4gdW5uZWNlc3NhcnkgcGFyYWxsZWwgaGlzdG9yeSBtZXJnZWQgaW50byB0aGUKKyAgIGV4aXN0aW5nIHByb2plY3QuICBUaGUgY29tbWFuZCBoYXMgYmVlbiB0YXVnaHQgbm90IHRvIGFsbG93IHRoaXMgYnkKKyAgIGRlZmF1bHQsIHdpdGggYW4gZXNjYXBlIGhhdGNoICItLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMiIG9wdGlvbgorICAgdG8gYmUgdXNlZCBpbiBhIHJhcmUgZXZlbnQgdGhhdCBtZXJnZXMgaGlzdG9yaWVzIG9mIHR3byBwcm9qZWN0cworICAgdGhhdCBzdGFydGVkIHRoZWlyIGxpdmVzIGluZGVwZW5kZW50bHkuCisKKyAqICJnaXQgcHVsbCIgaGFzIGJlZW4gdGF1Z2h0IHRvIHBhc3MgdGhlICItLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMiCisgICBvcHRpb24gdG8gdW5kZXJseWluZyAiZ2l0IG1lcmdlIi4KKworICogImdpdCBhcHBseSAtdiIgbGVhcm5lZCB0byByZXBvcnQgcGF0aHMgaW4gdGhlIHBhdGNoIHRoYXQgd2VyZQorICAgc2tpcHBlZCB2aWEgLS1pbmNsdWRlLy0tZXhjbHVkZSBtZWNoYW5pc20gb3IgYmVpbmcgb3V0c2lkZSB0aGUKKyAgIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKyAqIFNoZWxsIGNvbXBsZXRpb24gKGluIGNvbnRyaWIvKSB1cGRhdGVzLgorCisgKiBUaGUgY29tbWl0IG9iamVjdCBuYW1lIHJlcG9ydGVkIHdoZW4gInJlYmFzZSAtaSIgc3RvcHMgaGFzIGJlZW4KKyAgIHNob3J0ZW5lZC4KKworICogImdpdCB3b3JrdHJlZSBhZGQiIGNhbiBiZSBnaXZlbiAiLS1uby1jaGVja291dCIgb3B0aW9uIHRvIG9ubHkKKyAgIGNyZWF0ZSBhbiBlbXB0eSB3b3JrdHJlZSB3aXRob3V0IGNoZWNraW5nIG91dCB0aGUgZmlsZXMuCisKKyAqICJnaXQgbWVyZ2V0b29scyIgbGVhcm5lZCB0byBkcml2ZSBFeGFtRGlmZi4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBsZWFybmVkICItLVtuby1dYXV0b3N0YXNoIiBvcHRpb24sIHNvIHRoYXQKKyAgIHRoZSByZWJhc2UuYXV0b3N0YXNoIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgc2V0IHRvIHRydWUgY2FuIGJlCisgICBvdmVycmlkZGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogV2hlbiAiZ2l0IGxvZyIgc2hvd3MgdGhlIGxvZyBtZXNzYWdlIGluZGVudGVkIGJ5IDQtc3BhY2VzLCB0aGUKKyAgIHJlbWFpbmRlciBvZiBhIGxpbmUgYWZ0ZXIgYSBIVCBkb2VzIG5vdCBhbGlnbiBpbiB0aGUgd2F5IHRoZSBhdXRob3IKKyAgIG9yaWdpbmFsbHkgaW50ZW5kZWQuICBUaGUgY29tbWFuZCBub3cgZXhwYW5kcyB0YWJzIGJ5IGRlZmF1bHQgdG8gaGVscAorICAgc3VjaCBhIGNhc2UsIGFuZCBhbGxvd3MgdGhlIHVzZXJzIHRvIG92ZXJyaWRlIGl0IHdpdGggYSBuZXcgb3B0aW9uLAorICAgIi0tbm8tZXhwYW5kLXRhYnMiLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIG5vdyB1c2VzIGEgbW9yZSByZWFkYWJsZSB0aW1lc3RhbXBzIHdoZW4KKyAgIGZvcm11bGF0aW5nIGEgbWVzc2FnZSBJRC4KKworICogImdpdCByZXJlcmUiIGNhbiBlbmNvdW50ZXIgdHdvIG9yIG1vcmUgZmlsZXMgd2l0aCB0aGUgc2FtZSBjb25mbGljdAorICAgc2lnbmF0dXJlIHRoYXQgaGF2ZSB0byBiZSByZXNvbHZlZCBpbiBkaWZmZXJlbnQgd2F5cywgYnV0IHRoZXJlIHdhcworICAgbm8gd2F5IHRvIHJlY29yZCB0aGVzZSBzZXBhcmF0ZSByZXNvbHV0aW9ucy4KKworICogImdpdCBwNCIgbGVhcm5lZCB0byByZWNvcmQgUDQgam9icyBpbiBHaXQgY29tbWl0IHRoYXQgaW1wb3J0cyBmcm9tCisgICB0aGUgaGlzdG9yeSBpbiBQZXJmb3JjZS4KKworICogImdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIiBvZnRlbiBtYWRlIGEgaGFyZC10by1qdXN0aWZ5IGNob2ljZSBvZgorICAgdGFnIHRvIG5hbWUgYSBnaXZlbiBjb21taXQsIGJlY2F1c2UgaXQgdHJpZWQgdG8gY29tZSB1cAorICAgd2l0aCBhIG5hbWUgd2l0aCBzbWFsbGVzdCBudW1iZXIgb2YgaG9wcyBmcm9tIGEgdGFnLCBjYXVzaW5nIGFuIG9sZAorICAgY29tbWl0IHdob3NlIGNsb3NlIGRlc2NlbmRhbnQgdGhhdCBpcyByZWNlbnRseSB0YWdnZWQgd2VyZSBub3QKKyAgIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gYW4gb2xkIHRhZyBidXQgd2l0aCBhIG5ld2VyIHRhZy4gIEl0IGRpZAorICAgbm90IGhlbHAgdGhhdCBpdHMgY29tcHV0YXRpb24gb2YgImhvcCIgY291bnQgd2FzIGZ1cnRoZXIgdHdlYWtlZCB0bworICAgcGVuYWxpemUgYmVpbmcgb24gYSBzaWRlIGJyYW5jaCBvZiBhIG1lcmdlLiAgVGhlIGxvZ2ljIGhhcyBiZWVuCisgICB1cGRhdGVkIHRvIGZhdm9yIHVzaW5nIHRoZSB0YWcgd2l0aCB0aGUgb2xkZXN0IHRhZ2dlciBkYXRlLCB3aGljaAorICAgaXMgYSBsb3QgZWFzaWVyIHRvIGV4cGxhaW4gdG8gdGhlIGVuZCB1c2VyczogIldlIGRlc2NyaWJlIGEgY29tbWl0CisgICBpbiB0ZXJtcyBvZiB0aGUgKGNocm9ub2xvZ2ljYWxseSkgb2xkZXN0IHRhZyB0aGF0IGNvbnRhaW5zIHRoZQorICAgY29tbWl0LiIKKworICogImdpdCBjbG9uZSIgbGVhcm5lZCB0aGUgIi0tc2hhbGxvdy1zdWJtb2R1bGVzIiBvcHRpb24uCisKKyAqIEhUVFAgdHJhbnNwb3J0IGNsaWVudHMgbGVhcm5lZCB0byB0aHJvdyBleHRyYSBIVFRQIGhlYWRlcnMgYXQgdGhlCisgICBzZXJ2ZXIsIHNwZWNpZmllZCB2aWEgaHR0cC5leHRyYUhlYWRlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiBUaGUgIi0tY29tcGFjdGlvbi1oZXVyaXN0aWMiIG9wdGlvbiB0byAiZ2l0IGRpZmYiIGZhbWlseSBvZgorICAgY29tbWFuZHMgZW5hYmxlcyBhIGhldXJpc3RpYyB0byBtYWtlIHRoZSBwYXRjaCBvdXRwdXQgbW9yZSByZWFkYWJsZQorICAgYnkgdXNpbmcgYSBibGFuayBsaW5lIGFzIGEgc3Ryb25nIGhpbnQgdGhhdCB0aGUgY29udGVudHMgYmVmb3JlIGFuZAorICAgYWZ0ZXIgaXQgYmVsb25nIHRvIGxvZ2ljYWxseSBzZXBhcmF0ZSB1bml0cy4gIEl0IGlzIHN0aWxsCisgICBleHBlcmltZW50YWwuCisKKyAqIEEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29yZS5ob29rc1BhdGggYWxsb3dzIGN1c3RvbWl6aW5nCisgICB3aGVyZSB0aGUgaG9vayBkaXJlY3RvcnkgaXMuCisKKyAqIEFuIGVhcmxpZXIgYWRkaXRpb24gb2YgInNhbml0aXplX3N1Ym1vZHVsZV9lbnYiIHdpdGggMTQxMTFmYzQgKGdpdDoKKyAgIHN1Ym1vZHVsZSBob25vciAtYyBjcmVkZW50aWFsLiogZnJvbSBjb21tYW5kIGxpbmUsIDIwMTYtMDItMjkpCisgICB0dXJuZWQgb3V0IHRvIGJlIGEgY29udm9sdXRlZCBuby1vcDsgaW1wbGVtZW50IHdoYXQgaXQgd2FudGVkIHRvIGRvCisgICBjb3JyZWN0bHksIGFuZCBzdG9wIGZpbHRlcmluZyBzZXR0aW5ncyBnaXZlbiB2aWEgImdpdCAtYyB2YXI9dmFsIi4KKworICogImdpdCBjb21taXQgLS1kcnktcnVuIiByZXBvcnRlZCAiTm8sIG5vLCB5b3UgY2Fubm90IGNvbW1pdC4iIGluIG9uZQorICAgY2FzZSB3aGVyZSAiZ2l0IGNvbW1pdCIgd291bGQgaGF2ZSBhbGxvd2VkIHlvdSB0byBjb21taXQsIGFuZCB0aGlzCisgICBpbXByb3ZlcyBpdCBhIGxpdHRsZSBiaXQgKCJnaXQgY29tbWl0IC0tZHJ5LXJ1biAtLXNob3J0IiBzdGlsbCBkb2VzCisgICBub3QgZ2l2ZSB5b3UgdGhlIGNvcnJlY3QgYW5zd2VyLCBmb3IgZXhhbXBsZSkuICBUaGlzIGlzIGEgc3RvcC1nYXAKKyAgIG1lYXN1cmUgaW4gdGhhdCAiY29tbWl0IC0tc2hvcnQgLS1kcnktcnVuIiBzdGlsbCBnaXZlcyBhbiBpbmNvcnJlY3QKKyAgIHJlc3VsdC4KKworICogVGhlIGV4cGVyaW1lbnRhbCAibXVsdGlwbGUgd29ya3RyZWUiIGZlYXR1cmUgZ2FpbnMgbW9yZSBzYWZldHkgdG8KKyAgIGZvcmJpZCBvcGVyYXRpb25zIG9uIGEgYnJhbmNoIHRoYXQgaXMgY2hlY2tlZCBvdXQgb3IgYmVpbmcgYWN0aXZlbHkKKyAgIHdvcmtlZCBvbiBlbHNld2hlcmUsIGJ5IG5vdGljaW5nIHRoYXQgZS5nLiBpdCBpcyBiZWluZyByZWJhc2VkLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCBhIG5ldyAiLS1iYXNlIiBvcHRpb24gdG8gcmVjb3JkIHdoYXQKKyAgIChwdWJsaWMsIHdlbGwta25vd24pIGNvbW1pdCB0aGUgb3JpZ2luYWwgc2VyaWVzIHdhcyBidWlsdCBvbiBpbgorICAgaXRzIG91dHB1dC4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgImNvbW1pdC52ZXJib3NlIgorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhbmQgYWN0IGFzIGlmIHRoZSAiLS12ZXJib3NlIiBvcHRpb24KKyAgIHdhcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKyAqIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBnaXZlcyBoaW50cyB0byBHTWFpbCB1c2VycyB3aXRoIHR3by1mYWN0b3IKKyAgIGF1dGggZW5hYmxlZCB0aGF0IHRoZXkgbmVlZCBhcHAtc3BlY2lmaWMtcGFzc3dvcmQgd2hlbiB1c2luZworICAgImdpdCBzZW5kLWVtYWlsIi4KKworICogVGhlIG1hbnBhZ2Ugb3V0cHV0IG9mIG91ciBkb2N1bWVudGF0aW9uIGRpZCBub3QgcmVuZGVyIHdlbGwgaW4KKyAgIHRlcm1pbmFsOyB0eXBlc2V0IGxpdGVyYWxzIGluIGJvbGQgYnkgZGVmYXVsdCB0byBtYWtlIHRoZW0gc3RhbmQKKyAgIG91dCBtb3JlLgorCisgKiBUaGUgbWFyay11cCBpbiB0aGUgdG9wLWxldmVsIFJFQURNRS5tZCBmaWxlIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIHR5cGVzZXQgQ0xJIGNvbW1hbmQgbmFtZXMgZGlmZmVyZW50bHkgZnJvbSB0aGUgYm9keSB0ZXh0LgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFRoZSBlbWJlZGRlZCBhcmdzIGFyZ3YtYXJyYXkgaW4gdGhlIGNoaWxkIHByb2Nlc3MgaXMgdXNlZCB0byBidWlsZAorICAgdGhlIGNvbW1hbmQgbGluZSB0byBydW4gcGFjay1vYmplY3RzIGluc3RlYWQgb2YgdXNpbmcgYSBzZXBhcmF0ZQorICAgYXJyYXkgb2Ygc3RyaW5ncy4KKworICogQSB0ZXN0IGZvciB0YWdzIGhhcyBiZWVuIHJlc3RydWN0dXJlZCBzbyB0aGF0IG1vcmUgcGFydHMgb2YgaXQgY2FuCisgICBlYXNpbHkgYmUgcnVuIG9uIGEgcGxhdGZvcm0gd2l0aG91dCBhIHdvcmtpbmcgR251UEcuCisKKyAqIFRoZSBzdGFydHVwX2luZm8gZGF0YSwgd2hpY2ggcmVjb3JkcyBpZiB3ZSBhcmUgd29ya2luZyBpbnNpZGUgYQorICAgcmVwb3NpdG9yeSAoYW1vbmcgb3RoZXIgdGhpbmdzKSwgYXJlIG5vdyB1bmlmb3JtbHkgYXZhaWxhYmxlIHRvIEdpdAorICAgc3ViY29tbWFuZCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBHaXQgYXZvaWRzIGF0dGVtcHRpbmcgdG8gdG91Y2gKKyAgIHJlZmVyZW5jZXMgd2hlbiB3ZSBhcmUgbm90IGluIGEgcmVwb3NpdG9yeS4KKworICogVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBwYXJzZXIgZm9yICJyZWNlaXZlLXBhY2siIGhhcyBiZWVuCisgICByZXdyaXR0ZW4gdG8gdXNlIHBhcnNlLW9wdGlvbnMuCisKKyAqIEEgbWFqb3IgcGFydCBvZiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGhhcyBiZWVuIHBvcnRlZCB0byBDIHRvIHRha2UKKyAgIGFkdmFudGFnZSBvZiB0aGUgcmVjZW50bHkgYWRkZWQgZnJhbWV3b3JrIHRvIHJ1biBkb3dubG9hZCB0YXNrcyBpbgorICAgcGFyYWxsZWwuICBPdGhlciB1cGRhdGVzIHRvICJnaXQgc3VibW9kdWxlIiB0aGF0IG1vdmUgcGllY2VzIG9mCisgICBsb2dpYyB0byBDIGNvbnRpbnVlcy4KKworICogUmVuYW1lIGJ1bmNoIG9mIHRlc3RzIG9uICJnaXQgY2xvbmUiIGZvciBiZXR0ZXIgb3JnYW5pemF0aW9uLgorCisgKiBUaGUgdGVzdHMgdGhhdCBpbnZvbHZlIHJ1bm5pbmcgaHR0cGQgbGVha2VkIHRoZSBzeXN0ZW0td2lkZQorICAgY29uZmlndXJhdGlvbiBpbiAvZXRjL2dpdGNvbmZpZyB0byB0aGUgdGVzdGVkIGVudmlyb25tZW50LgorCisgKiBCdWlsZCB1cGRhdGVzIGZvciBNU1ZDLgorCisgKiBUaGUgcmVwb3NpdG9yeSBzZXQtdXAgc2VxdWVuY2UgaGFzIGJlZW4gc3RyZWFtbGluZWQgKHRoZSBiaWdnZXN0CisgICBjaGFuZ2UgaXMgdGhhdCB0aGVyZSBpcyBubyBsb25nZXIgZ2l0X2NvbmZpZ19lYXJseSgpKSwgc28gdGhhdCB3ZQorICAgZG8gbm90IGF0dGVtcHQgdG8gbG9vayBpbnRvIHJlZnMvKiB3aGVuIHdlIGtub3cgd2UgZG8gbm90IGhhdmUgYQorICAgR2l0IHJlcG9zaXRvcnkuCisKKyAqIENvZGUgcmVzdHJ1Y3R1cmluZyBhcm91bmQgdGhlICJyZWZzIiBBUEkgdG8gcHJlcGFyZSBmb3IgcGx1Z2dhYmxlCisgICByZWZzIGJhY2tlbmRzLgorCisgKiBTb3VyY2VzIHRvIG1hbnkgdGVzdCBoZWxwZXIgYmluYXJpZXMgYW5kIHRoZSBnZW5lcmF0ZWQgaGVscGVycworICAgaGF2ZSBiZWVuIG1vdmVkIHRvIHQvaGVscGVyLyBzdWJkaXJlY3RvcnkgdG8gcmVkdWNlIGNsdXR0ZXIgYXQgdGhlCisgICB0b3AgbGV2ZWwgb2YgdGhlIHRyZWUuCisKKyAqIFVuaWZ5IGludGVybmFsIGxvZ2ljIGJldHdlZW4gImdpdCB0YWcgLXYiIGFuZCAiZ2l0IHZlcmlmeS10YWciCisgICBjb21tYW5kcyBieSBtYWtpbmcgb25lIGRpcmVjdGx5IGNhbGwgaW50byB0aGUgb3RoZXIuCisKKyAqICJtZXJnZS1yZWN1cnNpdmUiIHN0cmF0ZWd5IGluY29ycmVjdGx5IGNoZWNrZWQgaWYgYSBwYXRoIHRoYXQgaXMKKyAgIGludm9sdmVkIGluIGl0cyBpbnRlcm5hbCBtZXJnZSBleGlzdHMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworICogVGhlIHRlc3Qgc2NyaXB0cyBmb3IgImdpdCBwNCIgKGJ1dCBub3QgImdpdCBwNCIgaW1wbGVtZW50YXRpb24KKyAgIGl0c2VsZikgaGFzIGJlZW4gdXBkYXRlZCBzbyB0aGF0IHRoZXkgd291bGQgd29yayBldmVuIG9uIGEgc3lzdGVtCisgICB3aGVyZSB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUHl0aG9uIGlzIHB5dGhvbiAzLgorCisgKiBBcyBub2JvZHkgbWFpbnRhaW5zIG91ciBpbi10cmVlIGdpdC5zcGVjLmluIGFuZCBkaXN0cm9zIHVzZSB0aGVpcgorICAgb3duIHNwZWMgZmlsZSwgd2Ugc3RvcHBlZCBwcmV0ZW5kaW5nIHRoYXQgd2Ugc3VwcG9ydCAibWFrZSBycG0iLgorCisgKiBNb3ZlIGZyb20gInVuc2lnbmVkIGNoYXJbMjBdIiB0byAic3RydWN0IG9iamVjdF9pZCIgY29udGludWVzLgorCisgKiBUaGUgY29kZSBmb3Igd2FybmluZ19lcnJuby9kaWVfZXJybm8gaGFzIGJlZW4gcmVmYWN0b3JlZCBhbmQgYSBuZXcKKyAgIGVycm9yX2Vycm5vKCkgcmVwb3J0aW5nIGhlbHBlciBpcyBpbnRyb2R1Y2VkLgorICAgKG1lcmdlIDFkYTA0NWYgbmQvZXJyb3ItZXJybm8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSdW5uaW5nIHRlc3RzIHdpdGggJy14JyBvcHRpb24gdG8gdHJhY2UgdGhlIGluZGl2aWR1YWwgY29tbWFuZAorICAgZXhlY3V0aW9ucyBpcyBhIHVzZWZ1bCB3YXkgdG8gZGVidWcgdGVzdCBzY3JpcHRzLCBidXQgc29tZSB0ZXN0cworICAgdGhhdCBjYXB0dXJlIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gYW5kIGNoZWNrIHdoYXQgdGhlIGNvbW1hbmQKKyAgIHNhaWQgY2FuIGJlIGJyb2tlbiB3aXRoIHRoZSB0cmFjZSBvdXRwdXQgbWl4ZWQgaW4uICBXaGVuIHJ1bm5pbmcKKyAgIG91ciB0ZXN0cyB1bmRlciAiYmFzaCIsIGhvd2V2ZXIsIHdlIGNhbiByZWRpcmVjdCB0aGUgdHJhY2Ugb3V0cHV0CisgICB0byBhbm90aGVyIGZpbGUgZGVzY3JpcHRvciB0byBrZWVwIHRoZSBzdGFuZGFyZCBlcnJvciBvZiBwcm9ncmFtcworICAgYmVpbmcgdGVzdGVkIGludGFjdC4KKworICogdDAwNDAgaGFkIHRvbyBtYW55IHVubmVjZXNzYXJ5IHJlcGV0aXRpb25zIGluIGl0cyB0ZXN0IGRhdGEuICBUZWFjaAorICAgdGVzdC1wYXJzZS1vcHRpb25zIHByb2dyYW0gc28gdGhhdCBhIGNhbGxlciBjYW4gdGVsbCB3aGF0IGl0CisgICBleHBlY3RzIGluIGl0cyBvdXRwdXQsIHNvIHRoYXQgdGhlc2UgcmVwZXRpdGlvbnMgY2FuIGJlIGNsZWFuZWQgdXAuCisKKyAqIEFkZCBwZXJmIHRlc3QgZm9yICJyZWJhc2UgLWkiLgorCisgKiBDb21tb24gbWlzdGFrZXMgd2hlbiB3cml0aW5nIGdpdGxpbms6IGluIG91ciBkb2N1bWVudGF0aW9uIGFyZQorICAgZm91bmQgYnkgIm1ha2UgY2hlY2stZG9jcyIuCisKKyAqIHQ5eHh4IHNlcmllcyBoYXMgYmVlbiB1cGRhdGVkIHByaW1hcmlseSBmb3IgcmVhZGFiaWxpdHksIHdoaWxlCisgICBmaXhpbmcgc21hbGwgYnVncyBpbiBpdC4gIEEgZmV3IHNjcmlwdGVkIFBvcmNlbGFpbiBjb21tYW5kcyBoYXZlCisgICBhbHNvIGJlZW4gdXBkYXRlZCB0byBmaXggcG9zc2libGUgYnVncyBhcm91bmQgdGhlaXIgdXNlIG9mCisgICAidGVzdCAteiIgYW5kICJ0ZXN0IC1uIi4KKworICogQ0kgdGVzdCB3YXMgdGF1Z2h0IHRvIHJ1biBnaXQtc3ZuIHRlc3RzLgorCisgKiAiZ2l0IGNhdC1maWxlIC0tYmF0Y2gtYWxsIiBoYXMgYmVlbiBzcGVkIHVwLCBieSB0YWtpbmcgYWR2YW50YWdlCisgICBvZiB0aGUgZmFjdCB0aGF0IGl0IGRvZXMgbm90IGhhdmUgdG8gcmVhZCBhIGxpc3Qgb2Ygb2JqZWN0cywgaW4gdHdvCisgICB3YXlzLgorCisgKiB0ZXN0IHVwZGF0ZXMgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlIGFuZCBtYWludGFpbmFibGUuCisgICAobWVyZ2UgZTYyNzNmNCBlcy90MTUwMC1tb2Rlcm5pemUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAibWFrZSBERVZFTE9QRVI9MSIgd29ya2VkIGFzIGV4cGVjdGVkOyBzZXR0aW5nIERFVkVMT1BFUj0xIGluCisgICBjb25maWcubWFrIGRpZG4ndC4KKyAgIChtZXJnZSA1MWRkM2U4IG1tL21ha2VmaWxlLWRldmVsb3Blci1jYW4tYmUtaW4tY29uZmlnLW1hayBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB3YXkgaG93ICJzdWJtb2R1bGUtLWhlbHBlciBsaXN0IiBzaWduYWxzIHVubWF0Y2ggZXJyb3IgdG8gaXRzCisgICBjYWxsZXJzIGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIEEgYmFzaC1pc20gImxvY2FsIiBoYXMgYmVlbiByZW1vdmVkIGZyb20gImdpdCBzdWJtb2R1bGUiIHNjcmlwdGVkCisgICBQb3JjZWxhaW4uCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuOAorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjggaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogImdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2giLCB1bmxpa2Ugb3RoZXIgdmFyaWFudHMgb2YgdGhlICJnaXQKKyAgIGNvbmZpZyAtLWdldCIgZmFtaWx5LCBkaWQgbm90IHNpZ25hbCBlcnJvciB3aXRoIGl0cyBleGl0IHN0YXR1cworICAgd2hlbiB0aGVyZSB3YXMgbm8gbWF0Y2hpbmcgY29uZmlndXJhdGlvbi4KKworICogVGhlICItLWxvY2FsLWVudi12YXJzIiBhbmQgIi0tcmVzb2x2ZS1naXQtZGlyIiBvcHRpb25zIG9mICJnaXQKKyAgIHJldi1wYXJzZSIgZmFpbGVkIHRvIHdvcmsgb3V0c2lkZSBhIHJlcG9zaXRvcnkgd2hlbiB0aGUgY29tbWFuZCdzCisgICBvcHRpb24gcGFyc2luZyB3YXMgcmV3cml0dGVuIGluIDEuOC41IGVyYS4KKworICogImdpdCBpbmRleC1wYWNrIC0ta2VlcFs9PG1zZz5dIHBhY2stJG5hbWUucGFjayIgc2ltcGx5IGRpZCBub3Qgd29yay4KKworICogRmV0Y2hpbmcgb2YgaGlzdG9yeSBieSBuYW1pbmcgYSBjb21taXQgb2JqZWN0IG5hbWUgZGlyZWN0bHkgZGlkbid0CisgICB3b3JrIGFjcm9zcyByZW1vdGUtY3VybCB0cmFuc3BvcnQuCisKKyAqIEEgc21hbGwgbWVtb3J5IGxlYWsgaW4gYW4gZXJyb3IgY29kZXBhdGggaGFzIGJlZW4gcGx1Z2dlZCBpbiB4ZGlmZgorICAgY29kZS4KKworICogc3RyYnVmX2dldHdob2xlbGluZSgpIGRpZCBub3QgTlVMLXRlcm1pbmF0ZSB0aGUgYnVmZmVyIG9uIGNlcnRhaW4KKyAgIGNvcm5lciBjYXNlcyBpbiBpdHMgZXJyb3IgY29kZXBhdGguCisKKyAqICJnaXQgbWVyZ2V0b29sIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIGNvbmZsaWN0cyB0aGF0IGJvdGggc2lkZXMKKyAgIGRlbGV0ZWQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgaGFkIHRyb3VibGUgcGFyc2luZyBhbGlhcyBmaWxlIGluIG1haWxyYyBmb3JtYXQKKyAgIHdoZW4gbGluZXMgaW4gaXQgaGFkIHRyYWlsaW5nIHdoaXRlc3BhY2VzIG9uIHRoZW0uCisKKyAqIFdoZW4gImdpdCBtZXJnZSAtLXNxdWFzaCIgc3RvcHBlZCBkdWUgdG8gY29uZmxpY3QsIHRoZSBjb25jbHVkaW5nCisgICAiZ2l0IGNvbW1pdCIgZmFpbGVkIHRvIHJlYWQgaW4gdGhlIFNRVUFTSF9NU0cgdGhhdCBzaG93cyB0aGUgbG9nCisgICBtZXNzYWdlcyBmcm9tIGFsbCB0aGUgc3F1YXNoZWQgY29tbWl0cy4KKworICogImdpdCBtZXJnZSBGRVRDSF9IRUFEIiBkZXJlZmVyZW5jZWQgTlVMTCBwb2ludGVyIHdoZW4gbWVyZ2luZworICAgbm90aGluZyBpbnRvIGFuIHVuYm9ybiBoaXN0b3J5ICh3aGljaCBpcyBhcmd1YWJseSB1bnVzdWFsIHVzYWdlLAorICAgd2hpY2ggcGVyaGFwcyB3YXMgdGhlIHJlYXNvbiB3aHkgbm9ib2R5IG5vdGljZWQgaXQpLgorCisgKiBXaGVuICJnaXQgd29ya3RyZWUiIGZlYXR1cmUgaXMgaW4gdXNlLCAiZ2l0IGJyYW5jaCAtZCIgYWxsb3dlZAorICAgZGVsZXRpb24gb2YgYSBicmFuY2ggdGhhdCBpcyBjaGVja2VkIG91dCBpbiBhbm90aGVyIHdvcmt0cmVlLAorICAgd2hpY2ggd2FzIHdyb25nLgorCisgKiBXaGVuICJnaXQgd29ya3RyZWUiIGZlYXR1cmUgaXMgaW4gdXNlLCAiZ2l0IGJyYW5jaCAtbSIgcmVuYW1lZCBhCisgICBicmFuY2ggdGhhdCBpcyBjaGVja2VkIG91dCBpbiBhbm90aGVyIHdvcmt0cmVlIHdpdGhvdXQgYWRqdXN0aW5nCisgICB0aGUgSEVBRCBzeW1ib2xpYyByZWYgZm9yIHRoZSB3b3JrdHJlZS4KKworICogImdpdCBkaWZmIC1NIiB1c2VkIHRvIHdvcmsgYmV0dGVyIHdoZW4gdHdvIG9yaWdpbmFsbHkgaWRlbnRpY2FsCisgICBmaWxlcyBBIGFuZCBCIGdvdCByZW5hbWVkIHRvIFgvQSBhbmQgWC9CIGJ5IHBhaXJpbmcgQSB0byBYL0EgYW5kIEIKKyAgIHRvIFgvQiwgYnV0IHRoaXMgd2FzIGJyb2tlbiBpbiB0aGUgMi4wIHRpbWVmcmFtZS4KKworICogImdpdCBzZW5kLXBhY2sgLS1hbGwgPHRoZXJlPiIgd2FzIGJyb2tlbiB3aGVuIGl0cyBjb21tYW5kIGxpbmUKKyAgIG9wdGlvbiBwYXJzaW5nIHdhcyB3cml0dGVuIGluIHRoZSAyLjYgdGltZWZyYW1lLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWhlbHAiIHNob3dlZCBgLXNgIGFuZCBgLS1uby1wYXRjaGAgYXMgaWYgdGhlc2UKKyAgIGFyZSB2YWxpZCBvcHRpb25zIHRvIHRoZSBjb21tYW5kLiAgV2UgYWxyZWFkeSBoaWRlIGAtLXBhdGNoYCBvcHRpb24KKyAgIGZyb20gdGhlIGRvY3VtZW50YXRpb24sIGJlY2F1c2UgZm9ybWF0LXBhdGNoIGlzIGFib3V0IHNob3dpbmcgdGhlCisgICBkaWZmLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gbm93IGhpZGVzIHRoZXNlIG9wdGlvbnMgYXMgd2VsbC4KKworICogV2hlbiBydW5uaW5nICJnaXQgYmxhbWUgJHBhdGgiIHdpdGggdW5ub3JtYWxpemVkIGRhdGEgaW4gdGhlIGluZGV4CisgICBmb3IgdGhlIHBhdGgsIHRoZSBkYXRhIGluIHRoZSB3b3JraW5nIHRyZWUgd2FzIGJsYW1lZCwgZXZlbiB0aG91Z2gKKyAgICJnaXQgYWRkIiB3b3VsZCBub3QgaGF2ZSBjaGFuZ2VkIHdoYXQgaXMgYWxyZWFkeSBpbiB0aGUgaW5kZXgsIGR1ZQorICAgdG8gInNhZmUgY3JsZiIgdGhhdCBkaXNhYmxlcyB0aGUgbGluZS1lbmQgY29udmVyc2lvbi4gIEl0IGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIEEgY2hhbmdlIGJhY2sgaW4gdmVyc2lvbiAyLjcgdG8gImdpdCBicmFuY2giIGJyb2tlIGRpc3BsYXkgb2YgYQorICAgc3ltYm9saWMgcmVmIGluIGEgbm9uLXN0YW5kYXJkIHBsYWNlIGluIHRoZSByZWZzLyBoaWVyYXJjaHkgKHdlCisgICBleHBlY3Qgc3ltYm9saWMgcmVmcyB0byBhcHBlYXIgaW4gcmVmcy9yZW1vdGVzLyovSEVBRCB0byBwb2ludCBhdAorICAgdGhlIHByaW1hcnkgYnJhbmNoIHRoZSByZW1vdGUgaGFzLCBhbmQgYXMgLmdpdC9IRUFEIHRvIHBvaW50IGF0IHRoZQorICAgYnJhbmNoIHdlIGxvY2FsbHkgY2hlY2tlZCBvdXQpLgorCisgKiBBIHBhcnRpYWwgcmV3cml0ZSBvZiAiZ2l0IHN1Ym1vZHVsZSIgaW4gdGhlIDIuNyB0aW1lZnJhbWUgY2hhbmdlZAorICAgdGhlIHdheSB0aGUgZ2l0ZGlyOiBwb2ludGVyIGluIHRoZSBzdWJtb2R1bGVzIHBvaW50IGF0IHRoZSByZWFsCisgICByZXBvc2l0b3J5IGxvY2F0aW9uIHRvIHVzZSBhYnNvbHV0ZSBwYXRocyBieSBhY2NpZGVudC4gIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBjb21taXQiIG1pc2JlaGF2ZWQgaW4gYSBmZXcgbWlub3Igd2F5cyB3aGVuIGFuIGVtcHR5IG1lc3NhZ2UKKyAgIGlzIGdpdmVuIHZpYSAtbSAnJywgYWxsIG9mIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogU3VwcG9ydCBmb3IgQ1JBTS1NRDUgYXV0aGVudGljYXRpb24gbWV0aG9kIGluICJnaXQgaW1hcC1zZW5kIiBkaWQKKyAgIG5vdCB3b3JrIHdlbGwuCisKKyAqIFVwY29taW5nIE9wZW5TU0wgMS4xLjAgd2lsbCBicmVhayBjb21waWxhdGlvbiBieSB1cGRhdGluZyBhIGZldyBBUEkKKyAgIGVsZW1lbnRzIHdlIHVzZSBpbiBpbWFwLXNlbmQsIHdoaWNoIGhhcyBiZWVuIGFkanVzdGVkIGZvciB0aGUgY2hhbmdlLgorCisgKiBUaGUgc29ja3M1Oi8vIHByb3h5IHN1cHBvcnQgYWRkZWQgYmFjayBpbiAyLjYuNCBkYXlzIHdhcyBub3QgYXdhcmUKKyAgIHRoYXQgc29ja3M1aDovLyBwcm94aWVzIGJlaGF2ZSBkaWZmZXJlbnRseSBmcm9tIHNvY2tzNTovLyBwcm94aWVzLgorCisgKiAiZ2l0IGNvbmZpZyIgaGFkIGEgY29kZXBhdGggdGhhdCB0cmllZCB0byBwYXNzIGEgTlVMTCB0bworICAgcHJpbnRmKCIlcyIpLCB3aGljaCBub2JvZHkgc2VlbXMgdG8gaGF2ZSBub3RpY2VkLgorCisgKiBPbiBDeWd3aW4sIG9iamVjdCBjcmVhdGlvbiB1c2VzIHRoZSAiY3JlYXRlIGEgdGVtcG9yYXJ5IGFuZCB0aGVuCisgICByZW5hbWUgaXQgdG8gdGhlIGZpbmFsIG5hbWUiIHBhdHRlcm4sIG5vdCAiY3JlYXRlIGEgdGVtcG9yYXJ5LAorICAgaGFyZGxpbmsgaXQgdG8gdGhlIGZpbmFsIG5hbWUgYW5kIHRoZW4gdW5saW5rIHRoZSB0ZW1wb3JhcnkiCisgICBwYXR0ZXJuLgorCisgICBUaGlzIGlzIG5lY2Vzc2FyeSB0byB1c2UgR2l0IG9uIFdpbmRvd3Mgc2hhcmVkIGRpcmVjdG9yaWVzLCBhbmQgaXMKKyAgIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhlIE1pbkdXIGFuZCBwbGFpbiBXaW5kb3dzIGJ1aWxkcy4gIEl0IGFsc28KKyAgIGhhcyBiZWVuIHVzZWQgaW4gQ3lnd2luIHBhY2thZ2VkIHZlcnNpb25zIG9mIEdpdCBmb3IgcXVpdGUgYSB3aGlsZS4KKyAgIFNlZSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNjA0MTkwOTEwNTUuR0YyMzQ1QGRpbndvb2RpZS5vcmcvCisKKyAqICJtZXJnZS1vY3RvcHVzIiBzdHJhdGVneSBkaWQgbm90IGVuc3VyZSB0aGF0IHRoZSBpbmRleCBpcyBjbGVhbgorICAgd2hlbiBtZXJnZSBiZWdpbnMuCisKKyAqIFdoZW4gImdpdCBtZXJnZSIgbm90aWNlcyB0aGF0IHRoZSBtZXJnZSBjYW4gYmUgcmVzb2x2ZWQgcHVyZWx5IGF0CisgICB0aGUgdHJlZSBsZXZlbCAod2l0aG91dCBoYXZpbmcgdG8gbWVyZ2UgYmxvYnMpIGFuZCB0aGUgcmVzdWx0aW5nCisgICB0cmVlIGhhcHBlbnMgdG8gYWxyZWFkeSBleGlzdCBpbiB0aGUgb2JqZWN0IHN0b3JlLCBpdCBmb3Jnb3QgdG8KKyAgIHVwZGF0ZSB0aGUgaW5kZXgsIHdoaWNoIGxlZnQgYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRoYXQgd291bGQKKyAgIGJyZWFrIGxhdGVyIG9wZXJhdGlvbnMuCisKKyAqICJnaXQgc3VibW9kdWxlIiByZXBvcnRzIHRoZSBwYXRocyBvZiBzdWJtb2R1bGVzIHRoZSBjb21tYW5kCisgICByZWN1cnNlcyBpbnRvLCBidXQgdGhlc2UgcGF0aHMgd2VyZSBpbmNvcnJlY3RseSByZXBvcnRlZCB3aGVuCisgICB0aGUgY29tbWFuZCB3YXMgbm90IHJ1biBmcm9tIHRoZSByb290IGxldmVsIG9mIHRoZSBzdXBlcnByb2plY3QuCisKKyAqIFRoZSAidXNlci51c2VDb25maWdPbmx5IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG1ha2VzIGl0IGFuIGVycm9yCisgICBpZiB1c2VycyBkbyBub3QgZXhwbGljaXRseSBzZXQgdXNlci5uYW1lIGFuZCB1c2VyLmVtYWlsLiAgSG93ZXZlciwKKyAgIGl0cyBjaGVjayB3YXMgbm90IGRvbmUgZWFybHkgZW5vdWdoIGFuZCBhbGxvd2VkIGFub3RoZXIgZXJyb3IgdG8KKyAgIHRyaWdnZXIsIHJlcG9ydGluZyB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIHdlIGd1ZXNzZWQgZnJvbSB0aGUKKyAgIHN5c3RlbSBzZXR0aW5nIHdhcyB1bnVzYWJsZS4gIFRoaXMgd2FzIGEgc3Vib3B0aW1hbCBlbmQtdXNlcgorICAgZXhwZXJpZW5jZSBhcyB3ZSB3YW50IHRoZSB1c2VycyB0byBzZXQgdXNlci5uYW1lL3VzZXIuZW1haWwgd2l0aG91dAorICAgcmVseWluZyBvbiB0aGUgYXV0by1kZXRlY3Rpb24gYXQgYWxsLgorCisgKiAiZ2l0IG12IG9sZCBuZXciIGRpZCBub3QgYWRqdXN0IHRoZSBwYXRoIGZvciBhIHN1Ym1vZHVsZSB0aGF0IGxpdmVzCisgICBhcyBhIHN1YmRpcmVjdG9yeSBpbnNpZGUgb2xkLyBkaXJlY3RvcnkgY29ycmVjdGx5LgorCisgKiAiZ2l0IHJlcGxhY2UgLWUiIGRpZCBub3QgaG9ub3VyICJjb3JlLmVkaXRvciIgY29uZmlndXJhdGlvbi4KKworICogImdpdCBwdXNoIiBmcm9tIGEgY29ycnVwdCByZXBvc2l0b3J5IHRoYXQgYXR0ZW1wdHMgdG8gcHVzaCBhIGxhcmdlCisgICBudW1iZXIgb2YgcmVmcyBkZWFkbG9ja2VkOyB0aGUgdGhyZWFkIHRvIHJlbGF5IHJlamVjdGlvbiBub3RpY2VzCisgICBmb3IgdGhlc2UgcmVmIHVwZGF0ZXMgYmxvY2tlZCBvbiB3cml0aW5nIHRoZW0gdG8gdGhlIG1haW4gdGhyZWFkLAorICAgYWZ0ZXIgdGhlIG1haW4gdGhyZWFkIGF0IHRoZSByZWNlaXZpbmcgZW5kIG5vdGljZXMgdGhhdCB0aGUgcHVzaAorICAgZmFpbGVkIGFuZCBkZWNpZGVzIG5vdCB0byByZWFkIHRoZXNlIG5vdGljZXMgYW5kIHJldHVybiBhIGZhaWx1cmUuCisKKyAqIG1tYXAgZW11bGF0aW9uIG9uIFdpbmRvd3MgaGFzIGJlZW4gb3B0aW1pemVkIGFuZCB3b3JrIGJldHRlciB3aXRob3V0CisgICBjb25zdW1pbmcgcGFnaW5nIHN0b3JlIHdoZW4gbm90IG5lZWRlZC4KKworICogQSBxdWVzdGlvbiBieSAiZ2l0IHNlbmQtZW1haWwiIHRvIGFzayB0aGUgaWRlbnRpdHkgb2YgdGhlIHNlbmRlcgorICAgaGFzIGJlZW4gdXBkYXRlZC4KKworICogVUkgY29uc2lzdGVuY3kgaW1wcm92ZW1lbnRzIGZvciAiZ2l0IG1lcmdldG9vbCIuCisKKyAqICJnaXQgcmViYXNlIC1tIiBjb3VsZCBiZSBhc2tlZCB0byByZWJhc2UgYW4gZW50aXJlIGJyYW5jaCBzdGFydGluZworICAgZnJvbSB0aGUgcm9vdCwgYnV0IGZhaWxlZCBieSBhc3N1bWluZyB0aGF0IHRoZXJlIGFsd2F5cyBpcyBhIHBhcmVudAorICAgY29tbWl0IHRvIHRoZSBmaXJzdCBjb21taXQgb24gdGhlIGJyYW5jaC4KKworICogRml4IGEgYnJva2VuICJwNCBsZnMiIHRlc3QuCisKKyAqIFJlY2VudCB1cGRhdGUgdG8gR2l0IExGUyBicm9rZSAiZ2l0IHA0IiBieSBjaGFuZ2luZyB0aGUgb3V0cHV0IGZyb20KKyAgIGl0cyAibGZzIHBvaW50ZXIiIHN1YmNvbW1hbmQuCisKKyAqICJnaXQgZmV0Y2giIHRlc3QgdDU1MTAgd2FzIGZsYWt5IHdoaWxlIHJ1bm5pbmcgYSAoZm9yY2VkKSBhdXRvbWFnaWMKKyAgIGdhcmJhZ2UgY29sbGVjdGlvbi4KKworICogRG9jdW1lbnRhdGlvbiB1cGRhdGVzIHRvIGhlbHAgY29udHJpYnV0b3JzIHNldHRpbmcgdXAgVHJhdmlzIENJCisgICB0ZXN0IGZvciB0aGVpciBwYXRjaGVzLgorCisgKiBTb21lIG11bHRpLWJ5dGUgZW5jb2RpbmcgY2FuIGhhdmUgYSBiYWNrc2xhc2ggYnl0ZSBhcyBhIGxhdGVyIHBhcnQKKyAgIG9mIG9uZSBsZXR0ZXIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgImhpZ2hsaWdodCIgZmlsdGVyIHVzZWQgaW4KKyAgIGdpdHdlYi4KKworICogImdpdCBjb21taXQtdHJlZSIgcGx1bWJpbmcgY29tbWFuZCByZXF1aXJlZCB0aGUgdXNlciB0byBhbHdheXMgc2lnbgorICAgaXRzIHJlc3VsdCB3aGVuIHRoZSB1c2VyIHNldHMgdGhlIGNvbW1pdC5ncGdzaWduIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlLCB3aGljaCB3YXMgYW4gYW5jaWVudCBtaXN0YWtlLiAgUmV3b3JrICJnaXQgcmViYXNlIiB0aGF0CisgICByZWxpZWQgb24gdGhpcyBtaXN0YWtlIHNvIHRoYXQgaXQgcmVhZHMgY29tbWl0LmdwZ3NpZ24gYW5kIHBhc3MgKG9yCisgICBub3QgcGFzcykgdGhlIC1TIG9wdGlvbiB0byAiZ2l0IGNvbW1pdC10cmVlIiB0byBrZWVwIHRoZSBlbmQtdXNlcgorICAgZXhwZWN0YXRpb24gdGhlIHNhbWUsIHdoaWxlIHRlYWNoaW5nICJnaXQgY29tbWl0LXRyZWUiIHRvIGlnbm9yZQorICAgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBUaGlzIHdpbGwgc3RvcCByZXF1aXJpbmcgdGhlIHVzZXJzIHRvCisgICBzaWduIGNvbW1pdCBvYmplY3RzIHVzZWQgaW50ZXJuYWxseSBhcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YKKyAgICJnaXQgc3Rhc2giLgorCisgKiAiaHR0cC5jb29raWVGaWxlIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNsZWFybHkgd2FudHMgYSBwYXRobmFtZSwKKyAgIGJ1dCB3ZSBmb3Jnb3QgdG8gdHJlYXQgaXQgYXMgc3VjaCBieSBlLmcuIGFwcGx5aW5nIHRpbGRlIGV4cGFuc2lvbi4KKworICogQ29uc29saWRhdGUgZGVzY3JpcHRpb24gb2YgdGlsZGUtZXhwYW5zaW9uIHRoYXQgaXMgZG9uZSB0bworICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCB0YWtlIHBhdGhuYW1lIHRvIGEgc2luZ2xlIHBsYWNlLgorCisgKiBDb3JyZWN0IGZhdWx0eSByZWNvbW1lbmRhdGlvbiB0byB1c2UgImdpdCBzdWJtb2R1bGUgZGVpbml0IC4iIHdoZW4KKyAgIGRlLWluaXRpYWxpc2luZyBhbGwgc3VibW9kdWxlcywgd2hpY2ggd291bGQgcmVzdWx0IGluIGEgc3RyYW5nZQorICAgZXJyb3IgbWVzc2FnZSBpbiBhIHBhdGhvbG9naWNhbCBjb3JuZXIgY2FzZS4KKworICogTWFueSAnbGlua2dpdDo8Z2l0IGRvY3VtZW50YXRpb24gcGFnZT4nIHJlZmVyZW5jZXMgd2VyZSBicm9rZW4sCisgICB3aGljaCBhcmUgYWxsIGZpeGVkIHdpdGggdGhpcy4KKworICogImdpdCByZXJlcmUiIGNhbiBnZXQgY29uZnVzZWQgYnkgY29uZmxpY3QgbWFya2VycyBkZWxpYmVyYXRlbHkgbGVmdAorICAgYnkgdGhlIGlubmVyIG1lcmdlIHN0ZXAsIGJlY2F1c2UgdGhleSBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbQorICAgdGhlIHJlYWwgY29uZmxpY3QgbWFya2VycyBsZWZ0IGJ5IHRoZSBvdXRlcm1vc3QgbWVyZ2Ugd2hpY2ggYXJlCisgICB3aGF0IHRoZSBlbmQgdXNlciBhbmQgInJlcmVyZSIgbmVlZCB0byBsb29rIGF0LiAgVGhpcyB3YXMgZml4ZWQgYnkKKyAgIG1ha2luZyB0aGUgY29uZmxpY3QgbWFya2VycyBsZWZ0IGJ5IHRoZSBpbm5lciBtZXJnZXMgYSBiaXQgbG9uZ2VyLgorICAgKG1lcmdlIDBmOWZkNWMgamMvbGwtbWVyZ2UtaW50ZXJuYWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDSSB0ZXN0IHdhcyB0YXVnaHQgdG8gYnVpbGQgZG9jdW1lbnRhdGlvbiBwYWdlcy4KKworICogImdpdCBmc2NrIiBsZWFybmVkIHRvIGNhdGNoIE5VTCBieXRlIGluIGEgY29tbWl0IG9iamVjdCBhcworICAgcG90ZW50aWFsIGVycm9yIGFuZCB3YXJuLgorCisgKiBQb3J0YWJpbGl0eSBlbmhhbmNlbWVudCBmb3IgInJlYmFzZSAtaSIgdG8gaGVscCBwbGF0Zm9ybXMgd2hvc2UKKyAgIHNoZWxsIGRvZXMgbm90IGxpa2UgImZvciBpIGluIDxlbXB0eT4iICh3aGljaCBpcyBub3QgUE9TSVgta29zaGVyKS4KKworICogT24gV2luZG93cywgLmdpdCBhbmQgb3B0aW9uYWxseSBhbnkgZmlsZXMgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBhCisgICBkb3QgYXJlIG5vdyBtYXJrZWQgYXMgaGlkZGVuLCB3aXRoIGEgY29yZS5oaWRlRG90RmlsZXMga25vYiB0bworICAgY3VzdG9taXplIHRoaXMgYmVoYXZpb3VyLgorCisgKiBEb2N1bWVudGF0aW9uIGZvciAiZ2l0IG1lcmdlIC0tdmVyaWZ5LXNpZ25hdHVyZXMiIGhhcyBiZWVuIHVwZGF0ZWQKKyAgIHRvIGNsYXJpZnkgdGhhdCB0aGUgc2lnbmF0dXJlIG9mIG9ubHkgdGhlIGNvbW1pdCBhdCB0aGUgdGlwIGlzCisgICB2ZXJpZmllZC4gIEFsc28gdGhlIHBocmFzaW5nIHVzZWQgZm9yIHNpZ25hdHVyZSBhbmQga2V5IHZhbGlkaXR5IGlzCisgICBhZGp1c3RlZCB0byBhbGlnbiB3aXRoIHRoYXQgdXNlZCBieSBPcGVuUEdQLgorCisgKiBBIGNvdXBsZSBvZiBidWdzIGFyb3VuZCBjb3JlLmF1dG9jcmxmIGhhdmUgYmVlbiBmaXhlZC4KKworICogTWFueSBjb21tYW5kcyBub3JtYWxpemUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmcm9tIE5GRCB0byBORkMKKyAgIHZhcmlhbnQgb2YgVVRGLTggb24gT1NYLCBidXQgY29tbWFuZHMgaW4gdGhlICJkaWZmIiBmYW1pbHkgZGlkCisgICBub3QsIGNhdXNpbmcgImdpdCBkaWZmICRwYXRoIiB0byBjb21wbGFpbiB0aGF0IG5vIHN1Y2ggcGF0aCBpcworICAga25vd24gdG8gR2l0LiAgVGhleSBoYXZlIGJlZW4gdGF1Z2h0IHRvIGRvIHRoZSBub3JtYWxpemF0aW9uLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBsZWFybmVkIHRvIGhhbmRsZSB1bm1lcmdlZCBwYXRocyBjb3JyZWN0bHkgaW4KKyAgIGRpci1kaWZmIG1vZGUuCisKKyAqIFRoZSAiYXJlIHdlIHRhbGtpbmcgd2l0aCBUVFksIGRvaW5nIGFuIGludGVyYWN0aXZlIHNlc3Npb24/IgorICAgZGV0ZWN0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayBiZXR0ZXIgZm9yICJHaXQgZm9yIFdpbmRvd3MiLgorCisgKiBXZSBmb3Jnb3QgdG8gYWRkICJnaXQgbG9nIC0tZGVjb3JhdGU9YXV0byIgdG8gZG9jdW1lbnRhdGlvbiB3aGVuIHdlCisgICBhZGRlZCB0aGUgZmVhdHVyZSBiYWNrIGluIHYyLjEuMCB0aW1lZnJhbWUuCisgICAobWVyZ2UgNDYyY2JiNCByai9sb2ctZGVjb3JhdGUtYXV0byBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3MiIHdvdWxkIG92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgbWFya3MKKyAgIGZpbGUgZXZlbiB3aGVuIGl0IG1ha2VzIGEgZHVtcCBmcm9tIGl0cyBjdXN0b20gZGllIHJvdXRpbmUuCisgICBQcmV2ZW50IGl0IGZyb20gZG9pbmcgc28gd2hlbiB3ZSBoYXZlIGFuIGltcG9ydC1tYXJrcyBmaWxlIGJ1dAorICAgaGF2ZW4ndCBmaW5pc2hlZCByZWFkaW5nIGl0LgorICAgKG1lcmdlIGY0YmVlZDYgZmMvZmFzdC1pbXBvcnQtYnJva2VuLW1hcmtzLWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIsIGFmdGVyIGl0IGZhaWxzIHRvIGF1dG8tcmVzb2x2ZSB0aGUgY29uZmxpY3QsIGhhZAorICAgYW4gdW5uZWNlc3NhcnkgY2FsbCB0byAiZ2l0IHJlcmVyZSIgZnJvbSBpdHMgdmVyeSBlYXJseSBkYXlzLCB3aGljaAorICAgd2FzIHNwb3R0ZWQgcmVjZW50bHk7IHRoZSBjYWxsIGhhcyBiZWVuIHJlbW92ZWQuCisgICAobWVyZ2UgNzA2MzY5MyBqcy9yZWJhc2UtaS1kZWR1cC1jYWxsLXRvLXJlcmVyZSBsYXRlciB0byBtYWludCkuCisKKyAqIE90aGVyIG1pbm9yIGNsZWFuLXVwcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzCisgICAobWVyZ2UgY2Q4MmI3YSBwYS9jaGVycnktcGljay1kb2MtdHlwbyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmJiNzNhZSBycy9wYXRjaC1pZC11c2Utc2tpcC1wcmVmaXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGFhMjBjYmMgcnMvYXBwbHktbmFtZS10ZXJtaW5hdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZlMTdmYzAgamMvdDIzMDAtc2V0dXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGUyNTZlZWMgamsvc2hlbGwtcG9ydGFiaWxpdHkgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzgzOTQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMS50eHQKQEAgLTAsMCArMSwxMTcgQEAKK0dpdCB2Mi45LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjkKKy0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiAiZ2l0IGRhZW1vbiIgaXMgcnVuIHdpdGhvdXQgLS1baW5pdC1ddGltZW91dCBzcGVjaWZpZWQsIGEKKyAgIGNvbm5lY3Rpb24gZnJvbSBhIGNsaWVudCB0aGF0IHNpbGVudGx5IGdvZXMgb2ZmbGluZSBjYW4gaGFuZyBhcm91bmQKKyAgIGZvciBhIGxvbmcgdGltZSwgd2FzdGluZyByZXNvdXJjZXMuICBUaGUgc29ja2V0LWxldmVsIEtFRVBBTElWRSBoYXMKKyAgIGJlZW4gZW5hYmxlZCB0byBhbGxvdyB0aGUgT1MgdG8gbm90aWNlIHN1Y2ggZmFpbGVkIGNvbm5lY3Rpb25zLgorCisgKiBUaGUgY29tbWFuZHMgaW4gYGdpdCBsb2dgIGZhbWlseSB0YWtlICVDKGF1dG8pIGluIGEgY3VzdG9tIGZvcm1hdAorICAgc3RyaW5nLiAgVGhpcyB1bmNvbmRpdGlvbmFsbHkgdHVybmVkIHRoZSBjb2xvciBvbiwgaWdub3JpbmcKKyAgIC0tbm8tY29sb3Igb3Igd2l0aCAtLWNvbG9yPWF1dG8gd2hlbiB0aGUgb3V0cHV0IGlzIG5vdCBjb25uZWN0ZWQgdG8KKyAgIGEgdHR5OyB0aGlzIHdhcyBjb3JyZWN0ZWQgdG8gbWFrZSB0aGUgZm9ybWF0IHRydWx5IGJlaGF2ZSBhcworICAgImF1dG8iLgorCisgKiAiZ2l0IHJldi1saXN0IC0tY291bnQiIHdob3NlIHdhbGstbGVuZ3RoIGlzIGxpbWl0ZWQgd2l0aCAiLW4iCisgICBvcHRpb24gZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCB0aGUgY291bnRpbmcgb3B0aW1pemVkIHRvIGxvb2sgYXQgdGhlCisgICBiaXRtYXAgaW5kZXguCisKKyAqICJnaXQgc2hvdyAtVyIgKGV4dGVuZCBodW5rcyB0byBjb3ZlciB0aGUgZW50aXJlIGZ1bmN0aW9uLCBkZWxpbWl0ZWQKKyAgIGJ5IGxpbmVzIHRoYXQgbWF0Y2ggdGhlICJmdW5jbmFtZSIgcGF0dGVybikgdXNlZCB0byBzaG93IHRoZSBlbnRpcmUKKyAgIGZpbGUgd2hlbiBhIGNoYW5nZSBhZGRlZCBhbiBlbnRpcmUgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKKyAgIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBzZXQgaGFzIGJlZW4gdXBkYXRlZCBzbyB0aGF0IGxpdGVyYWwgY29tbWFuZHMsCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBjb25zaXN0ZW50bHkKKyAgIHR5cGVzZXQgaW4gZml4ZWQtd2lkdGggZm9udCBhbmQgYm9sZCBpbiBtYW5wYWdlcy4KKworICogImdpdCBzdm4gcHJvcHNldCIgc3ViY29tbWFuZCB0aGF0IHdhcyBhZGRlZCBpbiAyLjMgZGF5cyBpcworICAgZG9jdW1lbnRlZCBub3cuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIHRyaWVzIHRvIGNvbnNpc3RlbnRseSBzcGVsbCAiR1BHIjsgd2hlbgorICAgcmVmZXJyaW5nIHRvIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG5hbWUsICJncGciIGlzIHVzZWQuCisKKyAqICJnaXQgcmVmbG9nIiBzdG9wcGVkIHVwb24gc2VlaW5nIGFuIGVudHJ5IHRoYXQgZGVub3RlcyBhIGJyYW5jaAorICAgY3JlYXRpb24gZXZlbnQgKGFrYSAidW5ib3JuIiksIHdoaWNoIG1hZGUgaXQgYXBwZWFyIGFzIGlmIHRoZQorICAgcmVmbG9nIHdhcyB0cnVuY2F0ZWQuCisKKyAqIFRoZSBnaXQtcHJvbXB0IHNjcmlwdGxldCAoaW4gY29udHJpYi8pIHdhcyBub3QgZnJpZW5kbHkgd2l0aCB0aG9zZQorICAgd2hvIHVzZXMgInNldCAtdSIsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiBBIGNvZGVwYXRoIHRoYXQgdXNlZCBhbGxvY2EoMykgdG8gcGxhY2UgYW4gdW5ib3VuZGVkIGFtb3VudCBvZiBkYXRhCisgICBvbiB0aGUgc3RhY2sgaGFzIGJlZW4gdXBkYXRlZCB0byBhdm9pZCBkb2luZyBzby4KKworICogImdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jaG1vZD0reCBmaWxlIiBtYXkgYmUgdXNhYmxlIGFzIGFuIGVzY2FwZQorICAgaGF0Y2gsIGJ1dCBub3QgYSBmcmllbmRseSB0aGluZyB0byBmb3JjZSBmb3IgcGVvcGxlIHdobyBkbyBuZWVkIHRvCisgICB1c2UgaXQgcmVndWxhcmx5LiAgImdpdCBhZGQgLS1jaG1vZD0reCBmaWxlIiBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorCisgKiBCdWlsZCBpbXByb3ZlbWVudHMgZm9yIGdub21lLWtleXJpbmcgKGluIGNvbnRyaWIvKQorCisgKiAiZ2l0IHN0YXR1cyIgdXNlZCB0byBzYXkgIndvcmtpbmcgZGlyZWN0b3J5IiB3aGVuIGl0IG1lYW50ICJ3b3JraW5nCisgICB0cmVlIi4KKworICogQ29tbWVudHMgYWJvdXQgbWlzYmVoYXZpbmcgRnJlZUJTRCBzaGVsbHMgaGF2ZSBiZWVuIGNsYXJpZmllZCB3aXRoCisgICB0aGUgdmVyc2lvbiBudW1iZXIgKDkueCBhbmQgYmVmb3JlIGFyZSBicm9rZW4sIG5ld2VyIG9uZXMgYXJlIE9LKS4KKworICogImdpdCBjaGVycnktcGljayBBIiB3b3JrZWQgb24gYW4gdW5ib3JuIGJyYW5jaCwgYnV0ICJnaXQKKyAgIGNoZXJyeS1waWNrIEEuLkIiIGRpZG4ndC4KKworICogImdpdCBhZGQgLWkvLXAiIGxlYXJuZWQgdG8gaG9ub3IgZGlmZi5jb21wYWN0aW9uSGV1cmlzdGljCisgICBleHBlcmltZW50YWwga25vYiwgc28gdGhhdCB0aGUgdXNlciBjYW4gd29yayBvbiB0aGUgc2FtZSBodW5rIHNwbGl0CisgICBhcyAiZ2l0IGRpZmYiIG91dHB1dC4KKworICogImxvZyAtLWdyYXBoIC0tZm9ybWF0PSIgbGVhcm5lZCB0aGF0ICIlPnwoTikiIHNwZWNpZmllcyB0aGUgd2lkdGgKKyAgIHJlbGF0aXZlIHRvIHRoZSB0ZXJtaW5hbCdzIGxlZnQgZWRnZSwgbm90IHJlbGF0aXZlIHRvIHRoZSBhcmVhIHRvCisgICBkcmF3IHRleHQgdGhhdCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGFuY2VzdHJ5LWdyYXBoIHNlY3Rpb24uICBJdAorICAgYWxzbyBub3cgYWNjZXB0cyBuZWdhdGl2ZSBOIHRoYXQgbWVhbnMgdGhlIGNvbHVtbiBsaW1pdCBpcyByZWxhdGl2ZQorICAgdG8gdGhlIHJpZ2h0IGJvcmRlci4KKworICogVGhlIG93bmVyc2hpcCBydWxlIGZvciB0aGUgcGllY2Ugb2YgbWVtb3J5IHRoYXQgaG9sZCByZWZlcmVuY2VzIHRvCisgICBiZSBmZXRjaGVkIGluICJnaXQgZmV0Y2giIHdhcyBzY3Jld3ksIHdoaWNoIGhhcyBiZWVuIGNsZWFuZWQgdXAuCisKKyAqICJnaXQgYmlzZWN0IiBtYWtlcyBhbiBpbnRlcm5hbCBjYWxsIHRvICJnaXQgZGlmZi10cmVlIiB3aGVuCisgICBiaXNlY3Rpb24gZmluZHMgdGhlIGN1bHByaXQsIGJ1dCB0aGlzIGNhbGwgZGlkIG5vdCBpbml0aWFsaXplIHRoZQorICAgZGF0YSBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgZGlmZi10cmVlIEFQSSBjb3JyZWN0bHkuCisKKyAqIEZvcm1hdHMgb2YgdGhlIHZhcmlvdXMgZGF0YSAoYW5kIGhvdyB0byB2YWxpZGF0ZSB0aGVtKSB3aGVyZSB3ZSB1c2UKKyAgIEdQRyBzaWduYXR1cmUgaGF2ZSBiZWVuIGRvY3VtZW50ZWQuCisKKyAqIEZpeCBhbiB1bmludGVuZGVkIHJlZ3Jlc3Npb24gaW4gdjIuOSB0aGF0IGJyZWFrcyAiY2xvbmUgLS1kZXB0aCIKKyAgIHRoYXQgcmVjdXJzZXMgZG93biB0byBzdWJtb2R1bGVzIGJ5IGZvcmNpbmcgdGhlIHN1Ym1vZHVsZXMgdG8gYWxzbworICAgYmUgY2xvbmVkIHNoYWxsb3dseSwgd2hpY2ggbWFueSBzZXJ2ZXIgaW5zdGFuY2VzIHRoYXQgaG9zdCB1cHN0cmVhbQorICAgb2YgdGhlIHN1Ym1vZHVsZXMgYXJlIG5vdCBwcmVwYXJlZCBmb3IuCisKKyAqIEZpeCB1bm5lY2Vzc2FyaWx5IHdhc3RlIGluIHRoZSBpZGlvbWF0aWMgdXNlIG9mICc6ICR7VkFSPWRlZmF1bHR9JworICAgdG8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlLCB3aXRob3V0IGVuY2xvc2luZyBpdCBpbiBkb3VibGUgcXVvdGVzLgorCisgKiBTb21lIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgaGFkIG5vbi1BTlNJIHN0cmljdCBkZWNsYXJhdGlvbnMgb2YgQworICAgZnVuY3Rpb25zIHRoYXQgZG8gbm90IHRha2UgYW55IHBhcmFtZXRlcnMsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisKKyAqIFRoZSBpbnRlcm5hbCBjb2RlIHVzZWQgdG8gc2hvdyBsb2NhbCB0aW1lem9uZSBvZmZzZXQgaXMgbm90CisgICBwcmVwYXJlZCB0byBoYW5kbGUgdGltZXN0YW1wcyBiZXlvbmQgeWVhciAyMTAwLCBhbmQgZ2F2ZSBhCisgICBib2d1cyBvZmZzZXQgdmFsdWUgdG8gdGhlIGNhbGxlci4gIFVzZSBhIG1vcmUgYmVuaWduIGxvb2tpbmcKKyAgICswMDAwIGluc3RlYWQgYW5kIGxldCAiZ2l0IGxvZyIgZ29pbmcgaW4gc3VjaCBhIGNhc2UsIGluc3RlYWQKKyAgIG9mIGFib3J0aW5nLgorCisgKiBPbmUgYW1vbmcgZm91ciBpbnZvY2F0aW9ucyBvZiByZWFkbGluaygxKSBpbiBvdXIgdGVzdCBzdWl0ZSBoYXMKKyAgIGJlZW4gcmV3cml0dGVuIHNvIHRoYXQgdGhlIHRlc3QgY2FuIHJ1biBvbiBzeXN0ZW1zIHdpdGhvdXQgdGhlCisgICBjb21tYW5kIChvdGhlcnMgYXJlIGluIHZhbGdyaW5kIHRlc3QgZnJhbWV3b3JrIGFuZCB0OTgwMikuCisKKyAqIHQvcGVyZiBuZWVkcyAvdXNyL2Jpbi90aW1lIHdpdGggR05VIGV4dGVuc2lvbjsgdGhlIGludm9jYXRpb24gb2YgaXQKKyAgIGlzIHVwZGF0ZWQgdG8gImd0aW1lIiBvbiBEYXJ3aW4uCisKKyAqIEEgYnVnLCB3aGljaCBjYXVzZWQgImdpdCBwNCIgd2hpbGUgcnVubmluZyB1bmRlciB2ZXJib3NlIG1vZGUgdG8KKyAgIHJlcG9ydCBwYXRocyB0aGF0IGFyZSBvbWl0dGVkIGR1ZSB0byBicmFuY2ggcHJlZml4IGluY29ycmVjdGx5LCBoYXMKKyAgIGJlZW4gZml4ZWQ7IHRoZSBjb21tYW5kIHNhaWQgIklnbm9yaW5nIGZpbGUgb3V0c2lkZSBvZiBwcmVmaXgiIGZvcgorICAgcGF0aHMgdGhhdCBhcmUgX2luc2lkZV8uCisKKyAqIFRoZSB0b3AgbGV2ZWwgZG9jdW1lbnRhdGlvbiAiZ2l0IGhlbHAgZ2l0IiBzdGlsbCBwb2ludGVkIGF0IHRoZQorICAgZG9jdW1lbnRhdGlvbiBzZXQgaG9zdGVkIGF0IG5vdy1kZWZ1bmN0IGdvb2dsZS1jb2RlIHJlcG9zaXRvcnkuCisgICBVcGRhdGUgaXQgdG8gcG9pbnQgdG8gaHR0cHM6Ly9naXQuZ2l0aHViLmlvL2h0bWxkb2NzL2dpdC5odG1sCisgICBpbnN0ZWFkLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MjAwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4yLnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgdjIuOS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi45LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGZpeCBtZXJnZWQgdG8gdjIuOS4xIGhhZCBhIGZldyB0ZXN0cyB0aGF0IGFyZSBub3QgbWVhbnQgdG8gYmUKKyAgIHJ1biBvbiBwbGF0Zm9ybXMgd2l0aG91dCA2NC1iaXQgbG9uZywgd2hpY2ggY2F1c2VkIHVubmVjZXNzYXJ5CisgICB0ZXN0IGZhaWx1cmVzIG9uIHRoZW0gYmVjYXVzZSB3ZSBkaWRuJ3QgZGV0ZWN0IHRoZSBwbGF0Zm9ybSBhbmQKKyAgIHNraXAgdGhlbS4gIFRoZXNlIHRlc3RzIGFyZSBub3cgc2tpcHBlZCBvbiBwbGF0Zm9ybXMgdGhhdCB0aGV5CisgICBhcmUgbm90IGFwcGxpY2FibGUgdG8uCisKK05vIG90aGVyIGNoYW5nZSBpcyBpbmNsdWRlZCBpbiB0aGlzIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1ZTA4MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjMudHh0CkBAIC0wLDAgKzEsMTcwIEBACitHaXQgdjIuOS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi45LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBjb250ZW50cyBvZiBhIGNvbW1pdCBvYmplY3QgYW5kCisgICBmaW5kcyBpdHMgc3ViamVjdCBsaW5lIGRpZCBub3QgaWdub3JlIGxlYWRpbmcgYmxhbmsgbGluZXMsIGFzIGlzCisgICBjb21tb25seSBkb25lIGJ5IG90aGVyIGNvZGVwYXRocy4gIE1ha2UgaXQgaWdub3JlIGxlYWRpbmcgYmxhbmsKKyAgIGxpbmVzIHRvIG1hdGNoLgorCisgKiBHaXQgZG9lcyBub3Qga25vdyB3aGF0IHRoZSBjb250ZW50cyBpbiB0aGUgaW5kZXggc2hvdWxkIGJlIGZvciBhCisgICBwYXRoIGFkZGVkIHdpdGggImdpdCBhZGQgLU4iIHlldCwgc28gImdpdCBncmVwIC0tY2FjaGVkIiBzaG91bGQgbm90CisgICBzaG93IGhpdHMgKG9yIHNob3cgbGFjayBvZiBoaXRzLCB3aXRoIC1MKSBpbiBzdWNoIGEgcGF0aCwgYnV0IHRoYXQKKyAgIGxvZ2ljIGRvZXMgbm90IGFwcGx5IHRvICJnaXQgZ3JlcCIsIGkuZS4gc2VhcmNoaW5nIGluIHRoZSB3b3JraW5nCisgICB0cmVlIGZpbGVzLiAgQnV0IHdlIGRpZCBzbyBieSBtaXN0YWtlLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIiBkaWQgbm90IHJlc3RvcmUgdGhlIGF1dG8tc3Rhc2hlZCBjaGFuZ2UKKyAgIHdoZW4gdGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4KKworICogImdpdCBjb21taXQgLS1hbWVuZCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLVMiIGZvciBhIGNvbW1pdCB3aXRob3V0CisgICBhbnkgbWVzc2FnZSBib2R5IGNvdWxkIGhhdmUgbWlzaWRlbnRpZmllZCB3aGVyZSB0aGUgaGVhZGVyIG9mIHRoZQorICAgY29tbWl0IG9iamVjdCBlbmRzLgorCisgKiBNb3JlIG1hcmstdXAgdXBkYXRlcyB0byB0eXBlc2V0IHN0cmluZ3MgdGhhdCBhcmUgZXhwZWN0ZWQgdG8KKyAgIGxpdGVyYWxseSB0eXBlZCBieSB0aGUgZW5kIHVzZXIgaW4gZml4ZWQtd2lkdGggZm9udC4KKworICogRm9yIGEgbG9uZyB0aW1lLCB3ZSBjYXJyaWVkIGFuIGluLWNvZGUgY29tbWVudCB0aGF0IHNhaWQgb3VyCisgICBjb2xvcmVkIG91dHB1dCB3b3VsZCB3b3JrIG9ubHkgd2hlbiB3ZSB1c2UgZnByaW50Zi9mcHV0cyBvbgorICAgV2luZG93cywgd2hpY2ggbm8gbG9uZ2VyIGlzIHRoZSBjYXNlIGZvciB0aGUgcGFzdCBmZXcgeWVhcnMuCisKKyAqICJnYy5hdXRvUGFja0xpbWl0IiB3aGVuIHNldCB0byAxIHNob3VsZCBub3QgdHJpZ2dlciBhIHJlcGFja2luZworICAgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwYWNrLCBidXQgdGhlIGNvZGUgY291bnRlZCBwb29ybHkgYW5kIGRpZAorICAgc28uCisKKyAqIE9uZSBwYXJ0IG9mICJnaXQgYW0iIGhhZCBhbiBvZGRiYWxsIGhlbHBlciBmdW5jdGlvbiB0aGF0IGNhbGxlZAorICAgc3R1ZmYgZnJvbSBvdXRzaWRlICJoaXMiIGFzIG9wcG9zZWQgdG8gY2FsbGluZyB3aGF0IHdlIGhhdmUgIm91cnMiLAorICAgd2hpY2ggd2FzIG5vdCBnZW5kZXItbmV1dHJhbCBhbmQgYWxzbyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZgorICAgdGhlIHN5c3RlbSB3aGVyZSBvdXRzaWRlIHN0dWZmIGlzIHVzdWFsbHkgY2FsbGVkICJ0aGVpcnMiIGluCisgICBjb250cmFzdCB0byAib3VycyIuCisKKyAqIFRoZSB0ZXN0IGZyYW1ld29yayBsZWFybmVkIGEgbmV3IGhlbHBlciB0ZXN0X21hdGNoX3NpZ25hbCB0bworICAgY2hlY2sgYW4gZXhpdCBjb2RlIGZyb20gZ2V0dGluZyBraWxsZWQgYnkgYW4gZXhwZWN0ZWQgc2lnbmFsLgorCisgKiAiZ2l0IGJsYW1lIC1NIiBtaXNzZWQgYSBzaW5nbGUgbGluZSB0aGF0IHdhcyBtb3ZlZCB3aXRoaW4gdGhlIGZpbGUuCisKKyAqIEZpeCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvZGVwYXRocyB0aGF0IGFyZSBpbnZvbHZlZCBpbiBwYXJhbGxlbAorICAgc3VibW9kdWxlIG9wZXJhdGlvbnMsIHdoaWNoIGdhdmUgdXAgb24gcmVhZGluZyB0b28gZWFybHksIGFuZAorICAgY291bGQgaGF2ZSB3YXN0ZWQgQ1BVIHdoaWxlIGF0dGVtcHRpbmcgdG8gd3JpdGUgdW5kZXIgYSBjb3JuZXIKKyAgIGNhc2UgY29uZGl0aW9uLgorCisgKiAiZ2l0IGdyZXAgLWkiIGhhcyBiZWVuIHRhdWdodCB0byBmb2xkIGNhc2UgaW4gbm9uLWFzY2lpIGxvY2FsZXMKKyAgIGNvcnJlY3RseS4KKworICogQSB0ZXN0IHRoYXQgdW5jb25kaXRpb25hbGx5IHVzZWQgIm1rdGVtcCIgbGVhcm5lZCB0aGF0IHRoZSBjb21tYW5kCisgICBpcyBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUuCisKKyAqICJnaXQgYmxhbWUgZmlsZSIgYWxsb3dlZCB0aGUgbGluZWFnZSBvZiBsaW5lcyBpbiB0aGUgdW5jb21taXR0ZWQsCisgICB1bmFkZGVkIGNvbnRlbnRzIG9mICJmaWxlIiB0byBiZSBpbnNwZWN0ZWQsIGJ1dCBpdCByZWZ1c2VkIHdoZW4KKyAgICJmaWxlIiBkaWQgbm90IGFwcGVhciBpbiB0aGUgY3VycmVudCBjb21taXQuICBXaGVuICJmaWxlIiB3YXMKKyAgIGNyZWF0ZWQgYnkgcmVuYW1pbmcgYW4gZXhpc3RpbmcgZmlsZSAoYnV0IHRoZSBjaGFuZ2UgaGFzIG5vdCBiZWVuCisgICBjb21taXR0ZWQpLCB0aGlzIHJlc3RyaWN0aW9uIHdhcyB1bm5lY2Vzc2FyaWx5IHRpZ2h0LgorCisgKiAiZ2l0IGFkZCAtTiBkaXIvZmlsZSAmJiBnaXQgd3JpdGUtdHJlZSIgcHJvZHVjZWQgYW4gaW5jb3JyZWN0IHRyZWUKKyAgIHdoZW4gdGhlcmUgYXJlIG90aGVyIHBhdGhzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0aGF0IHNvcnRzIGFmdGVyCisgICAiZmlsZSIuCisKKyAqICJnaXQgZmV0Y2ggaHR0cDovL3VzZXI6cGFzc0Bob3N0L3JlcG8uLi4iIHNjcnViYmVkIHRoZSB1c2VyaW5mbworICAgcGFydCwgYnV0ICJnaXQgcHVzaCIgZGlkbid0LgorCisgKiBBbiBhZ2Ugb2xkIGJ1ZyB0aGF0IGNhdXNlZCAiZ2l0IGRpZmYgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIgorICAgbWlzYmVoYXZlIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IG5vdGVzIG1lcmdlIiBoYWQgYSBjb2RlIHRvIHNlZSBpZiBhIHBhdGggZXhpc3RzIChhbmQgZmFpbHMgaWYKKyAgIGl0IGRvZXMpIGFuZCB0aGVuIG9wZW4gdGhlIHBhdGggZm9yIHdyaXRpbmcgKHdoZW4gaXQgZG9lc24ndCkuCisgICBSZXBsYWNlIGl0IHdpdGggb3BlbiB3aXRoIE9fRVhDTC4KKworICogImdpdCBwYWNrLW9iamVjdHMiIGFuZCAiZ2l0IGluZGV4LXBhY2siIG1vc3RseSBvcGVyYXRlIHdpdGggb2ZmX3QKKyAgIHdoZW4gdGFsa2luZyBhYm91dCB0aGUgb2Zmc2V0IG9mIG9iamVjdHMgaW4gYSBwYWNrZmlsZSwgYnV0IHRoZXJlCisgICB3ZXJlIGEgaGFuZGZ1bCBvZiBwbGFjZXMgdGhhdCB1c2VkICJ1bnNpZ25lZCBsb25nIiB0byBob2xkIHRoYXQKKyAgIHZhbHVlLCBsZWFkaW5nIHRvIGFuIHVuaW50ZW5kZWQgdHJ1bmNhdGlvbi4KKworICogUmVjZW50IHVwZGF0ZSB0byAiZ2l0IGRhZW1vbiIgdHJpZXMgdG8gZW5hYmxlIHRoZSBzb2NrZXQtbGV2ZWwKKyAgIEtFRVBBTElWRSwgYnV0IHdoZW4gaXQgaXMgc3Bhd25lZCB2aWEgaW5ldGQsIHRoZSBzdGFuZGFyZCBpbnB1dAorICAgZmlsZSBkZXNjcmlwdG9yIG1heSBub3QgbmVjZXNzYXJpbHkgYmUgY29ubmVjdGVkIHRvIGEgc29ja2V0LgorICAgU3VwcHJlc3MgYW4gRU5PVFNPQ0sgZXJyb3IgZnJvbSBzZXRzb2Nrb3B0KCkuCisKKyAqIFJlY2VudCBGcmVlQlNEIHN0b3BwZWQgbWFraW5nIHBlcmwgYXZhaWxhYmxlIGF0IC91c3IvYmluL3Blcmw7CisgICBzd2l0Y2ggdGhlIGRlZmF1bHQgdGhlIGJ1aWx0LWluIHBhdGggdG8gL3Vzci9sb2NhbC9iaW4vcGVybCBvbiBub3QKKyAgIHRvbyBhbmNpZW50IEZyZWVCU0QgcmVsZWFzZXMuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHRvIHN1Z2dlc3QgIm1lcmdlIC0tYWJvcnQiIGR1cmluZyBhIGNvbmZsaWN0ZWQKKyAgIG1lcmdlLCBqdXN0IGxpa2UgaXQgYWxyZWFkeSBzdWdnZXN0cyAicmViYXNlIC0tYWJvcnQiIGR1cmluZyBhCisgICBjb25mbGljdGVkIHJlYmFzZS4KKworICogVGhlIC5jLy5oIHNvdXJjZXMgYXJlIG1hcmtlZCBhcyBzdWNoIGluIG91ciAuZ2l0YXR0cmlidXRlcyBmaWxlIHNvCisgICB0aGF0ICJnaXQgZGlmZiAtVyIgYW5kIGZyaWVuZHMgd291bGQgd29yayBiZXR0ZXIuCisKKyAqIEV4aXN0aW5nIGF1dG9jb25mIGdlbmVyYXRlZCB0ZXN0IGZvciB0aGUgbmVlZCB0byBsaW5rIHdpdGggcHRocmVhZAorICAgbGlicmFyeSBkaWQgbm90IGNoZWNrIGFsbCB0aGUgZnVuY3Rpb25zIGZyb20gcHRocmVhZCBsaWJyYXJpZXM7CisgICByZWNlbnQgRnJlZUJTRCBoYXMgc29tZSBmdW5jdGlvbnMgaW4gbGliYyBidXQgbm90IG90aGVycywgYW5kIHdlCisgICBtaXN0YWtlbmx5IHRob3VnaHQgbGlua2luZyB3aXRoIGxpYmMgaXMgZW5vdWdoIHdoZW4gaXQgaXMgbm90LgorCisgKiBBbGxvdyBodHRwIGRhZW1vbiB0ZXN0cyBpbiBUcmF2aXMgQ0kgdGVzdHMuCisKKyAqIFVzZXJzIG9mIHRoZSBwYXJzZV9vcHRpb25zX2NvbmNhdCgpIEFQSSBmdW5jdGlvbiBuZWVkIHRvIGFsbG9jYXRlCisgICBleHRyYSBzbG90cyBpbiBhZHZhbmNlIGFuZCBmaWxsIHRoZW0gd2l0aCBPUFRfRU5EKCkgd2hlbiB0aGV5IHdhbnQKKyAgIHRvIGRlY2lkZSB0aGUgc2V0IG9mIHN1cHBvcnRlZCBvcHRpb25zIGR5bmFtaWNhbGx5LCB3aGljaCBtYWtlcyB0aGUKKyAgIGNvZGUgZXJyb3ItcHJvbmUgYW5kIGhhcmQgdG8gcmVhZC4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIGJ5IHR3ZWFraW5nCisgICB0aGUgQVBJIHRvIGFsbG9jYXRlIGFuZCByZXR1cm4gYSBuZXcgY29weSBvZiAic3RydWN0IG9wdGlvbiIgYXJyYXkuCisKKyAqIFRoZSB1c2Ugb2Ygc3RyYnVmIGluICJnaXQgcm0iIHRvIGJ1aWxkIGZpbGVuYW1lIHRvIHJlbW92ZSB3YXMgYSBiaXQKKyAgIHN1Ym9wdGltYWwsIHdoaWNoIGhhcyBiZWVuIGZpeGVkLgorCisgKiAiZ2l0IGNvbW1pdCAtLWhlbHAiIHNhaWQgIi0tbm8tdmVyaWZ5IiBpcyBvbmx5IGFib3V0IHNraXBwaW5nIHRoZQorICAgcHJlLWNvbW1pdCBob29rLCBhbmQgZmFpbGVkIHRvIHNheSB0aGF0IGl0IGFsc28gc2tpcHBlZCB0aGUKKyAgIGNvbW1pdC1tc2cgaG9vay4KKworICogImdpdCBtZXJnZSIgaW4gR2l0IHYyLjkgd2FzIHRhdWdodCB0byBmb3JiaWQgbWVyZ2luZyBhbiB1bnJlbGF0ZWQKKyAgIGxpbmVzIG9mIGhpc3RvcnkgYnkgZGVmYXVsdCwgYnV0IHRoYXQgaXMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZworICAgdGhlICItLXJlam9pbiIgbW9kZSBvZiAiZ2l0IHN1YnRyZWUiIChpbiBjb250cmliLykgd2FudHMgdG8gZG8uCisgICAiZ2l0IHN1YnRyZWUiIGhhcyBiZWVuIHRhdWdodCB0byB1c2UgdGhlICItLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMiCisgICBvcHRpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgZm9yICJnaXQgcGVyc2lzdGVudC1odHRwcyIgaGVscGVyIChpbiBjb250cmliLykKKyAgIGhhcyBiZWVuIHVwZGF0ZWQgc28gdGhhdCBpdCBjYW4gYmUgYnVpbHQgd2l0aCBtb3JlIHJlY2VudCB2ZXJzaW9ucworICAgb2YgR28uCisKKyAqIFRoZXJlIGlzIGFuIG9wdGltaXphdGlvbiB1c2VkIGluICJnaXQgZGlmZiAkdHJlZUEgJHRyZWVCIiB0byBib3Jyb3cKKyAgIGFuIGFscmVhZHkgY2hlY2tlZC1vdXQgY29weSBpbiB0aGUgd29ya2luZyB0cmVlIHdoZW4gaXQgaXMga25vd24gdG8KKyAgIGJlIHRoZSBzYW1lIGFzIHRoZSBibG9iIGJlaW5nIGNvbXBhcmVkLCBleHBlY3RpbmcgdGhhdCBvcGVuL21tYXAgb2YKKyAgIHN1Y2ggYSBmaWxlIGlzIGZhc3RlciB0aGFuIHJlYWRpbmcgaXQgZnJvbSB0aGUgb2JqZWN0IHN0b3JlLCB3aGljaAorICAgaW52b2x2ZXMgaW5mbGF0aW5nIGFuZCBhcHBseWluZyBkZWx0YS4gIFRoaXMgaG93ZXZlciBraWNrZWQgaW4gZXZlbgorICAgd2hlbiB0aGUgY2hlY2tlZC1vdXQgY29weSBuZWVkcyB0byBnbyB0aHJvdWdoIHRoZSBjb252ZXJ0LXRvLWdpdAorICAgY29udmVyc2lvbiAoaW5jbHVkaW5nIHRoZSBjbGVhbiBmaWx0ZXIpLCB3aGljaCBkZWZlYXRzIHRoZSB3aG9sZQorICAgcG9pbnQgb2YgdGhlIG9wdGltaXphdGlvbi4gIFRoZSBvcHRpbWl6YXRpb24gaGFzIGJlZW4gZGlzYWJsZWQgd2hlbgorICAgdGhlIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LgorCisgKiAiZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgbG9nIC0tYmFzaWMtcmVnZXhwIiBtaXNiZWhhdmVkCisgICBiZWNhdXNlIHRoZSBpbnRlcm5hbCBBUEkgdG8gYWNjZXNzIHRoZSBncmVwIG1hY2hpbmVyeSB3YXMgbm90CisgICBkZXNpZ25lZCB3ZWxsLgorCisgKiBXaW5kb3dzIHBvcnQgd2FzIGZhaWxpbmcgc29tZSB0ZXN0cyBpbiB0NDEzMCwgZHVlIHRvIHRoZSBsYWNrIG9mCisgICBpbnVtIGluIHRoZSByZXR1cm5lZCB2YWx1ZXMgYnkgaXRzIGxzdGF0KDIpIGVtdWxhdGlvbi4KKworICogVGhlIGNoYXJhY3RlcnMgaW4gdGhlIGxhYmVsIHNob3duIGZvciB0YWdzL3JlZnMgZm9yIGNvbW1pdHMgaW4KKyAgICJnaXR3ZWIiIG91dHB1dCBhcmUgbm93IHByb3Blcmx5IGVzY2FwZWQgZm9yIHByb3BlciBIVE1MIG91dHB1dC4KKworICogRnJlZUJTRCBjYW4gbGllIHdoZW4gYXNrZWQgbXRpbWUgb2YgYSBkaXJlY3RvcnksIHdoaWNoIG1hZGUgdGhlCisgICB1bnRyYWNrZWQgY2FjaGUgY29kZSB0byBmYWxsIGJhY2sgdG8gYSBzbG93LXBhdGgsIHdoaWNoIGluIHR1cm4KKyAgIGNhdXNlZCB0ZXN0cyBpbiB0NzA2MyB0byBmYWlsIGJlY2F1c2UgaXQgd2FudGVkIHRvIHZlcmlmeSB0aGUKKyAgIGJlaGF2aW91ciBvZiB0aGUgZmFzdC1wYXRoLgorCisgKiBTcXVlbGNoIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBuZXRtYWxsb2MgKGluIGNvbXBhdC8pIGxpYnJhcnkuCisKKyAqIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgaGFzaG1hcCB3YXMgdW5jbGVhciBpZiBoYXNobWFwX2VudHJ5CisgICBjYW4gYmUgc2FmZWx5IGRpc2NhcmRlZCB3aXRob3V0IGFueSBvdGhlciBjb25zaWRlcmF0aW9uLiAgU3RhdGUKKyAgIHRoYXQgaXQgaXMgc2FmZSB0byBkbyBzby4KKworICogTm90LXNvLXJlY2VudCByZXdyaXRlIG9mICJnaXQgYW0iIHRoYXQgc3RhcnRlZCBtYWtpbmcgaW50ZXJuYWwKKyAgIGNhbGxzIGludG8gdGhlIGNvbW1pdCBtYWNoaW5lcnkgaGFkIGFuIHVuaW50ZW5kZWQgcmVncmVzc2lvbiwgaW4KKyAgIHRoYXQgbm8gbWF0dGVyIGhvdyBtYW55IHNlY29uZHMgaXQgdG9vayB0byBhcHBseSBtYW55IHBhdGNoZXMsIHRoZQorICAgcmVzdWx0aW5nIGNvbW1pdHRlciB0aW1lc3RhbXAgZm9yIHRoZSByZXN1bHRpbmcgY29tbWl0cyB3ZXJlIGFsbAorICAgdGhlIHNhbWUuCisKKyAqICJnaXQgZGlmZnRvb2wgPHBhdGhzPi4uLiIgc3RhcnRlZCBpbiBhIHN1YmRpcmVjdG9yeSBmYWlsZWQgdG8KKyAgIGludGVycHJldCB0aGUgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnksIHdoaWNoIGhhcyBiZWVuCisgICBmaXhlZC4KKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzY4MjkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuNC50eHQKQEAgLTAsMCArMSw5MCBAQAorR2l0IHYyLjkuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuOS4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlcmUgYXJlIGNlcnRhaW4gaG91c2Uta2VlcGluZyB0YXNrcyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIGF0CisgICB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgYW55IEdpdCBwcm9ncmFtLCBhbmQgcHJvZ3JhbXMgdGhhdCBhcmUgbm90CisgICBidWlsdC1pbiBjb21tYW5kcyBoYWQgdG8gZG8gdGhlbSBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyAiZ2l0IgorICAgcG90dHkgZG9lcy4gIEl0IHdhcyBlYXN5IHRvIG1ha2UgbWlzdGFrZXMgaW4gb25lLW9mZiBzdGFuZGFsb25lCisgICBwcm9ncmFtcyAobGlrZSB0ZXN0IGhlbHBlcnMpLiAgQSBjb21tb24gIm1haW4oKSIgZnVuY3Rpb24gdGhhdAorICAgY2FsbHMgY21kX21haW4oKSBvZiBpbmRpdmlkdWFsIHByb2dyYW0gaGFzIGJlZW4gaW50cm9kdWNlZCB0bworICAgbWFrZSBpdCBoYXJkZXIgdG8gbWFrZSBtaXN0YWtlcy4KKworICogImdpdCBtZXJnZSIgd2l0aCByZW5vcm1hbGl6YXRpb24gZGlkIG5vdCB3b3JrIHdlbGwgd2l0aAorICAgbWVyZ2UtcmVjdXJzaXZlLCBkdWUgdG8gInNhZmVyIGNybGYiIGNvbnZlcnNpb24ga2lja2luZyBpbiB3aGVuIGl0CisgICBzaG91bGRuJ3QuCisKKyAqIFRoZSByZWZsb2cgb3V0cHV0IGZvcm1hdCBpcyBkb2N1bWVudGVkIGJldHRlciwgYW5kIGEgbmV3IGZvcm1hdAorICAgLS1kYXRlPXVuaXggdG8gcmVwb3J0IHRoZSBzZWNvbmRzLXNpbmNlLWVwb2NoICh3aXRob3V0IHRpbWV6b25lKQorICAgaGFzIGJlZW4gYWRkZWQuCisKKyAqICJnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2UiIGFscmVhZHkgaGFkIGVub3VnaCBsb2dpYyB0byBhbGxvdworICAgZW5zdXJpbmcgdGhhdCBzdWNoIGEgcHVzaCByZXN1bHRzIGluIGNyZWF0aW9uIG9mIGEgcmVmIChpLmUuIHRoZQorICAgcmVjZWl2aW5nIGVuZCBkaWQgbm90IGhhdmUgYW5vdGhlciBwdXNoIGZyb20gc2lkZXdheXMgdGhhdCB3b3VsZCBiZQorICAgZGlzY2FyZGVkIGJ5IG91ciBmb3JjZS1wdXNoaW5nKSwgYnV0IGRpZG4ndCBleHBvc2UgdGhpcyBwb3NzaWJpbGl0eQorICAgdG8gdGhlIHVzZXJzLiAgSXQgZG9lcyBzbyBub3cuCisKKyAqICJpbXBvcnQtdGFycyIgZmFzdC1pbXBvcnQgc2NyaXB0IChpbiBjb250cmliLykgdXNlZCB0byBpZ25vcmUgYQorICAgaGFyZGxpbmsgdGFyZ2V0IGFuZCByZXBsYWNlZCBpdCB3aXRoIGFuIGVtcHR5IGZpbGUsIHdoaWNoIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQgdG8gcmVjb3JkIHRoZSBzYW1lIGJsb2IgYXMgdGhlIG90aGVyIGZpbGUgdGhlIGhhcmRsaW5rIGlzCisgICBzaGFyZWQgd2l0aC4KKworICogImdpdCBtdiBkaXIgbm9uLWV4aXN0aW5nLWRpci8iIGRpZCBub3Qgd29yayBpbiBzb21lIGVudmlyb25tZW50cworICAgdGhlIHNhbWUgd2F5IGFzIGV4aXN0aW5nIG1haW5zdHJlYW0gcGxhdGZvcm1zLiAgVGhlIGNvZGUgbm93IG1vdmVzCisgICAiZGlyIiB0byAibm9uLWV4aXN0aW5nLWRpciIsIHdpdGhvdXQgcmVseWluZyBvbiByZW5hbWUoIkEiLCAiQi8iKQorICAgdGhhdCBzdHJpcHMgdGhlIHRyYWlsaW5nIHNsYXNoIG9mICcvJy4KKworICogVGhlICJ0LyIgaGllcmFyY2h5IGlzIHByb25lIHRvIGdldCBhbiB1bnVzdWFsIHBhdGhuYW1lOyAibWFrZSB0ZXN0IgorICAgaGFzIGJlZW4gdGF1Z2h0IHRvIG1ha2Ugc3VyZSB0aGV5IGRvIG5vdCBjb250YWluIHBhdGhzIHRoYXQgY2Fubm90CisgICBiZSBjaGVja2VkIG91dCBvbiBXaW5kb3dzIChhbmQgdGhlIG1lY2hhbmlzbSBjYW4gYmUgcmV1c2FibGUgdG8KKyAgIGNhdGNoIHBhdGhuYW1lcyB0aGF0IGFyZSBub3QgcG9ydGFibGUgdG8gb3RoZXIgcGxhdGZvcm1zIGFzIG5lZWQKKyAgIGFyaXNlcykuCisKKyAqIFdoZW4gImdpdCBtZXJnZS1yZWN1cnNpdmUiIHdvcmtzIG9uIGhpc3Rvcnkgd2l0aCBtYW55IGNyaXNzLWNyb3NzCisgICBtZXJnZXMgaW4gInZlcmJvc2UiIG1vZGUsIHRoZSBuYW1lcyB0aGUgY29tbWFuZCBhc3NpZ25zIHRvIHRoZQorICAgdmlydHVhbCBtZXJnZSBiYXNlcyBjb3VsZCBoYXZlIG92ZXJ3cml0dGVuIGVhY2ggb3RoZXIgYnkgdW5pbnRlbmRlZAorICAgcmV1c2Ugb2YgdGhlIHNhbWUgcGllY2Ugb2YgbWVtb3J5LgorCisgKiAiZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIDxicmFuY2g+IiB1c2VkIHRvIGdpdmUgdGhlIHNhbWUgYWR2aWNlCisgICBtZXNzYWdlIGFzIHRoYXQgaXMgaXNzdWVkIHdoZW4gImdpdCBjaGVja291dCA8dGFnPiIgKG9yIGFueXRoaW5nCisgICB0aGF0IGlzIG5vdCBhIGJyYW5jaCBuYW1lKSBpcyBnaXZlbiwgYnV0IGFza2luZyB3aXRoICItLWRldGFjaCIgaXMKKyAgIGFuIGV4cGxpY2l0IGVub3VnaCBzaWduIHRoYXQgdGhlIHVzZXIga25vd3Mgd2hhdCBpcyBnb2luZyBvbi4gIFRoZQorICAgYWR2aWNlIG1lc3NhZ2UgaGFzIGJlZW4gc3F1ZWxjaGVkIGluIHRoaXMgY2FzZS4KKworICogImdpdCBkaWZmdG9vbCIgYnkgZGVmYXVsdCBpZ25vcmVzIHRoZSBlcnJvciBleGl0IGZyb20gdGhlIGJhY2tlbmQKKyAgIGNvbW1hbmRzIGl0IHNwYXducywgYmVjYXVzZSBvZnRlbiB0aGV5IHNpZ25hbCB0aGF0IHRoZXkgZm91bmQKKyAgIGRpZmZlcmVuY2VzIGJ5IGV4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBjb2RlIGp1c3QgbGlrZSAiZGlmZiIKKyAgIGRvZXM7IHRoZSBleGl0IHN0YXR1cyBjb2RlcyAxMjYgYW5kIGFib3ZlIGhvd2V2ZXIgYXJlIHNwZWNpYWwgaW4KKyAgIHRoYXQgdGhleSBhcmUgdXNlZCB0byBzaWduYWwgdGhhdCB0aGUgY29tbWFuZCBpcyBub3QgZXhlY3V0YWJsZSwKKyAgIGRvZXMgbm90IGV4aXN0LCBvciBraWxsZWQgYnkgYSBzaWduYWwuICAiZ2l0IGRpZmZ0b29sIiBoYXMgYmVlbgorICAgdGF1Z2h0IHRvIG5vdGljZSB0aGVzZSBleGl0IHN0YXR1cyBjb2Rlcy4KKworICogT24gV2luZG93cywgaGVscC5icm93c2VyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdXNlZCB0byBiZSBpZ25vcmVkLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgImdpdCAtYyB2YXJbPXZhbF0gY21kIiBmYWNpbGl0eSB0byBhcHBlbmQgYSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZSBkZWZpbml0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaCBvcmRlciB3YXMgZGVzY3JpYmVkIGluCisgICBnaXQoMSkgbWFudWFsIHBhZ2UsIGJ1dCBub3QgaW4gZ2l0LWNvbmZpZygxKSwgd2hpY2ggd2FzIG1vcmUgbGlrZWx5CisgICBwbGFjZSBmb3IgcGVvcGxlIHRvIGxvb2sgZm9yIHdoZW4gdGhleSBhc2sgImNhbiBJIG1ha2UgYSBvbmUtc2hvdAorICAgb3ZlcnJpZGUsIGFuZCBpZiBzbyBob3c/IgorCisgKiBUaGUgdGVtcGZpbGUgKGhlbmNlIGl0cyB1c2VyIGxvY2tmaWxlKSBBUEkgbGV0cyB0aGUgY2FsbGVyIHRvIG9wZW4KKyAgIGEgZmlsZSBkZXNjcmlwdG9yIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIHdyaXRlIGludG8gaXQgYW5kIHRoZW4KKyAgIGZpbmFsaXplIGl0IGJ5IGZpcnN0IGNsb3NpbmcgdGhlIGZpbGVoYW5kbGUgYW5kIHRoZW4gZWl0aGVyCisgICByZW1vdmluZyBvciByZW5hbWluZyB0aGUgdGVtcG9yYXJ5IGZpbGUuICBXaGVuIHRoZSBwcm9jZXNzIHNwYXducyBhCisgICBzdWJwcm9jZXNzIGFmdGVyIG9idGFpbmluZyB0aGUgZmlsZSBkZXNjcmlwdG9yLCBhbmQgaWYgdGhlCisgICBzdWJwcm9jZXNzIGhhcyBub3QgZXhpdGVkIHdoZW4gdGhlIGF0dGVtcHQgdG8gcmVtb3ZlIG9yIHJlbmFtZSBpcworICAgbWFkZSwgdGhlIGxhc3Qgc3RlcCBmYWlscyBvbiBXaW5kb3dzLCBiZWNhdXNlIHRoZSBzdWJwcm9jZXNzIGhhcworICAgdGhlIGZpbGUgZGVzY3JpcHRvciBzdGlsbCBvcGVuLiAgT3BlbiB0ZW1wZmlsZSB3aXRoIE9fQ0xPRVhFQyBmbGFnCisgICB0byBhdm9pZCB0aGlzIChvbiBXaW5kb3dzLCB0aGlzIGlzIG1hcHBlZCB0byBPX05PSU5IRVJJVCkuCisKKyAqICJnaXQtc2hlbGwiIHJlamVjdHMgYSByZXF1ZXN0IHRvIHNlcnZlIGEgcmVwb3NpdG9yeSB3aG9zZSBuYW1lCisgICBiZWdpbnMgd2l0aCBhIGRhc2gsIHdoaWNoIG1ha2VzIGl0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBnZXQgaXQKKyAgIGNvbmZ1c2VkIGludG8gc3Bhd25pbmcgc2VydmljZSBwcm9ncmFtcyBsaWtlICJnaXQtdXBsb2FkLXBhY2siIHdpdGgKKyAgIGFuIG9wdGlvbiBsaWtlICItLWhlbHAiLCB3aGljaCBpbiB0dXJuIHdvdWxkIHNwYXduIGFuIGludGVyYWN0aXZlCisgICBwYWdlciwgaW5zdGVhZCBvZiB3b3JraW5nIHdpdGggdGhlIHJlcG9zaXRvcnkgdXNlciBhc2tlZCB0byBhY2Nlc3MKKyAgIChpLmUuIHRoZSBvbmUgd2hvc2UgbmFtZSBpcyAiLS1oZWxwIikuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4MzEzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi45LjUudHh0CkBAIC0wLDAgKzEsNCBAQAorR2l0IHYyLjkuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZvcndhcmQtcG9ydHMgdGhlIGZpeCBmb3IgInNzaDovLy4uLiIgVVJMIGZyb20gR2l0IHYyLjcuNgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxNWNhYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTAsMCArMSw1NzUgQEAKK1N1Ym1pdHRpbmcgUGF0Y2hlcworPT09PT09PT09PT09PT09PT09CisKKz09IEd1aWRlbGluZXMKKworSGVyZSBhcmUgc29tZSBndWlkZWxpbmVzIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gY29udHJpYnV0ZSB0aGVpciBjb2RlCit0byB0aGlzIHNvZnR3YXJlLgorCitbW2Jhc2UtYnJhbmNoXV0KKz09PSBEZWNpZGUgd2hhdCB0byBiYXNlIHlvdXIgd29yayBvbi4KKworSW4gZ2VuZXJhbCwgYWx3YXlzIGJhc2UgeW91ciB3b3JrIG9uIHRoZSBvbGRlc3QgYnJhbmNoIHRoYXQgeW91cgorY2hhbmdlIGlzIHJlbGV2YW50IHRvLgorCisqIEEgYnVnZml4IHNob3VsZCBiZSBiYXNlZCBvbiBgbWFpbnRgIGluIGdlbmVyYWwuIElmIHRoZSBidWcgaXMgbm90CisgIHByZXNlbnQgaW4gYG1haW50YCwgYmFzZSBpdCBvbiBgbWFzdGVyYC4gRm9yIGEgYnVnIHRoYXQncyBub3QgeWV0CisgIGluIGBtYXN0ZXJgLCBmaW5kIHRoZSB0b3BpYyB0aGF0IGludHJvZHVjZXMgdGhlIHJlZ3Jlc3Npb24sIGFuZAorICBiYXNlIHlvdXIgd29yayBvbiB0aGUgdGlwIG9mIHRoZSB0b3BpYy4KKworKiBBIG5ldyBmZWF0dXJlIHNob3VsZCBiZSBiYXNlZCBvbiBgbWFzdGVyYCBpbiBnZW5lcmFsLiBJZiB0aGUgbmV3CisgIGZlYXR1cmUgZGVwZW5kcyBvbiBhIHRvcGljIHRoYXQgaXMgaW4gYHB1YCwgYnV0IG5vdCBpbiBgbWFzdGVyYCwKKyAgYmFzZSB5b3VyIHdvcmsgb24gdGhlIHRpcCBvZiB0aGF0IHRvcGljLgorCisqIENvcnJlY3Rpb25zIGFuZCBlbmhhbmNlbWVudHMgdG8gYSB0b3BpYyBub3QgeWV0IGluIGBtYXN0ZXJgIHNob3VsZAorICBiZSBiYXNlZCBvbiB0aGUgdGlwIG9mIHRoYXQgdG9waWMuIElmIHRoZSB0b3BpYyBoYXMgbm90IGJlZW4gbWVyZ2VkCisgIHRvIGBuZXh0YCwgaXQncyBhbHJpZ2h0IHRvIGFkZCBhIG5vdGUgdG8gc3F1YXNoIG1pbm9yIGNvcnJlY3Rpb25zCisgIGludG8gdGhlIHNlcmllcy4KKworKiBJbiB0aGUgZXhjZXB0aW9uYWwgY2FzZSB0aGF0IGEgbmV3IGZlYXR1cmUgZGVwZW5kcyBvbiBzZXZlcmFsIHRvcGljcworICBub3QgaW4gYG1hc3RlcmAsIHN0YXJ0IHdvcmtpbmcgb24gYG5leHRgIG9yIGBwdWAgcHJpdmF0ZWx5IGFuZCBzZW5kCisgIG91dCBwYXRjaGVzIGZvciBkaXNjdXNzaW9uLiBCZWZvcmUgdGhlIGZpbmFsIG1lcmdlLCB5b3UgbWF5IGhhdmUgdG8KKyAgd2FpdCB1bnRpbCBzb21lIG9mIHRoZSBkZXBlbmRlbnQgdG9waWNzIGdyYWR1YXRlIHRvIGBtYXN0ZXJgLCBhbmQKKyAgcmViYXNlIHlvdXIgd29yay4KKworKiBTb21lIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaGF2ZSBkZWRpY2F0ZWQgbWFpbnRhaW5lcnMgd2l0aCB0aGVpciBvd24KKyAgcmVwb3NpdG9yaWVzIChzZWUgdGhlIHNlY3Rpb24gIlN1YnN5c3RlbXMiIGJlbG93KS4gIENoYW5nZXMgdG8KKyAgdGhlc2UgcGFydHMgc2hvdWxkIGJlIGJhc2VkIG9uIHRoZWlyIHRyZWVzLgorCitUbyBmaW5kIHRoZSB0aXAgb2YgYSB0b3BpYyBicmFuY2gsIHJ1biBgZ2l0IGxvZyAtLWZpcnN0LXBhcmVudAorbWFzdGVyLi5wdWAgYW5kIGxvb2sgZm9yIHRoZSBtZXJnZSBjb21taXQuIFRoZSBzZWNvbmQgcGFyZW50IG9mIHRoaXMKK2NvbW1pdCBpcyB0aGUgdGlwIG9mIHRoZSB0b3BpYyBicmFuY2guCisKK1tbc2VwYXJhdGUtY29tbWl0c11dCis9PT0gTWFrZSBzZXBhcmF0ZSBjb21taXRzIGZvciBsb2dpY2FsbHkgc2VwYXJhdGUgY2hhbmdlcy4KKworVW5sZXNzIHlvdXIgcGF0Y2ggaXMgcmVhbGx5IHRyaXZpYWwsIHlvdSBzaG91bGQgbm90IGJlIHNlbmRpbmcKK291dCBhIHBhdGNoIHRoYXQgd2FzIGdlbmVyYXRlZCBiZXR3ZWVuIHlvdXIgd29ya2luZyB0cmVlIGFuZAoreW91ciBjb21taXQgaGVhZC4gIEluc3RlYWQsIGFsd2F5cyBtYWtlIGEgY29tbWl0IHdpdGggY29tcGxldGUKK2NvbW1pdCBtZXNzYWdlIGFuZCBnZW5lcmF0ZSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20geW91cgorcmVwb3NpdG9yeS4gIEl0IGlzIGEgZ29vZCBkaXNjaXBsaW5lLgorCitHaXZlIGFuIGV4cGxhbmF0aW9uIGZvciB0aGUgY2hhbmdlKHMpIHRoYXQgaXMgZGV0YWlsZWQgZW5vdWdoIHNvCit0aGF0IHBlb3BsZSBjYW4ganVkZ2UgaWYgaXQgaXMgZ29vZCB0aGluZyB0byBkbywgd2l0aG91dCByZWFkaW5nCit0aGUgYWN0dWFsIHBhdGNoIHRleHQgdG8gZGV0ZXJtaW5lIGhvdyB3ZWxsIHRoZSBjb2RlIGRvZXMgd2hhdAordGhlIGV4cGxhbmF0aW9uIHByb21pc2VzIHRvIGRvLgorCitJZiB5b3VyIGRlc2NyaXB0aW9uIHN0YXJ0cyB0byBnZXQgdG9vIGxvbmcsIHRoYXQncyBhIHNpZ24gdGhhdCB5b3UKK3Byb2JhYmx5IG5lZWQgdG8gc3BsaXQgdXAgeW91ciBjb21taXQgdG8gZmluZXIgZ3JhaW5lZCBwaWVjZXMuCitUaGF0IGJlaW5nIHNhaWQsIHBhdGNoZXMgd2hpY2ggcGxhaW5seSBkZXNjcmliZSB0aGUgdGhpbmdzIHRoYXQKK2hlbHAgcmV2aWV3ZXJzIGNoZWNrIHRoZSBwYXRjaCwgYW5kIGZ1dHVyZSBtYWludGFpbmVycyB1bmRlcnN0YW5kCit0aGUgY29kZSwgYXJlIHRoZSBtb3N0IGJlYXV0aWZ1bCBwYXRjaGVzLiAgRGVzY3JpcHRpb25zIHRoYXQgc3VtbWFyaXplCit0aGUgcG9pbnQgaW4gdGhlIHN1YmplY3Qgd2VsbCwgYW5kIGRlc2NyaWJlIHRoZSBtb3RpdmF0aW9uIGZvciB0aGUKK2NoYW5nZSwgdGhlIGFwcHJvYWNoIHRha2VuIGJ5IHRoZSBjaGFuZ2UsIGFuZCBpZiByZWxldmFudCBob3cgdGhpcworZGlmZmVycyBzdWJzdGFudGlhbGx5IGZyb20gdGhlIHByaW9yIHZlcnNpb24sIGFyZSBhbGwgZ29vZCB0aGluZ3MKK3RvIGhhdmUuCisKK01ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRlc3RzIGZvciB0aGUgYnVnIHlvdSBhcmUgZml4aW5nLiAgU2VlCitgdC9SRUFETUVgIGZvciBndWlkYW5jZS4KKworW1t0ZXN0c11dCitXaGVuIGFkZGluZyBhIG5ldyBmZWF0dXJlLCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBuZXcgdGVzdHMgdG8gc2hvdwordGhlIGZlYXR1cmUgdHJpZ2dlcnMgdGhlIG5ldyBiZWhhdmlvciB3aGVuIGl0IHNob3VsZCwgYW5kIHRvIHNob3cgdGhlCitmZWF0dXJlIGRvZXMgbm90IHRyaWdnZXIgd2hlbiBpdCBzaG91bGRuJ3QuICBBZnRlciBhbnkgY29kZSBjaGFuZ2UsIG1ha2UKK3N1cmUgdGhhdCB0aGUgZW50aXJlIHRlc3Qgc3VpdGUgcGFzc2VzLgorCitJZiB5b3UgaGF2ZSBhbiBhY2NvdW50IGF0IEdpdEh1YiAoYW5kIHlvdSBjYW4gZ2V0IG9uZSBmb3IgZnJlZSB0byB3b3JrCitvbiBvcGVuIHNvdXJjZSBwcm9qZWN0cyksIHlvdSBjYW4gdXNlIHRoZWlyIFRyYXZpcyBDSSBpbnRlZ3JhdGlvbiB0bwordGVzdCB5b3VyIGNoYW5nZXMgb24gTGludXgsIE1hYyAoYW5kIGhvcGVmdWxseSBzb29uIFdpbmRvd3MpLiAgU2VlCitHaXRIdWItVHJhdmlzIENJIGhpbnRzIHNlY3Rpb24gZm9yIGRldGFpbHMuCisKK0RvIG5vdCBmb3JnZXQgdG8gdXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uIHRvIGRlc2NyaWJlIHRoZSB1cGRhdGVkCitiZWhhdmlvciBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdGluZyBkb2N1bWVudGF0aW9uIHNldCBmb3JtYXRzCit3ZWxsICh0cnkgdGhlIERvY3VtZW50YXRpb24vZG9jLWRpZmYgc2NyaXB0KS4KKworV2UgY3VycmVudGx5IGhhdmUgYSBsaWJlcmFsIG1peHR1cmUgb2YgVVMgYW5kIFVLIEVuZ2xpc2ggbm9ybXMgZm9yCitzcGVsbGluZyBhbmQgZ3JhbW1hciwgd2hpY2ggaXMgc29tZXdoYXQgdW5mb3J0dW5hdGUuICBBIGh1Z2UgcGF0Y2ggdGhhdAordG91Y2hlcyB0aGUgZmlsZXMgYWxsIG92ZXIgdGhlIHBsYWNlIG9ubHkgdG8gY29ycmVjdCB0aGUgaW5jb25zaXN0ZW5jeQoraXMgbm90IHdlbGNvbWUsIHRob3VnaC4gIFBvdGVudGlhbCBjbGFzaGVzIHdpdGggb3RoZXIgY2hhbmdlcyB0aGF0IGNhbgorcmVzdWx0IGZyb20gc3VjaCBhIHBhdGNoIGFyZSBub3Qgd29ydGggaXQuICBXZSBwcmVmZXIgdG8gZ3JhZHVhbGx5CityZWNvbmNpbGUgdGhlIGluY29uc2lzdGVuY2llcyBpbiBmYXZvciBvZiBVUyBFbmdsaXNoLCB3aXRoIHNtYWxsIGFuZAorZWFzaWx5IGRpZ2VzdGlibGUgcGF0Y2hlcywgYXMgYSBzaWRlIGVmZmVjdCBvZiBkb2luZyBzb21lIG90aGVyIHJlYWwKK3dvcmsgaW4gdGhlIHZpY2luaXR5IChlLmcuIHJld3JpdGluZyBhIHBhcmFncmFwaCBmb3IgY2xhcml0eSwgd2hpbGUKK3R1cm5pbmcgZW5fVUsgc3BlbGxpbmcgdG8gZW5fVVMpLiAgT2J2aW91cyB0eXBvZ3JhcGhpY2FsIGZpeGVzIGFyZSBtdWNoCittb3JlIHdlbGNvbWVkICgidGVoIC0+ICJ0aGUiKSwgcHJlZmVyYWJseSBzdWJtaXR0ZWQgYXMgaW5kZXBlbmRlbnQKK3BhdGNoZXMgc2VwYXJhdGUgZnJvbSBvdGhlciBkb2N1bWVudGF0aW9uIGNoYW5nZXMuCisKK1tbd2hpdGVzcGFjZS1jaGVja11dCitPaCwgYW5vdGhlciB0aGluZy4gIFdlIGFyZSBwaWNreSBhYm91dCB3aGl0ZXNwYWNlcy4gIE1ha2Ugc3VyZSB5b3VyCitjaGFuZ2VzIGRvIG5vdCB0cmlnZ2VyIGVycm9ycyB3aXRoIHRoZSBzYW1wbGUgcHJlLWNvbW1pdCBob29rIHNoaXBwZWQKK2luIGB0ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXRgLiAgVG8gaGVscCBlbnN1cmUgdGhpcyBkb2VzIG5vdCBoYXBwZW4sCitydW4gYGdpdCBkaWZmIC0tY2hlY2tgIG9uIHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNvbW1pdC4KKworW1tkZXNjcmliZS1jaGFuZ2VzXV0KKz09PSBEZXNjcmliZSB5b3VyIGNoYW5nZXMgd2VsbC4KKworVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIHNob3VsZCBiZSBhIHNob3J0IGRlc2NyaXB0aW9uICg1MAorY2hhcmFjdGVycyBpcyB0aGUgc29mdCBsaW1pdCwgc2VlIERJU0NVU1NJT04gaW4gbGlua2dpdDpnaXQtY29tbWl0WzFdKSwKK2FuZCBzaG91bGQgc2tpcCB0aGUgZnVsbCBzdG9wLiAgSXQgaXMgYWxzbyBjb252ZW50aW9uYWwgaW4gbW9zdCBjYXNlcyB0bworcHJlZml4IHRoZSBmaXJzdCBsaW5lIHdpdGggImFyZWE6ICIgd2hlcmUgdGhlIGFyZWEgaXMgYSBmaWxlbmFtZSBvcgoraWRlbnRpZmllciBmb3IgdGhlIGdlbmVyYWwgYXJlYSBvZiB0aGUgY29kZSBiZWluZyBtb2RpZmllZCwgZS5nLgorCisqIGRvYzogY2xhcmlmeSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNpZ24tb2ZmIGFuZCBwZ3Atc2lnbmluZworKiBnaXRob29rcy50eHQ6IGltcHJvdmUgdGhlIGludHJvIHNlY3Rpb24KKworSWYgaW4gZG91YnQgd2hpY2ggaWRlbnRpZmllciB0byB1c2UsIHJ1biBgZ2l0IGxvZyAtLW5vLW1lcmdlc2Agb24gdGhlCitmaWxlcyB5b3UgYXJlIG1vZGlmeWluZyB0byBzZWUgdGhlIGN1cnJlbnQgY29udmVudGlvbnMuCisKK1tbc3VtbWFyeS1zZWN0aW9uXV0KK0l0J3MgY3VzdG9tYXJ5IHRvIHN0YXJ0IHRoZSByZW1haW5kZXIgb2YgdGhlIGZpcnN0IGxpbmUgYWZ0ZXIgImFyZWE6ICIKK3dpdGggYSBsb3dlci1jYXNlIGxldHRlci4gRS5nLiAiZG9jOiBjbGFyaWZ5Li4uIiwgbm90ICJkb2M6CitDbGFyaWZ5Li4uIiwgb3IgImdpdGhvb2tzLnR4dDogaW1wcm92ZS4uLiIsIG5vdCAiZ2l0aG9va3MudHh0OgorSW1wcm92ZS4uLiIuCisKK1tbbWVhbmluZ2Z1bC1tZXNzYWdlXV0KK1RoZSBib2R5IHNob3VsZCBwcm92aWRlIGEgbWVhbmluZ2Z1bCBjb21taXQgbWVzc2FnZSwgd2hpY2g6CisKKy4gZXhwbGFpbnMgdGhlIHByb2JsZW0gdGhlIGNoYW5nZSB0cmllcyB0byBzb2x2ZSwgaS5lLiB3aGF0IGlzIHdyb25nCisgIHdpdGggdGhlIGN1cnJlbnQgY29kZSB3aXRob3V0IHRoZSBjaGFuZ2UuCisKKy4ganVzdGlmaWVzIHRoZSB3YXkgdGhlIGNoYW5nZSBzb2x2ZXMgdGhlIHByb2JsZW0sIGkuZS4gd2h5IHRoZQorICByZXN1bHQgd2l0aCB0aGUgY2hhbmdlIGlzIGJldHRlci4KKworLiBhbHRlcm5hdGUgc29sdXRpb25zIGNvbnNpZGVyZWQgYnV0IGRpc2NhcmRlZCwgaWYgYW55LgorCitbW2ltcGVyYXRpdmUtbW9vZF1dCitEZXNjcmliZSB5b3VyIGNoYW5nZXMgaW4gaW1wZXJhdGl2ZSBtb29kLCBlLmcuICJtYWtlIHh5enp5IGRvIGZyb3R6IgoraW5zdGVhZCBvZiAiW1RoaXMgcGF0Y2hdIG1ha2VzIHh5enp5IGRvIGZyb3R6IiBvciAiW0ldIGNoYW5nZWQgeHl6enkKK3RvIGRvIGZyb3R6IiwgYXMgaWYgeW91IGFyZSBnaXZpbmcgb3JkZXJzIHRvIHRoZSBjb2RlYmFzZSB0byBjaGFuZ2UKK2l0cyBiZWhhdmlvci4gIFRyeSB0byBtYWtlIHN1cmUgeW91ciBleHBsYW5hdGlvbiBjYW4gYmUgdW5kZXJzdG9vZAord2l0aG91dCBleHRlcm5hbCByZXNvdXJjZXMuIEluc3RlYWQgb2YgZ2l2aW5nIGEgVVJMIHRvIGEgbWFpbGluZyBsaXN0CithcmNoaXZlLCBzdW1tYXJpemUgdGhlIHJlbGV2YW50IHBvaW50cyBvZiB0aGUgZGlzY3Vzc2lvbi4KKworW1tjb21taXQtcmVmZXJlbmNlXV0KK0lmIHlvdSB3YW50IHRvIHJlZmVyZW5jZSBhIHByZXZpb3VzIGNvbW1pdCBpbiB0aGUgaGlzdG9yeSBvZiBhIHN0YWJsZQorYnJhbmNoLCB1c2UgdGhlIGZvcm1hdCAiYWJicmV2aWF0ZWQgaGFzaCAoc3ViamVjdCwgZGF0ZSkiLCBsaWtlIHRoaXM6CisKKy4uLi4KKwlDb21taXQgZjg2YTM3NCAocGFjay1iaXRtYXAuYzogZml4IGEgbWVtbGVhaywgMjAxNS0wMy0zMCkKKwlub3RpY2VkIHRoYXQgLi4uCisuLi4uCisKK1RoZSAiQ29weSBjb21taXQgc3VtbWFyeSIgY29tbWFuZCBvZiBnaXRrIGNhbiBiZSB1c2VkIHRvIG9idGFpbiB0aGlzCitmb3JtYXQgKHdpdGggdGhlIHN1YmplY3QgZW5jbG9zZWQgaW4gYSBwYWlyIG9mIGRvdWJsZS1xdW90ZXMpLCBvciB0aGlzCitpbnZvY2F0aW9uIG9mIGBnaXQgc2hvd2A6CisKKy4uLi4KKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1yZWZlcmVuY2UgPGNvbW1pdD4KKy4uLi4KKworb3IsIG9uIGFuIG9sZGVyIHZlcnNpb24gb2YgR2l0IHdpdGhvdXQgc3VwcG9ydCBmb3IgLS1wcmV0dHk9cmVmZXJlbmNlOgorCisuLi4uCisJZ2l0IHNob3cgLXMgLS1kYXRlPXNob3J0IC0tcHJldHR5PSdmb3JtYXQ6JWggKCVzLCAlYWQpJyA8Y29tbWl0PgorLi4uLgorCitbW2dpdC10b29sc11dCis9PT0gR2VuZXJhdGUgeW91ciBwYXRjaCB1c2luZyBHaXQgdG9vbHMgb3V0IG9mIHlvdXIgY29tbWl0cy4KKworR2l0IGJhc2VkIGRpZmYgdG9vbHMgZ2VuZXJhdGUgdW5pZGlmZiB3aGljaCBpcyB0aGUgcHJlZmVycmVkIGZvcm1hdC4KKworWW91IGRvIG5vdCBoYXZlIHRvIGJlIGFmcmFpZCB0byB1c2UgYC1NYCBvcHRpb24gdG8gYGdpdCBkaWZmYCBvcgorYGdpdCBmb3JtYXQtcGF0Y2hgLCBpZiB5b3VyIHBhdGNoIGludm9sdmVzIGZpbGUgcmVuYW1lcy4gIFRoZQorcmVjZWl2aW5nIGVuZCBjYW4gaGFuZGxlIHRoZW0ganVzdCBmaW5lLgorCitbW3Jldmlldy1wYXRjaF1dCitQbGVhc2UgbWFrZSBzdXJlIHlvdXIgcGF0Y2ggZG9lcyBub3QgYWRkIGNvbW1lbnRlZCBvdXQgZGVidWdnaW5nIGNvZGUsCitvciBpbmNsdWRlIGFueSBleHRyYSBmaWxlcyB3aGljaCBkbyBub3QgcmVsYXRlIHRvIHdoYXQgeW91ciBwYXRjaAoraXMgdHJ5aW5nIHRvIGFjaGlldmUuIE1ha2Ugc3VyZSB0byByZXZpZXcKK3lvdXIgcGF0Y2ggYWZ0ZXIgZ2VuZXJhdGluZyBpdCwgdG8gZW5zdXJlIGFjY3VyYWN5LiAgQmVmb3JlCitzZW5kaW5nIG91dCwgcGxlYXNlIG1ha2Ugc3VyZSBpdCBjbGVhbmx5IGFwcGxpZXMgdG8gdGhlIGBtYXN0ZXJgCiticmFuY2ggaGVhZC4gIElmIHlvdSBhcmUgcHJlcGFyaW5nIGEgd29yayBiYXNlZCBvbiAibmV4dCIgYnJhbmNoLAordGhhdCBpcyBmaW5lLCBidXQgcGxlYXNlIG1hcmsgaXQgYXMgc3VjaC4KKworW1tzZW5kLXBhdGNoZXNdXQorPT09IFNlbmRpbmcgeW91ciBwYXRjaGVzLgorCis6c2VjdXJpdHktbWw6IGZvb3Rub3RlcmVmOltzZWN1cml0eS1tbCxUaGUgR2l0IFNlY3VyaXR5IG1haWxpbmcgbGlzdDogZ2l0LXNlY3VyaXR5QGdvb2dsZWdyb3Vwcy5jb21dCisKK0JlZm9yZSBzZW5kaW5nIGFueSBwYXRjaGVzLCBwbGVhc2Ugbm90ZSB0aGF0IHBhdGNoZXMgdGhhdCBtYXkgYmUKK3NlY3VyaXR5IHJlbGV2YW50IHNob3VsZCBiZSBzdWJtaXR0ZWQgcHJpdmF0ZWx5IHRvIHRoZSBHaXQgU2VjdXJpdHkKK21haWxpbmcgbGlzdHtzZWN1cml0eS1tbH0sIGluc3RlYWQgb2YgdGhlIHB1YmxpYyBtYWlsaW5nIGxpc3QuCisKK0xlYXJuIHRvIHVzZSBmb3JtYXQtcGF0Y2ggYW5kIHNlbmQtZW1haWwgaWYgcG9zc2libGUuICBUaGVzZSBjb21tYW5kcworYXJlIG9wdGltaXplZCBmb3IgdGhlIHdvcmtmbG93IG9mIHNlbmRpbmcgcGF0Y2hlcywgYXZvaWRpbmcgbWFueSB3YXlzCit5b3VyIGV4aXN0aW5nIGUtbWFpbCBjbGllbnQgdGhhdCBpcyBvcHRpbWl6ZWQgZm9yICJtdWx0aXBhcnQvKiIgbWltZQordHlwZSBlLW1haWxzIHRvIGNvcnJ1cHQgYW5kIHJlbmRlciB5b3VyIHBhdGNoZXMgdW51c2FibGUuCisKK1Blb3BsZSBvbiB0aGUgR2l0IG1haWxpbmcgbGlzdCBuZWVkIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQKK2NvbW1lbnQgb24gdGhlIGNoYW5nZXMgeW91IGFyZSBzdWJtaXR0aW5nLiAgSXQgaXMgaW1wb3J0YW50IGZvcgorYSBkZXZlbG9wZXIgdG8gYmUgYWJsZSB0byAicXVvdGUiIHlvdXIgY2hhbmdlcywgdXNpbmcgc3RhbmRhcmQKK2UtbWFpbCB0b29scywgc28gdGhhdCB0aGV5IG1heSBjb21tZW50IG9uIHNwZWNpZmljIHBvcnRpb25zIG9mCit5b3VyIGNvZGUuICBGb3IgdGhpcyByZWFzb24sIGVhY2ggcGF0Y2ggc2hvdWxkIGJlIHN1Ym1pdHRlZAorImlubGluZSIgaW4gYSBzZXBhcmF0ZSBtZXNzYWdlLgorCitNdWx0aXBsZSByZWxhdGVkIHBhdGNoZXMgc2hvdWxkIGJlIGdyb3VwZWQgaW50byB0aGVpciBvd24gZS1tYWlsCit0aHJlYWQgdG8gaGVscCByZWFkZXJzIGZpbmQgYWxsIHBhcnRzIG9mIHRoZSBzZXJpZXMuICBUbyB0aGF0IGVuZCwKK3NlbmQgdGhlbSBhcyByZXBsaWVzIHRvIGVpdGhlciBhbiBhZGRpdGlvbmFsICJjb3ZlciBsZXR0ZXIiIG1lc3NhZ2UKKyhzZWUgYmVsb3cpLCB0aGUgZmlyc3QgcGF0Y2gsIG9yIHRoZSByZXNwZWN0aXZlIHByZWNlZGluZyBwYXRjaC4KKworSWYgeW91ciBsb2cgbWVzc2FnZSAoaW5jbHVkaW5nIHlvdXIgbmFtZSBvbiB0aGUKK1NpZ25lZC1vZmYtYnkgbGluZSkgaXMgbm90IHdyaXRhYmxlIGluIEFTQ0lJLCBtYWtlIHN1cmUgdGhhdAoreW91IHNlbmQgb2ZmIGEgbWVzc2FnZSBpbiB0aGUgY29ycmVjdCBlbmNvZGluZy4KKworV0FSTklORzogQmUgd2FyeSBvZiB5b3VyIE1VQXMgd29yZC13cmFwCitjb3JydXB0aW5nIHlvdXIgcGF0Y2guICBEbyBub3QgY3V0LW4tcGFzdGUgeW91ciBwYXRjaDsgeW91IGNhbgorbG9zZSB0YWJzIHRoYXQgd2F5IGlmIHlvdSBhcmUgbm90IGNhcmVmdWwuCisKK0l0IGlzIGEgY29tbW9uIGNvbnZlbnRpb24gdG8gcHJlZml4IHlvdXIgc3ViamVjdCBsaW5lIHdpdGgKK1tQQVRDSF0uICBUaGlzIGxldHMgcGVvcGxlIGVhc2lseSBkaXN0aW5ndWlzaCBwYXRjaGVzIGZyb20gb3RoZXIKK2UtbWFpbCBkaXNjdXNzaW9ucy4gIFVzZSBvZiBtYXJrZXJzIGluIGFkZGl0aW9uIHRvIFBBVENIIHdpdGhpbgordGhlIGJyYWNrZXRzIHRvIGRlc2NyaWJlIHRoZSBuYXR1cmUgb2YgdGhlIHBhdGNoIGlzIGFsc28KK2VuY291cmFnZWQuICBFLmcuIFtSRkMgUEFUQ0hdICh3aGVyZSBSRkMgc3RhbmRzIGZvciAicmVxdWVzdCBmb3IKK2NvbW1lbnRzIikgaXMgb2Z0ZW4gdXNlZCB0byBpbmRpY2F0ZSBhIHBhdGNoIG5lZWRzIGZ1cnRoZXIKK2Rpc2N1c3Npb24gYmVmb3JlIGJlaW5nIGFjY2VwdGVkLCBbUEFUQ0ggdjJdLCBbUEFUQ0ggdjNdIGV0Yy4KK2FyZSBvZnRlbiBzZWVuIHdoZW4geW91IGFyZSBzZW5kaW5nIGFuIHVwZGF0ZSB0byB3aGF0IHlvdSBoYXZlCitwcmV2aW91c2x5IHNlbnQuCisKK1RoZSBgZ2l0IGZvcm1hdC1wYXRjaGAgY29tbWFuZCBmb2xsb3dzIHRoZSBiZXN0IGN1cnJlbnQgcHJhY3RpY2UgdG8KK2Zvcm1hdCB0aGUgYm9keSBvZiBhbiBlLW1haWwgbWVzc2FnZS4gIEF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCitwYXRjaCBzaG91bGQgY29tZSB5b3VyIGNvbW1pdCBtZXNzYWdlLCBlbmRpbmcgd2l0aCB0aGUKK1NpZ25lZC1vZmYtYnk6IGxpbmVzLCBhbmQgYSBsaW5lIHRoYXQgY29uc2lzdHMgb2YgdGhyZWUgZGFzaGVzLAorZm9sbG93ZWQgYnkgdGhlIGRpZmZzdGF0IGluZm9ybWF0aW9uIGFuZCB0aGUgcGF0Y2ggaXRzZWxmLiAgSWYKK3lvdSBhcmUgZm9yd2FyZGluZyBhIHBhdGNoIGZyb20gc29tZWJvZHkgZWxzZSwgb3B0aW9uYWxseSwgYXQKK3RoZSBiZWdpbm5pbmcgb2YgdGhlIGUtbWFpbCBtZXNzYWdlIGp1c3QgYmVmb3JlIHRoZSBjb21taXQKK21lc3NhZ2Ugc3RhcnRzLCB5b3UgY2FuIHB1dCBhICJGcm9tOiAiIGxpbmUgdG8gbmFtZSB0aGF0IHBlcnNvbi4KK1RvIGNoYW5nZSB0aGUgZGVmYXVsdCAiW1BBVENIXSIgaW4gdGhlIHN1YmplY3QgdG8gIls8dGV4dD5dIiwgdXNlCitgZ2l0IGZvcm1hdC1wYXRjaCAtLXN1YmplY3QtcHJlZml4PTx0ZXh0PmAuICBBcyBhIHNob3J0Y3V0LCB5b3UKK2NhbiB1c2UgYC0tcmZjYCBpbnN0ZWFkIG9mIGAtLXN1YmplY3QtcHJlZml4PSJSRkMgUEFUQ0giYCwgb3IKK2AtdiA8bj5gIGluc3RlYWQgb2YgYC0tc3ViamVjdC1wcmVmaXg9IlBBVENIIHY8bj4iYC4KKworWW91IG9mdGVuIHdhbnQgdG8gYWRkIGFkZGl0aW9uYWwgZXhwbGFuYXRpb24gYWJvdXQgdGhlIHBhdGNoLAorb3RoZXIgdGhhbiB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmLiAgUGxhY2Ugc3VjaCAiY292ZXIgbGV0dGVyIgorbWF0ZXJpYWwgYmV0d2VlbiB0aGUgdGhyZWUtZGFzaCBsaW5lIGFuZCB0aGUgZGlmZnN0YXQuICBGb3IKK3BhdGNoZXMgcmVxdWlyaW5nIG11bHRpcGxlIGl0ZXJhdGlvbnMgb2YgcmV2aWV3IGFuZCBkaXNjdXNzaW9uLAorYW4gZXhwbGFuYXRpb24gb2YgY2hhbmdlcyBiZXR3ZWVuIGVhY2ggaXRlcmF0aW9uIGNhbiBiZSBrZXB0IGluCitHaXQtbm90ZXMgYW5kIGluc2VydGVkIGF1dG9tYXRpY2FsbHkgZm9sbG93aW5nIHRoZSB0aHJlZS1kYXNoCitsaW5lIHZpYSBgZ2l0IGZvcm1hdC1wYXRjaCAtLW5vdGVzYC4KKworW1thdHRhY2htZW50XV0KK0RvIG5vdCBhdHRhY2ggdGhlIHBhdGNoIGFzIGEgTUlNRSBhdHRhY2htZW50LCBjb21wcmVzc2VkIG9yIG5vdC4KK0RvIG5vdCBsZXQgeW91ciBlLW1haWwgY2xpZW50IHNlbmQgcXVvdGVkLXByaW50YWJsZS4gIERvIG5vdCBsZXQKK3lvdXIgZS1tYWlsIGNsaWVudCBzZW5kIGZvcm1hdD1mbG93ZWQgd2hpY2ggd291bGQgZGVzdHJveQord2hpdGVzcGFjZXMgaW4geW91ciBwYXRjaGVzLiBNYW55Citwb3B1bGFyIGUtbWFpbCBhcHBsaWNhdGlvbnMgd2lsbCBub3QgYWx3YXlzIHRyYW5zbWl0IGEgTUlNRQorYXR0YWNobWVudCBhcyBwbGFpbiB0ZXh0LCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBjb21tZW50IG9uCit5b3VyIGNvZGUuICBBIE1JTUUgYXR0YWNobWVudCBhbHNvIHRha2VzIGEgYml0IG1vcmUgdGltZSB0bworcHJvY2Vzcy4gIFRoaXMgZG9lcyBub3QgZGVjcmVhc2UgdGhlIGxpa2VsaWhvb2Qgb2YgeW91cgorTUlNRS1hdHRhY2hlZCBjaGFuZ2UgYmVpbmcgYWNjZXB0ZWQsIGJ1dCBpdCBtYWtlcyBpdCBtb3JlIGxpa2VseQordGhhdCBpdCB3aWxsIGJlIHBvc3Rwb25lZC4KKworRXhjZXB0aW9uOiAgSWYgeW91ciBtYWlsZXIgaXMgbWFuZ2xpbmcgcGF0Y2hlcyB0aGVuIHNvbWVvbmUgbWF5IGFzaworeW91IHRvIHJlLXNlbmQgdGhlbSB1c2luZyBNSU1FLCB0aGF0IGlzIE9LLgorCitbW3BncC1zaWduYXR1cmVdXQorRG8gbm90IFBHUCBzaWduIHlvdXIgcGF0Y2guIE1vc3QgbGlrZWx5LCB5b3VyIG1haW50YWluZXIgb3Igb3RoZXIgcGVvcGxlIG9uIHRoZQorbGlzdCB3b3VsZCBub3QgaGF2ZSB5b3VyIFBHUCBrZXkgYW5kIHdvdWxkIG5vdCBib3RoZXIgb2J0YWluaW5nIGl0IGFueXdheS4KK1lvdXIgcGF0Y2ggaXMgbm90IGp1ZGdlZCBieSB3aG8geW91IGFyZTsgYSBnb29kIHBhdGNoIGZyb20gYW4gdW5rbm93biBvcmlnaW4KK2hhcyBhIGZhciBiZXR0ZXIgY2hhbmNlIG9mIGJlaW5nIGFjY2VwdGVkIHRoYW4gYSBwYXRjaCBmcm9tIGEga25vd24sIHJlc3BlY3RlZAorb3JpZ2luIHRoYXQgaXMgZG9uZSBwb29ybHkgb3IgZG9lcyBpbmNvcnJlY3QgdGhpbmdzLgorCitJZiB5b3UgcmVhbGx5IHJlYWxseSByZWFsbHkgcmVhbGx5IHdhbnQgdG8gZG8gYSBQR1Agc2lnbmVkCitwYXRjaCwgZm9ybWF0IGl0IGFzICJtdWx0aXBhcnQvc2lnbmVkIiwgbm90IGEgdGV4dC9wbGFpbiBtZXNzYWdlCit0aGF0IHN0YXJ0cyB3aXRoIGAtLS0tLUJFR0lOIFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tYC4gIFRoYXQgaXMKK25vdCBhIHRleHQvcGxhaW4sIGl0J3Mgc29tZXRoaW5nIGVsc2UuCisKKzpzZWN1cml0eS1tbC1yZWY6IGZvb3Rub3RlcmVmOltzZWN1cml0eS1tbF0KKworQXMgbWVudGlvbmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY3Rpb24sIHBhdGNoZXMgdGhhdCBtYXkgYmUKK3NlY3VyaXR5IHJlbGV2YW50IHNob3VsZCBub3QgYmUgc3VibWl0dGVkIHRvIHRoZSBwdWJsaWMgbWFpbGluZyBsaXN0CittZW50aW9uZWQgYmVsb3csIGJ1dCBzaG91bGQgaW5zdGVhZCBiZSBzZW50IHByaXZhdGVseSB0byB0aGUgR2l0CitTZWN1cml0eSBtYWlsaW5nIGxpc3R7c2VjdXJpdHktbWwtcmVmfS4KKworU2VuZCB5b3VyIHBhdGNoIHdpdGggIlRvOiIgc2V0IHRvIHRoZSBtYWlsaW5nIGxpc3QsIHdpdGggImNjOiIgbGlzdGluZworcGVvcGxlIHdobyBhcmUgaW52b2x2ZWQgaW4gdGhlIGFyZWEgeW91IGFyZSB0b3VjaGluZyAodGhlIGBnaXQKK2NvbnRhY3RzYCBjb21tYW5kIGluIGBjb250cmliL2NvbnRhY3RzL2AgY2FuIGhlbHAgdG8KK2lkZW50aWZ5IHRoZW0pLCB0byBzb2xpY2l0IGNvbW1lbnRzIGFuZCByZXZpZXdzLgorCis6Y3VycmVudC1tYWludGFpbmVyOiBmb290bm90ZTpbVGhlIGN1cnJlbnQgbWFpbnRhaW5lcjogZ2l0c3RlckBwb2JveC5jb21dCis6Z2l0LW1sOiBmb290bm90ZTpbVGhlIG1haWxpbmcgbGlzdDogZ2l0QHZnZXIua2VybmVsLm9yZ10KKworQWZ0ZXIgdGhlIGxpc3QgcmVhY2hlZCBhIGNvbnNlbnN1cyB0aGF0IGl0IGlzIGEgZ29vZCBpZGVhIHRvIGFwcGx5IHRoZQorcGF0Y2gsIHJlLXNlbmQgaXQgd2l0aCAiVG86IiBzZXQgdG8gdGhlIG1haW50YWluZXJ7Y3VycmVudC1tYWludGFpbmVyfSBhbmQgImNjOiIgdGhlCitsaXN0e2dpdC1tbH0gZm9yIGluY2x1c2lvbi4KKworRG8gbm90IGZvcmdldCB0byBhZGQgdHJhaWxlcnMgc3VjaCBhcyBgQWNrZWQtYnk6YCwgYFJldmlld2VkLWJ5OmAgYW5kCitgVGVzdGVkLWJ5OmAgbGluZXMgYXMgbmVjZXNzYXJ5IHRvIGNyZWRpdCBwZW9wbGUgd2hvIGhlbHBlZCB5b3VyCitwYXRjaC4KKworW1tzaWduLW9mZl1dCis9PT0gQ2VydGlmeSB5b3VyIHdvcmsgYnkgYWRkaW5nIHlvdXIgIlNpZ25lZC1vZmYtYnk6ICIgbGluZQorCitUbyBpbXByb3ZlIHRyYWNraW5nIG9mIHdobyBkaWQgd2hhdCwgd2UndmUgYm9ycm93ZWQgdGhlCisic2lnbi1vZmYiIHByb2NlZHVyZSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgcHJvamVjdCBvbiBwYXRjaGVzCit0aGF0IGFyZSBiZWluZyBlbWFpbGVkIGFyb3VuZC4gIEFsdGhvdWdoIGNvcmUgR2l0IGlzIGEgbG90CitzbWFsbGVyIHByb2plY3QgaXQgaXMgYSBnb29kIGRpc2NpcGxpbmUgdG8gZm9sbG93IGl0LgorCitUaGUgc2lnbi1vZmYgaXMgYSBzaW1wbGUgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBleHBsYW5hdGlvbiBmb3IKK3RoZSBwYXRjaCwgd2hpY2ggY2VydGlmaWVzIHRoYXQgeW91IHdyb3RlIGl0IG9yIG90aGVyd2lzZSBoYXZlCit0aGUgcmlnaHQgdG8gcGFzcyBpdCBvbiBhcyBhbiBvcGVuLXNvdXJjZSBwYXRjaC4gIFRoZSBydWxlcyBhcmUKK3ByZXR0eSBzaW1wbGU6IGlmIHlvdSBjYW4gY2VydGlmeSB0aGUgYmVsb3cgRC1DLU86CisKK1tbZGNvXV0KKy5EZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4gMS4xCitfX19fCitCeSBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhpcyBwcm9qZWN0LCBJIGNlcnRpZnkgdGhhdDoKKworYS4gVGhlIGNvbnRyaWJ1dGlvbiB3YXMgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGJ5IG1lIGFuZCBJCisgICBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgaXQgdW5kZXIgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UKKyAgIGluZGljYXRlZCBpbiB0aGUgZmlsZTsgb3IKKworYi4gVGhlIGNvbnRyaWJ1dGlvbiBpcyBiYXNlZCB1cG9uIHByZXZpb3VzIHdvcmsgdGhhdCwgdG8gdGhlIGJlc3QKKyAgIG9mIG15IGtub3dsZWRnZSwgaXMgY292ZXJlZCB1bmRlciBhbiBhcHByb3ByaWF0ZSBvcGVuIHNvdXJjZQorICAgbGljZW5zZSBhbmQgSSBoYXZlIHRoZSByaWdodCB1bmRlciB0aGF0IGxpY2Vuc2UgdG8gc3VibWl0IHRoYXQKKyAgIHdvcmsgd2l0aCBtb2RpZmljYXRpb25zLCB3aGV0aGVyIGNyZWF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydAorICAgYnkgbWUsIHVuZGVyIHRoZSBzYW1lIG9wZW4gc291cmNlIGxpY2Vuc2UgKHVubGVzcyBJIGFtCisgICBwZXJtaXR0ZWQgdG8gc3VibWl0IHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UpLCBhcyBpbmRpY2F0ZWQKKyAgIGluIHRoZSBmaWxlOyBvcgorCitjLiBUaGUgY29udHJpYnV0aW9uIHdhcyBwcm92aWRlZCBkaXJlY3RseSB0byBtZSBieSBzb21lIG90aGVyCisgICBwZXJzb24gd2hvIGNlcnRpZmllZCAoYSksIChiKSBvciAoYykgYW5kIEkgaGF2ZSBub3QgbW9kaWZpZWQKKyAgIGl0LgorCitkLiBJIHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgdGhpcyBwcm9qZWN0IGFuZCB0aGUgY29udHJpYnV0aW9uCisgICBhcmUgcHVibGljIGFuZCB0aGF0IGEgcmVjb3JkIG9mIHRoZSBjb250cmlidXRpb24gKGluY2x1ZGluZyBhbGwKKyAgIHBlcnNvbmFsIGluZm9ybWF0aW9uIEkgc3VibWl0IHdpdGggaXQsIGluY2x1ZGluZyBteSBzaWduLW9mZikgaXMKKyAgIG1haW50YWluZWQgaW5kZWZpbml0ZWx5IGFuZCBtYXkgYmUgcmVkaXN0cmlidXRlZCBjb25zaXN0ZW50IHdpdGgKKyAgIHRoaXMgcHJvamVjdCBvciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZShzKSBpbnZvbHZlZC4KK19fX18KKwordGhlbiB5b3UganVzdCBhZGQgYSBsaW5lIHNheWluZworCisuLi4uCisJU2lnbmVkLW9mZi1ieTogUmFuZG9tIEogRGV2ZWxvcGVyIDxyYW5kb21AZGV2ZWxvcGVyLmV4YW1wbGUub3JnPgorLi4uLgorCitUaGlzIGxpbmUgY2FuIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgR2l0IGlmIHlvdSBydW4gdGhlIGdpdC1jb21taXQKK2NvbW1hbmQgd2l0aCB0aGUgLXMgb3B0aW9uLgorCitOb3RpY2UgdGhhdCB5b3UgY2FuIHBsYWNlIHlvdXIgb3duIFNpZ25lZC1vZmYtYnk6IGxpbmUgd2hlbgorZm9yd2FyZGluZyBzb21lYm9keSBlbHNlJ3MgcGF0Y2ggd2l0aCB0aGUgYWJvdmUgcnVsZXMgZm9yCitELUMtTy4gIEluZGVlZCB5b3UgYXJlIGVuY291cmFnZWQgdG8gZG8gc28uICBEbyBub3QgZm9yZ2V0IHRvCitwbGFjZSBhbiBpbi1ib2R5ICJGcm9tOiAiIGxpbmUgYXQgdGhlIGJlZ2lubmluZyB0byBwcm9wZXJseSBhdHRyaWJ1dGUKK3RoZSBjaGFuZ2UgdG8gaXRzIHRydWUgYXV0aG9yIChzZWUgKDIpIGFib3ZlKS4KKworW1tyZWFsLW5hbWVdXQorQWxzbyBub3RpY2UgdGhhdCBhIHJlYWwgbmFtZSBpcyB1c2VkIGluIHRoZSBTaWduZWQtb2ZmLWJ5OiBsaW5lLiBQbGVhc2UKK2Rvbid0IGhpZGUgeW91ciByZWFsIG5hbWUuCisKK1tbY29tbWl0LXRyYWlsZXJzXV0KK0lmIHlvdSBsaWtlLCB5b3UgY2FuIHB1dCBleHRyYSB0YWdzIGF0IHRoZSBlbmQ6CisKKy4gYFJlcG9ydGVkLWJ5OmAgaXMgdXNlZCB0byBjcmVkaXQgc29tZW9uZSB3aG8gZm91bmQgdGhlIGJ1ZyB0aGF0CisgIHRoZSBwYXRjaCBhdHRlbXB0cyB0byBmaXguCisuIGBBY2tlZC1ieTpgIHNheXMgdGhhdCB0aGUgcGVyc29uIHdobyBpcyBtb3JlIGZhbWlsaWFyIHdpdGggdGhlIGFyZWEKKyAgdGhlIHBhdGNoIGF0dGVtcHRzIHRvIG1vZGlmeSBsaWtlZCB0aGUgcGF0Y2guCisuIGBSZXZpZXdlZC1ieTpgLCB1bmxpa2UgdGhlIG90aGVyIHRhZ3MsIGNhbiBvbmx5IGJlIG9mZmVyZWQgYnkgdGhlCisgIHJldmlld2VyIGFuZCBtZWFucyB0aGF0IHNoZSBpcyBjb21wbGV0ZWx5IHNhdGlzZmllZCB0aGF0IHRoZSBwYXRjaAorICBpcyByZWFkeSBmb3IgYXBwbGljYXRpb24uICBJdCBpcyB1c3VhbGx5IG9mZmVyZWQgb25seSBhZnRlciBhCisgIGRldGFpbGVkIHJldmlldy4KKy4gYFRlc3RlZC1ieTpgIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcGVyc29uIGFwcGxpZWQgdGhlIHBhdGNoCisgIGFuZCBmb3VuZCBpdCB0byBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdC4KKworWW91IGNhbiBhbHNvIGNyZWF0ZSB5b3VyIG93biB0YWcgb3IgdXNlIG9uZSB0aGF0J3MgaW4gY29tbW9uIHVzYWdlCitzdWNoIGFzICJUaGFua3MtdG86IiwgIkJhc2VkLW9uLXBhdGNoLWJ5OiIsIG9yICJNZW50b3JlZC1ieToiLgorCis9PSBTdWJzeXN0ZW1zIHdpdGggZGVkaWNhdGVkIG1haW50YWluZXJzCisKK1NvbWUgcGFydHMgb2YgdGhlIHN5c3RlbSBoYXZlIGRlZGljYXRlZCBtYWludGFpbmVycyB3aXRoIHRoZWlyIG93bgorcmVwb3NpdG9yaWVzLgorCistIGBnaXQtZ3VpL2AgY29tZXMgZnJvbSBnaXQtZ3VpIHByb2plY3QsIG1haW50YWluZWQgYnkgUHJhdHl1c2ggWWFkYXY6CisKKwlodHRwczovL2dpdGh1Yi5jb20vcHJhdGkwMTAwL2dpdC1ndWkuZ2l0CisKKy0gYGdpdGstZ2l0L2AgY29tZXMgZnJvbSBQYXVsIE1hY2tlcnJhcydzIGdpdGsgcHJvamVjdDoKKworCWdpdDovL296bGFicy5vcmcvfnBhdWx1cy9naXRrCisKKy0gYHBvL2AgY29tZXMgZnJvbSB0aGUgbG9jYWxpemF0aW9uIGNvb3JkaW5hdG9yLCBKaWFuZyBYaW46CisKKwlodHRwczovL2dpdGh1Yi5jb20vZ2l0LWwxMG4vZ2l0LXBvLworCitQYXRjaGVzIHRvIHRoZXNlIHBhcnRzIHNob3VsZCBiZSBiYXNlZCBvbiB0aGVpciB0cmVlcy4KKworW1twYXRjaC1mbG93XV0KKz09IEFuIGlkZWFsIHBhdGNoIGZsb3cKKworSGVyZSBpcyBhbiBpZGVhbCBwYXRjaCBmbG93IGZvciB0aGlzIHByb2plY3QgdGhlIGN1cnJlbnQgbWFpbnRhaW5lcgorc3VnZ2VzdHMgdG8gdGhlIGNvbnRyaWJ1dG9yczoKKworLiBZb3UgY29tZSB1cCB3aXRoIGFuIGl0Y2guICBZb3UgY29kZSBpdCB1cC4KKworLiBTZW5kIGl0IHRvIHRoZSBsaXN0IGFuZCBjYyBwZW9wbGUgd2hvIG1heSBuZWVkIHRvIGtub3cgYWJvdXQKKyAgdGhlIGNoYW5nZS4KKysKK1RoZSBwZW9wbGUgd2hvIG1heSBuZWVkIHRvIGtub3cgYXJlIHRoZSBvbmVzIHdob3NlIGNvZGUgeW91CithcmUgYnV0Y2hlcmluZy4gIFRoZXNlIHBlb3BsZSBoYXBwZW4gdG8gYmUgdGhlIG9uZXMgd2hvIGFyZQorbW9zdCBsaWtlbHkgdG8gYmUga25vd2xlZGdlYWJsZSBlbm91Z2ggdG8gaGVscCB5b3UsIGJ1dAordGhleSBoYXZlIG5vIG9ibGlnYXRpb24gdG8gaGVscCB5b3UgKGkuZS4geW91IGFzayBmb3IgaGVscCwKK2Rvbid0IGRlbWFuZCkuICArZ2l0IGxvZyAtcCB7bGl0ZGR9IF8kYXJlYV95b3VfYXJlX21vZGlmeWluZ18rIHdvdWxkCitoZWxwIHlvdSBmaW5kIG91dCB3aG8gdGhleSBhcmUuCisKKy4gWW91IGdldCBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50cy4gIFlvdSBtYXkKKyAgZXZlbiBnZXQgdGhlbSBpbiBhbiAib24gdG9wIG9mIHlvdXIgY2hhbmdlIiBwYXRjaCBmb3JtLgorCisuIFBvbGlzaCwgcmVmaW5lLCBhbmQgcmUtc2VuZCB0byB0aGUgbGlzdCBhbmQgdGhlIHBlb3BsZSB3aG8KKyAgc3BlbmQgdGhlaXIgdGltZSB0byBpbXByb3ZlIHlvdXIgcGF0Y2guICBHbyBiYWNrIHRvIHN0ZXAgKDIpLgorCisuIFRoZSBsaXN0IGZvcm1zIGNvbnNlbnN1cyB0aGF0IHRoZSBsYXN0IHJvdW5kIG9mIHlvdXIgcGF0Y2ggaXMKKyAgZ29vZC4gIFNlbmQgaXQgdG8gdGhlIG1haW50YWluZXIgYW5kIGNjIHRoZSBsaXN0LgorCisuIEEgdG9waWMgYnJhbmNoIGlzIGNyZWF0ZWQgd2l0aCB0aGUgcGF0Y2ggYW5kIGlzIG1lcmdlZCB0byBgbmV4dGAsCisgIGFuZCBjb29rZWQgZnVydGhlciBhbmQgZXZlbnR1YWxseSBncmFkdWF0ZXMgdG8gYG1hc3RlcmAuCisKK0luIGFueSB0aW1lIGJldHdlZW4gdGhlICgyKS0oMykgY3ljbGUsIHRoZSBtYWludGFpbmVyIG1heSBwaWNrIGl0IHVwCitmcm9tIHRoZSBsaXN0IGFuZCBxdWV1ZSBpdCB0byBgcHVgLCBpbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IKK3Blb3BsZSBwbGF5IHdpdGggaXQgd2l0aG91dCBoYXZpbmcgdG8gcGljayB1cCBhbmQgYXBwbHkgdGhlIHBhdGNoIHRvCit0aGVpciB0cmVlcyB0aGVtc2VsdmVzLgorCitbW3BhdGNoLXN0YXR1c11dCis9PSBLbm93IHRoZSBzdGF0dXMgb2YgeW91ciBwYXRjaCBhZnRlciBzdWJtaXNzaW9uCisKKyogWW91IGNhbiB1c2UgR2l0IGl0c2VsZiB0byBmaW5kIG91dCB3aGVuIHlvdXIgcGF0Y2ggaXMgbWVyZ2VkIGluCisgIG1hc3Rlci4gYGdpdCBwdWxsIC0tcmViYXNlYCB3aWxsIGF1dG9tYXRpY2FsbHkgc2tpcCBhbHJlYWR5LWFwcGxpZWQKKyAgcGF0Y2hlcywgYW5kIHdpbGwgbGV0IHlvdSBrbm93LiBUaGlzIHdvcmtzIG9ubHkgaWYgeW91IHJlYmFzZSBvbiB0b3AKKyAgb2YgdGhlIGJyYW5jaCBpbiB3aGljaCB5b3VyIHBhdGNoIGhhcyBiZWVuIG1lcmdlZCAoaS5lLiBpdCB3aWxsIG5vdAorICB0ZWxsIHlvdSBpZiB5b3VyIHBhdGNoIGlzIG1lcmdlZCBpbiBwdSBpZiB5b3UgcmViYXNlIG9uIHRvcCBvZgorICBtYXN0ZXIpLgorCisqIFJlYWQgdGhlIEdpdCBtYWlsaW5nIGxpc3QsIHRoZSBtYWludGFpbmVyIHJlZ3VsYXJseSBwb3N0cyBtZXNzYWdlcworICBlbnRpdGxlZCAiV2hhdCdzIGNvb2tpbmcgaW4gZ2l0LmdpdCIgYW5kICJXaGF0J3MgaW4gZ2l0LmdpdCIgZ2l2aW5nCisgIHRoZSBzdGF0dXMgb2YgdmFyaW91cyBwcm9wb3NlZCBjaGFuZ2VzLgorCitbW3RyYXZpc11dCis9PSBHaXRIdWItVHJhdmlzIENJIGhpbnRzCisKK1dpdGggYW4gYWNjb3VudCBhdCBHaXRIdWIgKHlvdSBjYW4gZ2V0IG9uZSBmb3IgZnJlZSB0byB3b3JrIG9uIG9wZW4KK3NvdXJjZSBwcm9qZWN0cyksIHlvdSBjYW4gdXNlIFRyYXZpcyBDSSB0byB0ZXN0IHlvdXIgY2hhbmdlcyBvbiBMaW51eCwKK01hYyAoYW5kIGhvcGVmdWxseSBzb29uIFdpbmRvd3MpLiAgWW91IGNhbiBmaW5kIGEgc3VjY2Vzc2Z1bCBleGFtcGxlCit0ZXN0IGJ1aWxkIGhlcmU6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9naXQvZ2l0L2J1aWxkcy8xMjA0NzMyMDkKKworRm9sbG93IHRoZXNlIHN0ZXBzIGZvciB0aGUgaW5pdGlhbCBzZXR1cDoKKworLiBGb3JrIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0IHRvIHlvdXIgR2l0SHViIGFjY291bnQuCisgIFlvdSBjYW4gZmluZCBkZXRhaWxlZCBpbnN0cnVjdGlvbnMgaG93IHRvIGZvcmsgaGVyZToKKyAgaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vYXJ0aWNsZXMvZm9yay1hLXJlcG8vCisKKy4gT3BlbiB0aGUgVHJhdmlzIENJIHdlYnNpdGU6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZworCisuIFByZXNzIHRoZSAiU2lnbiBpbiB3aXRoIEdpdEh1YiIgYnV0dG9uLgorCisuIEdyYW50IFRyYXZpcyBDSSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgeW91ciBHaXRIdWIgYWNjb3VudC4KKyAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIGhlcmU6CisgIGh0dHBzOi8vZG9jcy50cmF2aXMtY2kuY29tL3VzZXIvZ2l0aHViLW9hdXRoLXNjb3BlcworCisuIE9wZW4geW91ciBUcmF2aXMgQ0kgcHJvZmlsZSBwYWdlOiBodHRwczovL3RyYXZpcy1jaS5vcmcvcHJvZmlsZQorCisuIEVuYWJsZSBUcmF2aXMgQ0kgYnVpbGRzIGZvciB5b3VyIEdpdCBmb3JrLgorCitBZnRlciB0aGUgaW5pdGlhbCBzZXR1cCwgVHJhdmlzIENJIHdpbGwgcnVuIHdoZW5ldmVyIHlvdSBwdXNoIG5ldyBjaGFuZ2VzCit0byB5b3VyIGZvcmsgb2YgR2l0IG9uIEdpdEh1Yi4gIFlvdSBjYW4gbW9uaXRvciB0aGUgdGVzdCBzdGF0ZSBvZiBhbGwgeW91cgorYnJhbmNoZXMgaGVyZTogaHR0cHM6Ly90cmF2aXMtY2kub3JnL19fPFlvdXIgR2l0SHViIGhhbmRsZT5fXy9naXQvYnJhbmNoZXMKKworSWYgYSBicmFuY2ggZGlkIG5vdCBwYXNzIGFsbCB0ZXN0IGNhc2VzIHRoZW4gaXQgaXMgbWFya2VkIHdpdGggYSByZWQKK2Nyb3NzLiAgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2xpY2sgb24gdGhlIGZhaWxpbmcgVHJhdmlzIENJIGpvYiBhbmQKK3Njcm9sbCBhbGwgdGhlIHdheSBkb3duIGluIHRoZSBsb2cuICBGaW5kIHRoZSBsaW5lICI8LS0gQ2xpY2sgaGVyZSB0byBzZWUKK2RldGFpbGVkIHRlc3Qgb3V0cHV0ISIgYW5kIGNsaWNrIG9uIHRoZSB0cmlhbmdsZSBuZXh0IHRvIHRoZSBsb2cgbGluZQorbnVtYmVyIHRvIGV4cGFuZCB0aGUgZGV0YWlsZWQgdGVzdCBvdXRwdXQuICBIZXJlIGlzIHN1Y2ggYSBmYWlsaW5nCitleGFtcGxlOiBodHRwczovL3RyYXZpcy1jaS5vcmcvZ2l0L2dpdC9qb2JzLzEyMjY3NjE4NworCitGaXggdGhlIHByb2JsZW0gYW5kIHB1c2ggeW91ciBmaXggdG8geW91ciBHaXQgZm9yay4gIFRoaXMgd2lsbCB0cmlnZ2VyCithIG5ldyBUcmF2aXMgQ0kgYnVpbGQgdG8gZW5zdXJlIGFsbCB0ZXN0cyBwYXNzLgorCitbW211YV1dCis9PSBNVUEgc3BlY2lmaWMgaGludHMKKworU29tZSBvZiBwYXRjaGVzIEkgcmVjZWl2ZSBvciBwaWNrIHVwIGZyb20gdGhlIGxpc3Qgc2hhcmUgY29tbW9uCitwYXR0ZXJucyBvZiBicmVha2FnZS4gIFBsZWFzZSBtYWtlIHN1cmUgeW91ciBNVUEgaXMgc2V0IHVwCitwcm9wZXJseSBub3QgdG8gY29ycnVwdCB3aGl0ZXNwYWNlcy4KKworU2VlIHRoZSBESVNDVVNTSU9OIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIGZvciBoaW50cyBvbgorY2hlY2tpbmcgeW91ciBwYXRjaCBieSBtYWlsaW5nIGl0IHRvIHlvdXJzZWxmIGFuZCBhcHBseWluZyB3aXRoCitsaW5rZ2l0OmdpdC1hbVsxXS4KKworV2hpbGUgeW91IGFyZSBhdCBpdCwgY2hlY2sgdGhlIHJlc3VsdGluZyBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbQorYSB0cmlhbCBydW4gb2YgYXBwbHlpbmcgdGhlIHBhdGNoLiAgSWYgd2hhdCBpcyBpbiB0aGUgcmVzdWx0aW5nCitjb21taXQgaXMgbm90IGV4YWN0bHkgd2hhdCB5b3Ugd291bGQgd2FudCB0byBzZWUsIGl0IGlzIHZlcnkKK2xpa2VseSB0aGF0IHlvdXIgbWFpbnRhaW5lciB3b3VsZCBlbmQgdXAgaGFuZCBlZGl0aW5nIHRoZSBsb2cKK21lc3NhZ2Ugd2hlbiBoZSBhcHBsaWVzIHlvdXIgcGF0Y2guICBUaGluZ3MgbGlrZSAiSGksIHRoaXMgaXMgbXkKK2ZpcnN0IHBhdGNoLlxuIiwgaWYgeW91IHJlYWxseSB3YW50IHRvIHB1dCBpbiB0aGUgcGF0Y2ggZS1tYWlsLAorc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIHRocmVlLWRhc2ggbGluZSB0aGF0IHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUKK2NvbW1pdCBtZXNzYWdlLgorCisKKz09PSBQaW5lCisKKyhKb2hhbm5lcyBTY2hpbmRlbGluKQorCisuLi4uCitJIGRvbid0IGtub3cgaG93IG1hbnkgcGVvcGxlIHN0aWxsIHVzZSBwaW5lLCBidXQgZm9yIHRob3NlIHBvb3IKK3NvdWxzIGl0IG1heSBiZSBnb29kIHRvIG1lbnRpb24gdGhhdCB0aGUgcXVlbGwtZmxvd2VkLXRleHQgaXMKK25lZWRlZCBmb3IgcmVjZW50IHZlcnNpb25zLgorCisuLi4gdGhlICJuby1zdHJpcC13aGl0ZXNwYWNlLWJlZm9yZS1zZW5kIiBvcHRpb24sIHRvby4gQUZBSUsgaXQKK3dhcyBpbnRyb2R1Y2VkIGluIDQuNjAuCisuLi4uCisKKyhMaW51cyBUb3J2YWxkcykKKworLi4uLgorQW5kIDQuNTggbmVlZHMgYXQgbGVhc3QgdGhpcy4KKworZGlmZi10cmVlIDgzMjZkZDgzNTBiZTY0YWM3ZmM4MDVmNjU2M2ExZDYxYWQxMGQzMmMgKGZyb20gZTg4NmE2MWY3NmVkZjU0MTA1NzNlOTJlMzhjZTIyOTc0ZjljNDBmMSkKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGc1Lm9zZGwub3JnPgorRGF0ZTogICBNb24gQXVnIDE1IDE3OjIzOjUxIDIwMDUgLTA3MDAKKworICAgIEZpeCBwaW5lIHdoaXRlc3BhY2UtY29ycnVwdGlvbiBidWcKKworICAgIFRoZXJlJ3Mgbm8gZXhjdXNlIGZvciB1bmNvbmRpdGlvbmFsbHkgcmVtb3Zpbmcgd2hpdGVzcGFjZSBmcm9tCisgICAgdGhlIHBpY28gYnVmZmVycyBvbiBjbG9zZS4KKworZGlmZiAtLWdpdCBhL3BpY28vcGljby5jIGIvcGljby9waWNvLmMKKy0tLSBhL3BpY28vcGljby5jCisrKysgYi9waWNvL3BpY28uYworQEAgLTIxOSw3ICsyMTksOSBAQCBQSUNPICpwbTsKKwkgICAgc3dpdGNoKHBpY29fYWxsX2RvbmUpewkvKiBwcmVwYXJlIGZvci9oYW5kbGUgZmluYWwgZXZlbnRzICovCisJICAgICAgY2FzZSBDT01QX0VYSVQgOgkJLyogYWxyZWFkeSBjb25maXJtZWQgKi8KKwkJcGFja2hlYWRlcigpOworKyNpZiAwCisJCXN0cmlwd2hpdGVzcGFjZSgpOworKyNlbmRpZgorCQljIHw9IENPTVBfRVhJVDsKKwkJYnJlYWs7CisuLi4uCisKKyhEYW5pZWwgQmFya2Fsb3cpCisKKy4uLi4KKz4gQSBwYXRjaCB0byBTdWJtaXR0aW5nUGF0Y2hlcywgTVVBIHNwZWNpZmljIGhlbHAgc2VjdGlvbiBmb3IKKz4gdXNlcnMgb2YgUGluZSA0LjYzIHdvdWxkIGJlIHZlcnkgbXVjaCBhcHByZWNpYXRlZC4KKworQWgsIGl0IGxvb2tzIGxpa2UgYSByZWNlbnQgdmVyc2lvbiBjaGFuZ2VkIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHRvIGRvIHRoZQorcmlnaHQgdGhpbmcsIGFuZCBpbnZlcnRlZCB0aGUgc2Vuc2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiAoRWl0aGVyCit0aGF0IG9yIEdlbnRvbyBkaWQgaXQuKSBTbyB5b3UgbmVlZCB0byBzZXQgdGhlCisibm8tc3RyaXAtd2hpdGVzcGFjZS1iZWZvcmUtc2VuZCIgb3B0aW9uLCB1bmxlc3MgdGhlIG9wdGlvbiB5b3UgaGF2ZSBpcworInN0cmlwLXdoaXRlc3BhY2UtYmVmb3JlLXNlbmQiLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgYXZvaWQgY2hlY2tpbmcKK2l0LgorLi4uLgorCis9PT0gVGh1bmRlcmJpcmQsIEtNYWlsLCBHTWFpbAorCitTZWUgdGhlIE1VQS1TUEVDSUZJQyBISU5UUyBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworPT09IEdudXMKKworInwiIGluIHRoZSBgKlN1bW1hcnkqYCBidWZmZXIgY2FuIGJlIHVzZWQgdG8gcGlwZSB0aGUgY3VycmVudAorbWVzc2FnZSB0byBhbiBleHRlcm5hbCBwcm9ncmFtLCBhbmQgdGhpcyBpcyBhIGhhbmR5IHdheSB0byBkcml2ZQorYGdpdCBhbWAuICBIb3dldmVyLCBpZiB0aGUgbWVzc2FnZSBpcyBNSU1FIGVuY29kZWQsIHdoYXQgaXMKK3BpcGVkIGludG8gdGhlIHByb2dyYW0gaXMgdGhlIHJlcHJlc2VudGF0aW9uIHlvdSBzZWUgaW4geW91cgorYCpBcnRpY2xlKmAgYnVmZmVyIGFmdGVyIHVud3JhcHBpbmcgTUlNRS4gIFRoaXMgaXMgb2Z0ZW4gbm90IHdoYXQKK3lvdSB3b3VsZCB3YW50IGZvciB0d28gcmVhc29ucy4gIEl0IHRlbmRzIHRvIHNjcmV3IHVwIG5vbiBBU0NJSQorY2hhcmFjdGVycyAobW9zdCBub3RhYmx5IGluIHBlb3BsZSdzIG5hbWVzKSwgYW5kIGFsc28KK3doaXRlc3BhY2VzIChmYXRhbCBpbiBwYXRjaGVzKS4gIFJ1bm5pbmcgIkMtdSBnIiB0byBkaXNwbGF5IHRoZQorbWVzc2FnZSBpbiByYXcgZm9ybSBiZWZvcmUgdXNpbmcgInwiIHRvIHJ1biB0aGUgcGlwZSBjYW4gd29yawordGhpcyBwcm9ibGVtIGFyb3VuZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZiBiL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmM0YjY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mCkBAIC0wLDAgKzEsOTcgQEAKKyMjIGxpbmtnaXQ6IG1hY3JvCisjCisjIFVzYWdlOiBsaW5rZ2l0OmNvbW1hbmRbbWFucGFnZS1zZWN0aW9uXQorIworIyBOb3RlLCB7MH0gaXMgdGhlIG1hbnBhZ2Ugc2VjdGlvbiwgd2hpbGUge3RhcmdldH0gaXMgdGhlIGNvbW1hbmQuCisjCisjIFNob3cgR2l0IGxpbmsgYXM6IDxjb21tYW5kPig8c2VjdGlvbj4pOyBpZiBzZWN0aW9uIGlzIGRlZmluZWQsIGVsc2UganVzdCBzaG93CisjIHRoZSBjb21tYW5kLgorCitbbWFjcm9zXQorKD9zdSlbXFxdPyg/UDxuYW1lPmxpbmtnaXQpOig/UDx0YXJnZXQ+XFMqPylcWyg/UDxhdHRybGlzdD4uKj8pXF09CisKK1thdHRyaWJ1dGVzXQorYXN0ZXJpc2s9JiM0MjsKK3BsdXM9JiM0MzsKK2NhcmV0PSYjOTQ7CitzdGFydHNiPSYjOTE7CitlbmRzYj0mIzkzOworYmFja3NsYXNoPSYjOTI7Cit0aWxkZT0mIzEyNjsKK2Fwb3N0cm9waGU9JiMzOTsKK2JhY2t0aWNrPSYjOTY7CitsaXRkZD0mIzQ1OyYjNDU7CisKK2lmZGVmOjpiYWNrZW5kLWRvY2Jvb2tbXQorW2xpbmtnaXQtaW5saW5lbWFjcm9dCit7MCV7dGFyZ2V0fX0KK3swIzxjaXRlcmVmZW50cnk+fQorezAjPHJlZmVudHJ5dGl0bGU+e3RhcmdldH08L3JlZmVudHJ5dGl0bGU+PG1hbnZvbG51bT57MH08L21hbnZvbG51bT59Cit7MCM8L2NpdGVyZWZlbnRyeT59CitlbmRpZjo6YmFja2VuZC1kb2Nib29rW10KKworaWZkZWY6OmJhY2tlbmQtZG9jYm9va1tdCitpZm5kZWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KKyMgInVuYnJlYWsiIGRvY2Jvb2steHNsIHYxLjY4IGZvciBtYW5wYWdlcy4gdjEuNjkgd29ya3Mgd2l0aCBvciB3aXRob3V0IHRoaXMuCisjIHYxLjcyIGJyZWFrcyB3aXRoIHRoaXMgYmVjYXVzZSBpdCByZXBsYWNlcyBkb3RzIG5vdCBpbiByb2ZmIHJlcXVlc3RzLgorW2xpc3RpbmdibG9ja10KKzxleGFtcGxlPjx0aXRsZT57dGl0bGV9PC90aXRsZT4KKzxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KK2lmZGVmOjpkb2N0eXBlLW1hbnBhZ2VbXQorJiMxMDsuZnQgQyYjMTA7CitlbmRpZjo6ZG9jdHlwZS1tYW5wYWdlW10KK3wKK2lmZGVmOjpkb2N0eXBlLW1hbnBhZ2VbXQorJiMxMDsuZnQmIzEwOworZW5kaWY6OmRvY3R5cGUtbWFucGFnZVtdCis8L2xpdGVyYWxsYXlvdXQ+Cit7dGl0bGUjfTwvZXhhbXBsZT4KK2VuZGlmOjpnaXQtYXNjaWlkb2Mtbm8tcm9mZltdCisKK2lmZGVmOjpnaXQtYXNjaWlkb2Mtbm8tcm9mZltdCitpZmRlZjo6ZG9jdHlwZS1tYW5wYWdlW10KKyMgVGhlIGZvbGxvd2luZyB0d28gc21hbGwgd29ya2Fyb3VuZHMgaW5zZXJ0IGEgc2ltcGxlIHBhcmFncmFwaCBhZnRlciBzY3JlZW4KK1tsaXN0aW5nYmxvY2tdCis8ZXhhbXBsZT48dGl0bGU+e3RpdGxlfTwvdGl0bGU+Cis8bGl0ZXJhbGxheW91dCBjbGFzcz0ibW9ub3NwYWNlZCI+Cit8Cis8L2xpdGVyYWxsYXlvdXQ+PHNpbXBhcmE+PC9zaW1wYXJhPgore3RpdGxlI308L2V4YW1wbGU+CisKK1t2ZXJzZWJsb2NrXQorPGZvcm1hbHBhcmF7aWQ/IGlkPSJ7aWR9In0+PHRpdGxlPnt0aXRsZX08L3RpdGxlPjxwYXJhPgore3RpdGxlJX08bGl0ZXJhbGxheW91dHtpZD8gaWQ9IntpZH0ifT4KK3t0aXRsZSN9PGxpdGVyYWxsYXlvdXQ+Cit8Cis8L2xpdGVyYWxsYXlvdXQ+Cit7dGl0bGUjfTwvcGFyYT48L2Zvcm1hbHBhcmE+Cit7dGl0bGUlfTxzaW1wYXJhPjwvc2ltcGFyYT4KK2VuZGlmOjpkb2N0eXBlLW1hbnBhZ2VbXQorZW5kaWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KK2VuZGlmOjpiYWNrZW5kLWRvY2Jvb2tbXQorCitpZmRlZjo6ZG9jdHlwZS1tYW5wYWdlW10KK2lmZGVmOjpiYWNrZW5kLWRvY2Jvb2tbXQorW2hlYWRlcl0KK3RlbXBsYXRlOjpbaGVhZGVyLWRlY2xhcmF0aW9uc10KKzxyZWZlbnRyeT4KKzxyZWZtZXRhPgorPHJlZmVudHJ5dGl0bGU+e21hbnRpdGxlfTwvcmVmZW50cnl0aXRsZT4KKzxtYW52b2xudW0+e21hbnZvbG51bX08L21hbnZvbG51bT4KKzxyZWZtaXNjaW5mbyBjbGFzcz0ic291cmNlIj57bWFuc291cmNlfTwvcmVmbWlzY2luZm8+Cis8cmVmbWlzY2luZm8gY2xhc3M9InZlcnNpb24iPnttYW52ZXJzaW9ufTwvcmVmbWlzY2luZm8+Cis8cmVmbWlzY2luZm8gY2xhc3M9Im1hbnVhbCI+e21hbm1hbnVhbH08L3JlZm1pc2NpbmZvPgorPC9yZWZtZXRhPgorPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPnttYW5uYW1lfTwvcmVmbmFtZT4KKyAgPHJlZnB1cnBvc2U+e21hbnB1cnBvc2V9PC9yZWZwdXJwb3NlPgorPC9yZWZuYW1lZGl2PgorZW5kaWY6OmJhY2tlbmQtZG9jYm9va1tdCitlbmRpZjo6ZG9jdHlwZS1tYW5wYWdlW10KKworaWZkZWY6OmJhY2tlbmQteGh0bWwxMVtdCitbYXR0cmlidXRlc10KK2dpdC1yZWxhdGl2ZS1odG1sLXByZWZpeD0KK1tsaW5rZ2l0LWlubGluZW1hY3JvXQorPGEgaHJlZj0ie2dpdC1yZWxhdGl2ZS1odG1sLXByZWZpeH17dGFyZ2V0fS5odG1sIj57dGFyZ2V0fXswPyh7MH0pfTwvYT4KK2VuZGlmOjpiYWNrZW5kLXhodG1sMTFbXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hc2NpaWRvY3Rvci1leHRlbnNpb25zLnJiIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvY3Rvci1leHRlbnNpb25zLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDZhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jdG9yLWV4dGVuc2lvbnMucmIKQEAgLTAsMCArMSw0OCBAQAorcmVxdWlyZSAnYXNjaWlkb2N0b3InCityZXF1aXJlICdhc2NpaWRvY3Rvci9leHRlbnNpb25zJworCittb2R1bGUgR2l0CisgIG1vZHVsZSBEb2N1bWVudGF0aW9uCisgICAgY2xhc3MgTGlua0dpdFByb2Nlc3NvciA8IEFzY2lpZG9jdG9yOjpFeHRlbnNpb25zOjpJbmxpbmVNYWNyb1Byb2Nlc3NvcgorICAgICAgdXNlX2RzbAorCisgICAgICBuYW1lZCA6Y2hyb21lCisKKyAgICAgIGRlZiBwcm9jZXNzKHBhcmVudCwgdGFyZ2V0LCBhdHRycykKKyAgICAgICAgcHJlZml4ID0gcGFyZW50LmRvY3VtZW50LmF0dHIoJ2dpdC1yZWxhdGl2ZS1odG1sLXByZWZpeCcpCisgICAgICAgIGlmIHBhcmVudC5kb2N1bWVudC5kb2N0eXBlID09ICdib29rJworICAgICAgICAgICI8dWxpbmsgdXJsPVwiI3twcmVmaXh9I3t0YXJnZXR9Lmh0bWxcIj4iIFwKKyAgICAgICAgICAiI3t0YXJnZXR9KCN7YXR0cnNbMV19KTwvdWxpbms+IgorICAgICAgICBlbHNpZiBwYXJlbnQuZG9jdW1lbnQuYmFzZWJhY2tlbmQ/ICdodG1sJworICAgICAgICAgICUoPGEgaHJlZj0iI3twcmVmaXh9I3t0YXJnZXR9Lmh0bWwiPiN7dGFyZ2V0fSgje2F0dHJzWzFdfSk8L2E+KQorICAgICAgICBlbHNpZiBwYXJlbnQuZG9jdW1lbnQuYmFzZWJhY2tlbmQ/ICdkb2Nib29rJworICAgICAgICAgICI8Y2l0ZXJlZmVudHJ5PlxuIiBcCisgICAgICAgICAgICAiPHJlZmVudHJ5dGl0bGU+I3t0YXJnZXR9PC9yZWZlbnRyeXRpdGxlPiIgXAorICAgICAgICAgICAgIjxtYW52b2xudW0+I3thdHRyc1sxXX08L21hbnZvbG51bT5cbiIgXAorICAgICAgICAgICI8L2NpdGVyZWZlbnRyeT4iCisgICAgICAgIGVuZAorICAgICAgZW5kCisgICAgZW5kCisKKyAgICBjbGFzcyBEb2N1bWVudFBvc3RQcm9jZXNzb3IgPCBBc2NpaWRvY3Rvcjo6RXh0ZW5zaW9uczo6UG9zdHByb2Nlc3NvcgorICAgICAgZGVmIHByb2Nlc3MgZG9jdW1lbnQsIG91dHB1dAorICAgICAgICBpZiBkb2N1bWVudC5iYXNlYmFja2VuZD8gJ2RvY2Jvb2snCisgICAgICAgICAgbWFuc291cmNlID0gZG9jdW1lbnQuYXR0cmlidXRlc1snbWFuc291cmNlJ10KKyAgICAgICAgICBtYW52ZXJzaW9uID0gZG9jdW1lbnQuYXR0cmlidXRlc1snbWFudmVyc2lvbiddCisgICAgICAgICAgbWFubWFudWFsID0gZG9jdW1lbnQuYXR0cmlidXRlc1snbWFubWFudWFsJ10KKyAgICAgICAgICBuZXdfdGFncyA9ICIiIFwKKyAgICAgICAgICAgICI8cmVmbWlzY2luZm8gY2xhc3M9XCJzb3VyY2VcIj4je21hbnNvdXJjZX08L3JlZm1pc2NpbmZvPlxuIiBcCisgICAgICAgICAgICAiPHJlZm1pc2NpbmZvIGNsYXNzPVwidmVyc2lvblwiPiN7bWFudmVyc2lvbn08L3JlZm1pc2NpbmZvPlxuIiBcCisgICAgICAgICAgICAiPHJlZm1pc2NpbmZvIGNsYXNzPVwibWFudWFsXCI+I3ttYW5tYW51YWx9PC9yZWZtaXNjaW5mbz5cbiIKKyAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3ViKC88XC9yZWZtZXRhPi8sIG5ld190YWdzICsgIjwvcmVmbWV0YT4iKQorICAgICAgICBlbmQKKyAgICAgICAgb3V0cHV0CisgICAgICBlbmQKKyAgICBlbmQKKyAgZW5kCitlbmQKKworQXNjaWlkb2N0b3I6OkV4dGVuc2lvbnMucmVnaXN0ZXIgZG8KKyAgaW5saW5lX21hY3JvIEdpdDo6RG9jdW1lbnRhdGlvbjo6TGlua0dpdFByb2Nlc3NvciwgOmxpbmtnaXQKKyAgcG9zdHByb2Nlc3NvciBHaXQ6OkRvY3VtZW50YXRpb246OkRvY3VtZW50UG9zdFByb2Nlc3NvcgorZW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDEyMmRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dApAQCAtMCwwICsxLDEzMyBAQAorLWI6OgorCVNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMuICBUaGlzIGNhbiBhbHNvCisJYmUgY29udHJvbGxlZCB2aWEgdGhlIGBibGFtZS5ibGFua2JvdW5kYXJ5YCBjb25maWcgb3B0aW9uLgorCistLXJvb3Q6OgorCURvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcy4gIFRoaXMgY2FuIGFsc28gYmUKKwljb250cm9sbGVkIHZpYSB0aGUgYGJsYW1lLnNob3dSb290YCBjb25maWcgb3B0aW9uLgorCistLXNob3ctc3RhdHM6OgorCUluY2x1ZGUgYWRkaXRpb25hbCBzdGF0aXN0aWNzIGF0IHRoZSBlbmQgb2YgYmxhbWUgb3V0cHV0LgorCistTCA8c3RhcnQ+LDxlbmQ+OjoKKy1MIDo8ZnVuY25hbWU+OjoKKwlBbm5vdGF0ZSBvbmx5IHRoZSBnaXZlbiBsaW5lIHJhbmdlLiBNYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorCU92ZXJsYXBwaW5nIHJhbmdlcyBhcmUgYWxsb3dlZC4KKysKKzxzdGFydD4gYW5kIDxlbmQ+IGFyZSBvcHRpb25hbC4gYGAtTCA8c3RhcnQ+Jycgb3IgYGAtTCA8c3RhcnQ+LCcnIHNwYW5zIGZyb20KKzxzdGFydD4gdG8gZW5kIG9mIGZpbGUuIGBgLUwgLDxlbmQ+Jycgc3BhbnMgZnJvbSBzdGFydCBvZiBmaWxlIHRvIDxlbmQ+LgorKworaW5jbHVkZTo6bGluZS1yYW5nZS1mb3JtYXQudHh0W10KKworLWw6OgorCVNob3cgbG9uZyByZXYgKERlZmF1bHQ6IG9mZikuCisKKy10OjoKKwlTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikuCisKKy1TIDxyZXZzLWZpbGU+OjoKKwlVc2UgcmV2aXNpb25zIGZyb20gcmV2cy1maWxlIGluc3RlYWQgb2YgY2FsbGluZyBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXS4KKworLS1yZXZlcnNlIDxyZXY+Li48cmV2Pjo6CisJV2FsayBoaXN0b3J5IGZvcndhcmQgaW5zdGVhZCBvZiBiYWNrd2FyZC4gSW5zdGVhZCBvZiBzaG93aW5nCisJdGhlIHJldmlzaW9uIGluIHdoaWNoIGEgbGluZSBhcHBlYXJlZCwgdGhpcyBzaG93cyB0aGUgbGFzdAorCXJldmlzaW9uIGluIHdoaWNoIGEgbGluZSBoYXMgZXhpc3RlZC4gVGhpcyByZXF1aXJlcyBhIHJhbmdlIG9mCisJcmV2aXNpb24gbGlrZSBTVEFSVC4uRU5EIHdoZXJlIHRoZSBwYXRoIHRvIGJsYW1lIGV4aXN0cyBpbgorCVNUQVJULiAgYGdpdCBibGFtZSAtLXJldmVyc2UgU1RBUlRgIGlzIHRha2VuIGFzIGBnaXQgYmxhbWUKKwktLXJldmVyc2UgU1RBUlQuLkhFQURgIGZvciBjb252ZW5pZW5jZS4KKworLXA6OgorLS1wb3JjZWxhaW46OgorCVNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24uCisKKy0tbGluZS1wb3JjZWxhaW46OgorCVNob3cgdGhlIHBvcmNlbGFpbiBmb3JtYXQsIGJ1dCBvdXRwdXQgY29tbWl0IGluZm9ybWF0aW9uIGZvcgorCWVhY2ggbGluZSwgbm90IGp1c3QgdGhlIGZpcnN0IHRpbWUgYSBjb21taXQgaXMgcmVmZXJlbmNlZC4KKwlJbXBsaWVzIC0tcG9yY2VsYWluLgorCistLWluY3JlbWVudGFsOjoKKwlTaG93IHRoZSByZXN1bHQgaW5jcmVtZW50YWxseSBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IKKwltYWNoaW5lIGNvbnN1bXB0aW9uLgorCistLWVuY29kaW5nPTxlbmNvZGluZz46OgorCVNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCB0byBvdXRwdXQgYXV0aG9yIG5hbWVzCisJYW5kIGNvbW1pdCBzdW1tYXJpZXMuIFNldHRpbmcgaXQgdG8gYG5vbmVgIG1ha2VzIGJsYW1lCisJb3V0cHV0IHVuY29udmVydGVkIGRhdGEuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKKwlkaXNjdXNzaW9uIGFib3V0IGVuY29kaW5nIGluIHRoZSBsaW5rZ2l0OmdpdC1sb2dbMV0KKwltYW51YWwgcGFnZS4KKworLS1jb250ZW50cyA8ZmlsZT46OgorCVdoZW4gPHJldj4gaXMgbm90IHNwZWNpZmllZCwgdGhlIGNvbW1hbmQgYW5ub3RhdGVzIHRoZQorCWNoYW5nZXMgc3RhcnRpbmcgYmFja3dhcmRzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBjb3B5LgorCVRoaXMgZmxhZyBtYWtlcyB0aGUgY29tbWFuZCBwcmV0ZW5kIGFzIGlmIHRoZSB3b3JraW5nCisJdHJlZSBjb3B5IGhhcyB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIGZpbGUgKHNwZWNpZnkKKwlgLWAgdG8gbWFrZSB0aGUgY29tbWFuZCByZWFkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0KS4KKworLS1kYXRlIDxmb3JtYXQ+OjoKKwlTcGVjaWZpZXMgdGhlIGZvcm1hdCB1c2VkIHRvIG91dHB1dCBkYXRlcy4gSWYgLS1kYXRlIGlzIG5vdAorCXByb3ZpZGVkLCB0aGUgdmFsdWUgb2YgdGhlIGJsYW1lLmRhdGUgY29uZmlnIHZhcmlhYmxlIGlzCisJdXNlZC4gSWYgdGhlIGJsYW1lLmRhdGUgY29uZmlnIHZhcmlhYmxlIGlzIGFsc28gbm90IHNldCwgdGhlCisJaXNvIGZvcm1hdCBpcyB1c2VkLiBGb3Igc3VwcG9ydGVkIHZhbHVlcywgc2VlIHRoZSBkaXNjdXNzaW9uCisJb2YgdGhlIC0tZGF0ZSBvcHRpb24gYXQgbGlua2dpdDpnaXQtbG9nWzFdLgorCistLVtuby1dcHJvZ3Jlc3M6OgorCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisJYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwuIFRoaXMgZmxhZworCWVuYWJsZXMgcHJvZ3Jlc3MgcmVwb3J0aW5nIGV2ZW4gaWYgbm90IGF0dGFjaGVkIHRvIGEKKwl0ZXJtaW5hbC4gQ2FuJ3QgdXNlIGAtLXByb2dyZXNzYCB0b2dldGhlciB3aXRoIGAtLXBvcmNlbGFpbmAKKwlvciBgLS1pbmNyZW1lbnRhbGAuCisKKy1NWzxudW0+XTo6CisJRGV0ZWN0IG1vdmVkIG9yIGNvcGllZCBsaW5lcyB3aXRoaW4gYSBmaWxlLiBXaGVuIGEgY29tbWl0CisJbW92ZXMgb3IgY29waWVzIGEgYmxvY2sgb2YgbGluZXMgKGUuZy4gdGhlIG9yaWdpbmFsIGZpbGUKKwloYXMgQSBhbmQgdGhlbiBCLCBhbmQgdGhlIGNvbW1pdCBjaGFuZ2VzIGl0IHRvIEIgYW5kIHRoZW4KKwlBKSwgdGhlIHRyYWRpdGlvbmFsICdibGFtZScgYWxnb3JpdGhtIG5vdGljZXMgb25seSBoYWxmIG9mCisJdGhlIG1vdmVtZW50IGFuZCB0eXBpY2FsbHkgYmxhbWVzIHRoZSBsaW5lcyB0aGF0IHdlcmUgbW92ZWQKKwl1cCAoaS5lLiBCKSB0byB0aGUgcGFyZW50IGFuZCBhc3NpZ25zIGJsYW1lIHRvIHRoZSBsaW5lcyB0aGF0CisJd2VyZSBtb3ZlZCBkb3duIChpLmUuIEEpIHRvIHRoZSBjaGlsZCBjb21taXQuICBXaXRoIHRoaXMKKwlvcHRpb24sIGJvdGggZ3JvdXBzIG9mIGxpbmVzIGFyZSBibGFtZWQgb24gdGhlIHBhcmVudCBieQorCXJ1bm5pbmcgZXh0cmEgcGFzc2VzIG9mIGluc3BlY3Rpb24uCisrCis8bnVtPiBpcyBvcHRpb25hbCBidXQgaXQgaXMgdGhlIGxvd2VyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YKK2FscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHRoYXQgR2l0IG11c3QgZGV0ZWN0IGFzIG1vdmluZy9jb3B5aW5nCit3aXRoaW4gYSBmaWxlIGZvciBpdCB0byBhc3NvY2lhdGUgdGhvc2UgbGluZXMgd2l0aCB0aGUgcGFyZW50Citjb21taXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIwLgorCistQ1s8bnVtPl06OgorCUluIGFkZGl0aW9uIHRvIGAtTWAsIGRldGVjdCBsaW5lcyBtb3ZlZCBvciBjb3BpZWQgZnJvbSBvdGhlcgorCWZpbGVzIHRoYXQgd2VyZSBtb2RpZmllZCBpbiB0aGUgc2FtZSBjb21taXQuICBUaGlzIGlzCisJdXNlZnVsIHdoZW4geW91IHJlb3JnYW5pemUgeW91ciBwcm9ncmFtIGFuZCBtb3ZlIGNvZGUKKwlhcm91bmQgYWNyb3NzIGZpbGVzLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBnaXZlbiB0d2ljZSwKKwl0aGUgY29tbWFuZCBhZGRpdGlvbmFsbHkgbG9va3MgZm9yIGNvcGllcyBmcm9tIG90aGVyCisJZmlsZXMgaW4gdGhlIGNvbW1pdCB0aGF0IGNyZWF0ZXMgdGhlIGZpbGUuIFdoZW4gdGhpcworCW9wdGlvbiBpcyBnaXZlbiB0aHJlZSB0aW1lcywgdGhlIGNvbW1hbmQgYWRkaXRpb25hbGx5CisJbG9va3MgZm9yIGNvcGllcyBmcm9tIG90aGVyIGZpbGVzIGluIGFueSBjb21taXQuCisrCis8bnVtPiBpcyBvcHRpb25hbCBidXQgaXQgaXMgdGhlIGxvd2VyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YKK2FscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHRoYXQgR2l0IG11c3QgZGV0ZWN0IGFzIG1vdmluZy9jb3B5aW5nCitiZXR3ZWVuIGZpbGVzIGZvciBpdCB0byBhc3NvY2lhdGUgdGhvc2UgbGluZXMgd2l0aCB0aGUgcGFyZW50Citjb21taXQuIEFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyA0MC4gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUKK2AtQ2Agb3B0aW9ucyBnaXZlbiwgdGhlIDxudW0+IGFyZ3VtZW50IG9mIHRoZSBsYXN0IGAtQ2Agd2lsbAordGFrZSBlZmZlY3QuCisKKy0taWdub3JlLXJldiA8cmV2Pjo6CisJSWdub3JlIGNoYW5nZXMgbWFkZSBieSB0aGUgcmV2aXNpb24gd2hlbiBhc3NpZ25pbmcgYmxhbWUsIGFzIGlmIHRoZQorCWNoYW5nZSBuZXZlciBoYXBwZW5lZC4gIExpbmVzIHRoYXQgd2VyZSBjaGFuZ2VkIG9yIGFkZGVkIGJ5IGFuIGlnbm9yZWQKKwljb21taXQgd2lsbCBiZSBibGFtZWQgb24gdGhlIHByZXZpb3VzIGNvbW1pdCB0aGF0IGNoYW5nZWQgdGhhdCBsaW5lIG9yCisJbmVhcmJ5IGxpbmVzLiAgVGhpcyBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBpZ25vcmUKKwltb3JlIHRoYW4gb25lIHJldmlzaW9uLiAgSWYgdGhlIGBibGFtZS5tYXJrSWdub3JlZExpbmVzYCBjb25maWcgb3B0aW9uCisJaXMgc2V0LCB0aGVuIGxpbmVzIHRoYXQgd2VyZSBjaGFuZ2VkIGJ5IGFuIGlnbm9yZWQgY29tbWl0IGFuZCBhdHRyaWJ1dGVkIHRvCisJYW5vdGhlciBjb21taXQgd2lsbCBiZSBtYXJrZWQgd2l0aCBhIGA/YCBpbiB0aGUgYmxhbWUgb3V0cHV0LiAgSWYgdGhlCisJYGJsYW1lLm1hcmtVbmJsYW1hYmxlTGluZXNgIGNvbmZpZyBvcHRpb24gaXMgc2V0LCB0aGVuIHRob3NlIGxpbmVzIHRvdWNoZWQKKwlieSBhbiBpZ25vcmVkIGNvbW1pdCB0aGF0IHdlIGNvdWxkIG5vdCBhdHRyaWJ1dGUgdG8gYW5vdGhlciByZXZpc2lvbiBhcmUKKwltYXJrZWQgd2l0aCBhICcqJy4KKworLS1pZ25vcmUtcmV2cy1maWxlIDxmaWxlPjo6CisJSWdub3JlIHJldmlzaW9ucyBsaXN0ZWQgaW4gYGZpbGVgLCB3aGljaCBtdXN0IGJlIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBhbgorCWBmc2NrLnNraXBMaXN0YC4gIFRoaXMgb3B0aW9uIG1heSBiZSByZXBlYXRlZCwgYW5kIHRoZXNlIGZpbGVzIHdpbGwgYmUKKwlwcm9jZXNzZWQgYWZ0ZXIgYW55IGZpbGVzIHNwZWNpZmllZCB3aXRoIHRoZSBgYmxhbWUuaWdub3JlUmV2c0ZpbGVgIGNvbmZpZworCW9wdGlvbi4gIEFuIGVtcHR5IGZpbGUgbmFtZSwgYCIiYCwgd2lsbCBjbGVhciB0aGUgbGlzdCBvZiByZXZzIGZyb20KKwlwcmV2aW91c2x5IHByb2Nlc3NlZCBmaWxlcy4KKworLWg6OgorCVNob3cgaGVscCBtZXNzYWdlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9idWlsZC1kb2NkZXAucGVybCBiL0RvY3VtZW50YXRpb24vYnVpbGQtZG9jZGVwLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmE0MjA1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYnVpbGQtZG9jZGVwLnBlcmwKQEAgLTAsMCArMSw0NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK215ICVpbmNsdWRlID0gKCk7CitteSAlaW5jbHVkZWQgPSAoKTsKKworZm9yIG15ICR0ZXh0ICg8Ki50eHQ+KSB7CisgICAgb3BlbiBJLCAnPCcsICR0ZXh0IHx8IGRpZSAiY2Fubm90IHJlYWQ6ICR0ZXh0IjsKKyAgICB3aGlsZSAoPEk+KSB7CisJaWYgKC9eaW5jbHVkZTo6LykgeworCSAgICBjaG9tcDsKKwkgICAgcy9eaW5jbHVkZTo6XHMqLy87CisJICAgIHMvXFtcXS8vOworCSAgICAkaW5jbHVkZXskdGV4dH17JF99ID0gMTsKKwkgICAgJGluY2x1ZGVkeyRffSA9IDE7CisJfQorICAgIH0KKyAgICBjbG9zZSBJOworfQorCisjIERvIHdlIGNhcmUgYWJvdXQgY2hhaW5lZCBpbmNsdWRlcz8/PworbXkgJGNoYW5nZWQgPSAxOword2hpbGUgKCRjaGFuZ2VkKSB7CisgICAgJGNoYW5nZWQgPSAwOworICAgIHdoaWxlIChteSAoJHRleHQsICRpbmNsdWRlZCkgPSBlYWNoICVpbmNsdWRlKSB7CisJZm9yIG15ICRpIChrZXlzICUkaW5jbHVkZWQpIHsKKwkgICAgIyAkdGV4dCBoYXMgaW5jbHVkZTo6JGk7IGlmICRpIGluY2x1ZGVzICRqCisJICAgICMgJHRleHQgaW5kaXJlY3RseSBpbmNsdWRlcyAkai4KKwkgICAgaWYgKGV4aXN0cyAkaW5jbHVkZXskaX0pIHsKKwkJZm9yIG15ICRqIChrZXlzICV7JGluY2x1ZGV7JGl9fSkgeworCQkgICAgaWYgKCFleGlzdHMgJGluY2x1ZGV7JHRleHR9eyRqfSkgeworCQkJJGluY2x1ZGV7JHRleHR9eyRqfSA9IDE7CisJCQkkaW5jbHVkZWR7JGp9ID0gMTsKKwkJCSRjaGFuZ2VkID0gMTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KK30KKword2hpbGUgKG15ICgkdGV4dCwgJGluY2x1ZGVkKSA9IGVhY2ggJWluY2x1ZGUpIHsKKyAgICBpZiAoISBleGlzdHMgJGluY2x1ZGVkeyR0ZXh0fSAmJgorCShteSAkYmFzZSA9ICR0ZXh0KSA9fiBzL1wudHh0JC8vKSB7CisJcHJpbnQgIiRiYXNlLmh0bWwgJGJhc2UueG1sIDogIiwgam9pbigiICIsIGtleXMgJSRpbmNsdWRlZCksICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYXQtdGV4aS5wZXJsIGIvRG9jdW1lbnRhdGlvbi9jYXQtdGV4aS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0ZDJmODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NhdC10ZXhpLnBlcmwKQEAgLTAsMCArMSw0NiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK215IEBtZW51ID0gKCk7CitteSAkb3V0cHV0ID0gJEFSR1ZbMF07CisKK29wZW4gbXkgJHRtcCwgJz4nLCAiJG91dHB1dC50bXAiOworCit3aGlsZSAoPFNURElOPikgeworCW5leHQgaWYgKC9eXFxpbnB1dCB0ZXhpbmZvLy4uL1xAbm9kZSBUb3AvKTsKKwluZXh0IGlmICgvXlxAYnllLyB8fCAvXlwuZnQvKTsKKwlpZiAocy9eXEB0b3AgKC4qKS9cQG5vZGUgJDEsLCxUb3AvKSB7CisJCXB1c2ggQG1lbnUsICQxOworCX0KKwlzL1woXEBweHJlZlx7XFsoVVJMU3xSRU1PVEVTKVxdfVwpLy87CisJcy9cQGFuY2hvclx7W157fV0qXH0vL2c7CisJcHJpbnQgJHRtcCAkXzsKK30KK2Nsb3NlICR0bXA7CisKK3ByaW50ICdcaW5wdXQgdGV4aW5mbworQHNldGZpbGVuYW1lIGdpdG1hbi5pbmZvCitAZG9jdW1lbnRlbmNvZGluZyBVVEYtOAorQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogR2l0IE1hbiBQYWdlczogKGdpdG1hbikuICBNYW51YWwgcGFnZXMgZm9yIEdpdCByZXZpc2lvbiBjb250cm9sIHN5c3RlbQorQGVuZCBkaXJlbnRyeQorQG5vZGUgVG9wLCwsIChkaXIpCitAdG9wIEdpdCBNYW51YWwgUGFnZXMKK0Bkb2N1bWVudGxhbmd1YWdlIGVuCitAbWVudQorJzsKKworZm9yIChAbWVudSkgeworCXByaW50ICIqICR7X306OlxuIjsKK30KK3ByaW50ICJcQGVuZCBtZW51XG4iOworb3BlbiAkdG1wLCAnPCcsICIkb3V0cHV0LnRtcCI7Cit3aGlsZSAoPCR0bXA+KSB7CisJcHJpbnQ7Cit9CitjbG9zZSAkdG1wOworcHJpbnQgIlxAYnllXG4iOwordW5saW5rICIkb3V0cHV0LnRtcCI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NtZC1saXN0LnBlcmwgYi9Eb2N1bWVudGF0aW9uL2NtZC1saXN0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWFhNzNjZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY21kLWxpc3QucGVybApAQCAtMCwwICsxLDc4IEBACisjIS91c3IvYmluL3BlcmwgLXcKKwordXNlIEZpbGU6OkNvbXBhcmUgcXcoY29tcGFyZSk7CisKK3N1YiBmb3JtYXRfb25lIHsKKwlteSAoJG91dCwgJG5hbWVhdHRyKSA9IEBfOworCW15ICgkbmFtZSwgJGF0dHIpID0gQCRuYW1lYXR0cjsKKwlteSAoJHN0YXRlLCAkZGVzY3JpcHRpb24pOworCSRzdGF0ZSA9IDA7CisJb3BlbiBJLCAnPCcsICIkbmFtZS50eHQiIG9yIGRpZSAiTm8gc3VjaCBmaWxlICRuYW1lLnR4dCI7CisJd2hpbGUgKDxJPikgeworCQlpZiAoL15OQU1FJC8pIHsKKwkJCSRzdGF0ZSA9IDE7CisJCQluZXh0OworCQl9CisJCWlmICgkc3RhdGUgPT0gMSAmJiAvXi0tLS0kLykgeworCQkJJHN0YXRlID0gMjsKKwkJCW5leHQ7CisJCX0KKwkJbmV4dCBpZiAoJHN0YXRlICE9IDIpOworCQljaG9tcDsKKwkJJGRlc2NyaXB0aW9uID0gJF87CisJCWxhc3Q7CisJfQorCWNsb3NlIEk7CisJaWYgKCFkZWZpbmVkICRkZXNjcmlwdGlvbikgeworCQlkaWUgIk5vIGRlc2NyaXB0aW9uIGZvdW5kIGluICRuYW1lLnR4dCI7CisJfQorCWlmIChteSAoJHZlcmlmeV9uYW1lLCAkdGV4dCkgPSAoJGRlc2NyaXB0aW9uID1+IC9eKCRuYW1lKSAtICguKikvKSkgeworCQlwcmludCAkb3V0ICJsaW5rZ2l0OiRuYW1lXFsxXF06OlxuXHQiOworCQlpZiAoJGF0dHIgPX4gLyBkZXByZWNhdGVkIC8pIHsKKwkJCXByaW50ICRvdXQgIihkZXByZWNhdGVkKSAiOworCQl9CisJCXByaW50ICRvdXQgIiR0ZXh0LlxuXG4iOworCX0KKwllbHNlIHsKKwkJZGllICJEZXNjcmlwdGlvbiBkb2VzIG5vdCBtYXRjaCAkbmFtZTogJGRlc2NyaXB0aW9uIjsKKwl9Cit9CisKK3doaWxlICg8PikgeworCWxhc3QgaWYgL14jIyMgY29tbWFuZCBsaXN0LzsKK30KKworbXkgJWNtZHMgPSAoKTsKK2ZvciAoc29ydCA8PikgeworCW5leHQgaWYgL14jLzsKKworCWNob21wOworCW15ICgkbmFtZSwgJGNhdCwgJGF0dHIpID0gL14oXFMrKVxzKyguKj8pKD86XHMrKC4qKSk/JC87CisJJGF0dHIgPSAnJyB1bmxlc3MgZGVmaW5lZCAkYXR0cjsKKwlwdXNoIEB7JGNtZHN7JGNhdH19LCBbJG5hbWUsICIgJGF0dHIgIl07Cit9CisKK2ZvciBteSAkY2F0IChxdyhhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCisJCWFuY2lsbGFyeW1hbmlwdWxhdG9ycworCQltYWlucG9yY2VsYWluCisJCXBsdW1iaW5naW50ZXJyb2dhdG9ycworCQlwbHVtYmluZ21hbmlwdWxhdG9ycworCQlzeW5jaGluZ3JlcG9zaXRvcmllcworCQlmb3JlaWduc2NtaW50ZXJmYWNlCisJCXB1cmVoZWxwZXJzCisJCXN5bmNoZWxwZXJzKSkgeworCW15ICRvdXQgPSAiY21kcy0kY2F0LnR4dCI7CisJb3BlbiBPLCAnPicsICIkb3V0KyIgb3IgZGllICJDYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAkb3V0KyI7CisJZm9yIChAeyRjbWRzeyRjYXR9fSkgeworCQlmb3JtYXRfb25lKFwqTywgJF8pOworCX0KKwljbG9zZSBPOworCisJaWYgKC1mICIkb3V0IiAmJiBjb21wYXJlKCIkb3V0IiwgIiRvdXQrIikgPT0gMCkgeworCQl1bmxpbmsgIiRvdXQrIjsKKwl9CisJZWxzZSB7CisJCXByaW50IFNUREVSUiAiJG91dFxuIjsKKwkJcmVuYW1lICIkb3V0KyIsICIkb3V0IjsKKwl9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiMTNiYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dApAQCAtMCwwICsxLDQ2NiBAQAorQ09ORklHVVJBVElPTiBGSUxFCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEdpdCBjb25maWd1cmF0aW9uIGZpbGUgY29udGFpbnMgYSBudW1iZXIgb2YgdmFyaWFibGVzIHRoYXQgYWZmZWN0Cit0aGUgR2l0IGNvbW1hbmRzJyBiZWhhdmlvci4gVGhlIGZpbGVzIGAuZ2l0L2NvbmZpZ2AgYW5kIG9wdGlvbmFsbHkKK2Bjb25maWcud29ya3RyZWVgIChzZWUgYGV4dGVuc2lvbnMud29ya3RyZWVDb25maWdgIGJlbG93KSBpbiBlYWNoCityZXBvc2l0b3J5IGFyZSB1c2VkIHRvIHN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGF0IHJlcG9zaXRvcnksIGFuZAorYCRIT01FLy5naXRjb25maWdgIGlzIHVzZWQgdG8gc3RvcmUgYSBwZXItdXNlciBjb25maWd1cmF0aW9uIGFzCitmYWxsYmFjayB2YWx1ZXMgZm9yIHRoZSBgLmdpdC9jb25maWdgIGZpbGUuIFRoZSBmaWxlIGAvZXRjL2dpdGNvbmZpZ2AKK2NhbiBiZSB1c2VkIHRvIHN0b3JlIGEgc3lzdGVtLXdpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorCitUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYXJlIHVzZWQgYnkgYm90aCB0aGUgR2l0IHBsdW1iaW5nCithbmQgdGhlIHBvcmNlbGFpbnMuIFRoZSB2YXJpYWJsZXMgYXJlIGRpdmlkZWQgaW50byBzZWN0aW9ucywgd2hlcmVpbgordGhlIGZ1bGx5IHF1YWxpZmllZCB2YXJpYWJsZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBpdHNlbGYgaXMgdGhlIGxhc3QKK2RvdC1zZXBhcmF0ZWQgc2VnbWVudCBhbmQgdGhlIHNlY3Rpb24gbmFtZSBpcyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgbGFzdAorZG90LiBUaGUgdmFyaWFibGUgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGFsbG93IG9ubHkgYWxwaGFudW1lcmljCitjaGFyYWN0ZXJzIGFuZCBgLWAsIGFuZCBtdXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIuICBTb21lCit2YXJpYWJsZXMgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lczsgd2Ugc2F5IHRoZW4gdGhhdCB0aGUgdmFyaWFibGUgaXMKK211bHRpdmFsdWVkLgorCitTeW50YXgKK35+fn5+fgorCitUaGUgc3ludGF4IGlzIGZhaXJseSBmbGV4aWJsZSBhbmQgcGVybWlzc2l2ZTsgd2hpdGVzcGFjZXMgYXJlIG1vc3RseQoraWdub3JlZC4gIFRoZSAnIycgYW5kICc7JyBjaGFyYWN0ZXJzIGJlZ2luIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgbGluZSwKK2JsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLgorCitUaGUgZmlsZSBjb25zaXN0cyBvZiBzZWN0aW9ucyBhbmQgdmFyaWFibGVzLiAgQSBzZWN0aW9uIGJlZ2lucyB3aXRoCit0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBpbiBzcXVhcmUgYnJhY2tldHMgYW5kIGNvbnRpbnVlcyB1bnRpbCB0aGUgbmV4dAorc2VjdGlvbiBiZWdpbnMuICBTZWN0aW9uIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLiAgT25seSBhbHBoYW51bWVyaWMKK2NoYXJhY3RlcnMsIGAtYCBhbmQgYC5gIGFyZSBhbGxvd2VkIGluIHNlY3Rpb24gbmFtZXMuICBFYWNoIHZhcmlhYmxlCittdXN0IGJlbG9uZyB0byBzb21lIHNlY3Rpb24sIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgbXVzdCBiZSBhIHNlY3Rpb24KK2hlYWRlciBiZWZvcmUgdGhlIGZpcnN0IHNldHRpbmcgb2YgYSB2YXJpYWJsZS4KKworU2VjdGlvbnMgY2FuIGJlIGZ1cnRoZXIgZGl2aWRlZCBpbnRvIHN1YnNlY3Rpb25zLiAgVG8gYmVnaW4gYSBzdWJzZWN0aW9uCitwdXQgaXRzIG5hbWUgaW4gZG91YmxlIHF1b3Rlcywgc2VwYXJhdGVkIGJ5IHNwYWNlIGZyb20gdGhlIHNlY3Rpb24gbmFtZSwKK2luIHRoZSBzZWN0aW9uIGhlYWRlciwgbGlrZSBpbiB0aGUgZXhhbXBsZSBiZWxvdzoKKworLS0tLS0tLS0KKwlbc2VjdGlvbiAic3Vic2VjdGlvbiJdCisKKy0tLS0tLS0tCisKK1N1YnNlY3Rpb24gbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlIGFuZCBjYW4gY29udGFpbiBhbnkgY2hhcmFjdGVycyBleGNlcHQKK25ld2xpbmUgYW5kIHRoZSBudWxsIGJ5dGUuIERvdWJsZXF1b3RlIGAiYCBhbmQgYmFja3NsYXNoIGNhbiBiZSBpbmNsdWRlZAorYnkgZXNjYXBpbmcgdGhlbSBhcyBgXCJgIGFuZCBgXFxgLCByZXNwZWN0aXZlbHkuIEJhY2tzbGFzaGVzIHByZWNlZGluZworb3RoZXIgY2hhcmFjdGVycyBhcmUgZHJvcHBlZCB3aGVuIHJlYWRpbmc7IGZvciBleGFtcGxlLCBgXHRgIGlzIHJlYWQgYXMKK2B0YCBhbmQgYFwwYCBpcyByZWFkIGFzIGAwYCBTZWN0aW9uIGhlYWRlcnMgY2Fubm90IHNwYW4gbXVsdGlwbGUgbGluZXMuCitWYXJpYWJsZXMgbWF5IGJlbG9uZyBkaXJlY3RseSB0byBhIHNlY3Rpb24gb3IgdG8gYSBnaXZlbiBzdWJzZWN0aW9uLiBZb3UKK2NhbiBoYXZlIGBbc2VjdGlvbl1gIGlmIHlvdSBoYXZlIGBbc2VjdGlvbiAic3Vic2VjdGlvbiJdYCwgYnV0IHlvdSBkb24ndAorbmVlZCB0by4KKworVGhlcmUgaXMgYWxzbyBhIGRlcHJlY2F0ZWQgYFtzZWN0aW9uLnN1YnNlY3Rpb25dYCBzeW50YXguIFdpdGggdGhpcworc3ludGF4LCB0aGUgc3Vic2VjdGlvbiBuYW1lIGlzIGNvbnZlcnRlZCB0byBsb3dlci1jYXNlIGFuZCBpcyBhbHNvCitjb21wYXJlZCBjYXNlIHNlbnNpdGl2ZWx5LiBUaGVzZSBzdWJzZWN0aW9uIG5hbWVzIGZvbGxvdyB0aGUgc2FtZQorcmVzdHJpY3Rpb25zIGFzIHNlY3Rpb24gbmFtZXMuCisKK0FsbCB0aGUgb3RoZXIgbGluZXMgKGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIGFmdGVyIHRoZSBzZWN0aW9uCitoZWFkZXIpIGFyZSByZWNvZ25pemVkIGFzIHNldHRpbmcgdmFyaWFibGVzLCBpbiB0aGUgZm9ybQorJ25hbWUgPSB2YWx1ZScgKG9yIGp1c3QgJ25hbWUnLCB3aGljaCBpcyBhIHNob3J0LWhhbmQgdG8gc2F5IHRoYXQKK3RoZSB2YXJpYWJsZSBpcyB0aGUgYm9vbGVhbiAidHJ1ZSIpLgorVGhlIHZhcmlhYmxlIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLCBhbGxvdyBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzCithbmQgYC1gLCBhbmQgbXVzdCBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyLgorCitBIGxpbmUgdGhhdCBkZWZpbmVzIGEgdmFsdWUgY2FuIGJlIGNvbnRpbnVlZCB0byB0aGUgbmV4dCBsaW5lIGJ5CitlbmRpbmcgaXQgd2l0aCBhIGBcYDsgdGhlIGJhY2txdW90ZSBhbmQgdGhlIGVuZC1vZi1saW5lIGFyZQorc3RyaXBwZWQuICBMZWFkaW5nIHdoaXRlc3BhY2VzIGFmdGVyICduYW1lID0nLCB0aGUgcmVtYWluZGVyIG9mIHRoZQorbGluZSBhZnRlciB0aGUgZmlyc3QgY29tbWVudCBjaGFyYWN0ZXIgJyMnIG9yICc7JywgYW5kIHRyYWlsaW5nCit3aGl0ZXNwYWNlcyBvZiB0aGUgbGluZSBhcmUgZGlzY2FyZGVkIHVubGVzcyB0aGV5IGFyZSBlbmNsb3NlZCBpbgorZG91YmxlIHF1b3Rlcy4gIEludGVybmFsIHdoaXRlc3BhY2VzIHdpdGhpbiB0aGUgdmFsdWUgYXJlIHJldGFpbmVkCit2ZXJiYXRpbS4KKworSW5zaWRlIGRvdWJsZSBxdW90ZXMsIGRvdWJsZSBxdW90ZSBgImAgYW5kIGJhY2tzbGFzaCBgXGAgY2hhcmFjdGVycworbXVzdCBiZSBlc2NhcGVkOiB1c2UgYFwiYCBmb3IgYCJgIGFuZCBgXFxgIGZvciBgXGAuCisKK1RoZSBmb2xsb3dpbmcgZXNjYXBlIHNlcXVlbmNlcyAoYmVzaWRlIGBcImAgYW5kIGBcXGApIGFyZSByZWNvZ25pemVkOgorYFxuYCBmb3IgbmV3bGluZSBjaGFyYWN0ZXIgKE5MKSwgYFx0YCBmb3IgaG9yaXpvbnRhbCB0YWJ1bGF0aW9uIChIVCwgVEFCKQorYW5kIGBcYmAgZm9yIGJhY2tzcGFjZSAoQlMpLiAgT3RoZXIgY2hhciBlc2NhcGUgc2VxdWVuY2VzIChpbmNsdWRpbmcgb2N0YWwKK2VzY2FwZSBzZXF1ZW5jZXMpIGFyZSBpbnZhbGlkLgorCisKK0luY2x1ZGVzCit+fn5+fn5+fgorCitUaGUgYGluY2x1ZGVgIGFuZCBgaW5jbHVkZUlmYCBzZWN0aW9ucyBhbGxvdyB5b3UgdG8gaW5jbHVkZSBjb25maWcKK2RpcmVjdGl2ZXMgZnJvbSBhbm90aGVyIHNvdXJjZS4gVGhlc2Ugc2VjdGlvbnMgYmVoYXZlIGlkZW50aWNhbGx5IHRvCitlYWNoIG90aGVyIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGBpbmNsdWRlSWZgIHNlY3Rpb25zIG1heSBiZSBpZ25vcmVkCitpZiB0aGVpciBjb25kaXRpb24gZG9lcyBub3QgZXZhbHVhdGUgdG8gdHJ1ZTsgc2VlICJDb25kaXRpb25hbCBpbmNsdWRlcyIKK2JlbG93LgorCitZb3UgY2FuIGluY2x1ZGUgYSBjb25maWcgZmlsZSBmcm9tIGFub3RoZXIgYnkgc2V0dGluZyB0aGUgc3BlY2lhbAorYGluY2x1ZGUucGF0aGAgKG9yIGBpbmNsdWRlSWYuKi5wYXRoYCkgdmFyaWFibGUgdG8gdGhlIG5hbWUgb2YgdGhlIGZpbGUKK3RvIGJlIGluY2x1ZGVkLiBUaGUgdmFyaWFibGUgdGFrZXMgYSBwYXRobmFtZSBhcyBpdHMgdmFsdWUsIGFuZCBpcworc3ViamVjdCB0byB0aWxkZSBleHBhbnNpb24uIFRoZXNlIHZhcmlhYmxlcyBjYW4gYmUgZ2l2ZW4gbXVsdGlwbGUgdGltZXMuCisKK1RoZSBjb250ZW50cyBvZiB0aGUgaW5jbHVkZWQgZmlsZSBhcmUgaW5zZXJ0ZWQgaW1tZWRpYXRlbHksIGFzIGlmIHRoZXkKK2hhZCBiZWVuIGZvdW5kIGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgaW5jbHVkZSBkaXJlY3RpdmUuIElmIHRoZSB2YWx1ZSBvZiB0aGUKK3ZhcmlhYmxlIGlzIGEgcmVsYXRpdmUgcGF0aCwgdGhlIHBhdGggaXMgY29uc2lkZXJlZCB0bworYmUgcmVsYXRpdmUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB3aGljaCB0aGUgaW5jbHVkZSBkaXJlY3RpdmUKK3dhcyBmb3VuZC4gIFNlZSBiZWxvdyBmb3IgZXhhbXBsZXMuCisKK0NvbmRpdGlvbmFsIGluY2x1ZGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIGluY2x1ZGUgYSBjb25maWcgZmlsZSBmcm9tIGFub3RoZXIgY29uZGl0aW9uYWxseSBieSBzZXR0aW5nIGEKK2BpbmNsdWRlSWYuPGNvbmRpdGlvbj4ucGF0aGAgdmFyaWFibGUgdG8gdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUKK2luY2x1ZGVkLgorCitUaGUgY29uZGl0aW9uIHN0YXJ0cyB3aXRoIGEga2V5d29yZCBmb2xsb3dlZCBieSBhIGNvbG9uIGFuZCBzb21lIGRhdGEKK3dob3NlIGZvcm1hdCBhbmQgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSBrZXl3b3JkLiBTdXBwb3J0ZWQga2V5d29yZHMKK2FyZToKKworYGdpdGRpcmA6OgorCisJVGhlIGRhdGEgdGhhdCBmb2xsb3dzIHRoZSBrZXl3b3JkIGBnaXRkaXI6YCBpcyB1c2VkIGFzIGEgZ2xvYgorCXBhdHRlcm4uIElmIHRoZSBsb2NhdGlvbiBvZiB0aGUgLmdpdCBkaXJlY3RvcnkgbWF0Y2hlcyB0aGUKKwlwYXR0ZXJuLCB0aGUgaW5jbHVkZSBjb25kaXRpb24gaXMgbWV0LgorKworVGhlIC5naXQgbG9jYXRpb24gbWF5IGJlIGF1dG8tZGlzY292ZXJlZCwgb3IgY29tZSBmcm9tIGAkR0lUX0RJUmAKK2Vudmlyb25tZW50IHZhcmlhYmxlLiBJZiB0aGUgcmVwb3NpdG9yeSBpcyBhdXRvIGRpc2NvdmVyZWQgdmlhIGEgLmdpdAorZmlsZSAoZS5nLiBmcm9tIHN1Ym1vZHVsZXMsIG9yIGEgbGlua2VkIHdvcmt0cmVlKSwgdGhlIC5naXQgbG9jYXRpb24KK3dvdWxkIGJlIHRoZSBmaW5hbCBsb2NhdGlvbiB3aGVyZSB0aGUgLmdpdCBkaXJlY3RvcnkgaXMsIG5vdCB3aGVyZSB0aGUKKy5naXQgZmlsZSBpcy4KKysKK1RoZSBwYXR0ZXJuIGNhbiBjb250YWluIHN0YW5kYXJkIGdsb2JiaW5nIHdpbGRjYXJkcyBhbmQgdHdvIGFkZGl0aW9uYWwKK29uZXMsIGAqKi9gIGFuZCBgLyoqYCwgdGhhdCBjYW4gbWF0Y2ggbXVsdGlwbGUgcGF0aCBjb21wb25lbnRzLiBQbGVhc2UKK3JlZmVyIHRvIGxpbmtnaXQ6Z2l0aWdub3JlWzVdIGZvciBkZXRhaWxzLiBGb3IgY29udmVuaWVuY2U6CisKKyAqIElmIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGB+L2AsIGB+YCB3aWxsIGJlIHN1YnN0aXR1dGVkIHdpdGggdGhlCisgICBjb250ZW50IG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgSE9NRWAuCisKKyAqIElmIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGAuL2AsIGl0IGlzIHJlcGxhY2VkIHdpdGggdGhlIGRpcmVjdG9yeQorICAgY29udGFpbmluZyB0aGUgY3VycmVudCBjb25maWcgZmlsZS4KKworICogSWYgdGhlIHBhdHRlcm4gZG9lcyBub3Qgc3RhcnQgd2l0aCBlaXRoZXIgYH4vYCwgYC4vYCBvciBgL2AsIGAqKi9gCisgICB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHJlcGVuZGVkLiBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4gYGZvby9iYXJgCisgICBiZWNvbWVzIGAqKi9mb28vYmFyYCBhbmQgd291bGQgbWF0Y2ggYC9hbnkvcGF0aC90by9mb28vYmFyYC4KKworICogSWYgdGhlIHBhdHRlcm4gZW5kcyB3aXRoIGAvYCwgYCoqYCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQuIEZvcgorICAgZXhhbXBsZSwgdGhlIHBhdHRlcm4gYGZvby9gIGJlY29tZXMgYGZvby8qKmAuIEluIG90aGVyIHdvcmRzLCBpdAorICAgbWF0Y2hlcyAiZm9vIiBhbmQgZXZlcnl0aGluZyBpbnNpZGUsIHJlY3Vyc2l2ZWx5LgorCitgZ2l0ZGlyL2lgOjoKKwlUaGlzIGlzIHRoZSBzYW1lIGFzIGBnaXRkaXJgIGV4Y2VwdCB0aGF0IG1hdGNoaW5nIGlzIGRvbmUKKwljYXNlLWluc2Vuc2l0aXZlbHkgKGUuZy4gb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMpCisKK2BvbmJyYW5jaGA6OgorCVRoZSBkYXRhIHRoYXQgZm9sbG93cyB0aGUga2V5d29yZCBgb25icmFuY2g6YCBpcyB0YWtlbiB0byBiZSBhCisJcGF0dGVybiB3aXRoIHN0YW5kYXJkIGdsb2JiaW5nIHdpbGRjYXJkcyBhbmQgdHdvIGFkZGl0aW9uYWwKKwlvbmVzLCBgKiovYCBhbmQgYC8qKmAsIHRoYXQgY2FuIG1hdGNoIG11bHRpcGxlIHBhdGggY29tcG9uZW50cy4KKwlJZiB3ZSBhcmUgaW4gYSB3b3JrdHJlZSB3aGVyZSB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRoYXQgaXMKKwljdXJyZW50bHkgY2hlY2tlZCBvdXQgbWF0Y2hlcyB0aGUgcGF0dGVybiwgdGhlIGluY2x1ZGUgY29uZGl0aW9uCisJaXMgbWV0LgorKworSWYgdGhlIHBhdHRlcm4gZW5kcyB3aXRoIGAvYCwgYCoqYCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQuIEZvcgorZXhhbXBsZSwgdGhlIHBhdHRlcm4gYGZvby9gIGJlY29tZXMgYGZvby8qKmAuIEluIG90aGVyIHdvcmRzLCBpdCBtYXRjaGVzCithbGwgYnJhbmNoZXMgdGhhdCBiZWdpbiB3aXRoIGBmb28vYC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBicmFuY2hlcyBhcmUKK29yZ2FuaXplZCBoaWVyYXJjaGljYWxseSBhbmQgeW91IHdvdWxkIGxpa2UgdG8gYXBwbHkgYSBjb25maWd1cmF0aW9uIHRvCithbGwgdGhlIGJyYW5jaGVzIGluIHRoYXQgaGllcmFyY2h5LgorCitBIGZldyBtb3JlIG5vdGVzIG9uIG1hdGNoaW5nIHZpYSBgZ2l0ZGlyYCBhbmQgYGdpdGRpci9pYDoKKworICogU3ltbGlua3MgaW4gYCRHSVRfRElSYCBhcmUgbm90IHJlc29sdmVkIGJlZm9yZSBtYXRjaGluZy4KKworICogQm90aCB0aGUgc3ltbGluayAmIHJlYWxwYXRoIHZlcnNpb25zIG9mIHBhdGhzIHdpbGwgYmUgbWF0Y2hlZAorICAgb3V0c2lkZSBvZiBgJEdJVF9ESVJgLiBFLmcuIGlmIH4vZ2l0IGlzIGEgc3ltbGluayB0bworICAgL21udC9zdG9yYWdlL2dpdCwgYm90aCBgZ2l0ZGlyOn4vZ2l0YCBhbmQgYGdpdGRpcjovbW50L3N0b3JhZ2UvZ2l0YAorICAgd2lsbCBtYXRjaC4KKysKK1RoaXMgd2FzIG5vdCB0aGUgY2FzZSBpbiB0aGUgaW5pdGlhbCByZWxlYXNlIG9mIHRoaXMgZmVhdHVyZSBpbgordjIuMTMuMCwgd2hpY2ggb25seSBtYXRjaGVkIHRoZSByZWFscGF0aCB2ZXJzaW9uLiBDb25maWd1cmF0aW9uIHRoYXQKK3dhbnRzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaW5pdGlhbCByZWxlYXNlIG9mIHRoaXMgZmVhdHVyZSBuZWVkcwordG8gZWl0aGVyIHNwZWNpZnkgb25seSB0aGUgcmVhbHBhdGggdmVyc2lvbiwgb3IgYm90aCB2ZXJzaW9ucy4KKworICogTm90ZSB0aGF0ICIuLi8iIGlzIG5vdCBzcGVjaWFsIGFuZCB3aWxsIG1hdGNoIGxpdGVyYWxseSwgd2hpY2ggaXMKKyAgIHVubGlrZWx5IHdoYXQgeW91IHdhbnQuCisKK0V4YW1wbGUKK35+fn5+fn4KKworLS0tLQorIyBDb3JlIHZhcmlhYmxlcworW2NvcmVdCisJOyBEb24ndCB0cnVzdCBmaWxlIG1vZGVzCisJZmlsZW1vZGUgPSBmYWxzZQorCisjIE91ciBkaWZmIGFsZ29yaXRobQorW2RpZmZdCisJZXh0ZXJuYWwgPSAvdXNyL2xvY2FsL2Jpbi9kaWZmLXdyYXBwZXIKKwlyZW5hbWVzID0gdHJ1ZQorCitbYnJhbmNoICJkZXZlbCJdCisJcmVtb3RlID0gb3JpZ2luCisJbWVyZ2UgPSByZWZzL2hlYWRzL2RldmVsCisKKyMgUHJveHkgc2V0dGluZ3MKK1tjb3JlXQorCWdpdFByb3h5PSJzc2giIGZvciAia2VybmVsLm9yZyIKKwlnaXRQcm94eT1kZWZhdWx0LXByb3h5IDsgZm9yIHRoZSByZXN0CisKK1tpbmNsdWRlXQorCXBhdGggPSAvcGF0aC90by9mb28uaW5jIDsgaW5jbHVkZSBieSBhYnNvbHV0ZSBwYXRoCisJcGF0aCA9IGZvby5pbmMgOyBmaW5kICJmb28uaW5jIiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBmaWxlCisJcGF0aCA9IH4vZm9vLmluYyA7IGZpbmQgImZvby5pbmMiIGluIHlvdXIgYCRIT01FYCBkaXJlY3RvcnkKKworOyBpbmNsdWRlIGlmICRHSVRfRElSIGlzIC9wYXRoL3RvL2Zvby8uZ2l0CitbaW5jbHVkZUlmICJnaXRkaXI6L3BhdGgvdG8vZm9vLy5naXQiXQorCXBhdGggPSAvcGF0aC90by9mb28uaW5jCisKKzsgaW5jbHVkZSBmb3IgYWxsIHJlcG9zaXRvcmllcyBpbnNpZGUgL3BhdGgvdG8vZ3JvdXAKK1tpbmNsdWRlSWYgImdpdGRpcjovcGF0aC90by9ncm91cC8iXQorCXBhdGggPSAvcGF0aC90by9mb28uaW5jCisKKzsgaW5jbHVkZSBmb3IgYWxsIHJlcG9zaXRvcmllcyBpbnNpZGUgJEhPTUUvdG8vZ3JvdXAKK1tpbmNsdWRlSWYgImdpdGRpcjp+L3RvL2dyb3VwLyJdCisJcGF0aCA9IC9wYXRoL3RvL2Zvby5pbmMKKworOyByZWxhdGl2ZSBwYXRocyBhcmUgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZSBpbmNsdWRpbmcKKzsgZmlsZSAoaWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlKTsgdGhlaXIgbG9jYXRpb24gaXMgbm90Cis7IGFmZmVjdGVkIGJ5IHRoZSBjb25kaXRpb24KK1tpbmNsdWRlSWYgImdpdGRpcjovcGF0aC90by9ncm91cC8iXQorCXBhdGggPSBmb28uaW5jCistLS0tCisKKwk7IGluY2x1ZGUgb25seSBpZiB3ZSBhcmUgaW4gYSB3b3JrdHJlZSB3aGVyZSBmb28tYnJhbmNoIGlzCisJOyBjdXJyZW50bHkgY2hlY2tlZCBvdXQKKwlbaW5jbHVkZUlmICJvbmJyYW5jaDpmb28tYnJhbmNoIl0KKwkJcGF0aCA9IGZvby5pbmMKKworVmFsdWVzCit+fn5+fn4KKworVmFsdWVzIG9mIG1hbnkgdmFyaWFibGVzIGFyZSB0cmVhdGVkIGFzIGEgc2ltcGxlIHN0cmluZywgYnV0IHRoZXJlCithcmUgdmFyaWFibGVzIHRoYXQgdGFrZSB2YWx1ZXMgb2Ygc3BlY2lmaWMgdHlwZXMgYW5kIHRoZXJlIGFyZSBydWxlcworYXMgdG8gaG93IHRvIHNwZWxsIHRoZW0uCisKK2Jvb2xlYW46OgorCisgICAgICAgV2hlbiBhIHZhcmlhYmxlIGlzIHNhaWQgdG8gdGFrZSBhIGJvb2xlYW4gdmFsdWUsIG1hbnkKKyAgICAgICBzeW5vbnltcyBhcmUgYWNjZXB0ZWQgZm9yICd0cnVlJyBhbmQgJ2ZhbHNlJzsgdGhlc2UgYXJlIGFsbAorICAgICAgIGNhc2UtaW5zZW5zaXRpdmUuCisKKwl0cnVlOzsgQm9vbGVhbiB0cnVlIGxpdGVyYWxzIGFyZSBgeWVzYCwgYG9uYCwgYHRydWVgLAorCQlhbmQgYDFgLiAgQWxzbywgYSB2YXJpYWJsZSBkZWZpbmVkIHdpdGhvdXQgYD0gPHZhbHVlPmAKKwkJaXMgdGFrZW4gYXMgdHJ1ZS4KKworCWZhbHNlOzsgQm9vbGVhbiBmYWxzZSBsaXRlcmFscyBhcmUgYG5vYCwgYG9mZmAsIGBmYWxzZWAsCisJCWAwYCBhbmQgdGhlIGVtcHR5IHN0cmluZy4KKysKK1doZW4gY29udmVydGluZyBhIHZhbHVlIHRvIGl0cyBjYW5vbmljYWwgZm9ybSB1c2luZyB0aGUgYC0tdHlwZT1ib29sYCB0eXBlCitzcGVjaWZpZXIsICdnaXQgY29uZmlnJyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBvdXRwdXQgaXMgInRydWUiIG9yCisiZmFsc2UiIChzcGVsbGVkIGluIGxvd2VyY2FzZSkuCisKK2ludGVnZXI6OgorICAgICAgIFRoZSB2YWx1ZSBmb3IgbWFueSB2YXJpYWJsZXMgdGhhdCBzcGVjaWZ5IHZhcmlvdXMgc2l6ZXMgY2FuCisgICAgICAgYmUgc3VmZml4ZWQgd2l0aCBga2AsIGBNYCwuLi4gdG8gbWVhbiAic2NhbGUgdGhlIG51bWJlciBieQorICAgICAgIDEwMjQiLCAiYnkgMTAyNHgxMDI0IiwgZXRjLgorCitjb2xvcjo6CisgICAgICAgVGhlIHZhbHVlIGZvciBhIHZhcmlhYmxlIHRoYXQgdGFrZXMgYSBjb2xvciBpcyBhIGxpc3Qgb2YKKyAgICAgICBjb2xvcnMgKGF0IG1vc3QgdHdvLCBvbmUgZm9yIGZvcmVncm91bmQgYW5kIG9uZSBmb3IgYmFja2dyb3VuZCkKKyAgICAgICBhbmQgYXR0cmlidXRlcyAoYXMgbWFueSBhcyB5b3Ugd2FudCksIHNlcGFyYXRlZCBieSBzcGFjZXMuCisrCitUaGUgYmFzaWMgY29sb3JzIGFjY2VwdGVkIGFyZSBgbm9ybWFsYCwgYGJsYWNrYCwgYHJlZGAsIGBncmVlbmAsIGB5ZWxsb3dgLAorYGJsdWVgLCBgbWFnZW50YWAsIGBjeWFuYCBhbmQgYHdoaXRlYC4gIFRoZSBmaXJzdCBjb2xvciBnaXZlbiBpcyB0aGUKK2ZvcmVncm91bmQ7IHRoZSBzZWNvbmQgaXMgdGhlIGJhY2tncm91bmQuICBBbGwgdGhlIGJhc2ljIGNvbG9ycyBleGNlcHQKK2Bub3JtYWxgIGhhdmUgYSBicmlnaHQgdmFyaWFudCB0aGF0IGNhbiBiZSBzcGVmaWNpZWQgYnkgcHJlZml4aW5nIHRoZQorY29sb3Igd2l0aCBgYnJpZ2h0YCwgbGlrZSBgYnJpZ2h0cmVkYC4KKysKK0NvbG9ycyBtYXkgYWxzbyBiZSBnaXZlbiBhcyBudW1iZXJzIGJldHdlZW4gMCBhbmQgMjU1OyB0aGVzZSB1c2UgQU5TSQorMjU2LWNvbG9yIG1vZGUgKGJ1dCBub3RlIHRoYXQgbm90IGFsbCB0ZXJtaW5hbHMgbWF5IHN1cHBvcnQgdGhpcykuICBJZgoreW91ciB0ZXJtaW5hbCBzdXBwb3J0cyBpdCwgeW91IG1heSBhbHNvIHNwZWNpZnkgMjQtYml0IFJHQiB2YWx1ZXMgYXMKK2hleCwgbGlrZSBgI2ZmMGFiM2AuCisrCitUaGUgYWNjZXB0ZWQgYXR0cmlidXRlcyBhcmUgYGJvbGRgLCBgZGltYCwgYHVsYCwgYGJsaW5rYCwgYHJldmVyc2VgLAorYGl0YWxpY2AsIGFuZCBgc3RyaWtlYCAoZm9yIGNyb3NzZWQtb3V0IG9yICJzdHJpa2V0aHJvdWdoIiBsZXR0ZXJzKS4KK1RoZSBwb3NpdGlvbiBvZiBhbnkgYXR0cmlidXRlcyB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvbG9ycworKGJlZm9yZSwgYWZ0ZXIsIG9yIGluIGJldHdlZW4pLCBkb2Vzbid0IG1hdHRlci4gU3BlY2lmaWMgYXR0cmlidXRlcyBtYXkKK2JlIHR1cm5lZCBvZmYgYnkgcHJlZml4aW5nIHRoZW0gd2l0aCBgbm9gIG9yIGBuby1gIChlLmcuLCBgbm9yZXZlcnNlYCwKK2Buby11bGAsIGV0YykuCisrCitBbiBlbXB0eSBjb2xvciBzdHJpbmcgcHJvZHVjZXMgbm8gY29sb3IgZWZmZWN0IGF0IGFsbC4gVGhpcyBjYW4gYmUgdXNlZAordG8gYXZvaWQgY29sb3Jpbmcgc3BlY2lmaWMgZWxlbWVudHMgd2l0aG91dCBkaXNhYmxpbmcgY29sb3IgZW50aXJlbHkuCisrCitGb3IgZ2l0J3MgcHJlLWRlZmluZWQgY29sb3Igc2xvdHMsIHRoZSBhdHRyaWJ1dGVzIGFyZSBtZWFudCB0byBiZSByZXNldAorYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGl0ZW0gaW4gdGhlIGNvbG9yZWQgb3V0cHV0LiBTbyBzZXR0aW5nCitgY29sb3IuZGVjb3JhdGUuYnJhbmNoYCB0byBgYmxhY2tgIHdpbGwgcGFpbnQgdGhhdCBicmFuY2ggbmFtZSBpbiBhCitwbGFpbiBgYmxhY2tgLCBldmVuIGlmIHRoZSBwcmV2aW91cyB0aGluZyBvbiB0aGUgc2FtZSBvdXRwdXQgbGluZSAoZS5nLgorb3BlbmluZyBwYXJlbnRoZXNpcyBiZWZvcmUgdGhlIGxpc3Qgb2YgYnJhbmNoIG5hbWVzIGluIGBsb2cgLS1kZWNvcmF0ZWAKK291dHB1dCkgaXMgc2V0IHRvIGJlIHBhaW50ZWQgd2l0aCBgYm9sZGAgb3Igc29tZSBvdGhlciBhdHRyaWJ1dGUuCitIb3dldmVyLCBjdXN0b20gbG9nIGZvcm1hdHMgbWF5IGRvIG1vcmUgY29tcGxpY2F0ZWQgYW5kIGxheWVyZWQKK2NvbG9yaW5nLCBhbmQgdGhlIG5lZ2F0ZWQgZm9ybXMgbWF5IGJlIHVzZWZ1bCB0aGVyZS4KKworcGF0aG5hbWU6OgorCUEgdmFyaWFibGUgdGhhdCB0YWtlcyBhIHBhdGhuYW1lIHZhbHVlIGNhbiBiZSBnaXZlbiBhCisJc3RyaW5nIHRoYXQgYmVnaW5zIHdpdGggImB+L2AiIG9yICJgfnVzZXIvYCIsIGFuZCB0aGUgdXN1YWwKKwl0aWxkZSBleHBhbnNpb24gaGFwcGVucyB0byBzdWNoIGEgc3RyaW5nOiBgfi9gCisJaXMgZXhwYW5kZWQgdG8gdGhlIHZhbHVlIG9mIGAkSE9NRWAsIGFuZCBgfnVzZXIvYCB0byB0aGUKKwlzcGVjaWZpZWQgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorCisKK1ZhcmlhYmxlcworfn5+fn5+fn5+CisKK05vdGUgdGhhdCB0aGlzIGxpc3QgaXMgbm9uLWNvbXByZWhlbnNpdmUgYW5kIG5vdCBuZWNlc3NhcmlseSBjb21wbGV0ZS4KK0ZvciBjb21tYW5kLXNwZWNpZmljIHZhcmlhYmxlcywgeW91IHdpbGwgZmluZCBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24KK2luIHRoZSBhcHByb3ByaWF0ZSBtYW51YWwgcGFnZS4KKworT3RoZXIgZ2l0LXJlbGF0ZWQgdG9vbHMgbWF5IGFuZCBkbyB1c2UgdGhlaXIgb3duIHZhcmlhYmxlcy4gIFdoZW4KK2ludmVudGluZyBuZXcgdmFyaWFibGVzIGZvciB1c2UgaW4geW91ciBvd24gdG9vbCwgbWFrZSBzdXJlIHRoZWlyCituYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCB0aG9zZSB0aGF0IGFyZSB1c2VkIGJ5IEdpdCBpdHNlbGYgYW5kCitvdGhlciBwb3B1bGFyIHRvb2xzLCBhbmQgZGVzY3JpYmUgdGhlbSBpbiB5b3VyIGRvY3VtZW50YXRpb24uCisKK2luY2x1ZGU6OmNvbmZpZy9hZHZpY2UudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2NvcmUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2FkZC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvYWxpYXMudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2FtLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9hcHBseS50eHRbXQorCitpbmNsdWRlOjpjb25maWcvYmxhbWUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2JyYW5jaC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvYnJvd3Nlci50eHRbXQorCitpbmNsdWRlOjpjb25maWcvY2hlY2tvdXQudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2NsZWFuLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9jb2xvci50eHRbXQorCitpbmNsdWRlOjpjb25maWcvY29sdW1uLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9jb21taXQudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2NyZWRlbnRpYWwudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2NvbXBsZXRpb24udHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2RpZmYudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2RpZmZ0b29sLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9mYXN0aW1wb3J0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9mZWF0dXJlLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9mZXRjaC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvZm9ybWF0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9maWx0ZXIudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2ZzY2sudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2djLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9naXRjdnMudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2dpdHdlYi50eHRbXQorCitpbmNsdWRlOjpjb25maWcvZ3JlcC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvZ3BnLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9ndWkudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2d1aXRvb2wudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2hlbHAudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2h0dHAudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2kxOG4udHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2ltYXAudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2luZGV4LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9pbml0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9pbnN0YXdlYi50eHRbXQorCitpbmNsdWRlOjpjb25maWcvaW50ZXJhY3RpdmUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL2xvZy50eHRbXQorCitpbmNsdWRlOjpjb25maWcvbWFpbGluZm8udHh0W10KKworaW5jbHVkZTo6Y29uZmlnL21haWxtYXAudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL21hbi50eHRbXQorCitpbmNsdWRlOjpjb25maWcvbWVyZ2UudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL21lcmdldG9vbC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvbm90ZXMudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3BhY2sudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3BhZ2VyLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9wcmV0dHkudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3Byb3RvY29sLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9wdWxsLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9wdXNoLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9yZWJhc2UudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3JlY2VpdmUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3JlbW90ZS50eHRbXQorCitpbmNsdWRlOjpjb25maWcvcmVtb3Rlcy50eHRbXQorCitpbmNsdWRlOjpjb25maWcvcmVwYWNrLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9yZXJlcmUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3Jlc2V0LnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9zZW5kZW1haWwudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3NlcXVlbmNlci50eHRbXQorCitpbmNsdWRlOjpjb25maWcvc2hvd2JyYW5jaC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvc3BsaXRpbmRleC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvc3NoLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9zdGF0dXMudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3N0YXNoLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy9zdWJtb2R1bGUudHh0W10KKworaW5jbHVkZTo6Y29uZmlnL3RhZy50eHRbXQorCitpbmNsdWRlOjpjb25maWcvdHJhY2UyLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy90cmFuc2Zlci50eHRbXQorCitpbmNsdWRlOjpjb25maWcvdXBsb2FkYXJjaGl2ZS50eHRbXQorCitpbmNsdWRlOjpjb25maWcvdXBsb2FkcGFjay50eHRbXQorCitpbmNsdWRlOjpjb25maWcvdXJsLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy91c2VyLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy92ZXJzaW9uc29ydC50eHRbXQorCitpbmNsdWRlOjpjb25maWcvd2ViLnR4dFtdCisKK2luY2x1ZGU6OmNvbmZpZy93b3JrdHJlZS50eHRbXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYWRkLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FkZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmNzQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FkZC50eHQKQEAgLTAsMCArMSwxMiBAQAorYWRkLmlnbm9yZUVycm9yczo6CithZGQuaWdub3JlLWVycm9ycyAoZGVwcmVjYXRlZCk6OgorCVRlbGxzICdnaXQgYWRkJyB0byBjb250aW51ZSBhZGRpbmcgZmlsZXMgd2hlbiBzb21lIGZpbGVzIGNhbm5vdCBiZQorCWFkZGVkIGR1ZSB0byBpbmRleGluZyBlcnJvcnMuIEVxdWl2YWxlbnQgdG8gdGhlIGAtLWlnbm9yZS1lcnJvcnNgCisJb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LWFkZFsxXS4gIGBhZGQuaWdub3JlLWVycm9yc2AgaXMgZGVwcmVjYXRlZCwKKwlhcyBpdCBkb2VzIG5vdCBmb2xsb3cgdGhlIHVzdWFsIG5hbWluZyBjb252ZW50aW9uIGZvciBjb25maWd1cmF0aW9uCisJdmFyaWFibGVzLgorCithZGQuaW50ZXJhY3RpdmUudXNlQnVpbHRpbjo6CisJW0VYUEVSSU1FTlRBTF0gU2V0IHRvIGB0cnVlYCB0byB1c2UgdGhlIGV4cGVyaW1lbnRhbCBidWlsdC1pbgorCWltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnRlcmFjdGl2ZSB2ZXJzaW9uIG9mIGxpbmtnaXQ6Z2l0LWFkZFsxXQorCWluc3RlYWQgb2YgdGhlIFBlcmwgc2NyaXB0IHZlcnNpb24uIElzIGBmYWxzZWAgYnkgZGVmYXVsdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FkdmljZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZHZpY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZDM3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZHZpY2UudHh0CkBAIC0wLDAgKzEsMTE5IEBACithZHZpY2UuKjo6CisJVGhlc2UgdmFyaWFibGVzIGNvbnRyb2wgdmFyaW91cyBvcHRpb25hbCBoZWxwIG1lc3NhZ2VzIGRlc2lnbmVkIHRvCisJYWlkIG5ldyB1c2Vycy4gQWxsICdhZHZpY2UuKicgdmFyaWFibGVzIGRlZmF1bHQgdG8gJ3RydWUnLCBhbmQgeW91CisJY2FuIHRlbGwgR2l0IHRoYXQgeW91IGRvIG5vdCBuZWVkIGhlbHAgYnkgc2V0dGluZyB0aGVzZSB0byAnZmFsc2UnOgorKworLS0KKwlmZXRjaFNob3dGb3JjZWRVcGRhdGVzOjoKKwkJQWR2aWNlIHNob3duIHdoZW4gbGlua2dpdDpnaXQtZmV0Y2hbMV0gdGFrZXMgYSBsb25nIHRpbWUKKwkJdG8gY2FsY3VsYXRlIGZvcmNlZCB1cGRhdGVzIGFmdGVyIHJlZiB1cGRhdGVzLCBvciB0byB3YXJuCisJCXRoYXQgdGhlIGNoZWNrIGlzIGRpc2FibGVkLgorCXB1c2hVcGRhdGVSZWplY3RlZDo6CisJCVNldCB0aGlzIHZhcmlhYmxlIHRvICdmYWxzZScgaWYgeW91IHdhbnQgdG8gZGlzYWJsZQorCQkncHVzaE5vbkZGQ3VycmVudCcsCisJCSdwdXNoTm9uRkZNYXRjaGluZycsICdwdXNoQWxyZWFkeUV4aXN0cycsCisJCSdwdXNoRmV0Y2hGaXJzdCcsIGFuZCAncHVzaE5lZWRzRm9yY2UnCisJCXNpbXVsdGFuZW91c2x5LgorCXB1c2hOb25GRkN1cnJlbnQ6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIGZhaWxzIGR1ZSB0byBhCisJCW5vbi1mYXN0LWZvcndhcmQgdXBkYXRlIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKwlwdXNoTm9uRkZNYXRjaGluZzo6CisJCUFkdmljZSBzaG93biB3aGVuIHlvdSByYW4gbGlua2dpdDpnaXQtcHVzaFsxXSBhbmQgcHVzaGVkCisJCSdtYXRjaGluZyByZWZzJyBleHBsaWNpdGx5IChpLmUuIHlvdSB1c2VkICc6Jywgb3IKKwkJc3BlY2lmaWVkIGEgcmVmc3BlYyB0aGF0IGlzbid0IHlvdXIgY3VycmVudCBicmFuY2gpIGFuZAorCQlpdCByZXN1bHRlZCBpbiBhIG5vbi1mYXN0LWZvcndhcmQgZXJyb3IuCisJcHVzaEFscmVhZHlFeGlzdHM6OgorCQlTaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gcmVqZWN0cyBhbiB1cGRhdGUgdGhhdAorCQlkb2VzIG5vdCBxdWFsaWZ5IGZvciBmYXN0LWZvcndhcmRpbmcgKGUuZy4sIGEgdGFnLikKKwlwdXNoRmV0Y2hGaXJzdDo6CisJCVNob3duIHdoZW4gbGlua2dpdDpnaXQtcHVzaFsxXSByZWplY3RzIGFuIHVwZGF0ZSB0aGF0CisJCXRyaWVzIHRvIG92ZXJ3cml0ZSBhIHJlbW90ZSByZWYgdGhhdCBwb2ludHMgYXQgYW4KKwkJb2JqZWN0IHdlIGRvIG5vdCBoYXZlLgorCXB1c2hOZWVkc0ZvcmNlOjoKKwkJU2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIHJlamVjdHMgYW4gdXBkYXRlIHRoYXQKKwkJdHJpZXMgdG8gb3ZlcndyaXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhbgorCQlvYmplY3QgdGhhdCBpcyBub3QgYSBjb21taXQtaXNoLCBvciBtYWtlIHRoZSByZW1vdGUKKwkJcmVmIHBvaW50IGF0IGFuIG9iamVjdCB0aGF0IGlzIG5vdCBhIGNvbW1pdC1pc2guCisJcHVzaFVucXVhbGlmaWVkUmVmbmFtZTo6CisJCVNob3duIHdoZW4gbGlua2dpdDpnaXQtcHVzaFsxXSBnaXZlcyB1cCB0cnlpbmcgdG8KKwkJZ3Vlc3MgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVmcyB3aGF0CisJCXJlbW90ZSByZWYgbmFtZXNwYWNlIHRoZSBzb3VyY2UgYmVsb25ncyBpbiwgYnV0IHdoZXJlCisJCXdlIGNhbiBzdGlsbCBzdWdnZXN0IHRoYXQgdGhlIHVzZXIgcHVzaCB0byBlaXRoZXIKKwkJcmVmcy9oZWFkcy8qIG9yIHJlZnMvdGFncy8qIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZQorCQlzb3VyY2Ugb2JqZWN0LgorCXN0YXR1c0FoZWFkQmVoaW5kOjoKKwkJU2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gY29tcHV0ZXMgdGhlIGFoZWFkL2JlaGluZAorCQljb3VudHMgZm9yIGEgbG9jYWwgcmVmIGNvbXBhcmVkIHRvIGl0cyByZW1vdGUgdHJhY2tpbmcgcmVmLAorCQlhbmQgdGhhdCBjYWxjdWxhdGlvbiB0YWtlcyBsb25nZXIgdGhhbiBleHBlY3RlZC4gV2lsbCBub3QKKwkJYXBwZWFyIGlmIGBzdGF0dXMuYWhlYWRCZWhpbmRgIGlzIGZhbHNlIG9yIHRoZSBvcHRpb24KKwkJYC0tbm8tYWhlYWQtYmVoaW5kYCBpcyBnaXZlbi4KKwlzdGF0dXNIaW50czo6CisJCVNob3cgZGlyZWN0aW9ucyBvbiBob3cgdG8gcHJvY2VlZCBmcm9tIHRoZSBjdXJyZW50CisJCXN0YXRlIGluIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdLCBpbgorCQl0aGUgdGVtcGxhdGUgc2hvd24gd2hlbiB3cml0aW5nIGNvbW1pdCBtZXNzYWdlcyBpbgorCQlsaW5rZ2l0OmdpdC1jb21taXRbMV0sIGFuZCBpbiB0aGUgaGVscCBtZXNzYWdlIHNob3duCisJCWJ5IGxpbmtnaXQ6Z2l0LXN3aXRjaFsxXSBvcgorCQlsaW5rZ2l0OmdpdC1jaGVja291dFsxXSB3aGVuIHN3aXRjaGluZyBicmFuY2guCisJc3RhdHVzVW9wdGlvbjo6CisJCUFkdmlzZSB0byBjb25zaWRlciB1c2luZyB0aGUgYC11YCBvcHRpb24gdG8gbGlua2dpdDpnaXQtc3RhdHVzWzFdCisJCXdoZW4gdGhlIGNvbW1hbmQgdGFrZXMgbW9yZSB0aGFuIDIgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkCisJCWZpbGVzLgorCWNvbW1pdEJlZm9yZU1lcmdlOjoKKwkJQWR2aWNlIHNob3duIHdoZW4gbGlua2dpdDpnaXQtbWVyZ2VbMV0gcmVmdXNlcyB0bworCQltZXJnZSB0byBhdm9pZCBvdmVyd3JpdGluZyBsb2NhbCBjaGFuZ2VzLgorCXJlc2V0UXVpZXQ6OgorCQlBZHZpY2UgdG8gY29uc2lkZXIgdXNpbmcgdGhlIGAtLXF1aWV0YCBvcHRpb24gdG8gbGlua2dpdDpnaXQtcmVzZXRbMV0KKwkJd2hlbiB0aGUgY29tbWFuZCB0YWtlcyBtb3JlIHRoYW4gMiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnN0YWdlZAorCQljaGFuZ2VzIGFmdGVyIHJlc2V0LgorCXJlc29sdmVDb25mbGljdDo6CisJCUFkdmljZSBzaG93biBieSB2YXJpb3VzIGNvbW1hbmRzIHdoZW4gY29uZmxpY3RzCisJCXByZXZlbnQgdGhlIG9wZXJhdGlvbiBmcm9tIGJlaW5nIHBlcmZvcm1lZC4KKwlzZXF1ZW5jZXJJblVzZTo6CisJCUFkdmljZSBzaG93biB3aGVuIGEgc2VxdWVuY2VyIGNvbW1hbmQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4KKwlpbXBsaWNpdElkZW50aXR5OjoKKwkJQWR2aWNlIG9uIGhvdyB0byBzZXQgeW91ciBpZGVudGl0eSBjb25maWd1cmF0aW9uIHdoZW4KKwkJeW91ciBpbmZvcm1hdGlvbiBpcyBndWVzc2VkIGZyb20gdGhlIHN5c3RlbSB1c2VybmFtZSBhbmQKKwkJZG9tYWluIG5hbWUuCisJZGV0YWNoZWRIZWFkOjoKKwkJQWR2aWNlIHNob3duIHdoZW4geW91IHVzZWQKKwkJbGlua2dpdDpnaXQtc3dpdGNoWzFdIG9yIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdCisJCXRvIG1vdmUgdG8gdGhlIGRldGFjaCBIRUFEIHN0YXRlLCB0byBpbnN0cnVjdCBob3cgdG8KKwkJY3JlYXRlIGEgbG9jYWwgYnJhbmNoIGFmdGVyIHRoZSBmYWN0LgorCWNoZWNrb3V0QW1iaWd1b3VzUmVtb3RlQnJhbmNoTmFtZTo6CisJCUFkdmljZSBzaG93biB3aGVuIHRoZSBhcmd1bWVudCB0bworCQlsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBhbmQgbGlua2dpdDpnaXQtc3dpdGNoWzFdCisJCWFtYmlndW91c2x5IHJlc29sdmVzIHRvIGEKKwkJcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiBtb3JlIHRoYW4gb25lIHJlbW90ZSBpbgorCQlzaXR1YXRpb25zIHdoZXJlIGFuIHVuYW1iaWd1b3VzIGFyZ3VtZW50IHdvdWxkIGhhdmUKKwkJb3RoZXJ3aXNlIGNhdXNlZCBhIHJlbW90ZS10cmFja2luZyBicmFuY2ggdG8gYmUKKwkJY2hlY2tlZCBvdXQuIFNlZSB0aGUgYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGVgCisJCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIGhvdyB0byBzZXQgYSBnaXZlbiByZW1vdGUKKwkJdG8gdXNlZCBieSBkZWZhdWx0IGluIHNvbWUgc2l0dWF0aW9ucyB3aGVyZSB0aGlzCisJCWFkdmljZSB3b3VsZCBiZSBwcmludGVkLgorCWFtV29ya0Rpcjo6CisJCUFkdmljZSB0aGF0IHNob3dzIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGF0Y2ggZmlsZSB3aGVuCisJCWxpbmtnaXQ6Z2l0LWFtWzFdIGZhaWxzIHRvIGFwcGx5IGl0LgorCXJtSGludHM6OgorCQlJbiBjYXNlIG9mIGZhaWx1cmUgaW4gdGhlIG91dHB1dCBvZiBsaW5rZ2l0OmdpdC1ybVsxXSwKKwkJc2hvdyBkaXJlY3Rpb25zIG9uIGhvdyB0byBwcm9jZWVkIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuCisJYWRkRW1iZWRkZWRSZXBvOjoKKwkJQWR2aWNlIG9uIHdoYXQgdG8gZG8gd2hlbiB5b3UndmUgYWNjaWRlbnRhbGx5IGFkZGVkIG9uZQorCQlnaXQgcmVwbyBpbnNpZGUgb2YgYW5vdGhlci4KKwlpZ25vcmVkSG9vazo6CisJCUFkdmljZSBzaG93biBpZiBhIGhvb2sgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBob29rIGlzIG5vdAorCQlzZXQgYXMgZXhlY3V0YWJsZS4KKwl3YWl0aW5nRm9yRWRpdG9yOjoKKwkJUHJpbnQgYSBtZXNzYWdlIHRvIHRoZSB0ZXJtaW5hbCB3aGVuZXZlciBHaXQgaXMgd2FpdGluZyBmb3IKKwkJZWRpdG9yIGlucHV0IGZyb20gdGhlIHVzZXIuCisJbmVzdGVkVGFnOjoKKwkJQWR2aWNlIHNob3duIGlmIGEgdXNlciBhdHRlbXB0cyB0byByZWN1cnNpdmVseSB0YWcgYSB0YWcgb2JqZWN0LgorCXN1Ym1vZHVsZUFsdGVybmF0ZUVycm9yU3RyYXRlZ3lEaWU6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiBhIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IG9wdGlvbgorCQljb25maWd1cmVkIHRvICJkaWUiIGNhdXNlcyBhIGZhdGFsIGVycm9yLgorCWFkZElnbm9yZWRGaWxlOjoKKwkJQWR2aWNlIHNob3duIGlmIGEgdXNlciBhdHRlbXB0cyB0byBhZGQgYW4gaWdub3JlZCBmaWxlIHRvCisJCXRoZSBpbmRleC4KKwlhZGRFbXB0eVBhdGhzcGVjOjoKKwkJQWR2aWNlIHNob3duIGlmIGEgdXNlciBydW5zIHRoZSBhZGQgY29tbWFuZCB3aXRob3V0IHByb3ZpZGluZworCQl0aGUgcGF0aHNwZWMgcGFyYW1ldGVyLgorLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2FsaWFzLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FsaWFzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWNhNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWxpYXMudHh0CkBAIC0wLDAgKzEsMjggQEAKK2FsaWFzLio6OgorCUNvbW1hbmQgYWxpYXNlcyBmb3IgdGhlIGxpbmtnaXQ6Z2l0WzFdIGNvbW1hbmQgd3JhcHBlciAtIGUuZy4KKwlhZnRlciBkZWZpbmluZyBgYWxpYXMubGFzdCA9IGNhdC1maWxlIGNvbW1pdCBIRUFEYCwgdGhlIGludm9jYXRpb24KKwlgZ2l0IGxhc3RgIGlzIGVxdWl2YWxlbnQgdG8gYGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRGAuIFRvIGF2b2lkCisJY29uZnVzaW9uIGFuZCB0cm91YmxlcyB3aXRoIHNjcmlwdCB1c2FnZSwgYWxpYXNlcyB0aGF0CisJaGlkZSBleGlzdGluZyBHaXQgY29tbWFuZHMgYXJlIGlnbm9yZWQuIEFyZ3VtZW50cyBhcmUgc3BsaXQgYnkKKwlzcGFjZXMsIHRoZSB1c3VhbCBzaGVsbCBxdW90aW5nIGFuZCBlc2NhcGluZyBpcyBzdXBwb3J0ZWQuCisJQSBxdW90ZSBwYWlyIG9yIGEgYmFja3NsYXNoIGNhbiBiZSB1c2VkIHRvIHF1b3RlIHRoZW0uCisrCitOb3RlIHRoYXQgdGhlIGZpcnN0IHdvcmQgb2YgYW4gYWxpYXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBiZSBhCitjb21tYW5kLiBJdCBjYW4gYmUgYSBjb21tYW5kLWxpbmUgb3B0aW9uIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW50byB0aGUKK2ludm9jYXRpb24gb2YgYGdpdGAuIEluIHBhcnRpY3VsYXIsIHRoaXMgaXMgdXNlZnVsIHdoZW4gdXNlZCB3aXRoIGAtY2AKK3RvIHBhc3MgaW4gb25lLXRpbWUgY29uZmlndXJhdGlvbnMgb3IgYC1wYCB0byBmb3JjZSBwYWdpbmF0aW9uLiBGb3IgZXhhbXBsZSwKK2Bsb3VkLXJlYmFzZSA9IC1jIGNvbW1pdC52ZXJib3NlPXRydWUgcmViYXNlYCBjYW4gYmUgZGVmaW5lZCBzdWNoIHRoYXQKK3J1bm5pbmcgYGdpdCBsb3VkLXJlYmFzZWAgd291bGQgYmUgZXF1aXZhbGVudCB0bworYGdpdCAtYyBjb21taXQudmVyYm9zZT10cnVlIHJlYmFzZWAuIEFsc28sIGBwcyA9IC1wIHN0YXR1c2Agd291bGQgYmUgYQoraGVscGZ1bCBhbGlhcyBzaW5jZSBgZ2l0IHBzYCB3b3VsZCBwYWdpbmF0ZSB0aGUgb3V0cHV0IG9mIGBnaXQgc3RhdHVzYAord2hlcmUgdGhlIG9yaWdpbmFsIGNvbW1hbmQgZG9lcyBub3QuCisrCitJZiB0aGUgYWxpYXMgZXhwYW5zaW9uIGlzIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb24gcG9pbnQsCitpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzaGVsbCBjb21tYW5kLiAgRm9yIGV4YW1wbGUsIGRlZmluaW5nCitgYWxpYXMubmV3ID0gIWdpdGsgLS1hbGwgLS1ub3QgT1JJR19IRUFEYCwgdGhlIGludm9jYXRpb24KK2BnaXQgbmV3YCBpcyBlcXVpdmFsZW50IHRvIHJ1bm5pbmcgdGhlIHNoZWxsIGNvbW1hbmQKK2BnaXRrIC0tYWxsIC0tbm90IE9SSUdfSEVBRGAuICBOb3RlIHRoYXQgc2hlbGwgY29tbWFuZHMgd2lsbCBiZQorZXhlY3V0ZWQgZnJvbSB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiBhIHJlcG9zaXRvcnksIHdoaWNoIG1heQorbm90IG5lY2Vzc2FyaWx5IGJlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KK2BHSVRfUFJFRklYYCBpcyBzZXQgYXMgcmV0dXJuZWQgYnkgcnVubmluZyBgZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4YAorZnJvbSB0aGUgb3JpZ2luYWwgY3VycmVudCBkaXJlY3RvcnkuIFNlZSBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjYWQyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FtLnR4dApAQCAtMCwwICsxLDE0IEBACithbS5rZWVwY3I6OgorCUlmIHRydWUsIGdpdC1hbSB3aWxsIGNhbGwgZ2l0LW1haWxzcGxpdCBmb3IgcGF0Y2hlcyBpbiBtYm94IGZvcm1hdAorCXdpdGggcGFyYW1ldGVyIGAtLWtlZXAtY3JgLiBJbiB0aGlzIGNhc2UgZ2l0LW1haWxzcGxpdCB3aWxsCisJbm90IHJlbW92ZSBgXHJgIGZyb20gbGluZXMgZW5kaW5nIHdpdGggYFxyXG5gLiBDYW4gYmUgb3ZlcnJpZGRlbgorCWJ5IGdpdmluZyBgLS1uby1rZWVwLWNyYCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisJU2VlIGxpbmtnaXQ6Z2l0LWFtWzFdLCBsaW5rZ2l0OmdpdC1tYWlsc3BsaXRbMV0uCisKK2FtLnRocmVlV2F5OjoKKwlCeSBkZWZhdWx0LCBgZ2l0IGFtYCB3aWxsIGZhaWwgaWYgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHkuIFdoZW4KKwlzZXQgdG8gdHJ1ZSwgdGhpcyBzZXR0aW5nIHRlbGxzIGBnaXQgYW1gIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZSBpZgorCXRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icyBpdCBpcyBzdXBwb3NlZCB0byBhcHBseSB0byBhbmQKKwl3ZSBoYXZlIHRob3NlIGJsb2JzIGF2YWlsYWJsZSBsb2NhbGx5IChlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUgYC0tM3dheWAKKwlvcHRpb24gZnJvbSB0aGUgY29tbWFuZCBsaW5lKS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4KKwlTZWUgbGlua2dpdDpnaXQtYW1bMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hcHBseS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hcHBseS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiOGVmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FwcGx5LnR4dApAQCAtMCwwICsxLDExIEBACithcHBseS5pZ25vcmVXaGl0ZXNwYWNlOjoKKwlXaGVuIHNldCB0byAnY2hhbmdlJywgdGVsbHMgJ2dpdCBhcHBseScgdG8gaWdub3JlIGNoYW5nZXMgaW4KKwl3aGl0ZXNwYWNlLCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGAtLWlnbm9yZS1zcGFjZS1jaGFuZ2VgCisJb3B0aW9uLgorCVdoZW4gc2V0IHRvIG9uZSBvZjogbm8sIG5vbmUsIG5ldmVyLCBmYWxzZSB0ZWxscyAnZ2l0IGFwcGx5JyB0bworCXJlc3BlY3QgYWxsIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMuCisJU2VlIGxpbmtnaXQ6Z2l0LWFwcGx5WzFdLgorCithcHBseS53aGl0ZXNwYWNlOjoKKwlUZWxscyAnZ2l0IGFwcGx5JyBob3cgdG8gaGFuZGxlIHdoaXRlc3BhY2VzLCBpbiB0aGUgc2FtZSB3YXkKKwlhcyB0aGUgYC0td2hpdGVzcGFjZWAgb3B0aW9uLiBTZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ibGFtZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ibGFtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2OGU4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2JsYW1lLnR4dApAQCAtMCwwICsxLDM3IEBACitibGFtZS5ibGFua0JvdW5kYXJ5OjoKKwlTaG93IGJsYW5rIGNvbW1pdCBvYmplY3QgbmFtZSBmb3IgYm91bmRhcnkgY29tbWl0cyBpbgorCWxpbmtnaXQ6Z2l0LWJsYW1lWzFdLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byBmYWxzZS4KKworYmxhbWUuY29sb3Jpbmc6OgorCVRoaXMgZGV0ZXJtaW5lcyB0aGUgY29sb3Jpbmcgc2NoZW1lIHRvIGJlIGFwcGxpZWQgdG8gYmxhbWUKKwlvdXRwdXQuIEl0IGNhbiBiZSAncmVwZWF0ZWRMaW5lcycsICdoaWdobGlnaHRSZWNlbnQnLAorCW9yICdub25lJyB3aGljaCBpcyB0aGUgZGVmYXVsdC4KKworYmxhbWUuZGF0ZTo6CisJU3BlY2lmaWVzIHRoZSBmb3JtYXQgdXNlZCB0byBvdXRwdXQgZGF0ZXMgaW4gbGlua2dpdDpnaXQtYmxhbWVbMV0uCisJSWYgdW5zZXQgdGhlIGlzbyBmb3JtYXQgaXMgdXNlZC4gRm9yIHN1cHBvcnRlZCB2YWx1ZXMsCisJc2VlIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSBgLS1kYXRlYCBvcHRpb24gYXQgbGlua2dpdDpnaXQtbG9nWzFdLgorCitibGFtZS5zaG93RW1haWw6OgorCVNob3cgdGhlIGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIGF1dGhvciBuYW1lIGluIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdLgorCVRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIGZhbHNlLgorCitibGFtZS5zaG93Um9vdDo6CisJRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIGluIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdLgorCVRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIGZhbHNlLgorCitibGFtZS5pZ25vcmVSZXZzRmlsZTo6CisJSWdub3JlIHJldmlzaW9ucyBsaXN0ZWQgaW4gdGhlIGZpbGUsIG9uZSB1bmFiYnJldmlhdGVkIG9iamVjdCBuYW1lIHBlcgorCWxpbmUsIGluIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdLiAgV2hpdGVzcGFjZSBhbmQgY29tbWVudHMgYmVnaW5uaW5nIHdpdGgKKwlgI2AgYXJlIGlnbm9yZWQuICBUaGlzIG9wdGlvbiBtYXkgYmUgcmVwZWF0ZWQgbXVsdGlwbGUgdGltZXMuICBFbXB0eQorCWZpbGUgbmFtZXMgd2lsbCByZXNldCB0aGUgbGlzdCBvZiBpZ25vcmVkIHJldmlzaW9ucy4gIFRoaXMgb3B0aW9uIHdpbGwKKwliZSBoYW5kbGVkIGJlZm9yZSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiBgLS1pZ25vcmUtcmV2cy1maWxlYC4KKworYmxhbWUubWFya1VuYmxhbWFibGVzOjoKKwlNYXJrIGxpbmVzIHRoYXQgd2VyZSBjaGFuZ2VkIGJ5IGFuIGlnbm9yZWQgcmV2aXNpb24gdGhhdCB3ZSBjb3VsZCBub3QKKwlhdHRyaWJ1dGUgdG8gYW5vdGhlciBjb21taXQgd2l0aCBhICcqJyBpbiB0aGUgb3V0cHV0IG9mCisJbGlua2dpdDpnaXQtYmxhbWVbMV0uCisKK2JsYW1lLm1hcmtJZ25vcmVkTGluZXM6OgorCU1hcmsgbGluZXMgdGhhdCB3ZXJlIGNoYW5nZWQgYnkgYW4gaWdub3JlZCByZXZpc2lvbiB0aGF0IHdlIGF0dHJpYnV0ZWQgdG8KKwlhbm90aGVyIGNvbW1pdCB3aXRoIGEgJz8nIGluIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtYmxhbWVbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYnJhbmNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzVmMzI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYnJhbmNoLnR4dApAQCAtMCwwICsxLDEwMyBAQAorYnJhbmNoLmF1dG9TZXR1cE1lcmdlOjoKKwlUZWxscyAnZ2l0IGJyYW5jaCcsICdnaXQgc3dpdGNoJyBhbmQgJ2dpdCBjaGVja291dCcgdG8gc2V0IHVwIG5ldyBicmFuY2hlcworCXNvIHRoYXQgbGlua2dpdDpnaXQtcHVsbFsxXSB3aWxsIGFwcHJvcHJpYXRlbHkgbWVyZ2UgZnJvbSB0aGUKKwlzdGFydGluZyBwb2ludCBicmFuY2guIE5vdGUgdGhhdCBldmVuIGlmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsCisJdGhpcyBiZWhhdmlvciBjYW4gYmUgY2hvc2VuIHBlci1icmFuY2ggdXNpbmcgdGhlIGAtLXRyYWNrYAorCWFuZCBgLS1uby10cmFja2Agb3B0aW9ucy4gVGhlIHZhbGlkIHNldHRpbmdzIGFyZTogYGZhbHNlYCAtLSBubworCWF1dG9tYXRpYyBzZXR1cCBpcyBkb25lOyBgdHJ1ZWAgLS0gYXV0b21hdGljIHNldHVwIGlzIGRvbmUgd2hlbiB0aGUKKwlzdGFydGluZyBwb2ludCBpcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2g7IGBhbHdheXNgIC0tCisJYXV0b21hdGljIHNldHVwIGlzIGRvbmUgd2hlbiB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgZWl0aGVyIGEKKwlsb2NhbCBicmFuY2ggb3IgcmVtb3RlLXRyYWNraW5nCisJYnJhbmNoLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byB0cnVlLgorCiticmFuY2guYXV0b1NldHVwUmViYXNlOjoKKwlXaGVuIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIHdpdGggJ2dpdCBicmFuY2gnLCAnZ2l0IHN3aXRjaCcgb3IgJ2dpdCBjaGVja291dCcKKwl0aGF0IHRyYWNrcyBhbm90aGVyIGJyYW5jaCwgdGhpcyB2YXJpYWJsZSB0ZWxscyBHaXQgdG8gc2V0CisJdXAgcHVsbCB0byByZWJhc2UgaW5zdGVhZCBvZiBtZXJnZSAoc2VlICJicmFuY2guPG5hbWU+LnJlYmFzZSIpLgorCVdoZW4gYG5ldmVyYCwgcmViYXNlIGlzIG5ldmVyIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRydWUuCisJV2hlbiBgbG9jYWxgLCByZWJhc2UgaXMgc2V0IHRvIHRydWUgZm9yIHRyYWNrZWQgYnJhbmNoZXMgb2YKKwlvdGhlciBsb2NhbCBicmFuY2hlcy4KKwlXaGVuIGByZW1vdGVgLCByZWJhc2UgaXMgc2V0IHRvIHRydWUgZm9yIHRyYWNrZWQgYnJhbmNoZXMgb2YKKwlyZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisJV2hlbiBgYWx3YXlzYCwgcmViYXNlIHdpbGwgYmUgc2V0IHRvIHRydWUgZm9yIGFsbCB0cmFja2luZworCWJyYW5jaGVzLgorCVNlZSAiYnJhbmNoLmF1dG9TZXR1cE1lcmdlIiBmb3IgZGV0YWlscyBvbiBob3cgdG8gc2V0IHVwIGEKKwlicmFuY2ggdG8gdHJhY2sgYW5vdGhlciBicmFuY2guCisJVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gbmV2ZXIuCisKK2JyYW5jaC5zb3J0OjoKKwlUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBzb3J0IG9yZGVyaW5nIG9mIGJyYW5jaGVzIHdoZW4gZGlzcGxheWVkIGJ5CisJbGlua2dpdDpnaXQtYnJhbmNoWzFdLiBXaXRob3V0IHRoZSAiLS1zb3J0PTx2YWx1ZT4iIG9wdGlvbiBwcm92aWRlZCwgdGhlCisJdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQuCisJU2VlIGxpbmtnaXQ6Z2l0LWZvci1lYWNoLXJlZlsxXSBmaWVsZCBuYW1lcyBmb3IgdmFsaWQgdmFsdWVzLgorCiticmFuY2guPG5hbWU+LnJlbW90ZTo6CisJV2hlbiBvbiBicmFuY2ggPG5hbWU+LCBpdCB0ZWxscyAnZ2l0IGZldGNoJyBhbmQgJ2dpdCBwdXNoJworCXdoaWNoIHJlbW90ZSB0byBmZXRjaCBmcm9tL3B1c2ggdG8uICBUaGUgcmVtb3RlIHRvIHB1c2ggdG8KKwltYXkgYmUgb3ZlcnJpZGRlbiB3aXRoIGByZW1vdGUucHVzaERlZmF1bHRgIChmb3IgYWxsIGJyYW5jaGVzKS4KKwlUaGUgcmVtb3RlIHRvIHB1c2ggdG8sIGZvciB0aGUgY3VycmVudCBicmFuY2gsIG1heSBiZSBmdXJ0aGVyCisJb3ZlcnJpZGRlbiBieSBgYnJhbmNoLjxuYW1lPi5wdXNoUmVtb3RlYC4gIElmIG5vIHJlbW90ZSBpcworCWNvbmZpZ3VyZWQsIG9yIGlmIHlvdSBhcmUgbm90IG9uIGFueSBicmFuY2gsIGl0IGRlZmF1bHRzIHRvCisJYG9yaWdpbmAgZm9yIGZldGNoaW5nIGFuZCBgcmVtb3RlLnB1c2hEZWZhdWx0YCBmb3IgcHVzaGluZy4KKwlBZGRpdGlvbmFsbHksIGAuYCAoYSBwZXJpb2QpIGlzIHRoZSBjdXJyZW50IGxvY2FsIHJlcG9zaXRvcnkKKwkoYSBkb3QtcmVwb3NpdG9yeSksIHNlZSBgYnJhbmNoLjxuYW1lPi5tZXJnZWAncyBmaW5hbCBub3RlIGJlbG93LgorCiticmFuY2guPG5hbWU+LnB1c2hSZW1vdGU6OgorCVdoZW4gb24gYnJhbmNoIDxuYW1lPiwgaXQgb3ZlcnJpZGVzIGBicmFuY2guPG5hbWU+LnJlbW90ZWAgZm9yCisJcHVzaGluZy4gIEl0IGFsc28gb3ZlcnJpZGVzIGByZW1vdGUucHVzaERlZmF1bHRgIGZvciBwdXNoaW5nCisJZnJvbSBicmFuY2ggPG5hbWU+LiAgV2hlbiB5b3UgcHVsbCBmcm9tIG9uZSBwbGFjZSAoZS5nLiB5b3VyCisJdXBzdHJlYW0pIGFuZCBwdXNoIHRvIGFub3RoZXIgcGxhY2UgKGUuZy4geW91ciBvd24gcHVibGlzaGluZworCXJlcG9zaXRvcnkpLCB5b3Ugd291bGQgd2FudCB0byBzZXQgYHJlbW90ZS5wdXNoRGVmYXVsdGAgdG8KKwlzcGVjaWZ5IHRoZSByZW1vdGUgdG8gcHVzaCB0byBmb3IgYWxsIGJyYW5jaGVzLCBhbmQgdXNlIHRoaXMKKwlvcHRpb24gdG8gb3ZlcnJpZGUgaXQgZm9yIGEgc3BlY2lmaWMgYnJhbmNoLgorCiticmFuY2guPG5hbWU+Lm1lcmdlOjoKKwlEZWZpbmVzLCB0b2dldGhlciB3aXRoIGJyYW5jaC48bmFtZT4ucmVtb3RlLCB0aGUgdXBzdHJlYW0gYnJhbmNoCisJZm9yIHRoZSBnaXZlbiBicmFuY2guIEl0IHRlbGxzICdnaXQgZmV0Y2gnLydnaXQgcHVsbCcvJ2dpdCByZWJhc2UnIHdoaWNoCisJYnJhbmNoIHRvIG1lcmdlIGFuZCBjYW4gYWxzbyBhZmZlY3QgJ2dpdCBwdXNoJyAoc2VlIHB1c2guZGVmYXVsdCkuCisJV2hlbiBpbiBicmFuY2ggPG5hbWU+LCBpdCB0ZWxscyAnZ2l0IGZldGNoJyB0aGUgZGVmYXVsdAorCXJlZnNwZWMgdG8gYmUgbWFya2VkIGZvciBtZXJnaW5nIGluIEZFVENIX0hFQUQuIFRoZSB2YWx1ZSBpcworCWhhbmRsZWQgbGlrZSB0aGUgcmVtb3RlIHBhcnQgb2YgYSByZWZzcGVjLCBhbmQgbXVzdCBtYXRjaCBhCisJcmVmIHdoaWNoIGlzIGZldGNoZWQgZnJvbSB0aGUgcmVtb3RlIGdpdmVuIGJ5CisJImJyYW5jaC48bmFtZT4ucmVtb3RlIi4KKwlUaGUgbWVyZ2UgaW5mb3JtYXRpb24gaXMgdXNlZCBieSAnZ2l0IHB1bGwnICh3aGljaCBhdCBmaXJzdCBjYWxscworCSdnaXQgZmV0Y2gnKSB0byBsb29rdXAgdGhlIGRlZmF1bHQgYnJhbmNoIGZvciBtZXJnaW5nLiBXaXRob3V0CisJdGhpcyBvcHRpb24sICdnaXQgcHVsbCcgZGVmYXVsdHMgdG8gbWVyZ2UgdGhlIGZpcnN0IHJlZnNwZWMgZmV0Y2hlZC4KKwlTcGVjaWZ5IG11bHRpcGxlIHZhbHVlcyB0byBnZXQgYW4gb2N0b3B1cyBtZXJnZS4KKwlJZiB5b3Ugd2lzaCB0byBzZXR1cCAnZ2l0IHB1bGwnIHNvIHRoYXQgaXQgbWVyZ2VzIGludG8gPG5hbWU+IGZyb20KKwlhbm90aGVyIGJyYW5jaCBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeSwgeW91IGNhbiBwb2ludAorCWJyYW5jaC48bmFtZT4ubWVyZ2UgdG8gdGhlIGRlc2lyZWQgYnJhbmNoLCBhbmQgdXNlIHRoZSByZWxhdGl2ZSBwYXRoCisJc2V0dGluZyBgLmAgKGEgcGVyaW9kKSBmb3IgYnJhbmNoLjxuYW1lPi5yZW1vdGUuCisKK2JyYW5jaC48bmFtZT4ubWVyZ2VPcHRpb25zOjoKKwlTZXRzIGRlZmF1bHQgb3B0aW9ucyBmb3IgbWVyZ2luZyBpbnRvIGJyYW5jaCA8bmFtZT4uIFRoZSBzeW50YXggYW5kCisJc3VwcG9ydGVkIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIG9mIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdLCBidXQKKwlvcHRpb24gdmFsdWVzIGNvbnRhaW5pbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBjdXJyZW50bHkgbm90CisJc3VwcG9ydGVkLgorCiticmFuY2guPG5hbWU+LnJlYmFzZTo6CisJV2hlbiB0cnVlLCByZWJhc2UgdGhlIGJyYW5jaCA8bmFtZT4gb24gdG9wIG9mIHRoZSBmZXRjaGVkIGJyYW5jaCwKKwlpbnN0ZWFkIG9mIG1lcmdpbmcgdGhlIGRlZmF1bHQgYnJhbmNoIGZyb20gdGhlIGRlZmF1bHQgcmVtb3RlIHdoZW4KKwkiZ2l0IHB1bGwiIGlzIHJ1bi4gU2VlICJwdWxsLnJlYmFzZSIgZm9yIGRvaW5nIHRoaXMgaW4gYSBub24KKwlicmFuY2gtc3BlY2lmaWMgbWFubmVyLgorKworV2hlbiBgbWVyZ2VzYCAob3IganVzdCAnbScpLCBwYXNzIHRoZSBgLS1yZWJhc2UtbWVyZ2VzYCBvcHRpb24gdG8gJ2dpdCByZWJhc2UnCitzbyB0aGF0IHRoZSBsb2NhbCBtZXJnZSBjb21taXRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgcmViYXNlIChzZWUKK2xpbmtnaXQ6Z2l0LXJlYmFzZVsxXSBmb3IgZGV0YWlscykuCisrCitXaGVuIGBwcmVzZXJ2ZWAgKG9yIGp1c3QgJ3AnLCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBtZXJnZXNgKSwgYWxzbyBwYXNzCitgLS1wcmVzZXJ2ZS1tZXJnZXNgIGFsb25nIHRvICdnaXQgcmViYXNlJyBzbyB0aGF0IGxvY2FsbHkgY29tbWl0dGVkIG1lcmdlCitjb21taXRzIHdpbGwgbm90IGJlIGZsYXR0ZW5lZCBieSBydW5uaW5nICdnaXQgcHVsbCcuCisrCitXaGVuIHRoZSB2YWx1ZSBpcyBgaW50ZXJhY3RpdmVgIChvciBqdXN0ICdpJyksIHRoZSByZWJhc2UgaXMgcnVuIGluIGludGVyYWN0aXZlCittb2RlLgorKworKk5PVEUqOiB0aGlzIGlzIGEgcG9zc2libHkgZGFuZ2Vyb3VzIG9wZXJhdGlvbjsgZG8gKm5vdCogdXNlCitpdCB1bmxlc3MgeW91IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyAoc2VlIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXQorZm9yIGRldGFpbHMpLgorCiticmFuY2guPG5hbWU+LmRlc2NyaXB0aW9uOjoKKwlCcmFuY2ggZGVzY3JpcHRpb24sIGNhbiBiZSBlZGl0ZWQgd2l0aAorCWBnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbmAuIEJyYW5jaCBkZXNjcmlwdGlvbiBpcworCWF1dG9tYXRpY2FsbHkgYWRkZWQgaW4gdGhlIGZvcm1hdC1wYXRjaCBjb3ZlciBsZXR0ZXIgb3IKKwlyZXF1ZXN0LXB1bGwgc3VtbWFyeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2Jyb3dzZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYnJvd3Nlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1ZGYyMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2Jyb3dzZXIudHh0CkBAIC0wLDAgKzEsOSBAQAorYnJvd3Nlci48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIGJyb3dzZXIuIFRoZQorCXNwZWNpZmllZCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBzaGVsbCB3aXRoIHRoZSBVUkxzIHBhc3NlZAorCWFzIGFyZ3VtZW50cy4gKFNlZSBsaW5rZ2l0OmdpdC13ZWJ7bGl0ZGR9YnJvd3NlWzFdLikKKworYnJvd3Nlci48dG9vbD4ucGF0aDo6CisJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sIHRoYXQgbWF5IGJlIHVzZWQgdG8KKwlicm93c2UgSFRNTCBoZWxwIChzZWUgYC13YCBvcHRpb24gaW4gbGlua2dpdDpnaXQtaGVscFsxXSkgb3IgYQorCXdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIgKHNlZSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jaGVja291dC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jaGVja291dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2NDY4MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NoZWNrb3V0LnR4dApAQCAtMCwwICsxLDE4IEBACitjaGVja291dC5kZWZhdWx0UmVtb3RlOjoKKwlXaGVuIHlvdSBydW4gJ2dpdCBjaGVja291dCA8c29tZXRoaW5nPicKKwlvciAnZ2l0IHN3aXRjaCA8c29tZXRoaW5nPicgYW5kIG9ubHkgaGF2ZSBvbmUKKwlyZW1vdGUsIGl0IG1heSBpbXBsaWNpdGx5IGZhbGwgYmFjayBvbiBjaGVja2luZyBvdXQgYW5kCisJdHJhY2tpbmcgZS5nLiAnb3JpZ2luLzxzb21ldGhpbmc+Jy4gVGhpcyBzdG9wcyB3b3JraW5nIGFzIHNvb24KKwlhcyB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIHJlbW90ZSB3aXRoIGEgJzxzb21ldGhpbmc+JworCXJlZmVyZW5jZS4gVGhpcyBzZXR0aW5nIGFsbG93cyBmb3Igc2V0dGluZyB0aGUgbmFtZSBvZiBhCisJcHJlZmVycmVkIHJlbW90ZSB0aGF0IHNob3VsZCBhbHdheXMgd2luIHdoZW4gaXQgY29tZXMgdG8KKwlkaXNhbWJpZ3VhdGlvbi4gVGhlIHR5cGljYWwgdXNlLWNhc2UgaXMgdG8gc2V0IHRoaXMgdG8KKwlgb3JpZ2luYC4KKysKK0N1cnJlbnRseSB0aGlzIGlzIHVzZWQgYnkgbGlua2dpdDpnaXQtc3dpdGNoWzFdIGFuZAorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gd2hlbiAnZ2l0IGNoZWNrb3V0IDxzb21ldGhpbmc+Jworb3IgJ2dpdCBzd2l0Y2ggPHNvbWV0aGluZz4nCit3aWxsIGNoZWNrb3V0IHRoZSAnPHNvbWV0aGluZz4nIGJyYW5jaCBvbiBhbm90aGVyIHJlbW90ZSwKK2FuZCBieSBsaW5rZ2l0OmdpdC13b3JrdHJlZVsxXSB3aGVuICdnaXQgd29ya3RyZWUgYWRkJyByZWZlcnMgdG8gYQorcmVtb3RlIGJyYW5jaC4gVGhpcyBzZXR0aW5nIG1pZ2h0IGJlIHVzZWQgZm9yIG90aGVyIGNoZWNrb3V0LWxpa2UKK2NvbW1hbmRzIG9yIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZ1dHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NsZWFuLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NsZWFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODA3YzkyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY2xlYW4udHh0CkBAIC0wLDAgKzEsMyBAQAorY2xlYW4ucmVxdWlyZUZvcmNlOjoKKwlBIGJvb2xlYW4gdG8gbWFrZSBnaXQtY2xlYW4gZG8gbm90aGluZyB1bmxlc3MgZ2l2ZW4gLWYsCisJLWkgb3IgLW4uICAgRGVmYXVsdHMgdG8gdHJ1ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbG9yLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbG9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWRhYWNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY29sb3IudHh0CkBAIC0wLDAgKzEsMjAxIEBACitjb2xvci5hZHZpY2U6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiBoaW50cyAoZS5nLiB3aGVuIGEgcHVzaAorCWZhaWxlZCwgc2VlIGBhZHZpY2UuKmAgZm9yIGEgbGlzdCkuICBNYXkgYmUgc2V0IHRvIGBhbHdheXNgLAorCWBmYWxzZWAgKG9yIGBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKSwgaW4gd2hpY2ggY2FzZSBjb2xvcnMKKwlhcmUgdXNlZCBvbmx5IHdoZW4gdGhlIGVycm9yIG91dHB1dCBnb2VzIHRvIGEgdGVybWluYWwuIElmCisJdW5zZXQsIHRoZW4gdGhlIHZhbHVlIG9mIGBjb2xvci51aWAgaXMgdXNlZCAoYGF1dG9gIGJ5IGRlZmF1bHQpLgorCitjb2xvci5hZHZpY2UuaGludDo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIGhpbnRzLgorCitjb2xvci5ibGFtZS5oaWdobGlnaHRSZWNlbnQ6OgorCVRoaXMgY2FuIGJlIHVzZWQgdG8gY29sb3IgdGhlIG1ldGFkYXRhIG9mIGEgYmxhbWUgbGluZSBkZXBlbmRpbmcKKwlvbiBhZ2Ugb2YgdGhlIGxpbmUuCisrCitUaGlzIHNldHRpbmcgc2hvdWxkIGJlIHNldCB0byBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNvbG9yIGFuZCBkYXRlIHNldHRpbmdzLAorc3RhcnRpbmcgYW5kIGVuZGluZyB3aXRoIGEgY29sb3IsIHRoZSBkYXRlcyBzaG91bGQgYmUgc2V0IGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KK1RoZSBtZXRhZGF0YSB3aWxsIGJlIGNvbG9yZWQgZ2l2ZW4gdGhlIGNvbG9ycyBpZiB0aGUgbGluZSB3YXMgaW50cm9kdWNlZAorYmVmb3JlIHRoZSBnaXZlbiB0aW1lc3RhbXAsIG92ZXJ3cml0aW5nIG9sZGVyIHRpbWVzdGFtcGVkIGNvbG9ycy4KKysKK0luc3RlYWQgb2YgYW4gYWJzb2x1dGUgdGltZXN0YW1wIHJlbGF0aXZlIHRpbWVzdGFtcHMgd29yayBhcyB3ZWxsLCBlLmcuCisyLndlZWtzLmFnbyBpcyB2YWxpZCB0byBhZGRyZXNzIGFueXRoaW5nIG9sZGVyIHRoYW4gMiB3ZWVrcy4KKysKK0l0IGRlZmF1bHRzIHRvICdibHVlLDEyIG1vbnRoIGFnbyx3aGl0ZSwxIG1vbnRoIGFnbyxyZWQnLCB3aGljaCBjb2xvcnMKK2V2ZXJ5dGhpbmcgb2xkZXIgdGhhbiBvbmUgeWVhciBibHVlLCByZWNlbnQgY2hhbmdlcyBiZXR3ZWVuIG9uZSBtb250aCBhbmQKK29uZSB5ZWFyIG9sZCBhcmUga2VwdCB3aGl0ZSwgYW5kIGxpbmVzIGludHJvZHVjZWQgd2l0aGluIHRoZSBsYXN0IG1vbnRoIGFyZQorY29sb3JlZCByZWQuCisKK2NvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXM6OgorCVVzZSB0aGUgY3VzdG9taXplZCBjb2xvciBmb3IgdGhlIHBhcnQgb2YgZ2l0LWJsYW1lIG91dHB1dCB0aGF0CisJaXMgcmVwZWF0ZWQgbWV0YSBpbmZvcm1hdGlvbiBwZXIgbGluZSAoc3VjaCBhcyBjb21taXQgaWQsCisJYXV0aG9yIG5hbWUsIGRhdGUgYW5kIHRpbWV6b25lKS4gRGVmYXVsdHMgdG8gY3lhbi4KKworY29sb3IuYnJhbmNoOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3IgaW4gdGhlIG91dHB1dCBvZgorCWxpbmtnaXQ6Z2l0LWJyYW5jaFsxXS4gTWF5IGJlIHNldCB0byBgYWx3YXlzYCwKKwlgZmFsc2VgIChvciBgbmV2ZXJgKSBvciBgYXV0b2AgKG9yIGB0cnVlYCksIGluIHdoaWNoIGNhc2UgY29sb3JzIGFyZSB1c2VkCisJb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgdG8gYSB0ZXJtaW5hbC4gSWYgdW5zZXQsIHRoZW4gdGhlCisJdmFsdWUgb2YgYGNvbG9yLnVpYCBpcyB1c2VkIChgYXV0b2AgYnkgZGVmYXVsdCkuCisKK2NvbG9yLmJyYW5jaC48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBicmFuY2ggY29sb3JhdGlvbi4gYDxzbG90PmAgaXMgb25lIG9mCisJYGN1cnJlbnRgICh0aGUgY3VycmVudCBicmFuY2gpLCBgbG9jYWxgIChhIGxvY2FsIGJyYW5jaCksCisJYHJlbW90ZWAgKGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBpbiByZWZzL3JlbW90ZXMvKSwKKwlgdXBzdHJlYW1gICh1cHN0cmVhbSB0cmFja2luZyBicmFuY2gpLCBgcGxhaW5gIChvdGhlcgorCXJlZnMpLgorCitjb2xvci5kaWZmOjoKKwlXaGV0aGVyIHRvIHVzZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8gYWRkIGNvbG9yIHRvIHBhdGNoZXMuCisJSWYgdGhpcyBpcyBzZXQgdG8gYGFsd2F5c2AsIGxpbmtnaXQ6Z2l0LWRpZmZbMV0sCisJbGlua2dpdDpnaXQtbG9nWzFdLCBhbmQgbGlua2dpdDpnaXQtc2hvd1sxXSB3aWxsIHVzZSBjb2xvcgorCWZvciBhbGwgcGF0Y2hlcy4gIElmIGl0IGlzIHNldCB0byBgdHJ1ZWAgb3IgYGF1dG9gLCB0aG9zZQorCWNvbW1hbmRzIHdpbGwgb25seSB1c2UgY29sb3Igd2hlbiBvdXRwdXQgaXMgdG8gdGhlIHRlcm1pbmFsLgorCUlmIHVuc2V0LCB0aGVuIHRoZSB2YWx1ZSBvZiBgY29sb3IudWlgIGlzIHVzZWQgKGBhdXRvYCBieQorCWRlZmF1bHQpLgorKworVGhpcyBkb2VzIG5vdCBhZmZlY3QgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIG9yIHRoZQorJ2dpdC1kaWZmLXthc3Rlcmlza30nIHBsdW1iaW5nIGNvbW1hbmRzLiAgQ2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlCitjb21tYW5kIGxpbmUgd2l0aCB0aGUgYC0tY29sb3JbPTx3aGVuPl1gIG9wdGlvbi4KKworY29sb3IuZGlmZi48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBkaWZmIGNvbG9yaXphdGlvbi4gIGA8c2xvdD5gIHNwZWNpZmllcworCXdoaWNoIHBhcnQgb2YgdGhlIHBhdGNoIHRvIHVzZSB0aGUgc3BlY2lmaWVkIGNvbG9yLCBhbmQgaXMgb25lCisJb2YgYGNvbnRleHRgIChjb250ZXh0IHRleHQgLSBgcGxhaW5gIGlzIGEgaGlzdG9yaWNhbCBzeW5vbnltKSwKKwlgbWV0YWAgKG1ldGFpbmZvcm1hdGlvbiksIGBmcmFnYAorCShodW5rIGhlYWRlciksICdmdW5jJyAoZnVuY3Rpb24gaW4gaHVuayBoZWFkZXIpLCBgb2xkYCAocmVtb3ZlZCBsaW5lcyksCisJYG5ld2AgKGFkZGVkIGxpbmVzKSwgYGNvbW1pdGAgKGNvbW1pdCBoZWFkZXJzKSwgYHdoaXRlc3BhY2VgCisJKGhpZ2hsaWdodGluZyB3aGl0ZXNwYWNlIGVycm9ycyksIGBvbGRNb3ZlZGAgKGRlbGV0ZWQgbGluZXMpLAorCWBuZXdNb3ZlZGAgKGFkZGVkIGxpbmVzKSwgYG9sZE1vdmVkRGltbWVkYCwgYG9sZE1vdmVkQWx0ZXJuYXRpdmVgLAorCWBvbGRNb3ZlZEFsdGVybmF0aXZlRGltbWVkYCwgYG5ld01vdmVkRGltbWVkYCwgYG5ld01vdmVkQWx0ZXJuYXRpdmVgCisJYG5ld01vdmVkQWx0ZXJuYXRpdmVEaW1tZWRgIChTZWUgdGhlICc8bW9kZT4nCisJc2V0dGluZyBvZiAnLS1jb2xvci1tb3ZlZCcgaW4gbGlua2dpdDpnaXQtZGlmZlsxXSBmb3IgZGV0YWlscyksCisJYGNvbnRleHREaW1tZWRgLCBgb2xkRGltbWVkYCwgYG5ld0RpbW1lZGAsIGBjb250ZXh0Qm9sZGAsCisJYG9sZEJvbGRgLCBhbmQgYG5ld0JvbGRgIChzZWUgbGlua2dpdDpnaXQtcmFuZ2UtZGlmZlsxXSBmb3IgZGV0YWlscykuCisKK2NvbG9yLmRlY29yYXRlLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yICdnaXQgbG9nIC0tZGVjb3JhdGUnIG91dHB1dC4gIGA8c2xvdD5gIGlzIG9uZQorCW9mIGBicmFuY2hgLCBgcmVtb3RlQnJhbmNoYCwgYHRhZ2AsIGBzdGFzaGAgb3IgYEhFQURgIGZvciBsb2NhbAorCWJyYW5jaGVzLCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsIHRhZ3MsIHN0YXNoIGFuZCBIRUFELCByZXNwZWN0aXZlbHkKKwlhbmQgYGdyYWZ0ZWRgIGZvciBncmFmdGVkIGNvbW1pdHMuCisKK2NvbG9yLmdyZXA6OgorCVdoZW4gc2V0IHRvIGBhbHdheXNgLCBhbHdheXMgaGlnaGxpZ2h0IG1hdGNoZXMuICBXaGVuIGBmYWxzZWAgKG9yCisJYG5ldmVyYCksIG5ldmVyLiAgV2hlbiBzZXQgdG8gYHRydWVgIG9yIGBhdXRvYCwgdXNlIGNvbG9yIG9ubHkKKwl3aGVuIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiB0byB0aGUgdGVybWluYWwuICBJZiB1bnNldCwgdGhlbiB0aGUKKwl2YWx1ZSBvZiBgY29sb3IudWlgIGlzIHVzZWQgKGBhdXRvYCBieSBkZWZhdWx0KS4KKworY29sb3IuZ3JlcC48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBncmVwIGNvbG9yaXphdGlvbi4gIGA8c2xvdD5gIHNwZWNpZmllcyB3aGljaAorCXBhcnQgb2YgdGhlIGxpbmUgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY29sb3IsIGFuZCBpcyBvbmUgb2YKKysKKy0tCitgY29udGV4dGA7OworCW5vbi1tYXRjaGluZyB0ZXh0IGluIGNvbnRleHQgbGluZXMgKHdoZW4gdXNpbmcgYC1BYCwgYC1CYCwgb3IgYC1DYCkKK2BmaWxlbmFtZWA7OworCWZpbGVuYW1lIHByZWZpeCAod2hlbiBub3QgdXNpbmcgYC1oYCkKK2BmdW5jdGlvbmA7OworCWZ1bmN0aW9uIG5hbWUgbGluZXMgKHdoZW4gdXNpbmcgYC1wYCkKK2BsaW5lTnVtYmVyYDs7CisJbGluZSBudW1iZXIgcHJlZml4ICh3aGVuIHVzaW5nIGAtbmApCitgY29sdW1uYDs7CisJY29sdW1uIG51bWJlciBwcmVmaXggKHdoZW4gdXNpbmcgYC0tY29sdW1uYCkKK2BtYXRjaGA7OworCW1hdGNoaW5nIHRleHQgKHNhbWUgYXMgc2V0dGluZyBgbWF0Y2hDb250ZXh0YCBhbmQgYG1hdGNoU2VsZWN0ZWRgKQorYG1hdGNoQ29udGV4dGA7OworCW1hdGNoaW5nIHRleHQgaW4gY29udGV4dCBsaW5lcworYG1hdGNoU2VsZWN0ZWRgOzsKKwltYXRjaGluZyB0ZXh0IGluIHNlbGVjdGVkIGxpbmVzCitgc2VsZWN0ZWRgOzsKKwlub24tbWF0Y2hpbmcgdGV4dCBpbiBzZWxlY3RlZCBsaW5lcworYHNlcGFyYXRvcmA7OworCXNlcGFyYXRvcnMgYmV0d2VlbiBmaWVsZHMgb24gYSBsaW5lIChgOmAsIGAtYCwgYW5kIGA9YCkKKwlhbmQgYmV0d2VlbiBodW5rcyAoYC0tYCkKKy0tCisKK2NvbG9yLmludGVyYWN0aXZlOjoKKwlXaGVuIHNldCB0byBgYWx3YXlzYCwgYWx3YXlzIHVzZSBjb2xvcnMgZm9yIGludGVyYWN0aXZlIHByb21wdHMKKwlhbmQgZGlzcGxheXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSAiZ2l0LWFkZCAtLWludGVyYWN0aXZlIiBhbmQKKwkiZ2l0LWNsZWFuIC0taW50ZXJhY3RpdmUiKS4gV2hlbiBmYWxzZSAob3IgYG5ldmVyYCksIG5ldmVyLgorCVdoZW4gc2V0IHRvIGB0cnVlYCBvciBgYXV0b2AsIHVzZSBjb2xvcnMgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMKKwl0byB0aGUgdGVybWluYWwuIElmIHVuc2V0LCB0aGVuIHRoZSB2YWx1ZSBvZiBgY29sb3IudWlgIGlzCisJdXNlZCAoYGF1dG9gIGJ5IGRlZmF1bHQpLgorCitjb2xvci5pbnRlcmFjdGl2ZS48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciAnZ2l0IGFkZCAtLWludGVyYWN0aXZlJyBhbmQgJ2dpdCBjbGVhbgorCS0taW50ZXJhY3RpdmUnIG91dHB1dC4gYDxzbG90PmAgbWF5IGJlIGBwcm9tcHRgLCBgaGVhZGVyYCwgYGhlbHBgCisJb3IgYGVycm9yYCwgZm9yIGZvdXIgZGlzdGluY3QgdHlwZXMgb2Ygbm9ybWFsIG91dHB1dCBmcm9tCisJaW50ZXJhY3RpdmUgY29tbWFuZHMuCisKK2NvbG9yLnBhZ2VyOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3JlZCBvdXRwdXQgd2hlbiB0aGUgcGFnZXIgaXMgaW4KKwl1c2UgKGRlZmF1bHQgaXMgdHJ1ZSkuCisKK2NvbG9yLnB1c2g6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiBwdXNoIGVycm9ycy4gTWF5IGJlIHNldCB0bworCWBhbHdheXNgLCBgZmFsc2VgIChvciBgbmV2ZXJgKSBvciBgYXV0b2AgKG9yIGB0cnVlYCksIGluIHdoaWNoCisJY2FzZSBjb2xvcnMgYXJlIHVzZWQgb25seSB3aGVuIHRoZSBlcnJvciBvdXRwdXQgZ29lcyB0byBhIHRlcm1pbmFsLgorCUlmIHVuc2V0LCB0aGVuIHRoZSB2YWx1ZSBvZiBgY29sb3IudWlgIGlzIHVzZWQgKGBhdXRvYCBieSBkZWZhdWx0KS4KKworY29sb3IucHVzaC5lcnJvcjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIHB1c2ggZXJyb3JzLgorCitjb2xvci5yZW1vdGU6OgorCUlmIHNldCwga2V5d29yZHMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGFyZSBoaWdobGlnaHRlZC4gVGhlCisJa2V5d29yZHMgYXJlICJlcnJvciIsICJ3YXJuaW5nIiwgImhpbnQiIGFuZCAic3VjY2VzcyIsIGFuZCBhcmUKKwltYXRjaGVkIGNhc2UtaW5zZW5zaXRpdmVseS4gTWF5IGJlIHNldCB0byBgYWx3YXlzYCwgYGZhbHNlYCAob3IKKwlgbmV2ZXJgKSBvciBgYXV0b2AgKG9yIGB0cnVlYCkuIElmIHVuc2V0LCB0aGVuIHRoZSB2YWx1ZSBvZgorCWBjb2xvci51aWAgaXMgdXNlZCAoYGF1dG9gIGJ5IGRlZmF1bHQpLgorCitjb2xvci5yZW1vdGUuPHNsb3Q+OjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgZWFjaCByZW1vdGUga2V5d29yZC4gYDxzbG90PmAgbWF5IGJlCisJYGhpbnRgLCBgd2FybmluZ2AsIGBzdWNjZXNzYCBvciBgZXJyb3JgIHdoaWNoIG1hdGNoIHRoZQorCWNvcnJlc3BvbmRpbmcga2V5d29yZC4KKworY29sb3Iuc2hvd0JyYW5jaDo6CisJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIGNvbG9yIGluIHRoZSBvdXRwdXQgb2YKKwlsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXS4gTWF5IGJlIHNldCB0byBgYWx3YXlzYCwKKwlgZmFsc2VgIChvciBgbmV2ZXJgKSBvciBgYXV0b2AgKG9yIGB0cnVlYCksIGluIHdoaWNoIGNhc2UgY29sb3JzIGFyZSB1c2VkCisJb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgdG8gYSB0ZXJtaW5hbC4gSWYgdW5zZXQsIHRoZW4gdGhlCisJdmFsdWUgb2YgYGNvbG9yLnVpYCBpcyB1c2VkIChgYXV0b2AgYnkgZGVmYXVsdCkuCisKK2NvbG9yLnN0YXR1czo6CisJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIGNvbG9yIGluIHRoZSBvdXRwdXQgb2YKKwlsaW5rZ2l0OmdpdC1zdGF0dXNbMV0uIE1heSBiZSBzZXQgdG8gYGFsd2F5c2AsCisJYGZhbHNlYCAob3IgYG5ldmVyYCkgb3IgYGF1dG9gIChvciBgdHJ1ZWApLCBpbiB3aGljaCBjYXNlIGNvbG9ycyBhcmUgdXNlZAorCW9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIHRvIGEgdGVybWluYWwuIElmIHVuc2V0LCB0aGVuIHRoZQorCXZhbHVlIG9mIGBjb2xvci51aWAgaXMgdXNlZCAoYGF1dG9gIGJ5IGRlZmF1bHQpLgorCitjb2xvci5zdGF0dXMuPHNsb3Q+OjoKKwlVc2UgY3VzdG9taXplZCBjb2xvciBmb3Igc3RhdHVzIGNvbG9yaXphdGlvbi4gYDxzbG90PmAgaXMKKwlvbmUgb2YgYGhlYWRlcmAgKHRoZSBoZWFkZXIgdGV4dCBvZiB0aGUgc3RhdHVzIG1lc3NhZ2UpLAorCWBhZGRlZGAgb3IgYHVwZGF0ZWRgIChmaWxlcyB3aGljaCBhcmUgYWRkZWQgYnV0IG5vdCBjb21taXR0ZWQpLAorCWBjaGFuZ2VkYCAoZmlsZXMgd2hpY2ggYXJlIGNoYW5nZWQgYnV0IG5vdCBhZGRlZCBpbiB0aGUgaW5kZXgpLAorCWB1bnRyYWNrZWRgIChmaWxlcyB3aGljaCBhcmUgbm90IHRyYWNrZWQgYnkgR2l0KSwKKwlgYnJhbmNoYCAodGhlIGN1cnJlbnQgYnJhbmNoKSwKKwlgbm9icmFuY2hgICh0aGUgY29sb3IgdGhlICdubyBicmFuY2gnIHdhcm5pbmcgaXMgc2hvd24gaW4sIGRlZmF1bHRpbmcKKwl0byByZWQpLAorCWBsb2NhbEJyYW5jaGAgb3IgYHJlbW90ZUJyYW5jaGAgKHRoZSBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaCBuYW1lcywKKwlyZXNwZWN0aXZlbHksIHdoZW4gYnJhbmNoIGFuZCB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQgaW4gdGhlCisJc3RhdHVzIHNob3J0LWZvcm1hdCksIG9yCisJYHVubWVyZ2VkYCAoZmlsZXMgd2hpY2ggaGF2ZSB1bm1lcmdlZCBjaGFuZ2VzKS4KKworY29sb3IudHJhbnNwb3J0OjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3Igd2hlbiBwdXNoZXMgYXJlIHJlamVjdGVkLiBNYXkgYmUKKwlzZXQgdG8gYGFsd2F5c2AsIGBmYWxzZWAgKG9yIGBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKSwgaW4gd2hpY2gKKwljYXNlIGNvbG9ycyBhcmUgdXNlZCBvbmx5IHdoZW4gdGhlIGVycm9yIG91dHB1dCBnb2VzIHRvIGEgdGVybWluYWwuCisJSWYgdW5zZXQsIHRoZW4gdGhlIHZhbHVlIG9mIGBjb2xvci51aWAgaXMgdXNlZCAoYGF1dG9gIGJ5IGRlZmF1bHQpLgorCitjb2xvci50cmFuc3BvcnQucmVqZWN0ZWQ6OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIHdoZW4gYSBwdXNoIHdhcyByZWplY3RlZC4KKworY29sb3IudWk6OgorCVRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdmFyaWFibGVzIHN1Y2gKKwlhcyBgY29sb3IuZGlmZmAgYW5kIGBjb2xvci5ncmVwYCB0aGF0IGNvbnRyb2wgdGhlIHVzZSBvZiBjb2xvcgorCXBlciBjb21tYW5kIGZhbWlseS4gSXRzIHNjb3BlIHdpbGwgZXhwYW5kIGFzIG1vcmUgY29tbWFuZHMgbGVhcm4KKwljb25maWd1cmF0aW9uIHRvIHNldCBhIGRlZmF1bHQgZm9yIHRoZSBgLS1jb2xvcmAgb3B0aW9uLiAgU2V0IGl0CisJdG8gYGZhbHNlYCBvciBgbmV2ZXJgIGlmIHlvdSBwcmVmZXIgR2l0IGNvbW1hbmRzIG5vdCB0byB1c2UKKwljb2xvciB1bmxlc3MgZW5hYmxlZCBleHBsaWNpdGx5IHdpdGggc29tZSBvdGhlciBjb25maWd1cmF0aW9uCisJb3IgdGhlIGAtLWNvbG9yYCBvcHRpb24uIFNldCBpdCB0byBgYWx3YXlzYCBpZiB5b3Ugd2FudCBhbGwKKwlvdXRwdXQgbm90IGludGVuZGVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIHRvIHVzZSBjb2xvciwgdG8KKwlgdHJ1ZWAgb3IgYGF1dG9gICh0aGlzIGlzIHRoZSBkZWZhdWx0IHNpbmNlIEdpdCAxLjguNCkgaWYgeW91CisJd2FudCBzdWNoIG91dHB1dCB0byB1c2UgY29sb3Igd2hlbiB3cml0dGVuIHRvIHRoZSB0ZXJtaW5hbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbHVtbi50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb2x1bW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YWEyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb2x1bW4udHh0CkBAIC0wLDAgKzEsNTUgQEAKK2NvbHVtbi51aTo6CisJU3BlY2lmeSB3aGV0aGVyIHN1cHBvcnRlZCBjb21tYW5kcyBzaG91bGQgb3V0cHV0IGluIGNvbHVtbnMuCisJVGhpcyB2YXJpYWJsZSBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgdG9rZW5zIHNlcGFyYXRlZCBieSBzcGFjZXMKKwlvciBjb21tYXM6CisrCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgd2hlbiB0aGUgZmVhdHVyZSBzaG91bGQgYmUgZW5hYmxlZAorKGRlZmF1bHRzIHRvICduZXZlcicpOgorKworLS0KK2BhbHdheXNgOzsKKwlhbHdheXMgc2hvdyBpbiBjb2x1bW5zCitgbmV2ZXJgOzsKKwluZXZlciBzaG93IGluIGNvbHVtbnMKK2BhdXRvYDs7CisJc2hvdyBpbiBjb2x1bW5zIGlmIHRoZSBvdXRwdXQgaXMgdG8gdGhlIHRlcm1pbmFsCistLQorKworVGhlc2Ugb3B0aW9ucyBjb250cm9sIGxheW91dCAoZGVmYXVsdHMgdG8gJ2NvbHVtbicpLiAgU2V0dGluZyBhbnkKK29mIHRoZXNlIGltcGxpZXMgJ2Fsd2F5cycgaWYgbm9uZSBvZiAnYWx3YXlzJywgJ25ldmVyJywgb3IgJ2F1dG8nIGFyZQorc3BlY2lmaWVkLgorKworLS0KK2Bjb2x1bW5gOzsKKwlmaWxsIGNvbHVtbnMgYmVmb3JlIHJvd3MKK2Byb3dgOzsKKwlmaWxsIHJvd3MgYmVmb3JlIGNvbHVtbnMKK2BwbGFpbmA7OworCXNob3cgaW4gb25lIGNvbHVtbgorLS0KKysKK0ZpbmFsbHksIHRoZXNlIG9wdGlvbnMgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBsYXlvdXQgb3B0aW9uIChkZWZhdWx0cwordG8gJ25vZGVuc2UnKToKKysKKy0tCitgZGVuc2VgOzsKKwltYWtlIHVuZXF1YWwgc2l6ZSBjb2x1bW5zIHRvIHV0aWxpemUgbW9yZSBzcGFjZQorYG5vZGVuc2VgOzsKKwltYWtlIGVxdWFsIHNpemUgY29sdW1ucworLS0KKworY29sdW1uLmJyYW5jaDo6CisJU3BlY2lmeSB3aGV0aGVyIHRvIG91dHB1dCBicmFuY2ggbGlzdGluZyBpbiBgZ2l0IGJyYW5jaGAgaW4gY29sdW1ucy4KKwlTZWUgYGNvbHVtbi51aWAgZm9yIGRldGFpbHMuCisKK2NvbHVtbi5jbGVhbjo6CisJU3BlY2lmeSB0aGUgbGF5b3V0IHdoZW4gbGlzdCBpdGVtcyBpbiBgZ2l0IGNsZWFuIC1pYCwgd2hpY2ggYWx3YXlzCisJc2hvd3MgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIGNvbHVtbnMuIFNlZSBgY29sdW1uLnVpYCBmb3IgZGV0YWlscy4KKworY29sdW1uLnN0YXR1czo6CisJU3BlY2lmeSB3aGV0aGVyIHRvIG91dHB1dCB1bnRyYWNrZWQgZmlsZXMgaW4gYGdpdCBzdGF0dXNgIGluIGNvbHVtbnMuCisJU2VlIGBjb2x1bW4udWlgIGZvciBkZXRhaWxzLgorCitjb2x1bW4udGFnOjoKKwlTcGVjaWZ5IHdoZXRoZXIgdG8gb3V0cHV0IHRhZyBsaXN0aW5nIGluIGBnaXQgdGFnYCBpbiBjb2x1bW5zLgorCVNlZSBgY29sdW1uLnVpYCBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb21taXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOTU1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb21taXQudHh0CkBAIC0wLDAgKzEsMjkgQEAKK2NvbW1pdC5jbGVhbnVwOjoKKwlUaGlzIHNldHRpbmcgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9mIHRoZSBgLS1jbGVhbnVwYCBvcHRpb24gaW4KKwlgZ2l0IGNvbW1pdGAuIFNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIGRldGFpbHMuIENoYW5naW5nIHRoZQorCWRlZmF1bHQgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSBhbHdheXMgd2FudCB0byBrZWVwIGxpbmVzIHRoYXQgYmVnaW4KKwl3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIGAjYCBpbiB5b3VyIGxvZyBtZXNzYWdlLCBpbiB3aGljaCBjYXNlIHlvdQorCXdvdWxkIGRvIGBnaXQgY29uZmlnIGNvbW1pdC5jbGVhbnVwIHdoaXRlc3BhY2VgIChub3RlIHRoYXQgeW91IHdpbGwKKwloYXZlIHRvIHJlbW92ZSB0aGUgaGVscCBsaW5lcyB0aGF0IGJlZ2luIHdpdGggYCNgIGluIHRoZSBjb21taXQgbG9nCisJdGVtcGxhdGUgeW91cnNlbGYsIGlmIHlvdSBkbyB0aGlzKS4KKworY29tbWl0LmdwZ1NpZ246OgorCisJQSBib29sZWFuIHRvIHNwZWNpZnkgd2hldGhlciBhbGwgY29tbWl0cyBzaG91bGQgYmUgR1BHIHNpZ25lZC4KKwlVc2Ugb2YgdGhpcyBvcHRpb24gd2hlbiBkb2luZyBvcGVyYXRpb25zIHN1Y2ggYXMgcmViYXNlIGNhbgorCXJlc3VsdCBpbiBhIGxhcmdlIG51bWJlciBvZiBjb21taXRzIGJlaW5nIHNpZ25lZC4gSXQgbWF5IGJlCisJY29udmVuaWVudCB0byB1c2UgYW4gYWdlbnQgdG8gYXZvaWQgdHlwaW5nIHlvdXIgR1BHIHBhc3NwaHJhc2UKKwlzZXZlcmFsIHRpbWVzLgorCitjb21taXQuc3RhdHVzOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgaW5jbHVzaW9uIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiBpbiB0aGUKKwljb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSB3aGVuIHVzaW5nIGFuIGVkaXRvciB0byBwcmVwYXJlIHRoZSBjb21taXQKKwltZXNzYWdlLiAgRGVmYXVsdHMgdG8gdHJ1ZS4KKworY29tbWl0LnRlbXBsYXRlOjoKKwlTcGVjaWZ5IHRoZSBwYXRobmFtZSBvZiBhIGZpbGUgdG8gdXNlIGFzIHRoZSB0ZW1wbGF0ZSBmb3IKKwluZXcgY29tbWl0IG1lc3NhZ2VzLgorCitjb21taXQudmVyYm9zZTo6CisJQSBib29sZWFuIG9yIGludCB0byBzcGVjaWZ5IHRoZSBsZXZlbCBvZiB2ZXJib3NlIHdpdGggYGdpdCBjb21taXRgLgorCVNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb21wbGV0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvbXBsZXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOTliZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb21wbGV0aW9uLnR4dApAQCAtMCwwICsxLDcgQEAKK2NvbXBsZXRpb24uY29tbWFuZHM6OgorCVRoaXMgaXMgb25seSB1c2VkIGJ5IGdpdC1jb21wbGV0aW9uLmJhc2ggdG8gYWRkIG9yIHJlbW92ZQorCWNvbW1hbmRzIGZyb20gdGhlIGxpc3Qgb2YgY29tcGxldGVkIGNvbW1hbmRzLiBOb3JtYWxseSBvbmx5CisJcG9yY2VsYWluIGNvbW1hbmRzIGFuZCBhIGZldyBzZWxlY3Qgb3RoZXJzIGFyZSBjb21wbGV0ZWQuIFlvdQorCWNhbiBhZGQgbW9yZSBjb21tYW5kcywgc2VwYXJhdGVkIGJ5IHNwYWNlLCBpbiB0aGlzCisJdmFyaWFibGUuIFByZWZpeGluZyB0aGUgY29tbWFuZCB3aXRoICctJyB3aWxsIHJlbW92ZSBpdCBmcm9tCisJdGhlIGV4aXN0aW5nIGxpc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb3JlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NjE5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb3JlLnR4dApAQCAtMCwwICsxLDYyOCBAQAorY29yZS5maWxlTW9kZTo6CisJVGVsbHMgR2l0IGlmIHRoZSBleGVjdXRhYmxlIGJpdCBvZiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlCisJaXMgdG8gYmUgaG9ub3JlZC4KKysKK1NvbWUgZmlsZXN5c3RlbXMgbG9zZSB0aGUgZXhlY3V0YWJsZSBiaXQgd2hlbiBhIGZpbGUgdGhhdCBpcworbWFya2VkIGFzIGV4ZWN1dGFibGUgaXMgY2hlY2tlZCBvdXQsIG9yIGNoZWNrcyBvdXQgYQorbm9uLWV4ZWN1dGFibGUgZmlsZSB3aXRoIGV4ZWN1dGFibGUgYml0IG9uLgorbGlua2dpdDpnaXQtY2xvbmVbMV0gb3IgbGlua2dpdDpnaXQtaW5pdFsxXSBwcm9iZSB0aGUgZmlsZXN5c3RlbQordG8gc2VlIGlmIGl0IGhhbmRsZXMgdGhlIGV4ZWN1dGFibGUgYml0IGNvcnJlY3RseQorYW5kIHRoaXMgdmFyaWFibGUgaXMgYXV0b21hdGljYWxseSBzZXQgYXMgbmVjZXNzYXJ5LgorKworQSByZXBvc2l0b3J5LCBob3dldmVyLCBtYXkgYmUgb24gYSBmaWxlc3lzdGVtIHRoYXQgaGFuZGxlcwordGhlIGZpbGVtb2RlIGNvcnJlY3RseSwgYW5kIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICd0cnVlJword2hlbiBjcmVhdGVkLCBidXQgbGF0ZXIgbWF5IGJlIG1hZGUgYWNjZXNzaWJsZSBmcm9tIGFub3RoZXIKK2Vudmlyb25tZW50IHRoYXQgbG9zZXMgdGhlIGZpbGVtb2RlIChlLmcuIGV4cG9ydGluZyBleHQ0IHZpYQorQ0lGUyBtb3VudCwgdmlzaXRpbmcgYSBDeWd3aW4gY3JlYXRlZCByZXBvc2l0b3J5IHdpdGgKK0dpdCBmb3IgV2luZG93cyBvciBFY2xpcHNlKS4KK0luIHN1Y2ggYSBjYXNlIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gc2V0IHRoaXMgdmFyaWFibGUgdG8gJ2ZhbHNlJy4KK1NlZSBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0uCisrCitUaGUgZGVmYXVsdCBpcyB0cnVlICh3aGVuIGNvcmUuZmlsZW1vZGUgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgY29uZmlnIGZpbGUpLgorCitjb3JlLmhpZGVEb3RGaWxlczo6CisJKFdpbmRvd3Mtb25seSkgSWYgdHJ1ZSwgbWFyayBuZXdseS1jcmVhdGVkIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyB3aG9zZQorCW5hbWUgc3RhcnRzIHdpdGggYSBkb3QgYXMgaGlkZGVuLiAgSWYgJ2RvdEdpdE9ubHknLCBvbmx5IHRoZSBgLmdpdC9gCisJZGlyZWN0b3J5IGlzIGhpZGRlbiwgYnV0IG5vIG90aGVyIGZpbGVzIHN0YXJ0aW5nIHdpdGggYSBkb3QuICBUaGUKKwlkZWZhdWx0IG1vZGUgaXMgJ2RvdEdpdE9ubHknLgorCitjb3JlLmlnbm9yZUNhc2U6OgorCUludGVybmFsIHZhcmlhYmxlIHdoaWNoIGVuYWJsZXMgdmFyaW91cyB3b3JrYXJvdW5kcyB0byBlbmFibGUKKwlHaXQgdG8gd29yayBiZXR0ZXIgb24gZmlsZXN5c3RlbXMgdGhhdCBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLAorCWxpa2UgQVBGUywgSEZTKywgRkFULCBOVEZTLCBldGMuIEZvciBleGFtcGxlLCBpZiBhIGRpcmVjdG9yeSBsaXN0aW5nCisJZmluZHMgIm1ha2VmaWxlIiB3aGVuIEdpdCBleHBlY3RzICJNYWtlZmlsZSIsIEdpdCB3aWxsIGFzc3VtZQorCWl0IGlzIHJlYWxseSB0aGUgc2FtZSBmaWxlLCBhbmQgY29udGludWUgdG8gcmVtZW1iZXIgaXQgYXMKKwkiTWFrZWZpbGUiLgorKworVGhlIGRlZmF1bHQgaXMgZmFsc2UsIGV4Y2VwdCBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBvciBsaW5rZ2l0OmdpdC1pbml0WzFdCit3aWxsIHByb2JlIGFuZCBzZXQgY29yZS5pZ25vcmVDYXNlIHRydWUgaWYgYXBwcm9wcmlhdGUgd2hlbiB0aGUgcmVwb3NpdG9yeQoraXMgY3JlYXRlZC4KKysKK0dpdCByZWxpZXMgb24gdGhlIHByb3BlciBjb25maWd1cmF0aW9uIG9mIHRoaXMgdmFyaWFibGUgZm9yIHlvdXIgb3BlcmF0aW5nCithbmQgZmlsZSBzeXN0ZW0uIE1vZGlmeWluZyB0aGlzIHZhbHVlIG1heSByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvci4KKworY29yZS5wcmVjb21wb3NlVW5pY29kZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB1c2VkIGJ5IE1hYyBPUyBpbXBsZW1lbnRhdGlvbiBvZiBHaXQuCisJV2hlbiBjb3JlLnByZWNvbXBvc2VVbmljb2RlPXRydWUsIEdpdCByZXZlcnRzIHRoZSB1bmljb2RlIGRlY29tcG9zaXRpb24KKwlvZiBmaWxlbmFtZXMgZG9uZSBieSBNYWMgT1MuIFRoaXMgaXMgdXNlZnVsIHdoZW4gc2hhcmluZyBhIHJlcG9zaXRvcnkKKwliZXR3ZWVuIE1hYyBPUyBhbmQgTGludXggb3IgV2luZG93cy4KKwkoR2l0IGZvciBXaW5kb3dzIDEuNy4xMCBvciBoaWdoZXIgaXMgbmVlZGVkLCBvciBHaXQgdW5kZXIgY3lnd2luIDEuNykuCisJV2hlbiBmYWxzZSwgZmlsZSBuYW1lcyBhcmUgaGFuZGxlZCBmdWxseSB0cmFuc3BhcmVudCBieSBHaXQsCisJd2hpY2ggaXMgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEdpdC4KKworY29yZS5wcm90ZWN0SEZTOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZG8gbm90IGFsbG93IGNoZWNrb3V0IG9mIHBhdGhzIHRoYXQgd291bGQKKwliZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gYC5naXRgIG9uIGFuIEhGUysgZmlsZXN5c3RlbS4KKwlEZWZhdWx0cyB0byBgdHJ1ZWAgb24gTWFjIE9TLCBhbmQgYGZhbHNlYCBlbHNld2hlcmUuCisKK2NvcmUucHJvdGVjdE5URlM6OgorCUlmIHNldCB0byB0cnVlLCBkbyBub3QgYWxsb3cgY2hlY2tvdXQgb2YgcGF0aHMgdGhhdCB3b3VsZAorCWNhdXNlIHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZXN5c3RlbSwgZS5nLiBjb25mbGljdCB3aXRoCisJOC4zICJzaG9ydCIgbmFtZXMuCisJRGVmYXVsdHMgdG8gYHRydWVgIG9uIFdpbmRvd3MsIGFuZCBgZmFsc2VgIGVsc2V3aGVyZS4KKworY29yZS5mc21vbml0b3I6OgorCUlmIHNldCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBhcyBhIGNvbW1hbmQgd2hpY2gKKwl3aWxsIGlkZW50aWZ5IGFsbCBmaWxlcyB0aGF0IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlCisJcmVxdWVzdGVkIGRhdGUvdGltZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIHNwZWVkIHVwIGdpdCBieQorCWF2b2lkaW5nIHVubmVjZXNzYXJ5IHByb2Nlc3Npbmcgb2YgZmlsZXMgdGhhdCBoYXZlIG5vdCBjaGFuZ2VkLgorCVNlZSB0aGUgImZzbW9uaXRvci13YXRjaG1hbiIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdGhvb2tzWzVdLgorCitjb3JlLmZzbW9uaXRvckhvb2tWZXJzaW9uOjoKKwlTZXRzIHRoZSB2ZXJzaW9uIG9mIGhvb2sgdGhhdCBpcyB0byBiZSB1c2VkIHdoZW4gY2FsbGluZyBmc21vbml0b3IuCisJVGhlcmUgYXJlIGN1cnJlbnRseSB2ZXJzaW9ucyAxIGFuZCAyLiBXaGVuIHRoaXMgaXMgbm90IHNldCwKKwl2ZXJzaW9uIDIgd2lsbCBiZSB0cmllZCBmaXJzdCBhbmQgaWYgaXQgZmFpbHMgdGhlbiB2ZXJzaW9uIDEKKwl3aWxsIGJlIHRyaWVkLiBWZXJzaW9uIDEgdXNlcyBhIHRpbWVzdGFtcCBhcyBpbnB1dCB0byBkZXRlcm1pbmUKKwl3aGljaCBmaWxlcyBoYXZlIGNoYW5nZXMgc2luY2UgdGhhdCB0aW1lIGJ1dCBzb21lIG1vbml0b3JzCisJbGlrZSB3YXRjaG1hbiBoYXZlIHJhY2UgY29uZGl0aW9ucyB3aGVuIHVzZWQgd2l0aCBhIHRpbWVzdGFtcC4KKwlWZXJzaW9uIDIgdXNlcyBhbiBvcGFxdWUgc3RyaW5nIHNvIHRoYXQgdGhlIG1vbml0b3IgY2FuIHJldHVybgorCXNvbWV0aGluZyB0aGF0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGF0IGZpbGVzIGhhdmUgY2hhbmdlZAorCXdpdGhvdXQgcmFjZSBjb25kaXRpb25zLgorCitjb3JlLnRydXN0Y3RpbWU6OgorCUlmIGZhbHNlLCB0aGUgY3RpbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHRoZQorCXdvcmtpbmcgdHJlZSBhcmUgaWdub3JlZDsgdXNlZnVsIHdoZW4gdGhlIGlub2RlIGNoYW5nZSB0aW1lCisJaXMgcmVndWxhcmx5IG1vZGlmaWVkIGJ5IHNvbWV0aGluZyBvdXRzaWRlIEdpdCAoZmlsZSBzeXN0ZW0KKwljcmF3bGVycyBhbmQgc29tZSBiYWNrdXAgc3lzdGVtcykuCisJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4gVHJ1ZSBieSBkZWZhdWx0LgorCitjb3JlLnNwbGl0SW5kZXg6OgorCUlmIHRydWUsIHRoZSBzcGxpdC1pbmRleCBmZWF0dXJlIG9mIHRoZSBpbmRleCB3aWxsIGJlIHVzZWQuCisJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4gRmFsc2UgYnkgZGVmYXVsdC4KKworY29yZS51bnRyYWNrZWRDYWNoZTo6CisJRGV0ZXJtaW5lcyB3aGF0IHRvIGRvIGFib3V0IHRoZSB1bnRyYWNrZWQgY2FjaGUgZmVhdHVyZSBvZiB0aGUKKwlpbmRleC4gSXQgd2lsbCBiZSBrZXB0LCBpZiB0aGlzIHZhcmlhYmxlIGlzIHVuc2V0IG9yIHNldCB0bworCWBrZWVwYC4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFkZGVkIGlmIHNldCB0byBgdHJ1ZWAuIEFuZAorCWl0IHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkLCBpZiBzZXQgdG8gYGZhbHNlYC4gQmVmb3JlCisJc2V0dGluZyBpdCB0byBgdHJ1ZWAsIHlvdSBzaG91bGQgY2hlY2sgdGhhdCBtdGltZSBpcyB3b3JraW5nCisJcHJvcGVybHkgb24geW91ciBzeXN0ZW0uCisJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4gYGtlZXBgIGJ5IGRlZmF1bHQsIHVubGVzcworCWBmZWF0dXJlLm1hbnlGaWxlc2AgaXMgZW5hYmxlZCB3aGljaCBzZXRzIHRoaXMgc2V0dGluZyB0bworCWB0cnVlYCBieSBkZWZhdWx0LgorCitjb3JlLmNoZWNrU3RhdDo6CisJV2hlbiBtaXNzaW5nIG9yIGlzIHNldCB0byBgZGVmYXVsdGAsIG1hbnkgZmllbGRzIGluIHRoZSBzdGF0CisJc3RydWN0dXJlIGFyZSBjaGVja2VkIHRvIGRldGVjdCBpZiBhIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQKKwlzaW5jZSBHaXQgbG9va2VkIGF0IGl0LiAgV2hlbiB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMKKwlzZXQgdG8gYG1pbmltYWxgLCBzdWItc2Vjb25kIHBhcnQgb2YgbXRpbWUgYW5kIGN0aW1lLCB0aGUKKwl1aWQgYW5kIGdpZCBvZiB0aGUgb3duZXIgb2YgdGhlIGZpbGUsIHRoZSBpbm9kZSBudW1iZXIgKGFuZAorCXRoZSBkZXZpY2UgbnVtYmVyLCBpZiBHaXQgd2FzIGNvbXBpbGVkIHRvIHVzZSBpdCksIGFyZQorCWV4Y2x1ZGVkIGZyb20gdGhlIGNoZWNrIGFtb25nIHRoZXNlIGZpZWxkcywgbGVhdmluZyBvbmx5IHRoZQorCXdob2xlLXNlY29uZCBwYXJ0IG9mIG10aW1lIChhbmQgY3RpbWUsIGlmIGBjb3JlLnRydXN0Q3RpbWVgCisJaXMgc2V0KSBhbmQgdGhlIGZpbGVzaXplIHRvIGJlIGNoZWNrZWQuCisrCitUaGVyZSBhcmUgaW1wbGVtZW50YXRpb25zIG9mIEdpdCB0aGF0IGRvIG5vdCBsZWF2ZSB1c2FibGUgdmFsdWVzIGluCitzb21lIGZpZWxkcyAoZS5nLiBKR2l0KTsgYnkgZXhjbHVkaW5nIHRoZXNlIGZpZWxkcyBmcm9tIHRoZQorY29tcGFyaXNvbiwgdGhlIGBtaW5pbWFsYCBtb2RlIG1heSBoZWxwIGludGVyb3BlcmFiaWxpdHkgd2hlbiB0aGUKK3NhbWUgcmVwb3NpdG9yeSBpcyB1c2VkIGJ5IHRoZXNlIG90aGVyIHN5c3RlbXMgYXQgdGhlIHNhbWUgdGltZS4KKworY29yZS5xdW90ZVBhdGg6OgorCUNvbW1hbmRzIHRoYXQgb3V0cHV0IHBhdGhzIChlLmcuICdscy1maWxlcycsICdkaWZmJyksIHdpbGwKKwlxdW90ZSAidW51c3VhbCIgY2hhcmFjdGVycyBpbiB0aGUgcGF0aG5hbWUgYnkgZW5jbG9zaW5nIHRoZQorCXBhdGhuYW1lIGluIGRvdWJsZS1xdW90ZXMgYW5kIGVzY2FwaW5nIHRob3NlIGNoYXJhY3RlcnMgd2l0aAorCWJhY2tzbGFzaGVzIGluIHRoZSBzYW1lIHdheSBDIGVzY2FwZXMgY29udHJvbCBjaGFyYWN0ZXJzIChlLmcuCisJYFx0YCBmb3IgVEFCLCBgXG5gIGZvciBMRiwgYFxcYCBmb3IgYmFja3NsYXNoKSBvciBieXRlcyB3aXRoCisJdmFsdWVzIGxhcmdlciB0aGFuIDB4ODAgKGUuZy4gb2N0YWwgYFwzMDJcMjY1YCBmb3IgIm1pY3JvIiBpbgorCVVURi04KS4gIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIGZhbHNlLCBieXRlcyBoaWdoZXIgdGhhbgorCTB4ODAgYXJlIG5vdCBjb25zaWRlcmVkICJ1bnVzdWFsIiBhbnkgbW9yZS4gRG91YmxlLXF1b3RlcywKKwliYWNrc2xhc2ggYW5kIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWx3YXlzIGVzY2FwZWQgcmVnYXJkbGVzcworCW9mIHRoZSBzZXR0aW5nIG9mIHRoaXMgdmFyaWFibGUuICBBIHNpbXBsZSBzcGFjZSBjaGFyYWN0ZXIgaXMKKwlub3QgY29uc2lkZXJlZCAidW51c3VhbCIuICBNYW55IGNvbW1hbmRzIGNhbiBvdXRwdXQgcGF0aG5hbWVzCisJY29tcGxldGVseSB2ZXJiYXRpbSB1c2luZyB0aGUgYC16YCBvcHRpb24uIFRoZSBkZWZhdWx0IHZhbHVlCisJaXMgdHJ1ZS4KKworY29yZS5lb2w6OgorCVNldHMgdGhlIGxpbmUgZW5kaW5nIHR5cGUgdG8gdXNlIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IKKwlmaWxlcyB0aGF0IGFyZSBtYXJrZWQgYXMgdGV4dCAoZWl0aGVyIGJ5IGhhdmluZyB0aGUgYHRleHRgCisJYXR0cmlidXRlIHNldCwgb3IgYnkgaGF2aW5nIGB0ZXh0PWF1dG9gIGFuZCBHaXQgYXV0by1kZXRlY3RpbmcKKwl0aGUgY29udGVudHMgYXMgdGV4dCkuCisJQWx0ZXJuYXRpdmVzIGFyZSAnbGYnLCAnY3JsZicgYW5kICduYXRpdmUnLCB3aGljaCB1c2VzIHRoZSBwbGF0Zm9ybSdzCisJbmF0aXZlIGxpbmUgZW5kaW5nLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG5hdGl2ZWAuICBTZWUKKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZW5kLW9mLWxpbmUKKwljb252ZXJzaW9uLiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBpZ25vcmVkIGlmIGBjb3JlLmF1dG9jcmxmYAorCWlzIHNldCB0byBgdHJ1ZWAgb3IgYGlucHV0YC4KKworY29yZS5zYWZlY3JsZjo6CisJSWYgdHJ1ZSwgbWFrZXMgR2l0IGNoZWNrIGlmIGNvbnZlcnRpbmcgYENSTEZgIGlzIHJldmVyc2libGUgd2hlbgorCWVuZC1vZi1saW5lIGNvbnZlcnNpb24gaXMgYWN0aXZlLiAgR2l0IHdpbGwgdmVyaWZ5IGlmIGEgY29tbWFuZAorCW1vZGlmaWVzIGEgZmlsZSBpbiB0aGUgd29yayB0cmVlIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LgorCUZvciBleGFtcGxlLCBjb21taXR0aW5nIGEgZmlsZSBmb2xsb3dlZCBieSBjaGVja2luZyBvdXQgdGhlCisJc2FtZSBmaWxlIHNob3VsZCB5aWVsZCB0aGUgb3JpZ2luYWwgZmlsZSBpbiB0aGUgd29yayB0cmVlLiAgSWYKKwl0aGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgdGhlIGN1cnJlbnQgc2V0dGluZyBvZgorCWBjb3JlLmF1dG9jcmxmYCwgR2l0IHdpbGwgcmVqZWN0IHRoZSBmaWxlLiAgVGhlIHZhcmlhYmxlIGNhbgorCWJlIHNldCB0byAid2FybiIsIGluIHdoaWNoIGNhc2UgR2l0IHdpbGwgb25seSB3YXJuIGFib3V0IGFuCisJaXJyZXZlcnNpYmxlIGNvbnZlcnNpb24gYnV0IGNvbnRpbnVlIHRoZSBvcGVyYXRpb24uCisrCitDUkxGIGNvbnZlcnNpb24gYmVhcnMgYSBzbGlnaHQgY2hhbmNlIG9mIGNvcnJ1cHRpbmcgZGF0YS4KK1doZW4gaXQgaXMgZW5hYmxlZCwgR2l0IHdpbGwgY29udmVydCBDUkxGIHRvIExGIGR1cmluZyBjb21taXQgYW5kIExGIHRvCitDUkxGIGR1cmluZyBjaGVja291dC4gIEEgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbWl4dHVyZSBvZiBMRiBhbmQKK0NSTEYgYmVmb3JlIHRoZSBjb21taXQgY2Fubm90IGJlIHJlY3JlYXRlZCBieSBHaXQuICBGb3IgdGV4dAorZmlsZXMgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG86IGl0IGNvcnJlY3RzIGxpbmUgZW5kaW5ncworc3VjaCB0aGF0IHdlIGhhdmUgb25seSBMRiBsaW5lIGVuZGluZ3MgaW4gdGhlIHJlcG9zaXRvcnkuCitCdXQgZm9yIGJpbmFyeSBmaWxlcyB0aGF0IGFyZSBhY2NpZGVudGFsbHkgY2xhc3NpZmllZCBhcyB0ZXh0IHRoZQorY29udmVyc2lvbiBjYW4gY29ycnVwdCBkYXRhLgorKworSWYgeW91IHJlY29nbml6ZSBzdWNoIGNvcnJ1cHRpb24gZWFybHkgeW91IGNhbiBlYXNpbHkgZml4IGl0IGJ5CitzZXR0aW5nIHRoZSBjb252ZXJzaW9uIHR5cGUgZXhwbGljaXRseSBpbiAuZ2l0YXR0cmlidXRlcy4gIFJpZ2h0CithZnRlciBjb21taXR0aW5nIHlvdSBzdGlsbCBoYXZlIHRoZSBvcmlnaW5hbCBmaWxlIGluIHlvdXIgd29yawordHJlZSBhbmQgdGhpcyBmaWxlIGlzIG5vdCB5ZXQgY29ycnVwdGVkLiAgWW91IGNhbiBleHBsaWNpdGx5IHRlbGwKK0dpdCB0aGF0IHRoaXMgZmlsZSBpcyBiaW5hcnkgYW5kIEdpdCB3aWxsIGhhbmRsZSB0aGUgZmlsZQorYXBwcm9wcmlhdGVseS4KKysKK1VuZm9ydHVuYXRlbHksIHRoZSBkZXNpcmVkIGVmZmVjdCBvZiBjbGVhbmluZyB1cCB0ZXh0IGZpbGVzIHdpdGgKK21peGVkIGxpbmUgZW5kaW5ncyBhbmQgdGhlIHVuZGVzaXJlZCBlZmZlY3Qgb2YgY29ycnVwdGluZyBiaW5hcnkKK2ZpbGVzIGNhbm5vdCBiZSBkaXN0aW5ndWlzaGVkLiAgSW4gYm90aCBjYXNlcyBDUkxGcyBhcmUgcmVtb3ZlZAoraW4gYW4gaXJyZXZlcnNpYmxlIHdheS4gIEZvciB0ZXh0IGZpbGVzIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nCit0byBkbyBiZWNhdXNlIENSTEZzIGFyZSBsaW5lIGVuZGluZ3MsIHdoaWxlIGZvciBiaW5hcnkgZmlsZXMKK2NvbnZlcnRpbmcgQ1JMRnMgY29ycnVwdHMgZGF0YS4KKysKK05vdGUsIHRoaXMgc2FmZXR5IGNoZWNrIGRvZXMgbm90IG1lYW4gdGhhdCBhIGNoZWNrb3V0IHdpbGwgZ2VuZXJhdGUgYQorZmlsZSBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsIGZpbGUgZm9yIGEgZGlmZmVyZW50IHNldHRpbmcgb2YKK2Bjb3JlLmVvbGAgYW5kIGBjb3JlLmF1dG9jcmxmYCwgYnV0IG9ubHkgZm9yIHRoZSBjdXJyZW50IG9uZS4gIEZvcgorZXhhbXBsZSwgYSB0ZXh0IGZpbGUgd2l0aCBgTEZgIHdvdWxkIGJlIGFjY2VwdGVkIHdpdGggYGNvcmUuZW9sPWxmYAorYW5kIGNvdWxkIGxhdGVyIGJlIGNoZWNrZWQgb3V0IHdpdGggYGNvcmUuZW9sPWNybGZgLCBpbiB3aGljaCBjYXNlIHRoZQorcmVzdWx0aW5nIGZpbGUgd291bGQgY29udGFpbiBgQ1JMRmAsIGFsdGhvdWdoIHRoZSBvcmlnaW5hbCBmaWxlCitjb250YWluZWQgYExGYC4gIEhvd2V2ZXIsIGluIGJvdGggd29yayB0cmVlcyB0aGUgbGluZSBlbmRpbmdzIHdvdWxkIGJlCitjb25zaXN0ZW50LCB0aGF0IGlzIGVpdGhlciBhbGwgYExGYCBvciBhbGwgYENSTEZgLCBidXQgbmV2ZXIgbWl4ZWQuICBBCitmaWxlIHdpdGggbWl4ZWQgbGluZSBlbmRpbmdzIHdvdWxkIGJlIHJlcG9ydGVkIGJ5IHRoZSBgY29yZS5zYWZlY3JsZmAKK21lY2hhbmlzbS4KKworY29yZS5hdXRvY3JsZjo6CisJU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICJ0cnVlIiBpcyB0aGUgc2FtZSBhcyBzZXR0aW5nCisJdGhlIGB0ZXh0YCBhdHRyaWJ1dGUgdG8gImF1dG8iIG9uIGFsbCBmaWxlcyBhbmQgY29yZS5lb2wgdG8gImNybGYiLgorCVNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGhhdmUgYENSTEZgIGxpbmUgZW5kaW5ncyBpbiB5b3VyCisJd29ya2luZyBkaXJlY3RvcnkgYW5kIHRoZSByZXBvc2l0b3J5IGhhcyBMRiBsaW5lIGVuZGluZ3MuCisJVGhpcyB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvICdpbnB1dCcsCisJaW4gd2hpY2ggY2FzZSBubyBvdXRwdXQgY29udmVyc2lvbiBpcyBwZXJmb3JtZWQuCisKK2NvcmUuY2hlY2tSb3VuZHRyaXBFbmNvZGluZzo6CisJQSBjb21tYSBhbmQvb3Igd2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBlbmNvZGluZ3MgdGhhdCBHaXQKKwlwZXJmb3JtcyBVVEYtOCByb3VuZCB0cmlwIGNoZWNrcyBvbiBpZiB0aGV5IGFyZSB1c2VkIGluIGFuCisJYHdvcmtpbmctdHJlZS1lbmNvZGluZ2AgYXR0cmlidXRlIChzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgU0hJRlQtSklTYC4KKworY29yZS5zeW1saW5rczo6CisJSWYgZmFsc2UsIHN5bWJvbGljIGxpbmtzIGFyZSBjaGVja2VkIG91dCBhcyBzbWFsbCBwbGFpbiBmaWxlcyB0aGF0CisJY29udGFpbiB0aGUgbGluayB0ZXh0LiBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0gYW5kCisJbGlua2dpdDpnaXQtYWRkWzFdIHdpbGwgbm90IGNoYW5nZSB0aGUgcmVjb3JkZWQgdHlwZSB0byByZWd1bGFyCisJZmlsZS4gVXNlZnVsIG9uIGZpbGVzeXN0ZW1zIGxpa2UgRkFUIHRoYXQgZG8gbm90IHN1cHBvcnQKKwlzeW1ib2xpYyBsaW5rcy4KKysKK1RoZSBkZWZhdWx0IGlzIHRydWUsIGV4Y2VwdCBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBvciBsaW5rZ2l0OmdpdC1pbml0WzFdCit3aWxsIHByb2JlIGFuZCBzZXQgY29yZS5zeW1saW5rcyBmYWxzZSBpZiBhcHByb3ByaWF0ZSB3aGVuIHRoZSByZXBvc2l0b3J5CitpcyBjcmVhdGVkLgorCitjb3JlLmdpdFByb3h5OjoKKwlBICJwcm94eSBjb21tYW5kIiB0byBleGVjdXRlIChhcyAnY29tbWFuZCBob3N0IHBvcnQnKSBpbnN0ZWFkCisJb2YgZXN0YWJsaXNoaW5nIGRpcmVjdCBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgc2VydmVyIHdoZW4KKwl1c2luZyB0aGUgR2l0IHByb3RvY29sIGZvciBmZXRjaGluZy4gSWYgdGhlIHZhcmlhYmxlIHZhbHVlIGlzCisJaW4gdGhlICJDT01NQU5EIGZvciBET01BSU4iIGZvcm1hdCwgdGhlIGNvbW1hbmQgaXMgYXBwbGllZCBvbmx5CisJb24gaG9zdG5hbWVzIGVuZGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgZG9tYWluIHN0cmluZy4gVGhpcyB2YXJpYWJsZQorCW1heSBiZSBzZXQgbXVsdGlwbGUgdGltZXMgYW5kIGlzIG1hdGNoZWQgaW4gdGhlIGdpdmVuIG9yZGVyOworCXRoZSBmaXJzdCBtYXRjaCB3aW5zLgorKworQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfUFJPWFlfQ09NTUFORGAgZW52aXJvbm1lbnQgdmFyaWFibGUKKyh3aGljaCBhbHdheXMgYXBwbGllcyB1bml2ZXJzYWxseSwgd2l0aG91dCB0aGUgc3BlY2lhbCAiZm9yIgoraGFuZGxpbmcpLgorKworVGhlIHNwZWNpYWwgc3RyaW5nIGBub25lYCBjYW4gYmUgdXNlZCBhcyB0aGUgcHJveHkgY29tbWFuZCB0bworc3BlY2lmeSB0aGF0IG5vIHByb3h5IGJlIHVzZWQgZm9yIGEgZ2l2ZW4gZG9tYWluIHBhdHRlcm4uCitUaGlzIGlzIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIHNlcnZlcnMgaW5zaWRlIGEgZmlyZXdhbGwgZnJvbQorcHJveHkgdXNlLCB3aGlsZSBkZWZhdWx0aW5nIHRvIGEgY29tbW9uIHByb3h5IGZvciBleHRlcm5hbCBkb21haW5zLgorCitjb3JlLnNzaENvbW1hbmQ6OgorCUlmIHRoaXMgdmFyaWFibGUgaXMgc2V0LCBgZ2l0IGZldGNoYCBhbmQgYGdpdCBwdXNoYCB3aWxsCisJdXNlIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBpbnN0ZWFkIG9mIGBzc2hgIHdoZW4gdGhleSBuZWVkIHRvCisJY29ubmVjdCB0byBhIHJlbW90ZSBzeXN0ZW0uIFRoZSBjb21tYW5kIGlzIGluIHRoZSBzYW1lIGZvcm0gYXMKKwl0aGUgYEdJVF9TU0hfQ09NTUFORGAgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGlzIG92ZXJyaWRkZW4KKwl3aGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuCisKK2NvcmUuaWdub3JlU3RhdDo6CisJSWYgdHJ1ZSwgR2l0IHdpbGwgYXZvaWQgdXNpbmcgbHN0YXQoKSBjYWxscyB0byBkZXRlY3QgaWYgZmlsZXMgaGF2ZQorCWNoYW5nZWQgYnkgc2V0dGluZyB0aGUgImFzc3VtZS11bmNoYW5nZWQiIGJpdCBmb3IgdGhvc2UgdHJhY2tlZCBmaWxlcworCXdoaWNoIGl0IGhhcyB1cGRhdGVkIGlkZW50aWNhbGx5IGluIGJvdGggdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUuCisrCitXaGVuIGZpbGVzIGFyZSBtb2RpZmllZCBvdXRzaWRlIG9mIEdpdCwgdGhlIHVzZXIgd2lsbCBuZWVkIHRvIHN0YWdlCit0aGUgbW9kaWZpZWQgZmlsZXMgZXhwbGljaXRseSAoZS5nLiBzZWUgJ0V4YW1wbGVzJyBzZWN0aW9uIGluCitsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0pLgorR2l0IHdpbGwgbm90IG5vcm1hbGx5IGRldGVjdCBjaGFuZ2VzIHRvIHRob3NlIGZpbGVzLgorKworVGhpcyBpcyB1c2VmdWwgb24gc3lzdGVtcyB3aGVyZSBsc3RhdCgpIGNhbGxzIGFyZSB2ZXJ5IHNsb3csIHN1Y2ggYXMKK0NJRlMvTWljcm9zb2Z0IFdpbmRvd3MuCisrCitGYWxzZSBieSBkZWZhdWx0LgorCitjb3JlLnByZWZlclN5bWxpbmtSZWZzOjoKKwlJbnN0ZWFkIG9mIHRoZSBkZWZhdWx0ICJzeW1yZWYiIGZvcm1hdCBmb3IgSEVBRAorCWFuZCBvdGhlciBzeW1ib2xpYyByZWZlcmVuY2UgZmlsZXMsIHVzZSBzeW1ib2xpYyBsaW5rcy4KKwlUaGlzIGlzIHNvbWV0aW1lcyBuZWVkZWQgdG8gd29yayB3aXRoIG9sZCBzY3JpcHRzIHRoYXQKKwlleHBlY3QgSEVBRCB0byBiZSBhIHN5bWJvbGljIGxpbmsuCisKK2NvcmUuYWx0ZXJuYXRlUmVmc0NvbW1hbmQ6OgorCVdoZW4gYWR2ZXJ0aXNpbmcgdGlwcyBvZiBhdmFpbGFibGUgaGlzdG9yeSBmcm9tIGFuIGFsdGVybmF0ZSwgdXNlIHRoZSBzaGVsbCB0bworCWV4ZWN1dGUgdGhlIHNwZWNpZmllZCBjb21tYW5kIGluc3RlYWQgb2YgbGlua2dpdDpnaXQtZm9yLWVhY2gtcmVmWzFdLiBUaGUKKwlmaXJzdCBhcmd1bWVudCBpcyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgYWx0ZXJuYXRlLiBPdXRwdXQgbXVzdCBjb250YWluIG9uZQorCWhleCBvYmplY3QgaWQgcGVyIGxpbmUgKGkuZS4sIHRoZSBzYW1lIGFzIHByb2R1Y2VkIGJ5IGBnaXQgZm9yLWVhY2gtcmVmCisJLS1mb3JtYXQ9JyUob2JqZWN0bmFtZSknYCkuCisrCitOb3RlIHRoYXQgeW91IGNhbm5vdCBnZW5lcmFsbHkgcHV0IGBnaXQgZm9yLWVhY2gtcmVmYCBkaXJlY3RseSBpbnRvIHRoZSBjb25maWcKK3ZhbHVlLCBhcyBpdCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBwYXRoIGFzIGFuIGFyZ3VtZW50IChidXQgeW91IGNhbiB3cmFwCit0aGUgY29tbWFuZCBhYm92ZSBpbiBhIHNoZWxsIHNjcmlwdCkuCisKK2NvcmUuYWx0ZXJuYXRlUmVmc1ByZWZpeGVzOjoKKwlXaGVuIGxpc3RpbmcgcmVmZXJlbmNlcyBmcm9tIGFuIGFsdGVybmF0ZSwgbGlzdCBvbmx5IHJlZmVyZW5jZXMgdGhhdCBiZWdpbgorCXdpdGggdGhlIGdpdmVuIHByZWZpeC4gUHJlZml4ZXMgbWF0Y2ggYXMgaWYgdGhleSB3ZXJlIGdpdmVuIGFzIGFyZ3VtZW50cyB0bworCWxpbmtnaXQ6Z2l0LWZvci1lYWNoLXJlZlsxXS4gVG8gbGlzdCBtdWx0aXBsZSBwcmVmaXhlcywgc2VwYXJhdGUgdGhlbSB3aXRoCisJd2hpdGVzcGFjZS4gSWYgYGNvcmUuYWx0ZXJuYXRlUmVmc0NvbW1hbmRgIGlzIHNldCwgc2V0dGluZworCWBjb3JlLmFsdGVybmF0ZVJlZnNQcmVmaXhlc2AgaGFzIG5vIGVmZmVjdC4KKworY29yZS5iYXJlOjoKKwlJZiB0cnVlIHRoaXMgcmVwb3NpdG9yeSBpcyBhc3N1bWVkIHRvIGJlICdiYXJlJyBhbmQgaGFzIG5vCisJd29ya2luZyBkaXJlY3RvcnkgYXNzb2NpYXRlZCB3aXRoIGl0LiAgSWYgdGhpcyBpcyB0aGUgY2FzZSBhCisJbnVtYmVyIG9mIGNvbW1hbmRzIHRoYXQgcmVxdWlyZSBhIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYmUKKwlkaXNhYmxlZCwgc3VjaCBhcyBsaW5rZ2l0OmdpdC1hZGRbMV0gb3IgbGlua2dpdDpnaXQtbWVyZ2VbMV0uCisrCitUaGlzIHNldHRpbmcgaXMgYXV0b21hdGljYWxseSBndWVzc2VkIGJ5IGxpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yCitsaW5rZ2l0OmdpdC1pbml0WzFdIHdoZW4gdGhlIHJlcG9zaXRvcnkgd2FzIGNyZWF0ZWQuICBCeSBkZWZhdWx0IGEKK3JlcG9zaXRvcnkgdGhhdCBlbmRzIGluICIvLmdpdCIgaXMgYXNzdW1lZCB0byBiZSBub3QgYmFyZSAoYmFyZSA9CitmYWxzZSksIHdoaWxlIGFsbCBvdGhlciByZXBvc2l0b3JpZXMgYXJlIGFzc3VtZWQgdG8gYmUgYmFyZSAoYmFyZQorPSB0cnVlKS4KKworY29yZS53b3JrdHJlZTo6CisJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUuCisJSWYgYEdJVF9DT01NT05fRElSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGNvcmUud29ya3RyZWUKKwlpcyBpZ25vcmVkIGFuZCBub3QgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHJvb3Qgb2Ygd29ya2luZyB0cmVlLgorCVRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfV09SS19UUkVFYCBlbnZpcm9ubWVudAorCXZhcmlhYmxlIGFuZCB0aGUgYC0td29yay10cmVlYCBjb21tYW5kLWxpbmUgb3B0aW9uLgorCVRoZSB2YWx1ZSBjYW4gYmUgYW4gYWJzb2x1dGUgcGF0aCBvciByZWxhdGl2ZSB0byB0aGUgcGF0aCB0bworCXRoZSAuZ2l0IGRpcmVjdG9yeSwgd2hpY2ggaXMgZWl0aGVyIHNwZWNpZmllZCBieSAtLWdpdC1kaXIKKwlvciBHSVRfRElSLCBvciBhdXRvbWF0aWNhbGx5IGRpc2NvdmVyZWQuCisJSWYgLS1naXQtZGlyIG9yIEdJVF9ESVIgaXMgc3BlY2lmaWVkIGJ1dCBub25lIG9mCisJLS13b3JrLXRyZWUsIEdJVF9XT1JLX1RSRUUgYW5kIGNvcmUud29ya3RyZWUgaXMgc3BlY2lmaWVkLAorCXRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHJlZ2FyZGVkIGFzIHRoZSB0b3AgbGV2ZWwKKwlvZiB5b3VyIHdvcmtpbmcgdHJlZS4KKysKK05vdGUgdGhhdCB0aGlzIHZhcmlhYmxlIGlzIGhvbm9yZWQgZXZlbiB3aGVuIHNldCBpbiBhIGNvbmZpZ3VyYXRpb24KK2ZpbGUgaW4gYSAiLmdpdCIgc3ViZGlyZWN0b3J5IG9mIGEgZGlyZWN0b3J5IGFuZCBpdHMgdmFsdWUgZGlmZmVycworZnJvbSB0aGUgbGF0dGVyIGRpcmVjdG9yeSAoZS5nLiAiL3BhdGgvdG8vLmdpdC9jb25maWciIGhhcworY29yZS53b3JrdHJlZSBzZXQgdG8gIi9kaWZmZXJlbnQvcGF0aCIpLCB3aGljaCBpcyBtb3N0IGxpa2VseSBhCittaXNjb25maWd1cmF0aW9uLiAgUnVubmluZyBHaXQgY29tbWFuZHMgaW4gdGhlICIvcGF0aC90byIgZGlyZWN0b3J5IHdpbGwKK3N0aWxsIHVzZSAiL2RpZmZlcmVudC9wYXRoIiBhcyB0aGUgcm9vdCBvZiB0aGUgd29yayB0cmVlIGFuZCBjYW4gY2F1c2UKK2NvbmZ1c2lvbiB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIChlLmcuIHlvdSBhcmUgY3JlYXRpbmcgYQorcmVhZC1vbmx5IHNuYXBzaG90IG9mIHRoZSBzYW1lIGluZGV4IHRvIGEgbG9jYXRpb24gZGlmZmVyZW50IGZyb20gdGhlCityZXBvc2l0b3J5J3MgdXN1YWwgd29ya2luZyB0cmVlKS4KKworY29yZS5sb2dBbGxSZWZVcGRhdGVzOjoKKwlFbmFibGUgdGhlIHJlZmxvZy4gVXBkYXRlcyB0byBhIHJlZiA8cmVmPiBpcyBsb2dnZWQgdG8gdGhlIGZpbGUKKwkiYCRHSVRfRElSL2xvZ3MvPHJlZj5gIiwgYnkgYXBwZW5kaW5nIHRoZSBuZXcgYW5kIG9sZAorCVNIQS0xLCB0aGUgZGF0ZS90aW1lIGFuZCB0aGUgcmVhc29uIG9mIHRoZSB1cGRhdGUsIGJ1dAorCW9ubHkgd2hlbiB0aGUgZmlsZSBleGlzdHMuICBJZiB0aGlzIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSBpcyBzZXQgdG8gYHRydWVgLCBtaXNzaW5nICJgJEdJVF9ESVIvbG9ncy88cmVmPmAiCisJZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZm9yIGJyYW5jaCBoZWFkcyAoaS5lLiB1bmRlcgorCWByZWZzL2hlYWRzL2ApLCByZW1vdGUgcmVmcyAoaS5lLiB1bmRlciBgcmVmcy9yZW1vdGVzL2ApLAorCW5vdGUgcmVmcyAoaS5lLiB1bmRlciBgcmVmcy9ub3Rlcy9gKSwgYW5kIHRoZSBzeW1ib2xpYyByZWYgYEhFQURgLgorCUlmIGl0IGlzIHNldCB0byBgYWx3YXlzYCwgdGhlbiBhIG1pc3NpbmcgcmVmbG9nIGlzIGF1dG9tYXRpY2FsbHkKKwljcmVhdGVkIGZvciBhbnkgcmVmIHVuZGVyIGByZWZzL2AuCisrCitUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGF0IGNvbW1pdAord2FzIHRoZSB0aXAgb2YgYSBicmFuY2ggIjIgZGF5cyBhZ28iLgorKworVGhpcyB2YWx1ZSBpcyB0cnVlIGJ5IGRlZmF1bHQgaW4gYSByZXBvc2l0b3J5IHRoYXQgaGFzCithIHdvcmtpbmcgZGlyZWN0b3J5IGFzc29jaWF0ZWQgd2l0aCBpdCwgYW5kIGZhbHNlIGJ5CitkZWZhdWx0IGluIGEgYmFyZSByZXBvc2l0b3J5LgorCitjb3JlLnJlcG9zaXRvcnlGb3JtYXRWZXJzaW9uOjoKKwlJbnRlcm5hbCB2YXJpYWJsZSBpZGVudGlmeWluZyB0aGUgcmVwb3NpdG9yeSBmb3JtYXQgYW5kIGxheW91dAorCXZlcnNpb24uCisKK2NvcmUuc2hhcmVkUmVwb3NpdG9yeTo6CisJV2hlbiAnZ3JvdXAnIChvciAndHJ1ZScpLCB0aGUgcmVwb3NpdG9yeSBpcyBtYWRlIHNoYXJlYWJsZSBiZXR3ZWVuCisJc2V2ZXJhbCB1c2VycyBpbiBhIGdyb3VwIChtYWtpbmcgc3VyZSBhbGwgdGhlIGZpbGVzIGFuZCBvYmplY3RzIGFyZQorCWdyb3VwLXdyaXRhYmxlKS4gV2hlbiAnYWxsJyAob3IgJ3dvcmxkJyBvciAnZXZlcnlib2R5JyksIHRoZQorCXJlcG9zaXRvcnkgd2lsbCBiZSByZWFkYWJsZSBieSBhbGwgdXNlcnMsIGFkZGl0aW9uYWxseSB0byBiZWluZworCWdyb3VwLXNoYXJlYWJsZS4gV2hlbiAndW1hc2snIChvciAnZmFsc2UnKSwgR2l0IHdpbGwgdXNlIHBlcm1pc3Npb25zCisJcmVwb3J0ZWQgYnkgdW1hc2soMikuIFdoZW4gJzB4eHgnLCB3aGVyZSAnMHh4eCcgaXMgYW4gb2N0YWwgbnVtYmVyLAorCWZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHdpbGwgaGF2ZSB0aGlzIG1vZGUgdmFsdWUuICcweHh4JyB3aWxsIG92ZXJyaWRlCisJdXNlcidzIHVtYXNrIHZhbHVlICh3aGVyZWFzIHRoZSBvdGhlciBvcHRpb25zIHdpbGwgb25seSBvdmVycmlkZQorCXJlcXVlc3RlZCBwYXJ0cyBvZiB0aGUgdXNlcidzIHVtYXNrIHZhbHVlKS4gRXhhbXBsZXM6ICcwNjYwJyB3aWxsIG1ha2UKKwl0aGUgcmVwbyByZWFkL3dyaXRlLWFibGUgZm9yIHRoZSBvd25lciBhbmQgZ3JvdXAsIGJ1dCBpbmFjY2Vzc2libGUgdG8KKwlvdGhlcnMgKGVxdWl2YWxlbnQgdG8gJ2dyb3VwJyB1bmxlc3MgdW1hc2sgaXMgZS5nLiAnMDAyMicpLiAnMDY0MCcgaXMgYQorCXJlcG9zaXRvcnkgdGhhdCBpcyBncm91cC1yZWFkYWJsZSBidXQgbm90IGdyb3VwLXdyaXRhYmxlLgorCVNlZSBsaW5rZ2l0OmdpdC1pbml0WzFdLiBGYWxzZSBieSBkZWZhdWx0LgorCitjb3JlLndhcm5BbWJpZ3VvdXNSZWZzOjoKKwlJZiB0cnVlLCBHaXQgd2lsbCB3YXJuIHlvdSBpZiB0aGUgcmVmIG5hbWUgeW91IHBhc3NlZCBpdCBpcyBhbWJpZ3VvdXMKKwlhbmQgbWlnaHQgbWF0Y2ggbXVsdGlwbGUgcmVmcyBpbiB0aGUgcmVwb3NpdG9yeS4gVHJ1ZSBieSBkZWZhdWx0LgorCitjb3JlLmNvbXByZXNzaW9uOjoKKwlBbiBpbnRlZ2VyIC0xLi45LCBpbmRpY2F0aW5nIGEgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbC4KKwktMSBpcyB0aGUgemxpYiBkZWZhdWx0LiAwIG1lYW5zIG5vIGNvbXByZXNzaW9uLAorCWFuZCAxLi45IGFyZSB2YXJpb3VzIHNwZWVkL3NpemUgdHJhZGVvZmZzLCA5IGJlaW5nIHNsb3dlc3QuCisJSWYgc2V0LCB0aGlzIHByb3ZpZGVzIGEgZGVmYXVsdCB0byBvdGhlciBjb21wcmVzc2lvbiB2YXJpYWJsZXMsCisJc3VjaCBhcyBgY29yZS5sb29zZUNvbXByZXNzaW9uYCBhbmQgYHBhY2suY29tcHJlc3Npb25gLgorCitjb3JlLmxvb3NlQ29tcHJlc3Npb246OgorCUFuIGludGVnZXIgLTEuLjksIGluZGljYXRpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsIGZvciBvYmplY3RzIHRoYXQKKwlhcmUgbm90IGluIGEgcGFjayBmaWxlLiAtMSBpcyB0aGUgemxpYiBkZWZhdWx0LiAwIG1lYW5zIG5vCisJY29tcHJlc3Npb24sIGFuZCAxLi45IGFyZSB2YXJpb3VzIHNwZWVkL3NpemUgdHJhZGVvZmZzLCA5IGJlaW5nCisJc2xvd2VzdC4gIElmIG5vdCBzZXQsICBkZWZhdWx0cyB0byBjb3JlLmNvbXByZXNzaW9uLiAgSWYgdGhhdCBpcworCW5vdCBzZXQsICBkZWZhdWx0cyB0byAxIChiZXN0IHNwZWVkKS4KKworY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplOjoKKwlOdW1iZXIgb2YgYnl0ZXMgb2YgYSBwYWNrIGZpbGUgdG8gbWFwIGludG8gbWVtb3J5IGluIGEKKwlzaW5nbGUgbWFwcGluZyBvcGVyYXRpb24uICBMYXJnZXIgd2luZG93IHNpemVzIG1heSBhbGxvdworCXlvdXIgc3lzdGVtIHRvIHByb2Nlc3MgYSBzbWFsbGVyIG51bWJlciBvZiBsYXJnZSBwYWNrIGZpbGVzCisJbW9yZSBxdWlja2x5LiAgU21hbGxlciB3aW5kb3cgc2l6ZXMgd2lsbCBuZWdhdGl2ZWx5IGFmZmVjdAorCXBlcmZvcm1hbmNlIGR1ZSB0byBpbmNyZWFzZWQgY2FsbHMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0ncworCW1lbW9yeSBtYW5hZ2VyLCBidXQgbWF5IGltcHJvdmUgcGVyZm9ybWFuY2Ugd2hlbiBhY2Nlc3NpbmcKKwlhIGxhcmdlIG51bWJlciBvZiBsYXJnZSBwYWNrIGZpbGVzLgorKworRGVmYXVsdCBpcyAxIE1pQiBpZiBOT19NTUFQIHdhcyBzZXQgYXQgY29tcGlsZSB0aW1lLCBvdGhlcndpc2UgMzIKK01pQiBvbiAzMiBiaXQgcGxhdGZvcm1zIGFuZCAxIEdpQiBvbiA2NCBiaXQgcGxhdGZvcm1zLiAgVGhpcyBzaG91bGQKK2JlIHJlYXNvbmFibGUgZm9yIGFsbCB1c2Vycy9vcGVyYXRpbmcgc3lzdGVtcy4gIFlvdSBwcm9iYWJseSBkbworbm90IG5lZWQgdG8gYWRqdXN0IHRoaXMgdmFsdWUuCisrCitDb21tb24gdW5pdCBzdWZmaXhlcyBvZiAnaycsICdtJywgb3IgJ2cnIGFyZSBzdXBwb3J0ZWQuCisKK2NvcmUucGFja2VkR2l0TGltaXQ6OgorCU1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIG1hcCBzaW11bHRhbmVvdXNseSBpbnRvIG1lbW9yeQorCWZyb20gcGFjayBmaWxlcy4gIElmIEdpdCBuZWVkcyB0byBhY2Nlc3MgbW9yZSB0aGFuIHRoaXMgbWFueQorCWJ5dGVzIGF0IG9uY2UgdG8gY29tcGxldGUgYW4gb3BlcmF0aW9uIGl0IHdpbGwgdW5tYXAgZXhpc3RpbmcKKwlyZWdpb25zIHRvIHJlY2xhaW0gdmlydHVhbCBhZGRyZXNzIHNwYWNlIHdpdGhpbiB0aGUgcHJvY2Vzcy4KKysKK0RlZmF1bHQgaXMgMjU2IE1pQiBvbiAzMiBiaXQgcGxhdGZvcm1zIGFuZCAzMiBUaUIgKGVmZmVjdGl2ZWx5Cit1bmxpbWl0ZWQpIG9uIDY0IGJpdCBwbGF0Zm9ybXMuCitUaGlzIHNob3VsZCBiZSByZWFzb25hYmxlIGZvciBhbGwgdXNlcnMvb3BlcmF0aW5nIHN5c3RlbXMsIGV4Y2VwdCBvbgordGhlIGxhcmdlc3QgcHJvamVjdHMuICBZb3UgcHJvYmFibHkgZG8gbm90IG5lZWQgdG8gYWRqdXN0IHRoaXMgdmFsdWUuCisrCitDb21tb24gdW5pdCBzdWZmaXhlcyBvZiAnaycsICdtJywgb3IgJ2cnIGFyZSBzdXBwb3J0ZWQuCisKK2NvcmUuZGVsdGFCYXNlQ2FjaGVMaW1pdDo6CisJTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVzZXJ2ZSBmb3IgY2FjaGluZyBiYXNlIG9iamVjdHMKKwl0aGF0IG1heSBiZSByZWZlcmVuY2VkIGJ5IG11bHRpcGxlIGRlbHRpZmllZCBvYmplY3RzLiAgQnkgc3RvcmluZyB0aGUKKwllbnRpcmUgZGVjb21wcmVzc2VkIGJhc2Ugb2JqZWN0cyBpbiBhIGNhY2hlIEdpdCBpcyBhYmxlCisJdG8gYXZvaWQgdW5wYWNraW5nIGFuZCBkZWNvbXByZXNzaW5nIGZyZXF1ZW50bHkgdXNlZCBiYXNlCisJb2JqZWN0cyBtdWx0aXBsZSB0aW1lcy4KKysKK0RlZmF1bHQgaXMgOTYgTWlCIG9uIGFsbCBwbGF0Zm9ybXMuICBUaGlzIHNob3VsZCBiZSByZWFzb25hYmxlCitmb3IgYWxsIHVzZXJzL29wZXJhdGluZyBzeXN0ZW1zLCBleGNlcHQgb24gdGhlIGxhcmdlc3QgcHJvamVjdHMuCitZb3UgcHJvYmFibHkgZG8gbm90IG5lZWQgdG8gYWRqdXN0IHRoaXMgdmFsdWUuCisrCitDb21tb24gdW5pdCBzdWZmaXhlcyBvZiAnaycsICdtJywgb3IgJ2cnIGFyZSBzdXBwb3J0ZWQuCisKK2NvcmUuYmlnRmlsZVRocmVzaG9sZDo6CisJRmlsZXMgbGFyZ2VyIHRoYW4gdGhpcyBzaXplIGFyZSBzdG9yZWQgZGVmbGF0ZWQsIHdpdGhvdXQKKwlhdHRlbXB0aW5nIGRlbHRhIGNvbXByZXNzaW9uLiAgU3RvcmluZyBsYXJnZSBmaWxlcyB3aXRob3V0CisJZGVsdGEgY29tcHJlc3Npb24gYXZvaWRzIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UsIGF0IHRoZQorCXNsaWdodCBleHBlbnNlIG9mIGluY3JlYXNlZCBkaXNrIHVzYWdlLiBBZGRpdGlvbmFsbHkgZmlsZXMKKwlsYXJnZXIgdGhhbiB0aGlzIHNpemUgYXJlIGFsd2F5cyB0cmVhdGVkIGFzIGJpbmFyeS4KKysKK0RlZmF1bHQgaXMgNTEyIE1pQiBvbiBhbGwgcGxhdGZvcm1zLiAgVGhpcyBzaG91bGQgYmUgcmVhc29uYWJsZQorZm9yIG1vc3QgcHJvamVjdHMgYXMgc291cmNlIGNvZGUgYW5kIG90aGVyIHRleHQgZmlsZXMgY2FuIHN0aWxsCitiZSBkZWx0YSBjb21wcmVzc2VkLCBidXQgbGFyZ2VyIGJpbmFyeSBtZWRpYSBmaWxlcyB3b24ndCBiZS4KKysKK0NvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlIHN1cHBvcnRlZC4KKworY29yZS5leGNsdWRlc0ZpbGU6OgorCVNwZWNpZmllcyB0aGUgcGF0aG5hbWUgdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyBwYXR0ZXJucyB0bworCWRlc2NyaWJlIHBhdGhzIHRoYXQgYXJlIG5vdCBtZWFudCB0byBiZSB0cmFja2VkLCBpbiBhZGRpdGlvbgorCXRvIGAuZ2l0aWdub3JlYCAocGVyLWRpcmVjdG9yeSkgYW5kIGAuZ2l0L2luZm8vZXhjbHVkZWAuCisJRGVmYXVsdHMgdG8gYCRYREdfQ09ORklHX0hPTUUvZ2l0L2lnbm9yZWAuCisJSWYgYCRYREdfQ09ORklHX0hPTUVgIGlzIGVpdGhlciBub3Qgc2V0IG9yIGVtcHR5LCBgJEhPTUUvLmNvbmZpZy9naXQvaWdub3JlYAorCWlzIHVzZWQgaW5zdGVhZC4gU2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdLgorCitjb3JlLmFza1Bhc3M6OgorCVNvbWUgY29tbWFuZHMgKGUuZy4gc3ZuIGFuZCBodHRwIGludGVyZmFjZXMpIHRoYXQgaW50ZXJhY3RpdmVseQorCWFzayBmb3IgYSBwYXNzd29yZCBjYW4gYmUgdG9sZCB0byB1c2UgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBnaXZlbgorCXZpYSB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZS4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfQVNLUEFTU2AKKwllbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgbm90IHNldCwgZmFsbCBiYWNrIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKwlgU1NIX0FTS1BBU1NgIGVudmlyb25tZW50IHZhcmlhYmxlIG9yLCBmYWlsaW5nIHRoYXQsIGEgc2ltcGxlIHBhc3N3b3JkCisJcHJvbXB0LiBUaGUgZXh0ZXJuYWwgcHJvZ3JhbSBzaGFsbCBiZSBnaXZlbiBhIHN1aXRhYmxlIHByb21wdCBhcworCWNvbW1hbmQtbGluZSBhcmd1bWVudCBhbmQgd3JpdGUgdGhlIHBhc3N3b3JkIG9uIGl0cyBTVERPVVQuCisKK2NvcmUuYXR0cmlidXRlc0ZpbGU6OgorCUluIGFkZGl0aW9uIHRvIGAuZ2l0YXR0cmlidXRlc2AgKHBlci1kaXJlY3RvcnkpIGFuZAorCWAuZ2l0L2luZm8vYXR0cmlidXRlc2AsIEdpdCBsb29rcyBpbnRvIHRoaXMgZmlsZSBmb3IgYXR0cmlidXRlcworCShzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4gUGF0aCBleHBhbnNpb25zIGFyZSBtYWRlIHRoZSBzYW1lCisJd2F5IGFzIGZvciBgY29yZS5leGNsdWRlc0ZpbGVgLiBJdHMgZGVmYXVsdCB2YWx1ZSBpcworCWAkWERHX0NPTkZJR19IT01FL2dpdC9hdHRyaWJ1dGVzYC4gSWYgYCRYREdfQ09ORklHX0hPTUVgIGlzIGVpdGhlciBub3QKKwlzZXQgb3IgZW1wdHksIGAkSE9NRS8uY29uZmlnL2dpdC9hdHRyaWJ1dGVzYCBpcyB1c2VkIGluc3RlYWQuCisKK2NvcmUuaG9va3NQYXRoOjoKKwlCeSBkZWZhdWx0IEdpdCB3aWxsIGxvb2sgZm9yIHlvdXIgaG9va3MgaW4gdGhlCisJYCRHSVRfRElSL2hvb2tzYCBkaXJlY3RvcnkuIFNldCB0aGlzIHRvIGRpZmZlcmVudCBwYXRoLAorCWUuZy4gYC9ldGMvZ2l0L2hvb2tzYCwgYW5kIEdpdCB3aWxsIHRyeSB0byBmaW5kIHlvdXIgaG9va3MgaW4KKwl0aGF0IGRpcmVjdG9yeSwgZS5nLiBgL2V0Yy9naXQvaG9va3MvcHJlLXJlY2VpdmVgIGluc3RlYWQgb2YKKwlpbiBgJEdJVF9ESVIvaG9va3MvcHJlLXJlY2VpdmVgLgorKworVGhlIHBhdGggY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZS4gQSByZWxhdGl2ZSBwYXRoIGlzCit0YWtlbiBhcyByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBob29rcyBhcmUgcnVuIChzZWUKK3RoZSAiREVTQ1JJUFRJT04iIHNlY3Rpb24gb2YgbGlua2dpdDpnaXRob29rc1s1XSkuCisrCitUaGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgdXNlZnVsIGluIGNhc2VzIHdoZXJlIHlvdSdkIGxpa2UgdG8KK2NlbnRyYWxseSBjb25maWd1cmUgeW91ciBHaXQgaG9va3MgaW5zdGVhZCBvZiBjb25maWd1cmluZyB0aGVtIG9uIGEKK3Blci1yZXBvc2l0b3J5IGJhc2lzLCBvciBhcyBhIG1vcmUgZmxleGlibGUgYW5kIGNlbnRyYWxpemVkCithbHRlcm5hdGl2ZSB0byBoYXZpbmcgYW4gYGluaXQudGVtcGxhdGVEaXJgIHdoZXJlIHlvdSd2ZSBjaGFuZ2VkCitkZWZhdWx0IGhvb2tzLgorCitjb3JlLmVkaXRvcjo6CisJQ29tbWFuZHMgc3VjaCBhcyBgY29tbWl0YCBhbmQgYHRhZ2AgdGhhdCBsZXQgeW91IGVkaXQKKwltZXNzYWdlcyBieSBsYXVuY2hpbmcgYW4gZWRpdG9yIHVzZSB0aGUgdmFsdWUgb2YgdGhpcworCXZhcmlhYmxlIHdoZW4gaXQgaXMgc2V0LCBhbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisJYEdJVF9FRElUT1JgIGlzIG5vdCBzZXQuICBTZWUgbGlua2dpdDpnaXQtdmFyWzFdLgorCitjb3JlLmNvbW1lbnRDaGFyOjoKKwlDb21tYW5kcyBzdWNoIGFzIGBjb21taXRgIGFuZCBgdGFnYCB0aGF0IGxldCB5b3UgZWRpdAorCW1lc3NhZ2VzIGNvbnNpZGVyIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoaXMgY2hhcmFjdGVyCisJY29tbWVudGVkLCBhbmQgcmVtb3ZlcyB0aGVtIGFmdGVyIHRoZSBlZGl0b3IgcmV0dXJucworCShkZWZhdWx0ICcjJykuCisrCitJZiBzZXQgdG8gImF1dG8iLCBgZ2l0LWNvbW1pdGAgd291bGQgc2VsZWN0IGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90Cit0aGUgYmVnaW5uaW5nIGNoYXJhY3RlciBvZiBhbnkgbGluZSBpbiBleGlzdGluZyBjb21taXQgbWVzc2FnZXMuCisKK2NvcmUuZmlsZXNSZWZMb2NrVGltZW91dDo6CisJVGhlIGxlbmd0aCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIHJldHJ5IHdoZW4gdHJ5aW5nIHRvCisJbG9jayBhbiBpbmRpdmlkdWFsIHJlZmVyZW5jZS4gVmFsdWUgMCBtZWFucyBub3QgdG8gcmV0cnkgYXQKKwlhbGw7IC0xIG1lYW5zIHRvIHRyeSBpbmRlZmluaXRlbHkuIERlZmF1bHQgaXMgMTAwIChpLmUuLAorCXJldHJ5IGZvciAxMDBtcykuCisKK2NvcmUucGFja2VkUmVmc1RpbWVvdXQ6OgorCVRoZSBsZW5ndGggb2YgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byByZXRyeSB3aGVuIHRyeWluZyB0bworCWxvY2sgdGhlIGBwYWNrZWQtcmVmc2AgZmlsZS4gVmFsdWUgMCBtZWFucyBub3QgdG8gcmV0cnkgYXQKKwlhbGw7IC0xIG1lYW5zIHRvIHRyeSBpbmRlZmluaXRlbHkuIERlZmF1bHQgaXMgMTAwMCAoaS5lLiwKKwlyZXRyeSBmb3IgMSBzZWNvbmQpLgorCitjb3JlLnBhZ2VyOjoKKwlUZXh0IHZpZXdlciBmb3IgdXNlIGJ5IEdpdCBjb21tYW5kcyAoZS5nLiwgJ2xlc3MnKS4gIFRoZSB2YWx1ZQorCWlzIG1lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbC4gIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlCisJaXMgdGhlIGAkR0lUX1BBR0VSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBgY29yZS5wYWdlcmAKKwljb25maWd1cmF0aW9uLCB0aGVuIGAkUEFHRVJgLCBhbmQgdGhlbiB0aGUgZGVmYXVsdCBjaG9zZW4gYXQKKwljb21waWxlIHRpbWUgKHVzdWFsbHkgJ2xlc3MnKS4KKysKK1doZW4gdGhlIGBMRVNTYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bnNldCwgR2l0IHNldHMgaXQgdG8gYEZSWGAKKyhpZiBgTEVTU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBHaXQgZG9lcyBub3QgY2hhbmdlIGl0IGF0CithbGwpLiAgSWYgeW91IHdhbnQgdG8gc2VsZWN0aXZlbHkgb3ZlcnJpZGUgR2l0J3MgZGVmYXVsdCBzZXR0aW5nCitmb3IgYExFU1NgLCB5b3UgY2FuIHNldCBgY29yZS5wYWdlcmAgdG8gZS5nLiBgbGVzcyAtU2AuICBUaGlzIHdpbGwKK2JlIHBhc3NlZCB0byB0aGUgc2hlbGwgYnkgR2l0LCB3aGljaCB3aWxsIHRyYW5zbGF0ZSB0aGUgZmluYWwKK2NvbW1hbmQgdG8gYExFU1M9RlJYIGxlc3MgLVNgLiBUaGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc2V0IHRoZQorYFNgIG9wdGlvbiBidXQgdGhlIGNvbW1hbmQgbGluZSBkb2VzLCBpbnN0cnVjdGluZyBsZXNzIHRvIHRydW5jYXRlCitsb25nIGxpbmVzLiBTaW1pbGFybHksIHNldHRpbmcgYGNvcmUucGFnZXJgIHRvIGBsZXNzIC0rRmAgd2lsbAorZGVhY3RpdmF0ZSB0aGUgYEZgIG9wdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50IGZyb20gdGhlCitjb21tYW5kLWxpbmUsIGRlYWN0aXZhdGluZyB0aGUgInF1aXQgaWYgb25lIHNjcmVlbiIgYmVoYXZpb3Igb2YKK2BsZXNzYC4gIE9uZSBjYW4gc3BlY2lmaWNhbGx5IGFjdGl2YXRlIHNvbWUgZmxhZ3MgZm9yIHBhcnRpY3VsYXIKK2NvbW1hbmRzOiBmb3IgZXhhbXBsZSwgc2V0dGluZyBgcGFnZXIuYmxhbWVgIHRvIGBsZXNzIC1TYCBlbmFibGVzCitsaW5lIHRydW5jYXRpb24gb25seSBmb3IgYGdpdCBibGFtZWAuCisrCitMaWtld2lzZSwgd2hlbiB0aGUgYExWYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bnNldCwgR2l0IHNldHMgaXQKK3RvIGAtY2AuICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgc2V0dGluZyBieSBleHBvcnRpbmcgYExWYCB3aXRoCithbm90aGVyIHZhbHVlIG9yIHNldHRpbmcgYGNvcmUucGFnZXJgIHRvIGBsdiArY2AuCisKK2NvcmUud2hpdGVzcGFjZTo6CisJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBjb21tb24gd2hpdGVzcGFjZSBwcm9ibGVtcyB0bworCW5vdGljZS4gICdnaXQgZGlmZicgd2lsbCB1c2UgYGNvbG9yLmRpZmYud2hpdGVzcGFjZWAgdG8KKwloaWdobGlnaHQgdGhlbSwgYW5kICdnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWVycm9yJyB3aWxsCisJY29uc2lkZXIgdGhlbSBhcyBlcnJvcnMuICBZb3UgY2FuIHByZWZpeCBgLWAgdG8gZGlzYWJsZQorCWFueSBvZiB0aGVtIChlLmcuIGAtdHJhaWxpbmctc3BhY2VgKToKKysKKyogYGJsYW5rLWF0LWVvbGAgdHJlYXRzIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUKKyAgYXMgYW4gZXJyb3IgKGVuYWJsZWQgYnkgZGVmYXVsdCkuCisqIGBzcGFjZS1iZWZvcmUtdGFiYCB0cmVhdHMgYSBzcGFjZSBjaGFyYWN0ZXIgdGhhdCBhcHBlYXJzIGltbWVkaWF0ZWx5CisgIGJlZm9yZSBhIHRhYiBjaGFyYWN0ZXIgaW4gdGhlIGluaXRpYWwgaW5kZW50IHBhcnQgb2YgdGhlIGxpbmUgYXMgYW4KKyAgZXJyb3IgKGVuYWJsZWQgYnkgZGVmYXVsdCkuCisqIGBpbmRlbnQtd2l0aC1ub24tdGFiYCB0cmVhdHMgYSBsaW5lIHRoYXQgaXMgaW5kZW50ZWQgd2l0aCBzcGFjZQorICBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgdGhlIGVxdWl2YWxlbnQgdGFicyBhcyBhbiBlcnJvciAobm90IGVuYWJsZWQgYnkKKyAgZGVmYXVsdCkuCisqIGB0YWItaW4taW5kZW50YCB0cmVhdHMgYSB0YWIgY2hhcmFjdGVyIGluIHRoZSBpbml0aWFsIGluZGVudCBwYXJ0IG9mCisgIHRoZSBsaW5lIGFzIGFuIGVycm9yIChub3QgZW5hYmxlZCBieSBkZWZhdWx0KS4KKyogYGJsYW5rLWF0LWVvZmAgdHJlYXRzIGJsYW5rIGxpbmVzIGFkZGVkIGF0IHRoZSBlbmQgb2YgZmlsZSBhcyBhbiBlcnJvcgorICAoZW5hYmxlZCBieSBkZWZhdWx0KS4KKyogYHRyYWlsaW5nLXNwYWNlYCBpcyBhIHNob3J0LWhhbmQgdG8gY292ZXIgYm90aCBgYmxhbmstYXQtZW9sYCBhbmQKKyAgYGJsYW5rLWF0LWVvZmAuCisqIGBjci1hdC1lb2xgIHRyZWF0cyBhIGNhcnJpYWdlLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUgYXMKKyAgcGFydCBvZiB0aGUgbGluZSB0ZXJtaW5hdG9yLCBpLmUuIHdpdGggaXQsIGB0cmFpbGluZy1zcGFjZWAKKyAgZG9lcyBub3QgdHJpZ2dlciBpZiB0aGUgY2hhcmFjdGVyIGJlZm9yZSBzdWNoIGEgY2FycmlhZ2UtcmV0dXJuCisgIGlzIG5vdCBhIHdoaXRlc3BhY2UgKG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQpLgorKiBgdGFid2lkdGg9PG4+YCB0ZWxscyBob3cgbWFueSBjaGFyYWN0ZXIgcG9zaXRpb25zIGEgdGFiIG9jY3VwaWVzOyB0aGlzCisgIGlzIHJlbGV2YW50IGZvciBgaW5kZW50LXdpdGgtbm9uLXRhYmAgYW5kIHdoZW4gR2l0IGZpeGVzIGB0YWItaW4taW5kZW50YAorICBlcnJvcnMuIFRoZSBkZWZhdWx0IHRhYiB3aWR0aCBpcyA4LiBBbGxvd2VkIHZhbHVlcyBhcmUgMSB0byA2My4KKworY29yZS5mc3luY09iamVjdEZpbGVzOjoKKwlUaGlzIGJvb2xlYW4gd2lsbCBlbmFibGUgJ2ZzeW5jKCknIHdoZW4gd3JpdGluZyBvYmplY3QgZmlsZXMuCisrCitUaGlzIGlzIGEgdG90YWwgd2FzdGUgb2YgdGltZSBhbmQgZWZmb3J0IG9uIGEgZmlsZXN5c3RlbSB0aGF0IG9yZGVycworZGF0YSB3cml0ZXMgcHJvcGVybHksIGJ1dCBjYW4gYmUgdXNlZnVsIGZvciBmaWxlc3lzdGVtcyB0aGF0IGRvIG5vdCB1c2UKK2pvdXJuYWxsaW5nICh0cmFkaXRpb25hbCBVTklYIGZpbGVzeXN0ZW1zKSBvciB0aGF0IG9ubHkgam91cm5hbCBtZXRhZGF0YQorYW5kIG5vdCBmaWxlIGNvbnRlbnRzIChPUyBYJ3MgSEZTKywgb3IgTGludXggZXh0MyB3aXRoICJkYXRhPXdyaXRlYmFjayIpLgorCitjb3JlLnByZWxvYWRJbmRleDo6CisJRW5hYmxlIHBhcmFsbGVsIGluZGV4IHByZWxvYWQgZm9yIG9wZXJhdGlvbnMgbGlrZSAnZ2l0IGRpZmYnCisrCitUaGlzIGNhbiBzcGVlZCB1cCBvcGVyYXRpb25zIGxpa2UgJ2dpdCBkaWZmJyBhbmQgJ2dpdCBzdGF0dXMnIGVzcGVjaWFsbHkKK29uIGZpbGVzeXN0ZW1zIGxpa2UgTkZTIHRoYXQgaGF2ZSB3ZWFrIGNhY2hpbmcgc2VtYW50aWNzIGFuZCB0aHVzCityZWxhdGl2ZWx5IGhpZ2ggSU8gbGF0ZW5jaWVzLiAgV2hlbiBlbmFibGVkLCBHaXQgd2lsbCBkbyB0aGUKK2luZGV4IGNvbXBhcmlzb24gdG8gdGhlIGZpbGVzeXN0ZW0gZGF0YSBpbiBwYXJhbGxlbCwgYWxsb3dpbmcKK292ZXJsYXBwaW5nIElPJ3MuICBEZWZhdWx0cyB0byB0cnVlLgorCitjb3JlLnVuc2V0ZW52dmFyczo6CisJV2luZG93cy1vbmx5OiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMnCisJbmFtZXMgdGhhdCBuZWVkIHRvIGJlIHVuc2V0IGJlZm9yZSBzcGF3bmluZyBhbnkgb3RoZXIgcHJvY2Vzcy4KKwlEZWZhdWx0cyB0byBgUEVSTDVMSUJgIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQgR2l0IGZvcgorCVdpbmRvd3MgaW5zaXN0cyBvbiB1c2luZyBpdHMgb3duIFBlcmwgaW50ZXJwcmV0ZXIuCisKK2NvcmUucmVzdHJpY3Rpbmhlcml0ZWRoYW5kbGVzOjoKKwlXaW5kb3dzLW9ubHk6IG92ZXJyaWRlIHdoZXRoZXIgc3Bhd25lZCBwcm9jZXNzZXMgaW5oZXJpdCBvbmx5IHN0YW5kYXJkCisJZmlsZSBoYW5kbGVzIChgc3RkaW5gLCBgc3Rkb3V0YCBhbmQgYHN0ZGVycmApIG9yIGFsbCBoYW5kbGVzLiBDYW4gYmUKKwlgYXV0b2AsIGB0cnVlYCBvciBgZmFsc2VgLiBEZWZhdWx0cyB0byBgYXV0b2AsIHdoaWNoIG1lYW5zIGB0cnVlYCBvbgorCVdpbmRvd3MgNyBhbmQgbGF0ZXIsIGFuZCBgZmFsc2VgIG9uIG9sZGVyIFdpbmRvd3MgdmVyc2lvbnMuCisKK2NvcmUuY3JlYXRlT2JqZWN0OjoKKwlZb3UgY2FuIHNldCB0aGlzIHRvICdsaW5rJywgaW4gd2hpY2ggY2FzZSBhIGhhcmRsaW5rIGZvbGxvd2VkIGJ5CisJYSBkZWxldGUgb2YgdGhlIHNvdXJjZSBhcmUgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCBvYmplY3QgY3JlYXRpb24KKwl3aWxsIG5vdCBvdmVyd3JpdGUgZXhpc3Rpbmcgb2JqZWN0cy4KKysKK09uIHNvbWUgZmlsZSBzeXN0ZW0vb3BlcmF0aW5nIHN5c3RlbSBjb21iaW5hdGlvbnMsIHRoaXMgaXMgdW5yZWxpYWJsZS4KK1NldCB0aGlzIGNvbmZpZyBzZXR0aW5nIHRvICdyZW5hbWUnIHRoZXJlOyBIb3dldmVyLCBUaGlzIHdpbGwgcmVtb3ZlIHRoZQorY2hlY2sgdGhhdCBtYWtlcyBzdXJlIHRoYXQgZXhpc3Rpbmcgb2JqZWN0IGZpbGVzIHdpbGwgbm90IGdldCBvdmVyd3JpdHRlbi4KKworY29yZS5ub3Rlc1JlZjo6CisJV2hlbiBzaG93aW5nIGNvbW1pdCBtZXNzYWdlcywgYWxzbyBzaG93IG5vdGVzIHdoaWNoIGFyZSBzdG9yZWQgaW4KKwl0aGUgZ2l2ZW4gcmVmLiAgVGhlIHJlZiBtdXN0IGJlIGZ1bGx5IHF1YWxpZmllZC4gIElmIHRoZSBnaXZlbgorCXJlZiBkb2VzIG5vdCBleGlzdCwgaXQgaXMgbm90IGFuIGVycm9yIGJ1dCBtZWFucyB0aGF0IG5vCisJbm90ZXMgc2hvdWxkIGJlIHByaW50ZWQuCisrCitUaGlzIHNldHRpbmcgZGVmYXVsdHMgdG8gInJlZnMvbm90ZXMvY29tbWl0cyIsIGFuZCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBieQordGhlIGBHSVRfTk9URVNfUkVGYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXS4KKworY29yZS5jb21taXRHcmFwaDo6CisJSWYgdHJ1ZSwgdGhlbiBnaXQgd2lsbCByZWFkIHRoZSBjb21taXQtZ3JhcGggZmlsZSAoaWYgaXQgZXhpc3RzKQorCXRvIHBhcnNlIHRoZSBncmFwaCBzdHJ1Y3R1cmUgb2YgY29tbWl0cy4gRGVmYXVsdHMgdG8gdHJ1ZS4gU2VlCisJbGlua2dpdDpnaXQtY29tbWl0LWdyYXBoWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb3JlLnVzZVJlcGxhY2VSZWZzOjoKKwlJZiBzZXQgdG8gYGZhbHNlYCwgYmVoYXZlIGFzIGlmIHRoZSBgLS1uby1yZXBsYWNlLW9iamVjdHNgCisJb3B0aW9uIHdhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiBTZWUgbGlua2dpdDpnaXRbMV0gYW5kCisJbGlua2dpdDpnaXQtcmVwbGFjZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29yZS5tdWx0aVBhY2tJbmRleDo6CisJVXNlIHRoZSBtdWx0aS1wYWNrLWluZGV4IGZpbGUgdG8gdHJhY2sgbXVsdGlwbGUgcGFja2ZpbGVzIHVzaW5nIGEKKwlzaW5nbGUgaW5kZXguIFNlZSBsaW5rOnRlY2huaWNhbC9tdWx0aS1wYWNrLWluZGV4Lmh0bWxbdGhlCisJbXVsdGktcGFjay1pbmRleCBkZXNpZ24gZG9jdW1lbnRdLgorCitjb3JlLnNwYXJzZUNoZWNrb3V0OjoKKwlFbmFibGUgInNwYXJzZSBjaGVja291dCIgZmVhdHVyZS4gU2VlIGxpbmtnaXQ6Z2l0LXNwYXJzZS1jaGVja291dFsxXQorCWZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb3JlLnNwYXJzZUNoZWNrb3V0Q29uZTo6CisJRW5hYmxlcyB0aGUgImNvbmUgbW9kZSIgb2YgdGhlIHNwYXJzZSBjaGVja291dCBmZWF0dXJlLiBXaGVuIHRoZQorCXNwYXJzZS1jaGVja291dCBmaWxlIGNvbnRhaW5zIGEgbGltaXRlZCBzZXQgb2YgcGF0dGVybnMsIHRoZW4gdGhpcworCW1vZGUgcHJvdmlkZXMgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYWR2YW50YWdlcy4gU2VlCisJbGlua2dpdDpnaXQtc3BhcnNlLWNoZWNrb3V0WzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb3JlLmFiYnJldjo6CisJU2V0IHRoZSBsZW5ndGggb2JqZWN0IG5hbWVzIGFyZSBhYmJyZXZpYXRlZCB0by4gIElmCisJdW5zcGVjaWZpZWQgb3Igc2V0IHRvICJhdXRvIiwgYW4gYXBwcm9wcmlhdGUgdmFsdWUgaXMKKwljb21wdXRlZCBiYXNlZCBvbiB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzCisJaW4geW91ciByZXBvc2l0b3J5LCB3aGljaCBob3BlZnVsbHkgaXMgZW5vdWdoIGZvcgorCWFiYnJldmlhdGVkIG9iamVjdCBuYW1lcyB0byBzdGF5IHVuaXF1ZSBmb3Igc29tZSB0aW1lLgorCVRoZSBtaW5pbXVtIGxlbmd0aCBpcyA0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvY3JlZGVudGlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jcmVkZW50aWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGZiMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvY3JlZGVudGlhbC50eHQKQEAgLTAsMCArMSwyNiBAQAorY3JlZGVudGlhbC5oZWxwZXI6OgorCVNwZWNpZnkgYW4gZXh0ZXJuYWwgaGVscGVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgdXNlcm5hbWUgb3IKKwlwYXNzd29yZCBjcmVkZW50aWFsIGlzIG5lZWRlZDsgdGhlIGhlbHBlciBtYXkgY29uc3VsdCBleHRlcm5hbAorCXN0b3JhZ2UgdG8gYXZvaWQgcHJvbXB0aW5nIHRoZSB1c2VyIGZvciB0aGUgY3JlZGVudGlhbHMuIE5vdGUKKwl0aGF0IG11bHRpcGxlIGhlbHBlcnMgbWF5IGJlIGRlZmluZWQuIFNlZSBsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddCisJZm9yIGRldGFpbHMuCisKK2NyZWRlbnRpYWwudXNlSHR0cFBhdGg6OgorCVdoZW4gYWNxdWlyaW5nIGNyZWRlbnRpYWxzLCBjb25zaWRlciB0aGUgInBhdGgiIGNvbXBvbmVudCBvZiBhbiBodHRwCisJb3IgaHR0cHMgVVJMIHRvIGJlIGltcG9ydGFudC4gRGVmYXVsdHMgdG8gZmFsc2UuIFNlZQorCWxpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK2NyZWRlbnRpYWwudXNlcm5hbWU6OgorCUlmIG5vIHVzZXJuYW1lIGlzIHNldCBmb3IgYSBuZXR3b3JrIGF1dGhlbnRpY2F0aW9uLCB1c2UgdGhpcyB1c2VybmFtZQorCWJ5IGRlZmF1bHQuIFNlZSBjcmVkZW50aWFsLjxjb250ZXh0Pi4qIGJlbG93LCBhbmQKKwlsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddLgorCitjcmVkZW50aWFsLjx1cmw+Lio6OgorCUFueSBvZiB0aGUgY3JlZGVudGlhbC4qIG9wdGlvbnMgYWJvdmUgY2FuIGJlIGFwcGxpZWQgc2VsZWN0aXZlbHkgdG8KKwlzb21lIGNyZWRlbnRpYWxzLiBGb3IgZXhhbXBsZSAiY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLnVzZXJuYW1lIgorCXdvdWxkIHNldCB0aGUgZGVmYXVsdCB1c2VybmFtZSBvbmx5IGZvciBodHRwcyBjb25uZWN0aW9ucyB0bworCWV4YW1wbGUuY29tLiBTZWUgbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XSBmb3IgZGV0YWlscyBvbiBob3cgVVJMcyBhcmUKKwltYXRjaGVkLgorCitjcmVkZW50aWFsQ2FjaGUuaWdub3JlU0lHSFVQOjoKKwlUZWxsIGdpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24gdG8gaWdub3JlIFNJR0hVUCwgaW5zdGVhZCBvZiBxdWl0dGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2RpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZGlmZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYwOWYxYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2RpZmYudHh0CkBAIC0wLDAgKzEsMjMxIEBACitkaWZmLmF1dG9SZWZyZXNoSW5kZXg6OgorCVdoZW4gdXNpbmcgJ2dpdCBkaWZmJyB0byBjb21wYXJlIHdpdGggd29yayB0cmVlCisJZmlsZXMsIGRvIG5vdCBjb25zaWRlciBzdGF0LW9ubHkgY2hhbmdlIGFzIGNoYW5nZWQuCisJSW5zdGVhZCwgc2lsZW50bHkgcnVuIGBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaGAgdG8KKwl1cGRhdGUgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIGZvciBwYXRocyB3aG9zZQorCWNvbnRlbnRzIGluIHRoZSB3b3JrIHRyZWUgbWF0Y2ggdGhlIGNvbnRlbnRzIGluIHRoZQorCWluZGV4LiAgVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gdHJ1ZS4gIE5vdGUgdGhhdCB0aGlzCisJYWZmZWN0cyBvbmx5ICdnaXQgZGlmZicgUG9yY2VsYWluLCBhbmQgbm90IGxvd2VyIGxldmVsCisJJ2RpZmYnIGNvbW1hbmRzIHN1Y2ggYXMgJ2dpdCBkaWZmLWZpbGVzJy4KKworZGlmZi5kaXJzdGF0OjoKKwlBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGAtLWRpcnN0YXRgIHBhcmFtZXRlcnMgc3BlY2lmeWluZyB0aGUKKwlkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBgLS1kaXJzdGF0YCBvcHRpb24gdG8gbGlua2dpdDpnaXQtZGlmZlsxXQorCWFuZCBmcmllbmRzLiBUaGUgZGVmYXVsdHMgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZQorCSh1c2luZyBgLS1kaXJzdGF0PTxwYXJhbTEscGFyYW0yLC4uLj5gKS4gVGhlIGZhbGxiYWNrIGRlZmF1bHRzCisJKHdoZW4gbm90IGNoYW5nZWQgYnkgYGRpZmYuZGlyc3RhdGApIGFyZSBgY2hhbmdlcyxub25jdW11bGF0aXZlLDNgLgorCVRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlOgorKworLS0KK2BjaGFuZ2VzYDs7CisJQ29tcHV0ZSB0aGUgZGlyc3RhdCBudW1iZXJzIGJ5IGNvdW50aW5nIHRoZSBsaW5lcyB0aGF0IGhhdmUgYmVlbgorCXJlbW92ZWQgZnJvbSB0aGUgc291cmNlLCBvciBhZGRlZCB0byB0aGUgZGVzdGluYXRpb24uIFRoaXMgaWdub3JlcworCXRoZSBhbW91bnQgb2YgcHVyZSBjb2RlIG1vdmVtZW50cyB3aXRoaW4gYSBmaWxlLiAgSW4gb3RoZXIgd29yZHMsCisJcmVhcnJhbmdpbmcgbGluZXMgaW4gYSBmaWxlIGlzIG5vdCBjb3VudGVkIGFzIG11Y2ggYXMgb3RoZXIgY2hhbmdlcy4KKwlUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gbm8gcGFyYW1ldGVyIGlzIGdpdmVuLgorYGxpbmVzYDs7CisJQ29tcHV0ZSB0aGUgZGlyc3RhdCBudW1iZXJzIGJ5IGRvaW5nIHRoZSByZWd1bGFyIGxpbmUtYmFzZWQgZGlmZgorCWFuYWx5c2lzLCBhbmQgc3VtbWluZyB0aGUgcmVtb3ZlZC9hZGRlZCBsaW5lIGNvdW50cy4gKEZvciBiaW5hcnkKKwlmaWxlcywgY291bnQgNjQtYnl0ZSBjaHVua3MgaW5zdGVhZCwgc2luY2UgYmluYXJ5IGZpbGVzIGhhdmUgbm8KKwluYXR1cmFsIGNvbmNlcHQgb2YgbGluZXMpLiBUaGlzIGlzIGEgbW9yZSBleHBlbnNpdmUgYC0tZGlyc3RhdGAKKwliZWhhdmlvciB0aGFuIHRoZSBgY2hhbmdlc2AgYmVoYXZpb3IsIGJ1dCBpdCBkb2VzIGNvdW50IHJlYXJyYW5nZWQKKwlsaW5lcyB3aXRoaW4gYSBmaWxlIGFzIG11Y2ggYXMgb3RoZXIgY2hhbmdlcy4gVGhlIHJlc3VsdGluZyBvdXRwdXQKKwlpcyBjb25zaXN0ZW50IHdpdGggd2hhdCB5b3UgZ2V0IGZyb20gdGhlIG90aGVyIGAtLSpzdGF0YCBvcHRpb25zLgorYGZpbGVzYDs7CisJQ29tcHV0ZSB0aGUgZGlyc3RhdCBudW1iZXJzIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2YgZmlsZXMgY2hhbmdlZC4KKwlFYWNoIGNoYW5nZWQgZmlsZSBjb3VudHMgZXF1YWxseSBpbiB0aGUgZGlyc3RhdCBhbmFseXNpcy4gVGhpcyBpcworCXRoZSBjb21wdXRhdGlvbmFsbHkgY2hlYXBlc3QgYC0tZGlyc3RhdGAgYmVoYXZpb3IsIHNpbmNlIGl0IGRvZXMKKwlub3QgaGF2ZSB0byBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnRzIGF0IGFsbC4KK2BjdW11bGF0aXZlYDs7CisJQ291bnQgY2hhbmdlcyBpbiBhIGNoaWxkIGRpcmVjdG9yeSBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkgYXMgd2VsbC4KKwlOb3RlIHRoYXQgd2hlbiB1c2luZyBgY3VtdWxhdGl2ZWAsIHRoZSBzdW0gb2YgdGhlIHBlcmNlbnRhZ2VzCisJcmVwb3J0ZWQgbWF5IGV4Y2VlZCAxMDAlLiBUaGUgZGVmYXVsdCAobm9uLWN1bXVsYXRpdmUpIGJlaGF2aW9yIGNhbgorCWJlIHNwZWNpZmllZCB3aXRoIHRoZSBgbm9uY3VtdWxhdGl2ZWAgcGFyYW1ldGVyLgorPGxpbWl0Pjs7CisJQW4gaW50ZWdlciBwYXJhbWV0ZXIgc3BlY2lmaWVzIGEgY3V0LW9mZiBwZXJjZW50ICgzJSBieSBkZWZhdWx0KS4KKwlEaXJlY3RvcmllcyBjb250cmlidXRpbmcgbGVzcyB0aGFuIHRoaXMgcGVyY2VudGFnZSBvZiB0aGUgY2hhbmdlcworCWFyZSBub3Qgc2hvd24gaW4gdGhlIG91dHB1dC4KKy0tCisrCitFeGFtcGxlOiBUaGUgZm9sbG93aW5nIHdpbGwgY291bnQgY2hhbmdlZCBmaWxlcywgd2hpbGUgaWdub3JpbmcKK2RpcmVjdG9yaWVzIHdpdGggbGVzcyB0aGFuIDEwJSBvZiB0aGUgdG90YWwgYW1vdW50IG9mIGNoYW5nZWQgZmlsZXMsCithbmQgYWNjdW11bGF0aW5nIGNoaWxkIGRpcmVjdG9yeSBjb3VudHMgaW4gdGhlIHBhcmVudCBkaXJlY3RvcmllczoKK2BmaWxlcywxMCxjdW11bGF0aXZlYC4KKworZGlmZi5zdGF0R3JhcGhXaWR0aDo6CisJTGltaXQgdGhlIHdpZHRoIG9mIHRoZSBncmFwaCBwYXJ0IGluIC0tc3RhdCBvdXRwdXQuIElmIHNldCwgYXBwbGllcworCXRvIGFsbCBjb21tYW5kcyBnZW5lcmF0aW5nIC0tc3RhdCBvdXRwdXQgZXhjZXB0IGZvcm1hdC1wYXRjaC4KKworZGlmZi5jb250ZXh0OjoKKwlHZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBvZiBjb250ZXh0IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKKwlvZiAzLiBUaGlzIHZhbHVlIGlzIG92ZXJyaWRkZW4gYnkgdGhlIC1VIG9wdGlvbi4KKworZGlmZi5pbnRlckh1bmtDb250ZXh0OjoKKwlTaG93IHRoZSBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcywgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIKKwlvZiBsaW5lcywgdGhlcmVieSBmdXNpbmcgdGhlIGh1bmtzIHRoYXQgYXJlIGNsb3NlIHRvIGVhY2ggb3RoZXIuCisJVGhpcyB2YWx1ZSBzZXJ2ZXMgYXMgdGhlIGRlZmF1bHQgZm9yIHRoZSBgLS1pbnRlci1odW5rLWNvbnRleHRgCisJY29tbWFuZCBsaW5lIG9wdGlvbi4KKworZGlmZi5leHRlcm5hbDo6CisJSWYgdGhpcyBjb25maWcgdmFyaWFibGUgaXMgc2V0LCBkaWZmIGdlbmVyYXRpb24gaXMgbm90CisJcGVyZm9ybWVkIHVzaW5nIHRoZSBpbnRlcm5hbCBkaWZmIG1hY2hpbmVyeSwgYnV0IHVzaW5nIHRoZQorCWdpdmVuIGNvbW1hbmQuICBDYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX0VYVEVSTkFMX0RJRkYnCisJZW52aXJvbm1lbnQgdmFyaWFibGUuICBUaGUgY29tbWFuZCBpcyBjYWxsZWQgd2l0aCBwYXJhbWV0ZXJzCisJYXMgZGVzY3JpYmVkIHVuZGVyICJnaXQgRGlmZnMiIGluIGxpbmtnaXQ6Z2l0WzFdLiAgTm90ZTogaWYKKwl5b3Ugd2FudCB0byB1c2UgYW4gZXh0ZXJuYWwgZGlmZiBwcm9ncmFtIG9ubHkgb24gYSBzdWJzZXQgb2YKKwl5b3VyIGZpbGVzLCB5b3UgbWlnaHQgd2FudCB0byB1c2UgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGluc3RlYWQuCisKK2RpZmYuaWdub3JlU3VibW9kdWxlczo6CisJU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAtLWlnbm9yZS1zdWJtb2R1bGVzLiBOb3RlIHRoYXQgdGhpcworCWFmZmVjdHMgb25seSAnZ2l0IGRpZmYnIFBvcmNlbGFpbiwgYW5kIG5vdCBsb3dlciBsZXZlbCAnZGlmZicKKwljb21tYW5kcyBzdWNoIGFzICdnaXQgZGlmZi1maWxlcycuICdnaXQgY2hlY2tvdXQnCisJYW5kICdnaXQgc3dpdGNoJyBhbHNvIGhvbm9yCisJdGhpcyBzZXR0aW5nIHdoZW4gcmVwb3J0aW5nIHVuY29tbWl0dGVkIGNoYW5nZXMuIFNldHRpbmcgaXQgdG8KKwknYWxsJyBkaXNhYmxlcyB0aGUgc3VibW9kdWxlIHN1bW1hcnkgbm9ybWFsbHkgc2hvd24gYnkgJ2dpdCBjb21taXQnCisJYW5kICdnaXQgc3RhdHVzJyB3aGVuIGBzdGF0dXMuc3VibW9kdWxlU3VtbWFyeWAgaXMgc2V0IHVubGVzcyBpdCBpcworCW92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIC0taWdub3JlLXN1Ym1vZHVsZXMgY29tbWFuZC1saW5lIG9wdGlvbi4KKwlUaGUgJ2dpdCBzdWJtb2R1bGUnIGNvbW1hbmRzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhpcyBzZXR0aW5nLgorCitkaWZmLm1uZW1vbmljUHJlZml4OjoKKwlJZiBzZXQsICdnaXQgZGlmZicgdXNlcyBhIHByZWZpeCBwYWlyIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlCisJc3RhbmRhcmQgImEvIiBhbmQgImIvIiBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBjb21wYXJlZC4gIFdoZW4KKwl0aGlzIGNvbmZpZ3VyYXRpb24gaXMgaW4gZWZmZWN0LCByZXZlcnNlIGRpZmYgb3V0cHV0IGFsc28gc3dhcHMKKwl0aGUgb3JkZXIgb2YgdGhlIHByZWZpeGVzOgorYGdpdCBkaWZmYDs7CisJY29tcGFyZXMgdGhlIChpKW5kZXggYW5kIHRoZSAodylvcmsgdHJlZTsKK2BnaXQgZGlmZiBIRUFEYDs7CisJIGNvbXBhcmVzIGEgKGMpb21taXQgYW5kIHRoZSAodylvcmsgdHJlZTsKK2BnaXQgZGlmZiAtLWNhY2hlZGA7OworCWNvbXBhcmVzIGEgKGMpb21taXQgYW5kIHRoZSAoaSluZGV4OworYGdpdCBkaWZmIEhFQUQ6ZmlsZTEgZmlsZTJgOzsKKwljb21wYXJlcyBhbiAobyliamVjdCBhbmQgYSAodylvcmsgdHJlZSBlbnRpdHk7CitgZ2l0IGRpZmYgLS1uby1pbmRleCBhIGJgOzsKKwljb21wYXJlcyB0d28gbm9uLWdpdCB0aGluZ3MgKDEpIGFuZCAoMikuCisKK2RpZmYubm9wcmVmaXg6OgorCUlmIHNldCwgJ2dpdCBkaWZmJyBkb2VzIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4LgorCitkaWZmLm9yZGVyRmlsZTo6CisJRmlsZSBpbmRpY2F0aW5nIGhvdyB0byBvcmRlciBmaWxlcyB3aXRoaW4gYSBkaWZmLgorCVNlZSB0aGUgJy1PJyBvcHRpb24gdG8gbGlua2dpdDpnaXQtZGlmZlsxXSBmb3IgZGV0YWlscy4KKwlJZiBgZGlmZi5vcmRlckZpbGVgIGlzIGEgcmVsYXRpdmUgcGF0aG5hbWUsIGl0IGlzIHRyZWF0ZWQgYXMKKwlyZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSB3b3JraW5nIHRyZWUuCisKK2RpZmYucmVuYW1lTGltaXQ6OgorCVRoZSBudW1iZXIgb2YgZmlsZXMgdG8gY29uc2lkZXIgd2hlbiBwZXJmb3JtaW5nIHRoZSBjb3B5L3JlbmFtZQorCWRldGVjdGlvbjsgZXF1aXZhbGVudCB0byB0aGUgJ2dpdCBkaWZmJyBvcHRpb24gYC1sYC4gVGhpcyBzZXR0aW5nCisJaGFzIG5vIGVmZmVjdCBpZiByZW5hbWUgZGV0ZWN0aW9uIGlzIHR1cm5lZCBvZmYuCisKK2RpZmYucmVuYW1lczo6CisJV2hldGhlciBhbmQgaG93IEdpdCBkZXRlY3RzIHJlbmFtZXMuICBJZiBzZXQgdG8gImZhbHNlIiwKKwlyZW5hbWUgZGV0ZWN0aW9uIGlzIGRpc2FibGVkLiBJZiBzZXQgdG8gInRydWUiLCBiYXNpYyByZW5hbWUKKwlkZXRlY3Rpb24gaXMgZW5hYmxlZC4gIElmIHNldCB0byAiY29waWVzIiBvciAiY29weSIsIEdpdCB3aWxsCisJZGV0ZWN0IGNvcGllcywgYXMgd2VsbC4gIERlZmF1bHRzIHRvIHRydWUuICBOb3RlIHRoYXQgdGhpcworCWFmZmVjdHMgb25seSAnZ2l0IGRpZmYnIFBvcmNlbGFpbiBsaWtlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYW5kCisJbGlua2dpdDpnaXQtbG9nWzFdLCBhbmQgbm90IGxvd2VyIGxldmVsIGNvbW1hbmRzIHN1Y2ggYXMKKwlsaW5rZ2l0OmdpdC1kaWZmLWZpbGVzWzFdLgorCitkaWZmLnN1cHByZXNzQmxhbmtFbXB0eTo6CisJQSBib29sZWFuIHRvIGluaGliaXQgdGhlIHN0YW5kYXJkIGJlaGF2aW9yIG9mIHByaW50aW5nIGEgc3BhY2UKKwliZWZvcmUgZWFjaCBlbXB0eSBvdXRwdXQgbGluZS4gRGVmYXVsdHMgdG8gZmFsc2UuCisKK2RpZmYuc3VibW9kdWxlOjoKKwlTcGVjaWZ5IHRoZSBmb3JtYXQgaW4gd2hpY2ggZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUKKwlzaG93bi4gIFRoZSAic2hvcnQiIGZvcm1hdCBqdXN0IHNob3dzIHRoZSBuYW1lcyBvZiB0aGUgY29tbWl0cworCWF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgcmFuZ2UuIFRoZSAibG9nIiBmb3JtYXQgbGlzdHMKKwl0aGUgY29tbWl0cyBpbiB0aGUgcmFuZ2UgbGlrZSBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0gYHN1bW1hcnlgCisJZG9lcy4gVGhlICJkaWZmIiBmb3JtYXQgc2hvd3MgYW4gaW5saW5lIGRpZmYgb2YgdGhlIGNoYW5nZWQKKwljb250ZW50cyBvZiB0aGUgc3VibW9kdWxlLiBEZWZhdWx0cyB0byAic2hvcnQiLgorCitkaWZmLndvcmRSZWdleDo6CisJQSBQT1NJWCBFeHRlbmRlZCBSZWd1bGFyIEV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBhICJ3b3JkIgorCXdoZW4gcGVyZm9ybWluZyB3b3JkLWJ5LXdvcmQgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbnMuICBDaGFyYWN0ZXIKKwlzZXF1ZW5jZXMgdGhhdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uIGFyZSAid29yZHMiLCBhbGwgb3RoZXIKKwljaGFyYWN0ZXJzIGFyZSAqaWdub3JhYmxlKiB3aGl0ZXNwYWNlLgorCitkaWZmLjxkcml2ZXI+LmNvbW1hbmQ6OgorCVRoZSBjdXN0b20gZGlmZiBkcml2ZXIgY29tbWFuZC4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0KKwlmb3IgZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi54ZnVuY25hbWU6OgorCVRoZSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgZGlmZiBkcml2ZXIgc2hvdWxkIHVzZSB0bworCXJlY29nbml6ZSB0aGUgaHVuayBoZWFkZXIuICBBIGJ1aWx0LWluIHBhdHRlcm4gbWF5IGFsc28gYmUgdXNlZC4KKwlTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitkaWZmLjxkcml2ZXI+LmJpbmFyeTo6CisJU2V0IHRoaXMgb3B0aW9uIHRvIHRydWUgdG8gbWFrZSB0aGUgZGlmZiBkcml2ZXIgdHJlYXQgZmlsZXMgYXMKKwliaW5hcnkuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitkaWZmLjxkcml2ZXI+LnRleHRjb252OjoKKwlUaGUgY29tbWFuZCB0aGF0IHRoZSBkaWZmIGRyaXZlciBzaG91bGQgY2FsbCB0byBnZW5lcmF0ZSB0aGUKKwl0ZXh0LWNvbnZlcnRlZCB2ZXJzaW9uIG9mIGEgZmlsZS4gIFRoZSByZXN1bHQgb2YgdGhlCisJY29udmVyc2lvbiBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgaHVtYW4tcmVhZGFibGUgZGlmZi4gIFNlZQorCWxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi53b3JkUmVnZXg6OgorCVRoZSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgZGlmZiBkcml2ZXIgc2hvdWxkIHVzZSB0bworCXNwbGl0IHdvcmRzIGluIGEgbGluZS4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yCisJZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi5jYWNoZXRleHRjb252OjoKKwlTZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZSB0byBtYWtlIHRoZSBkaWZmIGRyaXZlciBjYWNoZSB0aGUgdGV4dAorCWNvbnZlcnNpb24gb3V0cHV0cy4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK2RpZmYudG9vbDo6CisJQ29udHJvbHMgd2hpY2ggZGlmZiB0b29sIGlzIHVzZWQgYnkgbGlua2dpdDpnaXQtZGlmZnRvb2xbMV0uCisJVGhpcyB2YXJpYWJsZSBvdmVycmlkZXMgdGhlIHZhbHVlIGNvbmZpZ3VyZWQgaW4gYG1lcmdlLnRvb2xgLgorCVRoZSBsaXN0IGJlbG93IHNob3dzIHRoZSB2YWxpZCBidWlsdC1pbiB2YWx1ZXMuCisJQW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYSBjdXN0b20gZGlmZiB0b29sIGFuZCByZXF1aXJlcworCXRoYXQgYSBjb3JyZXNwb25kaW5nIGRpZmZ0b29sLjx0b29sPi5jbWQgdmFyaWFibGUgaXMgZGVmaW5lZC4KKworZGlmZi5ndWl0b29sOjoKKwlDb250cm9scyB3aGljaCBkaWZmIHRvb2wgaXMgdXNlZCBieSBsaW5rZ2l0OmdpdC1kaWZmdG9vbFsxXSB3aGVuCisJdGhlIC1nLy0tZ3VpIGZsYWcgaXMgc3BlY2lmaWVkLiBUaGlzIHZhcmlhYmxlIG92ZXJyaWRlcyB0aGUgdmFsdWUKKwljb25maWd1cmVkIGluIGBtZXJnZS5ndWl0b29sYC4gVGhlIGxpc3QgYmVsb3cgc2hvd3MgdGhlIHZhbGlkCisJYnVpbHQtaW4gdmFsdWVzLiBBbnkgb3RoZXIgdmFsdWUgaXMgdHJlYXRlZCBhcyBhIGN1c3RvbSBkaWZmIHRvb2wKKwlhbmQgcmVxdWlyZXMgdGhhdCBhIGNvcnJlc3BvbmRpbmcgZGlmZnRvb2wuPGd1aXRvb2w+LmNtZCB2YXJpYWJsZQorCWlzIGRlZmluZWQuCisKK2luY2x1ZGU6Oi4uL21lcmdldG9vbHMtZGlmZi50eHRbXQorCitkaWZmLmluZGVudEhldXJpc3RpYzo6CisJU2V0IHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBoZXVyaXN0aWNzCisJdGhhdCBzaGlmdCBkaWZmIGh1bmsgYm91bmRhcmllcyB0byBtYWtlIHBhdGNoZXMgZWFzaWVyIHRvIHJlYWQuCisKK2RpZmYuYWxnb3JpdGhtOjoKKwlDaG9vc2UgYSBkaWZmIGFsZ29yaXRobS4gIFRoZSB2YXJpYW50cyBhcmUgYXMgZm9sbG93czoKKysKKy0tCitgZGVmYXVsdGAsIGBteWVyc2A7OworCVRoZSBiYXNpYyBncmVlZHkgZGlmZiBhbGdvcml0aG0uIEN1cnJlbnRseSwgdGhpcyBpcyB0aGUgZGVmYXVsdC4KK2BtaW5pbWFsYDs7CisJU3BlbmQgZXh0cmEgdGltZSB0byBtYWtlIHN1cmUgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYgaXMKKwlwcm9kdWNlZC4KK2BwYXRpZW5jZWA7OworCVVzZSAicGF0aWVuY2UgZGlmZiIgYWxnb3JpdGhtIHdoZW4gZ2VuZXJhdGluZyBwYXRjaGVzLgorYGhpc3RvZ3JhbWA7OworCVRoaXMgYWxnb3JpdGhtIGV4dGVuZHMgdGhlIHBhdGllbmNlIGFsZ29yaXRobSB0byAic3VwcG9ydAorCWxvdy1vY2N1cnJlbmNlIGNvbW1vbiBlbGVtZW50cyIuCistLQorKworCitkaWZmLndzRXJyb3JIaWdobGlnaHQ6OgorCUhpZ2hsaWdodCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUgYGNvbnRleHRgLCBgb2xkYCBvciBgbmV3YAorCWxpbmVzIG9mIHRoZSBkaWZmLiAgTXVsdGlwbGUgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWEsCisJYG5vbmVgIHJlc2V0cyBwcmV2aW91cyB2YWx1ZXMsIGBkZWZhdWx0YCByZXNldCB0aGUgbGlzdCB0bworCWBuZXdgIGFuZCBgYWxsYCBpcyBhIHNob3J0aGFuZCBmb3IgYG9sZCxuZXcsY29udGV4dGAuICBUaGUKKwl3aGl0ZXNwYWNlIGVycm9ycyBhcmUgY29sb3JlZCB3aXRoIGBjb2xvci5kaWZmLndoaXRlc3BhY2VgLgorCVRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIGAtLXdzLWVycm9yLWhpZ2hsaWdodD08a2luZD5gCisJb3ZlcnJpZGVzIHRoaXMgc2V0dGluZy4KKworZGlmZi5jb2xvck1vdmVkOjoKKwlJZiBzZXQgdG8gZWl0aGVyIGEgdmFsaWQgYDxtb2RlPmAgb3IgYSB0cnVlIHZhbHVlLCBtb3ZlZCBsaW5lcworCWluIGEgZGlmZiBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSwgZm9yIGRldGFpbHMgb2YgdmFsaWQgbW9kZXMKKwlzZWUgJy0tY29sb3ItbW92ZWQnIGluIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uIElmIHNpbXBseSBzZXQgdG8KKwl0cnVlIHRoZSBkZWZhdWx0IGNvbG9yIG1vZGUgd2lsbCBiZSB1c2VkLiBXaGVuIHNldCB0byBmYWxzZSwKKwltb3ZlZCBsaW5lcyBhcmUgbm90IGNvbG9yZWQuCisKK2RpZmYuY29sb3JNb3ZlZFdTOjoKKwlXaGVuIG1vdmVkIGxpbmVzIGFyZSBjb2xvcmVkIHVzaW5nIGUuZy4gdGhlIGBkaWZmLmNvbG9yTW92ZWRgIHNldHRpbmcsCisJdGhpcyBvcHRpb24gY29udHJvbHMgdGhlIGA8bW9kZT5gIGhvdyBzcGFjZXMgYXJlIHRyZWF0ZWQKKwlmb3IgZGV0YWlscyBvZiB2YWxpZCBtb2RlcyBzZWUgJy0tY29sb3ItbW92ZWQtd3MnIGluIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9kaWZmdG9vbC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9kaWZmdG9vbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2MjU5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2RpZmZ0b29sLnR4dApAQCAtMCwwICsxLDE0IEBACitkaWZmdG9vbC48dG9vbD4ucGF0aDo6CisJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sLiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZQorCXlvdXIgdG9vbCBpcyBub3QgaW4gdGhlIFBBVEguCisKK2RpZmZ0b29sLjx0b29sPi5jbWQ6OgorCVNwZWNpZnkgdGhlIGNvbW1hbmQgdG8gaW52b2tlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sLgorCVRoZSBzcGVjaWZpZWQgY29tbWFuZCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgZm9sbG93aW5nCisJdmFyaWFibGVzIGF2YWlsYWJsZTogICdMT0NBTCcgaXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkKKwlmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaWZmIHByZS1pbWFnZSBhbmQgJ1JFTU9URScKKwlpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzCisJb2YgdGhlIGRpZmYgcG9zdC1pbWFnZS4KKworZGlmZnRvb2wucHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZmFzdGltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mYXN0aW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTE2NmUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZmFzdGltcG9ydC50eHQKQEAgLTAsMCArMSw4IEBACitmYXN0aW1wb3J0LnVucGFja0xpbWl0OjoKKwlJZiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW1wb3J0ZWQgYnkgbGlua2dpdDpnaXQtZmFzdC1pbXBvcnRbMV0KKwlpcyBiZWxvdyB0aGlzIGxpbWl0LCB0aGVuIHRoZSBvYmplY3RzIHdpbGwgYmUgdW5wYWNrZWQgaW50bworCWxvb3NlIG9iamVjdCBmaWxlcy4gIEhvd2V2ZXIgaWYgdGhlIG51bWJlciBvZiBpbXBvcnRlZCBvYmplY3RzCisJZXF1YWxzIG9yIGV4Y2VlZHMgdGhpcyBsaW1pdCB0aGVuIHRoZSBwYWNrIHdpbGwgYmUgc3RvcmVkIGFzIGEKKwlwYWNrLiAgU3RvcmluZyB0aGUgcGFjayBmcm9tIGEgZmFzdC1pbXBvcnQgY2FuIG1ha2UgdGhlIGltcG9ydAorCW9wZXJhdGlvbiBjb21wbGV0ZSBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gc2xvdyBmaWxlc3lzdGVtcy4gIElmCisJbm90IHNldCwgdGhlIHZhbHVlIG9mIGB0cmFuc2Zlci51bnBhY2tMaW1pdGAgaXMgdXNlZCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZmVhdHVyZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mZWF0dXJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzVmOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZmVhdHVyZS50eHQKQEAgLTAsMCArMSwzNyBAQAorZmVhdHVyZS4qOjoKKwlUaGUgY29uZmlnIHNldHRpbmdzIHRoYXQgc3RhcnQgd2l0aCBgZmVhdHVyZS5gIG1vZGlmeSB0aGUgZGVmYXVsdHMgb2YKKwlhIGdyb3VwIG9mIG90aGVyIGNvbmZpZyBzZXR0aW5ncy4gVGhlc2UgZ3JvdXBzIGFyZSBjcmVhdGVkIGJ5IHRoZSBHaXQKKwlkZXZlbG9wZXIgY29tbXVuaXR5IGFzIHJlY29tbWVuZGVkIGRlZmF1bHRzIGFuZCBhcmUgc3ViamVjdCB0byBjaGFuZ2UuCisJSW4gcGFydGljdWxhciwgbmV3IGNvbmZpZyBvcHRpb25zIG1heSBiZSBhZGRlZCB3aXRoIGRpZmZlcmVudCBkZWZhdWx0cy4KKworZmVhdHVyZS5leHBlcmltZW50YWw6OgorCUVuYWJsZSBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBuZXcgdG8gR2l0LCBhbmQgYXJlIGJlaW5nIGNvbnNpZGVyZWQgZm9yCisJZnV0dXJlIGRlZmF1bHRzLiBDb25maWcgc2V0dGluZ3MgaW5jbHVkZWQgaGVyZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZAorCXdpdGggZWFjaCByZWxlYXNlLCBpbmNsdWRpbmcgbWlub3IgdmVyc2lvbiB1cGRhdGVzLiBUaGVzZSBzZXR0aW5ncyBtYXkKKwloYXZlIHVuaW50ZW5kZWQgaW50ZXJhY3Rpb25zIHNpbmNlIHRoZXkgYXJlIHNvIG5ldy4gUGxlYXNlIGVuYWJsZSB0aGlzCisJc2V0dGluZyBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gcHJvdmlkaW5nIGZlZWRiYWNrIG9uIGV4cGVyaW1lbnRhbAorCWZlYXR1cmVzLiBUaGUgbmV3IGRlZmF1bHQgdmFsdWVzIGFyZToKKysKKyogYHBhY2sudXNlU3BhcnNlPXRydWVgIHVzZXMgYSBuZXcgYWxnb3JpdGhtIHdoZW4gY29uc3RydWN0aW5nIGEgcGFjay1maWxlCit3aGljaCBjYW4gaW1wcm92ZSBgZ2l0IHB1c2hgIHBlcmZvcm1hbmNlIGluIHJlcG9zIHdpdGggbWFueSBmaWxlcy4KKysKKyogYGZldGNoLm5lZ290aWF0aW9uQWxnb3JpdGhtPXNraXBwaW5nYCBtYXkgaW1wcm92ZSBmZXRjaCBuZWdvdGlhdGlvbiB0aW1lcyBieQorc2tpcHBpbmcgbW9yZSBjb21taXRzIGF0IGEgdGltZSwgcmVkdWNpbmcgdGhlIG51bWJlciBvZiByb3VuZCB0cmlwcy4KKysKKyogYGZldGNoLndyaXRlQ29tbWl0R3JhcGg9dHJ1ZWAgd3JpdGVzIGEgY29tbWl0LWdyYXBoIGFmdGVyIGV2ZXJ5IGBnaXQgZmV0Y2hgCitjb21tYW5kIHRoYXQgZG93bmxvYWRzIGEgcGFjay1maWxlIGZyb20gYSByZW1vdGUuIFVzaW5nIHRoZSBgLS1zcGxpdGAgb3B0aW9uLAorbW9zdCBleGVjdXRpb25zIHdpbGwgY3JlYXRlIGEgdmVyeSBzbWFsbCBjb21taXQtZ3JhcGggZmlsZSBvbiB0b3Agb2YgdGhlCitleGlzdGluZyBjb21taXQtZ3JhcGggZmlsZShzKS4gT2NjYXNpb25hbGx5LCB0aGVzZSBmaWxlcyB3aWxsIG1lcmdlIGFuZCB0aGUKK3dyaXRlIG1heSB0YWtlIGxvbmdlci4gSGF2aW5nIGFuIHVwZGF0ZWQgY29tbWl0LWdyYXBoIGZpbGUgaGVscHMgcGVyZm9ybWFuY2UKK29mIG1hbnkgR2l0IGNvbW1hbmRzLCBpbmNsdWRpbmcgYGdpdCBtZXJnZS1iYXNlYCwgYGdpdCBwdXNoIC1mYCwgYW5kCitgZ2l0IGxvZyAtLWdyYXBoYC4KKworZmVhdHVyZS5tYW55RmlsZXM6OgorCUVuYWJsZSBjb25maWcgb3B0aW9ucyB0aGF0IG9wdGltaXplIGZvciByZXBvcyB3aXRoIG1hbnkgZmlsZXMgaW4gdGhlCisJd29ya2luZyBkaXJlY3RvcnkuIFdpdGggbWFueSBmaWxlcywgY29tbWFuZHMgc3VjaCBhcyBgZ2l0IHN0YXR1c2AgYW5kCisJYGdpdCBjaGVja291dGAgbWF5IGJlIHNsb3cgYW5kIHRoZXNlIG5ldyBkZWZhdWx0cyBpbXByb3ZlIHBlcmZvcm1hbmNlOgorKworKiBgaW5kZXgudmVyc2lvbj00YCBlbmFibGVzIHBhdGgtcHJlZml4IGNvbXByZXNzaW9uIGluIHRoZSBpbmRleC4KKysKKyogYGNvcmUudW50cmFja2VkQ2FjaGU9dHJ1ZWAgZW5hYmxlcyB0aGUgdW50cmFja2VkIGNhY2hlLiBUaGlzIHNldHRpbmcgYXNzdW1lcwordGhhdCBtdGltZSBpcyB3b3JraW5nIG9uIHlvdXIgbWFjaGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2ZldGNoLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ZldGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTE5NDAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZmV0Y2gudHh0CkBAIC0wLDAgKzEsOTEgQEAKK2ZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgZWl0aGVyIHNldCB0byBhIGJvb2xlYW4gdmFsdWUgb3IgdG8gJ29uLWRlbWFuZCcuCisJU2V0dGluZyBpdCB0byBhIGJvb2xlYW4gY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgZmV0Y2ggYW5kIHB1bGwgdG8KKwl1bmNvbmRpdGlvbmFsbHkgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgd2hlbiBzZXQgdG8gdHJ1ZSBvciB0byBub3QKKwlyZWN1cnNlIGF0IGFsbCB3aGVuIHNldCB0byBmYWxzZS4gV2hlbiBzZXQgdG8gJ29uLWRlbWFuZCcgKHRoZSBkZWZhdWx0CisJdmFsdWUpLCBmZXRjaCBhbmQgcHVsbCB3aWxsIG9ubHkgcmVjdXJzZSBpbnRvIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZQorCXdoZW4gaXRzIHN1cGVycHJvamVjdCByZXRyaWV2ZXMgYSBjb21taXQgdGhhdCB1cGRhdGVzIHRoZSBzdWJtb2R1bGUncworCXJlZmVyZW5jZS4KKworZmV0Y2guZnNja09iamVjdHM6OgorCUlmIGl0IGlzIHNldCB0byB0cnVlLCBnaXQtZmV0Y2gtcGFjayB3aWxsIGNoZWNrIGFsbCBmZXRjaGVkCisJb2JqZWN0cy4gU2VlIGB0cmFuc2Zlci5mc2NrT2JqZWN0c2AgZm9yIHdoYXQncworCWNoZWNrZWQuIERlZmF1bHRzIHRvIGZhbHNlLiBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YKKwlgdHJhbnNmZXIuZnNja09iamVjdHNgIGlzIHVzZWQgaW5zdGVhZC4KKworZmV0Y2guZnNjay48bXNnLWlkPjo6CisJQWN0cyBsaWtlIGBmc2NrLjxtc2ctaWQ+YCwgYnV0IGlzIHVzZWQgYnkKKwlsaW5rZ2l0OmdpdC1mZXRjaC1wYWNrWzFdIGluc3RlYWQgb2YgbGlua2dpdDpnaXQtZnNja1sxXS4gU2VlCisJdGhlIGBmc2NrLjxtc2ctaWQ+YCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCitmZXRjaC5mc2NrLnNraXBMaXN0OjoKKwlBY3RzIGxpa2UgYGZzY2suc2tpcExpc3RgLCBidXQgaXMgdXNlZCBieQorCWxpbmtnaXQ6Z2l0LWZldGNoLXBhY2tbMV0gaW5zdGVhZCBvZiBsaW5rZ2l0OmdpdC1mc2NrWzFdLiBTZWUKKwl0aGUgYGZzY2suc2tpcExpc3RgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKK2ZldGNoLnVucGFja0xpbWl0OjoKKwlJZiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgZmV0Y2hlZCBvdmVyIHRoZSBHaXQgbmF0aXZlCisJdHJhbnNmZXIgaXMgYmVsb3cgdGhpcworCWxpbWl0LCB0aGVuIHRoZSBvYmplY3RzIHdpbGwgYmUgdW5wYWNrZWQgaW50byBsb29zZSBvYmplY3QKKwlmaWxlcy4gSG93ZXZlciBpZiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIG9iamVjdHMgZXF1YWxzIG9yCisJZXhjZWVkcyB0aGlzIGxpbWl0IHRoZW4gdGhlIHJlY2VpdmVkIHBhY2sgd2lsbCBiZSBzdG9yZWQgYXMKKwlhIHBhY2ssIGFmdGVyIGFkZGluZyBhbnkgbWlzc2luZyBkZWx0YSBiYXNlcy4gIFN0b3JpbmcgdGhlCisJcGFjayBmcm9tIGEgcHVzaCBjYW4gbWFrZSB0aGUgcHVzaCBvcGVyYXRpb24gY29tcGxldGUgZmFzdGVyLAorCWVzcGVjaWFsbHkgb24gc2xvdyBmaWxlc3lzdGVtcy4gIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZgorCWB0cmFuc2Zlci51bnBhY2tMaW1pdGAgaXMgdXNlZCBpbnN0ZWFkLgorCitmZXRjaC5wcnVuZTo6CisJSWYgdHJ1ZSwgZmV0Y2ggd2lsbCBhdXRvbWF0aWNhbGx5IGJlaGF2ZSBhcyBpZiB0aGUgYC0tcHJ1bmVgCisJb3B0aW9uIHdhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgU2VlIGFsc28gYHJlbW90ZS48bmFtZT4ucHJ1bmVgCisJYW5kIHRoZSBQUlVOSU5HIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK2ZldGNoLnBydW5lVGFnczo6CisJSWYgdHJ1ZSwgZmV0Y2ggd2lsbCBhdXRvbWF0aWNhbGx5IGJlaGF2ZSBhcyBpZiB0aGUKKwlgcmVmcy90YWdzLyo6cmVmcy90YWdzLypgIHJlZnNwZWMgd2FzIHByb3ZpZGVkIHdoZW4gcHJ1bmluZywKKwlpZiBub3Qgc2V0IGFscmVhZHkuIFRoaXMgYWxsb3dzIGZvciBzZXR0aW5nIGJvdGggdGhpcyBvcHRpb24KKwlhbmQgYGZldGNoLnBydW5lYCB0byBtYWludGFpbiBhIDE9MSBtYXBwaW5nIHRvIHVwc3RyZWFtCisJcmVmcy4gU2VlIGFsc28gYHJlbW90ZS48bmFtZT4ucHJ1bmVUYWdzYCBhbmQgdGhlIFBSVU5JTkcKKwlzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCitmZXRjaC5vdXRwdXQ6OgorCUNvbnRyb2wgaG93IHJlZiB1cGRhdGUgc3RhdHVzIGlzIHByaW50ZWQuIFZhbGlkIHZhbHVlcyBhcmUKKwlgZnVsbGAgYW5kIGBjb21wYWN0YC4gRGVmYXVsdCB2YWx1ZSBpcyBgZnVsbGAuIFNlZSBzZWN0aW9uCisJT1VUUFVUIGluIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIGZvciBkZXRhaWwuCisKK2ZldGNoLm5lZ290aWF0aW9uQWxnb3JpdGhtOjoKKwlDb250cm9sIGhvdyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tbWl0cyBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeSBpcworCXNlbnQgd2hlbiBuZWdvdGlhdGluZyB0aGUgY29udGVudHMgb2YgdGhlIHBhY2tmaWxlIHRvIGJlIHNlbnQgYnkgdGhlCisJc2VydmVyLiBTZXQgdG8gInNraXBwaW5nIiB0byB1c2UgYW4gYWxnb3JpdGhtIHRoYXQgc2tpcHMgY29tbWl0cyBpbiBhbgorCWVmZm9ydCB0byBjb252ZXJnZSBmYXN0ZXIsIGJ1dCBtYXkgcmVzdWx0IGluIGEgbGFyZ2VyLXRoYW4tbmVjZXNzYXJ5CisJcGFja2ZpbGU7IFRoZSBkZWZhdWx0IGlzICJkZWZhdWx0IiB3aGljaCBpbnN0cnVjdHMgR2l0IHRvIHVzZSB0aGUgZGVmYXVsdCBhbGdvcml0aG0KKwl0aGF0IG5ldmVyIHNraXBzIGNvbW1pdHMgKHVubGVzcyB0aGUgc2VydmVyIGhhcyBhY2tub3dsZWRnZWQgaXQgb3Igb25lCisJb2YgaXRzIGRlc2NlbmRhbnRzKS4gSWYgYGZlYXR1cmUuZXhwZXJpbWVudGFsYCBpcyBlbmFibGVkLCB0aGVuIHRoaXMKKwlzZXR0aW5nIGRlZmF1bHRzIHRvICJza2lwcGluZyIuCisJVW5rbm93biB2YWx1ZXMgd2lsbCBjYXVzZSAnZ2l0IGZldGNoJyB0byBlcnJvciBvdXQuCisrCitTZWUgYWxzbyB0aGUgYC0tbmVnb3RpYXRpb24tdGlwYCBvcHRpb24gZm9yIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCitmZXRjaC5zaG93Rm9yY2VkVXBkYXRlczo6CisJU2V0IHRvIGZhbHNlIHRvIGVuYWJsZSBgLS1uby1zaG93LWZvcmNlZC11cGRhdGVzYCBpbgorCWxpbmtnaXQ6Z2l0LWZldGNoWzFdIGFuZCBsaW5rZ2l0OmdpdC1wdWxsWzFdIGNvbW1hbmRzLgorCURlZmF1bHRzIHRvIHRydWUuCisKK2ZldGNoLnBhcmFsbGVsOjoKKwlTcGVjaWZpZXMgdGhlIG1heGltYWwgbnVtYmVyIG9mIGZldGNoIG9wZXJhdGlvbnMgdG8gYmUgcnVuIGluIHBhcmFsbGVsCisJYXQgYSB0aW1lIChzdWJtb2R1bGVzLCBvciByZW1vdGVzIHdoZW4gdGhlIGAtLW11bHRpcGxlYCBvcHRpb24gb2YKKwlsaW5rZ2l0OmdpdC1mZXRjaFsxXSBpcyBpbiBlZmZlY3QpLgorKworQSB2YWx1ZSBvZiAwIHdpbGwgZ2l2ZSBzb21lIHJlYXNvbmFibGUgZGVmYXVsdC4gSWYgdW5zZXQsIGl0IGRlZmF1bHRzIHRvIDEuCisrCitGb3Igc3VibW9kdWxlcywgdGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBgc3VibW9kdWxlLmZldGNoSm9ic2AKK2NvbmZpZyBzZXR0aW5nLgorCitmZXRjaC53cml0ZUNvbW1pdEdyYXBoOjoKKwlTZXQgdG8gdHJ1ZSB0byB3cml0ZSBhIGNvbW1pdC1ncmFwaCBhZnRlciBldmVyeSBgZ2l0IGZldGNoYCBjb21tYW5kCisJdGhhdCBkb3dubG9hZHMgYSBwYWNrLWZpbGUgZnJvbSBhIHJlbW90ZS4gVXNpbmcgdGhlIGAtLXNwbGl0YCBvcHRpb24sCisJbW9zdCBleGVjdXRpb25zIHdpbGwgY3JlYXRlIGEgdmVyeSBzbWFsbCBjb21taXQtZ3JhcGggZmlsZSBvbiB0b3Agb2YKKwl0aGUgZXhpc3RpbmcgY29tbWl0LWdyYXBoIGZpbGUocykuIE9jY2FzaW9uYWxseSwgdGhlc2UgZmlsZXMgd2lsbAorCW1lcmdlIGFuZCB0aGUgd3JpdGUgbWF5IHRha2UgbG9uZ2VyLiBIYXZpbmcgYW4gdXBkYXRlZCBjb21taXQtZ3JhcGgKKwlmaWxlIGhlbHBzIHBlcmZvcm1hbmNlIG9mIG1hbnkgR2l0IGNvbW1hbmRzLCBpbmNsdWRpbmcgYGdpdCBtZXJnZS1iYXNlYCwKKwlgZ2l0IHB1c2ggLWZgLCBhbmQgYGdpdCBsb2cgLS1ncmFwaGAuIERlZmF1bHRzIHRvIGZhbHNlLCB1bmxlc3MKKwlgZmVhdHVyZS5leHBlcmltZW50YWxgIGlzIHRydWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9maWx0ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZmlsdGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGRmZTBiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZmlsdGVyLnR4dApAQCAtMCwwICsxLDkgQEAKK2ZpbHRlci48ZHJpdmVyPi5jbGVhbjo6CisJVGhlIGNvbW1hbmQgd2hpY2ggaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBjb250ZW50IG9mIGEgd29ya3RyZWUKKwlmaWxlIHRvIGEgYmxvYiB1cG9uIGNoZWNraW4uICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvcgorCWRldGFpbHMuCisKK2ZpbHRlci48ZHJpdmVyPi5zbXVkZ2U6OgorCVRoZSBjb21tYW5kIHdoaWNoIGlzIHVzZWQgdG8gY29udmVydCB0aGUgY29udGVudCBvZiBhIGJsb2IKKwlvYmplY3QgdG8gYSB3b3JrdHJlZSBmaWxlIHVwb24gY2hlY2tvdXQuICBTZWUKKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mbXQtbWVyZ2UtbXNnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ZtdC1tZXJnZS1tc2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3M2NmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mbXQtbWVyZ2UtbXNnLnR4dApAQCAtMCwwICsxLDEwIEBACittZXJnZS5icmFuY2hkZXNjOjoKKwlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoCisJdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGVtLiAgRGVmYXVsdHMKKwl0byBmYWxzZS4KKworbWVyZ2UubG9nOjoKKwlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoIGF0CisJbW9zdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBvbmUtbGluZSBkZXNjcmlwdGlvbnMgZnJvbSB0aGUKKwlhY3R1YWwgY29tbWl0cyB0aGF0IGFyZSBiZWluZyBtZXJnZWQuICBEZWZhdWx0cyB0byBmYWxzZSwgYW5kCisJdHJ1ZSBpcyBhIHN5bm9ueW0gZm9yIDIwLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2Zvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjN2JkNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2Zvcm1hdC50eHQKQEAgLTAsMCArMSwxMjUgQEAKK2Zvcm1hdC5hdHRhY2g6OgorCUVuYWJsZSBtdWx0aXBhcnQvbWl4ZWQgYXR0YWNobWVudHMgYXMgdGhlIGRlZmF1bHQgZm9yCisJJ2Zvcm1hdC1wYXRjaCcuICBUaGUgdmFsdWUgY2FuIGFsc28gYmUgYSBkb3VibGUgcXVvdGVkIHN0cmluZworCXdoaWNoIHdpbGwgZW5hYmxlIGF0dGFjaG1lbnRzIGFzIHRoZSBkZWZhdWx0IGFuZCBzZXQgdGhlCisJdmFsdWUgYXMgdGhlIGJvdW5kYXJ5LiAgU2VlIHRoZSAtLWF0dGFjaCBvcHRpb24gaW4KKwlsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0uCisKK2Zvcm1hdC5mcm9tOjoKKwlQcm92aWRlcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGAtLWZyb21gIG9wdGlvbiB0byBmb3JtYXQtcGF0Y2guCisJQWNjZXB0cyBhIGJvb2xlYW4gdmFsdWUsIG9yIGEgbmFtZSBhbmQgZW1haWwgYWRkcmVzcy4gIElmIGZhbHNlLAorCWZvcm1hdC1wYXRjaCBkZWZhdWx0cyB0byBgLS1uby1mcm9tYCwgdXNpbmcgY29tbWl0IGF1dGhvcnMgZGlyZWN0bHkgaW4KKwl0aGUgIkZyb206IiBmaWVsZCBvZiBwYXRjaCBtYWlscy4gIElmIHRydWUsIGZvcm1hdC1wYXRjaCBkZWZhdWx0cyB0bworCWAtLWZyb21gLCB1c2luZyB5b3VyIGNvbW1pdHRlciBpZGVudGl0eSBpbiB0aGUgIkZyb206IiBmaWVsZCBvZiBwYXRjaAorCW1haWxzIGFuZCBpbmNsdWRpbmcgYSAiRnJvbToiIGZpZWxkIGluIHRoZSBib2R5IG9mIHRoZSBwYXRjaCBtYWlsIGlmCisJZGlmZmVyZW50LiAgSWYgc2V0IHRvIGEgbm9uLWJvb2xlYW4gdmFsdWUsIGZvcm1hdC1wYXRjaCB1c2VzIHRoYXQKKwl2YWx1ZSBpbnN0ZWFkIG9mIHlvdXIgY29tbWl0dGVyIGlkZW50aXR5LiAgRGVmYXVsdHMgdG8gZmFsc2UuCisKK2Zvcm1hdC5udW1iZXJlZDo6CisJQSBib29sZWFuIHdoaWNoIGNhbiBlbmFibGUgb3IgZGlzYWJsZSBzZXF1ZW5jZSBudW1iZXJzIGluIHBhdGNoCisJc3ViamVjdHMuICBJdCBkZWZhdWx0cyB0byAiYXV0byIgd2hpY2ggZW5hYmxlcyBpdCBvbmx5IGlmIHRoZXJlCisJaXMgbW9yZSB0aGFuIG9uZSBwYXRjaC4gIEl0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBhbGwKKwltZXNzYWdlcyBieSBzZXR0aW5nIGl0IHRvICJ0cnVlIiBvciAiZmFsc2UiLiAgU2VlIC0tbnVtYmVyZWQKKwlvcHRpb24gaW4gbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCitmb3JtYXQuaGVhZGVyczo6CisJQWRkaXRpb25hbCBlbWFpbCBoZWFkZXJzIHRvIGluY2x1ZGUgaW4gYSBwYXRjaCB0byBiZSBzdWJtaXR0ZWQKKwlieSBtYWlsLiAgU2VlIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworZm9ybWF0LnRvOjoKK2Zvcm1hdC5jYzo6CisJQWRkaXRpb25hbCByZWNpcGllbnRzIHRvIGluY2x1ZGUgaW4gYSBwYXRjaCB0byBiZSBzdWJtaXR0ZWQKKwlieSBtYWlsLiAgU2VlIHRoZSAtLXRvIGFuZCAtLWNjIG9wdGlvbnMgaW4KKwlsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0uCisKK2Zvcm1hdC5zdWJqZWN0UHJlZml4OjoKKwlUaGUgZGVmYXVsdCBmb3IgZm9ybWF0LXBhdGNoIGlzIHRvIG91dHB1dCBmaWxlcyB3aXRoIHRoZSAnW1BBVENIXScKKwlzdWJqZWN0IHByZWZpeC4gVXNlIHRoaXMgdmFyaWFibGUgdG8gY2hhbmdlIHRoYXQgcHJlZml4LgorCitmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb246OgorCVRoZSBkZWZhdWx0IG1vZGUgZm9yIGZvcm1hdC1wYXRjaCB0byBkZXRlcm1pbmUgd2hpY2ggcGFydHMgb2YKKwl0aGUgY292ZXIgbGV0dGVyIHdpbGwgYmUgcG9wdWxhdGVkIHVzaW5nIHRoZSBicmFuY2gncworCWRlc2NyaXB0aW9uLiBTZWUgdGhlIGAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb25gIG9wdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworZm9ybWF0LnNpZ25hdHVyZTo6CisJVGhlIGRlZmF1bHQgZm9yIGZvcm1hdC1wYXRjaCBpcyB0byBvdXRwdXQgYSBzaWduYXR1cmUgY29udGFpbmluZworCXRoZSBHaXQgdmVyc2lvbiBudW1iZXIuIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGNoYW5nZSB0aGF0IGRlZmF1bHQuCisJU2V0IHRoaXMgdmFyaWFibGUgdG8gdGhlIGVtcHR5IHN0cmluZyAoIiIpIHRvIHN1cHByZXNzCisJc2lnbmF0dXJlIGdlbmVyYXRpb24uCisKK2Zvcm1hdC5zaWduYXR1cmVGaWxlOjoKKwlXb3JrcyBqdXN0IGxpa2UgZm9ybWF0LnNpZ25hdHVyZSBleGNlcHQgdGhlIGNvbnRlbnRzIG9mIHRoZQorCWZpbGUgc3BlY2lmaWVkIGJ5IHRoaXMgdmFyaWFibGUgd2lsbCBiZSB1c2VkIGFzIHRoZSBzaWduYXR1cmUuCisKK2Zvcm1hdC5zdWZmaXg6OgorCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGZpbGVzIHdpdGggdGhlIHN1ZmZpeAorCWAucGF0Y2hgLiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBzdWZmaXggKG1ha2Ugc3VyZSB0bworCWluY2x1ZGUgdGhlIGRvdCBpZiB5b3Ugd2FudCBpdCkuCisKK2Zvcm1hdC5wcmV0dHk6OgorCVRoZSBkZWZhdWx0IHByZXR0eSBmb3JtYXQgZm9yIGxvZy9zaG93L3doYXRjaGFuZ2VkIGNvbW1hbmQsCisJU2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSwgbGlua2dpdDpnaXQtc2hvd1sxXSwKKwlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXS4KKworZm9ybWF0LnRocmVhZDo6CisJVGhlIGRlZmF1bHQgdGhyZWFkaW5nIHN0eWxlIGZvciAnZ2l0IGZvcm1hdC1wYXRjaCcuICBDYW4gYmUKKwlhIGJvb2xlYW4gdmFsdWUsIG9yIGBzaGFsbG93YCBvciBgZGVlcGAuICBgc2hhbGxvd2AgdGhyZWFkaW5nCisJbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBoZWFkIG9mIHRoZSBzZXJpZXMsCisJd2hlcmUgdGhlIGhlYWQgaXMgY2hvc2VuIGZyb20gdGhlIGNvdmVyIGxldHRlciwgdGhlCisJYC0taW4tcmVwbHktdG9gLCBhbmQgdGhlIGZpcnN0IHBhdGNoIG1haWwsIGluIHRoaXMgb3JkZXIuCisJYGRlZXBgIHRocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIHByZXZpb3VzIG9uZS4KKwlBIHRydWUgYm9vbGVhbiB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBgc2hhbGxvd2AsIGFuZCBhIGZhbHNlCisJdmFsdWUgZGlzYWJsZXMgdGhyZWFkaW5nLgorCitmb3JtYXQuc2lnbk9mZjo6CisJQSBib29sZWFuIHZhbHVlIHdoaWNoIGxldHMgeW91IGVuYWJsZSB0aGUgYC1zLy0tc2lnbm9mZmAgb3B0aW9uIG9mCisJZm9ybWF0LXBhdGNoIGJ5IGRlZmF1bHQuICpOb3RlOiogQWRkaW5nIHRoZSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGEKKwlwYXRjaCBzaG91bGQgYmUgYSBjb25zY2lvdXMgYWN0IGFuZCBtZWFucyB0aGF0IHlvdSBjZXJ0aWZ5IHlvdSBoYXZlCisJdGhlIHJpZ2h0cyB0byBzdWJtaXQgdGhpcyB3b3JrIHVuZGVyIHRoZSBzYW1lIG9wZW4gc291cmNlIGxpY2Vuc2UuCisJUGxlYXNlIHNlZSB0aGUgJ1N1Ym1pdHRpbmdQYXRjaGVzJyBkb2N1bWVudCBmb3IgZnVydGhlciBkaXNjdXNzaW9uLgorCitmb3JtYXQuY292ZXJMZXR0ZXI6OgorCUEgYm9vbGVhbiB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBjb3Zlci1sZXR0ZXIgd2hlbgorCWZvcm1hdC1wYXRjaCBpcyBpbnZva2VkLCBidXQgaW4gYWRkaXRpb24gY2FuIGJlIHNldCB0byAiYXV0byIsIHRvCisJZ2VuZXJhdGUgYSBjb3Zlci1sZXR0ZXIgb25seSB3aGVuIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBwYXRjaC4KKwlEZWZhdWx0IGlzIGZhbHNlLgorCitmb3JtYXQub3V0cHV0RGlyZWN0b3J5OjoKKwlTZXQgYSBjdXN0b20gZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSByZXN1bHRpbmcgZmlsZXMgaW5zdGVhZCBvZiB0aGUKKwljdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBBbGwgZGlyZWN0b3J5IGNvbXBvbmVudHMgd2lsbCBiZSBjcmVhdGVkLgorCitmb3JtYXQudXNlQXV0b0Jhc2U6OgorCUEgYm9vbGVhbiB2YWx1ZSB3aGljaCBsZXRzIHlvdSBlbmFibGUgdGhlIGAtLWJhc2U9YXV0b2Agb3B0aW9uIG9mCisJZm9ybWF0LXBhdGNoIGJ5IGRlZmF1bHQuCisKK2Zvcm1hdC5ub3Rlczo6CisJUHJvdmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBgLS1ub3Rlc2Agb3B0aW9uIHRvCisJZm9ybWF0LXBhdGNoLiBBY2NlcHRzIGEgYm9vbGVhbiB2YWx1ZSwgb3IgYSByZWYgd2hpY2ggc3BlY2lmaWVzCisJd2hlcmUgdG8gZ2V0IG5vdGVzLiBJZiBmYWxzZSwgZm9ybWF0LXBhdGNoIGRlZmF1bHRzIHRvCisJYC0tbm8tbm90ZXNgLiBJZiB0cnVlLCBmb3JtYXQtcGF0Y2ggZGVmYXVsdHMgdG8gYC0tbm90ZXNgLiBJZgorCXNldCB0byBhIG5vbi1ib29sZWFuIHZhbHVlLCBmb3JtYXQtcGF0Y2ggZGVmYXVsdHMgdG8KKwlgLS1ub3Rlcz08cmVmPmAsIHdoZXJlIGByZWZgIGlzIHRoZSBub24tYm9vbGVhbiB2YWx1ZS4gRGVmYXVsdHMKKwl0byBmYWxzZS4KKysKK0lmIG9uZSB3aXNoZXMgdG8gdXNlIHRoZSByZWYgYHJlZi9ub3Rlcy90cnVlYCwgcGxlYXNlIHVzZSB0aGF0IGxpdGVyYWwKK2luc3RlYWQuCisrCitUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyBpbiBvcmRlciB0byBhbGxvdworbXVsdGlwbGUgbm90ZXMgcmVmcyB0byBiZSBpbmNsdWRlZC4gSW4gdGhhdCBjYXNlLCBpdCB3aWxsIGJlaGF2ZQorc2ltaWxhcmx5IHRvIG11bHRpcGxlIGAtLVtuby1dbm90ZXNbPV1gIG9wdGlvbnMgcGFzc2VkIGluLiBUaGF0IGlzLCBhCit2YWx1ZSBvZiBgdHJ1ZWAgd2lsbCBzaG93IHRoZSBkZWZhdWx0IG5vdGVzLCBhIHZhbHVlIG9mIGA8cmVmPmAgd2lsbAorYWxzbyBzaG93IG5vdGVzIGZyb20gdGhhdCBub3RlcyByZWYgYW5kIGEgdmFsdWUgb2YgYGZhbHNlYCB3aWxsIG5lZ2F0ZQorcHJldmlvdXMgY29uZmlndXJhdGlvbnMgYW5kIG5vdCBzaG93IG5vdGVzLgorKworRm9yIGV4YW1wbGUsCisrCistLS0tLS0tLS0tLS0KK1tmb3JtYXRdCisJbm90ZXMgPSB0cnVlCisJbm90ZXMgPSBmb28KKwlub3RlcyA9IGZhbHNlCisJbm90ZXMgPSBiYXIKKy0tLS0tLS0tLS0tLQorKword2lsbCBvbmx5IHNob3cgbm90ZXMgZnJvbSBgcmVmcy9ub3Rlcy9iYXJgLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZnNjay50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mc2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTBlOGMzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZnNjay50eHQKQEAgLTAsMCArMSw2NyBAQAorZnNjay48bXNnLWlkPjo6CisJRHVyaW5nIGZzY2sgZ2l0IG1heSBmaW5kIGlzc3VlcyB3aXRoIGxlZ2FjeSBkYXRhIHdoaWNoCisJd291bGRuJ3QgYmUgZ2VuZXJhdGVkIGJ5IGN1cnJlbnQgdmVyc2lvbnMgb2YgZ2l0LCBhbmQgd2hpY2gKKwl3b3VsZG4ndCBiZSBzZW50IG92ZXIgdGhlIHdpcmUgaWYgYHRyYW5zZmVyLmZzY2tPYmplY3RzYCB3YXMKKwlzZXQuIFRoaXMgZmVhdHVyZSBpcyBpbnRlbmRlZCB0byBzdXBwb3J0IHdvcmtpbmcgd2l0aCBsZWdhY3kKKwlyZXBvc2l0b3JpZXMgY29udGFpbmluZyBzdWNoIGRhdGEuCisrCitTZXR0aW5nIGBmc2NrLjxtc2ctaWQ+YCB3aWxsIGJlIHBpY2tlZCB1cCBieSBsaW5rZ2l0OmdpdC1mc2NrWzFdLCBidXQKK3RvIGFjY2VwdCBwdXNoZXMgb2Ygc3VjaCBkYXRhIHNldCBgcmVjZWl2ZS5mc2NrLjxtc2ctaWQ+YCBpbnN0ZWFkLCBvcgordG8gY2xvbmUgb3IgZmV0Y2ggaXQgc2V0IGBmZXRjaC5mc2NrLjxtc2ctaWQ+YC4KKysKK1RoZSByZXN0IG9mIHRoZSBkb2N1bWVudGF0aW9uIGRpc2N1c3NlcyBgZnNjay4qYCBmb3IgYnJldml0eSwgYnV0IHRoZQorc2FtZSBhcHBsaWVzIGZvciB0aGUgY29ycmVzcG9uZGluZyBgcmVjZWl2ZS5mc2NrLipgIGFuZAorYGZldGNoLjxtc2ctaWQ+LipgLiB2YXJpYWJsZXMuCisrCitVbmxpa2UgdmFyaWFibGVzIGxpa2UgYGNvbG9yLnVpYCBhbmQgYGNvcmUuZWRpdG9yYCB0aGUKK2ByZWNlaXZlLmZzY2suPG1zZy1pZD5gIGFuZCBgZmV0Y2guZnNjay48bXNnLWlkPmAgdmFyaWFibGVzIHdpbGwgbm90CitmYWxsIGJhY2sgb24gdGhlIGBmc2NrLjxtc2ctaWQ+YCBjb25maWd1cmF0aW9uIGlmIHRoZXkgYXJlbid0IHNldC4gVG8KK3VuaWZvcm1seSBjb25maWd1cmUgdGhlIHNhbWUgZnNjayBzZXR0aW5ncyBpbiBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcworYWxsIHRocmVlIG9mIHRoZW0gdGhleSBtdXN0IGFsbCBzZXQgdG8gdGhlIHNhbWUgdmFsdWVzLgorKworV2hlbiBgZnNjay48bXNnLWlkPmAgaXMgc2V0LCBlcnJvcnMgY2FuIGJlIHN3aXRjaGVkIHRvIHdhcm5pbmdzIGFuZAordmljZSB2ZXJzYSBieSBjb25maWd1cmluZyB0aGUgYGZzY2suPG1zZy1pZD5gIHNldHRpbmcgd2hlcmUgdGhlCitgPG1zZy1pZD5gIGlzIHRoZSBmc2NrIG1lc3NhZ2UgSUQgYW5kIHRoZSB2YWx1ZSBpcyBvbmUgb2YgYGVycm9yYCwKK2B3YXJuYCBvciBgaWdub3JlYC4gRm9yIGNvbnZlbmllbmNlLCBmc2NrIHByZWZpeGVzIHRoZSBlcnJvci93YXJuaW5nCit3aXRoIHRoZSBtZXNzYWdlIElELCBlLmcuICJtaXNzaW5nRW1haWw6IGludmFsaWQgYXV0aG9yL2NvbW1pdHRlcgorbGluZSAtIG1pc3NpbmcgZW1haWwiIG1lYW5zIHRoYXQgc2V0dGluZyBgZnNjay5taXNzaW5nRW1haWwgPSBpZ25vcmVgCit3aWxsIGhpZGUgdGhhdCBpc3N1ZS4KKysKK0luIGdlbmVyYWwsIGl0IGlzIGJldHRlciB0byBlbnVtZXJhdGUgZXhpc3Rpbmcgb2JqZWN0cyB3aXRoIHByb2JsZW1zCit3aXRoIGBmc2NrLnNraXBMaXN0YCwgaW5zdGVhZCBvZiBsaXN0aW5nIHRoZSBraW5kIG9mIGJyZWFrYWdlcyB0aGVzZQorcHJvYmxlbWF0aWMgb2JqZWN0cyBzaGFyZSB0byBiZSBpZ25vcmVkLCBhcyBkb2luZyB0aGUgbGF0dGVyIHdpbGwKK2FsbG93IG5ldyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgYnJlYWthZ2VzIGdvIHVubm90aWNlZC4KKysKK1NldHRpbmcgYW4gdW5rbm93biBgZnNjay48bXNnLWlkPmAgdmFsdWUgd2lsbCBjYXVzZSBmc2NrIHRvIGRpZSwgYnV0Citkb2luZyB0aGUgc2FtZSBmb3IgYHJlY2VpdmUuZnNjay48bXNnLWlkPmAgYW5kIGBmZXRjaC5mc2NrLjxtc2ctaWQ+YAord2lsbCBvbmx5IGNhdXNlIGdpdCB0byB3YXJuLgorCitmc2NrLnNraXBMaXN0OjoKKwlUaGUgcGF0aCB0byBhIGxpc3Qgb2Ygb2JqZWN0IG5hbWVzIChpLmUuIG9uZSB1bmFiYnJldmlhdGVkIFNIQS0xIHBlcgorCWxpbmUpIHRoYXQgYXJlIGtub3duIHRvIGJlIGJyb2tlbiBpbiBhIG5vbi1mYXRhbCB3YXkgYW5kIHNob3VsZAorCWJlIGlnbm9yZWQuIE9uIHZlcnNpb25zIG9mIEdpdCAyLjIwIGFuZCBsYXRlciBjb21tZW50cyAoJyMnKSwgZW1wdHkKKwlsaW5lcywgYW5kIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQuIEV2ZXJ5dGhpbmcKKwlidXQgYSBTSEEtMSBwZXIgbGluZSB3aWxsIGVycm9yIG91dCBvbiBvbGRlciB2ZXJzaW9ucy4KKysKK1RoaXMgZmVhdHVyZSBpcyB1c2VmdWwgd2hlbiBhbiBlc3RhYmxpc2hlZCBwcm9qZWN0IHNob3VsZCBiZSBhY2NlcHRlZAorZGVzcGl0ZSBlYXJseSBjb21taXRzIGNvbnRhaW5pbmcgZXJyb3JzIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkCitzdWNoIGFzIGludmFsaWQgY29tbWl0dGVyIGVtYWlsIGFkZHJlc3Nlcy4gIE5vdGU6IGNvcnJ1cHQgb2JqZWN0cworY2Fubm90IGJlIHNraXBwZWQgd2l0aCB0aGlzIHNldHRpbmcuCisrCitMaWtlIGBmc2NrLjxtc2ctaWQ+YCB0aGlzIHZhcmlhYmxlIGhhcyBjb3JyZXNwb25kaW5nCitgcmVjZWl2ZS5mc2NrLnNraXBMaXN0YCBhbmQgYGZldGNoLmZzY2suc2tpcExpc3RgIHZhcmlhbnRzLgorKworVW5saWtlIHZhcmlhYmxlcyBsaWtlIGBjb2xvci51aWAgYW5kIGBjb3JlLmVkaXRvcmAgdGhlCitgcmVjZWl2ZS5mc2NrLnNraXBMaXN0YCBhbmQgYGZldGNoLmZzY2suc2tpcExpc3RgIHZhcmlhYmxlcyB3aWxsIG5vdAorZmFsbCBiYWNrIG9uIHRoZSBgZnNjay5za2lwTGlzdGAgY29uZmlndXJhdGlvbiBpZiB0aGV5IGFyZW4ndCBzZXQuIFRvCit1bmlmb3JtbHkgY29uZmlndXJlIHRoZSBzYW1lIGZzY2sgc2V0dGluZ3MgaW4gZGlmZmVyZW50IGNpcmN1bXN0YW5jZXMKK2FsbCB0aHJlZSBvZiB0aGVtIHRoZXkgbXVzdCBhbGwgc2V0IHRvIHRoZSBzYW1lIHZhbHVlcy4KKysKK09sZGVyIHZlcnNpb25zIG9mIEdpdCAoYmVmb3JlIDIuMjApIGRvY3VtZW50ZWQgdGhhdCB0aGUgb2JqZWN0IG5hbWVzCitsaXN0IHNob3VsZCBiZSBzb3J0ZWQuIFRoaXMgd2FzIG5ldmVyIGEgcmVxdWlyZW1lbnQsIHRoZSBvYmplY3QgbmFtZXMKK2NvdWxkIGFwcGVhciBpbiBhbnkgb3JkZXIsIGJ1dCB3aGVuIHJlYWRpbmcgdGhlIGxpc3Qgd2UgdHJhY2tlZCB3aGV0aGVyCit0aGUgbGlzdCB3YXMgc29ydGVkIGZvciB0aGUgcHVycG9zZXMgb2YgYW4gaW50ZXJuYWwgYmluYXJ5IHNlYXJjaAoraW1wbGVtZW50YXRpb24sIHdoaWNoIGNvdWxkIHNhdmUgaXRzZWxmIHNvbWUgd29yayB3aXRoIGFuIGFscmVhZHkgc29ydGVkCitsaXN0LiBVbmxlc3MgeW91IGhhZCBhIGh1bW9uZ291cyBsaXN0IHRoZXJlIHdhcyBubyByZWFzb24gdG8gZ28gb3V0IG9mCit5b3VyIHdheSB0byBwcmUtc29ydCB0aGUgbGlzdC4gQWZ0ZXIgR2l0IHZlcnNpb24gMi4yMCBhIGhhc2ggaW1wbGVtZW50YXRpb24KK2lzIHVzZWQgaW5zdGVhZCwgc28gdGhlcmUncyBub3cgbm8gcmVhc29uIHRvIHByZS1zb3J0IHRoZSBsaXN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZ2MudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ2MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZWEwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9nYy50eHQKQEAgLTAsMCArMSwxMzYgQEAKK2djLmFnZ3Jlc3NpdmVEZXB0aDo6CisJVGhlIGRlcHRoIHBhcmFtZXRlciB1c2VkIGluIHRoZSBkZWx0YSBjb21wcmVzc2lvbgorCWFsZ29yaXRobSB1c2VkIGJ5ICdnaXQgZ2MgLS1hZ2dyZXNzaXZlJy4gIFRoaXMgZGVmYXVsdHMKKwl0byA1MCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZm9yIHRoZSBgLS1kZXB0aGAgb3B0aW9uIHdoZW4KKwlgLS1hZ2dyZXNzaXZlYCBpc24ndCBpbiB1c2UuCisrCitTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgLS1kZXB0aGAgb3B0aW9uIGluCitsaW5rZ2l0OmdpdC1yZXBhY2tbMV0gZm9yIG1vcmUgZGV0YWlscy4KKworZ2MuYWdncmVzc2l2ZVdpbmRvdzo6CisJVGhlIHdpbmRvdyBzaXplIHBhcmFtZXRlciB1c2VkIGluIHRoZSBkZWx0YSBjb21wcmVzc2lvbgorCWFsZ29yaXRobSB1c2VkIGJ5ICdnaXQgZ2MgLS1hZ2dyZXNzaXZlJy4gIFRoaXMgZGVmYXVsdHMKKwl0byAyNTAsIHdoaWNoIGlzIGEgbXVjaCBtb3JlIGFnZ3Jlc3NpdmUgd2luZG93IHNpemUgdGhhbgorCXRoZSBkZWZhdWx0IGAtLXdpbmRvd2Agb2YgMTAuCisrCitTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgLS13aW5kb3dgIG9wdGlvbiBpbgorbGlua2dpdDpnaXQtcmVwYWNrWzFdIGZvciBtb3JlIGRldGFpbHMuCisKK2djLmF1dG86OgorCVdoZW4gdGhlcmUgYXJlIGFwcHJveGltYXRlbHkgbW9yZSB0aGFuIHRoaXMgbWFueSBsb29zZQorCW9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnksIGBnaXQgZ2MgLS1hdXRvYCB3aWxsIHBhY2sgdGhlbS4KKwlTb21lIFBvcmNlbGFpbiBjb21tYW5kcyB1c2UgdGhpcyBjb21tYW5kIHRvIHBlcmZvcm0gYQorCWxpZ2h0LXdlaWdodCBnYXJiYWdlIGNvbGxlY3Rpb24gZnJvbSB0aW1lIHRvIHRpbWUuICBUaGUKKwlkZWZhdWx0IHZhbHVlIGlzIDY3MDAuCisrCitTZXR0aW5nIHRoaXMgdG8gMCBkaXNhYmxlcyBub3Qgb25seSBhdXRvbWF0aWMgcGFja2luZyBiYXNlZCBvbiB0aGUKK251bWJlciBvZiBsb29zZSBvYmplY3RzLCBidXQgYW55IG90aGVyIGhldXJpc3RpYyBgZ2l0IGdjIC0tYXV0b2Agd2lsbAorb3RoZXJ3aXNlIHVzZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyB3b3JrIHRvIGRvLCBzdWNoIGFzCitgZ2MuYXV0b1BhY2tMaW1pdGAuCisKK2djLmF1dG9QYWNrTGltaXQ6OgorCVdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiB0aGlzIG1hbnkgcGFja3MgdGhhdCBhcmUgbm90CisJbWFya2VkIHdpdGggYCoua2VlcGAgZmlsZSBpbiB0aGUgcmVwb3NpdG9yeSwgYGdpdCBnYworCS0tYXV0b2AgY29uc29saWRhdGVzIHRoZW0gaW50byBvbmUgbGFyZ2VyIHBhY2suICBUaGUKKwlkZWZhdWx0IHZhbHVlIGlzIDUwLiAgU2V0dGluZyB0aGlzIHRvIDAgZGlzYWJsZXMgaXQuCisJU2V0dGluZyBgZ2MuYXV0b2AgdG8gMCB3aWxsIGFsc28gZGlzYWJsZSB0aGlzLgorKworU2VlIHRoZSBgZ2MuYmlnUGFja1RocmVzaG9sZGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBiZWxvdy4gV2hlbiBpbgordXNlLCBpdCdsbCBhZmZlY3QgaG93IHRoZSBhdXRvIHBhY2sgbGltaXQgd29ya3MuCisKK2djLmF1dG9EZXRhY2g6OgorCU1ha2UgYGdpdCBnYyAtLWF1dG9gIHJldHVybiBpbW1lZGlhdGVseSBhbmQgcnVuIGluIGJhY2tncm91bmQKKwlpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGl0LiBEZWZhdWx0IGlzIHRydWUuCisKK2djLmJpZ1BhY2tUaHJlc2hvbGQ6OgorCUlmIG5vbi16ZXJvLCBhbGwgcGFja3MgbGFyZ2VyIHRoYW4gdGhpcyBsaW1pdCBhcmUga2VwdCB3aGVuCisJYGdpdCBnY2AgaXMgcnVuLiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBgLS1rZWVwLWJhc2UtcGFja2AKKwlleGNlcHQgdGhhdCBhbGwgcGFja3MgdGhhdCBtZWV0IHRoZSB0aHJlc2hvbGQgYXJlIGtlcHQsIG5vdAorCWp1c3QgdGhlIGJhc2UgcGFjay4gRGVmYXVsdHMgdG8gemVyby4gQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YKKwknaycsICdtJywgb3IgJ2cnIGFyZSBzdXBwb3J0ZWQuCisrCitOb3RlIHRoYXQgaWYgdGhlIG51bWJlciBvZiBrZXB0IHBhY2tzIGlzIG1vcmUgdGhhbiBnYy5hdXRvUGFja0xpbWl0LAordGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIGlnbm9yZWQsIGFsbCBwYWNrcyBleGNlcHQgdGhlIGJhc2UgcGFjaword2lsbCBiZSByZXBhY2tlZC4gQWZ0ZXIgdGhpcyB0aGUgbnVtYmVyIG9mIHBhY2tzIHNob3VsZCBnbyBiZWxvdworZ2MuYXV0b1BhY2tMaW1pdCBhbmQgZ2MuYmlnUGFja1RocmVzaG9sZCBzaG91bGQgYmUgcmVzcGVjdGVkIGFnYWluLgorKworSWYgdGhlIGFtb3VudCBvZiBtZW1vcnkgZXN0aW1hdGVkIGZvciBgZ2l0IHJlcGFja2AgdG8gcnVuIHNtb290aGx5IGlzCitub3QgYXZhaWxhYmxlIGFuZCBgZ2MuYmlnUGFja1RocmVzaG9sZGAgaXMgbm90IHNldCwgdGhlIGxhcmdlc3QgcGFjaword2lsbCBhbHNvIGJlIGV4Y2x1ZGVkICh0aGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHJ1bm5pbmcgYGdpdCBnY2Agd2l0aAorYC0ta2VlcC1iYXNlLXBhY2tgKS4KKworZ2Mud3JpdGVDb21taXRHcmFwaDo6CisJSWYgdHJ1ZSwgdGhlbiBnYyB3aWxsIHJld3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIHdoZW4KKwlsaW5rZ2l0OmdpdC1nY1sxXSBpcyBydW4uIFdoZW4gdXNpbmcgYGdpdCBnYyAtLWF1dG9gCisJdGhlIGNvbW1pdC1ncmFwaCB3aWxsIGJlIHVwZGF0ZWQgaWYgaG91c2VrZWVwaW5nIGlzCisJcmVxdWlyZWQuIERlZmF1bHQgaXMgdHJ1ZS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdC1ncmFwaFsxXQorCWZvciBkZXRhaWxzLgorCitnYy5sb2dFeHBpcnk6OgorCUlmIHRoZSBmaWxlIGdjLmxvZyBleGlzdHMsIHRoZW4gYGdpdCBnYyAtLWF1dG9gIHdpbGwgcHJpbnQKKwlpdHMgY29udGVudCBhbmQgZXhpdCB3aXRoIHN0YXR1cyB6ZXJvIGluc3RlYWQgb2YgcnVubmluZworCXVubGVzcyB0aGF0IGZpbGUgaXMgbW9yZSB0aGFuICdnYy5sb2dFeHBpcnknIG9sZC4gIERlZmF1bHQgaXMKKwkiMS5kYXkiLiAgU2VlIGBnYy5wcnVuZUV4cGlyZWAgZm9yIG1vcmUgd2F5cyB0byBzcGVjaWZ5IGl0cworCXZhbHVlLgorCitnYy5wYWNrUmVmczo6CisJUnVubmluZyBgZ2l0IHBhY2stcmVmc2AgaW4gYSByZXBvc2l0b3J5IHJlbmRlcnMgaXQKKwl1bmNsb25hYmxlIGJ5IEdpdCB2ZXJzaW9ucyBwcmlvciB0byAxLjUuMS4yIG92ZXIgZHVtYgorCXRyYW5zcG9ydHMgc3VjaCBhcyBIVFRQLiAgVGhpcyB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoZXRoZXIKKwknZ2l0IGdjJyBydW5zIGBnaXQgcGFjay1yZWZzYC4gVGhpcyBjYW4gYmUgc2V0IHRvIGBub3RiYXJlYAorCXRvIGVuYWJsZSBpdCB3aXRoaW4gYWxsIG5vbi1iYXJlIHJlcG9zIG9yIGl0IGNhbiBiZSBzZXQgdG8gYQorCWJvb2xlYW4gdmFsdWUuICBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuCisKK2djLnBydW5lRXhwaXJlOjoKKwlXaGVuICdnaXQgZ2MnIGlzIHJ1biwgaXQgd2lsbCBjYWxsICdwcnVuZSAtLWV4cGlyZSAyLndlZWtzLmFnbycuCisJT3ZlcnJpZGUgdGhlIGdyYWNlIHBlcmlvZCB3aXRoIHRoaXMgY29uZmlnIHZhcmlhYmxlLiAgVGhlIHZhbHVlCisJIm5vdyIgbWF5IGJlIHVzZWQgdG8gZGlzYWJsZSB0aGlzIGdyYWNlIHBlcmlvZCBhbmQgYWx3YXlzIHBydW5lCisJdW5yZWFjaGFibGUgb2JqZWN0cyBpbW1lZGlhdGVseSwgb3IgIm5ldmVyIiBtYXkgYmUgdXNlZCB0bworCXN1cHByZXNzIHBydW5pbmcuICBUaGlzIGZlYXR1cmUgaGVscHMgcHJldmVudCBjb3JydXB0aW9uIHdoZW4KKwknZ2l0IGdjJyBydW5zIGNvbmN1cnJlbnRseSB3aXRoIGFub3RoZXIgcHJvY2VzcyB3cml0aW5nIHRvIHRoZQorCXJlcG9zaXRvcnk7IHNlZSB0aGUgIk5PVEVTIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWdjWzFdLgorCitnYy53b3JrdHJlZVBydW5lRXhwaXJlOjoKKwlXaGVuICdnaXQgZ2MnIGlzIHJ1biwgaXQgY2FsbHMKKwknZ2l0IHdvcmt0cmVlIHBydW5lIC0tZXhwaXJlIDMubW9udGhzLmFnbycuCisJVGhpcyBjb25maWcgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc2V0IGEgZGlmZmVyZW50IGdyYWNlCisJcGVyaW9kLiBUaGUgdmFsdWUgIm5vdyIgbWF5IGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgZ3JhY2UKKwlwZXJpb2QgYW5kIHBydW5lIGAkR0lUX0RJUi93b3JrdHJlZXNgIGltbWVkaWF0ZWx5LCBvciAibmV2ZXIiCisJbWF5IGJlIHVzZWQgdG8gc3VwcHJlc3MgcHJ1bmluZy4KKworZ2MucmVmbG9nRXhwaXJlOjoKK2djLjxwYXR0ZXJuPi5yZWZsb2dFeHBpcmU6OgorCSdnaXQgcmVmbG9nIGV4cGlyZScgcmVtb3ZlcyByZWZsb2cgZW50cmllcyBvbGRlciB0aGFuCisJdGhpcyB0aW1lOyBkZWZhdWx0cyB0byA5MCBkYXlzLiBUaGUgdmFsdWUgIm5vdyIgZXhwaXJlcyBhbGwKKwllbnRyaWVzIGltbWVkaWF0ZWx5LCBhbmQgIm5ldmVyIiBzdXBwcmVzc2VzIGV4cGlyYXRpb24KKwlhbHRvZ2V0aGVyLiBXaXRoICI8cGF0dGVybj4iIChlLmcuCisJInJlZnMvc3Rhc2giKSBpbiB0aGUgbWlkZGxlIHRoZSBzZXR0aW5nIGFwcGxpZXMgb25seSB0bworCXRoZSByZWZzIHRoYXQgbWF0Y2ggdGhlIDxwYXR0ZXJuPi4KKworZ2MucmVmbG9nRXhwaXJlVW5yZWFjaGFibGU6OgorZ2MuPHBhdHRlcm4+LnJlZmxvZ0V4cGlyZVVucmVhY2hhYmxlOjoKKwknZ2l0IHJlZmxvZyBleHBpcmUnIHJlbW92ZXMgcmVmbG9nIGVudHJpZXMgb2xkZXIgdGhhbgorCXRoaXMgdGltZSBhbmQgYXJlIG5vdCByZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCB0aXA7CisJZGVmYXVsdHMgdG8gMzAgZGF5cy4gVGhlIHZhbHVlICJub3ciIGV4cGlyZXMgYWxsIGVudHJpZXMKKwlpbW1lZGlhdGVseSwgYW5kICJuZXZlciIgc3VwcHJlc3NlcyBleHBpcmF0aW9uIGFsdG9nZXRoZXIuCisJV2l0aCAiPHBhdHRlcm4+IiAoZS5nLiAicmVmcy9zdGFzaCIpCisJaW4gdGhlIG1pZGRsZSwgdGhlIHNldHRpbmcgYXBwbGllcyBvbmx5IHRvIHRoZSByZWZzIHRoYXQKKwltYXRjaCB0aGUgPHBhdHRlcm4+LgorKworVGhlc2UgdHlwZXMgb2YgZW50cmllcyBhcmUgZ2VuZXJhbGx5IGNyZWF0ZWQgYXMgYSByZXN1bHQgb2YgdXNpbmcgYGdpdAorY29tbWl0IC0tYW1lbmRgIG9yIGBnaXQgcmViYXNlYCBhbmQgYXJlIHRoZSBjb21taXRzIHByaW9yIHRvIHRoZSBhbWVuZAorb3IgcmViYXNlIG9jY3VycmluZy4gIFNpbmNlIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50Citwcm9qZWN0IG1vc3QgdXNlcnMgd2lsbCB3YW50IHRvIGV4cGlyZSB0aGVtIHNvb25lciwgd2hpY2ggaXMgd2h5IHRoZQorZGVmYXVsdCBpcyBtb3JlIGFnZ3Jlc3NpdmUgdGhhbiBgZ2MucmVmbG9nRXhwaXJlYC4KKworZ2MucmVyZXJlUmVzb2x2ZWQ6OgorCVJlY29yZHMgb2YgY29uZmxpY3RlZCBtZXJnZSB5b3UgcmVzb2x2ZWQgZWFybGllciBhcmUKKwlrZXB0IGZvciB0aGlzIG1hbnkgZGF5cyB3aGVuICdnaXQgcmVyZXJlIGdjJyBpcyBydW4uCisJWW91IGNhbiBhbHNvIHVzZSBtb3JlIGh1bWFuLXJlYWRhYmxlICIxLm1vbnRoLmFnbyIsIGV0Yy4KKwlUaGUgZGVmYXVsdCBpcyA2MCBkYXlzLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlcmVyZVsxXS4KKworZ2MucmVyZXJlVW5yZXNvbHZlZDo6CisJUmVjb3JkcyBvZiBjb25mbGljdGVkIG1lcmdlIHlvdSBoYXZlIG5vdCByZXNvbHZlZCBhcmUKKwlrZXB0IGZvciB0aGlzIG1hbnkgZGF5cyB3aGVuICdnaXQgcmVyZXJlIGdjJyBpcyBydW4uCisJWW91IGNhbiBhbHNvIHVzZSBtb3JlIGh1bWFuLXJlYWRhYmxlICIxLm1vbnRoLmFnbyIsIGV0Yy4KKwlUaGUgZGVmYXVsdCBpcyAxNSBkYXlzLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlcmVyZVsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2dpdGN2cy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9naXRjdnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZGE0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9naXRjdnMudHh0CkBAIC0wLDAgKzEsNjcgQEAKK2dpdGN2cy5jb21taXRNc2dBbm5vdGF0aW9uOjoKKwlBcHBlbmQgdGhpcyBzdHJpbmcgdG8gZWFjaCBjb21taXQgbWVzc2FnZS4gU2V0IHRvIGVtcHR5IHN0cmluZworCXRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLiBEZWZhdWx0cyB0byAidmlhIGdpdC1DVlMgZW11bGF0b3IiLgorCitnaXRjdnMuZW5hYmxlZDo6CisJV2hldGhlciB0aGUgQ1ZTIHNlcnZlciBpbnRlcmZhY2UgaXMgZW5hYmxlZCBmb3IgdGhpcyByZXBvc2l0b3J5LgorCVNlZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0uCisKK2dpdGN2cy5sb2dGaWxlOjoKKwlQYXRoIHRvIGEgbG9nIGZpbGUgd2hlcmUgdGhlIENWUyBzZXJ2ZXIgaW50ZXJmYWNlIHdlbGwuLi4gbG9ncworCXZhcmlvdXMgc3R1ZmYuIFNlZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0uCisKK2dpdGN2cy51c2VjcmxmYXR0cjo6CisJSWYgdHJ1ZSwgdGhlIHNlcnZlciB3aWxsIGxvb2sgdXAgdGhlIGVuZC1vZi1saW5lIGNvbnZlcnNpb24KKwlhdHRyaWJ1dGVzIGZvciBmaWxlcyB0byBkZXRlcm1pbmUgdGhlIGAta2AgbW9kZXMgdG8gdXNlLiBJZgorCXRoZSBhdHRyaWJ1dGVzIGZvcmNlIEdpdCB0byB0cmVhdCBhIGZpbGUgYXMgdGV4dCwKKwl0aGUgYC1rYCBtb2RlIHdpbGwgYmUgbGVmdCBibGFuayBzbyBDVlMgY2xpZW50cyB3aWxsCisJdHJlYXQgaXQgYXMgdGV4dC4gSWYgdGhleSBzdXBwcmVzcyB0ZXh0IGNvbnZlcnNpb24sIHRoZSBmaWxlCisJd2lsbCBiZSBzZXQgd2l0aCAnLWtiJyBtb2RlLCB3aGljaCBzdXBwcmVzc2VzIGFueSBuZXdsaW5lIG11bmdpbmcKKwl0aGUgY2xpZW50IG1pZ2h0IG90aGVyd2lzZSBkby4gSWYgdGhlIGF0dHJpYnV0ZXMgZG8gbm90IGFsbG93CisJdGhlIGZpbGUgdHlwZSB0byBiZSBkZXRlcm1pbmVkLCB0aGVuIGBnaXRjdnMuYWxsQmluYXJ5YCBpcworCXVzZWQuIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0uCisKK2dpdGN2cy5hbGxCaW5hcnk6OgorCVRoaXMgaXMgdXNlZCBpZiBgZ2l0Y3ZzLnVzZWNybGZhdHRyYCBkb2VzIG5vdCByZXNvbHZlCisJdGhlIGNvcnJlY3QgJy1rYicgbW9kZSB0byB1c2UuIElmIHRydWUsIGFsbAorCXVucmVzb2x2ZWQgZmlsZXMgYXJlIHNlbnQgdG8gdGhlIGNsaWVudCBpbgorCW1vZGUgJy1rYicuIFRoaXMgY2F1c2VzIHRoZSBjbGllbnQgdG8gdHJlYXQgdGhlbQorCWFzIGJpbmFyeSBmaWxlcywgd2hpY2ggc3VwcHJlc3NlcyBhbnkgbmV3bGluZSBtdW5naW5nIGl0CisJb3RoZXJ3aXNlIG1pZ2h0IGRvLiBBbHRlcm5hdGl2ZWx5LCBpZiBpdCBpcyBzZXQgdG8gImd1ZXNzIiwKKwl0aGVuIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUgZXhhbWluZWQgdG8gZGVjaWRlIGlmCisJaXQgaXMgYmluYXJ5LCBzaW1pbGFyIHRvIGBjb3JlLmF1dG9jcmxmYC4KKworZ2l0Y3ZzLmRiTmFtZTo6CisJRGF0YWJhc2UgdXNlZCBieSBnaXQtY3Zzc2VydmVyIHRvIGNhY2hlIHJldmlzaW9uIGluZm9ybWF0aW9uCisJZGVyaXZlZCBmcm9tIHRoZSBHaXQgcmVwb3NpdG9yeS4gVGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUKKwl1c2VkIGRhdGFiYXNlIGRyaXZlciwgZm9yIFNRTGl0ZSAod2hpY2ggaXMgdGhlIGRlZmF1bHQgZHJpdmVyKSB0aGlzCisJaXMgYSBmaWxlbmFtZS4gU3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uIChzZWUKKwlsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0gZm9yIGRldGFpbHMpLiBNYXkgbm90IGNvbnRhaW4gc2VtaWNvbG9ucyAoYDtgKS4KKwlEZWZhdWx0OiAnJUdnaXRjdnMuJW0uc3FsaXRlJworCitnaXRjdnMuZGJEcml2ZXI6OgorCVVzZWQgUGVybCBEQkkgZHJpdmVyLiBZb3UgY2FuIHNwZWNpZnkgYW55IGF2YWlsYWJsZSBkcml2ZXIKKwlmb3IgdGhpcyBoZXJlLCBidXQgaXQgbWlnaHQgbm90IHdvcmsuIGdpdC1jdnNzZXJ2ZXIgaXMgdGVzdGVkCisJd2l0aCAnREJEOjpTUUxpdGUnLCByZXBvcnRlZCB0byB3b3JrIHdpdGggJ0RCRDo6UGcnLCBhbmQKKwlyZXBvcnRlZCAqbm90KiB0byB3b3JrIHdpdGggJ0RCRDo6bXlzcWwnLiBFeHBlcmltZW50YWwgZmVhdHVyZS4KKwlNYXkgbm90IGNvbnRhaW4gZG91YmxlIGNvbG9ucyAoYDpgKS4gRGVmYXVsdDogJ1NRTGl0ZScuCisJU2VlIGxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXS4KKworZ2l0Y3ZzLmRiVXNlciwgZ2l0Y3ZzLmRiUGFzczo6CisJRGF0YWJhc2UgdXNlciBhbmQgcGFzc3dvcmQuIE9ubHkgdXNlZnVsIGlmIHNldHRpbmcgYGdpdGN2cy5kYkRyaXZlcmAsCisJc2luY2UgU1FMaXRlIGhhcyBubyBjb25jZXB0IG9mIGRhdGFiYXNlIHVzZXJzIGFuZC9vciBwYXNzd29yZHMuCisJJ2dpdGN2cy5kYlVzZXInIHN1cHBvcnRzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiAoc2VlCisJbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdIGZvciBkZXRhaWxzKS4KKworZ2l0Y3ZzLmRiVGFibGVOYW1lUHJlZml4OjoKKwlEYXRhYmFzZSB0YWJsZSBuYW1lIHByZWZpeC4gIFByZXBlbmRlZCB0byB0aGUgbmFtZXMgb2YgYW55CisJZGF0YWJhc2UgdGFibGVzIHVzZWQsIGFsbG93aW5nIGEgc2luZ2xlIGRhdGFiYXNlIHRvIGJlIHVzZWQKKwlmb3Igc2V2ZXJhbCByZXBvc2l0b3JpZXMuICBTdXBwb3J0cyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gKHNlZQorCWxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSBmb3IgZGV0YWlscykuICBBbnkgbm9uLWFscGhhYmV0aWMKKwljaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB1bmRlcnNjb3Jlcy4KKworQWxsIGdpdGN2cyB2YXJpYWJsZXMgZXhjZXB0IGZvciBgZ2l0Y3ZzLnVzZWNybGZhdHRyYCBhbmQKK2BnaXRjdnMuYWxsQmluYXJ5YCBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYXMKKydnaXRjdnMuPGFjY2Vzc19tZXRob2Q+Ljx2YXJuYW1lPicgKHdoZXJlICdhY2Nlc3NfbWV0aG9kJworaXMgb25lIG9mICJleHQiIGFuZCAicHNlcnZlciIpIHRvIG1ha2UgdGhlbSBhcHBseSBvbmx5IGZvciB0aGUgZ2l2ZW4KK2FjY2VzcyBtZXRob2QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9naXR3ZWIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ2l0d2ViLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjUxNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ2l0d2ViLnR4dApAQCAtMCwwICsxLDE2IEBACitnaXR3ZWIuY2F0ZWdvcnk6OgorZ2l0d2ViLmRlc2NyaXB0aW9uOjoKK2dpdHdlYi5vd25lcjo6CitnaXR3ZWIudXJsOjoKKwlTZWUgbGlua2dpdDpnaXR3ZWJbMV0gZm9yIGRlc2NyaXB0aW9uLgorCitnaXR3ZWIuYXZhdGFyOjoKK2dpdHdlYi5ibGFtZTo6CitnaXR3ZWIuZ3JlcDo6CitnaXR3ZWIuaGlnaGxpZ2h0OjoKK2dpdHdlYi5wYXRjaGVzOjoKK2dpdHdlYi5waWNrYXhlOjoKK2dpdHdlYi5yZW1vdGVfaGVhZHM6OgorZ2l0d2ViLnNob3dTaXplczo6CitnaXR3ZWIuc25hcHNob3Q6OgorCVNlZSBsaW5rZ2l0OmdpdHdlYi5jb25mWzVdIGZvciBkZXNjcmlwdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2dwZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ncGcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDAyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ncGcudHh0CkBAIC0wLDAgKzEsMzUgQEAKK2dwZy5wcm9ncmFtOjoKKwlVc2UgdGhpcyBjdXN0b20gcHJvZ3JhbSBpbnN0ZWFkIG9mICJgZ3BnYCIgZm91bmQgb24gYCRQQVRIYCB3aGVuCisJbWFraW5nIG9yIHZlcmlmeWluZyBhIFBHUCBzaWduYXR1cmUuIFRoZSBwcm9ncmFtIG11c3Qgc3VwcG9ydCB0aGUKKwlzYW1lIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYXMgR1BHLCBuYW1lbHksIHRvIHZlcmlmeSBhIGRldGFjaGVkCisJc2lnbmF0dXJlLCAiYGdwZyAtLXZlcmlmeSAkc2lnbmF0dXJlIC0gPCRmaWxlYCIgaXMgcnVuLCBhbmQgdGhlCisJcHJvZ3JhbSBpcyBleHBlY3RlZCB0byBzaWduYWwgYSBnb29kIHNpZ25hdHVyZSBieSBleGl0aW5nIHdpdGgKKwljb2RlIDAsIGFuZCB0byBnZW5lcmF0ZSBhbiBBU0NJSS1hcm1vcmVkIGRldGFjaGVkIHNpZ25hdHVyZSwgdGhlCisJc3RhbmRhcmQgaW5wdXQgb2YgImBncGcgLWJzYXUgJGtleWAiIGlzIGZlZCB3aXRoIHRoZSBjb250ZW50cyB0byBiZQorCXNpZ25lZCwgYW5kIHRoZSBwcm9ncmFtIGlzIGV4cGVjdGVkIHRvIHNlbmQgdGhlIHJlc3VsdCB0byBpdHMKKwlzdGFuZGFyZCBvdXRwdXQuCisKK2dwZy5mb3JtYXQ6OgorCVNwZWNpZmllcyB3aGljaCBrZXkgZm9ybWF0IHRvIHVzZSB3aGVuIHNpZ25pbmcgd2l0aCBgLS1ncGctc2lnbmAuCisJRGVmYXVsdCBpcyAib3BlbnBncCIgYW5kIGFub3RoZXIgcG9zc2libGUgdmFsdWUgaXMgIng1MDkiLgorCitncGcuPGZvcm1hdD4ucHJvZ3JhbTo6CisJVXNlIHRoaXMgdG8gY3VzdG9taXplIHRoZSBwcm9ncmFtIHVzZWQgZm9yIHRoZSBzaWduaW5nIGZvcm1hdCB5b3UKKwljaG9zZS4gKHNlZSBgZ3BnLnByb2dyYW1gIGFuZCBgZ3BnLmZvcm1hdGApIGBncGcucHJvZ3JhbWAgY2FuIHN0aWxsCisJYmUgdXNlZCBhcyBhIGxlZ2FjeSBzeW5vbnltIGZvciBgZ3BnLm9wZW5wZ3AucHJvZ3JhbWAuIFRoZSBkZWZhdWx0CisJdmFsdWUgZm9yIGBncGcueDUwOS5wcm9ncmFtYCBpcyAiZ3Bnc20iLgorCitncGcubWluVHJ1c3RMZXZlbDo6CisJU3BlY2lmaWVzIGEgbWluaW11bSB0cnVzdCBsZXZlbCBmb3Igc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4gIElmCisJdGhpcyBvcHRpb24gaXMgdW5zZXQsIHRoZW4gc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmb3IgbWVyZ2UKKwlvcGVyYXRpb25zIHJlcXVpcmUgYSBrZXkgd2l0aCBhdCBsZWFzdCBgbWFyZ2luYWxgIHRydXN0LiAgT3RoZXIKKwlvcGVyYXRpb25zIHRoYXQgcGVyZm9ybSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJlcXVpcmUgYSBrZXkKKwl3aXRoIGF0IGxlYXN0IGB1bmRlZmluZWRgIHRydXN0LiAgU2V0dGluZyB0aGlzIG9wdGlvbiBvdmVycmlkZXMKKwl0aGUgcmVxdWlyZWQgdHJ1c3QtbGV2ZWwgZm9yIGFsbCBvcGVyYXRpb25zLiAgU3VwcG9ydGVkIHZhbHVlcywKKwlpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIHNpZ25pZmljYW5jZToKKysKKyogYHVuZGVmaW5lZGAKKyogYG5ldmVyYAorKiBgbWFyZ2luYWxgCisqIGBmdWxseWAKKyogYHVsdGltYXRlYApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3JlcC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ncmVwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGFiZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3JlcC50eHQKQEAgLTAsMCArMSwyNCBAQAorZ3JlcC5saW5lTnVtYmVyOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlIGAtbmAgb3B0aW9uIGJ5IGRlZmF1bHQuCisKK2dyZXAuY29sdW1uOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlIHRoZSBgLS1jb2x1bW5gIG9wdGlvbiBieSBkZWZhdWx0LgorCitncmVwLnBhdHRlcm5UeXBlOjoKKwlTZXQgdGhlIGRlZmF1bHQgbWF0Y2hpbmcgYmVoYXZpb3IuIFVzaW5nIGEgdmFsdWUgb2YgJ2Jhc2ljJywgJ2V4dGVuZGVkJywKKwknZml4ZWQnLCBvciAncGVybCcgd2lsbCBlbmFibGUgdGhlIGAtLWJhc2ljLXJlZ2V4cGAsIGAtLWV4dGVuZGVkLXJlZ2V4cGAsCisJYC0tZml4ZWQtc3RyaW5nc2AsIG9yIGAtLXBlcmwtcmVnZXhwYCBvcHRpb24gYWNjb3JkaW5nbHksIHdoaWxlIHRoZQorCXZhbHVlICdkZWZhdWx0JyB3aWxsIHJldHVybiB0byB0aGUgZGVmYXVsdCBtYXRjaGluZyBiZWhhdmlvci4KKworZ3JlcC5leHRlbmRlZFJlZ2V4cDo6CisJSWYgc2V0IHRvIHRydWUsIGVuYWJsZSBgLS1leHRlbmRlZC1yZWdleHBgIG9wdGlvbiBieSBkZWZhdWx0LiBUaGlzCisJb3B0aW9uIGlzIGlnbm9yZWQgd2hlbiB0aGUgYGdyZXAucGF0dGVyblR5cGVgIG9wdGlvbiBpcyBzZXQgdG8gYSB2YWx1ZQorCW90aGVyIHRoYW4gJ2RlZmF1bHQnLgorCitncmVwLnRocmVhZHM6OgorCU51bWJlciBvZiBncmVwIHdvcmtlciB0aHJlYWRzIHRvIHVzZS4KKwlTZWUgYGdyZXAudGhyZWFkc2AgaW4gbGlua2dpdDpnaXQtZ3JlcFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworZ3JlcC5mYWxsYmFja1RvTm9JbmRleDo6CisJSWYgc2V0IHRvIHRydWUsIGZhbGwgYmFjayB0byBnaXQgZ3JlcCAtLW5vLWluZGV4IGlmIGdpdCBncmVwCisJaXMgZXhlY3V0ZWQgb3V0c2lkZSBvZiBhIGdpdCByZXBvc2l0b3J5LiAgRGVmYXVsdHMgdG8gZmFsc2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9ndWkudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3VpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA4MzFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3VpLnR4dApAQCAtMCwwICsxLDU3IEBACitndWkuY29tbWl0TXNnV2lkdGg6OgorCURlZmluZXMgaG93IHdpZGUgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbmRvdyBpcyBpbiB0aGUKKwlsaW5rZ2l0OmdpdC1ndWlbMV0uICI3NSIgaXMgdGhlIGRlZmF1bHQuCisKK2d1aS5kaWZmQ29udGV4dDo6CisJU3BlY2lmaWVzIGhvdyBtYW55IGNvbnRleHQgbGluZXMgc2hvdWxkIGJlIHVzZWQgaW4gY2FsbHMgdG8gZGlmZgorCW1hZGUgYnkgdGhlIGxpbmtnaXQ6Z2l0LWd1aVsxXS4gVGhlIGRlZmF1bHQgaXMgIjUiLgorCitndWkuZGlzcGxheVVudHJhY2tlZDo6CisJRGV0ZXJtaW5lcyBpZiBsaW5rZ2l0OmdpdC1ndWlbMV0gc2hvd3MgdW50cmFja2VkIGZpbGVzCisJaW4gdGhlIGZpbGUgbGlzdC4gVGhlIGRlZmF1bHQgaXMgInRydWUiLgorCitndWkuZW5jb2Rpbmc6OgorCVNwZWNpZmllcyB0aGUgZGVmYXVsdCBlbmNvZGluZyB0byB1c2UgZm9yIGRpc3BsYXlpbmcgb2YKKwlmaWxlIGNvbnRlbnRzIGluIGxpbmtnaXQ6Z2l0LWd1aVsxXSBhbmQgbGlua2dpdDpnaXRrWzFdLgorCUl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlICdlbmNvZGluZycgYXR0cmlidXRlCisJZm9yIHJlbGV2YW50IGZpbGVzIChzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4KKwlJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGUgdG9vbHMgZGVmYXVsdCB0byB0aGUKKwlsb2NhbGUgZW5jb2RpbmcuCisKK2d1aS5tYXRjaFRyYWNraW5nQnJhbmNoOjoKKwlEZXRlcm1pbmVzIGlmIG5ldyBicmFuY2hlcyBjcmVhdGVkIHdpdGggbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZAorCWRlZmF1bHQgdG8gdHJhY2tpbmcgcmVtb3RlIGJyYW5jaGVzIHdpdGggbWF0Y2hpbmcgbmFtZXMgb3IKKwlub3QuIERlZmF1bHQ6ICJmYWxzZSIuCisKK2d1aS5uZXdCcmFuY2hUZW1wbGF0ZTo6CisJSXMgdXNlZCBhcyBzdWdnZXN0ZWQgbmFtZSB3aGVuIGNyZWF0aW5nIG5ldyBicmFuY2hlcyB1c2luZyB0aGUKKwlsaW5rZ2l0OmdpdC1ndWlbMV0uCisKK2d1aS5wcnVuZUR1cmluZ0ZldGNoOjoKKwkidHJ1ZSIgaWYgbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZCBwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgd2hlbgorCXBlcmZvcm1pbmcgYSBmZXRjaC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgImZhbHNlIi4KKworZ3VpLnRydXN0bXRpbWU6OgorCURldGVybWluZXMgaWYgbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZCB0cnVzdCB0aGUgZmlsZSBtb2RpZmljYXRpb24KKwl0aW1lc3RhbXAgb3Igbm90LiBCeSBkZWZhdWx0IHRoZSB0aW1lc3RhbXBzIGFyZSBub3QgdHJ1c3RlZC4KKworZ3VpLnNwZWxsaW5nRGljdGlvbmFyeTo6CisJU3BlY2lmaWVzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHNwZWxsIGNoZWNraW5nIGNvbW1pdCBtZXNzYWdlcyBpbgorCXRoZSBsaW5rZ2l0OmdpdC1ndWlbMV0uIFdoZW4gc2V0IHRvICJub25lIiBzcGVsbCBjaGVja2luZyBpcyB0dXJuZWQKKwlvZmYuCisKK2d1aS5mYXN0Q29weUJsYW1lOjoKKwlJZiB0cnVlLCAnZ2l0IGd1aSBibGFtZScgdXNlcyBgLUNgIGluc3RlYWQgb2YgYC1DIC1DYCBmb3Igb3JpZ2luYWwKKwlsb2NhdGlvbiBkZXRlY3Rpb24uIEl0IG1ha2VzIGJsYW1lIHNpZ25pZmljYW50bHkgZmFzdGVyIG9uIGh1Z2UKKwlyZXBvc2l0b3JpZXMgYXQgdGhlIGV4cGVuc2Ugb2YgbGVzcyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4KKworZ3VpLmNvcHlCbGFtZVRocmVzaG9sZDo6CisJU3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgdG8gdXNlIGluICdnaXQgZ3VpIGJsYW1lJyBvcmlnaW5hbCBsb2NhdGlvbgorCWRldGVjdGlvbiwgbWVhc3VyZWQgaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFNlZSB0aGUKKwlsaW5rZ2l0OmdpdC1ibGFtZVsxXSBtYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29weSBkZXRlY3Rpb24uCisKK2d1aS5ibGFtZWhpc3RvcnljdHg6OgorCVNwZWNpZmllcyB0aGUgcmFkaXVzIG9mIGhpc3RvcnkgY29udGV4dCBpbiBkYXlzIHRvIHNob3cgaW4KKwlsaW5rZ2l0OmdpdGtbMV0gZm9yIHRoZSBzZWxlY3RlZCBjb21taXQsIHdoZW4gdGhlIGBTaG93IEhpc3RvcnkKKwlDb250ZXh0YCBtZW51IGl0ZW0gaXMgaW52b2tlZCBmcm9tICdnaXQgZ3VpIGJsYW1lJy4gSWYgdGhpcworCXZhcmlhYmxlIGlzIHNldCB0byB6ZXJvLCB0aGUgd2hvbGUgaGlzdG9yeSBpcyBzaG93bi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2d1aXRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZ3VpdG9vbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmYjk0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2d1aXRvb2wudHh0CkBAIC0wLDAgKzEsNTAgQEAKK2d1aXRvb2wuPG5hbWU+LmNtZDo6CisJU3BlY2lmaWVzIHRoZSBzaGVsbCBjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZSB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGl0ZW0KKwlvZiB0aGUgbGlua2dpdDpnaXQtZ3VpWzFdIGBUb29sc2AgbWVudSBpcyBpbnZva2VkLiBUaGlzIG9wdGlvbiBpcworCW1hbmRhdG9yeSBmb3IgZXZlcnkgdG9vbC4gVGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgZnJvbSB0aGUgcm9vdCBvZgorCXRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGluIHRoZSBlbnZpcm9ubWVudCBpdCByZWNlaXZlcyB0aGUgbmFtZSBvZgorCXRoZSB0b29sIGFzIGBHSVRfR1VJVE9PTGAsIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZmlsZSBhcworCSdGSUxFTkFNRScsIGFuZCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2ggYXMgJ0NVUl9CUkFOQ0gnIChpZgorCXRoZSBoZWFkIGlzIGRldGFjaGVkLCAnQ1VSX0JSQU5DSCcgaXMgZW1wdHkpLgorCitndWl0b29sLjxuYW1lPi5uZWVkc0ZpbGU6OgorCVJ1biB0aGUgdG9vbCBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCBpbiB0aGUgR1VJLiBJdCBndWFyYW50ZWVzCisJdGhhdCAnRklMRU5BTUUnIGlzIG5vdCBlbXB0eS4KKworZ3VpdG9vbC48bmFtZT4ubm9Db25zb2xlOjoKKwlSdW4gdGhlIGNvbW1hbmQgc2lsZW50bHksIHdpdGhvdXQgY3JlYXRpbmcgYSB3aW5kb3cgdG8gZGlzcGxheSBpdHMKKwlvdXRwdXQuCisKK2d1aXRvb2wuPG5hbWU+Lm5vUmVzY2FuOjoKKwlEb24ndCByZXNjYW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBjaGFuZ2VzIGFmdGVyIHRoZSB0b29sCisJZmluaXNoZXMgZXhlY3V0aW9uLgorCitndWl0b29sLjxuYW1lPi5jb25maXJtOjoKKwlTaG93IGEgY29uZmlybWF0aW9uIGRpYWxvZyBiZWZvcmUgYWN0dWFsbHkgcnVubmluZyB0aGUgdG9vbC4KKworZ3VpdG9vbC48bmFtZT4uYXJnUHJvbXB0OjoKKwlSZXF1ZXN0IGEgc3RyaW5nIGFyZ3VtZW50IGZyb20gdGhlIHVzZXIsIGFuZCBwYXNzIGl0IHRvIHRoZSB0b29sCisJdGhyb3VnaCB0aGUgYEFSR1NgIGVudmlyb25tZW50IHZhcmlhYmxlLiBTaW5jZSByZXF1ZXN0aW5nIGFuCisJYXJndW1lbnQgaW1wbGllcyBjb25maXJtYXRpb24sIHRoZSAnY29uZmlybScgb3B0aW9uIGhhcyBubyBlZmZlY3QKKwlpZiB0aGlzIGlzIGVuYWJsZWQuIElmIHRoZSBvcHRpb24gaXMgc2V0IHRvICd0cnVlJywgJ3llcycsIG9yICcxJywKKwl0aGUgZGlhbG9nIHVzZXMgYSBidWlsdC1pbiBnZW5lcmljIHByb21wdDsgb3RoZXJ3aXNlIHRoZSBleGFjdAorCXZhbHVlIG9mIHRoZSB2YXJpYWJsZSBpcyB1c2VkLgorCitndWl0b29sLjxuYW1lPi5yZXZQcm9tcHQ6OgorCVJlcXVlc3QgYSBzaW5nbGUgdmFsaWQgcmV2aXNpb24gZnJvbSB0aGUgdXNlciwgYW5kIHNldCB0aGUKKwlgUkVWSVNJT05gIGVudmlyb25tZW50IHZhcmlhYmxlLiBJbiBvdGhlciBhc3BlY3RzIHRoaXMgb3B0aW9uCisJaXMgc2ltaWxhciB0byAnYXJnUHJvbXB0JywgYW5kIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggaXQuCisKK2d1aXRvb2wuPG5hbWU+LnJldlVubWVyZ2VkOjoKKwlTaG93IG9ubHkgdW5tZXJnZWQgYnJhbmNoZXMgaW4gdGhlICdyZXZQcm9tcHQnIHN1YmRpYWxvZy4KKwlUaGlzIGlzIHVzZWZ1bCBmb3IgdG9vbHMgc2ltaWxhciB0byBtZXJnZSBvciByZWJhc2UsIGJ1dCBub3QKKwlmb3IgdGhpbmdzIGxpa2UgY2hlY2tvdXQgb3IgcmVzZXQuCisKK2d1aXRvb2wuPG5hbWU+LnRpdGxlOjoKKwlTcGVjaWZpZXMgdGhlIHRpdGxlIHRvIHVzZSBmb3IgdGhlIHByb21wdCBkaWFsb2cuIFRoZSBkZWZhdWx0CisJaXMgdGhlIHRvb2wgbmFtZS4KKworZ3VpdG9vbC48bmFtZT4ucHJvbXB0OjoKKwlTcGVjaWZpZXMgdGhlIGdlbmVyYWwgcHJvbXB0IHN0cmluZyB0byBkaXNwbGF5IGF0IHRoZSB0b3Agb2YKKwl0aGUgZGlhbG9nLCBiZWZvcmUgc3Vic2VjdGlvbnMgZm9yICdhcmdQcm9tcHQnIGFuZCAncmV2UHJvbXB0Jy4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBpbmNsdWRlcyB0aGUgYWN0dWFsIGNvbW1hbmQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9oZWxwLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2hlbHAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNGJiZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9oZWxwLnR4dApAQCAtMCwwICsxLDIzIEBACitoZWxwLmJyb3dzZXI6OgorCVNwZWNpZnkgdGhlIGJyb3dzZXIgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGlzcGxheSBoZWxwIGluIHRoZQorCSd3ZWInIGZvcm1hdC4gU2VlIGxpbmtnaXQ6Z2l0LWhlbHBbMV0uCisKK2hlbHAuZm9ybWF0OjoKKwlPdmVycmlkZSB0aGUgZGVmYXVsdCBoZWxwIGZvcm1hdCB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LWhlbHBbMV0uCisJVmFsdWVzICdtYW4nLCAnaW5mbycsICd3ZWInIGFuZCAnaHRtbCcgYXJlIHN1cHBvcnRlZC4gJ21hbicgaXMKKwl0aGUgZGVmYXVsdC4gJ3dlYicgYW5kICdodG1sJyBhcmUgdGhlIHNhbWUuCisKK2hlbHAuYXV0b0NvcnJlY3Q6OgorCUF1dG9tYXRpY2FsbHkgY29ycmVjdCBhbmQgZXhlY3V0ZSBtaXN0eXBlZCBjb21tYW5kcyBhZnRlcgorCXdhaXRpbmcgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaXNlY29uZHMgKDAuMSBzZWMpLiBJZiBtb3JlCisJdGhhbiBvbmUgY29tbWFuZCBjYW4gYmUgZGVkdWNlZCBmcm9tIHRoZSBlbnRlcmVkIHRleHQsIG5vdGhpbmcKKwl3aWxsIGJlIGV4ZWN1dGVkLiAgSWYgdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uIGlzIG5lZ2F0aXZlLAorCXRoZSBjb3JyZWN0ZWQgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5LiBJZiB0aGUKKwl2YWx1ZSBpcyAwIC0gdGhlIGNvbW1hbmQgd2lsbCBiZSBqdXN0IHNob3duIGJ1dCBub3QgZXhlY3V0ZWQuCisJVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworaGVscC5odG1sUGF0aDo6CisJU3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgSFRNTCBkb2N1bWVudGF0aW9uIHJlc2lkZXMuIEZpbGUgc3lzdGVtIHBhdGhzCisJYW5kIFVSTHMgYXJlIHN1cHBvcnRlZC4gSFRNTCBwYWdlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGggdGhpcyBwYXRoIHdoZW4KKwloZWxwIGlzIGRpc3BsYXllZCBpbiB0aGUgJ3dlYicgZm9ybWF0LiBUaGlzIGRlZmF1bHRzIHRvIHRoZSBkb2N1bWVudGF0aW9uCisJcGF0aCBvZiB5b3VyIEdpdCBpbnN0YWxsYXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9odHRwLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2h0dHAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDYwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9odHRwLnR4dApAQCAtMCwwICsxLDI4OCBAQAoraHR0cC5wcm94eTo6CisJT3ZlcnJpZGUgdGhlIEhUVFAgcHJveHksIG5vcm1hbGx5IGNvbmZpZ3VyZWQgdXNpbmcgdGhlICdodHRwX3Byb3h5JywKKwknaHR0cHNfcHJveHknLCBhbmQgJ2FsbF9wcm94eScgZW52aXJvbm1lbnQgdmFyaWFibGVzIChzZWUgYGN1cmwoMSlgKS4gSW4KKwlhZGRpdGlvbiB0byB0aGUgc3ludGF4IHVuZGVyc3Rvb2QgYnkgY3VybCwgaXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBhCisJcHJveHkgc3RyaW5nIHdpdGggYSB1c2VyIG5hbWUgYnV0IG5vIHBhc3N3b3JkLCBpbiB3aGljaCBjYXNlIGdpdCB3aWxsCisJYXR0ZW1wdCB0byBhY3F1aXJlIG9uZSBpbiB0aGUgc2FtZSB3YXkgaXQgZG9lcyBmb3Igb3RoZXIgY3JlZGVudGlhbHMuIFNlZQorCWxpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10gZm9yIG1vcmUgaW5mb3JtYXRpb24uIFRoZSBzeW50YXggdGh1cyBpcworCSdbcHJvdG9jb2w6Ly9dW3VzZXJbOnBhc3N3b3JkXUBdcHJveHlob3N0Wzpwb3J0XScuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4KKwlvbiBhIHBlci1yZW1vdGUgYmFzaXM7IHNlZSByZW1vdGUuPG5hbWU+LnByb3h5CisKK2h0dHAucHJveHlBdXRoTWV0aG9kOjoKKwlTZXQgdGhlIG1ldGhvZCB3aXRoIHdoaWNoIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IHRoZSBIVFRQIHByb3h5LiBUaGlzCisJb25seSB0YWtlcyBlZmZlY3QgaWYgdGhlIGNvbmZpZ3VyZWQgcHJveHkgc3RyaW5nIGNvbnRhaW5zIGEgdXNlciBuYW1lIHBhcnQKKwkoaS5lLiBpcyBvZiB0aGUgZm9ybSAndXNlckBob3N0JyBvciAndXNlckBob3N0OnBvcnQnKS4gVGhpcyBjYW4gYmUKKwlvdmVycmlkZGVuIG9uIGEgcGVyLXJlbW90ZSBiYXNpczsgc2VlIGByZW1vdGUuPG5hbWU+LnByb3h5QXV0aE1ldGhvZGAuCisJQm90aCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9IVFRQX1BST1hZX0FVVEhNRVRIT0RgIGVudmlyb25tZW50CisJdmFyaWFibGUuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorKworLS0KKyogYGFueWF1dGhgIC0gQXV0b21hdGljYWxseSBwaWNrIGEgc3VpdGFibGUgYXV0aGVudGljYXRpb24gbWV0aG9kLiBJdCBpcworICBhc3N1bWVkIHRoYXQgdGhlIHByb3h5IGFuc3dlcnMgYW4gdW5hdXRoZW50aWNhdGVkIHJlcXVlc3Qgd2l0aCBhIDQwNworICBzdGF0dXMgY29kZSBhbmQgb25lIG9yIG1vcmUgUHJveHktYXV0aGVudGljYXRlIGhlYWRlcnMgd2l0aCBzdXBwb3J0ZWQKKyAgYXV0aGVudGljYXRpb24gbWV0aG9kcy4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKyogYGJhc2ljYCAtIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24KKyogYGRpZ2VzdGAgLSBIVFRQIERpZ2VzdCBhdXRoZW50aWNhdGlvbjsgdGhpcyBwcmV2ZW50cyB0aGUgcGFzc3dvcmQgZnJvbSBiZWluZworICB0cmFuc21pdHRlZCB0byB0aGUgcHJveHkgaW4gY2xlYXIgdGV4dAorKiBgbmVnb3RpYXRlYCAtIEdTUy1OZWdvdGlhdGUgYXV0aGVudGljYXRpb24gKGNvbXBhcmUgdGhlIC0tbmVnb3RpYXRlIG9wdGlvbgorICBvZiBgY3VybCgxKWApCisqIGBudGxtYCAtIE5UTE0gYXV0aGVudGljYXRpb24gKGNvbXBhcmUgdGhlIC0tbnRsbSBvcHRpb24gb2YgYGN1cmwoMSlgKQorLS0KKworaHR0cC5lbXB0eUF1dGg6OgorCUF0dGVtcHQgYXV0aGVudGljYXRpb24gd2l0aG91dCBzZWVraW5nIGEgdXNlcm5hbWUgb3IgcGFzc3dvcmQuICBUaGlzCisJY2FuIGJlIHVzZWQgdG8gYXR0ZW1wdCBHU1MtTmVnb3RpYXRlIGF1dGhlbnRpY2F0aW9uIHdpdGhvdXQgc3BlY2lmeWluZworCWEgdXNlcm5hbWUgaW4gdGhlIFVSTCwgYXMgbGliY3VybCBub3JtYWxseSByZXF1aXJlcyBhIHVzZXJuYW1lIGZvcgorCWF1dGhlbnRpY2F0aW9uLgorCitodHRwLmRlbGVnYXRpb246OgorCUNvbnRyb2wgR1NTQVBJIGNyZWRlbnRpYWwgZGVsZWdhdGlvbi4gVGhlIGRlbGVnYXRpb24gaXMgZGlzYWJsZWQKKwlieSBkZWZhdWx0IGluIGxpYmN1cmwgc2luY2UgdmVyc2lvbiA3LjIxLjcuIFNldCBwYXJhbWV0ZXIgdG8gdGVsbAorCXRoZSBzZXJ2ZXIgd2hhdCBpdCBpcyBhbGxvd2VkIHRvIGRlbGVnYXRlIHdoZW4gaXQgY29tZXMgdG8gdXNlcgorCWNyZWRlbnRpYWxzLiBVc2VkIHdpdGggR1NTL2tlcmJlcm9zLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorKworLS0KKyogYG5vbmVgIC0gRG9uJ3QgYWxsb3cgYW55IGRlbGVnYXRpb24uCisqIGBwb2xpY3lgIC0gRGVsZWdhdGVzIGlmIGFuZCBvbmx5IGlmIHRoZSBPSy1BUy1ERUxFR0FURSBmbGFnIGlzIHNldCBpbiB0aGUKKyAgS2VyYmVyb3Mgc2VydmljZSB0aWNrZXQsIHdoaWNoIGlzIGEgbWF0dGVyIG9mIHJlYWxtIHBvbGljeS4KKyogYGFsd2F5c2AgLSBVbmNvbmRpdGlvbmFsbHkgYWxsb3cgdGhlIHNlcnZlciB0byBkZWxlZ2F0ZS4KKy0tCisKKworaHR0cC5leHRyYUhlYWRlcjo6CisJUGFzcyBhbiBhZGRpdGlvbmFsIEhUVFAgaGVhZGVyIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIGEgc2VydmVyLiAgSWYKKwltb3JlIHRoYW4gb25lIHN1Y2ggZW50cnkgZXhpc3RzLCBhbGwgb2YgdGhlbSBhcmUgYWRkZWQgYXMgZXh0cmEKKwloZWFkZXJzLiAgVG8gYWxsb3cgb3ZlcnJpZGluZyB0aGUgc2V0dGluZ3MgaW5oZXJpdGVkIGZyb20gdGhlIHN5c3RlbQorCWNvbmZpZywgYW4gZW1wdHkgdmFsdWUgd2lsbCByZXNldCB0aGUgZXh0cmEgaGVhZGVycyB0byB0aGUgZW1wdHkgbGlzdC4KKworaHR0cC5jb29raWVGaWxlOjoKKwlUaGUgcGF0aG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgcHJldmlvdXNseSBzdG9yZWQgY29va2llIGxpbmVzLAorCXdoaWNoIHNob3VsZCBiZSB1c2VkCisJaW4gdGhlIEdpdCBodHRwIHNlc3Npb24sIGlmIHRoZXkgbWF0Y2ggdGhlIHNlcnZlci4gVGhlIGZpbGUgZm9ybWF0CisJb2YgdGhlIGZpbGUgdG8gcmVhZCBjb29raWVzIGZyb20gc2hvdWxkIGJlIHBsYWluIEhUVFAgaGVhZGVycyBvcgorCXRoZSBOZXRzY2FwZS9Nb3ppbGxhIGNvb2tpZSBmaWxlIGZvcm1hdCAoc2VlIGBjdXJsKDEpYCkuCisJTk9URSB0aGF0IHRoZSBmaWxlIHNwZWNpZmllZCB3aXRoIGh0dHAuY29va2llRmlsZSBpcyB1c2VkIG9ubHkgYXMKKwlpbnB1dCB1bmxlc3MgaHR0cC5zYXZlQ29va2llcyBpcyBzZXQuCisKK2h0dHAuc2F2ZUNvb2tpZXM6OgorCUlmIHNldCwgc3RvcmUgY29va2llcyByZWNlaXZlZCBkdXJpbmcgcmVxdWVzdHMgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5CisJaHR0cC5jb29raWVGaWxlLiBIYXMgbm8gZWZmZWN0IGlmIGh0dHAuY29va2llRmlsZSBpcyB1bnNldC4KKworaHR0cC52ZXJzaW9uOjoKKwlVc2UgdGhlIHNwZWNpZmllZCBIVFRQIHByb3RvY29sIHZlcnNpb24gd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggYSBzZXJ2ZXIuCisJSWYgeW91IHdhbnQgdG8gZm9yY2UgdGhlIGRlZmF1bHQuIFRoZSBhdmFpbGFibGUgYW5kIGRlZmF1bHQgdmVyc2lvbiBkZXBlbmQKKwlvbiBsaWJjdXJsLiBDdXJyZW50bHkgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZgorCXRoaXMgb3B0aW9uIGFyZToKKworCS0gSFRUUC8yCisJLSBIVFRQLzEuMQorCitodHRwLnNzbFZlcnNpb246OgorCVRoZSBTU0wgdmVyc2lvbiB0byB1c2Ugd2hlbiBuZWdvdGlhdGluZyBhbiBTU0wgY29ubmVjdGlvbiwgaWYgeW91CisJd2FudCB0byBmb3JjZSB0aGUgZGVmYXVsdC4gIFRoZSBhdmFpbGFibGUgYW5kIGRlZmF1bHQgdmVyc2lvbgorCWRlcGVuZCBvbiB3aGV0aGVyIGxpYmN1cmwgd2FzIGJ1aWx0IGFnYWluc3QgTlNTIG9yIE9wZW5TU0wgYW5kIHRoZQorCXBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvZiB0aGUgY3J5cHRvIGxpYnJhcnkgaW4gdXNlLiBJbnRlcm5hbGx5CisJdGhpcyBzZXRzIHRoZSAnQ1VSTE9QVF9TU0xfVkVSU0lPTicgb3B0aW9uOyBzZWUgdGhlIGxpYmN1cmwKKwlkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiB0aGlzIG9wdGlvbiBhbmQKKwlmb3IgdGhlIHNzbCB2ZXJzaW9uIHN1cHBvcnRlZC4gQ3VycmVudGx5IHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YKKwl0aGlzIG9wdGlvbiBhcmU6CisKKwktIHNzbHYyCisJLSBzc2x2MworCS0gdGxzdjEKKwktIHRsc3YxLjAKKwktIHRsc3YxLjEKKwktIHRsc3YxLjIKKwktIHRsc3YxLjMKKworKworQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfU1NMX1ZFUlNJT05gIGVudmlyb25tZW50IHZhcmlhYmxlLgorVG8gZm9yY2UgZ2l0IHRvIHVzZSBsaWJjdXJsJ3MgZGVmYXVsdCBzc2wgdmVyc2lvbiBhbmQgaWdub3JlIGFueQorZXhwbGljaXQgaHR0cC5zc2x2ZXJzaW9uIG9wdGlvbiwgc2V0IGBHSVRfU1NMX1ZFUlNJT05gIHRvIHRoZQorZW1wdHkgc3RyaW5nLgorCitodHRwLnNzbENpcGhlckxpc3Q6OgorICBBIGxpc3Qgb2YgU1NMIGNpcGhlcnMgdG8gdXNlIHdoZW4gbmVnb3RpYXRpbmcgYW4gU1NMIGNvbm5lY3Rpb24uCisgIFRoZSBhdmFpbGFibGUgY2lwaGVycyBkZXBlbmQgb24gd2hldGhlciBsaWJjdXJsIHdhcyBidWlsdCBhZ2FpbnN0CisgIE5TUyBvciBPcGVuU1NMIGFuZCB0aGUgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9mIHRoZSBjcnlwdG8KKyAgbGlicmFyeSBpbiB1c2UuICBJbnRlcm5hbGx5IHRoaXMgc2V0cyB0aGUgJ0NVUkxPUFRfU1NMX0NJUEhFUl9MSVNUJworICBvcHRpb247IHNlZSB0aGUgbGliY3VybCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdAorICBvZiB0aGlzIGxpc3QuCisrCitDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9TU0xfQ0lQSEVSX0xJU1RgIGVudmlyb25tZW50IHZhcmlhYmxlLgorVG8gZm9yY2UgZ2l0IHRvIHVzZSBsaWJjdXJsJ3MgZGVmYXVsdCBjaXBoZXIgbGlzdCBhbmQgaWdub3JlIGFueQorZXhwbGljaXQgaHR0cC5zc2xDaXBoZXJMaXN0IG9wdGlvbiwgc2V0IGBHSVRfU1NMX0NJUEhFUl9MSVNUYCB0byB0aGUKK2VtcHR5IHN0cmluZy4KKworaHR0cC5zc2xWZXJpZnk6OgorCVdoZXRoZXIgdG8gdmVyaWZ5IHRoZSBTU0wgY2VydGlmaWNhdGUgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nCisJb3ZlciBIVFRQUy4gRGVmYXVsdHMgdG8gdHJ1ZS4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCisJYEdJVF9TU0xfTk9fVkVSSUZZYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworaHR0cC5zc2xDZXJ0OjoKKwlGaWxlIGNvbnRhaW5pbmcgdGhlIFNTTCBjZXJ0aWZpY2F0ZSB3aGVuIGZldGNoaW5nIG9yIHB1c2hpbmcKKwlvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9TU0xfQ0VSVGAgZW52aXJvbm1lbnQKKwl2YXJpYWJsZS4KKworaHR0cC5zc2xLZXk6OgorCUZpbGUgY29udGFpbmluZyB0aGUgU1NMIHByaXZhdGUga2V5IHdoZW4gZmV0Y2hpbmcgb3IgcHVzaGluZworCW92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1NTTF9LRVlgIGVudmlyb25tZW50CisJdmFyaWFibGUuCisKK2h0dHAuc3NsQ2VydFBhc3N3b3JkUHJvdGVjdGVkOjoKKwlFbmFibGUgR2l0J3MgcGFzc3dvcmQgcHJvbXB0IGZvciB0aGUgU1NMIGNlcnRpZmljYXRlLiAgT3RoZXJ3aXNlCisJT3BlblNTTCB3aWxsIHByb21wdCB0aGUgdXNlciwgcG9zc2libHkgbWFueSB0aW1lcywgaWYgdGhlCisJY2VydGlmaWNhdGUgb3IgcHJpdmF0ZSBrZXkgaXMgZW5jcnlwdGVkLiAgQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCisJYEdJVF9TU0xfQ0VSVF9QQVNTV09SRF9QUk9URUNURURgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitodHRwLnNzbENBSW5mbzo6CisJRmlsZSBjb250YWluaW5nIHRoZSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IHRoZSBwZWVyIHdpdGggd2hlbgorCWZldGNoaW5nIG9yIHB1c2hpbmcgb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCisJYEdJVF9TU0xfQ0FJTkZPYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworaHR0cC5zc2xDQVBhdGg6OgorCVBhdGggY29udGFpbmluZyBmaWxlcyB3aXRoIHRoZSBDQSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IHRoZSBwZWVyCisJd2l0aCB3aGVuIGZldGNoaW5nIG9yIHB1c2hpbmcgb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4KKwlieSB0aGUgYEdJVF9TU0xfQ0FQQVRIYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworaHR0cC5zc2xCYWNrZW5kOjoKKwlOYW1lIG9mIHRoZSBTU0wgYmFja2VuZCB0byB1c2UgKGUuZy4gIm9wZW5zc2wiIG9yICJzY2hhbm5lbCIpLgorCVRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgY1VSTCBsYWNrcyBzdXBwb3J0IGZvciBjaG9vc2luZyB0aGUgU1NMCisJYmFja2VuZCBhdCBydW50aW1lLgorCitodHRwLnNjaGFubmVsQ2hlY2tSZXZva2U6OgorCVVzZWQgdG8gZW5mb3JjZSBvciBkaXNhYmxlIGNlcnRpZmljYXRlIHJldm9jYXRpb24gY2hlY2tzIGluIGNVUkwKKwl3aGVuIGh0dHAuc3NsQmFja2VuZCBpcyBzZXQgdG8gInNjaGFubmVsIi4gRGVmYXVsdHMgdG8gYHRydWVgIGlmCisJdW5zZXQuIE9ubHkgbmVjZXNzYXJ5IHRvIGRpc2FibGUgdGhpcyBpZiBHaXQgY29uc2lzdGVudGx5IGVycm9ycworCWFuZCB0aGUgbWVzc2FnZSBpcyBhYm91dCBjaGVja2luZyB0aGUgcmV2b2NhdGlvbiBzdGF0dXMgb2YgYQorCWNlcnRpZmljYXRlLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGNVUkwgbGFja3Mgc3VwcG9ydCBmb3IKKwlzZXR0aW5nIHRoZSByZWxldmFudCBTU0wgb3B0aW9uIGF0IHJ1bnRpbWUuCisKK2h0dHAuc2NoYW5uZWxVc2VTU0xDQUluZm86OgorCUFzIG9mIGNVUkwgdjcuNjAuMCwgdGhlIFNlY3VyZSBDaGFubmVsIGJhY2tlbmQgY2FuIHVzZSB0aGUKKwljZXJ0aWZpY2F0ZSBidW5kbGUgcHJvdmlkZWQgdmlhIGBodHRwLnNzbENBSW5mb2AsIGJ1dCB0aGF0IHdvdWxkCisJb3ZlcnJpZGUgdGhlIFdpbmRvd3MgQ2VydGlmaWNhdGUgU3RvcmUuIFNpbmNlIHRoaXMgaXMgbm90IGRlc2lyYWJsZQorCWJ5IGRlZmF1bHQsIEdpdCB3aWxsIHRlbGwgY1VSTCBub3QgdG8gdXNlIHRoYXQgYnVuZGxlIGJ5IGRlZmF1bHQKKwl3aGVuIHRoZSBgc2NoYW5uZWxgIGJhY2tlbmQgd2FzIGNvbmZpZ3VyZWQgdmlhIGBodHRwLnNzbEJhY2tlbmRgLAorCXVubGVzcyBgaHR0cC5zY2hhbm5lbFVzZVNTTENBSW5mb2Agb3ZlcnJpZGVzIHRoaXMgYmVoYXZpb3IuCisKK2h0dHAucGlubmVkcHVia2V5OjoKKwlQdWJsaWMga2V5IG9mIHRoZSBodHRwcyBzZXJ2aWNlLiBJdCBtYXkgZWl0aGVyIGJlIHRoZSBmaWxlbmFtZSBvZgorCWEgUEVNIG9yIERFUiBlbmNvZGVkIHB1YmxpYyBrZXkgZmlsZSBvciBhIHN0cmluZyBzdGFydGluZyB3aXRoCisJJ3NoYTI1Ni8vJyBmb2xsb3dlZCBieSB0aGUgYmFzZTY0IGVuY29kZWQgc2hhMjU2IGhhc2ggb2YgdGhlCisJcHVibGljIGtleS4gU2VlIGFsc28gbGliY3VybCAnQ1VSTE9QVF9QSU5ORURQVUJMSUNLRVknLiBnaXQgd2lsbAorCWV4aXQgd2l0aCBhbiBlcnJvciBpZiB0aGlzIG9wdGlvbiBpcyBzZXQgYnV0IG5vdCBzdXBwb3J0ZWQgYnkKKwljVVJMLgorCitodHRwLnNzbFRyeTo6CisJQXR0ZW1wdCB0byB1c2UgQVVUSCBTU0wvVExTIGFuZCBlbmNyeXB0ZWQgZGF0YSB0cmFuc2ZlcnMKKwl3aGVuIGNvbm5lY3RpbmcgdmlhIHJlZ3VsYXIgRlRQIHByb3RvY29sLiBUaGlzIG1pZ2h0IGJlIG5lZWRlZAorCWlmIHRoZSBGVFAgc2VydmVyIHJlcXVpcmVzIGl0IGZvciBzZWN1cml0eSByZWFzb25zIG9yIHlvdSB3aXNoCisJdG8gY29ubmVjdCBzZWN1cmVseSB3aGVuZXZlciByZW1vdGUgRlRQIHNlcnZlciBzdXBwb3J0cyBpdC4KKwlEZWZhdWx0IGlzIGZhbHNlIHNpbmNlIGl0IG1pZ2h0IHRyaWdnZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uCisJZXJyb3JzIG9uIG1pc2NvbmZpZ3VyZWQgc2VydmVycy4KKworaHR0cC5tYXhSZXF1ZXN0czo6CisJSG93IG1hbnkgSFRUUCByZXF1ZXN0cyB0byBsYXVuY2ggaW4gcGFyYWxsZWwuIENhbiBiZSBvdmVycmlkZGVuCisJYnkgdGhlIGBHSVRfSFRUUF9NQVhfUkVRVUVTVFNgIGVudmlyb25tZW50IHZhcmlhYmxlLiBEZWZhdWx0IGlzIDUuCisKK2h0dHAubWluU2Vzc2lvbnM6OgorCVRoZSBudW1iZXIgb2YgY3VybCBzZXNzaW9ucyAoY291bnRlZCBhY3Jvc3Mgc2xvdHMpIHRvIGJlIGtlcHQgYWNyb3NzCisJcmVxdWVzdHMuIFRoZXkgd2lsbCBub3QgYmUgZW5kZWQgd2l0aCBjdXJsX2Vhc3lfY2xlYW51cCgpIHVudGlsCisJaHR0cF9jbGVhbnVwKCkgaXMgaW52b2tlZC4gSWYgVVNFX0NVUkxfTVVMVEkgaXMgbm90IGRlZmluZWQsIHRoaXMKKwl2YWx1ZSB3aWxsIGJlIGNhcHBlZCBhdCAxLiBEZWZhdWx0cyB0byAxLgorCitodHRwLnBvc3RCdWZmZXI6OgorCU1heGltdW0gc2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmZmVyIHVzZWQgYnkgc21hcnQgSFRUUAorCXRyYW5zcG9ydHMgd2hlbiBQT1NUaW5nIGRhdGEgdG8gdGhlIHJlbW90ZSBzeXN0ZW0uCisJRm9yIHJlcXVlc3RzIGxhcmdlciB0aGFuIHRoaXMgYnVmZmVyIHNpemUsIEhUVFAvMS4xIGFuZAorCVRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIGlzIHVzZWQgdG8gYXZvaWQgY3JlYXRpbmcgYQorCW1hc3NpdmUgcGFjayBmaWxlIGxvY2FsbHkuICBEZWZhdWx0IGlzIDEgTWlCLCB3aGljaCBpcworCXN1ZmZpY2llbnQgZm9yIG1vc3QgcmVxdWVzdHMuCisrCitOb3RlIHRoYXQgcmFpc2luZyB0aGlzIGxpbWl0IGlzIG9ubHkgZWZmZWN0aXZlIGZvciBkaXNhYmxpbmcgY2h1bmtlZAordHJhbnNmZXIgZW5jb2RpbmcgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZXJlIHRoZSByZW1vdGUKK3NlcnZlciBvciBhIHByb3h5IG9ubHkgc3VwcG9ydHMgSFRUUC8xLjAgb3IgaXMgbm9uY29tcGxpYW50IHdpdGggdGhlCitIVFRQIHN0YW5kYXJkLiAgUmFpc2luZyB0aGlzIGlzIG5vdCwgaW4gZ2VuZXJhbCwgYW4gZWZmZWN0aXZlIHNvbHV0aW9uCitmb3IgbW9zdCBwdXNoIHByb2JsZW1zLCBidXQgY2FuIGluY3JlYXNlIG1lbW9yeSBjb25zdW1wdGlvbgorc2lnbmlmaWNhbnRseSBzaW5jZSB0aGUgZW50aXJlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgZXZlbiBmb3Igc21hbGwKK3B1c2hlcy4KKworaHR0cC5sb3dTcGVlZExpbWl0LCBodHRwLmxvd1NwZWVkVGltZTo6CisJSWYgdGhlIEhUVFAgdHJhbnNmZXIgc3BlZWQgaXMgbGVzcyB0aGFuICdodHRwLmxvd1NwZWVkTGltaXQnCisJZm9yIGxvbmdlciB0aGFuICdodHRwLmxvd1NwZWVkVGltZScgc2Vjb25kcywgdGhlIHRyYW5zZmVyIGlzIGFib3J0ZWQuCisJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfSFRUUF9MT1dfU1BFRURfTElNSVRgIGFuZAorCWBHSVRfSFRUUF9MT1dfU1BFRURfVElNRWAgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCitodHRwLm5vRVBTVjo6CisJQSBib29sZWFuIHdoaWNoIGRpc2FibGVzIHVzaW5nIG9mIEVQU1YgZnRwIGNvbW1hbmQgYnkgY3VybC4KKwlUaGlzIGNhbiBoZWxwZnVsIHdpdGggc29tZSAicG9vciIgZnRwIHNlcnZlcnMgd2hpY2ggZG9uJ3QKKwlzdXBwb3J0IEVQU1YgbW9kZS4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfQ1VSTF9GVFBfTk9fRVBTVmAKKwllbnZpcm9ubWVudCB2YXJpYWJsZS4gRGVmYXVsdCBpcyBmYWxzZSAoY3VybCB3aWxsIHVzZSBFUFNWKS4KKworaHR0cC51c2VyQWdlbnQ6OgorCVRoZSBIVFRQIFVTRVJfQUdFTlQgc3RyaW5nIHByZXNlbnRlZCB0byBhbiBIVFRQIHNlcnZlci4gIFRoZSBkZWZhdWx0CisJdmFsdWUgcmVwcmVzZW50cyB0aGUgdmVyc2lvbiBvZiB0aGUgY2xpZW50IEdpdCBzdWNoIGFzIGdpdC8xLjcuMS4KKwlUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoaXMgdmFsdWUgdG8gYSBtb3JlIGNvbW1vbiB2YWx1ZQorCXN1Y2ggYXMgTW96aWxsYS80LjAuICBUaGlzIG1heSBiZSBuZWNlc3NhcnksIGZvciBpbnN0YW5jZSwgaWYKKwljb25uZWN0aW5nIHRocm91Z2ggYSBmaXJld2FsbCB0aGF0IHJlc3RyaWN0cyBIVFRQIGNvbm5lY3Rpb25zIHRvIGEgc2V0CisJb2YgY29tbW9uIFVTRVJfQUdFTlQgc3RyaW5ncyAoYnV0IG5vdCBpbmNsdWRpbmcgdGhvc2UgbGlrZSBnaXQvMS43LjEpLgorCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX0hUVFBfVVNFUl9BR0VOVGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK2h0dHAuZm9sbG93UmVkaXJlY3RzOjoKKwlXaGV0aGVyIGdpdCBzaG91bGQgZm9sbG93IEhUVFAgcmVkaXJlY3RzLiBJZiBzZXQgdG8gYHRydWVgLCBnaXQKKwl3aWxsIHRyYW5zcGFyZW50bHkgZm9sbG93IGFueSByZWRpcmVjdCBpc3N1ZWQgYnkgYSBzZXJ2ZXIgaXQKKwllbmNvdW50ZXJzLiBJZiBzZXQgdG8gYGZhbHNlYCwgZ2l0IHdpbGwgdHJlYXQgYWxsIHJlZGlyZWN0cyBhcworCWVycm9ycy4gSWYgc2V0IHRvIGBpbml0aWFsYCwgZ2l0IHdpbGwgZm9sbG93IHJlZGlyZWN0cyBvbmx5IGZvcgorCXRoZSBpbml0aWFsIHJlcXVlc3QgdG8gYSByZW1vdGUsIGJ1dCBub3QgZm9yIHN1YnNlcXVlbnQKKwlmb2xsb3ctdXAgSFRUUCByZXF1ZXN0cy4gU2luY2UgZ2l0IHVzZXMgdGhlIHJlZGlyZWN0ZWQgVVJMIGFzCisJdGhlIGJhc2UgZm9yIHRoZSBmb2xsb3ctdXAgcmVxdWVzdHMsIHRoaXMgaXMgZ2VuZXJhbGx5CisJc3VmZmljaWVudC4gVGhlIGRlZmF1bHQgaXMgYGluaXRpYWxgLgorCitodHRwLjx1cmw+Lio6OgorCUFueSBvZiB0aGUgaHR0cC4qIG9wdGlvbnMgYWJvdmUgY2FuIGJlIGFwcGxpZWQgc2VsZWN0aXZlbHkgdG8gc29tZSBVUkxzLgorCUZvciBhIGNvbmZpZyBrZXkgdG8gbWF0Y2ggYSBVUkwsIGVhY2ggZWxlbWVudCBvZiB0aGUgY29uZmlnIGtleSBpcworCWNvbXBhcmVkIHRvIHRoYXQgb2YgdGhlIFVSTCwgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKysKKy0tCisuIFNjaGVtZSAoZS5nLiwgYGh0dHBzYCBpbiBgaHR0cHM6Ly9leGFtcGxlLmNvbS9gKS4gVGhpcyBmaWVsZAorICBtdXN0IG1hdGNoIGV4YWN0bHkgYmV0d2VlbiB0aGUgY29uZmlnIGtleSBhbmQgdGhlIFVSTC4KKworLiBIb3N0L2RvbWFpbiBuYW1lIChlLmcuLCBgZXhhbXBsZS5jb21gIGluIGBodHRwczovL2V4YW1wbGUuY29tL2ApLgorICBUaGlzIGZpZWxkIG11c3QgbWF0Y2ggYmV0d2VlbiB0aGUgY29uZmlnIGtleSBhbmQgdGhlIFVSTC4gSXQgaXMKKyAgcG9zc2libGUgdG8gc3BlY2lmeSBhIGAqYCBhcyBwYXJ0IG9mIHRoZSBob3N0IG5hbWUgdG8gbWF0Y2ggYWxsIHN1YmRvbWFpbnMKKyAgYXQgdGhpcyBsZXZlbC4gYGh0dHBzOi8vKi5leGFtcGxlLmNvbS9gIGZvciBleGFtcGxlIHdvdWxkIG1hdGNoCisgIGBodHRwczovL2Zvby5leGFtcGxlLmNvbS9gLCBidXQgbm90IGBodHRwczovL2Zvby5iYXIuZXhhbXBsZS5jb20vYC4KKworLiBQb3J0IG51bWJlciAoZS5nLiwgYDgwODBgIGluIGBodHRwOi8vZXhhbXBsZS5jb206ODA4MC9gKS4KKyAgVGhpcyBmaWVsZCBtdXN0IG1hdGNoIGV4YWN0bHkgYmV0d2VlbiB0aGUgY29uZmlnIGtleSBhbmQgdGhlIFVSTC4KKyAgT21pdHRlZCBwb3J0IG51bWJlcnMgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjb3JyZWN0CisgIGRlZmF1bHQgZm9yIHRoZSBzY2hlbWUgYmVmb3JlIG1hdGNoaW5nLgorCisuIFBhdGggKGUuZy4sIGByZXBvLmdpdGAgaW4gYGh0dHBzOi8vZXhhbXBsZS5jb20vcmVwby5naXRgKS4gVGhlCisgIHBhdGggZmllbGQgb2YgdGhlIGNvbmZpZyBrZXkgbXVzdCBtYXRjaCB0aGUgcGF0aCBmaWVsZCBvZiB0aGUgVVJMCisgIGVpdGhlciBleGFjdGx5IG9yIGFzIGEgcHJlZml4IG9mIHNsYXNoLWRlbGltaXRlZCBwYXRoIGVsZW1lbnRzLiAgVGhpcyBtZWFucworICBhIGNvbmZpZyBrZXkgd2l0aCBwYXRoIGBmb28vYCBtYXRjaGVzIFVSTCBwYXRoIGBmb28vYmFyYC4gIEEgcHJlZml4IGNhbiBvbmx5CisgIG1hdGNoIG9uIGEgc2xhc2ggKGAvYCkgYm91bmRhcnkuICBMb25nZXIgbWF0Y2hlcyB0YWtlIHByZWNlZGVuY2UgKHNvIGEgY29uZmlnCisgIGtleSB3aXRoIHBhdGggYGZvby9iYXJgIGlzIGEgYmV0dGVyIG1hdGNoIHRvIFVSTCBwYXRoIGBmb28vYmFyYCB0aGFuIGEgY29uZmlnCisgIGtleSB3aXRoIGp1c3QgcGF0aCBgZm9vL2ApLgorCisuIFVzZXIgbmFtZSAoZS5nLiwgYHVzZXJgIGluIGBodHRwczovL3VzZXJAZXhhbXBsZS5jb20vcmVwby5naXRgKS4gSWYKKyAgdGhlIGNvbmZpZyBrZXkgaGFzIGEgdXNlciBuYW1lIGl0IG11c3QgbWF0Y2ggdGhlIHVzZXIgbmFtZSBpbiB0aGUKKyAgVVJMIGV4YWN0bHkuIElmIHRoZSBjb25maWcga2V5IGRvZXMgbm90IGhhdmUgYSB1c2VyIG5hbWUsIHRoYXQKKyAgY29uZmlnIGtleSB3aWxsIG1hdGNoIGEgVVJMIHdpdGggYW55IHVzZXIgbmFtZSAoaW5jbHVkaW5nIG5vbmUpLAorICBidXQgYXQgYSBsb3dlciBwcmVjZWRlbmNlIHRoYW4gYSBjb25maWcga2V5IHdpdGggYSB1c2VyIG5hbWUuCistLQorKworVGhlIGxpc3QgYWJvdmUgaXMgb3JkZXJlZCBieSBkZWNyZWFzaW5nIHByZWNlZGVuY2U7IGEgVVJMIHRoYXQgbWF0Y2hlcworYSBjb25maWcga2V5J3MgcGF0aCBpcyBwcmVmZXJyZWQgdG8gb25lIHRoYXQgbWF0Y2hlcyBpdHMgdXNlciBuYW1lLiBGb3IgZXhhbXBsZSwKK2lmIHRoZSBVUkwgaXMgYGh0dHBzOi8vdXNlckBleGFtcGxlLmNvbS9mb28vYmFyYCBhIGNvbmZpZyBrZXkgbWF0Y2ggb2YKK2BodHRwczovL2V4YW1wbGUuY29tL2Zvb2Agd2lsbCBiZSBwcmVmZXJyZWQgb3ZlciBhIGNvbmZpZyBrZXkgbWF0Y2ggb2YKK2BodHRwczovL3VzZXJAZXhhbXBsZS5jb21gLgorKworQWxsIFVSTHMgYXJlIG5vcm1hbGl6ZWQgYmVmb3JlIGF0dGVtcHRpbmcgYW55IG1hdGNoaW5nICh0aGUgcGFzc3dvcmQgcGFydCwKK2lmIGVtYmVkZGVkIGluIHRoZSBVUkwsIGlzIGFsd2F5cyBpZ25vcmVkIGZvciBtYXRjaGluZyBwdXJwb3Nlcykgc28gdGhhdAorZXF1aXZhbGVudCBVUkxzIHRoYXQgYXJlIHNpbXBseSBzcGVsbGVkIGRpZmZlcmVudGx5IHdpbGwgbWF0Y2ggcHJvcGVybHkuCitFbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR0aW5ncyBhbHdheXMgb3ZlcnJpZGUgYW55IG1hdGNoZXMuICBUaGUgVVJMcyB0aGF0IGFyZQorbWF0Y2hlZCBhZ2FpbnN0IGFyZSB0aG9zZSBnaXZlbiBkaXJlY3RseSB0byBHaXQgY29tbWFuZHMuICBUaGlzIG1lYW5zIGFueSBVUkxzCit2aXNpdGVkIGFzIGEgcmVzdWx0IG9mIGEgcmVkaXJlY3Rpb24gZG8gbm90IHBhcnRpY2lwYXRlIGluIG1hdGNoaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvaTE4bi50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pMThuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzI1NjIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaTE4bi50eHQKQEAgLTAsMCArMSwxMCBAQAoraTE4bi5jb21taXRFbmNvZGluZzo6CisJQ2hhcmFjdGVyIGVuY29kaW5nIHRoZSBjb21taXQgbWVzc2FnZXMgYXJlIHN0b3JlZCBpbjsgR2l0IGl0c2VsZgorCWRvZXMgbm90IGNhcmUgcGVyIHNlLCBidXQgdGhpcyBpbmZvcm1hdGlvbiBpcyBuZWNlc3NhcnkgZS5nLiB3aGVuCisJaW1wb3J0aW5nIGNvbW1pdHMgZnJvbSBlbWFpbHMgb3IgaW4gdGhlIGdpdGsgZ3JhcGhpY2FsIGhpc3RvcnkKKwlicm93c2VyIChhbmQgcG9zc2libHkgYXQgb3RoZXIgcGxhY2VzIGluIHRoZSBmdXR1cmUgb3IgaW4gb3RoZXIKKwlwb3JjZWxhaW5zKS4gU2VlIGUuZy4gbGlua2dpdDpnaXQtbWFpbGluZm9bMV0uIERlZmF1bHRzIHRvICd1dGYtOCcuCisKK2kxOG4ubG9nT3V0cHV0RW5jb2Rpbmc6OgorCUNoYXJhY3RlciBlbmNvZGluZyB0aGUgY29tbWl0IG1lc3NhZ2VzIGFyZSBjb252ZXJ0ZWQgdG8gd2hlbgorCXJ1bm5pbmcgJ2dpdCBsb2cnIGFuZCBmcmllbmRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvaW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjE2NmZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaW1hcC50eHQKQEAgLTAsMCArMSw0NCBAQAoraW1hcC5mb2xkZXI6OgorCVRoZSBmb2xkZXIgdG8gZHJvcCB0aGUgbWFpbHMgaW50bywgd2hpY2ggaXMgdHlwaWNhbGx5IHRoZSBEcmFmdHMKKwlmb2xkZXIuIEZvciBleGFtcGxlOiAiSU5CT1guRHJhZnRzIiwgIklOQk9YL0RyYWZ0cyIgb3IKKwkiW0dtYWlsXS9EcmFmdHMiLiBSZXF1aXJlZC4KKworaW1hcC50dW5uZWw6OgorCUNvbW1hbmQgdXNlZCB0byBzZXR1cCBhIHR1bm5lbCB0byB0aGUgSU1BUCBzZXJ2ZXIgdGhyb3VnaCB3aGljaAorCWNvbW1hbmRzIHdpbGwgYmUgcGlwZWQgaW5zdGVhZCBvZiB1c2luZyBhIGRpcmVjdCBuZXR3b3JrIGNvbm5lY3Rpb24KKwl0byB0aGUgc2VydmVyLiBSZXF1aXJlZCB3aGVuIGltYXAuaG9zdCBpcyBub3Qgc2V0LgorCitpbWFwLmhvc3Q6OgorCUEgVVJMIGlkZW50aWZ5aW5nIHRoZSBzZXJ2ZXIuIFVzZSBhbiBgaW1hcDovL2AgcHJlZml4IGZvciBub24tc2VjdXJlCisJY29ubmVjdGlvbnMgYW5kIGFuIGBpbWFwczovL2AgcHJlZml4IGZvciBzZWN1cmUgY29ubmVjdGlvbnMuCisJSWdub3JlZCB3aGVuIGltYXAudHVubmVsIGlzIHNldCwgYnV0IHJlcXVpcmVkIG90aGVyd2lzZS4KKworaW1hcC51c2VyOjoKKwlUaGUgdXNlcm5hbWUgdG8gdXNlIHdoZW4gbG9nZ2luZyBpbiB0byB0aGUgc2VydmVyLgorCitpbWFwLnBhc3M6OgorCVRoZSBwYXNzd29yZCB0byB1c2Ugd2hlbiBsb2dnaW5nIGluIHRvIHRoZSBzZXJ2ZXIuCisKK2ltYXAucG9ydDo6CisJQW4gaW50ZWdlciBwb3J0IG51bWJlciB0byBjb25uZWN0IHRvIG9uIHRoZSBzZXJ2ZXIuCisJRGVmYXVsdHMgdG8gMTQzIGZvciBpbWFwOi8vIGhvc3RzIGFuZCA5OTMgZm9yIGltYXBzOi8vIGhvc3RzLgorCUlnbm9yZWQgd2hlbiBpbWFwLnR1bm5lbCBpcyBzZXQuCisKK2ltYXAuc3NsdmVyaWZ5OjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUKKwl1c2VkIGJ5IHRoZSBTU0wvVExTIGNvbm5lY3Rpb24uIERlZmF1bHQgaXMgYHRydWVgLiBJZ25vcmVkIHdoZW4KKwlpbWFwLnR1bm5lbCBpcyBzZXQuCisKK2ltYXAucHJlZm9ybWF0dGVkSFRNTDo6CisJQSBib29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSB1c2Ugb2YgaHRtbCBlbmNvZGluZyB3aGVuIHNlbmRpbmcKKwlhIHBhdGNoLiAgQW4gaHRtbCBlbmNvZGVkIHBhdGNoIHdpbGwgYmUgYnJhY2tldGVkIHdpdGggPHByZT4KKwlhbmQgaGF2ZSBhIGNvbnRlbnQgdHlwZSBvZiB0ZXh0L2h0bWwuICBJcm9uaWNhbGx5LCBlbmFibGluZyB0aGlzCisJb3B0aW9uIGNhdXNlcyBUaHVuZGVyYmlyZCB0byBzZW5kIHRoZSBwYXRjaCBhcyBhIHBsYWluL3RleHQsCisJZm9ybWF0PWZpeGVkIGVtYWlsLiAgRGVmYXVsdCBpcyBgZmFsc2VgLgorCitpbWFwLmF1dGhNZXRob2Q6OgorCVNwZWNpZnkgYXV0aGVudGljYXRlIG1ldGhvZCBmb3IgYXV0aGVudGljYXRpb24gd2l0aCBJTUFQIHNlcnZlci4KKwlJZiBHaXQgd2FzIGJ1aWx0IHdpdGggdGhlIE5PX0NVUkwgb3B0aW9uLCBvciBpZiB5b3VyIGN1cmwgdmVyc2lvbiBpcyBvbGRlcgorCXRoYW4gNy4zNC4wLCBvciBpZiB5b3UncmUgcnVubmluZyBnaXQtaW1hcC1zZW5kIHdpdGggdGhlIGAtLW5vLWN1cmxgCisJb3B0aW9uLCB0aGUgb25seSBzdXBwb3J0ZWQgbWV0aG9kIGlzICdDUkFNLU1ENScuIElmIHRoaXMgaXMgbm90IHNldAorCXRoZW4gJ2dpdCBpbWFwLXNlbmQnIHVzZXMgdGhlIGJhc2ljIElNQVAgcGxhaW50ZXh0IExPR0lOIGNvbW1hbmQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiNTBiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2luZGV4LnR4dApAQCAtMCwwICsxLDI3IEBACitpbmRleC5yZWNvcmRFbmRPZkluZGV4RW50cmllczo6CisJU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGluZGV4IGZpbGUgc2hvdWxkIGluY2x1ZGUgYW4gIkVuZCBPZiBJbmRleAorCUVudHJ5IiBzZWN0aW9uLiBUaGlzIHJlZHVjZXMgaW5kZXggbG9hZCB0aW1lIG9uIG11bHRpcHJvY2Vzc29yCisJbWFjaGluZXMgYnV0IHByb2R1Y2VzIGEgbWVzc2FnZSAiaWdub3JpbmcgRU9JRSBleHRlbnNpb24iIHdoZW4KKwlyZWFkaW5nIHRoZSBpbmRleCB1c2luZyBHaXQgdmVyc2lvbnMgYmVmb3JlIDIuMjAuIERlZmF1bHRzIHRvCisJJ3RydWUnIGlmIGluZGV4LnRocmVhZHMgaGFzIGJlZW4gZXhwbGljaXRseSBlbmFibGVkLCAnZmFsc2UnCisJb3RoZXJ3aXNlLgorCitpbmRleC5yZWNvcmRPZmZzZXRUYWJsZTo6CisJU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGluZGV4IGZpbGUgc2hvdWxkIGluY2x1ZGUgYW4gIkluZGV4IEVudHJ5CisJT2Zmc2V0IFRhYmxlIiBzZWN0aW9uLiBUaGlzIHJlZHVjZXMgaW5kZXggbG9hZCB0aW1lIG9uCisJbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMgYnV0IHByb2R1Y2VzIGEgbWVzc2FnZSAiaWdub3JpbmcgSUVPVAorCWV4dGVuc2lvbiIgd2hlbiByZWFkaW5nIHRoZSBpbmRleCB1c2luZyBHaXQgdmVyc2lvbnMgYmVmb3JlIDIuMjAuCisJRGVmYXVsdHMgdG8gJ3RydWUnIGlmIGluZGV4LnRocmVhZHMgaGFzIGJlZW4gZXhwbGljaXRseSBlbmFibGVkLAorCSdmYWxzZScgb3RoZXJ3aXNlLgorCitpbmRleC50aHJlYWRzOjoKKwlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNwYXduIHdoZW4gbG9hZGluZyB0aGUgaW5kZXguCisJVGhpcyBpcyBtZWFudCB0byByZWR1Y2UgaW5kZXggbG9hZCB0aW1lIG9uIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzLgorCVNwZWNpZnlpbmcgMCBvciAndHJ1ZScgd2lsbCBjYXVzZSBHaXQgdG8gYXV0by1kZXRlY3QgdGhlIG51bWJlciBvZgorCUNQVSdzIGFuZCBzZXQgdGhlIG51bWJlciBvZiB0aHJlYWRzIGFjY29yZGluZ2x5LiBTcGVjaWZ5aW5nIDEgb3IKKwknZmFsc2UnIHdpbGwgZGlzYWJsZSBtdWx0aXRocmVhZGluZy4gRGVmYXVsdHMgdG8gJ3RydWUnLgorCitpbmRleC52ZXJzaW9uOjoKKwlTcGVjaWZ5IHRoZSB2ZXJzaW9uIHdpdGggd2hpY2ggbmV3IGluZGV4IGZpbGVzIHNob3VsZCBiZQorCWluaXRpYWxpemVkLiAgVGhpcyBkb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgcmVwb3NpdG9yaWVzLgorCUlmIGBmZWF0dXJlLm1hbnlGaWxlc2AgaXMgZW5hYmxlZCwgdGhlbiB0aGUgZGVmYXVsdCBpcyA0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvaW5pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9pbml0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmZhOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaW5pdC50eHQKQEAgLTAsMCArMSwzIEBACitpbml0LnRlbXBsYXRlRGlyOjoKKwlTcGVjaWZ5IHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSBjb3BpZWQuCisJKFNlZSB0aGUgIlRFTVBMQVRFIERJUkVDVE9SWSIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1pbml0WzFdLikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2luc3Rhd2ViLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2luc3Rhd2ViLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGNiMmY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaW5zdGF3ZWIudHh0CkBAIC0wLDAgKzEsMjAgQEAKK2luc3Rhd2ViLmJyb3dzZXI6OgorCVNwZWNpZnkgdGhlIHByb2dyYW0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnJvd3NlIHlvdXIgd29ya2luZworCXJlcG9zaXRvcnkgaW4gZ2l0d2ViLiBTZWUgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0uCisKK2luc3Rhd2ViLmh0dHBkOjoKKwlUaGUgSFRUUCBkYWVtb24gY29tbWFuZC1saW5lIHRvIHN0YXJ0IGdpdHdlYiBvbiB5b3VyIHdvcmtpbmcKKwlyZXBvc2l0b3J5LiBTZWUgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0uCisKK2luc3Rhd2ViLmxvY2FsOjoKKwlJZiB0cnVlIHRoZSB3ZWIgc2VydmVyIHN0YXJ0ZWQgYnkgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0gd2lsbAorCWJlIGJvdW5kIHRvIHRoZSBsb2NhbCBJUCAoMTI3LjAuMC4xKS4KKworaW5zdGF3ZWIubW9kdWxlUGF0aDo6CisJVGhlIGRlZmF1bHQgbW9kdWxlIHBhdGggZm9yIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdIHRvIHVzZQorCWluc3RlYWQgb2YgL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzLiAgT25seSB1c2VkIGlmIGh0dHBkCisJaXMgQXBhY2hlLgorCitpbnN0YXdlYi5wb3J0OjoKKwlUaGUgcG9ydCBudW1iZXIgdG8gYmluZCB0aGUgZ2l0d2ViIGh0dHBkIHRvLiBTZWUKKwlsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL2ludGVyYWN0aXZlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2ludGVyYWN0aXZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQzYzdlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvaW50ZXJhY3RpdmUudHh0CkBAIC0wLDAgKzEsMTcgQEAKK2ludGVyYWN0aXZlLnNpbmdsZUtleTo6CisJSW4gaW50ZXJhY3RpdmUgY29tbWFuZHMsIGFsbG93IHRoZSB1c2VyIHRvIHByb3ZpZGUgb25lLWxldHRlcgorCWlucHV0IHdpdGggYSBzaW5nbGUga2V5IChpLmUuLCB3aXRob3V0IGhpdHRpbmcgZW50ZXIpLgorCUN1cnJlbnRseSB0aGlzIGlzIHVzZWQgYnkgdGhlIGAtLXBhdGNoYCBtb2RlIG9mCisJbGlua2dpdDpnaXQtYWRkWzFdLCBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKKwlsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdLCBsaW5rZ2l0OmdpdC1jb21taXRbMV0sCisJbGlua2dpdDpnaXQtcmVzZXRbMV0sIGFuZCBsaW5rZ2l0OmdpdC1zdGFzaFsxXS4gTm90ZSB0aGF0IHRoaXMKKwlzZXR0aW5nIGlzIHNpbGVudGx5IGlnbm9yZWQgaWYgcG9ydGFibGUga2V5c3Ryb2tlIGlucHV0CisJaXMgbm90IGF2YWlsYWJsZTsgcmVxdWlyZXMgdGhlIFBlcmwgbW9kdWxlIFRlcm06OlJlYWRLZXkuCisKK2ludGVyYWN0aXZlLmRpZmZGaWx0ZXI6OgorCVdoZW4gYW4gaW50ZXJhY3RpdmUgY29tbWFuZCAoc3VjaCBhcyBgZ2l0IGFkZCAtLXBhdGNoYCkgc2hvd3MKKwlhIGNvbG9yaXplZCBkaWZmLCBnaXQgd2lsbCBwaXBlIHRoZSBkaWZmIHRocm91Z2ggdGhlIHNoZWxsCisJY29tbWFuZCBkZWZpbmVkIGJ5IHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gVGhlIGNvbW1hbmQgbWF5CisJbWFyayB1cCB0aGUgZGlmZiBmdXJ0aGVyIGZvciBodW1hbiBjb25zdW1wdGlvbiwgcHJvdmlkZWQgdGhhdCBpdAorCXJldGFpbnMgYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlIHdpdGggdGhlIGxpbmVzIGluIHRoZQorCW9yaWdpbmFsIGRpZmYuIERlZmF1bHRzIHRvIGRpc2FibGVkIChubyBmaWx0ZXJpbmcpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2xvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTllMWUzOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2xvZy50eHQKQEAgLTAsMCArMSw0NCBAQAorbG9nLmFiYnJldkNvbW1pdDo6CisJSWYgdHJ1ZSwgbWFrZXMgbGlua2dpdDpnaXQtbG9nWzFdLCBsaW5rZ2l0OmdpdC1zaG93WzFdLCBhbmQKKwlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXSBhc3N1bWUgYC0tYWJicmV2LWNvbW1pdGAuIFlvdSBtYXkKKwlvdmVycmlkZSB0aGlzIG9wdGlvbiB3aXRoIGAtLW5vLWFiYnJldi1jb21taXRgLgorCitsb2cuZGF0ZTo6CisJU2V0IHRoZSBkZWZhdWx0IGRhdGUtdGltZSBtb2RlIGZvciB0aGUgJ2xvZycgY29tbWFuZC4KKwlTZXR0aW5nIGEgdmFsdWUgZm9yIGxvZy5kYXRlIGlzIHNpbWlsYXIgdG8gdXNpbmcgJ2dpdCBsb2cnJ3MKKwlgLS1kYXRlYCBvcHRpb24uICBTZWUgbGlua2dpdDpnaXQtbG9nWzFdIGZvciBkZXRhaWxzLgorCitsb2cuZGVjb3JhdGU6OgorCVByaW50IG91dCB0aGUgcmVmIG5hbWVzIG9mIGFueSBjb21taXRzIHRoYXQgYXJlIHNob3duIGJ5IHRoZSBsb2cKKwljb21tYW5kLiBJZiAnc2hvcnQnIGlzIHNwZWNpZmllZCwgdGhlIHJlZiBuYW1lIHByZWZpeGVzICdyZWZzL2hlYWRzLycsCisJJ3JlZnMvdGFncy8nIGFuZCAncmVmcy9yZW1vdGVzLycgd2lsbCBub3QgYmUgcHJpbnRlZC4gSWYgJ2Z1bGwnIGlzCisJc3BlY2lmaWVkLCB0aGUgZnVsbCByZWYgbmFtZSAoaW5jbHVkaW5nIHByZWZpeCkgd2lsbCBiZSBwcmludGVkLgorCUlmICdhdXRvJyBpcyBzcGVjaWZpZWQsIHRoZW4gaWYgdGhlIG91dHB1dCBpcyBnb2luZyB0byBhIHRlcm1pbmFsLAorCXRoZSByZWYgbmFtZXMgYXJlIHNob3duIGFzIGlmICdzaG9ydCcgd2VyZSBnaXZlbiwgb3RoZXJ3aXNlIG5vIHJlZgorCW5hbWVzIGFyZSBzaG93bi4gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYC0tZGVjb3JhdGVgIG9wdGlvbgorCW9mIHRoZSBgZ2l0IGxvZ2AuCisKK2xvZy5mb2xsb3c6OgorCUlmIGB0cnVlYCwgYGdpdCBsb2dgIHdpbGwgYWN0IGFzIGlmIHRoZSBgLS1mb2xsb3dgIG9wdGlvbiB3YXMgdXNlZCB3aGVuCisJYSBzaW5nbGUgPHBhdGg+IGlzIGdpdmVuLiAgVGhpcyBoYXMgdGhlIHNhbWUgbGltaXRhdGlvbnMgYXMgYC0tZm9sbG93YCwKKwlpLmUuIGl0IGNhbm5vdCBiZSB1c2VkIHRvIGZvbGxvdyBtdWx0aXBsZSBmaWxlcyBhbmQgZG9lcyBub3Qgd29yayB3ZWxsCisJb24gbm9uLWxpbmVhciBoaXN0b3J5LgorCitsb2cuZ3JhcGhDb2xvcnM6OgorCUEgbGlzdCBvZiBjb2xvcnMsIHNlcGFyYXRlZCBieSBjb21tYXMsIHRoYXQgY2FuIGJlIHVzZWQgdG8gZHJhdworCWhpc3RvcnkgbGluZXMgaW4gYGdpdCBsb2cgLS1ncmFwaGAuCisKK2xvZy5zaG93Um9vdDo6CisJSWYgdHJ1ZSwgdGhlIGluaXRpYWwgY29tbWl0IHdpbGwgYmUgc2hvd24gYXMgYSBiaWcgY3JlYXRpb24gZXZlbnQuCisJVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgZGlmZiBhZ2FpbnN0IGFuIGVtcHR5IHRyZWUuCisJVG9vbHMgbGlrZSBsaW5rZ2l0OmdpdC1sb2dbMV0gb3IgbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0sIHdoaWNoCisJbm9ybWFsbHkgaGlkZSB0aGUgcm9vdCBjb21taXQgd2lsbCBub3cgc2hvdyBpdC4gVHJ1ZSBieSBkZWZhdWx0LgorCitsb2cuc2hvd1NpZ25hdHVyZTo6CisJSWYgdHJ1ZSwgbWFrZXMgbGlua2dpdDpnaXQtbG9nWzFdLCBsaW5rZ2l0OmdpdC1zaG93WzFdLCBhbmQKKwlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXSBhc3N1bWUgYC0tc2hvdy1zaWduYXR1cmVgLgorCitsb2cubWFpbG1hcDo6CisJSWYgdHJ1ZSwgbWFrZXMgbGlua2dpdDpnaXQtbG9nWzFdLCBsaW5rZ2l0OmdpdC1zaG93WzFdLCBhbmQKKwlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXSBhc3N1bWUgYC0tdXNlLW1haWxtYXBgLCBvdGhlcndpc2UKKwlhc3N1bWUgYC0tbm8tdXNlLW1haWxtYXBgLiBUcnVlIGJ5IGRlZmF1bHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYWlsaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYWlsaW5mby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1NGQ0YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL21haWxpbmZvLnR4dApAQCAtMCwwICsxLDYgQEAKK21haWxpbmZvLnNjaXNzb3JzOjoKKwlJZiB0cnVlLCBtYWtlcyBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSAoYW5kIHRoZXJlZm9yZQorCWxpbmtnaXQ6Z2l0LWFtWzFdKSBhY3QgYnkgZGVmYXVsdCBhcyBpZiB0aGUgLS1zY2lzc29ycyBvcHRpb24KKwl3YXMgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQtbGluZS4gV2hlbiBhY3RpdmUsIHRoaXMgZmVhdHVyZXMKKwlyZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgbWVzc2FnZSBib2R5IGJlZm9yZSBhIHNjaXNzb3JzCisJbGluZSAoaS5lLiBjb25zaXN0aW5nIG1haW5seSBvZiAiPjgiLCAiODwiIGFuZCAiLSIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvbWFpbG1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYWlsbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGNiYzMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbWFpbG1hcC50eHQKQEAgLTAsMCArMSwxNSBAQAorbWFpbG1hcC5maWxlOjoKKwlUaGUgbG9jYXRpb24gb2YgYW4gYXVnbWVudGluZyBtYWlsbWFwIGZpbGUuIFRoZSBkZWZhdWx0CisJbWFpbG1hcCwgbG9jYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeSwgaXMgbG9hZGVkCisJZmlyc3QsIHRoZW4gdGhlIG1haWxtYXAgZmlsZSBwb2ludGVkIHRvIGJ5IHRoaXMgdmFyaWFibGUuCisJVGhlIGxvY2F0aW9uIG9mIHRoZSBtYWlsbWFwIGZpbGUgbWF5IGJlIGluIGEgcmVwb3NpdG9yeQorCXN1YmRpcmVjdG9yeSwgb3Igc29tZXdoZXJlIG91dHNpZGUgb2YgdGhlIHJlcG9zaXRvcnkgaXRzZWxmLgorCVNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBhbmQgbGlua2dpdDpnaXQtYmxhbWVbMV0uCisKK21haWxtYXAuYmxvYjo6CisJTGlrZSBgbWFpbG1hcC5maWxlYCwgYnV0IGNvbnNpZGVyIHRoZSB2YWx1ZSBhcyBhIHJlZmVyZW5jZSB0byBhCisJYmxvYiBpbiB0aGUgcmVwb3NpdG9yeS4gSWYgYm90aCBgbWFpbG1hcC5maWxlYCBhbmQKKwlgbWFpbG1hcC5ibG9iYCBhcmUgZ2l2ZW4sIGJvdGggYXJlIHBhcnNlZCwgd2l0aCBlbnRyaWVzIGZyb20KKwlgbWFpbG1hcC5maWxlYCB0YWtpbmcgcHJlY2VkZW5jZS4gSW4gYSBiYXJlIHJlcG9zaXRvcnksIHRoaXMKKwlkZWZhdWx0cyB0byBgSEVBRDoubWFpbG1hcGAuIEluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeSwgaXQKKwlkZWZhdWx0cyB0byBlbXB0eS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL21hbi50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjdkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tYW4udHh0CkBAIC0wLDAgKzEsMTIgQEAKK21hbi52aWV3ZXI6OgorCVNwZWNpZnkgdGhlIHByb2dyYW1zIHRoYXQgbWF5IGJlIHVzZWQgdG8gZGlzcGxheSBoZWxwIGluIHRoZQorCSdtYW4nIGZvcm1hdC4gU2VlIGxpbmtnaXQ6Z2l0LWhlbHBbMV0uCisKK21hbi48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIG1hbiB2aWV3ZXIuIFRoZQorCXNwZWNpZmllZCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBzaGVsbCB3aXRoIHRoZSBtYW4gcGFnZQorCXBhc3NlZCBhcyBhcmd1bWVudC4gKFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLikKKworbWFuLjx0b29sPi5wYXRoOjoKKwlPdmVycmlkZSB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wgdGhhdCBtYXkgYmUgdXNlZCB0bworCWRpc3BsYXkgaGVscCBpbiB0aGUgJ21hbicgZm9ybWF0LiBTZWUgbGlua2dpdDpnaXQtaGVscFsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL21lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL21lcmdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTMxMzkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbWVyZ2UudHh0CkBAIC0wLDAgKzEsMTA2IEBACittZXJnZS5jb25mbGljdFN0eWxlOjoKKwlTcGVjaWZ5IHRoZSBzdHlsZSBpbiB3aGljaCBjb25mbGljdGVkIGh1bmtzIGFyZSB3cml0dGVuIG91dCB0bworCXdvcmtpbmcgdHJlZSBmaWxlcyB1cG9uIG1lcmdlLiAgVGhlIGRlZmF1bHQgaXMgIm1lcmdlIiwgd2hpY2gKKwlzaG93cyBhIGA8PDw8PDw8YCBjb25mbGljdCBtYXJrZXIsIGNoYW5nZXMgbWFkZSBieSBvbmUgc2lkZSwKKwlhIGA9PT09PT09YCBtYXJrZXIsIGNoYW5nZXMgbWFkZSBieSB0aGUgb3RoZXIgc2lkZSwgYW5kIHRoZW4KKwlhIGA+Pj4+Pj4+YCBtYXJrZXIuICBBbiBhbHRlcm5hdGUgc3R5bGUsICJkaWZmMyIsIGFkZHMgYSBgfHx8fHx8fGAKKwltYXJrZXIgYW5kIHRoZSBvcmlnaW5hbCB0ZXh0IGJlZm9yZSB0aGUgYD09PT09PT1gIG1hcmtlci4KKworbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW06OgorCUlmIG1lcmdlIGlzIGNhbGxlZCB3aXRob3V0IGFueSBjb21taXQgYXJndW1lbnQsIG1lcmdlIHRoZSB1cHN0cmVhbQorCWJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBieSB1c2luZyB0aGVpciBsYXN0CisJb2JzZXJ2ZWQgdmFsdWVzIHN0b3JlZCBpbiB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisJVGhlIHZhbHVlcyBvZiB0aGUgYGJyYW5jaC48Y3VycmVudCBicmFuY2g+Lm1lcmdlYCB0aGF0IG5hbWUgdGhlCisJYnJhbmNoZXMgYXQgdGhlIHJlbW90ZSBuYW1lZCBieSBgYnJhbmNoLjxjdXJyZW50IGJyYW5jaD4ucmVtb3RlYAorCWFyZSBjb25zdWx0ZWQsIGFuZCB0aGVuIHRoZXkgYXJlIG1hcHBlZCB2aWEgYHJlbW90ZS48cmVtb3RlPi5mZXRjaGAKKwl0byB0aGVpciBjb3JyZXNwb25kaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgYW5kIHRoZSB0aXBzIG9mCisJdGhlc2UgdHJhY2tpbmcgYnJhbmNoZXMgYXJlIG1lcmdlZC4KKworbWVyZ2UuZmY6OgorCUJ5IGRlZmF1bHQsIEdpdCBkb2VzIG5vdCBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IHdoZW4gbWVyZ2luZworCWEgY29tbWl0IHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNvbW1pdC4gSW5zdGVhZCwgdGhlCisJdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBmYXN0LWZvcndhcmRlZC4gV2hlbiBzZXQgdG8gYGZhbHNlYCwKKwl0aGlzIHZhcmlhYmxlIHRlbGxzIEdpdCB0byBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IGluIHN1Y2gKKwlhIGNhc2UgKGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBgLS1uby1mZmAgb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQKKwlsaW5lKS4gV2hlbiBzZXQgdG8gYG9ubHlgLCBvbmx5IHN1Y2ggZmFzdC1mb3J3YXJkIG1lcmdlcyBhcmUKKwlhbGxvd2VkIChlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUgYC0tZmYtb25seWAgb3B0aW9uIGZyb20gdGhlCisJY29tbWFuZCBsaW5lKS4KKworbWVyZ2UudmVyaWZ5U2lnbmF0dXJlczo6CisJSWYgdHJ1ZSwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSAtLXZlcmlmeS1zaWduYXR1cmVzIGNvbW1hbmQKKwlsaW5lIG9wdGlvbi4gU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLgorCitpbmNsdWRlOjpmbXQtbWVyZ2UtbXNnLnR4dFtdCisKK21lcmdlLnJlbmFtZUxpbWl0OjoKKwlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyByZW5hbWUgZGV0ZWN0aW9uCisJZHVyaW5nIGEgbWVyZ2U7IGlmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZgorCWRpZmYucmVuYW1lTGltaXQuIFRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGlmIHJlbmFtZSBkZXRlY3Rpb24KKwlpcyB0dXJuZWQgb2ZmLgorCittZXJnZS5yZW5hbWVzOjoKKwlXaGV0aGVyIEdpdCBkZXRlY3RzIHJlbmFtZXMuICBJZiBzZXQgdG8gImZhbHNlIiwgcmVuYW1lIGRldGVjdGlvbgorCWlzIGRpc2FibGVkLiBJZiBzZXQgdG8gInRydWUiLCBiYXNpYyByZW5hbWUgZGV0ZWN0aW9uIGlzIGVuYWJsZWQuCisJRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGRpZmYucmVuYW1lcy4KKworbWVyZ2UuZGlyZWN0b3J5UmVuYW1lczo6CisJV2hldGhlciBHaXQgZGV0ZWN0cyBkaXJlY3RvcnkgcmVuYW1lcywgYWZmZWN0aW5nIHdoYXQgaGFwcGVucyBhdAorCW1lcmdlIHRpbWUgdG8gbmV3IGZpbGVzIGFkZGVkIHRvIGEgZGlyZWN0b3J5IG9uIG9uZSBzaWRlIG9mCisJaGlzdG9yeSB3aGVuIHRoYXQgZGlyZWN0b3J5IHdhcyByZW5hbWVkIG9uIHRoZSBvdGhlciBzaWRlIG9mCisJaGlzdG9yeS4gIElmIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXMgaXMgc2V0IHRvICJmYWxzZSIsIGRpcmVjdG9yeQorCXJlbmFtZSBkZXRlY3Rpb24gaXMgZGlzYWJsZWQsIG1lYW5pbmcgdGhhdCBzdWNoIG5ldyBmaWxlcyB3aWxsIGJlCisJbGVmdCBiZWhpbmQgaW4gdGhlIG9sZCBkaXJlY3RvcnkuICBJZiBzZXQgdG8gInRydWUiLCBkaXJlY3RvcnkKKwlyZW5hbWUgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIG1lYW5pbmcgdGhhdCBzdWNoIG5ldyBmaWxlcyB3aWxsIGJlCisJbW92ZWQgaW50byB0aGUgbmV3IGRpcmVjdG9yeS4gIElmIHNldCB0byAiY29uZmxpY3QiLCBhIGNvbmZsaWN0CisJd2lsbCBiZSByZXBvcnRlZCBmb3Igc3VjaCBwYXRocy4gIElmIG1lcmdlLnJlbmFtZXMgaXMgZmFsc2UsCisJbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcyBpcyBpZ25vcmVkIGFuZCB0cmVhdGVkIGFzIGZhbHNlLiAgRGVmYXVsdHMKKwl0byAiY29uZmxpY3QiLgorCittZXJnZS5yZW5vcm1hbGl6ZTo6CisJVGVsbCBHaXQgdGhhdCBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gb2YgZmlsZXMgaW4gdGhlCisJcmVwb3NpdG9yeSBoYXMgY2hhbmdlZCBvdmVyIHRpbWUgKGUuZy4gZWFybGllciBjb21taXRzIHJlY29yZAorCXRleHQgZmlsZXMgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncywgYnV0IHJlY2VudCBvbmVzIHVzZSBMRiBsaW5lCisJZW5kaW5ncykuICBJbiBzdWNoIGEgcmVwb3NpdG9yeSwgR2l0IGNhbiBjb252ZXJ0IHRoZSBkYXRhCisJcmVjb3JkZWQgaW4gY29tbWl0cyB0byBhIGNhbm9uaWNhbCBmb3JtIGJlZm9yZSBwZXJmb3JtaW5nIGEKKwltZXJnZSB0byByZWR1Y2UgdW5uZWNlc3NhcnkgY29uZmxpY3RzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sCisJc2VlIHNlY3Rpb24gIk1lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJpbmcgY2hlY2tpbi9jaGVja291dAorCWF0dHJpYnV0ZXMiIGluIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XS4KKworbWVyZ2Uuc3RhdDo6CisJV2hldGhlciB0byBwcmludCB0aGUgZGlmZnN0YXQgYmV0d2VlbiBPUklHX0hFQUQgYW5kIHRoZSBtZXJnZSByZXN1bHQKKwlhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gIFRydWUgYnkgZGVmYXVsdC4KKworbWVyZ2UudG9vbDo6CisJQ29udHJvbHMgd2hpY2ggbWVyZ2UgdG9vbCBpcyB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXS4KKwlUaGUgbGlzdCBiZWxvdyBzaG93cyB0aGUgdmFsaWQgYnVpbHQtaW4gdmFsdWVzLgorCUFueSBvdGhlciB2YWx1ZSBpcyB0cmVhdGVkIGFzIGEgY3VzdG9tIG1lcmdlIHRvb2wgYW5kIHJlcXVpcmVzCisJdGhhdCBhIGNvcnJlc3BvbmRpbmcgbWVyZ2V0b29sLjx0b29sPi5jbWQgdmFyaWFibGUgaXMgZGVmaW5lZC4KKworbWVyZ2UuZ3VpdG9vbDo6CisJQ29udHJvbHMgd2hpY2ggbWVyZ2UgdG9vbCBpcyB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXSB3aGVuIHRoZQorCS1nLy0tZ3VpIGZsYWcgaXMgc3BlY2lmaWVkLiBUaGUgbGlzdCBiZWxvdyBzaG93cyB0aGUgdmFsaWQgYnVpbHQtaW4gdmFsdWVzLgorCUFueSBvdGhlciB2YWx1ZSBpcyB0cmVhdGVkIGFzIGEgY3VzdG9tIG1lcmdlIHRvb2wgYW5kIHJlcXVpcmVzIHRoYXQgYQorCWNvcnJlc3BvbmRpbmcgbWVyZ2V0b29sLjxndWl0b29sPi5jbWQgdmFyaWFibGUgaXMgZGVmaW5lZC4KKworaW5jbHVkZTo6Li4vbWVyZ2V0b29scy1tZXJnZS50eHRbXQorCittZXJnZS52ZXJib3NpdHk6OgorCUNvbnRyb2xzIHRoZSBhbW91bnQgb2Ygb3V0cHV0IHNob3duIGJ5IHRoZSByZWN1cnNpdmUgbWVyZ2UKKwlzdHJhdGVneS4gIExldmVsIDAgb3V0cHV0cyBub3RoaW5nIGV4Y2VwdCBhIGZpbmFsIGVycm9yCisJbWVzc2FnZSBpZiBjb25mbGljdHMgd2VyZSBkZXRlY3RlZC4gTGV2ZWwgMSBvdXRwdXRzIG9ubHkKKwljb25mbGljdHMsIDIgb3V0cHV0cyBjb25mbGljdHMgYW5kIGZpbGUgY2hhbmdlcy4gIExldmVsIDUgYW5kCisJYWJvdmUgb3V0cHV0cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBUaGUgZGVmYXVsdCBpcyBsZXZlbCAyLgorCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX01FUkdFX1ZFUkJPU0lUWWAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK21lcmdlLjxkcml2ZXI+Lm5hbWU6OgorCURlZmluZXMgYSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciBhIGN1c3RvbSBsb3ctbGV2ZWwKKwltZXJnZSBkcml2ZXIuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCittZXJnZS48ZHJpdmVyPi5kcml2ZXI6OgorCURlZmluZXMgdGhlIGNvbW1hbmQgdGhhdCBpbXBsZW1lbnRzIGEgY3VzdG9tIGxvdy1sZXZlbAorCW1lcmdlIGRyaXZlci4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK21lcmdlLjxkcml2ZXI+LnJlY3Vyc2l2ZTo6CisJTmFtZXMgYSBsb3ctbGV2ZWwgbWVyZ2UgZHJpdmVyIHRvIGJlIHVzZWQgd2hlbgorCXBlcmZvcm1pbmcgYW4gaW50ZXJuYWwgbWVyZ2UgYmV0d2VlbiBjb21tb24gYW5jZXN0b3JzLgorCVNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9tZXJnZXRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbWVyZ2V0b29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWVkMzFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbWVyZ2V0b29sLnR4dApAQCAtMCwwICsxLDUzIEBACittZXJnZXRvb2wuPHRvb2w+LnBhdGg6OgorCU92ZXJyaWRlIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbC4gIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UKKwl5b3VyIHRvb2wgaXMgbm90IGluIHRoZSBQQVRILgorCittZXJnZXRvb2wuPHRvb2w+LmNtZDo6CisJU3BlY2lmeSB0aGUgY29tbWFuZCB0byBpbnZva2UgdGhlIHNwZWNpZmllZCBtZXJnZSB0b29sLiAgVGhlCisJc3BlY2lmaWVkIGNvbW1hbmQgaXMgZXZhbHVhdGVkIGluIHNoZWxsIHdpdGggdGhlIGZvbGxvd2luZworCXZhcmlhYmxlcyBhdmFpbGFibGU6ICdCQVNFJyBpcyB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlCisJY29udGFpbmluZyB0aGUgY29tbW9uIGJhc2Ugb2YgdGhlIGZpbGVzIHRvIGJlIG1lcmdlZCwgaWYgYXZhaWxhYmxlOworCSdMT0NBTCcgaXMgdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZgorCXRoZSBmaWxlIG9uIHRoZSBjdXJyZW50IGJyYW5jaDsgJ1JFTU9URScgaXMgdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkKKwlmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGZyb20gdGhlIGJyYW5jaCBiZWluZworCW1lcmdlZDsgJ01FUkdFRCcgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd2hpY2ggdGhlIG1lcmdlCisJdG9vbCBzaG91bGQgd3JpdGUgdGhlIHJlc3VsdHMgb2YgYSBzdWNjZXNzZnVsIG1lcmdlLgorCittZXJnZXRvb2wuPHRvb2w+LnRydXN0RXhpdENvZGU6OgorCUZvciBhIGN1c3RvbSBtZXJnZSBjb21tYW5kLCBzcGVjaWZ5IHdoZXRoZXIgdGhlIGV4aXQgY29kZSBvZgorCXRoZSBtZXJnZSBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBtZXJnZSB3YXMKKwlzdWNjZXNzZnVsLiAgSWYgdGhpcyBpcyBub3Qgc2V0IHRvIHRydWUgdGhlbiB0aGUgbWVyZ2UgdGFyZ2V0IGZpbGUKKwl0aW1lc3RhbXAgaXMgY2hlY2tlZCBhbmQgdGhlIG1lcmdlIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHN1Y2Nlc3NmdWwKKwlpZiB0aGUgZmlsZSBoYXMgYmVlbiB1cGRhdGVkLCBvdGhlcndpc2UgdGhlIHVzZXIgaXMgcHJvbXB0ZWQgdG8KKwlpbmRpY2F0ZSB0aGUgc3VjY2VzcyBvZiB0aGUgbWVyZ2UuCisKK21lcmdldG9vbC5tZWxkLmhhc091dHB1dDo6CisJT2xkZXIgdmVyc2lvbnMgb2YgYG1lbGRgIGRvIG5vdCBzdXBwb3J0IHRoZSBgLS1vdXRwdXRgIG9wdGlvbi4KKwlHaXQgd2lsbCBhdHRlbXB0IHRvIGRldGVjdCB3aGV0aGVyIGBtZWxkYCBzdXBwb3J0cyBgLS1vdXRwdXRgCisJYnkgaW5zcGVjdGluZyB0aGUgb3V0cHV0IG9mIGBtZWxkIC0taGVscGAuICBDb25maWd1cmluZworCWBtZXJnZXRvb2wubWVsZC5oYXNPdXRwdXRgIHdpbGwgbWFrZSBHaXQgc2tpcCB0aGVzZSBjaGVja3MgYW5kCisJdXNlIHRoZSBjb25maWd1cmVkIHZhbHVlIGluc3RlYWQuICBTZXR0aW5nIGBtZXJnZXRvb2wubWVsZC5oYXNPdXRwdXRgCisJdG8gYHRydWVgIHRlbGxzIEdpdCB0byB1bmNvbmRpdGlvbmFsbHkgdXNlIHRoZSBgLS1vdXRwdXRgIG9wdGlvbiwKKwlhbmQgYGZhbHNlYCBhdm9pZHMgdXNpbmcgYC0tb3V0cHV0YC4KKworbWVyZ2V0b29sLmtlZXBCYWNrdXA6OgorCUFmdGVyIHBlcmZvcm1pbmcgYSBtZXJnZSwgdGhlIG9yaWdpbmFsIGZpbGUgd2l0aCBjb25mbGljdCBtYXJrZXJzCisJY2FuIGJlIHNhdmVkIGFzIGEgZmlsZSB3aXRoIGEgYC5vcmlnYCBleHRlbnNpb24uICBJZiB0aGlzIHZhcmlhYmxlCisJaXMgc2V0IHRvIGBmYWxzZWAgdGhlbiB0aGlzIGZpbGUgaXMgbm90IHByZXNlcnZlZC4gIERlZmF1bHRzIHRvCisJYHRydWVgIChpLmUuIGtlZXAgdGhlIGJhY2t1cCBmaWxlcykuCisKK21lcmdldG9vbC5rZWVwVGVtcG9yYXJpZXM6OgorCVdoZW4gaW52b2tpbmcgYSBjdXN0b20gbWVyZ2UgdG9vbCwgR2l0IHVzZXMgYSBzZXQgb2YgdGVtcG9yYXJ5CisJZmlsZXMgdG8gcGFzcyB0byB0aGUgdG9vbC4gSWYgdGhlIHRvb2wgcmV0dXJucyBhbiBlcnJvciBhbmQgdGhpcworCXZhcmlhYmxlIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gdGhlc2UgdGVtcG9yYXJ5IGZpbGVzIHdpbGwgYmUKKwlwcmVzZXJ2ZWQsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciB0aGUgdG9vbCBoYXMKKwlleGl0ZWQuIERlZmF1bHRzIHRvIGBmYWxzZWAuCisKK21lcmdldG9vbC53cml0ZVRvVGVtcDo6CisJR2l0IHdyaXRlcyB0ZW1wb3JhcnkgJ0JBU0UnLCAnTE9DQUwnLCBhbmQgJ1JFTU9URScgdmVyc2lvbnMgb2YKKwljb25mbGljdGluZyBmaWxlcyBpbiB0aGUgd29ya3RyZWUgYnkgZGVmYXVsdC4gIEdpdCB3aWxsIGF0dGVtcHQKKwl0byB1c2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciB0aGVzZSBmaWxlcyB3aGVuIHNldCBgdHJ1ZWAuCisJRGVmYXVsdHMgdG8gYGZhbHNlYC4KKworbWVyZ2V0b29sLnByb21wdDo6CisJUHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL25vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL25vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWVmNTZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvbm90ZXMudHh0CkBAIC0wLDAgKzEsNTkgQEAKK25vdGVzLm1lcmdlU3RyYXRlZ3k6OgorCVdoaWNoIG1lcmdlIHN0cmF0ZWd5IHRvIGNob29zZSBieSBkZWZhdWx0IHdoZW4gcmVzb2x2aW5nIG5vdGVzCisJY29uZmxpY3RzLiAgTXVzdCBiZSBvbmUgb2YgYG1hbnVhbGAsIGBvdXJzYCwgYHRoZWlyc2AsIGB1bmlvbmAsIG9yCisJYGNhdF9zb3J0X3VuaXFgLiAgRGVmYXVsdHMgdG8gYG1hbnVhbGAuICBTZWUgIk5PVEVTIE1FUkdFIFNUUkFURUdJRVMiCisJc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBlYWNoIHN0cmF0ZWd5LgorCitub3Rlcy48bmFtZT4ubWVyZ2VTdHJhdGVneTo6CisJV2hpY2ggbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hvb3NlIHdoZW4gZG9pbmcgYSBub3RlcyBtZXJnZSBpbnRvCisJcmVmcy9ub3Rlcy88bmFtZT4uICBUaGlzIG92ZXJyaWRlcyB0aGUgbW9yZSBnZW5lcmFsCisJIm5vdGVzLm1lcmdlU3RyYXRlZ3kiLiAgU2VlIHRoZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIgc2VjdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LW5vdGVzWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhdmFpbGFibGUgc3RyYXRlZ2llcy4KKworbm90ZXMuZGlzcGxheVJlZjo6CisJVGhlIChmdWxseSBxdWFsaWZpZWQpIHJlZm5hbWUgZnJvbSB3aGljaCB0byBzaG93IG5vdGVzIHdoZW4KKwlzaG93aW5nIGNvbW1pdCBtZXNzYWdlcy4gIFRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQKKwl0byBhIGdsb2IsIGluIHdoaWNoIGNhc2Ugbm90ZXMgZnJvbSBhbGwgbWF0Y2hpbmcgcmVmcyB3aWxsIGJlCisJc2hvd24uICBZb3UgbWF5IGFsc28gc3BlY2lmeSB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKwlzZXZlcmFsIHRpbWVzLiAgQSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVkIGZvciByZWZzIHRoYXQgZG8gbm90CisJZXhpc3QsIGJ1dCBhIGdsb2IgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVmcyBpcyBzaWxlbnRseQorCWlnbm9yZWQuCisrCitUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9OT1RFU19ESVNQTEFZX1JFRmAKK2Vudmlyb25tZW50IHZhcmlhYmxlLCB3aGljaCBtdXN0IGJlIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgcmVmcyBvcgorZ2xvYnMuCisrCitUaGUgZWZmZWN0aXZlIHZhbHVlIG9mICJjb3JlLm5vdGVzUmVmIiAocG9zc2libHkgb3ZlcnJpZGRlbiBieQorR0lUX05PVEVTX1JFRikgaXMgYWxzbyBpbXBsaWNpdGx5IGFkZGVkIHRvIHRoZSBsaXN0IG9mIHJlZnMgdG8gYmUKK2Rpc3BsYXllZC4KKworbm90ZXMucmV3cml0ZS48Y29tbWFuZD46OgorCVdoZW4gcmV3cml0aW5nIGNvbW1pdHMgd2l0aCA8Y29tbWFuZD4gKGN1cnJlbnRseSBgYW1lbmRgIG9yCisJYHJlYmFzZWApIGFuZCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byBgdHJ1ZWAsIEdpdAorCWF1dG9tYXRpY2FsbHkgY29waWVzIHlvdXIgbm90ZXMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlCisJcmV3cml0dGVuIGNvbW1pdC4gIERlZmF1bHRzIHRvIGB0cnVlYCwgYnV0IHNlZQorCSJub3Rlcy5yZXdyaXRlUmVmIiBiZWxvdy4KKworbm90ZXMucmV3cml0ZU1vZGU6OgorCVdoZW4gY29weWluZyBub3RlcyBkdXJpbmcgYSByZXdyaXRlIChzZWUgdGhlCisJIm5vdGVzLnJld3JpdGUuPGNvbW1hbmQ+IiBvcHRpb24pLCBkZXRlcm1pbmVzIHdoYXQgdG8gZG8gaWYKKwl0aGUgdGFyZ2V0IGNvbW1pdCBhbHJlYWR5IGhhcyBhIG5vdGUuICBNdXN0IGJlIG9uZSBvZgorCWBvdmVyd3JpdGVgLCBgY29uY2F0ZW5hdGVgLCBgY2F0X3NvcnRfdW5pcWAsIG9yIGBpZ25vcmVgLgorCURlZmF1bHRzIHRvIGBjb25jYXRlbmF0ZWAuCisrCitUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9OT1RFU19SRVdSSVRFX01PREVgCitlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworbm90ZXMucmV3cml0ZVJlZjo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUsIHNwZWNpZmllcyB0aGUgKGZ1bGx5CisJcXVhbGlmaWVkKSByZWYgd2hvc2Ugbm90ZXMgc2hvdWxkIGJlIGNvcGllZC4gIFRoZSByZWYgbWF5IGJlIGEKKwlnbG9iLCBpbiB3aGljaCBjYXNlIG5vdGVzIGluIGFsbCBtYXRjaGluZyByZWZzIHdpbGwgYmUgY29waWVkLgorCVlvdSBtYXkgYWxzbyBzcGVjaWZ5IHRoaXMgY29uZmlndXJhdGlvbiBzZXZlcmFsIHRpbWVzLgorKworRG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWU7IHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIHRvCitlbmFibGUgbm90ZSByZXdyaXRpbmcuICBTZXQgaXQgdG8gYHJlZnMvbm90ZXMvY29tbWl0c2AgdG8gZW5hYmxlCityZXdyaXRpbmcgZm9yIHRoZSBkZWZhdWx0IGNvbW1pdCBub3Rlcy4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX05PVEVTX1JFV1JJVEVfUkVGYAorZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoIG11c3QgYmUgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiByZWZzIG9yCitnbG9icy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3BhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhYzU4MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3BhY2sudHh0CkBAIC0wLDAgKzEsMTM1IEBACitwYWNrLndpbmRvdzo6CisJVGhlIHNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSB3aGVuIG5vCisJd2luZG93IHNpemUgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gRGVmYXVsdHMgdG8gMTAuCisKK3BhY2suZGVwdGg6OgorCVRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIHVzZWQgYnkgbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIHdoZW4gbm8KKwltYXhpbXVtIGRlcHRoIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuIERlZmF1bHRzIHRvIDUwLgorCU1heGltdW0gdmFsdWUgaXMgNDA5NS4KKworcGFjay53aW5kb3dNZW1vcnk6OgorCVRoZSBtYXhpbXVtIHNpemUgb2YgbWVtb3J5IHRoYXQgaXMgY29uc3VtZWQgYnkgZWFjaCB0aHJlYWQKKwlpbiBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0gZm9yIHBhY2sgd2luZG93IG1lbW9yeSB3aGVuCisJbm8gbGltaXQgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoZSB2YWx1ZSBjYW4gYmUKKwlzdWZmaXhlZCB3aXRoICJrIiwgIm0iLCBvciAiZyIuICBXaGVuIGxlZnQgdW5jb25maWd1cmVkIChvcgorCXNldCBleHBsaWNpdGx5IHRvIDApLCB0aGVyZSB3aWxsIGJlIG5vIGxpbWl0LgorCitwYWNrLmNvbXByZXNzaW9uOjoKKwlBbiBpbnRlZ2VyIC0xLi45LCBpbmRpY2F0aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBmb3Igb2JqZWN0cworCWluIGEgcGFjayBmaWxlLiAtMSBpcyB0aGUgemxpYiBkZWZhdWx0LiAwIG1lYW5zIG5vCisJY29tcHJlc3Npb24sIGFuZCAxLi45IGFyZSB2YXJpb3VzIHNwZWVkL3NpemUgdHJhZGVvZmZzLCA5IGJlaW5nCisJc2xvd2VzdC4gIElmIG5vdCBzZXQsICBkZWZhdWx0cyB0byBjb3JlLmNvbXByZXNzaW9uLiAgSWYgdGhhdCBpcworCW5vdCBzZXQsICBkZWZhdWx0cyB0byAtMSwgdGhlIHpsaWIgZGVmYXVsdCwgd2hpY2ggaXMgImEgZGVmYXVsdAorCWNvbXByb21pc2UgYmV0d2VlbiBzcGVlZCBhbmQgY29tcHJlc3Npb24gKGN1cnJlbnRseSBlcXVpdmFsZW50CisJdG8gbGV2ZWwgNikuIgorKworTm90ZSB0aGF0IGNoYW5naW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHJlY29tcHJlc3MKK2FsbCBleGlzdGluZyBvYmplY3RzLiBZb3UgY2FuIGZvcmNlIHJlY29tcHJlc3Npb24gYnkgcGFzc2luZyB0aGUgLUYgb3B0aW9uCit0byBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0uCisKK3BhY2suYWxsb3dQYWNrUmV1c2U6OgorCVdoZW4gdHJ1ZSwgYW5kIHdoZW4gcmVhY2hhYmlsaXR5IGJpdG1hcHMgYXJlIGVuYWJsZWQsCisJcGFjay1vYmplY3RzIHdpbGwgdHJ5IHRvIHNlbmQgcGFydHMgb2YgdGhlIGJpdG1hcHBlZCBwYWNrZmlsZQorCXZlcmJhdGltLiBUaGlzIGNhbiByZWR1Y2UgbWVtb3J5IGFuZCBDUFUgdXNhZ2UgdG8gc2VydmUgZmV0Y2hlcywKKwlidXQgbWlnaHQgcmVzdWx0IGluIHNlbmRpbmcgYSBzbGlnaHRseSBsYXJnZXIgcGFjay4gRGVmYXVsdHMgdG8KKwl0cnVlLgorCitwYWNrLmlzbGFuZDo6CisJQW4gZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIGNvbmZpZ3VyaW5nIGEgc2V0IG9mIGRlbHRhCisJaXNsYW5kcy4gU2VlICJERUxUQSBJU0xBTkRTIiBpbiBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0KKwlmb3IgZGV0YWlscy4KKworcGFjay5pc2xhbmRDb3JlOjoKKwlTcGVjaWZ5IGFuIGlzbGFuZCBuYW1lIHdoaWNoIGdldHMgdG8gaGF2ZSBpdHMgb2JqZWN0cyBiZQorCXBhY2tlZCBmaXJzdC4gVGhpcyBjcmVhdGVzIGEga2luZCBvZiBwc2V1ZG8tcGFjayBhdCB0aGUgZnJvbnQKKwlvZiBvbmUgcGFjaywgc28gdGhhdCB0aGUgb2JqZWN0cyBmcm9tIHRoZSBzcGVjaWZpZWQgaXNsYW5kIGFyZQorCWhvcGVmdWxseSBmYXN0ZXIgdG8gY29weSBpbnRvIGFueSBwYWNrIHRoYXQgc2hvdWxkIGJlIHNlcnZlZAorCXRvIGEgdXNlciByZXF1ZXN0aW5nIHRoZXNlIG9iamVjdHMuIEluIHByYWN0aWNlIHRoaXMgbWVhbnMKKwl0aGF0IHRoZSBpc2xhbmQgc3BlY2lmaWVkIHNob3VsZCBsaWtlbHkgY29ycmVzcG9uZCB0byB3aGF0IGlzCisJdGhlIG1vc3QgY29tbW9ubHkgY2xvbmVkIGluIHRoZSByZXBvLiBTZWUgYWxzbyAiREVMVEEgSVNMQU5EUyIKKwlpbiBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCisKK3BhY2suZGVsdGFDYWNoZVNpemU6OgorCVRoZSBtYXhpbXVtIG1lbW9yeSBpbiBieXRlcyB1c2VkIGZvciBjYWNoaW5nIGRlbHRhcyBpbgorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSBiZWZvcmUgd3JpdGluZyB0aGVtIG91dCB0byBhIHBhY2suCisJVGhpcyBjYWNoZSBpcyB1c2VkIHRvIHNwZWVkIHVwIHRoZSB3cml0aW5nIG9iamVjdCBwaGFzZSBieSBub3QKKwloYXZpbmcgdG8gcmVjb21wdXRlIHRoZSBmaW5hbCBkZWx0YSByZXN1bHQgb25jZSB0aGUgYmVzdCBtYXRjaAorCWZvciBhbGwgb2JqZWN0cyBpcyBmb3VuZC4gIFJlcGFja2luZyBsYXJnZSByZXBvc2l0b3JpZXMgb24gbWFjaGluZXMKKwl3aGljaCBhcmUgdGlnaHQgd2l0aCBtZW1vcnkgbWlnaHQgYmUgYmFkbHkgaW1wYWN0ZWQgYnkgdGhpcyB0aG91Z2gsCisJZXNwZWNpYWxseSBpZiB0aGlzIGNhY2hlIHB1c2hlcyB0aGUgc3lzdGVtIGludG8gc3dhcHBpbmcuCisJQSB2YWx1ZSBvZiAwIG1lYW5zIG5vIGxpbWl0LiBUaGUgc21hbGxlc3Qgc2l6ZSBvZiAxIGJ5dGUgbWF5IGJlCisJdXNlZCB0byB2aXJ0dWFsbHkgZGlzYWJsZSB0aGlzIGNhY2hlLiBEZWZhdWx0cyB0byAyNTYgTWlCLgorCitwYWNrLmRlbHRhQ2FjaGVMaW1pdDo6CisJVGhlIG1heGltdW0gc2l6ZSBvZiBhIGRlbHRhLCB0aGF0IGlzIGNhY2hlZCBpbgorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4gVGhpcyBjYWNoZSBpcyB1c2VkIHRvIHNwZWVkIHVwIHRoZQorCXdyaXRpbmcgb2JqZWN0IHBoYXNlIGJ5IG5vdCBoYXZpbmcgdG8gcmVjb21wdXRlIHRoZSBmaW5hbCBkZWx0YQorCXJlc3VsdCBvbmNlIHRoZSBiZXN0IG1hdGNoIGZvciBhbGwgb2JqZWN0cyBpcyBmb3VuZC4KKwlEZWZhdWx0cyB0byAxMDAwLiBNYXhpbXVtIHZhbHVlIGlzIDY1NTM1LgorCitwYWNrLnRocmVhZHM6OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QKKwlkZWx0YSBtYXRjaGVzLiAgVGhpcyByZXF1aXJlcyB0aGF0IGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQorCWJlIGNvbXBpbGVkIHdpdGggcHRocmVhZHMgb3RoZXJ3aXNlIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgd2l0aCBhCisJd2FybmluZy4gVGhpcyBpcyBtZWFudCB0byByZWR1Y2UgcGFja2luZyB0aW1lIG9uIG11bHRpcHJvY2Vzc29yCisJbWFjaGluZXMuIFRoZSByZXF1aXJlZCBhbW91bnQgb2YgbWVtb3J5IGZvciB0aGUgZGVsdGEgc2VhcmNoIHdpbmRvdworCWlzIGhvd2V2ZXIgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIHRocmVhZHMuCisJU3BlY2lmeWluZyAwIHdpbGwgY2F1c2UgR2l0IHRvIGF1dG8tZGV0ZWN0IHRoZSBudW1iZXIgb2YgQ1BVJ3MKKwlhbmQgc2V0IHRoZSBudW1iZXIgb2YgdGhyZWFkcyBhY2NvcmRpbmdseS4KKworcGFjay5pbmRleFZlcnNpb246OgorCVNwZWNpZnkgdGhlIGRlZmF1bHQgcGFjayBpbmRleCB2ZXJzaW9uLiAgVmFsaWQgdmFsdWVzIGFyZSAxIGZvcgorCWxlZ2FjeSBwYWNrIGluZGV4IHVzZWQgYnkgR2l0IHZlcnNpb25zIHByaW9yIHRvIDEuNS4yLCBhbmQgMiBmb3IKKwl0aGUgbmV3IHBhY2sgaW5kZXggd2l0aCBjYXBhYmlsaXRpZXMgZm9yIHBhY2tzIGxhcmdlciB0aGFuIDQgR0IKKwlhcyB3ZWxsIGFzIHByb3BlciBwcm90ZWN0aW9uIGFnYWluc3QgdGhlIHJlcGFja2luZyBvZiBjb3JydXB0ZWQKKwlwYWNrcy4gIFZlcnNpb24gMiBpcyB0aGUgZGVmYXVsdC4gIE5vdGUgdGhhdCB2ZXJzaW9uIDIgaXMgZW5mb3JjZWQKKwlhbmQgdGhpcyBjb25maWcgb3B0aW9uIGlnbm9yZWQgd2hlbmV2ZXIgdGhlIGNvcnJlc3BvbmRpbmcgcGFjayBpcworCWxhcmdlciB0aGFuIDIgR0IuCisrCitJZiB5b3UgaGF2ZSBhbiBvbGQgR2l0IHRoYXQgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgdmVyc2lvbiAyIGAqLmlkeGAgZmlsZSwKK2Nsb25pbmcgb3IgZmV0Y2hpbmcgb3ZlciBhIG5vbiBuYXRpdmUgcHJvdG9jb2wgKGUuZy4gImh0dHAiKQordGhhdCB3aWxsIGNvcHkgYm90aCBgKi5wYWNrYCBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIGAqLmlkeGAgZmlsZSBmcm9tIHRoZQorb3RoZXIgc2lkZSBtYXkgZ2l2ZSB5b3UgYSByZXBvc2l0b3J5IHRoYXQgY2Fubm90IGJlIGFjY2Vzc2VkIHdpdGggeW91cgorb2xkZXIgdmVyc2lvbiBvZiBHaXQuIElmIHRoZSBgKi5wYWNrYCBmaWxlIGlzIHNtYWxsZXIgdGhhbiAyIEdCLCBob3dldmVyLAoreW91IGNhbiB1c2UgbGlua2dpdDpnaXQtaW5kZXgtcGFja1sxXSBvbiB0aGUgKi5wYWNrIGZpbGUgdG8gcmVnZW5lcmF0ZQordGhlIGAqLmlkeGAgZmlsZS4KKworcGFjay5wYWNrU2l6ZUxpbWl0OjoKKwlUaGUgbWF4aW11bSBzaXplIG9mIGEgcGFjay4gIFRoaXMgc2V0dGluZyBvbmx5IGFmZmVjdHMKKwlwYWNraW5nIHRvIGEgZmlsZSB3aGVuIHJlcGFja2luZywgaS5lLiB0aGUgZ2l0Oi8vIHByb3RvY29sCisJaXMgdW5hZmZlY3RlZC4gIEl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgLS1tYXgtcGFjay1zaXplYAorCW9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0uICBSZWFjaGluZyB0aGlzIGxpbWl0IHJlc3VsdHMKKwlpbiB0aGUgY3JlYXRpb24gb2YgbXVsdGlwbGUgcGFja2ZpbGVzOyB3aGljaCBpbiB0dXJuIHByZXZlbnRzCisJYml0bWFwcyBmcm9tIGJlaW5nIGNyZWF0ZWQuCisJVGhlIG1pbmltdW0gc2l6ZSBhbGxvd2VkIGlzIGxpbWl0ZWQgdG8gMSBNaUIuCisJVGhlIGRlZmF1bHQgaXMgdW5saW1pdGVkLgorCUNvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlCisJc3VwcG9ydGVkLgorCitwYWNrLnVzZUJpdG1hcHM6OgorCVdoZW4gdHJ1ZSwgZ2l0IHdpbGwgdXNlIHBhY2sgYml0bWFwcyAoaWYgYXZhaWxhYmxlKSB3aGVuIHBhY2tpbmcKKwl0byBzdGRvdXQgKGUuZy4sIGR1cmluZyB0aGUgc2VydmVyIHNpZGUgb2YgYSBmZXRjaCkuIERlZmF1bHRzIHRvCisJdHJ1ZS4gWW91IHNob3VsZCBub3QgZ2VuZXJhbGx5IG5lZWQgdG8gdHVybiB0aGlzIG9mZiB1bmxlc3MKKwl5b3UgYXJlIGRlYnVnZ2luZyBwYWNrIGJpdG1hcHMuCisKK3BhY2sudXNlU3BhcnNlOjoKKwlXaGVuIHRydWUsIGdpdCB3aWxsIGRlZmF1bHQgdG8gdXNpbmcgdGhlICctLXNwYXJzZScgb3B0aW9uIGluCisJJ2dpdCBwYWNrLW9iamVjdHMnIHdoZW4gdGhlICctLXJldnMnIG9wdGlvbiBpcyBwcmVzZW50LiBUaGlzCisJYWxnb3JpdGhtIG9ubHkgd2Fsa3MgdHJlZXMgdGhhdCBhcHBlYXIgaW4gcGF0aHMgdGhhdCBpbnRyb2R1Y2UgbmV3CisJb2JqZWN0cy4gVGhpcyBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBiZW5lZml0cyB3aGVuCisJY29tcHV0aW5nIGEgcGFjayB0byBzZW5kIGEgc21hbGwgY2hhbmdlLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZQorCXRoYXQgZXh0cmEgb2JqZWN0cyBhcmUgYWRkZWQgdG8gdGhlIHBhY2stZmlsZSBpZiB0aGUgaW5jbHVkZWQKKwljb21taXRzIGNvbnRhaW4gY2VydGFpbiB0eXBlcyBvZiBkaXJlY3QgcmVuYW1lcy4gRGVmYXVsdCBpcyBgZmFsc2VgCisJdW5sZXNzIGBmZWF0dXJlLmV4cGVyaW1lbnRhbGAgaXMgZW5hYmxlZC4KKworcGFjay53cml0ZUJpdG1hcHMgKGRlcHJlY2F0ZWQpOjoKKwlUaGlzIGlzIGEgZGVwcmVjYXRlZCBzeW5vbnltIGZvciBgcmVwYWNrLndyaXRlQml0bWFwc2AuCisKK3BhY2sud3JpdGVCaXRtYXBIYXNoQ2FjaGU6OgorCVdoZW4gdHJ1ZSwgZ2l0IHdpbGwgaW5jbHVkZSBhICJoYXNoIGNhY2hlIiBzZWN0aW9uIGluIHRoZSBiaXRtYXAKKwlpbmRleCAoaWYgb25lIGlzIHdyaXR0ZW4pLiBUaGlzIGNhY2hlIGNhbiBiZSB1c2VkIHRvIGZlZWQgZ2l0J3MKKwlkZWx0YSBoZXVyaXN0aWNzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGJldHRlciBkZWx0YXMgYmV0d2VlbgorCWJpdG1hcHBlZCBhbmQgbm9uLWJpdG1hcHBlZCBvYmplY3RzIChlLmcuLCB3aGVuIHNlcnZpbmcgYSBmZXRjaAorCWJldHdlZW4gYW4gb2xkZXIsIGJpdG1hcHBlZCBwYWNrIGFuZCBvYmplY3RzIHRoYXQgaGF2ZSBiZWVuCisJcHVzaGVkIHNpbmNlIHRoZSBsYXN0IGdjKS4gVGhlIGRvd25zaWRlIGlzIHRoYXQgaXQgY29uc3VtZXMgNAorCWJ5dGVzIHBlciBvYmplY3Qgb2YgZGlzayBzcGFjZS4gRGVmYXVsdHMgdG8gdHJ1ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3BhZ2VyLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3BhZ2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzczMWNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcGFnZXIudHh0CkBAIC0wLDAgKzEsOCBAQAorcGFnZXIuPGNtZD46OgorCUlmIHRoZSB2YWx1ZSBpcyBib29sZWFuLCB0dXJucyBvbiBvciBvZmYgcGFnaW5hdGlvbiBvZiB0aGUKKwlvdXRwdXQgb2YgYSBwYXJ0aWN1bGFyIEdpdCBzdWJjb21tYW5kIHdoZW4gd3JpdGluZyB0byBhIHR0eS4KKwlPdGhlcndpc2UsIHR1cm5zIG9uIHBhZ2luYXRpb24gZm9yIHRoZSBzdWJjb21tYW5kIHVzaW5nIHRoZQorCXBhZ2VyIHNwZWNpZmllZCBieSB0aGUgdmFsdWUgb2YgYHBhZ2VyLjxjbWQ+YC4gIElmIGAtLXBhZ2luYXRlYAorCW9yIGAtLW5vLXBhZ2VyYCBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgdGFrZXMKKwlwcmVjZWRlbmNlIG92ZXIgdGhpcyBvcHRpb24uICBUbyBkaXNhYmxlIHBhZ2luYXRpb24gZm9yIGFsbAorCWNvbW1hbmRzLCBzZXQgYGNvcmUucGFnZXJgIG9yIGBHSVRfUEFHRVJgIHRvIGBjYXRgLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvcHJldHR5LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3ByZXR0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzYzZiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3ByZXR0eS50eHQKQEAgLTAsMCArMSw5IEBACitwcmV0dHkuPG5hbWU+OjoKKwlBbGlhcyBmb3IgYSAtLXByZXR0eT0gZm9ybWF0IHN0cmluZywgYXMgc3BlY2lmaWVkIGluCisJbGlua2dpdDpnaXQtbG9nWzFdLiBBbnkgYWxpYXNlcyBkZWZpbmVkIGhlcmUgY2FuIGJlIHVzZWQganVzdAorCWFzIHRoZSBidWlsdC1pbiBwcmV0dHkgZm9ybWF0cyBjb3VsZC4gRm9yIGV4YW1wbGUsCisJcnVubmluZyBgZ2l0IGNvbmZpZyBwcmV0dHkuY2hhbmdlbG9nICJmb3JtYXQ6KiAlSCAlcyJgCisJd291bGQgY2F1c2UgdGhlIGludm9jYXRpb24gYGdpdCBsb2cgLS1wcmV0dHk9Y2hhbmdlbG9nYAorCXRvIGJlIGVxdWl2YWxlbnQgdG8gcnVubmluZyBgZ2l0IGxvZyAiLS1wcmV0dHk9Zm9ybWF0OiogJUggJXMiYC4KKwlOb3RlIHRoYXQgYW4gYWxpYXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgYnVpbHQtaW4gZm9ybWF0CisJd2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcHJvdG9jb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NjU5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wcm90b2NvbC50eHQKQEAgLTAsMCArMSw2MyBAQAorcHJvdG9jb2wuYWxsb3c6OgorCUlmIHNldCwgcHJvdmlkZSBhIHVzZXIgZGVmaW5lZCBkZWZhdWx0IHBvbGljeSBmb3IgYWxsIHByb3RvY29scyB3aGljaAorCWRvbid0IGV4cGxpY2l0bHkgaGF2ZSBhIHBvbGljeSAoYHByb3RvY29sLjxuYW1lPi5hbGxvd2ApLiAgQnkgZGVmYXVsdCwKKwlpZiB1bnNldCwga25vd24tc2FmZSBwcm90b2NvbHMgKGh0dHAsIGh0dHBzLCBnaXQsIHNzaCwgZmlsZSkgaGF2ZSBhCisJZGVmYXVsdCBwb2xpY3kgb2YgYGFsd2F5c2AsIGtub3duLWRhbmdlcm91cyBwcm90b2NvbHMgKGV4dCkgaGF2ZSBhCisJZGVmYXVsdCBwb2xpY3kgb2YgYG5ldmVyYCwgYW5kIGFsbCBvdGhlciBwcm90b2NvbHMgaGF2ZSBhIGRlZmF1bHQKKwlwb2xpY3kgb2YgYHVzZXJgLiAgU3VwcG9ydGVkIHBvbGljaWVzOgorKworLS0KKworKiBgYWx3YXlzYCAtIHByb3RvY29sIGlzIGFsd2F5cyBhYmxlIHRvIGJlIHVzZWQuCisKKyogYG5ldmVyYCAtIHByb3RvY29sIGlzIG5ldmVyIGFibGUgdG8gYmUgdXNlZC4KKworKiBgdXNlcmAgLSBwcm90b2NvbCBpcyBvbmx5IGFibGUgdG8gYmUgdXNlZCB3aGVuIGBHSVRfUFJPVE9DT0xfRlJPTV9VU0VSYCBpcworICBlaXRoZXIgdW5zZXQgb3IgaGFzIGEgdmFsdWUgb2YgMS4gIFRoaXMgcG9saWN5IHNob3VsZCBiZSB1c2VkIHdoZW4geW91IHdhbnQgYQorICBwcm90b2NvbCB0byBiZSBkaXJlY3RseSB1c2FibGUgYnkgdGhlIHVzZXIgYnV0IGRvbid0IHdhbnQgaXQgdXNlZCBieSBjb21tYW5kcyB3aGljaAorICBleGVjdXRlIGNsb25lL2ZldGNoL3B1c2ggY29tbWFuZHMgd2l0aG91dCB1c2VyIGlucHV0LCBlLmcuIHJlY3Vyc2l2ZQorICBzdWJtb2R1bGUgaW5pdGlhbGl6YXRpb24uCisKKy0tCisKK3Byb3RvY29sLjxuYW1lPi5hbGxvdzo6CisJU2V0IGEgcG9saWN5IHRvIGJlIHVzZWQgYnkgcHJvdG9jb2wgYDxuYW1lPmAgd2l0aCBjbG9uZS9mZXRjaC9wdXNoCisJY29tbWFuZHMuIFNlZSBgcHJvdG9jb2wuYWxsb3dgIGFib3ZlIGZvciB0aGUgYXZhaWxhYmxlIHBvbGljaWVzLgorKworVGhlIHByb3RvY29sIG5hbWVzIGN1cnJlbnRseSB1c2VkIGJ5IGdpdCBhcmU6CisrCistLQorICAtIGBmaWxlYDogYW55IGxvY2FsIGZpbGUtYmFzZWQgcGF0aCAoaW5jbHVkaW5nIGBmaWxlOi8vYCBVUkxzLAorICAgIG9yIGxvY2FsIHBhdGhzKQorCisgIC0gYGdpdGA6IHRoZSBhbm9ueW1vdXMgZ2l0IHByb3RvY29sIG92ZXIgYSBkaXJlY3QgVENQCisgICAgY29ubmVjdGlvbiAob3IgcHJveHksIGlmIGNvbmZpZ3VyZWQpCisKKyAgLSBgc3NoYDogZ2l0IG92ZXIgc3NoIChpbmNsdWRpbmcgYGhvc3Q6cGF0aGAgc3ludGF4LAorICAgIGBzc2g6Ly9gLCBldGMpLgorCisgIC0gYGh0dHBgOiBnaXQgb3ZlciBodHRwLCBib3RoICJzbWFydCBodHRwIiBhbmQgImR1bWIgaHR0cCIuCisgICAgTm90ZSB0aGF0IHRoaXMgZG9lcyBfbm90XyBpbmNsdWRlIGBodHRwc2A7IGlmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZQorICAgIGJvdGgsIHlvdSBtdXN0IGRvIHNvIGluZGl2aWR1YWxseS4KKworICAtIGFueSBleHRlcm5hbCBoZWxwZXJzIGFyZSBuYW1lZCBieSB0aGVpciBwcm90b2NvbCAoZS5nLiwgdXNlCisgICAgYGhnYCB0byBhbGxvdyB0aGUgYGdpdC1yZW1vdGUtaGdgIGhlbHBlcikKKy0tCisKK3Byb3RvY29sLnZlcnNpb246OgorCUlmIHNldCwgY2xpZW50cyB3aWxsIGF0dGVtcHQgdG8gY29tbXVuaWNhdGUgd2l0aCBhIHNlcnZlcgorCXVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvdG9jb2wgdmVyc2lvbi4gIElmIHRoZSBzZXJ2ZXIgZG9lcworCW5vdCBzdXBwb3J0IGl0LCBjb21tdW5pY2F0aW9uIGZhbGxzIGJhY2sgdG8gdmVyc2lvbiAwLgorCUlmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyBgMmAuCisJU3VwcG9ydGVkIHZlcnNpb25zOgorKworLS0KKworKiBgMGAgLSB0aGUgb3JpZ2luYWwgd2lyZSBwcm90b2NvbC4KKworKiBgMWAgLSB0aGUgb3JpZ2luYWwgd2lyZSBwcm90b2NvbCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIHZlcnNpb24gc3RyaW5nCisgIGluIHRoZSBpbml0aWFsIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4KKworKiBgMmAgLSBsaW5rOnRlY2huaWNhbC9wcm90b2NvbC12Mi5odG1sW3dpcmUgcHJvdG9jb2wgdmVyc2lvbiAyXS4KKworLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3B1bGwudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcHVsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwNDgzMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3B1bGwudHh0CkBAIC0wLDAgKzEsMzcgQEAKK3B1bGwuZmY6OgorCUJ5IGRlZmF1bHQsIEdpdCBkb2VzIG5vdCBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IHdoZW4gbWVyZ2luZworCWEgY29tbWl0IHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNvbW1pdC4gSW5zdGVhZCwgdGhlCisJdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBmYXN0LWZvcndhcmRlZC4gV2hlbiBzZXQgdG8gYGZhbHNlYCwKKwl0aGlzIHZhcmlhYmxlIHRlbGxzIEdpdCB0byBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IGluIHN1Y2gKKwlhIGNhc2UgKGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBgLS1uby1mZmAgb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQKKwlsaW5lKS4gV2hlbiBzZXQgdG8gYG9ubHlgLCBvbmx5IHN1Y2ggZmFzdC1mb3J3YXJkIG1lcmdlcyBhcmUKKwlhbGxvd2VkIChlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUgYC0tZmYtb25seWAgb3B0aW9uIGZyb20gdGhlCisJY29tbWFuZCBsaW5lKS4gVGhpcyBzZXR0aW5nIG92ZXJyaWRlcyBgbWVyZ2UuZmZgIHdoZW4gcHVsbGluZy4KKworcHVsbC5yZWJhc2U6OgorCVdoZW4gdHJ1ZSwgcmViYXNlIGJyYW5jaGVzIG9uIHRvcCBvZiB0aGUgZmV0Y2hlZCBicmFuY2gsIGluc3RlYWQKKwlvZiBtZXJnaW5nIHRoZSBkZWZhdWx0IGJyYW5jaCBmcm9tIHRoZSBkZWZhdWx0IHJlbW90ZSB3aGVuICJnaXQKKwlwdWxsIiBpcyBydW4uIFNlZSAiYnJhbmNoLjxuYW1lPi5yZWJhc2UiIGZvciBzZXR0aW5nIHRoaXMgb24gYQorCXBlci1icmFuY2ggYmFzaXMuCisrCitXaGVuIGBtZXJnZXNgIChvciBqdXN0ICdtJyksIHBhc3MgdGhlIGAtLXJlYmFzZS1tZXJnZXNgIG9wdGlvbiB0byAnZ2l0IHJlYmFzZScKK3NvIHRoYXQgdGhlIGxvY2FsIG1lcmdlIGNvbW1pdHMgYXJlIGluY2x1ZGVkIGluIHRoZSByZWJhc2UgKHNlZQorbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBkZXRhaWxzKS4KKysKK1doZW4gYHByZXNlcnZlYCAob3IganVzdCAncCcsIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYG1lcmdlc2ApLCBhbHNvIHBhc3MKK2AtLXByZXNlcnZlLW1lcmdlc2AgYWxvbmcgdG8gJ2dpdCByZWJhc2UnIHNvIHRoYXQgbG9jYWxseSBjb21taXR0ZWQgbWVyZ2UKK2NvbW1pdHMgd2lsbCBub3QgYmUgZmxhdHRlbmVkIGJ5IHJ1bm5pbmcgJ2dpdCBwdWxsJy4KKysKK1doZW4gdGhlIHZhbHVlIGlzIGBpbnRlcmFjdGl2ZWAgKG9yIGp1c3QgJ2knKSwgdGhlIHJlYmFzZSBpcyBydW4gaW4gaW50ZXJhY3RpdmUKK21vZGUuCisrCisqTk9URSo6IHRoaXMgaXMgYSBwb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uOyBkbyAqbm90KiB1c2UKK2l0IHVubGVzcyB5b3UgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChzZWUgbGlua2dpdDpnaXQtcmViYXNlWzFdCitmb3IgZGV0YWlscykuCisKK3B1bGwub2N0b3B1czo6CisJVGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcHVsbGluZyBtdWx0aXBsZSBicmFuY2hlcworCWF0IG9uY2UuCisKK3B1bGwudHdvaGVhZDo6CisJVGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcHVsbGluZyBhIHNpbmdsZSBicmFuY2guCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3B1c2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhN2FhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9wdXNoLnR4dApAQCAtMCwwICsxLDExNCBAQAorcHVzaC5kZWZhdWx0OjoKKwlEZWZpbmVzIHRoZSBhY3Rpb24gYGdpdCBwdXNoYCBzaG91bGQgdGFrZSBpZiBubyByZWZzcGVjIGlzCisJZ2l2ZW4gKHdoZXRoZXIgZnJvbSB0aGUgY29tbWFuZC1saW5lLCBjb25maWcsIG9yIGVsc2V3aGVyZSkuCisJRGlmZmVyZW50IHZhbHVlcyBhcmUgd2VsbC1zdWl0ZWQgZm9yCisJc3BlY2lmaWMgd29ya2Zsb3dzOyBmb3IgaW5zdGFuY2UsIGluIGEgcHVyZWx5IGNlbnRyYWwgd29ya2Zsb3cKKwkoaS5lLiB0aGUgZmV0Y2ggc291cmNlIGlzIGVxdWFsIHRvIHRoZSBwdXNoIGRlc3RpbmF0aW9uKSwKKwlgdXBzdHJlYW1gIGlzIHByb2JhYmx5IHdoYXQgeW91IHdhbnQuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorKworLS0KKworKiBgbm90aGluZ2AgLSBkbyBub3QgcHVzaCBhbnl0aGluZyAoZXJyb3Igb3V0KSB1bmxlc3MgYSByZWZzcGVjIGlzCisgIGdpdmVuLiBUaGlzIGlzIHByaW1hcmlseSBtZWFudCBmb3IgcGVvcGxlIHdobyB3YW50IHRvCisgIGF2b2lkIG1pc3Rha2VzIGJ5IGFsd2F5cyBiZWluZyBleHBsaWNpdC4KKworKiBgY3VycmVudGAgLSBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCB0byB1cGRhdGUgYSBicmFuY2ggd2l0aCB0aGUgc2FtZQorICBuYW1lIG9uIHRoZSByZWNlaXZpbmcgZW5kLiAgV29ya3MgaW4gYm90aCBjZW50cmFsIGFuZCBub24tY2VudHJhbAorICB3b3JrZmxvd3MuCisKKyogYHVwc3RyZWFtYCAtIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGJhY2sgdG8gdGhlIGJyYW5jaCB3aG9zZQorICBjaGFuZ2VzIGFyZSB1c3VhbGx5IGludGVncmF0ZWQgaW50byB0aGUgY3VycmVudCBicmFuY2ggKHdoaWNoIGlzCisgIGNhbGxlZCBgQHt1cHN0cmVhbX1gKS4gIFRoaXMgbW9kZSBvbmx5IG1ha2VzIHNlbnNlIGlmIHlvdSBhcmUKKyAgcHVzaGluZyB0byB0aGUgc2FtZSByZXBvc2l0b3J5IHlvdSB3b3VsZCBub3JtYWxseSBwdWxsIGZyb20KKyAgKGkuZS4gY2VudHJhbCB3b3JrZmxvdykuCisKKyogYHRyYWNraW5nYCAtIFRoaXMgaXMgYSBkZXByZWNhdGVkIHN5bm9ueW0gZm9yIGB1cHN0cmVhbWAuCisKKyogYHNpbXBsZWAgLSBpbiBjZW50cmFsaXplZCB3b3JrZmxvdywgd29yayBsaWtlIGB1cHN0cmVhbWAgd2l0aCBhbgorICBhZGRlZCBzYWZldHkgdG8gcmVmdXNlIHRvIHB1c2ggaWYgdGhlIHVwc3RyZWFtIGJyYW5jaCdzIG5hbWUgaXMKKyAgZGlmZmVyZW50IGZyb20gdGhlIGxvY2FsIG9uZS4KKysKK1doZW4gcHVzaGluZyB0byBhIHJlbW90ZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZW1vdGUgeW91IG5vcm1hbGx5CitwdWxsIGZyb20sIHdvcmsgYXMgYGN1cnJlbnRgLiAgVGhpcyBpcyB0aGUgc2FmZXN0IG9wdGlvbiBhbmQgaXMgc3VpdGVkCitmb3IgYmVnaW5uZXJzLgorKworVGhpcyBtb2RlIGhhcyBiZWNvbWUgdGhlIGRlZmF1bHQgaW4gR2l0IDIuMC4KKworKiBgbWF0Y2hpbmdgIC0gcHVzaCBhbGwgYnJhbmNoZXMgaGF2aW5nIHRoZSBzYW1lIG5hbWUgb24gYm90aCBlbmRzLgorICBUaGlzIG1ha2VzIHRoZSByZXBvc2l0b3J5IHlvdSBhcmUgcHVzaGluZyB0byByZW1lbWJlciB0aGUgc2V0IG9mCisgIGJyYW5jaGVzIHRoYXQgd2lsbCBiZSBwdXNoZWQgb3V0IChlLmcuIGlmIHlvdSBhbHdheXMgcHVzaCAnbWFpbnQnCisgIGFuZCAnbWFzdGVyJyB0aGVyZSBhbmQgbm8gb3RoZXIgYnJhbmNoZXMsIHRoZSByZXBvc2l0b3J5IHlvdSBwdXNoCisgIHRvIHdpbGwgaGF2ZSB0aGVzZSB0d28gYnJhbmNoZXMsIGFuZCB5b3VyIGxvY2FsICdtYWludCcgYW5kCisgICdtYXN0ZXInIHdpbGwgYmUgcHVzaGVkIHRoZXJlKS4KKysKK1RvIHVzZSB0aGlzIG1vZGUgZWZmZWN0aXZlbHksIHlvdSBoYXZlIHRvIG1ha2Ugc3VyZSBfYWxsXyB0aGUKK2JyYW5jaGVzIHlvdSB3b3VsZCBwdXNoIG91dCBhcmUgcmVhZHkgdG8gYmUgcHVzaGVkIG91dCBiZWZvcmUKK3J1bm5pbmcgJ2dpdCBwdXNoJywgYXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgbW9kZSBpcyB0byBhbGxvdyB5b3UKK3RvIHB1c2ggYWxsIG9mIHRoZSBicmFuY2hlcyBpbiBvbmUgZ28uICBJZiB5b3UgdXN1YWxseSBmaW5pc2ggd29yaworb24gb25seSBvbmUgYnJhbmNoIGFuZCBwdXNoIG91dCB0aGUgcmVzdWx0LCB3aGlsZSBvdGhlciBicmFuY2hlcyBhcmUKK3VuZmluaXNoZWQsIHRoaXMgbW9kZSBpcyBub3QgZm9yIHlvdS4gIEFsc28gdGhpcyBtb2RlIGlzIG5vdAorc3VpdGFibGUgZm9yIHB1c2hpbmcgaW50byBhIHNoYXJlZCBjZW50cmFsIHJlcG9zaXRvcnksIGFzIG90aGVyCitwZW9wbGUgbWF5IGFkZCBuZXcgYnJhbmNoZXMgdGhlcmUsIG9yIHVwZGF0ZSB0aGUgdGlwIG9mIGV4aXN0aW5nCiticmFuY2hlcyBvdXRzaWRlIHlvdXIgY29udHJvbC4KKysKK1RoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCwgYnV0IG5vdCBzaW5jZSBHaXQgMi4wIChgc2ltcGxlYCBpcyB0aGUKK25ldyBkZWZhdWx0KS4KKworLS0KKworcHVzaC5mb2xsb3dUYWdzOjoKKwlJZiBzZXQgdG8gdHJ1ZSBlbmFibGUgYC0tZm9sbG93LXRhZ3NgIG9wdGlvbiBieSBkZWZhdWx0LiAgWW91CisJbWF5IG92ZXJyaWRlIHRoaXMgY29uZmlndXJhdGlvbiBhdCB0aW1lIG9mIHB1c2ggYnkgc3BlY2lmeWluZworCWAtLW5vLWZvbGxvdy10YWdzYC4KKworcHVzaC5ncGdTaWduOjoKKwlNYXkgYmUgc2V0IHRvIGEgYm9vbGVhbiB2YWx1ZSwgb3IgdGhlIHN0cmluZyAnaWYtYXNrZWQnLiBBIHRydWUKKwl2YWx1ZSBjYXVzZXMgYWxsIHB1c2hlcyB0byBiZSBHUEcgc2lnbmVkLCBhcyBpZiBgLS1zaWduZWRgIGlzCisJcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uIFRoZSBzdHJpbmcgJ2lmLWFza2VkJyBjYXVzZXMKKwlwdXNoZXMgdG8gYmUgc2lnbmVkIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQsIGFzIGlmCisJYC0tc2lnbmVkPWlmLWFza2VkYCBpcyBwYXNzZWQgdG8gJ2dpdCBwdXNoJy4gQSBmYWxzZSB2YWx1ZSBtYXkKKwlvdmVycmlkZSBhIHZhbHVlIGZyb20gYSBsb3dlci1wcmlvcml0eSBjb25maWcgZmlsZS4gQW4gZXhwbGljaXQKKwljb21tYW5kLWxpbmUgZmxhZyBhbHdheXMgb3ZlcnJpZGVzIHRoaXMgY29uZmlnIG9wdGlvbi4KKworcHVzaC5wdXNoT3B0aW9uOjoKKwlXaGVuIG5vIGAtLXB1c2gtb3B0aW9uPTxvcHRpb24+YCBhcmd1bWVudCBpcyBnaXZlbiBmcm9tIHRoZQorCWNvbW1hbmQgbGluZSwgYGdpdCBwdXNoYCBiZWhhdmVzIGFzIGlmIGVhY2ggPHZhbHVlPiBvZgorCXRoaXMgdmFyaWFibGUgaXMgZ2l2ZW4gYXMgYC0tcHVzaC1vcHRpb249PHZhbHVlPmAuCisrCitUaGlzIGlzIGEgbXVsdGktdmFsdWVkIHZhcmlhYmxlLCBhbmQgYW4gZW1wdHkgdmFsdWUgY2FuIGJlIHVzZWQgaW4gYQoraGlnaGVyIHByaW9yaXR5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZS5nLiBgLmdpdC9jb25maWdgIGluIGEKK3JlcG9zaXRvcnkpIHRvIGNsZWFyIHRoZSB2YWx1ZXMgaW5oZXJpdGVkIGZyb20gYSBsb3dlciBwcmlvcml0eQorY29uZmlndXJhdGlvbiBmaWxlcyAoZS5nLiBgJEhPTUUvLmdpdGNvbmZpZ2ApLgorKworLS0tLQorCitFeGFtcGxlOgorCisvZXRjL2dpdGNvbmZpZworICBwdXNoLnB1c2hvcHRpb24gPSBhCisgIHB1c2gucHVzaG9wdGlvbiA9IGIKKworfi8uZ2l0Y29uZmlnCisgIHB1c2gucHVzaG9wdGlvbiA9IGMKKworcmVwby8uZ2l0L2NvbmZpZworICBwdXNoLnB1c2hvcHRpb24gPQorICBwdXNoLnB1c2hvcHRpb24gPSBiCisKK1RoaXMgd2lsbCByZXN1bHQgaW4gb25seSBiIChhIGFuZCBjIGFyZSBjbGVhcmVkKS4KKworLS0tLQorCitwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzOjoKKwlNYWtlIHN1cmUgYWxsIHN1Ym1vZHVsZSBjb21taXRzIHVzZWQgYnkgdGhlIHJldmlzaW9ucyB0byBiZSBwdXNoZWQKKwlhcmUgYXZhaWxhYmxlIG9uIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4gSWYgdGhlIHZhbHVlIGlzICdjaGVjaycKKwl0aGVuIEdpdCB3aWxsIHZlcmlmeSB0aGF0IGFsbCBzdWJtb2R1bGUgY29tbWl0cyB0aGF0IGNoYW5nZWQgaW4gdGhlCisJcmV2aXNpb25zIHRvIGJlIHB1c2hlZCBhcmUgYXZhaWxhYmxlIG9uIGF0IGxlYXN0IG9uZSByZW1vdGUgb2YgdGhlCisJc3VibW9kdWxlLiBJZiBhbnkgY29tbWl0cyBhcmUgbWlzc2luZywgdGhlIHB1c2ggd2lsbCBiZSBhYm9ydGVkIGFuZAorCWV4aXQgd2l0aCBub24temVybyBzdGF0dXMuIElmIHRoZSB2YWx1ZSBpcyAnb24tZGVtYW5kJyB0aGVuIGFsbAorCXN1Ym1vZHVsZXMgdGhhdCBjaGFuZ2VkIGluIHRoZSByZXZpc2lvbnMgdG8gYmUgcHVzaGVkIHdpbGwgYmUKKwlwdXNoZWQuIElmIG9uLWRlbWFuZCB3YXMgbm90IGFibGUgdG8gcHVzaCBhbGwgbmVjZXNzYXJ5IHJldmlzaW9ucworCWl0IHdpbGwgYWxzbyBiZSBhYm9ydGVkIGFuZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLiBJZiB0aGUgdmFsdWUKKwlpcyAnbm8nIHRoZW4gZGVmYXVsdCBiZWhhdmlvciBvZiBpZ25vcmluZyBzdWJtb2R1bGVzIHdoZW4gcHVzaGluZworCWlzIHJldGFpbmVkLiBZb3UgbWF5IG92ZXJyaWRlIHRoaXMgY29uZmlndXJhdGlvbiBhdCB0aW1lIG9mIHB1c2ggYnkKKwlzcGVjaWZ5aW5nICctLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVja3xvbi1kZW1hbmR8bm8nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3JlYmFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3YTA3ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3JlYmFzZS50eHQKQEAgLTAsMCArMSw3MCBAQAorcmViYXNlLnVzZUJ1aWx0aW46OgorCVVudXNlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBVc2VkIGluIEdpdCB2ZXJzaW9ucyAyLjIwIGFuZAorCTIuMjEgYXMgYW4gZXNjYXBlIGhhdGNoIHRvIGVuYWJsZSB0aGUgbGVnYWN5IHNoZWxsc2NyaXB0CisJaW1wbGVtZW50YXRpb24gb2YgcmViYXNlLiBOb3cgdGhlIGJ1aWx0LWluIHJld3JpdGUgb2YgaXQgaW4gQworCWlzIGFsd2F5cyB1c2VkLiBTZXR0aW5nIHRoaXMgd2lsbCBlbWl0IGEgd2FybmluZywgdG8gYWxlcnQgYW55CisJcmVtYWluaW5nIHVzZXJzIHRoYXQgc2V0dGluZyB0aGlzIG5vdyBkb2VzIG5vdGhpbmcuCisKK3JlYmFzZS5iYWNrZW5kOjoKKwlEZWZhdWx0IGJhY2tlbmQgdG8gdXNlIGZvciByZWJhc2luZy4gIFBvc3NpYmxlIGNob2ljZXMgYXJlCisJJ2FwcGx5JyBvciAnbWVyZ2UnLiAgSW4gdGhlIGZ1dHVyZSwgaWYgdGhlIG1lcmdlIGJhY2tlbmQgZ2FpbnMKKwlhbGwgcmVtYWluaW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgYXBwbHkgYmFja2VuZCwgdGhpcyBzZXR0aW5nCisJbWF5IGJlY29tZSB1bnVzZWQuCisKK3JlYmFzZS5zdGF0OjoKKwlXaGV0aGVyIHRvIHNob3cgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0gc2luY2UgdGhlIGxhc3QKKwlyZWJhc2UuIEZhbHNlIGJ5IGRlZmF1bHQuCisKK3JlYmFzZS5hdXRvU3F1YXNoOjoKKwlJZiBzZXQgdG8gdHJ1ZSBlbmFibGUgYC0tYXV0b3NxdWFzaGAgb3B0aW9uIGJ5IGRlZmF1bHQuCisKK3JlYmFzZS5hdXRvU3Rhc2g6OgorCVdoZW4gc2V0IHRvIHRydWUsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgdGVtcG9yYXJ5IHN0YXNoIGVudHJ5CisJYmVmb3JlIHRoZSBvcGVyYXRpb24gYmVnaW5zLCBhbmQgYXBwbHkgaXQgYWZ0ZXIgdGhlIG9wZXJhdGlvbgorCWVuZHMuICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBydW4gcmViYXNlIG9uIGEgZGlydHkgd29ya3RyZWUuCisJSG93ZXZlciwgdXNlIHdpdGggY2FyZTogdGhlIGZpbmFsIHN0YXNoIGFwcGxpY2F0aW9uIGFmdGVyIGEKKwlzdWNjZXNzZnVsIHJlYmFzZSBtaWdodCByZXN1bHQgaW4gbm9uLXRyaXZpYWwgY29uZmxpY3RzLgorCVRoaXMgb3B0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgLS1uby1hdXRvc3Rhc2hgIGFuZAorCWAtLWF1dG9zdGFzaGAgb3B0aW9ucyBvZiBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0uCisJRGVmYXVsdHMgdG8gZmFsc2UuCisKK3JlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrOjoKKwlJZiBzZXQgdG8gIndhcm4iLCBnaXQgcmViYXNlIC1pIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIHNvbWUKKwljb21taXRzIGFyZSByZW1vdmVkIChlLmcuIGEgbGluZSB3YXMgZGVsZXRlZCksIGhvd2V2ZXIgdGhlCisJcmViYXNlIHdpbGwgc3RpbGwgcHJvY2VlZC4gSWYgc2V0IHRvICJlcnJvciIsIGl0IHdpbGwgcHJpbnQKKwl0aGUgcHJldmlvdXMgd2FybmluZyBhbmQgc3RvcCB0aGUgcmViYXNlLCAnZ2l0IHJlYmFzZQorCS0tZWRpdC10b2RvJyBjYW4gdGhlbiBiZSB1c2VkIHRvIGNvcnJlY3QgdGhlIGVycm9yLiBJZiBzZXQgdG8KKwkiaWdub3JlIiwgbm8gY2hlY2tpbmcgaXMgZG9uZS4KKwlUbyBkcm9wIGEgY29tbWl0IHdpdGhvdXQgd2FybmluZyBvciBlcnJvciwgdXNlIHRoZSBgZHJvcGAKKwljb21tYW5kIGluIHRoZSB0b2RvIGxpc3QuCisJRGVmYXVsdHMgdG8gImlnbm9yZSIuCisKK3JlYmFzZS5pbnN0cnVjdGlvbkZvcm1hdDo6CisJQSBmb3JtYXQgc3RyaW5nLCBhcyBzcGVjaWZpZWQgaW4gbGlua2dpdDpnaXQtbG9nWzFdLCB0byBiZSB1c2VkIGZvciB0aGUKKwl0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZS4gIFRoZSBmb3JtYXQgd2lsbAorCWF1dG9tYXRpY2FsbHkgaGF2ZSB0aGUgbG9uZyBjb21taXQgaGFzaCBwcmVwZW5kZWQgdG8gdGhlIGZvcm1hdC4KKworcmViYXNlLmFiYnJldmlhdGVDb21tYW5kczo6CisJSWYgc2V0IHRvIHRydWUsIGBnaXQgcmViYXNlYCB3aWxsIHVzZSBhYmJyZXZpYXRlZCBjb21tYW5kIG5hbWVzIGluIHRoZQorCXRvZG8gbGlzdCByZXN1bHRpbmcgaW4gc29tZXRoaW5nIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlwIGRlYWRiZWUgVGhlIG9uZWxpbmUgb2YgdGhlIGNvbW1pdAorCXAgZmExYWZlMSBUaGUgb25lbGluZSBvZiB0aGUgbmV4dCBjb21taXQKKwkuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK2luc3RlYWQgb2Y6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcGljayBkZWFkYmVlIFRoZSBvbmVsaW5lIG9mIHRoZSBjb21taXQKKwlwaWNrIGZhMWFmZTEgVGhlIG9uZWxpbmUgb2YgdGhlIG5leHQgY29tbWl0CisJLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitEZWZhdWx0cyB0byBmYWxzZS4KKworcmViYXNlLnJlc2NoZWR1bGVGYWlsZWRFeGVjOjoKKwlBdXRvbWF0aWNhbGx5IHJlc2NoZWR1bGUgYGV4ZWNgIGNvbW1hbmRzIHRoYXQgZmFpbGVkLiBUaGlzIG9ubHkgbWFrZXMKKwlzZW5zZSBpbiBpbnRlcmFjdGl2ZSBtb2RlIChvciB3aGVuIGFuIGAtLWV4ZWNgIG9wdGlvbiB3YXMgcHJvdmlkZWQpLgorCVRoaXMgaXMgdGhlIHNhbWUgYXMgc3BlY2lmeWluZyB0aGUgYC0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlY2Agb3B0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVjZWl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZWNlaXZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWY3OGFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVjZWl2ZS50eHQKQEAgLTAsMCArMSwxMjMgQEAKK3JlY2VpdmUuYWR2ZXJ0aXNlQXRvbWljOjoKKwlCeSBkZWZhdWx0LCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgYWR2ZXJ0aXNlIHRoZSBhdG9taWMgcHVzaAorCWNhcGFiaWxpdHkgdG8gaXRzIGNsaWVudHMuIElmIHlvdSBkb24ndCB3YW50IHRvIGFkdmVydGlzZSB0aGlzCisJY2FwYWJpbGl0eSwgc2V0IHRoaXMgdmFyaWFibGUgdG8gZmFsc2UuCisKK3JlY2VpdmUuYWR2ZXJ0aXNlUHVzaE9wdGlvbnM6OgorCVdoZW4gc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBhZHZlcnRpc2UgdGhlIHB1c2ggb3B0aW9ucworCWNhcGFiaWxpdHkgdG8gaXRzIGNsaWVudHMuIEZhbHNlIGJ5IGRlZmF1bHQuCisKK3JlY2VpdmUuYXV0b2djOjoKKwlCeSBkZWZhdWx0LCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgcnVuICJnaXQtZ2MgLS1hdXRvIiBhZnRlcgorCXJlY2VpdmluZyBkYXRhIGZyb20gZ2l0LXB1c2ggYW5kIHVwZGF0aW5nIHJlZnMuICBZb3UgY2FuIHN0b3AKKwlpdCBieSBzZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gZmFsc2UuCisKK3JlY2VpdmUuY2VydE5vbmNlU2VlZDo6CisJQnkgc2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGEgc3RyaW5nLCBgZ2l0IHJlY2VpdmUtcGFja2AKKwl3aWxsIGFjY2VwdCBhIGBnaXQgcHVzaCAtLXNpZ25lZGAgYW5kIHZlcmlmaWVzIGl0IGJ5IHVzaW5nCisJYSAibm9uY2UiIHByb3RlY3RlZCBieSBITUFDIHVzaW5nIHRoaXMgc3RyaW5nIGFzIGEgc2VjcmV0CisJa2V5LgorCityZWNlaXZlLmNlcnROb25jZVNsb3A6OgorCVdoZW4gYSBgZ2l0IHB1c2ggLS1zaWduZWRgIHNlbnQgYSBwdXNoIGNlcnRpZmljYXRlIHdpdGggYQorCSJub25jZSIgdGhhdCB3YXMgaXNzdWVkIGJ5IGEgcmVjZWl2ZS1wYWNrIHNlcnZpbmcgdGhlIHNhbWUKKwlyZXBvc2l0b3J5IHdpdGhpbiB0aGlzIG1hbnkgc2Vjb25kcywgZXhwb3J0IHRoZSAibm9uY2UiCisJZm91bmQgaW4gdGhlIGNlcnRpZmljYXRlIHRvIGBHSVRfUFVTSF9DRVJUX05PTkNFYCB0byB0aGUKKwlob29rcyAoaW5zdGVhZCBvZiB3aGF0IHRoZSByZWNlaXZlLXBhY2sgYXNrZWQgdGhlIHNlbmRpbmcKKwlzaWRlIHRvIGluY2x1ZGUpLiAgVGhpcyBtYXkgYWxsb3cgd3JpdGluZyBjaGVja3MgaW4KKwlgcHJlLXJlY2VpdmVgIGFuZCBgcG9zdC1yZWNlaXZlYCBhIGJpdCBlYXNpZXIuICBJbnN0ZWFkIG9mCisJY2hlY2tpbmcgYEdJVF9QVVNIX0NFUlRfTk9OQ0VfU0xPUGAgZW52aXJvbm1lbnQgdmFyaWFibGUKKwl0aGF0IHJlY29yZHMgYnkgaG93IG1hbnkgc2Vjb25kcyB0aGUgbm9uY2UgaXMgc3RhbGUgdG8KKwlkZWNpZGUgaWYgdGhleSB3YW50IHRvIGFjY2VwdCB0aGUgY2VydGlmaWNhdGUsIHRoZXkgb25seQorCWNhbiBjaGVjayBgR0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVNgIGlzIGBPS2AuCisKK3JlY2VpdmUuZnNja09iamVjdHM6OgorCUlmIGl0IGlzIHNldCB0byB0cnVlLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgY2hlY2sgYWxsIHJlY2VpdmVkCisJb2JqZWN0cy4gU2VlIGB0cmFuc2Zlci5mc2NrT2JqZWN0c2AgZm9yIHdoYXQncyBjaGVja2VkLgorCURlZmF1bHRzIHRvIGZhbHNlLiBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YKKwlgdHJhbnNmZXIuZnNja09iamVjdHNgIGlzIHVzZWQgaW5zdGVhZC4KKworcmVjZWl2ZS5mc2NrLjxtc2ctaWQ+OjoKKwlBY3RzIGxpa2UgYGZzY2suPG1zZy1pZD5gLCBidXQgaXMgdXNlZCBieQorCWxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSBpbnN0ZWFkIG9mCisJbGlua2dpdDpnaXQtZnNja1sxXS4gU2VlIHRoZSBgZnNjay48bXNnLWlkPmAgZG9jdW1lbnRhdGlvbiBmb3IKKwlkZXRhaWxzLgorCityZWNlaXZlLmZzY2suc2tpcExpc3Q6OgorCUFjdHMgbGlrZSBgZnNjay5za2lwTGlzdGAsIGJ1dCBpcyB1c2VkIGJ5CisJbGlua2dpdDpnaXQtcmVjZWl2ZS1wYWNrWzFdIGluc3RlYWQgb2YKKwlsaW5rZ2l0OmdpdC1mc2NrWzFdLiBTZWUgdGhlIGBmc2NrLnNraXBMaXN0YCBkb2N1bWVudGF0aW9uIGZvcgorCWRldGFpbHMuCisKK3JlY2VpdmUua2VlcEFsaXZlOjoKKwlBZnRlciByZWNlaXZpbmcgdGhlIHBhY2sgZnJvbSB0aGUgY2xpZW50LCBgcmVjZWl2ZS1wYWNrYCBtYXkKKwlwcm9kdWNlIG5vIG91dHB1dCAoaWYgYC0tcXVpZXRgIHdhcyBzcGVjaWZpZWQpIHdoaWxlIHByb2Nlc3NpbmcKKwl0aGUgcGFjaywgY2F1c2luZyBzb21lIG5ldHdvcmtzIHRvIGRyb3AgdGhlIFRDUCBjb25uZWN0aW9uLgorCVdpdGggdGhpcyBvcHRpb24gc2V0LCBpZiBgcmVjZWl2ZS1wYWNrYCBkb2VzIG5vdCB0cmFuc21pdAorCWFueSBkYXRhIGluIHRoaXMgcGhhc2UgZm9yIGByZWNlaXZlLmtlZXBBbGl2ZWAgc2Vjb25kcywgaXQgd2lsbAorCXNlbmQgYSBzaG9ydCBrZWVwYWxpdmUgcGFja2V0LiAgVGhlIGRlZmF1bHQgaXMgNSBzZWNvbmRzOyBzZXQKKwl0byAwIHRvIGRpc2FibGUga2VlcGFsaXZlcyBlbnRpcmVseS4KKworcmVjZWl2ZS51bnBhY2tMaW1pdDo6CisJSWYgdGhlIG51bWJlciBvZiBvYmplY3RzIHJlY2VpdmVkIGluIGEgcHVzaCBpcyBiZWxvdyB0aGlzCisJbGltaXQgdGhlbiB0aGUgb2JqZWN0cyB3aWxsIGJlIHVucGFja2VkIGludG8gbG9vc2Ugb2JqZWN0CisJZmlsZXMuIEhvd2V2ZXIgaWYgdGhlIG51bWJlciBvZiByZWNlaXZlZCBvYmplY3RzIGVxdWFscyBvcgorCWV4Y2VlZHMgdGhpcyBsaW1pdCB0aGVuIHRoZSByZWNlaXZlZCBwYWNrIHdpbGwgYmUgc3RvcmVkIGFzCisJYSBwYWNrLCBhZnRlciBhZGRpbmcgYW55IG1pc3NpbmcgZGVsdGEgYmFzZXMuICBTdG9yaW5nIHRoZQorCXBhY2sgZnJvbSBhIHB1c2ggY2FuIG1ha2UgdGhlIHB1c2ggb3BlcmF0aW9uIGNvbXBsZXRlIGZhc3RlciwKKwllc3BlY2lhbGx5IG9uIHNsb3cgZmlsZXN5c3RlbXMuICBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YKKwlgdHJhbnNmZXIudW5wYWNrTGltaXRgIGlzIHVzZWQgaW5zdGVhZC4KKworcmVjZWl2ZS5tYXhJbnB1dFNpemU6OgorCUlmIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBwYWNrIHN0cmVhbSBpcyBsYXJnZXIgdGhhbiB0aGlzCisJbGltaXQsIHRoZW4gZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGVycm9yIG91dCwgaW5zdGVhZCBvZgorCWFjY2VwdGluZyB0aGUgcGFjayBmaWxlLiBJZiBub3Qgc2V0IG9yIHNldCB0byAwLCB0aGVuIHRoZSBzaXplCisJaXMgdW5saW1pdGVkLgorCityZWNlaXZlLmRlbnlEZWxldGVzOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGRlbnkgYSByZWYgdXBkYXRlIHRoYXQgZGVsZXRlcworCXRoZSByZWYuIFVzZSB0aGlzIHRvIHByZXZlbnQgc3VjaCBhIHJlZiBkZWxldGlvbiB2aWEgYSBwdXNoLgorCityZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50OjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGRlbnkgYSByZWYgdXBkYXRlIHRoYXQKKwlkZWxldGVzIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoIG9mIGEgbm9uLWJhcmUgcmVwb3NpdG9yeS4KKworcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaDo6CisJSWYgc2V0IHRvIHRydWUgb3IgInJlZnVzZSIsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBkZW55IGEgcmVmIHVwZGF0ZQorCXRvIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoIG9mIGEgbm9uLWJhcmUgcmVwb3NpdG9yeS4KKwlTdWNoIGEgcHVzaCBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYmVjYXVzZSBpdCBicmluZ3MgdGhlIEhFQUQKKwlvdXQgb2Ygc3luYyB3aXRoIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlLiBJZiBzZXQgdG8gIndhcm4iLAorCXByaW50IGEgd2FybmluZyBvZiBzdWNoIGEgcHVzaCB0byBzdGRlcnIsIGJ1dCBhbGxvdyB0aGUgcHVzaCB0bworCXByb2NlZWQuIElmIHNldCB0byBmYWxzZSBvciAiaWdub3JlIiwgYWxsb3cgc3VjaCBwdXNoZXMgd2l0aCBubworCW1lc3NhZ2UuIERlZmF1bHRzIHRvICJyZWZ1c2UiLgorKworQW5vdGhlciBvcHRpb24gaXMgInVwZGF0ZUluc3RlYWQiIHdoaWNoIHdpbGwgdXBkYXRlIHRoZSB3b3JraW5nCit0cmVlIGlmIHB1c2hpbmcgaW50byB0aGUgY3VycmVudCBicmFuY2guICBUaGlzIG9wdGlvbiBpcworaW50ZW5kZWQgZm9yIHN5bmNocm9uaXppbmcgd29ya2luZyBkaXJlY3RvcmllcyB3aGVuIG9uZSBzaWRlIGlzIG5vdCBlYXNpbHkKK2FjY2Vzc2libGUgdmlhIGludGVyYWN0aXZlIHNzaCAoZS5nLiBhIGxpdmUgd2ViIHNpdGUsIGhlbmNlIHRoZSByZXF1aXJlbWVudAordGhhdCB0aGUgd29ya2luZyBkaXJlY3RvcnkgYmUgY2xlYW4pLiBUaGlzIG1vZGUgYWxzbyBjb21lcyBpbiBoYW5keSB3aGVuCitkZXZlbG9waW5nIGluc2lkZSBhIFZNIHRvIHRlc3QgYW5kIGZpeCBjb2RlIG9uIGRpZmZlcmVudCBPcGVyYXRpbmcgU3lzdGVtcy4KKysKK0J5IGRlZmF1bHQsICJ1cGRhdGVJbnN0ZWFkIiB3aWxsIHJlZnVzZSB0aGUgcHVzaCBpZiB0aGUgd29ya2luZyB0cmVlIG9yCit0aGUgaW5kZXggaGF2ZSBhbnkgZGlmZmVyZW5jZSBmcm9tIHRoZSBIRUFELCBidXQgdGhlIGBwdXNoLXRvLWNoZWNrb3V0YAoraG9vayBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgdGhpcy4gIFNlZSBsaW5rZ2l0OmdpdGhvb2tzWzVdLgorCityZWNlaXZlLmRlbnlOb25GYXN0Rm9yd2FyZHM6OgorCUlmIHNldCB0byB0cnVlLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgZGVueSBhIHJlZiB1cGRhdGUgd2hpY2ggaXMKKwlub3QgYSBmYXN0LWZvcndhcmQuIFVzZSB0aGlzIHRvIHByZXZlbnQgc3VjaCBhbiB1cGRhdGUgdmlhIGEgcHVzaCwKKwlldmVuIGlmIHRoYXQgcHVzaCBpcyBmb3JjZWQuIFRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcworCXNldCB3aGVuIGluaXRpYWxpemluZyBhIHNoYXJlZCByZXBvc2l0b3J5LgorCityZWNlaXZlLmhpZGVSZWZzOjoKKwlUaGlzIHZhcmlhYmxlIGlzIHRoZSBzYW1lIGFzIGB0cmFuc2Zlci5oaWRlUmVmc2AsIGJ1dCBhcHBsaWVzCisJb25seSB0byBgcmVjZWl2ZS1wYWNrYCAoYW5kIHNvIGFmZmVjdHMgcHVzaGVzLCBidXQgbm90IGZldGNoZXMpLgorCUFuIGF0dGVtcHQgdG8gdXBkYXRlIG9yIGRlbGV0ZSBhIGhpZGRlbiByZWYgYnkgYGdpdCBwdXNoYCBpcworCXJlamVjdGVkLgorCityZWNlaXZlLnVwZGF0ZVNlcnZlckluZm86OgorCUlmIHNldCB0byB0cnVlLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8KKwlhZnRlciByZWNlaXZpbmcgZGF0YSBmcm9tIGdpdC1wdXNoIGFuZCB1cGRhdGluZyByZWZzLgorCityZWNlaXZlLnNoYWxsb3dVcGRhdGU6OgorCUlmIHNldCB0byB0cnVlLCAuZ2l0L3NoYWxsb3cgY2FuIGJlIHVwZGF0ZWQgd2hlbiBuZXcgcmVmcworCXJlcXVpcmUgbmV3IHNoYWxsb3cgcm9vdHMuIE90aGVyd2lzZSB0aG9zZSByZWZzIGFyZSByZWplY3RlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3JlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZTY0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZW1vdGUudHh0CkBAIC0wLDAgKzEsODYgQEAKK3JlbW90ZS5wdXNoRGVmYXVsdDo6CisJVGhlIHJlbW90ZSB0byBwdXNoIHRvIGJ5IGRlZmF1bHQuICBPdmVycmlkZXMKKwlgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGZvciBhbGwgYnJhbmNoZXMsIGFuZCBpcyBvdmVycmlkZGVuIGJ5CisJYGJyYW5jaC48bmFtZT4ucHVzaFJlbW90ZWAgZm9yIHNwZWNpZmljIGJyYW5jaGVzLgorCityZW1vdGUuPG5hbWU+LnVybDo6CisJVGhlIFVSTCBvZiBhIHJlbW90ZSByZXBvc2l0b3J5LiAgU2VlIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIG9yCisJbGlua2dpdDpnaXQtcHVzaFsxXS4KKworcmVtb3RlLjxuYW1lPi5wdXNodXJsOjoKKwlUaGUgcHVzaCBVUkwgb2YgYSByZW1vdGUgcmVwb3NpdG9yeS4gIFNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCityZW1vdGUuPG5hbWU+LnByb3h5OjoKKwlGb3IgcmVtb3RlcyB0aGF0IHJlcXVpcmUgY3VybCAoaHR0cCwgaHR0cHMgYW5kIGZ0cCksIHRoZSBVUkwgdG8KKwl0aGUgcHJveHkgdG8gdXNlIGZvciB0aGF0IHJlbW90ZS4gIFNldCB0byB0aGUgZW1wdHkgc3RyaW5nIHRvCisJZGlzYWJsZSBwcm94eWluZyBmb3IgdGhhdCByZW1vdGUuCisKK3JlbW90ZS48bmFtZT4ucHJveHlBdXRoTWV0aG9kOjoKKwlGb3IgcmVtb3RlcyB0aGF0IHJlcXVpcmUgY3VybCAoaHR0cCwgaHR0cHMgYW5kIGZ0cCksIHRoZSBtZXRob2QgdG8gdXNlIGZvcgorCWF1dGhlbnRpY2F0aW5nIGFnYWluc3QgdGhlIHByb3h5IGluIHVzZSAocHJvYmFibHkgc2V0IGluCisJYHJlbW90ZS48bmFtZT4ucHJveHlgKS4gU2VlIGBodHRwLnByb3h5QXV0aE1ldGhvZGAuCisKK3JlbW90ZS48bmFtZT4uZmV0Y2g6OgorCVRoZSBkZWZhdWx0IHNldCBvZiAicmVmc3BlYyIgZm9yIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLiBTZWUKKwlsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKworcmVtb3RlLjxuYW1lPi5wdXNoOjoKKwlUaGUgZGVmYXVsdCBzZXQgb2YgInJlZnNwZWMiIGZvciBsaW5rZ2l0OmdpdC1wdXNoWzFdLiBTZWUKKwlsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCityZW1vdGUuPG5hbWU+Lm1pcnJvcjo6CisJSWYgdHJ1ZSwgcHVzaGluZyB0byB0aGlzIHJlbW90ZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmVoYXZlCisJYXMgaWYgdGhlIGAtLW1pcnJvcmAgb3B0aW9uIHdhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCityZW1vdGUuPG5hbWU+LnNraXBEZWZhdWx0VXBkYXRlOjoKKwlJZiB0cnVlLCB0aGlzIHJlbW90ZSB3aWxsIGJlIHNraXBwZWQgYnkgZGVmYXVsdCB3aGVuIHVwZGF0aW5nCisJdXNpbmcgbGlua2dpdDpnaXQtZmV0Y2hbMV0gb3IgdGhlIGB1cGRhdGVgIHN1YmNvbW1hbmQgb2YKKwlsaW5rZ2l0OmdpdC1yZW1vdGVbMV0uCisKK3JlbW90ZS48bmFtZT4uc2tpcEZldGNoQWxsOjoKKwlJZiB0cnVlLCB0aGlzIHJlbW90ZSB3aWxsIGJlIHNraXBwZWQgYnkgZGVmYXVsdCB3aGVuIHVwZGF0aW5nCisJdXNpbmcgbGlua2dpdDpnaXQtZmV0Y2hbMV0gb3IgdGhlIGB1cGRhdGVgIHN1YmNvbW1hbmQgb2YKKwlsaW5rZ2l0OmdpdC1yZW1vdGVbMV0uCisKK3JlbW90ZS48bmFtZT4ucmVjZWl2ZXBhY2s6OgorCVRoZSBkZWZhdWx0IHByb2dyYW0gdG8gZXhlY3V0ZSBvbiB0aGUgcmVtb3RlIHNpZGUgd2hlbiBwdXNoaW5nLiAgU2VlCisJb3B0aW9uIC0tcmVjZWl2ZS1wYWNrIG9mIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKK3JlbW90ZS48bmFtZT4udXBsb2FkcGFjazo6CisJVGhlIGRlZmF1bHQgcHJvZ3JhbSB0byBleGVjdXRlIG9uIHRoZSByZW1vdGUgc2lkZSB3aGVuIGZldGNoaW5nLiAgU2VlCisJb3B0aW9uIC0tdXBsb2FkLXBhY2sgb2YgbGlua2dpdDpnaXQtZmV0Y2gtcGFja1sxXS4KKworcmVtb3RlLjxuYW1lPi50YWdPcHQ6OgorCVNldHRpbmcgdGhpcyB2YWx1ZSB0byAtLW5vLXRhZ3MgZGlzYWJsZXMgYXV0b21hdGljIHRhZyBmb2xsb3dpbmcgd2hlbgorCWZldGNoaW5nIGZyb20gcmVtb3RlIDxuYW1lPi4gU2V0dGluZyBpdCB0byAtLXRhZ3Mgd2lsbCBmZXRjaCBldmVyeQorCXRhZyBmcm9tIHJlbW90ZSA8bmFtZT4sIGV2ZW4gaWYgdGhleSBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHJlbW90ZQorCWJyYW5jaCBoZWFkcy4gUGFzc2luZyB0aGVzZSBmbGFncyBkaXJlY3RseSB0byBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBjYW4KKwlvdmVycmlkZSB0aGlzIHNldHRpbmcuIFNlZSBvcHRpb25zIC0tdGFncyBhbmQgLS1uby10YWdzIG9mCisJbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK3JlbW90ZS48bmFtZT4udmNzOjoKKwlTZXR0aW5nIHRoaXMgdG8gYSB2YWx1ZSA8dmNzPiB3aWxsIGNhdXNlIEdpdCB0byBpbnRlcmFjdCB3aXRoCisJdGhlIHJlbW90ZSB3aXRoIHRoZSBnaXQtcmVtb3RlLTx2Y3M+IGhlbHBlci4KKworcmVtb3RlLjxuYW1lPi5wcnVuZTo6CisJV2hlbiBzZXQgdG8gdHJ1ZSwgZmV0Y2hpbmcgZnJvbSB0aGlzIHJlbW90ZSBieSBkZWZhdWx0IHdpbGwgYWxzbworCXJlbW92ZSBhbnkgcmVtb3RlLXRyYWNraW5nIHJlZmVyZW5jZXMgdGhhdCBubyBsb25nZXIgZXhpc3Qgb24gdGhlCisJcmVtb3RlIChhcyBpZiB0aGUgYC0tcHJ1bmVgIG9wdGlvbiB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSkuCisJT3ZlcnJpZGVzIGBmZXRjaC5wcnVuZWAgc2V0dGluZ3MsIGlmIGFueS4KKworcmVtb3RlLjxuYW1lPi5wcnVuZVRhZ3M6OgorCVdoZW4gc2V0IHRvIHRydWUsIGZldGNoaW5nIGZyb20gdGhpcyByZW1vdGUgYnkgZGVmYXVsdCB3aWxsIGFsc28KKwlyZW1vdmUgYW55IGxvY2FsIHRhZ3MgdGhhdCBubyBsb25nZXIgZXhpc3Qgb24gdGhlIHJlbW90ZSBpZiBwcnVuaW5nCisJaXMgYWN0aXZhdGVkIGluIGdlbmVyYWwgdmlhIGByZW1vdGUuPG5hbWU+LnBydW5lYCwgYGZldGNoLnBydW5lYCBvcgorCWAtLXBydW5lYC4gT3ZlcnJpZGVzIGBmZXRjaC5wcnVuZVRhZ3NgIHNldHRpbmdzLCBpZiBhbnkuCisrCitTZWUgYWxzbyBgcmVtb3RlLjxuYW1lPi5wcnVuZWAgYW5kIHRoZSBQUlVOSU5HIHNlY3Rpb24gb2YKK2xpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCityZW1vdGUuPG5hbWU+LnByb21pc29yOjoKKwlXaGVuIHNldCB0byB0cnVlLCB0aGlzIHJlbW90ZSB3aWxsIGJlIHVzZWQgdG8gZmV0Y2ggcHJvbWlzb3IKKwlvYmplY3RzLgorCityZW1vdGUuPG5hbWU+LnBhcnRpYWxjbG9uZWZpbHRlcjo6CisJVGhlIGZpbHRlciB0aGF0IHdpbGwgYmUgYXBwbGllZCB3aGVuIGZldGNoaW5nIGZyb20gdGhpcworCXByb21pc29yIHJlbW90ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3JlbW90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVtb3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmZTAzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3JlbW90ZXMudHh0CkBAIC0wLDAgKzEsMyBAQAorcmVtb3Rlcy48Z3JvdXA+OjoKKwlUaGUgbGlzdCBvZiByZW1vdGVzIHdoaWNoIGFyZSBmZXRjaGVkIGJ5ICJnaXQgcmVtb3RlIHVwZGF0ZQorCTxncm91cD4iLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3JlcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDEzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZXBhY2sudHh0CkBAIC0wLDAgKzEsMjcgQEAKK3JlcGFjay51c2VEZWx0YUJhc2VPZmZzZXQ6OgorCUJ5IGRlZmF1bHQsIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSBjcmVhdGVzIHBhY2tzIHRoYXQgdXNlCisJZGVsdGEtYmFzZSBvZmZzZXQuIElmIHlvdSBuZWVkIHRvIHNoYXJlIHlvdXIgcmVwb3NpdG9yeSB3aXRoCisJR2l0IG9sZGVyIHRoYW4gdmVyc2lvbiAxLjQuNCwgZWl0aGVyIGRpcmVjdGx5IG9yIHZpYSBhIGR1bWIKKwlwcm90b2NvbCBzdWNoIGFzIGh0dHAsIHRoZW4geW91IG5lZWQgdG8gc2V0IHRoaXMgb3B0aW9uIHRvCisJImZhbHNlIiBhbmQgcmVwYWNrLiBBY2Nlc3MgZnJvbSBvbGQgR2l0IHZlcnNpb25zIG92ZXIgdGhlCisJbmF0aXZlIHByb3RvY29sIGFyZSB1bmFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uLgorCityZXBhY2sucGFja0tlcHRPYmplY3RzOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgbWFrZXMgYGdpdCByZXBhY2tgIGFjdCBhcyBpZgorCWAtLXBhY2sta2VwdC1vYmplY3RzYCB3YXMgcGFzc2VkLiBTZWUgbGlua2dpdDpnaXQtcmVwYWNrWzFdIGZvcgorCWRldGFpbHMuIERlZmF1bHRzIHRvIGBmYWxzZWAgbm9ybWFsbHksIGJ1dCBgdHJ1ZWAgaWYgYSBiaXRtYXAKKwlpbmRleCBpcyBiZWluZyB3cml0dGVuIChlaXRoZXIgdmlhIGAtLXdyaXRlLWJpdG1hcC1pbmRleGAgb3IKKwlgcmVwYWNrLndyaXRlQml0bWFwc2ApLgorCityZXBhY2sudXNlRGVsdGFJc2xhbmRzOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgbWFrZXMgYGdpdCByZXBhY2tgIGFjdCBhcyBpZiBgLS1kZWx0YS1pc2xhbmRzYAorCXdhcyBwYXNzZWQuIERlZmF1bHRzIHRvIGBmYWxzZWAuCisKK3JlcGFjay53cml0ZUJpdG1hcHM6OgorCVdoZW4gdHJ1ZSwgZ2l0IHdpbGwgd3JpdGUgYSBiaXRtYXAgaW5kZXggd2hlbiBwYWNraW5nIGFsbAorCW9iamVjdHMgdG8gZGlzayAoZS5nLiwgd2hlbiBgZ2l0IHJlcGFjayAtYWAgaXMgcnVuKS4gIFRoaXMKKwlpbmRleCBjYW4gc3BlZWQgdXAgdGhlICJjb3VudGluZyBvYmplY3RzIiBwaGFzZSBvZiBzdWJzZXF1ZW50CisJcGFja3MgY3JlYXRlZCBmb3IgY2xvbmVzIGFuZCBmZXRjaGVzLCBhdCB0aGUgY29zdCBvZiBzb21lIGRpc2sKKwlzcGFjZSBhbmQgZXh0cmEgdGltZSBzcGVudCBvbiB0aGUgaW5pdGlhbCByZXBhY2suICBUaGlzIGhhcworCW5vIGVmZmVjdCBpZiBtdWx0aXBsZSBwYWNrZmlsZXMgYXJlIGNyZWF0ZWQuCisJRGVmYXVsdHMgdG8gdHJ1ZSBvbiBiYXJlIHJlcG9zLCBmYWxzZSBvdGhlcndpc2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9yZXJlcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVyZXJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGFiZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVyZXJlLnR4dApAQCAtMCwwICsxLDEyIEBACityZXJlcmUuYXV0b1VwZGF0ZTo6CisJV2hlbiBzZXQgdG8gdHJ1ZSwgYGdpdC1yZXJlcmVgIHVwZGF0ZXMgdGhlIGluZGV4IHdpdGggdGhlCisJcmVzdWx0aW5nIGNvbnRlbnRzIGFmdGVyIGl0IGNsZWFubHkgcmVzb2x2ZXMgY29uZmxpY3RzIHVzaW5nCisJcHJldmlvdXNseSByZWNvcmRlZCByZXNvbHV0aW9uLiAgRGVmYXVsdHMgdG8gZmFsc2UuCisKK3JlcmVyZS5lbmFibGVkOjoKKwlBY3RpdmF0ZSByZWNvcmRpbmcgb2YgcmVzb2x2ZWQgY29uZmxpY3RzLCBzbyB0aGF0IGlkZW50aWNhbAorCWNvbmZsaWN0IGh1bmtzIGNhbiBiZSByZXNvbHZlZCBhdXRvbWF0aWNhbGx5LCBzaG91bGQgdGhleSBiZQorCWVuY291bnRlcmVkIGFnYWluLiAgQnkgZGVmYXVsdCwgbGlua2dpdDpnaXQtcmVyZXJlWzFdIGlzCisJZW5hYmxlZCBpZiB0aGVyZSBpcyBhbiBgcnItY2FjaGVgIGRpcmVjdG9yeSB1bmRlciB0aGUKKwlgJEdJVF9ESVJgLCBlLmcuIGlmICJyZXJlcmUiIHdhcyBwcmV2aW91c2x5IHVzZWQgaW4gdGhlCisJcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3Jlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3Jlc2V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2I3YzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvcmVzZXQudHh0CkBAIC0wLDAgKzEsMiBAQAorcmVzZXQucXVpZXQ6OgorCVdoZW4gc2V0IHRvIHRydWUsICdnaXQgcmVzZXQnIHdpbGwgZGVmYXVsdCB0byB0aGUgJy0tcXVpZXQnIG9wdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3NlbmRlbWFpbC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zZW5kZW1haWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDZmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zZW5kZW1haWwudHh0CkBAIC0wLDAgKzEsNjMgQEAKK3NlbmRlbWFpbC5pZGVudGl0eTo6CisJQSBjb25maWd1cmF0aW9uIGlkZW50aXR5LiBXaGVuIGdpdmVuLCBjYXVzZXMgdmFsdWVzIGluIHRoZQorCSdzZW5kZW1haWwuPGlkZW50aXR5Picgc3Vic2VjdGlvbiB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlcgorCXZhbHVlcyBpbiB0aGUgJ3NlbmRlbWFpbCcgc2VjdGlvbi4gVGhlIGRlZmF1bHQgaWRlbnRpdHkgaXMKKwl0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5pZGVudGl0eWAuCisKK3NlbmRlbWFpbC5zbXRwRW5jcnlwdGlvbjo6CisJU2VlIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0gZm9yIGRlc2NyaXB0aW9uLiAgTm90ZSB0aGF0IHRoaXMKKwlzZXR0aW5nIGlzIG5vdCBzdWJqZWN0IHRvIHRoZSAnaWRlbnRpdHknIG1lY2hhbmlzbS4KKworc2VuZGVtYWlsLnNtdHBzc2wgKGRlcHJlY2F0ZWQpOjoKKwlEZXByZWNhdGVkIGFsaWFzIGZvciAnc2VuZGVtYWlsLnNtdHBFbmNyeXB0aW9uID0gc3NsJy4KKworc2VuZGVtYWlsLnNtdHBzc2xjZXJ0cGF0aDo6CisJUGF0aCB0byBjYS1jZXJ0aWZpY2F0ZXMgKGVpdGhlciBhIGRpcmVjdG9yeSBvciBhIHNpbmdsZSBmaWxlKS4KKwlTZXQgaXQgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLgorCitzZW5kZW1haWwuPGlkZW50aXR5Pi4qOjoKKwlJZGVudGl0eS1zcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgJ3NlbmRlbWFpbC4qJyBwYXJhbWV0ZXJzCisJZm91bmQgYmVsb3csIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgdGhvc2Ugd2hlbiB0aGlzCisJaWRlbnRpdHkgaXMgc2VsZWN0ZWQsIHRocm91Z2ggZWl0aGVyIHRoZSBjb21tYW5kLWxpbmUgb3IKKwlgc2VuZGVtYWlsLmlkZW50aXR5YC4KKworc2VuZGVtYWlsLmFsaWFzZXNGaWxlOjoKK3NlbmRlbWFpbC5hbGlhc0ZpbGVUeXBlOjoKK3NlbmRlbWFpbC5hbm5vdGF0ZTo6CitzZW5kZW1haWwuYmNjOjoKK3NlbmRlbWFpbC5jYzo6CitzZW5kZW1haWwuY2NDbWQ6Ogorc2VuZGVtYWlsLmNoYWluUmVwbHlUbzo6CitzZW5kZW1haWwuY29uZmlybTo6CitzZW5kZW1haWwuZW52ZWxvcGVTZW5kZXI6Ogorc2VuZGVtYWlsLmZyb206Ogorc2VuZGVtYWlsLm11bHRpRWRpdDo6CitzZW5kZW1haWwuc2lnbmVkb2ZmYnljYzo6CitzZW5kZW1haWwuc210cFBhc3M6Ogorc2VuZGVtYWlsLnN1cHByZXNzY2M6Ogorc2VuZGVtYWlsLnN1cHByZXNzRnJvbTo6CitzZW5kZW1haWwudG86Ogorc2VuZGVtYWlsLnRvY21kOjoKK3NlbmRlbWFpbC5zbXRwRG9tYWluOjoKK3NlbmRlbWFpbC5zbXRwU2VydmVyOjoKK3NlbmRlbWFpbC5zbXRwU2VydmVyUG9ydDo6CitzZW5kZW1haWwuc210cFNlcnZlck9wdGlvbjo6CitzZW5kZW1haWwuc210cFVzZXI6Ogorc2VuZGVtYWlsLnRocmVhZDo6CitzZW5kZW1haWwudHJhbnNmZXJFbmNvZGluZzo6CitzZW5kZW1haWwudmFsaWRhdGU6Ogorc2VuZGVtYWlsLnhtYWlsZXI6OgorCVNlZSBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIGZvciBkZXNjcmlwdGlvbi4KKworc2VuZGVtYWlsLnNpZ25lZG9mZmNjIChkZXByZWNhdGVkKTo6CisJRGVwcmVjYXRlZCBhbGlhcyBmb3IgYHNlbmRlbWFpbC5zaWduZWRvZmZieWNjYC4KKworc2VuZGVtYWlsLnNtdHBCYXRjaFNpemU6OgorCU51bWJlciBvZiBtZXNzYWdlcyB0byBiZSBzZW50IHBlciBjb25uZWN0aW9uLCBhZnRlciB0aGF0IGEgcmVsb2dpbgorCXdpbGwgaGFwcGVuLiAgSWYgdGhlIHZhbHVlIGlzIDAgb3IgdW5kZWZpbmVkLCBzZW5kIGFsbCBtZXNzYWdlcyBpbgorCW9uZSBjb25uZWN0aW9uLgorCVNlZSBhbHNvIHRoZSBgLS1iYXRjaC1zaXplYCBvcHRpb24gb2YgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXS4KKworc2VuZGVtYWlsLnNtdHBSZWxvZ2luRGVsYXk6OgorCVNlY29uZHMgd2FpdCBiZWZvcmUgcmVjb25uZWN0aW5nIHRvIHNtdHAgc2VydmVyLgorCVNlZSBhbHNvIHRoZSBgLS1yZWxvZ2luLWRlbGF5YCBvcHRpb24gb2YgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3NlcXVlbmNlci50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zZXF1ZW5jZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OGQ1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zZXF1ZW5jZXIudHh0CkBAIC0wLDAgKzEsNSBAQAorc2VxdWVuY2UuZWRpdG9yOjoKKwlUZXh0IGVkaXRvciB1c2VkIGJ5IGBnaXQgcmViYXNlIC1pYCBmb3IgZWRpdGluZyB0aGUgcmViYXNlIGluc3RydWN0aW9uIGZpbGUuCisJVGhlIHZhbHVlIGlzIG1lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbCB3aGVuIGl0IGlzIHVzZWQuCisJSXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfU0VRVUVOQ0VfRURJVE9SYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwlXaGVuIG5vdCBjb25maWd1cmVkIHRoZSBkZWZhdWx0IGNvbW1pdCBtZXNzYWdlIGVkaXRvciBpcyB1c2VkIGluc3RlYWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zaG93YnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3Nob3dicmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OWVjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zaG93YnJhbmNoLnR4dApAQCAtMCwwICsxLDMgQEAKK3Nob3dCcmFuY2guZGVmYXVsdDo6CisJVGhlIGRlZmF1bHQgc2V0IG9mIGJyYW5jaGVzIGZvciBsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXS4KKwlTZWUgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zcGxpdGluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3NwbGl0aW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZGIxODYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zcGxpdGluZGV4LnR4dApAQCAtMCwwICsxLDI0IEBACitzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2U6OgorCVdoZW4gdGhlIHNwbGl0IGluZGV4IGZlYXR1cmUgaXMgdXNlZCwgdGhpcyBzcGVjaWZpZXMgdGhlCisJcGVyY2VudCBvZiBlbnRyaWVzIHRoZSBzcGxpdCBpbmRleCBjYW4gY29udGFpbiBjb21wYXJlZCB0byB0aGUKKwl0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiBib3RoIHRoZSBzcGxpdCBpbmRleCBhbmQgdGhlIHNoYXJlZAorCWluZGV4IGJlZm9yZSBhIG5ldyBzaGFyZWQgaW5kZXggaXMgd3JpdHRlbi4KKwlUaGUgdmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwLiBJZiB0aGUgdmFsdWUgaXMgMCB0aGVuCisJYSBuZXcgc2hhcmVkIGluZGV4IGlzIGFsd2F5cyB3cml0dGVuLCBpZiBpdCBpcyAxMDAgYSBuZXcKKwlzaGFyZWQgaW5kZXggaXMgbmV2ZXIgd3JpdHRlbi4KKwlCeSBkZWZhdWx0IHRoZSB2YWx1ZSBpcyAyMCwgc28gYSBuZXcgc2hhcmVkIGluZGV4IGlzIHdyaXR0ZW4KKwlpZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNwbGl0IGluZGV4IHdvdWxkIGJlIGdyZWF0ZXIKKwl0aGFuIDIwIHBlcmNlbnQgb2YgdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzLgorCVNlZSBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0uCisKK3NwbGl0SW5kZXguc2hhcmVkSW5kZXhFeHBpcmU6OgorCVdoZW4gdGhlIHNwbGl0IGluZGV4IGZlYXR1cmUgaXMgdXNlZCwgc2hhcmVkIGluZGV4IGZpbGVzIHRoYXQKKwl3ZXJlIG5vdCBtb2RpZmllZCBzaW5jZSB0aGUgdGltZSB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aWxsCisJYmUgcmVtb3ZlZCB3aGVuIGEgbmV3IHNoYXJlZCBpbmRleCBmaWxlIGlzIGNyZWF0ZWQuIFRoZSB2YWx1ZQorCSJub3ciIGV4cGlyZXMgYWxsIGVudHJpZXMgaW1tZWRpYXRlbHksIGFuZCAibmV2ZXIiIHN1cHByZXNzZXMKKwlleHBpcmF0aW9uIGFsdG9nZXRoZXIuCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgIjIud2Vla3MuYWdvIi4KKwlOb3RlIHRoYXQgYSBzaGFyZWQgaW5kZXggZmlsZSBpcyBjb25zaWRlcmVkIG1vZGlmaWVkIChmb3IgdGhlCisJcHVycG9zZSBvZiBleHBpcmF0aW9uKSBlYWNoIHRpbWUgYSBuZXcgc3BsaXQtaW5kZXggZmlsZSBpcworCWVpdGhlciBjcmVhdGVkIGJhc2VkIG9uIGl0IG9yIHJlYWQgZnJvbSBpdC4KKwlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvc3NoLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3NzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhNGJmOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3NzaC50eHQKQEAgLTAsMCArMSwzNSBAQAorc3NoLnZhcmlhbnQ6OgorCUJ5IGRlZmF1bHQsIEdpdCBkZXRlcm1pbmVzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIHVzZQorCWJhc2VkIG9uIHRoZSBiYXNlbmFtZSBvZiB0aGUgY29uZmlndXJlZCBTU0ggY29tbWFuZCAoY29uZmlndXJlZAorCXVzaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUX1NTSGAgb3IgYEdJVF9TU0hfQ09NTUFORGAgb3IKKwl0aGUgY29uZmlnIHNldHRpbmcgYGNvcmUuc3NoQ29tbWFuZGApLiBJZiB0aGUgYmFzZW5hbWUgaXMKKwl1bnJlY29nbml6ZWQsIEdpdCB3aWxsIGF0dGVtcHQgdG8gZGV0ZWN0IHN1cHBvcnQgb2YgT3BlblNTSAorCW9wdGlvbnMgYnkgZmlyc3QgaW52b2tpbmcgdGhlIGNvbmZpZ3VyZWQgU1NIIGNvbW1hbmQgd2l0aCB0aGUKKwlgLUdgIChwcmludCBjb25maWd1cmF0aW9uKSBvcHRpb24gYW5kIHdpbGwgc3Vic2VxdWVudGx5IHVzZQorCU9wZW5TU0ggb3B0aW9ucyAoaWYgdGhhdCBpcyBzdWNjZXNzZnVsKSBvciBubyBvcHRpb25zIGJlc2lkZXMKKwl0aGUgaG9zdCBhbmQgcmVtb3RlIGNvbW1hbmQgKGlmIGl0IGZhaWxzKS4KKysKK1RoZSBjb25maWcgdmFyaWFibGUgYHNzaC52YXJpYW50YCBjYW4gYmUgc2V0IHRvIG92ZXJyaWRlIHRoaXMgZGV0ZWN0aW9uLgorVmFsaWQgdmFsdWVzIGFyZSBgc3NoYCAodG8gdXNlIE9wZW5TU0ggb3B0aW9ucyksIGBwbGlua2AsIGBwdXR0eWAsCitgdG9ydG9pc2VwbGlua2AsIGBzaW1wbGVgIChubyBvcHRpb25zIGV4Y2VwdCB0aGUgaG9zdCBhbmQgcmVtb3RlIGNvbW1hbmQpLgorVGhlIGRlZmF1bHQgYXV0by1kZXRlY3Rpb24gY2FuIGJlIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHVzaW5nIHRoZSB2YWx1ZQorYGF1dG9gLiAgQW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYHNzaGAuICBUaGlzIHNldHRpbmcgY2FuIGFsc28gYmUKK292ZXJyaWRkZW4gdmlhIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUX1NTSF9WQVJJQU5UYC4KKysKK1RoZSBjdXJyZW50IGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzIHVzZWQgZm9yIGVhY2ggdmFyaWFudCBhcmUgYXMKK2ZvbGxvd3M6CisrCistLQorCisqIGBzc2hgIC0gWy1wIHBvcnRdIFstNF0gWy02XSBbLW8gb3B0aW9uXSBbdXNlcm5hbWVAXWhvc3QgY29tbWFuZAorCisqIGBzaW1wbGVgIC0gW3VzZXJuYW1lQF1ob3N0IGNvbW1hbmQKKworKiBgcGxpbmtgIG9yIGBwdXR0eWAgLSBbLVAgcG9ydF0gWy00XSBbLTZdIFt1c2VybmFtZUBdaG9zdCBjb21tYW5kCisKKyogYHRvcnRvaXNlcGxpbmtgIC0gWy1QIHBvcnRdIFstNF0gWy02XSAtYmF0Y2ggW3VzZXJuYW1lQF1ob3N0IGNvbW1hbmQKKworLS0KKysKK0V4Y2VwdCBmb3IgdGhlIGBzaW1wbGVgIHZhcmlhbnQsIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzIGFyZSBsaWtlbHkgdG8KK2NoYW5nZSBhcyBnaXQgZ2FpbnMgbmV3IGZlYXR1cmVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvc3Rhc2gudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3Rhc2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzdlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdGFzaC50eHQKQEAgLTAsMCArMSwyNCBAQAorc3Rhc2gudXNlQnVpbHRpbjo6CisgICAgICAgU2V0IHRvIGBmYWxzZWAgdG8gdXNlIHRoZSBsZWdhY3kgc2hlbGwgc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgbGlua2dpdDpnaXQtc3Rhc2hbMV0uIElzIGB0cnVlYCBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB1c2UKKyAgICAgICB0aGUgYnVpbHQtaW4gcmV3cml0ZSBvZiBpdCBpbiBDLgorKworVGhlIEMgcmV3cml0ZSBpcyBmaXJzdCBpbmNsdWRlZCB3aXRoIEdpdCB2ZXJzaW9uIDIuMjIgKGFuZCBHaXQgZm9yIFdpbmRvd3MKK3ZlcnNpb24gMi4xOSkuIFRoaXMgb3B0aW9uIHNlcnZlcyBhcyBhbiBlc2NhcGUgaGF0Y2ggdG8gcmUtZW5hYmxlIHRoZQorbGVnYWN5IHZlcnNpb24gaW4gY2FzZSBhbnkgYnVncyBhcmUgZm91bmQgaW4gdGhlIHJld3JpdGUuIFRoaXMgb3B0aW9uIGFuZAordGhlIHNoZWxsIHNjcmlwdCB2ZXJzaW9uIG9mIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdIHdpbGwgYmUgcmVtb3ZlZCBpbiBzb21lCitmdXR1cmUgcmVsZWFzZS4KKysKK0lmIHlvdSBmaW5kIHNvbWUgcmVhc29uIHRvIHNldCB0aGlzIG9wdGlvbiB0byBgZmFsc2VgLCBvdGhlciB0aGFuCitvbmUtb2ZmIHRlc3RpbmcsIHlvdSBzaG91bGQgcmVwb3J0IHRoZSBiZWhhdmlvciBkaWZmZXJlbmNlIGFzIGEgYnVnIGluCitHaXQgKHNlZSBodHRwczovL2dpdC1zY20uY29tL2NvbW11bml0eSBmb3IgZGV0YWlscykuCisKK3N0YXNoLnNob3dQYXRjaDo6CisJSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGBnaXQgc3Rhc2ggc2hvd2AgY29tbWFuZCB3aXRob3V0IGFuCisJb3B0aW9uIHdpbGwgc2hvdyB0aGUgc3Rhc2ggZW50cnkgaW4gcGF0Y2ggZm9ybS4gIERlZmF1bHRzIHRvIGZhbHNlLgorCVNlZSBkZXNjcmlwdGlvbiBvZiAnc2hvdycgY29tbWFuZCBpbiBsaW5rZ2l0OmdpdC1zdGFzaFsxXS4KKworc3Rhc2guc2hvd1N0YXQ6OgorCUlmIHRoaXMgaXMgc2V0IHRvIHRydWUsIHRoZSBgZ2l0IHN0YXNoIHNob3dgIGNvbW1hbmQgd2l0aG91dCBhbgorCW9wdGlvbiB3aWxsIHNob3cgZGlmZnN0YXQgb2YgdGhlIHN0YXNoIGVudHJ5LiAgRGVmYXVsdHMgdG8gdHJ1ZS4KKwlTZWUgZGVzY3JpcHRpb24gb2YgJ3Nob3cnIGNvbW1hbmQgaW4gbGlua2dpdDpnaXQtc3Rhc2hbMV0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdGF0dXMudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3RhdHVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM3MDRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvc3RhdHVzLnR4dApAQCAtMCwwICsxLDc3IEBACitzdGF0dXMucmVsYXRpdmVQYXRoczo6CisJQnkgZGVmYXVsdCwgbGlua2dpdDpnaXQtc3RhdHVzWzFdIHNob3dzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZQorCWN1cnJlbnQgZGlyZWN0b3J5LiBTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYGZhbHNlYCBzaG93cyBwYXRocworCXJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QgKHRoaXMgd2FzIHRoZSBkZWZhdWx0IGZvciBHaXQKKwlwcmlvciB0byB2MS41LjQpLgorCitzdGF0dXMuc2hvcnQ6OgorCVNldCB0byB0cnVlIHRvIGVuYWJsZSAtLXNob3J0IGJ5IGRlZmF1bHQgaW4gbGlua2dpdDpnaXQtc3RhdHVzWzFdLgorCVRoZSBvcHRpb24gLS1uby1zaG9ydCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhpcyB2YXJpYWJsZS4KKworc3RhdHVzLmJyYW5jaDo6CisJU2V0IHRvIHRydWUgdG8gZW5hYmxlIC0tYnJhbmNoIGJ5IGRlZmF1bHQgaW4gbGlua2dpdDpnaXQtc3RhdHVzWzFdLgorCVRoZSBvcHRpb24gLS1uby1icmFuY2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFyaWFibGUuCisKK3N0YXR1cy5haGVhZEJlaGluZDo6CisJU2V0IHRvIHRydWUgdG8gZW5hYmxlIGAtLWFoZWFkLWJlaGluZGAgYW5kIGZhbHNlIHRvIGVuYWJsZQorCWAtLW5vLWFoZWFkLWJlaGluZGAgYnkgZGVmYXVsdCBpbiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gZm9yCisJbm9uLXBvcmNlbGFpbiBzdGF0dXMgZm9ybWF0cy4gIERlZmF1bHRzIHRvIHRydWUuCisKK3N0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeDo6CisJSWYgc2V0IHRvIHRydWUsIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSB3aWxsIGluc2VydCBhIGNvbW1lbnQKKwlwcmVmaXggYmVmb3JlIGVhY2ggb3V0cHV0IGxpbmUgKHN0YXJ0aW5nIHdpdGgKKwlgY29yZS5jb21tZW50Q2hhcmAsIGkuZS4gYCNgIGJ5IGRlZmF1bHQpLiBUaGlzIHdhcyB0aGUKKwliZWhhdmlvciBvZiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gaW4gR2l0IDEuOC40IGFuZCBwcmV2aW91cy4KKwlEZWZhdWx0cyB0byBmYWxzZS4KKworc3RhdHVzLnJlbmFtZUxpbWl0OjoKKwlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyByZW5hbWUgZGV0ZWN0aW9uCisJaW4gbGlua2dpdDpnaXQtc3RhdHVzWzFdIGFuZCBsaW5rZ2l0OmdpdC1jb21taXRbMV0uIERlZmF1bHRzIHRvCisJdGhlIHZhbHVlIG9mIGRpZmYucmVuYW1lTGltaXQuCisKK3N0YXR1cy5yZW5hbWVzOjoKKwlXaGV0aGVyIGFuZCBob3cgR2l0IGRldGVjdHMgcmVuYW1lcyBpbiBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gYW5kCisJbGlua2dpdDpnaXQtY29tbWl0WzFdIC4gIElmIHNldCB0byAiZmFsc2UiLCByZW5hbWUgZGV0ZWN0aW9uIGlzCisJZGlzYWJsZWQuIElmIHNldCB0byAidHJ1ZSIsIGJhc2ljIHJlbmFtZSBkZXRlY3Rpb24gaXMgZW5hYmxlZC4KKwlJZiBzZXQgdG8gImNvcGllcyIgb3IgImNvcHkiLCBHaXQgd2lsbCBkZXRlY3QgY29waWVzLCBhcyB3ZWxsLgorCURlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBkaWZmLnJlbmFtZXMuCisKK3N0YXR1cy5zaG93U3Rhc2g6OgorCUlmIHNldCB0byB0cnVlLCBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gd2lsbCBkaXNwbGF5IHRoZSBudW1iZXIgb2YKKwllbnRyaWVzIGN1cnJlbnRseSBzdGFzaGVkIGF3YXkuCisJRGVmYXVsdHMgdG8gZmFsc2UuCisKK3N0YXR1cy5zaG93VW50cmFja2VkRmlsZXM6OgorCUJ5IGRlZmF1bHQsIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgbGlua2dpdDpnaXQtY29tbWl0WzFdIHNob3cKKwlmaWxlcyB3aGljaCBhcmUgbm90IGN1cnJlbnRseSB0cmFja2VkIGJ5IEdpdC4gRGlyZWN0b3JpZXMgd2hpY2gKKwljb250YWluIG9ubHkgdW50cmFja2VkIGZpbGVzLCBhcmUgc2hvd24gd2l0aCB0aGUgZGlyZWN0b3J5IG5hbWUKKwlvbmx5LiBTaG93aW5nIHVudHJhY2tlZCBmaWxlcyBtZWFucyB0aGF0IEdpdCBuZWVkcyB0byBsc3RhdCgpIGFsbAorCXRoZSBmaWxlcyBpbiB0aGUgd2hvbGUgcmVwb3NpdG9yeSwgd2hpY2ggbWlnaHQgYmUgc2xvdyBvbiBzb21lCisJc3lzdGVtcy4gU28sIHRoaXMgdmFyaWFibGUgY29udHJvbHMgaG93IHRoZSBjb21tYW5kcyBkaXNwbGF5cworCXRoZSB1bnRyYWNrZWQgZmlsZXMuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisrCistLQorKiBgbm9gIC0gU2hvdyBubyB1bnRyYWNrZWQgZmlsZXMuCisqIGBub3JtYWxgIC0gU2hvdyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorKiBgYWxsYCAtIFNob3cgYWxzbyBpbmRpdmlkdWFsIGZpbGVzIGluIHVudHJhY2tlZCBkaXJlY3Rvcmllcy4KKy0tCisrCitJZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICdub3JtYWwnLgorVGhpcyB2YXJpYWJsZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtdXwtLXVudHJhY2tlZC1maWxlcyBvcHRpb24KK29mIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgbGlua2dpdDpnaXQtY29tbWl0WzFdLgorCitzdGF0dXMuc3VibW9kdWxlU3VtbWFyeTo6CisJRGVmYXVsdHMgdG8gZmFsc2UuCisJSWYgdGhpcyBpcyBzZXQgdG8gYSBub24gemVybyBudW1iZXIgb3IgdHJ1ZSAoaWRlbnRpY2FsIHRvIC0xIG9yIGFuCisJdW5saW1pdGVkIG51bWJlciksIHRoZSBzdWJtb2R1bGUgc3VtbWFyeSB3aWxsIGJlIGVuYWJsZWQgYW5kIGEKKwlzdW1tYXJ5IG9mIGNvbW1pdHMgZm9yIG1vZGlmaWVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaG93biAoc2VlCisJLS1zdW1tYXJ5LWxpbWl0IG9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0pLiBQbGVhc2Ugbm90ZQorCXRoYXQgdGhlIHN1bW1hcnkgb3V0cHV0IGNvbW1hbmQgd2lsbCBiZSBzdXBwcmVzc2VkIGZvciBhbGwKKwlzdWJtb2R1bGVzIHdoZW4gYGRpZmYuaWdub3JlU3VibW9kdWxlc2AgaXMgc2V0IHRvICdhbGwnIG9yIG9ubHkKKwlmb3IgdGhvc2Ugc3VibW9kdWxlcyB3aGVyZSBgc3VibW9kdWxlLjxuYW1lPi5pZ25vcmU9YWxsYC4gVGhlIG9ubHkKKwlleGNlcHRpb24gdG8gdGhhdCBydWxlIGlzIHRoYXQgc3RhdHVzIGFuZCBjb21taXQgd2lsbCBzaG93IHN0YWdlZAorCXN1Ym1vZHVsZSBjaGFuZ2VzLiBUbworCWFsc28gdmlldyB0aGUgc3VtbWFyeSBmb3IgaWdub3JlZCBzdWJtb2R1bGVzIHlvdSBjYW4gZWl0aGVyIHVzZQorCXRoZSAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IGNvbW1hbmQtbGluZSBvcHRpb24gb3IgdGhlICdnaXQKKwlzdWJtb2R1bGUgc3VtbWFyeScgY29tbWFuZCwgd2hpY2ggc2hvd3MgYSBzaW1pbGFyIG91dHB1dCBidXQgZG9lcworCW5vdCBob25vciB0aGVzZSBzZXR0aW5ncy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3N1Ym1vZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdWJtb2R1bGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzE3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdWJtb2R1bGUudHh0CkBAIC0wLDAgKzEsODQgQEAKK3N1Ym1vZHVsZS48bmFtZT4udXJsOjoKKwlUaGUgVVJMIGZvciBhIHN1Ym1vZHVsZS4gVGhpcyB2YXJpYWJsZSBpcyBjb3BpZWQgZnJvbSB0aGUgLmdpdG1vZHVsZXMKKwlmaWxlIHRvIHRoZSBnaXQgY29uZmlnIHZpYSAnZ2l0IHN1Ym1vZHVsZSBpbml0Jy4gVGhlIHVzZXIgY2FuIGNoYW5nZQorCXRoZSBjb25maWd1cmVkIFVSTCBiZWZvcmUgb2J0YWluaW5nIHRoZSBzdWJtb2R1bGUgdmlhICdnaXQgc3VibW9kdWxlCisJdXBkYXRlJy4gSWYgbmVpdGhlciBzdWJtb2R1bGUuPG5hbWU+LmFjdGl2ZSBvciBzdWJtb2R1bGUuYWN0aXZlIGFyZQorCXNldCwgdGhlIHByZXNlbmNlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBhcyBhIGZhbGxiYWNrIHRvIGluZGljYXRlCisJd2hldGhlciB0aGUgc3VibW9kdWxlIGlzIG9mIGludGVyZXN0IHRvIGdpdCBjb21tYW5kcy4KKwlTZWUgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGFuZCBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZm9yIGRldGFpbHMuCisKK3N1Ym1vZHVsZS48bmFtZT4udXBkYXRlOjoKKwlUaGUgbWV0aG9kIGJ5IHdoaWNoIGEgc3VibW9kdWxlIGlzIHVwZGF0ZWQgYnkgJ2dpdCBzdWJtb2R1bGUgdXBkYXRlJywKKwl3aGljaCBpcyB0aGUgb25seSBhZmZlY3RlZCBjb21tYW5kLCBvdGhlcnMgc3VjaCBhcworCSdnaXQgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMnIGFyZSB1bmFmZmVjdGVkLiBJdCBleGlzdHMgZm9yCisJaGlzdG9yaWNhbCByZWFzb25zLCB3aGVuICdnaXQgc3VibW9kdWxlJyB3YXMgdGhlIG9ubHkgY29tbWFuZCB0bworCWludGVyYWN0IHdpdGggc3VibW9kdWxlczsgc2V0dGluZ3MgbGlrZSBgc3VibW9kdWxlLmFjdGl2ZWAKKwlhbmQgYHB1bGwucmViYXNlYCBhcmUgbW9yZSBzcGVjaWZpYy4gSXQgaXMgcG9wdWxhdGVkIGJ5CisJYGdpdCBzdWJtb2R1bGUgaW5pdGAgZnJvbSB0aGUgbGlua2dpdDpnaXRtb2R1bGVzWzVdIGZpbGUuCisJU2VlIGRlc2NyaXB0aW9uIG9mICd1cGRhdGUnIGNvbW1hbmQgaW4gbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLgorCitzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaDo6CisJVGhlIHJlbW90ZSBicmFuY2ggbmFtZSBmb3IgYSBzdWJtb2R1bGUsIHVzZWQgYnkgYGdpdCBzdWJtb2R1bGUKKwl1cGRhdGUgLS1yZW1vdGVgLiAgU2V0IHRoaXMgb3B0aW9uIHRvIG92ZXJyaWRlIHRoZSB2YWx1ZSBmb3VuZCBpbgorCXRoZSBgLmdpdG1vZHVsZXNgIGZpbGUuICBTZWUgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGFuZAorCWxpbmtnaXQ6Z2l0bW9kdWxlc1s1XSBmb3IgZGV0YWlscy4KKworc3VibW9kdWxlLjxuYW1lPi5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiB0aGlzCisJc3VibW9kdWxlLiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUgLS1bbm8tXXJlY3Vyc2Utc3VibW9kdWxlcworCWNvbW1hbmQtbGluZSBvcHRpb24gdG8gImdpdCBmZXRjaCIgYW5kICJnaXQgcHVsbCIuCisJVGhpcyBzZXR0aW5nIHdpbGwgb3ZlcnJpZGUgdGhhdCBmcm9tIGluIHRoZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0KKwlmaWxlLgorCitzdWJtb2R1bGUuPG5hbWU+Lmlnbm9yZTo6CisJRGVmaW5lcyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgImdpdCBzdGF0dXMiIGFuZCB0aGUgZGlmZiBmYW1pbHkgc2hvdworCWEgc3VibW9kdWxlIGFzIG1vZGlmaWVkLiBXaGVuIHNldCB0byAiYWxsIiwgaXQgd2lsbCBuZXZlciBiZSBjb25zaWRlcmVkCisJbW9kaWZpZWQgKGJ1dCBpdCB3aWxsIG5vbmV0aGVsZXNzIHNob3cgdXAgaW4gdGhlIG91dHB1dCBvZiBzdGF0dXMgYW5kCisJY29tbWl0IHdoZW4gaXQgaGFzIGJlZW4gc3RhZ2VkKSwgImRpcnR5IiB3aWxsIGlnbm9yZSBhbGwgY2hhbmdlcworCXRvIHRoZSBzdWJtb2R1bGVzIHdvcmsgdHJlZSBhbmQKKwl0YWtlcyBvbmx5IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIEhFQUQgb2YgdGhlIHN1Ym1vZHVsZSBhbmQgdGhlIGNvbW1pdAorCXJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgaW50byBhY2NvdW50LiAidW50cmFja2VkIiB3aWxsIGFkZGl0aW9uYWxseQorCWxldCBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgdHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgc2hvdyB1cC4KKwlVc2luZyAibm9uZSIgKHRoZSBkZWZhdWx0IHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHNldCkgYWxzbyBzaG93cworCXN1Ym1vZHVsZXMgdGhhdCBoYXZlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgYXMgY2hhbmdlZC4KKwlUaGlzIHNldHRpbmcgb3ZlcnJpZGVzIGFueSBzZXR0aW5nIG1hZGUgaW4gLmdpdG1vZHVsZXMgZm9yIHRoaXMgc3VibW9kdWxlLAorCWJvdGggc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB1c2luZyB0aGUKKwkiLS1pZ25vcmUtc3VibW9kdWxlcyIgb3B0aW9uLiBUaGUgJ2dpdCBzdWJtb2R1bGUnIGNvbW1hbmRzIGFyZSBub3QKKwlhZmZlY3RlZCBieSB0aGlzIHNldHRpbmcuCisKK3N1Ym1vZHVsZS48bmFtZT4uYWN0aXZlOjoKKwlCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHN1Ym1vZHVsZSBpcyBvZiBpbnRlcmVzdCB0byBnaXQKKwljb21tYW5kcy4gIFRoaXMgY29uZmlnIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlCisJc3VibW9kdWxlLmFjdGl2ZSBjb25maWcgb3B0aW9uLiBTZWUgbGlua2dpdDpnaXRzdWJtb2R1bGVzWzddIGZvcgorCWRldGFpbHMuCisKK3N1Ym1vZHVsZS5hY3RpdmU6OgorCUEgcmVwZWF0ZWQgZmllbGQgd2hpY2ggY29udGFpbnMgYSBwYXRoc3BlYyB1c2VkIHRvIG1hdGNoIGFnYWluc3QgYQorCXN1Ym1vZHVsZSdzIHBhdGggdG8gZGV0ZXJtaW5lIGlmIHRoZSBzdWJtb2R1bGUgaXMgb2YgaW50ZXJlc3QgdG8gZ2l0CisJY29tbWFuZHMuIFNlZSBsaW5rZ2l0OmdpdHN1Ym1vZHVsZXNbN10gZm9yIGRldGFpbHMuCisKK3N1Ym1vZHVsZS5yZWN1cnNlOjoKKwlTcGVjaWZpZXMgaWYgY29tbWFuZHMgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgYnkgZGVmYXVsdC4gVGhpcworCWFwcGxpZXMgdG8gYWxsIGNvbW1hbmRzIHRoYXQgaGF2ZSBhIGAtLXJlY3Vyc2Utc3VibW9kdWxlc2Agb3B0aW9uLAorCWV4Y2VwdCBgY2xvbmVgLgorCURlZmF1bHRzIHRvIGZhbHNlLgorCitzdWJtb2R1bGUuZmV0Y2hKb2JzOjoKKwlTcGVjaWZpZXMgaG93IG1hbnkgc3VibW9kdWxlcyBhcmUgZmV0Y2hlZC9jbG9uZWQgYXQgdGhlIHNhbWUgdGltZS4KKwlBIHBvc2l0aXZlIGludGVnZXIgYWxsb3dzIHVwIHRvIHRoYXQgbnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZAorCWluIHBhcmFsbGVsLiBBIHZhbHVlIG9mIDAgd2lsbCBnaXZlIHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0LgorCUlmIHVuc2V0LCBpdCBkZWZhdWx0cyB0byAxLgorCitzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb246OgorCVNwZWNpZmllcyBob3cgdGhlIHN1Ym1vZHVsZXMgb2J0YWluIGFsdGVybmF0ZXMgd2hlbiBzdWJtb2R1bGVzIGFyZQorCWNsb25lZC4gUG9zc2libGUgdmFsdWVzIGFyZSBgbm9gLCBgc3VwZXJwcm9qZWN0YC4KKwlCeSBkZWZhdWx0IGBub2AgaXMgYXNzdW1lZCwgd2hpY2ggZG9lc24ndCBhZGQgcmVmZXJlbmNlcy4gV2hlbiB0aGUKKwl2YWx1ZSBpcyBzZXQgdG8gYHN1cGVycHJvamVjdGAgdGhlIHN1Ym1vZHVsZSB0byBiZSBjbG9uZWQgY29tcHV0ZXMKKwlpdHMgYWx0ZXJuYXRlcyBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgc3VwZXJwcm9qZWN0cyBhbHRlcm5hdGUuCisKK3N1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5OjoKKwlTcGVjaWZpZXMgaG93IHRvIHRyZWF0IGVycm9ycyB3aXRoIHRoZSBhbHRlcm5hdGVzIGZvciBhIHN1Ym1vZHVsZQorCWFzIGNvbXB1dGVkIHZpYSBgc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uYC4gUG9zc2libGUgdmFsdWVzIGFyZQorCWBpZ25vcmVgLCBgaW5mb2AsIGBkaWVgLiBEZWZhdWx0IGlzIGBkaWVgLiBOb3RlIHRoYXQgaWYgc2V0IHRvIGBpZ25vcmVgCisJb3IgYGluZm9gLCBhbmQgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd2l0aCB0aGUgY29tcHV0ZWQgYWx0ZXJuYXRlLCB0aGUKKwljbG9uZSBwcm9jZWVkcyBhcyBpZiBubyBhbHRlcm5hdGUgd2FzIHNwZWNpZmllZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3RhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOTExMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YWcudHh0CkBAIC0wLDAgKzEsMjQgQEAKK3RhZy5mb3JjZVNpZ25Bbm5vdGF0ZWQ6OgorCUEgYm9vbGVhbiB0byBzcGVjaWZ5IHdoZXRoZXIgYW5ub3RhdGVkIHRhZ3MgY3JlYXRlZCBzaG91bGQgYmUgR1BHIHNpZ25lZC4KKwlJZiBgLS1hbm5vdGF0ZWAgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0IHRha2VzCisJcHJlY2VkZW5jZSBvdmVyIHRoaXMgb3B0aW9uLgorCit0YWcuc29ydDo6CisJVGhpcyB2YXJpYWJsZSBjb250cm9scyB0aGUgc29ydCBvcmRlcmluZyBvZiB0YWdzIHdoZW4gZGlzcGxheWVkIGJ5CisJbGlua2dpdDpnaXQtdGFnWzFdLiBXaXRob3V0IHRoZSAiLS1zb3J0PTx2YWx1ZT4iIG9wdGlvbiBwcm92aWRlZCwgdGhlCisJdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQuCisKK3RhZy5ncGdTaWduOjoKKwlBIGJvb2xlYW4gdG8gc3BlY2lmeSB3aGV0aGVyIGFsbCB0YWdzIHNob3VsZCBiZSBHUEcgc2lnbmVkLgorCVVzZSBvZiB0aGlzIG9wdGlvbiB3aGVuIHJ1bm5pbmcgaW4gYW4gYXV0b21hdGVkIHNjcmlwdCBjYW4KKwlyZXN1bHQgaW4gYSBsYXJnZSBudW1iZXIgb2YgdGFncyBiZWluZyBzaWduZWQuIEl0IGlzIHRoZXJlZm9yZQorCWNvbnZlbmllbnQgdG8gdXNlIGFuIGFnZW50IHRvIGF2b2lkIHR5cGluZyB5b3VyIGdwZyBwYXNzcGhyYXNlCisJc2V2ZXJhbCB0aW1lcy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGRvZXNuJ3QgYWZmZWN0IHRhZyBzaWduaW5nCisJYmVoYXZpb3IgZW5hYmxlZCBieSAiLXUgPGtleWlkPiIgb3IgIi0tbG9jYWwtdXNlcj08a2V5aWQ+IiBvcHRpb25zLgorCit0YXIudW1hc2s6OgorCVRoaXMgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHBlcm1pc3Npb24gYml0cyBvZgorCXRhciBhcmNoaXZlIGVudHJpZXMuICBUaGUgZGVmYXVsdCBpcyAwMDAyLCB3aGljaCB0dXJucyBvZmYgdGhlCisJd29ybGQgd3JpdGUgYml0LiAgVGhlIHNwZWNpYWwgdmFsdWUgInVzZXIiIGluZGljYXRlcyB0aGF0IHRoZQorCWFyY2hpdmluZyB1c2VyJ3MgdW1hc2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuICBTZWUgdW1hc2soMikgYW5kCisJbGlua2dpdDpnaXQtYXJjaGl2ZVsxXS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3RyYWNlMi50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90cmFjZTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZTBiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90cmFjZTIudHh0CkBAIC0wLDAgKzEsNjIgQEAKK1RyYWNlMiBjb25maWcgc2V0dGluZ3MgYXJlIG9ubHkgcmVhZCBmcm9tIHRoZSBzeXN0ZW0gYW5kIGdsb2JhbAorY29uZmlnIGZpbGVzOyByZXBvc2l0b3J5IGxvY2FsIGFuZCB3b3JrdHJlZSBjb25maWcgZmlsZXMgYW5kIGAtY2AKK2NvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIG5vdCByZXNwZWN0ZWQuCisKK3RyYWNlMi5ub3JtYWxUYXJnZXQ6OgorCVRoaXMgdmFyaWFibGUgY29udHJvbHMgdGhlIG5vcm1hbCB0YXJnZXQgZGVzdGluYXRpb24uCisJSXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBHSVRfVFJBQ0UyYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwlUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHBvc3NpYmxlIHZhbHVlcy4KKwordHJhY2UyLnBlcmZUYXJnZXQ6OgorCVRoaXMgdmFyaWFibGUgY29udHJvbHMgdGhlIHBlcmZvcm1hbmNlIHRhcmdldCBkZXN0aW5hdGlvbi4KKwlJdCBtYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9UUkFDRTJfUEVSRmAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyBwb3NzaWJsZSB2YWx1ZXMuCisKK3RyYWNlMi5ldmVudFRhcmdldDo6CisJVGhpcyB2YXJpYWJsZSBjb250cm9scyB0aGUgZXZlbnQgdGFyZ2V0IGRlc3RpbmF0aW9uLgorCUl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1RSQUNFMl9FVkVOVGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyBwb3NzaWJsZSB2YWx1ZXMuCisrCitpbmNsdWRlOjouLi90cmFjZTItdGFyZ2V0LXZhbHVlcy50eHRbXQorCit0cmFjZTIubm9ybWFsQnJpZWY6OgorCUJvb2xlYW4uICBXaGVuIHRydWUgYHRpbWVgLCBgZmlsZW5hbWVgLCBhbmQgYGxpbmVgIGZpZWxkcyBhcmUKKwlvbWl0dGVkIGZyb20gbm9ybWFsIG91dHB1dC4gIE1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZQorCWBHSVRfVFJBQ0UyX0JSSUVGYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIERlZmF1bHRzIHRvIGZhbHNlLgorCit0cmFjZTIucGVyZkJyaWVmOjoKKwlCb29sZWFuLiAgV2hlbiB0cnVlIGB0aW1lYCwgYGZpbGVuYW1lYCwgYW5kIGBsaW5lYCBmaWVsZHMgYXJlCisJb21pdHRlZCBmcm9tIFBFUkYgb3V0cHV0LiAgTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlCisJYEdJVF9UUkFDRTJfUEVSRl9CUklFRmAgZW52aXJvbm1lbnQgdmFyaWFibGUuICBEZWZhdWx0cyB0byBmYWxzZS4KKwordHJhY2UyLmV2ZW50QnJpZWY6OgorCUJvb2xlYW4uICBXaGVuIHRydWUgYHRpbWVgLCBgZmlsZW5hbWVgLCBhbmQgYGxpbmVgIGZpZWxkcyBhcmUKKwlvbWl0dGVkIGZyb20gZXZlbnQgb3V0cHV0LiAgTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlCisJYEdJVF9UUkFDRTJfRVZFTlRfQlJJRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLiAgRGVmYXVsdHMgdG8gZmFsc2UuCisKK3RyYWNlMi5ldmVudE5lc3Rpbmc6OgorCUludGVnZXIuICBTcGVjaWZpZXMgZGVzaXJlZCBkZXB0aCBvZiBuZXN0ZWQgcmVnaW9ucyBpbiB0aGUKKwlldmVudCBvdXRwdXQuICBSZWdpb25zIGRlZXBlciB0aGFuIHRoaXMgdmFsdWUgd2lsbCBiZQorCW9taXR0ZWQuICBNYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9UUkFDRTJfRVZFTlRfTkVTVElOR2AKKwllbnZpcm9ubWVudCB2YXJpYWJsZS4gIERlZmF1bHRzIHRvIDIuCisKK3RyYWNlMi5jb25maWdQYXJhbXM6OgorCUEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMgb2YgImltcG9ydGFudCIgY29uZmlnCisJc2V0dGluZ3MgdGhhdCBzaG91bGQgYmUgcmVjb3JkZWQgaW4gdGhlIHRyYWNlMiBvdXRwdXQuCisJRm9yIGV4YW1wbGUsIGBjb3JlLioscmVtb3RlLioudXJsYCB3b3VsZCBjYXVzZSB0aGUgdHJhY2UyCisJb3V0cHV0IHRvIGNvbnRhaW4gZXZlbnRzIGxpc3RpbmcgZWFjaCBjb25maWd1cmVkIHJlbW90ZS4KKwlNYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgYEdJVF9UUkFDRTJfQ09ORklHX1BBUkFNU2AgZW52aXJvbm1lbnQKKwl2YXJpYWJsZS4gIFVuc2V0IGJ5IGRlZmF1bHQuCisKK3RyYWNlMi5kZXN0aW5hdGlvbkRlYnVnOjoKKwlCb29sZWFuLiAgV2hlbiB0cnVlIEdpdCB3aWxsIHByaW50IGVycm9yIG1lc3NhZ2VzIHdoZW4gYQorCXRyYWNlIHRhcmdldCBkZXN0aW5hdGlvbiBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLgorCUJ5IGRlZmF1bHQsIHRoZXNlIGVycm9ycyBhcmUgc3VwcHJlc3NlZCBhbmQgdHJhY2luZyBpcworCXNpbGVudGx5IGRpc2FibGVkLiAgTWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlCisJYEdJVF9UUkFDRTJfRFNUX0RFQlVHYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwordHJhY2UyLm1heEZpbGVzOjoKKwlJbnRlZ2VyLiAgV2hlbiB3cml0aW5nIHRyYWNlIGZpbGVzIHRvIGEgdGFyZ2V0IGRpcmVjdG9yeSwgZG8gbm90CisJd3JpdGUgYWRkaXRpb25hbCB0cmFjZXMgaWYgd2Ugd291bGQgZXhjZWVkIHRoaXMgbWFueSBmaWxlcy4gSW5zdGVhZCwKKwl3cml0ZSBhIHNlbnRpbmVsIGZpbGUgdGhhdCB3aWxsIGJsb2NrIGZ1cnRoZXIgdHJhY2luZyB0byB0aGlzCisJZGlyZWN0b3J5LiBEZWZhdWx0cyB0byAwLCB3aGljaCBkaXNhYmxlcyB0aGlzIGNoZWNrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdHJhbnNmZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdHJhbnNmZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjYyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy90cmFuc2Zlci50eHQKQEAgLTAsMCArMSw3MSBAQAordHJhbnNmZXIuZnNja09iamVjdHM6OgorCVdoZW4gYGZldGNoLmZzY2tPYmplY3RzYCBvciBgcmVjZWl2ZS5mc2NrT2JqZWN0c2AgYXJlCisJbm90IHNldCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbnN0ZWFkLgorCURlZmF1bHRzIHRvIGZhbHNlLgorKworV2hlbiBzZXQsIHRoZSBmZXRjaCBvciByZWNlaXZlIHdpbGwgYWJvcnQgaW4gdGhlIGNhc2Ugb2YgYSBtYWxmb3JtZWQKK29iamVjdCBvciBhIGxpbmsgdG8gYSBub25leGlzdGVudCBvYmplY3QuIEluIGFkZGl0aW9uLCB2YXJpb3VzIG90aGVyCitpc3N1ZXMgYXJlIGNoZWNrZWQgZm9yLCBpbmNsdWRpbmcgbGVnYWN5IGlzc3VlcyAoc2VlIGBmc2NrLjxtc2ctaWQ+YCksCithbmQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlcyBsaWtlIHRoZSBleGlzdGVuY2Ugb2YgYSBgLkdJVGAgZGlyZWN0b3J5CitvciBhIG1hbGljaW91cyBgLmdpdG1vZHVsZXNgIGZpbGUgKHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdjIuMi4xCithbmQgdjIuMTcuMSBmb3IgZGV0YWlscykuIE90aGVyIHNhbml0eSBhbmQgc2VjdXJpdHkgY2hlY2tzIG1heSBiZQorYWRkZWQgaW4gZnV0dXJlIHJlbGVhc2VzLgorKworT24gdGhlIHJlY2VpdmluZyBzaWRlLCBmYWlsaW5nIGZzY2tPYmplY3RzIHdpbGwgbWFrZSB0aG9zZSBvYmplY3RzCit1bnJlYWNoYWJsZSwgc2VlICJRVUFSQU5USU5FIEVOVklST05NRU5UIiBpbgorbGlua2dpdDpnaXQtcmVjZWl2ZS1wYWNrWzFdLiBPbiB0aGUgZmV0Y2ggc2lkZSwgbWFsZm9ybWVkIG9iamVjdHMgd2lsbAoraW5zdGVhZCBiZSBsZWZ0IHVucmVmZXJlbmNlZCBpbiB0aGUgcmVwb3NpdG9yeS4KKysKK0R1ZSB0byB0aGUgbm9uLXF1YXJhbnRpbmUgbmF0dXJlIG9mIHRoZSBgZmV0Y2guZnNja09iamVjdHNgCitpbXBsZW1lbnRhdGlvbiBpdCBjYW5ub3QgYmUgcmVsaWVkIHVwb24gdG8gbGVhdmUgdGhlIG9iamVjdCBzdG9yZQorY2xlYW4gbGlrZSBgcmVjZWl2ZS5mc2NrT2JqZWN0c2AgY2FuLgorKworQXMgb2JqZWN0cyBhcmUgdW5wYWNrZWQgdGhleSdyZSB3cml0dGVuIHRvIHRoZSBvYmplY3Qgc3RvcmUsIHNvIHRoZXJlCitjYW4gYmUgY2FzZXMgd2hlcmUgbWFsaWNpb3VzIG9iamVjdHMgZ2V0IGludHJvZHVjZWQgZXZlbiB0aG91Z2ggdGhlCisiZmV0Y2giIGZhaWxlZCwgb25seSB0byBoYXZlIGEgc3Vic2VxdWVudCAiZmV0Y2giIHN1Y2NlZWQgYmVjYXVzZSBvbmx5CituZXcgaW5jb21pbmcgb2JqZWN0cyBhcmUgY2hlY2tlZCwgbm90IHRob3NlIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4KK3dyaXR0ZW4gdG8gdGhlIG9iamVjdCBzdG9yZS4gVGhhdCBkaWZmZXJlbmNlIGluIGJlaGF2aW9yIHNob3VsZCBub3QgYmUKK3JlbGllZCB1cG9uLiBJbiB0aGUgZnV0dXJlLCBzdWNoIG9iamVjdHMgbWF5IGJlIHF1YXJhbnRpbmVkIGZvcgorImZldGNoIiBhcyB3ZWxsLgorKworRm9yIG5vdywgdGhlIHBhcmFub2lkIG5lZWQgdG8gZmluZCBzb21lIHdheSB0byBlbXVsYXRlIHRoZSBxdWFyYW50aW5lCitlbnZpcm9ubWVudCBpZiB0aGV5J2QgbGlrZSB0aGUgc2FtZSBwcm90ZWN0aW9uIGFzICJwdXNoIi4gRS5nLiBpbiB0aGUKK2Nhc2Ugb2YgYW4gaW50ZXJuYWwgbWlycm9yIGRvIHRoZSBtaXJyb3JpbmcgaW4gdHdvIHN0ZXBzLCBvbmUgdG8gZmV0Y2gKK3RoZSB1bnRydXN0ZWQgb2JqZWN0cywgYW5kIHRoZW4gZG8gYSBzZWNvbmQgInB1c2giICh3aGljaCB3aWxsIHVzZSB0aGUKK3F1YXJhbnRpbmUpIHRvIGFub3RoZXIgaW50ZXJuYWwgcmVwbywgYW5kIGhhdmUgaW50ZXJuYWwgY2xpZW50cworY29uc3VtZSB0aGlzIHB1c2hlZC10byByZXBvc2l0b3J5LCBvciBlbWJhcmdvIGludGVybmFsIGZldGNoZXMgYW5kCitvbmx5IGFsbG93IHRoZW0gb25jZSBhIGZ1bGwgImZzY2siIGhhcyBydW4gKGFuZCBubyBuZXcgZmV0Y2hlcyBoYXZlCitoYXBwZW5lZCBpbiB0aGUgbWVhbnRpbWUpLgorCit0cmFuc2Zlci5oaWRlUmVmczo6CisJU3RyaW5nKHMpIGByZWNlaXZlLXBhY2tgIGFuZCBgdXBsb2FkLXBhY2tgIHVzZSB0byBkZWNpZGUgd2hpY2gKKwlyZWZzIHRvIG9taXQgZnJvbSB0aGVpciBpbml0aWFsIGFkdmVydGlzZW1lbnRzLiAgVXNlIG1vcmUgdGhhbgorCW9uZSBkZWZpbml0aW9uIHRvIHNwZWNpZnkgbXVsdGlwbGUgcHJlZml4IHN0cmluZ3MuIEEgcmVmIHRoYXQgaXMKKwl1bmRlciB0aGUgaGllcmFyY2hpZXMgbGlzdGVkIGluIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzCisJZXhjbHVkZWQsIGFuZCBpcyBoaWRkZW4gd2hlbiByZXNwb25kaW5nIHRvIGBnaXQgcHVzaGAgb3IgYGdpdAorCWZldGNoYC4gIFNlZSBgcmVjZWl2ZS5oaWRlUmVmc2AgYW5kIGB1cGxvYWRwYWNrLmhpZGVSZWZzYCBmb3IKKwlwcm9ncmFtLXNwZWNpZmljIHZlcnNpb25zIG9mIHRoaXMgY29uZmlnLgorKworWW91IG1heSBhbHNvIGluY2x1ZGUgYSBgIWAgaW4gZnJvbnQgb2YgdGhlIHJlZiBuYW1lIHRvIG5lZ2F0ZSB0aGUgZW50cnksCitleHBsaWNpdGx5IGV4cG9zaW5nIGl0LCBldmVuIGlmIGFuIGVhcmxpZXIgZW50cnkgbWFya2VkIGl0IGFzIGhpZGRlbi4KK0lmIHlvdSBoYXZlIG11bHRpcGxlIGhpZGVSZWZzIHZhbHVlcywgbGF0ZXIgZW50cmllcyBvdmVycmlkZSBlYXJsaWVyIG9uZXMKKyhhbmQgZW50cmllcyBpbiBtb3JlLXNwZWNpZmljIGNvbmZpZyBmaWxlcyBvdmVycmlkZSBsZXNzLXNwZWNpZmljIG9uZXMpLgorKworSWYgYSBuYW1lc3BhY2UgaXMgaW4gdXNlLCB0aGUgbmFtZXNwYWNlIHByZWZpeCBpcyBzdHJpcHBlZCBmcm9tIGVhY2gKK3JlZmVyZW5jZSBiZWZvcmUgaXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IGB0cmFuc2Zlci5oaWRlcmVmc2AgcGF0dGVybnMuCitGb3IgZXhhbXBsZSwgaWYgYHJlZnMvaGVhZHMvbWFzdGVyYCBpcyBzcGVjaWZpZWQgaW4gYHRyYW5zZmVyLmhpZGVSZWZzYCBhbmQKK3RoZSBjdXJyZW50IG5hbWVzcGFjZSBpcyBgZm9vYCwgdGhlbiBgcmVmcy9uYW1lc3BhY2VzL2Zvby9yZWZzL2hlYWRzL21hc3RlcmAKK2lzIG9taXR0ZWQgZnJvbSB0aGUgYWR2ZXJ0aXNlbWVudHMgYnV0IGByZWZzL2hlYWRzL21hc3RlcmAgYW5kCitgcmVmcy9uYW1lc3BhY2VzL2Jhci9yZWZzL2hlYWRzL21hc3RlcmAgYXJlIHN0aWxsIGFkdmVydGlzZWQgYXMgc28tY2FsbGVkCisiaGF2ZSIgbGluZXMuIEluIG9yZGVyIHRvIG1hdGNoIHJlZnMgYmVmb3JlIHN0cmlwcGluZywgYWRkIGEgYF5gIGluIGZyb250IG9mCit0aGUgcmVmIG5hbWUuIElmIHlvdSBjb21iaW5lIGAhYCBhbmQgYF5gLCBgIWAgbXVzdCBiZSBzcGVjaWZpZWQgZmlyc3QuCisrCitFdmVuIGlmIHlvdSBoaWRlIHJlZnMsIGEgY2xpZW50IG1heSBzdGlsbCBiZSBhYmxlIHRvIHN0ZWFsIHRoZSB0YXJnZXQKK29iamVjdHMgdmlhIHRoZSB0ZWNobmlxdWVzIGRlc2NyaWJlZCBpbiB0aGUgIlNFQ1VSSVRZIiBzZWN0aW9uIG9mIHRoZQorbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddIG1hbiBwYWdlOyBpdCdzIGJlc3QgdG8ga2VlcCBwcml2YXRlIGRhdGEgaW4gYQorc2VwYXJhdGUgcmVwb3NpdG9yeS4KKwordHJhbnNmZXIudW5wYWNrTGltaXQ6OgorCVdoZW4gYGZldGNoLnVucGFja0xpbWl0YCBvciBgcmVjZWl2ZS51bnBhY2tMaW1pdGAgYXJlCisJbm90IHNldCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbnN0ZWFkLgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3VwbG9hZGFyY2hpdmUudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdXBsb2FkYXJjaGl2ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2OThlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3VwbG9hZGFyY2hpdmUudHh0CkBAIC0wLDAgKzEsNiBAQAordXBsb2FkYXJjaGl2ZS5hbGxvd1VucmVhY2hhYmxlOjoKKwlJZiB0cnVlLCBhbGxvdyBjbGllbnRzIHRvIHVzZSBgZ2l0IGFyY2hpdmUgLS1yZW1vdGVgIHRvIHJlcXVlc3QKKwlhbnkgdHJlZSwgd2hldGhlciByZWFjaGFibGUgZnJvbSB0aGUgcmVmIHRpcHMgb3Igbm90LiBTZWUgdGhlCisJZGlzY3Vzc2lvbiBpbiB0aGUgIlNFQ1VSSVRZIiBzZWN0aW9uIG9mCisJbGlua2dpdDpnaXQtdXBsb2FkLWFyY2hpdmVbMV0gZm9yIG1vcmUgZGV0YWlscy4gRGVmYXVsdHMgdG8KKwlgZmFsc2VgLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdXBsb2FkcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy91cGxvYWRwYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDFjODM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdXBsb2FkcGFjay50eHQKQEAgLTAsMCArMSw2NSBAQAordXBsb2FkcGFjay5oaWRlUmVmczo6CisJVGhpcyB2YXJpYWJsZSBpcyB0aGUgc2FtZSBhcyBgdHJhbnNmZXIuaGlkZVJlZnNgLCBidXQgYXBwbGllcworCW9ubHkgdG8gYHVwbG9hZC1wYWNrYCAoYW5kIHNvIGFmZmVjdHMgb25seSBmZXRjaGVzLCBub3QgcHVzaGVzKS4KKwlBbiBhdHRlbXB0IHRvIGZldGNoIGEgaGlkZGVuIHJlZiBieSBgZ2l0IGZldGNoYCB3aWxsIGZhaWwuICBTZWUKKwlhbHNvIGB1cGxvYWRwYWNrLmFsbG93VGlwU0hBMUluV2FudGAuCisKK3VwbG9hZHBhY2suYWxsb3dUaXBTSEExSW5XYW50OjoKKwlXaGVuIGB1cGxvYWRwYWNrLmhpZGVSZWZzYCBpcyBpbiBlZmZlY3QsIGFsbG93IGB1cGxvYWQtcGFja2AKKwl0byBhY2NlcHQgYSBmZXRjaCByZXF1ZXN0IHRoYXQgYXNrcyBmb3IgYW4gb2JqZWN0IGF0IHRoZSB0aXAKKwlvZiBhIGhpZGRlbiByZWYgKGJ5IGRlZmF1bHQsIHN1Y2ggYSByZXF1ZXN0IGlzIHJlamVjdGVkKS4KKwlTZWUgYWxzbyBgdXBsb2FkcGFjay5oaWRlUmVmc2AuICBFdmVuIGlmIHRoaXMgaXMgZmFsc2UsIGEgY2xpZW50CisJbWF5IGJlIGFibGUgdG8gc3RlYWwgb2JqZWN0cyB2aWEgdGhlIHRlY2huaXF1ZXMgZGVzY3JpYmVkIGluIHRoZQorCSJTRUNVUklUWSIgc2VjdGlvbiBvZiB0aGUgbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddIG1hbiBwYWdlOyBpdCdzCisJYmVzdCB0byBrZWVwIHByaXZhdGUgZGF0YSBpbiBhIHNlcGFyYXRlIHJlcG9zaXRvcnkuCisKK3VwbG9hZHBhY2suYWxsb3dSZWFjaGFibGVTSEExSW5XYW50OjoKKwlBbGxvdyBgdXBsb2FkLXBhY2tgIHRvIGFjY2VwdCBhIGZldGNoIHJlcXVlc3QgdGhhdCBhc2tzIGZvciBhbgorCW9iamVjdCB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGFueSByZWYgdGlwLiBIb3dldmVyLCBub3RlIHRoYXQKKwljYWxjdWxhdGluZyBvYmplY3QgcmVhY2hhYmlsaXR5IGlzIGNvbXB1dGF0aW9uYWxseSBleHBlbnNpdmUuCisJRGVmYXVsdHMgdG8gYGZhbHNlYC4gIEV2ZW4gaWYgdGhpcyBpcyBmYWxzZSwgYSBjbGllbnQgbWF5IGJlIGFibGUKKwl0byBzdGVhbCBvYmplY3RzIHZpYSB0aGUgdGVjaG5pcXVlcyBkZXNjcmliZWQgaW4gdGhlICJTRUNVUklUWSIKKwlzZWN0aW9uIG9mIHRoZSBsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10gbWFuIHBhZ2U7IGl0J3MgYmVzdCB0bworCWtlZXAgcHJpdmF0ZSBkYXRhIGluIGEgc2VwYXJhdGUgcmVwb3NpdG9yeS4KKwordXBsb2FkcGFjay5hbGxvd0FueVNIQTFJbldhbnQ6OgorCUFsbG93IGB1cGxvYWQtcGFja2AgdG8gYWNjZXB0IGEgZmV0Y2ggcmVxdWVzdCB0aGF0IGFza3MgZm9yIGFueQorCW9iamVjdCBhdCBhbGwuCisJRGVmYXVsdHMgdG8gYGZhbHNlYC4KKwordXBsb2FkcGFjay5rZWVwQWxpdmU6OgorCVdoZW4gYHVwbG9hZC1wYWNrYCBoYXMgc3RhcnRlZCBgcGFjay1vYmplY3RzYCwgdGhlcmUgbWF5IGJlIGEKKwlxdWlldCBwZXJpb2Qgd2hpbGUgYHBhY2stb2JqZWN0c2AgcHJlcGFyZXMgdGhlIHBhY2suIE5vcm1hbGx5CisJaXQgd291bGQgb3V0cHV0IHByb2dyZXNzIGluZm9ybWF0aW9uLCBidXQgaWYgYC0tcXVpZXRgIHdhcyB1c2VkCisJZm9yIHRoZSBmZXRjaCwgYHBhY2stb2JqZWN0c2Agd2lsbCBvdXRwdXQgbm90aGluZyBhdCBhbGwgdW50aWwKKwl0aGUgcGFjayBkYXRhIGJlZ2lucy4gU29tZSBjbGllbnRzIGFuZCBuZXR3b3JrcyBtYXkgY29uc2lkZXIKKwl0aGUgc2VydmVyIHRvIGJlIGh1bmcgYW5kIGdpdmUgdXAuIFNldHRpbmcgdGhpcyBvcHRpb24gaW5zdHJ1Y3RzCisJYHVwbG9hZC1wYWNrYCB0byBzZW5kIGFuIGVtcHR5IGtlZXBhbGl2ZSBwYWNrZXQgZXZlcnkKKwlgdXBsb2FkcGFjay5rZWVwQWxpdmVgIHNlY29uZHMuIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gMAorCWRpc2FibGVzIGtlZXBhbGl2ZSBwYWNrZXRzIGVudGlyZWx5LiBUaGUgZGVmYXVsdCBpcyA1IHNlY29uZHMuCisKK3VwbG9hZHBhY2sucGFja09iamVjdHNIb29rOjoKKwlJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHdoZW4gYHVwbG9hZC1wYWNrYCB3b3VsZCBydW4KKwlgZ2l0IHBhY2stb2JqZWN0c2AgdG8gY3JlYXRlIGEgcGFja2ZpbGUgZm9yIGEgY2xpZW50LCBpdCB3aWxsCisJcnVuIHRoaXMgc2hlbGwgY29tbWFuZCBpbnN0ZWFkLiAgVGhlIGBwYWNrLW9iamVjdHNgIGNvbW1hbmQgYW5kCisJYXJndW1lbnRzIGl0IF93b3VsZF8gaGF2ZSBydW4gKGluY2x1ZGluZyB0aGUgYGdpdCBwYWNrLW9iamVjdHNgCisJYXQgdGhlIGJlZ2lubmluZykgYXJlIGFwcGVuZGVkIHRvIHRoZSBzaGVsbCBjb21tYW5kLiBUaGUgc3RkaW4KKwlhbmQgc3Rkb3V0IG9mIHRoZSBob29rIGFyZSB0cmVhdGVkIGFzIGlmIGBwYWNrLW9iamVjdHNgIGl0c2VsZgorCXdhcyBydW4uIEkuZS4sIGB1cGxvYWQtcGFja2Agd2lsbCBmZWVkIGlucHV0IGludGVuZGVkIGZvcgorCWBwYWNrLW9iamVjdHNgIHRvIHRoZSBob29rLCBhbmQgZXhwZWN0cyBhIGNvbXBsZXRlZCBwYWNrZmlsZSBvbgorCXN0ZG91dC4KKysKK05vdGUgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgaWdub3JlZCBpZiBpdCBpcyBzZWVuIGluIHRoZQorcmVwb3NpdG9yeS1sZXZlbCBjb25maWcgKHRoaXMgaXMgYSBzYWZldHkgbWVhc3VyZSBhZ2FpbnN0IGZldGNoaW5nIGZyb20KK3VudHJ1c3RlZCByZXBvc2l0b3JpZXMpLgorCit1cGxvYWRwYWNrLmFsbG93RmlsdGVyOjoKKwlJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGB1cGxvYWQtcGFja2Agd2lsbCBzdXBwb3J0IHBhcnRpYWwKKwljbG9uZSBhbmQgcGFydGlhbCBmZXRjaCBvYmplY3QgZmlsdGVyaW5nLgorCit1cGxvYWRwYWNrLmFsbG93UmVmSW5XYW50OjoKKwlJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGB1cGxvYWQtcGFja2Agd2lsbCBzdXBwb3J0IHRoZSBgcmVmLWluLXdhbnRgCisJZmVhdHVyZSBvZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiAyIGBmZXRjaGAgY29tbWFuZC4gIFRoaXMgZmVhdHVyZQorCWlzIGludGVuZGVkIGZvciB0aGUgYmVuZWZpdCBvZiBsb2FkLWJhbGFuY2VkIHNlcnZlcnMgd2hpY2ggbWF5CisJbm90IGhhdmUgdGhlIHNhbWUgdmlldyBvZiB3aGF0IE9JRHMgdGhlaXIgcmVmcyBwb2ludCB0byBkdWUgdG8KKwlyZXBsaWNhdGlvbiBkZWxheS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3VybC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy91cmwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NTY2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy91cmwudHh0CkBAIC0wLDAgKzEsMzAgQEAKK3VybC48YmFzZT4uaW5zdGVhZE9mOjoKKwlBbnkgVVJMIHRoYXQgc3RhcnRzIHdpdGggdGhpcyB2YWx1ZSB3aWxsIGJlIHJld3JpdHRlbiB0bworCXN0YXJ0LCBpbnN0ZWFkLCB3aXRoIDxiYXNlPi4gSW4gY2FzZXMgd2hlcmUgc29tZSBzaXRlIHNlcnZlcyBhCisJbGFyZ2UgbnVtYmVyIG9mIHJlcG9zaXRvcmllcywgYW5kIHNlcnZlcyB0aGVtIHdpdGggbXVsdGlwbGUKKwlhY2Nlc3MgbWV0aG9kcywgYW5kIHNvbWUgdXNlcnMgbmVlZCB0byB1c2UgZGlmZmVyZW50IGFjY2VzcworCW1ldGhvZHMsIHRoaXMgZmVhdHVyZSBhbGxvd3MgcGVvcGxlIHRvIHNwZWNpZnkgYW55IG9mIHRoZQorCWVxdWl2YWxlbnQgVVJMcyBhbmQgaGF2ZSBHaXQgYXV0b21hdGljYWxseSByZXdyaXRlIHRoZSBVUkwgdG8KKwl0aGUgYmVzdCBhbHRlcm5hdGl2ZSBmb3IgdGhlIHBhcnRpY3VsYXIgdXNlciwgZXZlbiBmb3IgYQorCW5ldmVyLWJlZm9yZS1zZWVuIHJlcG9zaXRvcnkgb24gdGhlIHNpdGUuICBXaGVuIG1vcmUgdGhhbiBvbmUKKwlpbnN0ZWFkT2Ygc3RyaW5ncyBtYXRjaCBhIGdpdmVuIFVSTCwgdGhlIGxvbmdlc3QgbWF0Y2ggaXMgdXNlZC4KKysKK05vdGUgdGhhdCBhbnkgcHJvdG9jb2wgcmVzdHJpY3Rpb25zIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmV3cml0dGVuCitVUkwuIElmIHRoZSByZXdyaXRlIGNoYW5nZXMgdGhlIFVSTCB0byB1c2UgYSBjdXN0b20gcHJvdG9jb2wgb3IgcmVtb3RlCitoZWxwZXIsIHlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlIGBwcm90b2NvbC4qLmFsbG93YCBjb25maWcgdG8gcGVybWl0Cit0aGUgcmVxdWVzdC4gIEluIHBhcnRpY3VsYXIsIHByb3RvY29scyB5b3UgZXhwZWN0IHRvIHVzZSBmb3Igc3VibW9kdWxlcworbXVzdCBiZSBzZXQgdG8gYGFsd2F5c2AgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgb2YgYHVzZXJgLiBTZWUgdGhlCitkZXNjcmlwdGlvbiBvZiBgcHJvdG9jb2wuYWxsb3dgIGFib3ZlLgorCit1cmwuPGJhc2U+LnB1c2hJbnN0ZWFkT2Y6OgorCUFueSBVUkwgdGhhdCBzdGFydHMgd2l0aCB0aGlzIHZhbHVlIHdpbGwgbm90IGJlIHB1c2hlZCB0bzsKKwlpbnN0ZWFkLCBpdCB3aWxsIGJlIHJld3JpdHRlbiB0byBzdGFydCB3aXRoIDxiYXNlPiwgYW5kIHRoZQorCXJlc3VsdGluZyBVUkwgd2lsbCBiZSBwdXNoZWQgdG8uIEluIGNhc2VzIHdoZXJlIHNvbWUgc2l0ZSBzZXJ2ZXMKKwlhIGxhcmdlIG51bWJlciBvZiByZXBvc2l0b3JpZXMsIGFuZCBzZXJ2ZXMgdGhlbSB3aXRoIG11bHRpcGxlCisJYWNjZXNzIG1ldGhvZHMsIHNvbWUgb2Ygd2hpY2ggZG8gbm90IGFsbG93IHB1c2gsIHRoaXMgZmVhdHVyZQorCWFsbG93cyBwZW9wbGUgdG8gc3BlY2lmeSBhIHB1bGwtb25seSBVUkwgYW5kIGhhdmUgR2l0CisJYXV0b21hdGljYWxseSB1c2UgYW4gYXBwcm9wcmlhdGUgVVJMIHRvIHB1c2gsIGV2ZW4gZm9yIGEKKwluZXZlci1iZWZvcmUtc2VlbiByZXBvc2l0b3J5IG9uIHRoZSBzaXRlLiAgV2hlbiBtb3JlIHRoYW4gb25lCisJcHVzaEluc3RlYWRPZiBzdHJpbmdzIG1hdGNoIGEgZ2l2ZW4gVVJMLCB0aGUgbG9uZ2VzdCBtYXRjaCBpcworCXVzZWQuICBJZiBhIHJlbW90ZSBoYXMgYW4gZXhwbGljaXQgcHVzaHVybCwgR2l0IHdpbGwgaWdub3JlIHRoaXMKKwlzZXR0aW5nIGZvciB0aGF0IHJlbW90ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnL3VzZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdXNlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhZWM3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3VzZXIudHh0CkBAIC0wLDAgKzEsMzggQEAKK3VzZXIubmFtZTo6Cit1c2VyLmVtYWlsOjoKK2F1dGhvci5uYW1lOjoKK2F1dGhvci5lbWFpbDo6Citjb21taXR0ZXIubmFtZTo6Citjb21taXR0ZXIuZW1haWw6OgorCVRoZSBgdXNlci5uYW1lYCBhbmQgYHVzZXIuZW1haWxgIHZhcmlhYmxlcyBkZXRlcm1pbmUgd2hhdCBlbmRzCisJdXAgaW4gdGhlIGBhdXRob3JgIGFuZCBgY29tbWl0dGVyYCBmaWVsZCBvZiBjb21taXQKKwlvYmplY3RzLgorCUlmIHlvdSBuZWVkIHRoZSBgYXV0aG9yYCBvciBgY29tbWl0dGVyYCB0byBiZSBkaWZmZXJlbnQsIHRoZQorCWBhdXRob3IubmFtZWAsIGBhdXRob3IuZW1haWxgLCBgY29tbWl0dGVyLm5hbWVgIG9yCisJYGNvbW1pdHRlci5lbWFpbGAgdmFyaWFibGVzIGNhbiBiZSBzZXQuCisJQWxzbywgYWxsIG9mIHRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX0FVVEhPUl9OQU1FYCwKKwlgR0lUX0FVVEhPUl9FTUFJTGAsIGBHSVRfQ09NTUlUVEVSX05BTUVgLAorCWBHSVRfQ09NTUlUVEVSX0VNQUlMYCBhbmQgYEVNQUlMYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisrCitOb3RlIHRoYXQgdGhlIGBuYW1lYCBmb3JtcyBvZiB0aGVzZSB2YXJpYWJsZXMgY29udmVudGlvbmFsbHkgcmVmZXIgdG8KK3NvbWUgZm9ybSBvZiBhIHBlcnNvbmFsIG5hbWUuICBTZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGFuZCB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlcyBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0WzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uCit0aGVzZSBzZXR0aW5ncyBhbmQgdGhlIGBjcmVkZW50aWFsLnVzZXJuYW1lYCBvcHRpb24gaWYgeW91J3JlIGxvb2tpbmcKK2ZvciBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBpbnN0ZWFkLgorCit1c2VyLnVzZUNvbmZpZ09ubHk6OgorCUluc3RydWN0IEdpdCB0byBhdm9pZCB0cnlpbmcgdG8gZ3Vlc3MgZGVmYXVsdHMgZm9yIGB1c2VyLmVtYWlsYAorCWFuZCBgdXNlci5uYW1lYCwgYW5kIGluc3RlYWQgcmV0cmlldmUgdGhlIHZhbHVlcyBvbmx5IGZyb20gdGhlCisJY29uZmlndXJhdGlvbi4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIG11bHRpcGxlIGVtYWlsIGFkZHJlc3NlcworCWFuZCB3b3VsZCBsaWtlIHRvIHVzZSBhIGRpZmZlcmVudCBvbmUgZm9yIGVhY2ggcmVwb3NpdG9yeSwgdGhlbgorCXdpdGggdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBzZXQgdG8gYHRydWVgIGluIHRoZSBnbG9iYWwgY29uZmlnCisJYWxvbmcgd2l0aCBhIG5hbWUsIEdpdCB3aWxsIHByb21wdCB5b3UgdG8gc2V0IHVwIGFuIGVtYWlsIGJlZm9yZQorCW1ha2luZyBuZXcgY29tbWl0cyBpbiBhIG5ld2x5IGNsb25lZCByZXBvc2l0b3J5LgorCURlZmF1bHRzIHRvIGBmYWxzZWAuCisKK3VzZXIuc2lnbmluZ0tleTo6CisJSWYgbGlua2dpdDpnaXQtdGFnWzFdIG9yIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBpcyBub3Qgc2VsZWN0aW5nIHRoZQorCWtleSB5b3Ugd2FudCBpdCB0byBhdXRvbWF0aWNhbGx5IHdoZW4gY3JlYXRpbmcgYSBzaWduZWQgdGFnIG9yCisJY29tbWl0LCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiB3aXRoIHRoaXMgdmFyaWFibGUuCisJVGhpcyBvcHRpb24gaXMgcGFzc2VkIHVuY2hhbmdlZCB0byBncGcncyAtLWxvY2FsLXVzZXIgcGFyYW1ldGVyLAorCXNvIHlvdSBtYXkgc3BlY2lmeSBhIGtleSB1c2luZyBhbnkgbWV0aG9kIHRoYXQgZ3BnIHN1cHBvcnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvdmVyc2lvbnNvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdmVyc2lvbnNvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjN2NjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy92ZXJzaW9uc29ydC50eHQKQEAgLTAsMCArMSwzMyBAQAordmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCAoZGVwcmVjYXRlZCk6OgorCURlcHJlY2F0ZWQgYWxpYXMgZm9yIGB2ZXJzaW9uc29ydC5zdWZmaXhgLiAgSWdub3JlZCBpZgorCWB2ZXJzaW9uc29ydC5zdWZmaXhgIGlzIHNldC4KKwordmVyc2lvbnNvcnQuc3VmZml4OjoKKwlFdmVuIHdoZW4gdmVyc2lvbiBzb3J0IGlzIHVzZWQgaW4gbGlua2dpdDpnaXQtdGFnWzFdLCB0YWduYW1lcworCXdpdGggdGhlIHNhbWUgYmFzZSB2ZXJzaW9uIGJ1dCBkaWZmZXJlbnQgc3VmZml4ZXMgYXJlIHN0aWxsIHNvcnRlZAorCWxleGljb2dyYXBoaWNhbGx5LCByZXN1bHRpbmcgZS5nLiBpbiBwcmVyZWxlYXNlIHRhZ3MgYXBwZWFyaW5nCisJYWZ0ZXIgdGhlIG1haW4gcmVsZWFzZSAoZS5nLiAiMS4wLXJjMSIgYWZ0ZXIgIjEuMCIpLiAgVGhpcworCXZhcmlhYmxlIGNhbiBiZSBzcGVjaWZpZWQgdG8gZGV0ZXJtaW5lIHRoZSBzb3J0aW5nIG9yZGVyIG9mIHRhZ3MKKwl3aXRoIGRpZmZlcmVudCBzdWZmaXhlcy4KKysKK0J5IHNwZWNpZnlpbmcgYSBzaW5nbGUgc3VmZml4IGluIHRoaXMgdmFyaWFibGUsIGFueSB0YWduYW1lIGNvbnRhaW5pbmcKK3RoYXQgc3VmZml4IHdpbGwgYXBwZWFyIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyBtYWluIHJlbGVhc2UuICBFLmcuIGlmCit0aGUgdmFyaWFibGUgaXMgc2V0IHRvICItcmMiLCB0aGVuIGFsbCAiMS4wLXJjWCIgdGFncyB3aWxsIGFwcGVhciBiZWZvcmUKKyIxLjAiLiAgSWYgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLCBvbmNlIHBlciBzdWZmaXgsIHRoZW4gdGhlIG9yZGVyIG9mCitzdWZmaXhlcyBpbiB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGRldGVybWluZSB0aGUgc29ydGluZyBvcmRlciBvZiB0YWduYW1lcword2l0aCB0aG9zZSBzdWZmaXhlcy4gIEUuZy4gaWYgIi1wcmUiIGFwcGVhcnMgYmVmb3JlICItcmMiIGluIHRoZQorY29uZmlndXJhdGlvbiwgdGhlbiBhbGwgIjEuMC1wcmVYIiB0YWdzIHdpbGwgYmUgbGlzdGVkIGJlZm9yZSBhbnkKKyIxLjAtcmNYIiB0YWdzLiAgVGhlIHBsYWNlbWVudCBvZiB0aGUgbWFpbiByZWxlYXNlIHRhZyByZWxhdGl2ZSB0byB0YWdzCit3aXRoIHZhcmlvdXMgc3VmZml4ZXMgY2FuIGJlIGRldGVybWluZWQgYnkgc3BlY2lmeWluZyB0aGUgZW1wdHkgc3VmZml4CithbW9uZyB0aG9zZSBvdGhlciBzdWZmaXhlcy4gIEUuZy4gaWYgdGhlIHN1ZmZpeGVzICItcmMiLCAiIiwgIi1jayIgYW5kCisiLWJmcyIgYXBwZWFyIGluIHRoZSBjb25maWd1cmF0aW9uIGluIHRoaXMgb3JkZXIsIHRoZW4gYWxsICJ2NC44LXJjWCIgdGFncworYXJlIGxpc3RlZCBmaXJzdCwgZm9sbG93ZWQgYnkgInY0LjgiLCB0aGVuICJ2NC44LWNrWCIgYW5kIGZpbmFsbHkKKyJ2NC44LWJmc1giLgorKworSWYgbW9yZSB0aGFuIG9uZSBzdWZmaXhlcyBtYXRjaCB0aGUgc2FtZSB0YWduYW1lLCB0aGVuIHRoYXQgdGFnbmFtZSB3aWxsCitiZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzdWZmaXggd2hpY2ggc3RhcnRzIGF0IHRoZSBlYXJsaWVzdCBwb3NpdGlvbiBpbgordGhlIHRhZ25hbWUuICBJZiBtb3JlIHRoYW4gb25lIGRpZmZlcmVudCBtYXRjaGluZyBzdWZmaXhlcyBzdGFydCBhdAordGhhdCBlYXJsaWVzdCBwb3NpdGlvbiwgdGhlbiB0aGF0IHRhZ25hbWUgd2lsbCBiZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZQorbG9uZ2VzdCBvZiB0aG9zZSBzdWZmaXhlcy4KK1RoZSBzb3J0aW5nIG9yZGVyIGJldHdlZW4gZGlmZmVyZW50IHN1ZmZpeGVzIGlzIHVuZGVmaW5lZCBpZiB0aGV5IGFyZQoraW4gbXVsdGlwbGUgY29uZmlnIGZpbGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvd2ViLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3dlYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlYzhkMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3dlYi50eHQKQEAgLTAsMCArMSw0IEBACit3ZWIuYnJvd3Nlcjo6CisJU3BlY2lmeSBhIHdlYiBicm93c2VyIHRoYXQgbWF5IGJlIHVzZWQgYnkgc29tZSBjb21tYW5kcy4KKwlDdXJyZW50bHkgb25seSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSBhbmQgbGlua2dpdDpnaXQtaGVscFsxXQorCW1heSB1c2UgaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy93b3JrdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy93b3JrdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ4ZTM0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3dvcmt0cmVlLnR4dApAQCAtMCwwICsxLDkgQEAKK3dvcmt0cmVlLmd1ZXNzUmVtb3RlOjoKKwlJZiBubyBicmFuY2ggaXMgc3BlY2lmaWVkIGFuZCBuZWl0aGVyIGAtYmAgbm9yIGAtQmAgbm9yCisJYC0tZGV0YWNoYCBpcyB1c2VkLCB0aGVuIGBnaXQgd29ya3RyZWUgYWRkYCBkZWZhdWx0cyB0bworCWNyZWF0aW5nIGEgbmV3IGJyYW5jaCBmcm9tIEhFQUQuICBJZiBgd29ya3RyZWUuZ3Vlc3NSZW1vdGVgIGlzCisJc2V0IHRvIHRydWUsIGB3b3JrdHJlZSBhZGRgIHRyaWVzIHRvIGZpbmQgYSByZW1vdGUtdHJhY2tpbmcKKwlicmFuY2ggd2hvc2UgbmFtZSB1bmlxdWVseSBtYXRjaGVzIHRoZSBuZXcgYnJhbmNoIG5hbWUuICBJZgorCXN1Y2ggYSBicmFuY2ggZXhpc3RzLCBpdCBpcyBjaGVja2VkIG91dCBhbmQgc2V0IGFzICJ1cHN0cmVhbSIKKwlmb3IgdGhlIG5ldyBicmFuY2guICBJZiBubyBzdWNoIG1hdGNoIGNhbiBiZSBmb3VuZCwgaXQgZmFsbHMKKwliYWNrIHRvIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCBmcm9tIHRoZSBjdXJyZW50IEhFQUQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RhdGUtZm9ybWF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RhdGUtZm9ybWF0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyNmUwYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dApAQCAtMCwwICsxLDI2IEBACitEQVRFIEZPUk1BVFMKKy0tLS0tLS0tLS0tLQorCitUaGUgYEdJVF9BVVRIT1JfREFURWAsIGBHSVRfQ09NTUlUVEVSX0RBVEVgIGVudmlyb25tZW50IHZhcmlhYmxlcworaWZkZWY6OmdpdC1jb21taXRbXQorYW5kIHRoZSBgLS1kYXRlYCBvcHRpb24KK2VuZGlmOjpnaXQtY29tbWl0W10KK3N1cHBvcnQgdGhlIGZvbGxvd2luZyBkYXRlIGZvcm1hdHM6CisKK0dpdCBpbnRlcm5hbCBmb3JtYXQ6OgorCUl0IGlzIGA8dW5peCB0aW1lc3RhbXA+IDx0aW1lIHpvbmUgb2Zmc2V0PmAsIHdoZXJlIGA8dW5peAorCXRpbWVzdGFtcD5gIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4KKwlgPHRpbWUgem9uZSBvZmZzZXQ+YCBpcyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIG9mZnNldCBmcm9tIFVUQy4KKwlGb3IgZXhhbXBsZSBDRVQgKHdoaWNoIGlzIDEgaG91ciBhaGVhZCBvZiBVVEMpIGlzIGArMDEwMGAuCisKK1JGQyAyODIyOjoKKwlUaGUgc3RhbmRhcmQgZW1haWwgZm9ybWF0IGFzIGRlc2NyaWJlZCBieSBSRkMgMjgyMiwgZm9yIGV4YW1wbGUKKwlgVGh1LCAwNyBBcHIgMjAwNSAyMjoxMzoxMyArMDIwMGAuCisKK0lTTyA4NjAxOjoKKwlUaW1lIGFuZCBkYXRlIHNwZWNpZmllZCBieSB0aGUgSVNPIDg2MDEgc3RhbmRhcmQsIGZvciBleGFtcGxlCisJYDIwMDUtMDQtMDdUMjI6MTM6MTNgLiBUaGUgcGFyc2VyIGFjY2VwdHMgYSBzcGFjZSBpbnN0ZWFkIG9mIHRoZQorCWBUYCBjaGFyYWN0ZXIgYXMgd2VsbC4KKysKK05PVEU6IEluIGFkZGl0aW9uLCB0aGUgZGF0ZSBwYXJ0IGlzIGFjY2VwdGVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKK2BZWVlZLk1NLkREYCwgYE1NL0REL1lZWVlgIGFuZCBgREQuTU0uWVlZWWAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYmQ0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dApAQCAtMCwwICsxLDE4NSBAQAorUmF3IG91dHB1dCBmb3JtYXQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByYXcgb3V0cHV0IGZvcm1hdCBmcm9tICJnaXQtZGlmZi1pbmRleCIsICJnaXQtZGlmZi10cmVlIiwKKyJnaXQtZGlmZi1maWxlcyIgYW5kICJnaXQgZGlmZiAtLXJhdyIgYXJlIHZlcnkgc2ltaWxhci4KKworVGhlc2UgY29tbWFuZHMgYWxsIGNvbXBhcmUgdHdvIHNldHMgb2YgdGhpbmdzOyB3aGF0IGlzCitjb21wYXJlZCBkaWZmZXJzOgorCitnaXQtZGlmZi1pbmRleCA8dHJlZS1pc2g+OjoKKyAgICAgICAgY29tcGFyZXMgdGhlIDx0cmVlLWlzaD4gYW5kIHRoZSBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbS4KKworZ2l0LWRpZmYtaW5kZXggLS1jYWNoZWQgPHRyZWUtaXNoPjo6CisgICAgICAgIGNvbXBhcmVzIHRoZSA8dHJlZS1pc2g+IGFuZCB0aGUgaW5kZXguCisKK2dpdC1kaWZmLXRyZWUgWy1yXSA8dHJlZS1pc2gtMT4gPHRyZWUtaXNoLTI+IFs8cGF0dGVybj4uLi5dOjoKKyAgICAgICAgY29tcGFyZXMgdGhlIHRyZWVzIG5hbWVkIGJ5IHRoZSB0d28gYXJndW1lbnRzLgorCitnaXQtZGlmZi1maWxlcyBbPHBhdHRlcm4+Li4uXTo6CisgICAgICAgIGNvbXBhcmVzIHRoZSBpbmRleCBhbmQgdGhlIGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtLgorCitUaGUgImdpdC1kaWZmLXRyZWUiIGNvbW1hbmQgYmVnaW5zIGl0cyBvdXRwdXQgYnkgcHJpbnRpbmcgdGhlIGhhc2ggb2YKK3doYXQgaXMgYmVpbmcgY29tcGFyZWQuIEFmdGVyIHRoYXQsIGFsbCB0aGUgY29tbWFuZHMgcHJpbnQgb25lIG91dHB1dAorbGluZSBwZXIgY2hhbmdlZCBmaWxlLgorCitBbiBvdXRwdXQgbGluZSBpcyBmb3JtYXR0ZWQgdGhpcyB3YXk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW4tcGxhY2UgZWRpdCAgOjEwMDY0NCAxMDA2NDQgYmNkMTIzNCAwMTIzNDU2IE0gZmlsZTAKK2NvcHktZWRpdCAgICAgIDoxMDA2NDQgMTAwNjQ0IGFiY2QxMjMgMTIzNDU2NyBDNjggZmlsZTEgZmlsZTIKK3JlbmFtZS1lZGl0ICAgIDoxMDA2NDQgMTAwNjQ0IGFiY2QxMjMgMTIzNDU2NyBSODYgZmlsZTEgZmlsZTMKK2NyZWF0ZSAgICAgICAgIDowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgMTIzNDU2NyBBIGZpbGU0CitkZWxldGUgICAgICAgICA6MTAwNjQ0IDAwMDAwMCAxMjM0NTY3IDAwMDAwMDAgRCBmaWxlNQordW5tZXJnZWQgICAgICAgOjAwMDAwMCAwMDAwMDAgMDAwMDAwMCAwMDAwMDAwIFUgZmlsZTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGF0IGlzLCBmcm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodDoKKworLiBhIGNvbG9uLgorLiBtb2RlIGZvciAic3JjIjsgMDAwMDAwIGlmIGNyZWF0aW9uIG9yIHVubWVyZ2VkLgorLiBhIHNwYWNlLgorLiBtb2RlIGZvciAiZHN0IjsgMDAwMDAwIGlmIGRlbGV0aW9uIG9yIHVubWVyZ2VkLgorLiBhIHNwYWNlLgorLiBzaGExIGZvciAic3JjIjsgMFx7NDBcfSBpZiBjcmVhdGlvbiBvciB1bm1lcmdlZC4KKy4gYSBzcGFjZS4KKy4gc2hhMSBmb3IgImRzdCI7IDBcezQwXH0gaWYgY3JlYXRpb24sIHVubWVyZ2VkIG9yICJsb29rIGF0IHdvcmsgdHJlZSIuCisuIGEgc3BhY2UuCisuIHN0YXR1cywgZm9sbG93ZWQgYnkgb3B0aW9uYWwgInNjb3JlIiBudW1iZXIuCisuIGEgdGFiIG9yIGEgTlVMIHdoZW4gYC16YCBvcHRpb24gaXMgdXNlZC4KKy4gcGF0aCBmb3IgInNyYyIKKy4gYSB0YWIgb3IgYSBOVUwgd2hlbiBgLXpgIG9wdGlvbiBpcyB1c2VkOyBvbmx5IGV4aXN0cyBmb3IgQyBvciBSLgorLiBwYXRoIGZvciAiZHN0Ijsgb25seSBleGlzdHMgZm9yIEMgb3IgUi4KKy4gYW4gTEYgb3IgYSBOVUwgd2hlbiBgLXpgIG9wdGlvbiBpcyB1c2VkLCB0byB0ZXJtaW5hdGUgdGhlIHJlY29yZC4KKworUG9zc2libGUgc3RhdHVzIGxldHRlcnMgYXJlOgorCistIEE6IGFkZGl0aW9uIG9mIGEgZmlsZQorLSBDOiBjb3B5IG9mIGEgZmlsZSBpbnRvIGEgbmV3IG9uZQorLSBEOiBkZWxldGlvbiBvZiBhIGZpbGUKKy0gTTogbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250ZW50cyBvciBtb2RlIG9mIGEgZmlsZQorLSBSOiByZW5hbWluZyBvZiBhIGZpbGUKKy0gVDogY2hhbmdlIGluIHRoZSB0eXBlIG9mIHRoZSBmaWxlCistIFU6IGZpbGUgaXMgdW5tZXJnZWQgKHlvdSBtdXN0IGNvbXBsZXRlIHRoZSBtZXJnZSBiZWZvcmUgaXQgY2FuCisgIGJlIGNvbW1pdHRlZCkKKy0gWDogInVua25vd24iIGNoYW5nZSB0eXBlIChtb3N0IHByb2JhYmx5IGEgYnVnLCBwbGVhc2UgcmVwb3J0IGl0KQorCitTdGF0dXMgbGV0dGVycyBDIGFuZCBSIGFyZSBhbHdheXMgZm9sbG93ZWQgYnkgYSBzY29yZSAoZGVub3RpbmcgdGhlCitwZXJjZW50YWdlIG9mIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGUgc291cmNlIGFuZCB0YXJnZXQgb2YgdGhlIG1vdmUgb3IKK2NvcHkpLiAgU3RhdHVzIGxldHRlciBNIG1heSBiZSBmb2xsb3dlZCBieSBhIHNjb3JlIChkZW5vdGluZyB0aGUKK3BlcmNlbnRhZ2Ugb2YgZGlzc2ltaWxhcml0eSkgZm9yIGZpbGUgcmV3cml0ZXMuCisKKzxzaGExPiBpcyBzaG93biBhcyBhbGwgMCdzIGlmIGEgZmlsZSBpcyBuZXcgb24gdGhlIGZpbGVzeXN0ZW0KK2FuZCBpdCBpcyBvdXQgb2Ygc3luYyB3aXRoIHRoZSBpbmRleC4KKworRXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCA1YmU0YTRhIDAwMDAwMDAgTSBmaWxlLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRob3V0IHRoZSBgLXpgIG9wdGlvbiwgcGF0aG5hbWVzIHdpdGggInVudXN1YWwiIGNoYXJhY3RlcnMgYXJlCitxdW90ZWQgYXMgZXhwbGFpbmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgCisoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuICBVc2luZyBgLXpgIHRoZSBmaWxlbmFtZSBpcyBvdXRwdXQKK3ZlcmJhdGltIGFuZCB0aGUgbGluZSBpcyB0ZXJtaW5hdGVkIGJ5IGEgTlVMIGJ5dGUuCisKK2RpZmYgZm9ybWF0IGZvciBtZXJnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdC1kaWZmLXRyZWUiLCAiZ2l0LWRpZmYtZmlsZXMiIGFuZCAiZ2l0LWRpZmYgLS1yYXciCitjYW4gdGFrZSBgLWNgIG9yIGAtLWNjYCBvcHRpb24KK3RvIGdlbmVyYXRlIGRpZmYgb3V0cHV0IGFsc28gZm9yIG1lcmdlIGNvbW1pdHMuICBUaGUgb3V0cHV0IGRpZmZlcnMKK2Zyb20gdGhlIGZvcm1hdCBkZXNjcmliZWQgYWJvdmUgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisKKy4gdGhlcmUgaXMgYSBjb2xvbiBmb3IgZWFjaCBwYXJlbnQKKy4gdGhlcmUgYXJlIG1vcmUgInNyYyIgbW9kZXMgYW5kICJzcmMiIHNoYTEKKy4gc3RhdHVzIGlzIGNvbmNhdGVuYXRlZCBzdGF0dXMgY2hhcmFjdGVycyBmb3IgZWFjaCBwYXJlbnQKKy4gbm8gb3B0aW9uYWwgInNjb3JlIiBudW1iZXIKKy4gdGFiLXNlcGFyYXRlZCBwYXRobmFtZShzKSBvZiB0aGUgZmlsZQorCitGb3IgYC1jYCBhbmQgYC0tY2NgLCBvbmx5IHRoZSBkZXN0aW5hdGlvbiBvciBmaW5hbCBwYXRoIGlzIHNob3duIGV2ZW4KK2lmIHRoZSBmaWxlIHdhcyByZW5hbWVkIG9uIGFueSBzaWRlIG9mIGhpc3RvcnkuICBXaXRoCitgLS1jb21iaW5lZC1hbGwtcGF0aHNgLCB0aGUgbmFtZSBvZiB0aGUgcGF0aCBpbiBlYWNoIHBhcmVudCBpcyBzaG93bgorZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgdGhlIHBhdGggaW4gdGhlIG1lcmdlIGNvbW1pdC4KKworRXhhbXBsZXMgZm9yIGAtY2AgYW5kIGAtLWNjYCB3aXRob3V0IGAtLWNvbWJpbmVkLWFsbC1wYXRoc2A6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgZmFiYWRiOCBjYzk1ZWIwIDQ4NjY1MTAgTU0JZGVzYy5jCis6OjEwMDc1NSAxMDA3NTUgMTAwNzU1IDUyYjdhMmQgNmQxYWMwNCBkMmFjN2Q3IFJNCWJhci5zaAorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBlMDdkNmM1IDkwNDJlODIgZWU5MTg4MSBSUglwaG9vZXkuYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4YW1wbGVzIHdoZW4gYC0tY29tYmluZWQtYWxsLXBhdGhzYCBhZGRlZCB0byBlaXRoZXIgYC1jYCBvciBgLS1jY2A6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBmYWJhZGI4IGNjOTVlYjAgNDg2NjUxMCBNTQlkZXNjLmMJZGVzYy5jCWRlc2MuYworOjoxMDA3NTUgMTAwNzU1IDEwMDc1NSA1MmI3YTJkIDZkMWFjMDQgZDJhYzdkNyBSTQlmb28uc2gJYmFyLnNoCWJhci5zaAorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBlMDdkNmM1IDkwNDJlODIgZWU5MTg4MSBSUglmb29leS5jCWZ1ZXkuYwlwaG9vZXkuYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCAnY29tYmluZWQgZGlmZicgbGlzdHMgb25seSBmaWxlcyB3aGljaCB3ZXJlIG1vZGlmaWVkIGZyb20KK2FsbCBwYXJlbnRzLgorCisKK2luY2x1ZGU6OmRpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0W10KKworCitvdGhlciBkaWZmIGZvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYC0tc3VtbWFyeWAgb3B0aW9uIGRlc2NyaWJlcyBuZXdseSBhZGRlZCwgZGVsZXRlZCwgcmVuYW1lZCBhbmQKK2NvcGllZCBmaWxlcy4gIFRoZSBgLS1zdGF0YCBvcHRpb24gYWRkcyBkaWZmc3RhdCgxKSBncmFwaCB0byB0aGUKK291dHB1dC4gIFRoZXNlIG9wdGlvbnMgY2FuIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgb3B0aW9ucywgc3VjaCBhcworYC1wYCwgYW5kIGFyZSBtZWFudCBmb3IgaHVtYW4gY29uc3VtcHRpb24uCisKK1doZW4gc2hvd2luZyBhIGNoYW5nZSB0aGF0IGludm9sdmVzIGEgcmVuYW1lIG9yIGEgY29weSwgYC0tc3RhdGAgb3V0cHV0Citmb3JtYXRzIHRoZSBwYXRobmFtZXMgY29tcGFjdGx5IGJ5IGNvbWJpbmluZyBjb21tb24gcHJlZml4IGFuZCBzdWZmaXggb2YKK3RoZSBwYXRobmFtZXMuICBGb3IgZXhhbXBsZSwgYSBjaGFuZ2UgdGhhdCBtb3ZlcyBgYXJjaC9pMzg2L01ha2VmaWxlYCB0bworYGFyY2gveDg2L01ha2VmaWxlYCB3aGlsZSBtb2RpZnlpbmcgNCBsaW5lcyB3aWxsIGJlIHNob3duIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithcmNoL3tpMzg2ID0+IHg4Nn0vTWFrZWZpbGUgICAgfCAgIDQgKy0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGAtLW51bXN0YXRgIG9wdGlvbiBnaXZlcyB0aGUgZGlmZnN0YXQoMSkgaW5mb3JtYXRpb24gYnV0IGlzIGRlc2lnbmVkCitmb3IgZWFzaWVyIG1hY2hpbmUgY29uc3VtcHRpb24uICBBbiBlbnRyeSBpbiBgLS1udW1zdGF0YCBvdXRwdXQgbG9va3MKK2xpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMQkyCVJFQURNRQorMwkxCWFyY2gve2kzODYgPT4geDg2fS9NYWtlZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGF0IGlzLCBmcm9tIGxlZnQgdG8gcmlnaHQ6CisKKy4gdGhlIG51bWJlciBvZiBhZGRlZCBsaW5lczsKKy4gYSB0YWI7CisuIHRoZSBudW1iZXIgb2YgZGVsZXRlZCBsaW5lczsKKy4gYSB0YWI7CisuIHBhdGhuYW1lIChwb3NzaWJseSB3aXRoIHJlbmFtZS9jb3B5IGluZm9ybWF0aW9uKTsKKy4gYSBuZXdsaW5lLgorCitXaGVuIGAtemAgb3V0cHV0IG9wdGlvbiBpcyBpbiBlZmZlY3QsIHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVkIHRoaXMgd2F5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxCTIJUkVBRE1FIE5VTAorMwkxCU5VTCBhcmNoL2kzODYvTWFrZWZpbGUgTlVMIGFyY2gveDg2L01ha2VmaWxlIE5VTAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGF0IGlzOgorCisuIHRoZSBudW1iZXIgb2YgYWRkZWQgbGluZXM7CisuIGEgdGFiOworLiB0aGUgbnVtYmVyIG9mIGRlbGV0ZWQgbGluZXM7CisuIGEgdGFiOworLiBhIE5VTCAob25seSBleGlzdHMgaWYgcmVuYW1lZC9jb3BpZWQpOworLiBwYXRobmFtZSBpbiBwcmVpbWFnZTsKKy4gYSBOVUwgKG9ubHkgZXhpc3RzIGlmIHJlbmFtZWQvY29waWVkKTsKKy4gcGF0aG5hbWUgaW4gcG9zdGltYWdlIChvbmx5IGV4aXN0cyBpZiByZW5hbWVkL2NvcGllZCk7CisuIGEgTlVMLgorCitUaGUgZXh0cmEgYE5VTGAgYmVmb3JlIHRoZSBwcmVpbWFnZSBwYXRoIGluIHJlbmFtZWQgY2FzZSBpcyB0byBhbGxvdworc2NyaXB0cyB0aGF0IHJlYWQgdGhlIG91dHB1dCB0byB0ZWxsIGlmIHRoZSBjdXJyZW50IHJlY29yZCBiZWluZyByZWFkIGlzCithIHNpbmdsZS1wYXRoIHJlY29yZCBvciBhIHJlbmFtZS9jb3B5IHJlY29yZCB3aXRob3V0IHJlYWRpbmcgYWhlYWQuCitBZnRlciByZWFkaW5nIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzLCByZWFkaW5nIHVwIHRvIGBOVUxgIHdvdWxkIHlpZWxkCit0aGUgcGF0aG5hbWUsIGJ1dCBpZiB0aGF0IGlzIGBOVUxgLCB0aGUgcmVjb3JkIHdpbGwgc2hvdyB0d28gcGF0aHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWdlbmVyYXRlLXBhdGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGVkNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWdlbmVyYXRlLXBhdGNoLnR4dApAQCAtMCwwICsxLDIwMSBAQAorR2VuZXJhdGluZyBwYXRjaCB0ZXh0IHdpdGggLXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1J1bm5pbmcKK2xpbmtnaXQ6Z2l0LWRpZmZbMV0sCitsaW5rZ2l0OmdpdC1sb2dbMV0sCitsaW5rZ2l0OmdpdC1zaG93WzFdLAorbGlua2dpdDpnaXQtZGlmZi1pbmRleFsxXSwKK2xpbmtnaXQ6Z2l0LWRpZmYtdHJlZVsxXSwgb3IKK2xpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0KK3dpdGggdGhlIGAtcGAgb3B0aW9uIHByb2R1Y2VzIHBhdGNoIHRleHQuCitZb3UgY2FuIGN1c3RvbWl6ZSB0aGUgY3JlYXRpb24gb2YgcGF0Y2ggdGV4dCB2aWEgdGhlCitgR0lUX0VYVEVSTkFMX0RJRkZgIGFuZCB0aGUgYEdJVF9ESUZGX09QVFNgIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworV2hhdCB0aGUgLXAgb3B0aW9uIHByb2R1Y2VzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSB0cmFkaXRpb25hbAorZGlmZiBmb3JtYXQ6CisKKzEuICAgSXQgaXMgcHJlY2VkZWQgd2l0aCBhICJnaXQgZGlmZiIgaGVhZGVyIHRoYXQgbG9va3MgbGlrZSB0aGlzOgorCisgICAgICAgZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTIKKysKK1RoZSBgYS9gIGFuZCBgYi9gIGZpbGVuYW1lcyBhcmUgdGhlIHNhbWUgdW5sZXNzIHJlbmFtZS9jb3B5IGlzCitpbnZvbHZlZC4gIEVzcGVjaWFsbHksIGV2ZW4gZm9yIGEgY3JlYXRpb24gb3IgYSBkZWxldGlvbiwKK2AvZGV2L251bGxgIGlzIF9ub3RfIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIGBhL2Agb3IgYGIvYCBmaWxlbmFtZXMuCisrCitXaGVuIHJlbmFtZS9jb3B5IGlzIGludm9sdmVkLCBgZmlsZTFgIGFuZCBgZmlsZTJgIHNob3cgdGhlCituYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBvZiB0aGUgcmVuYW1lL2NvcHkgYW5kIHRoZSBuYW1lIG9mCit0aGUgZmlsZSB0aGF0IHJlbmFtZS9jb3B5IHByb2R1Y2VzLCByZXNwZWN0aXZlbHkuCisKKzIuICAgSXQgaXMgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZXh0ZW5kZWQgaGVhZGVyIGxpbmVzOgorCisgICAgICAgb2xkIG1vZGUgPG1vZGU+CisgICAgICAgbmV3IG1vZGUgPG1vZGU+CisgICAgICAgZGVsZXRlZCBmaWxlIG1vZGUgPG1vZGU+CisgICAgICAgbmV3IGZpbGUgbW9kZSA8bW9kZT4KKyAgICAgICBjb3B5IGZyb20gPHBhdGg+CisgICAgICAgY29weSB0byA8cGF0aD4KKyAgICAgICByZW5hbWUgZnJvbSA8cGF0aD4KKyAgICAgICByZW5hbWUgdG8gPHBhdGg+CisgICAgICAgc2ltaWxhcml0eSBpbmRleCA8bnVtYmVyPgorICAgICAgIGRpc3NpbWlsYXJpdHkgaW5kZXggPG51bWJlcj4KKyAgICAgICBpbmRleCA8aGFzaD4uLjxoYXNoPiA8bW9kZT4KKysKK0ZpbGUgbW9kZXMgYXJlIHByaW50ZWQgYXMgNi1kaWdpdCBvY3RhbCBudW1iZXJzIGluY2x1ZGluZyB0aGUgZmlsZSB0eXBlCithbmQgZmlsZSBwZXJtaXNzaW9uIGJpdHMuCisrCitQYXRoIG5hbWVzIGluIGV4dGVuZGVkIGhlYWRlcnMgZG8gbm90IGluY2x1ZGUgdGhlIGBhL2AgYW5kIGBiL2AgcHJlZml4ZXMuCisrCitUaGUgc2ltaWxhcml0eSBpbmRleCBpcyB0aGUgcGVyY2VudGFnZSBvZiB1bmNoYW5nZWQgbGluZXMsIGFuZAordGhlIGRpc3NpbWlsYXJpdHkgaW5kZXggaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY2hhbmdlZCBsaW5lcy4gIEl0CitpcyBhIHJvdW5kZWQgZG93biBpbnRlZ2VyLCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gIFRoZQorc2ltaWxhcml0eSBpbmRleCB2YWx1ZSBvZiAxMDAlIGlzIHRodXMgcmVzZXJ2ZWQgZm9yIHR3byBlcXVhbAorZmlsZXMsIHdoaWxlIDEwMCUgZGlzc2ltaWxhcml0eSBtZWFucyB0aGF0IG5vIGxpbmUgZnJvbSB0aGUgb2xkCitmaWxlIG1hZGUgaXQgaW50byB0aGUgbmV3IG9uZS4KKysKK1RoZSBpbmRleCBsaW5lIGluY2x1ZGVzIHRoZSBibG9iIG9iamVjdCBuYW1lcyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UuCitUaGUgPG1vZGU+IGlzIGluY2x1ZGVkIGlmIHRoZSBmaWxlIG1vZGUgZG9lcyBub3QgY2hhbmdlOyBvdGhlcndpc2UsCitzZXBhcmF0ZSBsaW5lcyBpbmRpY2F0ZSB0aGUgb2xkIGFuZCB0aGUgbmV3IG1vZGUuCisKKzMuICBQYXRobmFtZXMgd2l0aCAidW51c3VhbCIgY2hhcmFjdGVycyBhcmUgcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IKKyAgICB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgIChzZWUKKyAgICBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCis0LiAgQWxsIHRoZSBgZmlsZTFgIGZpbGVzIGluIHRoZSBvdXRwdXQgcmVmZXIgdG8gZmlsZXMgYmVmb3JlIHRoZQorICAgIGNvbW1pdCwgYW5kIGFsbCB0aGUgYGZpbGUyYCBmaWxlcyByZWZlciB0byBmaWxlcyBhZnRlciB0aGUgY29tbWl0LgorICAgIEl0IGlzIGluY29ycmVjdCB0byBhcHBseSBlYWNoIGNoYW5nZSB0byBlYWNoIGZpbGUgc2VxdWVudGlhbGx5LiAgRm9yCisgICAgZXhhbXBsZSwgdGhpcyBwYXRjaCB3aWxsIHN3YXAgYSBhbmQgYjoKKworICAgICAgZGlmZiAtLWdpdCBhL2EgYi9iCisgICAgICByZW5hbWUgZnJvbSBhCisgICAgICByZW5hbWUgdG8gYgorICAgICAgZGlmZiAtLWdpdCBhL2IgYi9hCisgICAgICByZW5hbWUgZnJvbSBiCisgICAgICByZW5hbWUgdG8gYQorCisKK0NvbWJpbmVkIGRpZmYgZm9ybWF0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbnkgZGlmZi1nZW5lcmF0aW5nIGNvbW1hbmQgY2FuIHRha2UgdGhlIGAtY2Agb3IgYC0tY2NgIG9wdGlvbiB0bworcHJvZHVjZSBhICdjb21iaW5lZCBkaWZmJyB3aGVuIHNob3dpbmcgYSBtZXJnZS4gVGhpcyBpcyB0aGUgZGVmYXVsdAorZm9ybWF0IHdoZW4gc2hvd2luZyBtZXJnZXMgd2l0aCBsaW5rZ2l0OmdpdC1kaWZmWzFdIG9yCitsaW5rZ2l0OmdpdC1zaG93WzFdLiBOb3RlIGFsc28gdGhhdCB5b3UgY2FuIGdpdmUgdGhlIGAtbWAgb3B0aW9uIHRvIGFueQorb2YgdGhlc2UgY29tbWFuZHMgdG8gZm9yY2UgZ2VuZXJhdGlvbiBvZiBkaWZmcyB3aXRoIGluZGl2aWR1YWwgcGFyZW50cworb2YgYSBtZXJnZS4KKworQSAiY29tYmluZWQgZGlmZiIgZm9ybWF0IGxvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCitkaWZmIC0tY29tYmluZWQgZGVzY3JpYmUuYworaW5kZXggZmFiYWRiOCxjYzk1ZWIwLi40ODY2NTEwCistLS0gYS9kZXNjcmliZS5jCisrKysgYi9kZXNjcmliZS5jCitAQEAgLTk4LDIwIC05OCwxMiArOTgsMjAgQEBACisJcmV0dXJuIChhX2RhdGUgPiBiX2RhdGUpID8gLTEgOiAoYV9kYXRlID09IGJfZGF0ZSkgPyAwIDogMTsKKyAgfQorCistIHN0YXRpYyB2b2lkIGRlc2NyaWJlKGNoYXIgKmFyZykKKyAtc3RhdGljIHZvaWQgZGVzY3JpYmUoc3RydWN0IGNvbW1pdCAqY21pdCwgaW50IGxhc3Rfb25lKQorKytzdGF0aWMgdm9pZCBkZXNjcmliZShjaGFyICphcmcsIGludCBsYXN0X29uZSkKKyAgeworICsJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKyArCXN0cnVjdCBjb21taXQgKmNtaXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCXN0cnVjdCBjb21taXRfbmFtZSAqbjsKKworICsJaWYgKGdldF9zaGExKGFyZywgc2hhMSkgPCAwKQorICsJCXVzYWdlKGRlc2NyaWJlX3VzYWdlKTsKKyArCWNtaXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKyArCWlmICghY21pdCkKKyArCQl1c2FnZShkZXNjcmliZV91c2FnZSk7CisgKworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJaW5pdGlhbGl6ZWQgPSAxOworCQlmb3JfZWFjaF9yZWYoZ2V0X25hbWUpOworLS0tLS0tLS0tLS0tCisKKzEuICAgSXQgaXMgcHJlY2VkZWQgd2l0aCBhICJnaXQgZGlmZiIgaGVhZGVyLCB0aGF0IGxvb2tzIGxpa2UKKyAgICAgdGhpcyAod2hlbiB0aGUgYC1jYCBvcHRpb24gaXMgdXNlZCk6CisKKyAgICAgICBkaWZmIC0tY29tYmluZWQgZmlsZQorKworb3IgbGlrZSB0aGlzICh3aGVuIHRoZSBgLS1jY2Agb3B0aW9uIGlzIHVzZWQpOgorCisgICAgICAgZGlmZiAtLWNjIGZpbGUKKworMi4gICBJdCBpcyBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBleHRlbmRlZCBoZWFkZXIgbGluZXMKKyAgICAgKHRoaXMgZXhhbXBsZSBzaG93cyBhIG1lcmdlIHdpdGggdHdvIHBhcmVudHMpOgorCisgICAgICAgaW5kZXggPGhhc2g+LDxoYXNoPi4uPGhhc2g+CisgICAgICAgbW9kZSA8bW9kZT4sPG1vZGU+Li48bW9kZT4KKyAgICAgICBuZXcgZmlsZSBtb2RlIDxtb2RlPgorICAgICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDxtb2RlPiw8bW9kZT4KKysKK1RoZSBgbW9kZSA8bW9kZT4sPG1vZGU+Li48bW9kZT5gIGxpbmUgYXBwZWFycyBvbmx5IGlmIGF0IGxlYXN0IG9uZSBvZgordGhlIDxtb2RlPiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVzdC4gRXh0ZW5kZWQgaGVhZGVycyB3aXRoCitpbmZvcm1hdGlvbiBhYm91dCBkZXRlY3RlZCBjb250ZW50cyBtb3ZlbWVudCAocmVuYW1lcyBhbmQKK2NvcHlpbmcgZGV0ZWN0aW9uKSBhcmUgZGVzaWduZWQgdG8gd29yayB3aXRoIGRpZmYgb2YgdHdvCis8dHJlZS1pc2g+IGFuZCBhcmUgbm90IHVzZWQgYnkgY29tYmluZWQgZGlmZiBmb3JtYXQuCisKKzMuICAgSXQgaXMgZm9sbG93ZWQgYnkgdHdvLWxpbmUgZnJvbS1maWxlL3RvLWZpbGUgaGVhZGVyCisKKyAgICAgICAtLS0gYS9maWxlCisgICAgICAgKysrIGIvZmlsZQorKworU2ltaWxhciB0byB0d28tbGluZSBoZWFkZXIgZm9yIHRyYWRpdGlvbmFsICd1bmlmaWVkJyBkaWZmCitmb3JtYXQsIGAvZGV2L251bGxgIGlzIHVzZWQgdG8gc2lnbmFsIGNyZWF0ZWQgb3IgZGVsZXRlZAorZmlsZXMuCisrCitIb3dldmVyLCBpZiB0aGUgLS1jb21iaW5lZC1hbGwtcGF0aHMgb3B0aW9uIGlzIHByb3ZpZGVkLCBpbnN0ZWFkIG9mIGEKK3R3by1saW5lIGZyb20tZmlsZS90by1maWxlIHlvdSBnZXQgYSBOKzEgbGluZSBmcm9tLWZpbGUvdG8tZmlsZSBoZWFkZXIsCit3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgcGFyZW50cyBpbiB0aGUgbWVyZ2UgY29tbWl0CisKKyAgICAgICAtLS0gYS9maWxlCisgICAgICAgLS0tIGEvZmlsZQorICAgICAgIC0tLSBhL2ZpbGUKKyAgICAgICArKysgYi9maWxlCisrCitUaGlzIGV4dGVuZGVkIGZvcm1hdCBjYW4gYmUgdXNlZnVsIGlmIHJlbmFtZSBvciBjb3B5IGRldGVjdGlvbiBpcworYWN0aXZlLCB0byBhbGxvdyB5b3UgdG8gc2VlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBmaWxlIGluIGRpZmZlcmVudAorcGFyZW50cy4KKworNC4gICBDaHVuayBoZWFkZXIgZm9ybWF0IGlzIG1vZGlmaWVkIHRvIHByZXZlbnQgcGVvcGxlIGZyb20KKyAgICAgYWNjaWRlbnRhbGx5IGZlZWRpbmcgaXQgdG8gYHBhdGNoIC1wMWAuIENvbWJpbmVkIGRpZmYgZm9ybWF0CisgICAgIHdhcyBjcmVhdGVkIGZvciByZXZpZXcgb2YgbWVyZ2UgY29tbWl0IGNoYW5nZXMsIGFuZCB3YXMgbm90CisgICAgIG1lYW50IHRvIGJlIGFwcGxpZWQuIFRoZSBjaGFuZ2UgaXMgc2ltaWxhciB0byB0aGUgY2hhbmdlIGluIHRoZQorICAgICBleHRlbmRlZCAnaW5kZXgnIGhlYWRlcjoKKworICAgICAgIEBAQCA8ZnJvbS1maWxlLXJhbmdlPiA8ZnJvbS1maWxlLXJhbmdlPiA8dG8tZmlsZS1yYW5nZT4gQEBACisrCitUaGVyZSBhcmUgKG51bWJlciBvZiBwYXJlbnRzICsgMSkgYEBgIGNoYXJhY3RlcnMgaW4gdGhlIGNodW5rCitoZWFkZXIgZm9yIGNvbWJpbmVkIGRpZmYgZm9ybWF0LgorCitVbmxpa2UgdGhlIHRyYWRpdGlvbmFsICd1bmlmaWVkJyBkaWZmIGZvcm1hdCwgd2hpY2ggc2hvd3MgdHdvCitmaWxlcyBBIGFuZCBCIHdpdGggYSBzaW5nbGUgY29sdW1uIHRoYXQgaGFzIGAtYCAobWludXMgLS0KK2FwcGVhcnMgaW4gQSBidXQgcmVtb3ZlZCBpbiBCKSwgYCtgIChwbHVzIC0tIG1pc3NpbmcgaW4gQSBidXQKK2FkZGVkIHRvIEIpLCBvciBgIiAiYCAoc3BhY2UgLS0gdW5jaGFuZ2VkKSBwcmVmaXgsIHRoaXMgZm9ybWF0Citjb21wYXJlcyB0d28gb3IgbW9yZSBmaWxlcyBmaWxlMSwgZmlsZTIsLi4uIHdpdGggb25lIGZpbGUgWCwgYW5kCitzaG93cyBob3cgWCBkaWZmZXJzIGZyb20gZWFjaCBvZiBmaWxlTi4gIE9uZSBjb2x1bW4gZm9yIGVhY2ggb2YKK2ZpbGVOIGlzIHByZXBlbmRlZCB0byB0aGUgb3V0cHV0IGxpbmUgdG8gbm90ZSBob3cgWCdzIGxpbmUgaXMKK2RpZmZlcmVudCBmcm9tIGl0LgorCitBIGAtYCBjaGFyYWN0ZXIgaW4gdGhlIGNvbHVtbiBOIG1lYW5zIHRoYXQgdGhlIGxpbmUgYXBwZWFycyBpbgorZmlsZU4gYnV0IGl0IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcmVzdWx0LiAgQSBgK2AgY2hhcmFjdGVyCitpbiB0aGUgY29sdW1uIE4gbWVhbnMgdGhhdCB0aGUgbGluZSBhcHBlYXJzIGluIHRoZSByZXN1bHQsCithbmQgZmlsZU4gZG9lcyBub3QgaGF2ZSB0aGF0IGxpbmUgKGluIG90aGVyIHdvcmRzLCB0aGUgbGluZSB3YXMKK2FkZGVkLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoYXQgcGFyZW50KS4KKworSW4gdGhlIGFib3ZlIGV4YW1wbGUgb3V0cHV0LCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHdhcyBjaGFuZ2VkCitmcm9tIGJvdGggZmlsZXMgKGhlbmNlIHR3byBgLWAgcmVtb3ZhbHMgZnJvbSBib3RoIGZpbGUxIGFuZAorZmlsZTIsIHBsdXMgYCsrYCB0byBtZWFuIG9uZSBsaW5lIHRoYXQgd2FzIGFkZGVkIGRvZXMgbm90IGFwcGVhcgoraW4gZWl0aGVyIGZpbGUxIG9yIGZpbGUyKS4gIEFsc28gZWlnaHQgb3RoZXIgbGluZXMgYXJlIHRoZSBzYW1lCitmcm9tIGZpbGUxIGJ1dCBkbyBub3QgYXBwZWFyIGluIGZpbGUyIChoZW5jZSBwcmVmaXhlZCB3aXRoIGArYCkuCisKK1doZW4gc2hvd24gYnkgYGdpdCBkaWZmLXRyZWUgLWNgLCBpdCBjb21wYXJlcyB0aGUgcGFyZW50cyBvZiBhCittZXJnZSBjb21taXQgd2l0aCB0aGUgbWVyZ2UgcmVzdWx0IChpLmUuIGZpbGUxLi5maWxlTiBhcmUgdGhlCitwYXJlbnRzKS4gIFdoZW4gc2hvd24gYnkgYGdpdCBkaWZmLWZpbGVzIC1jYCwgaXQgY29tcGFyZXMgdGhlCit0d28gdW5yZXNvbHZlZCBtZXJnZSBwYXJlbnRzIHdpdGggdGhlIHdvcmtpbmcgdHJlZSBmaWxlCisoaS5lLiBmaWxlMSBpcyBzdGFnZSAyIGFrYSAib3VyIHZlcnNpb24iLCBmaWxlMiBpcyBzdGFnZSAzIGFrYQorInRoZWlyIHZlcnNpb24iKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjMxZjBjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CkBAIC0wLDAgKzEsNzU2IEBACisvLyBQbGVhc2UgZG9uJ3QgcmVtb3ZlIHRoaXMgY29tbWVudCBhcyBhc2NpaWRvYyBiZWhhdmVzIGJhZGx5IHdoZW4KKy8vIHRoZSBmaXJzdCBub24tZW1wdHkgbGluZSBpcyBpZmRlZi9pZm5kZWYuIFRoZSBzeW1wdG9tIGlzIHRoYXQKKy8vIHdpdGhvdXQgdGhpcyBjb21tZW50IHRoZSA8Z2l0LWRpZmYtY29yZT4gYXR0cmlidXRlIGNvbmRpdGlvbmFsbHkKKy8vIGRlZmluZWQgYmVsb3cgZW5kcyB1cCBiZWluZyBkZWZpbmVkIHVuY29uZGl0aW9uYWxseS4KKy8vIExhc3QgY2hlY2tlZCB3aXRoIGFzY2lpZG9jIDcuMC4yLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQoraWZuZGVmOjpnaXQtZGlmZltdCitpZm5kZWY6OmdpdC1sb2dbXQorOmdpdC1kaWZmLWNvcmU6IDEKK2VuZGlmOjpnaXQtbG9nW10KK2VuZGlmOjpnaXQtZGlmZltdCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKK2lmZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy1wOjoKKy0tbm8tc3RhdDo6CisJR2VuZXJhdGUgcGxhaW4gcGF0Y2hlcyB3aXRob3V0IGFueSBkaWZmc3RhdHMuCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistcDo6CistdTo6CistLXBhdGNoOjoKKwlHZW5lcmF0ZSBwYXRjaCAoc2VlIHNlY3Rpb24gb24gZ2VuZXJhdGluZyBwYXRjaGVzKS4KK2lmZGVmOjpnaXQtZGlmZltdCisJVGhpcyBpcyB0aGUgZGVmYXVsdC4KK2VuZGlmOjpnaXQtZGlmZltdCisKKy1zOjoKKy0tbm8tcGF0Y2g6OgorCVN1cHByZXNzIGRpZmYgb3V0cHV0LiBVc2VmdWwgZm9yIGNvbW1hbmRzIGxpa2UgYGdpdCBzaG93YCB0aGF0CisJc2hvdyB0aGUgcGF0Y2ggYnkgZGVmYXVsdCwgb3IgdG8gY2FuY2VsIHRoZSBlZmZlY3Qgb2YgYC0tcGF0Y2hgLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistVTxuPjo6CistLXVuaWZpZWQ9PG4+OjoKKwlHZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBvZiBjb250ZXh0IGluc3RlYWQgb2YKKwl0aGUgdXN1YWwgdGhyZWUuIEltcGxpZXMgYC0tcGF0Y2hgLgoraWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKwlJbXBsaWVzIGAtcGAuCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy0tb3V0cHV0PTxmaWxlPjo6CisJT3V0cHV0IHRvIGEgc3BlY2lmaWMgZmlsZSBpbnN0ZWFkIG9mIHN0ZG91dC4KKworLS1vdXRwdXQtaW5kaWNhdG9yLW5ldz08Y2hhcj46OgorLS1vdXRwdXQtaW5kaWNhdG9yLW9sZD08Y2hhcj46OgorLS1vdXRwdXQtaW5kaWNhdG9yLWNvbnRleHQ9PGNoYXI+OjoKKwlTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBpbmRpY2F0ZSBuZXcsIG9sZCBvciBjb250ZXh0CisJbGluZXMgaW4gdGhlIGdlbmVyYXRlZCBwYXRjaC4gTm9ybWFsbHkgdGhleSBhcmUgJysnLCAnLScgYW5kCisJJyAnIHJlc3BlY3RpdmVseS4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy0tcmF3OjoKK2lmbmRlZjo6Z2l0LWxvZ1tdCisJR2VuZXJhdGUgdGhlIGRpZmYgaW4gcmF3IGZvcm1hdC4KK2lmZGVmOjpnaXQtZGlmZi1jb3JlW10KKwlUaGlzIGlzIHRoZSBkZWZhdWx0LgorZW5kaWY6OmdpdC1kaWZmLWNvcmVbXQorZW5kaWY6OmdpdC1sb2dbXQoraWZkZWY6OmdpdC1sb2dbXQorCUZvciBlYWNoIGNvbW1pdCwgc2hvdyBhIHN1bW1hcnkgb2YgY2hhbmdlcyB1c2luZyB0aGUgcmF3IGRpZmYKKwlmb3JtYXQuIFNlZSB0aGUgIlJBVyBPVVRQVVQgRk9STUFUIiBzZWN0aW9uIG9mCisJbGlua2dpdDpnaXQtZGlmZlsxXS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBzaG93aW5nIHRoZSBsb2cKKwlpdHNlbGYgaW4gcmF3IGZvcm1hdCwgd2hpY2ggeW91IGNhbiBhY2hpZXZlIHdpdGgKKwlgLS1mb3JtYXQ9cmF3YC4KK2VuZGlmOjpnaXQtbG9nW10KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy0tcGF0Y2gtd2l0aC1yYXc6OgorCVN5bm9ueW0gZm9yIGAtcCAtLXJhd2AuCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy0taW5kZW50LWhldXJpc3RpYzo6CisJRW5hYmxlIHRoZSBoZXVyaXN0aWMgdGhhdCBzaGlmdHMgZGlmZiBodW5rIGJvdW5kYXJpZXMgdG8gbWFrZSBwYXRjaGVzCisJZWFzaWVyIHRvIHJlYWQuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKy0tbm8taW5kZW50LWhldXJpc3RpYzo6CisJRGlzYWJsZSB0aGUgaW5kZW50IGhldXJpc3RpYy4KKworLS1taW5pbWFsOjoKKwlTcGVuZCBleHRyYSB0aW1lIHRvIG1ha2Ugc3VyZSB0aGUgc21hbGxlc3QgcG9zc2libGUKKwlkaWZmIGlzIHByb2R1Y2VkLgorCistLXBhdGllbmNlOjoKKwlHZW5lcmF0ZSBhIGRpZmYgdXNpbmcgdGhlICJwYXRpZW5jZSBkaWZmIiBhbGdvcml0aG0uCisKKy0taGlzdG9ncmFtOjoKKwlHZW5lcmF0ZSBhIGRpZmYgdXNpbmcgdGhlICJoaXN0b2dyYW0gZGlmZiIgYWxnb3JpdGhtLgorCistLWFuY2hvcmVkPTx0ZXh0Pjo6CisJR2VuZXJhdGUgYSBkaWZmIHVzaW5nIHRoZSAiYW5jaG9yZWQgZGlmZiIgYWxnb3JpdGhtLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZS4KKysKK0lmIGEgbGluZSBleGlzdHMgaW4gYm90aCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiwgZXhpc3RzIG9ubHkgb25jZSwKK2FuZCBzdGFydHMgd2l0aCB0aGlzIHRleHQsIHRoaXMgYWxnb3JpdGhtIGF0dGVtcHRzIHRvIHByZXZlbnQgaXQgZnJvbQorYXBwZWFyaW5nIGFzIGEgZGVsZXRpb24gb3IgYWRkaXRpb24gaW4gdGhlIG91dHB1dC4gSXQgdXNlcyB0aGUgInBhdGllbmNlCitkaWZmIiBhbGdvcml0aG0gaW50ZXJuYWxseS4KKworLS1kaWZmLWFsZ29yaXRobT17cGF0aWVuY2V8bWluaW1hbHxoaXN0b2dyYW18bXllcnN9OjoKKwlDaG9vc2UgYSBkaWZmIGFsZ29yaXRobS4gVGhlIHZhcmlhbnRzIGFyZSBhcyBmb2xsb3dzOgorKworLS0KK2BkZWZhdWx0YCwgYG15ZXJzYDs7CisJVGhlIGJhc2ljIGdyZWVkeSBkaWZmIGFsZ29yaXRobS4gQ3VycmVudGx5LCB0aGlzIGlzIHRoZSBkZWZhdWx0LgorYG1pbmltYWxgOzsKKwlTcGVuZCBleHRyYSB0aW1lIHRvIG1ha2Ugc3VyZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiBpcworCXByb2R1Y2VkLgorYHBhdGllbmNlYDs7CisJVXNlICJwYXRpZW5jZSBkaWZmIiBhbGdvcml0aG0gd2hlbiBnZW5lcmF0aW5nIHBhdGNoZXMuCitgaGlzdG9ncmFtYDs7CisJVGhpcyBhbGdvcml0aG0gZXh0ZW5kcyB0aGUgcGF0aWVuY2UgYWxnb3JpdGhtIHRvICJzdXBwb3J0CisJbG93LW9jY3VycmVuY2UgY29tbW9uIGVsZW1lbnRzIi4KKy0tCisrCitGb3IgaW5zdGFuY2UsIGlmIHlvdSBjb25maWd1cmVkIHRoZSBgZGlmZi5hbGdvcml0aG1gIHZhcmlhYmxlIHRvIGEKK25vbi1kZWZhdWx0IHZhbHVlIGFuZCB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUsIHRoZW4geW91CitoYXZlIHRvIHVzZSBgLS1kaWZmLWFsZ29yaXRobT1kZWZhdWx0YCBvcHRpb24uCisKKy0tc3RhdFs9PHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV1dOjoKKwlHZW5lcmF0ZSBhIGRpZmZzdGF0LiBCeSBkZWZhdWx0LCBhcyBtdWNoIHNwYWNlIGFzIG5lY2Vzc2FyeQorCXdpbGwgYmUgdXNlZCBmb3IgdGhlIGZpbGVuYW1lIHBhcnQsIGFuZCB0aGUgcmVzdCBmb3IgdGhlIGdyYXBoCisJcGFydC4gTWF4aW11bSB3aWR0aCBkZWZhdWx0cyB0byB0ZXJtaW5hbCB3aWR0aCwgb3IgODAgY29sdW1ucworCWlmIG5vdCBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbCwgYW5kIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisJYDx3aWR0aD5gLiBUaGUgd2lkdGggb2YgdGhlIGZpbGVuYW1lIHBhcnQgY2FuIGJlIGxpbWl0ZWQgYnkKKwlnaXZpbmcgYW5vdGhlciB3aWR0aCBgPG5hbWUtd2lkdGg+YCBhZnRlciBhIGNvbW1hLiBUaGUgd2lkdGgKKwlvZiB0aGUgZ3JhcGggcGFydCBjYW4gYmUgbGltaXRlZCBieSB1c2luZworCWAtLXN0YXQtZ3JhcGgtd2lkdGg9PHdpZHRoPmAgKGFmZmVjdHMgYWxsIGNvbW1hbmRzIGdlbmVyYXRpbmcKKwlhIHN0YXQgZ3JhcGgpIG9yIGJ5IHNldHRpbmcgYGRpZmYuc3RhdEdyYXBoV2lkdGg9PHdpZHRoPmAKKwkoZG9lcyBub3QgYWZmZWN0IGBnaXQgZm9ybWF0LXBhdGNoYCkuCisJQnkgZ2l2aW5nIGEgdGhpcmQgcGFyYW1ldGVyIGA8Y291bnQ+YCwgeW91IGNhbiBsaW1pdCB0aGUKKwlvdXRwdXQgdG8gdGhlIGZpcnN0IGA8Y291bnQ+YCBsaW5lcywgZm9sbG93ZWQgYnkgYC4uLmAgaWYKKwl0aGVyZSBhcmUgbW9yZS4KKysKK1RoZXNlIHBhcmFtZXRlcnMgY2FuIGFsc28gYmUgc2V0IGluZGl2aWR1YWxseSB3aXRoIGAtLXN0YXQtd2lkdGg9PHdpZHRoPmAsCitgLS1zdGF0LW5hbWUtd2lkdGg9PG5hbWUtd2lkdGg+YCBhbmQgYC0tc3RhdC1jb3VudD08Y291bnQ+YC4KKworLS1jb21wYWN0LXN1bW1hcnk6OgorCU91dHB1dCBhIGNvbmRlbnNlZCBzdW1tYXJ5IG9mIGV4dGVuZGVkIGhlYWRlciBpbmZvcm1hdGlvbiBzdWNoCisJYXMgZmlsZSBjcmVhdGlvbnMgb3IgZGVsZXRpb25zICgibmV3IiBvciAiZ29uZSIsIG9wdGlvbmFsbHkgIitsIgorCWlmIGl0J3MgYSBzeW1saW5rKSBhbmQgbW9kZSBjaGFuZ2VzICgiK3giIG9yICIteCIgZm9yIGFkZGluZworCW9yIHJlbW92aW5nIGV4ZWN1dGFibGUgYml0IHJlc3BlY3RpdmVseSkgaW4gZGlmZnN0YXQuIFRoZQorCWluZm9ybWF0aW9uIGlzIHB1dCBiZXR3ZWVuIHRoZSBmaWxlbmFtZSBwYXJ0IGFuZCB0aGUgZ3JhcGgKKwlwYXJ0LiBJbXBsaWVzIGAtLXN0YXRgLgorCistLW51bXN0YXQ6OgorCVNpbWlsYXIgdG8gYC0tc3RhdGAsIGJ1dCBzaG93cyBudW1iZXIgb2YgYWRkZWQgYW5kCisJZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIGFuZCBwYXRobmFtZSB3aXRob3V0CisJYWJicmV2aWF0aW9uLCB0byBtYWtlIGl0IG1vcmUgbWFjaGluZSBmcmllbmRseS4gIEZvcgorCWJpbmFyeSBmaWxlcywgb3V0cHV0cyB0d28gYC1gIGluc3RlYWQgb2Ygc2F5aW5nCisJYDAgMGAuCisKKy0tc2hvcnRzdGF0OjoKKwlPdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIHRoZSBgLS1zdGF0YCBmb3JtYXQgY29udGFpbmluZyB0b3RhbAorCW51bWJlciBvZiBtb2RpZmllZCBmaWxlcywgYXMgd2VsbCBhcyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQKKwlsaW5lcy4KKworLVhbPHBhcmFtMSxwYXJhbTIsLi4uPl06OgorLS1kaXJzdGF0Wz08cGFyYW0xLHBhcmFtMiwuLi4+XTo6CisJT3V0cHV0IHRoZSBkaXN0cmlidXRpb24gb2YgcmVsYXRpdmUgYW1vdW50IG9mIGNoYW5nZXMgZm9yIGVhY2gKKwlzdWItZGlyZWN0b3J5LiBUaGUgYmVoYXZpb3Igb2YgYC0tZGlyc3RhdGAgY2FuIGJlIGN1c3RvbWl6ZWQgYnkKKwlwYXNzaW5nIGl0IGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVycy4KKwlUaGUgZGVmYXVsdHMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGBkaWZmLmRpcnN0YXRgIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisJVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGU6CisrCistLQorYGNoYW5nZXNgOzsKKwlDb21wdXRlIHRoZSBkaXJzdGF0IG51bWJlcnMgYnkgY291bnRpbmcgdGhlIGxpbmVzIHRoYXQgaGF2ZSBiZWVuCisJcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UsIG9yIGFkZGVkIHRvIHRoZSBkZXN0aW5hdGlvbi4gVGhpcyBpZ25vcmVzCisJdGhlIGFtb3VudCBvZiBwdXJlIGNvZGUgbW92ZW1lbnRzIHdpdGhpbiBhIGZpbGUuICBJbiBvdGhlciB3b3JkcywKKwlyZWFycmFuZ2luZyBsaW5lcyBpbiBhIGZpbGUgaXMgbm90IGNvdW50ZWQgYXMgbXVjaCBhcyBvdGhlciBjaGFuZ2VzLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBubyBwYXJhbWV0ZXIgaXMgZ2l2ZW4uCitgbGluZXNgOzsKKwlDb21wdXRlIHRoZSBkaXJzdGF0IG51bWJlcnMgYnkgZG9pbmcgdGhlIHJlZ3VsYXIgbGluZS1iYXNlZCBkaWZmCisJYW5hbHlzaXMsIGFuZCBzdW1taW5nIHRoZSByZW1vdmVkL2FkZGVkIGxpbmUgY291bnRzLiAoRm9yIGJpbmFyeQorCWZpbGVzLCBjb3VudCA2NC1ieXRlIGNodW5rcyBpbnN0ZWFkLCBzaW5jZSBiaW5hcnkgZmlsZXMgaGF2ZSBubworCW5hdHVyYWwgY29uY2VwdCBvZiBsaW5lcykuIFRoaXMgaXMgYSBtb3JlIGV4cGVuc2l2ZSBgLS1kaXJzdGF0YAorCWJlaGF2aW9yIHRoYW4gdGhlIGBjaGFuZ2VzYCBiZWhhdmlvciwgYnV0IGl0IGRvZXMgY291bnQgcmVhcnJhbmdlZAorCWxpbmVzIHdpdGhpbiBhIGZpbGUgYXMgbXVjaCBhcyBvdGhlciBjaGFuZ2VzLiBUaGUgcmVzdWx0aW5nIG91dHB1dAorCWlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHlvdSBnZXQgZnJvbSB0aGUgb3RoZXIgYC0tKnN0YXRgIG9wdGlvbnMuCitgZmlsZXNgOzsKKwlDb21wdXRlIHRoZSBkaXJzdGF0IG51bWJlcnMgYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBmaWxlcyBjaGFuZ2VkLgorCUVhY2ggY2hhbmdlZCBmaWxlIGNvdW50cyBlcXVhbGx5IGluIHRoZSBkaXJzdGF0IGFuYWx5c2lzLiBUaGlzIGlzCisJdGhlIGNvbXB1dGF0aW9uYWxseSBjaGVhcGVzdCBgLS1kaXJzdGF0YCBiZWhhdmlvciwgc2luY2UgaXQgZG9lcworCW5vdCBoYXZlIHRvIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudHMgYXQgYWxsLgorYGN1bXVsYXRpdmVgOzsKKwlDb3VudCBjaGFuZ2VzIGluIGEgY2hpbGQgZGlyZWN0b3J5IGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSBhcyB3ZWxsLgorCU5vdGUgdGhhdCB3aGVuIHVzaW5nIGBjdW11bGF0aXZlYCwgdGhlIHN1bSBvZiB0aGUgcGVyY2VudGFnZXMKKwlyZXBvcnRlZCBtYXkgZXhjZWVkIDEwMCUuIFRoZSBkZWZhdWx0IChub24tY3VtdWxhdGl2ZSkgYmVoYXZpb3IgY2FuCisJYmUgc3BlY2lmaWVkIHdpdGggdGhlIGBub25jdW11bGF0aXZlYCBwYXJhbWV0ZXIuCis8bGltaXQ+OzsKKwlBbiBpbnRlZ2VyIHBhcmFtZXRlciBzcGVjaWZpZXMgYSBjdXQtb2ZmIHBlcmNlbnQgKDMlIGJ5IGRlZmF1bHQpLgorCURpcmVjdG9yaWVzIGNvbnRyaWJ1dGluZyBsZXNzIHRoYW4gdGhpcyBwZXJjZW50YWdlIG9mIHRoZSBjaGFuZ2VzCisJYXJlIG5vdCBzaG93biBpbiB0aGUgb3V0cHV0LgorLS0KKysKK0V4YW1wbGU6IFRoZSBmb2xsb3dpbmcgd2lsbCBjb3VudCBjaGFuZ2VkIGZpbGVzLCB3aGlsZSBpZ25vcmluZworZGlyZWN0b3JpZXMgd2l0aCBsZXNzIHRoYW4gMTAlIG9mIHRoZSB0b3RhbCBhbW91bnQgb2YgY2hhbmdlZCBmaWxlcywKK2FuZCBhY2N1bXVsYXRpbmcgY2hpbGQgZGlyZWN0b3J5IGNvdW50cyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzOgorYC0tZGlyc3RhdD1maWxlcywxMCxjdW11bGF0aXZlYC4KKworLS1jdW11bGF0aXZlOjoKKwlTeW5vbnltIGZvciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZQorCistLWRpcnN0YXQtYnktZmlsZVs9PHBhcmFtMSxwYXJhbTI+Li4uXTo6CisJU3lub255bSBmb3IgLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4KKworLS1zdW1tYXJ5OjoKKwlPdXRwdXQgYSBjb25kZW5zZWQgc3VtbWFyeSBvZiBleHRlbmRlZCBoZWFkZXIgaW5mb3JtYXRpb24KKwlzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1wYXRjaC13aXRoLXN0YXQ6OgorCVN5bm9ueW0gZm9yIGAtcCAtLXN0YXRgLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistejo6CitpZmRlZjo6Z2l0LWxvZ1tdCisJU2VwYXJhdGUgdGhlIGNvbW1pdHMgd2l0aCBOVUxzIGluc3RlYWQgb2Ygd2l0aCBuZXcgbmV3bGluZXMuCisrCitBbHNvLCB3aGVuIGAtLXJhd2Agb3IgYC0tbnVtc3RhdGAgaGFzIGJlZW4gZ2l2ZW4sIGRvIG5vdCBtdW5nZQorcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMuCitlbmRpZjo6Z2l0LWxvZ1tdCitpZm5kZWY6OmdpdC1sb2dbXQorCVdoZW4gYC0tcmF3YCwgYC0tbnVtc3RhdGAsIGAtLW5hbWUtb25seWAgb3IgYC0tbmFtZS1zdGF0dXNgIGhhcyBiZWVuCisJZ2l2ZW4sIGRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycy4KK2VuZGlmOjpnaXQtbG9nW10KKysKK1dpdGhvdXQgdGhpcyBvcHRpb24sIHBhdGhuYW1lcyB3aXRoICJ1bnVzdWFsIiBjaGFyYWN0ZXJzIGFyZSBxdW90ZWQgYXMKK2V4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYCAoc2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCistLW5hbWUtb25seTo6CisJU2hvdyBvbmx5IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMuCisKKy0tbmFtZS1zdGF0dXM6OgorCVNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMuIFNlZSB0aGUgZGVzY3JpcHRpb24KKwlvZiB0aGUgYC0tZGlmZi1maWx0ZXJgIG9wdGlvbiBvbiB3aGF0IHRoZSBzdGF0dXMgbGV0dGVycyBtZWFuLgorCistLXN1Ym1vZHVsZVs9PGZvcm1hdD5dOjoKKwlTcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93bi4gIFdoZW4gc3BlY2lmeWluZworCWAtLXN1Ym1vZHVsZT1zaG9ydGAgdGhlICdzaG9ydCcgZm9ybWF0IGlzIHVzZWQuICBUaGlzIGZvcm1hdCBqdXN0CisJc2hvd3MgdGhlIG5hbWVzIG9mIHRoZSBjb21taXRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgcmFuZ2UuCisJV2hlbiBgLS1zdWJtb2R1bGVgIG9yIGAtLXN1Ym1vZHVsZT1sb2dgIGlzIHNwZWNpZmllZCwgdGhlICdsb2cnCisJZm9ybWF0IGlzIHVzZWQuICBUaGlzIGZvcm1hdCBsaXN0cyB0aGUgY29tbWl0cyBpbiB0aGUgcmFuZ2UgbGlrZQorCWxpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSBgc3VtbWFyeWAgZG9lcy4gIFdoZW4gYC0tc3VibW9kdWxlPWRpZmZgCisJaXMgc3BlY2lmaWVkLCB0aGUgJ2RpZmYnIGZvcm1hdCBpcyB1c2VkLiAgVGhpcyBmb3JtYXQgc2hvd3MgYW4KKwlpbmxpbmUgZGlmZiBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgc3VibW9kdWxlIGNvbnRlbnRzIGJldHdlZW4gdGhlCisJY29tbWl0IHJhbmdlLiAgRGVmYXVsdHMgdG8gYGRpZmYuc3VibW9kdWxlYCBvciB0aGUgJ3Nob3J0JyBmb3JtYXQKKwlpZiB0aGUgY29uZmlnIG9wdGlvbiBpcyB1bnNldC4KKworLS1jb2xvcls9PHdoZW4+XTo6CisJU2hvdyBjb2xvcmVkIGRpZmYuCisJYC0tY29sb3JgIChpLmUuIHdpdGhvdXQgJz08d2hlbj4nKSBpcyB0aGUgc2FtZSBhcyBgLS1jb2xvcj1hbHdheXNgLgorCSc8d2hlbj4nIGNhbiBiZSBvbmUgb2YgYGFsd2F5c2AsIGBuZXZlcmAsIG9yIGBhdXRvYC4KK2lmZGVmOjpnaXQtZGlmZltdCisJSXQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIGBjb2xvci51aWAgYW5kIGBjb2xvci5kaWZmYAorCWNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCitlbmRpZjo6Z2l0LWRpZmZbXQorCistLW5vLWNvbG9yOjoKKwlUdXJuIG9mZiBjb2xvcmVkIGRpZmYuCitpZmRlZjo6Z2l0LWRpZmZbXQorCVRoaXMgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KK2VuZGlmOjpnaXQtZGlmZltdCisJSXQgaXMgdGhlIHNhbWUgYXMgYC0tY29sb3I9bmV2ZXJgLgorCistLWNvbG9yLW1vdmVkWz08bW9kZT5dOjoKKwlNb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5LgoraWZkZWY6OmdpdC1kaWZmW10KKwlJdCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgYGRpZmYuY29sb3JNb3ZlZGAgY29uZmlndXJhdGlvbiBzZXR0aW5nLgorZW5kaWY6OmdpdC1kaWZmW10KKwlUaGUgPG1vZGU+IGRlZmF1bHRzIHRvICdubycgaWYgdGhlIG9wdGlvbiBpcyBub3QgZ2l2ZW4KKwlhbmQgdG8gJ3plYnJhJyBpZiB0aGUgb3B0aW9uIHdpdGggbm8gbW9kZSBpcyBnaXZlbi4KKwlUaGUgbW9kZSBtdXN0IGJlIG9uZSBvZjoKKysKKy0tCitubzo6CisJTW92ZWQgbGluZXMgYXJlIG5vdCBoaWdobGlnaHRlZC4KK2RlZmF1bHQ6OgorCUlzIGEgc3lub255bSBmb3IgYHplYnJhYC4gVGhpcyBtYXkgY2hhbmdlIHRvIGEgbW9yZSBzZW5zaWJsZSBtb2RlCisJaW4gdGhlIGZ1dHVyZS4KK3BsYWluOjoKKwlBbnkgbGluZSB0aGF0IGlzIGFkZGVkIGluIG9uZSBsb2NhdGlvbiBhbmQgd2FzIHJlbW92ZWQKKwlpbiBhbm90aGVyIGxvY2F0aW9uIHdpbGwgYmUgY29sb3JlZCB3aXRoICdjb2xvci5kaWZmLm5ld01vdmVkJy4KKwlTaW1pbGFybHkgJ2NvbG9yLmRpZmYub2xkTW92ZWQnIHdpbGwgYmUgdXNlZCBmb3IgcmVtb3ZlZCBsaW5lcworCXRoYXQgYXJlIGFkZGVkIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBkaWZmLiBUaGlzIG1vZGUgcGlja3MgdXAgYW55CisJbW92ZWQgbGluZSwgYnV0IGl0IGlzIG5vdCB2ZXJ5IHVzZWZ1bCBpbiBhIHJldmlldyB0byBkZXRlcm1pbmUKKwlpZiBhIGJsb2NrIG9mIGNvZGUgd2FzIG1vdmVkIHdpdGhvdXQgcGVybXV0YXRpb24uCitibG9ja3M6OgorCUJsb2NrcyBvZiBtb3ZlZCB0ZXh0IG9mIGF0IGxlYXN0IDIwIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzCisJYXJlIGRldGVjdGVkIGdyZWVkaWx5LiBUaGUgZGV0ZWN0ZWQgYmxvY2tzIGFyZQorCXBhaW50ZWQgdXNpbmcgZWl0aGVyIHRoZSAnY29sb3IuZGlmZi57b2xkLG5ld31Nb3ZlZCcgY29sb3IuCisJQWRqYWNlbnQgYmxvY2tzIGNhbm5vdCBiZSB0b2xkIGFwYXJ0LgoremVicmE6OgorCUJsb2NrcyBvZiBtb3ZlZCB0ZXh0IGFyZSBkZXRlY3RlZCBhcyBpbiAnYmxvY2tzJyBtb2RlLiBUaGUgYmxvY2tzCisJYXJlIHBhaW50ZWQgdXNpbmcgZWl0aGVyIHRoZSAnY29sb3IuZGlmZi57b2xkLG5ld31Nb3ZlZCcgY29sb3Igb3IKKwknY29sb3IuZGlmZi57b2xkLG5ld31Nb3ZlZEFsdGVybmF0aXZlJy4gVGhlIGNoYW5nZSBiZXR3ZWVuCisJdGhlIHR3byBjb2xvcnMgaW5kaWNhdGVzIHRoYXQgYSBuZXcgYmxvY2sgd2FzIGRldGVjdGVkLgorZGltbWVkLXplYnJhOjoKKwlTaW1pbGFyIHRvICd6ZWJyYScsIGJ1dCBhZGRpdGlvbmFsIGRpbW1pbmcgb2YgdW5pbnRlcmVzdGluZyBwYXJ0cworCW9mIG1vdmVkIGNvZGUgaXMgcGVyZm9ybWVkLiBUaGUgYm9yZGVyaW5nIGxpbmVzIG9mIHR3byBhZGphY2VudAorCWJsb2NrcyBhcmUgY29uc2lkZXJlZCBpbnRlcmVzdGluZywgdGhlIHJlc3QgaXMgdW5pbnRlcmVzdGluZy4KKwlgZGltbWVkX3plYnJhYCBpcyBhIGRlcHJlY2F0ZWQgc3lub255bS4KKy0tCisKKy0tbm8tY29sb3ItbW92ZWQ6OgorCVR1cm4gb2ZmIG1vdmUgZGV0ZWN0aW9uLiBUaGlzIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KKwlzZXR0aW5ncy4gSXQgaXMgdGhlIHNhbWUgYXMgYC0tY29sb3ItbW92ZWQ9bm9gLgorCistLWNvbG9yLW1vdmVkLXdzPTxtb2Rlcz46OgorCVRoaXMgY29uZmlndXJlcyBob3cgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIHdoZW4gcGVyZm9ybWluZyB0aGUKKwltb3ZlIGRldGVjdGlvbiBmb3IgYC0tY29sb3ItbW92ZWRgLgoraWZkZWY6OmdpdC1kaWZmW10KKwlJdCBjYW4gYmUgc2V0IGJ5IHRoZSBgZGlmZi5jb2xvck1vdmVkV1NgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KK2VuZGlmOjpnaXQtZGlmZltdCisJVGhlc2UgbW9kZXMgY2FuIGJlIGdpdmVuIGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Q6CisrCistLQorbm86OgorCURvIG5vdCBpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIHBlcmZvcm1pbmcgbW92ZSBkZXRlY3Rpb24uCitpZ25vcmUtc3BhY2UtYXQtZW9sOjoKKwlJZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTC4KK2lnbm9yZS1zcGFjZS1jaGFuZ2U6OgorCUlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlLiAgVGhpcyBpZ25vcmVzIHdoaXRlc3BhY2UKKwlhdCBsaW5lIGVuZCwgYW5kIGNvbnNpZGVycyBhbGwgb3RoZXIgc2VxdWVuY2VzIG9mIG9uZSBvcgorCW1vcmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIGJlIGVxdWl2YWxlbnQuCitpZ25vcmUtYWxsLXNwYWNlOjoKKwlJZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcy4gVGhpcyBpZ25vcmVzIGRpZmZlcmVuY2VzCisJZXZlbiBpZiBvbmUgbGluZSBoYXMgd2hpdGVzcGFjZSB3aGVyZSB0aGUgb3RoZXIgbGluZSBoYXMgbm9uZS4KK2FsbG93LWluZGVudGF0aW9uLWNoYW5nZTo6CisJSW5pdGlhbGx5IGlnbm9yZSBhbnkgd2hpdGVzcGFjZSBpbiB0aGUgbW92ZSBkZXRlY3Rpb24sIHRoZW4KKwlncm91cCB0aGUgbW92ZWQgY29kZSBibG9ja3Mgb25seSBpbnRvIGEgYmxvY2sgaWYgdGhlIGNoYW5nZSBpbgorCXdoaXRlc3BhY2UgaXMgdGhlIHNhbWUgcGVyIGxpbmUuIFRoaXMgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCisJb3RoZXIgbW9kZXMuCistLQorCistLW5vLWNvbG9yLW1vdmVkLXdzOjoKKwlEbyBub3QgaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBwZXJmb3JtaW5nIG1vdmUgZGV0ZWN0aW9uLiBUaGlzIGNhbiBiZQorCXVzZWQgdG8gb3ZlcnJpZGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gSXQgaXMgdGhlIHNhbWUgYXMKKwlgLS1jb2xvci1tb3ZlZC13cz1ub2AuCisKKy0td29yZC1kaWZmWz08bW9kZT5dOjoKKwlTaG93IGEgd29yZCBkaWZmLCB1c2luZyB0aGUgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3Jkcy4KKwlCeSBkZWZhdWx0LCB3b3JkcyBhcmUgZGVsaW1pdGVkIGJ5IHdoaXRlc3BhY2U7IHNlZQorCWAtLXdvcmQtZGlmZi1yZWdleGAgYmVsb3cuICBUaGUgPG1vZGU+IGRlZmF1bHRzIHRvICdwbGFpbicsIGFuZAorCW11c3QgYmUgb25lIG9mOgorKworLS0KK2NvbG9yOjoKKwlIaWdobGlnaHQgY2hhbmdlZCB3b3JkcyB1c2luZyBvbmx5IGNvbG9ycy4gIEltcGxpZXMgYC0tY29sb3JgLgorcGxhaW46OgorCVNob3cgd29yZHMgYXMgYFstcmVtb3ZlZC1dYCBhbmQgYHsrYWRkZWQrfWAuICBNYWtlcyBubworCWF0dGVtcHRzIHRvIGVzY2FwZSB0aGUgZGVsaW1pdGVycyBpZiB0aGV5IGFwcGVhciBpbiB0aGUgaW5wdXQsCisJc28gdGhlIG91dHB1dCBtYXkgYmUgYW1iaWd1b3VzLgorcG9yY2VsYWluOjoKKwlVc2UgYSBzcGVjaWFsIGxpbmUtYmFzZWQgZm9ybWF0IGludGVuZGVkIGZvciBzY3JpcHQKKwljb25zdW1wdGlvbi4gIEFkZGVkL3JlbW92ZWQvdW5jaGFuZ2VkIHJ1bnMgYXJlIHByaW50ZWQgaW4gdGhlCisJdXN1YWwgdW5pZmllZCBkaWZmIGZvcm1hdCwgc3RhcnRpbmcgd2l0aCBhIGArYC9gLWAvYCBgCisJY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgYW5kIGV4dGVuZGluZyB0byB0aGUKKwllbmQgb2YgdGhlIGxpbmUuICBOZXdsaW5lcyBpbiB0aGUgaW5wdXQgYXJlIHJlcHJlc2VudGVkIGJ5IGEKKwl0aWxkZSBgfmAgb24gYSBsaW5lIG9mIGl0cyBvd24uCitub25lOjoKKwlEaXNhYmxlIHdvcmQgZGlmZiBhZ2Fpbi4KKy0tCisrCitOb3RlIHRoYXQgZGVzcGl0ZSB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgbW9kZSwgY29sb3IgaXMgdXNlZCB0bworaGlnaGxpZ2h0IHRoZSBjaGFuZ2VkIHBhcnRzIGluIGFsbCBtb2RlcyBpZiBlbmFibGVkLgorCistLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+OjoKKwlVc2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMsIGluc3RlYWQgb2YgY29uc2lkZXJpbmcKKwlydW5zIG9mIG5vbi13aGl0ZXNwYWNlIHRvIGJlIGEgd29yZC4gIEFsc28gaW1wbGllcworCWAtLXdvcmQtZGlmZmAgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGVuYWJsZWQuCisrCitFdmVyeSBub24tb3ZlcmxhcHBpbmcgbWF0Y2ggb2YgdGhlCis8cmVnZXg+IGlzIGNvbnNpZGVyZWQgYSB3b3JkLiAgQW55dGhpbmcgYmV0d2VlbiB0aGVzZSBtYXRjaGVzIGlzCitjb25zaWRlcmVkIHdoaXRlc3BhY2UgYW5kIGlnbm9yZWQoISkgZm9yIHRoZSBwdXJwb3NlcyBvZiBmaW5kaW5nCitkaWZmZXJlbmNlcy4gIFlvdSBtYXkgd2FudCB0byBhcHBlbmQgYHxbXls6c3BhY2U6XV1gIHRvIHlvdXIgcmVndWxhcgorZXhwcmVzc2lvbiB0byBtYWtlIHN1cmUgdGhhdCBpdCBtYXRjaGVzIGFsbCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgorQSBtYXRjaCB0aGF0IGNvbnRhaW5zIGEgbmV3bGluZSBpcyBzaWxlbnRseSB0cnVuY2F0ZWQoISkgYXQgdGhlCituZXdsaW5lLgorKworRm9yIGV4YW1wbGUsIGAtLXdvcmQtZGlmZi1yZWdleD0uYCB3aWxsIHRyZWF0IGVhY2ggY2hhcmFjdGVyIGFzIGEgd29yZAorYW5kLCBjb3JyZXNwb25kaW5nbHksIHNob3cgZGlmZmVyZW5jZXMgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4KKysKK1RoZSByZWdleCBjYW4gYWxzbyBiZSBzZXQgdmlhIGEgZGlmZiBkcml2ZXIgb3IgY29uZmlndXJhdGlvbiBvcHRpb24sIHNlZQorbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIG9yIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4gIEdpdmluZyBpdCBleHBsaWNpdGx5CitvdmVycmlkZXMgYW55IGRpZmYgZHJpdmVyIG9yIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gIERpZmYgZHJpdmVycworb3ZlcnJpZGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKworLS1jb2xvci13b3Jkc1s9PHJlZ2V4Pl06OgorCUVxdWl2YWxlbnQgdG8gYC0td29yZC1kaWZmPWNvbG9yYCBwbHVzIChpZiBhIHJlZ2V4IHdhcworCXNwZWNpZmllZCkgYC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD5gLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistLW5vLXJlbmFtZXM6OgorCVR1cm4gb2ZmIHJlbmFtZSBkZXRlY3Rpb24sIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbgorCWZpbGUgZ2l2ZXMgdGhlIGRlZmF1bHQgdG8gZG8gc28uCisKKy0tW25vLV1yZW5hbWUtZW1wdHk6OgorCVdoZXRoZXIgdG8gdXNlIGVtcHR5IGJsb2JzIGFzIHJlbmFtZSBzb3VyY2UuCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCistLWNoZWNrOjoKKwlXYXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIGNvbmZsaWN0IG1hcmtlcnMgb3Igd2hpdGVzcGFjZSBlcnJvcnMuCisJV2hhdCBhcmUgY29uc2lkZXJlZCB3aGl0ZXNwYWNlIGVycm9ycyBpcyBjb250cm9sbGVkIGJ5IGBjb3JlLndoaXRlc3BhY2VgCisJY29uZmlndXJhdGlvbi4gIEJ5IGRlZmF1bHQsIHRyYWlsaW5nIHdoaXRlc3BhY2VzIChpbmNsdWRpbmcKKwlsaW5lcyB0aGF0IGNvbnNpc3Qgc29sZWx5IG9mIHdoaXRlc3BhY2VzKSBhbmQgYSBzcGFjZSBjaGFyYWN0ZXIKKwl0aGF0IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgdGFiIGNoYXJhY3RlciBpbnNpZGUgdGhlCisJaW5pdGlhbCBpbmRlbnQgb2YgdGhlIGxpbmUgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMuCisJRXhpdHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgcHJvYmxlbXMgYXJlIGZvdW5kLiBOb3QgY29tcGF0aWJsZQorCXdpdGggLS1leGl0LWNvZGUuCisKKy0td3MtZXJyb3ItaGlnaGxpZ2h0PTxraW5kPjo6CisJSGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSBgY29udGV4dGAsIGBvbGRgIG9yIGBuZXdgCisJbGluZXMgb2YgdGhlIGRpZmYuICBNdWx0aXBsZSB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBieSBjb21tYSwKKwlgbm9uZWAgcmVzZXRzIHByZXZpb3VzIHZhbHVlcywgYGRlZmF1bHRgIHJlc2V0IHRoZSBsaXN0IHRvCisJYG5ld2AgYW5kIGBhbGxgIGlzIGEgc2hvcnRoYW5kIGZvciBgb2xkLG5ldyxjb250ZXh0YC4gIFdoZW4KKwl0aGlzIG9wdGlvbiBpcyBub3QgZ2l2ZW4sIGFuZCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWBkaWZmLndzRXJyb3JIaWdobGlnaHRgIGlzIG5vdCBzZXQsIG9ubHkgd2hpdGVzcGFjZSBlcnJvcnMgaW4KKwlgbmV3YCBsaW5lcyBhcmUgaGlnaGxpZ2h0ZWQuIFRoZSB3aGl0ZXNwYWNlIGVycm9ycyBhcmUgY29sb3JlZAorCXdpdGggYGNvbG9yLmRpZmYud2hpdGVzcGFjZWAuCisKK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLS1mdWxsLWluZGV4OjoKKwlJbnN0ZWFkIG9mIHRoZSBmaXJzdCBoYW5kZnVsIG9mIGNoYXJhY3RlcnMsIHNob3cgdGhlIGZ1bGwKKwlwcmUtIGFuZCBwb3N0LWltYWdlIGJsb2Igb2JqZWN0IG5hbWVzIG9uIHRoZSAiaW5kZXgiCisJbGluZSB3aGVuIGdlbmVyYXRpbmcgcGF0Y2ggZm9ybWF0IG91dHB1dC4KKworLS1iaW5hcnk6OgorCUluIGFkZGl0aW9uIHRvIGAtLWZ1bGwtaW5kZXhgLCBvdXRwdXQgYSBiaW5hcnkgZGlmZiB0aGF0CisJY2FuIGJlIGFwcGxpZWQgd2l0aCBgZ2l0LWFwcGx5YC4gSW1wbGllcyBgLS1wYXRjaGAuCisKKy0tYWJicmV2Wz08bj5dOjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgdGhlIGZ1bGwgNDAtYnl0ZSBoZXhhZGVjaW1hbCBvYmplY3QKKwluYW1lIGluIGRpZmYtcmF3IGZvcm1hdCBvdXRwdXQgYW5kIGRpZmYtdHJlZSBoZWFkZXIKKwlsaW5lcywgc2hvdyBvbmx5IGEgcGFydGlhbCBwcmVmaXguICBUaGlzIGlzCisJaW5kZXBlbmRlbnQgb2YgdGhlIGAtLWZ1bGwtaW5kZXhgIG9wdGlvbiBhYm92ZSwgd2hpY2ggY29udHJvbHMKKwl0aGUgZGlmZi1wYXRjaCBvdXRwdXQgZm9ybWF0LiAgTm9uIGRlZmF1bHQgbnVtYmVyIG9mCisJZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCBgLS1hYmJyZXY9PG4+YC4KKworLUJbPG4+XVsvPG0+XTo6CistLWJyZWFrLXJld3JpdGVzWz1bPG4+XVsvPG0+XV06OgorCUJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQKKwljcmVhdGUuIFRoaXMgc2VydmVzIHR3byBwdXJwb3NlczoKKysKK0l0IGFmZmVjdHMgdGhlIHdheSBhIGNoYW5nZSB0aGF0IGFtb3VudHMgdG8gYSB0b3RhbCByZXdyaXRlIG9mIGEgZmlsZQorbm90IGFzIGEgc2VyaWVzIG9mIGRlbGV0aW9uIGFuZCBpbnNlcnRpb24gbWl4ZWQgdG9nZXRoZXIgd2l0aCBhIHZlcnkKK2ZldyBsaW5lcyB0aGF0IGhhcHBlbiB0byBtYXRjaCB0ZXh0dWFsbHkgYXMgdGhlIGNvbnRleHQsIGJ1dCBhcyBhCitzaW5nbGUgZGVsZXRpb24gb2YgZXZlcnl0aGluZyBvbGQgZm9sbG93ZWQgYnkgYSBzaW5nbGUgaW5zZXJ0aW9uIG9mCitldmVyeXRoaW5nIG5ldywgYW5kIHRoZSBudW1iZXIgYG1gIGNvbnRyb2xzIHRoaXMgYXNwZWN0IG9mIHRoZSAtQgorb3B0aW9uIChkZWZhdWx0cyB0byA2MCUpLiBgLUIvNzAlYCBzcGVjaWZpZXMgdGhhdCBsZXNzIHRoYW4gMzAlIG9mIHRoZQorb3JpZ2luYWwgc2hvdWxkIHJlbWFpbiBpbiB0aGUgcmVzdWx0IGZvciBHaXQgdG8gY29uc2lkZXIgaXQgYSB0b3RhbAorcmV3cml0ZSAoaS5lLiBvdGhlcndpc2UgdGhlIHJlc3VsdGluZyBwYXRjaCB3aWxsIGJlIGEgc2VyaWVzIG9mCitkZWxldGlvbiBhbmQgaW5zZXJ0aW9uIG1peGVkIHRvZ2V0aGVyIHdpdGggY29udGV4dCBsaW5lcykuCisrCitXaGVuIHVzZWQgd2l0aCAtTSwgYSB0b3RhbGx5LXJld3JpdHRlbiBmaWxlIGlzIGFsc28gY29uc2lkZXJlZCBhcyB0aGUKK3NvdXJjZSBvZiBhIHJlbmFtZSAodXN1YWxseSAtTSBvbmx5IGNvbnNpZGVycyBhIGZpbGUgdGhhdCBkaXNhcHBlYXJlZAorYXMgdGhlIHNvdXJjZSBvZiBhIHJlbmFtZSksIGFuZCB0aGUgbnVtYmVyIGBuYCBjb250cm9scyB0aGlzIGFzcGVjdCBvZgordGhlIC1CIG9wdGlvbiAoZGVmYXVsdHMgdG8gNTAlKS4gYC1CMjAlYCBzcGVjaWZpZXMgdGhhdCBhIGNoYW5nZSB3aXRoCithZGRpdGlvbiBhbmQgZGVsZXRpb24gY29tcGFyZWQgdG8gMjAlIG9yIG1vcmUgb2YgdGhlIGZpbGUncyBzaXplIGFyZQorZWxpZ2libGUgZm9yIGJlaW5nIHBpY2tlZCB1cCBhcyBhIHBvc3NpYmxlIHNvdXJjZSBvZiBhIHJlbmFtZSB0bworYW5vdGhlciBmaWxlLgorCistTVs8bj5dOjoKKy0tZmluZC1yZW5hbWVzWz08bj5dOjoKK2lmbmRlZjo6Z2l0LWxvZ1tdCisJRGV0ZWN0IHJlbmFtZXMuCitlbmRpZjo6Z2l0LWxvZ1tdCitpZmRlZjo6Z2l0LWxvZ1tdCisJSWYgZ2VuZXJhdGluZyBkaWZmcywgZGV0ZWN0IGFuZCByZXBvcnQgcmVuYW1lcyBmb3IgZWFjaCBjb21taXQuCisJRm9yIGZvbGxvd2luZyBmaWxlcyBhY3Jvc3MgcmVuYW1lcyB3aGlsZSB0cmF2ZXJzaW5nIGhpc3RvcnksIHNlZQorCWAtLWZvbGxvd2AuCitlbmRpZjo6Z2l0LWxvZ1tdCisJSWYgYG5gIGlzIHNwZWNpZmllZCwgaXQgaXMgYSB0aHJlc2hvbGQgb24gdGhlIHNpbWlsYXJpdHkKKwlpbmRleCAoaS5lLiBhbW91bnQgb2YgYWRkaXRpb24vZGVsZXRpb25zIGNvbXBhcmVkIHRvIHRoZQorCWZpbGUncyBzaXplKS4gRm9yIGV4YW1wbGUsIGAtTTkwJWAgbWVhbnMgR2l0IHNob3VsZCBjb25zaWRlciBhCisJZGVsZXRlL2FkZCBwYWlyIHRvIGJlIGEgcmVuYW1lIGlmIG1vcmUgdGhhbiA5MCUgb2YgdGhlIGZpbGUKKwloYXNuJ3QgY2hhbmdlZC4gIFdpdGhvdXQgYSBgJWAgc2lnbiwgdGhlIG51bWJlciBpcyB0byBiZSByZWFkIGFzCisJYSBmcmFjdGlvbiwgd2l0aCBhIGRlY2ltYWwgcG9pbnQgYmVmb3JlIGl0LiAgSS5lLiwgYC1NNWAgYmVjb21lcworCTAuNSwgYW5kIGlzIHRodXMgdGhlIHNhbWUgYXMgYC1NNTAlYC4gIFNpbWlsYXJseSwgYC1NMDVgIGlzCisJdGhlIHNhbWUgYXMgYC1NNSVgLiAgVG8gbGltaXQgZGV0ZWN0aW9uIHRvIGV4YWN0IHJlbmFtZXMsIHVzZQorCWAtTTEwMCVgLiAgVGhlIGRlZmF1bHQgc2ltaWxhcml0eSBpbmRleCBpcyA1MCUuCisKKy1DWzxuPl06OgorLS1maW5kLWNvcGllc1s9PG4+XTo6CisJRGV0ZWN0IGNvcGllcyBhcyB3ZWxsIGFzIHJlbmFtZXMuICBTZWUgYWxzbyBgLS1maW5kLWNvcGllcy1oYXJkZXJgLgorCUlmIGBuYCBpcyBzcGVjaWZpZWQsIGl0IGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciBgLU08bj5gLgorCistLWZpbmQtY29waWVzLWhhcmRlcjo6CisJRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGJ5IGRlZmF1bHQsIGAtQ2Agb3B0aW9uIGZpbmRzIGNvcGllcyBvbmx5CisJaWYgdGhlIG9yaWdpbmFsIGZpbGUgb2YgdGhlIGNvcHkgd2FzIG1vZGlmaWVkIGluIHRoZSBzYW1lCisJY2hhbmdlc2V0LiAgVGhpcyBmbGFnIG1ha2VzIHRoZSBjb21tYW5kCisJaW5zcGVjdCB1bm1vZGlmaWVkIGZpbGVzIGFzIGNhbmRpZGF0ZXMgZm9yIHRoZSBzb3VyY2Ugb2YKKwljb3B5LiAgVGhpcyBpcyBhIHZlcnkgZXhwZW5zaXZlIG9wZXJhdGlvbiBmb3IgbGFyZ2UKKwlwcm9qZWN0cywgc28gdXNlIGl0IHdpdGggY2F1dGlvbi4gIEdpdmluZyBtb3JlIHRoYW4gb25lCisJYC1DYCBvcHRpb24gaGFzIHRoZSBzYW1lIGVmZmVjdC4KKworLUQ6OgorLS1pcnJldmVyc2libGUtZGVsZXRlOjoKKwlPbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcywgaS5lLiBwcmludCBvbmx5IHRoZSBoZWFkZXIgYnV0IG5vdAorCXRoZSBkaWZmIGJldHdlZW4gdGhlIHByZWltYWdlIGFuZCBgL2Rldi9udWxsYC4gVGhlIHJlc3VsdGluZyBwYXRjaAorCWlzIG5vdCBtZWFudCB0byBiZSBhcHBsaWVkIHdpdGggYHBhdGNoYCBvciBgZ2l0IGFwcGx5YDsgdGhpcyBpcworCXNvbGVseSBmb3IgcGVvcGxlIHdobyB3YW50IHRvIGp1c3QgY29uY2VudHJhdGUgb24gcmV2aWV3aW5nIHRoZQorCXRleHQgYWZ0ZXIgdGhlIGNoYW5nZS4gSW4gYWRkaXRpb24sIHRoZSBvdXRwdXQgb2J2aW91c2x5IGxhY2tzCisJZW5vdWdoIGluZm9ybWF0aW9uIHRvIGFwcGx5IHN1Y2ggYSBwYXRjaCBpbiByZXZlcnNlLCBldmVuIG1hbnVhbGx5LAorCWhlbmNlIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24uCisrCitXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aCBgLUJgLCBvbWl0IGFsc28gdGhlIHByZWltYWdlIGluIHRoZSBkZWxldGlvbiBwYXJ0CitvZiBhIGRlbGV0ZS9jcmVhdGUgcGFpci4KKworLWw8bnVtPjo6CisJVGhlIGAtTWAgYW5kIGAtQ2Agb3B0aW9ucyByZXF1aXJlIE8obl4yKSBwcm9jZXNzaW5nIHRpbWUgd2hlcmUgbgorCWlzIHRoZSBudW1iZXIgb2YgcG90ZW50aWFsIHJlbmFtZS9jb3B5IHRhcmdldHMuICBUaGlzCisJb3B0aW9uIHByZXZlbnRzIHJlbmFtZS9jb3B5IGRldGVjdGlvbiBmcm9tIHJ1bm5pbmcgaWYKKwl0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyB0aGUgc3BlY2lmaWVkCisJbnVtYmVyLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1kaWZmLWZpbHRlcj1bKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV06OgorCVNlbGVjdCBvbmx5IGZpbGVzIHRoYXQgYXJlIEFkZGVkIChgQWApLCBDb3BpZWQgKGBDYCksCisJRGVsZXRlZCAoYERgKSwgTW9kaWZpZWQgKGBNYCksIFJlbmFtZWQgKGBSYCksIGhhdmUgdGhlaXIKKwl0eXBlIChpLmUuIHJlZ3VsYXIgZmlsZSwgc3ltbGluaywgc3VibW9kdWxlLCAuLi4pIGNoYW5nZWQgKGBUYCksCisJYXJlIFVubWVyZ2VkIChgVWApLCBhcmUKKwlVbmtub3duIChgWGApLCBvciBoYXZlIGhhZCB0aGVpciBwYWlyaW5nIEJyb2tlbiAoYEJgKS4KKwlBbnkgY29tYmluYXRpb24gb2YgdGhlIGZpbHRlciBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgbm9uZSkgY2FuIGJlIHVzZWQuCisJV2hlbiBgKmAgKEFsbC1vci1ub25lKSBpcyBhZGRlZCB0byB0aGUgY29tYmluYXRpb24sIGFsbAorCXBhdGhzIGFyZSBzZWxlY3RlZCBpZiB0aGVyZSBpcyBhbnkgZmlsZSB0aGF0IG1hdGNoZXMKKwlvdGhlciBjcml0ZXJpYSBpbiB0aGUgY29tcGFyaXNvbjsgaWYgdGhlcmUgaXMgbm8gZmlsZQorCXRoYXQgbWF0Y2hlcyBvdGhlciBjcml0ZXJpYSwgbm90aGluZyBpcyBzZWxlY3RlZC4KKysKK0Fsc28sIHRoZXNlIHVwcGVyLWNhc2UgbGV0dGVycyBjYW4gYmUgZG93bmNhc2VkIHRvIGV4Y2x1ZGUuICBFLmcuCitgLS1kaWZmLWZpbHRlcj1hZGAgZXhjbHVkZXMgYWRkZWQgYW5kIGRlbGV0ZWQgcGF0aHMuCisrCitOb3RlIHRoYXQgbm90IGFsbCBkaWZmcyBjYW4gZmVhdHVyZSBhbGwgdHlwZXMuIEZvciBpbnN0YW5jZSwgZGlmZnMKK2Zyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUgY2FuIG5ldmVyIGhhdmUgQWRkZWQgZW50cmllcworKGJlY2F1c2UgdGhlIHNldCBvZiBwYXRocyBpbmNsdWRlZCBpbiB0aGUgZGlmZiBpcyBsaW1pdGVkIGJ5IHdoYXQgaXMgaW4KK3RoZSBpbmRleCkuICBTaW1pbGFybHksIGNvcGllZCBhbmQgcmVuYW1lZCBlbnRyaWVzIGNhbm5vdCBhcHBlYXIgaWYKK2RldGVjdGlvbiBmb3IgdGhvc2UgdHlwZXMgaXMgZGlzYWJsZWQuCisKKy1TPHN0cmluZz46OgorCUxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YKKwl0aGUgc3BlY2lmaWVkIHN0cmluZyAoaS5lLiBhZGRpdGlvbi9kZWxldGlvbikgaW4gYSBmaWxlLgorCUludGVuZGVkIGZvciB0aGUgc2NyaXB0ZXIncyB1c2UuCisrCitJdCBpcyB1c2VmdWwgd2hlbiB5b3UncmUgbG9va2luZyBmb3IgYW4gZXhhY3QgYmxvY2sgb2YgY29kZSAobGlrZSBhCitzdHJ1Y3QpLCBhbmQgd2FudCB0byBrbm93IHRoZSBoaXN0b3J5IG9mIHRoYXQgYmxvY2sgc2luY2UgaXQgZmlyc3QKK2NhbWUgaW50byBiZWluZzogdXNlIHRoZSBmZWF0dXJlIGl0ZXJhdGl2ZWx5IHRvIGZlZWQgdGhlIGludGVyZXN0aW5nCitibG9jayBpbiB0aGUgcHJlaW1hZ2UgYmFjayBpbnRvIGAtU2AsIGFuZCBrZWVwIGdvaW5nIHVudGlsIHlvdSBnZXQgdGhlCit2ZXJ5IGZpcnN0IHZlcnNpb24gb2YgdGhlIGJsb2NrLgorKworQmluYXJ5IGZpbGVzIGFyZSBzZWFyY2hlZCBhcyB3ZWxsLgorCistRzxyZWdleD46OgorCUxvb2sgZm9yIGRpZmZlcmVuY2VzIHdob3NlIHBhdGNoIHRleHQgY29udGFpbnMgYWRkZWQvcmVtb3ZlZAorCWxpbmVzIHRoYXQgbWF0Y2ggPHJlZ2V4Pi4KKysKK1RvIGlsbHVzdHJhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgLVM8cmVnZXg+IC0tcGlja2F4ZS1yZWdleGAgYW5kCitgLUc8cmVnZXg+YCwgY29uc2lkZXIgYSBjb21taXQgd2l0aCB0aGUgZm9sbG93aW5nIGRpZmYgaW4gdGhlIHNhbWUKK2ZpbGU6CisrCistLS0tCisrICAgIHJldHVybiBmcm90eihuaXRmb2wsIHR3by0+cHRyLCAxLCAwKTsKKy4uLgorLSAgICBoaXQgPSBmcm90eihuaXRmb2wsIG1mMi5wdHIsIDEsIDApOworLS0tLQorKworV2hpbGUgYGdpdCBsb2cgLUciZnJvdHpcKG5pdGZvbCJgIHdpbGwgc2hvdyB0aGlzIGNvbW1pdCwgYGdpdCBsb2cKKy1TImZyb3R6XChuaXRmb2wiIC0tcGlja2F4ZS1yZWdleGAgd2lsbCBub3QgKGJlY2F1c2UgdGhlIG51bWJlciBvZgorb2NjdXJyZW5jZXMgb2YgdGhhdCBzdHJpbmcgZGlkIG5vdCBjaGFuZ2UpLgorKworVW5sZXNzIGAtLXRleHRgIGlzIHN1cHBsaWVkIHBhdGNoZXMgb2YgYmluYXJ5IGZpbGVzIHdpdGhvdXQgYSB0ZXh0Y29udgorZmlsdGVyIHdpbGwgYmUgaWdub3JlZC4KKysKK1NlZSB0aGUgJ3BpY2theGUnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCistLWZpbmQtb2JqZWN0PTxvYmplY3QtaWQ+OjoKKwlMb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mCisJdGhlIHNwZWNpZmllZCBvYmplY3QuIFNpbWlsYXIgdG8gYC1TYCwganVzdCB0aGUgYXJndW1lbnQgaXMgZGlmZmVyZW50CisJaW4gdGhhdCBpdCBkb2Vzbid0IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyBzdHJpbmcgYnV0IGZvciBhIHNwZWNpZmljCisJb2JqZWN0IGlkLgorKworVGhlIG9iamVjdCBjYW4gYmUgYSBibG9iIG9yIGEgc3VibW9kdWxlIGNvbW1pdC4gSXQgaW1wbGllcyB0aGUgYC10YCBvcHRpb24gaW4KK2BnaXQtbG9nYCB0byBhbHNvIGZpbmQgdHJlZXMuCisKKy0tcGlja2F4ZS1hbGw6OgorCVdoZW4gYC1TYCBvciBgLUdgIGZpbmRzIGEgY2hhbmdlLCBzaG93IGFsbCB0aGUgY2hhbmdlcyBpbiB0aGF0CisJY2hhbmdlc2V0LCBub3QganVzdCB0aGUgZmlsZXMgdGhhdCBjb250YWluIHRoZSBjaGFuZ2UKKwlpbiA8c3RyaW5nPi4KKworLS1waWNrYXhlLXJlZ2V4OjoKKwlUcmVhdCB0aGUgPHN0cmluZz4gZ2l2ZW4gdG8gYC1TYCBhcyBhbiBleHRlbmRlZCBQT1NJWCByZWd1bGFyCisJZXhwcmVzc2lvbiB0byBtYXRjaC4KKworZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistTzxvcmRlcmZpbGU+OjoKKwlDb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dC4KKwlUaGlzIG92ZXJyaWRlcyB0aGUgYGRpZmYub3JkZXJGaWxlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisJKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiAgVG8gY2FuY2VsIGBkaWZmLm9yZGVyRmlsZWAsCisJdXNlIGAtTy9kZXYvbnVsbGAuCisrCitUaGUgb3V0cHV0IG9yZGVyIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIG9mIGdsb2IgcGF0dGVybnMgaW4KKzxvcmRlcmZpbGU+LgorQWxsIGZpbGVzIHdpdGggcGF0aG5hbWVzIHRoYXQgbWF0Y2ggdGhlIGZpcnN0IHBhdHRlcm4gYXJlIG91dHB1dAorZmlyc3QsIGFsbCBmaWxlcyB3aXRoIHBhdGhuYW1lcyB0aGF0IG1hdGNoIHRoZSBzZWNvbmQgcGF0dGVybiAoYnV0IG5vdAordGhlIGZpcnN0KSBhcmUgb3V0cHV0IG5leHQsIGFuZCBzbyBvbi4KK0FsbCBmaWxlcyB3aXRoIHBhdGhuYW1lcyB0aGF0IGRvIG5vdCBtYXRjaCBhbnkgcGF0dGVybiBhcmUgb3V0cHV0CitsYXN0LCBhcyBpZiB0aGVyZSB3YXMgYW4gaW1wbGljaXQgbWF0Y2gtYWxsIHBhdHRlcm4gYXQgdGhlIGVuZCBvZiB0aGUKK2ZpbGUuCitJZiBtdWx0aXBsZSBwYXRobmFtZXMgaGF2ZSB0aGUgc2FtZSByYW5rICh0aGV5IG1hdGNoIHRoZSBzYW1lIHBhdHRlcm4KK2J1dCBubyBlYXJsaWVyIHBhdHRlcm5zKSwgdGhlaXIgb3V0cHV0IG9yZGVyIHJlbGF0aXZlIHRvIGVhY2ggb3RoZXIgaXMKK3RoZSBub3JtYWwgb3JkZXIuCisrCis8b3JkZXJmaWxlPiBpcyBwYXJzZWQgYXMgZm9sbG93czoKKysKKy0tCisgLSBCbGFuayBsaW5lcyBhcmUgaWdub3JlZCwgc28gdGhleSBjYW4gYmUgdXNlZCBhcyBzZXBhcmF0b3JzIGZvcgorICAgcmVhZGFiaWxpdHkuCisKKyAtIExpbmVzIHN0YXJ0aW5nIHdpdGggYSBoYXNoICgiYCNgIikgYXJlIGlnbm9yZWQsIHNvIHRoZXkgY2FuIGJlIHVzZWQKKyAgIGZvciBjb21tZW50cy4gIEFkZCBhIGJhY2tzbGFzaCAoImBcYCIpIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICBwYXR0ZXJuIGlmIGl0IHN0YXJ0cyB3aXRoIGEgaGFzaC4KKworIC0gRWFjaCBvdGhlciBsaW5lIGNvbnRhaW5zIGEgc2luZ2xlIHBhdHRlcm4uCistLQorKworUGF0dGVybnMgaGF2ZSB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyBwYXR0ZXJucyB1c2VkIGZvcgorZm5tYXRjaCgzKSB3aXRob3V0IHRoZSBGTk1fUEFUSE5BTUUgZmxhZywgZXhjZXB0IGEgcGF0aG5hbWUgYWxzbworbWF0Y2hlcyBhIHBhdHRlcm4gaWYgcmVtb3ZpbmcgYW55IG51bWJlciBvZiB0aGUgZmluYWwgcGF0aG5hbWUKK2NvbXBvbmVudHMgbWF0Y2hlcyB0aGUgcGF0dGVybi4gIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybiAiYGZvbypiYXJgIgorbWF0Y2hlcyAiYGZvb2FzZGZiYXJgIiBhbmQgImBmb28vYmFyL2Jhei9hc2RmYCIgYnV0IG5vdCAiYGZvb2JhcnhgIi4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy1SOjoKKwlTd2FwIHR3byBpbnB1dHM7IHRoYXQgaXMsIHNob3cgZGlmZmVyZW5jZXMgZnJvbSBpbmRleCBvcgorCW9uLWRpc2sgZmlsZSB0byB0cmVlIGNvbnRlbnRzLgorCistLXJlbGF0aXZlWz08cGF0aD5dOjoKKwlXaGVuIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LCBpdCBjYW4gYmUKKwl0b2xkIHRvIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIHRoZSBkaXJlY3RvcnkgYW5kIHNob3cKKwlwYXRobmFtZXMgcmVsYXRpdmUgdG8gaXQgd2l0aCB0aGlzIG9wdGlvbi4gIFdoZW4geW91IGFyZQorCW5vdCBpbiBhIHN1YmRpcmVjdG9yeSAoZS5nLiBpbiBhIGJhcmUgcmVwb3NpdG9yeSksIHlvdQorCWNhbiBuYW1lIHdoaWNoIHN1YmRpcmVjdG9yeSB0byBtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUKKwl0byBieSBnaXZpbmcgYSA8cGF0aD4gYXMgYW4gYXJndW1lbnQuCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy1hOjoKKy0tdGV4dDo6CisJVHJlYXQgYWxsIGZpbGVzIGFzIHRleHQuCisKKy0taWdub3JlLWNyLWF0LWVvbDo6CisJSWdub3JlIGNhcnJpYWdlLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUgd2hlbiBkb2luZyBhIGNvbXBhcmlzb24uCisKKy0taWdub3JlLXNwYWNlLWF0LWVvbDo6CisJSWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wuCisKKy1iOjoKKy0taWdub3JlLXNwYWNlLWNoYW5nZTo6CisJSWdub3JlIGNoYW5nZXMgaW4gYW1vdW50IG9mIHdoaXRlc3BhY2UuICBUaGlzIGlnbm9yZXMgd2hpdGVzcGFjZQorCWF0IGxpbmUgZW5kLCBhbmQgY29uc2lkZXJzIGFsbCBvdGhlciBzZXF1ZW5jZXMgb2Ygb25lIG9yCisJbW9yZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gYmUgZXF1aXZhbGVudC4KKworLXc6OgorLS1pZ25vcmUtYWxsLXNwYWNlOjoKKwlJZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcy4gIFRoaXMgaWdub3JlcworCWRpZmZlcmVuY2VzIGV2ZW4gaWYgb25lIGxpbmUgaGFzIHdoaXRlc3BhY2Ugd2hlcmUgdGhlIG90aGVyCisJbGluZSBoYXMgbm9uZS4KKworLS1pZ25vcmUtYmxhbmstbGluZXM6OgorCUlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsuCisKKy0taW50ZXItaHVuay1jb250ZXh0PTxsaW5lcz46OgorCVNob3cgdGhlIGNvbnRleHQgYmV0d2VlbiBkaWZmIGh1bmtzLCB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlcgorCW9mIGxpbmVzLCB0aGVyZWJ5IGZ1c2luZyBodW5rcyB0aGF0IGFyZSBjbG9zZSB0byBlYWNoIG90aGVyLgorCURlZmF1bHRzIHRvIGBkaWZmLmludGVySHVua0NvbnRleHRgIG9yIDAgaWYgdGhlIGNvbmZpZyBvcHRpb24KKwlpcyB1bnNldC4KKworLVc6OgorLS1mdW5jdGlvbi1jb250ZXh0OjoKKwlTaG93IHdob2xlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBvZiBjaGFuZ2VzLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQoraWZuZGVmOjpnaXQtbG9nW10KKy0tZXhpdC1jb2RlOjoKKwlNYWtlIHRoZSBwcm9ncmFtIGV4aXQgd2l0aCBjb2RlcyBzaW1pbGFyIHRvIGRpZmYoMSkuCisJVGhhdCBpcywgaXQgZXhpdHMgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMgYW5kCisJMCBtZWFucyBubyBkaWZmZXJlbmNlcy4KKworLS1xdWlldDo6CisJRGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtLiBJbXBsaWVzIGAtLWV4aXQtY29kZWAuCitlbmRpZjo6Z2l0LWxvZ1tdCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy0tZXh0LWRpZmY6OgorCUFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkLiBJZiB5b3Ugc2V0IGFuCisJZXh0ZXJuYWwgZGlmZiBkcml2ZXIgd2l0aCBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0sIHlvdSBuZWVkCisJdG8gdXNlIHRoaXMgb3B0aW9uIHdpdGggbGlua2dpdDpnaXQtbG9nWzFdIGFuZCBmcmllbmRzLgorCistLW5vLWV4dC1kaWZmOjoKKwlEaXNhbGxvdyBleHRlcm5hbCBkaWZmIGRyaXZlcnMuCisKKy0tdGV4dGNvbnY6OgorLS1uby10ZXh0Y29udjo6CisJQWxsb3cgKG9yIGRpc2FsbG93KSBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB0byBiZSBydW4KKwl3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMuIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yCisJZGV0YWlscy4gQmVjYXVzZSB0ZXh0Y29udiBmaWx0ZXJzIGFyZSB0eXBpY2FsbHkgYSBvbmUtd2F5CisJY29udmVyc2lvbiwgdGhlIHJlc3VsdGluZyBkaWZmIGlzIHN1aXRhYmxlIGZvciBodW1hbgorCWNvbnN1bXB0aW9uLCBidXQgY2Fubm90IGJlIGFwcGxpZWQuIEZvciB0aGlzIHJlYXNvbiwgdGV4dGNvbnYKKwlmaWx0ZXJzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgb25seSBmb3IgbGlua2dpdDpnaXQtZGlmZlsxXSBhbmQKKwlsaW5rZ2l0OmdpdC1sb2dbMV0sIGJ1dCBub3QgZm9yIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSBvcgorCWRpZmYgcGx1bWJpbmcgY29tbWFuZHMuCisKKy0taWdub3JlLXN1Ym1vZHVsZXNbPTx3aGVuPl06OgorCUlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbi4gPHdoZW4+IGNhbiBiZQorCWVpdGhlciAibm9uZSIsICJ1bnRyYWNrZWQiLCAiZGlydHkiIG9yICJhbGwiLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4KKwlVc2luZyAibm9uZSIgd2lsbCBjb25zaWRlciB0aGUgc3VibW9kdWxlIG1vZGlmaWVkIHdoZW4gaXQgZWl0aGVyIGNvbnRhaW5zCisJdW50cmFja2VkIG9yIG1vZGlmaWVkIGZpbGVzIG9yIGl0cyBIRUFEIGRpZmZlcnMgZnJvbSB0aGUgY29tbWl0IHJlY29yZGVkCisJaW4gdGhlIHN1cGVycHJvamVjdCBhbmQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IHNldHRpbmdzIG9mIHRoZQorCSdpZ25vcmUnIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0gb3IgbGlua2dpdDpnaXRtb2R1bGVzWzVdLiBXaGVuCisJInVudHJhY2tlZCIgaXMgdXNlZCBzdWJtb2R1bGVzIGFyZSBub3QgY29uc2lkZXJlZCBkaXJ0eSB3aGVuIHRoZXkgb25seQorCWNvbnRhaW4gdW50cmFja2VkIGNvbnRlbnQgKGJ1dCB0aGV5IGFyZSBzdGlsbCBzY2FubmVkIGZvciBtb2RpZmllZAorCWNvbnRlbnQpLiBVc2luZyAiZGlydHkiIGlnbm9yZXMgYWxsIGNoYW5nZXMgdG8gdGhlIHdvcmsgdHJlZSBvZiBzdWJtb2R1bGVzLAorCW9ubHkgY2hhbmdlcyB0byB0aGUgY29tbWl0cyBzdG9yZWQgaW4gdGhlIHN1cGVycHJvamVjdCBhcmUgc2hvd24gKHRoaXMgd2FzCisJdGhlIGJlaGF2aW9yIHVudGlsIDEuNy4wKS4gVXNpbmcgImFsbCIgaGlkZXMgYWxsIGNoYW5nZXMgdG8gc3VibW9kdWxlcy4KKworLS1zcmMtcHJlZml4PTxwcmVmaXg+OjoKKwlTaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgImEvIi4KKworLS1kc3QtcHJlZml4PTxwcmVmaXg+OjoKKwlTaG93IHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBwcmVmaXggaW5zdGVhZCBvZiAiYi8iLgorCistLW5vLXByZWZpeDo6CisJRG8gbm90IHNob3cgYW55IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcmVmaXguCisKKy0tbGluZS1wcmVmaXg9PHByZWZpeD46OgorCVByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQuCisKKy0taXRhLWludmlzaWJsZS1pbi1pbmRleDo6CisJQnkgZGVmYXVsdCBlbnRyaWVzIGFkZGVkIGJ5ICJnaXQgYWRkIC1OIiBhcHBlYXIgYXMgYW4gZXhpc3RpbmcKKwllbXB0eSBmaWxlIGluICJnaXQgZGlmZiIgYW5kIGEgbmV3IGZpbGUgaW4gImdpdCBkaWZmIC0tY2FjaGVkIi4KKwlUaGlzIG9wdGlvbiBtYWtlcyB0aGUgZW50cnkgYXBwZWFyIGFzIGEgbmV3IGZpbGUgaW4gImdpdCBkaWZmIgorCWFuZCBub24tZXhpc3RlbnQgaW4gImdpdCBkaWZmIC0tY2FjaGVkIi4gVGhpcyBvcHRpb24gY291bGQgYmUKKwlyZXZlcnRlZCB3aXRoIGAtLWl0YS12aXNpYmxlLWluLWluZGV4YC4gQm90aCBvcHRpb25zIGFyZQorCWV4cGVyaW1lbnRhbCBhbmQgY291bGQgYmUgcmVtb3ZlZCBpbiBmdXR1cmUuCisKK0ZvciBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9uIHRoZXNlIGNvbW1vbiBvcHRpb25zLCBzZWUgYWxzbworbGlua2dpdDpnaXRkaWZmY29yZVs3XS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9jLWRpZmYgYi9Eb2N1bWVudGF0aW9uL2RvYy1kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE2OTQzMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RvYy1kaWZmCkBAIC0wLDAgKzEsMTg2IEBACisjIS9iaW4vc2gKKyMKKyMgQnVpbGQgdHdvIGRvY3VtZW50YXRpb24gdHJlZXMgYW5kIGRpZmYgdGhlIHJlc3VsdGluZyBmb3JtYXR0ZWQgb3V0cHV0LgorIyBDb21wYXJlZCB0byBhIHNvdXJjZSBkaWZmLCB0aGlzIGNhbiByZXZlYWwgbWlzdGFrZXMgaW4gdGhlIGZvcm1hdHRpbmcuCisjIEZvciBleGFtcGxlOgorIworIyAgIC4vZG9jLWRpZmYgb3JpZ2luL21hc3RlciBIRUFECisjCisjIHdvdWxkIHNob3cgdGhlIGRpZmZlcmVuY2VzIGludHJvZHVjZWQgYnkgYSBicmFuY2ggYmFzZWQgb24gbWFzdGVyLgorCitPUFRJT05TX1NQRUM9IlwKK2RvYy1kaWZmIFtvcHRpb25zXSA8ZnJvbT4gPHRvPiBbLS0gPGRpZmYtb3B0aW9ucz5dCitkb2MtZGlmZiAoLWN8LS1jbGVhbikKKy0tCitqPW4JCQlwYXJhbGxlbCBhcmd1bWVudCB0byBwYXNzIHRvIG1ha2UKK2YJCQlmb3JjZSByZWJ1aWxkOyBkbyBub3QgcmVseSBvbiBjYWNoZWQgcmVzdWx0cworYyxjbGVhbgkJCWNsZWFudXAgdGVtcG9yYXJ5IHdvcmtpbmcgZmlsZXMKK2Zyb20tYXNjaWlkb2MJCXVzZSBhc2NpaWRvYyB3aXRoIHRoZSAnZnJvbSctY29tbWl0Citmcm9tLWFzY2lpZG9jdG9yCXVzZSBhc2NpaWRvY3RvciB3aXRoIHRoZSAnZnJvbSctY29tbWl0Cithc2NpaWRvYwkJdXNlIGFzY2lpZG9jIHdpdGggYm90aCBjb21taXRzCit0by1hc2NpaWRvYwkJdXNlIGFzY2lpZG9jIHdpdGggdGhlICd0byctY29tbWl0Cit0by1hc2NpaWRvY3RvcgkJdXNlIGFzY2lpZG9jdG9yIHdpdGggdGhlICd0byctY29tbWl0Cithc2NpaWRvY3RvcgkJdXNlIGFzY2lpZG9jdG9yIHdpdGggYm90aCBjb21taXRzCitjdXQtZm9vdGVyCQljdXQgYXdheSBmb290ZXIKKyIKK1NVQkRJUkVDVE9SWV9PSz0xCisuICIkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXNoLXNldHVwIgorCitwYXJhbGxlbD0KK2ZvcmNlPQorY2xlYW49Citmcm9tX3Byb2dyYW09Cit0b19wcm9ncmFtPQorY3V0X2Zvb3Rlcj0KK3doaWxlIHRlc3QgJCMgLWd0IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLWopCisJCXBhcmFsbGVsPSQyOyBzaGlmdCA7OworCS1jfC0tY2xlYW4pCisJCWNsZWFuPXQgOzsKKwktZikKKwkJZm9yY2U9dCA7OworCS0tZnJvbS1hc2NpaWRvY3RvcikKKwkJZnJvbV9wcm9ncmFtPS1hc2NpaWRvY3RvciA7OworCS0tdG8tYXNjaWlkb2N0b3IpCisJCXRvX3Byb2dyYW09LWFzY2lpZG9jdG9yIDs7CisJLS1hc2NpaWRvY3RvcikKKwkJZnJvbV9wcm9ncmFtPS1hc2NpaWRvY3RvcgorCQl0b19wcm9ncmFtPS1hc2NpaWRvY3RvciA7OworCS0tZnJvbS1hc2NpaWRvYykKKwkJZnJvbV9wcm9ncmFtPS1hc2NpaWRvYyA7OworCS0tdG8tYXNjaWlkb2MpCisJCXRvX3Byb2dyYW09LWFzY2lpZG9jIDs7CisJLS1hc2NpaWRvYykKKwkJZnJvbV9wcm9ncmFtPS1hc2NpaWRvYworCQl0b19wcm9ncmFtPS1hc2NpaWRvYyA7OworCS0tY3V0LWZvb3RlcikKKwkJY3V0X2Zvb3Rlcj0tY3V0LWZvb3RlciA7OworCS0tKQorCQlzaGlmdDsgYnJlYWsgOzsKKwkqKQorCQl1c2FnZSA7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCit0bXA9IiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpL0RvY3VtZW50YXRpb24vdG1wLWRvYy1kaWZmIiB8fCBleGl0IDEKKworaWYgdGVzdCAtbiAiJGNsZWFuIgordGhlbgorCXRlc3QgJCMgLWVxIDAgfHwgdXNhZ2UKKwlnaXQgd29ya3RyZWUgcmVtb3ZlIC0tZm9yY2UgIiR0bXAvd29ya3RyZWUiIDI+L2Rldi9udWxsCisJcm0gLXJmICIkdG1wIgorCWV4aXQgMAorZmkKKworaWYgdGVzdCAteiAiJHBhcmFsbGVsIgordGhlbgorCXBhcmFsbGVsPSQoZ2V0Y29uZiBfTlBST0NFU1NPUlNfT05MTiAyPi9kZXYvbnVsbCkKKwlpZiB0ZXN0ICQ/ICE9IDAgfHwgdGVzdCAteiAiJHBhcmFsbGVsIgorCXRoZW4KKwkJcGFyYWxsZWw9MQorCWZpCitmaQorCit0ZXN0ICQjIC1ndCAxIHx8IHVzYWdlCitmcm9tPSQxOyBzaGlmdAordG89JDE7IHNoaWZ0CisKK2Zyb21fb2lkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJGZyb20iKSB8fCBleGl0IDEKK3RvX29pZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR0byIpIHx8IGV4aXQgMQorCitpZiB0ZXN0IC1uICIkZm9yY2UiCit0aGVuCisJcm0gLXJmICIkdG1wIgorZmkKKworIyBXZSdsbCBkbyBib3RoIGJ1aWxkcyBpbiBhIHNpbmdsZSB3b3JrdHJlZSwgd2hpY2ggbGV0cyAibWFrZSIgcmV1c2UKKyMgcmVzdWx0cyB0aGF0IGRvbid0IGRpZmZlciBiZXR3ZWVuIHRoZSB0d28gdHJlZXMuCitpZiAhIHRlc3QgLWQgIiR0bXAvd29ya3RyZWUiCit0aGVuCisJZ2l0IHdvcmt0cmVlIGFkZCAtZiAtLWRldGFjaCAiJHRtcC93b3JrdHJlZSIgIiRmcm9tIiAmJgorCWRvdHM9JChlY2hvICIkdG1wL3dvcmt0cmVlIiB8IHNlZCAncyNbXi9dKiMuLiNnJykgJiYKKwlsbiAtcyAiJGRvdHMvY29uZmlnLm1hayIgIiR0bXAvd29ya3RyZWUvY29uZmlnLm1hayIKK2ZpCisKK2NvbnN0cnVjdF9tYWtlbWFuZmxhZ3MgKCkgeworCWlmIHRlc3QgIiQxIiA9ICItYXNjaWlkb2MiCisJdGhlbgorCQllY2hvIFVTRV9BU0NJSURPQ1RPUj0KKwllbGlmIHRlc3QgIiQxIiA9ICItYXNjaWlkb2N0b3IiCisJdGhlbgorCQllY2hvIFVTRV9BU0NJSURPQ1RPUj1ZZXNQbGVhc2UKKwlmaQorfQorCitmcm9tX21ha2VtYW5mbGFncz0kKGNvbnN0cnVjdF9tYWtlbWFuZmxhZ3MgIiRmcm9tX3Byb2dyYW0iKSAmJgordG9fbWFrZW1hbmZsYWdzPSQoY29uc3RydWN0X21ha2VtYW5mbGFncyAiJHRvX3Byb2dyYW0iKSAmJgorCitmcm9tX2Rpcj0kZnJvbV9vaWQkZnJvbV9wcm9ncmFtJGN1dF9mb290ZXIgJiYKK3RvX2Rpcj0kdG9fb2lkJHRvX3Byb2dyYW0kY3V0X2Zvb3RlciAmJgorCisjIGdlbmVyYXRlX3JlbmRlcl9tYWtlZmlsZSA8c3JjZGlyPiA8ZHN0ZGlyPgorZ2VuZXJhdGVfcmVuZGVyX21ha2VmaWxlICgpIHsKKwlmaW5kICIkMSIgLXR5cGUgZiB8CisJd2hpbGUgcmVhZCBzcmMKKwlkbworCQlkc3Q9JDIvJHtzcmMjJDEvfQorCQlwcmludGYgJ2FsbDogJXNcbicgIiRkc3QiCisJCXByaW50ZiAnJXM6ICVzXG4nICIkZHN0IiAiJHNyYyIKKwkJcHJpbnRmICdcdEBlY2hvID4mMiAiICBSRU5ERVIgJChub3RkaXIgJEApIiAmJiBcXFxuJworCQlwcmludGYgJ1x0bWtkaXIgLXAgJChkaXIgJEApICYmIFxcXG4nCisJCXByaW50ZiAnXHRNQU5XSURUSD04MCBtYW4gJDwgPiRAKyAmJiBcXFxuJworCQlwcmludGYgJ1x0bXYgJEArICRAXG4nCisJZG9uZQorfQorCisjIHJlbmRlcl90cmVlIDxjb21taXR0aXNoX29pZD4gPGRpcmVjdG9yeV9uYW1lPiA8bWFrZW1hbmZsYWdzPgorcmVuZGVyX3RyZWUgKCkgeworCSMgU2tpcCBpbnN0YWxsLW1hbiBlbnRpcmVseSBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW5zdGFsbGVkIGRpcmVjdG9yeS4KKwkjIFdlIGNhbid0IHJlbHkgb24gbWFrZSBoZXJlLCBzaW5jZSAiaW5zdGFsbC1tYW4iIHVuY29uZGl0aW9uYWxseQorCSMgY29waWVzIHRoZSBmaWxlcyAoc3BlbmRpbmcgZWZmb3J0LCBidXQgYWxzbyB1cGRhdGluZyB0aW1lc3RhbXBzIHRoYXQKKwkjIHdlIHRoZW4gY2FuJ3QgcmVseSBvbiBkdXJpbmcgdGhlIHJlbmRlciBzdGVwKS4gV2UgdXNlICJtdiIgdG8gbWFrZQorCSMgc3VyZSB3ZSBkb24ndCBnZXQgY29uZnVzZWQgYnkgYSBwcmV2aW91cyBydW4gdGhhdCBmYWlsZWQgcGFydHdheQorCSMgdGhyb3VnaC4KKwlvaWQ9JDEgJiYKKwlkbmFtZT0kMiAmJgorCW1ha2VtYW5mbGFncz0kMyAmJgorCWlmICEgdGVzdCAtZCAiJHRtcC9pbnN0YWxsZWQvJGRuYW1lIgorCXRoZW4KKwkJZ2l0IC1DICIkdG1wL3dvcmt0cmVlIiBjaGVja291dCAtLWRldGFjaCAiJG9pZCIgJiYKKwkJbWFrZSAtaiRwYXJhbGxlbCAtQyAiJHRtcC93b3JrdHJlZSIgXAorCQkJJG1ha2VtYW5mbGFncyBcCisJCQlHSVRfVkVSU0lPTj1vbWl0dGVkIFwKKwkJCVNPVVJDRV9EQVRFX0VQT0NIPTAgXAorCQkJREVTVERJUj0iJHRtcC9pbnN0YWxsZWQvJGRuYW1lKyIgXAorCQkJaW5zdGFsbC1tYW4gJiYKKwkJbXYgIiR0bXAvaW5zdGFsbGVkLyRkbmFtZSsiICIkdG1wL2luc3RhbGxlZC8kZG5hbWUiCisJZmkgJiYKKworCSMgQXMgd2l0aCAiaW5zdGFsbGVkIiBhYm92ZSwgd2Ugc2tpcCB0aGUgcmVuZGVyIGlmIGl0J3MgYWxyZWFkeSBiZWVuCisJIyBkb25lLiAgU28gdXNpbmcgbWFrZSBoZXJlIGlzIHByaW1hcmlseSBqdXN0IGFib3V0IHJ1bm5pbmcgaW4KKwkjIHBhcmFsbGVsLgorCWlmICEgdGVzdCAtZCAiJHRtcC9yZW5kZXJlZC8kZG5hbWUiCisJdGhlbgorCQlnZW5lcmF0ZV9yZW5kZXJfbWFrZWZpbGUgIiR0bXAvaW5zdGFsbGVkLyRkbmFtZSIgXAorCQkJIiR0bXAvcmVuZGVyZWQvJGRuYW1lKyIgfAorCQltYWtlIC1qJHBhcmFsbGVsIC1mIC0gJiYKKwkJbXYgIiR0bXAvcmVuZGVyZWQvJGRuYW1lKyIgIiR0bXAvcmVuZGVyZWQvJGRuYW1lIgorCisJCWlmIHRlc3QgIiRjdXRfZm9vdGVyIiA9ICItY3V0LWZvb3RlciIKKwkJdGhlbgorCQkJZm9yIGYgaW4gJChmaW5kICIkdG1wL3JlbmRlcmVkLyRkbmFtZSIgLXR5cGUgZikKKwkJCWRvCisJCQkJaGVhZCAtbiAtMiAiJGYiIHwgc2VkIC1lICckey9eJC9kfScgPiIkZisiICYmCisJCQkJbXYgIiRmKyIgIiRmIiB8fAorCQkJCXJldHVybiAxCisJCQlkb25lCisJCWZpCisJZmkKK30KKworcmVuZGVyX3RyZWUgJGZyb21fb2lkICRmcm9tX2RpciAkZnJvbV9tYWtlbWFuZmxhZ3MgJiYKK3JlbmRlcl90cmVlICR0b19vaWQgJHRvX2RpciAkdG9fbWFrZW1hbmZsYWdzICYmCitnaXQgLUMgJHRtcC9yZW5kZXJlZCBkaWZmIC0tbm8taW5kZXggIiRAIiAkZnJvbV9kaXIgJHRvX2RpcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb2Nib29rLXhzbC5jc3MgYi9Eb2N1bWVudGF0aW9uL2RvY2Jvb2steHNsLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTFjOGYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kb2Nib29rLXhzbC5jc3MKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgIENTUyBzdHlsZXNoZWV0IGZvciBYSFRNTCBwcm9kdWNlZCBieSBEb2NCb29rIFhTTCBzdHlsZXNoZWV0cy4KKyAgVGVzdGVkIHdpdGggWFNMIHN0eWxlc2hlZXRzIDEuNjEuMiwgMS42Ny4yCisqLworCitzcGFuLnN0cm9uZyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitib2R5IGJsb2NrcXVvdGUgeworICBtYXJnaW4tdG9wOiAuNzVlbTsKKyAgbGluZS1oZWlnaHQ6IDEuNTsKKyAgbWFyZ2luLWJvdHRvbTogLjc1ZW07Cit9CisKK2h0bWwgYm9keSB7CisgIG1hcmdpbjogMWVtIDUlIDFlbSA1JTsKKyAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Cit9CisKK2JvZHkgZGl2IHsKKyAgbWFyZ2luOiAwOworfQorCitoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LAorZGl2LnRvYyBwIGIsCitkaXYubGlzdC1vZi1maWd1cmVzIHAgYiwKK2Rpdi5saXN0LW9mLXRhYmxlcyBwIGIsCitkaXYuYWJzdHJhY3QgcC50aXRsZQoreworICBjb2xvcjogIzUyN2JiZDsKKyAgZm9udC1mYW1pbHk6IHRhaG9tYSwgdmVyZGFuYSwgc2Fucy1zZXJpZjsKK30KKworZGl2LnRvYyBwOmZpcnN0LWNoaWxkLAorZGl2Lmxpc3Qtb2YtZmlndXJlcyBwOmZpcnN0LWNoaWxkLAorZGl2Lmxpc3Qtb2YtdGFibGVzIHA6Zmlyc3QtY2hpbGQsCitkaXYuZXhhbXBsZSBwLnRpdGxlCit7CisgIG1hcmdpbi1ib3R0b206IDAuMmVtOworfQorCitib2R5IGgxIHsKKyAgbWFyZ2luOiAuMGVtIDAgMCAtNCU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7CisgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBzaWx2ZXI7Cit9CisKK2JvZHkgaDIgeworICBtYXJnaW46IDAuNWVtIDAgMCAtNCU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7CisgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBzaWx2ZXI7Cit9CisKK2JvZHkgaDMgeworICBtYXJnaW46IC44ZW0gMCAwIC0zJTsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKK30KKworYm9keSBoNCB7CisgIG1hcmdpbjogLjhlbSAwIDAgLTMlOworICBsaW5lLWhlaWdodDogMS4zOworfQorCitib2R5IGg1IHsKKyAgbWFyZ2luOiAuOGVtIDAgMCAtMiU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7Cit9CisKK2JvZHkgaDYgeworICBtYXJnaW46IC44ZW0gMCAwIC0xJTsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKK30KKworYm9keSBociB7CisgIGJvcmRlcjogbm9uZTsgLyogQnJva2VuIG9uIElFNiAqLworfQorZGl2LmZvb3Rub3RlcyBociB7CisgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKK30KKworZGl2Lm5hdmhlYWRlciB0aCwgZGl2Lm5hdmhlYWRlciB0ZCwgZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworICBmb250LXNpemU6IDAuOWVtOworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICM1MjdiYmQ7Cit9CitkaXYubmF2aGVhZGVyIGltZywgZGl2Lm5hdmZvb3RlciBpbWcgeworICBib3JkZXItc3R5bGU6IG5vbmU7Cit9CitkaXYubmF2aGVhZGVyIGEsIGRpdi5uYXZmb290ZXIgYSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworfQorCitib2R5IHRkIHsKKyAgbGluZS1oZWlnaHQ6IDEuMgorfQorCitib2R5IHRoIHsKKyAgbGluZS1oZWlnaHQ6IDEuMjsKK30KKworb2wgeworICBsaW5lLWhlaWdodDogMS4yOworfQorCit1bCwgYm9keSBkaXIsIGJvZHkgbWVudSB7CisgIGxpbmUtaGVpZ2h0OiAxLjI7Cit9CisKK2h0bWwgeworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7Cit9CisKK2JvZHkgaDEsIGJvZHkgaDIsIGJvZHkgaDMsIGJvZHkgaDQsIGJvZHkgaDUsIGJvZHkgaDYgeworICBtYXJnaW4tbGVmdDogMAorfQorCitib2R5IHByZSB7CisgIG1hcmdpbjogMC41ZW0gMTAlIDAuNWVtIDFlbTsKKyAgbGluZS1oZWlnaHQ6IDEuMDsKKyAgY29sb3I6IG5hdnk7Cit9CisKK3R0LmxpdGVyYWwsIGNvZGUubGl0ZXJhbCB7CisgIGNvbG9yOiBuYXZ5OworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKK30KKworY29kZS5saXRlcmFsOmJlZm9yZSB7IGNvbnRlbnQ6ICInIjsgfQorY29kZS5saXRlcmFsOmFmdGVyIHsgY29udGVudDogIiciOyB9CisKK2VtIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworICBjb2xvcjogIzA2NDsKK30KKworZGl2LmxpdGVyYWxsYXlvdXQgcCB7CisgIHBhZGRpbmc6IDBlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKK2Rpdi5saXRlcmFsbGF5b3V0IHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgbWFyZ2luOiAwZW07CisgIGNvbG9yOiBuYXZ5OworICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7CisgIGJhY2tncm91bmQ6ICNmNGY0ZjQ7CisgIHBhZGRpbmc6IDAuNWVtOworfQorCisucHJvZ3JhbWxpc3RpbmcsIC5zY3JlZW4geworICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7CisgIGJhY2tncm91bmQ6ICNmNGY0ZjQ7CisgIG1hcmdpbjogMC41ZW0gMTAlIDAuNWVtIDA7CisgIHBhZGRpbmc6IDAuNWVtIDFlbTsKK30KKworZGl2LnNpZGViYXIgeworICBiYWNrZ3JvdW5kOiAjZmZmZmVlOworICBtYXJnaW46IDEuMGVtIDEwJSAwLjVlbSAwOworICBwYWRkaW5nOiAwLjVlbSAxZW07CisgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKK30KK2Rpdi5zaWRlYmFyICogeyBwYWRkaW5nOiAwOyB9CitkaXYuc2lkZWJhciBkaXYgeyBtYXJnaW46IDA7IH0KK2Rpdi5zaWRlYmFyIHAudGl0bGUgeworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuMmVtOworfQorCitkaXYuYmlibGlvbWl4ZWQgeworICBtYXJnaW46IDAuNWVtIDUlIDAuNWVtIDFlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGR0IHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CitkaXYuZ2xvc3NhcnkgZGQgcCB7CisgIG1hcmdpbi10b3A6IDAuMmVtOworfQorCitkbCB7CisgIG1hcmdpbjogLjhlbSAwOworICBsaW5lLWhlaWdodDogMS4yOworfQorCitkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCitkdCBzcGFuLnRlcm0geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIGNvbG9yOiBuYXZ5OworfQorCitkaXYudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwOworfQorCitkaXYuaXRlbWl6ZWRsaXN0IGxpLCBkaXYub3JkZXJlZGxpc3QgbGkgeworICBtYXJnaW4tbGVmdDogLTAuOGVtOworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKwordWwsIG9sIHsKKyAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlOworfQorCitkaXYuc2lkZWJhciB1bCwgZGl2LnNpZGViYXIgb2wgeworICAgIG1hcmdpbi1sZWZ0OiAyLjhlbTsKK30KKworZGl2Lml0ZW1pemVkbGlzdCBwLnRpdGxlLAorZGl2Lm9yZGVyZWRsaXN0IHAudGl0bGUsCitkaXYudmFyaWFibGVsaXN0IHAudGl0bGUKK3sKKyAgbWFyZ2luLWJvdHRvbTogLTAuOGVtOworfQorCitkaXYucmV2aGlzdG9yeSB0YWJsZSB7CisgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisgIGJvcmRlcjogbm9uZTsKK30KK2Rpdi5yZXZoaXN0b3J5IHRoIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogIzUyN2JiZDsKKyAgZm9udC1mYW1pbHk6IHRhaG9tYSwgdmVyZGFuYSwgc2Fucy1zZXJpZjsKK30KK2Rpdi5yZXZoaXN0b3J5IHRkIHsKKyAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworfQorCisvKiBLZWVwIFRPQyBhbmQgaW5kZXggbGluZXMgY2xvc2UgdG9nZXRoZXIuICovCitkaXYudG9jIGRsLCBkaXYudG9jIGR0LAorZGl2Lmxpc3Qtb2YtZmlndXJlcyBkbCwgZGl2Lmxpc3Qtb2YtZmlndXJlcyBkdCwKK2Rpdi5saXN0LW9mLXRhYmxlcyBkbCwgZGl2Lmxpc3Qtb2YtdGFibGVzIGR0LAorZGl2LmluZGV4ZGl2IGRsLCBkaXYuaW5kZXhkaXYgZHQKK3sKKyAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKKyAgbWFyZ2luLXRvcDogMDsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKworLyoKKyAgVGFibGUgc3R5bGluZyBkb2VzIG5vdCB3b3JrIGJlY2F1c2Ugb2Ygb3ZlcnJpZGluZyBhdHRyaWJ1dGVzIGluCisgIGdlbmVyYXRlZCBIVE1MLgorKi8KK2Rpdi50YWJsZSB0YWJsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlIHRhYmxlCit7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgICAgbWFyZ2luLXJpZ2h0OiA1JTsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjhlbTsKK30KK2Rpdi5pbmZvcm1hbHRhYmxlIHRhYmxlCit7CisgICAgbWFyZ2luLXRvcDogMC40ZW0KK30KK2Rpdi50YWJsZSB0aGVhZCwKK2Rpdi50YWJsZSB0Zm9vdCwKK2Rpdi50YWJsZSB0Ym9keSwKK2Rpdi5pbmZvcm1hbHRhYmxlIHRoZWFkLAorZGl2LmluZm9ybWFsdGFibGUgdGZvb3QsCitkaXYuaW5mb3JtYWx0YWJsZSB0Ym9keQoreworICAgIC8qIE5vIGVmZmVjdCBpbiBJRTYuICovCisgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICM1MjdiYmQ7CisgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM1MjdiYmQ7Cit9CitkaXYudGFibGUgdGhlYWQsIGRpdi50YWJsZSB0Zm9vdCwKK2Rpdi5pbmZvcm1hbHRhYmxlIHRoZWFkLCBkaXYuaW5mb3JtYWx0YWJsZSB0Zm9vdAoreworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitkaXYubWVkaWFvYmplY3QgaW1nIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7CisgICAgbWFyZ2luLWJvdHRvbTogMC44ZW07Cit9CitkaXYuZmlndXJlIHAudGl0bGUsCitkaXYudGFibGUgcC50aXRsZQoreworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDAuNGVtOworfQorCitAbWVkaWEgcHJpbnQgeworICBkaXYubmF2aGVhZGVyLCBkaXYubmF2Zm9vdGVyIHsgZGlzcGxheTogbm9uZTsgfQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb2Nib29rLnhzbCBiL0RvY3VtZW50YXRpb24vZG9jYm9vay54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4YjA1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZG9jYm9vay54c2wKQEAgLTAsMCArMSw4IEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249JzEuMCc+CisgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQvaHRtbC9kb2Nib29rLnhzbCIvPgorIDx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIKKyAgICAgZW5jb2Rpbmc9IlVURi04IiBpbmRlbnQ9Im5vIgorICAgICBkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIKKyAgICAgZG9jdHlwZS1zeXN0ZW09Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiIC8+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ldmVyeWRheS50eHRvIGIvRG9jdW1lbnRhdGlvbi9ldmVyeWRheS50eHRvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTU1YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2V2ZXJ5ZGF5LnR4dG8KQEAgLTAsMCArMSw5IEBACitFdmVyeWRheSBHaXQgV2l0aCAyMCBDb21tYW5kcyBPciBTbworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBoYXMgYmVlbiBtb3ZlZCB0byBsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLgorCitQbGVhc2UgbGV0IHRoZSBvd25lcnMgb2YgdGhlIHJlZmVycmluZyBzaXRlIGtub3cgc28gdGhhdCB0aGV5IGNhbiB1cGRhdGUgdGhlCitsaW5rIHlvdSBjbGlja2VkIHRvIGdldCBoZXJlLgorCitUaGFua3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTE1YTFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dApAQCAtMCwwICsxLDI2NiBAQAorLS1hbGw6OgorCUZldGNoIGFsbCByZW1vdGVzLgorCistYTo6CistLWFwcGVuZDo6CisJQXBwZW5kIHJlZiBuYW1lcyBhbmQgb2JqZWN0IG5hbWVzIG9mIGZldGNoZWQgcmVmcyB0byB0aGUKKwlleGlzdGluZyBjb250ZW50cyBvZiBgLmdpdC9GRVRDSF9IRUFEYC4gIFdpdGhvdXQgdGhpcworCW9wdGlvbiBvbGQgZGF0YSBpbiBgLmdpdC9GRVRDSF9IRUFEYCB3aWxsIGJlIG92ZXJ3cml0dGVuLgorCistLWRlcHRoPTxkZXB0aD46OgorCUxpbWl0IGZldGNoaW5nIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNvbW1pdHMgZnJvbSB0aGUgdGlwIG9mCisJZWFjaCByZW1vdGUgYnJhbmNoIGhpc3RvcnkuIElmIGZldGNoaW5nIHRvIGEgJ3NoYWxsb3cnIHJlcG9zaXRvcnkKKwljcmVhdGVkIGJ5IGBnaXQgY2xvbmVgIHdpdGggYC0tZGVwdGg9PGRlcHRoPmAgb3B0aW9uIChzZWUKKwlsaW5rZ2l0OmdpdC1jbG9uZVsxXSksIGRlZXBlbiBvciBzaG9ydGVuIHRoZSBoaXN0b3J5IHRvIHRoZSBzcGVjaWZpZWQKKwludW1iZXIgb2YgY29tbWl0cy4gVGFncyBmb3IgdGhlIGRlZXBlbmVkIGNvbW1pdHMgYXJlIG5vdCBmZXRjaGVkLgorCistLWRlZXBlbj08ZGVwdGg+OjoKKwlTaW1pbGFyIHRvIC0tZGVwdGgsIGV4Y2VwdCBpdCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb21taXRzCisJZnJvbSB0aGUgY3VycmVudCBzaGFsbG93IGJvdW5kYXJ5IGluc3RlYWQgb2YgZnJvbSB0aGUgdGlwIG9mCisJZWFjaCByZW1vdGUgYnJhbmNoIGhpc3RvcnkuCisKKy0tc2hhbGxvdy1zaW5jZT08ZGF0ZT46OgorCURlZXBlbiBvciBzaG9ydGVuIHRoZSBoaXN0b3J5IG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IHRvCisJaW5jbHVkZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgYWZ0ZXIgPGRhdGU+LgorCistLXNoYWxsb3ctZXhjbHVkZT08cmV2aXNpb24+OjoKKwlEZWVwZW4gb3Igc2hvcnRlbiB0aGUgaGlzdG9yeSBvZiBhIHNoYWxsb3cgcmVwb3NpdG9yeSB0bworCWV4Y2x1ZGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhIHNwZWNpZmllZCByZW1vdGUgYnJhbmNoIG9yIHRhZy4KKwlUaGlzIG9wdGlvbiBjYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorCistLXVuc2hhbGxvdzo6CisJSWYgdGhlIHNvdXJjZSByZXBvc2l0b3J5IGlzIGNvbXBsZXRlLCBjb252ZXJ0IGEgc2hhbGxvdworCXJlcG9zaXRvcnkgdG8gYSBjb21wbGV0ZSBvbmUsIHJlbW92aW5nIGFsbCB0aGUgbGltaXRhdGlvbnMKKwlpbXBvc2VkIGJ5IHNoYWxsb3cgcmVwb3NpdG9yaWVzLgorKworSWYgdGhlIHNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGZldGNoIGFzIG11Y2ggYXMgcG9zc2libGUgc28gdGhhdAordGhlIGN1cnJlbnQgcmVwb3NpdG9yeSBoYXMgdGhlIHNhbWUgaGlzdG9yeSBhcyB0aGUgc291cmNlIHJlcG9zaXRvcnkuCisKKy0tdXBkYXRlLXNoYWxsb3c6OgorCUJ5IGRlZmF1bHQgd2hlbiBmZXRjaGluZyBmcm9tIGEgc2hhbGxvdyByZXBvc2l0b3J5LAorCWBnaXQgZmV0Y2hgIHJlZnVzZXMgcmVmcyB0aGF0IHJlcXVpcmUgdXBkYXRpbmcKKwkuZ2l0L3NoYWxsb3cuIFRoaXMgb3B0aW9uIHVwZGF0ZXMgLmdpdC9zaGFsbG93IGFuZCBhY2NlcHQgc3VjaAorCXJlZnMuCisKKy0tbmVnb3RpYXRpb24tdGlwPTxjb21taXR8Z2xvYj46OgorCUJ5IGRlZmF1bHQsIEdpdCB3aWxsIHJlcG9ydCwgdG8gdGhlIHNlcnZlciwgY29tbWl0cyByZWFjaGFibGUKKwlmcm9tIGFsbCBsb2NhbCByZWZzIHRvIGZpbmQgY29tbW9uIGNvbW1pdHMgaW4gYW4gYXR0ZW1wdCB0bworCXJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgdG8tYmUtcmVjZWl2ZWQgcGFja2ZpbGUuIElmIHNwZWNpZmllZCwKKwlHaXQgd2lsbCBvbmx5IHJlcG9ydCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoZSBnaXZlbiB0aXBzLgorCVRoaXMgaXMgdXNlZnVsIHRvIHNwZWVkIHVwIGZldGNoZXMgd2hlbiB0aGUgdXNlciBrbm93cyB3aGljaAorCWxvY2FsIHJlZiBpcyBsaWtlbHkgdG8gaGF2ZSBjb21taXRzIGluIGNvbW1vbiB3aXRoIHRoZQorCXVwc3RyZWFtIHJlZiBiZWluZyBmZXRjaGVkLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZTsgaWYgc28sIEdpdCB3aWxsIHJlcG9ydAorY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbnkgb2YgdGhlIGdpdmVuIGNvbW1pdHMuCisrCitUaGUgYXJndW1lbnQgdG8gdGhpcyBvcHRpb24gbWF5IGJlIGEgZ2xvYiBvbiByZWYgbmFtZXMsIGEgcmVmLCBvciB0aGUgKHBvc3NpYmx5CithYmJyZXZpYXRlZCkgU0hBLTEgb2YgYSBjb21taXQuIFNwZWNpZnlpbmcgYSBnbG9iIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwordGhpcyBvcHRpb24gbXVsdGlwbGUgdGltZXMsIG9uZSBmb3IgZWFjaCBtYXRjaGluZyByZWYgbmFtZS4KKysKK1NlZSBhbHNvIHRoZSBgZmV0Y2gubmVnb3RpYXRpb25BbGdvcml0aG1gIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK2RvY3VtZW50ZWQgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitpZm5kZWY6OmdpdC1wdWxsW10KKy0tZHJ5LXJ1bjo6CisJU2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUsIHdpdGhvdXQgbWFraW5nIGFueSBjaGFuZ2VzLgorZW5kaWY6OmdpdC1wdWxsW10KKworLWY6OgorLS1mb3JjZTo6CisJV2hlbiAnZ2l0IGZldGNoJyBpcyB1c2VkIHdpdGggYDxzcmM+Ojxkc3Q+YCByZWZzcGVjIGl0IG1heQorCXJlZnVzZSB0byB1cGRhdGUgdGhlIGxvY2FsIGJyYW5jaCBhcyBkaXNjdXNzZWQKK2lmZGVmOjpnaXQtcHVsbFtdCisJaW4gdGhlIGA8cmVmc3BlYz5gIHBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0LWZldGNoWzFdCisJZG9jdW1lbnRhdGlvbi4KK2VuZGlmOjpnaXQtcHVsbFtdCitpZm5kZWY6OmdpdC1wdWxsW10KKwlpbiB0aGUgYDxyZWZzcGVjPmAgcGFydCBiZWxvdy4KK2VuZGlmOjpnaXQtcHVsbFtdCisJVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHRoYXQgY2hlY2suCisKKy1rOjoKKy0ta2VlcDo6CisJS2VlcCBkb3dubG9hZGVkIHBhY2suCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorLS1tdWx0aXBsZTo6CisJQWxsb3cgc2V2ZXJhbCA8cmVwb3NpdG9yeT4gYW5kIDxncm91cD4gYXJndW1lbnRzIHRvIGJlCisJc3BlY2lmaWVkLiBObyA8cmVmc3BlYz5zIG1heSBiZSBzcGVjaWZpZWQuCisKKy0tW25vLV1hdXRvLWdjOjoKKwlSdW4gYGdpdCBnYyAtLWF1dG9gIGF0IHRoZSBlbmQgdG8gcGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Rpb24KKwlpZiBuZWVkZWQuIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCistLVtuby1dd3JpdGUtY29tbWl0LWdyYXBoOjoKKwlXcml0ZSBhIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZy4gVGhpcyBvdmVycmlkZXMgdGhlIGNvbmZpZworCXNldHRpbmcgYGZldGNoLndyaXRlQ29tbWl0R3JhcGhgLgorCistcDo6CistLXBydW5lOjoKKwlCZWZvcmUgZmV0Y2hpbmcsIHJlbW92ZSBhbnkgcmVtb3RlLXRyYWNraW5nIHJlZmVyZW5jZXMgdGhhdCBubworCWxvbmdlciBleGlzdCBvbiB0aGUgcmVtb3RlLiAgVGFncyBhcmUgbm90IHN1YmplY3QgdG8gcHJ1bmluZworCWlmIHRoZXkgYXJlIGZldGNoZWQgb25seSBiZWNhdXNlIG9mIHRoZSBkZWZhdWx0IHRhZworCWF1dG8tZm9sbG93aW5nIG9yIGR1ZSB0byBhIC0tdGFncyBvcHRpb24uICBIb3dldmVyLCBpZiB0YWdzCisJYXJlIGZldGNoZWQgZHVlIHRvIGFuIGV4cGxpY2l0IHJlZnNwZWMgKGVpdGhlciBvbiB0aGUgY29tbWFuZAorCWxpbmUgb3IgaW4gdGhlIHJlbW90ZSBjb25maWd1cmF0aW9uLCBmb3IgZXhhbXBsZSBpZiB0aGUgcmVtb3RlCisJd2FzIGNsb25lZCB3aXRoIHRoZSAtLW1pcnJvciBvcHRpb24pLCB0aGVuIHRoZXkgYXJlIGFsc28KKwlzdWJqZWN0IHRvIHBydW5pbmcuIFN1cHBseWluZyBgLS1wcnVuZS10YWdzYCBpcyBhIHNob3J0aGFuZCBmb3IKKwlwcm92aWRpbmcgdGhlIHRhZyByZWZzcGVjLgorKworU2VlIHRoZSBQUlVOSU5HIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKworLVA6OgorLS1wcnVuZS10YWdzOjoKKwlCZWZvcmUgZmV0Y2hpbmcsIHJlbW92ZSBhbnkgbG9jYWwgdGFncyB0aGF0IG5vIGxvbmdlciBleGlzdCBvbgorCXRoZSByZW1vdGUgaWYgYC0tcHJ1bmVgIGlzIGVuYWJsZWQuIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkCisJbW9yZSBjYXJlZnVsbHksIHVubGlrZSBgLS1wcnVuZWAgaXQgd2lsbCByZW1vdmUgYW55IGxvY2FsCisJcmVmZXJlbmNlcyAobG9jYWwgdGFncykgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gVGhpcyBvcHRpb24gaXMKKwlhIHNob3J0aGFuZCBmb3IgcHJvdmlkaW5nIHRoZSBleHBsaWNpdCB0YWcgcmVmc3BlYyBhbG9uZyB3aXRoCisJYC0tcHJ1bmVgLCBzZWUgdGhlIGRpc2N1c3Npb24gYWJvdXQgdGhhdCBpbiBpdHMgZG9jdW1lbnRhdGlvbi4KKysKK1NlZSB0aGUgUFJVTklORyBzZWN0aW9uIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKK2VuZGlmOjpnaXQtcHVsbFtdCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorLW46OgorZW5kaWY6OmdpdC1wdWxsW10KKy0tbm8tdGFnczo6CisJQnkgZGVmYXVsdCwgdGFncyB0aGF0IHBvaW50IGF0IG9iamVjdHMgdGhhdCBhcmUgZG93bmxvYWRlZAorCWZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5IGFyZSBmZXRjaGVkIGFuZCBzdG9yZWQgbG9jYWxseS4KKwlUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGlzIGF1dG9tYXRpYyB0YWcgZm9sbG93aW5nLiBUaGUgZGVmYXVsdAorCWJlaGF2aW9yIGZvciBhIHJlbW90ZSBtYXkgYmUgc3BlY2lmaWVkIHdpdGggdGhlIHJlbW90ZS48bmFtZT4udGFnT3B0CisJc2V0dGluZy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistLXJlZm1hcD08cmVmc3BlYz46OgorCVdoZW4gZmV0Y2hpbmcgcmVmcyBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdXNlIHRoZQorCXNwZWNpZmllZCByZWZzcGVjIChjYW4gYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UpIHRvIG1hcCB0aGUKKwlyZWZzIHRvIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgaW5zdGVhZCBvZiB0aGUgdmFsdWVzIG9mCisJYHJlbW90ZS4qLmZldGNoYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIHJlbW90ZQorCXJlcG9zaXRvcnkuICBQcm92aWRpbmcgYW4gZW1wdHkgYDxyZWZzcGVjPmAgdG8gdGhlCisJYC0tcmVmbWFwYCBvcHRpb24gY2F1c2VzIEdpdCB0byBpZ25vcmUgdGhlIGNvbmZpZ3VyZWQKKwlyZWZzcGVjcyBhbmQgcmVseSBlbnRpcmVseSBvbiB0aGUgcmVmc3BlY3Mgc3VwcGxpZWQgYXMKKwljb21tYW5kLWxpbmUgYXJndW1lbnRzLiBTZWUgc2VjdGlvbiBvbiAiQ29uZmlndXJlZCBSZW1vdGUtdHJhY2tpbmcKKwlCcmFuY2hlcyIgZm9yIGRldGFpbHMuCisKKy10OjoKKy0tdGFnczo6CisJRmV0Y2ggYWxsIHRhZ3MgZnJvbSB0aGUgcmVtb3RlIChpLmUuLCBmZXRjaCByZW1vdGUgdGFncworCWByZWZzL3RhZ3MvKmAgaW50byBsb2NhbCB0YWdzIHdpdGggdGhlIHNhbWUgbmFtZSksIGluIGFkZGl0aW9uCisJdG8gd2hhdGV2ZXIgZWxzZSB3b3VsZCBvdGhlcndpc2UgYmUgZmV0Y2hlZC4gIFVzaW5nIHRoaXMKKwlvcHRpb24gYWxvbmUgZG9lcyBub3Qgc3ViamVjdCB0YWdzIHRvIHBydW5pbmcsIGV2ZW4gaWYgLS1wcnVuZQorCWlzIHVzZWQgKHRob3VnaCB0YWdzIG1heSBiZSBwcnVuZWQgYW55d2F5IGlmIHRoZXkgYXJlIGFsc28gdGhlCisJZGVzdGluYXRpb24gb2YgYW4gZXhwbGljaXQgcmVmc3BlYzsgc2VlIGAtLXBydW5lYCkuCisKKy0tcmVjdXJzZS1zdWJtb2R1bGVzWz15ZXN8b24tZGVtYW5kfG5vXTo6CisJVGhpcyBvcHRpb24gY29udHJvbHMgaWYgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBuZXcgY29tbWl0cyBvZgorCXBvcHVsYXRlZCBzdWJtb2R1bGVzIHNob3VsZCBiZSBmZXRjaGVkIHRvby4gSXQgY2FuIGJlIHVzZWQgYXMgYQorCWJvb2xlYW4gb3B0aW9uIHRvIGNvbXBsZXRlbHkgZGlzYWJsZSByZWN1cnNpb24gd2hlbiBzZXQgdG8gJ25vJyBvciB0bworCXVuY29uZGl0aW9uYWxseSByZWN1cnNlIGludG8gYWxsIHBvcHVsYXRlZCBzdWJtb2R1bGVzIHdoZW4gc2V0IHRvCisJJ3llcycsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCB3aXRob3V0IGFueQorCXZhbHVlLiBVc2UgJ29uLWRlbWFuZCcgdG8gb25seSByZWN1cnNlIGludG8gYSBwb3B1bGF0ZWQgc3VibW9kdWxlCisJd2hlbiB0aGUgc3VwZXJwcm9qZWN0IHJldHJpZXZlcyBhIGNvbW1pdCB0aGF0IHVwZGF0ZXMgdGhlIHN1Ym1vZHVsZSdzCisJcmVmZXJlbmNlIHRvIGEgY29tbWl0IHRoYXQgaXNuJ3QgYWxyZWFkeSBpbiB0aGUgbG9jYWwgc3VibW9kdWxlCisJY2xvbmUuCisKKy1qOjoKKy0tam9icz08bj46OgorCU51bWJlciBvZiBwYXJhbGxlbCBjaGlsZHJlbiB0byBiZSB1c2VkIGZvciBhbGwgZm9ybXMgb2YgZmV0Y2hpbmcuCisrCitJZiB0aGUgYC0tbXVsdGlwbGVgIG9wdGlvbiB3YXMgc3BlY2lmaWVkLCB0aGUgZGlmZmVyZW50IHJlbW90ZXMgd2lsbCBiZSBmZXRjaGVkCitpbiBwYXJhbGxlbC4gSWYgbXVsdGlwbGUgc3VibW9kdWxlcyBhcmUgZmV0Y2hlZCwgdGhleSB3aWxsIGJlIGZldGNoZWQgaW4KK3BhcmFsbGVsLiBUbyBjb250cm9sIHRoZW0gaW5kZXBlbmRlbnRseSwgdXNlIHRoZSBjb25maWcgc2V0dGluZ3MKK2BmZXRjaC5wYXJhbGxlbGAgYW5kIGBzdWJtb2R1bGUuZmV0Y2hKb2JzYCAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisrCitUeXBpY2FsbHksIHBhcmFsbGVsIHJlY3Vyc2l2ZSBhbmQgbXVsdGktcmVtb3RlIGZldGNoZXMgd2lsbCBiZSBmYXN0ZXIuIEJ5CitkZWZhdWx0IGZldGNoZXMgYXJlIHBlcmZvcm1lZCBzZXF1ZW50aWFsbHksIG5vdCBpbiBwYXJhbGxlbC4KKworLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCURpc2FibGUgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKHRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcworCXVzaW5nIHRoZSBgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9bm9gIG9wdGlvbikuCisKKy0tc2V0LXVwc3RyZWFtOjoKKwlJZiB0aGUgcmVtb3RlIGlzIGZldGNoZWQgc3VjY2Vzc2Z1bGx5LCBwdWxsIGFuZCBhZGQgdXBzdHJlYW0KKwkodHJhY2tpbmcpIHJlZmVyZW5jZSwgdXNlZCBieSBhcmd1bWVudC1sZXNzCisJbGlua2dpdDpnaXQtcHVsbFsxXSBhbmQgb3RoZXIgY29tbWFuZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLAorCXNlZSBgYnJhbmNoLjxuYW1lPi5tZXJnZWAgYW5kIGBicmFuY2guPG5hbWU+LnJlbW90ZWAgaW4KKwlsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy0tc3VibW9kdWxlLXByZWZpeD08cGF0aD46OgorCVByZXBlbmQgPHBhdGg+IHRvIHBhdGhzIHByaW50ZWQgaW4gaW5mb3JtYXRpdmUgbWVzc2FnZXMKKwlzdWNoIGFzICJGZXRjaGluZyBzdWJtb2R1bGUgZm9vIi4gIFRoaXMgb3B0aW9uIGlzIHVzZWQKKwlpbnRlcm5hbGx5IHdoZW4gcmVjdXJzaW5nIG92ZXIgc3VibW9kdWxlcy4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdD1beWVzfG9uLWRlbWFuZF06OgorCVRoaXMgb3B0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byB0ZW1wb3JhcmlseSBwcm92aWRlIGEKKwlub24tbmVnYXRpdmUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIC0tcmVjdXJzZS1zdWJtb2R1bGVzCisJb3B0aW9uLiAgQWxsIG90aGVyIG1ldGhvZHMgb2YgY29uZmlndXJpbmcgZmV0Y2gncyBzdWJtb2R1bGUKKwlyZWN1cnNpb24gKHN1Y2ggYXMgc2V0dGluZ3MgaW4gbGlua2dpdDpnaXRtb2R1bGVzWzVdIGFuZAorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkgb3ZlcnJpZGUgdGhpcyBvcHRpb24sIGFzIGRvZXMKKwlzcGVjaWZ5aW5nIC0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXMgZGlyZWN0bHkuCitlbmRpZjo6Z2l0LXB1bGxbXQorCistdTo6CistLXVwZGF0ZS1oZWFkLW9rOjoKKwlCeSBkZWZhdWx0ICdnaXQgZmV0Y2gnIHJlZnVzZXMgdG8gdXBkYXRlIHRoZSBoZWFkIHdoaWNoCisJY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBmbGFnIGRpc2FibGVzIHRoZQorCWNoZWNrLiAgVGhpcyBpcyBwdXJlbHkgZm9yIHRoZSBpbnRlcm5hbCB1c2UgZm9yICdnaXQgcHVsbCcKKwl0byBjb21tdW5pY2F0ZSB3aXRoICdnaXQgZmV0Y2gnLCBhbmQgdW5sZXNzIHlvdSBhcmUKKwlpbXBsZW1lbnRpbmcgeW91ciBvd24gUG9yY2VsYWluIHlvdSBhcmUgbm90IHN1cHBvc2VkIHRvCisJdXNlIGl0LgorCistLXVwbG9hZC1wYWNrIDx1cGxvYWQtcGFjaz46OgorCVdoZW4gZ2l2ZW4sIGFuZCB0aGUgcmVwb3NpdG9yeSB0byBmZXRjaCBmcm9tIGlzIGhhbmRsZWQKKwlieSAnZ2l0IGZldGNoLXBhY2snLCBgLS1leGVjPTx1cGxvYWQtcGFjaz5gIGlzIHBhc3NlZCB0bworCXRoZSBjb21tYW5kIHRvIHNwZWNpZnkgbm9uLWRlZmF1bHQgcGF0aCBmb3IgdGhlIGNvbW1hbmQKKwlydW4gb24gdGhlIG90aGVyIGVuZC4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistcTo6CistLXF1aWV0OjoKKwlQYXNzIC0tcXVpZXQgdG8gZ2l0LWZldGNoLXBhY2sgYW5kIHNpbGVuY2UgYW55IG90aGVyIGludGVybmFsbHkKKwl1c2VkIGdpdCBjb21tYW5kcy4gUHJvZ3Jlc3MgaXMgbm90IHJlcG9ydGVkIHRvIHRoZSBzdGFuZGFyZCBlcnJvcgorCXN0cmVhbS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLgorZW5kaWY6OmdpdC1wdWxsW10KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZQorCXN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworLW8gPG9wdGlvbj46OgorLS1zZXJ2ZXItb3B0aW9uPTxvcHRpb24+OjoKKwlUcmFuc21pdCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBzZXJ2ZXIgd2hlbiBjb21tdW5pY2F0aW5nIHVzaW5nCisJcHJvdG9jb2wgdmVyc2lvbiAyLiAgVGhlIGdpdmVuIHN0cmluZyBtdXN0IG5vdCBjb250YWluIGEgTlVMIG9yIExGCisJY2hhcmFjdGVyLiAgVGhlIHNlcnZlcidzIGhhbmRsaW5nIG9mIHNlcnZlciBvcHRpb25zLCBpbmNsdWRpbmcKKwl1bmtub3duIG9uZXMsIGlzIHNlcnZlci1zcGVjaWZpYy4KKwlXaGVuIG11bHRpcGxlIGAtLXNlcnZlci1vcHRpb249PG9wdGlvbj5gIGFyZSBnaXZlbiwgdGhleSBhcmUgYWxsCisJc2VudCB0byB0aGUgb3RoZXIgc2lkZSBpbiB0aGUgb3JkZXIgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKy0tc2hvdy1mb3JjZWQtdXBkYXRlczo6CisJQnkgZGVmYXVsdCwgZ2l0IGNoZWNrcyBpZiBhIGJyYW5jaCBpcyBmb3JjZS11cGRhdGVkIGR1cmluZworCWZldGNoLiBUaGlzIGNhbiBiZSBkaXNhYmxlZCB0aHJvdWdoIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzLCBidXQKKwl0aGUgLS1zaG93LWZvcmNlZC11cGRhdGVzIG9wdGlvbiBndWFyYW50ZWVzIHRoaXMgY2hlY2sgb2NjdXJzLgorCVNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlczo6CisJQnkgZGVmYXVsdCwgZ2l0IGNoZWNrcyBpZiBhIGJyYW5jaCBpcyBmb3JjZS11cGRhdGVkIGR1cmluZworCWZldGNoLiBQYXNzIC0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcyBvciBzZXQgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMKKwl0byBmYWxzZSB0byBza2lwIHRoaXMgY2hlY2sgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIElmIHVzZWQgZHVyaW5nCisJJ2dpdC1wdWxsJyB0aGUgLS1mZi1vbmx5IG9wdGlvbiB3aWxsIHN0aWxsIGNoZWNrIGZvciBmb3JjZWQgdXBkYXRlcworCWJlZm9yZSBhdHRlbXB0aW5nIGEgZmFzdC1mb3J3YXJkIHVwZGF0ZS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLTQ6OgorLS1pcHY0OjoKKwlVc2UgSVB2NCBhZGRyZXNzZXMgb25seSwgaWdub3JpbmcgSVB2NiBhZGRyZXNzZXMuCisKKy02OjoKKy0taXB2Njo6CisJVXNlIElQdjYgYWRkcmVzc2VzIG9ubHksIGlnbm9yaW5nIElQdjQgYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXgtdGV4aS5wZXJsIGIvRG9jdW1lbnRhdGlvbi9maXgtdGV4aS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmN2Q3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpeC10ZXhpLnBlcmwKQEAgLTAsMCArMSwxNSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3doaWxlICg8PikgeworCWlmICgvXlxAc2V0ZmlsZW5hbWUvKSB7CisJCSRfID0gIlxAc2V0ZmlsZW5hbWUgZ2l0LmluZm9cbiI7CisJfSBlbHNpZiAoL15cQGRpcmVudHJ5LykgeworCQlwcmludCAnQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogR2l0OiAoZ2l0KS4gICAgICAgICAgIEEgZmFzdCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbQorQGVuZCBkaXJlbnRyeQorJzsJfQorCXVubGVzcyAoL15cQGRpcmVudHJ5Ly4uL15cQGVuZCBkaXJlbnRyeS8pIHsKKwkJcHJpbnQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1ZTNhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKQEAgLTAsMCArMSw0MzggQEAKK2dpdC1hZGQoMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFkZCAtIEFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYWRkJyBbLS12ZXJib3NlIHwgLXZdIFstLWRyeS1ydW4gfCAtbl0gWy0tZm9yY2UgfCAtZl0gWy0taW50ZXJhY3RpdmUgfCAtaV0gWy0tcGF0Y2ggfCAtcF0KKwkgIFstLWVkaXQgfCAtZV0gWy0tW25vLV1hbGwgfCAtLVtuby1daWdub3JlLXJlbW92YWwgfCBbLS11cGRhdGUgfCAtdV1dCisJICBbLS1pbnRlbnQtdG8tYWRkIHwgLU5dIFstLXJlZnJlc2hdIFstLWlnbm9yZS1lcnJvcnNdIFstLWlnbm9yZS1taXNzaW5nXSBbLS1yZW5vcm1hbGl6ZV0KKwkgIFstLWNobW9kPSgrfC0peF0gWy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPiBbLS1wYXRoc3BlYy1maWxlLW51bF1dCisJICBbLS1dIFs8cGF0aHNwZWM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCB1cGRhdGVzIHRoZSBpbmRleCB1c2luZyB0aGUgY3VycmVudCBjb250ZW50IGZvdW5kIGluCit0aGUgd29ya2luZyB0cmVlLCB0byBwcmVwYXJlIHRoZSBjb250ZW50IHN0YWdlZCBmb3IgdGhlIG5leHQgY29tbWl0LgorSXQgdHlwaWNhbGx5IGFkZHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBleGlzdGluZyBwYXRocyBhcyBhIHdob2xlLAorYnV0IHdpdGggc29tZSBvcHRpb25zIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRkIGNvbnRlbnQgd2l0aAorb25seSBwYXJ0IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyBhcHBsaWVkLCBvcgorcmVtb3ZlIHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSB3b3JraW5nIHRyZWUgYW55bW9yZS4KKworVGhlICJpbmRleCIgaG9sZHMgYSBzbmFwc2hvdCBvZiB0aGUgY29udGVudCBvZiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaXQKK2lzIHRoaXMgc25hcHNob3QgdGhhdCBpcyB0YWtlbiBhcyB0aGUgY29udGVudHMgb2YgdGhlIG5leHQgY29tbWl0LiAgVGh1cworYWZ0ZXIgbWFraW5nIGFueSBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBiZWZvcmUgcnVubmluZwordGhlIGNvbW1pdCBjb21tYW5kLCB5b3UgbXVzdCB1c2UgdGhlIGBhZGRgIGNvbW1hbmQgdG8gYWRkIGFueSBuZXcgb3IKK21vZGlmaWVkIGZpbGVzIHRvIHRoZSBpbmRleC4KKworVGhpcyBjb21tYW5kIGNhbiBiZSBwZXJmb3JtZWQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIGEgY29tbWl0LiAgSXQgb25seQorYWRkcyB0aGUgY29udGVudCBvZiB0aGUgc3BlY2lmaWVkIGZpbGUocykgYXQgdGhlIHRpbWUgdGhlIGFkZCBjb21tYW5kIGlzCitydW47IGlmIHlvdSB3YW50IHN1YnNlcXVlbnQgY2hhbmdlcyBpbmNsdWRlZCBpbiB0aGUgbmV4dCBjb21taXQsIHRoZW4KK3lvdSBtdXN0IHJ1biBgZ2l0IGFkZGAgYWdhaW4gdG8gYWRkIHRoZSBuZXcgY29udGVudCB0byB0aGUgaW5kZXguCisKK1RoZSBgZ2l0IHN0YXR1c2AgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gYSBzdW1tYXJ5IG9mIHdoaWNoCitmaWxlcyBoYXZlIGNoYW5nZXMgdGhhdCBhcmUgc3RhZ2VkIGZvciB0aGUgbmV4dCBjb21taXQuCisKK1RoZSBgZ2l0IGFkZGAgY29tbWFuZCB3aWxsIG5vdCBhZGQgaWdub3JlZCBmaWxlcyBieSBkZWZhdWx0LiAgSWYgYW55CitpZ25vcmVkIGZpbGVzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYGdpdCBhZGRgCit3aWxsIGZhaWwgd2l0aCBhIGxpc3Qgb2YgaWdub3JlZCBmaWxlcy4gIElnbm9yZWQgZmlsZXMgcmVhY2hlZCBieQorZGlyZWN0b3J5IHJlY3Vyc2lvbiBvciBmaWxlbmFtZSBnbG9iYmluZyBwZXJmb3JtZWQgYnkgR2l0IChxdW90ZSB5b3VyCitnbG9icyBiZWZvcmUgdGhlIHNoZWxsKSB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQuICBUaGUgJ2dpdCBhZGQnIGNvbW1hbmQgY2FuCitiZSB1c2VkIHRvIGFkZCBpZ25vcmVkIGZpbGVzIHdpdGggdGhlIGAtZmAgKGZvcmNlKSBvcHRpb24uCisKK1BsZWFzZSBzZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBhbHRlcm5hdGl2ZSB3YXlzIHRvIGFkZCBjb250ZW50IHRvIGEKK2NvbW1pdC4KKworCitPUFRJT05TCistLS0tLS0tCis8cGF0aHNwZWM+Li4uOjoKKwlGaWxlcyB0byBhZGQgY29udGVudCBmcm9tLiAgRmlsZWdsb2JzIChlLmcuIGAqLmNgKSBjYW4KKwliZSBnaXZlbiB0byBhZGQgYWxsIG1hdGNoaW5nIGZpbGVzLiAgQWxzbyBhCisJbGVhZGluZyBkaXJlY3RvcnkgbmFtZSAoZS5nLiBgZGlyYCB0byBhZGQgYGRpci9maWxlMWAKKwlhbmQgYGRpci9maWxlMmApIGNhbiBiZSBnaXZlbiB0byB1cGRhdGUgdGhlIGluZGV4IHRvCisJbWF0Y2ggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRpcmVjdG9yeSBhcyBhIHdob2xlIChlLmcuCisJc3BlY2lmeWluZyBgZGlyYCB3aWxsIHJlY29yZCBub3QganVzdCBhIGZpbGUgYGRpci9maWxlMWAKKwltb2RpZmllZCBpbiB0aGUgd29ya2luZyB0cmVlLCBhIGZpbGUgYGRpci9maWxlMmAgYWRkZWQgdG8KKwl0aGUgd29ya2luZyB0cmVlLCBidXQgYWxzbyBhIGZpbGUgYGRpci9maWxlM2AgcmVtb3ZlZCBmcm9tCisJdGhlIHdvcmtpbmcgdHJlZSkuIE5vdGUgdGhhdCBvbGRlciB2ZXJzaW9ucyBvZiBHaXQgdXNlZAorCXRvIGlnbm9yZSByZW1vdmVkIGZpbGVzOyB1c2UgYC0tbm8tYWxsYCBvcHRpb24gaWYgeW91IHdhbnQKKwl0byBhZGQgbW9kaWZpZWQgb3IgbmV3IGZpbGVzIGJ1dCBpZ25vcmUgcmVtb3ZlZCBvbmVzLgorKworRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgPHBhdGhzcGVjPiBzeW50YXgsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeQoraW4gbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworLW46OgorLS1kcnktcnVuOjoKKwlEb24ndCBhY3R1YWxseSBhZGQgdGhlIGZpbGUocyksIGp1c3Qgc2hvdyBpZiB0aGV5IGV4aXN0IGFuZC9vciB3aWxsCisJYmUgaWdub3JlZC4KKworLXY6OgorLS12ZXJib3NlOjoKKyAgICAgICAgQmUgdmVyYm9zZS4KKworLWY6OgorLS1mb3JjZTo6CisJQWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzLgorCistaTo6CistLWludGVyYWN0aXZlOjoKKwlBZGQgbW9kaWZpZWQgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSBpbnRlcmFjdGl2ZWx5IHRvCisJdGhlIGluZGV4LiBPcHRpb25hbCBwYXRoIGFyZ3VtZW50cyBtYXkgYmUgc3VwcGxpZWQgdG8gbGltaXQKKwlvcGVyYXRpb24gdG8gYSBzdWJzZXQgb2YgdGhlIHdvcmtpbmcgdHJlZS4gU2VlIGBgSW50ZXJhY3RpdmUKKwltb2RlJycgZm9yIGRldGFpbHMuCisKKy1wOjoKKy0tcGF0Y2g6OgorCUludGVyYWN0aXZlbHkgY2hvb3NlIGh1bmtzIG9mIHBhdGNoIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUKKwl3b3JrIHRyZWUgYW5kIGFkZCB0aGVtIHRvIHRoZSBpbmRleC4gVGhpcyBnaXZlcyB0aGUgdXNlciBhIGNoYW5jZQorCXRvIHJldmlldyB0aGUgZGlmZmVyZW5jZSBiZWZvcmUgYWRkaW5nIG1vZGlmaWVkIGNvbnRlbnRzIHRvIHRoZQorCWluZGV4LgorKworVGhpcyBlZmZlY3RpdmVseSBydW5zIGBhZGQgLS1pbnRlcmFjdGl2ZWAsIGJ1dCBieXBhc3NlcyB0aGUKK2luaXRpYWwgY29tbWFuZCBtZW51IGFuZCBkaXJlY3RseSBqdW1wcyB0byB0aGUgYHBhdGNoYCBzdWJjb21tYW5kLgorU2VlIGBgSW50ZXJhY3RpdmUgbW9kZScnIGZvciBkZXRhaWxzLgorCistZTo6CistLWVkaXQ6OgorCU9wZW4gdGhlIGRpZmYgdnMuIHRoZSBpbmRleCBpbiBhbiBlZGl0b3IgYW5kIGxldCB0aGUgdXNlcgorCWVkaXQgaXQuICBBZnRlciB0aGUgZWRpdG9yIHdhcyBjbG9zZWQsIGFkanVzdCB0aGUgaHVuayBoZWFkZXJzCisJYW5kIGFwcGx5IHRoZSBwYXRjaCB0byB0aGUgaW5kZXguCisrCitUaGUgaW50ZW50IG9mIHRoaXMgb3B0aW9uIGlzIHRvIHBpY2sgYW5kIGNob29zZSBsaW5lcyBvZiB0aGUgcGF0Y2ggdG8KK2FwcGx5LCBvciBldmVuIHRvIG1vZGlmeSB0aGUgY29udGVudHMgb2YgbGluZXMgdG8gYmUgc3RhZ2VkLiBUaGlzIGNhbiBiZQorcXVpY2tlciBhbmQgbW9yZSBmbGV4aWJsZSB0aGFuIHVzaW5nIHRoZSBpbnRlcmFjdGl2ZSBodW5rIHNlbGVjdG9yLgorSG93ZXZlciwgaXQgaXMgZWFzeSB0byBjb25mdXNlIG9uZXNlbGYgYW5kIGNyZWF0ZSBhIHBhdGNoIHRoYXQgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBpbmRleC4gU2VlIEVESVRJTkcgUEFUQ0hFUyBiZWxvdy4KKworLXU6OgorLS11cGRhdGU6OgorCVVwZGF0ZSB0aGUgaW5kZXgganVzdCB3aGVyZSBpdCBhbHJlYWR5IGhhcyBhbiBlbnRyeSBtYXRjaGluZworCTxwYXRoc3BlYz4uICBUaGlzIHJlbW92ZXMgYXMgd2VsbCBhcyBtb2RpZmllcyBpbmRleCBlbnRyaWVzIHRvCisJbWF0Y2ggdGhlIHdvcmtpbmcgdHJlZSwgYnV0IGFkZHMgbm8gbmV3IGZpbGVzLgorKworSWYgbm8gPHBhdGhzcGVjPiBpcyBnaXZlbiB3aGVuIGAtdWAgb3B0aW9uIGlzIHVzZWQsIGFsbAordHJhY2tlZCBmaWxlcyBpbiB0aGUgZW50aXJlIHdvcmtpbmcgdHJlZSBhcmUgdXBkYXRlZCAob2xkIHZlcnNpb25zCitvZiBHaXQgdXNlZCB0byBsaW1pdCB0aGUgdXBkYXRlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgaXRzCitzdWJkaXJlY3RvcmllcykuCisKKy1BOjoKKy0tYWxsOjoKKy0tbm8taWdub3JlLXJlbW92YWw6OgorCVVwZGF0ZSB0aGUgaW5kZXggbm90IG9ubHkgd2hlcmUgdGhlIHdvcmtpbmcgdHJlZSBoYXMgYSBmaWxlCisJbWF0Y2hpbmcgPHBhdGhzcGVjPiBidXQgYWxzbyB3aGVyZSB0aGUgaW5kZXggYWxyZWFkeSBoYXMgYW4KKwllbnRyeS4gVGhpcyBhZGRzLCBtb2RpZmllcywgYW5kIHJlbW92ZXMgaW5kZXggZW50cmllcyB0bworCW1hdGNoIHRoZSB3b3JraW5nIHRyZWUuCisrCitJZiBubyA8cGF0aHNwZWM+IGlzIGdpdmVuIHdoZW4gYC1BYCBvcHRpb24gaXMgdXNlZCwgYWxsCitmaWxlcyBpbiB0aGUgZW50aXJlIHdvcmtpbmcgdHJlZSBhcmUgdXBkYXRlZCAob2xkIHZlcnNpb25zCitvZiBHaXQgdXNlZCB0byBsaW1pdCB0aGUgdXBkYXRlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgaXRzCitzdWJkaXJlY3RvcmllcykuCisKKy0tbm8tYWxsOjoKKy0taWdub3JlLXJlbW92YWw6OgorCVVwZGF0ZSB0aGUgaW5kZXggYnkgYWRkaW5nIG5ldyBmaWxlcyB0aGF0IGFyZSB1bmtub3duIHRvIHRoZQorCWluZGV4IGFuZCBmaWxlcyBtb2RpZmllZCBpbiB0aGUgd29ya2luZyB0cmVlLCBidXQgaWdub3JlCisJZmlsZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUuICBUaGlzCisJb3B0aW9uIGlzIGEgbm8tb3Agd2hlbiBubyA8cGF0aHNwZWM+IGlzIHVzZWQuCisrCitUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgdG8gaGVscCB1c2VycyB3aG8gYXJlIHVzZWQgdG8gb2xkZXIKK3ZlcnNpb25zIG9mIEdpdCwgd2hvc2UgImdpdCBhZGQgPHBhdGhzcGVjPi4uLiIgd2FzIGEgc3lub255bQorZm9yICJnaXQgYWRkIC0tbm8tYWxsIDxwYXRoc3BlYz4uLi4iLCBpLmUuIGlnbm9yZWQgcmVtb3ZlZCBmaWxlcy4KKworLU46OgorLS1pbnRlbnQtdG8tYWRkOjoKKwlSZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIuIEFuIGVudHJ5CisJZm9yIHRoZSBwYXRoIGlzIHBsYWNlZCBpbiB0aGUgaW5kZXggd2l0aCBubyBjb250ZW50LiBUaGlzIGlzCisJdXNlZnVsIGZvciwgYW1vbmcgb3RoZXIgdGhpbmdzLCBzaG93aW5nIHRoZSB1bnN0YWdlZCBjb250ZW50IG9mCisJc3VjaCBmaWxlcyB3aXRoIGBnaXQgZGlmZmAgYW5kIGNvbW1pdHRpbmcgdGhlbSB3aXRoIGBnaXQgY29tbWl0CisJLWFgLgorCistLXJlZnJlc2g6OgorCURvbid0IGFkZCB0aGUgZmlsZShzKSwgYnV0IG9ubHkgcmVmcmVzaCB0aGVpciBzdGF0KCkKKwlpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXguCisKKy0taWdub3JlLWVycm9yczo6CisJSWYgc29tZSBmaWxlcyBjb3VsZCBub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMgaW5kZXhpbmcKKwl0aGVtLCBkbyBub3QgYWJvcnQgdGhlIG9wZXJhdGlvbiwgYnV0IGNvbnRpbnVlIGFkZGluZyB0aGUKKwlvdGhlcnMuIFRoZSBjb21tYW5kIHNoYWxsIHN0aWxsIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuCisJVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGFkZC5pZ25vcmVFcnJvcnNgIGNhbiBiZSBzZXQgdG8KKwl0cnVlIHRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCVRoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4uIEJ5IHVzaW5nCisJdGhpcyBvcHRpb24gdGhlIHVzZXIgY2FuIGNoZWNrIGlmIGFueSBvZiB0aGUgZ2l2ZW4gZmlsZXMgd291bGQKKwliZSBpZ25vcmVkLCBubyBtYXR0ZXIgaWYgdGhleSBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB3b3JrCisJdHJlZSBvciBub3QuCisKKy0tbm8td2Fybi1lbWJlZGRlZC1yZXBvOjoKKwlCeSBkZWZhdWx0LCBgZ2l0IGFkZGAgd2lsbCB3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkCisJcmVwb3NpdG9yeSB0byB0aGUgaW5kZXggd2l0aG91dCB1c2luZyBgZ2l0IHN1Ym1vZHVsZSBhZGRgIHRvCisJY3JlYXRlIGFuIGVudHJ5IGluIGAuZ2l0bW9kdWxlc2AuIFRoaXMgb3B0aW9uIHdpbGwgc3VwcHJlc3MgdGhlCisJd2FybmluZyAoZS5nLiwgaWYgeW91IGFyZSBtYW51YWxseSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgb24KKwlzdWJtb2R1bGVzKS4KKworLS1yZW5vcm1hbGl6ZTo6CisJQXBwbHkgdGhlICJjbGVhbiIgcHJvY2VzcyBmcmVzaGx5IHRvIGFsbCB0cmFja2VkIGZpbGVzIHRvCisJZm9yY2libHkgYWRkIHRoZW0gYWdhaW4gdG8gdGhlIGluZGV4LiAgVGhpcyBpcyB1c2VmdWwgYWZ0ZXIKKwljaGFuZ2luZyBgY29yZS5hdXRvY3JsZmAgY29uZmlndXJhdGlvbiBvciB0aGUgYHRleHRgIGF0dHJpYnV0ZQorCWluIG9yZGVyIHRvIGNvcnJlY3QgZmlsZXMgYWRkZWQgd2l0aCB3cm9uZyBDUkxGL0xGIGxpbmUgZW5kaW5ncy4KKwlUaGlzIG9wdGlvbiBpbXBsaWVzIGAtdWAuCisKKy0tY2htb2Q9KCt8LSl4OjoKKwlPdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGFkZGVkIGZpbGVzLiAgVGhlIGV4ZWN1dGFibGUKKwliaXQgaXMgb25seSBjaGFuZ2VkIGluIHRoZSBpbmRleCwgdGhlIGZpbGVzIG9uIGRpc2sgYXJlIGxlZnQKKwl1bmNoYW5nZWQuCisKKy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPjo6CisJUGF0aHNwZWMgaXMgcGFzc2VkIGluIGA8ZmlsZT5gIGluc3RlYWQgb2YgY29tbWFuZGxpbmUgYXJncy4gSWYKKwlgPGZpbGU+YCBpcyBleGFjdGx5IGAtYCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuIFBhdGhzcGVjCisJZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBieSBMRiBvciBDUi9MRi4gUGF0aHNwZWMgZWxlbWVudHMgY2FuIGJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU2VlIGFsc28gYC0tcGF0aHNwZWMtZmlsZS1udWxgIGFuZAorCWdsb2JhbCBgLS1saXRlcmFsLXBhdGhzcGVjc2AuCisKKy0tcGF0aHNwZWMtZmlsZS1udWw6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXBhdGhzcGVjLWZyb20tZmlsZWAuIFBhdGhzcGVjIGVsZW1lbnRzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgYW5kIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSB0YWtlbgorCWxpdGVyYWxseSAoaW5jbHVkaW5nIG5ld2xpbmVzIGFuZCBxdW90ZXMpLgorCitcLS06OgorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20KKwl0aGUgbGlzdCBvZiBmaWxlcywgKHVzZWZ1bCB3aGVuIGZpbGVuYW1lcyBtaWdodCBiZSBtaXN0YWtlbgorCWZvciBjb21tYW5kLWxpbmUgb3B0aW9ucykuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogQWRkcyBjb250ZW50IGZyb20gYWxsIGAqLnR4dGAgZmlsZXMgdW5kZXIgYERvY3VtZW50YXRpb25gIGRpcmVjdG9yeQorICBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgRG9jdW1lbnRhdGlvbi9cKi50eHQKKy0tLS0tLS0tLS0tLQorKworTm90ZSB0aGF0IHRoZSBhc3RlcmlzayBgKmAgaXMgcXVvdGVkIGZyb20gdGhlIHNoZWxsIGluIHRoaXMKK2V4YW1wbGU7IHRoaXMgbGV0cyB0aGUgY29tbWFuZCBpbmNsdWRlIHRoZSBmaWxlcyBmcm9tCitzdWJkaXJlY3RvcmllcyBvZiBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeS4KKworKiBDb25zaWRlcnMgYWRkaW5nIGNvbnRlbnQgZnJvbSBhbGwgZ2l0LSouc2ggc2NyaXB0czoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGdpdC0qLnNoCistLS0tLS0tLS0tLS0KKysKK0JlY2F1c2UgdGhpcyBleGFtcGxlIGxldHMgdGhlIHNoZWxsIGV4cGFuZCB0aGUgYXN0ZXJpc2sgKGkuZS4geW91IGFyZQorbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0IGRvZXMgbm90IGNvbnNpZGVyCitgc3ViZGlyL2dpdC1mb28uc2hgLgorCitJTlRFUkFDVElWRSBNT0RFCistLS0tLS0tLS0tLS0tLS0tCitXaGVuIHRoZSBjb21tYW5kIGVudGVycyB0aGUgaW50ZXJhY3RpdmUgbW9kZSwgaXQgc2hvd3MgdGhlCitvdXRwdXQgb2YgdGhlICdzdGF0dXMnIHN1YmNvbW1hbmQsIGFuZCB0aGVuIGdvZXMgaW50byBpdHMKK2ludGVyYWN0aXZlIGNvbW1hbmQgbG9vcC4KKworVGhlIGNvbW1hbmQgbG9vcCBzaG93cyB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcyBhdmFpbGFibGUsIGFuZAorZ2l2ZXMgYSBwcm9tcHQgIldoYXQgbm93PiAiLiAgSW4gZ2VuZXJhbCwgd2hlbiB0aGUgcHJvbXB0IGVuZHMKK3dpdGggYSBzaW5nbGUgJz4nLCB5b3UgY2FuIHBpY2sgb25seSBvbmUgb2YgdGhlIGNob2ljZXMgZ2l2ZW4KK2FuZCB0eXBlIHJldHVybiwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICAqKiogQ29tbWFuZHMgKioqCisgICAgICAxOiBzdGF0dXMgICAgICAgMjogdXBkYXRlICAgICAgIDM6IHJldmVydCAgICAgICA0OiBhZGQgdW50cmFja2VkCisgICAgICA1OiBwYXRjaCAgICAgICAgNjogZGlmZiAgICAgICAgIDc6IHF1aXQgICAgICAgICA4OiBoZWxwCisgICAgV2hhdCBub3c+IDEKKy0tLS0tLS0tLS0tLQorCitZb3UgYWxzbyBjb3VsZCBzYXkgYHNgIG9yIGBzdGFgIG9yIGBzdGF0dXNgIGFib3ZlIGFzIGxvbmcgYXMgdGhlCitjaG9pY2UgaXMgdW5pcXVlLgorCitUaGUgbWFpbiBjb21tYW5kIGxvb3AgaGFzIDYgc3ViY29tbWFuZHMgKHBsdXMgaGVscCBhbmQgcXVpdCkuCisKK3N0YXR1czo6CisKKyAgIFRoaXMgc2hvd3MgdGhlIGNoYW5nZSBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IChpLmUuIHdoYXQgd2lsbCBiZQorICAgY29tbWl0dGVkIGlmIHlvdSBzYXkgYGdpdCBjb21taXRgKSwgYW5kIGJldHdlZW4gaW5kZXggYW5kCisgICB3b3JraW5nIHRyZWUgZmlsZXMgKGkuZS4gd2hhdCB5b3UgY291bGQgc3RhZ2UgZnVydGhlciBiZWZvcmUKKyAgIGBnaXQgY29tbWl0YCB1c2luZyBgZ2l0IGFkZGApIGZvciBlYWNoIHBhdGguICBBIHNhbXBsZSBvdXRwdXQKKyAgIGxvb2tzIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBzdGFnZWQgICAgIHVuc3RhZ2VkIHBhdGgKKyAgICAgMTogICAgICAgYmluYXJ5ICAgICAgbm90aGluZyBmb28ucG5nCisgICAgIDI6ICAgICArNDAzLy0zNSAgICAgICAgKzEvLTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAorLS0tLS0tLS0tLS0tCisrCitJdCBzaG93cyB0aGF0IGZvby5wbmcgaGFzIGRpZmZlcmVuY2VzIGZyb20gSEVBRCAoYnV0IHRoYXQgaXMKK2JpbmFyeSBzbyBsaW5lIGNvdW50IGNhbm5vdCBiZSBzaG93bikgYW5kIHRoZXJlIGlzIG5vCitkaWZmZXJlbmNlIGJldHdlZW4gaW5kZXhlZCBjb3B5IGFuZCB0aGUgd29ya2luZyB0cmVlCit2ZXJzaW9uIChpZiB0aGUgd29ya2luZyB0cmVlIHZlcnNpb24gd2VyZSBhbHNvIGRpZmZlcmVudCwKKydiaW5hcnknIHdvdWxkIGhhdmUgYmVlbiBzaG93biBpbiBwbGFjZSBvZiAnbm90aGluZycpLiAgVGhlCitvdGhlciBmaWxlLCBnaXQtYWRke2xpdGRkfWludGVyYWN0aXZlLnBlcmwsIGhhcyA0MDMgbGluZXMgYWRkZWQKK2FuZCAzNSBsaW5lcyBkZWxldGVkIGlmIHlvdSBjb21taXQgd2hhdCBpcyBpbiB0aGUgaW5kZXgsIGJ1dAord29ya2luZyB0cmVlIGZpbGUgaGFzIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyAob25lIGFkZGl0aW9uIGFuZAorb25lIGRlbGV0aW9uKS4KKwordXBkYXRlOjoKKworICAgVGhpcyBzaG93cyB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBpc3N1ZXMgYW4gIlVwZGF0ZT4+IgorICAgcHJvbXB0LiAgV2hlbiB0aGUgcHJvbXB0IGVuZHMgd2l0aCBkb3VibGUgJz4+JywgeW91IGNhbgorICAgbWFrZSBtb3JlIHRoYW4gb25lIHNlbGVjdGlvbiwgY29uY2F0ZW5hdGVkIHdpdGggd2hpdGVzcGFjZSBvcgorICAgY29tbWEuICBBbHNvIHlvdSBjYW4gc2F5IHJhbmdlcy4gIEUuZy4gIjItNSA3LDkiIHRvIGNob29zZQorICAgMiwzLDQsNSw3LDkgZnJvbSB0aGUgbGlzdC4gIElmIHRoZSBzZWNvbmQgbnVtYmVyIGluIGEgcmFuZ2UgaXMKKyAgIG9taXR0ZWQsIGFsbCByZW1haW5pbmcgcGF0Y2hlcyBhcmUgdGFrZW4uICBFLmcuICI3LSIgdG8gY2hvb3NlCisgICA3LDgsOSBmcm9tIHRoZSBsaXN0LiAgWW91IGNhbiBzYXkgJyonIHRvIGNob29zZSBldmVyeXRoaW5nLgorKworV2hhdCB5b3UgY2hvc2UgYXJlIHRoZW4gaGlnaGxpZ2h0ZWQgd2l0aCAnKicsCitsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgc3RhZ2VkICAgICB1bnN0YWdlZCBwYXRoCisgIDE6ICAgICAgIGJpbmFyeSAgICAgIG5vdGhpbmcgZm9vLnBuZworKiAyOiAgICAgKzQwMy8tMzUgICAgICAgICsxLy0xIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKKy0tLS0tLS0tLS0tLQorKworVG8gcmVtb3ZlIHNlbGVjdGlvbiwgcHJlZml4IHRoZSBpbnB1dCB3aXRoIGAtYAorbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tCitVcGRhdGU+PiAtMgorLS0tLS0tLS0tLS0tCisrCitBZnRlciBtYWtpbmcgdGhlIHNlbGVjdGlvbiwgYW5zd2VyIHdpdGggYW4gZW1wdHkgbGluZSB0byBzdGFnZSB0aGUKK2NvbnRlbnRzIG9mIHdvcmtpbmcgdHJlZSBmaWxlcyBmb3Igc2VsZWN0ZWQgcGF0aHMgaW4gdGhlIGluZGV4LgorCityZXZlcnQ6OgorCisgIFRoaXMgaGFzIGEgdmVyeSBzaW1pbGFyIFVJIHRvICd1cGRhdGUnLCBhbmQgdGhlIHN0YWdlZAorICBpbmZvcm1hdGlvbiBmb3Igc2VsZWN0ZWQgcGF0aHMgYXJlIHJldmVydGVkIHRvIHRoYXQgb2YgdGhlCisgIEhFQUQgdmVyc2lvbi4gIFJldmVydGluZyBuZXcgcGF0aHMgbWFrZXMgdGhlbSB1bnRyYWNrZWQuCisKK2FkZCB1bnRyYWNrZWQ6OgorCisgIFRoaXMgaGFzIGEgdmVyeSBzaW1pbGFyIFVJIHRvICd1cGRhdGUnIGFuZAorICAncmV2ZXJ0JywgYW5kIGxldHMgeW91IGFkZCB1bnRyYWNrZWQgcGF0aHMgdG8gdGhlIGluZGV4LgorCitwYXRjaDo6CisKKyAgVGhpcyBsZXRzIHlvdSBjaG9vc2Ugb25lIHBhdGggb3V0IG9mIGEgJ3N0YXR1cycgbGlrZSBzZWxlY3Rpb24uCisgIEFmdGVyIGNob29zaW5nIHRoZSBwYXRoLCBpdCBwcmVzZW50cyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSBpbmRleAorICBhbmQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlIGFuZCBhc2tzIHlvdSBpZiB5b3Ugd2FudCB0byBzdGFnZQorICB0aGUgY2hhbmdlIG9mIGVhY2ggaHVuay4gIFlvdSBjYW4gc2VsZWN0IG9uZSBvZiB0aGUgZm9sbG93aW5nCisgIG9wdGlvbnMgYW5kIHR5cGUgcmV0dXJuOgorCisgICAgICAgeSAtIHN0YWdlIHRoaXMgaHVuaworICAgICAgIG4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rCisgICAgICAgcSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworICAgICAgIGEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorICAgICAgIGQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKKyAgICAgICBnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0bworICAgICAgIC8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXgKKyAgICAgICBqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmsKKyAgICAgICBKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVuaworICAgICAgIGsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmsKKyAgICAgICBLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmsKKyAgICAgICBzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3MKKyAgICAgICBlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rCisgICAgICAgPyAtIHByaW50IGhlbHAKKysKK0FmdGVyIGRlY2lkaW5nIHRoZSBmYXRlIGZvciBhbGwgaHVua3MsIGlmIHRoZXJlIGlzIGFueSBodW5rCit0aGF0IHdhcyBjaG9zZW4sIHRoZSBpbmRleCBpcyB1cGRhdGVkIHdpdGggdGhlIHNlbGVjdGVkIGh1bmtzLgorKworWW91IGNhbiBvbWl0IGhhdmluZyB0byB0eXBlIHJldHVybiBoZXJlLCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSBgaW50ZXJhY3RpdmUuc2luZ2xlS2V5YCB0byBgdHJ1ZWAuCisKK2RpZmY6OgorCisgIFRoaXMgbGV0cyB5b3UgcmV2aWV3IHdoYXQgd2lsbCBiZSBjb21taXR0ZWQgKGkuZS4gYmV0d2VlbgorICBIRUFEIGFuZCBpbmRleCkuCisKKworRURJVElORyBQQVRDSEVTCistLS0tLS0tLS0tLS0tLS0KKworSW52b2tpbmcgYGdpdCBhZGQgLWVgIG9yIHNlbGVjdGluZyBgZWAgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaHVuaworc2VsZWN0b3Igd2lsbCBvcGVuIGEgcGF0Y2ggaW4geW91ciBlZGl0b3I7IGFmdGVyIHRoZSBlZGl0b3IgZXhpdHMsIHRoZQorcmVzdWx0IGlzIGFwcGxpZWQgdG8gdGhlIGluZGV4LiBZb3UgYXJlIGZyZWUgdG8gbWFrZSBhcmJpdHJhcnkgY2hhbmdlcwordG8gdGhlIHBhdGNoLCBidXQgbm90ZSB0aGF0IHNvbWUgY2hhbmdlcyBtYXkgaGF2ZSBjb25mdXNpbmcgcmVzdWx0cywgb3IKK2V2ZW4gcmVzdWx0IGluIGEgcGF0Y2ggdGhhdCBjYW5ub3QgYmUgYXBwbGllZC4gIElmIHlvdSB3YW50IHRvIGFib3J0IHRoZQorb3BlcmF0aW9uIGVudGlyZWx5IChpLmUuLCBzdGFnZSBub3RoaW5nIG5ldyBpbiB0aGUgaW5kZXgpLCBzaW1wbHkgZGVsZXRlCithbGwgbGluZXMgb2YgdGhlIHBhdGNoLiBUaGUgbGlzdCBiZWxvdyBkZXNjcmliZXMgc29tZSBjb21tb24gdGhpbmdzIHlvdQorbWF5IHNlZSBpbiBhIHBhdGNoLCBhbmQgd2hpY2ggZWRpdGluZyBvcGVyYXRpb25zIG1ha2Ugc2Vuc2Ugb24gdGhlbS4KKworLS0KK2FkZGVkIGNvbnRlbnQ6OgorCitBZGRlZCBjb250ZW50IGlzIHJlcHJlc2VudGVkIGJ5IGxpbmVzIGJlZ2lubmluZyB3aXRoICJ7cGx1c30iLiBZb3UgY2FuCitwcmV2ZW50IHN0YWdpbmcgYW55IGFkZGl0aW9uIGxpbmVzIGJ5IGRlbGV0aW5nIHRoZW0uCisKK3JlbW92ZWQgY29udGVudDo6CisKK1JlbW92ZWQgY29udGVudCBpcyByZXByZXNlbnRlZCBieSBsaW5lcyBiZWdpbm5pbmcgd2l0aCAiLSIuIFlvdSBjYW4KK3ByZXZlbnQgc3RhZ2luZyB0aGVpciByZW1vdmFsIGJ5IGNvbnZlcnRpbmcgdGhlICItIiB0byBhICIgIiAoc3BhY2UpLgorCittb2RpZmllZCBjb250ZW50OjoKKworTW9kaWZpZWQgY29udGVudCBpcyByZXByZXNlbnRlZCBieSAiLSIgbGluZXMgKHJlbW92aW5nIHRoZSBvbGQgY29udGVudCkKK2ZvbGxvd2VkIGJ5ICJ7cGx1c30iIGxpbmVzIChhZGRpbmcgdGhlIHJlcGxhY2VtZW50IGNvbnRlbnQpLiBZb3UgY2FuCitwcmV2ZW50IHN0YWdpbmcgdGhlIG1vZGlmaWNhdGlvbiBieSBjb252ZXJ0aW5nICItIiBsaW5lcyB0byAiICIsIGFuZAorcmVtb3ZpbmcgIntwbHVzfSIgbGluZXMuIEJld2FyZSB0aGF0IG1vZGlmeWluZyBvbmx5IGhhbGYgb2YgdGhlIHBhaXIgaXMKK2xpa2VseSB0byBpbnRyb2R1Y2UgY29uZnVzaW5nIGNoYW5nZXMgdG8gdGhlIGluZGV4LgorLS0KKworVGhlcmUgYXJlIGFsc28gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkLiBCdXQgYmV3YXJlCit0aGF0IGJlY2F1c2UgdGhlIHBhdGNoIGlzIGFwcGxpZWQgb25seSB0byB0aGUgaW5kZXggYW5kIG5vdCB0aGUgd29ya2luZwordHJlZSwgdGhlIHdvcmtpbmcgdHJlZSB3aWxsIGFwcGVhciB0byAidW5kbyIgdGhlIGNoYW5nZSBpbiB0aGUgaW5kZXguCitGb3IgZXhhbXBsZSwgaW50cm9kdWNpbmcgYSBuZXcgbGluZSBpbnRvIHRoZSBpbmRleCB0aGF0IGlzIGluIG5laXRoZXIKK3RoZSBIRUFEIG5vciB0aGUgd29ya2luZyB0cmVlIHdpbGwgc3RhZ2UgdGhlIG5ldyBsaW5lIGZvciBjb21taXQsIGJ1dAordGhlIGxpbmUgd2lsbCBhcHBlYXIgdG8gYmUgcmV2ZXJ0ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworQXZvaWQgdXNpbmcgdGhlc2UgY29uc3RydWN0cywgb3IgZG8gc28gd2l0aCBleHRyZW1lIGNhdXRpb24uCisKKy0tCityZW1vdmluZyB1bnRvdWNoZWQgY29udGVudDo6CisKK0NvbnRlbnQgd2hpY2ggZG9lcyBub3QgZGlmZmVyIGJldHdlZW4gdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgbWF5IGJlCitzaG93biBvbiBjb250ZXh0IGxpbmVzLCBiZWdpbm5pbmcgd2l0aCBhICIgIiAoc3BhY2UpLiAgWW91IGNhbiBzdGFnZQorY29udGV4dCBsaW5lcyBmb3IgcmVtb3ZhbCBieSBjb252ZXJ0aW5nIHRoZSBzcGFjZSB0byBhICItIi4gVGhlCityZXN1bHRpbmcgd29ya2luZyB0cmVlIGZpbGUgd2lsbCBhcHBlYXIgdG8gcmUtYWRkIHRoZSBjb250ZW50LgorCittb2RpZnlpbmcgZXhpc3RpbmcgY29udGVudDo6CisKK09uZSBjYW4gYWxzbyBtb2RpZnkgY29udGV4dCBsaW5lcyBieSBzdGFnaW5nIHRoZW0gZm9yIHJlbW92YWwgKGJ5Citjb252ZXJ0aW5nICIgIiB0byAiLSIpIGFuZCBhZGRpbmcgYSAie3BsdXN9IiBsaW5lIHdpdGggdGhlIG5ldyBjb250ZW50LgorU2ltaWxhcmx5LCBvbmUgY2FuIG1vZGlmeSAie3BsdXN9IiBsaW5lcyBmb3IgZXhpc3RpbmcgYWRkaXRpb25zIG9yCittb2RpZmljYXRpb25zLiBJbiBhbGwgY2FzZXMsIHRoZSBuZXcgbW9kaWZpY2F0aW9uIHdpbGwgYXBwZWFyIHJldmVydGVkCitpbiB0aGUgd29ya2luZyB0cmVlLgorCituZXcgY29udGVudDo6CisKK1lvdSBtYXkgYWxzbyBhZGQgbmV3IGNvbnRlbnQgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcGF0Y2g7IHNpbXBseQorYWRkIG5ldyBsaW5lcywgZWFjaCBzdGFydGluZyB3aXRoICJ7cGx1c30iLiBUaGUgYWRkaXRpb24gd2lsbCBhcHBlYXIKK3JldmVydGVkIGluIHRoZSB3b3JraW5nIHRyZWUuCistLQorCitUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIG9wZXJhdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGF2b2lkZWQgZW50aXJlbHksIGFzCit0aGV5IHdpbGwgbWFrZSB0aGUgcGF0Y2ggaW1wb3NzaWJsZSB0byBhcHBseToKKworKiBhZGRpbmcgY29udGV4dCAoIiAiKSBvciByZW1vdmFsICgiLSIpIGxpbmVzCisqIGRlbGV0aW5nIGNvbnRleHQgb3IgcmVtb3ZhbCBsaW5lcworKiBtb2RpZnlpbmcgdGhlIGNvbnRlbnRzIG9mIGNvbnRleHQgb3IgcmVtb3ZhbCBsaW5lcworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXN0YXR1c1sxXQorbGlua2dpdDpnaXQtcm1bMV0KK2xpbmtnaXQ6Z2l0LXJlc2V0WzFdCitsaW5rZ2l0OmdpdC1tdlsxXQorbGlua2dpdDpnaXQtY29tbWl0WzFdCitsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1NzU0ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApAQCAtMCwwICsxLDI0NyBAQAorZ2l0LWFtKDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFtIC0gQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhbScgWy0tc2lnbm9mZl0gWy0ta2VlcF0gWy0tW25vLV1rZWVwLWNyXSBbLS1bbm8tXXV0ZjhdCisJIFstLVtuby1dM3dheV0gWy0taW50ZXJhY3RpdmVdIFstLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlXQorCSBbLS1pZ25vcmUtZGF0ZV0gWy0taWdub3JlLXNwYWNlLWNoYW5nZSB8IC0taWdub3JlLXdoaXRlc3BhY2VdCisJIFstLXdoaXRlc3BhY2U9PG9wdGlvbj5dIFstQzxuPl0gWy1wPG4+XSBbLS1kaXJlY3Rvcnk9PGRpcj5dCisJIFstLWV4Y2x1ZGU9PHBhdGg+XSBbLS1pbmNsdWRlPTxwYXRoPl0gWy0tcmVqZWN0XSBbLXEgfCAtLXF1aWV0XQorCSBbLS1bbm8tXXNjaXNzb3JzXSBbLVNbPGtleWlkPl1dIFstLXBhdGNoLWZvcm1hdD08Zm9ybWF0Pl0KKwkgWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXQorJ2dpdCBhbScgKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0IHwgLS1xdWl0IHwgLS1zaG93LWN1cnJlbnQtcGF0Y2hbPShkaWZmfHJhdyldKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NwbGl0cyBtYWlsIG1lc3NhZ2VzIGluIGEgbWFpbGJveCBpbnRvIGNvbW1pdCBsb2cgbWVzc2FnZSwKK2F1dGhvcnNoaXAgaW5mb3JtYXRpb24gYW5kIHBhdGNoZXMsIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlCitjdXJyZW50IGJyYW5jaC4KKworT1BUSU9OUworLS0tLS0tLQorKDxtYm94Pnw8TWFpbGRpcj4pLi4uOjoKKwlUaGUgbGlzdCBvZiBtYWlsYm94IGZpbGVzIHRvIHJlYWQgcGF0Y2hlcyBmcm9tLiBJZiB5b3UgZG8gbm90CisJc3VwcGx5IHRoaXMgYXJndW1lbnQsIHRoZSBjb21tYW5kIHJlYWRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUlmIHlvdSBzdXBwbHkgZGlyZWN0b3JpZXMsIHRoZXkgd2lsbCBiZSB0cmVhdGVkIGFzIE1haWxkaXJzLgorCistczo6CistLXNpZ25vZmY6OgorCUFkZCBhIGBTaWduZWQtb2ZmLWJ5OmAgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UsIHVzaW5nCisJdGhlIGNvbW1pdHRlciBpZGVudGl0eSBvZiB5b3Vyc2VsZi4KKwlTZWUgdGhlIHNpZ25vZmYgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLWs6OgorLS1rZWVwOjoKKwlQYXNzIGAta2AgZmxhZyB0byAnZ2l0IG1haWxpbmZvJyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworLS1rZWVwLW5vbi1wYXRjaDo6CisJUGFzcyBgLWJgIGZsYWcgdG8gJ2dpdCBtYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy0tW25vLV1rZWVwLWNyOjoKKwlXaXRoIGAtLWtlZXAtY3JgLCBjYWxsICdnaXQgbWFpbHNwbGl0JyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxzcGxpdFsxXSkKKwl3aXRoIHRoZSBzYW1lIG9wdGlvbiwgdG8gcHJldmVudCBpdCBmcm9tIHN0cmlwcGluZyBDUiBhdCB0aGUgZW5kIG9mCisJbGluZXMuIGBhbS5rZWVwY3JgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKKwlkZWZhdWx0IGJlaGF2aW91ci4gIGAtLW5vLWtlZXAtY3JgIGlzIHVzZWZ1bCB0byBvdmVycmlkZSBgYW0ua2VlcGNyYC4KKworLWM6OgorLS1zY2lzc29yczo6CisJUmVtb3ZlIGV2ZXJ5dGhpbmcgaW4gYm9keSBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIChzZWUKKwlsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuIENhbiBiZSBhY3RpdmF0ZWQgYnkgZGVmYXVsdCB1c2luZworCXRoZSBgbWFpbGluZm8uc2Npc3NvcnNgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKy0tbm8tc2Npc3NvcnM6OgorCUlnbm9yZSBzY2lzc29ycyBsaW5lcyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworLW06OgorLS1tZXNzYWdlLWlkOjoKKwlQYXNzIHRoZSBgLW1gIGZsYWcgdG8gJ2dpdCBtYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSksCisJc28gdGhhdCB0aGUgTWVzc2FnZS1JRCBoZWFkZXIgaXMgYWRkZWQgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLgorCVRoZSBgYW0ubWVzc2FnZWlkYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKKwl0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisKKy0tbm8tbWVzc2FnZS1pZDo6CisJRG8gbm90IGFkZCB0aGUgTWVzc2FnZS1JRCBoZWFkZXIgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLgorCWBuby1tZXNzYWdlLWlkYCBpcyB1c2VmdWwgdG8gb3ZlcnJpZGUgYGFtLm1lc3NhZ2VpZGAuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LiBPbmx5IHByaW50IGVycm9yIG1lc3NhZ2VzLgorCistdTo6CistLXV0Zjg6OgorCVBhc3MgYC11YCBmbGFnIHRvICdnaXQgbWFpbGluZm8nIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgorCVRoZSBwcm9wb3NlZCBjb21taXQgbG9nIG1lc3NhZ2UgdGFrZW4gZnJvbSB0aGUgZS1tYWlsCisJaXMgcmUtY29kZWQgaW50byBVVEYtOCBlbmNvZGluZyAoY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWBpMThuLmNvbW1pdGVuY29kaW5nYCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHByb2plY3QncworCXByZWZlcnJlZCBlbmNvZGluZyBpZiBpdCBpcyBub3QgVVRGLTgpLgorKworVGhpcyB3YXMgb3B0aW9uYWwgaW4gcHJpb3IgdmVyc2lvbnMgb2YgZ2l0LCBidXQgbm93IGl0IGlzIHRoZQorZGVmYXVsdC4gICBZb3UgY2FuIHVzZSBgLS1uby11dGY4YCB0byBvdmVycmlkZSB0aGlzLgorCistLW5vLXV0Zjg6OgorCVBhc3MgYC1uYCBmbGFnIHRvICdnaXQgbWFpbGluZm8nIChzZWUKKwlsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy0zOjoKKy0tM3dheTo6CistLW5vLTN3YXk6OgorCVdoZW4gdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHksIGZhbGwgYmFjayBvbgorCTMtd2F5IG1lcmdlIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icworCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvIGFuZCB3ZSBoYXZlIHRob3NlIGJsb2JzCisJYXZhaWxhYmxlIGxvY2FsbHkuIGAtLW5vLTN3YXlgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlCisJYW0udGhyZWVXYXkgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCisJc2VlIGFtLnRocmVlV2F5IGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1yZXJlcmUtYXV0b3VwZGF0ZTo6CistLW5vLXJlcmVyZS1hdXRvdXBkYXRlOjoKKwlBbGxvdyB0aGUgcmVyZXJlIG1lY2hhbmlzbSB0byB1cGRhdGUgdGhlIGluZGV4IHdpdGggdGhlCisJcmVzdWx0IG9mIGF1dG8tY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZS4KKworLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKy0taWdub3JlLXdoaXRlc3BhY2U6OgorLS13aGl0ZXNwYWNlPTxvcHRpb24+OjoKKy1DPG4+OjoKKy1wPG4+OjoKKy0tZGlyZWN0b3J5PTxkaXI+OjoKKy0tZXhjbHVkZT08cGF0aD46OgorLS1pbmNsdWRlPTxwYXRoPjo6CistLXJlamVjdDo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkKKwlwcm9ncmFtIHRoYXQgYXBwbGllcworCXRoZSBwYXRjaC4KKworLS1wYXRjaC1mb3JtYXQ6OgorCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgd2lsbCB0cnkgdG8gZGV0ZWN0IHRoZSBwYXRjaCBmb3JtYXQKKwlhdXRvbWF0aWNhbGx5LiBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gYnlwYXNzIHRoZSBhdXRvbWF0aWMKKwlkZXRlY3Rpb24gYW5kIHNwZWNpZnkgdGhlIHBhdGNoIGZvcm1hdCB0aGF0IHRoZSBwYXRjaChlcykgc2hvdWxkIGJlCisJaW50ZXJwcmV0ZWQgYXMuIFZhbGlkIGZvcm1hdHMgYXJlIG1ib3gsIG1ib3hyZCwKKwlzdGdpdCwgc3RnaXQtc2VyaWVzIGFuZCBoZy4KKworLWk6OgorLS1pbnRlcmFjdGl2ZTo6CisJUnVuIGludGVyYWN0aXZlbHkuCisKKy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGU6OgorCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgcmVjb3JkcyB0aGUgZGF0ZSBmcm9tIHRoZSBlLW1haWwKKwltZXNzYWdlIGFzIHRoZSBjb21taXQgYXV0aG9yIGRhdGUsIGFuZCB1c2VzIHRoZSB0aW1lIG9mCisJY29tbWl0IGNyZWF0aW9uIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4gVGhpcyBhbGxvd3MgdGhlCisJdXNlciB0byBsaWUgYWJvdXQgdGhlIGNvbW1pdHRlciBkYXRlIGJ5IHVzaW5nIHRoZSBzYW1lCisJdmFsdWUgYXMgdGhlIGF1dGhvciBkYXRlLgorCistLWlnbm9yZS1kYXRlOjoKKwlCeSBkZWZhdWx0IHRoZSBjb21tYW5kIHJlY29yZHMgdGhlIGRhdGUgZnJvbSB0aGUgZS1tYWlsCisJbWVzc2FnZSBhcyB0aGUgY29tbWl0IGF1dGhvciBkYXRlLCBhbmQgdXNlcyB0aGUgdGltZSBvZgorCWNvbW1pdCBjcmVhdGlvbiBhcyB0aGUgY29tbWl0dGVyIGRhdGUuIFRoaXMgYWxsb3dzIHRoZQorCXVzZXIgdG8gbGllIGFib3V0IHRoZSBhdXRob3IgZGF0ZSBieSB1c2luZyB0aGUgc2FtZQorCXZhbHVlIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4KKworLS1za2lwOjoKKwlTa2lwIHRoZSBjdXJyZW50IHBhdGNoLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbgorCXJlc3RhcnRpbmcgYW4gYWJvcnRlZCBwYXRjaC4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIGNvbW1pdHMuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZAorCWRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorCXN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistLWNvbnRpbnVlOjoKKy1yOjoKKy0tcmVzb2x2ZWQ6OgorCUFmdGVyIGEgcGF0Y2ggZmFpbHVyZSAoZS5nLiBhdHRlbXB0aW5nIHRvIGFwcGx5CisJY29uZmxpY3RpbmcgcGF0Y2gpLCB0aGUgdXNlciBoYXMgYXBwbGllZCBpdCBieSBoYW5kIGFuZAorCXRoZSBpbmRleCBmaWxlIHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBhcHBsaWNhdGlvbi4KKwlNYWtlIGEgY29tbWl0IHVzaW5nIHRoZSBhdXRob3JzaGlwIGFuZCBjb21taXQgbG9nCisJZXh0cmFjdGVkIGZyb20gdGhlIGUtbWFpbCBtZXNzYWdlIGFuZCB0aGUgY3VycmVudCBpbmRleAorCWZpbGUsIGFuZCBjb250aW51ZS4KKworLS1yZXNvbHZlbXNnPTxtc2c+OjoKKwlXaGVuIGEgcGF0Y2ggZmFpbHVyZSBvY2N1cnMsIDxtc2c+IHdpbGwgYmUgcHJpbnRlZAorCXRvIHRoZSBzY3JlZW4gYmVmb3JlIGV4aXRpbmcuICBUaGlzIG92ZXJyaWRlcyB0aGUKKwlzdGFuZGFyZCBtZXNzYWdlIGluZm9ybWluZyB5b3UgdG8gdXNlIGAtLWNvbnRpbnVlYAorCW9yIGAtLXNraXBgIHRvIGhhbmRsZSB0aGUgZmFpbHVyZS4gIFRoaXMgaXMgc29sZWx5CisJZm9yIGludGVybmFsIHVzZSBiZXR3ZWVuICdnaXQgcmViYXNlJyBhbmQgJ2dpdCBhbScuCisKKy0tYWJvcnQ6OgorCVJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4KKworLS1xdWl0OjoKKwlBYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgYW5kIHRoZSBpbmRleAorCXVudG91Y2hlZC4KKworLS1zaG93LWN1cnJlbnQtcGF0Y2hbPShkaWZmfHJhdyldOjoKKwlTaG93IHRoZSBtZXNzYWdlIGF0IHdoaWNoIGBnaXQgYW1gIGhhcyBzdG9wcGVkIGR1ZSB0bworCWNvbmZsaWN0cy4gIElmIGByYXdgIGlzIHNwZWNpZmllZCwgc2hvdyB0aGUgcmF3IGNvbnRlbnRzIG9mCisJdGhlIGUtbWFpbCBtZXNzYWdlOyBpZiBgZGlmZmAsIHNob3cgdGhlIGRpZmYgcG9ydGlvbiBvbmx5LgorCURlZmF1bHRzIHRvIGByYXdgLgorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1RoZSBjb21taXQgYXV0aG9yIG5hbWUgaXMgdGFrZW4gZnJvbSB0aGUgIkZyb206ICIgbGluZSBvZiB0aGUKK21lc3NhZ2UsIGFuZCBjb21taXQgYXV0aG9yIGRhdGUgaXMgdGFrZW4gZnJvbSB0aGUgIkRhdGU6ICIgbGluZQorb2YgdGhlIG1lc3NhZ2UuICBUaGUgIlN1YmplY3Q6ICIgbGluZSBpcyB1c2VkIGFzIHRoZSB0aXRsZSBvZgordGhlIGNvbW1pdCwgYWZ0ZXIgc3RyaXBwaW5nIGNvbW1vbiBwcmVmaXggIltQQVRDSCA8YW55dGhpbmc+XSIuCitUaGUgIlN1YmplY3Q6ICIgbGluZSBpcyBzdXBwb3NlZCB0byBjb25jaXNlbHkgZGVzY3JpYmUgd2hhdCB0aGUKK2NvbW1pdCBpcyBhYm91dCBpbiBvbmUgbGluZSBvZiB0ZXh0LgorCisiRnJvbTogIiwgIkRhdGU6ICIsIGFuZCAiU3ViamVjdDogIiBsaW5lcyBzdGFydGluZyB0aGUgYm9keSBvdmVycmlkZSB0aGUKK3Jlc3BlY3RpdmUgY29tbWl0IGF1dGhvciBuYW1lIGFuZCB0aXRsZSB2YWx1ZXMgdGFrZW4gZnJvbSB0aGUgaGVhZGVycy4KKworVGhlIGNvbW1pdCBtZXNzYWdlIGlzIGZvcm1lZCBieSB0aGUgdGl0bGUgdGFrZW4gZnJvbSB0aGUKKyJTdWJqZWN0OiAiLCBhIGJsYW5rIGxpbmUgYW5kIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIHVwIHRvCit3aGVyZSB0aGUgcGF0Y2ggYmVnaW5zLiAgRXhjZXNzIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiBlYWNoCitsaW5lIGlzIGF1dG9tYXRpY2FsbHkgc3RyaXBwZWQuCisKK1RoZSBwYXRjaCBpcyBleHBlY3RlZCB0byBiZSBpbmxpbmUsIGRpcmVjdGx5IGZvbGxvd2luZyB0aGUKK21lc3NhZ2UuICBBbnkgbGluZSB0aGF0IGlzIG9mIHRoZSBmb3JtOgorCisqIHRocmVlLWRhc2hlcyBhbmQgZW5kLW9mLWxpbmUsIG9yCisqIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoICJkaWZmIC0iLCBvcgorKiBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCAiSW5kZXg6ICIKKworaXMgdGFrZW4gYXMgdGhlIGJlZ2lubmluZyBvZiBhIHBhdGNoLCBhbmQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZQoraXMgdGVybWluYXRlZCBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2Ygc3VjaCBhIGxpbmUuCisKK1doZW4gaW5pdGlhbGx5IGludm9raW5nIGBnaXQgYW1gLCB5b3UgZ2l2ZSBpdCB0aGUgbmFtZXMgb2YgdGhlIG1haWxib3hlcwordG8gcHJvY2Vzcy4gIFVwb24gc2VlaW5nIHRoZSBmaXJzdCBwYXRjaCB0aGF0IGRvZXMgbm90IGFwcGx5LCBpdAorYWJvcnRzIGluIHRoZSBtaWRkbGUuICBZb3UgY2FuIHJlY292ZXIgZnJvbSB0aGlzIGluIG9uZSBvZiB0d28gd2F5czoKKworLiBza2lwIHRoZSBjdXJyZW50IHBhdGNoIGJ5IHJlLXJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCB0aGUgYC0tc2tpcGAKKyAgb3B0aW9uLgorCisuIGhhbmQgcmVzb2x2ZSB0aGUgY29uZmxpY3QgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgdXBkYXRlCisgIHRoZSBpbmRleCBmaWxlIHRvIGJyaW5nIGl0IGludG8gYSBzdGF0ZSB0aGF0IHRoZSBwYXRjaCBzaG91bGQKKyAgaGF2ZSBwcm9kdWNlZC4gIFRoZW4gcnVuIHRoZSBjb21tYW5kIHdpdGggdGhlIGAtLWNvbnRpbnVlYCBvcHRpb24uCisKK1RoZSBjb21tYW5kIHJlZnVzZXMgdG8gcHJvY2VzcyBuZXcgbWFpbGJveGVzIHVudGlsIHRoZSBjdXJyZW50CitvcGVyYXRpb24gaXMgZmluaXNoZWQsIHNvIGlmIHlvdSBkZWNpZGUgdG8gc3RhcnQgb3ZlciBmcm9tIHNjcmF0Y2gsCitydW4gYGdpdCBhbSAtLWFib3J0YCBiZWZvcmUgcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIG1haWxib3gKK25hbWVzLgorCitCZWZvcmUgYW55IHBhdGNoZXMgYXJlIGFwcGxpZWQsIE9SSUdfSEVBRCBpcyBzZXQgdG8gdGhlIHRpcCBvZiB0aGUKK2N1cnJlbnQgYnJhbmNoLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCBtdWx0aXBsZQorY29tbWl0cywgbGlrZSBydW5uaW5nICdnaXQgYW0nIG9uIHRoZSB3cm9uZyBicmFuY2ggb3IgYW4gZXJyb3IgaW4gdGhlCitjb21taXRzIHRoYXQgaXMgbW9yZSBlYXNpbHkgZml4ZWQgYnkgY2hhbmdpbmcgdGhlIG1haWxib3ggKGUuZy4KK2Vycm9ycyBpbiB0aGUgIkZyb206IiBsaW5lcykuCisKK0hPT0tTCistLS0tLQorVGhpcyBjb21tYW5kIGNhbiBydW4gYGFwcGx5cGF0Y2gtbXNnYCwgYHByZS1hcHBseXBhdGNoYCwKK2FuZCBgcG9zdC1hcHBseXBhdGNoYCBob29rcy4gIFNlZSBsaW5rZ2l0OmdpdGhvb2tzWzVdIGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1hcHBseVsxXS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbm5vdGF0ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbm5vdGF0ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0YTgzMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFubm90YXRlLnR4dApAQCAtMCwwICsxLDMzIEBACitnaXQtYW5ub3RhdGUoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYW5ub3RhdGUgLSBBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhbm5vdGF0ZScgWzxvcHRpb25zPl0gPGZpbGU+IFs8cmV2aXNpb24+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0Fubm90YXRlcyBlYWNoIGxpbmUgaW4gdGhlIGdpdmVuIGZpbGUgd2l0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjb21taXQKK3doaWNoIGludHJvZHVjZWQgdGhlIGxpbmUuIE9wdGlvbmFsbHkgYW5ub3RhdGVzIGZyb20gYSBnaXZlbiByZXZpc2lvbi4KKworVGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgY29tbWFuZCBhbmQgbGlua2dpdDpnaXQtYmxhbWVbMV0gaXMgdGhhdAordGhleSB1c2Ugc2xpZ2h0bHkgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzLCBhbmQgdGhpcyBjb21tYW5kIGV4aXN0cyBvbmx5Citmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB0byBzdXBwb3J0IGV4aXN0aW5nIHNjcmlwdHMsIGFuZCBwcm92aWRlIGEgbW9yZQorZmFtaWxpYXIgY29tbWFuZCBuYW1lIGZvciBwZW9wbGUgY29taW5nIGZyb20gb3RoZXIgU0NNIHN5c3RlbXMuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmJsYW1lLW9wdGlvbnMudHh0W10KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1ibGFtZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWFhMzkwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CkBAIC0wLDAgKzEsMjg1IEBACitnaXQtYXBwbHkoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYXBwbHkgLSBBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYXBwbHknIFstLXN0YXRdIFstLW51bXN0YXRdIFstLXN1bW1hcnldIFstLWNoZWNrXSBbLS1pbmRleCB8IC0taW50ZW50LXRvLWFkZF0gWy0tM3dheV0KKwkgIFstLWFwcGx5XSBbLS1uby1hZGRdIFstLWJ1aWxkLWZha2UtYW5jZXN0b3I9PGZpbGU+XSBbLVIgfCAtLXJldmVyc2VdCisJICBbLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgfCAtLWJpbmFyeV0gWy0tcmVqZWN0XSBbLXpdCisJICBbLXA8bj5dIFstQzxuPl0gWy0taW5hY2N1cmF0ZS1lb2ZdIFstLXJlY291bnRdIFstLWNhY2hlZF0KKwkgIFstLWlnbm9yZS1zcGFjZS1jaGFuZ2UgfCAtLWlnbm9yZS13aGl0ZXNwYWNlXQorCSAgWy0td2hpdGVzcGFjZT0obm93YXJufHdhcm58Zml4fGVycm9yfGVycm9yLWFsbCldCisJICBbLS1leGNsdWRlPTxwYXRoPl0gWy0taW5jbHVkZT08cGF0aD5dIFstLWRpcmVjdG9yeT08cm9vdD5dCisJICBbLS12ZXJib3NlXSBbLS11bnNhZmUtcGF0aHNdIFs8cGF0Y2g+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIHRoZSBzdXBwbGllZCBkaWZmIG91dHB1dCAoaS5lLiAiYSBwYXRjaCIpIGFuZCBhcHBsaWVzIGl0IHRvIGZpbGVzLgorV2hlbiBydW5uaW5nIGZyb20gYSBzdWJkaXJlY3RvcnkgaW4gYSByZXBvc2l0b3J5LCBwYXRjaGVkIHBhdGhzCitvdXRzaWRlIHRoZSBkaXJlY3RvcnkgYXJlIGlnbm9yZWQuCitXaXRoIHRoZSBgLS1pbmRleGAgb3B0aW9uIHRoZSBwYXRjaCBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIGluZGV4LCBhbmQKK3dpdGggdGhlIGAtLWNhY2hlZGAgb3B0aW9uIHRoZSBwYXRjaCBpcyBvbmx5IGFwcGxpZWQgdG8gdGhlIGluZGV4LgorV2l0aG91dCB0aGVzZSBvcHRpb25zLCB0aGUgY29tbWFuZCBhcHBsaWVzIHRoZSBwYXRjaCBvbmx5IHRvIGZpbGVzLAorYW5kIGRvZXMgbm90IHJlcXVpcmUgdGhlbSB0byBiZSBpbiBhIEdpdCByZXBvc2l0b3J5LgorCitUaGlzIGNvbW1hbmQgYXBwbGllcyB0aGUgcGF0Y2ggYnV0IGRvZXMgbm90IGNyZWF0ZSBhIGNvbW1pdC4gIFVzZQorbGlua2dpdDpnaXQtYW1bMV0gdG8gY3JlYXRlIGNvbW1pdHMgZnJvbSBwYXRjaGVzIGdlbmVyYXRlZCBieQorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIGFuZC9vciByZWNlaXZlZCBieSBlbWFpbC4KKworT1BUSU9OUworLS0tLS0tLQorPHBhdGNoPi4uLjo6CisJVGhlIGZpbGVzIHRvIHJlYWQgdGhlIHBhdGNoIGZyb20uICAnLScgY2FuIGJlIHVzZWQgdG8gcmVhZAorCWZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCistLXN0YXQ6OgorCUluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZQorCWlucHV0LiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0tbnVtc3RhdDo6CisJU2ltaWxhciB0byBgLS1zdGF0YCwgYnV0IHNob3dzIHRoZSBudW1iZXIgb2YgYWRkZWQgYW5kCisJZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIGFuZCB0aGUgcGF0aG5hbWUgd2l0aG91dAorCWFiYnJldmlhdGlvbiwgdG8gbWFrZSBpdCBtb3JlIG1hY2hpbmUgZnJpZW5kbHkuICBGb3IKKwliaW5hcnkgZmlsZXMsIG91dHB1dHMgdHdvIGAtYCBpbnN0ZWFkIG9mIHNheWluZworCWAwIDBgLiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0tc3VtbWFyeTo6CisJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIGNvbmRlbnNlZAorCXN1bW1hcnkgb2YgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSBnaXQgZGlmZiBleHRlbmRlZAorCWhlYWRlcnMsIHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMuCisJVHVybnMgb2ZmICJhcHBseSIuCisKKy0tY2hlY2s6OgorCUluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzCisJYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgYW5kL29yIHRoZSBpbmRleAorCWZpbGUgYW5kIGRldGVjdHMgZXJyb3JzLiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0taW5kZXg6OgorCVdoZW4gYC0tY2hlY2tgIGlzIGluIGVmZmVjdCwgb3Igd2hlbiBhcHBseWluZyB0aGUgcGF0Y2gKKwkod2hpY2ggaXMgdGhlIGRlZmF1bHQgd2hlbiBub25lIG9mIHRoZSBvcHRpb25zIHRoYXQKKwlkaXNhYmxlcyBpdCBpcyBpbiBlZmZlY3QpLCBtYWtlIHN1cmUgdGhlIHBhdGNoIGlzCisJYXBwbGljYWJsZSB0byB3aGF0IHRoZSBjdXJyZW50IGluZGV4IGZpbGUgcmVjb3Jkcy4gIElmCisJdGhlIGZpbGUgdG8gYmUgcGF0Y2hlZCBpbiB0aGUgd29ya2luZyB0cmVlIGlzIG5vdAorCXVwIHRvIGRhdGUsIGl0IGlzIGZsYWdnZWQgYXMgYW4gZXJyb3IuICBUaGlzIGZsYWcgYWxzbworCWNhdXNlcyB0aGUgaW5kZXggZmlsZSB0byBiZSB1cGRhdGVkLgorCistLWNhY2hlZDo6CisJQXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUuIEluc3RlYWQgdGFrZSB0aGUKKwljYWNoZWQgZGF0YSwgYXBwbHkgdGhlIHBhdGNoLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgaW5kZXgKKwl3aXRob3V0IHVzaW5nIHRoZSB3b3JraW5nIHRyZWUuIFRoaXMgaW1wbGllcyBgLS1pbmRleGAuCisKKy0taW50ZW50LXRvLWFkZDo6CisJV2hlbiBhcHBseWluZyB0aGUgcGF0Y2ggb25seSB0byB0aGUgd29ya2luZyB0cmVlLCBtYXJrIG5ldworCWZpbGVzIHRvIGJlIGFkZGVkIHRvIHRoZSBpbmRleCBsYXRlciAoc2VlIGAtLWludGVudC10by1hZGRgCisJb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWFkZFsxXSkuIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgdW5sZXNzCisJcnVubmluZyBpbiBhIEdpdCByZXBvc2l0b3J5IGFuZCBgLS1pbmRleGAgaXMgbm90IHNwZWNpZmllZC4KKwlOb3RlIHRoYXQgYC0taW5kZXhgIGNvdWxkIGJlIGltcGxpZWQgYnkgb3RoZXIgb3B0aW9ucyBzdWNoCisJYXMgYC0tY2FjaGVkYCBvciBgLS0zd2F5YC4KKworLTM6OgorLS0zd2F5OjoKKwlXaGVuIHRoZSBwYXRjaCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UgaWYKKwl0aGUgcGF0Y2ggcmVjb3JkcyB0aGUgaWRlbnRpdHkgb2YgYmxvYnMgaXQgaXMgc3VwcG9zZWQgdG8gYXBwbHkgdG8sCisJYW5kIHdlIGhhdmUgdGhvc2UgYmxvYnMgYXZhaWxhYmxlIGxvY2FsbHksIHBvc3NpYmx5IGxlYXZpbmcgdGhlCisJY29uZmxpY3QgbWFya2VycyBpbiB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBmb3IgdGhlIHVzZXIgdG8KKwlyZXNvbHZlLiAgVGhpcyBvcHRpb24gaW1wbGllcyB0aGUgYC0taW5kZXhgIG9wdGlvbiwgYW5kIGlzIGluY29tcGF0aWJsZQorCXdpdGggdGhlIGAtLXJlamVjdGAgYW5kIHRoZSBgLS1jYWNoZWRgIG9wdGlvbnMuCisKKy0tYnVpbGQtZmFrZS1hbmNlc3Rvcj08ZmlsZT46OgorCU5ld2VyICdnaXQgZGlmZicgb3V0cHV0IGhhcyBlbWJlZGRlZCAnaW5kZXggaW5mb3JtYXRpb24nCisJZm9yIGVhY2ggYmxvYiB0byBoZWxwIGlkZW50aWZ5IHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHRoYXQKKwl0aGUgcGF0Y2ggYXBwbGllcyB0by4gIFdoZW4gdGhpcyBmbGFnIGlzIGdpdmVuLCBhbmQgaWYKKwl0aGUgb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlIGJsb2JzIGFyZSBhdmFpbGFibGUgbG9jYWxseSwKKwlidWlsZHMgYSB0ZW1wb3JhcnkgaW5kZXggY29udGFpbmluZyB0aG9zZSBibG9icy4KKysKK1doZW4gYSBwdXJlIG1vZGUgY2hhbmdlIGlzIGVuY291bnRlcmVkICh3aGljaCBoYXMgbm8gaW5kZXggaW5mb3JtYXRpb24pLAordGhlIGluZm9ybWF0aW9uIGlzIHJlYWQgZnJvbSB0aGUgY3VycmVudCBpbmRleCBpbnN0ZWFkLgorCistUjo6CistLXJldmVyc2U6OgorCUFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlLgorCistLXJlamVjdDo6CisJRm9yIGF0b21pY2l0eSwgJ2dpdCBhcHBseScgYnkgZGVmYXVsdCBmYWlscyB0aGUgd2hvbGUgcGF0Y2ggYW5kCisJZG9lcyBub3QgdG91Y2ggdGhlIHdvcmtpbmcgdHJlZSB3aGVuIHNvbWUgb2YgdGhlIGh1bmtzCisJZG8gbm90IGFwcGx5LiAgVGhpcyBvcHRpb24gbWFrZXMgaXQgYXBwbHkKKwl0aGUgcGFydHMgb2YgdGhlIHBhdGNoIHRoYXQgYXJlIGFwcGxpY2FibGUsIGFuZCBsZWF2ZSB0aGUKKwlyZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzLgorCistejo6CisJV2hlbiBgLS1udW1zdGF0YCBoYXMgYmVlbiBnaXZlbiwgZG8gbm90IG11bmdlIHBhdGhuYW1lcywKKwlidXQgdXNlIGEgTlVMLXRlcm1pbmF0ZWQgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQuCisrCitXaXRob3V0IHRoaXMgb3B0aW9uLCBwYXRobmFtZXMgd2l0aCAidW51c3VhbCIgY2hhcmFjdGVycyBhcmUgcXVvdGVkIGFzCitleHBsYWluZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBjb3JlLnF1b3RlUGF0aGAgKHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworLXA8bj46OgorCVJlbW92ZSA8bj4gbGVhZGluZyBwYXRoIGNvbXBvbmVudHMgKHNlcGFyYXRlZCBieSBzbGFzaGVzKSBmcm9tCisJdHJhZGl0aW9uYWwgZGlmZiBwYXRocy4gRS5nLiwgd2l0aCBgLXAyYCwgYSBwYXRjaCBhZ2FpbnN0CisJYGEvZGlyL2ZpbGVgIHdpbGwgYmUgYXBwbGllZCBkaXJlY3RseSB0byBgZmlsZWAuIFRoZSBkZWZhdWx0IGlzCisJMS4KKworLUM8bj46OgorCUVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2Ygc3Vycm91bmRpbmcgY29udGV4dCBtYXRjaCBiZWZvcmUKKwlhbmQgYWZ0ZXIgZWFjaCBjaGFuZ2UuICBXaGVuIGZld2VyIGxpbmVzIG9mIHN1cnJvdW5kaW5nCisJY29udGV4dCBleGlzdCB0aGV5IGFsbCBtdXN0IG1hdGNoLiAgQnkgZGVmYXVsdCBubyBjb250ZXh0IGlzCisJZXZlciBpZ25vcmVkLgorCistLXVuaWRpZmYtemVybzo6CisJQnkgZGVmYXVsdCwgJ2dpdCBhcHBseScgZXhwZWN0cyB0aGF0IHRoZSBwYXRjaCBiZWluZworCWFwcGxpZWQgaXMgYSB1bmlmaWVkIGRpZmYgd2l0aCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0LgorCVRoaXMgcHJvdmlkZXMgZ29vZCBzYWZldHkgbWVhc3VyZXMsIGJ1dCBicmVha3MgZG93biB3aGVuCisJYXBwbHlpbmcgYSBkaWZmIGdlbmVyYXRlZCB3aXRoIGAtLXVuaWZpZWQ9MGAuIFRvIGJ5cGFzcyB0aGVzZQorCWNoZWNrcyB1c2UgYC0tdW5pZGlmZi16ZXJvYC4KKysKK05vdGUsIGZvciB0aGUgcmVhc29ucyBzdGF0ZWQgYWJvdmUgdXNhZ2Ugb2YgY29udGV4dC1mcmVlIHBhdGNoZXMgaXMKK2Rpc2NvdXJhZ2VkLgorCistLWFwcGx5OjoKKwlJZiB5b3UgdXNlIGFueSBvZiB0aGUgb3B0aW9ucyBtYXJrZWQgIlR1cm5zIG9mZgorCSdhcHBseSciIGFib3ZlLCAnZ2l0IGFwcGx5JyByZWFkcyBhbmQgb3V0cHV0cyB0aGUKKwlyZXF1ZXN0ZWQgaW5mb3JtYXRpb24gd2l0aG91dCBhY3R1YWxseSBhcHBseWluZyB0aGUKKwlwYXRjaC4gIEdpdmUgdGhpcyBmbGFnIGFmdGVyIHRob3NlIGZsYWdzIHRvIGFsc28gYXBwbHkKKwl0aGUgcGF0Y2guCisKKy0tbm8tYWRkOjoKKwlXaGVuIGFwcGx5aW5nIGEgcGF0Y2gsIGlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUKKwlwYXRjaC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZXh0cmFjdCB0aGUgY29tbW9uIHBhcnQgYmV0d2VlbgorCXR3byBmaWxlcyBieSBmaXJzdCBydW5uaW5nICdkaWZmJyBvbiB0aGVtIGFuZCBhcHBseWluZworCXRoZSByZXN1bHQgd2l0aCB0aGlzIG9wdGlvbiwgd2hpY2ggd291bGQgYXBwbHkgdGhlCisJZGVsZXRpb24gcGFydCBidXQgbm90IHRoZSBhZGRpdGlvbiBwYXJ0LgorCistLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudDo6CistLWJpbmFyeTo6CisJSGlzdG9yaWNhbGx5IHdlIGRpZCBub3QgYWxsb3cgYmluYXJ5IHBhdGNoIGFwcGxpZWQKKwl3aXRob3V0IGFuIGV4cGxpY2l0IHBlcm1pc3Npb24gZnJvbSB0aGUgdXNlciwgYW5kIHRoaXMKKwlmbGFnIHdhcyB0aGUgd2F5IHRvIGRvIHNvLiAgQ3VycmVudGx5IHdlIGFsd2F5cyBhbGxvdyBiaW5hcnkKKwlwYXRjaCBhcHBsaWNhdGlvbiwgc28gdGhpcyBpcyBhIG5vLW9wLgorCistLWV4Y2x1ZGU9PHBhdGgtcGF0dGVybj46OgorCURvbid0IGFwcGx5IGNoYW5nZXMgdG8gZmlsZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggcGF0dGVybi4gVGhpcyBjYW4KKwliZSB1c2VmdWwgd2hlbiBpbXBvcnRpbmcgcGF0Y2hzZXRzLCB3aGVyZSB5b3Ugd2FudCB0byBleGNsdWRlIGNlcnRhaW4KKwlmaWxlcyBvciBkaXJlY3Rvcmllcy4KKworLS1pbmNsdWRlPTxwYXRoLXBhdHRlcm4+OjoKKwlBcHBseSBjaGFuZ2VzIHRvIGZpbGVzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIHBhdHRlcm4uIFRoaXMgY2FuCisJYmUgdXNlZnVsIHdoZW4gaW1wb3J0aW5nIHBhdGNoc2V0cywgd2hlcmUgeW91IHdhbnQgdG8gaW5jbHVkZSBjZXJ0YWluCisJZmlsZXMgb3IgZGlyZWN0b3JpZXMuCisrCitXaGVuIGAtLWV4Y2x1ZGVgIGFuZCBgLS1pbmNsdWRlYCBwYXR0ZXJucyBhcmUgdXNlZCwgdGhleSBhcmUgZXhhbWluZWQgaW4gdGhlCitvcmRlciB0aGV5IGFwcGVhciBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhlIGZpcnN0IG1hdGNoIGRldGVybWluZXMgaWYgYQorcGF0Y2ggdG8gZWFjaCBwYXRoIGlzIHVzZWQuICBBIHBhdGNoIHRvIGEgcGF0aCB0aGF0IGRvZXMgbm90IG1hdGNoIGFueQoraW5jbHVkZS9leGNsdWRlIHBhdHRlcm4gaXMgdXNlZCBieSBkZWZhdWx0IGlmIHRoZXJlIGlzIG5vIGluY2x1ZGUgcGF0dGVybgorb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGlnbm9yZWQgaWYgdGhlcmUgaXMgYW55IGluY2x1ZGUgcGF0dGVybi4KKworLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKy0taWdub3JlLXdoaXRlc3BhY2U6OgorCVdoZW4gYXBwbHlpbmcgYSBwYXRjaCwgaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBpbiBjb250ZXh0CisJbGluZXMgaWYgbmVjZXNzYXJ5LgorCUNvbnRleHQgbGluZXMgd2lsbCBwcmVzZXJ2ZSB0aGVpciB3aGl0ZXNwYWNlLCBhbmQgdGhleSB3aWxsIG5vdAorCXVuZGVyZ28gd2hpdGVzcGFjZSBmaXhpbmcgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlCisJYC0td2hpdGVzcGFjZWAgb3B0aW9uLiBOZXcgbGluZXMgd2lsbCBzdGlsbCBiZSBmaXhlZCwgdGhvdWdoLgorCistLXdoaXRlc3BhY2U9PGFjdGlvbj46OgorCVdoZW4gYXBwbHlpbmcgYSBwYXRjaCwgZGV0ZWN0IGEgbmV3IG9yIG1vZGlmaWVkIGxpbmUgdGhhdCBoYXMKKwl3aGl0ZXNwYWNlIGVycm9ycy4gIFdoYXQgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMgaXMKKwljb250cm9sbGVkIGJ5IGBjb3JlLndoaXRlc3BhY2VgIGNvbmZpZ3VyYXRpb24uICBCeSBkZWZhdWx0LAorCXRyYWlsaW5nIHdoaXRlc3BhY2VzIChpbmNsdWRpbmcgbGluZXMgdGhhdCBzb2xlbHkgY29uc2lzdCBvZgorCXdoaXRlc3BhY2VzKSBhbmQgYSBzcGFjZSBjaGFyYWN0ZXIgdGhhdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZAorCWJ5IGEgdGFiIGNoYXJhY3RlciBpbnNpZGUgdGhlIGluaXRpYWwgaW5kZW50IG9mIHRoZSBsaW5lIGFyZQorCWNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMuCisrCitCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBvdXRwdXRzIHdhcm5pbmcgbWVzc2FnZXMgYnV0IGFwcGxpZXMgdGhlIHBhdGNoLgorV2hlbiBgZ2l0LWFwcGx5YCBpcyB1c2VkIGZvciBzdGF0aXN0aWNzIGFuZCBub3QgYXBwbHlpbmcgYQorcGF0Y2gsIGl0IGRlZmF1bHRzIHRvIGBub3dhcm5gLgorKworWW91IGNhbiB1c2UgZGlmZmVyZW50IGA8YWN0aW9uPmAgdmFsdWVzIHRvIGNvbnRyb2wgdGhpcworYmVoYXZpb3I6CisrCisqIGBub3dhcm5gIHR1cm5zIG9mZiB0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3YXJuaW5nLgorKiBgd2FybmAgb3V0cHV0cyB3YXJuaW5ncyBmb3IgYSBmZXcgc3VjaCBlcnJvcnMsIGJ1dCBhcHBsaWVzIHRoZQorICBwYXRjaCBhcy1pcyAoZGVmYXVsdCkuCisqIGBmaXhgIG91dHB1dHMgd2FybmluZ3MgZm9yIGEgZmV3IHN1Y2ggZXJyb3JzLCBhbmQgYXBwbGllcyB0aGUKKyAgcGF0Y2ggYWZ0ZXIgZml4aW5nIHRoZW0gKGBzdHJpcGAgaXMgYSBzeW5vbnltIC0tLSB0aGUgdG9vbAorICB1c2VkIHRvIGNvbnNpZGVyIG9ubHkgdHJhaWxpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFzIGVycm9ycywgYW5kIHRoZQorICBmaXggaW52b2x2ZWQgJ3N0cmlwcGluZycgdGhlbSwgYnV0IG1vZGVybiBHaXRzIGRvIG1vcmUpLgorKiBgZXJyb3JgIG91dHB1dHMgd2FybmluZ3MgZm9yIGEgZmV3IHN1Y2ggZXJyb3JzLCBhbmQgcmVmdXNlcworICB0byBhcHBseSB0aGUgcGF0Y2guCisqIGBlcnJvci1hbGxgIGlzIHNpbWlsYXIgdG8gYGVycm9yYCBidXQgc2hvd3MgYWxsIGVycm9ycy4KKworLS1pbmFjY3VyYXRlLWVvZjo6CisJVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBzb21lIHZlcnNpb25zIG9mICdkaWZmJyBkbyBub3QgY29ycmVjdGx5CisJZGV0ZWN0IGEgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBBcyBhIHJlc3VsdCwgcGF0Y2hlcworCWNyZWF0ZWQgYnkgc3VjaCAnZGlmZicgcHJvZ3JhbXMgZG8gbm90IHJlY29yZCBpbmNvbXBsZXRlIGxpbmVzCisJY29ycmVjdGx5LiBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGFwcGx5aW5nIHN1Y2ggcGF0Y2hlcyBieQorCXdvcmtpbmcgYXJvdW5kIHRoaXMgYnVnLgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCBwcm9ncmVzcyB0byBzdGRlcnIuIEJ5IGRlZmF1bHQsIG9ubHkgYSBtZXNzYWdlIGFib3V0IHRoZQorCWN1cnJlbnQgcGF0Y2ggYmVpbmcgYXBwbGllZCB3aWxsIGJlIHByaW50ZWQuIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UKKwlhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIHJlcG9ydGVkLgorCistLXJlY291bnQ6OgorCURvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycywgYnV0IGluZmVyIHRoZW0KKwlieSBpbnNwZWN0aW5nIHRoZSBwYXRjaCAoZS5nLiBhZnRlciBlZGl0aW5nIHRoZSBwYXRjaCB3aXRob3V0CisJYWRqdXN0aW5nIHRoZSBodW5rIGhlYWRlcnMgYXBwcm9wcmlhdGVseSkuCisKKy0tZGlyZWN0b3J5PTxyb290Pjo6CisJUHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcy4gIElmIGEgIi1wIiBhcmd1bWVudCB3YXMgYWxzbyBwYXNzZWQsCisJaXQgaXMgYXBwbGllZCBiZWZvcmUgcHJlcGVuZGluZyB0aGUgbmV3IHJvb3QuCisrCitGb3IgZXhhbXBsZSwgYSBwYXRjaCB0aGF0IHRhbGtzIGFib3V0IHVwZGF0aW5nIGBhL2dpdC1ndWkuc2hgIHRvIGBiL2dpdC1ndWkuc2hgCitjYW4gYmUgYXBwbGllZCB0byB0aGUgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlIGBtb2R1bGVzL2dpdC1ndWkvZ2l0LWd1aS5zaGAgYnkKK3J1bm5pbmcgYGdpdCBhcHBseSAtLWRpcmVjdG9yeT1tb2R1bGVzL2dpdC1ndWlgLgorCistLXVuc2FmZS1wYXRoczo6CisJQnkgZGVmYXVsdCwgYSBwYXRjaCB0aGF0IGFmZmVjdHMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhCisJKGVpdGhlciBhIEdpdCBjb250cm9sbGVkIHdvcmtpbmcgdHJlZSwgb3IgdGhlIGN1cnJlbnQgd29ya2luZworCWRpcmVjdG9yeSB3aGVuICJnaXQgYXBwbHkiIGlzIHVzZWQgYXMgYSByZXBsYWNlbWVudCBvZiBHTlUKKwlwYXRjaCkgaXMgcmVqZWN0ZWQgYXMgYSBtaXN0YWtlIChvciBhIG1pc2NoaWVmKS4KKysKK1doZW4gYGdpdCBhcHBseWAgaXMgdXNlZCBhcyBhICJiZXR0ZXIgR05VIHBhdGNoIiwgdGhlIHVzZXIgY2FuIHBhc3MKK3RoZSBgLS11bnNhZmUtcGF0aHNgIG9wdGlvbiB0byBvdmVycmlkZSB0aGlzIHNhZmV0eSBjaGVjay4gIFRoaXMgb3B0aW9uCitoYXMgbm8gZWZmZWN0IHdoZW4gYC0taW5kZXhgIG9yIGAtLWNhY2hlZGAgaXMgaW4gdXNlLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK2FwcGx5Lmlnbm9yZVdoaXRlc3BhY2U6OgorCVNldCB0byAnY2hhbmdlJyBpZiB5b3Ugd2FudCBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgdG8gYmUgaWdub3JlZCBieSBkZWZhdWx0LgorCVNldCB0byBvbmUgb2Y6IG5vLCBub25lLCBuZXZlciwgZmFsc2UgaWYgeW91IHdhbnQgY2hhbmdlcyBpbgorCXdoaXRlc3BhY2UgdG8gYmUgc2lnbmlmaWNhbnQuCithcHBseS53aGl0ZXNwYWNlOjoKKwlXaGVuIG5vIGAtLXdoaXRlc3BhY2VgIGZsYWcgaXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZAorCWxpbmUsIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQuCisKK1NVQk1PRFVMRVMKKy0tLS0tLS0tLS0KK0lmIHRoZSBwYXRjaCBjb250YWlucyBhbnkgY2hhbmdlcyB0byBzdWJtb2R1bGVzIHRoZW4gJ2dpdCBhcHBseScKK3RyZWF0cyB0aGVzZSBjaGFuZ2VzIGFzIGZvbGxvd3MuCisKK0lmIGAtLWluZGV4YCBpcyBzcGVjaWZpZWQgKGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSksIHRoZW4gdGhlIHN1Ym1vZHVsZQorY29tbWl0cyBtdXN0IG1hdGNoIHRoZSBpbmRleCBleGFjdGx5IGZvciB0aGUgcGF0Y2ggdG8gYXBwbHkuICBJZiBhbnkKK29mIHRoZSBzdWJtb2R1bGVzIGFyZSBjaGVja2VkLW91dCwgdGhlbiB0aGVzZSBjaGVjay1vdXRzIGFyZSBjb21wbGV0ZWx5CitpZ25vcmVkLCBpLmUuLCB0aGV5IGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgdXAgdG8gZGF0ZSBvciBjbGVhbiBhbmQgdGhleQorYXJlIG5vdCB1cGRhdGVkLgorCitJZiBgLS1pbmRleGAgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgc3VibW9kdWxlIGNvbW1pdHMgaW4gdGhlIHBhdGNoCithcmUgaWdub3JlZCBhbmQgb25seSB0aGUgYWJzZW5jZSBvciBwcmVzZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZworc3ViZGlyZWN0b3J5IGlzIGNoZWNrZWQgYW5kIChpZiBwb3NzaWJsZSkgdXBkYXRlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1hbVsxXS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OTVhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dApAQCAtMCwwICsxLDExMyBAQAorZ2l0LWFyY2hpbXBvcnQoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hcmNoaW1wb3J0IC0gSW1wb3J0IGEgR05VIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhcmNoaW1wb3J0JyBbLWhdIFstdl0gWy1vXSBbLWFdIFstZl0gWy1UXSBbLUQgZGVwdGhdIFstdCB0ZW1wZGlyXQorICAgICAgICAgICAgICAgPGFyY2hpdmUvYnJhbmNoPls6PGdpdC1icmFuY2g+XSAuLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbXBvcnRzIGEgcHJvamVjdCBmcm9tIG9uZSBvciBtb3JlIEdOVSBBcmNoIHJlcG9zaXRvcmllcy4KK0l0IHdpbGwgZm9sbG93IGJyYW5jaGVzCithbmQgcmVwb3NpdG9yaWVzIHdpdGhpbiB0aGUgbmFtZXNwYWNlcyBkZWZpbmVkIGJ5IHRoZSA8YXJjaGl2ZS9icmFuY2g+CitwYXJhbWV0ZXJzIHN1cHBsaWVkLiBJZiBpdCBjYW5ub3QgZmluZCB0aGUgcmVtb3RlIGJyYW5jaCBhIG1lcmdlIGNvbWVzIGZyb20KK2l0IHdpbGwganVzdCBpbXBvcnQgaXQgYXMgYSByZWd1bGFyIGNvbW1pdC4gSWYgaXQgY2FuIGZpbmQgaXQsIGl0IHdpbGwgbWFyayBpdAorYXMgYSBtZXJnZSB3aGVuZXZlciBwb3NzaWJsZSAoc2VlIGRpc2N1c3Npb24gYmVsb3cpLgorCitUaGUgc2NyaXB0IGV4cGVjdHMgeW91IHRvIHByb3ZpZGUgdGhlIGtleSByb290cyB3aGVyZSBpdCBjYW4gc3RhcnQgdGhlIGltcG9ydAorZnJvbSBhbiAnaW5pdGlhbCBpbXBvcnQnIG9yICd0YWcnIHR5cGUgb2YgQXJjaCBjb21taXQuIEl0IHdpbGwgZm9sbG93IGFuZAoraW1wb3J0IG5ldyBicmFuY2hlcyB3aXRoaW4gdGhlIHByb3ZpZGVkIHJvb3RzLgorCitJdCBleHBlY3RzIHRvIGJlIGRlYWxpbmcgd2l0aCBvbmUgcHJvamVjdCBvbmx5LiBJZiBpdCBzZWVzCiticmFuY2hlcyB0aGF0IGhhdmUgZGlmZmVyZW50IHJvb3RzLCBpdCB3aWxsIHJlZnVzZSB0byBydW4uIEluIHRoYXQgY2FzZSwKK2VkaXQgeW91ciA8YXJjaGl2ZS9icmFuY2g+IHBhcmFtZXRlcnMgdG8gZGVmaW5lIGNsZWFybHkgdGhlIHNjb3BlIG9mIHRoZQoraW1wb3J0LgorCisnZ2l0IGFyY2hpbXBvcnQnIHVzZXMgYHRsYWAgZXh0ZW5zaXZlbHkgaW4gdGhlIGJhY2tncm91bmQgdG8gYWNjZXNzIHRoZQorQXJjaCByZXBvc2l0b3J5LgorTWFrZSBzdXJlIHlvdSBoYXZlIGEgcmVjZW50IHZlcnNpb24gb2YgYHRsYWAgYXZhaWxhYmxlIGluIHRoZSBwYXRoLiBgdGxhYCBtdXN0Citrbm93IGFib3V0IHRoZSByZXBvc2l0b3JpZXMgeW91IHBhc3MgdG8gJ2dpdCBhcmNoaW1wb3J0Jy4KKworRm9yIHRoZSBpbml0aWFsIGltcG9ydCwgJ2dpdCBhcmNoaW1wb3J0JyBleHBlY3RzIHRvIGZpbmQgaXRzZWxmIGluIGFuIGVtcHR5CitkaXJlY3RvcnkuIFRvIGZvbGxvdyB0aGUgZGV2ZWxvcG1lbnQgb2YgYSBwcm9qZWN0IHRoYXQgdXNlcyBBcmNoLCByZXJ1bgorJ2dpdCBhcmNoaW1wb3J0JyB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIGluaXRpYWwgaW1wb3J0IHRvIHBlcmZvcm0KK2luY3JlbWVudGFsIGltcG9ydHMuCisKK1doaWxlICdnaXQgYXJjaGltcG9ydCcgd2lsbCB0cnkgdG8gY3JlYXRlIHNlbnNpYmxlIGJyYW5jaCBuYW1lcyBmb3IgdGhlCithcmNoaXZlcyB0aGF0IGl0IGltcG9ydHMsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBHaXQgYnJhbmNoIG5hbWVzCittYW51YWxseS4gIFRvIGRvIHNvLCB3cml0ZSBhIEdpdCBicmFuY2ggbmFtZSBhZnRlciBlYWNoIDxhcmNoaXZlL2JyYW5jaD4KK3BhcmFtZXRlciwgc2VwYXJhdGVkIGJ5IGEgY29sb24uICBUaGlzIHdheSwgeW91IGNhbiBzaG9ydGVuIHRoZSBBcmNoCiticmFuY2ggbmFtZXMgYW5kIGNvbnZlcnQgQXJjaCBqYXJnb24gdG8gR2l0IGphcmdvbiwgZm9yIGV4YW1wbGUgbWFwcGluZyBhCisiUFJPSkVDVHtsaXRkZH1kZXZve2xpdGRkfVZFUlNJT04iIGJyYW5jaCB0byAibWFzdGVyIi4KKworQXNzb2NpYXRpbmcgbXVsdGlwbGUgQXJjaCBicmFuY2hlcyB0byBvbmUgR2l0IGJyYW5jaCBpcyBwb3NzaWJsZTsgdGhlCityZXN1bHQgd2lsbCBtYWtlIHRoZSBtb3N0IHNlbnNlIG9ubHkgaWYgbm8gY29tbWl0cyBhcmUgbWFkZSB0byB0aGUgZmlyc3QKK2JyYW5jaCwgYWZ0ZXIgdGhlIHNlY29uZCBicmFuY2ggaXMgY3JlYXRlZC4gIFN0aWxsLCB0aGlzIGlzIHVzZWZ1bCB0bworY29udmVydCBBcmNoIHJlcG9zaXRvcmllcyB0aGF0IGhhZCBiZWVuIHJvdGF0ZWQgcGVyaW9kaWNhbGx5LgorCisKK01FUkdFUworLS0tLS0tCitQYXRjaCBtZXJnZSBkYXRhIGZyb20gQXJjaCBpcyB1c2VkIHRvIG1hcmsgbWVyZ2VzIGluIEdpdCBhcyB3ZWxsLiBHaXQKK2RvZXMgbm90IGNhcmUgbXVjaCBhYm91dCB0cmFja2luZyBwYXRjaGVzLCBhbmQgb25seSBjb25zaWRlcnMgYSBtZXJnZSB3aGVuIGEKK2JyYW5jaCBpbmNvcnBvcmF0ZXMgYWxsIHRoZSBjb21taXRzIHNpbmNlIHRoZSBwb2ludCB0aGV5IGZvcmtlZC4gVGhlIGVuZCByZXN1bHQKK2lzIHRoYXQgR2l0IHdpbGwgaGF2ZSBhIGdvb2QgaWRlYSBvZiBob3cgZmFyIGJyYW5jaGVzIGhhdmUgZGl2ZXJnZWQuIFNvIHRoZQoraW1wb3J0IHByb2Nlc3MgZG9lcyBsb3NlIHNvbWUgcGF0Y2gtdHJhZGluZyBtZXRhZGF0YS4KKworRm9ydHVuYXRlbHksIHdoZW4geW91IHRyeSBhbmQgbWVyZ2UgYnJhbmNoZXMgaW1wb3J0ZWQgZnJvbSBBcmNoLAorR2l0IHdpbGwgZmluZCBhIGdvb2QgbWVyZ2UgYmFzZSwgYW5kIGl0IGhhcyBhIGdvb2QgY2hhbmNlIG9mIGlkZW50aWZ5aW5nCitwYXRjaGVzIHRoYXQgaGF2ZSBiZWVuIHRyYWRlZCBvdXQtb2Ytc2VxdWVuY2UgYmV0d2VlbiB0aGUgYnJhbmNoZXMuCisKK09QVElPTlMKKy0tLS0tLS0KKworLWg6OgorCURpc3BsYXkgdXNhZ2UuCisKKy12OjoKKwlWZXJib3NlIG91dHB1dC4KKworLVQ6OgorCU1hbnkgdGFncy4gV2lsbCBjcmVhdGUgYSB0YWcgZm9yIGV2ZXJ5IGNvbW1pdCwgcmVmbGVjdGluZyB0aGUgY29tbWl0CisJbmFtZSBpbiB0aGUgQXJjaCByZXBvc2l0b3J5LgorCistZjo6CisJVXNlIHRoZSBmYXN0IHBhdGNoc2V0IGltcG9ydCBzdHJhdGVneS4gIFRoaXMgY2FuIGJlIHNpZ25pZmljYW50bHkKKwlmYXN0ZXIgZm9yIGxhcmdlIHRyZWVzLCBidXQgY2Fubm90IGhhbmRsZSBkaXJlY3RvcnkgcmVuYW1lcyBvcgorCXBlcm1pc3Npb25zIGNoYW5nZXMuICBUaGUgZGVmYXVsdCBzdHJhdGVneSBpcyBzbG93IGFuZCBzYWZlLgorCistbzo6CisJVXNlIHRoaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQtc3R5bGUgYnJhbmNoIG5hbWVzIHVzZWQgYnkKKwllYXJsaWVyIHZlcnNpb25zIG9mICdnaXQgYXJjaGltcG9ydCcuICBPbGQtc3R5bGUgYnJhbmNoIG5hbWVzCisJd2VyZSBjYXRlZ29yeXtsaXRkZH1icmFuY2gsIHdoZXJlYXMgbmV3LXN0eWxlIGJyYW5jaCBuYW1lcyBhcmUKKwlhcmNoaXZlLGNhdGVnb3J5e2xpdGRkfWJyYW5jaHtsaXRkZH12ZXJzaW9uLiAgSW4gYm90aCBjYXNlcywgbmFtZXMgZ2l2ZW4KKwlvbiB0aGUgY29tbWFuZC1saW5lIHdpbGwgb3ZlcnJpZGUgdGhlIGF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkCisJb25lcy4KKworLUQgPGRlcHRoPjo6CisJRm9sbG93IG1lcmdlIGFuY2VzdHJ5IGFuZCBhdHRlbXB0IHRvIGltcG9ydCB0cmVlcyB0aGF0IGhhdmUgYmVlbgorCW1lcmdlZCBmcm9tLiAgU3BlY2lmeSBhIGRlcHRoIGdyZWF0ZXIgdGhhbiAxIGlmIHBhdGNoIGxvZ3MgaGF2ZSBiZWVuCisJcHJ1bmVkLgorCistYTo6CisJQXR0ZW1wdCB0byBhdXRvLXJlZ2lzdGVyIGFyY2hpdmVzIGF0IGBodHRwOi8vbWlycm9ycy5zb3VyY2Vjb250cm9sLm5ldGAKKwlUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2l0aCB0aGUgLUQgb3B0aW9uLgorCistdCA8dG1wZGlyPjo6CisJT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdGVtcGRpci4KKworCis8YXJjaGl2ZS9icmFuY2g+OjoKKwlBcmNoaXZlL2JyYW5jaCBpZGVudGlmaWVyIGluIGEgZm9ybWF0IHRoYXQgYHRsYSBsb2dgIHVuZGVyc3RhbmRzLgorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmExZTRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKQEAgLTAsMCArMSwxOTcgQEAKK2dpdC1hcmNoaXZlKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYXJjaGl2ZSAtIENyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGFyY2hpdmUnIFstLWZvcm1hdD08Zm10Pl0gWy0tbGlzdF0gWy0tcHJlZml4PTxwcmVmaXg+L10gWzxleHRyYT5dCisJICAgICAgWy1vIDxmaWxlPiB8IC0tb3V0cHV0PTxmaWxlPl0gWy0td29ya3RyZWUtYXR0cmlidXRlc10KKwkgICAgICBbLS1yZW1vdGU9PHJlcG8+IFstLWV4ZWM9PGdpdC11cGxvYWQtYXJjaGl2ZT5dXSA8dHJlZS1pc2g+CisJICAgICAgWzxwYXRoPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDcmVhdGVzIGFuIGFyY2hpdmUgb2YgdGhlIHNwZWNpZmllZCBmb3JtYXQgY29udGFpbmluZyB0aGUgdHJlZQorc3RydWN0dXJlIGZvciB0aGUgbmFtZWQgdHJlZSwgYW5kIHdyaXRlcyBpdCBvdXQgdG8gdGhlIHN0YW5kYXJkCitvdXRwdXQuICBJZiA8cHJlZml4PiBpcyBzcGVjaWZpZWQgaXQgaXMKK3ByZXBlbmRlZCB0byB0aGUgZmlsZW5hbWVzIGluIHRoZSBhcmNoaXZlLgorCisnZ2l0IGFyY2hpdmUnIGJlaGF2ZXMgZGlmZmVyZW50bHkgd2hlbiBnaXZlbiBhIHRyZWUgSUQgdmVyc3VzIHdoZW4KK2dpdmVuIGEgY29tbWl0IElEIG9yIHRhZyBJRC4gIEluIHRoZSBmaXJzdCBjYXNlIHRoZSBjdXJyZW50IHRpbWUgaXMKK3VzZWQgYXMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIGVhY2ggZmlsZSBpbiB0aGUgYXJjaGl2ZS4gIEluIHRoZSBsYXR0ZXIKK2Nhc2UgdGhlIGNvbW1pdCB0aW1lIGFzIHJlY29yZGVkIGluIHRoZSByZWZlcmVuY2VkIGNvbW1pdCBvYmplY3QgaXMKK3VzZWQgaW5zdGVhZC4gIEFkZGl0aW9uYWxseSB0aGUgY29tbWl0IElEIGlzIHN0b3JlZCBpbiBhIGdsb2JhbAorZXh0ZW5kZWQgcGF4IGhlYWRlciBpZiB0aGUgdGFyIGZvcm1hdCBpcyB1c2VkOyBpdCBjYW4gYmUgZXh0cmFjdGVkCit1c2luZyAnZ2l0IGdldC10YXItY29tbWl0LWlkJy4gSW4gWklQIGZpbGVzIGl0IGlzIHN0b3JlZCBhcyBhIGZpbGUKK2NvbW1lbnQuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1mb3JtYXQ9PGZtdD46OgorCUZvcm1hdCBvZiB0aGUgcmVzdWx0aW5nIGFyY2hpdmU6ICd0YXInIG9yICd6aXAnLiBJZiB0aGlzIG9wdGlvbgorCWlzIG5vdCBnaXZlbiwgYW5kIHRoZSBvdXRwdXQgZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBmb3JtYXQgaXMKKwlpbmZlcnJlZCBmcm9tIHRoZSBmaWxlbmFtZSBpZiBwb3NzaWJsZSAoZS5nLiB3cml0aW5nIHRvICJmb28uemlwIgorCW1ha2VzIHRoZSBvdXRwdXQgdG8gYmUgaW4gdGhlIHppcCBmb3JtYXQpLiBPdGhlcndpc2UgdGhlIG91dHB1dAorCWZvcm1hdCBpcyBgdGFyYC4KKworLWw6OgorLS1saXN0OjoKKwlTaG93IGFsbCBhdmFpbGFibGUgZm9ybWF0cy4KKworLXY6OgorLS12ZXJib3NlOjoKKwlSZXBvcnQgcHJvZ3Jlc3MgdG8gc3RkZXJyLgorCistLXByZWZpeD08cHJlZml4Pi86OgorCVByZXBlbmQgPHByZWZpeD4vIHRvIGVhY2ggZmlsZW5hbWUgaW4gdGhlIGFyY2hpdmUuCisKKy1vIDxmaWxlPjo6CistLW91dHB1dD08ZmlsZT46OgorCVdyaXRlIHRoZSBhcmNoaXZlIHRvIDxmaWxlPiBpbnN0ZWFkIG9mIHN0ZG91dC4KKworLS13b3JrdHJlZS1hdHRyaWJ1dGVzOjoKKwlMb29rIGZvciBhdHRyaWJ1dGVzIGluIC5naXRhdHRyaWJ1dGVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUKKwlhcyB3ZWxsIChzZWUgPDxBVFRSSUJVVEVTPj4pLgorCis8ZXh0cmE+OjoKKwlUaGlzIGNhbiBiZSBhbnkgb3B0aW9ucyB0aGF0IHRoZSBhcmNoaXZlciBiYWNrZW5kIHVuZGVyc3RhbmRzLgorCVNlZSBuZXh0IHNlY3Rpb24uCisKKy0tcmVtb3RlPTxyZXBvPjo6CisJSW5zdGVhZCBvZiBtYWtpbmcgYSB0YXIgYXJjaGl2ZSBmcm9tIHRoZSBsb2NhbCByZXBvc2l0b3J5LAorCXJldHJpZXZlIGEgdGFyIGFyY2hpdmUgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LiBOb3RlIHRoYXQgdGhlCisJcmVtb3RlIHJlcG9zaXRvcnkgbWF5IHBsYWNlIHJlc3RyaWN0aW9ucyBvbiB3aGljaCBzaGExCisJZXhwcmVzc2lvbnMgbWF5IGJlIGFsbG93ZWQgaW4gYDx0cmVlLWlzaD5gLiBTZWUKKwlsaW5rZ2l0OmdpdC11cGxvYWQtYXJjaGl2ZVsxXSBmb3IgZGV0YWlscy4KKworLS1leGVjPTxnaXQtdXBsb2FkLWFyY2hpdmU+OjoKKwlVc2VkIHdpdGggLS1yZW1vdGUgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUKKwknZ2l0LXVwbG9hZC1hcmNoaXZlJyBvbiB0aGUgcmVtb3RlIHNpZGUuCisKKzx0cmVlLWlzaD46OgorCVRoZSB0cmVlIG9yIGNvbW1pdCB0byBwcm9kdWNlIGFuIGFyY2hpdmUgZm9yLgorCis8cGF0aD46OgorCVdpdGhvdXQgYW4gb3B0aW9uYWwgcGF0aCBwYXJhbWV0ZXIsIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3JpZXMKKwlvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhcmUgaW5jbHVkZWQgaW4gdGhlIGFyY2hpdmUuCisJSWYgb25lIG9yIG1vcmUgcGF0aHMgYXJlIHNwZWNpZmllZCwgb25seSB0aGVzZSBhcmUgaW5jbHVkZWQuCisKK0JBQ0tFTkQgRVhUUkEgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ppcAorfn5+CistMDo6CisJU3RvcmUgdGhlIGZpbGVzIGluc3RlYWQgb2YgZGVmbGF0aW5nIHRoZW0uCistOTo6CisJSGlnaGVzdCBhbmQgc2xvd2VzdCBjb21wcmVzc2lvbiBsZXZlbC4gIFlvdSBjYW4gc3BlY2lmeSBhbnkKKwludW1iZXIgZnJvbSAxIHRvIDkgdG8gYWRqdXN0IGNvbXByZXNzaW9uIHNwZWVkIGFuZCByYXRpby4KKworCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK3Rhci51bWFzazo6CisJVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUgcGVybWlzc2lvbiBiaXRzIG9mCisJdGFyIGFyY2hpdmUgZW50cmllcy4gIFRoZSBkZWZhdWx0IGlzIDAwMDIsIHdoaWNoIHR1cm5zIG9mZiB0aGUKKwl3b3JsZCB3cml0ZSBiaXQuICBUaGUgc3BlY2lhbCB2YWx1ZSAidXNlciIgaW5kaWNhdGVzIHRoYXQgdGhlCisJYXJjaGl2aW5nIHVzZXIncyB1bWFzayB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gIFNlZSB1bWFzaygyKSBmb3IKKwlkZXRhaWxzLiAgSWYgYC0tcmVtb3RlYCBpcyB1c2VkIHRoZW4gb25seSB0aGUgY29uZmlndXJhdGlvbiBvZgorCXRoZSByZW1vdGUgcmVwb3NpdG9yeSB0YWtlcyBlZmZlY3QuCisKK3Rhci48Zm9ybWF0Pi5jb21tYW5kOjoKKwlUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIHNoZWxsIGNvbW1hbmQgdGhyb3VnaCB3aGljaCB0aGUgdGFyCisJb3V0cHV0IGdlbmVyYXRlZCBieSBgZ2l0IGFyY2hpdmVgIHNob3VsZCBiZSBwaXBlZC4gVGhlIGNvbW1hbmQKKwlpcyBleGVjdXRlZCB1c2luZyB0aGUgc2hlbGwgd2l0aCB0aGUgZ2VuZXJhdGVkIHRhciBmaWxlIG9uIGl0cworCXN0YW5kYXJkIGlucHV0LCBhbmQgc2hvdWxkIHByb2R1Y2UgdGhlIGZpbmFsIG91dHB1dCBvbiBpdHMKKwlzdGFuZGFyZCBvdXRwdXQuIEFueSBjb21wcmVzc2lvbi1sZXZlbCBvcHRpb25zIHdpbGwgYmUgcGFzc2VkCisJdG8gdGhlIGNvbW1hbmQgKGUuZy4sICItOSIpLiBBbiBvdXRwdXQgZmlsZSB3aXRoIHRoZSBzYW1lCisJZXh0ZW5zaW9uIGFzIGA8Zm9ybWF0PmAgd2lsbCBiZSB1c2UgdGhpcyBmb3JtYXQgaWYgbm8gb3RoZXIKKwlmb3JtYXQgaXMgZ2l2ZW4uCisrCitUaGUgInRhci5neiIgYW5kICJ0Z3oiIGZvcm1hdHMgYXJlIGRlZmluZWQgYXV0b21hdGljYWxseSBhbmQgZGVmYXVsdCB0bworYGd6aXAgLWNuYC4gWW91IG1heSBvdmVycmlkZSB0aGVtIHdpdGggY3VzdG9tIGNvbW1hbmRzLgorCit0YXIuPGZvcm1hdD4ucmVtb3RlOjoKKwlJZiB0cnVlLCBlbmFibGUgYDxmb3JtYXQ+YCBmb3IgdXNlIGJ5IHJlbW90ZSBjbGllbnRzIHZpYQorCWxpbmtnaXQ6Z2l0LXVwbG9hZC1hcmNoaXZlWzFdLiBEZWZhdWx0cyB0byBmYWxzZSBmb3IKKwl1c2VyLWRlZmluZWQgZm9ybWF0cywgYnV0IHRydWUgZm9yIHRoZSAidGFyLmd6IiBhbmQgInRneiIKKwlmb3JtYXRzLgorCitbW0FUVFJJQlVURVNdXQorQVRUUklCVVRFUworLS0tLS0tLS0tLQorCitleHBvcnQtaWdub3JlOjoKKwlGaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB0aGUgYXR0cmlidXRlIGV4cG9ydC1pZ25vcmUgd29uJ3QgYmUKKwlhZGRlZCB0byBhcmNoaXZlIGZpbGVzLiAgU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworZXhwb3J0LXN1YnN0OjoKKwlJZiB0aGUgYXR0cmlidXRlIGV4cG9ydC1zdWJzdCBpcyBzZXQgZm9yIGEgZmlsZSB0aGVuIEdpdCB3aWxsCisJZXhwYW5kIHNldmVyYWwgcGxhY2Vob2xkZXJzIHdoZW4gYWRkaW5nIHRoaXMgZmlsZSB0byBhbiBhcmNoaXZlLgorCVNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK05vdGUgdGhhdCBhdHRyaWJ1dGVzIGFyZSBieSBkZWZhdWx0IHRha2VuIGZyb20gdGhlIGAuZ2l0YXR0cmlidXRlc2AgZmlsZXMKK2luIHRoZSB0cmVlIHRoYXQgaXMgYmVpbmcgYXJjaGl2ZWQuICBJZiB5b3Ugd2FudCB0byB0d2VhayB0aGUgd2F5IHRoZQorb3V0cHV0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgZmFjdCAoZS5nLiB5b3UgY29tbWl0dGVkIHdpdGhvdXQgYWRkaW5nIGFuCithcHByb3ByaWF0ZSBleHBvcnQtaWdub3JlIGluIGl0cyBgLmdpdGF0dHJpYnV0ZXNgKSwgYWRqdXN0IHRoZSBjaGVja2VkIG91dAorYC5naXRhdHRyaWJ1dGVzYCBmaWxlIGFzIG5lY2Vzc2FyeSBhbmQgdXNlIGAtLXdvcmt0cmVlLWF0dHJpYnV0ZXNgCitvcHRpb24uICBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4ga2VlcCBuZWNlc3NhcnkgYXR0cmlidXRlcyB0aGF0IHNob3VsZCBhcHBseQord2hpbGUgYXJjaGl2aW5nIGFueSB0cmVlIGluIHlvdXIgYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AgZmlsZS4KKworRVhBTVBMRVMKKy0tLS0tLS0tCitgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PWp1bmsvIEhFQUQgfCAoY2QgL3Zhci90bXAvICYmIHRhciB4ZiAtKWA6OgorCisJQ3JlYXRlIGEgdGFyIGFyY2hpdmUgdGhhdCBjb250YWlucyB0aGUgY29udGVudHMgb2YgdGhlCisJbGF0ZXN0IGNvbW1pdCBvbiB0aGUgY3VycmVudCBicmFuY2gsIGFuZCBleHRyYWN0IGl0IGluIHRoZQorCWAvdmFyL3RtcC9qdW5rYCBkaXJlY3RvcnkuCisKK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9Z2l0LTEuNC4wLyB2MS40LjAgfCBnemlwID5naXQtMS40LjAudGFyLmd6YDo6CisKKwlDcmVhdGUgYSBjb21wcmVzc2VkIHRhcmJhbGwgZm9yIHYxLjQuMCByZWxlYXNlLgorCitgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyLmd6IC0tcHJlZml4PWdpdC0xLjQuMC8gdjEuNC4wID5naXQtMS40LjAudGFyLmd6YDo6CisKKwlTYW1lIGFzIGFib3ZlLCBidXQgdXNpbmcgdGhlIGJ1aWx0aW4gdGFyLmd6IGhhbmRsaW5nLgorCitgZ2l0IGFyY2hpdmUgLS1wcmVmaXg9Z2l0LTEuNC4wLyAtbyBnaXQtMS40LjAudGFyLmd6IHYxLjQuMGA6OgorCisJU2FtZSBhcyBhYm92ZSwgYnV0IHRoZSBmb3JtYXQgaXMgaW5mZXJyZWQgZnJvbSB0aGUgb3V0cHV0IGZpbGUuCisKK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9Z2l0LTEuNC4wLyB2MS40LjBee3RyZWV9IHwgZ3ppcCA+Z2l0LTEuNC4wLnRhci5nemA6OgorCisJQ3JlYXRlIGEgY29tcHJlc3NlZCB0YXJiYWxsIGZvciB2MS40LjAgcmVsZWFzZSwgYnV0IHdpdGhvdXQgYQorCWdsb2JhbCBleHRlbmRlZCBwYXggaGVhZGVyLgorCitgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIC0tcHJlZml4PWdpdC1kb2NzLyBIRUFEOkRvY3VtZW50YXRpb24vID4gZ2l0LTEuNC4wLWRvY3MuemlwYDo6CisKKwlQdXQgZXZlcnl0aGluZyBpbiB0aGUgY3VycmVudCBoZWFkJ3MgRG9jdW1lbnRhdGlvbi8gZGlyZWN0b3J5CisJaW50byAnZ2l0LTEuNC4wLWRvY3MuemlwJywgd2l0aCB0aGUgcHJlZml4ICdnaXQtZG9jcy8nLgorCitgZ2l0IGFyY2hpdmUgLW8gbGF0ZXN0LnppcCBIRUFEYDo6CisKKwlDcmVhdGUgYSBaaXAgYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiB0aGUgbGF0ZXN0CisJY29tbWl0IG9uIHRoZSBjdXJyZW50IGJyYW5jaC4gTm90ZSB0aGF0IHRoZSBvdXRwdXQgZm9ybWF0IGlzCisJaW5mZXJyZWQgYnkgdGhlIGV4dGVuc2lvbiBvZiB0aGUgb3V0cHV0IGZpbGUuCisKK2BnaXQgY29uZmlnIHRhci50YXIueHouY29tbWFuZCAieHogLWMiYDo6CisKKwlDb25maWd1cmUgYSAidGFyLnh6IiBmb3JtYXQgZm9yIG1ha2luZyBMWk1BLWNvbXByZXNzZWQgdGFyZmlsZXMuCisJWW91IGNhbiB1c2UgaXQgc3BlY2lmeWluZyBgLS1mb3JtYXQ9dGFyLnh6YCwgb3IgYnkgY3JlYXRpbmcgYW4KKwlvdXRwdXQgZmlsZSBsaWtlIGAtbyBmb28udGFyLnh6YC4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNDllOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0CkBAIC0wLDAgKzEsMTM1OCBAQAorRmlnaHRpbmcgcmVncmVzc2lvbnMgd2l0aCBnaXQgYmlzZWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpBdXRob3I6IENocmlzdGlhbiBDb3VkZXIKKzpFbWFpbDogY2hyaXNjb29sQHR1eGZhbWlseS5vcmcKKzpEYXRlOiAyMDA5LzExLzA4CisKK0Fic3RyYWN0CistLS0tLS0tLQorCisiZ2l0IGJpc2VjdCIgZW5hYmxlcyBzb2Z0d2FyZSB1c2VycyBhbmQgZGV2ZWxvcGVycyB0byBlYXNpbHkgZmluZCB0aGUKK2NvbW1pdCB0aGF0IGludHJvZHVjZWQgYSByZWdyZXNzaW9uLiBXZSBzaG93IHdoeSBpdCBpcyBpbXBvcnRhbnQgdG8KK2hhdmUgZ29vZCB0b29scyB0byBmaWdodCByZWdyZXNzaW9ucy4gV2UgZGVzY3JpYmUgaG93ICJnaXQgYmlzZWN0Igord29ya3MgZnJvbSB0aGUgb3V0c2lkZSBhbmQgdGhlIGFsZ29yaXRobXMgaXQgdXNlcyBpbnNpZGUuIFRoZW4gd2UKK2V4cGxhaW4gaG93IHRvIHRha2UgYWR2YW50YWdlIG9mICJnaXQgYmlzZWN0IiB0byBpbXByb3ZlIGN1cnJlbnQKK3ByYWN0aWNlcy4gQW5kIHdlIGRpc2N1c3MgaG93ICJnaXQgYmlzZWN0IiBjb3VsZCBpbXByb3ZlIGluIHRoZQorZnV0dXJlLgorCisKK0ludHJvZHVjdGlvbiB0byAiZ2l0IGJpc2VjdCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGlzIGEgRGlzdHJpYnV0ZWQgVmVyc2lvbiBDb250cm9sIHN5c3RlbSAoRFZDUykgY3JlYXRlZCBieSBMaW51cworVG9ydmFsZHMgYW5kIG1haW50YWluZWQgYnkgSnVuaW8gSGFtYW5vLgorCitJbiBHaXQgbGlrZSBpbiBtYW55IG90aGVyIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1zIChWQ1MpLCB0aGUgZGlmZmVyZW50CitzdGF0ZXMgb2YgdGhlIGRhdGEgdGhhdCBpcyBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0gYXJlIGNhbGxlZAorY29tbWl0cy4gQW5kLCBhcyBWQ1MgYXJlIG1vc3RseSB1c2VkIHRvIG1hbmFnZSBzb2Z0d2FyZSBzb3VyY2UgY29kZSwKK3NvbWV0aW1lcyAiaW50ZXJlc3RpbmciIGNoYW5nZXMgb2YgYmVoYXZpb3IgaW4gdGhlIHNvZnR3YXJlIGFyZQoraW50cm9kdWNlZCBpbiBzb21lIGNvbW1pdHMuCisKK0luIGZhY3QgcGVvcGxlIGFyZSBzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBjb21taXRzIHRoYXQgaW50cm9kdWNlIGEKKyJiYWQiIGJlaGF2aW9yLCBjYWxsZWQgYSBidWcgb3IgYSByZWdyZXNzaW9uLiBUaGV5IGFyZSBpbnRlcmVzdGVkIGluCit0aGVzZSBjb21taXRzIGJlY2F1c2UgYSBjb21taXQgKGhvcGVmdWxseSkgY29udGFpbnMgYSB2ZXJ5IHNtYWxsIHNldAorb2Ygc291cmNlIGNvZGUgY2hhbmdlcy4gQW5kIGl0J3MgbXVjaCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQKK3Byb3Blcmx5IGZpeCBhIHByb2JsZW0gd2hlbiB5b3Ugb25seSBuZWVkIHRvIGNoZWNrIGEgdmVyeSBzbWFsbCBzZXQgb2YKK2NoYW5nZXMsIHRoYW4gd2hlbiB5b3UgZG9uJ3Qga25vdyB3aGVyZSBsb29rIGluIHRoZSBmaXJzdCBwbGFjZS4KKworU28gdG8gaGVscCBwZW9wbGUgZmluZCBjb21taXRzIHRoYXQgaW50cm9kdWNlIGEgImJhZCIgYmVoYXZpb3IsIHRoZQorImdpdCBiaXNlY3QiIHNldCBvZiBjb21tYW5kcyB3YXMgaW52ZW50ZWQuIEFuZCBpdCBmb2xsb3dzIG9mIGNvdXJzZQordGhhdCBpbiAiZ2l0IGJpc2VjdCIgcGFybGFuY2UsIGNvbW1pdHMgd2hlcmUgdGhlICJpbnRlcmVzdGluZworYmVoYXZpb3IiIGlzIHByZXNlbnQgYXJlIGNhbGxlZCAiYmFkIiBjb21taXRzLCB3aGlsZSBvdGhlciBjb21taXRzIGFyZQorY2FsbGVkICJnb29kIiBjb21taXRzLiBBbmQgYSBjb21taXQgdGhhdCBpbnRyb2R1Y2UgdGhlIGJlaGF2aW9yIHdlIGFyZQoraW50ZXJlc3RlZCBpbiBpcyBjYWxsZWQgYSAiZmlyc3QgYmFkIGNvbW1pdCIuIE5vdGUgdGhhdCB0aGVyZSBjb3VsZCBiZQorbW9yZSB0aGFuIG9uZSAiZmlyc3QgYmFkIGNvbW1pdCIgaW4gdGhlIGNvbW1pdCBzcGFjZSB3ZSBhcmUgc2VhcmNoaW5nLgorCitTbyAiZ2l0IGJpc2VjdCIgaXMgZGVzaWduZWQgdG8gaGVscCBmaW5kIGEgImZpcnN0IGJhZCBjb21taXQiLiBBbmQgdG8KK2JlIGFzIGVmZmljaWVudCBhcyBwb3NzaWJsZSwgaXQgdHJpZXMgdG8gcGVyZm9ybSBhIGJpbmFyeSBzZWFyY2guCisKKworRmlnaHRpbmcgcmVncmVzc2lvbnMgb3ZlcnZpZXcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ3Jlc3Npb25zOiBhIGJpZyBwcm9ibGVtCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitSZWdyZXNzaW9ucyBhcmUgYSBiaWcgcHJvYmxlbSBpbiB0aGUgc29mdHdhcmUgaW5kdXN0cnkuIEJ1dCBpdCdzCitkaWZmaWN1bHQgdG8gcHV0IHNvbWUgcmVhbCBudW1iZXJzIGJlaGluZCB0aGF0IGNsYWltLgorCitUaGVyZSBhcmUgc29tZSBudW1iZXJzIGFib3V0IGJ1Z3MgaW4gZ2VuZXJhbCwgbGlrZSBhIE5JU1Qgc3R1ZHkgaW4KKzIwMDIgPDwxPj4gdGhhdCBzYWlkOgorCitfX19fX19fX19fX19fCitTb2Z0d2FyZSBidWdzLCBvciBlcnJvcnMsIGFyZSBzbyBwcmV2YWxlbnQgYW5kIHNvIGRldHJpbWVudGFsIHRoYXQKK3RoZXkgY29zdCB0aGUgVS5TLiBlY29ub215IGFuIGVzdGltYXRlZCAkNTkuNSBiaWxsaW9uIGFubnVhbGx5LCBvcgorYWJvdXQgMC42IHBlcmNlbnQgb2YgdGhlIGdyb3NzIGRvbWVzdGljIHByb2R1Y3QsIGFjY29yZGluZyB0byBhIG5ld2x5CityZWxlYXNlZCBzdHVkeSBjb21taXNzaW9uZWQgYnkgdGhlIERlcGFydG1lbnQgb2YgQ29tbWVyY2UncyBOYXRpb25hbAorSW5zdGl0dXRlIG9mIFN0YW5kYXJkcyBhbmQgVGVjaG5vbG9neSAoTklTVCkuIEF0IHRoZSBuYXRpb25hbCBsZXZlbCwKK292ZXIgaGFsZiBvZiB0aGUgY29zdHMgYXJlIGJvcm5lIGJ5IHNvZnR3YXJlIHVzZXJzIGFuZCB0aGUgcmVtYWluZGVyCitieSBzb2Z0d2FyZSBkZXZlbG9wZXJzL3ZlbmRvcnMuICBUaGUgc3R1ZHkgYWxzbyBmb3VuZCB0aGF0LCBhbHRob3VnaAorYWxsIGVycm9ycyBjYW5ub3QgYmUgcmVtb3ZlZCwgbW9yZSB0aGFuIGEgdGhpcmQgb2YgdGhlc2UgY29zdHMsIG9yIGFuCitlc3RpbWF0ZWQgJDIyLjIgYmlsbGlvbiwgY291bGQgYmUgZWxpbWluYXRlZCBieSBhbiBpbXByb3ZlZCB0ZXN0aW5nCitpbmZyYXN0cnVjdHVyZSB0aGF0IGVuYWJsZXMgZWFybGllciBhbmQgbW9yZSBlZmZlY3RpdmUgaWRlbnRpZmljYXRpb24KK2FuZCByZW1vdmFsIG9mIHNvZnR3YXJlIGRlZmVjdHMuIFRoZXNlIGFyZSB0aGUgc2F2aW5ncyBhc3NvY2lhdGVkIHdpdGgKK2ZpbmRpbmcgYW4gaW5jcmVhc2VkIHBlcmNlbnRhZ2UgKGJ1dCBub3QgMTAwIHBlcmNlbnQpIG9mIGVycm9ycyBjbG9zZXIKK3RvIHRoZSBkZXZlbG9wbWVudCBzdGFnZXMgaW4gd2hpY2ggdGhleSBhcmUgaW50cm9kdWNlZC4gQ3VycmVudGx5LAorb3ZlciBoYWxmIG9mIGFsbCBlcnJvcnMgYXJlIG5vdCBmb3VuZCB1bnRpbCAiZG93bnN0cmVhbSIgaW4gdGhlCitkZXZlbG9wbWVudCBwcm9jZXNzIG9yIGR1cmluZyBwb3N0LXNhbGUgc29mdHdhcmUgdXNlLgorX19fX19fX19fX19fXworCitBbmQgdGhlbjoKKworX19fX19fX19fX19fXworU29mdHdhcmUgZGV2ZWxvcGVycyBhbHJlYWR5IHNwZW5kIGFwcHJveGltYXRlbHkgODAgcGVyY2VudCBvZgorZGV2ZWxvcG1lbnQgY29zdHMgb24gaWRlbnRpZnlpbmcgYW5kIGNvcnJlY3RpbmcgZGVmZWN0cywgYW5kIHlldCBmZXcKK3Byb2R1Y3RzIG9mIGFueSB0eXBlIG90aGVyIHRoYW4gc29mdHdhcmUgYXJlIHNoaXBwZWQgd2l0aCBzdWNoIGhpZ2gKK2xldmVscyBvZiBlcnJvcnMuCitfX19fX19fX19fX19fCisKK0V2ZW50dWFsbHkgdGhlIGNvbmNsdXNpb24gc3RhcnRlZCB3aXRoOgorCitfX19fX19fX19fX19fCitUaGUgcGF0aCB0byBoaWdoZXIgc29mdHdhcmUgcXVhbGl0eSBpcyBzaWduaWZpY2FudGx5IGltcHJvdmVkIHNvZnR3YXJlCit0ZXN0aW5nLgorX19fX19fX19fX19fXworCitUaGVyZSBhcmUgb3RoZXIgZXN0aW1hdGVzIHNheWluZyB0aGF0IDgwJSBvZiB0aGUgY29zdCByZWxhdGVkIHRvCitzb2Z0d2FyZSBpcyBhYm91dCBtYWludGVuYW5jZSA8PDI+Pi4KKworVGhvdWdoLCBhY2NvcmRpbmcgdG8gV2lraXBlZGlhIDw8Mz4+OgorCitfX19fX19fX19fX19fCitBIGNvbW1vbiBwZXJjZXB0aW9uIG9mIG1haW50ZW5hbmNlIGlzIHRoYXQgaXQgaXMgbWVyZWx5IGZpeGluZworYnVncy4gSG93ZXZlciwgc3R1ZGllcyBhbmQgc3VydmV5cyBvdmVyIHRoZSB5ZWFycyBoYXZlIGluZGljYXRlZCB0aGF0Cit0aGUgbWFqb3JpdHksIG92ZXIgODAlLCBvZiB0aGUgbWFpbnRlbmFuY2UgZWZmb3J0IGlzIHVzZWQgZm9yCitub24tY29ycmVjdGl2ZSBhY3Rpb25zIChQaWdvc2t5IDE5OTcpLiBUaGlzIHBlcmNlcHRpb24gaXMgcGVycGV0dWF0ZWQKK2J5IHVzZXJzIHN1Ym1pdHRpbmcgcHJvYmxlbSByZXBvcnRzIHRoYXQgaW4gcmVhbGl0eSBhcmUgZnVuY3Rpb25hbGl0eQorZW5oYW5jZW1lbnRzIHRvIHRoZSBzeXN0ZW0uCitfX19fX19fX19fX19fCisKK0J1dCB3ZSBjYW4gZ3Vlc3MgdGhhdCBpbXByb3Zpbmcgb24gZXhpc3Rpbmcgc29mdHdhcmUgaXMgdmVyeSBjb3N0bHkKK2JlY2F1c2UgeW91IGhhdmUgdG8gd2F0Y2ggb3V0IGZvciByZWdyZXNzaW9ucy4gQXQgbGVhc3QgdGhpcyB3b3VsZAorbWFrZSB0aGUgYWJvdmUgc3R1ZGllcyBjb25zaXN0ZW50IGFtb25nIHRoZW1zZWx2ZXMuCisKK09mIGNvdXJzZSBzb21lIGtpbmQgb2Ygc29mdHdhcmUgaXMgZGV2ZWxvcGVkLCB0aGVuIHVzZWQgZHVyaW5nIHNvbWUKK3RpbWUgd2l0aG91dCBiZWluZyBpbXByb3ZlZCBvbiBtdWNoLCBhbmQgdGhlbiBmaW5hbGx5IHRocm93biBhd2F5LiBJbgordGhpcyBjYXNlLCBvZiBjb3Vyc2UsIHJlZ3Jlc3Npb25zIG1heSBub3QgYmUgYSBiaWcgcHJvYmxlbS4gQnV0IG9uIHRoZQorb3RoZXIgaGFuZCwgdGhlcmUgaXMgYSBsb3Qgb2YgYmlnIHNvZnR3YXJlIHRoYXQgaXMgY29udGludWFsbHkKK2RldmVsb3BlZCBhbmQgbWFpbnRhaW5lZCBkdXJpbmcgeWVhcnMgb3IgZXZlbiB0ZW5zIG9mIHllYXJzIGJ5IGEgbG90CitvZiBwZW9wbGUuIEFuZCBhcyB0aGVyZSBhcmUgb2Z0ZW4gbWFueSBwZW9wbGUgd2hvIGRlcGVuZCAoc29tZXRpbWVzCitjcml0aWNhbGx5KSBvbiBzdWNoIHNvZnR3YXJlLCByZWdyZXNzaW9ucyBhcmUgYSByZWFsbHkgYmlnIHByb2JsZW0uCisKK09uZSBzdWNoIHNvZnR3YXJlIGlzIHRoZSBMaW51eCBrZXJuZWwuIEFuZCBpZiB3ZSBsb29rIGF0IHRoZSBMaW51eAora2VybmVsLCB3ZSBjYW4gc2VlIHRoYXQgYSBsb3Qgb2YgdGltZSBhbmQgZWZmb3J0IGlzIHNwZW50IHRvIGZpZ2h0CityZWdyZXNzaW9ucy4gVGhlIHJlbGVhc2UgY3ljbGUgc3RhcnQgd2l0aCBhIDIgd2Vla3MgbG9uZyBtZXJnZQord2luZG93LiBUaGVuIHRoZSBmaXJzdCByZWxlYXNlIGNhbmRpZGF0ZSAocmMpIHZlcnNpb24gaXMgdGFnZ2VkLiBBbmQKK2FmdGVyIHRoYXQgYWJvdXQgNyBvciA4IG1vcmUgcmMgdmVyc2lvbnMgd2lsbCBhcHBlYXIgd2l0aCBhcm91bmQgb25lCit3ZWVrIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBiZWZvcmUgdGhlIGZpbmFsIHJlbGVhc2UuCisKK1RoZSB0aW1lIGJldHdlZW4gdGhlIGZpcnN0IHJjIHJlbGVhc2UgYW5kIHRoZSBmaW5hbCByZWxlYXNlIGlzCitzdXBwb3NlZCB0byBiZSB1c2VkIHRvIHRlc3QgcmMgdmVyc2lvbnMgYW5kIGZpZ2h0IGJ1Z3MgYW5kIGVzcGVjaWFsbHkKK3JlZ3Jlc3Npb25zLiBBbmQgdGhpcyB0aW1lIGlzIG1vcmUgdGhhbiA4MCUgb2YgdGhlIHJlbGVhc2UgY3ljbGUKK3RpbWUuIEJ1dCB0aGlzIGlzIG5vdCB0aGUgZW5kIG9mIHRoZSBmaWdodCB5ZXQsIGFzIG9mIGNvdXJzZSBpdAorY29udGludWVzIGFmdGVyIHRoZSByZWxlYXNlLgorCitBbmQgdGhlbiB0aGlzIGlzIHdoYXQgSW5nbyBNb2xuYXIgKGEgd2VsbCBrbm93biBMaW51eCBrZXJuZWwKK2RldmVsb3Blcikgc2F5cyBhYm91dCBoaXMgdXNlIG9mIGdpdCBiaXNlY3Q6CisKK19fX19fX19fX19fX18KK0kgbW9zdCBhY3RpdmVseSB1c2UgaXQgZHVyaW5nIHRoZSBtZXJnZSB3aW5kb3cgKHdoZW4gYSBsb3Qgb2YgdHJlZXMKK2dldCBtZXJnZWQgdXBzdHJlYW0gYW5kIHdoZW4gdGhlIGluZmx1eCBvZiBidWdzIGlzIHRoZSBoaWdoZXN0KSAtIGFuZAoreWVzLCB0aGVyZSBoYXZlIGJlZW4gY2FzZXMgdGhhdCBpIHVzZWQgaXQgbXVsdGlwbGUgdGltZXMgYSBkYXkuIE15CithdmVyYWdlIGlzIHJvdWdobHkgb25jZSBhIGRheS4KK19fX19fX19fX19fX18KKworU28gcmVncmVzc2lvbnMgYXJlIGZvdWdodCBhbGwgdGhlIHRpbWUgYnkgZGV2ZWxvcGVycywgYW5kIGluZGVlZCBpdCBpcword2VsbCBrbm93biB0aGF0IGJ1Z3Mgc2hvdWxkIGJlIGZpeGVkIGFzIHNvb24gYXMgcG9zc2libGUsIHNvIGFzIHNvb24KK2FzIHRoZXkgYXJlIGZvdW5kLiBUaGF0J3Mgd2h5IGl0IGlzIGludGVyZXN0aW5nIHRvIGhhdmUgZ29vZCB0b29scyBmb3IKK3RoaXMgcHVycG9zZS4KKworT3RoZXIgdG9vbHMgdG8gZmlnaHQgcmVncmVzc2lvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvIHdoYXQgYXJlIHRoZSB0b29scyB1c2VkIHRvIGZpZ2h0IHJlZ3Jlc3Npb25zPyBUaGV5IGFyZSBuZWFybHkgdGhlCitzYW1lIGFzIHRob3NlIHVzZWQgdG8gZmlnaHQgcmVndWxhciBidWdzLiBUaGUgb25seSBzcGVjaWZpYyB0b29scyBhcmUKK3Rlc3Qgc3VpdGVzIGFuZCB0b29scyBzaW1pbGFyIGFzICJnaXQgYmlzZWN0Ii4KKworVGVzdCBzdWl0ZXMgYXJlIHZlcnkgbmljZS4gQnV0IHdoZW4gdGhleSBhcmUgdXNlZCBhbG9uZSwgdGhleSBhcmUKK3N1cHBvc2VkIHRvIGJlIHVzZWQgc28gdGhhdCBhbGwgdGhlIHRlc3RzIGFyZSBjaGVja2VkIGFmdGVyIGVhY2gKK2NvbW1pdC4gVGhpcyBtZWFucyB0aGF0IHRoZXkgYXJlIG5vdCB2ZXJ5IGVmZmljaWVudCwgYmVjYXVzZSBtYW55Cit0ZXN0cyBhcmUgcnVuIGZvciBubyBpbnRlcmVzdGluZyByZXN1bHQsIGFuZCB0aGV5IHN1ZmZlciBmcm9tCitjb21iaW5hdG9yaWFsIGV4cGxvc2lvbi4KKworSW4gZmFjdCB0aGUgcHJvYmxlbSBpcyB0aGF0IGJpZyBzb2Z0d2FyZSBvZnRlbiBoYXMgbWFueSBkaWZmZXJlbnQKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhhdCBlYWNoIHRlc3QgY2FzZSBzaG91bGQgcGFzcyBmb3IgZWFjaAorY29uZmlndXJhdGlvbiBhZnRlciBlYWNoIGNvbW1pdC4gU28gaWYgeW91IGhhdmUgZm9yIGVhY2ggcmVsZWFzZTogTgorY29uZmlndXJhdGlvbnMsIE0gY29tbWl0cyBhbmQgVCB0ZXN0IGNhc2VzLCB5b3Ugc2hvdWxkIHBlcmZvcm06CisKKy0tLS0tLS0tLS0tLS0KK04gKiBNICogVCB0ZXN0cworLS0tLS0tLS0tLS0tLQorCit3aGVyZSBOLCBNIGFuZCBUIGFyZSBhbGwgZ3Jvd2luZyB3aXRoIHRoZSBzaXplIHlvdXIgc29mdHdhcmUuCisKK1NvIHZlcnkgc29vbiBpdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBjb21wbGV0ZWx5IHRlc3QgZXZlcnl0aGluZy4KKworQW5kIGlmIHNvbWUgYnVncyBzbGlwIHRocm91Z2ggeW91ciB0ZXN0IHN1aXRlLCB0aGVuIHlvdSBjYW4gYWRkIGEgdGVzdAordG8geW91ciB0ZXN0IHN1aXRlLiBCdXQgaWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgbmV3IGltcHJvdmVkIHRlc3QKK3N1aXRlIHRvIGZpbmQgd2hlcmUgdGhlIGJ1ZyBzbGlwcGVkIGluLCB0aGVuIHlvdSB3aWxsIGVpdGhlciBoYXZlIHRvCitlbXVsYXRlIGEgYmlzZWN0aW9uIHByb2Nlc3Mgb3IgeW91IHdpbGwgcGVyaGFwcyBibHVudGx5IHRlc3QgZWFjaAorY29tbWl0IGJhY2t3YXJkIHN0YXJ0aW5nIGZyb20gdGhlICJiYWQiIGNvbW1pdCB5b3UgaGF2ZSB3aGljaCBtYXkgYmUKK3Zlcnkgd2FzdGVmdWwuCisKKyJnaXQgYmlzZWN0IiBvdmVydmlldworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N0YXJ0aW5nIGEgYmlzZWN0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZmlyc3QgImdpdCBiaXNlY3QiIHN1YmNvbW1hbmQgdG8gdXNlIGlzICJnaXQgYmlzZWN0IHN0YXJ0IiB0bworc3RhcnQgdGhlIHNlYXJjaC4gVGhlbiBib3VuZHMgbXVzdCBiZSBzZXQgdG8gbGltaXQgdGhlIGNvbW1pdAorc3BhY2UuIFRoaXMgaXMgZG9uZSB1c3VhbGx5IGJ5IGdpdmluZyBvbmUgImJhZCIgYW5kIGF0IGxlYXN0IG9uZQorImdvb2QiIGNvbW1pdC4gVGhleSBjYW4gYmUgcGFzc2VkIGluIHRoZSBpbml0aWFsIGNhbGwgdG8gImdpdCBiaXNlY3QKK3N0YXJ0IiBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBbQkFEIFtHT09ELi4uXV0KKy0tLS0tLS0tLS0tLS0KKworb3IgdGhleSBjYW4gYmUgc2V0IHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgYmFkIFtDT01NSVRdCistLS0tLS0tLS0tLS0tCisKK2FuZDoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGdvb2QgW0NPTU1JVC4uLl0KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgQkFELCBHT09EIGFuZCBDT01NSVQgYXJlIGFsbCBuYW1lcyB0aGF0IGNhbiBiZSByZXNvbHZlZCB0byBhCitjb21taXQuCisKK1RoZW4gImdpdCBiaXNlY3QiIHdpbGwgY2hlY2tvdXQgYSBjb21taXQgb2YgaXRzIGNob29zaW5nIGFuZCBhc2sgdGhlCit1c2VyIHRvIHRlc3QgaXQsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IHYyLjYuMjcgdjIuNi4yNQorQmlzZWN0aW5nOiAxMDkyOCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTQgc3RlcHMpCitbMmVjNjVmOGI4OWVhMDAzYzI3ZmY3NzIzNTI1YTJlZTMzNWEyYjM5M10geDg2OiBjbGVhbiB1cCB1c2luZyBtYXhfbG93X3BmbiBvbiAzMi1iaXQKKy0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IHRoZSBleGFtcGxlIHRoYXQgd2Ugd2lsbCB1c2UgaXMgcmVhbGx5IGEgdG95IGV4YW1wbGUsIHdlCit3aWxsIGJlIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBjb21taXQgdGhhdCBoYXMgYSB2ZXJzaW9uIGxpa2UKKyIyLjYuMjYtc29tZXRoaW5nIiwgdGhhdCBpcyB0aGUgY29tbWl0IHRoYXQgaGFzIGEgIlNVQkxFVkVMID0gMjYiIGxpbmUKK2luIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUuIFRoaXMgaXMgYSB0b3kgZXhhbXBsZSBiZWNhdXNlIHRoZXJlIGFyZQorYmV0dGVyIHdheXMgdG8gZmluZCB0aGlzIGNvbW1pdCB3aXRoIEdpdCB0aGFuIHVzaW5nICJnaXQgYmlzZWN0IiAoZm9yCitleGFtcGxlICJnaXQgYmxhbWUiIG9yICJnaXQgbG9nIC1TPHN0cmluZz4iKS4KKworRHJpdmluZyBhIGJpc2VjdGlvbiBtYW51YWxseQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBdCB0aGlzIHBvaW50IHRoZXJlIGFyZSBiYXNpY2FsbHkgMiB3YXlzIHRvIGRyaXZlIHRoZSBzZWFyY2guIEl0IGNhbgorYmUgZHJpdmVuIG1hbnVhbGx5IGJ5IHRoZSB1c2VyIG9yIGl0IGNhbiBiZSBkcml2ZW4gYXV0b21hdGljYWxseSBieSBhCitzY3JpcHQgb3IgYSBjb21tYW5kLgorCitJZiB0aGUgdXNlciBpcyBkcml2aW5nIGl0LCB0aGVuIGF0IGVhY2ggc3RlcCBvZiB0aGUgc2VhcmNoLCB0aGUgdXNlcgord2lsbCBoYXZlIHRvIHRlc3QgdGhlIGN1cnJlbnQgY29tbWl0IGFuZCBzYXkgaWYgaXQgaXMgImdvb2QiIG9yICJiYWQiCit1c2luZyB0aGUgImdpdCBiaXNlY3QgZ29vZCIgb3IgImdpdCBiaXNlY3QgYmFkIiBjb21tYW5kcyByZXNwZWN0aXZlbHkKK3RoYXQgaGF2ZSBiZWVuIGRlc2NyaWJlZCBhYm92ZS4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQKK0Jpc2VjdGluZzogNTQ4MCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTMgc3RlcHMpCitbNjZjMGIzOTRmMDhmZDg5MjM2NTE1YzFjODQ0ODVlYTcxMmExNTdiZV0gS1ZNOiBraWxsIGZpbGUtPmZfY291bnQgYWJ1c2UgaW4ga3ZtCistLS0tLS0tLS0tLS0tCisKK0FuZCBhZnRlciBhIGZldyBtb3JlIHN0ZXBzIGxpa2UgdGhhdCwgImdpdCBiaXNlY3QiIHdpbGwgZXZlbnR1YWxseQorZmluZCBhIGZpcnN0IGJhZCBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQKKzJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQKK2NvbW1pdCAyZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkCitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0RhdGU6ICAgU2F0IE1heSAzIDExOjU5OjQ0IDIwMDggLTA3MDAKKworICAgIExpbnV4IDIuNi4yNi1yYzEKKworOjEwMDY0NCAxMDA2NDQgNWNmODI1ODEuLi4gNDQ5Mjk4NGUuLi4gTSAgICAgIE1ha2VmaWxlCistLS0tLS0tLS0tLS0tCisKK0F0IHRoaXMgcG9pbnQgd2UgY2FuIHNlZSB3aGF0IHRoZSBjb21taXQgZG9lcywgY2hlY2sgaXQgb3V0IChpZiBpdCdzCitub3QgYWxyZWFkeSBjaGVja2VkIG91dCkgb3IgdGlua2VyIHdpdGggaXQsIGZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQUQKK2NvbW1pdCAyZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkCitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0RhdGU6ICAgU2F0IE1heSAzIDExOjU5OjQ0IDIwMDggLTA3MDAKKworICAgIExpbnV4IDIuNi4yNi1yYzEKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDVjZjgyNTguLjQ0OTI5ODQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xLDcgKzEsNyBAQAorIFZFUlNJT04gPSAyCisgUEFUQ0hMRVZFTCA9IDYKKy1TVUJMRVZFTCA9IDI1CistRVhUUkFWRVJTSU9OID0KKytTVUJMRVZFTCA9IDI2CisrRVhUUkFWRVJTSU9OID0gLXJjMQorIE5BTUUgPSBGdW5reSBXZWFzZWwgaXMgSmlnZ3kgd2l0IGl0CisKKyAjICpET0NVTUVOVEFUSU9OKgorLS0tLS0tLS0tLS0tLQorCitBbmQgd2hlbiB3ZSBhcmUgZmluaXNoZWQgd2UgY2FuIHVzZSAiZ2l0IGJpc2VjdCByZXNldCIgdG8gZ28gYmFjayB0bwordGhlIGJyYW5jaCB3ZSB3ZXJlIGluIGJlZm9yZSB3ZSBzdGFydGVkIGJpc2VjdGluZzoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0CitDaGVja2luZyBvdXQgZmlsZXM6IDEwMCUgKDIxNTQ5LzIxNTQ5KSwgZG9uZS4KK1ByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIDJkZGNjYTMuLi4gTGludXggMi42LjI2LXJjMQorU3dpdGNoZWQgdG8gYnJhbmNoICdtYXN0ZXInCistLS0tLS0tLS0tLS0tCisKK0RyaXZpbmcgYSBiaXNlY3Rpb24gYXV0b21hdGljYWxseQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBvdGhlciB3YXkgdG8gZHJpdmUgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIGlzIHRvIHRlbGwgImdpdCBiaXNlY3QiCit0byBsYXVuY2ggYSBzY3JpcHQgb3IgY29tbWFuZCBhdCBlYWNoIGJpc2VjdGlvbiBzdGVwIHRvIGtub3cgaWYgdGhlCitjdXJyZW50IGNvbW1pdCBpcyAiZ29vZCIgb3IgImJhZCIuIFRvIGRvIHRoYXQsIHdlIHVzZSB0aGUgImdpdCBiaXNlY3QKK3J1biIgY29tbWFuZC4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCB2Mi42LjI3IHYyLjYuMjUKK0Jpc2VjdGluZzogMTA5MjggcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIChyb3VnaGx5IDE0IHN0ZXBzKQorWzJlYzY1ZjhiODllYTAwM2MyN2ZmNzcyMzUyNWEyZWUzMzVhMmIzOTNdIHg4NjogY2xlYW4gdXAgdXNpbmcgbWF4X2xvd19wZm4gb24gMzItYml0CiskCiskIGdpdCBiaXNlY3QgcnVuIGdyZXAgJ15TVUJMRVZFTCA9IDI1JyBNYWtlZmlsZQorcnVubmluZyBncmVwIF5TVUJMRVZFTCA9IDI1IE1ha2VmaWxlCitCaXNlY3Rpbmc6IDU0ODAgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIChyb3VnaGx5IDEzIHN0ZXBzKQorWzY2YzBiMzk0ZjA4ZmQ4OTIzNjUxNWMxYzg0NDg1ZWE3MTJhMTU3YmVdIEtWTToga2lsbCBmaWxlLT5mX2NvdW50IGFidXNlIGluIGt2bQorcnVubmluZyBncmVwIF5TVUJMRVZFTCA9IDI1IE1ha2VmaWxlCitTVUJMRVZFTCA9IDI1CitCaXNlY3Rpbmc6IDI3NDAgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIChyb3VnaGx5IDEyIHN0ZXBzKQorWzY3MTI5NDcxOTYyOGYxNjcxZmFlZmQ0ODgyNzY0ODg2ZjhhZDA4Y2JdIFY0TC9EVkIoNzg3OSk6IEFkZGluZyBjeDE4IFN1cHBvcnQgZm9yIG14bDUwMDVzCisuLi4KKy4uLgorcnVubmluZyBncmVwIF5TVUJMRVZFTCA9IDI1IE1ha2VmaWxlCitCaXNlY3Rpbmc6IDAgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIChyb3VnaGx5IDAgc3RlcHMpCitbMmRkY2NhMzZjOGJjZmEyNTE3MjRmZTM0MmM4MzI3NDUxOTg4YmUwZF0gTGludXggMi42LjI2LXJjMQorcnVubmluZyBncmVwIF5TVUJMRVZFTCA9IDI1IE1ha2VmaWxlCisyZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0Citjb21taXQgMmRkY2NhMzZjOGJjZmEyNTE3MjRmZTM0MmM4MzI3NDUxOTg4YmUwZAorQXV0aG9yOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CitEYXRlOiAgIFNhdCBNYXkgMyAxMTo1OTo0NCAyMDA4IC0wNzAwCisKKyAgICBMaW51eCAyLjYuMjYtcmMxCisKKzoxMDA2NDQgMTAwNjQ0IDVjZjgyNTgxLi4uIDQ0OTI5ODRlLi4uIE0gICAgICBNYWtlZmlsZQorYmlzZWN0IHJ1biBzdWNjZXNzCistLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgZXhhbXBsZSwgd2UgcGFzc2VkICJncmVwICdeU1VCTEVWRUwgPSAyNScgTWFrZWZpbGUiIGFzCitwYXJhbWV0ZXIgdG8gImdpdCBiaXNlY3QgcnVuIi4gVGhpcyBtZWFucyB0aGF0IGF0IGVhY2ggc3RlcCwgdGhlIGdyZXAKK2NvbW1hbmQgd2UgcGFzc2VkIHdpbGwgYmUgbGF1bmNoZWQuIEFuZCBpZiBpdCBleGl0cyB3aXRoIGNvZGUgMCAodGhhdAorbWVhbnMgc3VjY2VzcykgdGhlbiBnaXQgYmlzZWN0IHdpbGwgbWFyayB0aGUgY3VycmVudCBzdGF0ZSBhcworImdvb2QiLiBJZiBpdCBleGl0cyB3aXRoIGNvZGUgMSAob3IgYW55IGNvZGUgYmV0d2VlbiAxIGFuZCAxMjcKK2luY2x1ZGVkLCBleGNlcHQgdGhlIHNwZWNpYWwgY29kZSAxMjUpLCB0aGVuIHRoZSBjdXJyZW50IHN0YXRlIHdpbGwgYmUKK21hcmtlZCBhcyAiYmFkIi4KKworRXhpdCBjb2RlIGJldHdlZW4gMTI4IGFuZCAyNTUgYXJlIHNwZWNpYWwgdG8gImdpdCBiaXNlY3QgcnVuIi4gVGhleQorbWFrZSBpdCBzdG9wIGltbWVkaWF0ZWx5IHRoZSBiaXNlY3Rpb24gcHJvY2Vzcy4gVGhpcyBpcyB1c2VmdWwgZm9yCitleGFtcGxlIGlmIHRoZSBjb21tYW5kIHBhc3NlZCB0YWtlcyB0b28gbG9uZyB0byBjb21wbGV0ZSwgYmVjYXVzZSB5b3UKK2NhbiBraWxsIGl0IHdpdGggYSBzaWduYWwgYW5kIGl0IHdpbGwgc3RvcCB0aGUgYmlzZWN0aW9uIHByb2Nlc3MuCisKK0l0IGNhbiBhbHNvIGJlIHVzZWZ1bCBpbiBzY3JpcHRzIHBhc3NlZCB0byAiZ2l0IGJpc2VjdCBydW4iIHRvICJleGl0CisyNTUiIGlmIHNvbWUgdmVyeSBhYm5vcm1hbCBzaXR1YXRpb24gaXMgZGV0ZWN0ZWQuCisKK0F2b2lkaW5nIHVudGVzdGFibGUgY29tbWl0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvbWV0aW1lcyBpdCBoYXBwZW5zIHRoYXQgdGhlIGN1cnJlbnQgc3RhdGUgY2Fubm90IGJlIHRlc3RlZCwgZm9yCitleGFtcGxlIGlmIGl0IGRvZXMgbm90IGNvbXBpbGUgYmVjYXVzZSB0aGVyZSB3YXMgYSBidWcgcHJldmVudGluZyBpdAorYXQgdGhhdCB0aW1lLiBUaGlzIGlzIHdoYXQgdGhlIHNwZWNpYWwgZXhpdCBjb2RlIDEyNSBpcyBmb3IuIEl0IHRlbGxzCisiZ2l0IGJpc2VjdCBydW4iIHRoYXQgdGhlIGN1cnJlbnQgY29tbWl0IHNob3VsZCBiZSBtYXJrZWQgYXMKK3VudGVzdGFibGUgYW5kIHRoYXQgYW5vdGhlciBvbmUgc2hvdWxkIGJlIGNob3NlbiBhbmQgY2hlY2tlZCBvdXQuCisKK0lmIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBpcyBkcml2ZW4gbWFudWFsbHksIHlvdSBjYW4gdXNlICJnaXQgYmlzZWN0Citza2lwIiB0byBkbyB0aGUgc2FtZSB0aGluZy4gKEluIGZhY3QgdGhlIHNwZWNpYWwgZXhpdCBjb2RlIDEyNSBtYWtlcworImdpdCBiaXNlY3QgcnVuIiB1c2UgImdpdCBiaXNlY3Qgc2tpcCIgaW4gdGhlIGJhY2tncm91bmQuKQorCitPciBpZiB5b3Ugd2FudCBtb3JlIGNvbnRyb2wsIHlvdSBjYW4gaW5zcGVjdCB0aGUgY3VycmVudCBzdGF0ZSB1c2luZworZm9yIGV4YW1wbGUgImdpdCBiaXNlY3QgdmlzdWFsaXplIi4gSXQgd2lsbCBsYXVuY2ggZ2l0ayAob3IgImdpdCBsb2ciCitpZiB0aGUgYERJU1BMQVlgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQpIHRvIGhlbHAgeW91IGZpbmQgYQorYmV0dGVyIGJpc2VjdGlvbiBwb2ludC4KKworRWl0aGVyIHdheSwgaWYgeW91IGhhdmUgYSBzdHJpbmcgb2YgdW50ZXN0YWJsZSBjb21taXRzLCBpdCBtaWdodAoraGFwcGVuIHRoYXQgdGhlIHJlZ3Jlc3Npb24geW91IGFyZSBsb29raW5nIGZvciBoYXMgYmVlbiBpbnRyb2R1Y2VkIGJ5CitvbmUgb2YgdGhlc2UgdW50ZXN0YWJsZSBjb21taXRzLiBJbiB0aGlzIGNhc2UgaXQncyBub3QgcG9zc2libGUgdG8KK3RlbGwgZm9yIHN1cmUgd2hpY2ggY29tbWl0IGludHJvZHVjZWQgdGhlIHJlZ3Jlc3Npb24uCisKK1NvIGlmIHlvdSB1c2VkICJnaXQgYmlzZWN0IHNraXAiIChvciB0aGUgcnVuIHNjcmlwdCBleGl0ZWQgd2l0aAorc3BlY2lhbCBjb2RlIDEyNSkgeW91IGNvdWxkIGdldCBhIHJlc3VsdCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSBvbmx5ICdza2lwJ3BlZCBjb21taXRzIGxlZnQgdG8gdGVzdC4KK1RoZSBmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZjoKKzE1NzIyZjJmYTMyOGVhYmE5NzAyMjg5OGEzMDVmZmM4MTcyZGI2YjEKKzc4ZTg2Y2YzZTg1MGJkNzU1YmI3MTgzMWY0MmUyMDA2MjZmYmQxZTAKK2UxNWI3M2FkM2RiOWI0OGQ3ZDFhZGUzMmY4Y2QyM2E3NTFmZTBhY2UKKzA3MGVhYjIzMDMwMjQ3MDZmMjkyNDgyMmJmZWM4Yjk4NDdlNGFjMWIKK1dlIGNhbm5vdCBiaXNlY3QgbW9yZSEKKy0tLS0tLS0tLS0tLS0KKworU2F2aW5nIGEgbG9nIGFuZCByZXBsYXlpbmcgaXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSB3YW50IHRvIHNob3cgb3RoZXIgcGVvcGxlIHlvdXIgYmlzZWN0aW9uIHByb2Nlc3MsIHlvdSBjYW4gZ2V0IGEKK2xvZyB1c2luZyBmb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGxvZyA+IGJpc2VjdF9sb2cudHh0CistLS0tLS0tLS0tLS0tCisKK0FuZCBpdCBpcyBwb3NzaWJsZSB0byByZXBsYXkgaXQgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXBsYXkgYmlzZWN0X2xvZy50eHQKKy0tLS0tLS0tLS0tLS0KKworCisiZ2l0IGJpc2VjdCIgZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmlzZWN0aW9uIGFsZ29yaXRobQorfn5+fn5+fn5+fn5+fn5+fn5+fgorCitBcyB0aGUgR2l0IGNvbW1pdHMgZm9ybSBhIGRpcmVjdGVkIGFjeWNsaWMgZ3JhcGggKERBRyksIGZpbmRpbmcgdGhlCitiZXN0IGJpc2VjdGlvbiBjb21taXQgdG8gdGVzdCBhdCBlYWNoIHN0ZXAgaXMgbm90IHNvIHNpbXBsZS4gQW55d2F5CitMaW51cyBmb3VuZCBhbmQgaW1wbGVtZW50ZWQgYSAidHJ1bHkgc3R1cGlkIiBhbGdvcml0aG0sIGxhdGVyIGltcHJvdmVkCitieSBKdW5pbyBIYW1hbm8sIHRoYXQgd29ya3MgcXVpdGUgd2VsbC4KKworU28gdGhlIGFsZ29yaXRobSB1c2VkIGJ5ICJnaXQgYmlzZWN0IiB0byBmaW5kIHRoZSBiZXN0IGJpc2VjdGlvbgorY29tbWl0IHdoZW4gdGhlcmUgYXJlIG5vIHNraXBwZWQgY29tbWl0cyBpcyB0aGUgZm9sbG93aW5nOgorCisxKSBrZWVwIG9ubHkgdGhlIGNvbW1pdHMgdGhhdDoKKworYSkgYXJlIGFuY2VzdG9yIG9mIHRoZSAiYmFkIiBjb21taXQgKGluY2x1ZGluZyB0aGUgImJhZCIgY29tbWl0IGl0c2VsZiksCitiKSBhcmUgbm90IGFuY2VzdG9yIG9mIGEgImdvb2QiIGNvbW1pdCAoZXhjbHVkaW5nIHRoZSAiZ29vZCIgY29tbWl0cykuCisKK1RoaXMgbWVhbnMgdGhhdCB3ZSBnZXQgcmlkIG9mIHRoZSB1bmludGVyZXN0aW5nIGNvbW1pdHMgaW4gdGhlIERBRy4KKworRm9yIGV4YW1wbGUgaWYgd2Ugc3RhcnQgd2l0aCBhIGdyYXBoIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorRy1ZLUctVy1XLVctWC1YLVgtWAorCSAgIFwgLworCSAgICBXLVctQgorCSAgIC8KK1ktLS1HLVctLS1XCisgXCAvICAgXAorWS1ZICAgICBYLVgtWC1YCisKKy0+IHRpbWUgZ29lcyB0aGlzIHdheSAtPgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBCIGlzIHRoZSAiYmFkIiBjb21taXQsICJHIiBhcmUgImdvb2QiIGNvbW1pdHMgYW5kIFcsIFgsIGFuZCBZCithcmUgb3RoZXIgY29tbWl0cywgd2Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBncmFwaCBhZnRlciB0aGlzIGZpcnN0CitzdGVwOgorCistLS0tLS0tLS0tLS0tCitXLVctVworICAgICBcCisgICAgICBXLVctQgorICAgICAvCitXLS0tVworLS0tLS0tLS0tLS0tLQorCitTbyBvbmx5IHRoZSBXIGFuZCBCIGNvbW1pdHMgd2lsbCBiZSBrZXB0LiBCZWNhdXNlIGNvbW1pdHMgWCBhbmQgWSB3aWxsCitoYXZlIGJlZW4gcmVtb3ZlZCBieSBydWxlcyBhKSBhbmQgYikgcmVzcGVjdGl2ZWx5LCBhbmQgYmVjYXVzZSBjb21taXRzCitHIGFyZSByZW1vdmVkIGJ5IHJ1bGUgYikgdG9vLgorCitOb3RlIGZvciBHaXQgdXNlcnMsIHRoYXQgaXQgaXMgZXF1aXZhbGVudCBhcyBrZWVwaW5nIG9ubHkgdGhlIGNvbW1pdAorZ2l2ZW4gYnk6CisKKy0tLS0tLS0tLS0tLS0KK2dpdCByZXYtbGlzdCBCQUQgLS1ub3QgR09PRDEgR09PRDIuLi4KKy0tLS0tLS0tLS0tLS0KKworQWxzbyBub3RlIHRoYXQgd2UgZG9uJ3QgcmVxdWlyZSB0aGUgY29tbWl0cyB0aGF0IGFyZSBrZXB0IHRvIGJlCitkZXNjZW5kYW50cyBvZiBhICJnb29kIiBjb21taXQuIFNvIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgY29tbWl0cyBXCithbmQgWiB3aWxsIGJlIGtlcHQ6CisKKy0tLS0tLS0tLS0tLS0KK0ctVy1XLVctQgorICAgLworWi1aCistLS0tLS0tLS0tLS0tCisKKzIpIHN0YXJ0aW5nIGZyb20gdGhlICJnb29kIiBlbmRzIG9mIHRoZSBncmFwaCwgYXNzb2NpYXRlIHRvIGVhY2gKK2NvbW1pdCB0aGUgbnVtYmVyIG9mIGFuY2VzdG9ycyBpdCBoYXMgcGx1cyBvbmUKKworRm9yIGV4YW1wbGUgd2l0aCB0aGUgZm9sbG93aW5nIGdyYXBoIHdoZXJlIEggaXMgdGhlICJiYWQiIGNvbW1pdCBhbmQgQQorYW5kIEQgYXJlIHNvbWUgcGFyZW50cyBvZiBzb21lICJnb29kIiBjb21taXRzOgorCistLS0tLS0tLS0tLS0tCitBLUItQworICAgICBcCisgICAgICBGLUctSAorICAgICAvCitELS0tRQorLS0tLS0tLS0tLS0tLQorCit0aGlzIHdpbGwgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorMSAyIDMKK0EtQi1DCisgICAgIFw2IDcgOAorICAgICAgRi1HLUgKKzEgICAyLworRC0tLUUKKy0tLS0tLS0tLS0tLS0KKworMykgYXNzb2NpYXRlIHRvIGVhY2ggY29tbWl0OiBtaW4oWCwgTiAtIFgpCisKK3doZXJlIFggaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gdGhlIGNvbW1pdCBpbiBzdGVwIDIpIGFuZCBOIGlzIHRoZQordG90YWwgbnVtYmVyIG9mIGNvbW1pdHMgaW4gdGhlIGdyYXBoLgorCitJbiB0aGUgYWJvdmUgZXhhbXBsZSB3ZSBoYXZlIE4gPSA4LCBzbyB0aGlzIHdpbGwgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorMSAyIDMKK0EtQi1DCisgICAgIFwyIDEgMAorICAgICAgRi1HLUgKKzEgICAyLworRC0tLUUKKy0tLS0tLS0tLS0tLS0KKworNCkgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50IGlzIHRoZSBjb21taXQgd2l0aCB0aGUgaGlnaGVzdCBhc3NvY2lhdGVkCitudW1iZXIKKworU28gaW4gdGhlIGFib3ZlIGV4YW1wbGUgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50IGlzIGNvbW1pdCBDLgorCis1KSBub3RlIHRoYXQgc29tZSBzaG9ydGN1dHMgYXJlIGltcGxlbWVudGVkIHRvIHNwZWVkIHVwIHRoZSBhbGdvcml0aG0KKworQXMgd2Uga25vdyBOIGZyb20gdGhlIGJlZ2lubmluZywgd2Uga25vdyB0aGF0IG1pbihYLCBOIC0gWCkgY2FuJ3QgYmUKK2dyZWF0ZXIgdGhhbiBOLzIuIFNvIGR1cmluZyBzdGVwcyAyKSBhbmQgMyksIGlmIHdlIHdvdWxkIGFzc29jaWF0ZSBOLzIKK3RvIGEgY29tbWl0LCB0aGVuIHdlIGtub3cgdGhpcyBpcyB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnQuIFNvIGluIHRoaXMKK2Nhc2Ugd2UgY2FuIGp1c3Qgc3RvcCBwcm9jZXNzaW5nIGFueSBvdGhlciBjb21taXQgYW5kIHJldHVybiB0aGUKK2N1cnJlbnQgY29tbWl0LgorCitCaXNlY3Rpb24gYWxnb3JpdGhtIGRlYnVnZ2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRm9yIGFueSBjb21taXQgZ3JhcGgsIHlvdSBjYW4gc2VlIHRoZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2gKK2NvbW1pdCB1c2luZyAiZ2l0IHJldi1saXN0IC0tYmlzZWN0LWFsbCIuCisKK0ZvciBleGFtcGxlLCBmb3IgdGhlIGFib3ZlIGdyYXBoLCBhIGNvbW1hbmQgbGlrZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LWxpc3QgLS1iaXNlY3QtYWxsIEJBRCAtLW5vdCBHT09EMSBHT09EMgorLS0tLS0tLS0tLS0tLQorCit3b3VsZCBvdXRwdXQgc29tZXRoaW5nIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0KK2UxNWI3M2FkM2RiOWI0OGQ3ZDFhZGUzMmY4Y2QyM2E3NTFmZTBhY2UgKGRpc3Q9MykKKzE1NzIyZjJmYTMyOGVhYmE5NzAyMjg5OGEzMDVmZmM4MTcyZGI2YjEgKGRpc3Q9MikKKzc4ZTg2Y2YzZTg1MGJkNzU1YmI3MTgzMWY0MmUyMDA2MjZmYmQxZTAgKGRpc3Q9MikKK2ExOTM5ZDlhMTQyZGU5NzIwOTRhZjRkZGU5YTU0NGU1NzdkZGVmMGUgKGRpc3Q9MikKKzA3MGVhYjIzMDMwMjQ3MDZmMjkyNDgyMmJmZWM4Yjk4NDdlNGFjMWIgKGRpc3Q9MSkKK2EzODY0ZDRmMzJhM2JmNWVkMTc3ZGRlZjU5ODQ5MGEwODc2MGI3MGQgKGRpc3Q9MSkKK2E0MWJhYTcxN2RkNzRmMTE4MGFiZjU1ZTkzNDFiYzdhMGJiOWQ1NTYgKGRpc3Q9MSkKKzllNjIyYTZkYWQ0MDNiNzFjNDA5Nzk3NDNiYjlkNWJlMTdiMTZiZDYgKGRpc3Q9MCkKKy0tLS0tLS0tLS0tLS0KKworQmlzZWN0aW9uIGFsZ29yaXRobSBkaXNjdXNzZWQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0IGxldCdzIGRlZmluZSAiYmVzdCBiaXNlY3Rpb24gcG9pbnQiLiBXZSB3aWxsIHNheSB0aGF0IGEgY29tbWl0IFgKK2lzIGEgYmVzdCBiaXNlY3Rpb24gcG9pbnQgb3IgYSBiZXN0IGJpc2VjdGlvbiBjb21taXQgaWYga25vd2luZyBpdHMKK3N0YXRlICgiZ29vZCIgb3IgImJhZCIpIGdpdmVzIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUgd2hldGhlcgordGhlIHN0YXRlIG9mIHRoZSBjb21taXQgaGFwcGVucyB0byBiZSAiZ29vZCIgb3IgImJhZCIuCisKK1RoaXMgbWVhbnMgdGhhdCB0aGUgYmVzdCBiaXNlY3Rpb24gY29tbWl0cyBhcmUgdGhlIGNvbW1pdHMgd2hlcmUgdGhlCitmb2xsb3dpbmcgZnVuY3Rpb24gaXMgbWF4aW11bToKKworLS0tLS0tLS0tLS0tLQorZihYKSA9IG1pbihpbmZvcm1hdGlvbl9pZl9nb29kKFgpLCBpbmZvcm1hdGlvbl9pZl9iYWQoWCkpCistLS0tLS0tLS0tLS0tCisKK3doZXJlIGluZm9ybWF0aW9uX2lmX2dvb2QoWCkgaXMgdGhlIGluZm9ybWF0aW9uIHdlIGdldCBpZiBYIGlzIGdvb2QKK2FuZCBpbmZvcm1hdGlvbl9pZl9iYWQoWCkgaXMgdGhlIGluZm9ybWF0aW9uIHdlIGdldCBpZiBYIGlzIGJhZC4KKworTm93IHdlIHdpbGwgc3VwcG9zZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lICJmaXJzdCBiYWQgY29tbWl0Ii4gVGhpcworbWVhbnMgdGhhdCBhbGwgaXRzIGRlc2NlbmRhbnRzIGFyZSAiYmFkIiBhbmQgYWxsIHRoZSBvdGhlciBjb21taXRzIGFyZQorImdvb2QiLiBBbmQgd2Ugd2lsbCBzdXBwb3NlIHRoYXQgYWxsIGNvbW1pdHMgaGF2ZSBhbiBlcXVhbCBwcm9iYWJpbGl0eQorb2YgYmVpbmcgZ29vZCBvciBiYWQsIG9yIG9mIGJlaW5nIHRoZSBmaXJzdCBiYWQgY29tbWl0LCBzbyBrbm93aW5nIHRoZQorc3RhdGUgb2YgYyBjb21taXRzIGdpdmVzIGFsd2F5cyB0aGUgc2FtZSBhbW91bnQgb2YgaW5mb3JtYXRpb24KK3doZXJldmVyIHRoZXNlIGMgY29tbWl0cyBhcmUgb24gdGhlIGdyYXBoIGFuZCB3aGF0ZXZlciBjIGlzLiAoU28gd2UKK3N1cHBvc2UgdGhhdCB0aGVzZSBjb21taXRzIGJlaW5nIGZvciBleGFtcGxlIG9uIGEgYnJhbmNoIG9yIG5lYXIgYQorZ29vZCBvciBhIGJhZCBjb21taXQgZG9lcyBub3QgZ2l2ZSBtb3JlIG9yIGxlc3MgaW5mb3JtYXRpb24pLgorCitMZXQncyBhbHNvIHN1cHBvc2UgdGhhdCB3ZSBoYXZlIGEgY2xlYW5lZCB1cCBncmFwaCBsaWtlIG9uZSBhZnRlciBzdGVwCisxKSBpbiB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSBhYm92ZS4gVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBtZWFzdXJlCit0aGUgaW5mb3JtYXRpb24gd2UgZ2V0IGluIHRlcm1zIG9mIG51bWJlciBvZiBjb21taXQgd2UgY2FuIHJlbW92ZSBmcm9tCit0aGUgZ3JhcGguLgorCitBbmQgbGV0J3MgdGFrZSBhIGNvbW1pdCBYIGluIHRoZSBncmFwaC4KKworSWYgWCBpcyBmb3VuZCB0byBiZSAiZ29vZCIsIHRoZW4gd2Uga25vdyB0aGF0IGl0cyBhbmNlc3RvcnMgYXJlIGFsbAorImdvb2QiLCBzbyB3ZSB3YW50IHRvIHNheSB0aGF0OgorCistLS0tLS0tLS0tLS0tCitpbmZvcm1hdGlvbl9pZl9nb29kKFgpID0gbnVtYmVyX29mX2FuY2VzdG9ycyhYKSAgKFRSVUUpCistLS0tLS0tLS0tLS0tCisKK0FuZCB0aGlzIGlzIHRydWUgYmVjYXVzZSBhdCBzdGVwIDEpIGIpIHdlIHJlbW92ZSB0aGUgYW5jZXN0b3JzIG9mIHRoZQorImdvb2QiIGNvbW1pdHMuCisKK0lmIFggaXMgZm91bmQgdG8gYmUgImJhZCIsIHRoZW4gd2Uga25vdyB0aGF0IGl0cyBkZXNjZW5kYW50cyBhcmUgYWxsCisiYmFkIiwgc28gd2Ugd2FudCB0byBzYXkgdGhhdDoKKworLS0tLS0tLS0tLS0tLQoraW5mb3JtYXRpb25faWZfYmFkKFgpID0gbnVtYmVyX29mX2Rlc2NlbmRhbnRzKFgpICAoV1JPTkcpCistLS0tLS0tLS0tLS0tCisKK0J1dCB0aGlzIGlzIHdyb25nIGJlY2F1c2UgYXQgc3RlcCAxKSBhKSB3ZSBrZWVwIG9ubHkgdGhlIGFuY2VzdG9ycyBvZgordGhlIGJhZCBjb21taXQuIFNvIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIHdoZW4gYSBjb21taXQgaXMgbWFya2VkIGFzCisiYmFkIiwgYmVjYXVzZSB3ZSBhbHNvIGtub3cgdGhhdCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBwcmV2aW91cyAiYmFkIgorY29tbWl0IHRoYXQgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIG5ldyAiYmFkIiBjb21taXQgYXJlIG5vdCB0aGUKK2ZpcnN0IGJhZCBjb21taXQuIFdlIGRvbid0IGtub3cgaWYgdGhleSBhcmUgZ29vZCBvciBiYWQsIGJ1dCB3ZSBrbm93Cit0aGF0IHRoZXkgYXJlIG5vdCB0aGUgZmlyc3QgYmFkIGNvbW1pdCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhbmNlc3Rvcgorb2YgdGhlIG5ldyAiYmFkIiBjb21taXQuCisKK1NvIHdoZW4gYSBjb21taXQgaXMgbWFya2VkIGFzICJiYWQiIHdlIGtub3cgd2UgY2FuIHJlbW92ZSBhbGwgdGhlCitjb21taXRzIGluIHRoZSBncmFwaCBleGNlcHQgdGhvc2UgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIHRoZSBuZXcgImJhZCIKK2NvbW1pdC4gVGhpcyBtZWFucyB0aGF0OgorCistLS0tLS0tLS0tLS0tCitpbmZvcm1hdGlvbl9pZl9iYWQoWCkgPSBOIC0gbnVtYmVyX29mX2FuY2VzdG9ycyhYKSAgKFRSVUUpCistLS0tLS0tLS0tLS0tCisKK3doZXJlIE4gaXMgdGhlIG51bWJlciBvZiBjb21taXRzIGluIHRoZSAoY2xlYW5lZCB1cCkgZ3JhcGguCisKK1NvIGluIHRoZSBlbmQgdGhpcyBtZWFucyB0aGF0IHRvIGZpbmQgdGhlIGJlc3QgYmlzZWN0aW9uIGNvbW1pdHMgd2UKK3Nob3VsZCBtYXhpbWl6ZSB0aGUgZnVuY3Rpb246CisKKy0tLS0tLS0tLS0tLS0KK2YoWCkgPSBtaW4obnVtYmVyX29mX2FuY2VzdG9ycyhYKSwgTiAtIG51bWJlcl9vZl9hbmNlc3RvcnMoWCkpCistLS0tLS0tLS0tLS0tCisKK0FuZCB0aGlzIGlzIG5pY2UgYmVjYXVzZSBhdCBzdGVwIDIpIHdlIGNvbXB1dGUgbnVtYmVyX29mX2FuY2VzdG9ycyhYKQorYW5kIHNvIGF0IHN0ZXAgMykgd2UgY29tcHV0ZSBmKFgpLgorCitMZXQncyB0YWtlIHRoZSBmb2xsb3dpbmcgZ3JhcGggYXMgYW4gZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgRy1ILUktSgorICAgICAgICAgICAvICAgICAgIFwKK0EtQi1DLUQtRS1GICAgICAgICAgTworICAgICAgICAgICBcICAgICAgIC8KKyAgICAgICAgICAgIEstTC1NLU4KKy0tLS0tLS0tLS0tLS0KKworSWYgd2UgY29tcHV0ZSB0aGUgZm9sbG93aW5nIG5vbiBvcHRpbWFsIGZ1bmN0aW9uIG9uIGl0OgorCistLS0tLS0tLS0tLS0tCitnKFgpID0gbWluKG51bWJlcl9vZl9hbmNlc3RvcnMoWCksIG51bWJlcl9vZl9kZXNjZW5kYW50cyhYKSkKKy0tLS0tLS0tLS0tLS0KKword2UgZ2V0OgorCistLS0tLS0tLS0tLS0tCisgICAgICAgICAgICA0IDMgMiAxCisgICAgICAgICAgICBHLUgtSS1KCisxIDIgMyA0IDUgNi8gICAgICAgXDAKK0EtQi1DLUQtRS1GICAgICAgICAgTworICAgICAgICAgICBcICAgICAgIC8KKyAgICAgICAgICAgIEstTC1NLU4KKyAgICAgICAgICAgIDQgMyAyIDEKKy0tLS0tLS0tLS0tLS0KKworYnV0IHdpdGggdGhlIGFsZ29yaXRobSB1c2VkIGJ5IGdpdCBiaXNlY3Qgd2UgZ2V0OgorCistLS0tLS0tLS0tLS0tCisgICAgICAgICAgICA3IDcgNiA1CisgICAgICAgICAgICBHLUgtSS1KCisxIDIgMyA0IDUgNi8gICAgICAgXDAKK0EtQi1DLUQtRS1GICAgICAgICAgTworICAgICAgICAgICBcICAgICAgIC8KKyAgICAgICAgICAgIEstTC1NLU4KKyAgICAgICAgICAgIDcgNyA2IDUKKy0tLS0tLS0tLS0tLS0KKworU28gd2UgY2hvc2UgRywgSCwgSyBvciBMIGFzIHRoZSBiZXN0IGJpc2VjdGlvbiBwb2ludCwgd2hpY2ggaXMgYmV0dGVyCit0aGFuIEYuIEJlY2F1c2UgaWYgZm9yIGV4YW1wbGUgTCBpcyBiYWQsIHRoZW4gd2Ugd2lsbCBrbm93IG5vdCBvbmx5Cit0aGF0IEwsIE0gYW5kIE4gYXJlIGJhZCBidXQgYWxzbyB0aGF0IEcsIEgsIEkgYW5kIEogYXJlIG5vdCB0aGUgZmlyc3QKK2JhZCBjb21taXQgKHNpbmNlIHdlIHN1cHBvc2UgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaXJzdCBiYWQgY29tbWl0CithbmQgaXQgbXVzdCBiZSBhbiBhbmNlc3RvciBvZiBMKS4KKworU28gdGhlIGN1cnJlbnQgYWxnb3JpdGhtIHNlZW1zIHRvIGJlIHRoZSBiZXN0IHBvc3NpYmxlIGdpdmVuIHdoYXQgd2UKK2luaXRpYWxseSBzdXBwb3NlZC4KKworU2tpcCBhbGdvcml0aG0KK35+fn5+fn5+fn5+fn5+CisKK1doZW4gc29tZSBjb21taXRzIGhhdmUgYmVlbiBza2lwcGVkICh1c2luZyAiZ2l0IGJpc2VjdCBza2lwIiksIHRoZW4KK3RoZSBiaXNlY3Rpb24gYWxnb3JpdGhtIGlzIHRoZSBzYW1lIGZvciBzdGVwIDEpIHRvIDMpLiBCdXQgdGhlbiB3ZSB1c2UKK3JvdWdobHkgdGhlIGZvbGxvd2luZyBzdGVwczoKKworNikgc29ydCB0aGUgY29tbWl0IGJ5IGRlY3JlYXNpbmcgYXNzb2NpYXRlZCB2YWx1ZQorCis3KSBpZiB0aGUgZmlyc3QgY29tbWl0IGhhcyBub3QgYmVlbiBza2lwcGVkLCB3ZSBjYW4gcmV0dXJuIGl0IGFuZCBzdG9wCitoZXJlCisKKzgpIG90aGVyd2lzZSBmaWx0ZXIgb3V0IGFsbCB0aGUgc2tpcHBlZCBjb21taXRzIGluIHRoZSBzb3J0ZWQgbGlzdAorCis5KSB1c2UgYSBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFBSTkcpIHRvIGdlbmVyYXRlIGEgcmFuZG9tCitudW1iZXIgYmV0d2VlbiAwIGFuZCAxCisKKzEwKSBtdWx0aXBseSB0aGlzIHJhbmRvbSBudW1iZXIgd2l0aCBpdHMgc3F1YXJlIHJvb3QgdG8gYmlhcyBpdCB0b3dhcmQKKzAKKworMTEpIG11bHRpcGx5IHRoZSByZXN1bHQgYnkgdGhlIG51bWJlciBvZiBjb21taXRzIGluIHRoZSBmaWx0ZXJlZCBsaXN0Cit0byBnZXQgYW4gaW5kZXggaW50byB0aGlzIGxpc3QKKworMTIpIHJldHVybiB0aGUgY29tbWl0IGF0IHRoZSBjb21wdXRlZCBpbmRleAorCitTa2lwIGFsZ29yaXRobSBkaXNjdXNzZWQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBZnRlciBzdGVwIDcpIChpbiB0aGUgc2tpcCBhbGdvcml0aG0pLCB3ZSBjb3VsZCBjaGVjayBpZiB0aGUgc2Vjb25kCitjb21taXQgaGFzIGJlZW4gc2tpcHBlZCBhbmQgcmV0dXJuIGl0IGlmIGl0IGlzIG5vdCB0aGUgY2FzZS4gQW5kIGluCitmYWN0IHRoYXQgd2FzIHRoZSBhbGdvcml0aG0gd2UgdXNlZCBmcm9tIHdoZW4gImdpdCBiaXNlY3Qgc2tpcCIgd2FzCitkZXZlbG9wZWQgaW4gR2l0IHZlcnNpb24gMS41LjQgKHJlbGVhc2VkIG9uIEZlYnJ1YXJ5IDFzdCAyMDA4KSB1bnRpbAorR2l0IHZlcnNpb24gMS42LjQgKHJlbGVhc2VkIEp1bHkgMjl0aCAyMDA5KS4KKworQnV0IEluZ28gTW9sbmFyIGFuZCBILiBQZXRlciBBbnZpbiAoYW5vdGhlciB3ZWxsIGtub3duIGxpbnV4IGtlcm5lbAorZGV2ZWxvcGVyKSBib3RoIGNvbXBsYWluZWQgdGhhdCBzb21ldGltZXMgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50cworYWxsIGhhcHBlbmVkIHRvIGJlIGluIGFuIGFyZWEgd2hlcmUgYWxsIHRoZSBjb21taXRzIGFyZQordW50ZXN0YWJsZS4gQW5kIGluIHRoaXMgY2FzZSB0aGUgdXNlciB3YXMgYXNrZWQgdG8gdGVzdCBtYW55Cit1bnRlc3RhYmxlIGNvbW1pdHMsIHdoaWNoIGNvdWxkIGJlIHZlcnkgaW5lZmZpY2llbnQuCisKK0luZGVlZCB1bnRlc3RhYmxlIGNvbW1pdHMgYXJlIG9mdGVuIHVudGVzdGFibGUgYmVjYXVzZSBhIGJyZWFrYWdlIHdhcworaW50cm9kdWNlZCBhdCBvbmUgdGltZSwgYW5kIHRoYXQgYnJlYWthZ2Ugd2FzIGZpeGVkIG9ubHkgYWZ0ZXIgbWFueQorb3RoZXIgY29tbWl0cyB3ZXJlIGludHJvZHVjZWQuCisKK1RoaXMgYnJlYWthZ2UgaXMgb2YgY291cnNlIG1vc3Qgb2YgdGhlIHRpbWUgdW5yZWxhdGVkIHRvIHRoZSBicmVha2FnZQord2UgYXJlIHRyeWluZyB0byBsb2NhdGUgaW4gdGhlIGNvbW1pdCBncmFwaC4gQnV0IGl0IHByZXZlbnRzIHVzIHRvCitrbm93IGlmIHRoZSBpbnRlcmVzdGluZyAiYmFkIGJlaGF2aW9yIiBpcyBwcmVzZW50IG9yIG5vdC4KKworU28gaXQgaXMgYSBmYWN0IHRoYXQgY29tbWl0cyBuZWFyIGFuIHVudGVzdGFibGUgY29tbWl0IGhhdmUgYSBoaWdoCitwcm9iYWJpbGl0eSBvZiBiZWluZyB1bnRlc3RhYmxlIHRoZW1zZWx2ZXMuIEFuZCB0aGUgYmVzdCBiaXNlY3Rpb24KK2NvbW1pdHMgYXJlIG9mdGVuIGZvdW5kIHRvZ2V0aGVyIHRvbyAoZHVlIHRvIHRoZSBiaXNlY3Rpb24gYWxnb3JpdGhtKS4KKworVGhpcyBpcyB3aHkgaXQgaXMgYSBiYWQgaWRlYSB0byBqdXN0IGNob3NlIHRoZSBuZXh0IGJlc3QgdW5za2lwcGVkCitiaXNlY3Rpb24gY29tbWl0IHdoZW4gdGhlIGZpcnN0IG9uZSBoYXMgYmVlbiBza2lwcGVkLgorCitXZSBmb3VuZCB0aGF0IG1vc3QgY29tbWl0cyBvbiB0aGUgZ3JhcGggbWF5IGdpdmUgcXVpdGUgYSBsb3Qgb2YKK2luZm9ybWF0aW9uIHdoZW4gdGhleSBhcmUgdGVzdGVkLiBBbmQgdGhlIGNvbW1pdHMgdGhhdCB3aWxsIG5vdCBvbgorYXZlcmFnZSBnaXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIGFyZSB0aGUgb25lIG5lYXIgdGhlIGdvb2QgYW5kIGJhZAorY29tbWl0cy4KKworU28gdXNpbmcgYSBQUk5HIHdpdGggYSBiaWFzIHRvIGZhdm9yIGNvbW1pdHMgYXdheSBmcm9tIHRoZSBnb29kIGFuZAorYmFkIGNvbW1pdHMgbG9va2VkIGxpa2UgYSBnb29kIGNob2ljZS4KKworT25lIG9idmlvdXMgaW1wcm92ZW1lbnQgdG8gdGhpcyBhbGdvcml0aG0gd291bGQgYmUgdG8gbG9vayBmb3IgYQorY29tbWl0IHRoYXQgaGFzIGFuIGFzc29jaWF0ZWQgdmFsdWUgbmVhciB0aGUgb25lIG9mIHRoZSBiZXN0IGJpc2VjdGlvbgorY29tbWl0LCBhbmQgdGhhdCBpcyBvbiBhbm90aGVyIGJyYW5jaCwgYmVmb3JlIHVzaW5nIHRoZSBQUk5HLiBCZWNhdXNlCitpZiBzdWNoIGEgY29tbWl0IGV4aXN0cywgdGhlbiBpdCBpcyBub3QgdmVyeSBsaWtlbHkgdG8gYmUgdW50ZXN0YWJsZQordG9vLCBzbyBpdCB3aWxsIHByb2JhYmx5IGdpdmUgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIGEgbmVhcmx5IHJhbmRvbWx5CitjaG9zZW4gb25lLgorCitDaGVja2luZyBtZXJnZSBiYXNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlcmUgaXMgYW5vdGhlciB0d2VhayBpbiB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSB0aGF0IGhhcyBub3QgYmVlbgorZGVzY3JpYmVkIGluIHRoZSAiYmlzZWN0aW9uIGFsZ29yaXRobSIgYWJvdmUuCisKK1dlIHN1cHBvc2VkIGluIHRoZSBwcmV2aW91cyBleGFtcGxlcyB0aGF0IHRoZSAiZ29vZCIgY29tbWl0cyB3ZXJlCithbmNlc3RvcnMgb2YgdGhlICJiYWQiIGNvbW1pdC4gQnV0IHRoaXMgaXMgbm90IGEgcmVxdWlyZW1lbnQgb2YgImdpdAorYmlzZWN0Ii4KKworT2YgY291cnNlIHRoZSAiYmFkIiBjb21taXQgY2Fubm90IGJlIGFuIGFuY2VzdG9yIG9mIGEgImdvb2QiIGNvbW1pdCwKK2JlY2F1c2UgdGhlIGFuY2VzdG9ycyBvZiB0aGUgZ29vZCBjb21taXRzIGFyZSBzdXBwb3NlZCB0byBiZQorImdvb2QiLiBBbmQgYWxsIHRoZSAiZ29vZCIgY29tbWl0cyBtdXN0IGJlIHJlbGF0ZWQgdG8gdGhlIGJhZCBjb21taXQuCitUaGV5IGNhbm5vdCBiZSBvbiBhIGJyYW5jaCB0aGF0IGhhcyBubyBsaW5rIHdpdGggdGhlIGJyYW5jaCBvZiB0aGUKKyJiYWQiIGNvbW1pdC4gQnV0IGl0IGlzIHBvc3NpYmxlIGZvciBhIGdvb2QgY29tbWl0IHRvIGJlIHJlbGF0ZWQgdG8gYQorYmFkIGNvbW1pdCBhbmQgeWV0IG5vdCBiZSBuZWl0aGVyIG9uZSBvZiBpdHMgYW5jZXN0b3Igbm9yIG9uZSBvZiBpdHMKK2Rlc2NlbmRhbnRzLgorCitGb3IgZXhhbXBsZSwgdGhlcmUgY2FuIGJlIGEgIm1haW4iIGJyYW5jaCwgYW5kIGEgImRldiIgYnJhbmNoIHRoYXQgd2FzCitmb3JrZWQgb2YgdGhlIG1haW4gYnJhbmNoIGF0IGEgY29tbWl0IG5hbWVkICJEIiBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0KK0EtQi1DLUQtRS1GLUcgIDwtLW1haW4KKyAgICAgICBcCisgICAgICAgIEgtSS1KICA8LS1kZXYKKy0tLS0tLS0tLS0tLS0KKworVGhlIGNvbW1pdCAiRCIgaXMgY2FsbGVkIGEgIm1lcmdlIGJhc2UiIGZvciBicmFuY2ggIm1haW4iIGFuZCAiZGV2IgorYmVjYXVzZSBpdCdzIHRoZSBiZXN0IGNvbW1vbiBhbmNlc3RvciBmb3IgdGhlc2UgYnJhbmNoZXMgZm9yIGEgbWVyZ2UuCisKK05vdyBsZXQncyBzdXBwb3NlIHRoYXQgY29tbWl0IEogaXMgYmFkIGFuZCBjb21taXQgRyBpcyBnb29kIGFuZCB0aGF0Cit3ZSBhcHBseSB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSBsaWtlIGl0IGhhcyBiZWVuIHByZXZpb3VzbHkKK2Rlc2NyaWJlZC4KKworQXMgZGVzY3JpYmVkIGluIHN0ZXAgMSkgYikgb2YgdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0sIHdlIHJlbW92ZSBhbGwKK3RoZSBhbmNlc3RvcnMgb2YgdGhlIGdvb2QgY29tbWl0cyBiZWNhdXNlIHRoZXkgYXJlIHN1cHBvc2VkIHRvIGJlIGdvb2QKK3Rvby4KKworU28gd2Ugd291bGQgYmUgbGVmdCB3aXRoIG9ubHk6CisKKy0tLS0tLS0tLS0tLS0KK0gtSS1KCistLS0tLS0tLS0tLS0tCisKK0J1dCB3aGF0IGhhcHBlbnMgaWYgdGhlIGZpcnN0IGJhZCBjb21taXQgaXMgIkIiIGFuZCBpZiBpdCBoYXMgYmVlbgorZml4ZWQgaW4gdGhlICJtYWluIiBicmFuY2ggYnkgY29tbWl0ICJGIj8KKworVGhlIHJlc3VsdCBvZiBzdWNoIGEgYmlzZWN0aW9uIHdvdWxkIGJlIHRoYXQgd2Ugd291bGQgZmluZCB0aGF0IEggaXMKK3RoZSBmaXJzdCBiYWQgY29tbWl0LCB3aGVuIGluIGZhY3QgaXQncyBCLiBTbyB0aGF0IHdvdWxkIGJlIHdyb25nIQorCitBbmQgeWVzIGl0IGNhbiBoYXBwZW4gaW4gcHJhY3RpY2UgdGhhdCBwZW9wbGUgd29ya2luZyBvbiBvbmUgYnJhbmNoCithcmUgbm90IGF3YXJlIHRoYXQgcGVvcGxlIHdvcmtpbmcgb24gYW5vdGhlciBicmFuY2ggZml4ZWQgYSBidWchIEl0Citjb3VsZCBhbHNvIGhhcHBlbiB0aGF0IEYgZml4ZWQgbW9yZSB0aGFuIG9uZSBidWcgb3IgdGhhdCBpdCBpcyBhCityZXZlcnQgb2Ygc29tZSBiaWcgZGV2ZWxvcG1lbnQgZWZmb3J0IHRoYXQgd2FzIG5vdCByZWFkeSB0byBiZQorcmVsZWFzZWQuCisKK0luIGZhY3QgZGV2ZWxvcG1lbnQgdGVhbXMgb2Z0ZW4gbWFpbnRhaW4gYm90aCBhIGRldmVsb3BtZW50IGJyYW5jaCBhbmQKK2EgbWFpbnRlbmFuY2UgYnJhbmNoLCBhbmQgaXQgd291bGQgYmUgcXVpdGUgZWFzeSBmb3IgdGhlbSBpZiAiZ2l0CitiaXNlY3QiIGp1c3Qgd29ya2VkIHdoZW4gdGhleSB3YW50IHRvIGJpc2VjdCBhIHJlZ3Jlc3Npb24gb24gdGhlCitkZXZlbG9wbWVudCBicmFuY2ggdGhhdCBpcyBub3Qgb24gdGhlIG1haW50ZW5hbmNlIGJyYW5jaC4gVGhleSBzaG91bGQKK2JlIGFibGUgdG8gc3RhcnQgYmlzZWN0aW5nIHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgZGV2IG1haW4KKy0tLS0tLS0tLS0tLS0KKworVG8gZW5hYmxlIHRoYXQgYWRkaXRpb25hbCBuaWNlIGZlYXR1cmUsIHdoZW4gYSBiaXNlY3Rpb24gaXMgc3RhcnRlZAorYW5kIHdoZW4gc29tZSBnb29kIGNvbW1pdHMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIGJhZCBjb21taXQsIHdlCitmaXJzdCBjb21wdXRlIHRoZSBtZXJnZSBiYXNlcyBiZXR3ZWVuIHRoZSBiYWQgYW5kIHRoZSBnb29kIGNvbW1pdHMgYW5kCit3ZSBjaG9zZSB0aGVzZSBtZXJnZSBiYXNlcyBhcyB0aGUgZmlyc3QgY29tbWl0cyB0aGF0IHdpbGwgYmUgY2hlY2tlZAorb3V0IGFuZCB0ZXN0ZWQuCisKK0lmIGl0IGhhcHBlbnMgdGhhdCBvbmUgbWVyZ2UgYmFzZSBpcyBiYWQsIHRoZW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCitpcyBzdG9wcGVkIHdpdGggYSBtZXNzYWdlIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0KK1RoZSBtZXJnZSBiYXNlIEJCQkJCQiBpcyBiYWQuCitUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiBCQkJCQkIgYW5kIFtHR0dHR0csLi4uXS4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgQkJCQkJCIGlzIHRoZSBzaGExIGhhc2ggb2YgdGhlIGJhZCBtZXJnZSBiYXNlIGFuZCBbR0dHR0dHLC4uLl0KK2lzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHNoYTEgb2YgdGhlIGdvb2QgY29tbWl0cy4KKworSWYgc29tZSBvZiB0aGUgbWVyZ2UgYmFzZXMgYXJlIHNraXBwZWQsIHRoZW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCitjb250aW51ZXMsIGJ1dCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgaXMgcHJpbnRlZCBmb3IgZWFjaCBza2lwcGVkIG1lcmdlCitiYXNlOgorCistLS0tLS0tLS0tLS0tCitXYXJuaW5nOiB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuIEJCQkJCQiBhbmQgW0dHR0dHRywuLi5dIG11c3QgYmUgc2tpcHBlZC4KK1NvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCBiYWQgY29tbWl0IGlzIGJldHdlZW4gTU1NTU1NIGFuZCBCQkJCQkIuCitXZSBjb250aW51ZSBhbnl3YXkuCistLS0tLS0tLS0tLS0tCisKK3doZXJlIEJCQkJCQiBpcyB0aGUgc2hhMSBoYXNoIG9mIHRoZSBiYWQgY29tbWl0LCBNTU1NTU0gaXMgdGhlIHNoYTEKK2hhc2ggb2YgdGhlIG1lcmdlIGJhc2UgdGhhdCBpcyBza2lwcGVkIGFuZCBbR0dHR0dHLC4uLl0gIGlzIGEgY29tbWEKK3NlcGFyYXRlZCBsaXN0IG9mIHRoZSBzaGExIG9mIHRoZSBnb29kIGNvbW1pdHMuCisKK1NvIGlmIHRoZXJlIGlzIG5vIGJhZCBtZXJnZSBiYXNlLCB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgY29udGludWVzIGFzCit1c3VhbCBhZnRlciB0aGlzIHN0ZXAuCisKK0Jlc3QgYmlzZWN0aW5nIHByYWN0aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzaW5nIHRlc3Qgc3VpdGVzIGFuZCBnaXQgYmlzZWN0IHRvZ2V0aGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgYm90aCBoYXZlIGEgdGVzdCBzdWl0ZSBhbmQgdXNlIGdpdCBiaXNlY3QsIHRoZW4gaXQgYmVjb21lcyBsZXNzCitpbXBvcnRhbnQgdG8gY2hlY2sgdGhhdCBhbGwgdGVzdHMgcGFzcyBhZnRlciBlYWNoIGNvbW1pdC4gVGhvdWdoIG9mCitjb3Vyc2UgaXQgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gaGF2ZSBzb21lIGNoZWNrcyB0byBhdm9pZAorYnJlYWtpbmcgdG9vIG1hbnkgdGhpbmdzIGJlY2F1c2UgaXQgY291bGQgbWFrZSBiaXNlY3Rpbmcgb3RoZXIgYnVncworbW9yZSBkaWZmaWN1bHQuCisKK1lvdSBjYW4gZm9jdXMgeW91ciBlZmZvcnRzIHRvIGNoZWNrIGF0IGEgZmV3IHBvaW50cyAoZm9yIGV4YW1wbGUgcmMKK2FuZCBiZXRhIHJlbGVhc2VzKSB0aGF0IGFsbCB0aGUgVCB0ZXN0IGNhc2VzIHBhc3MgZm9yIGFsbCB0aGUgTgorY29uZmlndXJhdGlvbnMuIEFuZCB3aGVuIHNvbWUgdGVzdHMgZG9uJ3QgcGFzcyB5b3UgY2FuIHVzZSAiZ2l0CitiaXNlY3QiIChvciBiZXR0ZXIgImdpdCBiaXNlY3QgcnVuIikuIFNvIHlvdSBzaG91bGQgcGVyZm9ybSByb3VnaGx5OgorCistLS0tLS0tLS0tLS0tCitjICogTiAqIFQgKyBiICogTSAqIGxvZzIoTSkgdGVzdHMKKy0tLS0tLS0tLS0tLS0KKword2hlcmUgYyBpcyB0aGUgbnVtYmVyIG9mIHJvdW5kcyBvZiB0ZXN0IChzbyBhIHNtYWxsIGNvbnN0YW50KSBhbmQgYiBpcwordGhlIHJhdGlvIG9mIGJ1ZyBwZXIgY29tbWl0IChob3BlZnVsbHkgYSBzbWFsbCBjb25zdGFudCB0b28pLgorCitTbyBvZiBjb3Vyc2UgaXQncyBtdWNoIGJldHRlciBhcyBpdCdzIE8oTiAqIFQpIHZzIE8oTiAqIFQgKiBNKSBpZgoreW91IHdvdWxkIHRlc3QgZXZlcnl0aGluZyBhZnRlciBlYWNoIGNvbW1pdC4KKworVGhpcyBtZWFucyB0aGF0IHRlc3Qgc3VpdGVzIGFyZSBnb29kIHRvIHByZXZlbnQgc29tZSBidWdzIGZyb20gYmVpbmcKK2NvbW1pdHRlZCBhbmQgdGhleSBhcmUgYWxzbyBxdWl0ZSBnb29kIHRvIHRlbGwgeW91IHRoYXQgeW91IGhhdmUgc29tZQorYnVncy4gQnV0IHRoZXkgYXJlIG5vdCBzbyBnb29kIHRvIHRlbGwgeW91IHdoZXJlIHNvbWUgYnVncyBoYXZlIGJlZW4KK2ludHJvZHVjZWQuIFRvIHRlbGwgeW91IHRoYXQgZWZmaWNpZW50bHksIGdpdCBiaXNlY3QgaXMgbmVlZGVkLgorCitUaGUgb3RoZXIgbmljZSB0aGluZyB3aXRoIHRlc3Qgc3VpdGVzLCBpcyB0aGF0IHdoZW4geW91IGhhdmUgb25lLCB5b3UKK2FscmVhZHkga25vdyBob3cgdG8gdGVzdCBmb3IgYmFkIGJlaGF2aW9yLiBTbyB5b3UgY2FuIHVzZSB0aGlzCitrbm93bGVkZ2UgdG8gY3JlYXRlIGEgbmV3IHRlc3QgY2FzZSBmb3IgImdpdCBiaXNlY3QiIHdoZW4gaXQgYXBwZWFycwordGhhdCB0aGVyZSBpcyBhIHJlZ3Jlc3Npb24uIFNvIGl0IHdpbGwgYmUgZWFzaWVyIHRvIGJpc2VjdCB0aGUgYnVnIGFuZAorZml4IGl0LiBBbmQgdGhlbiB5b3UgY2FuIGFkZCB0aGUgdGVzdCBjYXNlIHlvdSBqdXN0IGNyZWF0ZWQgdG8geW91cgordGVzdCBzdWl0ZS4KKworU28gaWYgeW91IGtub3cgaG93IHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGFuZCBob3cgdG8gYmlzZWN0LCB5b3Ugd2lsbCBiZQorc3ViamVjdCB0byBhIHZpcnR1b3VzIGNpcmNsZToKKworbW9yZSB0ZXN0cyA9PiBlYXNpZXIgdG8gY3JlYXRlIHRlc3RzID0+IGVhc2llciB0byBiaXNlY3QgPT4gbW9yZSB0ZXN0cworCitTbyB0ZXN0IHN1aXRlcyBhbmQgImdpdCBiaXNlY3QiIGFyZSBjb21wbGVtZW50YXJ5IHRvb2xzIHRoYXQgYXJlIHZlcnkKK3Bvd2VyZnVsIGFuZCBlZmZpY2llbnQgd2hlbiB1c2VkIHRvZ2V0aGVyLgorCitCaXNlY3RpbmcgYnVpbGQgZmFpbHVyZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIHZlcnkgZWFzaWx5IGF1dG9tYXRpY2FsbHkgYmlzZWN0IGJyb2tlbiBidWlsZHMgdXNpbmcgc29tZXRoaW5nCitsaWtlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgQkFEIEdPT0QKKyQgZ2l0IGJpc2VjdCBydW4gbWFrZQorLS0tLS0tLS0tLS0tLQorCitQYXNzaW5nIHNoIC1jICJzb21lIGNvbW1hbmRzIiB0byAiZ2l0IGJpc2VjdCBydW4iCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcnVuIHNoIC1jICJtYWtlIHx8IGV4aXQgMTI1OyAuL215X2FwcCB8IGdyZXAgJ2dvb2Qgb3V0cHV0JyIKKy0tLS0tLS0tLS0tLS0KKworT24gdGhlIG90aGVyIGhhbmQgaWYgeW91IGRvIHRoaXMgb2Z0ZW4sIHRoZW4gaXQgY2FuIGJlIHdvcnRoIGhhdmluZworc2NyaXB0cyB0byBhdm9pZCB0b28gbXVjaCB0eXBpbmcuCisKK0ZpbmRpbmcgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSGVyZSBpcyBhbiBleGFtcGxlIHNjcmlwdCB0aGF0IGNvbWVzIHNsaWdodGx5IG1vZGlmaWVkIGZyb20gYSByZWFsCit3b3JsZCBzY3JpcHQgdXNlZCBieSBKdW5pbyBIYW1hbm8gPDw0Pj4uCisKK1RoaXMgc2NyaXB0IGNhbiBiZSBwYXNzZWQgdG8gImdpdCBiaXNlY3QgcnVuIiB0byBmaW5kIHRoZSBjb21taXQgdGhhdAoraW50cm9kdWNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb246CisKKy0tLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorCisjIEJ1aWxkIGVycm9ycyBhcmUgbm90IHdoYXQgSSBhbSBpbnRlcmVzdGVkIGluLgorbWFrZSBteV9hcHAgfHwgZXhpdCAyNTUKKworIyBXZSBhcmUgY2hlY2tpbmcgaWYgaXQgc3RvcHMgaW4gYSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLCBzbworIyBsZXQgaXQgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLi4uCisKKy4vbXlfYXBwID5sb2cgMj4mMSAmCisKKyMgLi4uIGFuZCBncmFiIGl0cyBwcm9jZXNzIElELgorcGlkPSQhCisKKyMgLi4uIGFuZCB0aGVuIHdhaXQgZm9yIHN1ZmZpY2llbnRseSBsb25nLgorc2xlZXAgJE5PUk1BTF9USU1FCisKKyMgLi4uIGFuZCB0aGVuIHNlZSBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCB0aGVyZS4KK2lmIGtpbGwgLTAgJHBpZAordGhlbgorCSMgSXQgaXMgc3RpbGwgcnVubmluZyAtLSB0aGF0IGlzIGJhZC4KKwlraWxsICRwaWQ7IHNsZWVwIDE7IGtpbGwgJHBpZDsKKwlleGl0IDEKK2Vsc2UKKwkjIEl0IGhhcyBhbHJlYWR5IGZpbmlzaGVkICh0aGUgJHBpZCBwcm9jZXNzIHdhcyBubyBtb3JlKSwKKwkjIGFuZCB3ZSBhcmUgaGFwcHkuCisJZXhpdCAwCitmaQorLS0tLS0tLS0tLS0tLQorCitGb2xsb3dpbmcgZ2VuZXJhbCBiZXN0IHByYWN0aWNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSXQgaXMgb2J2aW91c2x5IGEgZ29vZCBpZGVhIG5vdCB0byBoYXZlIGNvbW1pdHMgd2l0aCBjaGFuZ2VzIHRoYXQKK2tub3dpbmdseSBicmVhayB0aGluZ3MsIGV2ZW4gaWYgc29tZSBvdGhlciBjb21taXRzIGxhdGVyIGZpeCB0aGUKK2JyZWFrYWdlLgorCitJdCBpcyBhbHNvIGEgZ29vZCBpZGVhIHdoZW4gdXNpbmcgYW55IFZDUyB0byBoYXZlIG9ubHkgb25lIHNtYWxsCitsb2dpY2FsIGNoYW5nZSBpbiBlYWNoIGNvbW1pdC4KKworVGhlIHNtYWxsZXIgdGhlIGNoYW5nZXMgaW4geW91ciBjb21taXQsIHRoZSBtb3N0IGVmZmVjdGl2ZSAiZ2l0CitiaXNlY3QiIHdpbGwgYmUuIEFuZCB5b3Ugd2lsbCBwcm9iYWJseSBuZWVkICJnaXQgYmlzZWN0IiBsZXNzIGluIHRoZQorZmlyc3QgcGxhY2UsIGFzIHNtYWxsIGNoYW5nZXMgYXJlIGVhc2llciB0byByZXZpZXcgZXZlbiBpZiB0aGV5IGFyZQorb25seSByZXZpZXdlZCBieSB0aGUgY29tbWl0dGVyLgorCitBbm90aGVyIGdvb2QgaWRlYSBpcyB0byBoYXZlIGdvb2QgY29tbWl0IG1lc3NhZ2VzLiBUaGV5IGNhbiBiZSB2ZXJ5CitoZWxwZnVsIHRvIHVuZGVyc3RhbmQgd2h5IHNvbWUgY2hhbmdlcyB3ZXJlIG1hZGUuCisKK1RoZXNlIGdlbmVyYWwgYmVzdCBwcmFjdGljZXMgYXJlIHZlcnkgaGVscGZ1bCBpZiB5b3UgYmlzZWN0IG9mdGVuLgorCitBdm9pZGluZyBidWcgcHJvbmUgbWVyZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0IG1lcmdlcyBieSB0aGVtc2VsdmVzIGNhbiBpbnRyb2R1Y2Ugc29tZSByZWdyZXNzaW9ucyBldmVuIHdoZW4KK3RoZSBtZXJnZSBuZWVkcyBubyBzb3VyY2UgY29kZSBjb25mbGljdCByZXNvbHV0aW9uLiBUaGlzIGlzIGJlY2F1c2UgYQorc2VtYW50aWMgY2hhbmdlIGNhbiBoYXBwZW4gaW4gb25lIGJyYW5jaCB3aGlsZSB0aGUgb3RoZXIgYnJhbmNoIGlzIG5vdAorYXdhcmUgb2YgaXQuCisKK0ZvciBleGFtcGxlIG9uZSBicmFuY2ggY2FuIGNoYW5nZSB0aGUgc2VtYW50aWMgb2YgYSBmdW5jdGlvbiB3aGlsZSB0aGUKK290aGVyIGJyYW5jaCBhZGQgbW9yZSBjYWxscyB0byB0aGUgc2FtZSBmdW5jdGlvbi4KKworVGhpcyBpcyBtYWRlIG11Y2ggd29yc2UgaWYgbWFueSBmaWxlcyBoYXZlIHRvIGJlIGZpeGVkIHRvIHJlc29sdmUKK2NvbmZsaWN0cy4gVGhhdCdzIHdoeSBzdWNoIG1lcmdlcyBhcmUgY2FsbGVkICJldmlsIG1lcmdlcyIuIFRoZXkgY2FuCittYWtlIHJlZ3Jlc3Npb25zIHZlcnkgZGlmZmljdWx0IHRvIHRyYWNrIGRvd24uIEl0IGNhbiBldmVuIGJlCittaXNsZWFkaW5nIHRvIGtub3cgdGhlIGZpcnN0IGJhZCBjb21taXQgaWYgaXQgaGFwcGVucyB0byBiZSBzdWNoIGEKK21lcmdlLCBiZWNhdXNlIHBlb3BsZSBtaWdodCB0aGluayB0aGF0IHRoZSBidWcgY29tZXMgZnJvbSBiYWQgY29uZmxpY3QKK3Jlc29sdXRpb24gd2hlbiBpdCBjb21lcyBmcm9tIGEgc2VtYW50aWMgY2hhbmdlIGluIG9uZSBicmFuY2guCisKK0FueXdheSAiZ2l0IHJlYmFzZSIgY2FuIGJlIHVzZWQgdG8gbGluZWFyaXplIGhpc3RvcnkuIFRoaXMgY2FuIGJlIHVzZWQKK2VpdGhlciB0byBhdm9pZCBtZXJnaW5nIGluIHRoZSBmaXJzdCBwbGFjZS4gT3IgaXQgY2FuIGJlIHVzZWQgdG8KK2Jpc2VjdCBvbiBhIGxpbmVhciBoaXN0b3J5IGluc3RlYWQgb2YgdGhlIG5vbiBsaW5lYXIgb25lLCBhcyB0aGlzCitzaG91bGQgZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIGluIGNhc2Ugb2YgYSBzZW1hbnRpYyBjaGFuZ2UgaW4gb25lCiticmFuY2guCisKK01lcmdlcyBjYW4gYmUgYWxzbyBtYWRlIHNpbXBsZXIgYnkgdXNpbmcgc21hbGxlciBicmFuY2hlcyBvciBieSB1c2luZworbWFueSB0b3BpYyBicmFuY2hlcyBpbnN0ZWFkIG9mIG9ubHkgbG9uZyB2ZXJzaW9uIHJlbGF0ZWQgYnJhbmNoZXMuCisKK0FuZCB0ZXN0aW5nIGNhbiBiZSBkb25lIG1vcmUgb2Z0ZW4gaW4gc3BlY2lhbCBpbnRlZ3JhdGlvbiBicmFuY2hlcworbGlrZSBsaW51eC1uZXh0IGZvciB0aGUgbGludXgga2VybmVsLgorCitBZGFwdGluZyB5b3VyIHdvcmstZmxvdworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQSBzcGVjaWFsIHdvcmstZmxvdyB0byBwcm9jZXNzIHJlZ3Jlc3Npb25zIGNhbiBnaXZlIGdyZWF0IHJlc3VsdHMuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHdvcmstZmxvdyB1c2VkIGJ5IEFuZHJlYXMgRXJpY3Nzb246CisKKyogd3JpdGUsIGluIHRoZSB0ZXN0IHN1aXRlLCBhIHRlc3Qgc2NyaXB0IHRoYXQgZXhwb3NlcyB0aGUgcmVncmVzc2lvbgorKiB1c2UgImdpdCBiaXNlY3QgcnVuIiB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGl0CisqIGZpeCB0aGUgYnVnIHRoYXQgaXMgb2Z0ZW4gbWFkZSBvYnZpb3VzIGJ5IHRoZSBwcmV2aW91cyBzdGVwCisqIGNvbW1pdCBib3RoIHRoZSBmaXggYW5kIHRoZSB0ZXN0IHNjcmlwdCAoYW5kIGlmIG5lZWRlZCBtb3JlIHRlc3RzKQorCitBbmQgaGVyZSBpcyB3aGF0IEFuZHJlYXMgc2FpZCBhYm91dCB0aGlzIHdvcmstZmxvdyA8PDU+PjoKKworX19fX19fX19fX19fXworVG8gZ2l2ZSBzb21lIGhhcmQgZmlndXJlcywgd2UgdXNlZCB0byBoYXZlIGFuIGF2ZXJhZ2UgcmVwb3J0LXRvLWZpeAorY3ljbGUgb2YgMTQyLjYgaG91cnMgKGFjY29yZGluZyB0byBvdXIgc29tZXdoYXQgd2VpcmQgYnVnLXRyYWNrZXIKK3doaWNoIGp1c3QgbWVhc3VyZXMgd2FsbC1jbG9jayB0aW1lKS4gU2luY2Ugd2UgbW92ZWQgdG8gR2l0LCB3ZSd2ZQorbG93ZXJlZCB0aGF0IHRvIDE2LjIgaG91cnMuIFByaW1hcmlseSBiZWNhdXNlIHdlIGNhbiBzdGF5IG9uIHRvcCBvZgordGhlIGJ1ZyBmaXhpbmcgbm93LCBhbmQgYmVjYXVzZSBldmVyeW9uZSdzIGpvY2tleWluZyB0byBnZXQgdG8gZml4CitidWdzICh3ZSdyZSBxdWl0ZSBwcm91ZCBvZiBob3cgbGF6eSB3ZSBhcmUgdG8gbGV0IEdpdCBmaW5kIHRoZSBidWdzCitmb3IgdXMpLiBFYWNoIG5ldyByZWxlYXNlIHJlc3VsdHMgaW4gfjQwJSBmZXdlciBidWdzIChhbG1vc3QgY2VydGFpbmx5CitkdWUgdG8gaG93IHdlIG5vdyBmZWVsIGFib3V0IHdyaXRpbmcgdGVzdHMpLgorX19fX19fX19fX19fXworCitDbGVhcmx5IHRoaXMgd29yay1mbG93IHVzZXMgdGhlIHZpcnR1b3VzIGNpcmNsZSBiZXR3ZWVuIHRlc3Qgc3VpdGVzCithbmQgImdpdCBiaXNlY3QiLiBJbiBmYWN0IGl0IG1ha2VzIGl0IHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgdG8gZGVhbAord2l0aCByZWdyZXNzaW9uLgorCitJbiBvdGhlciBtZXNzYWdlcyBBbmRyZWFzIHNheXMgdGhhdCB0aGV5IGFsc28gdXNlIHRoZSAiYmVzdCBwcmFjdGljZXMiCitkZXNjcmliZWQgYWJvdmU6IHNtYWxsIGxvZ2ljYWwgY29tbWl0cywgdG9waWMgYnJhbmNoZXMsIG5vIGV2aWwKK21lcmdlLC4uLiBUaGVzZSBwcmFjdGljZXMgYWxsIGltcHJvdmUgdGhlIGJpc2VjdGFiaWxpdHkgb2YgdGhlIGNvbW1pdAorZ3JhcGgsIGJ5IG1ha2luZyBpdCBlYXNpZXIgYW5kIG1vcmUgdXNlZnVsIHRvIGJpc2VjdC4KKworU28gYSBnb29kIHdvcmstZmxvdyBzaG91bGQgYmUgZGVzaWduZWQgYXJvdW5kIHRoZSBhYm92ZSBwb2ludHMuIFRoYXQKK2lzIG1ha2luZyBiaXNlY3RpbmcgZWFzaWVyLCBtb3JlIHVzZWZ1bCBhbmQgc3RhbmRhcmQuCisKK0ludm9sdmluZyBRQSBwZW9wbGUgYW5kIGlmIHBvc3NpYmxlIGVuZCB1c2Vycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK09uZSBuaWNlIGFib3V0ICJnaXQgYmlzZWN0IiBpcyB0aGF0IGl0IGlzIG5vdCBvbmx5IGEgZGV2ZWxvcGVyCit0b29sLiBJdCBjYW4gZWZmZWN0aXZlbHkgYmUgdXNlZCBieSBRQSBwZW9wbGUgb3IgZXZlbiBlbmQgdXNlcnMgKGlmCit0aGV5IGhhdmUgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBvciBpZiB0aGV5IGNhbiBnZXQgYWNjZXNzIHRvIGFsbAordGhlIGJ1aWxkcykuCisKK1RoZXJlIHdhcyBhIGRpc2N1c3Npb24gYXQgb25lIHBvaW50IG9uIHRoZSBsaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0CitvZiB3aGV0aGVyIGl0IHdhcyBvayB0byBhbHdheXMgYXNrIGVuZCB1c2VyIHRvIGJpc2VjdCwgYW5kIHZlcnkgZ29vZAorcG9pbnRzIHdlcmUgbWFkZSB0byBzdXBwb3J0IHRoZSBwb2ludCBvZiB2aWV3IHRoYXQgaXQgaXMgb2suCisKK0ZvciBleGFtcGxlIERhdmlkIE1pbGxlciB3cm90ZSA8PDY+PjoKKworX19fX19fX19fX19fXworV2hhdCBwZW9wbGUgZG9uJ3QgZ2V0IGlzIHRoYXQgdGhpcyBpcyBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgImVuZCBub2RlCitwcmluY2lwbGUiIGFwcGxpZXMuIFdoZW4geW91IGhhdmUgbGltaXRlZCByZXNvdXJjZXMgKGhlcmU6IGRldmVsb3BlcnMpCit5b3UgZG9uJ3QgcHVzaCB0aGUgYnVsayBvZiB0aGUgYnVyZGVuIHVwb24gdGhlbS4gSW5zdGVhZCB5b3UgcHVzaAordGhpbmdzIG91dCB0byB0aGUgcmVzb3VyY2UgeW91IGhhdmUgYSBsb3Qgb2YsIHRoZSBlbmQgbm9kZXMgKGhlcmU6Cit1c2VycyksIHNvIHRoYXQgdGhlIHNpdHVhdGlvbiBhY3R1YWxseSBzY2FsZXMuCitfX19fX19fX19fX19fCisKK1RoaXMgbWVhbnMgdGhhdCBpdCBpcyBvZnRlbiAiY2hlYXBlciIgaWYgUUEgcGVvcGxlIG9yIGVuZCB1c2VycyBjYW4gZG8KK2l0LgorCitXaGF0IGlzIGludGVyZXN0aW5nIHRvbyBpcyB0aGF0IGVuZCB1c2VycyB0aGF0IGFyZSByZXBvcnRpbmcgYnVncyAob3IKK1FBIHBlb3BsZSB0aGF0IHJlcHJvZHVjZWQgYSBidWcpIGhhdmUgYWNjZXNzIHRvIHRoZSBlbnZpcm9ubWVudCB3aGVyZQordGhlIGJ1ZyBoYXBwZW5zLiBTbyB0aGV5IGNhbiBvZnRlbiBtb3JlIGVhc2lseSByZXByb2R1Y2UgYQorcmVncmVzc2lvbi4gQW5kIGlmIHRoZXkgY2FuIGJpc2VjdCwgdGhlbiBtb3JlIGluZm9ybWF0aW9uIHdpbGwgYmUKK2V4dHJhY3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgYnVnIGhhcHBlbnMsIHdoaWNoIG1lYW5zIHRoYXQKK2l0IHdpbGwgYmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIHRoZW4gZml4IHRoZSBidWcuCisKK0ZvciBvcGVuIHNvdXJjZSBwcm9qZWN0cyBpdCBjYW4gYmUgYSBnb29kIHdheSB0byBnZXQgbW9yZSB1c2VmdWwKK2NvbnRyaWJ1dGlvbnMgZnJvbSBlbmQgdXNlcnMsIGFuZCB0byBpbnRyb2R1Y2UgdGhlbSB0byBRQSBhbmQKK2RldmVsb3BtZW50IGFjdGl2aXRpZXMuCisKK1VzaW5nIGNvbXBsZXggc2NyaXB0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0luIHNvbWUgY2FzZXMgbGlrZSBmb3Iga2VybmVsIGRldmVsb3BtZW50IGl0IGNhbiBiZSB3b3J0aCBkZXZlbG9waW5nCitjb21wbGV4IHNjcmlwdHMgdG8gYmUgYWJsZSB0byBmdWxseSBhdXRvbWF0ZSBiaXNlY3RpbmcuCisKK0hlcmUgaXMgd2hhdCBJbmdvIE1vbG5hciBzYXlzIGFib3V0IHRoYXQgPDw3Pj46CisKK19fX19fX19fX19fX18KK2kgaGF2ZSBhIGZ1bGx5IGF1dG9tYXRlZCBib290dXAtaGFuZyBiaXNlY3Rpb24gc2NyaXB0LiBJdCBpcyBiYXNlZCBvbgorImdpdC1iaXNlY3QgcnVuIi4gSSBydW4gdGhlIHNjcmlwdCwgaXQgYnVpbGRzIGFuZCBib290cyBrZXJuZWxzIGZ1bGx5CithdXRvbWF0aWNhbGx5LCBhbmQgd2hlbiB0aGUgYm9vdHVwIGZhaWxzICh0aGUgc2NyaXB0IG5vdGljZXMgdGhhdCB2aWEKK3RoZSBzZXJpYWwgbG9nLCB3aGljaCBpdCBjb250aW51b3VzbHkgd2F0Y2hlcyAtIG9yIHZpYSBhIHRpbWVvdXQsIGlmCit0aGUgc3lzdGVtIGRvZXMgbm90IGNvbWUgdXAgd2l0aGluIDEwIG1pbnV0ZXMgaXQncyBhICJiYWQiIGtlcm5lbCksCit0aGUgc2NyaXB0IHJhaXNlcyBteSBhdHRlbnRpb24gdmlhIGEgYmVlcCBhbmQgaSBwb3dlciBjeWNsZSB0aGUgdGVzdAorYm94LiAoeWVhaCwgaSBzaG91bGQgbWFrZSB1c2Ugb2YgYSBtYW5hZ2VkIHBvd2VyIG91dGxldCB0byAxMDAlCithdXRvbWF0ZSBpdCkKK19fX19fX19fX19fX18KKworQ29tYmluaW5nIHRlc3Qgc3VpdGVzLCBnaXQgYmlzZWN0IGFuZCBvdGhlciBzeXN0ZW1zIHRvZ2V0aGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2UgaGF2ZSBzZWVuIHRoYXQgdGVzdCBzdWl0ZXMgYW5kIGdpdCBiaXNlY3QgYXJlIHZlcnkgcG93ZXJmdWwgd2hlbgordXNlZCB0b2dldGhlci4gSXQgY2FuIGJlIGV2ZW4gbW9yZSBwb3dlcmZ1bCBpZiB5b3UgY2FuIGNvbWJpbmUgdGhlbQord2l0aCBvdGhlciBzeXN0ZW1zLgorCitGb3IgZXhhbXBsZSBzb21lIHRlc3Qgc3VpdGVzIGNvdWxkIGJlIHJ1biBhdXRvbWF0aWNhbGx5IGF0IG5pZ2h0IHdpdGgKK3NvbWUgdW51c3VhbCAob3IgZXZlbiByYW5kb20pIGNvbmZpZ3VyYXRpb25zLiBBbmQgaWYgYSByZWdyZXNzaW9uIGlzCitmb3VuZCBieSBhIHRlc3Qgc3VpdGUsIHRoZW4gImdpdCBiaXNlY3QiIGNhbiBiZSBhdXRvbWF0aWNhbGx5CitsYXVuY2hlZCwgYW5kIGl0cyByZXN1bHQgY2FuIGJlIGVtYWlsZWQgdG8gdGhlIGF1dGhvciBvZiB0aGUgZmlyc3QgYmFkCitjb21taXQgZm91bmQgYnkgImdpdCBiaXNlY3QiLCBhbmQgcGVyaGFwcyBvdGhlciBwZW9wbGUgdG9vLiBBbmQgYSBuZXcKK2VudHJ5IGluIHRoZSBidWcgdHJhY2tpbmcgc3lzdGVtIGNvdWxkIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0b28uCisKKworVGhlIGZ1dHVyZSBvZiBiaXNlY3RpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJnaXQgcmVwbGFjZSIKK35+fn5+fn5+fn5+fn4KKworV2Ugc2F3IGVhcmxpZXIgdGhhdCAiZ2l0IGJpc2VjdCBza2lwIiBpcyBub3cgdXNpbmcgYSBQUk5HIHRvIHRyeSB0bworYXZvaWQgYXJlYXMgaW4gdGhlIGNvbW1pdCBncmFwaCB3aGVyZSBjb21taXRzIGFyZSB1bnRlc3RhYmxlLiBUaGUKK3Byb2JsZW0gaXMgdGhhdCBzb21ldGltZXMgdGhlIGZpcnN0IGJhZCBjb21taXQgd2lsbCBiZSBpbiBhbgordW50ZXN0YWJsZSBhcmVhLgorCitUbyBzaW1wbGlmeSB0aGUgZGlzY3Vzc2lvbiB3ZSB3aWxsIHN1cHBvc2UgdGhhdCB0aGUgdW50ZXN0YWJsZSBhcmVhIGlzCithIHNpbXBsZSBzdHJpbmcgb2YgY29tbWl0cyBhbmQgdGhhdCBpdCB3YXMgY3JlYXRlZCBieSBhIGJyZWFrYWdlCitpbnRyb2R1Y2VkIGJ5IG9uZSBjb21taXQgKGxldCdzIGNhbGwgaXQgQkJDIGZvciBiaXNlY3QgYnJlYWtpbmcKK2NvbW1pdCkgYW5kIGxhdGVyIGZpeGVkIGJ5IGFub3RoZXIgb25lIChsZXQncyBjYWxsIGl0IEJGQyBmb3IgYmlzZWN0CitmaXhpbmcgY29tbWl0KS4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKy4uLi1ZLUJCQy1YMS1YMi1YMy1YNC1YNS1YNi1CRkMtWi0uLi4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgd2Uga25vdyB0aGF0IFkgaXMgZ29vZCBhbmQgQkZDIGlzIGJhZCwgYW5kIHdoZXJlIEJCQyBhbmQgWDEgdG8KK1g2IGFyZSB1bnRlc3RhYmxlLgorCitJbiB0aGlzIGNhc2UgaWYgeW91IGFyZSBiaXNlY3RpbmcgbWFudWFsbHksIHdoYXQgeW91IGNhbiBkbyBpcyBjcmVhdGUKK2Egc3BlY2lhbCBicmFuY2ggdGhhdCBzdGFydHMganVzdCBiZWZvcmUgdGhlIEJCQy4gVGhlIGZpcnN0IGNvbW1pdCBpbgordGhpcyBicmFuY2ggc2hvdWxkIGJlIHRoZSBCQkMgd2l0aCB0aGUgQkZDIHNxdWFzaGVkIGludG8gaXQuIEFuZCB0aGUKK290aGVyIGNvbW1pdHMgaW4gdGhlIGJyYW5jaCBzaG91bGQgYmUgdGhlIGNvbW1pdHMgYmV0d2VlbiBCQkMgYW5kIEJGQworcmViYXNlZCBvbiB0aGUgZmlyc3QgY29tbWl0IG9mIHRoZSBicmFuY2ggYW5kIHRoZW4gdGhlIGNvbW1pdCBhZnRlcgorQkZDIGFsc28gcmViYXNlZCBvbi4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyAgICAgIChCQkMrQkZDKS1YMSctWDInLVgzJy1YNCctWDUnLVg2Jy1aJworICAgICAvCisuLi4tWS1CQkMtWDEtWDItWDMtWDQtWDUtWDYtQkZDLVotLi4uCistLS0tLS0tLS0tLS0tCisKK3doZXJlIGNvbW1pdHMgcXVvdGVkIHdpdGggJyBoYXZlIGJlZW4gcmViYXNlZC4KKworWW91IGNhbiBlYXNpbHkgY3JlYXRlIHN1Y2ggYSBicmFuY2ggd2l0aCBHaXQgdXNpbmcgaW50ZXJhY3RpdmUgcmViYXNlLgorCitGb3IgZXhhbXBsZSB1c2luZzoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgcmViYXNlIC1pIFkgWgorLS0tLS0tLS0tLS0tLQorCithbmQgdGhlbiBtb3ZpbmcgQkZDIGFmdGVyIEJCQyBhbmQgc3F1YXNoaW5nIGl0LgorCitBZnRlciB0aGF0IHlvdSBjYW4gc3RhcnQgYmlzZWN0aW5nIGFzIHVzdWFsIGluIHRoZSBuZXcgYnJhbmNoIGFuZCB5b3UKK3Nob3VsZCBldmVudHVhbGx5IGZpbmQgdGhlIGZpcnN0IGJhZCBjb21taXQuCisKK0ZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgWicgWQorLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgYXJlIHVzaW5nICJnaXQgYmlzZWN0IHJ1biIsIHlvdSBjYW4gdXNlIHRoZSBzYW1lIG1hbnVhbCBmaXggdXAKK2FzIGFib3ZlLCBhbmQgdGhlbiBzdGFydCBhbm90aGVyICJnaXQgYmlzZWN0IHJ1biIgaW4gdGhlIHNwZWNpYWwKK2JyYW5jaC4gT3IgYXMgdGhlICJnaXQgYmlzZWN0IiBtYW4gcGFnZSBzYXlzLCB0aGUgc2NyaXB0IHBhc3NlZCB0bworImdpdCBiaXNlY3QgcnVuIiBjYW4gYXBwbHkgYSBwYXRjaCBiZWZvcmUgaXQgY29tcGlsZXMgYW5kIHRlc3QgdGhlCitzb2Z0d2FyZSA8PDg+Pi4gVGhlIHBhdGNoIHNob3VsZCB0dXJuIGEgY3VycmVudCB1bnRlc3RhYmxlIGNvbW1pdHMKK2ludG8gYSB0ZXN0YWJsZSBvbmUuIFNvIHRoZSB0ZXN0aW5nIHdpbGwgcmVzdWx0IGluICJnb29kIiBvciAiYmFkIiBhbmQKKyJnaXQgYmlzZWN0IiB3aWxsIGJlIGFibGUgdG8gZmluZCB0aGUgZmlyc3QgYmFkIGNvbW1pdC4gQW5kIHRoZSBzY3JpcHQKK3Nob3VsZCBub3QgZm9yZ2V0IHRvIHJlbW92ZSB0aGUgcGF0Y2ggb25jZSB0aGUgdGVzdGluZyBpcyBkb25lIGJlZm9yZQorZXhpdGluZyBmcm9tIHRoZSBzY3JpcHQuCisKKyhOb3RlIHRoYXQgaW5zdGVhZCBvZiBhIHBhdGNoIHlvdSBjYW4gdXNlICJnaXQgY2hlcnJ5LXBpY2sgQkZDIiB0bworYXBwbHkgdGhlIGZpeCwgYW5kIGluIHRoaXMgY2FzZSB5b3Ugc2hvdWxkIHVzZSAiZ2l0IHJlc2V0IC0taGFyZAorSEVBRF4iIHRvIHJldmVydCB0aGUgY2hlcnJ5LXBpY2sgYWZ0ZXIgdGVzdGluZyBhbmQgYmVmb3JlIHJldHVybmluZworZnJvbSB0aGUgc2NyaXB0LikKKworQnV0IHRoZSBhYm92ZSB3YXlzIHRvIHdvcmsgYXJvdW5kIHVudGVzdGFibGUgYXJlYXMgYXJlIGEgbGl0dGxlIGJpdAorY2x1bmt5LiBVc2luZyBzcGVjaWFsIGJyYW5jaGVzIGlzIG5pY2UgYmVjYXVzZSB0aGVzZSBicmFuY2hlcyBjYW4gYmUKK3NoYXJlZCBieSBkZXZlbG9wZXJzIGxpa2UgdXN1YWwgYnJhbmNoZXMsIGJ1dCB0aGUgcmlzayBpcyB0aGF0IHBlb3BsZQord2lsbCBnZXQgbWFueSBzdWNoIGJyYW5jaGVzLiBBbmQgaXQgZGlzcnVwdHMgdGhlIG5vcm1hbCAiZ2l0IGJpc2VjdCIKK3dvcmstZmxvdy4gU28sIGlmIHlvdSB3YW50IHRvIHVzZSAiZ2l0IGJpc2VjdCBydW4iIGNvbXBsZXRlbHkKK2F1dG9tYXRpY2FsbHksIHlvdSBoYXZlIHRvIGFkZCBzcGVjaWFsIGNvZGUgaW4geW91ciBzY3JpcHQgdG8gcmVzdGFydAorYmlzZWN0aW9uIGluIHRoZSBzcGVjaWFsIGJyYW5jaGVzLgorCitBbnl3YXkgb25lIGNhbiBub3RpY2UgaW4gdGhlIGFib3ZlIHNwZWNpYWwgYnJhbmNoIGV4YW1wbGUgdGhhdCB0aGUgWicKK2FuZCBaIGNvbW1pdHMgc2hvdWxkIHBvaW50IHRvIHRoZSBzYW1lIHNvdXJjZSBjb2RlIHN0YXRlICh0aGUgc2FtZQorInRyZWUiIGluIGdpdCBwYXJsYW5jZSkuIFRoYXQncyBiZWNhdXNlIFonIHJlc3VsdCBmcm9tIGFwcGx5aW5nIHRoZQorc2FtZSBjaGFuZ2VzIGFzIFoganVzdCBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCBvcmRlci4KKworU28gaWYgd2UgY291bGQganVzdCAicmVwbGFjZSIgWiBieSBaJyB3aGVuIHdlIGJpc2VjdCwgdGhlbiB3ZSB3b3VsZAorbm90IG5lZWQgdG8gYWRkIGFueXRoaW5nIHRvIGEgc2NyaXB0LiBJdCB3b3VsZCBqdXN0IHdvcmsgZm9yIGFueW9uZSBpbgordGhlIHByb2plY3Qgc2hhcmluZyB0aGUgc3BlY2lhbCBicmFuY2hlcyBhbmQgdGhlIHJlcGxhY2VtZW50cy4KKworV2l0aCB0aGUgZXhhbXBsZSBhYm92ZSB0aGF0IHdvdWxkIGdpdmU6CisKKy0tLS0tLS0tLS0tLS0KKyAgICAgIChCQkMrQkZDKS1YMSctWDInLVgzJy1YNCctWDUnLVg2Jy1aJy0uLi4KKyAgICAgLworLi4uLVktQkJDLVgxLVgyLVgzLVg0LVg1LVg2LUJGQy1aCistLS0tLS0tLS0tLS0tCisKK1RoYXQncyB3aHkgdGhlICJnaXQgcmVwbGFjZSIgY29tbWFuZCB3YXMgY3JlYXRlZC4gVGVjaG5pY2FsbHkgaXQKK3N0b3JlcyByZXBsYWNlbWVudHMgInJlZnMiIGluIHRoZSAicmVmcy9yZXBsYWNlLyIgaGllcmFyY2h5LiBUaGVzZQorInJlZnMiIGFyZSBsaWtlIGJyYW5jaGVzICh0aGF0IGFyZSBzdG9yZWQgaW4gInJlZnMvaGVhZHMvIikgb3IgdGFncworKHRoYXQgYXJlIHN0b3JlZCBpbiAicmVmcy90YWdzIiksIGFuZCB0aGF0IG1lYW5zIHRoYXQgdGhleSBjYW4KK2F1dG9tYXRpY2FsbHkgYmUgc2hhcmVkIGxpa2UgYnJhbmNoZXMgb3IgdGFncyBhbW9uZyBkZXZlbG9wZXJzLgorCisiZ2l0IHJlcGxhY2UiIGlzIGEgdmVyeSBwb3dlcmZ1bCBtZWNoYW5pc20uIEl0IGNhbiBiZSB1c2VkIHRvIGZpeAorY29tbWl0cyBpbiBhbHJlYWR5IHJlbGVhc2VkIGhpc3RvcnksIGZvciBleGFtcGxlIHRvIGNoYW5nZSB0aGUgY29tbWl0CittZXNzYWdlIG9yIHRoZSBhdXRob3IuIEFuZCBpdCBjYW4gYWxzbyBiZSB1c2VkIGluc3RlYWQgb2YgZ2l0ICJncmFmdHMiCit0byBsaW5rIGEgcmVwb3NpdG9yeSB3aXRoIGFub3RoZXIgb2xkIHJlcG9zaXRvcnkuCisKK0luIGZhY3QgaXQncyB0aGlzIGxhc3QgZmVhdHVyZSB0aGF0ICJzb2xkIiBpdCB0byB0aGUgR2l0IGNvbW11bml0eSwgc28KK2l0IGlzIG5vdyBpbiB0aGUgIm1hc3RlciIgYnJhbmNoIG9mIEdpdCdzIEdpdCByZXBvc2l0b3J5IGFuZCBpdCBzaG91bGQKK2JlIHJlbGVhc2VkIGluIEdpdCAxLjYuNSBpbiBPY3RvYmVyIG9yIE5vdmVtYmVyIDIwMDkuCisKK09uZSBwcm9ibGVtIHdpdGggImdpdCByZXBsYWNlIiBpcyB0aGF0IGN1cnJlbnRseSBpdCBzdG9yZXMgYWxsIHRoZQorcmVwbGFjZW1lbnRzIHJlZnMgaW4gInJlZnMvcmVwbGFjZS8iLCBidXQgaXQgd291bGQgYmUgcGVyaGFwcyBiZXR0ZXIKK2lmIHRoZSByZXBsYWNlbWVudCByZWZzIHRoYXQgYXJlIHVzZWZ1bCBvbmx5IGZvciBiaXNlY3Rpbmcgd291bGQgYmUgaW4KKyJyZWZzL3JlcGxhY2UvYmlzZWN0LyIuIFRoaXMgd2F5IHRoZSByZXBsYWNlbWVudCByZWZzIGNvdWxkIGJlIHVzZWQKK29ubHkgZm9yIGJpc2VjdGluZywgd2hpbGUgb3RoZXIgcmVmcyBkaXJlY3RseSBpbiAicmVmcy9yZXBsYWNlLyIgd291bGQKK2JlIHVzZWQgbmVhcmx5IGFsbCB0aGUgdGltZS4KKworQmlzZWN0aW5nIHNwb3JhZGljIGJ1Z3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0Fub3RoZXIgcG9zc2libGUgaW1wcm92ZW1lbnQgdG8gImdpdCBiaXNlY3QiIHdvdWxkIGJlIHRvIG9wdGlvbmFsbHkKK2FkZCBzb21lIHJlZHVuZGFuY3kgdG8gdGhlIHRlc3RzIHBlcmZvcm1lZCBzbyB0aGF0IGl0IHdvdWxkIGJlIG1vcmUKK3JlbGlhYmxlIHdoZW4gdHJhY2tpbmcgc3BvcmFkaWMgYnVncy4KKworVGhpcyBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgc29tZSBrZXJuZWwgZGV2ZWxvcGVycyBiZWNhdXNlIHNvbWUgYnVncworY2FsbGVkIHNwb3JhZGljIGJ1Z3MgZG8gbm90IGFwcGVhciBpbiBhbGwgdGhlIGtlcm5lbCBidWlsZHMgYmVjYXVzZQordGhleSBhcmUgdmVyeSBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyIG91dHB1dC4KKworVGhlIGlkZWEgaXMgdGhhdCBldmVyeSAzIHRlc3QgZm9yIGV4YW1wbGUsICJnaXQgYmlzZWN0IiBjb3VsZCBhc2sgdGhlCit1c2VyIHRvIHRlc3QgYSBjb21taXQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGZvdW5kIHRvIGJlICJnb29kIiBvcgorImJhZCIgKGJlY2F1c2Ugb25lIG9mIGl0cyBkZXNjZW5kYW50cyBvciBvbmUgb2YgaXRzIGFuY2VzdG9ycyBoYXMgYmVlbgorZm91bmQgdG8gYmUgImdvb2QiIG9yICJiYWQiIHJlc3BlY3RpdmVseSkuIElmIGl0IGhhcHBlbnMgdGhhdCBhIGNvbW1pdAoraGFzIGJlZW4gcHJldmlvdXNseSBpbmNvcnJlY3RseSBjbGFzc2lmaWVkIHRoZW4gdGhlIGJpc2VjdGlvbiBjYW4gYmUKK2Fib3J0ZWQgZWFybHksIGhvcGVmdWxseSBiZWZvcmUgdG9vIG1hbnkgbWlzdGFrZXMgaGF2ZSBiZWVuIG1hZGUuIFRoZW4KK3RoZSB1c2VyIHdpbGwgaGF2ZSB0byBsb29rIGF0IHdoYXQgaGFwcGVuZWQgYW5kIHRoZW4gcmVzdGFydCB0aGUKK2Jpc2VjdGlvbiB1c2luZyBhIGZpeGVkIGJpc2VjdCBsb2cuCisKK1RoZXJlIGlzIGFscmVhZHkgYSBwcm9qZWN0IGNhbGxlZCBCQkNob3AgY3JlYXRlZCBieSBFYWxkd3VsZiBXdWZmaW5nYQorb24gR2l0aHViIHRoYXQgZG9lcyBzb21ldGhpbmcgbGlrZSB0aGF0IHVzaW5nIEJheWVzaWFuIFNlYXJjaCBUaGVvcnkKKzw8OT4+OgorCitfX19fX19fX19fX19fCitCQkNob3AgaXMgbGlrZSAnZ2l0IGJpc2VjdCcgKG9yIGVxdWl2YWxlbnQpLCBidXQgd29ya3Mgd2hlbiB5b3VyIGJ1ZworaXMgaW50ZXJtaXR0ZW50LiBUaGF0IGlzLCBpdCB3b3JrcyBpbiB0aGUgcHJlc2VuY2Ugb2YgZmFsc2UgbmVnYXRpdmVzCisod2hlbiBhIHZlcnNpb24gaGFwcGVucyB0byB3b3JrIHRoaXMgdGltZSBldmVuIHRob3VnaCBpdCBjb250YWlucyB0aGUKK2J1ZykuIEl0IGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgbm8gZmFsc2UgcG9zaXRpdmVzIChpbiBwcmluY2lwbGUsIHRoZQorc2FtZSBhcHByb2FjaCB3b3VsZCB3b3JrLCBidXQgYWRkaW5nIGl0IG1heSBiZSBub24tdHJpdmlhbCkuCitfX19fX19fX19fX19fCisKK0J1dCBCQkNob3AgaXMgaW5kZXBlbmRlbnQgb2YgYW55IFZDUyBhbmQgaXQgd291bGQgYmUgZWFzaWVyIGZvciBHaXQKK3VzZXJzIHRvIGhhdmUgc29tZXRoaW5nIGludGVncmF0ZWQgaW4gR2l0LgorCitDb25jbHVzaW9uCistLS0tLS0tLS0tCisKK1dlIGhhdmUgc2VlbiB0aGF0IHJlZ3Jlc3Npb25zIGFyZSBhbiBpbXBvcnRhbnQgcHJvYmxlbSwgYW5kIHRoYXQgImdpdAorYmlzZWN0IiBoYXMgbmljZSBmZWF0dXJlcyB0aGF0IGNvbXBsZW1lbnQgdmVyeSB3ZWxsIHByYWN0aWNlcyBhbmQKK290aGVyIHRvb2xzLCBlc3BlY2lhbGx5IHRlc3Qgc3VpdGVzLCB0aGF0IGFyZSBnZW5lcmFsbHkgdXNlZCB0byBmaWdodAorcmVncmVzc2lvbnMuIEJ1dCBpdCBtaWdodCBiZSBuZWVkZWQgdG8gY2hhbmdlIHNvbWUgd29yay1mbG93cyBhbmQKKyhiYWQpIGhhYml0cyB0byBnZXQgdGhlIG1vc3Qgb3V0IG9mIGl0LgorCitTb21lIGltcHJvdmVtZW50cyB0byB0aGUgYWxnb3JpdGhtcyBpbnNpZGUgImdpdCBiaXNlY3QiIGFyZSBwb3NzaWJsZQorYW5kIHNvbWUgbmV3IGZlYXR1cmVzIGNvdWxkIGhlbHAgaW4gc29tZSBjYXNlcywgYnV0IG92ZXJhbGwgImdpdAorYmlzZWN0IiB3b3JrcyBhbHJlYWR5IHZlcnkgd2VsbCwgaXMgdXNlZCBhIGxvdCwgYW5kIGlzIGFscmVhZHkgdmVyeQordXNlZnVsLiBUbyBiYWNrIHVwIHRoYXQgbGFzdCBjbGFpbSwgbGV0J3MgZ2l2ZSB0aGUgZmluYWwgd29yZCB0byBJbmdvCitNb2xuYXIgd2hlbiBoZSB3YXMgYXNrZWQgYnkgdGhlIGF1dGhvciBob3cgbXVjaCB0aW1lIGRvZXMgaGUgdGhpbmsKKyJnaXQgYmlzZWN0IiBzYXZlcyBoaW0gd2hlbiBoZSB1c2VzIGl0OgorCitfX19fX19fX19fX19fCithIF9sb3RfLgorCitBYm91dCB0ZW4geWVhcnMgYWdvIGRpZCBpIGRvIG15IGZpcnN0ICdiaXNlY3Rpb24nIG9mIGEgTGludXggcGF0Y2gKK3F1ZXVlLiBUaGF0IHdhcyBwcmlvciB0aGUgR2l0IChhbmQgZXZlbiBwcmlvciB0aGUgQml0S2VlcGVyKSBkYXlzLiBJCitsaXRlcmFsbHkgZGF5cyBzcGVudCBzb3J0aW5nIG91dCBwYXRjaGVzLCBjcmVhdGluZyB3aGF0IGluIGVzc2VuY2UKK3dlcmUgc3RhbmRhbG9uZSBjb21taXRzIHRoYXQgaSBndWVzc2VkIHRvIGJlIHJlbGF0ZWQgdG8gdGhhdCBidWcuCisKK0l0IHdhcyBhIHRvb2wgb2YgYWJzb2x1dGUgbGFzdCByZXNvcnQuIEknZCByYXRoZXIgc3BlbmQgZGF5cyBsb29raW5nCithdCBwcmludGsgb3V0cHV0IHRoYW4gZG8gYSBtYW51YWwgJ3BhdGNoIGJpc2VjdGlvbicuCisKK1dpdGggR2l0IGJpc2VjdCBpdCdzIGEgYnJlZXplOiBpbiB0aGUgYmVzdCBjYXNlIGkgY2FuIGdldCBhIH4xNSBzdGVwCitrZXJuZWwgYmlzZWN0aW9uIGRvbmUgaW4gMjAtMzAgbWludXRlcywgaW4gYW4gYXV0b21hdGVkIHdheS4gRXZlbiB3aXRoCittYW51YWwgaGVscCBvciB3aGVuIGJpc2VjdGluZyBtdWx0aXBsZSwgb3ZlcmxhcHBpbmcgYnVncywgaXQncyByYXJlbHkKK21vcmUgdGhhbiBhbiBob3VyLgorCitJbiBmYWN0IGl0J3MgaW52YWx1YWJsZSBiZWNhdXNlIHRoZXJlIGFyZSBidWdzIGkgd291bGQgbmV2ZXIgZXZlbgorX3RyeV8gdG8gZGVidWcgaWYgaXQgd2Fzbid0IGZvciBnaXQgYmlzZWN0LiBJbiB0aGUgcGFzdCB0aGVyZSB3ZXJlIGJ1ZworcGF0dGVybnMgdGhhdCB3ZXJlIGltbWVkaWF0ZWx5IGhvcGVsZXNzIGZvciBtZSB0byBkZWJ1ZyAtIGF0IGJlc3QgaQorY291bGQgc2VuZCB0aGUgY3Jhc2gvYnVnIHNpZ25hdHVyZSB0byBsa21sIGFuZCBob3BlIHRoYXQgc29tZW9uZSBlbHNlCitjYW4gdGhpbmsgb2Ygc29tZXRoaW5nLgorCitBbmQgZXZlbiBpZiBhIGJpc2VjdGlvbiBmYWlscyB0b2RheSBpdCB0ZWxscyB1cyBzb21ldGhpbmcgdmFsdWFibGUKK2Fib3V0IHRoZSBidWc6IHRoYXQgaXQncyBub24tZGV0ZXJtaW5pc3RpYyAtIHRpbWluZyBvciBrZXJuZWwgaW1hZ2UKK2xheW91dCBkZXBlbmRlbnQuCisKK1NvIGdpdCBiaXNlY3QgaXMgdW5jb25kaXRpb25hbCBnb29kbmVzcyAtIGFuZCBmZWVsIGZyZWUgdG8gcXVvdGUgdGhhdAorOy0pCitfX19fX19fX19fX19fCisKK0Fja25vd2xlZGdtZW50cworLS0tLS0tLS0tLS0tLS0tCisKK01hbnkgdGhhbmtzIHRvIEp1bmlvIEhhbWFubyBmb3IgaGlzIGhlbHAgaW4gcmV2aWV3aW5nIHRoaXMgcGFwZXIsIGZvcgorcmV2aWV3aW5nIHRoZSBwYXRjaGVzIEkgc2VudCB0byB0aGUgR2l0IG1haWxpbmcgbGlzdCwgZm9yIGRpc2N1c3NpbmcKK3NvbWUgaWRlYXMgYW5kIGhlbHBpbmcgbWUgaW1wcm92ZSB0aGVtLCBmb3IgaW1wcm92aW5nICJnaXQgYmlzZWN0IiBhCitsb3QgYW5kIGZvciBoaXMgYXdlc29tZSB3b3JrIGluIG1haW50YWluaW5nIGFuZCBkZXZlbG9waW5nIEdpdC4KKworTWFueSB0aGFua3MgdG8gSW5nbyBNb2xuYXIgZm9yIGdpdmluZyBtZSB2ZXJ5IHVzZWZ1bCBpbmZvcm1hdGlvbiB0aGF0CithcHBlYXJzIGluIHRoaXMgcGFwZXIsIGZvciBjb21tZW50aW5nIG9uIHRoaXMgcGFwZXIsIGZvciBoaXMKK3N1Z2dlc3Rpb25zIHRvIGltcHJvdmUgImdpdCBiaXNlY3QiIGFuZCBmb3IgZXZhbmdlbGl6aW5nICJnaXQgYmlzZWN0Igorb24gdGhlIGxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3RzLgorCitNYW55IHRoYW5rcyB0byBMaW51cyBUb3J2YWxkcyBmb3IgaW52ZW50aW5nLCBkZXZlbG9waW5nIGFuZAorZXZhbmdlbGl6aW5nICJnaXQgYmlzZWN0IiwgR2l0IGFuZCBMaW51eC4KKworTWFueSB0aGFua3MgdG8gdGhlIG1hbnkgb3RoZXIgZ3JlYXQgcGVvcGxlIHdobyBoZWxwZWQgb25lIHdheSBvcgorYW5vdGhlciB3aGVuIEkgd29ya2VkIG9uIEdpdCwgZXNwZWNpYWxseSB0byBBbmRyZWFzIEVyaWNzc29uLCBKb2hhbm5lcworU2NoaW5kZWxpbiwgSC4gUGV0ZXIgQW52aW4sIERhbmllbCBCYXJrYWxvdywgQmlsbCBMZWFyLCBKb2huIEhhd2xleSwKK1NoYXduIE8uIFBpZXJjZSwgSmVmZiBLaW5nLCBTYW0gVmlsYWluLCBKb24gU2V5bW91ci4KKworTWFueSB0aGFua3MgdG8gdGhlIExpbnV4LUtvbmdyZXNzIHByb2dyYW0gY29tbWl0dGVlIGZvciBjaG9vc2luZyB0aGUKK2F1dGhvciB0byBnaXZlbiBhIHRhbGsgYW5kIGZvciBwdWJsaXNoaW5nIHRoaXMgcGFwZXIuCisKK1JlZmVyZW5jZXMKKy0tLS0tLS0tLS0KKworLSBbW1sxXV1dIGh0dHBzOi8vd3d3Lm5pc3QuZ292L3NpdGVzL2RlZmF1bHQvZmlsZXMvZG9jdW1lbnRzL2RpcmVjdG9yL3BsYW5uaW5nL3JlcG9ydDAyLTMucGRmWydUaGUgRWNvbm9taWMgSW1wYWN0cyBvZiBJbmFkZXF1YXRlIEluZnJhdHJ1Y3R1cmUgZm9yIFNvZnR3YXJlIFRlc3RpbmcnLiAgTmlzdCBQbGFubmluZyBSZXBvcnQgMDItM10sIHNlZSBFeGVjdXRpdmUgU3VtbWFyeSBhbmQgQ2hhcHRlciA4LgorLSBbW1syXV1dIGh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9qYXZhL2NvZGVjb252dG9jLTEzNjA1Ny5odG1sWydDb2RlIENvbnZlbnRpb25zIGZvciB0aGUgSmF2YSBQcm9ncmFtbWluZyBMYW5ndWFnZScuIFN1biBNaWNyb3N5c3RlbXMuXQorLSBbW1szXV1dIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvZnR3YXJlX21haW50ZW5hbmNlWydTb2Z0d2FyZSBtYWludGVuYW5jZScuIFdpa2lwZWRpYS5dCistIFtbWzRdXV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2cHM1eHNid3AuZnNmXy1fQGFzc2lnbmVkLWJ5LWRoY3AuY294Lm5ldC9bSnVuaW8gQyBIYW1hbm8uICdBdXRvbWF0ZWQgYmlzZWN0IHN1Y2Nlc3Mgc3RvcnknLl0KKy0gW1tbNV1dXSBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvMzE3MTU0L1tDaHJpc3RpYW4gQ291ZGVyLiAnRnVsbHkgYXV0b21hdGVkIGJpc2VjdGluZyB3aXRoICJnaXQgYmlzZWN0IHJ1biInLiBMV04ubmV0Ll0KKy0gW1tbNl1dXSBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvMjc3ODcyL1tKb25hdGhhbiBDb3JiZXQuICdCaXNlY3Rpb24gZGl2aWRlcyB1c2VycyBhbmQgZGV2ZWxvcGVycycuIExXTi5uZXQuXQorLSBbW1s3XV1dIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMjAwNzEyMDcxMTM3MzQuR0ExNDU5OEBlbHRlLmh1L1tJbmdvIE1vbG5hci4gJ1JlOiBCVUcgMi42LjIzLXJjMyBjYW4ndCBzZWUgc2QgcGFydGl0aW9ucyBvbiBBbHBoYScuIExpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QuXQorLSBbW1s4XV1dIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy9naXQtYmlzZWN0Lmh0bWxbSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdC4gJ2dpdC1iaXNlY3QoMSkgTWFudWFsIFBhZ2UnLiBMaW51eCBLZXJuZWwgQXJjaGl2ZXMuXQorLSBbW1s5XV1dIGh0dHBzOi8vZ2l0aHViLmNvbS9FYWxkd3VsZi9iYmNob3BbRWFsZHd1bGYuICdiYmNob3AnLiBHaXRIdWIuXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4NmM1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKQEAgLTAsMCArMSw0OTkgQEAKK2dpdC1iaXNlY3QoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWJpc2VjdCAtIFVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWcKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYmlzZWN0JyA8c3ViY29tbWFuZD4gPG9wdGlvbnM+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhlIGNvbW1hbmQgdGFrZXMgdmFyaW91cyBzdWJjb21tYW5kcywgYW5kIGRpZmZlcmVudCBvcHRpb25zIGRlcGVuZGluZworb24gdGhlIHN1YmNvbW1hbmQ6CisKKyBnaXQgYmlzZWN0IHN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfT08dGVybT5dCisJCSAgWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0KKyBnaXQgYmlzZWN0IChiYWR8bmV3fDx0ZXJtLW5ldz4pIFs8cmV2Pl0KKyBnaXQgYmlzZWN0IChnb29kfG9sZHw8dGVybS1vbGQ+KSBbPHJldj4uLi5dCisgZ2l0IGJpc2VjdCB0ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tYmFkXQorIGdpdCBiaXNlY3Qgc2tpcCBbKDxyZXY+fDxyYW5nZT4pLi4uXQorIGdpdCBiaXNlY3QgcmVzZXQgWzxjb21taXQ+XQorIGdpdCBiaXNlY3QgKHZpc3VhbGl6ZXx2aWV3KQorIGdpdCBiaXNlY3QgcmVwbGF5IDxsb2dmaWxlPgorIGdpdCBiaXNlY3QgbG9nCisgZ2l0IGJpc2VjdCBydW4gPGNtZD4uLi4KKyBnaXQgYmlzZWN0IGhlbHAKKworVGhpcyBjb21tYW5kIHVzZXMgYSBiaW5hcnkgc2VhcmNoIGFsZ29yaXRobSB0byBmaW5kIHdoaWNoIGNvbW1pdCBpbgoreW91ciBwcm9qZWN0J3MgaGlzdG9yeSBpbnRyb2R1Y2VkIGEgYnVnLiBZb3UgdXNlIGl0IGJ5IGZpcnN0IHRlbGxpbmcKK2l0IGEgImJhZCIgY29tbWl0IHRoYXQgaXMga25vd24gdG8gY29udGFpbiB0aGUgYnVnLCBhbmQgYSAiZ29vZCIKK2NvbW1pdCB0aGF0IGlzIGtub3duIHRvIGJlIGJlZm9yZSB0aGUgYnVnIHdhcyBpbnRyb2R1Y2VkLiBUaGVuIGBnaXQKK2Jpc2VjdGAgcGlja3MgYSBjb21taXQgYmV0d2VlbiB0aG9zZSB0d28gZW5kcG9pbnRzIGFuZCBhc2tzIHlvdQord2hldGhlciB0aGUgc2VsZWN0ZWQgY29tbWl0IGlzICJnb29kIiBvciAiYmFkIi4gSXQgY29udGludWVzIG5hcnJvd2luZworZG93biB0aGUgcmFuZ2UgdW50aWwgaXQgZmluZHMgdGhlIGV4YWN0IGNvbW1pdCB0aGF0IGludHJvZHVjZWQgdGhlCitjaGFuZ2UuCisKK0luIGZhY3QsIGBnaXQgYmlzZWN0YCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBjaGFuZ2VkCisqYW55KiBwcm9wZXJ0eSBvZiB5b3VyIHByb2plY3Q7IGUuZy4sIHRoZSBjb21taXQgdGhhdCBmaXhlZCBhIGJ1Zywgb3IKK3RoZSBjb21taXQgdGhhdCBjYXVzZWQgYSBiZW5jaG1hcmsncyBwZXJmb3JtYW5jZSB0byBpbXByb3ZlLiBUbworc3VwcG9ydCB0aGlzIG1vcmUgZ2VuZXJhbCB1c2FnZSwgdGhlIHRlcm1zICJvbGQiIGFuZCAibmV3IiBjYW4gYmUgdXNlZAoraW4gcGxhY2Ugb2YgImdvb2QiIGFuZCAiYmFkIiwgb3IgeW91IGNhbiBjaG9vc2UgeW91ciBvd24gdGVybXMuIFNlZQorc2VjdGlvbiAiQWx0ZXJuYXRlIHRlcm1zIiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworQmFzaWMgYmlzZWN0IGNvbW1hbmRzOiBzdGFydCwgYmFkLCBnb29kCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIHRyeWluZyB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBicm9rZSBhCitmZWF0dXJlIHRoYXQgd2FzIGtub3duIHRvIHdvcmsgaW4gdmVyc2lvbiBgdjIuNi4xMy1yYzJgIG9mIHlvdXIKK3Byb2plY3QuIFlvdSBzdGFydCBhIGJpc2VjdCBzZXNzaW9uIGFzIGZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0CiskIGdpdCBiaXNlY3QgYmFkICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgdmVyc2lvbiBpcyBiYWQKKyQgZ2l0IGJpc2VjdCBnb29kIHYyLjYuMTMtcmMyICAgICMgdjIuNi4xMy1yYzIgaXMga25vd24gdG8gYmUgZ29vZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uY2UgeW91IGhhdmUgc3BlY2lmaWVkIGF0IGxlYXN0IG9uZSBiYWQgYW5kIG9uZSBnb29kIGNvbW1pdCwgYGdpdAorYmlzZWN0YCBzZWxlY3RzIGEgY29tbWl0IGluIHRoZSBtaWRkbGUgb2YgdGhhdCByYW5nZSBvZiBoaXN0b3J5LAorY2hlY2tzIGl0IG91dCwgYW5kIG91dHB1dHMgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCaXNlY3Rpbmc6IDY3NSByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTAgc3RlcHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHNob3VsZCBub3cgY29tcGlsZSB0aGUgY2hlY2tlZC1vdXQgdmVyc2lvbiBhbmQgdGVzdCBpdC4gSWYgdGhhdAordmVyc2lvbiB3b3JrcyBjb3JyZWN0bHksIHR5cGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgZ29vZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoYXQgdmVyc2lvbiBpcyBicm9rZW4sIHR5cGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgYmFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiBgZ2l0IGJpc2VjdGAgd2lsbCByZXNwb25kIHdpdGggc29tZXRoaW5nIGxpa2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCaXNlY3Rpbmc6IDMzNyByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgOSBzdGVwcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitLZWVwIHJlcGVhdGluZyB0aGUgcHJvY2VzczogY29tcGlsZSB0aGUgdHJlZSwgdGVzdCBpdCwgYW5kIGRlcGVuZGluZworb24gd2hldGhlciBpdCBpcyBnb29kIG9yIGJhZCBydW4gYGdpdCBiaXNlY3QgZ29vZGAgb3IgYGdpdCBiaXNlY3QgYmFkYAordG8gYXNrIGZvciB0aGUgbmV4dCBjb21taXQgdGhhdCBuZWVkcyB0ZXN0aW5nLgorCitFdmVudHVhbGx5IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSByZXZpc2lvbnMgbGVmdCB0byBpbnNwZWN0LCBhbmQgdGhlCitjb21tYW5kIHdpbGwgcHJpbnQgb3V0IGEgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IGJhZCBjb21taXQuIFRoZQorcmVmZXJlbmNlIGByZWZzL2Jpc2VjdC9iYWRgIHdpbGwgYmUgbGVmdCBwb2ludGluZyBhdCB0aGF0IGNvbW1pdC4KKworCitCaXNlY3QgcmVzZXQKK35+fn5+fn5+fn5+fgorCitBZnRlciBhIGJpc2VjdCBzZXNzaW9uLCB0byBjbGVhbiB1cCB0aGUgYmlzZWN0aW9uIHN0YXRlIGFuZCByZXR1cm4gdG8KK3RoZSBvcmlnaW5hbCBIRUFELCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHJldHVybiB5b3VyIHRyZWUgdG8gdGhlIGNvbW1pdCB0aGF0IHdhcyBjaGVja2VkCitvdXQgYmVmb3JlIGBnaXQgYmlzZWN0IHN0YXJ0YC4gIChBIG5ldyBgZ2l0IGJpc2VjdCBzdGFydGAgd2lsbCBhbHNvIGRvCit0aGF0LCBhcyBpdCBjbGVhbnMgdXAgdGhlIG9sZCBiaXNlY3Rpb24gc3RhdGUuKQorCitXaXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCB5b3UgY2FuIHJldHVybiB0byBhIGRpZmZlcmVudCBjb21taXQKK2luc3RlYWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGV4YW1wbGUsIGBnaXQgYmlzZWN0IHJlc2V0IGJpc2VjdC9iYWRgIHdpbGwgY2hlY2sgb3V0IHRoZSBmaXJzdAorYmFkIHJldmlzaW9uLCB3aGlsZSBgZ2l0IGJpc2VjdCByZXNldCBIRUFEYCB3aWxsIGxlYXZlIHlvdSBvbiB0aGUKK2N1cnJlbnQgYmlzZWN0aW9uIGNvbW1pdCBhbmQgYXZvaWQgc3dpdGNoaW5nIGNvbW1pdHMgYXQgYWxsLgorCisKK0FsdGVybmF0ZSB0ZXJtcworfn5+fn5+fn5+fn5+fn5+CisKK1NvbWV0aW1lcyB5b3UgYXJlIG5vdCBsb29raW5nIGZvciB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhCiticmVha2FnZSwgYnV0IHJhdGhlciBmb3IgYSBjb21taXQgdGhhdCBjYXVzZWQgYSBjaGFuZ2UgYmV0d2VlbiBzb21lCitvdGhlciAib2xkIiBzdGF0ZSBhbmQgIm5ldyIgc3RhdGUuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgYmUgbG9va2luZworZm9yIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgcGFydGljdWxhciBmaXguIE9yIHlvdSBtaWdodCBiZQorbG9va2luZyBmb3IgdGhlIGZpcnN0IGNvbW1pdCBpbiB3aGljaCB0aGUgc291cmNlLWNvZGUgZmlsZW5hbWVzIHdlcmUKK2ZpbmFsbHkgYWxsIGNvbnZlcnRlZCB0byB5b3VyIGNvbXBhbnkncyBuYW1pbmcgc3RhbmRhcmQuIE9yIHdoYXRldmVyLgorCitJbiBzdWNoIGNhc2VzIGl0IGNhbiBiZSB2ZXJ5IGNvbmZ1c2luZyB0byB1c2UgdGhlIHRlcm1zICJnb29kIiBhbmQKKyJiYWQiIHRvIHJlZmVyIHRvICJ0aGUgc3RhdGUgYmVmb3JlIHRoZSBjaGFuZ2UiIGFuZCAidGhlIHN0YXRlIGFmdGVyCit0aGUgY2hhbmdlIi4gU28gaW5zdGVhZCwgeW91IGNhbiB1c2UgdGhlIHRlcm1zICJvbGQiIGFuZCAibmV3IiwKK3Jlc3BlY3RpdmVseSwgaW4gcGxhY2Ugb2YgImdvb2QiIGFuZCAiYmFkIi4gKEJ1dCBub3RlIHRoYXQgeW91IGNhbm5vdAorbWl4ICJnb29kIiBhbmQgImJhZCIgd2l0aCAib2xkIiBhbmQgIm5ldyIgaW4gYSBzaW5nbGUgc2Vzc2lvbi4pCisKK0luIHRoaXMgbW9yZSBnZW5lcmFsIHVzYWdlLCB5b3UgcHJvdmlkZSBgZ2l0IGJpc2VjdGAgd2l0aCBhICJuZXciCitjb21taXQgdGhhdCBoYXMgc29tZSBwcm9wZXJ0eSBhbmQgYW4gIm9sZCIgY29tbWl0IHRoYXQgZG9lc24ndCBoYXZlIHRoYXQKK3Byb3BlcnR5LiBFYWNoIHRpbWUgYGdpdCBiaXNlY3RgIGNoZWNrcyBvdXQgYSBjb21taXQsIHlvdSB0ZXN0IGlmIHRoYXQKK2NvbW1pdCBoYXMgdGhlIHByb3BlcnR5LiBJZiBpdCBkb2VzLCBtYXJrIHRoZSBjb21taXQgYXMgIm5ldyI7CitvdGhlcndpc2UsIG1hcmsgaXQgYXMgIm9sZCIuIFdoZW4gdGhlIGJpc2VjdGlvbiBpcyBkb25lLCBgZ2l0IGJpc2VjdGAKK3dpbGwgcmVwb3J0IHdoaWNoIGNvbW1pdCBpbnRyb2R1Y2VkIHRoZSBwcm9wZXJ0eS4KKworVG8gdXNlICJvbGQiIGFuZCAibmV3IiBpbnN0ZWFkIG9mICJnb29kIiBhbmQgYmFkLCB5b3UgbXVzdCBydW4gYGdpdAorYmlzZWN0IHN0YXJ0YCB3aXRob3V0IGNvbW1pdHMgYXMgYXJndW1lbnQgYW5kIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmRzIHRvIGFkZCB0aGUgY29tbWl0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgYmlzZWN0IG9sZCBbPHJldj5dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gaW5kaWNhdGUgdGhhdCBhIGNvbW1pdCB3YXMgYmVmb3JlIHRoZSBzb3VnaHQgY2hhbmdlLCBvcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBiaXNlY3QgbmV3IFs8cmV2Pi4uLl0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byBpbmRpY2F0ZSB0aGF0IGl0IHdhcyBhZnRlci4KKworVG8gZ2V0IGEgcmVtaW5kZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIHRlcm1zLCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgYmlzZWN0IHRlcm1zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBnZXQganVzdCB0aGUgb2xkIChyZXNwZWN0aXZlbHkgbmV3KSB0ZXJtIHdpdGggYGdpdCBiaXNlY3QgdGVybXMKKy0tdGVybS1vbGRgIG9yIGBnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1nb29kYC4KKworSWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHlvdXIgb3duIHRlcm1zIGluc3RlYWQgb2YgImJhZCIvImdvb2QiIG9yCisibmV3Ii8ib2xkIiwgeW91IGNhbiBjaG9vc2UgYW55IG5hbWVzIHlvdSBsaWtlIChleGNlcHQgZXhpc3RpbmcgYmlzZWN0CitzdWJjb21tYW5kcyBsaWtlIGByZXNldGAsIGBzdGFydGAsIC4uLikgYnkgc3RhcnRpbmcgdGhlCitiaXNlY3Rpb24gdXNpbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgYmlzZWN0IHN0YXJ0IC0tdGVybS1vbGQgPHRlcm0tb2xkPiAtLXRlcm0tbmV3IDx0ZXJtLW5ldz4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBsb29raW5nIGZvciBhIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYQorcGVyZm9ybWFuY2UgcmVncmVzc2lvbiwgeW91IG1pZ2h0IHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLW9sZCBmYXN0IC0tdGVybS1uZXcgc2xvdworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09yIGlmIHlvdSBhcmUgbG9va2luZyBmb3IgdGhlIGNvbW1pdCB0aGF0IGZpeGVkIGEgYnVnLCB5b3UgbWlnaHQgdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGJpc2VjdCBzdGFydCAtLXRlcm0tbmV3IGZpeGVkIC0tdGVybS1vbGQgYnJva2VuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiwgdXNlIGBnaXQgYmlzZWN0IDx0ZXJtLW9sZD5gIGFuZCBgZ2l0IGJpc2VjdCA8dGVybS1uZXc+YCBpbnN0ZWFkCitvZiBgZ2l0IGJpc2VjdCBnb29kYCBhbmQgYGdpdCBiaXNlY3QgYmFkYCB0byBtYXJrIGNvbW1pdHMuCisKK0Jpc2VjdCB2aXN1YWxpemUvdmlldworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RvIHNlZSB0aGUgY3VycmVudGx5IHJlbWFpbmluZyBzdXNwZWN0cyBpbiAnZ2l0aycsIGlzc3VlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgZHVyaW5nIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyAodGhlIHN1YmNvbW1hbmQgYHZpZXdgIGNhbiBiZSB1c2VkCithcyBhbiBhbHRlcm5hdGl2ZSB0byBgdmlzdWFsaXplYCk6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHZpc3VhbGl6ZQorLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBgRElTUExBWWAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgJ2dpdCBsb2cnIGlzIHVzZWQKK2luc3RlYWQuICBZb3UgY2FuIGFsc28gZ2l2ZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBzdWNoIGFzIGAtcGAgYW5kCitgLS1zdGF0YC4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgdmlzdWFsaXplIC0tc3RhdAorLS0tLS0tLS0tLS0tCisKK0Jpc2VjdCBsb2cgYW5kIGJpc2VjdCByZXBsYXkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQWZ0ZXIgaGF2aW5nIG1hcmtlZCByZXZpc2lvbnMgYXMgZ29vZCBvciBiYWQsIGlzc3VlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgdG8gc2hvdyB3aGF0IGhhcyBiZWVuIGRvbmUgc28gZmFyOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBsb2cKKy0tLS0tLS0tLS0tLQorCitJZiB5b3UgZGlzY292ZXIgdGhhdCB5b3UgbWFkZSBhIG1pc3Rha2UgaW4gc3BlY2lmeWluZyB0aGUgc3RhdHVzIG9mIGEKK3JldmlzaW9uLCB5b3UgY2FuIHNhdmUgdGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQgdG8gYSBmaWxlLCBlZGl0IGl0IHRvCityZW1vdmUgdGhlIGluY29ycmVjdCBlbnRyaWVzLCBhbmQgdGhlbiBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvCityZXR1cm4gdG8gYSBjb3JyZWN0ZWQgc3RhdGU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0CiskIGdpdCBiaXNlY3QgcmVwbGF5IHRoYXQtZmlsZQorLS0tLS0tLS0tLS0tCisKK0F2b2lkaW5nIHRlc3RpbmcgYSBjb21taXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYsIGluIHRoZSBtaWRkbGUgb2YgYSBiaXNlY3Qgc2Vzc2lvbiwgeW91IGtub3cgdGhhdCB0aGUgc3VnZ2VzdGVkCityZXZpc2lvbiBpcyBub3QgYSBnb29kIG9uZSB0byB0ZXN0IChlLmcuIGl0IGZhaWxzIHRvIGJ1aWxkIGFuZCB5b3UKK2tub3cgdGhhdCB0aGUgZmFpbHVyZSBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGJ1ZyB5b3UKK2FyZSBjaGFzaW5nKSwgeW91IGNhbiBtYW51YWxseSBzZWxlY3QgYSBuZWFyYnkgY29tbWl0IGFuZCB0ZXN0IHRoYXQKK29uZSBpbnN0ZWFkLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgZ29vZC9iYWQJCQkjIHByZXZpb3VzIHJvdW5kIHdhcyBnb29kIG9yIGJhZC4KK0Jpc2VjdGluZzogMzM3IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSA5IHN0ZXBzKQorJCBnaXQgYmlzZWN0IHZpc3VhbGl6ZQkJCSMgb29wcywgdGhhdCBpcyB1bmludGVyZXN0aW5nLgorJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MwkJIyB0cnkgMyByZXZpc2lvbnMgYmVmb3JlIHdoYXQKKwkJCQkJIyB3YXMgc3VnZ2VzdGVkCistLS0tLS0tLS0tLS0KKworVGhlbiBjb21waWxlIGFuZCB0ZXN0IHRoZSBjaG9zZW4gcmV2aXNpb24sIGFuZCBhZnRlcndhcmRzIG1hcmsKK3RoZSByZXZpc2lvbiBhcyBnb29kIG9yIGJhZCBpbiB0aGUgdXN1YWwgbWFubmVyLgorCitCaXNlY3Qgc2tpcAorfn5+fn5+fn5+fn4KKworSW5zdGVhZCBvZiBjaG9vc2luZyBhIG5lYXJieSBjb21taXQgYnkgeW91cnNlbGYsIHlvdSBjYW4gYXNrIEdpdCB0byBkbworaXQgZm9yIHlvdSBieSBpc3N1aW5nIHRoZSBjb21tYW5kOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBza2lwICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgdmVyc2lvbiBjYW5ub3QgYmUgdGVzdGVkCistLS0tLS0tLS0tLS0KKworSG93ZXZlciwgaWYgeW91IHNraXAgYSBjb21taXQgYWRqYWNlbnQgdG8gdGhlIG9uZSB5b3UgYXJlIGxvb2tpbmcgZm9yLAorR2l0IHdpbGwgYmUgdW5hYmxlIHRvIHRlbGwgZXhhY3RseSB3aGljaCBvZiB0aG9zZSBjb21taXRzIHdhcyB0aGUKK2ZpcnN0IGJhZCBvbmUuCisKK1lvdSBjYW4gYWxzbyBza2lwIGEgcmFuZ2Ugb2YgY29tbWl0cywgaW5zdGVhZCBvZiBqdXN0IG9uZSBjb21taXQsCit1c2luZyByYW5nZSBub3RhdGlvbi4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHNraXAgdjIuNS4udjIuNgorLS0tLS0tLS0tLS0tCisKK1RoaXMgdGVsbHMgdGhlIGJpc2VjdCBwcm9jZXNzIHRoYXQgbm8gY29tbWl0IGFmdGVyIGB2Mi41YCwgdXAgdG8gYW5kCitpbmNsdWRpbmcgYHYyLjZgLCBzaG91bGQgYmUgdGVzdGVkLgorCitOb3RlIHRoYXQgaWYgeW91IGFsc28gd2FudCB0byBza2lwIHRoZSBmaXJzdCBjb21taXQgb2YgdGhlIHJhbmdlIHlvdQord291bGQgaXNzdWUgdGhlIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHNraXAgdjIuNSB2Mi41Li52Mi42CistLS0tLS0tLS0tLS0KKworVGhpcyB0ZWxscyB0aGUgYmlzZWN0IHByb2Nlc3MgdGhhdCB0aGUgY29tbWl0cyBiZXR3ZWVuIGB2Mi41YCBhbmQKK2B2Mi42YCAoaW5jbHVzaXZlKSBzaG91bGQgYmUgc2tpcHBlZC4KKworCitDdXR0aW5nIGRvd24gYmlzZWN0aW9uIGJ5IGdpdmluZyBtb3JlIHBhcmFtZXRlcnMgdG8gYmlzZWN0IHN0YXJ0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gZnVydGhlciBjdXQgZG93biB0aGUgbnVtYmVyIG9mIHRyaWFscywgaWYgeW91IGtub3cgd2hhdCBwYXJ0IG9mCit0aGUgdHJlZSBpcyBpbnZvbHZlZCBpbiB0aGUgcHJvYmxlbSB5b3UgYXJlIHRyYWNraW5nIGRvd24sIGJ5IHNwZWNpZnlpbmcKK3BhdGggcGFyYW1ldGVycyB3aGVuIGlzc3VpbmcgdGhlIGBiaXNlY3Qgc3RhcnRgIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IC0tIGFyY2gvaTM4NiBpbmNsdWRlL2FzbS1pMzg2CistLS0tLS0tLS0tLS0KKworSWYgeW91IGtub3cgYmVmb3JlaGFuZCBtb3JlIHRoYW4gb25lIGdvb2QgY29tbWl0LCB5b3UgY2FuIG5hcnJvdyB0aGUKK2Jpc2VjdCBzcGFjZSBkb3duIGJ5IHNwZWNpZnlpbmcgYWxsIG9mIHRoZSBnb29kIGNvbW1pdHMgaW1tZWRpYXRlbHkgYWZ0ZXIKK3RoZSBiYWQgY29tbWl0IHdoZW4gaXNzdWluZyB0aGUgYGJpc2VjdCBzdGFydGAgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgdjIuNi4yMC1yYzYgdjIuNi4yMC1yYzQgdjIuNi4yMC1yYzEgLS0KKyAgICAgICAgICAgICAgICAgICAjIHYyLjYuMjAtcmM2IGlzIGJhZAorICAgICAgICAgICAgICAgICAgICMgdjIuNi4yMC1yYzQgYW5kIHYyLjYuMjAtcmMxIGFyZSBnb29kCistLS0tLS0tLS0tLS0KKworQmlzZWN0IHJ1bgorfn5+fn5+fn5+fgorCitJZiB5b3UgaGF2ZSBhIHNjcmlwdCB0aGF0IGNhbiB0ZWxsIGlmIHRoZSBjdXJyZW50IHNvdXJjZSBjb2RlIGlzIGdvb2QKK29yIGJhZCwgeW91IGNhbiBiaXNlY3QgYnkgaXNzdWluZyB0aGUgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcnVuIG15X3NjcmlwdCBhcmd1bWVudHMKKy0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhlIHNjcmlwdCAoYG15X3NjcmlwdGAgaW4gdGhlIGFib3ZlIGV4YW1wbGUpIHNob3VsZCBleGl0Cit3aXRoIGNvZGUgMCBpZiB0aGUgY3VycmVudCBzb3VyY2UgY29kZSBpcyBnb29kL29sZCwgYW5kIGV4aXQgd2l0aCBhCitjb2RlIGJldHdlZW4gMSBhbmQgMTI3IChpbmNsdXNpdmUpLCBleGNlcHQgMTI1LCBpZiB0aGUgY3VycmVudCBzb3VyY2UKK2NvZGUgaXMgYmFkL25ldy4KKworQW55IG90aGVyIGV4aXQgY29kZSB3aWxsIGFib3J0IHRoZSBiaXNlY3QgcHJvY2Vzcy4gSXQgc2hvdWxkIGJlIG5vdGVkCit0aGF0IGEgcHJvZ3JhbSB0aGF0IHRlcm1pbmF0ZXMgdmlhIGBleGl0KC0xKWAgbGVhdmVzICQ/ID0gMjU1LCAoc2VlIHRoZQorZXhpdCgzKSBtYW51YWwgcGFnZSksIGFzIHRoZSB2YWx1ZSBpcyBjaG9wcGVkIHdpdGggYCYgMDM3N2AuCisKK1RoZSBzcGVjaWFsIGV4aXQgY29kZSAxMjUgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgY3VycmVudCBzb3VyY2UgY29kZQorY2Fubm90IGJlIHRlc3RlZC4gSWYgdGhlIHNjcmlwdCBleGl0cyB3aXRoIHRoaXMgY29kZSwgdGhlIGN1cnJlbnQKK3JldmlzaW9uIHdpbGwgYmUgc2tpcHBlZCAoc2VlIGBnaXQgYmlzZWN0IHNraXBgIGFib3ZlKS4gMTI1IHdhcyBjaG9zZW4KK2FzIHRoZSBoaWdoZXN0IHNlbnNpYmxlIHZhbHVlIHRvIHVzZSBmb3IgdGhpcyBwdXJwb3NlLCBiZWNhdXNlIDEyNiBhbmQgMTI3CithcmUgdXNlZCBieSBQT1NJWCBzaGVsbHMgdG8gc2lnbmFsIHNwZWNpZmljIGVycm9yIHN0YXR1cyAoMTI3IGlzIGZvcgorY29tbWFuZCBub3QgZm91bmQsIDEyNiBpcyBmb3IgY29tbWFuZCBmb3VuZCBidXQgbm90IGV4ZWN1dGFibGUtLXRoZXNlCitkZXRhaWxzIGRvIG5vdCBtYXR0ZXIsIGFzIHRoZXkgYXJlIG5vcm1hbCBlcnJvcnMgaW4gdGhlIHNjcmlwdCwgYXMgZmFyIGFzCitgYmlzZWN0IHJ1bmAgaXMgY29uY2VybmVkKS4KKworWW91IG1heSBvZnRlbiBmaW5kIHRoYXQgZHVyaW5nIGEgYmlzZWN0IHNlc3Npb24geW91IHdhbnQgdG8gaGF2ZQordGVtcG9yYXJ5IG1vZGlmaWNhdGlvbnMgKGUuZy4gcy8jZGVmaW5lIERFQlVHIDAvI2RlZmluZSBERUJVRyAxLyBpbiBhCitoZWFkZXIgZmlsZSwgb3IgInJldmlzaW9uIHRoYXQgZG9lcyBub3QgaGF2ZSB0aGlzIGNvbW1pdCBuZWVkcyB0aGlzCitwYXRjaCBhcHBsaWVkIHRvIHdvcmsgYXJvdW5kIGFub3RoZXIgcHJvYmxlbSB0aGlzIGJpc2VjdGlvbiBpcyBub3QKK2ludGVyZXN0ZWQgaW4iKSBhcHBsaWVkIHRvIHRoZSByZXZpc2lvbiBiZWluZyB0ZXN0ZWQuCisKK1RvIGNvcGUgd2l0aCBzdWNoIGEgc2l0dWF0aW9uLCBhZnRlciB0aGUgaW5uZXIgJ2dpdCBiaXNlY3QnIGZpbmRzIHRoZQorbmV4dCByZXZpc2lvbiB0byB0ZXN0LCB0aGUgc2NyaXB0IGNhbiBhcHBseSB0aGUgcGF0Y2gKK2JlZm9yZSBjb21waWxpbmcsIHJ1biB0aGUgcmVhbCB0ZXN0LCBhbmQgYWZ0ZXJ3YXJkcyBkZWNpZGUgaWYgdGhlCityZXZpc2lvbiAocG9zc2libHkgd2l0aCB0aGUgbmVlZGVkIHBhdGNoKSBwYXNzZWQgdGhlIHRlc3QgYW5kIHRoZW4KK3Jld2luZCB0aGUgdHJlZSB0byB0aGUgcHJpc3RpbmUgc3RhdGUuICBGaW5hbGx5IHRoZSBzY3JpcHQgc2hvdWxkIGV4aXQKK3dpdGggdGhlIHN0YXR1cyBvZiB0aGUgcmVhbCB0ZXN0IHRvIGxldCB0aGUgYGdpdCBiaXNlY3QgcnVuYCBjb21tYW5kIGxvb3AKK2RldGVybWluZSB0aGUgZXZlbnR1YWwgb3V0Y29tZSBvZiB0aGUgYmlzZWN0IHNlc3Npb24uCisKK09QVElPTlMKKy0tLS0tLS0KKy0tbm8tY2hlY2tvdXQ6OgorKworRG8gbm90IGNoZWNrb3V0IHRoZSBuZXcgd29ya2luZyB0cmVlIGF0IGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBiaXNlY3Rpb24KK3Byb2Nlc3MuIEluc3RlYWQganVzdCB1cGRhdGUgYSBzcGVjaWFsIHJlZmVyZW5jZSBuYW1lZCBgQklTRUNUX0hFQURgIHRvIG1ha2UKK2l0IHBvaW50IHRvIHRoZSBjb21taXQgdGhhdCBzaG91bGQgYmUgdGVzdGVkLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCB3aGVuIHRoZSB0ZXN0IHlvdSB3b3VsZCBwZXJmb3JtIGluIGVhY2ggc3RlcAorZG9lcyBub3QgcmVxdWlyZSBhIGNoZWNrZWQgb3V0IHRyZWUuCisrCitJZiB0aGUgcmVwb3NpdG9yeSBpcyBiYXJlLCBgLS1uby1jaGVja291dGAgaXMgYXNzdW1lZC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogQXV0b21hdGljYWxseSBiaXNlY3QgYSBicm9rZW4gYnVpbGQgYmV0d2VlbiB2MS4yIGFuZCBIRUFEOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgSEVBRCB2MS4yIC0tICAgICAgIyBIRUFEIGlzIGJhZCwgdjEuMiBpcyBnb29kCiskIGdpdCBiaXNlY3QgcnVuIG1ha2UgICAgICAgICAgICAgICAgIyAibWFrZSIgYnVpbGRzIHRoZSBhcHAKKyQgZ2l0IGJpc2VjdCByZXNldCAgICAgICAgICAgICAgICAgICAjIHF1aXQgdGhlIGJpc2VjdCBzZXNzaW9uCistLS0tLS0tLS0tLS0KKworKiBBdXRvbWF0aWNhbGx5IGJpc2VjdCBhIHRlc3QgZmFpbHVyZSBiZXR3ZWVuIG9yaWdpbiBhbmQgSEVBRDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgb3JpZ2luIC0tICAgICMgSEVBRCBpcyBiYWQsIG9yaWdpbiBpcyBnb29kCiskIGdpdCBiaXNlY3QgcnVuIG1ha2UgdGVzdCAgICAgICAgICAgIyAibWFrZSB0ZXN0IiBidWlsZHMgYW5kIHRlc3RzCiskIGdpdCBiaXNlY3QgcmVzZXQgICAgICAgICAgICAgICAgICAgIyBxdWl0IHRoZSBiaXNlY3Qgc2Vzc2lvbgorLS0tLS0tLS0tLS0tCisKKyogQXV0b21hdGljYWxseSBiaXNlY3QgYSBicm9rZW4gdGVzdCBjYXNlOgorKworLS0tLS0tLS0tLS0tCiskIGNhdCB+L3Rlc3Quc2gKKyMhL2Jpbi9zaAorbWFrZSB8fCBleGl0IDEyNSAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBza2lwcyBicm9rZW4gYnVpbGRzCit+L2NoZWNrX3Rlc3RfY2FzZS5zaCAgICAgICAgICAgICAgICAgIyBkb2VzIHRoZSB0ZXN0IGNhc2UgcGFzcz8KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIEhFQUR+MTAgLS0gICAjIGN1bHByaXQgaXMgYW1vbmcgdGhlIGxhc3QgMTAKKyQgZ2l0IGJpc2VjdCBydW4gfi90ZXN0LnNoCiskIGdpdCBiaXNlY3QgcmVzZXQgICAgICAgICAgICAgICAgICAgIyBxdWl0IHRoZSBiaXNlY3Qgc2Vzc2lvbgorLS0tLS0tLS0tLS0tCisrCitIZXJlIHdlIHVzZSBhIGB0ZXN0LnNoYCBjdXN0b20gc2NyaXB0LiBJbiB0aGlzIHNjcmlwdCwgaWYgYG1ha2VgCitmYWlscywgd2Ugc2tpcCB0aGUgY3VycmVudCBjb21taXQuCitgY2hlY2tfdGVzdF9jYXNlLnNoYCBzaG91bGQgYGV4aXQgMGAgaWYgdGhlIHRlc3QgY2FzZSBwYXNzZXMsCithbmQgYGV4aXQgMWAgb3RoZXJ3aXNlLgorKworSXQgaXMgc2FmZXIgaWYgYm90aCBgdGVzdC5zaGAgYW5kIGBjaGVja190ZXN0X2Nhc2Uuc2hgIGFyZQorb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSB0byBwcmV2ZW50IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBiaXNlY3QsCittYWtlIGFuZCB0ZXN0IHByb2Nlc3NlcyBhbmQgdGhlIHNjcmlwdHMuCisKKyogQXV0b21hdGljYWxseSBiaXNlY3Qgd2l0aCB0ZW1wb3JhcnkgbW9kaWZpY2F0aW9ucyAoaG90LWZpeCk6CisrCistLS0tLS0tLS0tLS0KKyQgY2F0IH4vdGVzdC5zaAorIyEvYmluL3NoCisKKyMgdHdlYWsgdGhlIHdvcmtpbmcgdHJlZSBieSBtZXJnaW5nIHRoZSBob3QtZml4IGJyYW5jaAorIyBhbmQgdGhlbiBhdHRlbXB0IGEgYnVpbGQKK2lmCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtLW5vLWZmIGhvdC1maXggJiYKKwltYWtlCit0aGVuCisJIyBydW4gcHJvamVjdCBzcGVjaWZpYyB0ZXN0IGFuZCByZXBvcnQgaXRzIHN0YXR1cworCX4vY2hlY2tfdGVzdF9jYXNlLnNoCisJc3RhdHVzPSQ/CitlbHNlCisJIyB0ZWxsIHRoZSBjYWxsZXIgdGhpcyBpcyB1bnRlc3RhYmxlCisJc3RhdHVzPTEyNQorZmkKKworIyB1bmRvIHRoZSB0d2VhayB0byBhbGxvdyBjbGVhbiBmbGlwcGluZyB0byB0aGUgbmV4dCBjb21taXQKK2dpdCByZXNldCAtLWhhcmQKKworIyByZXR1cm4gY29udHJvbAorZXhpdCAkc3RhdHVzCistLS0tLS0tLS0tLS0KKysKK1RoaXMgYXBwbGllcyBtb2RpZmljYXRpb25zIGZyb20gYSBob3QtZml4IGJyYW5jaCBiZWZvcmUgZWFjaCB0ZXN0IHJ1biwKK2UuZy4gaW4gY2FzZSB5b3VyIGJ1aWxkIG9yIHRlc3QgZW52aXJvbm1lbnQgY2hhbmdlZCBzbyB0aGF0IG9sZGVyCityZXZpc2lvbnMgbWF5IG5lZWQgYSBmaXggd2hpY2ggbmV3ZXIgb25lcyBoYXZlIGFscmVhZHkuIChNYWtlIHN1cmUgdGhlCitob3QtZml4IGJyYW5jaCBpcyBiYXNlZCBvZmYgYSBjb21taXQgd2hpY2ggaXMgY29udGFpbmVkIGluIGFsbCByZXZpc2lvbnMKK3doaWNoIHlvdSBhcmUgYmlzZWN0aW5nLCBzbyB0aGF0IHRoZSBtZXJnZSBkb2VzIG5vdCBwdWxsIGluIHRvbyBtdWNoLCBvcgordXNlIGBnaXQgY2hlcnJ5LXBpY2tgIGluc3RlYWQgb2YgYGdpdCBtZXJnZWAuKQorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IGEgYnJva2VuIHRlc3QgY2FzZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgSEVBRH4xMCAtLSAgICMgY3VscHJpdCBpcyBhbW9uZyB0aGUgbGFzdCAxMAorJCBnaXQgYmlzZWN0IHJ1biBzaCAtYyAibWFrZSB8fCBleGl0IDEyNTsgfi9jaGVja190ZXN0X2Nhc2Uuc2giCiskIGdpdCBiaXNlY3QgcmVzZXQgICAgICAgICAgICAgICAgICAgIyBxdWl0IHRoZSBiaXNlY3Qgc2Vzc2lvbgorLS0tLS0tLS0tLS0tCisrCitUaGlzIHNob3dzIHRoYXQgeW91IGNhbiBkbyB3aXRob3V0IGEgcnVuIHNjcmlwdCBpZiB5b3Ugd3JpdGUgdGhlIHRlc3QKK29uIGEgc2luZ2xlIGxpbmUuCisKKyogTG9jYXRlIGEgZ29vZCByZWdpb24gb2YgdGhlIG9iamVjdCBncmFwaCBpbiBhIGRhbWFnZWQgcmVwb3NpdG9yeQorKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgSEVBRCA8a25vd24tZ29vZC1jb21taXQ+IFsgPGJvdW5kYXJ5LWNvbW1pdD4gLi4uIF0gLS1uby1jaGVja291dAorJCBnaXQgYmlzZWN0IHJ1biBzaCAtYyAnCisJR09PRD0kKGdpdCBmb3ItZWFjaC1yZWYgIi0tZm9ybWF0PSUob2JqZWN0bmFtZSkiIHJlZnMvYmlzZWN0L2dvb2QtKikgJiYKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEJJU0VDVF9IRUFEIC0tbm90ICRHT09EID50bXAuJCQgJiYKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0ID4vZGV2L251bGwgPHRtcC4kJAorCXJjPSQ/CisJcm0gLWYgdG1wLiQkCisJdGVzdCAkcmMgPSAwJworCiskIGdpdCBiaXNlY3QgcmVzZXQgICAgICAgICAgICAgICAgICAgIyBxdWl0IHRoZSBiaXNlY3Qgc2Vzc2lvbgorLS0tLS0tLS0tLS0tCisrCitJbiB0aGlzIGNhc2UsIHdoZW4gJ2dpdCBiaXNlY3QgcnVuJyBmaW5pc2hlcywgYmlzZWN0L2JhZCB3aWxsIHJlZmVyIHRvIGEgY29tbWl0IHRoYXQKK2hhcyBhdCBsZWFzdCBvbmUgcGFyZW50IHdob3NlIHJlYWNoYWJsZSBncmFwaCBpcyBmdWxseSB0cmF2ZXJzYWJsZSBpbiB0aGUgc2Vuc2UKK3JlcXVpcmVkIGJ5ICdnaXQgcGFjayBvYmplY3RzJy4KKworKiBMb29rIGZvciBhIGZpeCBpbnN0ZWFkIG9mIGEgcmVncmVzc2lvbiBpbiB0aGUgY29kZQorKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQKKyQgZ2l0IGJpc2VjdCBuZXcgSEVBRCAgICAjIGN1cnJlbnQgY29tbWl0IGlzIG1hcmtlZCBhcyBuZXcKKyQgZ2l0IGJpc2VjdCBvbGQgSEVBRH4xMCAjIHRoZSB0ZW50aCBjb21taXQgZnJvbSBub3cgaXMgbWFya2VkIGFzIG9sZAorLS0tLS0tLS0tLS0tCisrCitvcjoKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IC0tdGVybS1vbGQgYnJva2VuIC0tdGVybS1uZXcgZml4ZWQKKyQgZ2l0IGJpc2VjdCBmaXhlZAorJCBnaXQgYmlzZWN0IGJyb2tlbiBIRUFEfjEwCistLS0tLS0tLS0tLS0KKworR2V0dGluZyBoZWxwCit+fn5+fn5+fn5+fn4KKworVXNlIGBnaXQgYmlzZWN0YCB0byBnZXQgYSBzaG9ydCB1c2FnZSBkZXNjcmlwdGlvbiwgYW5kIGBnaXQgYmlzZWN0CitoZWxwYCBvciBgZ2l0IGJpc2VjdCAtaGAgdG8gZ2V0IGEgbG9uZyB1c2FnZSBkZXNjcmlwdGlvbi4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rOmdpdC1iaXNlY3QtbGsyMDA5Lmh0bWxbRmlnaHRpbmcgcmVncmVzc2lvbnMgd2l0aCBnaXQgYmlzZWN0XSwKK2xpbmtnaXQ6Z2l0LWJsYW1lWzFdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTgxNTQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CkBAIC0wLDAgKzEsMjM2IEBACitnaXQtYmxhbWUoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYmxhbWUgLSBTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGJsYW1lJyBbLWNdIFstYl0gWy1sXSBbLS1yb290XSBbLXRdIFstZl0gWy1uXSBbLXNdIFstZV0gWy1wXSBbLXddIFstLWluY3JlbWVudGFsXQorCSAgICBbLUwgPHJhbmdlPl0gWy1TIDxyZXZzLWZpbGU+XSBbLU1dIFstQ10gWy1DXSBbLUNdIFstLXNpbmNlPTxkYXRlPl0KKwkgICAgWy0taWdub3JlLXJldiA8cmV2Pl0gWy0taWdub3JlLXJldnMtZmlsZSA8ZmlsZT5dCisJICAgIFstLXByb2dyZXNzXSBbLS1hYmJyZXY9PG4+XSBbPHJldj4gfCAtLWNvbnRlbnRzIDxmaWxlPiB8IC0tcmV2ZXJzZSA8cmV2Pi4uPHJldj5dCisJICAgIFstLV0gPGZpbGU+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitBbm5vdGF0ZXMgZWFjaCBsaW5lIGluIHRoZSBnaXZlbiBmaWxlIHdpdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgcmV2aXNpb24gd2hpY2gKK2xhc3QgbW9kaWZpZWQgdGhlIGxpbmUuIE9wdGlvbmFsbHksIHN0YXJ0IGFubm90YXRpbmcgZnJvbSB0aGUgZ2l2ZW4gcmV2aXNpb24uCisKK1doZW4gc3BlY2lmaWVkIG9uZSBvciBtb3JlIHRpbWVzLCBgLUxgIHJlc3RyaWN0cyBhbm5vdGF0aW9uIHRvIHRoZSByZXF1ZXN0ZWQKK2xpbmVzLgorCitUaGUgb3JpZ2luIG9mIGxpbmVzIGlzIGF1dG9tYXRpY2FsbHkgZm9sbG93ZWQgYWNyb3NzIHdob2xlLWZpbGUKK3JlbmFtZXMgKGN1cnJlbnRseSB0aGVyZSBpcyBubyBvcHRpb24gdG8gdHVybiB0aGUgcmVuYW1lLWZvbGxvd2luZworb2ZmKS4gVG8gZm9sbG93IGxpbmVzIG1vdmVkIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlciwgb3IgdG8gZm9sbG93CitsaW5lcyB0aGF0IHdlcmUgY29waWVkIGFuZCBwYXN0ZWQgZnJvbSBhbm90aGVyIGZpbGUsIGV0Yy4sIHNlZSB0aGUKK2AtQ2AgYW5kIGAtTWAgb3B0aW9ucy4KKworVGhlIHJlcG9ydCBkb2VzIG5vdCB0ZWxsIHlvdSBhbnl0aGluZyBhYm91dCBsaW5lcyB3aGljaCBoYXZlIGJlZW4gZGVsZXRlZCBvcgorcmVwbGFjZWQ7IHlvdSBuZWVkIHRvIHVzZSBhIHRvb2wgc3VjaCBhcyAnZ2l0IGRpZmYnIG9yIHRoZSAicGlja2F4ZSIKK2ludGVyZmFjZSBicmllZmx5IG1lbnRpb25lZCBpbiB0aGUgZm9sbG93aW5nIHBhcmFncmFwaC4KKworQXBhcnQgZnJvbSBzdXBwb3J0aW5nIGZpbGUgYW5ub3RhdGlvbiwgR2l0IGFsc28gc3VwcG9ydHMgc2VhcmNoaW5nIHRoZQorZGV2ZWxvcG1lbnQgaGlzdG9yeSBmb3Igd2hlbiBhIGNvZGUgc25pcHBldCBvY2N1cnJlZCBpbiBhIGNoYW5nZS4gVGhpcyBtYWtlcyBpdAorcG9zc2libGUgdG8gdHJhY2sgd2hlbiBhIGNvZGUgc25pcHBldCB3YXMgYWRkZWQgdG8gYSBmaWxlLCBtb3ZlZCBvciBjb3BpZWQKK2JldHdlZW4gZmlsZXMsIGFuZCBldmVudHVhbGx5IGRlbGV0ZWQgb3IgcmVwbGFjZWQuIEl0IHdvcmtzIGJ5IHNlYXJjaGluZyBmb3IKK2EgdGV4dCBzdHJpbmcgaW4gdGhlIGRpZmYuIEEgc21hbGwgZXhhbXBsZSBvZiB0aGUgcGlja2F4ZSBpbnRlcmZhY2UKK3RoYXQgc2VhcmNoZXMgZm9yIGBibGFtZV91c2FnZWA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAtUydibGFtZV91c2FnZScKKzUwNDBmMTdlYmExNTUwNGJhZDY2YjE0YTY0NWJkZGQ5YjAxNWViYjcgYmxhbWUgLVMgPGFuY2VzdHJ5LWZpbGU+CitlYTRjN2Y5YmY2OWU3ODFkZDBjZDg4ZDJiY2NiMmJmNWNjMTVjOWE3IGdpdC1ibGFtZTogTWFrZSB0aGUgb3V0cHV0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPUFRJT05TCistLS0tLS0tCitpbmNsdWRlOjpibGFtZS1vcHRpb25zLnR4dFtdCisKKy1jOjoKKwlVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgbGlua2dpdDpnaXQtYW5ub3RhdGVbMV0gKERlZmF1bHQ6IG9mZikuCisKKy0tc2NvcmUtZGVidWc6OgorCUluY2x1ZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIG1vdmVtZW50IG9mCisJbGluZXMgYmV0d2VlbiBmaWxlcyAoc2VlIGAtQ2ApIGFuZCBsaW5lcyBtb3ZlZCB3aXRoaW4gYQorCWZpbGUgKHNlZSBgLU1gKS4gIFRoZSBmaXJzdCBudW1iZXIgbGlzdGVkIGlzIHRoZSBzY29yZS4KKwlUaGlzIGlzIHRoZSBudW1iZXIgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgZGV0ZWN0ZWQKKwlhcyBoYXZpbmcgYmVlbiBtb3ZlZCBiZXR3ZWVuIG9yIHdpdGhpbiBmaWxlcy4gIFRoaXMgbXVzdCBiZSBhYm92ZQorCWEgY2VydGFpbiB0aHJlc2hvbGQgZm9yICdnaXQgYmxhbWUnIHRvIGNvbnNpZGVyIHRob3NlIGxpbmVzCisJb2YgY29kZSB0byBoYXZlIGJlZW4gbW92ZWQuCisKKy1mOjoKKy0tc2hvdy1uYW1lOjoKKwlTaG93IHRoZSBmaWxlbmFtZSBpbiB0aGUgb3JpZ2luYWwgY29tbWl0LiAgQnkgZGVmYXVsdAorCXRoZSBmaWxlbmFtZSBpcyBzaG93biBpZiB0aGVyZSBpcyBhbnkgbGluZSB0aGF0IGNhbWUgZnJvbSBhCisJZmlsZSB3aXRoIGEgZGlmZmVyZW50IG5hbWUsIGR1ZSB0byByZW5hbWUgZGV0ZWN0aW9uLgorCistbjo6CistLXNob3ctbnVtYmVyOjoKKwlTaG93IHRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgY29tbWl0IChEZWZhdWx0OiBvZmYpLgorCistczo6CisJU3VwcHJlc3MgdGhlIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgZnJvbSB0aGUgb3V0cHV0LgorCistZTo6CistLXNob3ctZW1haWw6OgorCVNob3cgdGhlIGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIGF1dGhvciBuYW1lIChEZWZhdWx0OiBvZmYpLgorCVRoaXMgY2FuIGFsc28gYmUgY29udHJvbGxlZCB2aWEgdGhlIGBibGFtZS5zaG93RW1haWxgIGNvbmZpZworCW9wdGlvbi4KKworLXc6OgorCUlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gY29tcGFyaW5nIHRoZSBwYXJlbnQncyB2ZXJzaW9uIGFuZAorCXRoZSBjaGlsZCdzIHRvIGZpbmQgd2hlcmUgdGhlIGxpbmVzIGNhbWUgZnJvbS4KKworLS1hYmJyZXY9PG4+OjoKKwlJbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IDcrMSBoZXhhZGVjaW1hbCBkaWdpdHMgYXMgdGhlCisJYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUsIHVzZSA8bj4rMSBkaWdpdHMuIE5vdGUgdGhhdCAxIGNvbHVtbgorCWlzIHVzZWQgZm9yIGEgY2FyZXQgdG8gbWFyayB0aGUgYm91bmRhcnkgY29tbWl0LgorCisKK1RIRSBQT1JDRUxBSU4gRk9STUFUCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGlzIGZvcm1hdCwgZWFjaCBsaW5lIGlzIG91dHB1dCBhZnRlciBhIGhlYWRlcjsgdGhlCitoZWFkZXIgYXQgdGhlIG1pbmltdW0gaGFzIHRoZSBmaXJzdCBsaW5lIHdoaWNoIGhhczoKKworLSA0MC1ieXRlIFNIQS0xIG9mIHRoZSBjb21taXQgdGhlIGxpbmUgaXMgYXR0cmlidXRlZCB0bzsKKy0gdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBsaW5lIGluIHRoZSBvcmlnaW5hbCBmaWxlOworLSB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxpbmUgaW4gdGhlIGZpbmFsIGZpbGU7CistIG9uIGEgbGluZSB0aGF0IHN0YXJ0cyBhIGdyb3VwIG9mIGxpbmVzIGZyb20gYSBkaWZmZXJlbnQKKyAgY29tbWl0IHRoYW4gdGhlIHByZXZpb3VzIG9uZSwgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGlzCisgIGdyb3VwLiAgT24gc3Vic2VxdWVudCBsaW5lcyB0aGlzIGZpZWxkIGlzIGFic2VudC4KKworVGhpcyBoZWFkZXIgbGluZSBpcyBmb2xsb3dlZCBieSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uCithdCBsZWFzdCBvbmNlIGZvciBlYWNoIGNvbW1pdDoKKworLSB0aGUgYXV0aG9yIG5hbWUgKCJhdXRob3IiKSwgZW1haWwgKCJhdXRob3ItbWFpbCIpLCB0aW1lCisgICgiYXV0aG9yLXRpbWUiKSwgYW5kIHRpbWUgem9uZSAoImF1dGhvci10eiIpOyBzaW1pbGFybHkKKyAgZm9yIGNvbW1pdHRlci4KKy0gdGhlIGZpbGVuYW1lIGluIHRoZSBjb21taXQgdGhhdCB0aGUgbGluZSBpcyBhdHRyaWJ1dGVkIHRvLgorLSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlICgic3VtbWFyeSIpLgorCitUaGUgY29udGVudHMgb2YgdGhlIGFjdHVhbCBsaW5lIGlzIG91dHB1dCBhZnRlciB0aGUgYWJvdmUKK2hlYWRlciwgcHJlZml4ZWQgYnkgYSBUQUIuIFRoaXMgaXMgdG8gYWxsb3cgYWRkaW5nIG1vcmUKK2hlYWRlciBlbGVtZW50cyBsYXRlci4KKworVGhlIHBvcmNlbGFpbiBmb3JtYXQgZ2VuZXJhbGx5IHN1cHByZXNzZXMgY29tbWl0IGluZm9ybWF0aW9uIHRoYXQgaGFzCithbHJlYWR5IGJlZW4gc2Vlbi4gRm9yIGV4YW1wbGUsIHR3byBsaW5lcyB0aGF0IGFyZSBibGFtZWQgdG8gdGhlIHNhbWUKK2NvbW1pdCB3aWxsIGJvdGggYmUgc2hvd24sIGJ1dCB0aGUgZGV0YWlscyBmb3IgdGhhdCBjb21taXQgd2lsbCBiZSBzaG93bgorb25seSBvbmNlLiBUaGlzIGlzIG1vcmUgZWZmaWNpZW50LCBidXQgbWF5IHJlcXVpcmUgbW9yZSBzdGF0ZSBiZSBrZXB0IGJ5Cit0aGUgcmVhZGVyLiBUaGUgYC0tbGluZS1wb3JjZWxhaW5gIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvdXRwdXQgZnVsbAorY29tbWl0IGluZm9ybWF0aW9uIGZvciBlYWNoIGxpbmUsIGFsbG93aW5nIHNpbXBsZXIgKGJ1dCBsZXNzIGVmZmljaWVudCkKK3VzYWdlIGxpa2U6CisKKwkjIGNvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgYXR0cmlidXRlZCB0byBlYWNoIGF1dGhvcgorCWdpdCBibGFtZSAtLWxpbmUtcG9yY2VsYWluIGZpbGUgfAorCXNlZCAtbiAncy9eYXV0aG9yIC8vcCcgfAorCXNvcnQgfCB1bmlxIC1jIHwgc29ydCAtcm4KKworCitTUEVDSUZZSU5HIFJBTkdFUworLS0tLS0tLS0tLS0tLS0tLS0KKworVW5saWtlICdnaXQgYmxhbWUnIGFuZCAnZ2l0IGFubm90YXRlJyBpbiBvbGRlciB2ZXJzaW9ucyBvZiBnaXQsIHRoZSBleHRlbnQKK29mIHRoZSBhbm5vdGF0aW9uIGNhbiBiZSBsaW1pdGVkIHRvIGJvdGggbGluZSByYW5nZXMgYW5kIHJldmlzaW9uCityYW5nZXMuIFRoZSBgLUxgIG9wdGlvbiwgd2hpY2ggbGltaXRzIGFubm90YXRpb24gdG8gYSByYW5nZSBvZiBsaW5lcywgbWF5IGJlCitzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCisKK1doZW4geW91IGFyZSBpbnRlcmVzdGVkIGluIGZpbmRpbmcgdGhlIG9yaWdpbiBmb3IKK2xpbmVzIDQwLTYwIGZvciBmaWxlIGBmb29gLCB5b3UgY2FuIHVzZSB0aGUgYC1MYCBvcHRpb24gbGlrZSBzbworKHRoZXkgbWVhbiB0aGUgc2FtZSB0aGluZyAtLSBib3RoIGFzayBmb3IgMjEgbGluZXMgc3RhcnRpbmcgYXQKK2xpbmUgNDApOgorCisJZ2l0IGJsYW1lIC1MIDQwLDYwIGZvbworCWdpdCBibGFtZSAtTCA0MCwrMjEgZm9vCisKK0Fsc28geW91IGNhbiB1c2UgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3BlY2lmeSB0aGUgbGluZSByYW5nZToKKworCWdpdCBibGFtZSAtTCAnL15zdWIgaGVsbG8gey8sL159JC8nIGZvbworCit3aGljaCBsaW1pdHMgdGhlIGFubm90YXRpb24gdG8gdGhlIGJvZHkgb2YgdGhlIGBoZWxsb2Agc3Vicm91dGluZS4KKworV2hlbiB5b3UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGNoYW5nZXMgb2xkZXIgdGhhbiB2ZXJzaW9uCit2Mi42LjE4LCBvciBjaGFuZ2VzIG9sZGVyIHRoYW4gMyB3ZWVrcywgeW91IGNhbiB1c2UgcmV2aXNpb24KK3JhbmdlIHNwZWNpZmllcnMgIHNpbWlsYXIgdG8gJ2dpdCByZXYtbGlzdCc6CisKKwlnaXQgYmxhbWUgdjIuNi4xOC4uIC0tIGZvbworCWdpdCBibGFtZSAtLXNpbmNlPTMud2Vla3MgLS0gZm9vCisKK1doZW4gcmV2aXNpb24gcmFuZ2Ugc3BlY2lmaWVycyBhcmUgdXNlZCB0byBsaW1pdCB0aGUgYW5ub3RhdGlvbiwKK2xpbmVzIHRoYXQgaGF2ZSBub3QgY2hhbmdlZCBzaW5jZSB0aGUgcmFuZ2UgYm91bmRhcnkgKGVpdGhlciB0aGUKK2NvbW1pdCB2Mi42LjE4IG9yIHRoZSBtb3N0IHJlY2VudCBjb21taXQgdGhhdCBpcyBtb3JlIHRoYW4gMword2Vla3Mgb2xkIGluIHRoZSBhYm92ZSBleGFtcGxlKSBhcmUgYmxhbWVkIGZvciB0aGF0IHJhbmdlCitib3VuZGFyeSBjb21taXQuCisKK0EgcGFydGljdWxhcmx5IHVzZWZ1bCB3YXkgaXMgdG8gc2VlIGlmIGFuIGFkZGVkIGZpbGUgaGFzIGxpbmVzCitjcmVhdGVkIGJ5IGNvcHktYW5kLXBhc3RlIGZyb20gZXhpc3RpbmcgZmlsZXMuICBTb21ldGltZXMgdGhpcworaW5kaWNhdGVzIHRoYXQgdGhlIGRldmVsb3BlciB3YXMgYmVpbmcgc2xvcHB5IGFuZCBkaWQgbm90CityZWZhY3RvciB0aGUgY29kZSBwcm9wZXJseS4gIFlvdSBjYW4gZmlyc3QgZmluZCB0aGUgY29tbWl0IHRoYXQKK2ludHJvZHVjZWQgdGhlIGZpbGUgd2l0aDoKKworCWdpdCBsb2cgLS1kaWZmLWZpbHRlcj1BIC0tcHJldHR5PXNob3J0IC0tIGZvbworCithbmQgdGhlbiBhbm5vdGF0ZSB0aGUgY2hhbmdlIGJldHdlZW4gdGhlIGNvbW1pdCBhbmQgaXRzCitwYXJlbnRzLCB1c2luZyBgY29tbWl0XiFgIG5vdGF0aW9uOgorCisJZ2l0IGJsYW1lIC1DIC1DIC1mICRjb21taXReISAtLSBmb28KKworCitJTkNSRU1FTlRBTCBPVVRQVVQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGNhbGxlZCB3aXRoIGAtLWluY3JlbWVudGFsYCBvcHRpb24sIHRoZSBjb21tYW5kIG91dHB1dHMgdGhlCityZXN1bHQgYXMgaXQgaXMgYnVpbHQuICBUaGUgb3V0cHV0IGdlbmVyYWxseSB3aWxsIHRhbGsgYWJvdXQKK2xpbmVzIHRvdWNoZWQgYnkgbW9yZSByZWNlbnQgY29tbWl0cyBmaXJzdCAoaS5lLiB0aGUgbGluZXMgd2lsbAorYmUgYW5ub3RhdGVkIG91dCBvZiBvcmRlcikgYW5kIGlzIG1lYW50IHRvIGJlIHVzZWQgYnkKK2ludGVyYWN0aXZlIHZpZXdlcnMuCisKK1RoZSBvdXRwdXQgZm9ybWF0IGlzIHNpbWlsYXIgdG8gdGhlIFBvcmNlbGFpbiBmb3JtYXQsIGJ1dCBpdAorZG9lcyBub3QgY29udGFpbiB0aGUgYWN0dWFsIGxpbmVzIGZyb20gdGhlIGZpbGUgdGhhdCBpcyBiZWluZworYW5ub3RhdGVkLgorCisuIEVhY2ggYmxhbWUgZW50cnkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbGluZSBvZjoKKworCTw0MC1ieXRlIGhleCBzaGExPiA8c291cmNlbGluZT4gPHJlc3VsdGxpbmU+IDxudW1fbGluZXM+CisrCitMaW5lIG51bWJlcnMgY291bnQgZnJvbSAxLgorCisuIFRoZSBmaXJzdCB0aW1lIHRoYXQgYSBjb21taXQgc2hvd3MgdXAgaW4gdGhlIHN0cmVhbSwgaXQgaGFzIHZhcmlvdXMKKyAgb3RoZXIgaW5mb3JtYXRpb24gYWJvdXQgaXQgcHJpbnRlZCBvdXQgd2l0aCBhIG9uZS13b3JkIHRhZyBhdCB0aGUKKyAgYmVnaW5uaW5nIG9mIGVhY2ggbGluZSBkZXNjcmliaW5nIHRoZSBleHRyYSBjb21taXQgaW5mb3JtYXRpb24gKGF1dGhvciwKKyAgZW1haWwsIGNvbW1pdHRlciwgZGF0ZXMsIHN1bW1hcnksIGV0Yy4pLgorCisuIFVubGlrZSB0aGUgUG9yY2VsYWluIGZvcm1hdCwgdGhlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGlzIGFsd2F5cworICBnaXZlbiBhbmQgdGVybWluYXRlcyB0aGUgZW50cnk6CisKKwkiZmlsZW5hbWUiIDx3aGl0ZXNwYWNlLXF1b3RlZC1maWxlbmFtZS1nb2VzLWhlcmU+CisrCithbmQgdGh1cyBpdCBpcyByZWFsbHkgcXVpdGUgZWFzeSB0byBwYXJzZSBmb3Igc29tZSBsaW5lLSBhbmQgd29yZC1vcmllbnRlZAorcGFyc2VyICh3aGljaCBzaG91bGQgYmUgcXVpdGUgbmF0dXJhbCBmb3IgbW9zdCBzY3JpcHRpbmcgbGFuZ3VhZ2VzKS4KKysKK1tOT1RFXQorRm9yIHBlb3BsZSB3aG8gZG8gcGFyc2luZzogdG8gbWFrZSBpdCBtb3JlIHJvYnVzdCwganVzdCBpZ25vcmUgYW55CitsaW5lcyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBvbmUgKCI8c2hhMT4iIGFuZCAiZmlsZW5hbWUiIGxpbmVzKQord2hlcmUgeW91IGRvIG5vdCByZWNvZ25pemUgdGhlIHRhZyB3b3JkcyAob3IgY2FyZSBhYm91dCB0aGF0IHBhcnRpY3VsYXIKK29uZSkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgImV4dGVuZGVkIGluZm9ybWF0aW9uIiBsaW5lcy4gVGhhdCB3YXksIGlmCit0aGVyZSBpcyBldmVyIGFkZGVkIGluZm9ybWF0aW9uIChsaWtlIHRoZSBjb21taXQgZW5jb2Rpbmcgb3IgZXh0ZW5kZWQKK2NvbW1pdCBjb21tZW50YXJ5KSwgYSBibGFtZSB2aWV3ZXIgd2lsbCBub3QgY2FyZS4KKworCitNQVBQSU5HIEFVVEhPUlMKKy0tLS0tLS0tLS0tLS0tLQorCitpbmNsdWRlOjptYWlsbWFwLnR4dFtdCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1hbm5vdGF0ZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CkBAIC0wLDAgKzEsMzgzIEBACitnaXQtYnJhbmNoKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1icmFuY2ggLSBMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYnJhbmNoJyBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNob3ctY3VycmVudF0KKwlbLXYgWy0tYWJicmV2PTxsZW5ndGg+IHwgLS1uby1hYmJyZXZdXQorCVstLWNvbHVtbls9PG9wdGlvbnM+XSB8IC0tbm8tY29sdW1uXSBbLS1zb3J0PTxrZXk+XQorCVsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0KKwlbLS1jb250YWlucyBbPGNvbW1pdF1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dCisJWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSBbLS1mb3JtYXQ9PGZvcm1hdD5dCisJWygtciB8IC0tcmVtb3RlcykgfCAoLWEgfCAtLWFsbCldCisJWy0tbGlzdF0gWzxwYXR0ZXJuPi4uLl0KKydnaXQgYnJhbmNoJyBbLS10cmFjayB8IC0tbm8tdHJhY2tdIFstZl0gPGJyYW5jaG5hbWU+IFs8c3RhcnQtcG9pbnQ+XQorJ2dpdCBicmFuY2gnICgtLXNldC11cHN0cmVhbS10bz08dXBzdHJlYW0+IHwgLXUgPHVwc3RyZWFtPikgWzxicmFuY2huYW1lPl0KKydnaXQgYnJhbmNoJyAtLXVuc2V0LXVwc3RyZWFtIFs8YnJhbmNobmFtZT5dCisnZ2l0IGJyYW5jaCcgKC1tIHwgLU0pIFs8b2xkYnJhbmNoPl0gPG5ld2JyYW5jaD4KKydnaXQgYnJhbmNoJyAoLWMgfCAtQykgWzxvbGRicmFuY2g+XSA8bmV3YnJhbmNoPgorJ2dpdCBicmFuY2gnICgtZCB8IC1EKSBbLXJdIDxicmFuY2huYW1lPi4uLgorJ2dpdCBicmFuY2gnIC0tZWRpdC1kZXNjcmlwdGlvbiBbPGJyYW5jaG5hbWU+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSWYgYC0tbGlzdGAgaXMgZ2l2ZW4sIG9yIGlmIHRoZXJlIGFyZSBubyBub24tb3B0aW9uIGFyZ3VtZW50cywgZXhpc3RpbmcKK2JyYW5jaGVzIGFyZSBsaXN0ZWQ7IHRoZSBjdXJyZW50IGJyYW5jaCB3aWxsIGJlIGhpZ2hsaWdodGVkIGluIGdyZWVuIGFuZAorbWFya2VkIHdpdGggYW4gYXN0ZXJpc2suICBBbnkgYnJhbmNoZXMgY2hlY2tlZCBvdXQgaW4gbGlua2VkIHdvcmt0cmVlcyB3aWxsCitiZSBoaWdobGlnaHRlZCBpbiBjeWFuIGFuZCBtYXJrZWQgd2l0aCBhIHBsdXMgc2lnbi4gT3B0aW9uIGAtcmAgY2F1c2VzIHRoZQorcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHRvIGJlIGxpc3RlZCwKK2FuZCBvcHRpb24gYC1hYCBzaG93cyBib3RoIGxvY2FsIGFuZCByZW1vdGUgYnJhbmNoZXMuCisKK0lmIGEgYDxwYXR0ZXJuPmAKK2lzIGdpdmVuLCBpdCBpcyB1c2VkIGFzIGEgc2hlbGwgd2lsZGNhcmQgdG8gcmVzdHJpY3QgdGhlIG91dHB1dCB0bworbWF0Y2hpbmcgYnJhbmNoZXMuIElmIG11bHRpcGxlIHBhdHRlcm5zIGFyZSBnaXZlbiwgYSBicmFuY2ggaXMgc2hvd24gaWYKK2l0IG1hdGNoZXMgYW55IG9mIHRoZSBwYXR0ZXJucy4KKworTm90ZSB0aGF0IHdoZW4gcHJvdmlkaW5nIGEKK2A8cGF0dGVybj5gLCB5b3UgbXVzdCB1c2UgYC0tbGlzdGA7IG90aGVyd2lzZSB0aGUgY29tbWFuZCBtYXkgYmUgaW50ZXJwcmV0ZWQKK2FzIGJyYW5jaCBjcmVhdGlvbi4KKworV2l0aCBgLS1jb250YWluc2AsIHNob3dzIG9ubHkgdGhlIGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgbmFtZWQgY29tbWl0CisoaW4gb3RoZXIgd29yZHMsIHRoZSBicmFuY2hlcyB3aG9zZSB0aXAgY29tbWl0cyBhcmUgZGVzY2VuZGFudHMgb2YgdGhlCituYW1lZCBjb21taXQpLCBgLS1uby1jb250YWluc2AgaW52ZXJ0cyBpdC4gV2l0aCBgLS1tZXJnZWRgLCBvbmx5IGJyYW5jaGVzCittZXJnZWQgaW50byB0aGUgbmFtZWQgY29tbWl0IChpLmUuIHRoZSBicmFuY2hlcyB3aG9zZSB0aXAgY29tbWl0cyBhcmUKK3JlYWNoYWJsZSBmcm9tIHRoZSBuYW1lZCBjb21taXQpIHdpbGwgYmUgbGlzdGVkLiAgV2l0aCBgLS1uby1tZXJnZWRgIG9ubHkKK2JyYW5jaGVzIG5vdCBtZXJnZWQgaW50byB0aGUgbmFtZWQgY29tbWl0IHdpbGwgYmUgbGlzdGVkLiAgSWYgdGhlIDxjb21taXQ+Cithcmd1bWVudCBpcyBtaXNzaW5nIGl0IGRlZmF1bHRzIHRvIGBIRUFEYCAoaS5lLiB0aGUgdGlwIG9mIHRoZSBjdXJyZW50CiticmFuY2gpLgorCitUaGUgY29tbWFuZCdzIHNlY29uZCBmb3JtIGNyZWF0ZXMgYSBuZXcgYnJhbmNoIGhlYWQgbmFtZWQgPGJyYW5jaG5hbWU+Cit3aGljaCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgYEhFQURgLCBvciA8c3RhcnQtcG9pbnQ+IGlmIGdpdmVuLiBBcyBhCitzcGVjaWFsIGNhc2UsIGZvciA8c3RhcnQtcG9pbnQ+LCB5b3UgbWF5IHVzZSBgIkEuLi5CImAgYXMgYSBzaG9ydGN1dCBmb3IKK3RoZSBtZXJnZSBiYXNlIG9mIGBBYCBhbmQgYEJgIGlmIHRoZXJlIGlzIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UuIFlvdQorY2FuIGxlYXZlIG91dCBhdCBtb3N0IG9uZSBvZiBgQWAgYW5kIGBCYCwgaW4gd2hpY2ggY2FzZSBpdCBkZWZhdWx0cyB0bworYEhFQURgLgorCitOb3RlIHRoYXQgdGhpcyB3aWxsIGNyZWF0ZSB0aGUgbmV3IGJyYW5jaCwgYnV0IGl0IHdpbGwgbm90IHN3aXRjaCB0aGUKK3dvcmtpbmcgdHJlZSB0byBpdDsgdXNlICJnaXQgc3dpdGNoIDxuZXdicmFuY2g+IiB0byBzd2l0Y2ggdG8gdGhlCituZXcgYnJhbmNoLgorCitXaGVuIGEgbG9jYWwgYnJhbmNoIGlzIHN0YXJ0ZWQgb2ZmIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCwgR2l0IHNldHMgdXAgdGhlCiticmFuY2ggKHNwZWNpZmljYWxseSB0aGUgYGJyYW5jaC48bmFtZT4ucmVtb3RlYCBhbmQgYGJyYW5jaC48bmFtZT4ubWVyZ2VgCitjb25maWd1cmF0aW9uIGVudHJpZXMpIHNvIHRoYXQgJ2dpdCBwdWxsJyB3aWxsIGFwcHJvcHJpYXRlbHkgbWVyZ2UgZnJvbQordGhlIHJlbW90ZS10cmFja2luZyBicmFuY2guIFRoaXMgYmVoYXZpb3IgbWF5IGJlIGNoYW5nZWQgdmlhIHRoZSBnbG9iYWwKK2BicmFuY2guYXV0b1NldHVwTWVyZ2VgIGNvbmZpZ3VyYXRpb24gZmxhZy4gVGhhdCBzZXR0aW5nIGNhbiBiZQorb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUgYC0tdHJhY2tgIGFuZCBgLS1uby10cmFja2Agb3B0aW9ucywgYW5kCitjaGFuZ2VkIGxhdGVyIHVzaW5nIGBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvYC4KKworV2l0aCBhIGAtbWAgb3IgYC1NYCBvcHRpb24sIDxvbGRicmFuY2g+IHdpbGwgYmUgcmVuYW1lZCB0byA8bmV3YnJhbmNoPi4KK0lmIDxvbGRicmFuY2g+IGhhZCBhIGNvcnJlc3BvbmRpbmcgcmVmbG9nLCBpdCBpcyByZW5hbWVkIHRvIG1hdGNoCis8bmV3YnJhbmNoPiwgYW5kIGEgcmVmbG9nIGVudHJ5IGlzIGNyZWF0ZWQgdG8gcmVtZW1iZXIgdGhlIGJyYW5jaAorcmVuYW1pbmcuIElmIDxuZXdicmFuY2g+IGV4aXN0cywgLU0gbXVzdCBiZSB1c2VkIHRvIGZvcmNlIHRoZSByZW5hbWUKK3RvIGhhcHBlbi4KKworVGhlIGAtY2AgYW5kIGAtQ2Agb3B0aW9ucyBoYXZlIHRoZSBleGFjdCBzYW1lIHNlbWFudGljcyBhcyBgLW1gIGFuZAorYC1NYCwgZXhjZXB0IGluc3RlYWQgb2YgdGhlIGJyYW5jaCBiZWluZyByZW5hbWVkIGl0IGFsb25nIHdpdGggaXRzCitjb25maWcgYW5kIHJlZmxvZyB3aWxsIGJlIGNvcGllZCB0byBhIG5ldyBuYW1lLgorCitXaXRoIGEgYC1kYCBvciBgLURgIG9wdGlvbiwgYDxicmFuY2huYW1lPmAgd2lsbCBiZSBkZWxldGVkLiAgWW91IG1heQorc3BlY2lmeSBtb3JlIHRoYW4gb25lIGJyYW5jaCBmb3IgZGVsZXRpb24uICBJZiB0aGUgYnJhbmNoIGN1cnJlbnRseQoraGFzIGEgcmVmbG9nIHRoZW4gdGhlIHJlZmxvZyB3aWxsIGFsc28gYmUgZGVsZXRlZC4KKworVXNlIGAtcmAgdG9nZXRoZXIgd2l0aCBgLWRgIHRvIGRlbGV0ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuIE5vdGUsIHRoYXQgaXQKK29ubHkgbWFrZXMgc2Vuc2UgdG8gZGVsZXRlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpZiB0aGV5IG5vIGxvbmdlciBleGlzdAoraW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IG9yIGlmICdnaXQgZmV0Y2gnIHdhcyBjb25maWd1cmVkIG5vdCB0byBmZXRjaAordGhlbSBhZ2Fpbi4gU2VlIGFsc28gdGhlICdwcnVuZScgc3ViY29tbWFuZCBvZiBsaW5rZ2l0OmdpdC1yZW1vdGVbMV0gZm9yIGEKK3dheSB0byBjbGVhbiB1cCBhbGwgb2Jzb2xldGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1kOjoKKy0tZGVsZXRlOjoKKwlEZWxldGUgYSBicmFuY2guIFRoZSBicmFuY2ggbXVzdCBiZSBmdWxseSBtZXJnZWQgaW4gaXRzCisJdXBzdHJlYW0gYnJhbmNoLCBvciBpbiBgSEVBRGAgaWYgbm8gdXBzdHJlYW0gd2FzIHNldCB3aXRoCisJYC0tdHJhY2tgIG9yIGAtLXNldC11cHN0cmVhbS10b2AuCisKKy1EOjoKKwlTaG9ydGN1dCBmb3IgYC0tZGVsZXRlIC0tZm9yY2VgLgorCistLWNyZWF0ZS1yZWZsb2c6OgorCUNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nLiAgVGhpcyBhY3RpdmF0ZXMgcmVjb3JkaW5nIG9mCisJYWxsIGNoYW5nZXMgbWFkZSB0byB0aGUgYnJhbmNoIHJlZiwgZW5hYmxpbmcgdXNlIG9mIGRhdGUKKwliYXNlZCBzaGExIGV4cHJlc3Npb25zIHN1Y2ggYXMgIjxicmFuY2huYW1lPkBce3llc3RlcmRheX0iLgorCU5vdGUgdGhhdCBpbiBub24tYmFyZSByZXBvc2l0b3JpZXMsIHJlZmxvZ3MgYXJlIHVzdWFsbHkKKwllbmFibGVkIGJ5IGRlZmF1bHQgYnkgdGhlIGBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXNgIGNvbmZpZyBvcHRpb24uCisJVGhlIG5lZ2F0ZWQgZm9ybSBgLS1uby1jcmVhdGUtcmVmbG9nYCBvbmx5IG92ZXJyaWRlcyBhbiBlYXJsaWVyCisJYC0tY3JlYXRlLXJlZmxvZ2AsIGJ1dCBjdXJyZW50bHkgZG9lcyBub3QgbmVnYXRlIHRoZSBzZXR0aW5nIG9mCisJYGNvcmUubG9nQWxsUmVmVXBkYXRlc2AuCisKKy1mOjoKKy0tZm9yY2U6OgorCVJlc2V0IDxicmFuY2huYW1lPiB0byA8c3RhcnRwb2ludD4sIGV2ZW4gaWYgPGJyYW5jaG5hbWU+IGV4aXN0cworCWFscmVhZHkuIFdpdGhvdXQgYC1mYCwgJ2dpdCBicmFuY2gnIHJlZnVzZXMgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGJyYW5jaC4KKwlJbiBjb21iaW5hdGlvbiB3aXRoIGAtZGAgKG9yIGAtLWRlbGV0ZWApLCBhbGxvdyBkZWxldGluZyB0aGUKKwlicmFuY2ggaXJyZXNwZWN0aXZlIG9mIGl0cyBtZXJnZWQgc3RhdHVzLiBJbiBjb21iaW5hdGlvbiB3aXRoCisJYC1tYCAob3IgYC0tbW92ZWApLCBhbGxvdyByZW5hbWluZyB0aGUgYnJhbmNoIGV2ZW4gaWYgdGhlIG5ldworCWJyYW5jaCBuYW1lIGFscmVhZHkgZXhpc3RzLCB0aGUgc2FtZSBhcHBsaWVzIGZvciBgLWNgIChvciBgLS1jb3B5YCkuCisKKy1tOjoKKy0tbW92ZTo6CisJTW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZmxvZy4KKworLU06OgorCVNob3J0Y3V0IGZvciBgLS1tb3ZlIC0tZm9yY2VgLgorCistYzo6CistLWNvcHk6OgorCUNvcHkgYSBicmFuY2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZmxvZy4KKworLUM6OgorCVNob3J0Y3V0IGZvciBgLS1jb3B5IC0tZm9yY2VgLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlDb2xvciBicmFuY2hlcyB0byBoaWdobGlnaHQgY3VycmVudCwgbG9jYWwsIGFuZAorCXJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKwlUaGUgdmFsdWUgbXVzdCBiZSBhbHdheXMgKHRoZSBkZWZhdWx0KSwgbmV2ZXIsIG9yIGF1dG8uCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIGJyYW5jaCBjb2xvcnMsIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGdpdmVzIHRoZQorCWRlZmF1bHQgdG8gY29sb3Igb3V0cHV0LgorCVNhbWUgYXMgYC0tY29sb3I9bmV2ZXJgLgorCistaTo6CistLWlnbm9yZS1jYXNlOjoKKwlTb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYnJhbmNoZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUuCisKKy0tY29sdW1uWz08b3B0aW9ucz5dOjoKKy0tbm8tY29sdW1uOjoKKwlEaXNwbGF5IGJyYW5jaCBsaXN0aW5nIGluIGNvbHVtbnMuIFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisJY29sdW1uLmJyYW5jaCBmb3Igb3B0aW9uIHN5bnRheC5gLS1jb2x1bW5gIGFuZCBgLS1uby1jb2x1bW5gCisJd2l0aG91dCBvcHRpb25zIGFyZSBlcXVpdmFsZW50IHRvICdhbHdheXMnIGFuZCAnbmV2ZXInIHJlc3BlY3RpdmVseS4KKysKK1RoaXMgb3B0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSBpbiBub24tdmVyYm9zZSBtb2RlLgorCistcjo6CistLXJlbW90ZXM6OgorCUxpc3Qgb3IgZGVsZXRlIChpZiB1c2VkIHdpdGggLWQpIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisJQ29tYmluZSB3aXRoIGAtLWxpc3RgIHRvIG1hdGNoIHRoZSBvcHRpb25hbCBwYXR0ZXJuKHMpLgorCistYTo6CistLWFsbDo6CisJTGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhbmQgbG9jYWwgYnJhbmNoZXMuCisJQ29tYmluZSB3aXRoIGAtLWxpc3RgIHRvIG1hdGNoIG9wdGlvbmFsIHBhdHRlcm4ocykuCisKKy1sOjoKKy0tbGlzdDo6CisJTGlzdCBicmFuY2hlcy4gIFdpdGggb3B0aW9uYWwgYDxwYXR0ZXJuPi4uLmAsIGUuZy4gYGdpdAorCWJyYW5jaCAtLWxpc3QgJ21haW50LSonYCwgbGlzdCBvbmx5IHRoZSBicmFuY2hlcyB0aGF0IG1hdGNoCisJdGhlIHBhdHRlcm4ocykuCisKKy0tc2hvdy1jdXJyZW50OjoKKwlQcmludCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2guIEluIGRldGFjaGVkIEhFQUQgc3RhdGUsCisJbm90aGluZyBpcyBwcmludGVkLgorCistdjo6CistdnY6OgorLS12ZXJib3NlOjoKKwlXaGVuIGluIGxpc3QgbW9kZSwKKwlzaG93IHNoYTEgYW5kIGNvbW1pdCBzdWJqZWN0IGxpbmUgZm9yIGVhY2ggaGVhZCwgYWxvbmcgd2l0aAorCXJlbGF0aW9uc2hpcCB0byB1cHN0cmVhbSBicmFuY2ggKGlmIGFueSkuIElmIGdpdmVuIHR3aWNlLCBwcmludAorCXRoZSBwYXRoIG9mIHRoZSBsaW5rZWQgd29ya3RyZWUgKGlmIGFueSkgYW5kIHRoZSBuYW1lIG9mIHRoZSB1cHN0cmVhbQorCWJyYW5jaCwgYXMgd2VsbCAoc2VlIGFsc28gYGdpdCByZW1vdGUgc2hvdyA8cmVtb3RlPmApLiAgTm90ZSB0aGF0IHRoZQorCWN1cnJlbnQgd29ya3RyZWUncyBIRUFEIHdpbGwgbm90IGhhdmUgaXRzIHBhdGggcHJpbnRlZCAoaXQgd2lsbCBhbHdheXMKKwliZSB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5KS4KKworLXE6OgorLS1xdWlldDo6CisJQmUgbW9yZSBxdWlldCB3aGVuIGNyZWF0aW5nIG9yIGRlbGV0aW5nIGEgYnJhbmNoLCBzdXBwcmVzc2luZworCW5vbi1lcnJvciBtZXNzYWdlcy4KKworLS1hYmJyZXY9PGxlbmd0aD46OgorCUFsdGVyIHRoZSBzaGExJ3MgbWluaW11bSBkaXNwbGF5IGxlbmd0aCBpbiB0aGUgb3V0cHV0IGxpc3RpbmcuCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgNyBhbmQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGBjb3JlLmFiYnJldmAKKwljb25maWcgb3B0aW9uLgorCistLW5vLWFiYnJldjo6CisJRGlzcGxheSB0aGUgZnVsbCBzaGExcyBpbiB0aGUgb3V0cHV0IGxpc3RpbmcgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW5nIHRoZW0uCisKKy10OjoKKy0tdHJhY2s6OgorCVdoZW4gY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCBzZXQgdXAgYGJyYW5jaC48bmFtZT4ucmVtb3RlYCBhbmQKKwlgYnJhbmNoLjxuYW1lPi5tZXJnZWAgY29uZmlndXJhdGlvbiBlbnRyaWVzIHRvIG1hcmsgdGhlCisJc3RhcnQtcG9pbnQgYnJhbmNoIGFzICJ1cHN0cmVhbSIgZnJvbSB0aGUgbmV3IGJyYW5jaC4gVGhpcworCWNvbmZpZ3VyYXRpb24gd2lsbCB0ZWxsIGdpdCB0byBzaG93IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUKKwl0d28gYnJhbmNoZXMgaW4gYGdpdCBzdGF0dXNgIGFuZCBgZ2l0IGJyYW5jaCAtdmAuIEZ1cnRoZXJtb3JlLAorCWl0IGRpcmVjdHMgYGdpdCBwdWxsYCB3aXRob3V0IGFyZ3VtZW50cyB0byBwdWxsIGZyb20gdGhlCisJdXBzdHJlYW0gd2hlbiB0aGUgbmV3IGJyYW5jaCBpcyBjaGVja2VkIG91dC4KKysKK1RoaXMgYmVoYXZpb3IgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgc3RhcnQgcG9pbnQgaXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLgorU2V0IHRoZSBicmFuY2guYXV0b1NldHVwTWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBgZmFsc2VgIGlmIHlvdQord2FudCBgZ2l0IHN3aXRjaGAsIGBnaXQgY2hlY2tvdXRgIGFuZCBgZ2l0IGJyYW5jaGAgdG8gYWx3YXlzIGJlaGF2ZSBhcyBpZiBgLS1uby10cmFja2AKK3dlcmUgZ2l2ZW4uIFNldCBpdCB0byBgYWx3YXlzYCBpZiB5b3Ugd2FudCB0aGlzIGJlaGF2aW9yIHdoZW4gdGhlCitzdGFydC1wb2ludCBpcyBlaXRoZXIgYSBsb2NhbCBvciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLgorCistLW5vLXRyYWNrOjoKKwlEbyBub3Qgc2V0IHVwICJ1cHN0cmVhbSIgY29uZmlndXJhdGlvbiwgZXZlbiBpZiB0aGUKKwlicmFuY2guYXV0b1NldHVwTWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB0cnVlLgorCistLXNldC11cHN0cmVhbTo6CisJQXMgdGhpcyBvcHRpb24gaGFkIGNvbmZ1c2luZyBzeW50YXgsIGl0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisJUGxlYXNlIHVzZSBgLS10cmFja2Agb3IgYC0tc2V0LXVwc3RyZWFtLXRvYCBpbnN0ZWFkLgorCistdSA8dXBzdHJlYW0+OjoKKy0tc2V0LXVwc3RyZWFtLXRvPTx1cHN0cmVhbT46OgorCVNldCB1cCA8YnJhbmNobmFtZT4ncyB0cmFja2luZyBpbmZvcm1hdGlvbiBzbyA8dXBzdHJlYW0+IGlzCisJY29uc2lkZXJlZCA8YnJhbmNobmFtZT4ncyB1cHN0cmVhbSBicmFuY2guIElmIG5vIDxicmFuY2huYW1lPgorCWlzIHNwZWNpZmllZCwgdGhlbiBpdCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2guCisKKy0tdW5zZXQtdXBzdHJlYW06OgorCVJlbW92ZSB0aGUgdXBzdHJlYW0gaW5mb3JtYXRpb24gZm9yIDxicmFuY2huYW1lPi4gSWYgbm8gYnJhbmNoCisJaXMgc3BlY2lmaWVkIGl0IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKworLS1lZGl0LWRlc2NyaXB0aW9uOjoKKwlPcGVuIGFuIGVkaXRvciBhbmQgZWRpdCB0aGUgdGV4dCB0byBleHBsYWluIHdoYXQgdGhlIGJyYW5jaCBpcworCWZvciwgdG8gYmUgdXNlZCBieSB2YXJpb3VzIG90aGVyIGNvbW1hbmRzIChlLmcuIGBmb3JtYXQtcGF0Y2hgLAorCWByZXF1ZXN0LXB1bGxgLCBhbmQgYG1lcmdlYCAoaWYgZW5hYmxlZCkpLiBNdWx0aS1saW5lIGV4cGxhbmF0aW9ucworCW1heSBiZSB1c2VkLgorCistLWNvbnRhaW5zIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCBicmFuY2hlcyB3aGljaCBjb250YWluIHRoZSBzcGVjaWZpZWQgY29tbWl0IChIRUFECisJaWYgbm90IHNwZWNpZmllZCkuIEltcGxpZXMgYC0tbGlzdGAuCisKKy0tbm8tY29udGFpbnMgWzxjb21taXQ+XTo6CisJT25seSBsaXN0IGJyYW5jaGVzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIHNwZWNpZmllZCBjb21taXQKKwkoSEVBRCBpZiBub3Qgc3BlY2lmaWVkKS4gSW1wbGllcyBgLS1saXN0YC4KKworLS1tZXJnZWQgWzxjb21taXQ+XTo6CisJT25seSBsaXN0IGJyYW5jaGVzIHdob3NlIHRpcHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZQorCXNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYgbm90IHNwZWNpZmllZCkuIEltcGxpZXMgYC0tbGlzdGAsCisJaW5jb21wYXRpYmxlIHdpdGggYC0tbm8tbWVyZ2VkYC4KKworLS1uby1tZXJnZWQgWzxjb21taXQ+XTo6CisJT25seSBsaXN0IGJyYW5jaGVzIHdob3NlIHRpcHMgYXJlIG5vdCByZWFjaGFibGUgZnJvbSB0aGUKKwlzcGVjaWZpZWQgY29tbWl0IChIRUFEIGlmIG5vdCBzcGVjaWZpZWQpLiBJbXBsaWVzIGAtLWxpc3RgLAorCWluY29tcGF0aWJsZSB3aXRoIGAtLW1lcmdlZGAuCisKKzxicmFuY2huYW1lPjo6CisJVGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0byBjcmVhdGUgb3IgZGVsZXRlLgorCVRoZSBuZXcgYnJhbmNoIG5hbWUgbXVzdCBwYXNzIGFsbCBjaGVja3MgZGVmaW5lZCBieQorCWxpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0uICBTb21lIG9mIHRoZXNlIGNoZWNrcworCW1heSByZXN0cmljdCB0aGUgY2hhcmFjdGVycyBhbGxvd2VkIGluIGEgYnJhbmNoIG5hbWUuCisKKzxzdGFydC1wb2ludD46OgorCVRoZSBuZXcgYnJhbmNoIGhlYWQgd2lsbCBwb2ludCB0byB0aGlzIGNvbW1pdC4gIEl0IG1heSBiZQorCWdpdmVuIGFzIGEgYnJhbmNoIG5hbWUsIGEgY29tbWl0LWlkLCBvciBhIHRhZy4gIElmIHRoaXMKKwlvcHRpb24gaXMgb21pdHRlZCwgdGhlIGN1cnJlbnQgSEVBRCB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworPG9sZGJyYW5jaD46OgorCVRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGJyYW5jaCB0byByZW5hbWUuCisKKzxuZXdicmFuY2g+OjoKKwlUaGUgbmV3IG5hbWUgZm9yIGFuIGV4aXN0aW5nIGJyYW5jaC4gVGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZvcgorCTxicmFuY2huYW1lPiBhcHBseS4KKworLS1zb3J0PTxrZXk+OjoKKwlTb3J0IGJhc2VkIG9uIHRoZSBrZXkgZ2l2ZW4uIFByZWZpeCBgLWAgdG8gc29ydCBpbiBkZXNjZW5kaW5nCisJb3JkZXIgb2YgdGhlIHZhbHVlLiBZb3UgbWF5IHVzZSB0aGUgLS1zb3J0PTxrZXk+IG9wdGlvbgorCW11bHRpcGxlIHRpbWVzLCBpbiB3aGljaCBjYXNlIHRoZSBsYXN0IGtleSBiZWNvbWVzIHRoZSBwcmltYXJ5CisJa2V5LiBUaGUga2V5cyBzdXBwb3J0ZWQgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGluIGBnaXQKKwlmb3ItZWFjaC1yZWZgLiBTb3J0IG9yZGVyIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBjb25maWd1cmVkIGZvciB0aGUKKwlgYnJhbmNoLnNvcnRgIHZhcmlhYmxlIGlmIGV4aXN0cywgb3IgdG8gc29ydGluZyBiYXNlZCBvbiB0aGUKKwlmdWxsIHJlZm5hbWUgKGluY2x1ZGluZyBgcmVmcy8uLi5gIHByZWZpeCkuIFRoaXMgbGlzdHMKKwlkZXRhY2hlZCBIRUFEIChpZiBwcmVzZW50KSBmaXJzdCwgdGhlbiBsb2NhbCBicmFuY2hlcyBhbmQKKwlmaW5hbGx5IHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworCistLXBvaW50cy1hdCA8b2JqZWN0Pjo6CisJT25seSBsaXN0IGJyYW5jaGVzIG9mIHRoZSBnaXZlbiBvYmplY3QuCisKKy0tZm9ybWF0IDxmb3JtYXQ+OjoKKwlBIHN0cmluZyB0aGF0IGludGVycG9sYXRlcyBgJShmaWVsZG5hbWUpYCBmcm9tIGEgYnJhbmNoIHJlZiBiZWluZyBzaG93bgorCWFuZCB0aGUgb2JqZWN0IGl0IHBvaW50cyBhdC4gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMKKwl0aGF0IG9mIGxpbmtnaXQ6Z2l0LWZvci1lYWNoLXJlZlsxXS4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorYHBhZ2VyLmJyYW5jaGAgaXMgb25seSByZXNwZWN0ZWQgd2hlbiBsaXN0aW5nIGJyYW5jaGVzLCBpLmUuLCB3aGVuCitgLS1saXN0YCBpcyB1c2VkIG9yIGltcGxpZWQuIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBhIHBhZ2VyLgorU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1N0YXJ0IGRldmVsb3BtZW50IGZyb20gYSBrbm93biB0YWc6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtLy4uLi9saW51eC0yLjYgbXkyLjYKKyQgY2QgbXkyLjYKKyQgZ2l0IGJyYW5jaCBteTIuNi4xNCB2Mi42LjE0ICAgPDE+CiskIGdpdCBzd2l0Y2ggbXkyLjYuMTQKKy0tLS0tLS0tLS0tLQorKworPDE+IFRoaXMgc3RlcCBhbmQgdGhlIG5leHQgb25lIGNvdWxkIGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgc3RlcCB3aXRoCisgICAgImNoZWNrb3V0IC1iIG15Mi42LjE0IHYyLjYuMTQiLgorCitEZWxldGUgYW4gdW5uZWVkZWQgYnJhbmNoOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvLi4uL2dpdC5naXQgbXkuZ2l0CiskIGNkIG15LmdpdAorJCBnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi90b2RvIG9yaWdpbi9odG1sIG9yaWdpbi9tYW4gICA8MT4KKyQgZ2l0IGJyYW5jaCAtRCB0ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBEZWxldGUgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyAidG9kbyIsICJodG1sIiBhbmQgIm1hbiIuIFRoZSBuZXh0CisgICAgJ2ZldGNoJyBvciAncHVsbCcgd2lsbCBjcmVhdGUgdGhlbSBhZ2FpbiB1bmxlc3MgeW91IGNvbmZpZ3VyZSB0aGVtIG5vdCB0by4KKyAgICBTZWUgbGlua2dpdDpnaXQtZmV0Y2hbMV0uCis8Mj4gRGVsZXRlIHRoZSAidGVzdCIgYnJhbmNoIGV2ZW4gaWYgdGhlICJtYXN0ZXIiIGJyYW5jaCAob3Igd2hpY2hldmVyIGJyYW5jaAorICAgIGlzIGN1cnJlbnRseSBjaGVja2VkIG91dCkgZG9lcyBub3QgaGF2ZSBhbGwgY29tbWl0cyBmcm9tIHRoZSB0ZXN0IGJyYW5jaC4KKworTGlzdGluZyBicmFuY2hlcyBmcm9tIGEgc3BlY2lmaWMgcmVtb3RlOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1yIC1sICc8cmVtb3RlPi88cGF0dGVybj4nICAgICAgICAgICAgICAgICA8MT4KKyQgZ2l0IGZvci1lYWNoLXJlZiAncmVmcy9yZW1vdGVzLzxyZW1vdGU+LzxwYXR0ZXJuPicgICAgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBVc2luZyBgLWFgIHdvdWxkIGNvbmZsYXRlIDxyZW1vdGU+IHdpdGggYW55IGxvY2FsIGJyYW5jaGVzIHlvdSBoYXBwZW4gdG8KKyAgICBoYXZlIGJlZW4gcHJlZml4ZWQgd2l0aCB0aGUgc2FtZSA8cmVtb3RlPiBwYXR0ZXJuLgorPDI+IGBmb3ItZWFjaC1yZWZgIGNhbiB0YWtlIGEgd2lkZSByYW5nZSBvZiBvcHRpb25zLiBTZWUgbGlua2dpdDpnaXQtZm9yLWVhY2gtcmVmWzFdCisKK1BhdHRlcm5zIHdpbGwgbm9ybWFsbHkgbmVlZCBxdW90aW5nLgorCitOT1RFUworLS0tLS0KKworSWYgeW91IGFyZSBjcmVhdGluZyBhIGJyYW5jaCB0aGF0IHlvdSB3YW50IHRvIHN3aXRjaCB0byBpbW1lZGlhdGVseSwKK2l0IGlzIGVhc2llciB0byB1c2UgdGhlICJnaXQgc3dpdGNoIiBjb21tYW5kIHdpdGggaXRzIGAtY2Agb3B0aW9uIHRvCitkbyB0aGUgc2FtZSB0aGluZyB3aXRoIGEgc2luZ2xlIGNvbW1hbmQuCisKK1RoZSBvcHRpb25zIGAtLWNvbnRhaW5zYCwgYC0tbm8tY29udGFpbnNgLCBgLS1tZXJnZWRgIGFuZCBgLS1uby1tZXJnZWRgCitzZXJ2ZSBmb3VyIHJlbGF0ZWQgYnV0IGRpZmZlcmVudCBwdXJwb3NlczoKKworLSBgLS1jb250YWlucyA8Y29tbWl0PmAgaXMgdXNlZCB0byBmaW5kIGFsbCBicmFuY2hlcyB3aGljaCB3aWxsIG5lZWQKKyAgc3BlY2lhbCBhdHRlbnRpb24gaWYgPGNvbW1pdD4gd2VyZSB0byBiZSByZWJhc2VkIG9yIGFtZW5kZWQsIHNpbmNlIHRob3NlCisgIGJyYW5jaGVzIGNvbnRhaW4gdGhlIHNwZWNpZmllZCA8Y29tbWl0Pi4KKworLSBgLS1uby1jb250YWlucyA8Y29tbWl0PmAgaXMgdGhlIGludmVyc2Ugb2YgdGhhdCwgaS5lLiBicmFuY2hlcyB0aGF0IGRvbid0CisgIGNvbnRhaW4gdGhlIHNwZWNpZmllZCA8Y29tbWl0Pi4KKworLSBgLS1tZXJnZWRgIGlzIHVzZWQgdG8gZmluZCBhbGwgYnJhbmNoZXMgd2hpY2ggY2FuIGJlIHNhZmVseSBkZWxldGVkLAorICBzaW5jZSB0aG9zZSBicmFuY2hlcyBhcmUgZnVsbHkgY29udGFpbmVkIGJ5IEhFQUQuCisKKy0gYC0tbm8tbWVyZ2VkYCBpcyB1c2VkIHRvIGZpbmQgYnJhbmNoZXMgd2hpY2ggYXJlIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcKKyAgaW50byBIRUFELCBzaW5jZSB0aG9zZSBicmFuY2hlcyBhcmUgbm90IGZ1bGx5IGNvbnRhaW5lZCBieSBIRUFELgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0sCitsaW5rZ2l0OmdpdC1mZXRjaFsxXSwKK2xpbmtnaXQ6Z2l0LXJlbW90ZVsxXSwKK2xpbms6dXNlci1tYW51YWwuaHRtbCN3aGF0LWlzLWEtYnJhbmNoW2BgVW5kZXJzdGFuZGluZyBoaXN0b3J5OiBXaGF0IGlzCithIGJyYW5jaD8nJ10gaW4gdGhlIEdpdCBVc2VyJ3MgTWFudWFsLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNGIwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0CkBAIC0wLDAgKzEsMjQ1IEBACitnaXQtYnVuZGxlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1idW5kbGUgLSBNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBidW5kbGUnIGNyZWF0ZSBbLXEgfCAtLXF1aWV0IHwgLS1wcm9ncmVzcyB8IC0tYWxsLXByb2dyZXNzXSBbLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZF0gPGZpbGU+IDxnaXQtcmV2LWxpc3QtYXJncz4KKydnaXQgYnVuZGxlJyB2ZXJpZnkgWy1xIHwgLS1xdWlldF0gPGZpbGU+CisnZ2l0IGJ1bmRsZScgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0KKydnaXQgYnVuZGxlJyB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1NvbWUgd29ya2Zsb3dzIHJlcXVpcmUgdGhhdCBvbmUgb3IgbW9yZSBicmFuY2hlcyBvZiBkZXZlbG9wbWVudCBvbiBvbmUKK21hY2hpbmUgYmUgcmVwbGljYXRlZCBvbiBhbm90aGVyIG1hY2hpbmUsIGJ1dCB0aGUgdHdvIG1hY2hpbmVzIGNhbm5vdAorYmUgZGlyZWN0bHkgY29ubmVjdGVkLCBhbmQgdGhlcmVmb3JlIHRoZSBpbnRlcmFjdGl2ZSBHaXQgcHJvdG9jb2xzIChnaXQsCitzc2gsIGh0dHApIGNhbm5vdCBiZSB1c2VkLgorCitUaGUgJ2dpdCBidW5kbGUnIGNvbW1hbmQgcGFja2FnZXMgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcyBpbiBhbiBhcmNoaXZlCithdCB0aGUgb3JpZ2luYXRpbmcgbWFjaGluZSwgd2hpY2ggY2FuIHRoZW4gYmUgaW1wb3J0ZWQgaW50byBhbm90aGVyCityZXBvc2l0b3J5IHVzaW5nICdnaXQgZmV0Y2gnLCAnZ2l0IHB1bGwnLCBvciAnZ2l0IGNsb25lJywKK2FmdGVyIG1vdmluZyB0aGUgYXJjaGl2ZSBieSBzb21lIG1lYW5zIChlLmcuLCBieSBzbmVha2VybmV0KS4KKworQXMgbm8KK2RpcmVjdCBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHJlcG9zaXRvcmllcyBleGlzdHMsIHRoZSB1c2VyIG11c3Qgc3BlY2lmeSBhCitiYXNpcyBmb3IgdGhlIGJ1bmRsZSB0aGF0IGlzIGhlbGQgYnkgdGhlIGRlc3RpbmF0aW9uIHJlcG9zaXRvcnk6IHRoZQorYnVuZGxlIGFzc3VtZXMgdGhhdCBhbGwgb2JqZWN0cyBpbiB0aGUgYmFzaXMgYXJlIGFscmVhZHkgaW4gdGhlCitkZXN0aW5hdGlvbiByZXBvc2l0b3J5LgorCitPUFRJT05TCistLS0tLS0tCisKK2NyZWF0ZSBbb3B0aW9uc10gPGZpbGU+IDxnaXQtcmV2LWxpc3QtYXJncz46OgorCVVzZWQgdG8gY3JlYXRlIGEgYnVuZGxlIG5hbWVkICdmaWxlJy4gIFRoaXMgcmVxdWlyZXMgdGhlCisJJzxnaXQtcmV2LWxpc3QtYXJncz4nIGFyZ3VtZW50cyB0byBkZWZpbmUgdGhlIGJ1bmRsZSBjb250ZW50cy4KKwknb3B0aW9ucycgY29udGFpbnMgdGhlIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlICdnaXQgYnVuZGxlIGNyZWF0ZScKKwlzdWJjb21tYW5kLgorCit2ZXJpZnkgPGZpbGU+OjoKKwlVc2VkIHRvIGNoZWNrIHRoYXQgYSBidW5kbGUgZmlsZSBpcyB2YWxpZCBhbmQgd2lsbCBhcHBseQorCWNsZWFubHkgdG8gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gIFRoaXMgaW5jbHVkZXMgY2hlY2tzIG9uIHRoZQorCWJ1bmRsZSBmb3JtYXQgaXRzZWxmIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhhdCB0aGUgcHJlcmVxdWlzaXRlCisJY29tbWl0cyBleGlzdCBhbmQgYXJlIGZ1bGx5IGxpbmtlZCBpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LgorCSdnaXQgYnVuZGxlJyBwcmludHMgYSBsaXN0IG9mIG1pc3NpbmcgY29tbWl0cywgaWYgYW55LCBhbmQgZXhpdHMKKwl3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgorCitsaXN0LWhlYWRzIDxmaWxlPjo6CisJTGlzdHMgdGhlIHJlZmVyZW5jZXMgZGVmaW5lZCBpbiB0aGUgYnVuZGxlLiAgSWYgZm9sbG93ZWQgYnkgYQorCWxpc3Qgb2YgcmVmZXJlbmNlcywgb25seSByZWZlcmVuY2VzIG1hdGNoaW5nIHRob3NlIGdpdmVuIGFyZQorCXByaW50ZWQgb3V0LgorCit1bmJ1bmRsZSA8ZmlsZT46OgorCVBhc3NlcyB0aGUgb2JqZWN0cyBpbiB0aGUgYnVuZGxlIHRvICdnaXQgaW5kZXgtcGFjaycKKwlmb3Igc3RvcmFnZSBpbiB0aGUgcmVwb3NpdG9yeSwgdGhlbiBwcmludHMgdGhlIG5hbWVzIG9mIGFsbAorCWRlZmluZWQgcmVmZXJlbmNlcy4gSWYgYSBsaXN0IG9mIHJlZmVyZW5jZXMgaXMgZ2l2ZW4sIG9ubHkKKwlyZWZlcmVuY2VzIG1hdGNoaW5nIHRob3NlIGluIHRoZSBsaXN0IGFyZSBwcmludGVkLiBUaGlzIGNvbW1hbmQgaXMKKwlyZWFsbHkgcGx1bWJpbmcsIGludGVuZGVkIHRvIGJlIGNhbGxlZCBvbmx5IGJ5ICdnaXQgZmV0Y2gnLgorCis8Z2l0LXJldi1saXN0LWFyZ3M+OjoKKwlBIGxpc3Qgb2YgYXJndW1lbnRzLCBhY2NlcHRhYmxlIHRvICdnaXQgcmV2LXBhcnNlJyBhbmQKKwknZ2l0IHJldi1saXN0JyAoYW5kIGNvbnRhaW5pbmcgYSBuYW1lZCByZWYsIHNlZSBTUEVDSUZZSU5HIFJFRkVSRU5DRVMKKwliZWxvdyksIHRoYXQgc3BlY2lmaWVzIHRoZSBzcGVjaWZpYyBvYmplY3RzIGFuZCByZWZlcmVuY2VzCisJdG8gdHJhbnNwb3J0LiAgRm9yIGV4YW1wbGUsIGBtYXN0ZXJ+MTAuLm1hc3RlcmAgY2F1c2VzIHRoZQorCWN1cnJlbnQgbWFzdGVyIHJlZmVyZW5jZSB0byBiZSBwYWNrYWdlZCBhbG9uZyB3aXRoIGFsbCBvYmplY3RzCisJYWRkZWQgc2luY2UgaXRzIDEwdGggYW5jZXN0b3IgY29tbWl0LiAgVGhlcmUgaXMgbm8gZXhwbGljaXQKKwlsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgYW5kIG9iamVjdHMgdGhhdCBtYXkgYmUKKwlwYWNrYWdlZC4KKworCitbPHJlZm5hbWU+Li4uXTo6CisJQSBsaXN0IG9mIHJlZmVyZW5jZXMgdXNlZCB0byBsaW1pdCB0aGUgcmVmZXJlbmNlcyByZXBvcnRlZCBhcworCWF2YWlsYWJsZS4gVGhpcyBpcyBwcmluY2lwYWxseSBvZiB1c2UgdG8gJ2dpdCBmZXRjaCcsIHdoaWNoCisJZXhwZWN0cyB0byByZWNlaXZlIG9ubHkgdGhvc2UgcmVmZXJlbmNlcyBhc2tlZCBmb3IgYW5kIG5vdAorCW5lY2Vzc2FyaWx5IGV2ZXJ5dGhpbmcgaW4gdGhlIHBhY2sgKGluIHRoaXMgY2FzZSwgJ2dpdCBidW5kbGUnIGFjdHMKKwlsaWtlICdnaXQgZmV0Y2gtcGFjaycpLgorCistLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYKKwl0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLWFsbC1wcm9ncmVzczo6CisJV2hlbiAtLXN0ZG91dCBpcyBzcGVjaWZpZWQgdGhlbiBwcm9ncmVzcyByZXBvcnQgaXMKKwlkaXNwbGF5ZWQgZHVyaW5nIHRoZSBvYmplY3QgY291bnQgYW5kIGNvbXByZXNzaW9uIHBoYXNlcworCWJ1dCBpbmhpYml0ZWQgZHVyaW5nIHRoZSB3cml0ZS1vdXQgcGhhc2UuIFRoZSByZWFzb24gaXMKKwl0aGF0IGluIHNvbWUgY2FzZXMgdGhlIG91dHB1dCBzdHJlYW0gaXMgZGlyZWN0bHkgbGlua2VkCisJdG8gYW5vdGhlciBjb21tYW5kIHdoaWNoIG1heSB3aXNoIHRvIGRpc3BsYXkgcHJvZ3Jlc3MKKwlzdGF0dXMgb2YgaXRzIG93biBhcyBpdCBwcm9jZXNzZXMgaW5jb21pbmcgcGFjayBkYXRhLgorCVRoaXMgZmxhZyBpcyBsaWtlIC0tcHJvZ3Jlc3MgZXhjZXB0IHRoYXQgaXQgZm9yY2VzIHByb2dyZXNzCisJcmVwb3J0IGZvciB0aGUgd3JpdGUtb3V0IHBoYXNlIGFzIHdlbGwgZXZlbiBpZiAtLXN0ZG91dCBpcworCXVzZWQuCisKKy0tYWxsLXByb2dyZXNzLWltcGxpZWQ6OgorCVRoaXMgaXMgdXNlZCB0byBpbXBseSAtLWFsbC1wcm9ncmVzcyB3aGVuZXZlciBwcm9ncmVzcyBkaXNwbGF5CisJaXMgYWN0aXZhdGVkLiAgVW5saWtlIC0tYWxsLXByb2dyZXNzIHRoaXMgZmxhZyBkb2Vzbid0IGFjdHVhbGx5CisJZm9yY2UgYW55IHByb2dyZXNzIGRpc3BsYXkgYnkgaXRzZWxmLgorCistcTo6CistLXF1aWV0OjoKKwlUaGlzIGZsYWcgbWFrZXMgdGhlIGNvbW1hbmQgbm90IHRvIHJlcG9ydCBpdHMgcHJvZ3Jlc3MKKwlvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgorCitTUEVDSUZZSU5HIFJFRkVSRU5DRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisnZ2l0IGJ1bmRsZScgd2lsbCBvbmx5IHBhY2thZ2UgcmVmZXJlbmNlcyB0aGF0IGFyZSBzaG93biBieQorJ2dpdCBzaG93LXJlZic6IHRoaXMgaW5jbHVkZXMgaGVhZHMsIHRhZ3MsIGFuZCByZW1vdGUgaGVhZHMuICBSZWZlcmVuY2VzCitzdWNoIGFzIGBtYXN0ZXJ+MWAgY2Fubm90IGJlIHBhY2thZ2VkLCBidXQgYXJlIHBlcmZlY3RseSBzdWl0YWJsZSBmb3IKK2RlZmluaW5nIHRoZSBiYXNpcy4gIE1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIG1heSBiZSBwYWNrYWdlZCwgYW5kIG1vcmUKK3RoYW4gb25lIGJhc2lzIGNhbiBiZSBzcGVjaWZpZWQuICBUaGUgb2JqZWN0cyBwYWNrYWdlZCBhcmUgdGhvc2Ugbm90Citjb250YWluZWQgaW4gdGhlIHVuaW9uIG9mIHRoZSBnaXZlbiBiYXNlcy4gIEVhY2ggYmFzaXMgY2FuIGJlCitzcGVjaWZpZWQgZXhwbGljaXRseSAoZS5nLiBgXm1hc3Rlcn4xMGApLCBvciBpbXBsaWNpdGx5IChlLmcuCitgbWFzdGVyfjEwLi5tYXN0ZXJgLCBgLS1zaW5jZT0xMC5kYXlzLmFnbyBtYXN0ZXJgKS4KKworSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGUgYmFzaXMgdXNlZCBiZSBoZWxkIGJ5IHRoZSBkZXN0aW5hdGlvbi4KK0l0IGlzIG9rYXkgdG8gZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24sIGNhdXNpbmcgdGhlIGJ1bmRsZSBmaWxlCit0byBjb250YWluIG9iamVjdHMgYWxyZWFkeSBpbiB0aGUgZGVzdGluYXRpb24sIGFzIHRoZXNlIGFyZSBpZ25vcmVkCit3aGVuIHVucGFja2luZyBhdCB0aGUgZGVzdGluYXRpb24uCisKK2BnaXQgY2xvbmVgIGNhbiB1c2UgYW55IGJ1bmRsZSBjcmVhdGVkIHdpdGhvdXQgbmVnYXRpdmUgcmVmc3BlY3MKKyhlLmcuLCBgbmV3YCwgYnV0IG5vdCBgb2xkLi5uZXdgKS4KK0lmIHlvdSB3YW50IHRvIG1hdGNoIGBnaXQgY2xvbmUgLS1taXJyb3JgLCB3aGljaCB3b3VsZCBpbmNsdWRlIHlvdXIKK3JlZnMgc3VjaCBhcyBgcmVmcy9yZW1vdGVzLypgLCB1c2UgYC0tYWxsYC4KK0lmIHlvdSB3YW50IHRvIHByb3ZpZGUgdGhlIHNhbWUgc2V0IG9mIHJlZnMgdGhhdCBhIGNsb25lIGRpcmVjdGx5Citmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSB3b3VsZCBnZXQsIHVzZSBgLS1icmFuY2hlcyAtLXRhZ3NgIGZvcgordGhlIGA8Z2l0LXJldi1saXN0LWFyZ3M+YC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0Fzc3VtZSB5b3Ugd2FudCB0byB0cmFuc2ZlciB0aGUgaGlzdG9yeSBmcm9tIGEgcmVwb3NpdG9yeSBSMSBvbiBtYWNoaW5lIEEKK3RvIGFub3RoZXIgcmVwb3NpdG9yeSBSMiBvbiBtYWNoaW5lIEIuCitGb3Igd2hhdGV2ZXIgcmVhc29uLCBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIEEgYW5kIEIgaXMgbm90IGFsbG93ZWQsCitidXQgd2UgY2FuIG1vdmUgZGF0YSBmcm9tIEEgdG8gQiB2aWEgc29tZSBtZWNoYW5pc20gKENELCBlbWFpbCwgZXRjLikuCitXZSB3YW50IHRvIHVwZGF0ZSBSMiB3aXRoIGRldmVsb3BtZW50IG1hZGUgb24gdGhlIGJyYW5jaCBtYXN0ZXIgaW4gUjEuCisKK1RvIGJvb3RzdHJhcCB0aGUgcHJvY2VzcywgeW91IGNhbiBmaXJzdCBjcmVhdGUgYSBidW5kbGUgdGhhdCBkb2VzIG5vdCBoYXZlCithbnkgYmFzaXMuIFlvdSBjYW4gdXNlIGEgdGFnIHRvIHJlbWVtYmVyIHVwIHRvIHdoYXQgY29tbWl0IHlvdSBsYXN0Citwcm9jZXNzZWQsIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzeSB0byBsYXRlciB1cGRhdGUgdGhlIG90aGVyIHJlcG9zaXRvcnkKK3dpdGggYW4gaW5jcmVtZW50YWwgYnVuZGxlOgorCistLS0tLS0tLS0tLS0tLS0tCittYWNoaW5lQSQgY2QgUjEKK21hY2hpbmVBJCBnaXQgYnVuZGxlIGNyZWF0ZSBmaWxlLmJ1bmRsZSBtYXN0ZXIKK21hY2hpbmVBJCBnaXQgdGFnIC1mIGxhc3RSMmJ1bmRsZSBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiB5b3UgdHJhbnNmZXIgZmlsZS5idW5kbGUgdG8gdGhlIHRhcmdldCBtYWNoaW5lIEIuIEJlY2F1c2UgdGhpcworYnVuZGxlIGRvZXMgbm90IHJlcXVpcmUgYW55IGV4aXN0aW5nIG9iamVjdCB0byBiZSBleHRyYWN0ZWQsIHlvdSBjYW4KK2NyZWF0ZSBhIG5ldyByZXBvc2l0b3J5IG9uIG1hY2hpbmUgQiBieSBjbG9uaW5nIGZyb20gaXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KK21hY2hpbmVCJCBnaXQgY2xvbmUgLWIgbWFzdGVyIC9ob21lL21lL3RtcC9maWxlLmJ1bmRsZSBSMgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgZGVmaW5lIGEgcmVtb3RlIGNhbGxlZCAib3JpZ2luIiBpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkgdGhhdAorbGV0cyB5b3UgZmV0Y2ggYW5kIHB1bGwgZnJvbSB0aGUgYnVuZGxlLiBUaGUgJEdJVF9ESVIvY29uZmlnIGZpbGUgaW4gUjIgd2lsbAoraGF2ZSBhbiBlbnRyeSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3JlbW90ZSAib3JpZ2luIl0KKyAgICB1cmwgPSAvaG9tZS9tZS90bXAvZmlsZS5idW5kbGUKKyAgICBmZXRjaCA9IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1cGRhdGUgdGhlIHJlc3VsdGluZyBtaW5lLmdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIGZldGNoIG9yIHB1bGwgYWZ0ZXIKK3JlcGxhY2luZyB0aGUgYnVuZGxlIHN0b3JlZCBhdCAvaG9tZS9tZS90bXAvZmlsZS5idW5kbGUgd2l0aCBpbmNyZW1lbnRhbAordXBkYXRlcy4KKworQWZ0ZXIgd29ya2luZyBzb21lIG1vcmUgaW4gdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnksIHlvdSBjYW4gY3JlYXRlIGFuCitpbmNyZW1lbnRhbCBidW5kbGUgdG8gdXBkYXRlIHRoZSBvdGhlciByZXBvc2l0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tCittYWNoaW5lQSQgY2QgUjEKK21hY2hpbmVBJCBnaXQgYnVuZGxlIGNyZWF0ZSBmaWxlLmJ1bmRsZSBsYXN0UjJidW5kbGUuLm1hc3RlcgorbWFjaGluZUEkIGdpdCB0YWcgLWYgbGFzdFIyYnVuZGxlIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgdGhlbiB0cmFuc2ZlciB0aGUgYnVuZGxlIHRvIHRoZSBvdGhlciBtYWNoaW5lIHRvIHJlcGxhY2UKKy9ob21lL21lL3RtcC9maWxlLmJ1bmRsZSwgYW5kIHB1bGwgZnJvbSBpdC4KKworLS0tLS0tLS0tLS0tLS0tLQorbWFjaGluZUIkIGNkIFIyCittYWNoaW5lQiQgZ2l0IHB1bGwKKy0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGtub3cgdXAgdG8gd2hhdCBjb21taXQgdGhlIGludGVuZGVkIHJlY2lwaWVudCByZXBvc2l0b3J5IHNob3VsZAoraGF2ZSB0aGUgbmVjZXNzYXJ5IG9iamVjdHMsIHlvdSBjYW4gdXNlIHRoYXQga25vd2xlZGdlIHRvIHNwZWNpZnkgdGhlCitiYXNpcywgZ2l2aW5nIGEgY3V0LW9mZiBwb2ludCB0byBsaW1pdCB0aGUgcmV2aXNpb25zIGFuZCBvYmplY3RzIHRoYXQgZ28KK2luIHRoZSByZXN1bHRpbmcgYnVuZGxlLiBUaGUgcHJldmlvdXMgZXhhbXBsZSB1c2VkIHRoZSBsYXN0UjJidW5kbGUgdGFnCitmb3IgdGhpcyBwdXJwb3NlLCBidXQgeW91IGNhbiB1c2UgYW55IG90aGVyIG9wdGlvbnMgdGhhdCB5b3Ugd291bGQgZ2l2ZSB0bwordGhlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBjb21tYW5kLiBIZXJlIGFyZSBtb3JlIGV4YW1wbGVzOgorCitZb3UgY2FuIHVzZSBhIHRhZyB0aGF0IGlzIHByZXNlbnQgaW4gYm90aDoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnVuZGxlIGNyZWF0ZSBteWJ1bmRsZSB2MS4wLjAuLm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHVzZSBhIGJhc2lzIGJhc2VkIG9uIHRpbWU6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJ1bmRsZSBjcmVhdGUgbXlidW5kbGUgLS1zaW5jZT0xMC5kYXlzIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHVzZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJ1bmRsZSBjcmVhdGUgbXlidW5kbGUgLTEwIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHJ1biBgZ2l0LWJ1bmRsZSB2ZXJpZnlgIHRvIHNlZSBpZiB5b3UgY2FuIGV4dHJhY3QgZnJvbSBhIGJ1bmRsZQordGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgYmFzaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJ1bmRsZSB2ZXJpZnkgbXlidW5kbGUKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGxpc3Qgd2hhdCBjb21taXRzIHlvdSBtdXN0IGhhdmUgaW4gb3JkZXIgdG8gZXh0cmFjdCBmcm9tIHRoZQorYnVuZGxlIGFuZCB3aWxsIGVycm9yIG91dCBpZiB5b3UgZG8gbm90IGhhdmUgdGhlbS4KKworQSBidW5kbGUgZnJvbSBhIHJlY2lwaWVudCByZXBvc2l0b3J5J3MgcG9pbnQgb2YgdmlldyBpcyBqdXN0IGxpa2UgYQorcmVndWxhciByZXBvc2l0b3J5IHdoaWNoIGl0IGZldGNoZXMgb3IgcHVsbHMgZnJvbS4gWW91IGNhbiwgZm9yIGV4YW1wbGUsIG1hcAorcmVmZXJlbmNlcyB3aGVuIGZldGNoaW5nOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBteWJ1bmRsZSBtYXN0ZXI6bG9jYWxSZWYKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIHNlZSB3aGF0IHJlZmVyZW5jZXMgaXQgb2ZmZXJzOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy1yZW1vdGUgbXlidW5kbGUKKy0tLS0tLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjYTY3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dApAQCAtMCwwICsxLDMxOSBAQAorZ2l0LWNhdC1maWxlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNhdC1maWxlIC0gUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjYXQtZmlsZScgKC10IFstLWFsbG93LXVua25vd24tdHlwZV18IC1zIFstLWFsbG93LXVua25vd24tdHlwZV18IC1lIHwgLXAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzICkgWy0tcGF0aD08cGF0aD5dIDxvYmplY3Q+CisnZ2l0IGNhdC1maWxlJyAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFsgLS10ZXh0Y29udiB8IC0tZmlsdGVycyBdIFstLWZvbGxvdy1zeW1saW5rc10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbiBpdHMgZmlyc3QgZm9ybSwgdGhlIGNvbW1hbmQgcHJvdmlkZXMgdGhlIGNvbnRlbnQgb3IgdGhlIHR5cGUgb2YgYW4gb2JqZWN0IGluCit0aGUgcmVwb3NpdG9yeS4gVGhlIHR5cGUgaXMgcmVxdWlyZWQgdW5sZXNzIGAtdGAgb3IgYC1wYCBpcyB1c2VkIHRvIGZpbmQgdGhlCitvYmplY3QgdHlwZSwgb3IgYC1zYCBpcyB1c2VkIHRvIGZpbmQgdGhlIG9iamVjdCBzaXplLCBvciBgLS10ZXh0Y29udmAgb3IKK2AtLWZpbHRlcnNgIGlzIHVzZWQgKHdoaWNoIGltcGx5IHR5cGUgImJsb2IiKS4KKworSW4gdGhlIHNlY29uZCBmb3JtLCBhIGxpc3Qgb2Ygb2JqZWN0cyAoc2VwYXJhdGVkIGJ5IGxpbmVmZWVkcykgaXMgcHJvdmlkZWQgb24KK3N0ZGluLCBhbmQgdGhlIFNIQS0xLCB0eXBlLCBhbmQgc2l6ZSBvZiBlYWNoIG9iamVjdCBpcyBwcmludGVkIG9uIHN0ZG91dC4gVGhlCitvdXRwdXQgZm9ybWF0IGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBvcHRpb25hbCBgPGZvcm1hdD5gIGFyZ3VtZW50LiBJZgorZWl0aGVyIGAtLXRleHRjb252YCBvciBgLS1maWx0ZXJzYCB3YXMgc3BlY2lmaWVkLCB0aGUgaW5wdXQgaXMgZXhwZWN0ZWQgdG8KK2xpc3QgdGhlIG9iamVjdCBuYW1lcyBmb2xsb3dlZCBieSB0aGUgcGF0aCBuYW1lLCBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUKK3doaXRlc3BhY2UsIHNvIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGRyaXZlcnMgY2FuIGJlIGRldGVybWluZWQuCisKK09QVElPTlMKKy0tLS0tLS0KKzxvYmplY3Q+OjoKKwlUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIHNob3cuCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgb2JqZWN0IG5hbWVzLCBzZWUKKwl0aGUgIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCistdDo6CisJSW5zdGVhZCBvZiB0aGUgY29udGVudCwgc2hvdyB0aGUgb2JqZWN0IHR5cGUgaWRlbnRpZmllZCBieQorCTxvYmplY3Q+LgorCistczo6CisJSW5zdGVhZCBvZiB0aGUgY29udGVudCwgc2hvdyB0aGUgb2JqZWN0IHNpemUgaWRlbnRpZmllZCBieQorCTxvYmplY3Q+LgorCistZTo6CisJRXhpdCB3aXRoIHplcm8gc3RhdHVzIGlmIDxvYmplY3Q+IGV4aXN0cyBhbmQgaXMgYSB2YWxpZAorCW9iamVjdC4gSWYgPG9iamVjdD4gaXMgb2YgYW4gaW52YWxpZCBmb3JtYXQgZXhpdCB3aXRoIG5vbi16ZXJvIGFuZAorCWVtaXRzIGFuIGVycm9yIG9uIHN0ZGVyci4KKworLXA6OgorCVByZXR0eS1wcmludCB0aGUgY29udGVudHMgb2YgPG9iamVjdD4gYmFzZWQgb24gaXRzIHR5cGUuCisKKzx0eXBlPjo6CisJVHlwaWNhbGx5IHRoaXMgbWF0Y2hlcyB0aGUgcmVhbCB0eXBlIG9mIDxvYmplY3Q+IGJ1dCBhc2tpbmcKKwlmb3IgYSB0eXBlIHRoYXQgY2FuIHRyaXZpYWxseSBiZSBkZXJlZmVyZW5jZWQgZnJvbSB0aGUgZ2l2ZW4KKwk8b2JqZWN0PiBpcyBhbHNvIHBlcm1pdHRlZC4gIEFuIGV4YW1wbGUgaXMgdG8gYXNrIGZvciBhCisJInRyZWUiIHdpdGggPG9iamVjdD4gYmVpbmcgYSBjb21taXQgb2JqZWN0IHRoYXQgY29udGFpbnMgaXQsCisJb3IgdG8gYXNrIGZvciBhICJibG9iIiB3aXRoIDxvYmplY3Q+IGJlaW5nIGEgdGFnIG9iamVjdCB0aGF0CisJcG9pbnRzIGF0IGl0LgorCistLXRleHRjb252OjoKKwlTaG93IHRoZSBjb250ZW50IGFzIHRyYW5zZm9ybWVkIGJ5IGEgdGV4dGNvbnYgZmlsdGVyLiBJbiB0aGlzIGNhc2UsCisJPG9iamVjdD4gaGFzIHRvIGJlIG9mIHRoZSBmb3JtIDx0cmVlLWlzaD46PHBhdGg+LCBvciA6PHBhdGg+IGluCisJb3JkZXIgdG8gYXBwbHkgdGhlIGZpbHRlciB0byB0aGUgY29udGVudCByZWNvcmRlZCBpbiB0aGUgaW5kZXggYXQKKwk8cGF0aD4uCisKKy0tZmlsdGVyczo6CisJU2hvdyB0aGUgY29udGVudCBhcyBjb252ZXJ0ZWQgYnkgdGhlIGZpbHRlcnMgY29uZmlndXJlZCBpbgorCXRoZSBjdXJyZW50IHdvcmtpbmcgdHJlZSBmb3IgdGhlIGdpdmVuIDxwYXRoPiAoaS5lLiBzbXVkZ2UgZmlsdGVycywKKwllbmQtb2YtbGluZSBjb252ZXJzaW9uLCBldGMpLiBJbiB0aGlzIGNhc2UsIDxvYmplY3Q+IGhhcyB0byBiZSBvZgorCXRoZSBmb3JtIDx0cmVlLWlzaD46PHBhdGg+LCBvciA6PHBhdGg+LgorCistLXBhdGg9PHBhdGg+OjoKKwlGb3IgdXNlIHdpdGggLS10ZXh0Y29udiBvciAtLWZpbHRlcnMsIHRvIGFsbG93IHNwZWNpZnlpbmcgYW4gb2JqZWN0CisJbmFtZSBhbmQgYSBwYXRoIHNlcGFyYXRlbHksIGUuZy4gd2hlbiBpdCBpcyBkaWZmaWN1bHQgdG8gZmlndXJlIG91dAorCXRoZSByZXZpc2lvbiBmcm9tIHdoaWNoIHRoZSBibG9iIGNhbWUuCisKKy0tYmF0Y2g6OgorLS1iYXRjaD08Zm9ybWF0Pjo6CisJUHJpbnQgb2JqZWN0IGluZm9ybWF0aW9uIGFuZCBjb250ZW50cyBmb3IgZWFjaCBvYmplY3QgcHJvdmlkZWQKKwlvbiBzdGRpbi4gIE1heSBub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgb3B0aW9ucyBvciBhcmd1bWVudHMKKwlleGNlcHQgYC0tdGV4dGNvbnZgIG9yIGAtLWZpbHRlcnNgLCBpbiB3aGljaCBjYXNlIHRoZSBpbnB1dCBsaW5lcworCWFsc28gbmVlZCB0byBzcGVjaWZ5IHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIFNlZSB0aGUKKwlzZWN0aW9uIGBCQVRDSCBPVVRQVVRgIGJlbG93IGZvciBkZXRhaWxzLgorCistLWJhdGNoLWNoZWNrOjoKKy0tYmF0Y2gtY2hlY2s9PGZvcm1hdD46OgorCVByaW50IG9iamVjdCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBvYmplY3QgcHJvdmlkZWQgb24gc3RkaW4uICBNYXkKKwlub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgb3B0aW9ucyBvciBhcmd1bWVudHMgZXhjZXB0CisJYC0tdGV4dGNvbnZgIG9yIGAtLWZpbHRlcnNgLCBpbiB3aGljaCBjYXNlIHRoZSBpbnB1dCBsaW5lcyBhbHNvCisJbmVlZCB0byBzcGVjaWZ5IHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIFNlZSB0aGUKKwlzZWN0aW9uIGBCQVRDSCBPVVRQVVRgIGJlbG93IGZvciBkZXRhaWxzLgorCistLWJhdGNoLWFsbC1vYmplY3RzOjoKKwlJbnN0ZWFkIG9mIHJlYWRpbmcgYSBsaXN0IG9mIG9iamVjdHMgb24gc3RkaW4sIHBlcmZvcm0gdGhlCisJcmVxdWVzdGVkIGJhdGNoIG9wZXJhdGlvbiBvbiBhbGwgb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeSBhbmQKKwlhbnkgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMgKG5vdCBqdXN0IHJlYWNoYWJsZSBvYmplY3RzKS4KKwlSZXF1aXJlcyBgLS1iYXRjaGAgb3IgYC0tYmF0Y2gtY2hlY2tgIGJlIHNwZWNpZmllZC4gTm90ZSB0aGF0CisJdGhlIG9iamVjdHMgYXJlIHZpc2l0ZWQgaW4gb3JkZXIgc29ydGVkIGJ5IHRoZWlyIGhhc2hlcy4KKworLS1idWZmZXI6OgorCU5vcm1hbGx5IGJhdGNoIG91dHB1dCBpcyBmbHVzaGVkIGFmdGVyIGVhY2ggb2JqZWN0IGlzIG91dHB1dCwgc28KKwl0aGF0IGEgcHJvY2VzcyBjYW4gaW50ZXJhY3RpdmVseSByZWFkIGFuZCB3cml0ZSBmcm9tCisJYGNhdC1maWxlYC4gV2l0aCB0aGlzIG9wdGlvbiwgdGhlIG91dHB1dCB1c2VzIG5vcm1hbCBzdGRpbworCWJ1ZmZlcmluZzsgdGhpcyBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHdoZW4gaW52b2tpbmcKKwlgLS1iYXRjaC1jaGVja2Agb24gYSBsYXJnZSBudW1iZXIgb2Ygb2JqZWN0cy4KKworLS11bm9yZGVyZWQ6OgorCVdoZW4gYC0tYmF0Y2gtYWxsLW9iamVjdHNgIGlzIGluIHVzZSwgdmlzaXQgb2JqZWN0cyBpbiBhbgorCW9yZGVyIHdoaWNoIG1heSBiZSBtb3JlIGVmZmljaWVudCBmb3IgYWNjZXNzaW5nIHRoZSBvYmplY3QKKwljb250ZW50cyB0aGFuIGhhc2ggb3JkZXIuIFRoZSBleGFjdCBkZXRhaWxzIG9mIHRoZSBvcmRlciBhcmUKKwl1bnNwZWNpZmllZCwgYnV0IGlmIHlvdSBkbyBub3QgcmVxdWlyZSBhIHNwZWNpZmljIG9yZGVyLCB0aGlzCisJc2hvdWxkIGdlbmVyYWxseSByZXN1bHQgaW4gZmFzdGVyIG91dHB1dCwgZXNwZWNpYWxseSB3aXRoCisJYC0tYmF0Y2hgLiAgTm90ZSB0aGF0IGBjYXQtZmlsZWAgd2lsbCBzdGlsbCBzaG93IGVhY2ggb2JqZWN0CisJb25seSBvbmNlLCBldmVuIGlmIGl0IGlzIHN0b3JlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUKKwlyZXBvc2l0b3J5LgorCistLWFsbG93LXVua25vd24tdHlwZTo6CisJQWxsb3cgLXMgb3IgLXQgdG8gcXVlcnkgYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyBvZiB1bmtub3duIHR5cGUuCisKKy0tZm9sbG93LXN5bWxpbmtzOjoKKwlXaXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaywgZm9sbG93IHN5bWxpbmtzIGluc2lkZSB0aGUKKwlyZXBvc2l0b3J5IHdoZW4gcmVxdWVzdGluZyBvYmplY3RzIHdpdGggZXh0ZW5kZWQgU0hBLTEKKwlleHByZXNzaW9ucyBvZiB0aGUgZm9ybSB0cmVlLWlzaDpwYXRoLWluLXRyZWUuICBJbnN0ZWFkIG9mCisJcHJvdmlkaW5nIG91dHB1dCBhYm91dCB0aGUgbGluayBpdHNlbGYsIHByb3ZpZGUgb3V0cHV0IGFib3V0CisJdGhlIGxpbmtlZC10byBvYmplY3QuICBJZiBhIHN5bWxpbmsgcG9pbnRzIG91dHNpZGUgdGhlCisJdHJlZS1pc2ggKGUuZy4gYSBsaW5rIHRvIC9mb28gb3IgYSByb290LWxldmVsIGxpbmsgdG8gLi4vZm9vKSwKKwl0aGUgcG9ydGlvbiBvZiB0aGUgbGluayB3aGljaCBpcyBvdXRzaWRlIHRoZSB0cmVlIHdpbGwgYmUKKwlwcmludGVkLgorKworVGhpcyBvcHRpb24gZG9lcyBub3QgKGN1cnJlbnRseSkgd29yayBjb3JyZWN0bHkgd2hlbiBhbiBvYmplY3QgaW4gdGhlCitpbmRleCBpcyBzcGVjaWZpZWQgKGUuZy4gYDpsaW5rYCBpbnN0ZWFkIG9mIGBIRUFEOmxpbmtgKSByYXRoZXIgdGhhbgorb25lIGluIHRoZSB0cmVlLgorKworVGhpcyBvcHRpb24gY2Fubm90IChjdXJyZW50bHkpIGJlIHVzZWQgdW5sZXNzIGAtLWJhdGNoYCBvcgorYC0tYmF0Y2gtY2hlY2tgIGlzIHVzZWQuCisrCitGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBnaXQgcmVwb3NpdG9yeSBjb250YWluaW5nOgorKworLS0KKwlmOiBhIGZpbGUgY29udGFpbmluZyAiaGVsbG9cbiIKKwlsaW5rOiBhIHN5bWxpbmsgdG8gZgorCWRpci9saW5rOiBhIHN5bWxpbmsgdG8gLi4vZgorCXBsaW5rOiBhIHN5bWxpbmsgdG8gLi4vZgorCWFsaW5rOiBhIHN5bWxpbmsgdG8gL2V0Yy9wYXNzd2QKKy0tCisrCitGb3IgYSByZWd1bGFyIGZpbGUgYGZgLCBgZWNobyBIRUFEOmYgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaGAgd291bGQgcHJpbnQKKysKKy0tCisJY2UwMTM2MjUwMzBiYThkYmE5MDZmNzU2OTY3ZjllOWNhMzk0NDY0YSBibG9iIDYKKy0tCisrCitBbmQgYGVjaG8gSEVBRDpsaW5rIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2ggLS1mb2xsb3ctc3ltbGlua3NgIHdvdWxkCitwcmludCB0aGUgc2FtZSB0aGluZywgYXMgd291bGQgYEhFQUQ6ZGlyL2xpbmtgLCBhcyB0aGV5IGJvdGggcG9pbnQgYXQKK2BIRUFEOmZgLgorKworV2l0aG91dCBgLS1mb2xsb3ctc3ltbGlua3NgLCB0aGVzZSB3b3VsZCBwcmludCBkYXRhIGFib3V0IHRoZSBzeW1saW5rCitpdHNlbGYuICBJbiB0aGUgY2FzZSBvZiBgSEVBRDpsaW5rYCwgeW91IHdvdWxkIHNlZQorKworLS0KKwk0ZDFhZTM1YmEyYzhlYzcxMmZhMmEzNzlkYjQ0YWQ2MzljYTI3N2JkIGJsb2IgMQorLS0KKysKK0JvdGggYHBsaW5rYCBhbmQgYGFsaW5rYCBwb2ludCBvdXRzaWRlIHRoZSB0cmVlLCBzbyB0aGV5IHdvdWxkCityZXNwZWN0aXZlbHkgcHJpbnQ6CisrCistLQorCXN5bWxpbmsgNAorCS4uL2YKKworCXN5bWxpbmsgMTEKKwkvZXRjL3Bhc3N3ZAorLS0KKworCitPVVRQVVQKKy0tLS0tLQorSWYgYC10YCBpcyBzcGVjaWZpZWQsIG9uZSBvZiB0aGUgPHR5cGU+LgorCitJZiBgLXNgIGlzIHNwZWNpZmllZCwgdGhlIHNpemUgb2YgdGhlIDxvYmplY3Q+IGluIGJ5dGVzLgorCitJZiBgLWVgIGlzIHNwZWNpZmllZCwgbm8gb3V0cHV0LCB1bmxlc3MgdGhlIDxvYmplY3Q+IGlzIG1hbGZvcm1lZC4KKworSWYgYC1wYCBpcyBzcGVjaWZpZWQsIHRoZSBjb250ZW50cyBvZiA8b2JqZWN0PiBhcmUgcHJldHR5LXByaW50ZWQuCisKK0lmIDx0eXBlPiBpcyBzcGVjaWZpZWQsIHRoZSByYXcgKHRob3VnaCB1bmNvbXByZXNzZWQpIGNvbnRlbnRzIG9mIHRoZSA8b2JqZWN0Pgord2lsbCBiZSByZXR1cm5lZC4KKworQkFUQ0ggT1VUUFVUCistLS0tLS0tLS0tLS0KKworSWYgYC0tYmF0Y2hgIG9yIGAtLWJhdGNoLWNoZWNrYCBpcyBnaXZlbiwgYGNhdC1maWxlYCB3aWxsIHJlYWQgb2JqZWN0cworZnJvbSBzdGRpbiwgb25lIHBlciBsaW5lLCBhbmQgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlbS4gQnkgZGVmYXVsdCwKK3RoZSB3aG9sZSBsaW5lIGlzIGNvbnNpZGVyZWQgYXMgYW4gb2JqZWN0LCBhcyBpZiBpdCB3ZXJlIGZlZCB0bworbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgorCitZb3UgY2FuIHNwZWNpZnkgdGhlIGluZm9ybWF0aW9uIHNob3duIGZvciBlYWNoIG9iamVjdCBieSB1c2luZyBhIGN1c3RvbQorYDxmb3JtYXQ+YC4gVGhlIGA8Zm9ybWF0PmAgaXMgY29waWVkIGxpdGVyYWxseSB0byBzdGRvdXQgZm9yIGVhY2gKK29iamVjdCwgd2l0aCBwbGFjZWhvbGRlcnMgb2YgdGhlIGZvcm0gYCUoYXRvbSlgIGV4cGFuZGVkLCBmb2xsb3dlZCBieSBhCituZXdsaW5lLiBUaGUgYXZhaWxhYmxlIGF0b21zIGFyZToKKworYG9iamVjdG5hbWVgOjoKKwlUaGUgNDAtaGV4IG9iamVjdCBuYW1lIG9mIHRoZSBvYmplY3QuCisKK2BvYmplY3R0eXBlYDo6CisJVGhlIHR5cGUgb2YgdGhlIG9iamVjdCAodGhlIHNhbWUgYXMgYGNhdC1maWxlIC10YCByZXBvcnRzKS4KKworYG9iamVjdHNpemVgOjoKKwlUaGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBvYmplY3QgKHRoZSBzYW1lIGFzIGBjYXQtZmlsZSAtc2AKKwlyZXBvcnRzKS4KKworYG9iamVjdHNpemU6ZGlza2A6OgorCVRoZSBzaXplLCBpbiBieXRlcywgdGhhdCB0aGUgb2JqZWN0IHRha2VzIHVwIG9uIGRpc2suIFNlZSB0aGUKKwlub3RlIGFib3V0IG9uLWRpc2sgc2l6ZXMgaW4gdGhlIGBDQVZFQVRTYCBzZWN0aW9uIGJlbG93LgorCitgZGVsdGFiYXNlYDo6CisJSWYgdGhlIG9iamVjdCBpcyBzdG9yZWQgYXMgYSBkZWx0YSBvbi1kaXNrLCB0aGlzIGV4cGFuZHMgdG8gdGhlCisJNDAtaGV4IHNoYTEgb2YgdGhlIGRlbHRhIGJhc2Ugb2JqZWN0LiBPdGhlcndpc2UsIGV4cGFuZHMgdG8gdGhlCisJbnVsbCBzaGExICg0MCB6ZXJvZXMpLiBTZWUgYENBVkVBVFNgIGJlbG93LgorCitgcmVzdGA6OgorCUlmIHRoaXMgYXRvbSBpcyB1c2VkIGluIHRoZSBvdXRwdXQgc3RyaW5nLCBpbnB1dCBsaW5lcyBhcmUgc3BsaXQKKwlhdCB0aGUgZmlyc3Qgd2hpdGVzcGFjZSBib3VuZGFyeS4gQWxsIGNoYXJhY3RlcnMgYmVmb3JlIHRoYXQKKwl3aGl0ZXNwYWNlIGFyZSBjb25zaWRlcmVkIHRvIGJlIHRoZSBvYmplY3QgbmFtZTsgY2hhcmFjdGVycworCWFmdGVyIHRoYXQgZmlyc3QgcnVuIG9mIHdoaXRlc3BhY2UgKGkuZS4sIHRoZSAicmVzdCIgb2YgdGhlCisJbGluZSkgYXJlIG91dHB1dCBpbiBwbGFjZSBvZiB0aGUgYCUocmVzdClgIGF0b20uCisKK0lmIG5vIGZvcm1hdCBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGZvcm1hdCBpcyBgJShvYmplY3RuYW1lKQorJShvYmplY3R0eXBlKSAlKG9iamVjdHNpemUpYC4KKworSWYgYC0tYmF0Y2hgIGlzIHNwZWNpZmllZCwgdGhlIG9iamVjdCBpbmZvcm1hdGlvbiBpcyBmb2xsb3dlZCBieSB0aGUKK29iamVjdCBjb250ZW50cyAoY29uc2lzdGluZyBvZiBgJShvYmplY3RzaXplKWAgYnl0ZXMpLCBmb2xsb3dlZCBieSBhCituZXdsaW5lLgorCitGb3IgZXhhbXBsZSwgYC0tYmF0Y2hgIHdpdGhvdXQgYSBjdXN0b20gZm9ybWF0IHdvdWxkIHByb2R1Y2U6CisKKy0tLS0tLS0tLS0tLQorPHNoYTE+IFNQIDx0eXBlPiBTUCA8c2l6ZT4gTEYKKzxjb250ZW50cz4gTEYKKy0tLS0tLS0tLS0tLQorCitXaGVyZWFzIGAtLWJhdGNoLWNoZWNrPSclKG9iamVjdG5hbWUpICUob2JqZWN0dHlwZSknYCB3b3VsZCBwcm9kdWNlOgorCistLS0tLS0tLS0tLS0KKzxzaGExPiBTUCA8dHlwZT4gTEYKKy0tLS0tLS0tLS0tLQorCitJZiBhIG5hbWUgaXMgc3BlY2lmaWVkIG9uIHN0ZGluIHRoYXQgY2Fubm90IGJlIHJlc29sdmVkIHRvIGFuIG9iamVjdCBpbgordGhlIHJlcG9zaXRvcnksIHRoZW4gYGNhdC1maWxlYCB3aWxsIGlnbm9yZSBhbnkgY3VzdG9tIGZvcm1hdCBhbmQgcHJpbnQ6CisKKy0tLS0tLS0tLS0tLQorPG9iamVjdD4gU1AgbWlzc2luZyBMRgorLS0tLS0tLS0tLS0tCisKK0lmIGEgbmFtZSBpcyBzcGVjaWZpZWQgdGhhdCBtaWdodCByZWZlciB0byBtb3JlIHRoYW4gb25lIG9iamVjdCAoYW4gYW1iaWd1b3VzIHNob3J0IHNoYSksIHRoZW4gYGNhdC1maWxlYCB3aWxsIGlnbm9yZSBhbnkgY3VzdG9tIGZvcm1hdCBhbmQgcHJpbnQ6CisKKy0tLS0tLS0tLS0tLQorPG9iamVjdD4gU1AgYW1iaWd1b3VzIExGCistLS0tLS0tLS0tLS0KKworSWYgLS1mb2xsb3ctc3ltbGlua3MgaXMgdXNlZCwgYW5kIGEgc3ltbGluayBpbiB0aGUgcmVwb3NpdG9yeSBwb2ludHMKK291dHNpZGUgdGhlIHJlcG9zaXRvcnksIHRoZW4gYGNhdC1maWxlYCB3aWxsIGlnbm9yZSBhbnkgY3VzdG9tIGZvcm1hdAorYW5kIHByaW50OgorCistLS0tLS0tLS0tLS0KK3N5bWxpbmsgU1AgPHNpemU+IExGCis8c3ltbGluaz4gTEYKKy0tLS0tLS0tLS0tLQorCitUaGUgc3ltbGluayB3aWxsIGVpdGhlciBiZSBhYnNvbHV0ZSAoYmVnaW5uaW5nIHdpdGggYSAvKSwgb3IgcmVsYXRpdmUKK3RvIHRoZSB0cmVlIHJvb3QuICBGb3IgaW5zdGFuY2UsIGlmIGRpci9saW5rIHBvaW50cyB0byAuLi8uLi9mb28sIHRoZW4KKzxzeW1saW5rPiB3aWxsIGJlIC4uL2Zvby4gIDxzaXplPiBpcyB0aGUgc2l6ZSBvZiB0aGUgc3ltbGluayBpbiBieXRlcy4KKworSWYgLS1mb2xsb3ctc3ltbGlua3MgaXMgdXNlZCwgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlcyB3aWxsIGJlCitkaXNwbGF5ZWQ6CisKKy0tLS0tLS0tLS0tLQorPG9iamVjdD4gU1AgbWlzc2luZyBMRgorLS0tLS0tLS0tLS0tCitpcyBwcmludGVkIHdoZW4gdGhlIGluaXRpYWwgc3ltbGluayByZXF1ZXN0ZWQgZG9lcyBub3QgZXhpc3QuCisKKy0tLS0tLS0tLS0tLQorZGFuZ2xpbmcgU1AgPHNpemU+IExGCis8b2JqZWN0PiBMRgorLS0tLS0tLS0tLS0tCitpcyBwcmludGVkIHdoZW4gdGhlIGluaXRpYWwgc3ltbGluayBleGlzdHMsIGJ1dCBzb21ldGhpbmcgdGhhdAoraXQgKHRyYW5zaXRpdmUtb2YpIHBvaW50cyB0byBkb2VzIG5vdC4KKworLS0tLS0tLS0tLS0tCitsb29wIFNQIDxzaXplPiBMRgorPG9iamVjdD4gTEYKKy0tLS0tLS0tLS0tLQoraXMgcHJpbnRlZCBmb3Igc3ltbGluayBsb29wcyAob3IgYW55IHN5bWxpbmtzIHRoYXQKK3JlcXVpcmUgbW9yZSB0aGFuIDQwIGxpbmsgcmVzb2x1dGlvbnMgdG8gcmVzb2x2ZSkuCisKKy0tLS0tLS0tLS0tLQorbm90ZGlyIFNQIDxzaXplPiBMRgorPG9iamVjdD4gTEYKKy0tLS0tLS0tLS0tLQoraXMgcHJpbnRlZCB3aGVuLCBkdXJpbmcgc3ltbGluayByZXNvbHV0aW9uLCBhIGZpbGUgaXMgdXNlZCBhcyBhCitkaXJlY3RvcnkgbmFtZS4KKworQ0FWRUFUUworLS0tLS0tLQorCitOb3RlIHRoYXQgdGhlIHNpemVzIG9mIG9iamVjdHMgb24gZGlzayBhcmUgcmVwb3J0ZWQgYWNjdXJhdGVseSwgYnV0IGNhcmUKK3Nob3VsZCBiZSB0YWtlbiBpbiBkcmF3aW5nIGNvbmNsdXNpb25zIGFib3V0IHdoaWNoIHJlZnMgb3Igb2JqZWN0cyBhcmUKK3Jlc3BvbnNpYmxlIGZvciBkaXNrIHVzYWdlLiBUaGUgc2l6ZSBvZiBhIHBhY2tlZCBub24tZGVsdGEgb2JqZWN0IG1heSBiZQorbXVjaCBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiBvYmplY3RzIHdoaWNoIGRlbHRhIGFnYWluc3QgaXQsIGJ1dCB0aGUKK2Nob2ljZSBvZiB3aGljaCBvYmplY3QgaXMgdGhlIGJhc2UgYW5kIHdoaWNoIGlzIHRoZSBkZWx0YSBpcyBhcmJpdHJhcnkKK2FuZCBpcyBzdWJqZWN0IHRvIGNoYW5nZSBkdXJpbmcgYSByZXBhY2suCisKK05vdGUgYWxzbyB0aGF0IG11bHRpcGxlIGNvcGllcyBvZiBhbiBvYmplY3QgbWF5IGJlIHByZXNlbnQgaW4gdGhlIG9iamVjdAorZGF0YWJhc2U7IGluIHRoaXMgY2FzZSwgaXQgaXMgdW5kZWZpbmVkIHdoaWNoIGNvcHkncyBzaXplIG9yIGRlbHRhIGJhc2UKK3dpbGwgYmUgcmVwb3J0ZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGY0MWE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQKQEAgLTAsMCArMSwxMjAgQEAKK2dpdC1jaGVjay1hdHRyKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2stYXR0ciAtIERpc3BsYXkgZ2l0YXR0cmlidXRlcyBpbmZvcm1hdGlvbgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVjay1hdHRyJyBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uCisnZ2l0IGNoZWNrLWF0dHInIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitGb3IgZXZlcnkgcGF0aG5hbWUsIHRoaXMgY29tbWFuZCB3aWxsIGxpc3QgaWYgZWFjaCBhdHRyaWJ1dGUgaXMgJ3Vuc3BlY2lmaWVkJywKKydzZXQnLCBvciAndW5zZXQnIGFzIGEgZ2l0YXR0cmlidXRlIG9uIHRoYXQgcGF0aG5hbWUuCisKK09QVElPTlMKKy0tLS0tLS0KKy1hLCAtLWFsbDo6CisJTGlzdCBhbGwgYXR0cmlidXRlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorCXBhdGhzLiAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCwgdGhlbiAndW5zcGVjaWZpZWQnIGF0dHJpYnV0ZXMKKwl3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LgorCistLWNhY2hlZDo6CisJQ29uc2lkZXIgYC5naXRhdHRyaWJ1dGVzYCBpbiB0aGUgaW5kZXggb25seSwgaWdub3JpbmcgdGhlIHdvcmtpbmcgdHJlZS4KKworLS1zdGRpbjo6CisJUmVhZCBwYXRobmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIG9uZSBwZXIgbGluZSwKKwlpbnN0ZWFkIG9mIGZyb20gdGhlIGNvbW1hbmQtbGluZS4KKworLXo6OgorCVRoZSBvdXRwdXQgZm9ybWF0IGlzIG1vZGlmaWVkIHRvIGJlIG1hY2hpbmUtcGFyc2FibGUuCisJSWYgYC0tc3RkaW5gIGlzIGFsc28gZ2l2ZW4sIGlucHV0IHBhdGhzIGFyZSBzZXBhcmF0ZWQKKwl3aXRoIGEgTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgbGluZWZlZWQgY2hhcmFjdGVyLgorCitcLS06OgorCUludGVycHJldCBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cyBhcyBhdHRyaWJ1dGVzIGFuZCBhbGwgZm9sbG93aW5nCisJYXJndW1lbnRzIGFzIHBhdGggbmFtZXMuCisKK0lmIG5vbmUgb2YgYC0tc3RkaW5gLCBgLS1hbGxgLCBvciBgLS1gIGlzIHVzZWQsIHRoZSBmaXJzdCBhcmd1bWVudAord2lsbCBiZSB0cmVhdGVkIGFzIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyBhcworcGF0aG5hbWVzLgorCitPVVRQVVQKKy0tLS0tLQorCitUaGUgb3V0cHV0IGlzIG9mIHRoZSBmb3JtOgorPHBhdGg+IENPTE9OIFNQIDxhdHRyaWJ1dGU+IENPTE9OIFNQIDxpbmZvPiBMRgorCit1bmxlc3MgYC16YCBpcyBpbiBlZmZlY3QsIGluIHdoaWNoIGNhc2UgTlVMIGlzIHVzZWQgYXMgZGVsaW1pdGVyOgorPHBhdGg+IE5VTCA8YXR0cmlidXRlPiBOVUwgPGluZm8+IE5VTAorCisKKzxwYXRoPiBpcyB0aGUgcGF0aCBvZiBhIGZpbGUgYmVpbmcgcXVlcmllZCwgPGF0dHJpYnV0ZT4gaXMgYW4gYXR0cmlidXRlCitiZWluZyBxdWVyaWVkIGFuZCA8aW5mbz4gY2FuIGJlIGVpdGhlcjoKKworJ3Vuc3BlY2lmaWVkJzs7IHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIHBhdGguCisndW5zZXQnOzsJd2hlbiB0aGUgYXR0cmlidXRlIGlzIGRlZmluZWQgYXMgZmFsc2UuCisnc2V0Jzs7CQl3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBhcyB0cnVlLgorPHZhbHVlPjs7CXdoZW4gYSB2YWx1ZSBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgYXR0cmlidXRlLgorCitCdWZmZXJpbmcgaGFwcGVucyBhcyBkb2N1bWVudGVkIHVuZGVyIHRoZSBgR0lUX0ZMVVNIYCBvcHRpb24gaW4KK2xpbmtnaXQ6Z2l0WzFdLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYXZvaWRpbmcgZGVhZGxvY2tzCitjYXVzZWQgYnkgb3ZlcmZpbGxpbmcgYW4gaW5wdXQgYnVmZmVyIG9yIHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBvdXRwdXQKK2J1ZmZlci4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0luIHRoZSBleGFtcGxlcywgdGhlIGZvbGxvd2luZyAnLmdpdGF0dHJpYnV0ZXMnIGZpbGUgaXMgdXNlZDoKKy0tLS0tLS0tLS0tLS0tLQorKi5qYXZhIGRpZmY9amF2YSAtY3JsZiBteUF0dHIKK05vTXlBdHRyLmphdmEgIW15QXR0cgorUkVBRE1FIGNhdmVhdD11bnNwZWNpZmllZAorLS0tLS0tLS0tLS0tLS0tCisKKyogTGlzdGluZyBhIHNpbmdsZSBhdHRyaWJ1dGU6CistLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLWF0dHIgZGlmZiBvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmEKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogZGlmZjogamF2YQorLS0tLS0tLS0tLS0tLS0tCisKKyogTGlzdGluZyBtdWx0aXBsZSBhdHRyaWJ1dGVzIGZvciBhIGZpbGU6CistLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLWF0dHIgY3JsZiBkaWZmIG15QXR0ciAtLSBvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmEKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogY3JsZjogdW5zZXQKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogZGlmZjogamF2YQorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBteUF0dHI6IHNldAorLS0tLS0tLS0tLS0tLS0tCisKKyogTGlzdGluZyBhbGwgYXR0cmlidXRlcyBmb3IgYSBmaWxlOgorLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVjay1hdHRyIC0tYWxsIC0tIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YQorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBkaWZmOiBqYXZhCitvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IG15QXR0cjogc2V0CistLS0tLS0tLS0tLS0tLS0KKworKiBMaXN0aW5nIGFuIGF0dHJpYnV0ZSBmb3IgbXVsdGlwbGUgZmlsZXM6CistLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLWF0dHIgbXlBdHRyIC0tIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YSBvcmcvZXhhbXBsZS9Ob015QXR0ci5qYXZhCitvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IG15QXR0cjogc2V0CitvcmcvZXhhbXBsZS9Ob015QXR0ci5qYXZhOiBteUF0dHI6IHVuc3BlY2lmaWVkCistLS0tLS0tLS0tLS0tLS0KKworKiBOb3QgYWxsIHZhbHVlcyBhcmUgZXF1YWxseSB1bmFtYmlndW91czoKKy0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stYXR0ciBjYXZlYXQgUkVBRE1FCitSRUFETUU6IGNhdmVhdDogdW5zcGVjaWZpZWQKKy0tLS0tLS0tLS0tLS0tLQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzM5MjRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dApAQCAtMCwwICsxLDEyNiBAQAorZ2l0LWNoZWNrLWlnbm9yZSgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2staWdub3JlIC0gRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVjay1pZ25vcmUnIFs8b3B0aW9ucz5dIDxwYXRobmFtZT4uLi4KKydnaXQgY2hlY2staWdub3JlJyBbPG9wdGlvbnM+XSAtLXN0ZGluCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitGb3IgZWFjaCBwYXRobmFtZSBnaXZlbiB2aWEgdGhlIGNvbW1hbmQtbGluZSBvciBmcm9tIGEgZmlsZSB2aWEKK2AtLXN0ZGluYCwgY2hlY2sgd2hldGhlciB0aGUgZmlsZSBpcyBleGNsdWRlZCBieSAuZ2l0aWdub3JlIChvciBvdGhlcgoraW5wdXQgZmlsZXMgdG8gdGhlIGV4Y2x1ZGUgbWVjaGFuaXNtKSBhbmQgb3V0cHV0IHRoZSBwYXRoIGlmIGl0IGlzCitleGNsdWRlZC4KKworQnkgZGVmYXVsdCwgdHJhY2tlZCBmaWxlcyBhcmUgbm90IHNob3duIGF0IGFsbCBzaW5jZSB0aGV5IGFyZSBub3QKK3N1YmplY3QgdG8gZXhjbHVkZSBydWxlczsgYnV0IHNlZSBgLS1uby1pbmRleCcuCisKK09QVElPTlMKKy0tLS0tLS0KKy1xLCAtLXF1aWV0OjoKKwlEb24ndCBvdXRwdXQgYW55dGhpbmcsIGp1c3Qgc2V0IGV4aXQgc3RhdHVzLiAgVGhpcyBpcyBvbmx5CisJdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZS4KKworLXYsIC0tdmVyYm9zZTo6CisJSW5zdGVhZCBvZiBwcmludGluZyB0aGUgcGF0aHMgdGhhdCBhcmUgZXhjbHVkZWQsIGZvciBlYWNoIHBhdGgKKwl0aGF0IG1hdGNoZXMgYW4gZXhjbHVkZSBwYXR0ZXJuLCBwcmludCB0aGUgZXhjbHVkZSBwYXR0ZXJuCisJdG9nZXRoZXIgd2l0aCB0aGUgcGF0aC4gIChNYXRjaGluZyBhbiBleGNsdWRlIHBhdHRlcm4gdXN1YWxseQorCW1lYW5zIHRoZSBwYXRoIGlzIGV4Y2x1ZGVkLCBidXQgaWYgdGhlIHBhdHRlcm4gYmVnaW5zIHdpdGggJyEnCisJdGhlbiBpdCBpcyBhIG5lZ2F0ZWQgcGF0dGVybiBhbmQgbWF0Y2hpbmcgaXQgbWVhbnMgdGhlIHBhdGggaXMKKwlOT1QgZXhjbHVkZWQuKQorKworRm9yIHByZWNlZGVuY2UgcnVsZXMgd2l0aGluIGFuZCBiZXR3ZWVuIGV4Y2x1ZGUgc291cmNlcywgc2VlCitsaW5rZ2l0OmdpdGlnbm9yZVs1XS4KKworLS1zdGRpbjo6CisJUmVhZCBwYXRobmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIG9uZSBwZXIgbGluZSwKKwlpbnN0ZWFkIG9mIGZyb20gdGhlIGNvbW1hbmQtbGluZS4KKworLXo6OgorCVRoZSBvdXRwdXQgZm9ybWF0IGlzIG1vZGlmaWVkIHRvIGJlIG1hY2hpbmUtcGFyc2FibGUgKHNlZQorCWJlbG93KS4gIElmIGAtLXN0ZGluYCBpcyBhbHNvIGdpdmVuLCBpbnB1dCBwYXRocyBhcmUgc2VwYXJhdGVkCisJd2l0aCBhIE5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBhIGxpbmVmZWVkIGNoYXJhY3Rlci4KKworLW4sIC0tbm9uLW1hdGNoaW5nOjoKKwlTaG93IGdpdmVuIHBhdGhzIHdoaWNoIGRvbid0IG1hdGNoIGFueSBwYXR0ZXJuLgkgVGhpcyBvbmx5CisJbWFrZXMgc2Vuc2Ugd2hlbiBgLS12ZXJib3NlYCBpcyBlbmFibGVkLCBvdGhlcndpc2UgaXQgd291bGQKKwlub3QgYmUgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBwYXRocyB3aGljaCBtYXRjaCBhCisJcGF0dGVybiBhbmQgdGhvc2Ugd2hpY2ggZG9uJ3QuCisKKy0tbm8taW5kZXg6OgorCURvbid0IGxvb2sgaW4gdGhlIGluZGV4IHdoZW4gdW5kZXJ0YWtpbmcgdGhlIGNoZWNrcy4gVGhpcyBjYW4KKwliZSB1c2VkIHRvIGRlYnVnIHdoeSBhIHBhdGggYmVjYW1lIHRyYWNrZWQgYnkgZS5nLiBgZ2l0IGFkZCAuYAorCWFuZCB3YXMgbm90IGlnbm9yZWQgYnkgdGhlIHJ1bGVzIGFzIGV4cGVjdGVkIGJ5IHRoZSB1c2VyIG9yIHdoZW4KKwlkZXZlbG9waW5nIHBhdHRlcm5zIGluY2x1ZGluZyBuZWdhdGlvbiB0byBtYXRjaCBhIHBhdGggcHJldmlvdXNseQorCWFkZGVkIHdpdGggYGdpdCBhZGQgLWZgLgorCitPVVRQVVQKKy0tLS0tLQorCitCeSBkZWZhdWx0LCBhbnkgb2YgdGhlIGdpdmVuIHBhdGhuYW1lcyB3aGljaCBtYXRjaCBhbiBpZ25vcmUgcGF0dGVybgord2lsbCBiZSBvdXRwdXQsIG9uZSBwZXIgbGluZS4gIElmIG5vIHBhdHRlcm4gbWF0Y2hlcyBhIGdpdmVuIHBhdGgsCitub3RoaW5nIHdpbGwgYmUgb3V0cHV0IGZvciB0aGF0IHBhdGg7IHRoaXMgbWVhbnMgdGhhdCBwYXRoIHdpbGwgbm90IGJlCitpZ25vcmVkLgorCitJZiBgLS12ZXJib3NlYCBpcyBzcGVjaWZpZWQsIHRoZSBvdXRwdXQgaXMgYSBzZXJpZXMgb2YgbGluZXMgb2YgdGhlIGZvcm06CisKKzxzb3VyY2U+IDxDT0xPTj4gPGxpbmVudW0+IDxDT0xPTj4gPHBhdHRlcm4+IDxIVD4gPHBhdGhuYW1lPgorCis8cGF0aG5hbWU+IGlzIHRoZSBwYXRoIG9mIGEgZmlsZSBiZWluZyBxdWVyaWVkLCA8cGF0dGVybj4gaXMgdGhlCittYXRjaGluZyBwYXR0ZXJuLCA8c291cmNlPiBpcyB0aGUgcGF0dGVybidzIHNvdXJjZSBmaWxlLCBhbmQgPGxpbmVudW0+CitpcyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIHBhdHRlcm4gd2l0aGluIHRoYXQgc291cmNlLiAgSWYgdGhlIHBhdHRlcm4KK2NvbnRhaW5lZCBhIGAhYCBwcmVmaXggb3IgYC9gIHN1ZmZpeCwgaXQgd2lsbCBiZSBwcmVzZXJ2ZWQgaW4gdGhlCitvdXRwdXQuICA8c291cmNlPiB3aWxsIGJlIGFuIGFic29sdXRlIHBhdGggd2hlbiByZWZlcnJpbmcgdG8gdGhlIGZpbGUKK2NvbmZpZ3VyZWQgYnkgYGNvcmUuZXhjbHVkZXNGaWxlYCwgb3IgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdAord2hlbiByZWZlcnJpbmcgdG8gYC5naXQvaW5mby9leGNsdWRlYCBvciBhIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBmaWxlLgorCitJZiBgLXpgIGlzIHNwZWNpZmllZCwgdGhlIHBhdGhuYW1lcyBpbiB0aGUgb3V0cHV0IGFyZSBkZWxpbWl0ZWQgYnkgdGhlCitudWxsIGNoYXJhY3RlcjsgaWYgYC0tdmVyYm9zZWAgaXMgYWxzbyBzcGVjaWZpZWQgdGhlbiBudWxsIGNoYXJhY3RlcnMKK2FyZSBhbHNvIHVzZWQgaW5zdGVhZCBvZiBjb2xvbnMgYW5kIGhhcmQgdGFiczoKKworPHNvdXJjZT4gPE5VTEw+IDxsaW5lbnVtPiA8TlVMTD4gPHBhdHRlcm4+IDxOVUxMPiA8cGF0aG5hbWU+IDxOVUxMPgorCitJZiBgLW5gIG9yIGAtLW5vbi1tYXRjaGluZ2AgYXJlIHNwZWNpZmllZCwgbm9uLW1hdGNoaW5nIHBhdGhuYW1lcyB3aWxsCithbHNvIGJlIG91dHB1dCwgaW4gd2hpY2ggY2FzZSBhbGwgZmllbGRzIGluIGVhY2ggb3V0cHV0IHJlY29yZCBleGNlcHQKK2ZvciA8cGF0aG5hbWU+IHdpbGwgYmUgZW1wdHkuICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBydW5uaW5nCitub24taW50ZXJhY3RpdmVseSwgc28gdGhhdCBmaWxlcyBjYW4gYmUgaW5jcmVtZW50YWxseSBzdHJlYW1lZCB0bworU1RESU4gb2YgYSBsb25nLXJ1bm5pbmcgY2hlY2staWdub3JlIHByb2Nlc3MsIGFuZCBmb3IgZWFjaCBvZiB0aGVzZQorZmlsZXMsIFNURE9VVCB3aWxsIGluZGljYXRlIHdoZXRoZXIgdGhhdCBmaWxlIG1hdGNoZWQgYSBwYXR0ZXJuIG9yCitub3QuICAoV2l0aG91dCB0aGlzIG9wdGlvbiwgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byB0ZWxsIHdoZXRoZXIgdGhlCithYnNlbmNlIG9mIG91dHB1dCBmb3IgYSBnaXZlbiBmaWxlIG1lYW50IHRoYXQgaXQgZGlkbid0IG1hdGNoIGFueQorcGF0dGVybiwgb3IgdGhhdCB0aGUgb3V0cHV0IGhhZG4ndCBiZWVuIGdlbmVyYXRlZCB5ZXQuKQorCitCdWZmZXJpbmcgaGFwcGVucyBhcyBkb2N1bWVudGVkIHVuZGVyIHRoZSBgR0lUX0ZMVVNIYCBvcHRpb24gaW4KK2xpbmtnaXQ6Z2l0WzFdLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYXZvaWRpbmcgZGVhZGxvY2tzCitjYXVzZWQgYnkgb3ZlcmZpbGxpbmcgYW4gaW5wdXQgYnVmZmVyIG9yIHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBvdXRwdXQKK2J1ZmZlci4KKworRVhJVCBTVEFUVVMKKy0tLS0tLS0tLS0tCisKKzA6OgorCU9uZSBvciBtb3JlIG9mIHRoZSBwcm92aWRlZCBwYXRocyBpcyBpZ25vcmVkLgorCisxOjoKKwlOb25lIG9mIHRoZSBwcm92aWRlZCBwYXRocyBhcmUgaWdub3JlZC4KKworMTI4OjoKKwlBIGZhdGFsIGVycm9yIHdhcyBlbmNvdW50ZXJlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdGlnbm9yZVs1XQorbGlua2dpdDpnaXQtY29uZmlnWzFdCitsaW5rZ2l0OmdpdC1scy1maWxlc1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLW1haWxtYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stbWFpbG1hcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyMDU1ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLW1haWxtYXAudHh0CkBAIC0wLDAgKzEsNDcgQEAKK2dpdC1jaGVjay1tYWlsbWFwKDEpCis9PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2stbWFpbG1hcCAtIFNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2hlY2stbWFpbG1hcCcgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0ZvciBlYWNoIGBgTmFtZSAkJDx1c2VyQGhvc3Q+JCQnJyBvciBgYCQkPHVzZXJAaG9zdD4kJCcnIGZyb20gdGhlIGNvbW1hbmQtbGluZQorb3Igc3RhbmRhcmQgaW5wdXQgKHdoZW4gdXNpbmcgYC0tc3RkaW5gKSwgbG9vayB1cCB0aGUgcGVyc29uJ3MgY2Fub25pY2FsIG5hbWUKK2FuZCBlbWFpbCBhZGRyZXNzIChzZWUgIk1hcHBpbmcgQXV0aG9ycyIgYmVsb3cpLiBJZiBmb3VuZCwgcHJpbnQgdGhlbTsKK290aGVyd2lzZSBwcmludCB0aGUgaW5wdXQgYXMtaXMuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1zdGRpbjo6CisJUmVhZCBjb250YWN0cywgb25lIHBlciBsaW5lLCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBhZnRlciBleGhhdXN0aW5nCisJY29udGFjdHMgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQtbGluZS4KKworCitPVVRQVVQKKy0tLS0tLQorCitGb3IgZWFjaCBjb250YWN0LCBhIHNpbmdsZSBsaW5lIGlzIG91dHB1dCwgdGVybWluYXRlZCBieSBhIG5ld2xpbmUuICBJZiB0aGUKK25hbWUgaXMgcHJvdmlkZWQgb3Iga25vd24gdG8gdGhlICdtYWlsbWFwJywgYGBOYW1lICQkPHVzZXJAaG9zdD4kJCcnIGlzCitwcmludGVkOyBvdGhlcndpc2Ugb25seSBgYCQkPHVzZXJAaG9zdD4kJCcnIGlzIHByaW50ZWQuCisKKworTUFQUElORyBBVVRIT1JTCistLS0tLS0tLS0tLS0tLS0KKworaW5jbHVkZTo6bWFpbG1hcC50eHRbXQorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTZhNDE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxNDAgQEAKK2dpdC1jaGVjay1yZWYtZm9ybWF0KDEpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2stcmVmLWZvcm1hdCAtIEVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVjay1yZWYtZm9ybWF0JyBbLS1ub3JtYWxpemVdCisgICAgICAgWy0tW25vLV1hbGxvdy1vbmVsZXZlbF0gWy0tcmVmc3BlYy1wYXR0ZXJuXQorICAgICAgIDxyZWZuYW1lPgorJ2dpdCBjaGVjay1yZWYtZm9ybWF0JyAtLWJyYW5jaCA8YnJhbmNobmFtZS1zaG9ydGhhbmQ+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ2hlY2tzIGlmIGEgZ2l2ZW4gJ3JlZm5hbWUnIGlzIGFjY2VwdGFibGUsIGFuZCBleGl0cyB3aXRoIGEgbm9uLXplcm8KK3N0YXR1cyBpZiBpdCBpcyBub3QuCisKK0EgcmVmZXJlbmNlIGlzIHVzZWQgaW4gR2l0IHRvIHNwZWNpZnkgYnJhbmNoZXMgYW5kIHRhZ3MuICBBCiticmFuY2ggaGVhZCBpcyBzdG9yZWQgaW4gdGhlIGByZWZzL2hlYWRzYCBoaWVyYXJjaHksIHdoaWxlCithIHRhZyBpcyBzdG9yZWQgaW4gdGhlIGByZWZzL3RhZ3NgIGhpZXJhcmNoeSBvZiB0aGUgcmVmIG5hbWVzcGFjZQorKHR5cGljYWxseSBpbiBgJEdJVF9ESVIvcmVmcy9oZWFkc2AgYW5kIGAkR0lUX0RJUi9yZWZzL3RhZ3NgCitkaXJlY3RvcmllcyBvciwgYXMgZW50cmllcyBpbiBmaWxlIGAkR0lUX0RJUi9wYWNrZWQtcmVmc2AKK2lmIHJlZnMgYXJlIHBhY2tlZCBieSBgZ2l0IGdjYCkuCisKK0dpdCBpbXBvc2VzIHRoZSBmb2xsb3dpbmcgcnVsZXMgb24gaG93IHJlZmVyZW5jZXMgYXJlIG5hbWVkOgorCisuIFRoZXkgY2FuIGluY2x1ZGUgc2xhc2ggYC9gIGZvciBoaWVyYXJjaGljYWwgKGRpcmVjdG9yeSkKKyAgZ3JvdXBpbmcsIGJ1dCBubyBzbGFzaC1zZXBhcmF0ZWQgY29tcG9uZW50IGNhbiBiZWdpbiB3aXRoIGEKKyAgZG90IGAuYCBvciBlbmQgd2l0aCB0aGUgc2VxdWVuY2UgYC5sb2NrYC4KKworLiBUaGV5IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgYC9gLiBUaGlzIGVuZm9yY2VzIHRoZSBwcmVzZW5jZSBvZiBhCisgIGNhdGVnb3J5IGxpa2UgYGhlYWRzL2AsIGB0YWdzL2AgZXRjLiBidXQgdGhlIGFjdHVhbCBuYW1lcyBhcmUgbm90CisgIHJlc3RyaWN0ZWQuICBJZiB0aGUgYC0tYWxsb3ctb25lbGV2ZWxgIG9wdGlvbiBpcyB1c2VkLCB0aGlzIHJ1bGUKKyAgaXMgd2FpdmVkLgorCisuIFRoZXkgY2Fubm90IGhhdmUgdHdvIGNvbnNlY3V0aXZlIGRvdHMgYC4uYCBhbnl3aGVyZS4KKworLiBUaGV5IGNhbm5vdCBoYXZlIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAoaS5lLiBieXRlcyB3aG9zZQorICB2YWx1ZXMgYXJlIGxvd2VyIHRoYW4gXDA0MCwgb3IgXDE3NyBgREVMYCksIHNwYWNlLCB0aWxkZSBgfmAsCisgIGNhcmV0IGBeYCwgb3IgY29sb24gYDpgIGFueXdoZXJlLgorCisuIFRoZXkgY2Fubm90IGhhdmUgcXVlc3Rpb24tbWFyayBgP2AsIGFzdGVyaXNrIGAqYCwgb3Igb3BlbgorICBicmFja2V0IGBbYCBhbnl3aGVyZS4gIFNlZSB0aGUgYC0tcmVmc3BlYy1wYXR0ZXJuYCBvcHRpb24gYmVsb3cgZm9yCisgIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUuCisKKy4gVGhleSBjYW5ub3QgYmVnaW4gb3IgZW5kIHdpdGggYSBzbGFzaCBgL2Agb3IgY29udGFpbiBtdWx0aXBsZQorICBjb25zZWN1dGl2ZSBzbGFzaGVzIChzZWUgdGhlIGAtLW5vcm1hbGl6ZWAgb3B0aW9uIGJlbG93IGZvciBhbgorICBleGNlcHRpb24gdG8gdGhpcyBydWxlKQorCisuIFRoZXkgY2Fubm90IGVuZCB3aXRoIGEgZG90IGAuYC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgc2VxdWVuY2UgYEB7YC4KKworLiBUaGV5IGNhbm5vdCBiZSB0aGUgc2luZ2xlIGNoYXJhY3RlciBgQGAuCisKKy4gVGhleSBjYW5ub3QgY29udGFpbiBhIGBcYC4KKworVGhlc2UgcnVsZXMgbWFrZSBpdCBlYXN5IGZvciBzaGVsbCBzY3JpcHQgYmFzZWQgdG9vbHMgdG8gcGFyc2UKK3JlZmVyZW5jZSBuYW1lcywgcGF0aG5hbWUgZXhwYW5zaW9uIGJ5IHRoZSBzaGVsbCB3aGVuIGEgcmVmZXJlbmNlIG5hbWUgaXMgdXNlZAordW5xdW90ZWQgKGJ5IG1pc3Rha2UpLCBhbmQgYWxzbyBhdm9pZCBhbWJpZ3VpdGllcyBpbiBjZXJ0YWluCityZWZlcmVuY2UgbmFtZSBleHByZXNzaW9ucyAoc2VlIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddKToKKworLiBBIGRvdWJsZS1kb3QgYC4uYCBpcyBvZnRlbiB1c2VkIGFzIGluIGByZWYxLi5yZWYyYCwgYW5kIGluIHNvbWUKKyAgY29udGV4dHMgdGhpcyBub3RhdGlvbiBtZWFucyBgXnJlZjEgcmVmMmAgKGkuZS4gbm90IGluCisgIGByZWYxYCBhbmQgaW4gYHJlZjJgKS4KKworLiBBIHRpbGRlIGB+YCBhbmQgY2FyZXQgYF5gIGFyZSB1c2VkIHRvIGludHJvZHVjZSB0aGUgcG9zdGZpeAorICAnbnRoIHBhcmVudCcgYW5kICdwZWVsIG9uaW9uJyBvcGVyYXRpb24uCisKKy4gQSBjb2xvbiBgOmAgaXMgdXNlZCBhcyBpbiBgc3JjcmVmOmRzdHJlZmAgdG8gbWVhbiAidXNlIHNyY3JlZlwncworICB2YWx1ZSBhbmQgc3RvcmUgaXQgaW4gZHN0cmVmIiBpbiBmZXRjaCBhbmQgcHVzaCBvcGVyYXRpb25zLgorICBJdCBtYXkgYWxzbyBiZSB1c2VkIHRvIHNlbGVjdCBhIHNwZWNpZmljIG9iamVjdCBzdWNoIGFzIHdpdGgKKyAgJ2dpdCBjYXQtZmlsZSc6ICJnaXQgY2F0LWZpbGUgYmxvYiB2MS4zLjM6cmVmcy5jIi4KKworLiBhdC1vcGVuLWJyYWNlIGBAe2AgaXMgdXNlZCBhcyBhIG5vdGF0aW9uIHRvIGFjY2VzcyBhIHJlZmxvZyBlbnRyeS4KKworV2l0aCB0aGUgYC0tYnJhbmNoYCBvcHRpb24sIHRoZSBjb21tYW5kIHRha2VzIGEgbmFtZSBhbmQgY2hlY2tzIGlmCitpdCBjYW4gYmUgdXNlZCBhcyBhIHZhbGlkIGJyYW5jaCBuYW1lIChlLmcuIHdoZW4gY3JlYXRpbmcgYSBuZXcKK2JyYW5jaCkuIEJ1dCBiZSBjYXV0aW91cyB3aGVuIHVzaW5nIHRoZQorcHJldmlvdXMgY2hlY2tvdXQgc3ludGF4IHRoYXQgbWF5IHJlZmVyIHRvIGEgZGV0YWNoZWQgSEVBRCBzdGF0ZS4KK1RoZSBydWxlIGBnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCAkbmFtZWAgaW1wbGVtZW50cworbWF5IGJlIHN0cmljdGVyIHRoYW4gd2hhdCBgZ2l0IGNoZWNrLXJlZi1mb3JtYXQgcmVmcy9oZWFkcy8kbmFtZWAKK3NheXMgKGUuZy4gYSBkYXNoIG1heSBhcHBlYXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJlZiBjb21wb25lbnQsCitidXQgaXQgaXMgZXhwbGljaXRseSBmb3JiaWRkZW4gYXQgdGhlIGJlZ2lubmluZyBvZiBhIGJyYW5jaCBuYW1lKS4KK1doZW4gcnVuIHdpdGggYC0tYnJhbmNoYCBvcHRpb24gaW4gYSByZXBvc2l0b3J5LCB0aGUgaW5wdXQgaXMgZmlyc3QKK2V4cGFuZGVkIGZvciB0aGUgYGBwcmV2aW91cyBjaGVja291dCBzeW50YXgnJworYEB7LW59YC4gIEZvciBleGFtcGxlLCBgQHstMX1gIGlzIGEgd2F5IHRvIHJlZmVyIHRoZSBsYXN0IHRoaW5nIHRoYXQKK3dhcyBjaGVja2VkIG91dCB1c2luZyAiZ2l0IHN3aXRjaCIgb3IgImdpdCBjaGVja291dCIgb3BlcmF0aW9uLgorVGhpcyBvcHRpb24gc2hvdWxkIGJlCit1c2VkIGJ5IHBvcmNlbGFpbnMgdG8gYWNjZXB0IHRoaXMgc3ludGF4IGFueXdoZXJlIGEgYnJhbmNoIG5hbWUgaXMKK2V4cGVjdGVkLCBzbyB0aGV5IGNhbiBhY3QgYXMgaWYgeW91IHR5cGVkIHRoZSBicmFuY2ggbmFtZS4gQXMgYW4KK2V4Y2VwdGlvbiBub3RlIHRoYXQsIHRoZSBgYHByZXZpb3VzIGNoZWNrb3V0IG9wZXJhdGlvbicnIG1pZ2h0IHJlc3VsdAoraW4gYSBjb21taXQgb2JqZWN0IG5hbWUgd2hlbiB0aGUgTi10aCBsYXN0IHRoaW5nIGNoZWNrZWQgb3V0IHdhcyBub3QKK2EgYnJhbmNoLgorCitPUFRJT05TCistLS0tLS0tCistLVtuby1dYWxsb3ctb25lbGV2ZWw6OgorCUNvbnRyb2xzIHdoZXRoZXIgb25lLWxldmVsIHJlZm5hbWVzIGFyZSBhY2NlcHRlZCAoaS5lLiwKKwlyZWZuYW1lcyB0aGF0IGRvIG5vdCBjb250YWluIG11bHRpcGxlIGAvYC1zZXBhcmF0ZWQKKwljb21wb25lbnRzKS4gIFRoZSBkZWZhdWx0IGlzIGAtLW5vLWFsbG93LW9uZWxldmVsYC4KKworLS1yZWZzcGVjLXBhdHRlcm46OgorCUludGVycHJldCA8cmVmbmFtZT4gYXMgYSByZWZlcmVuY2UgbmFtZSBwYXR0ZXJuIGZvciBhIHJlZnNwZWMKKwkoYXMgdXNlZCB3aXRoIHJlbW90ZSByZXBvc2l0b3JpZXMpLiAgSWYgdGhpcyBvcHRpb24gaXMKKwllbmFibGVkLCA8cmVmbmFtZT4gaXMgYWxsb3dlZCB0byBjb250YWluIGEgc2luZ2xlIGAqYAorCWluIHRoZSByZWZzcGVjIChlLmcuLCBgZm9vL2JhciovYmF6YCBvciBgZm9vL2JhcipiYXovYAorCWJ1dCBub3QgYGZvby9iYXIqL2JheipgKS4KKworLS1ub3JtYWxpemU6OgorCU5vcm1hbGl6ZSAncmVmbmFtZScgYnkgcmVtb3ZpbmcgYW55IGxlYWRpbmcgc2xhc2ggKGAvYCkKKwljaGFyYWN0ZXJzIGFuZCBjb2xsYXBzaW5nIHJ1bnMgb2YgYWRqYWNlbnQgc2xhc2hlcyBiZXR3ZWVuCisJbmFtZSBjb21wb25lbnRzIGludG8gYSBzaW5nbGUgc2xhc2guICBJZiB0aGUgbm9ybWFsaXplZAorCXJlZm5hbWUgaXMgdmFsaWQgdGhlbiBwcmludCBpdCB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQKKwl3aXRoIGEgc3RhdHVzIG9mIDAsIG90aGVyd2lzZSBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMuCisJKGAtLXByaW50YCBpcyBhIGRlcHJlY2F0ZWQgd2F5IHRvIHNwZWxsIGAtLW5vcm1hbGl6ZWAuKQorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFByaW50IHRoZSBuYW1lIG9mIHRoZSBwcmV2aW91cyB0aGluZyBjaGVja2VkIG91dDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfQorLS0tLS0tLS0tLS0tCisKKyogRGV0ZXJtaW5lIHRoZSByZWZlcmVuY2UgbmFtZSB0byB1c2UgZm9yIGEgbmV3IGJyYW5jaDoKKysKKy0tLS0tLS0tLS0tLQorJCByZWY9JChnaXQgY2hlY2stcmVmLWZvcm1hdCAtLW5vcm1hbGl6ZSAicmVmcy9oZWFkcy8kbmV3YnJhbmNoIil8fAoreyBlY2hvICJ3ZSBkbyBub3QgbGlrZSAnJG5ld2JyYW5jaCcgYXMgYSBicmFuY2ggbmFtZS4iID4mMiA7IGV4aXQgMSA7IH0KKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDMzZTdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0CkBAIC0wLDAgKzEsMTc3IEBACitnaXQtY2hlY2tvdXQtaW5kZXgoMSkKKz09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2tvdXQtaW5kZXggLSBDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2hlY2tvdXQtaW5kZXgnIFstdV0gWy1xXSBbLWFdIFstZl0gWy1uXSBbLS1wcmVmaXg9PHN0cmluZz5dCisJCSAgIFstLXN0YWdlPTxudW1iZXI+fGFsbF0KKwkJICAgWy0tdGVtcF0KKwkJICAgWy16XSBbLS1zdGRpbl0KKwkJICAgWy0tXSBbPGZpbGU+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1dpbGwgY29weSBhbGwgZmlsZXMgbGlzdGVkIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorKG5vdCBvdmVyd3JpdGluZyBleGlzdGluZyBmaWxlcykuCisKK09QVElPTlMKKy0tLS0tLS0KKy11OjoKKy0taW5kZXg6OgorCXVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGZvciB0aGUgY2hlY2tlZCBvdXQgZW50cmllcyBpbgorCXRoZSBpbmRleCBmaWxlLgorCistcTo6CistLXF1aWV0OjoKKwliZSBxdWlldCBpZiBmaWxlcyBleGlzdCBvciBhcmUgbm90IGluIHRoZSBpbmRleAorCistZjo6CistLWZvcmNlOjoKKwlmb3JjZXMgb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzCisKKy1hOjoKKy0tYWxsOjoKKwljaGVja3Mgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXguICBDYW5ub3QgYmUgdXNlZAorCXRvZ2V0aGVyIHdpdGggZXhwbGljaXQgZmlsZW5hbWVzLgorCistbjo6CistLW5vLWNyZWF0ZTo6CisJRG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzLCBvbmx5IHJlZnJlc2ggZmlsZXMgYWxyZWFkeSBjaGVja2VkCisJb3V0LgorCistLXByZWZpeD08c3RyaW5nPjo6CisJV2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiAodXN1YWxseSBhIGRpcmVjdG9yeQorCWluY2x1ZGluZyBhIHRyYWlsaW5nIC8pCisKKy0tc3RhZ2U9PG51bWJlcj58YWxsOjoKKwlJbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB1bm1lcmdlZCBlbnRyaWVzLCBjb3B5IG91dCB0aGUKKwlmaWxlcyBmcm9tIG5hbWVkIHN0YWdlLiAgPG51bWJlcj4gbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMuCisJTm90ZTogLS1zdGFnZT1hbGwgYXV0b21hdGljYWxseSBpbXBsaWVzIC0tdGVtcC4KKworLS10ZW1wOjoKKwlJbnN0ZWFkIG9mIGNvcHlpbmcgdGhlIGZpbGVzIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorCXdyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcy4gIFRoZSB0ZW1wb3JhcnkgbmFtZQorCWFzc29jaWF0aW9ucyB3aWxsIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0LgorCistLXN0ZGluOjoKKwlJbnN0ZWFkIG9mIHRha2luZyBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIGNvbW1hbmQgbGluZSwKKwlyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuICBQYXRocyBhcmUKKwlzZXBhcmF0ZWQgYnkgTEYgKGkuZS4gb25lIHBhdGggcGVyIGxpbmUpIGJ5IGRlZmF1bHQuCisKKy16OjoKKwlPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1zdGRpbmA7IHBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aAorCU5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBMRi4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCitUaGUgb3JkZXIgb2YgdGhlIGZsYWdzIHVzZWQgdG8gbWF0dGVyLCBidXQgbm90IGFueW1vcmUuCisKK0p1c3QgZG9pbmcgYGdpdCBjaGVja291dC1pbmRleGAgZG9lcyBub3RoaW5nLiBZb3UgcHJvYmFibHkgbWVhbnQKK2BnaXQgY2hlY2tvdXQtaW5kZXggLWFgLiBBbmQgaWYgeW91IHdhbnQgdG8gZm9yY2UgaXQsIHlvdSB3YW50CitgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hYC4KKworSW50dWl0aXZlbmVzcyBpcyBub3QgdGhlIGdvYWwgaGVyZS4gUmVwZWF0YWJpbGl0eSBpcy4gVGhlIHJlYXNvbiBmb3IKK3RoZSAibm8gYXJndW1lbnRzIG1lYW5zIG5vIHdvcmsiIGJlaGF2aW9yIGlzIHRoYXQgZnJvbSBzY3JpcHRzIHlvdSBhcmUKK3N1cHBvc2VkIHRvIGJlIGFibGUgdG8gZG86CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZmluZCAuIC1uYW1lICcqLmgnIC1wcmludDAgfCB4YXJncyAtMCBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS0KKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBmb3JjZSBhbGwgZXhpc3RpbmcgYCouaGAgZmlsZXMgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGVpcgorY2FjaGVkIGNvcGllcy4gSWYgYW4gZW1wdHkgY29tbWFuZCBsaW5lIGltcGxpZWQgImFsbCIsIHRoZW4gdGhpcyB3b3VsZAorZm9yY2UtcmVmcmVzaCBldmVyeXRoaW5nIGluIHRoZSBpbmRleCwgd2hpY2ggd2FzIG5vdCB0aGUgcG9pbnQuICBCdXQKK3NpbmNlICdnaXQgY2hlY2tvdXQtaW5kZXgnIGFjY2VwdHMgLS1zdGRpbiBpdCB3b3VsZCBiZSBmYXN0ZXIgdG8gdXNlOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGZpbmQgLiAtbmFtZSAnKi5oJyAtcHJpbnQwIHwgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC16IC0tc3RkaW4KKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGAtLWAgaXMganVzdCBhIGdvb2QgaWRlYSB3aGVuIHlvdSBrbm93IHRoZSByZXN0IHdpbGwgYmUgZmlsZW5hbWVzOworaXQgd2lsbCBwcmV2ZW50IHByb2JsZW1zIHdpdGggYSBmaWxlbmFtZSBvZiwgZm9yIGV4YW1wbGUsICBgLWFgLgorVXNpbmcgYC0tYCBpcyBwcm9iYWJseSBhIGdvb2QgcG9saWN5IGluIHNjcmlwdHMuCisKKworVXNpbmcgLS10ZW1wIG9yIC0tc3RhZ2U9YWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1doZW4gYC0tdGVtcGAgaXMgdXNlZCAob3IgaW1wbGllZCBieSBgLS1zdGFnZT1hbGxgKQorJ2dpdCBjaGVja291dC1pbmRleCcgd2lsbCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBmb3IgZWFjaCBpbmRleAorZW50cnkgYmVpbmcgY2hlY2tlZCBvdXQuICBUaGUgaW5kZXggd2lsbCBub3QgYmUgdXBkYXRlZCB3aXRoIHN0YXQKK2luZm9ybWF0aW9uLiAgVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBjYWxsZXIgbmVlZHMgYWxsCitzdGFnZXMgb2YgYWxsIHVubWVyZ2VkIGVudHJpZXMgc28gdGhhdCB0aGUgdW5tZXJnZWQgZmlsZXMgY2FuIGJlCitwcm9jZXNzZWQgYnkgYW4gZXh0ZXJuYWwgbWVyZ2UgdG9vbC4KKworQSBsaXN0aW5nIHdpbGwgYmUgd3JpdHRlbiB0byBzdGRvdXQgcHJvdmlkaW5nIHRoZSBhc3NvY2lhdGlvbiBvZgordGVtcG9yYXJ5IGZpbGUgbmFtZXMgdG8gdHJhY2tlZCBwYXRoIG5hbWVzLiAgVGhlIGxpc3RpbmcgZm9ybWF0CitoYXMgdHdvIHZhcmlhdGlvbnM6CisKKyAgICAuIHRlbXBuYW1lIFRBQiBwYXRoIFJTCisrCitUaGUgZmlyc3QgZm9ybWF0IGlzIHdoYXQgZ2V0cyB1c2VkIHdoZW4gYC0tc3RhZ2VgIGlzIG9taXR0ZWQgb3IKK2lzIG5vdCBgLS1zdGFnZT1hbGxgLiBUaGUgZmllbGQgdGVtcG5hbWUgaXMgdGhlIHRlbXBvcmFyeSBmaWxlCituYW1lIGhvbGRpbmcgdGhlIGZpbGUgY29udGVudCBhbmQgcGF0aCBpcyB0aGUgdHJhY2tlZCBwYXRoIG5hbWUgaW4KK3RoZSBpbmRleC4gIE9ubHkgdGhlIHJlcXVlc3RlZCBlbnRyaWVzIGFyZSBvdXRwdXQuCisKKyAgICAuIHN0YWdlMXRlbXAgU1Agc3RhZ2UydGVtcCBTUCBzdGFnZTN0bXAgVEFCIHBhdGggUlMKKysKK1RoZSBzZWNvbmQgZm9ybWF0IGlzIHdoYXQgZ2V0cyB1c2VkIHdoZW4gYC0tc3RhZ2U9YWxsYC4gIFRoZSB0aHJlZQorc3RhZ2UgdGVtcG9yYXJ5IGZpZWxkcyAoc3RhZ2UxdGVtcCwgc3RhZ2UydGVtcCwgc3RhZ2UzdGVtcCkgbGlzdCB0aGUKK25hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGlmIHRoZXJlIGlzIGEgc3RhZ2UgZW50cnkgaW4gdGhlIGluZGV4CitvciBgLmAgaWYgdGhlcmUgaXMgbm8gc3RhZ2UgZW50cnkuICBQYXRocyB3aGljaCBvbmx5IGhhdmUgYSBzdGFnZSAwCitlbnRyeSB3aWxsIGFsd2F5cyBiZSBvbWl0dGVkIGZyb20gdGhlIG91dHB1dC4KKworSW4gYm90aCBmb3JtYXRzIFJTICh0aGUgcmVjb3JkIHNlcGFyYXRvcikgaXMgbmV3bGluZSBieSBkZWZhdWx0CitidXQgd2lsbCBiZSB0aGUgbnVsbCBieXRlIGlmIC16IHdhcyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KK1RoZSB0ZW1wb3JhcnkgZmlsZSBuYW1lcyBhcmUgYWx3YXlzIHNhZmUgc3RyaW5nczsgdGhleSB3aWxsIG5ldmVyCitjb250YWluIGRpcmVjdG9yeSBzZXBhcmF0b3JzIG9yIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIFRoZSBwYXRoCitmaWVsZCBpcyBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCB0aGUgdGVtcG9yYXJ5CitmaWxlIG5hbWVzIGFyZSBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkuCisKK0lmIHRoZSBvYmplY3QgYmVpbmcgY29waWVkIG91dCB0byBhIHRlbXBvcmFyeSBmaWxlIGlzIGEgc3ltYm9saWMKK2xpbmsgdGhlIGNvbnRlbnQgb2YgdGhlIGxpbmsgd2lsbCBiZSB3cml0dGVuIHRvIGEgbm9ybWFsIGZpbGUuICBJdCBpcwordXAgdG8gdGhlIGVuZC11c2VyIG9yIHRoZSBQb3JjZWxhaW4gdG8gbWFrZSB1c2Ugb2YgdGhpcyBpbmZvcm1hdGlvbi4KKworCitFWEFNUExFUworLS0tLS0tLS0KK1RvIHVwZGF0ZSBhbmQgcmVmcmVzaCBvbmx5IHRoZSBmaWxlcyBhbHJlYWR5IGNoZWNrZWQgb3V0OjoKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC1uIC1mIC1hICYmIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLS0KKworVXNpbmcgJ2dpdCBjaGVja291dC1pbmRleCcgdG8gImV4cG9ydCBhbiBlbnRpcmUgdHJlZSI6OgorCVRoZSBwcmVmaXggYWJpbGl0eSBiYXNpY2FsbHkgbWFrZXMgaXQgdHJpdmlhbCB0byB1c2UKKwknZ2l0IGNoZWNrb3V0LWluZGV4JyBhcyBhbiAiZXhwb3J0IGFzIHRyZWUiIGZ1bmN0aW9uLgorCUp1c3QgcmVhZCB0aGUgZGVzaXJlZCB0cmVlIGludG8gdGhlIGluZGV4LCBhbmQgZG86CisrCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD1naXQtZXhwb3J0LWRpci8gLWEKKy0tLS0tLS0tLS0tLS0tLS0KKysKK2BnaXQgY2hlY2tvdXQtaW5kZXhgIHdpbGwgImV4cG9ydCIgdGhlIGluZGV4IGludG8gdGhlIHNwZWNpZmllZAorZGlyZWN0b3J5LgorKworVGhlIGZpbmFsICIvIiBpcyBpbXBvcnRhbnQuIFRoZSBleHBvcnRlZCBuYW1lIGlzIGxpdGVyYWxseSBqdXN0CitwcmVmaXhlZCB3aXRoIHRoZSBzcGVjaWZpZWQgc3RyaW5nLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZQorZm9sbG93aW5nIGV4YW1wbGUuCisKK0V4cG9ydCBmaWxlcyB3aXRoIGEgcHJlZml4OjoKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PS5tZXJnZWQtIE1ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIHdpbGwgY2hlY2sgb3V0IHRoZSBjdXJyZW50bHkgY2FjaGVkIGNvcHkgb2YgYE1ha2VmaWxlYAoraW50byB0aGUgZmlsZSBgLm1lcmdlZC1NYWtlZmlsZWAuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmI5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKQEAgLTAsMCArMSw2MDIgQEAKK2dpdC1jaGVja291dCgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVja291dCAtIFN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2hlY2tvdXQnIFstcV0gWy1mXSBbLW1dIFs8YnJhbmNoPl0KKydnaXQgY2hlY2tvdXQnIFstcV0gWy1mXSBbLW1dIC0tZGV0YWNoIFs8YnJhbmNoPl0KKydnaXQgY2hlY2tvdXQnIFstcV0gWy1mXSBbLW1dIFstLWRldGFjaF0gPGNvbW1pdD4KKydnaXQgY2hlY2tvdXQnIFstcV0gWy1mXSBbLW1dIFtbLWJ8LUJ8LS1vcnBoYW5dIDxuZXdfYnJhbmNoPl0gWzxzdGFydF9wb2ludD5dCisnZ2l0IGNoZWNrb3V0JyBbLWZ8LS1vdXJzfC0tdGhlaXJzfC1tfC0tY29uZmxpY3Q9PHN0eWxlPl0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLgorJ2dpdCBjaGVja291dCcgWy1mfC0tb3Vyc3wtLXRoZWlyc3wtbXwtLWNvbmZsaWN0PTxzdHlsZT5dIFs8dHJlZS1pc2g+XSAtLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdCisnZ2l0IGNoZWNrb3V0JyAoLXB8LS1wYXRjaCkgWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVXBkYXRlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIG1hdGNoIHRoZSB2ZXJzaW9uIGluIHRoZSBpbmRleAorb3IgdGhlIHNwZWNpZmllZCB0cmVlLiAgSWYgbm8gcGF0aHNwZWMgd2FzIGdpdmVuLCAnZ2l0IGNoZWNrb3V0JyB3aWxsCithbHNvIHVwZGF0ZSBgSEVBRGAgdG8gc2V0IHRoZSBzcGVjaWZpZWQgYnJhbmNoIGFzIHRoZSBjdXJyZW50CiticmFuY2guCisKKydnaXQgY2hlY2tvdXQnIFs8YnJhbmNoPl06OgorCVRvIHByZXBhcmUgZm9yIHdvcmtpbmcgb24gYDxicmFuY2g+YCwgc3dpdGNoIHRvIGl0IGJ5IHVwZGF0aW5nCisJdGhlIGluZGV4IGFuZCB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIGJ5IHBvaW50aW5nCisJYEhFQURgIGF0IHRoZSBicmFuY2guIExvY2FsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzIGluIHRoZQorCXdvcmtpbmcgdHJlZSBhcmUga2VwdCwgc28gdGhhdCB0aGV5IGNhbiBiZSBjb21taXR0ZWQgdG8gdGhlCisJYDxicmFuY2g+YC4KKysKK0lmIGA8YnJhbmNoPmAgaXMgbm90IGZvdW5kIGJ1dCB0aGVyZSBkb2VzIGV4aXN0IGEgdHJhY2tpbmcgYnJhbmNoIGluCitleGFjdGx5IG9uZSByZW1vdGUgKGNhbGwgaXQgYDxyZW1vdGU+YCkgd2l0aCBhIG1hdGNoaW5nIG5hbWUgYW5kCitgLS1uby1ndWVzc2AgaXMgbm90IHNwZWNpZmllZCwgdHJlYXQgYXMgZXF1aXZhbGVudCB0bworKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiA8YnJhbmNoPiAtLXRyYWNrIDxyZW1vdGU+LzxicmFuY2g+CistLS0tLS0tLS0tLS0KKysKK1lvdSBjb3VsZCBvbWl0IGA8YnJhbmNoPmAsIGluIHdoaWNoIGNhc2UgdGhlIGNvbW1hbmQgZGVnZW5lcmF0ZXMgdG8KKyJjaGVjayBvdXQgdGhlIGN1cnJlbnQgYnJhbmNoIiwgd2hpY2ggaXMgYSBnbG9yaWZpZWQgbm8tb3Agd2l0aAorcmF0aGVyIGV4cGVuc2l2ZSBzaWRlLWVmZmVjdHMgdG8gc2hvdyBvbmx5IHRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiwKK2lmIGV4aXN0cywgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4KKworJ2dpdCBjaGVja291dCcgLWJ8LUIgPG5ld19icmFuY2g+IFs8c3RhcnQgcG9pbnQ+XTo6CisKKwlTcGVjaWZ5aW5nIGAtYmAgY2F1c2VzIGEgbmV3IGJyYW5jaCB0byBiZSBjcmVhdGVkIGFzIGlmCisJbGlua2dpdDpnaXQtYnJhbmNoWzFdIHdlcmUgY2FsbGVkIGFuZCB0aGVuIGNoZWNrZWQgb3V0LiAgSW4KKwl0aGlzIGNhc2UgeW91IGNhbiB1c2UgdGhlIGAtLXRyYWNrYCBvciBgLS1uby10cmFja2Agb3B0aW9ucywKKwl3aGljaCB3aWxsIGJlIHBhc3NlZCB0byAnZ2l0IGJyYW5jaCcuICBBcyBhIGNvbnZlbmllbmNlLAorCWAtLXRyYWNrYCB3aXRob3V0IGAtYmAgaW1wbGllcyBicmFuY2ggY3JlYXRpb247IHNlZSB0aGUKKwlkZXNjcmlwdGlvbiBvZiBgLS10cmFja2AgYmVsb3cuCisrCitJZiBgLUJgIGlzIGdpdmVuLCBgPG5ld19icmFuY2g+YCBpcyBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3Q7IG90aGVyd2lzZSwgaXQKK2lzIHJlc2V0LiBUaGlzIGlzIHRoZSB0cmFuc2FjdGlvbmFsIGVxdWl2YWxlbnQgb2YKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1mIDxicmFuY2g+IFs8c3RhcnQgcG9pbnQ+XQorJCBnaXQgY2hlY2tvdXQgPGJyYW5jaD4KKy0tLS0tLS0tLS0tLQorKwordGhhdCBpcyB0byBzYXksIHRoZSBicmFuY2ggaXMgbm90IHJlc2V0L2NyZWF0ZWQgdW5sZXNzICJnaXQgY2hlY2tvdXQiIGlzCitzdWNjZXNzZnVsLgorCisnZ2l0IGNoZWNrb3V0JyAtLWRldGFjaCBbPGJyYW5jaD5dOjoKKydnaXQgY2hlY2tvdXQnIFstLWRldGFjaF0gPGNvbW1pdD46OgorCisJUHJlcGFyZSB0byB3b3JrIG9uIHRvcCBvZiBgPGNvbW1pdD5gLCBieSBkZXRhY2hpbmcgYEhFQURgIGF0IGl0CisJKHNlZSAiREVUQUNIRUQgSEVBRCIgc2VjdGlvbiksIGFuZCB1cGRhdGluZyB0aGUgaW5kZXggYW5kIHRoZQorCWZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUuICBMb2NhbCBtb2RpZmljYXRpb25zIHRvIHRoZSBmaWxlcworCWluIHRoZSB3b3JraW5nIHRyZWUgYXJlIGtlcHQsIHNvIHRoYXQgdGhlIHJlc3VsdGluZyB3b3JraW5nCisJdHJlZSB3aWxsIGJlIHRoZSBzdGF0ZSByZWNvcmRlZCBpbiB0aGUgY29tbWl0IHBsdXMgdGhlIGxvY2FsCisJbW9kaWZpY2F0aW9ucy4KKysKK1doZW4gdGhlIGA8Y29tbWl0PmAgYXJndW1lbnQgaXMgYSBicmFuY2ggbmFtZSwgdGhlIGAtLWRldGFjaGAgb3B0aW9uIGNhbgorYmUgdXNlZCB0byBkZXRhY2ggYEhFQURgIGF0IHRoZSB0aXAgb2YgdGhlIGJyYW5jaCAoYGdpdCBjaGVja291dAorPGJyYW5jaD5gIHdvdWxkIGNoZWNrIG91dCB0aGF0IGJyYW5jaCB3aXRob3V0IGRldGFjaGluZyBgSEVBRGApLgorKworT21pdHRpbmcgYDxicmFuY2g+YCBkZXRhY2hlcyBgSEVBRGAgYXQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2guCisKKydnaXQgY2hlY2tvdXQnIFstZnwtLW91cnN8LS10aGVpcnN8LW18LS1jb25mbGljdD08c3R5bGU+XSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uOjoKKydnaXQgY2hlY2tvdXQnIFstZnwtLW91cnN8LS10aGVpcnN8LW18LS1jb25mbGljdD08c3R5bGU+XSBbPHRyZWUtaXNoPl0gLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXTo6CisKKwlPdmVyd3JpdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyB0aGF0IG1hdGNoIHRoZSBwYXRoc3BlYy4KKwlXaGVuIHRoZSBgPHRyZWUtaXNoPmAgKG1vc3Qgb2Z0ZW4gYSBjb21taXQpIGlzIG5vdCBnaXZlbiwKKwlvdmVyd3JpdGUgd29ya2luZyB0cmVlIHdpdGggdGhlIGNvbnRlbnRzIGluIHRoZSBpbmRleC4KKwlXaGVuIHRoZSBgPHRyZWUtaXNoPmAgaXMgZ2l2ZW4sIG92ZXJ3cml0ZSBib3RoIHRoZSBpbmRleCBhbmQKKwl0aGUgd29ya2luZyB0cmVlIHdpdGggdGhlIGNvbnRlbnRzIGF0IHRoZSBgPHRyZWUtaXNoPmAuCisrCitUaGUgaW5kZXggbWF5IGNvbnRhaW4gdW5tZXJnZWQgZW50cmllcyBiZWNhdXNlIG9mIGEgcHJldmlvdXMgZmFpbGVkIG1lcmdlLgorQnkgZGVmYXVsdCwgaWYgeW91IHRyeSB0byBjaGVjayBvdXQgc3VjaCBhbiBlbnRyeSBmcm9tIHRoZSBpbmRleCwgdGhlCitjaGVja291dCBvcGVyYXRpb24gd2lsbCBmYWlsIGFuZCBub3RoaW5nIHdpbGwgYmUgY2hlY2tlZCBvdXQuCitVc2luZyBgLWZgIHdpbGwgaWdub3JlIHRoZXNlIHVubWVyZ2VkIGVudHJpZXMuICBUaGUgY29udGVudHMgZnJvbSBhCitzcGVjaWZpYyBzaWRlIG9mIHRoZSBtZXJnZSBjYW4gYmUgY2hlY2tlZCBvdXQgb2YgdGhlIGluZGV4IGJ5Cit1c2luZyBgLS1vdXJzYCBvciBgLS10aGVpcnNgLiAgV2l0aCBgLW1gLCBjaGFuZ2VzIG1hZGUgdG8gdGhlIHdvcmtpbmcgdHJlZQorZmlsZSBjYW4gYmUgZGlzY2FyZGVkIHRvIHJlLWNyZWF0ZSB0aGUgb3JpZ2luYWwgY29uZmxpY3RlZCBtZXJnZSByZXN1bHQuCisKKydnaXQgY2hlY2tvdXQnICgtcHwtLXBhdGNoKSBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl06OgorCVRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgbW9kZSwgYnV0IGxldHMgeW91IHVzZSB0aGUKKwlpbnRlcmFjdGl2ZSBpbnRlcmZhY2UgdG8gc2hvdyB0aGUgImRpZmYiIG91dHB1dCBhbmQgY2hvb3NlIHdoaWNoCisJaHVua3MgdG8gdXNlIGluIHRoZSByZXN1bHQuICBTZWUgYmVsb3cgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZgorCWAtLXBhdGNoYCBvcHRpb24uCisKK09QVElPTlMKKy0tLS0tLS0KKy1xOjoKKy0tcXVpZXQ6OgorCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KKworLS1wcm9ncmVzczo6CistLW5vLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgYC0tcXVpZXRgCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZW5hYmxlcyBwcm9ncmVzcyByZXBvcnRpbmcgZXZlbiBpZiBub3QKKwlhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCByZWdhcmRsZXNzIG9mIGAtLXF1aWV0YC4KKworLWY6OgorLS1mb3JjZTo6CisJV2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMsIHByb2NlZWQgZXZlbiBpZiB0aGUgaW5kZXggb3IgdGhlCisJd29ya2luZyB0cmVlIGRpZmZlcnMgZnJvbSBgSEVBRGAuICBUaGlzIGlzIHVzZWQgdG8gdGhyb3cgYXdheQorCWxvY2FsIGNoYW5nZXMuCisrCitXaGVuIGNoZWNraW5nIG91dCBwYXRocyBmcm9tIHRoZSBpbmRleCwgZG8gbm90IGZhaWwgdXBvbiB1bm1lcmdlZAorZW50cmllczsgaW5zdGVhZCwgdW5tZXJnZWQgZW50cmllcyBhcmUgaWdub3JlZC4KKworLS1vdXJzOjoKKy0tdGhlaXJzOjoKKwlXaGVuIGNoZWNraW5nIG91dCBwYXRocyBmcm9tIHRoZSBpbmRleCwgY2hlY2sgb3V0IHN0YWdlICMyCisJKCdvdXJzJykgb3IgIzMgKCd0aGVpcnMnKSBmb3IgdW5tZXJnZWQgcGF0aHMuCisrCitOb3RlIHRoYXQgZHVyaW5nIGBnaXQgcmViYXNlYCBhbmQgYGdpdCBwdWxsIC0tcmViYXNlYCwgJ291cnMnIGFuZAorJ3RoZWlycycgbWF5IGFwcGVhciBzd2FwcGVkOyBgLS1vdXJzYCBnaXZlcyB0aGUgdmVyc2lvbiBmcm9tIHRoZQorYnJhbmNoIHRoZSBjaGFuZ2VzIGFyZSByZWJhc2VkIG9udG8sIHdoaWxlIGAtLXRoZWlyc2AgZ2l2ZXMgdGhlCit2ZXJzaW9uIGZyb20gdGhlIGJyYW5jaCB0aGF0IGhvbGRzIHlvdXIgd29yayB0aGF0IGlzIGJlaW5nIHJlYmFzZWQuCisrCitUaGlzIGlzIGJlY2F1c2UgYHJlYmFzZWAgaXMgdXNlZCBpbiBhIHdvcmtmbG93IHRoYXQgdHJlYXRzIHRoZQoraGlzdG9yeSBhdCB0aGUgcmVtb3RlIGFzIHRoZSBzaGFyZWQgY2Fub25pY2FsIG9uZSwgYW5kIHRyZWF0cyB0aGUKK3dvcmsgZG9uZSBvbiB0aGUgYnJhbmNoIHlvdSBhcmUgcmViYXNpbmcgYXMgdGhlIHRoaXJkLXBhcnR5IHdvcmsgdG8KK2JlIGludGVncmF0ZWQsIGFuZCB5b3UgYXJlIHRlbXBvcmFyaWx5IGFzc3VtaW5nIHRoZSByb2xlIG9mIHRoZQora2VlcGVyIG9mIHRoZSBjYW5vbmljYWwgaGlzdG9yeSBkdXJpbmcgdGhlIHJlYmFzZS4gIEFzIHRoZSBrZWVwZXIgb2YKK3RoZSBjYW5vbmljYWwgaGlzdG9yeSwgeW91IG5lZWQgdG8gdmlldyB0aGUgaGlzdG9yeSBmcm9tIHRoZSByZW1vdGUKK2FzIGBvdXJzYCAoaS5lLiAib3VyIHNoYXJlZCBjYW5vbmljYWwgaGlzdG9yeSIpLCB3aGlsZSB3aGF0IHlvdSBkaWQKK29uIHlvdXIgc2lkZSBicmFuY2ggYXMgYHRoZWlyc2AgKGkuZS4gIm9uZSBjb250cmlidXRvcidzIHdvcmsgb24gdG9wCitvZiBpdCIpLgorCistYiA8bmV3X2JyYW5jaD46OgorCUNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgYDxuZXdfYnJhbmNoPmAgYW5kIHN0YXJ0IGl0IGF0CisJYDxzdGFydF9wb2ludD5gOyBzZWUgbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLgorCistQiA8bmV3X2JyYW5jaD46OgorCUNyZWF0ZXMgdGhlIGJyYW5jaCBgPG5ld19icmFuY2g+YCBhbmQgc3RhcnQgaXQgYXQgYDxzdGFydF9wb2ludD5gOworCWlmIGl0IGFscmVhZHkgZXhpc3RzLCB0aGVuIHJlc2V0IGl0IHRvIGA8c3RhcnRfcG9pbnQ+YC4gVGhpcyBpcworCWVxdWl2YWxlbnQgdG8gcnVubmluZyAiZ2l0IGJyYW5jaCIgd2l0aCAiLWYiOyBzZWUKKwlsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuCisKKy10OjoKKy0tdHJhY2s6OgorCVdoZW4gY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLiBTZWUKKwkiLS10cmFjayIgaW4gbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLgorKworSWYgbm8gYC1iYCBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBuYW1lIG9mIHRoZSBuZXcgYnJhbmNoIHdpbGwgYmUKK2Rlcml2ZWQgZnJvbSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCwgYnkgbG9va2luZyBhdCB0aGUgbG9jYWwgcGFydCBvZgordGhlIHJlZnNwZWMgY29uZmlndXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlLCBhbmQgdGhlbiBzdHJpcHBpbmcKK3RoZSBpbml0aWFsIHBhcnQgdXAgdG8gdGhlICIqIi4KK1RoaXMgd291bGQgdGVsbCB1cyB0byB1c2UgYGhhY2tgIGFzIHRoZSBsb2NhbCBicmFuY2ggd2hlbiBicmFuY2hpbmcKK29mZiBvZiBgb3JpZ2luL2hhY2tgIChvciBgcmVtb3Rlcy9vcmlnaW4vaGFja2AsIG9yIGV2ZW4KK2ByZWZzL3JlbW90ZXMvb3JpZ2luL2hhY2tgKS4gIElmIHRoZSBnaXZlbiBuYW1lIGhhcyBubyBzbGFzaCwgb3IgdGhlIGFib3ZlCitndWVzc2luZyByZXN1bHRzIGluIGFuIGVtcHR5IG5hbWUsIHRoZSBndWVzc2luZyBpcyBhYm9ydGVkLiAgWW91IGNhbgorZXhwbGljaXRseSBnaXZlIGEgbmFtZSB3aXRoIGAtYmAgaW4gc3VjaCBhIGNhc2UuCisKKy0tbm8tdHJhY2s6OgorCURvIG5vdCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLCBldmVuIGlmIHRoZQorCWBicmFuY2guYXV0b1NldHVwTWVyZ2VgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgdHJ1ZS4KKworLS1ndWVzczo6CistLW5vLWd1ZXNzOjoKKwlJZiBgPGJyYW5jaD5gIGlzIG5vdCBmb3VuZCBidXQgdGhlcmUgZG9lcyBleGlzdCBhIHRyYWNraW5nCisJYnJhbmNoIGluIGV4YWN0bHkgb25lIHJlbW90ZSAoY2FsbCBpdCBgPHJlbW90ZT5gKSB3aXRoIGEKKwltYXRjaGluZyBuYW1lLCB0cmVhdCBhcyBlcXVpdmFsZW50IHRvCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIDxicmFuY2g+IC0tdHJhY2sgPHJlbW90ZT4vPGJyYW5jaD4KKy0tLS0tLS0tLS0tLQorKworSWYgdGhlIGJyYW5jaCBleGlzdHMgaW4gbXVsdGlwbGUgcmVtb3RlcyBhbmQgb25lIG9mIHRoZW0gaXMgbmFtZWQgYnkKK3RoZSBgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2UnbGwgdXNlIHRoYXQKK29uZSBmb3IgdGhlIHB1cnBvc2VzIG9mIGRpc2FtYmlndWF0aW9uLCBldmVuIGlmIHRoZSBgPGJyYW5jaD5gIGlzbid0Cit1bmlxdWUgYWNyb3NzIGFsbCByZW1vdGVzLiBTZXQgaXQgdG8KK2UuZy4gYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luYCB0byBhbHdheXMgY2hlY2tvdXQgcmVtb3RlCiticmFuY2hlcyBmcm9tIHRoZXJlIGlmIGA8YnJhbmNoPmAgaXMgYW1iaWd1b3VzIGJ1dCBleGlzdHMgb24gdGhlCisnb3JpZ2luJyByZW1vdGUuIFNlZSBhbHNvIGBjaGVja291dC5kZWZhdWx0UmVtb3RlYCBpbgorbGlua2dpdDpnaXQtY29uZmlnWzFdLgorKworVXNlIGAtLW5vLWd1ZXNzYCB0byBkaXNhYmxlIHRoaXMuCisKKy1sOjoKKwlDcmVhdGUgdGhlIG5ldyBicmFuY2gncyByZWZsb2c7IHNlZSBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yCisJZGV0YWlscy4KKworLS1kZXRhY2g6OgorCVJhdGhlciB0aGFuIGNoZWNraW5nIG91dCBhIGJyYW5jaCB0byB3b3JrIG9uIGl0LCBjaGVjayBvdXQgYQorCWNvbW1pdCBmb3IgaW5zcGVjdGlvbiBhbmQgZGlzY2FyZGFibGUgZXhwZXJpbWVudHMuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBgZ2l0IGNoZWNrb3V0IDxjb21taXQ+YCB3aGVuCisJYDxjb21taXQ+YCBpcyBub3QgYSBicmFuY2ggbmFtZS4gIFNlZSB0aGUgIkRFVEFDSEVEIEhFQUQiIHNlY3Rpb24KKwliZWxvdyBmb3IgZGV0YWlscy4KKworLS1vcnBoYW4gPG5ld19icmFuY2g+OjoKKwlDcmVhdGUgYSBuZXcgJ29ycGhhbicgYnJhbmNoLCBuYW1lZCBgPG5ld19icmFuY2g+YCwgc3RhcnRlZCBmcm9tCisJYDxzdGFydF9wb2ludD5gIGFuZCBzd2l0Y2ggdG8gaXQuICBUaGUgZmlyc3QgY29tbWl0IG1hZGUgb24gdGhpcworCW5ldyBicmFuY2ggd2lsbCBoYXZlIG5vIHBhcmVudHMgYW5kIGl0IHdpbGwgYmUgdGhlIHJvb3Qgb2YgYSBuZXcKKwloaXN0b3J5IHRvdGFsbHkgZGlzY29ubmVjdGVkIGZyb20gYWxsIHRoZSBvdGhlciBicmFuY2hlcyBhbmQKKwljb21taXRzLgorKworVGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIGFyZSBhZGp1c3RlZCBhcyBpZiB5b3UgaGFkIHByZXZpb3VzbHkgcnVuCitgZ2l0IGNoZWNrb3V0IDxzdGFydF9wb2ludD5gLiAgVGhpcyBhbGxvd3MgeW91IHRvIHN0YXJ0IGEgbmV3IGhpc3RvcnkKK3RoYXQgcmVjb3JkcyBhIHNldCBvZiBwYXRocyBzaW1pbGFyIHRvIGA8c3RhcnRfcG9pbnQ+YCBieSBlYXNpbHkgcnVubmluZworYGdpdCBjb21taXQgLWFgIHRvIG1ha2UgdGhlIHJvb3QgY29tbWl0LgorKworVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcHVibGlzaCB0aGUgdHJlZSBmcm9tIGEgY29tbWl0Cit3aXRob3V0IGV4cG9zaW5nIGl0cyBmdWxsIGhpc3RvcnkuIFlvdSBtaWdodCB3YW50IHRvIGRvIHRoaXMgdG8gcHVibGlzaAorYW4gb3BlbiBzb3VyY2UgYnJhbmNoIG9mIGEgcHJvamVjdCB3aG9zZSBjdXJyZW50IHRyZWUgaXMgImNsZWFuIiwgYnV0Cit3aG9zZSBmdWxsIGhpc3RvcnkgY29udGFpbnMgcHJvcHJpZXRhcnkgb3Igb3RoZXJ3aXNlIGVuY3VtYmVyZWQgYml0cyBvZgorY29kZS4KKysKK0lmIHlvdSB3YW50IHRvIHN0YXJ0IGEgZGlzY29ubmVjdGVkIGhpc3RvcnkgdGhhdCByZWNvcmRzIGEgc2V0IG9mIHBhdGhzCit0aGF0IGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBvZiBgPHN0YXJ0X3BvaW50PmAsIHRoZW4geW91IHNob3VsZAorY2xlYXIgdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIHJpZ2h0IGFmdGVyIGNyZWF0aW5nIHRoZSBvcnBoYW4KK2JyYW5jaCBieSBydW5uaW5nIGBnaXQgcm0gLXJmIC5gIGZyb20gdGhlIHRvcCBsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLgorQWZ0ZXJ3YXJkcyB5b3Ugd2lsbCBiZSByZWFkeSB0byBwcmVwYXJlIHlvdXIgbmV3IGZpbGVzLCByZXBvcHVsYXRpbmcgdGhlCit3b3JraW5nIHRyZWUsIGJ5IGNvcHlpbmcgdGhlbSBmcm9tIGVsc2V3aGVyZSwgZXh0cmFjdGluZyBhIHRhcmJhbGwsIGV0Yy4KKworLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzOjoKKwlJbiBzcGFyc2UgY2hlY2tvdXQgbW9kZSwgYGdpdCBjaGVja291dCAtLSA8cGF0aHM+YCB3b3VsZAorCXVwZGF0ZSBvbmx5IGVudHJpZXMgbWF0Y2hlZCBieSBgPHBhdGhzPmAgYW5kIHNwYXJzZSBwYXR0ZXJucworCWluIGAkR0lUX0RJUi9pbmZvL3NwYXJzZS1jaGVja291dGAuIFRoaXMgb3B0aW9uIGlnbm9yZXMKKwl0aGUgc3BhcnNlIHBhdHRlcm5zIGFuZCBhZGRzIGJhY2sgYW55IGZpbGVzIGluIGA8cGF0aHM+YC4KKworLW06OgorLS1tZXJnZTo6CisJV2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMsCisJaWYgeW91IGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9ucyB0byBvbmUgb3IgbW9yZSBmaWxlcyB0aGF0CisJYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIGJyYW5jaCB0bworCXdoaWNoIHlvdSBhcmUgc3dpdGNoaW5nLCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHN3aXRjaAorCWJyYW5jaGVzIGluIG9yZGVyIHRvIHByZXNlcnZlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiBjb250ZXh0LgorCUhvd2V2ZXIsIHdpdGggdGhpcyBvcHRpb24sIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gdGhlIGN1cnJlbnQKKwlicmFuY2gsIHlvdXIgd29ya2luZyB0cmVlIGNvbnRlbnRzLCBhbmQgdGhlIG5ldyBicmFuY2gKKwlpcyBkb25lLCBhbmQgeW91IHdpbGwgYmUgb24gdGhlIG5ldyBicmFuY2guCisrCitXaGVuIGEgbWVyZ2UgY29uZmxpY3QgaGFwcGVucywgdGhlIGluZGV4IGVudHJpZXMgZm9yIGNvbmZsaWN0aW5nCitwYXRocyBhcmUgbGVmdCB1bm1lcmdlZCwgYW5kIHlvdSBuZWVkIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cworYW5kIG1hcmsgdGhlIHJlc29sdmVkIHBhdGhzIHdpdGggYGdpdCBhZGRgIChvciBgZ2l0IHJtYCBpZiB0aGUgbWVyZ2UKK3Nob3VsZCByZXN1bHQgaW4gZGVsZXRpb24gb2YgdGhlIHBhdGgpLgorKworV2hlbiBjaGVja2luZyBvdXQgcGF0aHMgZnJvbSB0aGUgaW5kZXgsIHRoaXMgb3B0aW9uIGxldHMgeW91IHJlY3JlYXRlCit0aGUgY29uZmxpY3RlZCBtZXJnZSBpbiB0aGUgc3BlY2lmaWVkIHBhdGhzLgorKworV2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMgd2l0aCBgLS1tZXJnZWAsIHN0YWdlZCBjaGFuZ2VzIG1heSBiZSBsb3N0LgorCistLWNvbmZsaWN0PTxzdHlsZT46OgorCVRoZSBzYW1lIGFzIGAtLW1lcmdlYCBvcHRpb24gYWJvdmUsIGJ1dCBjaGFuZ2VzIHRoZSB3YXkgdGhlCisJY29uZmxpY3RpbmcgaHVua3MgYXJlIHByZXNlbnRlZCwgb3ZlcnJpZGluZyB0aGUKKwlgbWVyZ2UuY29uZmxpY3RTdHlsZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFBvc3NpYmxlIHZhbHVlcyBhcmUKKwkibWVyZ2UiIChkZWZhdWx0KSBhbmQgImRpZmYzIiAoaW4gYWRkaXRpb24gdG8gd2hhdCBpcyBzaG93biBieQorCSJtZXJnZSIgc3R5bGUsIHNob3dzIHRoZSBvcmlnaW5hbCBjb250ZW50cykuCisKKy1wOjoKKy0tcGF0Y2g6OgorCUludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCisJYDx0cmVlLWlzaD5gIChvciB0aGUgaW5kZXgsIGlmIHVuc3BlY2lmaWVkKSBhbmQgdGhlIHdvcmtpbmcKKwl0cmVlLiAgVGhlIGNob3NlbiBodW5rcyBhcmUgdGhlbiBhcHBsaWVkIGluIHJldmVyc2UgdG8gdGhlCisJd29ya2luZyB0cmVlIChhbmQgaWYgYSBgPHRyZWUtaXNoPmAgd2FzIHNwZWNpZmllZCwgdGhlIGluZGV4KS4KKysKK1RoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSBgZ2l0IGNoZWNrb3V0IC1wYCB0byBzZWxlY3RpdmVseSBkaXNjYXJkCitlZGl0cyBmcm9tIHlvdXIgY3VycmVudCB3b3JraW5nIHRyZWUuIFNlZSB0aGUgYGBJbnRlcmFjdGl2ZSBNb2RlJycKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdIHRvIGxlYXJuIGhvdyB0byBvcGVyYXRlIHRoZSBgLS1wYXRjaGAgbW9kZS4KKysKK05vdGUgdGhhdCB0aGlzIG9wdGlvbiB1c2VzIHRoZSBubyBvdmVybGF5IG1vZGUgYnkgZGVmYXVsdCAoc2VlIGFsc28KK2AtLW92ZXJsYXlgKSwgYW5kIGN1cnJlbnRseSBkb2Vzbid0IHN1cHBvcnQgb3ZlcmxheSBtb2RlLgorCistLWlnbm9yZS1vdGhlci13b3JrdHJlZXM6OgorCWBnaXQgY2hlY2tvdXRgIHJlZnVzZXMgd2hlbiB0aGUgd2FudGVkIHJlZiBpcyBhbHJlYWR5IGNoZWNrZWQKKwlvdXQgYnkgYW5vdGhlciB3b3JrdHJlZS4gVGhpcyBvcHRpb24gbWFrZXMgaXQgY2hlY2sgdGhlIHJlZgorCW91dCBhbnl3YXkuIEluIG90aGVyIHdvcmRzLCB0aGUgcmVmIGNhbiBiZSBoZWxkIGJ5IG1vcmUgdGhhbiBvbmUKKwl3b3JrdHJlZS4KKworLS1vdmVyd3JpdGUtaWdub3JlOjoKKy0tbm8tb3ZlcndyaXRlLWlnbm9yZTo6CisJU2lsZW50bHkgb3ZlcndyaXRlIGlnbm9yZWQgZmlsZXMgd2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMuIFRoaXMKKwlpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVXNlIGAtLW5vLW92ZXJ3cml0ZS1pZ25vcmVgIHRvIGFib3J0CisJdGhlIG9wZXJhdGlvbiB3aGVuIHRoZSBuZXcgYnJhbmNoIGNvbnRhaW5zIGlnbm9yZWQgZmlsZXMuCisKKy0tcmVjdXJzZS1zdWJtb2R1bGVzOjoKKy0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzOjoKKwlVc2luZyBgLS1yZWN1cnNlLXN1Ym1vZHVsZXNgIHdpbGwgdXBkYXRlIHRoZSBjb250ZW50IG9mIGFsbCBpbml0aWFsaXplZAorCXN1Ym1vZHVsZXMgYWNjb3JkaW5nIHRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdC4gSWYKKwlsb2NhbCBtb2RpZmljYXRpb25zIGluIGEgc3VibW9kdWxlIHdvdWxkIGJlIG92ZXJ3cml0dGVuIHRoZSBjaGVja291dAorCXdpbGwgZmFpbCB1bmxlc3MgYC1mYCBpcyB1c2VkLiBJZiBub3RoaW5nIChvciBgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXNgKQorCWlzIHVzZWQsIHRoZSB3b3JrIHRyZWVzIG9mIHN1Ym1vZHVsZXMgd2lsbCBub3QgYmUgdXBkYXRlZC4KKwlKdXN0IGxpa2UgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLCB0aGlzIHdpbGwgZGV0YWNoIGBIRUFEYCBvZiB0aGUKKwlzdWJtb2R1bGUuCisKKy0tb3ZlcmxheTo6CistLW5vLW92ZXJsYXk6OgorCUluIHRoZSBkZWZhdWx0IG92ZXJsYXkgbW9kZSwgYGdpdCBjaGVja291dGAgbmV2ZXIKKwlyZW1vdmVzIGZpbGVzIGZyb20gdGhlIGluZGV4IG9yIHRoZSB3b3JraW5nIHRyZWUuICBXaGVuCisJc3BlY2lmeWluZyBgLS1uby1vdmVybGF5YCwgZmlsZXMgdGhhdCBhcHBlYXIgaW4gdGhlIGluZGV4IGFuZAorCXdvcmtpbmcgdHJlZSwgYnV0IG5vdCBpbiBgPHRyZWUtaXNoPmAgYXJlIHJlbW92ZWQsIHRvIG1ha2UgdGhlbQorCW1hdGNoIGA8dHJlZS1pc2g+YCBleGFjdGx5LgorCistLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT46OgorCVBhdGhzcGVjIGlzIHBhc3NlZCBpbiBgPGZpbGU+YCBpbnN0ZWFkIG9mIGNvbW1hbmRsaW5lIGFyZ3MuIElmCisJYDxmaWxlPmAgaXMgZXhhY3RseSBgLWAgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLiBQYXRoc3BlYworCWVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgTEYgb3IgQ1IvTEYuIFBhdGhzcGVjIGVsZW1lbnRzIGNhbiBiZQorCXF1b3RlZCBhcyBleHBsYWluZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBjb3JlLnF1b3RlUGF0aGAKKwkoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIFNlZSBhbHNvIGAtLXBhdGhzcGVjLWZpbGUtbnVsYCBhbmQKKwlnbG9iYWwgYC0tbGl0ZXJhbC1wYXRoc3BlY3NgLgorCistLXBhdGhzcGVjLWZpbGUtbnVsOjoKKwlPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1wYXRoc3BlYy1mcm9tLWZpbGVgLiBQYXRoc3BlYyBlbGVtZW50cyBhcmUKKwlzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIGFuZCBhbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgdGFrZW4KKwlsaXRlcmFsbHkgKGluY2x1ZGluZyBuZXdsaW5lcyBhbmQgcXVvdGVzKS4KKworPGJyYW5jaD46OgorCUJyYW5jaCB0byBjaGVja291dDsgaWYgaXQgcmVmZXJzIHRvIGEgYnJhbmNoIChpLmUuLCBhIG5hbWUgdGhhdCwKKwl3aGVuIHByZXBlbmRlZCB3aXRoICJyZWZzL2hlYWRzLyIsIGlzIGEgdmFsaWQgcmVmKSwgdGhlbiB0aGF0CisJYnJhbmNoIGlzIGNoZWNrZWQgb3V0LiBPdGhlcndpc2UsIGlmIGl0IHJlZmVycyB0byBhIHZhbGlkCisJY29tbWl0LCB5b3VyIGBIRUFEYCBiZWNvbWVzICJkZXRhY2hlZCIgYW5kIHlvdSBhcmUgbm8gbG9uZ2VyIG9uCisJYW55IGJyYW5jaCAoc2VlIGJlbG93IGZvciBkZXRhaWxzKS4KKysKK1lvdSBjYW4gdXNlIHRoZSBgQHstTn1gIHN5bnRheCB0byByZWZlciB0byB0aGUgTi10aCBsYXN0CiticmFuY2gvY29tbWl0IGNoZWNrZWQgb3V0IHVzaW5nICJnaXQgY2hlY2tvdXQiIG9wZXJhdGlvbi4gWW91IG1heQorYWxzbyBzcGVjaWZ5IGAtYCB3aGljaCBpcyBzeW5vbnltb3VzIHRvIGBAey0xfWAuCisrCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgYEEuLi5CYCBhcyBhIHNob3J0Y3V0IGZvciB0aGUKK21lcmdlIGJhc2Ugb2YgYEFgIGFuZCBgQmAgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbgorbGVhdmUgb3V0IGF0IG1vc3Qgb25lIG9mIGBBYCBhbmQgYEJgLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvIGBIRUFEYC4KKworPG5ld19icmFuY2g+OjoKKwlOYW1lIGZvciB0aGUgbmV3IGJyYW5jaC4KKworPHN0YXJ0X3BvaW50Pjo6CisJVGhlIG5hbWUgb2YgYSBjb21taXQgYXQgd2hpY2ggdG8gc3RhcnQgdGhlIG5ldyBicmFuY2g7IHNlZQorCWxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4gRGVmYXVsdHMgdG8gYEhFQURgLgorKworQXMgYSBzcGVjaWFsIGNhc2UsIHlvdSBtYXkgdXNlIGAiQS4uLkIiYCBhcyBhIHNob3J0Y3V0IGZvciB0aGUKK21lcmdlIGJhc2Ugb2YgYEFgIGFuZCBgQmAgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbgorbGVhdmUgb3V0IGF0IG1vc3Qgb25lIG9mIGBBYCBhbmQgYEJgLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvIGBIRUFEYC4KKworPHRyZWUtaXNoPjo6CisJVHJlZSB0byBjaGVja291dCBmcm9tICh3aGVuIHBhdGhzIGFyZSBnaXZlbikuIElmIG5vdCBzcGVjaWZpZWQsCisJdGhlIGluZGV4IHdpbGwgYmUgdXNlZC4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCis8cGF0aHNwZWM+Li4uOjoKKwlMaW1pdHMgdGhlIHBhdGhzIGFmZmVjdGVkIGJ5IHRoZSBvcGVyYXRpb24uCisrCitGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlICdwYXRoc3BlYycgZW50cnkgaW4gbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworREVUQUNIRUQgSEVBRAorLS0tLS0tLS0tLS0tLQorYEhFQURgIG5vcm1hbGx5IHJlZmVycyB0byBhIG5hbWVkIGJyYW5jaCAoZS5nLiBgbWFzdGVyYCkuIE1lYW53aGlsZSwgZWFjaAorYnJhbmNoIHJlZmVycyB0byBhIHNwZWNpZmljIGNvbW1pdC4gTGV0J3MgbG9vayBhdCBhIHJlcG8gd2l0aCB0aHJlZQorY29tbWl0cywgb25lIG9mIHRoZW0gdGFnZ2VkLCBhbmQgd2l0aCBicmFuY2ggYG1hc3RlcmAgY2hlY2tlZCBvdXQ6CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICBIRUFEIChyZWZlcnMgdG8gYnJhbmNoICdtYXN0ZXInKQorICAgICAgICAgICAgfAorICAgICAgICAgICAgdgorYS0tLWItLS1jICBicmFuY2ggJ21hc3RlcicgKHJlZmVycyB0byBjb21taXQgJ2MnKQorICAgIF4KKyAgICB8CisgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQorLS0tLS0tLS0tLS0tCisKK1doZW4gYSBjb21taXQgaXMgY3JlYXRlZCBpbiB0aGlzIHN0YXRlLCB0aGUgYnJhbmNoIGlzIHVwZGF0ZWQgdG8gcmVmZXIgdG8KK3RoZSBuZXcgY29tbWl0LiBTcGVjaWZpY2FsbHksICdnaXQgY29tbWl0JyBjcmVhdGVzIGEgbmV3IGNvbW1pdCBgZGAsIHdob3NlCitwYXJlbnQgaXMgY29tbWl0IGBjYCwgYW5kIHRoZW4gdXBkYXRlcyBicmFuY2ggYG1hc3RlcmAgdG8gcmVmZXIgdG8gbmV3Citjb21taXQgYGRgLiBgSEVBRGAgc3RpbGwgcmVmZXJzIHRvIGJyYW5jaCBgbWFzdGVyYCBhbmQgc28gaW5kaXJlY3RseSBub3cgcmVmZXJzCit0byBjb21taXQgYGRgOgorCistLS0tLS0tLS0tLS0KKyQgZWRpdDsgZ2l0IGFkZDsgZ2l0IGNvbW1pdAorCisgICAgICAgICAgICAgICBIRUFEIChyZWZlcnMgdG8gYnJhbmNoICdtYXN0ZXInKQorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB2CithLS0tYi0tLWMtLS1kICBicmFuY2ggJ21hc3RlcicgKHJlZmVycyB0byBjb21taXQgJ2QnKQorICAgIF4KKyAgICB8CisgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQorLS0tLS0tLS0tLS0tCisKK0l0IGlzIHNvbWV0aW1lcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBjaGVja291dCBhIGNvbW1pdCB0aGF0IGlzIG5vdCBhdAordGhlIHRpcCBvZiBhbnkgbmFtZWQgYnJhbmNoLCBvciBldmVuIHRvIGNyZWF0ZSBhIG5ldyBjb21taXQgdGhhdCBpcyBub3QKK3JlZmVyZW5jZWQgYnkgYSBuYW1lZCBicmFuY2guIExldCdzIGxvb2sgYXQgd2hhdCBoYXBwZW5zIHdoZW4gd2UKK2NoZWNrb3V0IGNvbW1pdCBgYmAgKGhlcmUgd2Ugc2hvdyB0d28gd2F5cyB0aGlzIG1heSBiZSBkb25lKToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCB2Mi4wICAjIG9yCiskIGdpdCBjaGVja291dCBtYXN0ZXJeXgorCisgICBIRUFEIChyZWZlcnMgdG8gY29tbWl0ICdiJykKKyAgICB8CisgICAgdgorYS0tLWItLS1jLS0tZCAgYnJhbmNoICdtYXN0ZXInIChyZWZlcnMgdG8gY29tbWl0ICdkJykKKyAgICBeCisgICAgfAorICB0YWcgJ3YyLjAnIChyZWZlcnMgdG8gY29tbWl0ICdiJykKKy0tLS0tLS0tLS0tLQorCitOb3RpY2UgdGhhdCByZWdhcmRsZXNzIG9mIHdoaWNoIGNoZWNrb3V0IGNvbW1hbmQgd2UgdXNlLCBgSEVBRGAgbm93IHJlZmVycworZGlyZWN0bHkgdG8gY29tbWl0IGBiYC4gVGhpcyBpcyBrbm93biBhcyBiZWluZyBpbiBkZXRhY2hlZCBgSEVBRGAgc3RhdGUuCitJdCBtZWFucyBzaW1wbHkgdGhhdCBgSEVBRGAgcmVmZXJzIHRvIGEgc3BlY2lmaWMgY29tbWl0LCBhcyBvcHBvc2VkIHRvCityZWZlcnJpbmcgdG8gYSBuYW1lZCBicmFuY2guIExldCdzIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiB3ZSBjcmVhdGUgYSBjb21taXQ6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0OyBnaXQgYWRkOyBnaXQgY29tbWl0CisKKyAgICAgSEVBRCAocmVmZXJzIHRvIGNvbW1pdCAnZScpCisgICAgICB8CisgICAgICB2CisgICAgICBlCisgICAgIC8KK2EtLS1iLS0tYy0tLWQgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnZCcpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgbm93IGEgbmV3IGNvbW1pdCBgZWAsIGJ1dCBpdCBpcyByZWZlcmVuY2VkIG9ubHkgYnkgYEhFQURgLiBXZSBjYW4KK29mIGNvdXJzZSBhZGQgeWV0IGFub3RoZXIgY29tbWl0IGluIHRoaXMgc3RhdGU6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0OyBnaXQgYWRkOyBnaXQgY29tbWl0CisKKwkgSEVBRCAocmVmZXJzIHRvIGNvbW1pdCAnZicpCisJICB8CisJICB2CisgICAgICBlLS0tZgorICAgICAvCithLS0tYi0tLWMtLS1kICBicmFuY2ggJ21hc3RlcicgKHJlZmVycyB0byBjb21taXQgJ2QnKQorICAgIF4KKyAgICB8CisgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQorLS0tLS0tLS0tLS0tCisKK0luIGZhY3QsIHdlIGNhbiBwZXJmb3JtIGFsbCB0aGUgbm9ybWFsIEdpdCBvcGVyYXRpb25zLiBCdXQsIGxldCdzIGxvb2sKK2F0IHdoYXQgaGFwcGVucyB3aGVuIHdlIHRoZW4gY2hlY2tvdXQgYG1hc3RlcmA6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCisKKyAgICAgICAgICAgICAgIEhFQUQgKHJlZmVycyB0byBicmFuY2ggJ21hc3RlcicpCisgICAgICBlLS0tZiAgICAgfAorICAgICAvICAgICAgICAgIHYKK2EtLS1iLS0tYy0tLWQgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnZCcpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBhdCB0aGlzIHBvaW50IG5vdGhpbmcgcmVmZXJzIHRvIGNvbW1pdAorYGZgLiBFdmVudHVhbGx5IGNvbW1pdCBgZmAgKGFuZCBieSBleHRlbnNpb24gY29tbWl0IGBlYCkgd2lsbCBiZSBkZWxldGVkCitieSB0aGUgcm91dGluZSBHaXQgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MsIHVubGVzcyB3ZSBjcmVhdGUgYSByZWZlcmVuY2UKK2JlZm9yZSB0aGF0IGhhcHBlbnMuIElmIHdlIGhhdmUgbm90IHlldCBtb3ZlZCBhd2F5IGZyb20gY29tbWl0IGBmYCwKK2FueSBvZiB0aGVzZSB3aWxsIGNyZWF0ZSBhIHJlZmVyZW5jZSB0byBpdDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBmb28gICA8MT4KKyQgZ2l0IGJyYW5jaCBmb28gICAgICAgIDwyPgorJCBnaXQgdGFnIGZvbyAgICAgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKworPDE+IGNyZWF0ZXMgYSBuZXcgYnJhbmNoIGBmb29gLCB3aGljaCByZWZlcnMgdG8gY29tbWl0IGBmYCwgYW5kIHRoZW4KKyAgICB1cGRhdGVzIGBIRUFEYCB0byByZWZlciB0byBicmFuY2ggYGZvb2AuIEluIG90aGVyIHdvcmRzLCB3ZSdsbCBubyBsb25nZXIKKyAgICBiZSBpbiBkZXRhY2hlZCBgSEVBRGAgc3RhdGUgYWZ0ZXIgdGhpcyBjb21tYW5kLgorCis8Mj4gc2ltaWxhcmx5IGNyZWF0ZXMgYSBuZXcgYnJhbmNoIGBmb29gLCB3aGljaCByZWZlcnMgdG8gY29tbWl0IGBmYCwKKyAgICBidXQgbGVhdmVzIGBIRUFEYCBkZXRhY2hlZC4KKworPDM+IGNyZWF0ZXMgYSBuZXcgdGFnIGBmb29gLCB3aGljaCByZWZlcnMgdG8gY29tbWl0IGBmYCwKKyAgICBsZWF2aW5nIGBIRUFEYCBkZXRhY2hlZC4KKworSWYgd2UgaGF2ZSBtb3ZlZCBhd2F5IGZyb20gY29tbWl0IGBmYCwgdGhlbiB3ZSBtdXN0IGZpcnN0IHJlY292ZXIgaXRzIG9iamVjdAorbmFtZSAodHlwaWNhbGx5IGJ5IHVzaW5nIGdpdCByZWZsb2cpLCBhbmQgdGhlbiB3ZSBjYW4gY3JlYXRlIGEgcmVmZXJlbmNlIHRvCitpdC4gRm9yIGV4YW1wbGUsIHRvIHNlZSB0aGUgbGFzdCB0d28gY29tbWl0cyB0byB3aGljaCBgSEVBRGAgcmVmZXJyZWQsIHdlCitjYW4gdXNlIGVpdGhlciBvZiB0aGVzZSBjb21tYW5kczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZWZsb2cgLTIgSEVBRCAjIG9yCiskIGdpdCBsb2cgLWcgLTIgSEVBRAorLS0tLS0tLS0tLS0tCisKK0FSR1VNRU5UIERJU0FNQklHVUFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IGdpdmVuIGFuZCBpdCBpcyBub3QgYC0tYCAoZS5nLiBgZ2l0CitjaGVja291dCBhYmNgKSwgYW5kIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGJvdGggYSB2YWxpZCBgPHRyZWUtaXNoPmAKKyhlLmcuIGEgYnJhbmNoIGBhYmNgIGV4aXN0cykgYW5kIGEgdmFsaWQgYDxwYXRoc3BlYz5gIChlLmcuIGEgZmlsZQorb3IgYSBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBpcyAiYWJjIiBleGlzdHMpLCBHaXQgd291bGQgdXN1YWxseSBhc2sKK3lvdSB0byBkaXNhbWJpZ3VhdGUuICBCZWNhdXNlIGNoZWNraW5nIG91dCBhIGJyYW5jaCBpcyBzbyBjb21tb24gYW4KK29wZXJhdGlvbiwgaG93ZXZlciwgYGdpdCBjaGVja291dCBhYmNgIHRha2VzICJhYmMiIGFzIGEgYDx0cmVlLWlzaD5gCitpbiBzdWNoIGEgc2l0dWF0aW9uLiAgVXNlIGBnaXQgY2hlY2tvdXQgLS0gPHBhdGhzcGVjPmAgaWYgeW91IHdhbnQKK3RvIGNoZWNrb3V0IHRoZXNlIHBhdGhzIG91dCBvZiB0aGUgaW5kZXguCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisuIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgY2hlY2tzIG91dCB0aGUgYG1hc3RlcmAgYnJhbmNoLCByZXZlcnRzCisgIHRoZSBgTWFrZWZpbGVgIHRvIHR3byByZXZpc2lvbnMgYmFjaywgZGVsZXRlcyBgaGVsbG8uY2AgYnkKKyAgbWlzdGFrZSwgYW5kIGdldHMgaXQgYmFjayBmcm9tIHRoZSBpbmRleC4KKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyICAgICAgICAgICAgIDwxPgorJCBnaXQgY2hlY2tvdXQgbWFzdGVyfjIgTWFrZWZpbGUgIDwyPgorJCBybSAtZiBoZWxsby5jCiskIGdpdCBjaGVja291dCBoZWxsby5jICAgICAgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBzd2l0Y2ggYnJhbmNoCis8Mj4gdGFrZSBhIGZpbGUgb3V0IG9mIGFub3RoZXIgY29tbWl0Cis8Mz4gcmVzdG9yZSBgaGVsbG8uY2AgZnJvbSB0aGUgaW5kZXgKKysKK0lmIHlvdSB3YW50IHRvIGNoZWNrIG91dCBfYWxsXyBDIHNvdXJjZSBmaWxlcyBvdXQgb2YgdGhlIGluZGV4LAoreW91IGNhbiBzYXkKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLS0gJyouYycKKy0tLS0tLS0tLS0tLQorKworTm90ZSB0aGUgcXVvdGVzIGFyb3VuZCBgKi5jYC4gIFRoZSBmaWxlIGBoZWxsby5jYCB3aWxsIGFsc28gYmUKK2NoZWNrZWQgb3V0LCBldmVuIHRob3VnaCBpdCBpcyBubyBsb25nZXIgaW4gdGhlIHdvcmtpbmcgdHJlZSwKK2JlY2F1c2UgdGhlIGZpbGUgZ2xvYmJpbmcgaXMgdXNlZCB0byBtYXRjaCBlbnRyaWVzIGluIHRoZSBpbmRleAorKG5vdCBpbiB0aGUgd29ya2luZyB0cmVlIGJ5IHRoZSBzaGVsbCkuCisrCitJZiB5b3UgaGF2ZSBhbiB1bmZvcnR1bmF0ZSBicmFuY2ggdGhhdCBpcyBuYW1lZCBgaGVsbG8uY2AsIHRoaXMKK3N0ZXAgd291bGQgYmUgY29uZnVzZWQgYXMgYW4gaW5zdHJ1Y3Rpb24gdG8gc3dpdGNoIHRvIHRoYXQgYnJhbmNoLgorWW91IHNob3VsZCBpbnN0ZWFkIHdyaXRlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtLSBoZWxsby5jCistLS0tLS0tLS0tLS0KKworLiBBZnRlciB3b3JraW5nIGluIHRoZSB3cm9uZyBicmFuY2gsIHN3aXRjaGluZyB0byB0aGUgY29ycmVjdAorICBicmFuY2ggd291bGQgYmUgZG9uZSB1c2luZzoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbXl0b3BpYworLS0tLS0tLS0tLS0tCisrCitIb3dldmVyLCB5b3VyICJ3cm9uZyIgYnJhbmNoIGFuZCBjb3JyZWN0IGBteXRvcGljYCBicmFuY2ggbWF5CitkaWZmZXIgaW4gZmlsZXMgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCBsb2NhbGx5LCBpbiB3aGljaCBjYXNlCit0aGUgYWJvdmUgY2hlY2tvdXQgd291bGQgZmFpbCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG15dG9waWMKK2Vycm9yOiBZb3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIHRvICdmcm90eic7IG5vdCBzd2l0Y2hpbmcgYnJhbmNoZXMuCistLS0tLS0tLS0tLS0KKysKK1lvdSBjYW4gZ2l2ZSB0aGUgYC1tYCBmbGFnIHRvIHRoZSBjb21tYW5kLCB3aGljaCB3b3VsZCB0cnkgYQordGhyZWUtd2F5IG1lcmdlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtbSBteXRvcGljCitBdXRvLW1lcmdpbmcgZnJvdHoKKy0tLS0tLS0tLS0tLQorKworQWZ0ZXIgdGhpcyB0aHJlZS13YXkgbWVyZ2UsIHRoZSBsb2NhbCBtb2RpZmljYXRpb25zIGFyZSBfbm90XworcmVnaXN0ZXJlZCBpbiB5b3VyIGluZGV4IGZpbGUsIHNvIGBnaXQgZGlmZmAgd291bGQgc2hvdyB5b3Ugd2hhdAorY2hhbmdlcyB5b3UgbWFkZSBzaW5jZSB0aGUgdGlwIG9mIHRoZSBuZXcgYnJhbmNoLgorCisuIFdoZW4gYSBtZXJnZSBjb25mbGljdCBoYXBwZW5zIGR1cmluZyBzd2l0Y2hpbmcgYnJhbmNoZXMgd2l0aAorICB0aGUgYC1tYCBvcHRpb24sIHlvdSB3b3VsZCBzZWUgc29tZXRoaW5nIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLW0gbXl0b3BpYworQXV0by1tZXJnaW5nIGZyb3R6CitFUlJPUjogTWVyZ2UgY29uZmxpY3QgaW4gZnJvdHoKK2ZhdGFsOiBtZXJnZSBwcm9ncmFtIGZhaWxlZAorLS0tLS0tLS0tLS0tCisrCitBdCB0aGlzIHBvaW50LCBgZ2l0IGRpZmZgIHNob3dzIHRoZSBjaGFuZ2VzIGNsZWFubHkgbWVyZ2VkIGFzIGluCit0aGUgcHJldmlvdXMgZXhhbXBsZSwgYXMgd2VsbCBhcyB0aGUgY2hhbmdlcyBpbiB0aGUgY29uZmxpY3RlZAorZmlsZXMuICBFZGl0IGFuZCByZXNvbHZlIHRoZSBjb25mbGljdCBhbmQgbWFyayBpdCByZXNvbHZlZCB3aXRoCitgZ2l0IGFkZGAgYXMgdXN1YWw6CisrCistLS0tLS0tLS0tLS0KKyQgZWRpdCBmcm90egorJCBnaXQgYWRkIGZyb3R6CistLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1zd2l0Y2hbMV0sCitsaW5rZ2l0OmdpdC1yZXN0b3JlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzY2U1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKQEAgLTAsMCArMSwyNDMgQEAKK2dpdC1jaGVycnktcGljaygxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVycnktcGljayAtIEFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVycnktcGljaycgWy0tZWRpdF0gWy1uXSBbLW0gcGFyZW50LW51bWJlcl0gWy1zXSBbLXhdIFstLWZmXQorCQkgIFstU1s8a2V5aWQ+XV0gPGNvbW1pdD4uLi4KKydnaXQgY2hlcnJ5LXBpY2snICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCB8IC0tcXVpdCkKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0dpdmVuIG9uZSBvciBtb3JlIGV4aXN0aW5nIGNvbW1pdHMsIGFwcGx5IHRoZSBjaGFuZ2UgZWFjaCBvbmUKK2ludHJvZHVjZXMsIHJlY29yZGluZyBhIG5ldyBjb21taXQgZm9yIGVhY2guICBUaGlzIHJlcXVpcmVzIHlvdXIKK3dvcmtpbmcgdHJlZSB0byBiZSBjbGVhbiAobm8gbW9kaWZpY2F0aW9ucyBmcm9tIHRoZSBIRUFEIGNvbW1pdCkuCisKK1doZW4gaXQgaXMgbm90IG9idmlvdXMgaG93IHRvIGFwcGx5IGEgY2hhbmdlLCB0aGUgZm9sbG93aW5nCitoYXBwZW5zOgorCisxLiBUaGUgY3VycmVudCBicmFuY2ggYW5kIGBIRUFEYCBwb2ludGVyIHN0YXkgYXQgdGhlIGxhc3QgY29tbWl0CisgICBzdWNjZXNzZnVsbHkgbWFkZS4KKzIuIFRoZSBgQ0hFUlJZX1BJQ0tfSEVBRGAgcmVmIGlzIHNldCB0byBwb2ludCBhdCB0aGUgY29tbWl0IHRoYXQKKyAgIGludHJvZHVjZWQgdGhlIGNoYW5nZSB0aGF0IGlzIGRpZmZpY3VsdCB0byBhcHBseS4KKzMuIFBhdGhzIGluIHdoaWNoIHRoZSBjaGFuZ2UgYXBwbGllZCBjbGVhbmx5IGFyZSB1cGRhdGVkIGJvdGgKKyAgIGluIHRoZSBpbmRleCBmaWxlIGFuZCBpbiB5b3VyIHdvcmtpbmcgdHJlZS4KKzQuIEZvciBjb25mbGljdGluZyBwYXRocywgdGhlIGluZGV4IGZpbGUgcmVjb3JkcyB1cCB0byB0aHJlZQorICAgdmVyc2lvbnMsIGFzIGRlc2NyaWJlZCBpbiB0aGUgIlRSVUUgTUVSR0UiIHNlY3Rpb24gb2YKKyAgIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdLiAgVGhlIHdvcmtpbmcgdHJlZSBmaWxlcyB3aWxsIGluY2x1ZGUKKyAgIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbmZsaWN0IGJyYWNrZXRlZCBieSB0aGUgdXN1YWwKKyAgIGNvbmZsaWN0IG1hcmtlcnMgYDw8PDw8PDxgIGFuZCBgPj4+Pj4+PmAuCis1LiBObyBvdGhlciBtb2RpZmljYXRpb25zIGFyZSBtYWRlLgorCitTZWUgbGlua2dpdDpnaXQtbWVyZ2VbMV0gZm9yIHNvbWUgaGludHMgb24gcmVzb2x2aW5nIHN1Y2gKK2NvbmZsaWN0cy4KKworT1BUSU9OUworLS0tLS0tLQorPGNvbW1pdD4uLi46OgorCUNvbW1pdHMgdG8gY2hlcnJ5LXBpY2suCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgY29tbWl0cywgc2VlCisJbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisJU2V0cyBvZiBjb21taXRzIGNhbiBiZSBwYXNzZWQgYnV0IG5vIHRyYXZlcnNhbCBpcyBkb25lIGJ5CisJZGVmYXVsdCwgYXMgaWYgdGhlIGAtLW5vLXdhbGtgIG9wdGlvbiB3YXMgc3BlY2lmaWVkLCBzZWUKKwlsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXS4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgYSByYW5nZSB3aWxsCisJZmVlZCBhbGwgPGNvbW1pdD4uLi4gYXJndW1lbnRzIHRvIGEgc2luZ2xlIHJldmlzaW9uIHdhbGsKKwkoc2VlIGEgbGF0ZXIgZXhhbXBsZSB0aGF0IHVzZXMgJ21haW50IG1hc3Rlci4ubmV4dCcpLgorCistZTo6CistLWVkaXQ6OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgY2hlcnJ5LXBpY2snIHdpbGwgbGV0IHlvdSBlZGl0IHRoZSBjb21taXQKKwltZXNzYWdlIHByaW9yIHRvIGNvbW1pdHRpbmcuCisKKy0tY2xlYW51cD08bW9kZT46OgorCVRoaXMgb3B0aW9uIGRldGVybWluZXMgaG93IHRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIGNsZWFuZWQgdXAgYmVmb3JlCisJYmVpbmcgcGFzc2VkIG9uIHRvIHRoZSBjb21taXQgbWFjaGluZXJ5LiBTZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBtb3JlCisJZGV0YWlscy4gSW4gcGFydGljdWxhciwgaWYgdGhlICc8bW9kZT4nIGlzIGdpdmVuIGEgdmFsdWUgb2YgYHNjaXNzb3JzYCwKKwlzY2lzc29ycyB3aWxsIGJlIGFwcGVuZGVkIHRvIGBNRVJHRV9NU0dgIGJlZm9yZSBiZWluZyBwYXNzZWQgb24gaW4gdGhlIGNhc2UKKwlvZiBhIGNvbmZsaWN0LgorCisteDo6CisJV2hlbiByZWNvcmRpbmcgdGhlIGNvbW1pdCwgYXBwZW5kIGEgbGluZSB0aGF0IHNheXMKKwkiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgLi4uKSIgdG8gdGhlIG9yaWdpbmFsIGNvbW1pdAorCW1lc3NhZ2UgaW4gb3JkZXIgdG8gaW5kaWNhdGUgd2hpY2ggY29tbWl0IHRoaXMgY2hhbmdlIHdhcworCWNoZXJyeS1waWNrZWQgZnJvbS4gIFRoaXMgaXMgZG9uZSBvbmx5IGZvciBjaGVycnkKKwlwaWNrcyB3aXRob3V0IGNvbmZsaWN0cy4gIERvIG5vdCB1c2UgdGhpcyBvcHRpb24gaWYKKwl5b3UgYXJlIGNoZXJyeS1waWNraW5nIGZyb20geW91ciBwcml2YXRlIGJyYW5jaCBiZWNhdXNlCisJdGhlIGluZm9ybWF0aW9uIGlzIHVzZWxlc3MgdG8gdGhlIHJlY2lwaWVudC4gIElmIG9uIHRoZQorCW90aGVyIGhhbmQgeW91IGFyZSBjaGVycnktcGlja2luZyBiZXR3ZWVuIHR3byBwdWJsaWNseQorCXZpc2libGUgYnJhbmNoZXMgKGUuZy4gYmFja3BvcnRpbmcgYSBmaXggdG8gYQorCW1haW50ZW5hbmNlIGJyYW5jaCBmb3IgYW4gb2xkZXIgcmVsZWFzZSBmcm9tIGEKKwlkZXZlbG9wbWVudCBicmFuY2gpLCBhZGRpbmcgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUKKwl1c2VmdWwuCisKKy1yOjoKKwlJdCB1c2VkIHRvIGJlIHRoYXQgdGhlIGNvbW1hbmQgZGVmYXVsdGVkIHRvIGRvIGAteGAKKwlkZXNjcmliZWQgYWJvdmUsIGFuZCBgLXJgIHdhcyB0byBkaXNhYmxlIGl0LiAgTm93IHRoZQorCWRlZmF1bHQgaXMgbm90IHRvIGRvIGAteGAgc28gdGhpcyBvcHRpb24gaXMgYSBuby1vcC4KKworLW0gcGFyZW50LW51bWJlcjo6CistLW1haW5saW5lIHBhcmVudC1udW1iZXI6OgorCVVzdWFsbHkgeW91IGNhbm5vdCBjaGVycnktcGljayBhIG1lcmdlIGJlY2F1c2UgeW91IGRvIG5vdCBrbm93IHdoaWNoCisJc2lkZSBvZiB0aGUgbWVyZ2Ugc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhlIG1haW5saW5lLiAgVGhpcworCW9wdGlvbiBzcGVjaWZpZXMgdGhlIHBhcmVudCBudW1iZXIgKHN0YXJ0aW5nIGZyb20gMSkgb2YKKwl0aGUgbWFpbmxpbmUgYW5kIGFsbG93cyBjaGVycnktcGljayB0byByZXBsYXkgdGhlIGNoYW5nZQorCXJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgcGFyZW50LgorCistbjo6CistLW5vLWNvbW1pdDo6CisJVXN1YWxseSB0aGUgY29tbWFuZCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBzZXF1ZW5jZSBvZiBjb21taXRzLgorCVRoaXMgZmxhZyBhcHBsaWVzIHRoZSBjaGFuZ2VzIG5lY2Vzc2FyeSB0byBjaGVycnktcGljaworCWVhY2ggbmFtZWQgY29tbWl0IHRvIHlvdXIgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgsCisJd2l0aG91dCBtYWtpbmcgYW55IGNvbW1pdC4gIEluIGFkZGl0aW9uLCB3aGVuIHRoaXMKKwlvcHRpb24gaXMgdXNlZCwgeW91ciBpbmRleCBkb2VzIG5vdCBoYXZlIHRvIG1hdGNoIHRoZQorCUhFQUQgY29tbWl0LiAgVGhlIGNoZXJyeS1waWNrIGlzIGRvbmUgYWdhaW5zdCB0aGUKKwliZWdpbm5pbmcgc3RhdGUgb2YgeW91ciBpbmRleC4KKysKK1RoaXMgaXMgdXNlZnVsIHdoZW4gY2hlcnJ5LXBpY2tpbmcgbW9yZSB0aGFuIG9uZSBjb21taXRzJworZWZmZWN0IHRvIHlvdXIgaW5kZXggaW4gYSByb3cuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIFNpZ25lZC1vZmYtYnkgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKwlTZWUgdGhlIHNpZ25vZmYgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIGNvbW1pdHMuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZAorCWRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorCXN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistLWZmOjoKKwlJZiB0aGUgY3VycmVudCBIRUFEIGlzIHRoZSBzYW1lIGFzIHRoZSBwYXJlbnQgb2YgdGhlCisJY2hlcnJ5LXBpY2snZWQgY29tbWl0LCB0aGVuIGEgZmFzdCBmb3J3YXJkIHRvIHRoaXMgY29tbWl0IHdpbGwKKwliZSBwZXJmb3JtZWQuCisKKy0tYWxsb3ctZW1wdHk6OgorCUJ5IGRlZmF1bHQsIGNoZXJyeS1waWNraW5nIGFuIGVtcHR5IGNvbW1pdCB3aWxsIGZhaWwsCisJaW5kaWNhdGluZyB0aGF0IGFuIGV4cGxpY2l0IGludm9jYXRpb24gb2YgYGdpdCBjb21taXQKKwktLWFsbG93LWVtcHR5YCBpcyByZXF1aXJlZC4gVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHRoYXQKKwliZWhhdmlvciwgYWxsb3dpbmcgZW1wdHkgY29tbWl0cyB0byBiZSBwcmVzZXJ2ZWQgYXV0b21hdGljYWxseQorCWluIGEgY2hlcnJ5LXBpY2suIE5vdGUgdGhhdCB3aGVuICItLWZmIiBpcyBpbiBlZmZlY3QsIGVtcHR5CisJY29tbWl0cyB0aGF0IG1lZXQgdGhlICJmYXN0LWZvcndhcmQiIHJlcXVpcmVtZW50IHdpbGwgYmUga2VwdAorCWV2ZW4gd2l0aG91dCB0aGlzIG9wdGlvbi4gIE5vdGUgYWxzbywgdGhhdCB1c2Ugb2YgdGhpcyBvcHRpb24gb25seQorCWtlZXBzIGNvbW1pdHMgdGhhdCB3ZXJlIGluaXRpYWxseSBlbXB0eSAoaS5lLiB0aGUgY29tbWl0IHJlY29yZGVkIHRoZQorCXNhbWUgdHJlZSBhcyBpdHMgcGFyZW50KS4gIENvbW1pdHMgd2hpY2ggYXJlIG1hZGUgZW1wdHkgZHVlIHRvIGEKKwlwcmV2aW91cyBjb21taXQgYXJlIGRyb3BwZWQuICBUbyBmb3JjZSB0aGUgaW5jbHVzaW9uIG9mIHRob3NlIGNvbW1pdHMKKwl1c2UgYC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0c2AuCisKKy0tYWxsb3ctZW1wdHktbWVzc2FnZTo6CisJQnkgZGVmYXVsdCwgY2hlcnJ5LXBpY2tpbmcgYSBjb21taXQgd2l0aCBhbiBlbXB0eSBtZXNzYWdlIHdpbGwgZmFpbC4KKwlUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhhdCBiZWhhdmlvciwgYWxsb3dpbmcgY29tbWl0cyB3aXRoIGVtcHR5CisJbWVzc2FnZXMgdG8gYmUgY2hlcnJ5IHBpY2tlZC4KKworLS1rZWVwLXJlZHVuZGFudC1jb21taXRzOjoKKwlJZiBhIGNvbW1pdCBiZWluZyBjaGVycnkgcGlja2VkIGR1cGxpY2F0ZXMgYSBjb21taXQgYWxyZWFkeSBpbiB0aGUKKwljdXJyZW50IGhpc3RvcnksIGl0IHdpbGwgYmVjb21lIGVtcHR5LiAgQnkgZGVmYXVsdCB0aGVzZQorCXJlZHVuZGFudCBjb21taXRzIGNhdXNlIGBjaGVycnktcGlja2AgdG8gc3RvcCBzbyB0aGUgdXNlciBjYW4KKwlleGFtaW5lIHRoZSBjb21taXQuIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyB0aGF0IGJlaGF2aW9yIGFuZAorCWNyZWF0ZXMgYW4gZW1wdHkgY29tbWl0IG9iamVjdC4gIEltcGxpZXMgYC0tYWxsb3ctZW1wdHlgLgorCistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorCVVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kuICBTaG91bGQgb25seSBiZSB1c2VkIG9uY2UuCisJU2VlIHRoZSBNRVJHRSBTVFJBVEVHSUVTIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtbWVyZ2VbMV0KKwlmb3IgZGV0YWlscy4KKworLVg8b3B0aW9uPjo6CistLXN0cmF0ZWd5LW9wdGlvbj08b3B0aW9uPjo6CisJUGFzcyB0aGUgbWVyZ2Ugc3RyYXRlZ3ktc3BlY2lmaWMgb3B0aW9uIHRocm91Z2ggdG8gdGhlCisJbWVyZ2Ugc3RyYXRlZ3kuICBTZWUgbGlua2dpdDpnaXQtbWVyZ2VbMV0gZm9yIGRldGFpbHMuCisKKy0tcmVyZXJlLWF1dG91cGRhdGU6OgorLS1uby1yZXJlcmUtYXV0b3VwZGF0ZTo6CisJQWxsb3cgdGhlIHJlcmVyZSBtZWNoYW5pc20gdG8gdXBkYXRlIHRoZSBpbmRleCB3aXRoIHRoZQorCXJlc3VsdCBvZiBhdXRvLWNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUuCisKK1NFUVVFTkNFUiBTVUJDT01NQU5EUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbmNsdWRlOjpzZXF1ZW5jZXIudHh0W10KKworRVhBTVBMRVMKKy0tLS0tLS0tCitgZ2l0IGNoZXJyeS1waWNrIG1hc3RlcmA6OgorCisJQXBwbHkgdGhlIGNoYW5nZSBpbnRyb2R1Y2VkIGJ5IHRoZSBjb21taXQgYXQgdGhlIHRpcCBvZiB0aGUKKwltYXN0ZXIgYnJhbmNoIGFuZCBjcmVhdGUgYSBuZXcgY29tbWl0IHdpdGggdGhpcyBjaGFuZ2UuCisKK2BnaXQgY2hlcnJ5LXBpY2sgLi5tYXN0ZXJgOjoKK2BnaXQgY2hlcnJ5LXBpY2sgXkhFQUQgbWFzdGVyYDo6CisKKwlBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGFsbCBjb21taXRzIHRoYXQgYXJlIGFuY2VzdG9ycworCW9mIG1hc3RlciBidXQgbm90IG9mIEhFQUQgdG8gcHJvZHVjZSBuZXcgY29tbWl0cy4KKworYGdpdCBjaGVycnktcGljayBtYWludCBuZXh0IF5tYXN0ZXJgOjoKK2BnaXQgY2hlcnJ5LXBpY2sgbWFpbnQgbWFzdGVyLi5uZXh0YDo6CisKKwlBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGFsbCBjb21taXRzIHRoYXQgYXJlCisJYW5jZXN0b3JzIG9mIG1haW50IG9yIG5leHQsIGJ1dCBub3QgbWFzdGVyIG9yIGFueSBvZiBpdHMKKwlhbmNlc3RvcnMuICBOb3RlIHRoYXQgdGhlIGxhdHRlciBkb2VzIG5vdCBtZWFuIGBtYWludGAgYW5kCisJZXZlcnl0aGluZyBiZXR3ZWVuIGBtYXN0ZXJgIGFuZCBgbmV4dGA7IHNwZWNpZmljYWxseSwKKwlgbWFpbnRgIHdpbGwgbm90IGJlIHVzZWQgaWYgaXQgaXMgaW5jbHVkZWQgaW4gYG1hc3RlcmAuCisKK2BnaXQgY2hlcnJ5LXBpY2sgbWFzdGVyfjQgbWFzdGVyfjJgOjoKKworCUFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhlIGZpZnRoIGFuZCB0aGlyZCBsYXN0CisJY29tbWl0cyBwb2ludGVkIHRvIGJ5IG1hc3RlciBhbmQgY3JlYXRlIDIgbmV3IGNvbW1pdHMgd2l0aAorCXRoZXNlIGNoYW5nZXMuCisKK2BnaXQgY2hlcnJ5LXBpY2sgLW4gbWFzdGVyfjEgbmV4dGA6OgorCisJQXBwbHkgdG8gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQKKwlieSB0aGUgc2Vjb25kIGxhc3QgY29tbWl0IHBvaW50ZWQgdG8gYnkgbWFzdGVyIGFuZCBieSB0aGUgbGFzdAorCWNvbW1pdCBwb2ludGVkIHRvIGJ5IG5leHQsIGJ1dCBkbyBub3QgY3JlYXRlIGFueSBjb21taXQgd2l0aAorCXRoZXNlIGNoYW5nZXMuCisKK2BnaXQgY2hlcnJ5LXBpY2sgLS1mZiAuLm5leHRgOjoKKworCUlmIGhpc3RvcnkgaXMgbGluZWFyIGFuZCBIRUFEIGlzIGFuIGFuY2VzdG9yIG9mIG5leHQsIHVwZGF0ZQorCXRoZSB3b3JraW5nIHRyZWUgYW5kIGFkdmFuY2UgdGhlIEhFQUQgcG9pbnRlciB0byBtYXRjaCBuZXh0LgorCU90aGVyd2lzZSwgYXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aG9zZSBjb21taXRzIHRoYXQKKwlhcmUgaW4gbmV4dCBidXQgbm90IEhFQUQgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLCBjcmVhdGluZyBhIG5ldworCWNvbW1pdCBmb3IgZWFjaCBuZXcgY2hhbmdlLgorCitgZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSBtYXN0ZXIgLS0gUkVBRE1FIHwgZ2l0IGNoZXJyeS1waWNrIC1uIC0tc3RkaW5gOjoKKworCUFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgYWxsIGNvbW1pdHMgb24gdGhlIG1hc3RlcgorCWJyYW5jaCB0aGF0IHRvdWNoZWQgUkVBRE1FIHRvIHRoZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4LAorCXNvIHRoZSByZXN1bHQgY2FuIGJlIGluc3BlY3RlZCBhbmQgbWFkZSBpbnRvIGEgc2luZ2xlIG5ldworCWNvbW1pdCBpZiBzdWl0YWJsZS4KKworVGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBhdHRlbXB0cyB0byBiYWNrcG9ydCBhIHBhdGNoLCBiYWlscyBvdXQgYmVjYXVzZQordGhlIGNvZGUgdGhlIHBhdGNoIGFwcGxpZXMgdG8gaGFzIGNoYW5nZWQgdG9vIG11Y2gsIGFuZCB0aGVuIHRyaWVzCithZ2FpbiwgdGhpcyB0aW1lIGV4ZXJjaXNpbmcgbW9yZSBjYXJlIGFib3V0IG1hdGNoaW5nIHVwIGNvbnRleHQgbGluZXMuCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlcnJ5LXBpY2sgdG9waWNeICAgICAgICAgICAgIDwxPgorJCBnaXQgZGlmZiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgcmVzZXQgLS1tZXJnZSBPUklHX0hFQUQgICAgICAgIDwzPgorJCBnaXQgY2hlcnJ5LXBpY2sgLVhwYXRpZW5jZSB0b3BpY14gIDw0PgorLS0tLS0tLS0tLS0tCis8MT4gYXBwbHkgdGhlIGNoYW5nZSB0aGF0IHdvdWxkIGJlIHNob3duIGJ5IGBnaXQgc2hvdyB0b3BpY15gLgorICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHNvCisgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbmZsaWN0IGlzIHdyaXR0ZW4gdG8gdGhlIGluZGV4IGFuZAorICAgIHdvcmtpbmcgdHJlZSBhbmQgbm8gbmV3IGNvbW1pdCByZXN1bHRzLgorPDI+IHN1bW1hcml6ZSBjaGFuZ2VzIHRvIGJlIHJlY29uY2lsZWQKKzwzPiBjYW5jZWwgdGhlIGNoZXJyeS1waWNrLiAgSW4gb3RoZXIgd29yZHMsIHJldHVybiB0byB0aGUKKyAgICBwcmUtY2hlcnJ5LXBpY2sgc3RhdGUsIHByZXNlcnZpbmcgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMKKyAgICB5b3UgaGFkIGluIHRoZSB3b3JraW5nIHRyZWUuCis8ND4gdHJ5IHRvIGFwcGx5IHRoZSBjaGFuZ2UgaW50cm9kdWNlZCBieSBgdG9waWNeYCBhZ2FpbiwKKyAgICBzcGVuZGluZyBleHRyYSB0aW1lIHRvIGF2b2lkIG1pc3Rha2VzIGJhc2VkIG9uIGluY29ycmVjdGx5CisgICAgbWF0Y2hpbmcgY29udGV4dCBsaW5lcy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZXZlcnRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWE5MjFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dApAQCAtMCwwICsxLDE0NSBAQAorZ2l0LWNoZXJyeSgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlcnJ5IC0gRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVycnknIFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0RldGVybWluZSB3aGV0aGVyIHRoZXJlIGFyZSBjb21taXRzIGluIGA8aGVhZD4uLjx1cHN0cmVhbT5gIHRoYXQgYXJlCitlcXVpdmFsZW50IHRvIHRob3NlIGluIHRoZSByYW5nZSBgPGxpbWl0Pi4uPGhlYWQ+YC4KKworVGhlIGVxdWl2YWxlbmNlIHRlc3QgaXMgYmFzZWQgb24gdGhlIGRpZmYsIGFmdGVyIHJlbW92aW5nIHdoaXRlc3BhY2UKK2FuZCBsaW5lIG51bWJlcnMuICBnaXQtY2hlcnJ5IHRoZXJlZm9yZSBkZXRlY3RzIHdoZW4gY29tbWl0cyBoYXZlIGJlZW4KKyJjb3BpZWQiIGJ5IG1lYW5zIG9mIGxpbmtnaXQ6Z2l0LWNoZXJyeS1waWNrWzFdLCBsaW5rZ2l0OmdpdC1hbVsxXSBvcgorbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCitPdXRwdXRzIHRoZSBTSEExIG9mIGV2ZXJ5IGNvbW1pdCBpbiBgPGxpbWl0Pi4uPGhlYWQ+YCwgcHJlZml4ZWQgd2l0aAorYC1gIGZvciBjb21taXRzIHRoYXQgaGF2ZSBhbiBlcXVpdmFsZW50IGluIDx1cHN0cmVhbT4sIGFuZCBgK2AgZm9yCitjb21taXRzIHRoYXQgZG8gbm90LgorCitPUFRJT05TCistLS0tLS0tCistdjo6CisJU2hvdyB0aGUgY29tbWl0IHN1YmplY3RzIG5leHQgdG8gdGhlIFNIQTFzLgorCis8dXBzdHJlYW0+OjoKKwlVcHN0cmVhbSBicmFuY2ggdG8gc2VhcmNoIGZvciBlcXVpdmFsZW50IGNvbW1pdHMuCisJRGVmYXVsdHMgdG8gdGhlIHVwc3RyZWFtIGJyYW5jaCBvZiBIRUFELgorCis8aGVhZD46OgorCVdvcmtpbmcgYnJhbmNoOyBkZWZhdWx0cyB0byBIRUFELgorCis8bGltaXQ+OjoKKwlEbyBub3QgcmVwb3J0IGNvbW1pdHMgdXAgdG8gKGFuZCBpbmNsdWRpbmcpIGxpbWl0LgorCitFWEFNUExFUworLS0tLS0tLS0KKworUGF0Y2ggd29ya2Zsb3dzCit+fn5+fn5+fn5+fn5+fn4KKworZ2l0LWNoZXJyeSBpcyBmcmVxdWVudGx5IHVzZWQgaW4gcGF0Y2gtYmFzZWQgd29ya2Zsb3dzIChzZWUKK2xpbmtnaXQ6Z2l0d29ya2Zsb3dzWzddKSB0byBkZXRlcm1pbmUgaWYgYSBzZXJpZXMgb2YgcGF0Y2hlcyBoYXMgYmVlbgorYXBwbGllZCBieSB0aGUgdXBzdHJlYW0gbWFpbnRhaW5lci4gIEluIHN1Y2ggYSB3b3JrZmxvdyB5b3UgbWlnaHQKK2NyZWF0ZSBhbmQgc2VuZCBhIHRvcGljIGJyYW5jaCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgdG9waWMgb3JpZ2luL21hc3RlcgorIyB3b3JrIGFuZCBjcmVhdGUgc29tZSBjb21taXRzCiskIGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luL21hc3RlcgorJCBnaXQgc2VuZC1lbWFpbCAuLi4gMDAqCistLS0tLS0tLS0tLS0KKworTGF0ZXIsIHlvdSBjYW4gc2VlIHdoZXRoZXIgeW91ciBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkIGJ5IHNheWluZworKHN0aWxsIG9uIGB0b3BpY2ApOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoICAjIHVwZGF0ZSB5b3VyIG5vdGlvbiBvZiBvcmlnaW4vbWFzdGVyCiskIGdpdCBjaGVycnkgLXYKKy0tLS0tLS0tLS0tLQorCitDb25jcmV0ZSBleGFtcGxlCit+fn5+fn5+fn5+fn5+fn5+CisKK0luIGEgc2l0dWF0aW9uIHdoZXJlIHRvcGljIGNvbnNpc3RlZCBvZiB0aHJlZSBjb21taXRzLCBhbmQgdGhlCittYWludGFpbmVyIGFwcGxpZWQgdHdvIG9mIHRoZW0sIHRoZSBzaXR1YXRpb24gbWlnaHQgbG9vayBsaWtlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLWdyYXBoIC0tb25lbGluZSAtLWRlY29yYXRlIC0tYm91bmRhcnkgb3JpZ2luL21hc3Rlci4uLnRvcGljCisqIDc2NTQzMjEgKG9yaWdpbi9tYXN0ZXIpIHVwc3RyZWFtIHRpcCBjb21taXQKK1suLi4gc25pcCBzb21lIG90aGVyIGNvbW1pdHMgLi4uXQorKiBjY2NjMTExIGNoZXJyeS1waWNrIG9mIEMKKyogYWFhYTExMSBjaGVycnktcGljayBvZiBBCitbLi4uIHNuaXAgYSBsb3QgbW9yZSB0aGF0IGhhcyBoYXBwZW5lZCAuLi5dCit8ICogY2NjYzAwMCAodG9waWMpIGNvbW1pdCBDCit8ICogYmJiYjAwMCBjb21taXQgQgorfCAqIGFhYWEwMDAgY29tbWl0IEEKK3wvCitvIDEyMzQ1NjcgYnJhbmNoIHBvaW50CistLS0tLS0tLS0tLS0KKworSW4gc3VjaCBjYXNlcywgZ2l0LWNoZXJyeSBzaG93cyBhIGNvbmNpc2Ugc3VtbWFyeSBvZiB3aGF0IGhhcyB5ZXQgdG8KK2JlIGFwcGxpZWQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlcnJ5IG9yaWdpbi9tYXN0ZXIgdG9waWMKKy0gY2NjYzAwMC4uLiBjb21taXQgQworKyBiYmJiMDAwLi4uIGNvbW1pdCBCCistIGFhYWEwMDAuLi4gY29tbWl0IEEKKy0tLS0tLS0tLS0tLQorCitIZXJlLCB3ZSBzZWUgdGhhdCB0aGUgY29tbWl0cyBBIGFuZCBDIChtYXJrZWQgd2l0aCBgLWApIGNhbiBiZQorZHJvcHBlZCBmcm9tIHlvdXIgYHRvcGljYCBicmFuY2ggd2hlbiB5b3UgcmViYXNlIGl0IG9uIHRvcCBvZgorYG9yaWdpbi9tYXN0ZXJgLCB3aGlsZSB0aGUgY29tbWl0IEIgKG1hcmtlZCB3aXRoIGArYCkgc3RpbGwgbmVlZHMgdG8KK2JlIGtlcHQgc28gdGhhdCBpdCB3aWxsIGJlIHNlbnQgdG8gYmUgYXBwbGllZCB0byBgb3JpZ2luL21hc3RlcmAuCisKKworVXNpbmcgYSBsaW1pdAorfn5+fn5+fn5+fn5+fgorCitUaGUgb3B0aW9uYWwgPGxpbWl0PiBpcyB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgeW91ciB0b3BpYyBpcyBiYXNlZCBvbgorb3RoZXIgd29yayB0aGF0IGlzIG5vdCBpbiB1cHN0cmVhbS4gIEV4cGFuZGluZyBvbiB0aGUgcHJldmlvdXMKK2V4YW1wbGUsIHRoaXMgbWlnaHQgbG9vayBsaWtlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLWdyYXBoIC0tb25lbGluZSAtLWRlY29yYXRlIC0tYm91bmRhcnkgb3JpZ2luL21hc3Rlci4uLnRvcGljCisqIDc2NTQzMjEgKG9yaWdpbi9tYXN0ZXIpIHVwc3RyZWFtIHRpcCBjb21taXQKK1suLi4gc25pcCBzb21lIG90aGVyIGNvbW1pdHMgLi4uXQorKiBjY2NjMTExIGNoZXJyeS1waWNrIG9mIEMKKyogYWFhYTExMSBjaGVycnktcGljayBvZiBBCitbLi4uIHNuaXAgYSBsb3QgbW9yZSB0aGF0IGhhcyBoYXBwZW5lZCAuLi5dCit8ICogY2NjYzAwMCAodG9waWMpIGNvbW1pdCBDCit8ICogYmJiYjAwMCBjb21taXQgQgorfCAqIGFhYWEwMDAgY29tbWl0IEEKK3wgKiAwMDAwZmZmIChiYXNlKSB1bnB1Ymxpc2hlZCBzdHVmZiBGCitbLi4uIHNuaXAgLi4uXQorfCAqIDAwMDBhYWEgdW5wdWJsaXNoZWQgc3R1ZmYgQQorfC8KK28gMTIzNDU2NyBtZXJnZS1iYXNlIGJldHdlZW4gdXBzdHJlYW0gYW5kIHRvcGljCistLS0tLS0tLS0tLS0KKworQnkgc3BlY2lmeWluZyBgYmFzZWAgYXMgdGhlIGxpbWl0LCB5b3UgY2FuIGF2b2lkIGxpc3RpbmcgY29tbWl0cworYmV0d2VlbiBgYmFzZWAgYW5kIGB0b3BpY2A6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlcnJ5IG9yaWdpbi9tYXN0ZXIgdG9waWMgYmFzZQorLSBjY2NjMDAwLi4uIGNvbW1pdCBDCisrIGJiYmIwMDAuLi4gY29tbWl0IEIKKy0gYWFhYTAwMC4uLiBjb21taXQgQQorLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wYXRjaC1pZFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNpdG9vbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YTExYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0CkBAIC0wLDAgKzEsMjUgQEAKK2dpdC1jaXRvb2woMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNpdG9vbCAtIEdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaXRvb2wnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBUY2wvVGsgYmFzZWQgZ3JhcGhpY2FsIGludGVyZmFjZSB0byByZXZpZXcgbW9kaWZpZWQgZmlsZXMsIHN0YWdlCit0aGVtIGludG8gdGhlIGluZGV4LCBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIGFuZCByZWNvcmQgdGhlIG5ldworY29tbWl0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBpbnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUKK3RvIHRoZSBsZXNzIGludGVyYWN0aXZlICdnaXQgY29tbWl0JyBwcm9ncmFtLgorCisnZ2l0IGNpdG9vbCcgaXMgYWN0dWFsbHkgYSBzdGFuZGFyZCBhbGlhcyBmb3IgYGdpdCBndWkgY2l0b29sYC4KK1NlZSBsaW5rZ2l0OmdpdC1ndWlbMV0gZm9yIG1vcmUgZGV0YWlscy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmMzA5ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dApAQCAtMCwwICsxLDE0MiBAQAorZ2l0LWNsZWFuKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNsZWFuIC0gUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNsZWFuJyBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGg+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitDbGVhbnMgdGhlIHdvcmtpbmcgdHJlZSBieSByZWN1cnNpdmVseSByZW1vdmluZyBmaWxlcyB0aGF0IGFyZSBub3QKK3VuZGVyIHZlcnNpb24gY29udHJvbCwgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKK05vcm1hbGx5LCBvbmx5IGZpbGVzIHVua25vd24gdG8gR2l0IGFyZSByZW1vdmVkLCBidXQgaWYgdGhlIGAteGAKK29wdGlvbiBpcyBzcGVjaWZpZWQsIGlnbm9yZWQgZmlsZXMgYXJlIGFsc28gcmVtb3ZlZC4gVGhpcyBjYW4sIGZvcgorZXhhbXBsZSwgYmUgdXNlZnVsIHRvIHJlbW92ZSBhbGwgYnVpbGQgcHJvZHVjdHMuCisKK0lmIGFueSBvcHRpb25hbCBgPHBhdGg+Li4uYCBhcmd1bWVudHMgYXJlIGdpdmVuLCBvbmx5IHRob3NlIHBhdGhzCithcmUgYWZmZWN0ZWQuCisKK09QVElPTlMKKy0tLS0tLS0KKy1kOjoKKwlOb3JtYWxseSwgd2hlbiBubyA8cGF0aD4gaXMgc3BlY2lmaWVkLCBnaXQgY2xlYW4gd2lsbCBub3QKKwlyZWN1cnNlIGludG8gdW50cmFja2VkIGRpcmVjdG9yaWVzIHRvIGF2b2lkIHJlbW92aW5nIHRvbyBtdWNoLgorCVNwZWNpZnkgLWQgdG8gaGF2ZSBpdCByZWN1cnNlIGludG8gc3VjaCBkaXJlY3RvcmllcyBhcyB3ZWxsLgorCUlmIGFueSBwYXRocyBhcmUgc3BlY2lmaWVkLCAtZCBpcyBpcnJlbGV2YW50OyBhbGwgdW50cmFja2VkCisJZmlsZXMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBwYXRocyAod2l0aCBleGNlcHRpb25zIGZvciBuZXN0ZWQKKwlnaXQgZGlyZWN0b3JpZXMgbWVudGlvbmVkIHVuZGVyIGAtLWZvcmNlYCkgd2lsbCBiZSByZW1vdmVkLgorCistZjo6CistLWZvcmNlOjoKKwlJZiB0aGUgR2l0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2xlYW4ucmVxdWlyZUZvcmNlIGlzIG5vdCBzZXQKKwl0byBmYWxzZSwgJ2dpdCBjbGVhbicgd2lsbCByZWZ1c2UgdG8gZGVsZXRlIGZpbGVzIG9yIGRpcmVjdG9yaWVzCisJdW5sZXNzIGdpdmVuIC1mIG9yIC1pLiAgR2l0IHdpbGwgcmVmdXNlIHRvIG1vZGlmeSB1bnRyYWNrZWQKKwluZXN0ZWQgZ2l0IHJlcG9zaXRvcmllcyAoZGlyZWN0b3JpZXMgd2l0aCBhIC5naXQgc3ViZGlyZWN0b3J5KQorCXVubGVzcyBhIHNlY29uZCAtZiBpcyBnaXZlbi4KKworLWk6OgorLS1pbnRlcmFjdGl2ZTo6CisJU2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUgYW5kIGNsZWFuIGZpbGVzIGludGVyYWN0aXZlbHkuIFNlZQorCWBgSW50ZXJhY3RpdmUgbW9kZScnIGZvciBkZXRhaWxzLgorCistbjo6CistLWRyeS1ydW46OgorCURvbid0IGFjdHVhbGx5IHJlbW92ZSBhbnl0aGluZywganVzdCBzaG93IHdoYXQgd291bGQgYmUgZG9uZS4KKworLXE6OgorLS1xdWlldDo6CisJQmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycywgYnV0IG5vdCB0aGUgZmlsZXMgdGhhdCBhcmUKKwlzdWNjZXNzZnVsbHkgcmVtb3ZlZC4KKworLWUgPHBhdHRlcm4+OjoKKy0tZXhjbHVkZT08cGF0dGVybj46OgorCVVzZSB0aGUgZ2l2ZW4gZXhjbHVkZSBwYXR0ZXJuIGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBpZ25vcmUgcnVsZXMKKwkoc2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdKS4KKworLXg6OgorCURvbid0IHVzZSB0aGUgc3RhbmRhcmQgaWdub3JlIHJ1bGVzIChzZWUgbGlua2dpdDpnaXRpZ25vcmVbNV0pLCBidXQKKwlzdGlsbCB1c2UgdGhlIGlnbm9yZSBydWxlcyBnaXZlbiB3aXRoIGAtZWAgb3B0aW9ucyBmcm9tIHRoZSBjb21tYW5kCisJbGluZS4gIFRoaXMgYWxsb3dzIHJlbW92aW5nIGFsbCB1bnRyYWNrZWQKKwlmaWxlcywgaW5jbHVkaW5nIGJ1aWxkIHByb2R1Y3RzLiAgVGhpcyBjYW4gYmUgdXNlZCAocG9zc2libHkgaW4KKwljb25qdW5jdGlvbiB3aXRoICdnaXQgcmVzdG9yZScgb3IgJ2dpdCByZXNldCcpIHRvIGNyZWF0ZSBhIHByaXN0aW5lCisJd29ya2luZyBkaXJlY3RvcnkgdG8gdGVzdCBhIGNsZWFuIGJ1aWxkLgorCistWDo6CisJUmVtb3ZlIG9ubHkgZmlsZXMgaWdub3JlZCBieSBHaXQuICBUaGlzIG1heSBiZSB1c2VmdWwgdG8gcmVidWlsZAorCWV2ZXJ5dGhpbmcgZnJvbSBzY3JhdGNoLCBidXQga2VlcCBtYW51YWxseSBjcmVhdGVkIGZpbGVzLgorCitJbnRlcmFjdGl2ZSBtb2RlCistLS0tLS0tLS0tLS0tLS0tCitXaGVuIHRoZSBjb21tYW5kIGVudGVycyB0aGUgaW50ZXJhY3RpdmUgbW9kZSwgaXQgc2hvd3MgdGhlCitmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gYmUgY2xlYW5lZCwgYW5kIGdvZXMgaW50byBpdHMKK2ludGVyYWN0aXZlIGNvbW1hbmQgbG9vcC4KKworVGhlIGNvbW1hbmQgbG9vcCBzaG93cyB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcyBhdmFpbGFibGUsIGFuZAorZ2l2ZXMgYSBwcm9tcHQgIldoYXQgbm93PiAiLiAgSW4gZ2VuZXJhbCwgd2hlbiB0aGUgcHJvbXB0IGVuZHMKK3dpdGggYSBzaW5nbGUgJz4nLCB5b3UgY2FuIHBpY2sgb25seSBvbmUgb2YgdGhlIGNob2ljZXMgZ2l2ZW4KK2FuZCB0eXBlIHJldHVybiwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICAqKiogQ29tbWFuZHMgKioqCisJMTogY2xlYW4gICAgICAgICAgICAgICAgMjogZmlsdGVyIGJ5IHBhdHRlcm4gICAgMzogc2VsZWN0IGJ5IG51bWJlcnMKKwk0OiBhc2sgZWFjaCAgICAgICAgICAgICA1OiBxdWl0ICAgICAgICAgICAgICAgICA2OiBoZWxwCisgICAgV2hhdCBub3c+IDEKKy0tLS0tLS0tLS0tLQorCitZb3UgYWxzbyBjb3VsZCBzYXkgYGNgIG9yIGBjbGVhbmAgYWJvdmUgYXMgbG9uZyBhcyB0aGUgY2hvaWNlIGlzIHVuaXF1ZS4KKworVGhlIG1haW4gY29tbWFuZCBsb29wIGhhcyA2IHN1YmNvbW1hbmRzLgorCitjbGVhbjo6CisKKyAgIFN0YXJ0IGNsZWFuaW5nIGZpbGVzIGFuZCBkaXJlY3RvcmllcywgYW5kIHRoZW4gcXVpdC4KKworZmlsdGVyIGJ5IHBhdHRlcm46OgorCisgICBUaGlzIHNob3dzIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gYmUgZGVsZXRlZCBhbmQgaXNzdWVzIGFuCisgICAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4iIHByb21wdC4gWW91IGNhbiBpbnB1dCBzcGFjZS1zZXBhcmF0ZWQKKyAgIHBhdHRlcm5zIHRvIGV4Y2x1ZGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGZyb20gZGVsZXRpb24uCisgICBFLmcuICIqLmMgKi5oIiB3aWxsIGV4Y2x1ZGVzIGZpbGVzIGVuZCB3aXRoICIuYyIgYW5kICIuaCIgZnJvbQorICAgZGVsZXRpb24uIFdoZW4geW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgZmlsdGVyZWQgcmVzdWx0LCBwcmVzcworICAgRU5URVIgKGVtcHR5KSBiYWNrIHRvIHRoZSBtYWluIG1lbnUuCisKK3NlbGVjdCBieSBudW1iZXJzOjoKKworICAgVGhpcyBzaG93cyB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGJlIGRlbGV0ZWQgYW5kIGlzc3VlcyBhbgorICAgIlNlbGVjdCBpdGVtcyB0byBkZWxldGU+PiIgcHJvbXB0LiBXaGVuIHRoZSBwcm9tcHQgZW5kcyB3aXRoIGRvdWJsZQorICAgJz4+JyBsaWtlIHRoaXMsIHlvdSBjYW4gbWFrZSBtb3JlIHRoYW4gb25lIHNlbGVjdGlvbiwgY29uY2F0ZW5hdGVkCisgICB3aXRoIHdoaXRlc3BhY2Ugb3IgY29tbWEuICBBbHNvIHlvdSBjYW4gc2F5IHJhbmdlcy4gIEUuZy4gIjItNSA3LDkiCisgICB0byBjaG9vc2UgMiwzLDQsNSw3LDkgZnJvbSB0aGUgbGlzdC4gIElmIHRoZSBzZWNvbmQgbnVtYmVyIGluIGEKKyAgIHJhbmdlIGlzIG9taXR0ZWQsIGFsbCByZW1haW5pbmcgaXRlbXMgYXJlIHNlbGVjdGVkLiAgRS5nLiAiNy0iIHRvCisgICBjaG9vc2UgNyw4LDkgZnJvbSB0aGUgbGlzdC4gIFlvdSBjYW4gc2F5ICcqJyB0byBjaG9vc2UgZXZlcnl0aGluZy4KKyAgIEFsc28gd2hlbiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSBmaWx0ZXJlZCByZXN1bHQsIHByZXNzIEVOVEVSCisgICAoZW1wdHkpIGJhY2sgdG8gdGhlIG1haW4gbWVudS4KKworYXNrIGVhY2g6OgorCisgIFRoaXMgd2lsbCBzdGFydCB0byBjbGVhbiwgYW5kIHlvdSBtdXN0IGNvbmZpcm0gb25lIGJ5IG9uZSBpbiBvcmRlcgorICB0byBkZWxldGUgaXRlbXMuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBhY3Rpb24gaXMgbm90IGFzIGVmZmljaWVudAorICBhcyB0aGUgYWJvdmUgdHdvIGFjdGlvbnMuCisKK3F1aXQ6OgorCisgIFRoaXMgbGV0cyB5b3UgcXVpdCB3aXRob3V0IGRvIGNsZWFuaW5nLgorCitoZWxwOjoKKworICBTaG93IGJyaWVmIHVzYWdlIG9mIGludGVyYWN0aXZlIGdpdC1jbGVhbi4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdGlnbm9yZVs1XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjI0ZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CkBAIC0wLDAgKzEsMzQzIEBACitnaXQtY2xvbmUoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2xvbmUgLSBDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY2xvbmUnIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+XQorCSAgWy1sXSBbLXNdIFstLW5vLWhhcmRsaW5rc10gWy1xXSBbLW5dIFstLWJhcmVdIFstLW1pcnJvcl0KKwkgIFstbyA8bmFtZT5dIFstYiA8bmFtZT5dIFstdSA8dXBsb2FkLXBhY2s+XSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XQorCSAgWy0tZGlzc29jaWF0ZV0gWy0tc2VwYXJhdGUtZ2l0LWRpciA8Z2l0IGRpcj5dCisJICBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1bbm8tXXNpbmdsZS1icmFuY2hdIFstLW5vLXRhZ3NdCisJICBbLS1yZWN1cnNlLXN1Ym1vZHVsZXNbPTxwYXRoc3BlYz5dXSBbLS1bbm8tXXNoYWxsb3ctc3VibW9kdWxlc10KKwkgIFstLVtuby1dcmVtb3RlLXN1Ym1vZHVsZXNdIFstLWpvYnMgPG4+XSBbLS1zcGFyc2VdIFstLV0gPHJlcG9zaXRvcnk+CisJICBbPGRpcmVjdG9yeT5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitDbG9uZXMgYSByZXBvc2l0b3J5IGludG8gYSBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeSwgY3JlYXRlcworcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciBlYWNoIGJyYW5jaCBpbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkKKyh2aXNpYmxlIHVzaW5nIGBnaXQgYnJhbmNoIC0tcmVtb3Rlc2ApLCBhbmQgY3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhbgoraW5pdGlhbCBicmFuY2ggdGhhdCBpcyBmb3JrZWQgZnJvbSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkncworY3VycmVudGx5IGFjdGl2ZSBicmFuY2guCisKK0FmdGVyIHRoZSBjbG9uZSwgYSBwbGFpbiBgZ2l0IGZldGNoYCB3aXRob3V0IGFyZ3VtZW50cyB3aWxsIHVwZGF0ZQorYWxsIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsIGFuZCBhIGBnaXQgcHVsbGAgd2l0aG91dAorYXJndW1lbnRzIHdpbGwgaW4gYWRkaXRpb24gbWVyZ2UgdGhlIHJlbW90ZSBtYXN0ZXIgYnJhbmNoIGludG8gdGhlCitjdXJyZW50IG1hc3RlciBicmFuY2gsIGlmIGFueSAodGhpcyBpcyB1bnRydWUgd2hlbiAiLS1zaW5nbGUtYnJhbmNoIgoraXMgZ2l2ZW47IHNlZSBiZWxvdykuCisKK1RoaXMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGFjaGlldmVkIGJ5IGNyZWF0aW5nIHJlZmVyZW5jZXMgdG8KK3RoZSByZW1vdGUgYnJhbmNoIGhlYWRzIHVuZGVyIGByZWZzL3JlbW90ZXMvb3JpZ2luYCBhbmQKK2J5IGluaXRpYWxpemluZyBgcmVtb3RlLm9yaWdpbi51cmxgIGFuZCBgcmVtb3RlLm9yaWdpbi5mZXRjaGAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1sOjoKKy0tbG9jYWw6OgorCVdoZW4gdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbSBpcyBvbiBhIGxvY2FsIG1hY2hpbmUsCisJdGhpcyBmbGFnIGJ5cGFzc2VzIHRoZSBub3JtYWwgIkdpdCBhd2FyZSIgdHJhbnNwb3J0CisJbWVjaGFuaXNtIGFuZCBjbG9uZXMgdGhlIHJlcG9zaXRvcnkgYnkgbWFraW5nIGEgY29weSBvZgorCUhFQUQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgb2JqZWN0cyBhbmQgcmVmcyBkaXJlY3Rvcmllcy4KKwlUaGUgZmlsZXMgdW5kZXIgYC5naXQvb2JqZWN0cy9gIGRpcmVjdG9yeSBhcmUgaGFyZGxpbmtlZAorCXRvIHNhdmUgc3BhY2Ugd2hlbiBwb3NzaWJsZS4KKysKK0lmIHRoZSByZXBvc2l0b3J5IGlzIHNwZWNpZmllZCBhcyBhIGxvY2FsIHBhdGggKGUuZy4sIGAvcGF0aC90by9yZXBvYCksCit0aGlzIGlzIHRoZSBkZWZhdWx0LCBhbmQgLS1sb2NhbCBpcyBlc3NlbnRpYWxseSBhIG5vLW9wLiAgSWYgdGhlCityZXBvc2l0b3J5IGlzIHNwZWNpZmllZCBhcyBhIFVSTCwgdGhlbiB0aGlzIGZsYWcgaXMgaWdub3JlZCAoYW5kIHdlCituZXZlciB1c2UgdGhlIGxvY2FsIG9wdGltaXphdGlvbnMpLiAgU3BlY2lmeWluZyBgLS1uby1sb2NhbGAgd2lsbAorb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2hlbiBgL3BhdGgvdG8vcmVwb2AgaXMgZ2l2ZW4sIHVzaW5nIHRoZSByZWd1bGFyCitHaXQgdHJhbnNwb3J0IGluc3RlYWQuCisKKy0tbm8taGFyZGxpbmtzOjoKKwlGb3JjZSB0aGUgY2xvbmluZyBwcm9jZXNzIGZyb20gYSByZXBvc2l0b3J5IG9uIGEgbG9jYWwKKwlmaWxlc3lzdGVtIHRvIGNvcHkgdGhlIGZpbGVzIHVuZGVyIHRoZSBgLmdpdC9vYmplY3RzYAorCWRpcmVjdG9yeSBpbnN0ZWFkIG9mIHVzaW5nIGhhcmRsaW5rcy4gVGhpcyBtYXkgYmUgZGVzaXJhYmxlCisJaWYgeW91IGFyZSB0cnlpbmcgdG8gbWFrZSBhIGJhY2stdXAgb2YgeW91ciByZXBvc2l0b3J5LgorCistczo6CistLXNoYXJlZDo6CisJV2hlbiB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZSBpcyBvbiB0aGUgbG9jYWwgbWFjaGluZSwKKwlpbnN0ZWFkIG9mIHVzaW5nIGhhcmQgbGlua3MsIGF1dG9tYXRpY2FsbHkgc2V0dXAKKwlgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AgdG8gc2hhcmUgdGhlIG9iamVjdHMKKwl3aXRoIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4gIFRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeQorCXN0YXJ0cyBvdXQgd2l0aG91dCBhbnkgb2JqZWN0IG9mIGl0cyBvd24uCisrCisqTk9URSo6IHRoaXMgaXMgYSBwb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uOyBkbyAqbm90KiB1c2UKK2l0IHVubGVzcyB5b3UgdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMuIElmIHlvdSBjbG9uZSB5b3VyCityZXBvc2l0b3J5IHVzaW5nIHRoaXMgb3B0aW9uIGFuZCB0aGVuIGRlbGV0ZSBicmFuY2hlcyAob3IgdXNlIGFueQorb3RoZXIgR2l0IGNvbW1hbmQgdGhhdCBtYWtlcyBhbnkgZXhpc3RpbmcgY29tbWl0IHVucmVmZXJlbmNlZCkgaW4gdGhlCitzb3VyY2UgcmVwb3NpdG9yeSwgc29tZSBvYmplY3RzIG1heSBiZWNvbWUgdW5yZWZlcmVuY2VkIChvciBkYW5nbGluZykuCitUaGVzZSBvYmplY3RzIG1heSBiZSByZW1vdmVkIGJ5IG5vcm1hbCBHaXQgb3BlcmF0aW9ucyAoc3VjaCBhcyBgZ2l0IGNvbW1pdGApCit3aGljaCBhdXRvbWF0aWNhbGx5IGNhbGwgYGdpdCBnYyAtLWF1dG9gLiAoU2VlIGxpbmtnaXQ6Z2l0LWdjWzFdLikKK0lmIHRoZXNlIG9iamVjdHMgYXJlIHJlbW92ZWQgYW5kIHdlcmUgcmVmZXJlbmNlZCBieSB0aGUgY2xvbmVkIHJlcG9zaXRvcnksCit0aGVuIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB3aWxsIGJlY29tZSBjb3JydXB0LgorKworTm90ZSB0aGF0IHJ1bm5pbmcgYGdpdCByZXBhY2tgIHdpdGhvdXQgdGhlIGAtLWxvY2FsYCBvcHRpb24gaW4gYSByZXBvc2l0b3J5CitjbG9uZWQgd2l0aCBgLS1zaGFyZWRgIHdpbGwgY29weSBvYmplY3RzIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3J5IGludG8gYSBwYWNrCitpbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnksIHJlbW92aW5nIHRoZSBkaXNrIHNwYWNlIHNhdmluZ3Mgb2YgYGNsb25lIC0tc2hhcmVkYC4KK0l0IGlzIHNhZmUsIGhvd2V2ZXIsIHRvIHJ1biBgZ2l0IGdjYCwgd2hpY2ggdXNlcyB0aGUgYC0tbG9jYWxgIG9wdGlvbiBieQorZGVmYXVsdC4KKysKK0lmIHlvdSB3YW50IHRvIGJyZWFrIHRoZSBkZXBlbmRlbmN5IG9mIGEgcmVwb3NpdG9yeSBjbG9uZWQgd2l0aCBgLS1zaGFyZWRgIG9uCitpdHMgc291cmNlIHJlcG9zaXRvcnksIHlvdSBjYW4gc2ltcGx5IHJ1biBgZ2l0IHJlcGFjayAtYWAgdG8gY29weSBhbGwKK29iamVjdHMgZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW50byBhIHBhY2sgaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5LgorCistLXJlZmVyZW5jZVstaWYtYWJsZV0gPHJlcG9zaXRvcnk+OjoKKwlJZiB0aGUgcmVmZXJlbmNlIHJlcG9zaXRvcnkgaXMgb24gdGhlIGxvY2FsIG1hY2hpbmUsCisJYXV0b21hdGljYWxseSBzZXR1cCBgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AgdG8KKwlvYnRhaW4gb2JqZWN0cyBmcm9tIHRoZSByZWZlcmVuY2UgcmVwb3NpdG9yeS4gIFVzaW5nCisJYW4gYWxyZWFkeSBleGlzdGluZyByZXBvc2l0b3J5IGFzIGFuIGFsdGVybmF0ZSB3aWxsCisJcmVxdWlyZSBmZXdlciBvYmplY3RzIHRvIGJlIGNvcGllZCBmcm9tIHRoZSByZXBvc2l0b3J5CisJYmVpbmcgY2xvbmVkLCByZWR1Y2luZyBuZXR3b3JrIGFuZCBsb2NhbCBzdG9yYWdlIGNvc3RzLgorCVdoZW4gdXNpbmcgdGhlIGAtLXJlZmVyZW5jZS1pZi1hYmxlYCwgYSBub24gZXhpc3RpbmcKKwlkaXJlY3RvcnkgaXMgc2tpcHBlZCB3aXRoIGEgd2FybmluZyBpbnN0ZWFkIG9mIGFib3J0aW5nCisJdGhlIGNsb25lLgorKworKk5PVEUqOiBzZWUgdGhlIE5PVEUgZm9yIHRoZSBgLS1zaGFyZWRgIG9wdGlvbiwgYW5kIGFsc28gdGhlCitgLS1kaXNzb2NpYXRlYCBvcHRpb24uCisKKy0tZGlzc29jaWF0ZTo6CisJQm9ycm93IHRoZSBvYmplY3RzIGZyb20gcmVmZXJlbmNlIHJlcG9zaXRvcmllcyBzcGVjaWZpZWQKKwl3aXRoIHRoZSBgLS1yZWZlcmVuY2VgIG9wdGlvbnMgb25seSB0byByZWR1Y2UgbmV0d29yaworCXRyYW5zZmVyLCBhbmQgc3RvcCBib3Jyb3dpbmcgZnJvbSB0aGVtIGFmdGVyIGEgY2xvbmUgaXMgbWFkZQorCWJ5IG1ha2luZyBuZWNlc3NhcnkgbG9jYWwgY29waWVzIG9mIGJvcnJvd2VkIG9iamVjdHMuICBUaGlzCisJb3B0aW9uIGNhbiBhbHNvIGJlIHVzZWQgd2hlbiBjbG9uaW5nIGxvY2FsbHkgZnJvbSBhCisJcmVwb3NpdG9yeSB0aGF0IGFscmVhZHkgYm9ycm93cyBvYmplY3RzIGZyb20gYW5vdGhlcgorCXJlcG9zaXRvcnktLXRoZSBuZXcgcmVwb3NpdG9yeSB3aWxsIGJvcnJvdyBvYmplY3RzIGZyb20gdGhlCisJc2FtZSByZXBvc2l0b3J5LCBhbmQgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3RvcCB0aGUKKwlib3Jyb3dpbmcuCisKKy1xOjoKKy0tcXVpZXQ6OgorCU9wZXJhdGUgcXVpZXRseS4gIFByb2dyZXNzIGlzIG5vdCByZXBvcnRlZCB0byB0aGUgc3RhbmRhcmQKKwllcnJvciBzdHJlYW0uCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUnVuIHZlcmJvc2VseS4gRG9lcyBub3QgYWZmZWN0IHRoZSByZXBvcnRpbmcgb2YgcHJvZ3Jlc3Mgc3RhdHVzCisJdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIGAtLXF1aWV0YAorCWlzIHNwZWNpZmllZC4gVGhpcyBmbGFnIGZvcmNlcyBwcm9ncmVzcyBzdGF0dXMgZXZlbiBpZiB0aGUKKwlzdGFuZGFyZCBlcnJvciBzdHJlYW0gaXMgbm90IGRpcmVjdGVkIHRvIGEgdGVybWluYWwuCisKKy0tc2VydmVyLW9wdGlvbj08b3B0aW9uPjo6CisJVHJhbnNtaXQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgc2VydmVyIHdoZW4gY29tbXVuaWNhdGluZyB1c2luZworCXByb3RvY29sIHZlcnNpb24gMi4gIFRoZSBnaXZlbiBzdHJpbmcgbXVzdCBub3QgY29udGFpbiBhIE5VTCBvciBMRgorCWNoYXJhY3Rlci4gIFRoZSBzZXJ2ZXIncyBoYW5kbGluZyBvZiBzZXJ2ZXIgb3B0aW9ucywgaW5jbHVkaW5nCisJdW5rbm93biBvbmVzLCBpcyBzZXJ2ZXItc3BlY2lmaWMuCisJV2hlbiBtdWx0aXBsZSBgLS1zZXJ2ZXItb3B0aW9uPTxvcHRpb24+YCBhcmUgZ2l2ZW4sIHRoZXkgYXJlIGFsbAorCXNlbnQgdG8gdGhlIG90aGVyIHNpZGUgaW4gdGhlIG9yZGVyIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCistbjo6CistLW5vLWNoZWNrb3V0OjoKKwlObyBjaGVja291dCBvZiBIRUFEIGlzIHBlcmZvcm1lZCBhZnRlciB0aGUgY2xvbmUgaXMgY29tcGxldGUuCisKKy0tYmFyZTo6CisJTWFrZSBhICdiYXJlJyBHaXQgcmVwb3NpdG9yeS4gIFRoYXQgaXMsIGluc3RlYWQgb2YKKwljcmVhdGluZyBgPGRpcmVjdG9yeT5gIGFuZCBwbGFjaW5nIHRoZSBhZG1pbmlzdHJhdGl2ZQorCWZpbGVzIGluIGA8ZGlyZWN0b3J5Pi8uZ2l0YCwgbWFrZSB0aGUgYDxkaXJlY3Rvcnk+YAorCWl0c2VsZiB0aGUgYCRHSVRfRElSYC4gVGhpcyBvYnZpb3VzbHkgaW1wbGllcyB0aGUgYC0tbm8tY2hlY2tvdXRgCisJYmVjYXVzZSB0aGVyZSBpcyBub3doZXJlIHRvIGNoZWNrIG91dCB0aGUgd29ya2luZyB0cmVlLgorCUFsc28gdGhlIGJyYW5jaCBoZWFkcyBhdCB0aGUgcmVtb3RlIGFyZSBjb3BpZWQgZGlyZWN0bHkKKwl0byBjb3JyZXNwb25kaW5nIGxvY2FsIGJyYW5jaCBoZWFkcywgd2l0aG91dCBtYXBwaW5nCisJdGhlbSB0byBgcmVmcy9yZW1vdGVzL29yaWdpbi9gLiAgV2hlbiB0aGlzIG9wdGlvbiBpcworCXVzZWQsIG5laXRoZXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vciB0aGUgcmVsYXRlZAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBjcmVhdGVkLgorCistLXNwYXJzZTo6CisJSW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgc28gdGhlIHdvcmtpbmcKKwlkaXJlY3Rvcnkgc3RhcnRzIHdpdGggb25seSB0aGUgZmlsZXMgaW4gdGhlIHJvb3QKKwlvZiB0aGUgcmVwb3NpdG9yeS4gVGhlIHNwYXJzZS1jaGVja291dCBmaWxlIGNhbiBiZQorCW1vZGlmaWVkIHRvIGdyb3cgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFzIG5lZWRlZC4KKworLS1taXJyb3I6OgorCVNldCB1cCBhIG1pcnJvciBvZiB0aGUgc291cmNlIHJlcG9zaXRvcnkuICBUaGlzIGltcGxpZXMgYC0tYmFyZWAuCisJQ29tcGFyZWQgdG8gYC0tYmFyZWAsIGAtLW1pcnJvcmAgbm90IG9ubHkgbWFwcyBsb2NhbCBicmFuY2hlcyBvZiB0aGUKKwlzb3VyY2UgdG8gbG9jYWwgYnJhbmNoZXMgb2YgdGhlIHRhcmdldCwgaXQgbWFwcyBhbGwgcmVmcyAoaW5jbHVkaW5nCisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCBub3RlcyBldGMuKSBhbmQgc2V0cyB1cCBhIHJlZnNwZWMgY29uZmlndXJhdGlvbiBzdWNoCisJdGhhdCBhbGwgdGhlc2UgcmVmcyBhcmUgb3ZlcndyaXR0ZW4gYnkgYSBgZ2l0IHJlbW90ZSB1cGRhdGVgIGluIHRoZQorCXRhcmdldCByZXBvc2l0b3J5LgorCistbyA8bmFtZT46OgorLS1vcmlnaW4gPG5hbWU+OjoKKwlJbnN0ZWFkIG9mIHVzaW5nIHRoZSByZW1vdGUgbmFtZSBgb3JpZ2luYCB0byBrZWVwIHRyYWNrCisJb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksIHVzZSBgPG5hbWU+YC4KKworLWIgPG5hbWU+OjoKKy0tYnJhbmNoIDxuYW1lPjo6CisJSW5zdGVhZCBvZiBwb2ludGluZyB0aGUgbmV3bHkgY3JlYXRlZCBIRUFEIHRvIHRoZSBicmFuY2ggcG9pbnRlZAorCXRvIGJ5IHRoZSBjbG9uZWQgcmVwb3NpdG9yeSdzIEhFQUQsIHBvaW50IHRvIGA8bmFtZT5gIGJyYW5jaAorCWluc3RlYWQuIEluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeSwgdGhpcyBpcyB0aGUgYnJhbmNoIHRoYXQgd2lsbAorCWJlIGNoZWNrZWQgb3V0LgorCWAtLWJyYW5jaGAgY2FuIGFsc28gdGFrZSB0YWdzIGFuZCBkZXRhY2hlcyB0aGUgSEVBRCBhdCB0aGF0IGNvbW1pdAorCWluIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeS4KKworLXUgPHVwbG9hZC1wYWNrPjo6CistLXVwbG9hZC1wYWNrIDx1cGxvYWQtcGFjaz46OgorCVdoZW4gZ2l2ZW4sIGFuZCB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tIGlzIGFjY2Vzc2VkCisJdmlhIHNzaCwgdGhpcyBzcGVjaWZpZXMgYSBub24tZGVmYXVsdCBwYXRoIGZvciB0aGUgY29tbWFuZAorCXJ1biBvbiB0aGUgb3RoZXIgZW5kLgorCistLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKKwlTcGVjaWZ5IHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkOworCShTZWUgdGhlICJURU1QTEFURSBESVJFQ1RPUlkiIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtaW5pdFsxXS4pCisKKy1jIDxrZXk+PTx2YWx1ZT46OgorLS1jb25maWcgPGtleT49PHZhbHVlPjo6CisJU2V0IGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiB0aGUgbmV3bHktY3JlYXRlZCByZXBvc2l0b3J5OworCXRoaXMgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZXBvc2l0b3J5IGlzCisJaW5pdGlhbGl6ZWQsIGJ1dCBiZWZvcmUgdGhlIHJlbW90ZSBoaXN0b3J5IGlzIGZldGNoZWQgb3IgYW55CisJZmlsZXMgY2hlY2tlZCBvdXQuICBUaGUga2V5IGlzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBleHBlY3RlZCBieQorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSAoZS5nLiwgYGNvcmUuZW9sPXRydWVgKS4gSWYgbXVsdGlwbGUKKwl2YWx1ZXMgYXJlIGdpdmVuIGZvciB0aGUgc2FtZSBrZXksIGVhY2ggdmFsdWUgd2lsbCBiZSB3cml0dGVuIHRvCisJdGhlIGNvbmZpZyBmaWxlLiBUaGlzIG1ha2VzIGl0IHNhZmUsIGZvciBleGFtcGxlLCB0byBhZGQKKwlhZGRpdGlvbmFsIGZldGNoIHJlZnNwZWNzIHRvIHRoZSBvcmlnaW4gcmVtb3RlLgorKworRHVlIHRvIGxpbWl0YXRpb25zIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBzb21lIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlcyBkbyBub3QgdGFrZSBlZmZlY3QgdW50aWwgYWZ0ZXIgdGhlIGluaXRpYWwgZmV0Y2ggYW5kIGNoZWNrb3V0LgorQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMga25vd24gdG8gbm90IHRha2UgZWZmZWN0IGFyZToKK2ByZW1vdGUuPG5hbWU+Lm1pcnJvcmAgYW5kIGByZW1vdGUuPG5hbWU+LnRhZ09wdGAuICBVc2UgdGhlCitjb3JyZXNwb25kaW5nIGAtLW1pcnJvcmAgYW5kIGAtLW5vLXRhZ3NgIG9wdGlvbnMgaW5zdGVhZC4KKworLS1kZXB0aCA8ZGVwdGg+OjoKKwlDcmVhdGUgYSAnc2hhbGxvdycgY2xvbmUgd2l0aCBhIGhpc3RvcnkgdHJ1bmNhdGVkIHRvIHRoZQorCXNwZWNpZmllZCBudW1iZXIgb2YgY29tbWl0cy4gSW1wbGllcyBgLS1zaW5nbGUtYnJhbmNoYCB1bmxlc3MKKwlgLS1uby1zaW5nbGUtYnJhbmNoYCBpcyBnaXZlbiB0byBmZXRjaCB0aGUgaGlzdG9yaWVzIG5lYXIgdGhlCisJdGlwcyBvZiBhbGwgYnJhbmNoZXMuIElmIHlvdSB3YW50IHRvIGNsb25lIHN1Ym1vZHVsZXMgc2hhbGxvd2x5LAorCWFsc28gcGFzcyBgLS1zaGFsbG93LXN1Ym1vZHVsZXNgLgorCistLXNoYWxsb3ctc2luY2U9PGRhdGU+OjoKKwlDcmVhdGUgYSBzaGFsbG93IGNsb25lIHdpdGggYSBoaXN0b3J5IGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZS4KKworLS1zaGFsbG93LWV4Y2x1ZGU9PHJldmlzaW9uPjo6CisJQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB3aXRoIGEgaGlzdG9yeSwgZXhjbHVkaW5nIGNvbW1pdHMKKwlyZWFjaGFibGUgZnJvbSBhIHNwZWNpZmllZCByZW1vdGUgYnJhbmNoIG9yIHRhZy4gIFRoaXMgb3B0aW9uCisJY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworLS1bbm8tXXNpbmdsZS1icmFuY2g6OgorCUNsb25lIG9ubHkgdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgdGlwIG9mIGEgc2luZ2xlIGJyYW5jaCwKKwllaXRoZXIgc3BlY2lmaWVkIGJ5IHRoZSBgLS1icmFuY2hgIG9wdGlvbiBvciB0aGUgcHJpbWFyeQorCWJyYW5jaCByZW1vdGUncyBgSEVBRGAgcG9pbnRzIGF0LgorCUZ1cnRoZXIgZmV0Y2hlcyBpbnRvIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeSB3aWxsIG9ubHkgdXBkYXRlIHRoZQorCXJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yIHRoZSBicmFuY2ggdGhpcyBvcHRpb24gd2FzIHVzZWQgZm9yIHRoZQorCWluaXRpYWwgY2xvbmluZy4gIElmIHRoZSBIRUFEIGF0IHRoZSByZW1vdGUgZGlkIG5vdCBwb2ludCBhdCBhbnkKKwlicmFuY2ggd2hlbiBgLS1zaW5nbGUtYnJhbmNoYCBjbG9uZSB3YXMgbWFkZSwgbm8gcmVtb3RlLXRyYWNraW5nCisJYnJhbmNoIGlzIGNyZWF0ZWQuCisKKy0tbm8tdGFnczo6CisJRG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBzZXQKKwlgcmVtb3RlLjxyZW1vdGU+LnRhZ09wdD0tLW5vLXRhZ3NgIGluIHRoZSBjb25maWcsIGVuc3VyaW5nCisJdGhhdCBmdXR1cmUgYGdpdCBwdWxsYCBhbmQgYGdpdCBmZXRjaGAgb3BlcmF0aW9ucyB3b24ndCBmb2xsb3cKKwlhbnkgdGFncy4gU3Vic2VxdWVudCBleHBsaWNpdCB0YWcgZmV0Y2hlcyB3aWxsIHN0aWxsIHdvcmssCisJKHNlZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXSkuCisrCitDYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGAtLXNpbmdsZS1icmFuY2hgIHRvIGNsb25lIGFuZAorbWFpbnRhaW4gYSBicmFuY2ggd2l0aCBubyByZWZlcmVuY2VzIG90aGVyIHRoYW4gYSBzaW5nbGUgY2xvbmVkCiticmFuY2guIFRoaXMgaXMgdXNlZnVsIGUuZy4gdG8gbWFpbnRhaW4gbWluaW1hbCBjbG9uZXMgb2YgdGhlIGRlZmF1bHQKK2JyYW5jaCBvZiBzb21lIHJlcG9zaXRvcnkgZm9yIHNlYXJjaCBpbmRleGluZy4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXNbPTxwYXRoc3BlY106OgorCUFmdGVyIHRoZSBjbG9uZSBpcyBjcmVhdGVkLCBpbml0aWFsaXplIGFuZCBjbG9uZSBzdWJtb2R1bGVzCisJd2l0aGluIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXRoc3BlYy4gIElmIG5vIHBhdGhzcGVjIGlzCisJcHJvdmlkZWQsIGFsbCBzdWJtb2R1bGVzIGFyZSBpbml0aWFsaXplZCBhbmQgY2xvbmVkLgorCVRoaXMgb3B0aW9uIGNhbiBiZSBnaXZlbiBtdWx0aXBsZSB0aW1lcyBmb3IgcGF0aHNwZWNzIGNvbnNpc3RpbmcKKwlvZiBtdWx0aXBsZSBlbnRyaWVzLiAgVGhlIHJlc3VsdGluZyBjbG9uZSBoYXMgYHN1Ym1vZHVsZS5hY3RpdmVgIHNldCB0bworCXRoZSBwcm92aWRlZCBwYXRoc3BlYywgb3IgIi4iIChtZWFuaW5nIGFsbCBzdWJtb2R1bGVzKSBpZiBubworCXBhdGhzcGVjIGlzIHByb3ZpZGVkLgorKworU3VibW9kdWxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGNsb25lZCB1c2luZyB0aGVpciBkZWZhdWx0IHNldHRpbmdzLiBUaGlzIGlzCitlcXVpdmFsZW50IHRvIHJ1bm5pbmcKK2BnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgPHBhdGhzcGVjPmAgaW1tZWRpYXRlbHkgYWZ0ZXIKK3RoZSBjbG9uZSBpcyBmaW5pc2hlZC4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgZG9lcworbm90IGhhdmUgYSB3b3JrdHJlZS9jaGVja291dCAoaS5lLiBpZiBhbnkgb2YgYC0tbm8tY2hlY2tvdXRgL2AtbmAsIGAtLWJhcmVgLAorb3IgYC0tbWlycm9yYCBpcyBnaXZlbikKKworLS1bbm8tXXNoYWxsb3ctc3VibW9kdWxlczo6CisJQWxsIHN1Ym1vZHVsZXMgd2hpY2ggYXJlIGNsb25lZCB3aWxsIGJlIHNoYWxsb3cgd2l0aCBhIGRlcHRoIG9mIDEuCisKKy0tW25vLV1yZW1vdGUtc3VibW9kdWxlczo6CisJQWxsIHN1Ym1vZHVsZXMgd2hpY2ggYXJlIGNsb25lZCB3aWxsIHVzZSB0aGUgc3RhdHVzIG9mIHRoZSBzdWJtb2R1bGUncworCXJlbW90ZS10cmFja2luZyBicmFuY2ggdG8gdXBkYXRlIHRoZSBzdWJtb2R1bGUsIHJhdGhlciB0aGFuIHRoZQorCXN1cGVycHJvamVjdCdzIHJlY29yZGVkIFNIQS0xLiBFcXVpdmFsZW50IHRvIHBhc3NpbmcgYC0tcmVtb3RlYCB0bworCWBnaXQgc3VibW9kdWxlIHVwZGF0ZWAuCisKKy0tc2VwYXJhdGUtZ2l0LWRpcj08Z2l0IGRpcj46OgorCUluc3RlYWQgb2YgcGxhY2luZyB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgd2hlcmUgaXQgaXMgc3VwcG9zZWQKKwl0byBiZSwgcGxhY2UgdGhlIGNsb25lZCByZXBvc2l0b3J5IGF0IHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LAorCXRoZW4gbWFrZSBhIGZpbGVzeXN0ZW0tYWdub3N0aWMgR2l0IHN5bWJvbGljIGxpbmsgdG8gdGhlcmUuCisJVGhlIHJlc3VsdCBpcyBHaXQgcmVwb3NpdG9yeSBjYW4gYmUgc2VwYXJhdGVkIGZyb20gd29ya2luZworCXRyZWUuCisKKy1qIDxuPjo6CistLWpvYnMgPG4+OjoKKwlUaGUgbnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBhdCB0aGUgc2FtZSB0aW1lLgorCURlZmF1bHRzIHRvIHRoZSBgc3VibW9kdWxlLmZldGNoSm9ic2Agb3B0aW9uLgorCis8cmVwb3NpdG9yeT46OgorCVRoZSAocG9zc2libHkgcmVtb3RlKSByZXBvc2l0b3J5IHRvIGNsb25lIGZyb20uICBTZWUgdGhlCisJPDxVUkxTLEdJVCBVUkxTPj4gc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzcGVjaWZ5aW5nCisJcmVwb3NpdG9yaWVzLgorCis8ZGlyZWN0b3J5Pjo6CisJVGhlIG5hbWUgb2YgYSBuZXcgZGlyZWN0b3J5IHRvIGNsb25lIGludG8uICBUaGUgImh1bWFuaXNoIgorCXBhcnQgb2YgdGhlIHNvdXJjZSByZXBvc2l0b3J5IGlzIHVzZWQgaWYgbm8gZGlyZWN0b3J5IGlzCisJZXhwbGljaXRseSBnaXZlbiAoYHJlcG9gIGZvciBgL3BhdGgvdG8vcmVwby5naXRgIGFuZCBgZm9vYAorCWZvciBgaG9zdC54ejpmb28vLmdpdGApLiAgQ2xvbmluZyBpbnRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeQorCWlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LgorCis6Z2l0LWNsb25lOiAxCitpbmNsdWRlOjp1cmxzLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIENsb25lIGZyb20gdXBzdHJlYW06CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LmdpdCBteS1saW51eAorJCBjZCBteS1saW51eAorJCBtYWtlCistLS0tLS0tLS0tLS0KKworCisqIE1ha2UgYSBsb2NhbCBjbG9uZSB0aGF0IGJvcnJvd3MgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdpdGhvdXQgY2hlY2tpbmcgdGhpbmdzIG91dDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgLWwgLXMgLW4gLiAuLi9jb3B5CiskIGNkIC4uL2NvcHkKKyQgZ2l0IHNob3ctYnJhbmNoCistLS0tLS0tLS0tLS0KKworCisqIENsb25lIGZyb20gdXBzdHJlYW0gd2hpbGUgYm9ycm93aW5nIGZyb20gYW4gZXhpc3RpbmcgbG9jYWwgZGlyZWN0b3J5OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSAtLXJlZmVyZW5jZSAvZ2l0L2xpbnV4LmdpdCBcCisJZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS8uLi4vbGludXguZ2l0IFwKKwlteS1saW51eAorJCBjZCBteS1saW51eAorLS0tLS0tLS0tLS0tCisKKworKiBDcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkgdG8gcHVibGlzaCB5b3VyIGNoYW5nZXMgdG8gdGhlIHB1YmxpYzoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgLS1iYXJlIC1sIC9ob21lL3Byb2ovLmdpdCAvcHViL3NjbS9wcm9qLmdpdAorLS0tLS0tLS0tLS0tCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb2x1bW4udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29sdW1uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNThlOWM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29sdW1uLnR4dApAQCAtMCwwICsxLDc5IEBACitnaXQtY29sdW1uKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jb2x1bW4gLSBEaXNwbGF5IGRhdGEgaW4gY29sdW1ucworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY29sdW1uJyBbLS1jb21tYW5kPTxuYW1lPl0gWy0tW3Jhdy1dbW9kZT08bW9kZT5dIFstLXdpZHRoPTx3aWR0aD5dCisJICAgICBbLS1pbmRlbnQ9PHN0cmluZz5dIFstLW5sPTxzdHJpbmc+XSBbLS1wYWRkaW5nPTxuPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgZm9ybWF0cyB0aGUgbGluZXMgb2YgaXRzIHN0YW5kYXJkIGlucHV0IGludG8gYSB0YWJsZSB3aXRoCittdWx0aXBsZSBjb2x1bW5zLiBFYWNoIGlucHV0IGxpbmUgb2NjdXBpZXMgb25lIGNlbGwgb2YgdGhlIHRhYmxlLiBJdAoraXMgdXNlZCBpbnRlcm5hbGx5IGJ5IG90aGVyIGdpdCBjb21tYW5kcyB0byBmb3JtYXQgb3V0cHV0IGludG8KK2NvbHVtbnMuCisKK09QVElPTlMKKy0tLS0tLS0KKy0tY29tbWFuZD08bmFtZT46OgorCUxvb2sgdXAgbGF5b3V0IG1vZGUgdXNpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb2x1bW4uPG5hbWU+IGFuZAorCWNvbHVtbi51aS4KKworLS1tb2RlPTxtb2RlPjo6CisJU3BlY2lmeSBsYXlvdXQgbW9kZS4gU2VlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29sdW1uLnVpIGZvciBvcHRpb24KKwlzeW50YXggaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCistLXJhdy1tb2RlPTxuPjo6CisJU2FtZSBhcyAtLW1vZGUgYnV0IHRha2UgbW9kZSBlbmNvZGVkIGFzIGEgbnVtYmVyLiBUaGlzIGlzIG1haW5seSB1c2VkCisJYnkgb3RoZXIgY29tbWFuZHMgdGhhdCBoYXZlIGFscmVhZHkgcGFyc2VkIGxheW91dCBtb2RlLgorCistLXdpZHRoPTx3aWR0aD46OgorCVNwZWNpZnkgdGhlIHRlcm1pbmFsIHdpZHRoLiBCeSBkZWZhdWx0ICdnaXQgY29sdW1uJyB3aWxsIGRldGVjdCB0aGUKKwl0ZXJtaW5hbCB3aWR0aCwgb3IgZmFsbCBiYWNrIHRvIDgwIGlmIGl0IGlzIHVuYWJsZSB0byBkbyBzby4KKworLS1pbmRlbnQ9PHN0cmluZz46OgorCVN0cmluZyB0byBiZSBwcmludGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lLgorCistLW5sPTxOPjo6CisJU3RyaW5nIHRvIGJlIHByaW50ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUsCisJaW5jbHVkaW5nIG5ld2xpbmUgY2hhcmFjdGVyLgorCistLXBhZGRpbmc9PE4+OjoKKwlUaGUgbnVtYmVyIG9mIHNwYWNlcyBiZXR3ZWVuIGNvbHVtbnMuIE9uZSBzcGFjZSBieSBkZWZhdWx0LgorCitFWEFNUExFUworLS0tLS0tLS0KKworRm9ybWF0IGRhdGEgYnkgY29sdW1uczoKKy0tLS0tLS0tLS0tLQorJCBzZXEgMSAyNCB8IGdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiAtLXBhZGRpbmc9NQorMSAgICAgIDQgICAgICA3ICAgICAgMTAgICAgIDEzICAgICAxNiAgICAgMTkgICAgIDIyCisyICAgICAgNSAgICAgIDggICAgICAxMSAgICAgMTQgICAgIDE3ICAgICAyMCAgICAgMjMKKzMgICAgICA2ICAgICAgOSAgICAgIDEyICAgICAxNSAgICAgMTggICAgIDIxICAgICAyNAorLS0tLS0tLS0tLS0tCisKK0Zvcm1hdCBkYXRhIGJ5IHJvd3M6CistLS0tLS0tLS0tLS0KKyQgc2VxIDEgMjEgfCBnaXQgY29sdW1uIC0tbW9kZT1yb3cgLS1wYWRkaW5nPTUKKzEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKKzggICAgICA5ICAgICAgMTAgICAgIDExICAgICAxMiAgICAgMTMgICAgIDE0CisxNSAgICAgMTYgICAgIDE3ICAgICAxOCAgICAgMTkgICAgIDIwICAgICAyMQorLS0tLS0tLS0tLS0tCisKK0xpc3Qgc29tZSB0YWdzIGluIGEgdGFibGUgd2l0aCB1bmVxdWFsIGNvbHVtbiB3aWR0aHM6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHRhZyAtLWxpc3QgJ3YyLjQuKicgLS1jb2x1bW49cm93LGRlbnNlCit2Mi40LjAgIHYyLjQuMC1yYzAgIHYyLjQuMC1yYzEgIHYyLjQuMC1yYzIgIHYyLjQuMC1yYzMKK3YyLjQuMSAgdjIuNC4xMCAgICAgdjIuNC4xMSAgICAgdjIuNC4xMiAgICAgdjIuNC4yCit2Mi40LjMgIHYyLjQuNCAgICAgIHYyLjQuNSAgICAgIHYyLjQuNiAgICAgIHYyLjQuNwordjIuNC44ICB2Mi40LjkKKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtZ3JhcGgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDFmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtZ3JhcGgudHh0CkBAIC0wLDAgKzEsMTIxIEBACitnaXQtY29tbWl0LWdyYXBoKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jb21taXQtZ3JhcGggLSBXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY29tbWl0LWdyYXBoIHZlcmlmeScgWy0tb2JqZWN0LWRpciA8ZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10KKydnaXQgY29tbWl0LWdyYXBoIHdyaXRlJyA8b3B0aW9ucz4gWy0tb2JqZWN0LWRpciA8ZGlyPl0gWy0tW25vLV1wcm9ncmVzc10KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTWFuYWdlIHRoZSBzZXJpYWxpemVkIGNvbW1pdC1ncmFwaCBmaWxlLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tb2JqZWN0LWRpcjo6CisJVXNlIGdpdmVuIGRpcmVjdG9yeSBmb3IgdGhlIGxvY2F0aW9uIG9mIHBhY2tmaWxlcyBhbmQgY29tbWl0LWdyYXBoCisJZmlsZS4gVGhpcyBwYXJhbWV0ZXIgZXhpc3RzIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIGFuIGFsdGVybmF0ZQorCXRoYXQgb25seSBoYXMgdGhlIG9iamVjdHMgZGlyZWN0b3J5LCBub3QgYSBmdWxsIGAuZ2l0YCBkaXJlY3RvcnkuIFRoZQorCWNvbW1pdC1ncmFwaCBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBgPGRpcj4vaW5mb2AgZGlyZWN0b3J5IGFuZAorCXRoZSBwYWNrZmlsZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGluIGA8ZGlyPi9wYWNrYC4gSWYgdGhlIGRpcmVjdG9yeQorCWNvdWxkIG5vdCBiZSBtYWRlIGludG8gYW4gYWJzb2x1dGUgcGF0aCwgb3IgZG9lcyBub3QgbWF0Y2ggYW55IGtub3duCisJb2JqZWN0IGRpcmVjdG9yeSwgYGdpdCBjb21taXQtZ3JhcGggLi4uYCB3aWxsIGV4aXQgd2l0aCBub24temVybworCXN0YXR1cy4KKworLS1bbm8tXXByb2dyZXNzOjoKKwlUdXJuIHByb2dyZXNzIG9uL29mZiBleHBsaWNpdGx5LiBJZiBuZWl0aGVyIGlzIHNwZWNpZmllZCwgcHJvZ3Jlc3MgaXMKKwlzaG93biBpZiBzdGFuZGFyZCBlcnJvciBpcyBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworQ09NTUFORFMKKy0tLS0tLS0tCisnd3JpdGUnOjoKKworV3JpdGUgYSBjb21taXQtZ3JhcGggZmlsZSBiYXNlZCBvbiB0aGUgY29tbWl0cyBmb3VuZCBpbiBwYWNrZmlsZXMuCisrCitXaXRoIHRoZSBgLS1zdGRpbi1wYWNrc2Agb3B0aW9uLCBnZW5lcmF0ZSB0aGUgbmV3IGNvbW1pdCBncmFwaCBieQord2Fsa2luZyBvYmplY3RzIG9ubHkgaW4gdGhlIHNwZWNpZmllZCBwYWNrLWluZGV4ZXMuIChDYW5ub3QgYmUgY29tYmluZWQKK3dpdGggYC0tc3RkaW4tY29tbWl0c2Agb3IgYC0tcmVhY2hhYmxlYC4pCisrCitXaXRoIHRoZSBgLS1zdGRpbi1jb21taXRzYCBvcHRpb24sIGdlbmVyYXRlIHRoZSBuZXcgY29tbWl0IGdyYXBoIGJ5Cit3YWxraW5nIGNvbW1pdHMgc3RhcnRpbmcgYXQgdGhlIGNvbW1pdHMgc3BlY2lmaWVkIGluIHN0ZGluIGFzIGEgbGlzdAorb2YgT0lEcyBpbiBoZXgsIG9uZSBPSUQgcGVyIGxpbmUuIChDYW5ub3QgYmUgY29tYmluZWQgd2l0aAorYC0tc3RkaW4tcGFja3NgIG9yIGAtLXJlYWNoYWJsZWAuKQorKworV2l0aCB0aGUgYC0tcmVhY2hhYmxlYCBvcHRpb24sIGdlbmVyYXRlIHRoZSBuZXcgY29tbWl0IGdyYXBoIGJ5IHdhbGtpbmcKK2NvbW1pdHMgc3RhcnRpbmcgYXQgYWxsIHJlZnMuIChDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1zdGRpbi1jb21taXRzYAorb3IgYC0tc3RkaW4tcGFja3NgLikKKysKK1dpdGggdGhlIGAtLWFwcGVuZGAgb3B0aW9uLCBpbmNsdWRlIGFsbCBjb21taXRzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlCitleGlzdGluZyBjb21taXQtZ3JhcGggZmlsZS4KKysKK1dpdGggdGhlIGAtLXNwbGl0YCBvcHRpb24sIHdyaXRlIHRoZSBjb21taXQtZ3JhcGggYXMgYSBjaGFpbiBvZiBtdWx0aXBsZQorY29tbWl0LWdyYXBoIGZpbGVzIHN0b3JlZCBpbiBgPGRpcj4vaW5mby9jb21taXQtZ3JhcGhzYC4gVGhlIG5ldyBjb21taXRzCitub3QgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGFyZSBhZGRlZCBpbiBhIG5ldyAidGlwIiBmaWxlLiBUaGlzIGZpbGUKK2lzIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBmaWxlIGlmIHRoZSBmb2xsb3dpbmcgbWVyZ2UgY29uZGl0aW9ucyBhcmUKK21ldDoKKysKKyogSWYgYC0tc2l6ZS1tdWx0aXBsZT08WD5gIGlzIG5vdCBzcGVjaWZpZWQsIGxldCBgWGAgZXF1YWwgMi4gSWYgdGhlIG5ldwordGlwIGZpbGUgd291bGQgaGF2ZSBgTmAgY29tbWl0cyBhbmQgdGhlIHByZXZpb3VzIHRpcCBoYXMgYE1gIGNvbW1pdHMgYW5kCitgWGAgdGltZXMgYE5gIGlzIGdyZWF0ZXIgdGhhbiAgYE1gLCBpbnN0ZWFkIG1lcmdlIHRoZSB0d28gZmlsZXMgaW50byBhCitzaW5nbGUgZmlsZS4KKysKKyogSWYgYC0tbWF4LWNvbW1pdHM9PE0+YCBpcyBzcGVjaWZpZWQgd2l0aCBgTWAgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBhbmQgdGhlCituZXcgdGlwIGZpbGUgd291bGQgaGF2ZSBtb3JlIHRoYW4gYE1gIGNvbW1pdHMsIHRoZW4gaW5zdGVhZCBtZXJnZSB0aGUgbmV3Cit0aXAgd2l0aCB0aGUgcHJldmlvdXMgdGlwLgorKworRmluYWxseSwgaWYgYC0tZXhwaXJlLXRpbWU9PGRhdGV0aW1lPmAgaXMgbm90IHNwZWNpZmllZCwgbGV0IGBkYXRldGltZWAKK2JlIHRoZSBjdXJyZW50IHRpbWUuIEFmdGVyIHdyaXRpbmcgdGhlIHNwbGl0IGNvbW1pdC1ncmFwaCwgZGVsZXRlIGFsbAordW51c2VkIGNvbW1pdC1ncmFwaCB3aG9zZSBtb2RpZmllZCB0aW1lcyBhcmUgb2xkZXIgdGhhbiBgZGF0ZXRpbWVgLgorCisndmVyaWZ5Jzo6CisKK1JlYWQgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIGFuZCB2ZXJpZnkgaXRzIGNvbnRlbnRzIGFnYWluc3QgdGhlIG9iamVjdAorZGF0YWJhc2UuIFVzZWQgdG8gY2hlY2sgZm9yIGNvcnJ1cHRlZCBkYXRhLgorKworV2l0aCB0aGUgYC0tc2hhbGxvd2Agb3B0aW9uLCBvbmx5IGNoZWNrIHRoZSB0aXAgY29tbWl0LWdyYXBoIGZpbGUgaW4KK2EgY2hhaW4gb2Ygc3BsaXQgY29tbWl0LWdyYXBocy4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBXcml0ZSBhIGNvbW1pdC1ncmFwaCBmaWxlIGZvciB0aGUgcGFja2VkIGNvbW1pdHMgaW4geW91ciBsb2NhbCBgLmdpdGAKKyAgZGlyZWN0b3J5LgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQtZ3JhcGggd3JpdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFdyaXRlIGEgY29tbWl0LWdyYXBoIGZpbGUsIGV4dGVuZGluZyB0aGUgY3VycmVudCBjb21taXQtZ3JhcGggZmlsZQorICB1c2luZyBjb21taXRzIGluIGA8cGFjay1pbmRleD5gLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gPHBhY2staW5kZXg+IHwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLXBhY2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBXcml0ZSBhIGNvbW1pdC1ncmFwaCBmaWxlIGNvbnRhaW5pbmcgYWxsIHJlYWNoYWJsZSBjb21taXRzLgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LXJlZiAtcyB8IGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1jb21taXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBXcml0ZSBhIGNvbW1pdC1ncmFwaCBmaWxlIGNvbnRhaW5pbmcgYWxsIGNvbW1pdHMgaW4gdGhlIGN1cnJlbnQKKyAgY29tbWl0LWdyYXBoIGZpbGUgYWxvbmcgd2l0aCB0aG9zZSByZWFjaGFibGUgZnJvbSBgSEVBRGAuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1wYXJzZSBIRUFEIHwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMgLS1hcHBlbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTVlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKQEAgLTAsMCArMSwxMDMgQEAKK2dpdC1jb21taXQtdHJlZSgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jb21taXQtdHJlZSAtIENyZWF0ZSBhIG5ldyBjb21taXQgb2JqZWN0CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNvbW1pdC10cmVlJyA8dHJlZT4gWygtcCA8cGFyZW50PikuLi5dCisnZ2l0IGNvbW1pdC10cmVlJyBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dCisJCSAgWygtRiA8ZmlsZT4pLi4uXSA8dHJlZT4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgaXMgdXN1YWxseSBub3Qgd2hhdCBhbiBlbmQgdXNlciB3YW50cyB0byBydW4gZGlyZWN0bHkuICBTZWUKK2xpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBpbnN0ZWFkLgorCitDcmVhdGVzIGEgbmV3IGNvbW1pdCBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRyZWUgb2JqZWN0IGFuZAorZW1pdHMgdGhlIG5ldyBjb21taXQgb2JqZWN0IGlkIG9uIHN0ZG91dC4gVGhlIGxvZyBtZXNzYWdlIGlzIHJlYWQKK2Zyb20gdGhlIHN0YW5kYXJkIGlucHV0LCB1bmxlc3MgYC1tYCBvciBgLUZgIG9wdGlvbnMgYXJlIGdpdmVuLgorCitUaGUgYC1tYCBhbmQgYC1GYCBvcHRpb25zIGNhbiBiZSBnaXZlbiBhbnkgbnVtYmVyIG9mIHRpbWVzLCBpbiBhbnkKK29yZGVyLiBUaGUgY29tbWl0IGxvZyBtZXNzYWdlIHdpbGwgYmUgY29tcG9zZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoCit0aGUgb3B0aW9ucyBhcmUgZ2l2ZW4uCisKK0EgY29tbWl0IG9iamVjdCBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIHBhcmVudHMuIFdpdGggZXhhY3RseSBvbmUKK3BhcmVudCwgaXQgaXMgYW4gb3JkaW5hcnkgY29tbWl0LiBIYXZpbmcgbW9yZSB0aGFuIG9uZSBwYXJlbnQgbWFrZXMKK3RoZSBjb21taXQgYSBtZXJnZSBiZXR3ZWVuIHNldmVyYWwgbGluZXMgb2YgaGlzdG9yeS4gSW5pdGlhbCAocm9vdCkKK2NvbW1pdHMgaGF2ZSBubyBwYXJlbnRzLgorCitXaGlsZSBhIHRyZWUgcmVwcmVzZW50cyBhIHBhcnRpY3VsYXIgZGlyZWN0b3J5IHN0YXRlIG9mIGEgd29ya2luZworZGlyZWN0b3J5LCBhIGNvbW1pdCByZXByZXNlbnRzIHRoYXQgc3RhdGUgaW4gInRpbWUiLCBhbmQgZXhwbGFpbnMgaG93Cit0byBnZXQgdGhlcmUuCisKK05vcm1hbGx5IGEgY29tbWl0IHdvdWxkIGlkZW50aWZ5IGEgbmV3ICJIRUFEIiBzdGF0ZSwgYW5kIHdoaWxlIEdpdAorZG9lc24ndCBjYXJlIHdoZXJlIHlvdSBzYXZlIHRoZSBub3RlIGFib3V0IHRoYXQgc3RhdGUsIGluIHByYWN0aWNlIHdlCit0ZW5kIHRvIGp1c3Qgd3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgZmlsZSB0aGF0IGlzIHBvaW50ZWQgYXQgYnkKK2AuZ2l0L0hFQURgLCBzbyB0aGF0IHdlIGNhbiBhbHdheXMgc2VlIHdoYXQgdGhlIGxhc3QgY29tbWl0dGVkCitzdGF0ZSB3YXMuCisKK09QVElPTlMKKy0tLS0tLS0KKzx0cmVlPjo6CisJQW4gZXhpc3RpbmcgdHJlZSBvYmplY3QuCisKKy1wIDxwYXJlbnQ+OjoKKwlFYWNoIGAtcGAgaW5kaWNhdGVzIHRoZSBpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0LgorCistbSA8bWVzc2FnZT46OgorCUEgcGFyYWdyYXBoIGluIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuIFRoaXMgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbgorCW9uY2UgYW5kIGVhY2ggPG1lc3NhZ2U+IGJlY29tZXMgaXRzIG93biBwYXJhZ3JhcGguCisKKy1GIDxmaWxlPjo6CisJUmVhZCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuIFVzZSBgLWAgdG8gcmVhZAorCWZyb20gdGhlIHN0YW5kYXJkIGlucHV0LiBUaGlzIGNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZSBhbmQgdGhlCisJY29udGVudCBvZiBlYWNoIGZpbGUgYmVjb21lcyBpdHMgb3duIHBhcmFncmFwaC4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIGNvbW1pdHMuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZAorCWRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorCXN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistLW5vLWdwZy1zaWduOjoKKwlEbyBub3QgR1BHLXNpZ24gY29tbWl0LCB0byBjb3VudGVybWFuZCBhIGAtLWdwZy1zaWduYCBvcHRpb24KKwlnaXZlbiBlYXJsaWVyIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKK0NvbW1pdCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgY29tbWl0IGVuY2Fwc3VsYXRlczoKKworLSBhbGwgcGFyZW50IG9iamVjdCBpZHMKKy0gYXV0aG9yIG5hbWUsIGVtYWlsIGFuZCBkYXRlCistIGNvbW1pdHRlciBuYW1lIGFuZCBlbWFpbCBhbmQgdGhlIGNvbW1pdCB0aW1lLgorCitBIGNvbW1pdCBjb21tZW50IGlzIHJlYWQgZnJvbSBzdGRpbi4gSWYgYSBjaGFuZ2Vsb2cKK2VudHJ5IGlzIG5vdCBwcm92aWRlZCB2aWEgIjwiIHJlZGlyZWN0aW9uLCAnZ2l0IGNvbW1pdC10cmVlJyB3aWxsIGp1c3Qgd2FpdAorZm9yIG9uZSB0byBiZSBlbnRlcmVkIGFuZCB0ZXJtaW5hdGVkIHdpdGggXkQuCisKK2luY2x1ZGU6OmRhdGUtZm9ybWF0cy50eHRbXQorCitEaXNjdXNzaW9uCistLS0tLS0tLS0tCisKK2luY2x1ZGU6OmkxOG4udHh0W10KKworRklMRVMKKy0tLS0tCisvZXRjL21haWxuYW1lCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtd3JpdGUtdHJlZVsxXQorbGlua2dpdDpnaXQtY29tbWl0WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmNjUzOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKQEAgLTAsMCArMSw1NDcgQEAKK2dpdC1jb21taXQoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbW1pdCAtIFJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb21taXQnIFstYSB8IC0taW50ZXJhY3RpdmUgfCAtLXBhdGNoXSBbLXNdIFstdl0gWy11PG1vZGU+XSBbLS1hbWVuZF0KKwkgICBbLS1kcnktcnVuXSBbKC1jIHwgLUMgfCAtLWZpeHVwIHwgLS1zcXVhc2gpIDxjb21taXQ+XQorCSAgIFstRiA8ZmlsZT4gfCAtbSA8bXNnPl0gWy0tcmVzZXQtYXV0aG9yXSBbLS1hbGxvdy1lbXB0eV0KKwkgICBbLS1hbGxvdy1lbXB0eS1tZXNzYWdlXSBbLS1uby12ZXJpZnldIFstZV0gWy0tYXV0aG9yPTxhdXRob3I+XQorCSAgIFstLWRhdGU9PGRhdGU+XSBbLS1jbGVhbnVwPTxtb2RlPl0gWy0tW25vLV1zdGF0dXNdCisJICAgWy1pIHwgLW9dIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXQorCSAgIFstU1s8a2V5aWQ+XV0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDcmVhdGUgYSBuZXcgY29tbWl0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGluZGV4IGFuZAordGhlIGdpdmVuIGxvZyBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGNoYW5nZXMuIFRoZSBuZXcgY29tbWl0IGlzIGEKK2RpcmVjdCBjaGlsZCBvZiBIRUFELCB1c3VhbGx5IHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLCBhbmQgdGhlCiticmFuY2ggaXMgdXBkYXRlZCB0byBwb2ludCB0byBpdCAodW5sZXNzIG5vIGJyYW5jaCBpcyBhc3NvY2lhdGVkIHdpdGgKK3RoZSB3b3JraW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgSEVBRCBpcyAiZGV0YWNoZWQiIGFzIGRlc2NyaWJlZCBpbgorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0pLgorCitUaGUgY29udGVudCB0byBiZSBjb21taXR0ZWQgY2FuIGJlIHNwZWNpZmllZCBpbiBzZXZlcmFsIHdheXM6CisKKzEuIGJ5IHVzaW5nIGxpbmtnaXQ6Z2l0LWFkZFsxXSB0byBpbmNyZW1lbnRhbGx5ICJhZGQiIGNoYW5nZXMgdG8gdGhlCisgICBpbmRleCBiZWZvcmUgdXNpbmcgdGhlICdjb21taXQnIGNvbW1hbmQgKE5vdGU6IGV2ZW4gbW9kaWZpZWQgZmlsZXMKKyAgIG11c3QgYmUgImFkZGVkIik7CisKKzIuIGJ5IHVzaW5nIGxpbmtnaXQ6Z2l0LXJtWzFdIHRvIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUKKyAgIGFuZCB0aGUgaW5kZXgsIGFnYWluIGJlZm9yZSB1c2luZyB0aGUgJ2NvbW1pdCcgY29tbWFuZDsKKworMy4gYnkgbGlzdGluZyBmaWxlcyBhcyBhcmd1bWVudHMgdG8gdGhlICdjb21taXQnIGNvbW1hbmQKKyAgICh3aXRob3V0IC0taW50ZXJhY3RpdmUgb3IgLS1wYXRjaCBzd2l0Y2gpLCBpbiB3aGljaAorICAgY2FzZSB0aGUgY29tbWl0IHdpbGwgaWdub3JlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleCwgYW5kIGluc3RlYWQKKyAgIHJlY29yZCB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBsaXN0ZWQgZmlsZXMgKHdoaWNoIG11c3QgYWxyZWFkeQorICAgYmUga25vd24gdG8gR2l0KTsKKworNC4gYnkgdXNpbmcgdGhlIC1hIHN3aXRjaCB3aXRoIHRoZSAnY29tbWl0JyBjb21tYW5kIHRvIGF1dG9tYXRpY2FsbHkKKyAgICJhZGQiIGNoYW5nZXMgZnJvbSBhbGwga25vd24gZmlsZXMgKGkuZS4gYWxsIGZpbGVzIHRoYXQgYXJlIGFscmVhZHkKKyAgIGxpc3RlZCBpbiB0aGUgaW5kZXgpIGFuZCB0byBhdXRvbWF0aWNhbGx5ICJybSIgZmlsZXMgaW4gdGhlIGluZGV4CisgICB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIHRoZW4gcGVyZm9ybSB0aGUKKyAgIGFjdHVhbCBjb21taXQ7CisKKzUuIGJ5IHVzaW5nIHRoZSAtLWludGVyYWN0aXZlIG9yIC0tcGF0Y2ggc3dpdGNoZXMgd2l0aCB0aGUgJ2NvbW1pdCcgY29tbWFuZAorICAgdG8gZGVjaWRlIG9uZSBieSBvbmUgd2hpY2ggZmlsZXMgb3IgaHVua3Mgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGNvbW1pdAorICAgaW4gYWRkaXRpb24gdG8gY29udGVudHMgaW4gdGhlIGluZGV4LAorICAgYmVmb3JlIGZpbmFsaXppbmcgdGhlIG9wZXJhdGlvbi4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJyBzZWN0aW9uIG9mCisgICBsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlc2UgbW9kZXMuCisKK1RoZSBgLS1kcnktcnVuYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEKK3N1bW1hcnkgb2Ygd2hhdCBpcyBpbmNsdWRlZCBieSBhbnkgb2YgdGhlIGFib3ZlIGZvciB0aGUgbmV4dAorY29tbWl0IGJ5IGdpdmluZyB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycyAob3B0aW9ucyBhbmQgcGF0aHMpLgorCitJZiB5b3UgbWFrZSBhIGNvbW1pdCBhbmQgdGhlbiBmaW5kIGEgbWlzdGFrZSBpbW1lZGlhdGVseSBhZnRlcgordGhhdCwgeW91IGNhbiByZWNvdmVyIGZyb20gaXQgd2l0aCAnZ2l0IHJlc2V0Jy4KKworCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFsbDo6CisJVGVsbCB0aGUgY29tbWFuZCB0byBhdXRvbWF0aWNhbGx5IHN0YWdlIGZpbGVzIHRoYXQgaGF2ZQorCWJlZW4gbW9kaWZpZWQgYW5kIGRlbGV0ZWQsIGJ1dCBuZXcgZmlsZXMgeW91IGhhdmUgbm90CisJdG9sZCBHaXQgYWJvdXQgYXJlIG5vdCBhZmZlY3RlZC4KKworLXA6OgorLS1wYXRjaDo6CisJVXNlIHRoZSBpbnRlcmFjdGl2ZSBwYXRjaCBzZWxlY3Rpb24gaW50ZXJmYWNlIHRvIGNob3NlCisJd2hpY2ggY2hhbmdlcyB0byBjb21taXQuIFNlZSBsaW5rZ2l0OmdpdC1hZGRbMV0gZm9yCisJZGV0YWlscy4KKworLUMgPGNvbW1pdD46OgorLS1yZXVzZS1tZXNzYWdlPTxjb21taXQ+OjoKKwlUYWtlIGFuIGV4aXN0aW5nIGNvbW1pdCBvYmplY3QsIGFuZCByZXVzZSB0aGUgbG9nIG1lc3NhZ2UKKwlhbmQgdGhlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24gKGluY2x1ZGluZyB0aGUgdGltZXN0YW1wKQorCXdoZW4gY3JlYXRpbmcgdGhlIGNvbW1pdC4KKworLWMgPGNvbW1pdD46OgorLS1yZWVkaXQtbWVzc2FnZT08Y29tbWl0Pjo6CisJTGlrZSAnLUMnLCBidXQgd2l0aCBgLWNgIHRoZSBlZGl0b3IgaXMgaW52b2tlZCwgc28gdGhhdAorCXRoZSB1c2VyIGNhbiBmdXJ0aGVyIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlLgorCistLWZpeHVwPTxjb21taXQ+OjoKKwlDb25zdHJ1Y3QgYSBjb21taXQgbWVzc2FnZSBmb3IgdXNlIHdpdGggYHJlYmFzZSAtLWF1dG9zcXVhc2hgLgorCVRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHRoZSBzdWJqZWN0IGxpbmUgZnJvbSB0aGUgc3BlY2lmaWVkCisJY29tbWl0IHdpdGggYSBwcmVmaXggb2YgImZpeHVwISAiLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXQorCWZvciBkZXRhaWxzLgorCistLXNxdWFzaD08Y29tbWl0Pjo6CisJQ29uc3RydWN0IGEgY29tbWl0IG1lc3NhZ2UgZm9yIHVzZSB3aXRoIGByZWJhc2UgLS1hdXRvc3F1YXNoYC4KKwlUaGUgY29tbWl0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lIGlzIHRha2VuIGZyb20gdGhlIHNwZWNpZmllZAorCWNvbW1pdCB3aXRoIGEgcHJlZml4IG9mICJzcXVhc2ghICIuICBDYW4gYmUgdXNlZCB3aXRoIGFkZGl0aW9uYWwKKwljb21taXQgbWVzc2FnZSBvcHRpb25zIChgLW1gL2AtY2AvYC1DYC9gLUZgKS4gU2VlCisJbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBkZXRhaWxzLgorCistLXJlc2V0LWF1dGhvcjo6CisJV2hlbiB1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCBvcHRpb25zLCBvciB3aGVuIGNvbW1pdHRpbmcgYWZ0ZXIgYQorCWNvbmZsaWN0aW5nIGNoZXJyeS1waWNrLCBkZWNsYXJlIHRoYXQgdGhlIGF1dGhvcnNoaXAgb2YgdGhlCisJcmVzdWx0aW5nIGNvbW1pdCBub3cgYmVsb25ncyB0byB0aGUgY29tbWl0dGVyLiBUaGlzIGFsc28gcmVuZXdzCisJdGhlIGF1dGhvciB0aW1lc3RhbXAuCisKKy0tc2hvcnQ6OgorCVdoZW4gZG9pbmcgYSBkcnktcnVuLCBnaXZlIHRoZSBvdXRwdXQgaW4gdGhlIHNob3J0LWZvcm1hdC4gU2VlCisJbGlua2dpdDpnaXQtc3RhdHVzWzFdIGZvciBkZXRhaWxzLiBJbXBsaWVzIGAtLWRyeS1ydW5gLgorCistLWJyYW5jaDo6CisJU2hvdyB0aGUgYnJhbmNoIGFuZCB0cmFja2luZyBpbmZvIGV2ZW4gaW4gc2hvcnQtZm9ybWF0LgorCistLXBvcmNlbGFpbjo6CisJV2hlbiBkb2luZyBhIGRyeS1ydW4sIGdpdmUgdGhlIG91dHB1dCBpbiBhIHBvcmNlbGFpbi1yZWFkeQorCWZvcm1hdC4gU2VlIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBmb3IgZGV0YWlscy4gSW1wbGllcworCWAtLWRyeS1ydW5gLgorCistLWxvbmc6OgorCVdoZW4gZG9pbmcgYSBkcnktcnVuLCBnaXZlIHRoZSBvdXRwdXQgaW4gdGhlIGxvbmctZm9ybWF0LgorCUltcGxpZXMgYC0tZHJ5LXJ1bmAuCisKKy16OjoKKy0tbnVsbDo6CisJV2hlbiBzaG93aW5nIGBzaG9ydGAgb3IgYHBvcmNlbGFpbmAgc3RhdHVzIG91dHB1dCwgcHJpbnQgdGhlCisJZmlsZW5hbWUgdmVyYmF0aW0gYW5kIHRlcm1pbmF0ZSB0aGUgZW50cmllcyB3aXRoIE5VTCwgaW5zdGVhZCBvZiBMRi4KKwlJZiBubyBmb3JtYXQgaXMgZ2l2ZW4sIGltcGxpZXMgdGhlIGAtLXBvcmNlbGFpbmAgb3V0cHV0IGZvcm1hdC4KKwlXaXRob3V0IHRoZSBgLXpgIG9wdGlvbiwgZmlsZW5hbWVzIHdpdGggInVudXN1YWwiIGNoYXJhY3RlcnMgYXJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworLUYgPGZpbGU+OjoKKy0tZmlsZT08ZmlsZT46OgorCVRha2UgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuICBVc2UgJy0nIHRvCisJcmVhZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworLS1hdXRob3I9PGF1dGhvcj46OgorCU92ZXJyaWRlIHRoZSBjb21taXQgYXV0aG9yLiBTcGVjaWZ5IGFuIGV4cGxpY2l0IGF1dGhvciB1c2luZyB0aGUKKwlzdGFuZGFyZCBgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT5gIGZvcm1hdC4gT3RoZXJ3aXNlIDxhdXRob3I+CisJaXMgYXNzdW1lZCB0byBiZSBhIHBhdHRlcm4gYW5kIGlzIHVzZWQgdG8gc2VhcmNoIGZvciBhbiBleGlzdGluZworCWNvbW1pdCBieSB0aGF0IGF1dGhvciAoaS5lLiByZXYtbGlzdCAtLWFsbCAtaSAtLWF1dGhvcj08YXV0aG9yPik7CisJdGhlIGNvbW1pdCBhdXRob3IgaXMgdGhlbiBjb3BpZWQgZnJvbSB0aGUgZmlyc3Qgc3VjaCBjb21taXQgZm91bmQuCisKKy0tZGF0ZT08ZGF0ZT46OgorCU92ZXJyaWRlIHRoZSBhdXRob3IgZGF0ZSB1c2VkIGluIHRoZSBjb21taXQuCisKKy1tIDxtc2c+OjoKKy0tbWVzc2FnZT08bXNnPjo6CisJVXNlIHRoZSBnaXZlbiA8bXNnPiBhcyB0aGUgY29tbWl0IG1lc3NhZ2UuCisJSWYgbXVsdGlwbGUgYC1tYCBvcHRpb25zIGFyZSBnaXZlbiwgdGhlaXIgdmFsdWVzIGFyZQorCWNvbmNhdGVuYXRlZCBhcyBzZXBhcmF0ZSBwYXJhZ3JhcGhzLgorKworVGhlIGAtbWAgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGAtY2AsIGAtQ2AsIGFuZCBgLUZgLgorCistdCA8ZmlsZT46OgorLS10ZW1wbGF0ZT08ZmlsZT46OgorCVdoZW4gZWRpdGluZyB0aGUgY29tbWl0IG1lc3NhZ2UsIHN0YXJ0IHRoZSBlZGl0b3Igd2l0aCB0aGUKKwljb250ZW50cyBpbiB0aGUgZ2l2ZW4gZmlsZS4gIFRoZSBgY29tbWl0LnRlbXBsYXRlYCBjb25maWd1cmF0aW9uCisJdmFyaWFibGUgaXMgb2Z0ZW4gdXNlZCB0byBnaXZlIHRoaXMgb3B0aW9uIGltcGxpY2l0bHkgdG8gdGhlCisJY29tbWFuZC4gIFRoaXMgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIGJ5IHByb2plY3RzIHRoYXQgd2FudCB0bworCWd1aWRlIHBhcnRpY2lwYW50cyB3aXRoIHNvbWUgaGludHMgb24gd2hhdCB0byB3cml0ZSBpbiB0aGUgbWVzc2FnZQorCWluIHdoYXQgb3JkZXIuICBJZiB0aGUgdXNlciBleGl0cyB0aGUgZWRpdG9yIHdpdGhvdXQgZWRpdGluZyB0aGUKKwltZXNzYWdlLCB0aGUgY29tbWl0IGlzIGFib3J0ZWQuICBUaGlzIGhhcyBubyBlZmZlY3Qgd2hlbiBhIG1lc3NhZ2UKKwlpcyBnaXZlbiBieSBvdGhlciBtZWFucywgZS5nLiB3aXRoIHRoZSBgLW1gIG9yIGAtRmAgb3B0aW9ucy4KKworLXM6OgorLS1zaWdub2ZmOjoKKwlBZGQgU2lnbmVkLW9mZi1ieSBsaW5lIGJ5IHRoZSBjb21taXR0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWl0CisJbG9nIG1lc3NhZ2UuICBUaGUgbWVhbmluZyBvZiBhIHNpZ25vZmYgZGVwZW5kcyBvbiB0aGUgcHJvamVjdCwKKwlidXQgaXQgdHlwaWNhbGx5IGNlcnRpZmllcyB0aGF0IGNvbW1pdHRlciBoYXMKKwl0aGUgcmlnaHRzIHRvIHN1Ym1pdCB0aGlzIHdvcmsgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhbmQKKwlhZ3JlZXMgdG8gYSBEZXZlbG9wZXIgQ2VydGlmaWNhdGUgb2YgT3JpZ2luCisJKHNlZSBodHRwOi8vZGV2ZWxvcGVyY2VydGlmaWNhdGUub3JnLyBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisKKy1uOjoKKy0tbm8tdmVyaWZ5OjoKKwlUaGlzIG9wdGlvbiBieXBhc3NlcyB0aGUgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcy4KKwlTZWUgYWxzbyBsaW5rZ2l0OmdpdGhvb2tzWzVdLgorCistLWFsbG93LWVtcHR5OjoKKwlVc3VhbGx5IHJlY29yZGluZyBhIGNvbW1pdCB0aGF0IGhhcyB0aGUgZXhhY3Qgc2FtZSB0cmVlIGFzIGl0cworCXNvbGUgcGFyZW50IGNvbW1pdCBpcyBhIG1pc3Rha2UsIGFuZCB0aGUgY29tbWFuZCBwcmV2ZW50cyB5b3UKKwlmcm9tIG1ha2luZyBzdWNoIGEgY29tbWl0LiAgVGhpcyBvcHRpb24gYnlwYXNzZXMgdGhlIHNhZmV0eSwgYW5kCisJaXMgcHJpbWFyaWx5IGZvciB1c2UgYnkgZm9yZWlnbiBTQ00gaW50ZXJmYWNlIHNjcmlwdHMuCisKKy0tYWxsb3ctZW1wdHktbWVzc2FnZTo6CisgICAgICAgTGlrZSAtLWFsbG93LWVtcHR5IHRoaXMgY29tbWFuZCBpcyBwcmltYXJpbHkgZm9yIHVzZSBieSBmb3JlaWduCisgICAgICAgU0NNIGludGVyZmFjZSBzY3JpcHRzLiBJdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIGNvbW1pdCB3aXRoIGFuCisgICAgICAgZW1wdHkgY29tbWl0IG1lc3NhZ2Ugd2l0aG91dCB1c2luZyBwbHVtYmluZyBjb21tYW5kcyBsaWtlCisgICAgICAgbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV0uCisKKy0tY2xlYW51cD08bW9kZT46OgorCVRoaXMgb3B0aW9uIGRldGVybWluZXMgaG93IHRoZSBzdXBwbGllZCBjb21taXQgbWVzc2FnZSBzaG91bGQgYmUKKwljbGVhbmVkIHVwIGJlZm9yZSBjb21taXR0aW5nLiAgVGhlICc8bW9kZT4nIGNhbiBiZSBgc3RyaXBgLAorCWB3aGl0ZXNwYWNlYCwgYHZlcmJhdGltYCwgYHNjaXNzb3JzYCBvciBgZGVmYXVsdGAuCisrCistLQorc3RyaXA6OgorCVN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGVtcHR5IGxpbmVzLCB0cmFpbGluZyB3aGl0ZXNwYWNlLAorCWNvbW1lbnRhcnkgYW5kIGNvbGxhcHNlIGNvbnNlY3V0aXZlIGVtcHR5IGxpbmVzLgord2hpdGVzcGFjZTo6CisJU2FtZSBhcyBgc3RyaXBgIGV4Y2VwdCAjY29tbWVudGFyeSBpcyBub3QgcmVtb3ZlZC4KK3ZlcmJhdGltOjoKKwlEbyBub3QgY2hhbmdlIHRoZSBtZXNzYWdlIGF0IGFsbC4KK3NjaXNzb3JzOjoKKwlTYW1lIGFzIGB3aGl0ZXNwYWNlYCBleGNlcHQgdGhhdCBldmVyeXRoaW5nIGZyb20gKGFuZCBpbmNsdWRpbmcpCisJdGhlIGxpbmUgZm91bmQgYmVsb3cgaXMgdHJ1bmNhdGVkLCBpZiB0aGUgbWVzc2FnZSBpcyB0byBiZSBlZGl0ZWQuCisJImAjYCIgY2FuIGJlIGN1c3RvbWl6ZWQgd2l0aCBjb3JlLmNvbW1lbnRDaGFyLgorCisJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWZhdWx0OjoKKwlTYW1lIGFzIGBzdHJpcGAgaWYgdGhlIG1lc3NhZ2UgaXMgdG8gYmUgZWRpdGVkLgorCU90aGVyd2lzZSBgd2hpdGVzcGFjZWAuCistLQorKworVGhlIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIGBjb21taXQuY2xlYW51cGAgY29uZmlndXJhdGlvbgordmFyaWFibGUgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCistZTo6CistLWVkaXQ6OgorCVRoZSBtZXNzYWdlIHRha2VuIGZyb20gZmlsZSB3aXRoIGAtRmAsIGNvbW1hbmQgbGluZSB3aXRoCisJYC1tYCwgYW5kIGZyb20gY29tbWl0IG9iamVjdCB3aXRoIGAtQ2AgYXJlIHVzdWFsbHkgdXNlZCBhcworCXRoZSBjb21taXQgbG9nIG1lc3NhZ2UgdW5tb2RpZmllZC4gVGhpcyBvcHRpb24gbGV0cyB5b3UKKwlmdXJ0aGVyIGVkaXQgdGhlIG1lc3NhZ2UgdGFrZW4gZnJvbSB0aGVzZSBzb3VyY2VzLgorCistLW5vLWVkaXQ6OgorCVVzZSB0aGUgc2VsZWN0ZWQgY29tbWl0IG1lc3NhZ2Ugd2l0aG91dCBsYXVuY2hpbmcgYW4gZWRpdG9yLgorCUZvciBleGFtcGxlLCBgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tZWRpdGAgYW1lbmRzIGEgY29tbWl0CisJd2l0aG91dCBjaGFuZ2luZyBpdHMgY29tbWl0IG1lc3NhZ2UuCisKKy0tYW1lbmQ6OgorCVJlcGxhY2UgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggYnkgY3JlYXRpbmcgYSBuZXcKKwljb21taXQuIFRoZSByZWNvcmRlZCB0cmVlIGlzIHByZXBhcmVkIGFzIHVzdWFsIChpbmNsdWRpbmcKKwl0aGUgZWZmZWN0IG9mIHRoZSBgLWlgIGFuZCBgLW9gIG9wdGlvbnMgYW5kIGV4cGxpY2l0CisJcGF0aHNwZWMpLCBhbmQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgb3JpZ2luYWwgY29tbWl0IGlzIHVzZWQKKwlhcyB0aGUgc3RhcnRpbmcgcG9pbnQsIGluc3RlYWQgb2YgYW4gZW1wdHkgbWVzc2FnZSwgd2hlbiBubworCW90aGVyIG1lc3NhZ2UgaXMgc3BlY2lmaWVkIGZyb20gdGhlIGNvbW1hbmQgbGluZSB2aWEgb3B0aW9ucworCXN1Y2ggYXMgYC1tYCwgYC1GYCwgYC1jYCwgZXRjLiAgVGhlIG5ldyBjb21taXQgaGFzIHRoZSBzYW1lCisJcGFyZW50cyBhbmQgYXV0aG9yIGFzIHRoZSBjdXJyZW50IG9uZSAodGhlIGAtLXJlc2V0LWF1dGhvcmAKKwlvcHRpb24gY2FuIGNvdW50ZXJtYW5kIHRoaXMpLgorKworLS0KK0l0IGlzIGEgcm91Z2ggZXF1aXZhbGVudCBmb3I6CistLS0tLS0KKwkkIGdpdCByZXNldCAtLXNvZnQgSEVBRF4KKwkkIC4uLiBkbyBzb21ldGhpbmcgZWxzZSB0byBjb21lIHVwIHdpdGggdGhlIHJpZ2h0IHRyZWUgLi4uCisJJCBnaXQgY29tbWl0IC1jIE9SSUdfSEVBRAorCistLS0tLS0KK2J1dCBjYW4gYmUgdXNlZCB0byBhbWVuZCBhIG1lcmdlIGNvbW1pdC4KKy0tCisrCitZb3Ugc2hvdWxkIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiByZXdyaXRpbmcgaGlzdG9yeSBpZiB5b3UKK2FtZW5kIGEgY29tbWl0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwdWJsaXNoZWQuICAoU2VlIHRoZSAiUkVDT1ZFUklORworRlJPTSBVUFNUUkVBTSBSRUJBU0UiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmViYXNlWzFdLikKKworLS1uby1wb3N0LXJld3JpdGU6OgorCUJ5cGFzcyB0aGUgcG9zdC1yZXdyaXRlIGhvb2suCisKKy1pOjoKKy0taW5jbHVkZTo6CisJQmVmb3JlIG1ha2luZyBhIGNvbW1pdCBvdXQgb2Ygc3RhZ2VkIGNvbnRlbnRzIHNvIGZhciwKKwlzdGFnZSB0aGUgY29udGVudHMgb2YgcGF0aHMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZQorCWFzIHdlbGwuICBUaGlzIGlzIHVzdWFsbHkgbm90IHdoYXQgeW91IHdhbnQgdW5sZXNzIHlvdQorCWFyZSBjb25jbHVkaW5nIGEgY29uZmxpY3RlZCBtZXJnZS4KKworLW86OgorLS1vbmx5OjoKKwlNYWtlIGEgY29tbWl0IGJ5IHRha2luZyB0aGUgdXBkYXRlZCB3b3JraW5nIHRyZWUgY29udGVudHMKKwlvZiB0aGUgcGF0aHMgc3BlY2lmaWVkIG9uIHRoZQorCWNvbW1hbmQgbGluZSwgZGlzcmVnYXJkaW5nIGFueSBjb250ZW50cyB0aGF0IGhhdmUgYmVlbgorCXN0YWdlZCBmb3Igb3RoZXIgcGF0aHMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZSBvZiBvcGVyYXRpb24gb2YKKwknZ2l0IGNvbW1pdCcgaWYgYW55IHBhdGhzIGFyZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLAorCWluIHdoaWNoIGNhc2UgdGhpcyBvcHRpb24gY2FuIGJlIG9taXR0ZWQuCisJSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggYC0tYW1lbmRgLCB0aGVuCisJbm8gcGF0aHMgbmVlZCB0byBiZSBzcGVjaWZpZWQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFtZW5kCisJdGhlIGxhc3QgY29tbWl0IHdpdGhvdXQgY29tbWl0dGluZyBjaGFuZ2VzIHRoYXQgaGF2ZQorCWFscmVhZHkgYmVlbiBzdGFnZWQuIElmIHVzZWQgdG9nZXRoZXIgd2l0aCBgLS1hbGxvdy1lbXB0eWAKKwlwYXRocyBhcmUgYWxzbyBub3QgcmVxdWlyZWQsIGFuZCBhbiBlbXB0eSBjb21taXQgd2lsbCBiZSBjcmVhdGVkLgorCistLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT46OgorCVBhdGhzcGVjIGlzIHBhc3NlZCBpbiBgPGZpbGU+YCBpbnN0ZWFkIG9mIGNvbW1hbmRsaW5lIGFyZ3MuIElmCisJYDxmaWxlPmAgaXMgZXhhY3RseSBgLWAgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLiBQYXRoc3BlYworCWVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgTEYgb3IgQ1IvTEYuIFBhdGhzcGVjIGVsZW1lbnRzIGNhbiBiZQorCXF1b3RlZCBhcyBleHBsYWluZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBjb3JlLnF1b3RlUGF0aGAKKwkoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIFNlZSBhbHNvIGAtLXBhdGhzcGVjLWZpbGUtbnVsYCBhbmQKKwlnbG9iYWwgYC0tbGl0ZXJhbC1wYXRoc3BlY3NgLgorCistLXBhdGhzcGVjLWZpbGUtbnVsOjoKKwlPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1wYXRoc3BlYy1mcm9tLWZpbGVgLiBQYXRoc3BlYyBlbGVtZW50cyBhcmUKKwlzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIGFuZCBhbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgdGFrZW4KKwlsaXRlcmFsbHkgKGluY2x1ZGluZyBuZXdsaW5lcyBhbmQgcXVvdGVzKS4KKworLXVbPG1vZGU+XTo6CistLXVudHJhY2tlZC1maWxlc1s9PG1vZGU+XTo6CisJU2hvdyB1bnRyYWNrZWQgZmlsZXMuCisrCistLQorVGhlIG1vZGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIChkZWZhdWx0cyB0byAnYWxsJyksIGFuZCBpcyB1c2VkIHRvCitzcGVjaWZ5IHRoZSBoYW5kbGluZyBvZiB1bnRyYWNrZWQgZmlsZXM7IHdoZW4gLXUgaXMgbm90IHVzZWQsIHRoZQorZGVmYXVsdCBpcyAnbm9ybWFsJywgaS5lLiBzaG93IHVudHJhY2tlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisKK1RoZSBwb3NzaWJsZSBvcHRpb25zIGFyZToKKworCS0gJ25vJyAgICAgLSBTaG93IG5vIHVudHJhY2tlZCBmaWxlcworCS0gJ25vcm1hbCcgLSBTaG93cyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCisJLSAnYWxsJyAgICAtIEFsc28gc2hvd3MgaW5kaXZpZHVhbCBmaWxlcyBpbiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMuCisKK1RoZSBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGRvY3VtZW50ZWQgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorLS0KKworLXY6OgorLS12ZXJib3NlOjoKKwlTaG93IHVuaWZpZWQgZGlmZiBiZXR3ZWVuIHRoZSBIRUFEIGNvbW1pdCBhbmQgd2hhdAorCXdvdWxkIGJlIGNvbW1pdHRlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBjb21taXQgbWVzc2FnZQorCXRlbXBsYXRlIHRvIGhlbHAgdGhlIHVzZXIgZGVzY3JpYmUgdGhlIGNvbW1pdCBieSByZW1pbmRpbmcKKwl3aGF0IGNoYW5nZXMgdGhlIGNvbW1pdCBoYXMuCisJTm90ZSB0aGF0IHRoaXMgZGlmZiBvdXRwdXQgZG9lc24ndCBoYXZlIGl0cworCWxpbmVzIHByZWZpeGVkIHdpdGggJyMnLiBUaGlzIGRpZmYgd2lsbCBub3QgYmUgYSBwYXJ0CisJb2YgdGhlIGNvbW1pdCBtZXNzYWdlLiBTZWUgdGhlIGBjb21taXQudmVyYm9zZWAgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKysKK0lmIHNwZWNpZmllZCB0d2ljZSwgc2hvdyBpbiBhZGRpdGlvbiB0aGUgdW5pZmllZCBkaWZmIGJldHdlZW4KK3doYXQgd291bGQgYmUgY29tbWl0dGVkIGFuZCB0aGUgd29ya3RyZWUgZmlsZXMsIGkuZS4gdGhlIHVuc3RhZ2VkCitjaGFuZ2VzIHRvIHRyYWNrZWQgZmlsZXMuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVN1cHByZXNzIGNvbW1pdCBzdW1tYXJ5IG1lc3NhZ2UuCisKKy0tZHJ5LXJ1bjo6CisJRG8gbm90IGNyZWF0ZSBhIGNvbW1pdCwgYnV0IHNob3cgYSBsaXN0IG9mIHBhdGhzIHRoYXQgYXJlCisJdG8gYmUgY29tbWl0dGVkLCBwYXRocyB3aXRoIGxvY2FsIGNoYW5nZXMgdGhhdCB3aWxsIGJlIGxlZnQKKwl1bmNvbW1pdHRlZCBhbmQgcGF0aHMgdGhhdCBhcmUgdW50cmFja2VkLgorCistLXN0YXR1czo6CisJSW5jbHVkZSB0aGUgb3V0cHV0IG9mIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBpbiB0aGUgY29tbWl0CisJbWVzc2FnZSB0ZW1wbGF0ZSB3aGVuIHVzaW5nIGFuIGVkaXRvciB0byBwcmVwYXJlIHRoZSBjb21taXQKKwltZXNzYWdlLiAgRGVmYXVsdHMgdG8gb24sIGJ1dCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZQorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29tbWl0LnN0YXR1cy4KKworLS1uby1zdGF0dXM6OgorCURvIG5vdCBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGluIHRoZQorCWNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIHdoZW4gdXNpbmcgYW4gZWRpdG9yIHRvIHByZXBhcmUgdGhlCisJZGVmYXVsdCBjb21taXQgbWVzc2FnZS4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIGNvbW1pdHMuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZAorCWRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorCXN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistLW5vLWdwZy1zaWduOjoKKwlDb3VudGVybWFuZCBgY29tbWl0LmdwZ1NpZ25gIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGhhdCBpcworCXNldCB0byBmb3JjZSBlYWNoIGFuZCBldmVyeSBjb21taXQgdG8gYmUgc2lnbmVkLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxwYXRoc3BlYz4uLi46OgorCVdoZW4gcGF0aHNwZWMgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgY29tbWl0IHRoZSBjb250ZW50cyBvZgorCXRoZSBmaWxlcyB0aGF0IG1hdGNoIHRoZSBwYXRoc3BlYyB3aXRob3V0IHJlY29yZGluZyB0aGUgY2hhbmdlcworCWFscmVhZHkgYWRkZWQgdG8gdGhlIGluZGV4LiBUaGUgY29udGVudHMgb2YgdGhlc2UgZmlsZXMgYXJlIGFsc28KKwlzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdCBvbiB0b3Agb2Ygd2hhdCBoYXZlIGJlZW4gc3RhZ2VkIGJlZm9yZS4KKysKK0ZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeSBpbiBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCitFWEFNUExFUworLS0tLS0tLS0KK1doZW4gcmVjb3JkaW5nIHlvdXIgb3duIHdvcmssIHRoZSBjb250ZW50cyBvZiBtb2RpZmllZCBmaWxlcyBpbgoreW91ciB3b3JraW5nIHRyZWUgYXJlIHRlbXBvcmFyaWx5IHN0b3JlZCB0byBhIHN0YWdpbmcgYXJlYQorY2FsbGVkIHRoZSAiaW5kZXgiIHdpdGggJ2dpdCBhZGQnLiAgQSBmaWxlIGNhbiBiZQorcmV2ZXJ0ZWQgYmFjaywgb25seSBpbiB0aGUgaW5kZXggYnV0IG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLAordG8gdGhhdCBvZiB0aGUgbGFzdCBjb21taXQgd2l0aCBgZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+YCwKK3doaWNoIGVmZmVjdGl2ZWx5IHJldmVydHMgJ2dpdCBhZGQnIGFuZCBwcmV2ZW50cyB0aGUgY2hhbmdlcyB0bwordGhpcyBmaWxlIGZyb20gcGFydGljaXBhdGluZyBpbiB0aGUgbmV4dCBjb21taXQuICBBZnRlciBidWlsZGluZwordGhlIHN0YXRlIHRvIGJlIGNvbW1pdHRlZCBpbmNyZW1lbnRhbGx5IHdpdGggdGhlc2UgY29tbWFuZHMsCitgZ2l0IGNvbW1pdGAgKHdpdGhvdXQgYW55IHBhdGhuYW1lIHBhcmFtZXRlcikgaXMgdXNlZCB0byByZWNvcmQgd2hhdAoraGFzIGJlZW4gc3RhZ2VkIHNvIGZhci4gIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgZm9ybSBvZiB0aGUKK2NvbW1hbmQuICBBbiBleGFtcGxlOgorCistLS0tLS0tLS0tLS0KKyQgZWRpdCBoZWxsby5jCiskIGdpdCBybSBnb29kYnllLmMKKyQgZ2l0IGFkZCBoZWxsby5jCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLQorCitJbnN0ZWFkIG9mIHN0YWdpbmcgZmlsZXMgYWZ0ZXIgZWFjaCBpbmRpdmlkdWFsIGNoYW5nZSwgeW91IGNhbgordGVsbCBgZ2l0IGNvbW1pdGAgdG8gbm90aWNlIHRoZSBjaGFuZ2VzIHRvIHRoZSBmaWxlcyB3aG9zZQorY29udGVudHMgYXJlIHRyYWNrZWQgaW4KK3lvdXIgd29ya2luZyB0cmVlIGFuZCBkbyBjb3JyZXNwb25kaW5nIGBnaXQgYWRkYCBhbmQgYGdpdCBybWAKK2ZvciB5b3UuICBUaGF0IGlzLCB0aGlzIGV4YW1wbGUgZG9lcyB0aGUgc2FtZSBhcyB0aGUgZWFybGllcgorZXhhbXBsZSBpZiB0aGVyZSBpcyBubyBvdGhlciBjaGFuZ2UgaW4geW91ciB3b3JraW5nIHRyZWU6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0IGhlbGxvLmMKKyQgcm0gZ29vZGJ5ZS5jCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBgZ2l0IGNvbW1pdCAtYWAgZmlyc3QgbG9va3MgYXQgeW91ciB3b3JraW5nIHRyZWUsCitub3RpY2VzIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgaGVsbG8uYyBhbmQgcmVtb3ZlZCBnb29kYnllLmMsCithbmQgcGVyZm9ybXMgbmVjZXNzYXJ5IGBnaXQgYWRkYCBhbmQgYGdpdCBybWAgZm9yIHlvdS4KKworQWZ0ZXIgc3RhZ2luZyBjaGFuZ2VzIHRvIG1hbnkgZmlsZXMsIHlvdSBjYW4gYWx0ZXIgdGhlIG9yZGVyIHRoZQorY2hhbmdlcyBhcmUgcmVjb3JkZWQgaW4sIGJ5IGdpdmluZyBwYXRobmFtZXMgdG8gYGdpdCBjb21taXRgLgorV2hlbiBwYXRobmFtZXMgYXJlIGdpdmVuLCB0aGUgY29tbWFuZCBtYWtlcyBhIGNvbW1pdCB0aGF0Citvbmx5IHJlY29yZHMgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgbmFtZWQgcGF0aHM6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0IGhlbGxvLmMgaGVsbG8uaAorJCBnaXQgYWRkIGhlbGxvLmMgaGVsbG8uaAorJCBlZGl0IE1ha2VmaWxlCiskIGdpdCBjb21taXQgTWFrZWZpbGUKKy0tLS0tLS0tLS0tLQorCitUaGlzIG1ha2VzIGEgY29tbWl0IHRoYXQgcmVjb3JkcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBNYWtlZmlsZWAuCitUaGUgY2hhbmdlcyBzdGFnZWQgZm9yIGBoZWxsby5jYCBhbmQgYGhlbGxvLmhgIGFyZSBub3QgaW5jbHVkZWQKK2luIHRoZSByZXN1bHRpbmcgY29tbWl0LiAgSG93ZXZlciwgdGhlaXIgY2hhbmdlcyBhcmUgbm90IGxvc3QgLS0KK3RoZXkgYXJlIHN0aWxsIHN0YWdlZCBhbmQgbWVyZWx5IGhlbGQgYmFjay4gIEFmdGVyIHRoZSBhYm92ZQorc2VxdWVuY2UsIGlmIHlvdSBkbzoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLQorCit0aGlzIHNlY29uZCBjb21taXQgd291bGQgcmVjb3JkIHRoZSBjaGFuZ2VzIHRvIGBoZWxsby5jYCBhbmQKK2BoZWxsby5oYCBhcyBleHBlY3RlZC4KKworQWZ0ZXIgYSBtZXJnZSAoaW5pdGlhdGVkIGJ5ICdnaXQgbWVyZ2UnIG9yICdnaXQgcHVsbCcpIHN0b3BzCitiZWNhdXNlIG9mIGNvbmZsaWN0cywgY2xlYW5seSBtZXJnZWQKK3BhdGhzIGFyZSBhbHJlYWR5IHN0YWdlZCB0byBiZSBjb21taXR0ZWQgZm9yIHlvdSwgYW5kIHBhdGhzIHRoYXQKK2NvbmZsaWN0ZWQgYXJlIGxlZnQgaW4gdW5tZXJnZWQgc3RhdGUuICBZb3Ugd291bGQgaGF2ZSB0byBmaXJzdAorY2hlY2sgd2hpY2ggcGF0aHMgYXJlIGNvbmZsaWN0aW5nIHdpdGggJ2dpdCBzdGF0dXMnCithbmQgYWZ0ZXIgZml4aW5nIHRoZW0gbWFudWFsbHkgaW4geW91ciB3b3JraW5nIHRyZWUsIHlvdSB3b3VsZAorc3RhZ2UgdGhlIHJlc3VsdCBhcyB1c3VhbCB3aXRoICdnaXQgYWRkJzoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzdGF0dXMgfCBncmVwIHVubWVyZ2VkCit1bm1lcmdlZDogaGVsbG8uYworJCBlZGl0IGhlbGxvLmMKKyQgZ2l0IGFkZCBoZWxsby5jCistLS0tLS0tLS0tLS0KKworQWZ0ZXIgcmVzb2x2aW5nIGNvbmZsaWN0cyBhbmQgc3RhZ2luZyB0aGUgcmVzdWx0LCBgZ2l0IGxzLWZpbGVzIC11YAord291bGQgc3RvcCBtZW50aW9uaW5nIHRoZSBjb25mbGljdGVkIHBhdGguICBXaGVuIHlvdSBhcmUgZG9uZSwKK3J1biBgZ2l0IGNvbW1pdGAgdG8gZmluYWxseSByZWNvcmQgdGhlIG1lcmdlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK0FzIHdpdGggdGhlIGNhc2UgdG8gcmVjb3JkIHlvdXIgb3duIGNoYW5nZXMsIHlvdSBjYW4gdXNlIGAtYWAKK29wdGlvbiB0byBzYXZlIHR5cGluZy4gIE9uZSBkaWZmZXJlbmNlIGlzIHRoYXQgZHVyaW5nIGEgbWVyZ2UKK3Jlc29sdXRpb24sIHlvdSBjYW5ub3QgdXNlIGBnaXQgY29tbWl0YCB3aXRoIHBhdGhuYW1lcyB0bworYWx0ZXIgdGhlIG9yZGVyIHRoZSBjaGFuZ2VzIGFyZSBjb21taXR0ZWQsIGJlY2F1c2UgdGhlIG1lcmdlCitzaG91bGQgYmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgY29tbWl0LiAgSW4gZmFjdCwgdGhlIGNvbW1hbmQKK3JlZnVzZXMgdG8gcnVuIHdoZW4gZ2l2ZW4gcGF0aG5hbWVzIChidXQgc2VlIGAtaWAgb3B0aW9uKS4KKworQ09NTUlUIElORk9STUFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0KKworQXV0aG9yIGFuZCBjb21taXR0ZXIgaW5mb3JtYXRpb24gaXMgdGFrZW4gZnJvbSB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50Cit2YXJpYWJsZXMsIGlmIHNldDoKKworCUdJVF9BVVRIT1JfTkFNRQorCUdJVF9BVVRIT1JfRU1BSUwKKwlHSVRfQVVUSE9SX0RBVEUKKwlHSVRfQ09NTUlUVEVSX05BTUUKKwlHSVRfQ09NTUlUVEVSX0VNQUlMCisJR0lUX0NPTU1JVFRFUl9EQVRFCisKKyhuYiAiPCIsICI+IiBhbmQgIlxuInMgYXJlIHN0cmlwcGVkKQorCitUaGUgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZXMgYXJlIGJ5IGNvbnZlbnRpb24gc29tZSBmb3JtIG9mIGEgcGVyc29uYWwgbmFtZQorKHRoYXQgaXMsIHRoZSBuYW1lIGJ5IHdoaWNoIG90aGVyIGh1bWFucyByZWZlciB0byB5b3UpLCBhbHRob3VnaCBHaXQgZG9lcyBub3QKK2VuZm9yY2Ugb3IgcmVxdWlyZSBhbnkgcGFydGljdWxhciBmb3JtLiBBcmJpdHJhcnkgVW5pY29kZSBtYXkgYmUgdXNlZCwgc3ViamVjdAordG8gdGhlIGNvbnN0cmFpbnRzIGxpc3RlZCBhYm92ZS4gVGhpcyBuYW1lIGhhcyBubyBlZmZlY3Qgb24gYXV0aGVudGljYXRpb247IGZvcgordGhhdCwgc2VlIHRoZSBgY3JlZGVudGlhbC51c2VybmFtZWAgdmFyaWFibGUgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitJbiBjYXNlIChzb21lIG9mKSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQsIHRoZSBpbmZvcm1hdGlvbgoraXMgdGFrZW4gZnJvbSB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBgdXNlci5uYW1lYCBhbmQgYHVzZXIuZW1haWxgLCBvciwgaWYgbm90CitwcmVzZW50LCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgRU1BSUwsIG9yLCBpZiB0aGF0IGlzIG5vdCBzZXQsCitzeXN0ZW0gdXNlciBuYW1lIGFuZCB0aGUgaG9zdG5hbWUgdXNlZCBmb3Igb3V0Z29pbmcgbWFpbCAodGFrZW4KK2Zyb20gYC9ldGMvbWFpbG5hbWVgIGFuZCBmYWxsaW5nIGJhY2sgdG8gdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSB3aGVuCit0aGF0IGZpbGUgZG9lcyBub3QgZXhpc3QpLgorCitUaGUgYGF1dGhvci5uYW1lYCBhbmQgYGNvbW1pdHRlci5uYW1lYCBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBlbWFpbCBvcHRpb25zCitvdmVycmlkZSBgdXNlci5uYW1lYCBhbmQgYHVzZXIuZW1haWxgIGlmIHNldCBhbmQgYXJlIG92ZXJyaWRkZW4gdGhlbXNlbHZlcyBieQordGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworVGhlIHR5cGljYWwgdXNhZ2UgaXMgdG8gc2V0IGp1c3QgdGhlIGB1c2VyLm5hbWVgIGFuZCBgdXNlci5lbWFpbGAgdmFyaWFibGVzOwordGhlIG90aGVyIG9wdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBtb3JlIGNvbXBsZXggdXNlIGNhc2VzLgorCis6Z2l0LWNvbW1pdDogMQoraW5jbHVkZTo6ZGF0ZS1mb3JtYXRzLnR4dFtdCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhvdWdoIG5vdCByZXF1aXJlZCwgaXQncyBhIGdvb2QgaWRlYSB0byBiZWdpbiB0aGUgY29tbWl0IG1lc3NhZ2UKK3dpdGggYSBzaW5nbGUgc2hvcnQgKGxlc3MgdGhhbiA1MCBjaGFyYWN0ZXIpIGxpbmUgc3VtbWFyaXppbmcgdGhlCitjaGFuZ2UsIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSBhbmQgdGhlbiBhIG1vcmUgdGhvcm91Z2ggZGVzY3JpcHRpb24uCitUaGUgdGV4dCB1cCB0byB0aGUgZmlyc3QgYmxhbmsgbGluZSBpbiBhIGNvbW1pdCBtZXNzYWdlIGlzIHRyZWF0ZWQKK2FzIHRoZSBjb21taXQgdGl0bGUsIGFuZCB0aGF0IHRpdGxlIGlzIHVzZWQgdGhyb3VnaG91dCBHaXQuCitGb3IgZXhhbXBsZSwgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHR1cm5zIGEgY29tbWl0IGludG8gZW1haWwsIGFuZCBpdCB1c2VzCit0aGUgdGl0bGUgb24gdGhlIFN1YmplY3QgbGluZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNvbW1pdCBpbiB0aGUgYm9keS4KKworaW5jbHVkZTo6aTE4bi50eHRbXQorCitFTlZJUk9OTUVOVCBBTkQgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGVkaXRvciB1c2VkIHRvIGVkaXQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB3aWxsIGJlIGNob3NlbiBmcm9tIHRoZQorYEdJVF9FRElUT1JgIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgY29yZS5lZGl0b3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgdGhlCitgVklTVUFMYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgdGhlIGBFRElUT1JgIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiB0aGF0CitvcmRlcikuICBTZWUgbGlua2dpdDpnaXQtdmFyWzFdIGZvciBkZXRhaWxzLgorCitIT09LUworLS0tLS0KK1RoaXMgY29tbWFuZCBjYW4gcnVuIGBjb21taXQtbXNnYCwgYHByZXBhcmUtY29tbWl0LW1zZ2AsIGBwcmUtY29tbWl0YCwKK2Bwb3N0LWNvbW1pdGAgYW5kIGBwb3N0LXJld3JpdGVgIGhvb2tzLiAgU2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCitGSUxFUworLS0tLS0KKworYCRHSVRfRElSL0NPTU1JVF9FRElUTVNHYDo6CisJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb21taXQgbWVzc2FnZSBvZiBhIGNvbW1pdCBpbiBwcm9ncmVzcy4KKwlJZiBgZ2l0IGNvbW1pdGAgZXhpdHMgZHVlIHRvIGFuIGVycm9yIGJlZm9yZSBjcmVhdGluZyBhIGNvbW1pdCwKKwlhbnkgY29tbWl0IG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwcm92aWRlZCBieSB0aGUgdXNlciAoZS5nLiwgaW4KKwlhbiBlZGl0b3Igc2Vzc2lvbikgd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhpcyBmaWxlLCBidXQgd2lsbCBiZQorCW92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGludm9jYXRpb24gb2YgYGdpdCBjb21taXRgLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFkZFsxXSwKK2xpbmtnaXQ6Z2l0LXJtWzFdLAorbGlua2dpdDpnaXQtbXZbMV0sCitsaW5rZ2l0OmdpdC1tZXJnZVsxXSwKK2xpbmtnaXQ6Z2l0LWNvbW1pdC10cmVlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3MzE2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKQEAgLTAsMCArMSw1MDAgQEAKK2dpdC1jb25maWcoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbmZpZyAtIEdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gWy0tdHlwZT08dHlwZT5dIFstLXNob3ctb3JpZ2luXSBbLS1zaG93LXNjb3BlXSBbLXp8LS1udWxsXSBuYW1lIFt2YWx1ZSBbdmFsdWVfcmVnZXhdXQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLS10eXBlPTx0eXBlPl0gLS1hZGQgbmFtZSB2YWx1ZQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLS10eXBlPTx0eXBlPl0gLS1yZXBsYWNlLWFsbCBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gWy0tdHlwZT08dHlwZT5dIFstLXNob3ctb3JpZ2luXSBbLS1zaG93LXNjb3BlXSBbLXp8LS1udWxsXSAtLWdldCBuYW1lIFt2YWx1ZV9yZWdleF0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gWy0tdHlwZT08dHlwZT5dIFstLXNob3ctb3JpZ2luXSBbLS1zaG93LXNjb3BlXSBbLXp8LS1udWxsXSAtLWdldC1hbGwgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFstLXR5cGU9PHR5cGU+XSBbLS1zaG93LW9yaWdpbl0gWy0tc2hvdy1zY29wZV0gWy16fC0tbnVsbF0gWy0tbmFtZS1vbmx5XSAtLWdldC1yZWdleHAgbmFtZV9yZWdleCBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFstLXR5cGU9PHR5cGU+XSBbLXp8LS1udWxsXSAtLWdldC11cmxtYXRjaCBuYW1lIFVSTAorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLXVuc2V0IG5hbWUgW3ZhbHVlX3JlZ2V4XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLXVuc2V0LWFsbCBuYW1lIFt2YWx1ZV9yZWdleF0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gLS1yZW5hbWUtc2VjdGlvbiBvbGRfbmFtZSBuZXdfbmFtZQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLXJlbW92ZS1zZWN0aW9uIG5hbWUKKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gWy0tc2hvdy1vcmlnaW5dIFstLXNob3ctc2NvcGVdIFstenwtLW51bGxdIFstLW5hbWUtb25seV0gLWwgfCAtLWxpc3QKKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gLS1nZXQtY29sb3IgbmFtZSBbZGVmYXVsdF0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gLS1nZXQtY29sb3Jib29sIG5hbWUgW3N0ZG91dC1pcy10dHldCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC1lIHwgLS1lZGl0CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorWW91IGNhbiBxdWVyeS9zZXQvcmVwbGFjZS91bnNldCBvcHRpb25zIHdpdGggdGhpcyBjb21tYW5kLiBUaGUgbmFtZSBpcworYWN0dWFsbHkgdGhlIHNlY3Rpb24gYW5kIHRoZSBrZXkgc2VwYXJhdGVkIGJ5IGEgZG90LCBhbmQgdGhlIHZhbHVlIHdpbGwgYmUKK2VzY2FwZWQuCisKK011bHRpcGxlIGxpbmVzIGNhbiBiZSBhZGRlZCB0byBhbiBvcHRpb24gYnkgdXNpbmcgdGhlIGAtLWFkZGAgb3B0aW9uLgorSWYgeW91IHdhbnQgdG8gdXBkYXRlIG9yIHVuc2V0IGFuIG9wdGlvbiB3aGljaCBjYW4gb2NjdXIgb24gbXVsdGlwbGUKK2xpbmVzLCBhIFBPU0lYIHJlZ2V4cCBgdmFsdWVfcmVnZXhgIG5lZWRzIHRvIGJlIGdpdmVuLiAgT25seSB0aGUKK2V4aXN0aW5nIHZhbHVlcyB0aGF0IG1hdGNoIHRoZSByZWdleHAgYXJlIHVwZGF0ZWQgb3IgdW5zZXQuICBJZgoreW91IHdhbnQgdG8gaGFuZGxlIHRoZSBsaW5lcyB0aGF0IGRvICpub3QqIG1hdGNoIHRoZSByZWdleCwganVzdAorcHJlcGVuZCBhIHNpbmdsZSBleGNsYW1hdGlvbiBtYXJrIGluIGZyb250IChzZWUgYWxzbyA8PEVYQU1QTEVTPj4pLgorCitUaGUgYC0tdHlwZT08dHlwZT5gIG9wdGlvbiBpbnN0cnVjdHMgJ2dpdCBjb25maWcnIHRvIGVuc3VyZSB0aGF0IGluY29taW5nIGFuZAorb3V0Z29pbmcgdmFsdWVzIGFyZSBjYW5vbmljYWxpemUtYWJsZSB1bmRlciB0aGUgZ2l2ZW4gPHR5cGU+LiAgSWYgbm8KK2AtLXR5cGU9PHR5cGU+YCBpcyBnaXZlbiwgbm8gY2Fub25pY2FsaXphdGlvbiB3aWxsIGJlIHBlcmZvcm1lZC4gQ2FsbGVycyBtYXkKK3Vuc2V0IGFuIGV4aXN0aW5nIGAtLXR5cGVgIHNwZWNpZmllciB3aXRoIGAtLW5vLXR5cGVgLgorCitXaGVuIHJlYWRpbmcsIHRoZSB2YWx1ZXMgYXJlIHJlYWQgZnJvbSB0aGUgc3lzdGVtLCBnbG9iYWwgYW5kCityZXBvc2l0b3J5IGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZXMgYnkgZGVmYXVsdCwgYW5kIG9wdGlvbnMKK2AtLXN5c3RlbWAsIGAtLWdsb2JhbGAsIGAtLWxvY2FsYCwgYC0td29ya3RyZWVgIGFuZAorYC0tZmlsZSA8ZmlsZW5hbWU+YCBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBjb21tYW5kIHRvIHJlYWQgZnJvbSBvbmx5Cit0aGF0IGxvY2F0aW9uIChzZWUgPDxGSUxFUz4+KS4KKworV2hlbiB3cml0aW5nLCB0aGUgbmV3IHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlIHJlcG9zaXRvcnkgbG9jYWwKK2NvbmZpZ3VyYXRpb24gZmlsZSBieSBkZWZhdWx0LCBhbmQgb3B0aW9ucyBgLS1zeXN0ZW1gLCBgLS1nbG9iYWxgLAorYC0td29ya3RyZWVgLCBgLS1maWxlIDxmaWxlbmFtZT5gIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIGNvbW1hbmQgdG8KK3dyaXRlIHRvIHRoYXQgbG9jYXRpb24gKHlvdSBjYW4gc2F5IGAtLWxvY2FsYCBidXQgdGhhdCBpcyB0aGUKK2RlZmF1bHQpLgorCitUaGlzIGNvbW1hbmQgd2lsbCBmYWlsIHdpdGggbm9uLXplcm8gc3RhdHVzIHVwb24gZXJyb3IuICBTb21lIGV4aXQKK2NvZGVzIGFyZToKKworLSBUaGUgc2VjdGlvbiBvciBrZXkgaXMgaW52YWxpZCAocmV0PTEpLAorLSBubyBzZWN0aW9uIG9yIG5hbWUgd2FzIHByb3ZpZGVkIChyZXQ9MiksCistIHRoZSBjb25maWcgZmlsZSBpcyBpbnZhbGlkIChyZXQ9MyksCistIHRoZSBjb25maWcgZmlsZSBjYW5ub3QgYmUgd3JpdHRlbiAocmV0PTQpLAorLSB5b3UgdHJ5IHRvIHVuc2V0IGFuIG9wdGlvbiB3aGljaCBkb2VzIG5vdCBleGlzdCAocmV0PTUpLAorLSB5b3UgdHJ5IHRvIHVuc2V0L3NldCBhbiBvcHRpb24gZm9yIHdoaWNoIG11bHRpcGxlIGxpbmVzIG1hdGNoIChyZXQ9NSksIG9yCistIHlvdSB0cnkgdG8gdXNlIGFuIGludmFsaWQgcmVnZXhwIChyZXQ9NikuCisKK09uIHN1Y2Nlc3MsIHRoZSBjb21tYW5kIHJldHVybnMgdGhlIGV4aXQgY29kZSAwLgorCitPUFRJT05TCistLS0tLS0tCisKKy0tcmVwbGFjZS1hbGw6OgorCURlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVwbGFjZSBhdCBtb3N0IG9uZSBsaW5lLiBUaGlzIHJlcGxhY2VzCisJYWxsIGxpbmVzIG1hdGNoaW5nIHRoZSBrZXkgKGFuZCBvcHRpb25hbGx5IHRoZSB2YWx1ZV9yZWdleCkuCisKKy0tYWRkOjoKKwlBZGRzIGEgbmV3IGxpbmUgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGFsdGVyaW5nIGFueSBleGlzdGluZworCXZhbHVlcy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgcHJvdmlkaW5nICdeJCcgYXMgdGhlIHZhbHVlX3JlZ2V4CisJaW4gYC0tcmVwbGFjZS1hbGxgLgorCistLWdldDo6CisJR2V0IHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBrZXkgKG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSByZWdleAorCW1hdGNoaW5nIHRoZSB2YWx1ZSkuIFJldHVybnMgZXJyb3IgY29kZSAxIGlmIHRoZSBrZXkgd2FzIG5vdAorCWZvdW5kIGFuZCB0aGUgbGFzdCB2YWx1ZSBpZiBtdWx0aXBsZSBrZXkgdmFsdWVzIHdlcmUgZm91bmQuCisKKy0tZ2V0LWFsbDo6CisJTGlrZSBnZXQsIGJ1dCByZXR1cm5zIGFsbCB2YWx1ZXMgZm9yIGEgbXVsdGktdmFsdWVkIGtleS4KKworLS1nZXQtcmVnZXhwOjoKKwlMaWtlIC0tZ2V0LWFsbCwgYnV0IGludGVycHJldHMgdGhlIG5hbWUgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kCisJd3JpdGVzIG91dCB0aGUga2V5IG5hbWVzLiAgUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGlzIGN1cnJlbnRseQorCWNhc2Utc2Vuc2l0aXZlIGFuZCBkb25lIGFnYWluc3QgYSBjYW5vbmljYWxpemVkIHZlcnNpb24gb2YgdGhlIGtleQorCWluIHdoaWNoIHNlY3Rpb24gYW5kIHZhcmlhYmxlIG5hbWVzIGFyZSBsb3dlcmNhc2VkLCBidXQgc3Vic2VjdGlvbgorCW5hbWVzIGFyZSBub3QuCisKKy0tZ2V0LXVybG1hdGNoIG5hbWUgVVJMOjoKKwlXaGVuIGdpdmVuIGEgdHdvLXBhcnQgbmFtZSBzZWN0aW9uLmtleSwgdGhlIHZhbHVlIGZvcgorCXNlY3Rpb24uPHVybD4ua2V5IHdob3NlIDx1cmw+IHBhcnQgbWF0Y2hlcyB0aGUgYmVzdCB0byB0aGUKKwlnaXZlbiBVUkwgaXMgcmV0dXJuZWQgKGlmIG5vIHN1Y2gga2V5IGV4aXN0cywgdGhlIHZhbHVlIGZvcgorCXNlY3Rpb24ua2V5IGlzIHVzZWQgYXMgYSBmYWxsYmFjaykuICBXaGVuIGdpdmVuIGp1c3QgdGhlCisJc2VjdGlvbiBhcyBuYW1lLCBkbyBzbyBmb3IgYWxsIHRoZSBrZXlzIGluIHRoZSBzZWN0aW9uIGFuZAorCWxpc3QgdGhlbS4gIFJldHVybnMgZXJyb3IgY29kZSAxIGlmIG5vIHZhbHVlIGlzIGZvdW5kLgorCistLWdsb2JhbDo6CisJRm9yIHdyaXRpbmcgb3B0aW9uczogd3JpdGUgdG8gZ2xvYmFsIGB+Ly5naXRjb25maWdgIGZpbGUKKwlyYXRoZXIgdGhhbiB0aGUgcmVwb3NpdG9yeSBgLmdpdC9jb25maWdgLCB3cml0ZSB0bworCWAkWERHX0NPTkZJR19IT01FL2dpdC9jb25maWdgIGZpbGUgaWYgdGhpcyBmaWxlIGV4aXN0cyBhbmQgdGhlCisJYH4vLmdpdGNvbmZpZ2AgZmlsZSBkb2Vzbid0LgorKworRm9yIHJlYWRpbmcgb3B0aW9uczogcmVhZCBvbmx5IGZyb20gZ2xvYmFsIGB+Ly5naXRjb25maWdgIGFuZCBmcm9tCitgJFhER19DT05GSUdfSE9NRS9naXQvY29uZmlnYCByYXRoZXIgdGhhbiBmcm9tIGFsbCBhdmFpbGFibGUgZmlsZXMuCisrCitTZWUgYWxzbyA8PEZJTEVTPj4uCisKKy0tc3lzdGVtOjoKKwlGb3Igd3JpdGluZyBvcHRpb25zOiB3cml0ZSB0byBzeXN0ZW0td2lkZQorCWAkKHByZWZpeCkvZXRjL2dpdGNvbmZpZ2AgcmF0aGVyIHRoYW4gdGhlIHJlcG9zaXRvcnkKKwlgLmdpdC9jb25maWdgLgorKworRm9yIHJlYWRpbmcgb3B0aW9uczogcmVhZCBvbmx5IGZyb20gc3lzdGVtLXdpZGUgYCQocHJlZml4KS9ldGMvZ2l0Y29uZmlnYAorcmF0aGVyIHRoYW4gZnJvbSBhbGwgYXZhaWxhYmxlIGZpbGVzLgorKworU2VlIGFsc28gPDxGSUxFUz4+LgorCistLWxvY2FsOjoKKwlGb3Igd3JpdGluZyBvcHRpb25zOiB3cml0ZSB0byB0aGUgcmVwb3NpdG9yeSBgLmdpdC9jb25maWdgIGZpbGUuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKysKK0ZvciByZWFkaW5nIG9wdGlvbnM6IHJlYWQgb25seSBmcm9tIHRoZSByZXBvc2l0b3J5IGAuZ2l0L2NvbmZpZ2AgcmF0aGVyIHRoYW4KK2Zyb20gYWxsIGF2YWlsYWJsZSBmaWxlcy4KKysKK1NlZSBhbHNvIDw8RklMRVM+Pi4KKworLS13b3JrdHJlZTo6CisJU2ltaWxhciB0byBgLS1sb2NhbGAgZXhjZXB0IHRoYXQgYC5naXQvY29uZmlnLndvcmt0cmVlYCBpcworCXJlYWQgZnJvbSBvciB3cml0dGVuIHRvIGlmIGBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnYCBpcworCXByZXNlbnQuIElmIG5vdCBpdCdzIHRoZSBzYW1lIGFzIGAtLWxvY2FsYC4KKworLWYgY29uZmlnLWZpbGU6OgorLS1maWxlIGNvbmZpZy1maWxlOjoKKwlVc2UgdGhlIGdpdmVuIGNvbmZpZyBmaWxlIGluc3RlYWQgb2YgdGhlIG9uZSBzcGVjaWZpZWQgYnkgR0lUX0NPTkZJRy4KKworLS1ibG9iIGJsb2I6OgorCVNpbWlsYXIgdG8gYC0tZmlsZWAgYnV0IHVzZSB0aGUgZ2l2ZW4gYmxvYiBpbnN0ZWFkIG9mIGEgZmlsZS4gRS5nLgorCXlvdSBjYW4gdXNlICdtYXN0ZXI6LmdpdG1vZHVsZXMnIHRvIHJlYWQgdmFsdWVzIGZyb20gdGhlIGZpbGUKKwknLmdpdG1vZHVsZXMnIGluIHRoZSBtYXN0ZXIgYnJhbmNoLiBTZWUgIlNQRUNJRllJTkcgUkVWSVNJT05TIgorCXNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gZm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mCisJd2F5cyB0byBzcGVsbCBibG9iIG5hbWVzLgorCistLXJlbW92ZS1zZWN0aW9uOjoKKwlSZW1vdmUgdGhlIGdpdmVuIHNlY3Rpb24gZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCistLXJlbmFtZS1zZWN0aW9uOjoKKwlSZW5hbWUgdGhlIGdpdmVuIHNlY3Rpb24gdG8gYSBuZXcgbmFtZS4KKworLS11bnNldDo6CisJUmVtb3ZlIHRoZSBsaW5lIG1hdGNoaW5nIHRoZSBrZXkgZnJvbSBjb25maWcgZmlsZS4KKworLS11bnNldC1hbGw6OgorCVJlbW92ZSBhbGwgbGluZXMgbWF0Y2hpbmcgdGhlIGtleSBmcm9tIGNvbmZpZyBmaWxlLgorCistbDo6CistLWxpc3Q6OgorCUxpc3QgYWxsIHZhcmlhYmxlcyBzZXQgaW4gY29uZmlnIGZpbGUsIGFsb25nIHdpdGggdGhlaXIgdmFsdWVzLgorCistLXR5cGUgPHR5cGU+OjoKKyAgJ2dpdCBjb25maWcnIHdpbGwgZW5zdXJlIHRoYXQgYW55IGlucHV0IG9yIG91dHB1dCBpcyB2YWxpZCB1bmRlciB0aGUgZ2l2ZW4KKyAgdHlwZSBjb25zdHJhaW50KHMpLCBhbmQgd2lsbCBjYW5vbmljYWxpemUgb3V0Z29pbmcgdmFsdWVzIGluIGA8dHlwZT5gJ3MKKyAgY2Fub25pY2FsIGZvcm0uCisrCitWYWxpZCBgPHR5cGU+YCdzIGluY2x1ZGU6CisrCistICdib29sJzogY2Fub25pY2FsaXplIHZhbHVlcyBhcyBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCistICdpbnQnOiBjYW5vbmljYWxpemUgdmFsdWVzIGFzIHNpbXBsZSBkZWNpbWFsIG51bWJlcnMuIEFuIG9wdGlvbmFsIHN1ZmZpeCBvZgorICAnaycsICdtJywgb3IgJ2cnIHdpbGwgY2F1c2UgdGhlIHZhbHVlIHRvIGJlIG11bHRpcGxpZWQgYnkgMTAyNCwgMTA0ODU3Niwgb3IKKyAgMTA3Mzc0MTgyNCB1cG9uIGlucHV0LgorLSAnYm9vbC1vci1pbnQnOiBjYW5vbmljYWxpemUgYWNjb3JkaW5nIHRvIGVpdGhlciAnYm9vbCcgb3IgJ2ludCcsIGFzIGRlc2NyaWJlZAorICBhYm92ZS4KKy0gJ3BhdGgnOiBjYW5vbmljYWxpemUgYnkgYWRkaW5nIGEgbGVhZGluZyBgfmAgdG8gdGhlIHZhbHVlIG9mIGAkSE9NRWAgYW5kCisgIGB+dXNlcmAgdG8gdGhlIGhvbWUgZGlyZWN0b3J5IGZvciB0aGUgc3BlY2lmaWVkIHVzZXIuIFRoaXMgc3BlY2lmaWVyIGhhcyBubworICBlZmZlY3Qgd2hlbiBzZXR0aW5nIHRoZSB2YWx1ZSAoYnV0IHlvdSBjYW4gdXNlIGBnaXQgY29uZmlnIHNlY3Rpb24udmFyaWFibGUKKyAgfi9gIGZyb20gdGhlIGNvbW1hbmQgbGluZSB0byBsZXQgeW91ciBzaGVsbCBkbyB0aGUgZXhwYW5zaW9uLikKKy0gJ2V4cGlyeS1kYXRlJzogY2Fub25pY2FsaXplIGJ5IGNvbnZlcnRpbmcgZnJvbSBhIGZpeGVkIG9yIHJlbGF0aXZlIGRhdGUtc3RyaW5nCisgIHRvIGEgdGltZXN0YW1wLiBUaGlzIHNwZWNpZmllciBoYXMgbm8gZWZmZWN0IHdoZW4gc2V0dGluZyB0aGUgdmFsdWUuCistICdjb2xvcic6IFdoZW4gZ2V0dGluZyBhIHZhbHVlLCBjYW5vbmljYWxpemUgYnkgY29udmVydGluZyB0byBhbiBBTlNJIGNvbG9yCisgIGVzY2FwZSBzZXF1ZW5jZS4gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGEgc2FuaXR5LWNoZWNrIGlzIHBlcmZvcm1lZCB0byBlbnN1cmUKKyAgdGhhdCB0aGUgZ2l2ZW4gdmFsdWUgaXMgY2Fub25pY2FsaXplLWFibGUgYXMgYW4gQU5TSSBjb2xvciwgYnV0IGl0IGlzIHdyaXR0ZW4KKyAgYXMtaXMuCisrCisKKy0tYm9vbDo6CistLWludDo6CistLWJvb2wtb3ItaW50OjoKKy0tcGF0aDo6CistLWV4cGlyeS1kYXRlOjoKKyAgSGlzdG9yaWNhbCBvcHRpb25zIGZvciBzZWxlY3RpbmcgYSB0eXBlIHNwZWNpZmllci4gUHJlZmVyIGluc3RlYWQgYC0tdHlwZWAKKyAgKHNlZSBhYm92ZSkuCisKKy0tbm8tdHlwZTo6CisgIFVuLXNldHMgdGhlIHByZXZpb3VzbHkgc2V0IHR5cGUgc3BlY2lmaWVyIChpZiBvbmUgd2FzIHByZXZpb3VzbHkgc2V0KS4gVGhpcworICBvcHRpb24gcmVxdWVzdHMgdGhhdCAnZ2l0IGNvbmZpZycgbm90IGNhbm9uaWNhbGl6ZSB0aGUgcmV0cmlldmVkIHZhcmlhYmxlLgorICBgLS1uby10eXBlYCBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgYC0tdHlwZT08dHlwZT5gIG9yIGAtLTx0eXBlPmAuCisKKy16OjoKKy0tbnVsbDo6CisJRm9yIGFsbCBvcHRpb25zIHRoYXQgb3V0cHV0IHZhbHVlcyBhbmQvb3Iga2V5cywgYWx3YXlzCisJZW5kIHZhbHVlcyB3aXRoIHRoZSBudWxsIGNoYXJhY3RlciAoaW5zdGVhZCBvZiBhCisJbmV3bGluZSkuIFVzZSBuZXdsaW5lIGluc3RlYWQgYXMgYSBkZWxpbWl0ZXIgYmV0d2VlbgorCWtleSBhbmQgdmFsdWUuIFRoaXMgYWxsb3dzIGZvciBzZWN1cmUgcGFyc2luZyBvZiB0aGUKKwlvdXRwdXQgd2l0aG91dCBnZXR0aW5nIGNvbmZ1c2VkIGUuZy4gYnkgdmFsdWVzIHRoYXQKKwljb250YWluIGxpbmUgYnJlYWtzLgorCistLW5hbWUtb25seTo6CisJT3V0cHV0IG9ubHkgdGhlIG5hbWVzIG9mIGNvbmZpZyB2YXJpYWJsZXMgZm9yIGAtLWxpc3RgIG9yCisJYC0tZ2V0LXJlZ2V4cGAuCisKKy0tc2hvdy1vcmlnaW46OgorCUF1Z21lbnQgdGhlIG91dHB1dCBvZiBhbGwgcXVlcmllZCBjb25maWcgb3B0aW9ucyB3aXRoIHRoZQorCW9yaWdpbiB0eXBlIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSBhbmQKKwl0aGUgYWN0dWFsIG9yaWdpbiAoY29uZmlnIGZpbGUgcGF0aCwgcmVmLCBvciBibG9iIGlkIGlmCisJYXBwbGljYWJsZSkuCisKKy0tc2hvdy1zY29wZTo6CisJU2ltaWxhciB0byBgLS1zaG93LW9yaWdpbmAgaW4gdGhhdCBpdCBhdWdtZW50cyB0aGUgb3V0cHV0IG9mCisJYWxsIHF1ZXJpZWQgY29uZmlnIG9wdGlvbnMgd2l0aCB0aGUgc2NvcGUgb2YgdGhhdCB2YWx1ZQorCShsb2NhbCwgZ2xvYmFsLCBzeXN0ZW0sIGNvbW1hbmQpLgorCistLWdldC1jb2xvcmJvb2wgbmFtZSBbc3Rkb3V0LWlzLXR0eV06OgorCisJRmluZCB0aGUgY29sb3Igc2V0dGluZyBmb3IgYG5hbWVgIChlLmcuIGBjb2xvci5kaWZmYCkgYW5kIG91dHB1dAorCSJ0cnVlIiBvciAiZmFsc2UiLiAgYHN0ZG91dC1pcy10dHlgIHNob3VsZCBiZSBlaXRoZXIgInRydWUiIG9yCisJImZhbHNlIiwgYW5kIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNvbmZpZ3VyYXRpb24gc2F5cworCSJhdXRvIi4gIElmIGBzdGRvdXQtaXMtdHR5YCBpcyBtaXNzaW5nLCB0aGVuIGNoZWNrcyB0aGUgc3RhbmRhcmQKKwlvdXRwdXQgb2YgdGhlIGNvbW1hbmQgaXRzZWxmLCBhbmQgZXhpdHMgd2l0aCBzdGF0dXMgMCBpZiBjb2xvcgorCWlzIHRvIGJlIHVzZWQsIG9yIGV4aXRzIHdpdGggc3RhdHVzIDEgb3RoZXJ3aXNlLgorCVdoZW4gdGhlIGNvbG9yIHNldHRpbmcgZm9yIGBuYW1lYCBpcyB1bmRlZmluZWQsIHRoZSBjb21tYW5kIHVzZXMKKwlgY29sb3IudWlgIGFzIGZhbGxiYWNrLgorCistLWdldC1jb2xvciBuYW1lIFtkZWZhdWx0XTo6CisKKwlGaW5kIHRoZSBjb2xvciBjb25maWd1cmVkIGZvciBgbmFtZWAgKGUuZy4gYGNvbG9yLmRpZmYubmV3YCkgYW5kCisJb3V0cHV0IGl0IGFzIHRoZSBBTlNJIGNvbG9yIGVzY2FwZSBzZXF1ZW5jZSB0byB0aGUgc3RhbmRhcmQKKwlvdXRwdXQuICBUaGUgb3B0aW9uYWwgYGRlZmF1bHRgIHBhcmFtZXRlciBpcyB1c2VkIGluc3RlYWQsIGlmCisJdGhlcmUgaXMgbm8gY29sb3IgY29uZmlndXJlZCBmb3IgYG5hbWVgLgorKworYC0tdHlwZT1jb2xvciBbLS1kZWZhdWx0PTxkZWZhdWx0Pl1gIGlzIHByZWZlcnJlZCBvdmVyIGAtLWdldC1jb2xvcmAKKyhidXQgbm90ZSB0aGF0IGAtLWdldC1jb2xvcmAgd2lsbCBvbWl0IHRoZSB0cmFpbGluZyBuZXdsaW5lIHByaW50ZWQgYnkKK2AtLXR5cGU9Y29sb3JgKS4KKworLWU6OgorLS1lZGl0OjoKKwlPcGVucyBhbiBlZGl0b3IgdG8gbW9kaWZ5IHRoZSBzcGVjaWZpZWQgY29uZmlnIGZpbGU7IGVpdGhlcgorCWAtLXN5c3RlbWAsIGAtLWdsb2JhbGAsIG9yIHJlcG9zaXRvcnkgKGRlZmF1bHQpLgorCistLVtuby1daW5jbHVkZXM6OgorCVJlc3BlY3QgYGluY2x1ZGUuKmAgZGlyZWN0aXZlcyBpbiBjb25maWcgZmlsZXMgd2hlbiBsb29raW5nIHVwCisJdmFsdWVzLiBEZWZhdWx0cyB0byBgb2ZmYCB3aGVuIGEgc3BlY2lmaWMgZmlsZSBpcyBnaXZlbiAoZS5nLiwKKwl1c2luZyBgLS1maWxlYCwgYC0tZ2xvYmFsYCwgZXRjKSBhbmQgYG9uYCB3aGVuIHNlYXJjaGluZyBhbGwKKwljb25maWcgZmlsZXMuCisKKy0tZGVmYXVsdCA8dmFsdWU+OjoKKyAgV2hlbiB1c2luZyBgLS1nZXRgLCBhbmQgdGhlIHJlcXVlc3RlZCB2YXJpYWJsZSBpcyBub3QgZm91bmQsIGJlaGF2ZSBhcyBpZgorICA8dmFsdWU+IHdlcmUgdGhlIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSB0aGF0IHZhcmlhYmxlLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitgcGFnZXIuY29uZmlnYCBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIGxpc3RpbmcgY29uZmlndXJhdGlvbiwgaS5lLiwgd2hlbgordXNpbmcgYC0tbGlzdGAgb3IgYW55IG9mIHRoZSBgLS1nZXQtKmAgd2hpY2ggbWF5IHJldHVybiBtdWx0aXBsZSByZXN1bHRzLgorVGhlIGRlZmF1bHQgaXMgdG8gdXNlIGEgcGFnZXIuCisKK1tbRklMRVNdXQorRklMRVMKKy0tLS0tCisKK0lmIG5vdCBzZXQgZXhwbGljaXRseSB3aXRoIGAtLWZpbGVgLCB0aGVyZSBhcmUgZm91ciBmaWxlcyB3aGVyZQorJ2dpdCBjb25maWcnIHdpbGwgc2VhcmNoIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnM6CisKKyQocHJlZml4KS9ldGMvZ2l0Y29uZmlnOjoKKwlTeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCisKKyRYREdfQ09ORklHX0hPTUUvZ2l0L2NvbmZpZzo6CisJU2Vjb25kIHVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBJZiAkWERHX0NPTkZJR19IT01FIGlzIG5vdCBzZXQKKwlvciBlbXB0eSwgYCRIT01FLy5jb25maWcvZ2l0L2NvbmZpZ2Agd2lsbCBiZSB1c2VkLiBBbnkgc2luZ2xlLXZhbHVlZAorCXZhcmlhYmxlIHNldCBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB3aGF0ZXZlciBpcyBpbgorCWB+Ly5naXRjb25maWdgLiAgSXQgaXMgYSBnb29kIGlkZWEgbm90IHRvIGNyZWF0ZSB0aGlzIGZpbGUgaWYKKwl5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQsIGFzIHN1cHBvcnQgZm9yIHRoaXMKKwlmaWxlIHdhcyBhZGRlZCBmYWlybHkgcmVjZW50bHkuCisKK34vLmdpdGNvbmZpZzo6CisJVXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuIEFsc28gY2FsbGVkICJnbG9iYWwiCisJY29uZmlndXJhdGlvbiBmaWxlLgorCiskR0lUX0RJUi9jb25maWc6OgorCVJlcG9zaXRvcnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLgorCiskR0lUX0RJUi9jb25maWcud29ya3RyZWU6OgorCVRoaXMgaXMgb3B0aW9uYWwgYW5kIGlzIG9ubHkgc2VhcmNoZWQgd2hlbgorCWBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnYCBpcyBwcmVzZW50IGluICRHSVRfRElSL2NvbmZpZy4KKworSWYgbm8gZnVydGhlciBvcHRpb25zIGFyZSBnaXZlbiwgYWxsIHJlYWRpbmcgb3B0aW9ucyB3aWxsIHJlYWQgYWxsIG9mIHRoZXNlCitmaWxlcyB0aGF0IGFyZSBhdmFpbGFibGUuIElmIHRoZSBnbG9iYWwgb3IgdGhlIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24KK2ZpbGUgYXJlIG5vdCBhdmFpbGFibGUgdGhleSB3aWxsIGJlIGlnbm9yZWQuIElmIHRoZSByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24KK2ZpbGUgaXMgbm90IGF2YWlsYWJsZSBvciByZWFkYWJsZSwgJ2dpdCBjb25maWcnIHdpbGwgZXhpdCB3aXRoIGEgbm9uLXplcm8KK2Vycm9yIGNvZGUuIEhvd2V2ZXIsIGluIG5laXRoZXIgY2FzZSB3aWxsIGFuIGVycm9yIG1lc3NhZ2UgYmUgaXNzdWVkLgorCitUaGUgZmlsZXMgYXJlIHJlYWQgaW4gdGhlIG9yZGVyIGdpdmVuIGFib3ZlLCB3aXRoIGxhc3QgdmFsdWUgZm91bmQgdGFraW5nCitwcmVjZWRlbmNlIG92ZXIgdmFsdWVzIHJlYWQgZWFybGllci4gIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSB0YWtlbiB0aGVuIGFsbAordmFsdWVzIG9mIGEga2V5IGZyb20gYWxsIGZpbGVzIHdpbGwgYmUgdXNlZC4KKworWW91IG1heSBvdmVycmlkZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3aGVuIHJ1bm5pbmcgYW55IGdpdAorY29tbWFuZCBieSB1c2luZyB0aGUgYC1jYCBvcHRpb24uIFNlZSBsaW5rZ2l0OmdpdFsxXSBmb3IgZGV0YWlscy4KKworQWxsIHdyaXRpbmcgb3B0aW9ucyB3aWxsIHBlciBkZWZhdWx0IHdyaXRlIHRvIHRoZSByZXBvc2l0b3J5IHNwZWNpZmljCitjb25maWd1cmF0aW9uIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGFsc28gYWZmZWN0cyBvcHRpb25zIGxpa2UgYC0tcmVwbGFjZS1hbGxgCithbmQgYC0tdW5zZXRgLiAqJ2dpdCBjb25maWcnIHdpbGwgb25seSBldmVyIGNoYW5nZSBvbmUgZmlsZSBhdCBhIHRpbWUqLgorCitZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIHJ1bGVzIGVpdGhlciBieSBjb21tYW5kLWxpbmUgb3B0aW9ucyBvciBieSBlbnZpcm9ubWVudAordmFyaWFibGVzLiBUaGUgYC0tZ2xvYmFsYCwgYC0tc3lzdGVtYCBhbmQgYC0td29ya3RyZWVgIG9wdGlvbnMgd2lsbCBsaW1pdAordGhlIGZpbGUgdXNlZCB0byB0aGUgZ2xvYmFsLCBzeXN0ZW0td2lkZSBvciBwZXItd29ya3RyZWUgZmlsZSByZXNwZWN0aXZlbHkuCitUaGUgYEdJVF9DT05GSUdgIGVudmlyb25tZW50IHZhcmlhYmxlIGhhcyBhIHNpbWlsYXIgZWZmZWN0LCBidXQgeW91CitjYW4gc3BlY2lmeSBhbnkgZmlsZW5hbWUgeW91IHdhbnQuCisKKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCisKK0dJVF9DT05GSUc6OgorCVRha2UgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZ2l2ZW4gZmlsZSBpbnN0ZWFkIG9mIC5naXQvY29uZmlnLgorCVVzaW5nIHRoZSAiLS1nbG9iYWwiIG9wdGlvbiBmb3JjZXMgdGhpcyB0byB+Ly5naXRjb25maWcuIFVzaW5nIHRoZQorCSItLXN5c3RlbSIgb3B0aW9uIGZvcmNlcyB0aGlzIHRvICQocHJlZml4KS9ldGMvZ2l0Y29uZmlnLgorCitHSVRfQ09ORklHX05PU1lTVEVNOjoKKwlXaGV0aGVyIHRvIHNraXAgcmVhZGluZyBzZXR0aW5ncyBmcm9tIHRoZSBzeXN0ZW0td2lkZQorCSQocHJlZml4KS9ldGMvZ2l0Y29uZmlnIGZpbGUuIFNlZSBsaW5rZ2l0OmdpdFsxXSBmb3IgZGV0YWlscy4KKworU2VlIGFsc28gPDxGSUxFUz4+LgorCisKK1tbRVhBTVBMRVNdXQorRVhBTVBMRVMKKy0tLS0tLS0tCisKK0dpdmVuIGEgLmdpdC9jb25maWcgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBpcyB0aGUgY29uZmlnIGZpbGUsIGFuZAorIyBhICcjJyBvciAnOycgY2hhcmFjdGVyIGluZGljYXRlcworIyBhIGNvbW1lbnQKKyMKKworOyBjb3JlIHZhcmlhYmxlcworW2NvcmVdCisJOyBEb24ndCB0cnVzdCBmaWxlIG1vZGVzCisJZmlsZW1vZGUgPSBmYWxzZQorCis7IE91ciBkaWZmIGFsZ29yaXRobQorW2RpZmZdCisJZXh0ZXJuYWwgPSAvdXNyL2xvY2FsL2Jpbi9kaWZmLXdyYXBwZXIKKwlyZW5hbWVzID0gdHJ1ZQorCis7IFByb3h5IHNldHRpbmdzCitbY29yZV0KKwlnaXRwcm94eT1wcm94eS1jb21tYW5kIGZvciBrZXJuZWwub3JnCisJZ2l0cHJveHk9ZGVmYXVsdC1wcm94eSA7IGZvciBhbGwgdGhlIHJlc3QKKworOyBIVFRQCitbaHR0cF0KKwlzc2xWZXJpZnkKK1todHRwICJodHRwczovL3dlYWsuZXhhbXBsZS5jb20iXQorCXNzbFZlcmlmeSA9IGZhbHNlCisJY29va2llRmlsZSA9IC90bXAvY29va2llLnR4dAorLS0tLS0tLS0tLS0tCisKK3lvdSBjYW4gc2V0IHRoZSBmaWxlbW9kZSB0byB0cnVlIHdpdGgKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgY29yZS5maWxlbW9kZSB0cnVlCistLS0tLS0tLS0tLS0KKworVGhlIGh5cG90aGV0aWNhbCBwcm94eSBjb21tYW5kIGVudHJpZXMgYWN0dWFsbHkgaGF2ZSBhIHBvc3RmaXggdG8gZGlzY2Vybgord2hhdCBVUkwgdGhleSBhcHBseSB0by4gSGVyZSBpcyBob3cgdG8gY2hhbmdlIHRoZSBlbnRyeSBmb3Iga2VybmVsLm9yZwordG8gInNzaCIuCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIGNvcmUuZ2l0cHJveHkgJyJzc2giIGZvciBrZXJuZWwub3JnJyAnZm9yIGtlcm5lbC5vcmckJworLS0tLS0tLS0tLS0tCisKK1RoaXMgbWFrZXMgc3VyZSB0aGF0IG9ubHkgdGhlIGtleS92YWx1ZSBwYWlyIGZvciBrZXJuZWwub3JnIGlzIHJlcGxhY2VkLgorCitUbyBkZWxldGUgdGhlIGVudHJ5IGZvciByZW5hbWVzLCBkbworCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYucmVuYW1lcworLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIGRlbGV0ZSBhbiBlbnRyeSBmb3IgYSBtdWx0aXZhciAobGlrZSBjb3JlLmdpdHByb3h5IGFib3ZlKSwKK3lvdSBoYXZlIHRvIHByb3ZpZGUgYSByZWdleCBtYXRjaGluZyB0aGUgdmFsdWUgb2YgZXhhY3RseSBvbmUgbGluZS4KKworVG8gcXVlcnkgdGhlIHZhbHVlIGZvciBhIGdpdmVuIGtleSwgZG8KKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1nZXQgY29yZS5maWxlbW9kZQorLS0tLS0tLS0tLS0tCisKK29yCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUKKy0tLS0tLS0tLS0tLQorCitvciwgdG8gcXVlcnkgYSBtdWx0aXZhcjoKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1nZXQgY29yZS5naXRwcm94eSAiZm9yIGtlcm5lbC5vcmckIgorLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIGtub3cgYWxsIHRoZSB2YWx1ZXMgZm9yIGEgbXVsdGl2YXIsIGRvOgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLWdldC1hbGwgY29yZS5naXRwcm94eQorLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBsaWtlIHRvIGxpdmUgZGFuZ2Vyb3VzbHksIHlvdSBjYW4gcmVwbGFjZSAqYWxsKiBjb3JlLmdpdHByb3h5IGJ5IGEKK25ldyBvbmUgd2l0aAorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGNvcmUuZ2l0cHJveHkgc3NoCistLS0tLS0tLS0tLS0KKworSG93ZXZlciwgaWYgeW91IHJlYWxseSBvbmx5IHdhbnQgdG8gcmVwbGFjZSB0aGUgbGluZSBmb3IgdGhlIGRlZmF1bHQgcHJveHksCitpLmUuIHRoZSBvbmUgd2l0aG91dCBhICJmb3IgLi4uIiBwb3N0Zml4LCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyBjb3JlLmdpdHByb3h5IHNzaCAnISBmb3IgJworLS0tLS0tLS0tLS0tCisKK1RvIGFjdHVhbGx5IG1hdGNoIG9ubHkgdmFsdWVzIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyaywgeW91IGhhdmUgdG8KKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgc2VjdGlvbi5rZXkgdmFsdWUgJ1shXScKKy0tLS0tLS0tLS0tLQorCitUbyBhZGQgYSBuZXcgcHJveHksIHdpdGhvdXQgYWx0ZXJpbmcgYW55IG9mIHRoZSBleGlzdGluZyBvbmVzLCB1c2UKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1hZGQgY29yZS5naXRwcm94eSAnInByb3h5LWNvbW1hbmQiIGZvciBleGFtcGxlLmNvbScKKy0tLS0tLS0tLS0tLQorCitBbiBleGFtcGxlIHRvIHVzZSBjdXN0b21pemVkIGNvbG9yIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gaW4geW91cgorc2NyaXB0OgorCistLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorV1M9JChnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIGNvbG9yLmRpZmYud2hpdGVzcGFjZSAiYmx1ZSByZXZlcnNlIikKK1JFU0VUPSQoZ2l0IGNvbmZpZyAtLWdldC1jb2xvciAiIiAicmVzZXQiKQorZWNobyAiJHtXU315b3VyIHdoaXRlc3BhY2UgY29sb3Igb3IgYmx1ZSByZXZlcnNlJHtSRVNFVH0iCistLS0tLS0tLS0tLS0KKworRm9yIFVSTHMgaW4gYGh0dHBzOi8vd2Vhay5leGFtcGxlLmNvbWAsIGBodHRwLnNzbFZlcmlmeWAgaXMgc2V0IHRvCitmYWxzZSwgd2hpbGUgaXQgaXMgc2V0IHRvIGB0cnVlYCBmb3IgYWxsIG90aGVyczoKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS10eXBlPWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5zc2x2ZXJpZnkgaHR0cHM6Ly9nb29kLmV4YW1wbGUuY29tCit0cnVlCislIGdpdCBjb25maWcgLS10eXBlPWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5zc2x2ZXJpZnkgaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tCitmYWxzZQorJSBnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIGh0dHAgaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tCitodHRwLmNvb2tpZUZpbGUgL3RtcC9jb29raWUudHh0CitodHRwLnNzbHZlcmlmeSBmYWxzZQorLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6OmNvbmZpZy50eHRbXQorCitCVUdTCistLS0tCitXaGVuIHVzaW5nIHRoZSBkZXByZWNhdGVkIGBbc2VjdGlvbi5zdWJzZWN0aW9uXWAgc3ludGF4LCBjaGFuZ2luZyBhIHZhbHVlCit3aWxsIHJlc3VsdCBpbiBhZGRpbmcgYSBtdWx0aS1saW5lIGtleSBpbnN0ZWFkIG9mIGEgY2hhbmdlLCBpZiB0aGUgc3Vic2VjdGlvbgoraXMgZ2l2ZW4gd2l0aCBhdCBsZWFzdCBvbmUgdXBwZXJjYXNlIGNoYXJhY3Rlci4gRm9yIGV4YW1wbGUgd2hlbiB0aGUgY29uZmlnCitsb29rcyBsaWtlCisKKy0tLS0tLS0tCisgIFtzZWN0aW9uLnN1YnNlY3Rpb25dCisgICAga2V5ID0gdmFsdWUxCistLS0tLS0tLQorCithbmQgcnVubmluZyBgZ2l0IGNvbmZpZyBzZWN0aW9uLlN1YnNlY3Rpb24ua2V5IHZhbHVlMmAgd2lsbCByZXN1bHQgaW4KKworLS0tLS0tLS0KKyAgW3NlY3Rpb24uc3Vic2VjdGlvbl0KKyAgICBrZXkgPSB2YWx1ZTEKKyAgICBrZXkgPSB2YWx1ZTIKKy0tLS0tLS0tCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb3VudC1vYmplY3RzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvdW50LW9iamVjdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWI0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb3VudC1vYmplY3RzLnR4dApAQCAtMCwwICsxLDU0IEBACitnaXQtY291bnQtb2JqZWN0cygxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvdW50LW9iamVjdHMgLSBDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY291bnQtb2JqZWN0cycgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY291bnRzIHRoZSBudW1iZXIgb2YgdW5wYWNrZWQgb2JqZWN0IGZpbGVzIGFuZCBkaXNrIHNwYWNlIGNvbnN1bWVkIGJ5Cit0aGVtLCB0byBoZWxwIHlvdSBkZWNpZGUgd2hlbiBpdCBpcyBhIGdvb2QgdGltZSB0byByZXBhY2suCisKKworT1BUSU9OUworLS0tLS0tLQorLXY6OgorLS12ZXJib3NlOjoKKwlSZXBvcnQgaW4gbW9yZSBkZXRhaWw6CisrCitjb3VudDogdGhlIG51bWJlciBvZiBsb29zZSBvYmplY3RzCisrCitzaXplOiBkaXNrIHNwYWNlIGNvbnN1bWVkIGJ5IGxvb3NlIG9iamVjdHMsIGluIEtpQiAodW5sZXNzIC1IIGlzIHNwZWNpZmllZCkKKysKK2luLXBhY2s6IHRoZSBudW1iZXIgb2YgaW4tcGFjayBvYmplY3RzCisrCitzaXplLXBhY2s6IGRpc2sgc3BhY2UgY29uc3VtZWQgYnkgdGhlIHBhY2tzLCBpbiBLaUIgKHVubGVzcyAtSCBpcyBzcGVjaWZpZWQpCisrCitwcnVuZS1wYWNrYWJsZTogdGhlIG51bWJlciBvZiBsb29zZSBvYmplY3RzIHRoYXQgYXJlIGFsc28gcHJlc2VudCBpbgordGhlIHBhY2tzLiBUaGVzZSBvYmplY3RzIGNvdWxkIGJlIHBydW5lZCB1c2luZyBgZ2l0IHBydW5lLXBhY2tlZGAuCisrCitnYXJiYWdlOiB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIG9iamVjdCBkYXRhYmFzZSB0aGF0IGFyZSBuZWl0aGVyIHZhbGlkIGxvb3NlCitvYmplY3RzIG5vciB2YWxpZCBwYWNrcworKworc2l6ZS1nYXJiYWdlOiBkaXNrIHNwYWNlIGNvbnN1bWVkIGJ5IGdhcmJhZ2UgZmlsZXMsIGluIEtpQiAodW5sZXNzIC1IIGlzCitzcGVjaWZpZWQpCisrCithbHRlcm5hdGU6IGFic29sdXRlIHBhdGggb2YgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZXM7IG1heSBhcHBlYXIKK211bHRpcGxlIHRpbWVzLCBvbmUgbGluZSBwZXIgcGF0aC4gTm90ZSB0aGF0IGlmIHRoZSBwYXRoIGNvbnRhaW5zCitub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMsIGl0IG1heSBiZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZS1xdW90ZXMgYW5kCitjb250YWluIEMtc3R5bGUgYmFja3NsYXNoZWQgZXNjYXBlIHNlcXVlbmNlcy4KKworLUg6OgorLS1odW1hbi1yZWFkYWJsZTo6CisKK1ByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdAorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTFjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24udHh0CkBAIC0wLDAgKzEsMzAgQEAKK2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24oMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiAtIFRlbXBvcmFyaWx5IHN0b3JlIHVzZXIgY3JlZGVudGlhbHMgaW4gbWVtb3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiBbLS1kZWJ1Z10gPHNvY2tldD4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK05PVEU6IFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGludm9rZSB0aGlzIGNvbW1hbmQgeW91cnNlbGY7IGl0IGlzCitzdGFydGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgdXNlIGxpbmtnaXQ6Z2l0LWNyZWRlbnRpYWwtY2FjaGVbMV0uCisKK1RoaXMgY29tbWFuZCBsaXN0ZW5zIG9uIHRoZSBVbml4IGRvbWFpbiBzb2NrZXQgc3BlY2lmaWVkIGJ5IGA8c29ja2V0PmAKK2ZvciBgZ2l0LWNyZWRlbnRpYWwtY2FjaGVgIGNsaWVudHMuIENsaWVudHMgbWF5IHN0b3JlIGFuZCByZXRyaWV2ZQorY3JlZGVudGlhbHMuIEVhY2ggY3JlZGVudGlhbCBpcyBoZWxkIGZvciBhIHRpbWVvdXQgc3BlY2lmaWVkIGJ5IHRoZQorY2xpZW50OyBvbmNlIG5vIGNyZWRlbnRpYWxzIGFyZSBoZWxkLCB0aGUgZGFlbW9uIGV4aXRzLgorCitJZiB0aGUgYC0tZGVidWdgIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBkYWVtb24gZG9lcyBub3QgY2xvc2UgaXRzCitzdGRlcnIgc3RyZWFtLCBhbmQgbWF5IG91dHB1dCBleHRyYSBkaWFnbm9zdGljcyB0byBpdCBldmVuIGFmdGVyIGl0IGhhcworYmVndW4gbGlzdGVuaW5nIGZvciBjbGllbnRzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1jYWNoZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNmMxOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUudHh0CkBAIC0wLDAgKzEsODAgQEAKK2dpdC1jcmVkZW50aWFsLWNhY2hlKDEpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY3JlZGVudGlhbC1jYWNoZSAtIEhlbHBlciB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYXNzd29yZHMgaW4gbWVtb3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJ2NhY2hlIFs8b3B0aW9ucz5dJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBjYWNoZXMgY3JlZGVudGlhbHMgaW4gbWVtb3J5IGZvciB1c2UgYnkgZnV0dXJlIEdpdAorcHJvZ3JhbXMuIFRoZSBzdG9yZWQgY3JlZGVudGlhbHMgbmV2ZXIgdG91Y2ggdGhlIGRpc2ssIGFuZCBhcmUgZm9yZ290dGVuCithZnRlciBhIGNvbmZpZ3VyYWJsZSB0aW1lb3V0LiAgVGhlIGNhY2hlIGlzIGFjY2Vzc2libGUgb3ZlciBhIFVuaXgKK2RvbWFpbiBzb2NrZXQsIHJlc3RyaWN0ZWQgdG8gdGhlIGN1cnJlbnQgdXNlciBieSBmaWxlc3lzdGVtIHBlcm1pc3Npb25zLgorCitZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBpbnZva2UgdGhpcyBjb21tYW5kIGRpcmVjdGx5OyBpdCBpcyBtZWFudCB0bworYmUgdXNlZCBhcyBhIGNyZWRlbnRpYWwgaGVscGVyIGJ5IG90aGVyIHBhcnRzIG9mIEdpdC4gU2VlCitsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddIG9yIGBFWEFNUExFU2AgYmVsb3cuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS10aW1lb3V0IDxzZWNvbmRzPjo6CisKKwlOdW1iZXIgb2Ygc2Vjb25kcyB0byBjYWNoZSBjcmVkZW50aWFscyAoZGVmYXVsdDogOTAwKS4KKworLS1zb2NrZXQgPHBhdGg+OjoKKworCVVzZSBgPHBhdGg+YCB0byBjb250YWN0IGEgcnVubmluZyBjYWNoZSBkYWVtb24gKG9yIHN0YXJ0IGEgbmV3CisJY2FjaGUgZGFlbW9uIGlmIG9uZSBpcyBub3Qgc3RhcnRlZCkuCisJRGVmYXVsdHMgdG8gYCRYREdfQ0FDSEVfSE9NRS9naXQvY3JlZGVudGlhbC9zb2NrZXRgIHVubGVzcworCWB+Ly5naXQtY3JlZGVudGlhbC1jYWNoZS9gIGV4aXN0cyBpbiB3aGljaCBjYXNlCisJYH4vLmdpdC1jcmVkZW50aWFsLWNhY2hlL3NvY2tldGAgaXMgdXNlZCBpbnN0ZWFkLgorCUlmIHlvdXIgaG9tZSBkaXJlY3RvcnkgaXMgb24gYSBuZXR3b3JrLW1vdW50ZWQgZmlsZXN5c3RlbSwgeW91CisJbWF5IG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gYSBsb2NhbCBmaWxlc3lzdGVtLiBZb3UgbXVzdCBzcGVjaWZ5CisJYW4gYWJzb2x1dGUgcGF0aC4KKworQ09OVFJPTExJTkcgVEhFIERBRU1PTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd291bGQgbGlrZSB0aGUgZGFlbW9uIHRvIGV4aXQgZWFybHksIGZvcmdldHRpbmcgYWxsIGNhY2hlZAorY3JlZGVudGlhbHMgYmVmb3JlIHRoZWlyIHRpbWVvdXQsIHlvdSBjYW4gaXNzdWUgYW4gYGV4aXRgIGFjdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjcmVkZW50aWFsLWNhY2hlIGV4aXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUaGUgcG9pbnQgb2YgdGhpcyBoZWxwZXIgaXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgdGltZXMgeW91IG11c3QgdHlwZQoreW91ciB1c2VybmFtZSBvciBwYXNzd29yZC4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyIGNhY2hlCiskIGdpdCBwdXNoIGh0dHA6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdAorVXNlcm5hbWU6IDx0eXBlIHlvdXIgdXNlcm5hbWU+CitQYXNzd29yZDogPHR5cGUgeW91ciBwYXNzd29yZD4KKworW3dvcmsgZm9yIDUgbW9yZSBtaW51dGVzXQorJCBnaXQgcHVzaCBodHRwOi8vZXhhbXBsZS5jb20vcmVwby5naXQKK1t5b3VyIGNyZWRlbnRpYWxzIGFyZSB1c2VkIGF1dG9tYXRpY2FsbHldCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBwcm92aWRlIG9wdGlvbnMgdmlhIHRoZSBjcmVkZW50aWFsLmhlbHBlciBjb25maWd1cmF0aW9uCit2YXJpYWJsZSAodGhpcyBleGFtcGxlIGRyb3BzIHRoZSBjYWNoZSB0aW1lIHRvIDUgbWludXRlcyk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAnY2FjaGUgLS10aW1lb3V0PTMwMCcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLXN0b3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtc3RvcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5M2RkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLXN0b3JlLnR4dApAQCAtMCwwICsxLDEwNiBAQAorZ2l0LWNyZWRlbnRpYWwtc3RvcmUoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jcmVkZW50aWFsLXN0b3JlIC0gSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2sKKworU1lOT1BTSVMKKy0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICdzdG9yZSBbPG9wdGlvbnM+XScKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK05PVEU6IFVzaW5nIHRoaXMgaGVscGVyIHdpbGwgc3RvcmUgeW91ciBwYXNzd29yZHMgdW5lbmNyeXB0ZWQgb24gZGlzaywKK3Byb3RlY3RlZCBvbmx5IGJ5IGZpbGVzeXN0ZW0gcGVybWlzc2lvbnMuIElmIHRoaXMgaXMgbm90IGFuIGFjY2VwdGFibGUKK3NlY3VyaXR5IHRyYWRlb2ZmLCB0cnkgbGlua2dpdDpnaXQtY3JlZGVudGlhbC1jYWNoZVsxXSwgb3IgZmluZCBhIGhlbHBlcgordGhhdCBpbnRlZ3JhdGVzIHdpdGggc2VjdXJlIHN0b3JhZ2UgcHJvdmlkZWQgYnkgeW91ciBvcGVyYXRpbmcgc3lzdGVtLgorCitUaGlzIGNvbW1hbmQgc3RvcmVzIGNyZWRlbnRpYWxzIGluZGVmaW5pdGVseSBvbiBkaXNrIGZvciB1c2UgYnkgZnV0dXJlCitHaXQgcHJvZ3JhbXMuCisKK1lvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGludm9rZSB0aGlzIGNvbW1hbmQgZGlyZWN0bHk7IGl0IGlzIG1lYW50IHRvCitiZSB1c2VkIGFzIGEgY3JlZGVudGlhbCBoZWxwZXIgYnkgb3RoZXIgcGFydHMgb2YgZ2l0LiBTZWUKK2xpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10gb3IgYEVYQU1QTEVTYCBiZWxvdy4KKworT1BUSU9OUworLS0tLS0tLQorCistLWZpbGU9PHBhdGg+OjoKKworCVVzZSBgPHBhdGg+YCB0byBsb29rdXAgYW5kIHN0b3JlIGNyZWRlbnRpYWxzLiBUaGUgZmlsZSB3aWxsIGhhdmUgaXRzCisJZmlsZXN5c3RlbSBwZXJtaXNzaW9ucyBzZXQgdG8gcHJldmVudCBvdGhlciB1c2VycyBvbiB0aGUgc3lzdGVtCisJZnJvbSByZWFkaW5nIGl0LCBidXQgd2lsbCBub3QgYmUgZW5jcnlwdGVkIG9yIG90aGVyd2lzZQorCXByb3RlY3RlZC4gSWYgbm90IHNwZWNpZmllZCwgY3JlZGVudGlhbHMgd2lsbCBiZSBzZWFyY2hlZCBmb3IgZnJvbQorCWB+Ly5naXQtY3JlZGVudGlhbHNgIGFuZCBgJFhER19DT05GSUdfSE9NRS9naXQvY3JlZGVudGlhbHNgLCBhbmQKKwljcmVkZW50aWFscyB3aWxsIGJlIHdyaXR0ZW4gdG8gYH4vLmdpdC1jcmVkZW50aWFsc2AgaWYgaXQgZXhpc3RzLCBvcgorCWAkWERHX0NPTkZJR19IT01FL2dpdC9jcmVkZW50aWFsc2AgaWYgaXQgZXhpc3RzIGFuZCB0aGUgZm9ybWVyIGRvZXMKKwlub3QuIFNlZSBhbHNvIDw8RklMRVM+Pi4KKworW1tGSUxFU11dCitGSUxFUworLS0tLS0KKworSWYgbm90IHNldCBleHBsaWNpdGx5IHdpdGggYC0tZmlsZWAsIHRoZXJlIGFyZSB0d28gZmlsZXMgd2hlcmUKK2dpdC1jcmVkZW50aWFsLXN0b3JlIHdpbGwgc2VhcmNoIGZvciBjcmVkZW50aWFscyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgorCit+Ly5naXQtY3JlZGVudGlhbHM6OgorCVVzZXItc3BlY2lmaWMgY3JlZGVudGlhbHMgZmlsZS4KKworJFhER19DT05GSUdfSE9NRS9naXQvY3JlZGVudGlhbHM6OgorCVNlY29uZCB1c2VyLXNwZWNpZmljIGNyZWRlbnRpYWxzIGZpbGUuIElmICckWERHX0NPTkZJR19IT01FJyBpcyBub3Qgc2V0CisJb3IgZW1wdHksIGAkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFsc2Agd2lsbCBiZSB1c2VkLiBBbnkgY3JlZGVudGlhbHMKKwlzdG9yZWQgaW4gdGhpcyBmaWxlIHdpbGwgbm90IGJlIHVzZWQgaWYgYH4vLmdpdC1jcmVkZW50aWFsc2AgaGFzIGEKKwltYXRjaGluZyBjcmVkZW50aWFsIGFzIHdlbGwuIEl0IGlzIGEgZ29vZCBpZGVhIG5vdCB0byBjcmVhdGUgdGhpcyBmaWxlCisJaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0IHRoYXQgZG8gbm90IHN1cHBvcnQgaXQuCisKK0ZvciBjcmVkZW50aWFsIGxvb2t1cHMsIHRoZSBmaWxlcyBhcmUgcmVhZCBpbiB0aGUgb3JkZXIgZ2l2ZW4gYWJvdmUsIHdpdGggdGhlCitmaXJzdCBtYXRjaGluZyBjcmVkZW50aWFsIGZvdW5kIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgY3JlZGVudGlhbHMgZm91bmQgaW4KK2ZpbGVzIGZ1cnRoZXIgZG93biB0aGUgbGlzdC4KKworQ3JlZGVudGlhbCBzdG9yYWdlIHdpbGwgYnkgZGVmYXVsdCB3cml0ZSB0byB0aGUgZmlyc3QgZXhpc3RpbmcgZmlsZSBpbiB0aGUKK2xpc3QuIElmIG5vbmUgb2YgdGhlc2UgZmlsZXMgZXhpc3QsIGB+Ly5naXQtY3JlZGVudGlhbHNgIHdpbGwgYmUgY3JlYXRlZCBhbmQKK3dyaXR0ZW4gdG8uCisKK1doZW4gZXJhc2luZyBjcmVkZW50aWFscywgbWF0Y2hpbmcgY3JlZGVudGlhbHMgd2lsbCBiZSBlcmFzZWQgZnJvbSBhbGwgZmlsZXMuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUaGUgcG9pbnQgb2YgdGhpcyBoZWxwZXIgaXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgdGltZXMgeW91IG11c3QgdHlwZQoreW91ciB1c2VybmFtZSBvciBwYXNzd29yZC4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyIHN0b3JlCiskIGdpdCBwdXNoIGh0dHA6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdAorVXNlcm5hbWU6IDx0eXBlIHlvdXIgdXNlcm5hbWU+CitQYXNzd29yZDogPHR5cGUgeW91ciBwYXNzd29yZD4KKworW3NldmVyYWwgZGF5cyBsYXRlcl0KKyQgZ2l0IHB1c2ggaHR0cDovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CitbeW91ciBjcmVkZW50aWFscyBhcmUgdXNlZCBhdXRvbWF0aWNhbGx5XQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NUT1JBR0UgRk9STUFUCistLS0tLS0tLS0tLS0tLQorCitUaGUgYC5naXQtY3JlZGVudGlhbHNgIGZpbGUgaXMgc3RvcmVkIGluIHBsYWludGV4dC4gRWFjaCBjcmVkZW50aWFsIGlzCitzdG9yZWQgb24gaXRzIG93biBsaW5lIGFzIGEgVVJMIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraHR0cHM6Ly91c2VyOnBhc3NAZXhhbXBsZS5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIEdpdCBuZWVkcyBhdXRoZW50aWNhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIFVSTCBjb250ZXh0LAorY3JlZGVudGlhbC1zdG9yZSB3aWxsIGNvbnNpZGVyIHRoYXQgY29udGV4dCBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdAorZWFjaCBlbnRyeSBpbiB0aGUgY3JlZGVudGlhbHMgZmlsZS4gIElmIHRoZSBwcm90b2NvbCwgaG9zdG5hbWUsIGFuZAordXNlcm5hbWUgKGlmIHdlIGFscmVhZHkgaGF2ZSBvbmUpIG1hdGNoLCB0aGVuIHRoZSBwYXNzd29yZCBpcyByZXR1cm5lZAordG8gR2l0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YgY29uZmlndXJhdGlvbiBpbiBsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGM3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dApAQCAtMCwwICsxLDE1MyBAQAorZ2l0LWNyZWRlbnRpYWwoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jcmVkZW50aWFsIC0gUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjcmVkZW50aWFsIDxmaWxsfGFwcHJvdmV8cmVqZWN0PgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgaGFzIGFuIGludGVybmFsIGludGVyZmFjZSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBjcmVkZW50aWFscworZnJvbSBzeXN0ZW0tc3BlY2lmaWMgaGVscGVycywgYXMgd2VsbCBhcyBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yCit1c2VybmFtZXMgYW5kIHBhc3N3b3Jkcy4gVGhlIGdpdC1jcmVkZW50aWFsIGNvbW1hbmQgZXhwb3NlcyB0aGlzCitpbnRlcmZhY2UgdG8gc2NyaXB0cyB3aGljaCBtYXkgd2FudCB0byByZXRyaWV2ZSwgc3RvcmUsIG9yIHByb21wdCBmb3IKK2NyZWRlbnRpYWxzIGluIHRoZSBzYW1lIG1hbm5lciBhcyBHaXQuIFRoZSBkZXNpZ24gb2YgdGhpcyBzY3JpcHRhYmxlCitpbnRlcmZhY2UgbW9kZWxzIHRoZSBpbnRlcm5hbCBDIEFQSTsgc2VlIGNyZWRlbnRpYWwuaCBmb3IgbW9yZQorYmFja2dyb3VuZCBvbiB0aGUgY29uY2VwdHMuCisKK2dpdC1jcmVkZW50aWFsIHRha2VzIGFuICJhY3Rpb24iIG9wdGlvbiBvbiB0aGUgY29tbWFuZC1saW5lIChvbmUgb2YKK2BmaWxsYCwgYGFwcHJvdmVgLCBvciBgcmVqZWN0YCkgYW5kIHJlYWRzIGEgY3JlZGVudGlhbCBkZXNjcmlwdGlvbgorb24gc3RkaW4gKHNlZSA8PElPRk1ULElOUFVUL09VVFBVVCBGT1JNQVQ+PikuCisKK0lmIHRoZSBhY3Rpb24gaXMgYGZpbGxgLCBnaXQtY3JlZGVudGlhbCB3aWxsIGF0dGVtcHQgdG8gYWRkICJ1c2VybmFtZSIKK2FuZCAicGFzc3dvcmQiIGF0dHJpYnV0ZXMgdG8gdGhlIGRlc2NyaXB0aW9uIGJ5IHJlYWRpbmcgY29uZmlnIGZpbGVzLAorYnkgY29udGFjdGluZyBhbnkgY29uZmlndXJlZCBjcmVkZW50aWFsIGhlbHBlcnMsIG9yIGJ5IHByb21wdGluZyB0aGUKK3VzZXIuIFRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXR0cmlidXRlcyBvZiB0aGUgY3JlZGVudGlhbAorZGVzY3JpcHRpb24gYXJlIHRoZW4gcHJpbnRlZCB0byBzdGRvdXQgdG9nZXRoZXIgd2l0aCB0aGUgYXR0cmlidXRlcworYWxyZWFkeSBwcm92aWRlZC4KKworSWYgdGhlIGFjdGlvbiBpcyBgYXBwcm92ZWAsIGdpdC1jcmVkZW50aWFsIHdpbGwgc2VuZCB0aGUgZGVzY3JpcHRpb24KK3RvIGFueSBjb25maWd1cmVkIGNyZWRlbnRpYWwgaGVscGVycywgd2hpY2ggbWF5IHN0b3JlIHRoZSBjcmVkZW50aWFsCitmb3IgbGF0ZXIgdXNlLgorCitJZiB0aGUgYWN0aW9uIGlzIGByZWplY3RgLCBnaXQtY3JlZGVudGlhbCB3aWxsIHNlbmQgdGhlIGRlc2NyaXB0aW9uIHRvCithbnkgY29uZmlndXJlZCBjcmVkZW50aWFsIGhlbHBlcnMsIHdoaWNoIG1heSBlcmFzZSBhbnkgc3RvcmVkCitjcmVkZW50aWFsIG1hdGNoaW5nIHRoZSBkZXNjcmlwdGlvbi4KKworSWYgdGhlIGFjdGlvbiBpcyBgYXBwcm92ZWAgb3IgYHJlamVjdGAsIG5vIG91dHB1dCBzaG91bGQgYmUgZW1pdHRlZC4KKworVFlQSUNBTCBVU0UgT0YgR0lUIENSRURFTlRJQUwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGFwcGxpY2F0aW9uIHVzaW5nIGdpdC1jcmVkZW50aWFsIHdpbGwgdHlwaWNhbGx5IHVzZSBgZ2l0CitjcmVkZW50aWFsYCBmb2xsb3dpbmcgdGhlc2Ugc3RlcHM6CisKKyAgMS4gR2VuZXJhdGUgYSBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIGJhc2VkIG9uIHRoZSBjb250ZXh0LgorKworRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnQgYSBwYXNzd29yZCBmb3IKK2BodHRwczovL2V4YW1wbGUuY29tL2Zvby5naXRgLCB3ZSBtaWdodCBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nCitjcmVkZW50aWFsIGRlc2NyaXB0aW9uIChkb24ndCBmb3JnZXQgdGhlIGJsYW5rIGxpbmUgYXQgdGhlIGVuZDsgaXQKK3RlbGxzIGBnaXQgY3JlZGVudGlhbGAgdGhhdCB0aGUgYXBwbGljYXRpb24gZmluaXNoZWQgZmVlZGluZyBhbGwgdGhlCitpbmZvcm1hdGlvbiBpdCBoYXMpOgorCisJIHByb3RvY29sPWh0dHBzCisJIGhvc3Q9ZXhhbXBsZS5jb20KKwkgcGF0aD1mb28uZ2l0CisKKyAgMi4gQXNrIGdpdC1jcmVkZW50aWFsIHRvIGdpdmUgdXMgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoaXMKKyAgICAgZGVzY3JpcHRpb24uIFRoaXMgaXMgZG9uZSBieSBydW5uaW5nIGBnaXQgY3JlZGVudGlhbCBmaWxsYCwKKyAgICAgZmVlZGluZyB0aGUgZGVzY3JpcHRpb24gZnJvbSBzdGVwICgxKSB0byBpdHMgc3RhbmRhcmQgaW5wdXQuIFRoZSBjb21wbGV0ZQorICAgICBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIChpbmNsdWRpbmcgdGhlIGNyZWRlbnRpYWwgcGVyIHNlLCBpLmUuIHRoZQorICAgICBsb2dpbiBhbmQgcGFzc3dvcmQpIHdpbGwgYmUgcHJvZHVjZWQgb24gc3RhbmRhcmQgb3V0cHV0LCBsaWtlOgorCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Ym9iCisJcGFzc3dvcmQ9c2VjcjN0CisrCitJbiBtb3N0IGNhc2VzLCB0aGlzIG1lYW5zIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHRoZSBpbnB1dCB3aWxsIGJlCityZXBlYXRlZCBpbiB0aGUgb3V0cHV0LCBidXQgR2l0IG1heSBhbHNvIG1vZGlmeSB0aGUgY3JlZGVudGlhbAorZGVzY3JpcHRpb24sIGZvciBleGFtcGxlIGJ5IHJlbW92aW5nIHRoZSBgcGF0aGAgYXR0cmlidXRlIHdoZW4gdGhlCitwcm90b2NvbCBpcyBIVFRQKHMpIGFuZCBgY3JlZGVudGlhbC51c2VIdHRwUGF0aGAgaXMgZmFsc2UuCisrCitJZiB0aGUgYGdpdCBjcmVkZW50aWFsYCBrbmV3IGFib3V0IHRoZSBwYXNzd29yZCwgdGhpcyBzdGVwIG1heQorbm90IGhhdmUgaW52b2x2ZWQgdGhlIHVzZXIgYWN0dWFsbHkgdHlwaW5nIHRoaXMgcGFzc3dvcmQgKHRoZQordXNlciBtYXkgaGF2ZSB0eXBlZCBhIHBhc3N3b3JkIHRvIHVubG9jayB0aGUga2V5Y2hhaW4gaW5zdGVhZCwKK29yIG5vIHVzZXIgaW50ZXJhY3Rpb24gd2FzIGRvbmUgaWYgdGhlIGtleWNoYWluIHdhcyBhbHJlYWR5Cit1bmxvY2tlZCkgYmVmb3JlIGl0IHJldHVybmVkIGBwYXNzd29yZD1zZWNyM3RgLgorCisgIDMuIFVzZSB0aGUgY3JlZGVudGlhbCAoZS5nLiwgYWNjZXNzIHRoZSBVUkwgd2l0aCB0aGUgdXNlcm5hbWUgYW5kCisgICAgIHBhc3N3b3JkIGZyb20gc3RlcCAoMikpLCBhbmQgc2VlIGlmIGl0J3MgYWNjZXB0ZWQuCisKKyAgNC4gUmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHBhc3N3b3JkLiBJZiB0aGUKKyAgICAgY3JlZGVudGlhbCBhbGxvd2VkIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LCB0aGVuCisgICAgIGl0IGNhbiBiZSBtYXJrZWQgd2l0aCBhbiAiYXBwcm92ZSIgYWN0aW9uIHRvIHRlbGwgYGdpdAorICAgICBjcmVkZW50aWFsYCB0byByZXVzZSBpdCBpbiBpdHMgbmV4dCBpbnZvY2F0aW9uLiBJZiB0aGUgY3JlZGVudGlhbAorICAgICB3YXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHVzZSB0aGUgInJlamVjdCIgYWN0aW9uIHNvCisgICAgIHRoYXQgYGdpdCBjcmVkZW50aWFsYCB3aWxsIGFzayBmb3IgYSBuZXcgcGFzc3dvcmQgaW4gaXRzIG5leHQKKyAgICAgaW52b2NhdGlvbi4gSW4gZWl0aGVyIGNhc2UsIGBnaXQgY3JlZGVudGlhbGAgc2hvdWxkIGJlIGZlZCB3aXRoCisgICAgIHRoZSBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIG9idGFpbmVkIGZyb20gc3RlcCAoMikgKHdoaWNoIGFsc28KKyAgICAgY29udGFpbiB0aGUgb25lcyBwcm92aWRlZCBpbiBzdGVwICgxKSkuCisKK1tbSU9GTVRdXQorSU5QVVQvT1VUUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgZ2l0IGNyZWRlbnRpYWxgIHJlYWRzIGFuZC9vciB3cml0ZXMgKGRlcGVuZGluZyBvbiB0aGUgYWN0aW9uIHVzZWQpCitjcmVkZW50aWFsIGluZm9ybWF0aW9uIGluIGl0cyBzdGFuZGFyZCBpbnB1dC9vdXRwdXQuIFRoaXMgaW5mb3JtYXRpb24KK2NhbiBjb3JyZXNwb25kIGVpdGhlciB0byBrZXlzIGZvciB3aGljaCBgZ2l0IGNyZWRlbnRpYWxgIHdpbGwgb2J0YWluCit0aGUgbG9naW4vcGFzc3dvcmQgaW5mb3JtYXRpb24gKGUuZy4gaG9zdCwgcHJvdG9jb2wsIHBhdGgpLCBvciB0byB0aGUKK2FjdHVhbCBjcmVkZW50aWFsIGRhdGEgdG8gYmUgb2J0YWluZWQgKGxvZ2luL3Bhc3N3b3JkKS4KKworVGhlIGNyZWRlbnRpYWwgaXMgc3BsaXQgaW50byBhIHNldCBvZiBuYW1lZCBhdHRyaWJ1dGVzLCB3aXRoIG9uZQorYXR0cmlidXRlIHBlciBsaW5lLiBFYWNoIGF0dHJpYnV0ZSBpcworc3BlY2lmaWVkIGJ5IGEga2V5LXZhbHVlIHBhaXIsIHNlcGFyYXRlZCBieSBhbiBgPWAgKGVxdWFscykgc2lnbiwKK2ZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gVGhlIGtleSBtYXkgY29udGFpbiBhbnkgYnl0ZXMgZXhjZXB0IGA9YCwKK25ld2xpbmUsIG9yIE5VTC4gVGhlIHZhbHVlIG1heSBjb250YWluIGFueSBieXRlcyBleGNlcHQgbmV3bGluZSBvciBOVUwuCitJbiBib3RoIGNhc2VzLCBhbGwgYnl0ZXMgYXJlIHRyZWF0ZWQgYXMtaXMgKGkuZS4sIHRoZXJlIGlzIG5vIHF1b3RpbmcsCithbmQgb25lIGNhbm5vdCB0cmFuc21pdCBhIHZhbHVlIHdpdGggbmV3bGluZSBvciBOVUwgaW4gaXQpLiBUaGUgbGlzdCBvZgorYXR0cmlidXRlcyBpcyB0ZXJtaW5hdGVkIGJ5IGEgYmxhbmsgbGluZSBvciBlbmQtb2YtZmlsZS4KK0dpdCB1bmRlcnN0YW5kcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKK2Bwcm90b2NvbGA6OgorCisJVGhlIHByb3RvY29sIG92ZXIgd2hpY2ggdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSB1c2VkIChlLmcuLAorCWBodHRwc2ApLgorCitgaG9zdGA6OgorCisJVGhlIHJlbW90ZSBob3N0bmFtZSBmb3IgYSBuZXR3b3JrIGNyZWRlbnRpYWwuCisKK2BwYXRoYDo6CisKKwlUaGUgcGF0aCB3aXRoIHdoaWNoIHRoZSBjcmVkZW50aWFsIHdpbGwgYmUgdXNlZC4gRS5nLiwgZm9yCisJYWNjZXNzaW5nIGEgcmVtb3RlIGh0dHBzIHJlcG9zaXRvcnksIHRoaXMgd2lsbCBiZSB0aGUKKwlyZXBvc2l0b3J5J3MgcGF0aCBvbiB0aGUgc2VydmVyLgorCitgdXNlcm5hbWVgOjoKKworCVRoZSBjcmVkZW50aWFsJ3MgdXNlcm5hbWUsIGlmIHdlIGFscmVhZHkgaGF2ZSBvbmUgKGUuZy4sIGZyb20gYQorCVVSTCwgZnJvbSB0aGUgdXNlciwgb3IgZnJvbSBhIHByZXZpb3VzbHkgcnVuIGhlbHBlcikuCisKK2BwYXNzd29yZGA6OgorCisJVGhlIGNyZWRlbnRpYWwncyBwYXNzd29yZCwgaWYgd2UgYXJlIGFza2luZyBpdCB0byBiZSBzdG9yZWQuCisKK2B1cmxgOjoKKworCVdoZW4gdGhpcyBzcGVjaWFsIGF0dHJpYnV0ZSBpcyByZWFkIGJ5IGBnaXQgY3JlZGVudGlhbGAsIHRoZQorCXZhbHVlIGlzIHBhcnNlZCBhcyBhIFVSTCBhbmQgdHJlYXRlZCBhcyBpZiBpdHMgY29uc3RpdHVlbnQgcGFydHMKKwl3ZXJlIHJlYWQgKGUuZy4sIGB1cmw9aHR0cHM6Ly9leGFtcGxlLmNvbWAgd291bGQgYmVoYXZlIGFzIGlmCisJYHByb3RvY29sPWh0dHBzYCBhbmQgYGhvc3Q9ZXhhbXBsZS5jb21gIGhhZCBiZWVuIHByb3ZpZGVkKS4gVGhpcworCWNhbiBoZWxwIGNhbGxlcnMgYXZvaWQgcGFyc2luZyBVUkxzIHRoZW1zZWx2ZXMuICBOb3RlIHRoYXQgYW55CisJY29tcG9uZW50cyB3aGljaCBhcmUgbWlzc2luZyBmcm9tIHRoZSBVUkwgKGUuZy4sIHRoZXJlIGlzIG5vCisJdXNlcm5hbWUgaW4gdGhlIGV4YW1wbGUgYWJvdmUpIHdpbGwgYmUgc2V0IHRvIGVtcHR5OyBpZiB5b3Ugd2FudAorCXRvIHByb3ZpZGUgYSBVUkwgYW5kIG92ZXJyaWRlIHNvbWUgYXR0cmlidXRlcywgcHJvdmlkZSB0aGUgVVJMCisJYXR0cmlidXRlIGZpcnN0LCBmb2xsb3dlZCBieSBhbnkgb3ZlcnJpZGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxNTRiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKQEAgLTAsMCArMSwxMTggQEAKK2dpdC1jdnNleHBvcnRjb21taXQoMSkKKz09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWN2c2V4cG9ydGNvbW1pdCAtIEV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY3ZzZXhwb3J0Y29tbWl0JyBbLWhdIFstdV0gWy12XSBbLWNdIFstUF0gWy1wXSBbLWFdIFstZCBjdnNyb290XQorCVstdyBjdnN3b3JrZGlyXSBbLVddIFstZl0gWy1tIG1zZ3ByZWZpeF0gW1BBUkVOVENPTU1JVF0gQ09NTUlUSUQKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0V4cG9ydHMgYSBjb21taXQgZnJvbSBHaXQgdG8gYSBDVlMgY2hlY2tvdXQsIG1ha2luZyBpdCBlYXNpZXIKK3RvIG1lcmdlIHBhdGNoZXMgZnJvbSBhIEdpdCByZXBvc2l0b3J5IGludG8gYSBDVlMgcmVwb3NpdG9yeS4KKworU3BlY2lmeSB0aGUgbmFtZSBvZiBhIENWUyBjaGVja291dCB1c2luZyB0aGUgLXcgc3dpdGNoIG9yIGV4ZWN1dGUgaXQKK2Zyb20gdGhlIHJvb3Qgb2YgdGhlIENWUyB3b3JraW5nIGNvcHkuIEluIHRoZSBsYXR0ZXIgY2FzZSBHSVRfRElSIG11c3QKK2JlIGRlZmluZWQuIFNlZSBleGFtcGxlcyBiZWxvdy4KKworSXQgZG9lcyBpdHMgYmVzdCB0byBkbyB0aGUgc2FmZSB0aGluZywgaXQgd2lsbCBjaGVjayB0aGF0IHRoZSBmaWxlcyBhcmUKK3VuY2hhbmdlZCBhbmQgdXAgdG8gZGF0ZSBpbiB0aGUgQ1ZTIGNoZWNrb3V0LCBhbmQgaXQgd2lsbCBub3QgYXV0b2NvbW1pdAorYnkgZGVmYXVsdC4KKworU3VwcG9ydHMgZmlsZSBhZGRpdGlvbnMsIHJlbW92YWxzLCBhbmQgY29tbWl0cyB0aGF0IGFmZmVjdCBiaW5hcnkgZmlsZXMuCisKK0lmIHRoZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIHlvdSBtdXN0IHRlbGwgJ2dpdCBjdnNleHBvcnRjb21taXQnIHdoYXQKK3BhcmVudCB0aGUgY2hhbmdlc2V0IHNob3VsZCBiZSBkb25lIGFnYWluc3QuCisKK09QVElPTlMKKy0tLS0tLS0KKworLWM6OgorCUNvbW1pdCBhdXRvbWF0aWNhbGx5IGlmIHRoZSBwYXRjaCBhcHBsaWVkIGNsZWFubHkuIEl0IHdpbGwgbm90CisJY29tbWl0IGlmIGFueSBodW5rcyBmYWlsIHRvIGFwcGx5IG9yIHRoZXJlIHdlcmUgb3RoZXIgcHJvYmxlbXMuCisKKy1wOjoKKwlCZSBwZWRhbnRpYyAocGFyYW5vaWQpIHdoZW4gYXBwbHlpbmcgcGF0Y2hlcy4gSW52b2tlcyBwYXRjaCB3aXRoCisJLS1mdXp6PTAKKworLWE6OgorCUFkZCBhdXRob3JzaGlwIGluZm9ybWF0aW9uLiBBZGRzIEF1dGhvciBsaW5lLCBhbmQgQ29tbWl0dGVyIChpZgorCWRpZmZlcmVudCBmcm9tIEF1dGhvcikgdG8gdGhlIG1lc3NhZ2UuCisKKy1kOjoKKwlTZXQgYW4gYWx0ZXJuYXRpdmUgQ1ZTUk9PVCB0byB1c2UuICBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBDVlMKKwktZCBwYXJhbWV0ZXIuICBVc3VhbGx5IHVzZXJzIHdpbGwgbm90IHdhbnQgdG8gc2V0IHRoaXMsIGV4Y2VwdAorCWlmIHVzaW5nIENWUyBpbiBhbiBhc3ltbWV0cmljIGZhc2hpb24uCisKKy1mOjoKKwlGb3JjZSB0aGUgbWVyZ2UgZXZlbiBpZiB0aGUgZmlsZXMgYXJlIG5vdCB1cCB0byBkYXRlLgorCistUDo6CisJRm9yY2UgdGhlIHBhcmVudCBjb21taXQsIGV2ZW4gaWYgaXQgaXMgbm90IGEgZGlyZWN0IHBhcmVudC4KKworLW06OgorCVByZXBlbmQgdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggdGhlIHByb3ZpZGVkIHByZWZpeC4KKwlVc2VmdWwgZm9yIHBhdGNoIHNlcmllcyBhbmQgdGhlIGxpa2UuCisKKy11OjoKKwlVcGRhdGUgYWZmZWN0ZWQgZmlsZXMgZnJvbSBDVlMgcmVwb3NpdG9yeSBiZWZvcmUgYXR0ZW1wdGluZyBleHBvcnQuCisKKy1rOjoKKwlSZXZlcnNlIENWUyBrZXl3b3JkIGV4cGFuc2lvbiAoZS5nLiAkUmV2aXNpb246IDEuMi4zLjQkCisJYmVjb21lcyAkUmV2aXNpb24kKSBpbiB3b3JraW5nIENWUyBjaGVja291dCBiZWZvcmUgYXBwbHlpbmcgcGF0Y2guCisKKy13OjoKKwlTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgQ1ZTIGNoZWNrb3V0IHRvIHVzZSBmb3IgdGhlIGV4cG9ydC4gVGhpcworCW9wdGlvbiBkb2VzIG5vdCByZXF1aXJlIEdJVF9ESVIgdG8gYmUgc2V0IGJlZm9yZSBleGVjdXRpb24gaWYgdGhlCisJY3VycmVudCBkaXJlY3RvcnkgaXMgd2l0aGluIGEgR2l0IHJlcG9zaXRvcnkuICBUaGUgZGVmYXVsdCBpcyB0aGUKKwl2YWx1ZSBvZiAnY3ZzZXhwb3J0Y29tbWl0LmN2c2RpcicuCisKKy1XOjoKKwlUZWxsIGN2c2V4cG9ydGNvbW1pdCB0aGF0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIG5vdCBvbmx5CisJYSBHaXQgY2hlY2tvdXQsIGJ1dCBhbHNvIHRoZSBDVlMgY2hlY2tvdXQuICBUaGVyZWZvcmUsIEdpdCB3aWxsCisJcmVzZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBwYXJlbnQgY29tbWl0IGJlZm9yZSBwcm9jZWVkaW5nLgorCistdjo6CisJVmVyYm9zZS4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorY3ZzZXhwb3J0Y29tbWl0LmN2c2Rpcjo6CisJVGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIENWUyBjaGVja291dCB0byB1c2UgZm9yIHRoZSBleHBvcnQuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitNZXJnZSBvbmUgcGF0Y2ggaW50byBDVlM6OgorKworLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfRElSPX4vcHJvamVjdC8uZ2l0CiskIGNkIH4vcHJvamVjdF9jdnNfY2hlY2tvdXQKKyQgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdiA8Y29tbWl0LXNoYTE+CiskIGN2cyBjb21taXQgLUYgLm1zZyA8ZmlsZXM+CistLS0tLS0tLS0tLS0KKworTWVyZ2Ugb25lIHBhdGNoIGludG8gQ1ZTICgtYyBhbmQgLXcgb3B0aW9ucykuIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyB3aXRoaW4gdGhlIEdpdCBSZXBvOjoKKysKKy0tLS0tLS0tLS0tLQorCSQgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdiAtYyAtdyB+L3Byb2plY3RfY3ZzX2NoZWNrb3V0IDxjb21taXQtc2hhMT4KKy0tLS0tLS0tLS0tLQorCitNZXJnZSBwZW5kaW5nIHBhdGNoZXMgaW50byBDVlMgYXV0b21hdGljYWxseSAtLSBvbmx5IGlmIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmc6OgorKworLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfRElSPX4vcHJvamVjdC8uZ2l0CiskIGNkIH4vcHJvamVjdF9jdnNfY2hlY2tvdXQKKyQgZ2l0IGNoZXJyeSBjdnNoZWFkIG15aGVhZCB8IHNlZCAtbiAncy9eKyAvL3AnIHwgeGFyZ3MgLWwxIGdpdCBjdnNleHBvcnRjb21taXQgLWMgLXAgLXYKKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMWViZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CkBAIC0wLDAgKzEsMjI4IEBACitnaXQtY3ZzaW1wb3J0KDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jdnNpbXBvcnQgLSBTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjdnNpbXBvcnQnIFstbyA8YnJhbmNoLWZvci1IRUFEPl0gWy1oXSBbLXZdIFstZCA8Q1ZTUk9PVD5dCisJICAgICAgWy1BIDxhdXRob3ItY29udi1maWxlPl0gWy1wIDxvcHRpb25zLWZvci1jdnNwcz5dIFstUCA8ZmlsZT5dCisJICAgICAgWy1DIDxnaXRfcmVwb3NpdG9yeT5dIFsteiA8ZnV6ej5dIFstaV0gWy1rXSBbLXVdIFstcyA8c3Vic3Q+XQorCSAgICAgIFstYV0gWy1tXSBbLU0gPHJlZ2V4Pl0gWy1TIDxyZWdleD5dIFstTCA8Y29tbWl0bGltaXQ+XQorCSAgICAgIFstciA8cmVtb3RlPl0gWy1SXSBbPENWU19tb2R1bGU+XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorKldBUk5JTkc6KiBgZ2l0IGN2c2ltcG9ydGAgdXNlcyBjdnNwcyB2ZXJzaW9uIDIsIHdoaWNoIGlzIGNvbnNpZGVyZWQKK2RlcHJlY2F0ZWQ7IGl0IGRvZXMgbm90IHdvcmsgd2l0aCBjdnNwcyB2ZXJzaW9uIDMgYW5kIGxhdGVyLiAgSWYgeW91IGFyZQorcGVyZm9ybWluZyBhIG9uZS1zaG90IGltcG9ydCBvZiBhIENWUyByZXBvc2l0b3J5IGNvbnNpZGVyIHVzaW5nCitodHRwOi8vY3ZzMnN2bi50aWdyaXMub3JnL2N2czJnaXQuaHRtbFtjdnMyZ2l0XSBvcgoraHR0cDovL3d3dy5jYXRiLm9yZy9lc3IvY3ZzLWZhc3QtZXhwb3J0L1tjdnMtZmFzdC1leHBvcnRdLgorCitJbXBvcnRzIGEgQ1ZTIHJlcG9zaXRvcnkgaW50byBHaXQuIEl0IHdpbGwgZWl0aGVyIGNyZWF0ZSBhIG5ldworcmVwb3NpdG9yeSwgb3IgaW5jcmVtZW50YWxseSBpbXBvcnQgaW50byBhbiBleGlzdGluZyBvbmUuCisKK1NwbGl0dGluZyB0aGUgQ1ZTIGxvZyBpbnRvIHBhdGNoIHNldHMgaXMgZG9uZSBieSAnY3ZzcHMnLgorQXQgbGVhc3QgdmVyc2lvbiAyLjEgaXMgcmVxdWlyZWQuCisKKypXQVJOSU5HOiogZm9yIGNlcnRhaW4gc2l0dWF0aW9ucyB0aGUgaW1wb3J0IGxlYWRzIHRvIGluY29ycmVjdCByZXN1bHRzLgorUGxlYXNlIHNlZSB0aGUgc2VjdGlvbiA8PGlzc3VlcyxJU1NVRVM+PiBmb3IgZnVydGhlciByZWZlcmVuY2UuCisKK1lvdSBzaG91bGQgKm5ldmVyKiBkbyBhbnkgd29yayBvZiB5b3VyIG93biBvbiB0aGUgYnJhbmNoZXMgdGhhdCBhcmUKK2NyZWF0ZWQgYnkgJ2dpdCBjdnNpbXBvcnQnLiAgQnkgZGVmYXVsdCBpbml0aWFsIGltcG9ydCB3aWxsIGNyZWF0ZSBhbmQgcG9wdWxhdGUgYQorIm1hc3RlciIgYnJhbmNoIGZyb20gdGhlIENWUyByZXBvc2l0b3J5J3MgbWFpbiBicmFuY2ggd2hpY2ggeW91J3JlIGZyZWUKK3RvIHdvcmsgd2l0aDsgYWZ0ZXIgdGhhdCwgeW91IG5lZWQgdG8gJ2dpdCBtZXJnZScgaW5jcmVtZW50YWwgaW1wb3J0cywgb3IKK2FueSBDVlMgYnJhbmNoZXMsIHlvdXJzZWxmLiAgSXQgaXMgYWR2aXNhYmxlIHRvIHNwZWNpZnkgYSBuYW1lZCByZW1vdGUgdmlhCistciB0byBzZXBhcmF0ZSBhbmQgcHJvdGVjdCB0aGUgaW5jb21pbmcgYnJhbmNoZXMuCisKK0lmIHlvdSBpbnRlbmQgdG8gc2V0IHVwIGEgc2hhcmVkIHB1YmxpYyByZXBvc2l0b3J5IHRoYXQgYWxsIGRldmVsb3BlcnMgY2FuCityZWFkL3dyaXRlLCBvciBpZiB5b3Ugd2FudCB0byB1c2UgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLCB0aGVuIHlvdQorcHJvYmFibHkgd2FudCB0byBtYWtlIGEgYmFyZSBjbG9uZSBvZiB0aGUgaW1wb3J0ZWQgcmVwb3NpdG9yeSwKK2FuZCB1c2UgdGhlIGNsb25lIGFzIHRoZSBzaGFyZWQgcmVwb3NpdG9yeS4KK1NlZSBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10uCisKKworT1BUSU9OUworLS0tLS0tLQorLXY6OgorCVZlcmJvc2l0eTogbGV0ICdjdnNpbXBvcnQnIHJlcG9ydCB3aGF0IGl0IGlzIGRvaW5nLgorCistZCA8Q1ZTUk9PVD46OgorCVRoZSByb290IG9mIHRoZSBDVlMgYXJjaGl2ZS4gTWF5IGJlIGxvY2FsIChhIHNpbXBsZSBwYXRoKSBvciByZW1vdGU7CisJY3VycmVudGx5LCBvbmx5IHRoZSA6bG9jYWw6LCA6ZXh0OiBhbmQgOnBzZXJ2ZXI6IGFjY2VzcyBtZXRob2RzCisJYXJlIHN1cHBvcnRlZC4gSWYgbm90IGdpdmVuLCAnZ2l0IGN2c2ltcG9ydCcgd2lsbCB0cnkgdG8gcmVhZCBpdAorCWZyb20gYENWUy9Sb290YC4gSWYgbm8gc3VjaCBmaWxlIGV4aXN0cywgaXQgY2hlY2tzIGZvciB0aGUKKwlgQ1ZTUk9PVGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKzxDVlNfbW9kdWxlPjo6CisJVGhlIENWUyBtb2R1bGUgeW91IHdhbnQgdG8gaW1wb3J0LiBSZWxhdGl2ZSB0byA8Q1ZTUk9PVD4uCisJSWYgbm90IGdpdmVuLCAnZ2l0IGN2c2ltcG9ydCcgdHJpZXMgdG8gcmVhZCBpdCBmcm9tCisJYENWUy9SZXBvc2l0b3J5YC4KKworLUMgPHRhcmdldC1kaXI+OjoKKwlUaGUgR2l0IHJlcG9zaXRvcnkgdG8gaW1wb3J0IHRvLiAgSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0CisgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworLXIgPHJlbW90ZT46OgorCVRoZSBHaXQgcmVtb3RlIHRvIGltcG9ydCB0aGlzIENWUyByZXBvc2l0b3J5IGludG8uCisJTW92ZXMgYWxsIENWUyBicmFuY2hlcyBpbnRvIHJlbW90ZXMvPHJlbW90ZT4vPGJyYW5jaD4KKwlha2luIHRvIHRoZSB3YXkgJ2dpdCBjbG9uZScgdXNlcyAnb3JpZ2luJyBieSBkZWZhdWx0LgorCistbyA8YnJhbmNoLWZvci1IRUFEPjo6CisJV2hlbiBubyByZW1vdGUgaXMgc3BlY2lmaWVkICh2aWEgLXIpIHRoZSBgSEVBRGAgYnJhbmNoCisJZnJvbSBDVlMgaXMgaW1wb3J0ZWQgdG8gdGhlICdvcmlnaW4nIGJyYW5jaCB3aXRoaW4gdGhlIEdpdAorCXJlcG9zaXRvcnksIGFzIGBIRUFEYCBhbHJlYWR5IGhhcyBhIHNwZWNpYWwgbWVhbmluZyBmb3IgR2l0LgorCVdoZW4gYSByZW1vdGUgaXMgc3BlY2lmaWVkIHRoZSBgSEVBRGAgYnJhbmNoIGlzIG5hbWVkCisJcmVtb3Rlcy88cmVtb3RlPi9tYXN0ZXIgbWlycm9yaW5nICdnaXQgY2xvbmUnIGJlaGF2aW91ci4KKwlVc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaW1wb3J0IGludG8gYSBkaWZmZXJlbnQKKwlicmFuY2guCisrCitVc2UgJy1vIG1hc3RlcicgZm9yIGNvbnRpbnVpbmcgYW4gaW1wb3J0IHRoYXQgd2FzIGluaXRpYWxseSBkb25lIGJ5Cit0aGUgb2xkIGN2czJnaXQgdG9vbC4KKworLWk6OgorCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKwllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorCW5vdCBjcmVhdGUgdGhlbSBpZiB0aGV5IGRvIG5vdCBleGlzdC4KKworLWs6OgorCUtpbGwga2V5d29yZHM6IHdpbGwgZXh0cmFjdCBmaWxlcyB3aXRoICcta2snIGZyb20gdGhlIENWUyBhcmNoaXZlCisJdG8gYXZvaWQgbm9pc3kgY2hhbmdlc2V0cy4gSGlnaGx5IHJlY29tbWVuZGVkLCBidXQgb2ZmIGJ5IGRlZmF1bHQKKwl0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggZWFybHkgaW1wb3J0ZWQgdHJlZXMuCisKKy11OjoKKwlDb252ZXJ0IHVuZGVyc2NvcmVzIGluIHRhZyBhbmQgYnJhbmNoIG5hbWVzIHRvIGRvdHMuCisKKy1zIDxzdWJzdD46OgorCVN1YnN0aXR1dGUgdGhlIGNoYXJhY3RlciAiLyIgaW4gYnJhbmNoIG5hbWVzIHdpdGggPHN1YnN0PgorCistcCA8b3B0aW9ucy1mb3ItY3ZzcHM+OjoKKwlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorCVRoZSBvcHRpb25zIGAtdWAgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKysKK0lmIHlvdSBuZWVkIHRvIHBhc3MgbXVsdGlwbGUgb3B0aW9ucywgc2VwYXJhdGUgdGhlbSB3aXRoIGEgY29tbWEuCisKKy16IDxmdXp6Pjo6CisJUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLCBpbiBzZWNvbmRzLiBJZiB1bnNldCwKKwljdnNwcyBkZWZhdWx0cyB0byAzMDBzLgorCistUCA8Y3ZzcHMtb3V0cHV0LWZpbGU+OjoKKwlJbnN0ZWFkIG9mIGNhbGxpbmcgY3ZzcHMsIHJlYWQgdGhlIHByb3ZpZGVkIGN2c3BzIG91dHB1dCBmaWxlLiBVc2VmdWwKKwlmb3IgZGVidWdnaW5nIG9yIHdoZW4gY3ZzcHMgaXMgYmVpbmcgaGFuZGxlZCBvdXRzaWRlIGN2c2ltcG9ydC4KKworLW06OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgb3B0aW9uCisJd2lsbCBlbmFibGUgZGVmYXVsdCByZWdleGVzIHRoYXQgdHJ5IHRvIGNhcHR1cmUgdGhlIHNvdXJjZQorCWJyYW5jaCBuYW1lIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlLgorCistTSA8cmVnZXg+OjoKKwlBdHRlbXB0IHRvIGRldGVjdCBtZXJnZXMgYmFzZWQgb24gdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggYSBjdXN0b20KKwlyZWdleC4gSXQgY2FuIGJlIHVzZWQgd2l0aCBgLW1gIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCByZWdleGVzCisJYXMgd2VsbC4gWW91IG11c3QgZXNjYXBlIGZvcndhcmQgc2xhc2hlcy4KKysKK1RoZSByZWdleCBtdXN0IGNhcHR1cmUgdGhlIHNvdXJjZSBicmFuY2ggbmFtZSBpbiAkMS4KKysKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHNldmVyYWwgdGltZXMgdG8gcHJvdmlkZSBzZXZlcmFsIGRldGVjdGlvbiByZWdleGVzLgorCistUyA8cmVnZXg+OjoKKwlTa2lwIHBhdGhzIG1hdGNoaW5nIHRoZSByZWdleC4KKworLWE6OgorCUltcG9ydCBhbGwgY29tbWl0cywgaW5jbHVkaW5nIHJlY2VudCBvbmVzLiBjdnNpbXBvcnQgYnkgZGVmYXVsdAorCXNraXBzIGNvbW1pdHMgdGhhdCBoYXZlIGEgdGltZXN0YW1wIGxlc3MgdGhhbiAxMCBtaW51dGVzIGFnby4KKworLUwgPGxpbWl0Pjo6CisJTGltaXQgdGhlIG51bWJlciBvZiBjb21taXRzIGltcG9ydGVkLiBXb3JrYXJvdW5kIGZvciBjYXNlcyB3aGVyZQorCWN2c2ltcG9ydCBsZWFrcyBtZW1vcnkuCisKKy1BIDxhdXRob3ItY29udi1maWxlPjo6CisJQ1ZTIGJ5IGRlZmF1bHQgdXNlcyB0aGUgVW5peCB1c2VybmFtZSB3aGVuIHdyaXRpbmcgaXRzCisJY29tbWl0IGxvZ3MuIFVzaW5nIHRoaXMgb3B0aW9uIGFuZCBhbiBhdXRob3ItY29udi1maWxlCisJbWFwcyB0aGUgbmFtZSByZWNvcmRlZCBpbiBDVlMgdG8gYXV0aG9yIG5hbWUsIGUtbWFpbCBhbmQKKwlvcHRpb25hbCB0aW1lIHpvbmU6CisrCistLS0tLS0tLS0KKwlleG9uPUFuZHJlYXMgRXJpY3Nzb24gPGFlQG9wNS5zZT4KKwlzcGF3bj1TaW1vbiBQYXduIDxzcGF3bkBmcm9nLXBvbmQub3JnPiBBbWVyaWNhL0NoaWNhZ28KKworLS0tLS0tLS0tCisrCisnZ2l0IGN2c2ltcG9ydCcgd2lsbCBtYWtlIGl0IGFwcGVhciBhcyB0aG9zZSBhdXRob3JzIGhhZAordGhlaXIgR0lUX0FVVEhPUl9OQU1FIGFuZCBHSVRfQVVUSE9SX0VNQUlMIHNldCBwcm9wZXJseQorYWxsIGFsb25nLiAgSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBHSVRfQVVUSE9SX0RBVEUgd2lsbAoraGF2ZSB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXQgYXBwbGllZC4KKysKK0ZvciBjb252ZW5pZW5jZSwgdGhpcyBkYXRhIGlzIHNhdmVkIHRvIGAkR0lUX0RJUi9jdnMtYXV0aG9yc2AKK2VhY2ggdGltZSB0aGUgJy1BJyBvcHRpb24gaXMgcHJvdmlkZWQgYW5kIHJlYWQgZnJvbSB0aGF0IHNhbWUKK2ZpbGUgZWFjaCB0aW1lICdnaXQgY3ZzaW1wb3J0JyBpcyBydW4uCisrCitJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgZmVhdHVyZSBpZiB5b3UgaW50ZW5kIHRvCitleHBvcnQgY2hhbmdlcyBiYWNrIHRvIENWUyBhZ2FpbiBsYXRlciB3aXRoCisnZ2l0IGN2c2V4cG9ydGNvbW1pdCcuCisKKy1SOjoKKwlHZW5lcmF0ZSBhIGAkR0lUX0RJUi9jdnMtcmV2aXNpb25zYCBmaWxlIGNvbnRhaW5pbmcgYSBtYXBwaW5nIGZyb20gQ1ZTCisJcmV2aXNpb24gbnVtYmVycyB0byBuZXdseS1jcmVhdGVkIEdpdCBjb21taXQgSURzLiAgVGhlIGdlbmVyYXRlZCBmaWxlCisJd2lsbCBjb250YWluIG9uZSBsaW5lIGZvciBlYWNoIChmaWxlbmFtZSwgcmV2aXNpb24pIHBhaXIgaW1wb3J0ZWQ7CisJZWFjaCBsaW5lIHdpbGwgbG9vayBsaWtlCisrCistLS0tLS0tLS0KK3NyYy93aWRnZXQuYyAxLjEgMWQ4NjJmMTczY2RjNzMyNWI2ZmE2ZDJhZTFjZmQ2MWZkMWI1MTJiNworLS0tLS0tLS0tCisrCitUaGUgcmV2aXNpb24gZGF0YSBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZSBpZiBpdCBhbHJlYWR5IGV4aXN0cywgZm9yIHVzZSB3aGVuCitkb2luZyBpbmNyZW1lbnRhbCBpbXBvcnRzLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBDVlMgcmV2aXNpb24gbnVtYmVycyBzdG9yZWQgaW4gY29tbWl0CittZXNzYWdlcywgYnVnLXRyYWNraW5nIHN5c3RlbXMsIGVtYWlsIGFyY2hpdmVzLCBhbmQgdGhlIGxpa2UuCisKKy1oOjoKKwlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCisKK09VVFBVVAorLS0tLS0tCitJZiBgLXZgIGlzIHNwZWNpZmllZCwgdGhlIHNjcmlwdCByZXBvcnRzIHdoYXQgaXQgaXMgZG9pbmcuCisKK090aGVyd2lzZSwgc3VjY2VzcyBpcyBpbmRpY2F0ZWQgdGhlIFVuaXggd2F5LCBpLmUuIGJ5IHNpbXBseSBleGl0aW5nIHdpdGgKK2EgemVybyBleGl0IHN0YXR1cy4KKworW1tpc3N1ZXNdXQorSVNTVUVTCistLS0tLS0KK1Byb2JsZW1zIHJlbGF0ZWQgdG8gdGltZXN0YW1wczoKKworICogSWYgdGltZXN0YW1wcyBvZiBjb21taXRzIGluIHRoZSBDVlMgcmVwb3NpdG9yeSBhcmUgbm90IHN0YWJsZSBlbm91Z2gKKyAgIHRvIGJlIHVzZWQgZm9yIG9yZGVyaW5nIGNvbW1pdHMgY2hhbmdlcyBtYXkgc2hvdyB1cCBpbiB0aGUgd3JvbmcKKyAgIG9yZGVyLgorICogSWYgYW55IGZpbGVzIHdlcmUgZXZlciAiY3ZzIGltcG9ydCJlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiwgaW1wb3J0IG9mCisgICBtb3JlIHRoYW4gb25lIHZlbmRvciByZWxlYXNlKSB0aGUgSEVBRCBjb250YWlucyB0aGUgd3JvbmcgY29udGVudC4KKyAqIElmIHRoZSB0aW1lc3RhbXAgb3JkZXIgb2YgZGlmZmVyZW50IGZpbGVzIGNyb3NzIHRoZSByZXZpc2lvbiBvcmRlcgorICAgd2l0aGluIHRoZSBjb21taXQgbWF0Y2hpbmcgdGltZSB3aW5kb3cgdGhlIG9yZGVyIG9mIGNvbW1pdHMgbWF5IGJlCisgICB3cm9uZy4KKworUHJvYmxlbXMgcmVsYXRlZCB0byBicmFuY2hlczoKKworICogQnJhbmNoZXMgb24gd2hpY2ggbm8gY29tbWl0cyBoYXZlIGJlZW4gbWFkZSBhcmUgbm90IGltcG9ydGVkLgorICogQWxsIGZpbGVzIGZyb20gdGhlIGJyYW5jaGluZyBwb2ludCBhcmUgYWRkZWQgdG8gYSBicmFuY2ggZXZlbiBpZgorICAgbmV2ZXIgYWRkZWQgaW4gQ1ZTLgorICogVGhpcyBhcHBsaWVzIHRvIGZpbGVzIGFkZGVkIHRvIHRoZSBzb3VyY2UgYnJhbmNoICphZnRlciogYSBkYXVnaHRlcgorICAgYnJhbmNoIHdhcyBjcmVhdGVkOiBpZiBwcmV2aW91c2x5IG5vIGNvbW1pdCB3YXMgbWFkZSBvbiB0aGUgZGF1Z2h0ZXIKKyAgIGJyYW5jaCB0aGV5IHdpbGwgZXJyb25lb3VzbHkgYmUgYWRkZWQgdG8gdGhlIGRhdWdodGVyIGJyYW5jaCBpbiBnaXQuCisKK1Byb2JsZW1zIHJlbGF0ZWQgdG8gdGFnczoKKworKiBNdWx0aXBsZSB0YWdzIG9uIHRoZSBzYW1lIHJldmlzaW9uIGFyZSBub3QgaW1wb3J0ZWQuCisKK0lmIHlvdSBzdXNwZWN0IHRoYXQgYW55IG9mIHRoZXNlIGlzc3VlcyBtYXkgYXBwbHkgdG8gdGhlIHJlcG9zaXRvcnkgeW91Cit3YW50IHRvIGltcG9ydCwgY29uc2lkZXIgdXNpbmcgY3ZzMmdpdDoKKworKiBjdnMyZ2l0IChwYXJ0IG9mIGN2czJzdm4pLCBgaHR0cDovL3N1YnZlcnNpb24uYXBhY2hlLm9yZy9gCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxYzcxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKQEAgLTAsMCArMSw0MzMgQEAKK2dpdC1jdnNzZXJ2ZXIoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWN2c3NlcnZlciAtIEEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorCitTU0g6CisKK1t2ZXJzZV0KK2V4cG9ydCBDVlNfU0VSVkVSPSJnaXQgY3Zzc2VydmVyIgorJ2N2cycgLWQgOmV4dDp1c2VyQHNlcnZlci9wYXRoL3JlcG8uZ2l0IGNvIDxIRUFEX25hbWU+CisKK3BzZXJ2ZXIgKC9ldGMvaW5ldGQuY29uZik6CisKK1t2ZXJzZV0KK2N2c3BzZXJ2ZXIgc3RyZWFtIHRjcCBub3dhaXQgbm9ib2R5IC91c3IvYmluL2dpdC1jdnNzZXJ2ZXIgZ2l0LWN2c3NlcnZlciBwc2VydmVyCisKK1VzYWdlOgorCitbdmVyc2VdCisnZ2l0LWN2c3NlcnZlcicgWzxvcHRpb25zPl0gW3BzZXJ2ZXJ8c2VydmVyXSBbPGRpcmVjdG9yeT4gLi4uXQorCitPUFRJT05TCistLS0tLS0tCisKK0FsbCB0aGVzZSBvcHRpb25zIG9idmlvdXNseSBvbmx5IG1ha2Ugc2Vuc2UgaWYgZW5mb3JjZWQgYnkgdGhlIHNlcnZlciBzaWRlLgorVGhleSBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgdG8gcmVzZW1ibGUgdGhlIGxpbmtnaXQ6Z2l0LWRhZW1vblsxXSBvcHRpb25zIGFzCitjbG9zZWx5IGFzIHBvc3NpYmxlLgorCistLWJhc2UtcGF0aCA8cGF0aD46OgorUHJlcGVuZCAncGF0aCcgdG8gcmVxdWVzdGVkIENWU1JPT1QKKworLS1zdHJpY3QtcGF0aHM6OgorRG9uJ3QgYWxsb3cgcmVjdXJzaW5nIGludG8gc3ViZGlyZWN0b3JpZXMKKworLS1leHBvcnQtYWxsOjoKK0Rvbid0IGNoZWNrIGZvciBgZ2l0Y3ZzLmVuYWJsZWRgIGluIGNvbmZpZy4gWW91IGFsc28gaGF2ZSB0byBzcGVjaWZ5IGEgbGlzdAorb2YgYWxsb3dlZCBkaXJlY3RvcmllcyAoc2VlIGJlbG93KSBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBvcHRpb24uCisKKy1WOjoKKy0tdmVyc2lvbjo6CitQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisKKy1oOjoKKy1IOjoKKy0taGVscDo6CitQcmludCB1c2FnZSBpbmZvcm1hdGlvbiBhbmQgZXhpdAorCis8ZGlyZWN0b3J5Pjo6CitZb3UgY2FuIHNwZWNpZnkgYSBsaXN0IG9mIGFsbG93ZWQgZGlyZWN0b3JpZXMuIElmIG5vIGRpcmVjdG9yaWVzCithcmUgZ2l2ZW4sIGFsbCBhcmUgYWxsb3dlZC4gVGhpcyBpcyBhbiBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uLCBnaXRjdnMKK2FjY2VzcyBzdGlsbCBuZWVkcyB0byBiZSBlbmFibGVkIGJ5IHRoZSBgZ2l0Y3ZzLmVuYWJsZWRgIGNvbmZpZyBvcHRpb24KK3VubGVzcyBgLS1leHBvcnQtYWxsYCB3YXMgZ2l2ZW4sIHRvby4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBhcHBsaWNhdGlvbiBpcyBhIENWUyBlbXVsYXRpb24gbGF5ZXIgZm9yIEdpdC4KKworSXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwuIEhvd2V2ZXIsIG5vdCBhbGwgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQsCithbmQgZm9yIHRob3NlIG1ldGhvZHMgdGhhdCBhcmUgaW1wbGVtZW50ZWQsCitub3QgYWxsIHN3aXRjaGVzIGFyZSBpbXBsZW1lbnRlZC4KKworVGVzdGluZyBoYXMgYmVlbiBkb25lIHVzaW5nIGJvdGggdGhlIENMSSBDVlMgY2xpZW50LCBhbmQgdGhlIEVjbGlwc2UgQ1ZTCitwbHVnaW4uIE1vc3QgZnVuY3Rpb25hbGl0eSB3b3JrcyBmaW5lIHdpdGggYm90aCBvZiB0aGVzZSBjbGllbnRzLgorCitMSU1JVEFUSU9OUworLS0tLS0tLS0tLS0KKworQ1ZTIGNsaWVudHMgY2Fubm90IHRhZywgYnJhbmNoIG9yIHBlcmZvcm0gR2l0IG1lcmdlcy4KKworJ2dpdC1jdnNzZXJ2ZXInIG1hcHMgR2l0IGJyYW5jaGVzIHRvIENWUyBtb2R1bGVzLiBUaGlzIGlzIHZlcnkgZGlmZmVyZW50Citmcm9tIHdoYXQgbW9zdCBDVlMgdXNlcnMgd291bGQgZXhwZWN0IHNpbmNlIGluIENWUyBtb2R1bGVzIHVzdWFsbHkgcmVwcmVzZW50CitvbmUgb3IgbW9yZSBkaXJlY3Rvcmllcy4KKworSU5TVEFMTEFUSU9OCistLS0tLS0tLS0tLS0KKworMS4gSWYgeW91IGFyZSBnb2luZyB0byBvZmZlciBDVlMgYWNjZXNzIHZpYSBwc2VydmVyLCBhZGQgYSBsaW5lIGluCisgICAvZXRjL2luZXRkLmNvbmYgbGlrZQorKworLS0KKy0tLS0tLQorICAgY3ZzcHNlcnZlciBzdHJlYW0gdGNwIG5vd2FpdCBub2JvZHkgZ2l0LWN2c3NlcnZlciBwc2VydmVyCisKKy0tLS0tLQorTm90ZTogU29tZSBpbmV0ZCBzZXJ2ZXJzIGxldCB5b3Ugc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZQoraW5kZXBlbmRlbnRseSBvZiB0aGUgdmFsdWUgb2YgYXJndlswXSAoaS5lLiB0aGUgbmFtZSB0aGUgcHJvZ3JhbSBhc3N1bWVzCitpdCB3YXMgZXhlY3V0ZWQgd2l0aCkuIEluIHRoaXMgY2FzZSB0aGUgY29ycmVjdCBsaW5lIGluIC9ldGMvaW5ldGQuY29uZgorbG9va3MgbGlrZQorCistLS0tLS0KKyAgIGN2c3BzZXJ2ZXIgc3RyZWFtIHRjcCBub3dhaXQgbm9ib2R5IC91c3IvYmluL2dpdC1jdnNzZXJ2ZXIgZ2l0LWN2c3NlcnZlciBwc2VydmVyCisKKy0tLS0tLQorCitPbmx5IGFub255bW91cyBhY2Nlc3MgaXMgcHJvdmlkZWQgYnkgcHNlcnZlIGJ5IGRlZmF1bHQuIFRvIGNvbW1pdCB5b3UKK3dpbGwgaGF2ZSB0byBjcmVhdGUgcHNlcnZlciBhY2NvdW50cywgc2ltcGx5IGFkZCBhIGdpdGN2cy5hdXRoZGIKK3NldHRpbmcgaW4gdGhlIGNvbmZpZyBmaWxlIG9mIHRoZSByZXBvc2l0b3JpZXMgeW91IHdhbnQgdGhlIGN2c3NlcnZlcgordG8gYWxsb3cgd3JpdGVzIHRvLCBmb3IgZXhhbXBsZToKKworLS0tLS0tCisKKyAgIFtnaXRjdnNdCisJYXV0aGRiID0gL2V0Yy9jdnNzZXJ2ZXIvcGFzc3dkCisKKy0tLS0tLQorVGhlIGZvcm1hdCBvZiB0aGVzZSBmaWxlcyBpcyB1c2VybmFtZSBmb2xsb3dlZCBieSB0aGUgZW5jcnlwdGVkIHBhc3N3b3JkLAorZm9yIGV4YW1wbGU6CisKKy0tLS0tLQorICAgbXl1c2VyOiQxT3l4NXI5bWRHWjIKKyAgIG15dXNlcjokMSRCQSlAJHZibk1KTUR5bTd0QTMyQWFtWHJtLi8KKy0tLS0tLQorWW91IGNhbiB1c2UgdGhlICdodHBhc3N3ZCcgZmFjaWxpdHkgdGhhdCBjb21lcyB3aXRoIEFwYWNoZSB0byBtYWtlIHRoZXNlCitmaWxlcywgYnV0IEFwYWNoZSdzIE1ENSBjcnlwdCBtZXRob2QgZGlmZmVycyBmcm9tIHRoZSBvbmUgdXNlZCBieSBtb3N0IEMKK2xpYnJhcnkncyBjcnlwdCgpIGZ1bmN0aW9uLCBzbyBkb24ndCB1c2UgdGhlIC1tIG9wdGlvbi4KKworQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHByb2R1Y2UgdGhlIHBhc3N3b3JkIHdpdGggcGVybCdzIGNyeXB0KCkgb3BlcmF0b3I6CistLS0tLQorICAgcGVybCAtZSAnbXkgKCR1c2VyLCAkcGFzcykgPSBAQVJHVjsgcHJpbnRmICIlczolc1xuIiwgJHVzZXIsIGNyeXB0KCR1c2VyLCAkcGFzcyknICRVU0VSIHBhc3N3b3JkCistLS0tLQorCitUaGVuIHByb3ZpZGUgeW91ciBwYXNzd29yZCB2aWEgdGhlIHBzZXJ2ZXIgbWV0aG9kLCBmb3IgZXhhbXBsZToKKy0tLS0tLQorICAgY3ZzIC1kOnBzZXJ2ZXI6c29tZXVzZXI6c29tZXBhc3N3b3JkIDxhdD4gc2VydmVyL3BhdGgvcmVwby5naXQgY28gPEhFQURfbmFtZT4KKy0tLS0tLQorTm8gc3BlY2lhbCBzZXR1cCBpcyBuZWVkZWQgZm9yIFNTSCBhY2Nlc3MsIG90aGVyIHRoYW4gaGF2aW5nIEdpdCB0b29scworaW4gdGhlIFBBVEguIElmIHlvdSBoYXZlIGNsaWVudHMgdGhhdCBkbyBub3QgYWNjZXB0IHRoZSBDVlNfU0VSVkVSCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgeW91IGNhbiByZW5hbWUgJ2dpdC1jdnNzZXJ2ZXInIHRvIGBjdnNgLgorCitOb3RlOiBOZXdlciBDVlMgdmVyc2lvbnMgKD49IDEuMTIuMTEpIGFsc28gc3VwcG9ydCBzcGVjaWZ5aW5nCitDVlNfU0VSVkVSIGRpcmVjdGx5IGluIENWU1JPT1QgbGlrZQorCistLS0tLS0KK2N2cyAtZCAiOmV4dDtDVlNfU0VSVkVSPWdpdCBjdnNzZXJ2ZXI6dXNlckBzZXJ2ZXIvcGF0aC9yZXBvLmdpdCIgY28gPEhFQURfbmFtZT4KKy0tLS0tLQorVGhpcyBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IGl0IHdpbGwgYmUgc2F2ZWQgaW4geW91ciAnQ1ZTL1Jvb3QnIGZpbGVzIGFuZAoreW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgYWx3YXlzIHNldHRpbmcgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLiAgU1NIIHVzZXJzIHJlc3RyaWN0ZWQgdG8gJ2dpdC1zaGVsbCcgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdAord2l0aCBDVlNfU0VSVkVSIChhbmQgc2hvdWxkbid0KSBhcyAnZ2l0LXNoZWxsJyB1bmRlcnN0YW5kcyBgY3ZzYCB0byBtZWFuCisnZ2l0LWN2c3NlcnZlcicgYW5kIHByZXRlbmRzIHRoYXQgdGhlIG90aGVyIGVuZCBydW5zIHRoZSByZWFsICdjdnMnIGJldHRlci4KKy0tCisyLiBGb3IgZWFjaCByZXBvIHRoYXQgeW91IHdhbnQgYWNjZXNzaWJsZSBmcm9tIENWUyB5b3UgbmVlZCB0byBlZGl0IGNvbmZpZyBpbgorICAgdGhlIHJlcG8gYW5kIGFkZCB0aGUgZm9sbG93aW5nIHNlY3Rpb24uCisrCistLQorLS0tLS0tCisgICBbZ2l0Y3ZzXQorICAgICAgICBlbmFibGVkPTEKKyAgICAgICAgIyBvcHRpb25hbCBmb3IgZGVidWdnaW5nCisJbG9nRmlsZT0vcGF0aC90by9sb2dmaWxlCisKKy0tLS0tLQorTm90ZTogeW91IG5lZWQgdG8gZW5zdXJlIGVhY2ggdXNlciB0aGF0IGlzIGdvaW5nIHRvIGludm9rZSAnZ2l0LWN2c3NlcnZlcicgaGFzCit3cml0ZSBhY2Nlc3MgdG8gdGhlIGxvZyBmaWxlIGFuZCB0byB0aGUgZGF0YWJhc2UgKHNlZQorPDxkYmJhY2tlbmQsRGF0YWJhc2UgQmFja2VuZD4+LiBJZiB5b3Ugd2FudCB0byBvZmZlciB3cml0ZSBhY2Nlc3Mgb3ZlcgorU1NILCB0aGUgdXNlcnMgb2YgY291cnNlIGFsc28gbmVlZCB3cml0ZSBhY2Nlc3MgdG8gdGhlIEdpdCByZXBvc2l0b3J5IGl0c2VsZi4KKworWW91IGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBlYWNoIHJlcG9zaXRvcnkgaXMgImJhcmUiICh3aXRob3V0IGEgR2l0IGluZGV4CitmaWxlKSBmb3IgYGN2cyBjb21taXRgIHRvIHdvcmsuIFNlZSBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10uCisKK1tbY29uZmlnYWNjZXNzbWV0aG9kXV0KK0FsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBjYW4gYWxzbyBiZSBvdmVycmlkZGVuIGZvciBhIHNwZWNpZmljIG1ldGhvZCBvZgorYWNjZXNzLiBWYWxpZCBtZXRob2QgbmFtZXMgYXJlICJleHQiIChmb3IgU1NIIGFjY2VzcykgYW5kICJwc2VydmVyIi4gVGhlCitmb2xsb3dpbmcgZXhhbXBsZSBjb25maWd1cmF0aW9uIHdvdWxkIGRpc2FibGUgcHNlcnZlciBhY2Nlc3Mgd2hpbGUgc3RpbGwKK2FsbG93aW5nIGFjY2VzcyBvdmVyIFNTSC4KKy0tLS0tLQorICAgW2dpdGN2c10KKyAgICAgICAgZW5hYmxlZD0wCisKKyAgIFtnaXRjdnMgImV4dCJdCisgICAgICAgIGVuYWJsZWQ9MQorLS0tLS0tCistLQorMy4gSWYgeW91IGRpZG4ndCBzcGVjaWZ5IHRoZSBDVlNST09UL0NWU19TRVJWRVIgZGlyZWN0bHkgaW4gdGhlIGNoZWNrb3V0IGNvbW1hbmQsCisgICBhdXRvbWF0aWNhbGx5IHNhdmluZyBpdCBpbiB5b3VyICdDVlMvUm9vdCcgZmlsZXMsIHRoZW4geW91IG5lZWQgdG8gc2V0IHRoZW0KKyAgIGV4cGxpY2l0bHkgaW4geW91ciBlbnZpcm9ubWVudC4gIENWU1JPT1Qgc2hvdWxkIGJlIHNldCBhcyBwZXIgbm9ybWFsLCBidXQgdGhlCisgICBkaXJlY3Rvcnkgc2hvdWxkIHBvaW50IGF0IHRoZSBhcHByb3ByaWF0ZSBHaXQgcmVwby4gIEFzIGFib3ZlLCBmb3IgU1NIIGNsaWVudHMKKyAgIF9ub3RfIHJlc3RyaWN0ZWQgdG8gJ2dpdC1zaGVsbCcsIENWU19TRVJWRVIgc2hvdWxkIGJlIHNldCB0byAnZ2l0LWN2c3NlcnZlcicuCisrCistLQorLS0tLS0tCisgICAgIGV4cG9ydCBDVlNST09UPTpleHQ6dXNlckBzZXJ2ZXI6L3Zhci9naXQvcHJvamVjdC5naXQKKyAgICAgZXhwb3J0IENWU19TRVJWRVI9ImdpdCBjdnNzZXJ2ZXIiCistLS0tLS0KKy0tCis0LiBGb3IgU1NIIGNsaWVudHMgdGhhdCB3aWxsIG1ha2UgY29tbWl0cywgbWFrZSBzdXJlIHRoZWlyIHNlcnZlci1zaWRlCisgICAuc3NoL2Vudmlyb25tZW50IGZpbGVzIChvciAuYmFzaHJjLCBldGMuLCBhY2NvcmRpbmcgdG8gdGhlaXIgc3BlY2lmaWMgc2hlbGwpCisgICBleHBvcnQgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciBHSVRfQVVUSE9SX05BTUUsIEdJVF9BVVRIT1JfRU1BSUwsCisgICBHSVRfQ09NTUlUVEVSX05BTUUsIGFuZCBHSVRfQ09NTUlUVEVSX0VNQUlMLiAgRm9yIFNTSCBjbGllbnRzIHdob3NlIGxvZ2luCisgICBzaGVsbCBpcyBiYXNoLCAuYmFzaHJjIG1heSBiZSBhIHJlYXNvbmFibGUgYWx0ZXJuYXRpdmUuCisKKzUuIENsaWVudHMgc2hvdWxkIG5vdyBiZSBhYmxlIHRvIGNoZWNrIG91dCB0aGUgcHJvamVjdC4gVXNlIHRoZSBDVlMgJ21vZHVsZScKKyAgIG5hbWUgdG8gaW5kaWNhdGUgd2hhdCBHaXQgJ2hlYWQnIHlvdSB3YW50IHRvIGNoZWNrIG91dC4gIFRoaXMgYWxzbyBzZXRzIHRoZQorICAgbmFtZSBvZiB5b3VyIG5ld2x5IGNoZWNrZWQtb3V0IGRpcmVjdG9yeSwgdW5sZXNzIHlvdSB0ZWxsIGl0IG90aGVyd2lzZSB3aXRoCisgICBgLWQgPGRpcl9uYW1lPmAuICBGb3IgZXhhbXBsZSwgdGhpcyBjaGVja3Mgb3V0ICdtYXN0ZXInIGJyYW5jaCB0byB0aGUKKyAgIGBwcm9qZWN0LW1hc3RlcmAgZGlyZWN0b3J5OgorKworLS0tLS0tCisgICAgIGN2cyBjbyAtZCBwcm9qZWN0LW1hc3RlciBtYXN0ZXIKKy0tLS0tLQorCitbW2RiYmFja2VuZF1dCitEQVRBQkFTRSBCQUNLRU5ECistLS0tLS0tLS0tLS0tLS0tCisKKydnaXQtY3Zzc2VydmVyJyB1c2VzIG9uZSBkYXRhYmFzZSBwZXIgR2l0IGhlYWQgKGkuZS4gQ1ZTIG1vZHVsZSkgdG8KK3N0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXBvc2l0b3J5IHRvIG1haW50YWluIGNvbnNpc3RlbnQKK0NWUyByZXZpc2lvbiBudW1iZXJzLiBUaGUgZGF0YWJhc2UgbmVlZHMgdG8gYmUKK3VwZGF0ZWQgKGkuZS4gd3JpdHRlbiB0bykgYWZ0ZXIgZXZlcnkgY29tbWl0LgorCitJZiB0aGUgY29tbWl0IGlzIGRvbmUgZGlyZWN0bHkgYnkgdXNpbmcgYGdpdGAgKGFzIG9wcG9zZWQgdG8KK3VzaW5nICdnaXQtY3Zzc2VydmVyJykgdGhlIHVwZGF0ZSB3aWxsIG5lZWQgdG8gaGFwcGVuIG9uIHRoZQorbmV4dCByZXBvc2l0b3J5IGFjY2VzcyBieSAnZ2l0LWN2c3NlcnZlcicsIGluZGVwZW5kZW50IG9mCithY2Nlc3MgbWV0aG9kIGFuZCByZXF1ZXN0ZWQgb3BlcmF0aW9uLgorCitUaGF0IG1lYW5zIHRoYXQgZXZlbiBpZiB5b3Ugb2ZmZXIgb25seSByZWFkIGFjY2VzcyAoZS5nLiBieSB1c2luZwordGhlIHBzZXJ2ZXIgbWV0aG9kKSwgJ2dpdC1jdnNzZXJ2ZXInIHNob3VsZCBoYXZlIHdyaXRlIGFjY2VzcyB0bwordGhlIGRhdGFiYXNlIHRvIHdvcmsgcmVsaWFibHkgKG90aGVyd2lzZSB5b3UgbmVlZCB0byBtYWtlIHN1cmUKK3RoYXQgdGhlIGRhdGFiYXNlIGlzIHVwIHRvIGRhdGUgYW55IHRpbWUgJ2dpdC1jdnNzZXJ2ZXInIGlzIGV4ZWN1dGVkKS4KKworQnkgZGVmYXVsdCBpdCB1c2VzIFNRTGl0ZSBkYXRhYmFzZXMgaW4gdGhlIEdpdCBkaXJlY3RvcnksIG5hbWVkCitgZ2l0Y3ZzLjxtb2R1bGVfbmFtZT4uc3FsaXRlYC4gTm90ZSB0aGF0IHRoZSBTUUxpdGUgYmFja2VuZCBjcmVhdGVzCit0ZW1wb3JhcnkgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBkYXRhYmFzZSBmaWxlIG9uCit3cml0ZSBzbyBpdCBtaWdodCBub3QgYmUgZW5vdWdoIHRvIGdyYW50IHRoZSB1c2VycyB1c2luZworJ2dpdC1jdnNzZXJ2ZXInIHdyaXRlIGFjY2VzcyB0byB0aGUgZGF0YWJhc2UgZmlsZSB3aXRob3V0IGdyYW50aW5nCit0aGVtIHdyaXRlIGFjY2VzcyB0byB0aGUgZGlyZWN0b3J5LCB0b28uCisKK1RoZSBkYXRhYmFzZSBjYW5ub3QgYmUgcmVsaWFibHkgcmVnZW5lcmF0ZWQgaW4gYQorY29uc2lzdGVudCBmb3JtIGFmdGVyIHRoZSBicmFuY2ggaXQgaXMgdHJhY2tpbmcgaGFzIGNoYW5nZWQuCitFeGFtcGxlOiBGb3IgbWVyZ2VkIGJyYW5jaGVzLCAnZ2l0LWN2c3NlcnZlcicgb25seSB0cmFja3MKK29uZSBicmFuY2ggb2YgZGV2ZWxvcG1lbnQsIGFuZCBhZnRlciBhICdnaXQgbWVyZ2UnIGFuCitpbmNyZW1lbnRhbGx5IHVwZGF0ZWQgZGF0YWJhc2UgbWF5IHRyYWNrIGEgZGlmZmVyZW50IGJyYW5jaAordGhhbiBhIGRhdGFiYXNlIHJlZ2VuZXJhdGVkIGZyb20gc2NyYXRjaCwgY2F1c2luZyBpbmNvbnNpc3RlbnQKK0NWUyByZXZpc2lvbiBudW1iZXJzLiBgZ2l0LWN2c3NlcnZlcmAgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoaWNoCiticmFuY2ggaXQgd291bGQgaGF2ZSBwaWNrZWQgaWYgaXQgaGFkIGJlZW4gcnVuIGluY3JlbWVudGFsbHkKK3ByZS1tZXJnZS4gU28gaWYgeW91IGhhdmUgdG8gZnVsbHkgb3IgcGFydGlhbGx5IChmcm9tIG9sZAorYmFja3VwKSByZWdlbmVyYXRlIHRoZSBkYXRhYmFzZSwgeW91IHNob3VsZCBiZSBzdXNwaWNpb3VzCitvZiBwcmUtZXhpc3RpbmcgQ1ZTIHNhbmRib3hlcy4KKworWW91IGNhbiBjb25maWd1cmUgdGhlIGRhdGFiYXNlIGJhY2tlbmQgd2l0aCB0aGUgZm9sbG93aW5nCitjb25maWd1cmF0aW9uIHZhcmlhYmxlczoKKworQ29uZmlndXJpbmcgZGF0YWJhc2UgYmFja2VuZAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisnZ2l0LWN2c3NlcnZlcicgdXNlcyB0aGUgUGVybCBEQkkgbW9kdWxlLiBQbGVhc2UgYWxzbyByZWFkCitpdHMgZG9jdW1lbnRhdGlvbiBpZiBjaGFuZ2luZyB0aGVzZSB2YXJpYWJsZXMsIGVzcGVjaWFsbHkKK2Fib3V0IGBEQkktPmNvbm5lY3QoKWAuCisKK2dpdGN2cy5kYk5hbWU6OgorCURhdGFiYXNlIG5hbWUuIFRoZSBleGFjdCBtZWFuaW5nIGRlcGVuZHMgb24gdGhlCisJc2VsZWN0ZWQgZGF0YWJhc2UgZHJpdmVyLCBmb3IgU1FMaXRlIHRoaXMgaXMgYSBmaWxlbmFtZS4KKwlTdXBwb3J0cyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gKHNlZSBiZWxvdykuIE1heQorCW5vdCBjb250YWluIHNlbWljb2xvbnMgKGA7YCkuCisJRGVmYXVsdDogJyVHZ2l0Y3ZzLiVtLnNxbGl0ZScKKworZ2l0Y3ZzLmRiRHJpdmVyOjoKKwlVc2VkIERCSSBkcml2ZXIuIFlvdSBjYW4gc3BlY2lmeSBhbnkgYXZhaWxhYmxlIGRyaXZlcgorCWZvciB0aGlzIGhlcmUsIGJ1dCBpdCBtaWdodCBub3Qgd29yay4gY3Zzc2VydmVyIGlzIHRlc3RlZAorCXdpdGggJ0RCRDo6U1FMaXRlJywgcmVwb3J0ZWQgdG8gd29yayB3aXRoCisJJ0RCRDo6UGcnLCBhbmQgcmVwb3J0ZWQgKm5vdCogdG8gd29yayB3aXRoICdEQkQ6Om15c3FsJy4KKwlQbGVhc2UgcmVnYXJkIHRoaXMgYXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUuIE1heSBub3QKKwljb250YWluIGNvbG9ucyAoYDpgKS4KKwlEZWZhdWx0OiAnU1FMaXRlJworCitnaXRjdnMuZGJ1c2VyOjoKKwlEYXRhYmFzZSB1c2VyLiBPbmx5IHVzZWZ1bCBpZiBzZXR0aW5nIGBkYkRyaXZlcmAsIHNpbmNlCisJU1FMaXRlIGhhcyBubyBjb25jZXB0IG9mIGRhdGFiYXNlIHVzZXJzLiBTdXBwb3J0cyB2YXJpYWJsZQorCXN1YnN0aXR1dGlvbiAoc2VlIGJlbG93KS4KKworZ2l0Y3ZzLmRiUGFzczo6CisJRGF0YWJhc2UgcGFzc3dvcmQuICBPbmx5IHVzZWZ1bCBpZiBzZXR0aW5nIGBkYkRyaXZlcmAsIHNpbmNlCisJU1FMaXRlIGhhcyBubyBjb25jZXB0IG9mIGRhdGFiYXNlIHBhc3N3b3Jkcy4KKworZ2l0Y3ZzLmRiVGFibGVOYW1lUHJlZml4OjoKKwlEYXRhYmFzZSB0YWJsZSBuYW1lIHByZWZpeC4gIFN1cHBvcnRzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbgorCShzZWUgYmVsb3cpLiAgQW55IG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZAorCXdpdGggdW5kZXJzY29yZXMuCisKK0FsbCB2YXJpYWJsZXMgY2FuIGFsc28gYmUgc2V0IHBlciBhY2Nlc3MgbWV0aG9kLCBzZWUgPDxjb25maWdhY2Nlc3NtZXRob2QsYWJvdmU+Pi4KKworVmFyaWFibGUgc3Vic3RpdHV0aW9uCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KK0luIGBkYkRyaXZlcmAgYW5kIGBkYlVzZXJgIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorCislRzo6CisJR2l0IGRpcmVjdG9yeSBuYW1lCislZzo6CisJR2l0IGRpcmVjdG9yeSBuYW1lLCB3aGVyZSBhbGwgY2hhcmFjdGVycyBleGNlcHQgZm9yCisJYWxwaGFudW1lcmljIG9uZXMsIGAuYCwgYW5kIGAtYCBhcmUgcmVwbGFjZWQgd2l0aAorCWBfYCAodGhpcyBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHRoZSBkaXJlY3RvcnkKKwluYW1lIGluIGEgZmlsZW5hbWUgaWYgd2FudGVkKQorJW06OgorCUNWUyBtb2R1bGUvR2l0IGhlYWQgbmFtZQorJWE6OgorCWFjY2VzcyBtZXRob2QgKG9uZSBvZiAiZXh0IiBvciAicHNlcnZlciIpCisldTo6CisJTmFtZSBvZiB0aGUgdXNlciBydW5uaW5nICdnaXQtY3Zzc2VydmVyJy4KKwlJZiBubyBuYW1lIGNhbiBiZSBkZXRlcm1pbmVkLCB0aGUKKwludW1lcmljIHVpZCBpcyB1c2VkLgorCitFTlZJUk9OTUVOVAorLS0tLS0tLS0tLS0KKworVGhlc2UgdmFyaWFibGVzIG9idmlhdGUgdGhlIG5lZWQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zIGluIHNvbWUKK2NpcmN1bXN0YW5jZXMsIGFsbG93aW5nIGVhc2llciByZXN0cmljdGVkIHVzYWdlIHRocm91Z2ggZ2l0LXNoZWxsLgorCitHSVRfQ1ZTU0VSVkVSX0JBU0VfUEFUSCB0YWtlcyB0aGUgcGxhY2Ugb2YgdGhlIGFyZ3VtZW50IHRvIC0tYmFzZS1wYXRoLgorCitHSVRfQ1ZTU0VSVkVSX1JPT1Qgc3BlY2lmaWVzIGEgc2luZ2xlLWRpcmVjdG9yeSB3aGl0ZWxpc3QuIFRoZQorcmVwb3NpdG9yeSBtdXN0IHN0aWxsIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWNjZXNzIHRocm91Z2gKK2dpdC1jdnNzZXJ2ZXIsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworV2hlbiB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHNldCwgdGhlIGNvcnJlc3BvbmRpbmcKK2NvbW1hbmQtbGluZSBhcmd1bWVudHMgbWF5IG5vdCBiZSB1c2VkLgorCitFQ0xJUFNFIENWUyBDTElFTlQgTk9URVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBnZXQgYSBjaGVja291dCB3aXRoIHRoZSBFY2xpcHNlIENWUyBjbGllbnQ6CisKKzEuIFNlbGVjdCAiQ3JlYXRlIGEgbmV3IHByb2plY3QgLT4gRnJvbSBDVlMgY2hlY2tvdXQiCisyLiBDcmVhdGUgYSBuZXcgbG9jYXRpb24uIFNlZSB0aGUgbm90ZXMgYmVsb3cgZm9yIGRldGFpbHMgb24gaG93IHRvIGNob29zZSB0aGUKKyAgIHJpZ2h0IHByb3RvY29sLgorMy4gQnJvd3NlIHRoZSAnbW9kdWxlcycgYXZhaWxhYmxlLiBJdCB3aWxsIGdpdmUgeW91IGEgbGlzdCBvZiB0aGUgaGVhZHMgaW4KKyAgIHRoZSByZXBvc2l0b3J5LiBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBicm93c2UgdGhlIHRyZWUgZnJvbSB0aGVyZS4gT25seQorICAgdGhlIGhlYWRzLgorNC4gUGljayBgSEVBRGAgd2hlbiBpdCBhc2tzIHdoYXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQuIFVudGljayB0aGUKKyAgICJsYXVuY2ggY29tbWl0IHdpemFyZCIgdG8gYXZvaWQgY29tbWl0dGluZyB0aGUgLnByb2plY3QgZmlsZS4KKworUHJvdG9jb2wgbm90ZXM6IElmIHlvdSBhcmUgdXNpbmcgYW5vbnltb3VzIGFjY2VzcyB2aWEgcHNlcnZlciwganVzdCBzZWxlY3QgdGhhdC4KK1Rob3NlIHVzaW5nIFNTSCBhY2Nlc3Mgc2hvdWxkIGNob29zZSB0aGUgJ2V4dCcgcHJvdG9jb2wsIGFuZCBjb25maWd1cmUgJ2V4dCcKK2FjY2VzcyBvbiB0aGUgUHJlZmVyZW5jZXMtPlRlYW0tPkNWUy0+RXh0Q29ubmVjdGlvbiBwYW5lLiBTZXQgQ1ZTX1NFUlZFUiB0bworImBnaXQgY3Zzc2VydmVyYCIuIE5vdGUgdGhhdCBwYXNzd29yZCBzdXBwb3J0IGlzIG5vdCBnb29kIHdoZW4gdXNpbmcgJ2V4dCcsCit5b3Ugd2lsbCBkZWZpbml0ZWx5IHdhbnQgdG8gaGF2ZSBTU0gga2V5cyBzZXR1cC4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBqdXN0IHVzZSB0aGUgbm9uLXN0YW5kYXJkIGV4dHNzaCBwcm90b2NvbCB0aGF0IEVjbGlwc2UKK29mZmVyLiBJbiB0aGF0IGNhc2UgQ1ZTX1NFUlZFUiBpcyBpZ25vcmVkLCBhbmQgeW91IHdpbGwgaGF2ZSB0byByZXBsYWNlCit0aGUgY3ZzIHV0aWxpdHkgb24gdGhlIHNlcnZlciB3aXRoICdnaXQtY3Zzc2VydmVyJyBvciBtYW5pcHVsYXRlIHlvdXIgYC5iYXNocmNgCitzbyB0aGF0IGNhbGxpbmcgJ2N2cycgZWZmZWN0aXZlbHkgY2FsbHMgJ2dpdC1jdnNzZXJ2ZXInLgorCitDTElFTlRTIEtOT1dOIFRPIFdPUksKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIENWUyAxLjEyLjkgb24gRGViaWFuCistIENWUyAxLjExLjE3IG9uIE1hY09TWCAoZnJvbSBGaW5rIHBhY2thZ2UpCistIEVjbGlwc2UgMy4wLCAzLjEuMiBvbiBNYWNPU1ggKHNlZSBFY2xpcHNlIENWUyBDbGllbnQgTm90ZXMpCistIFRvcnRvaXNlQ1ZTCisKK09QRVJBVElPTlMgU1VQUE9SVEVECistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgdGhlIG9wZXJhdGlvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCB1c2UgYXJlIHN1cHBvcnRlZCwgaW5jbHVkaW5nCitjaGVja291dCwgZGlmZiwgc3RhdHVzLCB1cGRhdGUsIGxvZywgYWRkLCByZW1vdmUsIGNvbW1pdC4KKworTW9zdCBDVlMgY29tbWFuZCBhcmd1bWVudHMgdGhhdCByZWFkIENWUyB0YWdzIG9yIHJldmlzaW9uIG51bWJlcnMKKyh0eXBpY2FsbHkgLXIpIHdvcmssIGFuZCBhbHNvIHN1cHBvcnQgYW55IGdpdCByZWZzcGVjCisodGFnLCBicmFuY2gsIGNvbW1pdCBJRCwgZXRjKS4KK0hvd2V2ZXIsIENWUyByZXZpc2lvbiBudW1iZXJzIGZvciBub24tZGVmYXVsdCBicmFuY2hlcyBhcmUgbm90IHdlbGwKK2VtdWxhdGVkLCBhbmQgY3ZzIGxvZyBkb2VzIG5vdCBzaG93IHRhZ3Mgb3IgYnJhbmNoZXMgYXQKK2FsbC4gIChOb24tbWFpbi1icmFuY2ggQ1ZTIHJldmlzaW9uIG51bWJlcnMgc3VwZXJmaWNpYWxseSByZXNlbWJsZSBDVlMKK3JldmlzaW9uIG51bWJlcnMsIGJ1dCB0aGV5IGFjdHVhbGx5IGVuY29kZSBhIGdpdCBjb21taXQgSUQgZGlyZWN0bHksCityYXRoZXIgdGhhbiByZXByZXNlbnQgdGhlIG51bWJlciBvZiByZXZpc2lvbnMgc2luY2UgdGhlIGJyYW5jaCBwb2ludC4pCisKK05vdGUgdGhhdCB0aGVyZSBhcmUgdHdvIHdheXMgdG8gY2hlY2tvdXQgYSBwYXJ0aWN1bGFyIGJyYW5jaC4KK0FzIGRlc2NyaWJlZCBlbHNld2hlcmUgb24gdGhpcyBwYWdlLCB0aGUgIm1vZHVsZSIgcGFyYW1ldGVyCitvZiBjdnMgY2hlY2tvdXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBicmFuY2ggbmFtZSwgYW5kIGl0IGJlY29tZXMKK3RoZSBtYWluIGJyYW5jaC4gIEl0IHJlbWFpbnMgdGhlIG1haW4gYnJhbmNoIGZvciBhIGdpdmVuIHNhbmRib3gKK2V2ZW4gaWYgeW91IHRlbXBvcmFyaWx5IG1ha2UgYW5vdGhlciBicmFuY2ggc3RpY2t5IHdpdGgKK2N2cyB1cGRhdGUgLXIuICBBbHRlcm5hdGl2ZWx5LCB0aGUgLXIgYXJndW1lbnQgY2FuIGluZGljYXRlCitzb21lIG90aGVyIGJyYW5jaCB0byBhY3R1YWxseSBjaGVja291dCwgZXZlbiB0aG91Z2ggdGhlIG1vZHVsZQoraXMgc3RpbGwgdGhlICJtYWluIiBicmFuY2guICBUcmFkZW9mZnMgKGFzIGN1cnJlbnRseQoraW1wbGVtZW50ZWQpOiBFYWNoIG5ldyAibW9kdWxlIiBjcmVhdGVzIGEgbmV3IGRhdGFiYXNlIG9uIGRpc2sgd2l0aAorYSBoaXN0b3J5IGZvciB0aGUgZ2l2ZW4gbW9kdWxlLCBhbmQgYWZ0ZXIgdGhlIGRhdGFiYXNlIGlzIGNyZWF0ZWQsCitvcGVyYXRpb25zIGFnYWluc3QgdGhhdCBtYWluIGJyYW5jaCBhcmUgZmFzdC4gIE9yIGFsdGVybmF0aXZlbHksCistciBkb2Vzbid0IHRha2UgYW55IGV4dHJhIGRpc2sgc3BhY2UsIGJ1dCBtYXkgYmUgc2lnbmlmaWNhbnRseSBzbG93ZXIgZm9yCittYW55IG9wZXJhdGlvbnMsIGxpa2UgY3ZzIHVwZGF0ZS4KKworSWYgeW91IHdhbnQgdG8gcmVmZXIgdG8gYSBnaXQgcmVmc3BlYyB0aGF0IGhhcyBjaGFyYWN0ZXJzIHRoYXQgYXJlCitub3QgYWxsb3dlZCBieSBDVlMsIHlvdSBoYXZlIHR3byBvcHRpb25zLiAgRmlyc3QsIGl0IG1heSBqdXN0IHdvcmsKK3RvIHN1cHBseSB0aGUgZ2l0IHJlZnNwZWMgZGlyZWN0bHkgdG8gdGhlIGFwcHJvcHJpYXRlIENWUyAtciBhcmd1bWVudDsKK3NvbWUgQ1ZTIGNsaWVudHMgZG9uJ3Qgc2VlbSB0byBkbyBtdWNoIHNhbml0eSBjaGVja2luZyBvZiB0aGUgYXJndW1lbnQuCitTZWNvbmQsIGlmIHRoYXQgZmFpbHMsIHlvdSBjYW4gdXNlIGEgc3BlY2lhbCBjaGFyYWN0ZXIgZXNjYXBlIG1lY2hhbmlzbQordGhhdCBvbmx5IHVzZXMgY2hhcmFjdGVycyB0aGF0IGFyZSB2YWxpZCBpbiBDVlMgdGFncy4gIEEgc2VxdWVuY2UKK29mIDQgb3IgNSBjaGFyYWN0ZXJzIG9mIHRoZSBmb3JtICh1bmRlcnNjb3JlIChgIl8iYCksIGRhc2ggKGAiLSJgKSwKK29uZSBvciB0d28gY2hhcmFjdGVycywgYW5kIGRhc2ggKGAiLSJgKSkgY2FuIGVuY29kZSB2YXJpb3VzIGNoYXJhY3RlcnMgYmFzZWQKK29uIHRoZSBvbmUgb3IgdHdvIGxldHRlcnM6IGAicyJgIGZvciBzbGFzaCAoYCIvImApLCBgInAiYCBmb3IKK3BlcmlvZCAoYCIuImApLCBgInUiYCBmb3IgdW5kZXJzY29yZSAoYCJfImApLCBvciB0d28gaGV4YWRlY2ltYWwgZGlnaXRzCitmb3IgYW55IGJ5dGUgdmFsdWUgYXQgYWxsICh0eXBpY2FsbHkgYW4gQVNDSUkgbnVtYmVyLCBvciBwZXJoYXBzIGEgcGFydAorb2YgYSBVVEYtOCBlbmNvZGVkIGNoYXJhY3RlcikuCisKK0xlZ2FjeSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgKGVkaXQsIHdhdGNoIGFuZCByZWxhdGVkKS4KK0V4cG9ydHMgYW5kIHRhZ2dpbmcgKHRhZ3MgYW5kIGJyYW5jaGVzKSBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIHN0YWdlLgorCitDUkxGIExpbmUgRW5kaW5nIENvbnZlcnNpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlZmF1bHQgdGhlIHNlcnZlciBsZWF2ZXMgdGhlIGAta2AgbW9kZSBibGFuayBmb3IgYWxsIGZpbGVzLAord2hpY2ggY2F1c2VzIHRoZSBDVlMgY2xpZW50IHRvIHRyZWF0IHRoZW0gYXMgYSB0ZXh0IGZpbGVzLCBzdWJqZWN0Cit0byBlbmQtb2YtbGluZSBjb252ZXJzaW9uIG9uIHNvbWUgcGxhdGZvcm1zLgorCitZb3UgY2FuIG1ha2UgdGhlIHNlcnZlciB1c2UgdGhlIGVuZC1vZi1saW5lIGNvbnZlcnNpb24gYXR0cmlidXRlcyB0bworc2V0IHRoZSBgLWtgIG1vZGVzIGZvciBmaWxlcyBieSBzZXR0aW5nIHRoZSBgZ2l0Y3ZzLnVzZWNybGZhdHRyYAorY29uZmlnIHZhcmlhYmxlLiAgU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorYWJvdXQgZW5kLW9mLWxpbmUgY29udmVyc2lvbi4KKworQWx0ZXJuYXRpdmVseSwgaWYgYGdpdGN2cy51c2VjcmxmYXR0cmAgY29uZmlnIGlzIG5vdCBlbmFibGVkCitvciB0aGUgYXR0cmlidXRlcyBkbyBub3QgYWxsb3cgYXV0b21hdGljIGRldGVjdGlvbiBmb3IgYSBmaWxlbmFtZSwgdGhlbgordGhlIHNlcnZlciB1c2VzIHRoZSBgZ2l0Y3ZzLmFsbEJpbmFyeWAgY29uZmlnIGZvciB0aGUgZGVmYXVsdCBzZXR0aW5nLgorSWYgYGdpdGN2cy5hbGxCaW5hcnlgIGlzIHNldCwgdGhlbiBmaWxlIG5vdCBvdGhlcndpc2UKK3NwZWNpZmllZCB3aWxsIGRlZmF1bHQgdG8gJy1rYicgbW9kZS4gT3RoZXJ3aXNlIHRoZSBgLWtgIG1vZGUKK2lzIGxlZnQgYmxhbmsuIEJ1dCBpZiBgZ2l0Y3ZzLmFsbEJpbmFyeWAgaXMgc2V0IHRvICJndWVzcyIsIHRoZW4KK3RoZSBjb3JyZWN0IGAta2AgbW9kZSB3aWxsIGJlIGd1ZXNzZWQgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mCit0aGUgZmlsZS4KKworRm9yIGJlc3QgY29uc2lzdGVuY3kgd2l0aCAnY3ZzJywgaXQgaXMgcHJvYmFibHkgYmVzdCB0byBvdmVycmlkZSB0aGUKK2RlZmF1bHRzIGJ5IHNldHRpbmcgYGdpdGN2cy51c2VjcmxmYXR0cmAgdG8gdHJ1ZSwKK2FuZCBgZ2l0Y3ZzLmFsbEJpbmFyeWAgdG8gImd1ZXNzIi4KKworREVQRU5ERU5DSUVTCistLS0tLS0tLS0tLS0KKydnaXQtY3Zzc2VydmVyJyBkZXBlbmRzIG9uIERCRDo6U1FMaXRlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYzI4YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CkBAIC0wLDAgKzEsMzQwIEBACitnaXQtZGFlbW9uKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kYWVtb24gLSBBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkYWVtb24nIFstLXZlcmJvc2VdIFstLXN5c2xvZ10gWy0tZXhwb3J0LWFsbF0KKwkgICAgIFstLXRpbWVvdXQ9PG4+XSBbLS1pbml0LXRpbWVvdXQ9PG4+XSBbLS1tYXgtY29ubmVjdGlvbnM9PG4+XQorCSAgICAgWy0tc3RyaWN0LXBhdGhzXSBbLS1iYXNlLXBhdGg9PHBhdGg+XSBbLS1iYXNlLXBhdGgtcmVsYXhlZF0KKwkgICAgIFstLXVzZXItcGF0aCB8IC0tdXNlci1wYXRoPTxwYXRoPl0KKwkgICAgIFstLWludGVycG9sYXRlZC1wYXRoPTxwYXRodGVtcGxhdGU+XQorCSAgICAgWy0tcmV1c2VhZGRyXSBbLS1kZXRhY2hdIFstLXBpZC1maWxlPTxmaWxlPl0KKwkgICAgIFstLWVuYWJsZT08c2VydmljZT5dIFstLWRpc2FibGU9PHNlcnZpY2U+XQorCSAgICAgWy0tYWxsb3ctb3ZlcnJpZGU9PHNlcnZpY2U+XSBbLS1mb3JiaWQtb3ZlcnJpZGU9PHNlcnZpY2U+XQorCSAgICAgWy0tYWNjZXNzLWhvb2s9PHBhdGg+XSBbLS1bbm8tXWluZm9ybWF0aXZlLWVycm9yc10KKwkgICAgIFstLWluZXRkIHwKKwkgICAgICBbLS1saXN0ZW49PGhvc3Rfb3JfaXBhZGRyPl0gWy0tcG9ydD08bj5dCisJICAgICAgWy0tdXNlcj08dXNlcj4gWy0tZ3JvdXA9PGdyb3VwPl1dXQorCSAgICAgWy0tbG9nLWRlc3RpbmF0aW9uPShzdGRlcnJ8c3lzbG9nfG5vbmUpXQorCSAgICAgWzxkaXJlY3Rvcnk+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0EgcmVhbGx5IHNpbXBsZSBUQ1AgR2l0IGRhZW1vbiB0aGF0IG5vcm1hbGx5IGxpc3RlbnMgb24gcG9ydCAiREVGQVVMVF9HSVRfUE9SVCIKK2FrYSA5NDE4LiAgSXQgd2FpdHMgZm9yIGEgY29ubmVjdGlvbiBhc2tpbmcgZm9yIGEgc2VydmljZSwgYW5kIHdpbGwgc2VydmUKK3RoYXQgc2VydmljZSBpZiBpdCBpcyBlbmFibGVkLgorCitJdCB2ZXJpZmllcyB0aGF0IHRoZSBkaXJlY3RvcnkgaGFzIHRoZSBtYWdpYyBmaWxlICJnaXQtZGFlbW9uLWV4cG9ydC1vayIsIGFuZAoraXQgd2lsbCByZWZ1c2UgdG8gZXhwb3J0IGFueSBHaXQgZGlyZWN0b3J5IHRoYXQgaGFzbid0IGV4cGxpY2l0bHkgYmVlbiBtYXJrZWQKK2ZvciBleHBvcnQgdGhpcyB3YXkgKHVubGVzcyB0aGUgYC0tZXhwb3J0LWFsbGAgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCkuIElmIHlvdQorcGFzcyBzb21lIGRpcmVjdG9yeSBwYXRocyBhcyAnZ2l0IGRhZW1vbicgYXJndW1lbnRzLCB5b3UgY2FuIGZ1cnRoZXIgcmVzdHJpY3QKK3RoZSBvZmZlcnMgdG8gYSB3aGl0ZWxpc3QgY29tcHJpc2luZyBvZiB0aG9zZS4KKworQnkgZGVmYXVsdCwgb25seSBgdXBsb2FkLXBhY2tgIHNlcnZpY2UgaXMgZW5hYmxlZCwgd2hpY2ggc2VydmVzCisnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScgY2xpZW50cywgd2hpY2ggYXJlIGludm9rZWQKK2Zyb20gJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcsIGFuZCAnZ2l0IGNsb25lJy4KKworVGhpcyBpcyBpZGVhbGx5IHN1aXRlZCBmb3IgcmVhZC1vbmx5IHVwZGF0ZXMsIGkuZS4sIHB1bGxpbmcgZnJvbQorR2l0IHJlcG9zaXRvcmllcy4KKworQW4gYHVwbG9hZC1hcmNoaXZlYCBhbHNvIGV4aXN0cyB0byBzZXJ2ZSAnZ2l0IGFyY2hpdmUnLgorCitPUFRJT05TCistLS0tLS0tCistLXN0cmljdC1wYXRoczo6CisJTWF0Y2ggcGF0aHMgZXhhY3RseSAoaS5lLiBkb24ndCBhbGxvdyAiL2Zvby9yZXBvIiB3aGVuIHRoZSByZWFsIHBhdGggaXMKKwkiL2Zvby9yZXBvLmdpdCIgb3IgIi9mb28vcmVwby8uZ2l0IikgYW5kIGRvbid0IGRvIHVzZXItcmVsYXRpdmUgcGF0aHMuCisJJ2dpdCBkYWVtb24nIHdpbGwgcmVmdXNlIHRvIHN0YXJ0IHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgbm8KKwl3aGl0ZWxpc3QgaXMgc3BlY2lmaWVkLgorCistLWJhc2UtcGF0aD08cGF0aD46OgorCVJlbWFwIGFsbCB0aGUgcGF0aCByZXF1ZXN0cyBhcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcGF0aC4KKwlUaGlzIGlzIHNvcnQgb2YgIkdpdCByb290IiAtIGlmIHlvdSBydW4gJ2dpdCBkYWVtb24nIHdpdGgKKwknLS1iYXNlLXBhdGg9L3Nydi9naXQnIG9uIGV4YW1wbGUuY29tLCB0aGVuIGlmIHlvdSBsYXRlciB0cnkgdG8gcHVsbAorCSdnaXQ6Ly9leGFtcGxlLmNvbS9oZWxsby5naXQnLCAnZ2l0IGRhZW1vbicgd2lsbCBpbnRlcnByZXQgdGhlIHBhdGgKKwlhcyBgL3Nydi9naXQvaGVsbG8uZ2l0YC4KKworLS1iYXNlLXBhdGgtcmVsYXhlZDo6CisJSWYgLS1iYXNlLXBhdGggaXMgZW5hYmxlZCBhbmQgcmVwbyBsb29rdXAgZmFpbHMsIHdpdGggdGhpcyBvcHRpb24KKwknZ2l0IGRhZW1vbicgd2lsbCBhdHRlbXB0IHRvIGxvb2t1cCB3aXRob3V0IHByZWZpeGluZyB0aGUgYmFzZSBwYXRoLgorCVRoaXMgaXMgdXNlZnVsIGZvciBzd2l0Y2hpbmcgdG8gLS1iYXNlLXBhdGggdXNhZ2UsIHdoaWxlIHN0aWxsCisJYWxsb3dpbmcgdGhlIG9sZCBwYXRocy4KKworLS1pbnRlcnBvbGF0ZWQtcGF0aD08cGF0aHRlbXBsYXRlPjo6CisJVG8gc3VwcG9ydCB2aXJ0dWFsIGhvc3RpbmcsIGFuIGludGVycG9sYXRlZCBwYXRoIHRlbXBsYXRlIGNhbiBiZQorCXVzZWQgdG8gZHluYW1pY2FsbHkgY29uc3RydWN0IGFsdGVybmF0ZSBwYXRocy4gIFRoZSB0ZW1wbGF0ZQorCXN1cHBvcnRzICVIIGZvciB0aGUgdGFyZ2V0IGhvc3RuYW1lIGFzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgYnV0CisJY29udmVydGVkIHRvIGFsbCBsb3dlcmNhc2UsICVDSCBmb3IgdGhlIGNhbm9uaWNhbCBob3N0bmFtZSwKKwklSVAgZm9yIHRoZSBzZXJ2ZXIncyBJUCBhZGRyZXNzLCAlUCBmb3IgdGhlIHBvcnQgbnVtYmVyLAorCWFuZCAlRCBmb3IgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG5hbWVkIHJlcG9zaXRvcnkuCisJQWZ0ZXIgaW50ZXJwb2xhdGlvbiwgdGhlIHBhdGggaXMgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGRpcmVjdG9yeQorCXdoaXRlbGlzdC4KKworLS1leHBvcnQtYWxsOjoKKwlBbGxvdyBwdWxsaW5nIGZyb20gYWxsIGRpcmVjdG9yaWVzIHRoYXQgbG9vayBsaWtlIEdpdCByZXBvc2l0b3JpZXMKKwkoaGF2ZSB0aGUgJ29iamVjdHMnIGFuZCAncmVmcycgc3ViZGlyZWN0b3JpZXMpLCBldmVuIGlmIHRoZXkKKwlkbyBub3QgaGF2ZSB0aGUgJ2dpdC1kYWVtb24tZXhwb3J0LW9rJyBmaWxlLgorCistLWluZXRkOjoKKwlIYXZlIHRoZSBzZXJ2ZXIgcnVuIGFzIGFuIGluZXRkIHNlcnZpY2UuIEltcGxpZXMgLS1zeXNsb2cgKG1heSBiZQorCW92ZXJyaWRkZW4gd2l0aCBgLS1sb2ctZGVzdGluYXRpb249YCkuCisJSW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2gsIC0tcG9ydCwgLS1saXN0ZW4sIC0tdXNlciBhbmQgLS1ncm91cAorCW9wdGlvbnMuCisKKy0tbGlzdGVuPTxob3N0X29yX2lwYWRkcj46OgorCUxpc3RlbiBvbiBhIHNwZWNpZmljIElQIGFkZHJlc3Mgb3IgaG9zdG5hbWUuICBJUCBhZGRyZXNzZXMgY2FuCisJYmUgZWl0aGVyIGFuIElQdjQgYWRkcmVzcyBvciBhbiBJUHY2IGFkZHJlc3MgaWYgc3VwcG9ydGVkLiAgSWYgSVB2NgorCWlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gLS1saXN0ZW49aG9zdG5hbWUgaXMgYWxzbyBub3Qgc3VwcG9ydGVkIGFuZAorCS0tbGlzdGVuIG11c3QgYmUgZ2l2ZW4gYW4gSVB2NCBhZGRyZXNzLgorCUNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKwlJbmNvbXBhdGlibGUgd2l0aCBgLS1pbmV0ZGAgb3B0aW9uLgorCistLXBvcnQ9PG4+OjoKKwlMaXN0ZW4gb24gYW4gYWx0ZXJuYXRpdmUgcG9ydC4gIEluY29tcGF0aWJsZSB3aXRoIGAtLWluZXRkYCBvcHRpb24uCisKKy0taW5pdC10aW1lb3V0PTxuPjo6CisJVGltZW91dCAoaW4gc2Vjb25kcykgYmV0d2VlbiB0aGUgbW9tZW50IHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCisJYW5kIHRoZSBjbGllbnQgcmVxdWVzdCBpcyByZWNlaXZlZCAodHlwaWNhbGx5IGEgcmF0aGVyIGxvdyB2YWx1ZSwgc2luY2UKKwl0aGF0IHNob3VsZCBiZSBiYXNpY2FsbHkgaW1tZWRpYXRlKS4KKworLS10aW1lb3V0PTxuPjo6CisJVGltZW91dCAoaW4gc2Vjb25kcykgZm9yIHNwZWNpZmljIGNsaWVudCBzdWItcmVxdWVzdHMuIFRoaXMgaW5jbHVkZXMKKwl0aGUgdGltZSBpdCB0YWtlcyBmb3IgdGhlIHNlcnZlciB0byBwcm9jZXNzIHRoZSBzdWItcmVxdWVzdCBhbmQgdGhlCisJdGltZSBzcGVudCB3YWl0aW5nIGZvciB0aGUgbmV4dCBjbGllbnQncyByZXF1ZXN0LgorCistLW1heC1jb25uZWN0aW9ucz08bj46OgorCU1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgY2xpZW50cywgZGVmYXVsdHMgdG8gMzIuICBTZXQgaXQgdG8KKwl6ZXJvIGZvciBubyBsaW1pdC4KKworLS1zeXNsb2c6OgorCVNob3J0IGZvciBgLS1sb2ctZGVzdGluYXRpb249c3lzbG9nYC4KKworLS1sb2ctZGVzdGluYXRpb249PGRlc3RpbmF0aW9uPjo6CisJU2VuZCBsb2cgbWVzc2FnZXMgdG8gdGhlIHNwZWNpZmllZCBkZXN0aW5hdGlvbi4KKwlOb3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lcyBub3QgaW1wbHkgLS12ZXJib3NlLAorCXRodXMgYnkgZGVmYXVsdCBvbmx5IGVycm9yIGNvbmRpdGlvbnMgd2lsbCBiZSBsb2dnZWQuCisJVGhlIDxkZXN0aW5hdGlvbj4gbXVzdCBiZSBvbmUgb2Y6CisrCistLQorc3RkZXJyOjoKKwlXcml0ZSB0byBzdGFuZGFyZCBlcnJvci4KKwlOb3RlIHRoYXQgaWYgYC0tZGV0YWNoYCBpcyBzcGVjaWZpZWQsCisJdGhlIHByb2Nlc3MgZGlzY29ubmVjdHMgZnJvbSB0aGUgcmVhbCBzdGFuZGFyZCBlcnJvciwKKwltYWtpbmcgdGhpcyBkZXN0aW5hdGlvbiBlZmZlY3RpdmVseSBlcXVpdmFsZW50IHRvIGBub25lYC4KK3N5c2xvZzo6CisJV3JpdGUgdG8gc3lzbG9nLCB1c2luZyB0aGUgYGdpdC1kYWVtb25gIGlkZW50aWZpZXIuCitub25lOjoKKwlEaXNhYmxlIGFsbCBsb2dnaW5nLgorLS0KKysKK1RoZSBkZWZhdWx0IGRlc3RpbmF0aW9uIGlzIGBzeXNsb2dgIGlmIGAtLWluZXRkYCBvciBgLS1kZXRhY2hgIGlzIHNwZWNpZmllZCwKK290aGVyd2lzZSBgc3RkZXJyYC4KKworLS11c2VyLXBhdGg6OgorLS11c2VyLXBhdGg9PHBhdGg+OjoKKwlBbGxvdyB7dGlsZGV9dXNlciBub3RhdGlvbiB0byBiZSB1c2VkIGluIHJlcXVlc3RzLiAgV2hlbgorCXNwZWNpZmllZCB3aXRoIG5vIHBhcmFtZXRlciwgcmVxdWVzdHMgdG8KKwlnaXQ6Ly9ob3N0L3t0aWxkZX1hbGljZS9mb28gaXMgdGFrZW4gYXMgYSByZXF1ZXN0IHRvIGFjY2VzcworCSdmb28nIHJlcG9zaXRvcnkgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IG9mIHVzZXIgYGFsaWNlYC4KKwlJZiBgLS11c2VyLXBhdGg9cGF0aGAgaXMgc3BlY2lmaWVkLCB0aGUgc2FtZSByZXF1ZXN0IGlzCisJdGFrZW4gYXMgYSByZXF1ZXN0IHRvIGFjY2VzcyBgcGF0aC9mb29gIHJlcG9zaXRvcnkgaW4KKwl0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgdXNlciBgYWxpY2VgLgorCistLXZlcmJvc2U6OgorCUxvZyBkZXRhaWxzIGFib3V0IHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyBhbmQgcmVxdWVzdGVkIGZpbGVzLgorCistLXJldXNlYWRkcjo6CisJVXNlIFNPX1JFVVNFQUREUiB3aGVuIGJpbmRpbmcgdGhlIGxpc3RlbmluZyBzb2NrZXQuCisJVGhpcyBhbGxvd3MgdGhlIHNlcnZlciB0byByZXN0YXJ0IHdpdGhvdXQgd2FpdGluZyBmb3IKKwlvbGQgY29ubmVjdGlvbnMgdG8gdGltZSBvdXQuCisKKy0tZGV0YWNoOjoKKwlEZXRhY2ggZnJvbSB0aGUgc2hlbGwuIEltcGxpZXMgLS1zeXNsb2cuCisKKy0tcGlkLWZpbGU9PGZpbGU+OjoKKwlTYXZlIHRoZSBwcm9jZXNzIGlkIGluICdmaWxlJy4gIElnbm9yZWQgd2hlbiB0aGUgZGFlbW9uCisJaXMgcnVuIHVuZGVyIGAtLWluZXRkYC4KKworLS11c2VyPTx1c2VyPjo6CistLWdyb3VwPTxncm91cD46OgorCUNoYW5nZSBkYWVtb24ncyB1aWQgYW5kIGdpZCBiZWZvcmUgZW50ZXJpbmcgdGhlIHNlcnZpY2UgbG9vcC4KKwlXaGVuIG9ubHkgYC0tdXNlcmAgaXMgZ2l2ZW4gd2l0aG91dCBgLS1ncm91cGAsIHRoZQorCXByaW1hcnkgZ3JvdXAgSUQgZm9yIHRoZSB1c2VyIGlzIHVzZWQuICBUaGUgdmFsdWVzIG9mCisJdGhlIG9wdGlvbiBhcmUgZ2l2ZW4gdG8gYGdldHB3bmFtKDMpYCBhbmQgYGdldGdybmFtKDMpYAorCWFuZCBudW1lcmljIElEcyBhcmUgbm90IHN1cHBvcnRlZC4KKysKK0dpdmluZyB0aGVzZSBvcHRpb25zIGlzIGFuIGVycm9yIHdoZW4gdXNlZCB3aXRoIGAtLWluZXRkYDsgdXNlCit0aGUgZmFjaWxpdHkgb2YgaW5ldCBkYWVtb24gdG8gYWNoaWV2ZSB0aGUgc2FtZSBiZWZvcmUgc3Bhd25pbmcKKydnaXQgZGFlbW9uJyBpZiBuZWVkZWQuCisrCitMaWtlIG1hbnkgcHJvZ3JhbXMgdGhhdCBzd2l0Y2ggdXNlciBpZCwgdGhlIGRhZW1vbiBkb2VzIG5vdCByZXNldAorZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMgYCRIT01FYCB3aGVuIGl0IHJ1bnMgZ2l0IHByb2dyYW1zLAorZS5nLiBgdXBsb2FkLXBhY2tgIGFuZCBgcmVjZWl2ZS1wYWNrYC4gV2hlbiB1c2luZyB0aGlzIG9wdGlvbiwgeW91CittYXkgYWxzbyB3YW50IHRvIHNldCBhbmQgZXhwb3J0IGBIT01FYCB0byBwb2ludCBhdCB0aGUgaG9tZQorZGlyZWN0b3J5IG9mIGA8dXNlcj5gIGJlZm9yZSBzdGFydGluZyB0aGUgZGFlbW9uLCBhbmQgbWFrZSBzdXJlIGFueQorR2l0IGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkgYXJlIHJlYWRhYmxlIGJ5IGA8dXNlcj5gLgorCistLWVuYWJsZT08c2VydmljZT46OgorLS1kaXNhYmxlPTxzZXJ2aWNlPjo6CisJRW5hYmxlL2Rpc2FibGUgdGhlIHNlcnZpY2Ugc2l0ZS13aWRlIHBlciBkZWZhdWx0LiAgTm90ZQorCXRoYXQgYSBzZXJ2aWNlIGRpc2FibGVkIHNpdGUtd2lkZSBjYW4gc3RpbGwgYmUgZW5hYmxlZAorCXBlciByZXBvc2l0b3J5IGlmIGl0IGlzIG1hcmtlZCBvdmVycmlkYWJsZSBhbmQgdGhlCisJcmVwb3NpdG9yeSBlbmFibGVzIHRoZSBzZXJ2aWNlIHdpdGggYSBjb25maWd1cmF0aW9uCisJaXRlbS4KKworLS1hbGxvdy1vdmVycmlkZT08c2VydmljZT46OgorLS1mb3JiaWQtb3ZlcnJpZGU9PHNlcnZpY2U+OjoKKwlBbGxvdy9mb3JiaWQgb3ZlcnJpZGluZyB0aGUgc2l0ZS13aWRlIGRlZmF1bHQgd2l0aCBwZXIKKwlyZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24uICBCeSBkZWZhdWx0LCBhbGwgdGhlIHNlcnZpY2VzCisJbWF5IGJlIG92ZXJyaWRkZW4uCisKKy0tW25vLV1pbmZvcm1hdGl2ZS1lcnJvcnM6OgorCVdoZW4gaW5mb3JtYXRpdmUgZXJyb3JzIGFyZSB0dXJuZWQgb24sIGdpdC1kYWVtb24gd2lsbCByZXBvcnQKKwltb3JlIHZlcmJvc2UgZXJyb3JzIHRvIHRoZSBjbGllbnQsIGRpZmZlcmVudGlhdGluZyBjb25kaXRpb25zCisJbGlrZSAibm8gc3VjaCByZXBvc2l0b3J5IiBmcm9tICJyZXBvc2l0b3J5IG5vdCBleHBvcnRlZCIuIFRoaXMKKwlpcyBtb3JlIGNvbnZlbmllbnQgZm9yIGNsaWVudHMsIGJ1dCBtYXkgbGVhayBpbmZvcm1hdGlvbiBhYm91dAorCXRoZSBleGlzdGVuY2Ugb2YgdW5leHBvcnRlZCByZXBvc2l0b3JpZXMuICBXaGVuIGluZm9ybWF0aXZlCisJZXJyb3JzIGFyZSBub3QgZW5hYmxlZCwgYWxsIGVycm9ycyByZXBvcnQgImFjY2VzcyBkZW5pZWQiIHRvIHRoZQorCWNsaWVudC4gVGhlIGRlZmF1bHQgaXMgLS1uby1pbmZvcm1hdGl2ZS1lcnJvcnMuCisKKy0tYWNjZXNzLWhvb2s9PHBhdGg+OjoKKwlFdmVyeSB0aW1lIGEgY2xpZW50IGNvbm5lY3RzLCBmaXJzdCBydW4gYW4gZXh0ZXJuYWwgY29tbWFuZAorCXNwZWNpZmllZCBieSB0aGUgPHBhdGg+IHdpdGggc2VydmljZSBuYW1lIChlLmcuICJ1cGxvYWQtcGFjayIpLAorCXBhdGggdG8gdGhlIHJlcG9zaXRvcnksIGhvc3RuYW1lICglSCksIGNhbm9uaWNhbCBob3N0bmFtZQorCSglQ0gpLCBJUCBhZGRyZXNzICglSVApLCBhbmQgVENQIHBvcnQgKCVQKSBhcyBpdHMgY29tbWFuZC1saW5lCisJYXJndW1lbnRzLiBUaGUgZXh0ZXJuYWwgY29tbWFuZCBjYW4gZGVjaWRlIHRvIGRlY2xpbmUgdGhlCisJc2VydmljZSBieSBleGl0aW5nIHdpdGggYSBub24temVybyBzdGF0dXMgKG9yIHRvIGFsbG93IGl0IGJ5CisJZXhpdGluZyB3aXRoIGEgemVybyBzdGF0dXMpLiAgSXQgY2FuIGFsc28gbG9vayBhdCB0aGUgJFJFTU9URV9BRERSCisJYW5kIGAkUkVNT1RFX1BPUlRgIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBsZWFybiBhYm91dCB0aGUKKwlyZXF1ZXN0b3Igd2hlbiBtYWtpbmcgdGhpcyBkZWNpc2lvbi4KKysKK1RoZSBleHRlcm5hbCBjb21tYW5kIGNhbiBvcHRpb25hbGx5IHdyaXRlIGEgc2luZ2xlIGxpbmUgdG8gaXRzCitzdGFuZGFyZCBvdXRwdXQgdG8gYmUgc2VudCB0byB0aGUgcmVxdWVzdG9yIGFzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbgoraXQgZGVjbGluZXMgdGhlIHNlcnZpY2UuCisKKzxkaXJlY3Rvcnk+OjoKKwlBIGRpcmVjdG9yeSB0byBhZGQgdG8gdGhlIHdoaXRlbGlzdCBvZiBhbGxvd2VkIGRpcmVjdG9yaWVzLiBVbmxlc3MKKwktLXN0cmljdC1wYXRocyBpcyBzcGVjaWZpZWQgdGhpcyB3aWxsIGFsc28gaW5jbHVkZSBzdWJkaXJlY3RvcmllcworCW9mIGVhY2ggbmFtZWQgZGlyZWN0b3J5LgorCitTRVJWSUNFUworLS0tLS0tLS0KKworVGhlc2Ugc2VydmljZXMgY2FuIGJlIGdsb2JhbGx5IGVuYWJsZWQvZGlzYWJsZWQgdXNpbmcgdGhlCitjb21tYW5kLWxpbmUgb3B0aW9ucyBvZiB0aGlzIGNvbW1hbmQuICBJZiBmaW5lci1ncmFpbmVkCitjb250cm9sIGlzIGRlc2lyZWQgKGUuZy4gdG8gYWxsb3cgJ2dpdCBhcmNoaXZlJyB0byBiZSBydW4KK2FnYWluc3Qgb25seSBpbiBhIGZldyBzZWxlY3RlZCByZXBvc2l0b3JpZXMgdGhlIGRhZW1vbiBzZXJ2ZXMpLAordGhlIHBlci1yZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZmlsZSBjYW4gYmUgdXNlZCB0byBlbmFibGUgb3IKK2Rpc2FibGUgdGhlbS4KKwordXBsb2FkLXBhY2s6OgorCVRoaXMgc2VydmVzICdnaXQgZmV0Y2gtcGFjaycgYW5kICdnaXQgbHMtcmVtb3RlJworCWNsaWVudHMuICBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhIHJlcG9zaXRvcnkgY2FuCisJZGlzYWJsZSBpdCBieSBzZXR0aW5nIGBkYWVtb24udXBsb2FkcGFja2AgY29uZmlndXJhdGlvbgorCWl0ZW0gdG8gYGZhbHNlYC4KKwordXBsb2FkLWFyY2hpdmU6OgorCVRoaXMgc2VydmVzICdnaXQgYXJjaGl2ZSAtLXJlbW90ZScuICBJdCBpcyBkaXNhYmxlZCBieQorCWRlZmF1bHQsIGJ1dCBhIHJlcG9zaXRvcnkgY2FuIGVuYWJsZSBpdCBieSBzZXR0aW5nCisJYGRhZW1vbi51cGxvYWRhcmNoYCBjb25maWd1cmF0aW9uIGl0ZW0gdG8gYHRydWVgLgorCityZWNlaXZlLXBhY2s6OgorCVRoaXMgc2VydmVzICdnaXQgc2VuZC1wYWNrJyBjbGllbnRzLCBhbGxvd2luZyBhbm9ueW1vdXMKKwlwdXNoLiAgSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYXMgdGhlcmUgaXMgX25vXworCWF1dGhlbnRpY2F0aW9uIGluIHRoZSBwcm90b2NvbCAoaW4gb3RoZXIgd29yZHMsIGFueWJvZHkKKwljYW4gcHVzaCBhbnl0aGluZyBpbnRvIHRoZSByZXBvc2l0b3J5LCBpbmNsdWRpbmcgcmVtb3ZhbAorCW9mIHJlZnMpLiAgVGhpcyBpcyBzb2xlbHkgbWVhbnQgZm9yIGEgY2xvc2VkIExBTiBzZXR0aW5nCisJd2hlcmUgZXZlcnlib2R5IGlzIGZyaWVuZGx5LiAgVGhpcyBzZXJ2aWNlIGNhbiBiZQorCWVuYWJsZWQgYnkgc2V0dGluZyBgZGFlbW9uLnJlY2VpdmVwYWNrYCBjb25maWd1cmF0aW9uIGl0ZW0gdG8KKwlgdHJ1ZWAuCisKK0VYQU1QTEVTCistLS0tLS0tLQorV2UgYXNzdW1lIHRoZSBmb2xsb3dpbmcgaW4gL2V0Yy9zZXJ2aWNlczo6CisrCistLS0tLS0tLS0tLS0KKyQgZ3JlcCA5NDE4IC9ldGMvc2VydmljZXMKK2dpdAkJOTQxOC90Y3AJCSMgR2l0IFZlcnNpb24gQ29udHJvbCBTeXN0ZW0KKy0tLS0tLS0tLS0tLQorCisnZ2l0IGRhZW1vbicgYXMgaW5ldGQgc2VydmVyOjoKKwlUbyBzZXQgdXAgJ2dpdCBkYWVtb24nIGFzIGFuIGluZXRkIHNlcnZpY2UgdGhhdCBoYW5kbGVzIGFueQorCXJlcG9zaXRvcnkgdW5kZXIgdGhlIHdoaXRlbGlzdGVkIHNldCBvZiBkaXJlY3RvcmllcywgL3B1Yi9mb28KKwlhbmQgL3B1Yi9iYXIsIHBsYWNlIGFuIGVudHJ5IGxpa2UgdGhlIGZvbGxvd2luZyBpbnRvCisJL2V0Yy9pbmV0ZCBhbGwgb24gb25lIGxpbmU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgc3RyZWFtIHRjcCBub3dhaXQgbm9ib2R5ICAvdXNyL2Jpbi9naXQKKwkJZ2l0IGRhZW1vbiAtLWluZXRkIC0tdmVyYm9zZSAtLWV4cG9ydC1hbGwKKwkJL3B1Yi9mb28gL3B1Yi9iYXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKydnaXQgZGFlbW9uJyBhcyBpbmV0ZCBzZXJ2ZXIgZm9yIHZpcnR1YWwgaG9zdHM6OgorCVRvIHNldCB1cCAnZ2l0IGRhZW1vbicgYXMgYW4gaW5ldGQgc2VydmljZSB0aGF0IGhhbmRsZXMKKwlyZXBvc2l0b3JpZXMgZm9yIGRpZmZlcmVudCB2aXJ0dWFsIGhvc3RzLCBgd3d3LmV4YW1wbGUuY29tYAorCWFuZCBgd3d3LmV4YW1wbGUub3JnYCwgcGxhY2UgYW4gZW50cnkgbGlrZSB0aGUgZm9sbG93aW5nIGludG8KKwlgL2V0Yy9pbmV0ZGAgYWxsIG9uIG9uZSBsaW5lOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHN0cmVhbSB0Y3Agbm93YWl0IG5vYm9keSAvdXNyL2Jpbi9naXQKKwkJZ2l0IGRhZW1vbiAtLWluZXRkIC0tdmVyYm9zZSAtLWV4cG9ydC1hbGwKKwkJLS1pbnRlcnBvbGF0ZWQtcGF0aD0vcHViLyVIJUQKKwkJL3B1Yi93d3cuZXhhbXBsZS5vcmcvc29mdHdhcmUKKwkJL3B1Yi93d3cuZXhhbXBsZS5jb20vc29mdHdhcmUKKwkJL3NvZnR3YXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0luIHRoaXMgZXhhbXBsZSwgdGhlIHJvb3QtbGV2ZWwgZGlyZWN0b3J5IGAvcHViYCB3aWxsIGNvbnRhaW4KK2Egc3ViZGlyZWN0b3J5IGZvciBlYWNoIHZpcnR1YWwgaG9zdCBuYW1lIHN1cHBvcnRlZC4KK0Z1cnRoZXIsIGJvdGggaG9zdHMgYWR2ZXJ0aXNlIHJlcG9zaXRvcmllcyBzaW1wbHkgYXMKK2BnaXQ6Ly93d3cuZXhhbXBsZS5jb20vc29mdHdhcmUvcmVwby5naXRgLiAgRm9yIHByZS0xLjQuMAorY2xpZW50cywgYSBzeW1saW5rIGZyb20gYC9zb2Z0d2FyZWAgaW50byB0aGUgYXBwcm9wcmlhdGUKK2RlZmF1bHQgcmVwb3NpdG9yeSBjb3VsZCBiZSBtYWRlIGFzIHdlbGwuCisKKworJ2dpdCBkYWVtb24nIGFzIHJlZ3VsYXIgZGFlbW9uIGZvciB2aXJ0dWFsIGhvc3RzOjoKKwlUbyBzZXQgdXAgJ2dpdCBkYWVtb24nIGFzIGEgcmVndWxhciwgbm9uLWluZXRkIHNlcnZpY2UgdGhhdAorCWhhbmRsZXMgcmVwb3NpdG9yaWVzIGZvciBtdWx0aXBsZSB2aXJ0dWFsIGhvc3RzIGJhc2VkIG9uCisJdGhlaXIgSVAgYWRkcmVzc2VzLCBzdGFydCB0aGUgZGFlbW9uIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWdpdCBkYWVtb24gLS12ZXJib3NlIC0tZXhwb3J0LWFsbAorCQktLWludGVycG9sYXRlZC1wYXRoPS9wdWIvJUlQLyVECisJCS9wdWIvMTkyLjE2OC4xLjIwMC9zb2Z0d2FyZQorCQkvcHViLzEwLjEwLjIyMC4yMy9zb2Z0d2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJbiB0aGlzIGV4YW1wbGUsIHRoZSByb290LWxldmVsIGRpcmVjdG9yeSBgL3B1YmAgd2lsbCBjb250YWluCithIHN1YmRpcmVjdG9yeSBmb3IgZWFjaCB2aXJ0dWFsIGhvc3QgSVAgYWRkcmVzcyBzdXBwb3J0ZWQuCitSZXBvc2l0b3JpZXMgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkIGJ5IGhvc3RuYW1lIHRob3VnaCwgYXNzdW1pbmcKK3RoZXkgY29ycmVzcG9uZCB0byB0aGVzZSBJUCBhZGRyZXNzZXMuCisKK3NlbGVjdGl2ZWx5IGVuYWJsZS9kaXNhYmxlIHNlcnZpY2VzIHBlciByZXBvc2l0b3J5OjoKKwlUbyBlbmFibGUgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJyBhbmQgZGlzYWJsZSAnZ2l0IGZldGNoJyBhZ2FpbnN0CisJYSByZXBvc2l0b3J5LCBoYXZlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKKwlyZXBvc2l0b3J5ICh0aGF0IGlzIHRoZSBmaWxlICdjb25maWcnIG5leHQgdG8gYEhFQURgLCAncmVmcycgYW5kCisJJ29iamVjdHMnKS4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlbZGFlbW9uXQorCQl1cGxvYWRwYWNrID0gZmFsc2UKKwkJdXBsb2FkYXJjaCA9IHRydWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitFTlZJUk9OTUVOVAorLS0tLS0tLS0tLS0KKydnaXQgZGFlbW9uJyB3aWxsIHNldCBSRU1PVEVfQUREUiB0byB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgY2xpZW50Cit0aGF0IGNvbm5lY3RlZCB0byBpdCwgaWYgdGhlIElQIGFkZHJlc3MgaXMgYXZhaWxhYmxlLiBSRU1PVEVfQUREUiB3aWxsCitiZSBhdmFpbGFibGUgaW4gdGhlIGVudmlyb25tZW50IG9mIGhvb2tzIGNhbGxlZCB3aGVuCitzZXJ2aWNlcyBhcmUgcGVyZm9ybWVkLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODhmNmFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0CkBAIC0wLDAgKzEsMjA3IEBACitnaXQtZGVzY3JpYmUoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZGVzY3JpYmUgLSBHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGVzY3JpYmUnIFstLWFsbF0gWy0tdGFnc10gWy0tY29udGFpbnNdIFstLWFiYnJldj08bj5dIFs8Y29tbWl0LWlzaD4uLi5dCisnZ2l0IGRlc2NyaWJlJyBbLS1hbGxdIFstLXRhZ3NdIFstLWNvbnRhaW5zXSBbLS1hYmJyZXY9PG4+XSAtLWRpcnR5Wz08bWFyaz5dCisnZ2l0IGRlc2NyaWJlJyA8YmxvYj4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGUgY29tbWFuZCBmaW5kcyB0aGUgbW9zdCByZWNlbnQgdGFnIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYQorY29tbWl0LiAgSWYgdGhlIHRhZyBwb2ludHMgdG8gdGhlIGNvbW1pdCwgdGhlbiBvbmx5IHRoZSB0YWcgaXMKK3Nob3duLiAgT3RoZXJ3aXNlLCBpdCBzdWZmaXhlcyB0aGUgdGFnIG5hbWUgd2l0aCB0aGUgbnVtYmVyIG9mCithZGRpdGlvbmFsIGNvbW1pdHMgb24gdG9wIG9mIHRoZSB0YWdnZWQgb2JqZWN0IGFuZCB0aGUKK2FiYnJldmlhdGVkIG9iamVjdCBuYW1lIG9mIHRoZSBtb3N0IHJlY2VudCBjb21taXQuIFRoZSByZXN1bHQKK2lzIGEgImh1bWFuLXJlYWRhYmxlIiBvYmplY3QgbmFtZSB3aGljaCBjYW4gYWxzbyBiZSB1c2VkIHRvCitpZGVudGlmeSB0aGUgY29tbWl0IHRvIG90aGVyIGdpdCBjb21tYW5kcy4KKworQnkgZGVmYXVsdCAod2l0aG91dCAtLWFsbCBvciAtLXRhZ3MpIGBnaXQgZGVzY3JpYmVgIG9ubHkgc2hvd3MKK2Fubm90YXRlZCB0YWdzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW5ub3RhdGVkIHRhZ3MKK3NlZSB0aGUgLWEgYW5kIC1zIG9wdGlvbnMgdG8gbGlua2dpdDpnaXQtdGFnWzFdLgorCitJZiB0aGUgZ2l2ZW4gb2JqZWN0IHJlZmVycyB0byBhIGJsb2IsIGl0IHdpbGwgYmUgZGVzY3JpYmVkCithcyBgPGNvbW1pdC1pc2g+OjxwYXRoPmAsIHN1Y2ggdGhhdCB0aGUgYmxvYiBjYW4gYmUgZm91bmQKK2F0IGA8cGF0aD5gIGluIHRoZSBgPGNvbW1pdC1pc2g+YCwgd2hpY2ggaXRzZWxmIGRlc2NyaWJlcyB0aGUKK2ZpcnN0IGNvbW1pdCBpbiB3aGljaCB0aGlzIGJsb2Igb2NjdXJzIGluIGEgcmV2ZXJzZSByZXZpc2lvbiB3YWxrCitmcm9tIEhFQUQuCisKK09QVElPTlMKKy0tLS0tLS0KKzxjb21taXQtaXNoPi4uLjo6CisJQ29tbWl0LWlzaCBvYmplY3QgbmFtZXMgdG8gZGVzY3JpYmUuICBEZWZhdWx0cyB0byBIRUFEIGlmIG9taXR0ZWQuCisKKy0tZGlydHlbPTxtYXJrPl06OgorLS1icm9rZW5bPTxtYXJrPl06OgorCURlc2NyaWJlIHRoZSBzdGF0ZSBvZiB0aGUgd29ya2luZyB0cmVlLiAgV2hlbiB0aGUgd29ya2luZworCXRyZWUgbWF0Y2hlcyBIRUFELCB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIGFzICJnaXQgZGVzY3JpYmUKKwlIRUFEIi4gIElmIHRoZSB3b3JraW5nIHRyZWUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbiAiLWRpcnR5IgorCWlzIGFwcGVuZGVkIHRvIGl0LiAgSWYgYSByZXBvc2l0b3J5IGlzIGNvcnJ1cHQgYW5kIEdpdAorCWNhbm5vdCBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgbG9jYWwgbW9kaWZpY2F0aW9uLCBHaXQgd2lsbAorCWVycm9yIG91dCwgdW5sZXNzIGAtLWJyb2tlbicgaXMgZ2l2ZW4sIHdoaWNoIGFwcGVuZHMKKwl0aGUgc3VmZml4ICItYnJva2VuIiBpbnN0ZWFkLgorCistLWFsbDo6CisJSW5zdGVhZCBvZiB1c2luZyBvbmx5IHRoZSBhbm5vdGF0ZWQgdGFncywgdXNlIGFueSByZWYKKwlmb3VuZCBpbiBgcmVmcy9gIG5hbWVzcGFjZS4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbWF0Y2hpbmcKKwlhbnkga25vd24gYnJhbmNoLCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBvciBsaWdodHdlaWdodCB0YWcuCisKKy0tdGFnczo6CisJSW5zdGVhZCBvZiB1c2luZyBvbmx5IHRoZSBhbm5vdGF0ZWQgdGFncywgdXNlIGFueSB0YWcKKwlmb3VuZCBpbiBgcmVmcy90YWdzYCBuYW1lc3BhY2UuICBUaGlzIG9wdGlvbiBlbmFibGVzIG1hdGNoaW5nCisJYSBsaWdodHdlaWdodCAobm9uLWFubm90YXRlZCkgdGFnLgorCistLWNvbnRhaW5zOjoKKwlJbnN0ZWFkIG9mIGZpbmRpbmcgdGhlIHRhZyB0aGF0IHByZWRhdGVzIHRoZSBjb21taXQsIGZpbmQKKwl0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCwgYW5kIHRodXMgY29udGFpbnMgaXQuCisJQXV0b21hdGljYWxseSBpbXBsaWVzIC0tdGFncy4KKworLS1hYmJyZXY9PG4+OjoKKwlJbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IDcgaGV4YWRlY2ltYWwgZGlnaXRzIGFzIHRoZQorCWFiYnJldmlhdGVkIG9iamVjdCBuYW1lLCB1c2UgPG4+IGRpZ2l0cywgb3IgYXMgbWFueSBkaWdpdHMKKwlhcyBuZWVkZWQgdG8gZm9ybSBhIHVuaXF1ZSBvYmplY3QgbmFtZS4gIEFuIDxuPiBvZiAwCisJd2lsbCBzdXBwcmVzcyBsb25nIGZvcm1hdCwgb25seSBzaG93aW5nIHRoZSBjbG9zZXN0IHRhZy4KKworLS1jYW5kaWRhdGVzPTxuPjo6CisJSW5zdGVhZCBvZiBjb25zaWRlcmluZyBvbmx5IHRoZSAxMCBtb3N0IHJlY2VudCB0YWdzIGFzCisJY2FuZGlkYXRlcyB0byBkZXNjcmliZSB0aGUgaW5wdXQgY29tbWl0LWlzaCBjb25zaWRlcgorCXVwIHRvIDxuPiBjYW5kaWRhdGVzLiAgSW5jcmVhc2luZyA8bj4gYWJvdmUgMTAgd2lsbCB0YWtlCisJc2xpZ2h0bHkgbG9uZ2VyIGJ1dCBtYXkgcHJvZHVjZSBhIG1vcmUgYWNjdXJhdGUgcmVzdWx0LgorCUFuIDxuPiBvZiAwIHdpbGwgY2F1c2Ugb25seSBleGFjdCBtYXRjaGVzIHRvIGJlIG91dHB1dC4KKworLS1leGFjdC1tYXRjaDo6CisJT25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyAoYSB0YWcgZGlyZWN0bHkgcmVmZXJlbmNlcyB0aGUKKwlzdXBwbGllZCBjb21taXQpLiAgVGhpcyBpcyBhIHN5bm9ueW0gZm9yIC0tY2FuZGlkYXRlcz0wLgorCistLWRlYnVnOjoKKwlWZXJib3NlbHkgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VhcmNoaW5nIHN0cmF0ZWd5CisJYmVpbmcgZW1wbG95ZWQgdG8gc3RhbmRhcmQgZXJyb3IuICBUaGUgdGFnIG5hbWUgd2lsbCBzdGlsbAorCWJlIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0LgorCistLWxvbmc6OgorCUFsd2F5cyBvdXRwdXQgdGhlIGxvbmcgZm9ybWF0ICh0aGUgdGFnLCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMKKwlhbmQgdGhlIGFiYnJldmlhdGVkIGNvbW1pdCBuYW1lKSBldmVuIHdoZW4gaXQgbWF0Y2hlcyBhIHRhZy4KKwlUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHNlZSBwYXJ0cyBvZiB0aGUgY29tbWl0IG9iamVjdCBuYW1lCisJaW4gImRlc2NyaWJlIiBvdXRwdXQsIGV2ZW4gd2hlbiB0aGUgY29tbWl0IGluIHF1ZXN0aW9uIGhhcHBlbnMgdG8gYmUKKwlhIHRhZ2dlZCB2ZXJzaW9uLiAgSW5zdGVhZCBvZiBqdXN0IGVtaXR0aW5nIHRoZSB0YWcgbmFtZSwgaXQgd2lsbAorCWRlc2NyaWJlIHN1Y2ggYSBjb21taXQgYXMgdjEuMi0wLWdkZWFkYmVlICgwdGggY29tbWl0IHNpbmNlIHRhZyB2MS4yCisJdGhhdCBwb2ludHMgYXQgb2JqZWN0IGRlYWRiZWUuLi4uKS4KKworLS1tYXRjaCA8cGF0dGVybj46OgorCU9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyB0aGUgZ2l2ZW4gYGdsb2IoNylgIHBhdHRlcm4sCisJZXhjbHVkaW5nIHRoZSAicmVmcy90YWdzLyIgcHJlZml4LiBJZiB1c2VkIHdpdGggYC0tYWxsYCwgaXQgYWxzbworCWNvbnNpZGVycyBsb2NhbCBicmFuY2hlcyBhbmQgcmVtb3RlLXRyYWNraW5nIHJlZmVyZW5jZXMgbWF0Y2hpbmcgdGhlCisJcGF0dGVybiwgZXhjbHVkaW5nIHJlc3BlY3RpdmVseSAicmVmcy9oZWFkcy8iIGFuZCAicmVmcy9yZW1vdGVzLyIKKwlwcmVmaXg7IHJlZmVyZW5jZXMgb2Ygb3RoZXIgdHlwZXMgYXJlIG5ldmVyIGNvbnNpZGVyZWQuIElmIGdpdmVuCisJbXVsdGlwbGUgdGltZXMsIGEgbGlzdCBvZiBwYXR0ZXJucyB3aWxsIGJlIGFjY3VtdWxhdGVkLCBhbmQgdGFncworCW1hdGNoaW5nIGFueSBvZiB0aGUgcGF0dGVybnMgd2lsbCBiZSBjb25zaWRlcmVkLiAgVXNlIGAtLW5vLW1hdGNoYCB0bworCWNsZWFyIGFuZCByZXNldCB0aGUgbGlzdCBvZiBwYXR0ZXJucy4KKworLS1leGNsdWRlIDxwYXR0ZXJuPjo6CisJRG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgdGhlIGdpdmVuIGBnbG9iKDcpYCBwYXR0ZXJuLCBleGNsdWRpbmcKKwl0aGUgInJlZnMvdGFncy8iIHByZWZpeC4gSWYgdXNlZCB3aXRoIGAtLWFsbGAsIGl0IGFsc28gZG9lcyBub3QgY29uc2lkZXIKKwlsb2NhbCBicmFuY2hlcyBhbmQgcmVtb3RlLXRyYWNraW5nIHJlZmVyZW5jZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4sCisJZXhjbHVkaW5nIHJlc3BlY3RpdmVseSAicmVmcy9oZWFkcy8iIGFuZCAicmVmcy9yZW1vdGVzLyIgcHJlZml4OworCXJlZmVyZW5jZXMgb2Ygb3RoZXIgdHlwZXMgYXJlIG5ldmVyIGNvbnNpZGVyZWQuIElmIGdpdmVuIG11bHRpcGxlIHRpbWVzLAorCWEgbGlzdCBvZiBwYXR0ZXJucyB3aWxsIGJlIGFjY3VtdWxhdGVkIGFuZCB0YWdzIG1hdGNoaW5nIGFueSBvZiB0aGUKKwlwYXR0ZXJucyB3aWxsIGJlIGV4Y2x1ZGVkLiBXaGVuIGNvbWJpbmVkIHdpdGggLS1tYXRjaCBhIHRhZyB3aWxsIGJlCisJY29uc2lkZXJlZCB3aGVuIGl0IG1hdGNoZXMgYXQgbGVhc3Qgb25lIC0tbWF0Y2ggcGF0dGVybiBhbmQgZG9lcyBub3QKKwltYXRjaCBhbnkgb2YgdGhlIC0tZXhjbHVkZSBwYXR0ZXJucy4gVXNlIGAtLW5vLWV4Y2x1ZGVgIHRvIGNsZWFyIGFuZAorCXJlc2V0IHRoZSBsaXN0IG9mIHBhdHRlcm5zLgorCistLWFsd2F5czo6CisJU2hvdyB1bmlxdWVseSBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrLgorCistLWZpcnN0LXBhcmVudDo6CisJRm9sbG93IG9ubHkgdGhlIGZpcnN0IHBhcmVudCBjb21taXQgdXBvbiBzZWVpbmcgYSBtZXJnZSBjb21taXQuCisJVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBub3QgbWF0Y2ggdGFncyBvbiBicmFuY2hlcyBtZXJnZWQKKwlpbiB0aGUgaGlzdG9yeSBvZiB0aGUgdGFyZ2V0IGNvbW1pdC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1dpdGggc29tZXRoaW5nIGxpa2UgZ2l0LmdpdCBjdXJyZW50IHRyZWUsIEkgZ2V0OgorCisJW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSBwYXJlbnQKKwl2MS4wLjQtMTQtZzI0MTQ3MjEKKworaS5lLiB0aGUgY3VycmVudCBoZWFkIG9mIG15ICJwYXJlbnQiIGJyYW5jaCBpcyBiYXNlZCBvbiB2MS4wLjQsCitidXQgc2luY2UgaXQgaGFzIGEgZmV3IGNvbW1pdHMgb24gdG9wIG9mIHRoYXQsCitkZXNjcmliZSBoYXMgYWRkZWQgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGNvbW1pdHMgKCIxNCIpIGFuZAorYW4gYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWUgZm9yIHRoZSBjb21taXQgaXRzZWxmICgiMjQxNDcyMSIpCithdCB0aGUgZW5kLgorCitUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29tbWl0cyBpcyB0aGUgbnVtYmVyCitvZiBjb21taXRzIHdoaWNoIHdvdWxkIGJlIGRpc3BsYXllZCBieSAiZ2l0IGxvZyB2MS4wLjQuLnBhcmVudCIuCitUaGUgaGFzaCBzdWZmaXggaXMgIi1nIiArIHVuYW1iaWd1b3VzIGFiYnJldmlhdGlvbiBmb3IgdGhlIHRpcCBjb21taXQKK29mIHBhcmVudCAod2hpY2ggd2FzIGAyNDE0NzIxYjE5NDQ1M2YwNTgwNzlkODk3ZDEzYzRlMzc3ZjkyZGM2YCkuCitUaGUgImciIHByZWZpeCBzdGFuZHMgZm9yICJnaXQiIGFuZCBpcyB1c2VkIHRvIGFsbG93IGRlc2NyaWJpbmcgdGhlIHZlcnNpb24gb2YKK2Egc29mdHdhcmUgZGVwZW5kaW5nIG9uIHRoZSBTQ00gdGhlIHNvZnR3YXJlIGlzIG1hbmFnZWQgd2l0aC4gVGhpcyBpcyB1c2VmdWwKK2luIGFuIGVudmlyb25tZW50IHdoZXJlIHBlb3BsZSBtYXkgdXNlIGRpZmZlcmVudCBTQ01zLgorCitEb2luZyBhICdnaXQgZGVzY3JpYmUnIG9uIGEgdGFnLW5hbWUgd2lsbCBqdXN0IHNob3cgdGhlIHRhZyBuYW1lOgorCisJW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSB2MS4wLjQKKwl2MS4wLjQKKworV2l0aCAtLWFsbCwgdGhlIGNvbW1hbmQgY2FuIHVzZSBicmFuY2ggaGVhZHMgYXMgcmVmZXJlbmNlcywgc28KK3RoZSBvdXRwdXQgc2hvd3MgdGhlIHJlZmVyZW5jZSBwYXRoIGFzIHdlbGw6CisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIC0tYWxsIC0tYWJicmV2PTQgdjEuMC41XjIKKwl0YWdzL3YxLjAuMC0yMS1nOTc1YgorCisJW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSAtLWFsbCAtLWFiYnJldj00IEhFQUReCisJaGVhZHMvbHQvZGVzY3JpYmUtNy1nOTc1YgorCitXaXRoIC0tYWJicmV2IHNldCB0byAwLCB0aGUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZQorY2xvc2VzdCB0YWduYW1lIHdpdGhvdXQgYW55IHN1ZmZpeDoKKworCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgLS1hYmJyZXY9MCB2MS4wLjVeMgorCXRhZ3MvdjEuMC4wCisKK05vdGUgdGhhdCB0aGUgc3VmZml4IHlvdSBnZXQgaWYgeW91IHR5cGUgdGhlc2UgY29tbWFuZHMgdG9kYXkgbWF5IGJlCitsb25nZXIgdGhhbiB3aGF0IExpbnVzIHNhdyBhYm92ZSB3aGVuIGhlIHJhbiB0aGVzZSBjb21tYW5kcywgYXMgeW91cgorR2l0IHJlcG9zaXRvcnkgbWF5IGhhdmUgbmV3IGNvbW1pdHMgd2hvc2Ugb2JqZWN0IG5hbWVzIGJlZ2luIHdpdGgKKzk3NWIgdGhhdCBkaWQgbm90IGV4aXN0IGJhY2sgdGhlbiwgYW5kICItZzk3NWIiIHN1ZmZpeCBhbG9uZSBtYXkgbm90CitiZSBzdWZmaWNpZW50IHRvIGRpc2FtYmlndWF0ZSB0aGVzZSBjb21taXRzLgorCisKK1NFQVJDSCBTVFJBVEVHWQorLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBlYWNoIGNvbW1pdC1pc2ggc3VwcGxpZWQsICdnaXQgZGVzY3JpYmUnIHdpbGwgZmlyc3QgbG9vayBmb3IKK2EgdGFnIHdoaWNoIHRhZ3MgZXhhY3RseSB0aGF0IGNvbW1pdC4gIEFubm90YXRlZCB0YWdzIHdpbGwgYWx3YXlzCitiZSBwcmVmZXJyZWQgb3ZlciBsaWdodHdlaWdodCB0YWdzLCBhbmQgdGFncyB3aXRoIG5ld2VyIGRhdGVzIHdpbGwKK2Fsd2F5cyBiZSBwcmVmZXJyZWQgb3ZlciB0YWdzIHdpdGggb2xkZXIgZGF0ZXMuICBJZiBhbiBleGFjdCBtYXRjaAoraXMgZm91bmQsIGl0cyBuYW1lIHdpbGwgYmUgb3V0cHV0IGFuZCBzZWFyY2hpbmcgd2lsbCBzdG9wLgorCitJZiBhbiBleGFjdCBtYXRjaCB3YXMgbm90IGZvdW5kLCAnZ2l0IGRlc2NyaWJlJyB3aWxsIHdhbGsgYmFjawordGhyb3VnaCB0aGUgY29tbWl0IGhpc3RvcnkgdG8gbG9jYXRlIGFuIGFuY2VzdG9yIGNvbW1pdCB3aGljaAoraGFzIGJlZW4gdGFnZ2VkLiAgVGhlIGFuY2VzdG9yJ3MgdGFnIHdpbGwgYmUgb3V0cHV0IGFsb25nIHdpdGggYW4KK2FiYnJldmlhdGlvbiBvZiB0aGUgaW5wdXQgY29tbWl0LWlzaCdzIFNIQS0xLiBJZiBgLS1maXJzdC1wYXJlbnRgIHdhcworc3BlY2lmaWVkIHRoZW4gdGhlIHdhbGsgd2lsbCBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCBwYXJlbnQgb2YgZWFjaAorY29tbWl0LgorCitJZiBtdWx0aXBsZSB0YWdzIHdlcmUgZm91bmQgZHVyaW5nIHRoZSB3YWxrIHRoZW4gdGhlIHRhZyB3aGljaAoraGFzIHRoZSBmZXdlc3QgY29tbWl0cyBkaWZmZXJlbnQgZnJvbSB0aGUgaW5wdXQgY29tbWl0LWlzaCB3aWxsIGJlCitzZWxlY3RlZCBhbmQgb3V0cHV0LiAgSGVyZSBmZXdlc3QgY29tbWl0cyBkaWZmZXJlbnQgaXMgZGVmaW5lZCBhcwordGhlIG51bWJlciBvZiBjb21taXRzIHdoaWNoIHdvdWxkIGJlIHNob3duIGJ5IGBnaXQgbG9nIHRhZy4uaW5wdXRgCit3aWxsIGJlIHRoZSBzbWFsbGVzdCBudW1iZXIgb2YgY29tbWl0cyBwb3NzaWJsZS4KKworQlVHUworLS0tLQorCitUcmVlIG9iamVjdHMgYXMgd2VsbCBhcyB0YWcgb2JqZWN0cyBub3QgcG9pbnRpbmcgYXQgY29tbWl0cywgY2Fubm90IGJlIGRlc2NyaWJlZC4KK1doZW4gZGVzY3JpYmluZyBibG9icywgdGhlIGxpZ2h0d2VpZ2h0IHRhZ3MgcG9pbnRpbmcgYXQgYmxvYnMgYXJlIGlnbm9yZWQsCitidXQgdGhlIGJsb2IgaXMgc3RpbGwgZGVzY3JpYmVkIGFzIDxjb21taXR0LWlzaD46PHBhdGg+IGRlc3BpdGUgdGhlIGxpZ2h0d2VpZ2h0Cit0YWcgYmVpbmcgZmF2b3JhYmxlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2Nzc0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CkBAIC0wLDAgKzEsNTIgQEAKK2dpdC1kaWZmLWZpbGVzKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZGlmZi1maWxlcyAtIENvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkaWZmLWZpbGVzJyBbLXFdIFstMHwtMXwtMnwtM3wtY3wtLWNjXSBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NvbXBhcmVzIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXguICBXaGVuIHBhdGhzCithcmUgc3BlY2lmaWVkLCBjb21wYXJlcyBvbmx5IHRob3NlIG5hbWVkIHBhdGhzLiAgT3RoZXJ3aXNlIGFsbAorZW50cmllcyBpbiB0aGUgaW5kZXggYXJlIGNvbXBhcmVkLiAgVGhlIG91dHB1dCBmb3JtYXQgaXMgdGhlCitzYW1lIGFzIGZvciAnZ2l0IGRpZmYtaW5kZXgnIGFuZCAnZ2l0IGRpZmYtdHJlZScuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCistMSAtLWJhc2U6OgorLTIgLS1vdXJzOjoKKy0zIC0tdGhlaXJzOjoKKy0wOjoKKwlEaWZmIGFnYWluc3QgdGhlICJiYXNlIiB2ZXJzaW9uLCAib3VyIGJyYW5jaCIgb3IgInRoZWlyCisJYnJhbmNoIiByZXNwZWN0aXZlbHkuICBXaXRoIHRoZXNlIG9wdGlvbnMsIGRpZmZzIGZvcgorCW1lcmdlZCBlbnRyaWVzIGFyZSBub3Qgc2hvd24uCisrCitUaGUgZGVmYXVsdCBpcyB0byBkaWZmIGFnYWluc3Qgb3VyIGJyYW5jaCAoLTIpIGFuZCB0aGUKK2NsZWFubHkgcmVzb2x2ZWQgcGF0aHMuICBUaGUgb3B0aW9uIC0wIGNhbiBiZSBnaXZlbiB0bworb21pdCBkaWZmIG91dHB1dCBmb3IgdW5tZXJnZWQgZW50cmllcyBhbmQganVzdCBzaG93ICJVbm1lcmdlZCIuCisKKy1jOjoKKy0tY2M6OgorCVRoaXMgY29tcGFyZXMgc3RhZ2UgMiAob3VyIGJyYW5jaCksIHN0YWdlIDMgKHRoZWlyCisJYnJhbmNoKSBhbmQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlIGFuZCBvdXRwdXRzIGEgY29tYmluZWQKKwlkaWZmLCBzaW1pbGFyIHRvIHRoZSB3YXkgJ2RpZmYtdHJlZScgc2hvd3MgYSBtZXJnZQorCWNvbW1pdCB3aXRoIHRoZXNlIGZsYWdzLgorCistcTo6CisJUmVtYWluIHNpbGVudCBldmVuIG9uIG5vbmV4aXN0ZW50IGZpbGVzCisKKworaW5jbHVkZTo6ZGlmZi1mb3JtYXQudHh0W10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmQ4MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dApAQCAtMCwwICsxLDEyMiBAQAorZ2l0LWRpZmYtaW5kZXgoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmLWluZGV4IC0gQ29tcGFyZSBhIHRyZWUgdG8gdGhlIHdvcmtpbmcgdHJlZSBvciBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkaWZmLWluZGV4JyBbLW1dIFstLWNhY2hlZF0gWzxjb21tb24gZGlmZiBvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIHRoZSBibG9icyBmb3VuZCBpbiBhIHRyZWUgb2JqZWN0Cit3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgb3Igd2l0aCB0aGUKK2NvcnJlc3BvbmRpbmcgcGF0aHMgaW4gdGhlIGluZGV4LiAgV2hlbiA8cGF0aD4gYXJndW1lbnRzIGFyZSBwcmVzZW50LAorY29tcGFyZXMgb25seSBwYXRocyBtYXRjaGluZyB0aG9zZSBwYXR0ZXJucy4gIE90aGVyd2lzZSBhbGwgdHJhY2tlZAorZmlsZXMgYXJlIGNvbXBhcmVkLgorCitPUFRJT05TCistLS0tLS0tCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworPHRyZWUtaXNoPjo6CisJVGhlIGlkIG9mIGEgdHJlZSBvYmplY3QgdG8gZGlmZiBhZ2FpbnN0LgorCistLWNhY2hlZDo6CisJZG8gbm90IGNvbnNpZGVyIHRoZSBvbi1kaXNrIGZpbGUgYXQgYWxsCisKKy1tOjoKKwlCeSBkZWZhdWx0LCBmaWxlcyByZWNvcmRlZCBpbiB0aGUgaW5kZXggYnV0IG5vdCBjaGVja2VkCisJb3V0IGFyZSByZXBvcnRlZCBhcyBkZWxldGVkLiAgVGhpcyBmbGFnIG1ha2VzCisJJ2dpdCBkaWZmLWluZGV4JyBzYXkgdGhhdCBhbGwgbm9uLWNoZWNrZWQtb3V0IGZpbGVzIGFyZSB1cAorCXRvIGRhdGUuCisKK2luY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCisKK09QRVJBVElORyBNT0RFUworLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIHRydXN0IHRoZSBpbmRleCBmaWxlIGVudGlyZWx5CisodXNpbmcgdGhlIGAtLWNhY2hlZGAgZmxhZykgb3IgYXNrIHRoZSBkaWZmIGxvZ2ljIHRvIHNob3cgYW55IGZpbGVzCit0aGF0IGRvbid0IG1hdGNoIHRoZSBzdGF0IHN0YXRlIGFzIGJlaW5nICJ0ZW50YXRpdmVseSBjaGFuZ2VkIi4gIEJvdGgKK29mIHRoZXNlIG9wZXJhdGlvbnMgYXJlIHZlcnkgdXNlZnVsIGluZGVlZC4KKworQ0FDSEVEIE1PREUKKy0tLS0tLS0tLS0tCitJZiBgLS1jYWNoZWRgIGlzIHNwZWNpZmllZCwgaXQgYWxsb3dzIHlvdSB0byBhc2s6CisKKwlzaG93IG1lIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEhFQUQgYW5kIHRoZSBjdXJyZW50IGluZGV4CisJY29udGVudHMgKHRoZSBvbmVzIEknZCB3cml0ZSB1c2luZyAnZ2l0IHdyaXRlLXRyZWUnKQorCitGb3IgZXhhbXBsZSwgbGV0J3Mgc2F5IHRoYXQgeW91IGhhdmUgd29ya2VkIG9uIHlvdXIgd29ya2luZyBkaXJlY3RvcnksIHVwZGF0ZWQKK3NvbWUgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCBhcmUgcmVhZHkgdG8gY29tbWl0LiBZb3Ugd2FudCB0byBzZWUgZXhhY3RseQorKndoYXQqIHlvdSBhcmUgZ29pbmcgdG8gY29tbWl0LCB3aXRob3V0IGhhdmluZyB0byB3cml0ZSBhIG5ldyB0cmVlCitvYmplY3QgYW5kIGNvbXBhcmUgaXQgdGhhdCB3YXksIGFuZCB0byBkbyB0aGF0LCB5b3UganVzdCBkbworCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRAorCitFeGFtcGxlOiBsZXQncyBzYXkgSSBoYWQgcmVuYW1lZCBgY29tbWl0LmNgIHRvIGBnaXQtY29tbWl0LmNgLCBhbmQgSSBoYWQKK2RvbmUgYW4gYHVwZGF0ZS1pbmRleGAgdG8gbWFrZSB0aGF0IGVmZmVjdGl2ZSBpbiB0aGUgaW5kZXggZmlsZS4KK2BnaXQgZGlmZi1maWxlc2Agd291bGRuJ3Qgc2hvdyBhbnl0aGluZyBhdCBhbGwsIHNpbmNlIHRoZSBpbmRleCBmaWxlCittYXRjaGVzIG15IHdvcmtpbmcgZGlyZWN0b3J5LiBCdXQgZG9pbmcgYSAnZ2l0IGRpZmYtaW5kZXgnIGRvZXM6CisKKyAgdG9ydmFsZHNAcHBjOTcwOn4vZ2l0PiBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFECisgIC0xMDA2NDQgYmxvYiAgICA0MTYxYWVjYzY3MDBhMmViNTc5ZTg0MmFmMGI3ZjIyYjk4NDQzZjc0ICAgICAgICBjb21taXQuYworICArMTAwNjQ0IGJsb2IgICAgNDE2MWFlY2M2NzAwYTJlYjU3OWU4NDJhZjBiN2YyMmI5ODQ0M2Y3NCAgICAgICAgZ2l0LWNvbW1pdC5jCisKK1lvdSBjYW4gc2VlIGVhc2lseSB0aGF0IHRoZSBhYm92ZSBpcyBhIHJlbmFtZS4KKworSW4gZmFjdCwgYGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkYCAqc2hvdWxkKiBhbHdheXMgYmUgZW50aXJlbHkgZXF1aXZhbGVudCB0bworYWN0dWFsbHkgZG9pbmcgYSAnZ2l0IHdyaXRlLXRyZWUnIGFuZCBjb21wYXJpbmcgdGhhdC4gRXhjZXB0IHRoaXMgb25lIGlzIG11Y2gKK25pY2VyIGZvciB0aGUgY2FzZSB3aGVyZSB5b3UganVzdCB3YW50IHRvIGNoZWNrIHdoZXJlIHlvdSBhcmUuCisKK1NvIGRvaW5nIGEgYGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkYCBpcyBiYXNpY2FsbHkgdmVyeSB1c2VmdWwgd2hlbiB5b3UgYXJlCithc2tpbmcgeW91cnNlbGYgIndoYXQgaGF2ZSBJIGFscmVhZHkgbWFya2VkIGZvciBiZWluZyBjb21taXR0ZWQsIGFuZAord2hhdCdzIHRoZSBkaWZmZXJlbmNlIHRvIGEgcHJldmlvdXMgdHJlZSIuCisKK05PTi1DQUNIRUQgTU9ERQorLS0tLS0tLS0tLS0tLS0tCitUaGUgIm5vbi1jYWNoZWQiIG1vZGUgdGFrZXMgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIGFuZCBpcyBwb3RlbnRpYWxseQordGhlIG1vcmUgdXNlZnVsIG9mIHRoZSB0d28gaW4gdGhhdCB3aGF0IGl0IGRvZXMgY2FuJ3QgYmUgZW11bGF0ZWQgd2l0aAorYSAnZ2l0IHdyaXRlLXRyZWUnICsgJ2dpdCBkaWZmLXRyZWUnLiBUaHVzIHRoYXQncyB0aGUgZGVmYXVsdCBtb2RlLgorVGhlIG5vbi1jYWNoZWQgdmVyc2lvbiBhc2tzIHRoZSBxdWVzdGlvbjoKKworICBzaG93IG1lIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEhFQUQgYW5kIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQKKyAgdHJlZSAtIGluZGV4IGNvbnRlbnRzIF9hbmRfIGZpbGVzIHRoYXQgYXJlbid0IHVwIHRvIGRhdGUKKword2hpY2ggaXMgb2J2aW91c2x5IGEgdmVyeSB1c2VmdWwgcXVlc3Rpb24gdG9vLCBzaW5jZSB0aGF0IHRlbGxzIHlvdSB3aGF0Cit5b3UgKmNvdWxkKiBjb21taXQuIEFnYWluLCB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlICdnaXQgZGlmZi10cmVlIC1yJworb3V0cHV0IHRvIGEgdGVlLCBidXQgd2l0aCBhIHR3aXN0LgorCitUaGUgdHdpc3QgaXMgdGhhdCBpZiBzb21lIGZpbGUgZG9lc24ndCBtYXRjaCB0aGUgaW5kZXgsIHdlIGRvbid0IGhhdmUKK2EgYmFja2luZyBzdG9yZSB0aGluZyBmb3IgaXQsIGFuZCB3ZSB1c2UgdGhlIG1hZ2ljICJhbGwtemVybyIgc2hhMSB0bworc2hvdyB0aGF0LiBTbyBsZXQncyBzYXkgdGhhdCB5b3UgaGF2ZSBlZGl0ZWQgYGtlcm5lbC9zY2hlZC5jYCwgYnV0CitoYXZlIG5vdCBhY3R1YWxseSBkb25lIGEgJ2dpdCB1cGRhdGUtaW5kZXgnIG9uIGl0IHlldCAtIHRoZXJlIGlzIG5vCisib2JqZWN0IiBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldyBzdGF0ZSwgYW5kIHlvdSBnZXQ6CisKKyAgdG9ydmFsZHNAcHBjOTcwOn4vdjIuNi9saW51eD4gZ2l0IGRpZmYtaW5kZXggLS1hYmJyZXYgSEVBRAorICA6MTAwNjQ0IDEwMDY2NCA3NDc2YmIuLi4gMDAwMDAwLi4uICAgICAga2VybmVsL3NjaGVkLmMKKworaS5lLiwgaXQgc2hvd3MgdGhhdCB0aGUgdHJlZSBoYXMgY2hhbmdlZCwgYW5kIHRoYXQgYGtlcm5lbC9zY2hlZC5jYCBpcworbm90IHVwIHRvIGRhdGUgYW5kIG1heSBjb250YWluIG5ldyBzdHVmZi4gVGhlIGFsbC16ZXJvIHNoYTEgbWVhbnMgdGhhdCB0bworZ2V0IHRoZSByZWFsIGRpZmYsIHlvdSBuZWVkIHRvIGxvb2sgYXQgdGhlIG9iamVjdCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkKK2RpcmVjdGx5IHJhdGhlciB0aGFuIGRvIGFuIG9iamVjdC10by1vYmplY3QgZGlmZi4KKworTk9URTogQXMgd2l0aCBvdGhlciBjb21tYW5kcyBvZiB0aGlzIHR5cGUsICdnaXQgZGlmZi1pbmRleCcgZG9lcyBub3QKK2FjdHVhbGx5IGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGF0IGFsbC4gU28gbWF5YmUKK2BrZXJuZWwvc2NoZWQuY2AgaGFzbid0IGFjdHVhbGx5IGNoYW5nZWQsIGFuZCBpdCdzIGp1c3QgdGhhdCB5b3UKK3RvdWNoZWQgaXQuIEluIGVpdGhlciBjYXNlLCBpdCdzIGEgbm90ZSB0aGF0IHlvdSBuZWVkIHRvCisnZ2l0IHVwZGF0ZS1pbmRleCcgaXQgdG8gbWFrZSB0aGUgaW5kZXggYmUgaW4gc3luYy4KKworTk9URTogWW91IGNhbiBoYXZlIGEgbWl4dHVyZSBvZiBmaWxlcyBzaG93IHVwIGFzICJoYXMgYmVlbiB1cGRhdGVkIgorYW5kICJpcyBzdGlsbCBkaXJ0eSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkiIHRvZ2V0aGVyLiBZb3UgY2FuIGFsd2F5cwordGVsbCB3aGljaCBmaWxlIGlzIGluIHdoaWNoIHN0YXRlLCBzaW5jZSB0aGUgImhhcyBiZWVuIHVwZGF0ZWQiIG9uZXMKK3Nob3cgYSB2YWxpZCBzaGExLCBhbmQgdGhlICJub3QgaW4gc3luYyB3aXRoIHRoZSBpbmRleCIgb25lcyB3aWxsCithbHdheXMgaGF2ZSB0aGUgc3BlY2lhbCBhbGwtemVybyBzaGExLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOGEyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CkBAIC0wLDAgKzEsMTI2IEBACitnaXQtZGlmZi10cmVlKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmLXRyZWUgLSBDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkaWZmLXRyZWUnIFstLXN0ZGluXSBbLW1dIFstc10gWy12XSBbLS1uby1jb21taXQtaWRdIFstLXByZXR0eV0KKwkgICAgICBbLXRdIFstcl0gWy1jIHwgLS1jY10gWy0tY29tYmluZWQtYWxsLXBhdGhzXSBbLS1yb290XQorCSAgICAgIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIDx0cmVlLWlzaD4gWzx0cmVlLWlzaD5dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgdGhlIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSA8dHJlZS1pc2g+IGdpdmVuLCB0aGUgY29tbWl0IGlzIGNvbXBhcmVkIHdpdGggaXRzIHBhcmVudHMKKyhzZWUgLS1zdGRpbiBiZWxvdykuCisKK05vdGUgdGhhdCAnZ2l0IGRpZmYtdHJlZScgY2FuIHVzZSB0aGUgdHJlZSBlbmNhcHN1bGF0ZWQgaW4gYSBjb21taXQgb2JqZWN0LgorCitPUFRJT05TCistLS0tLS0tCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworPHRyZWUtaXNoPjo6CisJVGhlIGlkIG9mIGEgdHJlZSBvYmplY3QuCisKKzxwYXRoPi4uLjo6CisJSWYgcHJvdmlkZWQsIHRoZSByZXN1bHRzIGFyZSBsaW1pdGVkIHRvIGEgc3Vic2V0IG9mIGZpbGVzCisJbWF0Y2hpbmcgb25lIG9mIHRoZSBwcm92aWRlZCBwYXRoc3BlY3MuCisKKy1yOjoKKyAgICAgICAgcmVjdXJzZSBpbnRvIHN1Yi10cmVlcworCistdDo6CisJc2hvdyB0cmVlIGVudHJ5IGl0c2VsZiBhcyB3ZWxsIGFzIHN1YnRyZWVzLiAgSW1wbGllcyAtci4KKworLS1yb290OjoKKwlXaGVuIGAtLXJvb3RgIGlzIHNwZWNpZmllZCB0aGUgaW5pdGlhbCBjb21taXQgd2lsbCBiZSBzaG93biBhcyBhIGJpZworCWNyZWF0aW9uIGV2ZW50LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBkaWZmIGFnYWluc3QgdGhlIE5VTEwgdHJlZS4KKworLS1zdGRpbjo6CisJV2hlbiBgLS1zdGRpbmAgaXMgc3BlY2lmaWVkLCB0aGUgY29tbWFuZCBkb2VzIG5vdCB0YWtlCisJPHRyZWUtaXNoPiBhcmd1bWVudHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgSW5zdGVhZCwgaXQKKwlyZWFkcyBsaW5lcyBjb250YWluaW5nIGVpdGhlciB0d28gPHRyZWU+LCBvbmUgPGNvbW1pdD4sIG9yIGEKKwlsaXN0IG9mIDxjb21taXQ+IGZyb20gaXRzIHN0YW5kYXJkIGlucHV0LiAgKFVzZSBhIHNpbmdsZSBzcGFjZQorCWFzIHNlcGFyYXRvci4pCisrCitXaGVuIHR3byB0cmVlcyBhcmUgZ2l2ZW4sIGl0IGNvbXBhcmVzIHRoZSBmaXJzdCB0cmVlIHdpdGggdGhlIHNlY29uZC4KK1doZW4gYSBzaW5nbGUgY29tbWl0IGlzIGdpdmVuLCBpdCBjb21wYXJlcyB0aGUgY29tbWl0IHdpdGggaXRzCitwYXJlbnRzLiAgVGhlIHJlbWFpbmluZyBjb21taXRzLCB3aGVuIGdpdmVuLCBhcmUgdXNlZCBhcyBpZiB0aGV5IGFyZQorcGFyZW50cyBvZiB0aGUgZmlyc3QgY29tbWl0LgorKworV2hlbiBjb21wYXJpbmcgdHdvIHRyZWVzLCB0aGUgSUQgb2YgYm90aCB0cmVlcyAoc2VwYXJhdGVkIGJ5IGEgc3BhY2UKK2FuZCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSkgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGRpZmZlcmVuY2UuICBXaGVuCitjb21wYXJpbmcgY29tbWl0cywgdGhlIElEIG9mIHRoZSBmaXJzdCAob3Igb25seSkgY29tbWl0LCBmb2xsb3dlZCBieSBhCituZXdsaW5lLCBpcyBwcmludGVkLgorKworVGhlIGZvbGxvd2luZyBmbGFncyBmdXJ0aGVyIGFmZmVjdCB0aGUgYmVoYXZpb3Igd2hlbiBjb21wYXJpbmcKK2NvbW1pdHMgKGJ1dCBub3QgdHJlZXMpLgorCistbTo6CisJQnkgZGVmYXVsdCwgJ2dpdCBkaWZmLXRyZWUgLS1zdGRpbicgZG9lcyBub3Qgc2hvdworCWRpZmZlcmVuY2VzIGZvciBtZXJnZSBjb21taXRzLiAgV2l0aCB0aGlzIGZsYWcsIGl0IHNob3dzCisJZGlmZmVyZW5jZXMgdG8gdGhhdCBjb21taXQgZnJvbSBhbGwgb2YgaXRzIHBhcmVudHMuIFNlZQorCWFsc28gYC1jYC4KKworLXM6OgorCUJ5IGRlZmF1bHQsICdnaXQgZGlmZi10cmVlIC0tc3RkaW4nIHNob3dzIGRpZmZlcmVuY2VzLAorCWVpdGhlciBpbiBtYWNoaW5lLXJlYWRhYmxlIGZvcm0gKHdpdGhvdXQgYC1wYCkgb3IgaW4gcGF0Y2gKKwlmb3JtICh3aXRoIGAtcGApLiAgVGhpcyBvdXRwdXQgY2FuIGJlIHN1cHByZXNzZWQuICBJdCBpcworCW9ubHkgdXNlZnVsIHdpdGggYC12YCBmbGFnLgorCistdjo6CisJVGhpcyBmbGFnIGNhdXNlcyAnZ2l0IGRpZmYtdHJlZSAtLXN0ZGluJyB0byBhbHNvIHNob3cKKwl0aGUgY29tbWl0IG1lc3NhZ2UgYmVmb3JlIHRoZSBkaWZmZXJlbmNlcy4KKworaW5jbHVkZTo6cHJldHR5LW9wdGlvbnMudHh0W10KKworLS1uby1jb21taXQtaWQ6OgorCSdnaXQgZGlmZi10cmVlJyBvdXRwdXRzIGEgbGluZSB3aXRoIHRoZSBjb21taXQgSUQgd2hlbgorCWFwcGxpY2FibGUuICBUaGlzIGZsYWcgc3VwcHJlc3NlZCB0aGUgY29tbWl0IElEIG91dHB1dC4KKworLWM6OgorCVRoaXMgZmxhZyBjaGFuZ2VzIHRoZSB3YXkgYSBtZXJnZSBjb21taXQgaXMgZGlzcGxheWVkCisJKHdoaWNoIG1lYW5zIGl0IGlzIHVzZWZ1bCBvbmx5IHdoZW4gdGhlIGNvbW1hbmQgaXMgZ2l2ZW4KKwlvbmUgPHRyZWUtaXNoPiwgb3IgYC0tc3RkaW5gKS4gIEl0IHNob3dzIHRoZSBkaWZmZXJlbmNlcworCWZyb20gZWFjaCBvZiB0aGUgcGFyZW50cyB0byB0aGUgbWVyZ2UgcmVzdWx0IHNpbXVsdGFuZW91c2x5CisJaW5zdGVhZCBvZiBzaG93aW5nIHBhaXJ3aXNlIGRpZmYgYmV0d2VlbiBhIHBhcmVudCBhbmQgdGhlCisJcmVzdWx0IG9uZSBhdCBhIHRpbWUgKHdoaWNoIGlzIHdoYXQgdGhlIGAtbWAgb3B0aW9uIGRvZXMpLgorCUZ1cnRoZXJtb3JlLCBpdCBsaXN0cyBvbmx5IGZpbGVzIHdoaWNoIHdlcmUgbW9kaWZpZWQKKwlmcm9tIGFsbCBwYXJlbnRzLgorCistLWNjOjoKKwlUaGlzIGZsYWcgY2hhbmdlcyB0aGUgd2F5IGEgbWVyZ2UgY29tbWl0IHBhdGNoIGlzIGRpc3BsYXllZCwKKwlpbiBhIHNpbWlsYXIgd2F5IHRvIHRoZSBgLWNgIG9wdGlvbi4gSXQgaW1wbGllcyB0aGUgYC1jYAorCWFuZCBgLXBgIG9wdGlvbnMgYW5kIGZ1cnRoZXIgY29tcHJlc3NlcyB0aGUgcGF0Y2ggb3V0cHV0CisJYnkgb21pdHRpbmcgdW5pbnRlcmVzdGluZyBodW5rcyB3aG9zZSB0aGUgY29udGVudHMgaW4gdGhlIHBhcmVudHMKKwloYXZlIG9ubHkgdHdvIHZhcmlhbnRzIGFuZCB0aGUgbWVyZ2UgcmVzdWx0IHBpY2tzIG9uZSBvZiB0aGVtCisJd2l0aG91dCBtb2RpZmljYXRpb24uICBXaGVuIGFsbCBodW5rcyBhcmUgdW5pbnRlcmVzdGluZywgdGhlIGNvbW1pdAorCWl0c2VsZiBhbmQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpcyBub3Qgc2hvd24sIGp1c3QgbGlrZSBpbiBhbnkgb3RoZXIKKwkiZW1wdHkgZGlmZiIgY2FzZS4KKworLS1jb21iaW5lZC1hbGwtcGF0aHM6OgorCVRoaXMgZmxhZyBjYXVzZXMgY29tYmluZWQgZGlmZnMgKHVzZWQgZm9yIG1lcmdlIGNvbW1pdHMpIHRvCisJbGlzdCB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmcm9tIGFsbCBwYXJlbnRzLiAgSXQgdGh1cyBvbmx5IGhhcworCWVmZmVjdCB3aGVuIC1jIG9yIC0tY2MgYXJlIHNwZWNpZmllZCwgYW5kIGlzIGxpa2VseSBvbmx5CisJdXNlZnVsIGlmIGZpbGVuYW1lIGNoYW5nZXMgYXJlIGRldGVjdGVkIChpLmUuIHdoZW4gZWl0aGVyCisJcmVuYW1lIG9yIGNvcHkgZGV0ZWN0aW9uIGhhdmUgYmVlbiByZXF1ZXN0ZWQpLgorCistLWFsd2F5czo6CisJU2hvdyB0aGUgY29tbWl0IGl0c2VsZiBhbmQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBldmVuCisJaWYgdGhlIGRpZmYgaXRzZWxmIGlzIGVtcHR5LgorCisKK2luY2x1ZGU6OnByZXR0eS1mb3JtYXRzLnR4dFtdCisKK2luY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzc4MWNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKQEAgLTAsMCArMSwyMDMgQEAKK2dpdC1kaWZmKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZGlmZiAtIFNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZicgWzxvcHRpb25zPl0gWzxjb21taXQ+XSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIC0tY2FjaGVkIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSA8Y29tbWl0PiA8Y29tbWl0PiBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIDxibG9iPiA8YmxvYj4KKydnaXQgZGlmZicgWzxvcHRpb25zPl0gLS1uby1pbmRleCBbLS1dIDxwYXRoPiA8cGF0aD4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitTaG93IGNoYW5nZXMgYmV0d2VlbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggb3IgYSB0cmVlLCBjaGFuZ2VzCitiZXR3ZWVuIHRoZSBpbmRleCBhbmQgYSB0cmVlLCBjaGFuZ2VzIGJldHdlZW4gdHdvIHRyZWVzLCBjaGFuZ2VzIGJldHdlZW4KK3R3byBibG9iIG9iamVjdHMsIG9yIGNoYW5nZXMgYmV0d2VlbiB0d28gZmlsZXMgb24gZGlzay4KKworJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSBbLS1dIFs8cGF0aD4uLi5dOjoKKworCVRoaXMgZm9ybSBpcyB0byB2aWV3IHRoZSBjaGFuZ2VzIHlvdSBtYWRlIHJlbGF0aXZlIHRvCisJdGhlIGluZGV4IChzdGFnaW5nIGFyZWEgZm9yIHRoZSBuZXh0IGNvbW1pdCkuICBJbiBvdGhlcgorCXdvcmRzLCB0aGUgZGlmZmVyZW5jZXMgYXJlIHdoYXQgeW91IF9jb3VsZF8gdGVsbCBHaXQgdG8KKwlmdXJ0aGVyIGFkZCB0byB0aGUgaW5kZXggYnV0IHlvdSBzdGlsbCBoYXZlbid0LiAgWW91IGNhbgorCXN0YWdlIHRoZXNlIGNoYW5nZXMgYnkgdXNpbmcgbGlua2dpdDpnaXQtYWRkWzFdLgorCisnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIC0tbm8taW5kZXggWy0tXSA8cGF0aD4gPHBhdGg+OjoKKworCVRoaXMgZm9ybSBpcyB0byBjb21wYXJlIHRoZSBnaXZlbiB0d28gcGF0aHMgb24gdGhlCisJZmlsZXN5c3RlbS4gIFlvdSBjYW4gb21pdCB0aGUgYC0tbm8taW5kZXhgIG9wdGlvbiB3aGVuCisJcnVubmluZyB0aGUgY29tbWFuZCBpbiBhIHdvcmtpbmcgdHJlZSBjb250cm9sbGVkIGJ5IEdpdCBhbmQKKwlhdCBsZWFzdCBvbmUgb2YgdGhlIHBhdGhzIHBvaW50cyBvdXRzaWRlIHRoZSB3b3JraW5nIHRyZWUsCisJb3Igd2hlbiBydW5uaW5nIHRoZSBjb21tYW5kIG91dHNpZGUgYSB3b3JraW5nIHRyZWUKKwljb250cm9sbGVkIGJ5IEdpdC4gVGhpcyBmb3JtIGltcGxpZXMgYC0tZXhpdC1jb2RlYC4KKworJ2dpdCBkaWZmJyBbPG9wdGlvbnM+XSAtLWNhY2hlZCBbPGNvbW1pdD5dIFstLV0gWzxwYXRoPi4uLl06OgorCisJVGhpcyBmb3JtIGlzIHRvIHZpZXcgdGhlIGNoYW5nZXMgeW91IHN0YWdlZCBmb3IgdGhlIG5leHQKKwljb21taXQgcmVsYXRpdmUgdG8gdGhlIG5hbWVkIDxjb21taXQ+LiAgVHlwaWNhbGx5IHlvdQorCXdvdWxkIHdhbnQgY29tcGFyaXNvbiB3aXRoIHRoZSBsYXRlc3QgY29tbWl0LCBzbyBpZiB5b3UKKwlkbyBub3QgZ2l2ZSA8Y29tbWl0PiwgaXQgZGVmYXVsdHMgdG8gSEVBRC4KKwlJZiBIRUFEIGRvZXMgbm90IGV4aXN0IChlLmcuIHVuYm9ybiBicmFuY2hlcykgYW5kCisJPGNvbW1pdD4gaXMgbm90IGdpdmVuLCBpdCBzaG93cyBhbGwgc3RhZ2VkIGNoYW5nZXMuCisJLS1zdGFnZWQgaXMgYSBzeW5vbnltIG9mIC0tY2FjaGVkLgorCisnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIDxjb21taXQ+IFstLV0gWzxwYXRoPi4uLl06OgorCisJVGhpcyBmb3JtIGlzIHRvIHZpZXcgdGhlIGNoYW5nZXMgeW91IGhhdmUgaW4geW91cgorCXdvcmtpbmcgdHJlZSByZWxhdGl2ZSB0byB0aGUgbmFtZWQgPGNvbW1pdD4uICBZb3UgY2FuCisJdXNlIEhFQUQgdG8gY29tcGFyZSBpdCB3aXRoIHRoZSBsYXRlc3QgY29tbWl0LCBvciBhCisJYnJhbmNoIG5hbWUgdG8gY29tcGFyZSB3aXRoIHRoZSB0aXAgb2YgYSBkaWZmZXJlbnQKKwlicmFuY2guCisKKydnaXQgZGlmZicgWzxvcHRpb25zPl0gPGNvbW1pdD4gPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGlzIHRvIHZpZXcgdGhlIGNoYW5nZXMgYmV0d2VlbiB0d28gYXJiaXRyYXJ5CisJPGNvbW1pdD4uCisKKydnaXQgZGlmZicgWzxvcHRpb25zPl0gPGNvbW1pdD4uLjxjb21taXQ+IFstLV0gWzxwYXRoPi4uLl06OgorCisJVGhpcyBpcyBzeW5vbnltb3VzIHRvIHRoZSBwcmV2aW91cyBmb3JtLiAgSWYgPGNvbW1pdD4gb24KKwlvbmUgc2lkZSBpcyBvbWl0dGVkLCBpdCB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzCisJdXNpbmcgSEVBRCBpbnN0ZWFkLgorCisnZ2l0IGRpZmYnIFs8b3B0aW9ucz5dIDxjb21taXQ+XC4uLjxjb21taXQ+IFstLV0gWzxwYXRoPi4uLl06OgorCisJVGhpcyBmb3JtIGlzIHRvIHZpZXcgdGhlIGNoYW5nZXMgb24gdGhlIGJyYW5jaCBjb250YWluaW5nCisJYW5kIHVwIHRvIHRoZSBzZWNvbmQgPGNvbW1pdD4sIHN0YXJ0aW5nIGF0IGEgY29tbW9uIGFuY2VzdG9yCisJb2YgYm90aCA8Y29tbWl0Pi4gICJnaXQgZGlmZiBBXC4uLkIiIGlzIGVxdWl2YWxlbnQgdG8KKwkiZ2l0IGRpZmYgJChnaXQgbWVyZ2UtYmFzZSBBIEIpIEIiLiAgWW91IGNhbiBvbWl0IGFueSBvbmUKKwlvZiA8Y29tbWl0Piwgd2hpY2ggaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB1c2luZyBIRUFEIGluc3RlYWQuCisKK0p1c3QgaW4gY2FzZSB5b3UgYXJlIGRvaW5nIHNvbWV0aGluZyBleG90aWMsIGl0IHNob3VsZCBiZQorbm90ZWQgdGhhdCBhbGwgb2YgdGhlIDxjb21taXQ+IGluIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiwgZXhjZXB0CitpbiB0aGUgbGFzdCB0d28gZm9ybXMgdGhhdCB1c2UgIi4uIiBub3RhdGlvbnMsIGNhbiBiZSBhbnkKKzx0cmVlPi4KKworRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgPGNvbW1pdD4sIHNlZQorIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorSG93ZXZlciwgImRpZmYiIGlzIGFib3V0IGNvbXBhcmluZyB0d28gX2VuZHBvaW50c18sIG5vdCByYW5nZXMsCithbmQgdGhlIHJhbmdlIG5vdGF0aW9ucyAoIjxjb21taXQ+Li48Y29tbWl0PiIgYW5kCisiPGNvbW1pdD5cLi4uPGNvbW1pdD4iKSBkbyBub3QgbWVhbiBhIHJhbmdlIGFzIGRlZmluZWQgaW4gdGhlCisiU1BFQ0lGWUlORyBSQU5HRVMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKKydnaXQgZGlmZicgWzxvcHRpb25zPl0gPGJsb2I+IDxibG9iPjo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgcmF3CisJY29udGVudHMgb2YgdHdvIGJsb2Igb2JqZWN0cy4KKworT1BUSU9OUworLS0tLS0tLQorOmdpdC1kaWZmOiAxCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworLTEgLS1iYXNlOjoKKy0yIC0tb3Vyczo6CistMyAtLXRoZWlyczo6CisJQ29tcGFyZSB0aGUgd29ya2luZyB0cmVlIHdpdGggdGhlICJiYXNlIiB2ZXJzaW9uIChzdGFnZSAjMSksCisJIm91ciBicmFuY2giIChzdGFnZSAjMikgb3IgInRoZWlyIGJyYW5jaCIgKHN0YWdlICMzKS4gIFRoZQorCWluZGV4IGNvbnRhaW5zIHRoZXNlIHN0YWdlcyBvbmx5IGZvciB1bm1lcmdlZCBlbnRyaWVzIGkuZS4KKwl3aGlsZSByZXNvbHZpbmcgY29uZmxpY3RzLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlYWQtdHJlZVsxXQorCXNlY3Rpb24gIjMtV2F5IE1lcmdlIiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24uCisKKy0wOjoKKwlPbWl0IGRpZmYgb3V0cHV0IGZvciB1bm1lcmdlZCBlbnRyaWVzIGFuZCBqdXN0IHNob3cKKwkiVW5tZXJnZWQiLiAgQ2FuIGJlIHVzZWQgb25seSB3aGVuIGNvbXBhcmluZyB0aGUgd29ya2luZyB0cmVlCisJd2l0aCB0aGUgaW5kZXguCisKKzxwYXRoPi4uLjo6CisJVGhlIDxwYXRocz4gcGFyYW1ldGVycywgd2hlbiBnaXZlbiwgYXJlIHVzZWQgdG8gbGltaXQKKwl0aGUgZGlmZiB0byB0aGUgbmFtZWQgcGF0aHMgKHlvdSBjYW4gZ2l2ZSBkaXJlY3RvcnkKKwluYW1lcyBhbmQgZ2V0IGRpZmYgZm9yIGFsbCBmaWxlcyB1bmRlciB0aGVtKS4KKworCitpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQorCitFWEFNUExFUworLS0tLS0tLS0KKworVmFyaW91cyB3YXlzIHRvIGNoZWNrIHlvdXIgd29ya2luZyB0cmVlOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAgICAgICAgICAgIDwxPgorJCBnaXQgZGlmZiAtLWNhY2hlZCAgIDwyPgorJCBnaXQgZGlmZiBIRUFEICAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gQ2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlIG5vdCB5ZXQgc3RhZ2VkIGZvciB0aGUgbmV4dCBjb21taXQuCis8Mj4gQ2hhbmdlcyBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgeW91ciBsYXN0IGNvbW1pdDsgd2hhdCB5b3UKKyAgICB3b3VsZCBiZSBjb21taXR0aW5nIGlmIHlvdSBydW4gImdpdCBjb21taXQiIHdpdGhvdXQgIi1hIiBvcHRpb24uCis8Mz4gQ2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlIHNpbmNlIHlvdXIgbGFzdCBjb21taXQ7IHdoYXQgeW91CisgICAgd291bGQgYmUgY29tbWl0dGluZyBpZiB5b3UgcnVuICJnaXQgY29tbWl0IC1hIgorCitDb21wYXJpbmcgd2l0aCBhcmJpdHJhcnkgY29tbWl0czo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgdGVzdCAgICAgICAgICAgIDwxPgorJCBnaXQgZGlmZiBIRUFEIC0tIC4vdGVzdCAgPDI+CiskIGdpdCBkaWZmIEhFQUReIEhFQUQgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IEluc3RlYWQgb2YgdXNpbmcgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gsIGNvbXBhcmUgd2l0aCB0aGUKKyAgICB0aXAgb2YgInRlc3QiIGJyYW5jaC4KKzwyPiBJbnN0ZWFkIG9mIGNvbXBhcmluZyB3aXRoIHRoZSB0aXAgb2YgInRlc3QiIGJyYW5jaCwgY29tcGFyZSB3aXRoCisgICAgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gsIGJ1dCBsaW1pdCB0aGUgY29tcGFyaXNvbiB0byB0aGUKKyAgICBmaWxlICJ0ZXN0Ii4KKzwzPiBDb21wYXJlIHRoZSB2ZXJzaW9uIGJlZm9yZSB0aGUgbGFzdCBjb21taXQgYW5kIHRoZSBsYXN0IGNvbW1pdC4KKworQ29tcGFyaW5nIGJyYW5jaGVzOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiB0b3BpYyBtYXN0ZXIgICAgPDE+CiskIGdpdCBkaWZmIHRvcGljLi5tYXN0ZXIgICA8Mj4KKyQgZ2l0IGRpZmYgdG9waWMuLi5tYXN0ZXIgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gQ2hhbmdlcyBiZXR3ZWVuIHRoZSB0aXBzIG9mIHRoZSB0b3BpYyBhbmQgdGhlIG1hc3RlciBicmFuY2hlcy4KKzwyPiBTYW1lIGFzIGFib3ZlLgorPDM+IENoYW5nZXMgdGhhdCBvY2N1cnJlZCBvbiB0aGUgbWFzdGVyIGJyYW5jaCBzaW5jZSB3aGVuIHRoZSB0b3BpYworICAgIGJyYW5jaCB3YXMgc3RhcnRlZCBvZmYgaXQuCisKK0xpbWl0aW5nIHRoZSBkaWZmIG91dHB1dDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1kaWZmLWZpbHRlcj1NUkMgICAgICAgICAgICA8MT4KKyQgZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IGRpZmYgYXJjaC9pMzg2IGluY2x1ZGUvYXNtLWkzODYgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IFNob3cgb25seSBtb2RpZmljYXRpb24sIHJlbmFtZSwgYW5kIGNvcHksIGJ1dCBub3QgYWRkaXRpb24KKyAgICBvciBkZWxldGlvbi4KKzwyPiBTaG93IG9ubHkgbmFtZXMgYW5kIHRoZSBuYXR1cmUgb2YgY2hhbmdlLCBidXQgbm90IGFjdHVhbAorICAgIGRpZmYgb3V0cHV0LgorPDM+IExpbWl0IGRpZmYgb3V0cHV0IHRvIG5hbWVkIHN1YnRyZWVzLgorCitNdW5naW5nIHRoZSBkaWZmIG91dHB1dDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1maW5kLWNvcGllcy1oYXJkZXIgLUIgLUMgIDwxPgorJCBnaXQgZGlmZiAtUiAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCByZW5hbWVzLCBjb3BpZXMgYW5kIGNvbXBsZXRlCisgICAgcmV3cml0ZXMgKHZlcnkgZXhwZW5zaXZlKS4KKzwyPiBPdXRwdXQgZGlmZiBpbiByZXZlcnNlLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2RpZmYoMSksCitsaW5rZ2l0OmdpdC1kaWZmdG9vbFsxXSwKK2xpbmtnaXQ6Z2l0LWxvZ1sxXSwKK2xpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10sCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sCitsaW5rZ2l0OmdpdC1hcHBseVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmZ0b29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODRjNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0CkBAIC0wLDAgKzEsMTQ5IEBACitnaXQtZGlmZnRvb2woMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZGlmZnRvb2wgLSBTaG93IGNoYW5nZXMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmZ0b29sJyBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKydnaXQgZGlmZnRvb2wnIGlzIGEgR2l0IGNvbW1hbmQgdGhhdCBhbGxvd3MgeW91IHRvIGNvbXBhcmUgYW5kIGVkaXQgZmlsZXMKK2JldHdlZW4gcmV2aXNpb25zIHVzaW5nIGNvbW1vbiBkaWZmIHRvb2xzLiAgJ2dpdCBkaWZmdG9vbCcgaXMgYSBmcm9udGVuZAordG8gJ2dpdCBkaWZmJyBhbmQgYWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFuZCBhcmd1bWVudHMuIFNlZQorbGlua2dpdDpnaXQtZGlmZlsxXS4KKworT1BUSU9OUworLS0tLS0tLQorLWQ6OgorLS1kaXItZGlmZjo6CisJQ29weSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gYSB0ZW1wb3JhcnkgbG9jYXRpb24gYW5kIHBlcmZvcm0KKwlhIGRpcmVjdG9yeSBkaWZmIG9uIHRoZW0uIFRoaXMgbW9kZSBuZXZlciBwcm9tcHRzIGJlZm9yZQorCWxhdW5jaGluZyB0aGUgZGlmZiB0b29sLgorCisteTo6CistLW5vLXByb21wdDo6CisJRG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sLgorCistLXByb21wdDo6CisJUHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIGRpZmYgdG9vbC4KKwlUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91cjsgdGhlIG9wdGlvbiBpcyBwcm92aWRlZCB0bworCW92ZXJyaWRlIGFueSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorCistdCA8dG9vbD46OgorLS10b29sPTx0b29sPjo6CisJVXNlIHRoZSBkaWZmIHRvb2wgc3BlY2lmaWVkIGJ5IDx0b29sPi4gIFZhbGlkIHZhbHVlcyBpbmNsdWRlCisJZW1lcmdlLCBrb21wYXJlLCBtZWxkLCBhbmQgdmltZGlmZi4gUnVuIGBnaXQgZGlmZnRvb2wgLS10b29sLWhlbHBgCisJZm9yIHRoZSBsaXN0IG9mIHZhbGlkIDx0b29sPiBzZXR0aW5ncy4KKysKK0lmIGEgZGlmZiB0b29sIGlzIG5vdCBzcGVjaWZpZWQsICdnaXQgZGlmZnRvb2wnCit3aWxsIHVzZSB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgZGlmZi50b29sYC4gIElmIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgZGlmZi50b29sYCBpcyBub3Qgc2V0LCAnZ2l0IGRpZmZ0b29sJword2lsbCBwaWNrIGEgc3VpdGFibGUgZGVmYXVsdC4KKysKK1lvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHRoZSB0b29sIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBkaWZmdG9vbC48dG9vbD4ucGF0aGAuIEZvciBleGFtcGxlLCB5b3UKK2NhbiBjb25maWd1cmUgdGhlIGFic29sdXRlIHBhdGggdG8ga2RpZmYzIGJ5IHNldHRpbmcKK2BkaWZmdG9vbC5rZGlmZjMucGF0aGAuIE90aGVyd2lzZSwgJ2dpdCBkaWZmdG9vbCcgYXNzdW1lcyB0aGUKK3Rvb2wgaXMgYXZhaWxhYmxlIGluIFBBVEguCisrCitJbnN0ZWFkIG9mIHJ1bm5pbmcgb25lIG9mIHRoZSBrbm93biBkaWZmIHRvb2xzLAorJ2dpdCBkaWZmdG9vbCcgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gcnVuIGFuIGFsdGVybmF0aXZlIHByb2dyYW0KK2J5IHNwZWNpZnlpbmcgdGhlIGNvbW1hbmQgbGluZSB0byBpbnZva2UgaW4gYSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSBgZGlmZnRvb2wuPHRvb2w+LmNtZGAuCisrCitXaGVuICdnaXQgZGlmZnRvb2wnIGlzIGludm9rZWQgd2l0aCB0aGlzIHRvb2wgKGVpdGhlciB0aHJvdWdoIHRoZQorYC10YCBvciBgLS10b29sYCBvcHRpb24gb3IgdGhlIGBkaWZmLnRvb2xgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUpCit0aGUgY29uZmlndXJlZCBjb21tYW5kIGxpbmUgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIGZvbGxvd2luZwordmFyaWFibGVzIGF2YWlsYWJsZTogYCRMT0NBTGAgaXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkKK2ZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGRpZmYgcHJlLWltYWdlIGFuZCBgJFJFTU9URWAKK2lzIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMKK29mIHRoZSBkaWZmIHBvc3QtaW1hZ2UuICBgJE1FUkdFRGAgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hpY2ggaXMKK2JlaW5nIGNvbXBhcmVkLiBgJEJBU0VgIGlzIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5Cit3aXRoIGN1c3RvbSBtZXJnZSB0b29sIGNvbW1hbmRzIGFuZCBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgYCRNRVJHRURgLgorCistLXRvb2wtaGVscDo6CisJUHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgLgorCistLVtuby1dc3ltbGlua3M6OgorCSdnaXQgZGlmZnRvb2wnJ3MgZGVmYXVsdCBiZWhhdmlvciBpcyBjcmVhdGUgc3ltbGlua3MgdG8gdGhlCisJd29ya2luZyB0cmVlIHdoZW4gcnVuIGluIGAtLWRpci1kaWZmYCBtb2RlIGFuZCB0aGUgcmlnaHQtaGFuZAorCXNpZGUgb2YgdGhlIGNvbXBhcmlzb24geWllbGRzIHRoZSBzYW1lIGNvbnRlbnQgYXMgdGhlIGZpbGUgaW4KKwl0aGUgd29ya2luZyB0cmVlLgorKworU3BlY2lmeWluZyBgLS1uby1zeW1saW5rc2AgaW5zdHJ1Y3RzICdnaXQgZGlmZnRvb2wnIHRvIGNyZWF0ZSBjb3BpZXMKK2luc3RlYWQuICBgLS1uby1zeW1saW5rc2AgaXMgdGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworLXggPGNvbW1hbmQ+OjoKKy0tZXh0Y21kPTxjb21tYW5kPjo6CisJU3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzLgorCSdnaXQtZGlmZnRvb2wnIGlnbm9yZXMgdGhlIGNvbmZpZ3VyZWQgZGVmYXVsdHMgYW5kIHJ1bnMKKwlgJGNvbW1hbmQgJExPQ0FMICRSRU1PVEVgIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorCUFkZGl0aW9uYWxseSwgYCRCQVNFYCBpcyBzZXQgaW4gdGhlIGVudmlyb25tZW50LgorCistZzo6CistLVtuby1dZ3VpOjoKKwlXaGVuICdnaXQtZGlmZnRvb2wnIGlzIGludm9rZWQgd2l0aCB0aGUgYC1nYCBvciBgLS1ndWlgIG9wdGlvbgorCXRoZSBkZWZhdWx0IGRpZmYgdG9vbCB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY29uZmlndXJlZAorCWBkaWZmLmd1aXRvb2xgIHZhcmlhYmxlIGluc3RlYWQgb2YgYGRpZmYudG9vbGAuIFRoZSBgLS1uby1ndWlgCisJb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoaXMgc2V0dGluZy4gSWYgYGRpZmYuZ3VpdG9vbGAKKwlpcyBub3Qgc2V0LCB3ZSB3aWxsIGZhbGxiYWNrIGluIHRoZSBvcmRlciBvZiBgbWVyZ2UuZ3VpdG9vbGAsCisJYGRpZmYudG9vbGAsIGBtZXJnZS50b29sYCB1bnRpbCBhIHRvb2wgaXMgZm91bmQuCisKKy0tW25vLV10cnVzdC1leGl0LWNvZGU6OgorCSdnaXQtZGlmZnRvb2wnIGludm9rZXMgYSBkaWZmIHRvb2wgaW5kaXZpZHVhbGx5IG9uIGVhY2ggZmlsZS4KKwlFcnJvcnMgcmVwb3J0ZWQgYnkgdGhlIGRpZmYgdG9vbCBhcmUgaWdub3JlZCBieSBkZWZhdWx0LgorCVVzZSBgLS10cnVzdC1leGl0LWNvZGVgIHRvIG1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuCisJaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgY29kZS4KKysKKydnaXQtZGlmZnRvb2wnIHdpbGwgZm9yd2FyZCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBpbnZva2VkIHRvb2wgd2hlbgorYC0tdHJ1c3QtZXhpdC1jb2RlYCBpcyB1c2VkLgorCitTZWUgbGlua2dpdDpnaXQtZGlmZlsxXSBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgb3B0aW9ucy4KKworQ09ORklHIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLQorJ2dpdCBkaWZmdG9vbCcgZmFsbHMgYmFjayB0byAnZ2l0IG1lcmdldG9vbCcgY29uZmlnIHZhcmlhYmxlcyB3aGVuIHRoZQorZGlmZnRvb2wgZXF1aXZhbGVudHMgaGF2ZSBub3QgYmVlbiBkZWZpbmVkLgorCitkaWZmLnRvb2w6OgorCVRoZSBkZWZhdWx0IGRpZmYgdG9vbCB0byB1c2UuCisKK2RpZmYuZ3VpdG9vbDo6CisJVGhlIGRlZmF1bHQgZGlmZiB0b29sIHRvIHVzZSB3aGVuIGAtLWd1aWAgaXMgc3BlY2lmaWVkLgorCitkaWZmdG9vbC48dG9vbD4ucGF0aDo6CisJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sLiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZQorCXlvdXIgdG9vbCBpcyBub3QgaW4gdGhlIFBBVEguCisKK2RpZmZ0b29sLjx0b29sPi5jbWQ6OgorCVNwZWNpZnkgdGhlIGNvbW1hbmQgdG8gaW52b2tlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sLgorKworU2VlIHRoZSBgLS10b29sPTx0b29sPmAgb3B0aW9uIGFib3ZlIGZvciBtb3JlIGRldGFpbHMuCisKK2RpZmZ0b29sLnByb21wdDo6CisJUHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIGRpZmYgdG9vbC4KKworZGlmZnRvb2wudHJ1c3RFeGl0Q29kZTo6CisJRXhpdCBkaWZmdG9vbCBpZiB0aGUgaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgc3RhdHVzLgorKworU2VlIHRoZSBgLS10cnVzdC1leGl0LWNvZGVgIG9wdGlvbiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWRpZmZbMV06OgorCSBTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjCisKK2xpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXTo6CisJUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMKKworbGlua2dpdDpnaXQtY29uZmlnWzFdOjoKKwkgR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODk1MGRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CkBAIC0wLDAgKzEsMjU1IEBACitnaXQtZmFzdC1leHBvcnQoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZmFzdC1leHBvcnQgLSBHaXQgZGF0YSBleHBvcnRlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmYXN0LWV4cG9ydCBbPG9wdGlvbnM+XScgfCAnZ2l0IGZhc3QtaW1wb3J0JworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgcHJvZ3JhbSBkdW1wcyB0aGUgZ2l2ZW4gcmV2aXNpb25zIGluIGEgZm9ybSBzdWl0YWJsZSB0byBiZSBwaXBlZAoraW50byAnZ2l0IGZhc3QtaW1wb3J0Jy4KKworWW91IGNhbiB1c2UgaXQgYXMgYSBodW1hbi1yZWFkYWJsZSBidW5kbGUgcmVwbGFjZW1lbnQgKHNlZQorbGlua2dpdDpnaXQtYnVuZGxlWzFdKSwgb3IgYXMgYSBmb3JtYXQgdGhhdCBjYW4gYmUgZWRpdGVkIGJlZm9yZSBiZWluZworZmVkIHRvICdnaXQgZmFzdC1pbXBvcnQnIGluIG9yZGVyIHRvIGRvIGhpc3RvcnkgcmV3cml0ZXMgKGFuIGFiaWxpdHkKK3JlbGllZCBvbiBieSB0b29scyBsaWtlICdnaXQgZmlsdGVyLXJlcG8nKS4KKworT1BUSU9OUworLS0tLS0tLQorLS1wcm9ncmVzcz08bj46OgorCUluc2VydCAncHJvZ3Jlc3MnIHN0YXRlbWVudHMgZXZlcnkgPG4+IG9iamVjdHMsIHRvIGJlIHNob3duIGJ5CisJJ2dpdCBmYXN0LWltcG9ydCcgZHVyaW5nIGltcG9ydC4KKworLS1zaWduZWQtdGFncz0odmVyYmF0aW18d2Fybnx3YXJuLXN0cmlwfHN0cmlwfGFib3J0KTo6CisJU3BlY2lmeSBob3cgdG8gaGFuZGxlIHNpZ25lZCB0YWdzLiAgU2luY2UgYW55IHRyYW5zZm9ybWF0aW9uCisJYWZ0ZXIgdGhlIGV4cG9ydCBjYW4gY2hhbmdlIHRoZSB0YWcgbmFtZXMgKHdoaWNoIGNhbiBhbHNvIGhhcHBlbgorCXdoZW4gZXhjbHVkaW5nIHJldmlzaW9ucykgdGhlIHNpZ25hdHVyZXMgd2lsbCBub3QgbWF0Y2guCisrCitXaGVuIGFza2luZyB0byAnYWJvcnQnICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHRoaXMgcHJvZ3JhbSB3aWxsIGRpZQord2hlbiBlbmNvdW50ZXJpbmcgYSBzaWduZWQgdGFnLiAgV2l0aCAnc3RyaXAnLCB0aGUgdGFncyB3aWxsIHNpbGVudGx5CitiZSBtYWRlIHVuc2lnbmVkLCB3aXRoICd3YXJuLXN0cmlwJyB0aGV5IHdpbGwgYmUgbWFkZSB1bnNpZ25lZCBidXQgYQord2FybmluZyB3aWxsIGJlIGRpc3BsYXllZCwgd2l0aCAndmVyYmF0aW0nLCB0aGV5IHdpbGwgYmUgc2lsZW50bHkKK2V4cG9ydGVkIGFuZCB3aXRoICd3YXJuJywgdGhleSB3aWxsIGJlIGV4cG9ydGVkLCBidXQgeW91IHdpbGwgc2VlIGEKK3dhcm5pbmcuCisKKy0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD0oYWJvcnR8ZHJvcHxyZXdyaXRlKTo6CisJU3BlY2lmeSBob3cgdG8gaGFuZGxlIHRhZ3Mgd2hvc2UgdGFnZ2VkIG9iamVjdCBpcyBmaWx0ZXJlZCBvdXQuCisJU2luY2UgcmV2aXNpb25zIGFuZCBmaWxlcyB0byBleHBvcnQgY2FuIGJlIGxpbWl0ZWQgYnkgcGF0aCwKKwl0YWdnZWQgb2JqZWN0cyBtYXkgYmUgZmlsdGVyZWQgY29tcGxldGVseS4KKysKK1doZW4gYXNraW5nIHRvICdhYm9ydCcgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhpcyBwcm9ncmFtIHdpbGwgZGllCit3aGVuIGVuY291bnRlcmluZyBzdWNoIGEgdGFnLiAgV2l0aCAnZHJvcCcgaXQgd2lsbCBvbWl0IHN1Y2ggdGFncyBmcm9tCit0aGUgb3V0cHV0LiAgV2l0aCAncmV3cml0ZScsIGlmIHRoZSB0YWdnZWQgb2JqZWN0IGlzIGEgY29tbWl0LCBpdCB3aWxsCityZXdyaXRlIHRoZSB0YWcgdG8gdGFnIGFuIGFuY2VzdG9yIGNvbW1pdCAodmlhIHBhcmVudCByZXdyaXRpbmc7IHNlZQorbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0pCisKKy1NOjoKKy1DOjoKKwlQZXJmb3JtIG1vdmUgYW5kL29yIGNvcHkgZGV0ZWN0aW9uLCBhcyBkZXNjcmliZWQgaW4gdGhlCisJbGlua2dpdDpnaXQtZGlmZlsxXSBtYW51YWwgcGFnZSwgYW5kIHVzZSBpdCB0byBnZW5lcmF0ZQorCXJlbmFtZSBhbmQgY29weSBjb21tYW5kcyBpbiB0aGUgb3V0cHV0IGR1bXAuCisrCitOb3RlIHRoYXQgZWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIGNvbW1hbmQgZGlkIG5vdCBjb21wbGFpbiBhbmQKK3Byb2R1Y2VkIGluY29ycmVjdCByZXN1bHRzIGlmIHlvdSBnYXZlIHRoZXNlIG9wdGlvbnMuCisKKy0tZXhwb3J0LW1hcmtzPTxmaWxlPjo6CisJRHVtcHMgdGhlIGludGVybmFsIG1hcmtzIHRhYmxlIHRvIDxmaWxlPiB3aGVuIGNvbXBsZXRlLgorCU1hcmtzIGFyZSB3cml0dGVuIG9uZSBwZXIgbGluZSBhcyBgOm1hcmtpZCBTSEEtMWAuIE9ubHkgbWFya3MKKwlmb3IgcmV2aXNpb25zIGFyZSBkdW1wZWQ7IG1hcmtzIGZvciBibG9icyBhcmUgaWdub3JlZC4KKwlCYWNrZW5kcyBjYW4gdXNlIHRoaXMgZmlsZSB0byB2YWxpZGF0ZSBpbXBvcnRzIGFmdGVyIHRoZXkKKwloYXZlIGJlZW4gY29tcGxldGVkLCBvciB0byBzYXZlIHRoZSBtYXJrcyB0YWJsZSBhY3Jvc3MKKwlpbmNyZW1lbnRhbCBydW5zLiAgQXMgPGZpbGU+IGlzIG9ubHkgb3BlbmVkIGFuZCB0cnVuY2F0ZWQKKwlhdCBjb21wbGV0aW9uLCB0aGUgc2FtZSBwYXRoIGNhbiBhbHNvIGJlIHNhZmVseSBnaXZlbiB0bworCS0taW1wb3J0LW1hcmtzLgorCVRoZSBmaWxlIHdpbGwgbm90IGJlIHdyaXR0ZW4gaWYgbm8gbmV3IG9iamVjdCBoYXMgYmVlbgorCW1hcmtlZC9leHBvcnRlZC4KKworLS1pbXBvcnQtbWFya3M9PGZpbGU+OjoKKwlCZWZvcmUgcHJvY2Vzc2luZyBhbnkgaW5wdXQsIGxvYWQgdGhlIG1hcmtzIHNwZWNpZmllZCBpbgorCTxmaWxlPi4gIFRoZSBpbnB1dCBmaWxlIG11c3QgZXhpc3QsIG11c3QgYmUgcmVhZGFibGUsIGFuZAorCW11c3QgdXNlIHRoZSBzYW1lIGZvcm1hdCBhcyBwcm9kdWNlZCBieSAtLWV4cG9ydC1tYXJrcy4KKworLS1tYXJrLXRhZ3M6OgorCUluIGFkZGl0aW9uIHRvIGxhYmVsbGluZyBibG9icyBhbmQgY29tbWl0cyB3aXRoIG1hcmsgaWRzLCBhbHNvCisJbGFiZWwgdGFncy4gIFRoaXMgaXMgdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGgKKwlgLS1leHBvcnQtbWFya3NgIGFuZCBgLS1pbXBvcnQtbWFya3NgLCBhbmQgaXMgYWxzbyB1c2VmdWwgKGFuZAorCW5lY2Vzc2FyeSkgZm9yIGV4cG9ydGluZyBvZiBuZXN0ZWQgdGFncy4gIEl0IGRvZXMgbm90IGh1cnQKKwlvdGhlciBjYXNlcyBhbmQgd291bGQgYmUgdGhlIGRlZmF1bHQsIGJ1dCBtYW55IGZhc3QtaW1wb3J0CisJZnJvbnRlbmRzIGFyZSBub3QgcHJlcGFyZWQgdG8gYWNjZXB0IHRhZ3Mgd2l0aCBtYXJrCisJaWRlbnRpZmllcnMuCisrCitBbnkgY29tbWl0cyAob3IgdGFncykgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBtYXJrZWQgd2lsbCBub3QgYmUKK2V4cG9ydGVkIGFnYWluLiAgSWYgdGhlIGJhY2tlbmQgdXNlcyBhIHNpbWlsYXIgLS1pbXBvcnQtbWFya3MgZmlsZSwKK3RoaXMgYWxsb3dzIGZvciBpbmNyZW1lbnRhbCBiaWRpcmVjdGlvbmFsIGV4cG9ydGluZyBvZiB0aGUgcmVwb3NpdG9yeQorYnkga2VlcGluZyB0aGUgbWFya3MgdGhlIHNhbWUgYWNyb3NzIHJ1bnMuCisKKy0tZmFrZS1taXNzaW5nLXRhZ2dlcjo6CisJU29tZSBvbGQgcmVwb3NpdG9yaWVzIGhhdmUgdGFncyB3aXRob3V0IGEgdGFnZ2VyLiAgVGhlCisJZmFzdC1pbXBvcnQgcHJvdG9jb2wgd2FzIHByZXR0eSBzdHJpY3QgYWJvdXQgdGhhdCwgYW5kIGRpZCBub3QKKwlhbGxvdyB0aGF0LiAgU28gZmFrZSBhIHRhZ2dlciB0byBiZSBhYmxlIHRvIGZhc3QtaW1wb3J0IHRoZQorCW91dHB1dC4KKworLS11c2UtZG9uZS1mZWF0dXJlOjoKKwlTdGFydCB0aGUgc3RyZWFtIHdpdGggYSAnZmVhdHVyZSBkb25lJyBzdGFuemEsIGFuZCB0ZXJtaW5hdGUKKwlpdCB3aXRoIGEgJ2RvbmUnIGNvbW1hbmQuCisKKy0tbm8tZGF0YTo6CisJU2tpcCBvdXRwdXQgb2YgYmxvYiBvYmplY3RzIGFuZCBpbnN0ZWFkIHJlZmVyIHRvIGJsb2JzIHZpYQorCXRoZWlyIG9yaWdpbmFsIFNIQS0xIGhhc2guICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJld3JpdGluZyB0aGUKKwlkaXJlY3Rvcnkgc3RydWN0dXJlIG9yIGhpc3Rvcnkgb2YgYSByZXBvc2l0b3J5IHdpdGhvdXQKKwl0b3VjaGluZyB0aGUgY29udGVudHMgb2YgaW5kaXZpZHVhbCBmaWxlcy4gIE5vdGUgdGhhdCB0aGUKKwlyZXN1bHRpbmcgc3RyZWFtIGNhbiBvbmx5IGJlIHVzZWQgYnkgYSByZXBvc2l0b3J5IHdoaWNoCisJYWxyZWFkeSBjb250YWlucyB0aGUgbmVjZXNzYXJ5IG9iamVjdHMuCisKKy0tZnVsbC10cmVlOjoKKwlUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIGZhc3QtZXhwb3J0IHRvIGlzc3VlIGEgImRlbGV0ZWFsbCIKKwlkaXJlY3RpdmUgZm9yIGVhY2ggY29tbWl0IGZvbGxvd2VkIGJ5IGEgZnVsbCBsaXN0IG9mIGFsbCBmaWxlcworCWluIHRoZSBjb21taXQgKGFzIG9wcG9zZWQgdG8ganVzdCBsaXN0aW5nIHRoZSBmaWxlcyB3aGljaCBhcmUKKwlkaWZmZXJlbnQgZnJvbSB0aGUgY29tbWl0J3MgZmlyc3QgcGFyZW50KS4KKworLS1hbm9ueW1pemU6OgorCUFub255bWl6ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlcG9zaXRvcnkgd2hpbGUgc3RpbGwgcmV0YWluaW5nCisJdGhlIHNoYXBlIG9mIHRoZSBoaXN0b3J5IGFuZCBzdG9yZWQgdHJlZS4gIFNlZSB0aGUgc2VjdGlvbiBvbgorCWBBTk9OWU1JWklOR2AgYmVsb3cuCisKKy0tcmVmZXJlbmNlLWV4Y2x1ZGVkLXBhcmVudHM6OgorCUJ5IGRlZmF1bHQsIHJ1bm5pbmcgYSBjb21tYW5kIHN1Y2ggYXMgYGdpdCBmYXN0LWV4cG9ydAorCW1hc3Rlcn41Li5tYXN0ZXJgIHdpbGwgbm90IGluY2x1ZGUgdGhlIGNvbW1pdCBtYXN0ZXJ7dGlsZGV9NQorCWFuZCB3aWxsIG1ha2UgbWFzdGVye3RpbGRlfTQgbm8gbG9uZ2VyIGhhdmUgbWFzdGVye3RpbGRlfTUgYXMKKwlhIHBhcmVudCAodGhvdWdoIGJvdGggdGhlIG9sZCBtYXN0ZXJ7dGlsZGV9NCBhbmQgbmV3CisJbWFzdGVye3RpbGRlfTQgd2lsbCBoYXZlIGFsbCB0aGUgc2FtZSBmaWxlcykuICBVc2UKKwktLXJlZmVyZW5jZS1leGNsdWRlZC1wYXJlbnRzIHRvIGluc3RlYWQgaGF2ZSB0aGUgc3RyZWFtCisJcmVmZXIgdG8gY29tbWl0cyBpbiB0aGUgZXhjbHVkZWQgcmFuZ2Ugb2YgaGlzdG9yeSBieSB0aGVpcgorCXNoYTFzdW0uICBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyBzdHJlYW0gY2FuIG9ubHkgYmUgdXNlZCBieSBhCisJcmVwb3NpdG9yeSB3aGljaCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgcGFyZW50CisJY29tbWl0cy4KKworLS1zaG93LW9yaWdpbmFsLWlkczo6CisJQWRkIGFuIGV4dHJhIGRpcmVjdGl2ZSB0byB0aGUgb3V0cHV0IGZvciBjb21taXRzIGFuZCBibG9icywKKwlgb3JpZ2luYWwtb2lkIDxTSEExU1VNPmAuICBXaGlsZSBzdWNoIGRpcmVjdGl2ZXMgd2lsbCBsaWtlbHkgYmUKKwlpZ25vcmVkIGJ5IGltcG9ydGVycyBzdWNoIGFzIGdpdC1mYXN0LWltcG9ydCwgaXQgbWF5IGJlIHVzZWZ1bAorCWZvciBpbnRlcm1lZGlhcnkgZmlsdGVycyAoZS5nLiBmb3IgcmV3cml0aW5nIGNvbW1pdCBtZXNzYWdlcworCXdoaWNoIHJlZmVyIHRvIG9sZGVyIGNvbW1pdHMsIG9yIGZvciBzdHJpcHBpbmcgYmxvYnMgYnkgaWQpLgorCistLXJlZW5jb2RlPSh5ZXN8bm98YWJvcnQpOjoKKwlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgYGVuY29kaW5nYCBoZWFkZXIgaW4gY29tbWl0IG9iamVjdHMuICBXaGVuCisJYXNraW5nIHRvICdhYm9ydCcgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhpcyBwcm9ncmFtIHdpbGwgZGllCisJd2hlbiBlbmNvdW50ZXJpbmcgc3VjaCBhIGNvbW1pdCBvYmplY3QuICBXaXRoICd5ZXMnLCB0aGUgY29tbWl0CisJbWVzc2FnZSB3aWxsIGJlIHJlLWVuY29kZWQgaW50byBVVEYtOC4gIFdpdGggJ25vJywgdGhlIG9yaWdpbmFsCisJZW5jb2Rpbmcgd2lsbCBiZSBwcmVzZXJ2ZWQuCisKKy0tcmVmc3BlYzo6CisJQXBwbHkgdGhlIHNwZWNpZmllZCByZWZzcGVjIHRvIGVhY2ggcmVmIGV4cG9ydGVkLiBNdWx0aXBsZSBvZiB0aGVtIGNhbgorCWJlIHNwZWNpZmllZC4KKworWzxnaXQtcmV2LWxpc3QtYXJncz4uLi5dOjoKKwlBIGxpc3Qgb2YgYXJndW1lbnRzLCBhY2NlcHRhYmxlIHRvICdnaXQgcmV2LXBhcnNlJyBhbmQKKwknZ2l0IHJldi1saXN0JywgdGhhdCBzcGVjaWZpZXMgdGhlIHNwZWNpZmljIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMKKwl0byBleHBvcnQuICBGb3IgZXhhbXBsZSwgYG1hc3Rlcn4xMC4ubWFzdGVyYCBjYXVzZXMgdGhlCisJY3VycmVudCBtYXN0ZXIgcmVmZXJlbmNlIHRvIGJlIGV4cG9ydGVkIGFsb25nIHdpdGggYWxsIG9iamVjdHMKKwlhZGRlZCBzaW5jZSBpdHMgMTB0aCBhbmNlc3RvciBjb21taXQgYW5kICh1bmxlc3MgdGhlCisJLS1yZWZlcmVuY2UtZXhjbHVkZWQtcGFyZW50cyBvcHRpb24gaXMgc3BlY2lmaWVkKSBhbGwgZmlsZXMKKwljb21tb24gdG8gbWFzdGVye3RpbGRlfTkgYW5kIG1hc3Rlcnt0aWxkZX0xMC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZhc3QtZXhwb3J0IC0tYWxsIHwgKGNkIC9lbXB0eS9yZXBvc2l0b3J5ICYmIGdpdCBmYXN0LWltcG9ydCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGV4cG9ydCB0aGUgd2hvbGUgcmVwb3NpdG9yeSBhbmQgaW1wb3J0IGl0IGludG8gdGhlIGV4aXN0aW5nCitlbXB0eSByZXBvc2l0b3J5LiAgRXhjZXB0IGZvciByZWVuY29kaW5nIGNvbW1pdHMgdGhhdCBhcmUgbm90IGluCitVVEYtOCwgaXQgd291bGQgYmUgYSBvbmUtdG8tb25lIG1pcnJvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZhc3QtZXhwb3J0IG1hc3Rlcn41Li5tYXN0ZXIgfAorCXNlZCAic3xyZWZzL2hlYWRzL21hc3RlcnxyZWZzL2hlYWRzL290aGVyfCIgfAorCWdpdCBmYXN0LWltcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtYWtlcyBhIG5ldyBicmFuY2ggY2FsbGVkICdvdGhlcicgZnJvbSAnbWFzdGVyfjUuLm1hc3RlcicKKyhpLmUuIGlmICdtYXN0ZXInIGhhcyBsaW5lYXIgaGlzdG9yeSwgaXQgd2lsbCB0YWtlIHRoZSBsYXN0IDUgY29tbWl0cykuCisKK05vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhhdCBub25lIG9mIHRoZSBibG9icyBhbmQgY29tbWl0IG1lc3NhZ2VzCityZWZlcmVuY2VkIGJ5IHRoYXQgcmV2aXNpb24gcmFuZ2UgY29udGFpbnMgdGhlIHN0cmluZworJ3JlZnMvaGVhZHMvbWFzdGVyJy4KKworCitBTk9OWU1JWklORworLS0tLS0tLS0tLS0KKworSWYgdGhlIGAtLWFub255bWl6ZWAgb3B0aW9uIGlzIGdpdmVuLCBnaXQgd2lsbCBhdHRlbXB0IHRvIHJlbW92ZSBhbGwKK2lkZW50aWZ5aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlcG9zaXRvcnkgd2hpbGUgc3RpbGwgcmV0YWluaW5nIGVub3VnaAorb2YgdGhlIG9yaWdpbmFsIHRyZWUgYW5kIGhpc3RvcnkgcGF0dGVybnMgdG8gcmVwcm9kdWNlIHNvbWUgYnVncy4gVGhlCitnb2FsIGlzIHRoYXQgYSBnaXQgYnVnIHdoaWNoIGlzIGZvdW5kIG9uIGEgcHJpdmF0ZSByZXBvc2l0b3J5IHdpbGwKK3BlcnNpc3QgaW4gdGhlIGFub255bWl6ZWQgcmVwb3NpdG9yeSwgYW5kIHRoZSBsYXR0ZXIgY2FuIGJlIHNoYXJlZCB3aXRoCitnaXQgZGV2ZWxvcGVycyB0byBoZWxwIHNvbHZlIHRoZSBidWcuCisKK1dpdGggdGhpcyBvcHRpb24sIGdpdCB3aWxsIHJlcGxhY2UgYWxsIHJlZm5hbWVzLCBwYXRocywgYmxvYiBjb250ZW50cywKK2NvbW1pdCBhbmQgdGFnIG1lc3NhZ2VzLCBuYW1lcywgYW5kIGVtYWlsIGFkZHJlc3NlcyBpbiB0aGUgb3V0cHV0IHdpdGgKK2Fub255bWl6ZWQgZGF0YS4gIFR3byBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgc3RyaW5nIHdpbGwgYmUgcmVwbGFjZWQKK2VxdWl2YWxlbnRseSAoZS5nLiwgdHdvIGNvbW1pdHMgd2l0aCB0aGUgc2FtZSBhdXRob3Igd2lsbCBoYXZlIHRoZSBzYW1lCithbm9ueW1pemVkIGF1dGhvciBpbiB0aGUgb3V0cHV0LCBidXQgYmVhciBubyByZXNlbWJsYW5jZSB0byB0aGUgb3JpZ2luYWwKK2F1dGhvciBzdHJpbmcpLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY29tbWl0cywgYnJhbmNoZXMsIGFuZCB0YWdzIGlzCityZXRhaW5lZCwgYXMgd2VsbCBhcyB0aGUgY29tbWl0IHRpbWVzdGFtcHMgKGJ1dCB0aGUgY29tbWl0IG1lc3NhZ2VzIGFuZAorcmVmbmFtZXMgYmVhciBubyByZXNlbWJsYW5jZSB0byB0aGUgb3JpZ2luYWxzKS4gVGhlIHJlbGF0aXZlIG1ha2V1cCBvZgordGhlIHRyZWUgaXMgcmV0YWluZWQgKGUuZy4sIGlmIHlvdSBoYXZlIGEgcm9vdCB0cmVlIHdpdGggMTAgZmlsZXMgYW5kIDMKK3RyZWVzLCBzbyB3aWxsIHRoZSBvdXRwdXQpLCBidXQgdGhlaXIgbmFtZXMgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUKK2ZpbGVzIHdpbGwgYmUgcmVwbGFjZWQuCisKK0lmIHlvdSB0aGluayB5b3UgaGF2ZSBmb3VuZCBhIGdpdCBidWcsIHlvdSBjYW4gc3RhcnQgYnkgZXhwb3J0aW5nIGFuCithbm9ueW1pemVkIHN0cmVhbSBvZiB0aGUgd2hvbGUgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmYXN0LWV4cG9ydCAtLWFub255bWl6ZSAtLWFsbCA+YW5vbi1zdHJlYW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIGNvbmZpcm0gdGhhdCB0aGUgYnVnIHBlcnNpc3RzIGluIGEgcmVwb3NpdG9yeSBjcmVhdGVkIGZyb20gdGhhdAorc3RyZWFtIChtYW55IGJ1Z3Mgd2lsbCBub3QsIGFzIHRoZXkgcmVhbGx5IGRvIGRlcGVuZCBvbiB0aGUgZXhhY3QKK3JlcG9zaXRvcnkgY29udGVudHMpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGluaXQgYW5vbi1yZXBvCiskIGNkIGFub24tcmVwbworJCBnaXQgZmFzdC1pbXBvcnQgPC4uL2Fub24tc3RyZWFtCiskIC4uLiB0ZXN0IHlvdXIgYnVnIC4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBhbm9ueW1pemVkIHJlcG9zaXRvcnkgc2hvd3MgdGhlIGJ1ZywgaXQgbWF5IGJlIHdvcnRoIHNoYXJpbmcKK2Bhbm9uLXN0cmVhbWAgYWxvbmcgd2l0aCBhIHJlZ3VsYXIgYnVnIHJlcG9ydC4gTm90ZSB0aGF0IHRoZSBhbm9ueW1pemVkCitzdHJlYW0gY29tcHJlc3NlcyB2ZXJ5IHdlbGwsIHNvIGd6aXBwaW5nIGl0IGlzIGVuY291cmFnZWQuIElmIHlvdSB3YW50Cit0byBleGFtaW5lIHRoZSBzdHJlYW0gdG8gc2VlIHRoYXQgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgcHJpdmF0ZSBkYXRhLAoreW91IGNhbiBwZXJ1c2UgaXQgZGlyZWN0bHkgYmVmb3JlIHNlbmRpbmcuIFlvdSBtYXkgYWxzbyB3YW50IHRvIHRyeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIHBlcmwgLXBlICdzL1xkKy9YL2cnIDxhbm9uLXN0cmVhbSB8IHNvcnQgLXUgfCBsZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggc2hvd3MgYWxsIG9mIHRoZSB1bmlxdWUgbGluZXMgKHdpdGggbnVtYmVycyBjb252ZXJ0ZWQgdG8gIlgiLCB0bworY29sbGFwc2UgIlVzZXIgMCIsICJVc2VyIDEiLCBldGMgaW50byAiVXNlciBYIikuIFRoaXMgcHJvZHVjZXMgYSBtdWNoCitzbWFsbGVyIG91dHB1dCwgYW5kIGl0IGlzIHVzdWFsbHkgZWFzeSB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGVyZSBpcworbm8gcHJpdmF0ZSBkYXRhIGluIHRoZSBzdHJlYW0uCisKKworTElNSVRBVElPTlMKKy0tLS0tLS0tLS0tCisKK1NpbmNlICdnaXQgZmFzdC1pbXBvcnQnIGNhbm5vdCB0YWcgdHJlZXMsIHlvdSB3aWxsIG5vdCBiZQorYWJsZSB0byBleHBvcnQgdGhlIGxpbnV4LmdpdCByZXBvc2l0b3J5IGNvbXBsZXRlbHksIGFzIGl0IGNvbnRhaW5zCithIHRhZyByZWZlcmVuY2luZyBhIHRyZWUgaW5zdGVhZCBvZiBhIGNvbW1pdC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mYXN0LWltcG9ydFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODg5Zjk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0CkBAIC0wLDAgKzEsMTU0NiBAQAorZ2l0LWZhc3QtaW1wb3J0KDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZhc3QtaW1wb3J0IC0gQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2Zyb250ZW5kIHwgJ2dpdCBmYXN0LWltcG9ydCcgWzxvcHRpb25zPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHByb2dyYW0gaXMgdXN1YWxseSBub3Qgd2hhdCB0aGUgZW5kIHVzZXIgd2FudHMgdG8gcnVuIGRpcmVjdGx5LgorTW9zdCBlbmQgdXNlcnMgd2FudCB0byB1c2Ugb25lIG9mIHRoZSBleGlzdGluZyBmcm9udGVuZCBwcm9ncmFtcywKK3doaWNoIHBhcnNlcyBhIHNwZWNpZmljIHR5cGUgb2YgZm9yZWlnbiBzb3VyY2UgYW5kIGZlZWRzIHRoZSBjb250ZW50cworc3RvcmVkIHRoZXJlIHRvICdnaXQgZmFzdC1pbXBvcnQnLgorCitmYXN0LWltcG9ydCByZWFkcyBhIG1peGVkIGNvbW1hbmQvZGF0YSBzdHJlYW0gZnJvbSBzdGFuZGFyZCBpbnB1dCBhbmQKK3dyaXRlcyBvbmUgb3IgbW9yZSBwYWNrZmlsZXMgZGlyZWN0bHkgaW50byB0aGUgY3VycmVudCByZXBvc2l0b3J5LgorV2hlbiBFT0YgaXMgcmVjZWl2ZWQgb24gc3RhbmRhcmQgaW5wdXQsIGZhc3QgaW1wb3J0IHdyaXRlcyBvdXQKK3VwZGF0ZWQgYnJhbmNoIGFuZCB0YWcgcmVmcywgZnVsbHkgdXBkYXRpbmcgdGhlIGN1cnJlbnQgcmVwb3NpdG9yeQord2l0aCB0aGUgbmV3bHkgaW1wb3J0ZWQgZGF0YS4KKworVGhlIGZhc3QtaW1wb3J0IGJhY2tlbmQgaXRzZWxmIGNhbiBpbXBvcnQgaW50byBhbiBlbXB0eSByZXBvc2l0b3J5IChvbmUgdGhhdAoraGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCBieSAnZ2l0IGluaXQnKSBvciBpbmNyZW1lbnRhbGx5Cit1cGRhdGUgYW4gZXhpc3RpbmcgcG9wdWxhdGVkIHJlcG9zaXRvcnkuICBXaGV0aGVyIG9yIG5vdCBpbmNyZW1lbnRhbAoraW1wb3J0cyBhcmUgc3VwcG9ydGVkIGZyb20gYSBwYXJ0aWN1bGFyIGZvcmVpZ24gc291cmNlIGRlcGVuZHMgb24KK3RoZSBmcm9udGVuZCBwcm9ncmFtIGluIHVzZS4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tZm9yY2U6OgorCUZvcmNlIHVwZGF0aW5nIG1vZGlmaWVkIGV4aXN0aW5nIGJyYW5jaGVzLCBldmVuIGlmIGRvaW5nCisJc28gd291bGQgY2F1c2UgY29tbWl0cyB0byBiZSBsb3N0IChhcyB0aGUgbmV3IGNvbW1pdCBkb2VzCisJbm90IGNvbnRhaW4gdGhlIG9sZCBjb21taXQpLgorCistLXF1aWV0OjoKKwlEaXNhYmxlIHRoZSBvdXRwdXQgc2hvd24gYnkgLS1zdGF0cywgbWFraW5nIGZhc3QtaW1wb3J0IHVzdWFsbHkKKwliZSBzaWxlbnQgd2hlbiBpdCBpcyBzdWNjZXNzZnVsLiAgSG93ZXZlciwgaWYgdGhlIGltcG9ydCBzdHJlYW0KKwloYXMgZGlyZWN0aXZlcyBpbnRlbmRlZCB0byBzaG93IHVzZXIgb3V0cHV0IChlLmcuIGBwcm9ncmVzc2AKKwlkaXJlY3RpdmVzKSwgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZXMgd2lsbCBzdGlsbCBiZSBzaG93bi4KKworLS1zdGF0czo6CisJRGlzcGxheSBzb21lIGJhc2ljIHN0YXRpc3RpY3MgYWJvdXQgdGhlIG9iamVjdHMgZmFzdC1pbXBvcnQgaGFzCisJY3JlYXRlZCwgdGhlIHBhY2tmaWxlcyB0aGV5IHdlcmUgc3RvcmVkIGludG8sIGFuZCB0aGUKKwltZW1vcnkgdXNlZCBieSBmYXN0LWltcG9ydCBkdXJpbmcgdGhpcyBydW4uICBTaG93aW5nIHRoaXMgb3V0cHV0CisJaXMgY3VycmVudGx5IHRoZSBkZWZhdWx0LCBidXQgY2FuIGJlIGRpc2FibGVkIHdpdGggLS1xdWlldC4KKworLS1hbGxvdy11bnNhZmUtZmVhdHVyZXM6OgorCU1hbnkgY29tbWFuZC1saW5lIG9wdGlvbnMgY2FuIGJlIHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlCisJZmFzdC1pbXBvcnQgc3RyZWFtIGl0c2VsZiBieSB1c2luZyB0aGUgYGZlYXR1cmVgIG9yIGBvcHRpb25gCisJY29tbWFuZHMuIEhvd2V2ZXIsIHNvbWUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgdW5zYWZlIChlLmcuLAorCWFsbG93aW5nIGZhc3QtaW1wb3J0IHRvIGFjY2VzcyB0aGUgZmlsZXN5c3RlbSBvdXRzaWRlIG9mIHRoZQorCXJlcG9zaXRvcnkpLiBUaGVzZSBvcHRpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgY2FuIGJlCisJYWxsb3dlZCBieSBwcm92aWRpbmcgdGhpcyBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMKKwljdXJyZW50bHkgaW1wYWN0cyBvbmx5IHRoZSBgZXhwb3J0LW1hcmtzYCwgYGltcG9ydC1tYXJrc2AsIGFuZAorCWBpbXBvcnQtbWFya3MtaWYtZXhpc3RzYCBmZWF0dXJlIGNvbW1hbmRzLgorKworCU9ubHkgZW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSB0cnVzdCB0aGUgcHJvZ3JhbSBnZW5lcmF0aW5nIHRoZQorCWZhc3QtaW1wb3J0IHN0cmVhbSEgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGZvcgorCXJlbW90ZS1oZWxwZXJzIHRoYXQgdXNlIHRoZSBgaW1wb3J0YCBjYXBhYmlsaXR5LCBhcyB0aGV5IGFyZQorCWFscmVhZHkgdHJ1c3RlZCB0byBydW4gdGhlaXIgb3duIGNvZGUuCisKK09wdGlvbnMgZm9yIEZyb250ZW5kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy0tY2F0LWJsb2ItZmQ9PGZkPjo6CisJV3JpdGUgcmVzcG9uc2VzIHRvIGBnZXQtbWFya2AsIGBjYXQtYmxvYmAsIGFuZCBgbHNgIHF1ZXJpZXMgdG8gdGhlCisJZmlsZSBkZXNjcmlwdG9yIDxmZD4gaW5zdGVhZCBvZiBgc3Rkb3V0YC4gIEFsbG93cyBgcHJvZ3Jlc3NgCisJb3V0cHV0IGludGVuZGVkIGZvciB0aGUgZW5kLXVzZXIgdG8gYmUgc2VwYXJhdGVkIGZyb20gb3RoZXIKKwlvdXRwdXQuCisKKy0tZGF0ZS1mb3JtYXQ9PGZtdD46OgorCVNwZWNpZnkgdGhlIHR5cGUgb2YgZGF0ZXMgdGhlIGZyb250ZW5kIHdpbGwgc3VwcGx5IHRvCisJZmFzdC1pbXBvcnQgd2l0aGluIGBhdXRob3JgLCBgY29tbWl0dGVyYCBhbmQgYHRhZ2dlcmAgY29tbWFuZHMuCisJU2VlIGBgRGF0ZSBGb3JtYXRzJycgYmVsb3cgZm9yIGRldGFpbHMgYWJvdXQgd2hpY2ggZm9ybWF0cworCWFyZSBzdXBwb3J0ZWQsIGFuZCB0aGVpciBzeW50YXguCisKKy0tZG9uZTo6CisJVGVybWluYXRlIHdpdGggZXJyb3IgaWYgdGhlcmUgaXMgbm8gYGRvbmVgIGNvbW1hbmQgYXQgdGhlIGVuZCBvZgorCXRoZSBzdHJlYW0uICBUaGlzIG9wdGlvbiBtaWdodCBiZSB1c2VmdWwgZm9yIGRldGVjdGluZyBlcnJvcnMKKwl0aGF0IGNhdXNlIHRoZSBmcm9udGVuZCB0byB0ZXJtaW5hdGUgYmVmb3JlIGl0IGhhcyBzdGFydGVkIHRvCisJd3JpdGUgYSBzdHJlYW0uCisKK0xvY2F0aW9ucyBvZiBNYXJrcyBGaWxlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy0tZXhwb3J0LW1hcmtzPTxmaWxlPjo6CisJRHVtcHMgdGhlIGludGVybmFsIG1hcmtzIHRhYmxlIHRvIDxmaWxlPiB3aGVuIGNvbXBsZXRlLgorCU1hcmtzIGFyZSB3cml0dGVuIG9uZSBwZXIgbGluZSBhcyBgOm1hcmtpZCBTSEEtMWAuCisJRnJvbnRlbmRzIGNhbiB1c2UgdGhpcyBmaWxlIHRvIHZhbGlkYXRlIGltcG9ydHMgYWZ0ZXIgdGhleQorCWhhdmUgYmVlbiBjb21wbGV0ZWQsIG9yIHRvIHNhdmUgdGhlIG1hcmtzIHRhYmxlIGFjcm9zcworCWluY3JlbWVudGFsIHJ1bnMuICBBcyA8ZmlsZT4gaXMgb25seSBvcGVuZWQgYW5kIHRydW5jYXRlZAorCWF0IGNoZWNrcG9pbnQgKG9yIGNvbXBsZXRpb24pIHRoZSBzYW1lIHBhdGggY2FuIGFsc28gYmUKKwlzYWZlbHkgZ2l2ZW4gdG8gLS1pbXBvcnQtbWFya3MuCisKKy0taW1wb3J0LW1hcmtzPTxmaWxlPjo6CisJQmVmb3JlIHByb2Nlc3NpbmcgYW55IGlucHV0LCBsb2FkIHRoZSBtYXJrcyBzcGVjaWZpZWQgaW4KKwk8ZmlsZT4uICBUaGUgaW5wdXQgZmlsZSBtdXN0IGV4aXN0LCBtdXN0IGJlIHJlYWRhYmxlLCBhbmQKKwltdXN0IHVzZSB0aGUgc2FtZSBmb3JtYXQgYXMgcHJvZHVjZWQgYnkgLS1leHBvcnQtbWFya3MuCisJTXVsdGlwbGUgb3B0aW9ucyBtYXkgYmUgc3VwcGxpZWQgdG8gaW1wb3J0IG1vcmUgdGhhbiBvbmUKKwlzZXQgb2YgbWFya3MuICBJZiBhIG1hcmsgaXMgZGVmaW5lZCB0byBkaWZmZXJlbnQgdmFsdWVzLAorCXRoZSBsYXN0IGZpbGUgd2lucy4KKworLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzPTxmaWxlPjo6CisJTGlrZSAtLWltcG9ydC1tYXJrcyBidXQgaW5zdGVhZCBvZiBlcnJvcmluZyBvdXQsIHNpbGVudGx5CisJc2tpcHMgdGhlIGZpbGUgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisKKy0tW25vLV1yZWxhdGl2ZS1tYXJrczo6CisJQWZ0ZXIgc3BlY2lmeWluZyAtLXJlbGF0aXZlLW1hcmtzIHRoZSBwYXRocyBzcGVjaWZpZWQKKwl3aXRoIC0taW1wb3J0LW1hcmtzPSBhbmQgLS1leHBvcnQtbWFya3M9IGFyZSByZWxhdGl2ZQorCXRvIGFuIGludGVybmFsIGRpcmVjdG9yeSBpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LgorCUluIGdpdC1mYXN0LWltcG9ydCB0aGlzIG1lYW5zIHRoYXQgdGhlIHBhdGhzIGFyZSByZWxhdGl2ZQorCXRvIHRoZSAuZ2l0L2luZm8vZmFzdC1pbXBvcnQgZGlyZWN0b3J5LiBIb3dldmVyLCBvdGhlcgorCWltcG9ydGVycyBtYXkgdXNlIGEgZGlmZmVyZW50IGxvY2F0aW9uLgorKworUmVsYXRpdmUgYW5kIG5vbi1yZWxhdGl2ZSBtYXJrcyBtYXkgYmUgY29tYmluZWQgYnkgaW50ZXJ3ZWF2aW5nCistLShuby0pLXJlbGF0aXZlLW1hcmtzIHdpdGggdGhlIC0tKGltcG9ydHxleHBvcnQpLW1hcmtzPSBvcHRpb25zLgorCitQZXJmb3JtYW5jZSBhbmQgQ29tcHJlc3Npb24gVHVuaW5nCit+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+YCBhbmQgYHBvc2l0aW9uPTxwb3NpdGlvbj5gIGluIGFueSBvcmRlcgorCXNlcGFyYXRlZCBieSBhIGNvbW1hLCB3aGVyZSB0aGUgYDxwb3NpdGlvbj5gIGlzIGVpdGhlciBsZWZ0LAorCXJpZ2h0IG9yIG1pZGRsZSwgZGVmYXVsdCBiZWluZyBsZWZ0IGFuZCBgPHdpZHRoPmAgaXMgdGhlIHRvdGFsCisJbGVuZ3RoIG9mIHRoZSBjb250ZW50IHdpdGggYWxpZ25tZW50LiBGb3IgYnJldml0eSwgdGhlCisJIndpZHRoPSIgYW5kL29yICJwb3NpdGlvbj0iIHByZWZpeGVzIG1heSBiZSBvbWl0dGVkLCBhbmQgYmFyZQorCTx3aWR0aD4gYW5kIDxwb3NpdGlvbj4gdXNlZCBpbnN0ZWFkLiAgRm9yIGluc3RhbmNlLAorCWAlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPilgLiBJZiB0aGUgY29udGVudHMgbGVuZ3RoIGlzIG1vcmUKKwl0aGFuIHRoZSB3aWR0aCB0aGVuIG5vIGFsaWdubWVudCBpcyBwZXJmb3JtZWQuIElmIHVzZWQgd2l0aAorCWAtLXF1b3RlYCBldmVyeXRoaW5nIGluIGJldHdlZW4gJShhbGlnbjouLi4pIGFuZCAlKGVuZCkgaXMKKwlxdW90ZWQsIGJ1dCBpZiBuZXN0ZWQgdGhlbiBvbmx5IHRoZSB0b3Btb3N0IGxldmVsIHBlcmZvcm1zCisJcXVvdGluZy4KKworaWY6OgorCVVzZWQgYXMgJShpZikuLi4lKHRoZW4pLi4uJShlbmQpIG9yCisJJShpZikuLi4lKHRoZW4pLi4uJShlbHNlKS4uLiUoZW5kKS4gIElmIHRoZXJlIGlzIGFuIGF0b20gd2l0aAorCXZhbHVlIG9yIHN0cmluZyBsaXRlcmFsIGFmdGVyIHRoZSAlKGlmKSB0aGVuIGV2ZXJ5dGhpbmcgYWZ0ZXIKKwl0aGUgJSh0aGVuKSBpcyBwcmludGVkLCBlbHNlIGlmIHRoZSAlKGVsc2UpIGF0b20gaXMgdXNlZCwgdGhlbgorCWV2ZXJ5dGhpbmcgYWZ0ZXIgJShlbHNlKSBpcyBwcmludGVkLiBXZSBpZ25vcmUgc3BhY2Ugd2hlbgorCWV2YWx1YXRpbmcgdGhlIHN0cmluZyBiZWZvcmUgJSh0aGVuKSwgdGhpcyBpcyB1c2VmdWwgd2hlbiB3ZQorCXVzZSB0aGUgJShIRUFEKSBhdG9tIHdoaWNoIHByaW50cyBlaXRoZXIgIioiIG9yICIgIiBhbmQgd2UKKwl3YW50IHRvIGFwcGx5IHRoZSAnaWYnIGNvbmRpdGlvbiBvbmx5IG9uIHRoZSAnSEVBRCcgcmVmLgorCUFwcGVuZCAiOmVxdWFscz08c3RyaW5nPiIgb3IgIjpub3RlcXVhbHM9PHN0cmluZz4iIHRvIGNvbXBhcmUKKwl0aGUgdmFsdWUgYmV0d2VlbiB0aGUgJShpZjouLi4pIGFuZCAlKHRoZW4pIGF0b21zIHdpdGggdGhlCisJZ2l2ZW4gc3RyaW5nLgorCitzeW1yZWY6OgorCVRoZSByZWYgd2hpY2ggdGhlIGdpdmVuIHN5bWJvbGljIHJlZiByZWZlcnMgdG8uIElmIG5vdCBhCisJc3ltYm9saWMgcmVmLCBub3RoaW5nIGlzIHByaW50ZWQuIFJlc3BlY3RzIHRoZSBgOnNob3J0YCwKKwlgOmxzdHJpcGAgYW5kIGA6cnN0cmlwYCBvcHRpb25zIGluIHRoZSBzYW1lIHdheSBhcyBgcmVmbmFtZWAKKwlhYm92ZS4KKword29ya3RyZWVwYXRoOjoKKwlUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya3RyZWUgaW4gd2hpY2ggdGhlIHJlZiBpcyBjaGVja2VkCisJb3V0LCBpZiBpdCBpcyBjaGVja2VkIG91dCBpbiBhbnkgbGlua2VkIHdvcmt0cmVlLiBFbXB0eSBzdHJpbmcKKwlvdGhlcndpc2UuCisKK0luIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSwgZm9yIGNvbW1pdCBhbmQgdGFnIG9iamVjdHMsIHRoZSBoZWFkZXIKK2ZpZWxkIG5hbWVzIChgdHJlZWAsIGBwYXJlbnRgLCBgb2JqZWN0YCwgYHR5cGVgLCBhbmQgYHRhZ2ApIGNhbgorYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZSBpbiB0aGUgaGVhZGVyIGZpZWxkLgorCitGb3IgY29tbWl0IGFuZCB0YWcgb2JqZWN0cywgdGhlIHNwZWNpYWwgYGNyZWF0b3JkYXRlYCBhbmQgYGNyZWF0b3JgCitmaWVsZHMgd2lsbCBjb3JyZXNwb25kIHRvIHRoZSBhcHByb3ByaWF0ZSBkYXRlIG9yIG5hbWUtZW1haWwtZGF0ZSB0dXBsZQorZnJvbSB0aGUgYGNvbW1pdHRlcmAgb3IgYHRhZ2dlcmAgZmllbGRzIGRlcGVuZGluZyBvbiB0aGUgb2JqZWN0IHR5cGUuCitUaGVzZSBhcmUgaW50ZW5kZWQgZm9yIHdvcmtpbmcgb24gYSBtaXggb2YgYW5ub3RhdGVkIGFuZCBsaWdodHdlaWdodCB0YWdzLgorCitGaWVsZHMgdGhhdCBoYXZlIG5hbWUtZW1haWwtZGF0ZSB0dXBsZSBhcyBpdHMgdmFsdWUgKGBhdXRob3JgLAorYGNvbW1pdHRlcmAsIGFuZCBgdGFnZ2VyYCkgY2FuIGJlIHN1ZmZpeGVkIHdpdGggYG5hbWVgLCBgZW1haWxgLAorYW5kIGBkYXRlYCB0byBleHRyYWN0IHRoZSBuYW1lZCBjb21wb25lbnQuCisKK1RoZSBjb21wbGV0ZSBtZXNzYWdlIGluIGEgY29tbWl0IGFuZCB0YWcgb2JqZWN0IGlzIGBjb250ZW50c2AuCitJdHMgZmlyc3QgbGluZSBpcyBgY29udGVudHM6c3ViamVjdGAsIHdoZXJlIHN1YmplY3QgaXMgdGhlIGNvbmNhdGVuYXRpb24KK29mIGFsbCBsaW5lcyBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgdXAgdG8gdGhlIGZpcnN0IGJsYW5rIGxpbmUuICBUaGUgbmV4dAorbGluZSBpcyBgY29udGVudHM6Ym9keWAsIHdoZXJlIGJvZHkgaXMgYWxsIG9mIHRoZSBsaW5lcyBhZnRlciB0aGUgZmlyc3QKK2JsYW5rIGxpbmUuICBUaGUgb3B0aW9uYWwgR1BHIHNpZ25hdHVyZSBpcyBgY29udGVudHM6c2lnbmF0dXJlYC4gIFRoZQorZmlyc3QgYE5gIGxpbmVzIG9mIHRoZSBtZXNzYWdlIGlzIG9idGFpbmVkIHVzaW5nIGBjb250ZW50czpsaW5lcz1OYC4KK0FkZGl0aW9uYWxseSwgdGhlIHRyYWlsZXJzIGFzIGludGVycHJldGVkIGJ5IGxpbmtnaXQ6Z2l0LWludGVycHJldC10cmFpbGVyc1sxXQorYXJlIG9idGFpbmVkIGFzIGB0cmFpbGVyc2AgKG9yIGJ5IHVzaW5nIHRoZSBoaXN0b3JpY2FsIGFsaWFzCitgY29udGVudHM6dHJhaWxlcnNgKS4gIE5vbi10cmFpbGVyIGxpbmVzIGZyb20gdGhlIHRyYWlsZXIgYmxvY2sgY2FuIGJlIG9taXR0ZWQKK3dpdGggYHRyYWlsZXJzOm9ubHlgLiBXaGl0ZXNwYWNlLWNvbnRpbnVhdGlvbnMgY2FuIGJlIHJlbW92ZWQgZnJvbSB0cmFpbGVycyBzbwordGhhdCBlYWNoIHRyYWlsZXIgYXBwZWFycyBvbiBhIGxpbmUgYnkgaXRzZWxmIHdpdGggaXRzIGZ1bGwgY29udGVudCB3aXRoCitgdHJhaWxlcnM6dW5mb2xkYC4gQm90aCBjYW4gYmUgdXNlZCB0b2dldGhlciBhcyBgdHJhaWxlcnM6dW5mb2xkLG9ubHlgLgorCitGb3Igc29ydGluZyBwdXJwb3NlcywgZmllbGRzIHdpdGggbnVtZXJpYyB2YWx1ZXMgc29ydCBpbiBudW1lcmljIG9yZGVyCisoYG9iamVjdHNpemVgLCBgYXV0aG9yZGF0ZWAsIGBjb21taXR0ZXJkYXRlYCwgYGNyZWF0b3JkYXRlYCwgYHRhZ2dlcmRhdGVgKS4KK0FsbCBvdGhlciBmaWVsZHMgYXJlIHVzZWQgdG8gc29ydCBpbiB0aGVpciBieXRlLXZhbHVlIG9yZGVyLgorCitUaGVyZSBpcyBhbHNvIGFuIG9wdGlvbiB0byBzb3J0IGJ5IHZlcnNpb25zLCB0aGlzIGNhbiBiZSBkb25lIGJ5IHVzaW5nCit0aGUgZmllbGRuYW1lIGB2ZXJzaW9uOnJlZm5hbWVgIG9yIGl0cyBhbGlhcyBgdjpyZWZuYW1lYC4KKworSW4gYW55IGNhc2UsIGEgZmllbGQgbmFtZSB0aGF0IHJlZmVycyB0byBhIGZpZWxkIGluYXBwbGljYWJsZSB0bwordGhlIG9iamVjdCByZWZlcnJlZCBieSB0aGUgcmVmIGRvZXMgbm90IGNhdXNlIGFuIGVycm9yLiAgSXQKK3JldHVybnMgYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQuCisKK0FzIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgZGF0ZS10eXBlIGZpZWxkcywgeW91IG1heSBzcGVjaWZ5IGEgZm9ybWF0IGZvcgordGhlIGRhdGUgYnkgYWRkaW5nIGA6YCBmb2xsb3dlZCBieSBkYXRlIGZvcm1hdCBuYW1lIChzZWUgdGhlCit2YWx1ZXMgdGhlIGAtLWRhdGVgIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSB0YWtlcykuCisKK1NvbWUgYXRvbXMgbGlrZSAlKGFsaWduKSBhbmQgJShpZikgYWx3YXlzIHJlcXVpcmUgYSBtYXRjaGluZyAlKGVuZCkuCitXZSBjYWxsIHRoZW0gIm9wZW5pbmcgYXRvbXMiIGFuZCBzb21ldGltZXMgZGVub3RlIHRoZW0gYXMgJSgkb3BlbikuCisKK1doZW4gYSBzY3JpcHRpbmcgbGFuZ3VhZ2Ugc3BlY2lmaWMgcXVvdGluZyBpcyBpbiBlZmZlY3QsIGV2ZXJ5dGhpbmcKK2JldHdlZW4gYSB0b3AtbGV2ZWwgb3BlbmluZyBhdG9tIGFuZCBpdHMgbWF0Y2hpbmcgJShlbmQpIGlzIGV2YWx1YXRlZAorYWNjb3JkaW5nIHRvIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIG9wZW5pbmcgYXRvbSBhbmQgb25seSBpdHMgcmVzdWx0Citmcm9tIHRoZSB0b3AtbGV2ZWwgaXMgcXVvdGVkLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitBbiBleGFtcGxlIGRpcmVjdGx5IHByb2R1Y2luZyBmb3JtYXR0ZWQgdGV4dC4gIFNob3cgdGhlIG1vc3QgcmVjZW50CiszIHRhZ2dlZCBjb21taXRzOgorCistLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorCitnaXQgZm9yLWVhY2gtcmVmIC0tY291bnQ9MyAtLXNvcnQ9Jy0qYXV0aG9yZGF0ZScgXAorLS1mb3JtYXQ9J0Zyb206ICUoKmF1dGhvcm5hbWUpICUoKmF1dGhvcmVtYWlsKQorU3ViamVjdDogJSgqc3ViamVjdCkKK0RhdGU6ICUoKmF1dGhvcmRhdGUpCitSZWY6ICUoKnJlZm5hbWUpCisKKyUoKmJvZHkpCisnICdyZWZzL3RhZ3MnCistLS0tLS0tLS0tLS0KKworCitBIHNpbXBsZSBleGFtcGxlIHNob3dpbmcgdGhlIHVzZSBvZiBzaGVsbCBldmFsIG9uIHRoZSBvdXRwdXQsCitkZW1vbnN0cmF0aW5nIHRoZSB1c2Ugb2YgLS1zaGVsbC4gIExpc3QgdGhlIHByZWZpeGVzIG9mIGFsbCBoZWFkczoKKy0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisKK2dpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0icmVmPSUocmVmbmFtZSkiIHJlZnMvaGVhZHMgfCBcCit3aGlsZSByZWFkIGVudHJ5CitkbworCWV2YWwgIiRlbnRyeSIKKwllY2hvIGBkaXJuYW1lICRyZWZgCitkb25lCistLS0tLS0tLS0tLS0KKworCitBIGJpdCBtb3JlIGVsYWJvcmF0ZSByZXBvcnQgb24gdGFncywgZGVtb25zdHJhdGluZyB0aGF0IHRoZSBmb3JtYXQKK21heSBiZSBhbiBlbnRpcmUgc2NyaXB0OgorLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKKworZm10PScKKwlyPSUocmVmbmFtZSkKKwl0PSUoKm9iamVjdHR5cGUpCisJVD0ke3IjcmVmcy90YWdzL30KKworCW89JSgqb2JqZWN0bmFtZSkKKwluPSUoKmF1dGhvcm5hbWUpCisJZT0lKCphdXRob3JlbWFpbCkKKwlzPSUoKnN1YmplY3QpCisJZD0lKCphdXRob3JkYXRlKQorCWI9JSgqYm9keSkKKworCWtpbmQ9VGFnCisJaWYgdGVzdCAieiR0IiA9IHoKKwl0aGVuCisJCSMgY291bGQgYmUgYSBsaWdodHdlaWdodCB0YWcKKwkJdD0lKG9iamVjdHR5cGUpCisJCWtpbmQ9IkxpZ2h0d2VpZ2h0IHRhZyIKKwkJbz0lKG9iamVjdG5hbWUpCisJCW49JShhdXRob3JuYW1lKQorCQllPSUoYXV0aG9yZW1haWwpCisJCXM9JShzdWJqZWN0KQorCQlkPSUoYXV0aG9yZGF0ZSkKKwkJYj0lKGJvZHkpCisJZmkKKwllY2hvICIka2luZCAkVCBwb2ludHMgYXQgYSAkdCBvYmplY3QgJG8iCisJaWYgdGVzdCAieiR0IiA9IHpjb21taXQKKwl0aGVuCisJCWVjaG8gIlRoZSBjb21taXQgd2FzIGF1dGhvcmVkIGJ5ICRuICRlCithdCAkZCwgYW5kIHRpdGxlZAorCisgICAgJHMKKworSXRzIG1lc3NhZ2UgcmVhZHMgYXM6CisiCisJCWVjaG8gIiRiIiB8IHNlZCAtZSAicy9eLyAgICAvIgorCQllY2hvCisJZmkKKycKKworZXZhbD1gZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIkZm10IiBcCisJLS1zb3J0PScqb2JqZWN0dHlwZScgXAorCS0tc29ydD0tdGFnZ2VyZGF0ZSBcCisJcmVmcy90YWdzYAorZXZhbCAiJGV2YWwiCistLS0tLS0tLS0tLS0KKworCitBbiBleGFtcGxlIHRvIHNob3cgdGhlIHVzYWdlIG9mICUoaWYpLi4uJSh0aGVuKS4uLiUoZWxzZSkuLi4lKGVuZCkuCitUaGlzIHByZWZpeGVzIHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIGEgc3Rhci4KKworLS0tLS0tLS0tLS0tCitnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGlmKSUoSEVBRCklKHRoZW4pKiAlKGVsc2UpICAlKGVuZCklKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzLworLS0tLS0tLS0tLS0tCisKKworQW4gZXhhbXBsZSB0byBzaG93IHRoZSB1c2FnZSBvZiAlKGlmKS4uLiUodGhlbikuLi4lKGVuZCkuCitUaGlzIHByaW50cyB0aGUgYXV0aG9ybmFtZSwgaWYgcHJlc2VudC4KKworLS0tLS0tLS0tLS0tCitnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpJShpZiklKGF1dGhvcm5hbWUpJSh0aGVuKSBBdXRob3JlZCBieTogJShhdXRob3JuYW1lKSUoZW5kKSIKKy0tLS0tLS0tLS0tLQorCitDQVZFQVRTCistLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgc2l6ZXMgb2Ygb2JqZWN0cyBvbiBkaXNrIGFyZSByZXBvcnRlZCBhY2N1cmF0ZWx5LCBidXQgY2FyZQorc2hvdWxkIGJlIHRha2VuIGluIGRyYXdpbmcgY29uY2x1c2lvbnMgYWJvdXQgd2hpY2ggcmVmcyBvciBvYmplY3RzIGFyZQorcmVzcG9uc2libGUgZm9yIGRpc2sgdXNhZ2UuIFRoZSBzaXplIG9mIGEgcGFja2VkIG5vbi1kZWx0YSBvYmplY3QgbWF5IGJlCittdWNoIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG9iamVjdHMgd2hpY2ggZGVsdGEgYWdhaW5zdCBpdCwgYnV0IHRoZQorY2hvaWNlIG9mIHdoaWNoIG9iamVjdCBpcyB0aGUgYmFzZSBhbmQgd2hpY2ggaXMgdGhlIGRlbHRhIGlzIGFyYml0cmFyeQorYW5kIGlzIHN1YmplY3QgdG8gY2hhbmdlIGR1cmluZyBhIHJlcGFjay4KKworTm90ZSBhbHNvIHRoYXQgbXVsdGlwbGUgY29waWVzIG9mIGFuIG9iamVjdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgb2JqZWN0CitkYXRhYmFzZTsgaW4gdGhpcyBjYXNlLCBpdCBpcyB1bmRlZmluZWQgd2hpY2ggY29weSdzIHNpemUgb3IgZGVsdGEgYmFzZQord2lsbCBiZSByZXBvcnRlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1zaG93LXJlZlsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGY4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CkBAIC0wLDAgKzEsNzExIEBACitnaXQtZm9ybWF0LXBhdGNoKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mb3JtYXQtcGF0Y2ggLSBQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZvcm1hdC1wYXRjaCcgWy1rXSBbKC1vfC0tb3V0cHV0LWRpcmVjdG9yeSkgPGRpcj4gfCAtLXN0ZG91dF0KKwkJICAgWy0tbm8tdGhyZWFkIHwgLS10aHJlYWRbPTxzdHlsZT5dXQorCQkgICBbKC0tYXR0YWNofC0taW5saW5lKVs9PGJvdW5kYXJ5Pl0gfCAtLW5vLWF0dGFjaF0KKwkJICAgWy1zIHwgLS1zaWdub2ZmXQorCQkgICBbLS1zaWduYXR1cmU9PHNpZ25hdHVyZT4gfCAtLW5vLXNpZ25hdHVyZV0KKwkJICAgWy0tc2lnbmF0dXJlLWZpbGU9PGZpbGU+XQorCQkgICBbLW4gfCAtLW51bWJlcmVkIHwgLU4gfCAtLW5vLW51bWJlcmVkXQorCQkgICBbLS1zdGFydC1udW1iZXIgPG4+XSBbLS1udW1iZXJlZC1maWxlc10KKwkJICAgWy0taW4tcmVwbHktdG89PG1lc3NhZ2UgaWQ+XSBbLS1zdWZmaXg9LjxzZng+XQorCQkgICBbLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW1dCisJCSAgIFstLWNvdmVyLWZyb20tZGVzY3JpcHRpb249PG1vZGU+XQorCQkgICBbLS1yZmNdIFstLXN1YmplY3QtcHJlZml4PTxzdWJqZWN0IHByZWZpeD5dCisJCSAgIFsoLS1yZXJvbGwtY291bnR8LXYpIDxuPl0KKwkJICAgWy0tdG89PGVtYWlsPl0gWy0tY2M9PGVtYWlsPl0KKwkJICAgWy0tW25vLV1jb3Zlci1sZXR0ZXJdIFstLXF1aWV0XQorCQkgICBbLS1uby1ub3RlcyB8IC0tbm90ZXNbPTxyZWY+XV0KKwkJICAgWy0taW50ZXJkaWZmPTxwcmV2aW91cz5dCisJCSAgIFstLXJhbmdlLWRpZmY9PHByZXZpb3VzPiBbLS1jcmVhdGlvbi1mYWN0b3I9PHBlcmNlbnQ+XV0KKwkJICAgWy0tcHJvZ3Jlc3NdCisJCSAgIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dCisJCSAgIFsgPHNpbmNlPiB8IDxyZXZpc2lvbiByYW5nZT4gXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworUHJlcGFyZSBlYWNoIGNvbW1pdCB3aXRoIGl0cyBwYXRjaCBpbgorb25lIGZpbGUgcGVyIGNvbW1pdCwgZm9ybWF0dGVkIHRvIHJlc2VtYmxlIFVOSVggbWFpbGJveCBmb3JtYXQuCitUaGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZCBpcyBjb252ZW5pZW50IGZvciBlLW1haWwgc3VibWlzc2lvbiBvcgorZm9yIHVzZSB3aXRoICdnaXQgYW0nLgorCitUaGVyZSBhcmUgdHdvIHdheXMgdG8gc3BlY2lmeSB3aGljaCBjb21taXRzIHRvIG9wZXJhdGUgb24uCisKKzEuIEEgc2luZ2xlIGNvbW1pdCwgPHNpbmNlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGNvbW1pdHMgbGVhZGluZworICAgdG8gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggdGhhdCBhcmUgbm90IGluIHRoZSBoaXN0b3J5CisgICB0aGF0IGxlYWRzIHRvIHRoZSA8c2luY2U+IHRvIGJlIG91dHB1dC4KKworMi4gR2VuZXJpYyA8cmV2aXNpb24gcmFuZ2U+IGV4cHJlc3Npb24gKHNlZSAiU1BFQ0lGWUlORworICAgUkVWSVNJT05TIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddKSBtZWFucyB0aGUKKyAgIGNvbW1pdHMgaW4gdGhlIHNwZWNpZmllZCByYW5nZS4KKworVGhlIGZpcnN0IHJ1bGUgdGFrZXMgcHJlY2VkZW5jZSBpbiB0aGUgY2FzZSBvZiBhIHNpbmdsZSA8Y29tbWl0Pi4gIFRvCithcHBseSB0aGUgc2Vjb25kIHJ1bGUsIGkuZS4sIGZvcm1hdCBldmVyeXRoaW5nIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YKK2hpc3RvcnkgdXAgdW50aWwgPGNvbW1pdD4sIHVzZSB0aGUgYC0tcm9vdGAgb3B0aW9uOiBgZ2l0IGZvcm1hdC1wYXRjaAorLS1yb290IDxjb21taXQ+YC4gIElmIHlvdSB3YW50IHRvIGZvcm1hdCBvbmx5IDxjb21taXQ+IGl0c2VsZiwgeW91CitjYW4gZG8gdGhpcyB3aXRoIGBnaXQgZm9ybWF0LXBhdGNoIC0xIDxjb21taXQ+YC4KKworQnkgZGVmYXVsdCwgZWFjaCBvdXRwdXQgZmlsZSBpcyBudW1iZXJlZCBzZXF1ZW50aWFsbHkgZnJvbSAxLCBhbmQgdXNlcyB0aGUKK2ZpcnN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIChtYXNzYWdlZCBmb3IgcGF0aG5hbWUgc2FmZXR5KSBhcwordGhlIGZpbGVuYW1lLiBXaXRoIHRoZSBgLS1udW1iZXJlZC1maWxlc2Agb3B0aW9uLCB0aGUgb3V0cHV0IGZpbGUgbmFtZXMKK3dpbGwgb25seSBiZSBudW1iZXJzLCB3aXRob3V0IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgYXBwZW5kZWQuCitUaGUgbmFtZXMgb2YgdGhlIG91dHB1dCBmaWxlcyBhcmUgcHJpbnRlZCB0byBzdGFuZGFyZAorb3V0cHV0LCB1bmxlc3MgdGhlIGAtLXN0ZG91dGAgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworSWYgYC1vYCBpcyBzcGVjaWZpZWQsIG91dHB1dCBmaWxlcyBhcmUgY3JlYXRlZCBpbiA8ZGlyPi4gIE90aGVyd2lzZQordGhleSBhcmUgY3JlYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhlIGRlZmF1bHQgcGF0aAorY2FuIGJlIHNldCB3aXRoIHRoZSBgZm9ybWF0Lm91dHB1dERpcmVjdG9yeWAgY29uZmlndXJhdGlvbiBvcHRpb24uCitUaGUgYC1vYCBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBmb3JtYXQub3V0cHV0RGlyZWN0b3J5YC4KK1RvIHN0b3JlIHBhdGNoZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZXZlbiB3aGVuCitgZm9ybWF0Lm91dHB1dERpcmVjdG9yeWAgcG9pbnRzIGVsc2V3aGVyZSwgdXNlIGAtbyAuYC4gQWxsIGRpcmVjdG9yeQorY29tcG9uZW50cyB3aWxsIGJlIGNyZWF0ZWQuCisKK0J5IGRlZmF1bHQsIHRoZSBzdWJqZWN0IG9mIGEgc2luZ2xlIHBhdGNoIGlzICJbUEFUQ0hdICIgZm9sbG93ZWQgYnkKK3RoZSBjb25jYXRlbmF0aW9uIG9mIGxpbmVzIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlIHVwIHRvIHRoZSBmaXJzdCBibGFuaworbGluZSAoc2VlIHRoZSBESVNDVVNTSU9OIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtY29tbWl0WzFdKS4KKworV2hlbiBtdWx0aXBsZSBwYXRjaGVzIGFyZSBvdXRwdXQsIHRoZSBzdWJqZWN0IHByZWZpeCB3aWxsIGluc3RlYWQgYmUKKyJbUEFUQ0ggbi9tXSAiLiAgVG8gZm9yY2UgMS8xIHRvIGJlIGFkZGVkIGZvciBhIHNpbmdsZSBwYXRjaCwgdXNlIGAtbmAuCitUbyBvbWl0IHBhdGNoIG51bWJlcnMgZnJvbSB0aGUgc3ViamVjdCwgdXNlIGAtTmAuCisKK0lmIGdpdmVuIGAtLXRocmVhZGAsIGBnaXQtZm9ybWF0LXBhdGNoYCB3aWxsIGdlbmVyYXRlIGBJbi1SZXBseS1Ub2AgYW5kCitgUmVmZXJlbmNlc2AgaGVhZGVycyB0byBtYWtlIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgcGF0Y2ggbWFpbHMgYXBwZWFyCithcyByZXBsaWVzIHRvIHRoZSBmaXJzdCBtYWlsOyB0aGlzIGFsc28gZ2VuZXJhdGVzIGEgYE1lc3NhZ2UtSWRgIGhlYWRlciB0bworcmVmZXJlbmNlLgorCitPUFRJT05TCistLS0tLS0tCis6Z2l0LWZvcm1hdC1wYXRjaDogMQoraW5jbHVkZTo6ZGlmZi1vcHRpb25zLnR4dFtdCisKKy08bj46OgorCVByZXBhcmUgcGF0Y2hlcyBmcm9tIHRoZSB0b3Btb3N0IDxuPiBjb21taXRzLgorCistbyA8ZGlyPjo6CistLW91dHB1dC1kaXJlY3RvcnkgPGRpcj46OgorCVVzZSA8ZGlyPiB0byBzdG9yZSB0aGUgcmVzdWx0aW5nIGZpbGVzLCBpbnN0ZWFkIG9mIHRoZQorCWN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKy1uOjoKKy0tbnVtYmVyZWQ6OgorCU5hbWUgb3V0cHV0IGluICdbUEFUQ0ggbi9tXScgZm9ybWF0LCBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2guCisKKy1OOjoKKy0tbm8tbnVtYmVyZWQ6OgorCU5hbWUgb3V0cHV0IGluICdbUEFUQ0hdJyBmb3JtYXQuCisKKy0tc3RhcnQtbnVtYmVyIDxuPjo6CisJU3RhcnQgbnVtYmVyaW5nIHRoZSBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEuCisKKy0tbnVtYmVyZWQtZmlsZXM6OgorCU91dHB1dCBmaWxlIG5hbWVzIHdpbGwgYmUgYSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlCisJd2l0aG91dCB0aGUgZGVmYXVsdCBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgYXBwZW5kZWQuCisKKy1rOjoKKy0ta2VlcC1zdWJqZWN0OjoKKwlEbyBub3Qgc3RyaXAvYWRkICdbUEFUQ0hdJyBmcm9tIHRoZSBmaXJzdCBsaW5lIG9mIHRoZQorCWNvbW1pdCBsb2cgbWVzc2FnZS4KKworLXM6OgorLS1zaWdub2ZmOjoKKwlBZGQgYFNpZ25lZC1vZmYtYnk6YCBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSwgdXNpbmcKKwl0aGUgY29tbWl0dGVyIGlkZW50aXR5IG9mIHlvdXJzZWxmLgorCVNlZSB0aGUgc2lnbm9mZiBvcHRpb24gaW4gbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistLXN0ZG91dDo6CisJUHJpbnQgYWxsIGNvbW1pdHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBpbiBtYm94IGZvcm1hdCwKKwlpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgZmlsZSBmb3IgZWFjaCBvbmUuCisKKy0tYXR0YWNoWz08Ym91bmRhcnk+XTo6CisJQ3JlYXRlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50LCB0aGUgZmlyc3QgcGFydCBvZgorCXdoaWNoIGlzIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgdGhlIHBhdGNoIGl0c2VsZiBpbiB0aGUKKwlzZWNvbmQgcGFydCwgd2l0aCBgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGAuCisKKy0tbm8tYXR0YWNoOjoKKwlEaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiBhbiBhdHRhY2htZW50LCBvdmVycmlkaW5nIHRoZQorCWNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKworLS1pbmxpbmVbPTxib3VuZGFyeT5dOjoKKwlDcmVhdGUgbXVsdGlwYXJ0L21peGVkIGF0dGFjaG1lbnQsIHRoZSBmaXJzdCBwYXJ0IG9mCisJd2hpY2ggaXMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGUgcGF0Y2ggaXRzZWxmIGluIHRoZQorCXNlY29uZCBwYXJ0LCB3aXRoIGBDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmVgLgorCistLXRocmVhZFs9PHN0eWxlPl06OgorLS1uby10aHJlYWQ6OgorCUNvbnRyb2xzIGFkZGl0aW9uIG9mIGBJbi1SZXBseS1Ub2AgYW5kIGBSZWZlcmVuY2VzYCBoZWFkZXJzIHRvCisJbWFrZSB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IG1haWxzIGFwcGVhciBhcyByZXBsaWVzIHRvIHRoZQorCWZpcnN0LiAgQWxzbyBjb250cm9scyBnZW5lcmF0aW9uIG9mIHRoZSBgTWVzc2FnZS1JZGAgaGVhZGVyIHRvCisJcmVmZXJlbmNlLgorKworVGhlIG9wdGlvbmFsIDxzdHlsZT4gYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgc2hhbGxvd2Agb3IgYGRlZXBgLgorJ3NoYWxsb3cnIHRocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIGhlYWQgb2YgdGhlCitzZXJpZXMsIHdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQorYC0taW4tcmVwbHktdG9gLCBhbmQgdGhlIGZpcnN0IHBhdGNoIG1haWwsIGluIHRoaXMgb3JkZXIuICAnZGVlcCcKK3RocmVhZGluZyBtYWtlcyBldmVyeSBtYWlsIGEgcmVwbHkgdG8gdGhlIHByZXZpb3VzIG9uZS4KKysKK1RoZSBkZWZhdWx0IGlzIGAtLW5vLXRocmVhZGAsIHVubGVzcyB0aGUgYGZvcm1hdC50aHJlYWRgIGNvbmZpZ3VyYXRpb24KK2lzIHNldC4gIElmIGAtLXRocmVhZGAgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYSBzdHlsZSwgaXQgZGVmYXVsdHMgdG8gdGhlCitzdHlsZSBzcGVjaWZpZWQgYnkgYGZvcm1hdC50aHJlYWRgIGlmIGFueSwgb3IgZWxzZSBgc2hhbGxvd2AuCisrCitCZXdhcmUgdGhhdCB0aGUgZGVmYXVsdCBmb3IgJ2dpdCBzZW5kLWVtYWlsJyBpcyB0byB0aHJlYWQgZW1haWxzCitpdHNlbGYuICBJZiB5b3Ugd2FudCBgZ2l0IGZvcm1hdC1wYXRjaGAgdG8gdGFrZSBjYXJlIG9mIHRocmVhZGluZywgeW91Cit3aWxsIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhyZWFkaW5nIGlzIGRpc2FibGVkIGZvciBgZ2l0IHNlbmQtZW1haWxgLgorCistLWluLXJlcGx5LXRvPTxtZXNzYWdlIGlkPjo6CisJTWFrZSB0aGUgZmlyc3QgbWFpbCAob3IgYWxsIHRoZSBtYWlscyB3aXRoIGAtLW5vLXRocmVhZGApIGFwcGVhciBhcyBhCisJcmVwbHkgdG8gdGhlIGdpdmVuIDxtZXNzYWdlIGlkPiwgd2hpY2ggYXZvaWRzIGJyZWFraW5nIHRocmVhZHMgdG8KKwlwcm92aWRlIGEgbmV3IHBhdGNoIHNlcmllcy4KKworLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW06OgorCURvIG5vdCBpbmNsdWRlIGEgcGF0Y2ggdGhhdCBtYXRjaGVzIGEgY29tbWl0IGluCisJPHVudGlsPi4uPHNpbmNlPi4gIFRoaXMgd2lsbCBleGFtaW5lIGFsbCBwYXRjaGVzIHJlYWNoYWJsZQorCWZyb20gPHNpbmNlPiBidXQgbm90IGZyb20gPHVudGlsPiBhbmQgY29tcGFyZSB0aGVtIHdpdGggdGhlCisJcGF0Y2hlcyBiZWluZyBnZW5lcmF0ZWQsIGFuZCBhbnkgcGF0Y2ggdGhhdCBtYXRjaGVzIGlzCisJaWdub3JlZC4KKworLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uPTxtb2RlPjo6CisJQ29udHJvbHMgd2hpY2ggcGFydHMgb2YgdGhlIGNvdmVyIGxldHRlciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKwlwb3B1bGF0ZWQgdXNpbmcgdGhlIGJyYW5jaCdzIGRlc2NyaXB0aW9uLgorKworSWYgYDxtb2RlPmAgaXMgYG1lc3NhZ2VgIG9yIGBkZWZhdWx0YCwgdGhlIGNvdmVyIGxldHRlciBzdWJqZWN0IHdpbGwgYmUKK3BvcHVsYXRlZCB3aXRoIHBsYWNlaG9sZGVyIHRleHQuIFRoZSBib2R5IG9mIHRoZSBjb3ZlciBsZXR0ZXIgd2lsbCBiZQorcG9wdWxhdGVkIHdpdGggdGhlIGJyYW5jaCdzIGRlc2NyaXB0aW9uLiBUaGlzIGlzIHRoZSBkZWZhdWx0IG1vZGUgd2hlbgorbm8gY29uZmlndXJhdGlvbiBub3IgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisrCitJZiBgPG1vZGU+YCBpcyBgc3ViamVjdGAsIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiB3aWxsCitwb3B1bGF0ZSB0aGUgY292ZXIgbGV0dGVyIHN1YmplY3QuIFRoZSByZW1haW5kZXIgb2YgdGhlIGRlc2NyaXB0aW9uIHdpbGwKK3BvcHVsYXRlIHRoZSBib2R5IG9mIHRoZSBjb3ZlciBsZXR0ZXIuCisrCitJZiBgPG1vZGU+YCBpcyBgYXV0b2AsIGlmIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbgoraXMgZ3JlYXRlciB0aGFuIDEwMCBieXRlcywgdGhlbiB0aGUgbW9kZSB3aWxsIGJlIGBtZXNzYWdlYCwgb3RoZXJ3aXNlCitgc3ViamVjdGAgd2lsbCBiZSB1c2VkLgorKworSWYgYDxtb2RlPmAgaXMgYG5vbmVgLCBib3RoIHRoZSBjb3ZlciBsZXR0ZXIgc3ViamVjdCBhbmQgYm9keSB3aWxsIGJlCitwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlciB0ZXh0LgorCistLXN1YmplY3QtcHJlZml4PTxzdWJqZWN0IHByZWZpeD46OgorCUluc3RlYWQgb2YgdGhlIHN0YW5kYXJkICdbUEFUQ0hdJyBwcmVmaXggaW4gdGhlIHN1YmplY3QKKwlsaW5lLCBpbnN0ZWFkIHVzZSAnWzxzdWJqZWN0IHByZWZpeD5dJy4gVGhpcworCWFsbG93cyBmb3IgdXNlZnVsIG5hbWluZyBvZiBhIHBhdGNoIHNlcmllcywgYW5kIGNhbiBiZQorCWNvbWJpbmVkIHdpdGggdGhlIGAtLW51bWJlcmVkYCBvcHRpb24uCisKKy0tcmZjOjoKKwlBbGlhcyBmb3IgYC0tc3ViamVjdC1wcmVmaXg9IlJGQyBQQVRDSCJgLiBSRkMgbWVhbnMgIlJlcXVlc3QgRm9yCisJQ29tbWVudHMiOyB1c2UgdGhpcyB3aGVuIHNlbmRpbmcgYW4gZXhwZXJpbWVudGFsIHBhdGNoIGZvcgorCWRpc2N1c3Npb24gcmF0aGVyIHRoYW4gYXBwbGljYXRpb24uCisKKy12IDxuPjo6CistLXJlcm9sbC1jb3VudD08bj46OgorCU1hcmsgdGhlIHNlcmllcyBhcyB0aGUgPG4+LXRoIGl0ZXJhdGlvbiBvZiB0aGUgdG9waWMuIFRoZQorCW91dHB1dCBmaWxlbmFtZXMgaGF2ZSBgdjxuPmAgcHJlcGVuZGVkIHRvIHRoZW0sIGFuZCB0aGUKKwlzdWJqZWN0IHByZWZpeCAoIlBBVENIIiBieSBkZWZhdWx0LCBidXQgY29uZmlndXJhYmxlIHZpYSB0aGUKKwlgLS1zdWJqZWN0LXByZWZpeGAgb3B0aW9uKSBoYXMgYCB2PG4+YCBhcHBlbmRlZCB0byBpdC4gIEUuZy4KKwlgLS1yZXJvbGwtY291bnQ9NGAgbWF5IHByb2R1Y2UgYHY0LTAwMDEtYWRkLW1ha2VmaWxlLnBhdGNoYAorCWZpbGUgdGhhdCBoYXMgIlN1YmplY3Q6IFtQQVRDSCB2NCAxLzIwXSBBZGQgbWFrZWZpbGUiIGluIGl0LgorCistLXRvPTxlbWFpbD46OgorCUFkZCBhIGBUbzpgIGhlYWRlciB0byB0aGUgZW1haWwgaGVhZGVycy4gVGhpcyBpcyBpbiBhZGRpdGlvbgorCXRvIGFueSBjb25maWd1cmVkIGhlYWRlcnMsIGFuZCBtYXkgYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KKwlUaGUgbmVnYXRlZCBmb3JtIGAtLW5vLXRvYCBkaXNjYXJkcyBhbGwgYFRvOmAgaGVhZGVycyBhZGRlZCBzbworCWZhciAoZnJvbSBjb25maWcgb3IgY29tbWFuZCBsaW5lKS4KKworLS1jYz08ZW1haWw+OjoKKwlBZGQgYSBgQ2M6YCBoZWFkZXIgdG8gdGhlIGVtYWlsIGhlYWRlcnMuIFRoaXMgaXMgaW4gYWRkaXRpb24KKwl0byBhbnkgY29uZmlndXJlZCBoZWFkZXJzLCBhbmQgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCisJVGhlIG5lZ2F0ZWQgZm9ybSBgLS1uby1jY2AgZGlzY2FyZHMgYWxsIGBDYzpgIGhlYWRlcnMgYWRkZWQgc28KKwlmYXIgKGZyb20gY29uZmlnIG9yIGNvbW1hbmQgbGluZSkuCisKKy0tZnJvbTo6CistLWZyb209PGlkZW50Pjo6CisJVXNlIGBpZGVudGAgaW4gdGhlIGBGcm9tOmAgaGVhZGVyIG9mIGVhY2ggY29tbWl0IGVtYWlsLiBJZiB0aGUKKwlhdXRob3IgaWRlbnQgb2YgdGhlIGNvbW1pdCBpcyBub3QgdGV4dHVhbGx5IGlkZW50aWNhbCB0byB0aGUKKwlwcm92aWRlZCBgaWRlbnRgLCBwbGFjZSBhIGBGcm9tOmAgaGVhZGVyIGluIHRoZSBib2R5IG9mIHRoZQorCW1lc3NhZ2Ugd2l0aCB0aGUgb3JpZ2luYWwgYXV0aG9yLiBJZiBubyBgaWRlbnRgIGlzIGdpdmVuLCB1c2UKKwl0aGUgY29tbWl0dGVyIGlkZW50LgorKworTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGlmIHlvdSBhcmUgYWN0dWFsbHkgc2VuZGluZyB0aGUKK2VtYWlscyBhbmQgd2FudCB0byBpZGVudGlmeSB5b3Vyc2VsZiBhcyB0aGUgc2VuZGVyLCBidXQgcmV0YWluIHRoZQorb3JpZ2luYWwgYXV0aG9yIChhbmQgYGdpdCBhbWAgd2lsbCBjb3JyZWN0bHkgcGljayB1cCB0aGUgaW4tYm9keQoraGVhZGVyKS4gTm90ZSBhbHNvIHRoYXQgYGdpdCBzZW5kLWVtYWlsYCBhbHJlYWR5IGhhbmRsZXMgdGhpcwordHJhbnNmb3JtYXRpb24gZm9yIHlvdSwgYW5kIHRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBpZiB5b3UgYXJlCitmZWVkaW5nIHRoZSByZXN1bHQgdG8gYGdpdCBzZW5kLWVtYWlsYC4KKworLS1hZGQtaGVhZGVyPTxoZWFkZXI+OjoKKwlBZGQgYW4gYXJiaXRyYXJ5IGhlYWRlciB0byB0aGUgZW1haWwgaGVhZGVycy4gIFRoaXMgaXMgaW4gYWRkaXRpb24KKwl0byBhbnkgY29uZmlndXJlZCBoZWFkZXJzLCBhbmQgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCisJRm9yIGV4YW1wbGUsIGAtLWFkZC1oZWFkZXI9Ik9yZ2FuaXphdGlvbjogZ2l0LWZvbyJgLgorCVRoZSBuZWdhdGVkIGZvcm0gYC0tbm8tYWRkLWhlYWRlcmAgZGlzY2FyZHMgKmFsbCogKGBUbzpgLAorCWBDYzpgLCBhbmQgY3VzdG9tKSBoZWFkZXJzIGFkZGVkIHNvIGZhciBmcm9tIGNvbmZpZyBvciBjb21tYW5kCisJbGluZS4KKworLS1bbm8tXWNvdmVyLWxldHRlcjo6CisJSW4gYWRkaXRpb24gdG8gdGhlIHBhdGNoZXMsIGdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIGZpbGUKKwljb250YWluaW5nIHRoZSBicmFuY2ggZGVzY3JpcHRpb24sIHNob3J0bG9nIGFuZCB0aGUgb3ZlcmFsbCBkaWZmc3RhdC4gIFlvdSBjYW4KKwlmaWxsIGluIGEgZGVzY3JpcHRpb24gaW4gdGhlIGZpbGUgYmVmb3JlIHNlbmRpbmcgaXQgb3V0LgorCistLWludGVyZGlmZj08cHJldmlvdXM+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+OjoKKwlQcnVuZSBsb29zZSBvYmplY3RzIG9sZGVyIHRoYW4gZGF0ZSAoZGVmYXVsdCBpcyAyIHdlZWtzIGFnbywKKwlvdmVycmlkYWJsZSBieSB0aGUgY29uZmlnIHZhcmlhYmxlIGBnYy5wcnVuZUV4cGlyZWApLgorCS0tcHJ1bmU9bm93IHBydW5lcyBsb29zZSBvYmplY3RzIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgYWdlIGFuZAorCWluY3JlYXNlcyB0aGUgcmlzayBvZiBjb3JydXB0aW9uIGlmIGFub3RoZXIgcHJvY2VzcyBpcyB3cml0aW5nIHRvCisJdGhlIHJlcG9zaXRvcnkgY29uY3VycmVudGx5OyBzZWUgIk5PVEVTIiBiZWxvdy4gLS1wcnVuZSBpcyBvbiBieQorCWRlZmF1bHQuCisKKy0tbm8tcHJ1bmU6OgorCURvIG5vdCBwcnVuZSBhbnkgbG9vc2Ugb2JqZWN0cy4KKworLS1xdWlldDo6CisJU3VwcHJlc3MgYWxsIHByb2dyZXNzIHJlcG9ydHMuCisKKy0tZm9yY2U6OgorCUZvcmNlIGBnaXQgZ2NgIHRvIHJ1biBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGBnaXQgZ2NgCisJaW5zdGFuY2UgcnVubmluZyBvbiB0aGlzIHJlcG9zaXRvcnkuCisKKy0ta2VlcC1sYXJnZXN0LXBhY2s6OgorCUFsbCBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayBhbmQgdGhvc2UgbWFya2VkIHdpdGggYQorCWAua2VlcGAgZmlsZXMgYXJlIGNvbnNvbGlkYXRlZCBpbnRvIGEgc2luZ2xlIHBhY2suIFdoZW4gdGhpcworCW9wdGlvbiBpcyB1c2VkLCBgZ2MuYmlnUGFja1RocmVzaG9sZGAgaXMgaWdub3JlZC4KKworQUdHUkVTU0lWRQorLS0tLS0tLS0tLQorCitXaGVuIHRoZSBgLS1hZ2dyZXNzaXZlYCBvcHRpb24gaXMgc3VwcGxpZWQsIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSB3aWxsCitiZSBpbnZva2VkIHdpdGggdGhlIGAtZmAgZmxhZywgd2hpY2ggaW4gdHVybiB3aWxsIHBhc3MKK2AtLW5vLXJldXNlLWRlbHRhYCB0byBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uIFRoaXMgd2lsbCB0aHJvdworYXdheSBhbnkgZXhpc3RpbmcgZGVsdGFzIGFuZCByZS1jb21wdXRlIHRoZW0sIGF0IHRoZSBleHBlbnNlIG9mCitzcGVuZGluZyBtdWNoIG1vcmUgdGltZSBvbiB0aGUgcmVwYWNraW5nLgorCitUaGUgZWZmZWN0cyBvZiB0aGlzIGFyZSBtb3N0bHkgcGVyc2lzdGVudCwgZS5nLiB3aGVuIHBhY2tzIGFuZCBsb29zZQorb2JqZWN0cyBhcmUgY29hbGVzY2VkIGludG8gb25lIGFub3RoZXIgcGFjayB0aGUgZXhpc3RpbmcgZGVsdGFzIGluCit0aGF0IHBhY2sgbWlnaHQgZ2V0IHJlLXVzZWQsIGJ1dCB0aGVyZSBhcmUgYWxzbyB2YXJpb3VzIGNhc2VzIHdoZXJlIHdlCittaWdodCBwaWNrIGEgc3ViLW9wdGltYWwgZGVsdGEgZnJvbSBhIG5ld2VyIHBhY2sgaW5zdGVhZC4KKworRnVydGhlcm1vcmUsIHN1cHBseWluZyBgLS1hZ2dyZXNzaXZlYCB3aWxsIHR3ZWFrIHRoZSBgLS1kZXB0aGAgYW5kCitgLS13aW5kb3dgIG9wdGlvbnMgcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4gU2VlIHRoZQorYGdjLmFnZ3Jlc3NpdmVEZXB0aGAgYW5kIGBnYy5hZ2dyZXNzaXZlV2luZG93YCBzZXR0aW5ncyBiZWxvdy4gQnkKK3VzaW5nIGEgbGFyZ2VyIHdpbmRvdyBzaXplIHdlJ3JlIG1vcmUgbGlrZWx5IHRvIGZpbmQgbW9yZSBvcHRpbWFsCitkZWx0YXMuCisKK0l0J3MgcHJvYmFibHkgbm90IHdvcnRoIGl0IHRvIHVzZSB0aGlzIG9wdGlvbiBvbiBhIGdpdmVuIHJlcG9zaXRvcnkKK3dpdGhvdXQgcnVubmluZyB0YWlsb3JlZCBwZXJmb3JtYW5jZSBiZW5jaG1hcmtzIG9uIGl0LiBJdCB0YWtlcyBhIGxvdAorbW9yZSB0aW1lLCBhbmQgdGhlIHJlc3VsdGluZyBzcGFjZS9kZWx0YSBvcHRpbWl6YXRpb24gbWF5IG9yIG1heSBub3QKK2JlIHdvcnRoIGl0LiBOb3QgdXNpbmcgdGhpcyBhdCBhbGwgaXMgdGhlIHJpZ2h0IHRyYWRlLW9mZiBmb3IgbW9zdAordXNlcnMgYW5kIHRoZWlyIHJlcG9zaXRvcmllcy4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitUaGUgYmVsb3cgZG9jdW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBhcyB3aGF0J3MgZm91bmQgaW4KK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXToKKworaW5jbHVkZTo6Y29uZmlnL2djLnR4dFtdCisKK05PVEVTCistLS0tLQorCisnZ2l0IGdjJyB0cmllcyB2ZXJ5IGhhcmQgbm90IHRvIGRlbGV0ZSBvYmplY3RzIHRoYXQgYXJlIHJlZmVyZW5jZWQKK2FueXdoZXJlIGluIHlvdXIgcmVwb3NpdG9yeS4gSW4gcGFydGljdWxhciwgaXQgd2lsbCBrZWVwIG5vdCBvbmx5CitvYmplY3RzIHJlZmVyZW5jZWQgYnkgeW91ciBjdXJyZW50IHNldCBvZiBicmFuY2hlcyBhbmQgdGFncywgYnV0IGFsc28KK29iamVjdHMgcmVmZXJlbmNlZCBieSB0aGUgaW5kZXgsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgbm90ZXMgc2F2ZWQKK2J5ICdnaXQgbm90ZXMnIHVuZGVyIHJlZnMvbm90ZXMvLCByZWZsb2dzICh3aGljaCBtYXkgcmVmZXJlbmNlIGNvbW1pdHMKK2luIGJyYW5jaGVzIHRoYXQgd2VyZSBsYXRlciBhbWVuZGVkIG9yIHJld291bmQpLCBhbmQgYW55dGhpbmcgZWxzZSBpbgordGhlIHJlZnMvKiBuYW1lc3BhY2UuICBJZiB5b3UgYXJlIGV4cGVjdGluZyBzb21lIG9iamVjdHMgdG8gYmUgZGVsZXRlZAorYW5kIHRoZXkgYXJlbid0LCBjaGVjayBhbGwgb2YgdGhvc2UgbG9jYXRpb25zIGFuZCBkZWNpZGUgd2hldGhlciBpdAorbWFrZXMgc2Vuc2UgaW4geW91ciBjYXNlIHRvIHJlbW92ZSB0aG9zZSByZWZlcmVuY2VzLgorCitPbiB0aGUgb3RoZXIgaGFuZCwgd2hlbiAnZ2l0IGdjJyBydW5zIGNvbmN1cnJlbnRseSB3aXRoIGFub3RoZXIgcHJvY2VzcywKK3RoZXJlIGlzIGEgcmlzayBvZiBpdCBkZWxldGluZyBhbiBvYmplY3QgdGhhdCB0aGUgb3RoZXIgcHJvY2VzcyBpcyB1c2luZworYnV0IGhhc24ndCBjcmVhdGVkIGEgcmVmZXJlbmNlIHRvLiBUaGlzIG1heSBqdXN0IGNhdXNlIHRoZSBvdGhlciBwcm9jZXNzCit0byBmYWlsIG9yIG1heSBjb3JydXB0IHRoZSByZXBvc2l0b3J5IGlmIHRoZSBvdGhlciBwcm9jZXNzIGxhdGVyIGFkZHMgYQorcmVmZXJlbmNlIHRvIHRoZSBkZWxldGVkIG9iamVjdC4gR2l0IGhhcyB0d28gZmVhdHVyZXMgdGhhdCBzaWduaWZpY2FudGx5CittaXRpZ2F0ZSB0aGlzIHByb2JsZW06CisKKy4gQW55IG9iamVjdCB3aXRoIG1vZGlmaWNhdGlvbiB0aW1lIG5ld2VyIHRoYW4gdGhlIGAtLXBydW5lYCBkYXRlIGlzIGtlcHQsCisgIGFsb25nIHdpdGggZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBpdC4KKworLiBNb3N0IG9wZXJhdGlvbnMgdGhhdCBhZGQgYW4gb2JqZWN0IHRvIHRoZSBkYXRhYmFzZSB1cGRhdGUgdGhlCisgIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBvYmplY3QgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IHNvIHRoYXQgIzEKKyAgYXBwbGllcy4KKworSG93ZXZlciwgdGhlc2UgZmVhdHVyZXMgZmFsbCBzaG9ydCBvZiBhIGNvbXBsZXRlIHNvbHV0aW9uLCBzbyB1c2VycyB3aG8KK3J1biBjb21tYW5kcyBjb25jdXJyZW50bHkgaGF2ZSB0byBsaXZlIHdpdGggc29tZSByaXNrIG9mIGNvcnJ1cHRpb24gKHdoaWNoCitzZWVtcyB0byBiZSBsb3cgaW4gcHJhY3RpY2UpLgorCitIT09LUworLS0tLS0KKworVGhlICdnaXQgZ2MgLS1hdXRvJyBjb21tYW5kIHdpbGwgcnVuIHRoZSAncHJlLWF1dG8tZ2MnIGhvb2suICBTZWUKK2xpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wcnVuZVsxXQorbGlua2dpdDpnaXQtcmVmbG9nWzFdCitsaW5rZ2l0OmdpdC1yZXBhY2tbMV0KK2xpbmtnaXQ6Z2l0LXJlcmVyZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQ0ZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ2V0LXRhci1jb21taXQtaWQudHh0CkBAIC0wLDAgKzEsMzAgQEAKK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCgxKQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCAtIEV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGdldC10YXItY29tbWl0LWlkJworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitSZWFkIGEgdGFyIGFyY2hpdmUgY3JlYXRlZCBieSAnZ2l0IGFyY2hpdmUnIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0CithbmQgZXh0cmFjdCB0aGUgY29tbWl0IElEIHN0b3JlZCBpbiBpdC4gIEl0IHJlYWRzIG9ubHkgdGhlIGZpcnN0CisxMDI0IGJ5dGVzIG9mIGlucHV0LCB0aHVzIGl0cyBydW50aW1lIGlzIG5vdCBpbmZsdWVuY2VkIGJ5IHRoZSBzaXplCitvZiB0aGUgdGFyIGFyY2hpdmUgdmVyeSBtdWNoLgorCitJZiBubyBjb21taXQgSUQgaXMgZm91bmQsICdnaXQgZ2V0LXRhci1jb21taXQtaWQnIHF1aWV0bHkgZXhpc3RzIHdpdGggYQorcmV0dXJuIGNvZGUgb2YgMS4gIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgYXJjaGl2ZSBoYWQgbm90IGJlZW4gY3JlYXRlZAordXNpbmcgJ2dpdCBhcmNoaXZlJyBvciBpZiB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mICdnaXQgYXJjaGl2ZScgaGFkIGJlZW4KK2EgdHJlZSBJRCBpbnN0ZWFkIG9mIGEgY29tbWl0IElEIG9yIHRhZy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjZhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dApAQCAtMCwwICsxLDM2NCBAQAorZ2l0LWdyZXAoMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ncmVwIC0gUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGdyZXAnIFstYSB8IC0tdGV4dF0gWy1JXSBbLS10ZXh0Y29udl0gWy1pIHwgLS1pZ25vcmUtY2FzZV0gWy13IHwgLS13b3JkLXJlZ2V4cF0KKwkgICBbLXYgfCAtLWludmVydC1tYXRjaF0gWy1ofC1IXSBbLS1mdWxsLW5hbWVdCisJICAgWy1FIHwgLS1leHRlbmRlZC1yZWdleHBdIFstRyB8IC0tYmFzaWMtcmVnZXhwXQorCSAgIFstUCB8IC0tcGVybC1yZWdleHBdCisJICAgWy1GIHwgLS1maXhlZC1zdHJpbmdzXSBbLW4gfCAtLWxpbmUtbnVtYmVyXSBbLS1jb2x1bW5dCisJICAgWy1sIHwgLS1maWxlcy13aXRoLW1hdGNoZXNdIFstTCB8IC0tZmlsZXMtd2l0aG91dC1tYXRjaF0KKwkgICBbKC1PIHwgLS1vcGVuLWZpbGVzLWluLXBhZ2VyKSBbPHBhZ2VyPl1dCisJICAgWy16IHwgLS1udWxsXQorCSAgIFsgLW8gfCAtLW9ubHktbWF0Y2hpbmcgXSBbLWMgfCAtLWNvdW50XSBbLS1hbGwtbWF0Y2hdIFstcSB8IC0tcXVpZXRdCisJICAgWy0tbWF4LWRlcHRoIDxkZXB0aD5dIFstLVtuby1dcmVjdXJzaXZlXQorCSAgIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0KKwkgICBbLS1icmVha10gWy0taGVhZGluZ10gWy1wIHwgLS1zaG93LWZ1bmN0aW9uXQorCSAgIFstQSA8cG9zdC1jb250ZXh0Pl0gWy1CIDxwcmUtY29udGV4dD5dIFstQyA8Y29udGV4dD5dCisJICAgWy1XIHwgLS1mdW5jdGlvbi1jb250ZXh0XQorCSAgIFstLXRocmVhZHMgPG51bT5dCisJICAgWy1mIDxmaWxlPl0gWy1lXSA8cGF0dGVybj4KKwkgICBbLS1hbmR8LS1vcnwtLW5vdHwofCl8LWUgPHBhdHRlcm4+Li4uXQorCSAgIFstLXJlY3Vyc2Utc3VibW9kdWxlc10gWy0tcGFyZW50LWJhc2VuYW1lIDxiYXNlbmFtZT5dCisJICAgWyBbLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmRdIFstLWNhY2hlZCB8IC0tbm8taW5kZXggfCAtLXVudHJhY2tlZF0gfCA8dHJlZT4uLi5dCisJICAgWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitMb29rIGZvciBzcGVjaWZpZWQgcGF0dGVybnMgaW4gdGhlIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZSwgYmxvYnMKK3JlZ2lzdGVyZWQgaW4gdGhlIGluZGV4IGZpbGUsIG9yIGJsb2JzIGluIGdpdmVuIHRyZWUgb2JqZWN0cy4gIFBhdHRlcm5zCithcmUgbGlzdHMgb2Ygb25lIG9yIG1vcmUgc2VhcmNoIGV4cHJlc3Npb25zIHNlcGFyYXRlZCBieSBuZXdsaW5lCitjaGFyYWN0ZXJzLiAgQW4gZW1wdHkgc3RyaW5nIGFzIHNlYXJjaCBleHByZXNzaW9uIG1hdGNoZXMgYWxsIGxpbmVzLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworZ3JlcC5saW5lTnVtYmVyOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlIGAtbmAgb3B0aW9uIGJ5IGRlZmF1bHQuCisKK2dyZXAuY29sdW1uOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlIHRoZSBgLS1jb2x1bW5gIG9wdGlvbiBieSBkZWZhdWx0LgorCitncmVwLnBhdHRlcm5UeXBlOjoKKwlTZXQgdGhlIGRlZmF1bHQgbWF0Y2hpbmcgYmVoYXZpb3IuIFVzaW5nIGEgdmFsdWUgb2YgJ2Jhc2ljJywgJ2V4dGVuZGVkJywKKwknZml4ZWQnLCBvciAncGVybCcgd2lsbCBlbmFibGUgdGhlIGAtLWJhc2ljLXJlZ2V4cGAsIGAtLWV4dGVuZGVkLXJlZ2V4cGAsCisJYC0tZml4ZWQtc3RyaW5nc2AsIG9yIGAtLXBlcmwtcmVnZXhwYCBvcHRpb24gYWNjb3JkaW5nbHksIHdoaWxlIHRoZQorCXZhbHVlICdkZWZhdWx0JyB3aWxsIHJldHVybiB0byB0aGUgZGVmYXVsdCBtYXRjaGluZyBiZWhhdmlvci4KKworZ3JlcC5leHRlbmRlZFJlZ2V4cDo6CisJSWYgc2V0IHRvIHRydWUsIGVuYWJsZSBgLS1leHRlbmRlZC1yZWdleHBgIG9wdGlvbiBieSBkZWZhdWx0LiBUaGlzCisJb3B0aW9uIGlzIGlnbm9yZWQgd2hlbiB0aGUgYGdyZXAucGF0dGVyblR5cGVgIG9wdGlvbiBpcyBzZXQgdG8gYSB2YWx1ZQorCW90aGVyIHRoYW4gJ2RlZmF1bHQnLgorCitncmVwLnRocmVhZHM6OgorCU51bWJlciBvZiBncmVwIHdvcmtlciB0aHJlYWRzIHRvIHVzZS4gSWYgdW5zZXQgKG9yIHNldCB0byAwKSwgR2l0IHdpbGwKKwl1c2UgYXMgbWFueSB0aHJlYWRzIGFzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBjb3JlcyBhdmFpbGFibGUuCisKK2dyZXAuZnVsbE5hbWU6OgorCUlmIHNldCB0byB0cnVlLCBlbmFibGUgYC0tZnVsbC1uYW1lYCBvcHRpb24gYnkgZGVmYXVsdC4KKworZ3JlcC5mYWxsYmFja1RvTm9JbmRleDo6CisJSWYgc2V0IHRvIHRydWUsIGZhbGwgYmFjayB0byBnaXQgZ3JlcCAtLW5vLWluZGV4IGlmIGdpdCBncmVwCisJaXMgZXhlY3V0ZWQgb3V0c2lkZSBvZiBhIGdpdCByZXBvc2l0b3J5LiAgRGVmYXVsdHMgdG8gZmFsc2UuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1jYWNoZWQ6OgorCUluc3RlYWQgb2Ygc2VhcmNoaW5nIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgc2VhcmNoCisJYmxvYnMgcmVnaXN0ZXJlZCBpbiB0aGUgaW5kZXggZmlsZS4KKworLS1uby1pbmRleDo6CisJU2VhcmNoIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBtYW5hZ2VkIGJ5IEdpdC4KKworLS11bnRyYWNrZWQ6OgorCUluIGFkZGl0aW9uIHRvIHNlYXJjaGluZyBpbiB0aGUgdHJhY2tlZCBmaWxlcyBpbiB0aGUgd29ya2luZworCXRyZWUsIHNlYXJjaCBhbHNvIGluIHVudHJhY2tlZCBmaWxlcy4KKworLS1uby1leGNsdWRlLXN0YW5kYXJkOjoKKwlBbHNvIHNlYXJjaCBpbiBpZ25vcmVkIGZpbGVzIGJ5IG5vdCBob25vcmluZyB0aGUgYC5naXRpZ25vcmVgCisJbWVjaGFuaXNtLiBPbmx5IHVzZWZ1bCB3aXRoIGAtLXVudHJhY2tlZGAuCisKKy0tZXhjbHVkZS1zdGFuZGFyZDo6CisJRG8gbm90IHBheSBhdHRlbnRpb24gdG8gaWdub3JlZCBmaWxlcyBzcGVjaWZpZWQgdmlhIHRoZSBgLmdpdGlnbm9yZWAKKwltZWNoYW5pc20uICBPbmx5IHVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKwl3aXRoIGAtLW5vLWluZGV4YC4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCVJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZAorCWNoZWNrZWQgb3V0IGluIHRoZSByZXBvc2l0b3J5LiAgV2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCisJPHRyZWU+IG9wdGlvbiB0aGUgcHJlZml4IG9mIGFsbCBzdWJtb2R1bGUgb3V0cHV0IHdpbGwgYmUgdGhlIG5hbWUgb2YKKwl0aGUgcGFyZW50IHByb2plY3QncyA8dHJlZT4gb2JqZWN0LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0CisJaWYgYC0tbm8taW5kZXhgIGlzIGdpdmVuLgorCistYTo6CistLXRleHQ6OgorCVByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIGlmIHRoZXkgd2VyZSB0ZXh0LgorCistLXRleHRjb252OjoKKwlIb25vciB0ZXh0Y29udiBmaWx0ZXIgc2V0dGluZ3MuCisKKy0tbm8tdGV4dGNvbnY6OgorCURvIG5vdCBob25vciB0ZXh0Y29udiBmaWx0ZXIgc2V0dGluZ3MuCisJVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworLWk6OgorLS1pZ25vcmUtY2FzZTo6CisJSWdub3JlIGNhc2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgcGF0dGVybnMgYW5kIHRoZQorCWZpbGVzLgorCistSTo6CisJRG9uJ3QgbWF0Y2ggdGhlIHBhdHRlcm4gaW4gYmluYXJ5IGZpbGVzLgorCistLW1heC1kZXB0aCA8ZGVwdGg+OjoKKwlGb3IgZWFjaCA8cGF0aHNwZWM+IGdpdmVuIG9uIGNvbW1hbmQgbGluZSwgZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4KKwlsZXZlbHMgb2YgZGlyZWN0b3JpZXMuIEEgdmFsdWUgb2YgLTEgbWVhbnMgbm8gbGltaXQuCisJVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiA8cGF0aHNwZWM+IGNvbnRhaW5zIGFjdGl2ZSB3aWxkY2FyZHMuCisJSW4gb3RoZXIgd29yZHMgaWYgImEqIiBtYXRjaGVzIGEgZGlyZWN0b3J5IG5hbWVkICJhKiIsCisJIioiIGlzIG1hdGNoZWQgbGl0ZXJhbGx5IHNvIC0tbWF4LWRlcHRoIGlzIHN0aWxsIGVmZmVjdGl2ZS4KKworLXI6OgorLS1yZWN1cnNpdmU6OgorCVNhbWUgYXMgYC0tbWF4LWRlcHRoPS0xYDsgdGhpcyBpcyB0aGUgZGVmYXVsdC4KKworLS1uby1yZWN1cnNpdmU6OgorCVNhbWUgYXMgYC0tbWF4LWRlcHRoPTBgLgorCistdzo6CistLXdvcmQtcmVnZXhwOjoKKwlNYXRjaCB0aGUgcGF0dGVybiBvbmx5IGF0IHdvcmQgYm91bmRhcnkgKGVpdGhlciBiZWdpbiBhdCB0aGUKKwliZWdpbm5pbmcgb2YgYSBsaW5lLCBvciBwcmVjZWRlZCBieSBhIG5vbi13b3JkIGNoYXJhY3RlcjsgZW5kIGF0CisJdGhlIGVuZCBvZiBhIGxpbmUgb3IgZm9sbG93ZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXIpLgorCistdjo6CistLWludmVydC1tYXRjaDo6CisJU2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcy4KKworLWg6OgorLUg6OgorCUJ5IGRlZmF1bHQsIHRoZSBjb21tYW5kIHNob3dzIHRoZSBmaWxlbmFtZSBmb3IgZWFjaAorCW1hdGNoLiAgYC1oYCBvcHRpb24gaXMgdXNlZCB0byBzdXBwcmVzcyB0aGlzIG91dHB1dC4KKwlgLUhgIGlzIHRoZXJlIGZvciBjb21wbGV0ZW5lc3MgYW5kIGRvZXMgbm90IGRvIGFueXRoaW5nCisJZXhjZXB0IGl0IG92ZXJyaWRlcyBgLWhgIGdpdmVuIGVhcmxpZXIgb24gdGhlIGNvbW1hbmQKKwlsaW5lLgorCistLWZ1bGwtbmFtZTo6CisJV2hlbiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSwgdGhlIGNvbW1hbmQgdXN1YWxseQorCW91dHB1dHMgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgVGhpcworCW9wdGlvbiBmb3JjZXMgcGF0aHMgdG8gYmUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0CisJdG9wIGRpcmVjdG9yeS4KKworLUU6OgorLS1leHRlbmRlZC1yZWdleHA6OgorLUc6OgorLS1iYXNpYy1yZWdleHA6OgorCVVzZSBQT1NJWCBleHRlbmRlZC9iYXNpYyByZWdleHAgZm9yIHBhdHRlcm5zLiAgRGVmYXVsdAorCWlzIHRvIHVzZSBiYXNpYyByZWdleHAuCisKKy1QOjoKKy0tcGVybC1yZWdleHA6OgorCVVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyBmb3IgcGF0dGVybnMuCisrCitTdXBwb3J0IGZvciB0aGVzZSB0eXBlcyBvZiByZWd1bGFyIGV4cHJlc3Npb25zIGlzIGFuIG9wdGlvbmFsCitjb21waWxlLXRpbWUgZGVwZW5kZW5jeS4gSWYgR2l0IHdhc24ndCBjb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIHRoZW0KK3Byb3ZpZGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIGl0IHRvIGRpZS4KKworLUY6OgorLS1maXhlZC1zdHJpbmdzOjoKKwlVc2UgZml4ZWQgc3RyaW5ncyBmb3IgcGF0dGVybnMgKGRvbid0IGludGVycHJldCBwYXR0ZXJuCisJYXMgYSByZWdleCkuCisKKy1uOjoKKy0tbGluZS1udW1iZXI6OgorCVByZWZpeCB0aGUgbGluZSBudW1iZXIgdG8gbWF0Y2hpbmcgbGluZXMuCisKKy0tY29sdW1uOjoKKwlQcmVmaXggdGhlIDEtaW5kZXhlZCBieXRlLW9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2ggZnJvbSB0aGUgc3RhcnQgb2YgdGhlCisJbWF0Y2hpbmcgbGluZS4KKworLWw6OgorLS1maWxlcy13aXRoLW1hdGNoZXM6OgorLS1uYW1lLW9ubHk6OgorLUw6OgorLS1maWxlcy13aXRob3V0LW1hdGNoOjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgZXZlcnkgbWF0Y2hlZCBsaW5lLCBzaG93IG9ubHkgdGhlCisJbmFtZXMgb2YgZmlsZXMgdGhhdCBjb250YWluIChvciBkbyBub3QgY29udGFpbikgbWF0Y2hlcy4KKwlGb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkgd2l0aCAnZ2l0IGRpZmYnLCBgLS1uYW1lLW9ubHlgIGlzIGEKKwlzeW5vbnltIGZvciBgLS1maWxlcy13aXRoLW1hdGNoZXNgLgorCistT1s8cGFnZXI+XTo6CistLW9wZW4tZmlsZXMtaW4tcGFnZXJbPTxwYWdlcj5dOjoKKwlPcGVuIHRoZSBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIgKG5vdCB0aGUgb3V0cHV0IG9mICdncmVwJykuCisJSWYgdGhlIHBhZ2VyIGhhcHBlbnMgdG8gYmUgImxlc3MiIG9yICJ2aSIsIGFuZCB0aGUgdXNlcgorCXNwZWNpZmllZCBvbmx5IG9uZSBwYXR0ZXJuLCB0aGUgZmlyc3QgZmlsZSBpcyBwb3NpdGlvbmVkIGF0CisJdGhlIGZpcnN0IG1hdGNoIGF1dG9tYXRpY2FsbHkuIFRoZSBgcGFnZXJgIGFyZ3VtZW50IGlzCisJb3B0aW9uYWw7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBzdHVjayB0byB0aGUgb3B0aW9uCisJd2l0aG91dCBhIHNwYWNlLiBJZiBgcGFnZXJgIGlzIHVuc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBwYWdlcgorCXdpbGwgYmUgdXNlZCAoc2VlIGBjb3JlLnBhZ2VyYCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCistejo6CistLW51bGw6OgorCU91dHB1dCBcMCBpbnN0ZWFkIG9mIHRoZSBjaGFyYWN0ZXIgdGhhdCBub3JtYWxseSBmb2xsb3dzIGEKKwlmaWxlIG5hbWUuCisKKy1vOjoKKy0tb25seS1tYXRjaGluZzo6CisJUHJpbnQgb25seSB0aGUgbWF0Y2hlZCAobm9uLWVtcHR5KSBwYXJ0cyBvZiBhIG1hdGNoaW5nIGxpbmUsIHdpdGggZWFjaCBzdWNoCisJcGFydCBvbiBhIHNlcGFyYXRlIG91dHB1dCBsaW5lLgorCistYzo6CistLWNvdW50OjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgZXZlcnkgbWF0Y2hlZCBsaW5lLCBzaG93IHRoZSBudW1iZXIgb2YKKwlsaW5lcyB0aGF0IG1hdGNoLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlTaG93IGNvbG9yZWQgbWF0Y2hlcy4KKwlUaGUgdmFsdWUgbXVzdCBiZSBhbHdheXMgKHRoZSBkZWZhdWx0KSwgbmV2ZXIsIG9yIGF1dG8uCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIG1hdGNoIGhpZ2hsaWdodGluZywgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKwlnaXZlcyB0aGUgZGVmYXVsdCB0byBjb2xvciBvdXRwdXQuCisJU2FtZSBhcyBgLS1jb2xvcj1uZXZlcmAuCisKKy0tYnJlYWs6OgorCVByaW50IGFuIGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzLgorCistLWhlYWRpbmc6OgorCVNob3cgdGhlIGZpbGVuYW1lIGFib3ZlIHRoZSBtYXRjaGVzIGluIHRoYXQgZmlsZSBpbnN0ZWFkIG9mCisJYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2hvd24gbGluZS4KKworLXA6OgorLS1zaG93LWZ1bmN0aW9uOjoKKwlTaG93IHRoZSBwcmVjZWRpbmcgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBuYW1lIG9mCisJdGhlIG1hdGNoLCB1bmxlc3MgdGhlIG1hdGNoaW5nIGxpbmUgaXMgYSBmdW5jdGlvbiBuYW1lIGl0c2VsZi4KKwlUaGUgbmFtZSBpcyBkZXRlcm1pbmVkIGluIHRoZSBzYW1lIHdheSBhcyAnZ2l0IGRpZmYnIHdvcmtzIG91dAorCXBhdGNoIGh1bmsgaGVhZGVycyAoc2VlICdEZWZpbmluZyBhIGN1c3RvbSBodW5rLWhlYWRlcicgaW4KKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0pLgorCistPG51bT46OgorLUMgPG51bT46OgorLS1jb250ZXh0IDxudW0+OjoKKwlTaG93IDxudW0+IGxlYWRpbmcgYW5kIHRyYWlsaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lCisJY29udGFpbmluZyBgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLUEgPG51bT46OgorLS1hZnRlci1jb250ZXh0IDxudW0+OjoKKwlTaG93IDxudW0+IHRyYWlsaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lIGNvbnRhaW5pbmcKKwlgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLUIgPG51bT46OgorLS1iZWZvcmUtY29udGV4dCA8bnVtPjo6CisJU2hvdyA8bnVtPiBsZWFkaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lIGNvbnRhaW5pbmcKKwlgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLVc6OgorLS1mdW5jdGlvbi1jb250ZXh0OjoKKwlTaG93IHRoZSBzdXJyb3VuZGluZyB0ZXh0IGZyb20gdGhlIHByZXZpb3VzIGxpbmUgY29udGFpbmluZyBhCisJZnVuY3Rpb24gbmFtZSB1cCB0byB0aGUgb25lIGJlZm9yZSB0aGUgbmV4dCBmdW5jdGlvbiBuYW1lLAorCWVmZmVjdGl2ZWx5IHNob3dpbmcgdGhlIHdob2xlIGZ1bmN0aW9uIGluIHdoaWNoIHRoZSBtYXRjaCB3YXMKKwlmb3VuZC4KKworLS10aHJlYWRzIDxudW0+OjoKKwlOdW1iZXIgb2YgZ3JlcCB3b3JrZXIgdGhyZWFkcyB0byB1c2UuCisJU2VlIGBncmVwLnRocmVhZHNgIGluICdDT05GSUdVUkFUSU9OJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLWYgPGZpbGU+OjoKKwlSZWFkIHBhdHRlcm5zIGZyb20gPGZpbGU+LCBvbmUgcGVyIGxpbmUuCisrCitQYXNzaW5nIHRoZSBwYXR0ZXJuIHZpYSA8ZmlsZT4gYWxsb3dzIGZvciBwcm92aWRpbmcgYSBzZWFyY2ggcGF0dGVybgorY29udGFpbmluZyBhIFwwLgorKworTm90IGFsbCBwYXR0ZXJuIHR5cGVzIHN1cHBvcnQgcGF0dGVybnMgY29udGFpbmluZyBcMC4gR2l0IHdpbGwgZXJyb3IKK291dCBpZiBhIGdpdmVuIHBhdHRlcm4gdHlwZSBjYW4ndCBzdXBwb3J0IHN1Y2ggYSBwYXR0ZXJuLiBUaGUKK2AtLXBlcmwtcmVnZXhwYCBwYXR0ZXJuIHR5cGUgd2hlbiBjb21waWxlZCBhZ2FpbnN0IHRoZSBQQ1JFIHYyIGJhY2tlbmQKK2hhcyB0aGUgd2lkZXN0IHN1cHBvcnQgZm9yIHRoZXNlIHR5cGVzIG9mIHBhdHRlcm5zLgorKworSW4gdmVyc2lvbnMgb2YgR2l0IGJlZm9yZSAyLjIzLjAgcGF0dGVybnMgY29udGFpbmluZyBcMCB3b3VsZCBiZQorc2lsZW50bHkgY29uc2lkZXJlZCBmaXhlZC4gVGhpcyB3YXMgbmV2ZXIgZG9jdW1lbnRlZCwgdGhlcmUgd2VyZSBhbHNvCitvZGQgYW5kIHVuZG9jdW1lbnRlZCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBlLmcuIG5vbi1BU0NJSSBwYXR0ZXJucworY29udGFpbmluZyBcMCBhbmQgYC0taWdub3JlLWNhc2VgLgorKworSW4gZnV0dXJlIHZlcnNpb25zIHdlIG1heSBsZWFybiB0byBzdXBwb3J0IHBhdHRlcm5zIGNvbnRhaW5pbmcgXDAgZm9yCittb3JlIHNlYXJjaCBiYWNrZW5kcywgdW50aWwgdGhlbiB3ZSdsbCBkaWUgd2hlbiB0aGUgcGF0dGVybiB0eXBlIGluCitxdWVzdGlvbiBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KKworLWU6OgorCVRoZSBuZXh0IHBhcmFtZXRlciBpcyB0aGUgcGF0dGVybi4gVGhpcyBvcHRpb24gaGFzIHRvIGJlCisJdXNlZCBmb3IgcGF0dGVybnMgc3RhcnRpbmcgd2l0aCBgLWAgYW5kIHNob3VsZCBiZSB1c2VkIGluCisJc2NyaXB0cyBwYXNzaW5nIHVzZXIgaW5wdXQgdG8gZ3JlcC4gIE11bHRpcGxlIHBhdHRlcm5zIGFyZQorCWNvbWJpbmVkIGJ5ICdvcicuCisKKy0tYW5kOjoKKy0tb3I6OgorLS1ub3Q6OgorKCAuLi4gKTo6CisJU3BlY2lmeSBob3cgbXVsdGlwbGUgcGF0dGVybnMgYXJlIGNvbWJpbmVkIHVzaW5nIEJvb2xlYW4KKwlleHByZXNzaW9ucy4gIGAtLW9yYCBpcyB0aGUgZGVmYXVsdCBvcGVyYXRvci4gIGAtLWFuZGAgaGFzCisJaGlnaGVyIHByZWNlZGVuY2UgdGhhbiBgLS1vcmAuICBgLWVgIGhhcyB0byBiZSB1c2VkIGZvciBhbGwKKwlwYXR0ZXJucy4KKworLS1hbGwtbWF0Y2g6OgorCVdoZW4gZ2l2aW5nIG11bHRpcGxlIHBhdHRlcm4gZXhwcmVzc2lvbnMgY29tYmluZWQgd2l0aCBgLS1vcmAsCisJdGhpcyBmbGFnIGlzIHNwZWNpZmllZCB0byBsaW1pdCB0aGUgbWF0Y2ggdG8gZmlsZXMgdGhhdAorCWhhdmUgbGluZXMgdG8gbWF0Y2ggYWxsIG9mIHRoZW0uCisKKy1xOjoKKy0tcXVpZXQ6OgorCURvIG5vdCBvdXRwdXQgbWF0Y2hlZCBsaW5lczsgaW5zdGVhZCwgZXhpdCB3aXRoIHN0YXR1cyAwIHdoZW4KKwl0aGVyZSBpcyBhIG1hdGNoIGFuZCB3aXRoIG5vbi16ZXJvIHN0YXR1cyB3aGVuIHRoZXJlIGlzbid0LgorCis8dHJlZT4uLi46OgorCUluc3RlYWQgb2Ygc2VhcmNoaW5nIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSwgc2VhcmNoCisJYmxvYnMgaW4gdGhlIGdpdmVuIHRyZWVzLgorCitcLS06OgorCVNpZ25hbHMgdGhlIGVuZCBvZiBvcHRpb25zOyB0aGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycworCWFyZSA8cGF0aHNwZWM+IGxpbWl0ZXJzLgorCis8cGF0aHNwZWM+Li4uOjoKKwlJZiBnaXZlbiwgbGltaXQgdGhlIHNlYXJjaCB0byBwYXRocyBtYXRjaGluZyBhdCBsZWFzdCBvbmUgcGF0dGVybi4KKwlCb3RoIGxlYWRpbmcgcGF0aHMgbWF0Y2ggYW5kIGdsb2IoNykgcGF0dGVybnMgYXJlIHN1cHBvcnRlZC4KKysKK0ZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIDxwYXRoc3BlYz4gc3ludGF4LCBzZWUgdGhlICdwYXRoc3BlYycgZW50cnkKK2luIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitgZ2l0IGdyZXAgJ3RpbWVfdCcgLS0gJyouW2NoXSdgOjoKKwlMb29rcyBmb3IgYHRpbWVfdGAgaW4gYWxsIHRyYWNrZWQgLmMgYW5kIC5oIGZpbGVzIGluIHRoZSB3b3JraW5nCisJZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMuCisKK2BnaXQgZ3JlcCAtZSAnI2RlZmluZScgLS1hbmQgXCggLWUgTUFYX1BBVEggLWUgUEFUSF9NQVggXClgOjoKKwlMb29rcyBmb3IgYSBsaW5lIHRoYXQgaGFzIGAjZGVmaW5lYCBhbmQgZWl0aGVyIGBNQVhfUEFUSGAgb3IKKwlgUEFUSF9NQVhgLgorCitgZ2l0IGdyZXAgLS1hbGwtbWF0Y2ggLWUgTk9ERSAtZSBVbmV4cGVjdGVkYDo6CisJTG9va3MgZm9yIGEgbGluZSB0aGF0IGhhcyBgTk9ERWAgb3IgYFVuZXhwZWN0ZWRgIGluCisJZmlsZXMgdGhhdCBoYXZlIGxpbmVzIHRoYXQgbWF0Y2ggYm90aC4KKworYGdpdCBncmVwIHNvbHV0aW9uIC0tIDpeRG9jdW1lbnRhdGlvbmA6OgorCUxvb2tzIGZvciBgc29sdXRpb25gLCBleGNsdWRpbmcgZmlsZXMgaW4gYERvY3VtZW50YXRpb25gLgorCitOT1RFUyBPTiBUSFJFQURTCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgLS10aHJlYWRzYCBvcHRpb24gKGFuZCB0aGUgZ3JlcC50aHJlYWRzIGNvbmZpZ3VyYXRpb24pIHdpbGwgYmUgaWdub3JlZCB3aGVuCitgLS1vcGVuLWZpbGVzLWluLXBhZ2VyYCBpcyB1c2VkLCBmb3JjaW5nIGEgc2luZ2xlLXRocmVhZGVkIGV4ZWN1dGlvbi4KKworV2hlbiBncmVwcGluZyB0aGUgb2JqZWN0IHN0b3JlICh3aXRoIGAtLWNhY2hlZGAgb3IgZ2l2aW5nIHRyZWUgb2JqZWN0cyksIHJ1bm5pbmcKK3dpdGggbXVsdGlwbGUgdGhyZWFkcyBtaWdodCBwZXJmb3JtIHNsb3dlciB0aGFuIHNpbmdsZSB0aHJlYWRlZCBpZiBgLS10ZXh0Y29udmAKK2lzIGdpdmVuIGFuZCB0aGVyZSdyZSB0b28gbWFueSB0ZXh0IGNvbnZlcnNpb25zLiBTbyBpZiB5b3UgZXhwZXJpZW5jZSBsb3cKK3BlcmZvcm1hbmNlIGluIHRoaXMgY2FzZSwgaXQgbWlnaHQgYmUgZGVzaXJhYmxlIHRvIHVzZSBgLS10aHJlYWRzPTFgLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWd1aS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ndWkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDdlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ndWkudHh0CkBAIC0wLDAgKzEsMTIxIEBACitnaXQtZ3VpKDEpCis9PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ndWkgLSBBIHBvcnRhYmxlIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gR2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBndWknIFs8Y29tbWFuZD5dIFthcmd1bWVudHNdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBUY2wvVGsgYmFzZWQgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIHRvIEdpdC4gICdnaXQgZ3VpJyBmb2N1c2VzCitvbiBhbGxvd2luZyB1c2VycyB0byBtYWtlIGNoYW5nZXMgdG8gdGhlaXIgcmVwb3NpdG9yeSBieSBtYWtpbmcKK25ldyBjb21taXRzLCBhbWVuZGluZyBleGlzdGluZyBvbmVzLCBjcmVhdGluZyBicmFuY2hlcywgcGVyZm9ybWluZworbG9jYWwgbWVyZ2VzLCBhbmQgZmV0Y2hpbmcvcHVzaGluZyB0byByZW1vdGUgcmVwb3NpdG9yaWVzLgorCitVbmxpa2UgJ2dpdGsnLCAnZ2l0IGd1aScgZm9jdXNlcyBvbiBjb21taXQgZ2VuZXJhdGlvbgorYW5kIHNpbmdsZSBmaWxlIGFubm90YXRpb24gYW5kIGRvZXMgbm90IHNob3cgcHJvamVjdCBoaXN0b3J5LgorSXQgZG9lcyBob3dldmVyIHN1cHBseSBtZW51IGFjdGlvbnMgdG8gc3RhcnQgYSAnZ2l0aycgc2Vzc2lvbiBmcm9tCit3aXRoaW4gJ2dpdCBndWknLgorCisnZ2l0IGd1aScgaXMga25vd24gdG8gd29yayBvbiBhbGwgcG9wdWxhciBVTklYIHN5c3RlbXMsIE1hYyBPUyBYLAorYW5kIFdpbmRvd3MgKHVuZGVyIGJvdGggQ3lnd2luIGFuZCBNU1lTKS4gIFRvIHRoZSBleHRlbnQgcG9zc2libGUKK09TIHNwZWNpZmljIHVzZXIgaW50ZXJmYWNlIGd1aWRlbGluZXMgYXJlIGZvbGxvd2VkLCBtYWtpbmcgJ2dpdCBndWknCithIGZhaXJseSBuYXRpdmUgaW50ZXJmYWNlIGZvciB1c2Vycy4KKworQ09NTUFORFMKKy0tLS0tLS0tCitibGFtZTo6CisJU3RhcnQgYSBibGFtZSB2aWV3ZXIgb24gdGhlIHNwZWNpZmllZCBmaWxlIG9uIHRoZSBnaXZlbgorCXZlcnNpb24gKG9yIHdvcmtpbmcgZGlyZWN0b3J5IGlmIG5vdCBzcGVjaWZpZWQpLgorCiticm93c2VyOjoKKwlTdGFydCBhIHRyZWUgYnJvd3NlciBzaG93aW5nIGFsbCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkCisJY29tbWl0LiAgRmlsZXMgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKwlicm93c2VyIGFyZSBvcGVuZWQgaW4gdGhlIGJsYW1lIHZpZXdlci4KKworY2l0b29sOjoKKwlTdGFydCAnZ2l0IGd1aScgYW5kIGFycmFuZ2UgdG8gbWFrZSBleGFjdGx5IG9uZSBjb21taXQgYmVmb3JlCisJZXhpdGluZyBhbmQgcmV0dXJuaW5nIHRvIHRoZSBzaGVsbC4gIFRoZSBpbnRlcmZhY2UgaXMgbGltaXRlZAorCXRvIG9ubHkgY29tbWl0IGFjdGlvbnMsIHNsaWdodGx5IHJlZHVjaW5nIHRoZSBhcHBsaWNhdGlvbidzCisJc3RhcnR1cCB0aW1lIGFuZCBzaW1wbGlmeWluZyB0aGUgbWVudWJhci4KKwordmVyc2lvbjo6CisJRGlzcGxheSB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdmVyc2lvbiBvZiAnZ2l0IGd1aScuCisKKworRXhhbXBsZXMKKy0tLS0tLS0tCitgZ2l0IGd1aSBibGFtZSBNYWtlZmlsZWA6OgorCisJU2hvdyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgJ01ha2VmaWxlJyBpbiB0aGUgY3VycmVudAorCXdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcHJvdmlkZSBhbm5vdGF0aW9ucyBmb3IgYm90aCB0aGUKKwlvcmlnaW5hbCBhdXRob3Igb2YgZWFjaCBsaW5lLCBhbmQgd2hvIG1vdmVkIHRoZSBsaW5lIHRvIGl0cworCWN1cnJlbnQgbG9jYXRpb24uICBUaGUgdW5jb21taXR0ZWQgZmlsZSBpcyBhbm5vdGF0ZWQsIGFuZAorCXVuY29tbWl0dGVkIGNoYW5nZXMgKGlmIGFueSkgYXJlIGV4cGxpY2l0bHkgYXR0cmlidXRlZCB0bworCSdOb3QgWWV0IENvbW1pdHRlZCcuCisKK2BnaXQgZ3VpIGJsYW1lIHYwLjk5LjggTWFrZWZpbGVgOjoKKworCVNob3cgdGhlIGNvbnRlbnRzIG9mICdNYWtlZmlsZScgaW4gcmV2aXNpb24gJ3YwLjk5LjgnCisJYW5kIHByb3ZpZGUgYW5ub3RhdGlvbnMgZm9yIGVhY2ggbGluZS4gIFVubGlrZSB0aGUgYWJvdmUKKwlleGFtcGxlIHRoZSBmaWxlIGlzIHJlYWQgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIGFuZCBub3QKKwl0aGUgd29ya2luZyBkaXJlY3RvcnkuCisKK2BnaXQgZ3VpIGJsYW1lIC0tbGluZT0xMDAgTWFrZWZpbGVgOjoKKworCUxvYWRzIGFubm90YXRpb25zIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgYXV0b21hdGljYWxseQorCXNjcm9sbHMgdGhlIHZpZXcgdG8gY2VudGVyIG9uIGxpbmUgJzEwMCcuCisKK2BnaXQgZ3VpIGNpdG9vbGA6OgorCisJTWFrZSBvbmUgY29tbWl0IGFuZCByZXR1cm4gdG8gdGhlIHNoZWxsIHdoZW4gaXQgaXMgY29tcGxldGUuCisJVGhpcyBjb21tYW5kIHJldHVybnMgYSBub24temVybyBleGl0IGNvZGUgaWYgdGhlIHdpbmRvdyB3YXMKKwljbG9zZWQgaW4gYW55IHdheSBvdGhlciB0aGFuIGJ5IG1ha2luZyBhIGNvbW1pdC4KKworYGdpdCBndWkgY2l0b29sIC0tYW1lbmRgOjoKKworCUF1dG9tYXRpY2FsbHkgZW50ZXIgdGhlICdBbWVuZCBMYXN0IENvbW1pdCcgbW9kZSBvZgorCXRoZSBpbnRlcmZhY2UuCisKK2BnaXQgZ3VpIGNpdG9vbCAtLW5vY29tbWl0YDo6CisKKwlCZWhhdmUgYXMgbm9ybWFsIGNpdG9vbCwgYnV0IGluc3RlYWQgb2YgbWFraW5nIGEgY29tbWl0CisJc2ltcGx5IHRlcm1pbmF0ZSB3aXRoIGEgemVybyBleGl0IGNvZGUuIEl0IHN0aWxsIGNoZWNrcworCXRoYXQgdGhlIGluZGV4IGRvZXMgbm90IGNvbnRhaW4gYW55IHVubWVyZ2VkIGVudHJpZXMsIHNvCisJeW91IGNhbiB1c2UgaXQgYXMgYSBHVUkgdmVyc2lvbiBvZiBsaW5rZ2l0OmdpdC1tZXJnZXRvb2xbMV0KKworYGdpdCBjaXRvb2xgOjoKKworCVNhbWUgYXMgYGdpdCBndWkgY2l0b29sYCAoYWJvdmUpLgorCitgZ2l0IGd1aSBicm93c2VyIG1haW50YDo6CisKKwlTaG93IGEgYnJvd3NlciBmb3IgdGhlIHRyZWUgb2YgdGhlICdtYWludCcgYnJhbmNoLiAgRmlsZXMKKwlzZWxlY3RlZCBpbiB0aGUgYnJvd3NlciBjYW4gYmUgdmlld2VkIHdpdGggdGhlIGludGVybmFsCisJYmxhbWUgdmlld2VyLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0a1sxXTo6CisJVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIuICBTaG93cyBicmFuY2hlcywgY29tbWl0IGhpc3RvcnkKKwlhbmQgZmlsZSBkaWZmZXJlbmNlcy4gIGdpdGsgaXMgdGhlIHV0aWxpdHkgc3RhcnRlZCBieQorCSdnaXQgZ3VpJydzIFJlcG9zaXRvcnkgVmlzdWFsaXplIGFjdGlvbnMuCisKK090aGVyCistLS0tLQorJ2dpdCBndWknIGlzIGFjdHVhbGx5IG1haW50YWluZWQgYXMgYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgYnV0IHN0YWJsZQordmVyc2lvbnMgYXJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIEdpdCBzdWl0ZSBmb3IgdGhlIGNvbnZlbmllbmNlCitvZiBlbmQgdXNlcnMuCisKK1RoZSBvZmZpY2lhbCByZXBvc2l0b3J5IG9mIHRoZSAnZ2l0IGd1aScgcHJvamVjdCBjYW4gYmUgZm91bmQgYXQ6CisKKyAgaHR0cHM6Ly9naXRodWIuY29tL3ByYXRpMDEwMC9naXQtZ3VpLmdpdC8KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1oYXNoLW9iamVjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1oYXNoLW9iamVjdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5ZTJjNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dApAQCAtMCwwICsxLDYzIEBACitnaXQtaGFzaC1vYmplY3QoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaGFzaC1vYmplY3QgLSBDb21wdXRlIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBoYXNoLW9iamVjdCcgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPnwtLW5vLWZpbHRlcnNdIFstLXN0ZGluIFstLWxpdGVyYWxseV1dIFstLV0gPGZpbGU+Li4uCisnZ2l0IGhhc2gtb2JqZWN0JyBbLXQgPHR5cGU+XSBbLXddIC0tc3RkaW4tcGF0aHMgWy0tbm8tZmlsdGVyc10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDb21wdXRlcyB0aGUgb2JqZWN0IElEIHZhbHVlIGZvciBhbiBvYmplY3Qgd2l0aCBzcGVjaWZpZWQgdHlwZQord2l0aCB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIGZpbGUgKHdoaWNoIGNhbiBiZSBvdXRzaWRlIG9mIHRoZQord29yayB0cmVlKSwgYW5kIG9wdGlvbmFsbHkgd3JpdGVzIHRoZSByZXN1bHRpbmcgb2JqZWN0IGludG8gdGhlCitvYmplY3QgZGF0YWJhc2UuICBSZXBvcnRzIGl0cyBvYmplY3QgSUQgdG8gaXRzIHN0YW5kYXJkIG91dHB1dC4KK1doZW4gPHR5cGU+IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICJibG9iIi4KKworT1BUSU9OUworLS0tLS0tLQorCistdCA8dHlwZT46OgorCVNwZWNpZnkgdGhlIHR5cGUgKGRlZmF1bHQ6ICJibG9iIikuCisKKy13OjoKKwlBY3R1YWxseSB3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZS4KKworLS1zdGRpbjo6CisJUmVhZCB0aGUgb2JqZWN0IGZyb20gc3RhbmRhcmQgaW5wdXQgaW5zdGVhZCBvZiBmcm9tIGEgZmlsZS4KKworLS1zdGRpbi1wYXRoczo6CisJUmVhZCBmaWxlIG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBvbmUgcGVyIGxpbmUsIGluc3RlYWQKKwlvZiBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCisKKy0tcGF0aDo6CisJSGFzaCBvYmplY3QgYXMgaXQgd2VyZSBsb2NhdGVkIGF0IHRoZSBnaXZlbiBwYXRoLiBUaGUgbG9jYXRpb24gb2YKKwlmaWxlIGRvZXMgbm90IGRpcmVjdGx5IGluZmx1ZW5jZSBvbiB0aGUgaGFzaCB2YWx1ZSwgYnV0IHBhdGggaXMKKwl1c2VkIHRvIGRldGVybWluZSB3aGF0IEdpdCBmaWx0ZXJzIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBvYmplY3QKKwliZWZvcmUgaXQgY2FuIGJlIHBsYWNlZCB0byB0aGUgb2JqZWN0IGRhdGFiYXNlLCBhbmQsIGFzIHJlc3VsdCBvZgorCWFwcGx5aW5nIGZpbHRlcnMsIHRoZSBhY3R1YWwgYmxvYiBwdXQgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIG1heQorCWRpZmZlciBmcm9tIHRoZSBnaXZlbiBmaWxlLiBUaGlzIG9wdGlvbiBpcyBtYWlubHkgdXNlZnVsIGZvciBoYXNoaW5nCisJdGVtcG9yYXJ5IGZpbGVzIGxvY2F0ZWQgb3V0c2lkZSBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb3IgZmlsZXMKKwlyZWFkIGZyb20gc3RkaW4uCisKKy0tbm8tZmlsdGVyczo6CisJSGFzaCB0aGUgY29udGVudHMgYXMgaXMsIGlnbm9yaW5nIGFueSBpbnB1dCBmaWx0ZXIgdGhhdCB3b3VsZAorCWhhdmUgYmVlbiBjaG9zZW4gYnkgdGhlIGF0dHJpYnV0ZXMgbWVjaGFuaXNtLCBpbmNsdWRpbmcgdGhlIGVuZC1vZi1saW5lCisJY29udmVyc2lvbi4gSWYgdGhlIGZpbGUgaXMgcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0IHRoZW4gdGhpcworCWlzIGFsd2F5cyBpbXBsaWVkLCB1bmxlc3MgdGhlIGAtLXBhdGhgIG9wdGlvbiBpcyBnaXZlbi4KKworLS1saXRlcmFsbHk6OgorCUFsbG93IGAtLXN0ZGluYCB0byBoYXNoIGFueSBnYXJiYWdlIGludG8gYSBsb29zZSBvYmplY3Qgd2hpY2ggbWlnaHQgbm90CisJb3RoZXJ3aXNlIHBhc3Mgc3RhbmRhcmQgb2JqZWN0IHBhcnNpbmcgb3IgZ2l0LWZzY2sgY2hlY2tzLiBVc2VmdWwgZm9yCisJc3RyZXNzLXRlc3RpbmcgR2l0IGl0c2VsZiBvciByZXByb2R1Y2luZyBjaGFyYWN0ZXJpc3RpY3Mgb2YgY29ycnVwdCBvcgorCWJvZ3VzIG9iamVjdHMgZW5jb3VudGVyZWQgaW4gdGhlIHdpbGQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1oZWxwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFkYjBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKQEAgLTAsMCArMSwyMDQgQEAKK2dpdC1oZWxwKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaGVscCAtIERpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGhlbHAnIFstYXwtLWFsbCBbLS1bbm8tXXZlcmJvc2VdXSBbLWd8LS1ndWlkZV0KKwkgICBbLWl8LS1pbmZvfC1tfC0tbWFufC13fC0td2ViXSBbQ09NTUFORHxHVUlERV0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1dpdGggbm8gb3B0aW9ucyBhbmQgbm8gQ09NTUFORCBvciBHVUlERSBnaXZlbiwgdGhlIHN5bm9wc2lzIG9mIHRoZSAnZ2l0JworY29tbWFuZCBhbmQgYSBsaXN0IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgR2l0IGNvbW1hbmRzIGFyZSBwcmludGVkCitvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCitJZiB0aGUgb3B0aW9uIGAtLWFsbGAgb3IgYC1hYCBpcyBnaXZlbiwgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyBhcmUKK3ByaW50ZWQgb24gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworSWYgdGhlIG9wdGlvbiBgLS1ndWlkZWAgb3IgYC1nYCBpcyBnaXZlbiwgYSBsaXN0IG9mIHRoZSB1c2VmdWwKK0dpdCBndWlkZXMgaXMgYWxzbyBwcmludGVkIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKK0lmIGEgY29tbWFuZCwgb3IgYSBndWlkZSwgaXMgZ2l2ZW4sIGEgbWFudWFsIHBhZ2UgZm9yIHRoYXQgY29tbWFuZCBvcgorZ3VpZGUgaXMgYnJvdWdodCB1cC4gVGhlICdtYW4nIHByb2dyYW0gaXMgdXNlZCBieSBkZWZhdWx0IGZvciB0aGlzCitwdXJwb3NlLCBidXQgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBvdGhlciBvcHRpb25zIG9yIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlcy4KKworSWYgYW4gYWxpYXMgaXMgZ2l2ZW4sIGdpdCBzaG93cyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYWxpYXMgb24KK3N0YW5kYXJkIG91dHB1dC4gVG8gZ2V0IHRoZSBtYW51YWwgcGFnZSBmb3IgdGhlIGFsaWFzZWQgY29tbWFuZCwgdXNlCitgZ2l0IENPTU1BTkQgLS1oZWxwYC4KKworTm90ZSB0aGF0IGBnaXQgLS1oZWxwIC4uLmAgaXMgaWRlbnRpY2FsIHRvIGBnaXQgaGVscCAuLi5gIGJlY2F1c2UgdGhlCitmb3JtZXIgaXMgaW50ZXJuYWxseSBjb252ZXJ0ZWQgaW50byB0aGUgbGF0dGVyLgorCitUbyBkaXNwbGF5IHRoZSBsaW5rZ2l0OmdpdFsxXSBtYW4gcGFnZSwgdXNlIGBnaXQgaGVscCBnaXRgLgorCitUaGlzIHBhZ2UgY2FuIGJlIGRpc3BsYXllZCB3aXRoICdnaXQgaGVscCBoZWxwJyBvciBgZ2l0IGhlbHAgLS1oZWxwYAorCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFsbDo6CisJUHJpbnRzIGFsbCB0aGUgYXZhaWxhYmxlIGNvbW1hbmRzIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuIFRoaXMKKwlvcHRpb24gb3ZlcnJpZGVzIGFueSBnaXZlbiBjb21tYW5kIG9yIGd1aWRlIG5hbWUuCisKKy0tdmVyYm9zZTo6CisJV2hlbiB1c2VkIHdpdGggYC0tYWxsYCBwcmludCBkZXNjcmlwdGlvbiBmb3IgYWxsIHJlY29nbml6ZWQKKwljb21tYW5kcy4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworLWM6OgorLS1jb25maWc6OgorCUxpc3QgYWxsIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gVGhpcyBpcyBhIHNob3J0CisJc3VtbWFyeSBvZiB0aGUgbGlzdCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy1nOjoKKy0tZ3VpZGVzOjoKKwlQcmludHMgYSBsaXN0IG9mIHVzZWZ1bCBndWlkZXMgb24gdGhlIHN0YW5kYXJkIG91dHB1dC4gVGhpcworCW9wdGlvbiBvdmVycmlkZXMgYW55IGdpdmVuIGNvbW1hbmQgb3IgZ3VpZGUgbmFtZS4KKworLWk6OgorLS1pbmZvOjoKKwlEaXNwbGF5IG1hbnVhbCBwYWdlIGZvciB0aGUgY29tbWFuZCBpbiB0aGUgJ2luZm8nIGZvcm1hdC4gVGhlCisJJ2luZm8nIHByb2dyYW0gd2lsbCBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UuCisKKy1tOjoKKy0tbWFuOjoKKwlEaXNwbGF5IG1hbnVhbCBwYWdlIGZvciB0aGUgY29tbWFuZCBpbiB0aGUgJ21hbicgZm9ybWF0LiBUaGlzCisJb3B0aW9uIG1heSBiZSB1c2VkIHRvIG92ZXJyaWRlIGEgdmFsdWUgc2V0IGluIHRoZQorCWBoZWxwLmZvcm1hdGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKysKK0J5IGRlZmF1bHQgdGhlICdtYW4nIHByb2dyYW0gd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIG1hbnVhbCBwYWdlLAorYnV0IHRoZSBgbWFuLnZpZXdlcmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBtYXkgYmUgdXNlZCB0byBjaG9vc2UKK290aGVyIGRpc3BsYXkgcHJvZ3JhbXMgKHNlZSBiZWxvdykuCisKKy13OjoKKy0td2ViOjoKKwlEaXNwbGF5IG1hbnVhbCBwYWdlIGZvciB0aGUgY29tbWFuZCBpbiB0aGUgJ3dlYicgKEhUTUwpCisJZm9ybWF0LiBBIHdlYiBicm93c2VyIHdpbGwgYmUgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLgorKworVGhlIHdlYiBicm93c2VyIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK2BoZWxwLmJyb3dzZXJgLCBvciBgd2ViLmJyb3dzZXJgIGlmIHRoZSBmb3JtZXIgaXMgbm90IHNldC4gSWYgbm9uZSBvZgordGhlc2UgY29uZmlnIHZhcmlhYmxlcyBpcyBzZXQsIHRoZSAnZ2l0IHdlYntsaXRkZH1icm93c2UnIGhlbHBlciBzY3JpcHQKKyhjYWxsZWQgYnkgJ2dpdCBoZWxwJykgd2lsbCBwaWNrIGEgc3VpdGFibGUgZGVmYXVsdC4gU2VlCitsaW5rZ2l0OmdpdC13ZWJ7bGl0ZGR9YnJvd3NlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuCisKK0NPTkZJR1VSQVRJT04gVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitoZWxwLmZvcm1hdAorfn5+fn5+fn5+fn4KKworSWYgbm8gY29tbWFuZC1saW5lIG9wdGlvbiBpcyBwYXNzZWQsIHRoZSBgaGVscC5mb3JtYXRgIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIHdpbGwgYmUgY2hlY2tlZC4gVGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHN1cHBvcnRlZCBmb3IgdGhpcwordmFyaWFibGU7IHRoZXkgbWFrZSAnZ2l0IGhlbHAnIGJlaGF2ZSBhcyB0aGVpciBjb3JyZXNwb25kaW5nIGNvbW1hbmQtCitsaW5lIG9wdGlvbjoKKworKiAibWFuIiBjb3JyZXNwb25kcyB0byAnLW18LS1tYW4nLAorKiAiaW5mbyIgY29ycmVzcG9uZHMgdG8gJy1pfC0taW5mbycsCisqICJ3ZWIiIG9yICJodG1sIiBjb3JyZXNwb25kIHRvICctd3wtLXdlYicuCisKK2hlbHAuYnJvd3Nlciwgd2ViLmJyb3dzZXIgYW5kIGJyb3dzZXIuPHRvb2w+LnBhdGgKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGBoZWxwLmJyb3dzZXJgLCBgd2ViLmJyb3dzZXJgIGFuZCBgYnJvd3Nlci48dG9vbD4ucGF0aGAgd2lsbCBhbHNvCitiZSBjaGVja2VkIGlmIHRoZSAnd2ViJyBmb3JtYXQgaXMgY2hvc2VuIChlaXRoZXIgYnkgY29tbWFuZC1saW5lCitvcHRpb24gb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZSkuIFNlZSAnLXd8LS13ZWInIGluIHRoZSBPUFRJT05TCitzZWN0aW9uIGFib3ZlIGFuZCBsaW5rZ2l0OmdpdC13ZWJ7bGl0ZGR9YnJvd3NlWzFdLgorCittYW4udmlld2VyCit+fn5+fn5+fn5+CisKK1RoZSBgbWFuLnZpZXdlcmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3aWxsIGJlIGNoZWNrZWQgaWYgdGhlICdtYW4nCitmb3JtYXQgaXMgY2hvc2VuLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKKworKiAibWFuIjogdXNlIHRoZSAnbWFuJyBwcm9ncmFtIGFzIHVzdWFsLAorKiAid29tYW4iOiB1c2UgJ2VtYWNzY2xpZW50JyB0byBsYXVuY2ggdGhlICJ3b21hbiIgbW9kZSBpbiBlbWFjcworICAodGhpcyBvbmx5IHdvcmtzIHN0YXJ0aW5nIHdpdGggZW1hY3NjbGllbnQgdmVyc2lvbnMgMjIpLAorKiAia29ucXVlcm9yIjogdXNlICdrZm1jbGllbnQnIHRvIG9wZW4gdGhlIG1hbiBwYWdlIGluIGEgbmV3IGtvbnF1ZXJvcgorICB0YWIgKHNlZSAnTm90ZSBhYm91dCBrb25xdWVyb3InIGJlbG93KS4KKworVmFsdWVzIGZvciBvdGhlciB0b29scyBjYW4gYmUgdXNlZCBpZiB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcKK2BtYW4uPHRvb2w+LmNtZGAgY29uZmlndXJhdGlvbiBlbnRyeSAoc2VlIGJlbG93KS4KKworTXVsdGlwbGUgdmFsdWVzIG1heSBiZSBnaXZlbiB0byB0aGUgYG1hbi52aWV3ZXJgIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlLiBUaGVpciBjb3JyZXNwb25kaW5nIHByb2dyYW1zIHdpbGwgYmUgdHJpZWQgaW4gdGhlIG9yZGVyCitsaXN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworRm9yIGV4YW1wbGUsIHRoaXMgY29uZmlndXJhdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJW21hbl0KKwkJdmlld2VyID0ga29ucXVlcm9yCisJCXZpZXdlciA9IHdvbWFuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCB0cnkgdG8gdXNlIGtvbnF1ZXJvciBmaXJzdC4gQnV0IHRoaXMgbWF5IGZhaWwgKGZvciBleGFtcGxlLCBpZgorRElTUExBWSBpcyBub3Qgc2V0KSBhbmQgaW4gdGhhdCBjYXNlIGVtYWNzJyB3b21hbiBtb2RlIHdpbGwgYmUgdHJpZWQuCisKK0lmIGV2ZXJ5dGhpbmcgZmFpbHMsIG9yIGlmIG5vIHZpZXdlciBpcyBjb25maWd1cmVkLCB0aGUgdmlld2VyIHNwZWNpZmllZAoraW4gdGhlIGBHSVRfTUFOX1ZJRVdFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSB0cmllZC4gIElmIHRoYXQKK2ZhaWxzIHRvbywgdGhlICdtYW4nIHByb2dyYW0gd2lsbCBiZSB0cmllZCBhbnl3YXkuCisKK21hbi48dG9vbD4ucGF0aAorfn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHlvdXIgcHJlZmVycmVkIG1hbiB2aWV3ZXIgYnkKK3NldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYG1hbi48dG9vbD4ucGF0aGAuIEZvciBleGFtcGxlLCB5b3UKK2NhbiBjb25maWd1cmUgdGhlIGFic29sdXRlIHBhdGggdG8ga29ucXVlcm9yIGJ5IHNldHRpbmcKKydtYW4ua29ucXVlcm9yLnBhdGgnLiBPdGhlcndpc2UsICdnaXQgaGVscCcgYXNzdW1lcyB0aGUgdG9vbCBpcworYXZhaWxhYmxlIGluIFBBVEguCisKK21hbi48dG9vbD4uY21kCit+fn5+fn5+fn5+fn5+fgorCitXaGVuIHRoZSBtYW4gdmlld2VyLCBzcGVjaWZpZWQgYnkgdGhlIGBtYW4udmlld2VyYCBjb25maWd1cmF0aW9uCit2YXJpYWJsZXMsIGlzIG5vdCBhbW9uZyB0aGUgc3VwcG9ydGVkIG9uZXMsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcKK2BtYW4uPHRvb2w+LmNtZGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3aWxsIGJlIGxvb2tlZCB1cC4gSWYgdGhpcwordmFyaWFibGUgZXhpc3RzIHRoZW4gdGhlIHNwZWNpZmllZCB0b29sIHdpbGwgYmUgdHJlYXRlZCBhcyBhIGN1c3RvbQorY29tbWFuZCBhbmQgYSBzaGVsbCBldmFsIHdpbGwgYmUgdXNlZCB0byBydW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgbWFuCitwYWdlIHBhc3NlZCBhcyBhcmd1bWVudHMuCisKK05vdGUgYWJvdXQga29ucXVlcm9yCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuICdrb25xdWVyb3InIGlzIHNwZWNpZmllZCBpbiB0aGUgYG1hbi52aWV3ZXJgIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlLCB3ZSBsYXVuY2ggJ2tmbWNsaWVudCcgdG8gdHJ5IHRvIG9wZW4gdGhlIG1hbiBwYWdlIG9uIGFuCithbHJlYWR5IG9wZW5lZCBrb25xdWVyb3IgaW4gYSBuZXcgdGFiIGlmIHBvc3NpYmxlLgorCitGb3IgY29uc2lzdGVuY3ksIHdlIGFsc28gdHJ5IHN1Y2ggYSB0cmljayBpZiAnbWFuLmtvbnF1ZXJvci5wYXRoJyBpcworc2V0IHRvIHNvbWV0aGluZyBsaWtlIGBBX1BBVEhfVE8va29ucXVlcm9yYC4gVGhhdCBtZWFucyB3ZSB3aWxsIHRyeSB0bworbGF1bmNoIGBBX1BBVEhfVE8va2ZtY2xpZW50YCBpbnN0ZWFkLgorCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gdXNlICdrb25xdWVyb3InLCB0aGVuIHlvdSBjYW4gdXNlIHNvbWV0aGluZyBsaWtlCit0aGUgZm9sbG93aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlbbWFuXQorCQl2aWV3ZXIgPSBrb25xCisKKwlbbWFuICJrb25xIl0KKwkJY21kID0gQV9QQVRIX1RPL2tvbnF1ZXJvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgYWJvdXQgZ2l0IGNvbmZpZyAtLWdsb2JhbAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK05vdGUgdGhhdCBhbGwgdGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgc2hvdWxkIHByb2JhYmx5IGJlIHNldAordXNpbmcgdGhlIGAtLWdsb2JhbGAgZmxhZywgZm9yIGV4YW1wbGUgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCBoZWxwLmZvcm1hdCB3ZWIKKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCB3ZWIuYnJvd3NlciBmaXJlZm94CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXMgdGhleSBhcmUgcHJvYmFibHkgbW9yZSB1c2VyIHNwZWNpZmljIHRoYW4gcmVwb3NpdG9yeSBzcGVjaWZpYy4KK1NlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWJhY2tlbmQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1iYWNrZW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTg5NjZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1iYWNrZW5kLnR4dApAQCAtMCwwICsxLDI3NyBAQAorZ2l0LWh0dHAtYmFja2VuZCgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaHR0cC1iYWNrZW5kIC0gU2VydmVyIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgR2l0IG92ZXIgSFRUUAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaHR0cC1iYWNrZW5kJworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0Egc2ltcGxlIENHSSBwcm9ncmFtIHRvIHNlcnZlIHRoZSBjb250ZW50cyBvZiBhIEdpdCByZXBvc2l0b3J5IHRvIEdpdAorY2xpZW50cyBhY2Nlc3NpbmcgdGhlIHJlcG9zaXRvcnkgb3ZlciBodHRwOi8vIGFuZCBodHRwczovLyBwcm90b2NvbHMuCitUaGUgcHJvZ3JhbSBzdXBwb3J0cyBjbGllbnRzIGZldGNoaW5nIHVzaW5nIGJvdGggdGhlIHNtYXJ0IEhUVFAgcHJvdG9jb2wKK2FuZCB0aGUgYmFja3dhcmRzLWNvbXBhdGlibGUgZHVtYiBIVFRQIHByb3RvY29sLCBhcyB3ZWxsIGFzIGNsaWVudHMKK3B1c2hpbmcgdXNpbmcgdGhlIHNtYXJ0IEhUVFAgcHJvdG9jb2wuCisKK0l0IHZlcmlmaWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUKKyJnaXQtZGFlbW9uLWV4cG9ydC1vayIsIGFuZCBpdCB3aWxsIHJlZnVzZSB0byBleHBvcnQgYW55IEdpdCBkaXJlY3RvcnkKK3RoYXQgaGFzbid0IGV4cGxpY2l0bHkgYmVlbiBtYXJrZWQgZm9yIGV4cG9ydCB0aGlzIHdheSAodW5sZXNzIHRoZQorYEdJVF9IVFRQX0VYUE9SVF9BTExgIGVudmlyb25tZW50YWwgdmFyaWFibGUgaXMgc2V0KS4KKworQnkgZGVmYXVsdCwgb25seSB0aGUgYHVwbG9hZC1wYWNrYCBzZXJ2aWNlIGlzIGVuYWJsZWQsIHdoaWNoIHNlcnZlcworJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnIGNsaWVudHMsIHdoaWNoIGFyZSBpbnZva2VkIGZyb20KKydnaXQgZmV0Y2gnLCAnZ2l0IHB1bGwnLCBhbmQgJ2dpdCBjbG9uZScuICBJZiB0aGUgY2xpZW50IGlzIGF1dGhlbnRpY2F0ZWQsCit0aGUgYHJlY2VpdmUtcGFja2Agc2VydmljZSBpcyBlbmFibGVkLCB3aGljaCBzZXJ2ZXMgJ2dpdCBzZW5kLXBhY2snCitjbGllbnRzLCB3aGljaCBpcyBpbnZva2VkIGZyb20gJ2dpdCBwdXNoJy4KKworU0VSVklDRVMKKy0tLS0tLS0tCitUaGVzZSBzZXJ2aWNlcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB1c2luZyB0aGUgcGVyLXJlcG9zaXRvcnkKK2NvbmZpZ3VyYXRpb24gZmlsZToKKworaHR0cC5nZXRhbnlmaWxlOjoKKwlUaGlzIHNlcnZlcyBHaXQgY2xpZW50cyBvbGRlciB0aGFuIHZlcnNpb24gMS42LjYgdGhhdCBhcmUgdW5hYmxlIHRvIHVzZSB0aGUKKwl1cGxvYWQgcGFjayBzZXJ2aWNlLiAgV2hlbiBlbmFibGVkLCBjbGllbnRzIGFyZSBhYmxlIHRvIHJlYWQKKwlhbnkgZmlsZSB3aXRoaW4gdGhlIHJlcG9zaXRvcnksIGluY2x1ZGluZyBvYmplY3RzIHRoYXQgYXJlCisJbm8gbG9uZ2VyIHJlYWNoYWJsZSBmcm9tIGEgYnJhbmNoIGJ1dCBhcmUgc3RpbGwgcHJlc2VudC4KKwlJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhIHJlcG9zaXRvcnkgY2FuIGRpc2FibGUgaXQKKwlieSBzZXR0aW5nIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtIHRvIGBmYWxzZWAuCisKK2h0dHAudXBsb2FkcGFjazo6CisJVGhpcyBzZXJ2ZXMgJ2dpdCBmZXRjaC1wYWNrJyBhbmQgJ2dpdCBscy1yZW1vdGUnIGNsaWVudHMuCisJSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYSByZXBvc2l0b3J5IGNhbiBkaXNhYmxlIGl0CisJYnkgc2V0dGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbSB0byBgZmFsc2VgLgorCitodHRwLnJlY2VpdmVwYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IHNlbmQtcGFjaycgY2xpZW50cywgYWxsb3dpbmcgcHVzaC4gIEl0IGlzCisJZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IgYW5vbnltb3VzIHVzZXJzLCBhbmQgZW5hYmxlZCBieQorCWRlZmF1bHQgZm9yIHVzZXJzIGF1dGhlbnRpY2F0ZWQgYnkgdGhlIHdlYiBzZXJ2ZXIuICBJdCBjYW4gYmUKKwlkaXNhYmxlZCBieSBzZXR0aW5nIHRoaXMgaXRlbSB0byBgZmFsc2VgLCBvciBlbmFibGVkIGZvciBhbGwKKwl1c2VycywgaW5jbHVkaW5nIGFub255bW91cyB1c2VycywgYnkgc2V0dGluZyBpdCB0byBgdHJ1ZWAuCisKK1VSTCBUUkFOU0xBVElPTgorLS0tLS0tLS0tLS0tLS0tCitUbyBkZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSByZXBvc2l0b3J5IG9uIGRpc2ssICdnaXQgaHR0cC1iYWNrZW5kJworY29uY2F0ZW5hdGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgUEFUSF9JTkZPLCB3aGljaCBpcyBzZXQKK2F1dG9tYXRpY2FsbHkgYnkgdGhlIHdlYiBzZXJ2ZXIsIGFuZCBHSVRfUFJPSkVDVF9ST09ULCB3aGljaCBtdXN0IGJlIHNldAorbWFudWFsbHkgaW4gdGhlIHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gIElmIEdJVF9QUk9KRUNUX1JPT1QgaXMgbm90CitzZXQsICdnaXQgaHR0cC1iYWNrZW5kJyByZWFkcyBQQVRIX1RSQU5TTEFURUQsIHdoaWNoIGlzIGFsc28gc2V0CithdXRvbWF0aWNhbGx5IGJ5IHRoZSB3ZWIgc2VydmVyLgorCitFWEFNUExFUworLS0tLS0tLS0KK0FsbCBvZiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIG1hcCBgaHR0cDovLyRob3N0bmFtZS9naXQvZm9vL2Jhci5naXRgCit0byBgL3Zhci93d3cvZ2l0L2Zvby9iYXIuZ2l0YC4KKworQXBhY2hlIDIueDo6CisJRW5zdXJlIG1vZF9jZ2ksIG1vZF9hbGlhcywgYW5kIG1vZF9lbnYgYXJlIGVuYWJsZWQsIHNldAorCUdJVF9QUk9KRUNUX1JPT1QgKG9yIERvY3VtZW50Um9vdCkgYXBwcm9wcmlhdGVseSwgYW5kCisJY3JlYXRlIGEgU2NyaXB0QWxpYXMgdG8gdGhlIENHSToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NldEVudiBHSVRfUFJPSkVDVF9ST09UIC92YXIvd3d3L2dpdAorU2V0RW52IEdJVF9IVFRQX0VYUE9SVF9BTEwKK1NjcmlwdEFsaWFzIC9naXQvIC91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gZW5hYmxlIGFub255bW91cyByZWFkIGFjY2VzcyBidXQgYXV0aGVudGljYXRlZCB3cml0ZSBhY2Nlc3MsCityZXF1aXJlIGF1dGhvcml6YXRpb24gZm9yIGJvdGggdGhlIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQgKHdoaWNoIHdlCitkZXRlY3QgYXMgYSBwdXNoIHZpYSB0aGUgc2VydmljZSBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZyksIGFuZCB0aGUKK3JlY2VpdmUtcGFjayBpbnZvY2F0aW9uIGl0c2VsZjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Jld3JpdGVDb25kICV7UVVFUllfU1RSSU5HfSBzZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgW09SXQorUmV3cml0ZUNvbmQgJXtSRVFVRVNUX1VSSX0gL2dpdC1yZWNlaXZlLXBhY2skCitSZXdyaXRlUnVsZSBeL2dpdC8gLSBbRT1BVVRIUkVRVUlSRUQ6eWVzXQorCis8TG9jYXRpb25NYXRjaCAiXi9naXQvIj4KKwlPcmRlciBEZW55LEFsbG93CisJRGVueSBmcm9tIGVudj1BVVRIUkVRVUlSRUQKKworCUF1dGhUeXBlIEJhc2ljCisJQXV0aE5hbWUgIkdpdCBBY2Nlc3MiCisJUmVxdWlyZSBncm91cCBjb21taXR0ZXJzCisJU2F0aXNmeSBBbnkKKwkuLi4KKzwvTG9jYXRpb25NYXRjaD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0lmIHlvdSBkbyBub3QgaGF2ZSBgbW9kX3Jld3JpdGVgIGF2YWlsYWJsZSB0byBtYXRjaCBhZ2FpbnN0IHRoZSBxdWVyeQorc3RyaW5nLCBpdCBpcyBzdWZmaWNpZW50IHRvIGp1c3QgcHJvdGVjdCBgZ2l0LXJlY2VpdmUtcGFja2AgaXRzZWxmLAorbGlrZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxMb2NhdGlvbk1hdGNoICJeL2dpdC8uKi9naXQtcmVjZWl2ZS1wYWNrJCI+CisJQXV0aFR5cGUgQmFzaWMKKwlBdXRoTmFtZSAiR2l0IEFjY2VzcyIKKwlSZXF1aXJlIGdyb3VwIGNvbW1pdHRlcnMKKwkuLi4KKzwvTG9jYXRpb25NYXRjaD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0luIHRoaXMgbW9kZSwgdGhlIHNlcnZlciB3aWxsIG5vdCByZXF1ZXN0IGF1dGhlbnRpY2F0aW9uIHVudGlsIHRoZQorY2xpZW50IGFjdHVhbGx5IHN0YXJ0cyB0aGUgb2JqZWN0IG5lZ290aWF0aW9uIHBoYXNlIG9mIHRoZSBwdXNoLCByYXRoZXIKK3RoYW4gZHVyaW5nIHRoZSBpbml0aWFsIGNvbnRhY3QuICBGb3IgdGhpcyByZWFzb24sIHlvdSBtdXN0IGFsc28gZW5hYmxlCit0aGUgYGh0dHAucmVjZWl2ZXBhY2tgIGNvbmZpZyBvcHRpb24gaW4gYW55IHJlcG9zaXRvcmllcyB0aGF0IHNob3VsZAorYWNjZXB0IGEgcHVzaC4gVGhlIGRlZmF1bHQgYmVoYXZpb3IsIGlmIGBodHRwLnJlY2VpdmVwYWNrYCBpcyBub3Qgc2V0LAoraXMgdG8gcmVqZWN0IGFueSBwdXNoZXMgYnkgdW5hdXRoZW50aWNhdGVkIHVzZXJzOyB0aGUgaW5pdGlhbCByZXF1ZXN0Cit3aWxsIHRoZXJlZm9yZSByZXBvcnQgYDQwMyBGb3JiaWRkZW5gIHRvIHRoZSBjbGllbnQsIHdpdGhvdXQgZXZlbiBnaXZpbmcKK2FuIG9wcG9ydHVuaXR5IGZvciBhdXRoZW50aWNhdGlvbi4KKysKK1RvIHJlcXVpcmUgYXV0aGVudGljYXRpb24gZm9yIGJvdGggcmVhZHMgYW5kIHdyaXRlcywgdXNlIGEgTG9jYXRpb24KK2RpcmVjdGl2ZSBhcm91bmQgdGhlIHJlcG9zaXRvcnksIG9yIG9uZSBvZiBpdHMgcGFyZW50IGRpcmVjdG9yaWVzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPExvY2F0aW9uIC9naXQvcHJpdmF0ZT4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJQcml2YXRlIEdpdCBBY2Nlc3MiCisJUmVxdWlyZSBncm91cCBjb21taXR0ZXJzCisJLi4uCis8L0xvY2F0aW9uPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gc2VydmUgZ2l0d2ViIGF0IHRoZSBzYW1lIHVybCwgdXNlIGEgU2NyaXB0QWxpYXNNYXRjaCB0byBvbmx5Cit0aG9zZSBVUkxzIHRoYXQgJ2dpdCBodHRwLWJhY2tlbmQnIGNhbiBoYW5kbGUsIGFuZCBmb3J3YXJkIHRoZQorcmVzdCB0byBnaXR3ZWI6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTY3JpcHRBbGlhc01hdGNoIFwKKwkiKD94KV4vZ2l0LyguKi8oSEVBRCB8IFwKKwkJCWluZm8vcmVmcyB8IFwKKwkJCW9iamVjdHMvKGluZm8vW14vXSsgfCBcCisJCQkJIFswLTlhLWZdezJ9L1swLTlhLWZdezM4fSB8IFwKKwkJCQkgcGFjay9wYWNrLVswLTlhLWZdezQwfVwuKHBhY2t8aWR4KSkgfCBcCisJCQlnaXQtKHVwbG9hZHxyZWNlaXZlKS1wYWNrKSkkIiBcCisJL3Vzci9saWJleGVjL2dpdC1jb3JlL2dpdC1odHRwLWJhY2tlbmQvJDEKKworU2NyaXB0QWxpYXMgL2dpdC8gL3Zhci93d3cvY2dpLWJpbi9naXR3ZWIuY2dpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gc2VydmUgbXVsdGlwbGUgcmVwb3NpdG9yaWVzIGZyb20gZGlmZmVyZW50IGxpbmtnaXQ6Z2l0bmFtZXNwYWNlc1s3XSBpbiBhCitzaW5nbGUgcmVwb3NpdG9yeToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NldEVudklmIFJlcXVlc3RfVVJJICJeL2dpdC8oW14vXSopIiBHSVRfTkFNRVNQQUNFPSQxCitTY3JpcHRBbGlhc01hdGNoIF4vZ2l0L1teL10qKC4qKSAvdXNyL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZC9zdG9yYWdlLmdpdCQxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FjY2VsZXJhdGVkIHN0YXRpYyBBcGFjaGUgMi54OjoKKwlTaW1pbGFyIHRvIHRoZSBhYm92ZSwgYnV0IEFwYWNoZSBjYW4gYmUgdXNlZCB0byByZXR1cm4gc3RhdGljCisJZmlsZXMgdGhhdCBhcmUgc3RvcmVkIG9uIGRpc2suICBPbiBtYW55IHN5c3RlbXMgdGhpcyBtYXkKKwliZSBtb3JlIGVmZmljaWVudCBhcyBBcGFjaGUgY2FuIGFzayB0aGUga2VybmVsIHRvIGNvcHkgdGhlCisJZmlsZSBjb250ZW50cyBmcm9tIHRoZSBmaWxlIHN5c3RlbSBkaXJlY3RseSB0byB0aGUgbmV0d29yazoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NldEVudiBHSVRfUFJPSkVDVF9ST09UIC92YXIvd3d3L2dpdAorCitBbGlhc01hdGNoIF4vZ2l0LyguKi9vYmplY3RzL1swLTlhLWZdezJ9L1swLTlhLWZdezM4fSkkICAgICAgICAgIC92YXIvd3d3L2dpdC8kMQorQWxpYXNNYXRjaCBeL2dpdC8oLiovb2JqZWN0cy9wYWNrL3BhY2stWzAtOWEtZl17NDB9LihwYWNrfGlkeCkpJCAvdmFyL3d3dy9naXQvJDEKK1NjcmlwdEFsaWFzIC9naXQvIC91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhpcyBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgZ2l0d2ViIGNvbmZpZ3VyYXRpb246CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTZXRFbnYgR0lUX1BST0pFQ1RfUk9PVCAvdmFyL3d3dy9naXQKKworQWxpYXNNYXRjaCBeL2dpdC8oLiovb2JqZWN0cy9bMC05YS1mXXsyfS9bMC05YS1mXXszOH0pJCAgICAgICAgICAvdmFyL3d3dy9naXQvJDEKK0FsaWFzTWF0Y2ggXi9naXQvKC4qL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfS4ocGFja3xpZHgpKSQgL3Zhci93d3cvZ2l0LyQxCitTY3JpcHRBbGlhc01hdGNoIFwKKwkiKD94KV4vZ2l0LyguKi8oSEVBRCB8IFwKKwkJCWluZm8vcmVmcyB8IFwKKwkJCW9iamVjdHMvaW5mby9bXi9dKyB8IFwKKwkJCWdpdC0odXBsb2FkfHJlY2VpdmUpLXBhY2spKSQiIFwKKwkvdXNyL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZC8kMQorU2NyaXB0QWxpYXMgL2dpdC8gL3Zhci93d3cvY2dpLWJpbi9naXR3ZWIuY2dpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaWdodHRwZDo6CisJRW5zdXJlIHRoYXQgYG1vZF9jZ2lgLCBgbW9kX2FsaWFzYCwgYG1vZF9hdXRoYCwgYG1vZF9zZXRlbnZgIGFyZQorCWxvYWRlZCwgdGhlbiBzZXQgYEdJVF9QUk9KRUNUX1JPT1RgIGFwcHJvcHJpYXRlbHkgYW5kIHJlZGlyZWN0CisJYWxsIHJlcXVlc3RzIHRvIHRoZSBDR0k6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGlhcy51cmwgKz0gKCAiL2dpdCIgPT4gIi91c3IvbGliL2dpdC1jb3JlL2dpdC1odHRwLWJhY2tlbmQiICkKKyRIVFRQWyJ1cmwiXSA9fiAiXi9naXQiIHsKKwljZ2kuYXNzaWduID0gKCIiID0+ICIiKQorCXNldGVudi5hZGQtZW52aXJvbm1lbnQgPSAoCisJCSJHSVRfUFJPSkVDVF9ST09UIiA9PiAiL3Zhci93d3cvZ2l0IiwKKwkJIkdJVF9IVFRQX0VYUE9SVF9BTEwiID0+ICIiCisJKQorfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gZW5hYmxlIGFub255bW91cyByZWFkIGFjY2VzcyBidXQgYXV0aGVudGljYXRlZCB3cml0ZSBhY2Nlc3M6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskSFRUUFsicXVlcnlzdHJpbmciXSA9fiAic2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIiB7CisJaW5jbHVkZSAiZ2l0LWF1dGguY29uZiIKK30KKyRIVFRQWyJ1cmwiXSA9fiAiXi9naXQvLiovZ2l0LXJlY2VpdmUtcGFjayQiIHsKKwlpbmNsdWRlICJnaXQtYXV0aC5jb25mIgorfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKword2hlcmUgYGdpdC1hdXRoLmNvbmZgIGxvb2tzIHNvbWV0aGluZyBsaWtlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXV0aC5yZXF1aXJlID0gKAorCSIvIiA9PiAoCisJCSJtZXRob2QiID0+ICJiYXNpYyIsCisJCSJyZWFsbSIgPT4gIkdpdCBBY2Nlc3MiLAorCQkicmVxdWlyZSIgPT4gInZhbGlkLXVzZXIiCisJICAgICAgICkKKykKKyMgLi4uYW5kIHNldCB1cCBhdXRoLmJhY2tlbmQgaGVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVG8gcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBmb3IgYm90aCByZWFkcyBhbmQgd3JpdGVzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJEhUVFBbInVybCJdID1+ICJeL2dpdC9wcml2YXRlIiB7CisJaW5jbHVkZSAiZ2l0LWF1dGguY29uZiIKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitFTlZJUk9OTUVOVAorLS0tLS0tLS0tLS0KKydnaXQgaHR0cC1iYWNrZW5kJyByZWxpZXMgdXBvbiB0aGUgYENHSWAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldAorYnkgdGhlIGludm9raW5nIHdlYiBzZXJ2ZXIsIGluY2x1ZGluZzoKKworKiBQQVRIX0lORk8gKGlmIEdJVF9QUk9KRUNUX1JPT1QgaXMgc2V0LCBvdGhlcndpc2UgUEFUSF9UUkFOU0xBVEVEKQorKiBSRU1PVEVfVVNFUgorKiBSRU1PVEVfQUREUgorKiBDT05URU5UX1RZUEUKKyogUVVFUllfU1RSSU5HCisqIFJFUVVFU1RfTUVUSE9ECisKK1RoZSBgR0lUX0hUVFBfRVhQT1JUX0FMTGAgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBtYXkgYmUgcGFzc2VkIHRvCisnZ2l0LWh0dHAtYmFja2VuZCcgdG8gYnlwYXNzIHRoZSBjaGVjayBmb3IgdGhlICJnaXQtZGFlbW9uLWV4cG9ydC1vayIKK2ZpbGUgaW4gZWFjaCByZXBvc2l0b3J5IGJlZm9yZSBhbGxvd2luZyBleHBvcnQgb2YgdGhhdCByZXBvc2l0b3J5LgorCitUaGUgYEdJVF9IVFRQX01BWF9SRVFVRVNUX0JVRkZFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgKG9yIHRoZQorYGh0dHAubWF4UmVxdWVzdEJ1ZmZlcmAgY29uZmlnIHZhcmlhYmxlKSBtYXkgYmUgc2V0IHRvIGNoYW5nZSB0aGUKK2xhcmdlc3QgcmVmIG5lZ290aWF0aW9uIHJlcXVlc3QgdGhhdCBnaXQgd2lsbCBoYW5kbGUgZHVyaW5nIGEgZmV0Y2g7IGFueQorZmV0Y2ggcmVxdWlyaW5nIGEgbGFyZ2VyIGJ1ZmZlciB3aWxsIG5vdCBzdWNjZWVkLiAgVGhpcyB2YWx1ZSBzaG91bGQgbm90Citub3JtYWxseSBuZWVkIHRvIGJlIGNoYW5nZWQsIGJ1dCBtYXkgYmUgaGVscGZ1bCBpZiB5b3UgYXJlIGZldGNoaW5nIGZyb20KK2EgcmVwb3NpdG9yeSB3aXRoIGFuIGV4dHJlbWVseSBsYXJnZSBudW1iZXIgb2YgcmVmcy4gIFRoZSB2YWx1ZSBjYW4gYmUKK3NwZWNpZmllZCB3aXRoIGEgdW5pdCAoZS5nLiwgYDEwME1gIGZvciAxMDAgbWVnYWJ5dGVzKS4gVGhlIGRlZmF1bHQgaXMKKzEwIG1lZ2FieXRlcy4KKworVGhlIGJhY2tlbmQgcHJvY2VzcyBzZXRzIEdJVF9DT01NSVRURVJfTkFNRSB0byAnJFJFTU9URV9VU0VSJyBhbmQKK0dJVF9DT01NSVRURVJfRU1BSUwgdG8gJyRce1JFTU9URV9VU0VSfUBodHRwLiRce1JFTU9URV9BRERSXH0nLAorZW5zdXJpbmcgdGhhdCBhbnkgcmVmbG9ncyBjcmVhdGVkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBjb250YWluIHNvbWUKK2lkZW50aWZ5aW5nIGluZm9ybWF0aW9uIG9mIHRoZSByZW1vdGUgdXNlciB3aG8gcGVyZm9ybWVkIHRoZSBwdXNoLgorCitBbGwgYENHSWAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgdG8gZWFjaCBvZiB0aGUgaG9va3MKK2ludm9rZWQgYnkgdGhlICdnaXQtcmVjZWl2ZS1wYWNrJy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NmIwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dApAQCAtMCwwICsxLDQ5IEBACitnaXQtaHR0cC1mZXRjaCgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWh0dHAtZmV0Y2ggLSBEb3dubG9hZCBmcm9tIGEgcmVtb3RlIEdpdCByZXBvc2l0b3J5IHZpYSBIVFRQCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGh0dHAtZmV0Y2gnIFstY10gWy10XSBbLWFdIFstZF0gWy12XSBbLXcgZmlsZW5hbWVdIFstLXJlY292ZXJdIFstLXN0ZGluXSA8Y29tbWl0PiA8dXJsPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0Rvd25sb2FkcyBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUC4KKworVGhpcyBjb21tYW5kIGFsd2F5cyBnZXRzIGFsbCBvYmplY3RzLiBIaXN0b3JpY2FsbHksIHRoZXJlIHdlcmUgdGhyZWUgb3B0aW9ucworYC1hYCwgYC1jYCBhbmQgYC10YCBmb3IgY2hvb3Npbmcgd2hpY2ggb2JqZWN0cyB0byBkb3dubG9hZC4gVGhleSBhcmUgbm93CitzaWxlbnRseSBpZ25vcmVkLgorCitPUFRJT05TCistLS0tLS0tCitjb21taXQtaWQ6OgorICAgICAgICBFaXRoZXIgdGhlIGhhc2ggb3IgdGhlIGZpbGVuYW1lIHVuZGVyIFtVUkxdL3JlZnMvIHRvCisgICAgICAgIHB1bGwuCisKKy1hLCAtYywgLXQ6OgorCVRoZXNlIG9wdGlvbnMgYXJlIGlnbm9yZWQgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4KKy12OjoKKwlSZXBvcnQgd2hhdCBpcyBkb3dubG9hZGVkLgorCistdyA8ZmlsZW5hbWU+OjoKKyAgICAgICAgV3JpdGVzIHRoZSBjb21taXQtaWQgaW50byB0aGUgZmlsZW5hbWUgdW5kZXIgJEdJVF9ESVIvcmVmcy88ZmlsZW5hbWU+IG9uCisgICAgICAgIHRoZSBsb2NhbCBlbmQgYWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLgorCistLXN0ZGluOjoKKwlJbnN0ZWFkIG9mIGEgY29tbWl0IGlkIG9uIHRoZSBjb21tYW5kIGxpbmUgKHdoaWNoIGlzIG5vdCBleHBlY3RlZCBpbiB0aGlzCisJY2FzZSksICdnaXQgaHR0cC1mZXRjaCcgZXhwZWN0cyBsaW5lcyBvbiBzdGRpbiBpbiB0aGUgZm9ybWF0CisKKwkJPGNvbW1pdC1pZD5bJ1x0JzxmaWxlbmFtZS1hcy1pbi0tdz5dCisKKy0tcmVjb3Zlcjo6CisJVmVyaWZ5IHRoYXQgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSB0YXJnZXQgaXMgZmV0Y2hlZC4gIFVzZWQgYWZ0ZXIKKwlhbiBlYXJsaWVyIGZldGNoIGlzIGludGVycnVwdGVkLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLXB1c2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMDNhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLXB1c2gudHh0CkBAIC0wLDAgKzEsOTcgQEAKK2dpdC1odHRwLXB1c2goMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWh0dHAtcHVzaCAtIFB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBodHRwLXB1c2gnIFstLWFsbF0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXZlcmJvc2VdIDx1cmw+IDxyZWY+IFs8cmVmPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitTZW5kcyBtaXNzaW5nIG9iamVjdHMgdG8gcmVtb3RlIHJlcG9zaXRvcnksIGFuZCB1cGRhdGVzIHRoZQorcmVtb3RlIGJyYW5jaC4KKworKk5PVEUqOiBUaGlzIGNvbW1hbmQgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQgaWYgeW91ciBsaWJjdXJsCitpcyBvbGRlciB0aGFuIDcuMTYsIGFzIHRoZSBjb21iaW5hdGlvbiBoYXMgYmVlbiByZXBvcnRlZAorbm90IHRvIHdvcmsgYW5kIHNvbWV0aW1lcyBjb3JydXB0cyByZXBvc2l0b3J5LgorCitPUFRJT05TCistLS0tLS0tCistLWFsbDo6CisJRG8gbm90IGFzc3VtZSB0aGF0IHRoZSByZW1vdGUgcmVwb3NpdG9yeSBpcyBjb21wbGV0ZSBpbiBpdHMKKwljdXJyZW50IHN0YXRlLCBhbmQgdmVyaWZ5IGFsbCBvYmplY3RzIGluIHRoZSBlbnRpcmUgbG9jYWwKKwlyZWYncyBoaXN0b3J5IGV4aXN0IGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKworLS1mb3JjZTo6CisJVXN1YWxseSwgdGhlIGNvbW1hbmQgcmVmdXNlcyB0byB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQKKwlpcyBub3QgYW4gYW5jZXN0b3Igb2YgdGhlIGxvY2FsIHJlZiB1c2VkIHRvIG92ZXJ3cml0ZSBpdC4KKwlUaGlzIGZsYWcgZGlzYWJsZXMgdGhlIGNoZWNrLiAgV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQKKwl0aGUgcmVtb3RlIHJlcG9zaXRvcnkgY2FuIGxvc2UgY29tbWl0czsgdXNlIGl0IHdpdGgKKwljYXJlLgorCistLWRyeS1ydW46OgorCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIHVwZGF0ZXMuCisKKy0tdmVyYm9zZTo6CisJUmVwb3J0IHRoZSBsaXN0IG9mIG9iamVjdHMgYmVpbmcgd2Fsa2VkIGxvY2FsbHkgYW5kIHRoZQorCWxpc3Qgb2Ygb2JqZWN0cyBzdWNjZXNzZnVsbHkgc2VudCB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisKKy1kOjoKKy1EOjoKKwlSZW1vdmUgPHJlZj4gZnJvbSByZW1vdGUgcmVwb3NpdG9yeS4gIFRoZSBzcGVjaWZpZWQgYnJhbmNoCisJY2Fubm90IGJlIHRoZSByZW1vdGUgSEVBRC4gIElmIC1kIGlzIHNwZWNpZmllZCB0aGUgZm9sbG93aW5nCisJb3RoZXIgY29uZGl0aW9ucyBtdXN0IGFsc28gYmUgbWV0OgorCisJLSBSZW1vdGUgSEVBRCBtdXN0IHJlc29sdmUgdG8gYW4gb2JqZWN0IHRoYXQgZXhpc3RzIGxvY2FsbHkKKwktIFNwZWNpZmllZCBicmFuY2ggcmVzb2x2ZXMgdG8gYW4gb2JqZWN0IHRoYXQgZXhpc3RzIGxvY2FsbHkKKwktIFNwZWNpZmllZCBicmFuY2ggaXMgYW4gYW5jZXN0b3Igb2YgdGhlIHJlbW90ZSBIRUFECisKKzxyZWY+Li4uOjoKKwlUaGUgcmVtb3RlIHJlZnMgdG8gdXBkYXRlLgorCisKK1NQRUNJRllJTkcgVEhFIFJFRlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSAnPHJlZj4nIHNwZWNpZmljYXRpb24gY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBwYXR0ZXJuLCBvciBhIHBhaXIKK29mIHN1Y2ggcGF0dGVybnMgc2VwYXJhdGVkIGJ5IGEgY29sb24gIjoiICh0aGlzIG1lYW5zIHRoYXQgYSByZWYgbmFtZQorY2Fubm90IGhhdmUgYSBjb2xvbiBpbiBpdCkuICBBIHNpbmdsZSBwYXR0ZXJuICc8bmFtZT4nIGlzIGp1c3QgYQorc2hvcnRoYW5kIGZvciAnPG5hbWU+OjxuYW1lPicuCisKK0VhY2ggcGF0dGVybiBwYWlyIGNvbnNpc3RzIG9mIHRoZSBzb3VyY2Ugc2lkZSAoYmVmb3JlIHRoZSBjb2xvbikKK2FuZCB0aGUgZGVzdGluYXRpb24gc2lkZSAoYWZ0ZXIgdGhlIGNvbG9uKS4gIFRoZSByZWYgdG8gYmUKK3B1c2hlZCBpcyBkZXRlcm1pbmVkIGJ5IGZpbmRpbmcgYSBtYXRjaCB0aGF0IG1hdGNoZXMgdGhlIHNvdXJjZQorc2lkZSwgYW5kIHdoZXJlIGl0IGlzIHB1c2hlZCBpcyBkZXRlcm1pbmVkIGJ5IHVzaW5nIHRoZQorZGVzdGluYXRpb24gc2lkZS4KKworIC0gSXQgaXMgYW4gZXJyb3IgaWYgPHNyYz4gZG9lcyBub3QgbWF0Y2ggZXhhY3RseSBvbmUgb2YgdGhlCisgICBsb2NhbCByZWZzLgorCisgLSBJZiA8ZHN0PiBkb2VzIG5vdCBtYXRjaCBhbnkgcmVtb3RlIHJlZiwgZWl0aGVyCisKKyAgICogaXQgaGFzIHRvIHN0YXJ0IHdpdGggInJlZnMvIjsgPGRzdD4gaXMgdXNlZCBhcyB0aGUKKyAgICAgZGVzdGluYXRpb24gbGl0ZXJhbGx5IGluIHRoaXMgY2FzZS4KKworICAgKiA8c3JjPiA9PSA8ZHN0PiBhbmQgdGhlIHJlZiB0aGF0IG1hdGNoZWQgdGhlIDxzcmM+IG11c3Qgbm90CisgICAgIGV4aXN0IGluIHRoZSBzZXQgb2YgcmVtb3RlIHJlZnM7IHRoZSByZWYgbWF0Y2hlZCA8c3JjPgorICAgICBsb2NhbGx5IGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uLgorCitXaXRob3V0IGAtLWZvcmNlYCwgdGhlIDxzcmM+IHJlZiBpcyBzdG9yZWQgYXQgdGhlIHJlbW90ZSBvbmx5IGlmCis8ZHN0PiBkb2VzIG5vdCBleGlzdCwgb3IgPGRzdD4gaXMgYSBwcm9wZXIgc3Vic2V0IChpLmUuIGFuCithbmNlc3Rvcikgb2YgPHNyYz4uICBUaGlzIGNoZWNrLCBrbm93biBhcyAiZmFzdC1mb3J3YXJkIGNoZWNrIiwKK2lzIHBlcmZvcm1lZCBpbiBvcmRlciB0byBhdm9pZCBhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgdGhlCityZW1vdGUgcmVmIGFuZCBsb3NlIG90aGVyIHBlb3BsZXMnIGNvbW1pdHMgZnJvbSB0aGVyZS4KKworV2l0aCBgLS1mb3JjZWAsIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgaXMgZGlzYWJsZWQgZm9yIGFsbCByZWZzLgorCitPcHRpb25hbGx5LCBhIDxyZWY+IHBhcmFtZXRlciBjYW4gYmUgcHJlZml4ZWQgd2l0aCBhIHBsdXMgJysnIHNpZ24KK3RvIGRpc2FibGUgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBvbmx5IG9uIHRoYXQgcmVmLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbWFwLXNlbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjUzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbWFwLXNlbmQudHh0CkBAIC0wLDAgKzEsMTQwIEBACitnaXQtaW1hcC1zZW5kKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1pbWFwLXNlbmQgLSBTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGZyb20gc3RkaW4gdG8gYW4gSU1BUCBmb2xkZXIKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaW1hcC1zZW5kJyBbLXZdIFstcV0gWy0tW25vLV1jdXJsXQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIHVwbG9hZHMgYSBtYWlsYm94IGdlbmVyYXRlZCB3aXRoICdnaXQgZm9ybWF0LXBhdGNoJworaW50byBhbiBJTUFQIGRyYWZ0cyBmb2xkZXIuICBUaGlzIGFsbG93cyBwYXRjaGVzIHRvIGJlIHNlbnQgYXMKK290aGVyIGVtYWlsIGlzIHdoZW4gdXNpbmcgbWFpbCBjbGllbnRzIHRoYXQgY2Fubm90IHJlYWQgbWFpbGJveAorZmlsZXMgZGlyZWN0bHkuIFRoZSBjb21tYW5kIGFsc28gd29ya3Mgd2l0aCBhbnkgZ2VuZXJhbCBtYWlsYm94CitpbiB3aGljaCBlbWFpbHMgaGF2ZSB0aGUgZmllbGRzICJGcm9tIiwgIkRhdGUiLCBhbmQgIlN1YmplY3QiIGluCit0aGF0IG9yZGVyLgorCitUeXBpY2FsIHVzYWdlIGlzIHNvbWV0aGluZyBsaWtlOgorCitnaXQgZm9ybWF0LXBhdGNoIC0tc2lnbm9mZiAtLXN0ZG91dCAtLWF0dGFjaCBvcmlnaW4gfCBnaXQgaW1hcC1zZW5kCisKKworT1BUSU9OUworLS0tLS0tLQorCistdjo6CistLXZlcmJvc2U6OgorCUJlIHZlcmJvc2UuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LgorCistLWN1cmw6OgorCVVzZSBsaWJjdXJsIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIElNQVAgc2VydmVyLCB1bmxlc3MgdHVubmVsaW5nCisJaW50byBpdC4gIElnbm9yZWQgaWYgR2l0IHdhcyBidWlsdCB3aXRob3V0IHRoZSBVU0VfQ1VSTF9GT1JfSU1BUF9TRU5ECisJb3B0aW9uIHNldC4KKworLS1uby1jdXJsOjoKKwlUYWxrIHRvIHRoZSBJTUFQIHNlcnZlciB1c2luZyBnaXQncyBvd24gSU1BUCByb3V0aW5lcyBpbnN0ZWFkIG9mCisJdXNpbmcgbGliY3VybC4gIElnbm9yZWQgaWYgR2l0IHdhcyBidWlsdCB3aXRoIHRoZSBOT19PUEVOU1NMIG9wdGlvbgorCXNldC4KKworCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGUgdG9vbCwgaW1hcC5mb2xkZXIgYW5kIGVpdGhlciBpbWFwLnR1bm5lbCBvciBpbWFwLmhvc3QgbXVzdCBiZSBzZXQKK3RvIGFwcHJvcHJpYXRlIHZhbHVlcy4KKworVmFyaWFibGVzCit+fn5+fn5+fn4KKworaW5jbHVkZTo6Y29uZmlnL2ltYXAudHh0W10KKworRXhhbXBsZXMKK35+fn5+fn5+CisKK1VzaW5nIHR1bm5lbCBtb2RlOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorW2ltYXBdCisgICAgZm9sZGVyID0gIklOQk9YLkRyYWZ0cyIKKyAgICB0dW5uZWwgPSAic3NoIC1xIC1DIHVzZXJAZXhhbXBsZS5jb20gL3Vzci9iaW4vaW1hcGQgLi9NYWlsZGlyIDI+IC9kZXYvbnVsbCIKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1VzaW5nIGRpcmVjdCBtb2RlOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCitbaW1hcF0KKyAgICBmb2xkZXIgPSAiSU5CT1guRHJhZnRzIgorICAgIGhvc3QgPSBpbWFwOi8vaW1hcC5leGFtcGxlLmNvbQorICAgIHVzZXIgPSBib2IKKyAgICBwYXNzID0gcDRzc3cwcmQKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVXNpbmcgZGlyZWN0IG1vZGUgd2l0aCBTU0w6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KK1tpbWFwXQorICAgIGZvbGRlciA9ICJJTkJPWC5EcmFmdHMiCisgICAgaG9zdCA9IGltYXBzOi8vaW1hcC5leGFtcGxlLmNvbQorICAgIHVzZXIgPSBib2IKKyAgICBwYXNzID0gcDRzc3cwcmQKKyAgICBwb3J0ID0gMTIzCisgICAgc3NsdmVyaWZ5ID0gZmFsc2UKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworCitFWEFNUExFUworLS0tLS0tLS0KK1RvIHN1Ym1pdCBwYXRjaGVzIHVzaW5nIEdNYWlsJ3MgSU1BUCBpbnRlcmZhY2UsIGZpcnN0LCBlZGl0IHlvdXIgfi8uZ2l0Y29uZmlnCit0byBzcGVjaWZ5IHlvdXIgYWNjb3VudCBzZXR0aW5nczoKKworLS0tLS0tLS0tCitbaW1hcF0KKwlmb2xkZXIgPSAiW0dtYWlsXS9EcmFmdHMiCisJaG9zdCA9IGltYXBzOi8vaW1hcC5nbWFpbC5jb20KKwl1c2VyID0gdXNlckBnbWFpbC5jb20KKwlwb3J0ID0gOTkzCisJc3NsdmVyaWZ5ID0gZmFsc2UKKy0tLS0tLS0tLQorCitZb3UgbWlnaHQgbmVlZCB0byBpbnN0ZWFkIHVzZTogZm9sZGVyID0gIltHb29nbGUgTWFpbF0vRHJhZnRzIiBpZiB5b3UgZ2V0IGFuIGVycm9yCit0aGF0IHRoZSAiRm9sZGVyIGRvZXNuJ3QgZXhpc3QiLgorCitPbmNlIHRoZSBjb21taXRzIGFyZSByZWFkeSB0byBiZSBzZW50LCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgICQgZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtTSAtLXN0ZG91dCBvcmlnaW4vbWFzdGVyIHwgZ2l0IGltYXAtc2VuZAorCitKdXN0IG1ha2Ugc3VyZSB0byBkaXNhYmxlIGxpbmUgd3JhcHBpbmcgaW4gdGhlIGVtYWlsIGNsaWVudCAoR01haWwncyB3ZWIKK2ludGVyZmFjZSB3aWxsIHdyYXAgbGluZXMgbm8gbWF0dGVyIHdoYXQsIHNvIHlvdSBuZWVkIHRvIHVzZSBhIHJlYWwKK0lNQVAgY2xpZW50KS4KKworQ0FVVElPTgorLS0tLS0tLQorSXQgaXMgc3RpbGwgeW91ciByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZW1haWwgbWVzc2FnZQorc2VudCBieSB5b3VyIGVtYWlsIHByb2dyYW0gbWVldHMgdGhlIHN0YW5kYXJkcyBvZiB5b3VyIHByb2plY3QuCitNYW55IHByb2plY3RzIGRvIG5vdCBsaWtlIHBhdGNoZXMgdG8gYmUgYXR0YWNoZWQuICBTb21lIG1haWwKK2FnZW50cyB3aWxsIHRyYW5zZm9ybSBwYXRjaGVzIChlLmcuIHdyYXAgbGluZXMsIHNlbmQgdGhlbSBhcworZm9ybWF0PWZsb3dlZCkgaW4gd2F5cyB0aGF0IG1ha2UgdGhlbSBmYWlsLiAgWW91IHdpbGwgZ2V0IGFuZ3J5CitmbGFtZXMgcmlkaWN1bGluZyB5b3UgaWYgeW91IGRvbid0IGNoZWNrIHRoaXMuCisKK1RodW5kZXJiaXJkIGluIHBhcnRpY3VsYXIgaXMga25vd24gdG8gYmUgcHJvYmxlbWF0aWMuICBUaHVuZGVyYmlyZAordXNlcnMgbWF5IHdpc2ggdG8gdmlzaXQgdGhpcyB3ZWIgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjoKKyAgaHR0cDovL2tiLm1vemlsbGF6aW5lLm9yZy9QbGFpbl90ZXh0X2UtbWFpbF8tX1RodW5kZXJiaXJkI0NvbXBsZXRlbHlfcGxhaW5fZW1haWwKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0sIG1ib3goNSkKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbmRleC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Yjc1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbmRleC1wYWNrLnR4dApAQCAtMCwwICsxLDEwOCBAQAorZ2l0LWluZGV4LXBhY2soMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1pbmRleC1wYWNrIC0gQnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbmRleC1wYWNrJyBbLXZdIFstbyA8aW5kZXgtZmlsZT5dIDxwYWNrLWZpbGU+CisnZ2l0IGluZGV4LXBhY2snIC0tc3RkaW4gWy0tZml4LXRoaW5dIFstLWtlZXBdIFstdl0gWy1vIDxpbmRleC1maWxlPl0KKyAgICAgICAgICAgICAgICAgWzxwYWNrLWZpbGU+XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgYSBwYWNrZWQgYXJjaGl2ZSAoLnBhY2spIGZyb20gdGhlIHNwZWNpZmllZCBmaWxlLCBhbmQKK2J1aWxkcyBhIHBhY2sgaW5kZXggZmlsZSAoLmlkeCkgZm9yIGl0LiAgVGhlIHBhY2tlZCBhcmNoaXZlCit0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IGNhbiB0aGVuIGJlIHBsYWNlZCBpbiB0aGUKK29iamVjdHMvcGFjay8gZGlyZWN0b3J5IG9mIGEgR2l0IHJlcG9zaXRvcnkuCisKKworT1BUSU9OUworLS0tLS0tLQorLXY6OgorCUJlIHZlcmJvc2UgYWJvdXQgd2hhdCBpcyBnb2luZyBvbiwgaW5jbHVkaW5nIHByb2dyZXNzIHN0YXR1cy4KKworLW8gPGluZGV4LWZpbGU+OjoKKwlXcml0ZSB0aGUgZ2VuZXJhdGVkIHBhY2sgaW5kZXggaW50byB0aGUgc3BlY2lmaWVkCisJZmlsZS4gIFdpdGhvdXQgdGhpcyBvcHRpb24gdGhlIG5hbWUgb2YgcGFjayBpbmRleAorCWZpbGUgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgbmFtZSBvZiBwYWNrZWQgYXJjaGl2ZQorCWZpbGUgYnkgcmVwbGFjaW5nIC5wYWNrIHdpdGggLmlkeCAoYW5kIHRoZSBwcm9ncmFtCisJZmFpbHMgaWYgdGhlIG5hbWUgb2YgcGFja2VkIGFyY2hpdmUgZG9lcyBub3QgZW5kCisJd2l0aCAucGFjaykuCisKKy0tc3RkaW46OgorCVdoZW4gdGhpcyBmbGFnIGlzIHByb3ZpZGVkLCB0aGUgcGFjayBpcyByZWFkIGZyb20gc3RkaW4KKwlpbnN0ZWFkIGFuZCBhIGNvcHkgaXMgdGhlbiB3cml0dGVuIHRvIDxwYWNrLWZpbGU+LiBJZgorCTxwYWNrLWZpbGU+IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBwYWNrIGlzIHdyaXR0ZW4gdG8KKwlvYmplY3RzL3BhY2svIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBHaXQgcmVwb3NpdG9yeSB3aXRoCisJYSBkZWZhdWx0IG5hbWUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBwYWNrIGNvbnRlbnQuICBJZgorCTxwYWNrLWZpbGU+IGlzIG5vdCBzcGVjaWZpZWQgY29uc2lkZXIgdXNpbmcgLS1rZWVwIHRvCisJcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGhpcyBwcm9jZXNzIGFuZAorCSdnaXQgcmVwYWNrJy4KKworLS1maXgtdGhpbjo6CisJRml4IGEgInRoaW4iIHBhY2sgcHJvZHVjZWQgYnkgYGdpdCBwYWNrLW9iamVjdHMgLS10aGluYCAoc2VlCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIGZvciBkZXRhaWxzKSBieSBhZGRpbmcgdGhlCisJZXhjbHVkZWQgb2JqZWN0cyB0aGUgZGVsdGlmaWVkIG9iamVjdHMgYXJlIGJhc2VkIG9uIHRvIHRoZQorCXBhY2suIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaW4gY29uanVuY3Rpb24gd2l0aCAtLXN0ZGluLgorCistLWtlZXA6OgorCUJlZm9yZSBtb3ZpbmcgdGhlIGluZGV4IGludG8gaXRzIGZpbmFsIGRlc3RpbmF0aW9uCisJY3JlYXRlIGFuIGVtcHR5IC5rZWVwIGZpbGUgZm9yIHRoZSBhc3NvY2lhdGVkIHBhY2sgZmlsZS4KKwlUaGlzIG9wdGlvbiBpcyB1c3VhbGx5IG5lY2Vzc2FyeSB3aXRoIC0tc3RkaW4gdG8gcHJldmVudCBhCisJc2ltdWx0YW5lb3VzICdnaXQgcmVwYWNrJyBwcm9jZXNzIGZyb20gZGVsZXRpbmcKKwl0aGUgbmV3bHkgY29uc3RydWN0ZWQgcGFjayBhbmQgaW5kZXggYmVmb3JlIHJlZnMgY2FuIGJlCisJdXBkYXRlZCB0byB1c2Ugb2JqZWN0cyBjb250YWluZWQgaW4gdGhlIHBhY2suCisKKy0ta2VlcD08bXNnPjo6CisJTGlrZSAtLWtlZXAgY3JlYXRlIGEgLmtlZXAgZmlsZSBiZWZvcmUgbW92aW5nIHRoZSBpbmRleCBpbnRvCisJaXRzIGZpbmFsIGRlc3RpbmF0aW9uLCBidXQgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYW4gZW1wdHkgZmlsZQorCXBsYWNlICc8bXNnPicgZm9sbG93ZWQgYnkgYW4gTEYgaW50byB0aGUgLmtlZXAgZmlsZS4gIFRoZSAnPG1zZz4nCisJbWVzc2FnZSBjYW4gbGF0ZXIgYmUgc2VhcmNoZWQgZm9yIHdpdGhpbiBhbGwgLmtlZXAgZmlsZXMgdG8KKwlsb2NhdGUgYW55IHdoaWNoIGhhdmUgb3V0bGl2ZWQgdGhlaXIgdXNlZnVsbmVzcy4KKworLS1pbmRleC12ZXJzaW9uPTx2ZXJzaW9uPlssPG9mZnNldD5dOjoKKwlUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUgb25seS4gSXQgYWxsb3dzCisJdG8gZm9yY2UgdGhlIHZlcnNpb24gZm9yIHRoZSBnZW5lcmF0ZWQgcGFjayBpbmRleCwgYW5kIHRvIGZvcmNlCisJNjQtYml0IGluZGV4IGVudHJpZXMgb24gb2JqZWN0cyBsb2NhdGVkIGFib3ZlIHRoZSBnaXZlbiBvZmZzZXQuCisKKy0tc3RyaWN0OjoKKwlEaWUsIGlmIHRoZSBwYWNrIGNvbnRhaW5zIGJyb2tlbiBvYmplY3RzIG9yIGxpbmtzLgorCistLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQ6OgorCURpZSBpZiB0aGUgcGFjayBjb250YWlucyBicm9rZW4gbGlua3MuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKworLS1mc2NrLW9iamVjdHM6OgorCURpZSBpZiB0aGUgcGFjayBjb250YWlucyBicm9rZW4gb2JqZWN0cy4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorCistLXRocmVhZHM9PG4+OjoKKwlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHNwYXduIHdoZW4gcmVzb2x2aW5nCisJZGVsdGFzLiBUaGlzIHJlcXVpcmVzIHRoYXQgaW5kZXgtcGFjayBiZSBjb21waWxlZCB3aXRoCisJcHRocmVhZHMgb3RoZXJ3aXNlIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgd2l0aCBhIHdhcm5pbmcuCisJVGhpcyBpcyBtZWFudCB0byByZWR1Y2UgcGFja2luZyB0aW1lIG9uIG11bHRpcHJvY2Vzc29yCisJbWFjaGluZXMuIFRoZSByZXF1aXJlZCBhbW91bnQgb2YgbWVtb3J5IGZvciB0aGUgZGVsdGEgc2VhcmNoCisJd2luZG93IGlzIGhvd2V2ZXIgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIHRocmVhZHMuCisJU3BlY2lmeWluZyAwIHdpbGwgY2F1c2UgR2l0IHRvIGF1dG8tZGV0ZWN0IHRoZSBudW1iZXIgb2YgQ1BVJ3MKKwlhbmQgdXNlIG1heGltdW0gMyB0aHJlYWRzLgorCistLW1heC1pbnB1dC1zaXplPTxzaXplPjo6CisJRGllLCBpZiB0aGUgcGFjayBpcyBsYXJnZXIgdGhhbiA8c2l6ZT4uCisKK05PVEVTCistLS0tLQorCitPbmNlIHRoZSBpbmRleCBoYXMgYmVlbiBjcmVhdGVkLCB0aGUgbGlzdCBvZiBvYmplY3QgbmFtZXMgaXMgc29ydGVkCithbmQgdGhlIFNIQS0xIGhhc2ggb2YgdGhhdCBsaXN0IGlzIHByaW50ZWQgdG8gc3Rkb3V0LiBJZiAtLXN0ZGluIHdhcworYWxzbyB1c2VkIHRoZW4gdGhpcyBpcyBwcmVmaXhlZCBieSBlaXRoZXIgInBhY2tcdCIsIG9yICJrZWVwXHQiIGlmIGEKK25ldyAua2VlcCBmaWxlIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gVGhpcyBpcyB1c2VmdWwgdG8gcmVtb3ZlIGEKKy5rZWVwIGZpbGUgdXNlZCBhcyBhIGxvY2sgdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoICdnaXQgcmVwYWNrJworbWVudGlvbmVkIGFib3ZlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YTZjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0CkBAIC0wLDAgKzEsMjMgQEAKK2dpdC1pbml0LWRiKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW5pdC1kYiAtIENyZWF0ZXMgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaW5pdC1kYicgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT5dIFstLXNlcGFyYXRlLWdpdC1kaXIgPGdpdCBkaXI+XSBbLS1zaGFyZWRbPTxwZXJtaXNzaW9ucz5dXQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgc3lub255bSBmb3IgbGlua2dpdDpnaXQtaW5pdFsxXS4gIFBsZWFzZSByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gb2YgdGhhdCBjb21tYW5kLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4ODBhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0CkBAIC0wLDAgKzEsMTU0IEBACitnaXQtaW5pdCgxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWluaXQgLSBDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbml0JyBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0KKwkgIFstLXNlcGFyYXRlLWdpdC1kaXIgPGdpdCBkaXI+XQorCSAgWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0gW2RpcmVjdG9yeV0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBjb21tYW5kIGNyZWF0ZXMgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgLSBiYXNpY2FsbHkgYSBgLmdpdGAKK2RpcmVjdG9yeSB3aXRoIHN1YmRpcmVjdG9yaWVzIGZvciBgb2JqZWN0c2AsIGByZWZzL2hlYWRzYCwKK2ByZWZzL3RhZ3NgLCBhbmQgdGVtcGxhdGUgZmlsZXMuICBBbiBpbml0aWFsIGBIRUFEYCBmaWxlIHRoYXQKK3JlZmVyZW5jZXMgdGhlIEhFQUQgb2YgdGhlIG1hc3RlciBicmFuY2ggaXMgYWxzbyBjcmVhdGVkLgorCitJZiB0aGUgYCRHSVRfRElSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdGhlbiBpdCBzcGVjaWZpZXMgYSBwYXRoCit0byB1c2UgaW5zdGVhZCBvZiBgLi8uZ2l0YCBmb3IgdGhlIGJhc2Ugb2YgdGhlIHJlcG9zaXRvcnkuCisKK0lmIHRoZSBvYmplY3Qgc3RvcmFnZSBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIHZpYSB0aGUKK2AkR0lUX09CSkVDVF9ESVJFQ1RPUllgIGVudmlyb25tZW50IHZhcmlhYmxlIHRoZW4gdGhlIHNoYTEgZGlyZWN0b3JpZXMKK2FyZSBjcmVhdGVkIHVuZGVybmVhdGggLSBvdGhlcndpc2UgdGhlIGRlZmF1bHQgYCRHSVRfRElSL29iamVjdHNgCitkaXJlY3RvcnkgaXMgdXNlZC4KKworUnVubmluZyAnZ2l0IGluaXQnIGluIGFuIGV4aXN0aW5nIHJlcG9zaXRvcnkgaXMgc2FmZS4gSXQgd2lsbCBub3QKK292ZXJ3cml0ZSB0aGluZ3MgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZS4gVGhlIHByaW1hcnkgcmVhc29uIGZvcgorcmVydW5uaW5nICdnaXQgaW5pdCcgaXMgdG8gcGljayB1cCBuZXdseSBhZGRlZCB0ZW1wbGF0ZXMgKG9yIHRvIG1vdmUKK3RoZSByZXBvc2l0b3J5IHRvIGFub3RoZXIgcGxhY2UgaWYgLS1zZXBhcmF0ZS1naXQtZGlyIGlzIGdpdmVuKS4KKworT1BUSU9OUworLS0tLS0tLQorCistcTo6CistLXF1aWV0OjoKKworT25seSBwcmludCBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlczsgYWxsIG90aGVyIG91dHB1dCB3aWxsIGJlIHN1cHByZXNzZWQuCisKKy0tYmFyZTo6CisKK0NyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeS4gSWYgYEdJVF9ESVJgIGVudmlyb25tZW50IGlzIG5vdCBzZXQsIGl0IGlzIHNldCB0byB0aGUKK2N1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKy0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT46OgorCitTcGVjaWZ5IHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkLiAgKFNlZSB0aGUgIlRFTVBMQVRFCitESVJFQ1RPUlkiIHNlY3Rpb24gYmVsb3cuKQorCistLXNlcGFyYXRlLWdpdC1kaXI9PGdpdCBkaXI+OjoKKworSW5zdGVhZCBvZiBpbml0aWFsaXppbmcgdGhlIHJlcG9zaXRvcnkgYXMgYSBkaXJlY3RvcnkgdG8gZWl0aGVyIGAkR0lUX0RJUmAgb3IKK2AuLy5naXQvYCwgY3JlYXRlIGEgdGV4dCBmaWxlIHRoZXJlIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGFjdHVhbAorcmVwb3NpdG9yeS4gIFRoaXMgZmlsZSBhY3RzIGFzIGZpbGVzeXN0ZW0tYWdub3N0aWMgR2l0IHN5bWJvbGljIGxpbmsgdG8gdGhlCityZXBvc2l0b3J5LgorKworSWYgdGhpcyBpcyByZWluaXRpYWxpemF0aW9uLCB0aGUgcmVwb3NpdG9yeSB3aWxsIGJlIG1vdmVkIHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4KKworLS1zaGFyZWRbPShmYWxzZXx0cnVlfHVtYXNrfGdyb3VwfGFsbHx3b3JsZHxldmVyeWJvZHl8MHh4eCldOjoKKworU3BlY2lmeSB0aGF0IHRoZSBHaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzLiAgVGhpcworYWxsb3dzIHVzZXJzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBncm91cCB0byBwdXNoIGludG8gdGhhdAorcmVwb3NpdG9yeS4gIFdoZW4gc3BlY2lmaWVkLCB0aGUgY29uZmlnIHZhcmlhYmxlICJjb3JlLnNoYXJlZFJlcG9zaXRvcnkiIGlzCitzZXQgc28gdGhhdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdW5kZXIgYCRHSVRfRElSYCBhcmUgY3JlYXRlZCB3aXRoIHRoZQorcmVxdWVzdGVkIHBlcm1pc3Npb25zLiAgV2hlbiBub3Qgc3BlY2lmaWVkLCBHaXQgd2lsbCB1c2UgcGVybWlzc2lvbnMgcmVwb3J0ZWQKK2J5IHVtYXNrKDIpLgorKworVGhlIG9wdGlvbiBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlcywgZGVmYXVsdGluZyB0byAnZ3JvdXAnIGlmIG5vIHZhbHVlCitpcyBnaXZlbjoKKysKKy0tCisndW1hc2snIChvciAnZmFsc2UnKTo6CisKK1VzZSBwZXJtaXNzaW9ucyByZXBvcnRlZCBieSB1bWFzaygyKS4gVGhlIGRlZmF1bHQsIHdoZW4gYC0tc2hhcmVkYCBpcyBub3QKK3NwZWNpZmllZC4KKworJ2dyb3VwJyAob3IgJ3RydWUnKTo6CisKK01ha2UgdGhlIHJlcG9zaXRvcnkgZ3JvdXAtd3JpdGFibGUsIChhbmQgZytzeCwgc2luY2UgdGhlIGdpdCBncm91cCBtYXkgYmUgbm90Cit0aGUgcHJpbWFyeSBncm91cCBvZiBhbGwgdXNlcnMpLiBUaGlzIGlzIHVzZWQgdG8gbG9vc2VuIHRoZSBwZXJtaXNzaW9ucyBvZiBhbgorb3RoZXJ3aXNlIHNhZmUgdW1hc2soMikgdmFsdWUuIE5vdGUgdGhhdCB0aGUgdW1hc2sgc3RpbGwgYXBwbGllcyB0byB0aGUgb3RoZXIKK3Blcm1pc3Npb24gYml0cyAoZS5nLiBpZiB1bWFzayBpcyAnMDAyMicsIHVzaW5nICdncm91cCcgd2lsbCBub3QgcmVtb3ZlIHJlYWQKK3ByaXZpbGVnZXMgZnJvbSBvdGhlciAobm9uLWdyb3VwKSB1c2VycykuIFNlZSAnMHh4eCcgZm9yIGhvdyB0byBleGFjdGx5IHNwZWNpZnkKK3RoZSByZXBvc2l0b3J5IHBlcm1pc3Npb25zLgorCisnYWxsJyAob3IgJ3dvcmxkJyBvciAnZXZlcnlib2R5Jyk6OgorCitTYW1lIGFzICdncm91cCcsIGJ1dCBtYWtlIHRoZSByZXBvc2l0b3J5IHJlYWRhYmxlIGJ5IGFsbCB1c2Vycy4KKworJzB4eHgnOjoKKworJzB4eHgnIGlzIGFuIG9jdGFsIG51bWJlciBhbmQgZWFjaCBmaWxlIHdpbGwgaGF2ZSBtb2RlICcweHh4Jy4gJzB4eHgnIHdpbGwKK292ZXJyaWRlIHVzZXJzJyB1bWFzaygyKSB2YWx1ZSAoYW5kIG5vdCBvbmx5IGxvb3NlbiBwZXJtaXNzaW9ucyBhcyAnZ3JvdXAnIGFuZAorJ2FsbCcgZG9lcykuICcwNjQwJyB3aWxsIGNyZWF0ZSBhIHJlcG9zaXRvcnkgd2hpY2ggaXMgZ3JvdXAtcmVhZGFibGUsIGJ1dCBub3QKK2dyb3VwLXdyaXRhYmxlIG9yIGFjY2Vzc2libGUgdG8gb3RoZXJzLiAnMDY2MCcgd2lsbCBjcmVhdGUgYSByZXBvIHRoYXQgaXMKK3JlYWRhYmxlIGFuZCB3cml0YWJsZSB0byB0aGUgY3VycmVudCB1c2VyIGFuZCBncm91cCwgYnV0IGluYWNjZXNzaWJsZSB0byBvdGhlcnMuCistLQorCitCeSBkZWZhdWx0LCB0aGUgY29uZmlndXJhdGlvbiBmbGFnIGByZWNlaXZlLmRlbnlOb25GYXN0Rm9yd2FyZHNgIGlzIGVuYWJsZWQKK2luIHNoYXJlZCByZXBvc2l0b3JpZXMsIHNvIHRoYXQgeW91IGNhbm5vdCBmb3JjZSBhIG5vbiBmYXN0LWZvcndhcmRpbmcgcHVzaAoraW50byBpdC4KKworSWYgeW91IHByb3ZpZGUgYSAnZGlyZWN0b3J5JywgdGhlIGNvbW1hbmQgaXMgcnVuIGluc2lkZSBpdC4gSWYgdGhpcyBkaXJlY3RvcnkKK2RvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuCisKK1RFTVBMQVRFIERJUkVDVE9SWQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiB0aGUgdGVtcGxhdGUgZGlyZWN0b3J5IHdob3NlIG5hbWUgZG8gbm90IHN0YXJ0IHdpdGggYQorZG90IHdpbGwgYmUgY29waWVkIHRvIHRoZSBgJEdJVF9ESVJgIGFmdGVyIGl0IGlzIGNyZWF0ZWQuCisKK1RoZSB0ZW1wbGF0ZSBkaXJlY3Rvcnkgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAoaW4gb3JkZXIpOgorCisgLSB0aGUgYXJndW1lbnQgZ2l2ZW4gd2l0aCB0aGUgYC0tdGVtcGxhdGVgIG9wdGlvbjsKKworIC0gdGhlIGNvbnRlbnRzIG9mIHRoZSBgJEdJVF9URU1QTEFURV9ESVJgIGVudmlyb25tZW50IHZhcmlhYmxlOworCisgLSB0aGUgYGluaXQudGVtcGxhdGVEaXJgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU7IG9yCisKKyAtIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGRpcmVjdG9yeTogYC91c3Ivc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzYC4KKworVGhlIGRlZmF1bHQgdGVtcGxhdGUgZGlyZWN0b3J5IGluY2x1ZGVzIHNvbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSwgc3VnZ2VzdGVkCisiZXhjbHVkZSBwYXR0ZXJucyIgKHNlZSBsaW5rZ2l0OmdpdGlnbm9yZVs1XSksIGFuZCBzYW1wbGUgaG9vayBmaWxlcy4KKworVGhlIHNhbXBsZSBob29rcyBhcmUgYWxsIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRvIGVuYWJsZSBvbmUgb2YgdGhlCitzYW1wbGUgaG9va3MgcmVuYW1lIGl0IGJ5IHJlbW92aW5nIGl0cyBgLnNhbXBsZWAgc3VmZml4LgorCitTZWUgbGlua2dpdDpnaXRob29rc1s1XSBmb3IgbW9yZSBnZW5lcmFsIGluZm8gb24gaG9vayBleGVjdXRpb24uCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitTdGFydCBhIG5ldyBHaXQgcmVwb3NpdG9yeSBmb3IgYW4gZXhpc3RpbmcgY29kZSBiYXNlOjoKKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgY2QgL3BhdGgvdG8vbXkvY29kZWJhc2UKKyQgZ2l0IGluaXQgICAgICA8MT4KKyQgZ2l0IGFkZCAuICAgICA8Mj4KKyQgZ2l0IGNvbW1pdCAgICA8Mz4KKy0tLS0tLS0tLS0tLS0tLS0KKysKKzwxPiBDcmVhdGUgYSAvcGF0aC90by9teS9jb2RlYmFzZS8uZ2l0IGRpcmVjdG9yeS4KKzwyPiBBZGQgYWxsIGV4aXN0aW5nIGZpbGVzIHRvIHRoZSBpbmRleC4KKzwzPiBSZWNvcmQgdGhlIHByaXN0aW5lIHN0YXRlIGFzIHRoZSBmaXJzdCBjb21taXQgaW4gdGhlIGhpc3RvcnkuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NGZlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbnN0YXdlYi50eHQKQEAgLTAsMCArMSw5NCBAQAorZ2l0LWluc3Rhd2ViKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWluc3Rhd2ViIC0gSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGluc3Rhd2ViJyBbLS1sb2NhbF0gWy0taHR0cGQ9PGh0dHBkPl0gWy0tcG9ydD08cG9ydD5dCisgICAgICAgICAgICAgICBbLS1icm93c2VyPTxicm93c2VyPl0KKydnaXQgaW5zdGF3ZWInIFstLXN0YXJ0XSBbLS1zdG9wXSBbLS1yZXN0YXJ0XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0Egc2ltcGxlIHNjcmlwdCB0byBzZXQgdXAgYGdpdHdlYmAgYW5kIGEgd2ViIHNlcnZlciBmb3IgYnJvd3NpbmcgdGhlIGxvY2FsCityZXBvc2l0b3J5LgorCitPUFRJT05TCistLS0tLS0tCisKKy1sOjoKKy0tbG9jYWw6OgorCU9ubHkgYmluZCB0aGUgd2ViIHNlcnZlciB0byB0aGUgbG9jYWwgSVAgKDEyNy4wLjAuMSkuCisKKy1kOjoKKy0taHR0cGQ6OgorCVRoZSBIVFRQIGRhZW1vbiBjb21tYW5kLWxpbmUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLgorCUNvbW1hbmQtbGluZSBvcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgaGVyZSwgYW5kIHRoZQorCWNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQtbGluZS4KKwlDdXJyZW50bHkgYXBhY2hlMiwgbGlnaHR0cGQsIG1vbmdvb3NlLCBwbGFja3VwLCBweXRob24gYW5kCisJd2VicmljayBhcmUgc3VwcG9ydGVkLgorCShEZWZhdWx0OiBsaWdodHRwZCkKKworLW06OgorLS1tb2R1bGUtcGF0aDo6CisJVGhlIG1vZHVsZSBwYXRoIChvbmx5IG5lZWRlZCBpZiBodHRwZCBpcyBBcGFjaGUpLgorCShEZWZhdWx0OiAvdXNyL2xpYi9hcGFjaGUyL21vZHVsZXMpCisKKy1wOjoKKy0tcG9ydDo6CisJVGhlIHBvcnQgbnVtYmVyIHRvIGJpbmQgdGhlIGh0dHBkIHRvLiAgKERlZmF1bHQ6IDEyMzQpCisKKy1iOjoKKy0tYnJvd3Nlcjo6CisJVGhlIHdlYiBicm93c2VyIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gdmlldyB0aGUgZ2l0d2ViCisJcGFnZS4gVGhpcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgJ2dpdCB3ZWJ7bGl0ZGR9YnJvd3NlJyBoZWxwZXIKKwlzY3JpcHQgYWxvbmcgd2l0aCB0aGUgVVJMIG9mIHRoZSBnaXR3ZWIgaW5zdGFuY2UuIFNlZQorCWxpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4gSWYKKwl0aGUgc2NyaXB0IGZhaWxzLCB0aGUgVVJMIHdpbGwgYmUgcHJpbnRlZCB0byBzdGRvdXQuCisKK3N0YXJ0OjoKKy0tc3RhcnQ6OgorCVN0YXJ0IHRoZSBodHRwZCBpbnN0YW5jZSBhbmQgZXhpdC4gIFJlZ2VuZXJhdGUgY29uZmlndXJhdGlvbiBmaWxlcworCWFzIG5lY2Vzc2FyeSBmb3Igc3Bhd25pbmcgYSBuZXcgaW5zdGFuY2UuCisKK3N0b3A6OgorLS1zdG9wOjoKKwlTdG9wIHRoZSBodHRwZCBpbnN0YW5jZSBhbmQgZXhpdC4gIFRoaXMgZG9lcyBub3QgZ2VuZXJhdGUKKwlhbnkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHNwYXduaW5nIGEgbmV3IGluc3RhbmNlLAorCW5vciBkb2VzIGl0IGNsb3NlIHRoZSBicm93c2VyLgorCityZXN0YXJ0OjoKKy0tcmVzdGFydDo6CisJUmVzdGFydCB0aGUgaHR0cGQgaW5zdGFuY2UgYW5kIGV4aXQuICBSZWdlbmVyYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMKKwlhcyBuZWNlc3NhcnkgZm9yIHNwYXduaW5nIGEgbmV3IGluc3RhbmNlLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK1lvdSBtYXkgc3BlY2lmeSBjb25maWd1cmF0aW9uIGluIHlvdXIgLmdpdC9jb25maWcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tpbnN0YXdlYl0KKwlsb2NhbCA9IHRydWUKKwlodHRwZCA9IGFwYWNoZTIgLWYKKwlwb3J0ID0gNDMyMQorCWJyb3dzZXIgPSBrb25xdWVyb3IKKwltb2R1bGVQYXRoID0gL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBpbnN0YXdlYi5icm93c2VyYCBpcyBub3Qgc2V0LAorYHdlYi5icm93c2VyYCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBpZiBpdCBpcyBkZWZpbmVkLiBTZWUKK2xpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHdlYlsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWludGVycHJldC10cmFpbGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbnRlcnByZXQtdHJhaWxlcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZWM2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbnRlcnByZXQtdHJhaWxlcnMudHh0CkBAIC0wLDAgKzEsMzkwIEBACitnaXQtaW50ZXJwcmV0LXRyYWlsZXJzKDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1pbnRlcnByZXQtdHJhaWxlcnMgLSBBZGQgb3IgcGFyc2Ugc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBjb21taXQgbWVzc2FnZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGludGVycHJldC10cmFpbGVycycgWzxvcHRpb25zPl0gWygtLXRyYWlsZXIgPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0KKydnaXQgaW50ZXJwcmV0LXRyYWlsZXJzJyBbPG9wdGlvbnM+XSBbLS1wYXJzZV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitIZWxwIHBhcnNpbmcgb3IgYWRkaW5nICd0cmFpbGVycycgbGluZXMsIHRoYXQgbG9vayBzaW1pbGFyIHRvIFJGQyA4MjIgZS1tYWlsCitoZWFkZXJzLCBhdCB0aGUgZW5kIG9mIHRoZSBvdGhlcndpc2UgZnJlZS1mb3JtIHBhcnQgb2YgYSBjb21taXQKK21lc3NhZ2UuCisKK1RoaXMgY29tbWFuZCByZWFkcyBzb21lIHBhdGNoZXMgb3IgY29tbWl0IG1lc3NhZ2VzIGZyb20gZWl0aGVyIHRoZQorPGZpbGU+IGFyZ3VtZW50cyBvciB0aGUgc3RhbmRhcmQgaW5wdXQgaWYgbm8gPGZpbGU+IGlzIHNwZWNpZmllZC4gSWYKK2AtLXBhcnNlYCBpcyBzcGVjaWZpZWQsIHRoZSBvdXRwdXQgY29uc2lzdHMgb2YgdGhlIHBhcnNlZCB0cmFpbGVycy4KKworT3RoZXJ3aXNlLCB0aGlzIGNvbW1hbmQgYXBwbGllcyB0aGUgYXJndW1lbnRzIHBhc3NlZCB1c2luZyB0aGUKK2AtLXRyYWlsZXJgIG9wdGlvbiwgaWYgYW55LCB0byB0aGUgY29tbWl0IG1lc3NhZ2UgcGFydCBvZiBlYWNoIGlucHV0CitmaWxlLiBUaGUgcmVzdWx0IGlzIGVtaXR0ZWQgb24gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworU29tZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBjb250cm9sIHRoZSB3YXkgdGhlIGAtLXRyYWlsZXJgIGFyZ3VtZW50cworYXJlIGFwcGxpZWQgdG8gZWFjaCBjb21taXQgbWVzc2FnZSBhbmQgdGhlIHdheSBhbnkgZXhpc3RpbmcgdHJhaWxlciBpbgordGhlIGNvbW1pdCBtZXNzYWdlIGlzIGNoYW5nZWQuIFRoZXkgYWxzbyBtYWtlIGl0IHBvc3NpYmxlIHRvCithdXRvbWF0aWNhbGx5IGFkZCBzb21lIHRyYWlsZXJzLgorCitCeSBkZWZhdWx0LCBhICc8dG9rZW4+PTx2YWx1ZT4nIG9yICc8dG9rZW4+Ojx2YWx1ZT4nIGFyZ3VtZW50IGdpdmVuCit1c2luZyBgLS10cmFpbGVyYCB3aWxsIGJlIGFwcGVuZGVkIGFmdGVyIHRoZSBleGlzdGluZyB0cmFpbGVycyBvbmx5IGlmCit0aGUgbGFzdCB0cmFpbGVyIGhhcyBhIGRpZmZlcmVudCAoPHRva2VuPiwgPHZhbHVlPikgcGFpciAob3IgaWYgdGhlcmUKK2lzIG5vIGV4aXN0aW5nIHRyYWlsZXIpLiBUaGUgPHRva2VuPiBhbmQgPHZhbHVlPiBwYXJ0cyB3aWxsIGJlIHRyaW1tZWQKK3RvIHJlbW92ZSBzdGFydGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYW5kIHRoZSByZXN1bHRpbmcgdHJpbW1lZAorPHRva2VuPiBhbmQgPHZhbHVlPiB3aWxsIGFwcGVhciBpbiB0aGUgbWVzc2FnZSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordG9rZW46IHZhbHVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtZWFucyB0aGF0IHRoZSB0cmltbWVkIDx0b2tlbj4gYW5kIDx2YWx1ZT4gd2lsbCBiZSBzZXBhcmF0ZWQgYnkKK2AnOiAnYCAob25lIGNvbG9uIGZvbGxvd2VkIGJ5IG9uZSBzcGFjZSkuCisKK0J5IGRlZmF1bHQgdGhlIG5ldyB0cmFpbGVyIHdpbGwgYXBwZWFyIGF0IHRoZSBlbmQgb2YgYWxsIHRoZSBleGlzdGluZwordHJhaWxlcnMuIElmIHRoZXJlIGlzIG5vIGV4aXN0aW5nIHRyYWlsZXIsIHRoZSBuZXcgdHJhaWxlciB3aWxsIGFwcGVhcgorYWZ0ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIHBhcnQgb2YgdGhlIG91dHB1dCwgYW5kLCBpZiB0aGVyZSBpcyBubyBsaW5lCit3aXRoIG9ubHkgc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIHBhcnQsIG9uZSBibGFuayBsaW5lCit3aWxsIGJlIGFkZGVkIGJlZm9yZSB0aGUgbmV3IHRyYWlsZXIuCisKK0V4aXN0aW5nIHRyYWlsZXJzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgbWVzc2FnZSBieSBsb29raW5nIGZvcgorYSBncm91cCBvZiBvbmUgb3IgbW9yZSBsaW5lcyB0aGF0IChpKSBpcyBhbGwgdHJhaWxlcnMsIG9yIChpaSkgY29udGFpbnMgYXQKK2xlYXN0IG9uZSBHaXQtZ2VuZXJhdGVkIG9yIHVzZXItY29uZmlndXJlZCB0cmFpbGVyIGFuZCBjb25zaXN0cyBvZiBhdAorbGVhc3QgMjUlIHRyYWlsZXJzLgorVGhlIGdyb3VwIG11c3QgYmUgcHJlY2VkZWQgYnkgb25lIG9yIG1vcmUgZW1wdHkgKG9yIHdoaXRlc3BhY2Utb25seSkgbGluZXMuCitUaGUgZ3JvdXAgbXVzdCBlaXRoZXIgYmUgYXQgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSBvciBiZSB0aGUgbGFzdAorbm9uLXdoaXRlc3BhY2UgbGluZXMgYmVmb3JlIGEgbGluZSB0aGF0IHN0YXJ0cyB3aXRoICctLS0nIChmb2xsb3dlZCBieSBhCitzcGFjZSBvciB0aGUgZW5kIG9mIHRoZSBsaW5lKS4gU3VjaCB0aHJlZSBtaW51cyBzaWducyBzdGFydCB0aGUgcGF0Y2gKK3BhcnQgb2YgdGhlIG1lc3NhZ2UuIFNlZSBhbHNvIGAtLW5vLWRpdmlkZXJgIGJlbG93LgorCitXaGVuIHJlYWRpbmcgdHJhaWxlcnMsIHRoZXJlIGNhbiBiZSB3aGl0ZXNwYWNlcyBhZnRlciB0aGUKK3Rva2VuLCB0aGUgc2VwYXJhdG9yIGFuZCB0aGUgdmFsdWUuIFRoZXJlIGNhbiBhbHNvIGJlIHdoaXRlc3BhY2VzCitpbnNpZGUgdGhlIHRva2VuIGFuZCB0aGUgdmFsdWUuIFRoZSB2YWx1ZSBtYXkgYmUgc3BsaXQgb3ZlciBtdWx0aXBsZSBsaW5lcyB3aXRoCitlYWNoIHN1YnNlcXVlbnQgbGluZSBzdGFydGluZyB3aXRoIHdoaXRlc3BhY2UsIGxpa2UgdGhlICJmb2xkaW5nIiBpbiBSRkMgODIyLgorCitOb3RlIHRoYXQgJ3RyYWlsZXJzJyBkbyBub3QgZm9sbG93IGFuZCBhcmUgbm90IGludGVuZGVkIHRvIGZvbGxvdyBtYW55CitydWxlcyBmb3IgUkZDIDgyMiBoZWFkZXJzLiBGb3IgZXhhbXBsZSB0aGV5IGRvIG5vdCBmb2xsb3cKK3RoZSBlbmNvZGluZyBydWxlcyBhbmQgcHJvYmFibHkgbWFueSBvdGhlciBydWxlcy4KKworT1BUSU9OUworLS0tLS0tLQorLS1pbi1wbGFjZTo6CisJRWRpdCB0aGUgZmlsZXMgaW4gcGxhY2UuCisKKy0tdHJpbS1lbXB0eTo6CisJSWYgdGhlIDx2YWx1ZT4gcGFydCBvZiBhbnkgdHJhaWxlciBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UsCisJdGhlIHdob2xlIHRyYWlsZXIgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHJlc3VsdGluZyBtZXNzYWdlLgorCVRoaXMgYXBwbGllcyB0byBleGlzdGluZyB0cmFpbGVycyBhcyB3ZWxsIGFzIG5ldyB0cmFpbGVycy4KKworLS10cmFpbGVyIDx0b2tlbj5bKD18Oik8dmFsdWU+XTo6CisJU3BlY2lmeSBhICg8dG9rZW4+LCA8dmFsdWU+KSBwYWlyIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgYXMgYQorCXRyYWlsZXIgdG8gdGhlIGlucHV0IG1lc3NhZ2VzLiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMKKwljb21tYW5kLgorCistLXdoZXJlIDxwbGFjZW1lbnQ+OjoKKy0tbm8td2hlcmU6OgorCVNwZWNpZnkgd2hlcmUgYWxsIG5ldyB0cmFpbGVycyB3aWxsIGJlIGFkZGVkLiAgQSBzZXR0aW5nCisJcHJvdmlkZWQgd2l0aCAnLS13aGVyZScgb3ZlcnJpZGVzIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCWFuZCBhcHBsaWVzIHRvIGFsbCAnLS10cmFpbGVyJyBvcHRpb25zIHVudGlsIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YKKwknLS13aGVyZScgb3IgJy0tbm8td2hlcmUnLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBhZnRlcmAsIGBiZWZvcmVgLAorCWBlbmRgIG9yIGBzdGFydGAuCisKKy0taWYtZXhpc3RzIDxhY3Rpb24+OjoKKy0tbm8taWYtZXhpc3RzOjoKKwlTcGVjaWZ5IHdoYXQgYWN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIHdoZW4gdGhlcmUgaXMgYWxyZWFkeSBhdAorCWxlYXN0IG9uZSB0cmFpbGVyIHdpdGggdGhlIHNhbWUgPHRva2VuPiBpbiB0aGUgbWVzc2FnZS4gIEEgc2V0dGluZworCXByb3ZpZGVkIHdpdGggJy0taWYtZXhpc3RzJyBvdmVycmlkZXMgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJYW5kIGFwcGxpZXMgdG8gYWxsICctLXRyYWlsZXInIG9wdGlvbnMgdW50aWwgdGhlIG5leHQgb2NjdXJyZW5jZSBvZgorCSctLWlmLWV4aXN0cycgb3IgJy0tbm8taWYtZXhpc3RzJy4gUG9zc2libGUgYWN0aW9ucyBhcmUgYGFkZElmRGlmZmVyZW50YCwKKwlgYWRkSWZEaWZmZXJlbnROZWlnaGJvcmAsIGBhZGRgLCBgcmVwbGFjZWAgYW5kIGBkb05vdGhpbmdgLgorCistLWlmLW1pc3NpbmcgPGFjdGlvbj46OgorLS1uby1pZi1taXNzaW5nOjoKKwlTcGVjaWZ5IHdoYXQgYWN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIHdoZW4gdGhlcmUgaXMgbm8gb3RoZXIKKwl0cmFpbGVyIHdpdGggdGhlIHNhbWUgPHRva2VuPiBpbiB0aGUgbWVzc2FnZS4gIEEgc2V0dGluZworCXByb3ZpZGVkIHdpdGggJy0taWYtbWlzc2luZycgb3ZlcnJpZGVzIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCWFuZCBhcHBsaWVzIHRvIGFsbCAnLS10cmFpbGVyJyBvcHRpb25zIHVudGlsIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YKKwknLS1pZi1taXNzaW5nJyBvciAnLS1uby1pZi1taXNzaW5nJy4gUG9zc2libGUgYWN0aW9ucyBhcmUgYGRvTm90aGluZ2AKKwlvciBgYWRkYC4KKworLS1vbmx5LXRyYWlsZXJzOjoKKwlPdXRwdXQgb25seSB0aGUgdHJhaWxlcnMsIG5vdCBhbnkgb3RoZXIgcGFydHMgb2YgdGhlIGlucHV0LgorCistLW9ubHktaW5wdXQ6OgorCU91dHB1dCBvbmx5IHRyYWlsZXJzIHRoYXQgZXhpc3QgaW4gdGhlIGlucHV0OyBkbyBub3QgYWRkIGFueQorCWZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBieSBmb2xsb3dpbmcgY29uZmlndXJlZCBgdHJhaWxlci4qYAorCXJ1bGVzLgorCistLXVuZm9sZDo6CisJUmVtb3ZlIGFueSB3aGl0ZXNwYWNlLWNvbnRpbnVhdGlvbiBpbiB0cmFpbGVycywgc28gdGhhdCBlYWNoCisJdHJhaWxlciBhcHBlYXJzIG9uIGEgbGluZSBieSBpdHNlbGYgd2l0aCBpdHMgZnVsbCBjb250ZW50LgorCistLXBhcnNlOjoKKwlBIGNvbnZlbmllbmNlIGFsaWFzIGZvciBgLS1vbmx5LXRyYWlsZXJzIC0tb25seS1pbnB1dAorCS0tdW5mb2xkYC4KKworLS1uby1kaXZpZGVyOjoKKwlEbyBub3QgdHJlYXQgYC0tLWAgYXMgdGhlIGVuZCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuIFVzZSB0aGlzCisJd2hlbiB5b3Uga25vdyB5b3VyIGlucHV0IGNvbnRhaW5zIGp1c3QgdGhlIGNvbW1pdCBtZXNzYWdlIGl0c2VsZgorCShhbmQgbm90IGFuIGVtYWlsIG9yIHRoZSBvdXRwdXQgb2YgYGdpdCBmb3JtYXQtcGF0Y2hgKS4KKworQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RyYWlsZXIuc2VwYXJhdG9yczo6CisJVGhpcyBvcHRpb24gdGVsbHMgd2hpY2ggY2hhcmFjdGVycyBhcmUgcmVjb2duaXplZCBhcyB0cmFpbGVyCisJc2VwYXJhdG9ycy4gQnkgZGVmYXVsdCBvbmx5ICc6JyBpcyByZWNvZ25pemVkIGFzIGEgdHJhaWxlcgorCXNlcGFyYXRvciwgZXhjZXB0IHRoYXQgJz0nIGlzIGFsd2F5cyBhY2NlcHRlZCBvbiB0aGUgY29tbWFuZAorCWxpbmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBnaXQgY29tbWFuZHMuCisrCitUaGUgZmlyc3QgY2hhcmFjdGVyIGdpdmVuIGJ5IHRoaXMgb3B0aW9uIHdpbGwgYmUgdGhlIGRlZmF1bHQgY2hhcmFjdGVyCit1c2VkIHdoZW4gYW5vdGhlciBzZXBhcmF0b3IgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgY29uZmlnIGZvciB0aGlzCit0cmFpbGVyLgorKworRm9yIGV4YW1wbGUsIGlmIHRoZSB2YWx1ZSBmb3IgdGhpcyBvcHRpb24gaXMgIiU9JCIsIHRoZW4gb25seSBsaW5lcwordXNpbmcgdGhlIGZvcm1hdCAnPHRva2VuPjxzZXA+PHZhbHVlPicgd2l0aCA8c2VwPiBjb250YWluaW5nICclJywgJz0nCitvciAnJCcgYW5kIHRoZW4gc3BhY2VzIHdpbGwgYmUgY29uc2lkZXJlZCB0cmFpbGVycy4gQW5kICclJyB3aWxsIGJlCit0aGUgZGVmYXVsdCBzZXBhcmF0b3IgdXNlZCwgc28gYnkgZGVmYXVsdCB0cmFpbGVycyB3aWxsIGFwcGVhciBsaWtlOgorJzx0b2tlbj4lIDx2YWx1ZT4nIChvbmUgcGVyY2VudCBzaWduIGFuZCBvbmUgc3BhY2Ugd2lsbCBhcHBlYXIgYmV0d2VlbgordGhlIHRva2VuIGFuZCB0aGUgdmFsdWUpLgorCit0cmFpbGVyLndoZXJlOjoKKwlUaGlzIG9wdGlvbiB0ZWxscyB3aGVyZSBhIG5ldyB0cmFpbGVyIHdpbGwgYmUgYWRkZWQuCisrCitUaGlzIGNhbiBiZSBgZW5kYCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIGBzdGFydGAsIGBhZnRlcmAgb3IgYGJlZm9yZWAuCisrCitJZiBpdCBpcyBgZW5kYCwgdGhlbiBlYWNoIG5ldyB0cmFpbGVyIHdpbGwgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlCitleGlzdGluZyB0cmFpbGVycy4KKysKK0lmIGl0IGlzIGBzdGFydGAsIHRoZW4gZWFjaCBuZXcgdHJhaWxlciB3aWxsIGFwcGVhciBhdCB0aGUgc3RhcnQsCitpbnN0ZWFkIG9mIHRoZSBlbmQsIG9mIHRoZSBleGlzdGluZyB0cmFpbGVycy4KKysKK0lmIGl0IGlzIGBhZnRlcmAsIHRoZW4gZWFjaCBuZXcgdHJhaWxlciB3aWxsIGFwcGVhciBqdXN0IGFmdGVyIHRoZQorbGFzdCB0cmFpbGVyIHdpdGggdGhlIHNhbWUgPHRva2VuPi4KKysKK0lmIGl0IGlzIGBiZWZvcmVgLCB0aGVuIGVhY2ggbmV3IHRyYWlsZXIgd2lsbCBhcHBlYXIganVzdCBiZWZvcmUgdGhlCitmaXJzdCB0cmFpbGVyIHdpdGggdGhlIHNhbWUgPHRva2VuPi4KKwordHJhaWxlci5pZmV4aXN0czo6CisJVGhpcyBvcHRpb24gbWFrZXMgaXQgcG9zc2libGUgdG8gY2hvb3NlIHdoYXQgYWN0aW9uIHdpbGwgYmUKKwlwZXJmb3JtZWQgd2hlbiB0aGVyZSBpcyBhbHJlYWR5IGF0IGxlYXN0IG9uZSB0cmFpbGVyIHdpdGggdGhlCisJc2FtZSA8dG9rZW4+IGluIHRoZSBtZXNzYWdlLgorKworVGhlIHZhbGlkIHZhbHVlcyBmb3IgdGhpcyBvcHRpb24gYXJlOiBgYWRkSWZEaWZmZXJlbnROZWlnaGJvcmAgKHRoaXMKK2lzIHRoZSBkZWZhdWx0KSwgYGFkZElmRGlmZmVyZW50YCwgYGFkZGAsIGByZXBsYWNlYCBvciBgZG9Ob3RoaW5nYC4KKysKK1dpdGggYGFkZElmRGlmZmVyZW50TmVpZ2hib3JgLCBhIG5ldyB0cmFpbGVyIHdpbGwgYmUgYWRkZWQgb25seSBpZiBubwordHJhaWxlciB3aXRoIHRoZSBzYW1lICg8dG9rZW4+LCA8dmFsdWU+KSBwYWlyIGlzIGFib3ZlIG9yIGJlbG93IHRoZSBsaW5lCit3aGVyZSB0aGUgbmV3IHRyYWlsZXIgd2lsbCBiZSBhZGRlZC4KKysKK1dpdGggYGFkZElmRGlmZmVyZW50YCwgYSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkIG9ubHkgaWYgbm8gdHJhaWxlcgord2l0aCB0aGUgc2FtZSAoPHRva2VuPiwgPHZhbHVlPikgcGFpciBpcyBhbHJlYWR5IGluIHRoZSBtZXNzYWdlLgorKworV2l0aCBgYWRkYCwgYSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkLCBldmVuIGlmIHNvbWUgdHJhaWxlcnMgd2l0aAordGhlIHNhbWUgKDx0b2tlbj4sIDx2YWx1ZT4pIHBhaXIgYXJlIGFscmVhZHkgaW4gdGhlIG1lc3NhZ2UuCisrCitXaXRoIGByZXBsYWNlYCwgYW4gZXhpc3RpbmcgdHJhaWxlciB3aXRoIHRoZSBzYW1lIDx0b2tlbj4gd2lsbCBiZQorZGVsZXRlZCBhbmQgdGhlIG5ldyB0cmFpbGVyIHdpbGwgYmUgYWRkZWQuIFRoZSBkZWxldGVkIHRyYWlsZXIgd2lsbCBiZQordGhlIGNsb3Nlc3Qgb25lICh3aXRoIHRoZSBzYW1lIDx0b2tlbj4pIHRvIHRoZSBwbGFjZSB3aGVyZSB0aGUgbmV3IG9uZQord2lsbCBiZSBhZGRlZC4KKysKK1dpdGggYGRvTm90aGluZ2AsIG5vdGhpbmcgd2lsbCBiZSBkb25lOyB0aGF0IGlzIG5vIG5ldyB0cmFpbGVyIHdpbGwgYmUKK2FkZGVkIGlmIHRoZXJlIGlzIGFscmVhZHkgb25lIHdpdGggdGhlIHNhbWUgPHRva2VuPiBpbiB0aGUgbWVzc2FnZS4KKwordHJhaWxlci5pZm1pc3Npbmc6OgorCVRoaXMgb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNob29zZSB3aGF0IGFjdGlvbiB3aWxsIGJlCisJcGVyZm9ybWVkIHdoZW4gdGhlcmUgaXMgbm90IHlldCBhbnkgdHJhaWxlciB3aXRoIHRoZSBzYW1lCisJPHRva2VuPiBpbiB0aGUgbWVzc2FnZS4KKysKK1RoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uIGFyZTogYGFkZGAgKHRoaXMgaXMgdGhlIGRlZmF1bHQpIGFuZAorYGRvTm90aGluZ2AuCisrCitXaXRoIGBhZGRgLCBhIG5ldyB0cmFpbGVyIHdpbGwgYmUgYWRkZWQuCisrCitXaXRoIGBkb05vdGhpbmdgLCBub3RoaW5nIHdpbGwgYmUgZG9uZS4KKwordHJhaWxlci48dG9rZW4+LmtleTo6CisJVGhpcyBga2V5YCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiA8dG9rZW4+IGluIHRoZSB0cmFpbGVyLiBBdAorCXRoZSBlbmQgb2YgdGhpcyBrZXksIGEgc2VwYXJhdG9yIGNhbiBhcHBlYXIgYW5kIHRoZW4gc29tZQorCXNwYWNlIGNoYXJhY3RlcnMuIEJ5IGRlZmF1bHQgdGhlIG9ubHkgdmFsaWQgc2VwYXJhdG9yIGlzICc6JywKKwlidXQgdGhpcyBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgYHRyYWlsZXIuc2VwYXJhdG9yc2AgY29uZmlnCisJdmFyaWFibGUuCisrCitJZiB0aGVyZSBpcyBhIHNlcGFyYXRvciwgdGhlbiB0aGUga2V5IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIGJvdGggdGhlCis8dG9rZW4+IGFuZCB0aGUgZGVmYXVsdCBzZXBhcmF0b3Igd2hlbiBhZGRpbmcgdGhlIHRyYWlsZXIuCisKK3RyYWlsZXIuPHRva2VuPi53aGVyZTo6CisJVGhpcyBvcHRpb24gdGFrZXMgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSAndHJhaWxlci53aGVyZScKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGFuZCBpdCBvdmVycmlkZXMgd2hhdCBpcyBzcGVjaWZpZWQgYnkKKwl0aGF0IG9wdGlvbiBmb3IgdHJhaWxlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIDx0b2tlbj4uCisKK3RyYWlsZXIuPHRva2VuPi5pZmV4aXN0czo6CisJVGhpcyBvcHRpb24gdGFrZXMgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSAndHJhaWxlci5pZmV4aXN0cycKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGFuZCBpdCBvdmVycmlkZXMgd2hhdCBpcyBzcGVjaWZpZWQgYnkKKwl0aGF0IG9wdGlvbiBmb3IgdHJhaWxlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIDx0b2tlbj4uCisKK3RyYWlsZXIuPHRva2VuPi5pZm1pc3Npbmc6OgorCVRoaXMgb3B0aW9uIHRha2VzIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUgJ3RyYWlsZXIuaWZtaXNzaW5nJworCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYW5kIGl0IG92ZXJyaWRlcyB3aGF0IGlzIHNwZWNpZmllZCBieQorCXRoYXQgb3B0aW9uIGZvciB0cmFpbGVycyB3aXRoIHRoZSBzcGVjaWZpZWQgPHRva2VuPi4KKwordHJhaWxlci48dG9rZW4+LmNvbW1hbmQ6OgorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBzaGVsbCBjb21tYW5kIHRoYXQgd2lsbAorCWJlIGNhbGxlZCB0byBhdXRvbWF0aWNhbGx5IGFkZCBvciBtb2RpZnkgYSB0cmFpbGVyIHdpdGggdGhlCisJc3BlY2lmaWVkIDx0b2tlbj4uCisrCitXaGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIGJlaGF2aW9yIGlzIGFzIGlmIGEgc3BlY2lhbAorJzx0b2tlbj49PHZhbHVlPicgYXJndW1lbnQgd2VyZSBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb21tYW5kCitsaW5lLCB3aGVyZSA8dmFsdWU+IGlzIHRha2VuIHRvIGJlIHRoZSBzdGFuZGFyZCBvdXRwdXQgb2YgdGhlCitzcGVjaWZpZWQgY29tbWFuZCB3aXRoIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHRyaW1tZWQKK29mZi4KKysKK0lmIHRoZSBjb21tYW5kIGNvbnRhaW5zIHRoZSBgJEFSR2Agc3RyaW5nLCB0aGlzIHN0cmluZyB3aWxsIGJlCityZXBsYWNlZCB3aXRoIHRoZSA8dmFsdWU+IHBhcnQgb2YgYW4gZXhpc3RpbmcgdHJhaWxlciB3aXRoIHRoZSBzYW1lCis8dG9rZW4+LCBpZiBhbnksIGJlZm9yZSB0aGUgY29tbWFuZCBpcyBsYXVuY2hlZC4KKysKK0lmIHNvbWUgJzx0b2tlbj49PHZhbHVlPicgYXJndW1lbnRzIGFyZSBhbHNvIHBhc3NlZCBvbiB0aGUgY29tbWFuZAorbGluZSwgd2hlbiBhICd0cmFpbGVyLjx0b2tlbj4uY29tbWFuZCcgaXMgY29uZmlndXJlZCwgdGhlIGNvbW1hbmQgd2lsbAorYWxzbyBiZSBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGVzZSBhcmd1bWVudHMuIEFuZCB0aGUgPHZhbHVlPiBwYXJ0IG9mCit0aGVzZSBhcmd1bWVudHMsIGlmIGFueSwgd2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlIGAkQVJHYCBzdHJpbmcgaW4KK3RoZSBjb21tYW5kLgorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBDb25maWd1cmUgYSAnc2lnbicgdHJhaWxlciB3aXRoIGEgJ1NpZ25lZC1vZmYtYnknIGtleSwgYW5kIHRoZW4KKyAgYWRkIHR3byBvZiB0aGVzZSB0cmFpbGVycyB0byBhIG1lc3NhZ2U6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24ua2V5ICJTaWduZWQtb2ZmLWJ5IgorJCBjYXQgbXNnLnR4dAorc3ViamVjdAorCittZXNzYWdlCiskIGNhdCBtc2cudHh0IHwgZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgJ3NpZ246IEFsaWNlIDxhbGljZUBleGFtcGxlLmNvbT4nIC0tdHJhaWxlciAnc2lnbjogQm9iIDxib2JAZXhhbXBsZS5jb20+Jworc3ViamVjdAorCittZXNzYWdlCisKK1NpZ25lZC1vZmYtYnk6IEFsaWNlIDxhbGljZUBleGFtcGxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEJvYiA8Ym9iQGV4YW1wbGUuY29tPgorLS0tLS0tLS0tLS0tCisKKyogVXNlIHRoZSBgLS1pbi1wbGFjZWAgb3B0aW9uIHRvIGVkaXQgYSBtZXNzYWdlIGZpbGUgaW4gcGxhY2U6CisrCistLS0tLS0tLS0tLS0KKyQgY2F0IG1zZy50eHQKK3N1YmplY3QKKworbWVzc2FnZQorCitTaWduZWQtb2ZmLWJ5OiBCb2IgPGJvYkBleGFtcGxlLmNvbT4KKyQgZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgJ0Fja2VkLWJ5OiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+JyAtLWluLXBsYWNlIG1zZy50eHQKKyQgY2F0IG1zZy50eHQKK3N1YmplY3QKKworbWVzc2FnZQorCitTaWduZWQtb2ZmLWJ5OiBCb2IgPGJvYkBleGFtcGxlLmNvbT4KK0Fja2VkLWJ5OiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+CistLS0tLS0tLS0tLS0KKworKiBFeHRyYWN0IHRoZSBsYXN0IGNvbW1pdCBhcyBhIHBhdGNoLCBhbmQgYWRkIGEgJ0NjJyBhbmQgYQorICAnUmV2aWV3ZWQtYnknIHRyYWlsZXIgdG8gaXQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCAtMQorMDAwMS1mb28ucGF0Y2gKKyQgZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgJ0NjOiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+JyAtLXRyYWlsZXIgJ1Jldmlld2VkLWJ5OiBCb2IgPGJvYkBleGFtcGxlLmNvbT4nIDAwMDEtZm9vLnBhdGNoID4wMDAxLWJhci5wYXRjaAorLS0tLS0tLS0tLS0tCisKKyogQ29uZmlndXJlIGEgJ3NpZ24nIHRyYWlsZXIgd2l0aCBhIGNvbW1hbmQgdG8gYXV0b21hdGljYWxseSBhZGQgYQorICAnU2lnbmVkLW9mZi1ieTogJyB3aXRoIHRoZSBhdXRob3IgaW5mb3JtYXRpb24gb25seSBpZiB0aGVyZSBpcyBubworICAnU2lnbmVkLW9mZi1ieTogJyBhbHJlYWR5LCBhbmQgc2hvdyBob3cgaXQgd29ya3M6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24ua2V5ICJTaWduZWQtb2ZmLWJ5OiAiCiskIGdpdCBjb25maWcgdHJhaWxlci5zaWduLmlmbWlzc2luZyBhZGQKKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uaWZleGlzdHMgZG9Ob3RoaW5nCiskIGdpdCBjb25maWcgdHJhaWxlci5zaWduLmNvbW1hbmQgJ2VjaG8gIiQoZ2l0IGNvbmZpZyB1c2VyLm5hbWUpIDwkKGdpdCBjb25maWcgdXNlci5lbWFpbCk+IicKKyQgZ2l0IGludGVycHJldC10cmFpbGVycyA8PEVPRgorPiBFT0YKKworU2lnbmVkLW9mZi1ieTogQm9iIDxib2JAZXhhbXBsZS5jb20+CiskIGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgPDxFT0YKKz4gU2lnbmVkLW9mZi1ieTogQWxpY2UgPGFsaWNlQGV4YW1wbGUuY29tPgorPiBFT0YKKworU2lnbmVkLW9mZi1ieTogQWxpY2UgPGFsaWNlQGV4YW1wbGUuY29tPgorLS0tLS0tLS0tLS0tCisKKyogQ29uZmlndXJlIGEgJ2ZpeCcgdHJhaWxlciB3aXRoIGEga2V5IHRoYXQgY29udGFpbnMgYSAnIycgYW5kIG5vCisgIHNwYWNlIGFmdGVyIHRoaXMgY2hhcmFjdGVyLCBhbmQgc2hvdyBob3cgaXQgd29ya3M6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNlcGFyYXRvcnMgIjojIgorJCBnaXQgY29uZmlnIHRyYWlsZXIuZml4LmtleSAiRml4ICMiCiskIGVjaG8gInN1YmplY3QiIHwgZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgZml4PTQyCitzdWJqZWN0CisKK0ZpeCAjNDIKKy0tLS0tLS0tLS0tLQorCisqIENvbmZpZ3VyZSBhICdzZWUnIHRyYWlsZXIgd2l0aCBhIGNvbW1hbmQgdG8gc2hvdyB0aGUgc3ViamVjdCBvZiBhCisgIGNvbW1pdCB0aGF0IGlzIHJlbGF0ZWQsIGFuZCBzaG93IGhvdyBpdCB3b3JrczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIHRyYWlsZXIuc2VlLmtleSAiU2VlLWFsc286ICIKKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNlZS5pZkV4aXN0cyAicmVwbGFjZSIKKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNlZS5pZk1pc3NpbmcgImRvTm90aGluZyIKKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNlZS5jb21tYW5kICJnaXQgbG9nIC0xIC0tb25lbGluZSAtLWZvcm1hdD1cIiVoICglcylcIiAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MTQgXCRBUkciCiskIGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgPDxFT0YKKz4gc3ViamVjdAorPiAKKz4gbWVzc2FnZQorPiAKKz4gc2VlOiBIRUFEfjIKKz4gRU9GCitzdWJqZWN0CisKK21lc3NhZ2UKKworU2VlLWFsc286IGZlMzE4NzQ4OWQ2OWM0IChzdWJqZWN0IG9mIHJlbGF0ZWQgY29tbWl0KQorLS0tLS0tLS0tLS0tCisKKyogQ29uZmlndXJlIGEgY29tbWl0IHRlbXBsYXRlIHdpdGggc29tZSB0cmFpbGVycyB3aXRoIGVtcHR5IHZhbHVlcworICAodXNpbmcgc2VkIHRvIHNob3cgYW5kIGtlZXAgdGhlIHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZQorICB0cmFpbGVycyksIHRoZW4gY29uZmlndXJlIGEgY29tbWl0LW1zZyBob29rIHRoYXQgdXNlcworICAnZ2l0IGludGVycHJldC10cmFpbGVycycgdG8gcmVtb3ZlIHRyYWlsZXJzIHdpdGggZW1wdHkgdmFsdWVzIGFuZAorICB0byBhZGQgYSAnZ2l0LXZlcnNpb24nIHRyYWlsZXI6CisrCistLS0tLS0tLS0tLS0KKyQgc2VkIC1lICdzLyBaJC8gLycgPmNvbW1pdF90ZW1wbGF0ZS50eHQgPDxFT0YKKz4gKioqc3ViamVjdCoqKgorPiAKKz4gKioqbWVzc2FnZSoqKgorPiAKKz4gRml4ZXM6IFoKKz4gQ2M6IFoKKz4gUmV2aWV3ZWQtYnk6IFoKKz4gU2lnbmVkLW9mZi1ieTogWgorPiBFT0YKKyQgZ2l0IGNvbmZpZyBjb21taXQudGVtcGxhdGUgY29tbWl0X3RlbXBsYXRlLnR4dAorJCBjYXQgPi5naXQvaG9va3MvY29tbWl0LW1zZyA8PEVPRgorPiAjIS9iaW4vc2gKKz4gZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJnaXQtdmVyc2lvbjogXCQoZ2l0IGRlc2NyaWJlKSIgIlwkMSIgPiAiXCQxLm5ldyIKKz4gbXYgIlwkMS5uZXciICJcJDEiCis+IEVPRgorJCBjaG1vZCAreCAuZ2l0L2hvb2tzL2NvbW1pdC1tc2cKKy0tLS0tLS0tLS0tLQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLCBsaW5rZ2l0OmdpdC1jb25maWdbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQwOWJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dApAQCAtMCwwICsxLDIzOSBAQAorZ2l0LWxvZygxKQorPT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbG9nIC0gU2hvdyBjb21taXQgbG9ncworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBsb2cnIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24gcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2hvd3MgdGhlIGNvbW1pdCBsb2dzLgorCitUaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlIGBnaXQgcmV2LWxpc3RgCitjb21tYW5kIHRvIGNvbnRyb2wgd2hhdCBpcyBzaG93biBhbmQgaG93LCBhbmQgb3B0aW9ucyBhcHBsaWNhYmxlIHRvCit0aGUgYGdpdCBkaWZmLSpgIGNvbW1hbmRzIHRvIGNvbnRyb2wgaG93IHRoZSBjaGFuZ2VzCitlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIGFyZSBzaG93bi4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tZm9sbG93OjoKKwlDb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcworCSh3b3JrcyBvbmx5IGZvciBhIHNpbmdsZSBmaWxlKS4KKworLS1uby1kZWNvcmF0ZTo6CistLWRlY29yYXRlWz1zaG9ydHxmdWxsfGF1dG98bm9dOjoKKwlQcmludCBvdXQgdGhlIHJlZiBuYW1lcyBvZiBhbnkgY29tbWl0cyB0aGF0IGFyZSBzaG93bi4gSWYgJ3Nob3J0JyBpcworCXNwZWNpZmllZCwgdGhlIHJlZiBuYW1lIHByZWZpeGVzICdyZWZzL2hlYWRzLycsICdyZWZzL3RhZ3MvJyBhbmQKKwkncmVmcy9yZW1vdGVzLycgd2lsbCBub3QgYmUgcHJpbnRlZC4gSWYgJ2Z1bGwnIGlzIHNwZWNpZmllZCwgdGhlCisJZnVsbCByZWYgbmFtZSAoaW5jbHVkaW5nIHByZWZpeCkgd2lsbCBiZSBwcmludGVkLiBJZiAnYXV0bycgaXMKKwlzcGVjaWZpZWQsIHRoZW4gaWYgdGhlIG91dHB1dCBpcyBnb2luZyB0byBhIHRlcm1pbmFsLCB0aGUgcmVmIG5hbWVzCisJYXJlIHNob3duIGFzIGlmICdzaG9ydCcgd2VyZSBnaXZlbiwgb3RoZXJ3aXNlIG5vIHJlZiBuYW1lcyBhcmUKKwlzaG93bi4gVGhlIGRlZmF1bHQgb3B0aW9uIGlzICdzaG9ydCcuCisKKy0tZGVjb3JhdGUtcmVmcz08cGF0dGVybj46OgorLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9PHBhdHRlcm4+OjoKKwlJZiBubyBgLS1kZWNvcmF0ZS1yZWZzYCBpcyBnaXZlbiwgcHJldGVuZCBhcyBpZiBhbGwgcmVmcyB3ZXJlCisJaW5jbHVkZWQuICBGb3IgZWFjaCBjYW5kaWRhdGUsIGRvIG5vdCB1c2UgaXQgZm9yIGRlY29yYXRpb24gaWYgaXQKKwltYXRjaGVzIGFueSBwYXR0ZXJucyBnaXZlbiB0byBgLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGVgIG9yIGlmIGl0CisJZG9lc24ndCBtYXRjaCBhbnkgb2YgdGhlIHBhdHRlcm5zIGdpdmVuIHRvIGAtLWRlY29yYXRlLXJlZnNgLgorCistLXNvdXJjZTo6CisJUHJpbnQgb3V0IHRoZSByZWYgbmFtZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHdoaWNoIGVhY2gKKwljb21taXQgd2FzIHJlYWNoZWQuCisKKy0tW25vLV11c2UtbWFpbG1hcDo6CisJVXNlIG1haWxtYXAgZmlsZSB0byBtYXAgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZXMgYW5kIGVtYWlsCisJYWRkcmVzc2VzIHRvIGNhbm9uaWNhbCByZWFsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMuIFNlZQorCWxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdLgorCistLWZ1bGwtZGlmZjo6CisJV2l0aG91dCB0aGlzIGZsYWcsIGBnaXQgbG9nIC1wIDxwYXRoPi4uLmAgc2hvd3MgY29tbWl0cyB0aGF0CisJdG91Y2ggdGhlIHNwZWNpZmllZCBwYXRocywgYW5kIGRpZmZzIGFib3V0IHRoZSBzYW1lIHNwZWNpZmllZAorCXBhdGhzLiAgV2l0aCB0aGlzLCB0aGUgZnVsbCBkaWZmIGlzIHNob3duIGZvciBjb21taXRzIHRoYXQgdG91Y2gKKwl0aGUgc3BlY2lmaWVkIHBhdGhzOyB0aGlzIG1lYW5zIHRoYXQgIjxwYXRoPi4uLiIgbGltaXRzIG9ubHkKKwljb21taXRzLCBhbmQgZG9lc24ndCBsaW1pdCBkaWZmIGZvciB0aG9zZSBjb21taXRzLgorKworTm90ZSB0aGF0IHRoaXMgYWZmZWN0cyBhbGwgZGlmZi1iYXNlZCBvdXRwdXQgdHlwZXMsIGUuZy4gdGhvc2UKK3Byb2R1Y2VkIGJ5IGAtLXN0YXRgLCBldGMuCisKKy0tbG9nLXNpemU6OgorCUluY2x1ZGUgYSBsaW5lIGBgbG9nIHNpemUgPG51bWJlcj4nJyBpbiB0aGUgb3V0cHV0IGZvciBlYWNoIGNvbW1pdCwKKwl3aGVyZSA8bnVtYmVyPiBpcyB0aGUgbGVuZ3RoIG9mIHRoYXQgY29tbWl0J3MgbWVzc2FnZSBpbiBieXRlcy4KKwlJbnRlbmRlZCB0byBzcGVlZCB1cCB0b29scyB0aGF0IHJlYWQgbG9nIG1lc3NhZ2VzIGZyb20gYGdpdCBsb2dgCisJb3V0cHV0IGJ5IGFsbG93aW5nIHRoZW0gdG8gYWxsb2NhdGUgc3BhY2UgaW4gYWR2YW5jZS4KKworLUwgPHN0YXJ0Piw8ZW5kPjo8ZmlsZT46OgorLUwgOjxmdW5jbmFtZT46PGZpbGU+OjoKKwlUcmFjZSB0aGUgZXZvbHV0aW9uIG9mIHRoZSBsaW5lIHJhbmdlIGdpdmVuIGJ5ICI8c3RhcnQ+LDxlbmQ+IgorCShvciB0aGUgZnVuY3Rpb24gbmFtZSByZWdleCA8ZnVuY25hbWU+KSB3aXRoaW4gdGhlIDxmaWxlPi4gIFlvdSBtYXkKKwlub3QgZ2l2ZSBhbnkgcGF0aHNwZWMgbGltaXRlcnMuICBUaGlzIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvCisJYSB3YWxrIHN0YXJ0aW5nIGZyb20gYSBzaW5nbGUgcmV2aXNpb24sIGkuZS4sIHlvdSBtYXkgb25seQorCWdpdmUgemVybyBvciBvbmUgcG9zaXRpdmUgcmV2aXNpb24gYXJndW1lbnRzLCBhbmQKKwk8c3RhcnQ+IGFuZCA8ZW5kPiAob3IgPGZ1bmNuYW1lPikgbXVzdCBleGlzdCBpbiB0aGUgc3RhcnRpbmcgcmV2aXNpb24uCisJWW91IGNhbiBzcGVjaWZ5IHRoaXMgb3B0aW9uIG1vcmUgdGhhbiBvbmNlLiBJbXBsaWVzIGAtLXBhdGNoYC4KKwlQYXRjaCBvdXRwdXQgY2FuIGJlIHN1cHByZXNzZWQgdXNpbmcgYC0tbm8tcGF0Y2hgLCBidXQgb3RoZXIgZGlmZiBmb3JtYXRzCisJKG5hbWVseSBgLS1yYXdgLCBgLS1udW1zdGF0YCwgYC0tc2hvcnRzdGF0YCwgYC0tZGlyc3RhdGAsIGAtLXN1bW1hcnlgLAorCWAtLW5hbWUtb25seWAsIGAtLW5hbWUtc3RhdHVzYCwgYC0tY2hlY2tgKSBhcmUgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKysKK2luY2x1ZGU6OmxpbmUtcmFuZ2UtZm9ybWF0LnR4dFtdCisKKzxyZXZpc2lvbiByYW5nZT46OgorCVNob3cgb25seSBjb21taXRzIGluIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gcmFuZ2UuICBXaGVuIG5vCisJPHJldmlzaW9uIHJhbmdlPiBpcyBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBIRUFEYCAoaS5lLiB0aGUKKwl3aG9sZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgY29tbWl0KS4gIGBvcmlnaW4uLkhFQURgCisJc3BlY2lmaWVzIGFsbCB0aGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCBjb21taXQKKwkoaS5lLiBgSEVBRGApLCBidXQgbm90IGZyb20gYG9yaWdpbmAuIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YKKwl3YXlzIHRvIHNwZWxsIDxyZXZpc2lvbiByYW5nZT4sIHNlZSB0aGUgJ1NwZWNpZnlpbmcgUmFuZ2VzJworCXNlY3Rpb24gb2YgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKK1stLV0gPHBhdGg+Li4uOjoKKwlTaG93IG9ubHkgY29tbWl0cyB0aGF0IGFyZSBlbm91Z2ggdG8gZXhwbGFpbiBob3cgdGhlIGZpbGVzCisJdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHBhdGhzIGNhbWUgdG8gYmUuICBTZWUgJ0hpc3RvcnkKKwlTaW1wbGlmaWNhdGlvbicgYmVsb3cgZm9yIGRldGFpbHMgYW5kIG90aGVyIHNpbXBsaWZpY2F0aW9uCisJbW9kZXMuCisrCitQYXRocyBtYXkgbmVlZCB0byBiZSBwcmVmaXhlZCB3aXRoIGAtLWAgdG8gc2VwYXJhdGUgdGhlbSBmcm9tCitvcHRpb25zIG9yIHRoZSByZXZpc2lvbiByYW5nZSwgd2hlbiBjb25mdXNpb24gYXJpc2VzLgorCitpbmNsdWRlOjpyZXYtbGlzdC1vcHRpb25zLnR4dFtdCisKK2luY2x1ZGU6OnByZXR0eS1mb3JtYXRzLnR4dFtdCisKK0NPTU1PTiBESUZGIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworOmdpdC1sb2c6IDEKK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpkaWZmLWdlbmVyYXRlLXBhdGNoLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCBsb2cgLS1uby1tZXJnZXNgOjoKKworCVNob3cgdGhlIHdob2xlIGNvbW1pdCBoaXN0b3J5LCBidXQgc2tpcCBhbnkgbWVyZ2VzCisKK2BnaXQgbG9nIHYyLjYuMTIuLiBpbmNsdWRlL3Njc2kgZHJpdmVycy9zY3NpYDo6CisKKwlTaG93IGFsbCBjb21taXRzIHNpbmNlIHZlcnNpb24gJ3YyLjYuMTInIHRoYXQgY2hhbmdlZCBhbnkgZmlsZQorCWluIHRoZSBgaW5jbHVkZS9zY3NpYCBvciBgZHJpdmVycy9zY3NpYCBzdWJkaXJlY3RvcmllcworCitgZ2l0IGxvZyAtLXNpbmNlPSIyIHdlZWtzIGFnbyIgLS0gZ2l0a2A6OgorCisJU2hvdyB0aGUgY2hhbmdlcyBkdXJpbmcgdGhlIGxhc3QgdHdvIHdlZWtzIHRvIHRoZSBmaWxlICdnaXRrJy4KKwlUaGUgYC0tYCBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlICpicmFuY2gqIG5hbWVkCisJJ2dpdGsnCisKK2BnaXQgbG9nIC0tbmFtZS1zdGF0dXMgcmVsZWFzZS4udGVzdGA6OgorCisJU2hvdyB0aGUgY29tbWl0cyB0aGF0IGFyZSBpbiB0aGUgInRlc3QiIGJyYW5jaCBidXQgbm90IHlldAorCWluIHRoZSAicmVsZWFzZSIgYnJhbmNoLCBhbG9uZyB3aXRoIHRoZSBsaXN0IG9mIHBhdGhzCisJZWFjaCBjb21taXQgbW9kaWZpZXMuCisKK2BnaXQgbG9nIC0tZm9sbG93IGJ1aWx0aW4vcmV2LWxpc3QuY2A6OgorCisJU2hvd3MgdGhlIGNvbW1pdHMgdGhhdCBjaGFuZ2VkIGBidWlsdGluL3Jldi1saXN0LmNgLCBpbmNsdWRpbmcKKwl0aG9zZSBjb21taXRzIHRoYXQgb2NjdXJyZWQgYmVmb3JlIHRoZSBmaWxlIHdhcyBnaXZlbiBpdHMKKwlwcmVzZW50IG5hbWUuCisKK2BnaXQgbG9nIC0tYnJhbmNoZXMgLS1ub3QgLS1yZW1vdGVzPW9yaWdpbmA6OgorCisJU2hvd3MgYWxsIGNvbW1pdHMgdGhhdCBhcmUgaW4gYW55IG9mIGxvY2FsIGJyYW5jaGVzIGJ1dCBub3QgaW4KKwlhbnkgb2YgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciAnb3JpZ2luJyAod2hhdCB5b3UgaGF2ZSB0aGF0CisJb3JpZ2luIGRvZXNuJ3QpLgorCitgZ2l0IGxvZyBtYXN0ZXIgLS1ub3QgLS1yZW1vdGVzPSovbWFzdGVyYDo6CisKKwlTaG93cyBhbGwgY29tbWl0cyB0aGF0IGFyZSBpbiBsb2NhbCBtYXN0ZXIgYnV0IG5vdCBpbiBhbnkgcmVtb3RlCisJcmVwb3NpdG9yeSBtYXN0ZXIgYnJhbmNoZXMuCisKK2BnaXQgbG9nIC1wIC1tIC0tZmlyc3QtcGFyZW50YDo6CisKKwlTaG93cyB0aGUgaGlzdG9yeSBpbmNsdWRpbmcgY2hhbmdlIGRpZmZzLCBidXQgb25seSBmcm9tIHRoZQorCWBgbWFpbiBicmFuY2gnJyBwZXJzcGVjdGl2ZSwgc2tpcHBpbmcgY29tbWl0cyB0aGF0IGNvbWUgZnJvbSBtZXJnZWQKKwlicmFuY2hlcywgYW5kIHNob3dpbmcgZnVsbCBkaWZmcyBvZiBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhlIG1lcmdlcy4KKwlUaGlzIG1ha2VzIHNlbnNlIG9ubHkgd2hlbiBmb2xsb3dpbmcgYSBzdHJpY3QgcG9saWN5IG9mIG1lcmdpbmcgYWxsCisJdG9waWMgYnJhbmNoZXMgd2hlbiBzdGF5aW5nIG9uIGEgc2luZ2xlIGludGVncmF0aW9uIGJyYW5jaC4KKworYGdpdCBsb2cgLUwgJy9pbnQgbWFpbi8nLC9efS86bWFpbi5jYDo6CisKKwlTaG93cyBob3cgdGhlIGZ1bmN0aW9uIGBtYWluKClgIGluIHRoZSBmaWxlIGBtYWluLmNgIGV2b2x2ZWQKKwlvdmVyIHRpbWUuCisKK2BnaXQgbG9nIC0zYDo6CisKKwlMaW1pdHMgdGhlIG51bWJlciBvZiBjb21taXRzIHRvIHNob3cgdG8gMy4KKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitpbmNsdWRlOjppMThuLnR4dFtdCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgY29yZSB2YXJpYWJsZXMgYW5kIGxpbmtnaXQ6Z2l0LWRpZmZbMV0KK2ZvciBzZXR0aW5ncyByZWxhdGVkIHRvIGRpZmYgZ2VuZXJhdGlvbi4KKworZm9ybWF0LnByZXR0eTo6CisJRGVmYXVsdCBmb3IgdGhlIGAtLWZvcm1hdGAgb3B0aW9uLiAgKFNlZSAnUHJldHR5IEZvcm1hdHMnIGFib3ZlLikKKwlEZWZhdWx0cyB0byBgbWVkaXVtYC4KKworaTE4bi5sb2dPdXRwdXRFbmNvZGluZzo6CisJRW5jb2RpbmcgdG8gdXNlIHdoZW4gZGlzcGxheWluZyBsb2dzLiAgKFNlZSAnRGlzY3Vzc2lvbicgYWJvdmUuKQorCURlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgaTE4bi5jb21taXRFbmNvZGluZ2AgaWYgc2V0LCBhbmQgVVRGLTgKKwlvdGhlcndpc2UuCisKK2xvZy5kYXRlOjoKKwlEZWZhdWx0IGZvcm1hdCBmb3IgaHVtYW4tcmVhZGFibGUgZGF0ZXMuICAoQ29tcGFyZSB0aGUKKwlgLS1kYXRlYCBvcHRpb24uKSAgRGVmYXVsdHMgdG8gImRlZmF1bHQiLCB3aGljaCBtZWFucyB0byB3cml0ZQorCWRhdGVzIGxpa2UgYFNhdCBNYXkgOCAxOTozNTozNCAyMDEwIC0wNTAwYC4KKysKK0lmIHRoZSBmb3JtYXQgaXMgc2V0IHRvICJhdXRvOmZvbyIgYW5kIHRoZSBwYWdlciBpcyBpbiB1c2UsIGZvcm1hdAorImZvbyIgd2lsbCBiZSB0aGUgdXNlZCBmb3IgdGhlIGRhdGUgZm9ybWF0LiBPdGhlcndpc2UgImRlZmF1bHQiIHdpbGwKK2JlIHVzZWQuCisKK2xvZy5mb2xsb3c6OgorCUlmIGB0cnVlYCwgYGdpdCBsb2dgIHdpbGwgYWN0IGFzIGlmIHRoZSBgLS1mb2xsb3dgIG9wdGlvbiB3YXMgdXNlZCB3aGVuCisJYSBzaW5nbGUgPHBhdGg+IGlzIGdpdmVuLiAgVGhpcyBoYXMgdGhlIHNhbWUgbGltaXRhdGlvbnMgYXMgYC0tZm9sbG93YCwKKwlpLmUuIGl0IGNhbm5vdCBiZSB1c2VkIHRvIGZvbGxvdyBtdWx0aXBsZSBmaWxlcyBhbmQgZG9lcyBub3Qgd29yayB3ZWxsCisJb24gbm9uLWxpbmVhciBoaXN0b3J5LgorCitsb2cuc2hvd1Jvb3Q6OgorCUlmIGBmYWxzZWAsIGBnaXQgbG9nYCBhbmQgcmVsYXRlZCBjb21tYW5kcyB3aWxsIG5vdCB0cmVhdCB0aGUKKwlpbml0aWFsIGNvbW1pdCBhcyBhIGJpZyBjcmVhdGlvbiBldmVudC4gIEFueSByb290IGNvbW1pdHMgaW4KKwlgZ2l0IGxvZyAtcGAgb3V0cHV0IHdvdWxkIGJlIHNob3duIHdpdGhvdXQgYSBkaWZmIGF0dGFjaGVkLgorCVRoZSBkZWZhdWx0IGlzIGB0cnVlYC4KKworbG9nLnNob3dTaWduYXR1cmU6OgorCUlmIGB0cnVlYCwgYGdpdCBsb2dgIGFuZCByZWxhdGVkIGNvbW1hbmRzIHdpbGwgYWN0IGFzIGlmIHRoZQorCWAtLXNob3ctc2lnbmF0dXJlYCBvcHRpb24gd2FzIHBhc3NlZCB0byB0aGVtLgorCittYWlsbWFwLio6OgorCVNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXS4KKworbm90ZXMuZGlzcGxheVJlZjo6CisJV2hpY2ggcmVmcywgaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgc2V0IGJ5IGBjb3JlLm5vdGVzUmVmYAorCW9yIGBHSVRfTk9URVNfUkVGYCwgdG8gcmVhZCBub3RlcyBmcm9tIHdoZW4gc2hvd2luZyBjb21taXQKKwltZXNzYWdlcyB3aXRoIHRoZSBgbG9nYCBmYW1pbHkgb2YgY29tbWFuZHMuICBTZWUKKwlsaW5rZ2l0OmdpdC1ub3Rlc1sxXS4KKysKK01heSBiZSBhbiB1bmFiYnJldmlhdGVkIHJlZiBuYW1lIG9yIGEgZ2xvYiBhbmQgbWF5IGJlIHNwZWNpZmllZAorbXVsdGlwbGUgdGltZXMuICBBIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgZm9yIHJlZnMgdGhhdCBkbyBub3QgZXhpc3QsCitidXQgYSBnbG9iIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55IHJlZnMgaXMgc2lsZW50bHkgaWdub3JlZC4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgZGlzYWJsZWQgYnkgdGhlIGAtLW5vLW5vdGVzYCBvcHRpb24sCitvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX05PVEVTX0RJU1BMQVlfUkVGYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwKK2FuZCBvdmVycmlkZGVuIGJ5IHRoZSBgLS1ub3Rlcz08cmVmPmAgb3B0aW9uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDYxYzBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CkBAIC0wLDAgKzEsMjUwIEBACitnaXQtbHMtZmlsZXMoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbHMtZmlsZXMgLSBTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBscy1maWxlcycgWy16XSBbLXRdIFstdl0gWy1mXQorCQkoLS1bY2FjaGVkfGRlbGV0ZWR8b3RoZXJzfGlnbm9yZWR8c3RhZ2V8dW5tZXJnZWR8a2lsbGVkfG1vZGlmaWVkXSkqCisJCSgtW2N8ZHxvfGl8c3x1fGt8bV0pKgorCQlbLS1lb2xdCisJCVsteCA8cGF0dGVybj58LS1leGNsdWRlPTxwYXR0ZXJuPl0KKwkJWy1YIDxmaWxlPnwtLWV4Y2x1ZGUtZnJvbT08ZmlsZT5dCisJCVstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08ZmlsZT5dCisJCVstLWV4Y2x1ZGUtc3RhbmRhcmRdCisJCVstLWVycm9yLXVubWF0Y2hdIFstLXdpdGgtdHJlZT08dHJlZS1pc2g+XQorCQlbLS1mdWxsLW5hbWVdIFstLXJlY3Vyc2Utc3VibW9kdWxlc10KKwkJWy0tYWJicmV2XSBbLS1dIFs8ZmlsZT4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBtZXJnZXMgdGhlIGZpbGUgbGlzdGluZyBpbiB0aGUgZGlyZWN0b3J5IGNhY2hlIGluZGV4IHdpdGggdGhlCithY3R1YWwgd29ya2luZyBkaXJlY3RvcnkgbGlzdCwgYW5kIHNob3dzIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgdGhlCit0d28uCisKK09uZSBvciBtb3JlIG9mIHRoZSBvcHRpb25zIGJlbG93IG1heSBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgZmlsZXMKK3Nob3duOgorCitPUFRJT05TCistLS0tLS0tCistYzo6CistLWNhY2hlZDo6CisJU2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkKKworLWQ6OgorLS1kZWxldGVkOjoKKwlTaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dAorCistbTo6CistLW1vZGlmaWVkOjoKKwlTaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQKKworLW86OgorLS1vdGhlcnM6OgorCVNob3cgb3RoZXIgKGkuZS4gdW50cmFja2VkKSBmaWxlcyBpbiB0aGUgb3V0cHV0CisKKy1pOjoKKy0taWdub3JlZDo6CisJU2hvdyBvbmx5IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dC4gV2hlbiBzaG93aW5nIGZpbGVzIGluIHRoZQorCWluZGV4LCBwcmludCBvbmx5IHRob3NlIG1hdGNoZWQgYnkgYW4gZXhjbHVkZSBwYXR0ZXJuLiBXaGVuCisJc2hvd2luZyAib3RoZXIiIGZpbGVzLCBzaG93IG9ubHkgdGhvc2UgbWF0Y2hlZCBieSBhbiBleGNsdWRlCisJcGF0dGVybi4gU3RhbmRhcmQgaWdub3JlIHJ1bGVzIGFyZSBub3QgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQsCisJdGhlcmVmb3JlIGF0IGxlYXN0IG9uZSBvZiB0aGUgYC0tZXhjbHVkZSpgIG9wdGlvbnMgaXMgcmVxdWlyZWQuCisKKy1zOjoKKy0tc3RhZ2U6OgorCVNob3cgc3RhZ2VkIGNvbnRlbnRzJyBtb2RlIGJpdHMsIG9iamVjdCBuYW1lIGFuZCBzdGFnZSBudW1iZXIgaW4gdGhlIG91dHB1dC4KKworLS1kaXJlY3Rvcnk6OgorCUlmIGEgd2hvbGUgZGlyZWN0b3J5IGlzIGNsYXNzaWZpZWQgYXMgIm90aGVyIiwgc2hvdyBqdXN0IGl0cworCW5hbWUgKHdpdGggYSB0cmFpbGluZyBzbGFzaCkgYW5kIG5vdCBpdHMgd2hvbGUgY29udGVudHMuCisKKy0tbm8tZW1wdHktZGlyZWN0b3J5OjoKKwlEbyBub3QgbGlzdCBlbXB0eSBkaXJlY3Rvcmllcy4gSGFzIG5vIGVmZmVjdCB3aXRob3V0IC0tZGlyZWN0b3J5LgorCistdTo6CistLXVubWVyZ2VkOjoKKwlTaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGZvcmNlcyAtLXN0YWdlKQorCistazo6CistLWtpbGxlZDo6CisJU2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCBkdWUKKwl0byBmaWxlL2RpcmVjdG9yeSBjb25mbGljdHMgZm9yIGNoZWNrb3V0LWluZGV4IHRvCisJc3VjY2VlZC4KKworLXo6OgorCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0IGFuZCBkbyBub3QgcXVvdGUgZmlsZW5hbWVzLgorCVNlZSBPVVRQVVQgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKy14IDxwYXR0ZXJuPjo6CistLWV4Y2x1ZGU9PHBhdHRlcm4+OjoKKwlTa2lwIHVudHJhY2tlZCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuLgorCU5vdGUgdGhhdCBwYXR0ZXJuIGlzIGEgc2hlbGwgd2lsZGNhcmQgcGF0dGVybi4gU2VlIEVYQ0xVREUgUEFUVEVSTlMKKwliZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLVggPGZpbGU+OjoKKy0tZXhjbHVkZS1mcm9tPTxmaWxlPjo6CisJUmVhZCBleGNsdWRlIHBhdHRlcm5zIGZyb20gPGZpbGU+OyAxIHBlciBsaW5lLgorCistLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08ZmlsZT46OgorCVJlYWQgYWRkaXRpb25hbCBleGNsdWRlIHBhdHRlcm5zIHRoYXQgYXBwbHkgb25seSB0byB0aGUKKwlkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3RvcmllcyBpbiA8ZmlsZT4uCisKKy0tZXhjbHVkZS1zdGFuZGFyZDo6CisJQWRkIHRoZSBzdGFuZGFyZCBHaXQgZXhjbHVzaW9uczogLmdpdC9pbmZvL2V4Y2x1ZGUsIC5naXRpZ25vcmUKKwlpbiBlYWNoIGRpcmVjdG9yeSwgYW5kIHRoZSB1c2VyJ3MgZ2xvYmFsIGV4Y2x1c2lvbiBmaWxlLgorCistLWVycm9yLXVubWF0Y2g6OgorCUlmIGFueSA8ZmlsZT4gZG9lcyBub3QgYXBwZWFyIGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbgorCWVycm9yIChyZXR1cm4gMSkuCisKKy0td2l0aC10cmVlPTx0cmVlLWlzaD46OgorCVdoZW4gdXNpbmcgLS1lcnJvci11bm1hdGNoIHRvIGV4cGFuZCB0aGUgdXNlciBzdXBwbGllZAorCTxmaWxlPiAoaS5lLiBwYXRoIHBhdHRlcm4pIGFyZ3VtZW50cyB0byBwYXRocywgcHJldGVuZAorCXRoYXQgcGF0aHMgd2hpY2ggd2VyZSByZW1vdmVkIGluIHRoZSBpbmRleCBzaW5jZSB0aGUKKwluYW1lZCA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50LiAgVXNpbmcgdGhpcyBvcHRpb24KKwl3aXRoIGAtc2Agb3IgYC11YCBvcHRpb25zIGRvZXMgbm90IG1ha2UgYW55IHNlbnNlLgorCistdDo6CisJVGhpcyBmZWF0dXJlIGlzIHNlbWktZGVwcmVjYXRlZC4gRm9yIHNjcmlwdGluZyBwdXJwb3NlLAorCWxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBgLS1wb3JjZWxhaW5gIGFuZAorCWxpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0gYC0tbmFtZS1zdGF0dXNgIGFyZSBhbG1vc3QgYWx3YXlzCisJc3VwZXJpb3IgYWx0ZXJuYXRpdmVzLCBhbmQgdXNlcnMgc2hvdWxkIGxvb2sgYXQKKwlsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gYC0tc2hvcnRgIG9yIGxpbmtnaXQ6Z2l0LWRpZmZbMV0KKwlgLS1uYW1lLXN0YXR1c2AgZm9yIG1vcmUgdXNlci1mcmllbmRseSBhbHRlcm5hdGl2ZXMuCisrCistLQorVGhpcyBvcHRpb24gaWRlbnRpZmllcyB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0aGUgZm9sbG93aW5nIHRhZ3MgKGZvbGxvd2VkIGJ5CithIHNwYWNlKSBhdCB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lOgorCisJSDo6CWNhY2hlZAorCVM6Oglza2lwLXdvcmt0cmVlCisJTTo6CXVubWVyZ2VkCisJUjo6CXJlbW92ZWQvZGVsZXRlZAorCUM6Ogltb2RpZmllZC9jaGFuZ2VkCisJSzo6CXRvIGJlIGtpbGxlZAorCT86OglvdGhlcgorLS0KKworLXY6OgorCVNpbWlsYXIgdG8gYC10YCwgYnV0IHVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgZmlsZXMKKwl0aGF0IGFyZSBtYXJrZWQgYXMgJ2Fzc3VtZSB1bmNoYW5nZWQnIChzZWUKKwlsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0pLgorCistZjo6CisJU2ltaWxhciB0byBgLXRgLCBidXQgdXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciBmaWxlcworCXRoYXQgYXJlIG1hcmtlZCBhcyAnZnNtb25pdG9yIHZhbGlkJyAoc2VlCisJbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdKS4KKworLS1mdWxsLW5hbWU6OgorCVdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnksIHRoZSBjb21tYW5kIHVzdWFsbHkKKwlvdXRwdXRzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoaXMKKwlvcHRpb24gZm9yY2VzIHBhdGhzIHRvIGJlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdAorCXRvcCBkaXJlY3RvcnkuCisKKy0tcmVjdXJzZS1zdWJtb2R1bGVzOjoKKwlSZWN1cnNpdmVseSBjYWxscyBscy1maWxlcyBvbiBlYWNoIHN1Ym1vZHVsZSBpbiB0aGUgcmVwb3NpdG9yeS4KKwlDdXJyZW50bHkgdGhlcmUgaXMgb25seSBzdXBwb3J0IGZvciB0aGUgLS1jYWNoZWQgbW9kZS4KKworLS1hYmJyZXZbPTxuPl06OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIG9iamVjdAorCWxpbmVzLCBzaG93IG9ubHkgYSBwYXJ0aWFsIHByZWZpeC4KKwlOb24gZGVmYXVsdCBudW1iZXIgb2YgZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAtLWFiYnJldj08bj4uCisKKy0tZGVidWc6OgorCUFmdGVyIGVhY2ggbGluZSB0aGF0IGRlc2NyaWJlcyBhIGZpbGUsIGFkZCBtb3JlIGRhdGEgYWJvdXQgaXRzCisJY2FjaGUgZW50cnkuICBUaGlzIGlzIGludGVuZGVkIHRvIHNob3cgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcworCXBvc3NpYmxlIGZvciBtYW51YWwgaW5zcGVjdGlvbjsgdGhlIGV4YWN0IGZvcm1hdCBtYXkgY2hhbmdlIGF0CisJYW55IHRpbWUuCisKKy0tZW9sOjoKKwlTaG93IDxlb2xpbmZvPiBhbmQgPGVvbGF0dHI+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+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgdGhyZWUgdHJlZS1pc2gsIGFuZCBvdXRwdXQgdHJpdmlhbCBtZXJnZSByZXN1bHRzIGFuZAorY29uZmxpY3Rpbmcgc3RhZ2VzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGlzIHNpbWlsYXIgdG8KK3doYXQgdGhyZWUtd2F5ICdnaXQgcmVhZC10cmVlIC1tJyBkb2VzLCBidXQgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZQorcmVzdWx0cyBpbiB0aGUgaW5kZXgsIHRoZSBjb21tYW5kIG91dHB1dHMgdGhlIGVudHJpZXMgdG8gdGhlCitzdGFuZGFyZCBvdXRwdXQuCisKK1RoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZCBieSBoaWdoZXIgbGV2ZWwgc2NyaXB0cyB0byBjb21wdXRlCittZXJnZSByZXN1bHRzIG91dHNpZGUgb2YgdGhlIGluZGV4LCBhbmQgc3R1ZmYgdGhlIHJlc3VsdHMgYmFjayBpbnRvIHRoZQoraW5kZXguICBGb3IgdGhpcyByZWFzb24sIHRoZSBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZCBvbWl0cworZW50cmllcyB0aGF0IG1hdGNoIHRoZSA8YnJhbmNoMT4gdHJlZS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyNTI5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dApAQCAtMCwwICsxLDM3MiBAQAorZ2l0LW1lcmdlKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlIC0gSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWVyZ2UnIFstbl0gWy0tc3RhdF0gWy0tbm8tY29tbWl0XSBbLS1zcXVhc2hdIFstLVtuby1dZWRpdF0KKwlbLS1uby12ZXJpZnldIFstcyA8c3RyYXRlZ3k+XSBbLVggPHN0cmF0ZWd5LW9wdGlvbj5dIFstU1s8a2V5aWQ+XV0KKwlbLS1bbm8tXWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXNdCisJWy0tW25vLV1yZXJlcmUtYXV0b3VwZGF0ZV0gWy1tIDxtc2c+XSBbLUYgPGZpbGU+XSBbPGNvbW1pdD4uLi5dCisnZ2l0IG1lcmdlJyAoLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXF1aXQpCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW5jb3Jwb3JhdGVzIGNoYW5nZXMgZnJvbSB0aGUgbmFtZWQgY29tbWl0cyAoc2luY2UgdGhlIHRpbWUgdGhlaXIKK2hpc3RvcmllcyBkaXZlcmdlZCBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCkgaW50byB0aGUgY3VycmVudAorYnJhbmNoLiAgVGhpcyBjb21tYW5kIGlzIHVzZWQgYnkgJ2dpdCBwdWxsJyB0byBpbmNvcnBvcmF0ZSBjaGFuZ2VzCitmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSBhbmQgY2FuIGJlIHVzZWQgYnkgaGFuZCB0byBtZXJnZSBjaGFuZ2VzCitmcm9tIG9uZSBicmFuY2ggaW50byBhbm90aGVyLgorCitBc3N1bWUgdGhlIGZvbGxvd2luZyBoaXN0b3J5IGV4aXN0cyBhbmQgdGhlIGN1cnJlbnQgYnJhbmNoIGlzCisiYG1hc3RlcmAiOgorCistLS0tLS0tLS0tLS0KKwkgIEEtLS1CLS0tQyB0b3BpYworCSAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGVuICJgZ2l0IG1lcmdlIHRvcGljYCIgd2lsbCByZXBsYXkgdGhlIGNoYW5nZXMgbWFkZSBvbiB0aGUKK2B0b3BpY2AgYnJhbmNoIHNpbmNlIGl0IGRpdmVyZ2VkIGZyb20gYG1hc3RlcmAgKGkuZS4sIGBFYCkgdW50aWwKK2l0cyBjdXJyZW50IGNvbW1pdCAoYENgKSBvbiB0b3Agb2YgYG1hc3RlcmAsIGFuZCByZWNvcmQgdGhlIHJlc3VsdAoraW4gYSBuZXcgY29tbWl0IGFsb25nIHdpdGggdGhlIG5hbWVzIG9mIHRoZSB0d28gcGFyZW50IGNvbW1pdHMgYW5kCithIGxvZyBtZXNzYWdlIGZyb20gdGhlIHVzZXIgZGVzY3JpYmluZyB0aGUgY2hhbmdlcy4KKworLS0tLS0tLS0tLS0tCisJICBBLS0tQi0tLUMgdG9waWMKKwkgLyAgICAgICAgIFwKKyAgICBELS0tRS0tLUYtLS1HLS0tSCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGUgc2Vjb25kIHN5bnRheCAoImBnaXQgbWVyZ2UgLS1hYm9ydGAiKSBjYW4gb25seSBiZSBydW4gYWZ0ZXIgdGhlCittZXJnZSBoYXMgcmVzdWx0ZWQgaW4gY29uZmxpY3RzLiAnZ2l0IG1lcmdlIC0tYWJvcnQnIHdpbGwgYWJvcnQgdGhlCittZXJnZSBwcm9jZXNzIGFuZCB0cnkgdG8gcmVjb25zdHJ1Y3QgdGhlIHByZS1tZXJnZSBzdGF0ZS4gSG93ZXZlciwKK2lmIHRoZXJlIHdlcmUgdW5jb21taXR0ZWQgY2hhbmdlcyB3aGVuIHRoZSBtZXJnZSBzdGFydGVkIChhbmQKK2VzcGVjaWFsbHkgaWYgdGhvc2UgY2hhbmdlcyB3ZXJlIGZ1cnRoZXIgbW9kaWZpZWQgYWZ0ZXIgdGhlIG1lcmdlCit3YXMgc3RhcnRlZCksICdnaXQgbWVyZ2UgLS1hYm9ydCcgd2lsbCBpbiBzb21lIGNhc2VzIGJlIHVuYWJsZSB0bworcmVjb25zdHJ1Y3QgdGhlIG9yaWdpbmFsIChwcmUtbWVyZ2UpIGNoYW5nZXMuIFRoZXJlZm9yZToKKworKldhcm5pbmcqOiBSdW5uaW5nICdnaXQgbWVyZ2UnIHdpdGggbm9uLXRyaXZpYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBpcworZGlzY291cmFnZWQ6IHdoaWxlIHBvc3NpYmxlLCBpdCBtYXkgbGVhdmUgeW91IGluIGEgc3RhdGUgdGhhdCBpcyBoYXJkIHRvCitiYWNrIG91dCBvZiBpbiB0aGUgY2FzZSBvZiBhIGNvbmZsaWN0LgorCitUaGUgdGhpcmQgc3ludGF4ICgiYGdpdCBtZXJnZSAtLWNvbnRpbnVlYCIpIGNhbiBvbmx5IGJlIHJ1biBhZnRlciB0aGUKK21lcmdlIGhhcyByZXN1bHRlZCBpbiBjb25mbGljdHMuCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6Om1lcmdlLW9wdGlvbnMudHh0W10KKworLW0gPG1zZz46OgorCVNldCB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lcmdlIGNvbW1pdCAoaW4KKwljYXNlIG9uZSBpcyBjcmVhdGVkKS4KKysKK0lmIGAtLWxvZ2AgaXMgc3BlY2lmaWVkLCBhIHNob3J0bG9nIG9mIHRoZSBjb21taXRzIGJlaW5nIG1lcmdlZAord2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCisrCitUaGUgJ2dpdCBmbXQtbWVyZ2UtbXNnJyBjb21tYW5kIGNhbiBiZQordXNlZCB0byBnaXZlIGEgZ29vZCBkZWZhdWx0IGZvciBhdXRvbWF0ZWQgJ2dpdCBtZXJnZScKK2ludm9jYXRpb25zLiBUaGUgYXV0b21hdGVkIG1lc3NhZ2UgY2FuIGluY2x1ZGUgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbi4KKworLUYgPGZpbGU+OjoKKy0tZmlsZT08ZmlsZT46OgorCVJlYWQgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBtZXJnZSBjb21taXQgKGluCisJY2FzZSBvbmUgaXMgY3JlYXRlZCkuCisrCitJZiBgLS1sb2dgIGlzIHNwZWNpZmllZCwgYSBzaG9ydGxvZyBvZiB0aGUgY29tbWl0cyBiZWluZyBtZXJnZWQKK3dpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHNwZWNpZmllZCBtZXNzYWdlLgorCistLXJlcmVyZS1hdXRvdXBkYXRlOjoKKy0tbm8tcmVyZXJlLWF1dG91cGRhdGU6OgorCUFsbG93IHRoZSByZXJlcmUgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUKKwlyZXN1bHQgb2YgYXV0by1jb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlLgorCistLW92ZXJ3cml0ZS1pZ25vcmU6OgorLS1uby1vdmVyd3JpdGUtaWdub3JlOjoKKwlTaWxlbnRseSBvdmVyd3JpdGUgaWdub3JlZCBmaWxlcyBmcm9tIHRoZSBtZXJnZSByZXN1bHQuIFRoaXMKKwlpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gVXNlIGAtLW5vLW92ZXJ3cml0ZS1pZ25vcmVgIHRvIGFib3J0LgorCistLWFib3J0OjoKKwlBYm9ydCB0aGUgY3VycmVudCBjb25mbGljdCByZXNvbHV0aW9uIHByb2Nlc3MsIGFuZAorCXRyeSB0byByZWNvbnN0cnVjdCB0aGUgcHJlLW1lcmdlIHN0YXRlLgorKworSWYgdGhlcmUgd2VyZSB1bmNvbW1pdHRlZCB3b3JrdHJlZSBjaGFuZ2VzIHByZXNlbnQgd2hlbiB0aGUgbWVyZ2UKK3N0YXJ0ZWQsICdnaXQgbWVyZ2UgLS1hYm9ydCcgd2lsbCBpbiBzb21lIGNhc2VzIGJlIHVuYWJsZSB0bworcmVjb25zdHJ1Y3QgdGhlc2UgY2hhbmdlcy4gSXQgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGFsd2F5cworY29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBiZWZvcmUgcnVubmluZyAnZ2l0IG1lcmdlJy4KKysKKydnaXQgbWVyZ2UgLS1hYm9ydCcgaXMgZXF1aXZhbGVudCB0byAnZ2l0IHJlc2V0IC0tbWVyZ2UnIHdoZW4KK2BNRVJHRV9IRUFEYCBpcyBwcmVzZW50LgorCistLXF1aXQ6OgorCUZvcmdldCBhYm91dCB0aGUgY3VycmVudCBtZXJnZSBpbiBwcm9ncmVzcy4gTGVhdmUgdGhlIGluZGV4CisJYW5kIHRoZSB3b3JraW5nIHRyZWUgYXMtaXMuCisKKy0tY29udGludWU6OgorCUFmdGVyIGEgJ2dpdCBtZXJnZScgc3RvcHMgZHVlIHRvIGNvbmZsaWN0cyB5b3UgY2FuIGNvbmNsdWRlIHRoZQorCW1lcmdlIGJ5IHJ1bm5pbmcgJ2dpdCBtZXJnZSAtLWNvbnRpbnVlJyAoc2VlICJIT1cgVE8gUkVTT0xWRQorCUNPTkZMSUNUUyIgc2VjdGlvbiBiZWxvdykuCisKKzxjb21taXQ+Li4uOjoKKwlDb21taXRzLCB1c3VhbGx5IG90aGVyIGJyYW5jaCBoZWFkcywgdG8gbWVyZ2UgaW50byBvdXIgYnJhbmNoLgorCVNwZWNpZnlpbmcgbW9yZSB0aGFuIG9uZSBjb21taXQgd2lsbCBjcmVhdGUgYSBtZXJnZSB3aXRoCisJbW9yZSB0aGFuIHR3byBwYXJlbnRzIChhZmZlY3Rpb25hdGVseSBjYWxsZWQgYW4gT2N0b3B1cyBtZXJnZSkuCisrCitJZiBubyBjb21taXQgaXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBtZXJnZSB0aGUgcmVtb3RlLXRyYWNraW5nCiticmFuY2hlcyB0aGF0IHRoZSBjdXJyZW50IGJyYW5jaCBpcyBjb25maWd1cmVkIHRvIHVzZSBhcyBpdHMgdXBzdHJlYW0uCitTZWUgYWxzbyB0aGUgY29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoaXMgbWFudWFsIHBhZ2UuCisrCitXaGVuIGBGRVRDSF9IRUFEYCAoYW5kIG5vIG90aGVyIGNvbW1pdCkgaXMgc3BlY2lmaWVkLCB0aGUgYnJhbmNoZXMKK3JlY29yZGVkIGluIHRoZSBgLmdpdC9GRVRDSF9IRUFEYCBmaWxlIGJ5IHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uCitvZiBgZ2l0IGZldGNoYCBmb3IgbWVyZ2luZyBhcmUgbWVyZ2VkIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKworCitQUkUtTUVSR0UgQ0hFQ0tTCistLS0tLS0tLS0tLS0tLS0tCisKK0JlZm9yZSBhcHBseWluZyBvdXRzaWRlIGNoYW5nZXMsIHlvdSBzaG91bGQgZ2V0IHlvdXIgb3duIHdvcmsgaW4KK2dvb2Qgc2hhcGUgYW5kIGNvbW1pdHRlZCBsb2NhbGx5LCBzbyBpdCB3aWxsIG5vdCBiZSBjbG9iYmVyZWQgaWYKK3RoZXJlIGFyZSBjb25mbGljdHMuICBTZWUgYWxzbyBsaW5rZ2l0OmdpdC1zdGFzaFsxXS4KKydnaXQgcHVsbCcgYW5kICdnaXQgbWVyZ2UnIHdpbGwgc3RvcCB3aXRob3V0IGRvaW5nIGFueXRoaW5nIHdoZW4KK2xvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMgb3ZlcmxhcCB3aXRoIGZpbGVzIHRoYXQgJ2dpdCBwdWxsJy8nZ2l0CittZXJnZScgbWF5IG5lZWQgdG8gdXBkYXRlLgorCitUbyBhdm9pZCByZWNvcmRpbmcgdW5yZWxhdGVkIGNoYW5nZXMgaW4gdGhlIG1lcmdlIGNvbW1pdCwKKydnaXQgcHVsbCcgYW5kICdnaXQgbWVyZ2UnIHdpbGwgYWxzbyBhYm9ydCBpZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMKK3JlZ2lzdGVyZWQgaW4gdGhlIGluZGV4IHJlbGF0aXZlIHRvIHRoZSBgSEVBRGAgY29tbWl0LiAgKFNwZWNpYWwKK25hcnJvdyBleGNlcHRpb25zIHRvIHRoaXMgcnVsZSBtYXkgZXhpc3QgZGVwZW5kaW5nIG9uIHdoaWNoIG1lcmdlCitzdHJhdGVneSBpcyBpbiB1c2UsIGJ1dCBnZW5lcmFsbHksIHRoZSBpbmRleCBtdXN0IG1hdGNoIEhFQUQuKQorCitJZiBhbGwgbmFtZWQgY29tbWl0cyBhcmUgYWxyZWFkeSBhbmNlc3RvcnMgb2YgYEhFQURgLCAnZ2l0IG1lcmdlJword2lsbCBleGl0IGVhcmx5IHdpdGggdGhlIG1lc3NhZ2UgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCisKK0ZBU1QtRk9SV0FSRCBNRVJHRQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK09mdGVuIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBuYW1lZCBjb21taXQuCitUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIGVzcGVjaWFsbHkgd2hlbiBpbnZva2VkIGZyb20gJ2dpdAorcHVsbCc6IHlvdSBhcmUgdHJhY2tpbmcgYW4gdXBzdHJlYW0gcmVwb3NpdG9yeSwgeW91IGhhdmUgY29tbWl0dGVkCitubyBsb2NhbCBjaGFuZ2VzLCBhbmQgbm93IHlvdSB3YW50IHRvIHVwZGF0ZSB0byBhIG5ld2VyIHVwc3RyZWFtCityZXZpc2lvbi4gIEluIHRoaXMgY2FzZSwgYSBuZXcgY29tbWl0IGlzIG5vdCBuZWVkZWQgdG8gc3RvcmUgdGhlCitjb21iaW5lZCBoaXN0b3J5OyBpbnN0ZWFkLCB0aGUgYEhFQURgIChhbG9uZyB3aXRoIHRoZSBpbmRleCkgaXMKK3VwZGF0ZWQgdG8gcG9pbnQgYXQgdGhlIG5hbWVkIGNvbW1pdCwgd2l0aG91dCBjcmVhdGluZyBhbiBleHRyYQorbWVyZ2UgY29tbWl0LgorCitUaGlzIGJlaGF2aW9yIGNhbiBiZSBzdXBwcmVzc2VkIHdpdGggdGhlIGAtLW5vLWZmYCBvcHRpb24uCisKK1RSVUUgTUVSR0UKKy0tLS0tLS0tLS0KKworRXhjZXB0IGluIGEgZmFzdC1mb3J3YXJkIG1lcmdlIChzZWUgYWJvdmUpLCB0aGUgYnJhbmNoZXMgdG8gYmUKK21lcmdlZCBtdXN0IGJlIHRpZWQgdG9nZXRoZXIgYnkgYSBtZXJnZSBjb21taXQgdGhhdCBoYXMgYm90aCBvZiB0aGVtCithcyBpdHMgcGFyZW50cy4KKworQSBtZXJnZWQgdmVyc2lvbiByZWNvbmNpbGluZyB0aGUgY2hhbmdlcyBmcm9tIGFsbCBicmFuY2hlcyB0byBiZQorbWVyZ2VkIGlzIGNvbW1pdHRlZCwgYW5kIHlvdXIgYEhFQURgLCBpbmRleCwgYW5kIHdvcmtpbmcgdHJlZSBhcmUKK3VwZGF0ZWQgdG8gaXQuICBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHdvcmtpbmcKK3RyZWUgYXMgbG9uZyBhcyB0aGV5IGRvIG5vdCBvdmVybGFwOyB0aGUgdXBkYXRlIHdpbGwgcHJlc2VydmUgdGhlbS4KKworV2hlbiBpdCBpcyBub3Qgb2J2aW91cyBob3cgdG8gcmVjb25jaWxlIHRoZSBjaGFuZ2VzLCB0aGUgZm9sbG93aW5nCitoYXBwZW5zOgorCisxLiBUaGUgYEhFQURgIHBvaW50ZXIgc3RheXMgdGhlIHNhbWUuCisyLiBUaGUgYE1FUkdFX0hFQURgIHJlZiBpcyBzZXQgdG8gcG9pbnQgdG8gdGhlIG90aGVyIGJyYW5jaCBoZWFkLgorMy4gUGF0aHMgdGhhdCBtZXJnZWQgY2xlYW5seSBhcmUgdXBkYXRlZCBib3RoIGluIHRoZSBpbmRleCBmaWxlIGFuZAorICAgaW4geW91ciB3b3JraW5nIHRyZWUuCis0LiBGb3IgY29uZmxpY3RpbmcgcGF0aHMsIHRoZSBpbmRleCBmaWxlIHJlY29yZHMgdXAgdG8gdGhyZWUKKyAgIHZlcnNpb25zOiBzdGFnZSAxIHN0b3JlcyB0aGUgdmVyc2lvbiBmcm9tIHRoZSBjb21tb24gYW5jZXN0b3IsCisgICBzdGFnZSAyIGZyb20gYEhFQURgLCBhbmQgc3RhZ2UgMyBmcm9tIGBNRVJHRV9IRUFEYCAoeW91CisgICBjYW4gaW5zcGVjdCB0aGUgc3RhZ2VzIHdpdGggYGdpdCBscy1maWxlcyAtdWApLiAgVGhlIHdvcmtpbmcKKyAgIHRyZWUgZmlsZXMgY29udGFpbiB0aGUgcmVzdWx0IG9mIHRoZSAibWVyZ2UiIHByb2dyYW07IGkuZS4gMy13YXkKKyAgIG1lcmdlIHJlc3VsdHMgd2l0aCBmYW1pbGlhciBjb25mbGljdCBtYXJrZXJzIGA8PDxgIGA9PT1gIGA+Pj5gLgorNS4gTm8gb3RoZXIgY2hhbmdlcyBhcmUgbWFkZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBsb2NhbAorICAgbW9kaWZpY2F0aW9ucyB5b3UgaGFkIGJlZm9yZSB5b3Ugc3RhcnRlZCBtZXJnZSB3aWxsIHN0YXkgdGhlCisgICBzYW1lIGFuZCB0aGUgaW5kZXggZW50cmllcyBmb3IgdGhlbSBzdGF5IGFzIHRoZXkgd2VyZSwKKyAgIGkuZS4gbWF0Y2hpbmcgYEhFQURgLgorCitJZiB5b3UgdHJpZWQgYSBtZXJnZSB3aGljaCByZXN1bHRlZCBpbiBjb21wbGV4IGNvbmZsaWN0cyBhbmQKK3dhbnQgdG8gc3RhcnQgb3ZlciwgeW91IGNhbiByZWNvdmVyIHdpdGggYGdpdCBtZXJnZSAtLWFib3J0YC4KKworTUVSR0lORyBUQUcKKy0tLS0tLS0tLS0tCisKK1doZW4gbWVyZ2luZyBhbiBhbm5vdGF0ZWQgKGFuZCBwb3NzaWJseSBzaWduZWQpIHRhZywgR2l0IGFsd2F5cworY3JlYXRlcyBhIG1lcmdlIGNvbW1pdCBldmVuIGlmIGEgZmFzdC1mb3J3YXJkIG1lcmdlIGlzIHBvc3NpYmxlLCBhbmQKK3RoZSBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSBpcyBwcmVwYXJlZCB3aXRoIHRoZSB0YWcgbWVzc2FnZS4KK0FkZGl0aW9uYWxseSwgaWYgdGhlIHRhZyBpcyBzaWduZWQsIHRoZSBzaWduYXR1cmUgY2hlY2sgaXMgcmVwb3J0ZWQKK2FzIGEgY29tbWVudCBpbiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS4gU2VlIGFsc28gbGlua2dpdDpnaXQtdGFnWzFdLgorCitXaGVuIHlvdSB3YW50IHRvIGp1c3QgaW50ZWdyYXRlIHdpdGggdGhlIHdvcmsgbGVhZGluZyB0byB0aGUgY29tbWl0Cit0aGF0IGhhcHBlbnMgdG8gYmUgdGFnZ2VkLCBlLmcuIHN5bmNocm9uaXppbmcgd2l0aCBhbiB1cHN0cmVhbQorcmVsZWFzZSBwb2ludCwgeW91IG1heSBub3Qgd2FudCB0byBtYWtlIGFuIHVubmVjZXNzYXJ5IG1lcmdlIGNvbW1pdC4KKworSW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4gInVud3JhcCIgdGhlIHRhZyB5b3Vyc2VsZiBiZWZvcmUgZmVlZGluZyBpdAordG8gYGdpdCBtZXJnZWAsIG9yIHBhc3MgYC0tZmYtb25seWAgd2hlbiB5b3UgZG8gbm90IGhhdmUgYW55IHdvcmsgb24KK3lvdXIgb3duLiBlLmcuCisKKy0tLS0KK2dpdCBmZXRjaCBvcmlnaW4KK2dpdCBtZXJnZSB2MS4yLjNeMAorZ2l0IG1lcmdlIC0tZmYtb25seSB2MS4yLjMKKy0tLS0KKworCitIT1cgQ09ORkxJQ1RTIEFSRSBQUkVTRU5URUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEdXJpbmcgYSBtZXJnZSwgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyBhcmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSByZXN1bHQKK29mIHRoZSBtZXJnZS4gIEFtb25nIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvbW1vbiBhbmNlc3RvcidzIHZlcnNpb24sCitub24tb3ZlcmxhcHBpbmcgb25lcyAodGhhdCBpcywgeW91IGNoYW5nZWQgYW4gYXJlYSBvZiB0aGUgZmlsZSB3aGlsZSB0aGUKK290aGVyIHNpZGUgbGVmdCB0aGF0IGFyZWEgaW50YWN0LCBvciB2aWNlIHZlcnNhKSBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZQorZmluYWwgcmVzdWx0IHZlcmJhdGltLiAgV2hlbiBib3RoIHNpZGVzIG1hZGUgY2hhbmdlcyB0byB0aGUgc2FtZSBhcmVhLAoraG93ZXZlciwgR2l0IGNhbm5vdCByYW5kb21seSBwaWNrIG9uZSBzaWRlIG92ZXIgdGhlIG90aGVyLCBhbmQgYXNrcyB5b3UgdG8KK3Jlc29sdmUgaXQgYnkgbGVhdmluZyB3aGF0IGJvdGggc2lkZXMgZGlkIHRvIHRoYXQgYXJlYS4KKworQnkgZGVmYXVsdCwgR2l0IHVzZXMgdGhlIHNhbWUgc3R5bGUgYXMgdGhlIG9uZSB1c2VkIGJ5IHRoZSAibWVyZ2UiIHByb2dyYW0KK2Zyb20gdGhlIFJDUyBzdWl0ZSB0byBwcmVzZW50IHN1Y2ggYSBjb25mbGljdGVkIGh1bmssIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCitIZXJlIGFyZSBsaW5lcyB0aGF0IGFyZSBlaXRoZXIgdW5jaGFuZ2VkIGZyb20gdGhlIGNvbW1vbgorYW5jZXN0b3IsIG9yIGNsZWFubHkgcmVzb2x2ZWQgYmVjYXVzZSBvbmx5IG9uZSBzaWRlIGNoYW5nZWQuCis8PDw8PDw8IHlvdXJzOnNhbXBsZS50eHQKK0NvbmZsaWN0IHJlc29sdXRpb24gaXMgaGFyZDsKK2xldCdzIGdvIHNob3BwaW5nLgorPT09PT09PQorR2l0IG1ha2VzIGNvbmZsaWN0IHJlc29sdXRpb24gZWFzeS4KKz4+Pj4+Pj4gdGhlaXJzOnNhbXBsZS50eHQKK0FuZCBoZXJlIGlzIGFub3RoZXIgbGluZSB0aGF0IGlzIGNsZWFubHkgcmVzb2x2ZWQgb3IgdW5tb2RpZmllZC4KKy0tLS0tLS0tLS0tLQorCitUaGUgYXJlYSB3aGVyZSBhIHBhaXIgb2YgY29uZmxpY3RpbmcgY2hhbmdlcyBoYXBwZW5lZCBpcyBtYXJrZWQgd2l0aCBtYXJrZXJzCitgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YC4gIFRoZSBwYXJ0IGJlZm9yZSB0aGUgYD09PT09PT1gCitpcyB0eXBpY2FsbHkgeW91ciBzaWRlLCBhbmQgdGhlIHBhcnQgYWZ0ZXJ3YXJkcyBpcyB0eXBpY2FsbHkgdGhlaXIgc2lkZS4KKworVGhlIGRlZmF1bHQgZm9ybWF0IGRvZXMgbm90IHNob3cgd2hhdCB0aGUgb3JpZ2luYWwgc2FpZCBpbiB0aGUgY29uZmxpY3RpbmcKK2FyZWEuICBZb3UgY2Fubm90IHRlbGwgaG93IG1hbnkgbGluZXMgYXJlIGRlbGV0ZWQgYW5kIHJlcGxhY2VkIHdpdGgKK0JhcmJpZSdzIHJlbWFyayBvbiB5b3VyIHNpZGUuICBUaGUgb25seSB0aGluZyB5b3UgY2FuIHRlbGwgaXMgdGhhdCB5b3VyCitzaWRlIHdhbnRzIHRvIHNheSBpdCBpcyBoYXJkIGFuZCB5b3UnZCBwcmVmZXIgdG8gZ28gc2hvcHBpbmcsIHdoaWxlIHRoZQorb3RoZXIgc2lkZSB3YW50cyB0byBjbGFpbSBpdCBpcyBlYXN5LgorCitBbiBhbHRlcm5hdGl2ZSBzdHlsZSBjYW4gYmUgdXNlZCBieSBzZXR0aW5nIHRoZSAibWVyZ2UuY29uZmxpY3RTdHlsZSIKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gImRpZmYzIi4gIEluICJkaWZmMyIgc3R5bGUsIHRoZSBhYm92ZSBjb25mbGljdAorbWF5IGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KK0hlcmUgYXJlIGxpbmVzIHRoYXQgYXJlIGVpdGhlciB1bmNoYW5nZWQgZnJvbSB0aGUgY29tbW9uCithbmNlc3Rvciwgb3IgY2xlYW5seSByZXNvbHZlZCBiZWNhdXNlIG9ubHkgb25lIHNpZGUgY2hhbmdlZC4KKzw8PDw8PDwgeW91cnM6c2FtcGxlLnR4dAorQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyBoYXJkOworbGV0J3MgZ28gc2hvcHBpbmcuCit8fHx8fHx8CitDb25mbGljdCByZXNvbHV0aW9uIGlzIGhhcmQuCis9PT09PT09CitHaXQgbWFrZXMgY29uZmxpY3QgcmVzb2x1dGlvbiBlYXN5LgorPj4+Pj4+PiB0aGVpcnM6c2FtcGxlLnR4dAorQW5kIGhlcmUgaXMgYW5vdGhlciBsaW5lIHRoYXQgaXMgY2xlYW5seSByZXNvbHZlZCBvciB1bm1vZGlmaWVkLgorLS0tLS0tLS0tLS0tCisKK0luIGFkZGl0aW9uIHRvIHRoZSBgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YCBtYXJrZXJzLCBpdCB1c2VzCithbm90aGVyIGB8fHx8fHx8YCBtYXJrZXIgdGhhdCBpcyBmb2xsb3dlZCBieSB0aGUgb3JpZ2luYWwgdGV4dC4gIFlvdSBjYW4KK3RlbGwgdGhhdCB0aGUgb3JpZ2luYWwganVzdCBzdGF0ZWQgYSBmYWN0LCBhbmQgeW91ciBzaWRlIHNpbXBseSBnYXZlIGluIHRvCit0aGF0IHN0YXRlbWVudCBhbmQgZ2F2ZSB1cCwgd2hpbGUgdGhlIG90aGVyIHNpZGUgdHJpZWQgdG8gaGF2ZSBhIG1vcmUKK3Bvc2l0aXZlIGF0dGl0dWRlLiAgWW91IGNhbiBzb21ldGltZXMgY29tZSB1cCB3aXRoIGEgYmV0dGVyIHJlc29sdXRpb24gYnkKK3ZpZXdpbmcgdGhlIG9yaWdpbmFsLgorCisKK0hPVyBUTyBSRVNPTFZFIENPTkZMSUNUUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIHNlZWluZyBhIGNvbmZsaWN0LCB5b3UgY2FuIGRvIHR3byB0aGluZ3M6CisKKyAqIERlY2lkZSBub3QgdG8gbWVyZ2UuICBUaGUgb25seSBjbGVhbi11cHMgeW91IG5lZWQgYXJlIHRvIHJlc2V0CisgICB0aGUgaW5kZXggZmlsZSB0byB0aGUgYEhFQURgIGNvbW1pdCB0byByZXZlcnNlIDIuIGFuZCB0byBjbGVhbgorICAgdXAgd29ya2luZyB0cmVlIGNoYW5nZXMgbWFkZSBieSAyLiBhbmQgMy47IGBnaXQgbWVyZ2UgLS1hYm9ydGAKKyAgIGNhbiBiZSB1c2VkIGZvciB0aGlzLgorCisgKiBSZXNvbHZlIHRoZSBjb25mbGljdHMuICBHaXQgd2lsbCBtYXJrIHRoZSBjb25mbGljdHMgaW4KKyAgIHRoZSB3b3JraW5nIHRyZWUuICBFZGl0IHRoZSBmaWxlcyBpbnRvIHNoYXBlIGFuZAorICAgJ2dpdCBhZGQnIHRoZW0gdG8gdGhlIGluZGV4LiAgVXNlICdnaXQgY29tbWl0JyBvcgorICAgJ2dpdCBtZXJnZSAtLWNvbnRpbnVlJyB0byBzZWFsIHRoZSBkZWFsLiBUaGUgbGF0dGVyIGNvbW1hbmQKKyAgIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGlzIGEgKGludGVycnVwdGVkKSBtZXJnZSBpbiBwcm9ncmVzcworICAgYmVmb3JlIGNhbGxpbmcgJ2dpdCBjb21taXQnLgorCitZb3UgY2FuIHdvcmsgdGhyb3VnaCB0aGUgY29uZmxpY3Qgd2l0aCBhIG51bWJlciBvZiB0b29sczoKKworICogVXNlIGEgbWVyZ2V0b29sLiAgYGdpdCBtZXJnZXRvb2xgIHRvIGxhdW5jaCBhIGdyYXBoaWNhbAorICAgbWVyZ2V0b29sIHdoaWNoIHdpbGwgd29yayB5b3UgdGhyb3VnaCB0aGUgbWVyZ2UuCisKKyAqIExvb2sgYXQgdGhlIGRpZmZzLiAgYGdpdCBkaWZmYCB3aWxsIHNob3cgYSB0aHJlZS13YXkgZGlmZiwKKyAgIGhpZ2hsaWdodGluZyBjaGFuZ2VzIGZyb20gYm90aCB0aGUgYEhFQURgIGFuZCBgTUVSR0VfSEVBRGAKKyAgIHZlcnNpb25zLgorCisgKiBMb29rIGF0IHRoZSBkaWZmcyBmcm9tIGVhY2ggYnJhbmNoLiBgZ2l0IGxvZyAtLW1lcmdlIC1wIDxwYXRoPmAKKyAgIHdpbGwgc2hvdyBkaWZmcyBmaXJzdCBmb3IgdGhlIGBIRUFEYCB2ZXJzaW9uIGFuZCB0aGVuIHRoZQorICAgYE1FUkdFX0hFQURgIHZlcnNpb24uCisKKyAqIExvb2sgYXQgdGhlIG9yaWdpbmFscy4gIGBnaXQgc2hvdyA6MTpmaWxlbmFtZWAgc2hvd3MgdGhlCisgICBjb21tb24gYW5jZXN0b3IsIGBnaXQgc2hvdyA6MjpmaWxlbmFtZWAgc2hvd3MgdGhlIGBIRUFEYAorICAgdmVyc2lvbiwgYW5kIGBnaXQgc2hvdyA6MzpmaWxlbmFtZWAgc2hvd3MgdGhlIGBNRVJHRV9IRUFEYAorICAgdmVyc2lvbi4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2hlcyBgZml4ZXNgIGFuZCBgZW5oYW5jZW1lbnRzYCBvbiB0b3Agb2YKKyAgdGhlIGN1cnJlbnQgYnJhbmNoLCBtYWtpbmcgYW4gb2N0b3B1cyBtZXJnZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgZml4ZXMgZW5oYW5jZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2ggYG9ic29sZXRlYCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgdXNpbmcgYG91cnNgCisgIG1lcmdlIHN0cmF0ZWd5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtcyBvdXJzIG9ic29sZXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2ggYG1haW50YCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0IGRvIG5vdCBtYWtlCisgIGEgbmV3IGNvbW1pdCBhdXRvbWF0aWNhbGx5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBtYWludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGNhbiBiZSB1c2VkIHdoZW4geW91IHdhbnQgdG8gaW5jbHVkZSBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlCittZXJnZSwgb3Igd2FudCB0byB3cml0ZSB5b3VyIG93biBtZXJnZSBjb21taXQgbWVzc2FnZS4KKysKK1lvdSBzaG91bGQgcmVmcmFpbiBmcm9tIGFidXNpbmcgdGhpcyBvcHRpb24gdG8gc25lYWsgc3Vic3RhbnRpYWwKK2NoYW5nZXMgaW50byBhIG1lcmdlIGNvbW1pdC4gIFNtYWxsIGZpeHVwcyBsaWtlIGJ1bXBpbmcKK3JlbGVhc2UvdmVyc2lvbiBuYW1lIHdvdWxkIGJlIGFjY2VwdGFibGUuCisKKworaW5jbHVkZTo6bWVyZ2Utc3RyYXRlZ2llcy50eHRbXQorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitpbmNsdWRlOjpjb25maWcvbWVyZ2UudHh0W10KKworYnJhbmNoLjxuYW1lPi5tZXJnZU9wdGlvbnM6OgorCVNldHMgZGVmYXVsdCBvcHRpb25zIGZvciBtZXJnaW5nIGludG8gYnJhbmNoIDxuYW1lPi4gVGhlIHN5bnRheCBhbmQKKwlzdXBwb3J0ZWQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgJ2dpdCBtZXJnZScsIGJ1dCBvcHRpb24KKwl2YWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZtdC1tZXJnZS1tc2dbMV0sIGxpbmtnaXQ6Z2l0LXB1bGxbMV0sCitsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0sCitsaW5rZ2l0OmdpdC1yZXNldFsxXSwKK2xpbmtnaXQ6Z2l0LWRpZmZbMV0sIGxpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdLAorbGlua2dpdDpnaXQtYWRkWzFdLCBsaW5rZ2l0OmdpdC1ybVsxXSwKK2xpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC0tbGliLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC0tbGliLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGE5ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLS1saWIudHh0CkBAIC0wLDAgKzEsNDkgQEAKK2dpdC1tZXJnZXRvb2x7bGl0ZGR9bGliKDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWVyZ2V0b29sLS1saWIgLSBDb21tb24gR2l0IG1lcmdlIHRvb2wgc2hlbGwgc2NyaXB0bGV0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydUT09MX01PREU9KGRpZmZ8bWVyZ2UpIC4gIiQoZ2l0IC0tZXhlYy1wYXRoKS9naXQtbWVyZ2V0b29se2xpdGRkfWxpYiInCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIG5vdCBhIGNvbW1hbmQgdGhlIGVuZCB1c2VyIHdvdWxkIHdhbnQgdG8gcnVuLiAgRXZlci4KK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBtZWFudCBmb3IgcGVvcGxlIHdobyBhcmUgc3R1ZHlpbmcgdGhlCitQb3JjZWxhaW4taXNoIHNjcmlwdHMgYW5kL29yIGFyZSB3cml0aW5nIG5ldyBvbmVzLgorCitUaGUgJ2dpdC1tZXJnZXRvb2x7bGl0ZGR9bGliJyBzY3JpcHRsZXQgaXMgZGVzaWduZWQgdG8gYmUgc291cmNlZCAodXNpbmcKK2AuYCkgYnkgb3RoZXIgc2hlbGwgc2NyaXB0cyB0byBzZXQgdXAgZnVuY3Rpb25zIGZvciB3b3JraW5nCit3aXRoIEdpdCBtZXJnZSB0b29scy4KKworQmVmb3JlIHNvdXJjaW5nICdnaXQtbWVyZ2V0b29se2xpdGRkfWxpYicsIHlvdXIgc2NyaXB0IG11c3Qgc2V0IGBUT09MX01PREVgCit0byBkZWZpbmUgdGhlIG9wZXJhdGlvbiBtb2RlIGZvciB0aGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdy4KKydkaWZmJyBhbmQgJ21lcmdlJyBhcmUgdmFsaWQgdmFsdWVzLgorCitGVU5DVElPTlMKKy0tLS0tLS0tLQorZ2V0X21lcmdlX3Rvb2w6OgorCXJldHVybnMgYSBtZXJnZSB0b29sLiB0aGUgcmV0dXJuIGNvZGUgaXMgMSBpZiB3ZSByZXR1cm5lZCBhIGd1ZXNzZWQKKwltZXJnZSB0b29sLCBlbHNlIDAuICckR0lUX01FUkdFVE9PTF9HVUknIG1heSBiZSBzZXQgdG8gJ3RydWUnIHRvCisJc2VhcmNoIGZvciB0aGUgYXBwcm9wcmlhdGUgZ3VpdG9vbC4KKworZ2V0X21lcmdlX3Rvb2xfY21kOjoKKwlyZXR1cm5zIHRoZSBjdXN0b20gY29tbWFuZCBmb3IgYSBtZXJnZSB0b29sLgorCitnZXRfbWVyZ2VfdG9vbF9wYXRoOjoKKwlyZXR1cm5zIHRoZSBjdXN0b20gcGF0aCBmb3IgYSBtZXJnZSB0b29sLgorCitydW5fbWVyZ2VfdG9vbDo6CisJbGF1bmNoZXMgYSBtZXJnZSB0b29sIGdpdmVuIHRoZSB0b29sIG5hbWUgYW5kIGEgdHJ1ZS9mYWxzZQorCWZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBhIG1lcmdlIGJhc2UgaXMgcHJlc2VudC4KKwknJE1FUkdFRCcsICckTE9DQUwnLCAnJFJFTU9URScsIGFuZCAnJEJBU0UnIG11c3QgYmUgZGVmaW5lZAorCWZvciB1c2UgYnkgdGhlIG1lcmdlIHRvb2wuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxNDcwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQKQEAgLTAsMCArMSwxMTQgQEAKK2dpdC1tZXJnZXRvb2woMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdldG9vbCAtIFJ1biBtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIHRvb2xzIHRvIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZXRvb2wnIFstLXRvb2w9PHRvb2w+XSBbLXkgfCAtLVtuby1dcHJvbXB0XSBbPGZpbGU+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVXNlIGBnaXQgbWVyZ2V0b29sYCB0byBydW4gb25lIG9mIHNldmVyYWwgbWVyZ2UgdXRpbGl0aWVzIHRvIHJlc29sdmUKK21lcmdlIGNvbmZsaWN0cy4gIEl0IGlzIHR5cGljYWxseSBydW4gYWZ0ZXIgJ2dpdCBtZXJnZScuCisKK0lmIG9uZSBvciBtb3JlIDxmaWxlPiBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgdGhlIG1lcmdlIHRvb2wgcHJvZ3JhbSB3aWxsCitiZSBydW4gdG8gcmVzb2x2ZSBkaWZmZXJlbmNlcyBvbiBlYWNoIGZpbGUgKHNraXBwaW5nIHRob3NlIHdpdGhvdXQKK2NvbmZsaWN0cykuICBTcGVjaWZ5aW5nIGEgZGlyZWN0b3J5IHdpbGwgaW5jbHVkZSBhbGwgdW5yZXNvbHZlZCBmaWxlcyBpbgordGhhdCBwYXRoLiAgSWYgbm8gPGZpbGU+IG5hbWVzIGFyZSBzcGVjaWZpZWQsICdnaXQgbWVyZ2V0b29sJyB3aWxsIHJ1bgordGhlIG1lcmdlIHRvb2wgcHJvZ3JhbSBvbiBldmVyeSBmaWxlIHdpdGggbWVyZ2UgY29uZmxpY3RzLgorCitPUFRJT05TCistLS0tLS0tCistdCA8dG9vbD46OgorLS10b29sPTx0b29sPjo6CisJVXNlIHRoZSBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0gc3BlY2lmaWVkIGJ5IDx0b29sPi4KKwlWYWxpZCB2YWx1ZXMgaW5jbHVkZSBlbWVyZ2UsIGd2aW1kaWZmLCBrZGlmZjMsCisJbWVsZCwgdmltZGlmZiwgYW5kIHRvcnRvaXNlbWVyZ2UuIFJ1biBgZ2l0IG1lcmdldG9vbCAtLXRvb2wtaGVscGAKKwlmb3IgdGhlIGxpc3Qgb2YgdmFsaWQgPHRvb2w+IHNldHRpbmdzLgorKworSWYgYSBtZXJnZSByZXNvbHV0aW9uIHByb2dyYW0gaXMgbm90IHNwZWNpZmllZCwgJ2dpdCBtZXJnZXRvb2wnCit3aWxsIHVzZSB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgbWVyZ2UudG9vbGAuICBJZiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYG1lcmdlLnRvb2xgIGlzIG5vdCBzZXQsICdnaXQgbWVyZ2V0b29sJword2lsbCBwaWNrIGEgc3VpdGFibGUgZGVmYXVsdC4KKysKK1lvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHRoZSB0b29sIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBtZXJnZXRvb2wuPHRvb2w+LnBhdGhgLiBGb3IgZXhhbXBsZSwgeW91CitjYW4gY29uZmlndXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGtkaWZmMyBieSBzZXR0aW5nCitgbWVyZ2V0b29sLmtkaWZmMy5wYXRoYC4gT3RoZXJ3aXNlLCAnZ2l0IG1lcmdldG9vbCcgYXNzdW1lcyB0aGUKK3Rvb2wgaXMgYXZhaWxhYmxlIGluIFBBVEguCisrCitJbnN0ZWFkIG9mIHJ1bm5pbmcgb25lIG9mIHRoZSBrbm93biBtZXJnZSB0b29sIHByb2dyYW1zLAorJ2dpdCBtZXJnZXRvb2wnIGNhbiBiZSBjdXN0b21pemVkIHRvIHJ1biBhbiBhbHRlcm5hdGl2ZSBwcm9ncmFtCitieSBzcGVjaWZ5aW5nIHRoZSBjb21tYW5kIGxpbmUgdG8gaW52b2tlIGluIGEgY29uZmlndXJhdGlvbgordmFyaWFibGUgYG1lcmdldG9vbC48dG9vbD4uY21kYC4KKysKK1doZW4gJ2dpdCBtZXJnZXRvb2wnIGlzIGludm9rZWQgd2l0aCB0aGlzIHRvb2wgKGVpdGhlciB0aHJvdWdoIHRoZQorYC10YCBvciBgLS10b29sYCBvcHRpb24gb3IgdGhlIGBtZXJnZS50b29sYCBjb25maWd1cmF0aW9uCit2YXJpYWJsZSkgdGhlIGNvbmZpZ3VyZWQgY29tbWFuZCBsaW5lIHdpbGwgYmUgaW52b2tlZCB3aXRoIGAkQkFTRWAKK3NldCB0byB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbW1vbiBiYXNlIGZvcgordGhlIG1lcmdlLCBpZiBhdmFpbGFibGU7IGAkTE9DQUxgIHNldCB0byB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeQorZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBvbiB0aGUgY3VycmVudCBicmFuY2g7CitgJFJFTU9URWAgc2V0IHRvIHRoZSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyB0aGUKK2NvbnRlbnRzIG9mIHRoZSBmaWxlIHRvIGJlIG1lcmdlZCwgYW5kIGAkTUVSR0VEYCBzZXQgdG8gdGhlIG5hbWUKK29mIHRoZSBmaWxlIHRvIHdoaWNoIHRoZSBtZXJnZSB0b29sIHNob3VsZCB3cml0ZSB0aGUgcmVzdWx0IG9mIHRoZQorbWVyZ2UgcmVzb2x1dGlvbi4KKysKK0lmIHRoZSBjdXN0b20gbWVyZ2UgdG9vbCBjb3JyZWN0bHkgaW5kaWNhdGVzIHRoZSBzdWNjZXNzIG9mIGEKK21lcmdlIHJlc29sdXRpb24gd2l0aCBpdHMgZXhpdCBjb2RlLCB0aGVuIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSBgbWVyZ2V0b29sLjx0b29sPi50cnVzdEV4aXRDb2RlYCBjYW4gYmUgc2V0IHRvIGB0cnVlYC4KK090aGVyd2lzZSwgJ2dpdCBtZXJnZXRvb2wnIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIGluZGljYXRlIHRoZQorc3VjY2VzcyBvZiB0aGUgcmVzb2x1dGlvbiBhZnRlciB0aGUgY3VzdG9tIHRvb2wgaGFzIGV4aXRlZC4KKworLS10b29sLWhlbHA6OgorCVByaW50IGEgbGlzdCBvZiBtZXJnZSB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAuCisKKy15OjoKKy0tbm8tcHJvbXB0OjoKKwlEb24ndCBwcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgbWVyZ2UgcmVzb2x1dGlvbgorCXByb2dyYW0uCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIGlzCisJZXhwbGljaXRseSBzcGVjaWZpZWQgd2l0aCB0aGUgYC0tdG9vbGAgb3B0aW9uIG9yIHdpdGggdGhlCisJYG1lcmdlLnRvb2xgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKy0tcHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtCisJdG8gZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0byBza2lwIHRoZSBwYXRoLgorCistZzo6CistLWd1aTo6CisJV2hlbiAnZ2l0LW1lcmdldG9vbCcgaXMgaW52b2tlZCB3aXRoIHRoZSBgLWdgIG9yIGAtLWd1aWAgb3B0aW9uCisJdGhlIGRlZmF1bHQgbWVyZ2UgdG9vbCB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY29uZmlndXJlZAorCWBtZXJnZS5ndWl0b29sYCB2YXJpYWJsZSBpbnN0ZWFkIG9mIGBtZXJnZS50b29sYC4gSWYKKwlgbWVyZ2UuZ3VpdG9vbGAgaXMgbm90IHNldCwgd2Ugd2lsbCBmYWxsYmFjayB0byB0aGUgdG9vbAorCWNvbmZpZ3VyZWQgdW5kZXIgYG1lcmdlLnRvb2xgLgorCistLW5vLWd1aTo6CisJVGhpcyBvdmVycmlkZXMgYSBwcmV2aW91cyBgLWdgIG9yIGAtLWd1aWAgc2V0dGluZyBhbmQgcmVhZHMgdGhlCisJZGVmYXVsdCBtZXJnZSB0b29sIHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBjb25maWd1cmVkIGBtZXJnZS50b29sYAorCXZhcmlhYmxlLgorCistTzxvcmRlcmZpbGU+OjoKKwlQcm9jZXNzIGZpbGVzIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgaW4gdGhlCisJPG9yZGVyZmlsZT4sIHdoaWNoIGhhcyBvbmUgc2hlbGwgZ2xvYiBwYXR0ZXJuIHBlciBsaW5lLgorCVRoaXMgb3ZlcnJpZGVzIHRoZSBgZGlmZi5vcmRlckZpbGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKwkoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuICBUbyBjYW5jZWwgYGRpZmYub3JkZXJGaWxlYCwKKwl1c2UgYC1PL2Rldi9udWxsYC4KKworVEVNUE9SQVJZIEZJTEVTCistLS0tLS0tLS0tLS0tLS0KK2BnaXQgbWVyZ2V0b29sYCBjcmVhdGVzIGAqLm9yaWdgIGJhY2t1cCBmaWxlcyB3aGlsZSByZXNvbHZpbmcgbWVyZ2VzLgorVGhlc2UgYXJlIHNhZmUgdG8gcmVtb3ZlIG9uY2UgYSBmaWxlIGhhcyBiZWVuIG1lcmdlZCBhbmQgaXRzCitgZ2l0IG1lcmdldG9vbGAgc2Vzc2lvbiBoYXMgY29tcGxldGVkLgorCitTZXR0aW5nIHRoZSBgbWVyZ2V0b29sLmtlZXBCYWNrdXBgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYGZhbHNlYAorY2F1c2VzIGBnaXQgbWVyZ2V0b29sYCB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgYmFja3VwIGFzIGZpbGVzCithcmUgc3VjY2Vzc2Z1bGx5IG1lcmdlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2YTc1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdGFnLnR4dApAQCAtMCwwICsxLDM5IEBACitnaXQtbWt0YWcoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWt0YWcgLSBDcmVhdGVzIGEgdGFnIG9iamVjdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBta3RhZycKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBhIHRhZyBjb250ZW50cyBvbiBzdGFuZGFyZCBpbnB1dCBhbmQgY3JlYXRlcyBhIHRhZyBvYmplY3QKK3RoYXQgY2FuIGFsc28gYmUgdXNlZCB0byBzaWduIG90aGVyIG9iamVjdHMuCisKK1RoZSBvdXRwdXQgaXMgdGhlIG5ldyB0YWcncyA8b2JqZWN0PiBpZGVudGlmaWVyLgorCitUYWcgRm9ybWF0CistLS0tLS0tLS0tCitBIHRhZyBzaWduYXR1cmUgZmlsZSwgdG8gYmUgZmVkIHRvIHRoaXMgY29tbWFuZCdzIHN0YW5kYXJkIGlucHV0LAoraGFzIGEgdmVyeSBzaW1wbGUgZml4ZWQgZm9ybWF0OiBmb3VyIGxpbmVzIG9mCisKKyAgb2JqZWN0IDxzaGExPgorICB0eXBlIDx0eXBlbmFtZT4KKyAgdGFnIDx0YWduYW1lPgorICB0YWdnZXIgPHRhZ2dlcj4KKworZm9sbG93ZWQgYnkgc29tZSAnb3B0aW9uYWwnIGZyZWUtZm9ybSBtZXNzYWdlIChzb21lIHRhZ3MgY3JlYXRlZAorYnkgb2xkZXIgR2l0IG1heSBub3QgaGF2ZSBgdGFnZ2VyYCBsaW5lKS4gIFRoZSBtZXNzYWdlLCB3aGVuCitleGlzdHMsIGlzIHNlcGFyYXRlZCBieSBhIGJsYW5rIGxpbmUgZnJvbSB0aGUgaGVhZGVyLiAgVGhlCittZXNzYWdlIHBhcnQgbWF5IGNvbnRhaW4gYSBzaWduYXR1cmUgdGhhdCBHaXQgaXRzZWxmIGRvZXNuJ3QKK2NhcmUgYWJvdXQsIGJ1dCB0aGF0IGNhbiBiZSB2ZXJpZmllZCB3aXRoIGdwZy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2ZlMmIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dApAQCAtMCwwICsxLDQwIEBACitnaXQtbWt0cmVlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ta3RyZWUgLSBCdWlsZCBhIHRyZWUtb2JqZWN0IGZyb20gbHMtdHJlZSBmb3JtYXR0ZWQgdGV4dAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBta3RyZWUnIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgc3RhbmRhcmQgaW5wdXQgaW4gbm9uLXJlY3Vyc2l2ZSBgbHMtdHJlZWAgb3V0cHV0IGZvcm1hdCwgYW5kIGNyZWF0ZXMKK2EgdHJlZSBvYmplY3QuICBUaGUgb3JkZXIgb2YgdGhlIHRyZWUgZW50cmllcyBpcyBub3JtYWxpemVkIGJ5IG1rdHJlZSBzbworcHJlLXNvcnRpbmcgdGhlIGlucHV0IGlzIG5vdCByZXF1aXJlZC4gIFRoZSBvYmplY3QgbmFtZSBvZiB0aGUgdHJlZSBvYmplY3QKK2J1aWx0IGlzIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworT1BUSU9OUworLS0tLS0tLQorLXo6OgorCVJlYWQgdGhlIE5VTC10ZXJtaW5hdGVkIGBscy10cmVlIC16YCBvdXRwdXQgaW5zdGVhZC4KKworLS1taXNzaW5nOjoKKwlBbGxvdyBtaXNzaW5nIG9iamVjdHMuICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgKHdpdGhvdXQgdGhpcyBvcHRpb24pCisJaXMgdG8gdmVyaWZ5IHRoYXQgZWFjaCB0cmVlIGVudHJ5J3Mgc2hhMSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nCisJb2JqZWN0LiAgVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgdHJlYXRtZW50IG9mIGdpdGxpbmsgZW50cmllcworCShha2EgInN1Ym1vZHVsZXMiKSB3aGljaCBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4KKworLS1iYXRjaDo6CisJQWxsb3cgYnVpbGRpbmcgb2YgbW9yZSB0aGFuIG9uZSB0cmVlIG9iamVjdCBiZWZvcmUgZXhpdGluZy4gIEVhY2gKKwl0cmVlIGlzIHNlcGFyYXRlZCBieSBhcyBzaW5nbGUgYmxhbmsgbGluZS4gVGhlIGZpbmFsIG5ldy1saW5lIGlzCisJb3B0aW9uYWwuICBOb3RlIC0gaWYgdGhlIGAtemAgb3B0aW9uIGlzIHVzZWQsIGxpbmVzIGFyZSB0ZXJtaW5hdGVkCisJd2l0aCBOVUwuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdWx0aS1wYWNrLWluZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDJkOWFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQKQEAgLTAsMCArMSw5MiBAQAorZ2l0LW11bHRpLXBhY2staW5kZXgoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tdWx0aS1wYWNrLWluZGV4IC0gV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbXVsdGktcGFjay1pbmRleCcgWy0tb2JqZWN0LWRpcj08ZGlyPl0gWy0tW25vLV1wcm9ncmVzc10gPHN1YmNvbW1hbmQ+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorV3JpdGUgb3IgdmVyaWZ5IGEgbXVsdGktcGFjay1pbmRleCAoTUlEWCkgZmlsZS4KKworT1BUSU9OUworLS0tLS0tLQorCistLW9iamVjdC1kaXI9PGRpcj46OgorCVVzZSBnaXZlbiBkaXJlY3RvcnkgZm9yIHRoZSBsb2NhdGlvbiBvZiBHaXQgb2JqZWN0cy4gV2UgY2hlY2sKKwlgPGRpcj4vcGFja3MvbXVsdGktcGFjay1pbmRleGAgZm9yIHRoZSBjdXJyZW50IE1JRFggZmlsZSwgYW5kCisJYDxkaXI+L3BhY2tzYCBmb3IgdGhlIHBhY2stZmlsZXMgdG8gaW5kZXguCisKKy0tW25vLV1wcm9ncmVzczo6CisJVHVybiBwcm9ncmVzcyBvbi9vZmYgZXhwbGljaXRseS4gSWYgbmVpdGhlciBpcyBzcGVjaWZpZWQsIHByb2dyZXNzIGlzCisJc2hvd24gaWYgc3RhbmRhcmQgZXJyb3IgaXMgY29ubmVjdGVkIHRvIGEgdGVybWluYWwuCisKK1RoZSBmb2xsb3dpbmcgc3ViY29tbWFuZHMgYXJlIGF2YWlsYWJsZToKKword3JpdGU6OgorCVdyaXRlIGEgbmV3IE1JRFggZmlsZS4KKwordmVyaWZ5OjoKKwlWZXJpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBNSURYIGZpbGUuCisKK2V4cGlyZTo6CisJRGVsZXRlIHRoZSBwYWNrLWZpbGVzIHRoYXQgYXJlIHRyYWNrZWQgCWJ5IHRoZSBNSURYIGZpbGUsIGJ1dAorCWhhdmUgbm8gb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHRoZSBNSURYLiBSZXdyaXRlIHRoZSBNSURYIGZpbGUKKwlhZnRlcndhcmQgdG8gcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIHRoZXNlIHBhY2stZmlsZXMuCisKK3JlcGFjazo6CisJQ3JlYXRlIGEgbmV3IHBhY2stZmlsZSBjb250YWluaW5nIG9iamVjdHMgaW4gc21hbGwgcGFjay1maWxlcworCXJlZmVyZW5jZWQgYnkgdGhlIG11bHRpLXBhY2staW5kZXguIElmIHRoZSBzaXplIGdpdmVuIGJ5IHRoZQorCWAtLWJhdGNoLXNpemU9PHNpemU+YCBhcmd1bWVudCBpcyB6ZXJvLCB0aGVuIGNyZWF0ZSBhIHBhY2sKKwljb250YWluaW5nIGFsbCBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlIG11bHRpLXBhY2staW5kZXguIEZvcgorCWEgbm9uLXplcm8gYmF0Y2ggc2l6ZSwgU2VsZWN0IHRoZSBwYWNrLWZpbGVzIGJ5IGV4YW1pbmluZyBwYWNrcworCWZyb20gb2xkZXN0LXRvLW5ld2VzdCwgY29tcHV0aW5nIHRoZSAiZXhwZWN0ZWQgc2l6ZSIgYnkgY291bnRpbmcKKwl0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHBhY2sgcmVmZXJlbmNlZCBieSB0aGUKKwltdWx0aS1wYWNrLWluZGV4LCB0aGVuIGRpdmlkZSBieSB0aGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4KKwl0aGUgcGFjayBhbmQgbXVsdGlwbHkgYnkgdGhlIHBhY2sgc2l6ZS4gV2Ugc2VsZWN0IHBhY2tzIHdpdGgKKwlleHBlY3RlZCBzaXplIGJlbG93IHRoZSBiYXRjaCBzaXplIHVudGlsIHRoZSBzZXQgb2YgcGFja3MgaGF2ZQorCXRvdGFsIGV4cGVjdGVkIHNpemUgYXQgbGVhc3QgdGhlIGJhdGNoIHNpemUuIElmIHRoZSB0b3RhbCBzaXplCisJZG9lcyBub3QgcmVhY2ggdGhlIGJhdGNoIHNpemUsIHRoZW4gZG8gbm90aGluZy4gSWYgYSBuZXcgcGFjay0KKwlmaWxlIGlzIGNyZWF0ZWQsIHJld3JpdGUgdGhlIG11bHRpLXBhY2staW5kZXggdG8gcmVmZXJlbmNlIHRoZQorCW5ldyBwYWNrLWZpbGUuIEEgbGF0ZXIgcnVuIG9mICdnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUnIHdpbGwKKwlkZWxldGUgdGhlIHBhY2stZmlsZXMgdGhhdCB3ZXJlIHBhcnQgb2YgdGhpcyBiYXRjaC4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBXcml0ZSBhIE1JRFggZmlsZSBmb3IgdGhlIHBhY2tmaWxlcyBpbiB0aGUgY3VycmVudCAuZ2l0IGZvbGRlci4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFdyaXRlIGEgTUlEWCBmaWxlIGZvciB0aGUgcGFja2ZpbGVzIGluIGFuIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXIgPGFsdD4gd3JpdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVmVyaWZ5IHRoZSBNSURYIGZpbGUgZm9yIHRoZSBwYWNrZmlsZXMgaW4gdGhlIGN1cnJlbnQgLmdpdCBmb2xkZXIuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitTZWUgbGluazp0ZWNobmljYWwvbXVsdGktcGFjay1pbmRleC5odG1sW1RoZSBNdWx0aS1QYWNrLUluZGV4IERlc2lnbgorRG9jdW1lbnRdIGFuZCBsaW5rOnRlY2huaWNhbC9wYWNrLWZvcm1hdC5odG1sW1RoZSBNdWx0aS1QYWNrLUluZGV4CitGb3JtYXRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBtdWx0aS1wYWNrLWluZGV4IGZlYXR1cmUuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0NDliZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dApAQCAtMCwwICsxLDY5IEBACitnaXQtbXYoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbXYgLSBNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbXYnIDxvcHRpb25zPi4uLiA8YXJncz4uLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGRpcmVjdG9yeSBvciBzeW1saW5rLgorCisgZ2l0IG12IFstdl0gWy1mXSBbLW5dIFsta10gPHNvdXJjZT4gPGRlc3RpbmF0aW9uPgorIGdpdCBtdiBbLXZdIFstZl0gWy1uXSBbLWtdIDxzb3VyY2U+IC4uLiA8ZGVzdGluYXRpb24gZGlyZWN0b3J5PgorCitJbiB0aGUgZmlyc3QgZm9ybSwgaXQgcmVuYW1lcyA8c291cmNlPiwgd2hpY2ggbXVzdCBleGlzdCBhbmQgYmUgZWl0aGVyCithIGZpbGUsIHN5bWxpbmsgb3IgZGlyZWN0b3J5LCB0byA8ZGVzdGluYXRpb24+LgorSW4gdGhlIHNlY29uZCBmb3JtLCB0aGUgbGFzdCBhcmd1bWVudCBoYXMgdG8gYmUgYW4gZXhpc3RpbmcKK2RpcmVjdG9yeTsgdGhlIGdpdmVuIHNvdXJjZXMgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoaXMgZGlyZWN0b3J5LgorCitUaGUgaW5kZXggaXMgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGJ1dCB0aGUgY2hhbmdlIG11c3Qgc3RpbGwgYmUKK2NvbW1pdHRlZC4KKworT1BUSU9OUworLS0tLS0tLQorLWY6OgorLS1mb3JjZTo6CisJRm9yY2UgcmVuYW1pbmcgb3IgbW92aW5nIG9mIGEgZmlsZSBldmVuIGlmIHRoZSB0YXJnZXQgZXhpc3RzCistazo6CisJU2tpcCBtb3ZlIG9yIHJlbmFtZSBhY3Rpb25zIHdoaWNoIHdvdWxkIGxlYWQgdG8gYW4gZXJyb3IKKwljb25kaXRpb24uIEFuIGVycm9yIGhhcHBlbnMgd2hlbiBhIHNvdXJjZSBpcyBuZWl0aGVyIGV4aXN0aW5nIG5vcgorCWNvbnRyb2xsZWQgYnkgR2l0LCBvciB3aGVuIGl0IHdvdWxkIG92ZXJ3cml0ZSBhbiBleGlzdGluZworCWZpbGUgdW5sZXNzIGAtZmAgaXMgZ2l2ZW4uCistbjo6CistLWRyeS1ydW46OgorCURvIG5vdGhpbmc7IG9ubHkgc2hvdyB3aGF0IHdvdWxkIGhhcHBlbgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCB0aGUgbmFtZXMgb2YgZmlsZXMgYXMgdGhleSBhcmUgbW92ZWQuCisKK1NVQk1PRFVMRVMKKy0tLS0tLS0tLS0KK01vdmluZyBhIHN1Ym1vZHVsZSB1c2luZyBhIGdpdGZpbGUgKHdoaWNoIG1lYW5zIHRoZXkgd2VyZSBjbG9uZWQKK3dpdGggYSBHaXQgdmVyc2lvbiAxLjcuOCBvciBuZXdlcikgd2lsbCB1cGRhdGUgdGhlIGdpdGZpbGUgYW5kCitjb3JlLndvcmt0cmVlIHNldHRpbmcgdG8gbWFrZSB0aGUgc3VibW9kdWxlIHdvcmsgaW4gdGhlIG5ldyBsb2NhdGlvbi4KK0l0IGFsc28gd2lsbCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgc3VibW9kdWxlLjxuYW1lPi5wYXRoIHNldHRpbmcgaW4KK3RoZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZmlsZSBhbmQgc3RhZ2UgdGhhdCBmaWxlICh1bmxlc3MgLW4gaXMgdXNlZCkuCisKK0JVR1MKKy0tLS0KK0VhY2ggdGltZSBhIHN1cGVycHJvamVjdCB1cGRhdGUgbW92ZXMgYSBwb3B1bGF0ZWQgc3VibW9kdWxlIChlLmcuIHdoZW4KK3N3aXRjaGluZyBiZXR3ZWVuIGNvbW1pdHMgYmVmb3JlIGFuZCBhZnRlciB0aGUgbW92ZSkgYSBzdGFsZSBzdWJtb2R1bGUKK2NoZWNrb3V0IHdpbGwgcmVtYWluIGluIHRoZSBvbGQgbG9jYXRpb24gYW5kIGFuIGVtcHR5IGRpcmVjdG9yeSB3aWxsCithcHBlYXIgaW4gdGhlIG5ldyBsb2NhdGlvbi4gVG8gcG9wdWxhdGUgdGhlIHN1Ym1vZHVsZSBhZ2FpbiBpbiB0aGUgbmV3Citsb2NhdGlvbiB0aGUgdXNlciB3aWxsIGhhdmUgdG8gcnVuICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIKK2FmdGVyd2FyZHMuIFJlbW92aW5nIHRoZSBvbGQgZGlyZWN0b3J5IGlzIG9ubHkgc2FmZSB3aGVuIGl0IHVzZXMgYQorZ2l0ZmlsZSwgYXMgb3RoZXJ3aXNlIHRoZSBoaXN0b3J5IG9mIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSBkZWxldGVkCit0b28uIEJvdGggc3RlcHMgd2lsbCBiZSBvYnNvbGV0ZSB3aGVuIHJlY3Vyc2l2ZSBzdWJtb2R1bGUgdXBkYXRlIGhhcworYmVlbiBpbXBsZW1lbnRlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiMGViMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dApAQCAtMCwwICsxLDg5IEBACitnaXQtbmFtZS1yZXYoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbmFtZS1yZXYgLSBGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG5hbWUtcmV2JyBbLS10YWdzXSBbLS1yZWZzPTxwYXR0ZXJuPl0KKwkgICAgICAgKCAtLWFsbCB8IC0tc3RkaW4gfCA8Y29tbWl0LWlzaD4uLi4gKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZpbmRzIHN5bWJvbGljIG5hbWVzIHN1aXRhYmxlIGZvciBodW1hbiBkaWdlc3Rpb24gZm9yIHJldmlzaW9ucyBnaXZlbiBpbiBhbnkKK2Zvcm1hdCBwYXJzYWJsZSBieSAnZ2l0IHJldi1wYXJzZScuCisKKworT1BUSU9OUworLS0tLS0tLQorCistLXRhZ3M6OgorCURvIG5vdCB1c2UgYnJhbmNoIG5hbWVzLCBidXQgb25seSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMKKworLS1yZWZzPTxwYXR0ZXJuPjo6CisJT25seSB1c2UgcmVmcyB3aG9zZSBuYW1lcyBtYXRjaCBhIGdpdmVuIHNoZWxsIHBhdHRlcm4uICBUaGUgcGF0dGVybgorCWNhbiBiZSBvbmUgb2YgYnJhbmNoIG5hbWUsIHRhZyBuYW1lIG9yIGZ1bGx5IHF1YWxpZmllZCByZWYgbmFtZS4gSWYKKwlnaXZlbiBtdWx0aXBsZSB0aW1lcywgdXNlIHJlZnMgd2hvc2UgbmFtZXMgbWF0Y2ggYW55IG9mIHRoZSBnaXZlbiBzaGVsbAorCXBhdHRlcm5zLiBVc2UgYC0tbm8tcmVmc2AgdG8gY2xlYXIgYW55IHByZXZpb3VzIHJlZiBwYXR0ZXJucyBnaXZlbi4KKworLS1leGNsdWRlPTxwYXR0ZXJuPjo6CisJRG8gbm90IHVzZSBhbnkgcmVmIHdob3NlIG5hbWUgbWF0Y2hlcyBhIGdpdmVuIHNoZWxsIHBhdHRlcm4uIFRoZQorCXBhdHRlcm4gY2FuIGJlIG9uZSBvZiBicmFuY2ggbmFtZSwgdGFnIG5hbWUgb3IgZnVsbHkgcXVhbGlmaWVkIHJlZgorCW5hbWUuIElmIGdpdmVuIG11bHRpcGxlIHRpbWVzLCBhIHJlZiB3aWxsIGJlIGV4Y2x1ZGVkIHdoZW4gaXQgbWF0Y2hlcworCWFueSBvZiB0aGUgZ2l2ZW4gcGF0dGVybnMuIFdoZW4gdXNlZCB0b2dldGhlciB3aXRoIC0tcmVmcywgYSByZWYgd2lsbAorCWJlIHVzZWQgYXMgYSBtYXRjaCBvbmx5IHdoZW4gaXQgbWF0Y2hlcyBhdCBsZWFzdCBvbmUgLS1yZWZzIHBhdHRlcm4gYW5kCisJZG9lcyBub3QgbWF0Y2ggYW55IC0tZXhjbHVkZSBwYXR0ZXJucy4gVXNlIGAtLW5vLWV4Y2x1ZGVgIHRvIGNsZWFyIHRoZQorCWxpc3Qgb2YgZXhjbHVkZSBwYXR0ZXJucy4KKworLS1hbGw6OgorCUxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMKKworLS1zdGRpbjo6CisJVHJhbnNmb3JtIHN0ZGluIGJ5IHN1YnN0aXR1dGluZyBhbGwgdGhlIDQwLWNoYXJhY3RlciBTSEEtMQorCWhleGVzIChzYXkgJGhleCkgd2l0aCAiJGhleCAoJHJldl9uYW1lKSIuICBXaGVuIHVzZWQgd2l0aAorCS0tbmFtZS1vbmx5LCBzdWJzdGl0dXRlIHdpdGggIiRyZXZfbmFtZSIsIG9taXR0aW5nICRoZXgKKwlhbHRvZ2V0aGVyLiAgSW50ZW5kZWQgZm9yIHRoZSBzY3JpcHRlcidzIHVzZS4KKworLS1uYW1lLW9ubHk6OgorCUluc3RlYWQgb2YgcHJpbnRpbmcgYm90aCB0aGUgU0hBLTEgYW5kIHRoZSBuYW1lLCBwcmludCBvbmx5CisJdGhlIG5hbWUuICBJZiBnaXZlbiB3aXRoIC0tdGFncyB0aGUgdXN1YWwgdGFnIHByZWZpeCBvZgorCSJ0YWdzLyIgaXMgYWxzbyBvbWl0dGVkIGZyb20gdGhlIG5hbWUsIG1hdGNoaW5nIHRoZSBvdXRwdXQKKwlvZiBgZ2l0LWRlc2NyaWJlYCBtb3JlIGNsb3NlbHkuCisKKy0tbm8tdW5kZWZpbmVkOjoKKwlEaWUgd2l0aCBlcnJvciBjb2RlICE9IDAgd2hlbiBhIHJlZmVyZW5jZSBpcyB1bmRlZmluZWQsCisJaW5zdGVhZCBvZiBwcmludGluZyBgdW5kZWZpbmVkYC4KKworLS1hbHdheXM6OgorCVNob3cgdW5pcXVlbHkgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjay4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0dpdmVuIGEgY29tbWl0LCBmaW5kIG91dCB3aGVyZSBpdCBpcyByZWxhdGl2ZSB0byB0aGUgbG9jYWwgcmVmcy4gU2F5IHNvbWVib2R5Cit3cm90ZSB5b3UgYWJvdXQgdGhhdCBmYW50YXN0aWMgY29tbWl0IDMzZGI1ZjRkOTAyN2ExMGU0NzdjY2YwNTRiMmMxYWI5NGY3NGM4NWEuCitPZiBjb3Vyc2UsIHlvdSBsb29rIGludG8gdGhlIGNvbW1pdCwgYnV0IHRoYXQgb25seSB0ZWxscyB5b3Ugd2hhdCBoYXBwZW5lZCwgYnV0Citub3QgdGhlIGNvbnRleHQuCisKK0VudGVyICdnaXQgbmFtZS1yZXYnOgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IG5hbWUtcmV2IDMzZGI1ZjRkOTAyN2ExMGU0NzdjY2YwNTRiMmMxYWI5NGY3NGM4NWEKKzMzZGI1ZjRkOTAyN2ExMGU0NzdjY2YwNTRiMmMxYWI5NGY3NGM4NWEgdGFncy92MC45OX45NDAKKy0tLS0tLS0tLS0tLQorCitOb3cgeW91IGFyZSB3aXNlciwgYmVjYXVzZSB5b3Uga25vdyB0aGF0IGl0IGhhcHBlbmVkIDk0MCByZXZpc2lvbnMgYmVmb3JlIHYwLjk5LgorCitBbm90aGVyIG5pY2UgdGhpbmcgeW91IGNhbiBkbyBpczoKKworLS0tLS0tLS0tLS0tCislIGdpdCBsb2cgfCBnaXQgbmFtZS1yZXYgLS1zdGRpbgorLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDJlODIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ub3Rlcy50eHQKQEAgLTAsMCArMSw0MDUgQEAKK2dpdC1ub3RlcygxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ub3RlcyAtIEFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbm90ZXMnIFtsaXN0IFs8b2JqZWN0Pl1dCisnZ2l0IG5vdGVzJyBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1GIDxmaWxlPiB8IC1tIDxtc2c+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dCisnZ2l0IG5vdGVzJyBjb3B5IFstZl0gKCAtLXN0ZGluIHwgPGZyb20tb2JqZWN0PiBbPHRvLW9iamVjdD5dICkKKydnaXQgbm90ZXMnIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1GIDxmaWxlPiB8IC1tIDxtc2c+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dCisnZ2l0IG5vdGVzJyBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dCisnZ2l0IG5vdGVzJyBzaG93IFs8b2JqZWN0Pl0KKydnaXQgbm90ZXMnIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5PiBdIDxub3Rlcy1yZWY+CisnZ2l0IG5vdGVzJyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0KKydnaXQgbm90ZXMnIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdCisnZ2l0IG5vdGVzJyByZW1vdmUgWy0taWdub3JlLW1pc3NpbmddIFstLXN0ZGluXSBbPG9iamVjdD4uLi5dCisnZ2l0IG5vdGVzJyBwcnVuZSBbLW5dIFstdl0KKydnaXQgbm90ZXMnIGdldC1yZWYKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0FkZHMsIHJlbW92ZXMsIG9yIHJlYWRzIG5vdGVzIGF0dGFjaGVkIHRvIG9iamVjdHMsIHdpdGhvdXQgdG91Y2hpbmcKK3RoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisKK0J5IGRlZmF1bHQsIG5vdGVzIGFyZSBzYXZlZCB0byBhbmQgcmVhZCBmcm9tIGByZWZzL25vdGVzL2NvbW1pdHNgLCBidXQKK3RoaXMgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbi4gIFNlZSB0aGUgT1BUSU9OUywgQ09ORklHVVJBVElPTiwgYW5kCitFTlZJUk9OTUVOVCBzZWN0aW9ucyBiZWxvdy4gIElmIHRoaXMgcmVmIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlCitxdWlldGx5IGNyZWF0ZWQgd2hlbiBpdCBpcyBmaXJzdCBuZWVkZWQgdG8gc3RvcmUgYSBub3RlLgorCitBIHR5cGljYWwgdXNlIG9mIG5vdGVzIGlzIHRvIHN1cHBsZW1lbnQgYSBjb21taXQgbWVzc2FnZSB3aXRob3V0CitjaGFuZ2luZyB0aGUgY29tbWl0IGl0c2VsZi4gTm90ZXMgY2FuIGJlIHNob3duIGJ5ICdnaXQgbG9nJyBhbG9uZyB3aXRoCit0aGUgb3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UuIFRvIGRpc3Rpbmd1aXNoIHRoZXNlIG5vdGVzIGZyb20gdGhlCittZXNzYWdlIHN0b3JlZCBpbiB0aGUgY29tbWl0IG9iamVjdCwgdGhlIG5vdGVzIGFyZSBpbmRlbnRlZCBsaWtlIHRoZQorbWVzc2FnZSwgYWZ0ZXIgYW4gdW5pbmRlbnRlZCBsaW5lIHNheWluZyAiTm90ZXMgKDxyZWZuYW1lPik6IiAob3IKKyJOb3RlczoiIGZvciBgcmVmcy9ub3Rlcy9jb21taXRzYCkuCisKK05vdGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRvIHBhdGNoZXMgcHJlcGFyZWQgd2l0aCBgZ2l0IGZvcm1hdC1wYXRjaGAgYnkKK3VzaW5nIHRoZSBgLS1ub3Rlc2Agb3B0aW9uLiBTdWNoIG5vdGVzIGFyZSBhZGRlZCBhcyBhIHBhdGNoIGNvbW1lbnRhcnkKK2FmdGVyIGEgdGhyZWUgZGFzaCBzZXBhcmF0b3IgbGluZS4KKworVG8gY2hhbmdlIHdoaWNoIG5vdGVzIGFyZSBzaG93biBieSAnZ2l0IGxvZycsIHNlZSB0aGUKKyJub3Rlcy5kaXNwbGF5UmVmIiBjb25maWd1cmF0aW9uIGluIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworU2VlIHRoZSAibm90ZXMucmV3cml0ZS48Y29tbWFuZD4iIGNvbmZpZ3VyYXRpb24gZm9yIGEgd2F5IHRvIGNhcnJ5Citub3RlcyBhY3Jvc3MgY29tbWFuZHMgdGhhdCByZXdyaXRlIGNvbW1pdHMuCisKKworU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tCisKK2xpc3Q6OgorCUxpc3QgdGhlIG5vdGVzIG9iamVjdCBmb3IgYSBnaXZlbiBvYmplY3QuIElmIG5vIG9iamVjdCBpcworCWdpdmVuLCBzaG93IGEgbGlzdCBvZiBhbGwgbm90ZSBvYmplY3RzIGFuZCB0aGUgb2JqZWN0cyB0aGV5CisJYW5ub3RhdGUgKGluIHRoZSBmb3JtYXQgIjxub3RlIG9iamVjdD4gPGFubm90YXRlZCBvYmplY3Q+IikuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBzdWJjb21tYW5kIGlmIG5vIHN1YmNvbW1hbmQgaXMgZ2l2ZW4uCisKK2FkZDo6CisJQWRkIG5vdGVzIGZvciBhIGdpdmVuIG9iamVjdCAoZGVmYXVsdHMgdG8gSEVBRCkuIEFib3J0IGlmIHRoZQorCW9iamVjdCBhbHJlYWR5IGhhcyBub3RlcyAodXNlIGAtZmAgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIG5vdGVzKS4KKwlIb3dldmVyLCBpZiB5b3UncmUgdXNpbmcgYGFkZGAgaW50ZXJhY3RpdmVseSAodXNpbmcgYW4gZWRpdG9yCisJdG8gc3VwcGx5IHRoZSBub3RlcyBjb250ZW50cyksIHRoZW4gLSBpbnN0ZWFkIG9mIGFib3J0aW5nIC0KKwl0aGUgZXhpc3Rpbmcgbm90ZXMgd2lsbCBiZSBvcGVuZWQgaW4gdGhlIGVkaXRvciAobGlrZSB0aGUgYGVkaXRgCisJc3ViY29tbWFuZCkuCisKK2NvcHk6OgorCUNvcHkgdGhlIG5vdGVzIGZvciB0aGUgZmlyc3Qgb2JqZWN0IG9udG8gdGhlIHNlY29uZCBvYmplY3QgKGRlZmF1bHRzIHRvCisJSEVBRCkuIEFib3J0IGlmIHRoZSBzZWNvbmQgb2JqZWN0IGFscmVhZHkgaGFzIG5vdGVzLCBvciBpZiB0aGUgZmlyc3QKKwlvYmplY3QgaGFzIG5vbmUgKHVzZSAtZiB0byBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMgdG8gdGhlCisJc2Vjb25kIG9iamVjdCkuIFRoaXMgc3ViY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvOgorCWBnaXQgbm90ZXMgYWRkIFstZl0gLUMgJChnaXQgbm90ZXMgbGlzdCA8ZnJvbS1vYmplY3Q+KSA8dG8tb2JqZWN0PmAKKysKK0luIGAtLXN0ZGluYCBtb2RlLCB0YWtlIGxpbmVzIGluIHRoZSBmb3JtYXQKKysKKy0tLS0tLS0tLS0KKzxmcm9tLW9iamVjdD4gU1AgPHRvLW9iamVjdD4gWyBTUCA8cmVzdD4gXSBMRgorLS0tLS0tLS0tLQorKworb24gc3RhbmRhcmQgaW5wdXQsIGFuZCBjb3B5IHRoZSBub3RlcyBmcm9tIGVhY2ggPGZyb20tb2JqZWN0PiB0byBpdHMKK2NvcnJlc3BvbmRpbmcgPHRvLW9iamVjdD4uICAoVGhlIG9wdGlvbmFsIGA8cmVzdD5gIGlzIGlnbm9yZWQgc28gdGhhdAordGhlIGNvbW1hbmQgY2FuIHJlYWQgdGhlIGlucHV0IGdpdmVuIHRvIHRoZSBgcG9zdC1yZXdyaXRlYCBob29rLikKKworYXBwZW5kOjoKKwlBcHBlbmQgdG8gdGhlIG5vdGVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdCAoZGVmYXVsdHMgdG8gSEVBRCkuCisJQ3JlYXRlcyBhIG5ldyBub3RlcyBvYmplY3QgaWYgbmVlZGVkLgorCitlZGl0OjoKKwlFZGl0IHRoZSBub3RlcyBmb3IgYSBnaXZlbiBvYmplY3QgKGRlZmF1bHRzIHRvIEhFQUQpLgorCitzaG93OjoKKwlTaG93IHRoZSBub3RlcyBmb3IgYSBnaXZlbiBvYmplY3QgKGRlZmF1bHRzIHRvIEhFQUQpLgorCittZXJnZTo6CisJTWVyZ2UgdGhlIGdpdmVuIG5vdGVzIHJlZiBpbnRvIHRoZSBjdXJyZW50IG5vdGVzIHJlZi4KKwlUaGlzIHdpbGwgdHJ5IHRvIG1lcmdlIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIGdpdmVuCisJbm90ZXMgcmVmIChjYWxsZWQgInJlbW90ZSIpIHNpbmNlIHRoZSBtZXJnZS1iYXNlIChpZgorCWFueSkgaW50byB0aGUgY3VycmVudCBub3RlcyByZWYgKGNhbGxlZCAibG9jYWwiKS4KKysKK0lmIGNvbmZsaWN0cyBhcmlzZSBhbmQgYSBzdHJhdGVneSBmb3IgYXV0b21hdGljYWxseSByZXNvbHZpbmcKK2NvbmZsaWN0aW5nIG5vdGVzIChzZWUgdGhlICJOT1RFUyBNRVJHRSBTVFJBVEVHSUVTIiBzZWN0aW9uKSBpcyBub3QgZ2l2ZW4sCit0aGUgIm1hbnVhbCIgcmVzb2x2ZXIgaXMgdXNlZC4gVGhpcyByZXNvbHZlciBjaGVja3Mgb3V0IHRoZQorY29uZmxpY3Rpbmcgbm90ZXMgaW4gYSBzcGVjaWFsIHdvcmt0cmVlIChgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRWApLAorYW5kIGluc3RydWN0cyB0aGUgdXNlciB0byBtYW51YWxseSByZXNvbHZlIHRoZSBjb25mbGljdHMgdGhlcmUuCitXaGVuIGRvbmUsIHRoZSB1c2VyIGNhbiBlaXRoZXIgZmluYWxpemUgdGhlIG1lcmdlIHdpdGgKKydnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aAorJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0Jy4KKworcmVtb3ZlOjoKKwlSZW1vdmUgdGhlIG5vdGVzIGZvciBnaXZlbiBvYmplY3RzIChkZWZhdWx0cyB0byBIRUFEKS4gV2hlbgorCWdpdmluZyB6ZXJvIG9yIG9uZSBvYmplY3QgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIGlzCisJZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIGFuIGVtcHR5IG5vdGUgbWVzc2FnZSB0bworCXRoZSBgZWRpdGAgc3ViY29tbWFuZC4KKworcHJ1bmU6OgorCVJlbW92ZSBhbGwgbm90ZXMgZm9yIG5vbi1leGlzdGluZy91bnJlYWNoYWJsZSBvYmplY3RzLgorCitnZXQtcmVmOjoKKwlQcmludCB0aGUgY3VycmVudCBub3RlcyByZWYuIFRoaXMgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8KKwlyZXRyaWV2ZSB0aGUgY3VycmVudCBub3RlcyByZWYgKGUuZy4gZnJvbSBzY3JpcHRzKS4KKworT1BUSU9OUworLS0tLS0tLQorLWY6OgorLS1mb3JjZTo6CisJV2hlbiBhZGRpbmcgbm90ZXMgdG8gYW4gb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgbm90ZXMsCisJb3ZlcndyaXRlIHRoZSBleGlzdGluZyBub3RlcyAoaW5zdGVhZCBvZiBhYm9ydGluZykuCisKKy1tIDxtc2c+OjoKKy0tbWVzc2FnZT08bXNnPjo6CisJVXNlIHRoZSBnaXZlbiBub3RlIG1lc3NhZ2UgKGluc3RlYWQgb2YgcHJvbXB0aW5nKS4KKwlJZiBtdWx0aXBsZSBgLW1gIG9wdGlvbnMgYXJlIGdpdmVuLCB0aGVpciB2YWx1ZXMKKwlhcmUgY29uY2F0ZW5hdGVkIGFzIHNlcGFyYXRlIHBhcmFncmFwaHMuCisJTGluZXMgc3RhcnRpbmcgd2l0aCBgI2AgYW5kIGVtcHR5IGxpbmVzIG90aGVyIHRoYW4gYQorCXNpbmdsZSBsaW5lIGJldHdlZW4gcGFyYWdyYXBocyB3aWxsIGJlIHN0cmlwcGVkIG91dC4KKworLUYgPGZpbGU+OjoKKy0tZmlsZT08ZmlsZT46OgorCVRha2UgdGhlIG5vdGUgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBmaWxlLiAgVXNlICctJyB0bworCXJlYWQgdGhlIG5vdGUgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKwlMaW5lcyBzdGFydGluZyB3aXRoIGAjYCBhbmQgZW1wdHkgbGluZXMgb3RoZXIgdGhhbiBhCisJc2luZ2xlIGxpbmUgYmV0d2VlbiBwYXJhZ3JhcGhzIHdpbGwgYmUgc3RyaXBwZWQgb3V0LgorCistQyA8b2JqZWN0Pjo6CistLXJldXNlLW1lc3NhZ2U9PG9iamVjdD46OgorCVRha2UgdGhlIGdpdmVuIGJsb2Igb2JqZWN0IChmb3IgZXhhbXBsZSwgYW5vdGhlciBub3RlKSBhcyB0aGUKKwlub3RlIG1lc3NhZ2UuIChVc2UgYGdpdCBub3RlcyBjb3B5IDxvYmplY3Q+YCBpbnN0ZWFkIHRvCisJY29weSBub3RlcyBiZXR3ZWVuIG9iamVjdHMuKQorCistYyA8b2JqZWN0Pjo6CistLXJlZWRpdC1tZXNzYWdlPTxvYmplY3Q+OjoKKwlMaWtlICctQycsIGJ1dCB3aXRoIGAtY2AgdGhlIGVkaXRvciBpcyBpbnZva2VkLCBzbyB0aGF0CisJdGhlIHVzZXIgY2FuIGZ1cnRoZXIgZWRpdCB0aGUgbm90ZSBtZXNzYWdlLgorCistLWFsbG93LWVtcHR5OjoKKwlBbGxvdyBhbiBlbXB0eSBub3RlIG9iamVjdCB0byBiZSBzdG9yZWQuIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzCisJdG8gYXV0b21hdGljYWxseSByZW1vdmUgZW1wdHkgbm90ZXMuCisKKy0tcmVmIDxyZWY+OjoKKwlNYW5pcHVsYXRlIHRoZSBub3RlcyB0cmVlIGluIDxyZWY+LiAgVGhpcyBvdmVycmlkZXMKKwlgR0lUX05PVEVTX1JFRmAgYW5kIHRoZSAiY29yZS5ub3Rlc1JlZiIgY29uZmlndXJhdGlvbi4gIFRoZSByZWYKKwlzcGVjaWZpZXMgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucyB3aXRoIGByZWZzL25vdGVzL2A7IHdoZW4gaXQKKwliZWdpbnMgd2l0aCBgbm90ZXMvYCwgYHJlZnMvYCBhbmQgb3RoZXJ3aXNlIGByZWZzL25vdGVzL2AgaXMgcHJlZml4ZWQKKwl0byBmb3JtIGEgZnVsbCBuYW1lIG9mIHRoZSByZWYuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCURvIG5vdCBjb25zaWRlciBpdCBhbiBlcnJvciB0byByZXF1ZXN0IHJlbW92aW5nIG5vdGVzIGZyb20gYW4KKwlvYmplY3QgdGhhdCBkb2VzIG5vdCBoYXZlIG5vdGVzIGF0dGFjaGVkIHRvIGl0LgorCistLXN0ZGluOjoKKwlBbHNvIHJlYWQgdGhlIG9iamVjdCBuYW1lcyB0byByZW1vdmUgbm90ZXMgZnJvbSB0aGUgc3RhbmRhcmQKKwlpbnB1dCAodGhlcmUgaXMgbm8gcmVhc29uIHlvdSBjYW5ub3QgY29tYmluZSB0aGlzIHdpdGggb2JqZWN0CisJbmFtZXMgZnJvbSB0aGUgY29tbWFuZCBsaW5lKS4KKworLW46OgorLS1kcnktcnVuOjoKKwlEbyBub3QgcmVtb3ZlIGFueXRoaW5nOyBqdXN0IHJlcG9ydCB0aGUgb2JqZWN0IG5hbWVzIHdob3NlIG5vdGVzCisJd291bGQgYmUgcmVtb3ZlZC4KKworLXMgPHN0cmF0ZWd5Pjo6CistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorCVdoZW4gbWVyZ2luZyBub3RlcywgcmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuCisJc3RyYXRlZ3kuIFRoZSBmb2xsb3dpbmcgc3RyYXRlZ2llcyBhcmUgcmVjb2duaXplZDogIm1hbnVhbCIKKwkoZGVmYXVsdCksICJvdXJzIiwgInRoZWlycyIsICJ1bmlvbiIgYW5kICJjYXRfc29ydF91bmlxIi4KKwlUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhlICJub3Rlcy5tZXJnZVN0cmF0ZWd5IiBjb25maWd1cmF0aW9uIHNldHRpbmcuCisJU2VlIHRoZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZQorCWluZm9ybWF0aW9uIG9uIGVhY2ggbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kuCisKKy0tY29tbWl0OjoKKwlGaW5hbGl6ZSBhbiBpbi1wcm9ncmVzcyAnZ2l0IG5vdGVzIG1lcmdlJy4gVXNlIHRoaXMgb3B0aW9uCisJd2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGUgY29uZmxpY3RzIHRoYXQgJ2dpdCBub3RlcyBtZXJnZScKKwlzdG9yZWQgaW4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4gVGhpcyBhbWVuZHMgdGhlIHBhcnRpYWwKKwltZXJnZSBjb21taXQgY3JlYXRlZCBieSAnZ2l0IG5vdGVzIG1lcmdlJyAoc3RvcmVkIGluCisJLmdpdC9OT1RFU19NRVJHRV9QQVJUSUFMKSBieSBhZGRpbmcgdGhlIG5vdGVzIGluCisJLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4gVGhlIG5vdGVzIHJlZiBzdG9yZWQgaW4gdGhlCisJLmdpdC9OT1RFU19NRVJHRV9SRUYgc3ltcmVmIGlzIHVwZGF0ZWQgdG8gdGhlIHJlc3VsdGluZyBjb21taXQuCisKKy0tYWJvcnQ6OgorCUFib3J0L3Jlc2V0IGFuIGluLXByb2dyZXNzICdnaXQgbm90ZXMgbWVyZ2UnLCBpLmUuIGEgbm90ZXMgbWVyZ2UKKwl3aXRoIGNvbmZsaWN0cy4gVGhpcyBzaW1wbHkgcmVtb3ZlcyBhbGwgZmlsZXMgcmVsYXRlZCB0byB0aGUKKwlub3RlcyBtZXJnZS4KKworLXE6OgorLS1xdWlldDo6CisJV2hlbiBtZXJnaW5nIG5vdGVzLCBvcGVyYXRlIHF1aWV0bHkuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJV2hlbiBtZXJnaW5nIG5vdGVzLCBiZSBtb3JlIHZlcmJvc2UuCisJV2hlbiBwcnVuaW5nIG5vdGVzLCByZXBvcnQgYWxsIG9iamVjdCBuYW1lcyB3aG9zZSBub3RlcyBhcmUKKwlyZW1vdmVkLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworQ29tbWl0IG5vdGVzIGFyZSBibG9icyBjb250YWluaW5nIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IGFuIG9iamVjdAorKHVzdWFsbHkgaW5mb3JtYXRpb24gdG8gc3VwcGxlbWVudCBhIGNvbW1pdCdzIG1lc3NhZ2UpLiAgVGhlc2UgYmxvYnMKK2FyZSB0YWtlbiBmcm9tIG5vdGVzIHJlZnMuICBBIG5vdGVzIHJlZiBpcyB1c3VhbGx5IGEgYnJhbmNoIHdoaWNoCitjb250YWlucyAiZmlsZXMiIHdob3NlIHBhdGhzIGFyZSB0aGUgb2JqZWN0IG5hbWVzIGZvciB0aGUgb2JqZWN0cwordGhleSBkZXNjcmliZSwgd2l0aCBzb21lIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGluY2x1ZGVkIGZvciBwZXJmb3JtYW5jZQorcmVhc29ucyBmb290bm90ZTpbUGVybWl0dGVkIHBhdGhuYW1lcyBoYXZlIHRoZSBmb3JtCisnYWInYC9gJ2NkJ2AvYCdlZidgL2AnLi4uJ2AvYCdhYmNkZWYuLi4nOiBhIHNlcXVlbmNlIG9mIGRpcmVjdG9yeQorbmFtZXMgb2YgdHdvIGhleGFkZWNpbWFsIGRpZ2l0cyBlYWNoIGZvbGxvd2VkIGJ5IGEgZmlsZW5hbWUgd2l0aCB0aGUKK3Jlc3Qgb2YgdGhlIG9iamVjdCBJRC5dLgorCitFdmVyeSBub3RlcyBjaGFuZ2UgY3JlYXRlcyBhIG5ldyBjb21taXQgYXQgdGhlIHNwZWNpZmllZCBub3RlcyByZWYuCitZb3UgY2FuIHRoZXJlZm9yZSBpbnNwZWN0IHRoZSBoaXN0b3J5IG9mIHRoZSBub3RlcyBieSBpbnZva2luZywgZS5nLiwKK2BnaXQgbG9nIC1wIG5vdGVzL2NvbW1pdHNgLiAgQ3VycmVudGx5IHRoZSBjb21taXQgbWVzc2FnZSBvbmx5IHJlY29yZHMKK3doaWNoIG9wZXJhdGlvbiB0cmlnZ2VyZWQgdGhlIHVwZGF0ZSwgYW5kIHRoZSBjb21taXQgYXV0aG9yc2hpcCBpcworZGV0ZXJtaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHVzdWFsIHJ1bGVzIChzZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdKS4KK1RoZXNlIGRldGFpbHMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCitJdCBpcyBhbHNvIHBlcm1pdHRlZCBmb3IgYSBub3RlcyByZWYgdG8gcG9pbnQgZGlyZWN0bHkgdG8gYSB0cmVlCitvYmplY3QsIGluIHdoaWNoIGNhc2UgdGhlIGhpc3Rvcnkgb2YgdGhlIG5vdGVzIGNhbiBiZSByZWFkIHdpdGgKK2BnaXQgbG9nIC1wIC1nIDxyZWZuYW1lPmAuCisKKworTk9URVMgTUVSR0UgU1RSQVRFR0lFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBub3RlcyBtZXJnZSBzdHJhdGVneSBpcyAibWFudWFsIiwgd2hpY2ggY2hlY2tzIG91dAorY29uZmxpY3Rpbmcgbm90ZXMgaW4gYSBzcGVjaWFsIHdvcmsgdHJlZSBmb3IgcmVzb2x2aW5nIG5vdGVzIGNvbmZsaWN0cworKGAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFYCksIGFuZCBpbnN0cnVjdHMgdGhlIHVzZXIgdG8gcmVzb2x2ZSB0aGUKK2NvbmZsaWN0cyBpbiB0aGF0IHdvcmsgdHJlZS4KK1doZW4gZG9uZSwgdGhlIHVzZXIgY2FuIGVpdGhlciBmaW5hbGl6ZSB0aGUgbWVyZ2Ugd2l0aAorJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoCisnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLgorCitVc2VycyBtYXkgc2VsZWN0IGFuIGF1dG9tYXRlZCBtZXJnZSBzdHJhdGVneSBmcm9tIGFtb25nIHRoZSBmb2xsb3dpbmcgdXNpbmcKK2VpdGhlciAtcy8tLXN0cmF0ZWd5IG9wdGlvbiBvciBjb25maWd1cmluZyBub3Rlcy5tZXJnZVN0cmF0ZWd5IGFjY29yZGluZ2x5OgorCisib3VycyIgYXV0b21hdGljYWxseSByZXNvbHZlcyBjb25mbGljdGluZyBub3RlcyBpbiBmYXZvciBvZiB0aGUgbG9jYWwKK3ZlcnNpb24gKGkuZS4gdGhlIGN1cnJlbnQgbm90ZXMgcmVmKS4KKworInRoZWlycyIgYXV0b21hdGljYWxseSByZXNvbHZlcyBub3RlcyBjb25mbGljdHMgaW4gZmF2b3Igb2YgdGhlIHJlbW90ZQordmVyc2lvbiAoaS5lLiB0aGUgZ2l2ZW4gbm90ZXMgcmVmIGJlaW5nIG1lcmdlZCBpbnRvIHRoZSBjdXJyZW50IG5vdGVzCityZWYpLgorCisidW5pb24iIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZXMgbm90ZXMgY29uZmxpY3RzIGJ5IGNvbmNhdGVuYXRpbmcgdGhlCitsb2NhbCBhbmQgcmVtb3RlIHZlcnNpb25zLgorCisiY2F0X3NvcnRfdW5pcSIgaXMgc2ltaWxhciB0byAidW5pb24iLCBidXQgaW4gYWRkaXRpb24gdG8gY29uY2F0ZW5hdGluZwordGhlIGxvY2FsIGFuZCByZW1vdGUgdmVyc2lvbnMsIHRoaXMgc3RyYXRlZ3kgYWxzbyBzb3J0cyB0aGUgcmVzdWx0aW5nCitsaW5lcywgYW5kIHJlbW92ZXMgZHVwbGljYXRlIGxpbmVzIGZyb20gdGhlIHJlc3VsdC4gVGhpcyBpcyBlcXVpdmFsZW50Cit0byBhcHBseWluZyB0aGUgImNhdCB8IHNvcnQgfCB1bmlxIiBzaGVsbCBwaXBlbGluZSB0byB0aGUgbG9jYWwgYW5kCityZW1vdGUgdmVyc2lvbnMuIFRoaXMgc3RyYXRlZ3kgaXMgdXNlZnVsIGlmIHRoZSBub3RlcyBmb2xsb3cgYSBsaW5lLWJhc2VkCitmb3JtYXQgd2hlcmUgb25lIHdhbnRzIHRvIGF2b2lkIGR1cGxpY2F0ZWQgbGluZXMgaW4gdGhlIG1lcmdlIHJlc3VsdC4KK05vdGUgdGhhdCBpZiBlaXRoZXIgdGhlIGxvY2FsIG9yIHJlbW90ZSB2ZXJzaW9uIGNvbnRhaW4gZHVwbGljYXRlIGxpbmVzCitwcmlvciB0byB0aGUgbWVyZ2UsIHRoZXNlIHdpbGwgYWxzbyBiZSByZW1vdmVkIGJ5IHRoaXMgbm90ZXMgbWVyZ2UKK3N0cmF0ZWd5LgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitZb3UgY2FuIHVzZSBub3RlcyB0byBhZGQgYW5ub3RhdGlvbnMgd2l0aCBpbmZvcm1hdGlvbiB0aGF0IHdhcyBub3QKK2F2YWlsYWJsZSBhdCB0aGUgdGltZSBhIGNvbW1pdCB3YXMgd3JpdHRlbi4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBub3RlcyBhZGQgLW0gJ1Rlc3RlZC1ieTogSm9oYW5uZXMgU2l4dCA8ajZ0QGtkYmcub3JnPicgNzJhMTQ0ZTIKKyQgZ2l0IHNob3cgLXMgNzJhMTQ0ZQorWy4uLl0KKyAgICBTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK05vdGVzOgorICAgIFRlc3RlZC1ieTogSm9oYW5uZXMgU2l4dCA8ajZ0QGtkYmcub3JnPgorLS0tLS0tLS0tLS0tCisKK0luIHByaW5jaXBsZSwgYSBub3RlIGlzIGEgcmVndWxhciBHaXQgYmxvYiwgYW5kIGFueSBraW5kIG9mCisobm9uLSlmb3JtYXQgaXMgYWNjZXB0ZWQuICBZb3UgY2FuIGJpbmFyeS1zYWZlbHkgY3JlYXRlIG5vdGVzIGZyb20KK2FyYml0cmFyeSBmaWxlcyB1c2luZyAnZ2l0IGhhc2gtb2JqZWN0JzoKKworLS0tLS0tLS0tLS0tCiskIGNjICouYworJCBibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGEub3V0KQorJCBnaXQgbm90ZXMgLS1yZWY9YnVpbHQgYWRkIC0tYWxsb3ctZW1wdHkgLUMgIiRibG9iIiBIRUFECistLS0tLS0tLS0tLS0KKworKFlvdSBjYW5ub3Qgc2ltcGx5IHVzZSBgZ2l0IG5vdGVzIC0tcmVmPWJ1aWx0IGFkZCAtRiBhLm91dCBIRUFEYAorYmVjYXVzZSB0aGF0IGlzIG5vdCBiaW5hcnktc2FmZS4pCitPZiBjb3Vyc2UsIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIGRpc3BsYXkgbm9uLXRleHQtZm9ybWF0IG5vdGVzCit3aXRoICdnaXQgbG9nJywgc28gaWYgeW91IHVzZSBzdWNoIG5vdGVzLCB5b3UnbGwgcHJvYmFibHkgbmVlZCB0byB3cml0ZQorc29tZSBzcGVjaWFsLXB1cnBvc2UgdG9vbHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZW0uCisKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitjb3JlLm5vdGVzUmVmOjoKKwlOb3RlcyByZWYgdG8gcmVhZCBhbmQgbWFuaXB1bGF0ZSBpbnN0ZWFkIG9mCisJYHJlZnMvbm90ZXMvY29tbWl0c2AuICBNdXN0IGJlIGFuIHVuYWJicmV2aWF0ZWQgcmVmIG5hbWUuCisJVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlIGVudmlyb25tZW50IGFuZAorCWNvbW1hbmQgbGluZS4KKworbm90ZXMubWVyZ2VTdHJhdGVneTo6CisJV2hpY2ggbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hvb3NlIGJ5IGRlZmF1bHQgd2hlbiByZXNvbHZpbmcgbm90ZXMKKwljb25mbGljdHMuICBNdXN0IGJlIG9uZSBvZiBgbWFudWFsYCwgYG91cnNgLCBgdGhlaXJzYCwgYHVuaW9uYCwgb3IKKwlgY2F0X3NvcnRfdW5pcWAuICBEZWZhdWx0cyB0byBgbWFudWFsYC4gIFNlZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIKKwlzZWN0aW9uIGFib3ZlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGVhY2ggc3RyYXRlZ3kuCisrCitUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyB0aGUgYC0tc3RyYXRlZ3lgIG9wdGlvbi4KKworbm90ZXMuPG5hbWU+Lm1lcmdlU3RyYXRlZ3k6OgorCVdoaWNoIG1lcmdlIHN0cmF0ZWd5IHRvIGNob29zZSB3aGVuIGRvaW5nIGEgbm90ZXMgbWVyZ2UgaW50bworCXJlZnMvbm90ZXMvPG5hbWU+LiAgVGhpcyBvdmVycmlkZXMgdGhlIG1vcmUgZ2VuZXJhbAorCSJub3Rlcy5tZXJnZVN0cmF0ZWd5Ii4gIFNlZSB0aGUgIk5PVEVTIE1FUkdFIFNUUkFURUdJRVMiIHNlY3Rpb24gYWJvdmUKKwlmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBlYWNoIGF2YWlsYWJsZSBzdHJhdGVneS4KKworbm90ZXMuZGlzcGxheVJlZjo6CisJV2hpY2ggcmVmIChvciByZWZzLCBpZiBhIGdsb2Igb3Igc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlKSwgaW4KKwlhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBzZXQgYnkgYGNvcmUubm90ZXNSZWZgIG9yCisJYEdJVF9OT1RFU19SRUZgLCB0byByZWFkIG5vdGVzIGZyb20gd2hlbiBzaG93aW5nIGNvbW1pdAorCW1lc3NhZ2VzIHdpdGggdGhlICdnaXQgbG9nJyBmYW1pbHkgb2YgY29tbWFuZHMuCisJVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgYnkgdGhlCisJYEdJVF9OT1RFU19ESVNQTEFZX1JFRmAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJU2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworbm90ZXMucmV3cml0ZS48Y29tbWFuZD46OgorCVdoZW4gcmV3cml0aW5nIGNvbW1pdHMgd2l0aCA8Y29tbWFuZD4gKGN1cnJlbnRseSBgYW1lbmRgIG9yCisJYHJlYmFzZWApLCBpZiB0aGlzIHZhcmlhYmxlIGlzIGBmYWxzZWAsIGdpdCB3aWxsIG5vdCBjb3B5CisJbm90ZXMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIHJld3JpdHRlbiBjb21taXQuICBEZWZhdWx0cyB0bworCWB0cnVlYC4gIFNlZSBhbHNvICJgbm90ZXMucmV3cml0ZVJlZmAiIGJlbG93LgorKworVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX05PVEVTX1JFV1JJVEVfUkVGYAorZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK25vdGVzLnJld3JpdGVNb2RlOjoKKwlXaGVuIGNvcHlpbmcgbm90ZXMgZHVyaW5nIGEgcmV3cml0ZSwgd2hhdCB0byBkbyBpZiB0aGUgdGFyZ2V0CisJY29tbWl0IGFscmVhZHkgaGFzIGEgbm90ZS4gIE11c3QgYmUgb25lIG9mIGBvdmVyd3JpdGVgLAorCWBjb25jYXRlbmF0ZWAsIGBjYXRfc29ydF91bmlxYCwgb3IgYGlnbm9yZWAuICBEZWZhdWx0cyB0bworCWBjb25jYXRlbmF0ZWAuCisrCitUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9OT1RFU19SRVdSSVRFX01PREVgCitlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworbm90ZXMucmV3cml0ZVJlZjo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUsIHNwZWNpZmllcyB0aGUgKGZ1bGx5CisJcXVhbGlmaWVkKSByZWYgd2hvc2Ugbm90ZXMgc2hvdWxkIGJlIGNvcGllZC4gIE1heSBiZSBhIGdsb2IsCisJaW4gd2hpY2ggY2FzZSBub3RlcyBpbiBhbGwgbWF0Y2hpbmcgcmVmcyB3aWxsIGJlIGNvcGllZC4gIFlvdQorCW1heSBhbHNvIHNwZWNpZnkgdGhpcyBjb25maWd1cmF0aW9uIHNldmVyYWwgdGltZXMuCisrCitEb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZTsgeW91IG11c3QgY29uZmlndXJlIHRoaXMgdmFyaWFibGUgdG8KK2VuYWJsZSBub3RlIHJld3JpdGluZy4KKysKK0NhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGBHSVRfTk9URVNfUkVXUklURV9SRUZgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorCitgR0lUX05PVEVTX1JFRmA6OgorCVdoaWNoIHJlZiB0byBtYW5pcHVsYXRlIG5vdGVzIGZyb20sIGluc3RlYWQgb2YgYHJlZnMvbm90ZXMvY29tbWl0c2AuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBjb3JlLm5vdGVzUmVmYCBzZXR0aW5nLgorCitgR0lUX05PVEVTX0RJU1BMQVlfUkVGYDo6CisJQ29sb24tZGVsaW1pdGVkIGxpc3Qgb2YgcmVmcyBvciBnbG9icyBpbmRpY2F0aW5nIHdoaWNoIHJlZnMsCisJaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgZnJvbSBgY29yZS5ub3Rlc1JlZmAgb3IKKwlgR0lUX05PVEVTX1JFRmAsIHRvIHJlYWQgbm90ZXMgZnJvbSB3aGVuIHNob3dpbmcgY29tbWl0CisJbWVzc2FnZXMuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBub3Rlcy5kaXNwbGF5UmVmYCBzZXR0aW5nLgorKworQSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVkIGZvciByZWZzIHRoYXQgZG8gbm90IGV4aXN0LCBidXQgYSBnbG9iIHRoYXQKK2RvZXMgbm90IG1hdGNoIGFueSByZWZzIGlzIHNpbGVudGx5IGlnbm9yZWQuCisKK2BHSVRfTk9URVNfUkVXUklURV9NT0RFYDo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUsIHdoYXQgdG8gZG8gaWYgdGhlIHRhcmdldAorCWNvbW1pdCBhbHJlYWR5IGhhcyBhIG5vdGUuCisJTXVzdCBiZSBvbmUgb2YgYG92ZXJ3cml0ZWAsIGBjb25jYXRlbmF0ZWAsIGBjYXRfc29ydF91bmlxYCwgb3IgYGlnbm9yZWAuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBjb3JlLnJld3JpdGVNb2RlYCBzZXR0aW5nLgorCitgR0lUX05PVEVTX1JFV1JJVEVfUkVGYDo6CisJV2hlbiByZXdyaXRpbmcgY29tbWl0cywgd2hpY2ggbm90ZXMgdG8gY29weSBmcm9tIHRoZSBvcmlnaW5hbAorCXRvIHRoZSByZXdyaXR0ZW4gY29tbWl0LiAgTXVzdCBiZSBhIGNvbG9uLWRlbGltaXRlZCBsaXN0IG9mCisJcmVmcyBvciBnbG9icy4KKysKK0lmIG5vdCBzZXQgaW4gdGhlIGVudmlyb25tZW50LCB0aGUgbGlzdCBvZiBub3RlcyB0byBjb3B5IGRlcGVuZHMKK29uIHRoZSBgbm90ZXMucmV3cml0ZS48Y29tbWFuZD5gIGFuZCBgbm90ZXMucmV3cml0ZVJlZmAgc2V0dGluZ3MuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcDQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OTRhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wNC50eHQKQEAgLTAsMCArMSw3MjMgQEAKK2dpdC1wNCgxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wNCAtIEltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHA0IGNsb25lJyBbPHN5bmMgb3B0aW9ucz5dIFs8Y2xvbmUgb3B0aW9ucz5dIDxwNCBkZXBvdCBwYXRoPi4uLgorJ2dpdCBwNCBzeW5jJyBbPHN5bmMgb3B0aW9ucz5dIFs8cDQgZGVwb3QgcGF0aD4uLi5dCisnZ2l0IHA0IHJlYmFzZScKKydnaXQgcDQgc3VibWl0JyBbPHN1Ym1pdCBvcHRpb25zPl0gWzxtYXN0ZXIgYnJhbmNoIG5hbWU+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+OjoKKyAgICBTdWJtaXQgb25seSB0aGUgc3BlY2lmaWVkIGNvbW1pdCBvciByYW5nZSBvZiBjb21taXRzLCBpbnN0ZWFkIG9mIHRoZSBmdWxsCisgICAgbGlzdCBvZiBjaGFuZ2VzIHRoYXQgYXJlIGluIHRoZSBjdXJyZW50IEdpdCBicmFuY2guCisKKy0tZGlzYWJsZS1yZWJhc2U6OgorICAgIERpc2FibGUgdGhlIGF1dG9tYXRpYyByZWJhc2UgYWZ0ZXIgYWxsIGNvbW1pdHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQorICAgIHN1Ym1pdHRlZC4gQ2FuIGFsc28gYmUgc2V0IHdpdGggZ2l0LXA0LmRpc2FibGVSZWJhc2UuCisKKy0tZGlzYWJsZS1wNHN5bmM6OgorICAgIERpc2FibGUgdGhlIGF1dG9tYXRpYyBzeW5jIG9mIHA0L21hc3RlciBmcm9tIFBlcmZvcmNlIGFmdGVyIGNvbW1pdHMgaGF2ZQorICAgIGJlZW4gc3VibWl0dGVkLiBJbXBsaWVzIC0tZGlzYWJsZS1yZWJhc2UuIENhbiBhbHNvIGJlIHNldCB3aXRoCisgICAgZ2l0LXA0LmRpc2FibGVQNFN5bmMuIFN5bmMgd2l0aCBvcmlnaW4vbWFzdGVyIHN0aWxsIGdvZXMgYWhlYWQgaWYgcG9zc2libGUuCisKK0hvb2sgZm9yIHN1Ym1pdAorfn5+fn5+fn5+fn5+fn5+CitUaGUgYHA0LXByZS1zdWJtaXRgIGhvb2sgaXMgZXhlY3V0ZWQgaWYgaXQgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLgorVGhlIGhvb2sgdGFrZXMgbm8gcGFyYW1ldGVycyBhbmQgbm90aGluZyBmcm9tIHN0YW5kYXJkIGlucHV0LiBFeGl0aW5nIHdpdGgKK25vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0IHByZXZlbnRzIGBnaXQtcDQgc3VibWl0YCBmcm9tIGxhdW5jaGluZy4KKworT25lIHVzYWdlIHNjZW5hcmlvIGlzIHRvIHJ1biB1bml0IHRlc3RzIGluIHRoZSBob29rLgorCitSZWJhc2Ugb3B0aW9ucworfn5+fn5+fn5+fn5+fn4KK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5ICdnaXQgcDQgcmViYXNlJyBiZWhhdmlvci4KKworLS1pbXBvcnQtbGFiZWxzOjoKKwlJbXBvcnQgcDQgbGFiZWxzLgorCitVbnNoZWx2ZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn5+CisKKy0tb3JpZ2luOjoKKyAgICBTZXRzIHRoZSBnaXQgcmVmc3BlYyBhZ2FpbnN0IHdoaWNoIHRoZSBzaGVsdmVkIFA0IGNoYW5nZWxpc3QgaXMgY29tcGFyZWQuCisgICAgRGVmYXVsdHMgdG8gcDQvbWFzdGVyLgorCitERVBPVCBQQVRIIFNZTlRBWAorLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBwNCBkZXBvdCBwYXRoIGFyZ3VtZW50IHRvICdnaXQgcDQgc3luYycgYW5kICdnaXQgcDQgY2xvbmUnIGNhbgorYmUgb25lIG9yIG1vcmUgc3BhY2Utc2VwYXJhdGVkIHA0IGRlcG90IHBhdGhzLCB3aXRoIGFuIG9wdGlvbmFsCitwNCByZXZpc2lvbiBzcGVjaWZpZXIgb24gdGhlIGVuZDoKKworIi8vZGVwb3QvbXkvcHJvamVjdCI6OgorICAgIEltcG9ydCBvbmUgY29tbWl0IHdpdGggYWxsIGZpbGVzIGluIHRoZSAnI2hlYWQnIGNoYW5nZSB1bmRlciB0aGF0IHRyZWUuCisKKyIvL2RlcG90L215L3Byb2plY3RAYWxsIjo6CisgICAgSW1wb3J0IG9uZSBjb21taXQgZm9yIGVhY2ggY2hhbmdlIGluIHRoZSBoaXN0b3J5IG9mIHRoYXQgZGVwb3QgcGF0aC4KKworIi8vZGVwb3QvbXkvcHJvamVjdEAxLDYiOjoKKyAgICBJbXBvcnQgb25seSBjaGFuZ2VzIDEgdGhyb3VnaCA2LgorCisiLy9kZXBvdC9wcm9qMUBhbGwgLy9kZXBvdC9wcm9qMkBhbGwiOjoKKyAgICBJbXBvcnQgYWxsIGNoYW5nZXMgZnJvbSBib3RoIG5hbWVkIGRlcG90IHBhdGhzIGludG8gYSBzaW5nbGUKKyAgICByZXBvc2l0b3J5LiAgT25seSBmaWxlcyBiZWxvdyB0aGVzZSBkaXJlY3RvcmllcyBhcmUgaW5jbHVkZWQuCisgICAgVGhlcmUgaXMgbm90IGEgc3ViZGlyZWN0b3J5IGluIEdpdCBmb3IgZWFjaCAicHJvajEiIGFuZCAicHJvajIiLgorICAgIFlvdSBtdXN0IHVzZSB0aGUgYC0tZGVzdGluYXRpb25gIG9wdGlvbiB3aGVuIHNwZWNpZnlpbmcgbW9yZQorICAgIHRoYW4gb25lIGRlcG90IHBhdGguICBUaGUgcmV2aXNpb24gc3BlY2lmaWVyIG11c3QgYmUgc3BlY2lmaWVkCisgICAgaWRlbnRpY2FsbHkgb24gZWFjaCBkZXBvdCBwYXRoLiAgSWYgdGhlcmUgYXJlIGZpbGVzIGluIHRoZQorICAgIGRlcG90IHBhdGhzIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlIHBhdGggd2l0aCB0aGUgbW9zdCByZWNlbnRseQorICAgIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyB0aGUgb25lIHRoYXQgYXBwZWFycyBpbiBHaXQuCisKK1NlZSAncDQgaGVscCByZXZpc2lvbnMnIGZvciB0aGUgZnVsbCBzeW50YXggb2YgcDQgcmV2aXNpb24gc3BlY2lmaWVycy4KKworCitDTElFTlQgU1BFQworLS0tLS0tLS0tLS0KK1RoZSBwNCBjbGllbnQgc3BlY2lmaWNhdGlvbiBpcyBtYWludGFpbmVkIHdpdGggdGhlICdwNCBjbGllbnQnIGNvbW1hbmQKK2FuZCBjb250YWlucyBhbW9uZyBvdGhlciBmaWVsZHMsIGEgVmlldyB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGRlcG90CitpcyBtYXBwZWQgaW50byB0aGUgY2xpZW50IHJlcG9zaXRvcnkuICBUaGUgJ2Nsb25lJyBhbmQgJ3N5bmMnIGNvbW1hbmRzCitjYW4gY29uc3VsdCB0aGUgY2xpZW50IHNwZWMgd2hlbiBnaXZlbiB0aGUgYC0tdXNlLWNsaWVudC1zcGVjYCBvcHRpb24gb3IKK3doZW4gdGhlIHVzZUNsaWVudFNwZWMgdmFyaWFibGUgaXMgdHJ1ZS4gIEFmdGVyICdnaXQgcDQgY2xvbmUnLCB0aGUKK3VzZUNsaWVudFNwZWMgdmFyaWFibGUgaXMgYXV0b21hdGljYWxseSBzZXQgaW4gdGhlIHJlcG9zaXRvcnkKK2NvbmZpZ3VyYXRpb24gZmlsZS4gIFRoaXMgYWxsb3dzIGZ1dHVyZSAnZ2l0IHA0IHN1Ym1pdCcgY29tbWFuZHMgdG8KK3dvcmsgcHJvcGVybHk7IHRoZSBzdWJtaXQgY29tbWFuZCBsb29rcyBvbmx5IGF0IHRoZSB2YXJpYWJsZSBhbmQgZG9lcworbm90IGhhdmUgYSBjb21tYW5kLWxpbmUgb3B0aW9uLgorCitUaGUgZnVsbCBzeW50YXggZm9yIGEgcDQgdmlldyBpcyBkb2N1bWVudGVkIGluICdwNCBoZWxwIHZpZXdzJy4gICdnaXQgcDQnCitrbm93cyBvbmx5IGEgc3Vic2V0IG9mIHRoZSB2aWV3IHN5bnRheC4gIEl0IHVuZGVyc3RhbmRzIG11bHRpLWxpbmUKK21hcHBpbmdzLCBvdmVybGF5cyB3aXRoICcrJywgZXhjbHVzaW9ucyB3aXRoICctJyBhbmQgZG91YmxlLXF1b3RlcworYXJvdW5kIHdoaXRlc3BhY2UuICBPZiB0aGUgcG9zc2libGUgd2lsZGNhcmRzLCAnZ2l0IHA0JyBvbmx5IGhhbmRsZXMKKycuLi4nLCBhbmQgb25seSB3aGVuIGl0IGlzIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGguICAnZ2l0IHA0JyB3aWxsIGNvbXBsYWluCitpZiBpdCBlbmNvdW50ZXJzIGFuIHVuaGFuZGxlZCB3aWxkY2FyZC4KKworQnVncyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2Ygb3ZlcmxhcCBtYXBwaW5ncyBleGlzdC4gIElmIG11bHRpcGxlIGRlcG90CitwYXRocyBtYXAgdGhyb3VnaCBvdmVybGF5cyB0byB0aGUgc2FtZSBsb2NhdGlvbiBpbiB0aGUgcmVwb3NpdG9yeSwKKydnaXQgcDQnIGNhbiBjaG9vc2UgdGhlIHdyb25nIG9uZS4gIFRoaXMgaXMgaGFyZCB0byBzb2x2ZSB3aXRob3V0CitkZWRpY2F0aW5nIGEgY2xpZW50IHNwZWMganVzdCBmb3IgJ2dpdCBwNCcuCisKK1RoZSBuYW1lIG9mIHRoZSBjbGllbnQgY2FuIGJlIGdpdmVuIHRvICdnaXQgcDQnIGluIG11bHRpcGxlIHdheXMuICBUaGUKK3ZhcmlhYmxlICdnaXQtcDQuY2xpZW50JyB0YWtlcyBwcmVjZWRlbmNlIGlmIGl0IGV4aXN0cy4gIE90aGVyd2lzZSwKK25vcm1hbCBwNCBtZWNoYW5pc21zIG9mIGRldGVybWluaW5nIHRoZSBjbGllbnQgYXJlIHVzZWQ6ICBlbnZpcm9ubWVudAordmFyaWFibGUgYFA0Q0xJRU5UYCwgYSBmaWxlIHJlZmVyZW5jZWQgYnkgYFA0Q09ORklHYCwgb3IgdGhlIGxvY2FsIGhvc3QgbmFtZS4KKworCitCUkFOQ0ggREVURUNUSU9OCistLS0tLS0tLS0tLS0tLS0tCitQNCBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIGNvbmNlcHQgb2YgYSBicmFuY2ggYXMgR2l0LiAgSW5zdGVhZCwKK3A0IG9yZ2FuaXplcyBpdHMgY29udGVudCBhcyBhIGRpcmVjdG9yeSB0cmVlLCB3aGVyZSBieSBjb252ZW50aW9uCitkaWZmZXJlbnQgbG9naWNhbCBicmFuY2hlcyBhcmUgaW4gZGlmZmVyZW50IGxvY2F0aW9ucyBpbiB0aGUgdHJlZS4KK1RoZSAncDQgYnJhbmNoJyBjb21tYW5kIGlzIHVzZWQgdG8gbWFpbnRhaW4gbWFwcGluZ3MgYmV0d2VlbgorZGlmZmVyZW50IGFyZWFzIGluIHRoZSB0cmVlLCBhbmQgaW5kaWNhdGUgcmVsYXRlZCBjb250ZW50LiAgJ2dpdCBwNCcKK2NhbiB1c2UgdGhlc2UgbWFwcGluZ3MgdG8gZGV0ZXJtaW5lIGJyYW5jaCByZWxhdGlvbnNoaXBzLgorCitJZiB5b3UgaGF2ZSBhIHJlcG9zaXRvcnkgd2hlcmUgYWxsIHRoZSBicmFuY2hlcyBvZiBpbnRlcmVzdCBleGlzdCBhcworc3ViZGlyZWN0b3JpZXMgb2YgYSBzaW5nbGUgZGVwb3QgcGF0aCwgeW91IGNhbiB1c2UgYC0tZGV0ZWN0LWJyYW5jaGVzYAord2hlbiBjbG9uaW5nIG9yIHN5bmNpbmcgdG8gaGF2ZSAnZ2l0IHA0JyBhdXRvbWF0aWNhbGx5IGZpbmQKK3N1YmRpcmVjdG9yaWVzIGluIHA0LCBhbmQgdG8gZ2VuZXJhdGUgdGhlc2UgYXMgYnJhbmNoZXMgaW4gR2l0LgorCitGb3IgZXhhbXBsZSwgaWYgdGhlIFA0IHJlcG9zaXRvcnkgc3RydWN0dXJlIGlzOgorLS0tLQorLy9kZXBvdC9tYWluLy4uLgorLy9kZXBvdC9icmFuY2gxLy4uLgorLS0tLQorCitBbmQgInA0IGJyYW5jaCAtbyBicmFuY2gxIiBzaG93cyBhIFZpZXcgbGluZSB0aGF0IGxvb2tzIGxpa2U6CistLS0tCisvL2RlcG90L21haW4vLi4uIC8vZGVwb3QvYnJhbmNoMS8uLi4KKy0tLS0KKworVGhlbiB0aGlzICdnaXQgcDQgY2xvbmUnIGNvbW1hbmQ6CistLS0tCitnaXQgcDQgY2xvbmUgLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwKKy0tLS0KK3Byb2R1Y2VzIGEgc2VwYXJhdGUgYnJhbmNoIGluICdyZWZzL3JlbW90ZXMvcDQvJyBmb3IgLy9kZXBvdC9tYWluLAorY2FsbGVkICdtYXN0ZXInLCBhbmQgb25lIGZvciAvL2RlcG90L2JyYW5jaDEgY2FsbGVkICdkZXBvdC9icmFuY2gxJy4KKworSG93ZXZlciwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjcmVhdGUgYnJhbmNoZXMgaW4gcDQgdG8gYmUgYWJsZSB0byB1c2UKK3RoZW0gbGlrZSBicmFuY2hlcy4gIEJlY2F1c2UgaXQgaXMgZGlmZmljdWx0IHRvIGluZmVyIGJyYW5jaAorcmVsYXRpb25zaGlwcyBhdXRvbWF0aWNhbGx5LCBhIEdpdCBjb25maWd1cmF0aW9uIHNldHRpbmcKKydnaXQtcDQuYnJhbmNoTGlzdCcgY2FuIGJlIHVzZWQgdG8gZXhwbGljaXRseSBpZGVudGlmeSBicmFuY2gKK3JlbGF0aW9uc2hpcHMuICBJdCBpcyBhIGxpc3Qgb2YgInNvdXJjZTpkZXN0aW5hdGlvbiIgcGFpcnMsIGxpa2UgYQorc2ltcGxlIHA0IGJyYW5jaCBzcGVjaWZpY2F0aW9uLCB3aGVyZSB0aGUgInNvdXJjZSIgYW5kICJkZXN0aW5hdGlvbiIgYXJlCit0aGUgcGF0aCBlbGVtZW50cyBpbiB0aGUgcDQgcmVwb3NpdG9yeS4gIFRoZSBleGFtcGxlIGFib3ZlIHJlbGllZCBvbiB0aGUKK3ByZXNlbmNlIG9mIHRoZSBwNCBicmFuY2guICBXaXRob3V0IHA0IGJyYW5jaGVzLCB0aGUgc2FtZSByZXN1bHQgd2lsbAorb2NjdXIgd2l0aDoKKy0tLS0KK2dpdCBpbml0IGRlcG90CitjZCBkZXBvdAorZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaDEKK2dpdCBwNCBjbG9uZSAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAuCistLS0tCisKKworUEVSRk9STUFOQ0UKKy0tLS0tLS0tLS0tCitUaGUgZmFzdC1pbXBvcnQgbWVjaGFuaXNtIHVzZWQgYnkgJ2dpdCBwNCcgY3JlYXRlcyBvbmUgcGFjayBmaWxlIGZvcgorZWFjaCBpbnZvY2F0aW9uIG9mICdnaXQgcDQgc3luYycuICBOb3JtYWxseSwgR2l0IGdhcmJhZ2UgY29tcHJlc3Npb24KKyhsaW5rZ2l0OmdpdC1nY1sxXSkgYXV0b21hdGljYWxseSBjb21wcmVzc2VzIHRoZXNlIHRvIGZld2VyIHBhY2sgZmlsZXMsCitidXQgZXhwbGljaXQgaW52b2NhdGlvbiBvZiAnZ2l0IHJlcGFjayAtYWRmJyBtYXkgaW1wcm92ZSBwZXJmb3JtYW5jZS4KKworCitDT05GSUdVUkFUSU9OIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBmb2xsb3dpbmcgY29uZmlnIHNldHRpbmdzIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSAnZ2l0IHA0JyBiZWhhdmlvci4KK1RoZXkgYWxsIGFyZSBpbiB0aGUgJ2dpdC1wNCcgc2VjdGlvbi4KKworR2VuZXJhbCB2YXJpYWJsZXMKK35+fn5+fn5+fn5+fn5+fn5+CitnaXQtcDQudXNlcjo6CisJVXNlciBzcGVjaWZpZWQgYXMgYW4gb3B0aW9uIHRvIGFsbCBwNCBjb21tYW5kcywgd2l0aCAnLXUgPHVzZXI+Jy4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYFA0VVNFUmAgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworZ2l0LXA0LnBhc3N3b3JkOjoKKwlQYXNzd29yZCBzcGVjaWZpZWQgYXMgYW4gb3B0aW9uIHRvIGFsbCBwNCBjb21tYW5kcywgd2l0aAorCSctUCA8cGFzc3dvcmQ+Jy4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYFA0UEFTU2AgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworZ2l0LXA0LnBvcnQ6OgorCVBvcnQgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiB0byBhbGwgcDQgY29tbWFuZHMsIHdpdGgKKwknLXAgPHBvcnQ+Jy4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYFA0UE9SVGAgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworZ2l0LXA0Lmhvc3Q6OgorCUhvc3Qgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiB0byBhbGwgcDQgY29tbWFuZHMsIHdpdGgKKwknLWggPGhvc3Q+Jy4KKwlUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYFA0SE9TVGAgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworZ2l0LXA0LmNsaWVudDo6CisJQ2xpZW50IHNwZWNpZmllZCBhcyBhbiBvcHRpb24gdG8gYWxsIHA0IGNvbW1hbmRzLCB3aXRoCisJJy1jIDxjbGllbnQ+JywgaW5jbHVkaW5nIHRoZSBjbGllbnQgc3BlYy4KKworZ2l0LXA0LnJldHJpZXM6OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGEgcDQgY29tbWFuZCAobm90YWJseSwKKwkncDQgc3luYycpIGlmIHRoZSBuZXR3b3JrIHRpbWVzIG91dC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMy4KKwlTZXQgdGhlIHZhbHVlIHRvIDAgdG8gZGlzYWJsZSByZXRyaWVzIG9yIGlmIHlvdXIgcDQgdmVyc2lvbgorCWRvZXMgbm90IHN1cHBvcnQgcmV0cmllcyAocHJlIDIwMTIuMikuCisKK0Nsb25lIGFuZCBzeW5jIHZhcmlhYmxlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitnaXQtcDQuc3luY0Zyb21PcmlnaW46OgorCUJlY2F1c2UgaW1wb3J0aW5nIGNvbW1pdHMgZnJvbSBvdGhlciBHaXQgcmVwb3NpdG9yaWVzIGlzIG11Y2ggZmFzdGVyCisJdGhhbiBpbXBvcnRpbmcgdGhlbSBmcm9tIHA0LCBhIG1lY2hhbmlzbSBleGlzdHMgdG8gZmluZCBwNCBjaGFuZ2VzCisJZmlyc3QgaW4gR2l0IHJlbW90ZXMuICBJZiBicmFuY2hlcyBleGlzdCB1bmRlciAncmVmcy9yZW1vdGUvb3JpZ2luL3A0JywKKwl0aG9zZSB3aWxsIGJlIGZldGNoZWQgYW5kIHVzZWQgd2hlbiBzeW5jaW5nIGZyb20gcDQuICBUaGlzCisJdmFyaWFibGUgY2FuIGJlIHNldCB0byAnZmFsc2UnIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci4KKworZ2l0LXA0LmJyYW5jaFVzZXI6OgorCU9uZSBwaGFzZSBpbiBicmFuY2ggZGV0ZWN0aW9uIGludm9sdmVzIGxvb2tpbmcgYXQgcDQgYnJhbmNoZXMKKwl0byBmaW5kIG5ldyBvbmVzIHRvIGltcG9ydC4gIEJ5IGRlZmF1bHQsIGFsbCBicmFuY2hlcyBhcmUKKwlpbnNwZWN0ZWQuICBUaGlzIG9wdGlvbiBsaW1pdHMgdGhlIHNlYXJjaCB0byBqdXN0IHRob3NlIG93bmVkCisJYnkgdGhlIHNpbmdsZSB1c2VyIG5hbWVkIGluIHRoZSB2YXJpYWJsZS4KKworZ2l0LXA0LmJyYW5jaExpc3Q6OgorCUxpc3Qgb2YgYnJhbmNoZXMgdG8gYmUgaW1wb3J0ZWQgd2hlbiBicmFuY2ggZGV0ZWN0aW9uIGlzCisJZW5hYmxlZC4gIEVhY2ggZW50cnkgc2hvdWxkIGJlIGEgcGFpciBvZiBicmFuY2ggbmFtZXMgc2VwYXJhdGVkCisJYnkgYSBjb2xvbiAoOikuICBUaGlzIGV4YW1wbGUgZGVjbGFyZXMgdGhhdCBib3RoIGJyYW5jaEEgYW5kCisJYnJhbmNoQiB3ZXJlIGNyZWF0ZWQgZnJvbSBtYWluOgorKworLS0tLS0tLS0tLS0tLQorZ2l0IGNvbmZpZyAgICAgICBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaEEKK2dpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgbWFpbjpicmFuY2hCCistLS0tLS0tLS0tLS0tCisKK2dpdC1wNC5pZ25vcmVkUDRMYWJlbHM6OgorCUxpc3Qgb2YgcDQgbGFiZWxzIHRvIGlnbm9yZS4gVGhpcyBpcyBidWlsdCBhdXRvbWF0aWNhbGx5IGFzCisJdW5pbXBvcnRhYmxlIGxhYmVscyBhcmUgZGlzY292ZXJlZC4KKworZ2l0LXA0LmltcG9ydExhYmVsczo6CisJSW1wb3J0IHA0IGxhYmVscyBpbnRvIGdpdCwgYXMgcGVyIC0taW1wb3J0LWxhYmVscy4KKworZ2l0LXA0LmxhYmVsSW1wb3J0UmVnZXhwOjoKKwlPbmx5IHA0IGxhYmVscyBtYXRjaGluZyB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aWxsIGJlIGltcG9ydGVkLiBUaGUKKwlkZWZhdWx0IHZhbHVlIGlzICdbYS16QS1aMC05X1wtLl0rJCcuCisKK2dpdC1wNC51c2VDbGllbnRTcGVjOjoKKwlTcGVjaWZ5IHRoYXQgdGhlIHA0IGNsaWVudCBzcGVjIHNob3VsZCBiZSB1c2VkIHRvIGlkZW50aWZ5IHA0CisJZGVwb3QgcGF0aHMgb2YgaW50ZXJlc3QuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUKKwlvcHRpb24gYC0tdXNlLWNsaWVudC1zcGVjYC4gIFNlZSB0aGUgIkNMSUVOVCBTUEVDIiBzZWN0aW9uIGFib3ZlLgorCVRoaXMgdmFyaWFibGUgaXMgYSBib29sZWFuLCBub3QgdGhlIG5hbWUgb2YgYSBwNCBjbGllbnQuCisKK2dpdC1wNC5wYXRoRW5jb2Rpbmc6OgorCVBlcmZvcmNlIGtlZXBzIHRoZSBlbmNvZGluZyBvZiBhIHBhdGggYXMgZ2l2ZW4gYnkgdGhlIG9yaWdpbmF0aW5nIE9TLgorCUdpdCBleHBlY3RzIHBhdGhzIGVuY29kZWQgYXMgVVRGLTguIFVzZSB0aGlzIGNvbmZpZyB0byB0ZWxsIGdpdC1wNAorCXdoYXQgZW5jb2RpbmcgUGVyZm9yY2UgaGFkIHVzZWQgZm9yIHRoZSBwYXRocy4gVGhpcyBlbmNvZGluZyBpcyB1c2VkCisJdG8gdHJhbnNjb2RlIHRoZSBwYXRocyB0byBVVEYtOC4gQXMgYW4gZXhhbXBsZSwgUGVyZm9yY2Ugb24gV2luZG93cworCW9mdGVuIHVzZXMgImNwMTI1MiIgdG8gZW5jb2RlIHBhdGggbmFtZXMuCisKK2dpdC1wNC5sYXJnZUZpbGVTeXN0ZW06OgorCVNwZWNpZnkgdGhlIHN5c3RlbSB0aGF0IGlzIHVzZWQgZm9yIGxhcmdlIChiaW5hcnkpIGZpbGVzLiBQbGVhc2Ugbm90ZQorCXRoYXQgbGFyZ2UgZmlsZSBzeXN0ZW1zIGRvIG5vdCBzdXBwb3J0IHRoZSAnZ2l0IHA0IHN1Ym1pdCcgY29tbWFuZC4KKwlPbmx5IEdpdCBMRlMgaXMgaW1wbGVtZW50ZWQgcmlnaHQgbm93IChzZWUgaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vCisJZm9yIG1vcmUgaW5mb3JtYXRpb24pLiBEb3dubG9hZCBhbmQgaW5zdGFsbCB0aGUgR2l0IExGUyBjb21tYW5kIGxpbmUKKwlleHRlbnNpb24gdG8gdXNlIHRoaXMgb3B0aW9uIGFuZCBjb25maWd1cmUgaXQgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tLQorZ2l0IGNvbmZpZyAgICAgICBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIEdpdExGUworLS0tLS0tLS0tLS0tLQorCitnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9uczo6CisJQWxsIGZpbGVzIG1hdGNoaW5nIGEgZmlsZSBleHRlbnNpb24gaW4gdGhlIGxpc3Qgd2lsbCBiZSBwcm9jZXNzZWQKKwlieSB0aGUgbGFyZ2UgZmlsZSBzeXN0ZW0uIERvIG5vdCBwcmVmaXggdGhlIGV4dGVuc2lvbnMgd2l0aCAnLicuCisKK2dpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQ6OgorCUFsbCBmaWxlcyB3aXRoIGFuIHVuY29tcHJlc3NlZCBzaXplIGV4Y2VlZGluZyB0aGUgdGhyZXNob2xkIHdpbGwgYmUKKwlwcm9jZXNzZWQgYnkgdGhlIGxhcmdlIGZpbGUgc3lzdGVtLiBCeSBkZWZhdWx0IHRoZSB0aHJlc2hvbGQgaXMKKwlkZWZpbmVkIGluIGJ5dGVzLiBBZGQgdGhlIHN1ZmZpeCBrLCBtLCBvciBnIHRvIGNoYW5nZSB0aGUgdW5pdC4KKworZ2l0LXA0LmxhcmdlRmlsZUNvbXByZXNzZWRUaHJlc2hvbGQ6OgorCUFsbCBmaWxlcyB3aXRoIGEgY29tcHJlc3NlZCBzaXplIGV4Y2VlZGluZyB0aGUgdGhyZXNob2xkIHdpbGwgYmUKKwlwcm9jZXNzZWQgYnkgdGhlIGxhcmdlIGZpbGUgc3lzdGVtLiBUaGlzIG9wdGlvbiBtaWdodCBzbG93IGRvd24KKwl5b3VyIGNsb25lL3N5bmMgcHJvY2Vzcy4gQnkgZGVmYXVsdCB0aGUgdGhyZXNob2xkIGlzIGRlZmluZWQgaW4KKwlieXRlcy4gQWRkIHRoZSBzdWZmaXggaywgbSwgb3IgZyB0byBjaGFuZ2UgdGhlIHVuaXQuCisKK2dpdC1wNC5sYXJnZUZpbGVQdXNoOjoKKwlCb29sZWFuIHZhcmlhYmxlIHdoaWNoIGRlZmluZXMgaWYgbGFyZ2UgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkKKwlwdXNoZWQgdG8gYSBzZXJ2ZXIuCisKK2dpdC1wNC5rZWVwRW1wdHlDb21taXRzOjoKKwlBIGNoYW5nZWxpc3QgdGhhdCBjb250YWlucyBvbmx5IGV4Y2x1ZGVkIGZpbGVzIHdpbGwgYmUgaW1wb3J0ZWQKKwlhcyBhbiBlbXB0eSBjb21taXQgaWYgdGhpcyBib29sZWFuIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS4KKworZ2l0LXA0Lm1hcFVzZXI6OgorCU1hcCBhIFA0IHVzZXIgdG8gYSBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIGluIEdpdC4gVXNlIGEgc3RyaW5nCisJd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdCB0byBjcmVhdGUgYSBtYXBwaW5nOgorKworLS0tLS0tLS0tLS0tLQorZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQubWFwVXNlciAicDR1c2VyID0gRmlyc3QgTGFzdCA8bWFpbEBhZGRyZXNzLmNvbT4iCistLS0tLS0tLS0tLS0tCisrCitBIG1hcHBpbmcgd2lsbCBvdmVycmlkZSBhbnkgdXNlciBpbmZvcm1hdGlvbiBmcm9tIFA0LiBNYXBwaW5ncyBmb3IKK211bHRpcGxlIFA0IHVzZXIgY2FuIGJlIGRlZmluZWQuCisKK1N1Ym1pdCB2YXJpYWJsZXMKK35+fn5+fn5+fn5+fn5+fn4KK2dpdC1wNC5kZXRlY3RSZW5hbWVzOjoKKwlEZXRlY3QgcmVuYW1lcy4gIFNlZSBsaW5rZ2l0OmdpdC1kaWZmWzFdLiAgVGhpcyBjYW4gYmUgdHJ1ZSwKKwlmYWxzZSwgb3IgYSBzY29yZSBhcyBleHBlY3RlZCBieSAnZ2l0IGRpZmYgLU0nLgorCitnaXQtcDQuZGV0ZWN0Q29waWVzOjoKKwlEZXRlY3QgY29waWVzLiAgU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uICBUaGlzIGNhbiBiZSB0cnVlLAorCWZhbHNlLCBvciBhIHNjb3JlIGFzIGV4cGVjdGVkIGJ5ICdnaXQgZGlmZiAtQycuCisKK2dpdC1wNC5kZXRlY3RDb3BpZXNIYXJkZXI6OgorCURldGVjdCBjb3BpZXMgaGFyZGVyLiAgU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uICBBIGJvb2xlYW4uCisKK2dpdC1wNC5wcmVzZXJ2ZVVzZXI6OgorCU9uIHN1Ym1pdCwgcmUtYXV0aG9yIGNoYW5nZXMgdG8gcmVmbGVjdCB0aGUgR2l0IGF1dGhvciwKKwlyZWdhcmRsZXNzIG9mIHdobyBpbnZva2VzICdnaXQgcDQgc3VibWl0Jy4KKworZ2l0LXA0LmFsbG93TWlzc2luZ1A0VXNlcnM6OgorCVdoZW4gJ3ByZXNlcnZlVXNlcicgaXMgdHJ1ZSwgJ2dpdCBwNCcgbm9ybWFsbHkgZGllcyBpZiBpdAorCWNhbm5vdCBmaW5kIGFuIGF1dGhvciBpbiB0aGUgcDQgdXNlciBtYXAuICBUaGlzIHNldHRpbmcKKwlzdWJtaXRzIHRoZSBjaGFuZ2UgcmVnYXJkbGVzcy4KKworZ2l0LXA0LnNraXBTdWJtaXRFZGl0OjoKKwlUaGUgc3VibWl0IHByb2Nlc3MgaW52b2tlcyB0aGUgZWRpdG9yIGJlZm9yZSBlYWNoIHA0IGNoYW5nZQorCWlzIHN1Ym1pdHRlZC4gIElmIHRoaXMgc2V0dGluZyBpcyB0cnVlLCB0aG91Z2gsIHRoZSBlZGl0aW5nCisJc3RlcCBpcyBza2lwcGVkLgorCitnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjazo6CisJQWZ0ZXIgZWRpdGluZyB0aGUgcDQgY2hhbmdlIG1lc3NhZ2UsICdnaXQgcDQnIG1ha2VzIHN1cmUgdGhhdAorCXRoZSBkZXNjcmlwdGlvbiByZWFsbHkgd2FzIGNoYW5nZWQgYnkgbG9va2luZyBhdCB0aGUgZmlsZQorCW1vZGlmaWNhdGlvbiB0aW1lLiAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhhdCB0ZXN0LgorCitnaXQtcDQuYWxsb3dTdWJtaXQ6OgorCUJ5IGRlZmF1bHQsIGFueSBicmFuY2ggY2FuIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBmb3IgYSAnZ2l0IHA0CisJc3VibWl0JyBvcGVyYXRpb24uICBUaGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGlmIHNldCwgcGVybWl0cyBvbmx5CisJdGhlIG5hbWVkIGJyYW5jaGVzIHRvIGJlIHVzZWQgYXMgc3VibWl0IHNvdXJjZXMuICBCcmFuY2ggbmFtZXMKKwltdXN0IGJlIHRoZSBzaG9ydCBuYW1lcyAobm8gInJlZnMvaGVhZHMvIiksIGFuZCBzaG91bGQgYmUKKwlzZXBhcmF0ZWQgYnkgY29tbWFzICgiLCIpLCB3aXRoIG5vIHNwYWNlcy4KKworZ2l0LXA0LnNraXBVc2VyTmFtZUNoZWNrOjoKKwlJZiB0aGUgdXNlciBydW5uaW5nICdnaXQgcDQgc3VibWl0JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcDQKKwl1c2VyIG1hcCwgJ2dpdCBwNCcgZXhpdHMuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBmb3JjZQorCXN1Ym1pc3Npb24gcmVnYXJkbGVzcy4KKworZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwOjoKKwlJZiBlbmFibGVkLCAnZ2l0IHA0IHN1Ym1pdCcgd2lsbCBhdHRlbXB0IHRvIGNsZWFudXAgUkNTIGtleXdvcmRzCisJKCRIZWFkZXIkLCBldGMpLiBUaGVzZSB3b3VsZCBvdGhlcndpc2UgY2F1c2UgbWVyZ2UgY29uZmxpY3RzIGFuZCBwcmV2ZW50CisJdGhlIHN1Ym1pdCBnb2luZyBhaGVhZC4gVGhpcyBvcHRpb24gc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsIGF0CisJcHJlc2VudC4KKworZ2l0LXA0LmV4cG9ydExhYmVsczo6CisJRXhwb3J0IEdpdCB0YWdzIHRvIHA0IGxhYmVscywgYXMgcGVyIC0tZXhwb3J0LWxhYmVscy4KKworZ2l0LXA0LmxhYmVsRXhwb3J0UmVnZXhwOjoKKwlPbmx5IHA0IGxhYmVscyBtYXRjaGluZyB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aWxsIGJlIGV4cG9ydGVkLiBUaGUKKwlkZWZhdWx0IHZhbHVlIGlzICdbYS16QS1aMC05X1wtLl0rJCcuCisKK2dpdC1wNC5jb25mbGljdDo6CisJU3BlY2lmeSBzdWJtaXQgYmVoYXZpb3Igd2hlbiBhIGNvbmZsaWN0IHdpdGggcDQgaXMgZm91bmQsIGFzIHBlcgorCS0tY29uZmxpY3QuICBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyAnYXNrJy4KKworZ2l0LXA0LmRpc2FibGVSZWJhc2U6OgorICAgIERvIG5vdCByZWJhc2UgdGhlIHRyZWUgYWdhaW5zdCBwNC9tYXN0ZXIgZm9sbG93aW5nIGEgc3VibWl0LgorCitnaXQtcDQuZGlzYWJsZVA0U3luYzo6CisgICAgRG8gbm90IHN5bmMgcDQvbWFzdGVyIHdpdGggUGVyZm9yY2UgZm9sbG93aW5nIGEgc3VibWl0LiBJbXBsaWVzIGdpdC1wNC5kaXNhYmxlUmViYXNlLgorCitJTVBMRU1FTlRBVElPTiBERVRBSUxTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENoYW5nZXNldHMgZnJvbSBwNCBhcmUgaW1wb3J0ZWQgdXNpbmcgR2l0IGZhc3QtaW1wb3J0LgorKiBDbG9uaW5nIG9yIHN5bmNpbmcgZG9lcyBub3QgcmVxdWlyZSBhIHA0IGNsaWVudDsgZmlsZSBjb250ZW50cyBhcmUKKyAgY29sbGVjdGVkIHVzaW5nICdwNCBwcmludCcuCisqIFN1Ym1pdHRpbmcgcmVxdWlyZXMgYSBwNCBjbGllbnQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgc2FtZSBsb2NhdGlvbgorICBhcyB0aGUgR2l0IHJlcG9zaXRvcnkuICBQYXRjaGVzIGFyZSBhcHBsaWVkLCBvbmUgYXQgYSB0aW1lLCB0bworICB0aGlzIHA0IGNsaWVudCBhbmQgc3VibWl0dGVkIGZyb20gdGhlcmUuCisqIEVhY2ggY29tbWl0IGltcG9ydGVkIGJ5ICdnaXQgcDQnIGhhcyBhIGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nCisgIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGUgcDQgZGVwb3QgbG9jYXRpb24gYW5kIGNoYW5nZSBudW1iZXIuICBUaGlzCisgIGxpbmUgaXMgdXNlZCBieSBsYXRlciAnZ2l0IHA0IHN5bmMnIG9wZXJhdGlvbnMgdG8ga25vdyB3aGljaCBwNAorICBjaGFuZ2VzIGFyZSBuZXcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWNkZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dApAQCAtMCwwICsxLDQwNiBAQAorZ2l0LXBhY2stb2JqZWN0cygxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGFjay1vYmplY3RzIC0gQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwYWNrLW9iamVjdHMnIFstcSB8IC0tcHJvZ3Jlc3MgfCAtLWFsbC1wcm9ncmVzc10gWy0tYWxsLXByb2dyZXNzLWltcGxpZWRdCisJWy0tbm8tcmV1c2UtZGVsdGFdIFstLWRlbHRhLWJhc2Utb2Zmc2V0XSBbLS1ub24tZW1wdHldCisJWy0tbG9jYWxdIFstLWluY3JlbWVudGFsXSBbLS13aW5kb3c9PG4+XSBbLS1kZXB0aD08bj5dCisJWy0tcmV2cyBbLS11bnBhY2tlZCB8IC0tYWxsXV0gWy0ta2VlcC1wYWNrPTxwYWNrLW5hbWU+XQorCVstLXN0ZG91dCBbLS1maWx0ZXI9PGZpbHRlci1zcGVjPl0gfCBiYXNlLW5hbWVdCisJWy0tc2hhbGxvd10gWy0ta2VlcC10cnVlLXBhcmVudHNdIFstLXNwYXJzZV0gPCBvYmplY3QtbGlzdAorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgbGlzdCBvZiBvYmplY3RzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBhbmQgd3JpdGVzIGVpdGhlciBvbmUgb3IKK21vcmUgcGFja2VkIGFyY2hpdmVzIHdpdGggdGhlIHNwZWNpZmllZCBiYXNlLW5hbWUgdG8gZGlzaywgb3IgYSBwYWNrZWQKK2FyY2hpdmUgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworQSBwYWNrZWQgYXJjaGl2ZSBpcyBhbiBlZmZpY2llbnQgd2F5IHRvIHRyYW5zZmVyIGEgc2V0IG9mIG9iamVjdHMKK2JldHdlZW4gdHdvIHJlcG9zaXRvcmllcyBhcyB3ZWxsIGFzIGFuIGFjY2VzcyBlZmZpY2llbnQgYXJjaGl2YWwKK2Zvcm1hdC4gIEluIGEgcGFja2VkIGFyY2hpdmUsIGFuIG9iamVjdCBpcyBlaXRoZXIgc3RvcmVkIGFzIGEKK2NvbXByZXNzZWQgd2hvbGUgb3IgYXMgYSBkaWZmZXJlbmNlIGZyb20gc29tZSBvdGhlciBvYmplY3QuCitUaGUgbGF0dGVyIGlzIG9mdGVuIGNhbGxlZCBhIGRlbHRhLgorCitUaGUgcGFja2VkIGFyY2hpdmUgZm9ybWF0ICgucGFjaykgaXMgZGVzaWduZWQgdG8gYmUgc2VsZi1jb250YWluZWQKK3NvIHRoYXQgaXQgY2FuIGJlIHVucGFja2VkIHdpdGhvdXQgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24uIFRoZXJlZm9yZSwKK2VhY2ggb2JqZWN0IHRoYXQgYSBkZWx0YSBkZXBlbmRzIHVwb24gbXVzdCBiZSBwcmVzZW50IHdpdGhpbiB0aGUgcGFjay4KKworQSBwYWNrIGluZGV4IGZpbGUgKC5pZHgpIGlzIGdlbmVyYXRlZCBmb3IgZmFzdCwgcmFuZG9tIGFjY2VzcyB0byB0aGUKK29iamVjdHMgaW4gdGhlIHBhY2suIFBsYWNpbmcgYm90aCB0aGUgaW5kZXggZmlsZSAoLmlkeCkgYW5kIHRoZSBwYWNrZWQKK2FyY2hpdmUgKC5wYWNrKSBpbiB0aGUgcGFjay8gc3ViZGlyZWN0b3J5IG9mICRHSVRfT0JKRUNUX0RJUkVDVE9SWSAob3IKK2FueSBvZiB0aGUgZGlyZWN0b3JpZXMgb24gJEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTKQorZW5hYmxlcyBHaXQgdG8gcmVhZCBmcm9tIHRoZSBwYWNrIGFyY2hpdmUuCisKK1RoZSAnZ2l0IHVucGFjay1vYmplY3RzJyBjb21tYW5kIGNhbiByZWFkIHRoZSBwYWNrZWQgYXJjaGl2ZSBhbmQKK2V4cGFuZCB0aGUgb2JqZWN0cyBjb250YWluZWQgaW4gdGhlIHBhY2sgaW50byAib25lLWZpbGUKK29uZS1vYmplY3QiIGZvcm1hdDsgdGhpcyBpcyB0eXBpY2FsbHkgZG9uZSBieSB0aGUgc21hcnQtcHVsbAorY29tbWFuZHMgd2hlbiBhIHBhY2sgaXMgY3JlYXRlZCBvbi10aGUtZmx5IGZvciBlZmZpY2llbnQgbmV0d29yawordHJhbnNwb3J0IGJ5IHRoZWlyIHBlZXJzLgorCisKK09QVElPTlMKKy0tLS0tLS0KK2Jhc2UtbmFtZTo6CisJV3JpdGUgaW50byBwYWlycyBvZiBmaWxlcyAoLnBhY2sgYW5kIC5pZHgpLCB1c2luZworCTxiYXNlLW5hbWU+IHRvIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgY3JlYXRlZCBmaWxlLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgdGhlIHR3byBmaWxlcyBpbiBhIHBhaXIgYXJlIHdyaXR0ZW4gaW4KKwk8YmFzZS1uYW1lPi08U0hBLTE+LntwYWNrLGlkeH0gZmlsZXMuICA8U0hBLTE+IGlzIGEgaGFzaAorCWJhc2VkIG9uIHRoZSBwYWNrIGNvbnRlbnQgYW5kIGlzIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkCisJb3V0cHV0IG9mIHRoZSBjb21tYW5kLgorCistLXN0ZG91dDo6CisJV3JpdGUgdGhlIHBhY2sgY29udGVudHMgKHdoYXQgd291bGQgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8KKwkucGFjayBmaWxlKSBvdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworLS1yZXZzOjoKKwlSZWFkIHRoZSByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIGluc3RlYWQgb2YKKwlpbmRpdmlkdWFsIG9iamVjdCBuYW1lcy4gIFRoZSByZXZpc2lvbiBhcmd1bWVudHMgYXJlIHByb2Nlc3NlZAorCXRoZSBzYW1lIHdheSBhcyAnZ2l0IHJldi1saXN0JyB3aXRoIHRoZSBgLS1vYmplY3RzYCBmbGFnCisJdXNlcyBpdHMgYGNvbW1pdGAgYXJndW1lbnRzIHRvIGJ1aWxkIHRoZSBsaXN0IG9mIG9iamVjdHMgaXQKKwlvdXRwdXRzLiAgVGhlIG9iamVjdHMgb24gdGhlIHJlc3VsdGluZyBsaXN0IGFyZSBwYWNrZWQuCisJQmVzaWRlcyByZXZpc2lvbnMsIGAtLW5vdGAgb3IgYC0tc2hhbGxvdyA8U0hBLTE+YCBsaW5lcyBhcmUKKwlhbHNvIGFjY2VwdGVkLgorCistLXVucGFja2VkOjoKKwlUaGlzIGltcGxpZXMgYC0tcmV2c2AuICBXaGVuIHByb2Nlc3NpbmcgdGhlIGxpc3Qgb2YKKwlyZXZpc2lvbiBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgbGltaXQKKwl0aGUgb2JqZWN0cyBwYWNrZWQgdG8gdGhvc2UgdGhhdCBhcmUgbm90IGFscmVhZHkgcGFja2VkLgorCistLWFsbDo6CisJVGhpcyBpbXBsaWVzIGAtLXJldnNgLiAgSW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgb2YKKwlyZXZpc2lvbiBhcmd1bWVudHMgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgcHJldGVuZAorCWFzIGlmIGFsbCByZWZzIHVuZGVyIGByZWZzL2AgYXJlIHNwZWNpZmllZCB0byBiZQorCWluY2x1ZGVkLgorCistLWluY2x1ZGUtdGFnOjoKKwlJbmNsdWRlIHVuYXNrZWQtZm9yIGFubm90YXRlZCB0YWdzIGlmIHRoZSBvYmplY3QgdGhleQorCXJlZmVyZW5jZSB3YXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrZmlsZS4gIFRoaXMKKwljYW4gYmUgdXNlZnVsIHRvIHNlbmQgbmV3IHRhZ3MgdG8gbmF0aXZlIEdpdCBjbGllbnRzLgorCistLXdpbmRvdz08bj46OgorLS1kZXB0aD08bj46OgorCVRoZXNlIHR3byBvcHRpb25zIGFmZmVjdCBob3cgdGhlIG9iamVjdHMgY29udGFpbmVkIGluCisJdGhlIHBhY2sgYXJlIHN0b3JlZCB1c2luZyBkZWx0YSBjb21wcmVzc2lvbi4gIFRoZQorCW9iamVjdHMgYXJlIGZpcnN0IGludGVybmFsbHkgc29ydGVkIGJ5IHR5cGUsIHNpemUgYW5kCisJb3B0aW9uYWxseSBuYW1lcyBhbmQgY29tcGFyZWQgYWdhaW5zdCB0aGUgb3RoZXIgb2JqZWN0cworCXdpdGhpbiAtLXdpbmRvdyB0byBzZWUgaWYgdXNpbmcgZGVsdGEgY29tcHJlc3Npb24gc2F2ZXMKKwlzcGFjZS4gIC0tZGVwdGggbGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoOyBtYWtpbmcKKwlpdCB0b28gZGVlcCBhZmZlY3RzIHRoZSBwZXJmb3JtYW5jZSBvbiB0aGUgdW5wYWNrZXIKKwlzaWRlLCBiZWNhdXNlIGRlbHRhIGRhdGEgbmVlZHMgdG8gYmUgYXBwbGllZCB0aGF0IG1hbnkKKwl0aW1lcyB0byBnZXQgdG8gdGhlIG5lY2Vzc2FyeSBvYmplY3QuCisrCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgLS13aW5kb3cgaXMgMTAgYW5kIC0tZGVwdGggaXMgNTAuIFRoZSBtYXhpbXVtCitkZXB0aCBpcyA0MDk1LgorCistLXdpbmRvdy1tZW1vcnk9PG4+OjoKKwlUaGlzIG9wdGlvbiBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGxpbWl0IG9uIHRvcCBvZiBgLS13aW5kb3dgOworCXRoZSB3aW5kb3cgc2l6ZSB3aWxsIGR5bmFtaWNhbGx5IHNjYWxlIGRvd24gc28gYXMgdG8gbm90IHRha2UKKwl1cCBtb3JlIHRoYW4gJzxuPicgYnl0ZXMgaW4gbWVtb3J5LiAgVGhpcyBpcyB1c2VmdWwgaW4KKwlyZXBvc2l0b3JpZXMgd2l0aCBhIG1peCBvZiBsYXJnZSBhbmQgc21hbGwgb2JqZWN0cyB0byBub3QgcnVuCisJb3V0IG9mIG1lbW9yeSB3aXRoIGEgbGFyZ2Ugd2luZG93LCBidXQgc3RpbGwgYmUgYWJsZSB0byB0YWtlCisJYWR2YW50YWdlIG9mIHRoZSBsYXJnZSB3aW5kb3cgZm9yIHRoZSBzbWFsbGVyIG9iamVjdHMuICBUaGUKKwlzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoICJrIiwgIm0iLCBvciAiZyIuCisJYC0td2luZG93LW1lbW9yeT0wYCBtYWtlcyBtZW1vcnkgdXNhZ2UgdW5saW1pdGVkLiAgVGhlIGRlZmF1bHQKKwlpcyB0YWtlbiBmcm9tIHRoZSBgcGFjay53aW5kb3dNZW1vcnlgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKy0tbWF4LXBhY2stc2l6ZT08bj46OgorCUluIHVudXN1YWwgc2NlbmFyaW9zLCB5b3UgbWF5IG5vdCBiZSBhYmxlIHRvIGNyZWF0ZSBmaWxlcworCWxhcmdlciB0aGFuIGEgY2VydGFpbiBzaXplIG9uIHlvdXIgZmlsZXN5c3RlbSwgYW5kIHRoaXMgb3B0aW9uCisJY2FuIGJlIHVzZWQgdG8gdGVsbCB0aGUgY29tbWFuZCB0byBzcGxpdCB0aGUgb3V0cHV0IHBhY2tmaWxlCisJaW50byBtdWx0aXBsZSBpbmRlcGVuZGVudCBwYWNrZmlsZXMsIGVhY2ggbm90IGxhcmdlciB0aGFuIHRoZQorCWdpdmVuIHNpemUuIFRoZSBzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoCisJImsiLCAibSIsIG9yICJnIi4gVGhlIG1pbmltdW0gc2l6ZSBhbGxvd2VkIGlzIGxpbWl0ZWQgdG8gMSBNaUIuCisJVGhpcyBvcHRpb24KKwlwcmV2ZW50cyB0aGUgY3JlYXRpb24gb2YgYSBiaXRtYXAgaW5kZXguCisJVGhlIGRlZmF1bHQgaXMgdW5saW1pdGVkLCB1bmxlc3MgdGhlIGNvbmZpZyB2YXJpYWJsZQorCWBwYWNrLnBhY2tTaXplTGltaXRgIGlzIHNldC4KKworLS1ob25vci1wYWNrLWtlZXA6OgorCVRoaXMgZmxhZyBjYXVzZXMgYW4gb2JqZWN0IGFscmVhZHkgaW4gYSBsb2NhbCBwYWNrIHRoYXQKKwloYXMgYSAua2VlcCBmaWxlIHRvIGJlIGlnbm9yZWQsIGV2ZW4gaWYgaXQgd291bGQgaGF2ZQorCW90aGVyd2lzZSBiZWVuIHBhY2tlZC4KKworLS1rZWVwLXBhY2s9PHBhY2stbmFtZT46OgorCVRoaXMgZmxhZyBjYXVzZXMgYW4gb2JqZWN0IGFscmVhZHkgaW4gdGhlIGdpdmVuIHBhY2sgdG8gYmUKKwlpZ25vcmVkLCBldmVuIGlmIGl0IHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGJlZW4KKwlwYWNrZWQuIGA8cGFjay1uYW1lPmAgaXMgdGhlIHBhY2sgZmlsZSBuYW1lIHdpdGhvdXQKKwlsZWFkaW5nIGRpcmVjdG9yeSAoZS5nLiBgcGFjay0xMjMucGFja2ApLiBUaGUgb3B0aW9uIGNvdWxkIGJlCisJc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIHRvIGtlZXAgbXVsdGlwbGUgcGFja3MuCisKKy0taW5jcmVtZW50YWw6OgorCVRoaXMgZmxhZyBjYXVzZXMgYW4gb2JqZWN0IGFscmVhZHkgaW4gYSBwYWNrIHRvIGJlIGlnbm9yZWQKKwlldmVuIGlmIGl0IHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGJlZW4gcGFja2VkLgorCistLWxvY2FsOjoKKwlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCB0aGF0IGlzIGJvcnJvd2VkIGZyb20gYW4gYWx0ZXJuYXRlCisJb2JqZWN0IHN0b3JlIHRvIGJlIGlnbm9yZWQgZXZlbiBpZiBpdCB3b3VsZCBoYXZlIG90aGVyd2lzZSBiZWVuCisJcGFja2VkLgorCistLW5vbi1lbXB0eTo6CisgICAgICAgIE9ubHkgY3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgaWYgaXQgd291bGQgY29udGFpbiBhdAorICAgICAgICBsZWFzdCBvbmUgb2JqZWN0LgorCistLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYKKwl0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLWFsbC1wcm9ncmVzczo6CisJV2hlbiAtLXN0ZG91dCBpcyBzcGVjaWZpZWQgdGhlbiBwcm9ncmVzcyByZXBvcnQgaXMKKwlkaXNwbGF5ZWQgZHVyaW5nIHRoZSBvYmplY3QgY291bnQgYW5kIGNvbXByZXNzaW9uIHBoYXNlcworCWJ1dCBpbmhpYml0ZWQgZHVyaW5nIHRoZSB3cml0ZS1vdXQgcGhhc2UuIFRoZSByZWFzb24gaXMKKwl0aGF0IGluIHNvbWUgY2FzZXMgdGhlIG91dHB1dCBzdHJlYW0gaXMgZGlyZWN0bHkgbGlua2VkCisJdG8gYW5vdGhlciBjb21tYW5kIHdoaWNoIG1heSB3aXNoIHRvIGRpc3BsYXkgcHJvZ3Jlc3MKKwlzdGF0dXMgb2YgaXRzIG93biBhcyBpdCBwcm9jZXNzZXMgaW5jb21pbmcgcGFjayBkYXRhLgorCVRoaXMgZmxhZyBpcyBsaWtlIC0tcHJvZ3Jlc3MgZXhjZXB0IHRoYXQgaXQgZm9yY2VzIHByb2dyZXNzCisJcmVwb3J0IGZvciB0aGUgd3JpdGUtb3V0IHBoYXNlIGFzIHdlbGwgZXZlbiBpZiAtLXN0ZG91dCBpcworCXVzZWQuCisKKy0tYWxsLXByb2dyZXNzLWltcGxpZWQ6OgorCVRoaXMgaXMgdXNlZCB0byBpbXBseSAtLWFsbC1wcm9ncmVzcyB3aGVuZXZlciBwcm9ncmVzcyBkaXNwbGF5CisJaXMgYWN0aXZhdGVkLiAgVW5saWtlIC0tYWxsLXByb2dyZXNzIHRoaXMgZmxhZyBkb2Vzbid0IGFjdHVhbGx5CisJZm9yY2UgYW55IHByb2dyZXNzIGRpc3BsYXkgYnkgaXRzZWxmLgorCistcTo6CisJVGhpcyBmbGFnIG1ha2VzIHRoZSBjb21tYW5kIG5vdCB0byByZXBvcnQgaXRzIHByb2dyZXNzCisJb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KKworLS1uby1yZXVzZS1kZWx0YTo6CisJV2hlbiBjcmVhdGluZyBhIHBhY2tlZCBhcmNoaXZlIGluIGEgcmVwb3NpdG9yeSB0aGF0CisJaGFzIGV4aXN0aW5nIHBhY2tzLCB0aGUgY29tbWFuZCByZXVzZXMgZXhpc3RpbmcgZGVsdGFzLgorCVRoaXMgc29tZXRpbWVzIHJlc3VsdHMgaW4gYSBzbGlnaHRseSBzdWJvcHRpbWFsIHBhY2suCisJVGhpcyBmbGFnIHRlbGxzIHRoZSBjb21tYW5kIG5vdCB0byByZXVzZSBleGlzdGluZyBkZWx0YXMKKwlidXQgY29tcHV0ZSB0aGVtIGZyb20gc2NyYXRjaC4KKworLS1uby1yZXVzZS1vYmplY3Q6OgorCVRoaXMgZmxhZyB0ZWxscyB0aGUgY29tbWFuZCBub3QgdG8gcmV1c2UgZXhpc3Rpbmcgb2JqZWN0IGRhdGEgYXQgYWxsLAorCWluY2x1ZGluZyBub24gZGVsdGlmaWVkIG9iamVjdCwgZm9yY2luZyByZWNvbXByZXNzaW9uIG9mIGV2ZXJ5dGhpbmcuCisJVGhpcyBpbXBsaWVzIC0tbm8tcmV1c2UtZGVsdGEuIFVzZWZ1bCBvbmx5IGluIHRoZSBvYnNjdXJlIGNhc2Ugd2hlcmUKKwl3aG9sZXNhbGUgZW5mb3JjZW1lbnQgb2YgYSBkaWZmZXJlbnQgY29tcHJlc3Npb24gbGV2ZWwgb24gdGhlCisJcGFja2VkIGRhdGEgaXMgZGVzaXJlZC4KKworLS1jb21wcmVzc2lvbj08bj46OgorCVNwZWNpZmllcyBjb21wcmVzc2lvbiBsZXZlbCBmb3IgbmV3bHktY29tcHJlc3NlZCBkYXRhIGluIHRoZQorCWdlbmVyYXRlZCBwYWNrLiAgSWYgbm90IHNwZWNpZmllZCwgIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgaXMKKwlkZXRlcm1pbmVkIGZpcnN0IGJ5IHBhY2suY29tcHJlc3Npb24sICB0aGVuIGJ5IGNvcmUuY29tcHJlc3Npb24sCisJYW5kIGRlZmF1bHRzIHRvIC0xLCAgdGhlIHpsaWIgZGVmYXVsdCwgIGlmIG5laXRoZXIgaXMgc2V0LgorCUFkZCAtLW5vLXJldXNlLW9iamVjdCBpZiB5b3Ugd2FudCB0byBmb3JjZSBhIHVuaWZvcm0gY29tcHJlc3Npb24KKwlsZXZlbCBvbiBhbGwgZGF0YSBubyBtYXR0ZXIgdGhlIHNvdXJjZS4KKworLS1zcGFyc2U6OgorCVVzZSB0aGUgInNwYXJzZSIgYWxnb3JpdGhtIHRvIGRldGVybWluZSB3aGljaCBvYmplY3RzIHRvIGluY2x1ZGUgaW4KKwl0aGUgcGFjaywgd2hlbiBjb21iaW5lZCB3aXRoIHRoZSAiLS1yZXZzIiBvcHRpb24uIFRoaXMgYWxnb3JpdGhtCisJb25seSB3YWxrcyB0cmVlcyB0aGF0IGFwcGVhciBpbiBwYXRocyB0aGF0IGludHJvZHVjZSBuZXcgb2JqZWN0cy4KKwlUaGlzIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJlbmVmaXRzIHdoZW4gY29tcHV0aW5nCisJYSBwYWNrIHRvIHNlbmQgYSBzbWFsbCBjaGFuZ2UuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgZXh0cmEKKwlvYmplY3RzIGFyZSBhZGRlZCB0byB0aGUgcGFjay1maWxlIGlmIHRoZSBpbmNsdWRlZCBjb21taXRzIGNvbnRhaW4KKwljZXJ0YWluIHR5cGVzIG9mIGRpcmVjdCByZW5hbWVzLgorCistLXRoaW46OgorCUNyZWF0ZSBhICJ0aGluIiBwYWNrIGJ5IG9taXR0aW5nIHRoZSBjb21tb24gb2JqZWN0cyBiZXR3ZWVuIGEKKwlzZW5kZXIgYW5kIGEgcmVjZWl2ZXIgaW4gb3JkZXIgdG8gcmVkdWNlIG5ldHdvcmsgdHJhbnNmZXIuIFRoaXMKKwlvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpbiBjb25qdW5jdGlvbiB3aXRoIC0tc3Rkb3V0LgorKworTm90ZTogQSB0aGluIHBhY2sgdmlvbGF0ZXMgdGhlIHBhY2tlZCBhcmNoaXZlIGZvcm1hdCBieSBvbWl0dGluZworcmVxdWlyZWQgb2JqZWN0cyBhbmQgaXMgdGh1cyB1bnVzYWJsZSBieSBHaXQgd2l0aG91dCBtYWtpbmcgaXQKK3NlbGYtY29udGFpbmVkLiBVc2UgYGdpdCBpbmRleC1wYWNrIC0tZml4LXRoaW5gCisoc2VlIGxpbmtnaXQ6Z2l0LWluZGV4LXBhY2tbMV0pIHRvIHJlc3RvcmUgdGhlIHNlbGYtY29udGFpbmVkIHByb3BlcnR5LgorCistLXNoYWxsb3c6OgorCU9wdGltaXplIGEgcGFjayB0aGF0IHdpbGwgYmUgcHJvdmlkZWQgdG8gYSBjbGllbnQgd2l0aCBhIHNoYWxsb3cKKwlyZXBvc2l0b3J5LiAgVGhpcyBvcHRpb24sIGNvbWJpbmVkIHdpdGggLS10aGluLCBjYW4gcmVzdWx0IGluIGEKKwlzbWFsbGVyIHBhY2sgYXQgdGhlIGNvc3Qgb2Ygc3BlZWQuCisKKy0tZGVsdGEtYmFzZS1vZmZzZXQ6OgorCUEgcGFja2VkIGFyY2hpdmUgY2FuIGV4cHJlc3MgdGhlIGJhc2Ugb2JqZWN0IG9mIGEgZGVsdGEgYXMKKwllaXRoZXIgYSAyMC1ieXRlIG9iamVjdCBuYW1lIG9yIGFzIGFuIG9mZnNldCBpbiB0aGUKKwlzdHJlYW0sIGJ1dCBhbmNpZW50IHZlcnNpb25zIG9mIEdpdCBkb24ndCB1bmRlcnN0YW5kIHRoZQorCWxhdHRlci4gIEJ5IGRlZmF1bHQsICdnaXQgcGFjay1vYmplY3RzJyBvbmx5IHVzZXMgdGhlCisJZm9ybWVyIGZvcm1hdCBmb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkuICBUaGlzIG9wdGlvbgorCWFsbG93cyB0aGUgY29tbWFuZCB0byB1c2UgdGhlIGxhdHRlciBmb3JtYXQgZm9yCisJY29tcGFjdG5lc3MuICBEZXBlbmRpbmcgb24gdGhlIGF2ZXJhZ2UgZGVsdGEgY2hhaW4KKwlsZW5ndGgsIHRoaXMgb3B0aW9uIHR5cGljYWxseSBzaHJpbmtzIHRoZSByZXN1bHRpbmcKKwlwYWNrZmlsZSBieSAzLTUgcGVyLWNlbnQuCisrCitOb3RlOiBQb3JjZWxhaW4gY29tbWFuZHMgc3VjaCBhcyBgZ2l0IGdjYCAoc2VlIGxpbmtnaXQ6Z2l0LWdjWzFdKSwKK2BnaXQgcmVwYWNrYCAoc2VlIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSkgcGFzcyB0aGlzIG9wdGlvbiBieSBkZWZhdWx0CitpbiBtb2Rlcm4gR2l0IHdoZW4gdGhleSBwdXQgb2JqZWN0cyBpbiB5b3VyIHJlcG9zaXRvcnkgaW50byBwYWNrIGZpbGVzLgorU28gZG9lcyBgZ2l0IGJ1bmRsZWAgKHNlZSBsaW5rZ2l0OmdpdC1idW5kbGVbMV0pIHdoZW4gaXQgY3JlYXRlcyBhIGJ1bmRsZS4KKworLS10aHJlYWRzPTxuPjo6CisJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBzcGF3biB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdAorCWRlbHRhIG1hdGNoZXMuICBUaGlzIHJlcXVpcmVzIHRoYXQgcGFjay1vYmplY3RzIGJlIGNvbXBpbGVkIHdpdGgKKwlwdGhyZWFkcyBvdGhlcndpc2UgdGhpcyBvcHRpb24gaXMgaWdub3JlZCB3aXRoIGEgd2FybmluZy4KKwlUaGlzIGlzIG1lYW50IHRvIHJlZHVjZSBwYWNraW5nIHRpbWUgb24gbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMuCisJVGhlIHJlcXVpcmVkIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSBkZWx0YSBzZWFyY2ggd2luZG93IGlzCisJaG93ZXZlciBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YgdGhyZWFkcy4KKwlTcGVjaWZ5aW5nIDAgd2lsbCBjYXVzZSBHaXQgdG8gYXV0by1kZXRlY3QgdGhlIG51bWJlciBvZiBDUFUncworCWFuZCBzZXQgdGhlIG51bWJlciBvZiB0aHJlYWRzIGFjY29yZGluZ2x5LgorCistLWluZGV4LXZlcnNpb249PHZlcnNpb24+Wyw8b2Zmc2V0Pl06OgorCVRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgdGVzdCBzdWl0ZSBvbmx5LiBJdCBhbGxvd3MKKwl0byBmb3JjZSB0aGUgdmVyc2lvbiBmb3IgdGhlIGdlbmVyYXRlZCBwYWNrIGluZGV4LCBhbmQgdG8gZm9yY2UKKwk2NC1iaXQgaW5kZXggZW50cmllcyBvbiBvYmplY3RzIGxvY2F0ZWQgYWJvdmUgdGhlIGdpdmVuIG9mZnNldC4KKworLS1rZWVwLXRydWUtcGFyZW50czo6CisJV2l0aCB0aGlzIG9wdGlvbiwgcGFyZW50cyB0aGF0IGFyZSBoaWRkZW4gYnkgZ3JhZnRzIGFyZSBwYWNrZWQKKwluZXZlcnRoZWxlc3MuCisKKy0tZmlsdGVyPTxmaWx0ZXItc3BlYz46OgorCVJlcXVpcmVzIGAtLXN0ZG91dGAuICBPbWl0cyBjZXJ0YWluIG9iamVjdHMgKHVzdWFsbHkgYmxvYnMpIGZyb20KKwl0aGUgcmVzdWx0aW5nIHBhY2tmaWxlLiAgU2VlIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdIGZvciB2YWxpZAorCWA8ZmlsdGVyLXNwZWM+YCBmb3Jtcy4KKworLS1uby1maWx0ZXI6OgorCVR1cm5zIG9mZiBhbnkgcHJldmlvdXMgYC0tZmlsdGVyPWAgYXJndW1lbnQuCisKKy0tbWlzc2luZz08bWlzc2luZy1hY3Rpb24+OjoKKwlBIGRlYnVnIG9wdGlvbiB0byBoZWxwIHdpdGggZnV0dXJlICJwYXJ0aWFsIGNsb25lIiBkZXZlbG9wbWVudC4KKwlUaGlzIG9wdGlvbiBzcGVjaWZpZXMgaG93IG1pc3Npbmcgb2JqZWN0cyBhcmUgaGFuZGxlZC4KKysKK1RoZSBmb3JtICctLW1pc3Npbmc9ZXJyb3InIHJlcXVlc3RzIHRoYXQgcGFjay1vYmplY3RzIHN0b3Agd2l0aCBhbiBlcnJvciBpZgorYSBtaXNzaW5nIG9iamVjdCBpcyBlbmNvdW50ZXJlZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgYWN0aW9uLgorKworVGhlIGZvcm0gJy0tbWlzc2luZz1hbGxvdy1hbnknIHdpbGwgYWxsb3cgb2JqZWN0IHRyYXZlcnNhbCB0byBjb250aW51ZQoraWYgYSBtaXNzaW5nIG9iamVjdCBpcyBlbmNvdW50ZXJlZC4gIE1pc3Npbmcgb2JqZWN0cyB3aWxsIHNpbGVudGx5IGJlCitvbWl0dGVkIGZyb20gdGhlIHJlc3VsdHMuCisrCitUaGUgZm9ybSAnLS1taXNzaW5nPWFsbG93LXByb21pc29yJyBpcyBsaWtlICdhbGxvdy1hbnknLCBidXQgd2lsbCBvbmx5CithbGxvdyBvYmplY3QgdHJhdmVyc2FsIHRvIGNvbnRpbnVlIGZvciBFWFBFQ1RFRCBwcm9taXNvciBtaXNzaW5nIG9iamVjdHMuCitVbmV4cGVjdGVkIG1pc3Npbmcgb2JqZWN0IHdpbGwgcmFpc2UgYW4gZXJyb3IuCisKKy0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzOjoKKwlPbWl0IG9iamVjdHMgdGhhdCBhcmUga25vd24gdG8gYmUgaW4gdGhlIHByb21pc29yIHJlbW90ZS4gIChUaGlzCisJb3B0aW9uIGhhcyB0aGUgcHVycG9zZSBvZiBvcGVyYXRpbmcgb25seSBvbiBsb2NhbGx5IGNyZWF0ZWQgb2JqZWN0cywKKwlzbyB0aGF0IHdoZW4gd2UgcmVwYWNrLCB3ZSBzdGlsbCBtYWludGFpbiBhIGRpc3RpbmN0aW9uIGJldHdlZW4KKwlsb2NhbGx5IGNyZWF0ZWQgb2JqZWN0cyBbd2l0aG91dCAucHJvbWlzb3JdIGFuZCBvYmplY3RzIGZyb20gdGhlCisJcHJvbWlzb3IgcmVtb3RlIFt3aXRoIC5wcm9taXNvcl0uKSAgVGhpcyBpcyB1c2VkIHdpdGggcGFydGlhbCBjbG9uZS4KKworLS1rZWVwLXVucmVhY2hhYmxlOjoKKwlPYmplY3RzIHVucmVhY2hhYmxlIGZyb20gdGhlIHJlZnMgaW4gcGFja3MgbmFtZWQgd2l0aAorCS0tdW5wYWNrZWQ9IG9wdGlvbiBhcmUgYWRkZWQgdG8gdGhlIHJlc3VsdGluZyBwYWNrLCBpbgorCWFkZGl0aW9uIHRvIHRoZSByZWFjaGFibGUgb2JqZWN0cyB0aGF0IGFyZSBub3QgaW4gcGFja3MgbWFya2VkCisJd2l0aCAqLmtlZXAgZmlsZXMuIFRoaXMgaW1wbGllcyBgLS1yZXZzYC4KKworLS1wYWNrLWxvb3NlLXVucmVhY2hhYmxlOjoKKwlQYWNrIHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHMgKGFuZCB0aGVpciBsb29zZSBjb3VudGVycGFydHMKKwlyZW1vdmVkKS4gVGhpcyBpbXBsaWVzIGAtLXJldnNgLgorCistLXVucGFjay11bnJlYWNoYWJsZTo6CisJS2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIGluIGxvb3NlIGZvcm0uIFRoaXMgaW1wbGllcyBgLS1yZXZzYC4KKworLS1kZWx0YS1pc2xhbmRzOjoKKwlSZXN0cmljdCBkZWx0YSBtYXRjaGVzIGJhc2VkIG9uICJpc2xhbmRzIi4gU2VlIERFTFRBIElTTEFORFMKKwliZWxvdy4KKworCitERUxUQSBJU0xBTkRTCistLS0tLS0tLS0tLS0tCisKK1doZW4gcG9zc2libGUsIGBwYWNrLW9iamVjdHNgIHRyaWVzIHRvIHJldXNlIGV4aXN0aW5nIG9uLWRpc2sgZGVsdGFzIHRvCithdm9pZCBoYXZpbmcgdG8gc2VhcmNoIGZvciBuZXcgb25lcyBvbiB0aGUgZmx5LiBUaGlzIGlzIGFuIGltcG9ydGFudAorb3B0aW1pemF0aW9uIGZvciBzZXJ2aW5nIGZldGNoZXMsIGJlY2F1c2UgaXQgbWVhbnMgdGhlIHNlcnZlciBjYW4gYXZvaWQKK2luZmxhdGluZyBtb3N0IG9iamVjdHMgYXQgYWxsIGFuZCBqdXN0IHNlbmQgdGhlIGJ5dGVzIGRpcmVjdGx5IGZyb20KK2Rpc2suIFRoaXMgb3B0aW1pemF0aW9uIGNhbid0IHdvcmsgd2hlbiBhbiBvYmplY3QgaXMgc3RvcmVkIGFzIGEgZGVsdGEKK2FnYWluc3QgYSBiYXNlIHdoaWNoIHRoZSByZWNlaXZlciBkb2VzIG5vdCBoYXZlIChhbmQgd2hpY2ggd2UgYXJlIG5vdAorYWxyZWFkeSBzZW5kaW5nKS4gSW4gdGhhdCBjYXNlIHRoZSBzZXJ2ZXIgImJyZWFrcyIgdGhlIGRlbHRhIGFuZCBoYXMgdG8KK2ZpbmQgYSBuZXcgb25lLCB3aGljaCBoYXMgYSBoaWdoIENQVSBjb3N0LiBUaGVyZWZvcmUgaXQncyBpbXBvcnRhbnQgZm9yCitwZXJmb3JtYW5jZSB0aGF0IHRoZSBzZXQgb2Ygb2JqZWN0cyBpbiBvbi1kaXNrIGRlbHRhIHJlbGF0aW9uc2hpcHMgbWF0Y2gKK3doYXQgYSBjbGllbnQgd291bGQgZmV0Y2guCisKK0luIGEgbm9ybWFsIHJlcG9zaXRvcnksIHRoaXMgdGVuZHMgdG8gd29yayBhdXRvbWF0aWNhbGx5LiBUaGUgb2JqZWN0cworYXJlIG1vc3RseSByZWFjaGFibGUgZnJvbSB0aGUgYnJhbmNoZXMgYW5kIHRhZ3MsIGFuZCB0aGF0J3Mgd2hhdCBjbGllbnRzCitmZXRjaC4gQW55IGRlbHRhcyB3ZSBmaW5kIG9uIHRoZSBzZXJ2ZXIgYXJlIGxpa2VseSB0byBiZSBiZXR3ZWVuIG9iamVjdHMKK3RoZSBjbGllbnQgaGFzIG9yIHdpbGwgaGF2ZS4KKworQnV0IGluIHNvbWUgcmVwb3NpdG9yeSBzZXR1cHMsIHlvdSBtYXkgaGF2ZSBzZXZlcmFsIHJlbGF0ZWQgYnV0IHNlcGFyYXRlCitncm91cHMgb2YgcmVmIHRpcHMsIHdpdGggY2xpZW50cyB0ZW5kaW5nIHRvIGZldGNoIHRob3NlIGdyb3VwcworaW5kZXBlbmRlbnRseS4gRm9yIGV4YW1wbGUsIGltYWdpbmUgdGhhdCB5b3UgYXJlIGhvc3Rpbmcgc2V2ZXJhbCAiZm9ya3MiCitvZiBhIHJlcG9zaXRvcnkgaW4gYSBzaW5nbGUgc2hhcmVkIG9iamVjdCBzdG9yZSwgYW5kIGxldHRpbmcgY2xpZW50cwordmlldyB0aGVtIGFzIHNlcGFyYXRlIHJlcG9zaXRvcmllcyB0aHJvdWdoIGBHSVRfTkFNRVNQQUNFYCBvciBzZXBhcmF0ZQorcmVwb3MgdXNpbmcgdGhlIGFsdGVybmF0ZXMgbWVjaGFuaXNtLiBBIG5haXZlIHJlcGFjayBtYXkgZmluZCB0aGF0IHRoZQorb3B0aW1hbCBkZWx0YSBmb3IgYW4gb2JqZWN0IGlzIGFnYWluc3QgYSBiYXNlIHRoYXQgaXMgb25seSBmb3VuZCBpbgorYW5vdGhlciBmb3JrLiBCdXQgd2hlbiBhIGNsaWVudCBmZXRjaGVzLCB0aGV5IHdpbGwgbm90IGhhdmUgdGhlIGJhc2UKK29iamVjdCwgYW5kIHdlJ2xsIGhhdmUgdG8gZmluZCBhIG5ldyBkZWx0YSBvbiB0aGUgZmx5LgorCitBIHNpbWlsYXIgc2l0dWF0aW9uIG1heSBleGlzdCBpZiB5b3UgaGF2ZSBtYW55IHJlZnMgb3V0c2lkZSBvZgorYHJlZnMvaGVhZHMvYCBhbmQgYHJlZnMvdGFncy9gIHRoYXQgcG9pbnQgdG8gcmVsYXRlZCBvYmplY3RzIChlLmcuLAorYHJlZnMvcHVsbGAgb3IgYHJlZnMvY2hhbmdlc2AgdXNlZCBieSBzb21lIGhvc3RpbmcgcHJvdmlkZXJzKS4gQnkKK2RlZmF1bHQsIGNsaWVudHMgZmV0Y2ggb25seSBoZWFkcyBhbmQgdGFncywgYW5kIGRlbHRhcyBhZ2FpbnN0IG9iamVjdHMKK2ZvdW5kIG9ubHkgaW4gdGhvc2Ugb3RoZXIgZ3JvdXBzIGNhbm5vdCBiZSBzZW50IGFzLWlzLgorCitEZWx0YSBpc2xhbmRzIHNvbHZlIHRoaXMgcHJvYmxlbSBieSBhbGxvd2luZyB5b3UgdG8gZ3JvdXAgeW91ciByZWZzIGludG8KK2Rpc3RpbmN0ICJpc2xhbmRzIi4gUGFjay1vYmplY3RzIGNvbXB1dGVzIHdoaWNoIG9iamVjdHMgYXJlIHJlYWNoYWJsZQorZnJvbSB3aGljaCBpc2xhbmRzLCBhbmQgcmVmdXNlcyB0byBtYWtlIGEgZGVsdGEgZnJvbSBhbiBvYmplY3QgYEFgCithZ2FpbnN0IGEgYmFzZSB3aGljaCBpcyBub3QgcHJlc2VudCBpbiBhbGwgb2YgYEFgJ3MgaXNsYW5kcy4gVGhpcworcmVzdWx0cyBpbiBzbGlnaHRseSBsYXJnZXIgcGFja3MgKGJlY2F1c2Ugd2UgbWlzcyBzb21lIGRlbHRhCitvcHBvcnR1bml0aWVzKSwgYnV0IGd1YXJhbnRlZXMgdGhhdCBhIGZldGNoIG9mIG9uZSBpc2xhbmQgd2lsbCBub3QgaGF2ZQordG8gcmVjb21wdXRlIGRlbHRhcyBvbiB0aGUgZmx5IGR1ZSB0byBjcm9zc2luZyBpc2xhbmQgYm91bmRhcmllcy4KKworV2hlbiByZXBhY2tpbmcgd2l0aCBkZWx0YSBpc2xhbmRzIHRoZSBkZWx0YSB3aW5kb3cgdGVuZHMgdG8gZ2V0CitjbG9nZ2VkIHdpdGggY2FuZGlkYXRlcyB0aGF0IGFyZSBmb3JiaWRkZW4gYnkgdGhlIGNvbmZpZy4gUmVwYWNraW5nCit3aXRoIGEgYmlnIC0td2luZG93IGhlbHBzIChhbmQgZG9lc24ndCB0YWtlIGFzIGxvbmcgYXMgaXQgb3RoZXJ3aXNlCittaWdodCBiZWNhdXNlIHdlIGNhbiByZWplY3Qgc29tZSBvYmplY3QgcGFpcnMgYmFzZWQgb24gaXNsYW5kcyBiZWZvcmUKK2RvaW5nIGFueSBjb21wdXRhdGlvbiBvbiB0aGUgY29udGVudCkuCisKK0lzbGFuZHMgYXJlIGNvbmZpZ3VyZWQgdmlhIHRoZSBgcGFjay5pc2xhbmRgIG9wdGlvbiwgd2hpY2ggY2FuIGJlCitzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuIEVhY2ggdmFsdWUgaXMgYSBsZWZ0LWFuY2hvcmVkIHJlZ3VsYXIKK2V4cHJlc3Npb25zIG1hdGNoaW5nIHJlZm5hbWVzLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3BhY2tdCitpc2xhbmQgPSByZWZzL2hlYWRzLworaXNsYW5kID0gcmVmcy90YWdzLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitwdXRzIGhlYWRzIGFuZCB0YWdzIGludG8gYW4gaXNsYW5kICh3aG9zZSBuYW1lIGlzIHRoZSBlbXB0eSBzdHJpbmc7IHNlZQorYmVsb3cgZm9yIG1vcmUgb24gbmFtaW5nKS4gQW55IHJlZnMgd2hpY2ggZG8gbm90IG1hdGNoIHRob3NlIHJlZ3VsYXIKK2V4cHJlc3Npb25zIChlLmcuLCBgcmVmcy9wdWxsLzEyM2ApIGlzIG5vdCBpbiBhbnkgaXNsYW5kLiBBbnkgb2JqZWN0Cit3aGljaCBpcyByZWFjaGFibGUgb25seSBmcm9tIGByZWZzL3B1bGwvYCAoYnV0IG5vdCBoZWFkcyBvciB0YWdzKSBpcwordGhlcmVmb3JlIG5vdCBhIGNhbmRpZGF0ZSB0byBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgYHJlZnMvaGVhZHMvYC4KKworUmVmcyBhcmUgZ3JvdXBlZCBpbnRvIGlzbGFuZHMgYmFzZWQgb24gdGhlaXIgIm5hbWVzIiwgYW5kIHR3byByZWdleGVzCit0aGF0IHByb2R1Y2UgdGhlIHNhbWUgbmFtZSBhcmUgY29uc2lkZXJlZCB0byBiZSBpbiB0aGUgc2FtZQoraXNsYW5kLiBUaGUgbmFtZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlIHJlZ2V4ZXMgYnkgY29uY2F0ZW5hdGluZyBhbnkKK2NhcHR1cmUgZ3JvdXBzIGZyb20gdGhlIHJlZ2V4LCB3aXRoIGEgJy0nIGRhc2ggaW4gYmV0d2Vlbi4gKEFuZCBpZgordGhlcmUgYXJlIG5vIGNhcHR1cmUgZ3JvdXBzLCB0aGVuIHRoZSBuYW1lIGlzIHRoZSBlbXB0eSBzdHJpbmcsIGFzIGluCit0aGUgYWJvdmUgZXhhbXBsZS4pIFRoaXMgYWxsb3dzIHlvdSB0byBjcmVhdGUgYXJiaXRyYXJ5IG51bWJlcnMgb2YKK2lzbGFuZHMuIE9ubHkgdXAgdG8gMTQgc3VjaCBjYXB0dXJlIGdyb3VwcyBhcmUgc3VwcG9ydGVkIHRob3VnaC4KKworRm9yIGV4YW1wbGUsIGltYWdpbmUgeW91IHN0b3JlIHRoZSByZWZzIGZvciBlYWNoIGZvcmsgaW4KK2ByZWZzL3ZpcnR1YWwvSURgLCB3aGVyZSBgSURgIGlzIGEgbnVtZXJpYyBpZGVudGlmaWVyLiBZb3UgbWlnaHQgdGhlbgorY29uZmlndXJlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbcGFja10KK2lzbGFuZCA9IHJlZnMvdmlydHVhbC8oWzAtOV0rKS9oZWFkcy8KK2lzbGFuZCA9IHJlZnMvdmlydHVhbC8oWzAtOV0rKS90YWdzLworaXNsYW5kID0gcmVmcy92aXJ0dWFsLyhbMC05XSspLyhwdWxsKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhhdCBwdXRzIHRoZSBoZWFkcyBhbmQgdGFncyBmb3IgZWFjaCBmb3JrIGluIHRoZWlyIG93biBpc2xhbmQgKG5hbWVkCisiMTIzNCIgb3Igc2ltaWxhciksIGFuZCB0aGUgcHVsbCByZWZzIGZvciBlYWNoIGdvIGludG8gdGhlaXIgb3duCisiMTIzNC1wdWxsIi4KKworTm90ZSB0aGF0IHdlIHBpY2sgYSBzaW5nbGUgaXNsYW5kIGZvciBlYWNoIHJlZ2V4IHRvIGdvIGludG8sIHVzaW5nICJsYXN0CitvbmUgd2lucyIgb3JkZXJpbmcgKHdoaWNoIGFsbG93cyByZXBvLXNwZWNpZmljIGNvbmZpZyB0byB0YWtlIHByZWNlZGVuY2UKK292ZXIgdXNlci13aWRlIGNvbmZpZywgYW5kIHNvIGZvcnRoKS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXQorbGlua2dpdDpnaXQtcmVwYWNrWzFdCitsaW5rZ2l0OmdpdC1wcnVuZS1wYWNrZWRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZHVuZGFudC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZHVuZGFudC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4NjlkYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVkdW5kYW50LnR4dApAQCAtMCwwICsxLDUwIEBACitnaXQtcGFjay1yZWR1bmRhbnQoMSkKKz09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGFjay1yZWR1bmRhbnQgLSBGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHBhY2stcmVkdW5kYW50JyBbIC0tdmVyYm9zZSBdIFsgLS1hbHQtb2RiIF0gPCAtLWFsbCB8IC5wYWNrIGZpbGVuYW1lIC4uLiA+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBwcm9ncmFtIGNvbXB1dGVzIHdoaWNoIHBhY2tzIGluIHlvdXIgcmVwb3NpdG9yeQorYXJlIHJlZHVuZGFudC4gVGhlIG91dHB1dCBpcyBzdWl0YWJsZSBmb3IgcGlwaW5nIHRvCitgeGFyZ3Mgcm1gIGlmIHlvdSBhcmUgaW4gdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnkuCisKKydnaXQgcGFjay1yZWR1bmRhbnQnIGFjY2VwdHMgYSBsaXN0IG9mIG9iamVjdHMgb24gc3RhbmRhcmQgaW5wdXQuIEFueSBvYmplY3RzCitnaXZlbiB3aWxsIGJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB3aGljaCBwYWNrcyBhcmUgcmVxdWlyZWQuIFRoaXMgbWFrZXMgdGhlCitmb2xsb3dpbmcgY29tbWFuZCB1c2VmdWwgd2hlbiB3YW50aW5nIHRvIHJlbW92ZSBwYWNrcyB3aGljaCBjb250YWluIHVucmVhY2hhYmxlCitvYmplY3RzLgorCitnaXQgZnNjayAtLWZ1bGwgLS11bnJlYWNoYWJsZSB8IGN1dCAtZCAnICcgLWYzIHwgXAorZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsIHwgeGFyZ3Mgcm0KKworT1BUSU9OUworLS0tLS0tLQorCisKKy0tYWxsOjoKKwlQcm9jZXNzZXMgYWxsIHBhY2tzLiBBbnkgZmlsZW5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUgYXJlIGlnbm9yZWQuCisKKy0tYWx0LW9kYjo6CisJRG9uJ3QgcmVxdWlyZSBvYmplY3RzIHByZXNlbnQgaW4gcGFja3MgZnJvbSBhbHRlcm5hdGUgb2JqZWN0CisJZGlyZWN0b3JpZXMgdG8gYmUgcHJlc2VudCBpbiBsb2NhbCBwYWNrcy4KKworLS12ZXJib3NlOjoKKwlPdXRwdXRzIHNvbWUgc3RhdGlzdGljcyB0byBzdGRlcnIuIEhhcyBhIHNtYWxsIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdCitsaW5rZ2l0OmdpdC1yZXBhY2tbMV0KK2xpbmtnaXQ6Z2l0LXBydW5lLXBhY2tlZFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NDA4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0CkBAIC0wLDAgKzEsNzMgQEAKK2dpdC1wYWNrLXJlZnMoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBhY2stcmVmcyAtIFBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcGFjay1yZWZzJyBbLS1hbGxdIFstLW5vLXBydW5lXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVHJhZGl0aW9uYWxseSwgdGlwcyBvZiBicmFuY2hlcyBhbmQgdGFncyAoY29sbGVjdGl2ZWx5IGtub3duIGFzCisncmVmcycpIHdlcmUgc3RvcmVkIG9uZSBmaWxlIHBlciByZWYgaW4gYSAoc3ViKWRpcmVjdG9yeQordW5kZXIgYCRHSVRfRElSL3JlZnNgCitkaXJlY3RvcnkuICBXaGlsZSBtYW55IGJyYW5jaCB0aXBzIHRlbmQgdG8gYmUgdXBkYXRlZCBvZnRlbiwKK21vc3QgdGFncyBhbmQgc29tZSBicmFuY2ggdGlwcyBhcmUgbmV2ZXIgdXBkYXRlZC4gIFdoZW4gYQorcmVwb3NpdG9yeSBoYXMgaHVuZHJlZHMgb3IgdGhvdXNhbmRzIG9mIHRhZ3MsIHRoaXMKK29uZS1maWxlLXBlci1yZWYgZm9ybWF0IGJvdGggd2FzdGVzIHN0b3JhZ2UgYW5kIGh1cnRzCitwZXJmb3JtYW5jZS4KKworVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gc29sdmUgdGhlIHN0b3JhZ2UgYW5kIHBlcmZvcm1hbmNlCitwcm9ibGVtIGJ5IHN0b3JpbmcgdGhlIHJlZnMgaW4gYSBzaW5nbGUgZmlsZSwKK2AkR0lUX0RJUi9wYWNrZWQtcmVmc2AuICBXaGVuIGEgcmVmIGlzIG1pc3NpbmcgZnJvbSB0aGUKK3RyYWRpdGlvbmFsIGAkR0lUX0RJUi9yZWZzYCBkaXJlY3RvcnkgaGllcmFyY2h5LCBpdCBpcyBsb29rZWQKK3VwIGluIHRoaXMKK2ZpbGUgYW5kIHVzZWQgaWYgZm91bmQuCisKK1N1YnNlcXVlbnQgdXBkYXRlcyB0byBicmFuY2hlcyBhbHdheXMgY3JlYXRlIG5ldyBmaWxlcyB1bmRlcgorYCRHSVRfRElSL3JlZnNgIGRpcmVjdG9yeSBoaWVyYXJjaHkuCisKK0EgcmVjb21tZW5kZWQgcHJhY3RpY2UgdG8gZGVhbCB3aXRoIGEgcmVwb3NpdG9yeSB3aXRoIHRvbyBtYW55CityZWZzIGlzIHRvIHBhY2sgaXRzIHJlZnMgd2l0aCBgLS1hbGxgIG9uY2UsIGFuZAorb2NjYXNpb25hbGx5IHJ1biBgZ2l0IHBhY2stcmVmc2AuICBUYWdzIGFyZSBieQorZGVmaW5pdGlvbiBzdGF0aW9uYXJ5IGFuZCBhcmUgbm90IGV4cGVjdGVkIHRvIGNoYW5nZS4gIEJyYW5jaAoraGVhZHMgd2lsbCBiZSBwYWNrZWQgd2l0aCB0aGUgaW5pdGlhbCBgcGFjay1yZWZzIC0tYWxsYCwgYnV0Citvbmx5IHRoZSBjdXJyZW50bHkgYWN0aXZlIGJyYW5jaCBoZWFkcyB3aWxsIGJlY29tZSB1bnBhY2tlZCwKK2FuZCB0aGUgbmV4dCBgcGFjay1yZWZzYCAod2l0aG91dCBgLS1hbGxgKSB3aWxsIGxlYXZlIHRoZW0KK3VucGFja2VkLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1hbGw6OgorCitUaGUgY29tbWFuZCBieSBkZWZhdWx0IHBhY2tzIGFsbCB0YWdzIGFuZCByZWZzIHRoYXQgYXJlIGFscmVhZHkKK3BhY2tlZCwgYW5kIGxlYXZlcyBvdGhlciByZWZzCithbG9uZS4gIFRoaXMgaXMgYmVjYXVzZSBicmFuY2hlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgYWN0aXZlbHkKK2RldmVsb3BlZCBhbmQgcGFja2luZyB0aGVpciB0aXBzIGRvZXMgbm90IGhlbHAgcGVyZm9ybWFuY2UuCitUaGlzIG9wdGlvbiBjYXVzZXMgYnJhbmNoIHRpcHMgdG8gYmUgcGFja2VkIGFzIHdlbGwuICBVc2VmdWwgZm9yCithIHJlcG9zaXRvcnkgd2l0aCBtYW55IGJyYW5jaGVzIG9mIGhpc3RvcmljYWwgaW50ZXJlc3RzLgorCistLW5vLXBydW5lOjoKKworVGhlIGNvbW1hbmQgdXN1YWxseSByZW1vdmVzIGxvb3NlIHJlZnMgdW5kZXIgYCRHSVRfRElSL3JlZnNgCitoaWVyYXJjaHkgYWZ0ZXIgcGFja2luZyB0aGVtLiAgVGhpcyBvcHRpb24gdGVsbHMgaXQgbm90IHRvLgorCisKK0JVR1MKKy0tLS0KKworT2xkZXIgZG9jdW1lbnRhdGlvbiB3cml0dGVuIGJlZm9yZSB0aGUgcGFja2VkLXJlZnMgbWVjaGFuaXNtIHdhcworaW50cm9kdWNlZCBtYXkgc3RpbGwgc2F5IHRoaW5ncyBsaWtlICIuZ2l0L3JlZnMvaGVhZHMvPGJyYW5jaD4gZmlsZQorZXhpc3RzIiB3aGVuIGl0IG1lYW5zICJicmFuY2ggPGJyYW5jaD4gZXhpc3RzIi4KKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NWVhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0CkBAIC0wLDAgKzEsMjMgQEAKK2dpdC1wYXJzZS1yZW1vdGUoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBhcnNlLXJlbW90ZSAtIFJvdXRpbmVzIHRvIGhlbHAgcGFyc2luZyByZW1vdGUgcmVwb3NpdG9yeSBhY2Nlc3MgcGFyYW1ldGVycworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJy4gIiQoZ2l0IC0tZXhlYy1wYXRoKS9naXQtcGFyc2UtcmVtb3RlIicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHNjcmlwdCBpcyBpbmNsdWRlZCBpbiB2YXJpb3VzIHNjcmlwdHMgdG8gc3VwcGx5Cityb3V0aW5lcyB0byBwYXJzZSBmaWxlcyB1bmRlciAkR0lUX0RJUi9yZW1vdGVzLyBhbmQKKyRHSVRfRElSL2JyYW5jaGVzLyBhbmQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBhcmUgcmVsYXRlZAordG8gZmV0Y2hpbmcsIHB1bGxpbmcgYW5kIHB1c2hpbmcuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MmNhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKQEAgLTAsMCArMSw2MSBAQAorZ2l0LXBhdGNoLWlkKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBhdGNoLWlkIC0gQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2gKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHBhdGNoLWlkJyBbLS1zdGFibGUgfCAtLXVuc3RhYmxlXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWQgYSBwYXRjaCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBhbmQgY29tcHV0ZSB0aGUgcGF0Y2ggSUQgZm9yIGl0LgorCitBICJwYXRjaCBJRCIgaXMgbm90aGluZyBidXQgYSBzdW0gb2YgU0hBLTEgb2YgdGhlIGZpbGUgZGlmZnMgYXNzb2NpYXRlZCB3aXRoIGEKK3BhdGNoLCB3aXRoIHdoaXRlc3BhY2UgYW5kIGxpbmUgbnVtYmVycyBpZ25vcmVkLiAgQXMgc3VjaCwgaXQncyAicmVhc29uYWJseQorc3RhYmxlIiwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgYWxzbyByZWFzb25hYmx5IHVuaXF1ZSwgaS5lLiwgdHdvIHBhdGNoZXMgdGhhdAoraGF2ZSB0aGUgc2FtZSAicGF0Y2ggSUQiIGFyZSBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSB0aGluZy4KKworSU9XLCB5b3UgY2FuIHVzZSB0aGlzIHRoaW5nIHRvIGxvb2sgZm9yIGxpa2VseSBkdXBsaWNhdGUgY29tbWl0cy4KKworV2hlbiBkZWFsaW5nIHdpdGggJ2dpdCBkaWZmLXRyZWUnIG91dHB1dCwgaXQgdGFrZXMgYWR2YW50YWdlIG9mCit0aGUgZmFjdCB0aGF0IHRoZSBwYXRjaCBpcyBwcmVmaXhlZCB3aXRoIHRoZSBvYmplY3QgbmFtZSBvZiB0aGUKK2NvbW1pdCwgYW5kIG91dHB1dHMgdHdvIDQwLWJ5dGUgaGV4YWRlY2ltYWwgc3RyaW5ncy4gIFRoZSBmaXJzdAorc3RyaW5nIGlzIHRoZSBwYXRjaCBJRCwgYW5kIHRoZSBzZWNvbmQgc3RyaW5nIGlzIHRoZSBjb21taXQgSUQuCitUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBtYXBwaW5nIGZyb20gcGF0Y2ggSUQgdG8gY29tbWl0IElELgorCitPUFRJT05TCistLS0tLS0tCisKKy0tc3RhYmxlOjoKKwlVc2UgYSAic3RhYmxlIiBzdW0gb2YgaGFzaGVzIGFzIHRoZSBwYXRjaCBJRC4gV2l0aCB0aGlzIG9wdGlvbjoKKwkgLSBSZW9yZGVyaW5nIGZpbGUgZGlmZnMgdGhhdCBtYWtlIHVwIGEgcGF0Y2ggZG9lcyBub3QgYWZmZWN0IHRoZSBJRC4KKwkgICBJbiBwYXJ0aWN1bGFyLCB0d28gcGF0Y2hlcyBwcm9kdWNlZCBieSBjb21wYXJpbmcgdGhlIHNhbWUgdHdvIHRyZWVzCisJICAgd2l0aCB0d28gZGlmZmVyZW50IHNldHRpbmdzIGZvciAiLU88b3JkZXJmaWxlPiIgcmVzdWx0IGluIHRoZSBzYW1lCisJICAgcGF0Y2ggSUQgc2lnbmF0dXJlLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjb21wdXRlZCByZXN1bHQgdG8gYmUgdXNlZAorCSAgIGFzIGEga2V5IHRvIGluZGV4IHNvbWUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbmdlIGJldHdlZW4KKwkgICB0aGUgdHdvIHRyZWVzOworCisJIC0gUmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB2YWx1ZSBwcm9kdWNlZCBieSBnaXQgMS45IGFuZCBvbGRlcgorCSAgIG9yIHByb2R1Y2VkIHdoZW4gYW4gInVuc3RhYmxlIiBoYXNoIChzZWUgLS11bnN0YWJsZSBiZWxvdykgaXMKKwkgICBjb25maWd1cmVkIC0gZXZlbiB3aGVuIHVzZWQgb24gYSBkaWZmIG91dHB1dCB0YWtlbiB3aXRob3V0IGFueSB1c2UKKwkgICBvZiAiLU88b3JkZXJmaWxlPiIsIHRoZXJlYnkgbWFraW5nIGV4aXN0aW5nIGRhdGFiYXNlcyBzdG9yaW5nIHN1Y2gKKwkgICAidW5zdGFibGUiIG9yIGhpc3RvcmljYWwgcGF0Y2gtaWRzIHVudXNhYmxlLgorCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBwYXRjaGlkLnN0YWJsZSBpcyBzZXQgdG8gdHJ1ZS4KKworLS11bnN0YWJsZTo6CisJVXNlIGFuICJ1bnN0YWJsZSIgaGFzaCBhcyB0aGUgcGF0Y2ggSUQuIFdpdGggdGhpcyBvcHRpb24sCisJdGhlIHJlc3VsdCBwcm9kdWNlZCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHBhdGNoLWlkIHZhbHVlIHByb2R1Y2VkCisJYnkgZ2l0IDEuOSBhbmQgb2xkZXIuICBVc2VycyB3aXRoIHByZS1leGlzdGluZyBkYXRhYmFzZXMgc3RvcmluZworCXBhdGNoLWlkcyBwcm9kdWNlZCBieSBnaXQgMS45IGFuZCBvbGRlciAod2hvIGRvIG5vdCBkZWFsIHdpdGggcmVvcmRlcmVkCisJcGF0Y2hlcykgbWF5IHdhbnQgdG8gdXNlIHRoaXMgb3B0aW9uLgorCisJVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmVkNTlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dApAQCAtMCwwICsxLDQ3IEBACitnaXQtcHJ1bmUtcGFja2VkKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wcnVuZS1wYWNrZWQgLSBSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcHJ1bmUtcGFja2VkJyBbLW58LS1kcnktcnVuXSBbLXF8LS1xdWlldF0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgcHJvZ3JhbSBzZWFyY2hlcyB0aGUgYCRHSVRfT0JKRUNUX0RJUkVDVE9SWWAgZm9yIGFsbCBvYmplY3RzIHRoYXQgY3VycmVudGx5CitleGlzdCBpbiBhIHBhY2sgZmlsZSBhcyB3ZWxsIGFzIHRoZSBpbmRlcGVuZGVudCBvYmplY3QgZGlyZWN0b3JpZXMuCisKK0FsbCBzdWNoIGV4dHJhIG9iamVjdHMgYXJlIHJlbW92ZWQuCisKK0EgcGFjayBpcyBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cywgaW5kaXZpZHVhbGx5IGNvbXByZXNzZWQsIHdpdGggZGVsdGEKK2NvbXByZXNzaW9uIGFwcGxpZWQsIHN0b3JlZCBpbiBhIHNpbmdsZSBmaWxlLCB3aXRoIGFuIGFzc29jaWF0ZWQgaW5kZXggZmlsZS4KKworUGFja3MgYXJlIHVzZWQgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIG1pcnJvciBzeXN0ZW1zLCBiYWNrdXAgZW5naW5lcywKK2Rpc2sgc3RvcmFnZSwgZXRjLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1uOjoKKy0tZHJ5LXJ1bjo6CisgICAgICAgIERvbid0IGFjdHVhbGx5IHJlbW92ZSBhbnkgb2JqZWN0cywgb25seSBzaG93IHRob3NlIHRoYXQgd291bGQgaGF2ZSBiZWVuCisgICAgICAgIHJlbW92ZWQuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVNxdWVsY2ggdGhlIHByb2dyZXNzIGluZGljYXRvci4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0KK2xpbmtnaXQ6Z2l0LXJlcGFja1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzU1MmRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0CkBAIC0wLDAgKzEsODkgQEAKK2dpdC1wcnVuZSgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wcnVuZSAtIFBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwcnVuZScgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitOT1RFOiBJbiBtb3N0IGNhc2VzLCB1c2VycyBzaG91bGQgcnVuICdnaXQgZ2MnLCB3aGljaCBjYWxscworJ2dpdCBwcnVuZScuIFNlZSB0aGUgc2VjdGlvbiAiTk9URVMiLCBiZWxvdy4KKworVGhpcyBydW5zICdnaXQgZnNjayAtLXVucmVhY2hhYmxlJyB1c2luZyBhbGwgdGhlIHJlZnMKK2F2YWlsYWJsZSBpbiBgcmVmcy9gLCBvcHRpb25hbGx5IHdpdGggYWRkaXRpb25hbCBzZXQgb2YKK29iamVjdHMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBwcnVuZXMgYWxsIHVucGFja2VkCitvYmplY3RzIHVucmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZXNlIGhlYWQgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UuCitJbiBhZGRpdGlvbiwgaXQKK3BydW5lcyB0aGUgdW5wYWNrZWQgb2JqZWN0cyB0aGF0IGFyZSBhbHNvIGZvdW5kIGluIHBhY2tzIGJ5CitydW5uaW5nICdnaXQgcHJ1bmUtcGFja2VkJy4KK0l0IGFsc28gcmVtb3ZlcyBlbnRyaWVzIGZyb20gLmdpdC9zaGFsbG93IHRoYXQgYXJlIG5vdCByZWFjaGFibGUgYnkKK2FueSByZWYuCisKK05vdGUgdGhhdCB1bnJlYWNoYWJsZSwgcGFja2VkIG9iamVjdHMgd2lsbCByZW1haW4uICBJZiB0aGlzIGlzCitub3QgZGVzaXJlZCwgc2VlIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4KKworT1BUSU9OUworLS0tLS0tLQorCistbjo6CistLWRyeS1ydW46OgorCURvIG5vdCByZW1vdmUgYW55dGhpbmc7IGp1c3QgcmVwb3J0IHdoYXQgaXQgd291bGQKKwlyZW1vdmUuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUmVwb3J0IGFsbCByZW1vdmVkIG9iamVjdHMuCisKKy0tcHJvZ3Jlc3M6OgorCVNob3cgcHJvZ3Jlc3MuCisKKy0tZXhwaXJlIDx0aW1lPjo6CisJT25seSBleHBpcmUgbG9vc2Ugb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPi4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCis8aGVhZD4uLi46OgorCUluIGFkZGl0aW9uIHRvIG9iamVjdHMKKwlyZWFjaGFibGUgZnJvbSBhbnkgb2Ygb3VyIHJlZmVyZW5jZXMsIGtlZXAgb2JqZWN0cworCXJlYWNoYWJsZSBmcm9tIGxpc3RlZCA8aGVhZD5zLgorCitFWEFNUExFUworLS0tLS0tLS0KKworVG8gcHJ1bmUgb2JqZWN0cyBub3QgdXNlZCBieSB5b3VyIHJlcG9zaXRvcnkgb3IgYW5vdGhlciB0aGF0Citib3Jyb3dzIGZyb20geW91ciByZXBvc2l0b3J5IHZpYSBpdHMKK2AuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzYDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBwcnVuZSAkKGNkIC4uL2Fub3RoZXIgJiYgZ2l0IHJldi1wYXJzZSAtLWFsbCkKKy0tLS0tLS0tLS0tLQorCitOT1RFUworLS0tLS0KKworSW4gbW9zdCBjYXNlcywgdXNlcnMgd2lsbCBub3QgbmVlZCB0byBjYWxsICdnaXQgcHJ1bmUnIGRpcmVjdGx5LCBidXQKK3Nob3VsZCBpbnN0ZWFkIGNhbGwgJ2dpdCBnYycsIHdoaWNoIGhhbmRsZXMgcHJ1bmluZyBhbG9uZyB3aXRoCittYW55IG90aGVyIGhvdXNla2VlcGluZyB0YXNrcy4KKworRm9yIGEgZGVzY3JpcHRpb24gb2Ygd2hpY2ggb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBmb3IgcHJ1bmluZywgc2VlCisnZ2l0IGZzY2snJ3MgLS11bnJlYWNoYWJsZSBvcHRpb24uCisKK1NFRSBBTFNPCistLS0tLS0tLQorCitsaW5rZ2l0OmdpdC1mc2NrWzFdLAorbGlua2dpdDpnaXQtZ2NbMV0sCitsaW5rZ2l0OmdpdC1yZWZsb2dbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjkwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dApAQCAtMCwwICsxLDI2MyBAQAorZ2l0LXB1bGwoMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wdWxsIC0gRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHB1bGwnIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0luY29ycG9yYXRlcyBjaGFuZ2VzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBpbnRvIHRoZSBjdXJyZW50CiticmFuY2guICBJbiBpdHMgZGVmYXVsdCBtb2RlLCBgZ2l0IHB1bGxgIGlzIHNob3J0aGFuZCBmb3IKK2BnaXQgZmV0Y2hgIGZvbGxvd2VkIGJ5IGBnaXQgbWVyZ2UgRkVUQ0hfSEVBRGAuCisKK01vcmUgcHJlY2lzZWx5LCAnZ2l0IHB1bGwnIHJ1bnMgJ2dpdCBmZXRjaCcgd2l0aCB0aGUgZ2l2ZW4KK3BhcmFtZXRlcnMgYW5kIGNhbGxzICdnaXQgbWVyZ2UnIHRvIG1lcmdlIHRoZSByZXRyaWV2ZWQgYnJhbmNoCitoZWFkcyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4KK1dpdGggYC0tcmViYXNlYCwgaXQgcnVucyAnZ2l0IHJlYmFzZScgaW5zdGVhZCBvZiAnZ2l0IG1lcmdlJy4KKworPHJlcG9zaXRvcnk+IHNob3VsZCBiZSB0aGUgbmFtZSBvZiBhIHJlbW90ZSByZXBvc2l0b3J5IGFzCitwYXNzZWQgdG8gbGlua2dpdDpnaXQtZmV0Y2hbMV0uICA8cmVmc3BlYz4gY2FuIG5hbWUgYW4KK2FyYml0cmFyeSByZW1vdGUgcmVmIChmb3IgZXhhbXBsZSwgdGhlIG5hbWUgb2YgYSB0YWcpIG9yIGV2ZW4KK2EgY29sbGVjdGlvbiBvZiByZWZzIHdpdGggY29ycmVzcG9uZGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMKKyhlLmcuLCByZWZzL2hlYWRzL3thc3Rlcmlza306cmVmcy9yZW1vdGVzL29yaWdpbi97YXN0ZXJpc2t9KSwKK2J1dCB1c3VhbGx5IGl0IGlzIHRoZSBuYW1lIG9mIGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKworRGVmYXVsdCB2YWx1ZXMgZm9yIDxyZXBvc2l0b3J5PiBhbmQgPGJyYW5jaD4gYXJlIHJlYWQgZnJvbSB0aGUKKyJyZW1vdGUiIGFuZCAibWVyZ2UiIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaAorYXMgc2V0IGJ5IGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBgLS10cmFja2AuCisKK0Fzc3VtZSB0aGUgZm9sbG93aW5nIGhpc3RvcnkgZXhpc3RzIGFuZCB0aGUgY3VycmVudCBicmFuY2ggaXMKKyJgbWFzdGVyYCI6CisKKy0tLS0tLS0tLS0tLQorCSAgQS0tLUItLS1DIG1hc3RlciBvbiBvcmlnaW4KKwkgLworICAgIEQtLS1FLS0tRi0tLUcgbWFzdGVyCisJXgorCW9yaWdpbi9tYXN0ZXIgaW4geW91ciByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0KKworVGhlbiAiYGdpdCBwdWxsYCIgd2lsbCBmZXRjaCBhbmQgcmVwbGF5IHRoZSBjaGFuZ2VzIGZyb20gdGhlIHJlbW90ZQorYG1hc3RlcmAgYnJhbmNoIHNpbmNlIGl0IGRpdmVyZ2VkIGZyb20gdGhlIGxvY2FsIGBtYXN0ZXJgIChpLmUuLCBgRWApCit1bnRpbCBpdHMgY3VycmVudCBjb21taXQgKGBDYCkgb24gdG9wIG9mIGBtYXN0ZXJgIGFuZCByZWNvcmQgdGhlCityZXN1bHQgaW4gYSBuZXcgY29tbWl0IGFsb25nIHdpdGggdGhlIG5hbWVzIG9mIHRoZSB0d28gcGFyZW50IGNvbW1pdHMKK2FuZCBhIGxvZyBtZXNzYWdlIGZyb20gdGhlIHVzZXIgZGVzY3JpYmluZyB0aGUgY2hhbmdlcy4KKworLS0tLS0tLS0tLS0tCisJICBBLS0tQi0tLUMgb3JpZ2luL21hc3RlcgorCSAvICAgICAgICAgXAorICAgIEQtLS1FLS0tRi0tLUctLS1IIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1NlZSBsaW5rZ2l0OmdpdC1tZXJnZVsxXSBmb3IgZGV0YWlscywgaW5jbHVkaW5nIGhvdyBjb25mbGljdHMKK2FyZSBwcmVzZW50ZWQgYW5kIGhhbmRsZWQuCisKK0luIEdpdCAxLjcuMCBvciBsYXRlciwgdG8gY2FuY2VsIGEgY29uZmxpY3RpbmcgbWVyZ2UsIHVzZQorYGdpdCByZXNldCAtLW1lcmdlYC4gICpXYXJuaW5nKjogSW4gb2xkZXIgdmVyc2lvbnMgb2YgR2l0LCBydW5uaW5nICdnaXQgcHVsbCcKK3dpdGggdW5jb21taXR0ZWQgY2hhbmdlcyBpcyBkaXNjb3VyYWdlZDogd2hpbGUgcG9zc2libGUsIGl0IGxlYXZlcyB5b3UKK2luIGEgc3RhdGUgdGhhdCBtYXkgYmUgaGFyZCB0byBiYWNrIG91dCBvZiBpbiB0aGUgY2FzZSBvZiBhIGNvbmZsaWN0LgorCitJZiBhbnkgb2YgdGhlIHJlbW90ZSBjaGFuZ2VzIG92ZXJsYXAgd2l0aCBsb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLAordGhlIG1lcmdlIHdpbGwgYmUgYXV0b21hdGljYWxseSBjYW5jZWxlZCBhbmQgdGhlIHdvcmsgdHJlZSB1bnRvdWNoZWQuCitJdCBpcyBnZW5lcmFsbHkgYmVzdCB0byBnZXQgYW55IGxvY2FsIGNoYW5nZXMgaW4gd29ya2luZyBvcmRlciBiZWZvcmUKK3B1bGxpbmcgb3Igc3Rhc2ggdGhlbSBhd2F5IHdpdGggbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisKK09QVElPTlMKKy0tLS0tLS0KKworLXE6OgorLS1xdWlldDo6CisJVGhpcyBpcyBwYXNzZWQgdG8gYm90aCB1bmRlcmx5aW5nIGdpdC1mZXRjaCB0byBzcXVlbGNoIHJlcG9ydGluZyBvZgorCWR1cmluZyB0cmFuc2ZlciwgYW5kIHVuZGVybHlpbmcgZ2l0LW1lcmdlIHRvIHNxdWVsY2ggb3V0cHV0IGR1cmluZworCW1lcmdpbmcuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUGFzcyAtLXZlcmJvc2UgdG8gZ2l0LWZldGNoIGFuZCBnaXQtbWVyZ2UuCisKKy0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXNbPXllc3xvbi1kZW1hbmR8bm9dOjoKKwlUaGlzIG9wdGlvbiBjb250cm9scyBpZiBuZXcgY29tbWl0cyBvZiBhbGwgcG9wdWxhdGVkIHN1Ym1vZHVsZXMgc2hvdWxkCisJYmUgZmV0Y2hlZCBhbmQgdXBkYXRlZCwgdG9vIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGFuZAorCWxpbmtnaXQ6Z2l0bW9kdWxlc1s1XSkuCisrCitJZiB0aGUgY2hlY2tvdXQgaXMgZG9uZSB2aWEgcmViYXNlLCBsb2NhbCBzdWJtb2R1bGUgY29tbWl0cyBhcmUgcmViYXNlZCBhcyB3ZWxsLgorKworSWYgdGhlIHVwZGF0ZSBpcyBkb25lIHZpYSBtZXJnZSwgdGhlIHN1Ym1vZHVsZSBjb25mbGljdHMgYXJlIHJlc29sdmVkIGFuZCBjaGVja2VkIG91dC4KKworT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzpnaXQtcHVsbDogMQorCitpbmNsdWRlOjptZXJnZS1vcHRpb25zLnR4dFtdCisKKy1yOjoKKy0tcmViYXNlWz1mYWxzZXx0cnVlfG1lcmdlc3xwcmVzZXJ2ZXxpbnRlcmFjdGl2ZV06OgorCVdoZW4gdHJ1ZSwgcmViYXNlIHRoZSBjdXJyZW50IGJyYW5jaCBvbiB0b3Agb2YgdGhlIHVwc3RyZWFtCisJYnJhbmNoIGFmdGVyIGZldGNoaW5nLiBJZiB0aGVyZSBpcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2gKKwljb3JyZXNwb25kaW5nIHRvIHRoZSB1cHN0cmVhbSBicmFuY2ggYW5kIHRoZSB1cHN0cmVhbSBicmFuY2gKKwl3YXMgcmViYXNlZCBzaW5jZSBsYXN0IGZldGNoZWQsIHRoZSByZWJhc2UgdXNlcyB0aGF0IGluZm9ybWF0aW9uCisJdG8gYXZvaWQgcmViYXNpbmcgbm9uLWxvY2FsIGNoYW5nZXMuCisrCitXaGVuIHNldCB0byBgbWVyZ2VzYCwgcmViYXNlIHVzaW5nIGBnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlc2Agc28gdGhhdAordGhlIGxvY2FsIG1lcmdlIGNvbW1pdHMgYXJlIGluY2x1ZGVkIGluIHRoZSByZWJhc2UgKHNlZQorbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBkZXRhaWxzKS4KKysKK1doZW4gc2V0IHRvIGBwcmVzZXJ2ZWAgKGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYG1lcmdlc2ApLCByZWJhc2Ugd2l0aCB0aGUKK2AtLXByZXNlcnZlLW1lcmdlc2Agb3B0aW9uIHBhc3NlZCB0byBgZ2l0IHJlYmFzZWAgc28gdGhhdCBsb2NhbGx5IGNyZWF0ZWQKK21lcmdlIGNvbW1pdHMgd2lsbCBub3QgYmUgZmxhdHRlbmVkLgorKworV2hlbiBmYWxzZSwgbWVyZ2UgdGhlIGN1cnJlbnQgYnJhbmNoIGludG8gdGhlIHVwc3RyZWFtIGJyYW5jaC4KKysKK1doZW4gYGludGVyYWN0aXZlYCwgZW5hYmxlIHRoZSBpbnRlcmFjdGl2ZSBtb2RlIG9mIHJlYmFzZS4KKysKK1NlZSBgcHVsbC5yZWJhc2VgLCBgYnJhbmNoLjxuYW1lPi5yZWJhc2VgIGFuZCBgYnJhbmNoLmF1dG9TZXR1cFJlYmFzZWAgaW4KK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBpZiB5b3Ugd2FudCB0byBtYWtlIGBnaXQgcHVsbGAgYWx3YXlzIHVzZQorYC0tcmViYXNlYCBpbnN0ZWFkIG9mIG1lcmdpbmcuCisrCitbTk9URV0KK1RoaXMgaXMgYSBwb3RlbnRpYWxseSBfZGFuZ2Vyb3VzXyBtb2RlIG9mIG9wZXJhdGlvbi4KK0l0IHJld3JpdGVzIGhpc3RvcnksIHdoaWNoIGRvZXMgbm90IGJvZGUgd2VsbCB3aGVuIHlvdQorcHVibGlzaGVkIHRoYXQgaGlzdG9yeSBhbHJlYWR5LiAgRG8gKm5vdCogdXNlIHRoaXMgb3B0aW9uCit1bmxlc3MgeW91IGhhdmUgcmVhZCBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0gY2FyZWZ1bGx5LgorCistLW5vLXJlYmFzZTo6CisJT3ZlcnJpZGUgZWFybGllciAtLXJlYmFzZS4KKworLS1hdXRvc3Rhc2g6OgorLS1uby1hdXRvc3Rhc2g6OgorCUJlZm9yZSBzdGFydGluZyByZWJhc2UsIHN0YXNoIGxvY2FsIG1vZGlmaWNhdGlvbnMgYXdheSAoc2VlCisJbGlua2dpdDpnaXQtc3Rhc2hbMV0pIGlmIG5lZWRlZCwgYW5kIGFwcGx5IHRoZSBzdGFzaCBlbnRyeSB3aGVuCisJZG9uZS4gYC0tbm8tYXV0b3N0YXNoYCBpcyB1c2VmdWwgdG8gb3ZlcnJpZGUgdGhlIGByZWJhc2UuYXV0b1N0YXNoYAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorKworVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCB3aGVuICItLXJlYmFzZSIgaXMgdXNlZC4KKworT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworaW5jbHVkZTo6ZmV0Y2gtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpwdWxsLWZldGNoLXBhcmFtLnR4dFtdCisKK2luY2x1ZGU6OnVybHMtcmVtb3Rlcy50eHRbXQorCitpbmNsdWRlOjptZXJnZS1zdHJhdGVnaWVzLnR4dFtdCisKK0RFRkFVTFQgQkVIQVZJT1VSCistLS0tLS0tLS0tLS0tLS0tLQorCitPZnRlbiBwZW9wbGUgdXNlIGBnaXQgcHVsbGAgd2l0aG91dCBnaXZpbmcgYW55IHBhcmFtZXRlci4KK1RyYWRpdGlvbmFsbHksIHRoaXMgaGFzIGJlZW4gZXF1aXZhbGVudCB0byBzYXlpbmcgYGdpdCBwdWxsCitvcmlnaW5gLiAgSG93ZXZlciwgd2hlbiBjb25maWd1cmF0aW9uIGBicmFuY2guPG5hbWU+LnJlbW90ZWAgaXMKK3ByZXNlbnQgd2hpbGUgb24gYnJhbmNoIGA8bmFtZT5gLCB0aGF0IHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZgorYG9yaWdpbmAuCisKK0luIG9yZGVyIHRvIGRldGVybWluZSB3aGF0IFVSTCB0byB1c2UgdG8gZmV0Y2ggZnJvbSwgdGhlIHZhbHVlCitvZiB0aGUgY29uZmlndXJhdGlvbiBgcmVtb3RlLjxvcmlnaW4+LnVybGAgaXMgY29uc3VsdGVkCithbmQgaWYgdGhlcmUgaXMgbm90IGFueSBzdWNoIHZhcmlhYmxlLCB0aGUgdmFsdWUgb24gdGhlIGBVUkw6YCBsaW5lCitpbiBgJEdJVF9ESVIvcmVtb3Rlcy88b3JpZ2luPmAgaXMgdXNlZC4KKworSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoYXQgcmVtb3RlIGJyYW5jaGVzIHRvIGZldGNoIChhbmQKK29wdGlvbmFsbHkgc3RvcmUgaW4gdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcykgd2hlbiB0aGUgY29tbWFuZCBpcworcnVuIHdpdGhvdXQgYW55IHJlZnNwZWMgcGFyYW1ldGVycyBvbiB0aGUgY29tbWFuZCBsaW5lLCB2YWx1ZXMKK29mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGByZW1vdGUuPG9yaWdpbj4uZmV0Y2hgIGFyZQorY29uc3VsdGVkLCBhbmQgaWYgdGhlcmUgYXJlbid0IGFueSwgYCRHSVRfRElSL3JlbW90ZXMvPG9yaWdpbj5gCitpcyBjb25zdWx0ZWQgYW5kIGl0cyBgUHVsbDpgIGxpbmVzIGFyZSB1c2VkLgorSW4gYWRkaXRpb24gdG8gdGhlIHJlZnNwZWMgZm9ybWF0cyBkZXNjcmliZWQgaW4gdGhlIE9QVElPTlMKK3NlY3Rpb24sIHlvdSBjYW4gaGF2ZSBhIGdsb2JiaW5nIHJlZnNwZWMgdGhhdCBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgorLS0tLS0tLS0tLS0tCisKK0EgZ2xvYmJpbmcgcmVmc3BlYyBtdXN0IGhhdmUgYSBub24tZW1wdHkgUkhTIChpLmUuIG11c3Qgc3RvcmUKK3doYXQgd2VyZSBmZXRjaGVkIGluIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyksIGFuZCBpdHMgTEhTIGFuZCBSSFMKK211c3QgZW5kIHdpdGggYC8qYC4gIFRoZSBhYm92ZSBzcGVjaWZpZXMgdGhhdCBhbGwgcmVtb3RlCiticmFuY2hlcyBhcmUgdHJhY2tlZCB1c2luZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgaW4KK2ByZWZzL3JlbW90ZXMvb3JpZ2luL2AgaGllcmFyY2h5IHVuZGVyIHRoZSBzYW1lIG5hbWUuCisKK1RoZSBydWxlIHRvIGRldGVybWluZSB3aGljaCByZW1vdGUgYnJhbmNoIHRvIG1lcmdlIGFmdGVyCitmZXRjaGluZyBpcyBhIGJpdCBpbnZvbHZlZCwgaW4gb3JkZXIgbm90IHRvIGJyZWFrIGJhY2t3YXJkCitjb21wYXRpYmlsaXR5LgorCitJZiBleHBsaWNpdCByZWZzcGVjcyB3ZXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kCitsaW5lIG9mIGBnaXQgcHVsbGAsIHRoZXkgYXJlIGFsbCBtZXJnZWQuCisKK1doZW4gbm8gcmVmc3BlYyB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlbiBgZ2l0IHB1bGxgCit1c2VzIHRoZSByZWZzcGVjIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gb3IKK2AkR0lUX0RJUi9yZW1vdGVzLzxvcmlnaW4+YC4gIEluIHN1Y2ggY2FzZXMsIHRoZSBmb2xsb3dpbmcKK3J1bGVzIGFwcGx5OgorCisuIElmIGBicmFuY2guPG5hbWU+Lm1lcmdlYCBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VycmVudAorICBicmFuY2ggYDxuYW1lPmAgZXhpc3RzLCB0aGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggYXQgdGhlCisgIHJlbW90ZSBzaXRlIHRoYXQgaXMgbWVyZ2VkLgorCisuIElmIHRoZSByZWZzcGVjIGlzIGEgZ2xvYmJpbmcgb25lLCBub3RoaW5nIGlzIG1lcmdlZC4KKworLiBPdGhlcndpc2UgdGhlIHJlbW90ZSBicmFuY2ggb2YgdGhlIGZpcnN0IHJlZnNwZWMgaXMgbWVyZ2VkLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFVwZGF0ZSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciB0aGUgcmVwb3NpdG9yeQorICB5b3UgY2xvbmVkIGZyb20sIHRoZW4gbWVyZ2Ugb25lIG9mIHRoZW0gaW50byB5b3VyCisgIGN1cnJlbnQgYnJhbmNoOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsCiskIGdpdCBwdWxsIG9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitOb3JtYWxseSB0aGUgYnJhbmNoIG1lcmdlZCBpbiBpcyB0aGUgSEVBRCBvZiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCitidXQgdGhlIGNob2ljZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBicmFuY2guPG5hbWU+LnJlbW90ZSBhbmQKK2JyYW5jaC48bmFtZT4ubWVyZ2Ugb3B0aW9uczsgc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgZGV0YWlscy4KKworKiBNZXJnZSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCB0aGUgcmVtb3RlIGJyYW5jaCBgbmV4dGA6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgb3JpZ2luIG5leHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhpcyBsZWF2ZXMgYSBjb3B5IG9mIGBuZXh0YCB0ZW1wb3JhcmlseSBpbiBGRVRDSF9IRUFELCBidXQKK2RvZXMgbm90IHVwZGF0ZSBhbnkgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLiBVc2luZyByZW1vdGUtdHJhY2tpbmcKK2JyYW5jaGVzLCB0aGUgc2FtZSBjYW4gYmUgZG9uZSBieSBpbnZva2luZyBmZXRjaCBhbmQgbWVyZ2U6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIG9yaWdpbgorJCBnaXQgbWVyZ2Ugb3JpZ2luL25leHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0lmIHlvdSB0cmllZCBhIHB1bGwgd2hpY2ggcmVzdWx0ZWQgaW4gY29tcGxleCBjb25mbGljdHMgYW5kCit3b3VsZCB3YW50IHRvIHN0YXJ0IG92ZXIsIHlvdSBjYW4gcmVjb3ZlciB3aXRoICdnaXQgcmVzZXQnLgorCisKK2luY2x1ZGU6OnRyYW5zZmVyLWRhdGEtbGVha3MudHh0W10KKworQlVHUworLS0tLQorVXNpbmcgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgY2FuIG9ubHkgZmV0Y2ggbmV3IGNvbW1pdHMgaW4gYWxyZWFkeSBjaGVja2VkCitvdXQgc3VibW9kdWxlcyByaWdodCBub3cuIFdoZW4gZS5nLiB1cHN0cmVhbSBhZGRlZCBhIG5ldyBzdWJtb2R1bGUgaW4gdGhlCitqdXN0IGZldGNoZWQgY29tbWl0cyBvZiB0aGUgc3VwZXJwcm9qZWN0IHRoZSBzdWJtb2R1bGUgaXRzZWxmIGNhbm5vdCBiZQorZmV0Y2hlZCwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gY2hlY2sgb3V0IHRoYXQgc3VibW9kdWxlIGxhdGVyIHdpdGhvdXQKK2hhdmluZyB0byBkbyBhIGZldGNoIGFnYWluLiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGZpeGVkIGluIGEgZnV0dXJlIEdpdAordmVyc2lvbi4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mZXRjaFsxXSwgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4MDUzNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CkBAIC0wLDAgKzEsNjczIEBACitnaXQtcHVzaCgxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXB1c2ggLSBVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcHVzaCcgWy0tYWxsIHwgLS1taXJyb3IgfCAtLXRhZ3NdIFstLWZvbGxvdy10YWdzXSBbLS1hdG9taWNdIFstbiB8IC0tZHJ5LXJ1bl0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0KKwkgICBbLS1yZXBvPTxyZXBvc2l0b3J5Pl0gWy1mIHwgLS1mb3JjZV0gWy1kIHwgLS1kZWxldGVdIFstLXBydW5lXSBbLXYgfCAtLXZlcmJvc2VdCisJICAgWy11IHwgLS1zZXQtdXBzdHJlYW1dIFstbyA8c3RyaW5nPiB8IC0tcHVzaC1vcHRpb249PHN0cmluZz5dCisJICAgWy0tW25vLV1zaWduZWR8LS1zaWduZWQ9KHRydWV8ZmFsc2V8aWYtYXNrZWQpXQorCSAgIFstLWZvcmNlLXdpdGgtbGVhc2VbPTxyZWZuYW1lPls6PGV4cGVjdD5dXV0KKwkgICBbLS1uby12ZXJpZnldIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitVcGRhdGVzIHJlbW90ZSByZWZzIHVzaW5nIGxvY2FsIHJlZnMsIHdoaWxlIHNlbmRpbmcgb2JqZWN0cworbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIHRoZSBnaXZlbiByZWZzLgorCitZb3UgY2FuIG1ha2UgaW50ZXJlc3RpbmcgdGhpbmdzIGhhcHBlbiB0byBhIHJlcG9zaXRvcnkKK2V2ZXJ5IHRpbWUgeW91IHB1c2ggaW50byBpdCwgYnkgc2V0dGluZyB1cCAnaG9va3MnIHRoZXJlLiAgU2VlCitkb2N1bWVudGF0aW9uIGZvciBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0uCisKK1doZW4gdGhlIGNvbW1hbmQgbGluZSBkb2VzIG5vdCBzcGVjaWZ5IHdoZXJlIHRvIHB1c2ggd2l0aCB0aGUKK2A8cmVwb3NpdG9yeT5gIGFyZ3VtZW50LCBgYnJhbmNoLioucmVtb3RlYCBjb25maWd1cmF0aW9uIGZvciB0aGUKK2N1cnJlbnQgYnJhbmNoIGlzIGNvbnN1bHRlZCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcHVzaC4gIElmIHRoZQorY29uZmlndXJhdGlvbiBpcyBtaXNzaW5nLCBpdCBkZWZhdWx0cyB0byAnb3JpZ2luJy4KKworV2hlbiB0aGUgY29tbWFuZCBsaW5lIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0byBwdXNoIHdpdGggYDxyZWZzcGVjPi4uLmAKK2FyZ3VtZW50cyBvciBgLS1hbGxgLCBgLS1taXJyb3JgLCBgLS10YWdzYCBvcHRpb25zLCB0aGUgY29tbWFuZCBmaW5kcwordGhlIGRlZmF1bHQgYDxyZWZzcGVjPmAgYnkgY29uc3VsdGluZyBgcmVtb3RlLioucHVzaGAgY29uZmlndXJhdGlvbiwKK2FuZCBpZiBpdCBpcyBub3QgZm91bmQsIGhvbm9ycyBgcHVzaC5kZWZhdWx0YCBjb25maWd1cmF0aW9uIHRvIGRlY2lkZQord2hhdCB0byBwdXNoIChTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciB0aGUgbWVhbmluZyBvZiBgcHVzaC5kZWZhdWx0YCkuCisKK1doZW4gbmVpdGhlciB0aGUgY29tbWFuZC1saW5lIG5vciB0aGUgY29uZmlndXJhdGlvbiBzcGVjaWZ5IHdoYXQgdG8KK3B1c2gsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHVzZWQsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBgc2ltcGxlYAordmFsdWUgZm9yIGBwdXNoLmRlZmF1bHRgOiB0aGUgY3VycmVudCBicmFuY2ggaXMgcHVzaGVkIHRvIHRoZQorY29ycmVzcG9uZGluZyB1cHN0cmVhbSBicmFuY2gsIGJ1dCBhcyBhIHNhZmV0eSBtZWFzdXJlLCB0aGUgcHVzaCBpcworYWJvcnRlZCBpZiB0aGUgdXBzdHJlYW0gYnJhbmNoIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUKK2xvY2FsIG9uZS4KKworCitPUFRJT05TW1tPUFRJT05TXV0KKy0tLS0tLS0tLS0tLS0tLS0tLQorPHJlcG9zaXRvcnk+OjoKKwlUaGUgInJlbW90ZSIgcmVwb3NpdG9yeSB0aGF0IGlzIGRlc3RpbmF0aW9uIG9mIGEgcHVzaAorCW9wZXJhdGlvbi4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBlaXRoZXIgYSBVUkwKKwkoc2VlIHRoZSBzZWN0aW9uIDw8VVJMUyxHSVQgVVJMUz4+IGJlbG93KSBvciB0aGUgbmFtZQorCW9mIGEgcmVtb3RlIChzZWUgdGhlIHNlY3Rpb24gPDxSRU1PVEVTLFJFTU9URVM+PiBiZWxvdykuCisKKzxyZWZzcGVjPi4uLjo6CisJU3BlY2lmeSB3aGF0IGRlc3RpbmF0aW9uIHJlZiB0byB1cGRhdGUgd2l0aCB3aGF0IHNvdXJjZSBvYmplY3QuCisJVGhlIGZvcm1hdCBvZiBhIDxyZWZzcGVjPiBwYXJhbWV0ZXIgaXMgYW4gb3B0aW9uYWwgcGx1cworCWArYCwgZm9sbG93ZWQgYnkgdGhlIHNvdXJjZSBvYmplY3QgPHNyYz4sIGZvbGxvd2VkCisJYnkgYSBjb2xvbiBgOmAsIGZvbGxvd2VkIGJ5IHRoZSBkZXN0aW5hdGlvbiByZWYgPGRzdD4uCisrCitUaGUgPHNyYz4gaXMgb2Z0ZW4gdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB5b3Ugd291bGQgd2FudCB0byBwdXNoLCBidXQKK2l0IGNhbiBiZSBhbnkgYXJiaXRyYXJ5ICJTSEEtMSBleHByZXNzaW9uIiwgc3VjaCBhcyBgbWFzdGVyfjRgIG9yCitgSEVBRGAgKHNlZSBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSkuCisrCitUaGUgPGRzdD4gdGVsbHMgd2hpY2ggcmVmIG9uIHRoZSByZW1vdGUgc2lkZSBpcyB1cGRhdGVkIHdpdGggdGhpcworcHVzaC4gQXJiaXRyYXJ5IGV4cHJlc3Npb25zIGNhbm5vdCBiZSB1c2VkIGhlcmUsIGFuIGFjdHVhbCByZWYgbXVzdAorYmUgbmFtZWQuCitJZiBgZ2l0IHB1c2ggWzxyZXBvc2l0b3J5Pl1gIHdpdGhvdXQgYW55IGA8cmVmc3BlYz5gIGFyZ3VtZW50IGlzIHNldCB0bwordXBkYXRlIHNvbWUgcmVmIGF0IHRoZSBkZXN0aW5hdGlvbiB3aXRoIGA8c3JjPmAgd2l0aAorYHJlbW90ZS48cmVwb3NpdG9yeT4ucHVzaGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYDo8ZHN0PmAgcGFydCBjYW4KK2JlIG9taXR0ZWQtLXN1Y2ggYSBwdXNoIHdpbGwgdXBkYXRlIGEgcmVmIHRoYXQgYDxzcmM+YCBub3JtYWxseSB1cGRhdGVzCit3aXRob3V0IGFueSBgPHJlZnNwZWM+YCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgT3RoZXJ3aXNlLCBtaXNzaW5nCitgOjxkc3Q+YCBtZWFucyB0byB1cGRhdGUgdGhlIHNhbWUgcmVmIGFzIHRoZSBgPHNyYz5gLgorKworSWYgPGRzdD4gZG9lc24ndCBzdGFydCB3aXRoIGByZWZzL2AgKGUuZy4gYHJlZnMvaGVhZHMvbWFzdGVyYCkgd2Ugd2lsbAordHJ5IHRvIGluZmVyIHdoZXJlIGluIGByZWZzLypgIG9uIHRoZSBkZXN0aW5hdGlvbiA8cmVwb3NpdG9yeT4gaXQKK2JlbG9uZ3MgYmFzZWQgb24gdGhlIHR5cGUgb2YgPHNyYz4gYmVpbmcgcHVzaGVkIGFuZCB3aGV0aGVyIDxkc3Q+CitpcyBhbWJpZ3VvdXMuCisrCistLQorKiBJZiA8ZHN0PiB1bmFtYmlndW91c2x5IHJlZmVycyB0byBhIHJlZiBvbiB0aGUgPHJlcG9zaXRvcnk+IHJlbW90ZSwKKyAgdGhlbiBwdXNoIHRvIHRoYXQgcmVmLgorCisqIElmIDxzcmM+IHJlc29sdmVzIHRvIGEgcmVmIHN0YXJ0aW5nIHdpdGggcmVmcy9oZWFkcy8gb3IgcmVmcy90YWdzLywKKyAgdGhlbiBwcmVwZW5kIHRoYXQgdG8gPGRzdD4uCisKKyogT3RoZXIgYW1iaWd1aXR5IHJlc29sdXRpb25zIG1pZ2h0IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUsIGJ1dCBmb3IKKyAgbm93IGFueSBvdGhlciBjYXNlcyB3aWxsIGVycm9yIG91dCB3aXRoIGFuIGVycm9yIGluZGljYXRpbmcgd2hhdCB3ZQorICB0cmllZCwgYW5kIGRlcGVuZGluZyBvbiB0aGUgYGFkdmljZS5wdXNoVW5xdWFsaWZpZWRSZWZuYW1lYAorICBjb25maWd1cmF0aW9uIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKSBzdWdnZXN0IHdoYXQgcmVmcy8KKyAgbmFtZXNwYWNlIHlvdSBtYXkgaGF2ZSB3YW50ZWQgdG8gcHVzaCB0by4KKworLS0KKysKK1RoZSBvYmplY3QgcmVmZXJlbmNlZCBieSA8c3JjPiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgPGRzdD4gcmVmZXJlbmNlCitvbiB0aGUgcmVtb3RlIHNpZGUuIFdoZXRoZXIgdGhpcyBpcyBhbGxvd2VkIGRlcGVuZHMgb24gd2hlcmUgaW4KK2ByZWZzLypgIHRoZSA8ZHN0PiByZWZlcmVuY2UgbGl2ZXMgYXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdywgaW4KK3Rob3NlIHNlY3Rpb25zICJ1cGRhdGUiIG1lYW5zIGFueSBtb2RpZmljYXRpb25zIGV4Y2VwdCBkZWxldGVzLCB3aGljaAorYXMgbm90ZWQgYWZ0ZXIgdGhlIG5leHQgZmV3IHNlY3Rpb25zIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5LgorKworVGhlIGByZWZzL2hlYWRzLypgIG5hbWVzcGFjZSB3aWxsIG9ubHkgYWNjZXB0IGNvbW1pdCBvYmplY3RzLCBhbmQKK3VwZGF0ZXMgb25seSBpZiB0aGV5IGNhbiBiZSBmYXN0LWZvcndhcmRlZC4KKysKK1RoZSBgcmVmcy90YWdzLypgIG5hbWVzcGFjZSB3aWxsIGFjY2VwdCBhbnkga2luZCBvZiBvYmplY3QgKGFzCitjb21taXRzLCB0cmVlcyBhbmQgYmxvYnMgY2FuIGJlIHRhZ2dlZCksIGFuZCBhbnkgdXBkYXRlcyB0byB0aGVtIHdpbGwKK2JlIHJlamVjdGVkLgorKworSXQncyBwb3NzaWJsZSB0byBwdXNoIGFueSB0eXBlIG9mIG9iamVjdCB0byBhbnkgbmFtZXNwYWNlIG91dHNpZGUgb2YKK2ByZWZzL3t0YWdzLGhlYWRzfS8qYC4gSW4gdGhlIGNhc2Ugb2YgdGFncyBhbmQgY29tbWl0cywgdGhlc2Ugd2lsbCBiZQordHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgdGhlIGNvbW1pdHMgaW5zaWRlIGByZWZzL2hlYWRzLypgIGZvciB0aGUKK3B1cnBvc2VzIG9mIHdoZXRoZXIgdGhlIHVwZGF0ZSBpcyBhbGxvd2VkLgorKworSS5lLiBhIGZhc3QtZm9yd2FyZCBvZiBjb21taXRzIGFuZCB0YWdzIG91dHNpZGUgYHJlZnMve3RhZ3MsaGVhZHN9LypgCitpcyBhbGxvd2VkLCBldmVuIGluIGNhc2VzIHdoZXJlIHdoYXQncyBiZWluZyBmYXN0LWZvcndhcmRlZCBpcyBub3QgYQorY29tbWl0LCBidXQgYSB0YWcgb2JqZWN0IHdoaWNoIGhhcHBlbnMgdG8gcG9pbnQgdG8gYSBuZXcgY29tbWl0IHdoaWNoCitpcyBhIGZhc3QtZm9yd2FyZCBvZiB0aGUgY29tbWl0IHRoZSBsYXN0IHRhZyAob3IgY29tbWl0KSBpdCdzCityZXBsYWNpbmcuIFJlcGxhY2luZyBhIHRhZyB3aXRoIGFuIGVudGlyZWx5IGRpZmZlcmVudCB0YWcgaXMgYWxzbworYWxsb3dlZCwgaWYgaXQgcG9pbnRzIHRvIHRoZSBzYW1lIGNvbW1pdCwgYXMgd2VsbCBhcyBwdXNoaW5nIGEgcGVlbGVkCit0YWcsIGkuZS4gcHVzaGluZyB0aGUgY29tbWl0IHRoYXQgZXhpc3RpbmcgdGFnIG9iamVjdCBwb2ludHMgdG8sIG9yIGEKK25ldyB0YWcgb2JqZWN0IHdoaWNoIGFuIGV4aXN0aW5nIGNvbW1pdCBwb2ludHMgdG8uCisrCitUcmVlIGFuZCBibG9iIG9iamVjdHMgb3V0c2lkZSBvZiBgcmVmcy97dGFncyxoZWFkc30vKmAgd2lsbCBiZSB0cmVhdGVkCit0aGUgc2FtZSB3YXkgYXMgaWYgdGhleSB3ZXJlIGluc2lkZSBgcmVmcy90YWdzLypgLCBhbnkgdXBkYXRlIG9mIHRoZW0KK3dpbGwgYmUgcmVqZWN0ZWQuCisrCitBbGwgb2YgdGhlIHJ1bGVzIGRlc2NyaWJlZCBhYm92ZSBhYm91dCB3aGF0J3Mgbm90IGFsbG93ZWQgYXMgYW4gdXBkYXRlCitjYW4gYmUgb3ZlcnJpZGRlbiBieSBhZGRpbmcgYW4gdGhlIG9wdGlvbmFsIGxlYWRpbmcgYCtgIHRvIGEgcmVmc3BlYworKG9yIHVzaW5nIGAtLWZvcmNlYCBjb21tYW5kIGxpbmUgb3B0aW9uKS4gVGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMKK2lzIHRoYXQgbm8gYW1vdW50IG9mIGZvcmNpbmcgd2lsbCBtYWtlIHRoZSBgcmVmcy9oZWFkcy8qYCBuYW1lc3BhY2UKK2FjY2VwdCBhIG5vbi1jb21taXQgb2JqZWN0LiBIb29rcyBhbmQgY29uZmlndXJhdGlvbiBjYW4gYWxzbyBvdmVycmlkZQorb3IgYW1lbmQgdGhlc2UgcnVsZXMsIHNlZSBlLmcuIGByZWNlaXZlLmRlbnlOb25GYXN0Rm9yd2FyZHNgIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0gYW5kIGBwcmUtcmVjZWl2ZWAgYW5kIGB1cGRhdGVgIGluCitsaW5rZ2l0OmdpdGhvb2tzWzVdLgorKworUHVzaGluZyBhbiBlbXB0eSA8c3JjPiBhbGxvd3MgeW91IHRvIGRlbGV0ZSB0aGUgPGRzdD4gcmVmIGZyb20gdGhlCityZW1vdGUgcmVwb3NpdG9yeS4gRGVsZXRpb25zIGFyZSBhbHdheXMgYWNjZXB0ZWQgd2l0aG91dCBhIGxlYWRpbmcgYCtgCitpbiB0aGUgcmVmc3BlYyAob3IgYC0tZm9yY2VgKSwgZXhjZXB0IHdoZW4gZm9yYmlkZGVuIGJ5IGNvbmZpZ3VyYXRpb24KK29yIGhvb2tzLiBTZWUgYHJlY2VpdmUuZGVueURlbGV0ZXNgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBhbmQKK2BwcmUtcmVjZWl2ZWAgYW5kIGB1cGRhdGVgIGluIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisrCitUaGUgc3BlY2lhbCByZWZzcGVjIGA6YCAob3IgYCs6YCB0byBhbGxvdyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMpCitkaXJlY3RzIEdpdCB0byBwdXNoICJtYXRjaGluZyIgYnJhbmNoZXM6IGZvciBldmVyeSBicmFuY2ggdGhhdCBleGlzdHMgb24KK3RoZSBsb2NhbCBzaWRlLCB0aGUgcmVtb3RlIHNpZGUgaXMgdXBkYXRlZCBpZiBhIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lCithbHJlYWR5IGV4aXN0cyBvbiB0aGUgcmVtb3RlIHNpZGUuCisrCitgdGFnIDx0YWc+YCBtZWFucyB0aGUgc2FtZSBhcyBgcmVmcy90YWdzLzx0YWc+OnJlZnMvdGFncy88dGFnPmAuCisKKy0tYWxsOjoKKwlQdXNoIGFsbCBicmFuY2hlcyAoaS5lLiByZWZzIHVuZGVyIGByZWZzL2hlYWRzL2ApOyBjYW5ub3QgYmUKKwl1c2VkIHdpdGggb3RoZXIgPHJlZnNwZWM+LgorCistLXBydW5lOjoKKwlSZW1vdmUgcmVtb3RlIGJyYW5jaGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGxvY2FsIGNvdW50ZXJwYXJ0LiBGb3IgZXhhbXBsZQorCWEgcmVtb3RlIGJyYW5jaCBgdG1wYCB3aWxsIGJlIHJlbW92ZWQgaWYgYSBsb2NhbCBicmFuY2ggd2l0aCB0aGUgc2FtZQorCW5hbWUgZG9lc24ndCBleGlzdCBhbnkgbW9yZS4gVGhpcyBhbHNvIHJlc3BlY3RzIHJlZnNwZWNzLCBlLmcuCisJYGdpdCBwdXNoIC0tcHJ1bmUgcmVtb3RlIHJlZnMvaGVhZHMvKjpyZWZzL3RtcC8qYCB3b3VsZAorCW1ha2Ugc3VyZSB0aGF0IHJlbW90ZSBgcmVmcy90bXAvZm9vYCB3aWxsIGJlIHJlbW92ZWQgaWYgYHJlZnMvaGVhZHMvZm9vYAorCWRvZXNuJ3QgZXhpc3QuCisKKy0tbWlycm9yOjoKKwlJbnN0ZWFkIG9mIG5hbWluZyBlYWNoIHJlZiB0byBwdXNoLCBzcGVjaWZpZXMgdGhhdCBhbGwKKwlyZWZzIHVuZGVyIGByZWZzL2AgKHdoaWNoIGluY2x1ZGVzIGJ1dCBpcyBub3QKKwlsaW1pdGVkIHRvIGByZWZzL2hlYWRzL2AsIGByZWZzL3JlbW90ZXMvYCwgYW5kIGByZWZzL3RhZ3MvYCkKKwliZSBtaXJyb3JlZCB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuICBOZXdseSBjcmVhdGVkIGxvY2FsCisJcmVmcyB3aWxsIGJlIHB1c2hlZCB0byB0aGUgcmVtb3RlIGVuZCwgbG9jYWxseSB1cGRhdGVkIHJlZnMKKwl3aWxsIGJlIGZvcmNlIHVwZGF0ZWQgb24gdGhlIHJlbW90ZSBlbmQsIGFuZCBkZWxldGVkIHJlZnMKKwl3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIGVuZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKKwlpZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYHJlbW90ZS48cmVtb3RlPi5taXJyb3JgIGlzCisJc2V0LgorCistbjo6CistLWRyeS1ydW46OgorCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIHVwZGF0ZXMuCisKKy0tcG9yY2VsYWluOjoKKwlQcm9kdWNlIG1hY2hpbmUtcmVhZGFibGUgb3V0cHV0LiAgVGhlIG91dHB1dCBzdGF0dXMgbGluZSBmb3IgZWFjaCByZWYKKwl3aWxsIGJlIHRhYi1zZXBhcmF0ZWQgYW5kIHNlbnQgdG8gc3Rkb3V0IGluc3RlYWQgb2Ygc3RkZXJyLiAgVGhlIGZ1bGwKKwlzeW1ib2xpYyBuYW1lcyBvZiB0aGUgcmVmcyB3aWxsIGJlIGdpdmVuLgorCistZDo6CistLWRlbGV0ZTo6CisJQWxsIGxpc3RlZCByZWZzIGFyZSBkZWxldGVkIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiBUaGlzIGlzCisJdGhlIHNhbWUgYXMgcHJlZml4aW5nIGFsbCByZWZzIHdpdGggYSBjb2xvbi4KKworLS10YWdzOjoKKwlBbGwgcmVmcyB1bmRlciBgcmVmcy90YWdzYCBhcmUgcHVzaGVkLCBpbgorCWFkZGl0aW9uIHRvIHJlZnNwZWNzIGV4cGxpY2l0bHkgbGlzdGVkIG9uIHRoZSBjb21tYW5kCisJbGluZS4KKworLS1mb2xsb3ctdGFnczo6CisJUHVzaCBhbGwgdGhlIHJlZnMgdGhhdCB3b3VsZCBiZSBwdXNoZWQgd2l0aG91dCB0aGlzIG9wdGlvbiwKKwlhbmQgYWxzbyBwdXNoIGFubm90YXRlZCB0YWdzIGluIGByZWZzL3RhZ3NgIHRoYXQgYXJlIG1pc3NpbmcKKwlmcm9tIHRoZSByZW1vdGUgYnV0IGFyZSBwb2ludGluZyBhdCBjb21taXQtaXNoIHRoYXQgYXJlCisJcmVhY2hhYmxlIGZyb20gdGhlIHJlZnMgYmVpbmcgcHVzaGVkLiAgVGhpcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQKKwl3aXRoIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYHB1c2guZm9sbG93VGFnc2AuICBGb3IgbW9yZQorCWluZm9ybWF0aW9uLCBzZWUgYHB1c2guZm9sbG93VGFnc2AgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCistLVtuby1dc2lnbmVkOjoKKy0tc2lnbmVkPSh0cnVlfGZhbHNlfGlmLWFza2VkKTo6CisJR1BHLXNpZ24gdGhlIHB1c2ggcmVxdWVzdCB0byB1cGRhdGUgcmVmcyBvbiB0aGUgcmVjZWl2aW5nCisJc2lkZSwgdG8gYWxsb3cgaXQgdG8gYmUgY2hlY2tlZCBieSB0aGUgaG9va3MgYW5kL29yIGJlCisJbG9nZ2VkLiAgSWYgYGZhbHNlYCBvciBgLS1uby1zaWduZWRgLCBubyBzaWduaW5nIHdpbGwgYmUKKwlhdHRlbXB0ZWQuICBJZiBgdHJ1ZWAgb3IgYC0tc2lnbmVkYCwgdGhlIHB1c2ggd2lsbCBmYWlsIGlmIHRoZQorCXNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNpZ25lZCBwdXNoZXMuICBJZiBzZXQgdG8gYGlmLWFza2VkYCwKKwlzaWduIGlmIGFuZCBvbmx5IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgc2lnbmVkIHB1c2hlcy4gIFRoZSBwdXNoCisJd2lsbCBhbHNvIGZhaWwgaWYgdGhlIGFjdHVhbCBjYWxsIHRvIGBncGcgLS1zaWduYCBmYWlscy4gIFNlZQorCWxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSBmb3IgdGhlIGRldGFpbHMgb24gdGhlIHJlY2VpdmluZyBlbmQuCisKKy0tW25vLV1hdG9taWM6OgorCVVzZSBhbiBhdG9taWMgdHJhbnNhY3Rpb24gb24gdGhlIHJlbW90ZSBzaWRlIGlmIGF2YWlsYWJsZS4KKwlFaXRoZXIgYWxsIHJlZnMgYXJlIHVwZGF0ZWQsIG9yIG9uIGVycm9yLCBubyByZWZzIGFyZSB1cGRhdGVkLgorCUlmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhdG9taWMgcHVzaGVzIHRoZSBwdXNoIHdpbGwgZmFpbC4KKworLW8gPG9wdGlvbj46OgorLS1wdXNoLW9wdGlvbj08b3B0aW9uPjo6CisJVHJhbnNtaXQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgc2VydmVyLCB3aGljaCBwYXNzZXMgdGhlbSB0bworCXRoZSBwcmUtcmVjZWl2ZSBhcyB3ZWxsIGFzIHRoZSBwb3N0LXJlY2VpdmUgaG9vay4gVGhlIGdpdmVuIHN0cmluZworCW11c3Qgbm90IGNvbnRhaW4gYSBOVUwgb3IgTEYgY2hhcmFjdGVyLgorCVdoZW4gbXVsdGlwbGUgYC0tcHVzaC1vcHRpb249PG9wdGlvbj5gIGFyZSBnaXZlbiwgdGhleSBhcmUKKwlhbGwgc2VudCB0byB0aGUgb3RoZXIgc2lkZSBpbiB0aGUgb3JkZXIgbGlzdGVkIG9uIHRoZQorCWNvbW1hbmQgbGluZS4KKwlXaGVuIG5vIGAtLXB1c2gtb3B0aW9uPTxvcHRpb24+YCBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kCisJbGluZSwgdGhlIHZhbHVlcyBvZiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBwdXNoLnB1c2hPcHRpb25gCisJYXJlIHVzZWQgaW5zdGVhZC4KKworLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+OjoKKy0tZXhlYz08Z2l0LXJlY2VpdmUtcGFjaz46OgorCVBhdGggdG8gdGhlICdnaXQtcmVjZWl2ZS1wYWNrJyBwcm9ncmFtIG9uIHRoZSByZW1vdGUKKwllbmQuICBTb21ldGltZXMgdXNlZnVsIHdoZW4gcHVzaGluZyB0byBhIHJlbW90ZQorCXJlcG9zaXRvcnkgb3ZlciBzc2gsIGFuZCB5b3UgZG8gbm90IGhhdmUgdGhlIHByb2dyYW0gaW4KKwlhIGRpcmVjdG9yeSBvbiB0aGUgZGVmYXVsdCAkUEFUSC4KKworLS1bbm8tXWZvcmNlLXdpdGgtbGVhc2U6OgorLS1mb3JjZS13aXRoLWxlYXNlPTxyZWZuYW1lPjo6CistLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+OjxleHBlY3Q+OjoKKwlVc3VhbGx5LCAiZ2l0IHB1c2giIHJlZnVzZXMgdG8gdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IGlzCisJbm90IGFuIGFuY2VzdG9yIG9mIHRoZSBsb2NhbCByZWYgdXNlZCB0byBvdmVyd3JpdGUgaXQuCisrCitUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhpcyByZXN0cmljdGlvbiBpZiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKK3JlbW90ZSByZWYgaXMgdGhlIGV4cGVjdGVkIHZhbHVlLiAgImdpdCBwdXNoIiBmYWlscyBvdGhlcndpc2UuCisrCitJbWFnaW5lIHRoYXQgeW91IGhhdmUgdG8gcmViYXNlIHdoYXQgeW91IGhhdmUgYWxyZWFkeSBwdWJsaXNoZWQuCitZb3Ugd2lsbCBoYXZlIHRvIGJ5cGFzcyB0aGUgIm11c3QgZmFzdC1mb3J3YXJkIiBydWxlIGluIG9yZGVyIHRvCityZXBsYWNlIHRoZSBoaXN0b3J5IHlvdSBvcmlnaW5hbGx5IHB1Ymxpc2hlZCB3aXRoIHRoZSByZWJhc2VkIGhpc3RvcnkuCitJZiBzb21lYm9keSBlbHNlIGJ1aWx0IG9uIHRvcCBvZiB5b3VyIG9yaWdpbmFsIGhpc3Rvcnkgd2hpbGUgeW91IGFyZQorcmViYXNpbmcsIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBhdCB0aGUgcmVtb3RlIG1heSBhZHZhbmNlIHdpdGggaGVyCitjb21taXQsIGFuZCBibGluZGx5IHB1c2hpbmcgd2l0aCBgLS1mb3JjZWAgd2lsbCBsb3NlIGhlciB3b3JrLgorKworVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzYXkgdGhhdCB5b3UgZXhwZWN0IHRoZSBoaXN0b3J5IHlvdSBhcmUKK3VwZGF0aW5nIGlzIHdoYXQgeW91IHJlYmFzZWQgYW5kIHdhbnQgdG8gcmVwbGFjZS4gSWYgdGhlIHJlbW90ZSByZWYKK3N0aWxsIHBvaW50cyBhdCB0aGUgY29tbWl0IHlvdSBzcGVjaWZpZWQsIHlvdSBjYW4gYmUgc3VyZSB0aGF0IG5vCitvdGhlciBwZW9wbGUgZGlkIGFueXRoaW5nIHRvIHRoZSByZWYuIEl0IGlzIGxpa2UgdGFraW5nIGEgImxlYXNlIiBvbgordGhlIHJlZiB3aXRob3V0IGV4cGxpY2l0bHkgbG9ja2luZyBpdCwgYW5kIHRoZSByZW1vdGUgcmVmIGlzIHVwZGF0ZWQKK29ubHkgaWYgdGhlICJsZWFzZSIgaXMgc3RpbGwgdmFsaWQuCisrCitgLS1mb3JjZS13aXRoLWxlYXNlYCBhbG9uZSwgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBkZXRhaWxzLCB3aWxsIHByb3RlY3QKK2FsbCByZW1vdGUgcmVmcyB0aGF0IGFyZSBnb2luZyB0byBiZSB1cGRhdGVkIGJ5IHJlcXVpcmluZyB0aGVpcgorY3VycmVudCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBhcyB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCB3ZSBoYXZlCitmb3IgdGhlbS4KKysKK2AtLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+YCwgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBleHBlY3RlZCB2YWx1ZSwgd2lsbAorcHJvdGVjdCB0aGUgbmFtZWQgcmVmIChhbG9uZSksIGlmIGl0IGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWQsIGJ5CityZXF1aXJpbmcgaXRzIGN1cnJlbnQgdmFsdWUgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHJlbW90ZS10cmFja2luZworYnJhbmNoIHdlIGhhdmUgZm9yIGl0LgorKworYC0tZm9yY2Utd2l0aC1sZWFzZT08cmVmbmFtZT46PGV4cGVjdD5gIHdpbGwgcHJvdGVjdCB0aGUgbmFtZWQgcmVmIChhbG9uZSksCitpZiBpdCBpcyBnb2luZyB0byBiZSB1cGRhdGVkLCBieSByZXF1aXJpbmcgaXRzIGN1cnJlbnQgdmFsdWUgdG8gYmUKK3RoZSBzYW1lIGFzIHRoZSBzcGVjaWZpZWQgdmFsdWUgYDxleHBlY3Q+YCAod2hpY2ggaXMgYWxsb3dlZCB0byBiZQorZGlmZmVyZW50IGZyb20gdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2ggd2UgaGF2ZSBmb3IgdGhlIHJlZm5hbWUsCitvciB3ZSBkbyBub3QgZXZlbiBoYXZlIHRvIGhhdmUgc3VjaCBhIHJlbW90ZS10cmFja2luZyBicmFuY2ggd2hlbgordGhpcyBmb3JtIGlzIHVzZWQpLiAgSWYgYDxleHBlY3Q+YCBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHRoZSBuYW1lZCByZWYKK211c3Qgbm90IGFscmVhZHkgZXhpc3QuCisrCitOb3RlIHRoYXQgYWxsIGZvcm1zIG90aGVyIHRoYW4gYC0tZm9yY2Utd2l0aC1sZWFzZT08cmVmbmFtZT46PGV4cGVjdD5gCit0aGF0IHNwZWNpZmllcyB0aGUgZXhwZWN0ZWQgY3VycmVudCB2YWx1ZSBvZiB0aGUgcmVmIGV4cGxpY2l0bHkgYXJlCitzdGlsbCBleHBlcmltZW50YWwgYW5kIHRoZWlyIHNlbWFudGljcyBtYXkgY2hhbmdlIGFzIHdlIGdhaW4gZXhwZXJpZW5jZQord2l0aCB0aGlzIGZlYXR1cmUuCisrCisiLS1uby1mb3JjZS13aXRoLWxlYXNlIiB3aWxsIGNhbmNlbCBhbGwgdGhlIHByZXZpb3VzIC0tZm9yY2Utd2l0aC1sZWFzZSBvbiB0aGUKK2NvbW1hbmQgbGluZS4KKysKK0EgZ2VuZXJhbCBub3RlIG9uIHNhZmV0eTogc3VwcGx5aW5nIHRoaXMgb3B0aW9uIHdpdGhvdXQgYW4gZXhwZWN0ZWQKK3ZhbHVlLCBpLmUuIGFzIGAtLWZvcmNlLXdpdGgtbGVhc2VgIG9yIGAtLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+YAoraW50ZXJhY3RzIHZlcnkgYmFkbHkgd2l0aCBhbnl0aGluZyB0aGF0IGltcGxpY2l0bHkgcnVucyBgZ2l0IGZldGNoYCBvbgordGhlIHJlbW90ZSB0byBiZSBwdXNoZWQgdG8gaW4gdGhlIGJhY2tncm91bmQsIGUuZy4gYGdpdCBmZXRjaCBvcmlnaW5gCitvbiB5b3VyIHJlcG9zaXRvcnkgaW4gYSBjcm9uam9iLgorKworVGhlIHByb3RlY3Rpb24gaXQgb2ZmZXJzIG92ZXIgYC0tZm9yY2VgIGlzIGVuc3VyaW5nIHRoYXQgc3Vic2VxdWVudAorY2hhbmdlcyB5b3VyIHdvcmsgd2Fzbid0IGJhc2VkIG9uIGFyZW4ndCBjbG9iYmVyZWQsIGJ1dCB0aGlzIGlzCit0cml2aWFsbHkgZGVmZWF0ZWQgaWYgc29tZSBiYWNrZ3JvdW5kIHByb2Nlc3MgaXMgdXBkYXRpbmcgcmVmcyBpbiB0aGUKK2JhY2tncm91bmQuIFdlIGRvbid0IGhhdmUgYW55dGhpbmcgZXhjZXB0IHRoZSByZW1vdGUgdHJhY2tpbmcgaW5mbyB0bworZ28gYnkgYXMgYSBoZXVyaXN0aWMgZm9yIHJlZnMgeW91J3JlIGV4cGVjdGVkIHRvIGhhdmUgc2VlbiAmIGFyZQord2lsbGluZyB0byBjbG9iYmVyLgorKworSWYgeW91ciBlZGl0b3Igb3Igc29tZSBvdGhlciBzeXN0ZW0gaXMgcnVubmluZyBgZ2l0IGZldGNoYCBpbiB0aGUKK2JhY2tncm91bmQgZm9yIHlvdSBhIHdheSB0byBtaXRpZ2F0ZSB0aGlzIGlzIHRvIHNpbXBseSBzZXQgdXAgYW5vdGhlcgorcmVtb3RlOgorKworCWdpdCByZW1vdGUgYWRkIG9yaWdpbi1wdXNoICQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkKKwlnaXQgZmV0Y2ggb3JpZ2luLXB1c2gKKysKK05vdyB3aGVuIHRoZSBiYWNrZ3JvdW5kIHByb2Nlc3MgcnVucyBgZ2l0IGZldGNoIG9yaWdpbmAgdGhlIHJlZmVyZW5jZXMKK29uIGBvcmlnaW4tcHVzaGAgd29uJ3QgYmUgdXBkYXRlZCwgYW5kIHRodXMgY29tbWFuZHMgbGlrZToKKysKKwlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2Ugb3JpZ2luLXB1c2gKKysKK1dpbGwgZmFpbCB1bmxlc3MgeW91IG1hbnVhbGx5IHJ1biBgZ2l0IGZldGNoIG9yaWdpbi1wdXNoYC4gVGhpcyBtZXRob2QKK2lzIG9mIGNvdXJzZSBlbnRpcmVseSBkZWZlYXRlZCBieSBzb21ldGhpbmcgdGhhdCBydW5zIGBnaXQgZmV0Y2gKKy0tYWxsYCwgaW4gdGhhdCBjYXNlIHlvdSdkIG5lZWQgdG8gZWl0aGVyIGRpc2FibGUgaXQgb3IgZG8gc29tZXRoaW5nCittb3JlIHRlZGlvdXMgbGlrZToKKysKKwlnaXQgZmV0Y2ggICAgICAgICAgICAgICMgdXBkYXRlICdtYXN0ZXInIGZyb20gcmVtb3RlCisJZ2l0IHRhZyBiYXNlIG1hc3RlciAgICAjIG1hcmsgb3VyIGJhc2UgcG9pbnQKKwlnaXQgcmViYXNlIC1pIG1hc3RlciAgICMgcmV3cml0ZSBzb21lIGNvbW1pdHMKKwlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyOmJhc2UgbWFzdGVyOm1hc3RlcgorKworSS5lLiBjcmVhdGUgYSBgYmFzZWAgdGFnIGZvciB2ZXJzaW9ucyBvZiB0aGUgdXBzdHJlYW0gY29kZSB0aGF0IHlvdSd2ZQorc2VlbiBhbmQgYXJlIHdpbGxpbmcgdG8gb3ZlcndyaXRlLCB0aGVuIHJld3JpdGUgaGlzdG9yeSwgYW5kIGZpbmFsbHkKK2ZvcmNlIHB1c2ggY2hhbmdlcyB0byBgbWFzdGVyYCBpZiB0aGUgcmVtb3RlIHZlcnNpb24gaXMgc3RpbGwgYXQKK2BiYXNlYCwgcmVnYXJkbGVzcyBvZiB3aGF0IHlvdXIgbG9jYWwgYHJlbW90ZXMvb3JpZ2luL21hc3RlcmAgaGFzIGJlZW4KK3VwZGF0ZWQgdG8gaW4gdGhlIGJhY2tncm91bmQuCisKKy1mOjoKKy0tZm9yY2U6OgorCVVzdWFsbHksIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IGlzCisJbm90IGFuIGFuY2VzdG9yIG9mIHRoZSBsb2NhbCByZWYgdXNlZCB0byBvdmVyd3JpdGUgaXQuCisJQWxzbywgd2hlbiBgLS1mb3JjZS13aXRoLWxlYXNlYCBvcHRpb24gaXMgdXNlZCwgdGhlIGNvbW1hbmQgcmVmdXNlcworCXRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgd2hvc2UgY3VycmVudCB2YWx1ZSBkb2VzIG5vdCBtYXRjaAorCXdoYXQgaXMgZXhwZWN0ZWQuCisrCitUaGlzIGZsYWcgZGlzYWJsZXMgdGhlc2UgY2hlY2tzLCBhbmQgY2FuIGNhdXNlIHRoZSByZW1vdGUgcmVwb3NpdG9yeQordG8gbG9zZSBjb21taXRzOyB1c2UgaXQgd2l0aCBjYXJlLgorKworTm90ZSB0aGF0IGAtLWZvcmNlYCBhcHBsaWVzIHRvIGFsbCB0aGUgcmVmcyB0aGF0IGFyZSBwdXNoZWQsIGhlbmNlCit1c2luZyBpdCB3aXRoIGBwdXNoLmRlZmF1bHRgIHNldCB0byBgbWF0Y2hpbmdgIG9yIHdpdGggbXVsdGlwbGUgcHVzaAorZGVzdGluYXRpb25zIGNvbmZpZ3VyZWQgd2l0aCBgcmVtb3RlLioucHVzaGAgbWF5IG92ZXJ3cml0ZSByZWZzCitvdGhlciB0aGFuIHRoZSBjdXJyZW50IGJyYW5jaCAoaW5jbHVkaW5nIGxvY2FsIHJlZnMgdGhhdCBhcmUKK3N0cmljdGx5IGJlaGluZCB0aGVpciByZW1vdGUgY291bnRlcnBhcnQpLiAgVG8gZm9yY2UgYSBwdXNoIHRvIG9ubHkKK29uZSBicmFuY2gsIHVzZSBhIGArYCBpbiBmcm9udCBvZiB0aGUgcmVmc3BlYyB0byBwdXNoIChlLmcgYGdpdCBwdXNoCitvcmlnaW4gK21hc3RlcmAgdG8gZm9yY2UgYSBwdXNoIHRvIHRoZSBgbWFzdGVyYCBicmFuY2gpLiBTZWUgdGhlCitgPHJlZnNwZWM+Li4uYCBzZWN0aW9uIGFib3ZlIGZvciBkZXRhaWxzLgorCistLXJlcG89PHJlcG9zaXRvcnk+OjoKKwlUaGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSA8cmVwb3NpdG9yeT4gYXJndW1lbnQuIElmIGJvdGgKKwlhcmUgc3BlY2lmaWVkLCB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50IHRha2VzIHByZWNlZGVuY2UuCisKKy11OjoKKy0tc2V0LXVwc3RyZWFtOjoKKwlGb3IgZXZlcnkgYnJhbmNoIHRoYXQgaXMgdXAgdG8gZGF0ZSBvciBzdWNjZXNzZnVsbHkgcHVzaGVkLCBhZGQKKwl1cHN0cmVhbSAodHJhY2tpbmcpIHJlZmVyZW5jZSwgdXNlZCBieSBhcmd1bWVudC1sZXNzCisJbGlua2dpdDpnaXQtcHVsbFsxXSBhbmQgb3RoZXIgY29tbWFuZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLAorCXNlZSBgYnJhbmNoLjxuYW1lPi5tZXJnZWAgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCistLVtuby1ddGhpbjo6CisJVGhlc2Ugb3B0aW9ucyBhcmUgcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LXNlbmQtcGFja1sxXS4gQSB0aGluIHRyYW5zZmVyCisJc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRoZSBhbW91bnQgb2Ygc2VudCBkYXRhIHdoZW4gdGhlIHNlbmRlciBhbmQKKwlyZWNlaXZlciBzaGFyZSBtYW55IG9mIHRoZSBzYW1lIG9iamVjdHMgaW4gY29tbW9uLiBUaGUgZGVmYXVsdCBpcworCWAtLXRoaW5gLgorCistcTo6CistLXF1aWV0OjoKKwlTdXBwcmVzcyBhbGwgb3V0cHV0LCBpbmNsdWRpbmcgdGhlIGxpc3Rpbmcgb2YgdXBkYXRlZCByZWZzLAorCXVubGVzcyBhbiBlcnJvciBvY2N1cnMuIFByb2dyZXNzIGlzIG5vdCByZXBvcnRlZCB0byB0aGUgc3RhbmRhcmQKKwllcnJvciBzdHJlYW0uCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUnVuIHZlcmJvc2VseS4KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZQorCXN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2t8b24tZGVtYW5kfG9ubHl8bm86OgorCU1heSBiZSB1c2VkIHRvIG1ha2Ugc3VyZSBhbGwgc3VibW9kdWxlIGNvbW1pdHMgdXNlZCBieSB0aGUKKwlyZXZpc2lvbnMgdG8gYmUgcHVzaGVkIGFyZSBhdmFpbGFibGUgb24gYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLgorCUlmICdjaGVjaycgaXMgdXNlZCBHaXQgd2lsbCB2ZXJpZnkgdGhhdCBhbGwgc3VibW9kdWxlIGNvbW1pdHMgdGhhdAorCWNoYW5nZWQgaW4gdGhlIHJldmlzaW9ucyB0byBiZSBwdXNoZWQgYXJlIGF2YWlsYWJsZSBvbiBhdCBsZWFzdCBvbmUKKwlyZW1vdGUgb2YgdGhlIHN1Ym1vZHVsZS4gSWYgYW55IGNvbW1pdHMgYXJlIG1pc3NpbmcgdGhlIHB1c2ggd2lsbAorCWJlIGFib3J0ZWQgYW5kIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuIElmICdvbi1kZW1hbmQnIGlzIHVzZWQKKwlhbGwgc3VibW9kdWxlcyB0aGF0IGNoYW5nZWQgaW4gdGhlIHJldmlzaW9ucyB0byBiZSBwdXNoZWQgd2lsbCBiZQorCXB1c2hlZC4gSWYgb24tZGVtYW5kIHdhcyBub3QgYWJsZSB0byBwdXNoIGFsbCBuZWNlc3NhcnkgcmV2aXNpb25zIGl0IHdpbGwKKwlhbHNvIGJlIGFib3J0ZWQgYW5kIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuIElmICdvbmx5JyBpcyB1c2VkIGFsbAorCXN1Ym1vZHVsZXMgd2lsbCBiZSByZWN1cnNpdmVseSBwdXNoZWQgd2hpbGUgdGhlIHN1cGVycHJvamVjdCBpcyBsZWZ0CisJdW5wdXNoZWQuIEEgdmFsdWUgb2YgJ25vJyBvciB1c2luZyBgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXNgIGNhbiBiZSB1c2VkCisJdG8gb3ZlcnJpZGUgdGhlIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB3aGVuIG5vCisJc3VibW9kdWxlIHJlY3Vyc2lvbiBpcyByZXF1aXJlZC4KKworLS1bbm8tXXZlcmlmeTo6CisJVG9nZ2xlIHRoZSBwcmUtcHVzaCBob29rIChzZWUgbGlua2dpdDpnaXRob29rc1s1XSkuICBUaGUKKwlkZWZhdWx0IGlzIC0tdmVyaWZ5LCBnaXZpbmcgdGhlIGhvb2sgYSBjaGFuY2UgdG8gcHJldmVudCB0aGUKKwlwdXNoLiAgV2l0aCAtLW5vLXZlcmlmeSwgdGhlIGhvb2sgaXMgYnlwYXNzZWQgY29tcGxldGVseS4KKworLTQ6OgorLS1pcHY0OjoKKwlVc2UgSVB2NCBhZGRyZXNzZXMgb25seSwgaWdub3JpbmcgSVB2NiBhZGRyZXNzZXMuCisKKy02OjoKKy0taXB2Njo6CisJVXNlIElQdjYgYWRkcmVzc2VzIG9ubHksIGlnbm9yaW5nIElQdjQgYWRkcmVzc2VzLgorCitpbmNsdWRlOjp1cmxzLXJlbW90ZXMudHh0W10KKworT1VUUFVUCistLS0tLS0KKworVGhlIG91dHB1dCBvZiAiZ2l0IHB1c2giIGRlcGVuZHMgb24gdGhlIHRyYW5zcG9ydCBtZXRob2QgdXNlZDsgdGhpcworc2VjdGlvbiBkZXNjcmliZXMgdGhlIG91dHB1dCB3aGVuIHB1c2hpbmcgb3ZlciB0aGUgR2l0IHByb3RvY29sIChlaXRoZXIKK2xvY2FsbHkgb3IgdmlhIHNzaCkuCisKK1RoZSBzdGF0dXMgb2YgdGhlIHB1c2ggaXMgb3V0cHV0IGluIHRhYnVsYXIgZm9ybSwgd2l0aCBlYWNoIGxpbmUKK3JlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIGEgc2luZ2xlIHJlZi4gRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgPGZsYWc+IDxzdW1tYXJ5PiA8ZnJvbT4gLT4gPHRvPiAoPHJlYXNvbj4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIC0tcG9yY2VsYWluIGlzIHVzZWQsIHRoZW4gZWFjaCBsaW5lIG9mIHRoZSBvdXRwdXQgaXMgb2YgdGhlIGZvcm06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyA8ZmxhZz4gXHQgPGZyb20+Ojx0bz4gXHQgPHN1bW1hcnk+ICg8cmVhc29uPikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHN0YXR1cyBvZiB1cC10by1kYXRlIHJlZnMgaXMgc2hvd24gb25seSBpZiAtLXBvcmNlbGFpbiBvciAtLXZlcmJvc2UKK29wdGlvbiBpcyB1c2VkLgorCitmbGFnOjoKKwlBIHNpbmdsZSBjaGFyYWN0ZXIgaW5kaWNhdGluZyB0aGUgc3RhdHVzIG9mIHRoZSByZWY6Cisoc3BhY2UpOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IHB1c2hlZCBmYXN0LWZvcndhcmQ7CitgK2A7OyBmb3IgYSBzdWNjZXNzZnVsIGZvcmNlZCB1cGRhdGU7CitgLWA7OyBmb3IgYSBzdWNjZXNzZnVsbHkgZGVsZXRlZCByZWY7CitgKmA7OyBmb3IgYSBzdWNjZXNzZnVsbHkgcHVzaGVkIG5ldyByZWY7CitgIWA7OyBmb3IgYSByZWYgdGhhdCB3YXMgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIHB1c2g7IGFuZAorYD1gOzsgZm9yIGEgcmVmIHRoYXQgd2FzIHVwIHRvIGRhdGUgYW5kIGRpZCBub3QgbmVlZCBwdXNoaW5nLgorCitzdW1tYXJ5OjoKKwlGb3IgYSBzdWNjZXNzZnVsbHkgcHVzaGVkIHJlZiwgdGhlIHN1bW1hcnkgc2hvd3MgdGhlIG9sZCBhbmQgbmV3CisJdmFsdWVzIG9mIHRoZSByZWYgaW4gYSBmb3JtIHN1aXRhYmxlIGZvciB1c2luZyBhcyBhbiBhcmd1bWVudCB0bworCWBnaXQgbG9nYCAodGhpcyBpcyBgPG9sZD4uLjxuZXc+YCBpbiBtb3N0IGNhc2VzLCBhbmQKKwlgPG9sZD4uLi48bmV3PmAgZm9yIGZvcmNlZCBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMpLgorKworRm9yIGEgZmFpbGVkIHVwZGF0ZSwgbW9yZSBkZXRhaWxzIGFyZSBnaXZlbjoKKysKKy0tCityZWplY3RlZDo6CisJR2l0IGRpZCBub3QgdHJ5IHRvIHNlbmQgdGhlIHJlZiBhdCBhbGwsIHR5cGljYWxseSBiZWNhdXNlIGl0CisJaXMgbm90IGEgZmFzdC1mb3J3YXJkIGFuZCB5b3UgZGlkIG5vdCBmb3JjZSB0aGUgdXBkYXRlLgorCityZW1vdGUgcmVqZWN0ZWQ6OgorCVRoZSByZW1vdGUgZW5kIHJlZnVzZWQgdGhlIHVwZGF0ZS4gIFVzdWFsbHkgY2F1c2VkIGJ5IGEgaG9vaworCW9uIHRoZSByZW1vdGUgc2lkZSwgb3IgYmVjYXVzZSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgaGFzIG9uZQorCW9mIHRoZSBmb2xsb3dpbmcgc2FmZXR5IG9wdGlvbnMgaW4gZWZmZWN0OgorCWByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoYCAoZm9yIHB1c2hlcyB0byB0aGUgY2hlY2tlZCBvdXQKKwlicmFuY2gpLCBgcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzYCAoZm9yIGZvcmNlZAorCW5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcyksIGByZWNlaXZlLmRlbnlEZWxldGVzYCBvcgorCWByZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50YC4gIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK3JlbW90ZSBmYWlsdXJlOjoKKwlUaGUgcmVtb3RlIGVuZCBkaWQgbm90IHJlcG9ydCB0aGUgc3VjY2Vzc2Z1bCB1cGRhdGUgb2YgdGhlIHJlZiwKKwlwZXJoYXBzIGJlY2F1c2Ugb2YgYSB0ZW1wb3JhcnkgZXJyb3Igb24gdGhlIHJlbW90ZSBzaWRlLCBhCisJYnJlYWsgaW4gdGhlIG5ldHdvcmsgY29ubmVjdGlvbiwgb3Igb3RoZXIgdHJhbnNpZW50IGVycm9yLgorLS0KKworZnJvbTo6CisJVGhlIG5hbWUgb2YgdGhlIGxvY2FsIHJlZiBiZWluZyBwdXNoZWQsIG1pbnVzIGl0cworCWByZWZzLzx0eXBlPi9gIHByZWZpeC4gSW4gdGhlIGNhc2Ugb2YgZGVsZXRpb24sIHRoZQorCW5hbWUgb2YgdGhlIGxvY2FsIHJlZiBpcyBvbWl0dGVkLgorCit0bzo6CisJVGhlIG5hbWUgb2YgdGhlIHJlbW90ZSByZWYgYmVpbmcgdXBkYXRlZCwgbWludXMgaXRzCisJYHJlZnMvPHR5cGU+L2AgcHJlZml4LgorCityZWFzb246OgorCUEgaHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb24uIEluIHRoZSBjYXNlIG9mIHN1Y2Nlc3NmdWxseSBwdXNoZWQKKwlyZWZzLCBubyBleHBsYW5hdGlvbiBpcyBuZWVkZWQuIEZvciBhIGZhaWxlZCByZWYsIHRoZSByZWFzb24gZm9yCisJZmFpbHVyZSBpcyBkZXNjcmliZWQuCisKK05PVEUgQUJPVVQgRkFTVC1GT1JXQVJEUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYW4gdXBkYXRlIGNoYW5nZXMgYSBicmFuY2ggKG9yIG1vcmUgaW4gZ2VuZXJhbCwgYSByZWYpIHRoYXQgdXNlZCB0bworcG9pbnQgYXQgY29tbWl0IEEgdG8gcG9pbnQgYXQgYW5vdGhlciBjb21taXQgQiwgaXQgaXMgY2FsbGVkIGEKK2Zhc3QtZm9yd2FyZCB1cGRhdGUgaWYgYW5kIG9ubHkgaWYgQiBpcyBhIGRlc2NlbmRhbnQgb2YgQS4KKworSW4gYSBmYXN0LWZvcndhcmQgdXBkYXRlIGZyb20gQSB0byBCLCB0aGUgc2V0IG9mIGNvbW1pdHMgdGhhdCB0aGUgb3JpZ2luYWwKK2NvbW1pdCBBIGJ1aWx0IG9uIHRvcCBvZiBpcyBhIHN1YnNldCBvZiB0aGUgY29tbWl0cyB0aGUgbmV3IGNvbW1pdCBCCitidWlsZHMgb24gdG9wIG9mLiAgSGVuY2UsIGl0IGRvZXMgbm90IGxvc2UgYW55IGhpc3RvcnkuCisKK0luIGNvbnRyYXN0LCBhIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlIHdpbGwgbG9zZSBoaXN0b3J5LiAgRm9yIGV4YW1wbGUsCitzdXBwb3NlIHlvdSBhbmQgc29tZWJvZHkgZWxzZSBzdGFydGVkIGF0IHRoZSBzYW1lIGNvbW1pdCBYLCBhbmQgeW91IGJ1aWx0CithIGhpc3RvcnkgbGVhZGluZyB0byBjb21taXQgQiB3aGlsZSB0aGUgb3RoZXIgcGVyc29uIGJ1aWx0IGEgaGlzdG9yeQorbGVhZGluZyB0byBjb21taXQgQS4gIFRoZSBoaXN0b3J5IGxvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBCCisgICAgIC8KKyAtLS1YLS0tQQorCistLS0tLS0tLS0tLS0tLS0tCisKK0Z1cnRoZXIgc3VwcG9zZSB0aGF0IHRoZSBvdGhlciBwZXJzb24gYWxyZWFkeSBwdXNoZWQgY2hhbmdlcyBsZWFkaW5nIHRvIEEKK2JhY2sgdG8gdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnkgZnJvbSB3aGljaCB5b3UgdHdvIG9idGFpbmVkIHRoZSBvcmlnaW5hbAorY29tbWl0IFguCisKK1RoZSBwdXNoIGRvbmUgYnkgdGhlIG90aGVyIHBlcnNvbiB1cGRhdGVkIHRoZSBicmFuY2ggdGhhdCB1c2VkIHRvIHBvaW50IGF0Citjb21taXQgWCB0byBwb2ludCBhdCBjb21taXQgQS4gIEl0IGlzIGEgZmFzdC1mb3J3YXJkLgorCitCdXQgaWYgeW91IHRyeSB0byBwdXNoLCB5b3Ugd2lsbCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgYnJhbmNoICh0aGF0Citub3cgcG9pbnRzIGF0IEEpIHdpdGggY29tbWl0IEIuICBUaGlzIGRvZXMgX25vdF8gZmFzdC1mb3J3YXJkLiAgSWYgeW91IGRpZAorc28sIHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgY29tbWl0IEEgd2lsbCBiZSBsb3N0LCBiZWNhdXNlIGV2ZXJ5Ym9keQord2lsbCBub3cgc3RhcnQgYnVpbGRpbmcgb24gdG9wIG9mIEIuCisKK1RoZSBjb21tYW5kIGJ5IGRlZmF1bHQgZG9lcyBub3QgYWxsb3cgYW4gdXBkYXRlIHRoYXQgaXMgbm90IGEgZmFzdC1mb3J3YXJkCit0byBwcmV2ZW50IHN1Y2ggbG9zcyBvZiBoaXN0b3J5LgorCitJZiB5b3UgZG8gbm90IHdhbnQgdG8gbG9zZSB5b3VyIHdvcmsgKGhpc3RvcnkgZnJvbSBYIHRvIEIpIG9yIHRoZSB3b3JrIGJ5Cit0aGUgb3RoZXIgcGVyc29uIChoaXN0b3J5IGZyb20gWCB0byBBKSwgeW91IHdvdWxkIG5lZWQgdG8gZmlyc3QgZmV0Y2ggdGhlCitoaXN0b3J5IGZyb20gdGhlIHJlcG9zaXRvcnksIGNyZWF0ZSBhIGhpc3RvcnkgdGhhdCBjb250YWlucyBjaGFuZ2VzIGRvbmUKK2J5IGJvdGggcGFydGllcywgYW5kIHB1c2ggdGhlIHJlc3VsdCBiYWNrLgorCitZb3UgY2FuIHBlcmZvcm0gImdpdCBwdWxsIiwgcmVzb2x2ZSBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgImdpdCBwdXNoIgordGhlIHJlc3VsdC4gIEEgImdpdCBwdWxsIiB3aWxsIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCBDIGJldHdlZW4gY29tbWl0cyBBCithbmQgQi4KKworLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBCLS0tQworICAgICAvICAgLworIC0tLVgtLS1BCisKKy0tLS0tLS0tLS0tLS0tLS0KKworVXBkYXRpbmcgQSB3aXRoIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0IHdpbGwgZmFzdC1mb3J3YXJkIGFuZCB5b3VyCitwdXNoIHdpbGwgYmUgYWNjZXB0ZWQuCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gcmViYXNlIHlvdXIgY2hhbmdlIGJldHdlZW4gWCBhbmQgQiBvbiB0b3Agb2YgQSwKK3dpdGggImdpdCBwdWxsIC0tcmViYXNlIiwgYW5kIHB1c2ggdGhlIHJlc3VsdCBiYWNrLiAgVGhlIHJlYmFzZSB3aWxsCitjcmVhdGUgYSBuZXcgY29tbWl0IEQgdGhhdCBidWlsZHMgdGhlIGNoYW5nZSBiZXR3ZWVuIFggYW5kIEIgb24gdG9wIG9mCitBLgorCistLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIEIgICBECisgICAgIC8gICAvCisgLS0tWC0tLUEKKworLS0tLS0tLS0tLS0tLS0tLQorCitBZ2FpbiwgdXBkYXRpbmcgQSB3aXRoIHRoaXMgY29tbWl0IHdpbGwgZmFzdC1mb3J3YXJkIGFuZCB5b3VyIHB1c2ggd2lsbCBiZQorYWNjZXB0ZWQuCisKK1RoZXJlIGlzIGFub3RoZXIgY29tbW9uIHNpdHVhdGlvbiB3aGVyZSB5b3UgbWF5IGVuY291bnRlciBub24tZmFzdC1mb3J3YXJkCityZWplY3Rpb24gd2hlbiB5b3UgdHJ5IHRvIHB1c2gsIGFuZCBpdCBpcyBwb3NzaWJsZSBldmVuIHdoZW4geW91IGFyZQorcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSBub2JvZHkgZWxzZSBwdXNoZXMgaW50by4gQWZ0ZXIgeW91IHB1c2ggY29tbWl0CitBIHlvdXJzZWxmIChpbiB0aGUgZmlyc3QgcGljdHVyZSBpbiB0aGlzIHNlY3Rpb24pLCByZXBsYWNlIGl0IHdpdGggImdpdAorY29tbWl0IC0tYW1lbmQiIHRvIHByb2R1Y2UgY29tbWl0IEIsIGFuZCB5b3UgdHJ5IHRvIHB1c2ggaXQgb3V0LCBiZWNhdXNlCitmb3Jnb3QgdGhhdCB5b3UgaGF2ZSBwdXNoZWQgQSBvdXQgYWxyZWFkeS4gSW4gc3VjaCBhIGNhc2UsIGFuZCBvbmx5IGlmCit5b3UgYXJlIGNlcnRhaW4gdGhhdCBub2JvZHkgaW4gdGhlIG1lYW50aW1lIGZldGNoZWQgeW91ciBlYXJsaWVyIGNvbW1pdCBBCisoYW5kIHN0YXJ0ZWQgYnVpbGRpbmcgb24gdG9wIG9mIGl0KSwgeW91IGNhbiBydW4gImdpdCBwdXNoIC0tZm9yY2UiIHRvCitvdmVyd3JpdGUgaXQuIEluIG90aGVyIHdvcmRzLCAiZ2l0IHB1c2ggLS1mb3JjZSIgaXMgYSBtZXRob2QgcmVzZXJ2ZWQgZm9yCithIGNhc2Ugd2hlcmUgeW91IGRvIG1lYW4gdG8gbG9zZSBoaXN0b3J5LgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitgZ2l0IHB1c2hgOjoKKwlXb3JrcyBsaWtlIGBnaXQgcHVzaCA8cmVtb3RlPmAsIHdoZXJlIDxyZW1vdGU+IGlzIHRoZQorCWN1cnJlbnQgYnJhbmNoJ3MgcmVtb3RlIChvciBgb3JpZ2luYCwgaWYgbm8gcmVtb3RlIGlzCisJY29uZmlndXJlZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoKS4KKworYGdpdCBwdXNoIG9yaWdpbmA6OgorCVdpdGhvdXQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uLCBwdXNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIHRvCisJdGhlIGNvbmZpZ3VyZWQgdXBzdHJlYW0gKGByZW1vdGUub3JpZ2luLm1lcmdlYCBjb25maWd1cmF0aW9uCisJdmFyaWFibGUpIGlmIGl0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBjdXJyZW50IGJyYW5jaCwgYW5kCisJZXJyb3JzIG91dCB3aXRob3V0IHB1c2hpbmcgb3RoZXJ3aXNlLgorKworVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhpcyBjb21tYW5kIHdoZW4gbm8gPHJlZnNwZWM+IGlzIGdpdmVuIGNhbiBiZQorY29uZmlndXJlZCBieSBzZXR0aW5nIHRoZSBgcHVzaGAgb3B0aW9uIG9mIHRoZSByZW1vdGUsIG9yIHRoZSBgcHVzaC5kZWZhdWx0YAorY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKysKK0ZvciBleGFtcGxlLCB0byBkZWZhdWx0IHRvIHB1c2hpbmcgb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gYG9yaWdpbmAKK3VzZSBgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2ggSEVBRGAuICBBbnkgdmFsaWQgPHJlZnNwZWM+IChsaWtlCit0aGUgb25lcyBpbiB0aGUgZXhhbXBsZXMgYmVsb3cpIGNhbiBiZSBjb25maWd1cmVkIGFzIHRoZSBkZWZhdWx0IGZvcgorYGdpdCBwdXNoIG9yaWdpbmAuCisKK2BnaXQgcHVzaCBvcmlnaW4gOmA6OgorCVB1c2ggIm1hdGNoaW5nIiBicmFuY2hlcyB0byBgb3JpZ2luYC4gU2VlCisJPHJlZnNwZWM+IGluIHRoZSA8PE9QVElPTlMsT1BUSU9OUz4+IHNlY3Rpb24gYWJvdmUgZm9yIGEKKwlkZXNjcmlwdGlvbiBvZiAibWF0Y2hpbmciIGJyYW5jaGVzLgorCitgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcmA6OgorCUZpbmQgYSByZWYgdGhhdCBtYXRjaGVzIGBtYXN0ZXJgIGluIHRoZSBzb3VyY2UgcmVwb3NpdG9yeQorCShtb3N0IGxpa2VseSwgaXQgd291bGQgZmluZCBgcmVmcy9oZWFkcy9tYXN0ZXJgKSwgYW5kIHVwZGF0ZQorCXRoZSBzYW1lIHJlZiAoZS5nLiBgcmVmcy9oZWFkcy9tYXN0ZXJgKSBpbiBgb3JpZ2luYCByZXBvc2l0b3J5CisJd2l0aCBpdC4gIElmIGBtYXN0ZXJgIGRpZCBub3QgZXhpc3QgcmVtb3RlbHksIGl0IHdvdWxkIGJlCisJY3JlYXRlZC4KKworYGdpdCBwdXNoIG9yaWdpbiBIRUFEYDo6CisJQSBoYW5keSB3YXkgdG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIHNhbWUgbmFtZSBvbiB0aGUKKwlyZW1vdGUuCisKK2BnaXQgcHVzaCBtb3RoZXJzaGlwIG1hc3RlcjpzYXRlbGxpdGUvbWFzdGVyIGRldjpzYXRlbGxpdGUvZGV2YDo6CisJVXNlIHRoZSBzb3VyY2UgcmVmIHRoYXQgbWF0Y2hlcyBgbWFzdGVyYCAoZS5nLiBgcmVmcy9oZWFkcy9tYXN0ZXJgKQorCXRvIHVwZGF0ZSB0aGUgcmVmIHRoYXQgbWF0Y2hlcyBgc2F0ZWxsaXRlL21hc3RlcmAgKG1vc3QgcHJvYmFibHkKKwlgcmVmcy9yZW1vdGVzL3NhdGVsbGl0ZS9tYXN0ZXJgKSBpbiB0aGUgYG1vdGhlcnNoaXBgIHJlcG9zaXRvcnk7CisJZG8gdGhlIHNhbWUgZm9yIGBkZXZgIGFuZCBgc2F0ZWxsaXRlL2RldmAuCisrCitTZWUgdGhlIHNlY3Rpb24gZGVzY3JpYmluZyBgPHJlZnNwZWM+Li4uYCBhYm92ZSBmb3IgYSBkaXNjdXNzaW9uIG9mCit0aGUgbWF0Y2hpbmcgc2VtYW50aWNzLgorKworVGhpcyBpcyB0byBlbXVsYXRlIGBnaXQgZmV0Y2hgIHJ1biBvbiB0aGUgYG1vdGhlcnNoaXBgIHVzaW5nIGBnaXQKK3B1c2hgIHRoYXQgaXMgcnVuIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gaW4gb3JkZXIgdG8gaW50ZWdyYXRlCit0aGUgd29yayBkb25lIG9uIGBzYXRlbGxpdGVgLCBhbmQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHdoZW4geW91IGNhbgorb25seSBtYWtlIGNvbm5lY3Rpb24gaW4gb25lIHdheSAoaS5lLiBzYXRlbGxpdGUgY2FuIHNzaCBpbnRvCittb3RoZXJzaGlwIGJ1dCBtb3RoZXJzaGlwIGNhbm5vdCBpbml0aWF0ZSBjb25uZWN0aW9uIHRvIHNhdGVsbGl0ZQorYmVjYXVzZSB0aGUgbGF0dGVyIGlzIGJlaGluZCBhIGZpcmV3YWxsIG9yIGRvZXMgbm90IHJ1biBzc2hkKS4KKysKK0FmdGVyIHJ1bm5pbmcgdGhpcyBgZ2l0IHB1c2hgIG9uIHRoZSBgc2F0ZWxsaXRlYCBtYWNoaW5lLCB5b3Ugd291bGQKK3NzaCBpbnRvIHRoZSBgbW90aGVyc2hpcGAgYW5kIHJ1biBgZ2l0IG1lcmdlYCB0aGVyZSB0byBjb21wbGV0ZSB0aGUKK2VtdWxhdGlvbiBvZiBgZ2l0IHB1bGxgIHRoYXQgd2VyZSBydW4gb24gYG1vdGhlcnNoaXBgIHRvIHB1bGwgY2hhbmdlcworbWFkZSBvbiBgc2F0ZWxsaXRlYC4KKworYGdpdCBwdXNoIG9yaWdpbiBIRUFEOm1hc3RlcmA6OgorCVB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSByZW1vdGUgcmVmIG1hdGNoaW5nIGBtYXN0ZXJgIGluIHRoZQorCWBvcmlnaW5gIHJlcG9zaXRvcnkuIFRoaXMgZm9ybSBpcyBjb252ZW5pZW50IHRvIHB1c2ggdGhlIGN1cnJlbnQKKwlicmFuY2ggd2l0aG91dCB0aGlua2luZyBhYm91dCBpdHMgbG9jYWwgbmFtZS4KKworYGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXI6cmVmcy9oZWFkcy9leHBlcmltZW50YWxgOjoKKwlDcmVhdGUgdGhlIGJyYW5jaCBgZXhwZXJpbWVudGFsYCBpbiB0aGUgYG9yaWdpbmAgcmVwb3NpdG9yeQorCWJ5IGNvcHlpbmcgdGhlIGN1cnJlbnQgYG1hc3RlcmAgYnJhbmNoLiAgVGhpcyBmb3JtIGlzIG9ubHkKKwluZWVkZWQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBvciB0YWcgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHdoZW4KKwl0aGUgbG9jYWwgbmFtZSBhbmQgdGhlIHJlbW90ZSBuYW1lIGFyZSBkaWZmZXJlbnQ7IG90aGVyd2lzZSwKKwl0aGUgcmVmIG5hbWUgb24gaXRzIG93biB3aWxsIHdvcmsuCisKK2BnaXQgcHVzaCBvcmlnaW4gOmV4cGVyaW1lbnRhbGA6OgorCUZpbmQgYSByZWYgdGhhdCBtYXRjaGVzIGBleHBlcmltZW50YWxgIGluIHRoZSBgb3JpZ2luYCByZXBvc2l0b3J5CisJKGUuZy4gYHJlZnMvaGVhZHMvZXhwZXJpbWVudGFsYCksIGFuZCBkZWxldGUgaXQuCisKK2BnaXQgcHVzaCBvcmlnaW4gK2RldjptYXN0ZXJgOjoKKwlVcGRhdGUgdGhlIG9yaWdpbiByZXBvc2l0b3J5J3MgbWFzdGVyIGJyYW5jaCB3aXRoIHRoZSBkZXYgYnJhbmNoLAorCWFsbG93aW5nIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcy4gICpUaGlzIGNhbiBsZWF2ZSB1bnJlZmVyZW5jZWQKKwljb21taXRzIGRhbmdsaW5nIGluIHRoZSBvcmlnaW4gcmVwb3NpdG9yeS4qICBDb25zaWRlciB0aGUKKwlmb2xsb3dpbmcgc2l0dWF0aW9uLCB3aGVyZSBhIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGU6CisrCistLS0tCisJICAgIG8tLS1vLS0tby0tLUEtLS1CICBvcmlnaW4vbWFzdGVyCisJCSAgICAgXAorCQkgICAgICBYLS0tWS0tLVogIGRldgorLS0tLQorKworVGhlIGFib3ZlIGNvbW1hbmQgd291bGQgY2hhbmdlIHRoZSBvcmlnaW4gcmVwb3NpdG9yeSB0bworKworLS0tLQorCQkgICAgICBBLS0tQiAgKHVubmFtZWQgYnJhbmNoKQorCQkgICAgIC8KKwkgICAgby0tLW8tLS1vLS0tWC0tLVktLS1aICBtYXN0ZXIKKy0tLS0KKysKK0NvbW1pdHMgQSBhbmQgQiB3b3VsZCBubyBsb25nZXIgYmVsb25nIHRvIGEgYnJhbmNoIHdpdGggYSBzeW1ib2xpYyBuYW1lLAorYW5kIHNvIHdvdWxkIGJlIHVucmVhY2hhYmxlLiAgQXMgc3VjaCwgdGhlc2UgY29tbWl0cyB3b3VsZCBiZSByZW1vdmVkIGJ5CithIGBnaXQgZ2NgIGNvbW1hbmQgb24gdGhlIG9yaWdpbiByZXBvc2l0b3J5LgorCitpbmNsdWRlOjp0cmFuc2Zlci1kYXRhLWxlYWtzLnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcXVpbHRpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcXVpbHRpbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTYyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1xdWlsdGltcG9ydC50eHQKQEAgLTAsMCArMSw2NCBAQAorZ2l0LXF1aWx0aW1wb3J0KDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXF1aWx0aW1wb3J0IC0gQXBwbGllcyBhIHF1aWx0IHBhdGNoc2V0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHF1aWx0aW1wb3J0JyBbLS1kcnktcnVuIHwgLW5dIFstLWF1dGhvciA8YXV0aG9yPl0gWy0tcGF0Y2hlcyA8ZGlyPl0KKwkJWy0tc2VyaWVzIDxmaWxlPl0gWy0ta2VlcC1ub24tcGF0Y2hdCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBHaXQgYnJhbmNoLCBwcmVzZXJ2aW5nCit0aGUgcGF0Y2ggYm91bmRhcmllcywgcGF0Y2ggb3JkZXIsIGFuZCBwYXRjaCBkZXNjcmlwdGlvbnMgcHJlc2VudAoraW4gdGhlIHF1aWx0IHBhdGNoc2V0LgorCitGb3IgZWFjaCBwYXRjaCB0aGUgY29kZSBhdHRlbXB0cyB0byBleHRyYWN0IHRoZSBhdXRob3IgZnJvbSB0aGUKK3BhdGNoIGRlc2NyaXB0aW9uLiAgSWYgdGhhdCBmYWlscyBpdCBmYWxscyBiYWNrIHRvIHRoZSBhdXRob3IKK3NwZWNpZmllZCB3aXRoIC0tYXV0aG9yLiAgSWYgdGhlIC0tYXV0aG9yIGZsYWcgd2FzIG5vdCBnaXZlbgordGhlIHBhdGNoIGRlc2NyaXB0aW9uIGlzIGRpc3BsYXllZCBhbmQgdGhlIHVzZXIgaXMgYXNrZWQgdG8KK2ludGVyYWN0aXZlbHkgZW50ZXIgdGhlIGF1dGhvciBvZiB0aGUgcGF0Y2guCisKK0lmIGEgc3ViamVjdCBpcyBub3QgZm91bmQgaW4gdGhlIHBhdGNoIGRlc2NyaXB0aW9uIHRoZSBwYXRjaCBuYW1lIGlzCitwcmVzZXJ2ZWQgYXMgdGhlIDEgbGluZSBzdWJqZWN0IGluIHRoZSBHaXQgZGVzY3JpcHRpb24uCisKK09QVElPTlMKKy0tLS0tLS0KKworLW46OgorLS1kcnktcnVuOjoKKwlXYWxrIHRocm91Z2ggdGhlIHBhdGNoZXMgaW4gdGhlIHNlcmllcyBhbmQgd2FybgorCWlmIHdlIGNhbm5vdCBmaW5kIGFsbCBvZiB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNvbW1pdAorCWEgcGF0Y2guICBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcgb25seSBtaXNzaW5nIGF1dGhvcgorCWluZm9ybWF0aW9uIGlzIHdhcm5lZCBhYm91dC4KKworLS1hdXRob3IgQXV0aG9yIE5hbWUgPEF1dGhvciBFbWFpbD46OgorCVRoZSBhdXRob3IgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB0byB1c2Ugd2hlbiBubyBhdXRob3IKKwlpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGNoIGRlc2NyaXB0aW9uLgorCistLXBhdGNoZXMgPGRpcj46OgorCVRoZSBkaXJlY3RvcnkgdG8gZmluZCB0aGUgcXVpbHQgcGF0Y2hlcy4KKysKK1RoZSBkZWZhdWx0IGZvciB0aGUgcGF0Y2ggZGlyZWN0b3J5IGlzIHBhdGNoZXMKK29yIHRoZSB2YWx1ZSBvZiB0aGUgYCRRVUlMVF9QQVRDSEVTYCBlbnZpcm9ubWVudAordmFyaWFibGUuCisKKy0tc2VyaWVzIDxmaWxlPjo6CisJVGhlIHF1aWx0IHNlcmllcyBmaWxlLgorKworVGhlIGRlZmF1bHQgZm9yIHRoZSBzZXJpZXMgZmlsZSBpcyA8cGF0Y2hlcz4vc2VyaWVzCitvciB0aGUgdmFsdWUgb2YgdGhlIGAkUVVJTFRfU0VSSUVTYCBlbnZpcm9ubWVudAordmFyaWFibGUuCisKKy0ta2VlcC1ub24tcGF0Y2g6OgorCVBhc3MgYC1iYCBmbGFnIHRvICdnaXQgbWFpbGluZm8nIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJhbmdlLWRpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmFuZ2UtZGlmZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwMWMxZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJhbmdlLWRpZmYudHh0CkBAIC0wLDAgKzEsMjczIEBACitnaXQtcmFuZ2UtZGlmZigxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJhbmdlLWRpZmYgLSBDb21wYXJlIHR3byBjb21taXQgcmFuZ2VzIChlLmcuIHR3byB2ZXJzaW9ucyBvZiBhIGJyYW5jaCkKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJhbmdlLWRpZmYnIFstLWNvbG9yPVs8d2hlbj5dXSBbLS1uby1jb2xvcl0gWzxkaWZmLW9wdGlvbnM+XQorCVstLW5vLWR1YWwtY29sb3JdIFstLWNyZWF0aW9uLWZhY3Rvcj08ZmFjdG9yPl0KKwkoIDxyYW5nZTE+IDxyYW5nZTI+IHwgPHJldjE+Li4uPHJldjI+IHwgPGJhc2U+IDxyZXYxPiA8cmV2Mj4gKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBjb21tYW5kIHNob3dzIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byB2ZXJzaW9ucyBvZiBhIHBhdGNoCitzZXJpZXMsIG9yIG1vcmUgZ2VuZXJhbGx5LCB0d28gY29tbWl0IHJhbmdlcyAoaWdub3JpbmcgbWVyZ2UgY29tbWl0cykuCisKK1RvIHRoYXQgZW5kLCBpdCBmaXJzdCBmaW5kcyBwYWlycyBvZiBjb21taXRzIGZyb20gYm90aCBjb21taXQgcmFuZ2VzCit0aGF0IGNvcnJlc3BvbmQgd2l0aCBlYWNoIG90aGVyLiBUd28gY29tbWl0cyBhcmUgc2FpZCB0byBjb3JyZXNwb25kIHdoZW4KK3RoZSBkaWZmIGJldHdlZW4gdGhlaXIgcGF0Y2hlcyAoaS5lLiB0aGUgYXV0aG9yIGluZm9ybWF0aW9uLCB0aGUgY29tbWl0CittZXNzYWdlIGFuZCB0aGUgY29tbWl0IGRpZmYpIGlzIHJlYXNvbmFibHkgc21hbGwgY29tcGFyZWQgdG8gdGhlCitwYXRjaGVzJyBzaXplLiBTZWUgYGBBbGdvcml0aG1gYCBiZWxvdyBmb3IgZGV0YWlscy4KKworRmluYWxseSwgdGhlIGxpc3Qgb2YgbWF0Y2hpbmcgY29tbWl0cyBpcyBzaG93biBpbiB0aGUgb3JkZXIgb2YgdGhlCitzZWNvbmQgY29tbWl0IHJhbmdlLCB3aXRoIHVubWF0Y2hlZCBjb21taXRzIGJlaW5nIGluc2VydGVkIGp1c3QgYWZ0ZXIKK2FsbCBvZiB0aGVpciBhbmNlc3RvcnMgaGF2ZSBiZWVuIHNob3duLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tbm8tZHVhbC1jb2xvcjo6CisJV2hlbiB0aGUgY29tbWl0IGRpZmZzIGRpZmZlciwgYGdpdCByYW5nZS1kaWZmYCByZWNyZWF0ZXMgdGhlCisJb3JpZ2luYWwgZGlmZnMnIGNvbG9yaW5nLCBhbmQgYWRkcyBvdXRlciAtLysgZGlmZiBtYXJrZXJzIHdpdGgKKwl0aGUgKmJhY2tncm91bmQqIGJlaW5nIHJlZC9ncmVlbiB0byBtYWtlIGl0IGVhc2llciB0byBzZWUgZS5nLgorCXdoZW4gdGhlcmUgd2FzIGEgY2hhbmdlIGluIHdoYXQgZXhhY3QgbGluZXMgd2VyZSBhZGRlZC4KKysKK0FkZGl0aW9uYWxseSwgdGhlIGNvbW1pdCBkaWZmIGxpbmVzIHRoYXQgYXJlIG9ubHkgcHJlc2VudCBpbiB0aGUgZmlyc3QgY29tbWl0CityYW5nZSBhcmUgc2hvd24gImRpbW1lZCIgKHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIGBjb2xvci5kaWZmLjxzbG90PmAKK2NvbmZpZyBzZXR0aW5nIHdoZXJlIGA8c2xvdD5gIGlzIG9uZSBvZiBgY29udGV4dERpbW1lZGAsIGBvbGREaW1tZWRgIGFuZAorYG5ld0RpbW1lZGApLCBhbmQgdGhlIGNvbW1pdCBkaWZmIGxpbmVzIHRoYXQgYXJlIG9ubHkgcHJlc2VudCBpbiB0aGUgc2Vjb25kCitjb21taXQgcmFuZ2UgYXJlIHNob3duIGluIGJvbGQgKHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBjb25maWcKK3NldHRpbmdzIGBjb2xvci5kaWZmLjxzbG90PmAgd2l0aCBgPHNsb3Q+YCBiZWluZyBvbmUgb2YgYGNvbnRleHRCb2xkYCwKK2BvbGRCb2xkYCBvciBgbmV3Qm9sZGApLgorKworVGhpcyBpcyBrbm93biB0byBgcmFuZ2UtZGlmZmAgYXMgImR1YWwgY29sb3JpbmciLiBVc2UgYC0tbm8tZHVhbC1jb2xvcmAKK3RvIHJldmVydCB0byBjb2xvciBhbGwgbGluZXMgYWNjb3JkaW5nIHRvIHRoZSBvdXRlciBkaWZmIG1hcmtlcnMKKyhhbmQgY29tcGxldGVseSBpZ25vcmUgdGhlIGlubmVyIGRpZmYgd2hlbiBpdCBjb21lcyB0byBjb2xvcikuCisKKy0tY3JlYXRpb24tZmFjdG9yPTxwZXJjZW50Pjo6CisJU2V0IHRoZSBjcmVhdGlvbi9kZWxldGlvbiBjb3N0IGZ1ZGdlIGZhY3RvciB0byBgPHBlcmNlbnQ+YC4KKwlEZWZhdWx0cyB0byA2MC4gVHJ5IGEgbGFyZ2VyIHZhbHVlIGlmIGBnaXQgcmFuZ2UtZGlmZmAgZXJyb25lb3VzbHkKKwljb25zaWRlcnMgYSBsYXJnZSBjaGFuZ2UgYSB0b3RhbCByZXdyaXRlIChkZWxldGlvbiBvZiBvbmUgY29tbWl0CisJYW5kIGFkZGl0aW9uIG9mIGFub3RoZXIpLCBhbmQgYSBzbWFsbGVyIG9uZSBpbiB0aGUgcmV2ZXJzZSBjYXNlLgorCVNlZSB0aGUgYGBBbGdvcml0aG1gYCBzZWN0aW9uIGJlbG93IGZvciBhbiBleHBsYW5hdGlvbiB3aHkgdGhpcyBpcworCW5lZWRlZC4KKworLS1bbm8tXW5vdGVzWz08cmVmPl06OgorCVRoaXMgZmxhZyBpcyBwYXNzZWQgdG8gdGhlIGBnaXQgbG9nYCBwcm9ncmFtCisJKHNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0pIHRoYXQgZ2VuZXJhdGVzIHRoZSBwYXRjaGVzLgorCis8cmFuZ2UxPiA8cmFuZ2UyPjo6CisJQ29tcGFyZSB0aGUgY29tbWl0cyBzcGVjaWZpZWQgYnkgdGhlIHR3byByYW5nZXMsIHdoZXJlCisJYDxyYW5nZTE+YCBpcyBjb25zaWRlcmVkIGFuIG9sZGVyIHZlcnNpb24gb2YgYDxyYW5nZTI+YC4KKworPHJldjE+Li4uPHJldjI+OjoKKwlFcXVpdmFsZW50IHRvIHBhc3NpbmcgYDxyZXYyPi4uPHJldjE+YCBhbmQgYDxyZXYxPi4uPHJldjI+YC4KKworPGJhc2U+IDxyZXYxPiA8cmV2Mj46OgorCUVxdWl2YWxlbnQgdG8gcGFzc2luZyBgPGJhc2U+Li48cmV2MT5gIGFuZCBgPGJhc2U+Li48cmV2Mj5gLgorCU5vdGUgdGhhdCBgPGJhc2U+YCBkb2VzIG5vdCBuZWVkIHRvIGJlIHRoZSBleGFjdCBicmFuY2ggcG9pbnQKKwlvZiB0aGUgYnJhbmNoZXMuIEV4YW1wbGU6IGFmdGVyIHJlYmFzaW5nIGEgYnJhbmNoIGBteS10b3BpY2AsCisJYGdpdCByYW5nZS1kaWZmIG15LXRvcGljQHt1fSBteS10b3BpY0B7MX0gbXktdG9waWNgIHdvdWxkCisJc2hvdyB0aGUgZGlmZmVyZW5jZXMgaW50cm9kdWNlZCBieSB0aGUgcmViYXNlLgorCitgZ2l0IHJhbmdlLWRpZmZgIGFsc28gYWNjZXB0cyB0aGUgcmVndWxhciBkaWZmIG9wdGlvbnMgKHNlZQorbGlua2dpdDpnaXQtZGlmZlsxXSksIG1vc3Qgbm90YWJseSB0aGUgYC0tY29sb3I9Wzx3aGVuPl1gIGFuZAorYC0tbm8tY29sb3JgIG9wdGlvbnMuIFRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSAiZGlmZgorYmV0d2VlbiBwYXRjaGVzIiwgaS5lLiB0byBjb21wYXJlIHRoZSBhdXRob3IsIGNvbW1pdCBtZXNzYWdlIGFuZCBkaWZmIG9mCitjb3JyZXNwb25kaW5nIG9sZC9uZXcgY29tbWl0cy4gVGhlcmUgaXMgY3VycmVudGx5IG5vIG1lYW5zIHRvIHR3ZWFrIG1vc3Qgb2YgdGhlCitkaWZmIG9wdGlvbnMgcGFzc2VkIHRvIGBnaXQgbG9nYCB3aGVuIGdlbmVyYXRpbmcgdGhvc2UgcGF0Y2hlcy4KKworT1VUUFVUIFNUQUJJTElUWQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgb3V0cHV0IG9mIHRoZSBgcmFuZ2UtZGlmZmAgY29tbWFuZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4gSXQgaXMKK2ludGVuZGVkIHRvIGJlIGh1bWFuLXJlYWRhYmxlIHBvcmNlbGFpbiBvdXRwdXQsIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4KK2JlIHVzZWQgYWNyb3NzIHZlcnNpb25zIG9mIEdpdCB0byBnZXQgYSB0ZXh0dWFsbHkgc3RhYmxlIGByYW5nZS1kaWZmYAorKGFzIG9wcG9zZWQgdG8gc29tZXRoaW5nIGxpa2UgdGhlIGAtLXN0YWJsZWAgb3B0aW9uIHRvCitsaW5rZ2l0OmdpdC1wYXRjaC1pZFsxXSkuIFRoZXJlJ3MgYWxzbyBubyBlcXVpdmFsZW50IG9mCitsaW5rZ2l0OmdpdC1hcHBseVsxXSBmb3IgYHJhbmdlLWRpZmZgLCB0aGUgb3V0cHV0IGlzIG5vdCBpbnRlbmRlZCB0bworYmUgbWFjaGluZS1yZWFkYWJsZS4KKworVGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSB3aGVuIHBhc3NpbmcgaW4gZGlmZiBvcHRpb25zLiBDdXJyZW50bHkgc29tZQorb3B0aW9ucyBsaWtlIGAtLXN0YXRgIGNhbiwgYXMgYW4gZW1lcmdlbnQgZWZmZWN0LCBwcm9kdWNlIG91dHB1dAordGhhdCdzIHF1aXRlIHVzZWxlc3MgaW4gdGhlIGNvbnRleHQgb2YgYHJhbmdlLWRpZmZgLiBGdXR1cmUgdmVyc2lvbnMKK29mIGByYW5nZS1kaWZmYCBtYXkgbGVhcm4gdG8gaW50ZXJwcmV0IHN1Y2ggb3B0aW9ucyBpbiBhIG1hbm5lcgorc3BlY2lmaWMgdG8gYHJhbmdlLWRpZmZgIChlLmcuIGZvciBgLS1zdGF0YCBwcm9kdWNpbmcgaHVtYW4tcmVhZGFibGUKK291dHB1dCB3aGljaCBzdW1tYXJpemVzIGhvdyB0aGUgZGlmZnN0YXQgY2hhbmdlZCkuCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCB1c2VzIHRoZSBgZGlmZi5jb2xvci4qYCBhbmQgYHBhZ2VyLnJhbmdlLWRpZmZgIHNldHRpbmdzCisodGhlIGxhdHRlciBpcyBvbiBieSBkZWZhdWx0KS4KK1NlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1doZW4gYSByZWJhc2UgcmVxdWlyZWQgbWVyZ2UgY29uZmxpY3RzIHRvIGJlIHJlc29sdmVkLCBjb21wYXJlIHRoZSBjaGFuZ2VzCitpbnRyb2R1Y2VkIGJ5IHRoZSByZWJhc2UgZGlyZWN0bHkgYWZ0ZXJ3YXJkcyB1c2luZzoKKworLS0tLS0tLS0tLS0tCiskIGdpdCByYW5nZS1kaWZmIEB7dX0gQHsxfSBACistLS0tLS0tLS0tLS0KKworCitBIHR5cGljYWwgb3V0cHV0IG9mIGBnaXQgcmFuZ2UtZGlmZmAgd291bGQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorLTogIC0tLS0tLS0gPiAxOiAgMGRkYmExMSBQcmVwYXJlIGZvciB0aGUgaW5ldml0YWJsZSEKKzE6ICBjMGRlYmVlID0gMjogIGNhYjAwNWUgQWRkIGEgaGVscGZ1bCBtZXNzYWdlIGF0IHRoZSBzdGFydAorMjogIGYwMGRiYWwgISAzOiAgZGVjYWZlMSBEZXNjcmliZSBhIGJ1ZworICAgIEBAIC0xLDMgKzEsMyBAQAorICAgICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKyAgICAtVE9ETzogRGVzY3JpYmUgYSBidWcKKyAgICArRGVzY3JpYmUgYSBidWcKKyAgICBAQCAtMzI0LDUgKzMyNCw2CisgICAgICBUaGlzIGlzIGV4cGVjdGVkLgorCisgICAgLStXaGF0IGlzIHVuZXhwZWN0ZWQgaXMgdGhhdCBpdCB3aWxsIGFsc28gY3Jhc2guCisgICAgKytVbmV4cGVjdGVkbHksIGl0IGFsc28gY3Jhc2hlcy4gVGhpcyBpcyBhIGJ1ZywgYW5kIHRoZSBqdXJ5IGlzCisgICAgKytzdGlsbCBvdXQgdGhlcmUgaG93IHRvIGZpeCBpdCBiZXN0LiBTZWUgdGlja2V0ICMzMTQgZm9yIGRldGFpbHMuCisKKyAgICAgIENvbnRhY3QKKzM6ICBiZWRlYWQgPCAtOiAgLS0tLS0tLSBUTy1VTkRPCistLS0tLS0tLS0tLS0KKworSW4gdGhpcyBleGFtcGxlLCB0aGVyZSBhcmUgMyBvbGQgYW5kIDMgbmV3IGNvbW1pdHMsIHdoZXJlIHRoZSBkZXZlbG9wZXIKK3JlbW92ZWQgdGhlIDNyZCwgYWRkZWQgYSBuZXcgb25lIGJlZm9yZSB0aGUgZmlyc3QgdHdvLCBhbmQgbW9kaWZpZWQgdGhlCitjb21taXQgbWVzc2FnZSBvZiB0aGUgMm5kIGNvbW1pdCBhcyB3ZWxsIGl0cyBkaWZmLgorCitXaGVuIHRoZSBvdXRwdXQgZ29lcyB0byBhIHRlcm1pbmFsLCBpdCBpcyBjb2xvci1jb2RlZCBieSBkZWZhdWx0LCBqdXN0CitsaWtlIHJlZ3VsYXIgYGdpdCBkaWZmYCdzIG91dHB1dC4gSW4gYWRkaXRpb24sIHRoZSBmaXJzdCBsaW5lIChhZGRpbmcgYQorY29tbWl0KSBpcyBncmVlbiwgdGhlIGxhc3QgbGluZSAoZGVsZXRpbmcgYSBjb21taXQpIGlzIHJlZCwgdGhlIHNlY29uZAorbGluZSAod2l0aCBhIHBlcmZlY3QgbWF0Y2gpIGlzIHllbGxvdyBsaWtlIHRoZSBjb21taXQgaGVhZGVyIG9mIGBnaXQKK3Nob3dgJ3Mgb3V0cHV0LCBhbmQgdGhlIHRoaXJkIGxpbmUgY29sb3JzIHRoZSBvbGQgY29tbWl0IHJlZCwgdGhlIG5ldworb25lIGdyZWVuIGFuZCB0aGUgcmVzdCBsaWtlIGBnaXQgc2hvd2AncyBjb21taXQgaGVhZGVyLgorCitBIG5haXZlIGNvbG9yLWNvZGVkIGRpZmYgb2YgZGlmZnMgaXMgYWN0dWFsbHkgYSBiaXQgaGFyZCB0byByZWFkLAordGhvdWdoLCBhcyBpdCBjb2xvcnMgdGhlIGVudGlyZSBsaW5lcyByZWQgb3IgZ3JlZW4uIFRoZSBsaW5lIHRoYXQgYWRkZWQKKyJXaGF0IGlzIHVuZXhwZWN0ZWQiIGluIHRoZSBvbGQgY29tbWl0LCBmb3IgZXhhbXBsZSwgaXMgY29tcGxldGVseSByZWQsCitldmVuIGlmIHRoZSBpbnRlbnQgb2YgdGhlIG9sZCBjb21taXQgd2FzIHRvIGFkZCBzb21ldGhpbmcuCisKK1RvIGhlbHAgd2l0aCB0aGF0LCBgcmFuZ2VgIHVzZXMgdGhlIGAtLWR1YWwtY29sb3JgIG1vZGUgYnkgZGVmYXVsdC4gSW4KK3RoaXMgbW9kZSwgdGhlIGRpZmYgb2YgZGlmZnMgd2lsbCByZXRhaW4gdGhlIG9yaWdpbmFsIGRpZmYgY29sb3JzLCBhbmQKK3ByZWZpeCB0aGUgbGluZXMgd2l0aCAtLysgbWFya2VycyB0aGF0IGhhdmUgdGhlaXIgKmJhY2tncm91bmQqIHJlZCBvcgorZ3JlZW4sIHRvIG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQgdGhleSBkZXNjcmliZSBob3cgdGhlIGRpZmYgaXRzZWxmCitjaGFuZ2VkLgorCisKK0FsZ29yaXRobQorLS0tLS0tLS0tCisKK1RoZSBnZW5lcmFsIGlkZWEgaXMgdGhpczogd2UgZ2VuZXJhdGUgYSBjb3N0IG1hdHJpeCBiZXR3ZWVuIHRoZSBjb21taXRzCitpbiBib3RoIGNvbW1pdCByYW5nZXMsIHRoZW4gc29sdmUgdGhlIGxlYXN0LWNvc3QgYXNzaWdubWVudC4KKworVGhlIGNvc3QgbWF0cml4IGlzIHBvcHVsYXRlZCB0aHVzbHk6IGZvciBlYWNoIHBhaXIgb2YgY29tbWl0cywgYm90aAorZGlmZnMgYXJlIGdlbmVyYXRlZCBhbmQgdGhlICJkaWZmIG9mIGRpZmZzIiBpcyBnZW5lcmF0ZWQsIHdpdGggMyBjb250ZXh0CitsaW5lcywgdGhlbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoYXQgZGlmZiBpcyB1c2VkIGFzIGNvc3QuCisKK1RvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyAoZS5nLiB3aGVuIGEgcGF0Y2ggaGFzIGJlZW4gcmVtb3ZlZCwgYW5kIGFuCit1bnJlbGF0ZWQgcGF0Y2ggaGFzIGJlZW4gYWRkZWQgYmV0d2VlbiB0d28gaXRlcmF0aW9ucyBvZiB0aGUgc2FtZSBwYXRjaAorc2VyaWVzKSwgdGhlIGNvc3QgbWF0cml4IGlzIGV4dGVuZGVkIHRvIGFsbG93IGZvciB0aGF0LCBieSBhZGRpbmcKK2ZpeGVkLWNvc3QgZW50cmllcyBmb3Igd2hvbGVzYWxlIGRlbGV0ZXMvYWRkcy4KKworRXhhbXBsZTogTGV0IGNvbW1pdHMgYDEtLTJgIGJlIHRoZSBmaXJzdCBpdGVyYXRpb24gb2YgYSBwYXRjaCBzZXJpZXMgYW5kCitgQS0tQ2AgdGhlIHNlY29uZCBpdGVyYXRpb24uIExldCdzIGFzc3VtZSB0aGF0IGBBYCBpcyBhIGNoZXJyeS1waWNrIG9mCitgMixgIGFuZCBgQ2AgaXMgYSBjaGVycnktcGljayBvZiBgMWAgYnV0IHdpdGggYSBzbWFsbCBtb2RpZmljYXRpb24gKHNheSwKK2EgZml4ZWQgdHlwbykuIFZpc3VhbGl6ZSB0aGUgY29tbWl0cyBhcyBhIGJpcGFydGl0ZSBncmFwaDoKKworLS0tLS0tLS0tLS0tCisgICAgMSAgICAgICAgICAgIEEKKworICAgIDIgICAgICAgICAgICBCCisKKwkJIEMKKy0tLS0tLS0tLS0tLQorCitXZSBhcmUgbG9va2luZyBmb3IgYSAiYmVzdCIgZXhwbGFuYXRpb24gb2YgdGhlIG5ldyBzZXJpZXMgaW4gdGVybXMgb2YKK3RoZSBvbGQgb25lLiBXZSBjYW4gcmVwcmVzZW50IGFuICJleHBsYW5hdGlvbiIgYXMgYW4gZWRnZSBpbiB0aGUgZ3JhcGg6CisKKworLS0tLS0tLS0tLS0tCisgICAgMSAgICAgICAgICAgIEEKKwkgICAgICAgLworICAgIDIgLS0tLS0tLS0nICBCCisKKwkJIEMKKy0tLS0tLS0tLS0tLQorCitUaGlzIGV4cGxhbmF0aW9uIGNvbWVzIGZvciAiZnJlZSIgYmVjYXVzZSB0aGVyZSB3YXMgbm8gY2hhbmdlLiBTaW1pbGFybHkKK2BDYCBjb3VsZCBiZSBleHBsYWluZWQgdXNpbmcgYDFgLCBidXQgdGhhdCBjb21lcyBhdCBzb21lIGNvc3QgYz4wCitiZWNhdXNlIG9mIHRoZSBtb2RpZmljYXRpb246CisKKy0tLS0tLS0tLS0tLQorICAgIDEgLS0tLS4gICAgICBBCisJICB8ICAgIC8KKyAgICAyIC0tLS0rLS0tJyAgQgorCSAgfAorCSAgYC0tLS0tIEMKKwkgIGM+MAorLS0tLS0tLS0tLS0tCisKK0luIG1hdGhlbWF0aWNhbCB0ZXJtcywgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgc29tZSBzb3J0IG9mIGEgbWluaW11bQorY29zdCBiaXBhcnRpdGUgbWF0Y2hpbmc7IGAxYCBpcyBtYXRjaGVkIHRvIGBDYCBhdCBzb21lIGNvc3QsIGV0Yy4gVGhlCit1bmRlcmx5aW5nIGdyYXBoIGlzIGluIGZhY3QgYSBjb21wbGV0ZSBiaXBhcnRpdGUgZ3JhcGg7IHRoZSBjb3N0IHdlCithc3NvY2lhdGUgd2l0aCBldmVyeSBlZGdlIGlzIHRoZSBzaXplIG9mIHRoZSBkaWZmIGJldHdlZW4gdGhlIHR3bworY29tbWl0cycgcGF0Y2hlcy4gVG8gZXhwbGFpbiBhbHNvIG5ldyBjb21taXRzLCB3ZSBpbnRyb2R1Y2UgZHVtbXkgbm9kZXMKK29uIGJvdGggc2lkZXM6CisKKy0tLS0tLS0tLS0tLQorICAgIDEgLS0tLS4gICAgICBBCisJICB8ICAgIC8KKyAgICAyIC0tLS0rLS0tJyAgQgorCSAgfAorICAgIG8gICAgIGAtLS0tLSBDCisJICBjPjAKKyAgICBvICAgICAgICAgICAgbworCisgICAgbyAgICAgICAgICAgIG8KKy0tLS0tLS0tLS0tLQorCitUaGUgY29zdCBvZiBhbiBlZGdlIGBvLS1DYCBpcyB0aGUgc2l6ZSBvZiBgQ2AncyBkaWZmLCBtb2RpZmllZCBieSBhCitmdWRnZSBmYWN0b3IgdGhhdCBzaG91bGQgYmUgc21hbGxlciB0aGFuIDEwMCUuIFRoZSBjb3N0IG9mIGFuIGVkZ2UKK2BvLS1vYCBpcyBmcmVlLiBUaGUgZnVkZ2UgZmFjdG9yIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGV2ZW4gaWYgYDFgIGFuZAorYENgIGhhdmUgbm90aGluZyBpbiBjb21tb24sIHRoZXkgbWF5IHN0aWxsIHNoYXJlIGEgZmV3IGVtcHR5IGxpbmVzIGFuZAorc3VjaCwgcG9zc2libHkgbWFraW5nIHRoZSBhc3NpZ25tZW50IGAxLS1DYCwgYG8tLW9gIHNsaWdodGx5IGNoZWFwZXIKK3RoYW4gYDEtLW9gLCBgby0tQ2AgZXZlbiBpZiBgMWAgYW5kIGBDYCBoYXZlIG5vdGhpbmcgaW4gY29tbW9uLiBXaXRoIHRoZQorZnVkZ2UgZmFjdG9yIHdlIHJlcXVpcmUgYSBtdWNoIGxhcmdlciBjb21tb24gcGFydCB0byBjb25zaWRlciBwYXRjaGVzIGFzCitjb3JyZXNwb25kaW5nLgorCitUaGUgb3ZlcmFsbCB0aW1lIG5lZWRlZCB0byBjb21wdXRlIHRoaXMgYWxnb3JpdGhtIGlzIHRoZSB0aW1lIG5lZWRlZCB0bworY29tcHV0ZSBuK20gY29tbWl0IGRpZmZzIGFuZCB0aGVuIG4qbSBkaWZmcyBvZiBwYXRjaGVzLCBwbHVzIHRoZSB0aW1lCituZWVkZWQgdG8gY29tcHV0ZSB0aGUgbGVhc3QtY29zdCBhc3NpZ25tZW50IGJldHdlZW4gbiBhbmQgbSBkaWZmcy4gR2l0Cit1c2VzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBKb25rZXItVm9sZ2VuYW50IGFsZ29yaXRobSB0byBzb2x2ZSB0aGUKK2Fzc2lnbm1lbnQgcHJvYmxlbSwgd2hpY2ggaGFzIGN1YmljIHJ1bnRpbWUgY29tcGxleGl0eS4gVGhlIG1hdGNoaW5nCitmb3VuZCBpbiB0aGlzIGNhc2Ugd2lsbCBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisgICAgMSAtLS0tLiAgICAgIEEKKwkgIHwgICAgLworICAgIDIgLS0tLSstLS0nICBCCisgICAgICAgLi0tKy0tLS0tJworICAgIG8gLScgIGAtLS0tLSBDCisJICBjPjAKKyAgICBvIC0tLS0tLS0tLS0gbworCisgICAgbyAtLS0tLS0tLS0tIG8KKy0tLS0tLS0tLS0tLQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtbG9nWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEzM2Y4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQKQEAgLTAsMCArMSw0NDMgQEAKK2dpdC1yZWFkLXRyZWUoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlYWQtdHJlZSAtIFJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVhZC10cmVlJyBbWy1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+XQorCQlbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0KKwkJWy0taW5kZXgtb3V0cHV0PTxmaWxlPl0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XQorCQkoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIHRoZSB0cmVlIGluZm9ybWF0aW9uIGdpdmVuIGJ5IDx0cmVlLWlzaD4gaW50byB0aGUgaW5kZXgsCitidXQgZG9lcyBub3QgYWN0dWFsbHkgKnVwZGF0ZSogYW55IG9mIHRoZSBmaWxlcyBpdCAiY2FjaGVzIi4gKHNlZToKK2xpbmtnaXQ6Z2l0LWNoZWNrb3V0LWluZGV4WzFdKQorCitPcHRpb25hbGx5LCBpdCBjYW4gbWVyZ2UgYSB0cmVlIGludG8gdGhlIGluZGV4LCBwZXJmb3JtIGEKK2Zhc3QtZm9yd2FyZCAoaS5lLiAyLXdheSkgbWVyZ2UsIG9yIGEgMy13YXkgbWVyZ2UsIHdpdGggdGhlIGAtbWAKK2ZsYWcuICBXaGVuIHVzZWQgd2l0aCBgLW1gLCB0aGUgYC11YCBmbGFnIGNhdXNlcyBpdCB0byBhbHNvIHVwZGF0ZQordGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4KKworVHJpdmlhbCBtZXJnZXMgYXJlIGRvbmUgYnkgJ2dpdCByZWFkLXRyZWUnIGl0c2VsZi4gIE9ubHkgY29uZmxpY3RpbmcgcGF0aHMKK3dpbGwgYmUgaW4gdW5tZXJnZWQgc3RhdGUgd2hlbiAnZ2l0IHJlYWQtdHJlZScgcmV0dXJucy4KKworT1BUSU9OUworLS0tLS0tLQorLW06OgorCVBlcmZvcm0gYSBtZXJnZSwgbm90IGp1c3QgYSByZWFkLiAgVGhlIGNvbW1hbmQgd2lsbAorCXJlZnVzZSB0byBydW4gaWYgeW91ciBpbmRleCBmaWxlIGhhcyB1bm1lcmdlZCBlbnRyaWVzLAorCWluZGljYXRpbmcgdGhhdCB5b3UgaGF2ZSBub3QgZmluaXNoZWQgcHJldmlvdXMgbWVyZ2UgeW91CisJc3RhcnRlZC4KKworLS1yZXNldDo6CisJU2FtZSBhcyAtbSwgZXhjZXB0IHRoYXQgdW5tZXJnZWQgZW50cmllcyBhcmUgZGlzY2FyZGVkIGluc3RlYWQKKwlvZiBmYWlsaW5nLiBXaGVuIHVzZWQgd2l0aCBgLXVgLCB1cGRhdGVzIGxlYWRpbmcgdG8gbG9zcyBvZgorCXdvcmtpbmcgdHJlZSBjaGFuZ2VzIHdpbGwgbm90IGFib3J0IHRoZSBvcGVyYXRpb24uCisKKy11OjoKKwlBZnRlciBhIHN1Y2Nlc3NmdWwgbWVyZ2UsIHVwZGF0ZSB0aGUgZmlsZXMgaW4gdGhlIHdvcmsKKwl0cmVlIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisKKy1pOjoKKwlVc3VhbGx5IGEgbWVyZ2UgcmVxdWlyZXMgdGhlIGluZGV4IGZpbGUgYXMgd2VsbCBhcyB0aGUKKwlmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIGJlIHVwIHRvIGRhdGUgd2l0aCB0aGUKKwljdXJyZW50IGhlYWQgY29tbWl0LCBpbiBvcmRlciBub3QgdG8gbG9zZSBsb2NhbAorCWNoYW5nZXMuICBUaGlzIGZsYWcgZGlzYWJsZXMgdGhlIGNoZWNrIHdpdGggdGhlIHdvcmtpbmcKKwl0cmVlIGFuZCBpcyBtZWFudCB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBtZXJnZSBvZgorCXRyZWVzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjdXJyZW50CisJd29ya2luZyB0cmVlIHN0YXR1cyBpbnRvIGEgdGVtcG9yYXJ5IGluZGV4IGZpbGUuCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJQ2hlY2sgaWYgdGhlIGNvbW1hbmQgd291bGQgZXJyb3Igb3V0LCB3aXRob3V0IHVwZGF0aW5nIHRoZSBpbmRleAorCW9yIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGZvciByZWFsLgorCistdjo6CisJU2hvdyB0aGUgcHJvZ3Jlc3Mgb2YgY2hlY2tpbmcgZmlsZXMgb3V0LgorCistLXRyaXZpYWw6OgorCVJlc3RyaWN0IHRocmVlLXdheSBtZXJnZSBieSAnZ2l0IHJlYWQtdHJlZScgdG8gaGFwcGVuCisJb25seSBpZiB0aGVyZSBpcyBubyBmaWxlLWxldmVsIG1lcmdpbmcgcmVxdWlyZWQsIGluc3RlYWQKKwlvZiByZXNvbHZpbmcgbWVyZ2UgZm9yIHRyaXZpYWwgY2FzZXMgYW5kIGxlYXZpbmcKKwljb25mbGljdGluZyBmaWxlcyB1bnJlc29sdmVkIGluIHRoZSBpbmRleC4KKworLS1hZ2dyZXNzaXZlOjoKKwlVc3VhbGx5IGEgdGhyZWUtd2F5IG1lcmdlIGJ5ICdnaXQgcmVhZC10cmVlJyByZXNvbHZlcworCXRoZSBtZXJnZSBmb3IgcmVhbGx5IHRyaXZpYWwgY2FzZXMgYW5kIGxlYXZlcyBvdGhlcgorCWNhc2VzIHVucmVzb2x2ZWQgaW4gdGhlIGluZGV4LCBzbyB0aGF0IHBvcmNlbGFpbnMgY2FuCisJaW1wbGVtZW50IGRpZmZlcmVudCBtZXJnZSBwb2xpY2llcy4gIFRoaXMgZmxhZyBtYWtlcyB0aGUKKwljb21tYW5kIHJlc29sdmUgYSBmZXcgbW9yZSBjYXNlcyBpbnRlcm5hbGx5OgorKworKiB3aGVuIG9uZSBzaWRlIHJlbW92ZXMgYSBwYXRoIGFuZCB0aGUgb3RoZXIgc2lkZSBsZWF2ZXMgdGhlIHBhdGgKKyAgdW5tb2RpZmllZC4gIFRoZSByZXNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGF0IHBhdGguCisqIHdoZW4gYm90aCBzaWRlcyByZW1vdmUgYSBwYXRoLiAgVGhlIHJlc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoYXQgcGF0aC4KKyogd2hlbiBib3RoIHNpZGVzIGFkZCBhIHBhdGggaWRlbnRpY2FsbHkuICBUaGUgcmVzb2x1dGlvbgorICBpcyB0byBhZGQgdGhhdCBwYXRoLgorCistLXByZWZpeD08cHJlZml4Pjo6CisJS2VlcCB0aGUgY3VycmVudCBpbmRleCBjb250ZW50cywgYW5kIHJlYWQgdGhlIGNvbnRlbnRzCisJb2YgdGhlIG5hbWVkIHRyZWUtaXNoIHVuZGVyIHRoZSBkaXJlY3RvcnkgYXQgYDxwcmVmaXg+YC4KKwlUaGUgY29tbWFuZCB3aWxsIHJlZnVzZSB0byBvdmVyd3JpdGUgZW50cmllcyB0aGF0IGFscmVhZHkKKwlleGlzdGVkIGluIHRoZSBvcmlnaW5hbCBpbmRleCBmaWxlLgorCistLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPjo6CisJV2hlbiBydW5uaW5nIHRoZSBjb21tYW5kIHdpdGggYC11YCBhbmQgYC1tYCBvcHRpb25zLCB0aGUKKwltZXJnZSByZXN1bHQgbWF5IG5lZWQgdG8gb3ZlcndyaXRlIHBhdGhzIHRoYXQgYXJlIG5vdAorCXRyYWNrZWQgaW4gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhlIGNvbW1hbmQgdXN1YWxseQorCXJlZnVzZXMgdG8gcHJvY2VlZCB3aXRoIHRoZSBtZXJnZSB0byBhdm9pZCBsb3Npbmcgc3VjaCBhCisJcGF0aC4gIEhvd2V2ZXIgdGhpcyBzYWZldHkgdmFsdmUgc29tZXRpbWVzIGdldHMgaW4gdGhlCisJd2F5LiAgRm9yIGV4YW1wbGUsIGl0IG9mdGVuIGhhcHBlbnMgdGhhdCB0aGUgb3RoZXIKKwlicmFuY2ggYWRkZWQgYSBmaWxlIHRoYXQgdXNlZCB0byBiZSBhIGdlbmVyYXRlZCBmaWxlIGluCisJeW91ciBicmFuY2gsIGFuZCB0aGUgc2FmZXR5IHZhbHZlIHRyaWdnZXJzIHdoZW4geW91IHRyeQorCXRvIHN3aXRjaCB0byB0aGF0IGJyYW5jaCBhZnRlciB5b3UgcmFuIGBtYWtlYCBidXQgYmVmb3JlCisJcnVubmluZyBgbWFrZSBjbGVhbmAgdG8gcmVtb3ZlIHRoZSBnZW5lcmF0ZWQgZmlsZS4gIFRoaXMKKwlvcHRpb24gdGVsbHMgdGhlIGNvbW1hbmQgdG8gcmVhZCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUKKwlmaWxlICh1c3VhbGx5ICcuZ2l0aWdub3JlJykgYW5kIGFsbG93cyBzdWNoIGFuIHVudHJhY2tlZAorCWJ1dCBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZSB0byBiZSBvdmVyd3JpdHRlbi4KKworLS1pbmRleC1vdXRwdXQ9PGZpbGU+OjoKKwlJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIHJlc3VsdHMgb3V0IHRvIGAkR0lUX0lOREVYX0ZJTEVgLAorCXdyaXRlIHRoZSByZXN1bHRpbmcgaW5kZXggaW4gdGhlIG5hbWVkIGZpbGUuICBXaGlsZSB0aGUKKwljb21tYW5kIGlzIG9wZXJhdGluZywgdGhlIG9yaWdpbmFsIGluZGV4IGZpbGUgaXMgbG9ja2VkCisJd2l0aCB0aGUgc2FtZSBtZWNoYW5pc20gYXMgdXN1YWwuICBUaGUgZmlsZSBtdXN0IGFsbG93CisJdG8gYmUgcmVuYW1lKDIpZWQgaW50byBmcm9tIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdCBpcworCWNyZWF0ZWQgbmV4dCB0byB0aGUgdXN1YWwgaW5kZXggZmlsZTsgdHlwaWNhbGx5IHRoaXMKKwltZWFucyBpdCBuZWVkcyB0byBiZSBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtIGFzIHRoZSBpbmRleAorCWZpbGUgaXRzZWxmLCBhbmQgeW91IG5lZWQgd3JpdGUgcGVybWlzc2lvbiB0byB0aGUKKwlkaXJlY3RvcmllcyB0aGUgaW5kZXggZmlsZSBhbmQgaW5kZXggb3V0cHV0IGZpbGUgYXJlCisJbG9jYXRlZCBpbi4KKworLS1bbm8tXXJlY3Vyc2Utc3VibW9kdWxlczo6CisJVXNpbmcgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgd2lsbCB1cGRhdGUgdGhlIGNvbnRlbnQgb2YgYWxsIGluaXRpYWxpemVkCisJc3VibW9kdWxlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGJ5CisJY2FsbGluZyByZWFkLXRyZWUgcmVjdXJzaXZlbHksIGFsc28gc2V0dGluZyB0aGUgc3VibW9kdWxlcyBIRUFEIHRvIGJlCisJZGV0YWNoZWQgYXQgdGhhdCBjb21taXQuCisKKy0tbm8tc3BhcnNlLWNoZWNrb3V0OjoKKwlEaXNhYmxlIHNwYXJzZSBjaGVja291dCBzdXBwb3J0IGV2ZW4gaWYgYGNvcmUuc3BhcnNlQ2hlY2tvdXRgCisJaXMgdHJ1ZS4KKworLS1lbXB0eTo6CisJSW5zdGVhZCBvZiByZWFkaW5nIHRyZWUgb2JqZWN0KHMpIGludG8gdGhlIGluZGV4LCBqdXN0IGVtcHR5CisJaXQuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KKworPHRyZWUtaXNoIz46OgorCVRoZSBpZCBvZiB0aGUgdHJlZSBvYmplY3QocykgdG8gYmUgcmVhZC9tZXJnZWQuCisKKworTUVSR0lORworLS0tLS0tLQorSWYgYC1tYCBpcyBzcGVjaWZpZWQsICdnaXQgcmVhZC10cmVlJyBjYW4gcGVyZm9ybSAzIGtpbmRzIG9mCittZXJnZSwgYSBzaW5nbGUgdHJlZSBtZXJnZSBpZiBvbmx5IDEgdHJlZSBpcyBnaXZlbiwgYQorZmFzdC1mb3J3YXJkIG1lcmdlIHdpdGggMiB0cmVlcywgb3IgYSAzLXdheSBtZXJnZSBpZiAzIG9yIG1vcmUgdHJlZXMgYXJlCitwcm92aWRlZC4KKworCitTaW5nbGUgVHJlZSBNZXJnZQorfn5+fn5+fn5+fn5+fn5+fn4KK0lmIG9ubHkgMSB0cmVlIGlzIHNwZWNpZmllZCwgJ2dpdCByZWFkLXRyZWUnIG9wZXJhdGVzIGFzIGlmIHRoZSB1c2VyIGRpZCBub3QKK3NwZWNpZnkgYC1tYCwgZXhjZXB0IHRoYXQgaWYgdGhlIG9yaWdpbmFsIGluZGV4IGhhcyBhbiBlbnRyeSBmb3IgYQorZ2l2ZW4gcGF0aG5hbWUsIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIHBhdGggbWF0Y2ggd2l0aCB0aGUgdHJlZQorYmVpbmcgcmVhZCwgdGhlIHN0YXQgaW5mbyBmcm9tIHRoZSBpbmRleCBpcyB1c2VkLiAoSW4gb3RoZXIgd29yZHMsIHRoZQoraW5kZXgncyBzdGF0KClzIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBtZXJnZWQgdHJlZSdzKS4KKworVGhhdCBtZWFucyB0aGF0IGlmIHlvdSBkbyBhIGBnaXQgcmVhZC10cmVlIC1tIDxuZXd0cmVlPmAgZm9sbG93ZWQgYnkgYQorYGdpdCBjaGVja291dC1pbmRleCAtZiAtdSAtYWAsIHRoZSAnZ2l0IGNoZWNrb3V0LWluZGV4JyBvbmx5IGNoZWNrcyBvdXQKK3RoZSBzdHVmZiB0aGF0IHJlYWxseSBjaGFuZ2VkLgorCitUaGlzIGlzIHVzZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZmFsc2UgaGl0cyB3aGVuICdnaXQgZGlmZi1maWxlcycgaXMKK3J1biBhZnRlciAnZ2l0IHJlYWQtdHJlZScuCisKKworVHdvIFRyZWUgTWVyZ2UKK35+fn5+fn5+fn5+fn5+CisKK1R5cGljYWxseSwgdGhpcyBpcyBpbnZva2VkIGFzIGBnaXQgcmVhZC10cmVlIC1tICRIICRNYCwgd2hlcmUgJEgKK2lzIHRoZSBoZWFkIGNvbW1pdCBvZiB0aGUgY3VycmVudCByZXBvc2l0b3J5LCBhbmQgJE0gaXMgdGhlIGhlYWQKK29mIGEgZm9yZWlnbiB0cmVlLCB3aGljaCBpcyBzaW1wbHkgYWhlYWQgb2YgJEggKGkuZS4gd2UgYXJlIGluIGEKK2Zhc3QtZm9yd2FyZCBzaXR1YXRpb24pLgorCitXaGVuIHR3byB0cmVlcyBhcmUgc3BlY2lmaWVkLCB0aGUgdXNlciBpcyB0ZWxsaW5nICdnaXQgcmVhZC10cmVlJwordGhlIGZvbGxvd2luZzoKKworICAgICAxLiBUaGUgY3VycmVudCBpbmRleCBhbmQgd29yayB0cmVlIGlzIGRlcml2ZWQgZnJvbSAkSCwgYnV0CisJdGhlIHVzZXIgbWF5IGhhdmUgbG9jYWwgY2hhbmdlcyBpbiB0aGVtIHNpbmNlICRILgorCisgICAgIDIuIFRoZSB1c2VyIHdhbnRzIHRvIGZhc3QtZm9yd2FyZCB0byAkTS4KKworSW4gdGhpcyBjYXNlLCB0aGUgYGdpdCByZWFkLXRyZWUgLW0gJEggJE1gIGNvbW1hbmQgbWFrZXMgc3VyZQordGhhdCBubyBsb2NhbCBjaGFuZ2UgaXMgbG9zdCBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgIm1lcmdlIi4KK0hlcmUgYXJlIHRoZSAiY2FycnkgZm9yd2FyZCIgcnVsZXMsIHdoZXJlICJJIiBkZW5vdGVzIHRoZSBpbmRleCwKKyJjbGVhbiIgbWVhbnMgdGhhdCBpbmRleCBhbmQgd29yayB0cmVlIGNvaW5jaWRlLCBhbmQgImV4aXN0cyIvIm5vdGhpbmciCityZWZlciB0byB0aGUgcHJlc2VuY2Ugb2YgYSBwYXRoIGluIHRoZSBzcGVjaWZpZWQgY29tbWl0OgorCisuLi4uCisJSSAgICAgICAgICAgICAgICAgICBIICAgICAgICBNICAgICAgICBSZXN1bHQKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIDAgIG5vdGhpbmcgICAgICAgICAgICAgbm90aGluZyAgbm90aGluZyAgKGRvZXMgbm90IGhhcHBlbikKKyAgICAgMSAgbm90aGluZyAgICAgICAgICAgICBub3RoaW5nICBleGlzdHMgICB1c2UgTQorICAgICAyICBub3RoaW5nICAgICAgICAgICAgIGV4aXN0cyAgIG5vdGhpbmcgIHJlbW92ZSBwYXRoIGZyb20gaW5kZXgKKyAgICAgMyAgbm90aGluZyAgICAgICAgICAgICBleGlzdHMgICBleGlzdHMsICB1c2UgTSBpZiAiaW5pdGlhbCBjaGVja291dCIsCisJCQkJICAgICBIID09IE0gICBrZWVwIGluZGV4IG90aGVyd2lzZQorCQkJCSAgICAgZXhpc3RzLCAgZmFpbAorCQkJCSAgICAgSCAhPSBNCisKKyAgICAgICAgY2xlYW4gST09SCAgST09TQorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICA0ICB5ZXMgICBOL0EgICBOL0EgICAgIG5vdGhpbmcgIG5vdGhpbmcgIGtlZXAgaW5kZXgKKyAgICAgNSAgbm8gICAgTi9BICAgTi9BICAgICBub3RoaW5nICBub3RoaW5nICBrZWVwIGluZGV4CisKKyAgICAgNiAgeWVzICAgTi9BICAgeWVzICAgICBub3RoaW5nICBleGlzdHMgICBrZWVwIGluZGV4CisgICAgIDcgIG5vICAgIE4vQSAgIHllcyAgICAgbm90aGluZyAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICA4ICB5ZXMgICBOL0EgICBubyAgICAgIG5vdGhpbmcgIGV4aXN0cyAgIGZhaWwKKyAgICAgOSAgbm8gICAgTi9BICAgbm8gICAgICBub3RoaW5nICBleGlzdHMgICBmYWlsCisKKyAgICAgMTAgeWVzICAgeWVzICAgTi9BICAgICBleGlzdHMgICBub3RoaW5nICByZW1vdmUgcGF0aCBmcm9tIGluZGV4CisgICAgIDExIG5vICAgIHllcyAgIE4vQSAgICAgZXhpc3RzICAgbm90aGluZyAgZmFpbAorICAgICAxMiB5ZXMgICBubyAgICBOL0EgICAgIGV4aXN0cyAgIG5vdGhpbmcgIGZhaWwKKyAgICAgMTMgbm8gICAgbm8gICAgTi9BICAgICBleGlzdHMgICBub3RoaW5nICBmYWlsCisKKwljbGVhbiAoSD09TSkKKyAgICAgICAtLS0tLS0KKyAgICAgMTQgeWVzICAgICAgICAgICAgICAgICBleGlzdHMgICBleGlzdHMgICBrZWVwIGluZGV4CisgICAgIDE1IG5vICAgICAgICAgICAgICAgICAgZXhpc3RzICAgZXhpc3RzICAga2VlcCBpbmRleAorCisgICAgICAgIGNsZWFuIEk9PUggIEk9PU0gKEghPU0pCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIDE2IHllcyAgIG5vICAgIG5vICAgICAgZXhpc3RzICAgZXhpc3RzICAgZmFpbAorICAgICAxNyBubyAgICBubyAgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGZhaWwKKyAgICAgMTggeWVzICAgbm8gICAgeWVzICAgICBleGlzdHMgICBleGlzdHMgICBrZWVwIGluZGV4CisgICAgIDE5IG5vICAgIG5vICAgIHllcyAgICAgZXhpc3RzICAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICAyMCB5ZXMgICB5ZXMgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIHVzZSBNCisgICAgIDIxIG5vICAgIHllcyAgIG5vICAgICAgZXhpc3RzICAgZXhpc3RzICAgZmFpbAorLi4uLgorCitJbiBhbGwgImtlZXAgaW5kZXgiIGNhc2VzLCB0aGUgaW5kZXggZW50cnkgc3RheXMgYXMgaW4gdGhlCitvcmlnaW5hbCBpbmRleCBmaWxlLiAgSWYgdGhlIGVudHJ5IGlzIG5vdCB1cCB0byBkYXRlLAorJ2dpdCByZWFkLXRyZWUnIGtlZXBzIHRoZSBjb3B5IGluIHRoZSB3b3JrIHRyZWUgaW50YWN0IHdoZW4KK29wZXJhdGluZyB1bmRlciB0aGUgLXUgZmxhZy4KKworV2hlbiB0aGlzIGZvcm0gb2YgJ2dpdCByZWFkLXRyZWUnIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB5b3UgY2FuCitzZWUgd2hpY2ggb2YgdGhlICJsb2NhbCBjaGFuZ2VzIiB0aGF0IHlvdSBtYWRlIHdlcmUgY2FycmllZCBmb3J3YXJkIGJ5IHJ1bm5pbmcKK2BnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkTWAuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAorbmVjZXNzYXJpbHkgbWF0Y2ggd2hhdCBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJEhgIHdvdWxkIGhhdmUKK3Byb2R1Y2VkIGJlZm9yZSBzdWNoIGEgdHdvIHRyZWUgbWVyZ2UuICBUaGlzIGlzIGJlY2F1c2Ugb2YgY2FzZXMKKzE4IGFuZCAxOSAtLS0gaWYgeW91IGFscmVhZHkgaGFkIHRoZSBjaGFuZ2VzIGluICRNIChlLmcuIG1heWJlCit5b3UgcGlja2VkIGl0IHVwIHZpYSBlLW1haWwgaW4gYSBwYXRjaCBmb3JtKSwgYGdpdCBkaWZmLWluZGV4CistLWNhY2hlZCAkSGAgd291bGQgaGF2ZSB0b2xkIHlvdSBhYm91dCB0aGUgY2hhbmdlIGJlZm9yZSB0aGlzCittZXJnZSwgYnV0IGl0IHdvdWxkIG5vdCBzaG93IGluIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkTWAKK291dHB1dCBhZnRlciB0aGUgdHdvLXRyZWUgbWVyZ2UuCisKK0Nhc2UgMyBpcyBzbGlnaHRseSB0cmlja3kgYW5kIG5lZWRzIGV4cGxhbmF0aW9uLiAgVGhlIHJlc3VsdCBmcm9tIHRoaXMKK3J1bGUgbG9naWNhbGx5IHNob3VsZCBiZSB0byByZW1vdmUgdGhlIHBhdGggaWYgdGhlIHVzZXIgc3RhZ2VkIHRoZSByZW1vdmFsCitvZiB0aGUgcGF0aCBhbmQgdGhlbiBzd2l0Y2hpbmcgdG8gYSBuZXcgYnJhbmNoLiAgVGhhdCBob3dldmVyIHdpbGwgcHJldmVudAordGhlIGluaXRpYWwgY2hlY2tvdXQgZnJvbSBoYXBwZW5pbmcsIHNvIHRoZSBydWxlIGlzIG1vZGlmaWVkIHRvIHVzZSBNIChuZXcKK3RyZWUpIG9ubHkgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgaW5kZXggaXMgZW1wdHkuICBPdGhlcndpc2UgdGhlIHJlbW92YWwKK29mIHRoZSBwYXRoIGlzIGtlcHQgYXMgbG9uZyBhcyAkSCBhbmQgJE0gYXJlIHRoZSBzYW1lLgorCiszLVdheSBNZXJnZQorfn5+fn5+fn5+fn4KK0VhY2ggImluZGV4IiBlbnRyeSBoYXMgdHdvIGJpdHMgd29ydGggb2YgInN0YWdlIiBzdGF0ZS4gc3RhZ2UgMCBpcyB0aGUKK25vcm1hbCBvbmUsIGFuZCBpcyB0aGUgb25seSBvbmUgeW91J2Qgc2VlIGluIGFueSBraW5kIG9mIG5vcm1hbCB1c2UuCisKK0hvd2V2ZXIsIHdoZW4geW91IGRvICdnaXQgcmVhZC10cmVlJyB3aXRoIHRocmVlIHRyZWVzLCB0aGUgInN0YWdlIgorc3RhcnRzIG91dCBhdCAxLgorCitUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBkbworCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgLW0gPHRyZWUxPiA8dHJlZTI+IDx0cmVlMz4KKy0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHlvdSB3aWxsIGVuZCB1cCB3aXRoIGFuIGluZGV4IHdpdGggYWxsIG9mIHRoZSA8dHJlZTE+IGVudHJpZXMgaW4KKyJzdGFnZTEiLCBhbGwgb2YgdGhlIDx0cmVlMj4gZW50cmllcyBpbiAic3RhZ2UyIiBhbmQgYWxsIG9mIHRoZQorPHRyZWUzPiBlbnRyaWVzIGluICJzdGFnZTMiLiAgV2hlbiBwZXJmb3JtaW5nIGEgbWVyZ2Ugb2YgYW5vdGhlcgorYnJhbmNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLCB3ZSB1c2UgdGhlIGNvbW1vbiBhbmNlc3RvciB0cmVlCithcyA8dHJlZTE+LCB0aGUgY3VycmVudCBicmFuY2ggaGVhZCBhcyA8dHJlZTI+LCBhbmQgdGhlIG90aGVyCiticmFuY2ggaGVhZCBhcyA8dHJlZTM+LgorCitGdXJ0aGVybW9yZSwgJ2dpdCByZWFkLXRyZWUnIGhhcyBzcGVjaWFsLWNhc2UgbG9naWMgdGhhdCBzYXlzOiBpZiB5b3Ugc2VlCithIGZpbGUgdGhhdCBtYXRjaGVzIGluIGFsbCByZXNwZWN0cyBpbiB0aGUgZm9sbG93aW5nIHN0YXRlcywgaXQKKyJjb2xsYXBzZXMiIGJhY2sgdG8gInN0YWdlMCI6CisKKyAgIC0gc3RhZ2UgMiBhbmQgMyBhcmUgdGhlIHNhbWU7IHRha2Ugb25lIG9yIHRoZSBvdGhlciAoaXQgbWFrZXMgbm8KKyAgICAgZGlmZmVyZW5jZSAtIHRoZSBzYW1lIHdvcmsgaGFzIGJlZW4gZG9uZSBvbiBvdXIgYnJhbmNoIGluCisgICAgIHN0YWdlIDIgYW5kIHRoZWlyIGJyYW5jaCBpbiBzdGFnZSAzKQorCisgICAtIHN0YWdlIDEgYW5kIHN0YWdlIDIgYXJlIHRoZSBzYW1lIGFuZCBzdGFnZSAzIGlzIGRpZmZlcmVudDsgdGFrZQorICAgICBzdGFnZSAzIChvdXIgYnJhbmNoIGluIHN0YWdlIDIgZGlkIG5vdCBkbyBhbnl0aGluZyBzaW5jZSB0aGUKKyAgICAgYW5jZXN0b3IgaW4gc3RhZ2UgMSB3aGlsZSB0aGVpciBicmFuY2ggaW4gc3RhZ2UgMyB3b3JrZWQgb24KKyAgICAgaXQpCisKKyAgIC0gc3RhZ2UgMSBhbmQgc3RhZ2UgMyBhcmUgdGhlIHNhbWUgYW5kIHN0YWdlIDIgaXMgZGlmZmVyZW50IHRha2UKKyAgICAgc3RhZ2UgMiAod2UgZGlkIHNvbWV0aGluZyB3aGlsZSB0aGV5IGRpZCBub3RoaW5nKQorCitUaGUgJ2dpdCB3cml0ZS10cmVlJyBjb21tYW5kIHJlZnVzZXMgdG8gd3JpdGUgYSBub25zZW5zaWNhbCB0cmVlLCBhbmQgaXQKK3dpbGwgY29tcGxhaW4gYWJvdXQgdW5tZXJnZWQgZW50cmllcyBpZiBpdCBzZWVzIGEgc2luZ2xlIGVudHJ5IHRoYXQgaXMgbm90CitzdGFnZSAwLgorCitPSywgdGhpcyBhbGwgc291bmRzIGxpa2UgYSBjb2xsZWN0aW9uIG9mIHRvdGFsbHkgbm9uc2Vuc2ljYWwgcnVsZXMsCitidXQgaXQncyBhY3R1YWxseSBleGFjdGx5IHdoYXQgeW91IHdhbnQgaW4gb3JkZXIgdG8gZG8gYSBmYXN0CittZXJnZS4gVGhlIGRpZmZlcmVudCBzdGFnZXMgcmVwcmVzZW50IHRoZSAicmVzdWx0IHRyZWUiIChzdGFnZSAwLCBha2EKKyJtZXJnZWQiKSwgdGhlIG9yaWdpbmFsIHRyZWUgKHN0YWdlIDEsIGFrYSAib3JpZyIpLCBhbmQgdGhlIHR3byB0cmVlcworeW91IGFyZSB0cnlpbmcgdG8gbWVyZ2UgKHN0YWdlIDIgYW5kIDMgcmVzcGVjdGl2ZWx5KS4KKworVGhlIG9yZGVyIG9mIHN0YWdlcyAxLCAyIGFuZCAzIChoZW5jZSB0aGUgb3JkZXIgb2YgdGhyZWUKKzx0cmVlLWlzaD4gY29tbWFuZC1saW5lIGFyZ3VtZW50cykgYXJlIHNpZ25pZmljYW50IHdoZW4geW91CitzdGFydCBhIDMtd2F5IG1lcmdlIHdpdGggYW4gaW5kZXggZmlsZSB0aGF0IGlzIGFscmVhZHkKK3BvcHVsYXRlZC4gIEhlcmUgaXMgYW4gb3V0bGluZSBvZiBob3cgdGhlIGFsZ29yaXRobSB3b3JrczoKKworLSBpZiBhIGZpbGUgZXhpc3RzIGluIGlkZW50aWNhbCBmb3JtYXQgaW4gYWxsIHRocmVlIHRyZWVzLCBpdCB3aWxsCisgIGF1dG9tYXRpY2FsbHkgY29sbGFwc2UgdG8gIm1lcmdlZCIgc3RhdGUgYnkgJ2dpdCByZWFkLXRyZWUnLgorCistIGEgZmlsZSB0aGF0IGhhcyBfYW55XyBkaWZmZXJlbmNlIHdoYXQtc28tZXZlciBpbiB0aGUgdGhyZWUgdHJlZXMKKyAgd2lsbCBzdGF5IGFzIHNlcGFyYXRlIGVudHJpZXMgaW4gdGhlIGluZGV4LiBJdCdzIHVwIHRvICJwb3JjZWxhaW4KKyAgcG9saWN5IiB0byBkZXRlcm1pbmUgaG93IHRvIHJlbW92ZSB0aGUgbm9uLTAgc3RhZ2VzLCBhbmQgaW5zZXJ0IGEKKyAgbWVyZ2VkIHZlcnNpb24uCisKKy0gdGhlIGluZGV4IGZpbGUgc2F2ZXMgYW5kIHJlc3RvcmVzIHdpdGggYWxsIHRoaXMgaW5mb3JtYXRpb24sIHNvIHlvdQorICBjYW4gbWVyZ2UgdGhpbmdzIGluY3JlbWVudGFsbHksIGJ1dCBhcyBsb25nIGFzIGl0IGhhcyBlbnRyaWVzIGluCisgIHN0YWdlcyAxLzIvMyAoaS5lLiwgInVubWVyZ2VkIGVudHJpZXMiKSB5b3UgY2FuJ3Qgd3JpdGUgdGhlIHJlc3VsdC4gU28KKyAgbm93IHRoZSBtZXJnZSBhbGdvcml0aG0gZW5kcyB1cCBiZWluZyByZWFsbHkgc2ltcGxlOgorCisgICogeW91IHdhbGsgdGhlIGluZGV4IGluIG9yZGVyLCBhbmQgaWdub3JlIGFsbCBlbnRyaWVzIG9mIHN0YWdlIDAsCisgICAgc2luY2UgdGhleSd2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KKworICAqIGlmIHlvdSBmaW5kIGEgInN0YWdlMSIsIGJ1dCBubyBtYXRjaGluZyAic3RhZ2UyIiBvciAic3RhZ2UzIiwgeW91CisgICAga25vdyBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIGJvdGggdHJlZXMgKGl0IG9ubHkgZXhpc3RlZCBpbiB0aGUKKyAgICBvcmlnaW5hbCB0cmVlKSwgYW5kIHlvdSByZW1vdmUgdGhhdCBlbnRyeS4KKworICAqIGlmIHlvdSBmaW5kIGEgbWF0Y2hpbmcgInN0YWdlMiIgYW5kICJzdGFnZTMiIHRyZWUsIHlvdSByZW1vdmUgb25lCisgICAgb2YgdGhlbSwgYW5kIHR1cm4gdGhlIG90aGVyIGludG8gYSAic3RhZ2UwIiBlbnRyeS4gUmVtb3ZlIGFueQorICAgIG1hdGNoaW5nICJzdGFnZTEiIGVudHJ5IGlmIGl0IGV4aXN0cyB0b28uICAuLiBhbGwgdGhlIG5vcm1hbAorICAgIHRyaXZpYWwgcnVsZXMgLi4KKworWW91IHdvdWxkIG5vcm1hbGx5IHVzZSAnZ2l0IG1lcmdlLWluZGV4JyB3aXRoIHN1cHBsaWVkCisnZ2l0IG1lcmdlLW9uZS1maWxlJyB0byBkbyB0aGlzIGxhc3Qgc3RlcC4gIFRoZSBzY3JpcHQgdXBkYXRlcwordGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYXMgaXQgbWVyZ2VzIGVhY2ggcGF0aCBhbmQgYXQgdGhlCitlbmQgb2YgYSBzdWNjZXNzZnVsIG1lcmdlLgorCitXaGVuIHlvdSBzdGFydCBhIDMtd2F5IG1lcmdlIHdpdGggYW4gaW5kZXggZmlsZSB0aGF0IGlzIGFscmVhZHkKK3BvcHVsYXRlZCwgaXQgaXMgYXNzdW1lZCB0aGF0IGl0IHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZQorZmlsZXMgaW4geW91ciB3b3JrIHRyZWUsIGFuZCB5b3UgY2FuIGV2ZW4gaGF2ZSBmaWxlcyB3aXRoCitjaGFuZ2VzIHVucmVjb3JkZWQgaW4gdGhlIGluZGV4IGZpbGUuICBJdCBpcyBmdXJ0aGVyIGFzc3VtZWQKK3RoYXQgdGhpcyBzdGF0ZSBpcyAiZGVyaXZlZCIgZnJvbSB0aGUgc3RhZ2UgMiB0cmVlLiAgVGhlIDMtd2F5CittZXJnZSByZWZ1c2VzIHRvIHJ1biBpZiBpdCBmaW5kcyBhbiBlbnRyeSBpbiB0aGUgb3JpZ2luYWwgaW5kZXgKK2ZpbGUgdGhhdCBkb2VzIG5vdCBtYXRjaCBzdGFnZSAyLgorCitUaGlzIGlzIGRvbmUgdG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgeW91ciB3b3JrLWluLXByb2dyZXNzCitjaGFuZ2VzLCBhbmQgbWl4aW5nIHlvdXIgcmFuZG9tIGNoYW5nZXMgaW4gYW4gdW5yZWxhdGVkIG1lcmdlCitjb21taXQuICBUbyBpbGx1c3RyYXRlLCBzdXBwb3NlIHlvdSBzdGFydCBmcm9tIHdoYXQgaGFzIGJlZW4KK2NvbW1pdHRlZCBsYXN0IHRvIHlvdXIgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBKQz1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiSEVBRF4wImAKKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC1hICRKQworLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgZG8gcmFuZG9tIGVkaXRzLCB3aXRob3V0IHJ1bm5pbmcgJ2dpdCB1cGRhdGUtaW5kZXgnLiAgQW5kIHRoZW4KK3lvdSBub3RpY2UgdGhhdCB0aGUgdGlwIG9mIHlvdXIgInVwc3RyZWFtIiB0cmVlIGhhcyBhZHZhbmNlZAorc2luY2UgeW91IHB1bGxlZCBmcm9tIGhpbToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vLi4uLiBsaW51cworJCBMVD1gZ2l0IHJldi1wYXJzZSBGRVRDSF9IRUFEYAorLS0tLS0tLS0tLS0tLS0tLQorCitZb3VyIHdvcmsgdHJlZSBpcyBzdGlsbCBiYXNlZCBvbiB5b3VyIEhFQUQgKCRKQyksIGJ1dCB5b3UgaGF2ZQorc29tZSBlZGl0cyBzaW5jZS4gIFRocmVlLXdheSBtZXJnZSBtYWtlcyBzdXJlIHRoYXQgeW91IGhhdmUgbm90CithZGRlZCBvciBtb2RpZmllZCBpbmRleCBlbnRyaWVzIHNpbmNlICRKQywgYW5kIGlmIHlvdSBoYXZlbid0LAordGhlbiBkb2VzIHRoZSByaWdodCB0aGluZy4gIFNvIHdpdGggdGhlIGZvbGxvd2luZyBzZXF1ZW5jZToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC1tIC11IGBnaXQgbWVyZ2UtYmFzZSAkSkMgJExUYCAkSkMgJExUCiskIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgLWEKKyQgZWNobyAiTWVyZ2Ugd2l0aCBMaW51cyIgfCBcCisgIGdpdCBjb21taXQtdHJlZSBgZ2l0IHdyaXRlLXRyZWVgIC1wICRKQyAtcCAkTFQKKy0tLS0tLS0tLS0tLS0tLS0KKword2hhdCB5b3Ugd291bGQgY29tbWl0IGlzIGEgcHVyZSBtZXJnZSBiZXR3ZWVuICRKQyBhbmQgJExUIHdpdGhvdXQKK3lvdXIgd29yay1pbi1wcm9ncmVzcyBjaGFuZ2VzLCBhbmQgeW91ciB3b3JrIHRyZWUgd291bGQgYmUKK3VwZGF0ZWQgdG8gdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisKK0hvd2V2ZXIsIGlmIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0Cit3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSB0aGlzIG1lcmdlLCAnZ2l0IHJlYWQtdHJlZScgd2lsbCByZWZ1c2UKK3RvIHJ1biB0byBwcmV2ZW50IHlvdXIgY2hhbmdlcyBmcm9tIGJlaW5nIGxvc3QuCisKK0luIG90aGVyIHdvcmRzLCB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHdoYXQgZXhpc3RzIG9ubHkKK2luIHRoZSB3b3JraW5nIHRyZWUuICBXaGVuIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gYSBwYXJ0IG9mCit0aGUgcHJvamVjdCB0aGF0IGlzIG5vdCBpbnZvbHZlZCBpbiB0aGUgbWVyZ2UsIHlvdXIgY2hhbmdlcyBkbworbm90IGludGVyZmVyZSB3aXRoIHRoZSBtZXJnZSwgYW5kIGFyZSBrZXB0IGludGFjdC4gIFdoZW4gdGhleQorKmRvKiBpbnRlcmZlcmUsIHRoZSBtZXJnZSBkb2VzIG5vdCBldmVuIHN0YXJ0ICgnZ2l0IHJlYWQtdHJlZScKK2NvbXBsYWlucyBsb3VkbHkgYW5kIGZhaWxzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueXRoaW5nKS4gIEluIHN1Y2gKK2EgY2FzZSwgeW91IGNhbiBzaW1wbHkgY29udGludWUgZG9pbmcgd2hhdCB5b3Ugd2VyZSBpbiB0aGUKK21pZGRsZSBvZiBkb2luZywgYW5kIHdoZW4geW91ciB3b3JraW5nIHRyZWUgaXMgcmVhZHkgKGkuZS4geW91CitoYXZlIGZpbmlzaGVkIHlvdXIgd29yay1pbi1wcm9ncmVzcyksIGF0dGVtcHQgdGhlIG1lcmdlIGFnYWluLgorCisKK1NQQVJTRSBDSEVDS09VVAorLS0tLS0tLS0tLS0tLS0tCisKKyJTcGFyc2UgY2hlY2tvdXQiIGFsbG93cyBwb3B1bGF0aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBzcGFyc2VseS4KK0l0IHVzZXMgdGhlIHNraXAtd29ya3RyZWUgYml0IChzZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdKSB0byB0ZWxsCitHaXQgd2hldGhlciBhIGZpbGUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlzIHdvcnRoIGxvb2tpbmcgYXQuCisKKydnaXQgcmVhZC10cmVlJyBhbmQgb3RoZXIgbWVyZ2UtYmFzZWQgY29tbWFuZHMgKCdnaXQgbWVyZ2UnLCAnZ2l0CitjaGVja291dCcuLi4pIGNhbiBoZWxwIG1haW50YWluaW5nIHRoZSBza2lwLXdvcmt0cmVlIGJpdG1hcCBhbmQgd29ya2luZworZGlyZWN0b3J5IHVwZGF0ZS4gYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBpcyB1c2VkIHRvCitkZWZpbmUgdGhlIHNraXAtd29ya3RyZWUgcmVmZXJlbmNlIGJpdG1hcC4gV2hlbiAnZ2l0IHJlYWQtdHJlZScgbmVlZHMKK3RvIHVwZGF0ZSB0aGUgd29ya2luZyBkaXJlY3RvcnksIGl0IHJlc2V0cyB0aGUgc2tpcC13b3JrdHJlZSBiaXQgaW4gdGhlIGluZGV4CitiYXNlZCBvbiB0aGlzIGZpbGUsIHdoaWNoIHVzZXMgdGhlIHNhbWUgc3ludGF4IGFzIC5naXRpZ25vcmUgZmlsZXMuCitJZiBhbiBlbnRyeSBtYXRjaGVzIGEgcGF0dGVybiBpbiB0aGlzIGZpbGUsIHNraXAtd29ya3RyZWUgd2lsbCBub3QgYmUKK3NldCBvbiB0aGF0IGVudHJ5LiBPdGhlcndpc2UsIHNraXAtd29ya3RyZWUgd2lsbCBiZSBzZXQuCisKK1RoZW4gaXQgY29tcGFyZXMgdGhlIG5ldyBza2lwLXdvcmt0cmVlIHZhbHVlIHdpdGggdGhlIHByZXZpb3VzIG9uZS4gSWYKK3NraXAtd29ya3RyZWUgdHVybnMgZnJvbSBzZXQgdG8gdW5zZXQsIGl0IHdpbGwgYWRkIHRoZSBjb3JyZXNwb25kaW5nCitmaWxlIGJhY2suIElmIGl0IHR1cm5zIGZyb20gdW5zZXQgdG8gc2V0LCB0aGF0IGZpbGUgd2lsbCBiZSByZW1vdmVkLgorCitXaGlsZSBgJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXRgIGlzIHVzdWFsbHkgdXNlZCB0byBzcGVjaWZ5IHdoYXQKK2ZpbGVzIGFyZSBpbiwgeW91IGNhbiBhbHNvIHNwZWNpZnkgd2hhdCBmaWxlcyBhcmUgX25vdF8gaW4sIHVzaW5nCituZWdhdGUgcGF0dGVybnMuIEZvciBleGFtcGxlLCB0byByZW1vdmUgdGhlIGZpbGUgYHVud2FudGVkYDoKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKyF1bndhbnRlZAorLS0tLS0tLS0tLS0tLS0tLQorCitBbm90aGVyIHRyaWNreSB0aGluZyBpcyBmdWxseSByZXBvcHVsYXRpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4geW91CitubyBsb25nZXIgd2FudCBzcGFyc2UgY2hlY2tvdXQuIFlvdSBjYW5ub3QganVzdCBkaXNhYmxlICJzcGFyc2UKK2NoZWNrb3V0IiBiZWNhdXNlIHNraXAtd29ya3RyZWUgYml0cyBhcmUgc3RpbGwgaW4gdGhlIGluZGV4IGFuZCB5b3VyIHdvcmtpbmcKK2RpcmVjdG9yeSBpcyBzdGlsbCBzcGFyc2VseSBwb3B1bGF0ZWQuIFlvdSBzaG91bGQgcmUtcG9wdWxhdGUgdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSB3aXRoIHRoZSBgJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXRgIGZpbGUgY29udGVudCBhcworZm9sbG93czoKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiB5b3UgY2FuIGRpc2FibGUgc3BhcnNlIGNoZWNrb3V0LiBTcGFyc2UgY2hlY2tvdXQgc3VwcG9ydCBpbiAnZ2l0CityZWFkLXRyZWUnIGFuZCBzaW1pbGFyIGNvbW1hbmRzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFlvdSBuZWVkIHRvCit0dXJuIGBjb3JlLnNwYXJzZUNoZWNrb3V0YCBvbiBpbiBvcmRlciB0byBoYXZlIHNwYXJzZSBjaGVja291dAorc3VwcG9ydC4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXdyaXRlLXRyZWVbMV07IGxpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdOworbGlua2dpdDpnaXRpZ25vcmVbNV07IGxpbmtnaXQ6Z2l0LXNwYXJzZS1jaGVja291dFsxXTsKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2E2MDMzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dApAQCAtMCwwICsxLDEyMTIgQEAKK2dpdC1yZWJhc2UoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlYmFzZSAtIFJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmViYXNlJyBbLWkgfCAtLWludGVyYWN0aXZlXSBbPG9wdGlvbnM+XSBbLS1leGVjIDxjbWQ+XQorCVstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdIFs8dXBzdHJlYW0+IFs8YnJhbmNoPl1dCisnZ2l0IHJlYmFzZScgWy1pIHwgLS1pbnRlcmFjdGl2ZV0gWzxvcHRpb25zPl0gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dCisJLS1yb290IFs8YnJhbmNoPl0KKydnaXQgcmViYXNlJyAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQgfCAtLXF1aXQgfCAtLWVkaXQtdG9kbyB8IC0tc2hvdy1jdXJyZW50LXBhdGNoKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0lmIDxicmFuY2g+IGlzIHNwZWNpZmllZCwgJ2dpdCByZWJhc2UnIHdpbGwgcGVyZm9ybSBhbiBhdXRvbWF0aWMKK2BnaXQgc3dpdGNoIDxicmFuY2g+YCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIE90aGVyd2lzZQoraXQgcmVtYWlucyBvbiB0aGUgY3VycmVudCBicmFuY2guCisKK0lmIDx1cHN0cmVhbT4gaXMgbm90IHNwZWNpZmllZCwgdGhlIHVwc3RyZWFtIGNvbmZpZ3VyZWQgaW4KK2JyYW5jaC48bmFtZT4ucmVtb3RlIGFuZCBicmFuY2guPG5hbWU+Lm1lcmdlIG9wdGlvbnMgd2lsbCBiZSB1c2VkIChzZWUKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgZGV0YWlscykgYW5kIHRoZSBgLS1mb3JrLXBvaW50YCBvcHRpb24gaXMKK2Fzc3VtZWQuICBJZiB5b3UgYXJlIGN1cnJlbnRseSBub3Qgb24gYW55IGJyYW5jaCBvciBpZiB0aGUgY3VycmVudAorYnJhbmNoIGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIHVwc3RyZWFtLCB0aGUgcmViYXNlIHdpbGwgYWJvcnQuCisKK0FsbCBjaGFuZ2VzIG1hZGUgYnkgY29tbWl0cyBpbiB0aGUgY3VycmVudCBicmFuY2ggYnV0IHRoYXQgYXJlIG5vdAoraW4gPHVwc3RyZWFtPiBhcmUgc2F2ZWQgdG8gYSB0ZW1wb3JhcnkgYXJlYS4gIFRoaXMgaXMgdGhlIHNhbWUgc2V0CitvZiBjb21taXRzIHRoYXQgd291bGQgYmUgc2hvd24gYnkgYGdpdCBsb2cgPHVwc3RyZWFtPi4uSEVBRGA7IG9yIGJ5CitgZ2l0IGxvZyAnZm9ya19wb2ludCcuLkhFQURgLCBpZiBgLS1mb3JrLXBvaW50YCBpcyBhY3RpdmUgKHNlZSB0aGUKK2Rlc2NyaXB0aW9uIG9uIGAtLWZvcmstcG9pbnRgIGJlbG93KTsgb3IgYnkgYGdpdCBsb2cgSEVBRGAsIGlmIHRoZQorYC0tcm9vdGAgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworVGhlIGN1cnJlbnQgYnJhbmNoIGlzIHJlc2V0IHRvIDx1cHN0cmVhbT4sIG9yIDxuZXdiYXNlPiBpZiB0aGUKKy0tb250byBvcHRpb24gd2FzIHN1cHBsaWVkLiAgVGhpcyBoYXMgdGhlIGV4YWN0IHNhbWUgZWZmZWN0IGFzCitgZ2l0IHJlc2V0IC0taGFyZCA8dXBzdHJlYW0+YCAob3IgPG5ld2Jhc2U+KS4gIE9SSUdfSEVBRCBpcyBzZXQKK3RvIHBvaW50IGF0IHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBiZWZvcmUgdGhlIHJlc2V0LgorCitUaGUgY29tbWl0cyB0aGF0IHdlcmUgcHJldmlvdXNseSBzYXZlZCBpbnRvIHRoZSB0ZW1wb3JhcnkgYXJlYSBhcmUKK3RoZW4gcmVhcHBsaWVkIHRvIHRoZSBjdXJyZW50IGJyYW5jaCwgb25lIGJ5IG9uZSwgaW4gb3JkZXIuIE5vdGUgdGhhdAorYW55IGNvbW1pdHMgaW4gSEVBRCB3aGljaCBpbnRyb2R1Y2UgdGhlIHNhbWUgdGV4dHVhbCBjaGFuZ2VzIGFzIGEgY29tbWl0CitpbiBIRUFELi48dXBzdHJlYW0+IGFyZSBvbWl0dGVkIChpLmUuLCBhIHBhdGNoIGFscmVhZHkgYWNjZXB0ZWQgdXBzdHJlYW0KK3dpdGggYSBkaWZmZXJlbnQgY29tbWl0IG1lc3NhZ2Ugb3IgdGltZXN0YW1wIHdpbGwgYmUgc2tpcHBlZCkuCisKK0l0IGlzIHBvc3NpYmxlIHRoYXQgYSBtZXJnZSBmYWlsdXJlIHdpbGwgcHJldmVudCB0aGlzIHByb2Nlc3MgZnJvbSBiZWluZworY29tcGxldGVseSBhdXRvbWF0aWMuICBZb3Ugd2lsbCBoYXZlIHRvIHJlc29sdmUgYW55IHN1Y2ggbWVyZ2UgZmFpbHVyZQorYW5kIHJ1biBgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlYC4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIGJ5cGFzcyB0aGUgY29tbWl0Cit0aGF0IGNhdXNlZCB0aGUgbWVyZ2UgZmFpbHVyZSB3aXRoIGBnaXQgcmViYXNlIC0tc2tpcGAuICBUbyBjaGVjayBvdXQgdGhlCitvcmlnaW5hbCA8YnJhbmNoPiBhbmQgcmVtb3ZlIHRoZSAuZ2l0L3JlYmFzZS1hcHBseSB3b3JraW5nIGZpbGVzLCB1c2UgdGhlCitjb21tYW5kIGBnaXQgcmViYXNlIC0tYWJvcnRgIGluc3RlYWQuCisKK0Fzc3VtZSB0aGUgZm9sbG93aW5nIGhpc3RvcnkgZXhpc3RzIGFuZCB0aGUgY3VycmVudCBicmFuY2ggaXMgInRvcGljIjoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgQS0tLUItLS1DIHRvcGljCisgICAgICAgICAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitGcm9tIHRoaXMgcG9pbnQsIHRoZSByZXN1bHQgb2YgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKworICAgIGdpdCByZWJhc2UgbWFzdGVyCisgICAgZ2l0IHJlYmFzZSBtYXN0ZXIgdG9waWMKKword291bGQgYmU6CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgQSctLUInLS1DJyB0b3BpYworICAgICAgICAgICAgICAgICAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCisqTk9URToqIFRoZSBsYXR0ZXIgZm9ybSBpcyBqdXN0IGEgc2hvcnQtaGFuZCBvZiBgZ2l0IGNoZWNrb3V0IHRvcGljYAorZm9sbG93ZWQgYnkgYGdpdCByZWJhc2UgbWFzdGVyYC4gV2hlbiByZWJhc2UgZXhpdHMgYHRvcGljYCB3aWxsCityZW1haW4gdGhlIGNoZWNrZWQtb3V0IGJyYW5jaC4KKworSWYgdGhlIHVwc3RyZWFtIGJyYW5jaCBhbHJlYWR5IGNvbnRhaW5zIGEgY2hhbmdlIHlvdSBoYXZlIG1hZGUgKGUuZy4sCitiZWNhdXNlIHlvdSBtYWlsZWQgYSBwYXRjaCB3aGljaCB3YXMgYXBwbGllZCB1cHN0cmVhbSksIHRoZW4gdGhhdCBjb21taXQKK3dpbGwgYmUgc2tpcHBlZC4gRm9yIGV4YW1wbGUsIHJ1bm5pbmcgYGdpdCByZWJhc2UgbWFzdGVyYCBvbiB0aGUKK2ZvbGxvd2luZyBoaXN0b3J5IChpbiB3aGljaCBgQSdgIGFuZCBgQWAgaW50cm9kdWNlIHRoZSBzYW1lIHNldCBvZiBjaGFuZ2VzLAorYnV0IGhhdmUgZGlmZmVyZW50IGNvbW1pdHRlciBpbmZvcm1hdGlvbik6CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIEEtLS1CLS0tQyB0b3BpYworICAgICAgICAgLworICAgIEQtLS1FLS0tQSctLS1GIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK3dpbGwgcmVzdWx0IGluOgorCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICBCJy0tLUMnIHRvcGljCisgICAgICAgICAgICAgICAgICAvCisgICAgRC0tLUUtLS1BJy0tLUYgbWFzdGVyCistLS0tLS0tLS0tLS0KKworSGVyZSBpcyBob3cgeW91IHdvdWxkIHRyYW5zcGxhbnQgYSB0b3BpYyBicmFuY2ggYmFzZWQgb24gb25lCiticmFuY2ggdG8gYW5vdGhlciwgdG8gcHJldGVuZCB0aGF0IHlvdSBmb3JrZWQgdGhlIHRvcGljIGJyYW5jaAorZnJvbSB0aGUgbGF0dGVyIGJyYW5jaCwgdXNpbmcgYHJlYmFzZSAtLW9udG9gLgorCitGaXJzdCBsZXQncyBhc3N1bWUgeW91ciAndG9waWMnIGlzIGJhc2VkIG9uIGJyYW5jaCAnbmV4dCcuCitGb3IgZXhhbXBsZSwgYSBmZWF0dXJlIGRldmVsb3BlZCBpbiAndG9waWMnIGRlcGVuZHMgb24gc29tZQorZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBmb3VuZCBpbiAnbmV4dCcuCisKKy0tLS0tLS0tLS0tLQorICAgIG8tLS1vLS0tby0tLW8tLS1vICBtYXN0ZXIKKyAgICAgICAgIFwKKyAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tbyAgbmV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tLS1vLS0tbyAgdG9waWMKKy0tLS0tLS0tLS0tLQorCitXZSB3YW50IHRvIG1ha2UgJ3RvcGljJyBmb3JrZWQgZnJvbSBicmFuY2ggJ21hc3Rlcic7IGZvciBleGFtcGxlLAorYmVjYXVzZSB0aGUgZnVuY3Rpb25hbGl0eSBvbiB3aGljaCAndG9waWMnIGRlcGVuZHMgd2FzIG1lcmdlZCBpbnRvIHRoZQorbW9yZSBzdGFibGUgJ21hc3RlcicgYnJhbmNoLiBXZSB3YW50IG91ciB0cmVlIHRvIGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICBvLS0tby0tLW8tLS1vLS0tbyAgbWFzdGVyCisgICAgICAgIHwgICAgICAgICAgICBcCisgICAgICAgIHwgICAgICAgICAgICAgbyctLW8nLS1vJyAgdG9waWMKKyAgICAgICAgIFwKKyAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tbyAgbmV4dAorLS0tLS0tLS0tLS0tCisKK1dlIGNhbiBnZXQgdGhpcyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIgbmV4dCB0b3BpYworCisKK0Fub3RoZXIgZXhhbXBsZSBvZiAtLW9udG8gb3B0aW9uIGlzIHRvIHJlYmFzZSBwYXJ0IG9mIGEKK2JyYW5jaC4gIElmIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgtLS1JLS0tSiB0b3BpY0IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAgICAgIEUtLS1GLS0tRyAgdG9waWNBCisgICAgICAgICAgICAgICAgIC8KKyAgICBBLS0tQi0tLUMtLS1EICBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCit0aGVuIHRoZSBjb21tYW5kCisKKyAgICBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIgdG9waWNBIHRvcGljQgorCit3b3VsZCByZXN1bHQgaW46CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICBIJy0tSSctLUonICB0b3BpY0IKKyAgICAgICAgICAgICAgICAvCisgICAgICAgICAgICAgICAgfCBFLS0tRi0tLUcgIHRvcGljQQorICAgICAgICAgICAgICAgIHwvCisgICAgQS0tLUItLS1DLS0tRCAgbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhpcyBpcyB1c2VmdWwgd2hlbiB0b3BpY0IgZG9lcyBub3QgZGVwZW5kIG9uIHRvcGljQS4KKworQSByYW5nZSBvZiBjb21taXRzIGNvdWxkIGFsc28gYmUgcmVtb3ZlZCB3aXRoIHJlYmFzZS4gIElmIHdlIGhhdmUKK3RoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorCistLS0tLS0tLS0tLS0KKyAgICBFLS0tRi0tLUctLS1ILS0tSS0tLUogIHRvcGljQQorLS0tLS0tLS0tLS0tCisKK3RoZW4gdGhlIGNvbW1hbmQKKworICAgIGdpdCByZWJhc2UgLS1vbnRvIHRvcGljQX41IHRvcGljQX4zIHRvcGljQQorCit3b3VsZCByZXN1bHQgaW4gdGhlIHJlbW92YWwgb2YgY29tbWl0cyBGIGFuZCBHOgorCistLS0tLS0tLS0tLS0KKyAgICBFLS0tSCctLS1JJy0tLUonICB0b3BpY0EKKy0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHVzZWZ1bCBpZiBGIGFuZCBHIHdlcmUgZmxhd2VkIGluIHNvbWUgd2F5LCBvciBzaG91bGQgbm90IGJlCitwYXJ0IG9mIHRvcGljQS4gIE5vdGUgdGhhdCB0aGUgYXJndW1lbnQgdG8gLS1vbnRvIGFuZCB0aGUgPHVwc3RyZWFtPgorcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsaWQgY29tbWl0LWlzaC4KKworSW4gY2FzZSBvZiBjb25mbGljdCwgJ2dpdCByZWJhc2UnIHdpbGwgc3RvcCBhdCB0aGUgZmlyc3QgcHJvYmxlbWF0aWMgY29tbWl0CithbmQgbGVhdmUgY29uZmxpY3QgbWFya2VycyBpbiB0aGUgdHJlZS4gIFlvdSBjYW4gdXNlICdnaXQgZGlmZicgdG8gbG9jYXRlCit0aGUgbWFya2VycyAoPDw8PDw8KSBhbmQgbWFrZSBlZGl0cyB0byByZXNvbHZlIHRoZSBjb25mbGljdC4gIEZvciBlYWNoCitmaWxlIHlvdSBlZGl0LCB5b3UgbmVlZCB0byB0ZWxsIEdpdCB0aGF0IHRoZSBjb25mbGljdCBoYXMgYmVlbiByZXNvbHZlZCwKK3R5cGljYWxseSB0aGlzIHdvdWxkIGJlIGRvbmUgd2l0aAorCisKKyAgICBnaXQgYWRkIDxmaWxlbmFtZT4KKworCitBZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0IG1hbnVhbGx5IGFuZCB1cGRhdGluZyB0aGUgaW5kZXggd2l0aCB0aGUKK2Rlc2lyZWQgcmVzb2x1dGlvbiwgeW91IGNhbiBjb250aW51ZSB0aGUgcmViYXNpbmcgcHJvY2VzcyB3aXRoCisKKworICAgIGdpdCByZWJhc2UgLS1jb250aW51ZQorCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdW5kbyB0aGUgJ2dpdCByZWJhc2UnIHdpdGgKKworCisgICAgZ2l0IHJlYmFzZSAtLWFib3J0CisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworaW5jbHVkZTo6Y29uZmlnL3JlYmFzZS50eHRbXQorCitPUFRJT05TCistLS0tLS0tCistLW9udG8gPG5ld2Jhc2U+OjoKKwlTdGFydGluZyBwb2ludCBhdCB3aGljaCB0byBjcmVhdGUgdGhlIG5ldyBjb21taXRzLiBJZiB0aGUKKwktLW9udG8gb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzdGFydGluZyBwb2ludCBpcworCTx1cHN0cmVhbT4uICBNYXkgYmUgYW55IHZhbGlkIGNvbW1pdCwgYW5kIG5vdCBqdXN0IGFuCisJZXhpc3RpbmcgYnJhbmNoIG5hbWUuCisrCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgIkFcLi4uQiIgYXMgYSBzaG9ydGN1dCBmb3IgdGhlCittZXJnZSBiYXNlIG9mIEEgYW5kIEIgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbgorbGVhdmUgb3V0IGF0IG1vc3Qgb25lIG9mIEEgYW5kIEIsIGluIHdoaWNoIGNhc2UgaXQgZGVmYXVsdHMgdG8gSEVBRC4KKworLS1rZWVwLWJhc2U6OgorCVNldCB0aGUgc3RhcnRpbmcgcG9pbnQgYXQgd2hpY2ggdG8gY3JlYXRlIHRoZSBuZXcgY29tbWl0cyB0byB0aGUKKwltZXJnZSBiYXNlIG9mIDx1cHN0cmVhbT4gPGJyYW5jaD4uIFJ1bm5pbmcKKwknZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSA8dXBzdHJlYW0+IDxicmFuY2g+JyBpcyBlcXVpdmFsZW50IHRvCisJcnVubmluZyAnZ2l0IHJlYmFzZSAtLW9udG8gPHVwc3RyZWFtPi4uLiA8dXBzdHJlYW0+Jy4KKysKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpbiB0aGUgY2FzZSB3aGVyZSBvbmUgaXMgZGV2ZWxvcGluZyBhIGZlYXR1cmUgb24KK3RvcCBvZiBhbiB1cHN0cmVhbSBicmFuY2guIFdoaWxlIHRoZSBmZWF0dXJlIGlzIGJlaW5nIHdvcmtlZCBvbiwgdGhlCit1cHN0cmVhbSBicmFuY2ggbWF5IGFkdmFuY2UgYW5kIGl0IG1heSBub3QgYmUgdGhlIGJlc3QgaWRlYSB0byBrZWVwCityZWJhc2luZyBvbiB0b3Agb2YgdGhlIHVwc3RyZWFtIGJ1dCB0byBrZWVwIHRoZSBiYXNlIGNvbW1pdCBhcy1pcy4KKysKK0FsdGhvdWdoIGJvdGggdGhpcyBvcHRpb24gYW5kIC0tZm9yay1wb2ludCBmaW5kIHRoZSBtZXJnZSBiYXNlIGJldHdlZW4KKzx1cHN0cmVhbT4gYW5kIDxicmFuY2g+LCB0aGlzIG9wdGlvbiB1c2VzIHRoZSBtZXJnZSBiYXNlIGFzIHRoZSBfc3RhcnRpbmcKK3BvaW50XyBvbiB3aGljaCBuZXcgY29tbWl0cyB3aWxsIGJlIGNyZWF0ZWQsIHdoZXJlYXMgLS1mb3JrLXBvaW50IHVzZXMKK3RoZSBtZXJnZSBiYXNlIHRvIGRldGVybWluZSB0aGUgX3NldCBvZiBjb21taXRzXyB3aGljaCB3aWxsIGJlIHJlYmFzZWQuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworPHVwc3RyZWFtPjo6CisJVXBzdHJlYW0gYnJhbmNoIHRvIGNvbXBhcmUgYWdhaW5zdC4gIE1heSBiZSBhbnkgdmFsaWQgY29tbWl0LAorCW5vdCBqdXN0IGFuIGV4aXN0aW5nIGJyYW5jaCBuYW1lLiBEZWZhdWx0cyB0byB0aGUgY29uZmlndXJlZAorCXVwc3RyZWFtIGZvciB0aGUgY3VycmVudCBicmFuY2guCisKKzxicmFuY2g+OjoKKwlXb3JraW5nIGJyYW5jaDsgZGVmYXVsdHMgdG8gSEVBRC4KKworLS1jb250aW51ZTo6CisJUmVzdGFydCB0aGUgcmViYXNpbmcgcHJvY2VzcyBhZnRlciBoYXZpbmcgcmVzb2x2ZWQgYSBtZXJnZSBjb25mbGljdC4KKworLS1hYm9ydDo6CisJQWJvcnQgdGhlIHJlYmFzZSBvcGVyYXRpb24gYW5kIHJlc2V0IEhFQUQgdG8gdGhlIG9yaWdpbmFsCisJYnJhbmNoLiBJZiA8YnJhbmNoPiB3YXMgcHJvdmlkZWQgd2hlbiB0aGUgcmViYXNlIG9wZXJhdGlvbiB3YXMKKwlzdGFydGVkLCB0aGVuIEhFQUQgd2lsbCBiZSByZXNldCB0byA8YnJhbmNoPi4gT3RoZXJ3aXNlIEhFQUQKKwl3aWxsIGJlIHJlc2V0IHRvIHdoZXJlIGl0IHdhcyB3aGVuIHRoZSByZWJhc2Ugb3BlcmF0aW9uIHdhcworCXN0YXJ0ZWQuCisKKy0tcXVpdDo6CisJQWJvcnQgdGhlIHJlYmFzZSBvcGVyYXRpb24gYnV0IEhFQUQgaXMgbm90IHJlc2V0IGJhY2sgdG8gdGhlCisJb3JpZ2luYWwgYnJhbmNoLiBUaGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhcmUgYWxzbyBsZWZ0CisJdW5jaGFuZ2VkIGFzIGEgcmVzdWx0LgorCistLWFwcGx5OgorCVVzZSBhcHBseWluZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSAoY2FsbGluZyBgZ2l0LWFtYAorCWludGVybmFsbHkpLiAgVGhpcyBvcHRpb24gbWF5IGJlY29tZSBhIG5vLW9wIGluIHRoZSBmdXR1cmUKKwlvbmNlIHRoZSBtZXJnZSBiYWNrZW5kIGhhbmRsZXMgZXZlcnl0aGluZyB0aGUgYXBwbHkgb25lIGRvZXMuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLS1lbXB0eT17ZHJvcCxrZWVwLGFza306OgorCUhvdyB0byBoYW5kbGUgY29tbWl0cyB0aGF0IGFyZSBub3QgZW1wdHkgdG8gc3RhcnQgYW5kIGFyZSBub3QKKwljbGVhbiBjaGVycnktcGlja3Mgb2YgYW55IHVwc3RyZWFtIGNvbW1pdCwgYnV0IHdoaWNoIGJlY29tZQorCWVtcHR5IGFmdGVyIHJlYmFzaW5nIChiZWNhdXNlIHRoZXkgY29udGFpbiBhIHN1YnNldCBvZiBhbHJlYWR5CisJdXBzdHJlYW0gY2hhbmdlcykuICBXaXRoIGRyb3AgKHRoZSBkZWZhdWx0KSwgY29tbWl0cyB0aGF0CisJYmVjb21lIGVtcHR5IGFyZSBkcm9wcGVkLiAgV2l0aCBrZWVwLCBzdWNoIGNvbW1pdHMgYXJlIGtlcHQuCisJV2l0aCBhc2sgKGltcGxpZWQgYnkgLS1pbnRlcmFjdGl2ZSksIHRoZSByZWJhc2Ugd2lsbCBoYWx0IHdoZW4KKwlhbiBlbXB0eSBjb21taXQgaXMgYXBwbGllZCBhbGxvd2luZyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgdG8KKwlkcm9wIGl0LCBlZGl0IGZpbGVzIG1vcmUsIG9yIGp1c3QgY29tbWl0IHRoZSBlbXB0eSBjaGFuZ2VzLgorCU90aGVyIG9wdGlvbnMsIGxpa2UgLS1leGVjLCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBvZiBkcm9wIHVubGVzcworCS1pLy0taW50ZXJhY3RpdmUgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQuCisrCitOb3RlIHRoYXQgY29tbWl0cyB3aGljaCBzdGFydCBlbXB0eSBhcmUga2VwdCwgYW5kIGNvbW1pdHMgd2hpY2ggYXJlCitjbGVhbiBjaGVycnktcGlja3MgKGFzIGRldGVybWluZWQgYnkgYGdpdCBsb2cgLS1jaGVycnktbWFyayAuLi5gKSBhcmUKK2Fsd2F5cyBkcm9wcGVkLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy0ta2VlcC1lbXB0eTo6CisJTm8tb3AuICBSZWJhc2luZyBjb21taXRzIHRoYXQgc3RhcnRlZCBlbXB0eSAoaGFkIG5vIGNoYW5nZQorCXJlbGF0aXZlIHRvIHRoZWlyIHBhcmVudCkgdXNlZCB0byBmYWlsIGFuZCB0aGlzIG9wdGlvbiB3b3VsZAorCW92ZXJyaWRlIHRoYXQgYmVoYXZpb3IsIGFsbG93aW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBjaGFuZ2VzIHRvCisJYmUgcmViYXNlZC4gIE5vdyBjb21taXRzIHdpdGggbm8gY2hhbmdlcyBkbyBub3QgY2F1c2UgcmViYXNpbmcKKwl0byBoYWx0LgorKworU2VlIGFsc28gQkVIQVZJT1JBTCBESUZGRVJFTkNFUyBhbmQgSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy0tYWxsb3ctZW1wdHktbWVzc2FnZTo6CisJTm8tb3AuICBSZWJhc2luZyBjb21taXRzIHdpdGggYW4gZW1wdHkgbWVzc2FnZSB1c2VkIHRvIGZhaWwKKwlhbmQgdGhpcyBvcHRpb24gd291bGQgb3ZlcnJpZGUgdGhhdCBiZWhhdmlvciwgYWxsb3dpbmcgY29tbWl0cworCXdpdGggZW1wdHkgbWVzc2FnZXMgdG8gYmUgcmViYXNlZC4gIE5vdyBjb21taXRzIHdpdGggYW4gZW1wdHkKKwltZXNzYWdlIGRvIG5vdCBjYXVzZSByZWJhc2luZyB0byBoYWx0LgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy0tc2tpcDo6CisJUmVzdGFydCB0aGUgcmViYXNpbmcgcHJvY2VzcyBieSBza2lwcGluZyB0aGUgY3VycmVudCBwYXRjaC4KKworLS1lZGl0LXRvZG86OgorCUVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlLgorCistLXNob3ctY3VycmVudC1wYXRjaDo6CisJU2hvdyB0aGUgY3VycmVudCBwYXRjaCBpbiBhbiBpbnRlcmFjdGl2ZSByZWJhc2Ugb3Igd2hlbiByZWJhc2UKKwlpcyBzdG9wcGVkIGJlY2F1c2Ugb2YgY29uZmxpY3RzLiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mCisJYGdpdCBzaG93IFJFQkFTRV9IRUFEYC4KKworLW06OgorLS1tZXJnZTo6CisJVXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UuICBXaGVuIHRoZSByZWN1cnNpdmUgKGRlZmF1bHQpIG1lcmdlCisJc3RyYXRlZ3kgaXMgdXNlZCwgdGhpcyBhbGxvd3MgcmViYXNlIHRvIGJlIGF3YXJlIG9mIHJlbmFtZXMgb24gdGhlCisJdXBzdHJlYW0gc2lkZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisrCitOb3RlIHRoYXQgYSByZWJhc2UgbWVyZ2Ugd29ya3MgYnkgcmVwbGF5aW5nIGVhY2ggY29tbWl0IGZyb20gdGhlIHdvcmtpbmcKK2JyYW5jaCBvbiB0b3Agb2YgdGhlIDx1cHN0cmVhbT4gYnJhbmNoLiAgQmVjYXVzZSBvZiB0aGlzLCB3aGVuIGEgbWVyZ2UKK2NvbmZsaWN0IGhhcHBlbnMsIHRoZSBzaWRlIHJlcG9ydGVkIGFzICdvdXJzJyBpcyB0aGUgc28tZmFyIHJlYmFzZWQKK3Nlcmllcywgc3RhcnRpbmcgd2l0aCA8dXBzdHJlYW0+LCBhbmQgJ3RoZWlycycgaXMgdGhlIHdvcmtpbmcgYnJhbmNoLiAgSW4KK290aGVyIHdvcmRzLCB0aGUgc2lkZXMgYXJlIHN3YXBwZWQuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLXMgPHN0cmF0ZWd5Pjo6CistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorCVVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kuCisJSWYgdGhlcmUgaXMgbm8gYC1zYCBvcHRpb24gJ2dpdCBtZXJnZS1yZWN1cnNpdmUnIGlzIHVzZWQKKwlpbnN0ZWFkLiAgVGhpcyBpbXBsaWVzIC0tbWVyZ2UuCisrCitCZWNhdXNlICdnaXQgcmViYXNlJyByZXBsYXlzIGVhY2ggY29tbWl0IGZyb20gdGhlIHdvcmtpbmcgYnJhbmNoCitvbiB0b3Agb2YgdGhlIDx1cHN0cmVhbT4gYnJhbmNoIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSwgdXNpbmcKK3RoZSAnb3Vycycgc3RyYXRlZ3kgc2ltcGx5IGVtcHRpZXMgYWxsIHBhdGNoZXMgZnJvbSB0aGUgPGJyYW5jaD4sCit3aGljaCBtYWtlcyBsaXR0bGUgc2Vuc2UuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLVggPHN0cmF0ZWd5LW9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PHN0cmF0ZWd5LW9wdGlvbj46OgorCVBhc3MgdGhlIDxzdHJhdGVneS1vcHRpb24+IHRocm91Z2ggdG8gdGhlIG1lcmdlIHN0cmF0ZWd5LgorCVRoaXMgaW1wbGllcyBgLS1tZXJnZWAgYW5kLCBpZiBubyBzdHJhdGVneSBoYXMgYmVlbgorCXNwZWNpZmllZCwgYC1zIHJlY3Vyc2l2ZWAuICBOb3RlIHRoZSByZXZlcnNhbCBvZiAnb3VycycgYW5kCisJJ3RoZWlycycgYXMgbm90ZWQgYWJvdmUgZm9yIHRoZSBgLW1gIG9wdGlvbi4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLXJlcmVyZS1hdXRvdXBkYXRlOjoKKy0tbm8tcmVyZXJlLWF1dG91cGRhdGU6OgorCUFsbG93IHRoZSByZXJlcmUgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUKKwlyZXN1bHQgb2YgYXV0by1jb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlLgorCistU1s8a2V5aWQ+XTo6CistLWdwZy1zaWduWz08a2V5aWQ+XTo6CisJR1BHLXNpZ24gY29tbWl0cy4gVGhlIGBrZXlpZGAgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gdGhlIGNvbW1pdHRlciBpZGVudGl0eTsgaWYgc3BlY2lmaWVkLCBpdCBtdXN0IGJlCisJc3R1Y2sgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGEgc3BhY2UuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LiBJbXBsaWVzIC0tbm8tc3RhdC4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLiBJbXBsaWVzIC0tc3RhdC4KKworLS1zdGF0OjoKKwlTaG93IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0IHJlYmFzZS4gVGhlCisJZGlmZnN0YXQgaXMgYWxzbyBjb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWJhc2Uuc3RhdC4KKworLW46OgorLS1uby1zdGF0OjoKKwlEbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGFzIHBhcnQgb2YgdGhlIHJlYmFzZSBwcm9jZXNzLgorCistLW5vLXZlcmlmeTo6CisJVGhpcyBvcHRpb24gYnlwYXNzZXMgdGhlIHByZS1yZWJhc2UgaG9vay4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy0tdmVyaWZ5OjoKKwlBbGxvd3MgdGhlIHByZS1yZWJhc2UgaG9vayB0byBydW4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgVGhpcyBvcHRpb24gY2FuCisJYmUgdXNlZCB0byBvdmVycmlkZSAtLW5vLXZlcmlmeS4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy1DPG4+OjoKKwlFbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIHN1cnJvdW5kaW5nIGNvbnRleHQgbWF0Y2ggYmVmb3JlCisJYW5kIGFmdGVyIGVhY2ggY2hhbmdlLiAgV2hlbiBmZXdlciBsaW5lcyBvZiBzdXJyb3VuZGluZworCWNvbnRleHQgZXhpc3QgdGhleSBhbGwgbXVzdCBtYXRjaC4gIEJ5IGRlZmF1bHQgbm8gY29udGV4dCBpcworCWV2ZXIgaWdub3JlZC4gIEltcGxpZXMgLS1hcHBseS4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLW5vLWZmOjoKKy0tZm9yY2UtcmViYXNlOjoKKy1mOjoKKwlJbmRpdmlkdWFsbHkgcmVwbGF5IGFsbCByZWJhc2VkIGNvbW1pdHMgaW5zdGVhZCBvZiBmYXN0LWZvcndhcmRpbmcKKwlvdmVyIHRoZSB1bmNoYW5nZWQgb25lcy4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlbnRpcmUgaGlzdG9yeSBvZgorCXRoZSByZWJhc2VkIGJyYW5jaCBpcyBjb21wb3NlZCBvZiBuZXcgY29tbWl0cy4KKysKK1lvdSBtYXkgZmluZCB0aGlzIGhlbHBmdWwgYWZ0ZXIgcmV2ZXJ0aW5nIGEgdG9waWMgYnJhbmNoIG1lcmdlLCBhcyB0aGlzIG9wdGlvbgorcmVjcmVhdGVzIHRoZSB0b3BpYyBicmFuY2ggd2l0aCBmcmVzaCBjb21taXRzIHNvIGl0IGNhbiBiZSByZW1lcmdlZAorc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgbmVlZGluZyB0byAicmV2ZXJ0IHRoZSByZXZlcnNpb24iIChzZWUgdGhlCitsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS5odG1sW3JldmVydC1hLWZhdWx0eS1tZXJnZSBIb3ctVG9dIGZvcgorZGV0YWlscykuCisKKy0tZm9yay1wb2ludDo6CistLW5vLWZvcmstcG9pbnQ6OgorCVVzZSByZWZsb2cgdG8gZmluZCBhIGJldHRlciBjb21tb24gYW5jZXN0b3IgYmV0d2VlbiA8dXBzdHJlYW0+CisJYW5kIDxicmFuY2g+IHdoZW4gY2FsY3VsYXRpbmcgd2hpY2ggY29tbWl0cyBoYXZlIGJlZW4KKwlpbnRyb2R1Y2VkIGJ5IDxicmFuY2g+LgorKworV2hlbiAtLWZvcmstcG9pbnQgaXMgYWN0aXZlLCAnZm9ya19wb2ludCcgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YKKzx1cHN0cmVhbT4gdG8gY2FsY3VsYXRlIHRoZSBzZXQgb2YgY29tbWl0cyB0byByZWJhc2UsIHdoZXJlCisnZm9ya19wb2ludCcgaXMgdGhlIHJlc3VsdCBvZiBgZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDx1cHN0cmVhbT4KKzxicmFuY2g+YCBjb21tYW5kIChzZWUgbGlua2dpdDpnaXQtbWVyZ2UtYmFzZVsxXSkuICBJZiAnZm9ya19wb2ludCcKK2VuZHMgdXAgYmVpbmcgZW1wdHksIHRoZSA8dXBzdHJlYW0+IHdpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrLgorKworSWYgZWl0aGVyIDx1cHN0cmVhbT4gb3IgLS1yb290IGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZW4gdGhlCitkZWZhdWx0IGlzIGAtLW5vLWZvcmstcG9pbnRgLCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgaXMgYC0tZm9yay1wb2ludGAuCisrCitJZiB5b3VyIGJyYW5jaCB3YXMgYmFzZWQgb24gPHVwc3RyZWFtPiBidXQgPHVwc3RyZWFtPiB3YXMgcmV3b3VuZCBhbmQKK3lvdXIgYnJhbmNoIGNvbnRhaW5zIGNvbW1pdHMgd2hpY2ggd2VyZSBkcm9wcGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZAord2l0aCBgLS1rZWVwLWJhc2VgIGluIG9yZGVyIHRvIGRyb3AgdGhvc2UgY29tbWl0cyBmcm9tIHlvdXIgYnJhbmNoLgorCistLWlnbm9yZS13aGl0ZXNwYWNlOjoKKy0td2hpdGVzcGFjZT08b3B0aW9uPjo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgcHJvZ3JhbQorCShzZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0pIHRoYXQgYXBwbGllcyB0aGUgcGF0Y2guCisJSW1wbGllcyAtLWFwcGx5LgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGU6OgorLS1pZ25vcmUtZGF0ZTo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byAnZ2l0IGFtJyB0byBlYXNpbHkgY2hhbmdlIHRoZSBkYXRlcworCW9mIHRoZSByZWJhc2VkIGNvbW1pdHMgKHNlZSBsaW5rZ2l0OmdpdC1hbVsxXSkuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLS1zaWdub2ZmOjoKKwlBZGQgYSBTaWduZWQtb2ZmLWJ5OiB0cmFpbGVyIHRvIGFsbCB0aGUgcmViYXNlZCBjb21taXRzLiBOb3RlCisJdGhhdCBpZiBgLS1pbnRlcmFjdGl2ZWAgaXMgZ2l2ZW4gdGhlbiBvbmx5IGNvbW1pdHMgbWFya2VkIHRvIGJlCisJcGlja2VkLCBlZGl0ZWQgb3IgcmV3b3JkZWQgd2lsbCBoYXZlIHRoZSB0cmFpbGVyIGFkZGVkLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy1pOjoKKy0taW50ZXJhY3RpdmU6OgorCU1ha2UgYSBsaXN0IG9mIHRoZSBjb21taXRzIHdoaWNoIGFyZSBhYm91dCB0byBiZSByZWJhc2VkLiAgTGV0IHRoZQorCXVzZXIgZWRpdCB0aGF0IGxpc3QgYmVmb3JlIHJlYmFzaW5nLiAgVGhpcyBtb2RlIGNhbiBhbHNvIGJlIHVzZWQgdG8KKwlzcGxpdCBjb21taXRzIChzZWUgU1BMSVRUSU5HIENPTU1JVFMgYmVsb3cpLgorKworVGhlIGNvbW1pdCBsaXN0IGZvcm1hdCBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbgorcmViYXNlLmluc3RydWN0aW9uRm9ybWF0LiAgQSBjdXN0b21pemVkIGluc3RydWN0aW9uIGZvcm1hdCB3aWxsIGF1dG9tYXRpY2FsbHkKK2hhdmUgdGhlIGxvbmcgY29tbWl0IGhhc2ggcHJlcGVuZGVkIHRvIHRoZSBmb3JtYXQuCisrCitTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLXI6OgorLS1yZWJhc2UtbWVyZ2VzWz0ocmViYXNlLWNvdXNpbnN8bm8tcmViYXNlLWNvdXNpbnMpXTo6CisJQnkgZGVmYXVsdCwgYSByZWJhc2Ugd2lsbCBzaW1wbHkgZHJvcCBtZXJnZSBjb21taXRzIGZyb20gdGhlIHRvZG8KKwlsaXN0LCBhbmQgcHV0IHRoZSByZWJhc2VkIGNvbW1pdHMgaW50byBhIHNpbmdsZSwgbGluZWFyIGJyYW5jaC4KKwlXaXRoIGAtLXJlYmFzZS1tZXJnZXNgLCB0aGUgcmViYXNlIHdpbGwgaW5zdGVhZCB0cnkgdG8gcHJlc2VydmUKKwl0aGUgYnJhbmNoaW5nIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGNvbW1pdHMgdGhhdCBhcmUgdG8gYmUgcmViYXNlZCwKKwlieSByZWNyZWF0aW5nIHRoZSBtZXJnZSBjb21taXRzLiBBbnkgcmVzb2x2ZWQgbWVyZ2UgY29uZmxpY3RzIG9yCisJbWFudWFsIGFtZW5kbWVudHMgaW4gdGhlc2UgbWVyZ2UgY29tbWl0cyB3aWxsIGhhdmUgdG8gYmUKKwlyZXNvbHZlZC9yZS1hcHBsaWVkIG1hbnVhbGx5LgorKworQnkgZGVmYXVsdCwgb3Igd2hlbiBgbm8tcmViYXNlLWNvdXNpbnNgIHdhcyBzcGVjaWZpZWQsIGNvbW1pdHMgd2hpY2ggZG8gbm90CitoYXZlIGA8dXBzdHJlYW0+YCBhcyBkaXJlY3QgYW5jZXN0b3Igd2lsbCBrZWVwIHRoZWlyIG9yaWdpbmFsIGJyYW5jaCBwb2ludCwKK2kuZS4gY29tbWl0cyB0aGF0IHdvdWxkIGJlIGV4Y2x1ZGVkIGJ5IGxpbmtnaXQ6Z2l0LWxvZ1sxXSdzCitgLS1hbmNlc3RyeS1wYXRoYCBvcHRpb24gd2lsbCBrZWVwIHRoZWlyIG9yaWdpbmFsIGFuY2VzdHJ5IGJ5IGRlZmF1bHQuIElmCit0aGUgYHJlYmFzZS1jb3VzaW5zYCBtb2RlIGlzIHR1cm5lZCBvbiwgc3VjaCBjb21taXRzIGFyZSBpbnN0ZWFkIHJlYmFzZWQKK29udG8gYDx1cHN0cmVhbT5gIChvciBgPG9udG8+YCwgaWYgc3BlY2lmaWVkKS4KKysKK1RoZSBgLS1yZWJhc2UtbWVyZ2VzYCBtb2RlIGlzIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBkZXByZWNhdGVkCitgLS1wcmVzZXJ2ZS1tZXJnZXNgIGJ1dCB3b3JrcyB3aXRoIGludGVyYWN0aXZlIHJlYmFzZXMsCit3aGVyZSBjb21taXRzIGNhbiBiZSByZW9yZGVyZWQsIGluc2VydGVkIGFuZCBkcm9wcGVkIGF0IHdpbGwuCisrCitJdCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSB0byByZWNyZWF0ZSB0aGUgbWVyZ2UgY29tbWl0cyB1c2luZyB0aGUKK2ByZWN1cnNpdmVgIG1lcmdlIHN0cmF0ZWd5OyBEaWZmZXJlbnQgbWVyZ2Ugc3RyYXRlZ2llcyBjYW4gYmUgdXNlZCBvbmx5IHZpYQorZXhwbGljaXQgYGV4ZWMgZ2l0IG1lcmdlIC1zIDxzdHJhdGVneT4gWy4uLl1gIGNvbW1hbmRzLgorKworU2VlIGFsc28gUkVCQVNJTkcgTUVSR0VTIGFuZCBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KKworLXA6OgorLS1wcmVzZXJ2ZS1tZXJnZXM6OgorCVtERVBSRUNBVEVEOiB1c2UgYC0tcmViYXNlLW1lcmdlc2AgaW5zdGVhZF0gUmVjcmVhdGUgbWVyZ2UgY29tbWl0cworCWluc3RlYWQgb2YgZmxhdHRlbmluZyB0aGUgaGlzdG9yeSBieSByZXBsYXlpbmcgY29tbWl0cyBhIG1lcmdlIGNvbW1pdAorCWludHJvZHVjZXMuIE1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb25zIG9yIG1hbnVhbCBhbWVuZG1lbnRzIHRvIG1lcmdlCisJY29tbWl0cyBhcmUgbm90IHByZXNlcnZlZC4KKysKK1RoaXMgdXNlcyB0aGUgYC0taW50ZXJhY3RpdmVgIG1hY2hpbmVyeSBpbnRlcm5hbGx5LCBidXQgY29tYmluaW5nIGl0Cit3aXRoIHRoZSBgLS1pbnRlcmFjdGl2ZWAgb3B0aW9uIGV4cGxpY2l0bHkgaXMgZ2VuZXJhbGx5IG5vdCBhIGdvb2QKK2lkZWEgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyAoc2VlIEJVR1MgYmVsb3cpLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy14IDxjbWQ+OjoKKy0tZXhlYyA8Y21kPjo6CisJQXBwZW5kICJleGVjIDxjbWQ+IiBhZnRlciBlYWNoIGxpbmUgY3JlYXRpbmcgYSBjb21taXQgaW4gdGhlCisJZmluYWwgaGlzdG9yeS4gPGNtZD4gd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBvbmUgb3IgbW9yZSBzaGVsbAorCWNvbW1hbmRzLiBBbnkgY29tbWFuZCB0aGF0IGZhaWxzIHdpbGwgaW50ZXJydXB0IHRoZSByZWJhc2UsCisJd2l0aCBleGl0IGNvZGUgMS4KKysKK1lvdSBtYXkgZXhlY3V0ZSBzZXZlcmFsIGNvbW1hbmRzIGJ5IGVpdGhlciB1c2luZyBvbmUgaW5zdGFuY2Ugb2YgYC0tZXhlY2AKK3dpdGggc2V2ZXJhbCBjb21tYW5kczoKKysKKwlnaXQgcmViYXNlIC1pIC0tZXhlYyAiY21kMSAmJiBjbWQyICYmIC4uLiIKKysKK29yIGJ5IGdpdmluZyBtb3JlIHRoYW4gb25lIGAtLWV4ZWNgOgorKworCWdpdCByZWJhc2UgLWkgLS1leGVjICJjbWQxIiAtLWV4ZWMgImNtZDIiIC0tZXhlYyAuLi4KKysKK0lmIGAtLWF1dG9zcXVhc2hgIGlzIHVzZWQsICJleGVjIiBsaW5lcyB3aWxsIG5vdCBiZSBhcHBlbmRlZCBmb3IKK3RoZSBpbnRlcm1lZGlhdGUgY29tbWl0cywgYW5kIHdpbGwgb25seSBhcHBlYXIgYXQgdGhlIGVuZCBvZiBlYWNoCitzcXVhc2gvZml4dXAgc2VyaWVzLgorKworVGhpcyB1c2VzIHRoZSBgLS1pbnRlcmFjdGl2ZWAgbWFjaGluZXJ5IGludGVybmFsbHksIGJ1dCBpdCBjYW4gYmUgcnVuCit3aXRob3V0IGFuIGV4cGxpY2l0IGAtLWludGVyYWN0aXZlYC4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLXJvb3Q6OgorCVJlYmFzZSBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSA8YnJhbmNoPiwgaW5zdGVhZCBvZgorCWxpbWl0aW5nIHRoZW0gd2l0aCBhbiA8dXBzdHJlYW0+LiAgVGhpcyBhbGxvd3MgeW91IHRvIHJlYmFzZQorCXRoZSByb290IGNvbW1pdChzKSBvbiBhIGJyYW5jaC4gIFdoZW4gdXNlZCB3aXRoIC0tb250bywgaXQKKwl3aWxsIHNraXAgY2hhbmdlcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiA8bmV3YmFzZT4gKGluc3RlYWQgb2YKKwk8dXBzdHJlYW0+KSB3aGVyZWFzIHdpdGhvdXQgLS1vbnRvIGl0IHdpbGwgb3BlcmF0ZSBvbiBldmVyeSBjaGFuZ2UuCisJV2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggYm90aCAtLW9udG8gYW5kIC0tcHJlc2VydmUtbWVyZ2VzLAorCSdhbGwnIHJvb3QgY29tbWl0cyB3aWxsIGJlIHJld3JpdHRlbiB0byBoYXZlIDxuZXdiYXNlPiBhcyBwYXJlbnQKKwlpbnN0ZWFkLgorKworU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCisKKy0tYXV0b3NxdWFzaDo6CistLW5vLWF1dG9zcXVhc2g6OgorCVdoZW4gdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBiZWdpbnMgd2l0aCAic3F1YXNoISAuLi4iIChvcgorCSJmaXh1cCEgLi4uIiksIGFuZCB0aGVyZSBpcyBhbHJlYWR5IGEgY29tbWl0IGluIHRoZSB0b2RvIGxpc3QgdGhhdAorCW1hdGNoZXMgdGhlIHNhbWUgYC4uLmAsIGF1dG9tYXRpY2FsbHkgbW9kaWZ5IHRoZSB0b2RvIGxpc3Qgb2YgcmViYXNlCisJLWkgc28gdGhhdCB0aGUgY29tbWl0IG1hcmtlZCBmb3Igc3F1YXNoaW5nIGNvbWVzIHJpZ2h0IGFmdGVyIHRoZQorCWNvbW1pdCB0byBiZSBtb2RpZmllZCwgYW5kIGNoYW5nZSB0aGUgYWN0aW9uIG9mIHRoZSBtb3ZlZCBjb21taXQKKwlmcm9tIGBwaWNrYCB0byBgc3F1YXNoYCAob3IgYGZpeHVwYCkuICBBIGNvbW1pdCBtYXRjaGVzIHRoZSBgLi4uYCBpZgorCXRoZSBjb21taXQgc3ViamVjdCBtYXRjaGVzLCBvciBpZiB0aGUgYC4uLmAgcmVmZXJzIHRvIHRoZSBjb21taXQncworCWhhc2guIEFzIGEgZmFsbC1iYWNrLCBwYXJ0aWFsIG1hdGNoZXMgb2YgdGhlIGNvbW1pdCBzdWJqZWN0IHdvcmssCisJdG9vLiAgVGhlIHJlY29tbWVuZGVkIHdheSB0byBjcmVhdGUgZml4dXAvc3F1YXNoIGNvbW1pdHMgaXMgYnkgdXNpbmcKKwl0aGUgYC0tZml4dXBgL2AtLXNxdWFzaGAgb3B0aW9ucyBvZiBsaW5rZ2l0OmdpdC1jb21taXRbMV0uCisrCitJZiB0aGUgYC0tYXV0b3NxdWFzaGAgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB1c2luZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYHJlYmFzZS5hdXRvU3F1YXNoYCwgdGhpcyBvcHRpb24gY2FuIGJlCit1c2VkIHRvIG92ZXJyaWRlIGFuZCBkaXNhYmxlIHRoaXMgc2V0dGluZy4KKysKK1NlZSBhbHNvIElOQ09NUEFUSUJMRSBPUFRJT05TIGJlbG93LgorCistLWF1dG9zdGFzaDo6CistLW5vLWF1dG9zdGFzaDo6CisJQXV0b21hdGljYWxseSBjcmVhdGUgYSB0ZW1wb3Jhcnkgc3Rhc2ggZW50cnkgYmVmb3JlIHRoZSBvcGVyYXRpb24KKwliZWdpbnMsIGFuZCBhcHBseSBpdCBhZnRlciB0aGUgb3BlcmF0aW9uIGVuZHMuICBUaGlzIG1lYW5zCisJdGhhdCB5b3UgY2FuIHJ1biByZWJhc2Ugb24gYSBkaXJ0eSB3b3JrdHJlZS4gIEhvd2V2ZXIsIHVzZQorCXdpdGggY2FyZTogdGhlIGZpbmFsIHN0YXNoIGFwcGxpY2F0aW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bAorCXJlYmFzZSBtaWdodCByZXN1bHQgaW4gbm9uLXRyaXZpYWwgY29uZmxpY3RzLgorCistLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWM6OgorLS1uby1yZXNjaGVkdWxlLWZhaWxlZC1leGVjOjoKKwlBdXRvbWF0aWNhbGx5IHJlc2NoZWR1bGUgYGV4ZWNgIGNvbW1hbmRzIHRoYXQgZmFpbGVkLiBUaGlzIG9ubHkgbWFrZXMKKwlzZW5zZSBpbiBpbnRlcmFjdGl2ZSBtb2RlIChvciB3aGVuIGFuIGAtLWV4ZWNgIG9wdGlvbiB3YXMgcHJvdmlkZWQpLgorCitJTkNPTVBBVElCTEUgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgKiAtLWFwcGx5CisgKiAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlCisgKiAtLWlnbm9yZS1kYXRlCisgKiAtLWlnbm9yZS13aGl0ZXNwYWNlCisgKiAtLXdoaXRlc3BhY2UKKyAqIC1DCisKK2FyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAqIC0tbWVyZ2UKKyAqIC0tc3RyYXRlZ3kKKyAqIC0tc3RyYXRlZ3ktb3B0aW9uCisgKiAtLWFsbG93LWVtcHR5LW1lc3NhZ2UKKyAqIC0tW25vLV1hdXRvc3F1YXNoCisgKiAtLXJlYmFzZS1tZXJnZXMKKyAqIC0tcHJlc2VydmUtbWVyZ2VzCisgKiAtLWludGVyYWN0aXZlCisgKiAtLWV4ZWMKKyAqIC0ta2VlcC1lbXB0eQorICogLS1lbXB0eT0KKyAqIC0tZWRpdC10b2RvCisgKiAtLXJvb3Qgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggLS1vbnRvCisKK0luIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIHBhaXJzIG9mIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZToKKworICogLS1wcmVzZXJ2ZS1tZXJnZXMgYW5kIC0taW50ZXJhY3RpdmUKKyAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLXNpZ25vZmYKKyAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLXJlYmFzZS1tZXJnZXMKKyAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLWVtcHR5PQorICogLS1rZWVwLWJhc2UgYW5kIC0tb250bworICogLS1rZWVwLWJhc2UgYW5kIC0tcm9vdAorCitCRUhBVklPUkFMIERJRkZFUkVOQ0VTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnaXQgcmViYXNlIGhhcyB0d28gcHJpbWFyeSBiYWNrZW5kczogYXBwbHkgYW5kIG1lcmdlLiAgKFRoZSBhcHBseQorYmFja2VuZCB1c2VkIHRvIGtub3duIGFzIHRoZSAnYW0nIGJhY2tlbmQsIGJ1dCB0aGUgbmFtZSBsZWQgdG8KK2NvbmZ1c2lvbiBhcyBpdCBsb29rcyBsaWtlIGEgdmVyYiBpbnN0ZWFkIG9mIGEgbm91bi4gIEFsc28sIHRoZSBtZXJnZQorYmFja2VuZCB1c2VkIHRvIGJlIGtub3duIGFzIHRoZSBpbnRlcmFjdGl2ZSBiYWNrZW5kLCBidXQgaXQgaXMgbm93Cit1c2VkIGZvciBub24taW50ZXJhY3RpdmUgY2FzZXMgYXMgd2VsbC4gIEJvdGggd2VyZSByZW5hbWVkIGJhc2VkIG9uCitsb3dlci1sZXZlbCBmdW5jdGlvbmFsaXR5IHRoYXQgdW5kZXJwaW5uZWQgZWFjaC4pIFRoZXJlIGFyZSBzb21lCitzdWJ0bGUgZGlmZmVyZW5jZXMgaW4gaG93IHRoZXNlIHR3byBiYWNrZW5kcyBiZWhhdmU6CisKK0VtcHR5IGNvbW1pdHMKK35+fn5+fn5+fn5+fn4KKworVGhlIGFwcGx5IGJhY2tlbmQgdW5mb3J0dW5hdGVseSBkcm9wcyBpbnRlbnRpb25hbGx5IGVtcHR5IGNvbW1pdHMsIGkuZS4KK2NvbW1pdHMgdGhhdCBzdGFydGVkIGVtcHR5LCB0aG91Z2ggdGhlc2UgYXJlIHJhcmUgaW4gcHJhY3RpY2UuICBJdAorYWxzbyBkcm9wcyBjb21taXRzIHRoYXQgYmVjb21lIGVtcHR5IGFuZCBoYXMgbm8gb3B0aW9uIGZvciBjb250cm9sbGluZwordGhpcyBiZWhhdmlvci4KKworVGhlIG1lcmdlIGJhY2tlbmQga2VlcHMgaW50ZW50aW9uYWxseSBlbXB0eSBjb21taXRzLiAgU2ltaWxhciB0byB0aGUKK2FwcGx5IGJhY2tlbmQsIGJ5IGRlZmF1bHQgdGhlIG1lcmdlIGJhY2tlbmQgZHJvcHMgY29tbWl0cyB0aGF0IGJlY29tZQorZW1wdHkgdW5sZXNzIC1pLy0taW50ZXJhY3RpdmUgaXMgc3BlY2lmaWVkIChpbiB3aGljaCBjYXNlIGl0IHN0b3BzIGFuZAorYXNrcyB0aGUgdXNlciB3aGF0IHRvIGRvKS4gIFRoZSBtZXJnZSBiYWNrZW5kIGFsc28gaGFzIGFuCistLWVtcHR5PXtkcm9wLGtlZXAsYXNrfSBvcHRpb24gZm9yIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBoYW5kbGluZworY29tbWl0cyB0aGF0IGJlY29tZSBlbXB0eS4KKworRGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0R1ZSB0byB0aGUgbGFjayBvZiBhY2N1cmF0ZSB0cmVlIGluZm9ybWF0aW9uIChhcmlzaW5nIGZyb20KK2NvbnN0cnVjdGluZyBmYWtlIGFuY2VzdG9ycyB3aXRoIHRoZSBsaW1pdGVkIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbgorcGF0Y2hlcyksIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGlzIGRpc2FibGVkIGluIHRoZSBhcHBseSBiYWNrZW5kLgorRGlzYWJsZWQgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gbWVhbnMgdGhhdCBpZiBvbmUgc2lkZSBvZiBoaXN0b3J5CityZW5hbWVzIGEgZGlyZWN0b3J5IGFuZCB0aGUgb3RoZXIgYWRkcyBuZXcgZmlsZXMgdG8gdGhlIG9sZCBkaXJlY3RvcnksCit0aGVuIHRoZSBuZXcgZmlsZXMgd2lsbCBiZSBsZWZ0IGJlaGluZCBpbiB0aGUgb2xkIGRpcmVjdG9yeSB3aXRob3V0Cithbnkgd2FybmluZyBhdCB0aGUgdGltZSBvZiByZWJhc2luZyB0aGF0IHlvdSBtYXkgd2FudCB0byBtb3ZlIHRoZXNlCitmaWxlcyBpbnRvIHRoZSBuZXcgZGlyZWN0b3J5LgorCitEaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiB3b3JrcyB3aXRoIHRoZSBtZXJnZSBiYWNrZW5kIHRvIHByb3ZpZGUgeW91Cit3YXJuaW5ncyBpbiBzdWNoIGNhc2VzLgorCitDb250ZXh0Cit+fn5+fn5+CisKK1RoZSBhcHBseSBiYWNrZW5kIHdvcmtzIGJ5IGNyZWF0aW5nIGEgc2VxdWVuY2Ugb2YgcGF0Y2hlcyAoYnkgY2FsbGluZworYGZvcm1hdC1wYXRjaGAgaW50ZXJuYWxseSksIGFuZCB0aGVuIGFwcGx5aW5nIHRoZSBwYXRjaGVzIGluIHNlcXVlbmNlCisoY2FsbGluZyBgYW1gIGludGVybmFsbHkpLiAgUGF0Y2hlcyBhcmUgY29tcG9zZWQgb2YgbXVsdGlwbGUgaHVua3MsCitlYWNoIHdpdGggbGluZSBudW1iZXJzLCBhIGNvbnRleHQgcmVnaW9uLCBhbmQgdGhlIGFjdHVhbCBjaGFuZ2VzLiAgVGhlCitsaW5lIG51bWJlcnMgaGF2ZSB0byBiZSB0YWtlbiB3aXRoIHNvbWUgZnV6eiwgc2luY2UgdGhlIG90aGVyIHNpZGUKK3dpbGwgbGlrZWx5IGhhdmUgaW5zZXJ0ZWQgb3IgZGVsZXRlZCBsaW5lcyBlYXJsaWVyIGluIHRoZSBmaWxlLiAgVGhlCitjb250ZXh0IHJlZ2lvbiBpcyBtZWFudCB0byBoZWxwIGZpbmQgaG93IHRvIGFkanVzdCB0aGUgbGluZSBudW1iZXJzIGluCitvcmRlciB0byBhcHBseSB0aGUgY2hhbmdlcyB0byB0aGUgcmlnaHQgbGluZXMuICBIb3dldmVyLCBpZiBtdWx0aXBsZQorYXJlYXMgb2YgdGhlIGNvZGUgaGF2ZSB0aGUgc2FtZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb250ZXh0LCB0aGUKK3dyb25nIG9uZSBjYW4gYmUgcGlja2VkLiAgVGhlcmUgYXJlIHJlYWwtd29ybGQgY2FzZXMgd2hlcmUgdGhpcyBoYXMKK2NhdXNlZCBjb21taXRzIHRvIGJlIHJlYXBwbGllZCBpbmNvcnJlY3RseSB3aXRoIG5vIGNvbmZsaWN0cyByZXBvcnRlZC4KK1NldHRpbmcgZGlmZi5jb250ZXh0IHRvIGEgbGFyZ2VyIHZhbHVlIG1heSBwcmV2ZW50IHN1Y2ggdHlwZXMgb2YKK3Byb2JsZW1zLCBidXQgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2Ygc3B1cmlvdXMgY29uZmxpY3RzIChzaW5jZSBpdAord2lsbCByZXF1aXJlIG1vcmUgbGluZXMgb2YgbWF0Y2hpbmcgY29udGV4dCB0byBhcHBseSkuCisKK1RoZSBtZXJnZSBiYWNrZW5kIHdvcmtzIHdpdGggYSBmdWxsIGNvcHkgb2YgZWFjaCByZWxldmFudCBmaWxlLAoraW5zdWxhdGluZyBpdCBmcm9tIHRoZXNlIHR5cGVzIG9mIHByb2JsZW1zLgorCitMYWJlbGxpbmcgb2YgY29uZmxpY3RzIG1hcmtlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIHRoZXJlIGFyZSBjb250ZW50IGNvbmZsaWN0cywgdGhlIG1lcmdlIG1hY2hpbmVyeSB0cmllcyB0bworYW5ub3RhdGUgZWFjaCBzaWRlJ3MgY29uZmxpY3QgbWFya2VycyB3aXRoIHRoZSBjb21taXRzIHdoZXJlIHRoZQorY29udGVudCBjYW1lIGZyb20uICBTaW5jZSB0aGUgYXBwbHkgYmFja2VuZCBkcm9wcyB0aGUgb3JpZ2luYWwKK2luZm9ybWF0aW9uIGFib3V0IHRoZSByZWJhc2VkIGNvbW1pdHMgYW5kIHRoZWlyIHBhcmVudHMgKGFuZCBpbnN0ZWFkCitnZW5lcmF0ZXMgbmV3IGZha2UgY29tbWl0cyBiYXNlZCBvZmYgbGltaXRlZCBpbmZvcm1hdGlvbiBpbiB0aGUKK2dlbmVyYXRlZCBwYXRjaGVzKSwgdGhvc2UgY29tbWl0cyBjYW5ub3QgYmUgaWRlbnRpZmllZDsgaW5zdGVhZCBpdCBoYXMKK3RvIGZhbGwgYmFjayB0byBhIGNvbW1pdCBzdW1tYXJ5LiAgQWxzbywgd2hlbiBtZXJnZS5jb25mbGljdFN0eWxlIGlzCitzZXQgdG8gZGlmZjMsIHRoZSBhcHBseSBiYWNrZW5kIHdpbGwgdXNlICJjb25zdHJ1Y3RlZCBtZXJnZSBiYXNlIiB0bworbGFiZWwgdGhlIGNvbnRlbnQgZnJvbSB0aGUgbWVyZ2UgYmFzZSwgYW5kIHRodXMgcHJvdmlkZSBubyBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIG1lcmdlIGJhc2UgY29tbWl0IHdoYXRzb2V2ZXIuCisKK1RoZSBtZXJnZSBiYWNrZW5kIHdvcmtzIHdpdGggdGhlIGZ1bGwgY29tbWl0cyBvbiBib3RoIHNpZGVzIG9mIGhpc3RvcnkKK2FuZCB0aHVzIGhhcyBubyBzdWNoIGxpbWl0YXRpb25zLgorCitIb29rcworfn5+fn4KKworVGhlIGFwcGx5IGJhY2tlbmQgaGFzIG5vdCB0cmFkaXRpb25hbGx5IGNhbGxlZCB0aGUgcG9zdC1jb21taXQgaG9vaywKK3doaWxlIHRoZSBtZXJnZSBiYWNrZW5kIGhhcy4gIEhvd2V2ZXIsIHRoaXMgd2FzIGJ5IGFjY2lkZW50IG9mCitpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBieSBkZXNpZ24uICBCb3RoIGJhY2tlbmRzIHNob3VsZCBoYXZlIHRoZQorc2FtZSBiZWhhdmlvciwgdGhvdWdoIGl0IGlzIG5vdCBjbGVhciB3aGljaCBvbmUgaXMgY29ycmVjdC4KKworSW50ZXJydXB0YWJpbGl0eQorfn5+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+CisKK09ubHkgd29ya3MgaWYgdGhlIGNoYW5nZXMgKHBhdGNoIElEcyBiYXNlZCBvbiB0aGUgZGlmZiBjb250ZW50cykgb24KKydzdWJzeXN0ZW0nIGFyZSBsaXRlcmFsbHkgdGhlIHNhbWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgcmViYXNlCisnc3Vic3lzdGVtJyBkaWQuCisKK0luIHRoYXQgY2FzZSwgdGhlIGZpeCBpcyBlYXN5IGJlY2F1c2UgJ2dpdCByZWJhc2UnIGtub3dzIHRvIHNraXAKK2NoYW5nZXMgdGhhdCBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBuZXcgdXBzdHJlYW0uICBTbyBpZiB5b3Ugc2F5CisoYXNzdW1pbmcgeW91J3JlIG9uICd0b3BpYycpCistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCByZWJhc2Ugc3Vic3lzdGVtCistLS0tLS0tLS0tLS0KK3lvdSB3aWxsIGVuZCB1cCB3aXRoIHRoZSBmaXhlZCBoaXN0b3J5CistLS0tLS0tLS0tLS0KKyAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tbyAgbWFzdGVyCisJCQkJIFwKKwkJCQkgIG8nLS1vJy0tbyctLW8nLS1vJyAgc3Vic3lzdGVtCisJCQkJCQkgICBcCisJCQkJCQkgICAgKi0tLSotLS0qICB0b3BpYworLS0tLS0tLS0tLS0tCisKKworVGhlIGhhcmQgY2FzZQorfn5+fn5+fn5+fn5+fgorCitUaGluZ3MgZ2V0IG1vcmUgY29tcGxpY2F0ZWQgaWYgdGhlICdzdWJzeXN0ZW0nIGNoYW5nZXMgZG8gbm90IGV4YWN0bHkKK2NvcnJlc3BvbmQgdG8gdGhlIG9uZXMgYmVmb3JlIHRoZSByZWJhc2UuCisKK05PVEU6IFdoaWxlIGFuICJlYXN5IGNhc2UgcmVjb3ZlcnkiIHNvbWV0aW1lcyBhcHBlYXJzIHRvIGJlIHN1Y2Nlc3NmdWwKKyAgICAgIGV2ZW4gaW4gdGhlIGhhcmQgY2FzZSwgaXQgbWF5IGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuICBGb3IKKyAgICAgIGV4YW1wbGUsIGEgY29tbWl0IHRoYXQgd2FzIHJlbW92ZWQgdmlhIGBnaXQgcmViYXNlCisgICAgICAtLWludGVyYWN0aXZlYCB3aWxsIGJlICoqcmVzdXJyZWN0ZWQqKiEKKworVGhlIGlkZWEgaXMgdG8gbWFudWFsbHkgdGVsbCAnZ2l0IHJlYmFzZScgIndoZXJlIHRoZSBvbGQgJ3N1YnN5c3RlbScKK2VuZGVkIGFuZCB5b3VyICd0b3BpYycgYmVnYW4iLCB0aGF0IGlzLCB3aGF0IHRoZSBvbGQgbWVyZ2UgYmFzZQorYmV0d2VlbiB0aGVtIHdhcy4gIFlvdSB3aWxsIGhhdmUgdG8gZmluZCBhIHdheSB0byBuYW1lIHRoZSBsYXN0IGNvbW1pdAorb2YgdGhlIG9sZCAnc3Vic3lzdGVtJywgZm9yIGV4YW1wbGU6CisKKyogV2l0aCB0aGUgJ3N1YnN5c3RlbScgcmVmbG9nOiBhZnRlciAnZ2l0IGZldGNoJywgdGhlIG9sZCB0aXAgb2YKKyAgJ3N1YnN5c3RlbScgaXMgYXQgYHN1YnN5c3RlbUB7MX1gLiAgU3Vic2VxdWVudCBmZXRjaGVzIHdpbGwKKyAgaW5jcmVhc2UgdGhlIG51bWJlci4gIChTZWUgbGlua2dpdDpnaXQtcmVmbG9nWzFdLikKKworKiBSZWxhdGl2ZSB0byB0aGUgdGlwIG9mICd0b3BpYyc6IGtub3dpbmcgdGhhdCB5b3VyICd0b3BpYycgaGFzIHRocmVlCisgIGNvbW1pdHMsIHRoZSBvbGQgdGlwIG9mICdzdWJzeXN0ZW0nIG11c3QgYmUgYHRvcGljfjNgLgorCitZb3UgY2FuIHRoZW4gdHJhbnNwbGFudCB0aGUgb2xkIGBzdWJzeXN0ZW0uLnRvcGljYCB0byB0aGUgbmV3IHRpcCBieQorc2F5aW5nIChmb3IgdGhlIHJlZmxvZyBjYXNlLCBhbmQgYXNzdW1pbmcgeW91IGFyZSBvbiAndG9waWMnIGFscmVhZHkpOgorLS0tLS0tLS0tLS0tCisgICAgJCBnaXQgcmViYXNlIC0tb250byBzdWJzeXN0ZW0gc3Vic3lzdGVtQHsxfQorLS0tLS0tLS0tLS0tCisKK1RoZSByaXBwbGUgZWZmZWN0IG9mIGEgImhhcmQgY2FzZSIgcmVjb3ZlcnkgaXMgZXNwZWNpYWxseSBiYWQ6CisnZXZlcnlvbmUnIGRvd25zdHJlYW0gZnJvbSAndG9waWMnIHdpbGwgbm93IGhhdmUgdG8gcGVyZm9ybSBhICJoYXJkCitjYXNlIiByZWNvdmVyeSB0b28hCisKK1JFQkFTSU5HIE1FUkdFUworLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbnRlcmFjdGl2ZSByZWJhc2UgY29tbWFuZCB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCB0byBoYW5kbGUKK2luZGl2aWR1YWwgcGF0Y2ggc2VyaWVzLiBBcyBzdWNoLCBpdCBtYWtlcyBzZW5zZSB0byBleGNsdWRlIG1lcmdlCitjb21taXRzIGZyb20gdGhlIHRvZG8gbGlzdCwgYXMgdGhlIGRldmVsb3BlciBtYXkgaGF2ZSBtZXJnZWQgdGhlCit0aGVuLWN1cnJlbnQgYG1hc3RlcmAgd2hpbGUgd29ya2luZyBvbiB0aGUgYnJhbmNoLCBvbmx5IHRvIHJlYmFzZQorYWxsIHRoZSBjb21taXRzIG9udG8gYG1hc3RlcmAgZXZlbnR1YWxseSAoc2tpcHBpbmcgdGhlIG1lcmdlCitjb21taXRzKS4KKworSG93ZXZlciwgdGhlcmUgYXJlIGxlZ2l0aW1hdGUgcmVhc29ucyB3aHkgYSBkZXZlbG9wZXIgbWF5IHdhbnQgdG8KK3JlY3JlYXRlIG1lcmdlIGNvbW1pdHM6IHRvIGtlZXAgdGhlIGJyYW5jaCBzdHJ1Y3R1cmUgKG9yICJjb21taXQKK3RvcG9sb2d5Iikgd2hlbiB3b3JraW5nIG9uIG11bHRpcGxlLCBpbnRlci1yZWxhdGVkIGJyYW5jaGVzLgorCitJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBkZXZlbG9wZXIgd29ya3Mgb24gYSB0b3BpYyBicmFuY2ggdGhhdAorcmVmYWN0b3JzIHRoZSB3YXkgYnV0dG9ucyBhcmUgZGVmaW5lZCwgYW5kIG9uIGFub3RoZXIgdG9waWMgYnJhbmNoCit0aGF0IHVzZXMgdGhhdCByZWZhY3RvcmluZyB0byBpbXBsZW1lbnQgYSAiUmVwb3J0IGEgYnVnIiBidXR0b24uIFRoZQorb3V0cHV0IG9mIGBnaXQgbG9nIC0tZ3JhcGggLS1mb3JtYXQ9JXMgLTVgIG1heSBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisqICAgTWVyZ2UgYnJhbmNoICdyZXBvcnQtYS1idWcnCit8XAorfCAqIEFkZCB0aGUgZmVlZGJhY2sgYnV0dG9uCisqIHwgTWVyZ2UgYnJhbmNoICdyZWZhY3Rvci1idXR0b24nCit8XCBcCit8IHwvCit8ICogVXNlIHRoZSBCdXR0b24gY2xhc3MgZm9yIGFsbCBidXR0b25zCit8ICogRXh0cmFjdCBhIGdlbmVyaWMgQnV0dG9uIGNsYXNzIGZyb20gdGhlIERvd25sb2FkQnV0dG9uIG9uZQorLS0tLS0tLS0tLS0tCisKK1RoZSBkZXZlbG9wZXIgbWlnaHQgd2FudCB0byByZWJhc2UgdGhvc2UgY29tbWl0cyB0byBhIG5ld2VyIGBtYXN0ZXJgCit3aGlsZSBrZWVwaW5nIHRoZSBicmFuY2ggdG9wb2xvZ3ksIGZvciBleGFtcGxlIHdoZW4gdGhlIGZpcnN0IHRvcGljCiticmFuY2ggaXMgZXhwZWN0ZWQgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGBtYXN0ZXJgIG11Y2ggZWFybGllciB0aGFuIHRoZQorc2Vjb25kIG9uZSwgc2F5LCB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyB3aXRoIGNoYW5nZXMgdG8gdGhlCitEb3dubG9hZEJ1dHRvbiBjbGFzcyB0aGF0IG1hZGUgaXQgaW50byBgbWFzdGVyYC4KKworVGhpcyByZWJhc2UgY2FuIGJlIHBlcmZvcm1lZCB1c2luZyB0aGUgYC0tcmViYXNlLW1lcmdlc2Agb3B0aW9uLgorSXQgd2lsbCBnZW5lcmF0ZSBhIHRvZG8gbGlzdCBsb29raW5nIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCitsYWJlbCBvbnRvCisKKyMgQnJhbmNoOiByZWZhY3Rvci1idXR0b24KK3Jlc2V0IG9udG8KK3BpY2sgMTIzNDU2IEV4dHJhY3QgYSBnZW5lcmljIEJ1dHRvbiBjbGFzcyBmcm9tIHRoZSBEb3dubG9hZEJ1dHRvbiBvbmUKK3BpY2sgNjU0MzIxIFVzZSB0aGUgQnV0dG9uIGNsYXNzIGZvciBhbGwgYnV0dG9ucworbGFiZWwgcmVmYWN0b3ItYnV0dG9uCisKKyMgQnJhbmNoOiByZXBvcnQtYS1idWcKK3Jlc2V0IHJlZmFjdG9yLWJ1dHRvbiAjIFVzZSB0aGUgQnV0dG9uIGNsYXNzIGZvciBhbGwgYnV0dG9ucworcGljayBhYmNkZWYgQWRkIHRoZSBmZWVkYmFjayBidXR0b24KK2xhYmVsIHJlcG9ydC1hLWJ1ZworCityZXNldCBvbnRvCittZXJnZSAtQyBhMWIyYzMgcmVmYWN0b3ItYnV0dG9uICMgTWVyZ2UgJ3JlZmFjdG9yLWJ1dHRvbicKK21lcmdlIC1DIDZmNWU0ZCByZXBvcnQtYS1idWcgIyBNZXJnZSAncmVwb3J0LWEtYnVnJworLS0tLS0tLS0tLS0tCisKK0luIGNvbnRyYXN0IHRvIGEgcmVndWxhciBpbnRlcmFjdGl2ZSByZWJhc2UsIHRoZXJlIGFyZSBgbGFiZWxgLCBgcmVzZXRgCithbmQgYG1lcmdlYCBjb21tYW5kcyBpbiBhZGRpdGlvbiB0byBgcGlja2Agb25lcy4KKworVGhlIGBsYWJlbGAgY29tbWFuZCBhc3NvY2lhdGVzIGEgbGFiZWwgd2l0aCB0aGUgY3VycmVudCBIRUFEIHdoZW4gdGhhdAorY29tbWFuZCBpcyBleGVjdXRlZC4gVGhlc2UgbGFiZWxzIGFyZSBjcmVhdGVkIGFzIHdvcmt0cmVlLWxvY2FsIHJlZnMKKyhgcmVmcy9yZXdyaXR0ZW4vPGxhYmVsPmApIHRoYXQgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIHJlYmFzZQorZmluaXNoZXMuIFRoYXQgd2F5LCByZWJhc2Ugb3BlcmF0aW9ucyBpbiBtdWx0aXBsZSB3b3JrdHJlZXMgbGlua2VkIHRvCit0aGUgc2FtZSByZXBvc2l0b3J5IGRvIG5vdCBpbnRlcmZlcmUgd2l0aCBvbmUgYW5vdGhlci4gSWYgdGhlIGBsYWJlbGAKK2NvbW1hbmQgZmFpbHMsIGl0IGlzIHJlc2NoZWR1bGVkIGltbWVkaWF0ZWx5LCB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGhvdwordG8gcHJvY2VlZC4KKworVGhlIGByZXNldGAgY29tbWFuZCByZXNldHMgdGhlIEhFQUQsIGluZGV4IGFuZCB3b3JrdHJlZSB0byB0aGUgc3BlY2lmaWVkCityZXZpc2lvbi4gSXQgaXMgc2ltaWxhciB0byBhbiBgZXhlYyBnaXQgcmVzZXQgLS1oYXJkIDxsYWJlbD5gLCBidXQKK3JlZnVzZXMgdG8gb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlcy4gSWYgdGhlIGByZXNldGAgY29tbWFuZCBmYWlscywgaXQgaXMKK3Jlc2NoZWR1bGVkIGltbWVkaWF0ZWx5LCB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGhvdyB0byBlZGl0IHRoZSB0b2RvIGxpc3QKKyh0aGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYSBgcmVzZXRgIGNvbW1hbmQgd2FzIGluc2VydGVkIGludG8gdGhlIHRvZG8KK2xpc3QgbWFudWFsbHkgYW5kIGNvbnRhaW5zIGEgdHlwbykuCisKK1RoZSBgbWVyZ2VgIGNvbW1hbmQgd2lsbCBtZXJnZSB0aGUgc3BlY2lmaWVkIHJldmlzaW9uKHMpIGludG8gd2hhdGV2ZXIKK2lzIEhFQUQgYXQgdGhhdCB0aW1lLiBXaXRoIGAtQyA8b3JpZ2luYWwtY29tbWl0PmAsIHRoZSBjb21taXQgbWVzc2FnZSBvZgordGhlIHNwZWNpZmllZCBtZXJnZSBjb21taXQgd2lsbCBiZSB1c2VkLiBXaGVuIHRoZSBgLUNgIGlzIGNoYW5nZWQgdG8KK2EgbG93ZXItY2FzZSBgLWNgLCB0aGUgbWVzc2FnZSB3aWxsIGJlIG9wZW5lZCBpbiBhbiBlZGl0b3IgYWZ0ZXIgYQorc3VjY2Vzc2Z1bCBtZXJnZSBzbyB0aGF0IHRoZSB1c2VyIGNhbiBlZGl0IHRoZSBtZXNzYWdlLgorCitJZiBhIGBtZXJnZWAgY29tbWFuZCBmYWlscyBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIG1lcmdlIGNvbmZsaWN0cyAoaS5lLgord2hlbiB0aGUgbWVyZ2Ugb3BlcmF0aW9uIGRpZCBub3QgZXZlbiBzdGFydCksIGl0IGlzIHJlc2NoZWR1bGVkIGltbWVkaWF0ZWx5LgorCitBdCB0aGlzIHRpbWUsIHRoZSBgbWVyZ2VgIGNvbW1hbmQgd2lsbCAqYWx3YXlzKiB1c2UgdGhlIGByZWN1cnNpdmVgCittZXJnZSBzdHJhdGVneSBmb3IgcmVndWxhciBtZXJnZXMsIGFuZCBgb2N0b3B1c2AgZm9yIG9jdG9wdXMgbWVyZ2VzLAord2l0aCBubyB3YXkgdG8gY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4gVG8gd29yayBhcm91bmQKK3RoaXMsIGFuIGBleGVjYCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGNhbGwgYGdpdCBtZXJnZWAgZXhwbGljaXRseSwKK3VzaW5nIHRoZSBmYWN0IHRoYXQgdGhlIGxhYmVscyBhcmUgd29ya3RyZWUtbG9jYWwgcmVmcyAodGhlIHJlZgorYHJlZnMvcmV3cml0dGVuL29udG9gIHdvdWxkIGNvcnJlc3BvbmQgdG8gdGhlIGxhYmVsIGBvbnRvYCwgZm9yIGV4YW1wbGUpLgorCitOb3RlOiB0aGUgZmlyc3QgY29tbWFuZCAoYGxhYmVsIG9udG9gKSBsYWJlbHMgdGhlIHJldmlzaW9uIG9udG8gd2hpY2gKK3RoZSBjb21taXRzIGFyZSByZWJhc2VkOyBUaGUgbmFtZSBgb250b2AgaXMganVzdCBhIGNvbnZlbnRpb24sIGFzIGEgbm9kCit0byB0aGUgYC0tb250b2Agb3B0aW9uLgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGludHJvZHVjZSBjb21wbGV0ZWx5IG5ldyBtZXJnZSBjb21taXRzIGZyb20gc2NyYXRjaAorYnkgYWRkaW5nIGEgY29tbWFuZCBvZiB0aGUgZm9ybSBgbWVyZ2UgPG1lcmdlLWhlYWQ+YC4gVGhpcyBmb3JtIHdpbGwKK2dlbmVyYXRlIGEgdGVudGF0aXZlIGNvbW1pdCBtZXNzYWdlIGFuZCBhbHdheXMgb3BlbiBhbiBlZGl0b3IgdG8gbGV0IHRoZQordXNlciBlZGl0IGl0LiBUaGlzIGNhbiBiZSB1c2VmdWwgZS5nLiB3aGVuIGEgdG9waWMgYnJhbmNoIHR1cm5zIG91dCB0bworYWRkcmVzcyBtb3JlIHRoYW4gYSBzaW5nbGUgY29uY2VybiBhbmQgd2FudHMgdG8gYmUgc3BsaXQgaW50byB0d28gb3IKK2V2ZW4gbW9yZSB0b3BpYyBicmFuY2hlcy4gQ29uc2lkZXIgdGhpcyB0b2RvIGxpc3Q6CisKKy0tLS0tLS0tLS0tLQorcGljayAxOTI4MzcgU3dpdGNoIGZyb20gR05VIE1ha2VmaWxlcyB0byBDTWFrZQorcGljayA1YTZjN2UgRG9jdW1lbnQgdGhlIHN3aXRjaCB0byBDTWFrZQorcGljayA5MTgyNzMgRml4IGRldGVjdGlvbiBvZiBPcGVuU1NMIGluIENNYWtlCitwaWNrIGFmYmVjZCBodHRwOiBhZGQgc3VwcG9ydCBmb3IgVExTIHYxLjMKK3BpY2sgZmRiYWVjIEZpeCBkZXRlY3Rpb24gb2YgY1VSTCBpbiBDTWFrZSBvbiBXaW5kb3dzCistLS0tLS0tLS0tLS0KKworVGhlIG9uZSBjb21taXQgaW4gdGhpcyBsaXN0IHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gQ01ha2UgbWF5IHZlcnkgd2VsbAoraGF2ZSBiZWVuIG1vdGl2YXRlZCBieSB3b3JraW5nIG9uIGZpeGluZyBhbGwgdGhvc2UgYnVncyBpbnRyb2R1Y2VkIGJ5Citzd2l0Y2hpbmcgdG8gQ01ha2UsIGJ1dCBpdCBhZGRyZXNzZXMgYSBkaWZmZXJlbnQgY29uY2Vybi4gVG8gc3BsaXQgdGhpcworYnJhbmNoIGludG8gdHdvIHRvcGljIGJyYW5jaGVzLCB0aGUgdG9kbyBsaXN0IGNvdWxkIGJlIGVkaXRlZCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorbGFiZWwgb250bworCitwaWNrIGFmYmVjZCBodHRwOiBhZGQgc3VwcG9ydCBmb3IgVExTIHYxLjMKK2xhYmVsIHRsc3YxLjMKKworcmVzZXQgb250bworcGljayAxOTI4MzcgU3dpdGNoIGZyb20gR05VIE1ha2VmaWxlcyB0byBDTWFrZQorcGljayA5MTgyNzMgRml4IGRldGVjdGlvbiBvZiBPcGVuU1NMIGluIENNYWtlCitwaWNrIGZkYmFlYyBGaXggZGV0ZWN0aW9uIG9mIGNVUkwgaW4gQ01ha2Ugb24gV2luZG93cworcGljayA1YTZjN2UgRG9jdW1lbnQgdGhlIHN3aXRjaCB0byBDTWFrZQorbGFiZWwgY21ha2UKKworcmVzZXQgb250bworbWVyZ2UgdGxzdjEuMworbWVyZ2UgY21ha2UKKy0tLS0tLS0tLS0tLQorCitCVUdTCistLS0tCitUaGUgdG9kbyBsaXN0IHByZXNlbnRlZCBieSB0aGUgZGVwcmVjYXRlZCBgLS1wcmVzZXJ2ZS1tZXJnZXMgLS1pbnRlcmFjdGl2ZWAKK2RvZXMgbm90IHJlcHJlc2VudCB0aGUgdG9wb2xvZ3kgb2YgdGhlIHJldmlzaW9uIGdyYXBoICh1c2UgYC0tcmViYXNlLW1lcmdlc2AKK2luc3RlYWQpLiAgRWRpdGluZyBjb21taXRzIGFuZCByZXdvcmRpbmcgdGhlaXIgY29tbWl0IG1lc3NhZ2VzIHNob3VsZCB3b3JrCitmaW5lLCBidXQgYXR0ZW1wdHMgdG8gcmVvcmRlciBjb21taXRzIHRlbmQgdG8gcHJvZHVjZSBjb3VudGVyaW50dWl0aXZlIHJlc3VsdHMuCitVc2UgYC0tcmViYXNlLW1lcmdlc2AgaW4gc3VjaCBzY2VuYXJpb3MgaW5zdGVhZC4KKworRm9yIGV4YW1wbGUsIGFuIGF0dGVtcHQgdG8gcmVhcnJhbmdlCistLS0tLS0tLS0tLS0KKzEgLS0tIDIgLS0tIDMgLS0tIDQgLS0tIDUKKy0tLS0tLS0tLS0tLQordG8KKy0tLS0tLS0tLS0tLQorMSAtLS0gMiAtLS0gNCAtLS0gMyAtLS0gNQorLS0tLS0tLS0tLS0tCitieSBtb3ZpbmcgdGhlICJwaWNrIDQiIGxpbmUgd2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBoaXN0b3J5OgorLS0tLS0tLS0tLS0tCisJMworICAgICAgIC8KKzEgLS0tIDIgLS0tIDQgLS0tIDUKKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NzAyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0CkBAIC0wLDAgKzEsMjU2IEBACitnaXQtcmVjZWl2ZS1wYWNrKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZWNlaXZlLXBhY2sgLSBSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQtcmVjZWl2ZS1wYWNrJyA8ZGlyZWN0b3J5PgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ludm9rZWQgYnkgJ2dpdCBzZW5kLXBhY2snIGFuZCB1cGRhdGVzIHRoZSByZXBvc2l0b3J5IHdpdGggdGhlCitpbmZvcm1hdGlvbiBmZWQgZnJvbSB0aGUgcmVtb3RlIGVuZC4KKworVGhpcyBjb21tYW5kIGlzIHVzdWFsbHkgbm90IGludm9rZWQgZGlyZWN0bHkgYnkgdGhlIGVuZCB1c2VyLgorVGhlIFVJIGZvciB0aGUgcHJvdG9jb2wgaXMgb24gdGhlICdnaXQgc2VuZC1wYWNrJyBzaWRlLCBhbmQgdGhlCitwcm9ncmFtIHBhaXIgaXMgbWVhbnQgdG8gYmUgdXNlZCB0byBwdXNoIHVwZGF0ZXMgdG8gcmVtb3RlCityZXBvc2l0b3J5LiAgRm9yIHB1bGwgb3BlcmF0aW9ucywgc2VlIGxpbmtnaXQ6Z2l0LWZldGNoLXBhY2tbMV0uCisKK1RoZSBjb21tYW5kIGFsbG93cyBmb3IgY3JlYXRpb24gYW5kIGZhc3QtZm9yd2FyZGluZyBvZiBzaGExIHJlZnMKKyhoZWFkcy90YWdzKSBvbiB0aGUgcmVtb3RlIGVuZCAoc3RyaWN0bHkgc3BlYWtpbmcsIGl0IGlzIHRoZQorbG9jYWwgZW5kICdnaXQtcmVjZWl2ZS1wYWNrJyBydW5zLCBidXQgdG8gdGhlIHVzZXIgd2hvIGlzIHNpdHRpbmcgYXQKK3RoZSBzZW5kLXBhY2sgZW5kLCBpdCBpcyB1cGRhdGluZyB0aGUgcmVtb3RlLiAgQ29uZnVzZWQ/KQorCitUaGVyZSBhcmUgb3RoZXIgcmVhbC13b3JsZCBleGFtcGxlcyBvZiB1c2luZyB1cGRhdGUgYW5kCitwb3N0LXVwZGF0ZSBob29rcyBmb3VuZCBpbiB0aGUgRG9jdW1lbnRhdGlvbi9ob3d0byBkaXJlY3RvcnkuCisKKydnaXQtcmVjZWl2ZS1wYWNrJyBob25vdXJzIHRoZSByZWNlaXZlLmRlbnlOb25GYXN0Rm9yd2FyZHMgY29uZmlnCitvcHRpb24sIHdoaWNoIHRlbGxzIGl0IGlmIHVwZGF0ZXMgdG8gYSByZWYgc2hvdWxkIGJlIGRlbmllZCBpZiB0aGV5CithcmUgbm90IGZhc3QtZm9yd2FyZHMuCisKK0EgbnVtYmVyIG9mIG90aGVyIHJlY2VpdmUuKiBjb25maWcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIHR3ZWFrCitpdHMgYmVoYXZpb3IsIHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK09QVElPTlMKKy0tLS0tLS0KKzxkaXJlY3Rvcnk+OjoKKwlUaGUgcmVwb3NpdG9yeSB0byBzeW5jIGludG8uCisKK1BSRS1SRUNFSVZFIEhPT0sKKy0tLS0tLS0tLS0tLS0tLS0KK0JlZm9yZSBhbnkgcmVmIGlzIHVwZGF0ZWQsIGlmICRHSVRfRElSL2hvb2tzL3ByZS1yZWNlaXZlIGZpbGUgZXhpc3RzCithbmQgaXMgZXhlY3V0YWJsZSwgaXQgd2lsbCBiZSBpbnZva2VkIG9uY2Ugd2l0aCBubyBwYXJhbWV0ZXJzLiAgVGhlCitzdGFuZGFyZCBpbnB1dCBvZiB0aGUgaG9vayB3aWxsIGJlIG9uZSBsaW5lIHBlciByZWYgdG8gYmUgdXBkYXRlZDoKKworICAgICAgIHNoYTEtb2xkIFNQIHNoYTEtbmV3IFNQIHJlZm5hbWUgTEYKKworVGhlIHJlZm5hbWUgdmFsdWUgaXMgcmVsYXRpdmUgdG8gJEdJVF9ESVI7IGUuZy4gZm9yIHRoZSBtYXN0ZXIKK2hlYWQgdGhpcyBpcyAicmVmcy9oZWFkcy9tYXN0ZXIiLiAgVGhlIHR3byBzaGExIHZhbHVlcyBiZWZvcmUKK2VhY2ggcmVmbmFtZSBhcmUgdGhlIG9iamVjdCBuYW1lcyBmb3IgdGhlIHJlZm5hbWUgYmVmb3JlIGFuZCBhZnRlcgordGhlIHVwZGF0ZS4gIFJlZnMgdG8gYmUgY3JlYXRlZCB3aWxsIGhhdmUgc2hhMS1vbGQgZXF1YWwgdG8gMFx7NDB9LAord2hpbGUgcmVmcyB0byBiZSBkZWxldGVkIHdpbGwgaGF2ZSBzaGExLW5ldyBlcXVhbCB0byAwXHs0MH0sIG90aGVyd2lzZQorc2hhMS1vbGQgYW5kIHNoYTEtbmV3IHNob3VsZCBiZSB2YWxpZCBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LgorCitXaGVuIGFjY2VwdGluZyBhIHNpZ25lZCBwdXNoIChzZWUgbGlua2dpdDpnaXQtcHVzaFsxXSksIHRoZSBzaWduZWQKK3B1c2ggY2VydGlmaWNhdGUgaXMgc3RvcmVkIGluIGEgYmxvYiBhbmQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKK2BHSVRfUFVTSF9DRVJUYCBjYW4gYmUgY29uc3VsdGVkIGZvciBpdHMgb2JqZWN0IG5hbWUuICBTZWUgdGhlCitkZXNjcmlwdGlvbiBvZiBgcG9zdC1yZWNlaXZlYCBob29rIGZvciBhbiBleGFtcGxlLiAgSW4gYWRkaXRpb24sIHRoZQorY2VydGlmaWNhdGUgaXMgdmVyaWZpZWQgdXNpbmcgR1BHIGFuZCB0aGUgcmVzdWx0IGlzIGV4cG9ydGVkIHdpdGgKK3RoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorCitgR0lUX1BVU0hfQ0VSVF9TSUdORVJgOjoKKwlUaGUgbmFtZSBhbmQgdGhlIGUtbWFpbCBhZGRyZXNzIG9mIHRoZSBvd25lciBvZiB0aGUga2V5IHRoYXQKKwlzaWduZWQgdGhlIHB1c2ggY2VydGlmaWNhdGUuCisKK2BHSVRfUFVTSF9DRVJUX0tFWWA6OgorCVRoZSBHUEcga2V5IElEIG9mIHRoZSBrZXkgdGhhdCBzaWduZWQgdGhlIHB1c2ggY2VydGlmaWNhdGUuCisKK2BHSVRfUFVTSF9DRVJUX1NUQVRVU2A6OgorCVRoZSBzdGF0dXMgb2YgR1BHIHZlcmlmaWNhdGlvbiBvZiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSwKKwl1c2luZyB0aGUgc2FtZSBtbmVtb25pYyBhcyB1c2VkIGluIGAlRz9gIGZvcm1hdCBvZiBgZ2l0IGxvZ2AKKwlmYW1pbHkgb2YgY29tbWFuZHMgKHNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0pLgorCitgR0lUX1BVU0hfQ0VSVF9OT05DRWA6OgorCVRoZSBub25jZSBzdHJpbmcgdGhlIHByb2Nlc3MgYXNrZWQgdGhlIHNpZ25lciB0byBpbmNsdWRlCisJaW4gdGhlIHB1c2ggY2VydGlmaWNhdGUuICBJZiB0aGlzIGRvZXMgbm90IG1hdGNoIHRoZSB2YWx1ZQorCXJlY29yZGVkIG9uIHRoZSAibm9uY2UiIGhlYWRlciBpbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSwgaXQKKwltYXkgaW5kaWNhdGUgdGhhdCB0aGUgY2VydGlmaWNhdGUgaXMgYSB2YWxpZCBvbmUgdGhhdCBpcworCWJlaW5nIHJlcGxheWVkIGZyb20gYSBzZXBhcmF0ZSAiZ2l0IHB1c2giIHNlc3Npb24uCisKK2BHSVRfUFVTSF9DRVJUX05PTkNFX1NUQVRVU2A6OgorYFVOU09MSUNJVEVEYDs7CisJImdpdCBwdXNoIC0tc2lnbmVkIiBzZW50IGEgbm9uY2Ugd2hlbiB3ZSBkaWQgbm90IGFzayBpdCB0bworCXNlbmQgb25lLgorYE1JU1NJTkdgOzsKKwkiZ2l0IHB1c2ggLS1zaWduZWQiIGRpZCBub3Qgc2VuZCBhbnkgbm9uY2UgaGVhZGVyLgorYEJBRGA7OworCSJnaXQgcHVzaCAtLXNpZ25lZCIgc2VudCBhIGJvZ3VzIG5vbmNlLgorYE9LYDs7CisJImdpdCBwdXNoIC0tc2lnbmVkIiBzZW50IHRoZSBub25jZSB3ZSBhc2tlZCBpdCB0byBzZW5kLgorYFNMT1BgOzsKKwkiZ2l0IHB1c2ggLS1zaWduZWQiIHNlbnQgYSBub25jZSBkaWZmZXJlbnQgZnJvbSB3aGF0IHdlCisJYXNrZWQgaXQgdG8gc2VuZCBub3csIGJ1dCBpbiBhIHByZXZpb3VzIHNlc3Npb24uICBTZWUKKwlgR0lUX1BVU0hfQ0VSVF9OT05DRV9TTE9QYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworYEdJVF9QVVNIX0NFUlRfTk9OQ0VfU0xPUGA6OgorCSJnaXQgcHVzaCAtLXNpZ25lZCIgc2VudCBhIG5vbmNlIGRpZmZlcmVudCBmcm9tIHdoYXQgd2UKKwlhc2tlZCBpdCB0byBzZW5kIG5vdywgYnV0IGluIGEgZGlmZmVyZW50IHNlc3Npb24gd2hvc2UKKwlzdGFydGluZyB0aW1lIGlzIGRpZmZlcmVudCBieSB0aGlzIG1hbnkgc2Vjb25kcyBmcm9tIHRoZQorCWN1cnJlbnQgc2Vzc2lvbi4gIE9ubHkgbWVhbmluZ2Z1bCB3aGVuCisJYEdJVF9QVVNIX0NFUlRfTk9OQ0VfU1RBVFVTYCBzYXlzIGBTTE9QYC4KKwlBbHNvIHJlYWQgYWJvdXQgYHJlY2VpdmUuY2VydE5vbmNlU2xvcGAgdmFyaWFibGUgaW4KKwlsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK1RoaXMgaG9vayBpcyBjYWxsZWQgYmVmb3JlIGFueSByZWZuYW1lIGlzIHVwZGF0ZWQgYW5kIGJlZm9yZSBhbnkKK2Zhc3QtZm9yd2FyZCBjaGVja3MgYXJlIHBlcmZvcm1lZC4KKworSWYgdGhlIHByZS1yZWNlaXZlIGhvb2sgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgc3RhdHVzIG5vIHVwZGF0ZXMKK3dpbGwgYmUgcGVyZm9ybWVkLCBhbmQgdGhlIHVwZGF0ZSwgcG9zdC1yZWNlaXZlIGFuZCBwb3N0LXVwZGF0ZQoraG9va3Mgd2lsbCBub3QgYmUgaW52b2tlZCBlaXRoZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gcXVpY2tseQorYmFpbCBvdXQgaWYgdGhlIHVwZGF0ZSBpcyBub3QgdG8gYmUgc3VwcG9ydGVkLgorCitTZWUgdGhlIG5vdGVzIG9uIHRoZSBxdWFyYW50aW5lIGVudmlyb25tZW50IGJlbG93LgorCitVUERBVEUgSE9PSworLS0tLS0tLS0tLS0KK0JlZm9yZSBlYWNoIHJlZiBpcyB1cGRhdGVkLCBpZiAkR0lUX0RJUi9ob29rcy91cGRhdGUgZmlsZSBleGlzdHMKK2FuZCBpcyBleGVjdXRhYmxlLCBpdCBpcyBpbnZva2VkIG9uY2UgcGVyIHJlZiwgd2l0aCB0aHJlZSBwYXJhbWV0ZXJzOgorCisgICAgICAgJEdJVF9ESVIvaG9va3MvdXBkYXRlIHJlZm5hbWUgc2hhMS1vbGQgc2hhMS1uZXcKKworVGhlIHJlZm5hbWUgcGFyYW1ldGVyIGlzIHJlbGF0aXZlIHRvICRHSVRfRElSOyBlLmcuIGZvciB0aGUgbWFzdGVyCitoZWFkIHRoaXMgaXMgInJlZnMvaGVhZHMvbWFzdGVyIi4gIFRoZSB0d28gc2hhMSBhcmd1bWVudHMgYXJlCit0aGUgb2JqZWN0IG5hbWVzIGZvciB0aGUgcmVmbmFtZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSB1cGRhdGUuCitOb3RlIHRoYXQgdGhlIGhvb2sgaXMgY2FsbGVkIGJlZm9yZSB0aGUgcmVmbmFtZSBpcyB1cGRhdGVkLAorc28gZWl0aGVyIHNoYTEtb2xkIGlzIDBcezQwfSAobWVhbmluZyB0aGVyZSBpcyBubyBzdWNoIHJlZiB5ZXQpLAorb3IgaXQgc2hvdWxkIG1hdGNoIHdoYXQgaXMgcmVjb3JkZWQgaW4gcmVmbmFtZS4KKworVGhlIGhvb2sgc2hvdWxkIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgaWYgaXQgd2FudHMgdG8gZGlzYWxsb3cKK3VwZGF0aW5nIHRoZSBuYW1lZCByZWYuICBPdGhlcndpc2UgaXQgc2hvdWxkIGV4aXQgd2l0aCB6ZXJvLgorCitTdWNjZXNzZnVsIGV4ZWN1dGlvbiAoYSB6ZXJvIGV4aXQgc3RhdHVzKSBvZiB0aGlzIGhvb2sgZG9lcyBub3QKK2Vuc3VyZSB0aGUgcmVmIHdpbGwgYWN0dWFsbHkgYmUgdXBkYXRlZCwgaXQgaXMgb25seSBhIHByZXJlcXVpc2l0ZS4KK0FzIHN1Y2ggaXQgaXMgbm90IGEgZ29vZCBpZGVhIHRvIHNlbmQgbm90aWNlcyAoZS5nLiBlbWFpbCkgZnJvbQordGhpcyBob29rLiAgQ29uc2lkZXIgdXNpbmcgdGhlIHBvc3QtcmVjZWl2ZSBob29rIGluc3RlYWQuCisKK1BPU1QtUkVDRUlWRSBIT09LCistLS0tLS0tLS0tLS0tLS0tLQorQWZ0ZXIgYWxsIHJlZnMgd2VyZSB1cGRhdGVkIChvciBhdHRlbXB0ZWQgdG8gYmUgdXBkYXRlZCksIGlmIGFueQorcmVmIHVwZGF0ZSB3YXMgc3VjY2Vzc2Z1bCwgYW5kIGlmICRHSVRfRElSL2hvb2tzL3Bvc3QtcmVjZWl2ZQorZmlsZSBleGlzdHMgYW5kIGlzIGV4ZWN1dGFibGUsIGl0IHdpbGwgYmUgaW52b2tlZCBvbmNlIHdpdGggbm8KK3BhcmFtZXRlcnMuICBUaGUgc3RhbmRhcmQgaW5wdXQgb2YgdGhlIGhvb2sgd2lsbCBiZSBvbmUgbGluZQorZm9yIGVhY2ggc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgcmVmOgorCisgICAgICAgc2hhMS1vbGQgU1Agc2hhMS1uZXcgU1AgcmVmbmFtZSBMRgorCitUaGUgcmVmbmFtZSB2YWx1ZSBpcyByZWxhdGl2ZSB0byAkR0lUX0RJUjsgZS5nLiBmb3IgdGhlIG1hc3RlcgoraGVhZCB0aGlzIGlzICJyZWZzL2hlYWRzL21hc3RlciIuICBUaGUgdHdvIHNoYTEgdmFsdWVzIGJlZm9yZQorZWFjaCByZWZuYW1lIGFyZSB0aGUgb2JqZWN0IG5hbWVzIGZvciB0aGUgcmVmbmFtZSBiZWZvcmUgYW5kIGFmdGVyCit0aGUgdXBkYXRlLiAgUmVmcyB0aGF0IHdlcmUgY3JlYXRlZCB3aWxsIGhhdmUgc2hhMS1vbGQgZXF1YWwgdG8KKzBcezQwfSwgd2hpbGUgcmVmcyB0aGF0IHdlcmUgZGVsZXRlZCB3aWxsIGhhdmUgc2hhMS1uZXcgZXF1YWwgdG8KKzBcezQwfSwgb3RoZXJ3aXNlIHNoYTEtb2xkIGFuZCBzaGExLW5ldyBzaG91bGQgYmUgdmFsaWQgb2JqZWN0cyBpbgordGhlIHJlcG9zaXRvcnkuCisKK1RoZSBgR0lUX1BVU0hfQ0VSVCpgIGVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUgaW5zcGVjdGVkLCBqdXN0IGFzCitpbiBgcHJlLXJlY2VpdmVgIGhvb2ssIGFmdGVyIGFjY2VwdGluZyBhIHNpZ25lZCBwdXNoLgorCitVc2luZyB0aGlzIGhvb2ssIGl0IGlzIGVhc3kgdG8gZ2VuZXJhdGUgbWFpbHMgZGVzY3JpYmluZyB0aGUgdXBkYXRlcwordG8gdGhlIHJlcG9zaXRvcnkuICBUaGlzIGV4YW1wbGUgc2NyaXB0IHNlbmRzIG9uZSBtYWlsIG1lc3NhZ2UgcGVyCityZWYgbGlzdGluZyB0aGUgY29tbWl0cyBwdXNoZWQgdG8gdGhlIHJlcG9zaXRvcnksIGFuZCBsb2dzIHRoZSBwdXNoCitjZXJ0aWZpY2F0ZXMgb2Ygc2lnbmVkIHB1c2hlcyB3aXRoIGdvb2Qgc2lnbmF0dXJlcyB0byBhIGxvZ2dlcgorc2VydmljZToKKworLS0tLQorIyEvYmluL3NoCisjIG1haWwgb3V0IGNvbW1pdCB1cGRhdGUgaW5mb3JtYXRpb24uCit3aGlsZSByZWFkIG92YWwgbnZhbCByZWYKK2RvCisJaWYgZXhwciAiJG92YWwiIDogJzAqJCcgPi9kZXYvbnVsbAorCXRoZW4KKwkJZWNobyAiQ3JlYXRlZCBhIG5ldyByZWYsIHdpdGggdGhlIGZvbGxvd2luZyBjb21taXRzOiIKKwkJZ2l0IHJldi1saXN0IC0tcHJldHR5ICIkbnZhbCIKKwllbHNlCisJCWVjaG8gIk5ldyBjb21taXRzOiIKKwkJZ2l0IHJldi1saXN0IC0tcHJldHR5ICIkbnZhbCIgIl4kb3ZhbCIKKwlmaSB8CisJbWFpbCAtcyAiQ2hhbmdlcyB0byByZWYgJHJlZiIgY29tbWl0LWxpc3RAbXlkb21haW4KK2RvbmUKKyMgbG9nIHNpZ25lZCBwdXNoIGNlcnRpZmljYXRlLCBpZiBhbnkKK2lmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IiAmJiB0ZXN0ICR7R0lUX1BVU0hfQ0VSVF9TVEFUVVN9ID0gRwordGhlbgorCSgKKwkJZWNobyBleHBlY3RlZCBub25jZSBpcyAke0dJVF9QVVNIX05PTkNFfQorCQlnaXQgY2F0LWZpbGUgYmxvYiAke0dJVF9QVVNIX0NFUlR9CisJKSB8IG1haWwgLXMgInB1c2ggY2VydGlmaWNhdGUgZnJvbSAkR0lUX1BVU0hfQ0VSVF9TSUdORVIiIHB1c2gtbG9nQG15ZG9tYWluCitmaQorZXhpdCAwCistLS0tCisKK1RoZSBleGl0IGNvZGUgZnJvbSB0aGlzIGhvb2sgaW52b2NhdGlvbiBpcyBpZ25vcmVkLCBob3dldmVyIGEKK25vbi16ZXJvIGV4aXQgY29kZSB3aWxsIGdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UuCisKK05vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgcmVmbmFtZSB0byBub3QgaGF2ZSBzaGExLW5ldyB3aGVuIHRoaXMKK2hvb2sgcnVucy4gIFRoaXMgY2FuIGVhc2lseSBvY2N1ciBpZiBhbm90aGVyIHVzZXIgbW9kaWZpZXMgdGhlIHJlZgorYWZ0ZXIgaXQgd2FzIHVwZGF0ZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snLCBidXQgYmVmb3JlIHRoZSBob29rIHdhcyBhYmxlCit0byBldmFsdWF0ZSBpdC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaG9va3MgcmVseSBvbiBzaGExLW5ldworcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgcmVmbmFtZS4KKworUE9TVC1VUERBVEUgSE9PSworLS0tLS0tLS0tLS0tLS0tLQorQWZ0ZXIgYWxsIG90aGVyIHByb2Nlc3NpbmcsIGlmIGF0IGxlYXN0IG9uZSByZWYgd2FzIHVwZGF0ZWQsIGFuZAoraWYgJEdJVF9ESVIvaG9va3MvcG9zdC11cGRhdGUgZmlsZSBleGlzdHMgYW5kIGlzIGV4ZWN1dGFibGUsIHRoZW4KK3Bvc3QtdXBkYXRlIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxpc3Qgb2YgcmVmcyB0aGF0IGhhdmUgYmVlbiB1cGRhdGVkLgorVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgYW55IHJlcG9zaXRvcnkgd2lkZSBjbGVhbnVwIHRhc2tzLgorCitUaGUgZXhpdCBjb2RlIGZyb20gdGhpcyBob29rIGludm9jYXRpb24gaXMgaWdub3JlZDsgdGhlIG9ubHkgdGhpbmcKK2xlZnQgZm9yICdnaXQtcmVjZWl2ZS1wYWNrJyB0byBkbyBhdCB0aGF0IHBvaW50IGlzIHRvIGV4aXQgaXRzZWxmCithbnl3YXkuCisKK1RoaXMgaG9vayBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIHJ1biBgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mb2AKK2lmIHRoZSByZXBvc2l0b3J5IGlzIHBhY2tlZCBhbmQgaXMgc2VydmVkIHZpYSBhIGR1bWIgdHJhbnNwb3J0LgorCistLS0tCisjIS9iaW4vc2gKK2V4ZWMgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbworLS0tLQorCisKK1FVQVJBTlRJTkUgRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBgcmVjZWl2ZS1wYWNrYCB0YWtlcyBpbiBvYmplY3RzLCB0aGV5IGFyZSBwbGFjZWQgaW50byBhIHRlbXBvcmFyeQorInF1YXJhbnRpbmUiIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGAkR0lUX0RJUi9vYmplY3RzYCBkaXJlY3RvcnkgYW5kCittaWdyYXRlZCBpbnRvIHRoZSBtYWluIG9iamVjdCBzdG9yZSBvbmx5IGFmdGVyIHRoZSBgcHJlLXJlY2VpdmVgIGhvb2sKK2hhcyBjb21wbGV0ZWQuIElmIHRoZSBwdXNoIGZhaWxzIGJlZm9yZSB0aGVuLCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpcworcmVtb3ZlZCBlbnRpcmVseS4KKworVGhpcyBoYXMgYSBmZXcgdXNlci12aXNpYmxlIGVmZmVjdHMgYW5kIGNhdmVhdHM6CisKKyAgMS4gUHVzaGVzIHdoaWNoIGZhaWwgZHVlIHRvIHByb2JsZW1zIHdpdGggdGhlIGluY29taW5nIHBhY2ssIG1pc3NpbmcKKyAgICAgb2JqZWN0cywgb3IgZHVlIHRvIHRoZSBgcHJlLXJlY2VpdmVgIGhvb2sgd2lsbCBub3QgbGVhdmUgYW55CisgICAgIG9uLWRpc2sgZGF0YS4gVGhpcyBpcyB1c3VhbGx5IGhlbHBmdWwgdG8gcHJldmVudCByZXBlYXRlZCBmYWlsZWQKKyAgICAgcHVzaGVzIGZyb20gZmlsbGluZyB1cCB5b3VyIGRpc2ssIGJ1dCBjYW4gbWFrZSBkZWJ1Z2dpbmcgbW9yZQorICAgICBjaGFsbGVuZ2luZy4KKworICAyLiBBbnkgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBgcHJlLXJlY2VpdmVgIGhvb2sgd2lsbCBiZSBjcmVhdGVkIGluCisgICAgIHRoZSBxdWFyYW50aW5lIGRpcmVjdG9yeSAoYW5kIG1pZ3JhdGVkIG9ubHkgaWYgaXQgc3VjY2VlZHMpLgorCisgIDMuIFRoZSBgcHJlLXJlY2VpdmVgIGhvb2sgTVVTVCBOT1QgdXBkYXRlIGFueSByZWZzIHRvIHBvaW50IHRvCisgICAgIHF1YXJhbnRpbmVkIG9iamVjdHMuIE90aGVyIHByb2dyYW1zIGFjY2Vzc2luZyB0aGUgcmVwb3NpdG9yeSB3aWxsCisgICAgIG5vdCBiZSBhYmxlIHRvIHNlZSB0aGUgb2JqZWN0cyAoYW5kIGlmIHRoZSBwcmUtcmVjZWl2ZSBob29rIGZhaWxzLAorICAgICB0aG9zZSByZWZzIHdvdWxkIGJlY29tZSBjb3JydXB0ZWQpLiBGb3Igc2FmZXR5LCBhbnkgcmVmIHVwZGF0ZXMKKyAgICAgZnJvbSB3aXRoaW4gYHByZS1yZWNlaXZlYCBhcmUgYXV0b21hdGljYWxseSByZWplY3RlZC4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXNlbmQtcGFja1sxXSwgbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0ODdmZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQKQEAgLTAsMCArMSwxMzggQEAKK2dpdC1yZWZsb2coMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlZmxvZyAtIE1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24KKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVmbG9nJyA8c3ViY29tbWFuZD4gPG9wdGlvbnM+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhlIGNvbW1hbmQgdGFrZXMgdmFyaW91cyBzdWJjb21tYW5kcywgYW5kIGRpZmZlcmVudCBvcHRpb25zCitkZXBlbmRpbmcgb24gdGhlIHN1YmNvbW1hbmQ6CisKK1t2ZXJzZV0KKydnaXQgcmVmbG9nJyBbJ3Nob3cnXSBbbG9nLW9wdGlvbnNdIFs8cmVmPl0KKydnaXQgcmVmbG9nIGV4cGlyZScgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0KKwlbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0KKwlbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbCBbLS1zaW5nbGUtd29ya3RyZWVdIHwgPHJlZnM+Li4uXQorJ2dpdCByZWZsb2cgZGVsZXRlJyBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdCisJWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSByZWZAXHtzcGVjaWZpZXJcfS4uLgorJ2dpdCByZWZsb2cgZXhpc3RzJyA8cmVmPgorCitSZWZlcmVuY2UgbG9ncywgb3IgInJlZmxvZ3MiLCByZWNvcmQgd2hlbiB0aGUgdGlwcyBvZiBicmFuY2hlcyBhbmQKK290aGVyIHJlZmVyZW5jZXMgd2VyZSB1cGRhdGVkIGluIHRoZSBsb2NhbCByZXBvc2l0b3J5LiBSZWZsb2dzIGFyZQordXNlZnVsIGluIHZhcmlvdXMgR2l0IGNvbW1hbmRzLCB0byBzcGVjaWZ5IHRoZSBvbGQgdmFsdWUgb2YgYQorcmVmZXJlbmNlLiBGb3IgZXhhbXBsZSwgYEhFQURAezJ9YCBtZWFucyAid2hlcmUgSEVBRCB1c2VkIHRvIGJlIHR3bworbW92ZXMgYWdvIiwgYG1hc3RlckB7b25lLndlZWsuYWdvfWAgbWVhbnMgIndoZXJlIG1hc3RlciB1c2VkIHRvIHBvaW50Cit0byBvbmUgd2VlayBhZ28gaW4gdGhpcyBsb2NhbCByZXBvc2l0b3J5IiwgYW5kIHNvIG9uLiBTZWUKK2xpbmtnaXQ6Z2l0cmV2aXNpb25zWzddIGZvciBtb3JlIGRldGFpbHMuCisKK1RoaXMgY29tbWFuZCBtYW5hZ2VzIHRoZSBpbmZvcm1hdGlvbiByZWNvcmRlZCBpbiB0aGUgcmVmbG9ncy4KKworVGhlICJzaG93IiBzdWJjb21tYW5kICh3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0LCBpbiB0aGUgYWJzZW5jZSBvZgorYW55IHN1YmNvbW1hbmRzKSBzaG93cyB0aGUgbG9nIG9mIHRoZSByZWZlcmVuY2UgcHJvdmlkZWQgaW4gdGhlCitjb21tYW5kLWxpbmUgKG9yIGBIRUFEYCwgYnkgZGVmYXVsdCkuIFRoZSByZWZsb2cgY292ZXJzIGFsbCByZWNlbnQKK2FjdGlvbnMsIGFuZCBpbiBhZGRpdGlvbiB0aGUgYEhFQURgIHJlZmxvZyByZWNvcmRzIGJyYW5jaCBzd2l0Y2hpbmcuCitgZ2l0IHJlZmxvZyBzaG93YCBpcyBhbiBhbGlhcyBmb3IgYGdpdCBsb2cgLWcgLS1hYmJyZXYtY29tbWl0CistLXByZXR0eT1vbmVsaW5lYDsgc2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlICJleHBpcmUiIHN1YmNvbW1hbmQgcHJ1bmVzIG9sZGVyIHJlZmxvZyBlbnRyaWVzLiBFbnRyaWVzIG9sZGVyCit0aGFuIGBleHBpcmVgIHRpbWUsIG9yIGVudHJpZXMgb2xkZXIgdGhhbiBgZXhwaXJlLXVucmVhY2hhYmxlYCB0aW1lCithbmQgbm90IHJlYWNoYWJsZSBmcm9tIHRoZSBjdXJyZW50IHRpcCwgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcmVmbG9nLgorVGhpcyBpcyB0eXBpY2FsbHkgbm90IHVzZWQgZGlyZWN0bHkgYnkgZW5kIHVzZXJzIC0tIGluc3RlYWQsIHNlZQorbGlua2dpdDpnaXQtZ2NbMV0uCisKK1RoZSAiZGVsZXRlIiBzdWJjb21tYW5kIGRlbGV0ZXMgc2luZ2xlIGVudHJpZXMgZnJvbSB0aGUgcmVmbG9nLiBJdHMKK2FyZ3VtZW50IG11c3QgYmUgYW4gX2V4YWN0XyBlbnRyeSAoZS5nLiAiYGdpdCByZWZsb2cgZGVsZXRlCittYXN0ZXJAezJ9YCIpLiBUaGlzIHN1YmNvbW1hbmQgaXMgYWxzbyB0eXBpY2FsbHkgbm90IHVzZWQgZGlyZWN0bHkgYnkKK2VuZCB1c2Vycy4KKworVGhlICJleGlzdHMiIHN1YmNvbW1hbmQgY2hlY2tzIHdoZXRoZXIgYSByZWYgaGFzIGEgcmVmbG9nLiAgSXQgZXhpdHMKK3dpdGggemVybyBzdGF0dXMgaWYgdGhlIHJlZmxvZyBleGlzdHMsIGFuZCBub24temVybyBzdGF0dXMgaWYgaXQgZG9lcworbm90LgorCitPUFRJT05TCistLS0tLS0tCisKK09wdGlvbnMgZm9yIGBzaG93YAorfn5+fn5+fn5+fn5+fn5+fn5+CisKK2BnaXQgcmVmbG9nIHNob3dgIGFjY2VwdHMgYW55IG9mIHRoZSBvcHRpb25zIGFjY2VwdGVkIGJ5IGBnaXQgbG9nYC4KKworCitPcHRpb25zIGZvciBgZXhwaXJlYAorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLS1hbGw6OgorCVByb2Nlc3MgdGhlIHJlZmxvZ3Mgb2YgYWxsIHJlZmVyZW5jZXMuCisKKy0tc2luZ2xlLXdvcmt0cmVlOjoKKwlCeSBkZWZhdWx0IHdoZW4gYC0tYWxsYCBpcyBzcGVjaWZpZWQsIHJlZmxvZ3MgZnJvbSBhbGwgd29ya2luZworCXRyZWVzIGFyZSBwcm9jZXNzZWQuIFRoaXMgb3B0aW9uIGxpbWl0cyB0aGUgcHJvY2Vzc2luZyB0byByZWZsb2dzCisJZnJvbSB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgb25seS4KKworLS1leHBpcmU9PHRpbWU+OjoKKwlQcnVuZSBlbnRyaWVzIG9sZGVyIHRoYW4gdGhlIHNwZWNpZmllZCB0aW1lLiBJZiB0aGlzIG9wdGlvbiBpcworCW5vdCBzcGVjaWZpZWQsIHRoZSBleHBpcmF0aW9uIHRpbWUgaXMgdGFrZW4gZnJvbSB0aGUKKwljb25maWd1cmF0aW9uIHNldHRpbmcgYGdjLnJlZmxvZ0V4cGlyZWAsIHdoaWNoIGluIHR1cm4KKwlkZWZhdWx0cyB0byA5MCBkYXlzLiBgLS1leHBpcmU9YWxsYCBwcnVuZXMgZW50cmllcyByZWdhcmRsZXNzCisJb2YgdGhlaXIgYWdlOyBgLS1leHBpcmU9bmV2ZXJgIHR1cm5zIG9mZiBwcnVuaW5nIG9mIHJlYWNoYWJsZQorCWVudHJpZXMgKGJ1dCBzZWUgYC0tZXhwaXJlLXVucmVhY2hhYmxlYCkuCisKKy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPjo6CisJUHJ1bmUgZW50cmllcyBvbGRlciB0aGFuIGA8dGltZT5gIHRoYXQgYXJlIG5vdCByZWFjaGFibGUgZnJvbQorCXRoZSBjdXJyZW50IHRpcCBvZiB0aGUgYnJhbmNoLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QKKwlzcGVjaWZpZWQsIHRoZSBleHBpcmF0aW9uIHRpbWUgaXMgdGFrZW4gZnJvbSB0aGUgY29uZmlndXJhdGlvbgorCXNldHRpbmcgYGdjLnJlZmxvZ0V4cGlyZVVucmVhY2hhYmxlYCwgd2hpY2ggaW4gdHVybiBkZWZhdWx0cworCXRvIDMwIGRheXMuIGAtLWV4cGlyZS11bnJlYWNoYWJsZT1hbGxgIHBydW5lcyB1bnJlYWNoYWJsZQorCWVudHJpZXMgcmVnYXJkbGVzcyBvZiB0aGVpciBhZ2U7IGAtLWV4cGlyZS11bnJlYWNoYWJsZT1uZXZlcmAKKwl0dXJucyBvZmYgZWFybHkgcHJ1bmluZyBvZiB1bnJlYWNoYWJsZSBlbnRyaWVzIChidXQgc2VlCisJYC0tZXhwaXJlYCkuCisKKy0tdXBkYXRlcmVmOjoKKwlVcGRhdGUgdGhlIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgb2YgdGhlIHRvcCByZWZsb2cgZW50cnkgKGkuZS4KKwk8cmVmPkBcezBcfSkgaWYgdGhlIHByZXZpb3VzIHRvcCBlbnRyeSB3YXMgcHJ1bmVkLiAgKFRoaXMKKwlvcHRpb24gaXMgaWdub3JlZCBmb3Igc3ltYm9saWMgcmVmZXJlbmNlcy4pCisKKy0tcmV3cml0ZTo6CisJSWYgYSByZWZsb2cgZW50cnkncyBwcmVkZWNlc3NvciBpcyBwcnVuZWQsIGFkanVzdCBpdHMgIm9sZCIKKwlTSEEtMSB0byBiZSBlcXVhbCB0byB0aGUgIm5ldyIgU0hBLTEgZmllbGQgb2YgdGhlIGVudHJ5IHRoYXQKKwlub3cgcHJlY2VkZXMgaXQuCisKKy0tc3RhbGUtZml4OjoKKwlQcnVuZSBhbnkgcmVmbG9nIGVudHJpZXMgdGhhdCBwb2ludCB0byAiYnJva2VuIGNvbW1pdHMiLiBBCisJYnJva2VuIGNvbW1pdCBpcyBhIGNvbW1pdCB0aGF0IGlzIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgb2YKKwl0aGUgcmVmZXJlbmNlIHRpcHMgYW5kIHRoYXQgcmVmZXJzLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0bworCWEgbWlzc2luZyBjb21taXQsIHRyZWUsIG9yIGJsb2Igb2JqZWN0LgorKworVGhpcyBjb21wdXRhdGlvbiBpbnZvbHZlcyB0cmF2ZXJzaW5nIGFsbCB0aGUgcmVhY2hhYmxlIG9iamVjdHMsIGkuZS4gaXQKK2hhcyB0aGUgc2FtZSBjb3N0IGFzICdnaXQgcHJ1bmUnLiAgSXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGZpeAorY29ycnVwdGlvbiBjYXVzZWQgYnkgZ2FyYmFnZSBjb2xsZWN0aW5nIHVzaW5nIG9sZGVyIHZlcnNpb25zIG9mIEdpdCwKK3doaWNoIGRpZG4ndCBwcm90ZWN0IG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgcmVmbG9ncy4KKworLW46OgorLS1kcnktcnVuOjoKKwlEbyBub3QgYWN0dWFsbHkgcHJ1bmUgYW55IGVudHJpZXM7IGp1c3Qgc2hvdyB3aGF0IHdvdWxkIGhhdmUKKwliZWVuIHBydW5lZC4KKworLS12ZXJib3NlOjoKKwlQcmludCBleHRyYSBpbmZvcm1hdGlvbiBvbiBzY3JlZW4uCisKKworT3B0aW9ucyBmb3IgYGRlbGV0ZWAKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BnaXQgcmVmbG9nIGRlbGV0ZWAgYWNjZXB0cyBvcHRpb25zIGAtLXVwZGF0ZXJlZmAsIGAtLXJld3JpdGVgLCBgLW5gLAorYC0tZHJ5LXJ1bmAsIGFuZCBgLS12ZXJib3NlYCwgd2l0aCB0aGUgc2FtZSBtZWFuaW5ncyBhcyB3aGVuIHRoZXkgYXJlCit1c2VkIHdpdGggYGV4cGlyZWAuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZXh0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1leHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZWE3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZXh0LnR4dApAQCAtMCwwICsxLDEyNSBAQAorZ2l0LXJlbW90ZS1leHQoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZW1vdGUtZXh0IC0gQnJpZGdlIHNtYXJ0IHRyYW5zcG9ydCB0byBleHRlcm5hbCBjb21tYW5kLgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2dpdCByZW1vdGUgYWRkIDxuaWNrPiAiZXh0Ojo8Y29tbWFuZD5bIDxhcmd1bWVudHM+Li4uXSIKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHJlbW90ZSBoZWxwZXIgdXNlcyB0aGUgc3BlY2lmaWVkICc8Y29tbWFuZD4nIHRvIGNvbm5lY3QKK3RvIGEgcmVtb3RlIEdpdCBzZXJ2ZXIuCisKK0RhdGEgd3JpdHRlbiB0byBzdGRpbiBvZiB0aGUgc3BlY2lmaWVkICc8Y29tbWFuZD4nIGlzIGFzc3VtZWQKK3RvIGJlIHNlbnQgdG8gYSBnaXQ6Ly8gc2VydmVyLCBnaXQtdXBsb2FkLXBhY2ssIGdpdC1yZWNlaXZlLXBhY2sKK29yIGdpdC11cGxvYWQtYXJjaGl2ZSAoZGVwZW5kaW5nIG9uIHNpdHVhdGlvbiksIGFuZCBkYXRhIHJlYWQKK2Zyb20gc3Rkb3V0IG9mIDxjb21tYW5kPiBpcyBhc3N1bWVkIHRvIGJlIHJlY2VpdmVkIGZyb20KK3RoZSBzYW1lIHNlcnZpY2UuCisKK0NvbW1hbmQgYW5kIGFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGFuIHVuZXNjYXBlZCBzcGFjZS4KKworVGhlIGZvbGxvd2luZyBzZXF1ZW5jZXMgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZzoKKworJyUgJzo6CisJTGl0ZXJhbCBzcGFjZSBpbiBjb21tYW5kIG9yIGFyZ3VtZW50LgorCisnJSUnOjoKKwlMaXRlcmFsIHBlcmNlbnQgc2lnbi4KKworJyVzJzo6CisJUmVwbGFjZWQgd2l0aCBuYW1lIChyZWNlaXZlLXBhY2ssIHVwbG9hZC1wYWNrLCBvcgorCXVwbG9hZC1hcmNoaXZlKSBvZiB0aGUgc2VydmljZSBHaXQgd2FudHMgdG8gaW52b2tlLgorCisnJVMnOjoKKwlSZXBsYWNlZCB3aXRoIGxvbmcgbmFtZSAoZ2l0LXJlY2VpdmUtcGFjaywKKwlnaXQtdXBsb2FkLXBhY2ssIG9yIGdpdC11cGxvYWQtYXJjaGl2ZSkgb2YgdGhlIHNlcnZpY2UKKwlHaXQgd2FudHMgdG8gaW52b2tlLgorCisnJUcnIChtdXN0IGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXJzIGluIGFuIGFyZ3VtZW50KTo6CisJVGhpcyBhcmd1bWVudCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8gJzxjb21tYW5kPicuIEluc3RlYWQsIGl0CisJd2lsbCBjYXVzZSB0aGUgaGVscGVyIHRvIHN0YXJ0IGJ5IHNlbmRpbmcgZ2l0Oi8vIHNlcnZpY2UgcmVxdWVzdHMgdG8KKwl0aGUgcmVtb3RlIHNpZGUgd2l0aCB0aGUgc2VydmljZSBmaWVsZCBzZXQgdG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUgYW5kCisJdGhlIHJlcG9zaXRvcnkgZmllbGQgc2V0IHRvIHJlc3Qgb2YgdGhlIGFyZ3VtZW50LiBEZWZhdWx0IGlzIG5vdCB0byBzZW5kCisJc3VjaCBhIHJlcXVlc3QuCisrCitUaGlzIGlzIHVzZWZ1bCBpZiByZW1vdGUgc2lkZSBpcyBnaXQ6Ly8gc2VydmVyIGFjY2Vzc2VkIG92ZXIKK3NvbWUgdHVubmVsLgorCisnJVYnIChtdXN0IGJlIGZpcnN0IGNoYXJhY3RlcnMgaW4gYXJndW1lbnQpOjoKKwlUaGlzIGFyZ3VtZW50IHdpbGwgbm90IGJlIHBhc3NlZCB0byAnPGNvbW1hbmQ+Jy4gSW5zdGVhZCBpdCBzZXRzCisJdGhlIHZob3N0IGZpZWxkIGluIHRoZSBnaXQ6Ly8gc2VydmljZSByZXF1ZXN0ICh0byByZXN0IG9mIHRoZSBhcmd1bWVudCkuCisJRGVmYXVsdCBpcyBub3QgdG8gc2VuZCB2aG9zdCBpbiBzdWNoIHJlcXVlc3QgKGlmIHNlbnQpLgorCitFTlZJUk9OTUVOVCBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHSVRfVFJBTlNMT09QX0RFQlVHOjoKKwlJZiBzZXQsIHByaW50cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdmFyaW91cyByZWFkcy93cml0ZXMuCisKK0VOVklST05NRU5UIFZBUklBQkxFUyBQQVNTRUQgVE8gQ09NTUFORAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dJVF9FWFRfU0VSVklDRTo6CisJU2V0IHRvIGxvbmcgbmFtZSAoZ2l0LXVwbG9hZC1wYWNrLCBldGMuLi4pIG9mIHNlcnZpY2UgaGVscGVyIG5lZWRzCisJdG8gaW52b2tlLgorCitHSVRfRVhUX1NFUlZJQ0VfTk9QUkVGSVg6OgorCVNldCB0byBsb25nIG5hbWUgKHVwbG9hZC1wYWNrLCBldGMuLi4pIG9mIHNlcnZpY2UgaGVscGVyIG5lZWRzCisJdG8gaW52b2tlLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorVGhpcyByZW1vdGUgaGVscGVyIGlzIHRyYW5zcGFyZW50bHkgdXNlZCBieSBHaXQgd2hlbgoreW91IHVzZSBjb21tYW5kcyBzdWNoIGFzICJnaXQgZmV0Y2ggPFVSTD4iLCAiZ2l0IGNsb25lIDxVUkw+IiwKKywgImdpdCBwdXNoIDxVUkw+IiBvciAiZ2l0IHJlbW90ZSBhZGQgPG5pY2s+IDxVUkw+Iiwgd2hlcmUgPFVSTD4KK2JlZ2lucyB3aXRoIGBleHQ6OmAuICBFeGFtcGxlczoKKworImV4dDo6c3NoIC1pIC9ob21lL2Zvby8uc3NoL3NvbWVrZXkgdXNlciYjNjQ7aG9zdC5leGFtcGxlICVTICdmb28vcmVwbyciOjoKKwlMaWtlIGhvc3QuZXhhbXBsZTpmb28vcmVwbywgYnV0IHVzZSAvaG9tZS9mb28vLnNzaC9zb21la2V5IGFzCisJa2V5cGFpciBhbmQgdXNlciBhcyB1c2VyIG9uIHJlbW90ZSBzaWRlLiBUaGlzIGF2b2lkcyBuZWVkaW5nIHRvCisJZWRpdCAuc3NoL2NvbmZpZy4KKworImV4dDo6c29jYXQgLXQzNjAwIC0gQUJTVFJBQ1QtQ09OTkVDVDovZ2l0LXNlcnZlciAlRy9zb21lcmVwbyI6OgorCVJlcHJlc2VudHMgcmVwb3NpdG9yeSB3aXRoIHBhdGggL3NvbWVyZXBvIGFjY2Vzc2libGUgb3ZlcgorCWdpdCBwcm90b2NvbCBhdCBhYnN0cmFjdCBuYW1lc3BhY2UgYWRkcmVzcyAvZ2l0LXNlcnZlci4KKworImV4dDo6Z2l0LXNlcnZlci1hbGlhcyBmb28gJUcvcmVwbyI6OgorCVJlcHJlc2VudHMgYSByZXBvc2l0b3J5IHdpdGggcGF0aCAvcmVwbyBhY2Nlc3NlZCB1c2luZyB0aGUKKwloZWxwZXIgcHJvZ3JhbSAiZ2l0LXNlcnZlci1hbGlhcyBmb28iLiAgVGhlIHBhdGggdG8gdGhlCisJcmVwb3NpdG9yeSBhbmQgdHlwZSBvZiByZXF1ZXN0IGFyZSBub3QgcGFzc2VkIG9uIHRoZSBjb21tYW5kCisJbGluZSBidXQgYXMgcGFydCBvZiB0aGUgcHJvdG9jb2wgc3RyZWFtLCBhcyB1c3VhbCB3aXRoIGdpdDovLworCXByb3RvY29sLgorCisiZXh0OjpnaXQtc2VydmVyLWFsaWFzIGZvbyAlRy9yZXBvICVWZm9vIjo6CisJUmVwcmVzZW50cyBhIHJlcG9zaXRvcnkgd2l0aCBwYXRoIC9yZXBvIGFjY2Vzc2VkIHVzaW5nIHRoZQorCWhlbHBlciBwcm9ncmFtICJnaXQtc2VydmVyLWFsaWFzIGZvbyIuICBUaGUgaG9zdG5hbWUgZm9yIHRoZQorCXJlbW90ZSBzZXJ2ZXIgcGFzc2VkIGluIHRoZSBwcm90b2NvbCBzdHJlYW0gd2lsbCBiZSAiZm9vIgorCSh0aGlzIGFsbG93cyBtdWx0aXBsZSB2aXJ0dWFsIEdpdCBzZXJ2ZXJzIHRvIHNoYXJlIGEKKwlsaW5rLWxldmVsIGFkZHJlc3MpLgorCisiZXh0OjpnaXQtc2VydmVyLWFsaWFzIGZvbyAlRy9yZXBvJSB3aXRoJSBzcGFjZXMgJVZmb28iOjoKKwlSZXByZXNlbnRzIGEgcmVwb3NpdG9yeSB3aXRoIHBhdGggYC9yZXBvIHdpdGggc3BhY2VzYCBhY2Nlc3NlZAorCXVzaW5nIHRoZSBoZWxwZXIgcHJvZ3JhbSAiZ2l0LXNlcnZlci1hbGlhcyBmb28iLiAgVGhlIGhvc3RuYW1lIGZvcgorCXRoZSByZW1vdGUgc2VydmVyIHBhc3NlZCBpbiB0aGUgcHJvdG9jb2wgc3RyZWFtIHdpbGwgYmUgImZvbyIKKwkodGhpcyBhbGxvd3MgbXVsdGlwbGUgdmlydHVhbCBHaXQgc2VydmVycyB0byBzaGFyZSBhCisJbGluay1sZXZlbCBhZGRyZXNzKS4KKworImV4dDo6Z2l0LXNzbCBmb28uZXhhbXBsZSAvYmFyIjo6CisJUmVwcmVzZW50cyBhIHJlcG9zaXRvcnkgYWNjZXNzZWQgdXNpbmcgdGhlIGhlbHBlciBwcm9ncmFtCisJImdpdC1zc2wgZm9vLmV4YW1wbGUgL2JhciIuICBUaGUgdHlwZSBvZiByZXF1ZXN0IGNhbiBiZQorCWRldGVybWluZWQgYnkgdGhlIGhlbHBlciB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKHNlZQorCWFib3ZlKS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHJlbW90ZS1oZWxwZXJzWzddCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWZkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1mZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1MWNlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1mZC50eHQKQEAgLTAsMCArMSw1OSBAQAorZ2l0LXJlbW90ZS1mZCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVtb3RlLWZkIC0gUmVmbGVjdCBzbWFydCB0cmFuc3BvcnQgc3RyZWFtIGJhY2sgdG8gY2FsbGVyCisKK1NZTk9QU0lTCistLS0tLS0tLQorImZkOjo8aW5mZD5bLDxvdXRmZD5dWy88YW55dGhpbmc+XSIgKGFzIFVSTCkKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGhlbHBlciB1c2VzIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3JzIHRvIGNvbm5lY3QgdG8gYSByZW1vdGUgR2l0IHNlcnZlci4KK1RoaXMgaXMgbm90IG1lYW50IGZvciBlbmQgdXNlcnMgYnV0IGZvciBwcm9ncmFtcyBhbmQgc2NyaXB0cyBjYWxsaW5nIGdpdAorZmV0Y2gsIHB1c2ggb3IgYXJjaGl2ZS4KKworSWYgb25seSA8aW5mZD4gaXMgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSBiaWRpcmVjdGlvbmFsIHNvY2tldCBjb25uZWN0ZWQKK3RvIHJlbW90ZSBHaXQgc2VydmVyIChnaXQtdXBsb2FkLXBhY2ssIGdpdC1yZWNlaXZlLXBhY2sgb3IKK2dpdC11cGxvYWQtYXJjaGl2ZSkuIElmIGJvdGggPGluZmQ+IGFuZCA8b3V0ZmQ+IGFyZSBnaXZlbiwgdGhleSBhcmUgYXNzdW1lZAordG8gYmUgcGlwZXMgY29ubmVjdGVkIHRvIGEgcmVtb3RlIEdpdCBzZXJ2ZXIgKDxpbmZkPiBiZWluZyB0aGUgaW5ib3VuZCBwaXBlCithbmQgPG91dGZkPiBiZWluZyB0aGUgb3V0Ym91bmQgcGlwZS4KKworSXQgaXMgYXNzdW1lZCB0aGF0IGFueSBoYW5kc2hha2luZyBwcm9jZWR1cmVzIGhhdmUgYWxyZWFkeSBiZWVuIGNvbXBsZXRlZAorKHN1Y2ggYXMgc2VuZGluZyBzZXJ2aWNlIHJlcXVlc3QgZm9yIGdpdDovLykgYmVmb3JlIHRoaXMgaGVscGVyIGlzIHN0YXJ0ZWQuCisKKzxhbnl0aGluZz4gY2FuIGJlIGFueSBzdHJpbmcuIEl0IGlzIGlnbm9yZWQuIEl0IGlzIG1lYW50IGZvciBwcm92aWRpbmcKK2luZm9ybWF0aW9uIHRvIHVzZXIgaW4gdGhlIFVSTCBpbiBjYXNlIHRoYXQgVVJMIGlzIGRpc3BsYXllZCBpbiBzb21lCitjb250ZXh0LgorCitFTlZJUk9OTUVOVCBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR0lUX1RSQU5TTE9PUF9ERUJVRzo6CisJSWYgc2V0LCBwcmludHMgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHZhcmlvdXMgcmVhZHMvd3JpdGVzLgorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgZmV0Y2ggZmQ6OjE3IG1hc3RlcmA6OgorCUZldGNoIG1hc3RlciwgdXNpbmcgZmlsZSBkZXNjcmlwdG9yICMxNyB0byBjb21tdW5pY2F0ZSB3aXRoCisJZ2l0LXVwbG9hZC1wYWNrLgorCitgZ2l0IGZldGNoIGZkOjoxNy9mb28gbWFzdGVyYDo6CisJU2FtZSBhcyBhYm92ZS4KKworYGdpdCBwdXNoIGZkOjo3LDggbWFzdGVyIChhcyBVUkwpYDo6CisJUHVzaCBtYXN0ZXIsIHVzaW5nIGZpbGUgZGVzY3JpcHRvciAjNyB0byByZWFkIGRhdGEgZnJvbQorCWdpdC1yZWNlaXZlLXBhY2sgYW5kIGZpbGUgZGVzY3JpcHRvciAjOCB0byB3cml0ZSBkYXRhIHRvCisJc2FtZSBzZXJ2aWNlLgorCitgZ2l0IHB1c2ggZmQ6OjcsOC9iYXIgbWFzdGVyYDo6CisJU2FtZSBhcyBhYm92ZS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHJlbW90ZS1oZWxwZXJzWzddCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWhlbHBlcnMudHh0byBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1oZWxwZXJzLnR4dG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzNTNlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1oZWxwZXJzLnR4dG8KQEAgLTAsMCArMSw5IEBACitnaXQtcmVtb3RlLWhlbHBlcnMKKz09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGhhcyBiZWVuIG1vdmVkIHRvIGxpbmtnaXQ6Z2l0cmVtb3RlLWhlbHBlcnNbN10uCisKK1BsZWFzZSBsZXQgdGhlIG93bmVycyBvZiB0aGUgcmVmZXJyaW5nIHNpdGUga25vdyBzbyB0aGF0IHRoZXkgY2FuIHVwZGF0ZSB0aGUKK2xpbmsgeW91IGNsaWNrZWQgdG8gZ2V0IGhlcmUuCisKK1RoYW5rcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NTlhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CkBAIC0wLDAgKzEsMjU2IEBACitnaXQtcmVtb3RlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZW1vdGUgLSBNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlbW90ZScgWy12IHwgLS12ZXJib3NlXQorJ2dpdCByZW1vdGUgYWRkJyBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS1bbm8tXXRhZ3NdIFstLW1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPgorJ2dpdCByZW1vdGUgcmVuYW1lJyA8b2xkPiA8bmV3PgorJ2dpdCByZW1vdGUgcmVtb3ZlJyA8bmFtZT4KKydnaXQgcmVtb3RlIHNldC1oZWFkJyA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KQorJ2dpdCByZW1vdGUgc2V0LWJyYW5jaGVzJyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLgorJ2dpdCByZW1vdGUgZ2V0LXVybCcgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4KKydnaXQgcmVtb3RlIHNldC11cmwnIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dCisnZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkJyBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4KKydnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUnIFstLXB1c2hdIDxuYW1lPiA8dXJsPgorJ2dpdCByZW1vdGUnIFstdiB8IC0tdmVyYm9zZV0gJ3Nob3cnIFstbl0gPG5hbWU+Li4uCisnZ2l0IHJlbW90ZSBwcnVuZScgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4uLi4KKydnaXQgcmVtb3RlJyBbLXYgfCAtLXZlcmJvc2VdICd1cGRhdGUnIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK01hbmFnZSB0aGUgc2V0IG9mIHJlcG9zaXRvcmllcyAoInJlbW90ZXMiKSB3aG9zZSBicmFuY2hlcyB5b3UgdHJhY2suCisKKworT1BUSU9OUworLS0tLS0tLQorCistdjo6CistLXZlcmJvc2U6OgorCUJlIGEgbGl0dGxlIG1vcmUgdmVyYm9zZSBhbmQgc2hvdyByZW1vdGUgdXJsIGFmdGVyIG5hbWUuCisJTk9URTogVGhpcyBtdXN0IGJlIHBsYWNlZCBiZXR3ZWVuIGByZW1vdGVgIGFuZCBgc3ViY29tbWFuZGAuCisKKworQ09NTUFORFMKKy0tLS0tLS0tCisKK1dpdGggbm8gYXJndW1lbnRzLCBzaG93cyBhIGxpc3Qgb2YgZXhpc3RpbmcgcmVtb3Rlcy4gIFNldmVyYWwKK3N1YmNvbW1hbmRzIGFyZSBhdmFpbGFibGUgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIHRoZSByZW1vdGVzLgorCisnYWRkJzo6CisKK0FkZHMgYSByZW1vdGUgbmFtZWQgPG5hbWU+IGZvciB0aGUgcmVwb3NpdG9yeSBhdAorPHVybD4uICBUaGUgY29tbWFuZCBgZ2l0IGZldGNoIDxuYW1lPmAgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYW5kCit1cGRhdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIDxuYW1lPi88YnJhbmNoPi4KKysKK1dpdGggYC1mYCBvcHRpb24sIGBnaXQgZmV0Y2ggPG5hbWU+YCBpcyBydW4gaW1tZWRpYXRlbHkgYWZ0ZXIKK3RoZSByZW1vdGUgaW5mb3JtYXRpb24gaXMgc2V0IHVwLgorKworV2l0aCBgLS10YWdzYCBvcHRpb24sIGBnaXQgZmV0Y2ggPG5hbWU+YCBpbXBvcnRzIGV2ZXJ5IHRhZyBmcm9tIHRoZQorcmVtb3RlIHJlcG9zaXRvcnkuCisrCitXaXRoIGAtLW5vLXRhZ3NgIG9wdGlvbiwgYGdpdCBmZXRjaCA8bmFtZT5gIGRvZXMgbm90IGltcG9ydCB0YWdzIGZyb20KK3RoZSByZW1vdGUgcmVwb3NpdG9yeS4KKysKK0J5IGRlZmF1bHQsIG9ubHkgdGFncyBvbiBmZXRjaGVkIGJyYW5jaGVzIGFyZSBpbXBvcnRlZAorKHNlZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXSkuCisrCitXaXRoIGAtdCA8YnJhbmNoPmAgb3B0aW9uLCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGdsb2IKK3JlZnNwZWMgZm9yIHRoZSByZW1vdGUgdG8gdHJhY2sgYWxsIGJyYW5jaGVzIHVuZGVyCit0aGUgYHJlZnMvcmVtb3Rlcy88bmFtZT4vYCBuYW1lc3BhY2UsIGEgcmVmc3BlYyB0byB0cmFjayBvbmx5IGA8YnJhbmNoPmAKK2lzIGNyZWF0ZWQuICBZb3UgY2FuIGdpdmUgbW9yZSB0aGFuIG9uZSBgLXQgPGJyYW5jaD5gIHRvIHRyYWNrCittdWx0aXBsZSBicmFuY2hlcyB3aXRob3V0IGdyYWJiaW5nIGFsbCBicmFuY2hlcy4KKysKK1dpdGggYC1tIDxtYXN0ZXI+YCBvcHRpb24sIGEgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgIGlzIHNldAordXAgdG8gcG9pbnQgYXQgcmVtb3RlJ3MgYDxtYXN0ZXI+YCBicmFuY2guIFNlZSBhbHNvIHRoZSBzZXQtaGVhZCBjb21tYW5kLgorKworV2hlbiBhIGZldGNoIG1pcnJvciBpcyBjcmVhdGVkIHdpdGggYC0tbWlycm9yPWZldGNoYCwgdGhlIHJlZnMgd2lsbCBub3QKK2JlIHN0b3JlZCBpbiB0aGUgJ3JlZnMvcmVtb3Rlcy8nIG5hbWVzcGFjZSwgYnV0IHJhdGhlciBldmVyeXRoaW5nIGluCisncmVmcy8nIG9uIHRoZSByZW1vdGUgd2lsbCBiZSBkaXJlY3RseSBtaXJyb3JlZCBpbnRvICdyZWZzLycgaW4gdGhlCitsb2NhbCByZXBvc2l0b3J5LiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGluIGJhcmUgcmVwb3NpdG9yaWVzLAorYmVjYXVzZSBhIGZldGNoIHdvdWxkIG92ZXJ3cml0ZSBhbnkgbG9jYWwgY29tbWl0cy4KKysKK1doZW4gYSBwdXNoIG1pcnJvciBpcyBjcmVhdGVkIHdpdGggYC0tbWlycm9yPXB1c2hgLCB0aGVuIGBnaXQgcHVzaGAKK3dpbGwgYWx3YXlzIGJlaGF2ZSBhcyBpZiBgLS1taXJyb3JgIHdhcyBwYXNzZWQuCisKKydyZW5hbWUnOjoKKworUmVuYW1lIHRoZSByZW1vdGUgbmFtZWQgPG9sZD4gdG8gPG5ldz4uIEFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYW5kCitjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgcmVtb3RlIGFyZSB1cGRhdGVkLgorKworSW4gY2FzZSA8b2xkPiBhbmQgPG5ldz4gYXJlIHRoZSBzYW1lLCBhbmQgPG9sZD4gaXMgYSBmaWxlIHVuZGVyCitgJEdJVF9ESVIvcmVtb3Rlc2Agb3IgYCRHSVRfRElSL2JyYW5jaGVzYCwgdGhlIHJlbW90ZSBpcyBjb252ZXJ0ZWQgdG8KK3RoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9ybWF0LgorCisncmVtb3ZlJzo6Cisncm0nOjoKKworUmVtb3ZlIHRoZSByZW1vdGUgbmFtZWQgPG5hbWU+LiBBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFuZAorY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIHJlbW90ZSBhcmUgcmVtb3ZlZC4KKworJ3NldC1oZWFkJzo6CisKK1NldHMgb3IgZGVsZXRlcyB0aGUgZGVmYXVsdCBicmFuY2ggKGkuZS4gdGhlIHRhcmdldCBvZiB0aGUKK3N5bWJvbGljLXJlZiBgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEYCkgZm9yCit0aGUgbmFtZWQgcmVtb3RlLiBIYXZpbmcgYSBkZWZhdWx0IGJyYW5jaCBmb3IgYSByZW1vdGUgaXMgbm90IHJlcXVpcmVkLAorYnV0IGFsbG93cyB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIHRvIGJlIHNwZWNpZmllZCBpbiBsaWV1IG9mIGEgc3BlY2lmaWMKK2JyYW5jaC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBkZWZhdWx0IGJyYW5jaCBmb3IgYG9yaWdpbmAgaXMgc2V0IHRvCitgbWFzdGVyYCwgdGhlbiBgb3JpZ2luYCBtYXkgYmUgc3BlY2lmaWVkIHdoZXJldmVyIHlvdSB3b3VsZCBub3JtYWxseQorc3BlY2lmeSBgb3JpZ2luL21hc3RlcmAuCisrCitXaXRoIGAtZGAgb3IgYC0tZGVsZXRlYCwgdGhlIHN5bWJvbGljIHJlZiBgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEYCBpcyBkZWxldGVkLgorKworV2l0aCBgLWFgIG9yIGAtLWF1dG9gLCB0aGUgcmVtb3RlIGlzIHF1ZXJpZWQgdG8gZGV0ZXJtaW5lIGl0cyBgSEVBRGAsIHRoZW4gdGhlCitzeW1ib2xpYy1yZWYgYHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRGAgaXMgc2V0IHRvIHRoZSBzYW1lIGJyYW5jaC4gZS5nLiwgaWYgdGhlIHJlbW90ZQorYEhFQURgIGlzIHBvaW50ZWQgYXQgYG5leHRgLCAiYGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIC1hYCIgd2lsbCBzZXQKK3RoZSBzeW1ib2xpYy1yZWYgYHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRGAgdG8gYHJlZnMvcmVtb3Rlcy9vcmlnaW4vbmV4dGAuIFRoaXMgd2lsbAorb25seSB3b3JrIGlmIGByZWZzL3JlbW90ZXMvb3JpZ2luL25leHRgIGFscmVhZHkgZXhpc3RzOyBpZiBub3QgaXQgbXVzdCBiZQorZmV0Y2hlZCBmaXJzdC4KKysKK1VzZSBgPGJyYW5jaD5gIHRvIHNldCB0aGUgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgIGV4cGxpY2l0bHkuIGUuZy4sICJnaXQKK3JlbW90ZSBzZXQtaGVhZCBvcmlnaW4gbWFzdGVyIiB3aWxsIHNldCB0aGUgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQURgIHRvCitgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgLiBUaGlzIHdpbGwgb25seSB3b3JrIGlmCitgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgIGFscmVhZHkgZXhpc3RzOyBpZiBub3QgaXQgbXVzdCBiZSBmZXRjaGVkIGZpcnN0LgorKworCisnc2V0LWJyYW5jaGVzJzo6CisKK0NoYW5nZXMgdGhlIGxpc3Qgb2YgYnJhbmNoZXMgdHJhY2tlZCBieSB0aGUgbmFtZWQgcmVtb3RlLgorVGhpcyBjYW4gYmUgdXNlZCB0byB0cmFjayBhIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHJlbW90ZSBicmFuY2hlcworYWZ0ZXIgdGhlIGluaXRpYWwgc2V0dXAgZm9yIGEgcmVtb3RlLgorKworVGhlIG5hbWVkIGJyYW5jaGVzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgc3BlY2lmaWVkIHdpdGggdGhlCitgLXRgIG9wdGlvbiBvbiB0aGUgJ2dpdCByZW1vdGUgYWRkJyBjb21tYW5kIGxpbmUuCisrCitXaXRoIGAtLWFkZGAsIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZSBsaXN0IG9mIGN1cnJlbnRseSB0cmFja2VkCiticmFuY2hlcywgYWRkcyB0byB0aGF0IGxpc3QuCisKKydnZXQtdXJsJzo6CisKK1JldHJpZXZlcyB0aGUgVVJMcyBmb3IgYSByZW1vdGUuIENvbmZpZ3VyYXRpb25zIGZvciBgaW5zdGVhZE9mYCBhbmQKK2BwdXNoSW5zdGVhZE9mYCBhcmUgZXhwYW5kZWQgaGVyZS4gQnkgZGVmYXVsdCwgb25seSB0aGUgZmlyc3QgVVJMIGlzIGxpc3RlZC4KKysKK1dpdGggYC0tcHVzaGAsIHB1c2ggVVJMcyBhcmUgcXVlcmllZCByYXRoZXIgdGhhbiBmZXRjaCBVUkxzLgorKworV2l0aCBgLS1hbGxgLCBhbGwgVVJMcyBmb3IgdGhlIHJlbW90ZSB3aWxsIGJlIGxpc3RlZC4KKworJ3NldC11cmwnOjoKKworQ2hhbmdlcyBVUkxzIGZvciB0aGUgcmVtb3RlLiBTZXRzIGZpcnN0IFVSTCBmb3IgcmVtb3RlIDxuYW1lPiB0aGF0IG1hdGNoZXMKK3JlZ2V4IDxvbGR1cmw+IChmaXJzdCBVUkwgaWYgbm8gPG9sZHVybD4gaXMgZ2l2ZW4pIHRvIDxuZXd1cmw+LiBJZgorPG9sZHVybD4gZG9lc24ndCBtYXRjaCBhbnkgVVJMLCBhbiBlcnJvciBvY2N1cnMgYW5kIG5vdGhpbmcgaXMgY2hhbmdlZC4KKysKK1dpdGggYC0tcHVzaGAsIHB1c2ggVVJMcyBhcmUgbWFuaXB1bGF0ZWQgaW5zdGVhZCBvZiBmZXRjaCBVUkxzLgorKworV2l0aCBgLS1hZGRgLCBpbnN0ZWFkIG9mIGNoYW5naW5nIGV4aXN0aW5nIFVSTHMsIG5ldyBVUkwgaXMgYWRkZWQuCisrCitXaXRoIGAtLWRlbGV0ZWAsIGluc3RlYWQgb2YgY2hhbmdpbmcgZXhpc3RpbmcgVVJMcywgYWxsIFVSTHMgbWF0Y2hpbmcKK3JlZ2V4IDx1cmw+IGFyZSBkZWxldGVkIGZvciByZW1vdGUgPG5hbWU+LiAgVHJ5aW5nIHRvIGRlbGV0ZSBhbGwKK25vbi1wdXNoIFVSTHMgaXMgYW4gZXJyb3IuCisrCitOb3RlIHRoYXQgdGhlIHB1c2ggVVJMIGFuZCB0aGUgZmV0Y2ggVVJMLCBldmVuIHRob3VnaCB0aGV5IGNhbgorYmUgc2V0IGRpZmZlcmVudGx5LCBtdXN0IHN0aWxsIHJlZmVyIHRvIHRoZSBzYW1lIHBsYWNlLiAgV2hhdCB5b3UKK3B1c2hlZCB0byB0aGUgcHVzaCBVUkwgc2hvdWxkIGJlIHdoYXQgeW91IHdvdWxkIHNlZSBpZiB5b3UKK2ltbWVkaWF0ZWx5IGZldGNoZWQgZnJvbSB0aGUgZmV0Y2ggVVJMLiAgSWYgeW91IGFyZSB0cnlpbmcgdG8KK2ZldGNoIGZyb20gb25lIHBsYWNlIChlLmcuIHlvdXIgdXBzdHJlYW0pIGFuZCBwdXNoIHRvIGFub3RoZXIgKGUuZy4KK3lvdXIgcHVibGlzaGluZyByZXBvc2l0b3J5KSwgdXNlIHR3byBzZXBhcmF0ZSByZW1vdGVzLgorCisKKydzaG93Jzo6CisKK0dpdmVzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbW90ZSA8bmFtZT4uCisrCitXaXRoIGAtbmAgb3B0aW9uLCB0aGUgcmVtb3RlIGhlYWRzIGFyZSBub3QgcXVlcmllZCBmaXJzdCB3aXRoCitgZ2l0IGxzLXJlbW90ZSA8bmFtZT5gOyBjYWNoZWQgaW5mb3JtYXRpb24gaXMgdXNlZCBpbnN0ZWFkLgorCisncHJ1bmUnOjoKKworRGVsZXRlcyBzdGFsZSByZWZlcmVuY2VzIGFzc29jaWF0ZWQgd2l0aCA8bmFtZT4uIEJ5IGRlZmF1bHQsIHN0YWxlCityZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgdW5kZXIgPG5hbWU+IGFyZSBkZWxldGVkLCBidXQgZGVwZW5kaW5nIG9uCitnbG9iYWwgY29uZmlndXJhdGlvbiBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJlbW90ZSB3ZSBtaWdodCBldmVuCitwcnVuZSBsb2NhbCB0YWdzIHRoYXQgaGF2ZW4ndCBiZWVuIHB1c2hlZCB0aGVyZS4gRXF1aXZhbGVudCB0byBgZ2l0CitmZXRjaCAtLXBydW5lIDxuYW1lPmAsIGV4Y2VwdCB0aGF0IG5vIG5ldyByZWZlcmVuY2VzIHdpbGwgYmUgZmV0Y2hlZC4KKysKK1NlZSB0aGUgUFJVTklORyBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIGZvciB3aGF0IGl0J2xsIHBydW5lCitkZXBlbmRpbmcgb24gdmFyaW91cyBjb25maWd1cmF0aW9uLgorKworV2l0aCBgLS1kcnktcnVuYCBvcHRpb24sIHJlcG9ydCB3aGF0IGJyYW5jaGVzIHdpbGwgYmUgcHJ1bmVkLCBidXQgZG8gbm90CithY3R1YWxseSBwcnVuZSB0aGVtLgorCisndXBkYXRlJzo6CisKK0ZldGNoIHVwZGF0ZXMgZm9yIHJlbW90ZXMgb3IgcmVtb3RlIGdyb3VwcyBpbiB0aGUgcmVwb3NpdG9yeSBhcyBkZWZpbmVkIGJ5CityZW1vdGVzLjxncm91cD4uICBJZiBuZWl0aGVyIGdyb3VwIG5vciByZW1vdGUgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsCit0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgcmVtb3Rlcy5kZWZhdWx0IHdpbGwgYmUgdXNlZDsgaWYKK3JlbW90ZXMuZGVmYXVsdCBpcyBub3QgZGVmaW5lZCwgYWxsIHJlbW90ZXMgd2hpY2ggZG8gbm90IGhhdmUgdGhlCitjb25maWd1cmF0aW9uIHBhcmFtZXRlciByZW1vdGUuPG5hbWU+LnNraXBEZWZhdWx0VXBkYXRlIHNldCB0byB0cnVlIHdpbGwKK2JlIHVwZGF0ZWQuICAoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisrCitXaXRoIGAtLXBydW5lYCBvcHRpb24sIHJ1biBwcnVuaW5nIGFnYWluc3QgYWxsIHRoZSByZW1vdGVzIHRoYXQgYXJlIHVwZGF0ZWQuCisKKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitUaGUgcmVtb3RlIGNvbmZpZ3VyYXRpb24gaXMgYWNoaWV2ZWQgdXNpbmcgdGhlIGByZW1vdGUub3JpZ2luLnVybGAgYW5kCitgcmVtb3RlLm9yaWdpbi5mZXRjaGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuICAoU2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitFWEFNUExFUworLS0tLS0tLS0KKworKiBBZGQgYSBuZXcgcmVtb3RlLCBmZXRjaCwgYW5kIGNoZWNrIG91dCBhIGJyYW5jaCBmcm9tIGl0CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlbW90ZQorb3JpZ2luCiskIGdpdCBicmFuY2ggLXIKKyAgb3JpZ2luL0hFQUQgLT4gb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbWFzdGVyCiskIGdpdCByZW1vdGUgYWRkIHN0YWdpbmcgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvLi4uL2dyZWdraC9zdGFnaW5nLmdpdAorJCBnaXQgcmVtb3RlCitvcmlnaW4KK3N0YWdpbmcKKyQgZ2l0IGZldGNoIHN0YWdpbmcKKy4uLgorRnJvbSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JlZ2toL3N0YWdpbmcKKyAqIFtuZXcgYnJhbmNoXSAgICAgIG1hc3RlciAgICAgLT4gc3RhZ2luZy9tYXN0ZXIKKyAqIFtuZXcgYnJhbmNoXSAgICAgIHN0YWdpbmctbGludXMgLT4gc3RhZ2luZy9zdGFnaW5nLWxpbnVzCisgKiBbbmV3IGJyYW5jaF0gICAgICBzdGFnaW5nLW5leHQgLT4gc3RhZ2luZy9zdGFnaW5nLW5leHQKKyQgZ2l0IGJyYW5jaCAtcgorICBvcmlnaW4vSEVBRCAtPiBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9tYXN0ZXIKKyAgc3RhZ2luZy9tYXN0ZXIKKyAgc3RhZ2luZy9zdGFnaW5nLWxpbnVzCisgIHN0YWdpbmcvc3RhZ2luZy1uZXh0CiskIGdpdCBzd2l0Y2ggLWMgc3RhZ2luZyBzdGFnaW5nL21hc3RlcgorLi4uCistLS0tLS0tLS0tLS0KKworKiBJbWl0YXRlICdnaXQgY2xvbmUnIGJ1dCB0cmFjayBvbmx5IHNlbGVjdGVkIGJyYW5jaGVzCisrCistLS0tLS0tLS0tLS0KKyQgbWtkaXIgcHJvamVjdC5naXQKKyQgY2QgcHJvamVjdC5naXQKKyQgZ2l0IGluaXQKKyQgZ2l0IHJlbW90ZSBhZGQgLWYgLXQgbWFzdGVyIC1tIG1hc3RlciBvcmlnaW4gZ2l0Oi8vZXhhbXBsZS5jb20vZ2l0LmdpdC8KKyQgZ2l0IG1lcmdlIG9yaWdpbgorLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mZXRjaFsxXQorbGlua2dpdDpnaXQtYnJhbmNoWzFdCitsaW5rZ2l0OmdpdC1jb25maWdbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmYxNDZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dApAQCAtMCwwICsxLDE4OCBAQAorZ2l0LXJlcGFjaygxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVwYWNrIC0gUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXBhY2snIFstYV0gWy1BXSBbLWRdIFstZl0gWy1GXSBbLWxdIFstbl0gWy1xXSBbLWJdIFstLXdpbmRvdz08bj5dIFstLWRlcHRoPTxuPl0gWy0tdGhyZWFkcz08bj5dIFstLWtlZXAtcGFjaz08cGFjay1uYW1lPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNvbWJpbmUgYWxsIG9iamVjdHMgdGhhdCBkbyBub3QgY3VycmVudGx5CityZXNpZGUgaW4gYSAicGFjayIsIGludG8gYSBwYWNrLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byByZS1vcmdhbml6ZQorZXhpc3RpbmcgcGFja3MgaW50byBhIHNpbmdsZSwgbW9yZSBlZmZpY2llbnQgcGFjay4KKworQSBwYWNrIGlzIGEgY29sbGVjdGlvbiBvZiBvYmplY3RzLCBpbmRpdmlkdWFsbHkgY29tcHJlc3NlZCwgd2l0aAorZGVsdGEgY29tcHJlc3Npb24gYXBwbGllZCwgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGUsIHdpdGggYW4KK2Fzc29jaWF0ZWQgaW5kZXggZmlsZS4KKworUGFja3MgYXJlIHVzZWQgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIG1pcnJvciBzeXN0ZW1zLCBiYWNrdXAKK2VuZ2luZXMsIGRpc2sgc3RvcmFnZSwgZXRjLgorCitPUFRJT05TCistLS0tLS0tCisKKy1hOjoKKwlJbnN0ZWFkIG9mIGluY3JlbWVudGFsbHkgcGFja2luZyB0aGUgdW5wYWNrZWQgb2JqZWN0cywKKwlwYWNrIGV2ZXJ5dGhpbmcgcmVmZXJlbmNlZCBpbnRvIGEgc2luZ2xlIHBhY2suCisJRXNwZWNpYWxseSB1c2VmdWwgd2hlbiBwYWNraW5nIGEgcmVwb3NpdG9yeSB0aGF0IGlzIHVzZWQKKwlmb3IgcHJpdmF0ZSBkZXZlbG9wbWVudC4gVXNlCisJd2l0aCBgLWRgLiAgVGhpcyB3aWxsIGNsZWFuIHVwIHRoZSBvYmplY3RzIHRoYXQgYGdpdCBwcnVuZWAKKwlsZWF2ZXMgYmVoaW5kLCBidXQgYGdpdCBmc2NrIC0tZnVsbCAtLWRhbmdsaW5nYCBzaG93cyBhcworCWRhbmdsaW5nLgorKworTm90ZSB0aGF0IHVzZXJzIGZldGNoaW5nIG92ZXIgZHVtYiBwcm90b2NvbHMgd2lsbCBoYXZlIHRvIGZldGNoIHRoZQord2hvbGUgbmV3IHBhY2sgaW4gb3JkZXIgdG8gZ2V0IGFueSBjb250YWluZWQgb2JqZWN0LCBubyBtYXR0ZXIgaG93IG1hbnkKK290aGVyIG9iamVjdHMgaW4gdGhhdCBwYWNrIHRoZXkgYWxyZWFkeSBoYXZlIGxvY2FsbHkuCisrCitQcm9taXNvciBwYWNrZmlsZXMgYXJlIHJlcGFja2VkIHNlcGFyYXRlbHk6IGlmIHRoZXJlIGFyZSBwYWNrZmlsZXMgdGhhdAoraGF2ZSBhbiBhc3NvY2lhdGVkICIucHJvbWlzb3IiIGZpbGUsIHRoZXNlIHBhY2tmaWxlcyB3aWxsIGJlIHJlcGFja2VkCitpbnRvIGFub3RoZXIgc2VwYXJhdGUgcGFjaywgYW5kIGFuIGVtcHR5ICIucHJvbWlzb3IiIGZpbGUgY29ycmVzcG9uZGluZwordG8gdGhlIG5ldyBzZXBhcmF0ZSBwYWNrIHdpbGwgYmUgd3JpdHRlbi4KKworLUE6OgorCVNhbWUgYXMgYC1hYCwgdW5sZXNzIGAtZGAgaXMgdXNlZC4gIFRoZW4gYW55IHVucmVhY2hhYmxlCisJb2JqZWN0cyBpbiBhIHByZXZpb3VzIHBhY2sgYmVjb21lIGxvb3NlLCB1bnBhY2tlZCBvYmplY3RzLAorCWluc3RlYWQgb2YgYmVpbmcgbGVmdCBpbiB0aGUgb2xkIHBhY2suICBVbnJlYWNoYWJsZSBvYmplY3RzCisJYXJlIG5ldmVyIGludGVudGlvbmFsbHkgYWRkZWQgdG8gYSBwYWNrLCBldmVuIHdoZW4gcmVwYWNraW5nLgorCVRoaXMgb3B0aW9uIHByZXZlbnRzIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSBiZWluZyBpbW1lZGlhdGVseQorCWRlbGV0ZWQgYnkgd2F5IG9mIGJlaW5nIGxlZnQgaW4gdGhlIG9sZCBwYWNrIGFuZCB0aGVuCisJcmVtb3ZlZC4gIEluc3RlYWQsIHRoZSBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzCisJd2lsbCBiZSBwcnVuZWQgYWNjb3JkaW5nIHRvIG5vcm1hbCBleHBpcnkgcnVsZXMKKwl3aXRoIHRoZSBuZXh0ICdnaXQgZ2MnIGludm9jYXRpb24uIFNlZSBsaW5rZ2l0OmdpdC1nY1sxXS4KKworLWQ6OgorCUFmdGVyIHBhY2tpbmcsIGlmIHRoZSBuZXdseSBjcmVhdGVkIHBhY2tzIG1ha2Ugc29tZQorCWV4aXN0aW5nIHBhY2tzIHJlZHVuZGFudCwgcmVtb3ZlIHRoZSByZWR1bmRhbnQgcGFja3MuCisJQWxzbyBydW4gICdnaXQgcHJ1bmUtcGFja2VkJyB0byByZW1vdmUgcmVkdW5kYW50CisJbG9vc2Ugb2JqZWN0IGZpbGVzLgorCistbDo6CisJUGFzcyB0aGUgYC0tbG9jYWxgIG9wdGlvbiB0byAnZ2l0IHBhY2stb2JqZWN0cycuIFNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworLWY6OgorCVBhc3MgdGhlIGAtLW5vLXJldXNlLWRlbHRhYCBvcHRpb24gdG8gYGdpdC1wYWNrLW9iamVjdHNgLCBzZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCisKKy1GOjoKKwlQYXNzIHRoZSBgLS1uby1yZXVzZS1vYmplY3RgIG9wdGlvbiB0byBgZ2l0LXBhY2stb2JqZWN0c2AsIHNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworLXE6OgorCVBhc3MgdGhlIGAtcWAgb3B0aW9uIHRvICdnaXQgcGFjay1vYmplY3RzJy4gU2VlCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgorCistbjo6CisJRG8gbm90IHVwZGF0ZSB0aGUgc2VydmVyIGluZm9ybWF0aW9uIHdpdGgKKwknZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycuICBUaGlzIG9wdGlvbiBza2lwcworCXVwZGF0aW5nIGxvY2FsIGNhdGFsb2cgZmlsZXMgbmVlZGVkIHRvIHB1Ymxpc2gKKwl0aGlzIHJlcG9zaXRvcnkgKG9yIGEgZGlyZWN0IGNvcHkgb2YgaXQpCisJb3ZlciBIVFRQIG9yIEZUUC4gIFNlZSBsaW5rZ2l0OmdpdC11cGRhdGUtc2VydmVyLWluZm9bMV0uCisKKy0td2luZG93PTxuPjo6CistLWRlcHRoPTxuPjo6CisJVGhlc2UgdHdvIG9wdGlvbnMgYWZmZWN0IGhvdyB0aGUgb2JqZWN0cyBjb250YWluZWQgaW4gdGhlIHBhY2sgYXJlCisJc3RvcmVkIHVzaW5nIGRlbHRhIGNvbXByZXNzaW9uLiBUaGUgb2JqZWN0cyBhcmUgZmlyc3QgaW50ZXJuYWxseQorCXNvcnRlZCBieSB0eXBlLCBzaXplIGFuZCBvcHRpb25hbGx5IG5hbWVzIGFuZCBjb21wYXJlZCBhZ2FpbnN0IHRoZQorCW90aGVyIG9iamVjdHMgd2l0aGluIGAtLXdpbmRvd2AgdG8gc2VlIGlmIHVzaW5nIGRlbHRhIGNvbXByZXNzaW9uIHNhdmVzCisJc3BhY2UuIGAtLWRlcHRoYCBsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGg7IG1ha2luZyBpdCB0b28gZGVlcAorCWFmZmVjdHMgdGhlIHBlcmZvcm1hbmNlIG9uIHRoZSB1bnBhY2tlciBzaWRlLCBiZWNhdXNlIGRlbHRhIGRhdGEgbmVlZHMKKwl0byBiZSBhcHBsaWVkIHRoYXQgbWFueSB0aW1lcyB0byBnZXQgdG8gdGhlIG5lY2Vzc2FyeSBvYmplY3QuCisrCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgLS13aW5kb3cgaXMgMTAgYW5kIC0tZGVwdGggaXMgNTAuIFRoZSBtYXhpbXVtCitkZXB0aCBpcyA0MDk1LgorCistLXRocmVhZHM9PG4+OjoKKwlUaGlzIG9wdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCB0byBgZ2l0IHBhY2stb2JqZWN0c2AuCisKKy0td2luZG93LW1lbW9yeT08bj46OgorCVRoaXMgb3B0aW9uIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgbGltaXQgb24gdG9wIG9mIGAtLXdpbmRvd2A7CisJdGhlIHdpbmRvdyBzaXplIHdpbGwgZHluYW1pY2FsbHkgc2NhbGUgZG93biBzbyBhcyB0byBub3QgdGFrZQorCXVwIG1vcmUgdGhhbiAnPG4+JyBieXRlcyBpbiBtZW1vcnkuICBUaGlzIGlzIHVzZWZ1bCBpbgorCXJlcG9zaXRvcmllcyB3aXRoIGEgbWl4IG9mIGxhcmdlIGFuZCBzbWFsbCBvYmplY3RzIHRvIG5vdCBydW4KKwlvdXQgb2YgbWVtb3J5IHdpdGggYSBsYXJnZSB3aW5kb3csIGJ1dCBzdGlsbCBiZSBhYmxlIHRvIHRha2UKKwlhZHZhbnRhZ2Ugb2YgdGhlIGxhcmdlIHdpbmRvdyBmb3IgdGhlIHNtYWxsZXIgb2JqZWN0cy4gIFRoZQorCXNpemUgY2FuIGJlIHN1ZmZpeGVkIHdpdGggImsiLCAibSIsIG9yICJnIi4KKwlgLS13aW5kb3ctbWVtb3J5PTBgIG1ha2VzIG1lbW9yeSB1c2FnZSB1bmxpbWl0ZWQuICBUaGUgZGVmYXVsdAorCWlzIHRha2VuIGZyb20gdGhlIGBwYWNrLndpbmRvd01lbW9yeWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKwlOb3RlIHRoYXQgdGhlIGFjdHVhbCBtZW1vcnkgdXNhZ2Ugd2lsbCBiZSB0aGUgbGltaXQgbXVsdGlwbGllZAorCWJ5IHRoZSBudW1iZXIgb2YgdGhyZWFkcyB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworLS1tYXgtcGFjay1zaXplPTxuPjo6CisJTWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZS4gVGhlIHNpemUgY2FuIGJlIHN1ZmZpeGVkIHdpdGgKKwkiayIsICJtIiwgb3IgImciLiBUaGUgbWluaW11bSBzaXplIGFsbG93ZWQgaXMgbGltaXRlZCB0byAxIE1pQi4KKwlJZiBzcGVjaWZpZWQsIG11bHRpcGxlIHBhY2tmaWxlcyBtYXkgYmUgY3JlYXRlZCwgd2hpY2ggYWxzbworCXByZXZlbnRzIHRoZSBjcmVhdGlvbiBvZiBhIGJpdG1hcCBpbmRleC4KKwlUaGUgZGVmYXVsdCBpcyB1bmxpbWl0ZWQsIHVubGVzcyB0aGUgY29uZmlnIHZhcmlhYmxlCisJYHBhY2sucGFja1NpemVMaW1pdGAgaXMgc2V0LgorCistYjo6CistLXdyaXRlLWJpdG1hcC1pbmRleDo6CisJV3JpdGUgYSByZWFjaGFiaWxpdHkgYml0bWFwIGluZGV4IGFzIHBhcnQgb2YgdGhlIHJlcGFjay4gVGhpcworCW9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB1c2VkIHdpdGggYC1hYCBvciBgLUFgLCBhcyB0aGUgYml0bWFwcworCW11c3QgYmUgYWJsZSB0byByZWZlciB0byBhbGwgcmVhY2hhYmxlIG9iamVjdHMuIFRoaXMgb3B0aW9uCisJb3ZlcnJpZGVzIHRoZSBzZXR0aW5nIG9mIGByZXBhY2sud3JpdGVCaXRtYXBzYC4gIFRoaXMgb3B0aW9uCisJaGFzIG5vIGVmZmVjdCBpZiBtdWx0aXBsZSBwYWNrZmlsZXMgYXJlIGNyZWF0ZWQuCisKKy0tcGFjay1rZXB0LW9iamVjdHM6OgorCUluY2x1ZGUgb2JqZWN0cyBpbiBgLmtlZXBgIGZpbGVzIHdoZW4gcmVwYWNraW5nLiAgTm90ZSB0aGF0IHdlCisJc3RpbGwgZG8gbm90IGRlbGV0ZSBgLmtlZXBgIHBhY2tzIGFmdGVyIGBwYWNrLW9iamVjdHNgIGZpbmlzaGVzLgorCVRoaXMgbWVhbnMgdGhhdCB3ZSBtYXkgZHVwbGljYXRlIG9iamVjdHMsIGJ1dCB0aGlzIG1ha2VzIHRoZQorCW9wdGlvbiBzYWZlIHRvIHVzZSB3aGVuIHRoZXJlIGFyZSBjb25jdXJyZW50IHB1c2hlcyBvciBmZXRjaGVzLgorCVRoaXMgb3B0aW9uIGlzIGdlbmVyYWxseSBvbmx5IHVzZWZ1bCBpZiB5b3UgYXJlIHdyaXRpbmcgYml0bWFwcworCXdpdGggYC1iYCBvciBgcmVwYWNrLndyaXRlQml0bWFwc2AsIGFzIGl0IGVuc3VyZXMgdGhhdCB0aGUKKwliaXRtYXBwZWQgcGFja2ZpbGUgaGFzIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4KKworLS1rZWVwLXBhY2s9PHBhY2stbmFtZT46OgorCUV4Y2x1ZGUgdGhlIGdpdmVuIHBhY2sgZnJvbSByZXBhY2tpbmcuIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQKKwlvZiBoYXZpbmcgYC5rZWVwYCBmaWxlIG9uIHRoZSBwYWNrLiBgPHBhY2stbmFtZT5gIGlzIHRoZQorCXBhY2sgZmlsZSBuYW1lIHdpdGhvdXQgbGVhZGluZyBkaXJlY3RvcnkgKGUuZy4gYHBhY2stMTIzLnBhY2tgKS4KKwlUaGUgb3B0aW9uIGNvdWxkIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBrZWVwIG11bHRpcGxlCisJcGFja3MuCisKKy0tdW5wYWNrLXVucmVhY2hhYmxlPTx3aGVuPjo6CisJV2hlbiBsb29zZW5pbmcgdW5yZWFjaGFibGUgb2JqZWN0cywgZG8gbm90IGJvdGhlciBsb29zZW5pbmcgYW55CisJb2JqZWN0cyBvbGRlciB0aGFuIGA8d2hlbj5gLiBUaGlzIGNhbiBiZSB1c2VkIHRvIG9wdGltaXplIG91dAorCXRoZSB3cml0ZSBvZiBhbnkgb2JqZWN0cyB0aGF0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IHBydW5lZCBieQorCWEgZm9sbG93LXVwIGBnaXQgcHJ1bmVgLgorCistazo6CistLWtlZXAtdW5yZWFjaGFibGU6OgorCVdoZW4gdXNlZCB3aXRoIGAtYWRgLCBhbnkgdW5yZWFjaGFibGUgb2JqZWN0cyBmcm9tIGV4aXN0aW5nCisJcGFja3Mgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBwYWNrZmlsZSBpbnN0ZWFkIG9mCisJYmVpbmcgcmVtb3ZlZC4gSW4gYWRkaXRpb24sIGFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzIHdpbGwKKwliZSBwYWNrZWQgKGFuZCB0aGVpciBsb29zZSBjb3VudGVycGFydHMgcmVtb3ZlZCkuCisKKy1pOjoKKy0tZGVsdGEtaXNsYW5kczo6CisJUGFzcyB0aGUgYC0tZGVsdGEtaXNsYW5kc2Agb3B0aW9uIHRvIGBnaXQtcGFjay1vYmplY3RzYCwgc2VlCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIHRoZSBjb21tYW5kIHBhc3NlcyBgLS1kZWx0YS1iYXNlLW9mZnNldGAgb3B0aW9uIHRvCisnZ2l0IHBhY2stb2JqZWN0cyc7IHRoaXMgdHlwaWNhbGx5IHJlc3VsdHMgaW4gc2xpZ2h0bHkgc21hbGxlciBwYWNrcywKK2J1dCB0aGUgZ2VuZXJhdGVkIHBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB2ZXJzaW9ucyBvZiBHaXQgb2xkZXIgdGhhbgordmVyc2lvbiAxLjQuNC4gSWYgeW91IG5lZWQgdG8gc2hhcmUgeW91ciByZXBvc2l0b3J5IHdpdGggc3VjaCBhbmNpZW50IEdpdAordmVyc2lvbnMsIGVpdGhlciBkaXJlY3RseSBvciB2aWEgdGhlIGR1bWIgaHR0cCBwcm90b2NvbCwgdGhlbiB5b3UKK25lZWQgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGByZXBhY2suVXNlRGVsdGFCYXNlT2Zmc2V0YCB0bworImZhbHNlIiBhbmQgcmVwYWNrLiBBY2Nlc3MgZnJvbSBvbGQgR2l0IHZlcnNpb25zIG92ZXIgdGhlIG5hdGl2ZSBwcm90b2NvbAoraXMgdW5hZmZlY3RlZCBieSB0aGlzIG9wdGlvbiBhcyB0aGUgY29udmVyc2lvbiBpcyBwZXJmb3JtZWQgb24gdGhlIGZseQorYXMgbmVlZGVkIGluIHRoYXQgY2FzZS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0KK2xpbmtnaXQ6Z2l0LXBydW5lLXBhY2tlZFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwbGFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI3MWQ3NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0CkBAIC0wLDAgKzEsMTYxIEBACitnaXQtcmVwbGFjZSgxKQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlcGxhY2UgLSBDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVwbGFjZScgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+CisnZ2l0IHJlcGxhY2UnIFstZl0gLS1lZGl0IDxvYmplY3Q+CisnZ2l0IHJlcGxhY2UnIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dCisnZ2l0IHJlcGxhY2UnIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUKKydnaXQgcmVwbGFjZScgLWQgPG9iamVjdD4uLi4KKydnaXQgcmVwbGFjZScgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQWRkcyBhICdyZXBsYWNlJyByZWZlcmVuY2UgaW4gYHJlZnMvcmVwbGFjZS9gIG5hbWVzcGFjZS4KKworVGhlIG5hbWUgb2YgdGhlICdyZXBsYWNlJyByZWZlcmVuY2UgaXMgdGhlIFNIQS0xIG9mIHRoZSBvYmplY3QgdGhhdCBpcworcmVwbGFjZWQuIFRoZSBjb250ZW50IG9mIHRoZSAncmVwbGFjZScgcmVmZXJlbmNlIGlzIHRoZSBTSEEtMSBvZiB0aGUKK3JlcGxhY2VtZW50IG9iamVjdC4KKworVGhlIHJlcGxhY2VkIG9iamVjdCBhbmQgdGhlIHJlcGxhY2VtZW50IG9iamVjdCBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuCitUaGlzIHJlc3RyaWN0aW9uIGNhbiBiZSBieXBhc3NlZCB1c2luZyBgLWZgLgorCitVbmxlc3MgYC1mYCBpcyBnaXZlbiwgdGhlICdyZXBsYWNlJyByZWZlcmVuY2UgbXVzdCBub3QgeWV0IGV4aXN0LgorCitUaGVyZSBpcyBubyBvdGhlciByZXN0cmljdGlvbiBvbiB0aGUgcmVwbGFjZWQgYW5kIHJlcGxhY2VtZW50IG9iamVjdHMuCitNZXJnZSBjb21taXRzIGNhbiBiZSByZXBsYWNlZCBieSBub24tbWVyZ2UgY29tbWl0cyBhbmQgdmljZSB2ZXJzYS4KKworUmVwbGFjZW1lbnQgcmVmZXJlbmNlcyB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdCBieSBhbGwgR2l0IGNvbW1hbmRzCitleGNlcHQgdGhvc2UgZG9pbmcgcmVhY2hhYmlsaXR5IHRyYXZlcnNhbCAocHJ1bmUsIHBhY2sgdHJhbnNmZXIgYW5kCitmc2NrKS4KKworSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB1c2Ugb2YgcmVwbGFjZW1lbnQgcmVmZXJlbmNlcyBmb3IgYW55Citjb21tYW5kIHVzaW5nIHRoZSBgLS1uby1yZXBsYWNlLW9iamVjdHNgIG9wdGlvbiBqdXN0IGFmdGVyICdnaXQnLgorCitGb3IgZXhhbXBsZSBpZiBjb21taXQgJ2ZvbycgaGFzIGJlZW4gcmVwbGFjZWQgYnkgY29tbWl0ICdiYXInOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIGNhdC1maWxlIGNvbW1pdCBmb28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzaG93cyBpbmZvcm1hdGlvbiBhYm91dCBjb21taXQgJ2ZvbycsIHdoaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGNvbW1pdCBmb28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzaG93cyBpbmZvcm1hdGlvbiBhYm91dCBjb21taXQgJ2JhcicuCisKK1RoZSBgR0lUX05PX1JFUExBQ0VfT0JKRUNUU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHNldCB0bworYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGAtLW5vLXJlcGxhY2Utb2JqZWN0c2Agb3B0aW9uLgorCitPUFRJT05TCistLS0tLS0tCistZjo6CistLWZvcmNlOjoKKwlJZiBhbiBleGlzdGluZyByZXBsYWNlIHJlZiBmb3IgdGhlIHNhbWUgb2JqZWN0IGV4aXN0cywgaXQgd2lsbAorCWJlIG92ZXJ3cml0dGVuIChpbnN0ZWFkIG9mIGZhaWxpbmcpLgorCistZDo6CistLWRlbGV0ZTo6CisJRGVsZXRlIGV4aXN0aW5nIHJlcGxhY2UgcmVmcyBmb3IgdGhlIGdpdmVuIG9iamVjdHMuCisKKy0tZWRpdCA8b2JqZWN0Pjo6CisJRWRpdCBhbiBvYmplY3QncyBjb250ZW50IGludGVyYWN0aXZlbHkuIFRoZSBleGlzdGluZyBjb250ZW50CisJZm9yIDxvYmplY3Q+IGlzIHByZXR0eS1wcmludGVkIGludG8gYSB0ZW1wb3JhcnkgZmlsZSwgYW4KKwllZGl0b3IgaXMgbGF1bmNoZWQgb24gdGhlIGZpbGUsIGFuZCB0aGUgcmVzdWx0IGlzIHBhcnNlZCB0bworCWNyZWF0ZSBhIG5ldyBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyA8b2JqZWN0Pi4gQQorCXJlcGxhY2VtZW50IHJlZiBpcyB0aGVuIGNyZWF0ZWQgdG8gcmVwbGFjZSA8b2JqZWN0PiB3aXRoIHRoZQorCW5ld2x5IGNyZWF0ZWQgb2JqZWN0LiBTZWUgbGlua2dpdDpnaXQtdmFyWzFdIGZvciBkZXRhaWxzIGFib3V0CisJaG93IHRoZSBlZGl0b3Igd2lsbCBiZSBjaG9zZW4uCisKKy0tcmF3OjoKKwlXaGVuIGVkaXRpbmcsIHByb3ZpZGUgdGhlIHJhdyBvYmplY3QgY29udGVudHMgcmF0aGVyIHRoYW4KKwlwcmV0dHktcHJpbnRlZCBvbmVzLiBDdXJyZW50bHkgdGhpcyBvbmx5IGFmZmVjdHMgdHJlZXMsIHdoaWNoCisJd2lsbCBiZSBzaG93biBpbiB0aGVpciBiaW5hcnkgZm9ybS4gVGhpcyBpcyBoYXJkZXIgdG8gd29yayB3aXRoLAorCWJ1dCBjYW4gaGVscCB3aGVuIHJlcGFpcmluZyBhIHRyZWUgdGhhdCBpcyBzbyBjb3JydXB0ZWQgaXQKKwljYW5ub3QgYmUgcHJldHR5LXByaW50ZWQuIE5vdGUgdGhhdCB5b3UgbWF5IG5lZWQgdG8gY29uZmlndXJlCisJeW91ciBlZGl0b3IgdG8gY2xlYW5seSByZWFkIGFuZCB3cml0ZSBiaW5hcnkgZGF0YS4KKworLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dOjoKKwlDcmVhdGUgYSBncmFmdCBjb21taXQuIEEgbmV3IGNvbW1pdCBpcyBjcmVhdGVkIHdpdGggdGhlIHNhbWUKKwljb250ZW50IGFzIDxjb21taXQ+IGV4Y2VwdCB0aGF0IGl0cyBwYXJlbnRzIHdpbGwgYmUKKwlbPHBhcmVudD4uLi5dIGluc3RlYWQgb2YgPGNvbW1pdD4ncyBwYXJlbnRzLiBBIHJlcGxhY2VtZW50IHJlZgorCWlzIHRoZW4gY3JlYXRlZCB0byByZXBsYWNlIDxjb21taXQ+IHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQKKwljb21taXQuIFVzZSBgLS1jb252ZXJ0LWdyYWZ0LWZpbGVgIHRvIGNvbnZlcnQgYQorCWAkR0lUX0RJUi9pbmZvL2dyYWZ0c2AgZmlsZSBhbmQgdXNlIHJlcGxhY2UgcmVmcyBpbnN0ZWFkLgorCistLWNvbnZlcnQtZ3JhZnQtZmlsZTo6CisJQ3JlYXRlcyBncmFmdCBjb21taXRzIGZvciBhbGwgZW50cmllcyBpbiBgJEdJVF9ESVIvaW5mby9ncmFmdHNgCisJYW5kIGRlbGV0ZXMgdGhhdCBmaWxlIHVwb24gc3VjY2Vzcy4gVGhlIHB1cnBvc2UgaXMgdG8gaGVscCB1c2VycworCXdpdGggdHJhbnNpdGlvbmluZyBvZmYgb2YgdGhlIG5vdy1kZXByZWNhdGVkIGdyYWZ0IGZpbGUuCisKKy1sIDxwYXR0ZXJuPjo6CistLWxpc3QgPHBhdHRlcm4+OjoKKwlMaXN0IHJlcGxhY2UgcmVmcyBmb3Igb2JqZWN0cyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuIChvcgorCWFsbCBpZiBubyBwYXR0ZXJuIGlzIGdpdmVuKS4KKwlUeXBpbmcgImdpdCByZXBsYWNlIiB3aXRob3V0IGFyZ3VtZW50cywgYWxzbyBsaXN0cyBhbGwgcmVwbGFjZQorCXJlZnMuCisKKy0tZm9ybWF0PTxmb3JtYXQ+OjoKKwlXaGVuIGxpc3RpbmcsIHVzZSB0aGUgc3BlY2lmaWVkIDxmb3JtYXQ+LCB3aGljaCBjYW4gYmUgb25lIG9mCisJJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJy4gV2hlbiBvbWl0dGVkLCB0aGUgZm9ybWF0CisJZGVmYXVsdHMgdG8gJ3Nob3J0Jy4KKworRk9STUFUUworLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGZvcm1hdCBhcmUgYXZhaWxhYmxlOgorCisqICdzaG9ydCc6CisJPHJlcGxhY2VkIHNoYTE+CisqICdtZWRpdW0nOgorCTxyZXBsYWNlZCBzaGExPiAtPiA8cmVwbGFjZW1lbnQgc2hhMT4KKyogJ2xvbmcnOgorCTxyZXBsYWNlZCBzaGExPiAoPHJlcGxhY2VkIHR5cGU+KSAtPiA8cmVwbGFjZW1lbnQgc2hhMT4gKDxyZXBsYWNlbWVudCB0eXBlPikKKworQ1JFQVRJTkcgUkVQTEFDRU1FTlQgT0JKRUNUUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsaW5rZ2l0OmdpdC1oYXNoLW9iamVjdFsxXSwgbGlua2dpdDpnaXQtcmViYXNlWzFdLCBhbmQKK2h0dHBzOi8vZ2l0aHViLmNvbS9uZXdyZW4vZ2l0LWZpbHRlci1yZXBvW2dpdC1maWx0ZXItcmVwb10sIGFtb25nIG90aGVyIGdpdCBjb21tYW5kcywgY2FuIGJlIHVzZWQgdG8KK2NyZWF0ZSByZXBsYWNlbWVudCBvYmplY3RzIGZyb20gZXhpc3Rpbmcgb2JqZWN0cy4gVGhlIGAtLWVkaXRgIG9wdGlvbgorY2FuIGFsc28gYmUgdXNlZCB3aXRoICdnaXQgcmVwbGFjZScgdG8gY3JlYXRlIGEgcmVwbGFjZW1lbnQgb2JqZWN0IGJ5CitlZGl0aW5nIGFuIGV4aXN0aW5nIG9iamVjdC4KKworSWYgeW91IHdhbnQgdG8gcmVwbGFjZSBtYW55IGJsb2JzLCB0cmVlcyBvciBjb21taXRzIHRoYXQgYXJlIHBhcnQgb2YgYQorc3RyaW5nIG9mIGNvbW1pdHMsIHlvdSBtYXkganVzdCB3YW50IHRvIGNyZWF0ZSBhIHJlcGxhY2VtZW50IHN0cmluZyBvZgorY29tbWl0cyBhbmQgdGhlbiBvbmx5IHJlcGxhY2UgdGhlIGNvbW1pdCBhdCB0aGUgdGlwIG9mIHRoZSB0YXJnZXQKK3N0cmluZyBvZiBjb21taXRzIHdpdGggdGhlIGNvbW1pdCBhdCB0aGUgdGlwIG9mIHRoZSByZXBsYWNlbWVudCBzdHJpbmcKK29mIGNvbW1pdHMuCisKK0JVR1MKKy0tLS0KK0NvbXBhcmluZyBibG9icyBvciB0cmVlcyB0aGF0IGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHRob3NlIHRoYXQKK3JlcGxhY2UgdGhlbSB3aWxsIG5vdCB3b3JrIHByb3Blcmx5LiBBbmQgdXNpbmcgYGdpdCByZXNldCAtLWhhcmRgIHRvCitnbyBiYWNrIHRvIGEgcmVwbGFjZWQgY29tbWl0IHdpbGwgbW92ZSB0aGUgYnJhbmNoIHRvIHRoZSByZXBsYWNlbWVudAorY29tbWl0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VkIGNvbW1pdC4KKworVGhlcmUgbWF5IGJlIG90aGVyIHByb2JsZW1zIHdoZW4gdXNpbmcgJ2dpdCByZXYtbGlzdCcgcmVsYXRlZCB0bworcGVuZGluZyBvYmplY3RzLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWhhc2gtb2JqZWN0WzFdCitsaW5rZ2l0OmdpdC1yZWJhc2VbMV0KK2xpbmtnaXQ6Z2l0LXRhZ1sxXQorbGlua2dpdDpnaXQtYnJhbmNoWzFdCitsaW5rZ2l0OmdpdC1jb21taXRbMV0KK2xpbmtnaXQ6Z2l0LXZhclsxXQorbGlua2dpdDpnaXRbMV0KK2h0dHBzOi8vZ2l0aHViLmNvbS9uZXdyZW4vZ2l0LWZpbHRlci1yZXBvW2dpdC1maWx0ZXItcmVwb10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXF1ZXN0LXB1bGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVxdWVzdC1wdWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQzOTJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVxdWVzdC1wdWxsLnR4dApAQCAtMCwwICsxLDc5IEBACitnaXQtcmVxdWVzdC1wdWxsKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXF1ZXN0LXB1bGwgLSBHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVxdWVzdC1wdWxsJyBbLXBdIDxzdGFydD4gPHVybD4gWzxlbmQ+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2VuZXJhdGUgYSByZXF1ZXN0IGFza2luZyB5b3VyIHVwc3RyZWFtIHByb2plY3QgdG8gcHVsbCBjaGFuZ2VzIGludG8KK3RoZWlyIHRyZWUuICBUaGUgcmVxdWVzdCwgcHJpbnRlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LAorYmVnaW5zIHdpdGggdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiwgc3VtbWFyaXplcwordGhlIGNoYW5nZXMgYW5kIGluZGljYXRlcyBmcm9tIHdoZXJlIHRoZXkgY2FuIGJlIHB1bGxlZC4KKworVGhlIHVwc3RyZWFtIHByb2plY3QgaXMgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgY29tbWl0IG5hbWVkIGJ5CitgPHN0YXJ0PmAgYW5kIHRoZSBvdXRwdXQgYXNrcyBpdCB0byBpbnRlZ3JhdGUgdGhlIGNoYW5nZXMgeW91IG1hZGUKK3NpbmNlIHRoYXQgY29tbWl0LCB1cCB0byB0aGUgY29tbWl0IG5hbWVkIGJ5IGA8ZW5kPmAsIGJ5IHZpc2l0aW5nCit0aGUgcmVwb3NpdG9yeSBuYW1lZCBieSBgPHVybD5gLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1wOjoKKwlJbmNsdWRlIHBhdGNoIHRleHQgaW4gdGhlIG91dHB1dC4KKworPHN0YXJ0Pjo6CisJQ29tbWl0IHRvIHN0YXJ0IGF0LiAgVGhpcyBuYW1lcyBhIGNvbW1pdCB0aGF0IGlzIGFscmVhZHkgaW4KKwl0aGUgdXBzdHJlYW0gaGlzdG9yeS4KKworPHVybD46OgorCVRoZSByZXBvc2l0b3J5IFVSTCB0byBiZSBwdWxsZWQgZnJvbS4KKworPGVuZD46OgorCUNvbW1pdCB0byBlbmQgYXQgKGRlZmF1bHRzIHRvIEhFQUQpLiAgVGhpcyBuYW1lcyB0aGUgY29tbWl0CisJYXQgdGhlIHRpcCBvZiB0aGUgaGlzdG9yeSB5b3UgYXJlIGFza2luZyB0byBiZSBwdWxsZWQuCisrCitXaGVuIHRoZSByZXBvc2l0b3J5IG5hbWVkIGJ5IGA8dXJsPmAgaGFzIHRoZSBjb21taXQgYXQgYSB0aXAgb2YgYQorcmVmIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHJlZiB5b3UgaGF2ZSBsb2NhbGx5LCB5b3UgY2FuIHVzZSB0aGUKK2A8bG9jYWw+OjxyZW1vdGU+YCBzeW50YXgsIHRvIGhhdmUgaXRzIGxvY2FsIG5hbWUsIGEgY29sb24gYDpgLCBhbmQKK2l0cyByZW1vdGUgbmFtZS4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworSW1hZ2luZSB0aGF0IHlvdSBidWlsdCB5b3VyIHdvcmsgb24geW91ciBgbWFzdGVyYCBicmFuY2ggb24gdG9wIG9mCit0aGUgYHYxLjBgIHJlbGVhc2UsIGFuZCB3YW50IGl0IHRvIGJlIGludGVncmF0ZWQgdG8gdGhlIHByb2plY3QuCitGaXJzdCB5b3UgcHVzaCB0aGF0IGNoYW5nZSB0byB5b3VyIHB1YmxpYyByZXBvc2l0b3J5IGZvciBvdGhlcnMgdG8KK3NlZToKKworCWdpdCBwdXNoIGh0dHBzOi8vZ2l0LmtvLnh6L3Byb2plY3QgbWFzdGVyCisKK1RoZW4sIHlvdSBydW4gdGhpcyBjb21tYW5kOgorCisJZ2l0IHJlcXVlc3QtcHVsbCB2MS4wIGh0dHBzOi8vZ2l0LmtvLnh6L3Byb2plY3QgbWFzdGVyCisKK3doaWNoIHdpbGwgcHJvZHVjZSBhIHJlcXVlc3QgdG8gdGhlIHVwc3RyZWFtLCBzdW1tYXJpemluZyB0aGUKK2NoYW5nZXMgYmV0d2VlbiB0aGUgYHYxLjBgIHJlbGVhc2UgYW5kIHlvdXIgYG1hc3RlcmAsIHRvIHB1bGwgaXQKK2Zyb20geW91ciBwdWJsaWMgcmVwb3NpdG9yeS4KKworSWYgeW91IHB1c2hlZCB5b3VyIGNoYW5nZSB0byBhIGJyYW5jaCB3aG9zZSBuYW1lIGlzIGRpZmZlcmVudCBmcm9tCit0aGUgb25lIHlvdSBoYXZlIGxvY2FsbHksIGUuZy4KKworCWdpdCBwdXNoIGh0dHBzOi8vZ2l0LmtvLnh6L3Byb2plY3QgbWFzdGVyOmZvci1saW51cworCit0aGVuIHlvdSBjYW4gYXNrIHRoYXQgdG8gYmUgcHVsbGVkIHdpdGgKKworCWdpdCByZXF1ZXN0LXB1bGwgdjEuMCBodHRwczovL2dpdC5rby54ei9wcm9qZWN0IG1hc3Rlcjpmb3ItbGludXMKKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZmM4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CkBAIC0wLDAgKzEsMjIyIEBACitnaXQtcmVyZXJlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXJlcmUgLSBSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXJlcmUnIFsnY2xlYXInfCdmb3JnZXQnIDxwYXRoc3BlYz58J2RpZmYnfCdyZW1haW5pbmcnfCdzdGF0dXMnfCdnYyddCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitJbiBhIHdvcmtmbG93IGVtcGxveWluZyByZWxhdGl2ZWx5IGxvbmcgbGl2ZWQgdG9waWMgYnJhbmNoZXMsCit0aGUgZGV2ZWxvcGVyIHNvbWV0aW1lcyBuZWVkcyB0byByZXNvbHZlIHRoZSBzYW1lIGNvbmZsaWN0cyBvdmVyCithbmQgb3ZlciBhZ2FpbiB1bnRpbCB0aGUgdG9waWMgYnJhbmNoZXMgYXJlIGRvbmUgKGVpdGhlciBtZXJnZWQKK3RvIHRoZSAicmVsZWFzZSIgYnJhbmNoLCBvciBzZW50IG91dCBhbmQgYWNjZXB0ZWQgdXBzdHJlYW0pLgorCitUaGlzIGNvbW1hbmQgYXNzaXN0cyB0aGUgZGV2ZWxvcGVyIGluIHRoaXMgcHJvY2VzcyBieSByZWNvcmRpbmcKK2NvbmZsaWN0ZWQgYXV0b21lcmdlIHJlc3VsdHMgYW5kIGNvcnJlc3BvbmRpbmcgaGFuZCByZXNvbHZlIHJlc3VsdHMKK29uIHRoZSBpbml0aWFsIG1hbnVhbCBtZXJnZSwgYW5kIGFwcGx5aW5nIHByZXZpb3VzbHkgcmVjb3JkZWQKK2hhbmQgcmVzb2x1dGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBhdXRvbWVyZ2UgcmVzdWx0cy4KKworW05PVEVdCitZb3UgbmVlZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYHJlcmVyZS5lbmFibGVkYCBpbiBvcmRlciB0bworZW5hYmxlIHRoaXMgY29tbWFuZC4KKworCitDT01NQU5EUworLS0tLS0tLS0KKworTm9ybWFsbHksICdnaXQgcmVyZXJlJyBpcyBydW4gd2l0aG91dCBhcmd1bWVudHMgb3IgdXNlci1pbnRlcnZlbnRpb24uCitIb3dldmVyLCBpdCBoYXMgc2V2ZXJhbCBjb21tYW5kcyB0aGF0IGFsbG93IGl0IHRvIGludGVyYWN0IHdpdGgKK2l0cyB3b3JraW5nIHN0YXRlLgorCisnY2xlYXInOjoKKworUmVzZXQgdGhlIG1ldGFkYXRhIHVzZWQgYnkgcmVyZXJlIGlmIGEgbWVyZ2UgcmVzb2x1dGlvbiBpcyB0byBiZQorYWJvcnRlZC4gIENhbGxpbmcgJ2dpdCBhbSBbLS1za2lwfC0tYWJvcnRdJyBvciAnZ2l0IHJlYmFzZSBbLS1za2lwfC0tYWJvcnRdJword2lsbCBhdXRvbWF0aWNhbGx5IGludm9rZSB0aGlzIGNvbW1hbmQuCisKKydmb3JnZXQnIDxwYXRoc3BlYz46OgorCitSZXNldCB0aGUgY29uZmxpY3QgcmVzb2x1dGlvbnMgd2hpY2ggcmVyZXJlIGhhcyByZWNvcmRlZCBmb3IgdGhlIGN1cnJlbnQKK2NvbmZsaWN0IGluIDxwYXRoc3BlYz4uCisKKydkaWZmJzo6CisKK0Rpc3BsYXkgZGlmZnMgZm9yIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZXNvbHV0aW9uLiAgSXQgaXMKK3VzZWZ1bCBmb3IgdHJhY2tpbmcgd2hhdCBoYXMgY2hhbmdlZCB3aGlsZSB0aGUgdXNlciBpcyByZXNvbHZpbmcKK2NvbmZsaWN0cy4gIEFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIHN5c3RlbQorJ2RpZmYnIGNvbW1hbmQgaW5zdGFsbGVkIGluIFBBVEguCisKKydzdGF0dXMnOjoKKworUHJpbnQgcGF0aHMgd2l0aCBjb25mbGljdHMgd2hvc2UgbWVyZ2UgcmVzb2x1dGlvbiByZXJlcmUgd2lsbCByZWNvcmQuCisKKydyZW1haW5pbmcnOjoKKworUHJpbnQgcGF0aHMgd2l0aCBjb25mbGljdHMgdGhhdCBoYXZlIG5vdCBiZWVuIGF1dG9yZXNvbHZlZCBieSByZXJlcmUuCitUaGlzIGluY2x1ZGVzIHBhdGhzIHdob3NlIHJlc29sdXRpb25zIGNhbm5vdCBiZSB0cmFja2VkIGJ5IHJlcmVyZSwKK3N1Y2ggYXMgY29uZmxpY3Rpbmcgc3VibW9kdWxlcy4KKworJ2djJzo6CisKK1BydW5lIHJlY29yZHMgb2YgY29uZmxpY3RlZCBtZXJnZXMgdGhhdAorb2NjdXJyZWQgYSBsb25nIHRpbWUgYWdvLiAgQnkgZGVmYXVsdCwgdW5yZXNvbHZlZCBjb25mbGljdHMgb2xkZXIKK3RoYW4gMTUgZGF5cyBhbmQgcmVzb2x2ZWQgY29uZmxpY3RzIG9sZGVyIHRoYW4gNjAKK2RheXMgYXJlIHBydW5lZC4gIFRoZXNlIGRlZmF1bHRzIGFyZSBjb250cm9sbGVkIHZpYSB0aGUKK2BnYy5yZXJlcmVVbnJlc29sdmVkYCBhbmQgYGdjLnJlcmVyZVJlc29sdmVkYCBjb25maWd1cmF0aW9uCit2YXJpYWJsZXMgcmVzcGVjdGl2ZWx5LgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworV2hlbiB5b3VyIHRvcGljIGJyYW5jaCBtb2RpZmllcyBhbiBvdmVybGFwcGluZyBhcmVhIHRoYXQgeW91cgorbWFzdGVyIGJyYW5jaCAob3IgdXBzdHJlYW0pIHRvdWNoZWQgc2luY2UgeW91ciB0b3BpYyBicmFuY2gKK2ZvcmtlZCBmcm9tIGl0LCB5b3UgbWF5IHdhbnQgdG8gdGVzdCBpdCB3aXRoIHRoZSBsYXRlc3QgbWFzdGVyLAorZXZlbiBiZWZvcmUgeW91ciB0b3BpYyBicmFuY2ggaXMgcmVhZHkgdG8gYmUgcHVzaGVkIHVwc3RyZWFtOgorCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgby0tLSotLS1vIHRvcGljCisgICAgICAgICAgICAgLworICAgIG8tLS1vLS0tby0tLSotLS1vLS0tbyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitGb3Igc3VjaCBhIHRlc3QsIHlvdSBuZWVkIHRvIG1lcmdlIG1hc3RlciBhbmQgdG9waWMgc29tZWhvdy4KK09uZSB3YXkgdG8gZG8gaXQgaXMgdG8gcHVsbCBtYXN0ZXIgaW50byB0aGUgdG9waWMgYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKwkkIGdpdCBzd2l0Y2ggdG9waWMKKwkkIGdpdCBtZXJnZSBtYXN0ZXIKKworICAgICAgICAgICAgICBvLS0tKi0tLW8tLS0rIHRvcGljCisgICAgICAgICAgICAgLyAgICAgICAgICAgLworICAgIG8tLS1vLS0tby0tLSotLS1vLS0tbyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGUgY29tbWl0cyBtYXJrZWQgd2l0aCBgKmAgdG91Y2ggdGhlIHNhbWUgYXJlYSBpbiB0aGUgc2FtZQorZmlsZTsgeW91IG5lZWQgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzIHdoZW4gY3JlYXRpbmcgdGhlIGNvbW1pdAorbWFya2VkIHdpdGggYCtgLiAgVGhlbiB5b3UgY2FuIHRlc3QgdGhlIHJlc3VsdCB0byBtYWtlIHN1cmUgeW91cgord29yay1pbi1wcm9ncmVzcyBzdGlsbCB3b3JrcyB3aXRoIHdoYXQgaXMgaW4gdGhlIGxhdGVzdCBtYXN0ZXIuCisKK0FmdGVyIHRoaXMgdGVzdCBtZXJnZSwgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGNvbnRpbnVlIHlvdXIgd29yaworb24gdGhlIHRvcGljLiAgVGhlIGVhc2llc3QgaXMgdG8gYnVpbGQgb24gdG9wIG9mIHRoZSB0ZXN0IG1lcmdlCitjb21taXQgYCtgLCBhbmQgd2hlbiB5b3VyIHdvcmsgaW4gdGhlIHRvcGljIGJyYW5jaCBpcyBmaW5hbGx5CityZWFkeSwgcHVsbCB0aGUgdG9waWMgYnJhbmNoIGludG8gbWFzdGVyLCBhbmQvb3IgYXNrIHRoZQordXBzdHJlYW0gdG8gcHVsbCBmcm9tIHlvdS4gIEJ5IHRoYXQgdGltZSwgaG93ZXZlciwgdGhlIG1hc3RlciBvcgordGhlIHVwc3RyZWFtIG1pZ2h0IGhhdmUgYmVlbiBhZHZhbmNlZCBzaW5jZSB0aGUgdGVzdCBtZXJnZSBgK2AsCitpbiB3aGljaCBjYXNlIHRoZSBmaW5hbCBjb21taXQgZ3JhcGggd291bGQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCSQgZ2l0IHN3aXRjaCB0b3BpYworCSQgZ2l0IG1lcmdlIG1hc3RlcgorCSQgLi4uIHdvcmsgb24gYm90aCB0b3BpYyBhbmQgbWFzdGVyIGJyYW5jaGVzCisJJCBnaXQgc3dpdGNoIG1hc3RlcgorCSQgZ2l0IG1lcmdlIHRvcGljCisKKyAgICAgICAgICAgICAgby0tLSotLS1vLS0tKy0tLW8tLS1vIHRvcGljCisgICAgICAgICAgICAgLyAgICAgICAgICAgLyAgICAgICAgIFwKKyAgICBvLS0tby0tLW8tLS0qLS0tby0tLW8tLS1vLS0tby0tLSsgbWFzdGVyCistLS0tLS0tLS0tLS0KKworV2hlbiB5b3VyIHRvcGljIGJyYW5jaCBpcyBsb25nLWxpdmVkLCBob3dldmVyLCB5b3VyIHRvcGljIGJyYW5jaAord291bGQgZW5kIHVwIGhhdmluZyBtYW55IHN1Y2ggIk1lcmdlIGZyb20gbWFzdGVyIiBjb21taXRzIG9uIGl0LAord2hpY2ggd291bGQgdW5uZWNlc3NhcmlseSBjbHV0dGVyIHRoZSBkZXZlbG9wbWVudCBoaXN0b3J5LgorUmVhZGVycyBvZiB0aGUgTGludXgga2VybmVsIG1haWxpbmcgbGlzdCBtYXkgcmVtZW1iZXIgdGhhdCBMaW51cworY29tcGxhaW5lZCBhYm91dCBzdWNoIHRvbyBmcmVxdWVudCB0ZXN0IG1lcmdlcyB3aGVuIGEgc3Vic3lzdGVtCittYWludGFpbmVyIGFza2VkIHRvIHB1bGwgZnJvbSBhIGJyYW5jaCBmdWxsIG9mICJ1c2VsZXNzIG1lcmdlcyIuCisKK0FzIGFuIGFsdGVybmF0aXZlLCB0byBrZWVwIHRoZSB0b3BpYyBicmFuY2ggY2xlYW4gb2YgdGVzdAorbWVyZ2VzLCB5b3UgY291bGQgYmxvdyBhd2F5IHRoZSB0ZXN0IG1lcmdlLCBhbmQga2VlcCBidWlsZGluZyBvbgordG9wIG9mIHRoZSB0aXAgYmVmb3JlIHRoZSB0ZXN0IG1lcmdlOgorCistLS0tLS0tLS0tLS0KKwkkIGdpdCBzd2l0Y2ggdG9waWMKKwkkIGdpdCBtZXJnZSBtYXN0ZXIKKwkkIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gOyMgcmV3aW5kIHRoZSB0ZXN0IG1lcmdlCisJJCAuLi4gd29yayBvbiBib3RoIHRvcGljIGFuZCBtYXN0ZXIgYnJhbmNoZXMKKwkkIGdpdCBzd2l0Y2ggbWFzdGVyCisJJCBnaXQgbWVyZ2UgdG9waWMKKworICAgICAgICAgICAgICBvLS0tKi0tLW8tLS0tLS0tby0tLW8gdG9waWMKKyAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgXAorICAgIG8tLS1vLS0tby0tLSotLS1vLS0tby0tLW8tLS1vLS0tKyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGlzIHdvdWxkIGxlYXZlIG9ubHkgb25lIG1lcmdlIGNvbW1pdCB3aGVuIHlvdXIgdG9waWMgYnJhbmNoIGlzCitmaW5hbGx5IHJlYWR5IGFuZCBtZXJnZWQgaW50byB0aGUgbWFzdGVyIGJyYW5jaC4gIFRoaXMgbWVyZ2UKK3dvdWxkIHJlcXVpcmUgeW91IHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LCBpbnRyb2R1Y2VkIGJ5IHRoZQorY29tbWl0cyBtYXJrZWQgd2l0aCBgKmAuICBIb3dldmVyLCB0aGlzIGNvbmZsaWN0IGlzIG9mdGVuIHRoZQorc2FtZSBjb25mbGljdCB5b3UgcmVzb2x2ZWQgd2hlbiB5b3UgY3JlYXRlZCB0aGUgdGVzdCBtZXJnZSB5b3UKK2JsZXcgYXdheS4gICdnaXQgcmVyZXJlJyBoZWxwcyB5b3UgcmVzb2x2ZSB0aGlzIGZpbmFsCitjb25mbGljdGVkIG1lcmdlIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHlvdXIgZWFybGllciBoYW5kCityZXNvbHZlLgorCitSdW5uaW5nIHRoZSAnZ2l0IHJlcmVyZScgY29tbWFuZCBpbW1lZGlhdGVseSBhZnRlciBhIGNvbmZsaWN0ZWQKK2F1dG9tZXJnZSByZWNvcmRzIHRoZSBjb25mbGljdGVkIHdvcmtpbmcgdHJlZSBmaWxlcywgd2l0aCB0aGUKK3VzdWFsIGNvbmZsaWN0IG1hcmtlcnMgYDw8PDw8PDxgLCBgPT09PT09PWAsIGFuZCBgPj4+Pj4+PmAgaW4KK3RoZW0uICBMYXRlciwgYWZ0ZXIgeW91IGFyZSBkb25lIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLAorcnVubmluZyAnZ2l0IHJlcmVyZScgYWdhaW4gd2lsbCByZWNvcmQgdGhlIHJlc29sdmVkIHN0YXRlIG9mIHRoZXNlCitmaWxlcy4gIFN1cHBvc2UgeW91IGRpZCB0aGlzIHdoZW4geW91IGNyZWF0ZWQgdGhlIHRlc3QgbWVyZ2Ugb2YKK21hc3RlciBpbnRvIHRoZSB0b3BpYyBicmFuY2guCisKK05leHQgdGltZSwgYWZ0ZXIgc2VlaW5nIHRoZSBzYW1lIGNvbmZsaWN0ZWQgYXV0b21lcmdlLAorcnVubmluZyAnZ2l0IHJlcmVyZScgd2lsbCBwZXJmb3JtIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gdGhlCitlYXJsaWVyIGNvbmZsaWN0ZWQgYXV0b21lcmdlLCB0aGUgZWFybGllciBtYW51YWwgcmVzb2x1dGlvbiwgYW5kCit0aGUgY3VycmVudCBjb25mbGljdGVkIGF1dG9tZXJnZS4KK0lmIHRoaXMgdGhyZWUtd2F5IG1lcmdlIHJlc29sdmVzIGNsZWFubHksIHRoZSByZXN1bHQgaXMgd3JpdHRlbgorb3V0IHRvIHlvdXIgd29ya2luZyB0cmVlIGZpbGUsIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBtYW51YWxseQorcmVzb2x2ZSBpdC4gIE5vdGUgdGhhdCAnZ2l0IHJlcmVyZScgbGVhdmVzIHRoZSBpbmRleCBmaWxlIGFsb25lLAorc28geW91IHN0aWxsIG5lZWQgdG8gZG8gdGhlIGZpbmFsIHNhbml0eSBjaGVja3Mgd2l0aCBgZ2l0IGRpZmZgCisob3IgYGdpdCBkaWZmIC1jYCkgYW5kICdnaXQgYWRkJyB3aGVuIHlvdSBhcmUgc2F0aXNmaWVkLgorCitBcyBhIGNvbnZlbmllbmNlIG1lYXN1cmUsICdnaXQgbWVyZ2UnIGF1dG9tYXRpY2FsbHkgaW52b2tlcworJ2dpdCByZXJlcmUnIHVwb24gZXhpdGluZyB3aXRoIGEgZmFpbGVkIGF1dG9tZXJnZSBhbmQgJ2dpdCByZXJlcmUnCityZWNvcmRzIHRoZSBoYW5kIHJlc29sdmUgd2hlbiBpdCBpcyBhIG5ldyBjb25mbGljdCwgb3IgcmV1c2VzIHRoZSBlYXJsaWVyIGhhbmQKK3Jlc29sdmUgd2hlbiBpdCBpcyBub3QuICAnZ2l0IGNvbW1pdCcgYWxzbyBpbnZva2VzICdnaXQgcmVyZXJlJword2hlbiBjb21taXR0aW5nIGEgbWVyZ2UgcmVzdWx0LiAgV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgeW91IGRvCitub3QgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsIHlvdXJzZWxmIChiZXNpZGVzIGVuYWJsaW5nCit0aGUgcmVyZXJlLmVuYWJsZWQgY29uZmlnIHZhcmlhYmxlKS4KKworSW4gb3VyIGV4YW1wbGUsIHdoZW4geW91IGRvIHRoZSB0ZXN0IG1lcmdlLCB0aGUgbWFudWFsCityZXNvbHV0aW9uIGlzIHJlY29yZGVkLCBhbmQgaXQgd2lsbCBiZSByZXVzZWQgd2hlbiB5b3UgZG8gdGhlCithY3R1YWwgbWVyZ2UgbGF0ZXIgd2l0aCB0aGUgdXBkYXRlZCBtYXN0ZXIgYW5kIHRvcGljIGJyYW5jaCwgYXMgbG9uZworYXMgdGhlIHJlY29yZGVkIHJlc29sdXRpb24gaXMgc3RpbGwgYXBwbGljYWJsZS4KKworVGhlIGluZm9ybWF0aW9uICdnaXQgcmVyZXJlJyByZWNvcmRzIGlzIGFsc28gdXNlZCB3aGVuIHJ1bm5pbmcKKydnaXQgcmViYXNlJy4gIEFmdGVyIGJsb3dpbmcgYXdheSB0aGUgdGVzdCBtZXJnZSBhbmQgY29udGludWluZworZGV2ZWxvcG1lbnQgb24gdGhlIHRvcGljIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIG8tLS0qLS0tby0tLS0tLS1vLS0tbyB0b3BpYworICAgICAgICAgICAgIC8KKyAgICBvLS0tby0tLW8tLS0qLS0tby0tLW8tLS1vLS0tbyAgIG1hc3RlcgorCisJJCBnaXQgcmViYXNlIG1hc3RlciB0b3BpYworCisJCQkJICBvLS0tKi0tLW8tLS0tLS0tby0tLW8gdG9waWMKKwkJCQkgLworICAgIG8tLS1vLS0tby0tLSotLS1vLS0tby0tLW8tLS1vICAgbWFzdGVyCistLS0tLS0tLS0tLS0KKworeW91IGNvdWxkIHJ1biBgZ2l0IHJlYmFzZSBtYXN0ZXIgdG9waWNgLCB0byBicmluZyB5b3Vyc2VsZgordXAgdG8gZGF0ZSBiZWZvcmUgeW91ciB0b3BpYyBpcyByZWFkeSB0byBiZSBzZW50IHVwc3RyZWFtLgorVGhpcyB3b3VsZCByZXN1bHQgaW4gZmFsbGluZyBiYWNrIHRvIGEgdGhyZWUtd2F5IG1lcmdlLCBhbmQgaXQKK3dvdWxkIGNvbmZsaWN0IHRoZSBzYW1lIHdheSBhcyB0aGUgdGVzdCBtZXJnZSB5b3UgcmVzb2x2ZWQgZWFybGllci4KKydnaXQgcmVyZXJlJyB3aWxsIGJlIHJ1biBieSAnZ2l0IHJlYmFzZScgdG8gaGVscCB5b3UgcmVzb2x2ZSB0aGlzCitjb25mbGljdC4KKworW05PVEVdICdnaXQgcmVyZXJlJyByZWxpZXMgb24gdGhlIGNvbmZsaWN0IG1hcmtlcnMgaW4gdGhlIGZpbGUgdG8KK2RldGVjdCB0aGUgY29uZmxpY3QuICBJZiB0aGUgZmlsZSBhbHJlYWR5IGNvbnRhaW5zIGxpbmVzIHRoYXQgbG9vayB0aGUKK3NhbWUgYXMgbGluZXMgd2l0aCBjb25mbGljdCBtYXJrZXJzLCAnZ2l0IHJlcmVyZScgbWF5IGZhaWwgdG8gcmVjb3JkIGEKK2NvbmZsaWN0IHJlc29sdXRpb24uICBUbyB3b3JrIGFyb3VuZCB0aGlzLCB0aGUgYGNvbmZsaWN0LW1hcmtlci1zaXplYAorc2V0dGluZyBpbiBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gY2FuIGJlIHVzZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMjA4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKQEAgLTAsMCArMSw0OTcgQEAKK2dpdC1yZXNldCgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXNldCAtIFJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXNldCcgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uCisnZ2l0IHJlc2V0JyBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0KKydnaXQgcmVzZXQnICgtLXBhdGNoIHwgLXApIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXQorJ2dpdCByZXNldCcgWy0tc29mdCB8IC0tbWl4ZWQgWy1OXSB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0luIHRoZSBmaXJzdCB0aHJlZSBmb3JtcywgY29weSBlbnRyaWVzIGZyb20gYDx0cmVlLWlzaD5gIHRvIHRoZSBpbmRleC4KK0luIHRoZSBsYXN0IGZvcm0sIHNldCB0aGUgY3VycmVudCBicmFuY2ggaGVhZCAoYEhFQURgKSB0byBgPGNvbW1pdD5gLAorb3B0aW9uYWxseSBtb2RpZnlpbmcgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSB0byBtYXRjaC4KK1RoZSBgPHRyZWUtaXNoPmAvYDxjb21taXQ+YCBkZWZhdWx0cyB0byBgSEVBRGAgaW4gYWxsIGZvcm1zLgorCisnZ2l0IHJlc2V0JyBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi46OgorJ2dpdCByZXNldCcgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dOjoKKwlUaGVzZSBmb3JtcyByZXNldCB0aGUgaW5kZXggZW50cmllcyBmb3IgYWxsIHBhdGhzIHRoYXQgbWF0Y2ggdGhlCisJYDxwYXRoc3BlYz5gIHRvIHRoZWlyIHN0YXRlIGF0IGA8dHJlZS1pc2g+YC4gIChJdCBkb2VzIG5vdCBhZmZlY3QKKwl0aGUgd29ya2luZyB0cmVlIG9yIHRoZSBjdXJyZW50IGJyYW5jaC4pCisrCitUaGlzIG1lYW5zIHRoYXQgYGdpdCByZXNldCA8cGF0aHNwZWM+YCBpcyB0aGUgb3Bwb3NpdGUgb2YgYGdpdCBhZGQKKzxwYXRoc3BlYz5gLiBUaGlzIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0bworYGdpdCByZXN0b3JlIFstLXNvdXJjZT08dHJlZS1pc2g+XSAtLXN0YWdlZCA8cGF0aHNwZWM+Li4uYC4KKysKK0FmdGVyIHJ1bm5pbmcgYGdpdCByZXNldCA8cGF0aHNwZWM+YCB0byB1cGRhdGUgdGhlIGluZGV4IGVudHJ5LCB5b3UgY2FuCit1c2UgbGlua2dpdDpnaXQtcmVzdG9yZVsxXSB0byBjaGVjayB0aGUgY29udGVudHMgb3V0IG9mIHRoZSBpbmRleCB0bwordGhlIHdvcmtpbmcgdHJlZS4gQWx0ZXJuYXRpdmVseSwgdXNpbmcgbGlua2dpdDpnaXQtcmVzdG9yZVsxXQorYW5kIHNwZWNpZnlpbmcgYSBjb21taXQgd2l0aCBgLS1zb3VyY2VgLCB5b3UKK2NhbiBjb3B5IHRoZSBjb250ZW50cyBvZiBhIHBhdGggb3V0IG9mIGEgY29tbWl0IHRvIHRoZSBpbmRleCBhbmQgdG8gdGhlCit3b3JraW5nIHRyZWUgaW4gb25lIGdvLgorCisnZ2l0IHJlc2V0JyAoLS1wYXRjaCB8IC1wKSBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl06OgorCUludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGluIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4CisJYW5kIGA8dHJlZS1pc2g+YCAoZGVmYXVsdHMgdG8gYEhFQURgKS4gIFRoZSBjaG9zZW4gaHVua3MgYXJlIGFwcGxpZWQKKwlpbiByZXZlcnNlIHRvIHRoZSBpbmRleC4KKysKK1RoaXMgbWVhbnMgdGhhdCBgZ2l0IHJlc2V0IC1wYCBpcyB0aGUgb3Bwb3NpdGUgb2YgYGdpdCBhZGQgLXBgLCBpLmUuCit5b3UgY2FuIHVzZSBpdCB0byBzZWxlY3RpdmVseSByZXNldCBodW5rcy4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJworc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlIGAtLXBhdGNoYCBtb2RlLgorCisnZ2l0IHJlc2V0JyBbPG1vZGU+XSBbPGNvbW1pdD5dOjoKKwlUaGlzIGZvcm0gcmVzZXRzIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIHRvIGA8Y29tbWl0PmAgYW5kCisJcG9zc2libHkgdXBkYXRlcyB0aGUgaW5kZXggKHJlc2V0dGluZyBpdCB0byB0aGUgdHJlZSBvZiBgPGNvbW1pdD5gKSBhbmQKKwl0aGUgd29ya2luZyB0cmVlIGRlcGVuZGluZyBvbiBgPG1vZGU+YC4gSWYgYDxtb2RlPmAgaXMgb21pdHRlZCwKKwlkZWZhdWx0cyB0byBgLS1taXhlZGAuIFRoZSBgPG1vZGU+YCBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworLS0KKy0tc29mdDo6CisJRG9lcyBub3QgdG91Y2ggdGhlIGluZGV4IGZpbGUgb3IgdGhlIHdvcmtpbmcgdHJlZSBhdCBhbGwgKGJ1dAorCXJlc2V0cyB0aGUgaGVhZCB0byBgPGNvbW1pdD5gLCBqdXN0IGxpa2UgYWxsIG1vZGVzIGRvKS4gVGhpcyBsZWF2ZXMKKwlhbGwgeW91ciBjaGFuZ2VkIGZpbGVzICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZCIsIGFzIGBnaXQgc3RhdHVzYAorCXdvdWxkIHB1dCBpdC4KKworLS1taXhlZDo6CisJUmVzZXRzIHRoZSBpbmRleCBidXQgbm90IHRoZSB3b3JraW5nIHRyZWUgKGkuZS4sIHRoZSBjaGFuZ2VkIGZpbGVzCisJYXJlIHByZXNlcnZlZCBidXQgbm90IG1hcmtlZCBmb3IgY29tbWl0KSBhbmQgcmVwb3J0cyB3aGF0IGhhcyBub3QKKwliZWVuIHVwZGF0ZWQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYWN0aW9uLgorKworSWYgYC1OYCBpcyBzcGVjaWZpZWQsIHJlbW92ZWQgcGF0aHMgYXJlIG1hcmtlZCBhcyBpbnRlbnQtdG8tYWRkIChzZWUKK2xpbmtnaXQ6Z2l0LWFkZFsxXSkuCisKKy0taGFyZDo6CisJUmVzZXRzIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlLiBBbnkgY2hhbmdlcyB0byB0cmFja2VkIGZpbGVzIGluIHRoZQorCXdvcmtpbmcgdHJlZSBzaW5jZSBgPGNvbW1pdD5gIGFyZSBkaXNjYXJkZWQuCisKKy0tbWVyZ2U6OgorCVJlc2V0cyB0aGUgaW5kZXggYW5kIHVwZGF0ZXMgdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCBhcmUKKwlkaWZmZXJlbnQgYmV0d2VlbiBgPGNvbW1pdD5gIGFuZCBgSEVBRGAsIGJ1dCBrZWVwcyB0aG9zZSB3aGljaCBhcmUKKwlkaWZmZXJlbnQgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSAoaS5lLiB3aGljaCBoYXZlIGNoYW5nZXMKKwl3aGljaCBoYXZlIG5vdCBiZWVuIGFkZGVkKS4KKwlJZiBhIGZpbGUgdGhhdCBpcyBkaWZmZXJlbnQgYmV0d2VlbiBgPGNvbW1pdD5gIGFuZCB0aGUgaW5kZXggaGFzCisJdW5zdGFnZWQgY2hhbmdlcywgcmVzZXQgaXMgYWJvcnRlZC4KKysKK0luIG90aGVyIHdvcmRzLCBgLS1tZXJnZWAgZG9lcyBzb21ldGhpbmcgbGlrZSBhIGBnaXQgcmVhZC10cmVlIC11IC1tIDxjb21taXQ+YCwKK2J1dCBjYXJyaWVzIGZvcndhcmQgdW5tZXJnZWQgaW5kZXggZW50cmllcy4KKworLS1rZWVwOjoKKwlSZXNldHMgaW5kZXggZW50cmllcyBhbmQgdXBkYXRlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgYXJlCisJZGlmZmVyZW50IGJldHdlZW4gYDxjb21taXQ+YCBhbmQgYEhFQURgLgorCUlmIGEgZmlsZSB0aGF0IGlzIGRpZmZlcmVudCBiZXR3ZWVuIGA8Y29tbWl0PmAgYW5kIGBIRUFEYCBoYXMgbG9jYWwKKwljaGFuZ2VzLCByZXNldCBpcyBhYm9ydGVkLgorLS0KKworU2VlICJSZXNldCwgcmVzdG9yZSBhbmQgcmV2ZXJ0IiBpbiBsaW5rZ2l0OmdpdFsxXSBmb3IgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSB0aHJlZSBjb21tYW5kcy4KKworCitPUFRJT05TCistLS0tLS0tCisKKy1xOjoKKy0tcXVpZXQ6OgorLS1uby1xdWlldDo6CisJQmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycy4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgc2V0IGJ5IHRoZQorCWByZXNldC5xdWlldGAgY29uZmlnIG9wdGlvbi4gYC0tcXVpZXRgIGFuZCBgLS1uby1xdWlldGAgd2lsbAorCW92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorCistLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT46OgorCVBhdGhzcGVjIGlzIHBhc3NlZCBpbiBgPGZpbGU+YCBpbnN0ZWFkIG9mIGNvbW1hbmRsaW5lIGFyZ3MuIElmCisJYDxmaWxlPmAgaXMgZXhhY3RseSBgLWAgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLiBQYXRoc3BlYworCWVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgTEYgb3IgQ1IvTEYuIFBhdGhzcGVjIGVsZW1lbnRzIGNhbiBiZQorCXF1b3RlZCBhcyBleHBsYWluZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBjb3JlLnF1b3RlUGF0aGAKKwkoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIFNlZSBhbHNvIGAtLXBhdGhzcGVjLWZpbGUtbnVsYCBhbmQKKwlnbG9iYWwgYC0tbGl0ZXJhbC1wYXRoc3BlY3NgLgorCistLXBhdGhzcGVjLWZpbGUtbnVsOjoKKwlPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1wYXRoc3BlYy1mcm9tLWZpbGVgLiBQYXRoc3BlYyBlbGVtZW50cyBhcmUKKwlzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIGFuZCBhbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgdGFrZW4KKwlsaXRlcmFsbHkgKGluY2x1ZGluZyBuZXdsaW5lcyBhbmQgcXVvdGVzKS4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCis8cGF0aHNwZWM+Li4uOjoKKwlMaW1pdHMgdGhlIHBhdGhzIGFmZmVjdGVkIGJ5IHRoZSBvcGVyYXRpb24uCisrCitGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlICdwYXRoc3BlYycgZW50cnkgaW4gbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1VuZG8gYWRkOjoKKysKKy0tLS0tLS0tLS0tLQorJCBlZGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxPgorJCBnaXQgYWRkIGZyb3R6LmMgZmlsZnJlLmMKKyQgbWFpbHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IHJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mz4KKyQgZ2l0IHB1bGwgZ2l0Oi8vaW5mby5leGFtcGxlLmNvbS8gbml0Zm9sICA8ND4KKy0tLS0tLS0tLS0tLQorKworPDE+IFlvdSBhcmUgaGFwcGlseSB3b3JraW5nIG9uIHNvbWV0aGluZywgYW5kIGZpbmQgdGhlIGNoYW5nZXMKKyAgICBpbiB0aGVzZSBmaWxlcyBhcmUgaW4gZ29vZCBvcmRlci4gIFlvdSBkbyBub3Qgd2FudCB0byBzZWUgdGhlbQorICAgIHdoZW4geW91IHJ1biBgZ2l0IGRpZmZgLCBiZWNhdXNlIHlvdSBwbGFuIHRvIHdvcmsgb24gb3RoZXIgZmlsZXMKKyAgICBhbmQgY2hhbmdlcyB3aXRoIHRoZXNlIGZpbGVzIGFyZSBkaXN0cmFjdGluZy4KKzwyPiBTb21lYm9keSBhc2tzIHlvdSB0byBwdWxsLCBhbmQgdGhlIGNoYW5nZXMgc291bmQgd29ydGh5IG9mIG1lcmdpbmcuCis8Mz4gSG93ZXZlciwgeW91IGFscmVhZHkgZGlydGllZCB0aGUgaW5kZXggKGkuZS4geW91ciBpbmRleCBkb2VzCisgICAgbm90IG1hdGNoIHRoZSBgSEVBRGAgY29tbWl0KS4gIEJ1dCB5b3Uga25vdyB0aGUgcHVsbCB5b3UgYXJlIGdvaW5nCisgICAgdG8gbWFrZSBkb2VzIG5vdCBhZmZlY3QgYGZyb3R6LmNgIG9yIGBmaWxmcmUuY2AsIHNvIHlvdSByZXZlcnQgdGhlCisgICAgaW5kZXggY2hhbmdlcyBmb3IgdGhlc2UgdHdvIGZpbGVzLiAgWW91ciBjaGFuZ2VzIGluIHdvcmtpbmcgdHJlZQorICAgIHJlbWFpbiB0aGVyZS4KKzw0PiBUaGVuIHlvdSBjYW4gcHVsbCBhbmQgbWVyZ2UsIGxlYXZpbmcgYGZyb3R6LmNgIGFuZCBgZmlsZnJlLmNgCisgICAgY2hhbmdlcyBzdGlsbCBpbiB0aGUgd29ya2luZyB0cmVlLgorCitVbmRvIGEgY29tbWl0IGFuZCByZWRvOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC4uLgorJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReICAgICAgPDE+CiskIGVkaXQgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IGNvbW1pdCAtYSAtYyBPUklHX0hFQUQgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyBpcyBtb3N0IG9mdGVuIGRvbmUgd2hlbiB5b3UgcmVtZW1iZXJlZCB3aGF0IHlvdQorICAgIGp1c3QgY29tbWl0dGVkIGlzIGluY29tcGxldGUsIG9yIHlvdSBtaXNzcGVsbGVkIHlvdXIgY29tbWl0CisgICAgbWVzc2FnZSwgb3IgYm90aC4gIExlYXZlcyB3b3JraW5nIHRyZWUgYXMgaXQgd2FzIGJlZm9yZSAicmVzZXQiLgorPDI+IE1ha2UgY29ycmVjdGlvbnMgdG8gd29ya2luZyB0cmVlIGZpbGVzLgorPDM+ICJyZXNldCIgY29waWVzIHRoZSBvbGQgaGVhZCB0byBgLmdpdC9PUklHX0hFQURgOyByZWRvIHRoZQorICAgIGNvbW1pdCBieSBzdGFydGluZyB3aXRoIGl0cyBsb2cgbWVzc2FnZS4gIElmIHlvdSBkbyBub3QgbmVlZCB0bworICAgIGVkaXQgdGhlIG1lc3NhZ2UgZnVydGhlciwgeW91IGNhbiBnaXZlIGAtQ2Agb3B0aW9uIGluc3RlYWQuCisrCitTZWUgYWxzbyB0aGUgYC0tYW1lbmRgIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1jb21taXRbMV0uCisKK1VuZG8gYSBjb21taXQsIG1ha2luZyBpdCBhIHRvcGljIGJyYW5jaDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCB0b3BpYy93aXAgICAgICAgICAgPDE+CiskIGdpdCByZXNldCAtLWhhcmQgSEVBRH4zICAgICAgIDwyPgorJCBnaXQgc3dpdGNoIHRvcGljL3dpcCAgICAgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IFlvdSBoYXZlIG1hZGUgc29tZSBjb21taXRzLCBidXQgcmVhbGl6ZSB0aGV5IHdlcmUgcHJlbWF0dXJlCisgICAgdG8gYmUgaW4gdGhlIGBtYXN0ZXJgIGJyYW5jaC4gIFlvdSB3YW50IHRvIGNvbnRpbnVlIHBvbGlzaGluZworICAgIHRoZW0gaW4gYSB0b3BpYyBicmFuY2gsIHNvIGNyZWF0ZSBgdG9waWMvd2lwYCBicmFuY2ggb2ZmIG9mIHRoZQorICAgIGN1cnJlbnQgYEhFQURgLgorPDI+IFJld2luZCB0aGUgbWFzdGVyIGJyYW5jaCB0byBnZXQgcmlkIG9mIHRob3NlIHRocmVlIGNvbW1pdHMuCis8Mz4gU3dpdGNoIHRvIGB0b3BpYy93aXBgIGJyYW5jaCBhbmQga2VlcCB3b3JraW5nLgorCitVbmRvIGNvbW1pdHMgcGVybWFuZW50bHk6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLi4uCiskIGdpdCByZXNldCAtLWhhcmQgSEVBRH4zICAgPDE+CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGUgbGFzdCB0aHJlZSBjb21taXRzIChgSEVBRGAsIGBIRUFEXmAsIGFuZCBgSEVBRH4yYCkgd2VyZSBiYWQKKyAgICBhbmQgeW91IGRvIG5vdCB3YW50IHRvIGV2ZXIgc2VlIHRoZW0gYWdhaW4uICBEbyAqbm90KiBkbyB0aGlzIGlmCisgICAgeW91IGhhdmUgYWxyZWFkeSBnaXZlbiB0aGVzZSBjb21taXRzIHRvIHNvbWVib2R5IGVsc2UuICAoU2VlIHRoZQorICAgICJSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXQorICAgIGZvciB0aGUgaW1wbGljYXRpb25zIG9mIGRvaW5nIHNvLikKKworVW5kbyBhIG1lcmdlIG9yIHB1bGw6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsICAgICAgICAgICAgICAgICAgICAgICAgIDwxPgorQXV0by1tZXJnaW5nIG5pdGZvbAorQ09ORkxJQ1QgKGNvbnRlbnQpOiBNZXJnZSBjb25mbGljdCBpbiBuaXRmb2wKK0F1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuCiskIGdpdCByZXNldCAtLWhhcmQgICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgcHVsbCAuIHRvcGljL2JyYW5jaCAgICAgICAgICA8Mz4KK1VwZGF0aW5nIGZyb20gNDEyMjMuLi4gdG8gMTMxMzQuLi4KK0Zhc3QtZm9yd2FyZAorJCBnaXQgcmVzZXQgLS1oYXJkIE9SSUdfSEVBRCAgICAgICA8ND4KKy0tLS0tLS0tLS0tLQorKworPDE+IFRyeSB0byB1cGRhdGUgZnJvbSB0aGUgdXBzdHJlYW0gcmVzdWx0ZWQgaW4gYSBsb3Qgb2YKKyAgICBjb25mbGljdHM7IHlvdSB3ZXJlIG5vdCByZWFkeSB0byBzcGVuZCBhIGxvdCBvZiB0aW1lIG1lcmdpbmcKKyAgICByaWdodCBub3csIHNvIHlvdSBkZWNpZGUgdG8gZG8gdGhhdCBsYXRlci4KKzwyPiAicHVsbCIgaGFzIG5vdCBtYWRlIG1lcmdlIGNvbW1pdCwgc28gYGdpdCByZXNldCAtLWhhcmRgCisgICAgd2hpY2ggaXMgYSBzeW5vbnltIGZvciBgZ2l0IHJlc2V0IC0taGFyZCBIRUFEYCBjbGVhcnMgdGhlIG1lc3MKKyAgICBmcm9tIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUgd29ya2luZyB0cmVlLgorPDM+IE1lcmdlIGEgdG9waWMgYnJhbmNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLCB3aGljaCByZXN1bHRlZAorICAgIGluIGEgZmFzdC1mb3J3YXJkLgorPDQ+IEJ1dCB5b3UgZGVjaWRlZCB0aGF0IHRoZSB0b3BpYyBicmFuY2ggaXMgbm90IHJlYWR5IGZvciBwdWJsaWMKKyAgICBjb25zdW1wdGlvbiB5ZXQuICAicHVsbCIgb3IgIm1lcmdlIiBhbHdheXMgbGVhdmVzIHRoZSBvcmlnaW5hbAorICAgIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggaW4gYE9SSUdfSEVBRGAsIHNvIHJlc2V0dGluZyBoYXJkIHRvIGl0CisgICAgYnJpbmdzIHlvdXIgaW5kZXggZmlsZSBhbmQgdGhlIHdvcmtpbmcgdHJlZSBiYWNrIHRvIHRoYXQgc3RhdGUsCisgICAgYW5kIHJlc2V0cyB0aGUgdGlwIG9mIHRoZSBicmFuY2ggdG8gdGhhdCBjb21taXQuCisKK1VuZG8gYSBtZXJnZSBvciBwdWxsIGluc2lkZSBhIGRpcnR5IHdvcmtpbmcgdHJlZTo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CitBdXRvLW1lcmdpbmcgbml0Zm9sCitNZXJnZSBtYWRlIGJ5IHJlY3Vyc2l2ZS4KKyBuaXRmb2wgICAgICAgICAgICAgICAgfCAgIDIwICsrKysrLS0tLQorIC4uLgorJCBnaXQgcmVzZXQgLS1tZXJnZSBPUklHX0hFQUQgICAgICA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IEV2ZW4gaWYgeW91IG1heSBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnMgaW4geW91cgorICAgIHdvcmtpbmcgdHJlZSwgeW91IGNhbiBzYWZlbHkgc2F5IGBnaXQgcHVsbGAgd2hlbiB5b3Uga25vdworICAgIHRoYXQgdGhlIGNoYW5nZSBpbiB0aGUgb3RoZXIgYnJhbmNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aAorICAgIHRoZW0uCis8Mj4gQWZ0ZXIgaW5zcGVjdGluZyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSwgeW91IG1heSBmaW5kCisgICAgdGhhdCB0aGUgY2hhbmdlIGluIHRoZSBvdGhlciBicmFuY2ggaXMgdW5zYXRpc2ZhY3RvcnkuICBSdW5uaW5nCisgICAgYGdpdCByZXNldCAtLWhhcmQgT1JJR19IRUFEYCB3aWxsIGxldCB5b3UgZ28gYmFjayB0byB3aGVyZSB5b3UKKyAgICB3ZXJlLCBidXQgaXQgd2lsbCBkaXNjYXJkIHlvdXIgbG9jYWwgY2hhbmdlcywgd2hpY2ggeW91IGRvIG5vdAorICAgIHdhbnQuICBgZ2l0IHJlc2V0IC0tbWVyZ2VgIGtlZXBzIHlvdXIgbG9jYWwgY2hhbmdlcy4KKworCitJbnRlcnJ1cHRlZCB3b3JrZmxvdzo6CisrCitTdXBwb3NlIHlvdSBhcmUgaW50ZXJydXB0ZWQgYnkgYW4gdXJnZW50IGZpeCByZXF1ZXN0IHdoaWxlIHlvdQorYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBsYXJnZSBjaGFuZ2UuICBUaGUgZmlsZXMgaW4geW91cgord29ya2luZyB0cmVlIGFyZSBub3QgaW4gYW55IHNoYXBlIHRvIGJlIGNvbW1pdHRlZCB5ZXQsIGJ1dCB5b3UKK25lZWQgdG8gZ2V0IHRvIHRoZSBvdGhlciBicmFuY2ggZm9yIGEgcXVpY2sgYnVnZml4LgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggZmVhdHVyZSAgOyMgeW91IHdlcmUgd29ya2luZyBpbiAiZmVhdHVyZSIgYnJhbmNoIGFuZAorJCB3b3JrIHdvcmsgd29yayAgICAgIDsjIGdvdCBpbnRlcnJ1cHRlZAorJCBnaXQgY29tbWl0IC1hIC1tICJzbmFwc2hvdCBXSVAiICAgICAgICAgICAgICAgICA8MT4KKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKKyQgZml4IGZpeCBmaXgKKyQgZ2l0IGNvbW1pdCA7IyBjb21taXQgd2l0aCByZWFsIGxvZworJCBnaXQgc3dpdGNoIGZlYXR1cmUKKyQgZ2l0IHJlc2V0IC0tc29mdCBIRUFEXiA7IyBnbyBiYWNrIHRvIFdJUCBzdGF0ZSAgPDI+CiskIGdpdCByZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyBjb21taXQgd2lsbCBnZXQgYmxvd24gYXdheSBzbyBhIHRocm93LWF3YXkgbG9nIG1lc3NhZ2UgaXMgT0suCis8Mj4gVGhpcyByZW1vdmVzIHRoZSAnV0lQJyBjb21taXQgZnJvbSB0aGUgY29tbWl0IGhpc3RvcnksIGFuZCBzZXRzCisgICAgeW91ciB3b3JraW5nIHRyZWUgdG8gdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHlvdSBtYWRlIHRoYXQgc25hcHNob3QuCis8Mz4gQXQgdGhpcyBwb2ludCB0aGUgaW5kZXggZmlsZSBzdGlsbCBoYXMgYWxsIHRoZSBXSVAgY2hhbmdlcyB5b3UKKyAgICBjb21taXR0ZWQgYXMgJ3NuYXBzaG90IFdJUCcuICBUaGlzIHVwZGF0ZXMgdGhlIGluZGV4IHRvIHNob3cgeW91cgorICAgIFdJUCBmaWxlcyBhcyB1bmNvbW1pdHRlZC4KKysKK1NlZSBhbHNvIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLgorCitSZXNldCBhIHNpbmdsZSBmaWxlIGluIHRoZSBpbmRleDo6CisrCitTdXBwb3NlIHlvdSBoYXZlIGFkZGVkIGEgZmlsZSB0byB5b3VyIGluZGV4LCBidXQgbGF0ZXIgZGVjaWRlIHlvdSBkbyBub3QKK3dhbnQgdG8gYWRkIGl0IHRvIHlvdXIgY29tbWl0LiBZb3UgY2FuIHJlbW92ZSB0aGUgZmlsZSBmcm9tIHRoZSBpbmRleAord2hpbGUga2VlcGluZyB5b3VyIGNoYW5nZXMgd2l0aCBnaXQgcmVzZXQuCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc2V0IC0tIGZyb3R6LmMgICAgICAgICAgICAgICAgICAgICAgPDE+CiskIGdpdCBjb21taXQgLW0gIkNvbW1pdCBmaWxlcyBpbiBpbmRleCIgICAgIDwyPgorJCBnaXQgYWRkIGZyb3R6LmMgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IFRoaXMgcmVtb3ZlcyB0aGUgZmlsZSBmcm9tIHRoZSBpbmRleCB3aGlsZSBrZWVwaW5nIGl0IGluIHRoZSB3b3JraW5nCisgICAgZGlyZWN0b3J5LgorPDI+IFRoaXMgY29tbWl0cyBhbGwgb3RoZXIgY2hhbmdlcyBpbiB0aGUgaW5kZXguCis8Mz4gQWRkcyB0aGUgZmlsZSB0byB0aGUgaW5kZXggYWdhaW4uCisKK0tlZXAgY2hhbmdlcyBpbiB3b3JraW5nIHRyZWUgd2hpbGUgZGlzY2FyZGluZyBzb21lIHByZXZpb3VzIGNvbW1pdHM6OgorKworU3VwcG9zZSB5b3UgYXJlIHdvcmtpbmcgb24gc29tZXRoaW5nIGFuZCB5b3UgY29tbWl0IGl0LCBhbmQgdGhlbiB5b3UKK2NvbnRpbnVlIHdvcmtpbmcgYSBiaXQgbW9yZSwgYnV0IG5vdyB5b3UgdGhpbmsgdGhhdCB3aGF0IHlvdSBoYXZlIGluCit5b3VyIHdvcmtpbmcgdHJlZSBzaG91bGQgYmUgaW4gYW5vdGhlciBicmFuY2ggdGhhdCBoYXMgbm90aGluZyB0byBkbword2l0aCB3aGF0IHlvdSBjb21taXR0ZWQgcHJldmlvdXNseS4gWW91IGNhbiBzdGFydCBhIG5ldyBicmFuY2ggYW5kCityZXNldCBpdCB3aGlsZSBrZWVwaW5nIHRoZSBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLgorKworLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgc3RhcnQKKyQgZ2l0IHN3aXRjaCAtYyBicmFuY2gxCiskIGVkaXQKKyQgZ2l0IGNvbW1pdCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CiskIGVkaXQKKyQgZ2l0IHN3aXRjaCAtYyBicmFuY2gyICAgICAgICAgICAgICAgICAgICAgPDI+CiskIGdpdCByZXNldCAtLWtlZXAgc3RhcnQgICAgICAgICAgICAgICAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyBjb21taXRzIHlvdXIgZmlyc3QgZWRpdHMgaW4gYGJyYW5jaDFgLgorPDI+IEluIHRoZSBpZGVhbCB3b3JsZCwgeW91IGNvdWxkIGhhdmUgcmVhbGl6ZWQgdGhhdCB0aGUgZWFybGllcgorICAgIGNvbW1pdCBkaWQgbm90IGJlbG9uZyB0byB0aGUgbmV3IHRvcGljIHdoZW4geW91IGNyZWF0ZWQgYW5kIHN3aXRjaGVkCisgICAgdG8gYGJyYW5jaDJgIChpLmUuIGBnaXQgc3dpdGNoIC1jIGJyYW5jaDIgc3RhcnRgKSwgYnV0IG5vYm9keSBpcworICAgIHBlcmZlY3QuCis8Mz4gQnV0IHlvdSBjYW4gdXNlIGByZXNldCAtLWtlZXBgIHRvIHJlbW92ZSB0aGUgdW53YW50ZWQgY29tbWl0IGFmdGVyCisgICAgeW91IHN3aXRjaGVkIHRvIGBicmFuY2gyYC4KKworU3BsaXQgYSBjb21taXQgYXBhcnQgaW50byBhIHNlcXVlbmNlIG9mIGNvbW1pdHM6OgorKworU3VwcG9zZSB0aGF0IHlvdSBoYXZlIGNyZWF0ZWQgbG90cyBvZiBsb2dpY2FsbHkgc2VwYXJhdGUgY2hhbmdlcyBhbmQgY29tbWl0dGVkCit0aGVtIHRvZ2V0aGVyLiBUaGVuLCBsYXRlciB5b3UgZGVjaWRlIHRoYXQgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgZWFjaAorbG9naWNhbCBjaHVuayBhc3NvY2lhdGVkIHdpdGggaXRzIG93biBjb21taXQuIFlvdSBjYW4gdXNlIGdpdCByZXNldCB0byByZXdpbmQKK2hpc3Rvcnkgd2l0aG91dCBjaGFuZ2luZyB0aGUgY29udGVudHMgb2YgeW91ciBsb2NhbCBmaWxlcywgYW5kIHRoZW4gc3VjY2Vzc2l2ZWx5Cit1c2UgYGdpdCBhZGQgLXBgIHRvIGludGVyYWN0aXZlbHkgc2VsZWN0IHdoaWNoIGh1bmtzIHRvIGluY2x1ZGUgaW50byBlYWNoIGNvbW1pdCwKK3VzaW5nIGBnaXQgY29tbWl0IC1jYCB0byBwcmUtcG9wdWxhdGUgdGhlIGNvbW1pdCBtZXNzYWdlLgorKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldCAtTiBIRUFEXiAgICAgICAgICAgICAgICAgICAgICAgIDwxPgorJCBnaXQgYWRkIC1wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IGRpZmYgLS1jYWNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgPDM+CiskIGdpdCBjb21taXQgLWMgSEVBREB7MX0gICAgICAgICAgICAgICAgICAgIDw0PgorLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8NT4KKyQgZ2l0IGFkZCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDY+CiskIGdpdCBkaWZmIC0tY2FjaGVkICAgICAgICAgICAgICAgICAgICAgICAgIDw3PgorJCBnaXQgY29tbWl0IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8OD4KKy0tLS0tLS0tLS0tLQorKworPDE+IEZpcnN0LCByZXNldCB0aGUgaGlzdG9yeSBiYWNrIG9uZSBjb21taXQgc28gdGhhdCB3ZSByZW1vdmUgdGhlIG9yaWdpbmFsCisgICAgY29tbWl0LCBidXQgbGVhdmUgdGhlIHdvcmtpbmcgdHJlZSB3aXRoIGFsbCB0aGUgY2hhbmdlcy4gVGhlIC1OIGVuc3VyZXMKKyAgICB0aGF0IGFueSBuZXcgZmlsZXMgYWRkZWQgd2l0aCBgSEVBRGAgYXJlIHN0aWxsIG1hcmtlZCBzbyB0aGF0IGBnaXQgYWRkIC1wYAorICAgIHdpbGwgZmluZCB0aGVtLgorPDI+IE5leHQsIHdlIGludGVyYWN0aXZlbHkgc2VsZWN0IGRpZmYgaHVua3MgdG8gYWRkIHVzaW5nIHRoZSBgZ2l0IGFkZCAtcGAKKyAgICBmYWNpbGl0eS4gVGhpcyB3aWxsIGFzayB5b3UgYWJvdXQgZWFjaCBkaWZmIGh1bmsgaW4gc2VxdWVuY2UgYW5kIHlvdSBjYW4KKyAgICB1c2Ugc2ltcGxlIGNvbW1hbmRzIHN1Y2ggYXMgInllcywgaW5jbHVkZSB0aGlzIiwgIk5vIGRvbid0IGluY2x1ZGUgdGhpcyIKKyAgICBvciBldmVuIHRoZSB2ZXJ5IHBvd2VyZnVsICJlZGl0IiBmYWNpbGl0eS4KKzwzPiBPbmNlIHNhdGlzZmllZCB3aXRoIHRoZSBodW5rcyB5b3Ugd2FudCB0byBpbmNsdWRlLCB5b3Ugc2hvdWxkIHZlcmlmeSB3aGF0CisgICAgaGFzIGJlZW4gcHJlcGFyZWQgZm9yIHRoZSBmaXJzdCBjb21taXQgYnkgdXNpbmcgYGdpdCBkaWZmIC0tY2FjaGVkYC4gVGhpcworICAgIHNob3dzIGFsbCB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtb3ZlZCBpbnRvIHRoZSBpbmRleCBhbmQgYXJlIGFib3V0CisgICAgdG8gYmUgY29tbWl0dGVkLgorPDQ+IE5leHQsIGNvbW1pdCB0aGUgY2hhbmdlcyBzdG9yZWQgaW4gdGhlIGluZGV4LiBUaGUgYC1jYCBvcHRpb24gc3BlY2lmaWVzIHRvCisgICAgcHJlLXBvcHVsYXRlIHRoZSBjb21taXQgbWVzc2FnZSBmcm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHRoYXQgeW91IHN0YXJ0ZWQKKyAgICB3aXRoIGluIHRoZSBmaXJzdCBjb21taXQuIFRoaXMgaXMgaGVscGZ1bCB0byBhdm9pZCByZXR5cGluZyBpdC4gVGhlCisgICAgYEhFQURAezF9YCBpcyBhIHNwZWNpYWwgbm90YXRpb24gZm9yIHRoZSBjb21taXQgdGhhdCBgSEVBRGAgdXNlZCB0byBiZSBhdAorICAgIHByaW9yIHRvIHRoZSBvcmlnaW5hbCByZXNldCBjb21taXQgKDEgY2hhbmdlIGFnbykuCisgICAgU2VlIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXSBmb3IgbW9yZSBkZXRhaWxzLiBZb3UgbWF5IGFsc28gdXNlIGFueSBvdGhlcgorICAgIHZhbGlkIGNvbW1pdCByZWZlcmVuY2UuCis8NT4gWW91IGNhbiByZXBlYXQgc3RlcHMgMi00IG11bHRpcGxlIHRpbWVzIHRvIGJyZWFrIHRoZSBvcmlnaW5hbCBjb2RlIGludG8KKyAgICBhbnkgbnVtYmVyIG9mIGNvbW1pdHMuCis8Nj4gTm93IHlvdSd2ZSBzcGxpdCBvdXQgbWFueSBvZiB0aGUgY2hhbmdlcyBpbnRvIHRoZWlyIG93biBjb21taXRzLCBhbmQgbWlnaHQKKyAgICBubyBsb25nZXIgdXNlIHRoZSBwYXRjaCBtb2RlIG9mIGBnaXQgYWRkYCwgaW4gb3JkZXIgdG8gc2VsZWN0IGFsbCByZW1haW5pbmcKKyAgICB1bmNvbW1pdHRlZCBjaGFuZ2VzLgorPDc+IE9uY2UgYWdhaW4sIGNoZWNrIHRvIHZlcmlmeSB0aGF0IHlvdSd2ZSBpbmNsdWRlZCB3aGF0IHlvdSB3YW50IHRvLiBZb3UgbWF5CisgICAgYWxzbyB3aXNoIHRvIHZlcmlmeSB0aGF0IGdpdCBkaWZmIGRvZXNuJ3Qgc2hvdyBhbnkgcmVtYWluaW5nIGNoYW5nZXMgdG8gYmUKKyAgICBjb21taXR0ZWQgbGF0ZXIuCis8OD4gQW5kIGZpbmFsbHkgY3JlYXRlIHRoZSBmaW5hbCBjb21taXQuCisKKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitUaGUgdGFibGVzIGJlbG93IHNob3cgd2hhdCBoYXBwZW5zIHdoZW4gcnVubmluZzoKKworLS0tLS0tLS0tLQorZ2l0IHJlc2V0IC0tb3B0aW9uIHRhcmdldAorLS0tLS0tLS0tLQorCit0byByZXNldCB0aGUgYEhFQURgIHRvIGFub3RoZXIgY29tbWl0IChgdGFyZ2V0YCkgd2l0aCB0aGUgZGlmZmVyZW50CityZXNldCBvcHRpb25zIGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIGZpbGVzLgorCitJbiB0aGVzZSB0YWJsZXMsIGBBYCwgYEJgLCBgQ2AgYW5kIGBEYCBhcmUgc29tZSBkaWZmZXJlbnQgc3RhdGVzIG9mIGEKK2ZpbGUuIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlyc3QgdGFibGUgbWVhbnMgdGhhdCBpZiBhCitmaWxlIGlzIGluIHN0YXRlIGBBYCBpbiB0aGUgd29ya2luZyB0cmVlLCBpbiBzdGF0ZSBgQmAgaW4gdGhlIGluZGV4LCBpbgorc3RhdGUgYENgIGluIGBIRUFEYCBhbmQgaW4gc3RhdGUgYERgIGluIHRoZSB0YXJnZXQsIHRoZW4gYGdpdCByZXNldCAtLXNvZnQKK3RhcmdldGAgd2lsbCBsZWF2ZSB0aGUgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlIGluIHN0YXRlIGBBYCBhbmQgaW4gdGhlCitpbmRleCBpbiBzdGF0ZSBgQmAuICBJdCByZXNldHMgKGkuZS4gbW92ZXMpIHRoZSBgSEVBRGAgKGkuZS4gdGhlIHRpcCBvZgordGhlIGN1cnJlbnQgYnJhbmNoLCBpZiB5b3UgYXJlIG9uIG9uZSkgdG8gYHRhcmdldGAgKHdoaWNoIGhhcyB0aGUgZmlsZQoraW4gc3RhdGUgYERgKS4KKworLi4uLgord29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEEgICAgICAgQiAgICAgQyAgICBEICAgICAtLXNvZnQgICBBICAgICAgIEIgICAgIEQKKwkJCSAgLS1taXhlZCAgQSAgICAgICBEICAgICBECisJCQkgIC0taGFyZCAgIEQgICAgICAgRCAgICAgRAorCQkJICAtLW1lcmdlIChkaXNhbGxvd2VkKQorCQkJICAtLWtlZXAgIChkaXNhbGxvd2VkKQorLi4uLgorCisuLi4uCit3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQSAgICAgICBCICAgICBDICAgIEMgICAgIC0tc29mdCAgIEEgICAgICAgQiAgICAgQworCQkJICAtLW1peGVkICBBICAgICAgIEMgICAgIEMKKwkJCSAgLS1oYXJkICAgQyAgICAgICBDICAgICBDCisJCQkgIC0tbWVyZ2UgKGRpc2FsbG93ZWQpCisJCQkgIC0ta2VlcCAgIEEgICAgICAgQyAgICAgQworLi4uLgorCisuLi4uCit3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQiAgICAgICBCICAgICBDICAgIEQgICAgIC0tc29mdCAgIEIgICAgICAgQiAgICAgRAorCQkJICAtLW1peGVkICBCICAgICAgIEQgICAgIEQKKwkJCSAgLS1oYXJkICAgRCAgICAgICBEICAgICBECisJCQkgIC0tbWVyZ2UgIEQgICAgICAgRCAgICAgRAorCQkJICAtLWtlZXAgIChkaXNhbGxvd2VkKQorLi4uLgorCisuLi4uCit3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQiAgICAgICBCICAgICBDICAgIEMgICAgIC0tc29mdCAgIEIgICAgICAgQiAgICAgQworCQkJICAtLW1peGVkICBCICAgICAgIEMgICAgIEMKKwkJCSAgLS1oYXJkICAgQyAgICAgICBDICAgICBDCisJCQkgIC0tbWVyZ2UgIEMgICAgICAgQyAgICAgQworCQkJICAtLWtlZXAgICBCICAgICAgIEMgICAgIEMKKy4uLi4KKworLi4uLgord29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEIgICAgICAgQyAgICAgQyAgICBEICAgICAtLXNvZnQgICBCICAgICAgIEMgICAgIEQKKwkJCSAgLS1taXhlZCAgQiAgICAgICBEICAgICBECisJCQkgIC0taGFyZCAgIEQgICAgICAgRCAgICAgRAorCQkJICAtLW1lcmdlIChkaXNhbGxvd2VkKQorCQkJICAtLWtlZXAgIChkaXNhbGxvd2VkKQorLi4uLgorCisuLi4uCit3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQiAgICAgICBDICAgICBDICAgIEMgICAgIC0tc29mdCAgIEIgICAgICAgQyAgICAgQworCQkJICAtLW1peGVkICBCICAgICAgIEMgICAgIEMKKwkJCSAgLS1oYXJkICAgQyAgICAgICBDICAgICBDCisJCQkgIC0tbWVyZ2UgIEIgICAgICAgQyAgICAgQworCQkJICAtLWtlZXAgICBCICAgICAgIEMgICAgIEMKKy4uLi4KKworYHJlc2V0IC0tbWVyZ2VgIGlzIG1lYW50IHRvIGJlIHVzZWQgd2hlbiByZXNldHRpbmcgb3V0IG9mIGEgY29uZmxpY3RlZAorbWVyZ2UuIEFueSBtZXJneSBvcGVyYXRpb24gZ3VhcmFudGVlcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0IGlzCitpbnZvbHZlZCBpbiB0aGUgbWVyZ2UgZG9lcyBub3QgaGF2ZSBhIGxvY2FsIGNoYW5nZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGluZGV4CitiZWZvcmUgaXQgc3RhcnRzLCBhbmQgdGhhdCBpdCB3cml0ZXMgdGhlIHJlc3VsdCBvdXQgdG8gdGhlIHdvcmtpbmcgdHJlZS4gU28gaWYKK3dlIHNlZSBzb21lIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHRoZSB0YXJnZXQgYW5kIGFsc28KK2JldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlLCB0aGVuIGl0IG1lYW5zIHRoYXQgd2UgYXJlIG5vdAorcmVzZXR0aW5nIG91dCBmcm9tIGEgc3RhdGUgdGhhdCBhIG1lcmd5IG9wZXJhdGlvbiBsZWZ0IGFmdGVyIGZhaWxpbmcKK3dpdGggYSBjb25mbGljdC4gVGhhdCBpcyB3aHkgd2UgZGlzYWxsb3cgYC0tbWVyZ2VgIG9wdGlvbiBpbiB0aGlzIGNhc2UuCisKK2ByZXNldCAtLWtlZXBgIGlzIG1lYW50IHRvIGJlIHVzZWQgd2hlbiByZW1vdmluZyBzb21lIG9mIHRoZSBsYXN0Citjb21taXRzIGluIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBrZWVwaW5nIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcKK3RyZWUuIElmIHRoZXJlIGNvdWxkIGJlIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBjaGFuZ2VzIGluIHRoZSBjb21taXQgd2UKK3dhbnQgdG8gcmVtb3ZlIGFuZCB0aGUgY2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlIHdlIHdhbnQgdG8ga2VlcCwKK3RoZSByZXNldCBpcyBkaXNhbGxvd2VkLiBUaGF0J3Mgd2h5IGl0IGlzIGRpc2FsbG93ZWQgaWYgdGhlcmUgYXJlIGJvdGgKK2NoYW5nZXMgYmV0d2VlbiB0aGUgd29ya2luZyB0cmVlIGFuZCBgSEVBRGAsIGFuZCBiZXR3ZWVuIGBIRUFEYCBhbmQgdGhlCit0YXJnZXQuIFRvIGJlIHNhZmUsIGl0IGlzIGFsc28gZGlzYWxsb3dlZCB3aGVuIHRoZXJlIGFyZSB1bm1lcmdlZAorZW50cmllcy4KKworVGhlIGZvbGxvd2luZyB0YWJsZXMgc2hvdyB3aGF0IGhhcHBlbnMgd2hlbiB0aGVyZSBhcmUgdW5tZXJnZWQKK2VudHJpZXM6CisKKy4uLi4KK3dvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBYICAgICAgIFUgICAgIEEgICAgQiAgICAgLS1zb2Z0ICAoZGlzYWxsb3dlZCkKKwkJCSAgLS1taXhlZCAgWCAgICAgICBCICAgICBCCisJCQkgIC0taGFyZCAgIEIgICAgICAgQiAgICAgQgorCQkJICAtLW1lcmdlICBCICAgICAgIEIgICAgIEIKKwkJCSAgLS1rZWVwICAoZGlzYWxsb3dlZCkKKy4uLi4KKworLi4uLgord29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFggICAgICAgVSAgICAgQSAgICBBICAgICAtLXNvZnQgIChkaXNhbGxvd2VkKQorCQkJICAtLW1peGVkICBYICAgICAgIEEgICAgIEEKKwkJCSAgLS1oYXJkICAgQSAgICAgICBBICAgICBBCisJCQkgIC0tbWVyZ2UgIEEgICAgICAgQSAgICAgQQorCQkJICAtLWtlZXAgIChkaXNhbGxvd2VkKQorLi4uLgorCitgWGAgbWVhbnMgYW55IHN0YXRlIGFuZCBgVWAgbWVhbnMgYW4gdW5tZXJnZWQgaW5kZXguCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzdG9yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXN0b3JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmY2MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzdG9yZS50eHQKQEAgLTAsMCArMSwyMDcgQEAKK2dpdC1yZXN0b3JlKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVzdG9yZSAtIFJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXN0b3JlJyBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PHRyZWU+XSBbLS1zdGFnZWRdIFstLXdvcmt0cmVlXSBbLS1dIDxwYXRoc3BlYz4uLi4KKydnaXQgcmVzdG9yZScgWzxvcHRpb25zPl0gWy0tc291cmNlPTx0cmVlPl0gWy0tc3RhZ2VkXSBbLS13b3JrdHJlZV0gLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXQorJ2dpdCByZXN0b3JlJyAoLXB8LS1wYXRjaCkgWzxvcHRpb25zPl0gWy0tc291cmNlPTx0cmVlPl0gWy0tc3RhZ2VkXSBbLS13b3JrdHJlZV0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZXN0b3JlIHNwZWNpZmllZCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIHdpdGggc29tZSBjb250ZW50cyBmcm9tIGEKK3Jlc3RvcmUgc291cmNlLiBJZiBhIHBhdGggaXMgdHJhY2tlZCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHJlc3RvcmUKK3NvdXJjZSwgaXQgd2lsbCBiZSByZW1vdmVkIHRvIG1hdGNoIHRoZSBzb3VyY2UuCisKK1RoZSBjb21tYW5kIGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgY29udGVudCBpbiB0aGUgaW5kZXggd2l0aAorYC0tc3RhZ2VkYCwgb3IgcmVzdG9yZSBib3RoIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCB3aXRoCitgLS1zdGFnZWQgLS13b3JrdHJlZWAuCisKK0J5IGRlZmF1bHQsIHRoZSByZXN0b3JlIHNvdXJjZXMgZm9yIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IGFyZSB0aGUKK2luZGV4IGFuZCBgSEVBRGAgcmVzcGVjdGl2ZWx5LiBgLS1zb3VyY2VgIGNvdWxkIGJlIHVzZWQgdG8gc3BlY2lmeSBhCitjb21taXQgYXMgdGhlIHJlc3RvcmUgc291cmNlLgorCitTZWUgIlJlc2V0LCByZXN0b3JlIGFuZCByZXZlcnQiIGluIGxpbmtnaXQ6Z2l0WzFdIGZvciB0aGUgZGlmZmVyZW5jZXMKK2JldHdlZW4gdGhlIHRocmVlIGNvbW1hbmRzLgorCitUSElTIENPTU1BTkQgSVMgRVhQRVJJTUVOVEFMLiBUSEUgQkVIQVZJT1IgTUFZIENIQU5HRS4KKworT1BUSU9OUworLS0tLS0tLQorLXMgPHRyZWU+OjoKKy0tc291cmNlPTx0cmVlPjo6CisJUmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIGZpbGVzIHdpdGggdGhlIGNvbnRlbnQgZnJvbSB0aGUgZ2l2ZW4KKwl0cmVlLiBJdCBpcyBjb21tb24gdG8gc3BlY2lmeSB0aGUgc291cmNlIHRyZWUgYnkgbmFtaW5nIGEKKwljb21taXQsIGJyYW5jaCBvciB0YWcgYXNzb2NpYXRlZCB3aXRoIGl0LgorKworSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgcmVzdG9yZSBzb3VyY2UgZm9yIHRoZSB3b3JraW5nIHRyZWUgaXMKK3RoZSBpbmRleCwgYW5kIHRoZSBkZWZhdWx0IHJlc3RvcmUgc291cmNlIGZvciB0aGUgaW5kZXggaXMKK2BIRUFEYC4gV2hlbiBib3RoIGAtLXN0YWdlZGAgYW5kIGAtLXdvcmt0cmVlYCBhcmUgc3BlY2lmaWVkLAorYC0tc291cmNlYCBtdXN0IGFsc28gYmUgc3BlY2lmaWVkLgorCistcDo6CistLXBhdGNoOjoKKwlJbnRlcmFjdGl2ZWx5IHNlbGVjdCBodW5rcyBpbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQorCXJlc3RvcmUgc291cmNlIGFuZCB0aGUgcmVzdG9yZSBsb2NhdGlvbi4gU2VlIHRoZSBgYEludGVyYWN0aXZlCisJTW9kZScnIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdIHRvIGxlYXJuIGhvdyB0byBvcGVyYXRlCisJdGhlIGAtLXBhdGNoYCBtb2RlLgorKworTm90ZSB0aGF0IGAtLXBhdGNoYCBjYW4gYWNjZXB0IG5vIHBhdGhzcGVjIGFuZCB3aWxsIHByb21wdCB0byByZXN0b3JlCithbGwgbW9kaWZpZWQgcGF0aHMuCisKKy1XOjoKKy0td29ya3RyZWU6OgorLVM6OgorLS1zdGFnZWQ6OgorCVNwZWNpZnkgdGhlIHJlc3RvcmUgbG9jYXRpb24uIElmIG5laXRoZXIgb3B0aW9uIGlzIHNwZWNpZmllZCwKKwlieSBkZWZhdWx0IHRoZSB3b3JraW5nIHRyZWUgaXMgcmVzdG9yZWQuIFNwZWNpZnlpbmcgYC0tc3RhZ2VkYAorCXdpbGwgb25seSByZXN0b3JlIHRoZSBpbmRleC4gU3BlY2lmeWluZyBib3RoIHJlc3RvcmVzIGJvdGguCisKKy1xOjoKKy0tcXVpZXQ6OgorCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4gSW1wbGllcyBgLS1uby1wcm9ncmVzc2AuCisKKy0tcHJvZ3Jlc3M6OgorLS1uby1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIGAtLXF1aWV0YAorCWlzIHNwZWNpZmllZC4gVGhpcyBmbGFnIGVuYWJsZXMgcHJvZ3Jlc3MgcmVwb3J0aW5nIGV2ZW4gaWYgbm90CisJYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgcmVnYXJkbGVzcyBvZiBgLS1xdWlldGAuCisKKy0tb3Vyczo6CistLXRoZWlyczo6CisJV2hlbiByZXN0b3JpbmcgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBmcm9tIHRoZSBpbmRleCwgdXNlCisJc3RhZ2UgIzIgKCdvdXJzJykgb3IgIzMgKCd0aGVpcnMnKSBmb3IgdW5tZXJnZWQgcGF0aHMuCisrCitOb3RlIHRoYXQgZHVyaW5nIGBnaXQgcmViYXNlYCBhbmQgYGdpdCBwdWxsIC0tcmViYXNlYCwgJ291cnMnIGFuZAorJ3RoZWlycycgbWF5IGFwcGVhciBzd2FwcGVkLiBTZWUgdGhlIGV4cGxhbmF0aW9uIG9mIHRoZSBzYW1lIG9wdGlvbnMKK2luIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIGZvciBkZXRhaWxzLgorCistbTo6CistLW1lcmdlOjoKKwlXaGVuIHJlc3RvcmluZyBmaWxlcyBvbiB0aGUgd29ya2luZyB0cmVlIGZyb20gdGhlIGluZGV4LAorCXJlY3JlYXRlIHRoZSBjb25mbGljdGVkIG1lcmdlIGluIHRoZSB1bm1lcmdlZCBwYXRocy4KKworLS1jb25mbGljdD08c3R5bGU+OjoKKwlUaGUgc2FtZSBhcyBgLS1tZXJnZWAgb3B0aW9uIGFib3ZlLCBidXQgY2hhbmdlcyB0aGUgd2F5IHRoZQorCWNvbmZsaWN0aW5nIGh1bmtzIGFyZSBwcmVzZW50ZWQsIG92ZXJyaWRpbmcgdGhlCisJYG1lcmdlLmNvbmZsaWN0U3R5bGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBQb3NzaWJsZSB2YWx1ZXMKKwlhcmUgIm1lcmdlIiAoZGVmYXVsdCkgYW5kICJkaWZmMyIgKGluIGFkZGl0aW9uIHRvIHdoYXQgaXMKKwlzaG93biBieSAibWVyZ2UiIHN0eWxlLCBzaG93cyB0aGUgb3JpZ2luYWwgY29udGVudHMpLgorCistLWlnbm9yZS11bm1lcmdlZDo6CisJV2hlbiByZXN0b3JpbmcgZmlsZXMgb24gdGhlIHdvcmtpbmcgdHJlZSBmcm9tIHRoZSBpbmRleCwgZG8KKwlub3QgYWJvcnQgdGhlIG9wZXJhdGlvbiBpZiB0aGVyZSBhcmUgdW5tZXJnZWQgZW50cmllcyBhbmQKKwluZWl0aGVyIGAtLW91cnNgLCBgLS10aGVpcnNgLCBgLS1tZXJnZWAgb3IgYC0tY29uZmxpY3RgIGlzCisJc3BlY2lmaWVkLiBVbm1lcmdlZCBwYXRocyBvbiB0aGUgd29ya2luZyB0cmVlIGFyZSBsZWZ0IGFsb25lLgorCistLWlnbm9yZS1za2lwLXdvcmt0cmVlLWJpdHM6OgorCUluIHNwYXJzZSBjaGVja291dCBtb2RlLCBieSBkZWZhdWx0IGlzIHRvIG9ubHkgdXBkYXRlIGVudHJpZXMKKwltYXRjaGVkIGJ5IGA8cGF0aHNwZWM+YCBhbmQgc3BhcnNlIHBhdHRlcm5zIGluCisJJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXQuIFRoaXMgb3B0aW9uIGlnbm9yZXMgdGhlIHNwYXJzZQorCXBhdHRlcm5zIGFuZCB1bmNvbmRpdGlvbmFsbHkgcmVzdG9yZXMgYW55IGZpbGVzIGluCisJYDxwYXRoc3BlYz5gLgorCistLW92ZXJsYXk6OgorLS1uby1vdmVybGF5OjoKKwlJbiBvdmVybGF5IG1vZGUsIHRoZSBjb21tYW5kIG5ldmVyIHJlbW92ZXMgZmlsZXMgd2hlbgorCXJlc3RvcmluZy4gSW4gbm8tb3ZlcmxheSBtb2RlLCB0cmFja2VkIGZpbGVzIHRoYXQgZG8gbm90CisJYXBwZWFyIGluIHRoZSBgLS1zb3VyY2VgIHRyZWUgYXJlIHJlbW92ZWQsIHRvIG1ha2UgdGhlbSBtYXRjaAorCWA8dHJlZT5gIGV4YWN0bHkuIFRoZSBkZWZhdWx0IGlzIG5vLW92ZXJsYXkgbW9kZS4KKworLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+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+eW91ci1naXQtc2NyaXB0LnNoIDw8XEVPRgorIyEvYmluL3NoCithcmdzPSQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkQCIpICAgIyBxdW90ZSB1c2VyLXN1cHBsaWVkIGFyZ3VtZW50cworY29tbWFuZD0iZ2l0IGZyb3R6IC1uMjQgJGFyZ3MiICAgICAgICAgICMgYW5kIHVzZSBpdCBpbnNpZGUgYSBoYW5kY3JhZnRlZAorCQkJCQkjIGNvbW1hbmQgbGluZQorZXZhbCAiJGNvbW1hbmQiCitFT0YKKworJCBzaCB5b3VyLWdpdC1zY3JpcHQuc2ggImEgYidjIgorLS0tLS0tLS0tLS0tCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFByaW50IHRoZSBvYmplY3QgbmFtZSBvZiB0aGUgY3VycmVudCBjb21taXQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFECistLS0tLS0tLS0tLS0KKworKiBQcmludCB0aGUgY29tbWl0IG9iamVjdCBuYW1lIGZyb20gdGhlIHJldmlzaW9uIGluIHRoZSAkUkVWIHNoZWxsIHZhcmlhYmxlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJFJFVl57Y29tbWl0fQorLS0tLS0tLS0tLS0tCisrCitUaGlzIHdpbGwgZXJyb3Igb3V0IGlmICRSRVYgaXMgZW1wdHkgb3Igbm90IGEgdmFsaWQgcmV2aXNpb24uCisKKyogU2ltaWxhciB0byBhYm92ZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgJFJFVgorLS0tLS0tLS0tLS0tCisrCitidXQgaWYgJFJFViBpcyBlbXB0eSwgdGhlIGNvbW1pdCBvYmplY3QgbmFtZSBmcm9tIG1hc3RlciB3aWxsIGJlIHByaW50ZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyMjI3MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKQEAgLTAsMCArMSwxNDIgQEAKK2dpdC1yZXZlcnQoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJldmVydCAtIFJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJldmVydCcgWy0tW25vLV1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXNdIFstU1s8a2V5aWQ+XV0gPGNvbW1pdD4uLi4KKydnaXQgcmV2ZXJ0JyAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQgfCAtLXF1aXQpCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXZlbiBvbmUgb3IgbW9yZSBleGlzdGluZyBjb21taXRzLCByZXZlcnQgdGhlIGNoYW5nZXMgdGhhdCB0aGUKK3JlbGF0ZWQgcGF0Y2hlcyBpbnRyb2R1Y2UsIGFuZCByZWNvcmQgc29tZSBuZXcgY29tbWl0cyB0aGF0IHJlY29yZAordGhlbS4gIFRoaXMgcmVxdWlyZXMgeW91ciB3b3JraW5nIHRyZWUgdG8gYmUgY2xlYW4gKG5vIG1vZGlmaWNhdGlvbnMKK2Zyb20gdGhlIEhFQUQgY29tbWl0KS4KKworTm90ZTogJ2dpdCByZXZlcnQnIGlzIHVzZWQgdG8gcmVjb3JkIHNvbWUgbmV3IGNvbW1pdHMgdG8gcmV2ZXJzZSB0aGUKK2VmZmVjdCBvZiBzb21lIGVhcmxpZXIgY29tbWl0cyAob2Z0ZW4gb25seSBhIGZhdWx0eSBvbmUpLiAgSWYgeW91IHdhbnQgdG8KK3Rocm93IGF3YXkgYWxsIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSwgeW91CitzaG91bGQgc2VlIGxpbmtnaXQ6Z2l0LXJlc2V0WzFdLCBwYXJ0aWN1bGFybHkgdGhlIGAtLWhhcmRgIG9wdGlvbi4gIElmCit5b3Ugd2FudCB0byBleHRyYWN0IHNwZWNpZmljIGZpbGVzIGFzIHRoZXkgd2VyZSBpbiBhbm90aGVyIGNvbW1pdCwgeW91CitzaG91bGQgc2VlIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0sIHNwZWNpZmljYWxseSB0aGUgYC0tc291cmNlYAorb3B0aW9uLiBUYWtlIGNhcmUgd2l0aCB0aGVzZSBhbHRlcm5hdGl2ZXMgYXMKK2JvdGggd2lsbCBkaXNjYXJkIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4KKworU2VlICJSZXNldCwgcmVzdG9yZSBhbmQgcmV2ZXJ0IiBpbiBsaW5rZ2l0OmdpdFsxXSBmb3IgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSB0aHJlZSBjb21tYW5kcy4KKworT1BUSU9OUworLS0tLS0tLQorPGNvbW1pdD4uLi46OgorCUNvbW1pdHMgdG8gcmV2ZXJ0LgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIGNvbW1pdCBuYW1lcywgc2VlCisJbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisJU2V0cyBvZiBjb21taXRzIGNhbiBhbHNvIGJlIGdpdmVuIGJ1dCBubyB0cmF2ZXJzYWwgaXMgZG9uZSBieQorCWRlZmF1bHQsIHNlZSBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSBhbmQgaXRzIGAtLW5vLXdhbGtgCisJb3B0aW9uLgorCistZTo6CistLWVkaXQ6OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgcmV2ZXJ0JyB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CisJbWVzc2FnZSBwcmlvciB0byBjb21taXR0aW5nIHRoZSByZXZlcnQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYKKwl5b3UgcnVuIHRoZSBjb21tYW5kIGZyb20gYSB0ZXJtaW5hbC4KKworLW0gcGFyZW50LW51bWJlcjo6CistLW1haW5saW5lIHBhcmVudC1udW1iZXI6OgorCVVzdWFsbHkgeW91IGNhbm5vdCByZXZlcnQgYSBtZXJnZSBiZWNhdXNlIHlvdSBkbyBub3Qga25vdyB3aGljaAorCXNpZGUgb2YgdGhlIG1lcmdlIHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBtYWlubGluZS4gIFRoaXMKKwlvcHRpb24gc3BlY2lmaWVzIHRoZSBwYXJlbnQgbnVtYmVyIChzdGFydGluZyBmcm9tIDEpIG9mCisJdGhlIG1haW5saW5lIGFuZCBhbGxvd3MgcmV2ZXJ0IHRvIHJldmVyc2UgdGhlIGNoYW5nZQorCXJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgcGFyZW50LgorKworUmV2ZXJ0aW5nIGEgbWVyZ2UgY29tbWl0IGRlY2xhcmVzIHRoYXQgeW91IHdpbGwgbmV2ZXIgd2FudCB0aGUgdHJlZSBjaGFuZ2VzCiticm91Z2h0IGluIGJ5IHRoZSBtZXJnZS4gIEFzIGEgcmVzdWx0LCBsYXRlciBtZXJnZXMgd2lsbCBvbmx5IGJyaW5nIGluIHRyZWUKK2NoYW5nZXMgaW50cm9kdWNlZCBieSBjb21taXRzIHRoYXQgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIHByZXZpb3VzbHkKK3JldmVydGVkIG1lcmdlLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50LgorKworU2VlIHRoZSBsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS5odG1sW3JldmVydC1hLWZhdWx0eS1tZXJnZSBIb3ctVG9dIGZvcgorbW9yZSBkZXRhaWxzLgorCistLW5vLWVkaXQ6OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgcmV2ZXJ0JyB3aWxsIG5vdCBzdGFydCB0aGUgY29tbWl0CisJbWVzc2FnZSBlZGl0b3IuCisKKy0tY2xlYW51cD08bW9kZT46OgorCVRoaXMgb3B0aW9uIGRldGVybWluZXMgaG93IHRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIGNsZWFuZWQgdXAgYmVmb3JlCisJYmVpbmcgcGFzc2VkIG9uIHRvIHRoZSBjb21taXQgbWFjaGluZXJ5LiBTZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciBtb3JlCisJZGV0YWlscy4gSW4gcGFydGljdWxhciwgaWYgdGhlICc8bW9kZT4nIGlzIGdpdmVuIGEgdmFsdWUgb2YgYHNjaXNzb3JzYCwKKwlzY2lzc29ycyB3aWxsIGJlIGFwcGVuZGVkIHRvIGBNRVJHRV9NU0dgIGJlZm9yZSBiZWluZyBwYXNzZWQgb24gaW4gdGhlIGNhc2UKKwlvZiBhIGNvbmZsaWN0LgorCistbjo6CistLW5vLWNvbW1pdDo6CisJVXN1YWxseSB0aGUgY29tbWFuZCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgc29tZSBjb21taXRzIHdpdGgKKwljb21taXQgbG9nIG1lc3NhZ2VzIHN0YXRpbmcgd2hpY2ggY29tbWl0cyB3ZXJlCisJcmV2ZXJ0ZWQuICBUaGlzIGZsYWcgYXBwbGllcyB0aGUgY2hhbmdlcyBuZWNlc3NhcnkKKwl0byByZXZlcnQgdGhlIG5hbWVkIGNvbW1pdHMgdG8geW91ciB3b3JraW5nIHRyZWUKKwlhbmQgdGhlIGluZGV4LCBidXQgZG9lcyBub3QgbWFrZSB0aGUgY29tbWl0cy4gIEluIGFkZGl0aW9uLAorCXdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgeW91ciBpbmRleCBkb2VzIG5vdCBoYXZlIHRvIG1hdGNoCisJdGhlIEhFQUQgY29tbWl0LiAgVGhlIHJldmVydCBpcyBkb25lIGFnYWluc3QgdGhlCisJYmVnaW5uaW5nIHN0YXRlIG9mIHlvdXIgaW5kZXguCisrCitUaGlzIGlzIHVzZWZ1bCB3aGVuIHJldmVydGluZyBtb3JlIHRoYW4gb25lIGNvbW1pdHMnCitlZmZlY3QgdG8geW91ciBpbmRleCBpbiBhIHJvdy4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIGNvbW1pdHMuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZAorCWRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorCXN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistczo6CistLXNpZ25vZmY6OgorCUFkZCBTaWduZWQtb2ZmLWJ5IGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuCisJU2VlIHRoZSBzaWdub2ZmIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKy0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CisJVXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneS4gIFNob3VsZCBvbmx5IGJlIHVzZWQgb25jZS4KKwlTZWUgdGhlIE1FUkdFIFNUUkFURUdJRVMgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdC1tZXJnZVsxXQorCWZvciBkZXRhaWxzLgorCistWDxvcHRpb24+OjoKKy0tc3RyYXRlZ3ktb3B0aW9uPTxvcHRpb24+OjoKKwlQYXNzIHRoZSBtZXJnZSBzdHJhdGVneS1zcGVjaWZpYyBvcHRpb24gdGhyb3VnaCB0byB0aGUKKwltZXJnZSBzdHJhdGVneS4gIFNlZSBsaW5rZ2l0OmdpdC1tZXJnZVsxXSBmb3IgZGV0YWlscy4KKworLS1yZXJlcmUtYXV0b3VwZGF0ZTo6CistLW5vLXJlcmVyZS1hdXRvdXBkYXRlOjoKKwlBbGxvdyB0aGUgcmVyZXJlIG1lY2hhbmlzbSB0byB1cGRhdGUgdGhlIGluZGV4IHdpdGggdGhlCisJcmVzdWx0IG9mIGF1dG8tY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZS4KKworU0VRVUVOQ0VSIFNVQkNPTU1BTkRTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1ZGU6OnNlcXVlbmNlci50eHRbXQorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgcmV2ZXJ0IEhFQUR+M2A6OgorCisJUmV2ZXJ0IHRoZSBjaGFuZ2VzIHNwZWNpZmllZCBieSB0aGUgZm91cnRoIGxhc3QgY29tbWl0IGluIEhFQUQKKwlhbmQgY3JlYXRlIGEgbmV3IGNvbW1pdCB3aXRoIHRoZSByZXZlcnRlZCBjaGFuZ2VzLgorCitgZ2l0IHJldmVydCAtbiBtYXN0ZXJ+NS4ubWFzdGVyfjJgOjoKKworCVJldmVydCB0aGUgY2hhbmdlcyBkb25lIGJ5IGNvbW1pdHMgZnJvbSB0aGUgZmlmdGggbGFzdCBjb21taXQKKwlpbiBtYXN0ZXIgKGluY2x1ZGVkKSB0byB0aGUgdGhpcmQgbGFzdCBjb21taXQgaW4gbWFzdGVyCisJKGluY2x1ZGVkKSwgYnV0IGRvIG5vdCBjcmVhdGUgYW55IGNvbW1pdCB3aXRoIHRoZSByZXZlcnRlZAorCWNoYW5nZXMuIFRoZSByZXZlcnQgb25seSBtb2RpZmllcyB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUKKwlpbmRleC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVycnktcGlja1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJtLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjc1MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0CkBAIC0wLDAgKzEsMTk2IEBACitnaXQtcm0oMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcm0gLSBSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcm0nIFstZiB8IC0tZm9yY2VdIFstbl0gWy1yXSBbLS1jYWNoZWRdIFstLWlnbm9yZS11bm1hdGNoXQorCSAgWy0tcXVpZXRdIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXQorCSAgWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZW1vdmUgZmlsZXMgbWF0Y2hpbmcgcGF0aHNwZWMgZnJvbSB0aGUgaW5kZXgsIG9yIGZyb20gdGhlIHdvcmtpbmcgdHJlZQorYW5kIHRoZSBpbmRleC4gYGdpdCBybWAgd2lsbCBub3QgcmVtb3ZlIGEgZmlsZSBmcm9tIGp1c3QgeW91ciB3b3JraW5nCitkaXJlY3RvcnkuIChUaGVyZSBpcyBubyBvcHRpb24gdG8gcmVtb3ZlIGEgZmlsZSBvbmx5IGZyb20gdGhlIHdvcmtpbmcKK3RyZWUgYW5kIHlldCBrZWVwIGl0IGluIHRoZSBpbmRleDsgdXNlIGAvYmluL3JtYCBpZiB5b3Ugd2FudCB0byBkbwordGhhdC4pIFRoZSBmaWxlcyBiZWluZyByZW1vdmVkIGhhdmUgdG8gYmUgaWRlbnRpY2FsIHRvIHRoZSB0aXAgb2YgdGhlCiticmFuY2gsIGFuZCBubyB1cGRhdGVzIHRvIHRoZWlyIGNvbnRlbnRzIGNhbiBiZSBzdGFnZWQgaW4gdGhlIGluZGV4LAordGhvdWdoIHRoYXQgZGVmYXVsdCBiZWhhdmlvciBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgLWZgIG9wdGlvbi4KK1doZW4gYC0tY2FjaGVkYCBpcyBnaXZlbiwgdGhlIHN0YWdlZCBjb250ZW50IGhhcyB0bworbWF0Y2ggZWl0aGVyIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBvciB0aGUgZmlsZSBvbiBkaXNrLAorYWxsb3dpbmcgdGhlIGZpbGUgdG8gYmUgcmVtb3ZlZCBmcm9tIGp1c3QgdGhlIGluZGV4LgorCisKK09QVElPTlMKKy0tLS0tLS0KKzxwYXRoc3BlYz4uLi46OgorCUZpbGVzIHRvIHJlbW92ZS4gIEEgbGVhZGluZyBkaXJlY3RvcnkgbmFtZSAoZS5nLiBgZGlyYCB0byByZW1vdmUKKwlgZGlyL2ZpbGUxYCBhbmQgYGRpci9maWxlMmApIGNhbiBiZSBnaXZlbiB0byByZW1vdmUgYWxsIGZpbGVzIGluCisJdGhlIGRpcmVjdG9yeSwgYW5kIHJlY3Vyc2l2ZWx5IGFsbCBzdWItZGlyZWN0b3JpZXMsIGJ1dCB0aGlzCisJcmVxdWlyZXMgdGhlIGAtcmAgb3B0aW9uIHRvIGJlIGV4cGxpY2l0bHkgZ2l2ZW4uCisrCitUaGUgY29tbWFuZCByZW1vdmVzIG9ubHkgdGhlIHBhdGhzIHRoYXQgYXJlIGtub3duIHRvIEdpdC4KKysKK0ZpbGUgZ2xvYmJpbmcgbWF0Y2hlcyBhY3Jvc3MgZGlyZWN0b3J5IGJvdW5kYXJpZXMuICBUaHVzLCBnaXZlbiB0d28KK2RpcmVjdG9yaWVzIGBkYCBhbmQgYGQyYCwgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gdXNpbmcKK2BnaXQgcm0gJ2QqJ2AgYW5kIGBnaXQgcm0gJ2QvKidgLCBhcyB0aGUgZm9ybWVyIHdpbGwgYWxzbyByZW1vdmUgYWxsCitvZiBkaXJlY3RvcnkgYGQyYC4KKysKK0ZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeSBpbiBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCistZjo6CistLWZvcmNlOjoKKwlPdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjay4KKworLW46OgorLS1kcnktcnVuOjoKKwlEb24ndCBhY3R1YWxseSByZW1vdmUgYW55IGZpbGUocykuICBJbnN0ZWFkLCBqdXN0IHNob3cKKwlpZiB0aGV5IGV4aXN0IGluIHRoZSBpbmRleCBhbmQgd291bGQgb3RoZXJ3aXNlIGJlIHJlbW92ZWQKKwlieSB0aGUgY29tbWFuZC4KKworLXI6OgorICAgICAgICBBbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCB3aGVuIGEgbGVhZGluZyBkaXJlY3RvcnkgbmFtZSBpcworICAgICAgICBnaXZlbi4KKworXC0tOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tCisJdGhlIGxpc3Qgb2YgZmlsZXMsICh1c2VmdWwgd2hlbiBmaWxlbmFtZXMgbWlnaHQgYmUgbWlzdGFrZW4KKwlmb3IgY29tbWFuZC1saW5lIG9wdGlvbnMpLgorCistLWNhY2hlZDo6CisJVXNlIHRoaXMgb3B0aW9uIHRvIHVuc3RhZ2UgYW5kIHJlbW92ZSBwYXRocyBvbmx5IGZyb20gdGhlIGluZGV4LgorCVdvcmtpbmcgdHJlZSBmaWxlcywgd2hldGhlciBtb2RpZmllZCBvciBub3QsIHdpbGwgYmUKKwlsZWZ0IGFsb25lLgorCistLWlnbm9yZS11bm1hdGNoOjoKKwlFeGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vIGZpbGVzIG1hdGNoZWQuCisKKy1xOjoKKy0tcXVpZXQ6OgorCWBnaXQgcm1gIG5vcm1hbGx5IG91dHB1dHMgb25lIGxpbmUgKGluIHRoZSBmb3JtIG9mIGFuIGBybWAgY29tbWFuZCkKKwlmb3IgZWFjaCBmaWxlIHJlbW92ZWQuIFRoaXMgb3B0aW9uIHN1cHByZXNzZXMgdGhhdCBvdXRwdXQuCisKKy0tcGF0aHNwZWMtZnJvbS1maWxlPTxmaWxlPjo6CisJUGF0aHNwZWMgaXMgcGFzc2VkIGluIGA8ZmlsZT5gIGluc3RlYWQgb2YgY29tbWFuZGxpbmUgYXJncy4gSWYKKwlgPGZpbGU+YCBpcyBleGFjdGx5IGAtYCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuIFBhdGhzcGVjCisJZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBieSBMRiBvciBDUi9MRi4gUGF0aHNwZWMgZWxlbWVudHMgY2FuIGJlCisJcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU2VlIGFsc28gYC0tcGF0aHNwZWMtZmlsZS1udWxgIGFuZAorCWdsb2JhbCBgLS1saXRlcmFsLXBhdGhzcGVjc2AuCisKKy0tcGF0aHNwZWMtZmlsZS1udWw6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXBhdGhzcGVjLWZyb20tZmlsZWAuIFBhdGhzcGVjIGVsZW1lbnRzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgYW5kIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSB0YWtlbgorCWxpdGVyYWxseSAoaW5jbHVkaW5nIG5ld2xpbmVzIGFuZCBxdW90ZXMpLgorCisKK1JFTU9WSU5HIEZJTEVTIFRIQVQgSEFWRSBESVNBUFBFQVJFRCBGUk9NIFRIRSBGSUxFU1lTVEVNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgaXMgbm8gb3B0aW9uIGZvciBgZ2l0IHJtYCB0byByZW1vdmUgZnJvbSB0aGUgaW5kZXggb25seQordGhlIHBhdGhzIHRoYXQgaGF2ZSBkaXNhcHBlYXJlZCBmcm9tIHRoZSBmaWxlc3lzdGVtLiBIb3dldmVyLAorZGVwZW5kaW5nIG9uIHRoZSB1c2UgY2FzZSwgdGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0aGF0IGNhbiBiZQorZG9uZS4KKworVXNpbmcgYGBnaXQgY29tbWl0IC1hJycKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJZiB5b3UgaW50ZW5kIHRoYXQgeW91ciBuZXh0IGNvbW1pdCBzaG91bGQgcmVjb3JkIGFsbCBtb2RpZmljYXRpb25zCitvZiB0cmFja2VkIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHJlY29yZCBhbGwgcmVtb3ZhbHMgb2YKK2ZpbGVzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgd29ya2luZyB0cmVlIHdpdGggYHJtYAorKGFzIG9wcG9zZWQgdG8gYGdpdCBybWApLCB1c2UgYGdpdCBjb21taXQgLWFgLCBhcyBpdCB3aWxsCithdXRvbWF0aWNhbGx5IG5vdGljZSBhbmQgcmVjb3JkIGFsbCByZW1vdmFscy4gIFlvdSBjYW4gYWxzbyBoYXZlIGEKK3NpbWlsYXIgZWZmZWN0IHdpdGhvdXQgY29tbWl0dGluZyBieSB1c2luZyBgZ2l0IGFkZCAtdWAuCisKK1VzaW5nIGBgZ2l0IGFkZCAtQScnCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorV2hlbiBhY2NlcHRpbmcgYSBuZXcgY29kZSBkcm9wIGZvciBhIHZlbmRvciBicmFuY2gsIHlvdSBwcm9iYWJseQord2FudCB0byByZWNvcmQgYm90aCB0aGUgcmVtb3ZhbCBvZiBwYXRocyBhbmQgYWRkaXRpb25zIG9mIG5ldyBwYXRocworYXMgd2VsbCBhcyBtb2RpZmljYXRpb25zIG9mIGV4aXN0aW5nIHBhdGhzLgorCitUeXBpY2FsbHkgeW91IHdvdWxkIGZpcnN0IHJlbW92ZSBhbGwgdHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nCit0cmVlIHVzaW5nIHRoaXMgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGxzLWZpbGVzIC16IHwgeGFyZ3MgLTAgcm0gLWYKKy0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZW4gdW50YXIgdGhlIG5ldyBjb2RlIGluIHRoZSB3b3JraW5nIHRyZWUuIEFsdGVybmF0ZWx5Cit5b3UgY291bGQgJ3JzeW5jJyB0aGUgY2hhbmdlcyBpbnRvIHRoZSB3b3JraW5nIHRyZWUuCisKK0FmdGVyIHRoYXQsIHRoZSBlYXNpZXN0IHdheSB0byByZWNvcmQgYWxsIHJlbW92YWxzLCBhZGRpdGlvbnMsIGFuZAorbW9kaWZpY2F0aW9ucyBpbiB0aGUgd29ya2luZyB0cmVlIGlzOgorCistLS0tLS0tLS0tLS0tLS0tCitnaXQgYWRkIC1BCistLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBsaW5rZ2l0OmdpdC1hZGRbMV0uCisKK090aGVyIHdheXMKK35+fn5+fn5+fn4KK0lmIGFsbCB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXMgdG8gcmVtb3ZlIGZyb20gdGhlIGluZGV4IHRoZSBmaWxlcwordGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQgaW4gdGhlIHdvcmtpbmcgdHJlZSAocGVyaGFwcyBiZWNhdXNlCit5b3VyIHdvcmtpbmcgdHJlZSBpcyBkaXJ0eSBzbyB0aGF0IHlvdSBjYW5ub3QgdXNlIGBnaXQgY29tbWl0IC1hYCksCit1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tCitnaXQgZGlmZiAtLW5hbWUtb25seSAtLWRpZmYtZmlsdGVyPUQgLXogfCB4YXJncyAtMCBnaXQgcm0gLS1jYWNoZWQKKy0tLS0tLS0tLS0tLS0tLS0KKworU1VCTU9EVUxFUworLS0tLS0tLS0tLQorT25seSBzdWJtb2R1bGVzIHVzaW5nIGEgZ2l0ZmlsZSAod2hpY2ggbWVhbnMgdGhleSB3ZXJlIGNsb25lZAord2l0aCBhIEdpdCB2ZXJzaW9uIDEuNy44IG9yIG5ld2VyKSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgd29yawordHJlZSwgYXMgdGhlaXIgcmVwb3NpdG9yeSBsaXZlcyBpbnNpZGUgdGhlIC5naXQgZGlyZWN0b3J5IG9mIHRoZQorc3VwZXJwcm9qZWN0LiBJZiBhIHN1Ym1vZHVsZSAob3Igb25lIG9mIHRob3NlIG5lc3RlZCBpbnNpZGUgaXQpCitzdGlsbCB1c2VzIGEgLmdpdCBkaXJlY3RvcnksIGBnaXQgcm1gIHdpbGwgbW92ZSB0aGUgc3VibW9kdWxlcworZ2l0IGRpcmVjdG9yeSBpbnRvIHRoZSBzdXBlcnByb2plY3RzIGdpdCBkaXJlY3RvcnkgdG8gcHJvdGVjdAordGhlIHN1Ym1vZHVsZSdzIGhpc3RvcnkuIElmIGl0IGV4aXN0cyB0aGUgc3VibW9kdWxlLjxuYW1lPiBzZWN0aW9uCitpbiB0aGUgbGlua2dpdDpnaXRtb2R1bGVzWzVdIGZpbGUgd2lsbCBhbHNvIGJlIHJlbW92ZWQgYW5kIHRoYXQgZmlsZQord2lsbCBiZSBzdGFnZWQgKHVubGVzcyAtLWNhY2hlZCBvciAtbiBhcmUgdXNlZCkuCisKK0Egc3VibW9kdWxlIGlzIGNvbnNpZGVyZWQgdXAgdG8gZGF0ZSB3aGVuIHRoZSBIRUFEIGlzIHRoZSBzYW1lIGFzCityZWNvcmRlZCBpbiB0aGUgaW5kZXgsIG5vIHRyYWNrZWQgZmlsZXMgYXJlIG1vZGlmaWVkIGFuZCBubyB1bnRyYWNrZWQKK2ZpbGVzIHRoYXQgYXJlbid0IGlnbm9yZWQgYXJlIHByZXNlbnQgaW4gdGhlIHN1Ym1vZHVsZXMgd29yayB0cmVlLgorSWdub3JlZCBmaWxlcyBhcmUgZGVlbWVkIGV4cGVuZGFibGUgYW5kIHdvbid0IHN0b3AgYSBzdWJtb2R1bGUncyB3b3JrCit0cmVlIGZyb20gYmVpbmcgcmVtb3ZlZC4KKworSWYgeW91IG9ubHkgd2FudCB0byByZW1vdmUgdGhlIGxvY2FsIGNoZWNrb3V0IG9mIGEgc3VibW9kdWxlIGZyb20geW91cgord29yayB0cmVlIHdpdGhvdXQgY29tbWl0dGluZyB0aGUgcmVtb3ZhbCwgdXNlIGxpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSBgZGVpbml0YAoraW5zdGVhZC4gQWxzbyBzZWUgbGlua2dpdDpnaXRzdWJtb2R1bGVzWzddIGZvciBkZXRhaWxzIG9uIHN1Ym1vZHVsZSByZW1vdmFsLgorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgcm0gRG9jdW1lbnRhdGlvbi9cKi50eHRgOjoKKwlSZW1vdmVzIGFsbCBgKi50eHRgIGZpbGVzIGZyb20gdGhlIGluZGV4IHRoYXQgYXJlIHVuZGVyIHRoZQorCWBEb2N1bWVudGF0aW9uYCBkaXJlY3RvcnkgYW5kIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMuCisrCitOb3RlIHRoYXQgdGhlIGFzdGVyaXNrIGAqYCBpcyBxdW90ZWQgZnJvbSB0aGUgc2hlbGwgaW4gdGhpcworZXhhbXBsZTsgdGhpcyBsZXRzIEdpdCwgYW5kIG5vdCB0aGUgc2hlbGwsIGV4cGFuZCB0aGUgcGF0aG5hbWVzCitvZiBmaWxlcyBhbmQgc3ViZGlyZWN0b3JpZXMgdW5kZXIgdGhlIGBEb2N1bWVudGF0aW9uL2AgZGlyZWN0b3J5LgorCitgZ2l0IHJtIC1mIGdpdC0qLnNoYDo6CisJQmVjYXVzZSB0aGlzIGV4YW1wbGUgbGV0cyB0aGUgc2hlbGwgZXhwYW5kIHRoZSBhc3RlcmlzaworCShpLmUuIHlvdSBhcmUgbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0CisJZG9lcyBub3QgcmVtb3ZlIGBzdWJkaXIvZ2l0LWZvby5zaGAuCisKK0JVR1MKKy0tLS0KK0VhY2ggdGltZSBhIHN1cGVycHJvamVjdCB1cGRhdGUgcmVtb3ZlcyBhIHBvcHVsYXRlZCBzdWJtb2R1bGUKKyhlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gY29tbWl0cyBiZWZvcmUgYW5kIGFmdGVyIHRoZSByZW1vdmFsKSBhCitzdGFsZSBzdWJtb2R1bGUgY2hlY2tvdXQgd2lsbCByZW1haW4gaW4gdGhlIG9sZCBsb2NhdGlvbi4gUmVtb3ZpbmcgdGhlCitvbGQgZGlyZWN0b3J5IGlzIG9ubHkgc2FmZSB3aGVuIGl0IHVzZXMgYSBnaXRmaWxlLCBhcyBvdGhlcndpc2UgdGhlCitoaXN0b3J5IG9mIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSBkZWxldGVkIHRvby4gVGhpcyBzdGVwIHdpbGwgYmUKK29ic29sZXRlIHdoZW4gcmVjdXJzaXZlIHN1Ym1vZHVsZSB1cGRhdGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtYWRkWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTY5ODEwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTAsMCArMSw1MjYgQEAKK2dpdC1zZW5kLWVtYWlsKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2VuZC1lbWFpbCAtIFNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNlbmQtZW1haWwnIFs8b3B0aW9ucz5dIDxmaWxlfGRpcmVjdG9yeXxyZXYtbGlzdCBvcHRpb25zPi4uLgorJ2dpdCBzZW5kLWVtYWlsJyAtLWR1bXAtYWxpYXNlcworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGFrZXMgdGhlIHBhdGNoZXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgZW1haWxzIHRoZW0gb3V0LgorUGF0Y2hlcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGZpbGVzLCBkaXJlY3RvcmllcyAod2hpY2ggd2lsbCBzZW5kIGFsbAorZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSksIG9yIGRpcmVjdGx5IGFzIGEgcmV2aXNpb24gbGlzdC4gIEluIHRoZQorbGFzdCBjYXNlLCBhbnkgZm9ybWF0IGFjY2VwdGVkIGJ5IGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSBjYW4KK2JlIHBhc3NlZCB0byBnaXQgc2VuZC1lbWFpbC4KKworVGhlIGhlYWRlciBvZiB0aGUgZW1haWwgaXMgY29uZmlndXJhYmxlIHZpYSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gIElmIG5vdAorc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgd2l0aCBhIFJlYWRMaW5lCitlbmFibGVkIGludGVyZmFjZSB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCisKK1RoZXJlIGFyZSB0d28gZm9ybWF0cyBhY2NlcHRlZCBmb3IgcGF0Y2ggZmlsZXM6CisKKzEuIG1ib3ggZm9ybWF0IGZpbGVzCisrCitUaGlzIGlzIHdoYXQgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIGdlbmVyYXRlcy4gIE1vc3QgaGVhZGVycyBhbmQgTUlNRQorZm9ybWF0dGluZyBhcmUgaWdub3JlZC4KKworMi4gVGhlIG9yaWdpbmFsIGZvcm1hdCB1c2VkIGJ5IEdyZWcgS3JvYWgtSGFydG1hbidzICdzZW5kX2xvdHNfb2ZfZW1haWwucGwnCisgICBzY3JpcHQKKysKK1RoaXMgZm9ybWF0IGV4cGVjdHMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgdG8gY29udGFpbiB0aGUgIkNjOiIgdmFsdWUKK2FuZCB0aGUgIlN1YmplY3Q6IiBvZiB0aGUgbWVzc2FnZSBhcyB0aGUgc2Vjb25kIGxpbmUuCisKKworT1BUSU9OUworLS0tLS0tLQorCitDb21wb3NpbmcKK35+fn5+fn5+fgorCistLWFubm90YXRlOjoKKwlSZXZpZXcgYW5kIGVkaXQgZWFjaCBwYXRjaCB5b3UncmUgYWJvdXQgdG8gc2VuZC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUKKwlvZiBgc2VuZGVtYWlsLmFubm90YXRlYC4gU2VlIHRoZSBDT05GSUdVUkFUSU9OIHNlY3Rpb24gZm9yCisJYHNlbmRlbWFpbC5tdWx0aUVkaXRgLgorCistLWJjYz08YWRkcmVzcz4sLi4uOjoKKwlTcGVjaWZ5IGEgIkJjYzoiIHZhbHVlIGZvciBlYWNoIGVtYWlsLiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZgorCWBzZW5kZW1haWwuYmNjYC4KKysKK1RoaXMgb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCisKKy0tY2M9PGFkZHJlc3M+LC4uLjo6CisJU3BlY2lmeSBhIHN0YXJ0aW5nICJDYzoiIHZhbHVlIGZvciBlYWNoIGVtYWlsLgorCURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwuY2NgLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworLS1jb21wb3NlOjoKKwlJbnZva2UgYSB0ZXh0IGVkaXRvciAoc2VlIEdJVF9FRElUT1IgaW4gbGlua2dpdDpnaXQtdmFyWzFdKQorCXRvIGVkaXQgYW4gaW50cm9kdWN0b3J5IG1lc3NhZ2UgZm9yIHRoZSBwYXRjaCBzZXJpZXMuCisrCitXaGVuIGAtLWNvbXBvc2VgIGlzIHVzZWQsIGdpdCBzZW5kLWVtYWlsIHdpbGwgdXNlIHRoZSBGcm9tLCBTdWJqZWN0LCBhbmQKK0luLVJlcGx5LVRvIGhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSBtZXNzYWdlLiBJZiB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZQorKHdoYXQgeW91IHR5cGUgYWZ0ZXIgdGhlIGhlYWRlcnMgYW5kIGEgYmxhbmsgbGluZSkgb25seSBjb250YWlucyBibGFuaworKG9yIEdpdDogcHJlZml4ZWQpIGxpbmVzLCB0aGUgc3VtbWFyeSB3b24ndCBiZSBzZW50LCBidXQgRnJvbSwgU3ViamVjdCwKK2FuZCBJbi1SZXBseS1UbyBoZWFkZXJzIHdpbGwgYmUgdXNlZCB1bmxlc3MgdGhleSBhcmUgcmVtb3ZlZC4KKysKK01pc3NpbmcgRnJvbSBvciBJbi1SZXBseS1UbyBoZWFkZXJzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgorKworU2VlIHRoZSBDT05GSUdVUkFUSU9OIHNlY3Rpb24gZm9yIGBzZW5kZW1haWwubXVsdGlFZGl0YC4KKworLS1mcm9tPTxhZGRyZXNzPjo6CisJU3BlY2lmeSB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbHMuICBJZiBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsCisJdGhlIHZhbHVlIG9mIHRoZSBgc2VuZGVtYWlsLmZyb21gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHVzZWQuICBJZgorCW5laXRoZXIgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24gbm9yIGBzZW5kZW1haWwuZnJvbWAgYXJlIHNldCwgdGhlbiB0aGUKKwl1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgZm9yIHRoZSB2YWx1ZS4gIFRoZSBkZWZhdWx0IGZvciB0aGUgcHJvbXB0IHdpbGwgYmUKKwl0aGUgdmFsdWUgb2YgR0lUX0FVVEhPUl9JREVOVCwgb3IgR0lUX0NPTU1JVFRFUl9JREVOVCBpZiB0aGF0IGlzIG5vdAorCXNldCwgYXMgcmV0dXJuZWQgYnkgImdpdCB2YXIgLWwiLgorCistLXJlcGx5LXRvPTxhZGRyZXNzPjo6CisJU3BlY2lmeSB0aGUgYWRkcmVzcyB3aGVyZSByZXBsaWVzIGZyb20gcmVjaXBpZW50cyBzaG91bGQgZ28gdG8uCisJVXNlIHRoaXMgaWYgcmVwbGllcyB0byBtZXNzYWdlcyBzaG91bGQgZ28gdG8gYW5vdGhlciBhZGRyZXNzIHRoYW4gd2hhdAorCWlzIHNwZWNpZmllZCB3aXRoIHRoZSAtLWZyb20gcGFyYW1ldGVyLgorCistLWluLXJlcGx5LXRvPTxpZGVudGlmaWVyPjo6CisJTWFrZSB0aGUgZmlyc3QgbWFpbCAob3IgYWxsIHRoZSBtYWlscyB3aXRoIGAtLW5vLXRocmVhZGApIGFwcGVhciBhcyBhCisJcmVwbHkgdG8gdGhlIGdpdmVuIE1lc3NhZ2UtSWQsIHdoaWNoIGF2b2lkcyBicmVha2luZyB0aHJlYWRzIHRvCisJcHJvdmlkZSBhIG5ldyBwYXRjaCBzZXJpZXMuCisJVGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBlbWFpbHMgd2lsbCBiZSBzZW50IGFzIHJlcGxpZXMgYWNjb3JkaW5nIHRvCisJdGhlIGAtLVtuby1dY2hhaW4tcmVwbHktdG9gIHNldHRpbmcuCisrCitTbyBmb3IgZXhhbXBsZSB3aGVuIGAtLXRocmVhZGAgYW5kIGAtLW5vLWNoYWluLXJlcGx5LXRvYCBhcmUgc3BlY2lmaWVkLCB0aGUKK3NlY29uZCBhbmQgc3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgYmUgcmVwbGllcyB0byB0aGUgZmlyc3Qgb25lIGxpa2UgaW4gdGhlCitpbGx1c3RyYXRpb24gYmVsb3cgd2hlcmUgYFtQQVRDSCB2MiAwLzNdYCBpcyBpbiByZXBseSB0byBgW1BBVENIIDAvMl1gOgorKworICBbUEFUQ0ggMC8yXSBIZXJlIGlzIHdoYXQgSSBkaWQuLi4KKyAgICBbUEFUQ0ggMS8yXSBDbGVhbiB1cCBhbmQgdGVzdHMKKyAgICBbUEFUQ0ggMi8yXSBJbXBsZW1lbnRhdGlvbgorICAgIFtQQVRDSCB2MiAwLzNdIEhlcmUgaXMgYSByZXJvbGwKKyAgICAgIFtQQVRDSCB2MiAxLzNdIENsZWFuIHVwCisgICAgICBbUEFUQ0ggdjIgMi8zXSBOZXcgdGVzdHMKKyAgICAgIFtQQVRDSCB2MiAzLzNdIEltcGxlbWVudGF0aW9uCisrCitPbmx5IG5lY2Vzc2FyeSBpZiAtLWNvbXBvc2UgaXMgYWxzbyBzZXQuICBJZiAtLWNvbXBvc2UKK2lzIG5vdCBzZXQsIHRoaXMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCisKKy0tc3ViamVjdD08c3RyaW5nPjo6CisJU3BlY2lmeSB0aGUgaW5pdGlhbCBzdWJqZWN0IG9mIHRoZSBlbWFpbCB0aHJlYWQuCisJT25seSBuZWNlc3NhcnkgaWYgLS1jb21wb3NlIGlzIGFsc28gc2V0LiAgSWYgLS1jb21wb3NlCisJaXMgbm90IHNldCwgdGhpcyB3aWxsIGJlIHByb21wdGVkIGZvci4KKworLS10bz08YWRkcmVzcz4sLi4uOjoKKwlTcGVjaWZ5IHRoZSBwcmltYXJ5IHJlY2lwaWVudCBvZiB0aGUgZW1haWxzIGdlbmVyYXRlZC4gR2VuZXJhbGx5LCB0aGlzCisJd2lsbCBiZSB0aGUgdXBzdHJlYW0gbWFpbnRhaW5lciBvZiB0aGUgcHJvamVjdCBpbnZvbHZlZC4gRGVmYXVsdCBpcyB0aGUKKwl2YWx1ZSBvZiB0aGUgYHNlbmRlbWFpbC50b2AgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwKKwlhbmQgLS10by1jbWQgaXMgbm90IHNwZWNpZmllZCwgdGhpcyB3aWxsIGJlIHByb21wdGVkIGZvci4KKysKK1RoaXMgb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCisKKy0tOGJpdC1lbmNvZGluZz08ZW5jb2Rpbmc+OjoKKwlXaGVuIGVuY291bnRlcmluZyBhIG5vbi1BU0NJSSBtZXNzYWdlIG9yIHN1YmplY3QgdGhhdCBkb2VzIG5vdAorCWRlY2xhcmUgaXRzIGVuY29kaW5nLCBhZGQgaGVhZGVycy9xdW90aW5nIHRvIGluZGljYXRlIGl0IGlzCisJZW5jb2RlZCBpbiA8ZW5jb2Rpbmc+LiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlCisJJ3NlbmRlbWFpbC5hc3N1bWU4Yml0RW5jb2RpbmcnOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCB0aGlzCisJd2lsbCBiZSBwcm9tcHRlZCBmb3IgaWYgYW55IG5vbi1BU0NJSSBmaWxlcyBhcmUgZW5jb3VudGVyZWQuCisrCitOb3RlIHRoYXQgbm8gYXR0ZW1wdHMgd2hhdHNvZXZlciBhcmUgbWFkZSB0byB2YWxpZGF0ZSB0aGUgZW5jb2RpbmcuCisKKy0tY29tcG9zZS1lbmNvZGluZz08ZW5jb2Rpbmc+OjoKKwlTcGVjaWZ5IGVuY29kaW5nIG9mIGNvbXBvc2UgbWVzc2FnZS4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlCisJJ3NlbmRlbWFpbC5jb21wb3NlZW5jb2RpbmcnOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBVVEYtOCBpcyBhc3N1bWVkLgorCistLXRyYW5zZmVyLWVuY29kaW5nPSg3Yml0fDhiaXR8cXVvdGVkLXByaW50YWJsZXxiYXNlNjR8YXV0byk6OgorCVNwZWNpZnkgdGhlIHRyYW5zZmVyIGVuY29kaW5nIHRvIGJlIHVzZWQgdG8gc2VuZCB0aGUgbWVzc2FnZSBvdmVyIFNNVFAuCisJN2JpdCB3aWxsIGZhaWwgdXBvbiBlbmNvdW50ZXJpbmcgYSBub24tQVNDSUkgbWVzc2FnZS4gIHF1b3RlZC1wcmludGFibGUKKwljYW4gYmUgdXNlZnVsIHdoZW4gdGhlIHJlcG9zaXRvcnkgY29udGFpbnMgZmlsZXMgdGhhdCBjb250YWluIGNhcnJpYWdlCisJcmV0dXJucywgYnV0IG1ha2VzIHRoZSByYXcgcGF0Y2ggZW1haWwgZmlsZSAoYXMgc2F2ZWQgZnJvbSBhIE1VQSkgbXVjaAorCWhhcmRlciB0byBpbnNwZWN0IG1hbnVhbGx5LiAgYmFzZTY0IGlzIGV2ZW4gbW9yZSBmb29sIHByb29mLCBidXQgYWxzbworCWV2ZW4gbW9yZSBvcGFxdWUuICBhdXRvIHdpbGwgdXNlIDhiaXQgd2hlbiBwb3NzaWJsZSwgYW5kIHF1b3RlZC1wcmludGFibGUKKwlvdGhlcndpc2UuCisrCitEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUgYHNlbmRlbWFpbC50cmFuc2ZlckVuY29kaW5nYCBjb25maWd1cmF0aW9uCit2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byBgYXV0b2AuCisKKy0teG1haWxlcjo6CistLW5vLXhtYWlsZXI6OgorCUFkZCAob3IgcHJldmVudCBhZGRpbmcpIHRoZSAiWC1NYWlsZXI6IiBoZWFkZXIuICBCeSBkZWZhdWx0LAorCXRoZSBoZWFkZXIgaXMgYWRkZWQsIGJ1dCBpdCBjYW4gYmUgdHVybmVkIG9mZiBieSBzZXR0aW5nIHRoZQorCWBzZW5kZW1haWwueG1haWxlcmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBgZmFsc2VgLgorCitTZW5kaW5nCit+fn5+fn5+CisKKy0tZW52ZWxvcGUtc2VuZGVyPTxhZGRyZXNzPjo6CisJU3BlY2lmeSB0aGUgZW52ZWxvcGUgc2VuZGVyIHVzZWQgdG8gc2VuZCB0aGUgZW1haWxzLgorCVRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgZGVmYXVsdCBhZGRyZXNzIGlzIG5vdCB0aGUgYWRkcmVzcyB0aGF0IGlzCisJc3Vic2NyaWJlZCB0byBhIGxpc3QuIEluIG9yZGVyIHRvIHVzZSB0aGUgJ0Zyb20nIGFkZHJlc3MsIHNldCB0aGUKKwl2YWx1ZSB0byAiYXV0byIuIElmIHlvdSB1c2UgdGhlIHNlbmRtYWlsIGJpbmFyeSwgeW91IG11c3QgaGF2ZQorCXN1aXRhYmxlIHByaXZpbGVnZXMgZm9yIHRoZSAtZiBwYXJhbWV0ZXIuICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUKKwlgc2VuZGVtYWlsLmVudmVsb3BlU2VuZGVyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlOyBpZiB0aGF0IGlzCisJdW5zcGVjaWZpZWQsIGNob29zaW5nIHRoZSBlbnZlbG9wZSBzZW5kZXIgaXMgbGVmdCB0byB5b3VyIE1UQS4KKworLS1zbXRwLWVuY3J5cHRpb249PGVuY3J5cHRpb24+OjoKKwlTcGVjaWZ5IHRoZSBlbmNyeXB0aW9uIHRvIHVzZSwgZWl0aGVyICdzc2wnIG9yICd0bHMnLiAgQW55IG90aGVyCisJdmFsdWUgcmV2ZXJ0cyB0byBwbGFpbiBTTVRQLiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YKKwlgc2VuZGVtYWlsLnNtdHBFbmNyeXB0aW9uYC4KKworLS1zbXRwLWRvbWFpbj08RlFETj46OgorCVNwZWNpZmllcyB0aGUgRnVsbHkgUXVhbGlmaWVkIERvbWFpbiBOYW1lIChGUUROKSB1c2VkIGluIHRoZQorCUhFTE8vRUhMTyBjb21tYW5kIHRvIHRoZSBTTVRQIHNlcnZlci4gIFNvbWUgc2VydmVycyByZXF1aXJlIHRoZQorCUZRRE4gdG8gbWF0Y2ggeW91ciBJUCBhZGRyZXNzLiAgSWYgbm90IHNldCwgZ2l0IHNlbmQtZW1haWwgYXR0ZW1wdHMKKwl0byBkZXRlcm1pbmUgeW91ciBGUUROIGF1dG9tYXRpY2FsbHkuICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZgorCWBzZW5kZW1haWwuc210cERvbWFpbmAuCisKKy0tc210cC1hdXRoPTxtZWNoYW5pc21zPjo6CisJV2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIFNNVFAtQVVUSCBtZWNoYW5pc21zLiBUaGlzIHNldHRpbmcKKwlmb3JjZXMgdXNpbmcgb25seSB0aGUgbGlzdGVkIG1lY2hhbmlzbXMuIEV4YW1wbGU6CisrCistLS0tLS0KKyQgZ2l0IHNlbmQtZW1haWwgLS1zbXRwLWF1dGg9IlBMQUlOIExPR0lOIEdTU0FQSSIgLi4uCistLS0tLS0KKysKK0lmIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3BlY2lmaWVkIG1lY2hhbmlzbXMgbWF0Y2hlcyB0aGUgb25lcyBhZHZlcnRpc2VkIGJ5IHRoZQorU01UUCBzZXJ2ZXIgYW5kIGlmIGl0IGlzIHN1cHBvcnRlZCBieSB0aGUgdXRpbGl6ZWQgU0FTTCBsaWJyYXJ5LCB0aGUgbWVjaGFuaXNtCitpcyB1c2VkIGZvciBhdXRoZW50aWNhdGlvbi4gSWYgbmVpdGhlciAnc2VuZGVtYWlsLnNtdHBBdXRoJyBub3IgYC0tc210cC1hdXRoYAoraXMgc3BlY2lmaWVkLCBhbGwgbWVjaGFuaXNtcyBzdXBwb3J0ZWQgYnkgdGhlIFNBU0wgbGlicmFyeSBjYW4gYmUgdXNlZC4gVGhlCitzcGVjaWFsIHZhbHVlICdub25lJyBtYXliZSBzcGVjaWZpZWQgdG8gY29tcGxldGVseSBkaXNhYmxlIGF1dGhlbnRpY2F0aW9uCitpbmRlcGVuZGVudGx5IG9mIGAtLXNtdHAtdXNlcmAKKworLS1zbXRwLXBhc3NbPTxwYXNzd29yZD5dOjoKKwlQYXNzd29yZCBmb3IgU01UUC1BVVRILiBUaGUgYXJndW1lbnQgaXMgb3B0aW9uYWw6IElmIG5vCisJYXJndW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBlbXB0eSBzdHJpbmcgaXMgdXNlZCBhcworCXRoZSBwYXNzd29yZC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5zbXRwUGFzc2AsCisJaG93ZXZlciBgLS1zbXRwLXBhc3NgIGFsd2F5cyBvdmVycmlkZXMgdGhpcyB2YWx1ZS4KKysKK0Z1cnRoZXJtb3JlLCBwYXNzd29yZHMgbmVlZCBub3QgYmUgc3BlY2lmaWVkIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMKK29yIG9uIHRoZSBjb21tYW5kIGxpbmUuIElmIGEgdXNlcm5hbWUgaGFzIGJlZW4gc3BlY2lmaWVkICh3aXRoCitgLS1zbXRwLXVzZXJgIG9yIGEgYHNlbmRlbWFpbC5zbXRwVXNlcmApLCBidXQgbm8gcGFzc3dvcmQgaGFzIGJlZW4KK3NwZWNpZmllZCAod2l0aCBgLS1zbXRwLXBhc3NgIG9yIGBzZW5kZW1haWwuc210cFBhc3NgKSwgdGhlbgorYSBwYXNzd29yZCBpcyBvYnRhaW5lZCB1c2luZyAnZ2l0LWNyZWRlbnRpYWwnLgorCistLW5vLXNtdHAtYXV0aDo6CisJRGlzYWJsZSBTTVRQIGF1dGhlbnRpY2F0aW9uLiBTaG9ydCBoYW5kIGZvciBgLS1zbXRwLWF1dGg9bm9uZWAKKworLS1zbXRwLXNlcnZlcj08aG9zdD46OgorCUlmIHNldCwgc3BlY2lmaWVzIHRoZSBvdXRnb2luZyBTTVRQIHNlcnZlciB0byB1c2UgKGUuZy4KKwlgc210cC5leGFtcGxlLmNvbWAgb3IgYSByYXcgSVAgYWRkcmVzcykuICBBbHRlcm5hdGl2ZWx5IGl0IGNhbgorCXNwZWNpZnkgYSBmdWxsIHBhdGhuYW1lIG9mIGEgc2VuZG1haWwtbGlrZSBwcm9ncmFtIGluc3RlYWQ7CisJdGhlIHByb2dyYW0gbXVzdCBzdXBwb3J0IHRoZSBgLWlgIG9wdGlvbi4gIERlZmF1bHQgdmFsdWUgY2FuCisJYmUgc3BlY2lmaWVkIGJ5IHRoZSBgc2VuZGVtYWlsLnNtdHBTZXJ2ZXJgIGNvbmZpZ3VyYXRpb24KKwlvcHRpb247IHRoZSBidWlsdC1pbiBkZWZhdWx0IGlzIHRvIHNlYXJjaCBmb3IgYHNlbmRtYWlsYCBpbgorCWAvdXNyL3NiaW5gLCBgL3Vzci9saWJgIGFuZCAkUEFUSCBpZiBzdWNoIHByb2dyYW0gaXMKKwlhdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBgbG9jYWxob3N0YCBvdGhlcndpc2UuCisKKy0tc210cC1zZXJ2ZXItcG9ydD08cG9ydD46OgorCVNwZWNpZmllcyBhIHBvcnQgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgcG9ydCAoU01UUAorCXNlcnZlcnMgdHlwaWNhbGx5IGxpc3RlbiB0byBzbXRwIHBvcnQgMjUsIGJ1dCBtYXkgYWxzbyBsaXN0ZW4gdG8KKwlzdWJtaXNzaW9uIHBvcnQgNTg3LCBvciB0aGUgY29tbW9uIFNTTCBzbXRwIHBvcnQgNDY1KTsKKwlzeW1ib2xpYyBwb3J0IG5hbWVzIChlLmcuICJzdWJtaXNzaW9uIiBpbnN0ZWFkIG9mIDU4NykKKwlhcmUgYWxzbyBhY2NlcHRlZC4gVGhlIHBvcnQgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlCisJYHNlbmRlbWFpbC5zbXRwU2VydmVyUG9ydGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworLS1zbXRwLXNlcnZlci1vcHRpb249PG9wdGlvbj46OgorCUlmIHNldCwgc3BlY2lmaWVzIHRoZSBvdXRnb2luZyBTTVRQIHNlcnZlciBvcHRpb24gdG8gdXNlLgorCURlZmF1bHQgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBieSB0aGUgYHNlbmRlbWFpbC5zbXRwU2VydmVyT3B0aW9uYAorCWNvbmZpZ3VyYXRpb24gb3B0aW9uLgorKworVGhlIC0tc210cC1zZXJ2ZXItb3B0aW9uIG9wdGlvbiBtdXN0IGJlIHJlcGVhdGVkIGZvciBlYWNoIG9wdGlvbiB5b3Ugd2FudAordG8gcGFzcyB0byB0aGUgc2VydmVyLiBMaWtld2lzZSwgZGlmZmVyZW50IGxpbmVzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCittdXN0IGJlIHVzZWQgZm9yIGVhY2ggb3B0aW9uLgorCistLXNtdHAtc3NsOjoKKwlMZWdhY3kgYWxpYXMgZm9yICctLXNtdHAtZW5jcnlwdGlvbiBzc2wnLgorCistLXNtdHAtc3NsLWNlcnQtcGF0aDo6CisJUGF0aCB0byBhIHN0b3JlIG9mIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzIGZvciBTTVRQIFNTTC9UTFMKKwljZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIChlaXRoZXIgYSBkaXJlY3RvcnkgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQKKwlieSAnY19yZWhhc2gnLCBvciBhIHNpbmdsZSBmaWxlIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgUEVNIGZvcm1hdAorCWNlcnRpZmljYXRlcyBjb25jYXRlbmF0ZWQgdG9nZXRoZXI6IHNlZSB2ZXJpZnkoMSkgLUNBZmlsZSBhbmQKKwktQ0FwYXRoIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlKS4gU2V0IGl0IHRvIGFuIGVtcHR5IHN0cmluZworCXRvIGRpc2FibGUgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLiBEZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgdGhlCisJYHNlbmRlbWFpbC5zbXRwc3NsY2VydHBhdGhgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGlmIHNldCwgb3IgdGhlCisJYmFja2luZyBTU0wgbGlicmFyeSdzIGNvbXBpbGVkLWluIGRlZmF1bHQgb3RoZXJ3aXNlICh3aGljaCBzaG91bGQKKwliZSB0aGUgYmVzdCBjaG9pY2Ugb24gbW9zdCBwbGF0Zm9ybXMpLgorCistLXNtdHAtdXNlcj08dXNlcj46OgorCVVzZXJuYW1lIGZvciBTTVRQLUFVVEguIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIGBzZW5kZW1haWwuc210cFVzZXJgOworCWlmIGEgdXNlcm5hbWUgaXMgbm90IHNwZWNpZmllZCAod2l0aCBgLS1zbXRwLXVzZXJgIG9yIGBzZW5kZW1haWwuc210cFVzZXJgKSwKKwl0aGVuIGF1dGhlbnRpY2F0aW9uIGlzIG5vdCBhdHRlbXB0ZWQuCisKKy0tc210cC1kZWJ1Zz0wfDE6OgorCUVuYWJsZSAoMSkgb3IgZGlzYWJsZSAoMCkgZGVidWcgb3V0cHV0LiBJZiBlbmFibGVkLCBTTVRQCisJY29tbWFuZHMgYW5kIHJlcGxpZXMgd2lsbCBiZSBwcmludGVkLiBVc2VmdWwgdG8gZGVidWcgVExTCisJY29ubmVjdGlvbiBhbmQgYXV0aGVudGljYXRpb24gcHJvYmxlbXMuCisKKy0tYmF0Y2gtc2l6ZT08bnVtPjo6CisJU29tZSBlbWFpbCBzZXJ2ZXJzIChlLmcuIHNtdHAuMTYzLmNvbSkgbGltaXQgdGhlIG51bWJlciBlbWFpbHMgdG8gYmUKKwlzZW50IHBlciBzZXNzaW9uIChjb25uZWN0aW9uKSBhbmQgdGhpcyB3aWxsIGxlYWQgdG8gYSBmYWlsdXJlIHdoZW4KKwlzZW5kaW5nIG1hbnkgbWVzc2FnZXMuICBXaXRoIHRoaXMgb3B0aW9uLCBzZW5kLWVtYWlsIHdpbGwgZGlzY29ubmVjdCBhZnRlcgorCXNlbmRpbmcgJDxudW0+IG1lc3NhZ2VzIGFuZCB3YWl0IGZvciBhIGZldyBzZWNvbmRzIChzZWUgLS1yZWxvZ2luLWRlbGF5KQorCWFuZCByZWNvbm5lY3QsIHRvIHdvcmsgYXJvdW5kIHN1Y2ggYSBsaW1pdC4gIFlvdSBtYXkgd2FudCB0bworCXVzZSBzb21lIGZvcm0gb2YgY3JlZGVudGlhbCBoZWxwZXIgdG8gYXZvaWQgaGF2aW5nIHRvIHJldHlwZQorCXlvdXIgcGFzc3dvcmQgZXZlcnkgdGltZSB0aGlzIGhhcHBlbnMuICBEZWZhdWx0cyB0byB0aGUKKwlgc2VuZGVtYWlsLnNtdHBCYXRjaFNpemVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKy0tcmVsb2dpbi1kZWxheT08aW50Pjo6CisJV2FpdGluZyAkPGludD4gc2Vjb25kcyBiZWZvcmUgcmVjb25uZWN0aW5nIHRvIFNNVFAgc2VydmVyLiBVc2VkIHRvZ2V0aGVyCisJd2l0aCAtLWJhdGNoLXNpemUgb3B0aW9uLiAgRGVmYXVsdHMgdG8gdGhlIGBzZW5kZW1haWwuc210cFJlbG9naW5EZWxheWAKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCitBdXRvbWF0aW5nCit+fn5+fn5+fn5+CisKKy0tbm8tW3RvfGNjfGJjY106OgorCUNsZWFycyBhbnkgbGlzdCBvZiAiVG86IiwgIkNjOiIsICJCY2M6IiBhZGRyZXNzZXMgcHJldmlvdXNseQorCXNldCB2aWEgY29uZmlnLgorCistLW5vLWlkZW50aXR5OjoKKwlDbGVhcnMgdGhlIHByZXZpb3VzbHkgcmVhZCB2YWx1ZSBvZiBgc2VuZGVtYWlsLmlkZW50aXR5YCBzZXQKKwl2aWEgY29uZmlnLCBpZiBhbnkuCisKKy0tdG8tY21kPTxjb21tYW5kPjo6CisJU3BlY2lmeSBhIGNvbW1hbmQgdG8gZXhlY3V0ZSBvbmNlIHBlciBwYXRjaCBmaWxlIHdoaWNoCisJc2hvdWxkIGdlbmVyYXRlIHBhdGNoIGZpbGUgc3BlY2lmaWMgIlRvOiIgZW50cmllcy4KKwlPdXRwdXQgb2YgdGhpcyBjb21tYW5kIG11c3QgYmUgc2luZ2xlIGVtYWlsIGFkZHJlc3MgcGVyIGxpbmUuCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC50b2NtZCcgY29uZmlndXJhdGlvbiB2YWx1ZS4KKworLS1jYy1jbWQ9PGNvbW1hbmQ+OjoKKwlTcGVjaWZ5IGEgY29tbWFuZCB0byBleGVjdXRlIG9uY2UgcGVyIHBhdGNoIGZpbGUgd2hpY2gKKwlzaG91bGQgZ2VuZXJhdGUgcGF0Y2ggZmlsZSBzcGVjaWZpYyAiQ2M6IiBlbnRyaWVzLgorCU91dHB1dCBvZiB0aGlzIGNvbW1hbmQgbXVzdCBiZSBzaW5nbGUgZW1haWwgYWRkcmVzcyBwZXIgbGluZS4KKwlEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLmNjQ21kYCBjb25maWd1cmF0aW9uIHZhbHVlLgorCistLVtuby1dY2hhaW4tcmVwbHktdG86OgorCUlmIHRoaXMgaXMgc2V0LCBlYWNoIGVtYWlsIHdpbGwgYmUgc2VudCBhcyBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cworCWVtYWlsIHNlbnQuICBJZiBkaXNhYmxlZCB3aXRoICItLW5vLWNoYWluLXJlcGx5LXRvIiwgYWxsIGVtYWlscyBhZnRlcgorCXRoZSBmaXJzdCB3aWxsIGJlIHNlbnQgYXMgcmVwbGllcyB0byB0aGUgZmlyc3QgZW1haWwgc2VudC4gIFdoZW4gdXNpbmcKKwl0aGlzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBmaXJzdCBmaWxlIGdpdmVuIGJlIGFuIG92ZXJ2aWV3IG9mIHRoZQorCWVudGlyZSBwYXRjaCBzZXJpZXMuIERpc2FibGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGUgYHNlbmRlbWFpbC5jaGFpblJlcGx5VG9gCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBlbmFibGUgaXQuCisKKy0taWRlbnRpdHk9PGlkZW50aXR5Pjo6CisJQSBjb25maWd1cmF0aW9uIGlkZW50aXR5LiBXaGVuIGdpdmVuLCBjYXVzZXMgdmFsdWVzIGluIHRoZQorCSdzZW5kZW1haWwuPGlkZW50aXR5Picgc3Vic2VjdGlvbiB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlcgorCXZhbHVlcyBpbiB0aGUgJ3NlbmRlbWFpbCcgc2VjdGlvbi4gVGhlIGRlZmF1bHQgaWRlbnRpdHkgaXMKKwl0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5pZGVudGl0eWAuCisKKy0tW25vLV1zaWduZWQtb2ZmLWJ5LWNjOjoKKwlJZiB0aGlzIGlzIHNldCwgYWRkIGVtYWlscyBmb3VuZCBpbiBTaWduZWQtb2ZmLWJ5OiBvciBDYzogbGluZXMgdG8gdGhlCisJY2MgbGlzdC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5zaWduZWRvZmZieWNjYCBjb25maWd1cmF0aW9uCisJdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gLS1zaWduZWQtb2ZmLWJ5LWNjLgorCistLVtuby1dY2MtY292ZXI6OgorCUlmIHRoaXMgaXMgc2V0LCBlbWFpbHMgZm91bmQgaW4gQ2M6IGhlYWRlcnMgaW4gdGhlIGZpcnN0IHBhdGNoIG9mCisJdGhlIHNlcmllcyAodHlwaWNhbGx5IHRoZSBjb3ZlciBsZXR0ZXIpIGFyZSBhZGRlZCB0byB0aGUgY2MgbGlzdAorCWZvciBlYWNoIGVtYWlsIHNldC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5jY2NvdmVyJworCWNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gLS1uby1jYy1jb3Zlci4KKworLS1bbm8tXXRvLWNvdmVyOjoKKwlJZiB0aGlzIGlzIHNldCwgZW1haWxzIGZvdW5kIGluIFRvOiBoZWFkZXJzIGluIHRoZSBmaXJzdCBwYXRjaCBvZgorCXRoZSBzZXJpZXMgKHR5cGljYWxseSB0aGUgY292ZXIgbGV0dGVyKSBhcmUgYWRkZWQgdG8gdGhlIHRvIGxpc3QKKwlmb3IgZWFjaCBlbWFpbCBzZXQuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwudG9jb3ZlcicKKwljb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tbm8tdG8tY292ZXIuCisKKy0tc3VwcHJlc3MtY2M9PGNhdGVnb3J5Pjo6CisJU3BlY2lmeSBhbiBhZGRpdGlvbmFsIGNhdGVnb3J5IG9mIHJlY2lwaWVudHMgdG8gc3VwcHJlc3MgdGhlCisJYXV0by1jYyBvZjoKKysKKy0tCistICdhdXRob3InIHdpbGwgYXZvaWQgaW5jbHVkaW5nIHRoZSBwYXRjaCBhdXRob3IuCistICdzZWxmJyB3aWxsIGF2b2lkIGluY2x1ZGluZyB0aGUgc2VuZGVyLgorLSAnY2MnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZSBtZW50aW9uZWQgaW4gQ2MgbGluZXMgaW4gdGhlIHBhdGNoIGhlYWRlcgorICBleGNlcHQgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgorLSAnYm9keWNjJyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIENjIGxpbmVzIGluIHRoZQorICBwYXRjaCBib2R5IChjb21taXQgbWVzc2FnZSkgZXhjZXB0IGZvciBzZWxmICh1c2UgJ3NlbGYnIGZvciB0aGF0KS4KKy0gJ3NvYicgd2lsbCBhdm9pZCBpbmNsdWRpbmcgYW55b25lIG1lbnRpb25lZCBpbiBTaWduZWQtb2ZmLWJ5IGxpbmVzIGV4Y2VwdAorICBmb3Igc2VsZiAodXNlICdzZWxmJyBmb3IgdGhhdCkuCistICdtaXNjLWJ5JyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIEFja2VkLWJ5LAorICBSZXZpZXdlZC1ieSwgVGVzdGVkLWJ5IGFuZCBvdGhlciAiLWJ5IiBsaW5lcyBpbiB0aGUgcGF0Y2ggYm9keSwKKyAgZXhjZXB0IFNpZ25lZC1vZmYtYnkgKHVzZSAnc29iJyBmb3IgdGhhdCkuCistICdjY2NtZCcgd2lsbCBhdm9pZCBydW5uaW5nIHRoZSAtLWNjLWNtZC4KKy0gJ2JvZHknIGlzIGVxdWl2YWxlbnQgdG8gJ3NvYicgKyAnYm9keWNjJyArICdtaXNjLWJ5Jy4KKy0gJ2FsbCcgd2lsbCBzdXBwcmVzcyBhbGwgYXV0byBjYyB2YWx1ZXMuCistLQorKworRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5zdXBwcmVzc2NjYCBjb25maWd1cmF0aW9uIHZhbHVlOyBpZgordGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAnc2VsZicgaWYgLS1zdXBwcmVzcy1mcm9tIGlzCitzcGVjaWZpZWQsIGFzIHdlbGwgYXMgJ2JvZHknIGlmIC0tbm8tc2lnbmVkLW9mZi1jYyBpcyBzcGVjaWZpZWQuCisKKy0tW25vLV1zdXBwcmVzcy1mcm9tOjoKKwlJZiB0aGlzIGlzIHNldCwgZG8gbm90IGFkZCB0aGUgRnJvbTogYWRkcmVzcyB0byB0aGUgY2M6IGxpc3QuCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgYHNlbmRlbWFpbC5zdXBwcmVzc0Zyb21gIGNvbmZpZ3VyYXRpb24KKwl2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLW5vLXN1cHByZXNzLWZyb20uCisKKy0tW25vLV10aHJlYWQ6OgorCUlmIHRoaXMgaXMgc2V0LCB0aGUgSW4tUmVwbHktVG8gYW5kIFJlZmVyZW5jZXMgaGVhZGVycyB3aWxsIGJlCisJYWRkZWQgdG8gZWFjaCBlbWFpbCBzZW50LiAgV2hldGhlciBlYWNoIG1haWwgcmVmZXJzIHRvIHRoZQorCXByZXZpb3VzIGVtYWlsIChgZGVlcGAgdGhyZWFkaW5nIHBlciAnZ2l0IGZvcm1hdC1wYXRjaCcKKwl3b3JkaW5nKSBvciB0byB0aGUgZmlyc3QgZW1haWwgKGBzaGFsbG93YCB0aHJlYWRpbmcpIGlzCisJZ292ZXJuZWQgYnkgIi0tW25vLV1jaGFpbi1yZXBseS10byIuCisrCitJZiBkaXNhYmxlZCB3aXRoICItLW5vLXRocmVhZCIsIHRob3NlIGhlYWRlcnMgd2lsbCBub3QgYmUgYWRkZWQKKyh1bmxlc3Mgc3BlY2lmaWVkIHdpdGggLS1pbi1yZXBseS10bykuICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUKK2BzZW5kZW1haWwudGhyZWFkYCBjb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLAorZGVmYXVsdCB0byAtLXRocmVhZC4KKysKK0l0IGlzIHVwIHRvIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0IG5vIEluLVJlcGx5LVRvIGhlYWRlciBhbHJlYWR5CitleGlzdHMgd2hlbiAnZ2l0IHNlbmQtZW1haWwnIGlzIGFza2VkIHRvIGFkZCBpdCAoZXNwZWNpYWxseSBub3RlIHRoYXQKKydnaXQgZm9ybWF0LXBhdGNoJyBjYW4gYmUgY29uZmlndXJlZCB0byBkbyB0aGUgdGhyZWFkaW5nIGl0c2VsZikuCitGYWlsdXJlIHRvIGRvIHNvIG1heSBub3QgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgcmVzdWx0IGluIHRoZQorcmVjaXBpZW50J3MgTVVBLgorCisKK0FkbWluaXN0ZXJpbmcKK35+fn5+fn5+fn5+fn4KKworLS1jb25maXJtPTxtb2RlPjo6CisJQ29uZmlybSBqdXN0IGJlZm9yZSBzZW5kaW5nOgorKworLS0KKy0gJ2Fsd2F5cycgd2lsbCBhbHdheXMgY29uZmlybSBiZWZvcmUgc2VuZGluZworLSAnbmV2ZXInIHdpbGwgbmV2ZXIgY29uZmlybSBiZWZvcmUgc2VuZGluZworLSAnY2MnIHdpbGwgY29uZmlybSBiZWZvcmUgc2VuZGluZyB3aGVuIHNlbmQtZW1haWwgaGFzIGF1dG9tYXRpY2FsbHkKKyAgYWRkZWQgYWRkcmVzc2VzIGZyb20gdGhlIHBhdGNoIHRvIHRoZSBDYyBsaXN0CistICdjb21wb3NlJyB3aWxsIGNvbmZpcm0gYmVmb3JlIHNlbmRpbmcgdGhlIGZpcnN0IG1lc3NhZ2Ugd2hlbiB1c2luZyAtLWNvbXBvc2UuCistICdhdXRvJyBpcyBlcXVpdmFsZW50IHRvICdjYycgKyAnY29tcG9zZScKKy0tCisrCitEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLmNvbmZpcm1gIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQKK2lzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvICdhdXRvJyB1bmxlc3MgYW55IG9mIHRoZSBzdXBwcmVzcyBvcHRpb25zCitoYXZlIGJlZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGRlZmF1bHQgdG8gJ2NvbXBvc2UnLgorCistLWRyeS1ydW46OgorCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIGVtYWlscy4KKworLS1bbm8tXWZvcm1hdC1wYXRjaDo6CisJV2hlbiBhbiBhcmd1bWVudCBtYXkgYmUgdW5kZXJzdG9vZCBlaXRoZXIgYXMgYSByZWZlcmVuY2Ugb3IgYXMgYSBmaWxlIG5hbWUsCisJY2hvb3NlIHRvIHVuZGVyc3RhbmQgaXQgYXMgYSBmb3JtYXQtcGF0Y2ggYXJndW1lbnQgKGAtLWZvcm1hdC1wYXRjaGApCisJb3IgYXMgYSBmaWxlIG5hbWUgKGAtLW5vLWZvcm1hdC1wYXRjaGApLiBCeSBkZWZhdWx0LCB3aGVuIHN1Y2ggYSBjb25mbGljdAorCW9jY3VycywgZ2l0IHNlbmQtZW1haWwgd2lsbCBmYWlsLgorCistLXF1aWV0OjoKKwlNYWtlIGdpdC1zZW5kLWVtYWlsIGxlc3MgdmVyYm9zZS4gIE9uZSBsaW5lIHBlciBlbWFpbCBzaG91bGQgYmUKKwlhbGwgdGhhdCBpcyBvdXRwdXQuCisKKy0tW25vLV12YWxpZGF0ZTo6CisJUGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHBhdGNoZXMuCisJQ3VycmVudGx5LCB2YWxpZGF0aW9uIG1lYW5zIHRoZSBmb2xsb3dpbmc6CisrCistLQorCQkqCUludm9rZSB0aGUgc2VuZGVtYWlsLXZhbGlkYXRlIGhvb2sgaWYgcHJlc2VudCAoc2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0pLgorCQkqCVdhcm4gb2YgcGF0Y2hlcyB0aGF0IGNvbnRhaW4gbGluZXMgbG9uZ2VyIHRoYW4KKwkJCTk5OCBjaGFyYWN0ZXJzIHVubGVzcyBhIHN1aXRhYmxlIHRyYW5zZmVyIGVuY29kaW5nCisJCQkoJ2F1dG8nLCAnYmFzZTY0Jywgb3IgJ3F1b3RlZC1wcmludGFibGUnKSBpcyB1c2VkOworCQkJdGhpcyBpcyBkdWUgdG8gU01UUCBsaW1pdHMgYXMgZGVzY3JpYmVkIGJ5CisJCQlodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM1MzIyLnR4dC4KKy0tCisrCitEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiBgc2VuZGVtYWlsLnZhbGlkYXRlYDsgaWYgdGhpcyBpcyBub3Qgc2V0LAorZGVmYXVsdCB0byBgLS12YWxpZGF0ZWAuCisKKy0tZm9yY2U6OgorCVNlbmQgZW1haWxzIGV2ZW4gaWYgc2FmZXR5IGNoZWNrcyB3b3VsZCBwcmV2ZW50IGl0LgorCisKK0luZm9ybWF0aW9uCit+fn5+fn5+fn5+fgorCistLWR1bXAtYWxpYXNlczo6CisJSW5zdGVhZCBvZiB0aGUgbm9ybWFsIG9wZXJhdGlvbiwgZHVtcCB0aGUgc2hvcnRoYW5kIGFsaWFzIG5hbWVzIGZyb20KKwl0aGUgY29uZmlndXJlZCBhbGlhcyBmaWxlKHMpLCBvbmUgcGVyIGxpbmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLiBOb3RlLAorCXRoaXMgb25seSBpbmNsdWRlcyB0aGUgYWxpYXMgbmFtZSBhbmQgbm90IGl0cyBleHBhbmRlZCBlbWFpbCBhZGRyZXNzZXMuCisJU2VlICdzZW5kZW1haWwuYWxpYXNlc2ZpbGUnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFsaWFzZXMuCisKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitzZW5kZW1haWwuYWxpYXNlc0ZpbGU6OgorCVRvIGF2b2lkIHR5cGluZyBsb25nIGVtYWlsIGFkZHJlc3NlcywgcG9pbnQgdGhpcyB0byBvbmUgb3IgbW9yZQorCWVtYWlsIGFsaWFzZXMgZmlsZXMuICBZb3UgbXVzdCBhbHNvIHN1cHBseSBgc2VuZGVtYWlsLmFsaWFzRmlsZVR5cGVgLgorCitzZW5kZW1haWwuYWxpYXNGaWxlVHlwZTo6CisJRm9ybWF0IG9mIHRoZSBmaWxlKHMpIHNwZWNpZmllZCBpbiBzZW5kZW1haWwuYWxpYXNlc0ZpbGUuIE11c3QgYmUKKwlvbmUgb2YgJ211dHQnLCAnbWFpbHJjJywgJ3BpbmUnLCAnZWxtJywgb3IgJ2dudXMnLCBvciAnc2VuZG1haWwnLgorKworV2hhdCBhbiBhbGlhcyBmaWxlIGluIGVhY2ggZm9ybWF0IGxvb2tzIGxpa2UgY2FuIGJlIGZvdW5kIGluCit0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZW1haWwgcHJvZ3JhbSBvZiB0aGUgc2FtZSBuYW1lLiBUaGUKK2RpZmZlcmVuY2VzIGFuZCBsaW1pdGF0aW9ucyBmcm9tIHRoZSBzdGFuZGFyZCBmb3JtYXRzIGFyZQorZGVzY3JpYmVkIGJlbG93OgorKworLS0KK3NlbmRtYWlsOzsKKyoJUXVvdGVkIGFsaWFzZXMgYW5kIHF1b3RlZCBhZGRyZXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQ6IGxpbmVzIHRoYXQKKwljb250YWluIGEgYCJgIHN5bWJvbCBhcmUgaWdub3JlZC4KKyoJUmVkaXJlY3Rpb24gdG8gYSBmaWxlIChgL3BhdGgvbmFtZWApIG9yIHBpcGUgKGB8Y29tbWFuZGApIGlzIG5vdAorCXN1cHBvcnRlZC4KKyoJRmlsZSBpbmNsdXNpb24gKGA6aW5jbHVkZTogL3BhdGgvbmFtZWApIGlzIG5vdCBzdXBwb3J0ZWQuCisqCVdhcm5pbmdzIGFyZSBwcmludGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQgZm9yIGFueQorCWV4cGxpY2l0bHkgdW5zdXBwb3J0ZWQgY29uc3RydWN0cywgYW5kIGFueSBvdGhlciBsaW5lcyB0aGF0IGFyZSBub3QKKwlyZWNvZ25pemVkIGJ5IHRoZSBwYXJzZXIuCistLQorCitzZW5kZW1haWwubXVsdGlFZGl0OjoKKwlJZiB0cnVlIChkZWZhdWx0KSwgYSBzaW5nbGUgZWRpdG9yIGluc3RhbmNlIHdpbGwgYmUgc3Bhd25lZCB0byBlZGl0CisJZmlsZXMgeW91IGhhdmUgdG8gZWRpdCAocGF0Y2hlcyB3aGVuIGAtLWFubm90YXRlYCBpcyB1c2VkLCBhbmQgdGhlCisJc3VtbWFyeSB3aGVuIGAtLWNvbXBvc2VgIGlzIHVzZWQpLiBJZiBmYWxzZSwgZmlsZXMgd2lsbCBiZSBlZGl0ZWQgb25lCisJYWZ0ZXIgdGhlIG90aGVyLCBzcGF3bmluZyBhIG5ldyBlZGl0b3IgZWFjaCB0aW1lLgorCitzZW5kZW1haWwuY29uZmlybTo6CisJU2V0cyB0aGUgZGVmYXVsdCBmb3Igd2hldGhlciB0byBjb25maXJtIGJlZm9yZSBzZW5kaW5nLiBNdXN0IGJlCisJb25lIG9mICdhbHdheXMnLCAnbmV2ZXInLCAnY2MnLCAnY29tcG9zZScsIG9yICdhdXRvJy4gU2VlIGAtLWNvbmZpcm1gCisJaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24gZm9yIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHZhbHVlcy4KKworRVhBTVBMRVMKKy0tLS0tLS0tCitVc2UgZ21haWwgYXMgdGhlIHNtdHAgc2VydmVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUbyB1c2UgJ2dpdCBzZW5kLWVtYWlsJyB0byBzZW5kIHlvdXIgcGF0Y2hlcyB0aHJvdWdoIHRoZSBHTWFpbCBTTVRQIHNlcnZlciwKK2VkaXQgfi8uZ2l0Y29uZmlnIHRvIHNwZWNpZnkgeW91ciBhY2NvdW50IHNldHRpbmdzOgorCistLS0tCitbc2VuZGVtYWlsXQorCXNtdHBFbmNyeXB0aW9uID0gdGxzCisJc210cFNlcnZlciA9IHNtdHAuZ21haWwuY29tCisJc210cFVzZXIgPSB5b3VybmFtZUBnbWFpbC5jb20KKwlzbXRwU2VydmVyUG9ydCA9IDU4NworLS0tLQorCitJZiB5b3UgaGF2ZSBtdWx0aWZhY3RvciBhdXRoZW50aWNhdGlvbiBzZXR1cCBvbiB5b3VyIGdtYWlsIGFjY291bnQsIHlvdSB3aWxsCituZWVkIHRvIGdlbmVyYXRlIGFuIGFwcC1zcGVjaWZpYyBwYXNzd29yZCBmb3IgdXNlIHdpdGggJ2dpdCBzZW5kLWVtYWlsJy4gVmlzaXQKK2h0dHBzOi8vc2VjdXJpdHkuZ29vZ2xlLmNvbS9zZXR0aW5ncy9zZWN1cml0eS9hcHBwYXNzd29yZHMgdG8gY3JlYXRlIGl0LgorCitPbmNlIHlvdXIgY29tbWl0cyBhcmUgcmVhZHkgdG8gYmUgc2VudCB0byB0aGUgbWFpbGluZyBsaXN0LCBydW4gdGhlCitmb2xsb3dpbmcgY29tbWFuZHM6CisKKwkkIGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLU0gb3JpZ2luL21hc3RlciAtbyBvdXRnb2luZy8KKwkkIGVkaXQgb3V0Z29pbmcvMDAwMC0qCisJJCBnaXQgc2VuZC1lbWFpbCBvdXRnb2luZy8qCisKK1RoZSBmaXJzdCB0aW1lIHlvdSBydW4gaXQsIHlvdSB3aWxsIGJlIHByb21wdGVkIGZvciB5b3VyIGNyZWRlbnRpYWxzLiAgRW50ZXIgdGhlCithcHAtc3BlY2lmaWMgb3IgeW91ciByZWd1bGFyIHBhc3N3b3JkIGFzIGFwcHJvcHJpYXRlLiAgSWYgeW91IGhhdmUgY3JlZGVudGlhbAoraGVscGVyIGNvbmZpZ3VyZWQgKHNlZSBsaW5rZ2l0OmdpdC1jcmVkZW50aWFsWzFdKSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgc2F2ZWQgaW4KK3RoZSBjcmVkZW50aWFsIHN0b3JlIHNvIHlvdSB3b24ndCBoYXZlIHRvIHR5cGUgaXQgdGhlIG5leHQgdGltZS4KKworTm90ZTogdGhlIGZvbGxvd2luZyBjb3JlIFBlcmwgbW9kdWxlcyB0aGF0IG1heSBiZSBpbnN0YWxsZWQgd2l0aCB5b3VyCitkaXN0cmlidXRpb24gb2YgUGVybCBhcmUgcmVxdWlyZWQ6CitNSU1FOjpCYXNlNjQsIE1JTUU6OlF1b3RlZFByaW50LCBOZXQ6OkRvbWFpbiBhbmQgTmV0OjpTTVRQLgorVGhlc2UgYWRkaXRpb25hbCBQZXJsIG1vZHVsZXMgYXJlIGFsc28gcmVxdWlyZWQ6CitBdXRoZW46OlNBU0wgYW5kIE1haWw6OkFkZHJlc3MuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sIGxpbmtnaXQ6Z2l0LWltYXAtc2VuZFsxXSwgbWJveCg1KQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZmQxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0CkBAIC0wLDAgKzEsMTU2IEBACitnaXQtc2VuZC1wYWNrKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zZW5kLXBhY2sgLSBQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNlbmQtcGFjaycgWy0tYWxsXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0KKwkJWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXQorCQlbLS1bbm8tXXNpZ25lZHwtLXNpZ25lZD0odHJ1ZXxmYWxzZXxpZi1hc2tlZCldCisJCVs8aG9zdD46XTxkaXJlY3Rvcnk+IFs8cmVmPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitVc3VhbGx5IHlvdSB3b3VsZCB3YW50IHRvIHVzZSAnZ2l0IHB1c2gnLCB3aGljaCBpcyBhCitoaWdoZXItbGV2ZWwgd3JhcHBlciBvZiB0aGlzIGNvbW1hbmQsIGluc3RlYWQuIFNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCitJbnZva2VzICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiBhIHBvc3NpYmx5IHJlbW90ZSByZXBvc2l0b3J5LCBhbmQKK3VwZGF0ZXMgaXQgZnJvbSB0aGUgY3VycmVudCByZXBvc2l0b3J5LCBzZW5kaW5nIG5hbWVkIHJlZnMuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+OjoKKwlQYXRoIHRvIHRoZSAnZ2l0LXJlY2VpdmUtcGFjaycgcHJvZ3JhbSBvbiB0aGUgcmVtb3RlCisJZW5kLiAgU29tZXRpbWVzIHVzZWZ1bCB3aGVuIHB1c2hpbmcgdG8gYSByZW1vdGUKKwlyZXBvc2l0b3J5IG92ZXIgc3NoLCBhbmQgeW91IGRvIG5vdCBoYXZlIHRoZSBwcm9ncmFtIGluCisJYSBkaXJlY3Rvcnkgb24gdGhlIGRlZmF1bHQgJFBBVEguCisKKy0tZXhlYz08Z2l0LXJlY2VpdmUtcGFjaz46OgorCVNhbWUgYXMgLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+LgorCistLWFsbDo6CisJSW5zdGVhZCBvZiBleHBsaWNpdGx5IHNwZWNpZnlpbmcgd2hpY2ggcmVmcyB0byB1cGRhdGUsCisJdXBkYXRlIGFsbCBoZWFkcyB0aGF0IGxvY2FsbHkgZXhpc3QuCisKKy0tc3RkaW46OgorCVRha2UgdGhlIGxpc3Qgb2YgcmVmcyBmcm9tIHN0ZGluLCBvbmUgcGVyIGxpbmUuIElmIHRoZXJlCisJYXJlIHJlZnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaW4gYWRkaXRpb24gdG8gdGhpcworCW9wdGlvbiwgdGhlbiB0aGUgcmVmcyBmcm9tIHN0ZGluIGFyZSBwcm9jZXNzZWQgYWZ0ZXIgdGhvc2UKKwlvbiB0aGUgY29tbWFuZCBsaW5lLgorKworSWYgYC0tc3RhdGVsZXNzLXJwY2AgaXMgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggdGhpcyBvcHRpb24gdGhlbgordGhlIGxpc3Qgb2YgcmVmcyBtdXN0IGJlIGluIHBhY2tldCBmb3JtYXQgKHBrdC1saW5lKS4gRWFjaCByZWYgbXVzdAorYmUgaW4gYSBzZXBhcmF0ZSBwYWNrZXQsIGFuZCB0aGUgbGlzdCBtdXN0IGVuZCB3aXRoIGEgZmx1c2ggcGFja2V0LgorCistLWRyeS1ydW46OgorCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIHVwZGF0ZXMuCisKKy0tZm9yY2U6OgorCVVzdWFsbHksIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0CisJaXMgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSBsb2NhbCByZWYgdXNlZCB0byBvdmVyd3JpdGUgaXQuCisJVGhpcyBmbGFnIGRpc2FibGVzIHRoZSBjaGVjay4gIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0CisJdGhlIHJlbW90ZSByZXBvc2l0b3J5IGNhbiBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoCisJY2FyZS4KKworLS12ZXJib3NlOjoKKwlSdW4gdmVyYm9zZWx5LgorCistLXRoaW46OgorCVNlbmQgYSAidGhpbiIgcGFjaywgd2hpY2ggcmVjb3JkcyBvYmplY3RzIGluIGRlbHRpZmllZCBmb3JtIGJhc2VkCisJb24gb2JqZWN0cyBub3QgaW5jbHVkZWQgaW4gdGhlIHBhY2sgdG8gcmVkdWNlIG5ldHdvcmsgdHJhZmZpYy4KKworLS1hdG9taWM6OgorCVVzZSBhbiBhdG9taWMgdHJhbnNhY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSByZWZzLiBJZiBhbnkgb2YgdGhlIHJlZnMKKwlmYWlscyB0byB1cGRhdGUgdGhlbiB0aGUgZW50aXJlIHB1c2ggd2lsbCBmYWlsIHdpdGhvdXQgY2hhbmdpbmcgYW55CisJcmVmcy4KKworLS1bbm8tXXNpZ25lZDo6CistLXNpZ25lZD0odHJ1ZXxmYWxzZXxpZi1hc2tlZCk6OgorCUdQRy1zaWduIHRoZSBwdXNoIHJlcXVlc3QgdG8gdXBkYXRlIHJlZnMgb24gdGhlIHJlY2VpdmluZworCXNpZGUsIHRvIGFsbG93IGl0IHRvIGJlIGNoZWNrZWQgYnkgdGhlIGhvb2tzIGFuZC9vciBiZQorCWxvZ2dlZC4gIElmIGBmYWxzZWAgb3IgYC0tbm8tc2lnbmVkYCwgbm8gc2lnbmluZyB3aWxsIGJlCisJYXR0ZW1wdGVkLiAgSWYgYHRydWVgIG9yIGAtLXNpZ25lZGAsIHRoZSBwdXNoIHdpbGwgZmFpbCBpZiB0aGUKKwlzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaWduZWQgcHVzaGVzLiAgSWYgc2V0IHRvIGBpZi1hc2tlZGAsCisJc2lnbiBpZiBhbmQgb25seSBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHNpZ25lZCBwdXNoZXMuICBUaGUgcHVzaAorCXdpbGwgYWxzbyBmYWlsIGlmIHRoZSBhY3R1YWwgY2FsbCB0byBgZ3BnIC0tc2lnbmAgZmFpbHMuICBTZWUKKwlsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0gZm9yIHRoZSBkZXRhaWxzIG9uIHRoZSByZWNlaXZpbmcgZW5kLgorCistLXB1c2gtb3B0aW9uPTxzdHJpbmc+OjoKKwlQYXNzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGFzIGEgcHVzaCBvcHRpb24gZm9yIGNvbnN1bXB0aW9uIGJ5CisJaG9va3Mgb24gdGhlIHNlcnZlciBzaWRlLiAgSWYgdGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgcHVzaAorCW9wdGlvbnMsIGVycm9yIG91dC4gIFNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdIGFuZAorCWxpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIGRldGFpbHMuCisKKzxob3N0Pjo6CisJQSByZW1vdGUgaG9zdCB0byBob3VzZSB0aGUgcmVwb3NpdG9yeS4gIFdoZW4gdGhpcworCXBhcnQgaXMgc3BlY2lmaWVkLCAnZ2l0LXJlY2VpdmUtcGFjaycgaXMgaW52b2tlZCB2aWEKKwlzc2guCisKKzxkaXJlY3Rvcnk+OjoKKwlUaGUgcmVwb3NpdG9yeSB0byB1cGRhdGUuCisKKzxyZWY+Li4uOjoKKwlUaGUgcmVtb3RlIHJlZnMgdG8gdXBkYXRlLgorCisKK1NQRUNJRllJTkcgVEhFIFJFRlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gc3BlY2lmeSB3aGljaCByZWZzIHRvIHVwZGF0ZSBvbiB0aGUKK3JlbW90ZSBlbmQuCisKK1dpdGggYC0tYWxsYCBmbGFnLCBhbGwgcmVmcyB0aGF0IGV4aXN0IGxvY2FsbHkgYXJlIHRyYW5zZmVycmVkIHRvCit0aGUgcmVtb3RlIHNpZGUuICBZb3UgY2Fubm90IHNwZWNpZnkgYW55ICc8cmVmPicgaWYgeW91IHVzZQordGhpcyBmbGFnLgorCitXaXRob3V0IGAtLWFsbGAgYW5kIHdpdGhvdXQgYW55ICc8cmVmPicsIHRoZSBoZWFkcyB0aGF0IGV4aXN0Citib3RoIG9uIHRoZSBsb2NhbCBzaWRlIGFuZCBvbiB0aGUgcmVtb3RlIHNpZGUgYXJlIHVwZGF0ZWQuCisKK1doZW4gb25lIG9yIG1vcmUgJzxyZWY+JyBhcmUgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKHdoZXRoZXIgb24gdGhlCitjb21tYW5kIGxpbmUgb3IgdmlhIGAtLXN0ZGluYCksIGl0IGNhbiBiZSBlaXRoZXIgYQorc2luZ2xlIHBhdHRlcm4sIG9yIGEgcGFpciBvZiBzdWNoIHBhdHRlcm4gc2VwYXJhdGVkIGJ5IGEgY29sb24KKyI6IiAodGhpcyBtZWFucyB0aGF0IGEgcmVmIG5hbWUgY2Fubm90IGhhdmUgYSBjb2xvbiBpbiBpdCkuICBBCitzaW5nbGUgcGF0dGVybiAnPG5hbWU+JyBpcyBqdXN0IGEgc2hvcnRoYW5kIGZvciAnPG5hbWU+OjxuYW1lPicuCisKK0VhY2ggcGF0dGVybiBwYWlyIGNvbnNpc3RzIG9mIHRoZSBzb3VyY2Ugc2lkZSAoYmVmb3JlIHRoZSBjb2xvbikKK2FuZCB0aGUgZGVzdGluYXRpb24gc2lkZSAoYWZ0ZXIgdGhlIGNvbG9uKS4gIFRoZSByZWYgdG8gYmUKK3B1c2hlZCBpcyBkZXRlcm1pbmVkIGJ5IGZpbmRpbmcgYSBtYXRjaCB0aGF0IG1hdGNoZXMgdGhlIHNvdXJjZQorc2lkZSwgYW5kIHdoZXJlIGl0IGlzIHB1c2hlZCBpcyBkZXRlcm1pbmVkIGJ5IHVzaW5nIHRoZQorZGVzdGluYXRpb24gc2lkZS4gVGhlIHJ1bGVzIHVzZWQgdG8gbWF0Y2ggYSByZWYgYXJlIHRoZSBzYW1lCitydWxlcyB1c2VkIGJ5ICdnaXQgcmV2LXBhcnNlJyB0byByZXNvbHZlIGEgc3ltYm9saWMgcmVmCituYW1lLiBTZWUgbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgorCisgLSBJdCBpcyBhbiBlcnJvciBpZiA8c3JjPiBkb2VzIG5vdCBtYXRjaCBleGFjdGx5IG9uZSBvZiB0aGUKKyAgIGxvY2FsIHJlZnMuCisKKyAtIEl0IGlzIGFuIGVycm9yIGlmIDxkc3Q+IG1hdGNoZXMgbW9yZSB0aGFuIG9uZSByZW1vdGUgcmVmcy4KKworIC0gSWYgPGRzdD4gZG9lcyBub3QgbWF0Y2ggYW55IHJlbW90ZSByZWYsIGVpdGhlcgorCisgICAqIGl0IGhhcyB0byBzdGFydCB3aXRoICJyZWZzLyI7IDxkc3Q+IGlzIHVzZWQgYXMgdGhlCisgICAgIGRlc3RpbmF0aW9uIGxpdGVyYWxseSBpbiB0aGlzIGNhc2UuCisKKyAgICogPHNyYz4gPT0gPGRzdD4gYW5kIHRoZSByZWYgdGhhdCBtYXRjaGVkIHRoZSA8c3JjPiBtdXN0IG5vdAorICAgICBleGlzdCBpbiB0aGUgc2V0IG9mIHJlbW90ZSByZWZzOyB0aGUgcmVmIG1hdGNoZWQgPHNyYz4KKyAgICAgbG9jYWxseSBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbi4KKworV2l0aG91dCBgLS1mb3JjZWAsIHRoZSA8c3JjPiByZWYgaXMgc3RvcmVkIGF0IHRoZSByZW1vdGUgb25seSBpZgorPGRzdD4gZG9lcyBub3QgZXhpc3QsIG9yIDxkc3Q+IGlzIGEgcHJvcGVyIHN1YnNldCAoaS5lLiBhbgorYW5jZXN0b3IpIG9mIDxzcmM+LiAgVGhpcyBjaGVjaywga25vd24gYXMgImZhc3QtZm9yd2FyZCBjaGVjayIsCitpcyBwZXJmb3JtZWQgaW4gb3JkZXIgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIHRoZQorcmVtb3RlIHJlZiBhbmQgbG9zZSBvdGhlciBwZW9wbGVzJyBjb21taXRzIGZyb20gdGhlcmUuCisKK1dpdGggYC0tZm9yY2VgLCB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIGlzIGRpc2FibGVkIGZvciBhbGwgcmVmcy4KKworT3B0aW9uYWxseSwgYSA8cmVmPiBwYXJhbWV0ZXIgY2FuIGJlIHByZWZpeGVkIHdpdGggYSBwbHVzICcrJyBzaWduCit0byBkaXNhYmxlIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgb25seSBvbiB0aGF0IHJlZi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaC1pMThuLS1lbnZzdWJzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaC1pMThuLS1lbnZzdWJzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmYWY5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4tLWVudnN1YnN0LnR4dApAQCAtMCwwICsxLDM2IEBACitnaXQtc2gtaTE4bntsaXRkZH1lbnZzdWJzdCgxKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNoLWkxOG4tLWVudnN1YnN0IC0gR2l0J3Mgb3duIGVudnN1YnN0KDEpIGZvciBpMThuIGZhbGxiYWNrcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2V2YWxfZ2V0dGV4dCAoKSB7CisJcHJpbnRmICIlcyIgIiQxIiB8ICgKKwkJZXhwb3J0IFBBVEggJCgnZ2l0IHNoLWkxOG57bGl0ZGR9ZW52c3Vic3QnIC0tdmFyaWFibGVzICIkMSIpOworCQknZ2l0IHNoLWkxOG57bGl0ZGR9ZW52c3Vic3QnICIkMSIKKwkpCit9CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIG5vdCBhIGNvbW1hbmQgdGhlIGVuZCB1c2VyIHdvdWxkIHdhbnQgdG8gcnVuLiAgRXZlci4KK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBtZWFudCBmb3IgcGVvcGxlIHdobyBhcmUgc3R1ZHlpbmcgdGhlCitwbHVtYmluZyBzY3JpcHRzIGFuZC9vciBhcmUgd3JpdGluZyBuZXcgb25lcy4KKworJ2dpdCBzaC1pMThue2xpdGRkfWVudnN1YnN0JyBpcyBHaXQncyBzdHJpcHBlZC1kb3duIGNvcHkgb2YgdGhlIEdOVQorYGVudnN1YnN0KDEpYCBwcm9ncmFtIHRoYXQgY29tZXMgd2l0aCB0aGUgR05VIGdldHRleHQgcGFja2FnZS4gSXQncwordXNlZCBpbnRlcm5hbGx5IGJ5IGxpbmtnaXQ6Z2l0LXNoLWkxOG5bMV0gdG8gaW50ZXJwb2xhdGUgdGhlIHZhcmlhYmxlcworcGFzc2VkIHRvIHRoZSBgZXZhbF9nZXR0ZXh0YCBmdW5jdGlvbi4KKworTm8gcHJvbWlzZXMgYXJlIG1hZGUgYWJvdXQgdGhlIGludGVyZmFjZSwgb3IgdGhhdCB0aGlzCitwcm9ncmFtIHdvbid0IGRpc2FwcGVhciB3aXRob3V0IHdhcm5pbmcgaW4gdGhlIG5leHQgdmVyc2lvbgorb2YgR2l0LiBEb24ndCB1c2UgaXQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2gtaTE4bi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaC1pMThuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGNmNDljCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtaTE4bi50eHQKQEAgLTAsMCArMSw0MyBAQAorZ2l0LXNoLWkxOG4oMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaC1pMThuIC0gR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJy4gIiQoZ2l0IC0tZXhlYy1wYXRoKS9naXQtc2gtaTE4biInCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIG5vdCBhIGNvbW1hbmQgdGhlIGVuZCB1c2VyIHdvdWxkIHdhbnQgdG8gcnVuLiAgRXZlci4KK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBtZWFudCBmb3IgcGVvcGxlIHdobyBhcmUgc3R1ZHlpbmcgdGhlCitQb3JjZWxhaW4taXNoIHNjcmlwdHMgYW5kL29yIGFyZSB3cml0aW5nIG5ldyBvbmVzLgorCitUaGUgJ2dpdCBzaC1pMThuIHNjcmlwdGxldCBpcyBkZXNpZ25lZCB0byBiZSBzb3VyY2VkICh1c2luZworYC5gKSBieSBHaXQncyBwb3JjZWxhaW4gcHJvZ3JhbXMgaW1wbGVtZW50ZWQgaW4gc2hlbGwKK3NjcmlwdC4gSXQgcHJvdmlkZXMgd3JhcHBlcnMgZm9yIHRoZSBHTlUgYGdldHRleHRgIGFuZAorYGV2YWxfZ2V0dGV4dGAgZnVuY3Rpb25zIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYGdldHRleHQuc2hgCitzY3JpcHQsIGFuZCBwcm92aWRlcyBwYXNzLXRocm91Z2ggZmFsbGJhY2tzIG9uIHN5c3RlbXMKK3dpdGhvdXQgR05VIGdldHRleHQuCisKK0ZVTkNUSU9OUworLS0tLS0tLS0tCisKK2dldHRleHQ6OgorCUN1cnJlbnRseSBhIGR1bW15IGZhbGwtdGhyb3VnaCBmdW5jdGlvbiBpbXBsZW1lbnRlZCBhcyBhIHdyYXBwZXIKKwlhcm91bmQgYHByaW50ZigxKWAuIFdpbGwgYmUgcmVwbGFjZWQgYnkgYSByZWFsIGdldHRleHQKKwlpbXBsZW1lbnRhdGlvbiBpbiBhIGxhdGVyIHZlcnNpb24uCisKK2V2YWxfZ2V0dGV4dDo6CisJQ3VycmVudGx5IGEgZHVtbXkgZmFsbC10aHJvdWdoIGZ1bmN0aW9uIGltcGxlbWVudGVkIGFzIGEgd3JhcHBlcgorCWFyb3VuZCBgcHJpbnRmKDEpYCB3aXRoIHZhcmlhYmxlcyBleHBhbmRlZCBieSB0aGUKKwlsaW5rZ2l0OmdpdC1zaC1pMThue2xpdGRkfWVudnN1YnN0WzFdIGhlbHBlci4gV2lsbCBiZSByZXBsYWNlZCBieSBhCisJcmVhbCBnZXR0ZXh0IGltcGxlbWVudGF0aW9uIGluIGEgbGF0ZXIgdmVyc2lvbi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaC1zZXR1cC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaC1zZXR1cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzMjYxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dApAQCAtMCwwICsxLDk1IEBACitnaXQtc2gtc2V0dXAoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2gtc2V0dXAgLSBDb21tb24gR2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJy4gIiQoZ2l0IC0tZXhlYy1wYXRoKS9naXQtc2gtc2V0dXAiJworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyBub3QgYSBjb21tYW5kIHRoZSBlbmQgdXNlciB3b3VsZCB3YW50IHRvIHJ1bi4gIEV2ZXIuCitUaGlzIGRvY3VtZW50YXRpb24gaXMgbWVhbnQgZm9yIHBlb3BsZSB3aG8gYXJlIHN0dWR5aW5nIHRoZQorUG9yY2VsYWluLWlzaCBzY3JpcHRzIGFuZC9vciBhcmUgd3JpdGluZyBuZXcgb25lcy4KKworVGhlICdnaXQgc2gtc2V0dXAnIHNjcmlwdGxldCBpcyBkZXNpZ25lZCB0byBiZSBzb3VyY2VkICh1c2luZworYC5gKSBieSBvdGhlciBzaGVsbCBzY3JpcHRzIHRvIHNldCB1cCBzb21lIHZhcmlhYmxlcyBwb2ludGluZyBhdAordGhlIG5vcm1hbCBHaXQgZGlyZWN0b3JpZXMgYW5kIGEgZmV3IGhlbHBlciBzaGVsbCBmdW5jdGlvbnMuCisKK0JlZm9yZSBzb3VyY2luZyBpdCwgeW91ciBzY3JpcHQgc2hvdWxkIHNldCB1cCBhIGZldyB2YXJpYWJsZXM7CitgVVNBR0VgIChhbmQgYExPTkdfVVNBR0VgLCBpZiBhbnkpIGlzIHVzZWQgdG8gZGVmaW5lIG1lc3NhZ2UKK2dpdmVuIGJ5IGB1c2FnZSgpYCBzaGVsbCBmdW5jdGlvbi4gIGBTVUJESVJFQ1RPUllfT0tgIGNhbiBiZSBzZXQKK2lmIHRoZSBzY3JpcHQgY2FuIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nIHRyZWUKKyhzb21lIGNvbW1hbmRzIGRvIG5vdCkuCisKK1RoZSBzY3JpcHRsZXQgc2V0cyBgR0lUX0RJUmAgYW5kIGBHSVRfT0JKRUNUX0RJUkVDVE9SWWAgc2hlbGwKK3ZhcmlhYmxlcywgYnV0IGRvZXMgKm5vdCogZXhwb3J0IHRoZW0gdG8gdGhlIGVudmlyb25tZW50LgorCitGVU5DVElPTlMKKy0tLS0tLS0tLQorCitkaWU6OgorCWV4aXQgYWZ0ZXIgZW1pdHRpbmcgdGhlIHN1cHBsaWVkIGVycm9yIG1lc3NhZ2UgdG8gdGhlCisJc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgorCit1c2FnZTo6CisJZGllIHdpdGggdGhlIHVzYWdlIG1lc3NhZ2UuCisKK3NldF9yZWZsb2dfYWN0aW9uOjoKKwlTZXQgYEdJVF9SRUZMT0dfQUNUSU9OYCBlbnZpcm9ubWVudCB0byBhIGdpdmVuIHN0cmluZyAodHlwaWNhbGx5CisJdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0pIHVubGVzcyBpdCBpcyBhbHJlYWR5IHNldC4gIFdoZW5ldmVyCisJdGhlIHNjcmlwdCBydW5zIGEgYGdpdGAgY29tbWFuZCB0aGF0IHVwZGF0ZXMgcmVmcywgYSByZWZsb2cKKwllbnRyeSBpcyBjcmVhdGVkIHVzaW5nIHRoZSB2YWx1ZSBvZiB0aGlzIHN0cmluZyB0byBsZWF2ZSB0aGUKKwlyZWNvcmQgb2Ygd2hhdCBjb21tYW5kIHVwZGF0ZWQgdGhlIHJlZi4KKworZ2l0X2VkaXRvcjo6CisJcnVucyBhbiBlZGl0b3Igb2YgdXNlcidzIGNob2ljZSAoR0lUX0VESVRPUiwgY29yZS5lZGl0b3IsIFZJU1VBTCBvcgorCUVESVRPUikgb24gYSBnaXZlbiBmaWxlLCBidXQgZXJyb3Igb3V0IGlmIG5vIGVkaXRvciBpcyBzcGVjaWZpZWQKKwlhbmQgdGhlIHRlcm1pbmFsIGlzIGR1bWIuCisKK2lzX2JhcmVfcmVwb3NpdG9yeTo6CisJb3V0cHV0cyBgdHJ1ZWAgb3IgYGZhbHNlYCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbQorCXRvIGluZGljYXRlIGlmIHRoZSByZXBvc2l0b3J5IGlzIGEgYmFyZSByZXBvc2l0b3J5CisJKGkuZS4gd2l0aG91dCBhbiBhc3NvY2lhdGVkIHdvcmtpbmcgdHJlZSkuCisKK2NkX3RvX3RvcGxldmVsOjoKKwlydW5zIGNoZGlyIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLgorCityZXF1aXJlX3dvcmtfdHJlZTo6CisJY2hlY2tzIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyB3aXRoaW4gdGhlIHdvcmtpbmcgdHJlZQorCW9mIHRoZSByZXBvc2l0b3J5LCBhbmQgb3RoZXJ3aXNlIGRpZXMuCisKK3JlcXVpcmVfd29ya190cmVlX2V4aXN0czo6CisJY2hlY2tzIGlmIHRoZSB3b3JraW5nIHRyZWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXBvc2l0b3J5CisJZXhpc3RzLCBhbmQgb3RoZXJ3aXNlIGRpZXMuICBPZnRlbiBkb25lIGJlZm9yZSBjYWxsaW5nCisJY2RfdG9fdG9wbGV2ZWwsIHdoaWNoIGlzIGltcG9zc2libGUgdG8gZG8gaWYgdGhlcmUgaXMgbm8KKwl3b3JraW5nIHRyZWUuCisKK3JlcXVpcmVfY2xlYW5fd29ya190cmVlIDxhY3Rpb24+IFs8aGludD5dOjoKKwljaGVja3MgdGhhdCB0aGUgd29ya2luZyB0cmVlIGFuZCBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlCisJcmVwb3NpdG9yeSBoYXZlIG5vIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gdHJhY2tlZCBmaWxlcy4KKwlPdGhlcndpc2UgaXQgZW1pdHMgYW4gZXJyb3IgbWVzc2FnZSBvZiB0aGUgZm9ybSBgQ2Fubm90CisJPGFjdGlvbj46IDxyZWFzb24+LiA8aGludD5gLCBhbmQgZGllcy4gIEV4YW1wbGU6CisrCistLS0tLS0tLS0tLS0tLS0tCityZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSByZWJhc2UgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCistLS0tLS0tLS0tLS0tLS0tCisKK2dldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQ6OgorCW91dHB1dHMgY29kZSBmb3IgdXNlIHdpdGggZXZhbCB0byBzZXQgdGhlIEdJVF9BVVRIT1JfTkFNRSwKKwlHSVRfQVVUSE9SX0VNQUlMIGFuZCBHSVRfQVVUSE9SX0RBVEUgdmFyaWFibGVzIGZvciBhIGdpdmVuIGNvbW1pdC4KKworY3JlYXRlX3ZpcnR1YWxfYmFzZTo6CisJbW9kaWZpZXMgdGhlIGZpcnN0IGZpbGUgc28gb25seSBsaW5lcyBpbiBjb21tb24gd2l0aCB0aGUKKwlzZWNvbmQgZmlsZSByZW1haW4uIElmIHRoZXJlIGlzIGluc3VmZmljaWVudCBjb21tb24gbWF0ZXJpYWwsCisJdGhlbiB0aGUgZmlyc3QgZmlsZSBpcyBsZWZ0IGVtcHR5LiBUaGUgcmVzdWx0IGlzIHN1aXRhYmxlCisJYXMgYSB2aXJ0dWFsIGJhc2UgaW5wdXQgZm9yIGEgMy13YXkgbWVyZ2UuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzYxZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKQEAgLTAsMCArMSwxMDYgQEAKK2dpdC1zaGVsbCgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaGVsbCAtIFJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydjaHNoJyAtcyAkKGNvbW1hbmQgLXYgZ2l0LXNoZWxsKSA8dXNlcj4KKydnaXQgY2xvbmUnIDx1c2VyPmBAbG9jYWxob3N0Oi9wYXRoL3RvL3JlcG8uZ2l0YAorJ3NzaCcgPHVzZXI+YEBsb2NhbGhvc3RgCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgbG9naW4gc2hlbGwgZm9yIFNTSCBhY2NvdW50cyB0byBwcm92aWRlIHJlc3RyaWN0ZWQgR2l0IGFjY2Vzcy4KK0l0IHBlcm1pdHMgZXhlY3V0aW9uIG9ubHkgb2Ygc2VydmVyLXNpZGUgR2l0IGNvbW1hbmRzIGltcGxlbWVudGluZyB0aGUKK3B1bGwvcHVzaCBmdW5jdGlvbmFsaXR5LCBwbHVzIGN1c3RvbSBjb21tYW5kcyBwcmVzZW50IGluIGEgc3ViZGlyZWN0b3J5CituYW1lZCBgZ2l0LXNoZWxsLWNvbW1hbmRzYCBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorCitDT01NQU5EUworLS0tLS0tLS0KKworJ2dpdCBzaGVsbCcgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFmdGVyIHRoZSBgLWNgIG9wdGlvbjoKKworJ2dpdCByZWNlaXZlLXBhY2sgPGFyZ3VtZW50Pic6OgorJ2dpdCB1cGxvYWQtcGFjayA8YXJndW1lbnQ+Jzo6CisnZ2l0IHVwbG9hZC1hcmNoaXZlIDxhcmd1bWVudD4nOjoKKwlDYWxsIHRoZSBjb3JyZXNwb25kaW5nIHNlcnZlci1zaWRlIGNvbW1hbmQgdG8gc3VwcG9ydAorCXRoZSBjbGllbnQncyAnZ2l0IHB1c2gnLCAnZ2l0IGZldGNoJywgb3IgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJworCXJlcXVlc3QuCisnY3ZzIHNlcnZlcic6OgorCUltaXRhdGUgYSBDVlMgc2VydmVyLiAgU2VlIGxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXS4KKworSWYgYSBgfi9naXQtc2hlbGwtY29tbWFuZHNgIGRpcmVjdG9yeSBpcyBwcmVzZW50LCAnZ2l0IHNoZWxsJyB3aWxsCithbHNvIGhhbmRsZSBvdGhlciwgY3VzdG9tIGNvbW1hbmRzIGJ5IHJ1bm5pbmcKKyJgZ2l0LXNoZWxsLWNvbW1hbmRzLzxjb21tYW5kPiA8YXJndW1lbnRzPmAiIGZyb20gdGhlIHVzZXIncyBob21lCitkaXJlY3RvcnkuCisKK0lOVEVSQUNUSVZFIFVTRQorLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIHRoZSBjb21tYW5kcyBhYm92ZSBjYW4gYmUgZXhlY3V0ZWQgb25seSB3aXRoIHRoZSBgLWNgCitvcHRpb247IHRoZSBzaGVsbCBpcyBub3QgaW50ZXJhY3RpdmUuCisKK0lmIGEgYH4vZ2l0LXNoZWxsLWNvbW1hbmRzYCBkaXJlY3RvcnkgaXMgcHJlc2VudCwgJ2dpdCBzaGVsbCcKK2NhbiBhbHNvIGJlIHJ1biBpbnRlcmFjdGl2ZWx5ICh3aXRoIG5vIGFyZ3VtZW50cykuICBJZiBhIGBoZWxwYAorY29tbWFuZCBpcyBwcmVzZW50IGluIHRoZSBgZ2l0LXNoZWxsLWNvbW1hbmRzYCBkaXJlY3RvcnksIGl0IGlzCitydW4gdG8gcHJvdmlkZSB0aGUgdXNlciB3aXRoIGFuIG92ZXJ2aWV3IG9mIGFsbG93ZWQgYWN0aW9ucy4gIFRoZW4gYQorImdpdD4gIiBwcm9tcHQgaXMgcHJlc2VudGVkIGF0IHdoaWNoIG9uZSBjYW4gZW50ZXIgYW55IG9mIHRoZQorY29tbWFuZHMgZnJvbSB0aGUgYGdpdC1zaGVsbC1jb21tYW5kc2AgZGlyZWN0b3J5LCBvciBgZXhpdGAgdG8gY2xvc2UKK3RoZSBjb25uZWN0aW9uLgorCitHZW5lcmFsbHkgdGhpcyBtb2RlIGlzIHVzZWQgYXMgYW4gYWRtaW5pc3RyYXRpdmUgaW50ZXJmYWNlIHRvIGFsbG93Cit1c2VycyB0byBsaXN0IHJlcG9zaXRvcmllcyB0aGV5IGhhdmUgYWNjZXNzIHRvLCBjcmVhdGUsIGRlbGV0ZSwgb3IKK3JlbmFtZSByZXBvc2l0b3JpZXMsIG9yIGNoYW5nZSByZXBvc2l0b3J5IGRlc2NyaXB0aW9ucyBhbmQKK3Blcm1pc3Npb25zLgorCitJZiBhIGBuby1pbnRlcmFjdGl2ZS1sb2dpbmAgY29tbWFuZCBleGlzdHMsIHRoZW4gaXQgaXMgcnVuIGFuZCB0aGUKK2ludGVyYWN0aXZlIHNoZWxsIGlzIGFib3J0ZWQuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUbyBkaXNhYmxlIGludGVyYWN0aXZlIGxvZ2lucywgZGlzcGxheWluZyBhIGdyZWV0aW5nIGluc3RlYWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgY2hzaCAtcyAvdXNyL2Jpbi9naXQtc2hlbGwKKyQgbWtkaXIgJEhPTUUvZ2l0LXNoZWxsLWNvbW1hbmRzCiskIGNhdCA+JEhPTUUvZ2l0LXNoZWxsLWNvbW1hbmRzL25vLWludGVyYWN0aXZlLWxvZ2luIDw8XEVPRgorIyEvYmluL3NoCitwcmludGYgJyVzXG4nICJIaSAkVVNFUiEgWW91J3ZlIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVkLCBidXQgSSBkbyBub3QiCitwcmludGYgJyVzXG4nICJwcm92aWRlIGludGVyYWN0aXZlIHNoZWxsIGFjY2Vzcy4iCitleGl0IDEyOAorRU9GCiskIGNobW9kICt4ICRIT01FL2dpdC1zaGVsbC1jb21tYW5kcy9uby1pbnRlcmFjdGl2ZS1sb2dpbgorLS0tLS0tLS0tLS0tLS0tLQorCitUbyBlbmFibGUgZ2l0LWN2c3NlcnZlciBhY2Nlc3MgKHdoaWNoIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSB0aGUKK2Buby1pbnRlcmFjdGl2ZS1sb2dpbmAgZXhhbXBsZSBhYm92ZSBhcyBhIHByZXJlcXVpc2l0ZSwgYXMgY3JlYXRpbmcKK3RoZSBnaXQtc2hlbGwtY29tbWFuZHMgZGlyZWN0b3J5IGFsbG93cyBpbnRlcmFjdGl2ZSBsb2dpbnMpOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGNhdCA+JEhPTUUvZ2l0LXNoZWxsLWNvbW1hbmRzL2N2cyA8PFxFT0YKK2lmICEgdGVzdCAkIyA9IDEgJiYgdGVzdCAiJDEiID0gInNlcnZlciIKK3RoZW4KKwllY2hvID4mMiAiZ2l0LWN2c3NlcnZlciBvbmx5IGhhbmRsZXMgXCJzZXJ2ZXJcIiIKKwlleGl0IDEKK2ZpCitleGVjIGdpdCBjdnNzZXJ2ZXIgc2VydmVyCitFT0YKKyQgY2htb2QgK3ggJEhPTUUvZ2l0LXNoZWxsLWNvbW1hbmRzL2N2cworLS0tLS0tLS0tLS0tLS0tLQorCitTRUUgQUxTTworLS0tLS0tLS0KK3NzaCgxKSwKK2xpbmtnaXQ6Z2l0LWRhZW1vblsxXSwKK2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL1JFQURNRQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzJlYTdmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CkBAIC0wLDAgKzEsOTMgQEAKK2dpdC1zaG9ydGxvZygxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG9ydGxvZyAtIFN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzaG9ydGxvZycgWzxvcHRpb25zPl0gWzxyZXZpc2lvbiByYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0KK2dpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCAnZ2l0IHNob3J0bG9nJyBbPG9wdGlvbnM+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1N1bW1hcml6ZXMgJ2dpdCBsb2cnIG91dHB1dCBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgaW5jbHVzaW9uCitpbiByZWxlYXNlIGFubm91bmNlbWVudHMuIEVhY2ggY29tbWl0IHdpbGwgYmUgZ3JvdXBlZCBieSBhdXRob3IgYW5kIHRpdGxlLgorCitBZGRpdGlvbmFsbHksICJbUEFUQ0hdIiB3aWxsIGJlIHN0cmlwcGVkIGZyb20gdGhlIGNvbW1pdCBkZXNjcmlwdGlvbi4KKworSWYgbm8gcmV2aXNpb25zIGFyZSBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgZWl0aGVyIHN0YW5kYXJkIGlucHV0CitpcyBub3QgYSB0ZXJtaW5hbCBvciB0aGVyZSBpcyBubyBjdXJyZW50IGJyYW5jaCwgJ2dpdCBzaG9ydGxvZycgd2lsbAorb3V0cHV0IGEgc3VtbWFyeSBvZiB0aGUgbG9nIHJlYWQgZnJvbSBzdGFuZGFyZCBpbnB1dCwgd2l0aG91dAorcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKworLW46OgorLS1udW1iZXJlZDo6CisJU29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIGluc3RlYWQKKwlvZiBhdXRob3IgYWxwaGFiZXRpYyBvcmRlci4KKworLXM6OgorLS1zdW1tYXJ5OjoKKwlTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb24gYW5kIHByb3ZpZGUgYSBjb21taXQgY291bnQgc3VtbWFyeSBvbmx5LgorCistZTo6CistLWVtYWlsOjoKKwlTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yLgorCistLWZvcm1hdFs9PGZvcm1hdD5dOjoKKwlJbnN0ZWFkIG9mIHRoZSBjb21taXQgc3ViamVjdCwgdXNlIHNvbWUgb3RoZXIgaW5mb3JtYXRpb24gdG8KKwlkZXNjcmliZSBlYWNoIGNvbW1pdC4gICc8Zm9ybWF0PicgY2FuIGJlIGFueSBzdHJpbmcgYWNjZXB0ZWQKKwlieSB0aGUgYC0tZm9ybWF0YCBvcHRpb24gb2YgJ2dpdCBsb2cnLCBzdWNoIGFzICcqIFslaF0gJXMnLgorCShTZWUgdGhlICJQUkVUVFkgRk9STUFUUyIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1sb2dbMV0uKQorCisJRWFjaCBwcmV0dHktcHJpbnRlZCBjb21taXQgd2lsbCBiZSByZXdyYXBwZWQgYmVmb3JlIGl0IGlzIHNob3duLgorCistYzo6CistLWNvbW1pdHRlcjo6CisJQ29sbGVjdCBhbmQgc2hvdyBjb21taXR0ZXIgaWRlbnRpdGllcyBpbnN0ZWFkIG9mIGF1dGhvcnMuCisKKy13Wzx3aWR0aD5bLDxpbmRlbnQxPlssPGluZGVudDI+XV1dOjoKKwlMaW5ld3JhcCB0aGUgb3V0cHV0IGJ5IHdyYXBwaW5nIGVhY2ggbGluZSBhdCBgd2lkdGhgLiAgVGhlIGZpcnN0CisJbGluZSBvZiBlYWNoIGVudHJ5IGlzIGluZGVudGVkIGJ5IGBpbmRlbnQxYCBzcGFjZXMsIGFuZCB0aGUgc2Vjb25kCisJYW5kIHN1YnNlcXVlbnQgbGluZXMgYXJlIGluZGVudGVkIGJ5IGBpbmRlbnQyYCBzcGFjZXMuIGB3aWR0aGAsCisJYGluZGVudDFgLCBhbmQgYGluZGVudDJgIGRlZmF1bHQgdG8gNzYsIDYgYW5kIDkgcmVzcGVjdGl2ZWx5LgorKworSWYgd2lkdGggaXMgYDBgICh6ZXJvKSB0aGVuIGluZGVudCB0aGUgbGluZXMgb2YgdGhlIG91dHB1dCB3aXRob3V0IHdyYXBwaW5nCit0aGVtLgorCis8cmV2aXNpb24gcmFuZ2U+OjoKKwlTaG93IG9ubHkgY29tbWl0cyBpbiB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIHJhbmdlLiAgV2hlbiBubworCTxyZXZpc2lvbiByYW5nZT4gaXMgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgSEVBRGAgKGkuZS4gdGhlCisJd2hvbGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IGNvbW1pdCkuICBgb3JpZ2luLi5IRUFEYAorCXNwZWNpZmllcyBhbGwgdGhlIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhlIGN1cnJlbnQgY29tbWl0CisJKGkuZS4gYEhFQURgKSwgYnV0IG5vdCBmcm9tIGBvcmlnaW5gLiBGb3IgYSBjb21wbGV0ZSBsaXN0IG9mCisJd2F5cyB0byBzcGVsbCA8cmV2aXNpb24gcmFuZ2U+LCBzZWUgdGhlICJTcGVjaWZ5aW5nIFJhbmdlcyIKKwlzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCitbLS1dIDxwYXRoPi4uLjo6CisJQ29uc2lkZXIgb25seSBjb21taXRzIHRoYXQgYXJlIGVub3VnaCB0byBleHBsYWluIGhvdyB0aGUgZmlsZXMKKwl0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0aHMgY2FtZSB0byBiZS4KKysKK1BhdGhzIG1heSBuZWVkIHRvIGJlIHByZWZpeGVkIHdpdGggYC0tYCB0byBzZXBhcmF0ZSB0aGVtIGZyb20KK29wdGlvbnMgb3IgdGhlIHJldmlzaW9uIHJhbmdlLCB3aGVuIGNvbmZ1c2lvbiBhcmlzZXMuCisKKzpnaXQtc2hvcnRsb2c6IDEKK2luY2x1ZGU6OnJldi1saXN0LW9wdGlvbnMudHh0W10KKworTUFQUElORyBBVVRIT1JTCistLS0tLS0tLS0tLS0tLS0KKworVGhlIGAubWFpbG1hcGAgZmVhdHVyZSBpcyB1c2VkIHRvIGNvYWxlc2NlIHRvZ2V0aGVyIGNvbW1pdHMgYnkgdGhlIHNhbWUKK3BlcnNvbiBpbiB0aGUgc2hvcnRsb2csIHdoZXJlIHRoZWlyIG5hbWUgYW5kL29yIGVtYWlsIGFkZHJlc3Mgd2FzCitzcGVsbGVkIGRpZmZlcmVudGx5LgorCitpbmNsdWRlOjptYWlsbWFwLnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzJmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKQEAgLTAsMCArMSwyMDQgQEAKK2dpdC1zaG93LWJyYW5jaCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG93LWJyYW5jaCAtIFNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNob3ctYnJhbmNoJyBbLWF8LS1hbGxdIFstcnwtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdCisJCVstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXQorCQlbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdCisJCVstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXQorCQlbKDxyZXY+IHwgPGdsb2I+KS4uLl0KKydnaXQgc2hvdy1icmFuY2gnICgtZ3wtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworU2hvd3MgdGhlIGNvbW1pdCBhbmNlc3RyeSBncmFwaCBzdGFydGluZyBmcm9tIHRoZSBjb21taXRzIG5hbWVkCit3aXRoIDxyZXY+cyBvciA8Z2xvYj5zIChvciBhbGwgcmVmcyB1bmRlciByZWZzL2hlYWRzCithbmQvb3IgcmVmcy90YWdzKSBzZW1pLXZpc3VhbGx5LgorCitJdCBjYW5ub3Qgc2hvdyBtb3JlIHRoYW4gMjkgYnJhbmNoZXMgYW5kIGNvbW1pdHMgYXQgYSB0aW1lLgorCitJdCB1c2VzIGBzaG93YnJhbmNoLmRlZmF1bHRgIG11bHRpLXZhbHVlZCBjb25maWd1cmF0aW9uIGl0ZW1zIGlmCitubyA8cmV2PiBvciA8Z2xvYj4gaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKworCitPUFRJT05TCistLS0tLS0tCis8cmV2Pjo6CisJQXJiaXRyYXJ5IGV4dGVuZGVkIFNIQS0xIGV4cHJlc3Npb24gKHNlZSBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSkKKwl0aGF0IHR5cGljYWxseSBuYW1lcyBhIGJyYW5jaCBoZWFkIG9yIGEgdGFnLgorCis8Z2xvYj46OgorCUEgZ2xvYiBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBicmFuY2ggb3IgdGFnIG5hbWVzIHVuZGVyCisJcmVmcy8uICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgbWFueSB0b3BpYworCWJyYW5jaGVzIHVuZGVyIHJlZnMvaGVhZHMvdG9waWMsIGdpdmluZworCWB0b3BpYy8qYCB3b3VsZCBzaG93IGFsbCBvZiB0aGVtLgorCistcjo6CistLXJlbW90ZXM6OgorCVNob3cgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKworLWE6OgorLS1hbGw6OgorCVNob3cgYm90aCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYW5kIGxvY2FsIGJyYW5jaGVzLgorCistLWN1cnJlbnQ6OgorCVdpdGggdGhpcyBvcHRpb24sIHRoZSBjb21tYW5kIGluY2x1ZGVzIHRoZSBjdXJyZW50CisJYnJhbmNoIHRvIHRoZSBsaXN0IG9mIHJldnMgdG8gYmUgc2hvd24gd2hlbiBpdCBpcyBub3QKKwlnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCistLXRvcG8tb3JkZXI6OgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMgYXJlIHNob3duIGluCisgICAgICAgIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4gIFRoaXMgb3B0aW9uIG1ha2VzIHRoZW0KKyAgICAgICAgYXBwZWFyIGluIHRvcG9sb2dpY2FsIG9yZGVyIChpLmUuLCBkZXNjZW5kYW50IGNvbW1pdHMKKyAgICAgICAgYXJlIHNob3duIGJlZm9yZSB0aGVpciBwYXJlbnRzKS4KKworLS1kYXRlLW9yZGVyOjoKKwlUaGlzIG9wdGlvbiBpcyBzaW1pbGFyIHRvIGAtLXRvcG8tb3JkZXJgIGluIHRoZSBzZW5zZSB0aGF0IG5vCisJcGFyZW50IGNvbWVzIGJlZm9yZSBhbGwgb2YgaXRzIGNoaWxkcmVuLCBidXQgb3RoZXJ3aXNlIGNvbW1pdHMKKwlhcmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlaXIgY29tbWl0IGRhdGUuCisKKy0tc3BhcnNlOjoKKwlCeSBkZWZhdWx0LCB0aGUgb3V0cHV0IG9taXRzIG1lcmdlcyB0aGF0IGFyZSByZWFjaGFibGUKKwlmcm9tIG9ubHkgb25lIHRpcCBiZWluZyBzaG93bi4gIFRoaXMgb3B0aW9uIG1ha2VzIHRoZW0KKwl2aXNpYmxlLgorCistLW1vcmU9PG4+OjoKKwlVc3VhbGx5IHRoZSBjb21tYW5kIHN0b3BzIG91dHB1dCB1cG9uIHNob3dpbmcgdGhlIGNvbW1pdAorCXRoYXQgaXMgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiBhbGwgdGhlIGJyYW5jaGVzLiAgVGhpcworCWZsYWcgdGVsbHMgdGhlIGNvbW1hbmQgdG8gZ28gPG4+IG1vcmUgY29tbW9uIGNvbW1pdHMKKwliZXlvbmQgdGhhdC4gIFdoZW4gPG4+IGlzIG5lZ2F0aXZlLCBkaXNwbGF5IG9ubHkgdGhlCisJPHJlZmVyZW5jZT5zIGdpdmVuLCB3aXRob3V0IHNob3dpbmcgdGhlIGNvbW1pdCBhbmNlc3RyeQorCXRyZWUuCisKKy0tbGlzdDo6CisJU3lub255bSB0byBgLS1tb3JlPS0xYAorCistLW1lcmdlLWJhc2U6OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgY29tbWl0IGxpc3QsIGRldGVybWluZSBwb3NzaWJsZQorCW1lcmdlIGJhc2VzIGZvciB0aGUgc3BlY2lmaWVkIGNvbW1pdHMuIEFsbCBtZXJnZSBiYXNlcworCXdpbGwgYmUgY29udGFpbmVkIGluIGFsbCBzcGVjaWZpZWQgY29tbWl0cy4gVGhpcyBpcworCWRpZmZlcmVudCBmcm9tIGhvdyBsaW5rZ2l0OmdpdC1tZXJnZS1iYXNlWzFdIGhhbmRsZXMKKwl0aGUgY2FzZSBvZiB0aHJlZSBvciBtb3JlIGNvbW1pdHMuCisKKy0taW5kZXBlbmRlbnQ6OgorCUFtb25nIHRoZSA8cmVmZXJlbmNlPnMgZ2l2ZW4sIGRpc3BsYXkgb25seSB0aGUgb25lcyB0aGF0CisJY2Fubm90IGJlIHJlYWNoZWQgZnJvbSBhbnkgb3RoZXIgPHJlZmVyZW5jZT4uCisKKy0tbm8tbmFtZTo6CisJRG8gbm90IHNob3cgbmFtaW5nIHN0cmluZ3MgZm9yIGVhY2ggY29tbWl0LgorCistLXNoYTEtbmFtZTo6CisJSW5zdGVhZCBvZiBuYW1pbmcgdGhlIGNvbW1pdHMgdXNpbmcgdGhlIHBhdGggdG8gcmVhY2gKKwl0aGVtIGZyb20gaGVhZHMgKGUuZy4gIm1hc3Rlcn4yIiB0byBtZWFuIHRoZSBncmFuZHBhcmVudAorCW9mICJtYXN0ZXIiKSwgbmFtZSB0aGVtIHdpdGggdGhlIHVuaXF1ZSBwcmVmaXggb2YgdGhlaXIKKwlvYmplY3QgbmFtZXMuCisKKy0tdG9waWNzOjoKKwlTaG93cyBvbmx5IGNvbW1pdHMgdGhhdCBhcmUgTk9UIG9uIHRoZSBmaXJzdCBicmFuY2ggZ2l2ZW4uCisJVGhpcyBoZWxwcyB0cmFjayB0b3BpYyBicmFuY2hlcyBieSBoaWRpbmcgYW55IGNvbW1pdCB0aGF0CisJaXMgYWxyZWFkeSBpbiB0aGUgbWFpbiBsaW5lIG9mIGRldmVsb3BtZW50LiAgV2hlbiBnaXZlbgorCSJnaXQgc2hvdy1icmFuY2ggLS10b3BpY3MgbWFzdGVyIHRvcGljMSB0b3BpYzIiLCB0aGlzCisJd2lsbCBzaG93IHRoZSByZXZpc2lvbnMgZ2l2ZW4gYnkgImdpdCByZXYtbGlzdCB7Y2FyZXR9bWFzdGVyCisJdG9waWMxIHRvcGljMiIKKworLWc6OgorLS1yZWZsb2dbPTxuPlssPGJhc2U+XV0gWzxyZWY+XTo6CisJU2hvd3MgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBmb3IgdGhlIGdpdmVuCisJcmVmLiAgSWYgPGJhc2U+IGlzIGdpdmVuLCA8bj4gZW50cmllcyBnb2luZyBiYWNrIGZyb20KKwl0aGF0IGVudHJ5LiAgPGJhc2U+IGNhbiBiZSBzcGVjaWZpZWQgYXMgY291bnQgb3IgZGF0ZS4KKwlXaGVuIG5vIGV4cGxpY2l0IDxyZWY+IHBhcmFtZXRlciBpcyBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gdGhlCisJY3VycmVudCBicmFuY2ggKG9yIGBIRUFEYCBpZiBpdCBpcyBkZXRhY2hlZCkuCisKKy0tY29sb3JbPTx3aGVuPl06OgorCUNvbG9yIHRoZSBzdGF0dXMgc2lnbiAob25lIG9mIHRoZXNlOiBgKmAgYCFgIGArYCBgLWApIG9mIGVhY2ggY29tbWl0CisJY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIGl0J3MgaW4uCisJVGhlIHZhbHVlIG11c3QgYmUgYWx3YXlzICh0aGUgZGVmYXVsdCksIG5ldmVyLCBvciBhdXRvLgorCistLW5vLWNvbG9yOjoKKwlUdXJuIG9mZiBjb2xvcmVkIG91dHB1dCwgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZ2l2ZXMgdGhlCisJZGVmYXVsdCB0byBjb2xvciBvdXRwdXQuCisJU2FtZSBhcyBgLS1jb2xvcj1uZXZlcmAuCisKK05vdGUgdGhhdCAtLW1vcmUsIC0tbGlzdCwgLS1pbmRlcGVuZGVudCBhbmQgLS1tZXJnZS1iYXNlIG9wdGlvbnMKK2FyZSBtdXR1YWxseSBleGNsdXNpdmUuCisKKworT1VUUFVUCistLS0tLS0KK0dpdmVuIE4gPHJlZmVyZW5jZXM+LCB0aGUgZmlyc3QgTiBsaW5lcyBhcmUgdGhlIG9uZS1saW5lCitkZXNjcmlwdGlvbiBmcm9tIHRoZWlyIGNvbW1pdCBtZXNzYWdlLiAgVGhlIGJyYW5jaCBoZWFkIHRoYXQgaXMKK3BvaW50ZWQgYXQgYnkgJEdJVF9ESVIvSEVBRCBpcyBwcmVmaXhlZCB3aXRoIGFuIGFzdGVyaXNrIGAqYAorY2hhcmFjdGVyIHdoaWxlIG90aGVyIGhlYWRzIGFyZSBwcmVmaXhlZCB3aXRoIGEgYCFgIGNoYXJhY3Rlci4KKworRm9sbG93aW5nIHRoZXNlIE4gbGluZXMsIG9uZS1saW5lIGxvZyBmb3IgZWFjaCBjb21taXQgaXMKK2Rpc3BsYXllZCwgaW5kZW50ZWQgTiBwbGFjZXMuICBJZiBhIGNvbW1pdCBpcyBvbiB0aGUgSS10aAorYnJhbmNoLCB0aGUgSS10aCBpbmRlbnRhdGlvbiBjaGFyYWN0ZXIgc2hvd3MgYSBgK2Agc2lnbjsKK290aGVyd2lzZSBpdCBzaG93cyBhIHNwYWNlLiAgTWVyZ2UgY29tbWl0cyBhcmUgZGVub3RlZCBieQorYSBgLWAgc2lnbi4gIEVhY2ggY29tbWl0IHNob3dzIGEgc2hvcnQgbmFtZSB0aGF0CitjYW4gYmUgdXNlZCBhcyBhbiBleHRlbmRlZCBTSEEtMSB0byBuYW1lIHRoYXQgY29tbWl0LgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhyZWUgYnJhbmNoZXMsICJtYXN0ZXIiLCAiZml4ZXMiCithbmQgIm1oZiI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2ggbWFzdGVyIGZpeGVzIG1oZgorKiBbbWFzdGVyXSBBZGQgJ2dpdCBzaG93LWJyYW5jaCcuCisgISBbZml4ZXNdIEludHJvZHVjZSAicmVzZXQgdHlwZSIgZmxhZyB0byAiZ2l0IHJlc2V0IgorICAhIFttaGZdIEFsbG93ICIrcmVtb3RlOmxvY2FsIiByZWZzcGVjIHRvIGNhdXNlIC0tZm9yY2Ugd2hlbiBmZXRjaGluZy4KKy0tLQorICArIFttaGZdIEFsbG93ICIrcmVtb3RlOmxvY2FsIiByZWZzcGVjIHRvIGNhdXNlIC0tZm9yY2Ugd2hlbiBmZXRjaGluZy4KKyAgKyBbbWhmfjFdIFVzZSBnaXQtb2N0b3B1cyB3aGVuIHB1bGxpbmcgbW9yZSB0aGFuIG9uZSBoZWFkcy4KKyArICBbZml4ZXNdIEludHJvZHVjZSAicmVzZXQgdHlwZSIgZmxhZyB0byAiZ2l0IHJlc2V0IgorICArIFttaGZ+Ml0gImdpdCBmZXRjaCAtLWZvcmNlIi4KKyAgKyBbbWhmfjNdIFVzZSAuZ2l0L3JlbW90ZS9vcmlnaW4sIG5vdCAuZ2l0L2JyYW5jaGVzL29yaWdpbi4KKyAgKyBbbWhmfjRdIE1ha2UgImdpdCBwdWxsIiBhbmQgImdpdCBmZXRjaCIgZGVmYXVsdCB0byBvcmlnaW4KKyAgKyBbbWhmfjVdIEluZmFtb3VzICdvY3RvcHVzIG1lcmdlJworICArIFttaGZ+Nl0gUmV0aXJlIGdpdC1wYXJzZS1yZW1vdGUuCisgICsgW21oZn43XSBNdWx0aS1oZWFkIGZldGNoLgorICArIFttaGZ+OF0gU3RhcnQgYWRkaW5nIHRoZSAkR0lUX0RJUi9yZW1vdGVzLyBzdXBwb3J0LgorKisrIFttYXN0ZXJdIEFkZCAnZ2l0IHNob3ctYnJhbmNoJy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSB0aHJlZSBicmFuY2hlcyBhbGwgZm9ya2VkIGZyb20gYSBjb21tb24gY29tbWl0LCBbbWFzdGVyXSwKK3dob3NlIGNvbW1pdCBtZXNzYWdlIGlzICJBZGQgXCdnaXQgc2hvdy1icmFuY2gnIi4KK1RoZSAiZml4ZXMiIGJyYW5jaCBhZGRzIG9uZSBjb21taXQgIkludHJvZHVjZSAicmVzZXQgdHlwZSIgZmxhZyB0bworImdpdCByZXNldCIiLiBUaGUgIm1oZiIgYnJhbmNoIGFkZHMgbWFueSBvdGhlciBjb21taXRzLgorVGhlIGN1cnJlbnQgYnJhbmNoIGlzICJtYXN0ZXIiLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitJZiB5b3Uga2VlcCB5b3VyIHByaW1hcnkgYnJhbmNoZXMgaW1tZWRpYXRlbHkgdW5kZXIKK2ByZWZzL2hlYWRzYCwgYW5kIHRvcGljIGJyYW5jaGVzIGluIHN1YmRpcmVjdG9yaWVzIG9mCitpdCwgaGF2aW5nIHRoZSBmb2xsb3dpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBtYXkgaGVscDoKKworLS0tLS0tLS0tLS0tCitbc2hvd2JyYW5jaF0KKwlkZWZhdWx0ID0gLS10b3BvLW9yZGVyCisJZGVmYXVsdCA9IGhlYWRzLyoKKworLS0tLS0tLS0tLS0tCisKK1dpdGggdGhpcywgYGdpdCBzaG93LWJyYW5jaGAgd2l0aG91dCBleHRyYSBwYXJhbWV0ZXJzIHdvdWxkIHNob3cKK29ubHkgdGhlIHByaW1hcnkgYnJhbmNoZXMuICBJbiBhZGRpdGlvbiwgaWYgeW91IGhhcHBlbiB0byBiZSBvbgoreW91ciB0b3BpYyBicmFuY2gsIGl0IGlzIHNob3duIGFzIHdlbGwuCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2ggLS1yZWZsb2c9IjEwLDEgaG91ciBhZ28iIC0tbGlzdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitzaG93cyAxMCByZWZsb2cgZW50cmllcyBnb2luZyBiYWNrIGZyb20gdGhlIHRpcCBhcyBvZiAxIGhvdXIgYWdvLgorV2l0aG91dCBgLS1saXN0YCwgdGhlIG91dHB1dCBhbHNvIHNob3dzIGhvdyB0aGVzZSB0aXBzIGFyZQordG9wb2xvZ2ljYWxseSByZWxhdGVkIHdpdGggZWFjaCBvdGhlci4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGU0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWluZGV4LnR4dApAQCAtMCwwICsxLDQxIEBACitnaXQtc2hvdy1pbmRleCgxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNob3ctaW5kZXggLSBTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNob3ctaW5kZXgnCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkIHRoZSBgLmlkeGAgZmlsZSBmb3IgYSBHaXQgcGFja2ZpbGUgKGNyZWF0ZWQgd2l0aAorbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIG9yIGxpbmtnaXQ6Z2l0LWluZGV4LXBhY2tbMV0pIGZyb20gdGhlCitzdGFuZGFyZCBpbnB1dCwgYW5kIGR1bXAgaXRzIGNvbnRlbnRzLiBUaGUgb3V0cHV0IGNvbnNpc3RzIG9mIG9uZSBvYmplY3QKK3BlciBsaW5lLCB3aXRoIGVhY2ggbGluZSBjb250YWluaW5nIHR3byBvciB0aHJlZSBzcGFjZS1zZXBhcmF0ZWQKK2NvbHVtbnM6CisKKyAgLSB0aGUgZmlyc3QgY29sdW1uIGlzIHRoZSBvZmZzZXQgaW4gYnl0ZXMgb2YgdGhlIG9iamVjdCB3aXRoaW4gdGhlCisgICAgY29ycmVzcG9uZGluZyBwYWNrZmlsZQorCisgIC0gdGhlIHNlY29uZCBjb2x1bW4gaXMgdGhlIG9iamVjdCBpZCBvZiB0aGUgb2JqZWN0CisKKyAgLSBpZiB0aGUgaW5kZXggdmVyc2lvbiBpcyAyIG9yIGhpZ2hlciwgdGhlIHRoaXJkIGNvbHVtbiBjb250YWlucyB0aGUKKyAgICBDUkMzMiBvZiB0aGUgb2JqZWN0IGRhdGEKKworVGhlIG9iamVjdHMgYXJlIG91dHB1dCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZm91bmQgaW4gdGhlIGluZGV4CitmaWxlLCB3aGljaCBzaG91bGQgYmUgKGluIGEgY29ycmVjdGx5IGNvbnN0cnVjdGVkIGZpbGUpIHNvcnRlZCBieSBvYmplY3QKK2lkLgorCitOb3RlIHRoYXQgeW91IGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHBhY2tmaWxlIGJ5IGNhbGxpbmcKK2xpbmtnaXQ6Z2l0LXZlcmlmeS1wYWNrWzFdLiBIb3dldmVyLCBhcyB0aGlzIGNvbW1hbmQgY29uc2lkZXJzIG9ubHkgdGhlCitpbmRleCBmaWxlIGl0c2VsZiwgaXQncyBib3RoIGZhc3RlciBhbmQgbW9yZSBmbGV4aWJsZS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0ZDI3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dApAQCAtMCwwICsxLDE4NiBAQAorZ2l0LXNob3ctcmVmKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNob3ctcmVmIC0gTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2hvdy1yZWYnIFstcXwtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZHwtLWRlcmVmZXJlbmNlXQorCSAgICAgWy1zfC0taGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXQorCSAgICAgWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0KKydnaXQgc2hvdy1yZWYnIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworRGlzcGxheXMgcmVmZXJlbmNlcyBhdmFpbGFibGUgaW4gYSBsb2NhbCByZXBvc2l0b3J5IGFsb25nIHdpdGggdGhlIGFzc29jaWF0ZWQKK2NvbW1pdCBJRHMuIFJlc3VsdHMgY2FuIGJlIGZpbHRlcmVkIHVzaW5nIGEgcGF0dGVybiBhbmQgdGFncyBjYW4gYmUKK2RlcmVmZXJlbmNlZCBpbnRvIG9iamVjdCBJRHMuIEFkZGl0aW9uYWxseSwgaXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aGV0aGVyIGEKK3BhcnRpY3VsYXIgcmVmIGV4aXN0cy4KKworQnkgZGVmYXVsdCwgc2hvd3MgdGhlIHRhZ3MsIGhlYWRzLCBhbmQgcmVtb3RlIHJlZnMuCisKK1RoZSAtLWV4Y2x1ZGUtZXhpc3RpbmcgZm9ybSBpcyBhIGZpbHRlciB0aGF0IGRvZXMgdGhlIGludmVyc2UuIEl0IHJlYWRzCityZWZzIGZyb20gc3RkaW4sIG9uZSByZWYgcGVyIGxpbmUsIGFuZCBzaG93cyB0aG9zZSB0aGF0IGRvbid0IGV4aXN0IGluCit0aGUgbG9jYWwgcmVwb3NpdG9yeS4KKworVXNlIG9mIHRoaXMgdXRpbGl0eSBpcyBlbmNvdXJhZ2VkIGluIGZhdm9yIG9mIGRpcmVjdGx5IGFjY2Vzc2luZyBmaWxlcyB1bmRlcgordGhlIGAuZ2l0YCBkaXJlY3RvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1oZWFkOjoKKworCVNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIG5vcm1hbGx5IGJlIGZpbHRlcmVkIG91dC4KKworLS1oZWFkczo6CistLXRhZ3M6OgorCisJTGltaXQgdG8gInJlZnMvaGVhZHMiIGFuZCAicmVmcy90YWdzIiwgcmVzcGVjdGl2ZWx5LiAgVGhlc2Ugb3B0aW9ucworCWFyZSBub3QgbXV0dWFsbHkgZXhjbHVzaXZlOyB3aGVuIGdpdmVuIGJvdGgsIHJlZmVyZW5jZXMgc3RvcmVkIGluCisJInJlZnMvaGVhZHMiIGFuZCAicmVmcy90YWdzIiBhcmUgZGlzcGxheWVkLgorCistZDo6CistLWRlcmVmZXJlbmNlOjoKKworCURlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIGFzIHdlbGwuIFRoZXkgd2lsbCBiZSBzaG93biB3aXRoICJ7Y2FyZXR9e30iCisJYXBwZW5kZWQuCisKKy1zOjoKKy0taGFzaFs9PG4+XTo6CisKKwlPbmx5IHNob3cgdGhlIFNIQS0xIGhhc2gsIG5vdCB0aGUgcmVmZXJlbmNlIG5hbWUuIFdoZW4gY29tYmluZWQgd2l0aAorCS0tZGVyZWZlcmVuY2UgdGhlIGRlcmVmZXJlbmNlZCB0YWcgd2lsbCBzdGlsbCBiZSBzaG93biBhZnRlciB0aGUgU0hBLTEuCisKKy0tdmVyaWZ5OjoKKworCUVuYWJsZSBzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcgYnkgcmVxdWlyaW5nIGFuIGV4YWN0IHJlZiBwYXRoLgorCUFzaWRlIGZyb20gcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgb2YgMSwgaXQgd2lsbCBhbHNvIHByaW50IGFuIGVycm9yCisJbWVzc2FnZSBpZiBgLS1xdWlldGAgd2FzIG5vdCBzcGVjaWZpZWQuCisKKy0tYWJicmV2Wz08bj5dOjoKKworCUFiYnJldmlhdGUgdGhlIG9iamVjdCBuYW1lLiAgV2hlbiB1c2luZyBgLS1oYXNoYCwgeW91IGRvCisJbm90IGhhdmUgdG8gc2F5IGAtLWhhc2ggLS1hYmJyZXZgOyBgLS1oYXNoPW5gIHdvdWxkIGRvLgorCistcTo6CistLXF1aWV0OjoKKworCURvIG5vdCBwcmludCBhbnkgcmVzdWx0cyB0byBzdGRvdXQuIFdoZW4gY29tYmluZWQgd2l0aCBgLS12ZXJpZnlgIHRoaXMKKwljYW4gYmUgdXNlZCB0byBzaWxlbnRseSBjaGVjayBpZiBhIHJlZmVyZW5jZSBleGlzdHMuCisKKy0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XTo6CisKKwlNYWtlICdnaXQgc2hvdy1yZWYnIGFjdCBhcyBhIGZpbHRlciB0aGF0IHJlYWRzIHJlZnMgZnJvbSBzdGRpbiBvZiB0aGUKKwlmb3JtICJgXig/Ojxhbnl0aGluZz5ccyk/PHJlZm5hbWU+KD86XF57fSk/JGAiCisJYW5kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBvbiBlYWNoOgorCSgxKSBzdHJpcCAie2NhcmV0fXt9IiBhdCB0aGUgZW5kIG9mIGxpbmUgaWYgYW55OworCSgyKSBpZ25vcmUgaWYgcGF0dGVybiBpcyBwcm92aWRlZCBhbmQgZG9lcyBub3QgaGVhZC1tYXRjaCByZWZuYW1lOworCSgzKSB3YXJuIGlmIHJlZm5hbWUgaXMgbm90IGEgd2VsbC1mb3JtZWQgcmVmbmFtZSBhbmQgc2tpcDsKKwkoNCkgaWdub3JlIGlmIHJlZm5hbWUgaXMgYSByZWYgdGhhdCBleGlzdHMgaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnk7CisJKDUpIG90aGVyd2lzZSBvdXRwdXQgdGhlIGxpbmUuCisKKworPHBhdHRlcm4+Li4uOjoKKworCVNob3cgcmVmZXJlbmNlcyBtYXRjaGluZyBvbmUgb3IgbW9yZSBwYXR0ZXJucy4gUGF0dGVybnMgYXJlIG1hdGNoZWQgZnJvbQorCXRoZSBlbmQgb2YgdGhlIGZ1bGwgbmFtZSwgYW5kIG9ubHkgY29tcGxldGUgcGFydHMgYXJlIG1hdGNoZWQsIGUuZy4KKwknbWFzdGVyJyBtYXRjaGVzICdyZWZzL2hlYWRzL21hc3RlcicsICdyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcicsCisJJ3JlZnMvdGFncy9qZWRpL21hc3RlcicgYnV0IG5vdCAncmVmcy9oZWFkcy9teW1hc3Rlcicgb3IKKwkncmVmcy9yZW1vdGVzL21hc3Rlci9qZWRpJy4KKworT1VUUFVUCistLS0tLS0KKworVGhlIG91dHB1dCBpcyBpbiB0aGUgZm9ybWF0OiAnPFNIQS0xIElEPicgJzxzcGFjZT4nICc8cmVmZXJlbmNlIG5hbWU+Jy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctcmVmIC0taGVhZCAtLWRlcmVmZXJlbmNlCis4MzJlNzZhOTg5OWY1NjBhOTBmZmQ2MmFlMmNlODNiYmVmZjU4ZjU0IEhFQUQKKzgzMmU3NmE5ODk5ZjU2MGE5MGZmZDYyYWUyY2U4M2JiZWZmNThmNTQgcmVmcy9oZWFkcy9tYXN0ZXIKKzgzMmU3NmE5ODk5ZjU2MGE5MGZmZDYyYWUyY2U4M2JiZWZmNThmNTQgcmVmcy9oZWFkcy9vcmlnaW4KKzM1MjEwMTc1NTZjNWRlNDE1OWRhNDYxNWEzOWZhNGQ1ZDJjMjc5YjUgcmVmcy90YWdzL3YwLjk5LjljCis2ZGRjMDk2NDAzNDM0MjUxOWE4N2ZlMDEzNzgxYWJmMzFjNmRiNmFkIHJlZnMvdGFncy92MC45OS45Y157fQorMDU1ZTRhZTNhZTZlYjM0NGNiYWJmMmE1MjU2YTQ5ZWE2NjA0MDEzMSByZWZzL3RhZ3MvdjEuMHJjNAorNDIzMzI1YTJkMjQ2MzhkZGNjODJjZTQ3YmU1ZTQwYmU1NTBmNDUwNyByZWZzL3RhZ3MvdjEuMHJjNF57fQorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHVzaW5nIC0taGFzaCAoYW5kIG5vdCAtLWRlcmVmZXJlbmNlKSB0aGUgb3V0cHV0IGZvcm1hdCBpczogJzxTSEEtMSBJRD4nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LXJlZiAtLWhlYWRzIC0taGFzaAorMmUzYmEwMTE0YTFmNTJiNDdkZjI5NzQzZDY5MTVkMDU2YmUxMzI3OAorMTg1MDA4YWU5Nzk2MGM4ZDU1MWFkY2Q5ZTIzNTY1MTk0NjUxYjVkMQorMDNhZGY0MmM5ODgxOTViNTBlMWExOTM1YmE1ZmNiYzM5YjJiMDI5YgorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFWEFNUExFUworLS0tLS0tLS0KKworVG8gc2hvdyBhbGwgcmVmZXJlbmNlcyBjYWxsZWQgIm1hc3RlciIsIHdoZXRoZXIgdGFncyBvciBoZWFkcyBvciBhbnl0aGluZworZWxzZSwgYW5kIHJlZ2FyZGxlc3Mgb2YgaG93IGRlZXAgaW4gdGhlIHJlZmVyZW5jZSBuYW1pbmcgaGllcmFyY2h5IHRoZXkgYXJlLAordXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWdpdCBzaG93LXJlZiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBzaG93ICJyZWZzL2hlYWRzL21hc3RlciIgYnV0IGFsc28gInJlZnMvcmVtb3RlL290aGVyLXJlcG8vbWFzdGVyIiwKK2lmIHN1Y2ggcmVmZXJlbmNlcyBleGlzdHMuCisKK1doZW4gdXNpbmcgdGhlIGAtLXZlcmlmeWAgZmxhZywgdGhlIGNvbW1hbmQgcmVxdWlyZXMgYW4gZXhhY3QgcGF0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgb25seSBtYXRjaCB0aGUgZXhhY3QgYnJhbmNoIGNhbGxlZCAibWFzdGVyIi4KKworSWYgbm90aGluZyBtYXRjaGVzLCAnZ2l0IHNob3ctcmVmJyB3aWxsIHJldHVybiBhbiBlcnJvciBjb2RlIG9mIDEsCithbmQgaW4gdGhlIGNhc2Ugb2YgdmVyaWZpY2F0aW9uLCBpdCB3aWxsIHNob3cgYW4gZXJyb3IgbWVzc2FnZS4KKworRm9yIHNjcmlwdGluZywgeW91IGNhbiBhc2sgaXQgdG8gYmUgcXVpZXQgd2l0aCB0aGUgIi0tcXVpZXQiIGZsYWcsIHdoaWNoCithbGxvd3MgeW91IHRvIGRvIHRoaW5ncyBsaWtlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHNob3ctcmVmIC0tcXVpZXQgLS12ZXJpZnkgLS0gInJlZnMvaGVhZHMvJGhlYWRuYW1lIiB8fAorCQllY2hvICIkaGVhZG5hbWUgaXMgbm90IGEgdmFsaWQgYnJhbmNoIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gY2hlY2sgd2hldGhlciBhIHBhcnRpY3VsYXIgYnJhbmNoIGV4aXN0cyBvciBub3QgKG5vdGljZSBob3cgd2UgZG9uJ3QKK2FjdHVhbGx5IHdhbnQgdG8gc2hvdyBhbnkgcmVzdWx0cywgYW5kIHdlIHdhbnQgdG8gdXNlIHRoZSBmdWxsIHJlZm5hbWUgZm9yIGl0CitpbiBvcmRlciB0byBub3QgdHJpZ2dlciB0aGUgcHJvYmxlbSB3aXRoIGFtYmlndW91cyBwYXJ0aWFsIG1hdGNoZXMpLgorCitUbyBzaG93IG9ubHkgdGFncywgb3Igb25seSBwcm9wZXIgYnJhbmNoIGhlYWRzLCB1c2UgIi0tdGFncyIgYW5kL29yICItLWhlYWRzIgorcmVzcGVjdGl2ZWx5ICh1c2luZyBib3RoIG1lYW5zIHRoYXQgaXQgc2hvd3MgdGFncyBhbmQgaGVhZHMsIGJ1dCBub3Qgb3RoZXIKK3JhbmRvbSByZWZlcmVuY2VzIHVuZGVyIHRoZSByZWZzLyBzdWJkaXJlY3RvcnkpLgorCitUbyBkbyBhdXRvbWF0aWMgdGFnIG9iamVjdCBkZXJlZmVyZW5jaW5nLCB1c2UgdGhlICItZCIgb3IgIi0tZGVyZWZlcmVuY2UiCitmbGFnLCBzbyB5b3UgY2FuIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHNob3ctcmVmIC0tdGFncyAtLWRlcmVmZXJlbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byBnZXQgYSBsaXN0aW5nIG9mIGFsbCB0YWdzIHRvZ2V0aGVyIHdpdGggd2hhdCB0aGV5IGRlcmVmZXJlbmNlLgorCitGSUxFUworLS0tLS0KK2AuZ2l0L3JlZnMvKmAsIGAuZ2l0L3BhY2tlZC1yZWZzYAorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZvci1lYWNoLXJlZlsxXSwKK2xpbmtnaXQ6Z2l0LWxzLXJlbW90ZVsxXSwKK2xpbmtnaXQ6Z2l0LXVwZGF0ZS1yZWZbMV0sCitsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Y1MjhjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKQEAgLTAsMCArMSw4NyBAQAorZ2l0LXNob3coMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG93IC0gU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2hvdycgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1Nob3dzIG9uZSBvciBtb3JlIG9iamVjdHMgKGJsb2JzLCB0cmVlcywgdGFncyBhbmQgY29tbWl0cykuCisKK0ZvciBjb21taXRzIGl0IHNob3dzIHRoZSBsb2cgbWVzc2FnZSBhbmQgdGV4dHVhbCBkaWZmLiBJdCBhbHNvCitwcmVzZW50cyB0aGUgbWVyZ2UgY29tbWl0IGluIGEgc3BlY2lhbCBmb3JtYXQgYXMgcHJvZHVjZWQgYnkKKydnaXQgZGlmZi10cmVlIC0tY2MnLgorCitGb3IgdGFncywgaXQgc2hvd3MgdGhlIHRhZyBtZXNzYWdlIGFuZCB0aGUgcmVmZXJlbmNlZCBvYmplY3RzLgorCitGb3IgdHJlZXMsIGl0IHNob3dzIHRoZSBuYW1lcyAoZXF1aXZhbGVudCB0byAnZ2l0IGxzLXRyZWUnCit3aXRoIC0tbmFtZS1vbmx5KS4KKworRm9yIHBsYWluIGJsb2JzLCBpdCBzaG93cyB0aGUgcGxhaW4gY29udGVudHMuCisKK1RoZSBjb21tYW5kIHRha2VzIG9wdGlvbnMgYXBwbGljYWJsZSB0byB0aGUgJ2dpdCBkaWZmLXRyZWUnIGNvbW1hbmQgdG8KK2NvbnRyb2wgaG93IHRoZSBjaGFuZ2VzIHRoZSBjb21taXQgaW50cm9kdWNlcyBhcmUgc2hvd24uCisKK1RoaXMgbWFudWFsIHBhZ2UgZGVzY3JpYmVzIG9ubHkgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG9wdGlvbnMuCisKKworT1BUSU9OUworLS0tLS0tLQorPG9iamVjdD4uLi46OgorCVRoZSBuYW1lcyBvZiBvYmplY3RzIHRvIHNob3cgKGRlZmF1bHRzIHRvICdIRUFEJykuCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgb2JqZWN0IG5hbWVzLCBzZWUKKwkiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKK2luY2x1ZGU6OnByZXR0eS1vcHRpb25zLnR4dFtdCisKKworaW5jbHVkZTo6cHJldHR5LWZvcm1hdHMudHh0W10KKworCitDT01NT04gRElGRiBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpnaXQtbG9nOiAxCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworaW5jbHVkZTo6ZGlmZi1nZW5lcmF0ZS1wYXRjaC50eHRbXQorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitgZ2l0IHNob3cgdjEuMC4wYDo6CisJU2hvd3MgdGhlIHRhZyBgdjEuMC4wYCwgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IHRoZSB0YWdzCisJcG9pbnRzIGF0LgorCitgZ2l0IHNob3cgdjEuMC4wXnt0cmVlfWA6OgorCVNob3dzIHRoZSB0cmVlIHBvaW50ZWQgdG8gYnkgdGhlIHRhZyBgdjEuMC4wYC4KKworYGdpdCBzaG93IC1zIC0tZm9ybWF0PSVzIHYxLjAuMF57Y29tbWl0fWA6OgorCVNob3dzIHRoZSBzdWJqZWN0IG9mIHRoZSBjb21taXQgcG9pbnRlZCB0byBieSB0aGUKKwl0YWcgYHYxLjAuMGAuCisKK2BnaXQgc2hvdyBuZXh0fjEwOkRvY3VtZW50YXRpb24vUkVBRE1FYDo6CisJU2hvd3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGBEb2N1bWVudGF0aW9uL1JFQURNRWAgYXMKKwl0aGV5IHdlcmUgY3VycmVudCBpbiB0aGUgMTB0aCBsYXN0IGNvbW1pdCBvZiB0aGUgYnJhbmNoCisJYG5leHRgLgorCitgZ2l0IHNob3cgbWFzdGVyOk1ha2VmaWxlIG1hc3Rlcjp0L01ha2VmaWxlYDo6CisJQ29uY2F0ZW5hdGVzIHRoZSBjb250ZW50cyBvZiBzYWlkIE1ha2VmaWxlcyBpbiB0aGUgaGVhZAorCW9mIHRoZSBicmFuY2ggYG1hc3RlcmAuCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworaW5jbHVkZTo6aTE4bi50eHRbXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNwYXJzZS1jaGVja291dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zcGFyc2UtY2hlY2tvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzQyZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zcGFyc2UtY2hlY2tvdXQudHh0CkBAIC0wLDAgKzEsMjA3IEBACitnaXQtc3BhcnNlLWNoZWNrb3V0KDEpCis9PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zcGFyc2UtY2hlY2tvdXQgLSBJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dAorY29uZmlndXJhdGlvbiwgd2hpY2ggcmVkdWNlcyB0aGUgY2hlY2tvdXQgdG8gYSBzZXQgb2YgcGF0aHMKK2dpdmVuIGJ5IGEgbGlzdCBvZiBwYXR0ZXJucy4KKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3BhcnNlLWNoZWNrb3V0IDxzdWJjb21tYW5kPiBbb3B0aW9uc10nCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0luaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IGNvbmZpZ3VyYXRpb24sIHdoaWNoIHJlZHVjZXMKK3RoZSBjaGVja291dCB0byBhIHNldCBvZiBwYXRocyBnaXZlbiBieSBhIGxpc3Qgb2YgcGF0dGVybnMuCisKK1RISVMgQ09NTUFORCBJUyBFWFBFUklNRU5UQUwuIElUUyBCRUhBVklPUiwgQU5EIFRIRSBCRUhBVklPUiBPRiBPVEhFUgorQ09NTUFORFMgSU4gVEhFIFBSRVNFTkNFIE9GIFNQQVJTRS1DSEVDS09VVFMsIFdJTEwgTElLRUxZIENIQU5HRSBJTgorVEhFIEZVVFVSRS4KKworCitDT01NQU5EUworLS0tLS0tLS0KKydsaXN0Jzo6CisJRGVzY3JpYmUgdGhlIHBhdHRlcm5zIGluIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZS4KKworJ2luaXQnOjoKKwlFbmFibGUgdGhlIGBjb3JlLnNwYXJzZUNoZWNrb3V0YCBzZXR0aW5nLiBJZiB0aGUKKwlzcGFyc2UtY2hlY2tvdXQgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlbiBwb3B1bGF0ZSBpdCB3aXRoCisJcGF0dGVybnMgdGhhdCBtYXRjaCBldmVyeSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBhbmQKKwlubyBvdGhlciBkaXJlY3RvcmllcywgdGhlbiB3aWxsIHJlbW92ZSBhbGwgZGlyZWN0b3JpZXMgdHJhY2tlZAorCWJ5IEdpdC4gQWRkIHBhdHRlcm5zIHRvIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB0bworCXJlcG9wdWxhdGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorKworVG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciB3b3JrdHJlZXMsIGl0IGZpcnN0IGVuYWJsZXMgdGhlCitgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZ2Agc2V0dGluZyBhbmQgbWFrZXMgc3VyZSB0byBzZXQgdGhlCitgY29yZS5zcGFyc2VDaGVja291dGAgc2V0dGluZyBpbiB0aGUgd29ya3RyZWUtc3BlY2lmaWMgY29uZmlnIGZpbGUuCisrCitXaGVuIGAtLWNvbmVgIGlzIHByb3ZpZGVkLCB0aGUgYGNvcmUuc3BhcnNlQ2hlY2tvdXRDb25lYCBzZXR0aW5nIGlzCithbHNvIHNldCwgYWxsb3dpbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIGEgbGltaXRlZCBzZXQgb2YKK3BhdHRlcm5zIChzZWUgJ0NPTkUgUEFUVEVSTiBTRVQnIGJlbG93KS4KKworJ3NldCc6OgorCVdyaXRlIGEgc2V0IG9mIHBhdHRlcm5zIHRvIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSwgYXMgZ2l2ZW4gYXMKKwlhIGxpc3Qgb2YgYXJndW1lbnRzIGZvbGxvd2luZyB0aGUgJ3NldCcgc3ViY29tbWFuZC4gVXBkYXRlIHRoZQorCXdvcmtpbmcgZGlyZWN0b3J5IHRvIG1hdGNoIHRoZSBuZXcgcGF0dGVybnMuIEVuYWJsZSB0aGUKKwljb3JlLnNwYXJzZUNoZWNrb3V0IGNvbmZpZyBzZXR0aW5nIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGVuYWJsZWQuCisrCitXaGVuIHRoZSBgLS1zdGRpbmAgb3B0aW9uIGlzIHByb3ZpZGVkLCB0aGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbQorc3RhbmRhcmQgaW4gYXMgYSBuZXdsaW5lLWRlbGltaXRlZCBsaXN0IGluc3RlYWQgb2YgZnJvbSB0aGUgYXJndW1lbnRzLgorKworV2hlbiBgY29yZS5zcGFyc2VDaGVja291dENvbmVgIGlzIGVuYWJsZWQsIHRoZSBpbnB1dCBsaXN0IGlzIGNvbnNpZGVyZWQgYQorbGlzdCBvZiBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIHNwYXJzZS1jaGVja291dCBwYXR0ZXJucy4gVGhlIGNvbW1hbmQgd3JpdGVzCitwYXR0ZXJucyB0byB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBhbGwgZmlsZXMgY29udGFpbmVkIGluIHRob3NlCitkaXJlY3RvcmllcyAocmVjdXJzaXZlbHkpIGFzIHdlbGwgYXMgZmlsZXMgdGhhdCBhcmUgc2libGluZ3Mgb2YgYW5jZXN0b3IKK2RpcmVjdG9yaWVzLiBUaGUgaW5wdXQgZm9ybWF0IG1hdGNoZXMgdGhlIG91dHB1dCBvZiBgZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHlgLgorVGhpcyBpbmNsdWRlcyBpbnRlcnByZXRpbmcgcGF0aG5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdWJsZSBxdW90ZSAoIikgYXMKK0Mtc3R5bGUgcXVvdGVkIHN0cmluZ3MuCisKKydhZGQnOjoKKwlVcGRhdGUgdGhlIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBwYXR0ZXJucy4KKwlCeSBkZWZhdWx0LCB0aGVzZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLAorCWJ1dCB0aGV5IGNhbiBiZSByZWFkIGZyb20gc3RkaW4gdXNpbmcgdGhlIGAtLXN0ZGluYCBvcHRpb24uIFdoZW4KKwlgY29yZS5zcGFyc2VDaGVja291dENvbmVgIGlzIGVuYWJsZWQsIHRoZSBnaXZlbiBwYXR0ZXJucyBhcmUgaW50ZXJwcmV0ZWQKKwlhcyBkaXJlY3RvcnkgbmFtZXMgYXMgaW4gdGhlICdzZXQnIHN1YmNvbW1hbmQuCisKKydkaXNhYmxlJzo6CisJRGlzYWJsZSB0aGUgYGNvcmUuc3BhcnNlQ2hlY2tvdXRgIGNvbmZpZyBzZXR0aW5nLCBhbmQgcmVzdG9yZSB0aGUKKwl3b3JraW5nIGRpcmVjdG9yeSB0byBpbmNsdWRlIGFsbCBmaWxlcy4gTGVhdmVzIHRoZSBzcGFyc2UtY2hlY2tvdXQKKwlmaWxlIGludGFjdCBzbyBhIGxhdGVyICdnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQnIGNvbW1hbmQgbWF5CisJcmV0dXJuIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgc2FtZSBzdGF0ZS4KKworU1BBUlNFIENIRUNLT1VUCistLS0tLS0tLS0tLS0tLS0KKworIlNwYXJzZSBjaGVja291dCIgYWxsb3dzIHBvcHVsYXRpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHNwYXJzZWx5LgorSXQgdXNlcyB0aGUgc2tpcC13b3JrdHJlZSBiaXQgKHNlZSBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0pIHRvIHRlbGwKK0dpdCB3aGV0aGVyIGEgZmlsZSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgaXMgd29ydGggbG9va2luZyBhdC4gSWYKK3RoZSBza2lwLXdvcmt0cmVlIGJpdCBpcyBzZXQsIHRoZW4gdGhlIGZpbGUgaXMgaWdub3JlZCBpbiB0aGUgd29ya2luZworZGlyZWN0b3J5LiBHaXQgd2lsbCBub3QgcG9wdWxhdGUgdGhlIGNvbnRlbnRzIG9mIHRob3NlIGZpbGVzLCB3aGljaAorbWFrZXMgYSBzcGFyc2UgY2hlY2tvdXQgaGVscGZ1bCB3aGVuIHdvcmtpbmcgaW4gYSByZXBvc2l0b3J5IHdpdGggbWFueQorZmlsZXMsIGJ1dCBvbmx5IGEgZmV3IGFyZSBpbXBvcnRhbnQgdG8gdGhlIGN1cnJlbnQgdXNlci4KKworVGhlIGAkR0lUX0RJUi9pbmZvL3NwYXJzZS1jaGVja291dGAgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUKK3NraXAtd29ya3RyZWUgcmVmZXJlbmNlIGJpdG1hcC4gV2hlbiBHaXQgdXBkYXRlcyB0aGUgd29ya2luZworZGlyZWN0b3J5LCBpdCB1cGRhdGVzIHRoZSBza2lwLXdvcmt0cmVlIGJpdHMgaW4gdGhlIGluZGV4IGJhc2VkCitvbiB0aGlzIGZpbGUuIFRoZSBmaWxlcyBtYXRjaGluZyB0aGUgcGF0dGVybnMgaW4gdGhlIGZpbGUgd2lsbAorYXBwZWFyIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHRoZSByZXN0IHdpbGwgbm90LgorCitUbyBlbmFibGUgdGhlIHNwYXJzZS1jaGVja291dCBmZWF0dXJlLCBydW4gYGdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdGAgdG8KK2luaXRpYWxpemUgYSBzaW1wbGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgYW5kIGVuYWJsZSB0aGUgYGNvcmUuc3BhcnNlQ2hlY2tvdXRgCitjb25maWcgc2V0dGluZy4gVGhlbiwgcnVuIGBnaXQgc3BhcnNlLWNoZWNrb3V0IHNldGAgdG8gbW9kaWZ5IHRoZSBwYXR0ZXJucyBpbgordGhlIHNwYXJzZS1jaGVja291dCBmaWxlLgorCitUbyByZXBvcHVsYXRlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aXRoIGFsbCBmaWxlcywgdXNlIHRoZQorYGdpdCBzcGFyc2UtY2hlY2tvdXQgZGlzYWJsZWAgY29tbWFuZC4KKworCitGVUxMIFBBVFRFUk4gU0VUCistLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB1c2VzIHRoZSBzYW1lIHN5bnRheCBhcyBgLmdpdGlnbm9yZWAKK2ZpbGVzLgorCitXaGlsZSBgJEdJVF9ESVIvaW5mby9zcGFyc2UtY2hlY2tvdXRgIGlzIHVzdWFsbHkgdXNlZCB0byBzcGVjaWZ5IHdoYXQKK2ZpbGVzIGFyZSBpbmNsdWRlZCwgeW91IGNhbiBhbHNvIHNwZWNpZnkgd2hhdCBmaWxlcyBhcmUgX25vdF8gaW5jbHVkZWQsCit1c2luZyBuZWdhdGl2ZSBwYXR0ZXJucy4gRm9yIGV4YW1wbGUsIHRvIHJlbW92ZSB0aGUgZmlsZSBgdW53YW50ZWRgOgorCistLS0tLS0tLS0tLS0tLS0tCisvKgorIXVud2FudGVkCistLS0tLS0tLS0tLS0tLS0tCisKKworQ09ORSBQQVRURVJOIFNFVAorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnVsbCBwYXR0ZXJuIHNldCBhbGxvd3MgZm9yIGFyYml0cmFyeSBwYXR0ZXJuIG1hdGNoZXMgYW5kIGNvbXBsaWNhdGVkCitpbmNsdXNpb24vZXhjbHVzaW9uIHJ1bGVzLiBUaGVzZSBjYW4gcmVzdWx0IGluIE8oTipNKSBwYXR0ZXJuIG1hdGNoZXMgd2hlbgordXBkYXRpbmcgdGhlIGluZGV4LCB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgcGF0dGVybnMgYW5kIE0gaXMgdGhlIG51bWJlcgorb2YgcGF0aHMgaW4gdGhlIGluZGV4LiBUbyBjb21iYXQgdGhpcyBwZXJmb3JtYW5jZSBpc3N1ZSwgYSBtb3JlIHJlc3RyaWN0ZWQKK3BhdHRlcm4gc2V0IGlzIGFsbG93ZWQgd2hlbiBgY29yZS5zcGFyc2VDaGVja291dENvbmVgIGlzIGVuYWJsZWQuCisKK1RoZSBhY2NlcHRlZCBwYXR0ZXJucyBpbiB0aGUgY29uZSBwYXR0ZXJuIHNldCBhcmU6CisKKzEuICpSZWN1cnNpdmU6KiBBbGwgcGF0aHMgaW5zaWRlIGEgZGlyZWN0b3J5IGFyZSBpbmNsdWRlZC4KKworMi4gKlBhcmVudDoqIEFsbCBmaWxlcyBpbW1lZGlhdGVseSBpbnNpZGUgYSBkaXJlY3RvcnkgYXJlIGluY2x1ZGVkLgorCitJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgdHdvIHBhdHRlcm5zLCB3ZSBhbHNvIGV4cGVjdCB0aGF0IGFsbCBmaWxlcyBpbiB0aGUKK3Jvb3QgZGlyZWN0b3J5IGFyZSBpbmNsdWRlZC4gSWYgYSByZWN1cnNpdmUgcGF0dGVybiBpcyBhZGRlZCwgdGhlbiBhbGwKK2xlYWRpbmcgZGlyZWN0b3JpZXMgYXJlIGFkZGVkIGFzIHBhcmVudCBwYXR0ZXJucy4KKworQnkgZGVmYXVsdCwgd2hlbiBydW5uaW5nIGBnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXRgLCB0aGUgcm9vdCBkaXJlY3RvcnkgaXMKK2FkZGVkIGFzIGEgcGFyZW50IHBhdHRlcm4uIEF0IHRoaXMgcG9pbnQsIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSBjb250YWlucwordGhlIGZvbGxvd2luZyBwYXR0ZXJuczoKKworLS0tLS0tLS0tLS0tLS0tLQorLyoKKyEvKi8KKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzYXlzICJpbmNsdWRlIGV2ZXJ5dGhpbmcgaW4gcm9vdCwgYnV0IG5vdGhpbmcgdHdvIGxldmVscyBiZWxvdyByb290LiIKKworV2hlbiBpbiBjb25lIG1vZGUsIHRoZSBgZ2l0IHNwYXJzZS1jaGVja291dCBzZXRgIHN1YmNvbW1hbmQgdGFrZXMgYSBsaXN0IG9mCitkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGEgbGlzdCBvZiBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMuIEluIHRoaXMgbW9kZSwKK3RoZSBjb21tYW5kIGBnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCBBL0IvQ2Agc2V0cyB0aGUgZGlyZWN0b3J5IGBBL0IvQ2AgYXMKK2EgcmVjdXJzaXZlIHBhdHRlcm4sIHRoZSBkaXJlY3RvcmllcyBgQWAgYW5kIGBBL0JgIGFyZSBhZGRlZCBhcyBwYXJlbnQKK3BhdHRlcm5zLiBUaGUgcmVzdWx0aW5nIHNwYXJzZS1jaGVja291dCBmaWxlIGlzIG5vdworCistLS0tLS0tLS0tLS0tLS0tCisvKgorIS8qLworL0EvCishL0EvKi8KKy9BL0IvCishL0EvQi8qLworL0EvQi9DLworLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlLCBvcmRlciBtYXR0ZXJzLCBzbyB0aGUgbmVnYXRpdmUgcGF0dGVybnMgYXJlIG92ZXJyaWRkZW4gYnkgdGhlIHBvc2l0aXZlCitwYXR0ZXJucyB0aGF0IGFwcGVhciBsb3dlciBpbiB0aGUgZmlsZS4KKworSWYgYGNvcmUuc3BhcnNlQ2hlY2tvdXRDb25lPXRydWVgLCB0aGVuIEdpdCB3aWxsIHBhcnNlIHRoZSBzcGFyc2UtY2hlY2tvdXQgZmlsZQorZXhwZWN0aW5nIHBhdHRlcm5zIG9mIHRoZXNlIHR5cGVzLiBHaXQgd2lsbCB3YXJuIGlmIHRoZSBwYXR0ZXJucyBkbyBub3QgbWF0Y2guCitJZiB0aGUgcGF0dGVybnMgZG8gbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCwgdGhlbiBHaXQgd2lsbCB1c2UgZmFzdGVyIGhhc2gtCitiYXNlZCBhbGdvcml0aG1zIHRvIGNvbXB1dGUgaW5jbHVzaW9uIGluIHRoZSBzcGFyc2UtY2hlY2tvdXQuCisKK0luIHRoZSBjb25lIG1vZGUgY2FzZSwgdGhlIGBnaXQgc3BhcnNlLWNoZWNrb3V0IGxpc3RgIHN1YmNvbW1hbmQgd2lsbCBsaXN0IHRoZQorZGlyZWN0b3JpZXMgdGhhdCBkZWZpbmUgdGhlIHJlY3Vyc2l2ZSBwYXR0ZXJucy4gRm9yIHRoZSBleGFtcGxlIHNwYXJzZS1jaGVja291dAorZmlsZSBhYm92ZSwgdGhlIG91dHB1dCBpcyBhcyBmb2xsb3dzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3BhcnNlLWNoZWNrb3V0IGxpc3QKK0EvQi9DCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBgY29yZS5pZ25vcmVDYXNlPXRydWVgLCB0aGVuIHRoZSBwYXR0ZXJuLW1hdGNoaW5nIGFsZ29yaXRobSB3aWxsIHVzZSBhCitjYXNlLWluc2Vuc2l0aXZlIGNoZWNrLiBUaGlzIGNvcnJlY3RzIGZvciBjYXNlIG1pc21hdGNoZWQgZmlsZW5hbWVzIGluIHRoZQorJ2dpdCBzcGFyc2UtY2hlY2tvdXQgc2V0JyBjb21tYW5kIHRvIHJlZmxlY3QgdGhlIGV4cGVjdGVkIGNvbmUgaW4gdGhlIHdvcmtpbmcKK2RpcmVjdG9yeS4KKworCitTVUJNT0RVTEVTCistLS0tLS0tLS0tCisKK0lmIHlvdXIgcmVwb3NpdG9yeSBjb250YWlucyBvbmUgb3IgbW9yZSBzdWJtb2R1bGVzLCB0aGVuIHRob3NlIHN1Ym1vZHVsZXMgd2lsbAorYXBwZWFyIGJhc2VkIG9uIHdoaWNoIHlvdSBpbml0aWFsaXplZCB3aXRoIHRoZSBgZ2l0IHN1Ym1vZHVsZWAgY29tbWFuZC4gSWYKK3lvdXIgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIGV4Y2x1ZGUgYW4gaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB0aGVuIHRoYXQKK3N1Ym1vZHVsZSB3aWxsIHN0aWxsIGFwcGVhciBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorCitsaW5rZ2l0OmdpdC1yZWFkLXRyZWVbMV0KK2xpbmtnaXQ6Z2l0aWdub3JlWzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3RhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3RhZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YmNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGFnZS50eHQKQEAgLTAsMCArMSwyMyBAQAorZ2l0LXN0YWdlKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN0YWdlIC0gQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzdGFnZScgYXJncy4uLgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgc3lub255bSBmb3IgbGlua2dpdDpnaXQtYWRkWzFdLiAgUGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGNvbW1hbmQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZjFiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGFzaC50eHQKQEAgLTAsMCArMSwzNTggQEAKK2dpdC1zdGFzaCgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdGFzaCAtIFN0YXNoIHRoZSBjaGFuZ2VzIGluIGEgZGlydHkgd29ya2luZyBkaXJlY3RvcnkgYXdheQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3Rhc2gnIGxpc3QgWzxvcHRpb25zPl0KKydnaXQgc3Rhc2gnIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKydnaXQgc3Rhc2gnICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XQorJ2dpdCBzdGFzaCcgYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0KKydnaXQgc3Rhc2gnIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XQorCSAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dCisJICAgICBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV0KKwkgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXQorJ2dpdCBzdGFzaCcgY2xlYXIKKydnaXQgc3Rhc2gnIGNyZWF0ZSBbPG1lc3NhZ2U+XQorJ2dpdCBzdGFzaCcgc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVXNlIGBnaXQgc3Rhc2hgIHdoZW4geW91IHdhbnQgdG8gcmVjb3JkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQord29ya2luZyBkaXJlY3RvcnkgYW5kIHRoZSBpbmRleCwgYnV0IHdhbnQgdG8gZ28gYmFjayB0byBhIGNsZWFuCit3b3JraW5nIGRpcmVjdG9yeS4gIFRoZSBjb21tYW5kIHNhdmVzIHlvdXIgbG9jYWwgbW9kaWZpY2F0aW9ucyBhd2F5CithbmQgcmV2ZXJ0cyB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gbWF0Y2ggdGhlIGBIRUFEYCBjb21taXQuCisKK1RoZSBtb2RpZmljYXRpb25zIHN0YXNoZWQgYXdheSBieSB0aGlzIGNvbW1hbmQgY2FuIGJlIGxpc3RlZCB3aXRoCitgZ2l0IHN0YXNoIGxpc3RgLCBpbnNwZWN0ZWQgd2l0aCBgZ2l0IHN0YXNoIHNob3dgLCBhbmQgcmVzdG9yZWQKKyhwb3RlbnRpYWxseSBvbiB0b3Agb2YgYSBkaWZmZXJlbnQgY29tbWl0KSB3aXRoIGBnaXQgc3Rhc2ggYXBwbHlgLgorQ2FsbGluZyBgZ2l0IHN0YXNoYCB3aXRob3V0IGFueSBhcmd1bWVudHMgaXMgZXF1aXZhbGVudCB0byBgZ2l0IHN0YXNoIHB1c2hgLgorQSBzdGFzaCBpcyBieSBkZWZhdWx0IGxpc3RlZCBhcyAiV0lQIG9uICdicmFuY2huYW1lJyAuLi4iLCBidXQKK3lvdSBjYW4gZ2l2ZSBhIG1vcmUgZGVzY3JpcHRpdmUgbWVzc2FnZSBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4KK3lvdSBjcmVhdGUgb25lLgorCitUaGUgbGF0ZXN0IHN0YXNoIHlvdSBjcmVhdGVkIGlzIHN0b3JlZCBpbiBgcmVmcy9zdGFzaGA7IG9sZGVyCitzdGFzaGVzIGFyZSBmb3VuZCBpbiB0aGUgcmVmbG9nIG9mIHRoaXMgcmVmZXJlbmNlIGFuZCBjYW4gYmUgbmFtZWQgdXNpbmcKK3RoZSB1c3VhbCByZWZsb2cgc3ludGF4IChlLmcuIGBzdGFzaEB7MH1gIGlzIHRoZSBtb3N0IHJlY2VudGx5CitjcmVhdGVkIHN0YXNoLCBgc3Rhc2hAezF9YCBpcyB0aGUgb25lIGJlZm9yZSBpdCwgYHN0YXNoQHsyLmhvdXJzLmFnb31gCitpcyBhbHNvIHBvc3NpYmxlKS4gU3Rhc2hlcyBtYXkgYWxzbyBiZSByZWZlcmVuY2VkIGJ5IHNwZWNpZnlpbmcganVzdCB0aGUKK3N0YXNoIGluZGV4IChlLmcuIHRoZSBpbnRlZ2VyIGBuYCBpcyBlcXVpdmFsZW50IHRvIGBzdGFzaEB7bn1gKS4KKworQ09NTUFORFMKKy0tLS0tLS0tCisKK3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1xfC0tcXVpZXRdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XSBbLS1wYXRoc3BlYy1mcm9tLWZpbGU9PGZpbGU+IFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWy0tXSBbPHBhdGhzcGVjPi4uLl06OgorCisJU2F2ZSB5b3VyIGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gYSBuZXcgJ3N0YXNoIGVudHJ5JyBhbmQgcm9sbCB0aGVtCisJYmFjayB0byBIRUFEIChpbiB0aGUgd29ya2luZyB0cmVlIGFuZCBpbiB0aGUgaW5kZXgpLgorCVRoZSA8bWVzc2FnZT4gcGFydCBpcyBvcHRpb25hbCBhbmQgZ2l2ZXMKKwl0aGUgZGVzY3JpcHRpb24gYWxvbmcgd2l0aCB0aGUgc3Rhc2hlZCBzdGF0ZS4KKysKK0ZvciBxdWlja2x5IG1ha2luZyBhIHNuYXBzaG90LCB5b3UgY2FuIG9taXQgInB1c2giLiAgSW4gdGhpcyBtb2RlLAorbm9uLW9wdGlvbiBhcmd1bWVudHMgYXJlIG5vdCBhbGxvd2VkIHRvIHByZXZlbnQgYSBtaXNzcGVsbGVkCitzdWJjb21tYW5kIGZyb20gbWFraW5nIGFuIHVud2FudGVkIHN0YXNoIGVudHJ5LiAgVGhlIHR3byBleGNlcHRpb25zIHRvIHRoaXMKK2FyZSBgc3Rhc2ggLXBgIHdoaWNoIGFjdHMgYXMgYWxpYXMgZm9yIGBzdGFzaCBwdXNoIC1wYCBhbmQgcGF0aHNwZWMgZWxlbWVudHMsCit3aGljaCBhcmUgYWxsb3dlZCBhZnRlciBhIGRvdWJsZSBoeXBoZW4gYC0tYCBmb3IgZGlzYW1iaWd1YXRpb24uCisKK3NhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1xfC0tcXVpZXRdIFs8bWVzc2FnZT5dOjoKKworCVRoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mICdnaXQgc3Rhc2ggcHVzaCcuICBJdAorCWRpZmZlcnMgZnJvbSAic3Rhc2ggcHVzaCIgaW4gdGhhdCBpdCBjYW5ub3QgdGFrZSBwYXRoc3BlYy4KKwlJbnN0ZWFkLCBhbGwgbm9uLW9wdGlvbiBhcmd1bWVudHMgYXJlIGNvbmNhdGVuYXRlZCB0byBmb3JtIHRoZSBzdGFzaAorCW1lc3NhZ2UuCisKK2xpc3QgWzxvcHRpb25zPl06OgorCisJTGlzdCB0aGUgc3Rhc2ggZW50cmllcyB0aGF0IHlvdSBjdXJyZW50bHkgaGF2ZS4gIEVhY2ggJ3N0YXNoIGVudHJ5JyBpcworCWxpc3RlZCB3aXRoIGl0cyBuYW1lIChlLmcuIGBzdGFzaEB7MH1gIGlzIHRoZSBsYXRlc3QgZW50cnksIGBzdGFzaEB7MX1gIGlzCisJdGhlIG9uZSBiZWZvcmUsIGV0Yy4pLCB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRoYXQgd2FzIGN1cnJlbnQgd2hlbiB0aGUKKwllbnRyeSB3YXMgbWFkZSwgYW5kIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIGNvbW1pdCB0aGUgZW50cnkgd2FzCisJYmFzZWQgb24uCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGFzaEB7MH06IFdJUCBvbiBzdWJtaXQ6IDZlYmQwZTIuLi4gVXBkYXRlIGdpdC1zdGFzaCBkb2N1bWVudGF0aW9uCitzdGFzaEB7MX06IE9uIG1hc3RlcjogOWNjMDU4OS4uLiBBZGQgZ2l0LXN0YXNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQgbG9nJworY29tbWFuZCB0byBjb250cm9sIHdoYXQgaXMgc2hvd24gYW5kIGhvdy4gU2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl06OgorCisJU2hvdyB0aGUgY2hhbmdlcyByZWNvcmRlZCBpbiB0aGUgc3Rhc2ggZW50cnkgYXMgYSBkaWZmIGJldHdlZW4gdGhlCisJc3Rhc2hlZCBjb250ZW50cyBhbmQgdGhlIGNvbW1pdCBiYWNrIHdoZW4gdGhlIHN0YXNoIGVudHJ5IHdhcyBmaXJzdAorCWNyZWF0ZWQuCisJQnkgZGVmYXVsdCwgdGhlIGNvbW1hbmQgc2hvd3MgdGhlIGRpZmZzdGF0LCBidXQgaXQgd2lsbCBhY2NlcHQgYW55CisJZm9ybWF0IGtub3duIHRvICdnaXQgZGlmZicgKGUuZy4sIGBnaXQgc3Rhc2ggc2hvdyAtcCBzdGFzaEB7MX1gCisJdG8gdmlldyB0aGUgc2Vjb25kIG1vc3QgcmVjZW50IGVudHJ5IGluIHBhdGNoIGZvcm0pLgorCVlvdSBjYW4gdXNlIHN0YXNoLnNob3dTdGF0IGFuZC9vciBzdGFzaC5zaG93UGF0Y2ggY29uZmlnIHZhcmlhYmxlcworCXRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKworcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dOjoKKworCVJlbW92ZSBhIHNpbmdsZSBzdGFzaGVkIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QgYW5kIGFwcGx5IGl0CisJb24gdG9wIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgdHJlZSBzdGF0ZSwgaS5lLiwgZG8gdGhlIGludmVyc2UKKwlvcGVyYXRpb24gb2YgYGdpdCBzdGFzaCBwdXNoYC4gVGhlIHdvcmtpbmcgZGlyZWN0b3J5IG11c3QKKwltYXRjaCB0aGUgaW5kZXguCisrCitBcHBseWluZyB0aGUgc3RhdGUgY2FuIGZhaWwgd2l0aCBjb25mbGljdHM7IGluIHRoaXMgY2FzZSwgaXQgaXMgbm90CityZW1vdmVkIGZyb20gdGhlIHN0YXNoIGxpc3QuIFlvdSBuZWVkIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cyBieSBoYW5kCithbmQgY2FsbCBgZ2l0IHN0YXNoIGRyb3BgIG1hbnVhbGx5IGFmdGVyd2FyZHMuCisKK2FwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dOjoKKworCUxpa2UgYHBvcGAsIGJ1dCBkbyBub3QgcmVtb3ZlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzdGFzaCBsaXN0LiBVbmxpa2UgYHBvcGAsCisJYDxzdGFzaD5gIG1heSBiZSBhbnkgY29tbWl0IHRoYXQgbG9va3MgbGlrZSBhIGNvbW1pdCBjcmVhdGVkIGJ5CisJYHN0YXNoIHB1c2hgIG9yIGBzdGFzaCBjcmVhdGVgLgorCiticmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XTo6CisKKwlDcmVhdGVzIGFuZCBjaGVja3Mgb3V0IGEgbmV3IGJyYW5jaCBuYW1lZCBgPGJyYW5jaG5hbWU+YCBzdGFydGluZyBmcm9tCisJdGhlIGNvbW1pdCBhdCB3aGljaCB0aGUgYDxzdGFzaD5gIHdhcyBvcmlnaW5hbGx5IGNyZWF0ZWQsIGFwcGxpZXMgdGhlCisJY2hhbmdlcyByZWNvcmRlZCBpbiBgPHN0YXNoPmAgdG8gdGhlIG5ldyB3b3JraW5nIHRyZWUgYW5kIGluZGV4LgorCUlmIHRoYXQgc3VjY2VlZHMsIGFuZCBgPHN0YXNoPmAgaXMgYSByZWZlcmVuY2Ugb2YgdGhlIGZvcm0KKwlgc3Rhc2hAezxyZXZpc2lvbj59YCwgaXQgdGhlbiBkcm9wcyB0aGUgYDxzdGFzaD5gLgorKworVGhpcyBpcyB1c2VmdWwgaWYgdGhlIGJyYW5jaCBvbiB3aGljaCB5b3UgcmFuIGBnaXQgc3Rhc2ggcHVzaGAgaGFzCitjaGFuZ2VkIGVub3VnaCB0aGF0IGBnaXQgc3Rhc2ggYXBwbHlgIGZhaWxzIGR1ZSB0byBjb25mbGljdHMuIFNpbmNlCit0aGUgc3Rhc2ggZW50cnkgaXMgYXBwbGllZCBvbiB0b3Agb2YgdGhlIGNvbW1pdCB0aGF0IHdhcyBIRUFEIGF0IHRoZQordGltZSBgZ2l0IHN0YXNoYCB3YXMgcnVuLCBpdCByZXN0b3JlcyB0aGUgb3JpZ2luYWxseSBzdGFzaGVkIHN0YXRlCit3aXRoIG5vIGNvbmZsaWN0cy4KKworY2xlYXI6OgorCVJlbW92ZSBhbGwgdGhlIHN0YXNoIGVudHJpZXMuIE5vdGUgdGhhdCB0aG9zZSBlbnRyaWVzIHdpbGwgdGhlbgorCWJlIHN1YmplY3QgdG8gcHJ1bmluZywgYW5kIG1heSBiZSBpbXBvc3NpYmxlIHRvIHJlY292ZXIgKHNlZQorCSdFeGFtcGxlcycgYmVsb3cgZm9yIGEgcG9zc2libGUgc3RyYXRlZ3kpLgorCitkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl06OgorCisJUmVtb3ZlIGEgc2luZ2xlIHN0YXNoIGVudHJ5IGZyb20gdGhlIGxpc3Qgb2Ygc3Rhc2ggZW50cmllcy4KKworY3JlYXRlOjoKKworCUNyZWF0ZSBhIHN0YXNoIGVudHJ5ICh3aGljaCBpcyBhIHJlZ3VsYXIgY29tbWl0IG9iamVjdCkgYW5kCisJcmV0dXJuIGl0cyBvYmplY3QgbmFtZSwgd2l0aG91dCBzdG9yaW5nIGl0IGFueXdoZXJlIGluIHRoZSByZWYKKwluYW1lc3BhY2UuCisJVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VmdWwgZm9yIHNjcmlwdHMuICBJdCBpcyBwcm9iYWJseSBub3QKKwl0aGUgY29tbWFuZCB5b3Ugd2FudCB0byB1c2U7IHNlZSAicHVzaCIgYWJvdmUuCisKK3N0b3JlOjoKKworCVN0b3JlIGEgZ2l2ZW4gc3Rhc2ggY3JlYXRlZCB2aWEgJ2dpdCBzdGFzaCBjcmVhdGUnICh3aGljaCBpcyBhCisJZGFuZ2xpbmcgbWVyZ2UgY29tbWl0KSBpbiB0aGUgc3Rhc2ggcmVmLCB1cGRhdGluZyB0aGUgc3Rhc2gKKwlyZWZsb2cuICBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWZ1bCBmb3Igc2NyaXB0cy4gIEl0IGlzCisJcHJvYmFibHkgbm90IHRoZSBjb21tYW5kIHlvdSB3YW50IHRvIHVzZTsgc2VlICJwdXNoIiBhYm92ZS4KKworT1BUSU9OUworLS0tLS0tLQorLWE6OgorLS1hbGw6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGBwdXNoYCBhbmQgYHNhdmVgIGNvbW1hbmRzLgorKworQWxsIGlnbm9yZWQgYW5kIHVudHJhY2tlZCBmaWxlcyBhcmUgYWxzbyBzdGFzaGVkIGFuZCB0aGVuIGNsZWFuZWQKK3VwIHdpdGggYGdpdCBjbGVhbmAuCisKKy11OjoKKy0taW5jbHVkZS11bnRyYWNrZWQ6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGBwdXNoYCBhbmQgYHNhdmVgIGNvbW1hbmRzLgorKworQWxsIHVudHJhY2tlZCBmaWxlcyBhcmUgYWxzbyBzdGFzaGVkIGFuZCB0aGVuIGNsZWFuZWQgdXAgd2l0aAorYGdpdCBjbGVhbmAuCisKKy0taW5kZXg6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGBwb3BgIGFuZCBgYXBwbHlgIGNvbW1hbmRzLgorKworVHJpZXMgdG8gcmVpbnN0YXRlIG5vdCBvbmx5IHRoZSB3b3JraW5nIHRyZWUncyBjaGFuZ2VzLCBidXQgYWxzbwordGhlIGluZGV4J3Mgb25lcy4gSG93ZXZlciwgdGhpcyBjYW4gZmFpbCwgd2hlbiB5b3UgaGF2ZSBjb25mbGljdHMKKyh3aGljaCBhcmUgc3RvcmVkIGluIHRoZSBpbmRleCwgd2hlcmUgeW91IHRoZXJlZm9yZSBjYW4gbm8gbG9uZ2VyCithcHBseSB0aGUgY2hhbmdlcyBhcyB0aGV5IHdlcmUgb3JpZ2luYWxseSkuCisKKy1rOjoKKy0ta2VlcC1pbmRleDo6CistLW5vLWtlZXAtaW5kZXg6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGBwdXNoYCBhbmQgYHNhdmVgIGNvbW1hbmRzLgorKworQWxsIGNoYW5nZXMgYWxyZWFkeSBhZGRlZCB0byB0aGUgaW5kZXggYXJlIGxlZnQgaW50YWN0LgorCistcDo6CistLXBhdGNoOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcHVzaGAgYW5kIGBzYXZlYCBjb21tYW5kcy4KKysKK0ludGVyYWN0aXZlbHkgc2VsZWN0IGh1bmtzIGZyb20gdGhlIGRpZmYgYmV0d2VlbiBIRUFEIGFuZCB0aGUKK3dvcmtpbmcgdHJlZSB0byBiZSBzdGFzaGVkLiAgVGhlIHN0YXNoIGVudHJ5IGlzIGNvbnN0cnVjdGVkIHN1Y2gKK3RoYXQgaXRzIGluZGV4IHN0YXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBzdGF0ZSBvZiB5b3VyCityZXBvc2l0b3J5LCBhbmQgaXRzIHdvcmt0cmVlIGNvbnRhaW5zIG9ubHkgdGhlIGNoYW5nZXMgeW91IHNlbGVjdGVkCitpbnRlcmFjdGl2ZWx5LiAgVGhlIHNlbGVjdGVkIGNoYW5nZXMgYXJlIHRoZW4gcm9sbGVkIGJhY2sgZnJvbSB5b3VyCit3b3JrdHJlZS4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJyBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWFkZFsxXQordG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlIGAtLXBhdGNoYCBtb2RlLgorKworVGhlIGAtLXBhdGNoYCBvcHRpb24gaW1wbGllcyBgLS1rZWVwLWluZGV4YC4gIFlvdSBjYW4gdXNlCitgLS1uby1rZWVwLWluZGV4YCB0byBvdmVycmlkZSB0aGlzLgorCistLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGBwdXNoYCBjb21tYW5kLgorKworUGF0aHNwZWMgaXMgcGFzc2VkIGluIGA8ZmlsZT5gIGluc3RlYWQgb2YgY29tbWFuZGxpbmUgYXJncy4gSWYKK2A8ZmlsZT5gIGlzIGV4YWN0bHkgYC1gIHRoZW4gc3RhbmRhcmQgaW5wdXQgaXMgdXNlZC4gUGF0aHNwZWMKK2VsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgTEYgb3IgQ1IvTEYuIFBhdGhzcGVjIGVsZW1lbnRzIGNhbiBiZQorcXVvdGVkIGFzIGV4cGxhaW5lZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUucXVvdGVQYXRoYAorKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiBTZWUgYWxzbyBgLS1wYXRoc3BlYy1maWxlLW51bGAgYW5kCitnbG9iYWwgYC0tbGl0ZXJhbC1wYXRoc3BlY3NgLgorCistLXBhdGhzcGVjLWZpbGUtbnVsOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcHVzaGAgY29tbWFuZC4KKysKK09ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXBhdGhzcGVjLWZyb20tZmlsZWAuIFBhdGhzcGVjIGVsZW1lbnRzIGFyZQorc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciBhbmQgYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlIHRha2VuCitsaXRlcmFsbHkgKGluY2x1ZGluZyBuZXdsaW5lcyBhbmQgcXVvdGVzKS4KKworLXE6OgorLS1xdWlldDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYGFwcGx5YCwgYGRyb3BgLCBgcG9wYCwgYHB1c2hgLAorCWBzYXZlYCwgYHN0b3JlYCBjb21tYW5kcy4KKysKK1F1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KKworXC0tOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcHVzaGAgY29tbWFuZC4KKysKK1NlcGFyYXRlcyBwYXRoc3BlYyBmcm9tIG9wdGlvbnMgZm9yIGRpc2FtYmlndWF0aW9uIHB1cnBvc2VzLgorCis8cGF0aHNwZWM+Li4uOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBgcHVzaGAgY29tbWFuZC4KKysKK1RoZSBuZXcgc3Rhc2ggZW50cnkgcmVjb3JkcyB0aGUgbW9kaWZpZWQgc3RhdGVzIG9ubHkgZm9yIHRoZSBmaWxlcwordGhhdCBtYXRjaCB0aGUgcGF0aHNwZWMuICBUaGUgaW5kZXggZW50cmllcyBhbmQgd29ya2luZyB0cmVlIGZpbGVzCithcmUgdGhlbiByb2xsZWQgYmFjayB0byB0aGUgc3RhdGUgaW4gSEVBRCBvbmx5IGZvciB0aGVzZSBmaWxlcywKK3RvbywgbGVhdmluZyBmaWxlcyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgcGF0aHNwZWMgaW50YWN0LgorKworRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSAncGF0aHNwZWMnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10uCisKKzxzdGFzaD46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGBhcHBseWAsIGBicmFuY2hgLCBgZHJvcGAsIGBwb3BgLAorCWBzaG93YCBjb21tYW5kcy4KKysKK0EgcmVmZXJlbmNlIG9mIHRoZSBmb3JtIGBzdGFzaEB7PHJldmlzaW9uPn1gLiBXaGVuIG5vIGA8c3Rhc2g+YCBpcworZ2l2ZW4sIHRoZSBsYXRlc3Qgc3Rhc2ggaXMgYXNzdW1lZCAodGhhdCBpcywgYHN0YXNoQHswfWApLgorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK0Egc3Rhc2ggZW50cnkgaXMgcmVwcmVzZW50ZWQgYXMgYSBjb21taXQgd2hvc2UgdHJlZSByZWNvcmRzIHRoZSBzdGF0ZQorb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgaXRzIGZpcnN0IHBhcmVudCBpcyB0aGUgY29tbWl0IGF0IGBIRUFEYAord2hlbiB0aGUgZW50cnkgd2FzIGNyZWF0ZWQuICBUaGUgdHJlZSBvZiB0aGUgc2Vjb25kIHBhcmVudCByZWNvcmRzIHRoZQorc3RhdGUgb2YgdGhlIGluZGV4IHdoZW4gdGhlIGVudHJ5IGlzIG1hZGUsIGFuZCBpdCBpcyBtYWRlIGEgY2hpbGQgb2YKK3RoZSBgSEVBRGAgY29tbWl0LiAgVGhlIGFuY2VzdHJ5IGdyYXBoIGxvb2tzIGxpa2UgdGhpczoKKworICAgICAgICAgICAgLi0tLS1XCisgICAgICAgICAgIC8gICAgLworICAgICAtLS0tLUgtLS0tSQorCit3aGVyZSBgSGAgaXMgdGhlIGBIRUFEYCBjb21taXQsIGBJYCBpcyBhIGNvbW1pdCB0aGF0IHJlY29yZHMgdGhlIHN0YXRlCitvZiB0aGUgaW5kZXgsIGFuZCBgV2AgaXMgYSBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBzdGF0ZSBvZiB0aGUgd29ya2luZwordHJlZS4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworUHVsbGluZyBpbnRvIGEgZGlydHkgdHJlZTo6CisKK1doZW4geW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIHNvbWV0aGluZywgeW91IGxlYXJuIHRoYXQgdGhlcmUgYXJlCit1cHN0cmVhbSBjaGFuZ2VzIHRoYXQgYXJlIHBvc3NpYmx5IHJlbGV2YW50IHRvIHdoYXQgeW91IGFyZQorZG9pbmcuICBXaGVuIHlvdXIgbG9jYWwgY2hhbmdlcyBkbyBub3QgY29uZmxpY3Qgd2l0aCB0aGUgY2hhbmdlcyBpbgordGhlIHVwc3RyZWFtLCBhIHNpbXBsZSBgZ2l0IHB1bGxgIHdpbGwgbGV0IHlvdSBtb3ZlIGZvcndhcmQuCisrCitIb3dldmVyLCB0aGVyZSBhcmUgY2FzZXMgaW4gd2hpY2ggeW91ciBsb2NhbCBjaGFuZ2VzIGRvIGNvbmZsaWN0IHdpdGgKK3RoZSB1cHN0cmVhbSBjaGFuZ2VzLCBhbmQgYGdpdCBwdWxsYCByZWZ1c2VzIHRvIG92ZXJ3cml0ZSB5b3VyCitjaGFuZ2VzLiAgSW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4gc3Rhc2ggeW91ciBjaGFuZ2VzIGF3YXksCitwZXJmb3JtIGEgcHVsbCwgYW5kIHRoZW4gdW5zdGFzaCwgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbAorIC4uLgorZmlsZSBmb29iYXIgbm90IHVwIHRvIGRhdGUsIGNhbm5vdCBtZXJnZS4KKyQgZ2l0IHN0YXNoCiskIGdpdCBwdWxsCiskIGdpdCBzdGFzaCBwb3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW50ZXJydXB0ZWQgd29ya2Zsb3c6OgorCitXaGVuIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBzb21ldGhpbmcsIHlvdXIgYm9zcyBjb21lcyBpbiBhbmQKK2RlbWFuZHMgdGhhdCB5b3UgZml4IHNvbWV0aGluZyBpbW1lZGlhdGVseS4gIFRyYWRpdGlvbmFsbHksIHlvdSB3b3VsZAorbWFrZSBhIGNvbW1pdCB0byBhIHRlbXBvcmFyeSBicmFuY2ggdG8gc3RvcmUgeW91ciBjaGFuZ2VzIGF3YXksIGFuZAorcmV0dXJuIHRvIHlvdXIgb3JpZ2luYWwgYnJhbmNoIHRvIG1ha2UgdGhlIGVtZXJnZW5jeSBmaXgsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uIGhhY2sgaGFjayBoYWNrIC4uLgorJCBnaXQgc3dpdGNoIC1jIG15X3dpcAorJCBnaXQgY29tbWl0IC1hIC1tICJXSVAiCiskIGdpdCBzd2l0Y2ggbWFzdGVyCiskIGVkaXQgZW1lcmdlbmN5IGZpeAorJCBnaXQgY29tbWl0IC1hIC1tICJGaXggaW4gYSBodXJyeSIKKyQgZ2l0IHN3aXRjaCBteV93aXAKKyQgZ2l0IHJlc2V0IC0tc29mdCBIRUFEXgorIyAuLi4gY29udGludWUgaGFja2luZyAuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1lvdSBjYW4gdXNlICdnaXQgc3Rhc2gnIHRvIHNpbXBsaWZ5IHRoZSBhYm92ZSwgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi4gaGFjayBoYWNrIGhhY2sgLi4uCiskIGdpdCBzdGFzaAorJCBlZGl0IGVtZXJnZW5jeSBmaXgKKyQgZ2l0IGNvbW1pdCAtYSAtbSAiRml4IGluIGEgaHVycnkiCiskIGdpdCBzdGFzaCBwb3AKKyMgLi4uIGNvbnRpbnVlIGhhY2tpbmcgLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Rlc3RpbmcgcGFydGlhbCBjb21taXRzOjoKKworWW91IGNhbiB1c2UgYGdpdCBzdGFzaCBwdXNoIC0ta2VlcC1pbmRleGAgd2hlbiB5b3Ugd2FudCB0byBtYWtlIHR3byBvcgorbW9yZSBjb21taXRzIG91dCBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgd29yayB0cmVlLCBhbmQgeW91IHdhbnQgdG8gdGVzdAorZWFjaCBjaGFuZ2UgYmVmb3JlIGNvbW1pdHRpbmc6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLiBoYWNrIGhhY2sgaGFjayAuLi4KKyQgZ2l0IGFkZCAtLXBhdGNoIGZvbyAgICAgICAgICAgICMgYWRkIGp1c3QgZmlyc3QgcGFydCB0byB0aGUgaW5kZXgKKyQgZ2l0IHN0YXNoIHB1c2ggLS1rZWVwLWluZGV4ICAgICMgc2F2ZSBhbGwgb3RoZXIgY2hhbmdlcyB0byB0aGUgc3Rhc2gKKyQgZWRpdC9idWlsZC90ZXN0IGZpcnN0IHBhcnQKKyQgZ2l0IGNvbW1pdCAtbSAnRmlyc3QgcGFydCcgICAgICMgY29tbWl0IGZ1bGx5IHRlc3RlZCBjaGFuZ2UKKyQgZ2l0IHN0YXNoIHBvcCAgICAgICAgICAgICAgICAgICMgcHJlcGFyZSB0byB3b3JrIG9uIGFsbCBvdGhlciBjaGFuZ2VzCisjIC4uLiByZXBlYXQgYWJvdmUgZml2ZSBzdGVwcyB1bnRpbCBvbmUgY29tbWl0IHJlbWFpbnMgLi4uCiskIGVkaXQvYnVpbGQvdGVzdCByZW1haW5pbmcgcGFydHMKKyQgZ2l0IGNvbW1pdCBmb28gLW0gJ1JlbWFpbmluZyBwYXJ0cycKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVjb3ZlcmluZyBzdGFzaCBlbnRyaWVzIHRoYXQgd2VyZSBjbGVhcmVkL2Ryb3BwZWQgZXJyb25lb3VzbHk6OgorCitJZiB5b3UgbWlzdGFrZW5seSBkcm9wIG9yIGNsZWFyIHN0YXNoIGVudHJpZXMsIHRoZXkgY2Fubm90IGJlIHJlY292ZXJlZAordGhyb3VnaCB0aGUgbm9ybWFsIHNhZmV0eSBtZWNoYW5pc21zLiAgSG93ZXZlciwgeW91IGNhbiB0cnkgdGhlCitmb2xsb3dpbmcgaW5jYW50YXRpb24gdG8gZ2V0IGEgbGlzdCBvZiBzdGFzaCBlbnRyaWVzIHRoYXQgYXJlIHN0aWxsIGluCit5b3VyIHJlcG9zaXRvcnksIGJ1dCBub3QgcmVhY2hhYmxlIGFueSBtb3JlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZzY2sgLS11bnJlYWNoYWJsZSB8CitncmVwIGNvbW1pdCB8IGN1dCAtZFwgIC1mMyB8Cit4YXJncyBnaXQgbG9nIC0tbWVyZ2VzIC0tbm8td2FsayAtLWdyZXA9V0lQCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwKK2xpbmtnaXQ6Z2l0LXJlZmxvZ1sxXSwKK2xpbmtnaXQ6Z2l0LXJlc2V0WzFdLAorbGlua2dpdDpnaXQtc3dpdGNoWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3RhdHVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzczMWI0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQKQEAgLTAsMCArMSw0NDMgQEAKK2dpdC1zdGF0dXMoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN0YXR1cyAtIFNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3RhdHVzJyBbPG9wdGlvbnM+Li4uXSBbLS1dIFs8cGF0aHNwZWM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0Rpc3BsYXlzIHBhdGhzIHRoYXQgaGF2ZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUKK2N1cnJlbnQgSEVBRCBjb21taXQsIHBhdGhzIHRoYXQgaGF2ZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB3b3JraW5nCit0cmVlIGFuZCB0aGUgaW5kZXggZmlsZSwgYW5kIHBhdGhzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCBhcmUgbm90Cit0cmFja2VkIGJ5IEdpdCAoYW5kIGFyZSBub3QgaWdub3JlZCBieSBsaW5rZ2l0OmdpdGlnbm9yZVs1XSkuIFRoZSBmaXJzdAorYXJlIHdoYXQgeW91IF93b3VsZF8gY29tbWl0IGJ5IHJ1bm5pbmcgYGdpdCBjb21taXRgOyB0aGUgc2Vjb25kIGFuZAordGhpcmQgYXJlIHdoYXQgeW91IF9jb3VsZF8gY29tbWl0IGJ5IHJ1bm5pbmcgJ2dpdCBhZGQnIGJlZm9yZSBydW5uaW5nCitgZ2l0IGNvbW1pdGAuCisKK09QVElPTlMKKy0tLS0tLS0KKworLXM6OgorLS1zaG9ydDo6CisJR2l2ZSB0aGUgb3V0cHV0IGluIHRoZSBzaG9ydC1mb3JtYXQuCisKKy1iOjoKKy0tYnJhbmNoOjoKKwlTaG93IHRoZSBicmFuY2ggYW5kIHRyYWNraW5nIGluZm8gZXZlbiBpbiBzaG9ydC1mb3JtYXQuCisKKy0tc2hvdy1zdGFzaDo6CisJU2hvdyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY3VycmVudGx5IHN0YXNoZWQgYXdheS4KKworLS1wb3JjZWxhaW5bPTx2ZXJzaW9uPl06OgorCUdpdmUgdGhlIG91dHB1dCBpbiBhbiBlYXN5LXRvLXBhcnNlIGZvcm1hdCBmb3Igc2NyaXB0cy4KKwlUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHNob3J0IG91dHB1dCwgYnV0IHdpbGwgcmVtYWluIHN0YWJsZQorCWFjcm9zcyBHaXQgdmVyc2lvbnMgYW5kIHJlZ2FyZGxlc3Mgb2YgdXNlciBjb25maWd1cmF0aW9uLiBTZWUKKwliZWxvdyBmb3IgZGV0YWlscy4KKysKK1RoZSB2ZXJzaW9uIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGZvcm1hdCB2ZXJzaW9uLgorVGhpcyBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gdGhlIG9yaWdpbmFsIHZlcnNpb24gJ3YxJyBmb3JtYXQuCisKKy0tbG9uZzo6CisJR2l2ZSB0aGUgb3V0cHV0IGluIHRoZSBsb25nLWZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworLXY6OgorLS12ZXJib3NlOjoKKwlJbiBhZGRpdGlvbiB0byB0aGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCwgYWxzbworCXNob3cgdGhlIHRleHR1YWwgY2hhbmdlcyB0aGF0IGFyZSBzdGFnZWQgdG8gYmUgY29tbWl0dGVkCisJKGkuZS4sIGxpa2UgdGhlIG91dHB1dCBvZiBgZ2l0IGRpZmYgLS1jYWNoZWRgKS4gSWYgYC12YCBpcyBzcGVjaWZpZWQKKwl0d2ljZSwgdGhlbiBhbHNvIHNob3cgdGhlIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0CisJaGF2ZSBub3QgeWV0IGJlZW4gc3RhZ2VkIChpLmUuLCBsaWtlIHRoZSBvdXRwdXQgb2YgYGdpdCBkaWZmYCkuCisKKy11Wzxtb2RlPl06OgorLS11bnRyYWNrZWQtZmlsZXNbPTxtb2RlPl06OgorCVNob3cgdW50cmFja2VkIGZpbGVzLgorKworLS0KK1RoZSBtb2RlIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGhhbmRsaW5nIG9mIHVudHJhY2tlZCBmaWxlcy4KK0l0IGlzIG9wdGlvbmFsOiBpdCBkZWZhdWx0cyB0byAnYWxsJywgYW5kIGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorc3R1Y2sgdG8gdGhlIG9wdGlvbiAoZS5nLiBgLXVub2AsIGJ1dCBub3QgYC11IG5vYCkuCisKK1RoZSBwb3NzaWJsZSBvcHRpb25zIGFyZToKKworCS0gJ25vJyAgICAgLSBTaG93IG5vIHVudHJhY2tlZCBmaWxlcy4KKwktICdub3JtYWwnIC0gU2hvd3MgdW50cmFja2VkIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKwktICdhbGwnICAgIC0gQWxzbyBzaG93cyBpbmRpdmlkdWFsIGZpbGVzIGluIHVudHJhY2tlZCBkaXJlY3Rvcmllcy4KKworV2hlbiBgLXVgIG9wdGlvbiBpcyBub3QgdXNlZCwgdW50cmFja2VkIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBhcmUKK3Nob3duIChpLmUuIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgYG5vcm1hbGApLCB0byBoZWxwIHlvdSBhdm9pZAorZm9yZ2V0dGluZyB0byBhZGQgbmV3bHkgY3JlYXRlZCBmaWxlcy4gIEJlY2F1c2UgaXQgdGFrZXMgZXh0cmEgd29yawordG8gZmluZCB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0sIHRoaXMgbW9kZSBtYXkgdGFrZSBzb21lCit0aW1lIGluIGEgbGFyZ2Ugd29ya2luZyB0cmVlLgorQ29uc2lkZXIgZW5hYmxpbmcgdW50cmFja2VkIGNhY2hlIGFuZCBzcGxpdCBpbmRleCBpZiBzdXBwb3J0ZWQgKHNlZQorYGdpdCB1cGRhdGUtaW5kZXggLS11bnRyYWNrZWQtY2FjaGVgIGFuZCBgZ2l0IHVwZGF0ZS1pbmRleAorLS1zcGxpdC1pbmRleGApLCBPdGhlcndpc2UgeW91IGNhbiB1c2UgYG5vYCB0byBoYXZlIGBnaXQgc3RhdHVzYAorcmV0dXJuIG1vcmUgcXVpY2tseSB3aXRob3V0IHNob3dpbmcgdW50cmFja2VkIGZpbGVzLgorCitUaGUgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcworY29uZmlndXJhdGlvbiB2YXJpYWJsZSBkb2N1bWVudGVkIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKy0tCisKKy0taWdub3JlLXN1Ym1vZHVsZXNbPTx3aGVuPl06OgorCUlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgd2hlbiBsb29raW5nIGZvciBjaGFuZ2VzLiA8d2hlbj4gY2FuIGJlCisJZWl0aGVyICJub25lIiwgInVudHJhY2tlZCIsICJkaXJ0eSIgb3IgImFsbCIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorCVVzaW5nICJub25lIiB3aWxsIGNvbnNpZGVyIHRoZSBzdWJtb2R1bGUgbW9kaWZpZWQgd2hlbiBpdCBlaXRoZXIgY29udGFpbnMKKwl1bnRyYWNrZWQgb3IgbW9kaWZpZWQgZmlsZXMgb3IgaXRzIEhFQUQgZGlmZmVycyBmcm9tIHRoZSBjb21taXQgcmVjb3JkZWQKKwlpbiB0aGUgc3VwZXJwcm9qZWN0IGFuZCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgc2V0dGluZ3Mgb2YgdGhlCisJJ2lnbm9yZScgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBvciBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0uIFdoZW4KKwkidW50cmFja2VkIiBpcyB1c2VkIHN1Ym1vZHVsZXMgYXJlIG5vdCBjb25zaWRlcmVkIGRpcnR5IHdoZW4gdGhleSBvbmx5CisJY29udGFpbiB1bnRyYWNrZWQgY29udGVudCAoYnV0IHRoZXkgYXJlIHN0aWxsIHNjYW5uZWQgZm9yIG1vZGlmaWVkCisJY29udGVudCkuIFVzaW5nICJkaXJ0eSIgaWdub3JlcyBhbGwgY2hhbmdlcyB0byB0aGUgd29yayB0cmVlIG9mIHN1Ym1vZHVsZXMsCisJb25seSBjaGFuZ2VzIHRvIHRoZSBjb21taXRzIHN0b3JlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGFyZSBzaG93biAodGhpcyB3YXMKKwl0aGUgYmVoYXZpb3IgYmVmb3JlIDEuNy4wKS4gVXNpbmcgImFsbCIgaGlkZXMgYWxsIGNoYW5nZXMgdG8gc3VibW9kdWxlcworCShhbmQgc3VwcHJlc3NlcyB0aGUgb3V0cHV0IG9mIHN1Ym1vZHVsZSBzdW1tYXJpZXMgd2hlbiB0aGUgY29uZmlnIG9wdGlvbgorCWBzdGF0dXMuc3VibW9kdWxlU3VtbWFyeWAgaXMgc2V0KS4KKworLS1pZ25vcmVkWz08bW9kZT5dOjoKKwlTaG93IGlnbm9yZWQgZmlsZXMgYXMgd2VsbC4KKysKKy0tCitUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBoYW5kbGluZyBvZiBpZ25vcmVkIGZpbGVzLgorSXQgaXMgb3B0aW9uYWw6IGl0IGRlZmF1bHRzIHRvICd0cmFkaXRpb25hbCcuCisKK1RoZSBwb3NzaWJsZSBvcHRpb25zIGFyZToKKworCS0gJ3RyYWRpdGlvbmFsJyAtIFNob3dzIGlnbm9yZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLCB1bmxlc3MKKwkJCSAgLS11bnRyYWNrZWQtZmlsZXM9YWxsIGlzIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZQorCQkJICBpbmRpdmlkdWFsIGZpbGVzIGluIGlnbm9yZWQgZGlyZWN0b3JpZXMgYXJlCisJCQkgIGRpc3BsYXllZC4KKwktICdubycJICAgICAgICAtIFNob3cgbm8gaWdub3JlZCBmaWxlcy4KKwktICdtYXRjaGluZycgICAgLSBTaG93cyBpZ25vcmVkIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBtYXRjaGluZyBhbgorCQkJICBpZ25vcmUgcGF0dGVybi4KKworV2hlbiAnbWF0Y2hpbmcnIG1vZGUgaXMgc3BlY2lmaWVkLCBwYXRocyB0aGF0IGV4cGxpY2l0bHkgbWF0Y2ggYW4KK2lnbm9yZWQgcGF0dGVybiBhcmUgc2hvd24uIElmIGEgZGlyZWN0b3J5IG1hdGNoZXMgYW4gaWdub3JlIHBhdHRlcm4sCit0aGVuIGl0IGlzIHNob3duLCBidXQgbm90IHBhdGhzIGNvbnRhaW5lZCBpbiB0aGUgaWdub3JlZCBkaXJlY3RvcnkuIElmCithIGRpcmVjdG9yeSBkb2VzIG5vdCBtYXRjaCBhbiBpZ25vcmUgcGF0dGVybiwgYnV0IGFsbCBjb250ZW50cyBhcmUKK2lnbm9yZWQsIHRoZW4gdGhlIGRpcmVjdG9yeSBpcyBub3Qgc2hvd24sIGJ1dCBhbGwgY29udGVudHMgYXJlIHNob3duLgorLS0KKworLXo6OgorCVRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMLCBpbnN0ZWFkIG9mIExGLiAgVGhpcyBpbXBsaWVzCisJdGhlIGAtLXBvcmNlbGFpbj12MWAgb3V0cHV0IGZvcm1hdCBpZiBubyBvdGhlciBmb3JtYXQgaXMgZ2l2ZW4uCisKKy0tY29sdW1uWz08b3B0aW9ucz5dOjoKKy0tbm8tY29sdW1uOjoKKwlEaXNwbGF5IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zLiBTZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWNvbHVtbi5zdGF0dXMgZm9yIG9wdGlvbiBzeW50YXguYC0tY29sdW1uYCBhbmQgYC0tbm8tY29sdW1uYAorCXdpdGhvdXQgb3B0aW9ucyBhcmUgZXF1aXZhbGVudCB0byAnYWx3YXlzJyBhbmQgJ25ldmVyJworCXJlc3BlY3RpdmVseS4KKworLS1haGVhZC1iZWhpbmQ6OgorLS1uby1haGVhZC1iZWhpbmQ6OgorCURpc3BsYXkgb3IgZG8gbm90IGRpc3BsYXkgZGV0YWlsZWQgYWhlYWQvYmVoaW5kIGNvdW50cyBmb3IgdGhlCisJYnJhbmNoIHJlbGF0aXZlIHRvIGl0cyB1cHN0cmVhbSBicmFuY2guICBEZWZhdWx0cyB0byB0cnVlLgorCistLXJlbmFtZXM6OgorLS1uby1yZW5hbWVzOjoKKwlUdXJuIG9uL29mZiByZW5hbWUgZGV0ZWN0aW9uIHJlZ2FyZGxlc3Mgb2YgdXNlciBjb25maWd1cmF0aW9uLgorCVNlZSBhbHNvIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYC0tbm8tcmVuYW1lc2AuCisKKy0tZmluZC1yZW5hbWVzWz08bj5dOjoKKwlUdXJuIG9uIHJlbmFtZSBkZXRlY3Rpb24sIG9wdGlvbmFsbHkgc2V0dGluZyB0aGUgc2ltaWxhcml0eQorCXRocmVzaG9sZC4KKwlTZWUgYWxzbyBsaW5rZ2l0OmdpdC1kaWZmWzFdIGAtLWZpbmQtcmVuYW1lc2AuCisKKzxwYXRoc3BlYz4uLi46OgorCVNlZSB0aGUgJ3BhdGhzcGVjJyBlbnRyeSBpbiBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCitPVVRQVVQKKy0tLS0tLQorVGhlIG91dHB1dCBmcm9tIHRoaXMgY29tbWFuZCBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgY29tbWl0Cit0ZW1wbGF0ZSBjb21tZW50LgorVGhlIGRlZmF1bHQsIGxvbmcgZm9ybWF0LCBpcyBkZXNpZ25lZCB0byBiZSBodW1hbiByZWFkYWJsZSwKK3ZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlLiAgSXRzIGNvbnRlbnRzIGFuZCBmb3JtYXQgYXJlIHN1YmplY3QgdG8gY2hhbmdlCithdCBhbnkgdGltZS4KKworVGhlIHBhdGhzIG1lbnRpb25lZCBpbiB0aGUgb3V0cHV0LCB1bmxpa2UgbWFueSBvdGhlciBHaXQgY29tbWFuZHMsIGFyZQorbWFkZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgeW91IGFyZSB3b3JraW5nIGluIGEKK3N1YmRpcmVjdG9yeSAodGhpcyBpcyBvbiBwdXJwb3NlLCB0byBoZWxwIGN1dHRpbmcgYW5kIHBhc3RpbmcpLiBTZWUKK3RoZSBzdGF0dXMucmVsYXRpdmVQYXRocyBjb25maWcgb3B0aW9uIGJlbG93LgorCitTaG9ydCBGb3JtYXQKK35+fn5+fn5+fn5+fgorCitJbiB0aGUgc2hvcnQtZm9ybWF0LCB0aGUgc3RhdHVzIG9mIGVhY2ggcGF0aCBpcyBzaG93biBhcyBvbmUgb2YgdGhlc2UKK2Zvcm1zCisKKwlYWSBQQVRICisJWFkgT1JJR19QQVRIIC0+IFBBVEgKKword2hlcmUgYE9SSUdfUEFUSGAgaXMgd2hlcmUgdGhlIHJlbmFtZWQvY29waWVkIGNvbnRlbnRzIGNhbWUKK2Zyb20uIGBPUklHX1BBVEhgIGlzIG9ubHkgc2hvd24gd2hlbiB0aGUgZW50cnkgaXMgcmVuYW1lZCBvcgorY29waWVkLiBUaGUgYFhZYCBpcyBhIHR3by1sZXR0ZXIgc3RhdHVzIGNvZGUuCisKK1RoZSBmaWVsZHMgKGluY2x1ZGluZyB0aGUgYC0+YCkgYXJlIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgYQorc2luZ2xlIHNwYWNlLiBJZiBhIGZpbGVuYW1lIGNvbnRhaW5zIHdoaXRlc3BhY2Ugb3Igb3RoZXIgbm9ucHJpbnRhYmxlCitjaGFyYWN0ZXJzLCB0aGF0IGZpZWxkIHdpbGwgYmUgcXVvdGVkIGluIHRoZSBtYW5uZXIgb2YgYSBDIHN0cmluZworbGl0ZXJhbDogc3Vycm91bmRlZCBieSBBU0NJSSBkb3VibGUgcXVvdGUgKDM0KSBjaGFyYWN0ZXJzLCBhbmQgd2l0aAoraW50ZXJpb3Igc3BlY2lhbCBjaGFyYWN0ZXJzIGJhY2tzbGFzaC1lc2NhcGVkLgorCitGb3IgcGF0aHMgd2l0aCBtZXJnZSBjb25mbGljdHMsIGBYYCBhbmQgYFlgIHNob3cgdGhlIG1vZGlmaWNhdGlvbgorc3RhdGVzIG9mIGVhY2ggc2lkZSBvZiB0aGUgbWVyZ2UuIEZvciBwYXRocyB0aGF0IGRvIG5vdCBoYXZlIG1lcmdlCitjb25mbGljdHMsIGBYYCBzaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBpbmRleCwgYW5kIGBZYCBzaG93cyB0aGUgc3RhdHVzCitvZiB0aGUgd29yayB0cmVlLiAgRm9yIHVudHJhY2tlZCBwYXRocywgYFhZYCBhcmUgYD8/YC4gIE90aGVyIHN0YXR1cworY29kZXMgY2FuIGJlIGludGVycHJldGVkIGFzIGZvbGxvd3M6CisKKyogJyAnID0gdW5tb2RpZmllZAorKiAnTScgPSBtb2RpZmllZAorKiAnQScgPSBhZGRlZAorKiAnRCcgPSBkZWxldGVkCisqICdSJyA9IHJlbmFtZWQKKyogJ0MnID0gY29waWVkCisqICdVJyA9IHVwZGF0ZWQgYnV0IHVubWVyZ2VkCisKK0lnbm9yZWQgZmlsZXMgYXJlIG5vdCBsaXN0ZWQsIHVubGVzcyBgLS1pZ25vcmVkYCBvcHRpb24gaXMgaW4gZWZmZWN0LAoraW4gd2hpY2ggY2FzZSBgWFlgIGFyZSBgISFgLgorCisuLi4uCitYICAgICAgICAgIFkgICAgIE1lYW5pbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgW0FNRF0gICBub3QgdXBkYXRlZAorTSAgICAgICAgWyBNRF0gICB1cGRhdGVkIGluIGluZGV4CitBICAgICAgICBbIE1EXSAgIGFkZGVkIHRvIGluZGV4CitEICAgICAgICAgICAgICAgIGRlbGV0ZWQgZnJvbSBpbmRleAorUiAgICAgICAgWyBNRF0gICByZW5hbWVkIGluIGluZGV4CitDICAgICAgICBbIE1EXSAgIGNvcGllZCBpbiBpbmRleAorW01BUkNdICAgICAgICAgICBpbmRleCBhbmQgd29yayB0cmVlIG1hdGNoZXMKK1sgTUFSQ10gICAgIE0gICAgd29yayB0cmVlIGNoYW5nZWQgc2luY2UgaW5kZXgKK1sgTUFSQ10gICAgIEQgICAgZGVsZXRlZCBpbiB3b3JrIHRyZWUKK1sgRF0gICAgICAgIFIgICAgcmVuYW1lZCBpbiB3b3JrIHRyZWUKK1sgRF0gICAgICAgIEMgICAgY29waWVkIGluIHdvcmsgdHJlZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRCAgICAgICAgICAgRCAgICB1bm1lcmdlZCwgYm90aCBkZWxldGVkCitBICAgICAgICAgICBVICAgIHVubWVyZ2VkLCBhZGRlZCBieSB1cworVSAgICAgICAgICAgRCAgICB1bm1lcmdlZCwgZGVsZXRlZCBieSB0aGVtCitVICAgICAgICAgICBBICAgIHVubWVyZ2VkLCBhZGRlZCBieSB0aGVtCitEICAgICAgICAgICBVICAgIHVubWVyZ2VkLCBkZWxldGVkIGJ5IHVzCitBICAgICAgICAgICBBICAgIHVubWVyZ2VkLCBib3RoIGFkZGVkCitVICAgICAgICAgICBVICAgIHVubWVyZ2VkLCBib3RoIG1vZGlmaWVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis/ICAgICAgICAgICA/ICAgIHVudHJhY2tlZAorISAgICAgICAgICAgISAgICBpZ25vcmVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4uCisKK1N1Ym1vZHVsZXMgaGF2ZSBtb3JlIHN0YXRlIGFuZCBpbnN0ZWFkIHJlcG9ydAorCQlNICAgIHRoZSBzdWJtb2R1bGUgaGFzIGEgZGlmZmVyZW50IEhFQUQgdGhhbgorCQkgICAgIHJlY29yZGVkIGluIHRoZSBpbmRleAorCQltICAgIHRoZSBzdWJtb2R1bGUgaGFzIG1vZGlmaWVkIGNvbnRlbnQKKwkJPyAgICB0aGUgc3VibW9kdWxlIGhhcyB1bnRyYWNrZWQgZmlsZXMKK3NpbmNlIG1vZGlmaWVkIGNvbnRlbnQgb3IgdW50cmFja2VkIGZpbGVzIGluIGEgc3VibW9kdWxlIGNhbm5vdCBiZSBhZGRlZAordmlhIGBnaXQgYWRkYCBpbiB0aGUgc3VwZXJwcm9qZWN0IHRvIHByZXBhcmUgYSBjb21taXQuCisKKydtJyBhbmQgJz8nIGFyZSBhcHBsaWVkIHJlY3Vyc2l2ZWx5LiBGb3IgZXhhbXBsZSBpZiBhIG5lc3RlZCBzdWJtb2R1bGUKK2luIGEgc3VibW9kdWxlIGNvbnRhaW5zIGFuIHVudHJhY2tlZCBmaWxlLCB0aGlzIGlzIHJlcG9ydGVkIGFzICc/JyBhcyB3ZWxsLgorCitJZiAtYiBpcyB1c2VkIHRoZSBzaG9ydC1mb3JtYXQgc3RhdHVzIGlzIHByZWNlZGVkIGJ5IGEgbGluZQorCisgICAgIyMgYnJhbmNobmFtZSB0cmFja2luZyBpbmZvCisKK1BvcmNlbGFpbiBGb3JtYXQgVmVyc2lvbiAxCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitWZXJzaW9uIDEgcG9yY2VsYWluIGZvcm1hdCBpcyBzaW1pbGFyIHRvIHRoZSBzaG9ydCBmb3JtYXQsIGJ1dCBpcyBndWFyYW50ZWVkCitub3QgdG8gY2hhbmdlIGluIGEgYmFja3dhcmRzLWluY29tcGF0aWJsZSB3YXkgYmV0d2VlbiBHaXQgdmVyc2lvbnMgb3IKK2Jhc2VkIG9uIHVzZXIgY29uZmlndXJhdGlvbi4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgcGFyc2luZyBieSBzY3JpcHRzLgorVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzaG9ydCBmb3JtYXQgYWJvdmUgYWxzbyBkZXNjcmliZXMgdGhlIHBvcmNlbGFpbgorZm9ybWF0LCB3aXRoIGEgZmV3IGV4Y2VwdGlvbnM6CisKKzEuIFRoZSB1c2VyJ3MgY29sb3Iuc3RhdHVzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHJlc3BlY3RlZDsgY29sb3Igd2lsbAorICAgYWx3YXlzIGJlIG9mZi4KKworMi4gVGhlIHVzZXIncyBzdGF0dXMucmVsYXRpdmVQYXRocyBjb25maWd1cmF0aW9uIGlzIG5vdCByZXNwZWN0ZWQ7IHBhdGhzCisgICBzaG93biB3aWxsIGFsd2F5cyBiZSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290LgorCitUaGVyZSBpcyBhbHNvIGFuIGFsdGVybmF0ZSAteiBmb3JtYXQgcmVjb21tZW5kZWQgZm9yIG1hY2hpbmUgcGFyc2luZy4gSW4KK3RoYXQgZm9ybWF0LCB0aGUgc3RhdHVzIGZpZWxkIGlzIHRoZSBzYW1lLCBidXQgc29tZSBvdGhlciB0aGluZ3MKK2NoYW5nZS4gIEZpcnN0LCB0aGUgJ1wtPicgaXMgb21pdHRlZCBmcm9tIHJlbmFtZSBlbnRyaWVzIGFuZCB0aGUgZmllbGQKK29yZGVyIGlzIHJldmVyc2VkIChlLmcgJ2Zyb20gXC0+IHRvJyBiZWNvbWVzICd0byBmcm9tJykuIFNlY29uZCwgYSBOVUwKKyhBU0NJSSAwKSBmb2xsb3dzIGVhY2ggZmlsZW5hbWUsIHJlcGxhY2luZyBzcGFjZSBhcyBhIGZpZWxkIHNlcGFyYXRvcgorYW5kIHRoZSB0ZXJtaW5hdGluZyBuZXdsaW5lIChidXQgYSBzcGFjZSBzdGlsbCBzZXBhcmF0ZXMgdGhlIHN0YXR1cworZmllbGQgZnJvbSB0aGUgZmlyc3QgZmlsZW5hbWUpLiAgVGhpcmQsIGZpbGVuYW1lcyBjb250YWluaW5nIHNwZWNpYWwKK2NoYXJhY3RlcnMgYXJlIG5vdCBzcGVjaWFsbHkgZm9ybWF0dGVkOyBubyBxdW90aW5nIG9yCitiYWNrc2xhc2gtZXNjYXBpbmcgaXMgcGVyZm9ybWVkLgorCitBbnkgc3VibW9kdWxlIGNoYW5nZXMgYXJlIHJlcG9ydGVkIGFzIG1vZGlmaWVkIGBNYCBpbnN0ZWFkIG9mIGBtYCBvciBzaW5nbGUgYD9gLgorCitQb3JjZWxhaW4gRm9ybWF0IFZlcnNpb24gMgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVmVyc2lvbiAyIGZvcm1hdCBhZGRzIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mCit0aGUgd29ya3RyZWUgYW5kIGNoYW5nZWQgaXRlbXMuICBWZXJzaW9uIDIgYWxzbyBkZWZpbmVzIGFuIGV4dGVuc2libGUKK3NldCBvZiBlYXN5IHRvIHBhcnNlIG9wdGlvbmFsIGhlYWRlcnMuCisKK0hlYWRlciBsaW5lcyBzdGFydCB3aXRoICIjIiBhbmQgYXJlIGFkZGVkIGluIHJlc3BvbnNlIHRvIHNwZWNpZmljCitjb21tYW5kIGxpbmUgYXJndW1lbnRzLiAgUGFyc2VycyBzaG91bGQgaWdub3JlIGhlYWRlcnMgdGhleQorZG9uJ3QgcmVjb2duaXplLgorCitCcmFuY2ggSGVhZGVycworXl5eXl5eXl5eXl5eXl4KKworSWYgYC0tYnJhbmNoYCBpcyBnaXZlbiwgYSBzZXJpZXMgb2YgaGVhZGVyIGxpbmVzIGFyZSBwcmludGVkIHdpdGgKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGJyYW5jaC4KKworLi4uLgorTGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGJyYW5jaC5vaWQgPGNvbW1pdD4gfCAoaW5pdGlhbCkgICAgICAgIEN1cnJlbnQgY29tbWl0LgorIyBicmFuY2guaGVhZCA8YnJhbmNoPiB8IChkZXRhY2hlZCkgICAgICBDdXJyZW50IGJyYW5jaC4KKyMgYnJhbmNoLnVwc3RyZWFtIDx1cHN0cmVhbV9icmFuY2g+ICAgICAgSWYgdXBzdHJlYW0gaXMgc2V0LgorIyBicmFuY2guYWIgKzxhaGVhZD4gLTxiZWhpbmQ+ICAgICAgICAgICBJZiB1cHN0cmVhbSBpcyBzZXQgYW5kCisJCQkJCSB0aGUgY29tbWl0IGlzIHByZXNlbnQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy4uLi4KKworQ2hhbmdlZCBUcmFja2VkIEVudHJpZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0ZvbGxvd2luZyB0aGUgaGVhZGVycywgYSBzZXJpZXMgb2YgbGluZXMgYXJlIHByaW50ZWQgZm9yIHRyYWNrZWQKK2VudHJpZXMuICBPbmUgb2YgdGhyZWUgZGlmZmVyZW50IGxpbmUgZm9ybWF0cyBtYXkgYmUgdXNlZCB0byBkZXNjcmliZQorYW4gZW50cnkgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGNoYW5nZS4gIFRyYWNrZWQgZW50cmllcyBhcmUgcHJpbnRlZAoraW4gYW4gdW5kZWZpbmVkIG9yZGVyOyBwYXJzZXJzIHNob3VsZCBhbGxvdyBmb3IgYSBtaXh0dXJlIG9mIHRoZSAzCitsaW5lIHR5cGVzIGluIGFueSBvcmRlci4KKworT3JkaW5hcnkgY2hhbmdlZCBlbnRyaWVzIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAgICAxIDxYWT4gPHN1Yj4gPG1IPiA8bUk+IDxtVz4gPGhIPiA8aEk+IDxwYXRoPgorCitSZW5hbWVkIG9yIGNvcGllZCBlbnRyaWVzIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKyAgICAyIDxYWT4gPHN1Yj4gPG1IPiA8bUk+IDxtVz4gPGhIPiA8aEk+IDxYPjxzY29yZT4gPHBhdGg+PHNlcD48b3JpZ1BhdGg+CisKKy4uLi4KK0ZpZWxkICAgICAgIE1lYW5pbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8WFk+ICAgICAgICBBIDIgY2hhcmFjdGVyIGZpZWxkIGNvbnRhaW5pbmcgdGhlIHN0YWdlZCBhbmQKKwkgICAgdW5zdGFnZWQgWFkgdmFsdWVzIGRlc2NyaWJlZCBpbiB0aGUgc2hvcnQgZm9ybWF0LAorCSAgICB3aXRoIHVuY2hhbmdlZCBpbmRpY2F0ZWQgYnkgYSAiLiIgcmF0aGVyIHRoYW4KKwkgICAgYSBzcGFjZS4KKzxzdWI+ICAgICAgIEEgNCBjaGFyYWN0ZXIgZmllbGQgZGVzY3JpYmluZyB0aGUgc3VibW9kdWxlIHN0YXRlLgorCSAgICAiTi4uLiIgd2hlbiB0aGUgZW50cnkgaXMgbm90IGEgc3VibW9kdWxlLgorCSAgICAiUzxjPjxtPjx1PiIgd2hlbiB0aGUgZW50cnkgaXMgYSBzdWJtb2R1bGUuCisJICAgIDxjPiBpcyAiQyIgaWYgdGhlIGNvbW1pdCBjaGFuZ2VkOyBvdGhlcndpc2UgIi4iLgorCSAgICA8bT4gaXMgIk0iIGlmIGl0IGhhcyB0cmFja2VkIGNoYW5nZXM7IG90aGVyd2lzZSAiLiIuCisJICAgIDx1PiBpcyAiVSIgaWYgdGhlcmUgYXJlIHVudHJhY2tlZCBjaGFuZ2VzOyBvdGhlcndpc2UgIi4iLgorPG1IPiAgICAgICAgVGhlIG9jdGFsIGZpbGUgbW9kZSBpbiBIRUFELgorPG1JPiAgICAgICAgVGhlIG9jdGFsIGZpbGUgbW9kZSBpbiB0aGUgaW5kZXguCis8bVc+ICAgICAgICBUaGUgb2N0YWwgZmlsZSBtb2RlIGluIHRoZSB3b3JrdHJlZS4KKzxoSD4gICAgICAgIFRoZSBvYmplY3QgbmFtZSBpbiBIRUFELgorPGhJPiAgICAgICAgVGhlIG9iamVjdCBuYW1lIGluIHRoZSBpbmRleC4KKzxYPjxzY29yZT4gIFRoZSByZW5hbWUgb3IgY29weSBzY29yZSAoZGVub3RpbmcgdGhlIHBlcmNlbnRhZ2UKKwkgICAgb2Ygc2ltaWxhcml0eSBiZXR3ZWVuIHRoZSBzb3VyY2UgYW5kIHRhcmdldCBvZiB0aGUKKwkgICAgbW92ZSBvciBjb3B5KS4gRm9yIGV4YW1wbGUgIlIxMDAiIG9yICJDNzUiLgorPHBhdGg+ICAgICAgVGhlIHBhdGhuYW1lLiAgSW4gYSByZW5hbWVkL2NvcGllZCBlbnRyeSwgdGhpcworCSAgICBpcyB0aGUgdGFyZ2V0IHBhdGguCis8c2VwPiAgICAgICBXaGVuIHRoZSBgLXpgIG9wdGlvbiBpcyB1c2VkLCB0aGUgMiBwYXRobmFtZXMgYXJlIHNlcGFyYXRlZAorCSAgICB3aXRoIGEgTlVMIChBU0NJSSAweDAwKSBieXRlOyBvdGhlcndpc2UsIGEgdGFiIChBU0NJSSAweDA5KQorCSAgICBieXRlIHNlcGFyYXRlcyB0aGVtLgorPG9yaWdQYXRoPiAgVGhlIHBhdGhuYW1lIGluIHRoZSBjb21taXQgYXQgSEVBRCBvciBpbiB0aGUgaW5kZXguCisJICAgIFRoaXMgaXMgb25seSBwcmVzZW50IGluIGEgcmVuYW1lZC9jb3BpZWQgZW50cnksIGFuZAorCSAgICB0ZWxscyB3aGVyZSB0aGUgcmVuYW1lZC9jb3BpZWQgY29udGVudHMgY2FtZSBmcm9tLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy4uLi4KKworVW5tZXJnZWQgZW50cmllcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OyB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzCithICJ1IiB0byBkaXN0aW5ndWlzaCBmcm9tIG9yZGluYXJ5IGNoYW5nZWQgZW50cmllcy4KKworICAgIHUgPHh5PiA8c3ViPiA8bTE+IDxtMj4gPG0zPiA8bVc+IDxoMT4gPGgyPiA8aDM+IDxwYXRoPgorCisuLi4uCitGaWVsZCAgICAgICBNZWFuaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPFhZPiAgICAgICAgQSAyIGNoYXJhY3RlciBmaWVsZCBkZXNjcmliaW5nIHRoZSBjb25mbGljdCB0eXBlCisJICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2hvcnQgZm9ybWF0LgorPHN1Yj4gICAgICAgQSA0IGNoYXJhY3RlciBmaWVsZCBkZXNjcmliaW5nIHRoZSBzdWJtb2R1bGUgc3RhdGUKKwkgICAgYXMgZGVzY3JpYmVkIGFib3ZlLgorPG0xPiAgICAgICAgVGhlIG9jdGFsIGZpbGUgbW9kZSBpbiBzdGFnZSAxLgorPG0yPiAgICAgICAgVGhlIG9jdGFsIGZpbGUgbW9kZSBpbiBzdGFnZSAyLgorPG0zPiAgICAgICAgVGhlIG9jdGFsIGZpbGUgbW9kZSBpbiBzdGFnZSAzLgorPG1XPiAgICAgICAgVGhlIG9jdGFsIGZpbGUgbW9kZSBpbiB0aGUgd29ya3RyZWUuCis8aDE+ICAgICAgICBUaGUgb2JqZWN0IG5hbWUgaW4gc3RhZ2UgMS4KKzxoMj4gICAgICAgIFRoZSBvYmplY3QgbmFtZSBpbiBzdGFnZSAyLgorPGgzPiAgICAgICAgVGhlIG9iamVjdCBuYW1lIGluIHN0YWdlIDMuCis8cGF0aD4gICAgICBUaGUgcGF0aG5hbWUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLi4uLgorCitPdGhlciBJdGVtcworXl5eXl5eXl5eXl4KKworRm9sbG93aW5nIHRoZSB0cmFja2VkIGVudHJpZXMgKGFuZCBpZiByZXF1ZXN0ZWQpLCBhIHNlcmllcyBvZgorbGluZXMgd2lsbCBiZSBwcmludGVkIGZvciB1bnRyYWNrZWQgYW5kIHRoZW4gaWdub3JlZCBpdGVtcworZm91bmQgaW4gdGhlIHdvcmt0cmVlLgorCitVbnRyYWNrZWQgaXRlbXMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworICAgID8gPHBhdGg+CisKK0lnbm9yZWQgaXRlbXMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworICAgICEgPHBhdGg+CisKK1BhdGhuYW1lIEZvcm1hdCBOb3RlcyBhbmQgLXoKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworV2hlbiB0aGUgYC16YCBvcHRpb24gaXMgZ2l2ZW4sIHBhdGhuYW1lcyBhcmUgcHJpbnRlZCBhcyBpcyBhbmQKK3dpdGhvdXQgYW55IHF1b3RpbmcgYW5kIGxpbmVzIGFyZSB0ZXJtaW5hdGVkIHdpdGggYSBOVUwgKEFTQ0lJIDB4MDApCitieXRlLgorCitXaXRob3V0IHRoZSBgLXpgIG9wdGlvbiwgcGF0aG5hbWVzIHdpdGggInVudXN1YWwiIGNoYXJhY3RlcnMgYXJlCitxdW90ZWQgYXMgZXhwbGFpbmVkIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5xdW90ZVBhdGhgCisoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBob25vcnMgYGNvbG9yLnN0YXR1c2AgKG9yIGBzdGF0dXMuY29sb3JgIC0tIHRoZXkKK21lYW4gdGhlIHNhbWUgdGhpbmcgYW5kIHRoZSBsYXR0ZXIgaXMga2VwdCBmb3IgYmFja3dhcmQKK2NvbXBhdGliaWxpdHkpIGFuZCBgY29sb3Iuc3RhdHVzLjxzbG90PmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKK3RvIGNvbG9yaXplIGl0cyBvdXRwdXQuCisKK0lmIHRoZSBjb25maWcgdmFyaWFibGUgYHN0YXR1cy5yZWxhdGl2ZVBhdGhzYCBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gYWxsCitwYXRocyBzaG93biBhcmUgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdCwgbm90IHRvIHRoZSBjdXJyZW50CitkaXJlY3RvcnkuCisKK0lmIGBzdGF0dXMuc3VibW9kdWxlU3VtbWFyeWAgaXMgc2V0IHRvIGEgbm9uIHplcm8gbnVtYmVyIG9yIHRydWUgKGlkZW50aWNhbAordG8gLTEgb3IgYW4gdW5saW1pdGVkIG51bWJlciksIHRoZSBzdWJtb2R1bGUgc3VtbWFyeSB3aWxsIGJlIGVuYWJsZWQgZm9yCit0aGUgbG9uZyBmb3JtYXQgYW5kIGEgc3VtbWFyeSBvZiBjb21taXRzIGZvciBtb2RpZmllZCBzdWJtb2R1bGVzIHdpbGwgYmUKK3Nob3duIChzZWUgLS1zdW1tYXJ5LWxpbWl0IG9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0pLiBQbGVhc2Ugbm90ZQordGhhdCB0aGUgc3VtbWFyeSBvdXRwdXQgZnJvbSB0aGUgc3RhdHVzIGNvbW1hbmQgd2lsbCBiZSBzdXBwcmVzc2VkIGZvciBhbGwKK3N1Ym1vZHVsZXMgd2hlbiBgZGlmZi5pZ25vcmVTdWJtb2R1bGVzYCBpcyBzZXQgdG8gJ2FsbCcgb3Igb25seSBmb3IgdGhvc2UKK3N1Ym1vZHVsZXMgd2hlcmUgYHN1Ym1vZHVsZS48bmFtZT4uaWdub3JlPWFsbGAuIFRvIGFsc28gdmlldyB0aGUgc3VtbWFyeSBmb3IKK2lnbm9yZWQgc3VibW9kdWxlcyB5b3UgY2FuIGVpdGhlciB1c2UgdGhlIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgY29tbWFuZAorbGluZSBvcHRpb24gb3IgdGhlICdnaXQgc3VibW9kdWxlIHN1bW1hcnknIGNvbW1hbmQsIHdoaWNoIHNob3dzIGEgc2ltaWxhcgorb3V0cHV0IGJ1dCBkb2VzIG5vdCBob25vciB0aGVzZSBzZXR0aW5ncy4KKworQkFDS0dST1VORCBSRUZSRVNICistLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgYGdpdCBzdGF0dXNgIHdpbGwgYXV0b21hdGljYWxseSByZWZyZXNoIHRoZSBpbmRleCwgdXBkYXRpbmcKK3RoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIHdyaXRpbmcgb3V0IHRoZQorcmVzdWx0LiBXcml0aW5nIG91dCB0aGUgdXBkYXRlZCBpbmRleCBpcyBhbiBvcHRpbWl6YXRpb24gdGhhdCBpc24ndAorc3RyaWN0bHkgbmVjZXNzYXJ5IChgc3RhdHVzYCBjb21wdXRlcyB0aGUgdmFsdWVzIGZvciBpdHNlbGYsIGJ1dCB3cml0aW5nCit0aGVtIG91dCBpcyBqdXN0IHRvIHNhdmUgc3Vic2VxdWVudCBwcm9ncmFtcyBmcm9tIHJlcGVhdGluZyBvdXIKK2NvbXB1dGF0aW9uKS4gV2hlbiBgc3RhdHVzYCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQsIHRoZSBsb2NrIGhlbGQKK2R1cmluZyB0aGUgd3JpdGUgbWF5IGNvbmZsaWN0IHdpdGggb3RoZXIgc2ltdWx0YW5lb3VzIHByb2Nlc3NlcywgY2F1c2luZwordGhlbSB0byBmYWlsLiBTY3JpcHRzIHJ1bm5pbmcgYHN0YXR1c2AgaW4gdGhlIGJhY2tncm91bmQgc2hvdWxkIGNvbnNpZGVyCit1c2luZyBgZ2l0IC0tbm8tb3B0aW9uYWwtbG9ja3Mgc3RhdHVzYCAoc2VlIGxpbmtnaXQ6Z2l0WzFdIGZvciBkZXRhaWxzKS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdGlnbm9yZVs1XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3RyaXBzcGFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzOGY3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0CkBAIC0wLDAgKzEsOTQgQEAKK2dpdC1zdHJpcHNwYWNlKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3RyaXBzcGFjZSAtIFJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN0cmlwc3BhY2UnIFstcyB8IC0tc3RyaXAtY29tbWVudHNdCisnZ2l0IHN0cmlwc3BhY2UnIFstYyB8IC0tY29tbWVudC1saW5lc10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1JlYWQgdGV4dCwgc3VjaCBhcyBjb21taXQgbWVzc2FnZXMsIG5vdGVzLCB0YWdzIGFuZCBicmFuY2gKK2Rlc2NyaXB0aW9ucywgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIGNsZWFuIGl0IGluIHRoZSBtYW5uZXIKK3VzZWQgYnkgR2l0LgorCitXaXRoIG5vIGFyZ3VtZW50cywgdGhpcyB3aWxsOgorCistIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIGxpbmVzCistIGNvbGxhcHNlIG11bHRpcGxlIGNvbnNlY3V0aXZlIGVtcHR5IGxpbmVzIGludG8gb25lIGVtcHR5IGxpbmUKKy0gcmVtb3ZlIGVtcHR5IGxpbmVzIGZyb20gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnB1dAorLSBhZGQgYSBtaXNzaW5nICdcbicgdG8gdGhlIGxhc3QgbGluZSBpZiBuZWNlc3NhcnkuCisKK0luIHRoZSBjYXNlIHdoZXJlIHRoZSBpbnB1dCBjb25zaXN0cyBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIG5vCitvdXRwdXQgd2lsbCBiZSBwcm9kdWNlZC4KKworKk5PVEUqOiBUaGlzIGlzIGludGVuZGVkIGZvciBjbGVhbmluZyBtZXRhZGF0YSwgcHJlZmVyIHRoZSBgLS13aGl0ZXNwYWNlPWZpeGAKK21vZGUgb2YgbGlua2dpdDpnaXQtYXBwbHlbMV0gZm9yIGNvcnJlY3Rpbmcgd2hpdGVzcGFjZSBvZiBwYXRjaGVzIG9yIGZpbGVzIGluCit0aGUgcmVwb3NpdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorLXM6OgorLS1zdHJpcC1jb21tZW50czo6CisJU2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIChkZWZhdWx0ICcjJykuCisKKy1jOjoKKy0tY29tbWVudC1saW5lczo6CisJUHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgYmxhbmsgdG8gZWFjaCBsaW5lLiBMaW5lcyB3aWxsIGF1dG9tYXRpY2FsbHkKKwliZSB0ZXJtaW5hdGVkIHdpdGggYSBuZXdsaW5lLiBPbiBlbXB0eSBsaW5lcywgb25seSB0aGUgY29tbWVudCBjaGFyYWN0ZXIKKwl3aWxsIGJlIHByZXBlbmRlZC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0dpdmVuIHRoZSBmb2xsb3dpbmcgbm9pc3kgaW5wdXQgd2l0aCAnJCcgaW5kaWNhdGluZyB0aGUgZW5kIG9mIGEgbGluZToKKworLS0tLS0tLS0tCit8QSBicmllZiBpbnRyb2R1Y3Rpb24gICAkCit8ICAgJAorfCQKK3xBIG5ldyBwYXJhZ3JhcGgkCit8IyB3aXRoIGEgY29tbWVudGVkLW91dCBsaW5lICAgICQKK3xleHBsYWluaW5nIGxvdHMgb2Ygc3R1ZmYuJAorfCQKK3wjIEFuIG9sZCBwYXJhZ3JhcGgsIGFsc28gY29tbWVudGVkLW91dC4gJAorfCAgICAgICQKK3xUaGUgZW5kLiQKK3wgICQKKy0tLS0tLS0tLQorCitVc2UgJ2dpdCBzdHJpcHNwYWNlJyB3aXRoIG5vIGFyZ3VtZW50cyB0byBvYnRhaW46CisKKy0tLS0tLS0tLQorfEEgYnJpZWYgaW50cm9kdWN0aW9uJAorfCQKK3xBIG5ldyBwYXJhZ3JhcGgkCit8IyB3aXRoIGEgY29tbWVudGVkLW91dCBsaW5lJAorfGV4cGxhaW5pbmcgbG90cyBvZiBzdHVmZi4kCit8JAorfCMgQW4gb2xkIHBhcmFncmFwaCwgYWxzbyBjb21tZW50ZWQtb3V0LiQKK3wkCit8VGhlIGVuZC4kCistLS0tLS0tLS0KKworVXNlICdnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzJyB0byBvYnRhaW46CisKKy0tLS0tLS0tLQorfEEgYnJpZWYgaW50cm9kdWN0aW9uJAorfCQKK3xBIG5ldyBwYXJhZ3JhcGgkCit8ZXhwbGFpbmluZyBsb3RzIG9mIHN0dWZmLiQKK3wkCit8VGhlIGVuZC4kCistLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVkMmJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dApAQCAtMCwwICsxLDQ1NiBAQAorZ2l0LXN1Ym1vZHVsZSgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3VibW9kdWxlIC0gSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBbLS1jYWNoZWRdCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPHBhdGg+XQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzdGF0dXMgWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gaW5pdCBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGRlaW5pdCBbLWZ8LS1mb3JjZV0gKC0tYWxsfFstLV0gPHBhdGg+Li4uKQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSB1cGRhdGUgWzxvcHRpb25zPl0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzZXQtYnJhbmNoIFs8b3B0aW9ucz5dIFstLV0gPHBhdGg+CisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHNldC11cmwgWy0tXSA8cGF0aD4gPG5ld3VybD4KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3VtbWFyeSBbPG9wdGlvbnM+XSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGZvcmVhY2ggWy0tcmVjdXJzaXZlXSA8Y29tbWFuZD4KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3luYyBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gYWJzb3JiZ2l0ZGlycyBbLS1dIFs8cGF0aD4uLi5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbnNwZWN0cywgdXBkYXRlcyBhbmQgbWFuYWdlcyBzdWJtb2R1bGVzLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzdWJtb2R1bGVzLCBzZWUgbGlua2dpdDpnaXRzdWJtb2R1bGVzWzddLgorCitDT01NQU5EUworLS0tLS0tLS0KK1dpdGggbm8gYXJndW1lbnRzLCBzaG93cyB0aGUgc3RhdHVzIG9mIGV4aXN0aW5nIHN1Ym1vZHVsZXMuICBTZXZlcmFsCitzdWJjb21tYW5kcyBhcmUgYXZhaWxhYmxlIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiB0aGUgc3VibW9kdWxlcy4KKworYWRkIFstYiA8YnJhbmNoPl0gWy1mfC0tZm9yY2VdIFstLW5hbWUgPG5hbWU+XSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPHBhdGg+XTo6CisJQWRkIHRoZSBnaXZlbiByZXBvc2l0b3J5IGFzIGEgc3VibW9kdWxlIGF0IHRoZSBnaXZlbiBwYXRoCisJdG8gdGhlIGNoYW5nZXNldCB0byBiZSBjb21taXR0ZWQgbmV4dCB0byB0aGUgY3VycmVudAorCXByb2plY3Q6IHRoZSBjdXJyZW50IHByb2plY3QgaXMgdGVybWVkIHRoZSAic3VwZXJwcm9qZWN0Ii4KKysKKzxyZXBvc2l0b3J5PiBpcyB0aGUgVVJMIG9mIHRoZSBuZXcgc3VibW9kdWxlJ3Mgb3JpZ2luIHJlcG9zaXRvcnkuCitUaGlzIG1heSBiZSBlaXRoZXIgYW4gYWJzb2x1dGUgVVJMLCBvciAoaWYgaXQgYmVnaW5zIHdpdGggLi8KK29yIC4uLyksIHRoZSBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgc3VwZXJwcm9qZWN0J3MgZGVmYXVsdCByZW1vdGUKK3JlcG9zaXRvcnkgKFBsZWFzZSBub3RlIHRoYXQgdG8gc3BlY2lmeSBhIHJlcG9zaXRvcnkgJ2Zvby5naXQnCit3aGljaCBpcyBsb2NhdGVkIHJpZ2h0IG5leHQgdG8gYSBzdXBlcnByb2plY3QgJ2Jhci5naXQnLCB5b3UnbGwKK2hhdmUgdG8gdXNlIGAuLi9mb28uZ2l0YCBpbnN0ZWFkIG9mIGAuL2Zvby5naXRgIC0gYXMgb25lIG1pZ2h0IGV4cGVjdAord2hlbiBmb2xsb3dpbmcgdGhlIHJ1bGVzIGZvciByZWxhdGl2ZSBVUkxzIC0gYmVjYXVzZSB0aGUgZXZhbHVhdGlvbgorb2YgcmVsYXRpdmUgVVJMcyBpbiBHaXQgaXMgaWRlbnRpY2FsIHRvIHRoYXQgb2YgcmVsYXRpdmUgZGlyZWN0b3JpZXMpLgorKworVGhlIGRlZmF1bHQgcmVtb3RlIGlzIHRoZSByZW1vdGUgb2YgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2gKK29mIHRoZSBjdXJyZW50IGJyYW5jaC4gSWYgbm8gc3VjaCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGV4aXN0cyBvcgordGhlIEhFQUQgaXMgZGV0YWNoZWQsICJvcmlnaW4iIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGRlZmF1bHQgcmVtb3RlLgorSWYgdGhlIHN1cGVycHJvamVjdCBkb2Vzbid0IGhhdmUgYSBkZWZhdWx0IHJlbW90ZSBjb25maWd1cmVkCit0aGUgc3VwZXJwcm9qZWN0IGlzIGl0cyBvd24gYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbSBhbmQgdGhlIGN1cnJlbnQKK3dvcmtpbmcgZGlyZWN0b3J5IGlzIHVzZWQgaW5zdGVhZC4KKysKK1RoZSBvcHRpb25hbCBhcmd1bWVudCA8cGF0aD4gaXMgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIGZvciB0aGUgY2xvbmVkCitzdWJtb2R1bGUgdG8gZXhpc3QgaW4gdGhlIHN1cGVycHJvamVjdC4gSWYgPHBhdGg+IGlzIG5vdCBnaXZlbiwgdGhlCitjYW5vbmljYWwgcGFydCBvZiB0aGUgc291cmNlIHJlcG9zaXRvcnkgaXMgdXNlZCAoInJlcG8iIGZvcgorIi9wYXRoL3RvL3JlcG8uZ2l0IiBhbmQgImZvbyIgZm9yICJob3N0Lnh6OmZvby8uZ2l0IikuIElmIDxwYXRoPgorZXhpc3RzIGFuZCBpcyBhbHJlYWR5IGEgdmFsaWQgR2l0IHJlcG9zaXRvcnksIHRoZW4gaXQgaXMgc3RhZ2VkCitmb3IgY29tbWl0IHdpdGhvdXQgY2xvbmluZy4gVGhlIDxwYXRoPiBpcyBhbHNvIHVzZWQgYXMgdGhlIHN1Ym1vZHVsZSdzCitsb2dpY2FsIG5hbWUgaW4gaXRzIGNvbmZpZ3VyYXRpb24gZW50cmllcyB1bmxlc3MgYC0tbmFtZWAgaXMgdXNlZAordG8gc3BlY2lmeSBhIGxvZ2ljYWwgbmFtZS4KKysKK1RoZSBnaXZlbiBVUkwgaXMgcmVjb3JkZWQgaW50byBgLmdpdG1vZHVsZXNgIGZvciB1c2UgYnkgc3Vic2VxdWVudCB1c2VycworY2xvbmluZyB0aGUgc3VwZXJwcm9qZWN0LiBJZiB0aGUgVVJMIGlzIGdpdmVuIHJlbGF0aXZlIHRvIHRoZQorc3VwZXJwcm9qZWN0J3MgcmVwb3NpdG9yeSwgdGhlIHByZXN1bXB0aW9uIGlzIHRoZSBzdXBlcnByb2plY3QgYW5kCitzdWJtb2R1bGUgcmVwb3NpdG9yaWVzIHdpbGwgYmUga2VwdCB0b2dldGhlciBpbiB0aGUgc2FtZSByZWxhdGl2ZQorbG9jYXRpb24sIGFuZCBvbmx5IHRoZSBzdXBlcnByb2plY3QncyBVUkwgbmVlZHMgdG8gYmUgcHJvdmlkZWQuCitnaXQtc3VibW9kdWxlIHdpbGwgY29ycmVjdGx5IGxvY2F0ZSB0aGUgc3VibW9kdWxlIHVzaW5nIHRoZSByZWxhdGl2ZQorVVJMIGluIGAuZ2l0bW9kdWxlc2AuCisKK3N0YXR1cyBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXTo6CisJU2hvdyB0aGUgc3RhdHVzIG9mIHRoZSBzdWJtb2R1bGVzLiBUaGlzIHdpbGwgcHJpbnQgdGhlIFNIQS0xIG9mIHRoZQorCWN1cnJlbnRseSBjaGVja2VkIG91dCBjb21taXQgZm9yIGVhY2ggc3VibW9kdWxlLCBhbG9uZyB3aXRoIHRoZQorCXN1Ym1vZHVsZSBwYXRoIGFuZCB0aGUgb3V0cHV0IG9mICdnaXQgZGVzY3JpYmUnIGZvciB0aGUKKwlTSEEtMS4gRWFjaCBTSEEtMSB3aWxsIHBvc3NpYmx5IGJlIHByZWZpeGVkIHdpdGggYC1gIGlmIHRoZSBzdWJtb2R1bGUgaXMKKwlub3QgaW5pdGlhbGl6ZWQsIGArYCBpZiB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IHN1Ym1vZHVsZSBjb21taXQKKwlkb2VzIG5vdCBtYXRjaCB0aGUgU0hBLTEgZm91bmQgaW4gdGhlIGluZGV4IG9mIHRoZSBjb250YWluaW5nCisJcmVwb3NpdG9yeSBhbmQgYFVgIGlmIHRoZSBzdWJtb2R1bGUgaGFzIG1lcmdlIGNvbmZsaWN0cy4KKysKK0lmIGAtLWNhY2hlZGAgaXMgc3BlY2lmaWVkLCB0aGlzIGNvbW1hbmQgd2lsbCBpbnN0ZWFkIHByaW50IHRoZSBTSEEtMQorcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBmb3IgZWFjaCBzdWJtb2R1bGUuCisrCitJZiBgLS1yZWN1cnNpdmVgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgcmVjdXJzZSBpbnRvIG5lc3RlZAorc3VibW9kdWxlcywgYW5kIHNob3cgdGhlaXIgc3RhdHVzIGFzIHdlbGwuCisrCitJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBjaGFuZ2VzIG9mIHRoZSBjdXJyZW50bHkgaW5pdGlhbGl6ZWQKK3N1Ym1vZHVsZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIGluZGV4IG9yIHRoZSBIRUFELAorbGlua2dpdDpnaXQtc3RhdHVzWzFdIGFuZCBsaW5rZ2l0OmdpdC1kaWZmWzFdIHdpbGwgcHJvdmlkZSB0aGF0IGluZm9ybWF0aW9uCit0b28gKGFuZCBjYW4gYWxzbyByZXBvcnQgY2hhbmdlcyB0byBhIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZSkuCisKK2luaXQgWy0tXSBbPHBhdGg+Li4uXTo6CisJSW5pdGlhbGl6ZSB0aGUgc3VibW9kdWxlcyByZWNvcmRlZCBpbiB0aGUgaW5kZXggKHdoaWNoIHdlcmUKKwlhZGRlZCBhbmQgY29tbWl0dGVkIGVsc2V3aGVyZSkgYnkgc2V0dGluZyBgc3VibW9kdWxlLiRuYW1lLnVybGAKKwlpbiAuZ2l0L2NvbmZpZy4gSXQgdXNlcyB0aGUgc2FtZSBzZXR0aW5nIGZyb20gYC5naXRtb2R1bGVzYCBhcworCWEgdGVtcGxhdGUuIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIGl0IHdpbGwgYmUgcmVzb2x2ZWQgdXNpbmcKKwl0aGUgZGVmYXVsdCByZW1vdGUuIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgcmVtb3RlLCB0aGUgY3VycmVudAorCXJlcG9zaXRvcnkgd2lsbCBiZSBhc3N1bWVkIHRvIGJlIHVwc3RyZWFtLgorKworT3B0aW9uYWwgPHBhdGg+IGFyZ3VtZW50cyBsaW1pdCB3aGljaCBzdWJtb2R1bGVzIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCitJZiBubyBwYXRoIGlzIHNwZWNpZmllZCBhbmQgc3VibW9kdWxlLmFjdGl2ZSBoYXMgYmVlbiBjb25maWd1cmVkLCBzdWJtb2R1bGVzCitjb25maWd1cmVkIHRvIGJlIGFjdGl2ZSB3aWxsIGJlIGluaXRpYWxpemVkLCBvdGhlcndpc2UgYWxsIHN1Ym1vZHVsZXMgYXJlCitpbml0aWFsaXplZC4KKysKK1doZW4gcHJlc2VudCwgaXQgd2lsbCBhbHNvIGNvcHkgdGhlIHZhbHVlIG9mIGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYC4KK1RoaXMgY29tbWFuZCBkb2VzIG5vdCBhbHRlciBleGlzdGluZyBpbmZvcm1hdGlvbiBpbiAuZ2l0L2NvbmZpZy4KK1lvdSBjYW4gdGhlbiBjdXN0b21pemUgdGhlIHN1Ym1vZHVsZSBjbG9uZSBVUkxzIGluIC5naXQvY29uZmlnCitmb3IgeW91ciBsb2NhbCBzZXR1cCBhbmQgcHJvY2VlZCB0byBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgOworeW91IGNhbiBhbHNvIGp1c3QgdXNlIGBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXRgIHdpdGhvdXQKK3RoZSBleHBsaWNpdCAnaW5pdCcgc3RlcCBpZiB5b3UgZG8gbm90IGludGVuZCB0byBjdXN0b21pemUKK2FueSBzdWJtb2R1bGUgbG9jYXRpb25zLgorKworU2VlIHRoZSBhZGQgc3ViY29tbWFuZCBmb3IgdGhlIGRlZmluaXRpb24gb2YgZGVmYXVsdCByZW1vdGUuCisKK2RlaW5pdCBbLWZ8LS1mb3JjZV0gKC0tYWxsfFstLV0gPHBhdGg+Li4uKTo6CisJVW5yZWdpc3RlciB0aGUgZ2l2ZW4gc3VibW9kdWxlcywgaS5lLiByZW1vdmUgdGhlIHdob2xlCisJYHN1Ym1vZHVsZS4kbmFtZWAgc2VjdGlvbiBmcm9tIC5naXQvY29uZmlnIHRvZ2V0aGVyIHdpdGggdGhlaXIgd29yaworCXRyZWUuIEZ1cnRoZXIgY2FsbHMgdG8gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCwgYGdpdCBzdWJtb2R1bGUgZm9yZWFjaGAKKwlhbmQgYGdpdCBzdWJtb2R1bGUgc3luY2Agd2lsbCBza2lwIGFueSB1bnJlZ2lzdGVyZWQgc3VibW9kdWxlcyB1bnRpbAorCXRoZXkgYXJlIGluaXRpYWxpemVkIGFnYWluLCBzbyB1c2UgdGhpcyBjb21tYW5kIGlmIHlvdSBkb24ndCB3YW50IHRvCisJaGF2ZSBhIGxvY2FsIGNoZWNrb3V0IG9mIHRoZSBzdWJtb2R1bGUgaW4geW91ciB3b3JraW5nIHRyZWUgYW55bW9yZS4KKysKK1doZW4gdGhlIGNvbW1hbmQgaXMgcnVuIHdpdGhvdXQgcGF0aHNwZWMsIGl0IGVycm9ycyBvdXQsCitpbnN0ZWFkIG9mIGRlaW5pdC1pbmcgZXZlcnl0aGluZywgdG8gcHJldmVudCBtaXN0YWtlcy4KKysKK0lmIGAtLWZvcmNlYCBpcyBzcGVjaWZpZWQsIHRoZSBzdWJtb2R1bGUncyB3b3JraW5nIHRyZWUgd2lsbAorYmUgcmVtb3ZlZCBldmVuIGlmIGl0IGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnMuCisrCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGEgc3VibW9kdWxlIGZyb20gdGhlIHJlcG9zaXRvcnkgYW5kIGNvbW1pdAordGhhdCB1c2UgbGlua2dpdDpnaXQtcm1bMV0gaW5zdGVhZC4gU2VlIGxpbmtnaXQ6Z2l0c3VibW9kdWxlc1s3XSBmb3IgcmVtb3ZhbAorb3B0aW9ucy4KKwordXBkYXRlIFstLWluaXRdIFstLXJlbW90ZV0gWy1OfC0tbm8tZmV0Y2hdIFstLVtuby1dcmVjb21tZW5kLXNoYWxsb3ddIFstZnwtLWZvcmNlXSBbLS1jaGVja291dHwtLXJlYmFzZXwtLW1lcmdlXSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1yZWN1cnNpdmVdIFstLWpvYnMgPG4+XSBbLS1bbm8tXXNpbmdsZS1icmFuY2hdIFstLV0gWzxwYXRoPi4uLl06OgorKworLS0KK1VwZGF0ZSB0aGUgcmVnaXN0ZXJlZCBzdWJtb2R1bGVzIHRvIG1hdGNoIHdoYXQgdGhlIHN1cGVycHJvamVjdAorZXhwZWN0cyBieSBjbG9uaW5nIG1pc3Npbmcgc3VibW9kdWxlcywgZmV0Y2hpbmcgbWlzc2luZyBjb21taXRzCitpbiBzdWJtb2R1bGVzIGFuZCB1cGRhdGluZyB0aGUgd29ya2luZyB0cmVlIG9mCit0aGUgc3VibW9kdWxlcy4gVGhlICJ1cGRhdGluZyIgY2FuIGJlIGRvbmUgaW4gc2V2ZXJhbCB3YXlzIGRlcGVuZGluZworb24gY29tbWFuZCBsaW5lIG9wdGlvbnMgYW5kIHRoZSB2YWx1ZSBvZiBgc3VibW9kdWxlLjxuYW1lPi51cGRhdGVgCitjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBUaGUgY29tbWFuZCBsaW5lIG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKK3RoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBJZiBuZWl0aGVyIGlzIGdpdmVuLCBhICdjaGVja291dCcgaXMgcGVyZm9ybWVkLgorVGhlICd1cGRhdGUnIHByb2NlZHVyZXMgc3VwcG9ydGVkIGJvdGggZnJvbSB0aGUgY29tbWFuZCBsaW5lIGFzIHdlbGwgYXMKK3Rocm91Z2ggdGhlIGBzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZWAgY29uZmlndXJhdGlvbiBhcmU6CisKKwljaGVja291dDs7IHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCB3aWxsIGJlCisJICAgIGNoZWNrZWQgb3V0IGluIHRoZSBzdWJtb2R1bGUgb24gYSBkZXRhY2hlZCBIRUFELgorKworSWYgYC0tZm9yY2VgIGlzIHNwZWNpZmllZCwgdGhlIHN1Ym1vZHVsZSB3aWxsIGJlIGNoZWNrZWQgb3V0ICh1c2luZworYGdpdCBjaGVja291dCAtLWZvcmNlYCksIGV2ZW4gaWYgdGhlIGNvbW1pdCBzcGVjaWZpZWQKK2luIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZyByZXBvc2l0b3J5IGFscmVhZHkgbWF0Y2hlcyB0aGUgY29tbWl0CitjaGVja2VkIG91dCBpbiB0aGUgc3VibW9kdWxlLgorCisJcmViYXNlOzsgdGhlIGN1cnJlbnQgYnJhbmNoIG9mIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSByZWJhc2VkCisJICAgIG9udG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0LgorCisJbWVyZ2U7OyB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3Qgd2lsbCBiZSBtZXJnZWQKKwkgICAgaW50byB0aGUgY3VycmVudCBicmFuY2ggaW4gdGhlIHN1Ym1vZHVsZS4KKworVGhlIGZvbGxvd2luZyAndXBkYXRlJyBwcm9jZWR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSB2aWEgdGhlCitgc3VibW9kdWxlLjxuYW1lPi51cGRhdGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGU6CisKKwljdXN0b20gY29tbWFuZDs7IGFyYml0cmFyeSBzaGVsbCBjb21tYW5kIHRoYXQgdGFrZXMgYSBzaW5nbGUKKwkgICAgYXJndW1lbnQgKHRoZSBzaGExIG9mIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlCisJICAgIHN1cGVycHJvamVjdCkgaXMgZXhlY3V0ZWQuIFdoZW4gYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlYAorCSAgICBpcyBzZXQgdG8gJyFjb21tYW5kJywgdGhlIHJlbWFpbmRlciBhZnRlciB0aGUgZXhjbGFtYXRpb24gbWFyaworCSAgICBpcyB0aGUgY3VzdG9tIGNvbW1hbmQuCisKKwlub25lOzsgdGhlIHN1Ym1vZHVsZSBpcyBub3QgdXBkYXRlZC4KKworSWYgdGhlIHN1Ym1vZHVsZSBpcyBub3QgeWV0IGluaXRpYWxpemVkLCBhbmQgeW91IGp1c3Qgd2FudCB0byB1c2UgdGhlCitzZXR0aW5nIGFzIHN0b3JlZCBpbiBgLmdpdG1vZHVsZXNgLCB5b3UgY2FuIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZSB0aGUKK3N1Ym1vZHVsZSB3aXRoIHRoZSBgLS1pbml0YCBvcHRpb24uCisKK0lmIGAtLXJlY3Vyc2l2ZWAgaXMgc3BlY2lmaWVkLCB0aGlzIGNvbW1hbmQgd2lsbCByZWN1cnNlIGludG8gdGhlCityZWdpc3RlcmVkIHN1Ym1vZHVsZXMsIGFuZCB1cGRhdGUgYW55IG5lc3RlZCBzdWJtb2R1bGVzIHdpdGhpbi4KKy0tCitzZXQtYnJhbmNoICgtYnwtLWJyYW5jaCkgPGJyYW5jaD4gWy0tXSA8cGF0aD46Ogorc2V0LWJyYW5jaCAoLWR8LS1kZWZhdWx0KSBbLS1dIDxwYXRoPjo6CisJU2V0cyB0aGUgZGVmYXVsdCByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGZvciB0aGUgc3VibW9kdWxlLiBUaGUKKwlgLS1icmFuY2hgIG9wdGlvbiBhbGxvd3MgdGhlIHJlbW90ZSBicmFuY2ggdG8gYmUgc3BlY2lmaWVkLiBUaGUKKwlgLS1kZWZhdWx0YCBvcHRpb24gcmVtb3ZlcyB0aGUgc3VibW9kdWxlLjxuYW1lPi5icmFuY2ggY29uZmlndXJhdGlvbgorCWtleSwgd2hpY2ggY2F1c2VzIHRoZSB0cmFja2luZyBicmFuY2ggdG8gZGVmYXVsdCB0byAnbWFzdGVyJy4KKworc2V0LXVybCBbLS1dIDxwYXRoPiA8bmV3dXJsPjo6CisJU2V0cyB0aGUgVVJMIG9mIHRoZSBzcGVjaWZpZWQgc3VibW9kdWxlIHRvIDxuZXd1cmw+LiBUaGVuLCBpdCB3aWxsCisJYXV0b21hdGljYWxseSBzeW5jaHJvbml6ZSB0aGUgc3VibW9kdWxlJ3MgbmV3IHJlbW90ZSBVUkwKKwljb25maWd1cmF0aW9uLgorCitzdW1tYXJ5IFstLWNhY2hlZHwtLWZpbGVzXSBbKC1ufC0tc3VtbWFyeS1saW1pdCkgPG4+XSBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dOjoKKwlTaG93IGNvbW1pdCBzdW1tYXJ5IGJldHdlZW4gdGhlIGdpdmVuIGNvbW1pdCAoZGVmYXVsdHMgdG8gSEVBRCkgYW5kCisJd29ya2luZyB0cmVlL2luZGV4LiBGb3IgYSBzdWJtb2R1bGUgaW4gcXVlc3Rpb24sIGEgc2VyaWVzIG9mIGNvbW1pdHMKKwlpbiB0aGUgc3VibW9kdWxlIGJldHdlZW4gdGhlIGdpdmVuIHN1cGVyIHByb2plY3QgY29tbWl0IGFuZCB0aGUKKwlpbmRleCBvciB3b3JraW5nIHRyZWUgKHN3aXRjaGVkIGJ5IGAtLWNhY2hlZGApIGFyZSBzaG93bi4gSWYgdGhlIG9wdGlvbgorCWAtLWZpbGVzYCBpcyBnaXZlbiwgc2hvdyB0aGUgc2VyaWVzIG9mIGNvbW1pdHMgaW4gdGhlIHN1Ym1vZHVsZSBiZXR3ZWVuCisJdGhlIGluZGV4IG9mIHRoZSBzdXBlciBwcm9qZWN0IGFuZCB0aGUgd29ya2luZyB0cmVlIG9mIHRoZSBzdWJtb2R1bGUKKwkodGhpcyBvcHRpb24gZG9lc24ndCBhbGxvdyB0byB1c2UgdGhlIGAtLWNhY2hlZGAgb3B0aW9uIG9yIHRvIHByb3ZpZGUgYW4KKwlleHBsaWNpdCBjb21taXQpLgorKworVXNpbmcgdGhlIGAtLXN1Ym1vZHVsZT1sb2dgIG9wdGlvbiB3aXRoIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gd2lsbCBwcm92aWRlIHRoYXQKK2luZm9ybWF0aW9uIHRvby4KKworZm9yZWFjaCBbLS1yZWN1cnNpdmVdIDxjb21tYW5kPjo6CisJRXZhbHVhdGVzIGFuIGFyYml0cmFyeSBzaGVsbCBjb21tYW5kIGluIGVhY2ggY2hlY2tlZCBvdXQgc3VibW9kdWxlLgorCVRoZSBjb21tYW5kIGhhcyBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlcyAkbmFtZSwgJHNtX3BhdGgsICRkaXNwbGF5cGF0aCwKKwkkc2hhMSBhbmQgJHRvcGxldmVsOgorCSRuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSByZWxldmFudCBzdWJtb2R1bGUgc2VjdGlvbiBpbiBgLmdpdG1vZHVsZXNgLAorCSRzbV9wYXRoIGlzIHRoZSBwYXRoIG9mIHRoZSBzdWJtb2R1bGUgYXMgcmVjb3JkZWQgaW4gdGhlIGltbWVkaWF0ZQorCXN1cGVycHJvamVjdCwgJGRpc3BsYXlwYXRoIGNvbnRhaW5zIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlCisJY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgc3VibW9kdWxlcyByb290IGRpcmVjdG9yeSwKKwkkc2hhMSBpcyB0aGUgY29tbWl0IGFzIHJlY29yZGVkIGluIHRoZSBpbW1lZGlhdGUKKwlzdXBlcnByb2plY3QsIGFuZCAkdG9wbGV2ZWwgaXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRvcC1sZXZlbAorCW9mIHRoZSBpbW1lZGlhdGUgc3VwZXJwcm9qZWN0LgorCU5vdGUgdGhhdCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCAnJFBBVEgnIG9uIFdpbmRvd3MsIHRoZSAnJHBhdGgnCisJdmFyaWFibGUgaXMgbm93IGEgZGVwcmVjYXRlZCBzeW5vbnltIG9mICckc21fcGF0aCcgdmFyaWFibGUuCisJQW55IHN1Ym1vZHVsZXMgZGVmaW5lZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGJ1dCBub3QgY2hlY2tlZCBvdXQgYXJlCisJaWdub3JlZCBieSB0aGlzIGNvbW1hbmQuIFVubGVzcyBnaXZlbiBgLS1xdWlldGAsIGZvcmVhY2ggcHJpbnRzIHRoZSBuYW1lCisJb2YgZWFjaCBzdWJtb2R1bGUgYmVmb3JlIGV2YWx1YXRpbmcgdGhlIGNvbW1hbmQuCisJSWYgYC0tcmVjdXJzaXZlYCBpcyBnaXZlbiwgc3VibW9kdWxlcyBhcmUgdHJhdmVyc2VkIHJlY3Vyc2l2ZWx5IChpLmUuCisJdGhlIGdpdmVuIHNoZWxsIGNvbW1hbmQgaXMgZXZhbHVhdGVkIGluIG5lc3RlZCBzdWJtb2R1bGVzIGFzIHdlbGwpLgorCUEgbm9uLXplcm8gcmV0dXJuIGZyb20gdGhlIGNvbW1hbmQgaW4gYW55IHN1Ym1vZHVsZSBjYXVzZXMKKwl0aGUgcHJvY2Vzc2luZyB0byB0ZXJtaW5hdGUuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYWRkaW5nICd8fCA6JworCXRvIHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQuCisrCitBcyBhbiBleGFtcGxlLCB0aGUgY29tbWFuZCBiZWxvdyB3aWxsIHNob3cgdGhlIHBhdGggYW5kIGN1cnJlbnRseQorY2hlY2tlZCBvdXQgY29tbWl0IGZvciBlYWNoIHN1Ym1vZHVsZToKKysKKy0tLS0tLS0tLS0tLS0tCitnaXQgc3VibW9kdWxlIGZvcmVhY2ggJ2VjaG8gJHNtX3BhdGggYGdpdCByZXYtcGFyc2UgSEVBRGAnCistLS0tLS0tLS0tLS0tLQorCitzeW5jIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXTo6CisJU3luY2hyb25pemVzIHN1Ym1vZHVsZXMnIHJlbW90ZSBVUkwgY29uZmlndXJhdGlvbiBzZXR0aW5nCisJdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBpbiBgLmdpdG1vZHVsZXNgLiBJdCB3aWxsIG9ubHkgYWZmZWN0IHRob3NlCisJc3VibW9kdWxlcyB3aGljaCBhbHJlYWR5IGhhdmUgYSBVUkwgZW50cnkgaW4gLmdpdC9jb25maWcgKHRoYXQgaXMgdGhlCisJY2FzZSB3aGVuIHRoZXkgYXJlIGluaXRpYWxpemVkIG9yIGZyZXNobHkgYWRkZWQpLiBUaGlzIGlzIHVzZWZ1bCB3aGVuCisJc3VibW9kdWxlIFVSTHMgY2hhbmdlIHVwc3RyZWFtIGFuZCB5b3UgbmVlZCB0byB1cGRhdGUgeW91ciBsb2NhbAorCXJlcG9zaXRvcmllcyBhY2NvcmRpbmdseS4KKysKK2BnaXQgc3VibW9kdWxlIHN5bmNgIHN5bmNocm9uaXplcyBhbGwgc3VibW9kdWxlcyB3aGlsZQorYGdpdCBzdWJtb2R1bGUgc3luYyAtLSBBYCBzeW5jaHJvbml6ZXMgc3VibW9kdWxlICJBIiBvbmx5LgorKworSWYgYC0tcmVjdXJzaXZlYCBpcyBzcGVjaWZpZWQsIHRoaXMgY29tbWFuZCB3aWxsIHJlY3Vyc2UgaW50byB0aGUKK3JlZ2lzdGVyZWQgc3VibW9kdWxlcywgYW5kIHN5bmMgYW55IG5lc3RlZCBzdWJtb2R1bGVzIHdpdGhpbi4KKworYWJzb3JiZ2l0ZGlyczo6CisJSWYgYSBnaXQgZGlyZWN0b3J5IG9mIGEgc3VibW9kdWxlIGlzIGluc2lkZSB0aGUgc3VibW9kdWxlLAorCW1vdmUgdGhlIGdpdCBkaXJlY3Rvcnkgb2YgdGhlIHN1Ym1vZHVsZSBpbnRvIGl0cyBzdXBlcnByb2plY3QncworCWAkR0lUX0RJUi9tb2R1bGVzYCBwYXRoIGFuZCB0aGVuIGNvbm5lY3QgdGhlIGdpdCBkaXJlY3RvcnkgYW5kCisJaXRzIHdvcmtpbmcgZGlyZWN0b3J5IGJ5IHNldHRpbmcgdGhlIGBjb3JlLndvcmt0cmVlYCBhbmQgYWRkaW5nCisJYSAuZ2l0IGZpbGUgcG9pbnRpbmcgdG8gdGhlIGdpdCBkaXJlY3RvcnkgZW1iZWRkZWQgaW4gdGhlCisJc3VwZXJwcm9qZWN0cyBnaXQgZGlyZWN0b3J5LgorKworQSByZXBvc2l0b3J5IHRoYXQgd2FzIGNsb25lZCBpbmRlcGVuZGVudGx5IGFuZCBsYXRlciBhZGRlZCBhcyBhIHN1Ym1vZHVsZSBvcgorb2xkIHNldHVwcyBoYXZlIHRoZSBzdWJtb2R1bGVzIGdpdCBkaXJlY3RvcnkgaW5zaWRlIHRoZSBzdWJtb2R1bGUgaW5zdGVhZCBvZgorZW1iZWRkZWQgaW50byB0aGUgc3VwZXJwcm9qZWN0cyBnaXQgZGlyZWN0b3J5LgorKworVGhpcyBjb21tYW5kIGlzIHJlY3Vyc2l2ZSBieSBkZWZhdWx0LgorCitPUFRJT05TCistLS0tLS0tCistcTo6CistLXF1aWV0OjoKKwlPbmx5IHByaW50IGVycm9yIG1lc3NhZ2VzLgorCistLXByb2dyZXNzOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhZGQgYW5kIHVwZGF0ZSBjb21tYW5kcy4KKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYgdGhlCisJc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLWFsbDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIGRlaW5pdCBjb21tYW5kLiBVbnJlZ2lzdGVyIGFsbAorCXN1Ym1vZHVsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworLWIgPGJyYW5jaD46OgorLS1icmFuY2ggPGJyYW5jaD46OgorCUJyYW5jaCBvZiByZXBvc2l0b3J5IHRvIGFkZCBhcyBzdWJtb2R1bGUuCisJVGhlIG5hbWUgb2YgdGhlIGJyYW5jaCBpcyByZWNvcmRlZCBhcyBgc3VibW9kdWxlLjxuYW1lPi5icmFuY2hgIGluCisJYC5naXRtb2R1bGVzYCBmb3IgYHVwZGF0ZSAtLXJlbW90ZWAuICBBIHNwZWNpYWwgdmFsdWUgb2YgYC5gIGlzIHVzZWQgdG8KKwlpbmRpY2F0ZSB0aGF0IHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggaW4gdGhlIHN1Ym1vZHVsZSBzaG91bGQgYmUgdGhlCisJc2FtZSBuYW1lIGFzIHRoZSBjdXJyZW50IGJyYW5jaCBpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LiAgSWYgdGhlCisJb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICdtYXN0ZXInLgorCistZjo6CistLWZvcmNlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhZGQsIGRlaW5pdCBhbmQgdXBkYXRlIGNvbW1hbmRzLgorCVdoZW4gcnVubmluZyBhZGQsIGFsbG93IGFkZGluZyBhbiBvdGhlcndpc2UgaWdub3JlZCBzdWJtb2R1bGUgcGF0aC4KKwlXaGVuIHJ1bm5pbmcgZGVpbml0IHRoZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyB3aWxsIGJlIHJlbW92ZWQgZXZlbgorCWlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzLgorCVdoZW4gcnVubmluZyB1cGRhdGUgKG9ubHkgZWZmZWN0aXZlIHdpdGggdGhlIGNoZWNrb3V0IHByb2NlZHVyZSksCisJdGhyb3cgYXdheSBsb2NhbCBjaGFuZ2VzIGluIHN1Ym1vZHVsZXMgd2hlbiBzd2l0Y2hpbmcgdG8gYQorCWRpZmZlcmVudCBjb21taXQ7IGFuZCBhbHdheXMgcnVuIGEgY2hlY2tvdXQgb3BlcmF0aW9uIGluIHRoZQorCXN1Ym1vZHVsZSwgZXZlbiBpZiB0aGUgY29tbWl0IGxpc3RlZCBpbiB0aGUgaW5kZXggb2YgdGhlCisJY29udGFpbmluZyByZXBvc2l0b3J5IG1hdGNoZXMgdGhlIGNvbW1pdCBjaGVja2VkIG91dCBpbiB0aGUKKwlzdWJtb2R1bGUuCisKKy0tY2FjaGVkOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBzdGF0dXMgYW5kIHN1bW1hcnkgY29tbWFuZHMuICBUaGVzZQorCWNvbW1hbmRzIHR5cGljYWxseSB1c2UgdGhlIGNvbW1pdCBmb3VuZCBpbiB0aGUgc3VibW9kdWxlIEhFQUQsIGJ1dAorCXdpdGggdGhpcyBvcHRpb24sIHRoZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpcyB1c2VkIGluc3RlYWQuCisKKy0tZmlsZXM6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzdW1tYXJ5IGNvbW1hbmQuIFRoaXMgY29tbWFuZAorCWNvbXBhcmVzIHRoZSBjb21taXQgaW4gdGhlIGluZGV4IHdpdGggdGhhdCBpbiB0aGUgc3VibW9kdWxlIEhFQUQKKwl3aGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQuCisKKy1uOjoKKy0tc3VtbWFyeS1saW1pdDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHN1bW1hcnkgY29tbWFuZC4KKwlMaW1pdCB0aGUgc3VtbWFyeSBzaXplIChudW1iZXIgb2YgY29tbWl0cyBzaG93biBpbiB0b3RhbCkuCisJR2l2aW5nIDAgd2lsbCBkaXNhYmxlIHRoZSBzdW1tYXJ5OyBhIG5lZ2F0aXZlIG51bWJlciBtZWFucyB1bmxpbWl0ZWQKKwkodGhlIGRlZmF1bHQpLiBUaGlzIGxpbWl0IG9ubHkgYXBwbGllcyB0byBtb2RpZmllZCBzdWJtb2R1bGVzLiBUaGUKKwlzaXplIGlzIGFsd2F5cyBsaW1pdGVkIHRvIDEgZm9yIGFkZGVkL2RlbGV0ZWQvdHlwZWNoYW5nZWQgc3VibW9kdWxlcy4KKworLS1yZW1vdGU6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4gIEluc3RlYWQgb2YgdXNpbmcKKwl0aGUgc3VwZXJwcm9qZWN0J3MgcmVjb3JkZWQgU0hBLTEgdG8gdXBkYXRlIHRoZSBzdWJtb2R1bGUsIHVzZSB0aGUKKwlzdGF0dXMgb2YgdGhlIHN1Ym1vZHVsZSdzIHJlbW90ZS10cmFja2luZyBicmFuY2guICBUaGUgcmVtb3RlIHVzZWQKKwlpcyBicmFuY2gncyByZW1vdGUgKGBicmFuY2guPG5hbWU+LnJlbW90ZWApLCBkZWZhdWx0aW5nIHRvIGBvcmlnaW5gLgorCVRoZSByZW1vdGUgYnJhbmNoIHVzZWQgZGVmYXVsdHMgdG8gYG1hc3RlcmAsIGJ1dCB0aGUgYnJhbmNoIG5hbWUgbWF5CisJYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIHRoZSBgc3VibW9kdWxlLjxuYW1lPi5icmFuY2hgIG9wdGlvbiBpbgorCWVpdGhlciBgLmdpdG1vZHVsZXNgIG9yIGAuZ2l0L2NvbmZpZ2AgKHdpdGggYC5naXQvY29uZmlnYCB0YWtpbmcKKwlwcmVjZWRlbmNlKS4KKysKK1RoaXMgd29ya3MgZm9yIGFueSBvZiB0aGUgc3VwcG9ydGVkIHVwZGF0ZSBwcm9jZWR1cmVzIChgLS1jaGVja291dGAsCitgLS1yZWJhc2VgLCBldGMuKS4gIFRoZSBvbmx5IGNoYW5nZSBpcyB0aGUgc291cmNlIG9mIHRoZSB0YXJnZXQgU0hBLTEuCitGb3IgZXhhbXBsZSwgYHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgLS1tZXJnZWAgd2lsbCBtZXJnZSB1cHN0cmVhbQorc3VibW9kdWxlIGNoYW5nZXMgaW50byB0aGUgc3VibW9kdWxlcywgd2hpbGUgYHN1Ym1vZHVsZSB1cGRhdGUKKy0tbWVyZ2VgIHdpbGwgbWVyZ2Ugc3VwZXJwcm9qZWN0IGdpdGxpbmsgY2hhbmdlcyBpbnRvIHRoZSBzdWJtb2R1bGVzLgorKworSW4gb3JkZXIgdG8gZW5zdXJlIGEgY3VycmVudCB0cmFja2luZyBicmFuY2ggc3RhdGUsIGB1cGRhdGUgLS1yZW1vdGVgCitmZXRjaGVzIHRoZSBzdWJtb2R1bGUncyByZW1vdGUgcmVwb3NpdG9yeSBiZWZvcmUgY2FsY3VsYXRpbmcgdGhlCitTSEEtMS4gIElmIHlvdSBkb24ndCB3YW50IHRvIGZldGNoLCB5b3Ugc2hvdWxkIHVzZSBgc3VibW9kdWxlIHVwZGF0ZQorLS1yZW1vdGUgLS1uby1mZXRjaGAuCisrCitVc2UgdGhpcyBvcHRpb24gdG8gaW50ZWdyYXRlIGNoYW5nZXMgZnJvbSB0aGUgdXBzdHJlYW0gc3VicHJvamVjdCB3aXRoCit5b3VyIHN1Ym1vZHVsZSdzIGN1cnJlbnQgSEVBRC4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcnVuIGBnaXQgcHVsbGAKK2Zyb20gdGhlIHN1Ym1vZHVsZSwgd2hpY2ggaXMgZXF1aXZhbGVudCBleGNlcHQgZm9yIHRoZSByZW1vdGUgYnJhbmNoCituYW1lOiBgdXBkYXRlIC0tcmVtb3RlYCB1c2VzIHRoZSBkZWZhdWx0IHVwc3RyZWFtIHJlcG9zaXRvcnkgYW5kCitgc3VibW9kdWxlLjxuYW1lPi5icmFuY2hgLCB3aGlsZSBgZ2l0IHB1bGxgIHVzZXMgdGhlIHN1Ym1vZHVsZSdzCitgYnJhbmNoLjxuYW1lPi5tZXJnZWAuICBQcmVmZXIgYHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoYCBpZiB5b3Ugd2FudAordG8gZGlzdHJpYnV0ZSB0aGUgZGVmYXVsdCB1cHN0cmVhbSBicmFuY2ggd2l0aCB0aGUgc3VwZXJwcm9qZWN0IGFuZAorYGJyYW5jaC48bmFtZT4ubWVyZ2VgIGlmIHlvdSB3YW50IGEgbW9yZSBuYXRpdmUgZmVlbCB3aGlsZSB3b3JraW5nIGluCit0aGUgc3VibW9kdWxlIGl0c2VsZi4KKworLU46OgorLS1uby1mZXRjaDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCURvbid0IGZldGNoIG5ldyBvYmplY3RzIGZyb20gdGhlIHJlbW90ZSBzaXRlLgorCistLWNoZWNrb3V0OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJQ2hlY2tvdXQgdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IG9uIGEgZGV0YWNoZWQgSEVBRAorCWluIHRoZSBzdWJtb2R1bGUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHRoZSBtYWluIHVzZSBvZgorCXRoaXMgb3B0aW9uIGlzIHRvIG92ZXJyaWRlIGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCB3aGVuIHNldCB0bworCWEgdmFsdWUgb3RoZXIgdGhhbiBgY2hlY2tvdXRgLgorCUlmIHRoZSBrZXkgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIGlzIGVpdGhlciBub3QgZXhwbGljaXRseSBzZXQgb3IKKwlzZXQgdG8gYGNoZWNrb3V0YCwgdGhpcyBvcHRpb24gaXMgaW1wbGljaXQuCisKKy0tbWVyZ2U6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlNZXJnZSB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgaW50byB0aGUgY3VycmVudCBicmFuY2gKKwlvZiB0aGUgc3VibW9kdWxlLiBJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiwgdGhlIHN1Ym1vZHVsZSdzIEhFQUQgd2lsbAorCW5vdCBiZSBkZXRhY2hlZC4gSWYgYSBtZXJnZSBmYWlsdXJlIHByZXZlbnRzIHRoaXMgcHJvY2VzcywgeW91IHdpbGwKKwloYXZlIHRvIHJlc29sdmUgdGhlIHJlc3VsdGluZyBjb25mbGljdHMgd2l0aGluIHRoZSBzdWJtb2R1bGUgd2l0aCB0aGUKKwl1c3VhbCBjb25mbGljdCByZXNvbHV0aW9uIHRvb2xzLgorCUlmIHRoZSBrZXkgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIGlzIHNldCB0byBgbWVyZ2VgLCB0aGlzIG9wdGlvbiBpcworCWltcGxpY2l0LgorCistLXJlYmFzZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCVJlYmFzZSB0aGUgY3VycmVudCBicmFuY2ggb250byB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZQorCXN1cGVycHJvamVjdC4gSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBzdWJtb2R1bGUncyBIRUFEIHdpbGwgbm90CisJYmUgZGV0YWNoZWQuIElmIGEgbWVyZ2UgZmFpbHVyZSBwcmV2ZW50cyB0aGlzIHByb2Nlc3MsIHlvdSB3aWxsIGhhdmUKKwl0byByZXNvbHZlIHRoZXNlIGZhaWx1cmVzIHdpdGggbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCUlmIHRoZSBrZXkgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIGlzIHNldCB0byBgcmViYXNlYCwgdGhpcyBvcHRpb24gaXMKKwlpbXBsaWNpdC4KKworLS1pbml0OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJSW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyBmb3Igd2hpY2ggImdpdCBzdWJtb2R1bGUgaW5pdCIgaGFzIG5vdCBiZWVuCisJY2FsbGVkIHNvIGZhciBiZWZvcmUgdXBkYXRpbmcuCisKKy0tbmFtZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIGFkZCBjb21tYW5kLiBJdCBzZXRzIHRoZSBzdWJtb2R1bGUncworCW5hbWUgdG8gdGhlIGdpdmVuIHN0cmluZyBpbnN0ZWFkIG9mIGRlZmF1bHRpbmcgdG8gaXRzIHBhdGguIFRoZSBuYW1lCisJbXVzdCBiZSB2YWxpZCBhcyBhIGRpcmVjdG9yeSBuYW1lIGFuZCBtYXkgbm90IGVuZCB3aXRoIGEgJy8nLgorCistLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGFkZCBhbmQgdXBkYXRlIGNvbW1hbmRzLiAgVGhlc2UKKwljb21tYW5kcyBzb21ldGltZXMgbmVlZCB0byBjbG9uZSBhIHJlbW90ZSByZXBvc2l0b3J5LiBJbiB0aGlzIGNhc2UsCisJdGhpcyBvcHRpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdIGNvbW1hbmQuCisrCisqTk9URSo6IERvICpub3QqIHVzZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGhhdmUgcmVhZCB0aGUgbm90ZQorZm9yIGxpbmtnaXQ6Z2l0LWNsb25lWzFdJ3MgYC0tcmVmZXJlbmNlYCwgYC0tc2hhcmVkYCwgYW5kIGAtLWRpc3NvY2lhdGVgCitvcHRpb25zIGNhcmVmdWxseS4KKworLS1kaXNzb2NpYXRlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhZGQgYW5kIHVwZGF0ZSBjb21tYW5kcy4gIFRoZXNlCisJY29tbWFuZHMgc29tZXRpbWVzIG5lZWQgdG8gY2xvbmUgYSByZW1vdGUgcmVwb3NpdG9yeS4gSW4gdGhpcyBjYXNlLAorCXRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBjb21tYW5kLgorKworKk5PVEUqOiBzZWUgdGhlIE5PVEUgZm9yIHRoZSBgLS1yZWZlcmVuY2VgIG9wdGlvbi4KKworLS1yZWN1cnNpdmU6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGZvcmVhY2gsIHVwZGF0ZSwgc3RhdHVzIGFuZCBzeW5jIGNvbW1hbmRzLgorCVRyYXZlcnNlIHN1Ym1vZHVsZXMgcmVjdXJzaXZlbHkuIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG5vdAorCW9ubHkgaW4gdGhlIHN1Ym1vZHVsZXMgb2YgdGhlIGN1cnJlbnQgcmVwbywgYnV0IGFsc28KKwlpbiBhbnkgbmVzdGVkIHN1Ym1vZHVsZXMgaW5zaWRlIHRob3NlIHN1Ym1vZHVsZXMgKGFuZCBzbyBvbikuCisKKy0tZGVwdGg6OgorCVRoaXMgb3B0aW9uIGlzIHZhbGlkIGZvciBhZGQgYW5kIHVwZGF0ZSBjb21tYW5kcy4gQ3JlYXRlIGEgJ3NoYWxsb3cnCisJY2xvbmUgd2l0aCBhIGhpc3RvcnkgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucy4KKwlTZWUgbGlua2dpdDpnaXQtY2xvbmVbMV0KKworLS1bbm8tXXJlY29tbWVuZC1zaGFsbG93OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJVGhlIGluaXRpYWwgY2xvbmUgb2YgYSBzdWJtb2R1bGUgd2lsbCB1c2UgdGhlIHJlY29tbWVuZGVkCisJYHN1Ym1vZHVsZS48bmFtZT4uc2hhbGxvd2AgYXMgcHJvdmlkZWQgYnkgdGhlIGAuZ2l0bW9kdWxlc2AgZmlsZQorCWJ5IGRlZmF1bHQuIFRvIGlnbm9yZSB0aGUgc3VnZ2VzdGlvbnMgdXNlIGAtLW5vLXJlY29tbWVuZC1zaGFsbG93YC4KKworLWogPG4+OjoKKy0tam9icyA8bj46OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlDbG9uZSBuZXcgc3VibW9kdWxlcyBpbiBwYXJhbGxlbCB3aXRoIGFzIG1hbnkgam9icy4KKwlEZWZhdWx0cyB0byB0aGUgYHN1Ym1vZHVsZS5mZXRjaEpvYnNgIG9wdGlvbi4KKworLS1bbm8tXXNpbmdsZS1icmFuY2g6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlDbG9uZSBvbmx5IG9uZSBicmFuY2ggZHVyaW5nIHVwZGF0ZTogSEVBRCBvciBvbmUgc3BlY2lmaWVkIGJ5IC0tYnJhbmNoLgorCis8cGF0aD4uLi46OgorCVBhdGhzIHRvIHN1Ym1vZHVsZShzKS4gV2hlbiBzcGVjaWZpZWQgdGhpcyB3aWxsIHJlc3RyaWN0IHRoZSBjb21tYW5kCisJdG8gb25seSBvcGVyYXRlIG9uIHRoZSBzdWJtb2R1bGVzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgcGF0aHMuCisJKFRoaXMgYXJndW1lbnQgaXMgcmVxdWlyZWQgd2l0aCBhZGQpLgorCitGSUxFUworLS0tLS0KK1doZW4gaW5pdGlhbGl6aW5nIHN1Ym1vZHVsZXMsIGEgYC5naXRtb2R1bGVzYCBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CitvZiB0aGUgY29udGFpbmluZyByZXBvc2l0b3J5IGlzIHVzZWQgdG8gZmluZCB0aGUgdXJsIG9mIGVhY2ggc3VibW9kdWxlLgorVGhpcyBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGAkR0lUX0RJUi9jb25maWdgLiBUaGUga2V5Cit0byBlYWNoIHN1Ym1vZHVsZSB1cmwgaXMgInN1Ym1vZHVsZS4kbmFtZS51cmwiLiAgU2VlIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XQorZm9yIGRldGFpbHMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRzdWJtb2R1bGVzWzddLCBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyNGExNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKQEAgLTAsMCArMSwxMTc1IEBACitnaXQtc3ZuKDEpCis9PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdm4gLSBCaWRpcmVjdGlvbmFsIG9wZXJhdGlvbiBiZXR3ZWVuIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGFuZCBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN2bicgPGNvbW1hbmQ+IFs8b3B0aW9ucz5dIFs8YXJndW1lbnRzPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisnZ2l0IHN2bicgaXMgYSBzaW1wbGUgY29uZHVpdCBmb3IgY2hhbmdlc2V0cyBiZXR3ZWVuIFN1YnZlcnNpb24gYW5kIEdpdC4KK0l0IHByb3ZpZGVzIGEgYmlkaXJlY3Rpb25hbCBmbG93IG9mIGNoYW5nZXMgYmV0d2VlbiBhIFN1YnZlcnNpb24gYW5kIGEgR2l0CityZXBvc2l0b3J5LgorCisnZ2l0IHN2bicgY2FuIHRyYWNrIGEgc3RhbmRhcmQgU3VidmVyc2lvbiByZXBvc2l0b3J5LAorZm9sbG93aW5nIHRoZSBjb21tb24gInRydW5rL2JyYW5jaGVzL3RhZ3MiIGxheW91dCwgd2l0aCB0aGUgLS1zdGRsYXlvdXQgb3B0aW9uLgorSXQgY2FuIGFsc28gZm9sbG93IGJyYW5jaGVzIGFuZCB0YWdzIGluIGFueSBsYXlvdXQgd2l0aCB0aGUgLVQvLXQvLWIgb3B0aW9ucworKHNlZSBvcHRpb25zIHRvICdpbml0JyBiZWxvdywgYW5kIGFsc28gdGhlICdjbG9uZScgY29tbWFuZCkuCisKK09uY2UgdHJhY2tpbmcgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgKHdpdGggYW55IG9mIHRoZSBhYm92ZSBtZXRob2RzKSwgdGhlIEdpdAorcmVwb3NpdG9yeSBjYW4gYmUgdXBkYXRlZCBmcm9tIFN1YnZlcnNpb24gYnkgdGhlICdmZXRjaCcgY29tbWFuZCBhbmQKK1N1YnZlcnNpb24gdXBkYXRlZCBmcm9tIEdpdCBieSB0aGUgJ2Rjb21taXQnIGNvbW1hbmQuCisKK0NPTU1BTkRTCistLS0tLS0tLQorCisnaW5pdCc6OgorCUluaXRpYWxpemVzIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IHdpdGggYWRkaXRpb25hbAorCW1ldGFkYXRhIGRpcmVjdG9yaWVzIGZvciAnZ2l0IHN2bicuICBUaGUgU3VidmVyc2lvbiBVUkwKKwltYXkgYmUgc3BlY2lmaWVkIGFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LCBvciBhcyBmdWxsCisJVVJMIGFyZ3VtZW50cyB0byAtVC8tdC8tYi4gIE9wdGlvbmFsbHksIHRoZSB0YXJnZXQKKwlkaXJlY3RvcnkgdG8gb3BlcmF0ZSBvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgc2Vjb25kCisJYXJndW1lbnQuICBOb3JtYWxseSB0aGlzIGNvbW1hbmQgaW5pdGlhbGl6ZXMgdGhlIGN1cnJlbnQKKwlkaXJlY3RvcnkuCisKKy1UPHRydW5rX3N1YmRpcj47OworLS10cnVuaz08dHJ1bmtfc3ViZGlyPjs7CistdDx0YWdzX3N1YmRpcj47OworLS10YWdzPTx0YWdzX3N1YmRpcj47OworLWI8YnJhbmNoZXNfc3ViZGlyPjs7CistLWJyYW5jaGVzPTxicmFuY2hlc19zdWJkaXI+OzsKKy1zOzsKKy0tc3RkbGF5b3V0OzsKKwlUaGVzZSBhcmUgb3B0aW9uYWwgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGluaXQuICBFYWNoIG9mCisJdGhlc2UgZmxhZ3MgY2FuIHBvaW50IHRvIGEgcmVsYXRpdmUgcmVwb3NpdG9yeSBwYXRoCisJKC0tdGFncz1wcm9qZWN0L3RhZ3MpIG9yIGEgZnVsbCB1cmwKKwkoLS10YWdzPWh0dHBzOi8vZm9vLm9yZy9wcm9qZWN0L3RhZ3MpLgorCVlvdSBjYW4gc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tdGFncyBhbmQvb3IgLS1icmFuY2hlcyBvcHRpb25zLCBpbiBjYXNlCisJeW91ciBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgcGxhY2VzIHRhZ3Mgb3IgYnJhbmNoZXMgdW5kZXIgbXVsdGlwbGUgcGF0aHMuCisJVGhlIG9wdGlvbiAtLXN0ZGxheW91dCBpcworCWEgc2hvcnRoYW5kIHdheSBvZiBzZXR0aW5nIHRydW5rLHRhZ3MsYnJhbmNoZXMgYXMgdGhlIHJlbGF0aXZlIHBhdGhzLAorCXdoaWNoIGlzIHRoZSBTdWJ2ZXJzaW9uIGRlZmF1bHQuIElmIGFueSBvZiB0aGUgb3RoZXIgb3B0aW9ucyBhcmUgZ2l2ZW4KKwlhcyB3ZWxsLCB0aGV5IHRha2UgcHJlY2VkZW5jZS4KKy0tbm8tbWV0YWRhdGE7OworCVNldCB0aGUgJ25vTWV0YWRhdGEnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KKwlUaGlzIG9wdGlvbiBpcyBub3QgcmVjb21tZW5kZWQsIHBsZWFzZSByZWFkIHRoZSAnc3ZuLm5vTWV0YWRhdGEnCisJc2VjdGlvbiBvZiB0aGlzIG1hbnBhZ2UgYmVmb3JlIHVzaW5nIHRoaXMgb3B0aW9uLgorLS11c2Utc3ZtLXByb3BzOzsKKwlTZXQgdGhlICd1c2VTdm1Qcm9wcycgb3B0aW9uIGluIHRoZSBbc3ZuLXJlbW90ZV0gY29uZmlnLgorLS11c2Utc3Zuc3luYy1wcm9wczs7CisJU2V0IHRoZSAndXNlU3Zuc3luY1Byb3BzJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCistLXJld3JpdGUtcm9vdD08VVJMPjs7CisJU2V0IHRoZSAncmV3cml0ZVJvb3QnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KKy0tcmV3cml0ZS11dWlkPTxVVUlEPjs7CisJU2V0IHRoZSAncmV3cml0ZVVVSUQnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KKy0tdXNlcm5hbWU9PHVzZXI+OzsKKwlGb3IgdHJhbnNwb3J0cyB0aGF0IFNWTiBoYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGZvciAoaHR0cCwKKwlodHRwcywgYW5kIHBsYWluIHN2biksIHNwZWNpZnkgdGhlIHVzZXJuYW1lLiAgRm9yIG90aGVyCisJdHJhbnNwb3J0cyAoZS5nLiBgc3ZuK3NzaDovL2ApLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSB1c2VybmFtZSBpbgorCXRoZSBVUkwsIGUuZy4gYHN2bitzc2g6Ly9mb29Ac3ZuLmJhci5jb20vcHJvamVjdGAKKy0tcHJlZml4PTxwcmVmaXg+OzsKKwlUaGlzIGFsbG93cyBvbmUgdG8gc3BlY2lmeSBhIHByZWZpeCB3aGljaCBpcyBwcmVwZW5kZWQKKwl0byB0aGUgbmFtZXMgb2YgcmVtb3RlcyBpZiB0cnVuay9icmFuY2hlcy90YWdzIGFyZQorCXNwZWNpZmllZC4gIFRoZSBwcmVmaXggZG9lcyBub3QgYXV0b21hdGljYWxseSBpbmNsdWRlIGEKKwl0cmFpbGluZyBzbGFzaCwgc28gYmUgc3VyZSB5b3UgaW5jbHVkZSBvbmUgaW4gdGhlCisJYXJndW1lbnQgaWYgdGhhdCBpcyB3aGF0IHlvdSB3YW50LiAgSWYgLS1icmFuY2hlcy8tYiBpcworCXNwZWNpZmllZCwgdGhlIHByZWZpeCBtdXN0IGluY2x1ZGUgYSB0cmFpbGluZyBzbGFzaC4KKwlTZXR0aW5nIGEgcHJlZml4ICh3aXRoIGEgdHJhaWxpbmcgc2xhc2gpIGlzIHN0cm9uZ2x5CisJZW5jb3VyYWdlZCBpbiBhbnkgY2FzZSwgYXMgeW91ciBTVk4tdHJhY2tpbmcgcmVmcyB3aWxsCisJdGhlbiBiZSBsb2NhdGVkIGF0ICJyZWZzL3JlbW90ZXMvJHByZWZpeC8qIiwgd2hpY2ggaXMKKwljb21wYXRpYmxlIHdpdGggR2l0J3Mgb3duIHJlbW90ZS10cmFja2luZyByZWYgbGF5b3V0CisJKHJlZnMvcmVtb3Rlcy8kcmVtb3RlLyopLiBTZXR0aW5nIGEgcHJlZml4IGlzIGFsc28gdXNlZnVsCisJaWYgeW91IHdpc2ggdG8gdHJhY2sgbXVsdGlwbGUgcHJvamVjdHMgdGhhdCBzaGFyZSBhIGNvbW1vbgorCXJlcG9zaXRvcnkuCisJQnkgZGVmYXVsdCwgdGhlIHByZWZpeCBpcyBzZXQgdG8gJ29yaWdpbi8nLgorKworTk9URTogQmVmb3JlIEdpdCB2Mi4wLCB0aGUgZGVmYXVsdCBwcmVmaXggd2FzICIiIChubyBwcmVmaXgpLiBUaGlzCittZWFudCB0aGF0IFNWTi10cmFja2luZyByZWZzIHdlcmUgcHV0IGF0ICJyZWZzL3JlbW90ZXMvKiIsIHdoaWNoIGlzCitpbmNvbXBhdGlibGUgd2l0aCBob3cgR2l0J3Mgb3duIHJlbW90ZS10cmFja2luZyByZWZzIGFyZSBvcmdhbml6ZWQuCitJZiB5b3Ugc3RpbGwgd2FudCB0aGUgb2xkIGRlZmF1bHQsIHlvdSBjYW4gZ2V0IGl0IGJ5IHBhc3NpbmcKK2AtLXByZWZpeCAiImAgb24gdGhlIGNvbW1hbmQgbGluZSAoYC0tcHJlZml4PSIiYCBtYXkgbm90IHdvcmsgaWYKK3lvdXIgUGVybCdzIEdldG9wdDo6TG9uZyBpcyA8IHYyLjM3KS4KKworLS1pZ25vcmUtcmVmcz08cmVnZXg+OzsKKwlXaGVuIHBhc3NlZCB0byAnaW5pdCcgb3IgJ2Nsb25lJyB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aWxsCisJYmUgcHJlc2VydmVkIGFzIGEgY29uZmlnIGtleS4gIFNlZSAnZmV0Y2gnIGZvciBhIGRlc2NyaXB0aW9uCisJb2YgYC0taWdub3JlLXJlZnNgLgorLS1pZ25vcmUtcGF0aHM9PHJlZ2V4Pjs7CisJV2hlbiBwYXNzZWQgdG8gJ2luaXQnIG9yICdjbG9uZScgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbAorCWJlIHByZXNlcnZlZCBhcyBhIGNvbmZpZyBrZXkuICBTZWUgJ2ZldGNoJyBmb3IgYSBkZXNjcmlwdGlvbgorCW9mIGAtLWlnbm9yZS1wYXRoc2AuCistLWluY2x1ZGUtcGF0aHM9PHJlZ2V4Pjs7CisJV2hlbiBwYXNzZWQgdG8gJ2luaXQnIG9yICdjbG9uZScgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbAorCWJlIHByZXNlcnZlZCBhcyBhIGNvbmZpZyBrZXkuICBTZWUgJ2ZldGNoJyBmb3IgYSBkZXNjcmlwdGlvbgorCW9mIGAtLWluY2x1ZGUtcGF0aHNgLgorLS1uby1taW5pbWl6ZS11cmw7OworCVdoZW4gdHJhY2tpbmcgbXVsdGlwbGUgZGlyZWN0b3JpZXMgKHVzaW5nIC0tc3RkbGF5b3V0LAorCS0tYnJhbmNoZXMsIG9yIC0tdGFncyBvcHRpb25zKSwgZ2l0IHN2biB3aWxsIGF0dGVtcHQgdG8gY29ubmVjdAorCXRvIHRoZSByb290IChvciBoaWdoZXN0IGFsbG93ZWQgbGV2ZWwpIG9mIHRoZSBTdWJ2ZXJzaW9uCisJcmVwb3NpdG9yeS4gIFRoaXMgZGVmYXVsdCBhbGxvd3MgYmV0dGVyIHRyYWNraW5nIG9mIGhpc3RvcnkgaWYKKwllbnRpcmUgcHJvamVjdHMgYXJlIG1vdmVkIHdpdGhpbiBhIHJlcG9zaXRvcnksIGJ1dCBtYXkgY2F1c2UKKwlpc3N1ZXMgb24gcmVwb3NpdG9yaWVzIHdoZXJlIHJlYWQgYWNjZXNzIHJlc3RyaWN0aW9ucyBhcmUgaW4KKwlwbGFjZS4gIFBhc3NpbmcgYC0tbm8tbWluaW1pemUtdXJsYCB3aWxsIGFsbG93IGdpdCBzdm4gdG8KKwlhY2NlcHQgVVJMcyBhcy1pcyB3aXRob3V0IGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byBhIGhpZ2hlcgorCWxldmVsIGRpcmVjdG9yeS4gIFRoaXMgb3B0aW9uIGlzIG9mZiBieSBkZWZhdWx0IHdoZW4gb25seQorCW9uZSBVUkwvYnJhbmNoIGlzIHRyYWNrZWQgKGl0IHdvdWxkIGRvIGxpdHRsZSBnb29kKS4KKworJ2ZldGNoJzo6CisJRmV0Y2ggdW5mZXRjaGVkIHJldmlzaW9ucyBmcm9tIHRoZSBTdWJ2ZXJzaW9uIHJlbW90ZSB3ZSBhcmUKKwl0cmFja2luZy4gIFRoZSBuYW1lIG9mIHRoZSBbc3ZuLXJlbW90ZSAiLi4uIl0gc2VjdGlvbiBpbiB0aGUKKwkkR0lUX0RJUi9jb25maWcgZmlsZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbmFsCisJY29tbWFuZC1saW5lIGFyZ3VtZW50LgorKworVGhpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIHJldl9tYXAgaWYgbmVlZGVkIChzZWUKKyckR0lUX0RJUi9zdm4vXCoqLy5yZXZfbWFwLionIGluIHRoZSBGSUxFUyBzZWN0aW9uIGJlbG93IGZvciBkZXRhaWxzKS4KKworLS1sb2NhbHRpbWU7OworCVN0b3JlIEdpdCBjb21taXQgdGltZXMgaW4gdGhlIGxvY2FsIHRpbWUgem9uZSBpbnN0ZWFkIG9mIFVUQy4gIFRoaXMKKwltYWtlcyAnZ2l0IGxvZycgKGV2ZW4gd2l0aG91dCAtLWRhdGU9bG9jYWwpIHNob3cgdGhlIHNhbWUgdGltZXMKKwl0aGF0IGBzdm4gbG9nYCB3b3VsZCBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgorKworVGhpcyBkb2Vzbid0IGludGVyZmVyZSB3aXRoIGludGVyb3BlcmF0aW5nIHdpdGggdGhlIFN1YnZlcnNpb24KK3JlcG9zaXRvcnkgeW91IGNsb25lZCBmcm9tLCBidXQgaWYgeW91IHdpc2ggZm9yIHlvdXIgbG9jYWwgR2l0CityZXBvc2l0b3J5IHRvIGJlIGFibGUgdG8gaW50ZXJvcGVyYXRlIHdpdGggc29tZW9uZSBlbHNlJ3MgbG9jYWwgR2l0CityZXBvc2l0b3J5LCBlaXRoZXIgZG9uJ3QgdXNlIHRoaXMgb3B0aW9uIG9yIHlvdSBzaG91bGQgYm90aCB1c2UgaXQgaW4KK3RoZSBzYW1lIGxvY2FsIHRpbWUgem9uZS4KKworLS1wYXJlbnQ7OworCUZldGNoIG9ubHkgZnJvbSB0aGUgU1ZOIHBhcmVudCBvZiB0aGUgY3VycmVudCBIRUFELgorCistLWlnbm9yZS1yZWZzPTxyZWdleD47OworCUlnbm9yZSByZWZzIGZvciBicmFuY2hlcyBvciB0YWdzIG1hdGNoaW5nIHRoZSBQZXJsIHJlZ3VsYXIKKwlleHByZXNzaW9uLiBBICJuZWdhdGl2ZSBsb29rLWFoZWFkIGFzc2VydGlvbiIgbGlrZQorCWBecmVmcy9yZW1vdGVzL29yaWdpbi8oPyF0YWdzL3dhbnRlZC10YWd8d2FudGVkLWJyYW5jaCkuKiRgCisJY2FuIGJlIHVzZWQgdG8gYWxsb3cgb25seSBjZXJ0YWluIHJlZnMuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4tcmVtb3RlLjxuYW1lPi5pZ25vcmUtcmVmcworKworSWYgdGhlIGlnbm9yZS1yZWZzIGNvbmZpZ3VyYXRpb24ga2V5IGlzIHNldCwgYW5kIHRoZSBjb21tYW5kLWxpbmUKK29wdGlvbiBpcyBhbHNvIGdpdmVuLCBib3RoIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2lsbCBiZSB1c2VkLgorCistLWlnbm9yZS1wYXRocz08cmVnZXg+OzsKKwlUaGlzIGFsbG93cyBvbmUgdG8gc3BlY2lmeSBhIFBlcmwgcmVndWxhciBleHByZXNzaW9uIHRoYXQgd2lsbAorCWNhdXNlIHNraXBwaW5nIG9mIGFsbCBtYXRjaGluZyBwYXRocyBmcm9tIGNoZWNrb3V0IGZyb20gU1ZOLgorCVRoZSBgLS1pZ25vcmUtcGF0aHNgIG9wdGlvbiBzaG91bGQgbWF0Y2ggZm9yIGV2ZXJ5ICdmZXRjaCcKKwkoaW5jbHVkaW5nIGF1dG9tYXRpYyBmZXRjaGVzIGR1ZSB0byAnY2xvbmUnLCAnZGNvbW1pdCcsCisJJ3JlYmFzZScsIGV0Yykgb24gYSBnaXZlbiByZXBvc2l0b3J5LgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLXJlbW90ZS48bmFtZT4uaWdub3JlLXBhdGhzCisrCitJZiB0aGUgaWdub3JlLXBhdGhzIGNvbmZpZ3VyYXRpb24ga2V5IGlzIHNldCwgYW5kIHRoZSBjb21tYW5kLWxpbmUKK29wdGlvbiBpcyBhbHNvIGdpdmVuLCBib3RoIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2lsbCBiZSB1c2VkLgorKworRXhhbXBsZXM6CisrCistLQorU2tpcCAiZG9jKiIgZGlyZWN0b3J5IGZvciBldmVyeSBmZXRjaDs7CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0taWdub3JlLXBhdGhzPSJeZG9jIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NraXAgImJyYW5jaGVzIiBhbmQgInRhZ3MiIG9mIGZpcnN0IGxldmVsIGRpcmVjdG9yaWVzOzsKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS1pZ25vcmUtcGF0aHM9Il5bXi9dKy8oPzpicmFuY2hlc3x0YWdzKSIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0KKworLS1pbmNsdWRlLXBhdGhzPTxyZWdleD47OworCVRoaXMgYWxsb3dzIG9uZSB0byBzcGVjaWZ5IGEgUGVybCByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsCisJY2F1c2UgdGhlIGluY2x1c2lvbiBvZiBvbmx5IG1hdGNoaW5nIHBhdGhzIGZyb20gY2hlY2tvdXQgZnJvbSBTVk4uCisJVGhlIGAtLWluY2x1ZGUtcGF0aHNgIG9wdGlvbiBzaG91bGQgbWF0Y2ggZm9yIGV2ZXJ5ICdmZXRjaCcKKwkoaW5jbHVkaW5nIGF1dG9tYXRpYyBmZXRjaGVzIGR1ZSB0byAnY2xvbmUnLCAnZGNvbW1pdCcsCisJJ3JlYmFzZScsIGV0Yykgb24gYSBnaXZlbiByZXBvc2l0b3J5LiBgLS1pZ25vcmUtcGF0aHNgIHRha2VzCisJcHJlY2VkZW5jZSBvdmVyIGAtLWluY2x1ZGUtcGF0aHNgLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLXJlbW90ZS48bmFtZT4uaW5jbHVkZS1wYXRocworCistLWxvZy13aW5kb3ctc2l6ZT08bj47OworCUZldGNoIDxuPiBsb2cgZW50cmllcyBwZXIgcmVxdWVzdCB3aGVuIHNjYW5uaW5nIFN1YnZlcnNpb24gaGlzdG9yeS4KKwlUaGUgZGVmYXVsdCBpcyAxMDAuIEZvciB2ZXJ5IGxhcmdlIFN1YnZlcnNpb24gcmVwb3NpdG9yaWVzLCBsYXJnZXIKKwl2YWx1ZXMgbWF5IGJlIG5lZWRlZCBmb3IgJ2Nsb25lJy8nZmV0Y2gnIHRvIGNvbXBsZXRlIGluIHJlYXNvbmFibGUKKwl0aW1lLiBCdXQgb3Zlcmx5IGxhcmdlIHZhbHVlcyBtYXkgbGVhZCB0byBoaWdoZXIgbWVtb3J5IHVzYWdlIGFuZAorCXJlcXVlc3QgdGltZW91dHMuCisKKydjbG9uZSc6OgorCVJ1bnMgJ2luaXQnIGFuZCAnZmV0Y2gnLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhCisJZGlyZWN0b3J5IGJhc2VkIG9uIHRoZSBiYXNlbmFtZSBvZiB0aGUgVVJMIHBhc3NlZCB0byBpdDsKKwlvciBpZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwYXNzZWQ7IGl0IHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5CisJYW5kIHdvcmsgd2l0aGluIHRoYXQuICBJdCBhY2NlcHRzIGFsbCBhcmd1bWVudHMgdGhhdCB0aGUKKwknaW5pdCcgYW5kICdmZXRjaCcgY29tbWFuZHMgYWNjZXB0OyB3aXRoIHRoZSBleGNlcHRpb24gb2YKKwlgLS1mZXRjaC1hbGxgIGFuZCBgLS1wYXJlbnRgLiAgQWZ0ZXIgYSByZXBvc2l0b3J5IGlzIGNsb25lZCwKKwl0aGUgJ2ZldGNoJyBjb21tYW5kIHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgcmV2aXNpb25zIHdpdGhvdXQKKwlhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZTsgYW5kIHRoZSAncmViYXNlJyBjb21tYW5kIHdpbGwgYmUKKwlhYmxlIHRvIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIHdpdGggdGhlIGxhdGVzdCBjaGFuZ2VzLgorCistLXByZXNlcnZlLWVtcHR5LWRpcnM7OworCUNyZWF0ZSBhIHBsYWNlaG9sZGVyIGZpbGUgaW4gdGhlIGxvY2FsIEdpdCByZXBvc2l0b3J5IGZvciBlYWNoCisJZW1wdHkgZGlyZWN0b3J5IGZldGNoZWQgZnJvbSBTdWJ2ZXJzaW9uLiAgVGhpcyBpbmNsdWRlcyBkaXJlY3RvcmllcworCXRoYXQgYmVjb21lIGVtcHR5IGJ5IHJlbW92aW5nIGFsbCBlbnRyaWVzIGluIHRoZSBTdWJ2ZXJzaW9uCisJcmVwb3NpdG9yeSAoYnV0IG5vdCB0aGUgZGlyZWN0b3J5IGl0c2VsZikuICBUaGUgcGxhY2Vob2xkZXIgZmlsZXMKKwlhcmUgYWxzbyB0cmFja2VkIGFuZCByZW1vdmVkIHdoZW4gbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKworLS1wbGFjZWhvbGRlci1maWxlbmFtZT08ZmlsZW5hbWU+OzsKKwlTZXQgdGhlIG5hbWUgb2YgcGxhY2Vob2xkZXIgZmlsZXMgY3JlYXRlZCBieSAtLXByZXNlcnZlLWVtcHR5LWRpcnMuCisJRGVmYXVsdDogIi5naXRpZ25vcmUiCisKKydyZWJhc2UnOjoKKwlUaGlzIGZldGNoZXMgcmV2aXNpb25zIGZyb20gdGhlIFNWTiBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgSEVBRAorCWFuZCByZWJhc2VzIHRoZSBjdXJyZW50ICh1bmNvbW1pdHRlZCB0byBTVk4pIHdvcmsgYWdhaW5zdCBpdC4KKysKK1RoaXMgd29ya3Mgc2ltaWxhcmx5IHRvIGBzdm4gdXBkYXRlYCBvciAnZ2l0IHB1bGwnIGV4Y2VwdCB0aGF0CitpdCBwcmVzZXJ2ZXMgbGluZWFyIGhpc3Rvcnkgd2l0aCAnZ2l0IHJlYmFzZScgaW5zdGVhZCBvZgorJ2dpdCBtZXJnZScgZm9yIGVhc2Ugb2YgZGNvbW1pdHRpbmcgd2l0aCAnZ2l0IHN2bicuCisrCitUaGlzIGFjY2VwdHMgYWxsIG9wdGlvbnMgdGhhdCAnZ2l0IHN2biBmZXRjaCcgYW5kICdnaXQgcmViYXNlJworYWNjZXB0LiAgSG93ZXZlciwgYC0tZmV0Y2gtYWxsYCBvbmx5IGZldGNoZXMgZnJvbSB0aGUgY3VycmVudAorW3N2bi1yZW1vdGVdLCBhbmQgbm90IGFsbCBbc3ZuLXJlbW90ZV0gZGVmaW5pdGlvbnMuCisrCitMaWtlICdnaXQgcmViYXNlJzsgdGhpcyByZXF1aXJlcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgYmUgY2xlYW4KK2FuZCBoYXZlIG5vIHVuY29tbWl0dGVkIGNoYW5nZXMuCisrCitUaGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcmV2X21hcCBpZiBuZWVkZWQgKHNlZQorJyRHSVRfRElSL3N2bi9cKiovLnJldl9tYXAuKicgaW4gdGhlIEZJTEVTIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbHMpLgorCistbDs7CistLWxvY2FsOzsKKwlEbyBub3QgZmV0Y2ggcmVtb3RlbHk7IG9ubHkgcnVuICdnaXQgcmViYXNlJyBhZ2FpbnN0IHRoZQorCWxhc3QgZmV0Y2hlZCBjb21taXQgZnJvbSB0aGUgdXBzdHJlYW0gU1ZOLgorCisnZGNvbW1pdCc6OgorCUNvbW1pdCBlYWNoIGRpZmYgZnJvbSB0aGUgY3VycmVudCBicmFuY2ggZGlyZWN0bHkgdG8gdGhlIFNWTgorCXJlcG9zaXRvcnksIGFuZCB0aGVuIHJlYmFzZSBvciByZXNldCAoZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3IKKwlub3QgdGhlcmUgaXMgYSBkaWZmIGJldHdlZW4gU1ZOIGFuZCBoZWFkKS4gIFRoaXMgd2lsbCBjcmVhdGUKKwlhIHJldmlzaW9uIGluIFNWTiBmb3IgZWFjaCBjb21taXQgaW4gR2l0LgorKworV2hlbiBhbiBvcHRpb25hbCBHaXQgYnJhbmNoIG5hbWUgKG9yIGEgR2l0IGNvbW1pdCBvYmplY3QgbmFtZSkKK2lzIHNwZWNpZmllZCBhcyBhbiBhcmd1bWVudCwgdGhlIHN1YmNvbW1hbmQgd29ya3Mgb24gdGhlIHNwZWNpZmllZAorYnJhbmNoLCBub3Qgb24gdGhlIGN1cnJlbnQgYnJhbmNoLgorKworVXNlIG9mICdkY29tbWl0JyBpcyBwcmVmZXJyZWQgdG8gJ3NldC10cmVlJyAoYmVsb3cpLgorKworLS1uby1yZWJhc2U7OworCUFmdGVyIGNvbW1pdHRpbmcsIGRvIG5vdCByZWJhc2Ugb3IgcmVzZXQuCistLWNvbW1pdC11cmwgPFVSTD47OworCUNvbW1pdCB0byB0aGlzIFNWTiBVUkwgKHRoZSBmdWxsIHBhdGgpLiAgVGhpcyBpcyBpbnRlbmRlZCB0bworCWFsbG93IGV4aXN0aW5nICdnaXQgc3ZuJyByZXBvc2l0b3JpZXMgY3JlYXRlZCB3aXRoIG9uZSB0cmFuc3BvcnQKKwltZXRob2QgKGUuZy4gYHN2bjovL2Agb3IgYGh0dHA6Ly9gIGZvciBhbm9ueW1vdXMgcmVhZCkgdG8gYmUKKwlyZXVzZWQgaWYgYSB1c2VyIGlzIGxhdGVyIGdpdmVuIGFjY2VzcyB0byBhbiBhbHRlcm5hdGUgdHJhbnNwb3J0CisJbWV0aG9kIChlLmcuIGBzdm4rc3NoOi8vYCBvciBgaHR0cHM6Ly9gKSBmb3IgY29tbWl0LgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsCitjb25maWcga2V5OiBzdm4uY29tbWl0dXJsIChvdmVyd3JpdGVzIGFsbCBzdm4tcmVtb3RlLjxuYW1lPi5jb21taXR1cmwgb3B0aW9ucykKKysKK05vdGUgdGhhdCB0aGUgU1ZOIFVSTCBvZiB0aGUgY29tbWl0dXJsIGNvbmZpZyBrZXkgaW5jbHVkZXMgdGhlIFNWTiBicmFuY2guCitJZiB5b3UgcmF0aGVyIHdhbnQgdG8gc2V0IHRoZSBjb21taXQgVVJMIGZvciBhbiBlbnRpcmUgU1ZOIHJlcG9zaXRvcnkgdXNlCitzdm4tcmVtb3RlLjxuYW1lPi5wdXNodXJsIGluc3RlYWQuCisrCitVc2luZyB0aGlzIG9wdGlvbiBmb3IgYW55IG90aGVyIHB1cnBvc2UgKGRvbid0IGFzaykgaXMgdmVyeSBzdHJvbmdseQorZGlzY291cmFnZWQuCisKKy0tbWVyZ2VpbmZvPTxtZXJnZWluZm8+OzsKKwlBZGQgdGhlIGdpdmVuIG1lcmdlIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgZGNvbW1pdAorCShlLmcuIGAtLW1lcmdlaW5mbz0iL2JyYW5jaGVzL2ZvbzoxLTEwImApLiBBbGwgc3ZuIHNlcnZlciB2ZXJzaW9ucyBjYW4KKwlzdG9yZSB0aGlzIGluZm9ybWF0aW9uIChhcyBhIHByb3BlcnR5KSwgYW5kIHN2biBjbGllbnRzIHN0YXJ0aW5nIGZyb20KKwl2ZXJzaW9uIDEuNSBjYW4gbWFrZSB1c2Ugb2YgaXQuIFRvIHNwZWNpZnkgbWVyZ2UgaW5mb3JtYXRpb24gZnJvbSBtdWx0aXBsZQorCWJyYW5jaGVzLCB1c2UgYSBzaW5nbGUgc3BhY2UgY2hhcmFjdGVyIGJldHdlZW4gdGhlIGJyYW5jaGVzCisJKGAtLW1lcmdlaW5mbz0iL2JyYW5jaGVzL2ZvbzoxLTEwIC9icmFuY2hlcy9iYXI6Myw1LTYsOCJgKQorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLnB1c2htZXJnZWluZm8KKysKK1RoaXMgb3B0aW9uIHdpbGwgY2F1c2UgZ2l0LXN2biB0byBhdHRlbXB0IHRvIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGUgdGhlCitzdm46bWVyZ2VpbmZvIHByb3BlcnR5IGluIHRoZSBTVk4gcmVwb3NpdG9yeSB3aGVuIHBvc3NpYmxlLiBDdXJyZW50bHksIHRoaXMgY2FuCitvbmx5IGJlIGRvbmUgd2hlbiBkY29tbWl0dGluZyBub24tZmFzdC1mb3J3YXJkIG1lcmdlcyB3aGVyZSBhbGwgcGFyZW50cyBidXQgdGhlCitmaXJzdCBoYXZlIGFscmVhZHkgYmVlbiBwdXNoZWQgaW50byBTVk4uCisKKy0taW50ZXJhY3RpdmU7OworCUFzayB0aGUgdXNlciB0byBjb25maXJtIHRoYXQgYSBwYXRjaCBzZXQgc2hvdWxkIGFjdHVhbGx5IGJlIHNlbnQgdG8gU1ZOLgorCUZvciBlYWNoIHBhdGNoLCBvbmUgbWF5IGFuc3dlciAieWVzIiAoYWNjZXB0IHRoaXMgcGF0Y2gpLCAibm8iIChkaXNjYXJkIHRoaXMKKwlwYXRjaCksICJhbGwiIChhY2NlcHQgYWxsIHBhdGNoZXMpLCBvciAicXVpdCIuCisrCisnZ2l0IHN2biBkY29tbWl0JyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIGFuc3dlciBpcyAibm8iIG9yICJxdWl0Iiwgd2l0aG91dAorY29tbWl0dGluZyBhbnl0aGluZyB0byBTVk4uCisKKydicmFuY2gnOjoKKwlDcmVhdGUgYSBicmFuY2ggaW4gdGhlIFNWTiByZXBvc2l0b3J5LgorCistbTs7CistLW1lc3NhZ2U7OworCUFsbG93cyB0byBzcGVjaWZ5IHRoZSBjb21taXQgbWVzc2FnZS4KKworLXQ7OworLS10YWc7OworCUNyZWF0ZSBhIHRhZyBieSB1c2luZyB0aGUgdGFnc19zdWJkaXIgaW5zdGVhZCBvZiB0aGUgYnJhbmNoZXNfc3ViZGlyCisJc3BlY2lmaWVkIGR1cmluZyBnaXQgc3ZuIGluaXQuCisKKy1kPHBhdGg+OzsKKy0tZGVzdGluYXRpb249PHBhdGg+OzsKKworCUlmIG1vcmUgdGhhbiBvbmUgLS1icmFuY2hlcyAob3IgLS10YWdzKSBvcHRpb24gd2FzIGdpdmVuIHRvIHRoZSAnaW5pdCcKKwlvciAnY2xvbmUnIGNvbW1hbmQsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBicmFuY2ggKG9yCisJdGFnKSB5b3Ugd2lzaCB0byBjcmVhdGUgaW4gdGhlIFNWTiByZXBvc2l0b3J5LiAgPHBhdGg+IHNwZWNpZmllcyB3aGljaAorCXBhdGggdG8gdXNlIHRvIGNyZWF0ZSB0aGUgYnJhbmNoIG9yIHRhZyBhbmQgc2hvdWxkIG1hdGNoIHRoZSBwYXR0ZXJuCisJb24gdGhlIGxlZnQtaGFuZCBzaWRlIG9mIG9uZSBvZiB0aGUgY29uZmlndXJlZCBicmFuY2hlcyBvciB0YWdzCisJcmVmc3BlY3MuICBZb3UgY2FuIHNlZSB0aGVzZSByZWZzcGVjcyB3aXRoIHRoZSBjb21tYW5kcworKworCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuPG5hbWU+LmJyYW5jaGVzCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4udGFncworKword2hlcmUgPG5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZSBTVk4gcmVwb3NpdG9yeSBhcyBzcGVjaWZpZWQgYnkgdGhlIC1SIG9wdGlvbiB0bworJ2luaXQnIChvciAic3ZuIiBieSBkZWZhdWx0KS4KKworLS11c2VybmFtZTs7CisJU3BlY2lmeSB0aGUgU1ZOIHVzZXJuYW1lIHRvIHBlcmZvcm0gdGhlIGNvbW1pdCBhcy4gIFRoaXMgb3B0aW9uIG92ZXJyaWRlcworCXRoZSAndXNlcm5hbWUnIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkuCisKKy0tY29tbWl0LXVybDs7CisJVXNlIHRoZSBzcGVjaWZpZWQgVVJMIHRvIGNvbm5lY3QgdG8gdGhlIGRlc3RpbmF0aW9uIFN1YnZlcnNpb24KKwlyZXBvc2l0b3J5LiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgdGhlIHNvdXJjZSBTVk4KKwlyZXBvc2l0b3J5IGlzIHJlYWQtb25seS4gIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBjb25maWd1cmF0aW9uCisJcHJvcGVydHkgJ2NvbW1pdHVybCcuCisrCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsCisrCisKKy0tcGFyZW50czs7CisJQ3JlYXRlIHBhcmVudCBmb2xkZXJzLiBUaGlzIHBhcmFtZXRlciBpcyBlcXVpdmFsZW50IHRvIHRoZSBwYXJhbWV0ZXIKKwktLXBhcmVudHMgb24gc3ZuIGNwIGNvbW1hbmRzIGFuZCBpcyB1c2VmdWwgZm9yIG5vbi1zdGFuZGFyZCByZXBvc2l0b3J5CisJbGF5b3V0cy4KKworJ3RhZyc6OgorCUNyZWF0ZSBhIHRhZyBpbiB0aGUgU1ZOIHJlcG9zaXRvcnkuIFRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yCisJJ2JyYW5jaCAtdCcuCisKKydsb2cnOjoKKwlUaGlzIHNob3VsZCBtYWtlIGl0IGVhc3kgdG8gbG9vayB1cCBzdm4gbG9nIG1lc3NhZ2VzIHdoZW4gc3ZuCisJdXNlcnMgcmVmZXIgdG8gLXIvLS1yZXZpc2lvbiBudW1iZXJzLgorKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBmcm9tIGBzdm4gbG9nJyBhcmUgc3VwcG9ydGVkOgorKworLS0KKy1yIDxuPls6PG4+XTs7CistLXJldmlzaW9uPTxuPls6PG4+XTs7CisJaXMgc3VwcG9ydGVkLCBub24tbnVtZXJpYyBhcmdzIGFyZSBub3Q6CisJSEVBRCwgTkVYVCwgQkFTRSwgUFJFViwgZXRjIC4uLgorLXY7OworLS12ZXJib3NlOzsKKwlpdCdzIG5vdCBjb21wbGV0ZWx5IGNvbXBhdGlibGUgd2l0aCB0aGUgLS12ZXJib3NlCisJb3V0cHV0IGluIHN2biBsb2csIGJ1dCByZWFzb25hYmx5IGNsb3NlLgorLS1saW1pdD08bj47OworCWlzIE5PVCB0aGUgc2FtZSBhcyAtLW1heC1jb3VudCwgZG9lc24ndCBjb3VudAorCW1lcmdlZC9leGNsdWRlZCBjb21taXRzCistLWluY3JlbWVudGFsOzsKKwlzdXBwb3J0ZWQKKy0tCisrCitOZXcgZmVhdHVyZXM6CisrCistLQorLS1zaG93LWNvbW1pdDs7CisJc2hvd3MgdGhlIEdpdCBjb21taXQgc2hhMSwgYXMgd2VsbAorLS1vbmVsaW5lOzsKKwlvdXIgdmVyc2lvbiBvZiAtLXByZXR0eT1vbmVsaW5lCistLQorKworTk9URTogU1ZOIGl0c2VsZiBvbmx5IHN0b3JlcyB0aW1lcyBpbiBVVEMgYW5kIG5vdGhpbmcgZWxzZS4gVGhlIHJlZ3VsYXIgc3ZuCitjbGllbnQgY29udmVydHMgdGhlIFVUQyB0aW1lIHRvIHRoZSBsb2NhbCB0aW1lIChvciBiYXNlZCBvbiB0aGUgVFo9CitlbnZpcm9ubWVudCkuIFRoaXMgY29tbWFuZCBoYXMgdGhlIHNhbWUgYmVoYXZpb3VyLgorKworQW55IG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgbG9nJworCisnYmxhbWUnOjoKKwlTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUuIFRoZQorCW91dHB1dCBvZiB0aGlzIG1vZGUgaXMgZm9ybWF0LWNvbXBhdGlibGUgd2l0aCB0aGUgb3V0cHV0IG9mCisJYHN2biBibGFtZScgYnkgZGVmYXVsdC4gTGlrZSB0aGUgU1ZOIGJsYW1lIGNvbW1hbmQsCisJbG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFyZSBpZ25vcmVkOworCXRoZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGluIHRoZSBIRUFEIHJldmlzaW9uIGlzIGFubm90YXRlZC4gVW5rbm93bgorCWFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgYmxhbWUnLgorKworLS1naXQtZm9ybWF0OzsKKwlQcm9kdWNlIG91dHB1dCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgJ2dpdCBibGFtZScsIGJ1dCB3aXRoCisJU1ZOIHJldmlzaW9uIG51bWJlcnMgaW5zdGVhZCBvZiBHaXQgY29tbWl0IGhhc2hlcy4gSW4gdGhpcyBtb2RlLAorCWNoYW5nZXMgdGhhdCBoYXZlbid0IGJlZW4gY29tbWl0dGVkIHRvIFNWTiAoaW5jbHVkaW5nIGxvY2FsCisJd29ya2luZy1jb3B5IGVkaXRzKSBhcmUgc2hvd24gYXMgcmV2aXNpb24gMC4KKworJ2ZpbmQtcmV2Jzo6CisJV2hlbiBnaXZlbiBhbiBTVk4gcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBmb3JtICdyTicsIHJldHVybnMgdGhlCisJY29ycmVzcG9uZGluZyBHaXQgY29tbWl0IGhhc2ggKHRoaXMgY2FuIG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgYQorCXRyZWUtaXNoIHRvIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHNob3VsZCBiZSBzZWFyY2hlZCkuICBXaGVuIGdpdmVuIGEKKwl0cmVlLWlzaCwgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBTVk4gcmV2aXNpb24gbnVtYmVyLgorKworLUI7OworLS1iZWZvcmU7OworCURvbid0IHJlcXVpcmUgYW4gZXhhY3QgbWF0Y2ggaWYgZ2l2ZW4gYW4gU1ZOIHJldmlzaW9uLCBpbnN0ZWFkIGZpbmQKKwl0aGUgY29tbWl0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN0YXRlIG9mIHRoZSBTVk4gcmVwb3NpdG9yeSAob24gdGhlCisJY3VycmVudCBicmFuY2gpIGF0IHRoZSBzcGVjaWZpZWQgcmV2aXNpb24uCisrCistQTs7CistLWFmdGVyOzsKKwlEb24ndCByZXF1aXJlIGFuIGV4YWN0IG1hdGNoIGlmIGdpdmVuIGFuIFNWTiByZXZpc2lvbjsgaWYgdGhlcmUgaXMKKwlub3QgYW4gZXhhY3QgbWF0Y2ggcmV0dXJuIHRoZSBjbG9zZXN0IG1hdGNoIHNlYXJjaGluZyBmb3J3YXJkIGluIHRoZQorCWhpc3RvcnkuCisKKydzZXQtdHJlZSc6OgorCVlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgJ2Rjb21taXQnIGluc3RlYWQgb2YgdGhpcyBjb21tYW5kLgorCUNvbW1pdCBzcGVjaWZpZWQgY29tbWl0IG9yIHRyZWUgb2JqZWN0cyB0byBTVk4uICBUaGlzIHJlbGllcyBvbgorCXlvdXIgaW1wb3J0ZWQgZmV0Y2ggZGF0YSBiZWluZyB1cCB0byBkYXRlLiAgVGhpcyBtYWtlcworCWFic29sdXRlbHkgbm8gYXR0ZW1wdHMgdG8gZG8gcGF0Y2hpbmcgd2hlbiBjb21taXR0aW5nIHRvIFNWTiwgaXQKKwlzaW1wbHkgb3ZlcndyaXRlcyBmaWxlcyB3aXRoIHRob3NlIHNwZWNpZmllZCBpbiB0aGUgdHJlZSBvcgorCWNvbW1pdC4gIEFsbCBtZXJnaW5nIGlzIGFzc3VtZWQgdG8gaGF2ZSB0YWtlbiBwbGFjZQorCWluZGVwZW5kZW50bHkgb2YgJ2dpdCBzdm4nIGZ1bmN0aW9ucy4KKworJ2NyZWF0ZS1pZ25vcmUnOjoKKwlSZWN1cnNpdmVseSBmaW5kcyB0aGUgc3ZuOmlnbm9yZSBwcm9wZXJ0eSBvbiBkaXJlY3RvcmllcyBhbmQKKwljcmVhdGVzIG1hdGNoaW5nIC5naXRpZ25vcmUgZmlsZXMuIFRoZSByZXN1bHRpbmcgZmlsZXMgYXJlIHN0YWdlZCB0bworCWJlIGNvbW1pdHRlZCwgYnV0IGFyZSBub3QgY29tbWl0dGVkLiBVc2UgLXIvLS1yZXZpc2lvbiB0byByZWZlciB0byBhCisJc3BlY2lmaWMgcmV2aXNpb24uCisKKydzaG93LWlnbm9yZSc6OgorCVJlY3Vyc2l2ZWx5IGZpbmRzIGFuZCBsaXN0cyB0aGUgc3ZuOmlnbm9yZSBwcm9wZXJ0eSBvbgorCWRpcmVjdG9yaWVzLiAgVGhlIG91dHB1dCBpcyBzdWl0YWJsZSBmb3IgYXBwZW5kaW5nIHRvCisJdGhlICRHSVRfRElSL2luZm8vZXhjbHVkZSBmaWxlLgorCisnbWtkaXJzJzo6CisJQXR0ZW1wdHMgdG8gcmVjcmVhdGUgZW1wdHkgZGlyZWN0b3JpZXMgdGhhdCBjb3JlIEdpdCBjYW5ub3QgdHJhY2sKKwliYXNlZCBvbiBpbmZvcm1hdGlvbiBpbiAkR0lUX0RJUi9zdm4vPHJlZm5hbWU+L3VuaGFuZGxlZC5sb2cgZmlsZXMuCisJRW1wdHkgZGlyZWN0b3JpZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVjcmVhdGVkIHdoZW4gdXNpbmcKKwkiZ2l0IHN2biBjbG9uZSIgYW5kICJnaXQgc3ZuIHJlYmFzZSIsIHNvICJta2RpcnMiIGlzIGludGVuZGVkCisJZm9yIHVzZSBhZnRlciBjb21tYW5kcyBsaWtlICJnaXQgY2hlY2tvdXQiIG9yICJnaXQgcmVzZXQiLgorCShTZWUgdGhlIHN2bi1yZW1vdGUuPG5hbWU+LmF1dG9ta2RpcnMgY29uZmlnIGZpbGUgb3B0aW9uIGZvcgorCW1vcmUgaW5mb3JtYXRpb24uKQorCisnY29tbWl0LWRpZmYnOjoKKwlDb21taXRzIHRoZSBkaWZmIG9mIHR3byB0cmVlLWlzaCBhcmd1bWVudHMgZnJvbSB0aGUKKwljb21tYW5kLWxpbmUuICBUaGlzIGNvbW1hbmQgZG9lcyBub3QgcmVseSBvbiBiZWluZyBpbnNpZGUgYSBgZ2l0IHN2bgorCWluaXRgLWVkIHJlcG9zaXRvcnkuICBUaGlzIGNvbW1hbmQgdGFrZXMgdGhyZWUgYXJndW1lbnRzLCAoYSkgdGhlCisJb3JpZ2luYWwgdHJlZSB0byBkaWZmIGFnYWluc3QsIChiKSB0aGUgbmV3IHRyZWUgcmVzdWx0LCAoYykgdGhlCisJVVJMIG9mIHRoZSB0YXJnZXQgU3VidmVyc2lvbiByZXBvc2l0b3J5LiAgVGhlIGZpbmFsIGFyZ3VtZW50CisJKFVSTCkgbWF5IGJlIG9taXR0ZWQgaWYgeW91IGFyZSB3b3JraW5nIGZyb20gYSAnZ2l0IHN2bictYXdhcmUKKwlyZXBvc2l0b3J5ICh0aGF0IGhhcyBiZWVuIGBpbml0YC1lZCB3aXRoICdnaXQgc3ZuJykuCisJVGhlIC1yPHJldmlzaW9uPiBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIHRoaXMuCisrCitUaGUgY29tbWl0IG1lc3NhZ2UgaXMgc3VwcGxpZWQgZWl0aGVyIGRpcmVjdGx5IHdpdGggdGhlIGAtbWAgb3IgYC1GYAorb3B0aW9uLCBvciBpbmRpcmVjdGx5IGZyb20gdGhlIHRhZyBvciBjb21taXQgd2hlbiB0aGUgc2Vjb25kIHRyZWUtaXNoCitkZW5vdGVzIHN1Y2ggYW4gb2JqZWN0LCBvciBpdCBpcyByZXF1ZXN0ZWQgYnkgaW52b2tpbmcgYW4gZWRpdG9yIChzZWUKK2AtLWVkaXRgIG9wdGlvbiBiZWxvdykuCisKKy1tIDxtc2c+OzsKKy0tbWVzc2FnZT08bXNnPjs7CisJVXNlIHRoZSBnaXZlbiBgbXNnYCBhcyB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgb3B0aW9uCisJZGlzYWJsZXMgdGhlIGAtLWVkaXRgIG9wdGlvbi4KKworLUYgPGZpbGVuYW1lPjs7CistLWZpbGU9PGZpbGVuYW1lPjs7CisJVGFrZSB0aGUgY29tbWl0IG1lc3NhZ2UgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4gVGhpcyBvcHRpb24KKwlkaXNhYmxlcyB0aGUgYC0tZWRpdGAgb3B0aW9uLgorCisnaW5mbyc6OgorCVNob3dzIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSBvciBkaXJlY3Rvcnkgc2ltaWxhciB0byB3aGF0CisJYHN2biBpbmZvJyBwcm92aWRlcy4gIERvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IGEgLXIvLS1yZXZpc2lvbgorCWFyZ3VtZW50LiAgVXNlIHRoZSAtLXVybCBvcHRpb24gdG8gb3V0cHV0IG9ubHkgdGhlIHZhbHVlIG9mIHRoZQorCSdVUkw6JyBmaWVsZC4KKworJ3Byb3BsaXN0Jzo6CisJTGlzdHMgdGhlIHByb3BlcnRpZXMgc3RvcmVkIGluIHRoZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYWJvdXQgYQorCWdpdmVuIGZpbGUgb3IgZGlyZWN0b3J5LiAgVXNlIC1yLy0tcmV2aXNpb24gdG8gcmVmZXIgdG8gYSBzcGVjaWZpYworCVN1YnZlcnNpb24gcmV2aXNpb24uCisKKydwcm9wZ2V0Jzo6CisJR2V0cyB0aGUgU3VidmVyc2lvbiBwcm9wZXJ0eSBnaXZlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGZvciBhCisJZmlsZS4gIEEgc3BlY2lmaWMgcmV2aXNpb24gY2FuIGJlIHNwZWNpZmllZCB3aXRoIC1yLy0tcmV2aXNpb24uCisKKydwcm9wc2V0Jzo6CisJU2V0cyB0aGUgU3VidmVyc2lvbiBwcm9wZXJ0eSBnaXZlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIHRvIHRoZQorCXZhbHVlIGdpdmVuIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgZm9yIHRoZSBmaWxlIGdpdmVuIGFzIHRoZQorCXRoaXJkIGFyZ3VtZW50LgorKworRXhhbXBsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IHN2biBwcm9wc2V0IHN2bjprZXl3b3JkcyAiRnJlZUJTRD0lSCIgZGV2ZWwvcHktdGlwcGVyL01ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgd2lsbCBzZXQgdGhlIHByb3BlcnR5ICdzdm46a2V5d29yZHMnIHRvICdGcmVlQlNEPSVIJyBmb3IgdGhlIGZpbGUKKydkZXZlbC9weS10aXBwZXIvTWFrZWZpbGUnLgorCisnc2hvdy1leHRlcm5hbHMnOjoKKwlTaG93cyB0aGUgU3VidmVyc2lvbiBleHRlcm5hbHMuICBVc2UgLXIvLS1yZXZpc2lvbiB0byBzcGVjaWZ5IGEKKwlzcGVjaWZpYyByZXZpc2lvbi4KKworJ2djJzo6CisJQ29tcHJlc3MgJEdJVF9ESVIvc3ZuLzxyZWZuYW1lPi91bmhhbmRsZWQubG9nIGZpbGVzIGFuZCByZW1vdmUKKwkkR0lUX0RJUi9zdm4vPHJlZm5hbWU+L2luZGV4IGZpbGVzLgorCisncmVzZXQnOjoKKwlVbmRvZXMgdGhlIGVmZmVjdHMgb2YgJ2ZldGNoJyBiYWNrIHRvIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24uCisJVGhpcyBhbGxvd3MgeW91IHRvIHJlLSdmZXRjaCcgYW4gU1ZOIHJldmlzaW9uLiAgTm9ybWFsbHkgdGhlCisJY29udGVudHMgb2YgYW4gU1ZOIHJldmlzaW9uIHNob3VsZCBuZXZlciBjaGFuZ2UgYW5kICdyZXNldCcKKwlzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIGlmIFNWTiBwZXJtaXNzaW9ucyBjaGFuZ2UsCisJb3IgaWYgeW91IGFsdGVyIHlvdXIgLS1pZ25vcmUtcGF0aHMgb3B0aW9uLCBhICdmZXRjaCcgbWF5IGZhaWwKKwl3aXRoICJub3QgZm91bmQgaW4gY29tbWl0IiAoZmlsZSBub3QgcHJldmlvdXNseSB2aXNpYmxlKSBvcgorCSJjaGVja3N1bSBtaXNtYXRjaCIgKG1pc3NlZCBhIG1vZGlmaWNhdGlvbikuICBJZiB0aGUgcHJvYmxlbQorCWZpbGUgY2Fubm90IGJlIGlnbm9yZWQgZm9yZXZlciAod2l0aCAtLWlnbm9yZS1wYXRocykgdGhlIG9ubHkKKwl3YXkgdG8gcmVwYWlyIHRoZSByZXBvIGlzIHRvIHVzZSAncmVzZXQnLgorKworT25seSB0aGUgcmV2X21hcCBhbmQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gYXJlIGNoYW5nZWQgKHNlZQorJyRHSVRfRElSL3N2bi9cKiovLnJldl9tYXAuKicgaW4gdGhlIEZJTEVTIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbHMpLgorRm9sbG93ICdyZXNldCcgd2l0aCBhICdmZXRjaCcgYW5kIHRoZW4gJ2dpdCByZXNldCcgb3IgJ2dpdCByZWJhc2UnIHRvCittb3ZlIGxvY2FsIGJyYW5jaGVzIG9udG8gdGhlIG5ldyB0cmVlLgorCistciA8bj47OworLS1yZXZpc2lvbj08bj47OworCVNwZWNpZnkgdGhlIG1vc3QgcmVjZW50IHJldmlzaW9uIHRvIGtlZXAuICBBbGwgbGF0ZXIgcmV2aXNpb25zCisJYXJlIGRpc2NhcmRlZC4KKy1wOzsKKy0tcGFyZW50OzsKKwlEaXNjYXJkIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gYXMgd2VsbCwga2VlcGluZyB0aGUgbmVhcmVzdAorCXBhcmVudCBpbnN0ZWFkLgorRXhhbXBsZTo7OworQXNzdW1lIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gIm1hc3RlciIsIGJ1dCB5b3UgbmVlZCB0byByZWZldGNoICJyMiIuCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyLS0tcjMgcmVtb3Rlcy9naXQtc3ZuCisgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBBLS0tQiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorKworRml4IHRoZSBpZ25vcmUtcGF0aHMgb3IgU1ZOIHBlcm1pc3Npb25zIHByb2JsZW0gdGhhdCBjYXVzZWQgInIyIiB0bworYmUgaW5jb21wbGV0ZSBpbiB0aGUgZmlyc3QgcGxhY2UuICBUaGVuOgorKworW3ZlcnNlXQorZ2l0IHN2biByZXNldCAtcjIgLXAKK2dpdCBzdm4gZmV0Y2gKKysKKy0tLS0tLS0tLS0tLQorICAgIHIxLS0tcjInLS1yMycgcmVtb3Rlcy9naXQtc3ZuCisgICAgICBcCisgICAgICAgcjItLS1yMy0tLUEtLS1CIG1hc3RlcgorLS0tLS0tLS0tLS0tCisrCitUaGVuIGZpeHVwICJtYXN0ZXIiIHdpdGggJ2dpdCByZWJhc2UnLgorRG8gTk9UIHVzZSAnZ2l0IG1lcmdlJyBvciB5b3VyIGhpc3Rvcnkgd2lsbCBub3QgYmUgY29tcGF0aWJsZSB3aXRoIGEKK2Z1dHVyZSAnZGNvbW1pdCchCisrCitbdmVyc2VdCitnaXQgcmViYXNlIC0tb250byByZW1vdGVzL2dpdC1zdm4gQV4gbWFzdGVyCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyJy0tcjMnIHJlbW90ZXMvZ2l0LXN2bgorICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgQSctLUInIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1zaGFyZWRbPShmYWxzZXx0cnVlfHVtYXNrfGdyb3VwfGFsbHx3b3JsZHxldmVyeWJvZHkpXTo6CistLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2luaXQnIGNvbW1hbmQuCisJVGhlc2UgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGluaXQnLgorCistciA8YXJnPjo6CistLXJldmlzaW9uIDxhcmc+OjoKKwkgICBVc2VkIHdpdGggdGhlICdmZXRjaCcgY29tbWFuZC4KKysKK1RoaXMgYWxsb3dzIHJldmlzaW9uIHJhbmdlcyBmb3IgcGFydGlhbC9jYXV0ZXJpemVkIGhpc3RvcnkKK3RvIGJlIHN1cHBvcnRlZC4gICROVU1CRVIsICROVU1CRVIxOiROVU1CRVIyIChudW1lcmljIHJhbmdlcyksCiskTlVNQkVSOkhFQUQsIGFuZCBCQVNFOiROVU1CRVIgYXJlIGFsbCBzdXBwb3J0ZWQuCisrCitUaGlzIGNhbiBhbGxvdyB5b3UgdG8gbWFrZSBwYXJ0aWFsIG1pcnJvcnMgd2hlbiBydW5uaW5nIGZldGNoOworYnV0IGlzIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBoaXN0b3J5IHdpbGwgYmUgc2tpcHBlZAorYW5kIGxvc3QuCisKKy06OgorLS1zdGRpbjo6CisJT25seSB1c2VkIHdpdGggdGhlICdzZXQtdHJlZScgY29tbWFuZC4KKysKK1JlYWQgYSBsaXN0IG9mIGNvbW1pdHMgZnJvbSBzdGRpbiBhbmQgY29tbWl0IHRoZW0gaW4gcmV2ZXJzZQorb3JkZXIuICBPbmx5IHRoZSBsZWFkaW5nIHNoYTEgaXMgcmVhZCBmcm9tIGVhY2ggbGluZSwgc28KKydnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZScgb3V0cHV0IGNhbiBiZSB1c2VkLgorCistLXJtZGlyOjoKKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgorKworUmVtb3ZlIGRpcmVjdG9yaWVzIGZyb20gdGhlIFNWTiB0cmVlIGlmIHRoZXJlIGFyZSBubyBmaWxlcyBsZWZ0CitiZWhpbmQuICBTVk4gY2FuIHZlcnNpb24gZW1wdHkgZGlyZWN0b3JpZXMsIGFuZCB0aGV5IGFyZSBub3QKK3JlbW92ZWQgYnkgZGVmYXVsdCBpZiB0aGVyZSBhcmUgbm8gZmlsZXMgbGVmdCBpbiB0aGVtLiAgR2l0CitjYW5ub3QgdmVyc2lvbiBlbXB0eSBkaXJlY3Rvcmllcy4gIEVuYWJsaW5nIHRoaXMgZmxhZyB3aWxsIG1ha2UKK3RoZSBjb21taXQgdG8gU1ZOIGFjdCBsaWtlIEdpdC4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5ybWRpcgorCistZTo6CistLWVkaXQ6OgorCU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCisrCitFZGl0IHRoZSBjb21taXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyB0byBTVk4uICBUaGlzIGlzIG9mZiBieQorZGVmYXVsdCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb21taXRzLCBhbmQgZm9yY2VkIG9uIHdoZW4gY29tbWl0dGluZwordHJlZSBvYmplY3RzLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmVkaXQKKworLWw8bnVtPjo6CistLWZpbmQtY29waWVzLWhhcmRlcjo6CisJT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KKysKK1RoZXkgYXJlIGJvdGggcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgZGlmZi10cmVlJzsgc2VlCitsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4ubAorY29uZmlnIGtleTogc3ZuLmZpbmRjb3BpZXNoYXJkZXIKKworLUE8ZmlsZW5hbWU+OjoKKy0tYXV0aG9ycy1maWxlPTxmaWxlbmFtZT46OgorCVN5bnRheCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZpbGUgdXNlZCBieSAnZ2l0IGN2c2ltcG9ydCcgYnV0CisJYW4gZW1wdHkgZW1haWwgYWRkcmVzcyBjYW4gYmUgc3VwcGxpZWQgd2l0aCAnPD4nOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJbG9naW5uYW1lID0gSm9lIFVzZXIgPHVzZXJAZXhhbXBsZS5jb20+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0lmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCBhbmQgJ2dpdCBzdm4nIGVuY291bnRlcnMgYW4gU1ZOCitjb21taXR0ZXIgbmFtZSB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBhdXRob3JzLWZpbGUsICdnaXQgc3ZuJword2lsbCBhYm9ydCBvcGVyYXRpb24uIFRoZSB1c2VyIHdpbGwgdGhlbiBoYXZlIHRvIGFkZCB0aGUKK2FwcHJvcHJpYXRlIGVudHJ5LiAgUmUtcnVubmluZyB0aGUgcHJldmlvdXMgJ2dpdCBzdm4nIGNvbW1hbmQKK2FmdGVyIHRoZSBhdXRob3JzLWZpbGUgaXMgbW9kaWZpZWQgc2hvdWxkIGNvbnRpbnVlIG9wZXJhdGlvbi4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5hdXRob3JzZmlsZQorCistLWF1dGhvcnMtcHJvZz08ZmlsZW5hbWU+OjoKKwlJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGZvciBlYWNoIFNWTiBjb21taXR0ZXIgbmFtZSB0aGF0CisJZG9lcyBub3QgZXhpc3QgaW4gdGhlIGF1dGhvcnMgZmlsZSwgdGhlIGdpdmVuIGZpbGUgaXMgZXhlY3V0ZWQKKwl3aXRoIHRoZSBjb21taXR0ZXIgbmFtZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuICBUaGUgcHJvZ3JhbSBpcworCWV4cGVjdGVkIHRvIHJldHVybiBhIHNpbmdsZSBsaW5lIG9mIHRoZSBmb3JtICJOYW1lIDxlbWFpbD4iIG9yCisJIk5hbWUgPD4iLCB3aGljaCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaW5jbHVkZWQgaW4gdGhlIGF1dGhvcnMKKwlmaWxlLgorKworRHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucyBhIHJlbGF0aXZlICdmaWxlbmFtZScgaXMgZmlyc3Qgc2VhcmNoZWQKK3JlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgJ2luaXQnIGFuZCAnY2xvbmUnIGFuZCByZWxhdGl2ZQordG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZSBmb3IgJ2ZldGNoJy4gSWYgJ2ZpbGVuYW1lJyBpcworbm90IGZvdW5kLCBpdCBpcyBzZWFyY2hlZCBsaWtlIGFueSBvdGhlciBjb21tYW5kIGluICckUEFUSCcuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4uYXV0aG9yc1Byb2cKKworLXE6OgorLS1xdWlldDo6CisJTWFrZSAnZ2l0IHN2bicgbGVzcyB2ZXJib3NlLiBTcGVjaWZ5IGEgc2Vjb25kIHRpbWUgdG8gbWFrZSBpdAorCWV2ZW4gbGVzcyB2ZXJib3NlLgorCistbTo6CistLW1lcmdlOjoKKy1zPHN0cmF0ZWd5Pjo6CistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorLXA6OgorLS1yZWJhc2UtbWVyZ2VzOjoKKy0tcHJlc2VydmUtbWVyZ2VzIChERVBSRUNBVEVEKTo6CisJVGhlc2UgYXJlIG9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcgYW5kICdyZWJhc2UnIGNvbW1hbmRzLgorKworUGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgcmViYXNlJyB3aGVuIHVzaW5nICdkY29tbWl0JyBpZiBhCisnZ2l0IHJlc2V0JyBjYW5ub3QgYmUgdXNlZCAoc2VlICdkY29tbWl0JykuCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdyZWJhc2UnLCAnYnJhbmNoJyBhbmQKKwkndGFnJyBjb21tYW5kcy4KKysKK0ZvciAnZGNvbW1pdCcsIHByaW50IG91dCB0aGUgc2VyaWVzIG9mIEdpdCBhcmd1bWVudHMgdGhhdCB3b3VsZCBzaG93Cit3aGljaCBkaWZmcyB3b3VsZCBiZSBjb21taXR0ZWQgdG8gU1ZOLgorKworRm9yICdyZWJhc2UnLCBkaXNwbGF5IHRoZSBsb2NhbCBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIHRoZSB1cHN0cmVhbSBzdm4KK3JlcG9zaXRvcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIFVSTCBvZiBzdm4KK3JlcG9zaXRvcnkgdGhhdCB3aWxsIGJlIGZldGNoZWQgZnJvbS4KKysKK0ZvciAnYnJhbmNoJyBhbmQgJ3RhZycsIGRpc3BsYXkgdGhlIHVybHMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGNvcHlpbmcgd2hlbgorY3JlYXRpbmcgdGhlIGJyYW5jaCBvciB0YWcuCisKKy0tdXNlLWxvZy1hdXRob3I6OgorCVdoZW4gcmV0cmlldmluZyBzdm4gY29tbWl0cyBpbnRvIEdpdCAoYXMgcGFydCBvZiAnZmV0Y2gnLCAncmViYXNlJywgb3IKKwknZGNvbW1pdCcgb3BlcmF0aW9ucyksIGxvb2sgZm9yIHRoZSBmaXJzdCBgRnJvbTpgIG9yIGBTaWduZWQtb2ZmLWJ5OmAgbGluZQorCWluIHRoZSBsb2cgbWVzc2FnZSBhbmQgdXNlIHRoYXQgYXMgdGhlIGF1dGhvciBzdHJpbmcuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4udXNlTG9nQXV0aG9yCisKKy0tYWRkLWF1dGhvci1mcm9tOjoKKwlXaGVuIGNvbW1pdHRpbmcgdG8gc3ZuIGZyb20gR2l0IChhcyBwYXJ0IG9mICdzZXQtdHJlZScgb3IgJ2Rjb21taXQnCisJb3BlcmF0aW9ucyksIGlmIHRoZSBleGlzdGluZyBsb2cgbWVzc2FnZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSBhCisJYEZyb206YCBvciBgU2lnbmVkLW9mZi1ieTpgIGxpbmUsIGFwcGVuZCBhIGBGcm9tOmAgbGluZSBiYXNlZCBvbiB0aGUKKwlHaXQgY29tbWl0J3MgYXV0aG9yIHN0cmluZy4gIElmIHlvdSB1c2UgdGhpcywgdGhlbiBgLS11c2UtbG9nLWF1dGhvcmAKKwl3aWxsIHJldHJpZXZlIGEgdmFsaWQgYXV0aG9yIHN0cmluZyBmb3IgYWxsIGNvbW1pdHMuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4uYWRkQXV0aG9yRnJvbQorCitBRFZBTkNFRCBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tCisKKy1pPEdJVF9TVk5fSUQ+OjoKKy0taWQgPEdJVF9TVk5fSUQ+OjoKKwlUaGlzIHNldHMgR0lUX1NWTl9JRCAoaW5zdGVhZCBvZiB1c2luZyB0aGUgZW52aXJvbm1lbnQpLiAgVGhpcworCWFsbG93cyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCByZWZuYW1lIHRvIGZldGNoIGZyb20KKwl3aGVuIHRyYWNraW5nIGEgc2luZ2xlIFVSTC4gIFRoZSAnbG9nJyBhbmQgJ2Rjb21taXQnIGNvbW1hbmRzCisJbm8gbG9uZ2VyIHJlcXVpcmUgdGhpcyBzd2l0Y2ggYXMgYW4gYXJndW1lbnQuCisKKy1SPHJlbW90ZSBuYW1lPjo6CistLXN2bi1yZW1vdGUgPHJlbW90ZSBuYW1lPjo6CisJU3BlY2lmeSB0aGUgW3N2bi1yZW1vdGUgIjxyZW1vdGUgbmFtZT4iXSBzZWN0aW9uIHRvIHVzZSwKKwl0aGlzIGFsbG93cyBTVk4gbXVsdGlwbGUgcmVwb3NpdG9yaWVzIHRvIGJlIHRyYWNrZWQuCisJRGVmYXVsdDogInN2biIKKworLS1mb2xsb3ctcGFyZW50OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IGlmIHdlIGFyZSB0cmFja2luZyBicmFuY2hlcyAodXNpbmcKKwlvbmUgb2YgdGhlIHJlcG9zaXRvcnkgbGF5b3V0IG9wdGlvbnMgLS10cnVuaywgLS10YWdzLAorCS0tYnJhbmNoZXMsIC0tc3RkbGF5b3V0KS4gRm9yIGVhY2ggdHJhY2tlZCBicmFuY2gsIHRyeSB0byBmaW5kCisJb3V0IHdoZXJlIGl0cyByZXZpc2lvbiB3YXMgY29waWVkIGZyb20sIGFuZCBzZXQKKwlhIHN1aXRhYmxlIHBhcmVudCBpbiB0aGUgZmlyc3QgR2l0IGNvbW1pdCBmb3IgdGhlIGJyYW5jaC4KKwlUaGlzIGlzIGVzcGVjaWFsbHkgaGVscGZ1bCB3aGVuIHdlJ3JlIHRyYWNraW5nIGEgZGlyZWN0b3J5CisJdGhhdCBoYXMgYmVlbiBtb3ZlZCBhcm91bmQgd2l0aGluIHRoZSByZXBvc2l0b3J5LiAgSWYgdGhpcworCWZlYXR1cmUgaXMgZGlzYWJsZWQsIHRoZSBicmFuY2hlcyBjcmVhdGVkIGJ5ICdnaXQgc3ZuJyB3aWxsIGFsbAorCWJlIGxpbmVhciBhbmQgbm90IHNoYXJlIGFueSBoaXN0b3J5LCBtZWFuaW5nIHRoYXQgdGhlcmUgd2lsbCBiZQorCW5vIGluZm9ybWF0aW9uIG9uIHdoZXJlIGJyYW5jaGVzIHdlcmUgYnJhbmNoZWQgb2ZmIG9yIG1lcmdlZC4KKwlIb3dldmVyLCBmb2xsb3dpbmcgbG9uZy9jb252b2x1dGVkIGhpc3RvcmllcyBjYW4gdGFrZSBhIGxvbmcKKwl0aW1lLCBzbyBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlIG1heSBzcGVlZCB1cCB0aGUgY2xvbmluZworCXByb2Nlc3MuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHVzZQorCS0tbm8tZm9sbG93LXBhcmVudCB0byBkaXNhYmxlIGl0LgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmZvbGxvd3BhcmVudAorCitDT05GSUcgRklMRS1PTkxZIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdm4ubm9NZXRhZGF0YTo6Citzdm4tcmVtb3RlLjxuYW1lPi5ub01ldGFkYXRhOjoKKwlUaGlzIGdldHMgcmlkIG9mIHRoZSAnZ2l0LXN2bi1pZDonIGxpbmVzIGF0IHRoZSBlbmQgb2YgZXZlcnkgY29tbWl0LgorKworVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCBmb3Igb25lLXNob3QgaW1wb3J0cyBhcyAnZ2l0IHN2bicKK3dpbGwgbm90IGJlIGFibGUgdG8gZmV0Y2ggYWdhaW4gd2l0aG91dCBtZXRhZGF0YS4gQWRkaXRpb25hbGx5LAoraWYgeW91IGxvc2UgeW91ciAnJEdJVF9ESVIvc3ZuL1wqKi8ucmV2X21hcC4qJyBmaWxlcywgJ2dpdCBzdm4nIHdpbGwgbm90CitiZSBhYmxlIHRvIHJlYnVpbGQgdGhlbS4KKysKK1RoZSAnZ2l0IHN2biBsb2cnIGNvbW1hbmQgd2lsbCBub3Qgd29yayBvbiByZXBvc2l0b3JpZXMgdXNpbmcKK3RoaXMsIGVpdGhlci4gIFVzaW5nIHRoaXMgY29uZmxpY3RzIHdpdGggdGhlICd1c2VTdm1Qcm9wcycKK29wdGlvbiBmb3IgKGhvcGVmdWxseSkgb2J2aW91cyByZWFzb25zLgorKworVGhpcyBvcHRpb24gaXMgTk9UIHJlY29tbWVuZGVkIGFzIGl0IG1ha2VzIGl0IGRpZmZpY3VsdCB0byB0cmFjayBkb3duCitvbGQgcmVmZXJlbmNlcyB0byBTVk4gcmV2aXNpb24gbnVtYmVycyBpbiBleGlzdGluZyBkb2N1bWVudGF0aW9uLCBidWcKK3JlcG9ydHMsIGFuZCBhcmNoaXZlcy4gIElmIHlvdSBwbGFuIHRvIGV2ZW50dWFsbHkgbWlncmF0ZSBmcm9tIFNWTiB0bworR2l0IGFuZCBhcmUgY2VydGFpbiBhYm91dCBkcm9wcGluZyBTVk4gaGlzdG9yeSwgY29uc2lkZXIKK2h0dHBzOi8vZ2l0aHViLmNvbS9uZXdyZW4vZ2l0LWZpbHRlci1yZXBvW2dpdC1maWx0ZXItcmVwb10gaW5zdGVhZC4KK2ZpbHRlci1yZXBvIGFsc28gYWxsb3dzIHJlZm9ybWF0dGluZyBvZiBtZXRhZGF0YSBmb3IgZWFzZS1vZi1yZWFkaW5nCithbmQgcmV3cml0aW5nIGF1dGhvcnNoaXAgaW5mbyBmb3Igbm9uLSJzdm4uYXV0aG9yc0ZpbGUiIHVzZXJzLgorCitzdm4udXNlU3ZtUHJvcHM6Ogorc3ZuLXJlbW90ZS48bmFtZT4udXNlU3ZtUHJvcHM6OgorCVRoaXMgYWxsb3dzICdnaXQgc3ZuJyB0byByZS1tYXAgcmVwb3NpdG9yeSBVUkxzIGFuZCBVVUlEcyBmcm9tCisJbWlycm9ycyBjcmVhdGVkIHVzaW5nIFNWTjo6TWlycm9yIChvciBzdmspIGZvciBtZXRhZGF0YS4KKysKK0lmIGFuIFNWTiByZXZpc2lvbiBoYXMgYSBwcm9wZXJ0eSwgInN2bTpoZWFkcmV2IiwgaXQgaXMgbGlrZWx5Cit0aGF0IHRoZSByZXZpc2lvbiB3YXMgY3JlYXRlZCBieSBTVk46Ok1pcnJvciAoYWxzbyB1c2VkIGJ5IFNWSykuCitUaGUgcHJvcGVydHkgY29udGFpbnMgYSByZXBvc2l0b3J5IFVVSUQgYW5kIGEgcmV2aXNpb24uICBXZSB3YW50Cit0byBtYWtlIGl0IGxvb2sgbGlrZSB3ZSBhcmUgbWlycm9yaW5nIHRoZSBvcmlnaW5hbCBVUkwsIHNvCitpbnRyb2R1Y2UgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBvcmlnaW5hbCBpZGVudGl0eQorVVJMIGFuZCBVVUlELCBhbmQgdXNlIGl0IHdoZW4gZ2VuZXJhdGluZyBtZXRhZGF0YSBpbiBjb21taXQKK21lc3NhZ2VzLgorCitzdm4udXNlU3Zuc3luY1Byb3BzOjoKK3N2bi1yZW1vdGUuPG5hbWU+LnVzZVN2bnN5bmNwcm9wczo6CisJU2ltaWxhciB0byB0aGUgdXNlU3ZtUHJvcHMgb3B0aW9uOyB0aGlzIGlzIGZvciB1c2VycworCW9mIHRoZSBzdm5zeW5jKDEpIGNvbW1hbmQgZGlzdHJpYnV0ZWQgd2l0aCBTVk4gMS40LnggYW5kCisJbGF0ZXIuCisKK3N2bi1yZW1vdGUuPG5hbWU+LnJld3JpdGVSb290OjoKKwlUaGlzIGFsbG93cyB1c2VycyB0byBjcmVhdGUgcmVwb3NpdG9yaWVzIGZyb20gYWx0ZXJuYXRlCisJVVJMcy4gIEZvciBleGFtcGxlLCBhbiBhZG1pbmlzdHJhdG9yIGNvdWxkIHJ1biAnZ2l0IHN2bicgb24gdGhlCisJc2VydmVyIGxvY2FsbHkgKGFjY2Vzc2luZyB2aWEgZmlsZTovLykgYnV0IHdpc2ggdG8gZGlzdHJpYnV0ZQorCXRoZSByZXBvc2l0b3J5IHdpdGggYSBwdWJsaWMgaHR0cDovLyBvciBzdm46Ly8gVVJMIGluIHRoZQorCW1ldGFkYXRhIHNvIHVzZXJzIG9mIGl0IHdpbGwgc2VlIHRoZSBwdWJsaWMgVVJMLgorCitzdm4tcmVtb3RlLjxuYW1lPi5yZXdyaXRlVVVJRDo6CisJU2ltaWxhciB0byB0aGUgdXNlU3ZtUHJvcHMgb3B0aW9uOyB0aGlzIGlzIGZvciB1c2VycyB3aG8gbmVlZAorCXRvIHJlbWFwIHRoZSBVVUlEIG1hbnVhbGx5LiBUaGlzIG1heSBiZSB1c2VmdWwgaW4gc2l0dWF0aW9ucworCXdoZXJlIHRoZSBvcmlnaW5hbCBVVUlEIGlzIG5vdCBhdmFpbGFibGUgdmlhIGVpdGhlciB1c2VTdm1Qcm9wcworCW9yIHVzZVN2bnN5bmNQcm9wcy4KKworc3ZuLXJlbW90ZS48bmFtZT4ucHVzaHVybDo6CisKKwlTaW1pbGFyIHRvIEdpdCdzIGByZW1vdGUuPG5hbWU+LnB1c2h1cmxgLCB0aGlzIGtleSBpcyBkZXNpZ25lZAorCXRvIGJlIHVzZWQgaW4gY2FzZXMgd2hlcmUgJ3VybCcgcG9pbnRzIHRvIGFuIFNWTiByZXBvc2l0b3J5CisJdmlhIGEgcmVhZC1vbmx5IHRyYW5zcG9ydCwgdG8gcHJvdmlkZSBhbiBhbHRlcm5hdGUgcmVhZC93cml0ZQorCXRyYW5zcG9ydC4gSXQgaXMgYXNzdW1lZCB0aGF0IGJvdGgga2V5cyBwb2ludCB0byB0aGUgc2FtZQorCXJlcG9zaXRvcnkuIFVubGlrZSAnY29tbWl0dXJsJywgJ3B1c2h1cmwnIGlzIGEgYmFzZSBwYXRoLiBJZgorCWVpdGhlciAnY29tbWl0dXJsJyBvciAncHVzaHVybCcgY291bGQgYmUgdXNlZCwgJ2NvbW1pdHVybCcKKwl0YWtlcyBwcmVjZWRlbmNlLgorCitzdm4uYnJva2VuU3ltbGlua1dvcmthcm91bmQ6OgorCVRoaXMgZGlzYWJsZXMgcG90ZW50aWFsbHkgZXhwZW5zaXZlIGNoZWNrcyB0byB3b3JrYXJvdW5kCisJYnJva2VuIHN5bWxpbmtzIGNoZWNrZWQgaW50byBTVk4gYnkgYnJva2VuIGNsaWVudHMuICBTZXQgdGhpcworCW9wdGlvbiB0byAiZmFsc2UiIGlmIHlvdSB0cmFjayBhIFNWTiByZXBvc2l0b3J5IHdpdGggbWFueQorCWVtcHR5IGJsb2JzIHRoYXQgYXJlIG5vdCBzeW1saW5rcy4gIFRoaXMgb3B0aW9uIG1heSBiZSBjaGFuZ2VkCisJd2hpbGUgJ2dpdCBzdm4nIGlzIHJ1bm5pbmcgYW5kIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0CisJcmV2aXNpb24gZmV0Y2hlZC4gIElmIHVuc2V0LCAnZ2l0IHN2bicgYXNzdW1lcyB0aGlzIG9wdGlvbiB0bworCWJlICJ0cnVlIi4KKworc3ZuLnBhdGhuYW1lZW5jb2Rpbmc6OgorCVRoaXMgaW5zdHJ1Y3RzIGdpdCBzdm4gdG8gcmVjb2RlIHBhdGhuYW1lcyB0byBhIGdpdmVuIGVuY29kaW5nLgorCUl0IGNhbiBiZSB1c2VkIGJ5IHdpbmRvd3MgdXNlcnMgYW5kIGJ5IHRob3NlIHdobyB3b3JrIGluIG5vbi11dGY4CisJbG9jYWxlcyB0byBhdm9pZCBjb3JydXB0ZWQgZmlsZSBuYW1lcyB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorCVZhbGlkIGVuY29kaW5ncyBhcmUgdGhlIG9uZXMgc3VwcG9ydGVkIGJ5IFBlcmwncyBFbmNvZGUgbW9kdWxlLgorCitzdm4tcmVtb3RlLjxuYW1lPi5hdXRvbWtkaXJzOjoKKwlOb3JtYWxseSwgdGhlICJnaXQgc3ZuIGNsb25lIiBhbmQgImdpdCBzdm4gcmViYXNlIiBjb21tYW5kcworCWF0dGVtcHQgdG8gcmVjcmVhdGUgZW1wdHkgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlCisJU3VidmVyc2lvbiByZXBvc2l0b3J5LiAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvICJmYWxzZSIsIHRoZW4KKwllbXB0eSBkaXJlY3RvcmllcyB3aWxsIG9ubHkgYmUgY3JlYXRlZCBpZiB0aGUgImdpdCBzdm4gbWtkaXJzIgorCWNvbW1hbmQgaXMgcnVuIGV4cGxpY2l0bHkuICBJZiB1bnNldCwgJ2dpdCBzdm4nIGFzc3VtZXMgdGhpcworCW9wdGlvbiB0byBiZSAidHJ1ZSIuCisKK1NpbmNlIHRoZSBub01ldGFkYXRhLCByZXdyaXRlUm9vdCwgcmV3cml0ZVVVSUQsIHVzZVN2bnN5bmNQcm9wcyBhbmQgdXNlU3ZtUHJvcHMKK29wdGlvbnMgYWxsIGFmZmVjdCB0aGUgbWV0YWRhdGEgZ2VuZXJhdGVkIGFuZCB1c2VkIGJ5ICdnaXQgc3ZuJzsgdGhleQorKm11c3QqIGJlIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGJlZm9yZSBhbnkgaGlzdG9yeSBpcyBpbXBvcnRlZAorYW5kIHRoZXNlIHNldHRpbmdzIHNob3VsZCBuZXZlciBiZSBjaGFuZ2VkIG9uY2UgdGhleSBhcmUgc2V0LgorCitBZGRpdGlvbmFsbHksIG9ubHkgb25lIG9mIHRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgcGVyIHN2bi1yZW1vdGUKK3NlY3Rpb24gYmVjYXVzZSB0aGV5IGFmZmVjdCB0aGUgJ2dpdC1zdm4taWQ6JyBtZXRhZGF0YSBsaW5lLCBleGNlcHQKK2ZvciByZXdyaXRlUm9vdCBhbmQgcmV3cml0ZVVVSUQgd2hpY2ggY2FuIGJlIHVzZWQgdG9nZXRoZXIuCisKKworQkFTSUMgRVhBTVBMRVMKKy0tLS0tLS0tLS0tLS0tCisKK1RyYWNraW5nIGFuZCBjb250cmlidXRpbmcgdG8gdGhlIHRydW5rIG9mIGEgU3VidmVyc2lvbi1tYW5hZ2VkIHByb2plY3QKKyhpZ25vcmluZyB0YWdzIGFuZCBicmFuY2hlcyk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDbG9uZSBhIHJlcG8gKGxpa2UgZ2l0IGNsb25lKToKKwlnaXQgc3ZuIGNsb25lIGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdC90cnVuaworIyBFbnRlciB0aGUgbmV3bHkgY2xvbmVkIGRpcmVjdG9yeToKKwljZCB0cnVuaworIyBZb3Ugc2hvdWxkIGJlIG9uIG1hc3RlciBicmFuY2gsIGRvdWJsZS1jaGVjayB3aXRoICdnaXQgYnJhbmNoJworCWdpdCBicmFuY2gKKyMgRG8gc29tZSB3b3JrIGFuZCBjb21taXQgbG9jYWxseSB0byBHaXQ6CisJZ2l0IGNvbW1pdCAuLi4KKyMgU29tZXRoaW5nIGlzIGNvbW1pdHRlZCB0byBTVk4sIHJlYmFzZSB5b3VyIGxvY2FsIGNoYW5nZXMgYWdhaW5zdCB0aGUKKyMgbGF0ZXN0IGNoYW5nZXMgaW4gU1ZOOgorCWdpdCBzdm4gcmViYXNlCisjIE5vdyBjb21taXQgeW91ciBjaGFuZ2VzICh0aGF0IHdlcmUgY29tbWl0dGVkIHByZXZpb3VzbHkgdXNpbmcgR2l0KSB0byBTVk4sCisjIGFzIHdlbGwgYXMgYXV0b21hdGljYWxseSB1cGRhdGluZyB5b3VyIHdvcmtpbmcgSEVBRDoKKwlnaXQgc3ZuIGRjb21taXQKKyMgQXBwZW5kIHN2bjppZ25vcmUgc2V0dGluZ3MgdG8gdGhlIGRlZmF1bHQgR2l0IGV4Y2x1ZGUgZmlsZToKKwlnaXQgc3ZuIHNob3ctaWdub3JlID4+IC5naXQvaW5mby9leGNsdWRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVHJhY2tpbmcgYW5kIGNvbnRyaWJ1dGluZyB0byBhbiBlbnRpcmUgU3VidmVyc2lvbi1tYW5hZ2VkIHByb2plY3QKKyhjb21wbGV0ZSB3aXRoIGEgdHJ1bmssIHRhZ3MgYW5kIGJyYW5jaGVzKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENsb25lIGEgcmVwbyB3aXRoIHN0YW5kYXJkIFNWTiBkaXJlY3RvcnkgbGF5b3V0IChsaWtlIGdpdCBjbG9uZSk6CisJZ2l0IHN2biBjbG9uZSBodHRwOi8vc3ZuLmV4YW1wbGUuY29tL3Byb2plY3QgLS1zdGRsYXlvdXQgLS1wcmVmaXggc3ZuLworIyBPciwgaWYgdGhlIHJlcG8gdXNlcyBhIG5vbi1zdGFuZGFyZCBkaXJlY3RvcnkgbGF5b3V0OgorCWdpdCBzdm4gY2xvbmUgaHR0cDovL3N2bi5leGFtcGxlLmNvbS9wcm9qZWN0IC1UIHRyIC1iIGJyYW5jaCAtdCB0YWcgLS1wcmVmaXggc3ZuLworIyBWaWV3IGFsbCBicmFuY2hlcyBhbmQgdGFncyB5b3UgaGF2ZSBjbG9uZWQ6CisJZ2l0IGJyYW5jaCAtcgorIyBDcmVhdGUgYSBuZXcgYnJhbmNoIGluIFNWTgorCWdpdCBzdm4gYnJhbmNoIHdhbGRvCisjIFJlc2V0IHlvdXIgbWFzdGVyIHRvIHRydW5rIChvciBhbnkgb3RoZXIgYnJhbmNoLCByZXBsYWNpbmcgJ3RydW5rJworIyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBuYW1lKToKKwlnaXQgcmVzZXQgLS1oYXJkIHN2bi90cnVuaworIyBZb3UgbWF5IG9ubHkgZGNvbW1pdCB0byBvbmUgYnJhbmNoL3RhZy90cnVuayBhdCBhIHRpbWUuICBUaGUgdXNhZ2UKKyMgb2YgZGNvbW1pdC9yZWJhc2Uvc2hvdy1pZ25vcmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGFib3ZlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbml0aWFsICdnaXQgc3ZuIGNsb25lJyBjYW4gYmUgcXVpdGUgdGltZS1jb25zdW1pbmcKKyhlc3BlY2lhbGx5IGZvciBsYXJnZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcmllcykuIElmIG11bHRpcGxlCitwZW9wbGUgKG9yIG9uZSBwZXJzb24gd2l0aCBtdWx0aXBsZSBtYWNoaW5lcykgd2FudCB0byB1c2UKKydnaXQgc3ZuJyB0byBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIFN1YnZlcnNpb24gcmVwb3NpdG9yeSwgeW91IGNhbgorZG8gdGhlIGluaXRpYWwgJ2dpdCBzdm4gY2xvbmUnIHRvIGEgcmVwb3NpdG9yeSBvbiBhIHNlcnZlciBhbmQKK2hhdmUgZWFjaCBwZXJzb24gY2xvbmUgdGhhdCByZXBvc2l0b3J5IHdpdGggJ2dpdCBjbG9uZSc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEbyB0aGUgaW5pdGlhbCBpbXBvcnQgb24gYSBzZXJ2ZXIKKwlzc2ggc2VydmVyICJjZCAvcHViICYmIGdpdCBzdm4gY2xvbmUgaHR0cDovL3N2bi5leGFtcGxlLmNvbS9wcm9qZWN0IFtvcHRpb25zLi4uXSIKKyMgQ2xvbmUgbG9jYWxseSAtIG1ha2Ugc3VyZSB0aGUgcmVmcy9yZW1vdGVzLyBzcGFjZSBtYXRjaGVzIHRoZSBzZXJ2ZXIKKwlta2RpciBwcm9qZWN0CisJY2QgcHJvamVjdAorCWdpdCBpbml0CisJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIHNlcnZlcjovcHViL3Byb2plY3QKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgcmVtb3RlLm9yaWdpbi5mZXRjaCAnK3JlZnMvcmVtb3Rlcy8qOnJlZnMvcmVtb3Rlcy8qJworCWdpdCBmZXRjaAorIyBQcmV2ZW50IGZldGNoL3B1bGwgZnJvbSByZW1vdGUgR2l0IHNlcnZlciBpbiB0aGUgZnV0dXJlLAorIyB3ZSBvbmx5IHdhbnQgdG8gdXNlIGdpdCBzdm4gZm9yIGZ1dHVyZSB1cGRhdGVzCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHJlbW90ZS5vcmlnaW4KKyMgQ3JlYXRlIGEgbG9jYWwgYnJhbmNoIGZyb20gb25lIG9mIHRoZSBicmFuY2hlcyBqdXN0IGZldGNoZWQKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIEZFVENIX0hFQUQKKyMgSW5pdGlhbGl6ZSAnZ2l0IHN2bicgbG9jYWxseSAoYmUgc3VyZSB0byB1c2UgdGhlIHNhbWUgVVJMIGFuZAorIyAtLXN0ZGxheW91dC8tVC8tYi8tdC8tLXByZWZpeCBvcHRpb25zIGFzIHdlcmUgdXNlZCBvbiBzZXJ2ZXIpCisJZ2l0IHN2biBpbml0IGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdCBbb3B0aW9ucy4uLl0KKyMgUHVsbCB0aGUgbGF0ZXN0IGNoYW5nZXMgZnJvbSBTdWJ2ZXJzaW9uCisJZ2l0IHN2biByZWJhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSRUJBU0UgVlMuIFBVTEwvTUVSR0UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJlZmVyIHRvIHVzZSAnZ2l0IHN2biByZWJhc2UnIG9yICdnaXQgcmViYXNlJywgcmF0aGVyIHRoYW4KKydnaXQgcHVsbCcgb3IgJ2dpdCBtZXJnZScgdG8gc3luY2hyb25pemUgdW5pbnRlZ3JhdGVkIGNvbW1pdHMgd2l0aCBhICdnaXQgc3ZuJworYnJhbmNoLiBEb2luZyBzbyB3aWxsIGtlZXAgdGhlIGhpc3Rvcnkgb2YgdW5pbnRlZ3JhdGVkIGNvbW1pdHMgbGluZWFyIHdpdGgKK3Jlc3BlY3QgdG8gdGhlIHVwc3RyZWFtIFNWTiByZXBvc2l0b3J5IGFuZCBhbGxvdyB0aGUgdXNlIG9mIHRoZSBwcmVmZXJyZWQKKydnaXQgc3ZuIGRjb21taXQnIHN1YmNvbW1hbmQgdG8gcHVzaCB1bmludGVncmF0ZWQgY29tbWl0cyBiYWNrIGludG8gU1ZOLgorCitPcmlnaW5hbGx5LCAnZ2l0IHN2bicgcmVjb21tZW5kZWQgdGhhdCBkZXZlbG9wZXJzIHB1bGxlZCBvciBtZXJnZWQgZnJvbQordGhlICdnaXQgc3ZuJyBicmFuY2guICBUaGlzIHdhcyBiZWNhdXNlIHRoZSBhdXRob3IgZmF2b3JlZAorYGdpdCBzdm4gc2V0LXRyZWUgQmAgdG8gY29tbWl0IGEgc2luZ2xlIGhlYWQgcmF0aGVyIHRoYW4gdGhlCitgZ2l0IHN2biBzZXQtdHJlZSBBLi5CYCBub3RhdGlvbiB0byBjb21taXQgbXVsdGlwbGUgY29tbWl0cy4gVXNlIG9mCisnZ2l0IHB1bGwnIG9yICdnaXQgbWVyZ2UnIHdpdGggYGdpdCBzdm4gc2V0LXRyZWUgQS4uQmAgd2lsbCBjYXVzZSBub24tbGluZWFyCitoaXN0b3J5IHRvIGJlIGZsYXR0ZW5lZCB3aGVuIGNvbW1pdHRpbmcgaW50byBTVk4gYW5kIHRoaXMgY2FuIGxlYWQgdG8gbWVyZ2UKK2NvbW1pdHMgdW5leHBlY3RlZGx5IHJldmVyc2luZyBwcmV2aW91cyBjb21taXRzIGluIFNWTi4KKworTUVSR0UgVFJBQ0tJTkcKKy0tLS0tLS0tLS0tLS0tCitXaGlsZSAnZ2l0IHN2bicgY2FuIHRyYWNrCitjb3B5IGhpc3RvcnkgKGluY2x1ZGluZyBicmFuY2hlcyBhbmQgdGFncykgZm9yIHJlcG9zaXRvcmllcyBhZG9wdGluZyBhCitzdGFuZGFyZCBsYXlvdXQsIGl0IGNhbm5vdCB5ZXQgcmVwcmVzZW50IG1lcmdlIGhpc3RvcnkgdGhhdCBoYXBwZW5lZAoraW5zaWRlIGdpdCBiYWNrIHVwc3RyZWFtIHRvIFNWTiB1c2Vycy4gIFRoZXJlZm9yZSBpdCBpcyBhZHZpc2VkIHRoYXQKK3VzZXJzIGtlZXAgaGlzdG9yeSBhcyBsaW5lYXIgYXMgcG9zc2libGUgaW5zaWRlIEdpdCB0byBlYXNlCitjb21wYXRpYmlsaXR5IHdpdGggU1ZOIChzZWUgdGhlIENBVkVBVFMgc2VjdGlvbiBiZWxvdykuCisKK0hBTkRMSU5HIE9GIFNWTiBCUkFOQ0hFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiAnZ2l0IHN2bicgaXMgY29uZmlndXJlZCB0byBmZXRjaCBicmFuY2hlcyAoYW5kIC0tZm9sbG93LWJyYW5jaGVzCitpcyBpbiBlZmZlY3QpLCBpdCBzb21ldGltZXMgY3JlYXRlcyBtdWx0aXBsZSBHaXQgYnJhbmNoZXMgZm9yIG9uZQorU1ZOIGJyYW5jaCwgd2hlcmUgdGhlIGFkZGl0aW9uYWwgYnJhbmNoZXMgaGF2ZSBuYW1lcyBvZiB0aGUgZm9ybQorJ2JyYW5jaG5hbWVAbm5uJyAod2l0aCBubm4gYW4gU1ZOIHJldmlzaW9uIG51bWJlcikuICBUaGVzZSBhZGRpdGlvbmFsCiticmFuY2hlcyBhcmUgY3JlYXRlZCBpZiAnZ2l0IHN2bicgY2Fubm90IGZpbmQgYSBwYXJlbnQgY29tbWl0IGZvciB0aGUKK2ZpcnN0IGNvbW1pdCBpbiBhbiBTVk4gYnJhbmNoLCB0byBjb25uZWN0IHRoZSBicmFuY2ggdG8gdGhlIGhpc3Rvcnkgb2YKK3RoZSBvdGhlciBicmFuY2hlcy4KKworTm9ybWFsbHksIHRoZSBmaXJzdCBjb21taXQgaW4gYW4gU1ZOIGJyYW5jaCBjb25zaXN0cworb2YgYSBjb3B5IG9wZXJhdGlvbi4gJ2dpdCBzdm4nIHdpbGwgcmVhZCB0aGlzIGNvbW1pdCB0byBnZXQgdGhlIFNWTgorcmV2aXNpb24gdGhlIGJyYW5jaCB3YXMgY3JlYXRlZCBmcm9tLiBJdCB3aWxsIHRoZW4gdHJ5IHRvIGZpbmQgdGhlCitHaXQgY29tbWl0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhpcyBTVk4gcmV2aXNpb24sIGFuZCB1c2UgdGhhdCBhcyB0aGUKK3BhcmVudCBvZiB0aGUgYnJhbmNoLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIG5vIHN1aXRhYmxlCitHaXQgY29tbWl0IHRvIHNlcnZlIGFzIHBhcmVudC4gIFRoaXMgd2lsbCBoYXBwZW4sIGFtb25nIG90aGVyIHJlYXNvbnMsCitpZiB0aGUgU1ZOIGJyYW5jaCBpcyBhIGNvcHkgb2YgYSByZXZpc2lvbiB0aGF0IHdhcyBub3QgZmV0Y2hlZCBieSAnZ2l0Citzdm4nIChlLmcuIGJlY2F1c2UgaXQgaXMgYW4gb2xkIHJldmlzaW9uIHRoYXQgd2FzIHNraXBwZWQgd2l0aAorYC0tcmV2aXNpb25gKSwgb3IgaWYgaW4gU1ZOIGEgZGlyZWN0b3J5IHdhcyBjb3BpZWQgdGhhdCBpcyBub3QgdHJhY2tlZAorYnkgJ2dpdCBzdm4nIChzdWNoIGFzIGEgYnJhbmNoIHRoYXQgaXMgbm90IHRyYWNrZWQgYXQgYWxsLCBvciBhCitzdWJkaXJlY3Rvcnkgb2YgYSB0cmFja2VkIGJyYW5jaCkuIEluIHRoZXNlIGNhc2VzLCAnZ2l0IHN2bicgd2lsbCBzdGlsbAorY3JlYXRlIGEgR2l0IGJyYW5jaCwgYnV0IGluc3RlYWQgb2YgdXNpbmcgYW4gZXhpc3RpbmcgR2l0IGNvbW1pdCBhcyB0aGUKK3BhcmVudCBvZiB0aGUgYnJhbmNoLCBpdCB3aWxsIHJlYWQgdGhlIFNWTiBoaXN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgdGhlCiticmFuY2ggd2FzIGNvcGllZCBmcm9tIGFuZCBjcmVhdGUgYXBwcm9wcmlhdGUgR2l0IGNvbW1pdHMuICBUaGlzIGlzCitpbmRpY2F0ZWQgYnkgdGhlIG1lc3NhZ2UgIkluaXRpYWxpemluZyBwYXJlbnQ6IDxicmFuY2huYW1lPiIuCisKK0FkZGl0aW9uYWxseSwgaXQgd2lsbCBjcmVhdGUgYSBzcGVjaWFsIGJyYW5jaCBuYW1lZAorJzxicmFuY2huYW1lPkA8U1ZOLVJldmlzaW9uPicsIHdoZXJlIDxTVk4tUmV2aXNpb24+IGlzIHRoZSBTVk4gcmV2aXNpb24KK251bWJlciB0aGUgYnJhbmNoIHdhcyBjb3BpZWQgZnJvbS4gIFRoaXMgYnJhbmNoIHdpbGwgcG9pbnQgdG8gdGhlIG5ld2x5CitjcmVhdGVkIHBhcmVudCBjb21taXQgb2YgdGhlIGJyYW5jaC4gIElmIGluIFNWTiB0aGUgYnJhbmNoIHdhcyBkZWxldGVkCithbmQgbGF0ZXIgcmVjcmVhdGVkIGZyb20gYSBkaWZmZXJlbnQgdmVyc2lvbiwgdGhlcmUgd2lsbCBiZSBtdWx0aXBsZQorc3VjaCBicmFuY2hlcyB3aXRoIGFuICdAJy4KKworTm90ZSB0aGF0IHRoaXMgbWF5IG1lYW4gdGhhdCBtdWx0aXBsZSBHaXQgY29tbWl0cyBhcmUgY3JlYXRlZCBmb3IgYQorc2luZ2xlIFNWTiByZXZpc2lvbi4KKworQW4gZXhhbXBsZTogaW4gYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBhIHN0YW5kYXJkCit0cnVuay90YWdzL2JyYW5jaGVzIGxheW91dCwgYSBkaXJlY3RvcnkgdHJ1bmsvc3ViIGlzIGNyZWF0ZWQgaW4gci4xMDAuCitJbiByLjIwMCwgdHJ1bmsvc3ViIGlzIGJyYW5jaGVkIGJ5IGNvcHlpbmcgaXQgdG8gYnJhbmNoZXMvLiAnZ2l0IHN2bgorY2xvbmUgLXMnIHdpbGwgdGhlbiBjcmVhdGUgYSBicmFuY2ggJ3N1YicuIEl0IHdpbGwgYWxzbyBjcmVhdGUgbmV3IEdpdAorY29tbWl0cyBmb3Igci4xMDAgdGhyb3VnaCByLjE5OSBhbmQgdXNlIHRoZXNlIGFzIHRoZSBoaXN0b3J5IG9mIGJyYW5jaAorJ3N1YicuIFRodXMgdGhlcmUgd2lsbCBiZSB0d28gR2l0IGNvbW1pdHMgZm9yIGVhY2ggcmV2aXNpb24gZnJvbSByLjEwMAordG8gci4xOTkgKG9uZSBjb250YWluaW5nIHRydW5rLywgb25lIGNvbnRhaW5pbmcgdHJ1bmsvc3ViLykuIEZpbmFsbHksCitpdCB3aWxsIGNyZWF0ZSBhIGJyYW5jaCAnc3ViQDIwMCcgcG9pbnRpbmcgdG8gdGhlIG5ldyBwYXJlbnQgY29tbWl0IG9mCiticmFuY2ggJ3N1YicgKGkuZS4gdGhlIGNvbW1pdCBmb3Igci4yMDAgYW5kIHRydW5rL3N1Yi8pLgorCitDQVZFQVRTCistLS0tLS0tCisKK0ZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5IGFuZCBpbnRlcm9wZXJhdGluZyB3aXRoIFN1YnZlcnNpb24sCitpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCAnZ2l0IHN2bicgdXNlcnMgY2xvbmUsIGZldGNoIGFuZCBkY29tbWl0CitkaXJlY3RseSBmcm9tIHRoZSBTVk4gc2VydmVyLCBhbmQgYXZvaWQgYWxsICdnaXQgY2xvbmUnLydwdWxsJy8nbWVyZ2UnLydwdXNoJworb3BlcmF0aW9ucyBiZXR3ZWVuIEdpdCByZXBvc2l0b3JpZXMgYW5kIGJyYW5jaGVzLiAgVGhlIHJlY29tbWVuZGVkCittZXRob2Qgb2YgZXhjaGFuZ2luZyBjb2RlIGJldHdlZW4gR2l0IGJyYW5jaGVzIGFuZCB1c2VycyBpcworJ2dpdCBmb3JtYXQtcGF0Y2gnIGFuZCAnZ2l0IGFtJywgb3IganVzdCAnZGNvbW1pdCdpbmcgdG8gdGhlIFNWTiByZXBvc2l0b3J5LgorCitSdW5uaW5nICdnaXQgbWVyZ2UnIG9yICdnaXQgcHVsbCcgaXMgTk9UIHJlY29tbWVuZGVkIG9uIGEgYnJhbmNoIHlvdQorcGxhbiB0byAnZGNvbW1pdCcgZnJvbSBiZWNhdXNlIFN1YnZlcnNpb24gdXNlcnMgY2Fubm90IHNlZSBhbnkKK21lcmdlcyB5b3UndmUgbWFkZS4gIEZ1cnRoZXJtb3JlLCBpZiB5b3UgbWVyZ2Ugb3IgcHVsbCBmcm9tIGEgR2l0IGJyYW5jaAordGhhdCBpcyBhIG1pcnJvciBvZiBhbiBTVk4gYnJhbmNoLCAnZGNvbW1pdCcgbWF5IGNvbW1pdCB0byB0aGUgd3JvbmcKK2JyYW5jaC4KKworSWYgeW91IGRvIG1lcmdlLCBub3RlIHRoZSBmb2xsb3dpbmcgcnVsZTogJ2dpdCBzdm4gZGNvbW1pdCcgd2lsbAorYXR0ZW1wdCB0byBjb21taXQgb24gdG9wIG9mIHRoZSBTVk4gY29tbWl0IG5hbWVkIGluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBsb2cgLS1ncmVwPV5naXQtc3ZuLWlkOiAtLWZpcnN0LXBhcmVudCAtMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgJ211c3QnIHRoZXJlZm9yZSBlbnN1cmUgdGhhdCB0aGUgbW9zdCByZWNlbnQgY29tbWl0IG9mIHRoZSBicmFuY2gKK3lvdSB3YW50IHRvIGRjb21taXQgdG8gaXMgdGhlICdmaXJzdCcgcGFyZW50IG9mIHRoZSBtZXJnZS4gIENoYW9zIHdpbGwKK2Vuc3VlIG90aGVyd2lzZSwgZXNwZWNpYWxseSBpZiB0aGUgZmlyc3QgcGFyZW50IGlzIGFuIG9sZGVyIGNvbW1pdCBvbgordGhlIHNhbWUgU1ZOIGJyYW5jaC4KKworJ2dpdCBjbG9uZScgZG9lcyBub3QgY2xvbmUgYnJhbmNoZXMgdW5kZXIgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IG9yCithbnkgJ2dpdCBzdm4nIG1ldGFkYXRhLCBvciBjb25maWcuICBTbyByZXBvc2l0b3JpZXMgY3JlYXRlZCBhbmQgbWFuYWdlZCB3aXRoCit1c2luZyAnZ2l0IHN2bicgc2hvdWxkIHVzZSAncnN5bmMnIGZvciBjbG9uaW5nLCBpZiBjbG9uaW5nIGlzIHRvIGJlIGRvbmUKK2F0IGFsbC4KKworU2luY2UgJ2Rjb21taXQnIHVzZXMgcmViYXNlIGludGVybmFsbHksIGFueSBHaXQgYnJhbmNoZXMgeW91ICdnaXQgcHVzaCcgdG8KK2JlZm9yZSAnZGNvbW1pdCcgb24gd2lsbCByZXF1aXJlIGZvcmNpbmcgYW4gb3ZlcndyaXRlIG9mIHRoZSBleGlzdGluZyByZWYKK29uIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4gIFRoaXMgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYmFkIHByYWN0aWNlLAorc2VlIHRoZSBsaW5rZ2l0OmdpdC1wdXNoWzFdIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKK0RvIG5vdCB1c2UgdGhlIC0tYW1lbmQgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBvbiBhIGNoYW5nZSB5b3UndmUKK2FscmVhZHkgZGNvbW1pdHRlZC4gIEl0IGlzIGNvbnNpZGVyZWQgYmFkIHByYWN0aWNlIHRvIC0tYW1lbmQgY29tbWl0cworeW91J3ZlIGFscmVhZHkgcHVzaGVkIHRvIGEgcmVtb3RlIHJlcG9zaXRvcnkgZm9yIG90aGVyIHVzZXJzLCBhbmQKK2Rjb21taXQgd2l0aCBTVk4gaXMgYW5hbG9nb3VzIHRvIHRoYXQuCisKK1doZW4gY2xvbmluZyBhbiBTVk4gcmVwb3NpdG9yeSwgaWYgbm9uZSBvZiB0aGUgb3B0aW9ucyBmb3IgZGVzY3JpYmluZwordGhlIHJlcG9zaXRvcnkgbGF5b3V0IGlzIHVzZWQgKC0tdHJ1bmssIC0tdGFncywgLS1icmFuY2hlcywKKy0tc3RkbGF5b3V0KSwgJ2dpdCBzdm4gY2xvbmUnIHdpbGwgY3JlYXRlIGEgR2l0IHJlcG9zaXRvcnkgd2l0aAorY29tcGxldGVseSBsaW5lYXIgaGlzdG9yeSwgd2hlcmUgYnJhbmNoZXMgYW5kIHRhZ3MgYXBwZWFyIGFzIHNlcGFyYXRlCitkaXJlY3RvcmllcyBpbiB0aGUgd29ya2luZyBjb3B5LiAgV2hpbGUgdGhpcyBpcyB0aGUgZWFzaWVzdCB3YXkgdG8gZ2V0IGEKK2NvcHkgb2YgYSBjb21wbGV0ZSByZXBvc2l0b3J5LCBmb3IgcHJvamVjdHMgd2l0aCBtYW55IGJyYW5jaGVzIGl0IHdpbGwKK2xlYWQgdG8gYSB3b3JraW5nIGNvcHkgbWFueSB0aW1lcyBsYXJnZXIgdGhhbiBqdXN0IHRoZSB0cnVuay4gVGh1cyBmb3IKK3Byb2plY3RzIHVzaW5nIHRoZSBzdGFuZGFyZCBkaXJlY3Rvcnkgc3RydWN0dXJlICh0cnVuay9icmFuY2hlcy90YWdzKSwKK2l0IGlzIHJlY29tbWVuZGVkIHRvIGNsb25lIHdpdGggb3B0aW9uIGAtLXN0ZGxheW91dGAuIElmIHRoZSBwcm9qZWN0Cit1c2VzIGEgbm9uLXN0YW5kYXJkIHN0cnVjdHVyZSwgYW5kL29yIGlmIGJyYW5jaGVzIGFuZCB0YWdzIGFyZSBub3QKK3JlcXVpcmVkLCBpdCBpcyBlYXNpZXN0IHRvIG9ubHkgY2xvbmUgb25lIGRpcmVjdG9yeSAodHlwaWNhbGx5IHRydW5rKSwKK3dpdGhvdXQgZ2l2aW5nIGFueSByZXBvc2l0b3J5IGxheW91dCBvcHRpb25zLiAgSWYgdGhlIGZ1bGwgaGlzdG9yeSB3aXRoCiticmFuY2hlcyBhbmQgdGFncyBpcyByZXF1aXJlZCwgdGhlIG9wdGlvbnMgYC0tdHJ1bmtgIC8gYC0tYnJhbmNoZXNgIC8KK2AtLXRhZ3NgIG11c3QgYmUgdXNlZC4KKworV2hlbiB1c2luZyBtdWx0aXBsZSAtLWJyYW5jaGVzIG9yIC0tdGFncywgJ2dpdCBzdm4nIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkKK2hhbmRsZSBuYW1lIGNvbGxpc2lvbnMgKGZvciBleGFtcGxlLCBpZiB0d28gYnJhbmNoZXMgZnJvbSBkaWZmZXJlbnQgcGF0aHMgaGF2ZQordGhlIHNhbWUgbmFtZSwgb3IgaWYgYSBicmFuY2ggYW5kIGEgdGFnIGhhdmUgdGhlIHNhbWUgbmFtZSkuICBJbiB0aGVzZSBjYXNlcywKK3VzZSAnaW5pdCcgdG8gc2V0IHVwIHlvdXIgR2l0IHJlcG9zaXRvcnkgdGhlbiwgYmVmb3JlIHlvdXIgZmlyc3QgJ2ZldGNoJywgZWRpdAordGhlICRHSVRfRElSL2NvbmZpZyBmaWxlIHNvIHRoYXQgdGhlIGJyYW5jaGVzIGFuZCB0YWdzIGFyZSBhc3NvY2lhdGVkCit3aXRoIGRpZmZlcmVudCBuYW1lIHNwYWNlcy4gIEZvciBleGFtcGxlOgorCisJYnJhbmNoZXMgPSBzdGFibGUvKjpyZWZzL3JlbW90ZXMvc3ZuL3N0YWJsZS8qCisJYnJhbmNoZXMgPSBkZWJ1Zy8qOnJlZnMvcmVtb3Rlcy9zdm4vZGVidWcvKgorCitCVUdTCistLS0tCisKK1dlIGlnbm9yZSBhbGwgU1ZOIHByb3BlcnRpZXMgZXhjZXB0IHN2bjpleGVjdXRhYmxlLiAgQW55IHVuaGFuZGxlZAorcHJvcGVydGllcyBhcmUgbG9nZ2VkIHRvICRHSVRfRElSL3N2bi88cmVmbmFtZT4vdW5oYW5kbGVkLmxvZworCitSZW5hbWVkIGFuZCBjb3BpZWQgZGlyZWN0b3JpZXMgYXJlIG5vdCBkZXRlY3RlZCBieSBHaXQgYW5kIGhlbmNlIG5vdAordHJhY2tlZCB3aGVuIGNvbW1pdHRpbmcgdG8gU1ZOLiAgSSBkbyBub3QgcGxhbiBvbiBhZGRpbmcgc3VwcG9ydCBmb3IKK3RoaXMgYXMgaXQncyBxdWl0ZSBkaWZmaWN1bHQgYW5kIHRpbWUtY29uc3VtaW5nIHRvIGdldCB3b3JraW5nIGZvciBhbGwKK3RoZSBwb3NzaWJsZSBjb3JuZXIgY2FzZXMgKEdpdCBkb2Vzbid0IGRvIGl0LCBlaXRoZXIpLiAgQ29tbWl0dGluZworcmVuYW1lZCBhbmQgY29waWVkIGZpbGVzIGlzIGZ1bGx5IHN1cHBvcnRlZCBpZiB0aGV5J3JlIHNpbWlsYXIgZW5vdWdoCitmb3IgR2l0IHRvIGRldGVjdCB0aGVtLgorCitJbiBTVk4sIGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggZGlzY291cmFnZWQpIHRvIGNvbW1pdCBjaGFuZ2VzIHRvIGEgdGFnCisoYmVjYXVzZSBhIHRhZyBpcyBqdXN0IGEgZGlyZWN0b3J5IGNvcHksIHRodXMgdGVjaG5pY2FsbHkgdGhlIHNhbWUgYXMgYQorYnJhbmNoKS4gV2hlbiBjbG9uaW5nIGFuIFNWTiByZXBvc2l0b3J5LCAnZ2l0IHN2bicgY2Fubm90IGtub3cgaWYgc3VjaCBhCitjb21taXQgdG8gYSB0YWcgd2lsbCBoYXBwZW4gaW4gdGhlIGZ1dHVyZS4gVGh1cyBpdCBhY3RzIGNvbnNlcnZhdGl2ZWx5CithbmQgaW1wb3J0cyBhbGwgU1ZOIHRhZ3MgYXMgYnJhbmNoZXMsIHByZWZpeGluZyB0aGUgdGFnIG5hbWUgd2l0aCAndGFncy8nLgorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKKydnaXQgc3ZuJyBzdG9yZXMgW3N2bi1yZW1vdGVdIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlCityZXBvc2l0b3J5ICRHSVRfRElSL2NvbmZpZyBmaWxlLiAgSXQgaXMgc2ltaWxhciB0aGUgY29yZSBHaXQKK1tyZW1vdGVdIHNlY3Rpb25zIGV4Y2VwdCAnZmV0Y2gnIGtleXMgZG8gbm90IGFjY2VwdCBnbG9iCithcmd1bWVudHM7IGJ1dCB0aGV5IGFyZSBpbnN0ZWFkIGhhbmRsZWQgYnkgdGhlICdicmFuY2hlcycKK2FuZCAndGFncycga2V5cy4gIFNpbmNlIHNvbWUgU1ZOIHJlcG9zaXRvcmllcyBhcmUgb2RkbHkKK2NvbmZpZ3VyZWQgd2l0aCBtdWx0aXBsZSBwcm9qZWN0cyBnbG9iIGV4cGFuc2lvbnMgc3VjaCB0aG9zZQorbGlzdGVkIGJlbG93IGFyZSBhbGxvd2VkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tzdm4tcmVtb3RlICJwcm9qZWN0LWEiXQorCXVybCA9IGh0dHA6Ly9zZXJ2ZXIub3JnL3N2bgorCWZldGNoID0gdHJ1bmsvcHJvamVjdC1hOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvdHJ1bmsKKwlicmFuY2hlcyA9IGJyYW5jaGVzLyovcHJvamVjdC1hOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvYnJhbmNoZXMvKgorCWJyYW5jaGVzID0gYnJhbmNoZXMvcmVsZWFzZV8qOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvYnJhbmNoZXMvcmVsZWFzZV8qCisJYnJhbmNoZXMgPSBicmFuY2hlcy9yZSpzZTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL2JyYW5jaGVzLyoKKwl0YWdzID0gdGFncy8qL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL3RhZ3MvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tlZXAgaW4gbWluZCB0aGF0IHRoZSBgKmAgKGFzdGVyaXNrKSB3aWxkY2FyZCBvZiB0aGUgbG9jYWwgcmVmCisocmlnaHQgb2YgdGhlIGA6YCkgKm11c3QqIGJlIHRoZSBmYXJ0aGVzdCByaWdodCBwYXRoIGNvbXBvbmVudDsKK2hvd2V2ZXIgdGhlIHJlbW90ZSB3aWxkY2FyZCBtYXkgYmUgYW55d2hlcmUgYXMgbG9uZyBhcyBpdCdzIGFuCitpbmRlcGVuZGVudCBwYXRoIGNvbXBvbmVudCAoc3Vycm91bmRlZCBieSBgL2Agb3IgRU9MKS4gICBUaGlzCit0eXBlIG9mIGNvbmZpZ3VyYXRpb24gaXMgbm90IGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSAnaW5pdCcgYW5kCitzaG91bGQgYmUgbWFudWFsbHkgZW50ZXJlZCB3aXRoIGEgdGV4dC1lZGl0b3Igb3IgdXNpbmcgJ2dpdCBjb25maWcnLgorCitBbHNvIG5vdGUgdGhhdCBvbmx5IG9uZSBhc3RlcmlzayBpcyBhbGxvd2VkIHBlciB3b3JkLiBGb3IgZXhhbXBsZToKKworCWJyYW5jaGVzID0gYnJhbmNoZXMvcmUqc2U6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS9icmFuY2hlcy8qCisKK3dpbGwgbWF0Y2ggYnJhbmNoZXMgJ3JlbGVhc2UnLCAncmVzZScsICdyZTEyM3NlJywgaG93ZXZlcgorCisJYnJhbmNoZXMgPSBicmFuY2hlcy9yZSpzKmU6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS9icmFuY2hlcy8qCisKK3dpbGwgcHJvZHVjZSBhbiBlcnJvci4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBmZXRjaCBhIHN1YnNldCBvZiBicmFuY2hlcyBvciB0YWdzIGJ5IHVzaW5nIGEKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG5hbWVzIHdpdGhpbiBicmFjZXMuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tzdm4tcmVtb3RlICJodWdlLXByb2plY3QiXQorCXVybCA9IGh0dHA6Ly9zZXJ2ZXIub3JnL3N2bgorCWZldGNoID0gdHJ1bmsvc3JjOnJlZnMvcmVtb3Rlcy90cnVuaworCWJyYW5jaGVzID0gYnJhbmNoZXMve3JlZCxncmVlbn0vc3JjOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvYnJhbmNoZXMvKgorCXRhZ3MgPSB0YWdzL3sxLjAsMi4wfS9zcmM6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS90YWdzLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNdWx0aXBsZSBmZXRjaCwgYnJhbmNoZXMsIGFuZCB0YWdzIGtleXMgYXJlIHN1cHBvcnRlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbc3ZuLXJlbW90ZSAibWVzc3ktcmVwbyJdCisJdXJsID0gaHR0cDovL3NlcnZlci5vcmcvc3ZuCisJZmV0Y2ggPSB0cnVuay9wcm9qZWN0LWE6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS90cnVuaworCWZldGNoID0gYnJhbmNoZXMvZGVtb3MvanVuZS1wcm9qZWN0LWEtZGVtbzpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL2RlbW9zL2p1bmUtZGVtbworCWJyYW5jaGVzID0gYnJhbmNoZXMvc2VydmVyLyo6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS9icmFuY2hlcy8qCisJYnJhbmNoZXMgPSBicmFuY2hlcy9kZW1vcy8yMDExLyo6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS8yMDExLWRlbW9zLyoKKwl0YWdzID0gdGFncy9zZXJ2ZXIvKjpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL3RhZ3MvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0aW5nIGEgYnJhbmNoIGluIHN1Y2ggYSBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGRpc2FtYmlndWF0aW5nIHdoaWNoCitsb2NhdGlvbiB0byB1c2UgdXNpbmcgdGhlIC1kIG9yIC0tZGVzdGluYXRpb24gZmxhZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdm4gYnJhbmNoIC1kIGJyYW5jaGVzL3NlcnZlciByZWxlYXNlLTItMy0wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IGdpdC1zdm4ga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgcmV2aXNpb24gaW4gd2hpY2ggYSBicmFuY2gKK29yIHRhZyBoYXMgYXBwZWFyZWQuIElmIHRoZSBzdWJzZXQgb2YgYnJhbmNoZXMgb3IgdGFncyBpcyBjaGFuZ2VkIGFmdGVyCitmZXRjaGluZywgdGhlbiAkR0lUX0RJUi9zdm4vLm1ldGFkYXRhIG11c3QgYmUgbWFudWFsbHkgZWRpdGVkIHRvIHJlbW92ZQorKG9yIHJlc2V0KSBicmFuY2hlcy1tYXhSZXYgYW5kL29yIHRhZ3MtbWF4UmV2IGFzIGFwcHJvcHJpYXRlLgorCitGSUxFUworLS0tLS0KKyRHSVRfRElSL3N2bi9cKiovLnJldl9tYXAuKjo6CisJTWFwcGluZyBiZXR3ZWVuIFN1YnZlcnNpb24gcmV2aXNpb24gbnVtYmVycyBhbmQgR2l0IGNvbW1pdAorCW5hbWVzLiAgSW4gYSByZXBvc2l0b3J5IHdoZXJlIHRoZSBub01ldGFkYXRhIG9wdGlvbiBpcyBub3Qgc2V0LAorCXRoaXMgY2FuIGJlIHJlYnVpbHQgZnJvbSB0aGUgZ2l0LXN2bi1pZDogbGluZXMgdGhhdCBhcmUgYXQgdGhlCisJZW5kIG9mIGV2ZXJ5IGNvbW1pdCAoc2VlIHRoZSAnc3ZuLm5vTWV0YWRhdGEnIHNlY3Rpb24gYWJvdmUgZm9yCisJZGV0YWlscykuCisrCisnZ2l0IHN2biBmZXRjaCcgYW5kICdnaXQgc3ZuIHJlYmFzZScgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIHJldl9tYXAKK2lmIGl0IGlzIG1pc3Npbmcgb3Igbm90IHVwIHRvIGRhdGUuICAnZ2l0IHN2biByZXNldCcgYXV0b21hdGljYWxseQorcmV3aW5kcyBpdC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZWJhc2VbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zd2l0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3dpdGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc5MDAzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3dpdGNoLnR4dApAQCAtMCwwICsxLDI3MyBAQAorZ2l0LXN3aXRjaCgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3dpdGNoIC0gU3dpdGNoIGJyYW5jaGVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzd2l0Y2gnIFs8b3B0aW9ucz5dIFstLW5vLWd1ZXNzXSA8YnJhbmNoPgorJ2dpdCBzd2l0Y2gnIFs8b3B0aW9ucz5dIC0tZGV0YWNoIFs8c3RhcnQtcG9pbnQ+XQorJ2dpdCBzd2l0Y2gnIFs8b3B0aW9ucz5dICgtY3wtQykgPG5ldy1icmFuY2g+IFs8c3RhcnQtcG9pbnQ+XQorJ2dpdCBzd2l0Y2gnIFs8b3B0aW9ucz5dIC0tb3JwaGFuIDxuZXctYnJhbmNoPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1N3aXRjaCB0byBhIHNwZWNpZmllZCBicmFuY2guIFRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBhcmUKK3VwZGF0ZWQgdG8gbWF0Y2ggdGhlIGJyYW5jaC4gQWxsIG5ldyBjb21taXRzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHRpcAorb2YgdGhpcyBicmFuY2guCisKK09wdGlvbmFsbHkgYSBuZXcgYnJhbmNoIGNvdWxkIGJlIGNyZWF0ZWQgd2l0aCBlaXRoZXIgYC1jYCwgYC1DYCwKK2F1dG9tYXRpY2FsbHkgZnJvbSBhIHJlbW90ZSBicmFuY2ggb2Ygc2FtZSBuYW1lIChzZWUgYC0tZ3Vlc3NgKSwgb3IKK2RldGFjaCB0aGUgd29ya2luZyB0cmVlIGZyb20gYW55IGJyYW5jaCB3aXRoIGAtLWRldGFjaGAsIGFsb25nIHdpdGgKK3N3aXRjaGluZy4KKworU3dpdGNoaW5nIGJyYW5jaGVzIGRvZXMgbm90IHJlcXVpcmUgYSBjbGVhbiBpbmRleCBhbmQgd29ya2luZyB0cmVlCisoaS5lLiBubyBkaWZmZXJlbmNlcyBjb21wYXJlZCB0byBgSEVBRGApLiBUaGUgb3BlcmF0aW9uIGlzIGFib3J0ZWQKK2hvd2V2ZXIgaWYgdGhlIG9wZXJhdGlvbiBsZWFkcyB0byBsb3NzIG9mIGxvY2FsIGNoYW5nZXMsIHVubGVzcyB0b2xkCitvdGhlcndpc2Ugd2l0aCBgLS1kaXNjYXJkLWNoYW5nZXNgIG9yIGAtLW1lcmdlYC4KKworVEhJUyBDT01NQU5EIElTIEVYUEVSSU1FTlRBTC4gVEhFIEJFSEFWSU9SIE1BWSBDSEFOR0UuCisKK09QVElPTlMKKy0tLS0tLS0KKzxicmFuY2g+OjoKKwlCcmFuY2ggdG8gc3dpdGNoIHRvLgorCis8bmV3LWJyYW5jaD46OgorCU5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoLgorCis8c3RhcnQtcG9pbnQ+OjoKKwlUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBuZXcgYnJhbmNoLiBTcGVjaWZ5aW5nIGEKKwlgPHN0YXJ0LXBvaW50PmAgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBicmFuY2ggYmFzZWQgb24gc29tZQorCW90aGVyIHBvaW50IGluIGhpc3RvcnkgdGhhbiB3aGVyZSBIRUFEIGN1cnJlbnRseSBwb2ludHMuIChPciwKKwlpbiB0aGUgY2FzZSBvZiBgLS1kZXRhY2hgLCBhbGxvd3MgeW91IHRvIGluc3BlY3QgYW5kIGRldGFjaAorCWZyb20gc29tZSBvdGhlciBwb2ludC4pCisrCitZb3UgY2FuIHVzZSB0aGUgYEB7LU59YCBzeW50YXggdG8gcmVmZXIgdG8gdGhlIE4tdGggbGFzdAorYnJhbmNoL2NvbW1pdCBzd2l0Y2hlZCB0byB1c2luZyAiZ2l0IHN3aXRjaCIgb3IgImdpdCBjaGVja291dCIKK29wZXJhdGlvbi4gWW91IG1heSBhbHNvIHNwZWNpZnkgYC1gIHdoaWNoIGlzIHN5bm9ueW1vdXMgdG8gYEB7LTF9YC4KK1RoaXMgaXMgb2Z0ZW4gdXNlZCB0byBzd2l0Y2ggcXVpY2tseSBiZXR3ZWVuIHR3byBicmFuY2hlcywgb3IgdG8gdW5kbworYSBicmFuY2ggc3dpdGNoIGJ5IG1pc3Rha2UuCisrCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IG1heSB1c2UgYEEuLi5CYCBhcyBhIHNob3J0Y3V0IGZvciB0aGUgbWVyZ2UKK2Jhc2Ugb2YgYEFgIGFuZCBgQmAgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbiBsZWF2ZQorb3V0IGF0IG1vc3Qgb25lIG9mIGBBYCBhbmQgYEJgLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvIGBIRUFEYC4KKworLWMgPG5ldy1icmFuY2g+OjoKKy0tY3JlYXRlIDxuZXctYnJhbmNoPjo6CisJQ3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCBgPG5ldy1icmFuY2g+YCBzdGFydGluZyBhdAorCWA8c3RhcnQtcG9pbnQ+YCBiZWZvcmUgc3dpdGNoaW5nIHRvIHRoZSBicmFuY2guIFRoaXMgaXMgYQorCWNvbnZlbmllbnQgc2hvcnRjdXQgZm9yOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggPG5ldy1icmFuY2g+CiskIGdpdCBzd2l0Y2ggPG5ldy1icmFuY2g+CistLS0tLS0tLS0tLS0KKworLUMgPG5ldy1icmFuY2g+OjoKKy0tZm9yY2UtY3JlYXRlIDxuZXctYnJhbmNoPjo6CisJU2ltaWxhciB0byBgLS1jcmVhdGVgIGV4Y2VwdCB0aGF0IGlmIGA8bmV3LWJyYW5jaD5gIGFscmVhZHkKKwlleGlzdHMsIGl0IHdpbGwgYmUgcmVzZXQgdG8gYDxzdGFydC1wb2ludD5gLiBUaGlzIGlzIGEKKwljb252ZW5pZW50IHNob3J0Y3V0IGZvcjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1mIDxuZXctYnJhbmNoPgorJCBnaXQgc3dpdGNoIDxuZXctYnJhbmNoPgorLS0tLS0tLS0tLS0tCisKKy1kOjoKKy0tZGV0YWNoOjoKKwlTd2l0Y2ggdG8gYSBjb21taXQgZm9yIGluc3BlY3Rpb24gYW5kIGRpc2NhcmRhYmxlCisJZXhwZXJpbWVudHMuIFNlZSB0aGUgIkRFVEFDSEVEIEhFQUQiIHNlY3Rpb24gaW4KKwlsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBmb3IgZGV0YWlscy4KKworLS1ndWVzczo6CistLW5vLWd1ZXNzOjoKKwlJZiBgPGJyYW5jaD5gIGlzIG5vdCBmb3VuZCBidXQgdGhlcmUgZG9lcyBleGlzdCBhIHRyYWNraW5nCisJYnJhbmNoIGluIGV4YWN0bHkgb25lIHJlbW90ZSAoY2FsbCBpdCBgPHJlbW90ZT5gKSB3aXRoIGEKKwltYXRjaGluZyBuYW1lLCB0cmVhdCBhcyBlcXVpdmFsZW50IHRvCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtYyA8YnJhbmNoPiAtLXRyYWNrIDxyZW1vdGU+LzxicmFuY2g+CistLS0tLS0tLS0tLS0KKysKK0lmIHRoZSBicmFuY2ggZXhpc3RzIGluIG11bHRpcGxlIHJlbW90ZXMgYW5kIG9uZSBvZiB0aGVtIGlzIG5hbWVkIGJ5Cit0aGUgYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdlJ2xsIHVzZSB0aGF0CitvbmUgZm9yIHRoZSBwdXJwb3NlcyBvZiBkaXNhbWJpZ3VhdGlvbiwgZXZlbiBpZiB0aGUgYDxicmFuY2g+YCBpc24ndAordW5pcXVlIGFjcm9zcyBhbGwgcmVtb3Rlcy4gU2V0IGl0IHRvIGUuZy4gYGNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luYAordG8gYWx3YXlzIGNoZWNrb3V0IHJlbW90ZSBicmFuY2hlcyBmcm9tIHRoZXJlIGlmIGA8YnJhbmNoPmAgaXMKK2FtYmlndW91cyBidXQgZXhpc3RzIG9uIHRoZSAnb3JpZ2luJyByZW1vdGUuIFNlZSBhbHNvCitgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZWAgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorKworYC0tZ3Vlc3NgIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBVc2UgYC0tbm8tZ3Vlc3NgIHRvIGRpc2FibGUgaXQuCisKKy1mOjoKKy0tZm9yY2U6OgorCUFuIGFsaWFzIGZvciBgLS1kaXNjYXJkLWNoYW5nZXNgLgorCistLWRpc2NhcmQtY2hhbmdlczo6CisJUHJvY2VlZCBldmVuIGlmIHRoZSBpbmRleCBvciB0aGUgd29ya2luZyB0cmVlIGRpZmZlcnMgZnJvbQorCWBIRUFEYC4gQm90aCB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhcmUgcmVzdG9yZWQgdG8gbWF0Y2gKKwl0aGUgc3dpdGNoaW5nIHRhcmdldC4gSWYgYC0tcmVjdXJzZS1zdWJtb2R1bGVzYCBpcyBzcGVjaWZpZWQsCisJc3VibW9kdWxlIGNvbnRlbnQgaXMgYWxzbyByZXN0b3JlZCB0byBtYXRjaCB0aGUgc3dpdGNoaW5nCisJdGFyZ2V0LiBUaGlzIGlzIHVzZWQgdG8gdGhyb3cgYXdheSBsb2NhbCBjaGFuZ2VzLgorCistbTo6CistLW1lcmdlOjoKKwlJZiB5b3UgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zIHRvIG9uZSBvciBtb3JlIGZpbGVzIHRoYXQgYXJlCisJZGlmZmVyZW50IGJldHdlZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgYnJhbmNoIHRvIHdoaWNoCisJeW91IGFyZSBzd2l0Y2hpbmcsIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gc3dpdGNoIGJyYW5jaGVzIGluCisJb3JkZXIgdG8gcHJlc2VydmUgeW91ciBtb2RpZmljYXRpb25zIGluIGNvbnRleHQuICBIb3dldmVyLAorCXdpdGggdGhpcyBvcHRpb24sIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gdGhlIGN1cnJlbnQKKwlicmFuY2gsIHlvdXIgd29ya2luZyB0cmVlIGNvbnRlbnRzLCBhbmQgdGhlIG5ldyBicmFuY2ggaXMKKwlkb25lLCBhbmQgeW91IHdpbGwgYmUgb24gdGhlIG5ldyBicmFuY2guCisrCitXaGVuIGEgbWVyZ2UgY29uZmxpY3QgaGFwcGVucywgdGhlIGluZGV4IGVudHJpZXMgZm9yIGNvbmZsaWN0aW5nCitwYXRocyBhcmUgbGVmdCB1bm1lcmdlZCwgYW5kIHlvdSBuZWVkIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0cworYW5kIG1hcmsgdGhlIHJlc29sdmVkIHBhdGhzIHdpdGggYGdpdCBhZGRgIChvciBgZ2l0IHJtYCBpZiB0aGUgbWVyZ2UKK3Nob3VsZCByZXN1bHQgaW4gZGVsZXRpb24gb2YgdGhlIHBhdGgpLgorCistLWNvbmZsaWN0PTxzdHlsZT46OgorCVRoZSBzYW1lIGFzIGAtLW1lcmdlYCBvcHRpb24gYWJvdmUsIGJ1dCBjaGFuZ2VzIHRoZSB3YXkgdGhlCisJY29uZmxpY3RpbmcgaHVua3MgYXJlIHByZXNlbnRlZCwgb3ZlcnJpZGluZyB0aGUKKwlgbWVyZ2UuY29uZmxpY3RTdHlsZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFBvc3NpYmxlIHZhbHVlcyBhcmUKKwkibWVyZ2UiIChkZWZhdWx0KSBhbmQgImRpZmYzIiAoaW4gYWRkaXRpb24gdG8gd2hhdCBpcyBzaG93biBieQorCSJtZXJnZSIgc3R5bGUsIHNob3dzIHRoZSBvcmlnaW5hbCBjb250ZW50cykuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KKworLS1wcm9ncmVzczo6CistLW5vLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgYC0tcXVpZXRgCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZW5hYmxlcyBwcm9ncmVzcyByZXBvcnRpbmcgZXZlbiBpZiBub3QKKwlhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCByZWdhcmRsZXNzIG9mIGAtLXF1aWV0YC4KKworLXQ6OgorLS10cmFjazo6CisJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCAidXBzdHJlYW0iIGNvbmZpZ3VyYXRpb24uCisJYC1jYCBpcyBpbXBsaWVkLiBTZWUgYC0tdHJhY2tgIGluIGxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IKKwlkZXRhaWxzLgorKworSWYgbm8gYC1jYCBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBuYW1lIG9mIHRoZSBuZXcgYnJhbmNoIHdpbGwgYmUgZGVyaXZlZAorZnJvbSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCwgYnkgbG9va2luZyBhdCB0aGUgbG9jYWwgcGFydCBvZiB0aGUKK3JlZnNwZWMgY29uZmlndXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlLCBhbmQgdGhlbiBzdHJpcHBpbmcKK3RoZSBpbml0aWFsIHBhcnQgdXAgdG8gdGhlICIqIi4gIFRoaXMgd291bGQgdGVsbCB1cyB0byB1c2UgYGhhY2tgIGFzCit0aGUgbG9jYWwgYnJhbmNoIHdoZW4gYnJhbmNoaW5nIG9mZiBvZiBgb3JpZ2luL2hhY2tgIChvcgorYHJlbW90ZXMvb3JpZ2luL2hhY2tgLCBvciBldmVuIGByZWZzL3JlbW90ZXMvb3JpZ2luL2hhY2tgKS4gIElmIHRoZQorZ2l2ZW4gbmFtZSBoYXMgbm8gc2xhc2gsIG9yIHRoZSBhYm92ZSBndWVzc2luZyByZXN1bHRzIGluIGFuIGVtcHR5CituYW1lLCB0aGUgZ3Vlc3NpbmcgaXMgYWJvcnRlZC4gIFlvdSBjYW4gZXhwbGljaXRseSBnaXZlIGEgbmFtZSB3aXRoCitgLWNgIGluIHN1Y2ggYSBjYXNlLgorCistLW5vLXRyYWNrOjoKKwlEbyBub3Qgc2V0IHVwICJ1cHN0cmVhbSIgY29uZmlndXJhdGlvbiwgZXZlbiBpZiB0aGUKKwlgYnJhbmNoLmF1dG9TZXR1cE1lcmdlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHRydWUuCisKKy0tb3JwaGFuIDxuZXctYnJhbmNoPjo6CisJQ3JlYXRlIGEgbmV3ICdvcnBoYW4nIGJyYW5jaCwgbmFtZWQgYDxuZXctYnJhbmNoPmAuIEFsbAorCXRyYWNrZWQgZmlsZXMgYXJlIHJlbW92ZWQuCisKKy0taWdub3JlLW90aGVyLXdvcmt0cmVlczo6CisJYGdpdCBzd2l0Y2hgIHJlZnVzZXMgd2hlbiB0aGUgd2FudGVkIHJlZiBpcyBhbHJlYWR5CisJY2hlY2tlZCBvdXQgYnkgYW5vdGhlciB3b3JrdHJlZS4gVGhpcyBvcHRpb24gbWFrZXMgaXQgY2hlY2sKKwl0aGUgcmVmIG91dCBhbnl3YXkuIEluIG90aGVyIHdvcmRzLCB0aGUgcmVmIGNhbiBiZSBoZWxkIGJ5CisJbW9yZSB0aGFuIG9uZSB3b3JrdHJlZS4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCVVzaW5nIGAtLXJlY3Vyc2Utc3VibW9kdWxlc2Agd2lsbCB1cGRhdGUgdGhlIGNvbnRlbnQgb2YgYWxsCisJaW5pdGlhbGl6ZWQgc3VibW9kdWxlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUKKwlzdXBlcnByb2plY3QuIElmIG5vdGhpbmcgKG9yIGAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlc2ApIGlzCisJdXNlZCwgdGhlIHdvcmsgdHJlZXMgb2Ygc3VibW9kdWxlcyB3aWxsIG5vdCBiZSB1cGRhdGVkLiBKdXN0CisJbGlrZSBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0sIHRoaXMgd2lsbCBkZXRhY2ggYEhFQURgIG9mIHRoZQorCXN1Ym1vZHVsZXMuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgc3dpdGNoZXMgdG8gdGhlICJtYXN0ZXIiIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbWFzdGVyCistLS0tLS0tLS0tLS0KKworQWZ0ZXIgd29ya2luZyBpbiB0aGUgd3JvbmcgYnJhbmNoLCBzd2l0Y2hpbmcgdG8gdGhlIGNvcnJlY3QgYnJhbmNoCit3b3VsZCBiZSBkb25lIHVzaW5nOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBteXRvcGljCistLS0tLS0tLS0tLS0KKworSG93ZXZlciwgeW91ciAid3JvbmciIGJyYW5jaCBhbmQgY29ycmVjdCAibXl0b3BpYyIgYnJhbmNoIG1heSBkaWZmZXIKK2luIGZpbGVzIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgbG9jYWxseSwgaW4gd2hpY2ggY2FzZSB0aGUgYWJvdmUKK3N3aXRjaCB3b3VsZCBmYWlsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbXl0b3BpYworZXJyb3I6IFlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgdG8gJ2Zyb3R6Jzsgbm90IHN3aXRjaGluZyBicmFuY2hlcy4KKy0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGdpdmUgdGhlIGAtbWAgZmxhZyB0byB0aGUgY29tbWFuZCwgd2hpY2ggd291bGQgdHJ5IGEgdGhyZWUtd2F5CittZXJnZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLW0gbXl0b3BpYworQXV0by1tZXJnaW5nIGZyb3R6CistLS0tLS0tLS0tLS0KKworQWZ0ZXIgdGhpcyB0aHJlZS13YXkgbWVyZ2UsIHRoZSBsb2NhbCBtb2RpZmljYXRpb25zIGFyZSBfbm90XworcmVnaXN0ZXJlZCBpbiB5b3VyIGluZGV4IGZpbGUsIHNvIGBnaXQgZGlmZmAgd291bGQgc2hvdyB5b3Ugd2hhdAorY2hhbmdlcyB5b3UgbWFkZSBzaW5jZSB0aGUgdGlwIG9mIHRoZSBuZXcgYnJhbmNoLgorCitUbyBzd2l0Y2ggYmFjayB0byB0aGUgcHJldmlvdXMgYnJhbmNoIGJlZm9yZSB3ZSBzd2l0Y2hlZCB0byBteXRvcGljCisoaS5lLiAibWFzdGVyIiBicmFuY2gpOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtCistLS0tLS0tLS0tLS0KKworWW91IGNhbiBncm93IGEgbmV3IGJyYW5jaCBmcm9tIGFueSBjb21taXQuIEZvciBleGFtcGxlLCBzd2l0Y2ggdG8KKyJIRUFEfjMiIGFuZCBjcmVhdGUgYnJhbmNoICJmaXh1cCI6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIGZpeHVwIEhFQUR+MworU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICdmaXh1cCcKKy0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBzdGFydCBhIG5ldyBicmFuY2ggZnJvbSBhIHJlbW90ZSBicmFuY2ggb2YgdGhlIHNhbWUKK25hbWU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIG5ldy10b3BpYworQnJhbmNoICduZXctdG9waWMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICduZXctdG9waWMnIGZyb20gJ29yaWdpbicKK1N3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnbmV3LXRvcGljJworLS0tLS0tLS0tLS0tCisKK1RvIGNoZWNrIG91dCBjb21taXQgYEhFQUR+M2AgZm9yIHRlbXBvcmFyeSBpbnNwZWN0aW9uIG9yIGV4cGVyaW1lbnQKK3dpdGhvdXQgY3JlYXRpbmcgYSBuZXcgYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCAtLWRldGFjaCBIRUFEfjMKK0hFQUQgaXMgbm93IGF0IDlmYzk1NTUzMTIgTWVyZ2UgYnJhbmNoICdjYy9zaGFyZWQtaW5kZXgtcGVybWJpdHMnCistLS0tLS0tLS0tLS0KKworSWYgaXQgdHVybnMgb3V0IHdoYXRldmVyIHlvdSBoYXZlIGRvbmUgaXMgd29ydGgga2VlcGluZywgeW91IGNhbgorYWx3YXlzIGNyZWF0ZSBhIG5ldyBuYW1lIGZvciBpdCAod2l0aG91dCBzd2l0Y2hpbmcgYXdheSk6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIGdvb2Qtc3VycHJpc2VzCistLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0LWJyYW5jaFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zeW1ib2xpYy1yZWYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjhhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zeW1ib2xpYy1yZWYudHh0CkBAIC0wLDAgKzEsNjkgQEAKK2dpdC1zeW1ib2xpYy1yZWYoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN5bWJvbGljLXJlZiAtIFJlYWQsIG1vZGlmeSBhbmQgZGVsZXRlIHN5bWJvbGljIHJlZnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN5bWJvbGljLXJlZicgWy1tIDxyZWFzb24+XSA8bmFtZT4gPHJlZj4KKydnaXQgc3ltYm9saWMtcmVmJyBbLXFdIFstLXNob3J0XSA8bmFtZT4KKydnaXQgc3ltYm9saWMtcmVmJyAtLWRlbGV0ZSBbLXFdIDxuYW1lPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdmVuIG9uZSBhcmd1bWVudCwgcmVhZHMgd2hpY2ggYnJhbmNoIGhlYWQgdGhlIGdpdmVuIHN5bWJvbGljCityZWYgcmVmZXJzIHRvIGFuZCBvdXRwdXRzIGl0cyBwYXRoLCByZWxhdGl2ZSB0byB0aGUgYC5naXQvYAorZGlyZWN0b3J5LiAgVHlwaWNhbGx5IHlvdSB3b3VsZCBnaXZlIGBIRUFEYCBhcyB0aGUgPG5hbWU+Cithcmd1bWVudCB0byBzZWUgd2hpY2ggYnJhbmNoIHlvdXIgd29ya2luZyB0cmVlIGlzIG9uLgorCitHaXZlbiB0d28gYXJndW1lbnRzLCBjcmVhdGVzIG9yIHVwZGF0ZXMgYSBzeW1ib2xpYyByZWYgPG5hbWU+IHRvCitwb2ludCBhdCB0aGUgZ2l2ZW4gYnJhbmNoIDxyZWY+LgorCitHaXZlbiBgLS1kZWxldGVgIGFuZCBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50LCBkZWxldGVzIHRoZSBnaXZlbgorc3ltYm9saWMgcmVmLgorCitBIHN5bWJvbGljIHJlZiBpcyBhIHJlZ3VsYXIgZmlsZSB0aGF0IHN0b3JlcyBhIHN0cmluZyB0aGF0CitiZWdpbnMgd2l0aCBgcmVmOiByZWZzL2AuICBGb3IgZXhhbXBsZSwgeW91ciBgLmdpdC9IRUFEYCBpcworYSByZWd1bGFyIGZpbGUgd2hvc2UgY29udGVudHMgaXMgYHJlZjogcmVmcy9oZWFkcy9tYXN0ZXJgLgorCitPUFRJT05TCistLS0tLS0tCisKKy1kOjoKKy0tZGVsZXRlOjoKKwlEZWxldGUgdGhlIHN5bWJvbGljIHJlZiA8bmFtZT4uCisKKy1xOjoKKy0tcXVpZXQ6OgorCURvIG5vdCBpc3N1ZSBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSA8bmFtZT4gaXMgbm90IGEKKwlzeW1ib2xpYyByZWYgYnV0IGEgZGV0YWNoZWQgSEVBRDsgaW5zdGVhZCBleGl0IHdpdGgKKwlub24temVybyBzdGF0dXMgc2lsZW50bHkuCisKKy0tc2hvcnQ6OgorCVdoZW4gc2hvd2luZyB0aGUgdmFsdWUgb2YgPG5hbWU+IGFzIGEgc3ltYm9saWMgcmVmLCB0cnkgdG8gc2hvcnRlbiB0aGUKKwl2YWx1ZSwgZS5nLiBmcm9tIGByZWZzL2hlYWRzL21hc3RlcmAgdG8gYG1hc3RlcmAuCisKKy1tOjoKKwlVcGRhdGUgdGhlIHJlZmxvZyBmb3IgPG5hbWU+IHdpdGggPHJlYXNvbj4uICBUaGlzIGlzIHZhbGlkIG9ubHkKKwl3aGVuIGNyZWF0aW5nIG9yIHVwZGF0aW5nIGEgc3ltYm9saWMgcmVmLgorCitOT1RFUworLS0tLS0KK0luIHRoZSBwYXN0LCBgLmdpdC9IRUFEYCB3YXMgYSBzeW1ib2xpYyBsaW5rIHBvaW50aW5nIGF0CitgcmVmcy9oZWFkcy9tYXN0ZXJgLiAgV2hlbiB3ZSB3YW50ZWQgdG8gc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoLAord2UgZGlkIGBsbiAtc2YgcmVmcy9oZWFkcy9uZXdicmFuY2ggLmdpdC9IRUFEYCwgYW5kIHdoZW4gd2Ugd2FudGVkCit0byBmaW5kIG91dCB3aGljaCBicmFuY2ggd2UgYXJlIG9uLCB3ZSBkaWQgYHJlYWRsaW5rIC5naXQvSEVBRGAuCitCdXQgc3ltYm9saWMgbGlua3MgYXJlIG5vdCBlbnRpcmVseSBwb3J0YWJsZSwgc28gdGhleSBhcmUgbm93CitkZXByZWNhdGVkIGFuZCBzeW1ib2xpYyByZWZzIChhcyBkZXNjcmliZWQgYWJvdmUpIGFyZSB1c2VkIGJ5CitkZWZhdWx0LgorCisnZ2l0IHN5bWJvbGljLXJlZicgd2lsbCBleGl0IHdpdGggc3RhdHVzIDAgaWYgdGhlIGNvbnRlbnRzIG9mIHRoZQorc3ltYm9saWMgcmVmIHdlcmUgcHJpbnRlZCBjb3JyZWN0bHksIHdpdGggc3RhdHVzIDEgaWYgdGhlIHJlcXVlc3RlZAorbmFtZSBpcyBub3QgYSBzeW1ib2xpYyByZWYsIG9yIDEyOCBpZiBhbm90aGVyIGVycm9yIG9jY3Vycy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmQ5NzkxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dApAQCAtMCwwICsxLDM4NyBAQAorZ2l0LXRhZygxKQorPT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdGFnIC0gQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEcKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdGFnJyBbLWEgfCAtcyB8IC11IDxrZXlpZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XSBbLWVdCisJPHRhZ25hbWU+IFs8Y29tbWl0PiB8IDxvYmplY3Q+XQorJ2dpdCB0YWcnIC1kIDx0YWduYW1lPi4uLgorJ2dpdCB0YWcnIFstbls8bnVtPl1dIC1sIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0KKwlbLS1wb2ludHMtYXQgPG9iamVjdD5dIFstLWNvbHVtbls9PG9wdGlvbnM+XSB8IC0tbm8tY29sdW1uXQorCVstLWNyZWF0ZS1yZWZsb2ddIFstLXNvcnQ9PGtleT5dIFstLWZvcm1hdD08Zm9ybWF0Pl0KKwlbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXQorJ2dpdCB0YWcnIC12IFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZ25hbWU+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitBZGQgYSB0YWcgcmVmZXJlbmNlIGluIGByZWZzL3RhZ3MvYCwgdW5sZXNzIGAtZC8tbC8tdmAgaXMgZ2l2ZW4KK3RvIGRlbGV0ZSwgbGlzdCBvciB2ZXJpZnkgdGFncy4KKworVW5sZXNzIGAtZmAgaXMgZ2l2ZW4sIHRoZSBuYW1lZCB0YWcgbXVzdCBub3QgeWV0IGV4aXN0LgorCitJZiBvbmUgb2YgYC1hYCwgYC1zYCwgb3IgYC11IDxrZXlpZD5gIGlzIHBhc3NlZCwgdGhlIGNvbW1hbmQKK2NyZWF0ZXMgYSAndGFnJyBvYmplY3QsIGFuZCByZXF1aXJlcyBhIHRhZyBtZXNzYWdlLiAgVW5sZXNzCitgLW0gPG1zZz5gIG9yIGAtRiA8ZmlsZT5gIGlzIGdpdmVuLCBhbiBlZGl0b3IgaXMgc3RhcnRlZCBmb3IgdGhlIHVzZXIgdG8gdHlwZQoraW4gdGhlIHRhZyBtZXNzYWdlLgorCitJZiBgLW0gPG1zZz5gIG9yIGAtRiA8ZmlsZT5gIGlzIGdpdmVuIGFuZCBgLWFgLCBgLXNgLCBhbmQgYC11IDxrZXlpZD5gCithcmUgYWJzZW50LCBgLWFgIGlzIGltcGxpZWQuCisKK090aGVyd2lzZSwgYSB0YWcgcmVmZXJlbmNlIHRoYXQgcG9pbnRzIGRpcmVjdGx5IGF0IHRoZSBnaXZlbiBvYmplY3QKKyhpLmUuLCBhIGxpZ2h0d2VpZ2h0IHRhZykgaXMgY3JlYXRlZC4KKworQSBHbnVQRyBzaWduZWQgdGFnIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBgLXNgIG9yIGAtdQorPGtleWlkPmAgaXMgdXNlZC4gIFdoZW4gYC11IDxrZXlpZD5gIGlzIG5vdCB1c2VkLCB0aGUKK2NvbW1pdHRlciBpZGVudGl0eSBmb3IgdGhlIGN1cnJlbnQgdXNlciBpcyB1c2VkIHRvIGZpbmQgdGhlCitHbnVQRyBrZXkgZm9yIHNpZ25pbmcuIAlUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgZ3BnLnByb2dyYW1gCitpcyB1c2VkIHRvIHNwZWNpZnkgY3VzdG9tIEdudVBHIGJpbmFyeS4KKworVGFnIG9iamVjdHMgKGNyZWF0ZWQgd2l0aCBgLWFgLCBgLXNgLCBvciBgLXVgKSBhcmUgY2FsbGVkICJhbm5vdGF0ZWQiCit0YWdzOyB0aGV5IGNvbnRhaW4gYSBjcmVhdGlvbiBkYXRlLCB0aGUgdGFnZ2VyIG5hbWUgYW5kIGUtbWFpbCwgYQordGFnZ2luZyBtZXNzYWdlLCBhbmQgYW4gb3B0aW9uYWwgR251UEcgc2lnbmF0dXJlLiBXaGVyZWFzIGEKKyJsaWdodHdlaWdodCIgdGFnIGlzIHNpbXBseSBhIG5hbWUgZm9yIGFuIG9iamVjdCAodXN1YWxseSBhIGNvbW1pdAorb2JqZWN0KS4KKworQW5ub3RhdGVkIHRhZ3MgYXJlIG1lYW50IGZvciByZWxlYXNlIHdoaWxlIGxpZ2h0d2VpZ2h0IHRhZ3MgYXJlIG1lYW50Citmb3IgcHJpdmF0ZSBvciB0ZW1wb3Jhcnkgb2JqZWN0IGxhYmVscy4gRm9yIHRoaXMgcmVhc29uLCBzb21lIGdpdAorY29tbWFuZHMgZm9yIG5hbWluZyBvYmplY3RzIChsaWtlIGBnaXQgZGVzY3JpYmVgKSB3aWxsIGlnbm9yZQorbGlnaHR3ZWlnaHQgdGFncyBieSBkZWZhdWx0LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1hOjoKKy0tYW5ub3RhdGU6OgorCU1ha2UgYW4gdW5zaWduZWQsIGFubm90YXRlZCB0YWcgb2JqZWN0CisKKy1zOjoKKy0tc2lnbjo6CisJTWFrZSBhIEdQRy1zaWduZWQgdGFnLCB1c2luZyB0aGUgZGVmYXVsdCBlLW1haWwgYWRkcmVzcydzIGtleS4KKwlUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0YWcgR1BHLXNpZ25pbmcgaXMgY29udHJvbGxlZCBieSBgdGFnLmdwZ1NpZ25gCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpZiBpdCBleGlzdHMsIG9yIGRpc2FibGVkIG90aGVyd2lzZS4KKwlTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCistLW5vLXNpZ246OgorCU92ZXJyaWRlIGB0YWcuZ3BnU2lnbmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0aGF0IGlzCisJc2V0IHRvIGZvcmNlIGVhY2ggYW5kIGV2ZXJ5IHRhZyB0byBiZSBzaWduZWQuCisKKy11IDxrZXlpZD46OgorLS1sb2NhbC11c2VyPTxrZXlpZD46OgorCU1ha2UgYSBHUEctc2lnbmVkIHRhZywgdXNpbmcgdGhlIGdpdmVuIGtleS4KKworLWY6OgorLS1mb3JjZTo6CisJUmVwbGFjZSBhbiBleGlzdGluZyB0YWcgd2l0aCB0aGUgZ2l2ZW4gbmFtZSAoaW5zdGVhZCBvZiBmYWlsaW5nKQorCistZDo6CistLWRlbGV0ZTo6CisJRGVsZXRlIGV4aXN0aW5nIHRhZ3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZXMuCisKKy12OjoKKy0tdmVyaWZ5OjoKKwlWZXJpZnkgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGhlIGdpdmVuIHRhZyBuYW1lcy4KKworLW48bnVtPjo6CisJPG51bT4gc3BlY2lmaWVzIGhvdyBtYW55IGxpbmVzIGZyb20gdGhlIGFubm90YXRpb24sIGlmIGFueSwKKwlhcmUgcHJpbnRlZCB3aGVuIHVzaW5nIC1sLiBJbXBsaWVzIGAtLWxpc3RgLgorKworVGhlIGRlZmF1bHQgaXMgbm90IHRvIHByaW50IGFueSBhbm5vdGF0aW9uIGxpbmVzLgorSWYgbm8gbnVtYmVyIGlzIGdpdmVuIHRvIGAtbmAsIG9ubHkgdGhlIGZpcnN0IGxpbmUgaXMgcHJpbnRlZC4KK0lmIHRoZSB0YWcgaXMgbm90IGFubm90YXRlZCwgdGhlIGNvbW1pdCBtZXNzYWdlIGlzIGRpc3BsYXllZCBpbnN0ZWFkLgorCistbDo6CistLWxpc3Q6OgorCUxpc3QgdGFncy4gV2l0aCBvcHRpb25hbCBgPHBhdHRlcm4+Li4uYCwgZS5nLiBgZ2l0IHRhZyAtLWxpc3QKKwkndi0qJ2AsIGxpc3Qgb25seSB0aGUgdGFncyB0aGF0IG1hdGNoIHRoZSBwYXR0ZXJuKHMpLgorKworUnVubmluZyAiZ2l0IHRhZyIgd2l0aG91dCBhcmd1bWVudHMgYWxzbyBsaXN0cyBhbGwgdGFncy4gVGhlIHBhdHRlcm4KK2lzIGEgc2hlbGwgd2lsZGNhcmQgKGkuZS4sIG1hdGNoZWQgdXNpbmcgZm5tYXRjaCgzKSkuIE11bHRpcGxlCitwYXR0ZXJucyBtYXkgYmUgZ2l2ZW47IGlmIGFueSBvZiB0aGVtIG1hdGNoZXMsIHRoZSB0YWcgaXMgc2hvd24uCisrCitUaGlzIG9wdGlvbiBpcyBpbXBsaWNpdGx5IHN1cHBsaWVkIGlmIGFueSBvdGhlciBsaXN0LWxpa2Ugb3B0aW9uIHN1Y2gKK2FzIGAtLWNvbnRhaW5zYCBpcyBwcm92aWRlZC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBlYWNoIG9mIHRob3NlCitvcHRpb25zIGZvciBkZXRhaWxzLgorCistLXNvcnQ9PGtleT46OgorCVNvcnQgYmFzZWQgb24gdGhlIGtleSBnaXZlbi4gIFByZWZpeCBgLWAgdG8gc29ydCBpbgorCWRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlIHZhbHVlLiBZb3UgbWF5IHVzZSB0aGUgLS1zb3J0PTxrZXk+IG9wdGlvbgorCW11bHRpcGxlIHRpbWVzLCBpbiB3aGljaCBjYXNlIHRoZSBsYXN0IGtleSBiZWNvbWVzIHRoZSBwcmltYXJ5CisJa2V5LiBBbHNvIHN1cHBvcnRzICJ2ZXJzaW9uOnJlZm5hbWUiIG9yICJ2OnJlZm5hbWUiICh0YWcKKwluYW1lcyBhcmUgdHJlYXRlZCBhcyB2ZXJzaW9ucykuIFRoZSAidmVyc2lvbjpyZWZuYW1lIiBzb3J0CisJb3JkZXIgY2FuIGFsc28gYmUgYWZmZWN0ZWQgYnkgdGhlICJ2ZXJzaW9uc29ydC5zdWZmaXgiCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKwlUaGUga2V5cyBzdXBwb3J0ZWQgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGluIGBnaXQgZm9yLWVhY2gtcmVmYC4KKwlTb3J0IG9yZGVyIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBjb25maWd1cmVkIGZvciB0aGUgYHRhZy5zb3J0YAorCXZhcmlhYmxlIGlmIGl0IGV4aXN0cywgb3IgbGV4aWNvZ3JhcGhpYyBvcmRlciBvdGhlcndpc2UuIFNlZQorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1jb2xvcls9PHdoZW4+XTo6CisJUmVzcGVjdCBhbnkgY29sb3JzIHNwZWNpZmllZCBpbiB0aGUgYC0tZm9ybWF0YCBvcHRpb24uIFRoZQorCWA8d2hlbj5gIGZpZWxkIG11c3QgYmUgb25lIG9mIGBhbHdheXNgLCBgbmV2ZXJgLCBvciBgYXV0b2AgKGlmCisJYDx3aGVuPmAgaXMgYWJzZW50LCBiZWhhdmUgYXMgaWYgYGFsd2F5c2Agd2FzIGdpdmVuKS4KKworLWk6OgorLS1pZ25vcmUtY2FzZTo6CisJU29ydGluZyBhbmQgZmlsdGVyaW5nIHRhZ3MgYXJlIGNhc2UgaW5zZW5zaXRpdmUuCisKKy0tY29sdW1uWz08b3B0aW9ucz5dOjoKKy0tbm8tY29sdW1uOjoKKwlEaXNwbGF5IHRhZyBsaXN0aW5nIGluIGNvbHVtbnMuIFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisJY29sdW1uLnRhZyBmb3Igb3B0aW9uIHN5bnRheC5gLS1jb2x1bW5gIGFuZCBgLS1uby1jb2x1bW5gCisJd2l0aG91dCBvcHRpb25zIGFyZSBlcXVpdmFsZW50IHRvICdhbHdheXMnIGFuZCAnbmV2ZXInIHJlc3BlY3RpdmVseS4KKysKK1RoaXMgb3B0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIGxpc3RpbmcgdGFncyB3aXRob3V0IGFubm90YXRpb24gbGluZXMuCisKKy0tY29udGFpbnMgWzxjb21taXQ+XTo6CisJT25seSBsaXN0IHRhZ3Mgd2hpY2ggY29udGFpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdCAoSEVBRCBpZiBub3QKKwlzcGVjaWZpZWQpLiBJbXBsaWVzIGAtLWxpc3RgLgorCistLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCB0YWdzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIHNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYKKwlub3Qgc3BlY2lmaWVkKS4gSW1wbGllcyBgLS1saXN0YC4KKworLS1tZXJnZWQgWzxjb21taXQ+XTo6CisJT25seSBsaXN0IHRhZ3Mgd2hvc2UgY29tbWl0cyBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIHNwZWNpZmllZAorCWNvbW1pdCAoYEhFQURgIGlmIG5vdCBzcGVjaWZpZWQpLCBpbmNvbXBhdGlibGUgd2l0aCBgLS1uby1tZXJnZWRgLgorCistLW5vLW1lcmdlZCBbPGNvbW1pdD5dOjoKKwlPbmx5IGxpc3QgdGFncyB3aG9zZSBjb21taXRzIGFyZSBub3QgcmVhY2hhYmxlIGZyb20gdGhlIHNwZWNpZmllZAorCWNvbW1pdCAoYEhFQURgIGlmIG5vdCBzcGVjaWZpZWQpLCBpbmNvbXBhdGlibGUgd2l0aCBgLS1tZXJnZWRgLgorCistLXBvaW50cy1hdCA8b2JqZWN0Pjo6CisJT25seSBsaXN0IHRhZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdCAoSEVBRCBpZiBub3QKKwlzcGVjaWZpZWQpLiBJbXBsaWVzIGAtLWxpc3RgLgorCistbSA8bXNnPjo6CistLW1lc3NhZ2U9PG1zZz46OgorCVVzZSB0aGUgZ2l2ZW4gdGFnIG1lc3NhZ2UgKGluc3RlYWQgb2YgcHJvbXB0aW5nKS4KKwlJZiBtdWx0aXBsZSBgLW1gIG9wdGlvbnMgYXJlIGdpdmVuLCB0aGVpciB2YWx1ZXMgYXJlCisJY29uY2F0ZW5hdGVkIGFzIHNlcGFyYXRlIHBhcmFncmFwaHMuCisJSW1wbGllcyBgLWFgIGlmIG5vbmUgb2YgYC1hYCwgYC1zYCwgb3IgYC11IDxrZXlpZD5gCisJaXMgZ2l2ZW4uCisKKy1GIDxmaWxlPjo6CistLWZpbGU9PGZpbGU+OjoKKwlUYWtlIHRoZSB0YWcgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBmaWxlLiAgVXNlICctJyB0bworCXJlYWQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisJSW1wbGllcyBgLWFgIGlmIG5vbmUgb2YgYC1hYCwgYC1zYCwgb3IgYC11IDxrZXlpZD5gCisJaXMgZ2l2ZW4uCisKKy1lOjoKKy0tZWRpdDo6CisJVGhlIG1lc3NhZ2UgdGFrZW4gZnJvbSBmaWxlIHdpdGggYC1GYCBhbmQgY29tbWFuZCBsaW5lIHdpdGgKKwlgLW1gIGFyZSB1c3VhbGx5IHVzZWQgYXMgdGhlIHRhZyBtZXNzYWdlIHVubW9kaWZpZWQuCisJVGhpcyBvcHRpb24gbGV0cyB5b3UgZnVydGhlciBlZGl0IHRoZSBtZXNzYWdlIHRha2VuIGZyb20gdGhlc2Ugc291cmNlcy4KKworLS1jbGVhbnVwPTxtb2RlPjo6CisJVGhpcyBvcHRpb24gc2V0cyBob3cgdGhlIHRhZyBtZXNzYWdlIGlzIGNsZWFuZWQgdXAuCisJVGhlICAnPG1vZGU+JyBjYW4gYmUgb25lIG9mICd2ZXJiYXRpbScsICd3aGl0ZXNwYWNlJyBhbmQgJ3N0cmlwJy4gIFRoZQorCSdzdHJpcCcgbW9kZSBpcyBkZWZhdWx0LiBUaGUgJ3ZlcmJhdGltJyBtb2RlIGRvZXMgbm90IGNoYW5nZSBtZXNzYWdlIGF0CisJYWxsLCAnd2hpdGVzcGFjZScgcmVtb3ZlcyBqdXN0IGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBsaW5lcyBhbmQKKwknc3RyaXAnIHJlbW92ZXMgYm90aCB3aGl0ZXNwYWNlIGFuZCBjb21tZW50YXJ5LgorCistLWNyZWF0ZS1yZWZsb2c6OgorCUNyZWF0ZSBhIHJlZmxvZyBmb3IgdGhlIHRhZy4gVG8gZ2xvYmFsbHkgZW5hYmxlIHJlZmxvZ3MgZm9yIHRhZ3MsIHNlZQorCWBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXNgIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKwlUaGUgbmVnYXRlZCBmb3JtIGAtLW5vLWNyZWF0ZS1yZWZsb2dgIG9ubHkgb3ZlcnJpZGVzIGFuIGVhcmxpZXIKKwlgLS1jcmVhdGUtcmVmbG9nYCwgYnV0IGN1cnJlbnRseSBkb2VzIG5vdCBuZWdhdGUgdGhlIHNldHRpbmcgb2YKKwlgY29yZS5sb2dBbGxSZWZVcGRhdGVzYC4KKworLS1mb3JtYXQ9PGZvcm1hdD46OgorCUEgc3RyaW5nIHRoYXQgaW50ZXJwb2xhdGVzIGAlKGZpZWxkbmFtZSlgIGZyb20gYSB0YWcgcmVmIGJlaW5nIHNob3duCisJYW5kIHRoZSBvYmplY3QgaXQgcG9pbnRzIGF0LiAgVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBhcworCXRoYXQgb2YgbGlua2dpdDpnaXQtZm9yLWVhY2gtcmVmWzFdLiAgV2hlbiB1bnNwZWNpZmllZCwKKwlkZWZhdWx0cyB0byBgJShyZWZuYW1lOnN0cmlwPTIpYC4KKworPHRhZ25hbWU+OjoKKwlUaGUgbmFtZSBvZiB0aGUgdGFnIHRvIGNyZWF0ZSwgZGVsZXRlLCBvciBkZXNjcmliZS4KKwlUaGUgbmV3IHRhZyBuYW1lIG11c3QgcGFzcyBhbGwgY2hlY2tzIGRlZmluZWQgYnkKKwlsaW5rZ2l0OmdpdC1jaGVjay1yZWYtZm9ybWF0WzFdLiAgU29tZSBvZiB0aGVzZSBjaGVja3MKKwltYXkgcmVzdHJpY3QgdGhlIGNoYXJhY3RlcnMgYWxsb3dlZCBpbiBhIHRhZyBuYW1lLgorCis8Y29tbWl0Pjo6Cis8b2JqZWN0Pjo6CisJVGhlIG9iamVjdCB0aGF0IHRoZSBuZXcgdGFnIHdpbGwgcmVmZXIgdG8sIHVzdWFsbHkgYSBjb21taXQuCisJRGVmYXVsdHMgdG8gSEVBRC4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorQnkgZGVmYXVsdCwgJ2dpdCB0YWcnIGluIHNpZ24td2l0aC1kZWZhdWx0IG1vZGUgKC1zKSB3aWxsIHVzZSB5b3VyCitjb21taXR0ZXIgaWRlbnRpdHkgKG9mIHRoZSBmb3JtIGBZb3VyIE5hbWUgPHlvdXJAZW1haWwuYWRkcmVzcz5gKSB0bworZmluZCBhIGtleS4gIElmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBkZWZhdWx0IGtleSwgeW91IGNhbiBzcGVjaWZ5CitpdCBpbiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFzIGZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1t1c2VyXQorICAgIHNpZ25pbmdLZXkgPSA8Z3BnLWtleWlkPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgcGFnZXIudGFnYCBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIGxpc3RpbmcgdGFncywgaS5lLiwgd2hlbiBgLWxgIGlzCit1c2VkIG9yIGltcGxpZWQuIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBhIHBhZ2VyLgorU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitPbiBSZS10YWdnaW5nCit+fn5+fn5+fn5+fn5+CisKK1doYXQgc2hvdWxkIHlvdSBkbyB3aGVuIHlvdSB0YWcgYSB3cm9uZyBjb21taXQgYW5kIHlvdSB3b3VsZAord2FudCB0byByZS10YWc/CisKK0lmIHlvdSBuZXZlciBwdXNoZWQgYW55dGhpbmcgb3V0LCBqdXN0IHJlLXRhZyBpdC4gVXNlICItZiIgdG8KK3JlcGxhY2UgdGhlIG9sZCBvbmUuIEFuZCB5b3UncmUgZG9uZS4KKworQnV0IGlmIHlvdSBoYXZlIHB1c2hlZCB0aGluZ3Mgb3V0IChvciBvdGhlcnMgY291bGQganVzdCByZWFkCit5b3VyIHJlcG9zaXRvcnkgZGlyZWN0bHkpLCB0aGVuIG90aGVycyB3aWxsIGhhdmUgYWxyZWFkeSBzZWVuCit0aGUgb2xkIHRhZy4gSW4gdGhhdCBjYXNlIHlvdSBjYW4gZG8gb25lIG9mIHR3byB0aGluZ3M6CisKKy4gVGhlIHNhbmUgdGhpbmcuCisgIEp1c3QgYWRtaXQgeW91IHNjcmV3ZWQgdXAsIGFuZCB1c2UgYSBkaWZmZXJlbnQgbmFtZS4gT3RoZXJzIGhhdmUKKyAgYWxyZWFkeSBzZWVuIG9uZSB0YWctbmFtZSwgYW5kIGlmIHlvdSBrZWVwIHRoZSBzYW1lIG5hbWUsIHlvdQorICBtYXkgYmUgaW4gdGhlIHNpdHVhdGlvbiB0aGF0IHR3byBwZW9wbGUgYm90aCBoYXZlICJ2ZXJzaW9uIFgiLAorICBidXQgdGhleSBhY3R1YWxseSBoYXZlICdkaWZmZXJlbnQnICJYIidzLiAgU28ganVzdCBjYWxsIGl0ICJYLjEiCisgIGFuZCBiZSBkb25lIHdpdGggaXQuCisKKy4gVGhlIGluc2FuZSB0aGluZy4KKyAgWW91IHJlYWxseSB3YW50IHRvIGNhbGwgdGhlIG5ldyB2ZXJzaW9uICJYIiB0b28sICdldmVuIHRob3VnaCcKKyAgb3RoZXJzIGhhdmUgYWxyZWFkeSBzZWVuIHRoZSBvbGQgb25lLiBTbyBqdXN0IHVzZSAnZ2l0IHRhZyAtZicKKyAgYWdhaW4sIGFzIGlmIHlvdSBoYWRuJ3QgYWxyZWFkeSBwdWJsaXNoZWQgdGhlIG9sZCBvbmUuCisKK0hvd2V2ZXIsIEdpdCBkb2VzICpub3QqIChhbmQgaXQgc2hvdWxkIG5vdCkgY2hhbmdlIHRhZ3MgYmVoaW5kCit1c2VycyBiYWNrLiBTbyBpZiBzb21lYm9keSBhbHJlYWR5IGdvdCB0aGUgb2xkIHRhZywgZG9pbmcgYQorJ2dpdCBwdWxsJyBvbiB5b3VyIHRyZWUgc2hvdWxkbid0IGp1c3QgbWFrZSB0aGVtIG92ZXJ3cml0ZSB0aGUgb2xkCitvbmUuCisKK0lmIHNvbWVib2R5IGdvdCBhIHJlbGVhc2UgdGFnIGZyb20geW91LCB5b3UgY2Fubm90IGp1c3QgY2hhbmdlCit0aGUgdGFnIGZvciB0aGVtIGJ5IHVwZGF0aW5nIHlvdXIgb3duIG9uZS4gVGhpcyBpcyBhIGJpZworc2VjdXJpdHkgaXNzdWUsIGluIHRoYXQgcGVvcGxlIE1VU1QgYmUgYWJsZSB0byB0cnVzdCB0aGVpcgordGFnLW5hbWVzLiAgSWYgeW91IHJlYWxseSB3YW50IHRvIGRvIHRoZSBpbnNhbmUgdGhpbmcsIHlvdSBuZWVkCit0byBqdXN0IGZlc3MgdXAgdG8gaXQsIGFuZCB0ZWxsIHBlb3BsZSB0aGF0IHlvdSBtZXNzZWQgdXAuIFlvdQorY2FuIGRvIHRoYXQgYnkgbWFraW5nIGEgdmVyeSBwdWJsaWMgYW5ub3VuY2VtZW50IHNheWluZzoKKworLS0tLS0tLS0tLS0tCitPaywgSSBtZXNzZWQgdXAsIGFuZCBJIHB1c2hlZCBvdXQgYW4gZWFybGllciB2ZXJzaW9uIHRhZ2dlZCBhcyBYLiBJCit0aGVuIGZpeGVkIHNvbWV0aGluZywgYW5kIHJldGFnZ2VkIHRoZSAqZml4ZWQqIHRyZWUgYXMgWCBhZ2Fpbi4KKworSWYgeW91IGdvdCB0aGUgd3JvbmcgdGFnLCBhbmQgd2FudCB0aGUgbmV3IG9uZSwgcGxlYXNlIGRlbGV0ZQordGhlIG9sZCBvbmUgYW5kIGZldGNoIHRoZSBuZXcgb25lIGJ5IGRvaW5nOgorCisJZ2l0IHRhZyAtZCBYCisJZ2l0IGZldGNoIG9yaWdpbiB0YWcgWAorCit0byBnZXQgbXkgdXBkYXRlZCB0YWcuCisKK1lvdSBjYW4gdGVzdCB3aGljaCB0YWcgeW91IGhhdmUgYnkgZG9pbmcKKworCWdpdCByZXYtcGFyc2UgWAorCit3aGljaCBzaG91bGQgcmV0dXJuIDAxMjM0NTY3ODlhYmNkZWYuLiBpZiB5b3UgaGF2ZSB0aGUgbmV3IHZlcnNpb24uCisKK1NvcnJ5IGZvciB0aGUgaW5jb252ZW5pZW5jZS4KKy0tLS0tLS0tLS0tLQorCitEb2VzIHRoaXMgc2VlbSBhIGJpdCBjb21wbGljYXRlZD8gIEl0ICpzaG91bGQqIGJlLiBUaGVyZSBpcyBubword2F5IHRoYXQgaXQgd291bGQgYmUgY29ycmVjdCB0byBqdXN0ICJmaXgiIGl0IGF1dG9tYXRpY2FsbHkuCitQZW9wbGUgbmVlZCB0byBrbm93IHRoYXQgdGhlaXIgdGFncyBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZC4KKworCitPbiBBdXRvbWF0aWMgZm9sbG93aW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSBhcmUgZm9sbG93aW5nIHNvbWVib2R5IGVsc2UncyB0cmVlLCB5b3UgYXJlIG1vc3QgbGlrZWx5Cit1c2luZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgKGVnLiBgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgKS4KK1lvdSB1c3VhbGx5IHdhbnQgdGhlIHRhZ3MgZnJvbSB0aGUgb3RoZXIgZW5kLgorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGFyZSBmZXRjaGluZyBiZWNhdXNlIHlvdSB3b3VsZCB3YW50IGEKK29uZS1zaG90IG1lcmdlIGZyb20gc29tZWJvZHkgZWxzZSwgeW91IHR5cGljYWxseSBkbyBub3Qgd2FudCB0bworZ2V0IHRhZ3MgZnJvbSB0aGVyZS4gIFRoaXMgaGFwcGVucyBtb3JlIG9mdGVuIGZvciBwZW9wbGUgbmVhcgordGhlIHRvcGxldmVsIGJ1dCBub3QgbGltaXRlZCB0byB0aGVtLiAgTWVyZSBtb3J0YWxzIHdoZW4gcHVsbGluZworZnJvbSBlYWNoIG90aGVyIGRvIG5vdCBuZWNlc3NhcmlseSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZ2V0Citwcml2YXRlIGFuY2hvciBwb2ludCB0YWdzIGZyb20gdGhlIG90aGVyIHBlcnNvbi4KKworT2Z0ZW4sICJwbGVhc2UgcHVsbCIgbWVzc2FnZXMgb24gdGhlIG1haWxpbmcgbGlzdCBqdXN0IHByb3ZpZGUKK3R3byBwaWVjZXMgb2YgaW5mb3JtYXRpb246IGEgcmVwbyBVUkwgYW5kIGEgYnJhbmNoIG5hbWU7IHRoaXMKK2lzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSBjdXQmcGFzdGVkIGF0IHRoZSBlbmQgb2YgYSAnZ2l0IGZldGNoJworY29tbWFuZCBsaW5lOgorCistLS0tLS0tLS0tLS0KK0xpbnVzLCBwbGVhc2UgcHVsbCBmcm9tCisKKwlnaXQ6Ly9naXQuLi4uL3Byb2ouZ2l0IG1hc3RlcgorCit0byBnZXQgdGhlIGZvbGxvd2luZyB1cGRhdGVzLi4uCistLS0tLS0tLS0tLS0KKworYmVjb21lczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIGdpdDovL2dpdC4uLi4vcHJvai5naXQgbWFzdGVyCistLS0tLS0tLS0tLS0KKworSW4gc3VjaCBhIGNhc2UsIHlvdSBkbyBub3Qgd2FudCB0byBhdXRvbWF0aWNhbGx5IGZvbGxvdyB0aGUgb3RoZXIKK3BlcnNvbidzIHRhZ3MuCisKK09uZSBpbXBvcnRhbnQgYXNwZWN0IG9mIEdpdCBpcyBpdHMgZGlzdHJpYnV0ZWQgbmF0dXJlLCB3aGljaAorbGFyZ2VseSBtZWFucyB0aGVyZSBpcyBubyBpbmhlcmVudCAidXBzdHJlYW0iIG9yCisiZG93bnN0cmVhbSIgaW4gdGhlIHN5c3RlbS4gIE9uIHRoZSBmYWNlIG9mIGl0LCB0aGUgYWJvdmUKK2V4YW1wbGUgbWlnaHQgc2VlbSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0YWcgbmFtZXNwYWNlIGlzIG93bmVkCitieSB0aGUgdXBwZXIgZWNoZWxvbiBvZiBwZW9wbGUgYW5kIHRoYXQgdGFncyBvbmx5IGZsb3cgZG93bndhcmRzLCBidXQKK3RoYXQgaXMgbm90IHRoZSBjYXNlLiAgSXQgb25seSBzaG93cyB0aGF0IHRoZSB1c2FnZSBwYXR0ZXJuCitkZXRlcm1pbmVzIHdobyBhcmUgaW50ZXJlc3RlZCBpbiB3aG9zZSB0YWdzLgorCitBIG9uZS1zaG90IHB1bGwgaXMgYSBzaWduIHRoYXQgYSBjb21taXQgaGlzdG9yeSBpcyBub3cgY3Jvc3NpbmcKK3RoZSBib3VuZGFyeSBiZXR3ZWVuIG9uZSBjaXJjbGUgb2YgcGVvcGxlIChlLmcuICJwZW9wbGUgd2hvIGFyZQorcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdGhlIG5ldHdvcmtpbmcgcGFydCBvZiB0aGUga2VybmVsIikgd2hvIG1heQoraGF2ZSB0aGVpciBvd24gc2V0IG9mIHRhZ3MgKGUuZy4gInRoaXMgaXMgdGhlIHRoaXJkIHJlbGVhc2UKK2NhbmRpZGF0ZSBmcm9tIHRoZSBuZXR3b3JraW5nIGdyb3VwIHRvIGJlIHByb3Bvc2VkIGZvciBnZW5lcmFsCitjb25zdW1wdGlvbiB3aXRoIDIuNi4yMSByZWxlYXNlIikgdG8gYW5vdGhlciBjaXJjbGUgb2YgcGVvcGxlCisoZS5nLiAicGVvcGxlIHdobyBpbnRlZ3JhdGUgdmFyaW91cyBzdWJzeXN0ZW0gaW1wcm92ZW1lbnRzIikuCitUaGUgbGF0dGVyIGFyZSB1c3VhbGx5IG5vdCBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxlZCB0YWdzIHVzZWQKK2ludGVybmFsbHkgaW4gdGhlIGZvcm1lciBncm91cCAodGhhdCBpcyB3aGF0ICJpbnRlcm5hbCIgbWVhbnMpLgorVGhhdCBpcyB3aHkgaXQgaXMgZGVzaXJhYmxlIG5vdCB0byBmb2xsb3cgdGFncyBhdXRvbWF0aWNhbGx5IGluCit0aGlzIGNhc2UuCisKK0l0IG1heSB3ZWxsIGJlIHRoYXQgYW1vbmcgbmV0d29ya2luZyBwZW9wbGUsIHRoZXkgbWF5IHdhbnQgdG8KK2V4Y2hhbmdlIHRoZSB0YWdzIGludGVybmFsIHRvIHRoZWlyIGdyb3VwLCBidXQgaW4gdGhhdCB3b3JrZmxvdwordGhleSBhcmUgbW9zdCBsaWtlbHkgdHJhY2tpbmcgZWFjaCBvdGhlcidzIHByb2dyZXNzIGJ5CitoYXZpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLiAgQWdhaW4sIHRoZSBoZXVyaXN0aWMgdG8gYXV0b21hdGljYWxseQorZm9sbG93IHN1Y2ggdGFncyBpcyBhIGdvb2QgdGhpbmcuCisKKworT24gQmFja2RhdGluZyBUYWdzCit+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgeW91IGhhdmUgaW1wb3J0ZWQgc29tZSBjaGFuZ2VzIGZyb20gYW5vdGhlciBWQ1MgYW5kIHdvdWxkIGxpa2UKK3RvIGFkZCB0YWdzIGZvciBtYWpvciByZWxlYXNlcyBvZiB5b3VyIHdvcmssIGl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlCit0byBzcGVjaWZ5IHRoZSBkYXRlIHRvIGVtYmVkIGluc2lkZSBvZiB0aGUgdGFnIG9iamVjdDsgc3VjaCBkYXRhIGluCit0aGUgdGFnIG9iamVjdCBhZmZlY3RzLCBmb3IgZXhhbXBsZSwgdGhlIG9yZGVyaW5nIG9mIHRhZ3MgaW4gdGhlCitnaXR3ZWIgaW50ZXJmYWNlLgorCitUbyBzZXQgdGhlIGRhdGUgdXNlZCBpbiBmdXR1cmUgdGFnIG9iamVjdHMsIHNldCB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIEdJVF9DT01NSVRURVJfREFURSAoc2VlIHRoZSBsYXRlciBkaXNjdXNzaW9uIG9mIHBvc3NpYmxlCit2YWx1ZXM7IHRoZSBtb3N0IGNvbW1vbiBmb3JtIGlzICJZWVlZLU1NLUREIEhIOk1NIikuCisKK0ZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0KKyQgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTEwLTAyIDEwOjMxIiBnaXQgdGFnIC1zIHYxLjAuMQorLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6OmRhdGUtZm9ybWF0cy50eHRbXQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0uCitsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdG9vbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdG9vbHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZmVjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10b29scy50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IFRvb2xzCis9PT09PT09PT0KKworV2hlbiBHaXQgd2FzIHlvdW5nLCBwZW9wbGUgbG9va2luZyBmb3IgdGhpcmQtcGFydHkgR2l0LXJlbGF0ZWQgdG9vbHMgY2FtZQordG8gdGhlIEdpdCBwcm9qZWN0IGl0c2VsZiB0byBmaW5kIHRoZW0sIHRodXMgYSBsaXN0IG9mIHN1Y2ggdG9vbHMgd2FzCittYWludGFpbmVkIGhlcmUuIFRoZXNlIGRheXMsIGhvd2V2ZXIsIHNlYXJjaCBlbmdpbmVzIGZpbGwgdGhhdCByb2xlIG11Y2gKK21vcmUgZWZmaWNpZW50bHksIHNvIHRoaXMgbWFudWFsbHktbWFpbnRhaW5lZCBsaXN0IGhhcyBiZWVuIHJldGlyZWQuCisKK1NlZSBhbHNvIHRoZSBgY29udHJpYi9gIGFyZWEsIGFuZCB0aGUgR2l0IHdpa2k6CitodHRwczovL2dpdC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0ludGVyZmFjZXNGcm9udGVuZHNBbmRUb29scwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLWZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZjE0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQKQEAgLTAsMCArMSwyOCBAQAorZ2l0LXVucGFjay1maWxlKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXVucGFjay1maWxlIC0gQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBibG9iJ3MgY29udGVudHMKKworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB1bnBhY2stZmlsZScgPGJsb2I+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ3JlYXRlcyBhIGZpbGUgaG9sZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGJsb2Igc3BlY2lmaWVkIGJ5IHNoYTEuIEl0CityZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKwkubWVyZ2VfZmlsZV9YWFhYWAorCitPUFRJT05TCistLS0tLS0tCis8YmxvYj46OgorCU11c3QgYmUgYSBibG9iIGlkCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLW9iamVjdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZGU1MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQKQEAgLTAsMCArMSw1MiBAQAorZ2l0LXVucGFjay1vYmplY3RzKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXVucGFjay1vYmplY3RzIC0gVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHVucGFjay1vYmplY3RzJyBbLW5dIFstcV0gWy1yXSBbLS1zdHJpY3RdCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkIGEgcGFja2VkIGFyY2hpdmUgKC5wYWNrKSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgZXhwYW5kaW5nCit0aGUgb2JqZWN0cyBjb250YWluZWQgd2l0aGluIGFuZCB3cml0aW5nIHRoZW0gaW50byB0aGUgcmVwb3NpdG9yeSBpbgorImxvb3NlIiAob25lIG9iamVjdCBwZXIgZmlsZSkgZm9ybWF0LgorCitPYmplY3RzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeSB3aWxsICpub3QqIGJlIHVucGFja2VkCitmcm9tIHRoZSBwYWNrZmlsZS4gIFRoZXJlZm9yZSwgbm90aGluZyB3aWxsIGJlIHVucGFja2VkIGlmIHlvdSB1c2UKK3RoaXMgY29tbWFuZCBvbiBhIHBhY2tmaWxlIHRoYXQgZXhpc3RzIHdpdGhpbiB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkuCisKK1NlZSBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0gZm9yIG9wdGlvbnMgdG8gZ2VuZXJhdGUKK25ldyBwYWNrcyBhbmQgcmVwbGFjZSBleGlzdGluZyBvbmVzLgorCitPUFRJT05TCistLS0tLS0tCistbjo6CisgICAgICAgIERyeSBydW4uICBDaGVjayB0aGUgcGFjayBmaWxlIHdpdGhvdXQgYWN0dWFsbHkgdW5wYWNraW5nCisJdGhlIG9iamVjdHMuCisKKy1xOjoKKwlUaGUgY29tbWFuZCB1c3VhbGx5IHNob3dzIHBlcmNlbnRhZ2UgcHJvZ3Jlc3MuICBUaGlzCisJZmxhZyBzdXBwcmVzc2VzIGl0LgorCistcjo6CisJV2hlbiB1bnBhY2tpbmcgYSBjb3JydXB0IHBhY2tmaWxlLCB0aGUgY29tbWFuZCBkaWVzIGF0CisJdGhlIGZpcnN0IGNvcnJ1cHRpb24uICBUaGlzIGZsYWcgdGVsbHMgaXQgdG8ga2VlcCBnb2luZworCWFuZCBtYWtlIHRoZSBiZXN0IGVmZm9ydCB0byByZWNvdmVyIGFzIG1hbnkgb2JqZWN0cyBhcworCXBvc3NpYmxlLgorCistLXN0cmljdDo6CisJRG9uJ3Qgd3JpdGUgb2JqZWN0cyB3aXRoIGJyb2tlbiBjb250ZW50IG9yIGxpbmtzLgorCistLW1heC1pbnB1dC1zaXplPTxzaXplPjo6CisJRGllLCBpZiB0aGUgcGFjayBpcyBsYXJnZXIgdGhhbiA8c2l6ZT4uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ4OWNiMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKQEAgLTAsMCArMSw1NzYgQEAKK2dpdC11cGRhdGUtaW5kZXgoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXVwZGF0ZS1pbmRleCAtIFJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdXBkYXRlLWluZGV4JworCSAgICAgWy0tYWRkXSBbLS1yZW1vdmUgfCAtLWZvcmNlLXJlbW92ZV0gWy0tcmVwbGFjZV0KKwkgICAgIFstLXJlZnJlc2hdIFstcV0gWy0tdW5tZXJnZWRdIFstLWlnbm9yZS1taXNzaW5nXQorCSAgICAgWygtLWNhY2hlaW5mbyA8bW9kZT4sPG9iamVjdD4sPGZpbGU+KS4uLl0KKwkgICAgIFstLWNobW9kPSgrfC0peF0KKwkgICAgIFstLVtuby1dYXNzdW1lLXVuY2hhbmdlZF0KKwkgICAgIFstLVtuby1dc2tpcC13b3JrdHJlZV0KKwkgICAgIFstLVtuby1daWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllc10KKwkgICAgIFstLVtuby1dZnNtb25pdG9yLXZhbGlkXQorCSAgICAgWy0taWdub3JlLXN1Ym1vZHVsZXNdCisJICAgICBbLS1bbm8tXXNwbGl0LWluZGV4XQorCSAgICAgWy0tW25vLXx0ZXN0LXxmb3JjZS1ddW50cmFja2VkLWNhY2hlXQorCSAgICAgWy0tW25vLV1mc21vbml0b3JdCisJICAgICBbLS1yZWFsbHktcmVmcmVzaF0gWy0tdW5yZXNvbHZlXSBbLS1hZ2FpbiB8IC1nXQorCSAgICAgWy0taW5mby1vbmx5XSBbLS1pbmRleC1pbmZvXQorCSAgICAgWy16XSBbLS1zdGRpbl0gWy0taW5kZXgtdmVyc2lvbiA8bj5dCisJICAgICBbLS12ZXJib3NlXQorCSAgICAgWy0tXSBbPGZpbGU+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK01vZGlmaWVzIHRoZSBpbmRleCBvciBkaXJlY3RvcnkgY2FjaGUuIEVhY2ggZmlsZSBtZW50aW9uZWQgaXMgdXBkYXRlZAoraW50byB0aGUgaW5kZXggYW5kIGFueSAndW5tZXJnZWQnIG9yICduZWVkcyB1cGRhdGluZycgc3RhdGUgaXMKK2NsZWFyZWQuCisKK1NlZSBhbHNvIGxpbmtnaXQ6Z2l0LWFkZFsxXSBmb3IgYSBtb3JlIHVzZXItZnJpZW5kbHkgd2F5IHRvIGRvIHNvbWUgb2YKK3RoZSBtb3N0IGNvbW1vbiBvcGVyYXRpb25zIG9uIHRoZSBpbmRleC4KKworVGhlIHdheSAnZ2l0IHVwZGF0ZS1pbmRleCcgaGFuZGxlcyBmaWxlcyBpdCBpcyB0b2xkIGFib3V0IGNhbiBiZSBtb2RpZmllZAordXNpbmcgdGhlIHZhcmlvdXMgb3B0aW9uczoKKworT1BUSU9OUworLS0tLS0tLQorLS1hZGQ6OgorCUlmIGEgc3BlY2lmaWVkIGZpbGUgaXNuJ3QgaW4gdGhlIGluZGV4IGFscmVhZHkgdGhlbiBpdCdzCisJYWRkZWQuCisJRGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gaWdub3JlIG5ldyBmaWxlcy4KKworLS1yZW1vdmU6OgorCUlmIGEgc3BlY2lmaWVkIGZpbGUgaXMgaW4gdGhlIGluZGV4IGJ1dCBpcyBtaXNzaW5nIHRoZW4gaXQncworCXJlbW92ZWQuCisJRGVmYXVsdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgcmVtb3ZlZCBmaWxlLgorCistLXJlZnJlc2g6OgorCUxvb2tzIGF0IHRoZSBjdXJyZW50IGluZGV4IGFuZCBjaGVja3MgdG8gc2VlIGlmIG1lcmdlcyBvcgorCXVwZGF0ZXMgYXJlIG5lZWRlZCBieSBjaGVja2luZyBzdGF0KCkgaW5mb3JtYXRpb24uCisKKy1xOjoKKyAgICAgICAgUXVpZXQuICBJZiAtLXJlZnJlc2ggZmluZHMgdGhhdCB0aGUgaW5kZXggbmVlZHMgYW4gdXBkYXRlLCB0aGUKKyAgICAgICAgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBlcnJvciBvdXQuICBUaGlzIG9wdGlvbiBtYWtlcworCSdnaXQgdXBkYXRlLWluZGV4JyBjb250aW51ZSBhbnl3YXkuCisKKy0taWdub3JlLXN1Ym1vZHVsZXM6OgorCURvIG5vdCB0cnkgdG8gdXBkYXRlIHN1Ym1vZHVsZXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlc3BlY3RlZAorCXdoZW4gcGFzc2VkIGJlZm9yZSAtLXJlZnJlc2guCisKKy0tdW5tZXJnZWQ6OgorICAgICAgICBJZiAtLXJlZnJlc2ggZmluZHMgdW5tZXJnZWQgY2hhbmdlcyBpbiB0aGUgaW5kZXgsIHRoZSBkZWZhdWx0CisJYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMgJ2dpdCB1cGRhdGUtaW5kZXgnCisgICAgICAgIGNvbnRpbnVlIGFueXdheS4KKworLS1pZ25vcmUtbWlzc2luZzo6CisJSWdub3JlcyBtaXNzaW5nIGZpbGVzIGR1cmluZyBhIC0tcmVmcmVzaAorCistLWNhY2hlaW5mbyA8bW9kZT4sPG9iamVjdD4sPHBhdGg+OjoKKy0tY2FjaGVpbmZvIDxtb2RlPiA8b2JqZWN0PiA8cGF0aD46OgorCURpcmVjdGx5IGluc2VydCB0aGUgc3BlY2lmaWVkIGluZm8gaW50byB0aGUgaW5kZXguICBGb3IKKwliYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB5b3UgY2FuIGFsc28gZ2l2ZSB0aGVzZSB0aHJlZQorCWFyZ3VtZW50cyBhcyB0aHJlZSBzZXBhcmF0ZSBwYXJhbWV0ZXJzLCBidXQgbmV3IHVzZXJzIGFyZQorCWVuY291cmFnZWQgdG8gdXNlIGEgc2luZ2xlLXBhcmFtZXRlciBmb3JtLgorCistLWluZGV4LWluZm86OgorICAgICAgICBSZWFkIGluZGV4IGluZm9ybWF0aW9uIGZyb20gc3RkaW4uCisKKy0tY2htb2Q9KCt8LSl4OjoKKyAgICAgICAgU2V0IHRoZSBleGVjdXRlIHBlcm1pc3Npb25zIG9uIHRoZSB1cGRhdGVkIGZpbGVzLgorCistLVtuby1dYXNzdW1lLXVuY2hhbmdlZDo6CisJV2hlbiB0aGlzIGZsYWcgaXMgc3BlY2lmaWVkLCB0aGUgb2JqZWN0IG5hbWVzIHJlY29yZGVkCisJZm9yIHRoZSBwYXRocyBhcmUgbm90IHVwZGF0ZWQuICBJbnN0ZWFkLCB0aGlzIG9wdGlvbgorCXNldHMvdW5zZXRzIHRoZSAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IGZvciB0aGUKKwlwYXRocy4gIFdoZW4gdGhlICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQgaXMgb24sIHRoZSB1c2VyCisJcHJvbWlzZXMgbm90IHRvIGNoYW5nZSB0aGUgZmlsZSBhbmQgYWxsb3dzIEdpdCB0byBhc3N1bWUKKwl0aGF0IHRoZSB3b3JraW5nIHRyZWUgZmlsZSBtYXRjaGVzIHdoYXQgaXMgcmVjb3JkZWQgaW4KKwl0aGUgaW5kZXguICBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHdvcmtpbmcgdHJlZSBmaWxlLAorCXlvdSBuZWVkIHRvIHVuc2V0IHRoZSBiaXQgdG8gdGVsbCBHaXQuICBUaGlzIGlzCisJc29tZXRpbWVzIGhlbHBmdWwgd2hlbiB3b3JraW5nIHdpdGggYSBiaWcgcHJvamVjdCBvbiBhCisJZmlsZXN5c3RlbSB0aGF0IGhhcyB2ZXJ5IHNsb3cgbHN0YXQoMikgc3lzdGVtIGNhbGwKKwkoZS5nLiBjaWZzKS4KKysKK0dpdCB3aWxsIGZhaWwgKGdyYWNlZnVsbHkpIGluIGNhc2UgaXQgbmVlZHMgdG8gbW9kaWZ5IHRoaXMgZmlsZQoraW4gdGhlIGluZGV4IGUuZy4gd2hlbiBtZXJnaW5nIGluIGEgY29tbWl0OwordGh1cywgaW4gY2FzZSB0aGUgYXNzdW1lZC11bnRyYWNrZWQgZmlsZSBpcyBjaGFuZ2VkIHVwc3RyZWFtLAoreW91IHdpbGwgbmVlZCB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbiBtYW51YWxseS4KKworLS1yZWFsbHktcmVmcmVzaDo6CisJTGlrZSBgLS1yZWZyZXNoYCwgYnV0IGNoZWNrcyBzdGF0IGluZm9ybWF0aW9uIHVuY29uZGl0aW9uYWxseSwKKwl3aXRob3V0IHJlZ2FyZCB0byB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIHNldHRpbmcuCisKKy0tW25vLV1za2lwLXdvcmt0cmVlOjoKKwlXaGVuIG9uZSBvZiB0aGVzZSBmbGFncyBpcyBzcGVjaWZpZWQsIHRoZSBvYmplY3QgbmFtZSByZWNvcmRlZAorCWZvciB0aGUgcGF0aHMgYXJlIG5vdCB1cGRhdGVkLiBJbnN0ZWFkLCB0aGVzZSBvcHRpb25zCisJc2V0IGFuZCB1bnNldCB0aGUgInNraXAtd29ya3RyZWUiIGJpdCBmb3IgdGhlIHBhdGhzLiBTZWUKKwlzZWN0aW9uICJTa2lwLXdvcmt0cmVlIGJpdCIgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworLS1bbm8tXWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXM6OgorCURvIG5vdCByZW1vdmUgc2tpcC13b3JrdHJlZSAoQUtBICJpbmRleC1vbmx5IikgZW50cmllcyBldmVuIHdoZW4KKwl0aGUgYC0tcmVtb3ZlYCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKworLS1bbm8tXWZzbW9uaXRvci12YWxpZDo6CisJV2hlbiBvbmUgb2YgdGhlc2UgZmxhZ3MgaXMgc3BlY2lmaWVkLCB0aGUgb2JqZWN0IG5hbWUgcmVjb3JkZWQKKwlmb3IgdGhlIHBhdGhzIGFyZSBub3QgdXBkYXRlZC4gSW5zdGVhZCwgdGhlc2Ugb3B0aW9ucworCXNldCBhbmQgdW5zZXQgdGhlICJmc21vbml0b3IgdmFsaWQiIGJpdCBmb3IgdGhlIHBhdGhzLiBTZWUKKwlzZWN0aW9uICJGaWxlIFN5c3RlbSBNb25pdG9yIiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLWc6OgorLS1hZ2Fpbjo6CisJUnVucyAnZ2l0IHVwZGF0ZS1pbmRleCcgaXRzZWxmIG9uIHRoZSBwYXRocyB3aG9zZSBpbmRleAorCWVudHJpZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRob3NlIGZyb20gdGhlIGBIRUFEYCBjb21taXQuCisKKy0tdW5yZXNvbHZlOjoKKwlSZXN0b3JlcyB0aGUgJ3VubWVyZ2VkJyBvciAnbmVlZHMgdXBkYXRpbmcnIHN0YXRlIG9mIGEKKwlmaWxlIGR1cmluZyBhIG1lcmdlIGlmIGl0IHdhcyBjbGVhcmVkIGJ5IGFjY2lkZW50LgorCistLWluZm8tb25seTo6CisJRG8gbm90IGNyZWF0ZSBvYmplY3RzIGluIHRoZSBvYmplY3QgZGF0YWJhc2UgZm9yIGFsbAorCTxmaWxlPiBhcmd1bWVudHMgdGhhdCBmb2xsb3cgdGhpcyBmbGFnOyBqdXN0IGluc2VydAorCXRoZWlyIG9iamVjdCBJRHMgaW50byB0aGUgaW5kZXguCisKKy0tZm9yY2UtcmVtb3ZlOjoKKwlSZW1vdmUgdGhlIGZpbGUgZnJvbSB0aGUgaW5kZXggZXZlbiB3aGVuIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorCXN0aWxsIGhhcyBzdWNoIGEgZmlsZS4gKEltcGxpZXMgLS1yZW1vdmUuKQorCistLXJlcGxhY2U6OgorCUJ5IGRlZmF1bHQsIHdoZW4gYSBmaWxlIGBwYXRoYCBleGlzdHMgaW4gdGhlIGluZGV4LAorCSdnaXQgdXBkYXRlLWluZGV4JyByZWZ1c2VzIGFuIGF0dGVtcHQgdG8gYWRkIGBwYXRoL2ZpbGVgLgorCVNpbWlsYXJseSBpZiBhIGZpbGUgYHBhdGgvZmlsZWAgZXhpc3RzLCBhIGZpbGUgYHBhdGhgCisJY2Fubm90IGJlIGFkZGVkLiAgV2l0aCAtLXJlcGxhY2UgZmxhZywgZXhpc3RpbmcgZW50cmllcworCXRoYXQgY29uZmxpY3Qgd2l0aCB0aGUgZW50cnkgYmVpbmcgYWRkZWQgYXJlCisJYXV0b21hdGljYWxseSByZW1vdmVkIHdpdGggd2FybmluZyBtZXNzYWdlcy4KKworLS1zdGRpbjo6CisJSW5zdGVhZCBvZiB0YWtpbmcgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsCisJcmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LiAgUGF0aHMgYXJlCisJc2VwYXJhdGVkIGJ5IExGIChpLmUuIG9uZSBwYXRoIHBlciBsaW5lKSBieSBkZWZhdWx0LgorCistLXZlcmJvc2U6OgorICAgICAgICBSZXBvcnQgd2hhdCBpcyBiZWluZyBhZGRlZCBhbmQgcmVtb3ZlZCBmcm9tIGluZGV4LgorCistLWluZGV4LXZlcnNpb24gPG4+OjoKKwlXcml0ZSB0aGUgcmVzdWx0aW5nIGluZGV4IG91dCBpbiB0aGUgbmFtZWQgb24tZGlzayBmb3JtYXQgdmVyc2lvbi4KKwlTdXBwb3J0ZWQgdmVyc2lvbnMgYXJlIDIsIDMgYW5kIDQuIFRoZSBjdXJyZW50IGRlZmF1bHQgdmVyc2lvbiBpcyAyCisJb3IgMywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgZXh0cmEgZmVhdHVyZXMgYXJlIHVzZWQsIHN1Y2ggYXMKKwlgZ2l0IGFkZCAtTmAuCisrCitWZXJzaW9uIDQgcGVyZm9ybXMgYSBzaW1wbGUgcGF0aG5hbWUgY29tcHJlc3Npb24gdGhhdCByZWR1Y2VzIGluZGV4CitzaXplIGJ5IDMwJS01MCUgb24gbGFyZ2UgcmVwb3NpdG9yaWVzLCB3aGljaCByZXN1bHRzIGluIGZhc3RlciBsb2FkCit0aW1lLiBWZXJzaW9uIDQgaXMgcmVsYXRpdmVseSB5b3VuZyAoZmlyc3QgcmVsZWFzZWQgaW4gMS44LjAgaW4KK09jdG9iZXIgMjAxMikuIE90aGVyIEdpdCBpbXBsZW1lbnRhdGlvbnMgc3VjaCBhcyBKR2l0IGFuZCBsaWJnaXQyCittYXkgbm90IHN1cHBvcnQgaXQgeWV0LgorCistejo6CisJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tc3RkaW5gIG9yIGAtLWluZGV4LWluZm9gOyBwYXRocyBhcmUKKwlzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIGluc3RlYWQgb2YgTEYuCisKKy0tc3BsaXQtaW5kZXg6OgorLS1uby1zcGxpdC1pbmRleDo6CisJRW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXggbW9kZS4gSWYgc3BsaXQtaW5kZXggbW9kZSBpcworCWFscmVhZHkgZW5hYmxlZCBhbmQgYC0tc3BsaXQtaW5kZXhgIGlzIGdpdmVuIGFnYWluLCBhbGwKKwljaGFuZ2VzIGluICRHSVRfRElSL2luZGV4IGFyZSBwdXNoZWQgYmFjayB0byB0aGUgc2hhcmVkIGluZGV4CisJZmlsZS4KKysKK1RoZXNlIG9wdGlvbnMgdGFrZSBlZmZlY3Qgd2hhdGV2ZXIgdGhlIHZhbHVlIG9mIHRoZSBgY29yZS5zcGxpdEluZGV4YAorY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIEJ1dCBhIHdhcm5pbmcgaXMKK2VtaXR0ZWQgd2hlbiB0aGUgY2hhbmdlIGdvZXMgYWdhaW5zdCB0aGUgY29uZmlndXJlZCB2YWx1ZSwgYXMgdGhlCitjb25maWd1cmVkIHZhbHVlIHdpbGwgdGFrZSBlZmZlY3QgbmV4dCB0aW1lIHRoZSBpbmRleCBpcyByZWFkIGFuZCB0aGlzCit3aWxsIHJlbW92ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IG9mIHRoZSBvcHRpb24uCisKKy0tdW50cmFja2VkLWNhY2hlOjoKKy0tbm8tdW50cmFja2VkLWNhY2hlOjoKKwlFbmFibGUgb3IgZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUgZmVhdHVyZS4gUGxlYXNlIHVzZQorCWAtLXRlc3QtdW50cmFja2VkLWNhY2hlYCBiZWZvcmUgZW5hYmxpbmcgaXQuCisrCitUaGVzZSBvcHRpb25zIHRha2UgZWZmZWN0IHdoYXRldmVyIHRoZSB2YWx1ZSBvZiB0aGUgYGNvcmUudW50cmFja2VkQ2FjaGVgCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gQnV0IGEgd2FybmluZyBpcworZW1pdHRlZCB3aGVuIHRoZSBjaGFuZ2UgZ29lcyBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIHZhbHVlLCBhcyB0aGUKK2NvbmZpZ3VyZWQgdmFsdWUgd2lsbCB0YWtlIGVmZmVjdCBuZXh0IHRpbWUgdGhlIGluZGV4IGlzIHJlYWQgYW5kIHRoaXMKK3dpbGwgcmVtb3ZlIHRoZSBpbnRlbmRlZCBlZmZlY3Qgb2YgdGhlIG9wdGlvbi4KKworLS10ZXN0LXVudHJhY2tlZC1jYWNoZTo6CisJT25seSBwZXJmb3JtIHRlc3RzIG9uIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byBtYWtlIHN1cmUKKwl1bnRyYWNrZWQgY2FjaGUgY2FuIGJlIHVzZWQuIFlvdSBoYXZlIHRvIG1hbnVhbGx5IGVuYWJsZQorCXVudHJhY2tlZCBjYWNoZSB1c2luZyBgLS11bnRyYWNrZWQtY2FjaGVgIG9yCisJYC0tZm9yY2UtdW50cmFja2VkLWNhY2hlYCBvciB0aGUgYGNvcmUudW50cmFja2VkQ2FjaGVgCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhZnRlcndhcmRzIGlmIHlvdSByZWFsbHkgd2FudCB0byB1c2UKKwlpdC4gSWYgYSB0ZXN0IGZhaWxzIHRoZSBleGl0IGNvZGUgaXMgMSBhbmQgYSBtZXNzYWdlCisJZXhwbGFpbnMgd2hhdCBpcyBub3Qgd29ya2luZyBhcyBuZWVkZWQsIG90aGVyd2lzZSB0aGUgZXhpdAorCWNvZGUgaXMgMCBhbmQgT0sgaXMgcHJpbnRlZC4KKworLS1mb3JjZS11bnRyYWNrZWQtY2FjaGU6OgorCVNhbWUgYXMgYC0tdW50cmFja2VkLWNhY2hlYC4gUHJvdmlkZWQgZm9yIGJhY2t3YXJkcworCWNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBHaXQgd2hlcmUKKwlgLS11bnRyYWNrZWQtY2FjaGVgIHVzZWQgdG8gaW1wbHkgYC0tdGVzdC11bnRyYWNrZWQtY2FjaGVgIGJ1dAorCXRoaXMgb3B0aW9uIHdvdWxkIGVuYWJsZSB0aGUgZXh0ZW5zaW9uIHVuY29uZGl0aW9uYWxseS4KKworLS1mc21vbml0b3I6OgorLS1uby1mc21vbml0b3I6OgorCUVuYWJsZSBvciBkaXNhYmxlIGZpbGVzIHN5c3RlbSBtb25pdG9yIGZlYXR1cmUuIFRoZXNlIG9wdGlvbnMKKwl0YWtlIGVmZmVjdCB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIGBjb3JlLmZzbW9uaXRvcmAKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gQnV0IGEgd2FybmluZworCWlzIGVtaXR0ZWQgd2hlbiB0aGUgY2hhbmdlIGdvZXMgYWdhaW5zdCB0aGUgY29uZmlndXJlZCB2YWx1ZSwgYXMKKwl0aGUgY29uZmlndXJlZCB2YWx1ZSB3aWxsIHRha2UgZWZmZWN0IG5leHQgdGltZSB0aGUgaW5kZXggaXMKKwlyZWFkIGFuZCB0aGlzIHdpbGwgcmVtb3ZlIHRoZSBpbnRlbmRlZCBlZmZlY3Qgb2YgdGhlIG9wdGlvbi4KKworXC0tOjoKKwlEbyBub3QgaW50ZXJwcmV0IGFueSBtb3JlIGFyZ3VtZW50cyBhcyBvcHRpb25zLgorCis8ZmlsZT46OgorCUZpbGVzIHRvIGFjdCBvbi4KKwlOb3RlIHRoYXQgZmlsZXMgYmVnaW5uaW5nIHdpdGggJy4nIGFyZSBkaXNjYXJkZWQuIFRoaXMgaW5jbHVkZXMKKwlgLi9maWxlYCBhbmQgYGRpci8uL2ZpbGVgLiBJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzLCB0aGVuIHVzZQorCWNsZWFuZXIgbmFtZXMuCisJVGhlIHNhbWUgYXBwbGllcyB0byBkaXJlY3RvcmllcyBlbmRpbmcgJy8nIGFuZCBwYXRocyB3aXRoICcvLycKKworVVNJTkcgLS1SRUZSRVNICistLS0tLS0tLS0tLS0tLS0KK2AtLXJlZnJlc2hgIGRvZXMgbm90IGNhbGN1bGF0ZSBhIG5ldyBzaGExIGZpbGUgb3IgYnJpbmcgdGhlIGluZGV4Cit1cCB0byBkYXRlIGZvciBtb2RlL2NvbnRlbnQgY2hhbmdlcy4gQnV0IHdoYXQgaXQgKmRvZXMqIGRvIGlzIHRvCisicmUtbWF0Y2giIHRoZSBzdGF0IGluZm9ybWF0aW9uIG9mIGEgZmlsZSB3aXRoIHRoZSBpbmRleCwgc28gdGhhdCB5b3UKK2NhbiByZWZyZXNoIHRoZSBpbmRleCBmb3IgYSBmaWxlIHRoYXQgaGFzbid0IGJlZW4gY2hhbmdlZCBidXQgd2hlcmUKK3RoZSBzdGF0IGVudHJ5IGlzIG91dCBvZiBkYXRlLgorCitGb3IgZXhhbXBsZSwgeW91J2Qgd2FudCB0byBkbyB0aGlzIGFmdGVyIGRvaW5nIGEgJ2dpdCByZWFkLXRyZWUnLCB0byBsaW5rCit1cCB0aGUgc3RhdCBpbmRleCBkZXRhaWxzIHdpdGggdGhlIHByb3BlciBmaWxlcy4KKworVVNJTkcgLS1DQUNIRUlORk8gT1IgLS1JTkZPLU9OTFkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitgLS1jYWNoZWluZm9gIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYSBmaWxlIHRoYXQgaXMgbm90IGluIHRoZQorY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIFRoaXMgaXMgdXNlZnVsIGZvciBtaW5pbXVtLWNoZWNrb3V0CittZXJnaW5nLgorCitUbyBwcmV0ZW5kIHlvdSBoYXZlIGEgZmlsZSBhdCBwYXRoIHdpdGggbW9kZSBhbmQgc2hhMSwgc2F5OgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gPG1vZGU+LDxzaGExPiw8cGF0aD4KKy0tLS0tLS0tLS0tLS0tLS0KKworYC0taW5mby1vbmx5YCBpcyB1c2VkIHRvIHJlZ2lzdGVyIGZpbGVzIHdpdGhvdXQgcGxhY2luZyB0aGVtIGluIHRoZSBvYmplY3QKK2RhdGFiYXNlLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHN0YXR1cy1vbmx5IHJlcG9zaXRvcmllcy4KKworQm90aCBgLS1jYWNoZWluZm9gIGFuZCBgLS1pbmZvLW9ubHlgIGJlaGF2ZSBzaW1pbGFybHk6IHRoZSBpbmRleCBpcyB1cGRhdGVkCitidXQgdGhlIG9iamVjdCBkYXRhYmFzZSBpc24ndC4gIGAtLWNhY2hlaW5mb2AgaXMgdXNlZnVsIHdoZW4gdGhlIG9iamVjdCBpcworaW4gdGhlIGRhdGFiYXNlIGJ1dCB0aGUgZmlsZSBpc24ndCBhdmFpbGFibGUgbG9jYWxseS4gIGAtLWluZm8tb25seWAgaXMKK3VzZWZ1bCB3aGVuIHRoZSBmaWxlIGlzIGF2YWlsYWJsZSwgYnV0IHlvdSBkbyBub3Qgd2lzaCB0byB1cGRhdGUgdGhlCitvYmplY3QgZGF0YWJhc2UuCisKKworVVNJTkcgLS1JTkRFWC1JTkZPCistLS0tLS0tLS0tLS0tLS0tLS0KKworYC0taW5kZXgtaW5mb2AgaXMgYSBtb3JlIHBvd2VyZnVsIG1lY2hhbmlzbSB0aGF0IGxldHMgeW91IGZlZWQKK211bHRpcGxlIGVudHJ5IGRlZmluaXRpb25zIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBhbmQgZGVzaWduZWQKK3NwZWNpZmljYWxseSBmb3Igc2NyaXB0cy4gIEl0IGNhbiB0YWtlIGlucHV0cyBvZiB0aHJlZSBmb3JtYXRzOgorCisgICAgLiBtb2RlIFNQIHR5cGUgU1Agc2hhMSAgICAgICAgICBUQUIgcGF0aAorKworVGhpcyBmb3JtYXQgaXMgdG8gc3R1ZmYgYGdpdCBscy10cmVlYCBvdXRwdXQgaW50byB0aGUgaW5kZXguCisKKyAgICAuIG1vZGUgICAgICAgICBTUCBzaGExIFNQIHN0YWdlIFRBQiBwYXRoCisrCitUaGlzIGZvcm1hdCBpcyB0byBwdXQgaGlnaGVyIG9yZGVyIHN0YWdlcyBpbnRvIHRoZQoraW5kZXggZmlsZSBhbmQgbWF0Y2hlcyAnZ2l0IGxzLWZpbGVzIC0tc3RhZ2UnIG91dHB1dC4KKworICAgIC4gbW9kZSAgICAgICAgIFNQIHNoYTEgICAgICAgICAgVEFCIHBhdGgKKysKK1RoaXMgZm9ybWF0IGlzIG5vIGxvbmdlciBwcm9kdWNlZCBieSBhbnkgR2l0IGNvbW1hbmQsIGJ1dCBpcworYW5kIHdpbGwgY29udGludWUgdG8gYmUgc3VwcG9ydGVkIGJ5IGB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvYC4KKworVG8gcGxhY2UgYSBoaWdoZXIgc3RhZ2UgZW50cnkgdG8gdGhlIGluZGV4LCB0aGUgcGF0aCBzaG91bGQKK2ZpcnN0IGJlIHJlbW92ZWQgYnkgZmVlZGluZyBhIG1vZGU9MCBlbnRyeSBmb3IgdGhlIHBhdGgsIGFuZAordGhlbiBmZWVkaW5nIG5lY2Vzc2FyeSBpbnB1dCBsaW5lcyBpbiB0aGUgdGhpcmQgZm9ybWF0LgorCitGb3IgZXhhbXBsZSwgc3RhcnRpbmcgd2l0aCB0aGlzIGluZGV4OgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC1zCisxMDA2NDQgOGExMjE4YTEwMjRhMjEyYmIzZGIzMGJlY2Q4NjAzMTVmOWYzYWM1MiAwICAgICAgIGZyb3R6CistLS0tLS0tLS0tLS0KKworeW91IGNhbiBmZWVkIHRoZSBmb2xsb3dpbmcgaW5wdXQgdG8gYC0taW5kZXgtaW5mb2A6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbworMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCWZyb3R6CisxMDA2NDQgOGExMjE4YTEwMjRhMjEyYmIzZGIzMGJlY2Q4NjAzMTVmOWYzYWM1MiAxCWZyb3R6CisxMDA3NTUgOGExMjE4YTEwMjRhMjEyYmIzZGIzMGJlY2Q4NjAzMTVmOWYzYWM1MiAyCWZyb3R6CistLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGlucHV0IGZlZWRzIDAgYXMgdGhlIG1vZGUgdG8gcmVtb3ZlIHRoZQorcGF0aDsgdGhlIFNIQS0xIGRvZXMgbm90IG1hdHRlciBhcyBsb25nIGFzIGl0IGlzIHdlbGwgZm9ybWF0dGVkLgorVGhlbiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBsaW5lIGZlZWRzIHN0YWdlIDEgYW5kIHN0YWdlIDIgZW50cmllcworZm9yIHRoYXQgcGF0aC4gIEFmdGVyIHRoZSBhYm92ZSwgd2Ugd291bGQgZW5kIHVwIHdpdGggdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtcworMTAwNjQ0IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMQlmcm90egorMTAwNzU1IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMglmcm90egorLS0tLS0tLS0tLS0tCisKKworVVNJTkcgYGBBU1NVTUUgVU5DSEFOR0VEJycgQklUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFueSBvcGVyYXRpb25zIGluIEdpdCBkZXBlbmQgb24geW91ciBmaWxlc3lzdGVtIHRvIGhhdmUgYW4KK2VmZmljaWVudCBgbHN0YXQoMilgIGltcGxlbWVudGF0aW9uLCBzbyB0aGF0IGBzdF9tdGltZWAKK2luZm9ybWF0aW9uIGZvciB3b3JraW5nIHRyZWUgZmlsZXMgY2FuIGJlIGNoZWFwbHkgY2hlY2tlZCB0byBzZWUKK2lmIHRoZSBmaWxlIGNvbnRlbnRzIGhhdmUgY2hhbmdlZCBmcm9tIHRoZSB2ZXJzaW9uIHJlY29yZGVkIGluCit0aGUgaW5kZXggZmlsZS4gIFVuZm9ydHVuYXRlbHksIHNvbWUgZmlsZXN5c3RlbXMgaGF2ZQoraW5lZmZpY2llbnQgYGxzdGF0KDIpYC4gIElmIHlvdXIgZmlsZXN5c3RlbSBpcyBvbmUgb2YgdGhlbSwgeW91CitjYW4gc2V0ICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQgdG8gcGF0aHMgeW91IGhhdmUgbm90IGNoYW5nZWQgdG8KK2NhdXNlIEdpdCBub3QgdG8gZG8gdGhpcyBjaGVjay4gIE5vdGUgdGhhdCBzZXR0aW5nIHRoaXMgYml0IG9uIGEKK3BhdGggZG9lcyBub3QgbWVhbiBHaXQgd2lsbCBjaGVjayB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdG8KK3NlZSBpZiBpdCBoYXMgY2hhbmdlZCAtLSBpdCBtYWtlcyBHaXQgdG8gb21pdCBhbnkgY2hlY2tpbmcgYW5kCithc3N1bWUgaXQgaGFzICpub3QqIGNoYW5nZWQuICBXaGVuIHlvdSBtYWtlIGNoYW5nZXMgdG8gd29ya2luZwordHJlZSBmaWxlcywgeW91IGhhdmUgdG8gZXhwbGljaXRseSB0ZWxsIEdpdCBhYm91dCBpdCBieSBkcm9wcGluZworImFzc3VtZSB1bmNoYW5nZWQiIGJpdCwgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB5b3UgbW9kaWZ5IHRoZW0uCisKK0luIG9yZGVyIHRvIHNldCAiYXNzdW1lIHVuY2hhbmdlZCIgYml0LCB1c2UgYC0tYXNzdW1lLXVuY2hhbmdlZGAKK29wdGlvbi4gIFRvIHVuc2V0LCB1c2UgYC0tbm8tYXNzdW1lLXVuY2hhbmdlZGAuIFRvIHNlZSB3aGljaCBmaWxlcworaGF2ZSB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCBzZXQsIHVzZSBgZ2l0IGxzLWZpbGVzIC12YAorKHNlZSBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXSkuCisKK1RoZSBjb21tYW5kIGxvb2tzIGF0IGBjb3JlLmlnbm9yZXN0YXRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBXaGVuCit0aGlzIGlzIHRydWUsIHBhdGhzIHVwZGF0ZWQgd2l0aCBgZ2l0IHVwZGF0ZS1pbmRleCBwYXRocy4uLmAgYW5kCitwYXRocyB1cGRhdGVkIHdpdGggb3RoZXIgR2l0IGNvbW1hbmRzIHRoYXQgdXBkYXRlIGJvdGggaW5kZXggYW5kCit3b3JraW5nIHRyZWUgKGUuZy4gJ2dpdCBhcHBseSAtLWluZGV4JywgJ2dpdCBjaGVja291dC1pbmRleCAtdScsCithbmQgJ2dpdCByZWFkLXRyZWUgLXUnKSBhcmUgYXV0b21hdGljYWxseSBtYXJrZWQgYXMgImFzc3VtZQordW5jaGFuZ2VkIi4gIE5vdGUgdGhhdCAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IGlzICpub3QqIHNldCBpZgorYGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoYCBmaW5kcyB0aGUgd29ya2luZyB0cmVlIGZpbGUgbWF0Y2hlcwordGhlIGluZGV4ICh1c2UgYGdpdCB1cGRhdGUtaW5kZXggLS1yZWFsbHktcmVmcmVzaGAgaWYgeW91IHdhbnQKK3RvIG1hcmsgdGhlbSBhcyAiYXNzdW1lIHVuY2hhbmdlZCIpLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorVG8gdXBkYXRlIGFuZCByZWZyZXNoIG9ubHkgdGhlIGZpbGVzIGFscmVhZHkgY2hlY2tlZCBvdXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC1uIC1mIC1hICYmIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLS0KKworT24gYW4gaW5lZmZpY2llbnQgZmlsZXN5c3RlbSB3aXRoIGBjb3JlLmlnbm9yZXN0YXRgIHNldDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlYWxseS1yZWZyZXNoICAgICAgICAgICAgICA8MT4KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWFzc3VtZS11bmNoYW5nZWQgZm9vLmMgICA8Mj4KKyQgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mz4KKyQgZWRpdCBmb28uYworJCBnaXQgZGlmZiAtLW5hbWUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw0PgorTSBmb28uYworJCBnaXQgdXBkYXRlLWluZGV4IGZvby5jICAgICAgICAgICAgICAgICAgICAgICAgIDw1PgorJCBnaXQgZGlmZiAtLW5hbWUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw2PgorJCBlZGl0IGZvby5jCiskIGdpdCBkaWZmIC0tbmFtZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDc+CiskIGdpdCB1cGRhdGUtaW5kZXggLS1uby1hc3N1bWUtdW5jaGFuZ2VkIGZvby5jICAgPDg+CiskIGdpdCBkaWZmIC0tbmFtZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDk+CitNIGZvby5jCistLS0tLS0tLS0tLS0KKysKKzwxPiBmb3JjZXMgbHN0YXQoMikgdG8gc2V0ICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXRzIGZvciBwYXRocyB0aGF0IG1hdGNoIGluZGV4LgorPDI+IG1hcmsgdGhlIHBhdGggdG8gYmUgZWRpdGVkLgorPDM+IHRoaXMgZG9lcyBsc3RhdCgyKSBhbmQgZmluZHMgaW5kZXggbWF0Y2hlcyB0aGUgcGF0aC4KKzw0PiB0aGlzIGRvZXMgbHN0YXQoMikgYW5kIGZpbmRzIGluZGV4IGRvZXMgKm5vdCogbWF0Y2ggdGhlIHBhdGguCis8NT4gcmVnaXN0ZXJpbmcgdGhlIG5ldyB2ZXJzaW9uIHRvIGluZGV4IHNldHMgImFzc3VtZSB1bmNoYW5nZWQiIGJpdC4KKzw2PiBhbmQgaXQgaXMgYXNzdW1lZCB1bmNoYW5nZWQuCis8Nz4gZXZlbiBhZnRlciB5b3UgZWRpdCBpdC4KKzw4PiB5b3UgY2FuIHRlbGwgYWJvdXQgdGhlIGNoYW5nZSBhZnRlciB0aGUgZmFjdC4KKzw5PiBub3cgaXQgY2hlY2tzIHdpdGggbHN0YXQoMikgYW5kIGZpbmRzIGl0IGhhcyBiZWVuIGNoYW5nZWQuCisKKworU0tJUC1XT1JLVFJFRSBCSVQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1NraXAtd29ya3RyZWUgYml0IGNhbiBiZSBkZWZpbmVkIGluIG9uZSAobG9uZykgc2VudGVuY2U6IFdoZW4gcmVhZGluZworYW4gZW50cnksIGlmIGl0IGlzIG1hcmtlZCBhcyBza2lwLXdvcmt0cmVlLCB0aGVuIEdpdCBwcmV0ZW5kcyBpdHMKK3dvcmtpbmcgZGlyZWN0b3J5IHZlcnNpb24gaXMgdXAgdG8gZGF0ZSBhbmQgcmVhZCB0aGUgaW5kZXggdmVyc2lvbgoraW5zdGVhZC4KKworVG8gZWxhYm9yYXRlLCAicmVhZGluZyIgbWVhbnMgY2hlY2tpbmcgZm9yIGZpbGUgZXhpc3RlbmNlLCByZWFkaW5nCitmaWxlIGF0dHJpYnV0ZXMgb3IgZmlsZSBjb250ZW50LiBUaGUgd29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBtYXkgYmUKK3ByZXNlbnQgb3IgYWJzZW50LiBJZiBwcmVzZW50LCBpdHMgY29udGVudCBtYXkgbWF0Y2ggYWdhaW5zdCB0aGUgaW5kZXgKK3ZlcnNpb24gb3Igbm90LiBXcml0aW5nIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIGJpdCwgY29udGVudCBzYWZldHkKK2lzIHN0aWxsIGZpcnN0IHByaW9yaXR5LiBOb3RlIHRoYXQgR2l0IF9jYW5fIHVwZGF0ZSB3b3JraW5nIGRpcmVjdG9yeQorZmlsZSwgdGhhdCBpcyBtYXJrZWQgc2tpcC13b3JrdHJlZSwgaWYgaXQgaXMgc2FmZSB0byBkbyBzbyAoaS5lLgord29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBtYXRjaGVzIGluZGV4IHZlcnNpb24pCisKK0FsdGhvdWdoIHRoaXMgYml0IGxvb2tzIHNpbWlsYXIgdG8gYXNzdW1lLXVuY2hhbmdlZCBiaXQsIGl0cyBnb2FsIGlzCitkaWZmZXJlbnQgZnJvbSBhc3N1bWUtdW5jaGFuZ2VkIGJpdCdzLiBTa2lwLXdvcmt0cmVlIGFsc28gdGFrZXMKK3ByZWNlZGVuY2Ugb3ZlciBhc3N1bWUtdW5jaGFuZ2VkIGJpdCB3aGVuIGJvdGggYXJlIHNldC4KKworU1BMSVQgSU5ERVgKKy0tLS0tLS0tLS0tCisKK1RoaXMgbW9kZSBpcyBkZXNpZ25lZCBmb3IgcmVwb3NpdG9yaWVzIHdpdGggdmVyeSBsYXJnZSBpbmRleGVzLCBhbmQKK2FpbXMgYXQgcmVkdWNpbmcgdGhlIHRpbWUgaXQgdGFrZXMgdG8gcmVwZWF0ZWRseSB3cml0ZSB0aGVzZSBpbmRleGVzLgorCitJbiB0aGlzIG1vZGUsIHRoZSBpbmRleCBpcyBzcGxpdCBpbnRvIHR3byBmaWxlcywgJEdJVF9ESVIvaW5kZXggYW5kCiskR0lUX0RJUi9zaGFyZWRpbmRleC48U0hBLTE+LiBDaGFuZ2VzIGFyZSBhY2N1bXVsYXRlZCBpbgorJEdJVF9ESVIvaW5kZXgsIHRoZSBzcGxpdCBpbmRleCwgd2hpbGUgdGhlIHNoYXJlZCBpbmRleCBmaWxlIGNvbnRhaW5zCithbGwgaW5kZXggZW50cmllcyBhbmQgc3RheXMgdW5jaGFuZ2VkLgorCitBbGwgY2hhbmdlcyBpbiB0aGUgc3BsaXQgaW5kZXggYXJlIHB1c2hlZCBiYWNrIHRvIHRoZSBzaGFyZWQgaW5kZXgKK2ZpbGUgd2hlbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNwbGl0IGluZGV4IHJlYWNoZXMgYSBsZXZlbAorc3BlY2lmaWVkIGJ5IHRoZSBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgY29uZmlnIHZhcmlhYmxlIChzZWUKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKK0VhY2ggdGltZSBhIG5ldyBzaGFyZWQgaW5kZXggZmlsZSBpcyBjcmVhdGVkLCB0aGUgb2xkIHNoYXJlZCBpbmRleAorZmlsZXMgYXJlIGRlbGV0ZWQgaWYgdGhlaXIgbW9kaWZpY2F0aW9uIHRpbWUgaXMgb2xkZXIgdGhhbiB3aGF0IGlzCitzcGVjaWZpZWQgYnkgdGhlIHNwbGl0SW5kZXguc2hhcmVkSW5kZXhFeHBpcmUgY29uZmlnIHZhcmlhYmxlIChzZWUKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKK1RvIGF2b2lkIGRlbGV0aW5nIGEgc2hhcmVkIGluZGV4IGZpbGUgdGhhdCBpcyBzdGlsbCB1c2VkLCBpdHMKK21vZGlmaWNhdGlvbiB0aW1lIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdGltZSBldmVyeSB0aW1lIGEgbmV3IHNwbGl0CitpbmRleCBiYXNlZCBvbiB0aGUgc2hhcmVkIGluZGV4IGZpbGUgaXMgZWl0aGVyIGNyZWF0ZWQgb3IgcmVhZCBmcm9tLgorCitVTlRSQUNLRUQgQ0FDSEUKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNhY2hlIGlzIG1lYW50IHRvIHNwZWVkIHVwIGNvbW1hbmRzIHRoYXQgaW52b2x2ZSBkZXRlcm1pbmluZwordW50cmFja2VkIGZpbGVzIHN1Y2ggYXMgYGdpdCBzdGF0dXNgLgorCitUaGlzIGZlYXR1cmUgd29ya3MgYnkgcmVjb3JkaW5nIHRoZSBtdGltZSBvZiB0aGUgd29ya2luZyB0cmVlCitkaXJlY3RvcmllcyBhbmQgdGhlbiBvbWl0dGluZyByZWFkaW5nIGRpcmVjdG9yaWVzIGFuZCBzdGF0IGNhbGxzCithZ2FpbnN0IGZpbGVzIGluIHRob3NlIGRpcmVjdG9yaWVzIHdob3NlIG10aW1lIGhhc24ndCBjaGFuZ2VkLiBGb3IKK3RoaXMgdG8gd29yayB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGFuZCBmaWxlIHN5c3RlbSBtdXN0CitjaGFuZ2UgdGhlIGBzdF9tdGltZWAgZmllbGQgb2YgZGlyZWN0b3JpZXMgaWYgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeQorYXJlIGFkZGVkLCBtb2RpZmllZCBvciBkZWxldGVkLgorCitZb3UgY2FuIHRlc3Qgd2hldGhlciB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aGF0IHdpdGggdGhlCitgLS10ZXN0LXVudHJhY2tlZC1jYWNoZWAgb3B0aW9uLiBUaGUgYC0tdW50cmFja2VkLWNhY2hlYCBvcHRpb24gdXNlZAordG8gaW1wbGljaXRseSBwZXJmb3JtIHRoYXQgdGVzdCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBHaXQsIGJ1dCB0aGF0J3MKK25vIGxvbmdlciB0aGUgY2FzZS4KKworSWYgeW91IHdhbnQgdG8gZW5hYmxlIChvciBkaXNhYmxlKSB0aGlzIGZlYXR1cmUsIGl0IGlzIGVhc2llciB0byB1c2UKK3RoZSBgY29yZS51bnRyYWNrZWRDYWNoZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pIHRoYW4gdXNpbmcgdGhlIGAtLXVudHJhY2tlZC1jYWNoZWAgb3B0aW9uIHRvCitgZ2l0IHVwZGF0ZS1pbmRleGAgaW4gZWFjaCByZXBvc2l0b3J5LCBlc3BlY2lhbGx5IGlmIHlvdSB3YW50IHRvIGRvIHNvCithY3Jvc3MgYWxsIHJlcG9zaXRvcmllcyB5b3UgdXNlLCBiZWNhdXNlIHlvdSBjYW4gc2V0IHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSB0byBgdHJ1ZWAgKG9yIGBmYWxzZWApIGluIHlvdXIgYCRIT01FLy5naXRjb25maWdgIGp1c3Qgb25jZQorYW5kIGhhdmUgaXQgYWZmZWN0IGFsbCByZXBvc2l0b3JpZXMgeW91IHRvdWNoLgorCitXaGVuIHRoZSBgY29yZS51bnRyYWNrZWRDYWNoZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBjaGFuZ2VkLCB0aGUKK3VudHJhY2tlZCBjYWNoZSBpcyBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIGluZGV4IHRoZSBuZXh0IHRpbWUgYQorY29tbWFuZCByZWFkcyB0aGUgaW5kZXg7IHdoaWxlIHdoZW4gYC0tW25vLXxmb3JjZS1ddW50cmFja2VkLWNhY2hlYAorYXJlIHVzZWQsIHRoZSB1bnRyYWNrZWQgY2FjaGUgaXMgaW1tZWRpYXRlbHkgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tCit0aGUgaW5kZXguCisKK0JlZm9yZSAyLjE3LCB0aGUgdW50cmFja2VkIGNhY2hlIGhhZCBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYSBkaXJlY3RvcnkKK3dpdGggYSBzeW1saW5rIHRvIGFub3RoZXIgZGlyZWN0b3J5IGNvdWxkIGNhdXNlIGl0IHRvIGluY29ycmVjdGx5IHNob3cKK2ZpbGVzIHRyYWNrZWQgYnkgZ2l0IGFzIHVudHJhY2tlZC4gU2VlIHRoZSAic3RhdHVzOiBhZGQgYSBmYWlsaW5nIHRlc3QKK3Nob3dpbmcgYSBjb3JlLnVudHJhY2tlZENhY2hlIGJ1ZyIgY29tbWl0IHRvIGdpdC5naXQuIEEgd29ya2Fyb3VuZCBmb3IKK3RoYXQgaXMgKGFuZCB0aGlzIG1pZ2h0IHdvcmsgZm9yIG90aGVyIHVuZGlzY292ZXJlZCBidWdzIGluIHRoZQorZnV0dXJlKToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgLWMgY29yZS51bnRyYWNrZWRDYWNoZT1mYWxzZSBzdGF0dXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBidWcgaGFzIGFsc28gYmVlbiBzaG93biB0byBhZmZlY3Qgbm9uLXN5bWxpbmsgY2FzZXMgb2YgcmVwbGFjaW5nCithIGRpcmVjdG9yeSB3aXRoIGEgZmlsZSB3aGVuIGl0IGNvbWVzIHRvIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIG9mCit0aGUgdW50cmFja2VkIGNhY2hlLCBidXQgbm8gY2FzZSBoYXMgYmVlbiByZXBvcnRlZCB3aGVyZSB0aGlzIHJlc3VsdGVkIGluCit3cm9uZyAiZ2l0IHN0YXR1cyIgb3V0cHV0LgorCitUaGVyZSBhcmUgYWxzbyBjYXNlcyB3aGVyZSBleGlzdGluZyBpbmRleGVzIHdyaXR0ZW4gYnkgZ2l0IHZlcnNpb25zCitiZWZvcmUgMi4xNyB3aWxsIHJlZmVyZW5jZSBkaXJlY3RvcmllcyB0aGF0IGRvbid0IGV4aXN0IGFueW1vcmUsCitwb3RlbnRpYWxseSBjYXVzaW5nIG1hbnkgImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSIgd2FybmluZ3MgdG8gYmUKK3ByaW50ZWQgb24gImdpdCBzdGF0dXMiLiBUaGVzZSBhcmUgbmV3IHdhcm5pbmdzIGZvciBleGlzdGluZyBpc3N1ZXMKK3RoYXQgd2VyZSBwcmV2aW91c2x5IHNpbGVudGx5IGRpc2NhcmRlZC4KKworQXMgd2l0aCB0aGUgYnVnIGRlc2NyaWJlZCBhYm92ZSB0aGUgc29sdXRpb24gaXMgdG8gb25lLW9mZiBkbyBhICJnaXQKK3N0YXR1cyIgcnVuIHdpdGggYGNvcmUudW50cmFja2VkQ2FjaGU9ZmFsc2VgIHRvIGZsdXNoIG91dCB0aGUgbGVmdG92ZXIKK2JhZCBkYXRhLgorCitGSUxFIFNZU1RFTSBNT05JVE9SCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmVhdHVyZSBpcyBpbnRlbmRlZCB0byBzcGVlZCB1cCBnaXQgb3BlcmF0aW9ucyBmb3IgcmVwb3MgdGhhdCBoYXZlCitsYXJnZSB3b3JraW5nIGRpcmVjdG9yaWVzLgorCitJdCBlbmFibGVzIGdpdCB0byB3b3JrIHRvZ2V0aGVyIHdpdGggYSBmaWxlIHN5c3RlbSBtb25pdG9yIChzZWUgdGhlCisiZnNtb25pdG9yLXdhdGNobWFuIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0aG9va3NbNV0pIHRoYXQgY2FuCitpbmZvcm0gaXQgYXMgdG8gd2hhdCBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoaXMgZW5hYmxlcyBnaXQgdG8gYXZvaWQKK2hhdmluZyB0byBsc3RhdCgpIGV2ZXJ5IGZpbGUgdG8gZmluZCBtb2RpZmllZCBmaWxlcy4KKworV2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHVudHJhY2tlZCBjYWNoZSwgaXQgY2FuIGZ1cnRoZXIgaW1wcm92ZQorcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgdGhlIGNvc3Qgb2Ygc2Nhbm5pbmcgdGhlIGVudGlyZSB3b3JraW5nIGRpcmVjdG9yeQorbG9va2luZyBmb3IgbmV3IGZpbGVzLgorCitJZiB5b3Ugd2FudCB0byBlbmFibGUgKG9yIGRpc2FibGUpIHRoaXMgZmVhdHVyZSwgaXQgaXMgZWFzaWVyIHRvIHVzZQordGhlIGBjb3JlLmZzbW9uaXRvcmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pIHRoYW4gdXNpbmcgdGhlIGAtLWZzbW9uaXRvcmAgb3B0aW9uIHRvCitgZ2l0IHVwZGF0ZS1pbmRleGAgaW4gZWFjaCByZXBvc2l0b3J5LCBlc3BlY2lhbGx5IGlmIHlvdSB3YW50IHRvIGRvIHNvCithY3Jvc3MgYWxsIHJlcG9zaXRvcmllcyB5b3UgdXNlLCBiZWNhdXNlIHlvdSBjYW4gc2V0IHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSBpbiB5b3VyIGAkSE9NRS8uZ2l0Y29uZmlnYCBqdXN0IG9uY2UgYW5kIGhhdmUgaXQgYWZmZWN0IGFsbAorcmVwb3NpdG9yaWVzIHlvdSB0b3VjaC4KKworV2hlbiB0aGUgYGNvcmUuZnNtb25pdG9yYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIGNoYW5nZWQsIHRoZQorZmlsZSBzeXN0ZW0gbW9uaXRvciBpcyBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIGluZGV4IHRoZSBuZXh0IHRpbWUKK2EgY29tbWFuZCByZWFkcyB0aGUgaW5kZXguIFdoZW4gYC0tW25vLV1mc21vbml0b3JgIGFyZSB1c2VkLCB0aGUgZmlsZQorc3lzdGVtIG1vbml0b3IgaXMgaW1tZWRpYXRlbHkgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBpbmRleC4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBob25vcnMgYGNvcmUuZmlsZW1vZGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBJZgoreW91ciByZXBvc2l0b3J5IGlzIG9uIGEgZmlsZXN5c3RlbSB3aG9zZSBleGVjdXRhYmxlIGJpdHMgYXJlCit1bnJlbGlhYmxlLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gJ2ZhbHNlJyAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCitUaGlzIGNhdXNlcyB0aGUgY29tbWFuZCB0byBpZ25vcmUgZGlmZmVyZW5jZXMgaW4gZmlsZSBtb2RlcyByZWNvcmRlZAoraW4gdGhlIGluZGV4IGFuZCB0aGUgZmlsZSBtb2RlIG9uIHRoZSBmaWxlc3lzdGVtIGlmIHRoZXkgZGlmZmVyIG9ubHkgb24KK2V4ZWN1dGFibGUgYml0LiAgIE9uIHN1Y2ggYW4gdW5mb3J0dW5hdGUgZmlsZXN5c3RlbSwgeW91IG1heQorbmVlZCB0byB1c2UgJ2dpdCB1cGRhdGUtaW5kZXggLS1jaG1vZD0nLgorCitRdWl0ZSBzaW1pbGFybHksIGlmIGBjb3JlLnN5bWxpbmtzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHNldAordG8gJ2ZhbHNlJyAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSksIHN5bWJvbGljIGxpbmtzIGFyZSBjaGVja2VkIG91dAorYXMgcGxhaW4gZmlsZXMsIGFuZCB0aGlzIGNvbW1hbmQgZG9lcyBub3QgbW9kaWZ5IGEgcmVjb3JkZWQgZmlsZSBtb2RlCitmcm9tIHN5bWJvbGljIGxpbmsgdG8gcmVndWxhciBmaWxlLgorCitUaGUgY29tbWFuZCBsb29rcyBhdCBgY29yZS5pZ25vcmVzdGF0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiAgU2VlCisnVXNpbmcgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCcgc2VjdGlvbiBhYm92ZS4KKworVGhlIGNvbW1hbmQgYWxzbyBsb29rcyBhdCBgY29yZS50cnVzdGN0aW1lYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorSXQgY2FuIGJlIHVzZWZ1bCB3aGVuIHRoZSBpbm9kZSBjaGFuZ2UgdGltZSBpcyByZWd1bGFybHkgbW9kaWZpZWQgYnkKK3NvbWV0aGluZyBvdXRzaWRlIEdpdCAoZmlsZSBzeXN0ZW0gY3Jhd2xlcnMgYW5kIGJhY2t1cCBzeXN0ZW1zIHVzZQorY3RpbWUgZm9yIG1hcmtpbmcgZmlsZXMgcHJvY2Vzc2VkKSAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKK1RoZSB1bnRyYWNrZWQgY2FjaGUgZXh0ZW5zaW9uIGNhbiBiZSBlbmFibGVkIGJ5IHRoZQorYGNvcmUudW50cmFja2VkQ2FjaGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworTk9URVMKKy0tLS0tCisKK1VzZXJzIG9mdGVuIHRyeSB0byB1c2UgdGhlIGFzc3VtZS11bmNoYW5nZWQgYW5kIHNraXAtd29ya3RyZWUgYml0cwordG8gdGVsbCBHaXQgdG8gaWdub3JlIGNoYW5nZXMgdG8gZmlsZXMgdGhhdCBhcmUgdHJhY2tlZC4gIFRoaXMgZG9lcyBub3QKK3dvcmsgYXMgZXhwZWN0ZWQsIHNpbmNlIEdpdCBtYXkgc3RpbGwgY2hlY2sgd29ya2luZyB0cmVlIGZpbGVzIGFnYWluc3QKK3RoZSBpbmRleCB3aGVuIHBlcmZvcm1pbmcgY2VydGFpbiBvcGVyYXRpb25zLiAgSW4gZ2VuZXJhbCwgR2l0IGRvZXMgbm90Citwcm92aWRlIGEgd2F5IHRvIGlnbm9yZSBjaGFuZ2VzIHRvIHRyYWNrZWQgZmlsZXMsIHNvIGFsdGVybmF0ZSBzb2x1dGlvbnMKK2FyZSByZWNvbW1lbmRlZC4KKworRm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlIHlvdSB3YW50IHRvIGNoYW5nZSBpcyBzb21lIHNvcnQgb2YgY29uZmlnIGZpbGUsCit0aGUgcmVwb3NpdG9yeSBjYW4gaW5jbHVkZSBhIHNhbXBsZSBjb25maWcgZmlsZSB0aGF0IGNhbiB0aGVuIGJlIGNvcGllZAoraW50byB0aGUgaWdub3JlZCBuYW1lIGFuZCBtb2RpZmllZC4gIFRoZSByZXBvc2l0b3J5IGNhbiBldmVuIGluY2x1ZGUgYQorc2NyaXB0IHRvIHRyZWF0IHRoZSBzYW1wbGUgZmlsZSBhcyBhIHRlbXBsYXRlLCBtb2RpZnlpbmcgYW5kIGNvcHlpbmcgaXQKK2F1dG9tYXRpY2FsbHkuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY29uZmlnWzFdLAorbGlua2dpdDpnaXQtYWRkWzFdLAorbGlua2dpdDpnaXQtbHMtZmlsZXNbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1yZWYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzE0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtcmVmLnR4dApAQCAtMCwwICsxLDE1MiBAQAorZ2l0LXVwZGF0ZS1yZWYoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11cGRhdGUtcmVmIC0gVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB1cGRhdGUtcmVmJyBbLW0gPHJlYXNvbj5dIFstLW5vLWRlcmVmXSAoLWQgPHJlZj4gWzxvbGR2YWx1ZT5dIHwgWy0tY3JlYXRlLXJlZmxvZ10gPHJlZj4gPG5ld3ZhbHVlPiBbPG9sZHZhbHVlPl0gfCAtLXN0ZGluIFstel0pCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorR2l2ZW4gdHdvIGFyZ3VtZW50cywgc3RvcmVzIHRoZSA8bmV3dmFsdWU+IGluIHRoZSA8cmVmPiwgcG9zc2libHkKK2RlcmVmZXJlbmNpbmcgdGhlIHN5bWJvbGljIHJlZnMuICBFLmcuIGBnaXQgdXBkYXRlLXJlZiBIRUFECis8bmV3dmFsdWU+YCB1cGRhdGVzIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIHRvIHRoZSBuZXcgb2JqZWN0LgorCitHaXZlbiB0aHJlZSBhcmd1bWVudHMsIHN0b3JlcyB0aGUgPG5ld3ZhbHVlPiBpbiB0aGUgPHJlZj4sCitwb3NzaWJseSBkZXJlZmVyZW5jaW5nIHRoZSBzeW1ib2xpYyByZWZzLCBhZnRlciB2ZXJpZnlpbmcgdGhhdAordGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIDxyZWY+IG1hdGNoZXMgPG9sZHZhbHVlPi4KK0UuZy4gYGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIDxuZXd2YWx1ZT4gPG9sZHZhbHVlPmAKK3VwZGF0ZXMgdGhlIG1hc3RlciBicmFuY2ggaGVhZCB0byA8bmV3dmFsdWU+IG9ubHkgaWYgaXRzIGN1cnJlbnQKK3ZhbHVlIGlzIDxvbGR2YWx1ZT4uICBZb3UgY2FuIHNwZWNpZnkgNDAgIjAiIG9yIGFuIGVtcHR5IHN0cmluZworYXMgPG9sZHZhbHVlPiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVmIHlvdSBhcmUgY3JlYXRpbmcgZG9lcworbm90IGV4aXN0LgorCitJdCBhbHNvIGFsbG93cyBhICJyZWYiIGZpbGUgdG8gYmUgYSBzeW1ib2xpYyBwb2ludGVyIHRvIGFub3RoZXIKK3JlZiBmaWxlIGJ5IHN0YXJ0aW5nIHdpdGggdGhlIGZvdXItYnl0ZSBoZWFkZXIgc2VxdWVuY2Ugb2YKKyJyZWY6Ii4KKworTW9yZSBpbXBvcnRhbnRseSwgaXQgYWxsb3dzIHRoZSB1cGRhdGUgb2YgYSByZWYgZmlsZSB0byBmb2xsb3cKK3RoZXNlIHN5bWJvbGljIHBvaW50ZXJzLCB3aGV0aGVyIHRoZXkgYXJlIHN5bWxpbmtzIG9yIHRoZXNlCisicmVndWxhciBmaWxlIHN5bWJvbGljIHJlZnMiLiAgSXQgZm9sbG93cyAqcmVhbCogc3ltbGlua3Mgb25seQoraWYgdGhleSBzdGFydCB3aXRoICJyZWZzLyI6IG90aGVyd2lzZSBpdCB3aWxsIGp1c3QgdHJ5IHRvIHJlYWQKK3RoZW0gYW5kIHVwZGF0ZSB0aGVtIGFzIGEgcmVndWxhciBmaWxlIChpLmUuIGl0IHdpbGwgYWxsb3cgdGhlCitmaWxlc3lzdGVtIHRvIGZvbGxvdyB0aGVtLCBidXQgd2lsbCBvdmVyd3JpdGUgc3VjaCBhIHN5bWxpbmsgdG8KK3NvbWV3aGVyZSBlbHNlIHdpdGggYSByZWd1bGFyIGZpbGVuYW1lKS4KKworSWYgLS1uby1kZXJlZiBpcyBnaXZlbiwgPHJlZj4gaXRzZWxmIGlzIG92ZXJ3cml0dGVuLCByYXRoZXIgdGhhbgordGhlIHJlc3VsdCBvZiBmb2xsb3dpbmcgdGhlIHN5bWJvbGljIHBvaW50ZXJzLgorCitJbiBnZW5lcmFsLCB1c2luZworCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJGhlYWQiCisKK3Nob3VsZCBiZSBhIF9sb3RfIHNhZmVyIHRoYW4gZG9pbmcKKworCWVjaG8gIiRoZWFkIiA+ICIkR0lUX0RJUi9IRUFEIgorCitib3RoIGZyb20gYSBzeW1saW5rIGZvbGxvd2luZyBzdGFuZHBvaW50ICphbmQqIGFuIGVycm9yIGNoZWNraW5nCitzdGFuZHBvaW50LiAgVGhlICJyZWZzLyIgcnVsZSBmb3Igc3ltbGlua3MgbWVhbnMgdGhhdCBzeW1saW5rcwordGhhdCBwb2ludCB0byAib3V0c2lkZSIgdGhlIHRyZWUgYXJlIHNhZmU6IHRoZXknbGwgYmUgZm9sbG93ZWQKK2ZvciByZWFkaW5nIGJ1dCBub3QgZm9yIHdyaXRpbmcgKHNvIHdlJ2xsIG5ldmVyIHdyaXRlIHRocm91Z2ggYQorcmVmIHN5bWxpbmsgdG8gc29tZSBvdGhlciB0cmVlLCBpZiB5b3UgaGF2ZSBjb3BpZWQgYSB3aG9sZQorYXJjaGl2ZSBieSBjcmVhdGluZyBhIHN5bWxpbmsgdHJlZSkuCisKK1dpdGggYC1kYCBmbGFnLCBpdCBkZWxldGVzIHRoZSBuYW1lZCA8cmVmPiBhZnRlciB2ZXJpZnlpbmcgaXQKK3N0aWxsIGNvbnRhaW5zIDxvbGR2YWx1ZT4uCisKK1dpdGggYC0tc3RkaW5gLCB1cGRhdGUtcmVmIHJlYWRzIGluc3RydWN0aW9ucyBmcm9tIHN0YW5kYXJkIGlucHV0IGFuZAorcGVyZm9ybXMgYWxsIG1vZGlmaWNhdGlvbnMgdG9nZXRoZXIuICBTcGVjaWZ5IGNvbW1hbmRzIG9mIHRoZSBmb3JtOgorCisJdXBkYXRlIFNQIDxyZWY+IFNQIDxuZXd2YWx1ZT4gW1NQIDxvbGR2YWx1ZT5dIExGCisJY3JlYXRlIFNQIDxyZWY+IFNQIDxuZXd2YWx1ZT4gTEYKKwlkZWxldGUgU1AgPHJlZj4gW1NQIDxvbGR2YWx1ZT5dIExGCisJdmVyaWZ5IFNQIDxyZWY+IFtTUCA8b2xkdmFsdWU+XSBMRgorCW9wdGlvbiBTUCA8b3B0PiBMRgorCitXaXRoIGAtLWNyZWF0ZS1yZWZsb2dgLCB1cGRhdGUtcmVmIHdpbGwgY3JlYXRlIGEgcmVmbG9nIGZvciBlYWNoIHJlZgorZXZlbiBpZiBvbmUgd291bGQgbm90IG9yZGluYXJpbHkgYmUgY3JlYXRlZC4KKworUXVvdGUgZmllbGRzIGNvbnRhaW5pbmcgd2hpdGVzcGFjZSBhcyBpZiB0aGV5IHdlcmUgc3RyaW5ncyBpbiBDIHNvdXJjZQorY29kZTsgaS5lLiwgc3Vycm91bmRlZCBieSBkb3VibGUtcXVvdGVzIGFuZCB3aXRoIGJhY2tzbGFzaCBlc2NhcGVzLgorVXNlIDQwICIwIiBjaGFyYWN0ZXJzIG9yIHRoZSBlbXB0eSBzdHJpbmcgdG8gc3BlY2lmeSBhIHplcm8gdmFsdWUuICBUbworc3BlY2lmeSBhIG1pc3NpbmcgdmFsdWUsIG9taXQgdGhlIHZhbHVlIGFuZCBpdHMgcHJlY2VkaW5nIFNQIGVudGlyZWx5LgorCitBbHRlcm5hdGl2ZWx5LCB1c2UgYC16YCB0byBzcGVjaWZ5IGluIE5VTC10ZXJtaW5hdGVkIGZvcm1hdCwgd2l0aG91dAorcXVvdGluZzoKKworCXVwZGF0ZSBTUCA8cmVmPiBOVUwgPG5ld3ZhbHVlPiBOVUwgWzxvbGR2YWx1ZT5dIE5VTAorCWNyZWF0ZSBTUCA8cmVmPiBOVUwgPG5ld3ZhbHVlPiBOVUwKKwlkZWxldGUgU1AgPHJlZj4gTlVMIFs8b2xkdmFsdWU+XSBOVUwKKwl2ZXJpZnkgU1AgPHJlZj4gTlVMIFs8b2xkdmFsdWU+XSBOVUwKKwlvcHRpb24gU1AgPG9wdD4gTlVMCisKK0luIHRoaXMgZm9ybWF0LCB1c2UgNDAgIjAiIHRvIHNwZWNpZnkgYSB6ZXJvIHZhbHVlLCBhbmQgdXNlIHRoZSBlbXB0eQorc3RyaW5nIHRvIHNwZWNpZnkgYSBtaXNzaW5nIHZhbHVlLgorCitJbiBlaXRoZXIgZm9ybWF0LCB2YWx1ZXMgY2FuIGJlIHNwZWNpZmllZCBpbiBhbnkgZm9ybSB0aGF0IEdpdAorcmVjb2duaXplcyBhcyBhbiBvYmplY3QgbmFtZS4gIENvbW1hbmRzIGluIGFueSBvdGhlciBmb3JtYXQgb3IgYQorcmVwZWF0ZWQgPHJlZj4gcHJvZHVjZSBhbiBlcnJvci4gIENvbW1hbmQgbWVhbmluZ3MgYXJlOgorCit1cGRhdGU6OgorCVNldCA8cmVmPiB0byA8bmV3dmFsdWU+IGFmdGVyIHZlcmlmeWluZyA8b2xkdmFsdWU+LCBpZiBnaXZlbi4KKwlTcGVjaWZ5IGEgemVybyA8bmV3dmFsdWU+IHRvIGVuc3VyZSB0aGUgcmVmIGRvZXMgbm90IGV4aXN0CisJYWZ0ZXIgdGhlIHVwZGF0ZSBhbmQvb3IgYSB6ZXJvIDxvbGR2YWx1ZT4gdG8gbWFrZSBzdXJlIHRoZQorCXJlZiBkb2VzIG5vdCBleGlzdCBiZWZvcmUgdGhlIHVwZGF0ZS4KKworY3JlYXRlOjoKKwlDcmVhdGUgPHJlZj4gd2l0aCA8bmV3dmFsdWU+IGFmdGVyIHZlcmlmeWluZyBpdCBkb2VzIG5vdAorCWV4aXN0LiAgVGhlIGdpdmVuIDxuZXd2YWx1ZT4gbWF5IG5vdCBiZSB6ZXJvLgorCitkZWxldGU6OgorCURlbGV0ZSA8cmVmPiBhZnRlciB2ZXJpZnlpbmcgaXQgZXhpc3RzIHdpdGggPG9sZHZhbHVlPiwgaWYKKwlnaXZlbi4gIElmIGdpdmVuLCA8b2xkdmFsdWU+IG1heSBub3QgYmUgemVyby4KKwordmVyaWZ5OjoKKwlWZXJpZnkgPHJlZj4gYWdhaW5zdCA8b2xkdmFsdWU+IGJ1dCBkbyBub3QgY2hhbmdlIGl0LiAgSWYKKwk8b2xkdmFsdWU+IHplcm8gb3IgbWlzc2luZywgdGhlIHJlZiBtdXN0IG5vdCBleGlzdC4KKworb3B0aW9uOjoKKwlNb2RpZnkgYmVoYXZpb3Igb2YgdGhlIG5leHQgY29tbWFuZCBuYW1pbmcgYSA8cmVmPi4KKwlUaGUgb25seSB2YWxpZCBvcHRpb24gaXMgYG5vLWRlcmVmYCB0byBhdm9pZCBkZXJlZmVyZW5jaW5nCisJYSBzeW1ib2xpYyByZWYuCisKK0lmIGFsbCA8cmVmPnMgY2FuIGJlIGxvY2tlZCB3aXRoIG1hdGNoaW5nIDxvbGR2YWx1ZT5zCitzaW11bHRhbmVvdXNseSwgYWxsIG1vZGlmaWNhdGlvbnMgYXJlIHBlcmZvcm1lZC4gIE90aGVyd2lzZSwgbm8KK21vZGlmaWNhdGlvbnMgYXJlIHBlcmZvcm1lZC4gIE5vdGUgdGhhdCB3aGlsZSBlYWNoIGluZGl2aWR1YWwKKzxyZWY+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+L10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDcmVhdGVzIGEgdHJlZSBvYmplY3QgdXNpbmcgdGhlIGN1cnJlbnQgaW5kZXguIFRoZSBuYW1lIG9mIHRoZSBuZXcKK3RyZWUgb2JqZWN0IGlzIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0cHV0LgorCitUaGUgaW5kZXggbXVzdCBiZSBpbiBhIGZ1bGx5IG1lcmdlZCBzdGF0ZS4KKworQ29uY2VwdHVhbGx5LCAnZ2l0IHdyaXRlLXRyZWUnIHN5bmMoKXMgdGhlIGN1cnJlbnQgaW5kZXggY29udGVudHMKK2ludG8gYSBzZXQgb2YgdHJlZSBmaWxlcy4KK0luIG9yZGVyIHRvIGhhdmUgdGhhdCBtYXRjaCB3aGF0IGlzIGFjdHVhbGx5IGluIHlvdXIgZGlyZWN0b3J5IHJpZ2h0Citub3csIHlvdSBuZWVkIHRvIGhhdmUgZG9uZSBhICdnaXQgdXBkYXRlLWluZGV4JyBwaGFzZSBiZWZvcmUgeW91IGRpZCB0aGUKKydnaXQgd3JpdGUtdHJlZScuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1taXNzaW5nLW9rOjoKKwlOb3JtYWxseSAnZ2l0IHdyaXRlLXRyZWUnIGVuc3VyZXMgdGhhdCB0aGUgb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHRoZQorCWRpcmVjdG9yeSBleGlzdCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhpcworCWNoZWNrLgorCistLXByZWZpeD08cHJlZml4Pi86OgorCVdyaXRlcyBhIHRyZWUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHN1YmRpcmVjdG9yeQorCWA8cHJlZml4PmAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyaXRlIHRoZSB0cmVlIG9iamVjdAorCWZvciBhIHN1YnByb2plY3QgdGhhdCBpcyBpbiB0aGUgbmFtZWQgc3ViZGlyZWN0b3J5LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDY3MmJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CkBAIC0wLDAgKzEsOTg4IEBACitnaXQoMSkKKz09PT09PQorCitOQU1FCistLS0tCitnaXQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCcgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+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+fgorVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFwcGx5IHRvICdhbGwnIGNvcmUgR2l0IGNvbW1hbmRzLiBOYjogaXQKK2lzIHdvcnRoIG5vdGluZyB0aGF0IHRoZXkgbWF5IGJlIHVzZWQvb3ZlcnJpZGRlbiBieSBTQ01TIHNpdHRpbmcgYWJvdmUKK0dpdCBzbyB0YWtlIGNhcmUgaWYgdXNpbmcgYSBmb3JlaWduIGZyb250LWVuZC4KKworYEdJVF9JTkRFWF9GSUxFYDo6CisJVGhpcyBlbnZpcm9ubWVudCBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YgYW4gYWx0ZXJuYXRlCisJaW5kZXggZmlsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgb2YgYCRHSVRfRElSL2luZGV4YAorCWlzIHVzZWQuCisKK2BHSVRfSU5ERVhfVkVSU0lPTmA6OgorCVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgYWxsb3dzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFuIGluZGV4CisJdmVyc2lvbiBmb3IgbmV3IHJlcG9zaXRvcmllcy4gIEl0IHdvbid0IGFmZmVjdCBleGlzdGluZyBpbmRleAorCWZpbGVzLiAgQnkgZGVmYXVsdCBpbmRleCBmaWxlIHZlcnNpb24gMiBvciAzIGlzIHVzZWQuIFNlZQorCWxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworYEdJVF9PQkpFQ1RfRElSRUNUT1JZYDo6CisJSWYgdGhlIG9iamVjdCBzdG9yYWdlIGRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgdmlhIHRoaXMKKwllbnZpcm9ubWVudCB2YXJpYWJsZSB0aGVuIHRoZSBzaGExIGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkCisJdW5kZXJuZWF0aCAtIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBgJEdJVF9ESVIvb2JqZWN0c2AKKwlkaXJlY3RvcnkgaXMgdXNlZC4KKworYEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTYDo6CisJRHVlIHRvIHRoZSBpbW11dGFibGUgbmF0dXJlIG9mIEdpdCBvYmplY3RzLCBvbGQgb2JqZWN0cyBjYW4gYmUKKwlhcmNoaXZlZCBpbnRvIHNoYXJlZCwgcmVhZC1vbmx5IGRpcmVjdG9yaWVzLiBUaGlzIHZhcmlhYmxlCisJc3BlY2lmaWVzIGEgIjoiIHNlcGFyYXRlZCAob24gV2luZG93cyAiOyIgc2VwYXJhdGVkKSBsaXN0CisJb2YgR2l0IG9iamVjdCBkaXJlY3RvcmllcyB3aGljaCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIEdpdAorCW9iamVjdHMuIE5ldyBvYmplY3RzIHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlc2UgZGlyZWN0b3JpZXMuCisrCitFbnRyaWVzIHRoYXQgYmVnaW4gd2l0aCBgImAgKGRvdWJsZS1xdW90ZSkgd2lsbCBiZSBpbnRlcnByZXRlZAorYXMgQy1zdHlsZSBxdW90ZWQgcGF0aHMsIHJlbW92aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCitkb3VibGUtcXVvdGVzIGFuZCByZXNwZWN0aW5nIGJhY2tzbGFzaCBlc2NhcGVzLiBFLmcuLCB0aGUgdmFsdWUKK2AicGF0aC13aXRoLVwiLWFuZC06LWluLWl0Ijp2YW5pbGxhLXBhdGhgIGhhcyB0d28gcGF0aHM6CitgcGF0aC13aXRoLSItYW5kLTotaW4taXRgIGFuZCBgdmFuaWxsYS1wYXRoYC4KKworYEdJVF9ESVJgOjoKKwlJZiB0aGUgYEdJVF9ESVJgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0aGVuIGl0CisJc3BlY2lmaWVzIGEgcGF0aCB0byB1c2UgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgLmdpdGAKKwlmb3IgdGhlIGJhc2Ugb2YgdGhlIHJlcG9zaXRvcnkuCisJVGhlIGAtLWdpdC1kaXJgIGNvbW1hbmQtbGluZSBvcHRpb24gYWxzbyBzZXRzIHRoaXMgdmFsdWUuCisKK2BHSVRfV09SS19UUkVFYDo6CisJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUuCisJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IHRoZSBgLS13b3JrLXRyZWVgIGNvbW1hbmQtbGluZQorCW9wdGlvbiBhbmQgdGhlIGNvcmUud29ya3RyZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworYEdJVF9OQU1FU1BBQ0VgOjoKKwlTZXQgdGhlIEdpdCBuYW1lc3BhY2U7IHNlZSBsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10gZm9yIGRldGFpbHMuCisJVGhlIGAtLW5hbWVzcGFjZWAgY29tbWFuZC1saW5lIG9wdGlvbiBhbHNvIHNldHMgdGhpcyB2YWx1ZS4KKworYEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTYDo6CisJVGhpcyBzaG91bGQgYmUgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBhYnNvbHV0ZSBwYXRocy4gIElmCisJc2V0LCBpdCBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCBHaXQgc2hvdWxkIG5vdCBjaGRpciB1cAorCWludG8gd2hpbGUgbG9va2luZyBmb3IgYSByZXBvc2l0b3J5IGRpcmVjdG9yeSAodXNlZnVsIGZvcgorCWV4Y2x1ZGluZyBzbG93LWxvYWRpbmcgbmV0d29yayBkaXJlY3RvcmllcykuICBJdCB3aWxsIG5vdAorCWV4Y2x1ZGUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3IgYSBHSVRfRElSIHNldCBvbiB0aGUKKwljb21tYW5kIGxpbmUgb3IgaW4gdGhlIGVudmlyb25tZW50LiAgTm9ybWFsbHksIEdpdCBoYXMgdG8gcmVhZAorCXRoZSBlbnRyaWVzIGluIHRoaXMgbGlzdCBhbmQgcmVzb2x2ZSBhbnkgc3ltbGluayB0aGF0CisJbWlnaHQgYmUgcHJlc2VudCBpbiBvcmRlciB0byBjb21wYXJlIHRoZW0gd2l0aCB0aGUgY3VycmVudAorCWRpcmVjdG9yeS4gIEhvd2V2ZXIsIGlmIGV2ZW4gdGhpcyBhY2Nlc3MgaXMgc2xvdywgeW91CisJY2FuIGFkZCBhbiBlbXB0eSBlbnRyeSB0byB0aGUgbGlzdCB0byB0ZWxsIEdpdCB0aGF0IHRoZQorCXN1YnNlcXVlbnQgZW50cmllcyBhcmUgbm90IHN5bWxpbmtzIGFuZCBuZWVkbid0IGJlIHJlc29sdmVkOworCWUuZy4sCisJYEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPS9tYXliZS9zeW1saW5rOjovdmVyeS9zbG93L25vbi9zeW1saW5rYC4KKworYEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU1gOjoKKwlXaGVuIHJ1biBpbiBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGhhdmUgIi5naXQiIHJlcG9zaXRvcnkKKwlkaXJlY3RvcnksIEdpdCB0cmllcyB0byBmaW5kIHN1Y2ggYSBkaXJlY3RvcnkgaW4gdGhlIHBhcmVudAorCWRpcmVjdG9yaWVzIHRvIGZpbmQgdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlLCBidXQgYnkgZGVmYXVsdCBpdAorCWRvZXMgbm90IGNyb3NzIGZpbGVzeXN0ZW0gYm91bmRhcmllcy4gIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUKKwljYW4gYmUgc2V0IHRvIHRydWUgdG8gdGVsbCBHaXQgbm90IHRvIHN0b3AgYXQgZmlsZXN5c3RlbQorCWJvdW5kYXJpZXMuICBMaWtlIGBHSVRfQ0VJTElOR19ESVJFQ1RPUklFU2AsIHRoaXMgd2lsbCBub3QgYWZmZWN0CisJYW4gZXhwbGljaXQgcmVwb3NpdG9yeSBkaXJlY3Rvcnkgc2V0IHZpYSBgR0lUX0RJUmAgb3Igb24gdGhlCisJY29tbWFuZCBsaW5lLgorCitgR0lUX0NPTU1PTl9ESVJgOjoKKwlJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byBhIHBhdGgsIG5vbi13b3JrdHJlZSBmaWxlcyB0aGF0IGFyZQorCW5vcm1hbGx5IGluICRHSVRfRElSIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGlzIHBhdGgKKwlpbnN0ZWFkLiBXb3JrdHJlZS1zcGVjaWZpYyBmaWxlcyBzdWNoIGFzIEhFQUQgb3IgaW5kZXggYXJlCisJdGFrZW4gZnJvbSAkR0lUX0RJUi4gU2VlIGxpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0gYW5kCisJbGlua2dpdDpnaXQtd29ya3RyZWVbMV0gZm9yCisJZGV0YWlscy4gVGhpcyB2YXJpYWJsZSBoYXMgbG93ZXIgcHJlY2VkZW5jZSB0aGFuIG90aGVyIHBhdGgKKwl2YXJpYWJsZXMgc3VjaCBhcyBHSVRfSU5ERVhfRklMRSwgR0lUX09CSkVDVF9ESVJFQ1RPUlkuLi4KKworR2l0IENvbW1pdHMKK35+fn5+fn5+fn5+CitgR0lUX0FVVEhPUl9OQU1FYDo6CisJVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgdXNlZCBpbiB0aGUgYXV0aG9yIGlkZW50aXR5IHdoZW4gY3JlYXRpbmcgY29tbWl0IG9yCisJdGFnIG9iamVjdHMsIG9yIHdoZW4gd3JpdGluZyByZWZsb2dzLiBPdmVycmlkZXMgdGhlIGB1c2VyLm5hbWVgIGFuZAorCWBhdXRob3IubmFtZWAgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKworYEdJVF9BVVRIT1JfRU1BSUxgOjoKKwlUaGUgZW1haWwgYWRkcmVzcyB1c2VkIGluIHRoZSBhdXRob3IgaWRlbnRpdHkgd2hlbiBjcmVhdGluZyBjb21taXQgb3IKKwl0YWcgb2JqZWN0cywgb3Igd2hlbiB3cml0aW5nIHJlZmxvZ3MuIE92ZXJyaWRlcyB0aGUgYHVzZXIuZW1haWxgIGFuZAorCWBhdXRob3IuZW1haWxgIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKK2BHSVRfQVVUSE9SX0RBVEVgOjoKKwlUaGUgZGF0ZSB1c2VkIGZvciB0aGUgYXV0aG9yIGlkZW50aXR5IHdoZW4gY3JlYXRpbmcgY29tbWl0IG9yIHRhZyBvYmplY3RzLCBvcgorCXdoZW4gd3JpdGluZyByZWZsb2dzLiBTZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciB2YWxpZCBmb3JtYXRzLgorCitgR0lUX0NPTU1JVFRFUl9OQU1FYDo6CisJVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgdXNlZCBpbiB0aGUgY29tbWl0dGVyIGlkZW50aXR5IHdoZW4gY3JlYXRpbmcgY29tbWl0IG9yCisJdGFnIG9iamVjdHMsIG9yIHdoZW4gd3JpdGluZyByZWZsb2dzLiBPdmVycmlkZXMgdGhlIGB1c2VyLm5hbWVgIGFuZAorCWBjb21taXR0ZXIubmFtZWAgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKworYEdJVF9DT01NSVRURVJfRU1BSUxgOjoKKwlUaGUgZW1haWwgYWRkcmVzcyB1c2VkIGluIHRoZSBhdXRob3IgaWRlbnRpdHkgd2hlbiBjcmVhdGluZyBjb21taXQgb3IKKwl0YWcgb2JqZWN0cywgb3Igd2hlbiB3cml0aW5nIHJlZmxvZ3MuIE92ZXJyaWRlcyB0aGUgYHVzZXIuZW1haWxgIGFuZAorCWBjb21taXR0ZXIuZW1haWxgIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKK2BHSVRfQ09NTUlUVEVSX0RBVEVgOjoKKwlUaGUgZGF0ZSB1c2VkIGZvciB0aGUgY29tbWl0dGVyIGlkZW50aXR5IHdoZW4gY3JlYXRpbmcgY29tbWl0IG9yIHRhZyBvYmplY3RzLCBvcgorCXdoZW4gd3JpdGluZyByZWZsb2dzLiBTZWUgbGlua2dpdDpnaXQtY29tbWl0WzFdIGZvciB2YWxpZCBmb3JtYXRzLgorCitgRU1BSUxgOjoKKwlUaGUgZW1haWwgYWRkcmVzcyB1c2VkIGluIHRoZSBhdXRob3IgYW5kIGNvbW1pdHRlciBpZGVudGl0aWVzIGlmIG5vIG90aGVyCisJcmVsZXZhbnQgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5nIGhhcyBiZWVuIHNldC4KKworR2l0IERpZmZzCit+fn5+fn5+fn4KK2BHSVRfRElGRl9PUFRTYDo6CisJT25seSB2YWxpZCBzZXR0aW5nIGlzICItLXVuaWZpZWQ9Pz8iIG9yICItdT8/IiB0byBzZXQgdGhlCisJbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgc2hvd24gd2hlbiBhIHVuaWZpZWQgZGlmZiBpcyBjcmVhdGVkLgorCVRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFueSAiLVUiIG9yICItLXVuaWZpZWQiIG9wdGlvbgorCXZhbHVlIHBhc3NlZCBvbiB0aGUgR2l0IGRpZmYgY29tbWFuZCBsaW5lLgorCitgR0lUX0VYVEVSTkFMX0RJRkZgOjoKKwlXaGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUX0VYVEVSTkFMX0RJRkZgIGlzIHNldCwgdGhlCisJcHJvZ3JhbSBuYW1lZCBieSBpdCBpcyBjYWxsZWQsIGluc3RlYWQgb2YgdGhlIGRpZmYgaW52b2NhdGlvbgorCWRlc2NyaWJlZCBhYm92ZS4gIEZvciBhIHBhdGggdGhhdCBpcyBhZGRlZCwgcmVtb3ZlZCwgb3IgbW9kaWZpZWQsCisJYEdJVF9FWFRFUk5BTF9ESUZGYCBpcyBjYWxsZWQgd2l0aCA3IHBhcmFtZXRlcnM6CisKKwlwYXRoIG9sZC1maWxlIG9sZC1oZXggb2xkLW1vZGUgbmV3LWZpbGUgbmV3LWhleCBuZXctbW9kZQorKword2hlcmU6CisKKwk8b2xkfG5ldz4tZmlsZTo6IGFyZSBmaWxlcyBHSVRfRVhURVJOQUxfRElGRiBjYW4gdXNlIHRvIHJlYWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgb2YgPG9sZHxuZXc+LAorCTxvbGR8bmV3Pi1oZXg6OiBhcmUgdGhlIDQwLWhleGRpZ2l0IFNIQS0xIGhhc2hlcywKKwk8b2xkfG5ldz4tbW9kZTo6IGFyZSB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpbGUgbW9kZXMuCisrCitUaGUgZmlsZSBwYXJhbWV0ZXJzIGNhbiBwb2ludCBhdCB0aGUgdXNlcidzIHdvcmtpbmcgZmlsZQorKGUuZy4gYG5ldy1maWxlYCBpbiAiZ2l0LWRpZmYtZmlsZXMiKSwgYC9kZXYvbnVsbGAgKGUuZy4gYG9sZC1maWxlYAord2hlbiBhIG5ldyBmaWxlIGlzIGFkZGVkKSwgb3IgYSB0ZW1wb3JhcnkgZmlsZSAoZS5nLiBgb2xkLWZpbGVgIGluIHRoZQoraW5kZXgpLiAgYEdJVF9FWFRFUk5BTF9ESUZGYCBzaG91bGQgbm90IHdvcnJ5IGFib3V0IHVubGlua2luZyB0aGUKK3RlbXBvcmFyeSBmaWxlIC0tLSBpdCBpcyByZW1vdmVkIHdoZW4gYEdJVF9FWFRFUk5BTF9ESUZGYCBleGl0cy4KKysKK0ZvciBhIHBhdGggdGhhdCBpcyB1bm1lcmdlZCwgYEdJVF9FWFRFUk5BTF9ESUZGYCBpcyBjYWxsZWQgd2l0aCAxCitwYXJhbWV0ZXIsIDxwYXRoPi4KKysKK0ZvciBlYWNoIHBhdGggYEdJVF9FWFRFUk5BTF9ESUZGYCBpcyBjYWxsZWQsIHR3byBlbnZpcm9ubWVudCB2YXJpYWJsZXMsCitgR0lUX0RJRkZfUEFUSF9DT1VOVEVSYCBhbmQgYEdJVF9ESUZGX1BBVEhfVE9UQUxgIGFyZSBzZXQuCisKK2BHSVRfRElGRl9QQVRIX0NPVU5URVJgOjoKKwlBIDEtYmFzZWQgY291bnRlciBpbmNyZW1lbnRlZCBieSBvbmUgZm9yIGV2ZXJ5IHBhdGguCisKK2BHSVRfRElGRl9QQVRIX1RPVEFMYDo6CisJVGhlIHRvdGFsIG51bWJlciBvZiBwYXRocy4KKworb3RoZXIKK35+fn5+CitgR0lUX01FUkdFX1ZFUkJPU0lUWWA6OgorCUEgbnVtYmVyIGNvbnRyb2xsaW5nIHRoZSBhbW91bnQgb2Ygb3V0cHV0IHNob3duIGJ5CisJdGhlIHJlY3Vyc2l2ZSBtZXJnZSBzdHJhdGVneS4gIE92ZXJyaWRlcyBtZXJnZS52ZXJib3NpdHkuCisJU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCisKK2BHSVRfUEFHRVJgOjoKKwlUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyBgJFBBR0VSYC4gSWYgaXQgaXMgc2V0CisJdG8gYW4gZW1wdHkgc3RyaW5nIG9yIHRvIHRoZSB2YWx1ZSAiY2F0IiwgR2l0IHdpbGwgbm90IGxhdW5jaAorCWEgcGFnZXIuICBTZWUgYWxzbyB0aGUgYGNvcmUucGFnZXJgIG9wdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworYEdJVF9QUk9HUkVTU19ERUxBWWA6OgorCUEgbnVtYmVyIGNvbnRyb2xsaW5nIGhvdyBtYW55IHNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIHNob3dpbmcKKwlvcHRpb25hbCBwcm9ncmVzcyBpbmRpY2F0b3JzLiBEZWZhdWx0cyB0byAyLgorCitgR0lUX0VESVRPUmA6OgorCVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzIGAkRURJVE9SYCBhbmQgYCRWSVNVQUxgLgorCUl0IGlzIHVzZWQgYnkgc2V2ZXJhbCBHaXQgY29tbWFuZHMgd2hlbiwgb24gaW50ZXJhY3RpdmUgbW9kZSwKKwlhbiBlZGl0b3IgaXMgdG8gYmUgbGF1bmNoZWQuIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXZhclsxXQorCWFuZCB0aGUgYGNvcmUuZWRpdG9yYCBvcHRpb24gaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitgR0lUX1NTSGA6OgorYEdJVF9TU0hfQ09NTUFORGA6OgorCUlmIGVpdGhlciBvZiB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaXMgc2V0IHRoZW4gJ2dpdCBmZXRjaCcKKwlhbmQgJ2dpdCBwdXNoJyB3aWxsIHVzZSB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgaW5zdGVhZCBvZiAnc3NoJworCXdoZW4gdGhleSBuZWVkIHRvIGNvbm5lY3QgdG8gYSByZW1vdGUgc3lzdGVtLgorCVRoZSBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGNvbmZpZ3VyZWQgY29tbWFuZCBhcmUKKwlkZXRlcm1pbmVkIGJ5IHRoZSBzc2ggdmFyaWFudC4gIFNlZSBgc3NoLnZhcmlhbnRgIG9wdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgZGV0YWlscy4KKysKK2AkR0lUX1NTSF9DT01NQU5EYCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYCRHSVRfU1NIYCwgYW5kIGlzIGludGVycHJldGVkCitieSB0aGUgc2hlbGwsIHdoaWNoIGFsbG93cyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBpbmNsdWRlZC4KK2AkR0lUX1NTSGAgb24gdGhlIG90aGVyIGhhbmQgbXVzdCBiZSBqdXN0IHRoZSBwYXRoIHRvIGEgcHJvZ3JhbQorKHdoaWNoIGNhbiBiZSBhIHdyYXBwZXIgc2hlbGwgc2NyaXB0LCBpZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUKK25lZWRlZCkuCisrCitVc3VhbGx5IGl0IGlzIGVhc2llciB0byBjb25maWd1cmUgYW55IGRlc2lyZWQgb3B0aW9ucyB0aHJvdWdoIHlvdXIKK3BlcnNvbmFsIGAuc3NoL2NvbmZpZ2AgZmlsZS4gIFBsZWFzZSBjb25zdWx0IHlvdXIgc3NoIGRvY3VtZW50YXRpb24KK2ZvciBmdXJ0aGVyIGRldGFpbHMuCisKK2BHSVRfU1NIX1ZBUklBTlRgOjoKKwlJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgaXQgb3ZlcnJpZGVzIEdpdCdzIGF1dG9kZXRlY3Rpb24KKwl3aGV0aGVyIGBHSVRfU1NIYC9gR0lUX1NTSF9DT01NQU5EYC9gY29yZS5zc2hDb21tYW5kYCByZWZlciB0byBPcGVuU1NILAorCXBsaW5rIG9yIHRvcnRvaXNlcGxpbmsuIFRoaXMgdmFyaWFibGUgb3ZlcnJpZGVzIHRoZSBjb25maWcgc2V0dGluZworCWBzc2gudmFyaWFudGAgdGhhdCBzZXJ2ZXMgdGhlIHNhbWUgcHVycG9zZS4KKworYEdJVF9BU0tQQVNTYDo6CisJSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHRoZW4gR2l0IGNvbW1hbmRzIHdoaWNoIG5lZWQgdG8KKwlhY3F1aXJlIHBhc3N3b3JkcyBvciBwYXNzcGhyYXNlcyAoZS5nLiBmb3IgSFRUUCBvciBJTUFQIGF1dGhlbnRpY2F0aW9uKQorCXdpbGwgY2FsbCB0aGlzIHByb2dyYW0gd2l0aCBhIHN1aXRhYmxlIHByb21wdCBhcyBjb21tYW5kLWxpbmUgYXJndW1lbnQKKwlhbmQgcmVhZCB0aGUgcGFzc3dvcmQgZnJvbSBpdHMgU1RET1VULiBTZWUgYWxzbyB0aGUgYGNvcmUuYXNrUGFzc2AKKwlvcHRpb24gaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitgR0lUX1RFUk1JTkFMX1BST01QVGA6OgorCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGAwYCwgZ2l0IHdpbGwgbm90IHByb21wdAorCW9uIHRoZSB0ZXJtaW5hbCAoZS5nLiwgd2hlbiBhc2tpbmcgZm9yIEhUVFAgYXV0aGVudGljYXRpb24pLgorCitgR0lUX0NPTkZJR19OT1NZU1RFTWA6OgorCVdoZXRoZXIgdG8gc2tpcCByZWFkaW5nIHNldHRpbmdzIGZyb20gdGhlIHN5c3RlbS13aWRlCisJYCQocHJlZml4KS9ldGMvZ2l0Y29uZmlnYCBmaWxlLiAgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4KKwliZSB1c2VkIGFsb25nIHdpdGggYCRIT01FYCBhbmQgYCRYREdfQ09ORklHX0hPTUVgIHRvIGNyZWF0ZSBhCisJcHJlZGljdGFibGUgZW52aXJvbm1lbnQgZm9yIGEgcGlja3kgc2NyaXB0LCBvciB5b3UgY2FuIHNldCBpdAorCXRlbXBvcmFyaWx5IHRvIGF2b2lkIHVzaW5nIGEgYnVnZ3kgYC9ldGMvZ2l0Y29uZmlnYCBmaWxlIHdoaWxlCisJd2FpdGluZyBmb3Igc29tZW9uZSB3aXRoIHN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gZml4IGl0LgorCitgR0lUX0ZMVVNIYDo6CisJSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiLCB0aGVuIGNvbW1hbmRzIHN1Y2gKKwlhcyAnZ2l0IGJsYW1lJyAoaW4gaW5jcmVtZW50YWwgbW9kZSksICdnaXQgcmV2LWxpc3QnLCAnZ2l0IGxvZycsCisJJ2dpdCBjaGVjay1hdHRyJyBhbmQgJ2dpdCBjaGVjay1pZ25vcmUnIHdpbGwKKwlmb3JjZSBhIGZsdXNoIG9mIHRoZSBvdXRwdXQgc3RyZWFtIGFmdGVyIGVhY2ggcmVjb3JkIGhhdmUgYmVlbgorCWZsdXNoZWQuIElmIHRoaXMKKwl2YXJpYWJsZSBpcyBzZXQgdG8gIjAiLCB0aGUgb3V0cHV0IG9mIHRoZXNlIGNvbW1hbmRzIHdpbGwgYmUgZG9uZQorCXVzaW5nIGNvbXBsZXRlbHkgYnVmZmVyZWQgSS9PLiAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMKKwlub3Qgc2V0LCBHaXQgd2lsbCBjaG9vc2UgYnVmZmVyZWQgb3IgcmVjb3JkLW9yaWVudGVkIGZsdXNoaW5nCisJYmFzZWQgb24gd2hldGhlciBzdGRvdXQgYXBwZWFycyB0byBiZSByZWRpcmVjdGVkIHRvIGEgZmlsZSBvciBub3QuCisKK2BHSVRfVFJBQ0VgOjoKKwlFbmFibGVzIGdlbmVyYWwgdHJhY2UgbWVzc2FnZXMsIGUuZy4gYWxpYXMgZXhwYW5zaW9uLCBidWlsdC1pbgorCWNvbW1hbmQgZXhlY3V0aW9uIGFuZCBleHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbi4KKysKK0lmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgIjIiIG9yICJ0cnVlIiAoY29tcGFyaXNvbgoraXMgY2FzZSBpbnNlbnNpdGl2ZSksIHRyYWNlIG1lc3NhZ2VzIHdpbGwgYmUgcHJpbnRlZCB0bworc3RkZXJyLgorKworSWYgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBhbiBpbnRlZ2VyIHZhbHVlIGdyZWF0ZXIgdGhhbiAyCithbmQgbG93ZXIgdGhhbiAxMCAoc3RyaWN0bHkpIHRoZW4gR2l0IHdpbGwgaW50ZXJwcmV0IHRoaXMKK3ZhbHVlIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGFuZCB3aWxsIHRyeSB0byB3cml0ZSB0aGUKK3RyYWNlIG1lc3NhZ2VzIGludG8gdGhpcyBmaWxlIGRlc2NyaXB0b3IuCisrCitBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIGFuIGFic29sdXRlIHBhdGgKKyhzdGFydGluZyB3aXRoIGEgJy8nIGNoYXJhY3RlciksIEdpdCB3aWxsIGludGVycHJldCB0aGlzCithcyBhIGZpbGUgcGF0aCBhbmQgd2lsbCB0cnkgdG8gYXBwZW5kIHRoZSB0cmFjZSBtZXNzYWdlcwordG8gaXQuCisrCitVbnNldHRpbmcgdGhlIHZhcmlhYmxlLCBvciBzZXR0aW5nIGl0IHRvIGVtcHR5LCAiMCIgb3IKKyJmYWxzZSIgKGNhc2UgaW5zZW5zaXRpdmUpIGRpc2FibGVzIHRyYWNlIG1lc3NhZ2VzLgorCitgR0lUX1RSQUNFX0ZTTU9OSVRPUmA6OgorCUVuYWJsZXMgdHJhY2UgbWVzc2FnZXMgZm9yIHRoZSBmaWxlc3lzdGVtIG1vbml0b3IgZXh0ZW5zaW9uLgorCVNlZSBgR0lUX1RSQUNFYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCitgR0lUX1RSQUNFX1BBQ0tfQUNDRVNTYDo6CisJRW5hYmxlcyB0cmFjZSBtZXNzYWdlcyBmb3IgYWxsIGFjY2Vzc2VzIHRvIGFueSBwYWNrcy4gRm9yIGVhY2gKKwlhY2Nlc3MsIHRoZSBwYWNrIGZpbGUgbmFtZSBhbmQgYW4gb2Zmc2V0IGluIHRoZSBwYWNrIGlzCisJcmVjb3JkZWQuIFRoaXMgbWF5IGJlIGhlbHBmdWwgZm9yIHRyb3VibGVzaG9vdGluZyBzb21lCisJcGFjay1yZWxhdGVkIHBlcmZvcm1hbmNlIHByb2JsZW1zLgorCVNlZSBgR0lUX1RSQUNFYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCitgR0lUX1RSQUNFX1BBQ0tFVGA6OgorCUVuYWJsZXMgdHJhY2UgbWVzc2FnZXMgZm9yIGFsbCBwYWNrZXRzIGNvbWluZyBpbiBvciBvdXQgb2YgYQorCWdpdmVuIHByb2dyYW0uIFRoaXMgY2FuIGhlbHAgd2l0aCBkZWJ1Z2dpbmcgb2JqZWN0IG5lZ290aWF0aW9uCisJb3Igb3RoZXIgcHJvdG9jb2wgaXNzdWVzLiBUcmFjaW5nIGlzIHR1cm5lZCBvZmYgYXQgYSBwYWNrZXQKKwlzdGFydGluZyB3aXRoICJQQUNLIiAoYnV0IHNlZSBgR0lUX1RSQUNFX1BBQ0tGSUxFYCBiZWxvdykuCisJU2VlIGBHSVRfVFJBQ0VgIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCisKK2BHSVRfVFJBQ0VfUEFDS0ZJTEVgOjoKKwlFbmFibGVzIHRyYWNpbmcgb2YgcGFja2ZpbGVzIHNlbnQgb3IgcmVjZWl2ZWQgYnkgYQorCWdpdmVuIHByb2dyYW0uIFVubGlrZSBvdGhlciB0cmFjZSBvdXRwdXQsIHRoaXMgdHJhY2UgaXMKKwl2ZXJiYXRpbTogbm8gaGVhZGVycywgYW5kIG5vIHF1b3Rpbmcgb2YgYmluYXJ5IGRhdGEuIFlvdSBhbG1vc3QKKwljZXJ0YWlubHkgd2FudCB0byBkaXJlY3QgaW50byBhIGZpbGUgKGUuZy4sCisJYEdJVF9UUkFDRV9QQUNLRklMRT0vdG1wL215LnBhY2tgKSByYXRoZXIgdGhhbiBkaXNwbGF5aW5nIGl0IG9uCisJdGhlIHRlcm1pbmFsIG9yIG1peGluZyBpdCB3aXRoIG90aGVyIHRyYWNlIG91dHB1dC4KKysKK05vdGUgdGhhdCB0aGlzIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgY2xpZW50IHNpZGUKK29mIGNsb25lcyBhbmQgZmV0Y2hlcy4KKworYEdJVF9UUkFDRV9QRVJGT1JNQU5DRWA6OgorCUVuYWJsZXMgcGVyZm9ybWFuY2UgcmVsYXRlZCB0cmFjZSBtZXNzYWdlcywgZS5nLiB0b3RhbCBleGVjdXRpb24KKwl0aW1lIG9mIGVhY2ggR2l0IGNvbW1hbmQuCisJU2VlIGBHSVRfVFJBQ0VgIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCisKK2BHSVRfVFJBQ0VfU0VUVVBgOjoKKwlFbmFibGVzIHRyYWNlIG1lc3NhZ2VzIHByaW50aW5nIHRoZSAuZ2l0LCB3b3JraW5nIHRyZWUgYW5kIGN1cnJlbnQKKwl3b3JraW5nIGRpcmVjdG9yeSBhZnRlciBHaXQgaGFzIGNvbXBsZXRlZCBpdHMgc2V0dXAgcGhhc2UuCisJU2VlIGBHSVRfVFJBQ0VgIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCisKK2BHSVRfVFJBQ0VfU0hBTExPV2A6OgorCUVuYWJsZXMgdHJhY2UgbWVzc2FnZXMgdGhhdCBjYW4gaGVscCBkZWJ1Z2dpbmcgZmV0Y2hpbmcgLworCWNsb25pbmcgb2Ygc2hhbGxvdyByZXBvc2l0b3JpZXMuCisJU2VlIGBHSVRfVFJBQ0VgIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCisKK2BHSVRfVFJBQ0VfQ1VSTGA6OgorCUVuYWJsZXMgYSBjdXJsIGZ1bGwgdHJhY2UgZHVtcCBvZiBhbGwgaW5jb21pbmcgYW5kIG91dGdvaW5nIGRhdGEsCisJaW5jbHVkaW5nIGRlc2NyaXB0aXZlIGluZm9ybWF0aW9uLCBvZiB0aGUgZ2l0IHRyYW5zcG9ydCBwcm90b2NvbC4KKwlUaGlzIGlzIHNpbWlsYXIgdG8gZG9pbmcgY3VybCBgLS10cmFjZS1hc2NpaWAgb24gdGhlIGNvbW1hbmQgbGluZS4KKwlUaGlzIG9wdGlvbiBvdmVycmlkZXMgc2V0dGluZyB0aGUgYEdJVF9DVVJMX1ZFUkJPU0VgIGVudmlyb25tZW50CisJdmFyaWFibGUuCisJU2VlIGBHSVRfVFJBQ0VgIGZvciBhdmFpbGFibGUgdHJhY2Ugb3V0cHV0IG9wdGlvbnMuCisKK2BHSVRfVFJBQ0VfQ1VSTF9OT19EQVRBYDo6CisJV2hlbiBhIGN1cmwgdHJhY2UgaXMgZW5hYmxlZCAoc2VlIGBHSVRfVFJBQ0VfQ1VSTGAgYWJvdmUpLCBkbyBub3QgZHVtcAorCWRhdGEgKHRoYXQgaXMsIG9ubHkgZHVtcCBpbmZvIGxpbmVzIGFuZCBoZWFkZXJzKS4KKworYEdJVF9UUkFDRTJgOjoKKwlFbmFibGVzIG1vcmUgZGV0YWlsZWQgdHJhY2UgbWVzc2FnZXMgZnJvbSB0aGUgInRyYWNlMiIgbGlicmFyeS4KKwlPdXRwdXQgZnJvbSBgR0lUX1RSQUNFMmAgaXMgYSBzaW1wbGUgdGV4dC1iYXNlZCBmb3JtYXQgZm9yIGh1bWFuCisJcmVhZGFiaWxpdHkuCisrCitJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAiMSIsICIyIiBvciAidHJ1ZSIgKGNvbXBhcmlzb24KK2lzIGNhc2UgaW5zZW5zaXRpdmUpLCB0cmFjZSBtZXNzYWdlcyB3aWxsIGJlIHByaW50ZWQgdG8KK3N0ZGVyci4KKysKK0lmIHRoZSB2YXJpYWJsZSBpcyBzZXQgdG8gYW4gaW50ZWdlciB2YWx1ZSBncmVhdGVyIHRoYW4gMgorYW5kIGxvd2VyIHRoYW4gMTAgKHN0cmljdGx5KSB0aGVuIEdpdCB3aWxsIGludGVycHJldCB0aGlzCit2YWx1ZSBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBhbmQgd2lsbCB0cnkgdG8gd3JpdGUgdGhlCit0cmFjZSBtZXNzYWdlcyBpbnRvIHRoaXMgZmlsZSBkZXNjcmlwdG9yLgorKworQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBhbiBhYnNvbHV0ZSBwYXRoCisoc3RhcnRpbmcgd2l0aCBhICcvJyBjaGFyYWN0ZXIpLCBHaXQgd2lsbCBpbnRlcnByZXQgdGhpcworYXMgYSBmaWxlIHBhdGggYW5kIHdpbGwgdHJ5IHRvIGFwcGVuZCB0aGUgdHJhY2UgbWVzc2FnZXMKK3RvIGl0LiAgSWYgdGhlIHBhdGggYWxyZWFkeSBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5LCB0aGUKK3RyYWNlIG1lc3NhZ2VzIHdpbGwgYmUgd3JpdHRlbiB0byBmaWxlcyAob25lIHBlciBwcm9jZXNzKQoraW4gdGhhdCBkaXJlY3RvcnksIG5hbWVkIGFjY29yZGluZyB0byB0aGUgbGFzdCBjb21wb25lbnQKK29mIHRoZSBTSUQgYW5kIGFuIG9wdGlvbmFsIGNvdW50ZXIgKHRvIGF2b2lkIGZpbGVuYW1lCitjb2xsaXNpb25zKS4KKysKK0luIGFkZGl0aW9uLCBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IHRvCitgYWZfdW5peDpbPHNvY2tldF90eXBlPjpdPGFic29sdXRlLXBhdGhuYW1lPmAsIEdpdCB3aWxsIHRyeQordG8gb3BlbiB0aGUgcGF0aCBhcyBhIFVuaXggRG9tYWluIFNvY2tldC4gIFRoZSBzb2NrZXQgdHlwZQorY2FuIGJlIGVpdGhlciBgc3RyZWFtYCBvciBgZGdyYW1gLgorKworVW5zZXR0aW5nIHRoZSB2YXJpYWJsZSwgb3Igc2V0dGluZyBpdCB0byBlbXB0eSwgIjAiIG9yCisiZmFsc2UiIChjYXNlIGluc2Vuc2l0aXZlKSBkaXNhYmxlcyB0cmFjZSBtZXNzYWdlcy4KKysKK1NlZSBsaW5rOnRlY2huaWNhbC9hcGktdHJhY2UyLmh0bWxbVHJhY2UyIGRvY3VtZW50YXRpb25dCitmb3IgZnVsbCBkZXRhaWxzLgorCisKK2BHSVRfVFJBQ0UyX0VWRU5UYDo6CisJVGhpcyBzZXR0aW5nIHdyaXRlcyBhIEpTT04tYmFzZWQgZm9ybWF0IHRoYXQgaXMgc3VpdGVkIGZvciBtYWNoaW5lCisJaW50ZXJwcmV0YXRpb24uCisJU2VlIGBHSVRfVFJBQ0UyYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zIGFuZAorCWxpbms6dGVjaG5pY2FsL2FwaS10cmFjZTIuaHRtbFtUcmFjZTIgZG9jdW1lbnRhdGlvbl0gZm9yIGZ1bGwgZGV0YWlscy4KKworYEdJVF9UUkFDRTJfUEVSRmA6OgorCUluIGFkZGl0aW9uIHRvIHRoZSB0ZXh0LWJhc2VkIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBgR0lUX1RSQUNFMmAsIHRoaXMKKwlzZXR0aW5nIHdyaXRlcyBhIGNvbHVtbi1iYXNlZCBmb3JtYXQgZm9yIHVuZGVyc3RhbmRpbmcgbmVzdGluZworCXJlZ2lvbnMuCisJU2VlIGBHSVRfVFJBQ0UyYCBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zIGFuZAorCWxpbms6dGVjaG5pY2FsL2FwaS10cmFjZTIuaHRtbFtUcmFjZTIgZG9jdW1lbnRhdGlvbl0gZm9yIGZ1bGwgZGV0YWlscy4KKworYEdJVF9SRURBQ1RfQ09PS0lFU2A6OgorCVRoaXMgY2FuIGJlIHNldCB0byBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MuIFdoZW4gYSBjdXJsIHRyYWNlCisJaXMgZW5hYmxlZCAoc2VlIGBHSVRfVFJBQ0VfQ1VSTGAgYWJvdmUpLCB3aGVuZXZlciBhICJDb29raWVzOiIgaGVhZGVyCisJc2VudCBieSB0aGUgY2xpZW50IGlzIGR1bXBlZCwgdmFsdWVzIG9mIGNvb2tpZXMgd2hvc2Uga2V5IGlzIGluIHRoYXQKKwlsaXN0IChjYXNlLXNlbnNpdGl2ZSkgYXJlIHJlZGFjdGVkLgorCitgR0lUX0xJVEVSQUxfUEFUSFNQRUNTYDo6CisJU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGAxYCB3aWxsIGNhdXNlIEdpdCB0byB0cmVhdCBhbGwKKwlwYXRoc3BlY3MgbGl0ZXJhbGx5LCByYXRoZXIgdGhhbiBhcyBnbG9iIHBhdHRlcm5zLiBGb3IgZXhhbXBsZSwKKwlydW5uaW5nIGBHSVRfTElURVJBTF9QQVRIU1BFQ1M9MSBnaXQgbG9nIC0tICcqLmMnYCB3aWxsIHNlYXJjaAorCWZvciBjb21taXRzIHRoYXQgdG91Y2ggdGhlIHBhdGggYCouY2AsIG5vdCBhbnkgcGF0aHMgdGhhdCB0aGUKKwlnbG9iIGAqLmNgIG1hdGNoZXMuIFlvdSBtaWdodCB3YW50IHRoaXMgaWYgeW91IGFyZSBmZWVkaW5nCisJbGl0ZXJhbCBwYXRocyB0byBHaXQgKGUuZy4sIHBhdGhzIHByZXZpb3VzbHkgZ2l2ZW4gdG8geW91IGJ5CisJYGdpdCBscy10cmVlYCwgYC0tcmF3YCBkaWZmIG91dHB1dCwgZXRjKS4KKworYEdJVF9HTE9CX1BBVEhTUEVDU2A6OgorCVNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBgMWAgd2lsbCBjYXVzZSBHaXQgdG8gdHJlYXQgYWxsCisJcGF0aHNwZWNzIGFzIGdsb2IgcGF0dGVybnMgKGFrYSAiZ2xvYiIgbWFnaWMpLgorCitgR0lUX05PR0xPQl9QQVRIU1BFQ1NgOjoKKwlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYDFgIHdpbGwgY2F1c2UgR2l0IHRvIHRyZWF0IGFsbAorCXBhdGhzcGVjcyBhcyBsaXRlcmFsIChha2EgImxpdGVyYWwiIG1hZ2ljKS4KKworYEdJVF9JQ0FTRV9QQVRIU1BFQ1NgOjoKKwlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYDFgIHdpbGwgY2F1c2UgR2l0IHRvIHRyZWF0IGFsbAorCXBhdGhzcGVjcyBhcyBjYXNlLWluc2Vuc2l0aXZlLgorCitgR0lUX1JFRkxPR19BQ1RJT05gOjoKKwlXaGVuIGEgcmVmIGlzIHVwZGF0ZWQsIHJlZmxvZyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRvIGtlZXAKKwl0cmFjayBvZiB0aGUgcmVhc29uIHdoeSB0aGUgcmVmIHdhcyB1cGRhdGVkICh3aGljaCBpcworCXR5cGljYWxseSB0aGUgbmFtZSBvZiB0aGUgaGlnaC1sZXZlbCBjb21tYW5kIHRoYXQgdXBkYXRlZAorCXRoZSByZWYpLCBpbiBhZGRpdGlvbiB0byB0aGUgb2xkIGFuZCBuZXcgdmFsdWVzIG9mIHRoZSByZWYuCisJQSBzY3JpcHRlZCBQb3JjZWxhaW4gY29tbWFuZCBjYW4gdXNlIHNldF9yZWZsb2dfYWN0aW9uCisJaGVscGVyIGZ1bmN0aW9uIGluIGBnaXQtc2gtc2V0dXBgIHRvIHNldCBpdHMgbmFtZSB0byB0aGlzCisJdmFyaWFibGUgd2hlbiBpdCBpcyBpbnZva2VkIGFzIHRoZSB0b3AgbGV2ZWwgY29tbWFuZCBieSB0aGUKKwllbmQgdXNlciwgdG8gYmUgcmVjb3JkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIHJlZmxvZy4KKworYEdJVF9SRUZfUEFSQU5PSUFgOjoKKwlJZiBzZXQgdG8gYDFgLCBpbmNsdWRlIGJyb2tlbiBvciBiYWRseSBuYW1lZCByZWZzIHdoZW4gaXRlcmF0aW5nCisJb3ZlciBsaXN0cyBvZiByZWZzLiBJbiBhIG5vcm1hbCwgbm9uLWNvcnJ1cHRlZCByZXBvc2l0b3J5LCB0aGlzCisJZG9lcyBub3RoaW5nLiBIb3dldmVyLCBlbmFibGluZyBpdCBtYXkgaGVscCBnaXQgdG8gZGV0ZWN0IGFuZAorCWFib3J0IHNvbWUgb3BlcmF0aW9ucyBpbiB0aGUgcHJlc2VuY2Ugb2YgYnJva2VuIHJlZnMuIEdpdCBzZXRzCisJdGhpcyB2YXJpYWJsZSBhdXRvbWF0aWNhbGx5IHdoZW4gcGVyZm9ybWluZyBkZXN0cnVjdGl2ZQorCW9wZXJhdGlvbnMgbGlrZSBsaW5rZ2l0OmdpdC1wcnVuZVsxXS4gWW91IHNob3VsZCBub3QgbmVlZCB0byBzZXQKKwlpdCB5b3Vyc2VsZiB1bmxlc3MgeW91IHdhbnQgdG8gYmUgcGFyYW5vaWQgYWJvdXQgbWFraW5nIHN1cmUKKwlhbiBvcGVyYXRpb24gaGFzIHRvdWNoZWQgZXZlcnkgcmVmIChlLmcuLCBiZWNhdXNlIHlvdSBhcmUKKwljbG9uaW5nIGEgcmVwb3NpdG9yeSB0byBtYWtlIGEgYmFja3VwKS4KKworYEdJVF9BTExPV19QUk9UT0NPTGA6OgorCUlmIHNldCB0byBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHByb3RvY29scywgYmVoYXZlIGFzIGlmCisJYHByb3RvY29sLmFsbG93YCBpcyBzZXQgdG8gYG5ldmVyYCwgYW5kIGVhY2ggb2YgdGhlIGxpc3RlZAorCXByb3RvY29scyBoYXMgYHByb3RvY29sLjxuYW1lPi5hbGxvd2Agc2V0IHRvIGBhbHdheXNgCisJKG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24pLiBJbiBvdGhlciB3b3JkcywgYW55CisJcHJvdG9jb2wgbm90IG1lbnRpb25lZCB3aWxsIGJlIGRpc2FsbG93ZWQgKGkuZS4sIHRoaXMgaXMgYQorCXdoaXRlbGlzdCwgbm90IGEgYmxhY2tsaXN0KS4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgorCWBwcm90b2NvbC5hbGxvd2AgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBtb3JlIGRldGFpbHMuCisKK2BHSVRfUFJPVE9DT0xfRlJPTV9VU0VSYDo6CisJU2V0IHRvIDAgdG8gcHJldmVudCBwcm90b2NvbHMgdXNlZCBieSBmZXRjaC9wdXNoL2Nsb25lIHdoaWNoIGFyZQorCWNvbmZpZ3VyZWQgdG8gdGhlIGB1c2VyYCBzdGF0ZS4gIFRoaXMgaXMgdXNlZnVsIHRvIHJlc3RyaWN0IHJlY3Vyc2l2ZQorCXN1Ym1vZHVsZSBpbml0aWFsaXphdGlvbiBmcm9tIGFuIHVudHJ1c3RlZCByZXBvc2l0b3J5IG9yIGZvciBwcm9ncmFtcworCXdoaWNoIGZlZWQgcG90ZW50aWFsbHktdW50cnVzdGVkIFVSTFMgdG8gZ2l0IGNvbW1hbmRzLiAgU2VlCisJbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBtb3JlIGRldGFpbHMuCisKK2BHSVRfUFJPVE9DT0xgOjoKKwlGb3IgaW50ZXJuYWwgdXNlIG9ubHkuICBVc2VkIGluIGhhbmRzaGFraW5nIHRoZSB3aXJlIHByb3RvY29sLgorCUNvbnRhaW5zIGEgY29sb24gJzonIHNlcGFyYXRlZCBsaXN0IG9mIGtleXMgd2l0aCBvcHRpb25hbCB2YWx1ZXMKKwkna2V5Wz12YWx1ZV0nLiAgUHJlc2VuY2Ugb2YgdW5rbm93biBrZXlzIGFuZCB2YWx1ZXMgbXVzdCBiZQorCWlnbm9yZWQuCisKK2BHSVRfT1BUSU9OQUxfTE9DS1NgOjoKKwlJZiBzZXQgdG8gYDBgLCBHaXQgd2lsbCBjb21wbGV0ZSBhbnkgcmVxdWVzdGVkIG9wZXJhdGlvbiB3aXRob3V0CisJcGVyZm9ybWluZyBhbnkgb3B0aW9uYWwgc3ViLW9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIHRha2luZyBhIGxvY2suCisJRm9yIGV4YW1wbGUsIHRoaXMgd2lsbCBwcmV2ZW50IGBnaXQgc3RhdHVzYCBmcm9tIHJlZnJlc2hpbmcgdGhlCisJaW5kZXggYXMgYSBzaWRlIGVmZmVjdC4gVGhpcyBpcyB1c2VmdWwgZm9yIHByb2Nlc3NlcyBydW5uaW5nIGluCisJdGhlIGJhY2tncm91bmQgd2hpY2ggZG8gbm90IHdhbnQgdG8gY2F1c2UgbG9jayBjb250ZW50aW9uIHdpdGgKKwlvdGhlciBvcGVyYXRpb25zIG9uIHRoZSByZXBvc2l0b3J5LiAgRGVmYXVsdHMgdG8gYDFgLgorCitgR0lUX1JFRElSRUNUX1NURElOYDo6CitgR0lUX1JFRElSRUNUX1NURE9VVGA6OgorYEdJVF9SRURJUkVDVF9TVERFUlJgOjoKKwlXaW5kb3dzLW9ubHk6IGFsbG93IHJlZGlyZWN0aW5nIHRoZSBzdGFuZGFyZCBpbnB1dC9vdXRwdXQvZXJyb3IKKwloYW5kbGVzIHRvIHBhdGhzIHNwZWNpZmllZCBieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzIGlzCisJcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMgd2hlcmUgdGhlCisJY2Fub25pY2FsIHdheSB0byBwYXNzIHN0YW5kYXJkIGhhbmRsZXMgdmlhIGBDcmVhdGVQcm9jZXNzKClgIGlzCisJbm90IGFuIG9wdGlvbiBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgdGhlIGhhbmRsZXMgdG8gYmUgbWFya2VkCisJaW5oZXJpdGFibGUgKGFuZCBjb25zZXF1ZW50bHkgKmV2ZXJ5KiBzcGF3bmVkIHByb2Nlc3Mgd291bGQKKwlpbmhlcml0IHRoZW0sIHBvc3NpYmx5IGJsb2NraW5nIHJlZ3VsYXIgR2l0IG9wZXJhdGlvbnMpLiBUaGUKKwlwcmltYXJ5IGludGVuZGVkIHVzZSBjYXNlIGlzIHRvIHVzZSBuYW1lZCBwaXBlcyBmb3IgY29tbXVuaWNhdGlvbgorCShlLmcuIGBcXC5ccGlwZVxteS1naXQtc3RkaW4tMTIzYCkuCisrCitUd28gc3BlY2lhbCB2YWx1ZXMgYXJlIHN1cHBvcnRlZDogYG9mZmAgd2lsbCBzaW1wbHkgY2xvc2UgdGhlCitjb3JyZXNwb25kaW5nIHN0YW5kYXJkIGhhbmRsZSwgYW5kIGlmIGBHSVRfUkVESVJFQ1RfU1RERVJSYCBpcworYDI+JjFgLCBzdGFuZGFyZCBlcnJvciB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdGhlIHNhbWUgaGFuZGxlIGFzCitzdGFuZGFyZCBvdXRwdXQuCisKK2BHSVRfUFJJTlRfU0hBMV9FTExJUFNJU2AgKGRlcHJlY2F0ZWQpOjoKKwlJZiBzZXQgdG8gYHllc2AsIHByaW50IGFuIGVsbGlwc2lzIGZvbGxvd2luZyBhbgorCShhYmJyZXZpYXRlZCkgU0hBLTEgdmFsdWUuICBUaGlzIGFmZmVjdHMgaW5kaWNhdGlvbnMgb2YKKwlkZXRhY2hlZCBIRUFEcyAobGlua2dpdDpnaXQtY2hlY2tvdXRbMV0pIGFuZCB0aGUgcmF3CisJZGlmZiBvdXRwdXQgKGxpbmtnaXQ6Z2l0LWRpZmZbMV0pLiAgUHJpbnRpbmcgYW4KKwllbGxpcHNpcyBpbiB0aGUgY2FzZXMgbWVudGlvbmVkIGlzIG5vIGxvbmdlciBjb25zaWRlcmVkCisJYWRlcXVhdGUgYW5kIHN1cHBvcnQgZm9yIGl0IGlzIGxpa2VseSB0byBiZSByZW1vdmVkIGluIHRoZQorCWZvcmVzZWVhYmxlIGZ1dHVyZSAoYWxvbmcgd2l0aCB0aGUgdmFyaWFibGUpLgorCitEaXNjdXNzaW9uW1tEaXNjdXNzaW9uXV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb3JlIGRldGFpbCBvbiB0aGUgZm9sbG93aW5nIGlzIGF2YWlsYWJsZSBmcm9tIHRoZQorbGluazp1c2VyLW1hbnVhbC5odG1sI2dpdC1jb25jZXB0c1tHaXQgY29uY2VwdHMgY2hhcHRlciBvZiB0aGUKK3VzZXItbWFudWFsXSBhbmQgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLgorCitBIEdpdCBwcm9qZWN0IG5vcm1hbGx5IGNvbnNpc3RzIG9mIGEgd29ya2luZyBkaXJlY3Rvcnkgd2l0aCBhICIuZ2l0Igorc3ViZGlyZWN0b3J5IGF0IHRoZSB0b3AgbGV2ZWwuICBUaGUgLmdpdCBkaXJlY3RvcnkgY29udGFpbnMsIGFtb25nIG90aGVyCit0aGluZ3MsIGEgY29tcHJlc3NlZCBvYmplY3QgZGF0YWJhc2UgcmVwcmVzZW50aW5nIHRoZSBjb21wbGV0ZSBoaXN0b3J5CitvZiB0aGUgcHJvamVjdCwgYW4gImluZGV4IiBmaWxlIHdoaWNoIGxpbmtzIHRoYXQgaGlzdG9yeSB0byB0aGUgY3VycmVudAorY29udGVudHMgb2YgdGhlIHdvcmtpbmcgdHJlZSwgYW5kIG5hbWVkIHBvaW50ZXJzIGludG8gdGhhdCBoaXN0b3J5IHN1Y2gKK2FzIHRhZ3MgYW5kIGJyYW5jaCBoZWFkcy4KKworVGhlIG9iamVjdCBkYXRhYmFzZSBjb250YWlucyBvYmplY3RzIG9mIHRocmVlIG1haW4gdHlwZXM6IGJsb2JzLCB3aGljaAoraG9sZCBmaWxlIGRhdGE7IHRyZWVzLCB3aGljaCBwb2ludCB0byBibG9icyBhbmQgb3RoZXIgdHJlZXMgdG8gYnVpbGQgdXAKK2RpcmVjdG9yeSBoaWVyYXJjaGllczsgYW5kIGNvbW1pdHMsIHdoaWNoIGVhY2ggcmVmZXJlbmNlIGEgc2luZ2xlIHRyZWUKK2FuZCBzb21lIG51bWJlciBvZiBwYXJlbnQgY29tbWl0cy4KKworVGhlIGNvbW1pdCwgZXF1aXZhbGVudCB0byB3aGF0IG90aGVyIHN5c3RlbXMgY2FsbCBhICJjaGFuZ2VzZXQiIG9yCisidmVyc2lvbiIsIHJlcHJlc2VudHMgYSBzdGVwIGluIHRoZSBwcm9qZWN0J3MgaGlzdG9yeSwgYW5kIGVhY2ggcGFyZW50CityZXByZXNlbnRzIGFuIGltbWVkaWF0ZWx5IHByZWNlZGluZyBzdGVwLiAgQ29tbWl0cyB3aXRoIG1vcmUgdGhhbiBvbmUKK3BhcmVudCByZXByZXNlbnQgbWVyZ2VzIG9mIGluZGVwZW5kZW50IGxpbmVzIG9mIGRldmVsb3BtZW50LgorCitBbGwgb2JqZWN0cyBhcmUgbmFtZWQgYnkgdGhlIFNIQS0xIGhhc2ggb2YgdGhlaXIgY29udGVudHMsIG5vcm1hbGx5Cit3cml0dGVuIGFzIGEgc3RyaW5nIG9mIDQwIGhleCBkaWdpdHMuICBTdWNoIG5hbWVzIGFyZSBnbG9iYWxseSB1bmlxdWUuCitUaGUgZW50aXJlIGhpc3RvcnkgbGVhZGluZyB1cCB0byBhIGNvbW1pdCBjYW4gYmUgdm91Y2hlZCBmb3IgYnkgc2lnbmluZworanVzdCB0aGF0IGNvbW1pdC4gIEEgZm91cnRoIG9iamVjdCB0eXBlLCB0aGUgdGFnLCBpcyBwcm92aWRlZCBmb3IgdGhpcworcHVycG9zZS4KKworV2hlbiBmaXJzdCBjcmVhdGVkLCBvYmplY3RzIGFyZSBzdG9yZWQgaW4gaW5kaXZpZHVhbCBmaWxlcywgYnV0IGZvcgorZWZmaWNpZW5jeSBtYXkgbGF0ZXIgYmUgY29tcHJlc3NlZCB0b2dldGhlciBpbnRvICJwYWNrIGZpbGVzIi4KKworTmFtZWQgcG9pbnRlcnMgY2FsbGVkIHJlZnMgbWFyayBpbnRlcmVzdGluZyBwb2ludHMgaW4gaGlzdG9yeS4gIEEgcmVmCittYXkgY29udGFpbiB0aGUgU0hBLTEgbmFtZSBvZiBhbiBvYmplY3Qgb3IgdGhlIG5hbWUgb2YgYW5vdGhlciByZWYuICBSZWZzCit3aXRoIG5hbWVzIGJlZ2lubmluZyBgcmVmL2hlYWQvYCBjb250YWluIHRoZSBTSEEtMSBuYW1lIG9mIHRoZSBtb3N0CityZWNlbnQgY29tbWl0IChvciAiaGVhZCIpIG9mIGEgYnJhbmNoIHVuZGVyIGRldmVsb3BtZW50LiAgU0hBLTEgbmFtZXMgb2YKK3RhZ3Mgb2YgaW50ZXJlc3QgYXJlIHN0b3JlZCB1bmRlciBgcmVmL3RhZ3MvYC4gIEEgc3BlY2lhbCByZWYgbmFtZWQKK2BIRUFEYCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaC4KKworVGhlIGluZGV4IGZpbGUgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhIGxpc3Qgb2YgYWxsIHBhdGhzIGFuZCwgZm9yIGVhY2gKK3BhdGgsIGEgYmxvYiBvYmplY3QgYW5kIGEgc2V0IG9mIGF0dHJpYnV0ZXMuICBUaGUgYmxvYiBvYmplY3QgcmVwcmVzZW50cwordGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFzIG9mIHRoZSBoZWFkIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gIFRoZQorYXR0cmlidXRlcyAobGFzdCBtb2RpZmllZCB0aW1lLCBzaXplLCBldGMuKSBhcmUgdGFrZW4gZnJvbSB0aGUKK2NvcnJlc3BvbmRpbmcgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlLiAgU3Vic2VxdWVudCBjaGFuZ2VzIHRvIHRoZQord29ya2luZyB0cmVlIGNhbiBiZSBmb3VuZCBieSBjb21wYXJpbmcgdGhlc2UgYXR0cmlidXRlcy4gIFRoZSBpbmRleCBtYXkKK2JlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudCwgYW5kIG5ldyBjb21taXRzIG1heSBiZSBjcmVhdGVkIGZyb20gdGhlCitjb250ZW50IHN0b3JlZCBpbiB0aGUgaW5kZXguCisKK1RoZSBpbmRleCBpcyBhbHNvIGNhcGFibGUgb2Ygc3RvcmluZyBtdWx0aXBsZSBlbnRyaWVzIChjYWxsZWQgInN0YWdlcyIpCitmb3IgYSBnaXZlbiBwYXRobmFtZS4gIFRoZXNlIHN0YWdlcyBhcmUgdXNlZCB0byBob2xkIHRoZSB2YXJpb3VzCit1bm1lcmdlZCB2ZXJzaW9uIG9mIGEgZmlsZSB3aGVuIGEgbWVyZ2UgaXMgaW4gcHJvZ3Jlc3MuCisKK0ZVUlRIRVIgRE9DVU1FTlRBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSB0aGUgcmVmZXJlbmNlcyBpbiB0aGUgImRlc2NyaXB0aW9uIiBzZWN0aW9uIHRvIGdldCBzdGFydGVkCit1c2luZyBHaXQuICBUaGUgZm9sbG93aW5nIGlzIHByb2JhYmx5IG1vcmUgZGV0YWlsIHRoYW4gbmVjZXNzYXJ5Citmb3IgYSBmaXJzdC10aW1lIHVzZXIuCisKK1RoZSBsaW5rOnVzZXItbWFudWFsLmh0bWwjZ2l0LWNvbmNlcHRzW0dpdCBjb25jZXB0cyBjaGFwdGVyIG9mIHRoZQordXNlci1tYW51YWxdIGFuZCBsaW5rZ2l0OmdpdGNvcmUtdHV0b3JpYWxbN10gYm90aCBwcm92aWRlCitpbnRyb2R1Y3Rpb25zIHRvIHRoZSB1bmRlcmx5aW5nIEdpdCBhcmNoaXRlY3R1cmUuCisKK1NlZSBsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XSBmb3IgYW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzLgorCitTZWUgYWxzbyB0aGUgbGluazpob3d0by1pbmRleC5odG1sW2hvd3RvXSBkb2N1bWVudHMgZm9yIHNvbWUgdXNlZnVsCitleGFtcGxlcy4KKworVGhlIGludGVybmFscyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUKK2xpbms6dGVjaG5pY2FsL2FwaS1pbmRleC5odG1sW0dpdCBBUEkgZG9jdW1lbnRhdGlvbl0uCisKK1VzZXJzIG1pZ3JhdGluZyBmcm9tIENWUyBtYXkgYWxzbyB3YW50IHRvCityZWFkIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XS4KKworCitBdXRob3JzCistLS0tLS0tCitHaXQgd2FzIHN0YXJ0ZWQgYnkgTGludXMgVG9ydmFsZHMsIGFuZCBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBKdW5pbworQyBIYW1hbm8uIE51bWVyb3VzIGNvbnRyaWJ1dGlvbnMgaGF2ZSBjb21lIGZyb20gdGhlIEdpdCBtYWlsaW5nIGxpc3QKKzxnaXRAdmdlci5rZXJuZWwub3JnPi4gIGh0dHA6Ly93d3cub3Blbmh1Yi5uZXQvcC9naXQvY29udHJpYnV0b3JzL3N1bW1hcnkKK2dpdmVzIHlvdSBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiBjb250cmlidXRvcnMuCisKK0lmIHlvdSBoYXZlIGEgY2xvbmUgb2YgZ2l0LmdpdCBpdHNlbGYsIHRoZQorb3V0cHV0IG9mIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIGFuZCBsaW5rZ2l0OmdpdC1ibGFtZVsxXSBjYW4gc2hvdyB5b3UKK3RoZSBhdXRob3JzIGZvciBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgcHJvamVjdC4KKworUmVwb3J0aW5nIEJ1Z3MKKy0tLS0tLS0tLS0tLS0tCisKK1JlcG9ydCBidWdzIHRvIHRoZSBHaXQgbWFpbGluZyBsaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPiB3aGVyZSB0aGUKK2RldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBpcyBwcmltYXJpbHkgZG9uZS4gIFlvdSBkbyBub3QgaGF2ZSB0byBiZQorc3Vic2NyaWJlZCB0byB0aGUgbGlzdCB0byBzZW5kIGEgbWVzc2FnZSB0aGVyZS4gIFNlZSB0aGUgbGlzdCBhcmNoaXZlCithdCBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQgZm9yIHByZXZpb3VzIGJ1ZyByZXBvcnRzIGFuZCBvdGhlcgorZGlzY3Vzc2lvbnMuCisKK0lzc3VlcyB3aGljaCBhcmUgc2VjdXJpdHkgcmVsZXZhbnQgc2hvdWxkIGJlIGRpc2Nsb3NlZCBwcml2YXRlbHkgdG8KK3RoZSBHaXQgU2VjdXJpdHkgbWFpbGluZyBsaXN0IDxnaXQtc2VjdXJpdHlAZ29vZ2xlZ3JvdXBzLmNvbT4uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwgbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRldmVyeWRheVs3XSwgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRjbGlbN10sIGxpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdLAorbGlua2dpdDpnaXR3b3JrZmxvd3NbN10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhmZTcxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dApAQCAtMCwwICsxLDEyOTggQEAKK2dpdGF0dHJpYnV0ZXMoNSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0YXR0cmlidXRlcyAtIERlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgKKworU1lOT1BTSVMKKy0tLS0tLS0tCiskR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMsIC5naXRhdHRyaWJ1dGVzCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0EgYGdpdGF0dHJpYnV0ZXNgIGZpbGUgaXMgYSBzaW1wbGUgdGV4dCBmaWxlIHRoYXQgZ2l2ZXMKK2BhdHRyaWJ1dGVzYCB0byBwYXRobmFtZXMuCisKK0VhY2ggbGluZSBpbiBgZ2l0YXR0cmlidXRlc2AgZmlsZSBpcyBvZiBmb3JtOgorCisJcGF0dGVybiBhdHRyMSBhdHRyMiAuLi4KKworVGhhdCBpcywgYSBwYXR0ZXJuIGZvbGxvd2VkIGJ5IGFuIGF0dHJpYnV0ZXMgbGlzdCwKK3NlcGFyYXRlZCBieSB3aGl0ZXNwYWNlcy4gTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYXJlCitpZ25vcmVkLiBMaW5lcyB0aGF0IGJlZ2luIHdpdGggJyMnIGFyZSBpZ25vcmVkLiBQYXR0ZXJucwordGhhdCBiZWdpbiB3aXRoIGEgZG91YmxlIHF1b3RlIGFyZSBxdW90ZWQgaW4gQyBzdHlsZS4KK1doZW4gdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUgcGF0aCBpbiBxdWVzdGlvbiwgdGhlIGF0dHJpYnV0ZXMKK2xpc3RlZCBvbiB0aGUgbGluZSBhcmUgZ2l2ZW4gdG8gdGhlIHBhdGguCisKK0VhY2ggYXR0cmlidXRlIGNhbiBiZSBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVzIGZvciBhIGdpdmVuIHBhdGg6CisKK1NldDo6CisKKwlUaGUgcGF0aCBoYXMgdGhlIGF0dHJpYnV0ZSB3aXRoIHNwZWNpYWwgdmFsdWUgInRydWUiOworCXRoaXMgaXMgc3BlY2lmaWVkIGJ5IGxpc3Rpbmcgb25seSB0aGUgbmFtZSBvZiB0aGUKKwlhdHRyaWJ1dGUgaW4gdGhlIGF0dHJpYnV0ZSBsaXN0LgorCitVbnNldDo6CisKKwlUaGUgcGF0aCBoYXMgdGhlIGF0dHJpYnV0ZSB3aXRoIHNwZWNpYWwgdmFsdWUgImZhbHNlIjsKKwl0aGlzIGlzIHNwZWNpZmllZCBieSBsaXN0aW5nIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKKwlwcmVmaXhlZCB3aXRoIGEgZGFzaCBgLWAgaW4gdGhlIGF0dHJpYnV0ZSBsaXN0LgorCitTZXQgdG8gYSB2YWx1ZTo6CisKKwlUaGUgcGF0aCBoYXMgdGhlIGF0dHJpYnV0ZSB3aXRoIHNwZWNpZmllZCBzdHJpbmcgdmFsdWU7CisJdGhpcyBpcyBzcGVjaWZpZWQgYnkgbGlzdGluZyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCisJZm9sbG93ZWQgYnkgYW4gZXF1YWwgc2lnbiBgPWAgYW5kIGl0cyB2YWx1ZSBpbiB0aGUKKwlhdHRyaWJ1dGUgbGlzdC4KKworVW5zcGVjaWZpZWQ6OgorCisJTm8gcGF0dGVybiBtYXRjaGVzIHRoZSBwYXRoLCBhbmQgbm90aGluZyBzYXlzIGlmCisJdGhlIHBhdGggaGFzIG9yIGRvZXMgbm90IGhhdmUgdGhlIGF0dHJpYnV0ZSwgdGhlCisJYXR0cmlidXRlIGZvciB0aGUgcGF0aCBpcyBzYWlkIHRvIGJlIFVuc3BlY2lmaWVkLgorCitXaGVuIG1vcmUgdGhhbiBvbmUgcGF0dGVybiBtYXRjaGVzIHRoZSBwYXRoLCBhIGxhdGVyIGxpbmUKK292ZXJyaWRlcyBhbiBlYXJsaWVyIGxpbmUuICBUaGlzIG92ZXJyaWRpbmcgaXMgZG9uZSBwZXIKK2F0dHJpYnV0ZS4KKworVGhlIHJ1bGVzIGJ5IHdoaWNoIHRoZSBwYXR0ZXJuIG1hdGNoZXMgcGF0aHMgYXJlIHRoZSBzYW1lIGFzIGluCitgLmdpdGlnbm9yZWAgZmlsZXMgKHNlZSBsaW5rZ2l0OmdpdGlnbm9yZVs1XSksIHdpdGggYSBmZXcgZXhjZXB0aW9uczoKKworICAtIG5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBmb3JiaWRkZW4KKworICAtIHBhdHRlcm5zIHRoYXQgbWF0Y2ggYSBkaXJlY3RvcnkgZG8gbm90IHJlY3Vyc2l2ZWx5IG1hdGNoIHBhdGhzCisgICAgaW5zaWRlIHRoYXQgZGlyZWN0b3J5IChzbyB1c2luZyB0aGUgdHJhaWxpbmctc2xhc2ggYHBhdGgvYCBzeW50YXggaXMKKyAgICBwb2ludGxlc3MgaW4gYW4gYXR0cmlidXRlcyBmaWxlOyB1c2UgYHBhdGgvKipgIGluc3RlYWQpCisKK1doZW4gZGVjaWRpbmcgd2hhdCBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCB0byBhIHBhdGgsIEdpdAorY29uc3VsdHMgYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AgZmlsZSAod2hpY2ggaGFzIHRoZSBoaWdoZXN0CitwcmVjZWRlbmNlKSwgYC5naXRhdHRyaWJ1dGVzYCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKK3BhdGggaW4gcXVlc3Rpb24sIGFuZCBpdHMgcGFyZW50IGRpcmVjdG9yaWVzIHVwIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUKK3dvcmsgdHJlZSAodGhlIGZ1cnRoZXIgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGAuZ2l0YXR0cmlidXRlc2AKK2lzIGZyb20gdGhlIHBhdGggaW4gcXVlc3Rpb24sIHRoZSBsb3dlciBpdHMgcHJlY2VkZW5jZSkuIEZpbmFsbHkKK2dsb2JhbCBhbmQgc3lzdGVtLXdpZGUgZmlsZXMgYXJlIGNvbnNpZGVyZWQgKHRoZXkgaGF2ZSB0aGUgbG93ZXN0CitwcmVjZWRlbmNlKS4KKworV2hlbiB0aGUgYC5naXRhdHRyaWJ1dGVzYCBmaWxlIGlzIG1pc3NpbmcgZnJvbSB0aGUgd29yayB0cmVlLCB0aGUKK3BhdGggaW4gdGhlIGluZGV4IGlzIHVzZWQgYXMgYSBmYWxsLWJhY2suICBEdXJpbmcgY2hlY2tvdXQgcHJvY2VzcywKK2AuZ2l0YXR0cmlidXRlc2AgaW4gdGhlIGluZGV4IGlzIHVzZWQgYW5kIHRoZW4gdGhlIGZpbGUgaW4gdGhlCit3b3JraW5nIHRyZWUgaXMgdXNlZCBhcyBhIGZhbGwtYmFjay4KKworSWYgeW91IHdpc2ggdG8gYWZmZWN0IG9ubHkgYSBzaW5nbGUgcmVwb3NpdG9yeSAoaS5lLiwgdG8gYXNzaWduCithdHRyaWJ1dGVzIHRvIGZpbGVzIHRoYXQgYXJlIHBhcnRpY3VsYXIgdG8KK29uZSB1c2VyJ3Mgd29ya2Zsb3cgZm9yIHRoYXQgcmVwb3NpdG9yeSksIHRoZW4KK2F0dHJpYnV0ZXMgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AgZmlsZS4KK0F0dHJpYnV0ZXMgd2hpY2ggc2hvdWxkIGJlIHZlcnNpb24tY29udHJvbGxlZCBhbmQgZGlzdHJpYnV0ZWQgdG8gb3RoZXIKK3JlcG9zaXRvcmllcyAoaS5lLiwgYXR0cmlidXRlcyBvZiBpbnRlcmVzdCB0byBhbGwgdXNlcnMpIHNob3VsZCBnbyBpbnRvCitgLmdpdGF0dHJpYnV0ZXNgIGZpbGVzLiBBdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGFmZmVjdCBhbGwgcmVwb3NpdG9yaWVzCitmb3IgYSBzaW5nbGUgdXNlciBzaG91bGQgYmUgcGxhY2VkIGluIGEgZmlsZSBzcGVjaWZpZWQgYnkgdGhlCitgY29yZS5hdHRyaWJ1dGVzRmlsZWAgY29uZmlndXJhdGlvbiBvcHRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorSXRzIGRlZmF1bHQgdmFsdWUgaXMgJFhER19DT05GSUdfSE9NRS9naXQvYXR0cmlidXRlcy4gSWYgJFhER19DT05GSUdfSE9NRQoraXMgZWl0aGVyIG5vdCBzZXQgb3IgZW1wdHksICRIT01FLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMgaXMgdXNlZCBpbnN0ZWFkLgorQXR0cmlidXRlcyBmb3IgYWxsIHVzZXJzIG9uIGEgc3lzdGVtIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCitgJChwcmVmaXgpL2V0Yy9naXRhdHRyaWJ1dGVzYCBmaWxlLgorCitTb21ldGltZXMgeW91IHdvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgYSBzZXR0aW5nIG9mIGFuIGF0dHJpYnV0ZQorZm9yIGEgcGF0aCB0byBgVW5zcGVjaWZpZWRgIHN0YXRlLiAgVGhpcyBjYW4gYmUgZG9uZSBieSBsaXN0aW5nCit0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb24gcG9pbnQgYCFgLgorCisKK0VGRkVDVFMKKy0tLS0tLS0KKworQ2VydGFpbiBvcGVyYXRpb25zIGJ5IEdpdCBjYW4gYmUgaW5mbHVlbmNlZCBieSBhc3NpZ25pbmcKK3BhcnRpY3VsYXIgYXR0cmlidXRlcyB0byBhIHBhdGguICBDdXJyZW50bHksIHRoZSBmb2xsb3dpbmcKK29wZXJhdGlvbnMgYXJlIGF0dHJpYnV0ZXMtYXdhcmUuCisKK0NoZWNraW5nLW91dCBhbmQgY2hlY2tpbmctaW4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgYXR0cmlidXRlcyBhZmZlY3QgaG93IHRoZSBjb250ZW50cyBzdG9yZWQgaW4gdGhlCityZXBvc2l0b3J5IGFyZSBjb3BpZWQgdG8gdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyB3aGVuIGNvbW1hbmRzCitzdWNoIGFzICdnaXQgc3dpdGNoJywgJ2dpdCBjaGVja291dCcgIGFuZCAnZ2l0IG1lcmdlJyBydW4uCitUaGV5IGFsc28gYWZmZWN0IGhvdworR2l0IHN0b3JlcyB0aGUgY29udGVudHMgeW91IHByZXBhcmUgaW4gdGhlIHdvcmtpbmcgdHJlZSBpbiB0aGUKK3JlcG9zaXRvcnkgdXBvbiAnZ2l0IGFkZCcgYW5kICdnaXQgY29tbWl0Jy4KKworYHRleHRgCiteXl5eXl4KKworVGhpcyBhdHRyaWJ1dGUgZW5hYmxlcyBhbmQgY29udHJvbHMgZW5kLW9mLWxpbmUgbm9ybWFsaXphdGlvbi4gIFdoZW4gYQordGV4dCBmaWxlIGlzIG5vcm1hbGl6ZWQsIGl0cyBsaW5lIGVuZGluZ3MgYXJlIGNvbnZlcnRlZCB0byBMRiBpbiB0aGUKK3JlcG9zaXRvcnkuICBUbyBjb250cm9sIHdoYXQgbGluZSBlbmRpbmcgc3R5bGUgaXMgdXNlZCBpbiB0aGUgd29ya2luZworZGlyZWN0b3J5LCB1c2UgdGhlIGBlb2xgIGF0dHJpYnV0ZSBmb3IgYSBzaW5nbGUgZmlsZSBhbmQgdGhlCitgY29yZS5lb2xgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIGFsbCB0ZXh0IGZpbGVzLgorTm90ZSB0aGF0IHNldHRpbmcgYGNvcmUuYXV0b2NybGZgIHRvIGB0cnVlYCBvciBgaW5wdXRgIG92ZXJyaWRlcworYGNvcmUuZW9sYCAoc2VlIHRoZSBkZWZpbml0aW9ucyBvZiB0aG9zZSBvcHRpb25zIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitTZXQ6OgorCisJU2V0dGluZyB0aGUgYHRleHRgIGF0dHJpYnV0ZSBvbiBhIHBhdGggZW5hYmxlcyBlbmQtb2YtbGluZQorCW5vcm1hbGl6YXRpb24gYW5kIG1hcmtzIHRoZSBwYXRoIGFzIGEgdGV4dCBmaWxlLiAgRW5kLW9mLWxpbmUKKwljb252ZXJzaW9uIHRha2VzIHBsYWNlIHdpdGhvdXQgZ3Vlc3NpbmcgdGhlIGNvbnRlbnQgdHlwZS4KKworVW5zZXQ6OgorCisJVW5zZXR0aW5nIHRoZSBgdGV4dGAgYXR0cmlidXRlIG9uIGEgcGF0aCB0ZWxscyBHaXQgbm90IHRvCisJYXR0ZW1wdCBhbnkgZW5kLW9mLWxpbmUgY29udmVyc2lvbiB1cG9uIGNoZWNraW4gb3IgY2hlY2tvdXQuCisKK1NldCB0byBzdHJpbmcgdmFsdWUgImF1dG8iOjoKKworCVdoZW4gYHRleHRgIGlzIHNldCB0byAiYXV0byIsIHRoZSBwYXRoIGlzIG1hcmtlZCBmb3IgYXV0b21hdGljCisJZW5kLW9mLWxpbmUgY29udmVyc2lvbi4gIElmIEdpdCBkZWNpZGVzIHRoYXQgdGhlIGNvbnRlbnQgaXMKKwl0ZXh0LCBpdHMgbGluZSBlbmRpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gTEYgb24gY2hlY2tpbi4KKwlXaGVuIHRoZSBmaWxlIGhhcyBiZWVuIGNvbW1pdHRlZCB3aXRoIENSTEYsIG5vIGNvbnZlcnNpb24gaXMgZG9uZS4KKworVW5zcGVjaWZpZWQ6OgorCisJSWYgdGhlIGB0ZXh0YCBhdHRyaWJ1dGUgaXMgdW5zcGVjaWZpZWQsIEdpdCB1c2VzIHRoZQorCWBjb3JlLmF1dG9jcmxmYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGRldGVybWluZSBpZiB0aGUKKwlmaWxlIHNob3VsZCBiZSBjb252ZXJ0ZWQuCisKK0FueSBvdGhlciB2YWx1ZSBjYXVzZXMgR2l0IHRvIGFjdCBhcyBpZiBgdGV4dGAgaGFzIGJlZW4gbGVmdAordW5zcGVjaWZpZWQuCisKK2Blb2xgCiteXl5eXgorCitUaGlzIGF0dHJpYnV0ZSBzZXRzIGEgc3BlY2lmaWMgbGluZS1lbmRpbmcgc3R5bGUgdG8gYmUgdXNlZCBpbiB0aGUKK3dvcmtpbmcgZGlyZWN0b3J5LiAgSXQgZW5hYmxlcyBlbmQtb2YtbGluZSBjb252ZXJzaW9uIHdpdGhvdXQgYW55Citjb250ZW50IGNoZWNrcywgZWZmZWN0aXZlbHkgc2V0dGluZyB0aGUgYHRleHRgIGF0dHJpYnV0ZS4gIE5vdGUgdGhhdAorc2V0dGluZyB0aGlzIGF0dHJpYnV0ZSBvbiBwYXRocyB3aGljaCBhcmUgaW4gdGhlIGluZGV4IHdpdGggQ1JMRiBsaW5lCitlbmRpbmdzIG1heSBtYWtlIHRoZSBwYXRocyB0byBiZSBjb25zaWRlcmVkIGRpcnR5LiAgQWRkaW5nIHRoZSBwYXRoIHRvCit0aGUgaW5kZXggYWdhaW4gd2lsbCBub3JtYWxpemUgdGhlIGxpbmUgZW5kaW5ncyBpbiB0aGUgaW5kZXguCisKK1NldCB0byBzdHJpbmcgdmFsdWUgImNybGYiOjoKKworCVRoaXMgc2V0dGluZyBmb3JjZXMgR2l0IHRvIG5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MgZm9yIHRoaXMKKwlmaWxlIG9uIGNoZWNraW4gYW5kIGNvbnZlcnQgdGhlbSB0byBDUkxGIHdoZW4gdGhlIGZpbGUgaXMKKwljaGVja2VkIG91dC4KKworU2V0IHRvIHN0cmluZyB2YWx1ZSAibGYiOjoKKworCVRoaXMgc2V0dGluZyBmb3JjZXMgR2l0IHRvIG5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MgdG8gTEYgb24KKwljaGVja2luIGFuZCBwcmV2ZW50cyBjb252ZXJzaW9uIHRvIENSTEYgd2hlbiB0aGUgZmlsZSBpcworCWNoZWNrZWQgb3V0LgorCitCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGBjcmxmYCBhdHRyaWJ1dGUKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBgY3JsZmAgYXR0cmlidXRlIGlzIGludGVycHJldGVkIGFzCitmb2xsb3dzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NybGYJCXRleHQKKy1jcmxmCQktdGV4dAorY3JsZj1pbnB1dAllb2w9bGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbmQtb2YtbGluZSBjb252ZXJzaW9uCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1doaWxlIEdpdCBub3JtYWxseSBsZWF2ZXMgZmlsZSBjb250ZW50cyBhbG9uZSwgaXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8KK25vcm1hbGl6ZSBsaW5lIGVuZGluZ3MgdG8gTEYgaW4gdGhlIHJlcG9zaXRvcnkgYW5kLCBvcHRpb25hbGx5LCB0bworY29udmVydCB0aGVtIHRvIENSTEYgd2hlbiBmaWxlcyBhcmUgY2hlY2tlZCBvdXQuCisKK0lmIHlvdSBzaW1wbHkgd2FudCB0byBoYXZlIENSTEYgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkKK3JlZ2FyZGxlc3Mgb2YgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSB3b3JraW5nIHdpdGgsIHlvdSBjYW4gc2V0IHRoZQorY29uZmlnIHZhcmlhYmxlICJjb3JlLmF1dG9jcmxmIiB3aXRob3V0IHVzaW5nIGFueSBhdHRyaWJ1dGVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tjb3JlXQorCWF1dG9jcmxmID0gdHJ1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZG9lcyBub3QgZm9yY2Ugbm9ybWFsaXphdGlvbiBvZiB0ZXh0IGZpbGVzLCBidXQgZG9lcyBlbnN1cmUKK3RoYXQgdGV4dCBmaWxlcyB0aGF0IHlvdSBpbnRyb2R1Y2UgdG8gdGhlIHJlcG9zaXRvcnkgaGF2ZSB0aGVpciBsaW5lCitlbmRpbmdzIG5vcm1hbGl6ZWQgdG8gTEYgd2hlbiB0aGV5IGFyZSBhZGRlZCwgYW5kIHRoYXQgZmlsZXMgdGhhdCBhcmUKK2FscmVhZHkgbm9ybWFsaXplZCBpbiB0aGUgcmVwb3NpdG9yeSBzdGF5IG5vcm1hbGl6ZWQuCisKK0lmIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0IHRleHQgZmlsZXMgdGhhdCBhbnkgY29udHJpYnV0b3IgaW50cm9kdWNlcyB0bwordGhlIHJlcG9zaXRvcnkgaGF2ZSB0aGVpciBsaW5lIGVuZGluZ3Mgbm9ybWFsaXplZCwgeW91IGNhbiBzZXQgdGhlCitgdGV4dGAgYXR0cmlidXRlIHRvICJhdXRvIiBmb3IgX2FsbF8gZmlsZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgl0ZXh0PWF1dG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYXR0cmlidXRlcyBhbGxvdyBhIGZpbmUtZ3JhaW5lZCBjb250cm9sLCBob3cgdGhlIGxpbmUgZW5kaW5ncworYXJlIGNvbnZlcnRlZC4KK0hlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHdpbGwgbWFrZSBHaXQgbm9ybWFsaXplIC50eHQsIC52Y3Byb2ogYW5kIC5zaAorZmlsZXMsIGVuc3VyZSB0aGF0IC52Y3Byb2ogZmlsZXMgaGF2ZSBDUkxGIGFuZCAuc2ggZmlsZXMgaGF2ZSBMRiBpbgordGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcHJldmVudCAuanBnIGZpbGVzIGZyb20gYmVpbmcgbm9ybWFsaXplZAorcmVnYXJkbGVzcyBvZiB0aGVpciBjb250ZW50LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogICAgICAgICAgICAgICB0ZXh0PWF1dG8KKyoudHh0CQl0ZXh0CisqLnZjcHJvagl0ZXh0IGVvbD1jcmxmCisqLnNoCQl0ZXh0IGVvbD1sZgorKi5qcGcJCS10ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URTogV2hlbiBgdGV4dD1hdXRvYCBjb252ZXJzaW9uIGlzIGVuYWJsZWQgaW4gYSBjcm9zcy1wbGF0Zm9ybQorcHJvamVjdCB1c2luZyBwdXNoIGFuZCBwdWxsIHRvIGEgY2VudHJhbCByZXBvc2l0b3J5IHRoZSB0ZXh0IGZpbGVzCitjb250YWluaW5nIENSTEZzIHNob3VsZCBiZSBub3JtYWxpemVkLgorCitGcm9tIGEgY2xlYW4gd29ya2luZyBkaXJlY3Rvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyAiKiB0ZXh0PWF1dG8iID4uZ2l0YXR0cmlidXRlcworJCBnaXQgYWRkIC0tcmVub3JtYWxpemUgLgorJCBnaXQgc3RhdHVzICAgICAgICAjIFNob3cgZmlsZXMgdGhhdCB3aWxsIGJlIG5vcm1hbGl6ZWQKKyQgZ2l0IGNvbW1pdCAtbSAiSW50cm9kdWNlIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGFueSBmaWxlcyB0aGF0IHNob3VsZCBub3QgYmUgbm9ybWFsaXplZCBzaG93IHVwIGluICdnaXQgc3RhdHVzJywKK3Vuc2V0IHRoZWlyIGB0ZXh0YCBhdHRyaWJ1dGUgYmVmb3JlIHJ1bm5pbmcgJ2dpdCBhZGQgLXUnLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21hbnVhbC5wZGYJLXRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb252ZXJzZWx5LCB0ZXh0IGZpbGVzIHRoYXQgR2l0IGRvZXMgbm90IGRldGVjdCBjYW4gaGF2ZSBub3JtYWxpemF0aW9uCitlbmFibGVkIG1hbnVhbGx5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dlaXJkY2hhcnMudHh0CXRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBgY29yZS5zYWZlY3JsZmAgaXMgc2V0IHRvICJ0cnVlIiBvciAid2FybiIsIEdpdCB2ZXJpZmllcyBpZgordGhlIGNvbnZlcnNpb24gaXMgcmV2ZXJzaWJsZSBmb3IgdGhlIGN1cnJlbnQgc2V0dGluZyBvZgorYGNvcmUuYXV0b2NybGZgLiAgRm9yICJ0cnVlIiwgR2l0IHJlamVjdHMgaXJyZXZlcnNpYmxlCitjb252ZXJzaW9uczsgZm9yICJ3YXJuIiwgR2l0IG9ubHkgcHJpbnRzIGEgd2FybmluZyBidXQgYWNjZXB0cworYW4gaXJyZXZlcnNpYmxlIGNvbnZlcnNpb24uICBUaGUgc2FmZXR5IHRyaWdnZXJzIHRvIHByZXZlbnQgc3VjaAorYSBjb252ZXJzaW9uIGRvbmUgdG8gdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIGJ1dCB0aGVyZSBhcmUgYQorZmV3IGV4Y2VwdGlvbnMuICBFdmVuIHRob3VnaC4uLgorCistICdnaXQgYWRkJyBpdHNlbGYgZG9lcyBub3QgdG91Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIHRoZQorICBuZXh0IGNoZWNrb3V0IHdvdWxkLCBzbyB0aGUgc2FmZXR5IHRyaWdnZXJzOworCistICdnaXQgYXBwbHknIHRvIHVwZGF0ZSBhIHRleHQgZmlsZSB3aXRoIGEgcGF0Y2ggZG9lcyB0b3VjaCB0aGUgZmlsZXMKKyAgaW4gdGhlIHdvcmsgdHJlZSwgYnV0IHRoZSBvcGVyYXRpb24gaXMgYWJvdXQgdGV4dCBmaWxlcyBhbmQgQ1JMRgorICBjb252ZXJzaW9uIGlzIGFib3V0IGZpeGluZyB0aGUgbGluZSBlbmRpbmcgaW5jb25zaXN0ZW5jaWVzLCBzbyB0aGUKKyAgc2FmZXR5IGRvZXMgbm90IHRyaWdnZXI7CisKKy0gJ2dpdCBkaWZmJyBpdHNlbGYgZG9lcyBub3QgdG91Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIGl0IGlzCisgIG9mdGVuIHJ1biB0byBpbnNwZWN0IHRoZSBjaGFuZ2VzIHlvdSBpbnRlbmQgdG8gbmV4dCAnZ2l0IGFkZCcuICBUbworICBjYXRjaCBwb3RlbnRpYWwgcHJvYmxlbXMgZWFybHksIHNhZmV0eSB0cmlnZ2Vycy4KKworCitgd29ya2luZy10cmVlLWVuY29kaW5nYAorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworR2l0IHJlY29nbml6ZXMgZmlsZXMgZW5jb2RlZCBpbiBBU0NJSSBvciBvbmUgb2YgaXRzIHN1cGVyc2V0cyAoZS5nLgorVVRGLTgsIElTTy04ODU5LTEsIC4uLikgYXMgdGV4dCBmaWxlcy4gRmlsZXMgZW5jb2RlZCBpbiBjZXJ0YWluIG90aGVyCitlbmNvZGluZ3MgKGUuZy4gVVRGLTE2KSBhcmUgaW50ZXJwcmV0ZWQgYXMgYmluYXJ5IGFuZCBjb25zZXF1ZW50bHkKK2J1aWx0LWluIEdpdCB0ZXh0IHByb2Nlc3NpbmcgdG9vbHMgKGUuZy4gJ2dpdCBkaWZmJykgYXMgd2VsbCBhcyBtb3N0IEdpdAord2ViIGZyb250IGVuZHMgZG8gbm90IHZpc3VhbGl6ZSB0aGUgY29udGVudHMgb2YgdGhlc2UgZmlsZXMgYnkgZGVmYXVsdC4KKworSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB0ZWxsIEdpdCB0aGUgZW5jb2Rpbmcgb2YgYSBmaWxlIGluIHRoZSB3b3JraW5nCitkaXJlY3Rvcnkgd2l0aCB0aGUgYHdvcmtpbmctdHJlZS1lbmNvZGluZ2AgYXR0cmlidXRlLiBJZiBhIGZpbGUgd2l0aCB0aGlzCithdHRyaWJ1dGUgaXMgYWRkZWQgdG8gR2l0LCB0aGVuIEdpdCByZS1lbmNvZGVzIHRoZSBjb250ZW50IGZyb20gdGhlCitzcGVjaWZpZWQgZW5jb2RpbmcgdG8gVVRGLTguIEZpbmFsbHksIEdpdCBzdG9yZXMgdGhlIFVURi04IGVuY29kZWQKK2NvbnRlbnQgaW4gaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIChjYWxsZWQgInRoZSBpbmRleCIpLiBPbiBjaGVja291dAordGhlIGNvbnRlbnQgaXMgcmUtZW5jb2RlZCBiYWNrIHRvIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcuCisKK1BsZWFzZSBub3RlIHRoYXQgdXNpbmcgdGhlIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgIGF0dHJpYnV0ZSBtYXkgaGF2ZSBhCitudW1iZXIgb2YgcGl0ZmFsbHM6CisKKy0gQWx0ZXJuYXRpdmUgR2l0IGltcGxlbWVudGF0aW9ucyAoZS5nLiBKR2l0IG9yIGxpYmdpdDIpIGFuZCBvbGRlciBHaXQKKyAgdmVyc2lvbnMgKGFzIG9mIE1hcmNoIDIwMTgpIGRvIG5vdCBzdXBwb3J0IHRoZSBgd29ya2luZy10cmVlLWVuY29kaW5nYAorICBhdHRyaWJ1dGUuIElmIHlvdSBkZWNpZGUgdG8gdXNlIHRoZSBgd29ya2luZy10cmVlLWVuY29kaW5nYCBhdHRyaWJ1dGUKKyAgaW4geW91ciByZXBvc2l0b3J5LCB0aGVuIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGF0IGFsbAorICBjbGllbnRzIHdvcmtpbmcgd2l0aCB0aGUgcmVwb3NpdG9yeSBzdXBwb3J0IGl0LgorKworRm9yIGV4YW1wbGUsIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIHJlc291cmNlcyBmaWxlcyAoYCoucmNgKSBvcgorUG93ZXJTaGVsbCBzY3JpcHQgZmlsZXMgKGAqLnBzMWApIGFyZSBzb21ldGltZXMgZW5jb2RlZCBpbiBVVEYtMTYuCitJZiB5b3UgZGVjbGFyZSBgKi5wczFgIGFzIGZpbGVzIGFzIFVURi0xNiBhbmQgeW91IGFkZCBgZm9vLnBzMWAgd2l0aAorYSBgd29ya2luZy10cmVlLWVuY29kaW5nYCBlbmFibGVkIEdpdCBjbGllbnQsIHRoZW4gYGZvby5wczFgIHdpbGwgYmUKK3N0b3JlZCBhcyBVVEYtOCBpbnRlcm5hbGx5LiBBIGNsaWVudCB3aXRob3V0IGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgCitzdXBwb3J0IHdpbGwgY2hlY2tvdXQgYGZvby5wczFgIGFzIFVURi04IGVuY29kZWQgZmlsZS4gVGhpcyB3aWxsCit0eXBpY2FsbHkgY2F1c2UgdHJvdWJsZSBmb3IgdGhlIHVzZXJzIG9mIHRoaXMgZmlsZS4KKysKK0lmIGEgR2l0IGNsaWVudCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgCithdHRyaWJ1dGUgYWRkcyBhIG5ldyBmaWxlIGBiYXIucHMxYCwgdGhlbiBgYmFyLnBzMWAgd2lsbCBiZQorc3RvcmVkICJhcy1pcyIgaW50ZXJuYWxseSAoaW4gdGhpcyBleGFtcGxlIHByb2JhYmx5IGFzIFVURi0xNikuCitBIGNsaWVudCB3aXRoIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgIHN1cHBvcnQgd2lsbCBpbnRlcnByZXQgdGhlCitpbnRlcm5hbCBjb250ZW50cyBhcyBVVEYtOCBhbmQgdHJ5IHRvIGNvbnZlcnQgaXQgdG8gVVRGLTE2IG9uIGNoZWNrb3V0LgorVGhhdCBvcGVyYXRpb24gd2lsbCBmYWlsIGFuZCBjYXVzZSBhbiBlcnJvci4KKworLSBSZWVuY29kaW5nIGNvbnRlbnQgdG8gbm9uLVVURiBlbmNvZGluZ3MgY2FuIGNhdXNlIGVycm9ycyBhcyB0aGUKKyAgY29udmVyc2lvbiBtaWdodCBub3QgYmUgVVRGLTggcm91bmQgdHJpcCBzYWZlLiBJZiB5b3Ugc3VzcGVjdCB5b3VyCisgIGVuY29kaW5nIHRvIG5vdCBiZSByb3VuZCB0cmlwIHNhZmUsIHRoZW4gYWRkIGl0IHRvCisgIGBjb3JlLmNoZWNrUm91bmR0cmlwRW5jb2RpbmdgIHRvIG1ha2UgR2l0IGNoZWNrIHRoZSByb3VuZCB0cmlwCisgIGVuY29kaW5nIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gU0hJRlQtSklTIChKYXBhbmVzZSBjaGFyYWN0ZXIKKyAgc2V0KSBpcyBrbm93biB0byBoYXZlIHJvdW5kIHRyaXAgaXNzdWVzIHdpdGggVVRGLTggYW5kIGlzIGNoZWNrZWQgYnkKKyAgZGVmYXVsdC4KKworLSBSZWVuY29kaW5nIGNvbnRlbnQgcmVxdWlyZXMgcmVzb3VyY2VzIHRoYXQgbWlnaHQgc2xvdyBkb3duIGNlcnRhaW4KKyAgR2l0IG9wZXJhdGlvbnMgKGUuZyAnZ2l0IGNoZWNrb3V0JyBvciAnZ2l0IGFkZCcpLgorCitVc2UgdGhlIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgIGF0dHJpYnV0ZSBvbmx5IGlmIHlvdSBjYW5ub3Qgc3RvcmUgYSBmaWxlCitpbiBVVEYtOCBlbmNvZGluZyBhbmQgaWYgeW91IHdhbnQgR2l0IHRvIGJlIGFibGUgdG8gcHJvY2VzcyB0aGUgY29udGVudAorYXMgdGV4dC4KKworQXMgYW4gZXhhbXBsZSwgdXNlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBpZiB5b3VyICcqLnBzMScgZmlsZXMgYXJlCitVVEYtMTYgZW5jb2RlZCB3aXRoIGJ5dGUgb3JkZXIgbWFyayAoQk9NKSBhbmQgeW91IHdhbnQgR2l0IHRvIHBlcmZvcm0KK2F1dG9tYXRpYyBsaW5lIGVuZGluZyBjb252ZXJzaW9uIGJhc2VkIG9uIHlvdXIgcGxhdGZvcm0uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi5wczEJCXRleHQgd29ya2luZy10cmVlLWVuY29kaW5nPVVURi0xNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgaWYgeW91ciAnKi5wczEnIGZpbGVzIGFyZSBVVEYtMTYgbGl0dGxlCitlbmRpYW4gZW5jb2RlZCB3aXRob3V0IEJPTSBhbmQgeW91IHdhbnQgR2l0IHRvIHVzZSBXaW5kb3dzIGxpbmUgZW5kaW5ncworaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5ICh1c2UgYFVURi0xNkxFLUJPTWAgaW5zdGVhZCBvZiBgVVRGLTE2TEVgIGlmCit5b3Ugd2FudCBVVEYtMTYgbGl0dGxlIGVuZGlhbiB3aXRoIEJPTSkuCitQbGVhc2Ugbm90ZSwgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvCitleHBsaWNpdGx5IGRlZmluZSB0aGUgbGluZSBlbmRpbmdzIHdpdGggYGVvbGAgaWYgdGhlIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgCithdHRyaWJ1dGUgaXMgdXNlZCB0byBhdm9pZCBhbWJpZ3VpdHkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi5wczEJCXRleHQgd29ya2luZy10cmVlLWVuY29kaW5nPVVURi0xNkxFIGVvbD1DUkxGCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBnZXQgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgZW5jb2RpbmdzIG9uIHlvdXIgcGxhdGZvcm0gd2l0aCB0aGUKK2ZvbGxvd2luZyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ljb252IC0tbGlzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBkbyBub3Qga25vdyB0aGUgZW5jb2Rpbmcgb2YgYSBmaWxlLCB0aGVuIHlvdSBjYW4gdXNlIHRoZSBgZmlsZWAKK2NvbW1hbmQgdG8gZ3Vlc3MgdGhlIGVuY29kaW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ZpbGUgZm9vLnBzMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworYGlkZW50YAorXl5eXl5eXgorCitXaGVuIHRoZSBhdHRyaWJ1dGUgYGlkZW50YCBpcyBzZXQgZm9yIGEgcGF0aCwgR2l0IHJlcGxhY2VzCitgJElkJGAgaW4gdGhlIGJsb2Igb2JqZWN0IHdpdGggYCRJZDpgLCBmb2xsb3dlZCBieSB0aGUKKzQwLWNoYXJhY3RlciBoZXhhZGVjaW1hbCBibG9iIG9iamVjdCBuYW1lLCBmb2xsb3dlZCBieSBhIGRvbGxhcgorc2lnbiBgJGAgdXBvbiBjaGVja291dC4gIEFueSBieXRlIHNlcXVlbmNlIHRoYXQgYmVnaW5zIHdpdGgKK2AkSWQ6YCBhbmQgZW5kcyB3aXRoIGAkYCBpbiB0aGUgd29ya3RyZWUgZmlsZSBpcyByZXBsYWNlZAord2l0aCBgJElkJGAgdXBvbiBjaGVjay1pbi4KKworCitgZmlsdGVyYAorXl5eXl5eXl4KKworQSBgZmlsdGVyYCBhdHRyaWJ1dGUgY2FuIGJlIHNldCB0byBhIHN0cmluZyB2YWx1ZSB0aGF0IG5hbWVzIGEKK2ZpbHRlciBkcml2ZXIgc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uLgorCitBIGZpbHRlciBkcml2ZXIgY29uc2lzdHMgb2YgYSBgY2xlYW5gIGNvbW1hbmQgYW5kIGEgYHNtdWRnZWAKK2NvbW1hbmQsIGVpdGhlciBvZiB3aGljaCBjYW4gYmUgbGVmdCB1bnNwZWNpZmllZC4gIFVwb24KK2NoZWNrb3V0LCB3aGVuIHRoZSBgc211ZGdlYCBjb21tYW5kIGlzIHNwZWNpZmllZCwgdGhlIGNvbW1hbmQgaXMKK2ZlZCB0aGUgYmxvYiBvYmplY3QgZnJvbSBpdHMgc3RhbmRhcmQgaW5wdXQsIGFuZCBpdHMgc3RhbmRhcmQKK291dHB1dCBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgd29ya3RyZWUgZmlsZS4gIFNpbWlsYXJseSwgdGhlCitgY2xlYW5gIGNvbW1hbmQgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBjb250ZW50cyBvZiB3b3JrdHJlZSBmaWxlCit1cG9uIGNoZWNraW4uIEJ5IGRlZmF1bHQgdGhlc2UgY29tbWFuZHMgcHJvY2VzcyBvbmx5IGEgc2luZ2xlCitibG9iIGFuZCB0ZXJtaW5hdGUuIElmIGEgbG9uZyBydW5uaW5nIGBwcm9jZXNzYCBmaWx0ZXIgaXMgdXNlZAoraW4gcGxhY2Ugb2YgYGNsZWFuYCBhbmQvb3IgYHNtdWRnZWAgZmlsdGVycywgdGhlbiBHaXQgY2FuIHByb2Nlc3MKK2FsbCBibG9icyB3aXRoIGEgc2luZ2xlIGZpbHRlciBjb21tYW5kIGludm9jYXRpb24gZm9yIHRoZSBlbnRpcmUKK2xpZmUgb2YgYSBzaW5nbGUgR2l0IGNvbW1hbmQsIGZvciBleGFtcGxlIGBnaXQgYWRkIC0tYWxsYC4gSWYgYQorbG9uZyBydW5uaW5nIGBwcm9jZXNzYCBmaWx0ZXIgaXMgY29uZmlndXJlZCB0aGVuIGl0IGFsd2F5cyB0YWtlcworcHJlY2VkZW5jZSBvdmVyIGEgY29uZmlndXJlZCBzaW5nbGUgYmxvYiBmaWx0ZXIuIFNlZSBzZWN0aW9uCitiZWxvdyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGgKK2EgYHByb2Nlc3NgIGZpbHRlci4KKworT25lIHVzZSBvZiB0aGUgY29udGVudCBmaWx0ZXJpbmcgaXMgdG8gbWFzc2FnZSB0aGUgY29udGVudCBpbnRvIGEgc2hhcGUKK3RoYXQgaXMgbW9yZSBjb252ZW5pZW50IGZvciB0aGUgcGxhdGZvcm0sIGZpbGVzeXN0ZW0sIGFuZCB0aGUgdXNlciB0byB1c2UuCitGb3IgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiwgdGhlIGtleSBwaHJhc2UgaGVyZSBpcyAibW9yZSBjb252ZW5pZW50IiBhbmQKK25vdCAidHVybmluZyBzb21ldGhpbmcgdW51c2FibGUgaW50byB1c2FibGUiLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbnRlbnQKK2lzIHRoYXQgaWYgc29tZW9uZSB1bnNldHMgdGhlIGZpbHRlciBkcml2ZXIgZGVmaW5pdGlvbiwgb3IgZG9lcyBub3QgaGF2ZQordGhlIGFwcHJvcHJpYXRlIGZpbHRlciBwcm9ncmFtLCB0aGUgcHJvamVjdCBzaG91bGQgc3RpbGwgYmUgdXNhYmxlLgorCitBbm90aGVyIHVzZSBvZiB0aGUgY29udGVudCBmaWx0ZXJpbmcgaXMgdG8gc3RvcmUgdGhlIGNvbnRlbnQgdGhhdCBjYW5ub3QKK2JlIGRpcmVjdGx5IHVzZWQgaW4gdGhlIHJlcG9zaXRvcnkgKGUuZy4gYSBVVUlEIHRoYXQgcmVmZXJzIHRvIHRoZSB0cnVlCitjb250ZW50IHN0b3JlZCBvdXRzaWRlIEdpdCwgb3IgYW4gZW5jcnlwdGVkIGNvbnRlbnQpIGFuZCB0dXJuIGl0IGludG8gYQordXNhYmxlIGZvcm0gdXBvbiBjaGVja291dCAoZS5nLiBkb3dubG9hZCB0aGUgZXh0ZXJuYWwgY29udGVudCwgb3IgZGVjcnlwdAordGhlIGVuY3J5cHRlZCBjb250ZW50KS4KKworVGhlc2UgdHdvIGZpbHRlcnMgYmVoYXZlIGRpZmZlcmVudGx5LCBhbmQgYnkgZGVmYXVsdCwgYSBmaWx0ZXIgaXMgdGFrZW4gYXMKK3RoZSBmb3JtZXIsIG1hc3NhZ2luZyB0aGUgY29udGVudHMgaW50byBtb3JlIGNvbnZlbmllbnQgc2hhcGUuICBBIG1pc3NpbmcKK2ZpbHRlciBkcml2ZXIgZGVmaW5pdGlvbiBpbiB0aGUgY29uZmlnLCBvciBhIGZpbHRlciBkcml2ZXIgdGhhdCBleGl0cyB3aXRoCithIG5vbi16ZXJvIHN0YXR1cywgaXMgbm90IGFuIGVycm9yIGJ1dCBtYWtlcyB0aGUgZmlsdGVyIGEgbm8tb3AgcGFzc3RocnUuCisKK1lvdSBjYW4gZGVjbGFyZSB0aGF0IGEgZmlsdGVyIHR1cm5zIGEgY29udGVudCB0aGF0IGJ5IGl0c2VsZiBpcyB1bnVzYWJsZQoraW50byBhIHVzYWJsZSBjb250ZW50IGJ5IHNldHRpbmcgdGhlIGZpbHRlci48ZHJpdmVyPi5yZXF1aXJlZCBjb25maWd1cmF0aW9uCit2YXJpYWJsZSB0byBgdHJ1ZWAuCisKK05vdGU6IFdoZW5ldmVyIHRoZSBjbGVhbiBmaWx0ZXIgaXMgY2hhbmdlZCwgdGhlIHJlcG8gc2hvdWxkIGJlIHJlbm9ybWFsaXplZDoKKyQgZ2l0IGFkZCAtLXJlbm9ybWFsaXplIC4KKworRm9yIGV4YW1wbGUsIGluIC5naXRhdHRyaWJ1dGVzLCB5b3Ugd291bGQgYXNzaWduIHRoZSBgZmlsdGVyYAorYXR0cmlidXRlIGZvciBwYXRocy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLmMJZmlsdGVyPWluZGVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4geW91IHdvdWxkIGRlZmluZSBhICJmaWx0ZXIuaW5kZW50LmNsZWFuIiBhbmQgImZpbHRlci5pbmRlbnQuc211ZGdlIgorY29uZmlndXJhdGlvbiBpbiB5b3VyIC5naXQvY29uZmlnIHRvIHNwZWNpZnkgYSBwYWlyIG9mIGNvbW1hbmRzIHRvCittb2RpZnkgdGhlIGNvbnRlbnRzIG9mIEMgcHJvZ3JhbXMgd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSBjaGVja2VkCitpbiAoImNsZWFuIiBpcyBydW4pIGFuZCBjaGVja2VkIG91dCAobm8gY2hhbmdlIGlzIG1hZGUgYmVjYXVzZSB0aGUKK2NvbW1hbmQgaXMgImNhdCIpLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tmaWx0ZXIgImluZGVudCJdCisJY2xlYW4gPSBpbmRlbnQKKwlzbXVkZ2UgPSBjYXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgYmVzdCByZXN1bHRzLCBgY2xlYW5gIHNob3VsZCBub3QgYWx0ZXIgaXRzIG91dHB1dCBmdXJ0aGVyIGlmIGl0IGlzCitydW4gdHdpY2UgKCJjbGVhbi0+Y2xlYW4iIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvICJjbGVhbiIpLCBhbmQKK211bHRpcGxlIGBzbXVkZ2VgIGNvbW1hbmRzIHNob3VsZCBub3QgYWx0ZXIgYGNsZWFuYCdzIG91dHB1dAorKCJzbXVkZ2UtPnNtdWRnZS0+Y2xlYW4iIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvICJjbGVhbiIpLiAgU2VlIHRoZQorc2VjdGlvbiBvbiBtZXJnaW5nIGJlbG93LgorCitUaGUgImluZGVudCIgZmlsdGVyIGlzIHdlbGwtYmVoYXZlZCBpbiB0aGlzIHJlZ2FyZDogaXQgd2lsbCBub3QgbW9kaWZ5CitpbnB1dCB0aGF0IGlzIGFscmVhZHkgY29ycmVjdGx5IGluZGVudGVkLiAgSW4gdGhpcyBjYXNlLCB0aGUgbGFjayBvZiBhCitzbXVkZ2UgZmlsdGVyIG1lYW5zIHRoYXQgdGhlIGNsZWFuIGZpbHRlciBfbXVzdF8gYWNjZXB0IGl0cyBvd24gb3V0cHV0Cit3aXRob3V0IG1vZGlmeWluZyBpdC4KKworSWYgYSBmaWx0ZXIgX211c3RfIHN1Y2NlZWQgaW4gb3JkZXIgdG8gbWFrZSB0aGUgc3RvcmVkIGNvbnRlbnRzIHVzYWJsZSwKK3lvdSBjYW4gZGVjbGFyZSB0aGF0IHRoZSBmaWx0ZXIgaXMgYHJlcXVpcmVkYCwgaW4gdGhlIGNvbmZpZ3VyYXRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2ZpbHRlciAiY3J5cHQiXQorCWNsZWFuID0gb3BlbnNzbCBlbmMgLi4uCisJc211ZGdlID0gb3BlbnNzbCBlbmMgLWQgLi4uCisJcmVxdWlyZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXF1ZW5jZSAiJWYiIG9uIHRoZSBmaWx0ZXIgY29tbWFuZCBsaW5lIGlzIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YKK3RoZSBmaWxlIHRoZSBmaWx0ZXIgaXMgd29ya2luZyBvbi4gIEEgZmlsdGVyIG1pZ2h0IHVzZSB0aGlzIGluIGtleXdvcmQKK3N1YnN0aXR1dGlvbi4gIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tmaWx0ZXIgInA0Il0KKwljbGVhbiA9IGdpdC1wNC1maWx0ZXIgLS1jbGVhbiAlZgorCXNtdWRnZSA9IGdpdC1wNC1maWx0ZXIgLS1zbXVkZ2UgJWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgIiVmIiBpcyB0aGUgbmFtZSBvZiB0aGUgcGF0aCB0aGF0IGlzIGJlaW5nIHdvcmtlZCBvbi4gRGVwZW5kaW5nCitvbiB0aGUgdmVyc2lvbiB0aGF0IGlzIGJlaW5nIGZpbHRlcmVkLCB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9uIGRpc2sgbWF5Citub3QgZXhpc3QsIG9yIG1heSBoYXZlIGRpZmZlcmVudCBjb250ZW50cy4gU28sIHNtdWRnZSBhbmQgY2xlYW4gY29tbWFuZHMKK3Nob3VsZCBub3QgdHJ5IHRvIGFjY2VzcyB0aGUgZmlsZSBvbiBkaXNrLCBidXQgb25seSBhY3QgYXMgZmlsdGVycyBvbiB0aGUKK2NvbnRlbnQgcHJvdmlkZWQgdG8gdGhlbSBvbiBzdGFuZGFyZCBpbnB1dC4KKworTG9uZyBSdW5uaW5nIEZpbHRlciBQcm9jZXNzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSWYgdGhlIGZpbHRlciBjb21tYW5kIChhIHN0cmluZyB2YWx1ZSkgaXMgZGVmaW5lZCB2aWEKK2BmaWx0ZXIuPGRyaXZlcj4ucHJvY2Vzc2AgdGhlbiBHaXQgY2FuIHByb2Nlc3MgYWxsIGJsb2JzIHdpdGggYQorc2luZ2xlIGZpbHRlciBpbnZvY2F0aW9uIGZvciB0aGUgZW50aXJlIGxpZmUgb2YgYSBzaW5nbGUgR2l0Citjb21tYW5kLiBUaGlzIGlzIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBsb25nLXJ1bm5pbmcgcHJvY2VzcyBwcm90b2NvbAorKGRlc2NyaWJlZCBpbiB0ZWNobmljYWwvbG9uZy1ydW5uaW5nLXByb2Nlc3MtcHJvdG9jb2wudHh0KS4KKworV2hlbiBHaXQgZW5jb3VudGVycyB0aGUgZmlyc3QgZmlsZSB0aGF0IG5lZWRzIHRvIGJlIGNsZWFuZWQgb3Igc211ZGdlZCwKK2l0IHN0YXJ0cyB0aGUgZmlsdGVyIGFuZCBwZXJmb3JtcyB0aGUgaGFuZHNoYWtlLiBJbiB0aGUgaGFuZHNoYWtlLCB0aGUKK3dlbGNvbWUgbWVzc2FnZSBzZW50IGJ5IEdpdCBpcyAiZ2l0LWZpbHRlci1jbGllbnQiLCBvbmx5IHZlcnNpb24gMiBpcworc3VwcG9ydGVkLCBhbmQgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgYXJlICJjbGVhbiIsICJzbXVkZ2UiLCBhbmQKKyJkZWxheSIuCisKK0FmdGVyd2FyZHMgR2l0IHNlbmRzIGEgbGlzdCBvZiAia2V5PXZhbHVlIiBwYWlycyB0ZXJtaW5hdGVkIHdpdGgKK2EgZmx1c2ggcGFja2V0LiBUaGUgbGlzdCB3aWxsIGNvbnRhaW4gYXQgbGVhc3QgdGhlIGZpbHRlciBjb21tYW5kCisoYmFzZWQgb24gdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMpIGFuZCB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUKK3RvIGZpbHRlciByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290LiBSaWdodCBhZnRlciB0aGUgZmx1c2ggcGFja2V0CitHaXQgc2VuZHMgdGhlIGNvbnRlbnQgc3BsaXQgaW4gemVybyBvciBtb3JlIHBrdC1saW5lIHBhY2tldHMgYW5kIGEKK2ZsdXNoIHBhY2tldCB0byB0ZXJtaW5hdGUgY29udGVudC4gUGxlYXNlIG5vdGUsIHRoYXQgdGhlIGZpbHRlcgorbXVzdCBub3Qgc2VuZCBhbnkgcmVzcG9uc2UgYmVmb3JlIGl0IHJlY2VpdmVkIHRoZSBjb250ZW50IGFuZCB0aGUKK2ZpbmFsIGZsdXNoIHBhY2tldC4gQWxzbyBub3RlIHRoYXQgdGhlICJ2YWx1ZSIgb2YgYSAia2V5PXZhbHVlIiBwYWlyCitjYW4gY29udGFpbiB0aGUgIj0iIGNoYXJhY3RlciB3aGVyZWFzIHRoZSBrZXkgd291bGQgbmV2ZXIgY29udGFpbgordGhhdCBjaGFyYWN0ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2tldDogICAgICAgICAgZ2l0PiBjb21tYW5kPXNtdWRnZQorcGFja2V0OiAgICAgICAgICBnaXQ+IHBhdGhuYW1lPXBhdGgvdGVzdGZpbGUuZGF0CitwYWNrZXQ6ICAgICAgICAgIGdpdD4gMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ+IENPTlRFTlQKK3BhY2tldDogICAgICAgICAgZ2l0PiAwMDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbHRlciBpcyBleHBlY3RlZCB0byByZXNwb25kIHdpdGggYSBsaXN0IG9mICJrZXk9dmFsdWUiIHBhaXJzCit0ZXJtaW5hdGVkIHdpdGggYSBmbHVzaCBwYWNrZXQuIElmIHRoZSBmaWx0ZXIgZG9lcyBub3QgZXhwZXJpZW5jZQorcHJvYmxlbXMgdGhlbiB0aGUgbGlzdCBtdXN0IGNvbnRhaW4gYSAic3VjY2VzcyIgc3RhdHVzLiBSaWdodCBhZnRlcgordGhlc2UgcGFja2V0cyB0aGUgZmlsdGVyIGlzIGV4cGVjdGVkIHRvIHNlbmQgdGhlIGNvbnRlbnQgaW4gemVybworb3IgbW9yZSBwa3QtbGluZSBwYWNrZXRzIGFuZCBhIGZsdXNoIHBhY2tldCBhdCB0aGUgZW5kLiBGaW5hbGx5LCBhCitzZWNvbmQgbGlzdCBvZiAia2V5PXZhbHVlIiBwYWlycyB0ZXJtaW5hdGVkIHdpdGggYSBmbHVzaCBwYWNrZXQKK2lzIGV4cGVjdGVkLiBUaGUgZmlsdGVyIGNhbiBjaGFuZ2UgdGhlIHN0YXR1cyBpbiB0aGUgc2Vjb25kIGxpc3QKK29yIGtlZXAgdGhlIHN0YXR1cyBhcyBpcyB3aXRoIGFuIGVtcHR5IGxpc3QuIFBsZWFzZSBub3RlIHRoYXQgdGhlCitlbXB0eSBsaXN0IG11c3QgYmUgdGVybWluYXRlZCB3aXRoIGEgZmx1c2ggcGFja2V0IHJlZ2FyZGxlc3MuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2V0OiAgICAgICAgICBnaXQ8IHN0YXR1cz1zdWNjZXNzCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ8IFNNVURHRURfQ09OVEVOVAorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwICAjIGVtcHR5IGxpc3QsIGtlZXAgInN0YXR1cz1zdWNjZXNzIiB1bmNoYW5nZWQhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIHJlc3VsdCBjb250ZW50IGlzIGVtcHR5IHRoZW4gdGhlIGZpbHRlciBpcyBleHBlY3RlZCB0byByZXNwb25kCit3aXRoIGEgInN1Y2Nlc3MiIHN0YXR1cyBhbmQgYSBmbHVzaCBwYWNrZXQgdG8gc2lnbmFsIHRoZSBlbXB0eSBjb250ZW50LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgc3RhdHVzPXN1Y2Nlc3MKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMCAgIyBlbXB0eSBjb250ZW50IQorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAgICMgZW1wdHkgbGlzdCwga2VlcCAic3RhdHVzPXN1Y2Nlc3MiIHVuY2hhbmdlZCEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBjYXNlIHRoZSBmaWx0ZXIgY2Fubm90IG9yIGRvZXMgbm90IHdhbnQgdG8gcHJvY2VzcyB0aGUgY29udGVudCwKK2l0IGlzIGV4cGVjdGVkIHRvIHJlc3BvbmQgd2l0aCBhbiAiZXJyb3IiIHN0YXR1cy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2V0OiAgICAgICAgICBnaXQ8IHN0YXR1cz1lcnJvcgorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgZmlsdGVyIGV4cGVyaWVuY2VzIGFuIGVycm9yIGR1cmluZyBwcm9jZXNzaW5nLCB0aGVuIGl0IGNhbgorc2VuZCB0aGUgc3RhdHVzICJlcnJvciIgYWZ0ZXIgdGhlIGNvbnRlbnQgd2FzIChwYXJ0aWFsbHkgb3IKK2NvbXBsZXRlbHkpIHNlbnQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhY2tldDogICAgICAgICAgZ2l0PCBzdGF0dXM9c3VjY2VzcworcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCBIQUxGX1dSSVRURU5fRVJST05FT1VTX0NPTlRFTlQKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgc3RhdHVzPWVycm9yCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGNhc2UgdGhlIGZpbHRlciBjYW5ub3Qgb3IgZG9lcyBub3Qgd2FudCB0byBwcm9jZXNzIHRoZSBjb250ZW50CithcyB3ZWxsIGFzIGFueSBmdXR1cmUgY29udGVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBHaXQgcHJvY2VzcywKK3RoZW4gaXQgaXMgZXhwZWN0ZWQgdG8gcmVzcG9uZCB3aXRoIGFuICJhYm9ydCIgc3RhdHVzIGF0IGFueSBwb2ludAoraW4gdGhlIHByb3RvY29sLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgc3RhdHVzPWFib3J0CitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCBuZWl0aGVyIHN0b3BzIG5vciByZXN0YXJ0cyB0aGUgZmlsdGVyIHByb2Nlc3MgaW4gY2FzZSB0aGUKKyJlcnJvciIvImFib3J0IiBzdGF0dXMgaXMgc2V0LiBIb3dldmVyLCBHaXQgc2V0cyBpdHMgZXhpdCBjb2RlCithY2NvcmRpbmcgdG8gdGhlIGBmaWx0ZXIuPGRyaXZlcj4ucmVxdWlyZWRgIGZsYWcsIG1pbWlja2luZyB0aGUKK2JlaGF2aW9yIG9mIHRoZSBgZmlsdGVyLjxkcml2ZXI+LmNsZWFuYCAvIGBmaWx0ZXIuPGRyaXZlcj4uc211ZGdlYAorbWVjaGFuaXNtLgorCitJZiB0aGUgZmlsdGVyIGRpZXMgZHVyaW5nIHRoZSBjb21tdW5pY2F0aW9uIG9yIGRvZXMgbm90IGFkaGVyZSB0bwordGhlIHByb3RvY29sIHRoZW4gR2l0IHdpbGwgc3RvcCB0aGUgZmlsdGVyIHByb2Nlc3MgYW5kIHJlc3RhcnQgaXQKK3dpdGggdGhlIG5leHQgZmlsZSB0aGF0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZC4gRGVwZW5kaW5nIG9uIHRoZQorYGZpbHRlci48ZHJpdmVyPi5yZXF1aXJlZGAgZmxhZyBHaXQgd2lsbCBpbnRlcnByZXQgdGhhdCBhcyBlcnJvci4KKworRGVsYXkKK15eXl5eCisKK0lmIHRoZSBmaWx0ZXIgc3VwcG9ydHMgdGhlICJkZWxheSIgY2FwYWJpbGl0eSwgdGhlbiBHaXQgY2FuIHNlbmQgdGhlCitmbGFnICJjYW4tZGVsYXkiIGFmdGVyIHRoZSBmaWx0ZXIgY29tbWFuZCBhbmQgcGF0aG5hbWUuIFRoaXMgZmxhZworZGVub3RlcyB0aGF0IHRoZSBmaWx0ZXIgY2FuIGRlbGF5IGZpbHRlcmluZyB0aGUgY3VycmVudCBibG9iIChlLmcuIHRvCitjb21wZW5zYXRlIG5ldHdvcmsgbGF0ZW5jaWVzKSBieSByZXNwb25kaW5nIHdpdGggbm8gY29udGVudCBidXQgd2l0aAordGhlIHN0YXR1cyAiZGVsYXllZCIgYW5kIGEgZmx1c2ggcGFja2V0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gY29tbWFuZD1zbXVkZ2UKK3BhY2tldDogICAgICAgICAgZ2l0PiBwYXRobmFtZT1wYXRoL3Rlc3RmaWxlLmRhdAorcGFja2V0OiAgICAgICAgICBnaXQ+IGNhbi1kZWxheT0xCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ+IENPTlRFTlQKK3BhY2tldDogICAgICAgICAgZ2l0PiAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgc3RhdHVzPWRlbGF5ZWQKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIGZpbHRlciBzdXBwb3J0cyB0aGUgImRlbGF5IiBjYXBhYmlsaXR5IHRoZW4gaXQgbXVzdCBzdXBwb3J0IHRoZQorImxpc3RfYXZhaWxhYmxlX2Jsb2JzIiBjb21tYW5kLiBJZiBHaXQgc2VuZHMgdGhpcyBjb21tYW5kLCB0aGVuIHRoZQorZmlsdGVyIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIGxpc3Qgb2YgcGF0aG5hbWVzIHJlcHJlc2VudGluZyBibG9icwordGhhdCBoYXZlIGJlZW4gZGVsYXllZCBlYXJsaWVyIGFuZCBhcmUgbm93IGF2YWlsYWJsZS4KK1RoZSBsaXN0IG11c3QgYmUgdGVybWluYXRlZCB3aXRoIGEgZmx1c2ggcGFja2V0IGZvbGxvd2VkCitieSBhICJzdWNjZXNzIiBzdGF0dXMgdGhhdCBpcyBhbHNvIHRlcm1pbmF0ZWQgd2l0aCBhIGZsdXNoIHBhY2tldC4gSWYKK25vIGJsb2JzIGZvciB0aGUgZGVsYXllZCBwYXRocyBhcmUgYXZhaWxhYmxlLCB5ZXQsIHRoZW4gdGhlIGZpbHRlciBpcworZXhwZWN0ZWQgdG8gYmxvY2sgdGhlIHJlc3BvbnNlIHVudGlsIGF0IGxlYXN0IG9uZSBibG9iIGJlY29tZXMKK2F2YWlsYWJsZS4gVGhlIGZpbHRlciBjYW4gdGVsbCBHaXQgdGhhdCBpdCBoYXMgbm8gbW9yZSBkZWxheWVkIGJsb2JzCitieSBzZW5kaW5nIGFuIGVtcHR5IGxpc3QuIEFzIHNvb24gYXMgdGhlIGZpbHRlciByZXNwb25kcyB3aXRoIGFuIGVtcHR5CitsaXN0LCBHaXQgc3RvcHMgYXNraW5nLiBBbGwgYmxvYnMgdGhhdCBHaXQgaGFzIG5vdCByZWNlaXZlZCBhdCB0aGlzCitwb2ludCBhcmUgY29uc2lkZXJlZCBtaXNzaW5nIGFuZCB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gY29tbWFuZD1saXN0X2F2YWlsYWJsZV9ibG9icworcGFja2V0OiAgICAgICAgICBnaXQ+IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCBwYXRobmFtZT1wYXRoL3Rlc3RmaWxlLmRhdAorcGFja2V0OiAgICAgICAgICBnaXQ8IHBhdGhuYW1lPXBhdGgvb3RoZXJmaWxlLmRhdAorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCBzdGF0dXM9c3VjY2VzcworcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciBHaXQgcmVjZWl2ZWQgdGhlIHBhdGhuYW1lcywgaXQgd2lsbCByZXF1ZXN0IHRoZSBjb3JyZXNwb25kaW5nCitibG9icyBhZ2Fpbi4gVGhlc2UgcmVxdWVzdHMgY29udGFpbiBhIHBhdGhuYW1lIGFuZCBhbiBlbXB0eSBjb250ZW50CitzZWN0aW9uLiBUaGUgZmlsdGVyIGlzIGV4cGVjdGVkIHRvIHJlc3BvbmQgd2l0aCB0aGUgc211ZGdlZCBjb250ZW50CitpbiB0aGUgdXN1YWwgd2F5IGFzIGV4cGxhaW5lZCBhYm92ZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFja2V0OiAgICAgICAgICBnaXQ+IGNvbW1hbmQ9c211ZGdlCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gcGF0aG5hbWU9cGF0aC90ZXN0ZmlsZS5kYXQKK3BhY2tldDogICAgICAgICAgZ2l0PiAwMDAwCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gMDAwMCAgIyBlbXB0eSBjb250ZW50IQorcGFja2V0OiAgICAgICAgICBnaXQ8IHN0YXR1cz1zdWNjZXNzCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ8IFNNVURHRURfQ09OVEVOVAorcGFja2V0OiAgICAgICAgICBnaXQ8IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwICAjIGVtcHR5IGxpc3QsIGtlZXAgInN0YXR1cz1zdWNjZXNzIiB1bmNoYW5nZWQhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXhhbXBsZQorXl5eXl5eXgorCitBIGxvbmcgcnVubmluZyBmaWx0ZXIgZGVtbyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4KK2Bjb250cmliL2xvbmctcnVubmluZy1maWx0ZXIvZXhhbXBsZS5wbGAgbG9jYXRlZCBpbiB0aGUgR2l0Citjb3JlIHJlcG9zaXRvcnkuIElmIHlvdSBkZXZlbG9wIHlvdXIgb3duIGxvbmcgcnVubmluZyBmaWx0ZXIKK3Byb2Nlc3MgdGhlbiB0aGUgYEdJVF9UUkFDRV9QQUNLRVRgIGVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUKK3ZlcnkgaGVscGZ1bCBmb3IgZGVidWdnaW5nIChzZWUgbGlua2dpdDpnaXRbMV0pLgorCitQbGVhc2Ugbm90ZSB0aGF0IHlvdSBjYW5ub3QgdXNlIGFuIGV4aXN0aW5nIGBmaWx0ZXIuPGRyaXZlcj4uY2xlYW5gCitvciBgZmlsdGVyLjxkcml2ZXI+LnNtdWRnZWAgY29tbWFuZCB3aXRoIGBmaWx0ZXIuPGRyaXZlcj4ucHJvY2Vzc2AKK2JlY2F1c2UgdGhlIGZvcm1lciB0d28gdXNlIGEgZGlmZmVyZW50IGludGVyIHByb2Nlc3MgY29tbXVuaWNhdGlvbgorcHJvdG9jb2wgdGhhbiB0aGUgbGF0dGVyIG9uZS4KKworCitJbnRlcmFjdGlvbiBiZXR3ZWVuIGNoZWNraW4vY2hlY2tvdXQgYXR0cmlidXRlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSW4gdGhlIGNoZWNrLWluIGNvZGVwYXRoLCB0aGUgd29ya3RyZWUgZmlsZSBpcyBmaXJzdCBjb252ZXJ0ZWQKK3dpdGggYGZpbHRlcmAgZHJpdmVyIChpZiBzcGVjaWZpZWQgYW5kIGNvcnJlc3BvbmRpbmcgZHJpdmVyCitkZWZpbmVkKSwgdGhlbiB0aGUgcmVzdWx0IGlzIHByb2Nlc3NlZCB3aXRoIGBpZGVudGAgKGlmCitzcGVjaWZpZWQpLCBhbmQgdGhlbiBmaW5hbGx5IHdpdGggYHRleHRgIChhZ2FpbiwgaWYgc3BlY2lmaWVkCithbmQgYXBwbGljYWJsZSkuCisKK0luIHRoZSBjaGVjay1vdXQgY29kZXBhdGgsIHRoZSBibG9iIGNvbnRlbnQgaXMgZmlyc3QgY29udmVydGVkCit3aXRoIGB0ZXh0YCwgYW5kIHRoZW4gYGlkZW50YCBhbmQgZmVkIHRvIGBmaWx0ZXJgLgorCisKK01lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJpbmcgY2hlY2tpbi9jaGVja291dCBhdHRyaWJ1dGVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitJZiB5b3UgaGF2ZSBhZGRlZCBhdHRyaWJ1dGVzIHRvIGEgZmlsZSB0aGF0IGNhdXNlIHRoZSBjYW5vbmljYWwKK3JlcG9zaXRvcnkgZm9ybWF0IGZvciB0aGF0IGZpbGUgdG8gY2hhbmdlLCBzdWNoIGFzIGFkZGluZyBhCitjbGVhbi9zbXVkZ2UgZmlsdGVyIG9yIHRleHQvZW9sL2lkZW50IGF0dHJpYnV0ZXMsIG1lcmdpbmcgYW55dGhpbmcKK3doZXJlIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGluIHBsYWNlIHdvdWxkIG5vcm1hbGx5IGNhdXNlIG1lcmdlCitjb25mbGljdHMuCisKK1RvIHByZXZlbnQgdGhlc2UgdW5uZWNlc3NhcnkgbWVyZ2UgY29uZmxpY3RzLCBHaXQgY2FuIGJlIHRvbGQgdG8gcnVuIGEKK3ZpcnR1YWwgY2hlY2stb3V0IGFuZCBjaGVjay1pbiBvZiBhbGwgdGhyZWUgc3RhZ2VzIG9mIGEgZmlsZSB3aGVuCityZXNvbHZpbmcgYSB0aHJlZS13YXkgbWVyZ2UgYnkgc2V0dGluZyB0aGUgYG1lcmdlLnJlbm9ybWFsaXplYAorY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFRoaXMgcHJldmVudHMgY2hhbmdlcyBjYXVzZWQgYnkgY2hlY2staW4KK2NvbnZlcnNpb24gZnJvbSBjYXVzaW5nIHNwdXJpb3VzIG1lcmdlIGNvbmZsaWN0cyB3aGVuIGEgY29udmVydGVkIGZpbGUKK2lzIG1lcmdlZCB3aXRoIGFuIHVuY29udmVydGVkIGZpbGUuCisKK0FzIGxvbmcgYXMgYSAic211ZGdlLT5jbGVhbiIgcmVzdWx0cyBpbiB0aGUgc2FtZSBvdXRwdXQgYXMgYSAiY2xlYW4iCitldmVuIG9uIGZpbGVzIHRoYXQgYXJlIGFscmVhZHkgc211ZGdlZCwgdGhpcyBzdHJhdGVneSB3aWxsCithdXRvbWF0aWNhbGx5IHJlc29sdmUgYWxsIGZpbHRlci1yZWxhdGVkIGNvbmZsaWN0cy4gIEZpbHRlcnMgdGhhdCBkbworbm90IGFjdCBpbiB0aGlzIHdheSBtYXkgY2F1c2UgYWRkaXRpb25hbCBtZXJnZSBjb25mbGljdHMgdGhhdCBtdXN0IGJlCityZXNvbHZlZCBtYW51YWxseS4KKworCitHZW5lcmF0aW5nIGRpZmYgdGV4dAorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYGRpZmZgCiteXl5eXl4KKworVGhlIGF0dHJpYnV0ZSBgZGlmZmAgYWZmZWN0cyBob3cgR2l0IGdlbmVyYXRlcyBkaWZmcyBmb3IgcGFydGljdWxhcgorZmlsZXMuIEl0IGNhbiB0ZWxsIEdpdCB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgdGV4dHVhbCBwYXRjaCBmb3IgdGhlIHBhdGgKK29yIHRvIHRyZWF0IHRoZSBwYXRoIGFzIGEgYmluYXJ5IGZpbGUuICBJdCBjYW4gYWxzbyBhZmZlY3Qgd2hhdCBsaW5lIGlzCitzaG93biBvbiB0aGUgaHVuayBoZWFkZXIgYEBAIC1rLGwgK24sbSBAQGAgbGluZSwgdGVsbCBHaXQgdG8gdXNlIGFuCitleHRlcm5hbCBjb21tYW5kIHRvIGdlbmVyYXRlIHRoZSBkaWZmLCBvciBhc2sgR2l0IHRvIGNvbnZlcnQgYmluYXJ5CitmaWxlcyB0byBhIHRleHQgZm9ybWF0IGJlZm9yZSBnZW5lcmF0aW5nIHRoZSBkaWZmLgorCitTZXQ6OgorCisJQSBwYXRoIHRvIHdoaWNoIHRoZSBgZGlmZmAgYXR0cmlidXRlIGlzIHNldCBpcyB0cmVhdGVkCisJYXMgdGV4dCwgZXZlbiB3aGVuIHRoZXkgY29udGFpbiBieXRlIHZhbHVlcyB0aGF0CisJbm9ybWFsbHkgbmV2ZXIgYXBwZWFyIGluIHRleHQgZmlsZXMsIHN1Y2ggYXMgTlVMLgorCitVbnNldDo6CisKKwlBIHBhdGggdG8gd2hpY2ggdGhlIGBkaWZmYCBhdHRyaWJ1dGUgaXMgdW5zZXQgd2lsbAorCWdlbmVyYXRlIGBCaW5hcnkgZmlsZXMgZGlmZmVyYCAob3IgYSBiaW5hcnkgcGF0Y2gsIGlmCisJYmluYXJ5IHBhdGNoZXMgYXJlIGVuYWJsZWQpLgorCitVbnNwZWNpZmllZDo6CisKKwlBIHBhdGggdG8gd2hpY2ggdGhlIGBkaWZmYCBhdHRyaWJ1dGUgaXMgdW5zcGVjaWZpZWQKKwlmaXJzdCBnZXRzIGl0cyBjb250ZW50cyBpbnNwZWN0ZWQsIGFuZCBpZiBpdCBsb29rcyBsaWtlCisJdGV4dCBhbmQgaXMgc21hbGxlciB0aGFuIGNvcmUuYmlnRmlsZVRocmVzaG9sZCwgaXQgaXMgdHJlYXRlZAorCWFzIHRleHQuIE90aGVyd2lzZSBpdCB3b3VsZCBnZW5lcmF0ZSBgQmluYXJ5IGZpbGVzIGRpZmZlcmAuCisKK1N0cmluZzo6CisKKwlEaWZmIGlzIHNob3duIHVzaW5nIHRoZSBzcGVjaWZpZWQgZGlmZiBkcml2ZXIuICBFYWNoIGRyaXZlciBtYXkKKwlzcGVjaWZ5IG9uZSBvciBtb3JlIG9wdGlvbnMsIGFzIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nCisJc2VjdGlvbi4gVGhlIG9wdGlvbnMgZm9yIHRoZSBkaWZmIGRyaXZlciAiZm9vIiBhcmUgZGVmaW5lZAorCWJ5IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbiB0aGUgImRpZmYuZm9vIiBzZWN0aW9uIG9mIHRoZQorCUdpdCBjb25maWcgZmlsZS4KKworCitEZWZpbmluZyBhbiBleHRlcm5hbCBkaWZmIGRyaXZlcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGRlZmluaXRpb24gb2YgYSBkaWZmIGRyaXZlciBpcyBkb25lIGluIGBnaXRjb25maWdgLCBub3QKK2BnaXRhdHRyaWJ1dGVzYCBmaWxlLCBzbyBzdHJpY3RseSBzcGVha2luZyB0aGlzIG1hbnVhbCBwYWdlIGlzIGEKK3dyb25nIHBsYWNlIHRvIHRhbGsgYWJvdXQgaXQuICBIb3dldmVyLi4uCisKK1RvIGRlZmluZSBhbiBleHRlcm5hbCBkaWZmIGRyaXZlciBgamNkaWZmYCwgYWRkIGEgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAiamNkaWZmIl0KKwljb21tYW5kID0gai1jLWRpZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBHaXQgbmVlZHMgdG8gc2hvdyB5b3UgYSBkaWZmIGZvciB0aGUgcGF0aCB3aXRoIGBkaWZmYAorYXR0cmlidXRlIHNldCB0byBgamNkaWZmYCwgaXQgY2FsbHMgdGhlIGNvbW1hbmQgeW91IHNwZWNpZmllZAord2l0aCB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiwgaS5lLiBgai1jLWRpZmZgLCB3aXRoIDcKK3BhcmFtZXRlcnMsIGp1c3QgbGlrZSBgR0lUX0VYVEVSTkFMX0RJRkZgIHByb2dyYW0gaXMgY2FsbGVkLgorU2VlIGxpbmtnaXQ6Z2l0WzFdIGZvciBkZXRhaWxzLgorCisKK0RlZmluaW5nIGEgY3VzdG9tIGh1bmstaGVhZGVyCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFYWNoIGdyb3VwIG9mIGNoYW5nZXMgKGNhbGxlZCBhICJodW5rIikgaW4gdGhlIHRleHR1YWwgZGlmZiBvdXRwdXQKK2lzIHByZWZpeGVkIHdpdGggYSBsaW5lIG9mIHRoZSBmb3JtOgorCisJQEAgLWssbCArbixtIEBAIFRFWFQKKworVGhpcyBpcyBjYWxsZWQgYSAnaHVuayBoZWFkZXInLiAgVGhlICJURVhUIiBwb3J0aW9uIGlzIGJ5IGRlZmF1bHQgYSBsaW5lCit0aGF0IGJlZ2lucyB3aXRoIGFuIGFscGhhYmV0LCBhbiB1bmRlcnNjb3JlIG9yIGEgZG9sbGFyIHNpZ247IHRoaXMKK21hdGNoZXMgd2hhdCBHTlUgJ2RpZmYgLXAnIG91dHB1dCB1c2VzLiAgVGhpcyBkZWZhdWx0IHNlbGVjdGlvbiBob3dldmVyCitpcyBub3Qgc3VpdGVkIGZvciBzb21lIGNvbnRlbnRzLCBhbmQgeW91IGNhbiB1c2UgYSBjdXN0b21pemVkIHBhdHRlcm4KK3RvIG1ha2UgYSBzZWxlY3Rpb24uCisKK0ZpcnN0LCBpbiAuZ2l0YXR0cmlidXRlcywgeW91IHdvdWxkIGFzc2lnbiB0aGUgYGRpZmZgIGF0dHJpYnV0ZQorZm9yIHBhdGhzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoudGV4CWRpZmY9dGV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiwgeW91IHdvdWxkIGRlZmluZSBhICJkaWZmLnRleC54ZnVuY25hbWUiIGNvbmZpZ3VyYXRpb24gdG8KK3NwZWNpZnkgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGEgbGluZSB0aGF0IHlvdSB3b3VsZAord2FudCB0byBhcHBlYXIgYXMgdGhlIGh1bmsgaGVhZGVyICJURVhUIi4gQWRkIGEgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJ0ZXgiXQorCXhmdW5jbmFtZSA9ICJeKFxcXFwoc3ViKSpzZWN0aW9uXFx7LiopJCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlLiAgQSBzaW5nbGUgbGV2ZWwgb2YgYmFja3NsYXNoZXMgYXJlIGVhdGVuIGJ5IHRoZQorY29uZmlndXJhdGlvbiBmaWxlIHBhcnNlciwgc28geW91IHdvdWxkIG5lZWQgdG8gZG91YmxlIHRoZQorYmFja3NsYXNoZXM7IHRoZSBwYXR0ZXJuIGFib3ZlIHBpY2tzIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIGEKK2JhY2tzbGFzaCwgYW5kIHplcm8gb3IgbW9yZSBvY2N1cnJlbmNlcyBvZiBgc3ViYCBmb2xsb3dlZCBieQorYHNlY3Rpb25gIGZvbGxvd2VkIGJ5IG9wZW4gYnJhY2UsIHRvIHRoZSBlbmQgb2YgbGluZS4KKworVGhlcmUgYXJlIGEgZmV3IGJ1aWx0LWluIHBhdHRlcm5zIHRvIG1ha2UgdGhpcyBlYXNpZXIsIGFuZCBgdGV4YAoraXMgb25lIG9mIHRoZW0sIHNvIHlvdSBkbyBub3QgaGF2ZSB0byB3cml0ZSB0aGUgYWJvdmUgaW4geW91cgorY29uZmlndXJhdGlvbiBmaWxlICh5b3Ugc3RpbGwgbmVlZCB0byBlbmFibGUgdGhpcyB3aXRoIHRoZQorYXR0cmlidXRlIG1lY2hhbmlzbSwgdmlhIGAuZ2l0YXR0cmlidXRlc2ApLiAgVGhlIGZvbGxvd2luZyBidWlsdCBpbgorcGF0dGVybnMgYXJlIGF2YWlsYWJsZToKKworLSBgYWRhYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEFkYSBsYW5ndWFnZS4KKworLSBgYmlidGV4YCBzdWl0YWJsZSBmb3IgZmlsZXMgd2l0aCBCaWJUZVggY29kZWQgcmVmZXJlbmNlcy4KKworLSBgY3BwYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEMgYW5kIEMrKyBsYW5ndWFnZXMuCisKKy0gYGNzaGFycGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBDIyBsYW5ndWFnZS4KKworLSBgY3NzYCBzdWl0YWJsZSBmb3IgY2FzY2FkaW5nIHN0eWxlIHNoZWV0cy4KKworLSBgZHRzYCBzdWl0YWJsZSBmb3IgZGV2aWNldHJlZSAoRFRTKSBmaWxlcy4KKworLSBgZWxpeGlyYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEVsaXhpciBsYW5ndWFnZS4KKworLSBgZm9ydHJhbmAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBGb3J0cmFuIGxhbmd1YWdlLgorCistIGBmb3VudGFpbmAgc3VpdGFibGUgZm9yIEZvdW50YWluIGRvY3VtZW50cy4KKworLSBgZ29sYW5nYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEdvIGxhbmd1YWdlLgorCistIGBodG1sYCBzdWl0YWJsZSBmb3IgSFRNTC9YSFRNTCBkb2N1bWVudHMuCisKKy0gYGphdmFgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgSmF2YSBsYW5ndWFnZS4KKworLSBgbWF0bGFiYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIE1BVExBQiBhbmQgT2N0YXZlIGxhbmd1YWdlcy4KKworLSBgb2JqY2Agc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBPYmplY3RpdmUtQyBsYW5ndWFnZS4KKworLSBgcGFzY2FsYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFBhc2NhbC9EZWxwaGkgbGFuZ3VhZ2UuCisKKy0gYHBlcmxgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgUGVybCBsYW5ndWFnZS4KKworLSBgcGhwYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFBIUCBsYW5ndWFnZS4KKworLSBgcHl0aG9uYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFB5dGhvbiBsYW5ndWFnZS4KKworLSBgcnVieWAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBSdWJ5IGxhbmd1YWdlLgorCistIGBydXN0YCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFJ1c3QgbGFuZ3VhZ2UuCisKKy0gYHRleGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGZvciBMYVRlWCBkb2N1bWVudHMuCisKKworQ3VzdG9taXppbmcgd29yZCBkaWZmCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworWW91IGNhbiBjdXN0b21pemUgdGhlIHJ1bGVzIHRoYXQgYGdpdCBkaWZmIC0td29yZC1kaWZmYCB1c2VzIHRvCitzcGxpdCB3b3JkcyBpbiBhIGxpbmUsIGJ5IHNwZWNpZnlpbmcgYW4gYXBwcm9wcmlhdGUgcmVndWxhciBleHByZXNzaW9uCitpbiB0aGUgImRpZmYuKi53b3JkUmVnZXgiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBGb3IgZXhhbXBsZSwgaW4gVGVYCithIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIG9mIGxldHRlcnMgZm9ybXMgYSBjb21tYW5kLCBidXQKK3NldmVyYWwgc3VjaCBjb21tYW5kcyBjYW4gYmUgcnVuIHRvZ2V0aGVyIHdpdGhvdXQgaW50ZXJ2ZW5pbmcKK3doaXRlc3BhY2UuICBUbyBzZXBhcmF0ZSB0aGVtLCB1c2UgYSByZWd1bGFyIGV4cHJlc3Npb24gaW4geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAidGV4Il0KKwl3b3JkUmVnZXggPSAiXFxcXFthLXpBLVpdK3xbe31dfFxcXFwufFteXFx7fVs6c3BhY2U6XV0rIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgYnVpbHQtaW4gcGF0dGVybiBpcyBwcm92aWRlZCBmb3IgYWxsIGxhbmd1YWdlcyBsaXN0ZWQgaW4gdGhlCitwcmV2aW91cyBzZWN0aW9uLgorCisKK1BlcmZvcm1pbmcgdGV4dCBkaWZmcyBvZiBiaW5hcnkgZmlsZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworU29tZXRpbWVzIGl0IGlzIGRlc2lyYWJsZSB0byBzZWUgdGhlIGRpZmYgb2YgYSB0ZXh0LWNvbnZlcnRlZAordmVyc2lvbiBvZiBzb21lIGJpbmFyeSBmaWxlcy4gRm9yIGV4YW1wbGUsIGEgd29yZCBwcm9jZXNzb3IKK2RvY3VtZW50IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW4gQVNDSUkgdGV4dCByZXByZXNlbnRhdGlvbiwgYW5kCit0aGUgZGlmZiBvZiB0aGUgdGV4dCBzaG93bi4gRXZlbiB0aG91Z2ggdGhpcyBjb252ZXJzaW9uIGxvc2VzCitzb21lIGluZm9ybWF0aW9uLCB0aGUgcmVzdWx0aW5nIGRpZmYgaXMgdXNlZnVsIGZvciBodW1hbgordmlld2luZyAoYnV0IGNhbm5vdCBiZSBhcHBsaWVkIGRpcmVjdGx5KS4KKworVGhlIGB0ZXh0Y29udmAgY29uZmlnIG9wdGlvbiBpcyB1c2VkIHRvIGRlZmluZSBhIHByb2dyYW0gZm9yCitwZXJmb3JtaW5nIHN1Y2ggYSBjb252ZXJzaW9uLiBUaGUgcHJvZ3JhbSBzaG91bGQgdGFrZSBhIHNpbmdsZQorYXJndW1lbnQsIHRoZSBuYW1lIG9mIGEgZmlsZSB0byBjb252ZXJ0LCBhbmQgcHJvZHVjZSB0aGUKK3Jlc3VsdGluZyB0ZXh0IG9uIHN0ZG91dC4KKworRm9yIGV4YW1wbGUsIHRvIHNob3cgdGhlIGRpZmYgb2YgdGhlIGV4aWYgaW5mb3JtYXRpb24gb2YgYQorZmlsZSBpbnN0ZWFkIG9mIHRoZSBiaW5hcnkgaW5mb3JtYXRpb24gKGFzc3VtaW5nIHlvdSBoYXZlIHRoZQorZXhpZiB0b29sIGluc3RhbGxlZCksIGFkZCB0aGUgZm9sbG93aW5nIHNlY3Rpb24gdG8geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJqcGciXQorCXRleHRjb252ID0gZXhpZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05PVEU6IFRoZSB0ZXh0IGNvbnZlcnNpb24gaXMgZ2VuZXJhbGx5IGEgb25lLXdheSBjb252ZXJzaW9uOworaW4gdGhpcyBleGFtcGxlLCB3ZSBsb3NlIHRoZSBhY3R1YWwgaW1hZ2UgY29udGVudHMgYW5kIGZvY3VzCitqdXN0IG9uIHRoZSB0ZXh0IGRhdGEuIFRoaXMgbWVhbnMgdGhhdCBkaWZmcyBnZW5lcmF0ZWQgYnkKK3RleHRjb252IGFyZSBfbm90XyBzdWl0YWJsZSBmb3IgYXBwbHlpbmcuIEZvciB0aGlzIHJlYXNvbiwKK29ubHkgYGdpdCBkaWZmYCBhbmQgdGhlIGBnaXQgbG9nYCBmYW1pbHkgb2YgY29tbWFuZHMgKGkuZS4sCitsb2csIHdoYXRjaGFuZ2VkLCBzaG93KSB3aWxsIHBlcmZvcm0gdGV4dCBjb252ZXJzaW9uLiBgZ2l0Citmb3JtYXQtcGF0Y2hgIHdpbGwgbmV2ZXIgZ2VuZXJhdGUgdGhpcyBvdXRwdXQuIElmIHlvdSB3YW50IHRvCitzZW5kIHNvbWVib2R5IGEgdGV4dC1jb252ZXJ0ZWQgZGlmZiBvZiBhIGJpbmFyeSBmaWxlIChlLmcuLAorYmVjYXVzZSBpdCBxdWlja2x5IGNvbnZleXMgdGhlIGNoYW5nZXMgeW91IGhhdmUgbWFkZSksIHlvdQorc2hvdWxkIGdlbmVyYXRlIGl0IHNlcGFyYXRlbHkgYW5kIHNlbmQgaXQgYXMgYSBjb21tZW50IF9pbgorYWRkaXRpb24gdG9fIHRoZSB1c3VhbCBiaW5hcnkgZGlmZiB0aGF0IHlvdSBtaWdodCBzZW5kLgorCitCZWNhdXNlIHRleHQgY29udmVyc2lvbiBjYW4gYmUgc2xvdywgZXNwZWNpYWxseSB3aGVuIGRvaW5nIGEKK2xhcmdlIG51bWJlciBvZiB0aGVtIHdpdGggYGdpdCBsb2cgLXBgLCBHaXQgcHJvdmlkZXMgYSBtZWNoYW5pc20KK3RvIGNhY2hlIHRoZSBvdXRwdXQgYW5kIHVzZSBpdCBpbiBmdXR1cmUgZGlmZnMuICBUbyBlbmFibGUKK2NhY2hpbmcsIHNldCB0aGUgImNhY2hldGV4dGNvbnYiIHZhcmlhYmxlIGluIHlvdXIgZGlmZiBkcml2ZXIncworY29uZmlnLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAianBnIl0KKwl0ZXh0Y29udiA9IGV4aWYKKwljYWNoZXRleHRjb252ID0gdHJ1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBjYWNoZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgImV4aWYiIG9uIGVhY2ggYmxvYgoraW5kZWZpbml0ZWx5LiBJZiB5b3UgY2hhbmdlIHRoZSB0ZXh0Y29udiBjb25maWcgdmFyaWFibGUgZm9yIGEKK2RpZmYgZHJpdmVyLCBHaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGUgdGhlIGNhY2hlIGVudHJpZXMKK2FuZCByZS1ydW4gdGhlIHRleHRjb252IGZpbHRlci4gSWYgeW91IHdhbnQgdG8gaW52YWxpZGF0ZSB0aGUKK2NhY2hlIG1hbnVhbGx5IChlLmcuLCBiZWNhdXNlIHlvdXIgdmVyc2lvbiBvZiAiZXhpZiIgd2FzIHVwZGF0ZWQKK2FuZCBub3cgcHJvZHVjZXMgYmV0dGVyIG91dHB1dCksIHlvdSBjYW4gcmVtb3ZlIHRoZSBjYWNoZQorbWFudWFsbHkgd2l0aCBgZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9ub3Rlcy90ZXh0Y29udi9qcGdgICh3aGVyZQorImpwZyIgaXMgdGhlIG5hbWUgb2YgdGhlIGRpZmYgZHJpdmVyLCBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSkuCisKK0Nob29zaW5nIHRleHRjb252IHZlcnN1cyBleHRlcm5hbCBkaWZmCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitJZiB5b3Ugd2FudCB0byBzaG93IGRpZmZlcmVuY2VzIGJldHdlZW4gYmluYXJ5IG9yIHNwZWNpYWxseS1mb3JtYXR0ZWQKK2Jsb2JzIGluIHlvdXIgcmVwb3NpdG9yeSwgeW91IGNhbiBjaG9vc2UgdG8gdXNlIGVpdGhlciBhbiBleHRlcm5hbCBkaWZmCitjb21tYW5kLCBvciB0byB1c2UgdGV4dGNvbnYgdG8gY29udmVydCB0aGVtIHRvIGEgZGlmZi1hYmxlIHRleHQgZm9ybWF0LgorV2hpY2ggbWV0aG9kIHlvdSBjaG9vc2UgZGVwZW5kcyBvbiB5b3VyIGV4YWN0IHNpdHVhdGlvbi4KKworVGhlIGFkdmFudGFnZSBvZiB1c2luZyBhbiBleHRlcm5hbCBkaWZmIGNvbW1hbmQgaXMgZmxleGliaWxpdHkuIFlvdSBhcmUKK25vdCBib3VuZCB0byBmaW5kIGxpbmUtb3JpZW50ZWQgY2hhbmdlcywgbm9yIGlzIGl0IG5lY2Vzc2FyeSBmb3IgdGhlCitvdXRwdXQgdG8gcmVzZW1ibGUgdW5pZmllZCBkaWZmLiBZb3UgYXJlIGZyZWUgdG8gbG9jYXRlIGFuZCByZXBvcnQKK2NoYW5nZXMgaW4gdGhlIG1vc3QgYXBwcm9wcmlhdGUgd2F5IGZvciB5b3VyIGRhdGEgZm9ybWF0LgorCitBIHRleHRjb252LCBieSBjb21wYXJpc29uLCBpcyBtdWNoIG1vcmUgbGltaXRpbmcuIFlvdSBwcm92aWRlIGEKK3RyYW5zZm9ybWF0aW9uIG9mIHRoZSBkYXRhIGludG8gYSBsaW5lLW9yaWVudGVkIHRleHQgZm9ybWF0LCBhbmQgR2l0Cit1c2VzIGl0cyByZWd1bGFyIGRpZmYgdG9vbHMgdG8gZ2VuZXJhdGUgdGhlIG91dHB1dC4gVGhlcmUgYXJlIHNldmVyYWwKK2FkdmFudGFnZXMgdG8gY2hvb3NpbmcgdGhpcyBtZXRob2Q6CisKKzEuIEVhc2Ugb2YgdXNlLiBJdCBpcyBvZnRlbiBtdWNoIHNpbXBsZXIgdG8gd3JpdGUgYSBiaW5hcnkgdG8gdGV4dAorICAgdHJhbnNmb3JtYXRpb24gdGhhbiBpdCBpcyB0byBwZXJmb3JtIHlvdXIgb3duIGRpZmYuIEluIG1hbnkgY2FzZXMsCisgICBleGlzdGluZyBwcm9ncmFtcyBjYW4gYmUgdXNlZCBhcyB0ZXh0Y29udiBmaWx0ZXJzIChlLmcuLCBleGlmLAorICAgb2R0MnR4dCkuCisKKzIuIEdpdCBkaWZmIGZlYXR1cmVzLiBCeSBwZXJmb3JtaW5nIG9ubHkgdGhlIHRyYW5zZm9ybWF0aW9uIHN0ZXAKKyAgIHlvdXJzZWxmLCB5b3UgY2FuIHN0aWxsIHV0aWxpemUgbWFueSBvZiBHaXQncyBkaWZmIGZlYXR1cmVzLAorICAgaW5jbHVkaW5nIGNvbG9yaXphdGlvbiwgd29yZC1kaWZmLCBhbmQgY29tYmluZWQgZGlmZnMgZm9yIG1lcmdlcy4KKworMy4gQ2FjaGluZy4gVGV4dGNvbnYgY2FjaGluZyBjYW4gc3BlZWQgdXAgcmVwZWF0ZWQgZGlmZnMsIHN1Y2ggYXMgdGhvc2UKKyAgIHlvdSBtaWdodCB0cmlnZ2VyIGJ5IHJ1bm5pbmcgYGdpdCBsb2cgLXBgLgorCisKK01hcmtpbmcgZmlsZXMgYXMgYmluYXJ5CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitHaXQgdXN1YWxseSBndWVzc2VzIGNvcnJlY3RseSB3aGV0aGVyIGEgYmxvYiBjb250YWlucyB0ZXh0IG9yIGJpbmFyeQorZGF0YSBieSBleGFtaW5pbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29udGVudHMuIEhvd2V2ZXIsIHNvbWV0aW1lcyB5b3UKK21heSB3YW50IHRvIG92ZXJyaWRlIGl0cyBkZWNpc2lvbiwgZWl0aGVyIGJlY2F1c2UgYSBibG9iIGNvbnRhaW5zIGJpbmFyeQorZGF0YSBsYXRlciBpbiB0aGUgZmlsZSwgb3IgYmVjYXVzZSB0aGUgY29udGVudCwgd2hpbGUgdGVjaG5pY2FsbHkKK2NvbXBvc2VkIG9mIHRleHQgY2hhcmFjdGVycywgaXMgb3BhcXVlIHRvIGEgaHVtYW4gcmVhZGVyLiBGb3IgZXhhbXBsZSwKK21hbnkgcG9zdHNjcmlwdCBmaWxlcyBjb250YWluIG9ubHkgQVNDSUkgY2hhcmFjdGVycywgYnV0IHByb2R1Y2Ugbm9pc3kKK2FuZCBtZWFuaW5nbGVzcyBkaWZmcy4KKworVGhlIHNpbXBsZXN0IHdheSB0byBtYXJrIGEgZmlsZSBhcyBiaW5hcnkgaXMgdG8gdW5zZXQgdGhlIGRpZmYKK2F0dHJpYnV0ZSBpbiB0aGUgYC5naXRhdHRyaWJ1dGVzYCBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoucHMgLWRpZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgY2F1c2UgR2l0IHRvIGdlbmVyYXRlIGBCaW5hcnkgZmlsZXMgZGlmZmVyYCAob3IgYSBiaW5hcnkKK3BhdGNoLCBpZiBiaW5hcnkgcGF0Y2hlcyBhcmUgZW5hYmxlZCkgaW5zdGVhZCBvZiBhIHJlZ3VsYXIgZGlmZi4KKworSG93ZXZlciwgb25lIG1heSBhbHNvIHdhbnQgdG8gc3BlY2lmeSBvdGhlciBkaWZmIGRyaXZlciBhdHRyaWJ1dGVzLiBGb3IKK2V4YW1wbGUsIHlvdSBtaWdodCB3YW50IHRvIHVzZSBgdGV4dGNvbnZgIHRvIGNvbnZlcnQgcG9zdHNjcmlwdCBmaWxlcyB0bworYW4gQVNDSUkgcmVwcmVzZW50YXRpb24gZm9yIGh1bWFuIHZpZXdpbmcsIGJ1dCBvdGhlcndpc2UgdHJlYXQgdGhlbSBhcworYmluYXJ5IGZpbGVzLiBZb3UgY2Fubm90IHNwZWNpZnkgYm90aCBgLWRpZmZgIGFuZCBgZGlmZj1wc2AgYXR0cmlidXRlcy4KK1RoZSBzb2x1dGlvbiBpcyB0byB1c2UgdGhlIGBkaWZmLiouYmluYXJ5YCBjb25maWcgb3B0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJwcyJdCisgIHRleHRjb252ID0gcHMyYXNjaWkKKyAgYmluYXJ5ID0gdHJ1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BlcmZvcm1pbmcgYSB0aHJlZS13YXkgbWVyZ2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYG1lcmdlYAorXl5eXl5eXgorCitUaGUgYXR0cmlidXRlIGBtZXJnZWAgYWZmZWN0cyBob3cgdGhyZWUgdmVyc2lvbnMgb2YgYSBmaWxlIGFyZQorbWVyZ2VkIHdoZW4gYSBmaWxlLWxldmVsIG1lcmdlIGlzIG5lY2Vzc2FyeSBkdXJpbmcgYGdpdCBtZXJnZWAsCithbmQgb3RoZXIgY29tbWFuZHMgc3VjaCBhcyBgZ2l0IHJldmVydGAgYW5kIGBnaXQgY2hlcnJ5LXBpY2tgLgorCitTZXQ6OgorCisJQnVpbHQtaW4gMy13YXkgbWVyZ2UgZHJpdmVyIGlzIHVzZWQgdG8gbWVyZ2UgdGhlCisJY29udGVudHMgaW4gYSB3YXkgc2ltaWxhciB0byAnbWVyZ2UnIGNvbW1hbmQgb2YgYFJDU2AKKwlzdWl0ZS4gIFRoaXMgaXMgc3VpdGFibGUgZm9yIG9yZGluYXJ5IHRleHQgZmlsZXMuCisKK1Vuc2V0OjoKKworCVRha2UgdGhlIHZlcnNpb24gZnJvbSB0aGUgY3VycmVudCBicmFuY2ggYXMgdGhlCisJdGVudGF0aXZlIG1lcmdlIHJlc3VsdCwgYW5kIGRlY2xhcmUgdGhhdCB0aGUgbWVyZ2UgaGFzCisJY29uZmxpY3RzLiAgVGhpcyBpcyBzdWl0YWJsZSBmb3IgYmluYXJ5IGZpbGVzIHRoYXQgZG8KKwlub3QgaGF2ZSBhIHdlbGwtZGVmaW5lZCBtZXJnZSBzZW1hbnRpY3MuCisKK1Vuc3BlY2lmaWVkOjoKKworCUJ5IGRlZmF1bHQsIHRoaXMgdXNlcyB0aGUgc2FtZSBidWlsdC1pbiAzLXdheSBtZXJnZQorCWRyaXZlciBhcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBgbWVyZ2VgIGF0dHJpYnV0ZSBpcyBzZXQuCisJSG93ZXZlciwgdGhlIGBtZXJnZS5kZWZhdWx0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBuYW1lCisJZGlmZmVyZW50IG1lcmdlIGRyaXZlciB0byBiZSB1c2VkIHdpdGggcGF0aHMgZm9yIHdoaWNoIHRoZQorCWBtZXJnZWAgYXR0cmlidXRlIGlzIHVuc3BlY2lmaWVkLgorCitTdHJpbmc6OgorCisJMy13YXkgbWVyZ2UgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY3VzdG9tCisJbWVyZ2UgZHJpdmVyLiAgVGhlIGJ1aWx0LWluIDMtd2F5IG1lcmdlIGRyaXZlciBjYW4gYmUKKwlleHBsaWNpdGx5IHNwZWNpZmllZCBieSBhc2tpbmcgZm9yICJ0ZXh0IiBkcml2ZXI7IHRoZQorCWJ1aWx0LWluICJ0YWtlIHRoZSBjdXJyZW50IGJyYW5jaCIgZHJpdmVyIGNhbiBiZQorCXJlcXVlc3RlZCB3aXRoICJiaW5hcnkiLgorCisKK0J1aWx0LWluIG1lcmdlIGRyaXZlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlcmUgYXJlIGEgZmV3IGJ1aWx0LWluIGxvdy1sZXZlbCBtZXJnZSBkcml2ZXJzIGRlZmluZWQgdGhhdAorY2FuIGJlIGFza2VkIGZvciB2aWEgdGhlIGBtZXJnZWAgYXR0cmlidXRlLgorCit0ZXh0OjoKKworCVVzdWFsIDMtd2F5IGZpbGUgbGV2ZWwgbWVyZ2UgZm9yIHRleHQgZmlsZXMuICBDb25mbGljdGVkCisJcmVnaW9ucyBhcmUgbWFya2VkIHdpdGggY29uZmxpY3QgbWFya2VycyBgPDw8PDw8PGAsCisJYD09PT09PT1gIGFuZCBgPj4+Pj4+PmAuICBUaGUgdmVyc2lvbiBmcm9tIHlvdXIgYnJhbmNoCisJYXBwZWFycyBiZWZvcmUgdGhlIGA9PT09PT09YCBtYXJrZXIsIGFuZCB0aGUgdmVyc2lvbgorCWZyb20gdGhlIG1lcmdlZCBicmFuY2ggYXBwZWFycyBhZnRlciB0aGUgYD09PT09PT1gCisJbWFya2VyLgorCitiaW5hcnk6OgorCisJS2VlcCB0aGUgdmVyc2lvbiBmcm9tIHlvdXIgYnJhbmNoIGluIHRoZSB3b3JrIHRyZWUsIGJ1dAorCWxlYXZlIHRoZSBwYXRoIGluIHRoZSBjb25mbGljdGVkIHN0YXRlIGZvciB0aGUgdXNlciB0bworCXNvcnQgb3V0LgorCit1bmlvbjo6CisKKwlSdW4gMy13YXkgZmlsZSBsZXZlbCBtZXJnZSBmb3IgdGV4dCBmaWxlcywgYnV0IHRha2UKKwlsaW5lcyBmcm9tIGJvdGggdmVyc2lvbnMsIGluc3RlYWQgb2YgbGVhdmluZyBjb25mbGljdAorCW1hcmtlcnMuICBUaGlzIHRlbmRzIHRvIGxlYXZlIHRoZSBhZGRlZCBsaW5lcyBpbiB0aGUKKwlyZXN1bHRpbmcgZmlsZSBpbiByYW5kb20gb3JkZXIgYW5kIHRoZSB1c2VyIHNob3VsZAorCXZlcmlmeSB0aGUgcmVzdWx0LiBEbyBub3QgdXNlIHRoaXMgaWYgeW91IGRvIG5vdAorCXVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KKworCitEZWZpbmluZyBhIGN1c3RvbSBtZXJnZSBkcml2ZXIKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgZGVmaW5pdGlvbiBvZiBhIG1lcmdlIGRyaXZlciBpcyBkb25lIGluIHRoZSBgLmdpdC9jb25maWdgCitmaWxlLCBub3QgaW4gdGhlIGBnaXRhdHRyaWJ1dGVzYCBmaWxlLCBzbyBzdHJpY3RseSBzcGVha2luZyB0aGlzCittYW51YWwgcGFnZSBpcyBhIHdyb25nIHBsYWNlIHRvIHRhbGsgYWJvdXQgaXQuICBIb3dldmVyLi4uCisKK1RvIGRlZmluZSBhIGN1c3RvbSBtZXJnZSBkcml2ZXIgYGZpbGZyZWAsIGFkZCBhIHNlY3Rpb24gdG8geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW21lcmdlICJmaWxmcmUiXQorCW5hbWUgPSBmZWVsLWZyZWUgbWVyZ2UgZHJpdmVyCisJZHJpdmVyID0gZmlsZnJlICVPICVBICVCICVMICVQCisJcmVjdXJzaXZlID0gYmluYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgbWVyZ2UuKi5uYW1lYCB2YXJpYWJsZSBnaXZlcyB0aGUgZHJpdmVyIGEgaHVtYW4tcmVhZGFibGUKK25hbWUuCisKK1RoZSBgbWVyZ2UuKi5kcml2ZXJgIHZhcmlhYmxlJ3MgdmFsdWUgaXMgdXNlZCB0byBjb25zdHJ1Y3QgYQorY29tbWFuZCB0byBydW4gdG8gbWVyZ2UgYW5jZXN0b3IncyB2ZXJzaW9uIChgJU9gKSwgY3VycmVudAordmVyc2lvbiAoYCVBYCkgYW5kIHRoZSBvdGhlciBicmFuY2hlcycgdmVyc2lvbiAoYCVCYCkuICBUaGVzZQordGhyZWUgdG9rZW5zIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBuYW1lcyBvZiB0ZW1wb3JhcnkgZmlsZXMgdGhhdAoraG9sZCB0aGUgY29udGVudHMgb2YgdGhlc2UgdmVyc2lvbnMgd2hlbiB0aGUgY29tbWFuZCBsaW5lIGlzCitidWlsdC4gQWRkaXRpb25hbGx5LCAlTCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGNvbmZsaWN0IG1hcmtlcgorc2l6ZSAoc2VlIGJlbG93KS4KKworVGhlIG1lcmdlIGRyaXZlciBpcyBleHBlY3RlZCB0byBsZWF2ZSB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBpbgordGhlIGZpbGUgbmFtZWQgd2l0aCBgJUFgIGJ5IG92ZXJ3cml0aW5nIGl0LCBhbmQgZXhpdCB3aXRoIHplcm8KK3N0YXR1cyBpZiBpdCBtYW5hZ2VkIHRvIG1lcmdlIHRoZW0gY2xlYW5seSwgb3Igbm9uLXplcm8gaWYgdGhlcmUKK3dlcmUgY29uZmxpY3RzLgorCitUaGUgYG1lcmdlLioucmVjdXJzaXZlYCB2YXJpYWJsZSBzcGVjaWZpZXMgd2hhdCBvdGhlciBtZXJnZQorZHJpdmVyIHRvIHVzZSB3aGVuIHRoZSBtZXJnZSBkcml2ZXIgaXMgY2FsbGVkIGZvciBhbiBpbnRlcm5hbAorbWVyZ2UgYmV0d2VlbiBjb21tb24gYW5jZXN0b3JzLCB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLgorV2hlbiBsZWZ0IHVuc3BlY2lmaWVkLCB0aGUgZHJpdmVyIGl0c2VsZiBpcyB1c2VkIGZvciBib3RoCitpbnRlcm5hbCBtZXJnZSBhbmQgdGhlIGZpbmFsIG1lcmdlLgorCitUaGUgbWVyZ2UgZHJpdmVyIGNhbiBsZWFybiB0aGUgcGF0aG5hbWUgaW4gd2hpY2ggdGhlIG1lcmdlZCByZXN1bHQKK3dpbGwgYmUgc3RvcmVkIHZpYSBwbGFjZWhvbGRlciBgJVBgLgorCisKK2Bjb25mbGljdC1tYXJrZXItc2l6ZWAKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBhdHRyaWJ1dGUgY29udHJvbHMgdGhlIGxlbmd0aCBvZiBjb25mbGljdCBtYXJrZXJzIGxlZnQgaW4KK3RoZSB3b3JrIHRyZWUgZmlsZSBkdXJpbmcgYSBjb25mbGljdGVkIG1lcmdlLiAgT25seSBzZXR0aW5nIHRvCit0aGUgdmFsdWUgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyIGhhcyBhbnkgbWVhbmluZ2Z1bCBlZmZlY3QuCisKK0ZvciBleGFtcGxlLCB0aGlzIGxpbmUgaW4gYC5naXRhdHRyaWJ1dGVzYCBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBtZXJnZQorbWFjaGluZXJ5IHRvIGxlYXZlIG11Y2ggbG9uZ2VyIChpbnN0ZWFkIG9mIHRoZSB1c3VhbCA3LWNoYXJhY3Rlci1sb25nKQorY29uZmxpY3QgbWFya2VycyB3aGVuIG1lcmdpbmcgdGhlIGZpbGUgYERvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dGAKK3Jlc3VsdHMgaW4gYSBjb25mbGljdC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQJY29uZmxpY3QtbWFya2VyLXNpemU9MzIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0NoZWNraW5nIHdoaXRlc3BhY2UgZXJyb3JzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitgd2hpdGVzcGFjZWAKK15eXl5eXl5eXl5eXgorCitUaGUgYGNvcmUud2hpdGVzcGFjZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIGRlZmluZSB3aGF0CisnZGlmZicgYW5kICdhcHBseScgc2hvdWxkIGNvbnNpZGVyIHdoaXRlc3BhY2UgZXJyb3JzIGZvciBhbGwgcGF0aHMgaW4KK3RoZSBwcm9qZWN0IChTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gIFRoaXMgYXR0cmlidXRlIGdpdmVzIHlvdSBmaW5lcgorY29udHJvbCBwZXIgcGF0aC4KKworU2V0OjoKKworCU5vdGljZSBhbGwgdHlwZXMgb2YgcG90ZW50aWFsIHdoaXRlc3BhY2UgZXJyb3JzIGtub3duIHRvIEdpdC4KKwlUaGUgdGFiIHdpZHRoIGlzIHRha2VuIGZyb20gdGhlIHZhbHVlIG9mIHRoZSBgY29yZS53aGl0ZXNwYWNlYAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1Vuc2V0OjoKKworCURvIG5vdCBub3RpY2UgYW55dGhpbmcgYXMgZXJyb3IuCisKK1Vuc3BlY2lmaWVkOjoKKworCVVzZSB0aGUgdmFsdWUgb2YgdGhlIGBjb3JlLndoaXRlc3BhY2VgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8KKwlkZWNpZGUgd2hhdCB0byBub3RpY2UgYXMgZXJyb3IuCisKK1N0cmluZzo6CisKKwlTcGVjaWZ5IGEgY29tbWEgc2VwYXJhdGUgbGlzdCBvZiBjb21tb24gd2hpdGVzcGFjZSBwcm9ibGVtcyB0bworCW5vdGljZSBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIGBjb3JlLndoaXRlc3BhY2VgIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZS4KKworCitDcmVhdGluZyBhbiBhcmNoaXZlCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BleHBvcnQtaWdub3JlYAorXl5eXl5eXl5eXl5eXl5eCisKK0ZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHRoZSBhdHRyaWJ1dGUgYGV4cG9ydC1pZ25vcmVgIHdvbid0IGJlIGFkZGVkIHRvCithcmNoaXZlIGZpbGVzLgorCitgZXhwb3J0LXN1YnN0YAorXl5eXl5eXl5eXl5eXl4KKworSWYgdGhlIGF0dHJpYnV0ZSBgZXhwb3J0LXN1YnN0YCBpcyBzZXQgZm9yIGEgZmlsZSB0aGVuIEdpdCB3aWxsIGV4cGFuZAorc2V2ZXJhbCBwbGFjZWhvbGRlcnMgd2hlbiBhZGRpbmcgdGhpcyBmaWxlIHRvIGFuIGFyY2hpdmUuICBUaGUKK2V4cGFuc2lvbiBkZXBlbmRzIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgYSBjb21taXQgSUQsIGkuZS4sIGlmCitsaW5rZ2l0OmdpdC1hcmNoaXZlWzFdIGhhcyBiZWVuIGdpdmVuIGEgdHJlZSBpbnN0ZWFkIG9mIGEgY29tbWl0IG9yIGEKK3RhZyB0aGVuIG5vIHJlcGxhY2VtZW50IHdpbGwgYmUgZG9uZS4gIFRoZSBwbGFjZWhvbGRlcnMgYXJlIHRoZSBzYW1lCithcyB0aG9zZSBmb3IgdGhlIG9wdGlvbiBgLS1wcmV0dHk9Zm9ybWF0OmAgb2YgbGlua2dpdDpnaXQtbG9nWzFdLAorZXhjZXB0IHRoYXQgdGhleSBuZWVkIHRvIGJlIHdyYXBwZWQgbGlrZSB0aGlzOiBgJEZvcm1hdDpQTEFDRUhPTERFUlMkYAoraW4gdGhlIGZpbGUuICBFLmcuIHRoZSBzdHJpbmcgYCRGb3JtYXQ6JUgkYCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZQorY29tbWl0IGhhc2guCisKKworUGFja2luZyBvYmplY3RzCit+fn5+fn5+fn5+fn5+fn4KKworYGRlbHRhYAorXl5eXl5eXgorCitEZWx0YSBjb21wcmVzc2lvbiB3aWxsIG5vdCBiZSBhdHRlbXB0ZWQgZm9yIGJsb2JzIGZvciBwYXRocyB3aXRoIHRoZQorYXR0cmlidXRlIGBkZWx0YWAgc2V0IHRvIGZhbHNlLgorCisKK1ZpZXdpbmcgZmlsZXMgaW4gR1VJIHRvb2xzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitgZW5jb2RpbmdgCiteXl5eXl5eXl5eCisKK1RoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyB0aGF0IHNob3VsZAorYmUgdXNlZCBieSBHVUkgdG9vbHMgKGUuZy4gbGlua2dpdDpnaXRrWzFdIGFuZCBsaW5rZ2l0OmdpdC1ndWlbMV0pIHRvCitkaXNwbGF5IHRoZSBjb250ZW50cyBvZiB0aGUgcmVsZXZhbnQgZmlsZS4gTm90ZSB0aGF0IGR1ZSB0byBwZXJmb3JtYW5jZQorY29uc2lkZXJhdGlvbnMgbGlua2dpdDpnaXRrWzFdIGRvZXMgbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSB1bmxlc3MgeW91CittYW51YWxseSBlbmFibGUgcGVyLWZpbGUgZW5jb2RpbmdzIGluIGl0cyBvcHRpb25zLgorCitJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIGhhcyBhbiBpbnZhbGlkIHZhbHVlLCB0aGUgdmFsdWUgb2YgdGhlCitgZ3VpLmVuY29kaW5nYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHVzZWQgaW5zdGVhZAorKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCisKK1VTSU5HIE1BQ1JPIEFUVFJJQlVURVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGRvIG5vdCB3YW50IGFueSBlbmQtb2YtbGluZSBjb252ZXJzaW9ucyBhcHBsaWVkIHRvLCBub3IgdGV4dHVhbCBkaWZmcworcHJvZHVjZWQgZm9yLCBhbnkgYmluYXJ5IGZpbGUgeW91IHRyYWNrLiAgWW91IHdvdWxkIG5lZWQgdG8gc3BlY2lmeSBlLmcuCisKKy0tLS0tLS0tLS0tLQorKi5qcGcgLXRleHQgLWRpZmYKKy0tLS0tLS0tLS0tLQorCitidXQgdGhhdCBtYXkgYmVjb21lIGN1bWJlcnNvbWUsIHdoZW4geW91IGhhdmUgbWFueSBhdHRyaWJ1dGVzLiAgVXNpbmcKK21hY3JvIGF0dHJpYnV0ZXMsIHlvdSBjYW4gZGVmaW5lIGFuIGF0dHJpYnV0ZSB0aGF0LCB3aGVuIHNldCwgYWxzbworc2V0cyBvciB1bnNldHMgYSBudW1iZXIgb2Ygb3RoZXIgYXR0cmlidXRlcyBhdCB0aGUgc2FtZSB0aW1lLiAgVGhlCitzeXN0ZW0ga25vd3MgYSBidWlsdC1pbiBtYWNybyBhdHRyaWJ1dGUsIGBiaW5hcnlgOgorCistLS0tLS0tLS0tLS0KKyouanBnIGJpbmFyeQorLS0tLS0tLS0tLS0tCisKK1NldHRpbmcgdGhlICJiaW5hcnkiIGF0dHJpYnV0ZSBhbHNvIHVuc2V0cyB0aGUgInRleHQiIGFuZCAiZGlmZiIKK2F0dHJpYnV0ZXMgYXMgYWJvdmUuICBOb3RlIHRoYXQgbWFjcm8gYXR0cmlidXRlcyBjYW4gb25seSBiZSAiU2V0IiwKK3Rob3VnaCBzZXR0aW5nIG9uZSBtaWdodCBoYXZlIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyBvciB1bnNldHRpbmcgb3RoZXIKK2F0dHJpYnV0ZXMgb3IgZXZlbiByZXR1cm5pbmcgb3RoZXIgYXR0cmlidXRlcyB0byB0aGUgIlVuc3BlY2lmaWVkIgorc3RhdGUuCisKKworREVGSU5JTkcgTUFDUk8gQVRUUklCVVRFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDdXN0b20gbWFjcm8gYXR0cmlidXRlcyBjYW4gYmUgZGVmaW5lZCBvbmx5IGluIHRvcC1sZXZlbCBnaXRhdHRyaWJ1dGVzCitmaWxlcyAoYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AsIHRoZSBgLmdpdGF0dHJpYnV0ZXNgIGZpbGUgYXQgdGhlCit0b3AgbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSwgb3IgdGhlIGdsb2JhbCBvciBzeXN0ZW0td2lkZQorZ2l0YXR0cmlidXRlcyBmaWxlcyksIG5vdCBpbiBgLmdpdGF0dHJpYnV0ZXNgIGZpbGVzIGluIHdvcmtpbmcgdHJlZQorc3ViZGlyZWN0b3JpZXMuICBUaGUgYnVpbHQtaW4gbWFjcm8gYXR0cmlidXRlICJiaW5hcnkiIGlzIGVxdWl2YWxlbnQKK3RvOgorCistLS0tLS0tLS0tLS0KK1thdHRyXWJpbmFyeSAtZGlmZiAtbWVyZ2UgLXRleHQKKy0tLS0tLS0tLS0tLQorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitJZiB5b3UgaGF2ZSB0aGVzZSB0aHJlZSBgZ2l0YXR0cmlidXRlc2AgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGluICRHSVRfRElSL2luZm8vYXR0cmlidXRlcykKKworYSoJZm9vICFiYXIgLWJhegorCisoaW4gLmdpdGF0dHJpYnV0ZXMpCithYmMJZm9vIGJhciBiYXoKKworKGluIHQvLmdpdGF0dHJpYnV0ZXMpCithYioJbWVyZ2U9ZmlsZnJlCithYmMJLWZvbyAtYmFyCisqLmMJZnJvdHoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gdG8gcGF0aCBgdC9hYmNgIGFyZSBjb21wdXRlZCBhcyBmb2xsb3dzOgorCisxLiBCeSBleGFtaW5pbmcgYHQvLmdpdGF0dHJpYnV0ZXNgICh3aGljaCBpcyBpbiB0aGUgc2FtZQorICAgZGlyZWN0b3J5IGFzIHRoZSBwYXRoIGluIHF1ZXN0aW9uKSwgR2l0IGZpbmRzIHRoYXQgdGhlIGZpcnN0CisgICBsaW5lIG1hdGNoZXMuICBgbWVyZ2VgIGF0dHJpYnV0ZSBpcyBzZXQuICBJdCBhbHNvIGZpbmRzIHRoYXQKKyAgIHRoZSBzZWNvbmQgbGluZSBtYXRjaGVzLCBhbmQgYXR0cmlidXRlcyBgZm9vYCBhbmQgYGJhcmAKKyAgIGFyZSB1bnNldC4KKworMi4gVGhlbiBpdCBleGFtaW5lcyBgLmdpdGF0dHJpYnV0ZXNgICh3aGljaCBpcyBpbiB0aGUgcGFyZW50CisgICBkaXJlY3RvcnkpLCBhbmQgZmluZHMgdGhhdCB0aGUgZmlyc3QgbGluZSBtYXRjaGVzLCBidXQKKyAgIGB0Ly5naXRhdHRyaWJ1dGVzYCBmaWxlIGFscmVhZHkgZGVjaWRlZCBob3cgYG1lcmdlYCwgYGZvb2AKKyAgIGFuZCBgYmFyYCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBnaXZlbiB0byB0aGlzIHBhdGgsIHNvIGl0CisgICBsZWF2ZXMgYGZvb2AgYW5kIGBiYXJgIHVuc2V0LiAgQXR0cmlidXRlIGBiYXpgIGlzIHNldC4KKworMy4gRmluYWxseSBpdCBleGFtaW5lcyBgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzYC4gIFRoaXMgZmlsZQorICAgaXMgdXNlZCB0byBvdmVycmlkZSB0aGUgaW4tdHJlZSBzZXR0aW5ncy4gIFRoZSBmaXJzdCBsaW5lIGlzCisgICBhIG1hdGNoLCBhbmQgYGZvb2AgaXMgc2V0LCBgYmFyYCBpcyByZXZlcnRlZCB0byB1bnNwZWNpZmllZAorICAgc3RhdGUsIGFuZCBgYmF6YCBpcyB1bnNldC4KKworQXMgdGhlIHJlc3VsdCwgdGhlIGF0dHJpYnV0ZXMgYXNzaWdubWVudCB0byBgdC9hYmNgIGJlY29tZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ZvbwlzZXQgdG8gdHJ1ZQorYmFyCXVuc3BlY2lmaWVkCitiYXoJc2V0IHRvIGZhbHNlCittZXJnZQlzZXQgdG8gc3RyaW5nIHZhbHVlICJmaWxmcmUiCitmcm90egl1bnNwZWNpZmllZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2stYXR0clsxXS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlNGJhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dApAQCAtMCwwICsxLDIzNyBAQAorZ2l0Y2xpKDcpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0Y2xpIC0gR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zCisKK1NZTk9QU0lTCistLS0tLS0tLQorZ2l0Y2xpCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgbWFudWFsIGRlc2NyaWJlcyB0aGUgY29udmVudGlvbiB1c2VkIHRocm91Z2hvdXQgR2l0IENMSS4KKworTWFueSBjb21tYW5kcyB0YWtlIHJldmlzaW9ucyAobW9zdCBvZnRlbiAiY29tbWl0cyIsIGJ1dCBzb21ldGltZXMKKyJ0cmVlLWlzaCIsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBhbmQgY29tbWFuZCkgYW5kIHBhdGhzIGFzIHRoZWlyCithcmd1bWVudHMuICBIZXJlIGFyZSB0aGUgcnVsZXM6CisKKyAqIFJldmlzaW9ucyBjb21lIGZpcnN0IGFuZCB0aGVuIHBhdGhzLgorICAgRS5nLiBpbiBgZ2l0IGRpZmYgdjEuMCB2Mi4wIGFyY2gveDg2IGluY2x1ZGUvYXNtLXg4NmAsCisgICBgdjEuMGAgYW5kIGB2Mi4wYCBhcmUgcmV2aXNpb25zIGFuZCBgYXJjaC94ODZgIGFuZCBgaW5jbHVkZS9hc20teDg2YAorICAgYXJlIHBhdGhzLgorCisgKiBXaGVuIGFuIGFyZ3VtZW50IGNhbiBiZSBtaXN1bmRlcnN0b29kIGFzIGVpdGhlciBhIHJldmlzaW9uIG9yIGEgcGF0aCwKKyAgIHRoZXkgY2FuIGJlIGRpc2FtYmlndWF0ZWQgYnkgcGxhY2luZyBgLS1gIGJldHdlZW4gdGhlbS4KKyAgIEUuZy4gYGdpdCBkaWZmIC0tIEhFQURgIGlzLCAiSSBoYXZlIGEgZmlsZSBjYWxsZWQgSEVBRCBpbiBteSB3b3JrCisgICB0cmVlLiAgUGxlYXNlIHNob3cgY2hhbmdlcyBiZXR3ZWVuIHRoZSB2ZXJzaW9uIEkgc3RhZ2VkIGluIHRoZSBpbmRleAorICAgYW5kIHdoYXQgSSBoYXZlIGluIHRoZSB3b3JrIHRyZWUgZm9yIHRoYXQgZmlsZSIsIG5vdCAic2hvdyBkaWZmZXJlbmNlCisgICBiZXR3ZWVuIHRoZSBIRUFEIGNvbW1pdCBhbmQgdGhlIHdvcmsgdHJlZSBhcyBhIHdob2xlIi4gIFlvdSBjYW4gc2F5CisgICBgZ2l0IGRpZmYgSEVBRCAtLWAgdG8gYXNrIGZvciB0aGUgbGF0dGVyLgorCisgKiBXaXRob3V0IGRpc2FtYmlndWF0aW5nIGAtLWAsIEdpdCBtYWtlcyBhIHJlYXNvbmFibGUgZ3Vlc3MsIGJ1dCBlcnJvcnMKKyAgIG91dCBhbmQgYXNraW5nIHlvdSB0byBkaXNhbWJpZ3VhdGUgd2hlbiBhbWJpZ3VvdXMuICBFLmcuIGlmIHlvdSBoYXZlIGEKKyAgIGZpbGUgY2FsbGVkIEhFQUQgaW4geW91ciB3b3JrIHRyZWUsIGBnaXQgZGlmZiBIRUFEYCBpcyBhbWJpZ3VvdXMsIGFuZAorICAgeW91IGhhdmUgdG8gc2F5IGVpdGhlciBgZ2l0IGRpZmYgSEVBRCAtLWAgb3IgYGdpdCBkaWZmIC0tIEhFQURgIHRvCisgICBkaXNhbWJpZ3VhdGUuCisKKyAqIEJlY2F1c2UgYC0tYCBkaXNhbWJpZ3VhdGVzIHJldmlzaW9ucyBhbmQgcGF0aHMgaW4gc29tZSBjb21tYW5kcywgaXQKKyAgIGNhbm5vdCBiZSB1c2VkIGZvciB0aG9zZSBjb21tYW5kcyB0byBzZXBhcmF0ZSBvcHRpb25zIGFuZCByZXZpc2lvbnMuCisgICBZb3UgY2FuIHVzZSBgLS1lbmQtb2Ytb3B0aW9uc2AgZm9yIHRoaXMgKGl0IGFsc28gd29ya3MgZm9yIGNvbW1hbmRzCisgICB0aGF0IGRvIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHJldmlzaW9ucyBpbiBwYXRocywgaW4gd2hpY2ggY2FzZSBpdAorICAgaXMgc2ltcGx5IGFuIGFsaWFzIGZvciBgLS1gKS4KKysKK1doZW4gd3JpdGluZyBhIHNjcmlwdCB0aGF0IGlzIGV4cGVjdGVkIHRvIGhhbmRsZSByYW5kb20gdXNlci1pbnB1dCwgaXQgaXMKK2EgZ29vZCBwcmFjdGljZSB0byBtYWtlIGl0IGV4cGxpY2l0IHdoaWNoIGFyZ3VtZW50cyBhcmUgd2hpY2ggYnkgcGxhY2luZworZGlzYW1iaWd1YXRpbmcgYC0tYCBhdCBhcHByb3ByaWF0ZSBwbGFjZXMuCisKKyAqIE1hbnkgY29tbWFuZHMgYWxsb3cgd2lsZGNhcmRzIGluIHBhdGhzLCBidXQgeW91IG5lZWQgdG8gcHJvdGVjdAorICAgdGhlbSBmcm9tIGdldHRpbmcgZ2xvYmJlZCBieSB0aGUgc2hlbGwuICBUaGVzZSB0d28gbWVhbiBkaWZmZXJlbnQKKyAgIHRoaW5nczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXN0b3JlICouYworJCBnaXQgcmVzdG9yZSBcKi5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGZvcm1lciBsZXRzIHlvdXIgc2hlbGwgZXhwYW5kIHRoZSBmaWxlZ2xvYiwgYW5kIHlvdSBhcmUgYXNraW5nCit0aGUgZG90LUMgZmlsZXMgaW4geW91ciB3b3JraW5nIHRyZWUgdG8gYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgdmVyc2lvbgoraW4gdGhlIGluZGV4LiAgVGhlIGxhdHRlciBwYXNzZXMgdGhlIGAqLmNgIHRvIEdpdCwgYW5kIHlvdSBhcmUgYXNraW5nCit0aGUgcGF0aHMgaW4gdGhlIGluZGV4IHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gdG8gYmUgY2hlY2tlZCBvdXQgdG8geW91cgord29ya2luZyB0cmVlLiAgQWZ0ZXIgcnVubmluZyBgZ2l0IGFkZCBoZWxsby5jOyBybSBoZWxsby5jYCwgeW91IHdpbGwgX25vdF8KK3NlZSBgaGVsbG8uY2AgaW4geW91ciB3b3JraW5nIHRyZWUgd2l0aCB0aGUgZm9ybWVyLCBidXQgd2l0aCB0aGUgbGF0dGVyCit5b3Ugd2lsbC4KKworICogSnVzdCBhcyB0aGUgZmlsZXN5c3RlbSAnLicgKHBlcmlvZCkgcmVmZXJzIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwKKyAgIHVzaW5nIGEgJy4nIGFzIGEgcmVwb3NpdG9yeSBuYW1lIGluIEdpdCAoYSBkb3QtcmVwb3NpdG9yeSkgaXMgYSByZWxhdGl2ZQorICAgcGF0aCBhbmQgbWVhbnMgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuCisKK0hlcmUgYXJlIHRoZSBydWxlcyByZWdhcmRpbmcgdGhlICJmbGFncyIgdGhhdCB5b3Ugc2hvdWxkIGZvbGxvdyB3aGVuIHlvdSBhcmUKK3NjcmlwdGluZyBHaXQ6CisKKyAqIGl0J3MgcHJlZmVycmVkIHRvIHVzZSB0aGUgbm9uLWRhc2hlZCBmb3JtIG9mIEdpdCBjb21tYW5kcywgd2hpY2ggbWVhbnMgdGhhdAorICAgeW91IHNob3VsZCBwcmVmZXIgYGdpdCBmb29gIHRvIGBnaXQtZm9vYC4KKworICogc3BsaXR0aW5nIHNob3J0IG9wdGlvbnMgdG8gc2VwYXJhdGUgd29yZHMgKHByZWZlciBgZ2l0IGZvbyAtYSAtYmAKKyAgIHRvIGBnaXQgZm9vIC1hYmAsIHRoZSBsYXR0ZXIgbWF5IG5vdCBldmVuIHdvcmspLgorCisgKiB3aGVuIGEgY29tbWFuZC1saW5lIG9wdGlvbiB0YWtlcyBhbiBhcmd1bWVudCwgdXNlIHRoZSAnc3R1Y2snIGZvcm0uICBJbgorICAgb3RoZXIgd29yZHMsIHdyaXRlIGBnaXQgZm9vIC1vQXJnYCBpbnN0ZWFkIG9mIGBnaXQgZm9vIC1vIEFyZ2AgZm9yIHNob3J0CisgICBvcHRpb25zLCBhbmQgYGdpdCBmb28gLS1sb25nLW9wdD1BcmdgIGluc3RlYWQgb2YgYGdpdCBmb28gLS1sb25nLW9wdCBBcmdgCisgICBmb3IgbG9uZyBvcHRpb25zLiAgQW4gb3B0aW9uIHRoYXQgdGFrZXMgb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IG11c3QgYmUKKyAgIHdyaXR0ZW4gaW4gdGhlICdzdHVjaycgZm9ybS4KKworICogd2hlbiB5b3UgZ2l2ZSBhIHJldmlzaW9uIHBhcmFtZXRlciB0byBhIGNvbW1hbmQsIG1ha2Ugc3VyZSB0aGUgcGFyYW1ldGVyIGlzCisgICBub3QgYW1iaWd1b3VzIHdpdGggYSBuYW1lIG9mIGEgZmlsZSBpbiB0aGUgd29yayB0cmVlLiAgRS5nLiBkbyBub3Qgd3JpdGUKKyAgIGBnaXQgbG9nIC0xIEhFQURgIGJ1dCB3cml0ZSBgZ2l0IGxvZyAtMSBIRUFEIC0tYDsgdGhlIGZvcm1lciB3aWxsIG5vdCB3b3JrCisgICBpZiB5b3UgaGFwcGVuIHRvIGhhdmUgYSBmaWxlIGNhbGxlZCBgSEVBRGAgaW4gdGhlIHdvcmsgdHJlZS4KKworICogbWFueSBjb21tYW5kcyBhbGxvdyBhIGxvbmcgb3B0aW9uIGAtLW9wdGlvbmAgdG8gYmUgYWJicmV2aWF0ZWQKKyAgIG9ubHkgdG8gdGhlaXIgdW5pcXVlIHByZWZpeCAoZS5nLiBpZiB0aGVyZSBpcyBubyBvdGhlciBvcHRpb24KKyAgIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYG9wdGAsIHlvdSBtYXkgYmUgYWJsZSB0byBzcGVsbCBgLS1vcHRgIHRvCisgICBpbnZva2UgdGhlIGAtLW9wdGlvbmAgZmxhZyksIGJ1dCB5b3Ugc2hvdWxkIGZ1bGx5IHNwZWxsIHRoZW0gb3V0CisgICB3aGVuIHdyaXRpbmcgeW91ciBzY3JpcHRzOyBsYXRlciB2ZXJzaW9ucyBvZiBHaXQgbWF5IGludHJvZHVjZSBhCisgICBuZXcgb3B0aW9uIHdob3NlIG5hbWUgc2hhcmVzIHRoZSBzYW1lIHByZWZpeCwgZS5nLiBgLS1vcHRpbWl6ZWAsCisgICB0byBtYWtlIGEgc2hvcnQgcHJlZml4IHRoYXQgdXNlZCB0byBiZSB1bmlxdWUgbm8gbG9uZ2VyIHVuaXF1ZS4KKworCitFTkhBTkNFRCBPUFRJT04gUEFSU0VSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGcm9tIHRoZSBHaXQgMS41LjQgc2VyaWVzIGFuZCBmdXJ0aGVyLCBtYW55IEdpdCBjb21tYW5kcyAobm90IGFsbCBvZiB0aGVtIGF0IHRoZQordGltZSBvZiB0aGUgd3JpdGluZyB0aG91Z2gpIGNvbWUgd2l0aCBhbiBlbmhhbmNlZCBvcHRpb24gcGFyc2VyLgorCitIZXJlIGlzIGEgbGlzdCBvZiB0aGUgZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGlzIG9wdGlvbiBwYXJzZXIuCisKKworTWFnaWMgT3B0aW9ucworfn5+fn5+fn5+fn5+fgorQ29tbWFuZHMgd2hpY2ggaGF2ZSB0aGUgZW5oYW5jZWQgb3B0aW9uIHBhcnNlciBhY3RpdmF0ZWQgYWxsIHVuZGVyc3RhbmQgYQorY291cGxlIG9mIG1hZ2ljIGNvbW1hbmQtbGluZSBvcHRpb25zOgorCistaDo6CisJZ2l2ZXMgYSBwcmV0dHkgcHJpbnRlZCB1c2FnZSBvZiB0aGUgY29tbWFuZC4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGVzY3JpYmUgLWgKK3VzYWdlOiBnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+KgorICAgb3I6IGdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5CisKKyAgICAtLWNvbnRhaW5zICAgICAgICAgICAgZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdAorICAgIC0tZGVidWcgICAgICAgICAgICAgICBkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyCisgICAgLS1hbGwgICAgICAgICAgICAgICAgIHVzZSBhbnkgcmVmCisgICAgLS10YWdzICAgICAgICAgICAgICAgIHVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkCisgICAgLS1sb25nICAgICAgICAgICAgICAgIGFsd2F5cyB1c2UgbG9uZyBmb3JtYXQKKyAgICAtLWFiYnJldls9PG4+XSAgICAgICAgdXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm90ZSB0aGF0IHNvbWUgc3ViY29tbWFuZCAoZS5nLiBgZ2l0IGdyZXBgKSBtYXkgYmVoYXZlIGRpZmZlcmVudGx5Cit3aGVuIHRoZXJlIGFyZSB0aGluZ3Mgb24gdGhlIGNvbW1hbmQgbGluZSBvdGhlciB0aGFuIGAtaGAsIGJ1dCBgZ2l0CitzdWJjbWQgLWhgIHdpdGhvdXQgYW55dGhpbmcgZWxzZSBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIG1lYW50IHRvCitjb25zaXN0ZW50bHkgZ2l2ZSB0aGUgdXNhZ2UuCisKKy0taGVscC1hbGw6OgorCVNvbWUgR2l0IGNvbW1hbmRzIHRha2Ugb3B0aW9ucyB0aGF0IGFyZSBvbmx5IHVzZWQgZm9yIHBsdW1iaW5nIG9yIHRoYXQKKwlhcmUgZGVwcmVjYXRlZCwgYW5kIHN1Y2ggb3B0aW9ucyBhcmUgaGlkZGVuIGZyb20gdGhlIGRlZmF1bHQgdXNhZ2UuIFRoaXMKKwlvcHRpb24gZ2l2ZXMgdGhlIGZ1bGwgbGlzdCBvZiBvcHRpb25zLgorCisKK05lZ2F0aW5nIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn4KK09wdGlvbnMgd2l0aCBsb25nIG9wdGlvbiBuYW1lcyBjYW4gYmUgbmVnYXRlZCBieSBwcmVmaXhpbmcgYC0tbm8tYC4gRm9yCitleGFtcGxlLCBgZ2l0IGJyYW5jaGAgaGFzIHRoZSBvcHRpb24gYC0tdHJhY2tgIHdoaWNoIGlzICdvbicgYnkgZGVmYXVsdC4gWW91CitjYW4gdXNlIGAtLW5vLXRyYWNrYCB0byBvdmVycmlkZSB0aGF0IGJlaGF2aW91ci4gVGhlIHNhbWUgZ29lcyBmb3IgYC0tY29sb3JgCithbmQgYC0tbm8tY29sb3JgLgorCisKK0FnZ3JlZ2F0aW5nIHNob3J0IG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0NvbW1hbmRzIHRoYXQgc3VwcG9ydCB0aGUgZW5oYW5jZWQgb3B0aW9uIHBhcnNlciBhbGxvdyB5b3UgdG8gYWdncmVnYXRlIHNob3J0CitvcHRpb25zLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBmb3IgZXhhbXBsZSB1c2UgYGdpdCBybSAtcmZgIG9yCitgZ2l0IGNsZWFuIC1mZHhgLgorCisKK0FiYnJldmlhdGluZyBsb25nIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0NvbW1hbmRzIHRoYXQgc3VwcG9ydCB0aGUgZW5oYW5jZWQgb3B0aW9uIHBhcnNlciBhY2NlcHRzIHVuaXF1ZQorcHJlZml4IG9mIGEgbG9uZyBvcHRpb24gYXMgaWYgaXQgaXMgZnVsbHkgc3BlbGxlZCBvdXQsIGJ1dCB1c2UgdGhpcword2l0aCBhIGNhdXRpb24uICBGb3IgZXhhbXBsZSwgYGdpdCBjb21taXQgLS1hbWVuYCBiZWhhdmVzIGFzIGlmIHlvdQordHlwZWQgYGdpdCBjb21taXQgLS1hbWVuZGAsIGJ1dCB0aGF0IGlzIHRydWUgb25seSB1bnRpbCBhIGxhdGVyIHZlcnNpb24KK29mIEdpdCBpbnRyb2R1Y2VzIGFub3RoZXIgb3B0aW9uIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHByZWZpeCwKK2UuZy4gYGdpdCBjb21taXQgLS1hbWVuaXR5YCBvcHRpb24uCisKKworU2VwYXJhdGluZyBhcmd1bWVudCBmcm9tIHRoZSBvcHRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitZb3UgY2FuIHdyaXRlIHRoZSBtYW5kYXRvcnkgb3B0aW9uIHBhcmFtZXRlciB0byBhbiBvcHRpb24gYXMgYSBzZXBhcmF0ZQord29yZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhhdCBtZWFucyB0aGF0IGFsbCB0aGUgZm9sbG93aW5nIHVzZXMgd29yazoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZm9vIC0tbG9uZy1vcHQ9QXJnCiskIGdpdCBmb28gLS1sb25nLW9wdCBBcmcKKyQgZ2l0IGZvbyAtb0FyZworJCBnaXQgZm9vIC1vIEFyZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGlzIGlzICpOT1QqIGFsbG93ZWQgZm9yIHN3aXRjaGVzIHdpdGggYW4gb3B0aW9uYWwgdmFsdWUsIHdoZXJlIHRoZQorJ3N0dWNrJyBmb3JtIG11c3QgYmUgdXNlZDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRlc2NyaWJlIC0tYWJicmV2IEhFQUQgICAgICMgY29ycmVjdAorJCBnaXQgZGVzY3JpYmUgLS1hYmJyZXY9MTAgSEVBRCAgIyBjb3JyZWN0CiskIGdpdCBkZXNjcmliZSAtLWFiYnJldiAxMCBIRUFEICAjIE5PVCBXSEFUIFlPVSBNRUFOVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK05PVEVTIE9OIEZSRVFVRU5UTFkgQ09ORlVTRUQgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hbnkgY29tbWFuZHMgdGhhdCBjYW4gd29yayBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlCithbmQvb3IgaW4gdGhlIGluZGV4IGNhbiB0YWtlIGAtLWNhY2hlZGAgYW5kL29yIGAtLWluZGV4YAorb3B0aW9ucy4gIFNvbWV0aW1lcyBwZW9wbGUgaW5jb3JyZWN0bHkgdGhpbmsgdGhhdCwgYmVjYXVzZQordGhlIGluZGV4IHdhcyBvcmlnaW5hbGx5IGNhbGxlZCBjYWNoZSwgdGhlc2UgdHdvIGFyZQorc3lub255bXMuICBUaGV5IGFyZSAqbm90KiAtLSB0aGVzZSB0d28gb3B0aW9ucyBtZWFuIHZlcnkKK2RpZmZlcmVudCB0aGluZ3MuCisKKyAqIFRoZSBgLS1jYWNoZWRgIG9wdGlvbiBpcyB1c2VkIHRvIGFzayBhIGNvbW1hbmQgdGhhdAorICAgdXN1YWxseSB3b3JrcyBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRvICpvbmx5KiB3b3JrCisgICB3aXRoIHRoZSBpbmRleC4gIEZvciBleGFtcGxlLCBgZ2l0IGdyZXBgLCB3aGVuIHVzZWQKKyAgIHdpdGhvdXQgYSBjb21taXQgdG8gc3BlY2lmeSBmcm9tIHdoaWNoIGNvbW1pdCB0byBsb29rIGZvcgorICAgc3RyaW5ncyBpbiwgdXN1YWxseSB3b3JrcyBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLAorICAgYnV0IHdpdGggdGhlIGAtLWNhY2hlZGAgb3B0aW9uLCBpdCBsb29rcyBmb3Igc3RyaW5ncyBpbgorICAgdGhlIGluZGV4LgorCisgKiBUaGUgYC0taW5kZXhgIG9wdGlvbiBpcyB1c2VkIHRvIGFzayBhIGNvbW1hbmQgdGhhdAorICAgdXN1YWxseSB3b3JrcyBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRvICphbHNvKgorICAgYWZmZWN0IHRoZSBpbmRleC4gIEZvciBleGFtcGxlLCBgZ2l0IHN0YXNoIGFwcGx5YCB1c3VhbGx5CisgICBtZXJnZXMgY2hhbmdlcyByZWNvcmRlZCBpbiBhIHN0YXNoIGVudHJ5IHRvIHRoZSB3b3JraW5nIHRyZWUsCisgICBidXQgd2l0aCB0aGUgYC0taW5kZXhgIG9wdGlvbiwgaXQgYWxzbyBtZXJnZXMgY2hhbmdlcyB0bworICAgdGhlIGluZGV4IGFzIHdlbGwuCisKK2BnaXQgYXBwbHlgIGNvbW1hbmQgY2FuIGJlIHVzZWQgd2l0aCBgLS1jYWNoZWRgIGFuZAorYC0taW5kZXhgIChidXQgbm90IGF0IHRoZSBzYW1lIHRpbWUpLiAgVXN1YWxseSB0aGUgY29tbWFuZAorb25seSBhZmZlY3RzIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLCBidXQgd2l0aAorYC0taW5kZXhgLCBpdCBwYXRjaGVzIGJvdGggdGhlIGZpbGVzIGFuZCB0aGVpciBpbmRleAorZW50cmllcywgYW5kIHdpdGggYC0tY2FjaGVkYCwgaXQgbW9kaWZpZXMgb25seSB0aGUgaW5kZXgKK2VudHJpZXMuCisKK1NlZSBhbHNvIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83djY0Y2xnNXU5LmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQvIGFuZAoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2eTdlajlnMzguZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLyBmb3IgZnVydGhlcgoraW5mb3JtYXRpb24uCisKK1NvbWUgb3RoZXIgY29tbWFuZHMgdGhhdCBhbHNvIHdvcmsgb24gZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQvb3IKK2luIHRoZSBpbmRleCBjYW4gdGFrZSBgLS1zdGFnZWRgIGFuZC9vciBgLS13b3JrdHJlZWAuCisKKyogYC0tc3RhZ2VkYCBpcyBleGFjdGx5IGxpa2UgYC0tY2FjaGVkYCwgd2hpY2ggaXMgdXNlZCB0byBhc2sgYQorICBjb21tYW5kIHRvIG9ubHkgd29yayBvbiB0aGUgaW5kZXgsIG5vdCB0aGUgd29ya2luZyB0cmVlLgorCisqIGAtLXdvcmt0cmVlYCBpcyB0aGUgb3Bwb3NpdGUsIHRvIGFzayBhIGNvbW1hbmQgdG8gd29yayBvbiB0aGUKKyAgd29ya2luZyB0cmVlIG9ubHksIG5vdCB0aGUgaW5kZXguCisKKyogVGhlIHR3byBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgdG8gYXNrIGEgY29tbWFuZCB0byB3b3JrCisgIG9uIGJvdGggdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjk1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0CkBAIC0wLDAgKzEsMTY2MCBAQAorZ2l0Y29yZS10dXRvcmlhbCg3KQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRjb3JlLXR1dG9yaWFsIC0gQSBHaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycworCitTWU5PUFNJUworLS0tLS0tLS0KK2dpdCAqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHR1dG9yaWFsIGV4cGxhaW5zIGhvdyB0byB1c2UgdGhlICJjb3JlIiBHaXQgY29tbWFuZHMgdG8gc2V0IHVwIGFuZAord29yayB3aXRoIGEgR2l0IHJlcG9zaXRvcnkuCisKK0lmIHlvdSBqdXN0IG5lZWQgdG8gdXNlIEdpdCBhcyBhIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtIHlvdSBtYXkgcHJlZmVyCit0byBzdGFydCB3aXRoICJBIFR1dG9yaWFsIEludHJvZHVjdGlvbiB0byBHaXQiIChsaW5rZ2l0OmdpdHR1dG9yaWFsWzddKSBvcgorbGluazp1c2VyLW1hbnVhbC5odG1sW3RoZSBHaXQgVXNlciBNYW51YWxdLgorCitIb3dldmVyLCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGxvdy1sZXZlbCB0b29scyBjYW4gYmUgaGVscGZ1bCBpZgoreW91IHdhbnQgdG8gdW5kZXJzdGFuZCBHaXQncyBpbnRlcm5hbHMuCisKK1RoZSBjb3JlIEdpdCBpcyBvZnRlbiBjYWxsZWQgInBsdW1iaW5nIiwgd2l0aCB0aGUgcHJldHRpZXIgdXNlcgoraW50ZXJmYWNlcyBvbiB0b3Agb2YgaXQgY2FsbGVkICJwb3JjZWxhaW4iLiBZb3UgbWF5IG5vdCB3YW50IHRvIHVzZSB0aGUKK3BsdW1iaW5nIGRpcmVjdGx5IHZlcnkgb2Z0ZW4sIGJ1dCBpdCBjYW4gYmUgZ29vZCB0byBrbm93IHdoYXQgdGhlCitwbHVtYmluZyBkb2VzIHdoZW4gdGhlIHBvcmNlbGFpbiBpc24ndCBmbHVzaGluZy4KKworQmFjayB3aGVuIHRoaXMgZG9jdW1lbnQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiwgbWFueSBwb3JjZWxhaW4KK2NvbW1hbmRzIHdlcmUgc2hlbGwgc2NyaXB0cy4gRm9yIHNpbXBsaWNpdHksIGl0IHN0aWxsIHVzZXMgdGhlbSBhcworZXhhbXBsZXMgdG8gaWxsdXN0cmF0ZSBob3cgcGx1bWJpbmcgaXMgZml0IHRvZ2V0aGVyIHRvIGZvcm0gdGhlCitwb3JjZWxhaW4gY29tbWFuZHMuIFRoZSBzb3VyY2UgdHJlZSBpbmNsdWRlcyBzb21lIG9mIHRoZXNlIHNjcmlwdHMgaW4KK2NvbnRyaWIvZXhhbXBsZXMvIGZvciByZWZlcmVuY2UuIEFsdGhvdWdoIHRoZXNlIGFyZSBub3QgaW1wbGVtZW50ZWQgYXMKK3NoZWxsIHNjcmlwdHMgYW55bW9yZSwgdGhlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHBsdW1iaW5nIGxheWVyCitjb21tYW5kcyBkbyBpcyBzdGlsbCB2YWxpZC4KKworW05PVEVdCitEZWVwZXIgdGVjaG5pY2FsIGRldGFpbHMgYXJlIG9mdGVuIG1hcmtlZCBhcyBOb3Rlcywgd2hpY2ggeW91IGNhbgorc2tpcCBvbiB5b3VyIGZpcnN0IHJlYWRpbmcuCisKKworQ3JlYXRpbmcgYSBHaXQgcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVhdGluZyBhIG5ldyBHaXQgcmVwb3NpdG9yeSBjb3VsZG4ndCBiZSBlYXNpZXI6IGFsbCBHaXQgcmVwb3NpdG9yaWVzIHN0YXJ0CitvdXQgZW1wdHksIGFuZCB0aGUgb25seSB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyBmaW5kIHlvdXJzZWxmIGEKK3N1YmRpcmVjdG9yeSB0aGF0IHlvdSB3YW50IHRvIHVzZSBhcyBhIHdvcmtpbmcgdHJlZSAtIGVpdGhlciBhbiBlbXB0eQorb25lIGZvciBhIHRvdGFsbHkgbmV3IHByb2plY3QsIG9yIGFuIGV4aXN0aW5nIHdvcmtpbmcgdHJlZSB0aGF0IHlvdSB3YW50Cit0byBpbXBvcnQgaW50byBHaXQuCisKK0ZvciBvdXIgZmlyc3QgZXhhbXBsZSwgd2UncmUgZ29pbmcgdG8gc3RhcnQgYSB0b3RhbGx5IG5ldyByZXBvc2l0b3J5IGZyb20KK3NjcmF0Y2gsIHdpdGggbm8gcHJlLWV4aXN0aW5nIGZpbGVzLCBhbmQgd2UnbGwgY2FsbCBpdCAnZ2l0LXR1dG9yaWFsJy4KK1RvIHN0YXJ0IHVwLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkgZm9yIGl0LCBjaGFuZ2UgaW50byB0aGF0CitzdWJkaXJlY3RvcnksIGFuZCBpbml0aWFsaXplIHRoZSBHaXQgaW5mcmFzdHJ1Y3R1cmUgd2l0aCAnZ2l0IGluaXQnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWtkaXIgZ2l0LXR1dG9yaWFsCiskIGNkIGdpdC10dXRvcmlhbAorJCBnaXQgaW5pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHdoaWNoIEdpdCB3aWxsIHJlcGx5CisKKy0tLS0tLS0tLS0tLS0tLS0KK0luaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC5naXQvCistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIGlzIGp1c3QgR2l0J3Mgd2F5IG9mIHNheWluZyB0aGF0IHlvdSBoYXZlbid0IGJlZW4gZG9pbmcgYW55dGhpbmcKK3N0cmFuZ2UsIGFuZCB0aGF0IGl0IHdpbGwgaGF2ZSBjcmVhdGVkIGEgbG9jYWwgYC5naXRgIGRpcmVjdG9yeSBzZXR1cCBmb3IKK3lvdXIgbmV3IHByb2plY3QuIFlvdSB3aWxsIG5vdyBoYXZlIGEgYC5naXRgIGRpcmVjdG9yeSwgYW5kIHlvdSBjYW4KK2luc3BlY3QgdGhhdCB3aXRoICdscycuIEZvciB5b3VyIG5ldyBlbXB0eSBwcm9qZWN0LCBpdCBzaG91bGQgc2hvdyB5b3UKK3RocmVlIGVudHJpZXMsIGFtb25nIG90aGVyIHRoaW5nczoKKworIC0gYSBmaWxlIGNhbGxlZCBgSEVBRGAsIHRoYXQgaGFzIGByZWY6IHJlZnMvaGVhZHMvbWFzdGVyYCBpbiBpdC4KKyAgIFRoaXMgaXMgc2ltaWxhciB0byBhIHN5bWJvbGljIGxpbmsgYW5kIHBvaW50cyBhdAorICAgYHJlZnMvaGVhZHMvbWFzdGVyYCByZWxhdGl2ZSB0byB0aGUgYEhFQURgIGZpbGUuCisrCitEb24ndCB3b3JyeSBhYm91dCB0aGUgZmFjdCB0aGF0IHRoZSBmaWxlIHRoYXQgdGhlIGBIRUFEYCBsaW5rIHBvaW50cyB0bworZG9lc24ndCBldmVuIGV4aXN0IHlldCAtLSB5b3UgaGF2ZW4ndCBjcmVhdGVkIHRoZSBjb21taXQgdGhhdCB3aWxsCitzdGFydCB5b3VyIGBIRUFEYCBkZXZlbG9wbWVudCBicmFuY2ggeWV0LgorCisgLSBhIHN1YmRpcmVjdG9yeSBjYWxsZWQgYG9iamVjdHNgLCB3aGljaCB3aWxsIGNvbnRhaW4gYWxsIHRoZQorICAgb2JqZWN0cyBvZiB5b3VyIHByb2plY3QuIFlvdSBzaG91bGQgbmV2ZXIgaGF2ZSBhbnkgcmVhbCByZWFzb24gdG8KKyAgIGxvb2sgYXQgdGhlIG9iamVjdHMgZGlyZWN0bHksIGJ1dCB5b3UgbWlnaHQgd2FudCB0byBrbm93IHRoYXQgdGhlc2UKKyAgIG9iamVjdHMgYXJlIHdoYXQgY29udGFpbnMgYWxsIHRoZSByZWFsICdkYXRhJyBpbiB5b3VyIHJlcG9zaXRvcnkuCisKKyAtIGEgc3ViZGlyZWN0b3J5IGNhbGxlZCBgcmVmc2AsIHdoaWNoIGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb2JqZWN0cy4KKworSW4gcGFydGljdWxhciwgdGhlIGByZWZzYCBzdWJkaXJlY3Rvcnkgd2lsbCBjb250YWluIHR3byBvdGhlcgorc3ViZGlyZWN0b3JpZXMsIG5hbWVkIGBoZWFkc2AgYW5kIGB0YWdzYCByZXNwZWN0aXZlbHkuIFRoZXkgZG8KK2V4YWN0bHkgd2hhdCB0aGVpciBuYW1lcyBpbXBseTogdGhleSBjb250YWluIHJlZmVyZW5jZXMgdG8gYW55IG51bWJlcgorb2YgZGlmZmVyZW50ICdoZWFkcycgb2YgZGV2ZWxvcG1lbnQgKGFrYSAnYnJhbmNoZXMnKSwgYW5kIHRvIGFueQorJ3RhZ3MnIHRoYXQgeW91IGhhdmUgY3JlYXRlZCB0byBuYW1lIHNwZWNpZmljIHZlcnNpb25zIGluIHlvdXIKK3JlcG9zaXRvcnkuCisKK09uZSBub3RlOiB0aGUgc3BlY2lhbCBgbWFzdGVyYCBoZWFkIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCwgd2hpY2ggaXMKK3doeSB0aGUgYC5naXQvSEVBRGAgZmlsZSB3YXMgY3JlYXRlZCBwb2ludHMgdG8gaXQgZXZlbiBpZiBpdAorZG9lc24ndCB5ZXQgZXhpc3QuIEJhc2ljYWxseSwgdGhlIGBIRUFEYCBsaW5rIGlzIHN1cHBvc2VkIHRvIGFsd2F5cworcG9pbnQgdG8gdGhlIGJyYW5jaCB5b3UgYXJlIHdvcmtpbmcgb24gcmlnaHQgbm93LCBhbmQgeW91IGFsd2F5cworc3RhcnQgb3V0IGV4cGVjdGluZyB0byB3b3JrIG9uIHRoZSBgbWFzdGVyYCBicmFuY2guCisKK0hvd2V2ZXIsIHRoaXMgaXMgb25seSBhIGNvbnZlbnRpb24sIGFuZCB5b3UgY2FuIG5hbWUgeW91ciBicmFuY2hlcworYW55dGhpbmcgeW91IHdhbnQsIGFuZCBkb24ndCBoYXZlIHRvIGV2ZXIgZXZlbiAnaGF2ZScgYSBgbWFzdGVyYAorYnJhbmNoLiBBIG51bWJlciBvZiB0aGUgR2l0IHRvb2xzIHdpbGwgYXNzdW1lIHRoYXQgYC5naXQvSEVBRGAgaXMKK3ZhbGlkLCB0aG91Z2guCisKK1tOT1RFXQorQW4gJ29iamVjdCcgaXMgaWRlbnRpZmllZCBieSBpdHMgMTYwLWJpdCBTSEEtMSBoYXNoLCBha2EgJ29iamVjdCBuYW1lJywKK2FuZCBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgaXMgYWx3YXlzIHRoZSA0MC1ieXRlIGhleAorcmVwcmVzZW50YXRpb24gb2YgdGhhdCBTSEEtMSBuYW1lLiBUaGUgZmlsZXMgaW4gdGhlIGByZWZzYAorc3ViZGlyZWN0b3J5IGFyZSBleHBlY3RlZCB0byBjb250YWluIHRoZXNlIGhleCByZWZlcmVuY2VzCisodXN1YWxseSB3aXRoIGEgZmluYWwgYFxuYCBhdCB0aGUgZW5kKSwgYW5kIHlvdSBzaG91bGQgdGh1cworZXhwZWN0IHRvIHNlZSBhIG51bWJlciBvZiA0MS1ieXRlIGZpbGVzIGNvbnRhaW5pbmcgdGhlc2UKK3JlZmVyZW5jZXMgaW4gdGhlc2UgYHJlZnNgIHN1YmRpcmVjdG9yaWVzIHdoZW4geW91IGFjdHVhbGx5IHN0YXJ0Citwb3B1bGF0aW5nIHlvdXIgdHJlZS4KKworW05PVEVdCitBbiBhZHZhbmNlZCB1c2VyIG1heSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGxpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0KK2FmdGVyIGZpbmlzaGluZyB0aGlzIHR1dG9yaWFsLgorCitZb3UgaGF2ZSBub3cgY3JlYXRlZCB5b3VyIGZpcnN0IEdpdCByZXBvc2l0b3J5LiBPZiBjb3Vyc2UsIHNpbmNlIGl0J3MKK2VtcHR5LCB0aGF0J3Mgbm90IHZlcnkgdXNlZnVsLCBzbyBsZXQncyBzdGFydCBwb3B1bGF0aW5nIGl0IHdpdGggZGF0YS4KKworCitQb3B1bGF0aW5nIGEgR2l0IHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSdsbCBrZWVwIHRoaXMgc2ltcGxlIGFuZCBzdHVwaWQsIHNvIHdlJ2xsIHN0YXJ0IG9mZiB3aXRoIHBvcHVsYXRpbmcgYQorZmV3IHRyaXZpYWwgZmlsZXMganVzdCB0byBnZXQgYSBmZWVsIGZvciBpdC4KKworU3RhcnQgb2ZmIHdpdGgganVzdCBjcmVhdGluZyBhbnkgcmFuZG9tIGZpbGVzIHRoYXQgeW91IHdhbnQgdG8gbWFpbnRhaW4KK2luIHlvdXIgR2l0IHJlcG9zaXRvcnkuIFdlJ2xsIHN0YXJ0IG9mZiB3aXRoIGEgZmV3IGJhZCBleGFtcGxlcywganVzdCB0bworZ2V0IGEgZmVlbCBmb3IgaG93IHRoaXMgd29ya3M6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBlY2hvICJIZWxsbyBXb3JsZCIgPmhlbGxvCiskIGVjaG8gIlNpbGx5IGV4YW1wbGUiID5leGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworeW91IGhhdmUgbm93IGNyZWF0ZWQgdHdvIGZpbGVzIGluIHlvdXIgd29ya2luZyB0cmVlIChha2EgJ3dvcmtpbmcgZGlyZWN0b3J5JyksCitidXQgdG8gYWN0dWFsbHkgY2hlY2sgaW4geW91ciBoYXJkIHdvcmssIHlvdSB3aWxsIGhhdmUgdG8gZ28gdGhyb3VnaCB0d28gc3RlcHM6CisKKyAtIGZpbGwgaW4gdGhlICdpbmRleCcgZmlsZSAoYWthICdjYWNoZScpIHdpdGggdGhlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIKKyAgIHdvcmtpbmcgdHJlZSBzdGF0ZS4KKworIC0gY29tbWl0IHRoYXQgaW5kZXggZmlsZSBhcyBhbiBvYmplY3QuCisKK1RoZSBmaXJzdCBzdGVwIGlzIHRyaXZpYWw6IHdoZW4geW91IHdhbnQgdG8gdGVsbCBHaXQgYWJvdXQgYW55IGNoYW5nZXMKK3RvIHlvdXIgd29ya2luZyB0cmVlLCB5b3UgdXNlIHRoZSAnZ2l0IHVwZGF0ZS1pbmRleCcgcHJvZ3JhbS4gVGhhdAorcHJvZ3JhbSBub3JtYWxseSBqdXN0IHRha2VzIGEgbGlzdCBvZiBmaWxlbmFtZXMgeW91IHdhbnQgdG8gdXBkYXRlLCBidXQKK3RvIGF2b2lkIHRyaXZpYWwgbWlzdGFrZXMsIGl0IHJlZnVzZXMgdG8gYWRkIG5ldyBlbnRyaWVzIHRvIHRoZSBpbmRleAorKG9yIHJlbW92ZSBleGlzdGluZyBvbmVzKSB1bmxlc3MgeW91IGV4cGxpY2l0bHkgdGVsbCBpdCB0aGF0IHlvdSdyZQorYWRkaW5nIGEgbmV3IGVudHJ5IHdpdGggdGhlIGAtLWFkZGAgZmxhZyAob3IgcmVtb3ZpbmcgYW4gZW50cnkgd2l0aCB0aGUKK2AtLXJlbW92ZWApIGZsYWcuCisKK1NvIHRvIHBvcHVsYXRlIHRoZSBpbmRleCB3aXRoIHRoZSB0d28gZmlsZXMgeW91IGp1c3QgY3JlYXRlZCwgeW91IGNhbiBkbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBoZWxsbyBleGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHlvdSBoYXZlIG5vdyB0b2xkIEdpdCB0byB0cmFjayB0aG9zZSB0d28gZmlsZXMuCisKK0luIGZhY3QsIGFzIHlvdSBkaWQgdGhhdCwgaWYgeW91IG5vdyBsb29rIGludG8geW91ciBvYmplY3QgZGlyZWN0b3J5LAoreW91J2xsIG5vdGljZSB0aGF0IEdpdCB3aWxsIGhhdmUgYWRkZWQgdHdvIG5ldyBvYmplY3RzIHRvIHRoZSBvYmplY3QKK2RhdGFiYXNlLiBJZiB5b3UgZGlkIGV4YWN0bHkgdGhlIHN0ZXBzIGFib3ZlLCB5b3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIGRvCisKKworLS0tLS0tLS0tLS0tLS0tLQorJCBscyAuZ2l0L29iamVjdHMvPz8vKgorLS0tLS0tLS0tLS0tLS0tLQorCithbmQgc2VlIHR3byBmaWxlczoKKworLS0tLS0tLS0tLS0tLS0tLQorLmdpdC9vYmplY3RzLzU1LzdkYjAzZGU5OTdjODZhNGEwMjhlMWViZDNhMWNlYjIyNWJlMjM4CisuZ2l0L29iamVjdHMvZjIvNGM3NGEyZTUwMGY1ZWUxMzMyYzg2Yjk0MTk5ZjUyYjFkMWQ5NjIKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggY29ycmVzcG9uZCB3aXRoIHRoZSBvYmplY3RzIHdpdGggbmFtZXMgb2YgYDU1N2RiLi4uYCBhbmQKK2BmMjRjNy4uLmAgcmVzcGVjdGl2ZWx5LgorCitJZiB5b3Ugd2FudCB0bywgeW91IGNhbiB1c2UgJ2dpdCBjYXQtZmlsZScgdG8gbG9vayBhdCB0aG9zZSBvYmplY3RzLCBidXQKK3lvdSdsbCBoYXZlIHRvIHVzZSB0aGUgb2JqZWN0IG5hbWUsIG5vdCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9iamVjdDoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgLXQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOAorLS0tLS0tLS0tLS0tLS0tLQorCit3aGVyZSB0aGUgYC10YCB0ZWxscyAnZ2l0IGNhdC1maWxlJyB0byB0ZWxsIHlvdSB3aGF0IHRoZSAidHlwZSIgb2YgdGhlCitvYmplY3QgaXMuIEdpdCB3aWxsIHRlbGwgeW91IHRoYXQgeW91IGhhdmUgYSAiYmxvYiIgb2JqZWN0IChpLmUuLCBqdXN0IGEKK3JlZ3VsYXIgZmlsZSksIGFuZCB5b3UgY2FuIHNlZSB0aGUgY29udGVudHMgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBibG9iIDU1N2RiMDMKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBwcmludCBvdXQgIkhlbGxvIFdvcmxkIi4gVGhlIG9iamVjdCBgNTU3ZGIwM2AgaXMgbm90aGluZworbW9yZSB0aGFuIHRoZSBjb250ZW50cyBvZiB5b3VyIGZpbGUgYGhlbGxvYC4KKworW05PVEVdCitEb24ndCBjb25mdXNlIHRoYXQgb2JqZWN0IHdpdGggdGhlIGZpbGUgYGhlbGxvYCBpdHNlbGYuIFRoZQorb2JqZWN0IGlzIGxpdGVyYWxseSBqdXN0IHRob3NlIHNwZWNpZmljICpjb250ZW50cyogb2YgdGhlIGZpbGUsIGFuZAoraG93ZXZlciBtdWNoIHlvdSBsYXRlciBjaGFuZ2UgdGhlIGNvbnRlbnRzIGluIGZpbGUgYGhlbGxvYCwgdGhlIG9iamVjdAord2UganVzdCBsb29rZWQgYXQgd2lsbCBuZXZlciBjaGFuZ2UuIE9iamVjdHMgYXJlIGltbXV0YWJsZS4KKworW05PVEVdCitUaGUgc2Vjb25kIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoYXQgeW91IGNhbgorYWJicmV2aWF0ZSB0aGUgb2JqZWN0IG5hbWUgdG8gb25seSB0aGUgZmlyc3Qgc2V2ZXJhbAoraGV4YWRlY2ltYWwgZGlnaXRzIGluIG1vc3QgcGxhY2VzLgorCitBbnl3YXksIGFzIHdlIG1lbnRpb25lZCBwcmV2aW91c2x5LCB5b3Ugbm9ybWFsbHkgbmV2ZXIgYWN0dWFsbHkgdGFrZSBhCitsb29rIGF0IHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMsIGFuZCB0eXBpbmcgbG9uZyA0MC1jaGFyYWN0ZXIgaGV4CituYW1lcyBpcyBub3Qgc29tZXRoaW5nIHlvdSdkIG5vcm1hbGx5IHdhbnQgdG8gZG8uIFRoZSBhYm92ZSBkaWdyZXNzaW9uCit3YXMganVzdCB0byBzaG93IHRoYXQgJ2dpdCB1cGRhdGUtaW5kZXgnIGRpZCBzb21ldGhpbmcgbWFnaWNhbCwgYW5kCithY3R1YWxseSBzYXZlZCBhd2F5IHRoZSBjb250ZW50cyBvZiB5b3VyIGZpbGVzIGludG8gdGhlIEdpdCBvYmplY3QKK2RhdGFiYXNlLgorCitVcGRhdGluZyB0aGUgaW5kZXggZGlkIHNvbWV0aGluZyBlbHNlIHRvbzogaXQgY3JlYXRlZCBhIGAuZ2l0L2luZGV4YAorZmlsZS4gVGhpcyBpcyB0aGUgaW5kZXggdGhhdCBkZXNjcmliZXMgeW91ciBjdXJyZW50IHdvcmtpbmcgdHJlZSwgYW5kCitzb21ldGhpbmcgeW91IHNob3VsZCBiZSB2ZXJ5IGF3YXJlIG9mLiBBZ2FpbiwgeW91IG5vcm1hbGx5IG5ldmVyIHdvcnJ5CithYm91dCB0aGUgaW5kZXggZmlsZSBpdHNlbGYsIGJ1dCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQKK3lvdSBoYXZlIG5vdCBhY3R1YWxseSByZWFsbHkgImNoZWNrZWQgaW4iIHlvdXIgZmlsZXMgaW50byBHaXQgc28gZmFyLAoreW91J3ZlIG9ubHkgKnRvbGQqIEdpdCBhYm91dCB0aGVtLgorCitIb3dldmVyLCBzaW5jZSBHaXQga25vd3MgYWJvdXQgdGhlbSwgeW91IGNhbiBub3cgc3RhcnQgdXNpbmcgc29tZSBvZiB0aGUKK21vc3QgYmFzaWMgR2l0IGNvbW1hbmRzIHRvIG1hbmlwdWxhdGUgdGhlIGZpbGVzIG9yIGxvb2sgYXQgdGhlaXIgc3RhdHVzLgorCitJbiBwYXJ0aWN1bGFyLCBsZXQncyBub3QgZXZlbiBjaGVjayBpbiB0aGUgdHdvIGZpbGVzIGludG8gR2l0IHlldCwgd2UnbGwKK3N0YXJ0IG9mZiBieSBhZGRpbmcgYW5vdGhlciBsaW5lIHRvIGBoZWxsb2AgZmlyc3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBlY2hvICJJdCdzIGEgbmV3IGRheSBmb3IgZ2l0IiA+PmhlbGxvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHlvdSBjYW4gbm93LCBzaW5jZSB5b3UgdG9sZCBHaXQgYWJvdXQgdGhlIHByZXZpb3VzIHN0YXRlIG9mIGBoZWxsb2AsIGFzaworR2l0IHdoYXQgaGFzIGNoYW5nZWQgaW4gdGhlIHRyZWUgY29tcGFyZWQgdG8geW91ciBvbGQgaW5kZXgsIHVzaW5nIHRoZQorJ2dpdCBkaWZmLWZpbGVzJyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYtZmlsZXMKKy0tLS0tLS0tLS0tLQorCitPb3BzLiBUaGF0IHdhc24ndCB2ZXJ5IHJlYWRhYmxlLiBJdCBqdXN0IHNwaXQgb3V0IGl0cyBvd24gaW50ZXJuYWwKK3ZlcnNpb24gb2YgYSAnZGlmZicsIGJ1dCB0aGF0IGludGVybmFsIHZlcnNpb24gcmVhbGx5IGp1c3QgdGVsbHMgeW91Cit0aGF0IGl0IGhhcyBub3RpY2VkIHRoYXQgImhlbGxvIiBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIHRoYXQgdGhlIG9sZCBvYmplY3QKK2NvbnRlbnRzIGl0IGhhZCBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgZWxzZS4KKworVG8gbWFrZSBpdCByZWFkYWJsZSwgd2UgY2FuIHRlbGwgJ2dpdCBkaWZmLWZpbGVzJyB0byBvdXRwdXQgdGhlCitkaWZmZXJlbmNlcyBhcyBhIHBhdGNoLCB1c2luZyB0aGUgYC1wYCBmbGFnOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYtZmlsZXMgLXAKK2RpZmYgLS1naXQgYS9oZWxsbyBiL2hlbGxvCitpbmRleCA1NTdkYjAzLi4yNjM0MTRmIDEwMDY0NAorLS0tIGEvaGVsbG8KKysrKyBiL2hlbGxvCitAQCAtMSArMSwyIEBACisgSGVsbG8gV29ybGQKKytJdCdzIGEgbmV3IGRheSBmb3IgZ2l0CistLS0tLS0tLS0tLS0KKworaS5lLiB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlIHdlIGNhdXNlZCBieSBhZGRpbmcgYW5vdGhlciBsaW5lIHRvIGBoZWxsb2AuCisKK0luIG90aGVyIHdvcmRzLCAnZ2l0IGRpZmYtZmlsZXMnIGFsd2F5cyBzaG93cyB1cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCit3aGF0IGlzIHJlY29yZGVkIGluIHRoZSBpbmRleCwgYW5kIHdoYXQgaXMgY3VycmVudGx5IGluIHRoZSB3b3JraW5nCit0cmVlLiBUaGF0J3MgdmVyeSB1c2VmdWwuCisKK0EgY29tbW9uIHNob3J0aGFuZCBmb3IgYGdpdCBkaWZmLWZpbGVzIC1wYCBpcyB0byBqdXN0IHdyaXRlIGBnaXQKK2RpZmZgLCB3aGljaCB3aWxsIGRvIHRoZSBzYW1lIHRoaW5nLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYKK2RpZmYgLS1naXQgYS9oZWxsbyBiL2hlbGxvCitpbmRleCA1NTdkYjAzLi4yNjM0MTRmIDEwMDY0NAorLS0tIGEvaGVsbG8KKysrKyBiL2hlbGxvCitAQCAtMSArMSwyIEBACisgSGVsbG8gV29ybGQKKytJdCdzIGEgbmV3IGRheSBmb3IgZ2l0CistLS0tLS0tLS0tLS0KKworCitDb21taXR0aW5nIEdpdCBzdGF0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93LCB3ZSB3YW50IHRvIGdvIHRvIHRoZSBuZXh0IHN0YWdlIGluIEdpdCwgd2hpY2ggaXMgdG8gdGFrZSB0aGUgZmlsZXMKK3RoYXQgR2l0IGtub3dzIGFib3V0IGluIHRoZSBpbmRleCwgYW5kIGNvbW1pdCB0aGVtIGFzIGEgcmVhbCB0cmVlLiBXZSBkbwordGhhdCBpbiB0d28gcGhhc2VzOiBjcmVhdGluZyBhICd0cmVlJyBvYmplY3QsIGFuZCBjb21taXR0aW5nIHRoYXQgJ3RyZWUnCitvYmplY3QgYXMgYSAnY29tbWl0JyBvYmplY3QgdG9nZXRoZXIgd2l0aCBhbiBleHBsYW5hdGlvbiBvZiB3aGF0IHRoZQordHJlZSB3YXMgYWxsIGFib3V0LCBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIG9mIGhvdyB3ZSBjYW1lIHRvIHRoYXQgc3RhdGUuCisKK0NyZWF0aW5nIGEgdHJlZSBvYmplY3QgaXMgdHJpdmlhbCwgYW5kIGlzIGRvbmUgd2l0aCAnZ2l0IHdyaXRlLXRyZWUnLgorVGhlcmUgYXJlIG5vIG9wdGlvbnMgb3Igb3RoZXIgaW5wdXQ6IGBnaXQgd3JpdGUtdHJlZWAgd2lsbCB0YWtlIHRoZQorY3VycmVudCBpbmRleCBzdGF0ZSwgYW5kIHdyaXRlIGFuIG9iamVjdCB0aGF0IGRlc2NyaWJlcyB0aGF0IHdob2xlCitpbmRleC4gSW4gb3RoZXIgd29yZHMsIHdlJ3JlIG5vdyB0eWluZyB0b2dldGhlciBhbGwgdGhlIGRpZmZlcmVudAorZmlsZW5hbWVzIHdpdGggdGhlaXIgY29udGVudHMgKGFuZCB0aGVpciBwZXJtaXNzaW9ucyksIGFuZCB3ZSdyZQorY3JlYXRpbmcgdGhlIGVxdWl2YWxlbnQgb2YgYSBHaXQgImRpcmVjdG9yeSIgb2JqZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHdyaXRlLXRyZWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhpcyB3aWxsIGp1c3Qgb3V0cHV0IHRoZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgdHJlZSwgaW4gdGhpcyBjYXNlCisoaWYgeW91IGhhdmUgZG9uZSBleGFjdGx5IGFzIEkndmUgZGVzY3JpYmVkKSBpdCBzaG91bGQgYmUKKworLS0tLS0tLS0tLS0tLS0tLQorODk4OGRhMTVkMDc3ZDQ4MjlmYzUxZDg1NDRjMDk3ZGVmNjY0NGRiYgorLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBpcyBhbm90aGVyIGluY29tcHJlaGVuc2libGUgb2JqZWN0IG5hbWUuIEFnYWluLCBpZiB5b3Ugd2FudCB0bywKK3lvdSBjYW4gdXNlIGBnaXQgY2F0LWZpbGUgLXQgODk4OGQuLi5gIHRvIHNlZSB0aGF0IHRoaXMgdGltZSB0aGUgb2JqZWN0CitpcyBub3QgYSAiYmxvYiIgb2JqZWN0LCBidXQgYSAidHJlZSIgb2JqZWN0ICh5b3UgY2FuIGFsc28gdXNlCitgZ2l0IGNhdC1maWxlYCB0byBhY3R1YWxseSBvdXRwdXQgdGhlIHJhdyBvYmplY3QgY29udGVudHMsIGJ1dCB5b3UnbGwgc2VlCittYWlubHkgYSBiaW5hcnkgbWVzcywgc28gdGhhdCdzIGxlc3MgaW50ZXJlc3RpbmcpLgorCitIb3dldmVyIC0tIG5vcm1hbGx5IHlvdSdkIG5ldmVyIHVzZSAnZ2l0IHdyaXRlLXRyZWUnIG9uIGl0cyBvd24sIGJlY2F1c2UKK25vcm1hbGx5IHlvdSBhbHdheXMgY29tbWl0IGEgdHJlZSBpbnRvIGEgY29tbWl0IG9iamVjdCB1c2luZyB0aGUKKydnaXQgY29tbWl0LXRyZWUnIGNvbW1hbmQuIEluIGZhY3QsIGl0J3MgZWFzaWVyIHRvIG5vdCBhY3R1YWxseSB1c2UKKydnaXQgd3JpdGUtdHJlZScgb24gaXRzIG93biBhdCBhbGwsIGJ1dCB0byBqdXN0IHBhc3MgaXRzIHJlc3VsdCBpbiBhcyBhbgorYXJndW1lbnQgdG8gJ2dpdCBjb21taXQtdHJlZScuCisKKydnaXQgY29tbWl0LXRyZWUnIG5vcm1hbGx5IHRha2VzIHNldmVyYWwgYXJndW1lbnRzIC0tIGl0IHdhbnRzIHRvIGtub3cKK3doYXQgdGhlICdwYXJlbnQnIG9mIGEgY29tbWl0IHdhcywgYnV0IHNpbmNlIHRoaXMgaXMgdGhlIGZpcnN0IGNvbW1pdAorZXZlciBpbiB0aGlzIG5ldyByZXBvc2l0b3J5LCBhbmQgaXQgaGFzIG5vIHBhcmVudHMsIHdlIG9ubHkgbmVlZCB0byBwYXNzIGluCit0aGUgb2JqZWN0IG5hbWUgb2YgdGhlIHRyZWUuIEhvd2V2ZXIsICdnaXQgY29tbWl0LXRyZWUnIGFsc28gd2FudHMgdG8gZ2V0IGEKK2NvbW1pdCBtZXNzYWdlIG9uIGl0cyBzdGFuZGFyZCBpbnB1dCwgYW5kIGl0IHdpbGwgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmcKK29iamVjdCBuYW1lIGZvciB0aGUgY29tbWl0IHRvIGl0cyBzdGFuZGFyZCBvdXRwdXQuCisKK0FuZCB0aGlzIGlzIHdoZXJlIHdlIGNyZWF0ZSB0aGUgYC5naXQvcmVmcy9oZWFkcy9tYXN0ZXJgIGZpbGUKK3doaWNoIGlzIHBvaW50ZWQgYXQgYnkgYEhFQURgLiBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gY29udGFpbgordGhlIHJlZmVyZW5jZSB0byB0aGUgdG9wLW9mLXRyZWUgb2YgdGhlIG1hc3RlciBicmFuY2gsIGFuZCBzaW5jZQordGhhdCdzIGV4YWN0bHkgd2hhdCAnZ2l0IGNvbW1pdC10cmVlJyBzcGl0cyBvdXQsIHdlIGNhbiBkbyB0aGlzCithbGwgd2l0aCBhIHNlcXVlbmNlIG9mIHNpbXBsZSBzaGVsbCBjb21tYW5kczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkKKyQgY29tbWl0PSQoZWNobyAnSW5pdGlhbCBjb21taXQnIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKQorJCBnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGlzIGNhc2UgdGhpcyBjcmVhdGVzIGEgdG90YWxseSBuZXcgY29tbWl0IHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8KK2FueXRoaW5nIGVsc2UuIE5vcm1hbGx5IHlvdSBkbyB0aGlzIG9ubHkgKm9uY2UqIGZvciBhIHByb2plY3QgZXZlciwgYW5kCithbGwgbGF0ZXIgY29tbWl0cyB3aWxsIGJlIHBhcmVudGVkIG9uIHRvcCBvZiBhbiBlYXJsaWVyIGNvbW1pdC4KKworQWdhaW4sIG5vcm1hbGx5IHlvdSdkIG5ldmVyIGFjdHVhbGx5IGRvIHRoaXMgYnkgaGFuZC4gVGhlcmUgaXMgYQoraGVscGZ1bCBzY3JpcHQgY2FsbGVkIGBnaXQgY29tbWl0YCB0aGF0IHdpbGwgZG8gYWxsIG9mIHRoaXMgZm9yIHlvdS4gU28KK3lvdSBjb3VsZCBoYXZlIGp1c3Qgd3JpdHRlbiBgZ2l0IGNvbW1pdGAKK2luc3RlYWQsIGFuZCBpdCB3b3VsZCBoYXZlIGRvbmUgdGhlIGFib3ZlIG1hZ2ljIHNjcmlwdGluZyBmb3IgeW91LgorCisKK01ha2luZyBhIGNoYW5nZQorLS0tLS0tLS0tLS0tLS0tCisKK1JlbWVtYmVyIGhvdyB3ZSBkaWQgdGhlICdnaXQgdXBkYXRlLWluZGV4JyBvbiBmaWxlIGBoZWxsb2AgYW5kIHRoZW4gd2UKK2NoYW5nZWQgYGhlbGxvYCBhZnRlcndhcmQsIGFuZCBjb3VsZCBjb21wYXJlIHRoZSBuZXcgc3RhdGUgb2YgYGhlbGxvYCB3aXRoIHRoZQorc3RhdGUgd2Ugc2F2ZWQgaW4gdGhlIGluZGV4IGZpbGU/CisKK0Z1cnRoZXIsIHJlbWVtYmVyIGhvdyBJIHNhaWQgdGhhdCAnZ2l0IHdyaXRlLXRyZWUnIHdyaXRlcyB0aGUgY29udGVudHMKK29mIHRoZSAqaW5kZXgqIGZpbGUgdG8gdGhlIHRyZWUsIGFuZCB0aHVzIHdoYXQgd2UganVzdCBjb21taXR0ZWQgd2FzIGluCitmYWN0IHRoZSAqb3JpZ2luYWwqIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGBoZWxsb2AsIG5vdCB0aGUgbmV3IG9uZXMuIFdlIGRpZAordGhhdCBvbiBwdXJwb3NlLCB0byBzaG93IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4IHN0YXRlLCBhbmQgdGhlCitzdGF0ZSBpbiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaG93IHRoZXkgZG9uJ3QgaGF2ZSB0byBtYXRjaCwgZXZlbgord2hlbiB3ZSBjb21taXQgdGhpbmdzLgorCitBcyBiZWZvcmUsIGlmIHdlIGRvIGBnaXQgZGlmZi1maWxlcyAtcGAgaW4gb3VyIGdpdC10dXRvcmlhbCBwcm9qZWN0LAord2UnbGwgc3RpbGwgc2VlIHRoZSBzYW1lIGRpZmZlcmVuY2Ugd2Ugc2F3IGxhc3QgdGltZTogdGhlIGluZGV4IGZpbGUKK2hhc24ndCBjaGFuZ2VkIGJ5IHRoZSBhY3Qgb2YgY29tbWl0dGluZyBhbnl0aGluZy4gSG93ZXZlciwgbm93IHRoYXQgd2UKK2hhdmUgY29tbWl0dGVkIHNvbWV0aGluZywgd2UgY2FuIGFsc28gbGVhcm4gdG8gdXNlIGEgbmV3IGNvbW1hbmQ6CisnZ2l0IGRpZmYtaW5kZXgnLgorCitVbmxpa2UgJ2dpdCBkaWZmLWZpbGVzJywgd2hpY2ggc2hvd2VkIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4CitmaWxlIGFuZCB0aGUgd29ya2luZyB0cmVlLCAnZ2l0IGRpZmYtaW5kZXgnIHNob3dzIHRoZSBkaWZmZXJlbmNlcworYmV0d2VlbiBhIGNvbW1pdHRlZCAqdHJlZSogYW5kIGVpdGhlciB0aGUgaW5kZXggZmlsZSBvciB0aGUgd29ya2luZwordHJlZS4gSW4gb3RoZXIgd29yZHMsICdnaXQgZGlmZi1pbmRleCcgd2FudHMgYSB0cmVlIHRvIGJlIGRpZmZlZAorYWdhaW5zdCwgYW5kIGJlZm9yZSB3ZSBkaWQgdGhlIGNvbW1pdCwgd2UgY291bGRuJ3QgZG8gdGhhdCwgYmVjYXVzZSB3ZQorZGlkbid0IGhhdmUgYW55dGhpbmcgdG8gZGlmZiBhZ2FpbnN0LgorCitCdXQgbm93IHdlIGNhbiBkbworCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmLWluZGV4IC1wIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0KKworKHdoZXJlIGAtcGAgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaXQgZGlkIGluICdnaXQgZGlmZi1maWxlcycpLCBhbmQgaXQKK3dpbGwgc2hvdyB1cyB0aGUgc2FtZSBkaWZmZXJlbmNlLCBidXQgZm9yIGEgdG90YWxseSBkaWZmZXJlbnQgcmVhc29uLgorTm93IHdlJ3JlIGNvbXBhcmluZyB0aGUgd29ya2luZyB0cmVlIG5vdCBhZ2FpbnN0IHRoZSBpbmRleCBmaWxlLAorYnV0IGFnYWluc3QgdGhlIHRyZWUgd2UganVzdCB3cm90ZS4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhvc2UgdHdvCithcmUgb2J2aW91c2x5IHRoZSBzYW1lLCBzbyB3ZSBnZXQgdGhlIHNhbWUgcmVzdWx0LgorCitBZ2FpbiwgYmVjYXVzZSB0aGlzIGlzIGEgY29tbW9uIG9wZXJhdGlvbiwgeW91IGNhbiBhbHNvIGp1c3Qgc2hvcnRoYW5kCitpdCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgSEVBRAorLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBlbmRzIHVwIGRvaW5nIHRoZSBhYm92ZSBmb3IgeW91LgorCitJbiBvdGhlciB3b3JkcywgJ2dpdCBkaWZmLWluZGV4JyBub3JtYWxseSBjb21wYXJlcyBhIHRyZWUgYWdhaW5zdCB0aGUKK3dvcmtpbmcgdHJlZSwgYnV0IHdoZW4gZ2l2ZW4gdGhlIGAtLWNhY2hlZGAgZmxhZywgaXQgaXMgdG9sZCB0bworaW5zdGVhZCBjb21wYXJlIGFnYWluc3QganVzdCB0aGUgaW5kZXggY2FjaGUgY29udGVudHMsIGFuZCBpZ25vcmUgdGhlCitjdXJyZW50IHdvcmtpbmcgdHJlZSBzdGF0ZSBlbnRpcmVseS4gU2luY2Ugd2UganVzdCB3cm90ZSB0aGUgaW5kZXgKK2ZpbGUgdG8gSEVBRCwgZG9pbmcgYGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC1wIEhFQURgIHNob3VsZCB0aHVzIHJldHVybgorYW4gZW1wdHkgc2V0IG9mIGRpZmZlcmVuY2VzLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBpdCBkb2VzLgorCitbTk9URV0KKz09PT09PT09PT09PT09PT0KKydnaXQgZGlmZi1pbmRleCcgcmVhbGx5IGFsd2F5cyB1c2VzIHRoZSBpbmRleCBmb3IgaXRzCitjb21wYXJpc29ucywgYW5kIHNheWluZyB0aGF0IGl0IGNvbXBhcmVzIGEgdHJlZSBhZ2FpbnN0IHRoZSB3b3JraW5nCit0cmVlIGlzIHRodXMgbm90IHN0cmljdGx5IGFjY3VyYXRlLiBJbiBwYXJ0aWN1bGFyLCB0aGUgbGlzdCBvZgorZmlsZXMgdG8gY29tcGFyZSAodGhlICJtZXRhLWRhdGEiKSAqYWx3YXlzKiBjb21lcyBmcm9tIHRoZSBpbmRleCBmaWxlLAorcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBgLS1jYWNoZWRgIGZsYWcgaXMgdXNlZCBvciBub3QuIFRoZSBgLS1jYWNoZWRgCitmbGFnIHJlYWxseSBvbmx5IGRldGVybWluZXMgd2hldGhlciB0aGUgZmlsZSAqY29udGVudHMqIHRvIGJlIGNvbXBhcmVkCitjb21lIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBvciBub3QuCisKK1RoaXMgaXMgbm90IGhhcmQgdG8gdW5kZXJzdGFuZCwgYXMgc29vbiBhcyB5b3UgcmVhbGl6ZSB0aGF0IEdpdCBzaW1wbHkKK25ldmVyIGtub3dzIChvciBjYXJlcykgYWJvdXQgZmlsZXMgdGhhdCBpdCBpcyBub3QgdG9sZCBhYm91dAorZXhwbGljaXRseS4gR2l0IHdpbGwgbmV2ZXIgZ28gKmxvb2tpbmcqIGZvciBmaWxlcyB0byBjb21wYXJlLCBpdAorZXhwZWN0cyB5b3UgdG8gdGVsbCBpdCB3aGF0IHRoZSBmaWxlcyBhcmUsIGFuZCB0aGF0J3Mgd2hhdCB0aGUgaW5kZXgKK2lzIHRoZXJlIGZvci4KKz09PT09PT09PT09PT09PT0KKworSG93ZXZlciwgb3VyIG5leHQgc3RlcCBpcyB0byBjb21taXQgdGhlICpjaGFuZ2UqIHdlIGRpZCwgYW5kIGFnYWluLCB0bwordW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24sIGtlZXAgaW4gbWluZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICJ3b3JraW5nCit0cmVlIGNvbnRlbnRzIiwgImluZGV4IGZpbGUiIGFuZCAiY29tbWl0dGVkIHRyZWUiLiBXZSBoYXZlIGNoYW5nZXMKK2luIHRoZSB3b3JraW5nIHRyZWUgdGhhdCB3ZSB3YW50IHRvIGNvbW1pdCwgYW5kIHdlIGFsd2F5cyBoYXZlIHRvCit3b3JrIHRocm91Z2ggdGhlIGluZGV4IGZpbGUsIHNvIHRoZSBmaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvIGlzIHRvCit1cGRhdGUgdGhlIGluZGV4IGNhY2hlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCBoZWxsbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhub3RlIGhvdyB3ZSBkaWRuJ3QgbmVlZCB0aGUgYC0tYWRkYCBmbGFnIHRoaXMgdGltZSwgc2luY2UgR2l0IGtuZXcKK2Fib3V0IHRoZSBmaWxlIGFscmVhZHkpLgorCitOb3RlIHdoYXQgaGFwcGVucyB0byB0aGUgZGlmZmVyZW50ICdnaXQgZGlmZi17YXN0ZXJpc2t9JyB2ZXJzaW9ucyBoZXJlLgorQWZ0ZXIgd2UndmUgdXBkYXRlZCBgaGVsbG9gIGluIHRoZSBpbmRleCwgYGdpdCBkaWZmLWZpbGVzIC1wYCBub3cgc2hvd3Mgbm8KK2RpZmZlcmVuY2VzLCBidXQgYGdpdCBkaWZmLWluZGV4IC1wIEhFQURgIHN0aWxsICpkb2VzKiBzaG93IHRoYXQgdGhlCitjdXJyZW50IHN0YXRlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBzdGF0ZSB3ZSBjb21taXR0ZWQuIEluIGZhY3QsIG5vdworJ2dpdCBkaWZmLWluZGV4JyBzaG93cyB0aGUgc2FtZSBkaWZmZXJlbmNlIHdoZXRoZXIgd2UgdXNlIHRoZSBgLS1jYWNoZWRgCitmbGFnIG9yIG5vdCwgc2luY2Ugbm93IHRoZSBpbmRleCBpcyBjb2hlcmVudCB3aXRoIHRoZSB3b3JraW5nIHRyZWUuCisKK05vdywgc2luY2Ugd2UndmUgdXBkYXRlZCBgaGVsbG9gIGluIHRoZSBpbmRleCwgd2UgY2FuIGNvbW1pdCB0aGUgbmV3Cit2ZXJzaW9uLiBXZSBjb3VsZCBkbyBpdCBieSB3cml0aW5nIHRoZSB0cmVlIGJ5IGhhbmQgYWdhaW4sIGFuZAorY29tbWl0dGluZyB0aGUgdHJlZSAodGhpcyB0aW1lIHdlJ2QgaGF2ZSB0byB1c2UgdGhlIGAtcCBIRUFEYCBmbGFnIHRvCit0ZWxsIGNvbW1pdCB0aGF0IHRoZSBIRUFEIHdhcyB0aGUgKnBhcmVudCogb2YgdGhlIG5ldyBjb21taXQsIGFuZCB0aGF0Cit0aGlzIHdhc24ndCBhbiBpbml0aWFsIGNvbW1pdCBhbnkgbW9yZSksIGJ1dCB5b3UndmUgZG9uZSB0aGF0IG9uY2UKK2FscmVhZHksIHNvIGxldCdzIGp1c3QgdXNlIHRoZSBoZWxwZnVsIHNjcmlwdCB0aGlzIHRpbWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggc3RhcnRzIGFuIGVkaXRvciBmb3IgeW91IHRvIHdyaXRlIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgdGVsbHMgeW91CithIGJpdCBhYm91dCB3aGF0IHlvdSBoYXZlIGRvbmUuCisKK1dyaXRlIHdoYXRldmVyIG1lc3NhZ2UgeW91IHdhbnQsIGFuZCBhbGwgdGhlIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCAnIycKK3dpbGwgYmUgcHJ1bmVkIG91dCwgYW5kIHRoZSByZXN0IHdpbGwgYmUgdXNlZCBhcyB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yCit0aGUgY2hhbmdlLiBJZiB5b3UgZGVjaWRlIHlvdSBkb24ndCB3YW50IHRvIGNvbW1pdCBhbnl0aGluZyBhZnRlciBhbGwgYXQKK3RoaXMgcG9pbnQgKHlvdSBjYW4gY29udGludWUgdG8gZWRpdCB0aGluZ3MgYW5kIHVwZGF0ZSB0aGUgaW5kZXgpLCB5b3UKK2NhbiBqdXN0IGxlYXZlIGFuIGVtcHR5IG1lc3NhZ2UuIE90aGVyd2lzZSBgZ2l0IGNvbW1pdGAgd2lsbCBjb21taXQKK3RoZSBjaGFuZ2UgZm9yIHlvdS4KKworWW91J3ZlIG5vdyBtYWRlIHlvdXIgZmlyc3QgcmVhbCBHaXQgY29tbWl0LiBBbmQgaWYgeW91J3JlIGludGVyZXN0ZWQgaW4KK2xvb2tpbmcgYXQgd2hhdCBgZ2l0IGNvbW1pdGAgcmVhbGx5IGRvZXMsIGZlZWwgZnJlZSB0byBpbnZlc3RpZ2F0ZToKK2l0J3MgYSBmZXcgdmVyeSBzaW1wbGUgc2hlbGwgc2NyaXB0cyB0byBnZW5lcmF0ZSB0aGUgaGVscGZ1bCAoPykgY29tbWl0CittZXNzYWdlIGhlYWRlcnMsIGFuZCBhIGZldyBvbmUtbGluZXJzIHRoYXQgYWN0dWFsbHkgZG8gdGhlCitjb21taXQgaXRzZWxmICgnZ2l0IGNvbW1pdCcpLgorCisKK0luc3BlY3RpbmcgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doaWxlIGNyZWF0aW5nIGNoYW5nZXMgaXMgdXNlZnVsLCBpdCdzIGV2ZW4gbW9yZSB1c2VmdWwgaWYgeW91IGNhbiB0ZWxsCitsYXRlciB3aGF0IGNoYW5nZWQuIFRoZSBtb3N0IHVzZWZ1bCBjb21tYW5kIGZvciB0aGlzIGlzIGFub3RoZXIgb2YgdGhlCisnZGlmZicgZmFtaWx5LCBuYW1lbHkgJ2dpdCBkaWZmLXRyZWUnLgorCisnZ2l0IGRpZmYtdHJlZScgY2FuIGJlIGdpdmVuIHR3byBhcmJpdHJhcnkgdHJlZXMsIGFuZCBpdCB3aWxsIHRlbGwgeW91IHRoZQorZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtLiBQZXJoYXBzIGV2ZW4gbW9yZSBjb21tb25seSwgdGhvdWdoLCB5b3UgY2FuCitnaXZlIGl0IGp1c3QgYSBzaW5nbGUgY29tbWl0IG9iamVjdCwgYW5kIGl0IHdpbGwgZmlndXJlIG91dCB0aGUgcGFyZW50CitvZiB0aGF0IGNvbW1pdCBpdHNlbGYsIGFuZCBzaG93IHRoZSBkaWZmZXJlbmNlIGRpcmVjdGx5LiBUaHVzLCB0byBnZXQKK3RoZSBzYW1lIGRpZmYgdGhhdCB3ZSd2ZSBhbHJlYWR5IHNlZW4gc2V2ZXJhbCB0aW1lcywgd2UgY2FuIG5vdyBkbworCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmLXRyZWUgLXAgSEVBRAorLS0tLS0tLS0tLS0tLS0tLQorCisoYWdhaW4sIGAtcGAgbWVhbnMgdG8gc2hvdyB0aGUgZGlmZmVyZW5jZSBhcyBhIGh1bWFuLXJlYWRhYmxlIHBhdGNoKSwKK2FuZCBpdCB3aWxsIHNob3cgd2hhdCB0aGUgbGFzdCBjb21taXQgKGluIGBIRUFEYCkgYWN0dWFsbHkgY2hhbmdlZC4KKworW05PVEVdCis9PT09PT09PT09PT0KK0hlcmUgaXMgYW4gQVNDSUkgYXJ0IGJ5IEpvbiBMb2VsaWdlciB0aGF0IGlsbHVzdHJhdGVzIGhvdwordmFyaW91cyAnZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcyBjb21wYXJlIHRoaW5ncy4KKworICAgICAgICAgICAgICAgICAgICAgIGRpZmYtdHJlZQorICAgICAgICAgICAgICAgICAgICAgICArLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICBWICAgIFYKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8IE9iamVjdCBEQiB8CisgICAgICAgICAgICAgICAgICAgIHwgIEJhY2tpbmcgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgIFN0b3JlICAgfAorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgXiAgICBeCisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICBkaWZmLWluZGV4IC0tY2FjaGVkCisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgZGlmZi1pbmRleCAgfCAgICBWCisgICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICBJbmRleCAgIHwKKyAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAiY2FjaGUiICB8CisgICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgIHwgICAgXgorICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgZGlmZi1maWxlcworICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgIFYgICAgVgorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgIFdvcmtpbmcgIHwKKyAgICAgICAgICAgICAgICAgICAgfCBEaXJlY3RvcnkgfAorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCis9PT09PT09PT09PT0KKworTW9yZSBpbnRlcmVzdGluZ2x5LCB5b3UgY2FuIGFsc28gZ2l2ZSAnZ2l0IGRpZmYtdHJlZScgdGhlIGAtLXByZXR0eWAgZmxhZywKK3doaWNoIHRlbGxzIGl0IHRvIGFsc28gc2hvdyB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvciBhbmQgZGF0ZSBvZiB0aGUKK2NvbW1pdCwgYW5kIHlvdSBjYW4gdGVsbCBpdCB0byBzaG93IGEgd2hvbGUgc2VyaWVzIG9mIGRpZmZzLgorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB0ZWxsIGl0IHRvIGJlICJzaWxlbnQiLCBhbmQgbm90IHNob3cgdGhlIGRpZmZzIGF0CithbGwsIGJ1dCBqdXN0IHNob3cgdGhlIGFjdHVhbCBjb21taXQgbWVzc2FnZS4KKworSW4gZmFjdCwgdG9nZXRoZXIgd2l0aCB0aGUgJ2dpdCByZXYtbGlzdCcgcHJvZ3JhbSAod2hpY2ggZ2VuZXJhdGVzIGEKK2xpc3Qgb2YgcmV2aXNpb25zKSwgJ2dpdCBkaWZmLXRyZWUnIGVuZHMgdXAgYmVpbmcgYSB2ZXJpdGFibGUgZm91bnQgb2YKK2NoYW5nZXMuICBZb3UgY2FuIGVtdWxhdGUgYGdpdCBsb2dgLCBgZ2l0IGxvZyAtcGAsIGV0Yy4gd2l0aCBhIHRyaXZpYWwKK3NjcmlwdCB0aGF0IHBpcGVzIHRoZSBvdXRwdXQgb2YgYGdpdCByZXYtbGlzdGAgdG8gYGdpdCBkaWZmLXRyZWUgLS1zdGRpbmAsCit3aGljaCB3YXMgZXhhY3RseSBob3cgZWFybHkgdmVyc2lvbnMgb2YgYGdpdCBsb2dgIHdlcmUgaW1wbGVtZW50ZWQuCisKKworVGFnZ2luZyBhIHZlcnNpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKK0luIEdpdCwgdGhlcmUgYXJlIHR3byBraW5kcyBvZiB0YWdzLCBhICJsaWdodCIgb25lLCBhbmQgYW4gImFubm90YXRlZCB0YWciLgorCitBICJsaWdodCIgdGFnIGlzIHRlY2huaWNhbGx5IG5vdGhpbmcgbW9yZSB0aGFuIGEgYnJhbmNoLCBleGNlcHQgd2UgcHV0CitpdCBpbiB0aGUgYC5naXQvcmVmcy90YWdzL2Agc3ViZGlyZWN0b3J5IGluc3RlYWQgb2YgY2FsbGluZyBpdCBhIGBoZWFkYC4KK1NvIHRoZSBzaW1wbGVzdCBmb3JtIG9mIHRhZyBpbnZvbHZlcyBub3RoaW5nIG1vcmUgdGhhbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHRhZyBteS1maXJzdC10YWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBqdXN0IHdyaXRlcyB0aGUgY3VycmVudCBgSEVBRGAgaW50byB0aGUgYC5naXQvcmVmcy90YWdzL215LWZpcnN0LXRhZ2AKK2ZpbGUsIGFmdGVyIHdoaWNoIHBvaW50IHlvdSBjYW4gdGhlbiB1c2UgdGhpcyBzeW1ib2xpYyBuYW1lIGZvciB0aGF0CitwYXJ0aWN1bGFyIHN0YXRlLiBZb3UgY2FuLCBmb3IgZXhhbXBsZSwgZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBteS1maXJzdC10YWcKKy0tLS0tLS0tLS0tLS0tLS0KKwordG8gZGlmZiB5b3VyIGN1cnJlbnQgc3RhdGUgYWdhaW5zdCB0aGF0IHRhZyB3aGljaCBhdCB0aGlzIHBvaW50IHdpbGwKK29idmlvdXNseSBiZSBhbiBlbXB0eSBkaWZmLCBidXQgaWYgeW91IGNvbnRpbnVlIHRvIGRldmVsb3AgYW5kIGNvbW1pdAorc3R1ZmYsIHlvdSBjYW4gdXNlIHlvdXIgdGFnIGFzIGFuICJhbmNob3ItcG9pbnQiIHRvIHNlZSB3aGF0IGhhcyBjaGFuZ2VkCitzaW5jZSB5b3UgdGFnZ2VkIGl0LgorCitBbiAiYW5ub3RhdGVkIHRhZyIgaXMgYWN0dWFsbHkgYSByZWFsIEdpdCBvYmplY3QsIGFuZCBjb250YWlucyBub3Qgb25seSBhCitwb2ludGVyIHRvIHRoZSBzdGF0ZSB5b3Ugd2FudCB0byB0YWcsIGJ1dCBhbHNvIGEgc21hbGwgdGFnIG5hbWUgYW5kCittZXNzYWdlLCBhbG9uZyB3aXRoIG9wdGlvbmFsbHkgYSBQR1Agc2lnbmF0dXJlIHRoYXQgc2F5cyB0aGF0IHllcywKK3lvdSByZWFsbHkgZGlkCit0aGF0IHRhZy4gWW91IGNyZWF0ZSB0aGVzZSBhbm5vdGF0ZWQgdGFncyB3aXRoIGVpdGhlciB0aGUgYC1hYCBvcgorYC1zYCBmbGFnIHRvICdnaXQgdGFnJzoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdGFnIC1zIDx0YWduYW1lPgorLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIHNpZ24gdGhlIGN1cnJlbnQgYEhFQURgIChidXQgeW91IGNhbiBhbHNvIGdpdmUgaXQgYW5vdGhlcgorYXJndW1lbnQgdGhhdCBzcGVjaWZpZXMgdGhlIHRoaW5nIHRvIHRhZywgZS5nLiwgeW91IGNvdWxkIGhhdmUgdGFnZ2VkIHRoZQorY3VycmVudCBgbXlicmFuY2hgIHBvaW50IGJ5IHVzaW5nIGBnaXQgdGFnIDx0YWduYW1lPiBteWJyYW5jaGApLgorCitZb3Ugbm9ybWFsbHkgb25seSBkbyBzaWduZWQgdGFncyBmb3IgbWFqb3IgcmVsZWFzZXMgb3IgdGhpbmdzCitsaWtlIHRoYXQsIHdoaWxlIHRoZSBsaWdodC13ZWlnaHQgdGFncyBhcmUgdXNlZnVsIGZvciBhbnkgbWFya2luZyB5b3UKK3dhbnQgdG8gZG8gLS0gYW55IHRpbWUgeW91IGRlY2lkZSB0aGF0IHlvdSB3YW50IHRvIHJlbWVtYmVyIGEgY2VydGFpbgorcG9pbnQsIGp1c3QgY3JlYXRlIGEgcHJpdmF0ZSB0YWcgZm9yIGl0LCBhbmQgeW91IGhhdmUgYSBuaWNlIHN5bWJvbGljCituYW1lIGZvciB0aGUgc3RhdGUgYXQgdGhhdCBwb2ludC4KKworCitDb3B5aW5nIHJlcG9zaXRvcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IHJlcG9zaXRvcmllcyBhcmUgbm9ybWFsbHkgdG90YWxseSBzZWxmLXN1ZmZpY2llbnQgYW5kIHJlbG9jYXRhYmxlLgorVW5saWtlIENWUywgZm9yIGV4YW1wbGUsIHRoZXJlIGlzIG5vIHNlcGFyYXRlIG5vdGlvbiBvZgorInJlcG9zaXRvcnkiIGFuZCAid29ya2luZyB0cmVlIi4gQSBHaXQgcmVwb3NpdG9yeSBub3JtYWxseSAqaXMqIHRoZQord29ya2luZyB0cmVlLCB3aXRoIHRoZSBsb2NhbCBHaXQgaW5mb3JtYXRpb24gaGlkZGVuIGluIHRoZSBgLmdpdGAKK3N1YmRpcmVjdG9yeS4gVGhlcmUgaXMgbm90aGluZyBlbHNlLiBXaGF0IHlvdSBzZWUgaXMgd2hhdCB5b3UgZ290LgorCitbTk9URV0KK1lvdSBjYW4gdGVsbCBHaXQgdG8gc3BsaXQgdGhlIEdpdCBpbnRlcm5hbCBpbmZvcm1hdGlvbiBmcm9tCit0aGUgZGlyZWN0b3J5IHRoYXQgaXQgdHJhY2tzLCBidXQgd2UnbGwgaWdub3JlIHRoYXQgZm9yIG5vdzogaXQncyBub3QKK2hvdyBub3JtYWwgcHJvamVjdHMgd29yaywgYW5kIGl0J3MgcmVhbGx5IG9ubHkgbWVhbnQgZm9yIHNwZWNpYWwgdXNlcy4KK1NvIHRoZSBtZW50YWwgbW9kZWwgb2YgInRoZSBHaXQgaW5mb3JtYXRpb24gaXMgYWx3YXlzIHRpZWQgZGlyZWN0bHkgdG8KK3RoZSB3b3JraW5nIHRyZWUgdGhhdCBpdCBkZXNjcmliZXMiIG1heSBub3QgYmUgdGVjaG5pY2FsbHkgMTAwJQorYWNjdXJhdGUsIGJ1dCBpdCdzIGEgZ29vZCBtb2RlbCBmb3IgYWxsIG5vcm1hbCB1c2UuCisKK1RoaXMgaGFzIHR3byBpbXBsaWNhdGlvbnM6CisKKyAtIGlmIHlvdSBncm93IGJvcmVkIHdpdGggdGhlIHR1dG9yaWFsIHJlcG9zaXRvcnkgeW91IGNyZWF0ZWQgKG9yIHlvdSd2ZQorICAgbWFkZSBhIG1pc3Rha2UgYW5kIHdhbnQgdG8gc3RhcnQgYWxsIG92ZXIpLCB5b3UgY2FuIGp1c3QgZG8gc2ltcGxlCisrCistLS0tLS0tLS0tLS0tLS0tCiskIHJtIC1yZiBnaXQtdHV0b3JpYWwKKy0tLS0tLS0tLS0tLS0tLS0KKysKK2FuZCBpdCB3aWxsIGJlIGdvbmUuIFRoZXJlJ3Mgbm8gZXh0ZXJuYWwgcmVwb3NpdG9yeSwgYW5kIHRoZXJlJ3Mgbm8KK2hpc3Rvcnkgb3V0c2lkZSB0aGUgcHJvamVjdCB5b3UgY3JlYXRlZC4KKworIC0gaWYgeW91IHdhbnQgdG8gbW92ZSBvciBkdXBsaWNhdGUgYSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiBkbyBzby4gVGhlcmUKKyAgIGlzICdnaXQgY2xvbmUnIGNvbW1hbmQsIGJ1dCBpZiBhbGwgeW91IHdhbnQgdG8gZG8gaXMganVzdCB0bworICAgY3JlYXRlIGEgY29weSBvZiB5b3VyIHJlcG9zaXRvcnkgKHdpdGggYWxsIHRoZSBmdWxsIGhpc3RvcnkgdGhhdAorICAgd2VudCBhbG9uZyB3aXRoIGl0KSwgeW91IGNhbiBkbyBzbyB3aXRoIGEgcmVndWxhcgorICAgYGNwIC1hIGdpdC10dXRvcmlhbCBuZXctZ2l0LXR1dG9yaWFsYC4KKysKK05vdGUgdGhhdCB3aGVuIHlvdSd2ZSBtb3ZlZCBvciBjb3BpZWQgYSBHaXQgcmVwb3NpdG9yeSwgeW91ciBHaXQgaW5kZXgKK2ZpbGUgKHdoaWNoIGNhY2hlcyB2YXJpb3VzIGluZm9ybWF0aW9uLCBub3RhYmx5IHNvbWUgb2YgdGhlICJzdGF0IgoraW5mb3JtYXRpb24gZm9yIHRoZSBmaWxlcyBpbnZvbHZlZCkgd2lsbCBsaWtlbHkgbmVlZCB0byBiZSByZWZyZXNoZWQuCitTbyBhZnRlciB5b3UgZG8gYSBgY3AgLWFgIHRvIGNyZWF0ZSBhIG5ldyBjb3B5LCB5b3UnbGwgd2FudCB0byBkbworKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorLS0tLS0tLS0tLS0tLS0tLQorKworaW4gdGhlIG5ldyByZXBvc2l0b3J5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBmaWxlIGlzIHVwIHRvIGRhdGUuCisKK05vdGUgdGhhdCB0aGUgc2Vjb25kIHBvaW50IGlzIHRydWUgZXZlbiBhY3Jvc3MgbWFjaGluZXMuIFlvdSBjYW4KK2R1cGxpY2F0ZSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB3aXRoICphbnkqIHJlZ3VsYXIgY29weSBtZWNoYW5pc20sIGJlIGl0Cisnc2NwJywgJ3JzeW5jJyBvciAnd2dldCcuCisKK1doZW4gY29weWluZyBhIHJlbW90ZSByZXBvc2l0b3J5LCB5b3UnbGwgd2FudCB0byBhdCBhIG1pbmltdW0gdXBkYXRlIHRoZQoraW5kZXggY2FjaGUgd2hlbiB5b3UgZG8gdGhpcywgYW5kIGVzcGVjaWFsbHkgd2l0aCBvdGhlciBwZW9wbGVzJworcmVwb3NpdG9yaWVzIHlvdSBvZnRlbiB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBjYWNoZSBpcyBpbiBzb21lCitrbm93biBzdGF0ZSAoeW91IGRvbid0IGtub3cgKndoYXQqIHRoZXkndmUgZG9uZSBhbmQgbm90IHlldCBjaGVja2VkIGluKSwKK3NvIHVzdWFsbHkgeW91J2xsIHByZWNlZGUgdGhlICdnaXQgdXBkYXRlLWluZGV4JyB3aXRoIGEKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC0tcmVzZXQgSEVBRAorJCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGZvcmNlIGEgdG90YWwgaW5kZXggcmUtYnVpbGQgZnJvbSB0aGUgdHJlZSBwb2ludGVkIHRvIGJ5IGBIRUFEYC4KK0l0IHJlc2V0cyB0aGUgaW5kZXggY29udGVudHMgdG8gYEhFQURgLCBhbmQgdGhlbiB0aGUgJ2dpdCB1cGRhdGUtaW5kZXgnCittYWtlcyBzdXJlIHRvIG1hdGNoIHVwIGFsbCBpbmRleCBlbnRyaWVzIHdpdGggdGhlIGNoZWNrZWQtb3V0IGZpbGVzLgorSWYgdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnkgaGFkIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4gaXRzCit3b3JraW5nIHRyZWUsIGBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaGAgbm90aWNlcyB0aGVtIGFuZAordGVsbHMgeW91IHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgorCitUaGUgYWJvdmUgY2FuIGFsc28gYmUgd3JpdHRlbiBhcyBzaW1wbHkKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQKKy0tLS0tLS0tLS0tLS0tLS0KKworYW5kIGluIGZhY3QgYSBsb3Qgb2YgdGhlIGNvbW1vbiBHaXQgY29tbWFuZCBjb21iaW5hdGlvbnMgY2FuIGJlIHNjcmlwdGVkCit3aXRoIHRoZSBgZ2l0IHh5emAgaW50ZXJmYWNlcy4gIFlvdSBjYW4gbGVhcm4gdGhpbmdzIGJ5IGp1c3QgbG9va2luZworYXQgd2hhdCB0aGUgdmFyaW91cyBnaXQgc2NyaXB0cyBkby4gIEZvciBleGFtcGxlLCBgZ2l0IHJlc2V0YCB1c2VkIHRvIGJlCit0aGUgYWJvdmUgdHdvIGxpbmVzIGltcGxlbWVudGVkIGluICdnaXQgcmVzZXQnLCBidXQgc29tZSB0aGluZ3MgbGlrZQorJ2dpdCBzdGF0dXMnIGFuZCAnZ2l0IGNvbW1pdCcgYXJlIHNsaWdodGx5IG1vcmUgY29tcGxleCBzY3JpcHRzIGFyb3VuZAordGhlIGJhc2ljIEdpdCBjb21tYW5kcy4KKworTWFueSAobW9zdD8pIHB1YmxpYyByZW1vdGUgcmVwb3NpdG9yaWVzIHdpbGwgbm90IGNvbnRhaW4gYW55IG9mCit0aGUgY2hlY2tlZCBvdXQgZmlsZXMgb3IgZXZlbiBhbiBpbmRleCBmaWxlLCBhbmQgd2lsbCAqb25seSogY29udGFpbiB0aGUKK2FjdHVhbCBjb3JlIEdpdCBmaWxlcy4gU3VjaCBhIHJlcG9zaXRvcnkgdXN1YWxseSBkb2Vzbid0IGV2ZW4gaGF2ZSB0aGUKK2AuZ2l0YCBzdWJkaXJlY3RvcnksIGJ1dCBoYXMgYWxsIHRoZSBHaXQgZmlsZXMgZGlyZWN0bHkgaW4gdGhlCityZXBvc2l0b3J5LgorCitUbyBjcmVhdGUgeW91ciBvd24gbG9jYWwgbGl2ZSBjb3B5IG9mIHN1Y2ggYSAicmF3IiBHaXQgcmVwb3NpdG9yeSwgeW91J2QKK2ZpcnN0IGNyZWF0ZSB5b3VyIG93biBzdWJkaXJlY3RvcnkgZm9yIHRoZSBwcm9qZWN0LCBhbmQgdGhlbiBjb3B5IHRoZQorcmF3IHJlcG9zaXRvcnkgY29udGVudHMgaW50byB0aGUgYC5naXRgIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUsIHRvCitjcmVhdGUgeW91ciBvd24gY29weSBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSdkIGRvIHRoZSBmb2xsb3dpbmcKKworLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciBteS1naXQKKyQgY2QgbXktZ2l0CiskIHJzeW5jIC1yTCByc3luYzovL3JzeW5jLmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdC8gLmdpdAorLS0tLS0tLS0tLS0tLS0tLQorCitmb2xsb3dlZCBieQorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgSEVBRAorLS0tLS0tLS0tLS0tLS0tLQorCit0byBwb3B1bGF0ZSB0aGUgaW5kZXguIEhvd2V2ZXIsIG5vdyB5b3UgaGF2ZSBwb3B1bGF0ZWQgdGhlIGluZGV4LCBhbmQKK3lvdSBoYXZlIGFsbCB0aGUgR2l0IGludGVybmFsIGZpbGVzLCBidXQgeW91IHdpbGwgbm90aWNlIHRoYXQgeW91IGRvbid0CithY3R1YWxseSBoYXZlIGFueSBvZiB0aGUgd29ya2luZyB0cmVlIGZpbGVzIHRvIHdvcmsgb24uIFRvIGdldAordGhvc2UsIHlvdSdkIGNoZWNrIHRoZW0gb3V0IHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWEKKy0tLS0tLS0tLS0tLS0tLS0KKword2hlcmUgdGhlIGAtdWAgZmxhZyBtZWFucyB0aGF0IHlvdSB3YW50IHRoZSBjaGVja291dCB0byBrZWVwIHRoZSBpbmRleAordXAgdG8gZGF0ZSAoc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byByZWZyZXNoIGl0IGFmdGVyd2FyZCksIGFuZCB0aGUKK2AtYWAgZmxhZyBtZWFucyAiY2hlY2sgb3V0IGFsbCBmaWxlcyIgKGlmIHlvdSBoYXZlIGEgc3RhbGUgY29weSBvciBhbgorb2xkZXIgdmVyc2lvbiBvZiBhIGNoZWNrZWQgb3V0IHRyZWUgeW91IG1heSBhbHNvIG5lZWQgdG8gYWRkIHRoZSBgLWZgCitmbGFnIGZpcnN0LCB0byB0ZWxsICdnaXQgY2hlY2tvdXQtaW5kZXgnIHRvICpmb3JjZSogb3ZlcndyaXRpbmcgb2YgYW55IG9sZAorZmlsZXMpLgorCitBZ2FpbiwgdGhpcyBjYW4gYWxsIGJlIHNpbXBsaWZpZWQgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LyBteS1naXQKKyQgY2QgbXktZ2l0CiskIGdpdCBjaGVja291dAorLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGVuZCB1cCBkb2luZyBhbGwgb2YgdGhlIGFib3ZlIGZvciB5b3UuCisKK1lvdSBoYXZlIG5vdyBzdWNjZXNzZnVsbHkgY29waWVkIHNvbWVib2R5IGVsc2UncyAobWluZSkgcmVtb3RlCityZXBvc2l0b3J5LCBhbmQgY2hlY2tlZCBpdCBvdXQuCisKKworQ3JlYXRpbmcgYSBuZXcgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnJhbmNoZXMgaW4gR2l0IGFyZSByZWFsbHkgbm90aGluZyBtb3JlIHRoYW4gcG9pbnRlcnMgaW50byB0aGUgR2l0CitvYmplY3QgZGF0YWJhc2UgZnJvbSB3aXRoaW4gdGhlIGAuZ2l0L3JlZnMvYCBzdWJkaXJlY3RvcnksIGFuZCBhcyB3ZQorYWxyZWFkeSBkaXNjdXNzZWQsIHRoZSBgSEVBRGAgYnJhbmNoIGlzIG5vdGhpbmcgYnV0IGEgc3ltbGluayB0byBvbmUgb2YKK3RoZXNlIG9iamVjdCBwb2ludGVycy4KKworWW91IGNhbiBhdCBhbnkgdGltZSBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IGp1c3QgcGlja2luZyBhbiBhcmJpdHJhcnkKK3BvaW50IGluIHRoZSBwcm9qZWN0IGhpc3RvcnksIGFuZCBqdXN0IHdyaXRpbmcgdGhlIFNIQS0xIG5hbWUgb2YgdGhhdAorb2JqZWN0IGludG8gYSBmaWxlIHVuZGVyIGAuZ2l0L3JlZnMvaGVhZHMvYC4gWW91IGNhbiB1c2UgYW55IGZpbGVuYW1lIHlvdQord2FudCAoYW5kIGluZGVlZCwgc3ViZGlyZWN0b3JpZXMpLCBidXQgdGhlIGNvbnZlbnRpb24gaXMgdGhhdCB0aGUKKyJub3JtYWwiIGJyYW5jaCBpcyBjYWxsZWQgYG1hc3RlcmAuIFRoYXQncyBqdXN0IGEgY29udmVudGlvbiwgdGhvdWdoLAorYW5kIG5vdGhpbmcgZW5mb3JjZXMgaXQuCisKK1RvIHNob3cgdGhhdCBhcyBhbiBleGFtcGxlLCBsZXQncyBnbyBiYWNrIHRvIHRoZSBnaXQtdHV0b3JpYWwgcmVwb3NpdG9yeSB3ZQordXNlZCBlYXJsaWVyLCBhbmQgY3JlYXRlIGEgYnJhbmNoIGluIGl0LiBZb3UgZG8gdGhhdCBieSBzaW1wbHkganVzdAorc2F5aW5nIHRoYXQgeW91IHdhbnQgdG8gY2hlY2sgb3V0IGEgbmV3IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLWMgbXlicmFuY2gKKy0tLS0tLS0tLS0tLQorCit3aWxsIGNyZWF0ZSBhIG5ldyBicmFuY2ggYmFzZWQgYXQgdGhlIGN1cnJlbnQgYEhFQURgIHBvc2l0aW9uLCBhbmQgc3dpdGNoCit0byBpdC4KKworW05PVEVdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lmIHlvdSBtYWtlIHRoZSBkZWNpc2lvbiB0byBzdGFydCB5b3VyIG5ldyBicmFuY2ggYXQgc29tZQorb3RoZXIgcG9pbnQgaW4gdGhlIGhpc3RvcnkgdGhhbiB0aGUgY3VycmVudCBgSEVBRGAsIHlvdSBjYW4gZG8gc28gYnkKK2p1c3QgdGVsbGluZyAnZ2l0IHN3aXRjaCcgd2hhdCB0aGUgYmFzZSBvZiB0aGUgY2hlY2tvdXQgd291bGQgYmUuCitJbiBvdGhlciB3b3JkcywgaWYgeW91IGhhdmUgYW4gZWFybGllciB0YWcgb3IgYnJhbmNoLCB5b3UnZCBqdXN0IGRvCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIG15YnJhbmNoIGVhcmxpZXItY29tbWl0CistLS0tLS0tLS0tLS0KKworYW5kIGl0IHdvdWxkIGNyZWF0ZSB0aGUgbmV3IGJyYW5jaCBgbXlicmFuY2hgIGF0IHRoZSBlYXJsaWVyIGNvbW1pdCwKK2FuZCBjaGVjayBvdXQgdGhlIHN0YXRlIGF0IHRoYXQgdGltZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIGFsd2F5cyBqdXN0IGp1bXAgYmFjayB0byB5b3VyIG9yaWdpbmFsIGBtYXN0ZXJgIGJyYW5jaCBieSBkb2luZworCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN3aXRjaCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCisob3IgYW55IG90aGVyIGJyYW5jaC1uYW1lLCBmb3IgdGhhdCBtYXR0ZXIpIGFuZCBpZiB5b3UgZm9yZ2V0IHdoaWNoCiticmFuY2ggeW91IGhhcHBlbiB0byBiZSBvbiwgYSBzaW1wbGUKKworLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L0hFQUQKKy0tLS0tLS0tLS0tLQorCit3aWxsIHRlbGwgeW91IHdoZXJlIGl0J3MgcG9pbnRpbmcuICBUbyBnZXQgdGhlIGxpc3Qgb2YgYnJhbmNoZXMKK3lvdSBoYXZlLCB5b3UgY2FuIHNheQorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAorLS0tLS0tLS0tLS0tCisKK3doaWNoIHVzZWQgdG8gYmUgbm90aGluZyBtb3JlIHRoYW4gYSBzaW1wbGUgc2NyaXB0IGFyb3VuZCBgbHMgLmdpdC9yZWZzL2hlYWRzYC4KK1RoZXJlIHdpbGwgYmUgYW4gYXN0ZXJpc2sgaW4gZnJvbnQgb2YgdGhlIGJyYW5jaCB5b3UgYXJlIGN1cnJlbnRseSBvbi4KKworU29tZXRpbWVzIHlvdSBtYXkgd2lzaCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIF93aXRob3V0XyBhY3R1YWxseQorY2hlY2tpbmcgaXQgb3V0IGFuZCBzd2l0Y2hpbmcgdG8gaXQuIElmIHNvLCBqdXN0IHVzZSB0aGUgY29tbWFuZAorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCA8YnJhbmNobmFtZT4gW3N0YXJ0aW5ncG9pbnRdCistLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBzaW1wbHkgX2NyZWF0ZV8gdGhlIGJyYW5jaCwgYnV0IHdpbGwgbm90IGRvIGFueXRoaW5nIGZ1cnRoZXIuCitZb3UgY2FuIHRoZW4gbGF0ZXIgLS0gb25jZSB5b3UgZGVjaWRlIHRoYXQgeW91IHdhbnQgdG8gYWN0dWFsbHkgZGV2ZWxvcAorb24gdGhhdCBicmFuY2ggLS0gc3dpdGNoIHRvIHRoYXQgYnJhbmNoIHdpdGggYSByZWd1bGFyICdnaXQgc3dpdGNoJword2l0aCB0aGUgYnJhbmNobmFtZSBhcyB0aGUgYXJndW1lbnQuCisKKworTWVyZ2luZyB0d28gYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uZSBvZiB0aGUgaWRlYXMgb2YgaGF2aW5nIGEgYnJhbmNoIGlzIHRoYXQgeW91IGRvIHNvbWUgKHBvc3NpYmx5CitleHBlcmltZW50YWwpIHdvcmsgaW4gaXQsIGFuZCBldmVudHVhbGx5IG1lcmdlIGl0IGJhY2sgdG8gdGhlIG1haW4KK2JyYW5jaC4gU28gYXNzdW1pbmcgeW91IGNyZWF0ZWQgdGhlIGFib3ZlIGBteWJyYW5jaGAgdGhhdCBzdGFydGVkIG91dAorYmVpbmcgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGBtYXN0ZXJgIGJyYW5jaCwgbGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGluCit0aGF0IGJyYW5jaCwgYW5kIGRvIHNvbWUgd29yayB0aGVyZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbXlicmFuY2gKKyQgZWNobyAiV29yaywgd29yaywgd29yayIgPj5oZWxsbworJCBnaXQgY29tbWl0IC1tICJTb21lIHdvcmsuIiAtaSBoZWxsbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUsIHdlIGp1c3QgYWRkZWQgYW5vdGhlciBsaW5lIHRvIGBoZWxsb2AsIGFuZCB3ZSB1c2VkIGEgc2hvcnRoYW5kIGZvcgorZG9pbmcgYm90aCBgZ2l0IHVwZGF0ZS1pbmRleCBoZWxsb2AgYW5kIGBnaXQgY29tbWl0YCBieSBqdXN0IGdpdmluZyB0aGUKK2ZpbGVuYW1lIGRpcmVjdGx5IHRvIGBnaXQgY29tbWl0YCwgd2l0aCBhbiBgLWlgIGZsYWcgKGl0IHRlbGxzCitHaXQgdG8gJ2luY2x1ZGUnIHRoYXQgZmlsZSBpbiBhZGRpdGlvbiB0byB3aGF0IHlvdSBoYXZlIGRvbmUgdG8KK3RoZSBpbmRleCBmaWxlIHNvIGZhciB3aGVuIG1ha2luZyB0aGUgY29tbWl0KS4gIFRoZSBgLW1gIGZsYWcgaXMgdG8gZ2l2ZSB0aGUKK2NvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKK05vdywgdG8gbWFrZSBpdCBhIGJpdCBtb3JlIGludGVyZXN0aW5nLCBsZXQncyBhc3N1bWUgdGhhdCBzb21lYm9keSBlbHNlCitkb2VzIHNvbWUgd29yayBpbiB0aGUgb3JpZ2luYWwgYnJhbmNoLCBhbmQgc2ltdWxhdGUgdGhhdCBieSBnb2luZyBiYWNrCit0byB0aGUgbWFzdGVyIGJyYW5jaCwgYW5kIGVkaXRpbmcgdGhlIHNhbWUgZmlsZSBkaWZmZXJlbnRseSB0aGVyZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbWFzdGVyCistLS0tLS0tLS0tLS0KKworSGVyZSwgdGFrZSBhIG1vbWVudCB0byBsb29rIGF0IHRoZSBjb250ZW50cyBvZiBgaGVsbG9gLCBhbmQgbm90aWNlIGhvdyB0aGV5Citkb24ndCBjb250YWluIHRoZSB3b3JrIHdlIGp1c3QgZGlkIGluIGBteWJyYW5jaGAgLS0gYmVjYXVzZSB0aGF0IHdvcmsKK2hhc24ndCBoYXBwZW5lZCBpbiB0aGUgYG1hc3RlcmAgYnJhbmNoIGF0IGFsbC4gVGhlbiBkbworCistLS0tLS0tLS0tLS0KKyQgZWNobyAiUGxheSwgcGxheSwgcGxheSIgPj5oZWxsbworJCBlY2hvICJMb3RzIG9mIGZ1biIgPj5leGFtcGxlCiskIGdpdCBjb21taXQgLW0gIlNvbWUgZnVuLiIgLWkgaGVsbG8gZXhhbXBsZQorLS0tLS0tLS0tLS0tCisKK3NpbmNlIHRoZSBtYXN0ZXIgYnJhbmNoIGlzIG9idmlvdXNseSBpbiBhIG11Y2ggYmV0dGVyIG1vb2QuCisKK05vdywgeW91J3ZlIGdvdCB0d28gYnJhbmNoZXMsIGFuZCB5b3UgZGVjaWRlIHRoYXQgeW91IHdhbnQgdG8gbWVyZ2UgdGhlCit3b3JrIGRvbmUuIEJlZm9yZSB3ZSBkbyB0aGF0LCBsZXQncyBpbnRyb2R1Y2UgYSBjb29sIGdyYXBoaWNhbCB0b29sIHRoYXQKK2hlbHBzIHlvdSB2aWV3IHdoYXQncyBnb2luZyBvbjoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIC0tYWxsCistLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgc2hvdyB5b3UgZ3JhcGhpY2FsbHkgYm90aCBvZiB5b3VyIGJyYW5jaGVzICh0aGF0J3Mgd2hhdCB0aGUgYC0tYWxsYAorbWVhbnM6IG5vcm1hbGx5IGl0IHdpbGwganVzdCBzaG93IHlvdSB5b3VyIGN1cnJlbnQgYEhFQURgKSBhbmQgdGhlaXIKK2hpc3Rvcmllcy4gWW91IGNhbiBhbHNvIHNlZSBleGFjdGx5IGhvdyB0aGV5IGNhbWUgdG8gYmUgZnJvbSBhIGNvbW1vbgorc291cmNlLgorCitBbnl3YXksIGxldCdzIGV4aXQgJ2dpdGsnIChgXlFgIG9yIHRoZSBGaWxlIG1lbnUpLCBhbmQgZGVjaWRlIHRoYXQgd2Ugd2FudAordG8gbWVyZ2UgdGhlIHdvcmsgd2UgZGlkIG9uIHRoZSBgbXlicmFuY2hgIGJyYW5jaCBpbnRvIHRoZSBgbWFzdGVyYAorYnJhbmNoICh3aGljaCBpcyBjdXJyZW50bHkgb3VyIGBIRUFEYCB0b28pLiBUbyBkbyB0aGF0LCB0aGVyZSdzIGEgbmljZQorc2NyaXB0IGNhbGxlZCAnZ2l0IG1lcmdlJywgd2hpY2ggd2FudHMgdG8ga25vdyB3aGljaCBicmFuY2hlcyB5b3Ugd2FudAordG8gcmVzb2x2ZSBhbmQgd2hhdCB0aGUgbWVyZ2UgaXMgYWxsIGFib3V0OgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIC1tICJNZXJnZSB3b3JrIGluIG15YnJhbmNoIiBteWJyYW5jaAorLS0tLS0tLS0tLS0tCisKK3doZXJlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBnb2luZyB0byBiZSB1c2VkIGFzIHRoZSBjb21taXQgbWVzc2FnZSBpZgordGhlIG1lcmdlIGNhbiBiZSByZXNvbHZlZCBhdXRvbWF0aWNhbGx5LgorCitOb3csIGluIHRoaXMgY2FzZSB3ZSd2ZSBpbnRlbnRpb25hbGx5IGNyZWF0ZWQgYSBzaXR1YXRpb24gd2hlcmUgdGhlCittZXJnZSB3aWxsIG5lZWQgdG8gYmUgZml4ZWQgdXAgYnkgaGFuZCwgdGhvdWdoLCBzbyBHaXQgd2lsbCBkbyBhcyBtdWNoCitvZiBpdCBhcyBpdCBjYW4gYXV0b21hdGljYWxseSAod2hpY2ggaW4gdGhpcyBjYXNlIGlzIGp1c3QgbWVyZ2UgdGhlIGBleGFtcGxlYAorZmlsZSwgd2hpY2ggaGFkIG5vIGRpZmZlcmVuY2VzIGluIHRoZSBgbXlicmFuY2hgIGJyYW5jaCksIGFuZCBzYXk6CisKKy0tLS0tLS0tLS0tLS0tLS0KKwlBdXRvLW1lcmdpbmcgaGVsbG8KKwlDT05GTElDVCAoY29udGVudCk6IE1lcmdlIGNvbmZsaWN0IGluIGhlbGxvCisJQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC4KKy0tLS0tLS0tLS0tLS0tLS0KKworSXQgdGVsbHMgeW91IHRoYXQgaXQgZGlkIGFuICJBdXRvbWF0aWMgbWVyZ2UiLCB3aGljaAorZmFpbGVkIGR1ZSB0byBjb25mbGljdHMgaW4gYGhlbGxvYC4KKworTm90IHRvIHdvcnJ5LiBJdCBsZWZ0IHRoZSAodHJpdmlhbCkgY29uZmxpY3QgaW4gYGhlbGxvYCBpbiB0aGUgc2FtZSBmb3JtIHlvdQorc2hvdWxkIGFscmVhZHkgYmUgd2VsbCB1c2VkIHRvIGlmIHlvdSd2ZSBldmVyIHVzZWQgQ1ZTLCBzbyBsZXQncyBqdXN0CitvcGVuIGBoZWxsb2AgaW4gb3VyIGVkaXRvciAod2hhdGV2ZXIgdGhhdCBtYXkgYmUpLCBhbmQgZml4IGl0IHVwIHNvbWVob3cuCitJJ2Qgc3VnZ2VzdCBqdXN0IG1ha2luZyBpdCBzbyB0aGF0IGBoZWxsb2AgY29udGFpbnMgYWxsIGZvdXIgbGluZXM6CisKKy0tLS0tLS0tLS0tLQorSGVsbG8gV29ybGQKK0l0J3MgYSBuZXcgZGF5IGZvciBnaXQKK1BsYXksIHBsYXksIHBsYXkKK1dvcmssIHdvcmssIHdvcmsKKy0tLS0tLS0tLS0tLQorCithbmQgb25jZSB5b3UncmUgaGFwcHkgd2l0aCB5b3VyIG1hbnVhbCBtZXJnZSwganVzdCBkbyBhCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1pIGhlbGxvCistLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCB2ZXJ5IGxvdWRseSB3YXJuIHlvdSB0aGF0IHlvdSdyZSBub3cgY29tbWl0dGluZyBhIG1lcmdlCisod2hpY2ggaXMgY29ycmVjdCwgc28gbmV2ZXIgbWluZCksIGFuZCB5b3UgY2FuIHdyaXRlIGEgc21hbGwgbWVyZ2UKK21lc3NhZ2UgYWJvdXQgeW91ciBhZHZlbnR1cmVzIGluICdnaXQgbWVyZ2UnLWxhbmQuCisKK0FmdGVyIHlvdSdyZSBkb25lLCBzdGFydCB1cCBgZ2l0ayAtLWFsbGAgdG8gc2VlIGdyYXBoaWNhbGx5IHdoYXQgdGhlCitoaXN0b3J5IGxvb2tzIGxpa2UuIE5vdGljZSB0aGF0IGBteWJyYW5jaGAgc3RpbGwgZXhpc3RzLCBhbmQgeW91IGNhbgorc3dpdGNoIHRvIGl0LCBhbmQgY29udGludWUgdG8gd29yayB3aXRoIGl0IGlmIHlvdSB3YW50IHRvLiBUaGUKK2BteWJyYW5jaGAgYnJhbmNoIHdpbGwgbm90IGNvbnRhaW4gdGhlIG1lcmdlLCBidXQgbmV4dCB0aW1lIHlvdSBtZXJnZSBpdAorZnJvbSB0aGUgYG1hc3RlcmAgYnJhbmNoLCBHaXQgd2lsbCBrbm93IGhvdyB5b3UgbWVyZ2VkIGl0LCBzbyB5b3UnbGwgbm90CitoYXZlIHRvIGRvIF90aGF0XyBtZXJnZSBhZ2Fpbi4KKworQW5vdGhlciB1c2VmdWwgdG9vbCwgZXNwZWNpYWxseSBpZiB5b3UgZG8gbm90IGFsd2F5cyB3b3JrIGluIFgtV2luZG93CitlbnZpcm9ubWVudCwgaXMgYGdpdCBzaG93LWJyYW5jaGAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2ggLS10b3BvLW9yZGVyIC0tbW9yZT0xIG1hc3RlciBteWJyYW5jaAorKiBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCisgISBbbXlicmFuY2hdIFNvbWUgd29yay4KKy0tCistICBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCisqKyBbbXlicmFuY2hdIFNvbWUgd29yay4KKyogIFttYXN0ZXJeXSBTb21lIGZ1bi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3QgdHdvIGxpbmVzIGluZGljYXRlIHRoYXQgaXQgaXMgc2hvd2luZyB0aGUgdHdvIGJyYW5jaGVzCit3aXRoIHRoZSB0aXRsZXMgb2YgdGhlaXIgdG9wLW9mLXRoZS10cmVlIGNvbW1pdHMsIHlvdSBhcmUgY3VycmVudGx5IG9uCitgbWFzdGVyYCBicmFuY2ggKG5vdGljZSB0aGUgYXN0ZXJpc2sgYCpgIGNoYXJhY3RlciksIGFuZCB0aGUgZmlyc3QKK2NvbHVtbiBmb3IgdGhlIGxhdGVyIG91dHB1dCBsaW5lcyBpcyB1c2VkIHRvIHNob3cgY29tbWl0cyBjb250YWluZWQgaW4gdGhlCitgbWFzdGVyYCBicmFuY2gsIGFuZCB0aGUgc2Vjb25kIGNvbHVtbiBmb3IgdGhlIGBteWJyYW5jaGAKK2JyYW5jaC4gVGhyZWUgY29tbWl0cyBhcmUgc2hvd24gYWxvbmcgd2l0aCB0aGVpciB0aXRsZXMuCitBbGwgb2YgdGhlbSBoYXZlIG5vbiBibGFuayBjaGFyYWN0ZXJzIGluIHRoZSBmaXJzdCBjb2x1bW4gKGAqYAorc2hvd3MgYW4gb3JkaW5hcnkgY29tbWl0IG9uIHRoZSBjdXJyZW50IGJyYW5jaCwgYC1gIGlzIGEgbWVyZ2UgY29tbWl0KSwgd2hpY2gKK21lYW5zIHRoZXkgYXJlIG5vdyBwYXJ0IG9mIHRoZSBgbWFzdGVyYCBicmFuY2guIE9ubHkgdGhlICJTb21lCit3b3JrIiBjb21taXQgaGFzIHRoZSBwbHVzIGArYCBjaGFyYWN0ZXIgaW4gdGhlIHNlY29uZCBjb2x1bW4sCitiZWNhdXNlIGBteWJyYW5jaGAgaGFzIG5vdCBiZWVuIG1lcmdlZCB0byBpbmNvcnBvcmF0ZSB0aGVzZQorY29tbWl0cyBmcm9tIHRoZSBtYXN0ZXIgYnJhbmNoLiAgVGhlIHN0cmluZyBpbnNpZGUgYnJhY2tldHMKK2JlZm9yZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGlzIGEgc2hvcnQgbmFtZSB5b3UgY2FuIHVzZSB0bworbmFtZSB0aGUgY29tbWl0LiAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsICdtYXN0ZXInIGFuZCAnbXlicmFuY2gnCithcmUgYnJhbmNoIGhlYWRzLiAgJ21hc3Rlcl4nIGlzIHRoZSBmaXJzdCBwYXJlbnQgb2YgJ21hc3RlcicKK2JyYW5jaCBoZWFkLiAgUGxlYXNlIHNlZSBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSBpZiB5b3Ugd2FudCB0bworc2VlIG1vcmUgY29tcGxleCBjYXNlcy4KKworW05PVEVdCitXaXRob3V0IHRoZSAnLS1tb3JlPTEnIG9wdGlvbiwgJ2dpdCBzaG93LWJyYW5jaCcgd291bGQgbm90IG91dHB1dCB0aGUKKydbbWFzdGVyXl0nIGNvbW1pdCwgYXMgJ1tteWJyYW5jaF0nIGNvbW1pdCBpcyBhIGNvbW1vbiBhbmNlc3RvciBvZgorYm90aCAnbWFzdGVyJyBhbmQgJ215YnJhbmNoJyB0aXBzLiAgUGxlYXNlIHNlZSBsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXQorZm9yIGRldGFpbHMuCisKK1tOT1RFXQorSWYgdGhlcmUgd2VyZSBtb3JlIGNvbW1pdHMgb24gdGhlICdtYXN0ZXInIGJyYW5jaCBhZnRlciB0aGUgbWVyZ2UsIHRoZQorbWVyZ2UgY29tbWl0IGl0c2VsZiB3b3VsZCBub3QgYmUgc2hvd24gYnkgJ2dpdCBzaG93LWJyYW5jaCcgYnkKK2RlZmF1bHQuICBZb3Ugd291bGQgbmVlZCB0byBwcm92aWRlIGAtLXNwYXJzZWAgb3B0aW9uIHRvIG1ha2UgdGhlCittZXJnZSBjb21taXQgdmlzaWJsZSBpbiB0aGlzIGNhc2UuCisKK05vdywgbGV0J3MgcHJldGVuZCB5b3UgYXJlIHRoZSBvbmUgd2hvIGRpZCBhbGwgdGhlIHdvcmsgaW4KK2BteWJyYW5jaGAsIGFuZCB0aGUgZnJ1aXQgb2YgeW91ciBoYXJkIHdvcmsgaGFzIGZpbmFsbHkgYmVlbiBtZXJnZWQKK3RvIHRoZSBgbWFzdGVyYCBicmFuY2guIExldCdzIGdvIGJhY2sgdG8gYG15YnJhbmNoYCwgYW5kIHJ1bgorJ2dpdCBtZXJnZScgdG8gZ2V0IHRoZSAidXBzdHJlYW0gY2hhbmdlcyIgYmFjayB0byB5b3VyIGJyYW5jaC4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggbXlicmFuY2gKKyQgZ2l0IG1lcmdlIC1tICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIgbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhpcyBvdXRwdXRzIHNvbWV0aGluZyBsaWtlIHRoaXMgKHRoZSBhY3R1YWwgY29tbWl0IG9iamVjdCBuYW1lcword291bGQgYmUgZGlmZmVyZW50KQorCistLS0tLS0tLS0tLS0tLS0tCitVcGRhdGluZyBmcm9tIGFlM2EyZGEuLi4gdG8gYTgwYjRhYS4uLi4KK0Zhc3QtZm9yd2FyZCAobm8gY29tbWl0IGNyZWF0ZWQ7IC1tIG9wdGlvbiBpZ25vcmVkKQorIGV4YW1wbGUgfCAxICsKKyBoZWxsbyAgIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKy0tLS0tLS0tLS0tLS0tLS0KKworQmVjYXVzZSB5b3VyIGJyYW5jaCBkaWQgbm90IGNvbnRhaW4gYW55dGhpbmcgbW9yZSB0aGFuIHdoYXQgaGFkCithbHJlYWR5IGJlZW4gbWVyZ2VkIGludG8gdGhlIGBtYXN0ZXJgIGJyYW5jaCwgdGhlIG1lcmdlIG9wZXJhdGlvbiBkaWQKK25vdCBhY3R1YWxseSBkbyBhIG1lcmdlLiBJbnN0ZWFkLCBpdCBqdXN0IHVwZGF0ZWQgdGhlIHRvcCBvZgordGhlIHRyZWUgb2YgeW91ciBicmFuY2ggdG8gdGhhdCBvZiB0aGUgYG1hc3RlcmAgYnJhbmNoLiBUaGlzIGlzCitvZnRlbiBjYWxsZWQgJ2Zhc3QtZm9yd2FyZCcgbWVyZ2UuCisKK1lvdSBjYW4gcnVuIGBnaXRrIC0tYWxsYCBhZ2FpbiB0byBzZWUgaG93IHRoZSBjb21taXQgYW5jZXN0cnkKK2xvb2tzIGxpa2UsIG9yIHJ1biAnc2hvdy1icmFuY2gnLCB3aGljaCB0ZWxscyB5b3UgdGhpcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCBtYXN0ZXIgbXlicmFuY2gKKyEgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICogW215YnJhbmNoXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCistLQorLS0gW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTWVyZ2luZyBleHRlcm5hbCB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQncyB1c3VhbGx5IG11Y2ggbW9yZSBjb21tb24gdGhhdCB5b3UgbWVyZ2Ugd2l0aCBzb21lYm9keSBlbHNlIHRoYW4KK21lcmdpbmcgd2l0aCB5b3VyIG93biBicmFuY2hlcywgc28gaXQncyB3b3J0aCBwb2ludGluZyBvdXQgdGhhdCBHaXQKK21ha2VzIHRoYXQgdmVyeSBlYXN5IHRvbywgYW5kIGluIGZhY3QsIGl0J3Mgbm90IHRoYXQgZGlmZmVyZW50IGZyb20KK2RvaW5nIGEgJ2dpdCBtZXJnZScuIEluIGZhY3QsIGEgcmVtb3RlIG1lcmdlIGVuZHMgdXAgYmVpbmcgbm90aGluZworbW9yZSB0aGFuICJmZXRjaCB0aGUgd29yayBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgaW50byBhIHRlbXBvcmFyeSB0YWciCitmb2xsb3dlZCBieSBhICdnaXQgbWVyZ2UnLgorCitGZXRjaGluZyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgaXMgZG9uZSBieSwgdW5zdXJwcmlzaW5nbHksCisnZ2l0IGZldGNoJzoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggPHJlbW90ZS1yZXBvc2l0b3J5PgorLS0tLS0tLS0tLS0tLS0tLQorCitPbmUgb2YgdGhlIGZvbGxvd2luZyB0cmFuc3BvcnRzIGNhbiBiZSB1c2VkIHRvIG5hbWUgdGhlCityZXBvc2l0b3J5IHRvIGRvd25sb2FkIGZyb206CisKK1NTSDo6CisJYHJlbW90ZS5tYWNoaW5lOi9wYXRoL3RvL3JlcG8uZ2l0L2Agb3IKKysKK2Bzc2g6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1RoaXMgdHJhbnNwb3J0IGNhbiBiZSB1c2VkIGZvciBib3RoIHVwbG9hZGluZyBhbmQgZG93bmxvYWRpbmcsCithbmQgcmVxdWlyZXMgeW91IHRvIGhhdmUgYSBsb2ctaW4gcHJpdmlsZWdlIG92ZXIgYHNzaGAgdG8gdGhlCityZW1vdGUgbWFjaGluZS4gIEl0IGZpbmRzIG91dCB0aGUgc2V0IG9mIG9iamVjdHMgdGhlIG90aGVyIHNpZGUKK2xhY2tzIGJ5IGV4Y2hhbmdpbmcgdGhlIGhlYWQgY29tbWl0cyBib3RoIGVuZHMgaGF2ZSBhbmQKK3RyYW5zZmVycyAoY2xvc2UgdG8pIG1pbmltdW0gc2V0IG9mIG9iamVjdHMuICBJdCBpcyBieSBmYXIgdGhlCittb3N0IGVmZmljaWVudCB3YXkgdG8gZXhjaGFuZ2UgR2l0IG9iamVjdHMgYmV0d2VlbiByZXBvc2l0b3JpZXMuCisKK0xvY2FsIGRpcmVjdG9yeTo6CisJYC9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1RoaXMgdHJhbnNwb3J0IGlzIHRoZSBzYW1lIGFzIFNTSCB0cmFuc3BvcnQgYnV0IHVzZXMgJ3NoJyB0byBydW4KK2JvdGggZW5kcyBvbiB0aGUgbG9jYWwgbWFjaGluZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgb3RoZXIgZW5kIG9uCit0aGUgcmVtb3RlIG1hY2hpbmUgdmlhICdzc2gnLgorCitHaXQgTmF0aXZlOjoKKwlgZ2l0Oi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC9gCisrCitUaGlzIHRyYW5zcG9ydCB3YXMgZGVzaWduZWQgZm9yIGFub255bW91cyBkb3dubG9hZGluZy4gIExpa2UgU1NICit0cmFuc3BvcnQsIGl0IGZpbmRzIG91dCB0aGUgc2V0IG9mIG9iamVjdHMgdGhlIGRvd25zdHJlYW0gc2lkZQorbGFja3MgYW5kIHRyYW5zZmVycyAoY2xvc2UgdG8pIG1pbmltdW0gc2V0IG9mIG9iamVjdHMuCisKK0hUVFAoUyk6OgorCWBodHRwOi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC9gCisrCitEb3dubG9hZGVyIGZyb20gaHR0cCBhbmQgaHR0cHMgVVJMCitmaXJzdCBvYnRhaW5zIHRoZSB0b3Btb3N0IGNvbW1pdCBvYmplY3QgbmFtZSBmcm9tIHRoZSByZW1vdGUgc2l0ZQorYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWVkIHJlZm5hbWUgdW5kZXIgYHJlcG8uZ2l0L3JlZnMvYCBkaXJlY3RvcnksCithbmQgdGhlbiB0cmllcyB0byBvYnRhaW4gdGhlCitjb21taXQgb2JqZWN0IGJ5IGRvd25sb2FkaW5nIGZyb20gYHJlcG8uZ2l0L29iamVjdHMveHgveHh4Li4uYAordXNpbmcgdGhlIG9iamVjdCBuYW1lIG9mIHRoYXQgY29tbWl0IG9iamVjdC4gIFRoZW4gaXQgcmVhZHMgdGhlCitjb21taXQgb2JqZWN0IHRvIGZpbmQgb3V0IGl0cyBwYXJlbnQgY29tbWl0cyBhbmQgdGhlIGFzc29jaWF0ZQordHJlZSBvYmplY3Q7IGl0IHJlcGVhdHMgdGhpcyBwcm9jZXNzIHVudGlsIGl0IGdldHMgYWxsIHRoZQorbmVjZXNzYXJ5IG9iamVjdHMuICBCZWNhdXNlIG9mIHRoaXMgYmVoYXZpb3IsIHRoZXkgYXJlCitzb21ldGltZXMgYWxzbyBjYWxsZWQgJ2NvbW1pdCB3YWxrZXJzJy4KKysKK1RoZSAnY29tbWl0IHdhbGtlcnMnIGFyZSBzb21ldGltZXMgYWxzbyBjYWxsZWQgJ2R1bWIKK3RyYW5zcG9ydHMnLCBiZWNhdXNlIHRoZXkgZG8gbm90IHJlcXVpcmUgYW55IEdpdCBhd2FyZSBzbWFydAorc2VydmVyIGxpa2UgR2l0IE5hdGl2ZSB0cmFuc3BvcnQgZG9lcy4gIEFueSBzdG9jayBIVFRQIHNlcnZlcgordGhhdCBkb2VzIG5vdCBldmVuIHN1cHBvcnQgZGlyZWN0b3J5IGluZGV4IHdvdWxkIHN1ZmZpY2UuICBCdXQKK3lvdSBtdXN0IHByZXBhcmUgeW91ciByZXBvc2l0b3J5IHdpdGggJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nCit0byBoZWxwIGR1bWIgdHJhbnNwb3J0IGRvd25sb2FkZXJzLgorCitPbmNlIHlvdSBmZXRjaCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwgeW91IGBtZXJnZWAgdGhhdAord2l0aCB5b3VyIGN1cnJlbnQgYnJhbmNoLgorCitIb3dldmVyIC0tIGl0J3Mgc3VjaCBhIGNvbW1vbiB0aGluZyB0byBgZmV0Y2hgIGFuZCB0aGVuCitpbW1lZGlhdGVseSBgbWVyZ2VgLCB0aGF0IGl0J3MgY2FsbGVkIGBnaXQgcHVsbGAsIGFuZCB5b3UgY2FuCitzaW1wbHkgZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCA8cmVtb3RlLXJlcG9zaXRvcnk+CistLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBvcHRpb25hbGx5IGdpdmUgYSBicmFuY2gtbmFtZSBmb3IgdGhlIHJlbW90ZSBlbmQgYXMgYSBzZWNvbmQKK2FyZ3VtZW50LgorCitbTk9URV0KK1lvdSBjb3VsZCBkbyB3aXRob3V0IHVzaW5nIGFueSBicmFuY2hlcyBhdCBhbGwsIGJ5CitrZWVwaW5nIGFzIG1hbnkgbG9jYWwgcmVwb3NpdG9yaWVzIGFzIHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUKK2JyYW5jaGVzLCBhbmQgbWVyZ2luZyBiZXR3ZWVuIHRoZW0gd2l0aCAnZ2l0IHB1bGwnLCBqdXN0IGxpa2UKK3lvdSBtZXJnZSBiZXR3ZWVuIGJyYW5jaGVzLiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2ggaXMKK3RoYXQgaXQgbGV0cyB5b3Uga2VlcCBhIHNldCBvZiBmaWxlcyBmb3IgZWFjaCBgYnJhbmNoYCBjaGVja2VkCitvdXQgYW5kIHlvdSBtYXkgZmluZCBpdCBlYXNpZXIgdG8gc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGlmIHlvdQoranVnZ2xlIG11bHRpcGxlIGxpbmVzIG9mIGRldmVsb3BtZW50IHNpbXVsdGFuZW91c2x5LiBPZgorY291cnNlLCB5b3Ugd2lsbCBwYXkgdGhlIHByaWNlIG9mIG1vcmUgZGlzayB1c2FnZSB0byBob2xkCittdWx0aXBsZSB3b3JraW5nIHRyZWVzLCBidXQgZGlzayBzcGFjZSBpcyBjaGVhcCB0aGVzZSBkYXlzLgorCitJdCBpcyBsaWtlbHkgdGhhdCB5b3Ugd2lsbCBiZSBwdWxsaW5nIGZyb20gdGhlIHNhbWUgcmVtb3RlCityZXBvc2l0b3J5IGZyb20gdGltZSB0byB0aW1lLiBBcyBhIHNob3J0IGhhbmQsIHlvdSBjYW4gc3RvcmUKK3RoZSByZW1vdGUgcmVwb3NpdG9yeSBVUkwgaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkncyBjb25maWcgZmlsZQorbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyByZW1vdGUubGludXMudXJsIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB1c2UgdGhlICJsaW51cyIga2V5d29yZCB3aXRoICdnaXQgcHVsbCcgaW5zdGVhZCBvZiB0aGUgZnVsbCBVUkwuCisKK0V4YW1wbGVzLgorCisuIGBnaXQgcHVsbCBsaW51c2AKKy4gYGdpdCBwdWxsIGxpbnVzIHRhZyB2MC45OS4xYAorCit0aGUgYWJvdmUgYXJlIGVxdWl2YWxlbnQgdG86CisKKy4gYGdpdCBwdWxsIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LyBIRUFEYAorLiBgZ2l0IHB1bGwgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvIHRhZyB2MC45OS4xYAorCisKK0hvdyBkb2VzIHRoZSBtZXJnZSB3b3JrPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIHNhaWQgdGhpcyB0dXRvcmlhbCBzaG93cyB3aGF0IHBsdW1iaW5nIGRvZXMgdG8gaGVscCB5b3UgY29wZQord2l0aCB0aGUgcG9yY2VsYWluIHRoYXQgaXNuJ3QgZmx1c2hpbmcsIGJ1dCB3ZSBzbyBmYXIgZGlkIG5vdAordGFsayBhYm91dCBob3cgdGhlIG1lcmdlIHJlYWxseSB3b3Jrcy4gIElmIHlvdSBhcmUgZm9sbG93aW5nCit0aGlzIHR1dG9yaWFsIHRoZSBmaXJzdCB0aW1lLCBJJ2Qgc3VnZ2VzdCB0byBza2lwIHRvICJQdWJsaXNoaW5nCit5b3VyIHdvcmsiIHNlY3Rpb24gYW5kIGNvbWUgYmFjayBoZXJlIGxhdGVyLgorCitPSywgc3RpbGwgd2l0aCBtZT8gIFRvIGdpdmUgdXMgYW4gZXhhbXBsZSB0byBsb29rIGF0LCBsZXQncyBnbworYmFjayB0byB0aGUgZWFybGllciByZXBvc2l0b3J5IHdpdGggImhlbGxvIiBhbmQgImV4YW1wbGUiIGZpbGUsCithbmQgYnJpbmcgb3Vyc2VsdmVzIGJhY2sgdG8gdGhlIHByZS1tZXJnZSBzdGF0ZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLW1vcmU9MiBtYXN0ZXIgbXlicmFuY2gKKyEgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICogW215YnJhbmNoXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCistLQorLS0gW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorKyogW21hc3Rlcl4yXSBTb21lIHdvcmsuCisrKiBbbWFzdGVyXl0gU29tZSBmdW4uCistLS0tLS0tLS0tLS0KKworUmVtZW1iZXIsIGJlZm9yZSBydW5uaW5nICdnaXQgbWVyZ2UnLCBvdXIgYG1hc3RlcmAgaGVhZCB3YXMgYXQKKyJTb21lIGZ1bi4iIGNvbW1pdCwgd2hpbGUgb3VyIGBteWJyYW5jaGAgaGVhZCB3YXMgYXQgIlNvbWUKK3dvcmsuIiBjb21taXQuCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1DIG15YnJhbmNoIG1hc3Rlcl4yCiskIGdpdCBzd2l0Y2ggbWFzdGVyCiskIGdpdCByZXNldCAtLWhhcmQgbWFzdGVyXgorLS0tLS0tLS0tLS0tCisKK0FmdGVyIHJld2luZGluZywgdGhlIGNvbW1pdCBzdHJ1Y3R1cmUgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoCisqIFttYXN0ZXJdIFNvbWUgZnVuLgorICEgW215YnJhbmNoXSBTb21lIHdvcmsuCistLQorKiAgW21hc3Rlcl0gU29tZSBmdW4uCisgKyBbbXlicmFuY2hdIFNvbWUgd29yay4KKyorIFttYXN0ZXJeXSBJbml0aWFsIGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK05vdyB3ZSBhcmUgcmVhZHkgdG8gZXhwZXJpbWVudCB3aXRoIHRoZSBtZXJnZSBieSBoYW5kLgorCitgZ2l0IG1lcmdlYCBjb21tYW5kLCB3aGVuIG1lcmdpbmcgdHdvIGJyYW5jaGVzLCB1c2VzIDMtd2F5IG1lcmdlCithbGdvcml0aG0uICBGaXJzdCwgaXQgZmluZHMgdGhlIGNvbW1vbiBhbmNlc3RvciBiZXR3ZWVuIHRoZW0uCitUaGUgY29tbWFuZCBpdCB1c2VzIGlzICdnaXQgbWVyZ2UtYmFzZSc6CisKKy0tLS0tLS0tLS0tLQorJCBtYj0kKGdpdCBtZXJnZS1iYXNlIEhFQUQgbXlicmFuY2gpCistLS0tLS0tLS0tLS0KKworVGhlIGNvbW1hbmQgd3JpdGVzIHRoZSBjb21taXQgb2JqZWN0IG5hbWUgb2YgdGhlIGNvbW1vbiBhbmNlc3RvcgordG8gdGhlIHN0YW5kYXJkIG91dHB1dCwgc28gd2UgY2FwdHVyZWQgaXRzIG91dHB1dCB0byBhIHZhcmlhYmxlLAorYmVjYXVzZSB3ZSB3aWxsIGJlIHVzaW5nIGl0IGluIHRoZSBuZXh0IHN0ZXAuICBCeSB0aGUgd2F5LCB0aGUgY29tbW9uCithbmNlc3RvciBjb21taXQgaXMgdGhlICJJbml0aWFsIGNvbW1pdCIgY29tbWl0IGluIHRoaXMgY2FzZS4gIFlvdSBjYW4KK3RlbGwgaXQgYnk6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgLS10YWdzICRtYgorbXktZmlyc3QtdGFnCistLS0tLS0tLS0tLS0KKworQWZ0ZXIgZmluZGluZyBvdXQgYSBjb21tb24gYW5jZXN0b3IgY29tbWl0LCB0aGUgc2Vjb25kIHN0ZXAgaXMKK3RoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC1tIC11ICRtYiBIRUFEIG15YnJhbmNoCistLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgc2FtZSAnZ2l0IHJlYWQtdHJlZScgY29tbWFuZCB3ZSBoYXZlIGFscmVhZHkgc2VlbiwKK2J1dCBpdCB0YWtlcyB0aHJlZSB0cmVlcywgdW5saWtlIHByZXZpb3VzIGV4YW1wbGVzLiAgVGhpcyByZWFkcwordGhlIGNvbnRlbnRzIG9mIGVhY2ggdHJlZSBpbnRvIGRpZmZlcmVudCAnc3RhZ2UnIGluIHRoZSBpbmRleAorZmlsZSAodGhlIGZpcnN0IHRyZWUgZ29lcyB0byBzdGFnZSAxLCB0aGUgc2Vjb25kIHRvIHN0YWdlIDIsCitldGMuKS4gIEFmdGVyIHJlYWRpbmcgdGhyZWUgdHJlZXMgaW50byB0aHJlZSBzdGFnZXMsIHRoZSBwYXRocwordGhhdCBhcmUgdGhlIHNhbWUgaW4gYWxsIHRocmVlIHN0YWdlcyBhcmUgJ2NvbGxhcHNlZCcgaW50byBzdGFnZQorMC4gIEFsc28gcGF0aHMgdGhhdCBhcmUgdGhlIHNhbWUgaW4gdHdvIG9mIHRocmVlIHN0YWdlcyBhcmUKK2NvbGxhcHNlZCBpbnRvIHN0YWdlIDAsIHRha2luZyB0aGUgU0hBLTEgZnJvbSBlaXRoZXIgc3RhZ2UgMiBvcgorc3RhZ2UgMywgd2hpY2hldmVyIGlzIGRpZmZlcmVudCBmcm9tIHN0YWdlIDEgKGkuZS4gb25seSBvbmUgc2lkZQorY2hhbmdlZCBmcm9tIHRoZSBjb21tb24gYW5jZXN0b3IpLgorCitBZnRlciAnY29sbGFwc2luZycgb3BlcmF0aW9uLCBwYXRocyB0aGF0IGFyZSBkaWZmZXJlbnQgaW4gdGhyZWUKK3RyZWVzIGFyZSBsZWZ0IGluIG5vbi16ZXJvIHN0YWdlcy4gIEF0IHRoaXMgcG9pbnQsIHlvdSBjYW4KK2luc3BlY3QgdGhlIGluZGV4IGZpbGUgd2l0aCB0aGlzIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS1zdGFnZQorMTAwNjQ0IDdmOGIxNDFiNjVmZGNlZTQ3MzIxZTM5OWEyNTk4YTIzNWEwMzI0MjIgMAlleGFtcGxlCisxMDA2NDQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOCAxCWhlbGxvCisxMDA2NDQgYmE0MmEyYTk2ZTMwMjdmMzMzM2UxM2VkZTRjY2Y0NDk4YzNhZTk0MiAyCWhlbGxvCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvCistLS0tLS0tLS0tLS0KKworSW4gb3VyIGV4YW1wbGUgb2Ygb25seSB0d28gZmlsZXMsIHdlIGRpZCBub3QgaGF2ZSB1bmNoYW5nZWQKK2ZpbGVzIHNvIG9ubHkgJ2V4YW1wbGUnIHJlc3VsdGVkIGluIGNvbGxhcHNpbmcuICBCdXQgaW4gcmVhbC1saWZlCitsYXJnZSBwcm9qZWN0cywgd2hlbiBvbmx5IGEgc21hbGwgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZSBpbiBvbmUgY29tbWl0LAordGhpcyAnY29sbGFwc2luZycgdGVuZHMgdG8gdHJpdmlhbGx5IG1lcmdlIG1vc3Qgb2YgdGhlIHBhdGhzCitmYWlybHkgcXVpY2tseSwgbGVhdmluZyBvbmx5IGEgaGFuZGZ1bCBvZiByZWFsIGNoYW5nZXMgaW4gbm9uLXplcm8KK3N0YWdlcy4KKworVG8gbG9vayBhdCBvbmx5IG5vbi16ZXJvIHN0YWdlcywgdXNlIGAtLXVubWVyZ2VkYCBmbGFnOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQKKzEwMDY0NCA1NTdkYjAzZGU5OTdjODZhNGEwMjhlMWViZDNhMWNlYjIyNWJlMjM4IDEJaGVsbG8KKzEwMDY0NCBiYTQyYTJhOTZlMzAyN2YzMzMzZTEzZWRlNGNjZjQ0OThjM2FlOTQyIDIJaGVsbG8KKzEwMDY0NCBjYzQ0YzczZWI3ODM1NjVkYTU4MzFiNGQ4MjBjOTYyOTU0MDE5YjY5IDMJaGVsbG8KKy0tLS0tLS0tLS0tLQorCitUaGUgbmV4dCBzdGVwIG9mIG1lcmdpbmcgaXMgdG8gbWVyZ2UgdGhlc2UgdGhyZWUgdmVyc2lvbnMgb2YgdGhlCitmaWxlLCB1c2luZyAzLXdheSBtZXJnZS4gIFRoaXMgaXMgZG9uZSBieSBnaXZpbmcKKydnaXQgbWVyZ2Utb25lLWZpbGUnIGNvbW1hbmQgYXMgb25lIG9mIHRoZSBhcmd1bWVudHMgdG8KKydnaXQgbWVyZ2UtaW5kZXgnIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIGhlbGxvCitBdXRvLW1lcmdpbmcgaGVsbG8KK0VSUk9SOiBNZXJnZSBjb25mbGljdCBpbiBoZWxsbworZmF0YWw6IG1lcmdlIHByb2dyYW0gZmFpbGVkCistLS0tLS0tLS0tLS0KKworJ2dpdCBtZXJnZS1vbmUtZmlsZScgc2NyaXB0IGlzIGNhbGxlZCB3aXRoIHBhcmFtZXRlcnMgdG8KK2Rlc2NyaWJlIHRob3NlIHRocmVlIHZlcnNpb25zLCBhbmQgaXMgcmVzcG9uc2libGUgdG8gbGVhdmUgdGhlCittZXJnZSByZXN1bHRzIGluIHRoZSB3b3JraW5nIHRyZWUuCitJdCBpcyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgc2hlbGwgc2NyaXB0LCBhbmQKK2V2ZW50dWFsbHkgY2FsbHMgJ21lcmdlJyBwcm9ncmFtIGZyb20gUkNTIHN1aXRlIHRvIHBlcmZvcm0gYQorZmlsZS1sZXZlbCAzLXdheSBtZXJnZS4gIEluIHRoaXMgY2FzZSwgJ21lcmdlJyBkZXRlY3RzCitjb25mbGljdHMsIGFuZCB0aGUgbWVyZ2UgcmVzdWx0IHdpdGggY29uZmxpY3QgbWFya3MgaXMgbGVmdCBpbgordGhlIHdvcmtpbmcgdHJlZS4uICBUaGlzIGNhbiBiZSBzZWVuIGlmIHlvdSBydW4gYGxzLWZpbGVzCistLXN0YWdlYCBhZ2FpbiBhdCB0aGlzIHBvaW50OgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKKzEwMDY0NCA3ZjhiMTQxYjY1ZmRjZWU0NzMyMWUzOTlhMjU5OGEyMzVhMDMyNDIyIDAJZXhhbXBsZQorMTAwNjQ0IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzggMQloZWxsbworMTAwNjQ0IGJhNDJhMmE5NmUzMDI3ZjMzMzNlMTNlZGU0Y2NmNDQ5OGMzYWU5NDIgMgloZWxsbworMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsbworLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIHN0YXRlIG9mIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUgd29ya2luZyBmaWxlIGFmdGVyCisnZ2l0IG1lcmdlJyByZXR1cm5zIGNvbnRyb2wgYmFjayB0byB5b3UsIGxlYXZpbmcgdGhlIGNvbmZsaWN0aW5nCittZXJnZSBmb3IgeW91IHRvIHJlc29sdmUuICBOb3RpY2UgdGhhdCB0aGUgcGF0aCBgaGVsbG9gIGlzIHN0aWxsCit1bm1lcmdlZCwgYW5kIHdoYXQgeW91IHNlZSB3aXRoICdnaXQgZGlmZicgYXQgdGhpcyBwb2ludCBpcworZGlmZmVyZW5jZXMgc2luY2Ugc3RhZ2UgMiAoaS5lLiB5b3VyIHZlcnNpb24pLgorCisKK1B1Ymxpc2hpbmcgeW91ciB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTbywgd2UgY2FuIHVzZSBzb21lYm9keSBlbHNlJ3Mgd29yayBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnksIGJ1dAoraG93IGNhbiAqeW91KiBwcmVwYXJlIGEgcmVwb3NpdG9yeSB0byBsZXQgb3RoZXIgcGVvcGxlIHB1bGwgZnJvbQoraXQ/CisKK1lvdSBkbyB5b3VyIHJlYWwgd29yayBpbiB5b3VyIHdvcmtpbmcgdHJlZSB0aGF0IGhhcyB5b3VyCitwcmltYXJ5IHJlcG9zaXRvcnkgaGFuZ2luZyB1bmRlciBpdCBhcyBpdHMgYC5naXRgIHN1YmRpcmVjdG9yeS4KK1lvdSAqY291bGQqIG1ha2UgdGhhdCByZXBvc2l0b3J5IGFjY2Vzc2libGUgcmVtb3RlbHkgYW5kIGFzaworcGVvcGxlIHRvIHB1bGwgZnJvbSBpdCwgYnV0IGluIHByYWN0aWNlIHRoYXQgaXMgbm90IHRoZSB3YXkKK3RoaW5ncyBhcmUgdXN1YWxseSBkb25lLiBBIHJlY29tbWVuZGVkIHdheSBpcyB0byBoYXZlIGEgcHVibGljCityZXBvc2l0b3J5LCBtYWtlIGl0IHJlYWNoYWJsZSBieSBvdGhlciBwZW9wbGUsIGFuZCB3aGVuIHRoZQorY2hhbmdlcyB5b3UgbWFkZSBpbiB5b3VyIHByaW1hcnkgd29ya2luZyB0cmVlIGFyZSBpbiBnb29kIHNoYXBlLAordXBkYXRlIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBmcm9tIGl0LiBUaGlzIGlzIG9mdGVuIGNhbGxlZAorJ3B1c2hpbmcnLgorCitbTk9URV0KK1RoaXMgcHVibGljIHJlcG9zaXRvcnkgY291bGQgZnVydGhlciBiZSBtaXJyb3JlZCwgYW5kIHRoYXQgaXMKK2hvdyBHaXQgcmVwb3NpdG9yaWVzIGF0IGBrZXJuZWwub3JnYCBhcmUgbWFuYWdlZC4KKworUHVibGlzaGluZyB0aGUgY2hhbmdlcyBmcm9tIHlvdXIgbG9jYWwgKHByaXZhdGUpIHJlcG9zaXRvcnkgdG8KK3lvdXIgcmVtb3RlIChwdWJsaWMpIHJlcG9zaXRvcnkgcmVxdWlyZXMgYSB3cml0ZSBwcml2aWxlZ2Ugb24KK3RoZSByZW1vdGUgbWFjaGluZS4gWW91IG5lZWQgdG8gaGF2ZSBhbiBTU0ggYWNjb3VudCB0aGVyZSB0bworcnVuIGEgc2luZ2xlIGNvbW1hbmQsICdnaXQtcmVjZWl2ZS1wYWNrJy4KKworRmlyc3QsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhbiBlbXB0eSByZXBvc2l0b3J5IG9uIHRoZSByZW1vdGUKK21hY2hpbmUgdGhhdCB3aWxsIGhvdXNlIHlvdXIgcHVibGljIHJlcG9zaXRvcnkuIFRoaXMgZW1wdHkKK3JlcG9zaXRvcnkgd2lsbCBiZSBwb3B1bGF0ZWQgYW5kIGJlIGtlcHQgdXAgdG8gZGF0ZSBieSBwdXNoaW5nCitpbnRvIGl0IGxhdGVyLiBPYnZpb3VzbHksIHRoaXMgcmVwb3NpdG9yeSBjcmVhdGlvbiBuZWVkcyB0byBiZQorZG9uZSBvbmx5IG9uY2UuCisKK1tOT1RFXQorJ2dpdCBwdXNoJyB1c2VzIGEgcGFpciBvZiBjb21tYW5kcywKKydnaXQgc2VuZC1wYWNrJyBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIGFuZCAnZ2l0LXJlY2VpdmUtcGFjaycKK29uIHRoZSByZW1vdGUgbWFjaGluZS4gVGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdHdvIG92ZXIKK3RoZSBuZXR3b3JrIGludGVybmFsbHkgdXNlcyBhbiBTU0ggY29ubmVjdGlvbi4KKworWW91ciBwcml2YXRlIHJlcG9zaXRvcnkncyBHaXQgZGlyZWN0b3J5IGlzIHVzdWFsbHkgYC5naXRgLCBidXQKK3lvdXIgcHVibGljIHJlcG9zaXRvcnkgaXMgb2Z0ZW4gbmFtZWQgYWZ0ZXIgdGhlIHByb2plY3QgbmFtZSwKK2kuZS4gYDxwcm9qZWN0Pi5naXRgLiBMZXQncyBjcmVhdGUgc3VjaCBhIHB1YmxpYyByZXBvc2l0b3J5IGZvcgorcHJvamVjdCBgbXktZ2l0YC4gQWZ0ZXIgbG9nZ2luZyBpbnRvIHRoZSByZW1vdGUgbWFjaGluZSwgY3JlYXRlCithbiBlbXB0eSBkaXJlY3Rvcnk6CisKKy0tLS0tLS0tLS0tLQorJCBta2RpciBteS1naXQuZ2l0CistLS0tLS0tLS0tLS0KKworVGhlbiwgbWFrZSB0aGF0IGRpcmVjdG9yeSBpbnRvIGEgR2l0IHJlcG9zaXRvcnkgYnkgcnVubmluZworJ2dpdCBpbml0JywgYnV0IHRoaXMgdGltZSwgc2luY2UgaXRzIG5hbWUgaXMgbm90IHRoZSB1c3VhbAorYC5naXRgLCB3ZSBkbyB0aGluZ3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHk6CisKKy0tLS0tLS0tLS0tLQorJCBHSVRfRElSPW15LWdpdC5naXQgZ2l0IGluaXQKKy0tLS0tLS0tLS0tLQorCitNYWtlIHN1cmUgdGhpcyBkaXJlY3RvcnkgaXMgYXZhaWxhYmxlIGZvciBvdGhlcnMgeW91IHdhbnQgeW91cgorY2hhbmdlcyB0byBiZSBwdWxsZWQgdmlhIHRoZSB0cmFuc3BvcnQgb2YgeW91ciBjaG9pY2UuIEFsc28KK3lvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSAnZ2l0LXJlY2VpdmUtcGFjaycKK3Byb2dyYW0gb24gdGhlIGAkUEFUSGAuCisKK1tOT1RFXQorTWFueSBpbnN0YWxsYXRpb25zIG9mIHNzaGQgZG8gbm90IGludm9rZSB5b3VyIHNoZWxsIGFzIHRoZSBsb2dpbgorc2hlbGwgd2hlbiB5b3UgZGlyZWN0bHkgcnVuIHByb2dyYW1zOyB3aGF0IHRoaXMgbWVhbnMgaXMgdGhhdCBpZgoreW91ciBsb2dpbiBzaGVsbCBpcyAnYmFzaCcsIG9ubHkgYC5iYXNocmNgIGlzIHJlYWQgYW5kIG5vdAorYC5iYXNoX3Byb2ZpbGVgLiBBcyBhIHdvcmthcm91bmQsIG1ha2Ugc3VyZSBgLmJhc2hyY2Agc2V0cyB1cAorYCRQQVRIYCBzbyB0aGF0IHlvdSBjYW4gcnVuICdnaXQtcmVjZWl2ZS1wYWNrJyBwcm9ncmFtLgorCitbTk9URV0KK0lmIHlvdSBwbGFuIHRvIHB1Ymxpc2ggdGhpcyByZXBvc2l0b3J5IHRvIGJlIGFjY2Vzc2VkIG92ZXIgaHR0cCwKK3lvdSBzaG91bGQgZG8gYG12IG15LWdpdC5naXQvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlCitteS1naXQuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlYCBhdCB0aGlzIHBvaW50LgorVGhpcyBtYWtlcyBzdXJlIHRoYXQgZXZlcnkgdGltZSB5b3UgcHVzaCBpbnRvIHRoaXMKK3JlcG9zaXRvcnksIGBnaXQgdXBkYXRlLXNlcnZlci1pbmZvYCBpcyBydW4uCisKK1lvdXIgInB1YmxpYyByZXBvc2l0b3J5IiBpcyBub3cgcmVhZHkgdG8gYWNjZXB0IHlvdXIgY2hhbmdlcy4KK0NvbWUgYmFjayB0byB0aGUgbWFjaGluZSB5b3UgaGF2ZSB5b3VyIHByaXZhdGUgcmVwb3NpdG9yeS4gRnJvbQordGhlcmUsIHJ1biB0aGlzIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCA8cHVibGljLWhvc3Q+Oi9wYXRoL3RvL215LWdpdC5naXQgbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhpcyBzeW5jaHJvbml6ZXMgeW91ciBwdWJsaWMgcmVwb3NpdG9yeSB0byBtYXRjaCB0aGUgbmFtZWQKK2JyYW5jaCBoZWFkIChpLmUuIGBtYXN0ZXJgIGluIHRoaXMgY2FzZSkgYW5kIG9iamVjdHMgcmVhY2hhYmxlCitmcm9tIHRoZW0gaW4geW91ciBjdXJyZW50IHJlcG9zaXRvcnkuCisKK0FzIGEgcmVhbCBleGFtcGxlLCB0aGlzIGlzIGhvdyBJIHVwZGF0ZSBteSBwdWJsaWMgR2l0CityZXBvc2l0b3J5LiBLZXJuZWwub3JnIG1pcnJvciBuZXR3b3JrIHRha2VzIGNhcmUgb2YgdGhlCitwcm9wYWdhdGlvbiB0byBvdGhlciBwdWJsaWNseSB2aXNpYmxlIG1hY2hpbmVzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggbWFzdGVyLmtlcm5lbC5vcmc6L3B1Yi9zY20vZ2l0L2dpdC5naXQvCistLS0tLS0tLS0tLS0KKworCitQYWNraW5nIHlvdXIgcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRWFybGllciwgd2Ugc2F3IHRoYXQgb25lIGZpbGUgdW5kZXIgYC5naXQvb2JqZWN0cy8/Py9gIGRpcmVjdG9yeQoraXMgc3RvcmVkIGZvciBlYWNoIEdpdCBvYmplY3QgeW91IGNyZWF0ZS4gVGhpcyByZXByZXNlbnRhdGlvbgoraXMgZWZmaWNpZW50IHRvIGNyZWF0ZSBhdG9taWNhbGx5IGFuZCBzYWZlbHksIGJ1dAorbm90IHNvIGNvbnZlbmllbnQgdG8gdHJhbnNwb3J0IG92ZXIgdGhlIG5ldHdvcmsuIFNpbmNlIEdpdCBvYmplY3RzIGFyZQoraW1tdXRhYmxlIG9uY2UgdGhleSBhcmUgY3JlYXRlZCwgdGhlcmUgaXMgYSB3YXkgdG8gb3B0aW1pemUgdGhlCitzdG9yYWdlIGJ5ICJwYWNraW5nIHRoZW0gdG9nZXRoZXIiLiBUaGUgY29tbWFuZAorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlcGFjaworLS0tLS0tLS0tLS0tCisKK3dpbGwgZG8gaXQgZm9yIHlvdS4gSWYgeW91IGZvbGxvd2VkIHRoZSB0dXRvcmlhbCBleGFtcGxlcywgeW91Cit3b3VsZCBoYXZlIGFjY3VtdWxhdGVkIGFib3V0IDE3IG9iamVjdHMgaW4gYC5naXQvb2JqZWN0cy8/Py9gCitkaXJlY3RvcmllcyBieSBub3cuICdnaXQgcmVwYWNrJyB0ZWxscyB5b3UgaG93IG1hbnkgb2JqZWN0cyBpdAorcGFja2VkLCBhbmQgc3RvcmVzIHRoZSBwYWNrZWQgZmlsZSBpbiB0aGUgYC5naXQvb2JqZWN0cy9wYWNrYAorZGlyZWN0b3J5LgorCitbTk9URV0KK1lvdSB3aWxsIHNlZSB0d28gZmlsZXMsIGBwYWNrLSoucGFja2AgYW5kIGBwYWNrLSouaWR4YCwKK2luIGAuZ2l0L29iamVjdHMvcGFja2AgZGlyZWN0b3J5LiBUaGV5IGFyZSBjbG9zZWx5IHJlbGF0ZWQgdG8KK2VhY2ggb3RoZXIsIGFuZCBpZiB5b3UgZXZlciBjb3B5IHRoZW0gYnkgaGFuZCB0byBhIGRpZmZlcmVudAorcmVwb3NpdG9yeSBmb3Igd2hhdGV2ZXIgcmVhc29uLCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB5b3UgY29weQordGhlbSB0b2dldGhlci4gVGhlIGZvcm1lciBob2xkcyBhbGwgdGhlIGRhdGEgZnJvbSB0aGUgb2JqZWN0cworaW4gdGhlIHBhY2ssIGFuZCB0aGUgbGF0dGVyIGhvbGRzIHRoZSBpbmRleCBmb3IgcmFuZG9tCithY2Nlc3MuCisKK0lmIHlvdSBhcmUgcGFyYW5vaWQsIHJ1bm5pbmcgJ2dpdCB2ZXJpZnktcGFjaycgY29tbWFuZCB3b3VsZAorZGV0ZWN0IGlmIHlvdSBoYXZlIGEgY29ycnVwdCBwYWNrLCBidXQgZG8gbm90IHdvcnJ5IHRvbyBtdWNoLgorT3VyIHByb2dyYW1zIGFyZSBhbHdheXMgcGVyZmVjdCA7LSkuCisKK09uY2UgeW91IGhhdmUgcGFja2VkIG9iamVjdHMsIHlvdSBkbyBub3QgbmVlZCB0byBsZWF2ZSB0aGUKK3VucGFja2VkIG9iamVjdHMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoZSBwYWNrIGZpbGUgYW55bW9yZS4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBwcnVuZS1wYWNrZWQKKy0tLS0tLS0tLS0tLQorCit3b3VsZCByZW1vdmUgdGhlbSBmb3IgeW91LgorCitZb3UgY2FuIHRyeSBydW5uaW5nIGBmaW5kIC5naXQvb2JqZWN0cyAtdHlwZSBmYCBiZWZvcmUgYW5kIGFmdGVyCit5b3UgcnVuIGBnaXQgcHJ1bmUtcGFja2VkYCBpZiB5b3UgYXJlIGN1cmlvdXMuICBBbHNvIGBnaXQKK2NvdW50LW9iamVjdHNgIHdvdWxkIHRlbGwgeW91IGhvdyBtYW55IHVucGFja2VkIG9iamVjdHMgYXJlIGluCit5b3VyIHJlcG9zaXRvcnkgYW5kIGhvdyBtdWNoIHNwYWNlIHRoZXkgYXJlIGNvbnN1bWluZy4KKworW05PVEVdCitgZ2l0IHB1bGxgIGlzIHNsaWdodGx5IGN1bWJlcnNvbWUgZm9yIEhUVFAgdHJhbnNwb3J0LCBhcyBhCitwYWNrZWQgcmVwb3NpdG9yeSBtYXkgY29udGFpbiByZWxhdGl2ZWx5IGZldyBvYmplY3RzIGluIGEKK3JlbGF0aXZlbHkgbGFyZ2UgcGFjay4gSWYgeW91IGV4cGVjdCBtYW55IEhUVFAgcHVsbHMgZnJvbSB5b3VyCitwdWJsaWMgcmVwb3NpdG9yeSB5b3UgbWlnaHQgd2FudCB0byByZXBhY2sgJiBwcnVuZSBvZnRlbiwgb3IKK25ldmVyLgorCitJZiB5b3UgcnVuIGBnaXQgcmVwYWNrYCBhZ2FpbiBhdCB0aGlzIHBvaW50LCBpdCB3aWxsIHNheQorIk5vdGhpbmcgbmV3IHRvIHBhY2suIi4gT25jZSB5b3UgY29udGludWUgeW91ciBkZXZlbG9wbWVudCBhbmQKK2FjY3VtdWxhdGUgdGhlIGNoYW5nZXMsIHJ1bm5pbmcgYGdpdCByZXBhY2tgIGFnYWluIHdpbGwgY3JlYXRlIGEKK25ldyBwYWNrLCB0aGF0IGNvbnRhaW5zIG9iamVjdHMgY3JlYXRlZCBzaW5jZSB5b3UgcGFja2VkIHlvdXIKK3JlcG9zaXRvcnkgdGhlIGxhc3QgdGltZS4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHBhY2sgeW91ciBwcm9qZWN0Citzb29uIGFmdGVyIHRoZSBpbml0aWFsIGltcG9ydCAodW5sZXNzIHlvdSBhcmUgc3RhcnRpbmcgeW91cgorcHJvamVjdCBmcm9tIHNjcmF0Y2gpLCBhbmQgdGhlbiBydW4gYGdpdCByZXBhY2tgIGV2ZXJ5IG9uY2UgaW4gYQord2hpbGUsIGRlcGVuZGluZyBvbiBob3cgYWN0aXZlIHlvdXIgcHJvamVjdCBpcy4KKworV2hlbiBhIHJlcG9zaXRvcnkgaXMgc3luY2hyb25pemVkIHZpYSBgZ2l0IHB1c2hgIGFuZCBgZ2l0IHB1bGxgCitvYmplY3RzIHBhY2tlZCBpbiB0aGUgc291cmNlIHJlcG9zaXRvcnkgYXJlIHVzdWFsbHkgc3RvcmVkCit1bnBhY2tlZCBpbiB0aGUgZGVzdGluYXRpb24uCitXaGlsZSB0aGlzIGFsbG93cyB5b3UgdG8gdXNlIGRpZmZlcmVudCBwYWNraW5nIHN0cmF0ZWdpZXMgb24KK2JvdGggZW5kcywgaXQgYWxzbyBtZWFucyB5b3UgbWF5IG5lZWQgdG8gcmVwYWNrIGJvdGgKK3JlcG9zaXRvcmllcyBldmVyeSBvbmNlIGluIGEgd2hpbGUuCisKKworV29ya2luZyB3aXRoIE90aGVycworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHRob3VnaCBHaXQgaXMgYSB0cnVseSBkaXN0cmlidXRlZCBzeXN0ZW0sIGl0IGlzIG9mdGVuCitjb252ZW5pZW50IHRvIG9yZ2FuaXplIHlvdXIgcHJvamVjdCB3aXRoIGFuIGluZm9ybWFsIGhpZXJhcmNoeQorb2YgZGV2ZWxvcGVycy4gTGludXgga2VybmVsIGRldmVsb3BtZW50IGlzIHJ1biB0aGlzIHdheS4gVGhlcmUKK2lzIGEgbmljZSBpbGx1c3RyYXRpb24gKHBhZ2UgMTcsICJNZXJnZXMgdG8gTWFpbmxpbmUiKSBpbgoraHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTIwOTE1MjAzNjA5L2h0dHA6Ly93d3cueGVub3RpbWUubmV0L2xpbnV4L21lbnRvci9saW51eC1tZW50b3JpbmctMjAwNi5wZGZbUmFuZHkgRHVubGFwJ3MgcHJlc2VudGF0aW9uXS4KKworSXQgc2hvdWxkIGJlIHN0cmVzc2VkIHRoYXQgdGhpcyBoaWVyYXJjaHkgaXMgcHVyZWx5ICppbmZvcm1hbCouCitUaGVyZSBpcyBub3RoaW5nIGZ1bmRhbWVudGFsIGluIEdpdCB0aGF0IGVuZm9yY2VzIHRoZSAiY2hhaW4gb2YKK3BhdGNoIGZsb3ciIHRoaXMgaGllcmFyY2h5IGltcGxpZXMuIFlvdSBkbyBub3QgaGF2ZSB0byBwdWxsCitmcm9tIG9ubHkgb25lIHJlbW90ZSByZXBvc2l0b3J5LgorCitBIHJlY29tbWVuZGVkIHdvcmtmbG93IGZvciBhICJwcm9qZWN0IGxlYWQiIGdvZXMgbGlrZSB0aGlzOgorCisxLiBQcmVwYXJlIHlvdXIgcHJpbWFyeSByZXBvc2l0b3J5IG9uIHlvdXIgbG9jYWwgbWFjaGluZS4gWW91cgorICAgd29yayBpcyBkb25lIHRoZXJlLgorCisyLiBQcmVwYXJlIGEgcHVibGljIHJlcG9zaXRvcnkgYWNjZXNzaWJsZSB0byBvdGhlcnMuCisrCitJZiBvdGhlciBwZW9wbGUgYXJlIHB1bGxpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgb3ZlciBkdW1iCit0cmFuc3BvcnQgcHJvdG9jb2xzIChIVFRQKSwgeW91IG5lZWQgdG8ga2VlcCB0aGlzIHJlcG9zaXRvcnkKKydkdW1iIHRyYW5zcG9ydCBmcmllbmRseScuICBBZnRlciBgZ2l0IGluaXRgLAorYCRHSVRfRElSL2hvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZWAgY29waWVkIGZyb20gdGhlIHN0YW5kYXJkIHRlbXBsYXRlcword291bGQgY29udGFpbiBhIGNhbGwgdG8gJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nCitidXQgeW91IG5lZWQgdG8gbWFudWFsbHkgZW5hYmxlIHRoZSBob29rIHdpdGgKK2BtdiBwb3N0LXVwZGF0ZS5zYW1wbGUgcG9zdC11cGRhdGVgLiAgVGhpcyBtYWtlcyBzdXJlCisnZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycga2VlcHMgdGhlIG5lY2Vzc2FyeSBmaWxlcyB1cCB0byBkYXRlLgorCiszLiBQdXNoIGludG8gdGhlIHB1YmxpYyByZXBvc2l0b3J5IGZyb20geW91ciBwcmltYXJ5CisgICByZXBvc2l0b3J5LgorCis0LiAnZ2l0IHJlcGFjaycgdGhlIHB1YmxpYyByZXBvc2l0b3J5LiBUaGlzIGVzdGFibGlzaGVzIGEgYmlnCisgICBwYWNrIHRoYXQgY29udGFpbnMgdGhlIGluaXRpYWwgc2V0IG9mIG9iamVjdHMgYXMgdGhlCisgICBiYXNlbGluZSwgYW5kIHBvc3NpYmx5ICdnaXQgcHJ1bmUnIGlmIHRoZSB0cmFuc3BvcnQKKyAgIHVzZWQgZm9yIHB1bGxpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgc3VwcG9ydHMgcGFja2VkCisgICByZXBvc2l0b3JpZXMuCisKKzUuIEtlZXAgd29ya2luZyBpbiB5b3VyIHByaW1hcnkgcmVwb3NpdG9yeS4gWW91ciBjaGFuZ2VzCisgICBpbmNsdWRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24sIHBhdGNoZXMgeW91IHJlY2VpdmUgdmlhCisgICBlLW1haWxzLCBhbmQgbWVyZ2VzIHJlc3VsdGluZyBmcm9tIHB1bGxpbmcgdGhlICJwdWJsaWMiCisgICByZXBvc2l0b3JpZXMgb2YgeW91ciAic3Vic3lzdGVtIG1haW50YWluZXJzIi4KKysKK1lvdSBjYW4gcmVwYWNrIHRoaXMgcHJpdmF0ZSByZXBvc2l0b3J5IHdoZW5ldmVyIHlvdSBmZWVsIGxpa2UuCisKKzYuIFB1c2ggeW91ciBjaGFuZ2VzIHRvIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSwgYW5kIGFubm91bmNlIGl0CisgICB0byB0aGUgcHVibGljLgorCis3LiBFdmVyeSBvbmNlIGluIGEgd2hpbGUsICdnaXQgcmVwYWNrJyB0aGUgcHVibGljIHJlcG9zaXRvcnkuCisgICBHbyBiYWNrIHRvIHN0ZXAgNS4gYW5kIGNvbnRpbnVlIHdvcmtpbmcuCisKKworQSByZWNvbW1lbmRlZCB3b3JrIGN5Y2xlIGZvciBhICJzdWJzeXN0ZW0gbWFpbnRhaW5lciIgd2hvIHdvcmtzCitvbiB0aGF0IHByb2plY3QgYW5kIGhhcyBhbiBvd24gInB1YmxpYyByZXBvc2l0b3J5IiBnb2VzIGxpa2UgdGhpczoKKworMS4gUHJlcGFyZSB5b3VyIHdvcmsgcmVwb3NpdG9yeSwgYnkgcnVubmluZyAnZ2l0IGNsb25lJyBvbiB0aGUgcHVibGljCisgICByZXBvc2l0b3J5IG9mIHRoZSAicHJvamVjdCBsZWFkIi4gVGhlIFVSTCB1c2VkIGZvciB0aGUKKyAgIGluaXRpYWwgY2xvbmluZyBpcyBzdG9yZWQgaW4gdGhlIHJlbW90ZS5vcmlnaW4udXJsCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisyLiBQcmVwYXJlIGEgcHVibGljIHJlcG9zaXRvcnkgYWNjZXNzaWJsZSB0byBvdGhlcnMsIGp1c3QgbGlrZQorICAgdGhlICJwcm9qZWN0IGxlYWQiIHBlcnNvbiBkb2VzLgorCiszLiBDb3B5IG92ZXIgdGhlIHBhY2tlZCBmaWxlcyBmcm9tICJwcm9qZWN0IGxlYWQiIHB1YmxpYworICAgcmVwb3NpdG9yeSB0byB5b3VyIHB1YmxpYyByZXBvc2l0b3J5LCB1bmxlc3MgdGhlICJwcm9qZWN0CisgICBsZWFkIiByZXBvc2l0b3J5IGxpdmVzIG9uIHRoZSBzYW1lIG1hY2hpbmUgYXMgeW91cnMuICBJbiB0aGUKKyAgIGxhdHRlciBjYXNlLCB5b3UgY2FuIHVzZSBgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIGZpbGUgdG8KKyAgIHBvaW50IGF0IHRoZSByZXBvc2l0b3J5IHlvdSBhcmUgYm9ycm93aW5nIGZyb20uCisKKzQuIFB1c2ggaW50byB0aGUgcHVibGljIHJlcG9zaXRvcnkgZnJvbSB5b3VyIHByaW1hcnkKKyAgIHJlcG9zaXRvcnkuIFJ1biAnZ2l0IHJlcGFjaycsIGFuZCBwb3NzaWJseSAnZ2l0IHBydW5lJyBpZiB0aGUKKyAgIHRyYW5zcG9ydCB1c2VkIGZvciBwdWxsaW5nIGZyb20geW91ciByZXBvc2l0b3J5IHN1cHBvcnRzCisgICBwYWNrZWQgcmVwb3NpdG9yaWVzLgorCis1LiBLZWVwIHdvcmtpbmcgaW4geW91ciBwcmltYXJ5IHJlcG9zaXRvcnkuIFlvdXIgY2hhbmdlcworICAgaW5jbHVkZSBtb2RpZmljYXRpb25zIG9mIHlvdXIgb3duLCBwYXRjaGVzIHlvdSByZWNlaXZlIHZpYQorICAgZS1tYWlscywgYW5kIG1lcmdlcyByZXN1bHRpbmcgZnJvbSBwdWxsaW5nIHRoZSAicHVibGljIgorICAgcmVwb3NpdG9yaWVzIG9mIHlvdXIgInByb2plY3QgbGVhZCIgYW5kIHBvc3NpYmx5IHlvdXIKKyAgICJzdWItc3Vic3lzdGVtIG1haW50YWluZXJzIi4KKysKK1lvdSBjYW4gcmVwYWNrIHRoaXMgcHJpdmF0ZSByZXBvc2l0b3J5IHdoZW5ldmVyIHlvdSBmZWVsCitsaWtlLgorCis2LiBQdXNoIHlvdXIgY2hhbmdlcyB0byB5b3VyIHB1YmxpYyByZXBvc2l0b3J5LCBhbmQgYXNrIHlvdXIKKyAgICJwcm9qZWN0IGxlYWQiIGFuZCBwb3NzaWJseSB5b3VyICJzdWItc3Vic3lzdGVtCisgICBtYWludGFpbmVycyIgdG8gcHVsbCBmcm9tIGl0LgorCis3LiBFdmVyeSBvbmNlIGluIGEgd2hpbGUsICdnaXQgcmVwYWNrJyB0aGUgcHVibGljIHJlcG9zaXRvcnkuCisgICBHbyBiYWNrIHRvIHN0ZXAgNS4gYW5kIGNvbnRpbnVlIHdvcmtpbmcuCisKKworQSByZWNvbW1lbmRlZCB3b3JrIGN5Y2xlIGZvciBhbiAiaW5kaXZpZHVhbCBkZXZlbG9wZXIiIHdobyBkb2VzCitub3QgaGF2ZSBhICJwdWJsaWMiIHJlcG9zaXRvcnkgaXMgc29tZXdoYXQgZGlmZmVyZW50LiBJdCBnb2VzCitsaWtlIHRoaXM6CisKKzEuIFByZXBhcmUgeW91ciB3b3JrIHJlcG9zaXRvcnksIGJ5ICdnaXQgY2xvbmUnIHRoZSBwdWJsaWMKKyAgIHJlcG9zaXRvcnkgb2YgdGhlICJwcm9qZWN0IGxlYWQiIChvciBhICJzdWJzeXN0ZW0KKyAgIG1haW50YWluZXIiLCBpZiB5b3Ugd29yayBvbiBhIHN1YnN5c3RlbSkuIFRoZSBVUkwgdXNlZCBmb3IKKyAgIHRoZSBpbml0aWFsIGNsb25pbmcgaXMgc3RvcmVkIGluIHRoZSByZW1vdGUub3JpZ2luLnVybAorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworMi4gRG8geW91ciB3b3JrIGluIHlvdXIgcmVwb3NpdG9yeSBvbiAnbWFzdGVyJyBicmFuY2guCisKKzMuIFJ1biBgZ2l0IGZldGNoIG9yaWdpbmAgZnJvbSB0aGUgcHVibGljIHJlcG9zaXRvcnkgb2YgeW91cgorICAgdXBzdHJlYW0gZXZlcnkgb25jZSBpbiBhIHdoaWxlLiBUaGlzIGRvZXMgb25seSB0aGUgZmlyc3QKKyAgIGhhbGYgb2YgYGdpdCBwdWxsYCBidXQgZG9lcyBub3QgbWVyZ2UuIFRoZSBoZWFkIG9mIHRoZQorICAgcHVibGljIHJlcG9zaXRvcnkgaXMgc3RvcmVkIGluIGAuZ2l0L3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyYC4KKworNC4gVXNlIGBnaXQgY2hlcnJ5IG9yaWdpbmAgdG8gc2VlIHdoaWNoIG9uZXMgb2YgeW91ciBwYXRjaGVzCisgICB3ZXJlIGFjY2VwdGVkLCBhbmQvb3IgdXNlIGBnaXQgcmViYXNlIG9yaWdpbmAgdG8gcG9ydCB5b3VyCisgICB1bm1lcmdlZCBjaGFuZ2VzIGZvcndhcmQgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0uCisKKzUuIFVzZSBgZ2l0IGZvcm1hdC1wYXRjaCBvcmlnaW5gIHRvIHByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsCisgICBzdWJtaXNzaW9uIHRvIHlvdXIgdXBzdHJlYW0gYW5kIHNlbmQgaXQgb3V0LiBHbyBiYWNrIHRvCisgICBzdGVwIDIuIGFuZCBjb250aW51ZS4KKworCitXb3JraW5nIHdpdGggT3RoZXJzLCBTaGFyZWQgUmVwb3NpdG9yeSBTdHlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGFyZSBjb21pbmcgZnJvbSBhIENWUyBiYWNrZ3JvdW5kLCB0aGUgc3R5bGUgb2YgY29vcGVyYXRpb24KK3N1Z2dlc3RlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBtYXkgYmUgbmV3IHRvIHlvdS4gWW91IGRvIG5vdAoraGF2ZSB0byB3b3JyeS4gR2l0IHN1cHBvcnRzIHRoZSAic2hhcmVkIHB1YmxpYyByZXBvc2l0b3J5IiBzdHlsZSBvZgorY29vcGVyYXRpb24geW91IGFyZSBwcm9iYWJseSBtb3JlIGZhbWlsaWFyIHdpdGggYXMgd2VsbC4KKworU2VlIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSBmb3IgdGhlIGRldGFpbHMuCisKK0J1bmRsaW5nIHlvdXIgd29yayB0b2dldGhlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIGxpa2VseSB0aGF0IHlvdSB3aWxsIGJlIHdvcmtpbmcgb24gbW9yZSB0aGFuIG9uZSB0aGluZyBhdAorYSB0aW1lLiAgSXQgaXMgZWFzeSB0byBtYW5hZ2UgdGhvc2UgbW9yZS1vci1sZXNzIGluZGVwZW5kZW50IHRhc2tzCit1c2luZyBicmFuY2hlcyB3aXRoIEdpdC4KKworV2UgaGF2ZSBhbHJlYWR5IHNlZW4gaG93IGJyYW5jaGVzIHdvcmsgcHJldmlvdXNseSwKK3dpdGggImZ1biBhbmQgd29yayIgZXhhbXBsZSB1c2luZyB0d28gYnJhbmNoZXMuICBUaGUgaWRlYSBpcyB0aGUKK3NhbWUgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gYnJhbmNoZXMuICBMZXQncyBzYXkgeW91IHN0YXJ0ZWQKK291dCBmcm9tICJtYXN0ZXIiIGhlYWQsIGFuZCBoYXZlIHNvbWUgbmV3IGNvZGUgaW4gdGhlICJtYXN0ZXIiCiticmFuY2gsIGFuZCB0d28gaW5kZXBlbmRlbnQgZml4ZXMgaW4gdGhlICJjb21taXQtZml4IiBhbmQKKyJkaWZmLWZpeCIgYnJhbmNoZXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2gKKyEgW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICEgW2RpZmYtZml4XSBGaXggcmVuYW1lIGRldGVjdGlvbi4KKyAgKiBbbWFzdGVyXSBSZWxlYXNlIGNhbmRpZGF0ZSAjMQorLS0tCisgKyAgW2RpZmYtZml4XSBGaXggcmVuYW1lIGRldGVjdGlvbi4KKyArICBbZGlmZi1maXh+MV0gQmV0dGVyIGNvbW1vbiBzdWJzdHJpbmcgYWxnb3JpdGhtLgorKyAgIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyAgKiBbbWFzdGVyXSBSZWxlYXNlIGNhbmRpZGF0ZSAjMQorKysqIFtkaWZmLWZpeH4yXSBQcmV0dHktcHJpbnQgbWVzc2FnZXMuCistLS0tLS0tLS0tLS0KKworQm90aCBmaXhlcyBhcmUgdGVzdGVkIHdlbGwsIGFuZCBhdCB0aGlzIHBvaW50LCB5b3Ugd2FudCB0byBtZXJnZQoraW4gYm90aCBvZiB0aGVtLiAgWW91IGNvdWxkIG1lcmdlIGluICdkaWZmLWZpeCcgZmlyc3QgYW5kIHRoZW4KKydjb21taXQtZml4JyBuZXh0LCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgLW0gIk1lcmdlIGZpeCBpbiBkaWZmLWZpeCIgZGlmZi1maXgKKyQgZ2l0IG1lcmdlIC1tICJNZXJnZSBmaXggaW4gY29tbWl0LWZpeCIgY29tbWl0LWZpeAorLS0tLS0tLS0tLS0tCisKK1doaWNoIHdvdWxkIHJlc3VsdCBpbjoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaAorISBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgISBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICAqIFttYXN0ZXJdIE1lcmdlIGZpeCBpbiBjb21taXQtZml4CistLS0KKyAgLSBbbWFzdGVyXSBNZXJnZSBmaXggaW4gY29tbWl0LWZpeAorKyAqIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyAgLSBbbWFzdGVyfjFdIE1lcmdlIGZpeCBpbiBkaWZmLWZpeAorICsqIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgKyogW2RpZmYtZml4fjFdIEJldHRlciBjb21tb24gc3Vic3RyaW5nIGFsZ29yaXRobS4KKyAgKiBbbWFzdGVyfjJdIFJlbGVhc2UgY2FuZGlkYXRlICMxCisrKyogW21hc3Rlcn4zXSBQcmV0dHktcHJpbnQgbWVzc2FnZXMuCistLS0tLS0tLS0tLS0KKworSG93ZXZlciwgdGhlcmUgaXMgbm8gcGFydGljdWxhciByZWFzb24gdG8gbWVyZ2UgaW4gb25lIGJyYW5jaAorZmlyc3QgYW5kIHRoZSBvdGhlciBuZXh0LCB3aGVuIHdoYXQgeW91IGhhdmUgYXJlIGEgc2V0IG9mIHRydWx5CitpbmRlcGVuZGVudCBjaGFuZ2VzIChpZiB0aGUgb3JkZXIgbWF0dGVyZWQsIHRoZW4gdGhleSBhcmUgbm90CitpbmRlcGVuZGVudCBieSBkZWZpbml0aW9uKS4gIFlvdSBjb3VsZCBpbnN0ZWFkIG1lcmdlIHRob3NlIHR3bworYnJhbmNoZXMgaW50byB0aGUgY3VycmVudCBicmFuY2ggYXQgb25jZS4gIEZpcnN0IGxldCdzIHVuZG8gd2hhdAord2UganVzdCBkaWQgYW5kIHN0YXJ0IG92ZXIuICBXZSB3b3VsZCB3YW50IHRvIGdldCB0aGUgbWFzdGVyCiticmFuY2ggYmVmb3JlIHRoZXNlIHR3byBtZXJnZXMgYnkgcmVzZXR0aW5nIGl0IHRvICdtYXN0ZXJ+Mic6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS1oYXJkIG1hc3Rlcn4yCistLS0tLS0tLS0tLS0KKworWW91IGNhbiBtYWtlIHN1cmUgYGdpdCBzaG93LWJyYW5jaGAgbWF0Y2hlcyB0aGUgc3RhdGUgYmVmb3JlCit0aG9zZSB0d28gJ2dpdCBtZXJnZScgeW91IGp1c3QgZGlkLiAgVGhlbiwgaW5zdGVhZCBvZiBydW5uaW5nCit0d28gJ2dpdCBtZXJnZScgY29tbWFuZHMgaW4gYSByb3csIHlvdSB3b3VsZCBtZXJnZSB0aGVzZSB0d28KK2JyYW5jaCBoZWFkcyAodGhpcyBpcyBrbm93biBhcyAnbWFraW5nIGFuIE9jdG9wdXMnKToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSBjb21taXQtZml4IGRpZmYtZml4CiskIGdpdCBzaG93LWJyYW5jaAorISBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgISBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICAqIFttYXN0ZXJdIE9jdG9wdXMgbWVyZ2Ugb2YgYnJhbmNoZXMgJ2RpZmYtZml4JyBhbmQgJ2NvbW1pdC1maXgnCistLS0KKyAgLSBbbWFzdGVyXSBPY3RvcHVzIG1lcmdlIG9mIGJyYW5jaGVzICdkaWZmLWZpeCcgYW5kICdjb21taXQtZml4JworKyAqIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyArKiBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICsqIFtkaWZmLWZpeH4xXSBCZXR0ZXIgY29tbW9uIHN1YnN0cmluZyBhbGdvcml0aG0uCisgICogW21hc3Rlcn4xXSBSZWxlYXNlIGNhbmRpZGF0ZSAjMQorKysqIFttYXN0ZXJ+Ml0gUHJldHR5LXByaW50IG1lc3NhZ2VzLgorLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB5b3Ugc2hvdWxkIG5vdCBkbyBPY3RvcHVzIGp1c3QgYmVjYXVzZSB5b3UgY2FuLiAgQW4gb2N0b3B1cworaXMgYSB2YWxpZCB0aGluZyB0byBkbyBhbmQgb2Z0ZW4gbWFrZXMgaXQgZWFzaWVyIHRvIHZpZXcgdGhlCitjb21taXQgaGlzdG9yeSBpZiB5b3UgYXJlIG1lcmdpbmcgbW9yZSB0aGFuIHR3byBpbmRlcGVuZGVudAorY2hhbmdlcyBhdCB0aGUgc2FtZSB0aW1lLiAgSG93ZXZlciwgaWYgeW91IGhhdmUgbWVyZ2UgY29uZmxpY3RzCit3aXRoIGFueSBvZiB0aGUgYnJhbmNoZXMgeW91IGFyZSBtZXJnaW5nIGluIGFuZCBuZWVkIHRvIGhhbmQKK3Jlc29sdmUsIHRoYXQgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBkZXZlbG9wbWVudCBoYXBwZW5lZCBpbgordGhvc2UgYnJhbmNoZXMgd2VyZSBub3QgaW5kZXBlbmRlbnQgYWZ0ZXIgYWxsLCBhbmQgeW91IHNob3VsZAorbWVyZ2UgdHdvIGF0IGEgdGltZSwgZG9jdW1lbnRpbmcgaG93IHlvdSByZXNvbHZlZCB0aGUgY29uZmxpY3RzLAorYW5kIHRoZSByZWFzb24gd2h5IHlvdSBwcmVmZXJyZWQgY2hhbmdlcyBtYWRlIGluIG9uZSBzaWRlIG92ZXIKK3RoZSBvdGhlci4gIE90aGVyd2lzZSBpdCB3b3VsZCBtYWtlIHRoZSBwcm9qZWN0IGhpc3RvcnkgaGFyZGVyCit0byBmb2xsb3csIG5vdCBlYXNpZXIuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGNyZWRlbnRpYWxzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MTRkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGNyZWRlbnRpYWxzLnR4dApAQCAtMCwwICsxLDI4MiBAQAorZ2l0Y3JlZGVudGlhbHMoNykKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGNyZWRlbnRpYWxzIC0gcHJvdmlkaW5nIHVzZXJuYW1lcyBhbmQgcGFzc3dvcmRzIHRvIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20udXNlcm5hbWUgbXl1c2VybmFtZQorZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAiJGhlbHBlciAkb3B0aW9ucyIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l0IHdpbGwgc29tZXRpbWVzIG5lZWQgY3JlZGVudGlhbHMgZnJvbSB0aGUgdXNlciBpbiBvcmRlciB0byBwZXJmb3JtCitvcGVyYXRpb25zOyBmb3IgZXhhbXBsZSwgaXQgbWF5IG5lZWQgdG8gYXNrIGZvciBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZAoraW4gb3JkZXIgdG8gYWNjZXNzIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBIVFRQLiBUaGlzIG1hbnVhbCBkZXNjcmliZXMKK3RoZSBtZWNoYW5pc21zIEdpdCB1c2VzIHRvIHJlcXVlc3QgdGhlc2UgY3JlZGVudGlhbHMsIGFzIHdlbGwgYXMgc29tZQorZmVhdHVyZXMgdG8gYXZvaWQgaW5wdXR0aW5nIHRoZXNlIGNyZWRlbnRpYWxzIHJlcGVhdGVkbHkuCisKK1JFUVVFU1RJTkcgQ1JFREVOVElBTFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aG91dCBhbnkgY3JlZGVudGlhbCBoZWxwZXJzIGRlZmluZWQsIEdpdCB3aWxsIHRyeSB0aGUgZm9sbG93aW5nCitzdHJhdGVnaWVzIHRvIGFzayB0aGUgdXNlciBmb3IgdXNlcm5hbWVzIGFuZCBwYXNzd29yZHM6CisKKzEuIElmIHRoZSBgR0lUX0FTS1BBU1NgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgdGhlIHByb2dyYW0KKyAgIHNwZWNpZmllZCBieSB0aGUgdmFyaWFibGUgaXMgaW52b2tlZC4gQSBzdWl0YWJsZSBwcm9tcHQgaXMgcHJvdmlkZWQKKyAgIHRvIHRoZSBwcm9ncmFtIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgdXNlcidzIGlucHV0IGlzIHJlYWQKKyAgIGZyb20gaXRzIHN0YW5kYXJkIG91dHB1dC4KKworMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYGNvcmUuYXNrUGFzc2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBzZXQsIGl0cworICAgdmFsdWUgaXMgdXNlZCBhcyBhYm92ZS4KKworMy4gT3RoZXJ3aXNlLCBpZiB0aGUgYFNTSF9BU0tQQVNTYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0cworICAgdmFsdWUgaXMgdXNlZCBhcyBhYm92ZS4KKworNC4gT3RoZXJ3aXNlLCB0aGUgdXNlciBpcyBwcm9tcHRlZCBvbiB0aGUgdGVybWluYWwuCisKK0FWT0lESU5HIFJFUEVUSVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgY2FuIGJlIGN1bWJlcnNvbWUgdG8gaW5wdXQgdGhlIHNhbWUgY3JlZGVudGlhbHMgb3ZlciBhbmQgb3Zlci4gIEdpdAorcHJvdmlkZXMgdHdvIG1ldGhvZHMgdG8gcmVkdWNlIHRoaXMgYW5ub3lhbmNlOgorCisxLiBTdGF0aWMgY29uZmlndXJhdGlvbiBvZiB1c2VybmFtZXMgZm9yIGEgZ2l2ZW4gYXV0aGVudGljYXRpb24gY29udGV4dC4KKworMi4gQ3JlZGVudGlhbCBoZWxwZXJzIHRvIGNhY2hlIG9yIHN0b3JlIHBhc3N3b3Jkcywgb3IgdG8gaW50ZXJhY3Qgd2l0aAorICAgYSBzeXN0ZW0gcGFzc3dvcmQgd2FsbGV0IG9yIGtleWNoYWluLgorCitUaGUgZmlyc3QgaXMgc2ltcGxlIGFuZCBhcHByb3ByaWF0ZSBpZiB5b3UgZG8gbm90IGhhdmUgc2VjdXJlIHN0b3JhZ2UgYXZhaWxhYmxlCitmb3IgYSBwYXNzd29yZC4gSXQgaXMgZ2VuZXJhbGx5IGNvbmZpZ3VyZWQgYnkgYWRkaW5nIHRoaXMgdG8geW91ciBjb25maWc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2NyZWRlbnRpYWwgImh0dHBzOi8vZXhhbXBsZS5jb20iXQorCXVzZXJuYW1lID0gbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVkZW50aWFsIGhlbHBlcnMsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgZXh0ZXJuYWwgcHJvZ3JhbXMgZnJvbSB3aGljaCBHaXQgY2FuCityZXF1ZXN0IGJvdGggdXNlcm5hbWVzIGFuZCBwYXNzd29yZHM7IHRoZXkgdHlwaWNhbGx5IGludGVyZmFjZSB3aXRoIHNlY3VyZQorc3RvcmFnZSBwcm92aWRlZCBieSB0aGUgT1Mgb3Igb3RoZXIgcHJvZ3JhbXMuCisKK1RvIHVzZSBhIGhlbHBlciwgeW91IG11c3QgZmlyc3Qgc2VsZWN0IG9uZSB0byB1c2UuIEdpdCBjdXJyZW50bHkKK2luY2x1ZGVzIHRoZSBmb2xsb3dpbmcgaGVscGVyczoKKworY2FjaGU6OgorCisJQ2FjaGUgY3JlZGVudGlhbHMgaW4gbWVtb3J5IGZvciBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLiBTZWUKKwlsaW5rZ2l0OmdpdC1jcmVkZW50aWFsLWNhY2hlWzFdIGZvciBkZXRhaWxzLgorCitzdG9yZTo6CisKKwlTdG9yZSBjcmVkZW50aWFscyBpbmRlZmluaXRlbHkgb24gZGlzay4gU2VlCisJbGlua2dpdDpnaXQtY3JlZGVudGlhbC1zdG9yZVsxXSBmb3IgZGV0YWlscy4KKworWW91IG1heSBhbHNvIGhhdmUgdGhpcmQtcGFydHkgaGVscGVycyBpbnN0YWxsZWQ7IHNlYXJjaCBmb3IKK2BjcmVkZW50aWFsLSpgIGluIHRoZSBvdXRwdXQgb2YgYGdpdCBoZWxwIC1hYCwgYW5kIGNvbnN1bHQgdGhlCitkb2N1bWVudGF0aW9uIG9mIGluZGl2aWR1YWwgaGVscGVycy4gIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgYSBoZWxwZXIsCit5b3UgY2FuIHRlbGwgR2l0IHRvIHVzZSBpdCBieSBwdXR0aW5nIGl0cyBuYW1lIGludG8gdGhlCitjcmVkZW50aWFsLmhlbHBlciB2YXJpYWJsZS4KKworMS4gRmluZCBhIGhlbHBlci4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhlbHAgLWEgfCBncmVwIGNyZWRlbnRpYWwtCitjcmVkZW50aWFsLWZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisyLiBSZWFkIGl0cyBkZXNjcmlwdGlvbi4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhlbHAgY3JlZGVudGlhbC1mb28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMy4gVGVsbCBHaXQgdG8gdXNlIGl0LgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIGNyZWRlbnRpYWwuaGVscGVyIGZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0NSRURFTlRJQUwgQ09OVEVYVFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGNvbnNpZGVycyBlYWNoIGNyZWRlbnRpYWwgdG8gaGF2ZSBhIGNvbnRleHQgZGVmaW5lZCBieSBhIFVSTC4gVGhpcyBjb250ZXh0CitpcyB1c2VkIHRvIGxvb2sgdXAgY29udGV4dC1zcGVjaWZpYyBjb25maWd1cmF0aW9uLCBhbmQgaXMgcGFzc2VkIHRvIGFueQoraGVscGVycywgd2hpY2ggbWF5IHVzZSBpdCBhcyBhbiBpbmRleCBpbnRvIHNlY3VyZSBzdG9yYWdlLgorCitGb3IgaW5zdGFuY2UsIGltYWdpbmUgd2UgYXJlIGFjY2Vzc2luZyBgaHR0cHM6Ly9leGFtcGxlLmNvbS9mb28uZ2l0YC4gV2hlbiBHaXQKK2xvb2tzIGludG8gYSBjb25maWcgZmlsZSB0byBzZWUgaWYgYSBzZWN0aW9uIG1hdGNoZXMgdGhpcyBjb250ZXh0LCBpdCB3aWxsCitjb25zaWRlciB0aGUgdHdvIGEgbWF0Y2ggaWYgdGhlIGNvbnRleHQgaXMgYSBtb3JlLXNwZWNpZmljIHN1YnNldCBvZiB0aGUKK3BhdHRlcm4gaW4gdGhlIGNvbmZpZyBmaWxlLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgdGhpcyBpbiB5b3VyIGNvbmZpZyBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2NyZWRlbnRpYWwgImh0dHBzOi8vZXhhbXBsZS5jb20iXQorCXVzZXJuYW1lID0gZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGVuIHdlIHdpbGwgbWF0Y2g6IGJvdGggcHJvdG9jb2xzIGFyZSB0aGUgc2FtZSwgYm90aCBob3N0cyBhcmUgdGhlIHNhbWUsIGFuZAordGhlICJwYXR0ZXJuIiBVUkwgZG9lcyBub3QgY2FyZSBhYm91dCB0aGUgcGF0aCBjb21wb25lbnQgYXQgYWxsLiBIb3dldmVyLCB0aGlzCitjb250ZXh0IHdvdWxkIG5vdCBtYXRjaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tjcmVkZW50aWFsICJodHRwczovL2tlcm5lbC5vcmciXQorCXVzZXJuYW1lID0gZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitiZWNhdXNlIHRoZSBob3N0bmFtZXMgZGlmZmVyLiBOb3Igd291bGQgaXQgbWF0Y2ggYGZvby5leGFtcGxlLmNvbWA7IEdpdAorY29tcGFyZXMgaG9zdG5hbWVzIGV4YWN0bHksIHdpdGhvdXQgY29uc2lkZXJpbmcgd2hldGhlciB0d28gaG9zdHMgYXJlIHBhcnQgb2YKK3RoZSBzYW1lIGRvbWFpbi4gTGlrZXdpc2UsIGEgY29uZmlnIGVudHJ5IGZvciBgaHR0cDovL2V4YW1wbGUuY29tYCB3b3VsZCBub3QKK21hdGNoOiBHaXQgY29tcGFyZXMgdGhlIHByb3RvY29scyBleGFjdGx5LiAgSG93ZXZlciwgeW91IG1heSB1c2Ugd2lsZGNhcmRzIGluCit0aGUgZG9tYWluIG5hbWUgYW5kIG90aGVyIHBhdHRlcm4gbWF0Y2hpbmcgdGVjaG5pcXVlcyBhcyB3aXRoIHRoZSBgaHR0cC48dXJsPi4qYAorb3B0aW9ucy4KKworSWYgdGhlICJwYXR0ZXJuIiBVUkwgZG9lcyBpbmNsdWRlIGEgcGF0aCBjb21wb25lbnQsIHRoZW4gdGhpcyB0b28gbXVzdCBtYXRjaAorZXhhY3RseTogdGhlIGNvbnRleHQgYGh0dHBzOi8vZXhhbXBsZS5jb20vYmFyL2Jhei5naXRgIHdpbGwgbWF0Y2ggYSBjb25maWcKK2VudHJ5IGZvciBgaHR0cHM6Ly9leGFtcGxlLmNvbS9iYXIvYmF6LmdpdGAgKGluIGFkZGl0aW9uIHRvIG1hdGNoaW5nIHRoZSBjb25maWcKK2VudHJ5IGZvciBgaHR0cHM6Ly9leGFtcGxlLmNvbWApIGJ1dCB3aWxsIG5vdCBtYXRjaCBhIGNvbmZpZyBlbnRyeSBmb3IKK2BodHRwczovL2V4YW1wbGUuY29tL2JhcmAuCisKKworQ09ORklHVVJBVElPTiBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3B0aW9ucyBmb3IgYSBjcmVkZW50aWFsIGNvbnRleHQgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIGluCitgY3JlZGVudGlhbC4qYCAod2hpY2ggYXBwbGllcyB0byBhbGwgY3JlZGVudGlhbHMpLCBvcgorYGNyZWRlbnRpYWwuPHVybD4uKmAsIHdoZXJlIDx1cmw+IG1hdGNoZXMgdGhlIGNvbnRleHQgYXMgZGVzY3JpYmVkCithYm92ZS4KKworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gZWl0aGVyIGxvY2F0aW9uOgorCitoZWxwZXI6OgorCisJVGhlIG5hbWUgb2YgYW4gZXh0ZXJuYWwgY3JlZGVudGlhbCBoZWxwZXIsIGFuZCBhbnkgYXNzb2NpYXRlZCBvcHRpb25zLgorCUlmIHRoZSBoZWxwZXIgbmFtZSBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCwgdGhlbiB0aGUgc3RyaW5nIGBnaXQKKwljcmVkZW50aWFsLWAgaXMgcHJlcGVuZGVkLiBUaGUgcmVzdWx0aW5nIHN0cmluZyBpcyBleGVjdXRlZCBieSB0aGUKKwlzaGVsbCAoc28sIGZvciBleGFtcGxlLCBzZXR0aW5nIHRoaXMgdG8gYGZvbyAtLW9wdGlvbj1iYXJgIHdpbGwgZXhlY3V0ZQorCWBnaXQgY3JlZGVudGlhbC1mb28gLS1vcHRpb249YmFyYCB2aWEgdGhlIHNoZWxsLiBTZWUgdGhlIG1hbnVhbCBvZgorCXNwZWNpZmljIGhlbHBlcnMgZm9yIGV4YW1wbGVzIG9mIHRoZWlyIHVzZS4KKysKK0lmIHRoZXJlIGFyZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIGBjcmVkZW50aWFsLmhlbHBlcmAgY29uZmlndXJhdGlvbgordmFyaWFibGUsIGVhY2ggaGVscGVyIHdpbGwgYmUgdHJpZWQgaW4gdHVybiwgYW5kIG1heSBwcm92aWRlIGEgdXNlcm5hbWUsCitwYXNzd29yZCwgb3Igbm90aGluZy4gT25jZSBHaXQgaGFzIGFjcXVpcmVkIGJvdGggYSB1c2VybmFtZSBhbmQgYQorcGFzc3dvcmQsIG5vIG1vcmUgaGVscGVycyB3aWxsIGJlIHRyaWVkLgorKworSWYgYGNyZWRlbnRpYWwuaGVscGVyYCBpcyBjb25maWd1cmVkIHRvIHRoZSBlbXB0eSBzdHJpbmcsIHRoaXMgcmVzZXRzCit0aGUgaGVscGVyIGxpc3QgdG8gZW1wdHkgKHNvIHlvdSBtYXkgb3ZlcnJpZGUgYSBoZWxwZXIgc2V0IGJ5IGEKK2xvd2VyLXByaW9yaXR5IGNvbmZpZyBmaWxlIGJ5IGNvbmZpZ3VyaW5nIHRoZSBlbXB0eS1zdHJpbmcgaGVscGVyLAorZm9sbG93ZWQgYnkgd2hhdGV2ZXIgc2V0IG9mIGhlbHBlcnMgeW91IHdvdWxkIGxpa2UpLgorCit1c2VybmFtZTo6CisKKwlBIGRlZmF1bHQgdXNlcm5hbWUsIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIFVSTC4KKwordXNlSHR0cFBhdGg6OgorCisJQnkgZGVmYXVsdCwgR2l0IGRvZXMgbm90IGNvbnNpZGVyIHRoZSAicGF0aCIgY29tcG9uZW50IG9mIGFuIGh0dHAgVVJMCisJdG8gYmUgd29ydGggbWF0Y2hpbmcgdmlhIGV4dGVybmFsIGhlbHBlcnMuIFRoaXMgbWVhbnMgdGhhdCBhIGNyZWRlbnRpYWwKKwlzdG9yZWQgZm9yIGBodHRwczovL2V4YW1wbGUuY29tL2Zvby5naXRgIHdpbGwgYWxzbyBiZSB1c2VkIGZvcgorCWBodHRwczovL2V4YW1wbGUuY29tL2Jhci5naXRgLiBJZiB5b3UgZG8gd2FudCB0byBkaXN0aW5ndWlzaCB0aGVzZQorCWNhc2VzLCBzZXQgdGhpcyBvcHRpb24gdG8gYHRydWVgLgorCisKK0NVU1RPTSBIRUxQRVJTCistLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHdyaXRlIHlvdXIgb3duIGN1c3RvbSBoZWxwZXJzIHRvIGludGVyZmFjZSB3aXRoIGFueSBzeXN0ZW0gaW4KK3doaWNoIHlvdSBrZWVwIGNyZWRlbnRpYWxzLgorCitDcmVkZW50aWFsIGhlbHBlcnMgYXJlIHByb2dyYW1zIGV4ZWN1dGVkIGJ5IEdpdCB0byBmZXRjaCBvciBzYXZlCitjcmVkZW50aWFscyBmcm9tIGFuZCB0byBsb25nLXRlcm0gc3RvcmFnZSAod2hlcmUgImxvbmctdGVybSIgaXMgc2ltcGx5Citsb25nZXIgdGhhbiBhIHNpbmdsZSBHaXQgcHJvY2VzczsgZS5nLiwgY3JlZGVudGlhbHMgbWF5IGJlIHN0b3JlZAoraW4tbWVtb3J5IGZvciBhIGZldyBtaW51dGVzLCBvciBpbmRlZmluaXRlbHkgb24gZGlzaykuCisKK0VhY2ggaGVscGVyIGlzIHNwZWNpZmllZCBieSBhIHNpbmdsZSBzdHJpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIGBjcmVkZW50aWFsLmhlbHBlcmAgKGFuZCBvdGhlcnMsIHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorVGhlIHN0cmluZyBpcyB0cmFuc2Zvcm1lZCBieSBHaXQgaW50byBhIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgdXNpbmcKK3RoZXNlIHJ1bGVzOgorCisgIDEuIElmIHRoZSBoZWxwZXIgc3RyaW5nIGJlZ2lucyB3aXRoICIhIiwgaXQgaXMgY29uc2lkZXJlZCBhIHNoZWxsCisgICAgIHNuaXBwZXQsIGFuZCBldmVyeXRoaW5nIGFmdGVyIHRoZSAiISIgYmVjb21lcyB0aGUgY29tbWFuZC4KKworICAyLiBPdGhlcndpc2UsIGlmIHRoZSBoZWxwZXIgc3RyaW5nIGJlZ2lucyB3aXRoIGFuIGFic29sdXRlIHBhdGgsIHRoZQorICAgICB2ZXJiYXRpbSBoZWxwZXIgc3RyaW5nIGJlY29tZXMgdGhlIGNvbW1hbmQuCisKKyAgMy4gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nICJnaXQgY3JlZGVudGlhbC0iIGlzIHByZXBlbmRlZCB0byB0aGUgaGVscGVyCisgICAgIHN0cmluZywgYW5kIHRoZSByZXN1bHQgYmVjb21lcyB0aGUgY29tbWFuZC4KKworVGhlIHJlc3VsdGluZyBjb21tYW5kIHRoZW4gaGFzIGFuICJvcGVyYXRpb24iIGFyZ3VtZW50IGFwcGVuZGVkIHRvIGl0Cisoc2VlIGJlbG93IGZvciBkZXRhaWxzKSwgYW5kIHRoZSByZXN1bHQgaXMgZXhlY3V0ZWQgYnkgdGhlIHNoZWxsLgorCitIZXJlIGFyZSBzb21lIGV4YW1wbGUgc3BlY2lmaWNhdGlvbnM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcnVuICJnaXQgY3JlZGVudGlhbC1mb28iCitmb28KKworIyBzYW1lIGFzIGFib3ZlLCBidXQgcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgaGVscGVyCitmb28gLS1iYXI9YmF6CisKKyMgdGhlIGFyZ3VtZW50cyBhcmUgcGFyc2VkIGJ5IHRoZSBzaGVsbCwgc28gdXNlIHNoZWxsCisjIHF1b3RpbmcgaWYgbmVjZXNzYXJ5Citmb28gLS1iYXI9IndoaXRlc3BhY2UgYXJnIgorCisjIHlvdSBjYW4gYWxzbyB1c2UgYW4gYWJzb2x1dGUgcGF0aCwgd2hpY2ggd2lsbCBub3QgdXNlIHRoZSBnaXQgd3JhcHBlcgorL3BhdGgvdG8vbXkvaGVscGVyIC0td2l0aC1hcmd1bWVudHMKKworIyBvciB5b3UgY2FuIHNwZWNpZnkgeW91ciBvd24gc2hlbGwgc25pcHBldAorIWYoKSB7IGVjaG8gInBhc3N3b3JkPWBjYXQgJEhPTUUvLnNlY3JldGAiOyB9OyBmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlbmVyYWxseSBzcGVha2luZywgcnVsZSAoMykgYWJvdmUgaXMgdGhlIHNpbXBsZXN0IGZvciB1c2VycyB0byBzcGVjaWZ5LgorQXV0aG9ycyBvZiBjcmVkZW50aWFsIGhlbHBlcnMgc2hvdWxkIG1ha2UgYW4gZWZmb3J0IHRvIGFzc2lzdCB0aGVpcgordXNlcnMgYnkgbmFtaW5nIHRoZWlyIHByb2dyYW0gImdpdC1jcmVkZW50aWFsLSROQU1FIiwgYW5kIHB1dHRpbmcgaXQgaW4KK3RoZSBgJFBBVEhgIG9yIGAkR0lUX0VYRUNfUEFUSGAgZHVyaW5nIGluc3RhbGxhdGlvbiwgd2hpY2ggd2lsbCBhbGxvdyBhCit1c2VyIHRvIGVuYWJsZSBpdCB3aXRoIGBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICROQU1FYC4KKworV2hlbiBhIGhlbHBlciBpcyBleGVjdXRlZCwgaXQgd2lsbCBoYXZlIG9uZSAib3BlcmF0aW9uIiBhcmd1bWVudAorYXBwZW5kZWQgdG8gaXRzIGNvbW1hbmQgbGluZSwgd2hpY2ggaXMgb25lIG9mOgorCitgZ2V0YDo6CisKKwlSZXR1cm4gYSBtYXRjaGluZyBjcmVkZW50aWFsLCBpZiBhbnkgZXhpc3RzLgorCitgc3RvcmVgOjoKKworCVN0b3JlIHRoZSBjcmVkZW50aWFsLCBpZiBhcHBsaWNhYmxlIHRvIHRoZSBoZWxwZXIuCisKK2BlcmFzZWA6OgorCisJUmVtb3ZlIGEgbWF0Y2hpbmcgY3JlZGVudGlhbCwgaWYgYW55LCBmcm9tIHRoZSBoZWxwZXIncyBzdG9yYWdlLgorCitUaGUgZGV0YWlscyBvZiB0aGUgY3JlZGVudGlhbCB3aWxsIGJlIHByb3ZpZGVkIG9uIHRoZSBoZWxwZXIncyBzdGRpbgorc3RyZWFtLiBUaGUgZXhhY3QgZm9ybWF0IGlzIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC9vdXRwdXQgZm9ybWF0IG9mIHRoZQorYGdpdCBjcmVkZW50aWFsYCBwbHVtYmluZyBjb21tYW5kIChzZWUgdGhlIHNlY3Rpb24gYElOUFVUL09VVFBVVAorRk9STUFUYCBpbiBsaW5rZ2l0OmdpdC1jcmVkZW50aWFsWzFdIGZvciBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24pLgorCitGb3IgYSBgZ2V0YCBvcGVyYXRpb24sIHRoZSBoZWxwZXIgc2hvdWxkIHByb2R1Y2UgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgb24KK3N0ZG91dCBpbiB0aGUgc2FtZSBmb3JtYXQgKHNlZSBsaW5rZ2l0OmdpdC1jcmVkZW50aWFsWzFdIGZvciBjb21tb24KK2F0dHJpYnV0ZXMpLiBBIGhlbHBlciBpcyBmcmVlIHRvIHByb2R1Y2UgYSBzdWJzZXQsIG9yIGV2ZW4gbm8gdmFsdWVzIGF0CithbGwgaWYgaXQgaGFzIG5vdGhpbmcgdXNlZnVsIHRvIHByb3ZpZGUuIEFueSBwcm92aWRlZCBhdHRyaWJ1dGVzIHdpbGwKK292ZXJ3cml0ZSB0aG9zZSBhbHJlYWR5IGtub3duIGFib3V0IGJ5IEdpdC4gIElmIGEgaGVscGVyIG91dHB1dHMgYQorYHF1aXRgIGF0dHJpYnV0ZSB3aXRoIGEgdmFsdWUgb2YgYHRydWVgIG9yIGAxYCwgbm8gZnVydGhlciBoZWxwZXJzIHdpbGwKK2JlIGNvbnN1bHRlZCwgbm9yIHdpbGwgdGhlIHVzZXIgYmUgcHJvbXB0ZWQgKGlmIG5vIGNyZWRlbnRpYWwgaGFzIGJlZW4KK3Byb3ZpZGVkLCB0aGUgb3BlcmF0aW9uIHdpbGwgdGhlbiBmYWlsKS4KKworRm9yIGEgYHN0b3JlYCBvciBgZXJhc2VgIG9wZXJhdGlvbiwgdGhlIGhlbHBlcidzIG91dHB1dCBpcyBpZ25vcmVkLgorSWYgaXQgZmFpbHMgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiwgaXQgbWF5IGNvbXBsYWluIHRvCitzdGRlcnIgdG8gaW5mb3JtIHRoZSB1c2VyLiBJZiBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQKK29wZXJhdGlvbiAoZS5nLiwgYSByZWFkLW9ubHkgc3RvcmUpLCBpdCBzaG91bGQgc2lsZW50bHkgaWdub3JlIHRoZQorcmVxdWVzdC4KKworSWYgYSBoZWxwZXIgcmVjZWl2ZXMgYW55IG90aGVyIG9wZXJhdGlvbiwgaXQgc2hvdWxkIHNpbGVudGx5IGlnbm9yZSB0aGUKK3JlcXVlc3QuIFRoaXMgbGVhdmVzIHJvb20gZm9yIGZ1dHVyZSBvcGVyYXRpb25zIHRvIGJlIGFkZGVkIChvbGRlcgoraGVscGVycyB3aWxsIGp1c3QgaWdub3JlIHRoZSBuZXcgcmVxdWVzdHMpLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZDEyODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0CkBAIC0wLDAgKzEsMjA2IEBACitnaXRjdnMtbWlncmF0aW9uKDcpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGN2cy1taWdyYXRpb24gLSBHaXQgZm9yIENWUyB1c2VycworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY3ZzaW1wb3J0JyAqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgZGlmZmVycyBmcm9tIENWUyBpbiB0aGF0IGV2ZXJ5IHdvcmtpbmcgdHJlZSBjb250YWlucyBhIHJlcG9zaXRvcnkgd2l0aAorYSBmdWxsIGNvcHkgb2YgdGhlIHByb2plY3QgaGlzdG9yeSwgYW5kIG5vIHJlcG9zaXRvcnkgaXMgaW5oZXJlbnRseSBtb3JlCitpbXBvcnRhbnQgdGhhbiBhbnkgb3RoZXIuICBIb3dldmVyLCB5b3UgY2FuIGVtdWxhdGUgdGhlIENWUyBtb2RlbCBieQorZGVzaWduYXRpbmcgYSBzaW5nbGUgc2hhcmVkIHJlcG9zaXRvcnkgd2hpY2ggcGVvcGxlIGNhbiBzeW5jaHJvbml6ZSB3aXRoOwordGhpcyBkb2N1bWVudCBleHBsYWlucyBob3cgdG8gZG8gdGhhdC4KKworU29tZSBiYXNpYyBmYW1pbGlhcml0eSB3aXRoIEdpdCBpcyByZXF1aXJlZC4gSGF2aW5nIGdvbmUgdGhyb3VnaAorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSBhbmQKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10gc2hvdWxkIGJlIHN1ZmZpY2llbnQuCisKK0RldmVsb3BpbmcgYWdhaW5zdCBhIHNoYXJlZCByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3NlIGEgc2hhcmVkIHJlcG9zaXRvcnkgaXMgc2V0IHVwIGluIC9wdWIvcmVwby5naXQgb24gdGhlIGhvc3QKK2Zvby5jb20uICBUaGVuIGFzIGFuIGluZGl2aWR1YWwgY29tbWl0dGVyIHlvdSBjYW4gY2xvbmUgdGhlIHNoYXJlZAorcmVwb3NpdG9yeSBvdmVyIHNzaCB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGZvby5jb206L3B1Yi9yZXBvLmdpdC8gbXktcHJvamVjdAorJCBjZCBteS1wcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIGhhY2sgYXdheS4gIFRoZSBlcXVpdmFsZW50IG9mICdjdnMgdXBkYXRlJyBpcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggbWVyZ2VzIGluIGFueSB3b3JrIHRoYXQgb3RoZXJzIG1pZ2h0IGhhdmUgZG9uZSBzaW5jZSB0aGUgY2xvbmUKK29wZXJhdGlvbi4gIElmIHRoZXJlIGFyZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLCBjb21taXQKK3RoZW0gZmlyc3QgYmVmb3JlIHJ1bm5pbmcgZ2l0IHB1bGwuCisKK1tOT1RFXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSAncHVsbCcgY29tbWFuZCBrbm93cyB3aGVyZSB0byBnZXQgdXBkYXRlcyBmcm9tIGJlY2F1c2Ugb2YgY2VydGFpbgorY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCB3ZXJlIHNldCBieSB0aGUgZmlyc3QgJ2dpdCBjbG9uZScKK2NvbW1hbmQ7IHNlZSBgZ2l0IGNvbmZpZyAtbGAgYW5kIHRoZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gbWFuCitwYWdlIGZvciBkZXRhaWxzLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IGNhbiB1cGRhdGUgdGhlIHNoYXJlZCByZXBvc2l0b3J5IHdpdGggeW91ciBjaGFuZ2VzIGJ5IGZpcnN0IGNvbW1pdHRpbmcKK3lvdXIgY2hhbmdlcywgYW5kIHRoZW4gdXNpbmcgdGhlICdnaXQgcHVzaCcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byAicHVzaCIgdGhvc2UgY29tbWl0cyB0byB0aGUgc2hhcmVkIHJlcG9zaXRvcnkuICBJZiBzb21lb25lIGVsc2UgaGFzCit1cGRhdGVkIHRoZSByZXBvc2l0b3J5IG1vcmUgcmVjZW50bHksICdnaXQgcHVzaCcsIGxpa2UgJ2N2cyBjb21taXQnLCB3aWxsCitjb21wbGFpbiwgaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCBwdWxsIGFueSBjaGFuZ2VzIGJlZm9yZSBhdHRlbXB0aW5nIHRoZQorcHVzaCBhZ2Fpbi4KKworSW4gdGhlICdnaXQgcHVzaCcgY29tbWFuZCBhYm92ZSB3ZSBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgYnJhbmNoCit0byB1cGRhdGUgKGBtYXN0ZXJgKS4gIElmIHdlIGxlYXZlIHRoYXQgb3V0LCAnZ2l0IHB1c2gnIHRyaWVzIHRvIHVwZGF0ZQorYW55IGJyYW5jaGVzIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhIGJyYW5jaAoraW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkuICBTbyB0aGUgbGFzdCAncHVzaCcgY2FuIGJlIGRvbmUgd2l0aCBlaXRoZXIgb2Y6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBvcmlnaW4KKyQgZ2l0IHB1c2ggZm9vLmNvbTovcHViL3Byb2plY3QuZ2l0LworLS0tLS0tLS0tLS0tCisKK2FzIGxvbmcgYXMgdGhlIHNoYXJlZCByZXBvc2l0b3J5IGRvZXMgbm90IGhhdmUgYW55IGJyYW5jaGVzCitvdGhlciB0aGFuIGBtYXN0ZXJgLgorCitTZXR0aW5nIFVwIGEgU2hhcmVkIFJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBhc3N1bWUgeW91IGhhdmUgYWxyZWFkeSBjcmVhdGVkIGEgR2l0IHJlcG9zaXRvcnkgZm9yIHlvdXIgcHJvamVjdCwKK3Bvc3NpYmx5IGNyZWF0ZWQgZnJvbSBzY3JhdGNoIG9yIGZyb20gYSB0YXJiYWxsIChzZWUKK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10pLCBvciBpbXBvcnRlZCBmcm9tIGFuIGFscmVhZHkgZXhpc3RpbmcgQ1ZTCityZXBvc2l0b3J5IChzZWUgdGhlIG5leHQgc2VjdGlvbikuCisKK0Fzc3VtZSB5b3VyIGV4aXN0aW5nIHJlcG8gaXMgYXQgL2hvbWUvYWxpY2UvbXlwcm9qZWN0LiAgQ3JlYXRlIGEgbmV3ICJiYXJlIgorcmVwb3NpdG9yeSAoYSByZXBvc2l0b3J5IHdpdGhvdXQgYSB3b3JraW5nIHRyZWUpIGFuZCBmZXRjaCB5b3VyIHByb2plY3QgaW50bworaXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciAvcHViL215LXJlcG8uZ2l0CiskIGNkIC9wdWIvbXktcmVwby5naXQKKyQgZ2l0IC0tYmFyZSBpbml0IC0tc2hhcmVkCiskIGdpdCAtLWJhcmUgZmV0Y2ggL2hvbWUvYWxpY2UvbXlwcm9qZWN0IG1hc3RlcjptYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOZXh0LCBnaXZlIGV2ZXJ5IHRlYW0gbWVtYmVyIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoaXMgcmVwb3NpdG9yeS4gIE9uZQorZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB0byBnaXZlIGFsbCB0aGUgdGVhbSBtZW1iZXJzIHNzaCBhY2Nlc3MgdG8gdGhlCittYWNoaW5lIHdoZXJlIHRoZSByZXBvc2l0b3J5IGlzIGhvc3RlZC4gIElmIHlvdSBkb24ndCB3YW50IHRvIGdpdmUgdGhlbSBhCitmdWxsIHNoZWxsIG9uIHRoZSBtYWNoaW5lLCB0aGVyZSBpcyBhIHJlc3RyaWN0ZWQgc2hlbGwgd2hpY2ggb25seSBhbGxvd3MKK3VzZXJzIHRvIGRvIEdpdCBwdXNoZXMgYW5kIHB1bGxzOyBzZWUgbGlua2dpdDpnaXQtc2hlbGxbMV0uCisKK1B1dCBhbGwgdGhlIGNvbW1pdHRlcnMgaW4gdGhlIHNhbWUgZ3JvdXAsIGFuZCBtYWtlIHRoZSByZXBvc2l0b3J5Cit3cml0YWJsZSBieSB0aGF0IGdyb3VwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2hncnAgLVIgJGdyb3VwIC9wdWIvbXktcmVwby5naXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWtlIHN1cmUgY29tbWl0dGVycyBoYXZlIGEgdW1hc2sgb2YgYXQgbW9zdCAwMjcsIHNvIHRoYXQgdGhlIGRpcmVjdG9yaWVzCit0aGV5IGNyZWF0ZSBhcmUgd3JpdGFibGUgYW5kIHNlYXJjaGFibGUgYnkgb3RoZXIgZ3JvdXAgbWVtYmVycy4KKworSW1wb3J0aW5nIGEgQ1ZTIGFyY2hpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05PVEU6IFRoZXNlIGluc3RydWN0aW9ucyB1c2UgdGhlIGBnaXQtY3ZzaW1wb3J0YCBzY3JpcHQgd2hpY2ggc2hpcHMgd2l0aAorZ2l0LCBidXQgb3RoZXIgaW1wb3J0ZXJzIG1heSBwcm92aWRlIGJldHRlciByZXN1bHRzLiBTZWUgdGhlIG5vdGUgaW4KK2xpbmtnaXQ6Z2l0LWN2c2ltcG9ydFsxXSBmb3Igb3RoZXIgb3B0aW9ucy4KKworRmlyc3QsIGluc3RhbGwgdmVyc2lvbiAyLjEgb3IgaGlnaGVyIG9mIGN2c3BzIGZyb20KK2h0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXl2aXQvY3ZzcHNbaHR0cHM6Ly9naXRodWIuY29tL2FuZHJleXZpdC9jdnNwc10gYW5kIG1ha2UKK3N1cmUgaXQgaXMgaW4geW91ciBwYXRoLiAgVGhlbiBjZCB0byBhIGNoZWNrZWQgb3V0IENWUyB3b3JraW5nIGRpcmVjdG9yeQorb2YgdGhlIHByb2plY3QgeW91IGFyZSBpbnRlcmVzdGVkIGluIGFuZCBydW4gbGlua2dpdDpnaXQtY3ZzaW1wb3J0WzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjdnNpbXBvcnQgLUMgPGRlc3RpbmF0aW9uPiA8bW9kdWxlPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHB1dHMgYSBHaXQgYXJjaGl2ZSBvZiB0aGUgbmFtZWQgQ1ZTIG1vZHVsZSBpbiB0aGUgZGlyZWN0b3J5Cis8ZGVzdGluYXRpb24+LCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LgorCitUaGUgaW1wb3J0IGNoZWNrcyBvdXQgZnJvbSBDVlMgZXZlcnkgcmV2aXNpb24gb2YgZXZlcnkgZmlsZS4gIFJlcG9ydGVkbHkKK2N2c2ltcG9ydCBjYW4gYXZlcmFnZSBzb21lIHR3ZW50eSByZXZpc2lvbnMgcGVyIHNlY29uZCwgc28gZm9yIGEKK21lZGl1bS1zaXplZCBwcm9qZWN0IHRoaXMgc2hvdWxkIG5vdCB0YWtlIG1vcmUgdGhhbiBhIGNvdXBsZSBvZiBtaW51dGVzLgorTGFyZ2VyIHByb2plY3RzIG9yIHJlbW90ZSByZXBvc2l0b3JpZXMgbWF5IHRha2UgbG9uZ2VyLgorCitUaGUgbWFpbiB0cnVuayBpcyBzdG9yZWQgaW4gdGhlIEdpdCBicmFuY2ggbmFtZWQgYG9yaWdpbmAsIGFuZCBhZGRpdGlvbmFsCitDVlMgYnJhbmNoZXMgYXJlIHN0b3JlZCBpbiBHaXQgYnJhbmNoZXMgd2l0aCB0aGUgc2FtZSBuYW1lcy4gIFRoZSBtb3N0CityZWNlbnQgdmVyc2lvbiBvZiB0aGUgbWFpbiB0cnVuayBpcyBhbHNvIGxlZnQgY2hlY2tlZCBvdXQgb24gdGhlIGBtYXN0ZXJgCiticmFuY2gsIHNvIHlvdSBjYW4gc3RhcnQgYWRkaW5nIHlvdXIgb3duIGNoYW5nZXMgcmlnaHQgYXdheS4KKworVGhlIGltcG9ydCBpcyBpbmNyZW1lbnRhbCwgc28gaWYgeW91IGNhbGwgaXQgYWdhaW4gbmV4dCBtb250aCBpdCB3aWxsCitmZXRjaCBhbnkgQ1ZTIHVwZGF0ZXMgdGhhdCBoYXZlIGJlZW4gbWFkZSBpbiB0aGUgbWVhbnRpbWUuICBGb3IgdGhpcyB0bword29yaywgeW91IG11c3Qgbm90IG1vZGlmeSB0aGUgaW1wb3J0ZWQgYnJhbmNoZXM7IGluc3RlYWQsIGNyZWF0ZSBuZXcKK2JyYW5jaGVzIGZvciB5b3VyIG93biBjaGFuZ2VzLCBhbmQgbWVyZ2UgaW4gdGhlIGltcG9ydGVkIGJyYW5jaGVzIGFzCituZWNlc3NhcnkuCisKK0lmIHlvdSB3YW50IGEgc2hhcmVkIHJlcG9zaXRvcnksIHlvdSB3aWxsIG5lZWQgdG8gbWFrZSBhIGJhcmUgY2xvbmUKK29mIHRoZSBpbXBvcnRlZCBkaXJlY3RvcnksIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhlbiB0cmVhdCB0aGUgaW1wb3J0ZWQKK2RpcmVjdG9yeSBhcyBhbm90aGVyIGRldmVsb3BtZW50IGNsb25lIGZvciBwdXJwb3NlcyBvZiBtZXJnaW5nCitpbmNyZW1lbnRhbCBpbXBvcnRzLgorCitBZHZhbmNlZCBTaGFyZWQgUmVwb3NpdG9yeSBNYW5hZ2VtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgc2NyaXB0cyBjYWxsZWQgImhvb2tzIiB0byBiZSBydW4gYXQgY2VydGFpbgorcG9pbnRzLiAgWW91IGNhbiB1c2UgdGhlc2UsIGZvciBleGFtcGxlLCB0byBzZW5kIGFsbCBjb21taXRzIHRvIHRoZSBzaGFyZWQKK3JlcG9zaXRvcnkgdG8gYSBtYWlsaW5nIGxpc3QuICBTZWUgbGlua2dpdDpnaXRob29rc1s1XS4KKworWW91IGNhbiBlbmZvcmNlIGZpbmVyIGdyYWluZWQgcGVybWlzc2lvbnMgdXNpbmcgdXBkYXRlIGhvb2tzLiAgU2VlCitsaW5rOmhvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUuaHRtbFtDb250cm9sbGluZyBhY2Nlc3MgdG8gYnJhbmNoZXMgdXNpbmcKK3VwZGF0ZSBob29rc10uCisKK1Byb3ZpZGluZyBDVlMgQWNjZXNzIHRvIGEgR2l0IFJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBwcm92aWRlIHRydWUgQ1ZTIGFjY2VzcyB0byBhIEdpdCByZXBvc2l0b3J5LCBzbwordGhhdCBkZXZlbG9wZXJzIGNhbiBzdGlsbCB1c2UgQ1ZTOyBzZWUgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdIGZvcgorZGV0YWlscy4KKworQWx0ZXJuYXRpdmUgRGV2ZWxvcG1lbnQgTW9kZWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ1ZTIHVzZXJzIGFyZSBhY2N1c3RvbWVkIHRvIGdpdmluZyBhIGdyb3VwIG9mIGRldmVsb3BlcnMgY29tbWl0IGFjY2VzcyB0bworYSBjb21tb24gcmVwb3NpdG9yeS4gIEFzIHdlJ3ZlIHNlZW4sIHRoaXMgaXMgYWxzbyBwb3NzaWJsZSB3aXRoIEdpdC4KK0hvd2V2ZXIsIHRoZSBkaXN0cmlidXRlZCBuYXR1cmUgb2YgR2l0IGFsbG93cyBvdGhlciBkZXZlbG9wbWVudCBtb2RlbHMsCithbmQgeW91IG1heSB3YW50IHRvIGZpcnN0IGNvbnNpZGVyIHdoZXRoZXIgb25lIG9mIHRoZW0gbWlnaHQgYmUgYSBiZXR0ZXIKK2ZpdCBmb3IgeW91ciBwcm9qZWN0LgorCitGb3IgZXhhbXBsZSwgeW91IGNhbiBjaG9vc2UgYSBzaW5nbGUgcGVyc29uIHRvIG1haW50YWluIHRoZSBwcm9qZWN0J3MKK3ByaW1hcnkgcHVibGljIHJlcG9zaXRvcnkuICBPdGhlciBkZXZlbG9wZXJzIHRoZW4gY2xvbmUgdGhpcyByZXBvc2l0b3J5CithbmQgZWFjaCB3b3JrIGluIHRoZWlyIG93biBjbG9uZS4gIFdoZW4gdGhleSBoYXZlIGEgc2VyaWVzIG9mIGNoYW5nZXMgdGhhdAordGhleSdyZSBoYXBweSB3aXRoLCB0aGV5IGFzayB0aGUgbWFpbnRhaW5lciB0byBwdWxsIGZyb20gdGhlIGJyYW5jaAorY29udGFpbmluZyB0aGUgY2hhbmdlcy4gIFRoZSBtYWludGFpbmVyIHJldmlld3MgdGhlaXIgY2hhbmdlcyBhbmQgcHVsbHMKK3RoZW0gaW50byB0aGUgcHJpbWFyeSByZXBvc2l0b3J5LCB3aGljaCBvdGhlciBkZXZlbG9wZXJzIHB1bGwgZnJvbSBhcworbmVjZXNzYXJ5IHRvIHN0YXkgY29vcmRpbmF0ZWQuICBUaGUgTGludXgga2VybmVsIGFuZCBvdGhlciBwcm9qZWN0cyB1c2UKK3ZhcmlhbnRzIG9mIHRoaXMgbW9kZWwuCisKK1dpdGggYSBzbWFsbCBncm91cCwgZGV2ZWxvcGVycyBtYXkganVzdCBwdWxsIGNoYW5nZXMgZnJvbSBlYWNoIG90aGVyJ3MKK3JlcG9zaXRvcmllcyB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGNlbnRyYWwgbWFpbnRhaW5lci4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLAorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3MGQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ZGlmZmNvcmUudHh0CkBAIC0wLDAgKzEsMjkyIEBACitnaXRkaWZmY29yZSg3KQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0ZGlmZmNvcmUgLSBUd2Vha2luZyBkaWZmIG91dHB1dAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZicgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhlIGRpZmYgY29tbWFuZHMgJ2dpdCBkaWZmLWluZGV4JywgJ2dpdCBkaWZmLWZpbGVzJywgYW5kICdnaXQgZGlmZi10cmVlJworY2FuIGJlIHRvbGQgdG8gbWFuaXB1bGF0ZSBkaWZmZXJlbmNlcyB0aGV5IGZpbmQgaW4KK3VuY29udmVudGlvbmFsIHdheXMgYmVmb3JlIHNob3dpbmcgJ2RpZmYnIG91dHB1dC4gIFRoZSBtYW5pcHVsYXRpb24KK2lzIGNvbGxlY3RpdmVseSBjYWxsZWQgImRpZmZjb3JlIHRyYW5zZm9ybWF0aW9uIi4gIFRoaXMgc2hvcnQgbm90ZQorZGVzY3JpYmVzIHdoYXQgdGhleSBhcmUgYW5kIGhvdyB0byB1c2UgdGhlbSB0byBwcm9kdWNlICdkaWZmJyBvdXRwdXQKK3RoYXQgaXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgdGhhbiB0aGUgY29udmVudGlvbmFsIGtpbmQuCisKKworVGhlIGNoYWluIG9mIG9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ2dpdCBkaWZmLXthc3Rlcmlza30nIGZhbWlseSB3b3JrcyBieSBmaXJzdCBjb21wYXJpbmcgdHdvIHNldHMgb2YKK2ZpbGVzOgorCisgLSAnZ2l0IGRpZmYtaW5kZXgnIGNvbXBhcmVzIGNvbnRlbnRzIG9mIGEgInRyZWUiIG9iamVjdCBhbmQgdGhlCisgICB3b3JraW5nIGRpcmVjdG9yeSAod2hlbiBgLS1jYWNoZWRgIGZsYWcgaXMgbm90IHVzZWQpIG9yIGEKKyAgICJ0cmVlIiBvYmplY3QgYW5kIHRoZSBpbmRleCBmaWxlICh3aGVuIGAtLWNhY2hlZGAgZmxhZyBpcworICAgdXNlZCk7CisKKyAtICdnaXQgZGlmZi1maWxlcycgY29tcGFyZXMgY29udGVudHMgb2YgdGhlIGluZGV4IGZpbGUgYW5kIHRoZQorICAgd29ya2luZyBkaXJlY3Rvcnk7CisKKyAtICdnaXQgZGlmZi10cmVlJyBjb21wYXJlcyBjb250ZW50cyBvZiB0d28gInRyZWUiIG9iamVjdHM7CisKK0luIGFsbCBvZiB0aGVzZSBjYXNlcywgdGhlIGNvbW1hbmRzIHRoZW1zZWx2ZXMgZmlyc3Qgb3B0aW9uYWxseSBsaW1pdAordGhlIHR3byBzZXRzIG9mIGZpbGVzIGJ5IGFueSBwYXRoc3BlY3MgZ2l2ZW4gb24gdGhlaXIgY29tbWFuZC1saW5lcywKK2FuZCBjb21wYXJlIGNvcnJlc3BvbmRpbmcgcGF0aHMgaW4gdGhlIHR3byByZXN1bHRpbmcgc2V0cyBvZiBmaWxlcy4KKworVGhlIHBhdGhzcGVjcyBhcmUgdXNlZCB0byBsaW1pdCB0aGUgd29ybGQgZGlmZiBvcGVyYXRlcyBpbi4gIFRoZXkgcmVtb3ZlCit0aGUgZmlsZXBhaXJzIG91dHNpZGUgdGhlIHNwZWNpZmllZCBzZXRzIG9mIHBhdGhuYW1lcy4gIEUuZy4gSWYgdGhlCitpbnB1dCBzZXQgb2YgZmlsZXBhaXJzIGluY2x1ZGVkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMTAwNjQ0IGJjZDEyMzQuLi4gMDEyMzQ1Ni4uLiBNIGp1bmtmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYnV0IHRoZSBjb21tYW5kIGludm9jYXRpb24gd2FzIGBnaXQgZGlmZi1maWxlcyBteWZpbGVgLCB0aGVuIHRoZQoranVua2ZpbGUgZW50cnkgd291bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGJlY2F1c2Ugb25seSAibXlmaWxlIgoraXMgdW5kZXIgY29uc2lkZXJhdGlvbi4KKworVGhlIHJlc3VsdCBvZiBjb21wYXJpc29uIGlzIHBhc3NlZCBmcm9tIHRoZXNlIGNvbW1hbmRzIHRvIHdoYXQgaXMKK2ludGVybmFsbHkgY2FsbGVkICJkaWZmY29yZSIsIGluIGEgZm9ybWF0IHNpbWlsYXIgdG8gd2hhdCBpcyBvdXRwdXQKK3doZW4gdGhlIC1wIG9wdGlvbiBpcyBub3QgdXNlZC4gIEUuZy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbi1wbGFjZSBlZGl0ICA6MTAwNjQ0IDEwMDY0NCBiY2QxMjM0Li4uIDAxMjM0NTYuLi4gTSBmaWxlMAorY3JlYXRlICAgICAgICAgOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAxMjM0NTY3Li4uIEEgZmlsZTQKK2RlbGV0ZSAgICAgICAgIDoxMDA2NDQgMDAwMDAwIDEyMzQ1NjcuLi4gMDAwMDAwMC4uLiBEIGZpbGU1Cit1bm1lcmdlZCAgICAgICA6MDAwMDAwIDAwMDAwMCAwMDAwMDAwLi4uIDAwMDAwMDAuLi4gVSBmaWxlNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkaWZmY29yZSBtZWNoYW5pc20gaXMgZmVkIGEgbGlzdCBvZiBzdWNoIGNvbXBhcmlzb24gcmVzdWx0cworKGVhY2ggb2Ygd2hpY2ggaXMgY2FsbGVkICJmaWxlcGFpciIsIGFsdGhvdWdoIGF0IHRoaXMgcG9pbnQgZWFjaAorb2YgdGhlbSB0YWxrcyBhYm91dCBhIHNpbmdsZSBmaWxlKSwgYW5kIHRyYW5zZm9ybXMgc3VjaCBhIGxpc3QKK2ludG8gYW5vdGhlciBsaXN0LiAgVGhlcmUgYXJlIGN1cnJlbnRseSA1IHN1Y2ggdHJhbnNmb3JtYXRpb25zOgorCistIGRpZmZjb3JlLWJyZWFrCistIGRpZmZjb3JlLXJlbmFtZQorLSBkaWZmY29yZS1tZXJnZS1icm9rZW4KKy0gZGlmZmNvcmUtcGlja2F4ZQorLSBkaWZmY29yZS1vcmRlcgorCitUaGVzZSBhcmUgYXBwbGllZCBpbiBzZXF1ZW5jZS4gIFRoZSBzZXQgb2YgZmlsZXBhaXJzICdnaXQgZGlmZi17YXN0ZXJpc2t9JworY29tbWFuZHMgZmluZCBhcmUgdXNlZCBhcyB0aGUgaW5wdXQgdG8gZGlmZmNvcmUtYnJlYWssIGFuZAordGhlIG91dHB1dCBmcm9tIGRpZmZjb3JlLWJyZWFrIGlzIHVzZWQgYXMgdGhlIGlucHV0IHRvIHRoZQorbmV4dCB0cmFuc2Zvcm1hdGlvbi4gIFRoZSBmaW5hbCByZXN1bHQgaXMgdGhlbiBwYXNzZWQgdG8gdGhlCitvdXRwdXQgcm91dGluZSBhbmQgZ2VuZXJhdGVzIGVpdGhlciBkaWZmLXJhdyBmb3JtYXQgKHNlZSBPdXRwdXQKK2Zvcm1hdCBzZWN0aW9ucyBvZiB0aGUgbWFudWFsIGZvciAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMpIG9yCitkaWZmLXBhdGNoIGZvcm1hdC4KKworCitkaWZmY29yZS1icmVhazogRm9yIFNwbGl0dGluZyBVcCBDb21wbGV0ZSBSZXdyaXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNlY29uZCB0cmFuc2Zvcm1hdGlvbiBpbiB0aGUgY2hhaW4gaXMgZGlmZmNvcmUtYnJlYWssIGFuZCBpcworY29udHJvbGxlZCBieSB0aGUgLUIgb3B0aW9uIHRvIHRoZSAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMuICBUaGlzIGlzCit1c2VkIHRvIGRldGVjdCBhIGZpbGVwYWlyIHRoYXQgcmVwcmVzZW50cyAiY29tcGxldGUgcmV3cml0ZSIgYW5kCiticmVhayBzdWNoIGZpbGVwYWlyIGludG8gdHdvIGZpbGVwYWlycyB0aGF0IHJlcHJlc2VudCBkZWxldGUgYW5kCitjcmVhdGUuICBFLmcuICBJZiB0aGUgaW5wdXQgY29udGFpbmVkIHRoaXMgZmlsZXBhaXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgYmNkMTIzNC4uLiAwMTIzNDU2Li4uIE0gZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBmaWxlICJmaWxlMCIgaXMgY29tcGxldGVseSByZXdyaXR0ZW4sCitpdCBjaGFuZ2VzIGl0IHRvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMDAwMDAwIGJjZDEyMzQuLi4gMDAwMDAwMC4uLiBEIGZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxMjM0NTYuLi4gQSBmaWxlMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciB0aGUgcHVycG9zZSBvZiBicmVha2luZyBhIGZpbGVwYWlyLCBkaWZmY29yZS1icmVhayBleGFtaW5lcwordGhlIGV4dGVudCBvZiBjaGFuZ2VzIGJldHdlZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyBiZWZvcmUKK2FuZCBhZnRlciBtb2RpZmljYXRpb24gKGkuZS4gdGhlIGNvbnRlbnRzIHRoYXQgaGF2ZSAiYmNkMTIzNC4uLiIKK2FuZCAiMDEyMzQ1Ni4uLiIgYXMgdGhlaXIgU0hBLTEgY29udGVudCBJRCwgaW4gdGhlIGFib3ZlCitleGFtcGxlKS4gIFRoZSBhbW91bnQgb2YgZGVsZXRpb24gb2Ygb3JpZ2luYWwgY29udGVudHMgYW5kCitpbnNlcnRpb24gb2YgbmV3IG1hdGVyaWFsIGFyZSBhZGRlZCB0b2dldGhlciwgYW5kIGlmIGl0IGV4Y2VlZHMKK3RoZSAiYnJlYWsgc2NvcmUiLCB0aGUgZmlsZXBhaXIgaXMgYnJva2VuIGludG8gdHdvLiAgVGhlIGJyZWFrCitzY29yZSBkZWZhdWx0cyB0byA1MCUgb2YgdGhlIHNpemUgb2YgdGhlIHNtYWxsZXIgb2YgdGhlIG9yaWdpbmFsCithbmQgdGhlIHJlc3VsdCAoaS5lLiBpZiB0aGUgZWRpdCBzaHJpbmtzIHRoZSBmaWxlLCB0aGUgc2l6ZSBvZgordGhlIHJlc3VsdCBpcyB1c2VkOyBpZiB0aGUgZWRpdCBsZW5ndGhlbnMgdGhlIGZpbGUsIHRoZSBzaXplIG9mCit0aGUgb3JpZ2luYWwgaXMgdXNlZCksIGFuZCBjYW4gYmUgY3VzdG9taXplZCBieSBnaXZpbmcgYSBudW1iZXIKK2FmdGVyICItQiIgb3B0aW9uIChlLmcuICItQjc1IiB0byB0ZWxsIGl0IHRvIHVzZSA3NSUpLgorCisKK2RpZmZjb3JlLXJlbmFtZTogRm9yIERldGVjdGluZyBSZW5hbWVzIGFuZCBDb3BpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB1c2VkIHRvIGRldGVjdCByZW5hbWVzIGFuZCBjb3BpZXMsIGFuZCBpcworY29udHJvbGxlZCBieSB0aGUgLU0gb3B0aW9uICh0byBkZXRlY3QgcmVuYW1lcykgYW5kIHRoZSAtQyBvcHRpb24KKyh0byBkZXRlY3QgY29waWVzIGFzIHdlbGwpIHRvIHRoZSAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMuICBJZiB0aGUKK2lucHV0IGNvbnRhaW5lZCB0aGVzZSBmaWxlcGFpcnM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAwMDAwMDAgMDEyMzQ1Ni4uLiAwMDAwMDAwLi4uIEQgZmlsZVgKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDEyMzQ1Ni4uLiBBIGZpbGUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgZGVsZXRlZCBmaWxlIGZpbGVYIGlzIHNpbWlsYXIgZW5vdWdoIHRvCit0aGUgY29udGVudHMgb2YgdGhlIGNyZWF0ZWQgZmlsZSBmaWxlMCwgdGhlbiByZW5hbWUgZGV0ZWN0aW9uCittZXJnZXMgdGhlc2UgZmlsZXBhaXJzIGFuZCBjcmVhdGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMTAwNjQ0IDAxMjM0NTYuLi4gMDEyMzQ1Ni4uLiBSMTAwIGZpbGVYIGZpbGUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB0aGUgIi1DIiBvcHRpb24gaXMgdXNlZCwgdGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIG1vZGlmaWVkIGZpbGVzLAorYW5kIGRlbGV0ZWQgZmlsZXMgKGFuZCBhbHNvIHVubW9kaWZpZWQgZmlsZXMsIGlmIHRoZQorIi0tZmluZC1jb3BpZXMtaGFyZGVyIiBvcHRpb24gaXMgdXNlZCkgYXJlIGNvbnNpZGVyZWQgYXMgY2FuZGlkYXRlcworb2YgdGhlIHNvdXJjZSBmaWxlcyBpbiByZW5hbWUvY29weSBvcGVyYXRpb24uICBJZiB0aGUgaW5wdXQgd2VyZSBsaWtlCit0aGVzZSBmaWxlcGFpcnMsIHRoYXQgdGFsayBhYm91dCBhIG1vZGlmaWVkIGZpbGUgZmlsZVkgYW5kIGEgbmV3bHkKK2NyZWF0ZWQgZmlsZSBmaWxlMDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDEyMzQ1NjcuLi4gTSBmaWxlWQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiBiY2QzNDU2Li4uIEEgZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgZmlsZVkgYW5kIHRoZSByZXN1bHRpbmcgY29udGVudHMgb2YKK2ZpbGUwIGFyZSBjb21wYXJlZCwgYW5kIGlmIHRoZXkgYXJlIHNpbWlsYXIgZW5vdWdoLCB0aGV5IGFyZQorY2hhbmdlZCB0bzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDEyMzQ1NjcuLi4gTSBmaWxlWQorOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiBiY2QzNDU2Li4uIEMxMDAgZmlsZVkgZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBib3RoIHJlbmFtZSBhbmQgY29weSBkZXRlY3Rpb24sIHRoZSBzYW1lICJleHRlbnQgb2YgY2hhbmdlcyIKK2FsZ29yaXRobSB1c2VkIGluIGRpZmZjb3JlLWJyZWFrIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3bworZmlsZXMgYXJlICJzaW1pbGFyIGVub3VnaCIsIGFuZCBjYW4gYmUgY3VzdG9taXplZCB0byB1c2UKK2Egc2ltaWxhcml0eSBzY29yZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBvZiA1MCUgYnkgZ2l2aW5nIGEKK251bWJlciBhZnRlciB0aGUgIi1NIiBvciAiLUMiIG9wdGlvbiAoZS5nLiAiLU04IiB0byB0ZWxsIGl0IHRvIHVzZQorOC8xMCA9IDgwJSkuCisKK05vdGUuICBXaGVuIHRoZSAiLUMiIG9wdGlvbiBpcyB1c2VkIHdpdGggYC0tZmluZC1jb3BpZXMtaGFyZGVyYAorb3B0aW9uLCAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMgZmVlZCB1bm1vZGlmaWVkIGZpbGVwYWlycyB0bworZGlmZmNvcmUgbWVjaGFuaXNtIGFzIHdlbGwgYXMgbW9kaWZpZWQgb25lcy4gIFRoaXMgbGV0cyB0aGUgY29weQorZGV0ZWN0b3IgY29uc2lkZXIgdW5tb2RpZmllZCBmaWxlcyBhcyBjb3B5IHNvdXJjZSBjYW5kaWRhdGVzIGF0Cit0aGUgZXhwZW5zZSBvZiBtYWtpbmcgaXQgc2xvd2VyLiAgV2l0aG91dCBgLS1maW5kLWNvcGllcy1oYXJkZXJgLAorJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzIGNhbiBkZXRlY3QgY29waWVzIG9ubHkgaWYgdGhlIGZpbGUgdGhhdCB3YXMKK2NvcGllZCBoYXBwZW5lZCB0byBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gdGhlIHNhbWUgY2hhbmdlc2V0LgorCisKK2RpZmZjb3JlLW1lcmdlLWJyb2tlbjogRm9yIFB1dHRpbmcgQ29tcGxldGUgUmV3cml0ZXMgQmFjayBUb2dldGhlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZCB0byBtZXJnZSBmaWxlcGFpcnMgYnJva2VuIGJ5CitkaWZmY29yZS1icmVhaywgYW5kIG5vdCB0cmFuc2Zvcm1lZCBpbnRvIHJlbmFtZS9jb3B5IGJ5CitkaWZmY29yZS1yZW5hbWUsIGJhY2sgaW50byBhIHNpbmdsZSBtb2RpZmljYXRpb24uICBUaGlzIGFsd2F5cworcnVucyB3aGVuIGRpZmZjb3JlLWJyZWFrIGlzIHVzZWQuCisKK0ZvciB0aGUgcHVycG9zZSBvZiBtZXJnaW5nIGJyb2tlbiBmaWxlcGFpcnMgYmFjaywgaXQgdXNlcyBhCitkaWZmZXJlbnQgImV4dGVudCBvZiBjaGFuZ2VzIiBjb21wdXRhdGlvbiBmcm9tIHRoZSBvbmVzIHVzZWQgYnkKK2RpZmZjb3JlLWJyZWFrIGFuZCBkaWZmY29yZS1yZW5hbWUuICBJdCBjb3VudHMgb25seSB0aGUgZGVsZXRpb24KK2Zyb20gdGhlIG9yaWdpbmFsLCBhbmQgZG9lcyBub3QgY291bnQgaW5zZXJ0aW9uLiAgSWYgeW91IHJlbW92ZWQKK29ubHkgMTAgbGluZXMgZnJvbSBhIDEwMC1saW5lIGRvY3VtZW50LCBldmVuIGlmIHlvdSBhZGRlZCA5MTAKK25ldyBsaW5lcyB0byBtYWtlIGEgbmV3IDEwMDAtbGluZSBkb2N1bWVudCwgeW91IGRpZCBub3QgZG8gYQorY29tcGxldGUgcmV3cml0ZS4gIGRpZmZjb3JlLWJyZWFrIGJyZWFrcyBzdWNoIGEgY2FzZSBpbiBvcmRlciB0bworaGVscCBkaWZmY29yZS1yZW5hbWUgdG8gY29uc2lkZXIgc3VjaCBmaWxlcGFpcnMgYXMgY2FuZGlkYXRlIG9mCityZW5hbWUvY29weSBkZXRlY3Rpb24sIGJ1dCBpZiBmaWxlcGFpcnMgYnJva2VuIHRoYXQgd2F5IHdlcmUgbm90CittYXRjaGVkIHdpdGggb3RoZXIgZmlsZXBhaXJzIHRvIGNyZWF0ZSByZW5hbWUvY29weSwgdGhlbiB0aGlzCit0cmFuc2Zvcm1hdGlvbiBtZXJnZXMgdGhlbSBiYWNrIGludG8gdGhlIG9yaWdpbmFsCisibW9kaWZpY2F0aW9uIi4KKworVGhlICJleHRlbnQgb2YgY2hhbmdlcyIgcGFyYW1ldGVyIGNhbiBiZSB0d2Vha2VkIGZyb20gdGhlCitkZWZhdWx0IDgwJSAodGhhdCBpcywgdW5sZXNzIG1vcmUgdGhhbiA4MCUgb2YgdGhlIG9yaWdpbmFsCittYXRlcmlhbCBpcyBkZWxldGVkLCB0aGUgYnJva2VuIHBhaXJzIGFyZSBtZXJnZWQgYmFjayBpbnRvIGEKK3NpbmdsZSBtb2RpZmljYXRpb24pIGJ5IGdpdmluZyBhIHNlY29uZCBudW1iZXIgdG8gLUIgb3B0aW9uLAorbGlrZSB0aGVzZToKKworKiAtQjUwLzYwIChnaXZlIDUwJSAiYnJlYWsgc2NvcmUiIHRvIGRpZmZjb3JlLWJyZWFrLCB1c2UgNjAlCisgIGZvciBkaWZmY29yZS1tZXJnZS1icm9rZW4pLgorCisqIC1CLzYwICh0aGUgc2FtZSBhcyBhYm92ZSwgc2luY2UgZGlmZmNvcmUtYnJlYWsgZGVmYXVsdHMgdG8gNTAlKS4KKworTm90ZSB0aGF0IGVhcmxpZXIgaW1wbGVtZW50YXRpb24gbGVmdCBhIGJyb2tlbiBwYWlyIGFzIGEgc2VwYXJhdGUKK2NyZWF0aW9uIGFuZCBkZWxldGlvbiBwYXRjaGVzLiAgVGhpcyB3YXMgYW4gdW5uZWNlc3NhcnkgaGFjayBhbmQKK3RoZSBsYXRlc3QgaW1wbGVtZW50YXRpb24gYWx3YXlzIG1lcmdlcyBhbGwgdGhlIGJyb2tlbiBwYWlycworYmFjayBpbnRvIG1vZGlmaWNhdGlvbnMsIGJ1dCB0aGUgcmVzdWx0aW5nIHBhdGNoIG91dHB1dCBpcworZm9ybWF0dGVkIGRpZmZlcmVudGx5IGZvciBlYXNpZXIgcmV2aWV3IGluIGNhc2Ugb2Ygc3VjaAorYSBjb21wbGV0ZSByZXdyaXRlIGJ5IHNob3dpbmcgdGhlIGVudGlyZSBjb250ZW50cyBvZiBvbGQgdmVyc2lvbgorcHJlZml4ZWQgd2l0aCAnLScsIGZvbGxvd2VkIGJ5IHRoZSBlbnRpcmUgY29udGVudHMgb2YgbmV3Cit2ZXJzaW9uIHByZWZpeGVkIHdpdGggJysnLgorCisKK2RpZmZjb3JlLXBpY2theGU6IEZvciBEZXRlY3RpbmcgQWRkaXRpb24vRGVsZXRpb24gb2YgU3BlY2lmaWVkIFN0cmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdHJhbnNmb3JtYXRpb24gbGltaXRzIHRoZSBzZXQgb2YgZmlsZXBhaXJzIHRvIHRob3NlIHRoYXQgY2hhbmdlCitzcGVjaWZpZWQgc3RyaW5ncyBiZXR3ZWVuIHRoZSBwcmVpbWFnZSBhbmQgdGhlIHBvc3RpbWFnZSBpbiBhIGNlcnRhaW4KK3dheS4gIC1TPGJsb2NrIG9mIHRleHQ+IGFuZCAtRzxyZWd1bGFyIGV4cHJlc3Npb24+IG9wdGlvbnMgYXJlIHVzZWQgdG8KK3NwZWNpZnkgZGlmZmVyZW50IHdheXMgdGhlc2Ugc3RyaW5ncyBhcmUgc291Z2h0LgorCisiLVM8YmxvY2sgb2YgdGV4dD4iIGRldGVjdHMgZmlsZXBhaXJzIHdob3NlIHByZWltYWdlIGFuZCBwb3N0aW1hZ2UKK2hhdmUgZGlmZmVyZW50IG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkIGJsb2NrIG9mIHRleHQuCitCeSBkZWZpbml0aW9uLCBpdCB3aWxsIG5vdCBkZXRlY3QgaW4tZmlsZSBtb3Zlcy4gIEFsc28sIHdoZW4gYQorY2hhbmdlc2V0IG1vdmVzIGEgZmlsZSB3aG9sZXNhbGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGludGVyZXN0aW5nCitzdHJpbmcsIGRpZmZjb3JlLXJlbmFtZSBraWNrcyBpbiBhcyB1c3VhbCwgYW5kIGAtU2Agb21pdHMgdGhlIGZpbGVwYWlyCisoc2luY2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGF0IHN0cmluZyBkaWRuJ3QgY2hhbmdlIGluIHRoYXQKK3JlbmFtZS1kZXRlY3RlZCBmaWxlcGFpcikuICBXaGVuIHVzZWQgd2l0aCBgLS1waWNrYXhlLXJlZ2V4YCwgdHJlYXQKK3RoZSA8YmxvY2sgb2YgdGV4dD4gYXMgYW4gZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoLAoraW5zdGVhZCBvZiBhIGxpdGVyYWwgc3RyaW5nLgorCisiLUc8cmVndWxhciBleHByZXNzaW9uPiIgKG1uZW1vbmljOiBncmVwKSBkZXRlY3RzIGZpbGVwYWlycyB3aG9zZQordGV4dHVhbCBkaWZmIGhhcyBhbiBhZGRlZCBvciBhIGRlbGV0ZWQgbGluZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCityZWd1bGFyIGV4cHJlc3Npb24uICBUaGlzIG1lYW5zIHRoYXQgaXQgd2lsbCBkZXRlY3QgaW4tZmlsZSAob3Igd2hhdAorcmVuYW1lLWRldGVjdGlvbiBjb25zaWRlcnMgdGhlIHNhbWUgZmlsZSkgbW92ZXMsIHdoaWNoIGlzIG5vaXNlLiAgVGhlCitpbXBsZW1lbnRhdGlvbiBydW5zIGRpZmYgdHdpY2UgYW5kIGdyZXBzLCBhbmQgdGhpcyBjYW4gYmUgcXVpdGUKK2V4cGVuc2l2ZS4gIFRvIHNwZWVkIHRoaW5ncyB1cCBiaW5hcnkgZmlsZXMgd2l0aG91dCB0ZXh0Y29udiBmaWx0ZXJzCit3aWxsIGJlIGlnbm9yZWQuCisKK1doZW4gYC1TYCBvciBgLUdgIGFyZSB1c2VkIHdpdGhvdXQgYC0tcGlja2F4ZS1hbGxgLCBvbmx5IGZpbGVwYWlycwordGhhdCBtYXRjaCB0aGVpciByZXNwZWN0aXZlIGNyaXRlcmlvbiBhcmUga2VwdCBpbiB0aGUgb3V0cHV0LiAgV2hlbgorYC0tcGlja2F4ZS1hbGxgIGlzIHVzZWQsIGlmIGV2ZW4gb25lIGZpbGVwYWlyIG1hdGNoZXMgdGhlaXIgcmVzcGVjdGl2ZQorY3JpdGVyaW9uIGluIGEgY2hhbmdlc2V0LCB0aGUgZW50aXJlIGNoYW5nZXNldCBpcyBrZXB0LiAgVGhpcyBiZWhhdmlvcgoraXMgZGVzaWduZWQgdG8gbWFrZSByZXZpZXdpbmcgY2hhbmdlcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUKK2NoYW5nZXNldCBlYXNpZXIuCisKK2RpZmZjb3JlLW9yZGVyOiBGb3IgU29ydGluZyB0aGUgT3V0cHV0IEJhc2VkIG9uIEZpbGVuYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdXNlZCB0byByZW9yZGVyIHRoZSBmaWxlcGFpcnMgYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3MKKyhvciBwcm9qZWN0J3MpIHRhc3RlLCBhbmQgaXMgY29udHJvbGxlZCBieSB0aGUgLU8gb3B0aW9uIHRvIHRoZQorJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzLgorCitUaGlzIHRha2VzIGEgdGV4dCBmaWxlIGVhY2ggb2Ygd2hvc2UgbGluZXMgaXMgYSBzaGVsbCBnbG9iCitwYXR0ZXJuLiAgRmlsZXBhaXJzIHRoYXQgbWF0Y2ggYSBnbG9iIHBhdHRlcm4gb24gYW4gZWFybGllciBsaW5lCitpbiB0aGUgZmlsZSBhcmUgb3V0cHV0IGJlZm9yZSBvbmVzIHRoYXQgbWF0Y2ggYSBsYXRlciBsaW5lLCBhbmQKK2ZpbGVwYWlycyB0aGF0IGRvIG5vdCBtYXRjaCBhbnkgZ2xvYiBwYXR0ZXJuIGFyZSBvdXRwdXQgbGFzdC4KKworQXMgYW4gZXhhbXBsZSwgYSB0eXBpY2FsIG9yZGVyZmlsZSBmb3IgdGhlIGNvcmUgR2l0IHByb2JhYmx5Cit3b3VsZCBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSRUFETUUKK01ha2VmaWxlCitEb2N1bWVudGF0aW9uCisqLmgKKyouYwordAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZGlmZlsxXSwKK2xpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0sCitsaW5rZ2l0OmdpdC1kaWZmLWluZGV4WzFdLAorbGlua2dpdDpnaXQtZGlmZi10cmVlWzFdLAorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLAorbGlua2dpdDpnaXQtbG9nWzFdLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRldmVyeWRheS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGV2ZXJ5ZGF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQ5MTlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRldmVyeWRheS50eHQKQEAgLTAsMCArMSw0NTUgQEAKK2dpdGV2ZXJ5ZGF5KDcpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRldmVyeWRheSAtIEEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzIGZvciBFdmVyeWRheSBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCisKK0V2ZXJ5ZGF5IEdpdCBXaXRoIDIwIENvbW1hbmRzIE9yIFNvCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgdXNlcnMgY2FuIGJyb2FkbHkgYmUgZ3JvdXBlZCBpbnRvIGZvdXIgY2F0ZWdvcmllcyBmb3IgdGhlIHB1cnBvc2VzIG9mCitkZXNjcmliaW5nIGhlcmUgYSBzbWFsbCBzZXQgb2YgdXNlZnVsIGNvbW1hbmQgZm9yIGV2ZXJ5ZGF5IEdpdC4KKworKgk8PFNUQU5EQUxPTkUsSW5kaXZpZHVhbCBEZXZlbG9wZXIgKFN0YW5kYWxvbmUpPj4gY29tbWFuZHMgYXJlIGVzc2VudGlhbAorCWZvciBhbnlib2R5IHdobyBtYWtlcyBhIGNvbW1pdCwgZXZlbiBmb3Igc29tZWJvZHkgd2hvIHdvcmtzIGFsb25lLgorCisqCUlmIHlvdSB3b3JrIHdpdGggb3RoZXIgcGVvcGxlLCB5b3Ugd2lsbCBuZWVkIGNvbW1hbmRzIGxpc3RlZCBpbgorCXRoZSA8PFBBUlRJQ0lQQU5ULEluZGl2aWR1YWwgRGV2ZWxvcGVyIChQYXJ0aWNpcGFudCk+PiBzZWN0aW9uIGFzIHdlbGwuCisKKyoJUGVvcGxlIHdobyBwbGF5IHRoZSA8PElOVEVHUkFUT1IsSW50ZWdyYXRvcj4+IHJvbGUgbmVlZCB0byBsZWFybiBzb21lCisJbW9yZSBjb21tYW5kcyBpbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUuCisKKyoJPDxBRE1JTklTVFJBVElPTixSZXBvc2l0b3J5IEFkbWluaXN0cmF0aW9uPj4gY29tbWFuZHMgYXJlIGZvciBzeXN0ZW0KKwlhZG1pbmlzdHJhdG9ycyB3aG8gYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgY2FyZSBhbmQgZmVlZGluZworCW9mIEdpdCByZXBvc2l0b3JpZXMuCisKKworSW5kaXZpZHVhbCBEZXZlbG9wZXIgKFN0YW5kYWxvbmUpW1tTVEFOREFMT05FXV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Egc3RhbmRhbG9uZSBpbmRpdmlkdWFsIGRldmVsb3BlciBkb2VzIG5vdCBleGNoYW5nZSBwYXRjaGVzIHdpdGgKK290aGVyIHBlb3BsZSwgYW5kIHdvcmtzIGFsb25lIGluIGEgc2luZ2xlIHJlcG9zaXRvcnksIHVzaW5nIHRoZQorZm9sbG93aW5nIGNvbW1hbmRzLgorCisgICogbGlua2dpdDpnaXQtaW5pdFsxXSB0byBjcmVhdGUgYSBuZXcgcmVwb3NpdG9yeS4KKworICAqIGxpbmtnaXQ6Z2l0LWxvZ1sxXSB0byBzZWUgd2hhdCBoYXBwZW5lZC4KKworICAqIGxpbmtnaXQ6Z2l0LXN3aXRjaFsxXSBhbmQgbGlua2dpdDpnaXQtYnJhbmNoWzFdIHRvIHN3aXRjaAorICAgIGJyYW5jaGVzLgorCisgICogbGlua2dpdDpnaXQtYWRkWzFdIHRvIG1hbmFnZSB0aGUgaW5kZXggZmlsZS4KKworICAqIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYW5kIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSB0byBzZWUgd2hhdAorICAgIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBkb2luZy4KKworICAqIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSB0byBhZHZhbmNlIHRoZSBjdXJyZW50IGJyYW5jaC4KKworICAqIGxpbmtnaXQ6Z2l0LXJlc3RvcmVbMV0gdG8gdW5kbyBjaGFuZ2VzLgorCisgICogbGlua2dpdDpnaXQtbWVyZ2VbMV0gdG8gbWVyZ2UgYmV0d2VlbiBsb2NhbCBicmFuY2hlcy4KKworICAqIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSB0byBtYWludGFpbiB0b3BpYyBicmFuY2hlcy4KKworICAqIGxpbmtnaXQ6Z2l0LXRhZ1sxXSB0byBtYXJrIGEga25vd24gcG9pbnQuCisKK0V4YW1wbGVzCit+fn5+fn5+fgorCitVc2UgYSB0YXJiYWxsIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGEgbmV3IHJlcG9zaXRvcnkuOjoKKysKKy0tLS0tLS0tLS0tLQorJCB0YXIgenhmIGZyb3R6LnRhci5negorJCBjZCBmcm90egorJCBnaXQgaW5pdAorJCBnaXQgYWRkIC4gPDE+CiskIGdpdCBjb21taXQgLW0gImltcG9ydCBvZiBmcm90eiBzb3VyY2UgdHJlZS4iCiskIGdpdCB0YWcgdjIuNDMgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBhZGQgZXZlcnl0aGluZyB1bmRlciB0aGUgY3VycmVudCBkaXJlY3RvcnkuCis8Mj4gbWFrZSBhIGxpZ2h0d2VpZ2h0LCB1bmFubm90YXRlZCB0YWcuCisKK0NyZWF0ZSBhIHRvcGljIGJyYW5jaCBhbmQgZGV2ZWxvcC46OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggLWMgYWxzYS1hdWRpbyA8MT4KKyQgZWRpdC9jb21waWxlL3Rlc3QKKyQgZ2l0IHJlc3RvcmUgY3Vyc2VzL3V4X2F1ZGlvX29zcy5jIDwyPgorJCBnaXQgYWRkIGN1cnNlcy91eF9hdWRpb19hbHNhLmMgPDM+CiskIGVkaXQvY29tcGlsZS90ZXN0CiskIGdpdCBkaWZmIEhFQUQgPDQ+CiskIGdpdCBjb21taXQgLWEgLXMgPDU+CiskIGVkaXQvY29tcGlsZS90ZXN0CiskIGdpdCBkaWZmIEhFQUReIDw2PgorJCBnaXQgY29tbWl0IC1hIC0tYW1lbmQgPDc+CiskIGdpdCBzd2l0Y2ggbWFzdGVyIDw4PgorJCBnaXQgbWVyZ2UgYWxzYS1hdWRpbyA8OT4KKyQgZ2l0IGxvZyAtLXNpbmNlPSczIGRheXMgYWdvJyA8MTA+CiskIGdpdCBsb2cgdjIuNDMuLiBjdXJzZXMvIDwxMT4KKy0tLS0tLS0tLS0tLQorKworPDE+IGNyZWF0ZSBhIG5ldyB0b3BpYyBicmFuY2guCis8Mj4gcmV2ZXJ0IHlvdXIgYm90Y2hlZCBjaGFuZ2VzIGluIGBjdXJzZXMvdXhfYXVkaW9fb3NzLmNgLgorPDM+IHlvdSBuZWVkIHRvIHRlbGwgR2l0IGlmIHlvdSBhZGRlZCBhIG5ldyBmaWxlOyByZW1vdmFsIGFuZAorbW9kaWZpY2F0aW9uIHdpbGwgYmUgY2F1Z2h0IGlmIHlvdSBkbyBgZ2l0IGNvbW1pdCAtYWAgbGF0ZXIuCis8ND4gdG8gc2VlIHdoYXQgY2hhbmdlcyB5b3UgYXJlIGNvbW1pdHRpbmcuCis8NT4gY29tbWl0IGV2ZXJ5dGhpbmcsIGFzIHlvdSBoYXZlIHRlc3RlZCwgd2l0aCB5b3VyIHNpZ24tb2ZmLgorPDY+IGxvb2sgYXQgYWxsIHlvdXIgY2hhbmdlcyBpbmNsdWRpbmcgdGhlIHByZXZpb3VzIGNvbW1pdC4KKzw3PiBhbWVuZCB0aGUgcHJldmlvdXMgY29tbWl0LCBhZGRpbmcgYWxsIHlvdXIgbmV3IGNoYW5nZXMsCit1c2luZyB5b3VyIG9yaWdpbmFsIG1lc3NhZ2UuCis8OD4gc3dpdGNoIHRvIHRoZSBtYXN0ZXIgYnJhbmNoLgorPDk+IG1lcmdlIGEgdG9waWMgYnJhbmNoIGludG8geW91ciBtYXN0ZXIgYnJhbmNoLgorPDEwPiByZXZpZXcgY29tbWl0IGxvZ3M7IG90aGVyIGZvcm1zIHRvIGxpbWl0IG91dHB1dCBjYW4gYmUKK2NvbWJpbmVkIGFuZCBpbmNsdWRlIGAtMTBgICh0byBzaG93IHVwIHRvIDEwIGNvbW1pdHMpLAorYC0tdW50aWw9MjAwNS0xMi0xMGAsIGV0Yy4KKzwxMT4gdmlldyBvbmx5IHRoZSBjaGFuZ2VzIHRoYXQgdG91Y2ggd2hhdCdzIGluIGBjdXJzZXMvYAorZGlyZWN0b3J5LCBzaW5jZSBgdjIuNDNgIHRhZy4KKworCitJbmRpdmlkdWFsIERldmVsb3BlciAoUGFydGljaXBhbnQpW1tQQVJUSUNJUEFOVF1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZGV2ZWxvcGVyIHdvcmtpbmcgYXMgYSBwYXJ0aWNpcGFudCBpbiBhIGdyb3VwIHByb2plY3QgbmVlZHMgdG8KK2xlYXJuIGhvdyB0byBjb21tdW5pY2F0ZSB3aXRoIG90aGVycywgYW5kIHVzZXMgdGhlc2UgY29tbWFuZHMgaW4KK2FkZGl0aW9uIHRvIHRoZSBvbmVzIG5lZWRlZCBieSBhIHN0YW5kYWxvbmUgZGV2ZWxvcGVyLgorCisgICogbGlua2dpdDpnaXQtY2xvbmVbMV0gZnJvbSB0aGUgdXBzdHJlYW0gdG8gcHJpbWUgeW91ciBsb2NhbAorICAgIHJlcG9zaXRvcnkuCisKKyAgKiBsaW5rZ2l0OmdpdC1wdWxsWzFdIGFuZCBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBmcm9tICJvcmlnaW4iCisgICAgdG8ga2VlcCB1cC10by1kYXRlIHdpdGggdGhlIHVwc3RyZWFtLgorCisgICogbGlua2dpdDpnaXQtcHVzaFsxXSB0byBzaGFyZWQgcmVwb3NpdG9yeSwgaWYgeW91IGFkb3B0IENWUworICAgIHN0eWxlIHNoYXJlZCByZXBvc2l0b3J5IHdvcmtmbG93LgorCisgICogbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHRvIHByZXBhcmUgZS1tYWlsIHN1Ym1pc3Npb24sIGlmCisgICAgeW91IGFkb3B0IExpbnV4IGtlcm5lbC1zdHlsZSBwdWJsaWMgZm9ydW0gd29ya2Zsb3cuCisKKyAgKiBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIHRvIHNlbmQgeW91ciBlLW1haWwgc3VibWlzc2lvbiB3aXRob3V0CisgICAgY29ycnVwdGlvbiBieSB5b3VyIE1VQS4KKworICAqIGxpbmtnaXQ6Z2l0LXJlcXVlc3QtcHVsbFsxXSB0byBjcmVhdGUgYSBzdW1tYXJ5IG9mIGNoYW5nZXMKKyAgICBmb3IgeW91ciB1cHN0cmVhbSB0byBwdWxsLgorCisKK0V4YW1wbGVzCit+fn5+fn5+fgorCitDbG9uZSB0aGUgdXBzdHJlYW0gYW5kIHdvcmsgb24gaXQuICBGZWVkIGNoYW5nZXMgdG8gdXBzdHJlYW0uOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS8uLi4vdG9ydmFsZHMvbGludXgtMi42IG15Mi42CiskIGNkIG15Mi42CiskIGdpdCBzd2l0Y2ggLWMgbWluZSBtYXN0ZXIgPDE+CiskIGVkaXQvY29tcGlsZS90ZXN0OyBnaXQgY29tbWl0IC1hIC1zIDwyPgorJCBnaXQgZm9ybWF0LXBhdGNoIG1hc3RlciA8Mz4KKyQgZ2l0IHNlbmQtZW1haWwgLS10bz0icGVyc29uIDxlbWFpbEBleGFtcGxlLmNvbT4iIDAwKi5wYXRjaCA8ND4KKyQgZ2l0IHN3aXRjaCBtYXN0ZXIgPDU+CiskIGdpdCBwdWxsIDw2PgorJCBnaXQgbG9nIC1wIE9SSUdfSEVBRC4uIGFyY2gvaTM4NiBpbmNsdWRlL2FzbS1pMzg2IDw3PgorJCBnaXQgbHMtcmVtb3RlIC0taGVhZHMgaHR0cDovL2dpdC5rZXJuZWwub3JnLy4uLi9qZ2FyemlrL2xpYmF0YS1kZXYuZ2l0IDw4PgorJCBnaXQgcHVsbCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvLi4uL2pnYXJ6aWsvbGliYXRhLWRldi5naXQgQUxMIDw5PgorJCBnaXQgcmVzZXQgLS1oYXJkIE9SSUdfSEVBRCA8MTA+CiskIGdpdCBnYyA8MTE+CistLS0tLS0tLS0tLS0KKysKKzwxPiBjaGVja291dCBhIG5ldyBicmFuY2ggYG1pbmVgIGZyb20gbWFzdGVyLgorPDI+IHJlcGVhdCBhcyBuZWVkZWQuCis8Mz4gZXh0cmFjdCBwYXRjaGVzIGZyb20geW91ciBicmFuY2gsIHJlbGF0aXZlIHRvIG1hc3RlciwKKzw0PiBhbmQgZW1haWwgdGhlbS4KKzw1PiByZXR1cm4gdG8gYG1hc3RlcmAsIHJlYWR5IHRvIHNlZSB3aGF0J3MgbmV3Cis8Nj4gYGdpdCBwdWxsYCBmZXRjaGVzIGZyb20gYG9yaWdpbmAgYnkgZGVmYXVsdCBhbmQgbWVyZ2VzIGludG8gdGhlCitjdXJyZW50IGJyYW5jaC4KKzw3PiBpbW1lZGlhdGVseSBhZnRlciBwdWxsaW5nLCBsb29rIGF0IHRoZSBjaGFuZ2VzIGRvbmUgdXBzdHJlYW0KK3NpbmNlIGxhc3QgdGltZSB3ZSBjaGVja2VkLCBvbmx5IGluIHRoZQorYXJlYSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KKzw4PiBjaGVjayB0aGUgYnJhbmNoIG5hbWVzIGluIGFuIGV4dGVybmFsIHJlcG9zaXRvcnkgKGlmIG5vdCBrbm93bikuCis8OT4gZmV0Y2ggZnJvbSBhIHNwZWNpZmljIGJyYW5jaCBgQUxMYCBmcm9tIGEgc3BlY2lmaWMgcmVwb3NpdG9yeQorYW5kIG1lcmdlIGl0LgorPDEwPiByZXZlcnQgdGhlIHB1bGwuCis8MTE+IGdhcmJhZ2UgY29sbGVjdCBsZWZ0b3ZlciBvYmplY3RzIGZyb20gcmV2ZXJ0ZWQgcHVsbC4KKworCitQdXNoIGludG8gYW5vdGhlciByZXBvc2l0b3J5Ljo6CisrCistLS0tLS0tLS0tLS0KK3NhdGVsbGl0ZSQgZ2l0IGNsb25lIG1vdGhlcnNoaXA6ZnJvdHogZnJvdHogPDE+CitzYXRlbGxpdGUkIGNkIGZyb3R6CitzYXRlbGxpdGUkIGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICdeKHJlbW90ZXxicmFuY2gpXC4nIDwyPgorcmVtb3RlLm9yaWdpbi51cmwgbW90aGVyc2hpcDpmcm90egorcmVtb3RlLm9yaWdpbi5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qCiticmFuY2gubWFzdGVyLnJlbW90ZSBvcmlnaW4KK2JyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIKK3NhdGVsbGl0ZSQgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2ggXAorCSAgICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3NhdGVsbGl0ZS8qIDwzPgorc2F0ZWxsaXRlJCBlZGl0L2NvbXBpbGUvdGVzdC9jb21taXQKK3NhdGVsbGl0ZSQgZ2l0IHB1c2ggb3JpZ2luIDw0PgorCittb3RoZXJzaGlwJCBjZCBmcm90egorbW90aGVyc2hpcCQgZ2l0IHN3aXRjaCBtYXN0ZXIKK21vdGhlcnNoaXAkIGdpdCBtZXJnZSBzYXRlbGxpdGUvbWFzdGVyIDw1PgorLS0tLS0tLS0tLS0tCisrCis8MT4gbW90aGVyc2hpcCBtYWNoaW5lIGhhcyBhIGZyb3R6IHJlcG9zaXRvcnkgdW5kZXIgeW91ciBob21lCitkaXJlY3Rvcnk7IGNsb25lIGZyb20gaXQgdG8gc3RhcnQgYSByZXBvc2l0b3J5IG9uIHRoZSBzYXRlbGxpdGUKK21hY2hpbmUuCis8Mj4gY2xvbmUgc2V0cyB0aGVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBieSBkZWZhdWx0LgorSXQgYXJyYW5nZXMgYGdpdCBwdWxsYCB0byBmZXRjaCBhbmQgc3RvcmUgdGhlIGJyYW5jaGVzIG9mIG1vdGhlcnNoaXAKK21hY2hpbmUgdG8gbG9jYWwgYHJlbW90ZXMvb3JpZ2luLypgIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKzwzPiBhcnJhbmdlIGBnaXQgcHVzaGAgdG8gcHVzaCBhbGwgbG9jYWwgYnJhbmNoZXMgdG8KK3RoZWlyIGNvcnJlc3BvbmRpbmcgYnJhbmNoIG9mIHRoZSBtb3RoZXJzaGlwIG1hY2hpbmUuCis8ND4gcHVzaCB3aWxsIHN0YXNoIGFsbCBvdXIgd29yayBhd2F5IG9uIGByZW1vdGVzL3NhdGVsbGl0ZS8qYAorcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG9uIHRoZSBtb3RoZXJzaGlwIG1hY2hpbmUuICBZb3UgY291bGQgdXNlIHRoaXMKK2FzIGEgYmFjay11cCBtZXRob2QuIExpa2V3aXNlLCB5b3UgY2FuIHByZXRlbmQgdGhhdCBtb3RoZXJzaGlwCisiZmV0Y2hlZCIgZnJvbSB5b3UgKHVzZWZ1bCB3aGVuIGFjY2VzcyBpcyBvbmUgc2lkZWQpLgorPDU+IG9uIG1vdGhlcnNoaXAgbWFjaGluZSwgbWVyZ2UgdGhlIHdvcmsgZG9uZSBvbiB0aGUgc2F0ZWxsaXRlCittYWNoaW5lIGludG8gdGhlIG1hc3RlciBicmFuY2guCisKK0JyYW5jaCBvZmYgb2YgYSBzcGVjaWZpYyB0YWcuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3dpdGNoIC1jIHByaXZhdGUyLjYuMTQgdjIuNi4xNCA8MT4KKyQgZWRpdC9jb21waWxlL3Rlc3Q7IGdpdCBjb21taXQgLWEKKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorJCBnaXQgY2hlcnJ5LXBpY2sgdjIuNi4xNC4ucHJpdmF0ZTIuNi4xNCA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IGNyZWF0ZSBhIHByaXZhdGUgYnJhbmNoIGJhc2VkIG9uIGEgd2VsbCBrbm93biAoYnV0IHNvbWV3aGF0IGJlaGluZCkKK3RhZy4KKzwyPiBmb3J3YXJkIHBvcnQgYWxsIGNoYW5nZXMgaW4gYHByaXZhdGUyLjYuMTRgIGJyYW5jaCB0byBgbWFzdGVyYCBicmFuY2gKK3dpdGhvdXQgYSBmb3JtYWwgIm1lcmdpbmciLiBPciBsb25naGFuZCArCitgZ2l0IGZvcm1hdC1wYXRjaCAtayAtbSAtLXN0ZG91dCB2Mi42LjE0Li5wcml2YXRlMi42LjE0IHwKKyAgZ2l0IGFtIC0zIC1rYAorCitBbiBhbHRlcm5hdGUgcGFydGljaXBhbnQgc3VibWlzc2lvbiBtZWNoYW5pc20gaXMgdXNpbmcgdGhlCitgZ2l0IHJlcXVlc3QtcHVsbGAgb3IgcHVsbC1yZXF1ZXN0IG1lY2hhbmlzbXMgKGUuZyBhcyB1c2VkIG9uCitHaXRIdWIgKHd3dy5naXRodWIuY29tKSB0byBub3RpZnkgeW91ciB1cHN0cmVhbSBvZiB5b3VyCitjb250cmlidXRpb24uCisKK0ludGVncmF0b3JbW0lOVEVHUkFUT1JdXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZmFpcmx5IGNlbnRyYWwgcGVyc29uIGFjdGluZyBhcyB0aGUgaW50ZWdyYXRvciBpbiBhIGdyb3VwCitwcm9qZWN0IHJlY2VpdmVzIGNoYW5nZXMgbWFkZSBieSBvdGhlcnMsIHJldmlld3MgYW5kIGludGVncmF0ZXMKK3RoZW0gYW5kIHB1Ymxpc2hlcyB0aGUgcmVzdWx0IGZvciBvdGhlcnMgdG8gdXNlLCB1c2luZyB0aGVzZQorY29tbWFuZHMgaW4gYWRkaXRpb24gdG8gdGhlIG9uZXMgbmVlZGVkIGJ5IHBhcnRpY2lwYW50cy4KKworVGhpcyBzZWN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgYnkgdGhvc2Ugd2hvIHJlc3BvbmQgdG8gYGdpdAorcmVxdWVzdC1wdWxsYCBvciBwdWxsLXJlcXVlc3Qgb24gR2l0SHViICh3d3cuZ2l0aHViLmNvbSkgdG8KK2ludGVncmF0ZSB0aGUgd29yayBvZiBvdGhlcnMgaW50byB0aGVpciBoaXN0b3J5LiBBIHN1Yi1hcmVhCitsaWV1dGVuYW50IGZvciBhIHJlcG9zaXRvcnkgd2lsbCBhY3QgYm90aCBhcyBhIHBhcnRpY2lwYW50IGFuZAorYXMgYW4gaW50ZWdyYXRvci4KKworCisgICogbGlua2dpdDpnaXQtYW1bMV0gdG8gYXBwbHkgcGF0Y2hlcyBlLW1haWxlZCBpbiBmcm9tIHlvdXIKKyAgICBjb250cmlidXRvcnMuCisKKyAgKiBsaW5rZ2l0OmdpdC1wdWxsWzFdIHRvIG1lcmdlIGZyb20geW91ciB0cnVzdGVkIGxpZXV0ZW5hbnRzLgorCisgICogbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHRvIHByZXBhcmUgYW5kIHNlbmQgc3VnZ2VzdGVkCisgICAgYWx0ZXJuYXRpdmUgdG8gY29udHJpYnV0b3JzLgorCisgICogbGlua2dpdDpnaXQtcmV2ZXJ0WzFdIHRvIHVuZG8gYm90Y2hlZCBjb21taXRzLgorCisgICogbGlua2dpdDpnaXQtcHVzaFsxXSB0byBwdWJsaXNoIHRoZSBibGVlZGluZyBlZGdlLgorCisKK0V4YW1wbGVzCit+fn5+fn5+fgorCitBIHR5cGljYWwgaW50ZWdyYXRvcidzIEdpdCBkYXkuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3RhdHVzIDwxPgorJCBnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkIG1hc3RlciA8Mj4KKyQgbWFpbHggPDM+CismIHMgMiAzIDQgNSAuLyt0by1hcHBseQorJiBzIDcgOCAuLytob2xkLWxpbnVzCismIHEKKyQgZ2l0IHN3aXRjaCAtYyB0b3BpYy9vbmUgbWFzdGVyCiskIGdpdCBhbSAtMyAtaSAtcyAuLyt0by1hcHBseSA8ND4KKyQgY29tcGlsZS90ZXN0CiskIGdpdCBzd2l0Y2ggLWMgaG9sZC9saW51cyAmJiBnaXQgYW0gLTMgLWkgLXMgLi8raG9sZC1saW51cyA8NT4KKyQgZ2l0IHN3aXRjaCB0b3BpYy9vbmUgJiYgZ2l0IHJlYmFzZSBtYXN0ZXIgPDY+CiskIGdpdCBzd2l0Y2ggLUMgcHUgbmV4dCA8Nz4KKyQgZ2l0IG1lcmdlIHRvcGljL29uZSB0b3BpYy90d28gJiYgZ2l0IG1lcmdlIGhvbGQvbGludXMgPDg+CiskIGdpdCBzd2l0Y2ggbWFpbnQKKyQgZ2l0IGNoZXJyeS1waWNrIG1hc3Rlcn40IDw5PgorJCBjb21waWxlL3Rlc3QKKyQgZ2l0IHRhZyAtcyAtbSAiR0lUIDAuOTkuOXgiIHYwLjk5Ljl4IDwxMD4KKyQgZ2l0IGZldGNoIGtvICYmIGZvciBicmFuY2ggaW4gbWFzdGVyIG1haW50IG5leHQgcHUgPDExPgorICAgIGRvCisJZ2l0IHNob3ctYnJhbmNoIGtvLyRicmFuY2ggJGJyYW5jaCA8MTI+CisgICAgZG9uZQorJCBnaXQgcHVzaCAtLWZvbGxvdy10YWdzIGtvIDwxMz4KKy0tLS0tLS0tLS0tLQorKworPDE+IHNlZSB3aGF0IHlvdSB3ZXJlIGluIHRoZSBtaWRkbGUgb2YgZG9pbmcsIGlmIGFueXRoaW5nLgorPDI+IHNlZSB3aGljaCBicmFuY2hlcyBoYXZlbid0IGJlZW4gbWVyZ2VkIGludG8gYG1hc3RlcmAgeWV0LgorTGlrZXdpc2UgZm9yIGFueSBvdGhlciBpbnRlZ3JhdGlvbiBicmFuY2hlcyBlLmcuIGBtYWludGAsIGBuZXh0YAorYW5kIGBwdWAgKHBvdGVudGlhbCB1cGRhdGVzKS4KKzwzPiByZWFkIG1haWxzLCBzYXZlIG9uZXMgdGhhdCBhcmUgYXBwbGljYWJsZSwgYW5kIHNhdmUgb3RoZXJzCit0aGF0IGFyZSBub3QgcXVpdGUgcmVhZHkgKG90aGVyIG1haWwgcmVhZGVycyBhcmUgYXZhaWxhYmxlKS4KKzw0PiBhcHBseSB0aGVtLCBpbnRlcmFjdGl2ZWx5LCB3aXRoIHlvdXIgc2lnbi1vZmZzLgorPDU+IGNyZWF0ZSB0b3BpYyBicmFuY2ggYXMgbmVlZGVkIGFuZCBhcHBseSwgYWdhaW4gd2l0aCBzaWduLW9mZnMuCis8Nj4gcmViYXNlIGludGVybmFsIHRvcGljIGJyYW5jaCB0aGF0IGhhcyBub3QgYmVlbiBtZXJnZWQgdG8gdGhlCittYXN0ZXIgb3IgZXhwb3NlZCBhcyBhIHBhcnQgb2YgYSBzdGFibGUgYnJhbmNoLgorPDc+IHJlc3RhcnQgYHB1YCBldmVyeSB0aW1lIGZyb20gdGhlIG5leHQuCis8OD4gYW5kIGJ1bmRsZSB0b3BpYyBicmFuY2hlcyBzdGlsbCBjb29raW5nLgorPDk+IGJhY2twb3J0IGEgY3JpdGljYWwgZml4LgorPDEwPiBjcmVhdGUgYSBzaWduZWQgdGFnLgorPDExPiBtYWtlIHN1cmUgbWFzdGVyIHdhcyBub3QgYWNjaWRlbnRhbGx5IHJld291bmQgYmV5b25kIHRoYXQKK2FscmVhZHkgcHVzaGVkIG91dC4KKzwxMj4gSW4gdGhlIG91dHB1dCBmcm9tIGBnaXQgc2hvdy1icmFuY2hgLCBgbWFzdGVyYCBzaG91bGQgaGF2ZQorZXZlcnl0aGluZyBga28vbWFzdGVyYCBoYXMsIGFuZCBgbmV4dGAgc2hvdWxkIGhhdmUKK2V2ZXJ5dGhpbmcgYGtvL25leHRgIGhhcywgZXRjLgorPDEzPiBwdXNoIG91dCB0aGUgYmxlZWRpbmcgZWRnZSwgdG9nZXRoZXIgd2l0aCBuZXcgdGFncyB0aGF0IHBvaW50CitpbnRvIHRoZSBwdXNoZWQgaGlzdG9yeS4KKworSW4gdGhpcyBleGFtcGxlLCB0aGUgYGtvYCBzaG9ydGhhbmQgcG9pbnRzIGF0IHRoZSBHaXQgbWFpbnRhaW5lcidzCityZXBvc2l0b3J5IGF0IGtlcm5lbC5vcmcsIGFuZCBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorKGluIC5naXQvY29uZmlnKQorW3JlbW90ZSAia28iXQorCXVybCA9IGtlcm5lbC5vcmc6L3B1Yi9zY20vZ2l0L2dpdC5naXQKKwlmZXRjaCA9IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMva28vKgorCXB1c2ggPSByZWZzL2hlYWRzL21hc3RlcgorCXB1c2ggPSByZWZzL2hlYWRzL25leHQKKwlwdXNoID0gK3JlZnMvaGVhZHMvcHUKKwlwdXNoID0gcmVmcy9oZWFkcy9tYWludAorLS0tLS0tLS0tLS0tCisKKworUmVwb3NpdG9yeSBBZG1pbmlzdHJhdGlvbltbQURNSU5JU1RSQVRJT05dXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHJlcG9zaXRvcnkgYWRtaW5pc3RyYXRvciB1c2VzIHRoZSBmb2xsb3dpbmcgdG9vbHMgdG8gc2V0IHVwCithbmQgbWFpbnRhaW4gYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5IGJ5IGRldmVsb3BlcnMuCisKKyAgKiBsaW5rZ2l0OmdpdC1kYWVtb25bMV0gdG8gYWxsb3cgYW5vbnltb3VzIGRvd25sb2FkIGZyb20KKyAgICByZXBvc2l0b3J5LgorCisgICogbGlua2dpdDpnaXQtc2hlbGxbMV0gY2FuIGJlIHVzZWQgYXMgYSAncmVzdHJpY3RlZCBsb2dpbiBzaGVsbCcKKyAgICBmb3Igc2hhcmVkIGNlbnRyYWwgcmVwb3NpdG9yeSB1c2Vycy4KKworICAqIGxpbmtnaXQ6Z2l0LWh0dHAtYmFja2VuZFsxXSBwcm92aWRlcyBhIHNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uCisgICAgb2YgR2l0LW92ZXItSFRUUCAoIlNtYXJ0IGh0dHAiKSBhbGxvd2luZyBib3RoIGZldGNoIGFuZCBwdXNoIHNlcnZpY2VzLgorCisgICogbGlua2dpdDpnaXR3ZWJbMV0gcHJvdmlkZXMgYSB3ZWIgZnJvbnQtZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMsCisgICAgd2hpY2ggY2FuIGJlIHNldC11cCB1c2luZyB0aGUgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0gc2NyaXB0LgorCitsaW5rOmhvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUuaHRtbFt1cGRhdGUgaG9vayBob3d0b10gaGFzIGEgZ29vZAorZXhhbXBsZSBvZiBtYW5hZ2luZyBhIHNoYXJlZCBjZW50cmFsIHJlcG9zaXRvcnkuCisKK0luIGFkZGl0aW9uIHRoZXJlIGFyZSBhIG51bWJlciBvZiBvdGhlciB3aWRlbHkgZGVwbG95ZWQgaG9zdGluZywgYnJvd3NpbmcKK2FuZCByZXZpZXdpbmcgc29sdXRpb25zIHN1Y2ggYXM6CisKKyAgKiBnaXRvbGl0ZSwgZ2Vycml0IGNvZGUgcmV2aWV3LCBjZ2l0IGFuZCBvdGhlcnMuCisKK0V4YW1wbGVzCit+fn5+fn5+fgorV2UgYXNzdW1lIHRoZSBmb2xsb3dpbmcgaW4gL2V0Yy9zZXJ2aWNlczo6CisrCistLS0tLS0tLS0tLS0KKyQgZ3JlcCA5NDE4IC9ldGMvc2VydmljZXMKK2dpdAkJOTQxOC90Y3AJCSMgR2l0IFZlcnNpb24gQ29udHJvbCBTeXN0ZW0KKy0tLS0tLS0tLS0tLQorCitSdW4gZ2l0LWRhZW1vbiB0byBzZXJ2ZSAvcHViL3NjbSBmcm9tIGluZXRkLjo6CisrCistLS0tLS0tLS0tLS0KKyQgZ3JlcCBnaXQgL2V0Yy9pbmV0ZC5jb25mCitnaXQJc3RyZWFtCXRjcAlub3dhaXQJbm9ib2R5IFwKKyAgL3Vzci9iaW4vZ2l0LWRhZW1vbiBnaXQtZGFlbW9uIC0taW5ldGQgLS1leHBvcnQtYWxsIC9wdWIvc2NtCistLS0tLS0tLS0tLS0KKysKK1RoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBsaW5lIHNob3VsZCBiZSBvbiBvbmUgbGluZS4KKworUnVuIGdpdC1kYWVtb24gdG8gc2VydmUgL3B1Yi9zY20gZnJvbSB4aW5ldGQuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBjYXQgL2V0Yy94aW5ldGQuZC9naXQtZGFlbW9uCisjIGRlZmF1bHQ6IG9mZgorIyBkZXNjcmlwdGlvbjogVGhlIEdpdCBzZXJ2ZXIgb2ZmZXJzIGFjY2VzcyB0byBHaXQgcmVwb3NpdG9yaWVzCitzZXJ2aWNlIGdpdAoreworCWRpc2FibGUgPSBubworCXR5cGUgICAgICAgICAgICA9IFVOTElTVEVECisJcG9ydCAgICAgICAgICAgID0gOTQxOAorCXNvY2tldF90eXBlICAgICA9IHN0cmVhbQorCXdhaXQgICAgICAgICAgICA9IG5vCisJdXNlciAgICAgICAgICAgID0gbm9ib2R5CisJc2VydmVyICAgICAgICAgID0gL3Vzci9iaW4vZ2l0LWRhZW1vbgorCXNlcnZlcl9hcmdzICAgICA9IC0taW5ldGQgLS1leHBvcnQtYWxsIC0tYmFzZS1wYXRoPS9wdWIvc2NtCisJbG9nX29uX2ZhaWx1cmUgICs9IFVTRVJJRAorfQorLS0tLS0tLS0tLS0tCisrCitDaGVjayB5b3VyIHhpbmV0ZCg4KSBkb2N1bWVudGF0aW9uIGFuZCBzZXR1cCwgdGhpcyBpcyBmcm9tIGEgRmVkb3JhIHN5c3RlbS4KK090aGVycyBtaWdodCBiZSBkaWZmZXJlbnQuCisKK0dpdmUgcHVzaC9wdWxsIG9ubHkgYWNjZXNzIHRvIGRldmVsb3BlcnMgdXNpbmcgZ2l0LW92ZXItc3NoLjo6CisKK2UuZy4gdGhvc2UgdXNpbmc6CitgJCBnaXQgcHVzaC9wdWxsIHNzaDovL2hvc3QueHovcHViL3NjbS9wcm9qZWN0YAorKworLS0tLS0tLS0tLS0tCiskIGdyZXAgZ2l0IC9ldGMvcGFzc3dkIDwxPgorYWxpY2U6eDoxMDAwOjEwMDA6Oi9ob21lL2FsaWNlOi91c3IvYmluL2dpdC1zaGVsbAorYm9iOng6MTAwMToxMDAxOjovaG9tZS9ib2I6L3Vzci9iaW4vZ2l0LXNoZWxsCitjaW5keTp4OjEwMDI6MTAwMjo6L2hvbWUvY2luZHk6L3Vzci9iaW4vZ2l0LXNoZWxsCitkYXZpZDp4OjEwMDM6MTAwMzo6L2hvbWUvZGF2aWQ6L3Vzci9iaW4vZ2l0LXNoZWxsCiskIGdyZXAgZ2l0IC9ldGMvc2hlbGxzIDwyPgorL3Vzci9iaW4vZ2l0LXNoZWxsCistLS0tLS0tLS0tLS0KKysKKzwxPiBsb2ctaW4gc2hlbGwgaXMgc2V0IHRvIC91c3IvYmluL2dpdC1zaGVsbCwgd2hpY2ggZG9lcyBub3QKK2FsbG93IGFueXRoaW5nIGJ1dCBgZ2l0IHB1c2hgIGFuZCBgZ2l0IHB1bGxgLiAgVGhlIHVzZXJzIHJlcXVpcmUKK3NzaCBhY2Nlc3MgdG8gdGhlIG1hY2hpbmUuCis8Mj4gaW4gbWFueSBkaXN0cmlidXRpb25zIC9ldGMvc2hlbGxzIG5lZWRzIHRvIGxpc3Qgd2hhdCBpcyB1c2VkCithcyB0aGUgbG9naW4gc2hlbGwuCisKK0NWUy1zdHlsZSBzaGFyZWQgcmVwb3NpdG9yeS46OgorKworLS0tLS0tLS0tLS0tCiskIGdyZXAgZ2l0IC9ldGMvZ3JvdXAgPDE+CitnaXQ6eDo5NDE4OmFsaWNlLGJvYixjaW5keSxkYXZpZAorJCBjZCAvaG9tZS9kZXZvLmdpdAorJCBscyAtbCA8Mj4KKyAgbHJ3eHJ3eHJ3eCAgIDEgZGF2aWQgZ2l0ICAgIDE3IERlYyAgNCAyMjo0MCBIRUFEIC0+IHJlZnMvaGVhZHMvbWFzdGVyCisgIGRyd3hyd3NyLXggICAyIGRhdmlkIGdpdCAgNDA5NiBEZWMgIDQgMjI6NDAgYnJhbmNoZXMKKyAgLXJ3LXJ3LXItLSAgIDEgZGF2aWQgZ2l0ICAgIDg0IERlYyAgNCAyMjo0MCBjb25maWcKKyAgLXJ3LXJ3LXItLSAgIDEgZGF2aWQgZ2l0ICAgIDU4IERlYyAgNCAyMjo0MCBkZXNjcmlwdGlvbgorICBkcnd4cndzci14ICAgMiBkYXZpZCBnaXQgIDQwOTYgRGVjICA0IDIyOjQwIGhvb2tzCisgIC1ydy1ydy1yLS0gICAxIGRhdmlkIGdpdCAzNzUwNCBEZWMgIDQgMjI6NDAgaW5kZXgKKyAgZHJ3eHJ3c3IteCAgIDIgZGF2aWQgZ2l0ICA0MDk2IERlYyAgNCAyMjo0MCBpbmZvCisgIGRyd3hyd3NyLXggICA0IGRhdmlkIGdpdCAgNDA5NiBEZWMgIDQgMjI6NDAgb2JqZWN0cworICBkcnd4cndzci14ICAgNCBkYXZpZCBnaXQgIDQwOTYgTm92ICA3IDE0OjU4IHJlZnMKKyAgZHJ3eHJ3c3IteCAgIDIgZGF2aWQgZ2l0ICA0MDk2IERlYyAgNCAyMjo0MCByZW1vdGVzCiskIGxzIC1sIGhvb2tzL3VwZGF0ZSA8Mz4KKyAgLXIteHIteHIteCAgIDEgZGF2aWQgZ2l0ICAzNTM2IERlYyAgNCAyMjo0MCB1cGRhdGUKKyQgY2F0IGluZm8vYWxsb3dlZC11c2VycyA8ND4KK3JlZnMvaGVhZHMvbWFzdGVyCWFsaWNlXHxjaW5keQorcmVmcy9oZWFkcy9kb2MtdXBkYXRlCWJvYgorcmVmcy90YWdzL3ZbMC05XSoJZGF2aWQKKy0tLS0tLS0tLS0tLQorKworPDE+IHBsYWNlIHRoZSBkZXZlbG9wZXJzIGludG8gdGhlIHNhbWUgZ2l0IGdyb3VwLgorPDI+IGFuZCBtYWtlIHRoZSBzaGFyZWQgcmVwb3NpdG9yeSB3cml0YWJsZSBieSB0aGUgZ3JvdXAuCis8Mz4gdXNlIHVwZGF0ZS1ob29rIGV4YW1wbGUgYnkgQ2FybCBmcm9tIERvY3VtZW50YXRpb24vaG93dG8vCitmb3IgYnJhbmNoIHBvbGljeSBjb250cm9sLgorPDQ+IGFsaWNlIGFuZCBjaW5keSBjYW4gcHVzaCBpbnRvIG1hc3Rlciwgb25seSBib2IgY2FuIHB1c2ggaW50byBkb2MtdXBkYXRlLgorZGF2aWQgaXMgdGhlIHJlbGVhc2UgbWFuYWdlciBhbmQgaXMgdGhlIG9ubHkgcGVyc29uIHdobyBjYW4KK2NyZWF0ZSBhbmQgcHVzaCB2ZXJzaW9uIHRhZ3MuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRnbG9zc2FyeS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGdsb3NzYXJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzFmNjQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRnbG9zc2FyeS50eHQKQEAgLTAsMCArMSwyNyBAQAorZ2l0Z2xvc3NhcnkoNykKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGdsb3NzYXJ5IC0gQSBHaXQgR2xvc3NhcnkKKworU1lOT1BTSVMKKy0tLS0tLS0tCisqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitpbmNsdWRlOjpnbG9zc2FyeS1jb250ZW50LnR4dFtdCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0aG9va3MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjY2FiNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0aG9va3MudHh0CkBAIC0wLDAgKzEsNTUyIEBACitnaXRob29rcyg1KQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0aG9va3MgLSBIb29rcyB1c2VkIGJ5IEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KKyRHSVRfRElSL2hvb2tzLyogKG9yIFxgZ2l0IGNvbmZpZyBjb3JlLmhvb2tzUGF0aGAvKikKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSG9va3MgYXJlIHByb2dyYW1zIHlvdSBjYW4gcGxhY2UgaW4gYSBob29rcyBkaXJlY3RvcnkgdG8gdHJpZ2dlcgorYWN0aW9ucyBhdCBjZXJ0YWluIHBvaW50cyBpbiBnaXQncyBleGVjdXRpb24uIEhvb2tzIHRoYXQgZG9uJ3QgaGF2ZQordGhlIGV4ZWN1dGFibGUgYml0IHNldCBhcmUgaWdub3JlZC4KKworQnkgZGVmYXVsdCB0aGUgaG9va3MgZGlyZWN0b3J5IGlzIGAkR0lUX0RJUi9ob29rc2AsIGJ1dCB0aGF0IGNhbiBiZQorY2hhbmdlZCB2aWEgdGhlIGBjb3JlLmhvb2tzUGF0aGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitCZWZvcmUgR2l0IGludm9rZXMgYSBob29rLCBpdCBjaGFuZ2VzIGl0cyB3b3JraW5nIGRpcmVjdG9yeSB0byBlaXRoZXIKKyRHSVRfRElSIGluIGEgYmFyZSByZXBvc2l0b3J5IG9yIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUgaW4gYSBub24tYmFyZQorcmVwb3NpdG9yeS4gQW4gZXhjZXB0aW9uIGFyZSBob29rcyB0cmlnZ2VyZWQgZHVyaW5nIGEgcHVzaCAoJ3ByZS1yZWNlaXZlJywKKyd1cGRhdGUnLCAncG9zdC1yZWNlaXZlJywgJ3Bvc3QtdXBkYXRlJywgJ3B1c2gtdG8tY2hlY2tvdXQnKSB3aGljaCBhcmUgYWx3YXlzCitleGVjdXRlZCBpbiAkR0lUX0RJUi4KKworSG9va3MgY2FuIGdldCB0aGVpciBhcmd1bWVudHMgdmlhIHRoZSBlbnZpcm9ubWVudCwgY29tbWFuZC1saW5lCithcmd1bWVudHMsIGFuZCBzdGRpbi4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBlYWNoIGhvb2sgYmVsb3cgZm9yCitkZXRhaWxzLgorCitgZ2l0IGluaXRgIG1heSBjb3B5IGhvb2tzIHRvIHRoZSBuZXcgcmVwb3NpdG9yeSwgZGVwZW5kaW5nIG9uIGl0cworY29uZmlndXJhdGlvbi4gU2VlIHRoZSAiVEVNUExBVEUgRElSRUNUT1JZIiBzZWN0aW9uIGluCitsaW5rZ2l0OmdpdC1pbml0WzFdIGZvciBkZXRhaWxzLiBXaGVuIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgcmVmZXJzCit0byAiZGVmYXVsdCBob29rcyIgaXQncyB0YWxraW5nIGFib3V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlIHNoaXBwZWQKK3dpdGggR2l0LgorCitUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBob29rcyBhcmUgZGVzY3JpYmVkIGJlbG93LgorCitIT09LUworLS0tLS0KKworYXBwbHlwYXRjaC1tc2cKK35+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LWFtWzFdLiAgSXQgdGFrZXMgYSBzaW5nbGUKK3BhcmFtZXRlciwgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBob2xkcyB0aGUgcHJvcG9zZWQgY29tbWl0Citsb2cgbWVzc2FnZS4gIEV4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBjYXVzZXMgYGdpdCBhbWAgdG8gYWJvcnQKK2JlZm9yZSBhcHBseWluZyB0aGUgcGF0Y2guCisKK1RoZSBob29rIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgbWVzc2FnZSBmaWxlIGluIHBsYWNlLCBhbmQgY2FuCitiZSB1c2VkIHRvIG5vcm1hbGl6ZSB0aGUgbWVzc2FnZSBpbnRvIHNvbWUgcHJvamVjdCBzdGFuZGFyZAorZm9ybWF0LiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlZnVzZSB0aGUgY29tbWl0IGFmdGVyIGluc3BlY3RpbmcKK3RoZSBtZXNzYWdlIGZpbGUuCisKK1RoZSBkZWZhdWx0ICdhcHBseXBhdGNoLW1zZycgaG9vaywgd2hlbiBlbmFibGVkLCBydW5zIHRoZQorJ2NvbW1pdC1tc2cnIGhvb2ssIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC4KKworcHJlLWFwcGx5cGF0Y2gKK35+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LWFtWzFdLiAgSXQgdGFrZXMgbm8gcGFyYW1ldGVyLCBhbmQgaXMKK2ludm9rZWQgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQsIGJ1dCBiZWZvcmUgYSBjb21taXQgaXMgbWFkZS4KKworSWYgaXQgZXhpdHMgd2l0aCBub24temVybyBzdGF0dXMsIHRoZW4gdGhlIHdvcmtpbmcgdHJlZSB3aWxsIG5vdCBiZQorY29tbWl0dGVkIGFmdGVyIGFwcGx5aW5nIHRoZSBwYXRjaC4KKworSXQgY2FuIGJlIHVzZWQgdG8gaW5zcGVjdCB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgYW5kIHJlZnVzZSB0bworbWFrZSBhIGNvbW1pdCBpZiBpdCBkb2VzIG5vdCBwYXNzIGNlcnRhaW4gdGVzdC4KKworVGhlIGRlZmF1bHQgJ3ByZS1hcHBseXBhdGNoJyBob29rLCB3aGVuIGVuYWJsZWQsIHJ1bnMgdGhlCisncHJlLWNvbW1pdCcgaG9vaywgaWYgdGhlIGxhdHRlciBpcyBlbmFibGVkLgorCitwb3N0LWFwcGx5cGF0Y2gKK35+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1hbVsxXS4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwKK2FuZCBpcyBpbnZva2VkIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkIGFuZCBhIGNvbW1pdCBpcyBtYWRlLgorCitUaGlzIGhvb2sgaXMgbWVhbnQgcHJpbWFyaWx5IGZvciBub3RpZmljYXRpb24sIGFuZCBjYW5ub3QgYWZmZWN0Cit0aGUgb3V0Y29tZSBvZiBgZ2l0IGFtYC4KKworcHJlLWNvbW1pdAorfn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1jb21taXRbMV0sIGFuZCBjYW4gYmUgYnlwYXNzZWQKK3dpdGggdGhlIGAtLW5vLXZlcmlmeWAgb3B0aW9uLiAgSXQgdGFrZXMgbm8gcGFyYW1ldGVycywgYW5kIGlzCitpbnZva2VkIGJlZm9yZSBvYnRhaW5pbmcgdGhlIHByb3Bvc2VkIGNvbW1pdCBsb2cgbWVzc2FnZSBhbmQKK21ha2luZyBhIGNvbW1pdC4gIEV4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0CitjYXVzZXMgdGhlIGBnaXQgY29tbWl0YCBjb21tYW5kIHRvIGFib3J0IGJlZm9yZSBjcmVhdGluZyBhIGNvbW1pdC4KKworVGhlIGRlZmF1bHQgJ3ByZS1jb21taXQnIGhvb2ssIHdoZW4gZW5hYmxlZCwgY2F0Y2hlcyBpbnRyb2R1Y3Rpb24KK29mIGxpbmVzIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZXMgYW5kIGFib3J0cyB0aGUgY29tbWl0IHdoZW4KK3N1Y2ggYSBsaW5lIGlzIGZvdW5kLgorCitBbGwgdGhlIGBnaXQgY29tbWl0YCBob29rcyBhcmUgaW52b2tlZCB3aXRoIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgYEdJVF9FRElUT1I9OmAgaWYgdGhlIGNvbW1hbmQgd2lsbCBub3QgYnJpbmcgdXAgYW4gZWRpdG9yCit0byBtb2RpZnkgdGhlIGNvbW1pdCBtZXNzYWdlLgorCitUaGUgZGVmYXVsdCAncHJlLWNvbW1pdCcgaG9vaywgd2hlbiBlbmFibGVkLS1hbmQgd2l0aCB0aGUKK2Bob29rcy5hbGxvd25vbmFzY2lpYCBjb25maWcgb3B0aW9uIHVuc2V0IG9yIHNldCB0byBmYWxzZS0tcHJldmVudHMKK3RoZSB1c2Ugb2Ygbm9uLUFTQ0lJIGZpbGVuYW1lcy4KKworcHJlLW1lcmdlLWNvbW1pdAorfn5+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1tZXJnZVsxXSwgYW5kIGNhbiBiZSBieXBhc3NlZAord2l0aCB0aGUgYC0tbm8tdmVyaWZ5YCBvcHRpb24uICBJdCB0YWtlcyBubyBwYXJhbWV0ZXJzLCBhbmQgaXMKK2ludm9rZWQgYWZ0ZXIgdGhlIG1lcmdlIGhhcyBiZWVuIGNhcnJpZWQgb3V0IHN1Y2Nlc3NmdWxseSBhbmQgYmVmb3JlCitvYnRhaW5pbmcgdGhlIHByb3Bvc2VkIGNvbW1pdCBsb2cgbWVzc2FnZSB0bworbWFrZSBhIGNvbW1pdC4gIEV4aXRpbmcgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoaXMgc2NyaXB0CitjYXVzZXMgdGhlIGBnaXQgbWVyZ2VgIGNvbW1hbmQgdG8gYWJvcnQgYmVmb3JlIGNyZWF0aW5nIGEgY29tbWl0LgorCitUaGUgZGVmYXVsdCAncHJlLW1lcmdlLWNvbW1pdCcgaG9vaywgd2hlbiBlbmFibGVkLCBydW5zIHRoZQorJ3ByZS1jb21taXQnIGhvb2ssIGlmIHRoZSBsYXR0ZXIgaXMgZW5hYmxlZC4KKworVGhpcyBob29rIGlzIGludm9rZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK2BHSVRfRURJVE9SPTpgIGlmIHRoZSBjb21tYW5kIHdpbGwgbm90IGJyaW5nIHVwIGFuIGVkaXRvcgordG8gbW9kaWZ5IHRoZSBjb21taXQgbWVzc2FnZS4KKworSWYgdGhlIG1lcmdlIGNhbm5vdCBiZSBjYXJyaWVkIG91dCBhdXRvbWF0aWNhbGx5LCB0aGUgY29uZmxpY3RzCituZWVkIHRvIGJlIHJlc29sdmVkIGFuZCB0aGUgcmVzdWx0IGNvbW1pdHRlZCBzZXBhcmF0ZWx5IChzZWUKK2xpbmtnaXQ6Z2l0LW1lcmdlWzFdKS4gQXQgdGhhdCBwb2ludCwgdGhpcyBob29rIHdpbGwgbm90IGJlIGV4ZWN1dGVkLAorYnV0IHRoZSAncHJlLWNvbW1pdCcgaG9vayB3aWxsLCBpZiBpdCBpcyBlbmFibGVkLgorCitwcmVwYXJlLWNvbW1pdC1tc2cKK35+fn5+fn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gcmlnaHQgYWZ0ZXIgcHJlcGFyaW5nIHRoZQorZGVmYXVsdCBsb2cgbWVzc2FnZSwgYW5kIGJlZm9yZSB0aGUgZWRpdG9yIGlzIHN0YXJ0ZWQuCisKK0l0IHRha2VzIG9uZSB0byB0aHJlZSBwYXJhbWV0ZXJzLiAgVGhlIGZpcnN0IGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlCit0aGF0IGNvbnRhaW5zIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuICBUaGUgc2Vjb25kIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGNvbW1pdAorbWVzc2FnZSwgYW5kIGNhbiBiZTogYG1lc3NhZ2VgIChpZiBhIGAtbWAgb3IgYC1GYCBvcHRpb24gd2FzCitnaXZlbik7IGB0ZW1wbGF0ZWAgKGlmIGEgYC10YCBvcHRpb24gd2FzIGdpdmVuIG9yIHRoZQorY29uZmlndXJhdGlvbiBvcHRpb24gYGNvbW1pdC50ZW1wbGF0ZWAgaXMgc2V0KTsgYG1lcmdlYCAoaWYgdGhlCitjb21taXQgaXMgYSBtZXJnZSBvciBhIGAuZ2l0L01FUkdFX01TR2AgZmlsZSBleGlzdHMpOyBgc3F1YXNoYAorKGlmIGEgYC5naXQvU1FVQVNIX01TR2AgZmlsZSBleGlzdHMpOyBvciBgY29tbWl0YCwgZm9sbG93ZWQgYnkKK2EgY29tbWl0IFNIQS0xIChpZiBhIGAtY2AsIGAtQ2Agb3IgYC0tYW1lbmRgIG9wdGlvbiB3YXMgZ2l2ZW4pLgorCitJZiB0aGUgZXhpdCBzdGF0dXMgaXMgbm9uLXplcm8sIGBnaXQgY29tbWl0YCB3aWxsIGFib3J0LgorCitUaGUgcHVycG9zZSBvZiB0aGUgaG9vayBpcyB0byBlZGl0IHRoZSBtZXNzYWdlIGZpbGUgaW4gcGxhY2UsIGFuZAoraXQgaXMgbm90IHN1cHByZXNzZWQgYnkgdGhlIGAtLW5vLXZlcmlmeWAgb3B0aW9uLiAgQSBub24temVybyBleGl0CittZWFucyBhIGZhaWx1cmUgb2YgdGhlIGhvb2sgYW5kIGFib3J0cyB0aGUgY29tbWl0LiAgSXQgc2hvdWxkIG5vdAorYmUgdXNlZCBhcyByZXBsYWNlbWVudCBmb3IgcHJlLWNvbW1pdCBob29rLgorCitUaGUgc2FtcGxlIGBwcmVwYXJlLWNvbW1pdC1tc2dgIGhvb2sgdGhhdCBjb21lcyB3aXRoIEdpdCByZW1vdmVzIHRoZQoraGVscCBtZXNzYWdlIGZvdW5kIGluIHRoZSBjb21tZW50ZWQgcG9ydGlvbiBvZiB0aGUgY29tbWl0IHRlbXBsYXRlLgorCitjb21taXQtbXNnCit+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBhbmQgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIGFuZCBjYW4gYmUKK2J5cGFzc2VkIHdpdGggdGhlIGAtLW5vLXZlcmlmeWAgb3B0aW9uLiAgSXQgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLAordGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBob2xkcyB0aGUgcHJvcG9zZWQgY29tbWl0IGxvZyBtZXNzYWdlLgorRXhpdGluZyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIGNhdXNlcyB0aGUgY29tbWFuZCB0byBhYm9ydC4KKworVGhlIGhvb2sgaXMgYWxsb3dlZCB0byBlZGl0IHRoZSBtZXNzYWdlIGZpbGUgaW4gcGxhY2UsIGFuZCBjYW4gYmUgdXNlZAordG8gbm9ybWFsaXplIHRoZSBtZXNzYWdlIGludG8gc29tZSBwcm9qZWN0IHN0YW5kYXJkIGZvcm1hdC4gSXQKK2NhbiBhbHNvIGJlIHVzZWQgdG8gcmVmdXNlIHRoZSBjb21taXQgYWZ0ZXIgaW5zcGVjdGluZyB0aGUgbWVzc2FnZQorZmlsZS4KKworVGhlIGRlZmF1bHQgJ2NvbW1pdC1tc2cnIGhvb2ssIHdoZW4gZW5hYmxlZCwgZGV0ZWN0cyBkdXBsaWNhdGUKKyJTaWduZWQtb2ZmLWJ5IiBsaW5lcywgYW5kIGFib3J0cyB0aGUgY29tbWl0IGlmIG9uZSBpcyBmb3VuZC4KKworcG9zdC1jb21taXQKK35+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXS4gSXQgdGFrZXMgbm8gcGFyYW1ldGVycywgYW5kIGlzCitpbnZva2VkIGFmdGVyIGEgY29tbWl0IGlzIG1hZGUuCisKK1RoaXMgaG9vayBpcyBtZWFudCBwcmltYXJpbHkgZm9yIG5vdGlmaWNhdGlvbiwgYW5kIGNhbm5vdCBhZmZlY3QKK3RoZSBvdXRjb21lIG9mIGBnaXQgY29tbWl0YC4KKworcHJlLXJlYmFzZQorfn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5IGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSBhbmQgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBhCiticmFuY2ggZnJvbSBnZXR0aW5nIHJlYmFzZWQuICBUaGUgaG9vayBtYXkgYmUgY2FsbGVkIHdpdGggb25lIG9yCit0d28gcGFyYW1ldGVycy4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIHVwc3RyZWFtIGZyb20gd2hpY2gKK3RoZSBzZXJpZXMgd2FzIGZvcmtlZC4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBicmFuY2ggYmVpbmcKK3JlYmFzZWQsIGFuZCBpcyBub3Qgc2V0IHdoZW4gcmViYXNpbmcgdGhlIGN1cnJlbnQgYnJhbmNoLgorCitwb3N0LWNoZWNrb3V0Cit+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIHdoZW4gYSBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBvcgorbGlua2dpdDpnaXQtc3dpdGNoWzFdIGlzIHJ1biBhZnRlciBoYXZpbmcgdXBkYXRlZCB0aGUKK3dvcmt0cmVlLiAgVGhlIGhvb2sgaXMgZ2l2ZW4gdGhyZWUgcGFyYW1ldGVyczogdGhlIHJlZiBvZiB0aGUgcHJldmlvdXMgSEVBRCwKK3RoZSByZWYgb2YgdGhlIG5ldyBIRUFEICh3aGljaCBtYXkgb3IgbWF5IG5vdCBoYXZlIGNoYW5nZWQpLCBhbmQgYSBmbGFnCitpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNoZWNrb3V0IHdhcyBhIGJyYW5jaCBjaGVja291dCAoY2hhbmdpbmcgYnJhbmNoZXMsCitmbGFnPTEpIG9yIGEgZmlsZSBjaGVja291dCAocmV0cmlldmluZyBhIGZpbGUgZnJvbSB0aGUgaW5kZXgsIGZsYWc9MCkuCitUaGlzIGhvb2sgY2Fubm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZiBgZ2l0IHN3aXRjaGAgb3IgYGdpdCBjaGVja291dGAuCisKK0l0IGlzIGFsc28gcnVuIGFmdGVyIGxpbmtnaXQ6Z2l0LWNsb25lWzFdLCB1bmxlc3MgdGhlIGAtLW5vLWNoZWNrb3V0YCAoYC1uYCkgb3B0aW9uIGlzCit1c2VkLiBUaGUgZmlyc3QgcGFyYW1ldGVyIGdpdmVuIHRvIHRoZSBob29rIGlzIHRoZSBudWxsLXJlZiwgdGhlIHNlY29uZCB0aGUKK3JlZiBvZiB0aGUgbmV3IEhFQUQgYW5kIHRoZSBmbGFnIGlzIGFsd2F5cyAxLiBMaWtld2lzZSBmb3IgYGdpdCB3b3JrdHJlZSBhZGRgCit1bmxlc3MgYC0tbm8tY2hlY2tvdXRgIGlzIHVzZWQuCisKK1RoaXMgaG9vayBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHJlcG9zaXRvcnkgdmFsaWRpdHkgY2hlY2tzLCBhdXRvLWRpc3BsYXkKK2RpZmZlcmVuY2VzIGZyb20gdGhlIHByZXZpb3VzIEhFQUQgaWYgZGlmZmVyZW50LCBvciBzZXQgd29ya2luZyBkaXIgbWV0YWRhdGEKK3Byb3BlcnRpZXMuCisKK3Bvc3QtbWVyZ2UKK35+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIHdoaWNoIGhhcHBlbnMgd2hlbiBhIGBnaXQgcHVsbGAKK2lzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LiAgVGhlIGhvb2sgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLCBhIHN0YXR1cworZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBtZXJnZSBiZWluZyBkb25lIHdhcyBhIHNxdWFzaCBtZXJnZS4KK1RoaXMgaG9vayBjYW5ub3QgYWZmZWN0IHRoZSBvdXRjb21lIG9mIGBnaXQgbWVyZ2VgIGFuZCBpcyBub3QgZXhlY3V0ZWQsCitpZiB0aGUgbWVyZ2UgZmFpbGVkIGR1ZSB0byBjb25mbGljdHMuCisKK1RoaXMgaG9vayBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgY29ycmVzcG9uZGluZyBwcmUtY29tbWl0IGhvb2sgdG8KK3NhdmUgYW5kIHJlc3RvcmUgYW55IGZvcm0gb2YgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB3b3JraW5nIHRyZWUKKyhlLmcuOiBwZXJtaXNzaW9ucy9vd25lcnNoaXAsIEFDTFMsIGV0YykuICBTZWUgY29udHJpYi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsCitmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gZG8gdGhpcy4KKworcHJlLXB1c2gKK35+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBjYWxsZWQgYnkgbGlua2dpdDpnaXQtcHVzaFsxXSBhbmQgY2FuIGJlIHVzZWQgdG8gcHJldmVudAorYSBwdXNoIGZyb20gdGFraW5nIHBsYWNlLiAgVGhlIGhvb2sgaXMgY2FsbGVkIHdpdGggdHdvIHBhcmFtZXRlcnMKK3doaWNoIHByb3ZpZGUgdGhlIG5hbWUgYW5kIGxvY2F0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiByZW1vdGUsIGlmIGEKK25hbWVkIHJlbW90ZSBpcyBub3QgYmVpbmcgdXNlZCBib3RoIHZhbHVlcyB3aWxsIGJlIHRoZSBzYW1lLgorCitJbmZvcm1hdGlvbiBhYm91dCB3aGF0IGlzIHRvIGJlIHB1c2hlZCBpcyBwcm92aWRlZCBvbiB0aGUgaG9vaydzIHN0YW5kYXJkCitpbnB1dCB3aXRoIGxpbmVzIG9mIHRoZSBmb3JtOgorCisgIDxsb2NhbCByZWY+IFNQIDxsb2NhbCBzaGExPiBTUCA8cmVtb3RlIHJlZj4gU1AgPHJlbW90ZSBzaGExPiBMRgorCitGb3IgaW5zdGFuY2UsIGlmIHRoZSBjb21tYW5kICtnaXQgcHVzaCBvcmlnaW4gbWFzdGVyOmZvcmVpZ24rIHdlcmUgcnVuIHRoZQoraG9vayB3b3VsZCByZWNlaXZlIGEgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgcmVmcy9oZWFkcy9tYXN0ZXIgNjc4OTAgcmVmcy9oZWFkcy9mb3JlaWduIDEyMzQ1CisKK2FsdGhvdWdoIHRoZSBmdWxsLCA0MC1jaGFyYWN0ZXIgU0hBLTFzIHdvdWxkIGJlIHN1cHBsaWVkLiAgSWYgdGhlIGZvcmVpZ24gcmVmCitkb2VzIG5vdCB5ZXQgZXhpc3QgdGhlIGA8cmVtb3RlIFNIQS0xPmAgd2lsbCBiZSA0MCBgMGAuICBJZiBhIHJlZiBpcyB0byBiZQorZGVsZXRlZCwgdGhlIGA8bG9jYWwgcmVmPmAgd2lsbCBiZSBzdXBwbGllZCBhcyBgKGRlbGV0ZSlgIGFuZCB0aGUgYDxsb2NhbAorU0hBLTE+YCB3aWxsIGJlIDQwIGAwYC4gIElmIHRoZSBsb2NhbCBjb21taXQgd2FzIHNwZWNpZmllZCBieSBzb21ldGhpbmcgb3RoZXIKK3RoYW4gYSBuYW1lIHdoaWNoIGNvdWxkIGJlIGV4cGFuZGVkIChzdWNoIGFzIGBIRUFEfmAsIG9yIGEgU0hBLTEpIGl0IHdpbGwgYmUKK3N1cHBsaWVkIGFzIGl0IHdhcyBvcmlnaW5hbGx5IGdpdmVuLgorCitJZiB0aGlzIGhvb2sgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cywgYGdpdCBwdXNoYCB3aWxsIGFib3J0IHdpdGhvdXQKK3B1c2hpbmcgYW55dGhpbmcuICBJbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhlIHB1c2ggaXMgcmVqZWN0ZWQgbWF5IGJlIHNlbnQKK3RvIHRoZSB1c2VyIGJ5IHdyaXRpbmcgdG8gc3RhbmRhcmQgZXJyb3IuCisKK1tbcHJlLXJlY2VpdmVdXQorcHJlLXJlY2VpdmUKK35+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSB3aGVuIGl0IHJlYWN0cyB0bworYGdpdCBwdXNoYCBhbmQgdXBkYXRlcyByZWZlcmVuY2UocykgaW4gaXRzIHJlcG9zaXRvcnkuCitKdXN0IGJlZm9yZSBzdGFydGluZyB0byB1cGRhdGUgcmVmcyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIHRoZQorcHJlLXJlY2VpdmUgaG9vayBpcyBpbnZva2VkLiAgSXRzIGV4aXQgc3RhdHVzIGRldGVybWluZXMgdGhlIHN1Y2Nlc3MKK29yIGZhaWx1cmUgb2YgdGhlIHVwZGF0ZS4KKworVGhpcyBob29rIGV4ZWN1dGVzIG9uY2UgZm9yIHRoZSByZWNlaXZlIG9wZXJhdGlvbi4gSXQgdGFrZXMgbm8KK2FyZ3VtZW50cywgYnV0IGZvciBlYWNoIHJlZiB0byBiZSB1cGRhdGVkIGl0IHJlY2VpdmVzIG9uIHN0YW5kYXJkCitpbnB1dCBhIGxpbmUgb2YgdGhlIGZvcm1hdDoKKworICA8b2xkLXZhbHVlPiBTUCA8bmV3LXZhbHVlPiBTUCA8cmVmLW5hbWU+IExGCisKK3doZXJlIGA8b2xkLXZhbHVlPmAgaXMgdGhlIG9sZCBvYmplY3QgbmFtZSBzdG9yZWQgaW4gdGhlIHJlZiwKK2A8bmV3LXZhbHVlPmAgaXMgdGhlIG5ldyBvYmplY3QgbmFtZSB0byBiZSBzdG9yZWQgaW4gdGhlIHJlZiBhbmQKK2A8cmVmLW5hbWU+YCBpcyB0aGUgZnVsbCBuYW1lIG9mIHRoZSByZWYuCitXaGVuIGNyZWF0aW5nIGEgbmV3IHJlZiwgYDxvbGQtdmFsdWU+YCBpcyA0MCBgMGAuCisKK0lmIHRoZSBob29rIGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzLCBub25lIG9mIHRoZSByZWZzIHdpbGwgYmUKK3VwZGF0ZWQuIElmIHRoZSBob29rIGV4aXRzIHdpdGggemVybywgdXBkYXRpbmcgb2YgaW5kaXZpZHVhbCByZWZzIGNhbgorc3RpbGwgYmUgcHJldmVudGVkIGJ5IHRoZSA8PHVwZGF0ZSwndXBkYXRlJz4+IGhvb2suCisKK0JvdGggc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBvdXRwdXQgYXJlIGZvcndhcmRlZCB0bworYGdpdCBzZW5kLXBhY2tgIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcworZm9yIHRoZSB1c2VyLgorCitUaGUgbnVtYmVyIG9mIHB1c2ggb3B0aW9ucyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIG9mCitgZ2l0IHB1c2ggLS1wdXNoLW9wdGlvbj0uLi5gIGNhbiBiZSByZWFkIGZyb20gdGhlIGVudmlyb25tZW50Cit2YXJpYWJsZSBgR0lUX1BVU0hfT1BUSU9OX0NPVU5UYCwgYW5kIHRoZSBvcHRpb25zIHRoZW1zZWx2ZXMgYXJlCitmb3VuZCBpbiBgR0lUX1BVU0hfT1BUSU9OXzBgLCBgR0lUX1BVU0hfT1BUSU9OXzFgLC4uLgorSWYgaXQgaXMgbmVnb3RpYXRlZCB0byBub3QgdXNlIHRoZSBwdXNoIG9wdGlvbnMgcGhhc2UsIHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgbm90IGJlIHNldC4gSWYgdGhlIGNsaWVudCBzZWxlY3RzCit0byB1c2UgcHVzaCBvcHRpb25zLCBidXQgZG9lc24ndCB0cmFuc21pdCBhbnksIHRoZSBjb3VudCB2YXJpYWJsZQord2lsbCBiZSBzZXQgdG8gemVybywgYEdJVF9QVVNIX09QVElPTl9DT1VOVD0wYC4KKworU2VlIHRoZSBzZWN0aW9uIG9uICJRdWFyYW50aW5lIEVudmlyb25tZW50IiBpbgorbGlua2dpdDpnaXQtcmVjZWl2ZS1wYWNrWzFdIGZvciBzb21lIGNhdmVhdHMuCisKK1tbdXBkYXRlXV0KK3VwZGF0ZQorfn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSB3aGVuIGl0IHJlYWN0cyB0bworYGdpdCBwdXNoYCBhbmQgdXBkYXRlcyByZWZlcmVuY2UocykgaW4gaXRzIHJlcG9zaXRvcnkuCitKdXN0IGJlZm9yZSB1cGRhdGluZyB0aGUgcmVmIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwgdGhlIHVwZGF0ZSBob29rCitpcyBpbnZva2VkLiAgSXRzIGV4aXQgc3RhdHVzIGRldGVybWluZXMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZgordGhlIHJlZiB1cGRhdGUuCisKK1RoZSBob29rIGV4ZWN1dGVzIG9uY2UgZm9yIGVhY2ggcmVmIHRvIGJlIHVwZGF0ZWQsIGFuZCB0YWtlcwordGhyZWUgcGFyYW1ldGVyczoKKworIC0gdGhlIG5hbWUgb2YgdGhlIHJlZiBiZWluZyB1cGRhdGVkLAorIC0gdGhlIG9sZCBvYmplY3QgbmFtZSBzdG9yZWQgaW4gdGhlIHJlZiwKKyAtIGFuZCB0aGUgbmV3IG9iamVjdCBuYW1lIHRvIGJlIHN0b3JlZCBpbiB0aGUgcmVmLgorCitBIHplcm8gZXhpdCBmcm9tIHRoZSB1cGRhdGUgaG9vayBhbGxvd3MgdGhlIHJlZiB0byBiZSB1cGRhdGVkLgorRXhpdGluZyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIHByZXZlbnRzIGBnaXQgcmVjZWl2ZS1wYWNrYAorZnJvbSB1cGRhdGluZyB0aGF0IHJlZi4KKworVGhpcyBob29rIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgJ2ZvcmNlZCcgdXBkYXRlIG9uIGNlcnRhaW4gcmVmcyBieQorbWFraW5nIHN1cmUgdGhhdCB0aGUgb2JqZWN0IG5hbWUgaXMgYSBjb21taXQgb2JqZWN0IHRoYXQgaXMgYQorZGVzY2VuZGFudCBvZiB0aGUgY29tbWl0IG9iamVjdCBuYW1lZCBieSB0aGUgb2xkIG9iamVjdCBuYW1lLgorVGhhdCBpcywgdG8gZW5mb3JjZSBhICJmYXN0LWZvcndhcmQgb25seSIgcG9saWN5LgorCitJdCBjb3VsZCBhbHNvIGJlIHVzZWQgdG8gbG9nIHRoZSBvbGQuLm5ldyBzdGF0dXMuICBIb3dldmVyLCBpdAorZG9lcyBub3Qga25vdyB0aGUgZW50aXJlIHNldCBvZiBicmFuY2hlcywgc28gaXQgd291bGQgZW5kIHVwCitmaXJpbmcgb25lIGUtbWFpbCBwZXIgcmVmIHdoZW4gdXNlZCBuYWl2ZWx5LCB0aG91Z2guICBUaGUKKzw8cG9zdC1yZWNlaXZlLCdwb3N0LXJlY2VpdmUnPj4gaG9vayBpcyBtb3JlIHN1aXRlZCB0byB0aGF0LgorCitJbiBhbiBlbnZpcm9ubWVudCB0aGF0IHJlc3RyaWN0cyB0aGUgdXNlcnMnIGFjY2VzcyBvbmx5IHRvIGdpdAorY29tbWFuZHMgb3ZlciB0aGUgd2lyZSwgdGhpcyBob29rIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBhY2Nlc3MKK2NvbnRyb2wgd2l0aG91dCByZWx5aW5nIG9uIGZpbGVzeXN0ZW0gb3duZXJzaGlwIGFuZCBncm91cAorbWVtYmVyc2hpcC4gU2VlIGxpbmtnaXQ6Z2l0LXNoZWxsWzFdIGZvciBob3cgeW91IG1pZ2h0IHVzZSB0aGUgbG9naW4KK3NoZWxsIHRvIHJlc3RyaWN0IHRoZSB1c2VyJ3MgYWNjZXNzIHRvIG9ubHkgZ2l0IGNvbW1hbmRzLgorCitCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KK2BnaXQgc2VuZC1wYWNrYCBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKK2ZvciB0aGUgdXNlci4KKworVGhlIGRlZmF1bHQgJ3VwZGF0ZScgaG9vaywgd2hlbiBlbmFibGVkLS1hbmQgd2l0aAorYGhvb2tzLmFsbG93dW5hbm5vdGF0ZWRgIGNvbmZpZyBvcHRpb24gdW5zZXQgb3Igc2V0IHRvIGZhbHNlLS1wcmV2ZW50cwordW5hbm5vdGF0ZWQgdGFncyB0byBiZSBwdXNoZWQuCisKK1tbcG9zdC1yZWNlaXZlXV0KK3Bvc3QtcmVjZWl2ZQorfn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSB3aGVuIGl0IHJlYWN0cyB0bworYGdpdCBwdXNoYCBhbmQgdXBkYXRlcyByZWZlcmVuY2UocykgaW4gaXRzIHJlcG9zaXRvcnkuCitJdCBleGVjdXRlcyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb25jZSBhZnRlciBhbGwgdGhlIHJlZnMgaGF2ZQorYmVlbiB1cGRhdGVkLgorCitUaGlzIGhvb2sgZXhlY3V0ZXMgb25jZSBmb3IgdGhlIHJlY2VpdmUgb3BlcmF0aW9uLiAgSXQgdGFrZXMgbm8KK2FyZ3VtZW50cywgYnV0IGdldHMgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlCis8PHByZS1yZWNlaXZlLCdwcmUtcmVjZWl2ZSc+PgoraG9vayBkb2VzIG9uIGl0cyBzdGFuZGFyZCBpbnB1dC4KKworVGhpcyBob29rIGRvZXMgbm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZiBgZ2l0IHJlY2VpdmUtcGFja2AsIGFzIGl0CitpcyBjYWxsZWQgYWZ0ZXIgdGhlIHJlYWwgd29yayBpcyBkb25lLgorCitUaGlzIHN1cGVyc2VkZXMgdGhlIDw8cG9zdC11cGRhdGUsJ3Bvc3QtdXBkYXRlJz4+IGhvb2sgaW4gdGhhdCBpdCBnZXRzCitib3RoIG9sZCBhbmQgbmV3IHZhbHVlcyBvZiBhbGwgdGhlIHJlZnMgaW4gYWRkaXRpb24gdG8gdGhlaXIKK25hbWVzLgorCitCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KK2BnaXQgc2VuZC1wYWNrYCBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKK2ZvciB0aGUgdXNlci4KKworVGhlIGRlZmF1bHQgJ3Bvc3QtcmVjZWl2ZScgaG9vayBpcyBlbXB0eSwgYnV0IHRoZXJlIGlzCithIHNhbXBsZSBzY3JpcHQgYHBvc3QtcmVjZWl2ZS1lbWFpbGAgcHJvdmlkZWQgaW4gdGhlIGBjb250cmliL2hvb2tzYAorZGlyZWN0b3J5IGluIEdpdCBkaXN0cmlidXRpb24sIHdoaWNoIGltcGxlbWVudHMgc2VuZGluZyBjb21taXQKK2VtYWlscy4KKworVGhlIG51bWJlciBvZiBwdXNoIG9wdGlvbnMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBvZgorYGdpdCBwdXNoIC0tcHVzaC1vcHRpb249Li4uYCBjYW4gYmUgcmVhZCBmcm9tIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgYEdJVF9QVVNIX09QVElPTl9DT1VOVGAsIGFuZCB0aGUgb3B0aW9ucyB0aGVtc2VsdmVzIGFyZQorZm91bmQgaW4gYEdJVF9QVVNIX09QVElPTl8wYCwgYEdJVF9QVVNIX09QVElPTl8xYCwuLi4KK0lmIGl0IGlzIG5lZ290aWF0ZWQgdG8gbm90IHVzZSB0aGUgcHVzaCBvcHRpb25zIHBoYXNlLCB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIG5vdCBiZSBzZXQuIElmIHRoZSBjbGllbnQgc2VsZWN0cwordG8gdXNlIHB1c2ggb3B0aW9ucywgYnV0IGRvZXNuJ3QgdHJhbnNtaXQgYW55LCB0aGUgY291bnQgdmFyaWFibGUKK3dpbGwgYmUgc2V0IHRvIHplcm8sIGBHSVRfUFVTSF9PUFRJT05fQ09VTlQ9MGAuCisKK1tbcG9zdC11cGRhdGVdXQorcG9zdC11cGRhdGUKK35+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSB3aGVuIGl0IHJlYWN0cyB0bworYGdpdCBwdXNoYCBhbmQgdXBkYXRlcyByZWZlcmVuY2UocykgaW4gaXRzIHJlcG9zaXRvcnkuCitJdCBleGVjdXRlcyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb25jZSBhZnRlciBhbGwgdGhlIHJlZnMgaGF2ZQorYmVlbiB1cGRhdGVkLgorCitJdCB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBwYXJhbWV0ZXJzLCBlYWNoIG9mIHdoaWNoIGlzIHRoZQorbmFtZSBvZiByZWYgdGhhdCB3YXMgYWN0dWFsbHkgdXBkYXRlZC4KKworVGhpcyBob29rIGlzIG1lYW50IHByaW1hcmlseSBmb3Igbm90aWZpY2F0aW9uLCBhbmQgY2Fubm90IGFmZmVjdAordGhlIG91dGNvbWUgb2YgYGdpdCByZWNlaXZlLXBhY2tgLgorCitUaGUgJ3Bvc3QtdXBkYXRlJyBob29rIGNhbiB0ZWxsIHdoYXQgYXJlIHRoZSBoZWFkcyB0aGF0IHdlcmUgcHVzaGVkLAorYnV0IGl0IGRvZXMgbm90IGtub3cgd2hhdCB0aGVpciBvcmlnaW5hbCBhbmQgdXBkYXRlZCB2YWx1ZXMgYXJlLAorc28gaXQgaXMgYSBwb29yIHBsYWNlIHRvIGRvIGxvZyBvbGQuLm5ldy4gVGhlCis8PHBvc3QtcmVjZWl2ZSwncG9zdC1yZWNlaXZlJz4+IGhvb2sgZG9lcyBnZXQgYm90aCBvcmlnaW5hbCBhbmQKK3VwZGF0ZWQgdmFsdWVzIG9mIHRoZSByZWZzLiBZb3UgbWlnaHQgY29uc2lkZXIgaXQgaW5zdGVhZCBpZiB5b3UgbmVlZAordGhlbS4KKworV2hlbiBlbmFibGVkLCB0aGUgZGVmYXVsdCAncG9zdC11cGRhdGUnIGhvb2sgcnVucworYGdpdCB1cGRhdGUtc2VydmVyLWluZm9gIHRvIGtlZXAgdGhlIGluZm9ybWF0aW9uIHVzZWQgYnkgZHVtYgordHJhbnNwb3J0cyAoZS5nLiwgSFRUUCkgdXAgdG8gZGF0ZS4gIElmIHlvdSBhcmUgcHVibGlzaGluZworYSBHaXQgcmVwb3NpdG9yeSB0aGF0IGlzIGFjY2Vzc2libGUgdmlhIEhUVFAsIHlvdSBzaG91bGQKK3Byb2JhYmx5IGVuYWJsZSB0aGlzIGhvb2suCisKK0JvdGggc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBvdXRwdXQgYXJlIGZvcndhcmRlZCB0bworYGdpdCBzZW5kLXBhY2tgIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcworZm9yIHRoZSB1c2VyLgorCitwdXNoLXRvLWNoZWNrb3V0Cit+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGxpbmtnaXQ6Z2l0LXJlY2VpdmUtcGFja1sxXSB3aGVuIGl0IHJlYWN0cyB0bworYGdpdCBwdXNoYCBhbmQgdXBkYXRlcyByZWZlcmVuY2UocykgaW4gaXRzIHJlcG9zaXRvcnksIGFuZCB3aGVuCit0aGUgcHVzaCB0cmllcyB0byB1cGRhdGUgdGhlIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkIG91dAorYW5kIHRoZSBgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBzZXQgdG8KK2B1cGRhdGVJbnN0ZWFkYC4gIFN1Y2ggYSBwdXNoIGJ5IGRlZmF1bHQgaXMgcmVmdXNlZCBpZiB0aGUgd29ya2luZwordHJlZSBhbmQgdGhlIGluZGV4IG9mIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBoYXMgYW55IGRpZmZlcmVuY2UgZnJvbQordGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBjb21taXQ7IHdoZW4gYm90aCB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUKK2luZGV4IG1hdGNoIHRoZSBjdXJyZW50IGNvbW1pdCwgdGhleSBhcmUgdXBkYXRlZCB0byBtYXRjaCB0aGUgbmV3bHkKK3B1c2hlZCB0aXAgb2YgdGhlIGJyYW5jaC4gIFRoaXMgaG9vayBpcyB0byBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZQorZGVmYXVsdCBiZWhhdmlvdXIuCisKK1RoZSBob29rIHJlY2VpdmVzIHRoZSBjb21taXQgd2l0aCB3aGljaCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50CiticmFuY2ggaXMgZ29pbmcgdG8gYmUgdXBkYXRlZC4gIEl0IGNhbiBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMKK3RvIHJlZnVzZSB0aGUgcHVzaCAod2hlbiBpdCBkb2VzIHNvLCBpdCBtdXN0IG5vdCBtb2RpZnkgdGhlIGluZGV4IG9yCit0aGUgd29ya2luZyB0cmVlKS4gIE9yIGl0IGNhbiBtYWtlIGFueSBuZWNlc3NhcnkgY2hhbmdlcyB0byB0aGUKK3dvcmtpbmcgdHJlZSBhbmQgdG8gdGhlIGluZGV4IHRvIGJyaW5nIHRoZW0gdG8gdGhlIGRlc2lyZWQgc3RhdGUKK3doZW4gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggaXMgdXBkYXRlZCB0byB0aGUgbmV3IGNvbW1pdCwgYW5kCitleGl0IHdpdGggYSB6ZXJvIHN0YXR1cy4KKworRm9yIGV4YW1wbGUsIHRoZSBob29rIGNhbiBzaW1wbHkgcnVuIGBnaXQgcmVhZC10cmVlIC11IC1tIEhFQUQgIiQxImAKK2luIG9yZGVyIHRvIGVtdWxhdGUgYGdpdCBmZXRjaGAgdGhhdCBpcyBydW4gaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uCit3aXRoIGBnaXQgcHVzaGAsIGFzIHRoZSB0d28tdHJlZSBmb3JtIG9mIGBnaXQgcmVhZC10cmVlIC11IC1tYCBpcworZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgYGdpdCBzd2l0Y2hgIG9yIGBnaXQgY2hlY2tvdXRgCit0aGF0IHN3aXRjaGVzIGJyYW5jaGVzIHdoaWxlCitrZWVwaW5nIHRoZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCBkbyBub3QgaW50ZXJmZXJlCit3aXRoIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGJyYW5jaGVzLgorCisKK3ByZS1hdXRvLWdjCit+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBgZ2l0IGdjIC0tYXV0b2AgKHNlZSBsaW5rZ2l0OmdpdC1nY1sxXSkuIEl0Cit0YWtlcyBubyBwYXJhbWV0ZXIsIGFuZCBleGl0aW5nIHdpdGggbm9uLXplcm8gc3RhdHVzIGZyb20gdGhpcyBzY3JpcHQKK2NhdXNlcyB0aGUgYGdpdCBnYyAtLWF1dG9gIHRvIGFib3J0LgorCitwb3N0LXJld3JpdGUKK35+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBjb21tYW5kcyB0aGF0IHJld3JpdGUgY29tbWl0cworKGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSB3aGVuIGNhbGxlZCB3aXRoIGAtLWFtZW5kYCBhbmQKK2xpbmtnaXQ6Z2l0LXJlYmFzZVsxXTsgaG93ZXZlciwgZnVsbC1oaXN0b3J5IChyZSl3cml0aW5nIHRvb2xzIGxpa2UKK2xpbmtnaXQ6Z2l0LWZhc3QtaW1wb3J0WzFdIG9yCitodHRwczovL2dpdGh1Yi5jb20vbmV3cmVuL2dpdC1maWx0ZXItcmVwb1tnaXQtZmlsdGVyLXJlcG9dIHR5cGljYWxseQorZG8gbm90IGNhbGwgaXQhKS4gIEl0cyBmaXJzdCBhcmd1bWVudCBkZW5vdGVzIHRoZSBjb21tYW5kIGl0IHdhcworaW52b2tlZCBieTogY3VycmVudGx5IG9uZSBvZiBgYW1lbmRgIG9yIGByZWJhc2VgLiAgRnVydGhlcgorY29tbWFuZC1kZXBlbmRlbnQgYXJndW1lbnRzIG1heSBiZSBwYXNzZWQgaW4gdGhlIGZ1dHVyZS4KKworVGhlIGhvb2sgcmVjZWl2ZXMgYSBsaXN0IG9mIHRoZSByZXdyaXR0ZW4gY29tbWl0cyBvbiBzdGRpbiwgaW4gdGhlCitmb3JtYXQKKworICA8b2xkLXNoYTE+IFNQIDxuZXctc2hhMT4gWyBTUCA8ZXh0cmEtaW5mbz4gXSBMRgorCitUaGUgJ2V4dHJhLWluZm8nIGlzIGFnYWluIGNvbW1hbmQtZGVwZW5kZW50LiAgSWYgaXQgaXMgZW1wdHksIHRoZQorcHJlY2VkaW5nIFNQIGlzIGFsc28gb21pdHRlZC4gIEN1cnJlbnRseSwgbm8gY29tbWFuZHMgcGFzcyBhbnkKKydleHRyYS1pbmZvJy4KKworVGhlIGhvb2sgYWx3YXlzIHJ1bnMgYWZ0ZXIgdGhlIGF1dG9tYXRpYyBub3RlIGNvcHlpbmcgKHNlZQorIm5vdGVzLnJld3JpdGUuPGNvbW1hbmQ+IiBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0pIGhhcyBoYXBwZW5lZCwgYW5kCit0aHVzIGhhcyBhY2Nlc3MgdG8gdGhlc2Ugbm90ZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZC1zcGVjaWZpYyBjb21tZW50cyBhcHBseToKKworcmViYXNlOjoKKwlGb3IgdGhlICdzcXVhc2gnIGFuZCAnZml4dXAnIG9wZXJhdGlvbiwgYWxsIGNvbW1pdHMgdGhhdCB3ZXJlCisJc3F1YXNoZWQgYXJlIGxpc3RlZCBhcyBiZWluZyByZXdyaXR0ZW4gdG8gdGhlIHNxdWFzaGVkIGNvbW1pdC4KKwlUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBzZXZlcmFsIGxpbmVzIHNoYXJpbmcgdGhlIHNhbWUKKwknbmV3LXNoYTEnLgorKworVGhlIGNvbW1pdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgbGlzdGVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZQorcHJvY2Vzc2VkIGJ5IHJlYmFzZS4KKworc2VuZGVtYWlsLXZhbGlkYXRlCit+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXS4gIEl0IHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwKK3RoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIGUtbWFpbCB0byBiZSBzZW50LiAgRXhpdGluZyB3aXRoIGEKK25vbi16ZXJvIHN0YXR1cyBjYXVzZXMgYGdpdCBzZW5kLWVtYWlsYCB0byBhYm9ydCBiZWZvcmUgc2VuZGluZyBhbnkKK2UtbWFpbHMuCisKK2ZzbW9uaXRvci13YXRjaG1hbgorfn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBjb3JlLmZzbW9uaXRvcmAgaXMKK3NldCB0byBgLmdpdC9ob29rcy9mc21vbml0b3Itd2F0Y2htYW5gIG9yIGAuZ2l0L2hvb2tzL2ZzbW9uaXRvci13YXRjaG1hbnYyYAorZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBob29rIHRvIHVzZS4KKworVmVyc2lvbiAxIHRha2VzIHR3byBhcmd1bWVudHMsIGEgdmVyc2lvbiAoMSkgYW5kIHRoZSB0aW1lIGluIGVsYXBzZWQKK25hbm9zZWNvbmRzIHNpbmNlIG1pZG5pZ2h0LCBKYW51YXJ5IDEsIDE5NzAuCisKK1ZlcnNpb24gMiB0YWtlcyB0d28gYXJndW1lbnRzLCBhIHZlcnNpb24gKDIpIGFuZCBhIHRva2VuIHRoYXQgaXMgdXNlZAorZm9yIGlkZW50aWZ5aW5nIGNoYW5nZXMgc2luY2UgdGhlIHRva2VuLiBGb3Igd2F0Y2htYW4gdGhpcyB3b3VsZCBiZQorYSBjbG9jayBpZC4gVGhpcyB2ZXJzaW9uIG11c3Qgb3V0cHV0IHRvIHN0ZG91dCB0aGUgbmV3IHRva2VuIGZvbGxvd2VkCitieSBhIE5VTCBiZWZvcmUgdGhlIGxpc3Qgb2YgZmlsZXMuCisKK1RoZSBob29rIHNob3VsZCBvdXRwdXQgdG8gc3Rkb3V0IHRoZSBsaXN0IG9mIGFsbCBmaWxlcyBpbiB0aGUgd29ya2luZworZGlyZWN0b3J5IHRoYXQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgcmVxdWVzdGVkIHRpbWUuICBUaGUgbG9naWMKK3Nob3VsZCBiZSBpbmNsdXNpdmUgc28gdGhhdCBpdCBkb2VzIG5vdCBtaXNzIGFueSBwb3RlbnRpYWwgY2hhbmdlcy4KK1RoZSBwYXRocyBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5CithbmQgYmUgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIE5VTC4KKworSXQgaXMgT0sgdG8gaW5jbHVkZSBmaWxlcyB3aGljaCBoYXZlIG5vdCBhY3R1YWxseSBjaGFuZ2VkLiAgQWxsIGNoYW5nZXMKK2luY2x1ZGluZyBuZXdseS1jcmVhdGVkIGFuZCBkZWxldGVkIGZpbGVzIHNob3VsZCBiZSBpbmNsdWRlZC4gV2hlbgorZmlsZXMgYXJlIHJlbmFtZWQsIGJvdGggdGhlIG9sZCBhbmQgdGhlIG5ldyBuYW1lIHNob3VsZCBiZSBpbmNsdWRlZC4KKworR2l0IHdpbGwgbGltaXQgd2hhdCBmaWxlcyBpdCBjaGVja3MgZm9yIGNoYW5nZXMgYXMgd2VsbCBhcyB3aGljaAorZGlyZWN0b3JpZXMgYXJlIGNoZWNrZWQgZm9yIHVudHJhY2tlZCBmaWxlcyBiYXNlZCBvbiB0aGUgcGF0aCBuYW1lcworZ2l2ZW4uCisKK0FuIG9wdGltaXplZCB3YXkgdG8gdGVsbCBnaXQgImFsbCBmaWxlcyBoYXZlIGNoYW5nZWQiIGlzIHRvIHJldHVybgordGhlIGZpbGVuYW1lIGAvYC4KKworVGhlIGV4aXQgc3RhdHVzIGRldGVybWluZXMgd2hldGhlciBnaXQgd2lsbCB1c2UgdGhlIGRhdGEgZnJvbSB0aGUKK2hvb2sgdG8gbGltaXQgaXRzIHNlYXJjaC4gIE9uIGVycm9yLCBpdCB3aWxsIGZhbGwgYmFjayB0byB2ZXJpZnlpbmcKK2FsbCBmaWxlcyBhbmQgZm9sZGVycy4KKworcDQtcHJlLXN1Ym1pdAorfn5+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBgZ2l0LXA0IHN1Ym1pdGAuIEl0IHRha2VzIG5vIHBhcmFtZXRlcnMgYW5kIG5vdGhpbmcKK2Zyb20gc3RhbmRhcmQgaW5wdXQuIEV4aXRpbmcgd2l0aCBub24temVybyBzdGF0dXMgZnJvbSB0aGlzIHNjcmlwdCBwcmV2ZW50CitgZ2l0LXA0IHN1Ym1pdGAgZnJvbSBsYXVuY2hpbmcuIFJ1biBgZ2l0LXA0IHN1Ym1pdCAtLWhlbHBgIGZvciBkZXRhaWxzLgorCitwb3N0LWluZGV4LWNoYW5nZQorfn5+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+L2xvY2tlZDo6CisJSWYgdGhpcyBmaWxlIGV4aXN0cywgdGhlIGxpbmtlZCB3b3JraW5nIHRyZWUgbWF5IGJlIG9uIGEKKwlwb3J0YWJsZSBkZXZpY2UgYW5kIG5vdCBhdmFpbGFibGUuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZpbGUKKwlwcmV2ZW50cyBgd29ya3RyZWVzLzxpZD5gIGZyb20gYmVpbmcgcHJ1bmVkIGVpdGhlciBhdXRvbWF0aWNhbGx5CisJb3IgbWFudWFsbHkgYnkgYGdpdCB3b3JrdHJlZSBwcnVuZWAuIFRoZSBmaWxlIG1heSBjb250YWluIGEgc3RyaW5nCisJZXhwbGFpbmluZyB3aHkgdGhlIHJlcG9zaXRvcnkgaXMgbG9ja2VkLgorCit3b3JrdHJlZXMvPGlkPi9jb25maWcud29ya3RyZWU6OgorCVdvcmtpbmcgZGlyZWN0b3J5IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworaW5jbHVkZTo6dGVjaG5pY2FsL3JlcG9zaXRvcnktdmVyc2lvbi50eHRbXQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWluaXRbMV0sCitsaW5rZ2l0OmdpdC1jbG9uZVsxXSwKK2xpbmtnaXQ6Z2l0LWZldGNoWzFdLAorbGlua2dpdDpnaXQtcGFjay1yZWZzWzFdLAorbGlua2dpdDpnaXQtZ2NbMV0sCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0cmV2aXNpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0cmV2aXNpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDA3YjdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRyZXZpc2lvbnMudHh0CkBAIC0wLDAgKzEsMzYgQEAKK2dpdHJldmlzaW9ucyg3KQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHJldmlzaW9ucyAtIFNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK2dpdHJldmlzaW9ucworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitNYW55IEdpdCBjb21tYW5kcyB0YWtlIHJldmlzaW9uIHBhcmFtZXRlcnMgYXMgYXJndW1lbnRzLiBEZXBlbmRpbmcgb24KK3RoZSBjb21tYW5kLCB0aGV5IGRlbm90ZSBhIHNwZWNpZmljIGNvbW1pdCBvciwgZm9yIGNvbW1hbmRzIHdoaWNoCit3YWxrIHRoZSByZXZpc2lvbiBncmFwaCAoc3VjaCBhcyBsaW5rZ2l0OmdpdC1sb2dbMV0pLCBhbGwgY29tbWl0cyB3aGljaCBhcmUKK3JlYWNoYWJsZSBmcm9tIHRoYXQgY29tbWl0LiBGb3IgY29tbWFuZHMgdGhhdCB3YWxrIHRoZSByZXZpc2lvbiBncmFwaCBvbmUgY2FuCithbHNvIHNwZWNpZnkgYSByYW5nZSBvZiByZXZpc2lvbnMgZXhwbGljaXRseS4KKworSW4gYWRkaXRpb24sIHNvbWUgR2l0IGNvbW1hbmRzIChzdWNoIGFzIGxpbmtnaXQ6Z2l0LXNob3dbMV0gYW5kCitsaW5rZ2l0OmdpdC1wdXNoWzFdKSBjYW4gYWxzbyB0YWtlIHJldmlzaW9uIHBhcmFtZXRlcnMgd2hpY2ggZGVub3RlCitvdGhlciBvYmplY3RzIHRoYW4gY29tbWl0cywgZS5nLiBibG9icyAoImZpbGVzIikgb3IgdHJlZXMKKygiZGlyZWN0b3JpZXMgb2YgZmlsZXMiKS4KKworaW5jbHVkZTo6cmV2aXNpb25zLnR4dFtdCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHN1Ym1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRzdWJtb2R1bGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDc2Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRzdWJtb2R1bGVzLnR4dApAQCAtMCwwICsxLDI4MyBAQAorZ2l0c3VibW9kdWxlcyg3KQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRzdWJtb2R1bGVzIC0gTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIKKworU1lOT1BTSVMKKy0tLS0tLS0tCisgLmdpdG1vZHVsZXMsICRHSVRfRElSL2NvbmZpZworLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgc3VibW9kdWxlCitnaXQgPGNvbW1hbmQ+IC0tcmVjdXJzZS1zdWJtb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0Egc3VibW9kdWxlIGlzIGEgcmVwb3NpdG9yeSBlbWJlZGRlZCBpbnNpZGUgYW5vdGhlciByZXBvc2l0b3J5LgorVGhlIHN1Ym1vZHVsZSBoYXMgaXRzIG93biBoaXN0b3J5OyB0aGUgcmVwb3NpdG9yeSBpdCBpcyBlbWJlZGRlZAoraW4gaXMgY2FsbGVkIGEgc3VwZXJwcm9qZWN0LgorCitPbiB0aGUgZmlsZXN5c3RlbSwgYSBzdWJtb2R1bGUgdXN1YWxseSAoYnV0IG5vdCBhbHdheXMgLSBzZWUgRk9STVMgYmVsb3cpCitjb25zaXN0cyBvZiAoaSkgYSBHaXQgZGlyZWN0b3J5IGxvY2F0ZWQgdW5kZXIgdGhlIGAkR0lUX0RJUi9tb2R1bGVzL2AKK2RpcmVjdG9yeSBvZiBpdHMgc3VwZXJwcm9qZWN0LCAoaWkpIGEgd29ya2luZyBkaXJlY3RvcnkgaW5zaWRlIHRoZQorc3VwZXJwcm9qZWN0J3Mgd29ya2luZyBkaXJlY3RvcnksIGFuZCBhIGAuZ2l0YCBmaWxlIGF0IHRoZSByb290IG9mCit0aGUgc3VibW9kdWxlJ3Mgd29ya2luZyBkaXJlY3RvcnkgcG9pbnRpbmcgdG8gKGkpLgorCitBc3N1bWluZyB0aGUgc3VibW9kdWxlIGhhcyBhIEdpdCBkaXJlY3RvcnkgYXQgYCRHSVRfRElSL21vZHVsZXMvZm9vL2AKK2FuZCBhIHdvcmtpbmcgZGlyZWN0b3J5IGF0IGBwYXRoL3RvL2Jhci9gLCB0aGUgc3VwZXJwcm9qZWN0IHRyYWNrcyB0aGUKK3N1Ym1vZHVsZSB2aWEgYSBgZ2l0bGlua2AgZW50cnkgaW4gdGhlIHRyZWUgYXQgYHBhdGgvdG8vYmFyYCBhbmQgYW4gZW50cnkKK2luIGl0cyBgLmdpdG1vZHVsZXNgIGZpbGUgKHNlZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0pIG9mIHRoZSBmb3JtCitgc3VibW9kdWxlLmZvby5wYXRoID0gcGF0aC90by9iYXJgLgorCitUaGUgYGdpdGxpbmtgIGVudHJ5IGNvbnRhaW5zIHRoZSBvYmplY3QgbmFtZSBvZiB0aGUgY29tbWl0IHRoYXQgdGhlCitzdXBlcnByb2plY3QgZXhwZWN0cyB0aGUgc3VibW9kdWxlJ3Mgd29ya2luZyBkaXJlY3RvcnkgdG8gYmUgYXQuCisKK1RoZSBzZWN0aW9uIGBzdWJtb2R1bGUuZm9vLipgIGluIHRoZSBgLmdpdG1vZHVsZXNgIGZpbGUgZ2l2ZXMgYWRkaXRpb25hbAoraGludHMgdG8gR2l0J3MgcG9yY2VsYWluIGxheWVyLiBGb3IgZXhhbXBsZSwgdGhlIGBzdWJtb2R1bGUuZm9vLnVybGAKK3NldHRpbmcgc3BlY2lmaWVzIHdoZXJlIHRvIG9idGFpbiB0aGUgc3VibW9kdWxlLgorCitTdWJtb2R1bGVzIGNhbiBiZSB1c2VkIGZvciBhdCBsZWFzdCB0d28gZGlmZmVyZW50IHVzZSBjYXNlczoKKworMS4gVXNpbmcgYW5vdGhlciBwcm9qZWN0IHdoaWxlIG1haW50YWluaW5nIGluZGVwZW5kZW50IGhpc3RvcnkuCisgIFN1Ym1vZHVsZXMgYWxsb3cgeW91IHRvIGNvbnRhaW4gdGhlIHdvcmtpbmcgdHJlZSBvZiBhbm90aGVyIHByb2plY3QKKyAgd2l0aGluIHlvdXIgb3duIHdvcmtpbmcgdHJlZSB3aGlsZSBrZWVwaW5nIHRoZSBoaXN0b3J5IG9mIGJvdGgKKyAgcHJvamVjdHMgc2VwYXJhdGUuIEFsc28sIHNpbmNlIHN1Ym1vZHVsZXMgYXJlIGZpeGVkIHRvIGFuIGFyYml0cmFyeQorICB2ZXJzaW9uLCB0aGUgb3RoZXIgcHJvamVjdCBjYW4gYmUgaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgd2l0aG91dAorICBhZmZlY3RpbmcgdGhlIHN1cGVycHJvamVjdCwgYWxsb3dpbmcgdGhlIHN1cGVycHJvamVjdCBwcm9qZWN0IHRvCisgIGZpeCBpdHNlbGYgdG8gbmV3IHZlcnNpb25zIG9ubHkgd2hlbiBkZXNpcmVkLgorCisyLiBTcGxpdHRpbmcgYSAobG9naWNhbGx5IHNpbmdsZSkgcHJvamVjdCBpbnRvIG11bHRpcGxlCisgICByZXBvc2l0b3JpZXMgYW5kIHR5aW5nIHRoZW0gYmFjayB0b2dldGhlci4gVGhpcyBjYW4gYmUgdXNlZCB0bworICAgb3ZlcmNvbWUgY3VycmVudCBsaW1pdGF0aW9ucyBvZiBHaXQncyBpbXBsZW1lbnRhdGlvbiB0byBoYXZlCisgICBmaW5lciBncmFpbmVkIGFjY2VzczoKKworICAgICogU2l6ZSBvZiB0aGUgR2l0IHJlcG9zaXRvcnk6CisgICAgICBJbiBpdHMgY3VycmVudCBmb3JtIEdpdCBzY2FsZXMgdXAgcG9vcmx5IGZvciBsYXJnZSByZXBvc2l0b3JpZXMgY29udGFpbmluZworICAgICAgY29udGVudCB0aGF0IGlzIG5vdCBjb21wcmVzc2VkIGJ5IGRlbHRhIGNvbXB1dGF0aW9uIGJldHdlZW4gdHJlZXMuCisgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Ugc3VibW9kdWxlcyB0byBob2xkIGxhcmdlIGJpbmFyeSBhc3NldHMKKyAgICAgIGFuZCB0aGVzZSByZXBvc2l0b3JpZXMgY2FuIGJlIHNoYWxsb3dseSBjbG9uZWQgc3VjaCB0aGF0IHlvdSBkbyBub3QKKyAgICAgIGhhdmUgYSBsYXJnZSBoaXN0b3J5IGxvY2FsbHkuCisgICAgKiBUcmFuc2ZlciBzaXplOgorICAgICAgSW4gaXRzIGN1cnJlbnQgZm9ybSBHaXQgcmVxdWlyZXMgdGhlIHdob2xlIHdvcmtpbmcgdHJlZSBwcmVzZW50LiBJdAorICAgICAgZG9lcyBub3QgYWxsb3cgcGFydGlhbCB0cmVlcyB0byBiZSB0cmFuc2ZlcnJlZCBpbiBmZXRjaCBvciBjbG9uZS4KKyAgICAgIElmIHRoZSBwcm9qZWN0IHlvdSB3b3JrIG9uIGNvbnNpc3RzIG9mIG11bHRpcGxlIHJlcG9zaXRvcmllcyB0aWVkCisgICAgICB0b2dldGhlciBhcyBzdWJtb2R1bGVzIGluIGEgc3VwZXJwcm9qZWN0LCB5b3UgY2FuIGF2b2lkIGZldGNoaW5nIHRoZQorICAgICAgd29ya2luZyB0cmVlcyBvZiB0aGUgcmVwb3NpdG9yaWVzIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4uCisgICAgKiBBY2Nlc3MgY29udHJvbDoKKyAgICAgIEJ5IHJlc3RyaWN0aW5nIHVzZXIgYWNjZXNzIHRvIHN1Ym1vZHVsZXMsIHRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50CisgICAgICByZWFkL3dyaXRlIHBvbGljaWVzIGZvciBkaWZmZXJlbnQgdXNlcnMuCisKK1RoZSBjb25maWd1cmF0aW9uIG9mIHN1Ym1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VibW9kdWxlIG9wZXJhdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBtZWNoYW5pc21zCisoZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBwcmVjZWRlbmNlKToKKworICogVGhlIGNvbW1hbmQgbGluZSBmb3IgdGhvc2UgY29tbWFuZHMgdGhhdCBzdXBwb3J0IHRha2luZyBzdWJtb2R1bGVzCisgICBhcyBwYXJ0IG9mIHRoZWlyIHBhdGhzcGVjcy4gTW9zdCBjb21tYW5kcyBoYXZlIGEgYm9vbGVhbiBmbGFnCisgICBgLS1yZWN1cnNlLXN1Ym1vZHVsZXNgIHdoaWNoIHNwZWNpZnkgd2hldGhlciB0byByZWN1cnNlIGludG8gc3VibW9kdWxlcy4KKyAgIEV4YW1wbGVzIGFyZSBgZ3JlcGAgYW5kIGBjaGVja291dGAuCisgICBTb21lIGNvbW1hbmRzIHRha2UgZW51bXMsIHN1Y2ggYXMgYGZldGNoYCBhbmQgYHB1c2hgLCB3aGVyZSB5b3UgY2FuCisgICBzcGVjaWZ5IGhvdyBzdWJtb2R1bGVzIGFyZSBhZmZlY3RlZC4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBzdWJtb2R1bGUuIFRoaXMgaW5jbHVkZXMgYCRHSVRfRElSL2NvbmZpZ2AKKyAgIGluIHRoZSBzdWJtb2R1bGUsIGJ1dCBhbHNvIHNldHRpbmdzIGluIHRoZSB0cmVlIHN1Y2ggYXMgYSBgLmdpdGF0dHJpYnV0ZXNgCisgICBvciBgLmdpdGlnbm9yZWAgZmlsZXMgdGhhdCBzcGVjaWZ5IGJlaGF2aW9yIG9mIGNvbW1hbmRzIGluc2lkZSB0aGUKKyAgIHN1Ym1vZHVsZS4KKysKK0ZvciBleGFtcGxlIGFuIGVmZmVjdCBmcm9tIHRoZSBzdWJtb2R1bGUncyBgLmdpdGlnbm9yZWAgZmlsZQord291bGQgYmUgb2JzZXJ2ZWQgd2hlbiB5b3UgcnVuIGBnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZWAgaW4KK3RoZSBzdXBlcnByb2plY3QuIFRoaXMgY29sbGVjdHMgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3VibW9kdWxlJ3Mgd29ya2luZworZGlyZWN0b3J5IGJ5IHJ1bm5pbmcgYHN0YXR1c2AgaW4gdGhlIHN1Ym1vZHVsZSB3aGlsZSBwYXlpbmcgYXR0ZW50aW9uCit0byB0aGUgYC5naXRpZ25vcmVgIGZpbGUgb2YgdGhlIHN1Ym1vZHVsZS4KKysKK1RoZSBzdWJtb2R1bGUncyBgJEdJVF9ESVIvY29uZmlnYCBmaWxlIHdvdWxkIGNvbWUgaW50byBwbGF5IHdoZW4gcnVubmluZworYGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrYCBpbiB0aGUgc3VwZXJwcm9qZWN0LCBhcyB0aGlzIHdvdWxkCitjaGVjayBpZiB0aGUgc3VibW9kdWxlIGhhcyBhbnkgY2hhbmdlcyBub3QgcHVibGlzaGVkIHRvIGFueSByZW1vdGUuIFRoZQorcmVtb3RlcyBhcmUgY29uZmlndXJlZCBpbiB0aGUgc3VibW9kdWxlIGFzIHVzdWFsIGluIHRoZSBgJEdJVF9ESVIvY29uZmlnYAorZmlsZS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBgJEdJVF9ESVIvY29uZmlnYCBpbiB0aGUgc3VwZXJwcm9qZWN0LgorICAgR2l0IG9ubHkgcmVjdXJzZXMgaW50byBhY3RpdmUgc3VibW9kdWxlcyAoc2VlICJBQ1RJVkUgU1VCTU9EVUxFUyIKKyAgIHNlY3Rpb24gYmVsb3cpLgorKworSWYgdGhlIHN1Ym1vZHVsZSBpcyBub3QgeWV0IGluaXRpYWxpemVkLCB0aGVuIHRoZSBjb25maWd1cmF0aW9uCitpbnNpZGUgdGhlIHN1Ym1vZHVsZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHNvIHdoZXJlIHRvCitvYnRhaW4gdGhlIHN1Ym1vZHVsZSBmcm9tIGlzIGNvbmZpZ3VyZWQgaGVyZSBmb3IgZXhhbXBsZS4KKworICogVGhlIGAuZ2l0bW9kdWxlc2AgZmlsZSBpbnNpZGUgdGhlIHN1cGVycHJvamVjdC4gQSBwcm9qZWN0IHVzdWFsbHkKKyAgIHVzZXMgdGhpcyBmaWxlIHRvIHN1Z2dlc3QgZGVmYXVsdHMgZm9yIHRoZSB1cHN0cmVhbSBjb2xsZWN0aW9uCisgICBvZiByZXBvc2l0b3JpZXMgZm9yIHRoZSBtYXBwaW5nIHRoYXQgaXMgcmVxdWlyZWQgYmV0d2VlbiBhCisgICBzdWJtb2R1bGUncyBuYW1lIGFuZCBpdHMgcGF0aC4KKysKK1RoaXMgZmlsZSBtYWlubHkgc2VydmVzIGFzIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIG5hbWUgYW5kIHBhdGggb2Ygc3VibW9kdWxlcworaW4gdGhlIHN1cGVycHJvamVjdCwgc3VjaCB0aGF0IHRoZSBzdWJtb2R1bGUncyBHaXQgZGlyZWN0b3J5IGNhbiBiZQorbG9jYXRlZC4KKysKK0lmIHRoZSBzdWJtb2R1bGUgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQsIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UKK3doZXJlIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIGlzIGZvdW5kLiBJdCBzZXJ2ZXMgYXMgdGhlIGxhc3QgZmFsbGJhY2sKK3RvIHNwZWNpZnkgd2hlcmUgdG8gb2J0YWluIHRoZSBzdWJtb2R1bGUgZnJvbS4KKworRk9STVMKKy0tLS0tCisKK1N1Ym1vZHVsZXMgY2FuIHRha2UgdGhlIGZvbGxvd2luZyBmb3JtczoKKworICogVGhlIGJhc2ljIGZvcm0gZGVzY3JpYmVkIGluIERFU0NSSVBUSU9OIHdpdGggYSBHaXQgZGlyZWN0b3J5LAorYSB3b3JraW5nIGRpcmVjdG9yeSwgYSBgZ2l0bGlua2AsIGFuZCBhIGAuZ2l0bW9kdWxlc2AgZW50cnkuCisKKyAqICJPbGQtZm9ybSIgc3VibW9kdWxlOiBBIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGggYW4gZW1iZWRkZWQKK2AuZ2l0YCBkaXJlY3RvcnksIGFuZCB0aGUgdHJhY2tpbmcgYGdpdGxpbmtgIGFuZCBgLmdpdG1vZHVsZXNgIGVudHJ5IGluCit0aGUgc3VwZXJwcm9qZWN0LiBUaGlzIGlzIHR5cGljYWxseSBmb3VuZCBpbiByZXBvc2l0b3JpZXMgZ2VuZXJhdGVkCit1c2luZyBvbGRlciB2ZXJzaW9ucyBvZiBHaXQuCisrCitJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgdGhlc2Ugb2xkIGZvcm0gcmVwb3NpdG9yaWVzIG1hbnVhbGx5LgorKworV2hlbiBkZWluaXRpYWxpemVkIG9yIGRlbGV0ZWQgKHNlZSBiZWxvdyksIHRoZSBzdWJtb2R1bGUncyBHaXQKK2RpcmVjdG9yeSBpcyBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIGAkR0lUX0RJUi9tb2R1bGVzLzxuYW1lPi9gCitvZiB0aGUgc3VwZXJwcm9qZWN0LgorCisgKiBEZWluaXRpYWxpemVkIHN1Ym1vZHVsZTogQSBgZ2l0bGlua2AsIGFuZCBhIGAuZ2l0bW9kdWxlc2AgZW50cnksCitidXQgbm8gc3VibW9kdWxlIHdvcmtpbmcgZGlyZWN0b3J5LiBUaGUgc3VibW9kdWxlJ3MgR2l0IGRpcmVjdG9yeQorbWF5IGJlIHRoZXJlIGFzIGFmdGVyIGRlaW5pdGlhbGl6aW5nIHRoZSBHaXQgZGlyZWN0b3J5IGlzIGtlcHQgYXJvdW5kLgorVGhlIGRpcmVjdG9yeSB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgaXMgZW1wdHkgaW5zdGVhZC4KKysKK0Egc3VibW9kdWxlIGNhbiBiZSBkZWluaXRpYWxpemVkIGJ5IHJ1bm5pbmcgYGdpdCBzdWJtb2R1bGUgZGVpbml0YC4KK0Jlc2lkZXMgZW1wdHlpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0aGlzIGNvbW1hbmQgb25seSBtb2RpZmllcwordGhlIHN1cGVycHJvamVjdCdzIGAkR0lUX0RJUi9jb25maWdgIGZpbGUsIHNvIHRoZSBzdXBlcnByb2plY3QncyBoaXN0b3J5CitpcyBub3QgYWZmZWN0ZWQuIFRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyBgZ2l0IHN1Ym1vZHVsZSBpbml0YC4KKworICogRGVsZXRlZCBzdWJtb2R1bGU6IEEgc3VibW9kdWxlIGNhbiBiZSBkZWxldGVkIGJ5IHJ1bm5pbmcKK2BnaXQgcm0gPHN1Ym1vZHVsZSBwYXRoPiAmJiBnaXQgY29tbWl0YC4gVGhpcyBjYW4gYmUgdW5kb25lCit1c2luZyBgZ2l0IHJldmVydGAuCisrCitUaGUgZGVsZXRpb24gcmVtb3ZlcyB0aGUgc3VwZXJwcm9qZWN0J3MgdHJhY2tpbmcgZGF0YSwgd2hpY2ggYXJlCitib3RoIHRoZSBgZ2l0bGlua2AgZW50cnkgYW5kIHRoZSBzZWN0aW9uIGluIHRoZSBgLmdpdG1vZHVsZXNgIGZpbGUuCitUaGUgc3VibW9kdWxlJ3Mgd29ya2luZyBkaXJlY3RvcnkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlCitzeXN0ZW0sIGJ1dCB0aGUgR2l0IGRpcmVjdG9yeSBpcyBrZXB0IGFyb3VuZCBhcyBpdCB0byBtYWtlIGl0Citwb3NzaWJsZSB0byBjaGVja291dCBwYXN0IGNvbW1pdHMgd2l0aG91dCByZXF1aXJpbmcgZmV0Y2hpbmcKK2Zyb20gYW5vdGhlciByZXBvc2l0b3J5LgorKworVG8gY29tcGxldGVseSByZW1vdmUgYSBzdWJtb2R1bGUsIG1hbnVhbGx5IGRlbGV0ZQorYCRHSVRfRElSL21vZHVsZXMvPG5hbWU+L2AuCisKK0FDVElWRSBTVUJNT0RVTEVTCistLS0tLS0tLS0tLS0tLS0tLQorCitBIHN1Ym1vZHVsZSBpcyBjb25zaWRlcmVkIGFjdGl2ZSwKKworICAxLiBpZiBgc3VibW9kdWxlLjxuYW1lPi5hY3RpdmVgIGlzIHNldCB0byBgdHJ1ZWAKKysKK29yCisKKyAgMi4gaWYgdGhlIHN1Ym1vZHVsZSdzIHBhdGggbWF0Y2hlcyB0aGUgcGF0aHNwZWMgaW4gYHN1Ym1vZHVsZS5hY3RpdmVgCisrCitvcgorCisgIDMuIGlmIGBzdWJtb2R1bGUuPG5hbWU+LnVybGAgaXMgc2V0LgorCithbmQgdGhlc2UgYXJlIGV2YWx1YXRlZCBpbiB0aGlzIG9yZGVyLgorCitGb3IgZXhhbXBsZToKKworICBbc3VibW9kdWxlICJmb28iXQorICAgIGFjdGl2ZSA9IGZhbHNlCisgICAgdXJsID0gaHR0cHM6Ly9leGFtcGxlLm9yZy9mb28KKyAgW3N1Ym1vZHVsZSAiYmFyIl0KKyAgICBhY3RpdmUgPSB0cnVlCisgICAgdXJsID0gaHR0cHM6Ly9leGFtcGxlLm9yZy9iYXIKKyAgW3N1Ym1vZHVsZSAiYmF6Il0KKyAgICB1cmwgPSBodHRwczovL2V4YW1wbGUub3JnL2JhegorCitJbiB0aGUgYWJvdmUgY29uZmlnIG9ubHkgdGhlIHN1Ym1vZHVsZSAnYmFyJyBhbmQgJ2JheicgYXJlIGFjdGl2ZSwKKydiYXInIGR1ZSB0byAoMSkgYW5kICdiYXonIGR1ZSB0byAoMykuICdmb28nIGlzIGluYWN0aXZlIGJlY2F1c2UKKygxKSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgKDMpCisKK05vdGUgdGhhdCAoMykgaXMgYSBoaXN0b3JpY2FsIGFydGVmYWN0IGFuZCB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlCisoMSkgYW5kICgyKSBzcGVjaWZ5IHRoYXQgdGhlIHN1Ym1vZHVsZSBpcyBub3QgYWN0aXZlLiBJbiBvdGhlciB3b3JkcywKK2lmIHdlIGhhdmUgYSBgc3VibW9kdWxlLjxuYW1lPi5hY3RpdmVgIHNldCB0byBgZmFsc2VgIG9yIGlmIHRoZQorc3VibW9kdWxlJ3MgcGF0aCBpcyBleGNsdWRlZCBpbiB0aGUgcGF0aHNwZWMgaW4gYHN1Ym1vZHVsZS5hY3RpdmVgLCB0aGUKK3VybCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIGl0IGlzIHByZXNlbnQgb3Igbm90LiBUaGlzIGlzIGlsbHVzdHJhdGVkIGluCit0aGUgZXhhbXBsZSB0aGF0IGZvbGxvd3MuCisKKyAgW3N1Ym1vZHVsZSAiZm9vIl0KKyAgICBhY3RpdmUgPSB0cnVlCisgICAgdXJsID0gaHR0cHM6Ly9leGFtcGxlLm9yZy9mb28KKyAgW3N1Ym1vZHVsZSAiYmFyIl0KKyAgICB1cmwgPSBodHRwczovL2V4YW1wbGUub3JnL2JhcgorICBbc3VibW9kdWxlICJiYXoiXQorICAgIHVybCA9IGh0dHBzOi8vZXhhbXBsZS5vcmcvYmF6CisgIFtzdWJtb2R1bGUgImJvYiJdCisgICAgaWdub3JlID0gdHJ1ZQorICBbc3VibW9kdWxlXQorICAgIGFjdGl2ZSA9IGIqCisgICAgYWN0aXZlID0gOihleGNsdWRlKSBiYXoKKworSW4gaGVyZSBhbGwgc3VibW9kdWxlcyBleGNlcHQgJ2JheicgKGZvbywgYmFyLCBib2IpIGFyZSBhY3RpdmUuCisnZm9vJyBkdWUgdG8gaXRzIG93biBhY3RpdmUgZmxhZyBhbmQgYWxsIHRoZSBvdGhlcnMgZHVlIHRvIHRoZQorc3VibW9kdWxlIGFjdGl2ZSBwYXRoc3BlYywgd2hpY2ggc3BlY2lmaWVzIHRoYXQgYW55IHN1Ym1vZHVsZQorc3RhcnRpbmcgd2l0aCAnYicgZXhjZXB0ICdiYXonIGFyZSBhbHNvIGFjdGl2ZSwgcmVnYXJkbGVzcyBvZiB0aGUKK3ByZXNlbmNlIG9mIHRoZSAudXJsIGZpZWxkLgorCitXb3JrZmxvdyBmb3IgYSB0aGlyZCBwYXJ0eSBsaWJyYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIyBhZGQgYSBzdWJtb2R1bGUKKyAgZ2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gPHBhdGg+CisKKyAgIyBvY2Nhc2lvbmFsbHkgdXBkYXRlIHRoZSBzdWJtb2R1bGUgdG8gYSBuZXcgdmVyc2lvbjoKKyAgZ2l0IC1DIDxwYXRoPiBjaGVja291dCA8bmV3IHZlcnNpb24+CisgIGdpdCBhZGQgPHBhdGg+CisgIGdpdCBjb21taXQgLW0gInVwZGF0ZSBzdWJtb2R1bGUgdG8gbmV3IHZlcnNpb24iCisKKyAgIyBTZWUgdGhlIGxpc3Qgb2Ygc3VibW9kdWxlcyBpbiBhIHN1cGVycHJvamVjdAorICBnaXQgc3VibW9kdWxlIHN0YXR1cworCisgICMgU2VlIEZPUk1TIG9uIHJlbW92aW5nIHN1Ym1vZHVsZXMKKworCitXb3JrZmxvdyBmb3IgYW4gYXJ0aWZpY2lhbGx5IHNwbGl0IHJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIyBFbmFibGUgcmVjdXJzaW9uIGZvciByZWxldmFudCBjb21tYW5kcywgc3VjaCB0aGF0CisgICMgcmVndWxhciBjb21tYW5kcyByZWN1cnNlIGludG8gc3VibW9kdWxlcyBieSBkZWZhdWx0CisgIGdpdCBjb25maWcgLS1nbG9iYWwgc3VibW9kdWxlLnJlY3Vyc2UgdHJ1ZQorCisgICMgVW5saWtlIHRoZSBvdGhlciBjb21tYW5kcyBiZWxvdyBjbG9uZSBzdGlsbCBuZWVkcworICAjIGl0cyBvd24gcmVjdXJzZSBmbGFnOgorICBnaXQgY2xvbmUgLS1yZWN1cnNlIDxVUkw+IDxkaXJlY3Rvcnk+CisgIGNkIDxkaXJlY3Rvcnk+CisKKyAgIyBHZXQgdG8ga25vdyB0aGUgY29kZToKKyAgZ2l0IGdyZXAgZm9vCisgIGdpdCBscy1maWxlcworCisgICMgR2V0IG5ldyBjb2RlCisgIGdpdCBmZXRjaAorICBnaXQgcHVsbCAtLXJlYmFzZQorCisgICMgY2hhbmdlIHdvcmt0cmVlCisgIGdpdCBjaGVja291dAorICBnaXQgcmVzZXQKKworSW1wbGVtZW50YXRpb24gZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGNsb25pbmcgb3IgcHVsbGluZyBhIHJlcG9zaXRvcnkgY29udGFpbmluZyBzdWJtb2R1bGVzIHRoZSBzdWJtb2R1bGVzCit3aWxsIG5vdCBiZSBjaGVja2VkIG91dCBieSBkZWZhdWx0OyBZb3UgY2FuIGluc3RydWN0ICdjbG9uZScgdG8gcmVjdXJzZQoraW50byBzdWJtb2R1bGVzLiBUaGUgJ2luaXQnIGFuZCAndXBkYXRlJyBzdWJjb21tYW5kcyBvZiAnZ2l0IHN1Ym1vZHVsZScKK3dpbGwgbWFpbnRhaW4gc3VibW9kdWxlcyBjaGVja2VkIG91dCBhbmQgYXQgYW4gYXBwcm9wcmlhdGUgcmV2aXNpb24gaW4KK3lvdXIgd29ya2luZyB0cmVlLiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0ICdzdWJtb2R1bGUucmVjdXJzZScgdG8gaGF2ZQorJ2NoZWNrb3V0JyByZWN1cnNpbmcgaW50byBzdWJtb2R1bGVzLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLCBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJkYjdkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQKQEAgLTAsMCArMSw0MzYgQEAKK2dpdHR1dG9yaWFsLTIoNykKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0dHV0b3JpYWwtMiAtIEEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdDogcGFydCB0d28KKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworWW91IHNob3VsZCB3b3JrIHRocm91Z2ggbGlua2dpdDpnaXR0dXRvcmlhbFs3XSBiZWZvcmUgcmVhZGluZyB0aGlzIHR1dG9yaWFsLgorCitUaGUgZ29hbCBvZiB0aGlzIHR1dG9yaWFsIGlzIHRvIGludHJvZHVjZSB0d28gZnVuZGFtZW50YWwgcGllY2VzIG9mCitHaXQncyBhcmNoaXRlY3R1cmUtLXRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZSBpbmRleCBmaWxlLS1hbmQgdG8KK3Byb3ZpZGUgdGhlIHJlYWRlciB3aXRoIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlc3QKK29mIHRoZSBHaXQgZG9jdW1lbnRhdGlvbi4KKworVGhlIEdpdCBvYmplY3QgZGF0YWJhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xldCdzIHN0YXJ0IGEgbmV3IHByb2plY3QgYW5kIGNyZWF0ZSBhIHNtYWxsIGFtb3VudCBvZiBoaXN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWtkaXIgdGVzdC1wcm9qZWN0CiskIGNkIHRlc3QtcHJvamVjdAorJCBnaXQgaW5pdAorSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLmdpdC8KKyQgZWNobyAnaGVsbG8gd29ybGQnID4gZmlsZS50eHQKKyQgZ2l0IGFkZCAuCiskIGdpdCBjb21taXQgLWEgLW0gImluaXRpYWwgY29tbWl0IgorW21hc3RlciAocm9vdC1jb21taXQpIDU0MTk2Y2NdIGluaXRpYWwgY29tbWl0CisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUudHh0CiskIGVjaG8gJ2hlbGxvIHdvcmxkIScgPmZpbGUudHh0CiskIGdpdCBjb21taXQgLWEgLW0gImFkZCBlbXBoYXNpcyIKK1ttYXN0ZXIgYzRkNTlmM10gYWRkIGVtcGhhc2lzCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdCBhcmUgdGhlIDcgZGlnaXRzIG9mIGhleCB0aGF0IEdpdCByZXNwb25kZWQgdG8gdGhlIGNvbW1pdCB3aXRoPworCitXZSBzYXcgaW4gcGFydCBvbmUgb2YgdGhlIHR1dG9yaWFsIHRoYXQgY29tbWl0cyBoYXZlIG5hbWVzIGxpa2UgdGhpcy4KK0l0IHR1cm5zIG91dCB0aGF0IGV2ZXJ5IG9iamVjdCBpbiB0aGUgR2l0IGhpc3RvcnkgaXMgc3RvcmVkIHVuZGVyCithIDQwLWRpZ2l0IGhleCBuYW1lLiAgVGhhdCBuYW1lIGlzIHRoZSBTSEEtMSBoYXNoIG9mIHRoZSBvYmplY3QncworY29udGVudHM7IGFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBlbnN1cmVzIHRoYXQgR2l0IHdpbGwgbmV2ZXIgc3RvcmUKK3RoZSBzYW1lIGRhdGEgdHdpY2UgKHNpbmNlIGlkZW50aWNhbCBkYXRhIGlzIGdpdmVuIGFuIGlkZW50aWNhbCBTSEEtMQorbmFtZSksIGFuZCB0aGF0IHRoZSBjb250ZW50cyBvZiBhIEdpdCBvYmplY3Qgd2lsbCBuZXZlciBjaGFuZ2UgKHNpbmNlCit0aGF0IHdvdWxkIGNoYW5nZSB0aGUgb2JqZWN0J3MgbmFtZSBhcyB3ZWxsKS4gVGhlIDcgY2hhciBoZXggc3RyaW5ncworaGVyZSBhcmUgc2ltcGx5IHRoZSBhYmJyZXZpYXRpb24gb2Ygc3VjaCA0MCBjaGFyYWN0ZXIgbG9uZyBzdHJpbmdzLgorQWJicmV2aWF0aW9ucyBjYW4gYmUgdXNlZCBldmVyeXdoZXJlIHdoZXJlIHRoZSA0MCBjaGFyYWN0ZXIgc3RyaW5ncworY2FuIGJlIHVzZWQsIHNvIGxvbmcgYXMgdGhleSBhcmUgdW5hbWJpZ3VvdXMuCisKK0l0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbW1pdCBvYmplY3QgeW91IGNyZWF0ZWQgd2hpbGUKK2ZvbGxvd2luZyB0aGUgZXhhbXBsZSBhYm92ZSBnZW5lcmF0ZXMgYSBkaWZmZXJlbnQgU0hBLTEgaGFzaCB0aGFuCit0aGUgb25lIHNob3duIGFib3ZlIGJlY2F1c2UgdGhlIGNvbW1pdCBvYmplY3QgcmVjb3JkcyB0aGUgdGltZSB3aGVuCitpdCB3YXMgY3JlYXRlZCBhbmQgdGhlIG5hbWUgb2YgdGhlIHBlcnNvbiBwZXJmb3JtaW5nIHRoZSBjb21taXQuCisKK1dlIGNhbiBhc2sgR2l0IGFib3V0IHRoaXMgcGFydGljdWxhciBvYmplY3Qgd2l0aCB0aGUgYGNhdC1maWxlYAorY29tbWFuZC4gRG9uJ3QgY29weSB0aGUgNDAgaGV4IGRpZ2l0cyBmcm9tIHRoaXMgZXhhbXBsZSBidXQgdXNlIHRob3NlCitmcm9tIHlvdXIgb3duIHZlcnNpb24uIE5vdGUgdGhhdCB5b3UgY2FuIHNob3J0ZW4gaXQgdG8gb25seSBhIGZldworY2hhcmFjdGVycyB0byBzYXZlIHlvdXJzZWxmIHR5cGluZyBhbGwgNDAgaGV4IGRpZ2l0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSAtdCA1NDE5NmNjMgorY29tbWl0CiskIGdpdCBjYXQtZmlsZSBjb21taXQgNTQxOTZjYzIKK3RyZWUgOTJiOGI2OTRmZmIxNjc1ZTU5NzUxNDhlMTEyMTgxMDA4MWRiZGZmZQorYXV0aG9yIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE0NjY4IC0wNTAwCitjb21taXR0ZXIgSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+IDExNDM0MTQ2NjggLTA1MDAKKworaW5pdGlhbCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHRyZWUgY2FuIHJlZmVyIHRvIG9uZSBvciBtb3JlICJibG9iIiBvYmplY3RzLCBlYWNoIGNvcnJlc3BvbmRpbmcgdG8KK2EgZmlsZS4gIEluIGFkZGl0aW9uLCBhIHRyZWUgY2FuIGFsc28gcmVmZXIgdG8gb3RoZXIgdHJlZSBvYmplY3RzLAordGh1cyBjcmVhdGluZyBhIGRpcmVjdG9yeSBoaWVyYXJjaHkuICBZb3UgY2FuIGV4YW1pbmUgdGhlIGNvbnRlbnRzIG9mCithbnkgdHJlZSB1c2luZyBscy10cmVlIChyZW1lbWJlciB0aGF0IGEgbG9uZyBlbm91Z2ggaW5pdGlhbCBwb3J0aW9uCitvZiB0aGUgU0hBLTEgd2lsbCBhbHNvIHdvcmspOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLXRyZWUgOTJiOGI2OTQKKzEwMDY0NCBibG9iIDNiMThlNTEyZGJhNzllNGM4MzAwZGQwOGFlYjM3ZjhlNzI4YjhkYWQgICAgZmlsZS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaHVzIHdlIHNlZSB0aGF0IHRoaXMgdHJlZSBoYXMgb25lIGZpbGUgaW4gaXQuICBUaGUgU0hBLTEgaGFzaCBpcyBhCityZWZlcmVuY2UgdG8gdGhhdCBmaWxlJ3MgZGF0YToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSAtdCAzYjE4ZTUxMgorYmxvYgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgImJsb2IiIGlzIGp1c3QgZmlsZSBkYXRhLCB3aGljaCB3ZSBjYW4gYWxzbyBleGFtaW5lIHdpdGggY2F0LWZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgYmxvYiAzYjE4ZTUxMgoraGVsbG8gd29ybGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhpcyBpcyB0aGUgb2xkIGZpbGUgZGF0YTsgc28gdGhlIG9iamVjdCB0aGF0IEdpdCBuYW1lZCBpbgoraXRzIHJlc3BvbnNlIHRvIHRoZSBpbml0aWFsIHRyZWUgd2FzIGEgdHJlZSB3aXRoIGEgc25hcHNob3Qgb2YgdGhlCitkaXJlY3Rvcnkgc3RhdGUgdGhhdCB3YXMgcmVjb3JkZWQgYnkgdGhlIGZpcnN0IGNvbW1pdC4KKworQWxsIG9mIHRoZXNlIG9iamVjdHMgYXJlIHN0b3JlZCB1bmRlciB0aGVpciBTSEEtMSBuYW1lcyBpbnNpZGUgdGhlIEdpdAorZGlyZWN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZmluZCAuZ2l0L29iamVjdHMvCisuZ2l0L29iamVjdHMvCisuZ2l0L29iamVjdHMvcGFjaworLmdpdC9vYmplY3RzL2luZm8KKy5naXQvb2JqZWN0cy8zYgorLmdpdC9vYmplY3RzLzNiLzE4ZTUxMmRiYTc5ZTRjODMwMGRkMDhhZWIzN2Y4ZTcyOGI4ZGFkCisuZ2l0L29iamVjdHMvOTIKKy5naXQvb2JqZWN0cy85Mi9iOGI2OTRmZmIxNjc1ZTU5NzUxNDhlMTEyMTgxMDA4MWRiZGZmZQorLmdpdC9vYmplY3RzLzU0CisuZ2l0L29iamVjdHMvNTQvMTk2Y2MyNzAzZGMxNjVjYmQzNzNhNjVhNGRjZjIyZDUwYWU3ZjcKKy5naXQvb2JqZWN0cy9hMAorLmdpdC9vYmplY3RzL2EwLzQyMzg5Njk3MzY0NDc3MTQ5N2JkYzAzZWI5OWQ1MjgxNjE1YjUxCisuZ2l0L29iamVjdHMvZDAKKy5naXQvb2JqZWN0cy9kMC80OTJiMzY4YjY2YmRhYmYyYWMxZmQ4YzkyYjM5ZDNkYjkxNmU1OQorLmdpdC9vYmplY3RzL2M0CisuZ2l0L29iamVjdHMvYzQvZDU5ZjM5MGI5Y2ZkNDMxODExN2FmZGUxMWQ2MDFjMTA4NWYyNDEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIGZpbGVzIGlzIGp1c3QgdGhlIGNvbXByZXNzZWQgZGF0YSBwbHVzIGEKK2hlYWRlciBpZGVudGlmeWluZyB0aGVpciBsZW5ndGggYW5kIHRoZWlyIHR5cGUuICBUaGUgdHlwZSBpcyBlaXRoZXIgYQorYmxvYiwgYSB0cmVlLCBhIGNvbW1pdCwgb3IgYSB0YWcuCisKK1RoZSBzaW1wbGVzdCBjb21taXQgdG8gZmluZCBpcyB0aGUgSEVBRCBjb21taXQsIHdoaWNoIHdlIGNhbiBmaW5kCitmcm9tIC5naXQvSEVBRDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L0hFQUQKK3JlZjogcmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB5b3UgY2FuIHNlZSwgdGhpcyB0ZWxscyB1cyB3aGljaCBicmFuY2ggd2UncmUgY3VycmVudGx5IG9uLCBhbmQgaXQKK3RlbGxzIHVzIHRoaXMgYnkgbmFtaW5nIGEgZmlsZSB1bmRlciB0aGUgLmdpdCBkaXJlY3RvcnksIHdoaWNoIGl0c2VsZgorY29udGFpbnMgYSBTSEEtMSBuYW1lIHJlZmVycmluZyB0byBhIGNvbW1pdCBvYmplY3QsIHdoaWNoIHdlIGNhbgorZXhhbWluZSB3aXRoIGNhdC1maWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0IC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKK2M0ZDU5ZjM5MGI5Y2ZkNDMxODExN2FmZGUxMWQ2MDFjMTA4NWYyNDEKKyQgZ2l0IGNhdC1maWxlIC10IGM0ZDU5ZjM5Citjb21taXQKKyQgZ2l0IGNhdC1maWxlIGNvbW1pdCBjNGQ1OWYzOQordHJlZSBkMDQ5MmIzNjhiNjZiZGFiZjJhYzFmZDhjOTJiMzlkM2RiOTE2ZTU5CitwYXJlbnQgNTQxOTZjYzI3MDNkYzE2NWNiZDM3M2E2NWE0ZGNmMjJkNTBhZTdmNworYXV0aG9yIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE4NzAyIC0wNTAwCitjb21taXR0ZXIgSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+IDExNDM0MTg3MDIgLTA1MDAKKworYWRkIGVtcGhhc2lzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJ0cmVlIiBvYmplY3QgaGVyZSByZWZlcnMgdG8gdGhlIG5ldyBzdGF0ZSBvZiB0aGUgdHJlZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy10cmVlIGQwNDkyYjM2CisxMDA2NDQgYmxvYiBhMDQyMzg5Njk3MzY0NDc3MTQ5N2JkYzAzZWI5OWQ1MjgxNjE1YjUxICAgIGZpbGUudHh0CiskIGdpdCBjYXQtZmlsZSBibG9iIGEwNDIzODk2CitoZWxsbyB3b3JsZCEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlICJwYXJlbnQiIG9iamVjdCByZWZlcnMgdG8gdGhlIHByZXZpb3VzIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBjb21taXQgNTQxOTZjYzIKK3RyZWUgOTJiOGI2OTRmZmIxNjc1ZTU5NzUxNDhlMTEyMTgxMDA4MWRiZGZmZQorYXV0aG9yIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE0NjY4IC0wNTAwCitjb21taXR0ZXIgSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+IDExNDM0MTQ2NjggLTA1MDAKKworaW5pdGlhbCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdHJlZSBvYmplY3QgaXMgdGhlIHRyZWUgd2UgZXhhbWluZWQgZmlyc3QsIGFuZCB0aGlzIGNvbW1pdCBpcwordW51c3VhbCBpbiB0aGF0IGl0IGxhY2tzIGFueSBwYXJlbnQuCisKK01vc3QgY29tbWl0cyBoYXZlIG9ubHkgb25lIHBhcmVudCwgYnV0IGl0IGlzIGFsc28gY29tbW9uIGZvciBhIGNvbW1pdAordG8gaGF2ZSBtdWx0aXBsZSBwYXJlbnRzLiAgIEluIHRoYXQgY2FzZSB0aGUgY29tbWl0IHJlcHJlc2VudHMgYQorbWVyZ2UsIHdpdGggdGhlIHBhcmVudCByZWZlcmVuY2VzIHBvaW50aW5nIHRvIHRoZSBoZWFkcyBvZiB0aGUgbWVyZ2VkCiticmFuY2hlcy4KKworQmVzaWRlcyBibG9icywgdHJlZXMsIGFuZCBjb21taXRzLCB0aGUgb25seSByZW1haW5pbmcgdHlwZSBvZiBvYmplY3QKK2lzIGEgInRhZyIsIHdoaWNoIHdlIHdvbid0IGRpc2N1c3MgaGVyZTsgcmVmZXIgdG8gbGlua2dpdDpnaXQtdGFnWzFdCitmb3IgZGV0YWlscy4KKworU28gbm93IHdlIGtub3cgaG93IEdpdCB1c2VzIHRoZSBvYmplY3QgZGF0YWJhc2UgdG8gcmVwcmVzZW50IGEKK3Byb2plY3QncyBoaXN0b3J5OgorCisgICogImNvbW1pdCIgb2JqZWN0cyByZWZlciB0byAidHJlZSIgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlCisgICAgc25hcHNob3Qgb2YgYSBkaXJlY3RvcnkgdHJlZSBhdCBhIHBhcnRpY3VsYXIgcG9pbnQgaW4gdGhlCisgICAgaGlzdG9yeSwgYW5kIHJlZmVyIHRvICJwYXJlbnQiIGNvbW1pdHMgdG8gc2hvdyBob3cgdGhleSdyZQorICAgIGNvbm5lY3RlZCBpbnRvIHRoZSBwcm9qZWN0IGhpc3RvcnkuCisgICogInRyZWUiIG9iamVjdHMgcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiBhIHNpbmdsZSBkaXJlY3RvcnksCisgICAgYXNzb2NpYXRpbmcgZGlyZWN0b3J5IG5hbWVzIHRvICJibG9iIiBvYmplY3RzIGNvbnRhaW5pbmcgZmlsZQorICAgIGRhdGEgYW5kICJ0cmVlIiBvYmplY3RzIGNvbnRhaW5pbmcgc3ViZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICAqICJibG9iIiBvYmplY3RzIGNvbnRhaW4gZmlsZSBkYXRhIHdpdGhvdXQgYW55IG90aGVyIHN0cnVjdHVyZS4KKyAgKiBSZWZlcmVuY2VzIHRvIGNvbW1pdCBvYmplY3RzIGF0IHRoZSBoZWFkIG9mIGVhY2ggYnJhbmNoIGFyZQorICAgIHN0b3JlZCBpbiBmaWxlcyB1bmRlciAuZ2l0L3JlZnMvaGVhZHMvLgorICAqIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzdG9yZWQgaW4gLmdpdC9IRUFELgorCitOb3RlLCBieSB0aGUgd2F5LCB0aGF0IGxvdHMgb2YgY29tbWFuZHMgdGFrZSBhIHRyZWUgYXMgYW4gYXJndW1lbnQuCitCdXQgYXMgd2UgY2FuIHNlZSBhYm92ZSwgYSB0cmVlIGNhbiBiZSByZWZlcnJlZCB0byBpbiBtYW55IGRpZmZlcmVudAord2F5cy0tYnkgdGhlIFNIQS0xIG5hbWUgZm9yIHRoYXQgdHJlZSwgYnkgdGhlIG5hbWUgb2YgYSBjb21taXQgdGhhdAorcmVmZXJzIHRvIHRoZSB0cmVlLCBieSB0aGUgbmFtZSBvZiBhIGJyYW5jaCB3aG9zZSBoZWFkIHJlZmVycyB0byB0aGF0Cit0cmVlLCBldGMuLS1hbmQgbW9zdCBzdWNoIGNvbW1hbmRzIGNhbiBhY2NlcHQgYW55IG9mIHRoZXNlIG5hbWVzLgorCitJbiBjb21tYW5kIHN5bm9wc2VzLCB0aGUgd29yZCAidHJlZS1pc2giIGlzIHNvbWV0aW1lcyB1c2VkIHRvCitkZXNpZ25hdGUgc3VjaCBhbiBhcmd1bWVudC4KKworVGhlIGluZGV4IGZpbGUKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBwcmltYXJ5IHRvb2wgd2UndmUgYmVlbiB1c2luZyB0byBjcmVhdGUgY29tbWl0cyBpcyBgZ2l0LWNvbW1pdAorLWFgLCB3aGljaCBjcmVhdGVzIGEgY29tbWl0IGluY2x1ZGluZyBldmVyeSBjaGFuZ2UgeW91J3ZlIG1hZGUgdG8KK3lvdXIgd29ya2luZyB0cmVlLiAgQnV0IHdoYXQgaWYgeW91IHdhbnQgdG8gY29tbWl0IGNoYW5nZXMgb25seSB0bworY2VydGFpbiBmaWxlcz8gIE9yIG9ubHkgY2VydGFpbiBjaGFuZ2VzIHRvIGNlcnRhaW4gZmlsZXM/CisKK0lmIHdlIGxvb2sgYXQgdGhlIHdheSBjb21taXRzIGFyZSBjcmVhdGVkIHVuZGVyIHRoZSBjb3Zlciwgd2UnbGwgc2VlCit0aGF0IHRoZXJlIGFyZSBtb3JlIGZsZXhpYmxlIHdheXMgY3JlYXRpbmcgY29tbWl0cy4KKworQ29udGludWluZyB3aXRoIG91ciB0ZXN0LXByb2plY3QsIGxldCdzIG1vZGlmeSBmaWxlLnR4dCBhZ2FpbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gImhlbGxvIHdvcmxkLCBhZ2FpbiIgPj5maWxlLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2J1dCB0aGlzIHRpbWUgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBtYWtpbmcgdGhlIGNvbW1pdCwgbGV0J3MgdGFrZSBhbgoraW50ZXJtZWRpYXRlIHN0ZXAsIGFuZCBhc2sgZm9yIGRpZmZzIGFsb25nIHRoZSB3YXkgdG8ga2VlcCB0cmFjayBvZgord2hhdCdzIGhhcHBlbmluZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmCistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xICsxLDIgQEAKKyBoZWxsbyB3b3JsZCEKKytoZWxsbyB3b3JsZCwgYWdhaW4KKyQgZ2l0IGFkZCBmaWxlLnR4dAorJCBnaXQgZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IGRpZmYgaXMgZW1wdHksIGJ1dCBubyBuZXcgY29tbWl0cyBoYXZlIGJlZW4gbWFkZSwgYW5kIHRoZQoraGVhZCBzdGlsbCBkb2Vzbid0IGNvbnRhaW4gdGhlIG5ldyBsaW5lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgSEVBRAorZGlmZiAtLWdpdCBhL2ZpbGUudHh0IGIvZmlsZS50eHQKK2luZGV4IGEwNDIzODkuLjUxM2ZlYmEgMTAwNjQ0CistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xICsxLDIgQEAKKyBoZWxsbyB3b3JsZCEKKytoZWxsbyB3b3JsZCwgYWdhaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTbyAnZ2l0IGRpZmYnIGlzIGNvbXBhcmluZyBhZ2FpbnN0IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBoZWFkLgorVGhlIHRoaW5nIHRoYXQgaXQncyBjb21wYXJpbmcgYWdhaW5zdCBpcyBhY3R1YWxseSB0aGUgaW5kZXggZmlsZSwKK3doaWNoIGlzIHN0b3JlZCBpbiAuZ2l0L2luZGV4IGluIGEgYmluYXJ5IGZvcm1hdCwgYnV0IHdob3NlIGNvbnRlbnRzCit3ZSBjYW4gZXhhbWluZSB3aXRoIGxzLWZpbGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKKzEwMDY0NCA1MTNmZWJhMmU1M2ViYmQyNTMyNDE5ZGVkODQ4YmExOWRlODhiYTAwIDAgICAgICAgZmlsZS50eHQKKyQgZ2l0IGNhdC1maWxlIC10IDUxM2ZlYmEyCitibG9iCiskIGdpdCBjYXQtZmlsZSBibG9iIDUxM2ZlYmEyCitoZWxsbyB3b3JsZCEKK2hlbGxvIHdvcmxkLCBhZ2FpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvIHdoYXQgb3VyICdnaXQgYWRkJyBkaWQgd2FzIHN0b3JlIGEgbmV3IGJsb2IgYW5kIHRoZW4gcHV0CithIHJlZmVyZW5jZSB0byBpdCBpbiB0aGUgaW5kZXggZmlsZS4gIElmIHdlIG1vZGlmeSB0aGUgZmlsZSBhZ2FpbiwKK3dlJ2xsIHNlZSB0aGF0IHRoZSBuZXcgbW9kaWZpY2F0aW9ucyBhcmUgcmVmbGVjdGVkIGluIHRoZSAnZ2l0IGRpZmYnCitvdXRwdXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBlY2hvICdhZ2Fpbj8nID4+ZmlsZS50eHQKKyQgZ2l0IGRpZmYKK2luZGV4IDUxM2ZlYmEuLmJhM2RhN2IgMTAwNjQ0CistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xLDIgKzEsMyBAQAorIGhlbGxvIHdvcmxkIQorIGhlbGxvIHdvcmxkLCBhZ2FpbgorK2FnYWluPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cywgJ2dpdCBkaWZmJyBjYW4gYWxzbyBzaG93IHVzIHRoZSBkaWZmZXJlbmNlCitiZXR3ZWVuIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIGxhc3QgY29tbWl0LCBvciBiZXR3ZWVuIHRoZQoraW5kZXggYW5kIHRoZSBsYXN0IGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIEhFQUQKK2RpZmYgLS1naXQgYS9maWxlLnR4dCBiL2ZpbGUudHh0CitpbmRleCBhMDQyMzg5Li5iYTNkYTdiIDEwMDY0NAorLS0tIGEvZmlsZS50eHQKKysrKyBiL2ZpbGUudHh0CitAQCAtMSArMSwzIEBACisgaGVsbG8gd29ybGQhCisraGVsbG8gd29ybGQsIGFnYWluCisrYWdhaW4/CiskIGdpdCBkaWZmIC0tY2FjaGVkCitkaWZmIC0tZ2l0IGEvZmlsZS50eHQgYi9maWxlLnR4dAoraW5kZXggYTA0MjM4OS4uNTEzZmViYSAxMDA2NDQKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEAgLTEgKzEsMiBAQAorIGhlbGxvIHdvcmxkIQorK2hlbGxvIHdvcmxkLCBhZ2FpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F0IGFueSB0aW1lLCB3ZSBjYW4gY3JlYXRlIGEgbmV3IGNvbW1pdCB1c2luZyAnZ2l0IGNvbW1pdCcgKHdpdGhvdXQKK3RoZSAiLWEiIG9wdGlvbiksIGFuZCB2ZXJpZnkgdGhhdCB0aGUgc3RhdGUgY29tbWl0dGVkIG9ubHkgaW5jbHVkZXMgdGhlCitjaGFuZ2VzIHN0b3JlZCBpbiB0aGUgaW5kZXggZmlsZSwgbm90IHRoZSBhZGRpdGlvbmFsIGNoYW5nZSB0aGF0IGlzCitzdGlsbCBvbmx5IGluIG91ciB3b3JraW5nIHRyZWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1tICJyZXBlYXQiCiskIGdpdCBkaWZmIEhFQUQKK2RpZmYgLS1naXQgYS9maWxlLnR4dCBiL2ZpbGUudHh0CitpbmRleCA1MTNmZWJhLi5iYTNkYTdiIDEwMDY0NAorLS0tIGEvZmlsZS50eHQKKysrKyBiL2ZpbGUudHh0CitAQCAtMSwyICsxLDMgQEAKKyBoZWxsbyB3b3JsZCEKKyBoZWxsbyB3b3JsZCwgYWdhaW4KKythZ2Fpbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTbyBieSBkZWZhdWx0ICdnaXQgY29tbWl0JyB1c2VzIHRoZSBpbmRleCB0byBjcmVhdGUgdGhlIGNvbW1pdCwgbm90Cit0aGUgd29ya2luZyB0cmVlOyB0aGUgIi1hIiBvcHRpb24gdG8gY29tbWl0IHRlbGxzIGl0IHRvIGZpcnN0IHVwZGF0ZQordGhlIGluZGV4IHdpdGggYWxsIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworRmluYWxseSwgaXQncyB3b3J0aCBsb29raW5nIGF0IHRoZSBlZmZlY3Qgb2YgJ2dpdCBhZGQnIG9uIHRoZSBpbmRleAorZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gImdvb2RieWUsIHdvcmxkIiA+Y2xvc2luZy50eHQKKyQgZ2l0IGFkZCBjbG9zaW5nLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlZmZlY3Qgb2YgdGhlICdnaXQgYWRkJyB3YXMgdG8gYWRkIG9uZSBlbnRyeSB0byB0aGUgaW5kZXggZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtLXN0YWdlCisxMDA2NDQgOGI5NzQzYjIwZDRiMTViZTM5NTVmYzhkNWNkMmIwOWNkMjMzNjEzOCAwICAgICAgIGNsb3NpbmcudHh0CisxMDA2NDQgNTEzZmViYTJlNTNlYmJkMjUzMjQxOWRlZDg0OGJhMTlkZTg4YmEwMCAwICAgICAgIGZpbGUudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5kLCBhcyB5b3UgY2FuIHNlZSB3aXRoIGNhdC1maWxlLCB0aGlzIG5ldyBlbnRyeSByZWZlcnMgdG8gdGhlCitjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGJsb2IgOGI5NzQzYjIKK2dvb2RieWUsIHdvcmxkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJzdGF0dXMiIGNvbW1hbmQgaXMgYSB1c2VmdWwgd2F5IHRvIGdldCBhIHF1aWNrIHN1bW1hcnkgb2YgdGhlCitzaXR1YXRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3RhdHVzCitPbiBicmFuY2ggbWFzdGVyCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCisJbmV3IGZpbGU6ICAgY2xvc2luZy50eHQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisKKwltb2RpZmllZDogICBmaWxlLnR4dAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2luY2UgdGhlIGN1cnJlbnQgc3RhdGUgb2YgY2xvc2luZy50eHQgaXMgY2FjaGVkIGluIHRoZSBpbmRleCBmaWxlLAoraXQgaXMgbGlzdGVkIGFzICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZCIuICBTaW5jZSBmaWxlLnR4dCBoYXMKK2NoYW5nZXMgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoYXQgYXJlbid0IHJlZmxlY3RlZCBpbiB0aGUgaW5kZXgsCitpdCBpcyBtYXJrZWQgImNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkIi4gIEF0IHRoaXMgcG9pbnQsIHJ1bm5pbmcgImdpdAorY29tbWl0IiB3b3VsZCBjcmVhdGUgYSBjb21taXQgdGhhdCBhZGRlZCBjbG9zaW5nLnR4dCAod2l0aCBpdHMgbmV3Citjb250ZW50cyksIGJ1dCB0aGF0IGRpZG4ndCBtb2RpZnkgZmlsZS50eHQuCisKK0Fsc28sIG5vdGUgdGhhdCBhIGJhcmUgYGdpdCBkaWZmYCBzaG93cyB0aGUgY2hhbmdlcyB0byBmaWxlLnR4dCwgYnV0Citub3QgdGhlIGFkZGl0aW9uIG9mIGNsb3NpbmcudHh0LCBiZWNhdXNlIHRoZSB2ZXJzaW9uIG9mIGNsb3NpbmcudHh0CitpbiB0aGUgaW5kZXggZmlsZSBpcyBpZGVudGljYWwgdG8gdGhlIG9uZSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisKK0luIGFkZGl0aW9uIHRvIGJlaW5nIHRoZSBzdGFnaW5nIGFyZWEgZm9yIG5ldyBjb21taXRzLCB0aGUgaW5kZXggZmlsZQoraXMgYWxzbyBwb3B1bGF0ZWQgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIHdoZW4gY2hlY2tpbmcgb3V0IGEKK2JyYW5jaCwgYW5kIGlzIHVzZWQgdG8gaG9sZCB0aGUgdHJlZXMgaW52b2x2ZWQgaW4gYSBtZXJnZSBvcGVyYXRpb24uCitTZWUgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddIGFuZCB0aGUgcmVsZXZhbnQgbWFuCitwYWdlcyBmb3IgZGV0YWlscy4KKworV2hhdCBuZXh0PworLS0tLS0tLS0tLQorCitBdCB0aGlzIHBvaW50IHlvdSBzaG91bGQga25vdyBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byByZWFkIHRoZSBtYW4KK3BhZ2VzIGZvciBhbnkgb2YgdGhlIGdpdCBjb21tYW5kczsgb25lIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUKK3dpdGggdGhlIGNvbW1hbmRzIG1lbnRpb25lZCBpbiBsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLiAgWW91CitzaG91bGQgYmUgYWJsZSB0byBmaW5kIGFueSB1bmtub3duIGphcmdvbiBpbiBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCitUaGUgbGluazp1c2VyLW1hbnVhbC5odG1sW0dpdCBVc2VyJ3MgTWFudWFsXSBwcm92aWRlcyBhIG1vcmUKK2NvbXByZWhlbnNpdmUgaW50cm9kdWN0aW9uIHRvIEdpdC4KKworbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddIGV4cGxhaW5zIGhvdyB0bworaW1wb3J0IGEgQ1ZTIHJlcG9zaXRvcnkgaW50byBHaXQsIGFuZCBzaG93cyBob3cgdG8gdXNlIEdpdCBpbiBhCitDVlMtbGlrZSB3YXkuCisKK0ZvciBzb21lIGludGVyZXN0aW5nIGV4YW1wbGVzIG9mIEdpdCB1c2UsIHNlZSB0aGUKK2xpbms6aG93dG8taW5kZXguaHRtbFtob3d0b3NdLgorCitGb3IgR2l0IGRldmVsb3BlcnMsIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSBnb2VzCitpbnRvIGRldGFpbCBvbiB0aGUgbG93ZXItbGV2ZWwgR2l0IG1lY2hhbmlzbXMgaW52b2x2ZWQgaW4sIGZvcgorZXhhbXBsZSwgY3JlYXRpbmcgYSBuZXcgY29tbWl0LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10sCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10sCitsaW5rZ2l0OmdpdGNvcmUtdHV0b3JpYWxbN10sCitsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLAorbGlua2dpdDpnaXQtaGVscFsxXSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllZjVjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0CkBAIC0wLDAgKzEsNjc3IEBACitnaXR0dXRvcmlhbCg3KQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0dHV0b3JpYWwgLSBBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyB0dXRvcmlhbCBleHBsYWlucyBob3cgdG8gaW1wb3J0IGEgbmV3IHByb2plY3QgaW50byBHaXQsIG1ha2UKK2NoYW5nZXMgdG8gaXQsIGFuZCBzaGFyZSBjaGFuZ2VzIHdpdGggb3RoZXIgZGV2ZWxvcGVycy4KKworSWYgeW91IGFyZSBpbnN0ZWFkIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHVzaW5nIEdpdCB0byBmZXRjaCBhIHByb2plY3QsCitmb3IgZXhhbXBsZSwgdG8gdGVzdCB0aGUgbGF0ZXN0IHZlcnNpb24sIHlvdSBtYXkgcHJlZmVyIHRvIHN0YXJ0IHdpdGgKK3RoZSBmaXJzdCB0d28gY2hhcHRlcnMgb2YgbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0uCisKK0ZpcnN0LCBub3RlIHRoYXQgeW91IGNhbiBnZXQgZG9jdW1lbnRhdGlvbiBmb3IgYSBjb21tYW5kIHN1Y2ggYXMKK2BnaXQgbG9nIC0tZ3JhcGhgIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBtYW4gZ2l0LWxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhlbHAgbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUgbWFudWFsIHZpZXdlciBvZiB5b3VyIGNob2ljZTsgc2VlCitsaW5rZ2l0OmdpdC1oZWxwWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitJdCBpcyBhIGdvb2QgaWRlYSB0byBpbnRyb2R1Y2UgeW91cnNlbGYgdG8gR2l0IHdpdGggeW91ciBuYW1lIGFuZAorcHVibGljIGVtYWlsIGFkZHJlc3MgYmVmb3JlIGRvaW5nIGFueSBvcGVyYXRpb24uICBUaGUgZWFzaWVzdAord2F5IHRvIGRvIHNvIGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgIllvdXIgTmFtZSBDb21lcyBIZXJlIgorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QHlvdXJkb21haW4uZXhhbXBsZS5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0ltcG9ydGluZyBhIG5ldyBwcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBc3N1bWUgeW91IGhhdmUgYSB0YXJiYWxsIHByb2plY3QudGFyLmd6IHdpdGggeW91ciBpbml0aWFsIHdvcmsuICBZb3UKK2NhbiBwbGFjZSBpdCB1bmRlciBHaXQgcmV2aXNpb24gY29udHJvbCBhcyBmb2xsb3dzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgdGFyIHh6ZiBwcm9qZWN0LnRhci5negorJCBjZCBwcm9qZWN0CiskIGdpdCBpbml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IHdpbGwgcmVwbHkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAuZ2l0LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSd2ZSBub3cgaW5pdGlhbGl6ZWQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LS15b3UgbWF5IG5vdGljZSBhIG5ldworZGlyZWN0b3J5IGNyZWF0ZWQsIG5hbWVkICIuZ2l0Ii4KKworTmV4dCwgdGVsbCBHaXQgdG8gdGFrZSBhIHNuYXBzaG90IG9mIHRoZSBjb250ZW50cyBvZiBhbGwgZmlsZXMgdW5kZXIgdGhlCitjdXJyZW50IGRpcmVjdG9yeSAobm90ZSB0aGUgJy4nKSwgd2l0aCAnZ2l0IGFkZCc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNuYXBzaG90IGlzIG5vdyBzdG9yZWQgaW4gYSB0ZW1wb3Jhcnkgc3RhZ2luZyBhcmVhIHdoaWNoIEdpdCBjYWxscwordGhlICJpbmRleCIuICBZb3UgY2FuIHBlcm1hbmVudGx5IHN0b3JlIHRoZSBjb250ZW50cyBvZiB0aGUgaW5kZXggaW4gdGhlCityZXBvc2l0b3J5IHdpdGggJ2dpdCBjb21taXQnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBwcm9tcHQgeW91IGZvciBhIGNvbW1pdCBtZXNzYWdlLiAgWW91J3ZlIG5vdyBzdG9yZWQgdGhlIGZpcnN0Cit2ZXJzaW9uIG9mIHlvdXIgcHJvamVjdCBpbiBHaXQuCisKK01ha2luZyBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLQorCitNb2RpZnkgc29tZSBmaWxlcywgdGhlbiBhZGQgdGhlaXIgdXBkYXRlZCBjb250ZW50cyB0byB0aGUgaW5kZXg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGZpbGUxIGZpbGUyIGZpbGUzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGFyZSBub3cgcmVhZHkgdG8gY29tbWl0LiAgWW91IGNhbiBzZWUgd2hhdCBpcyBhYm91dCB0byBiZSBjb21taXR0ZWQKK3VzaW5nICdnaXQgZGlmZicgd2l0aCB0aGUgLS1jYWNoZWQgb3B0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1jYWNoZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoV2l0aG91dCAtLWNhY2hlZCwgJ2dpdCBkaWZmJyB3aWxsIHNob3cgeW91IGFueSBjaGFuZ2VzIHRoYXQKK3lvdSd2ZSBtYWRlIGJ1dCBub3QgeWV0IGFkZGVkIHRvIHRoZSBpbmRleC4pICBZb3UgY2FuIGFsc28gZ2V0IGEgYnJpZWYKK3N1bW1hcnkgb2YgdGhlIHNpdHVhdGlvbiB3aXRoICdnaXQgc3RhdHVzJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdGF0dXMKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICdvcmlnaW4vbWFzdGVyJy4KKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCisJbW9kaWZpZWQ6ICAgZmlsZTEKKwltb2RpZmllZDogICBmaWxlMgorCW1vZGlmaWVkOiAgIGZpbGUzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbmVlZCB0byBtYWtlIGFueSBmdXJ0aGVyIGFkanVzdG1lbnRzLCBkbyBzbyBub3csIGFuZCB0aGVuIGFkZCBhbnkKK25ld2x5IG1vZGlmaWVkIGNvbnRlbnQgdG8gdGhlIGluZGV4LiAgRmluYWxseSwgY29tbWl0IHlvdXIgY2hhbmdlcyB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBhZ2FpbiBwcm9tcHQgeW91IGZvciBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgY2hhbmdlLCBhbmQgdGhlbgorcmVjb3JkIGEgbmV3IHZlcnNpb24gb2YgdGhlIHByb2plY3QuCisKK0FsdGVybmF0aXZlbHksIGluc3RlYWQgb2YgcnVubmluZyAnZ2l0IGFkZCcgYmVmb3JlaGFuZCwgeW91IGNhbiB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgbm90aWNlIGFueSBtb2RpZmllZCAoYnV0IG5vdCBuZXcpIGZpbGVzLCBhZGQKK3RoZW0gdG8gdGhlIGluZGV4LCBhbmQgY29tbWl0LCBhbGwgaW4gb25lIHN0ZXAuCisKK0Egbm90ZSBvbiBjb21taXQgbWVzc2FnZXM6IFRob3VnaCBub3QgcmVxdWlyZWQsIGl0J3MgYSBnb29kIGlkZWEgdG8KK2JlZ2luIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoIGEgc2luZ2xlIHNob3J0IChsZXNzIHRoYW4gNTAgY2hhcmFjdGVyKQorbGluZSBzdW1tYXJpemluZyB0aGUgY2hhbmdlLCBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUgYW5kIHRoZW4gYSBtb3JlCit0aG9yb3VnaCBkZXNjcmlwdGlvbi4gVGhlIHRleHQgdXAgdG8gdGhlIGZpcnN0IGJsYW5rIGxpbmUgaW4gYSBjb21taXQKK21lc3NhZ2UgaXMgdHJlYXRlZCBhcyB0aGUgY29tbWl0IHRpdGxlLCBhbmQgdGhhdCB0aXRsZSBpcyB1c2VkCit0aHJvdWdob3V0IEdpdC4gIEZvciBleGFtcGxlLCBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gdHVybnMgYQorY29tbWl0IGludG8gZW1haWwsIGFuZCBpdCB1c2VzIHRoZSB0aXRsZSBvbiB0aGUgU3ViamVjdCBsaW5lIGFuZCB0aGUKK3Jlc3Qgb2YgdGhlIGNvbW1pdCBpbiB0aGUgYm9keS4KKworR2l0IHRyYWNrcyBjb250ZW50IG5vdCBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYW55IHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtcyBwcm92aWRlIGFuIGBhZGRgIGNvbW1hbmQgdGhhdCB0ZWxscyB0aGUKK3N5c3RlbSB0byBzdGFydCB0cmFja2luZyBjaGFuZ2VzIHRvIGEgbmV3IGZpbGUuICBHaXQncyBgYWRkYCBjb21tYW5kCitkb2VzIHNvbWV0aGluZyBzaW1wbGVyIGFuZCBtb3JlIHBvd2VyZnVsOiAnZ2l0IGFkZCcgaXMgdXNlZCBib3RoIGZvciBuZXcKK2FuZCBuZXdseSBtb2RpZmllZCBmaWxlcywgYW5kIGluIGJvdGggY2FzZXMgaXQgdGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUKK2dpdmVuIGZpbGVzIGFuZCBzdGFnZXMgdGhhdCBjb250ZW50IGluIHRoZSBpbmRleCwgcmVhZHkgZm9yIGluY2x1c2lvbiBpbgordGhlIG5leHQgY29tbWl0LgorCitWaWV3aW5nIHByb2plY3QgaGlzdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXQgYW55IHBvaW50IHlvdSBjYW4gdmlldyB0aGUgaGlzdG9yeSBvZiB5b3VyIGNoYW5nZXMgdXNpbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgYWxzbyB3YW50IHRvIHNlZSBjb21wbGV0ZSBkaWZmcyBhdCBlYWNoIHN0ZXAsIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09mdGVuIHRoZSBvdmVydmlldyBvZiB0aGUgY2hhbmdlIGlzIHVzZWZ1bCB0byBnZXQgYSBmZWVsIG9mCitlYWNoIHN0ZXAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1zdGF0IC0tc3VtbWFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hbmFnaW5nIGJyYW5jaGVzCistLS0tLS0tLS0tLS0tLS0tLQorCitBIHNpbmdsZSBHaXQgcmVwb3NpdG9yeSBjYW4gbWFpbnRhaW4gbXVsdGlwbGUgYnJhbmNoZXMgb2YKK2RldmVsb3BtZW50LiAgVG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCAiZXhwZXJpbWVudGFsIiwgdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIGV4cGVyaW1lbnRhbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBub3cgcnVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworeW91J2xsIGdldCBhIGxpc3Qgb2YgYWxsIGV4aXN0aW5nIGJyYW5jaGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgZXhwZXJpbWVudGFsCisqIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAiZXhwZXJpbWVudGFsIiBicmFuY2ggaXMgdGhlIG9uZSB5b3UganVzdCBjcmVhdGVkLCBhbmQgdGhlCisibWFzdGVyIiBicmFuY2ggaXMgYSBkZWZhdWx0IGJyYW5jaCB0aGF0IHdhcyBjcmVhdGVkIGZvciB5b3UKK2F1dG9tYXRpY2FsbHkuICBUaGUgYXN0ZXJpc2sgbWFya3MgdGhlIGJyYW5jaCB5b3UgYXJlIGN1cnJlbnRseSBvbjsKK3R5cGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzd2l0Y2ggZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gc3dpdGNoIHRvIHRoZSBleHBlcmltZW50YWwgYnJhbmNoLiAgTm93IGVkaXQgYSBmaWxlLCBjb21taXQgdGhlCitjaGFuZ2UsIGFuZCBzd2l0Y2ggYmFjayB0byB0aGUgbWFzdGVyIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoZWRpdCBmaWxlKQorJCBnaXQgY29tbWl0IC1hCiskIGdpdCBzd2l0Y2ggbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hlY2sgdGhhdCB0aGUgY2hhbmdlIHlvdSBtYWRlIGlzIG5vIGxvbmdlciB2aXNpYmxlLCBzaW5jZSBpdCB3YXMKK21hZGUgb24gdGhlIGV4cGVyaW1lbnRhbCBicmFuY2ggYW5kIHlvdSdyZSBiYWNrIG9uIHRoZSBtYXN0ZXIgYnJhbmNoLgorCitZb3UgY2FuIG1ha2UgYSBkaWZmZXJlbnQgY2hhbmdlIG9uIHRoZSBtYXN0ZXIgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhlZGl0IGZpbGUpCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithdCB0aGlzIHBvaW50IHRoZSB0d28gYnJhbmNoZXMgaGF2ZSBkaXZlcmdlZCwgd2l0aCBkaWZmZXJlbnQgY2hhbmdlcworbWFkZSBpbiBlYWNoLiAgVG8gbWVyZ2UgdGhlIGNoYW5nZXMgbWFkZSBpbiBleHBlcmltZW50YWwgaW50byBtYXN0ZXIsIHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIGV4cGVyaW1lbnRhbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBjaGFuZ2VzIGRvbid0IGNvbmZsaWN0LCB5b3UncmUgZG9uZS4gIElmIHRoZXJlIGFyZSBjb25mbGljdHMsCittYXJrZXJzIHdpbGwgYmUgbGVmdCBpbiB0aGUgcHJvYmxlbWF0aWMgZmlsZXMgc2hvd2luZyB0aGUgY29uZmxpY3Q7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgc2hvdyB0aGlzLiAgT25jZSB5b3UndmUgZWRpdGVkIHRoZSBmaWxlcyB0byByZXNvbHZlIHRoZQorY29uZmxpY3RzLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgY29tbWl0IHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLiBGaW5hbGx5LAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0aworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgc2hvdyBhIG5pY2UgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXN1bHRpbmcgaGlzdG9yeS4KKworQXQgdGhpcyBwb2ludCB5b3UgY291bGQgZGVsZXRlIHRoZSBleHBlcmltZW50YWwgYnJhbmNoIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLWQgZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjb21tYW5kIGVuc3VyZXMgdGhhdCB0aGUgY2hhbmdlcyBpbiB0aGUgZXhwZXJpbWVudGFsIGJyYW5jaCBhcmUKK2FscmVhZHkgaW4gdGhlIGN1cnJlbnQgYnJhbmNoLgorCitJZiB5b3UgZGV2ZWxvcCBvbiBhIGJyYW5jaCBjcmF6eS1pZGVhLCB0aGVuIHJlZ3JldCBpdCwgeW91IGNhbiBhbHdheXMKK2RlbGV0ZSB0aGUgYnJhbmNoIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1EIGNyYXp5LWlkZWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnJhbmNoZXMgYXJlIGNoZWFwIGFuZCBlYXN5LCBzbyB0aGlzIGlzIGEgZ29vZCB3YXkgdG8gdHJ5IHNvbWV0aGluZworb3V0LgorCitVc2luZyBHaXQgZm9yIGNvbGxhYm9yYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3NlIHRoYXQgQWxpY2UgaGFzIHN0YXJ0ZWQgYSBuZXcgcHJvamVjdCB3aXRoIGEgR2l0IHJlcG9zaXRvcnkgaW4KKy9ob21lL2FsaWNlL3Byb2plY3QsIGFuZCB0aGF0IEJvYiwgd2hvIGhhcyBhIGhvbWUgZGlyZWN0b3J5IG9uIHRoZQorc2FtZSBtYWNoaW5lLCB3YW50cyB0byBjb250cmlidXRlLgorCitCb2IgYmVnaW5zIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgY2xvbmUgL2hvbWUvYWxpY2UvcHJvamVjdCBteXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNyZWF0ZXMgYSBuZXcgZGlyZWN0b3J5ICJteXJlcG8iIGNvbnRhaW5pbmcgYSBjbG9uZSBvZiBBbGljZSdzCityZXBvc2l0b3J5LiAgVGhlIGNsb25lIGlzIG9uIGFuIGVxdWFsIGZvb3Rpbmcgd2l0aCB0aGUgb3JpZ2luYWwKK3Byb2plY3QsIHBvc3Nlc3NpbmcgaXRzIG93biBjb3B5IG9mIHRoZSBvcmlnaW5hbCBwcm9qZWN0J3MgaGlzdG9yeS4KKworQm9iIHRoZW4gbWFrZXMgc29tZSBjaGFuZ2VzIGFuZCBjb21taXRzIHRoZW06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGVkaXQgZmlsZXMpCitib2IkIGdpdCBjb21taXQgLWEKKyhyZXBlYXQgYXMgbmVjZXNzYXJ5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gaGUncyByZWFkeSwgaGUgdGVsbHMgQWxpY2UgdG8gcHVsbCBjaGFuZ2VzIGZyb20gdGhlIHJlcG9zaXRvcnkKK2F0IC9ob21lL2JvYi9teXJlcG8uICBTaGUgZG9lcyB0aGlzIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGNkIC9ob21lL2FsaWNlL3Byb2plY3QKK2FsaWNlJCBnaXQgcHVsbCAvaG9tZS9ib2IvbXlyZXBvIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbWVyZ2VzIHRoZSBjaGFuZ2VzIGZyb20gQm9iJ3MgIm1hc3RlciIgYnJhbmNoIGludG8gQWxpY2UncworY3VycmVudCBicmFuY2guICBJZiBBbGljZSBoYXMgbWFkZSBoZXIgb3duIGNoYW5nZXMgaW4gdGhlIG1lYW50aW1lLAordGhlbiBzaGUgbWF5IG5lZWQgdG8gbWFudWFsbHkgZml4IGFueSBjb25mbGljdHMuCisKK1RoZSAicHVsbCIgY29tbWFuZCB0aHVzIHBlcmZvcm1zIHR3byBvcGVyYXRpb25zOiBpdCBmZXRjaGVzIGNoYW5nZXMKK2Zyb20gYSByZW1vdGUgYnJhbmNoLCB0aGVuIG1lcmdlcyB0aGVtIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorCitOb3RlIHRoYXQgaW4gZ2VuZXJhbCwgQWxpY2Ugd291bGQgd2FudCBoZXIgbG9jYWwgY2hhbmdlcyBjb21taXR0ZWQgYmVmb3JlCitpbml0aWF0aW5nIHRoaXMgInB1bGwiLiAgSWYgQm9iJ3Mgd29yayBjb25mbGljdHMgd2l0aCB3aGF0IEFsaWNlIGRpZCBzaW5jZQordGhlaXIgaGlzdG9yaWVzIGZvcmtlZCwgQWxpY2Ugd2lsbCB1c2UgaGVyIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IHRvCityZXNvbHZlIGNvbmZsaWN0cywgYW5kIGV4aXN0aW5nIGxvY2FsIGNoYW5nZXMgd2lsbCBpbnRlcmZlcmUgd2l0aCB0aGUKK2NvbmZsaWN0IHJlc29sdXRpb24gcHJvY2VzcyAoR2l0IHdpbGwgc3RpbGwgcGVyZm9ybSB0aGUgZmV0Y2ggYnV0IHdpbGwKK3JlZnVzZSB0byBtZXJnZSAtLS0gQWxpY2Ugd2lsbCBoYXZlIHRvIGdldCByaWQgb2YgaGVyIGxvY2FsIGNoYW5nZXMgaW4KK3NvbWUgd2F5IGFuZCBwdWxsIGFnYWluIHdoZW4gdGhpcyBoYXBwZW5zKS4KKworQWxpY2UgY2FuIHBlZWsgYXQgd2hhdCBCb2IgZGlkIHdpdGhvdXQgbWVyZ2luZyBmaXJzdCwgdXNpbmcgdGhlICJmZXRjaCIKK2NvbW1hbmQ7IHRoaXMgYWxsb3dzIEFsaWNlIHRvIGluc3BlY3Qgd2hhdCBCb2IgZGlkLCB1c2luZyBhIHNwZWNpYWwKK3N5bWJvbCAiRkVUQ0hfSEVBRCIsIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiBoZSBoYXMgYW55dGhpbmcgd29ydGgKK3B1bGxpbmcsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IGZldGNoIC9ob21lL2JvYi9teXJlcG8gbWFzdGVyCithbGljZSQgZ2l0IGxvZyAtcCBIRUFELi5GRVRDSF9IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBvcGVyYXRpb24gaXMgc2FmZSBldmVuIGlmIEFsaWNlIGhhcyB1bmNvbW1pdHRlZCBsb2NhbCBjaGFuZ2VzLgorVGhlIHJhbmdlIG5vdGF0aW9uICJIRUFELi5GRVRDSF9IRUFEIiBtZWFucyAic2hvdyBldmVyeXRoaW5nIHRoYXQgaXMgcmVhY2hhYmxlCitmcm9tIHRoZSBGRVRDSF9IRUFEIGJ1dCBleGNsdWRlIGFueXRoaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gSEVBRCIuCitBbGljZSBhbHJlYWR5IGtub3dzIGV2ZXJ5dGhpbmcgdGhhdCBsZWFkcyB0byBoZXIgY3VycmVudCBzdGF0ZSAoSEVBRCksCithbmQgcmV2aWV3cyB3aGF0IEJvYiBoYXMgaW4gaGlzIHN0YXRlIChGRVRDSF9IRUFEKSB0aGF0IHNoZSBoYXMgbm90CitzZWVuIHdpdGggdGhpcyBjb21tYW5kLgorCitJZiBBbGljZSB3YW50cyB0byB2aXN1YWxpemUgd2hhdCBCb2IgZGlkIHNpbmNlIHRoZWlyIGhpc3RvcmllcyBmb3JrZWQKK3NoZSBjYW4gaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayBIRUFELi5GRVRDSF9IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB1c2VzIHRoZSBzYW1lIHR3by1kb3QgcmFuZ2Ugbm90YXRpb24gd2Ugc2F3IGVhcmxpZXIgd2l0aCAnZ2l0IGxvZycuCisKK0FsaWNlIG1heSB3YW50IHRvIHZpZXcgd2hhdCBib3RoIG9mIHRoZW0gZGlkIHNpbmNlIHRoZXkgZm9ya2VkLgorU2hlIGNhbiB1c2UgdGhyZWUtZG90IGZvcm0gaW5zdGVhZCBvZiB0aGUgdHdvLWRvdCBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayBIRUFELi4uRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbWVhbnMgInNob3cgZXZlcnl0aGluZyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGVpdGhlciBvbmUsIGJ1dAorZXhjbHVkZSBhbnl0aGluZyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGJvdGggb2YgdGhlbSIuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlc2UgcmFuZ2Ugbm90YXRpb24gY2FuIGJlIHVzZWQgd2l0aCBib3RoIGdpdGsKK2FuZCAiZ2l0IGxvZyIuCisKK0FmdGVyIGluc3BlY3Rpbmcgd2hhdCBCb2IgZGlkLCBpZiB0aGVyZSBpcyBub3RoaW5nIHVyZ2VudCwgQWxpY2UgbWF5CitkZWNpZGUgdG8gY29udGludWUgd29ya2luZyB3aXRob3V0IHB1bGxpbmcgZnJvbSBCb2IuICBJZiBCb2IncyBoaXN0b3J5Citkb2VzIGhhdmUgc29tZXRoaW5nIEFsaWNlIHdvdWxkIGltbWVkaWF0ZWx5IG5lZWQsIEFsaWNlIG1heSBjaG9vc2UgdG8KK3N0YXNoIGhlciB3b3JrLWluLXByb2dyZXNzIGZpcnN0LCBkbyBhICJwdWxsIiwgYW5kIHRoZW4gZmluYWxseSB1bnN0YXNoCitoZXIgd29yay1pbi1wcm9ncmVzcyBvbiB0b3Agb2YgdGhlIHJlc3VsdGluZyBoaXN0b3J5LgorCitXaGVuIHlvdSBhcmUgd29ya2luZyBpbiBhIHNtYWxsIGNsb3NlbHkga25pdCBncm91cCwgaXQgaXMgbm90Cit1bnVzdWFsIHRvIGludGVyYWN0IHdpdGggdGhlIHNhbWUgcmVwb3NpdG9yeSBvdmVyIGFuZCBvdmVyCithZ2Fpbi4gIEJ5IGRlZmluaW5nICdyZW1vdGUnIHJlcG9zaXRvcnkgc2hvcnRoYW5kLCB5b3UgY2FuIG1ha2UKK2l0IGVhc2llcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IHJlbW90ZSBhZGQgYm9iIC9ob21lL2JvYi9teXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoaXMsIEFsaWNlIGNhbiBwZXJmb3JtIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSAicHVsbCIgb3BlcmF0aW9uCithbG9uZSB1c2luZyB0aGUgJ2dpdCBmZXRjaCcgY29tbWFuZCB3aXRob3V0IG1lcmdpbmcgdGhlbSB3aXRoIGhlciBvd24KK2JyYW5jaCwgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgZmV0Y2ggYm9iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSB0aGUgbG9uZ2hhbmQgZm9ybSwgd2hlbiBBbGljZSBmZXRjaGVzIGZyb20gQm9iIHVzaW5nIGEKK3JlbW90ZSByZXBvc2l0b3J5IHNob3J0aGFuZCBzZXQgdXAgd2l0aCAnZ2l0IHJlbW90ZScsIHdoYXQgd2FzCitmZXRjaGVkIGlzIHN0b3JlZCBpbiBhIHJlbW90ZS10cmFja2luZyBicmFuY2gsIGluIHRoaXMgY2FzZQorYGJvYi9tYXN0ZXJgLiAgU28gYWZ0ZXIgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBsb2cgLXAgbWFzdGVyLi5ib2IvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGNoYW5nZXMgdGhhdCBCb2IgbWFkZSBzaW5jZSBoZSBicmFuY2hlZCBmcm9tCitBbGljZSdzIG1hc3RlciBicmFuY2guCisKK0FmdGVyIGV4YW1pbmluZyB0aG9zZSBjaGFuZ2VzLCBBbGljZQorY291bGQgbWVyZ2UgdGhlIGNoYW5nZXMgaW50byBoZXIgbWFzdGVyIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBtZXJnZSBib2IvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgYG1lcmdlYCBjYW4gYWxzbyBiZSBkb25lIGJ5ICdwdWxsaW5nIGZyb20gaGVyIG93biByZW1vdGUtdHJhY2tpbmcKK2JyYW5jaCcsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBwdWxsIC4gcmVtb3Rlcy9ib2IvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBnaXQgcHVsbCBhbHdheXMgbWVyZ2VzIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLAorcmVnYXJkbGVzcyBvZiB3aGF0IGVsc2UgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKworTGF0ZXIsIEJvYiBjYW4gdXBkYXRlIGhpcyByZXBvIHdpdGggQWxpY2UncyBsYXRlc3QgY2hhbmdlcyB1c2luZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBoZSBkb2Vzbid0IG5lZWQgdG8gZ2l2ZSB0aGUgcGF0aCB0byBBbGljZSdzIHJlcG9zaXRvcnk7Cit3aGVuIEJvYiBjbG9uZWQgQWxpY2UncyByZXBvc2l0b3J5LCBHaXQgc3RvcmVkIHRoZSBsb2NhdGlvbiBvZiBoZXIKK3JlcG9zaXRvcnkgaW4gdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgbG9jYXRpb24gaXMKK3VzZWQgZm9yIHB1bGxzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBjb25maWcgLS1nZXQgcmVtb3RlLm9yaWdpbi51cmwKKy9ob21lL2FsaWNlL3Byb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGNyZWF0ZWQgYnkgJ2dpdCBjbG9uZScgaXMgdmlzaWJsZSB1c2luZworYGdpdCBjb25maWcgLWxgLCBhbmQgdGhlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBtYW4gcGFnZQorZXhwbGFpbnMgdGhlIG1lYW5pbmcgb2YgZWFjaCBvcHRpb24uKQorCitHaXQgYWxzbyBrZWVwcyBhIHByaXN0aW5lIGNvcHkgb2YgQWxpY2UncyBtYXN0ZXIgYnJhbmNoIHVuZGVyIHRoZQorbmFtZSAib3JpZ2luL21hc3RlciI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2JvYiQgZ2l0IGJyYW5jaCAtcgorICBvcmlnaW4vbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIEJvYiBsYXRlciBkZWNpZGVzIHRvIHdvcmsgZnJvbSBhIGRpZmZlcmVudCBob3N0LCBoZSBjYW4gc3RpbGwKK3BlcmZvcm0gY2xvbmVzIGFuZCBwdWxscyB1c2luZyB0aGUgc3NoIHByb3RvY29sOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBjbG9uZSBhbGljZS5vcmc6L2hvbWUvYWxpY2UvcHJvamVjdCBteXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0ZXJuYXRpdmVseSwgR2l0IGhhcyBhIG5hdGl2ZSBwcm90b2NvbCwgb3IgY2FuIHVzZSBodHRwOworc2VlIGxpbmtnaXQ6Z2l0LXB1bGxbMV0gZm9yIGRldGFpbHMuCisKK0dpdCBjYW4gYWxzbyBiZSB1c2VkIGluIGEgQ1ZTLWxpa2UgbW9kZSwgd2l0aCBhIGNlbnRyYWwgcmVwb3NpdG9yeQordGhhdCB2YXJpb3VzIHVzZXJzIHB1c2ggY2hhbmdlcyB0bzsgc2VlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gYW5kCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10uCisKK0V4cGxvcmluZyBoaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgaGlzdG9yeSBpcyByZXByZXNlbnRlZCBhcyBhIHNlcmllcyBvZiBpbnRlcnJlbGF0ZWQgY29tbWl0cy4gIFdlCitoYXZlIGFscmVhZHkgc2VlbiB0aGF0IHRoZSAnZ2l0IGxvZycgY29tbWFuZCBjYW4gbGlzdCB0aG9zZSBjb21taXRzLgorTm90ZSB0aGF0IGZpcnN0IGxpbmUgb2YgZWFjaCBnaXQgbG9nIGVudHJ5IGFsc28gZ2l2ZXMgYSBuYW1lIGZvciB0aGUKK2NvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nCitjb21taXQgYzgyYTIyYzM5Y2JjMzI1NzZmNjRmNWM2YjNmMjRiOTllYTgxNDljNworQXV0aG9yOiBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgMTYgMTc6MTg6MjIgMjAwNiAtMDcwMAorCisgICAgbWVyZ2UtYmFzZTogQ2xhcmlmeSB0aGUgY29tbWVudHMgb24gcG9zdCBwcm9jZXNzaW5nLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBjYW4gZ2l2ZSB0aGlzIG5hbWUgdG8gJ2dpdCBzaG93JyB0byBzZWUgdGhlIGRldGFpbHMgYWJvdXQgdGhpcworY29tbWl0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IGM4MmEyMmMzOWNiYzMyNTc2ZjY0ZjVjNmIzZjI0Yjk5ZWE4MTQ5YzcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnV0IHRoZXJlIGFyZSBvdGhlciB3YXlzIHRvIHJlZmVyIHRvIGNvbW1pdHMuICBZb3UgY2FuIHVzZSBhbnkgaW5pdGlhbAorcGFydCBvZiB0aGUgbmFtZSB0aGF0IGlzIGxvbmcgZW5vdWdoIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgYzgyYTIyYzM5YwkjIHRoZSBmaXJzdCBmZXcgY2hhcmFjdGVycyBvZiB0aGUgbmFtZSBhcmUKKwkJCSMgdXN1YWxseSBlbm91Z2gKKyQgZ2l0IHNob3cgSEVBRAkJIyB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaAorJCBnaXQgc2hvdyBleHBlcmltZW50YWwJIyB0aGUgdGlwIG9mIHRoZSAiZXhwZXJpbWVudGFsIiBicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXZlcnkgY29tbWl0IHVzdWFsbHkgaGFzIG9uZSAicGFyZW50IiBjb21taXQKK3doaWNoIHBvaW50cyB0byB0aGUgcHJldmlvdXMgc3RhdGUgb2YgdGhlIHByb2plY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRF4gICMgdG8gc2VlIHRoZSBwYXJlbnQgb2YgSEVBRAorJCBnaXQgc2hvdyBIRUFEXl4gIyB0byBzZWUgdGhlIGdyYW5kcGFyZW50IG9mIEhFQUQKKyQgZ2l0IHNob3cgSEVBRH40ICMgdG8gc2VlIHRoZSBncmVhdC1ncmVhdCBncmFuZHBhcmVudCBvZiBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBtZXJnZSBjb21taXRzIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgcGFyZW50OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQUReMSAjIHNob3cgdGhlIGZpcnN0IHBhcmVudCBvZiBIRUFEIChzYW1lIGFzIEhFQUReKQorJCBnaXQgc2hvdyBIRUFEXjIgIyBzaG93IHRoZSBzZWNvbmQgcGFyZW50IG9mIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIGdpdmUgY29tbWl0cyBuYW1lcyBvZiB5b3VyIG93bjsgYWZ0ZXIgcnVubmluZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgdjIuNSAxYjJlMWQ2M2ZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3lvdSBjYW4gcmVmZXIgdG8gMWIyZTFkNjNmZiBieSB0aGUgbmFtZSAidjIuNSIuICBJZiB5b3UgaW50ZW5kIHRvCitzaGFyZSB0aGlzIG5hbWUgd2l0aCBvdGhlciBwZW9wbGUgKGZvciBleGFtcGxlLCB0byBpZGVudGlmeSBhIHJlbGVhc2UKK3ZlcnNpb24pLCB5b3Ugc2hvdWxkIGNyZWF0ZSBhICJ0YWciIG9iamVjdCwgYW5kIHBlcmhhcHMgc2lnbiBpdDsgc2VlCitsaW5rZ2l0OmdpdC10YWdbMV0gZm9yIGRldGFpbHMuCisKK0FueSBHaXQgY29tbWFuZCB0aGF0IG5lZWRzIHRvIGtub3cgYSBjb21taXQgY2FuIHRha2UgYW55IG9mIHRoZXNlCituYW1lcy4gIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIHYyLjUgSEVBRAkgIyBjb21wYXJlIHRoZSBjdXJyZW50IEhFQUQgdG8gdjIuNQorJCBnaXQgYnJhbmNoIHN0YWJsZSB2Mi41ICMgc3RhcnQgYSBuZXcgYnJhbmNoIG5hbWVkICJzdGFibGUiIGJhc2VkCisJCQkgIyBhdCB2Mi41CiskIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gIyByZXNldCB5b3VyIGN1cnJlbnQgYnJhbmNoIGFuZCB3b3JraW5nCisJCQkgIyBkaXJlY3RvcnkgdG8gaXRzIHN0YXRlIGF0IEhFQUReCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlIGNhcmVmdWwgd2l0aCB0aGF0IGxhc3QgY29tbWFuZDogaW4gYWRkaXRpb24gdG8gbG9zaW5nIGFueSBjaGFuZ2VzCitpbiB0aGUgd29ya2luZyBkaXJlY3RvcnksIGl0IHdpbGwgYWxzbyByZW1vdmUgYWxsIGxhdGVyIGNvbW1pdHMgZnJvbQordGhpcyBicmFuY2guICBJZiB0aGlzIGJyYW5jaCBpcyB0aGUgb25seSBicmFuY2ggY29udGFpbmluZyB0aG9zZQorY29tbWl0cywgdGhleSB3aWxsIGJlIGxvc3QuICBBbHNvLCBkb24ndCB1c2UgJ2dpdCByZXNldCcgb24gYQorcHVibGljbHktdmlzaWJsZSBicmFuY2ggdGhhdCBvdGhlciBkZXZlbG9wZXJzIHB1bGwgZnJvbSwgYXMgaXQgd2lsbAorZm9yY2UgbmVlZGxlc3MgbWVyZ2VzIG9uIG90aGVyIGRldmVsb3BlcnMgdG8gY2xlYW4gdXAgdGhlIGhpc3RvcnkuCitJZiB5b3UgbmVlZCB0byB1bmRvIGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBwdXNoZWQsIHVzZSAnZ2l0IHJldmVydCcKK2luc3RlYWQuCisKK1RoZSAnZ2l0IGdyZXAnIGNvbW1hbmQgY2FuIHNlYXJjaCBmb3Igc3RyaW5ncyBpbiBhbnkgdmVyc2lvbiBvZiB5b3VyCitwcm9qZWN0LCBzbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBncmVwICJoZWxsbyIgdjIuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzZWFyY2hlcyBmb3IgYWxsIG9jY3VycmVuY2VzIG9mICJoZWxsbyIgaW4gdjIuNS4KKworSWYgeW91IGxlYXZlIG91dCB0aGUgY29tbWl0IG5hbWUsICdnaXQgZ3JlcCcgd2lsbCBzZWFyY2ggYW55IG9mIHRoZQorZmlsZXMgaXQgbWFuYWdlcyBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LiAgU28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZ3JlcCAiaGVsbG8iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lzIGEgcXVpY2sgd2F5IHRvIHNlYXJjaCBqdXN0IHRoZSBmaWxlcyB0aGF0IGFyZSB0cmFja2VkIGJ5IEdpdC4KKworTWFueSBHaXQgY29tbWFuZHMgYWxzbyB0YWtlIHNldHMgb2YgY29tbWl0cywgd2hpY2ggY2FuIGJlIHNwZWNpZmllZAoraW4gYSBudW1iZXIgb2Ygd2F5cy4gIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgd2l0aCAnZ2l0IGxvZyc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyB2Mi41Li52Mi42ICAgICAgICAgICAgIyBjb21taXRzIGJldHdlZW4gdjIuNSBhbmQgdjIuNgorJCBnaXQgbG9nIHYyLjUuLiAgICAgICAgICAgICAgICAjIGNvbW1pdHMgc2luY2UgdjIuNQorJCBnaXQgbG9nIC0tc2luY2U9IjIgd2Vla3MgYWdvIiAjIGNvbW1pdHMgZnJvbSB0aGUgbGFzdCAyIHdlZWtzCiskIGdpdCBsb2cgdjIuNS4uIE1ha2VmaWxlICAgICAgICMgY29tbWl0cyBzaW5jZSB2Mi41IHdoaWNoIG1vZGlmeQorCQkJCSMgTWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIGdpdmUgJ2dpdCBsb2cnIGEgInJhbmdlIiBvZiBjb21taXRzIHdoZXJlIHRoZSBmaXJzdCBpcyBub3QKK25lY2Vzc2FyaWx5IGFuIGFuY2VzdG9yIG9mIHRoZSBzZWNvbmQ7IGZvciBleGFtcGxlLCBpZiB0aGUgdGlwcyBvZgordGhlIGJyYW5jaGVzICJzdGFibGUiIGFuZCAibWFzdGVyIiBkaXZlcmdlZCBmcm9tIGEgY29tbW9uCitjb21taXQgc29tZSB0aW1lIGFnbywgdGhlbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgc3RhYmxlLi5tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBsaXN0IGNvbW1pdHMgbWFkZSBpbiB0aGUgbWFzdGVyIGJyYW5jaCBidXQgbm90IGluIHRoZQorc3RhYmxlIGJyYW5jaCwgd2hpbGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIG1hc3Rlci4uc3RhYmxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgc2hvdyB0aGUgbGlzdCBvZiBjb21taXRzIG1hZGUgb24gdGhlIHN0YWJsZSBicmFuY2ggYnV0IG5vdAordGhlIG1hc3RlciBicmFuY2guCisKK1RoZSAnZ2l0IGxvZycgY29tbWFuZCBoYXMgYSB3ZWFrbmVzczogaXQgbXVzdCBwcmVzZW50IGNvbW1pdHMgaW4gYQorbGlzdC4gIFdoZW4gdGhlIGhpc3RvcnkgaGFzIGxpbmVzIG9mIGRldmVsb3BtZW50IHRoYXQgZGl2ZXJnZWQgYW5kCit0aGVuIG1lcmdlZCBiYWNrIHRvZ2V0aGVyLCB0aGUgb3JkZXIgaW4gd2hpY2ggJ2dpdCBsb2cnIHByZXNlbnRzCit0aG9zZSBjb21taXRzIGlzIG1lYW5pbmdsZXNzLgorCitNb3N0IHByb2plY3RzIHdpdGggbXVsdGlwbGUgY29udHJpYnV0b3JzIChzdWNoIGFzIHRoZSBMaW51eCBrZXJuZWwsCitvciBHaXQgaXRzZWxmKSBoYXZlIGZyZXF1ZW50IG1lcmdlcywgYW5kICdnaXRrJyBkb2VzIGEgYmV0dGVyIGpvYiBvZgordmlzdWFsaXppbmcgdGhlaXIgaGlzdG9yeS4gIEZvciBleGFtcGxlLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIGRyaXZlcnMvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FsbG93cyB5b3UgdG8gYnJvd3NlIGFueSBjb21taXRzIGZyb20gdGhlIGxhc3QgMiB3ZWVrcyBvZiBjb21taXRzCit0aGF0IG1vZGlmaWVkIGZpbGVzIHVuZGVyIHRoZSAiZHJpdmVycyIgZGlyZWN0b3J5LiAgKE5vdGU6IHlvdSBjYW4KK2FkanVzdCBnaXRrJ3MgZm9udHMgYnkgaG9sZGluZyBkb3duIHRoZSBjb250cm9sIGtleSB3aGlsZSBwcmVzc2luZworIi0iIG9yICIrIi4pCisKK0ZpbmFsbHksIG1vc3QgY29tbWFuZHMgdGhhdCB0YWtlIGZpbGVuYW1lcyB3aWxsIG9wdGlvbmFsbHkgYWxsb3cgeW91Cit0byBwcmVjZWRlIGFueSBmaWxlbmFtZSBieSBhIGNvbW1pdCwgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgdmVyc2lvbgorb2YgdGhlIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgdjIuNTpNYWtlZmlsZSBIRUFEOk1ha2VmaWxlLmluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyB1c2UgJ2dpdCBzaG93JyB0byBzZWUgYW55IHN1Y2ggZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyB2Mi41Ok1ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05leHQgU3RlcHMKKy0tLS0tLS0tLS0KKworVGhpcyB0dXRvcmlhbCBzaG91bGQgYmUgZW5vdWdoIHRvIHBlcmZvcm0gYmFzaWMgZGlzdHJpYnV0ZWQgcmV2aXNpb24KK2NvbnRyb2wgZm9yIHlvdXIgcHJvamVjdHMuICBIb3dldmVyLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkZXB0aAorYW5kIHBvd2VyIG9mIEdpdCB5b3UgbmVlZCB0byB1bmRlcnN0YW5kIHR3byBzaW1wbGUgaWRlYXMgb24gd2hpY2ggaXQKK2lzIGJhc2VkOgorCisgICogVGhlIG9iamVjdCBkYXRhYmFzZSBpcyB0aGUgcmF0aGVyIGVsZWdhbnQgc3lzdGVtIHVzZWQgdG8KKyAgICBzdG9yZSB0aGUgaGlzdG9yeSBvZiB5b3VyIHByb2plY3QtLWZpbGVzLCBkaXJlY3RvcmllcywgYW5kCisgICAgY29tbWl0cy4KKworICAqIFRoZSBpbmRleCBmaWxlIGlzIGEgY2FjaGUgb2YgdGhlIHN0YXRlIG9mIGEgZGlyZWN0b3J5IHRyZWUsCisgICAgdXNlZCB0byBjcmVhdGUgY29tbWl0cywgY2hlY2sgb3V0IHdvcmtpbmcgZGlyZWN0b3JpZXMsIGFuZAorICAgIGhvbGQgdGhlIHZhcmlvdXMgdHJlZXMgaW52b2x2ZWQgaW4gYSBtZXJnZS4KKworUGFydCB0d28gb2YgdGhpcyB0dXRvcmlhbCBleHBsYWlucyB0aGUgb2JqZWN0CitkYXRhYmFzZSwgdGhlIGluZGV4IGZpbGUsIGFuZCBhIGZldyBvdGhlciBvZGRzIGFuZCBlbmRzIHRoYXQgeW91J2xsCituZWVkIHRvIG1ha2UgdGhlIG1vc3Qgb2YgR2l0LiBZb3UgY2FuIGZpbmQgaXQgYXQgbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLgorCitJZiB5b3UgZG9uJ3Qgd2FudCB0byBjb250aW51ZSB3aXRoIHRoYXQgcmlnaHQgYXdheSwgYSBmZXcgb3RoZXIKK2RpZ3Jlc3Npb25zIHRoYXQgbWF5IGJlIGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgYXJlOgorCisgICogbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLCBsaW5rZ2l0OmdpdC1hbVsxXTogVGhlc2UgY29udmVydAorICAgIHNlcmllcyBvZiBnaXQgY29tbWl0cyBpbnRvIGVtYWlsZWQgcGF0Y2hlcywgYW5kIHZpY2UgdmVyc2EsCisgICAgdXNlZnVsIGZvciBwcm9qZWN0cyBzdWNoIGFzIHRoZSBMaW51eCBrZXJuZWwgd2hpY2ggcmVseSBoZWF2aWx5CisgICAgb24gZW1haWxlZCBwYXRjaGVzLgorCisgICogbGlua2dpdDpnaXQtYmlzZWN0WzFdOiBXaGVuIHRoZXJlIGlzIGEgcmVncmVzc2lvbiBpbiB5b3VyCisgICAgcHJvamVjdCwgb25lIHdheSB0byB0cmFjayBkb3duIHRoZSBidWcgaXMgYnkgc2VhcmNoaW5nIHRocm91Z2gKKyAgICB0aGUgaGlzdG9yeSB0byBmaW5kIHRoZSBleGFjdCBjb21taXQgdGhhdCdzIHRvIGJsYW1lLiAgR2l0IGJpc2VjdAorICAgIGNhbiBoZWxwIHlvdSBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBmb3IgdGhhdCBjb21taXQuICBJdCBpcworICAgIHNtYXJ0IGVub3VnaCB0byBwZXJmb3JtIGEgY2xvc2UtdG8tb3B0aW1hbCBzZWFyY2ggZXZlbiBpbiB0aGUKKyAgICBjYXNlIG9mIGNvbXBsZXggbm9uLWxpbmVhciBoaXN0b3J5IHdpdGggbG90cyBvZiBtZXJnZWQgYnJhbmNoZXMuCisKKyAgKiBsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XTogR2l2ZXMgYW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQKKyAgICB3b3JrZmxvd3MuCisKKyAgKiBsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddOiBFdmVyeWRheSBHaXQgd2l0aCAyMCBDb21tYW5kcyBPciBTby4KKworICAqIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XTogR2l0IGZvciBDVlMgdXNlcnMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0d2ViLmNvbmYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIuY29uZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2M2E3OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0d2ViLmNvbmYudHh0CkBAIC0wLDAgKzEsOTcwIEBACitnaXR3ZWIuY29uZig1KQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0d2ViLmNvbmYgLSBHaXR3ZWIgKEdpdCB3ZWIgaW50ZXJmYWNlKSBjb25maWd1cmF0aW9uIGZpbGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCisvZXRjL2dpdHdlYi5jb25mLCAvZXRjL2dpdHdlYi1jb21tb24uY29uZiwgJEdJVFdFQkRJUi9naXR3ZWJfY29uZmlnLnBlcmwKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoZSBnaXR3ZWIgQ0dJIHNjcmlwdCBmb3Igdmlld2luZyBHaXQgcmVwb3NpdG9yaWVzIG92ZXIgdGhlIHdlYiB1c2VzIGEKK3Blcmwgc2NyaXB0IGZyYWdtZW50IGFzIGl0cyBjb25maWd1cmF0aW9uIGZpbGUuICBZb3UgY2FuIHNldCB2YXJpYWJsZXMKK3VzaW5nICJgb3VyICR2YXJpYWJsZSA9IHZhbHVlYCI7IHRleHQgZnJvbSBhICIjIiBjaGFyYWN0ZXIgdW50aWwgdGhlCitlbmQgb2YgYSBsaW5lIGlzIGlnbm9yZWQuICBTZWUgKnBlcmxzeW4qKDEpIGZvciBkZXRhaWxzLgorCitBbiBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaHR0cDovL2dpdC5leGFtcGxlLm9yZworIworb3VyICRwcm9qZWN0cm9vdCA9ICIvc3J2L2dpdCI7ICMgRkhTIHJlY29tbWVuZGF0aW9uCitvdXIgJHNpdGVfbmFtZSA9ICdFeGFtcGxlLm9yZyA+PiBSZXBvcyc7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitUaGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2V0dGluZ3MgdGhhdAord2VyZSBidWlsdCBpbnRvIGdpdHdlYiBhdCB0aGUgdGltZSB0aGUgJ2dpdHdlYi5jZ2knIHNjcmlwdCB3YXMgZ2VuZXJhdGVkLgorCitXaGlsZSBvbmUgY291bGQganVzdCBhbHRlciB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbiB0aGUgZ2l0d2ViCitDR0kgaXRzZWxmLCB0aG9zZSBjaGFuZ2VzIHdvdWxkIGJlIGxvc3QgdXBvbiB1cGdyYWRlLiAgQ29uZmlndXJhdGlvbgorc2V0dGluZ3MgbWlnaHQgYWxzbyBiZSBwbGFjZWQgaW50byBhIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZQorQ0dJIHNjcmlwdCB3aXRoIHRoZSBkZWZhdWx0IG5hbWUgJ2dpdHdlYl9jb25maWcucGVybCcgLS0gYWxsb3dpbmcKK29uZSB0byBoYXZlIG11bHRpcGxlIGdpdHdlYiBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYnkKK3RoZSB1c2Ugb2Ygc3ltbGlua3MuCisKK05vdGUgdGhhdCBzb21lIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGNvbnRyb2xsZWQgb24gcGVyLXJlcG9zaXRvcnkgcmF0aGVyIHRoYW4KK2dpdHdlYi13aWRlIGJhc2lzOiBzZWUgIlBlci1yZXBvc2l0b3J5IGdpdHdlYiBjb25maWd1cmF0aW9uIiBzdWJzZWN0aW9uIG9uCitsaW5rZ2l0OmdpdHdlYlsxXSBtYW5wYWdlLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KK0dpdHdlYiByZWFkcyBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMgaW4gdGhlCitmb2xsb3dpbmcgb3JkZXI6CisKKyAqIGJ1aWx0LWluIHZhbHVlcyAoc29tZSBzZXQgZHVyaW5nIGJ1aWxkIHN0YWdlKSwKKworICogY29tbW9uIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8KKyAgIGAvZXRjL2dpdHdlYi1jb21tb24uY29uZmApLAorCisgKiBlaXRoZXIgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJ2dpdHdlYl9jb25maWcucGVybCcKKyAgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgaW5zdGFsbGVkIGdpdHdlYiksIG9yIGlmIGl0IGRvZXMgbm90IGV4aXN0cworICAgdGhlbiBmYWxsYmFjayBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvIGAvZXRjL2dpdHdlYi5jb25mYCkuCisKK1ZhbHVlcyBvYnRhaW5lZCBpbiBsYXRlciBjb25maWd1cmF0aW9uIGZpbGVzIG92ZXJyaWRlIHZhbHVlcyBvYnRhaW5lZCBlYXJsaWVyCitpbiB0aGUgYWJvdmUgc2VxdWVuY2UuCisKK0xvY2F0aW9ucyBvZiB0aGUgY29tbW9uIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhlIGZhbGxiYWNrCitzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHRoZSBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmaWxlCithcmUgZGVmaW5lZCBhdCBjb21waWxlIHRpbWUgdXNpbmcgYnVpbGQtdGltZSBNYWtlZmlsZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZXMsIHJlc3BlY3RpdmVseSBgR0lUV0VCX0NPTkZJR19DT01NT05gLCBgR0lUV0VCX0NPTkZJR19TWVNURU1gCithbmQgYEdJVFdFQl9DT05GSUdgLgorCitZb3UgY2FuIGFsc28gb3ZlcnJpZGUgbG9jYXRpb25zIG9mIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGVzIGR1cmluZworcnVudGltZSBieSBzZXR0aW5nIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorYEdJVFdFQl9DT05GSUdfQ09NTU9OYCwgYEdJVFdFQl9DT05GSUdfU1lTVEVNYCBhbmQgYEdJVFdFQl9DT05GSUdgCit0byBhIG5vbi1lbXB0eSB2YWx1ZS4KKworCitUaGUgc3ludGF4IG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGlzIHRoYXQgb2YgUGVybCwgc2luY2UgdGhlc2UgZmlsZXMgYXJlCitoYW5kbGVkIGJ5IHNvdXJjaW5nIHRoZW0gYXMgZnJhZ21lbnRzIG9mIFBlcmwgY29kZSAodGhlIGxhbmd1YWdlIHRoYXQKK2dpdHdlYiBpdHNlbGYgaXMgd3JpdHRlbiBpbikuIFZhcmlhYmxlcyBhcmUgdHlwaWNhbGx5IHNldCB1c2luZyB0aGUKK2BvdXJgIHF1YWxpZmllciAoYXMgaW4gImBvdXIgJHZhcmlhYmxlID0gPHZhbHVlPjtgIikgdG8gYXZvaWQgc3ludGF4CitlcnJvcnMgaWYgYSBuZXcgdmVyc2lvbiBvZiBnaXR3ZWIgbm8gbG9uZ2VyIHVzZXMgYSB2YXJpYWJsZSBhbmQgdGhlcmVmb3JlCitzdG9wcyBkZWNsYXJpbmcgaXQuCisKK1lvdSBjYW4gaW5jbHVkZSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGUgdXNpbmcgcmVhZF9jb25maWdfZmlsZSgpCitzdWJyb3V0aW5lLiAgRm9yIGV4YW1wbGUsIG9uZSBtaWdodCB3YW50IHRvIHB1dCBnaXR3ZWIgY29uZmlndXJhdGlvbgorcmVsYXRlZCB0byBhY2Nlc3MgY29udHJvbCBmb3Igdmlld2luZyByZXBvc2l0b3JpZXMgdmlhIEdpdG9saXRlIChvbmUKK29mIEdpdCByZXBvc2l0b3J5IG1hbmFnZW1lbnQgdG9vbHMpIGluIGEgc2VwYXJhdGUgZmlsZSwgZS5nLiBpbgorYC9ldGMvZ2l0d2ViLWdpdG9saXRlLmNvbmZgLiAgVG8gaW5jbHVkZSBpdCwgcHV0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWFkX2NvbmZpZ19maWxlKCIvZXRjL2dpdHdlYi1naXRvbGl0ZS5jb25mIik7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzb21ld2hlcmUgaW4gZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2VkLCBlLmcuIGluIHBlci1pbnN0YWxsYXRpb24KK2dpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUuICBOb3RlIHRoYXQgcmVhZF9jb25maWdfZmlsZSgpIGNoZWNrcyBpdHNlbGYKK3RoYXQgdGhlIGZpbGUgaXQgcmVhZHMgZXhpc3RzLCBhbmQgZG9lcyBub3RoaW5nIGlmIGl0IGlzIG5vdCBmb3VuZC4KK0l0IGFsc28gaGFuZGxlcyBlcnJvcnMgaW4gaW5jbHVkZWQgZmlsZS4KKworCitUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHdpdGggbm8gY29uZmlndXJhdGlvbiBmaWxlIGF0IGFsbCBtYXkgd29yaworcGVyZmVjdGx5IHdlbGwgZm9yIHNvbWUgaW5zdGFsbGF0aW9ucy4gIFN0aWxsLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBpcwordXNlZnVsIGZvciBjdXN0b21pemluZyBvciB0d2Vha2luZyB0aGUgYmVoYXZpb3Igb2YgZ2l0d2ViIGluIG1hbnkgd2F5cywgYW5kCitzb21lIG9wdGlvbmFsIGZlYXR1cmVzIHdpbGwgbm90IGJlIHByZXNlbnQgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZCB1c2luZwordGhlIGNvbmZpZ3VyYWJsZSBgJWZlYXR1cmVzYCB2YXJpYWJsZSAoc2VlIGFsc28gIkNvbmZpZ3VyaW5nIGdpdHdlYgorZmVhdHVyZXMiIHNlY3Rpb24gYmVsb3cpLgorCisKK0NPTkZJR1VSQVRJT04gVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29tZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzIChlbWJlZGRlZCBpbiB0aGUgQ0dJCitzY3JpcHQpIHNldCBkdXJpbmcgYnVpbGRpbmcgZ2l0d2ViIC0tIGlmIHRoYXQgaXMgdGhlIGNhc2UsIHRoaXMgZmFjdCBpcyBwdXQKK2luIHRoZWlyIGRlc2NyaXB0aW9uLiAgU2VlIGdpdHdlYidzICdJTlNUQUxMJyBmaWxlIGZvciBpbnN0cnVjdGlvbnMgb24gYnVpbGRpbmcKK2FuZCBpbnN0YWxsaW5nIGdpdHdlYi4KKworCitMb2NhdGlvbiBvZiByZXBvc2l0b3JpZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGRlc2NyaWJlZCBiZWxvdyBjb250cm9sIGhvdyBnaXR3ZWIgZmluZHMKK0dpdCByZXBvc2l0b3JpZXMsIGFuZCBob3cgcmVwb3NpdG9yaWVzIGFyZSBkaXNwbGF5ZWQgYW5kIGFjY2Vzc2VkLgorCitTZWUgYWxzbyAiUmVwb3NpdG9yaWVzIiBhbmQgbGF0ZXIgc3Vic2VjdGlvbnMgaW4gbGlua2dpdDpnaXR3ZWJbMV0gbWFucGFnZS4KKworJHByb2plY3Ryb290OjoKKwlBYnNvbHV0ZSBmaWxlc3lzdGVtIHBhdGggd2hpY2ggd2lsbCBiZSBwcmVwZW5kZWQgdG8gcHJvamVjdCBwYXRoOworCXRoZSBwYXRoIHRvIHJlcG9zaXRvcnkgaXMgYCRwcm9qZWN0cm9vdC8kcHJvamVjdGAuICBTZXQgdG8KKwlgJEdJVFdFQl9QUk9KRUNUUk9PVGAgZHVyaW5nIGluc3RhbGxhdGlvbi4gIFRoaXMgdmFyaWFibGUgaGFzIHRvIGJlCisJc2V0IGNvcnJlY3RseSBmb3IgZ2l0d2ViIHRvIGZpbmQgcmVwb3NpdG9yaWVzLgorKworRm9yIGV4YW1wbGUsIGlmIGAkcHJvamVjdHJvb3RgIGlzIHNldCB0byAiL3Nydi9naXQiIGJ5IHB1dHRpbmcgdGhlIGZvbGxvd2luZworaW4gZ2l0d2ViIGNvbmZpZyBmaWxlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICRwcm9qZWN0cm9vdCA9ICIvc3J2L2dpdCI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCit0aGVuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2h0dHA6Ly9naXQuZXhhbXBsZS5jb20vZ2l0d2ViLmNnaT9wPWZvby9iYXIuZ2l0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK2FuZCBpdHMgcGF0aF9pbmZvIGJhc2VkIGVxdWl2YWxlbnQKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraHR0cDovL2dpdC5leGFtcGxlLmNvbS9naXR3ZWIuY2dpL2Zvby9iYXIuZ2l0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK3dpbGwgbWFwIHRvIHRoZSBwYXRoIGAvc3J2L2dpdC9mb28vYmFyLmdpdGAgb24gdGhlIGZpbGVzeXN0ZW0uCisKKyRwcm9qZWN0c19saXN0OjoKKwlOYW1lIG9mIGEgcGxhaW4gdGV4dCBmaWxlIGxpc3RpbmcgcHJvamVjdHMsIG9yIGEgbmFtZSBvZiBkaXJlY3RvcnkKKwl0byBiZSBzY2FubmVkIGZvciBwcm9qZWN0cy4KKysKK1Byb2plY3QgbGlzdCBmaWxlcyBzaG91bGQgbGlzdCBvbmUgcHJvamVjdCBwZXIgbGluZSwgd2l0aCBlYWNoIGxpbmUKK2hhdmluZyB0aGUgZm9sbG93aW5nIGZvcm1hdAorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxVUkktZW5jb2RlZCBmaWxlc3lzdGVtIHBhdGggdG8gcmVwb3NpdG9yeT4gU1AgPFVSSS1lbmNvZGVkIHJlcG9zaXRvcnkgb3duZXI+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBgR0lUV0VCX0xJU1RgCittYWtlZmlsZSB2YXJpYWJsZSBhdCBpbnN0YWxsYXRpb24gdGltZS4gIElmIHRoaXMgdmFyaWFibGUgaXMgZW1wdHksIGdpdHdlYgord2lsbCBmYWxsIGJhY2sgdG8gc2Nhbm5pbmcgdGhlIGAkcHJvamVjdHJvb3RgIGRpcmVjdG9yeSBmb3IgcmVwb3NpdG9yaWVzLgorCiskcHJvamVjdF9tYXhkZXB0aDo6CisJSWYgYCRwcm9qZWN0c19saXN0YCB2YXJpYWJsZSBpcyB1bnNldCwgZ2l0d2ViIHdpbGwgcmVjdXJzaXZlbHkKKwlzY2FuIGZpbGVzeXN0ZW0gZm9yIEdpdCByZXBvc2l0b3JpZXMuICBUaGUgYCRwcm9qZWN0X21heGRlcHRoYAorCWlzIHVzZWQgdG8gbGltaXQgdHJhdmVyc2luZyBkZXB0aCwgcmVsYXRpdmUgdG8gYCRwcm9qZWN0cm9vdGAKKwkoc3RhcnRpbmcgcG9pbnQpOyBpdCBtZWFucyB0aGF0IGRpcmVjdG9yaWVzIHdoaWNoIGFyZSBmdXJ0aGVyCisJZnJvbSBgJHByb2plY3Ryb290YCB0aGFuIGAkcHJvamVjdF9tYXhkZXB0aGAgd2lsbCBiZSBza2lwcGVkLgorKworSXQgaXMgcHVyZWx5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3JpZ2luYWxseSBpbnRlbmRlZCBmb3IgTWFjT1MgWCwKK3doZXJlIHJlY3Vyc2l2ZSBkaXJlY3RvcnkgdHJhdmVyc2FsIGlzIHNsb3cuICBHaXR3ZWIgZm9sbG93cyBzeW1ib2xpYworbGlua3MsIGJ1dCBpdCBkZXRlY3RzIGN5Y2xlcywgaWdub3JpbmcgYW55IGR1cGxpY2F0ZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisrCitUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIGRldGVybWluZWQgYnkgdGhlIGJ1aWxkLXRpbWUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYEdJVFdFQl9QUk9KRUNUX01BWERFUFRIYCwgd2hpY2ggZGVmYXVsdHMgdG8KKzIwMDcuCisKKyRleHBvcnRfb2s6OgorCVNob3cgcmVwb3NpdG9yeSBvbmx5IGlmIHRoaXMgZmlsZSBleGlzdHMgKGluIHJlcG9zaXRvcnkpLiAgT25seQorCWVmZmVjdGl2ZSBpZiB0aGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0cnVlLiAgQ2FuIGJlIHNldCB3aGVuCisJYnVpbGRpbmcgZ2l0d2ViIGJ5IHNldHRpbmcgYEdJVFdFQl9FWFBPUlRfT0tgLiAgVGhpcyBwYXRoIGlzCisJcmVsYXRpdmUgdG8gYEdJVF9ESVJgLiAgZ2l0LWRhZW1vblsxXSB1c2VzICdnaXQtZGFlbW9uLWV4cG9ydC1vaycsCisJdW5sZXNzIHN0YXJ0ZWQgd2l0aCBgLS1leHBvcnQtYWxsYC4gIEJ5IGRlZmF1bHQgdGhpcyB2YXJpYWJsZSBpcworCW5vdCBzZXQsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyBmZWF0dXJlIGlzIHR1cm5lZCBvZmYuCisKKyRleHBvcnRfYXV0aF9ob29rOjoKKwlGdW5jdGlvbiB1c2VkIHRvIGRldGVybWluZSB3aGljaCByZXBvc2l0b3JpZXMgc2hvdWxkIGJlIHNob3duLgorCVRoaXMgc3Vicm91dGluZSBzaG91bGQgdGFrZSBvbmUgcGFyYW1ldGVyLCB0aGUgZnVsbCBwYXRoIHRvCisJYSBwcm9qZWN0LCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0aGF0IHByb2plY3Qgd2lsbCBiZSBpbmNsdWRlZAorCWluIHRoZSBwcm9qZWN0cyBsaXN0IGFuZCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBnaXR3ZWIgYXMgbG9uZworCWFzIGl0IGZ1bGZpbGxzIHRoZSBvdGhlciByZXF1aXJlbWVudHMgZGVzY3JpYmVkIGJ5ICRleHBvcnRfb2ssCisJJHByb2plY3RzX2xpc3QsIGFuZCAkcHJvamVjdHNfbWF4ZGVwdGguICBFeGFtcGxlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICRleHBvcnRfYXV0aF9ob29rID0gc3ViIHsgcmV0dXJuIC1lICIkX1swXS9naXQtZGFlbW9uLWV4cG9ydC1vayI7IH07CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCit0aG91Z2ggdGhlIGFib3ZlIG1pZ2h0IGJlIGRvbmUgYnkgdXNpbmcgYCRleHBvcnRfb2tgIGluc3RlYWQKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkZXhwb3J0X29rID0gImdpdC1kYWVtb24tZXhwb3J0LW9rIjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0lmIG5vdCBzZXQgKGRlZmF1bHQpLCBpdCBtZWFucyB0aGF0IHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKysKK1NlZSBhbHNvIG1vcmUgaW52b2x2ZWQgZXhhbXBsZSBpbiAiQ29udHJvbGxpbmcgYWNjZXNzIHRvIEdpdCByZXBvc2l0b3JpZXMiCitzdWJzZWN0aW9uIG9uIGxpbmtnaXQ6Z2l0d2ViWzFdIG1hbnBhZ2UuCisKKyRzdHJpY3RfZXhwb3J0OjoKKwlPbmx5IGFsbG93IHZpZXdpbmcgb2YgcmVwb3NpdG9yaWVzIGFsc28gc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UuCisJVGhpcyBmb3IgZXhhbXBsZSBtYWtlcyBgJGV4cG9ydF9va2AgZmlsZSBkZWNpZGUgaWYgcmVwb3NpdG9yeSBpcworCWF2YWlsYWJsZSBhbmQgbm90IG9ubHkgaWYgaXQgaXMgc2hvd24uICBJZiBgJHByb2plY3RzX2xpc3RgIHBvaW50cyB0bworCWZpbGUgd2l0aCBsaXN0IG9mIHByb2plY3QsIG9ubHkgdGhvc2UgcmVwb3NpdG9yaWVzIGxpc3RlZCB3b3VsZCBiZQorCWF2YWlsYWJsZSBmb3IgZ2l0d2ViLiAgQ2FuIGJlIHNldCBkdXJpbmcgYnVpbGRpbmcgZ2l0d2ViIHZpYQorCWBHSVRXRUJfU1RSSUNUX0VYUE9SVGAuICBCeSBkZWZhdWx0IHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCwgd2hpY2gKKwltZWFucyB0aGF0IHlvdSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRob3NlIHJlcG9zaXRvcmllcyB0aGF0IGFyZSBoaWRkZW4KKwlmcm9tIHByb2plY3RzIGxpc3QgcGFnZSAoZS5nLiB0aGUgYXJlIG5vdCBsaXN0ZWQgaW4gdGhlICRwcm9qZWN0c19saXN0CisJZmlsZSkuCisKKworRmluZGluZyBmaWxlcworfn5+fn5+fn5+fn5+fgorVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0ZWxsIGdpdHdlYiB3aGVyZSB0byBmaW5kIGZpbGVzLgorVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgYXJlIHBhdGhzIG9uIHRoZSBmaWxlc3lzdGVtLgorCiskR0lUOjoKKwlDb3JlIGdpdCBleGVjdXRhYmxlIHRvIHVzZS4gIEJ5IGRlZmF1bHQgc2V0IHRvIGAkR0lUX0JJTkRJUi9naXRgLCB3aGljaAorCWluIHR1cm4gaXMgYnkgZGVmYXVsdCBzZXQgdG8gYCQoYmluZGlyKS9naXRgLiAgSWYgeW91IHVzZSBHaXQgaW5zdGFsbGVkCisJZnJvbSBhIGJpbmFyeSBwYWNrYWdlLCB5b3Ugc2hvdWxkIHVzdWFsbHkgc2V0IHRoaXMgdG8gIi91c3IvYmluL2dpdCIuCisJVGhpcyBjYW4ganVzdCBiZSAiZ2l0IiBpZiB5b3VyIHdlYiBzZXJ2ZXIgaGFzIGEgc2Vuc2libGUgUEFUSDsgZnJvbQorCXNlY3VyaXR5IHBvaW50IG9mIHZpZXcgaXQgaXMgYmV0dGVyIHRvIHVzZSBhYnNvbHV0ZSBwYXRoIHRvIGdpdCBiaW5hcnkuCisJSWYgeW91IGhhdmUgbXVsdGlwbGUgR2l0IHZlcnNpb25zIGluc3RhbGxlZCBpdCBjYW4gYmUgdXNlZCB0byBjaG9vc2UKKwl3aGljaCBvbmUgdG8gdXNlLiAgTXVzdCBiZSAoY29ycmVjdGx5KSBzZXQgZm9yIGdpdHdlYiB0byBiZSBhYmxlIHRvCisJd29yay4KKworJG1pbWV0eXBlc19maWxlOjoKKwlGaWxlIHRvIHVzZSBmb3IgKGZpbGVuYW1lIGV4dGVuc2lvbiBiYXNlZCkgZ3Vlc3Npbmcgb2YgTUlNRSB0eXBlcyBiZWZvcmUKKwl0cnlpbmcgYC9ldGMvbWltZS50eXBlc2AuICAqTk9URSogdGhhdCB0aGlzIHBhdGgsIGlmIHJlbGF0aXZlLCBpcyB0YWtlbgorCWFzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IEdpdCByZXBvc2l0b3J5LCBub3QgdG8gQ0dJIHNjcmlwdC4gIElmIHVuc2V0LAorCW9ubHkgYC9ldGMvbWltZS50eXBlc2AgaXMgdXNlZCAoaWYgcHJlc2VudCBvbiBmaWxlc3lzdGVtKS4gIElmIG5vIG1pbWV0eXBlcworCWZpbGUgaXMgZm91bmQsIG1pbWV0eXBlIGd1ZXNzaW5nIGJhc2VkIG9uIGV4dGVuc2lvbiBvZiBmaWxlIGlzIGRpc2FibGVkLgorCVVuc2V0IGJ5IGRlZmF1bHQuCisKKyRoaWdobGlnaHRfYmluOjoKKwlQYXRoIHRvIHRoZSBoaWdobGlnaHQgZXhlY3V0YWJsZSB0byB1c2UgKGl0IG11c3QgYmUgdGhlIG9uZSBmcm9tCisJaHR0cDovL3d3dy5hbmRyZS1zaW1vbi5kZVtdIGR1ZSB0byBhc3N1bXB0aW9ucyBhYm91dCBwYXJhbWV0ZXJzIGFuZCBvdXRwdXQpLgorCUJ5IGRlZmF1bHQgc2V0IHRvICdoaWdobGlnaHQnOyBzZXQgaXQgdG8gZnVsbCBwYXRoIHRvIGhpZ2hsaWdodAorCWV4ZWN1dGFibGUgaWYgaXQgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHdlYiBzZXJ2ZXIncyBQQVRILgorCU5vdGUgdGhhdCAnaGlnaGxpZ2h0JyBmZWF0dXJlIG11c3QgYmUgc2V0IGZvciBnaXR3ZWIgdG8gYWN0dWFsbHkKKwl1c2Ugc3ludGF4IGhpZ2hsaWdodGluZy4KKysKKypOT1RFKjogZm9yIGEgZmlsZSB0byBiZSBoaWdobGlnaHRlZCwgaXRzIHN5bnRheCB0eXBlIG11c3QgYmUgZGV0ZWN0ZWQKK2FuZCB0aGF0IHN5bnRheCBtdXN0IGJlIHN1cHBvcnRlZCBieSAiaGlnaGxpZ2h0Ii4gIFRoZSBkZWZhdWx0IHN5bnRheAorZGV0ZWN0aW9uIGlzIG1pbmltYWwsIGFuZCB0aGVyZSBhcmUgbWFueSBzdXBwb3J0ZWQgc3ludGF4IHR5cGVzIHdpdGggbm8KK2RldGVjdGlvbiBieSBkZWZhdWx0LiAgVGhlcmUgYXJlIHRocmVlIG9wdGlvbnMgZm9yIGFkZGluZyBzeW50YXgKK2RldGVjdGlvbi4gIFRoZSBmaXJzdCBhbmQgc2Vjb25kIHByaW9yaXR5IGFyZSBgJWhpZ2hsaWdodF9iYXNlbmFtZWAgYW5kCitgJWhpZ2hsaWdodF9leHRgLCB3aGljaCBkZXRlY3QgYmFzZWQgb24gYmFzZW5hbWUgKHRoZSBmdWxsIGZpbGVuYW1lLCBmb3IKK2V4YW1wbGUgIk1ha2VmaWxlIikgYW5kIGV4dGVuc2lvbiAoZm9yIGV4YW1wbGUgInNoIikuICBUaGUga2V5cyBvZiB0aGVzZQoraGFzaGVzIGFyZSB0aGUgYmFzZW5hbWUgYW5kIGV4dGVuc2lvbiwgcmVzcGVjdGl2ZWx5LCBhbmQgdGhlIHZhbHVlIGZvciBhCitnaXZlbiBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIHN5bnRheCB0byBiZSBwYXNzZWQgdmlhIGAtLXN5bnRheCA8c3ludGF4PmAKK3RvICJoaWdobGlnaHQiLiAgVGhlIGxhc3QgcHJpb3JpdHkgaXMgdGhlICJoaWdobGlnaHQiIGNvbmZpZ3VyYXRpb24gb2YKK2BTaGViYW5nYCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGRldGVjdCB0aGUgbGFuZ3VhZ2UgYmFzZWQgb24gdGhlIGZpcnN0CitsaW5lIGluIHRoZSBmaWxlLCAoZm9yIGV4YW1wbGUsIG1hdGNoaW5nIHRoZSBsaW5lICIjIS9iaW4vYmFzaCIpLiAgU2VlCit0aGUgaGlnaGxpZ2h0IGRvY3VtZW50YXRpb24gYW5kIHRoZSBkZWZhdWx0IGNvbmZpZyBhdAorL2V0Yy9oaWdobGlnaHQvZmlsZXR5cGVzLmNvbmYgZm9yIG1vcmUgZGV0YWlscy4KKysKK0ZvciBleGFtcGxlIGlmIHJlcG9zaXRvcmllcyB5b3UgYXJlIGhvc3RpbmcgdXNlICJwaHRtbCIgZXh0ZW5zaW9uIGZvcgorUEhQIGZpbGVzLCBhbmQgeW91IHdhbnQgdG8gaGF2ZSBjb3JyZWN0IHN5bnRheC1oaWdobGlnaHRpbmcgZm9yIHRob3NlCitmaWxlcywgeW91IGNhbiBhZGQgdGhlIGZvbGxvd2luZyB0byBnaXR3ZWIgY29uZmlndXJhdGlvbjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICVoaWdobGlnaHRfZXh0OworJGhpZ2hsaWdodF9leHR7J3BodG1sJ30gPSAncGhwJzsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0xpbmtzIGFuZCB0aGVpciB0YXJnZXRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGRlc2NyaWJlZCBiZWxvdyBjb25maWd1cmUgc29tZSBvZiBnaXR3ZWIgbGlua3M6Cit0aGVpciB0YXJnZXQgYW5kIHRoZWlyIGxvb2sgKHRleHQgb3IgaW1hZ2UpLCBhbmQgd2hlcmUgdG8gZmluZCBwYWdlCitwcmVyZXF1aXNpdGVzIChzdHlsZXNoZWV0LCBmYXZpY29uLCBpbWFnZXMsIHNjcmlwdHMpLiAgVXN1YWxseSB0aGV5IGFyZSBsZWZ0CithdCB0aGVpciBkZWZhdWx0IHZhbHVlcywgd2l0aCB0aGUgcG9zc2libGUgZXhjZXB0aW9uIG9mIGBAc3R5bGVzaGVldHNgCit2YXJpYWJsZS4KKworQHN0eWxlc2hlZXRzOjoKKwlMaXN0IG9mIFVSSXMgb2Ygc3R5bGVzaGVldHMgKHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSSSBvZiBhIHBhZ2UpLiBZb3UKKwltaWdodCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgc3R5bGVzaGVldCwgZm9yIGV4YW1wbGUgdG8gdXNlICJnaXR3ZWIuY3NzIgorCWFzIGJhc2Ugd2l0aCBzaXRlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgaW4gYSBzZXBhcmF0ZSBzdHlsZXNoZWV0CisJdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXBncmFkZSBnaXR3ZWIuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQKKwlhIGBzaXRlYCBzdHlsZXNoZWV0IGJ5IHB1dHRpbmcKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3B1c2ggQHN0eWxlc2hlZXRzLCAiZ2l0d2ViLXNpdGUuY3NzIjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK2luIHRoZSBnaXR3ZWIgY29uZmlnIGZpbGUuICBUaG9zZSB2YWx1ZXMgdGhhdCBhcmUgcmVsYXRpdmUgcGF0aHMgYXJlCityZWxhdGl2ZSB0byBiYXNlIFVSSSBvZiBnaXR3ZWIuCisrCitUaGlzIGxpc3Qgc2hvdWxkIGNvbnRhaW4gdGhlIFVSSSBvZiBnaXR3ZWIncyBzdGFuZGFyZCBzdHlsZXNoZWV0LiAgVGhlIGRlZmF1bHQKK1VSSSBvZiBnaXR3ZWIgc3R5bGVzaGVldCBjYW4gYmUgc2V0IGF0IGJ1aWxkIHRpbWUgdXNpbmcgdGhlIGBHSVRXRUJfQ1NTYAorbWFrZWZpbGUgdmFyaWFibGUuICBJdHMgZGVmYXVsdCB2YWx1ZSBpcyBgc3RhdGljL2dpdHdlYi5jc3NgCisob3IgYHN0YXRpYy9naXR3ZWIubWluLmNzc2AgaWYgdGhlIGBDU1NNSU5gIHZhcmlhYmxlIGlzIGRlZmluZWQsCitpLmUuIGlmIENTUyBtaW5pZmllciBpcyB1c2VkIGR1cmluZyBidWlsZCkuCisrCisqTm90ZSo6IHRoZXJlIGlzIGFsc28gYSBsZWdhY3kgYCRzdHlsZXNoZWV0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3aGljaCB3YXMKK3VzZWQgYnkgb2xkZXIgZ2l0d2ViLiAgSWYgYCRzdHlsZXNoZWV0YCB2YXJpYWJsZSBpcyBkZWZpbmVkLCBvbmx5IENTUyBzdHlsZXNoZWV0CitnaXZlbiBieSB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgZ2l0d2ViLgorCiskbG9nbzo6CisJUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0ICdnaXQtbG9nby5wbmcnIG9uIHlvdXIgd2ViCisJc2VydmVyLCBvciB0byBiZSBtb3JlIHRoZSBnZW5lcmljIFVSSSBvZiBsb2dvLCA3MngyNyBzaXplKS4gIFRoaXMgaW1hZ2UKKwlpcyBkaXNwbGF5ZWQgaW4gdGhlIHRvcCByaWdodCBjb3JuZXIgb2YgZWFjaCBnaXR3ZWIgcGFnZSBhbmQgdXNlZCBhcworCWEgbG9nbyBmb3IgdGhlIEF0b20gZmVlZC4gIFJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSSSBvZiBnaXR3ZWIgKGFzIGEgcGF0aCkuCisJQ2FuIGJlIGFkanVzdGVkIHdoZW4gYnVpbGRpbmcgZ2l0d2ViIHVzaW5nIGBHSVRXRUJfTE9HT2AgdmFyaWFibGUKKwlCeSBkZWZhdWx0IHNldCB0byBgc3RhdGljL2dpdC1sb2dvLnBuZ2AuCisKKyRmYXZpY29uOjoKKwlQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgJ2dpdC1mYXZpY29uLnBuZycgb24geW91ciB3ZWIKKwlzZXJ2ZXIsIG9yIHRvIGJlIG1vcmUgdGhlIGdlbmVyaWMgVVJJIG9mIGZhdmljb24sIHdoaWNoIHdpbGwgYmUgc2VydmVkCisJYXMgImltYWdlL3BuZyIgdHlwZS4gIFdlYiBicm93c2VycyB0aGF0IHN1cHBvcnQgZmF2aWNvbnMgKHdlYnNpdGUgaWNvbnMpCisJbWF5IGRpc3BsYXkgdGhlbSBpbiB0aGUgYnJvd3NlcidzIFVSTCBiYXIgYW5kIG5leHQgdG8gdGhlIHNpdGUgbmFtZSBpbgorCWJvb2ttYXJrcy4gIFJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSSSBvZiBnaXR3ZWIuICBDYW4gYmUgYWRqdXN0ZWQgYXQKKwlidWlsZCB0aW1lIHVzaW5nIGBHSVRXRUJfRkFWSUNPTmAgdmFyaWFibGUuCisJQnkgZGVmYXVsdCBzZXQgdG8gYHN0YXRpYy9naXQtZmF2aWNvbi5wbmdgLgorCiskamF2YXNjcmlwdDo6CisJUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0ICdnaXR3ZWIuanMnIG9uIHlvdXIgd2ViIHNlcnZlciwKKwlvciB0byBiZSBtb3JlIGdlbmVyaWMgdGhlIFVSSSBvZiBKYXZhU2NyaXB0IGNvZGUgdXNlZCBieSBnaXR3ZWIuCisJUmVsYXRpdmUgdG8gdGhlIGJhc2UgVVJJIG9mIGdpdHdlYi4gIENhbiBiZSBzZXQgYXQgYnVpbGQgdGltZSB1c2luZworCXRoZSBgR0lUV0VCX0pTYCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisrCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlaXRoZXIgYHN0YXRpYy9naXR3ZWIuanNgLCBvciBgc3RhdGljL2dpdHdlYi5taW4uanNgIGlmCit0aGUgYEpTTUlOYCBidWlsZCB2YXJpYWJsZSB3YXMgZGVmaW5lZCwgaS5lLiBpZiBKYXZhU2NyaXB0IG1pbmlmaWVyIHdhcyB1c2VkCithdCBidWlsZCB0aW1lLiAgKk5vdGUqIHRoYXQgdGhpcyBzaW5nbGUgZmlsZSBpcyBnZW5lcmF0ZWQgZnJvbSBtdWx0aXBsZQoraW5kaXZpZHVhbCBKYXZhU2NyaXB0ICJtb2R1bGVzIi4KKworJGhvbWVfbGluazo6CisJVGFyZ2V0IG9mIHRoZSBob21lIGxpbmsgb24gdGhlIHRvcCBvZiBhbGwgcGFnZXMgKHRoZSBmaXJzdCBwYXJ0IG9mIHZpZXcKKwkiYnJlYWRjcnVtYnMiKS4gIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIHRoZSBhYnNvbHV0ZSBVUkkgb2YgYSBjdXJyZW50IHBhZ2UKKwkodG8gdGhlIHZhbHVlIG9mIGAkbXlfdXJpYCB2YXJpYWJsZSwgb3IgdG8gIi8iIGlmIGAkbXlfdXJpYCBpcyB1bmRlZmluZWQKKwlvciBpcyBhbiBlbXB0eSBzdHJpbmcpLgorCiskaG9tZV9saW5rX3N0cjo6CisJTGFiZWwgZm9yIHRoZSAiaG9tZSBsaW5rIiBhdCB0aGUgdG9wIG9mIGFsbCBwYWdlcywgbGVhZGluZyB0byBgJGhvbWVfbGlua2AKKwkodXN1YWxseSB0aGUgbWFpbiBnaXR3ZWIgcGFnZSwgd2hpY2ggY29udGFpbnMgdGhlIHByb2plY3RzIGxpc3QpLiAgSXQgaXMKKwl1c2VkIGFzIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgZ2l0d2ViJ3MgImJyZWFkY3J1bWIgdHJhaWwiOgorCWA8aG9tZSBsaW5rPiAvIDxwcm9qZWN0PiAvIDxhY3Rpb24+YC4gIENhbiBiZSBzZXQgYXQgYnVpbGQgdGltZSB1c2luZworCXRoZSBgR0lUV0VCX0hPTUVfTElOS19TVFJgIHZhcmlhYmxlLiAgQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gInByb2plY3RzIiwKKwlhcyB0aGlzIGxpbmsgbGVhZHMgdG8gdGhlIGxpc3Qgb2YgcHJvamVjdHMuICBBbm90aGVyIHBvcHVsYXIgY2hvaWNlIGlzIHRvCisJc2V0IGl0IHRvIHRoZSBuYW1lIG9mIHNpdGUuICBOb3RlIHRoYXQgaXQgaXMgdHJlYXRlZCBhcyByYXcgSFRNTCBzbyBpdAorCXNob3VsZCBub3QgYmUgc2V0IGZyb20gdW50cnVzdGVkIHNvdXJjZXMuCisKK0BleHRyYV9icmVhZGNydW1iczo6CisJQWRkaXRpb25hbCBsaW5rcyB0byBiZSBhZGRlZCB0byB0aGUgc3RhcnQgb2YgdGhlIGJyZWFkY3J1bWIgdHJhaWwgYmVmb3JlCisJdGhlIGhvbWUgbGluaywgdG8gcGFnZXMgdGhhdCBhcmUgbG9naWNhbGx5ICJhYm92ZSIgdGhlIGdpdHdlYiBwcm9qZWN0cworCWxpc3QsIHN1Y2ggYXMgdGhlIG9yZ2FuaXphdGlvbiBhbmQgZGVwYXJ0bWVudCB3aGljaCBob3N0IHRoZSBnaXR3ZWIKKwlzZXJ2ZXIuIEVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCBpcyBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSwgaW4gd2hpY2gKKwllbGVtZW50IDAgaXMgdGhlIGxpbmsgdGV4dCAoZXF1aXZhbGVudCB0byBgJGhvbWVfbGlua19zdHJgKSBhbmQgZWxlbWVudAorCTEgaXMgdGhlIHRhcmdldCBVUkwgKGVxdWl2YWxlbnQgdG8gYCRob21lX2xpbmtgKS4KKysKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgcHJvZHVjZXMgYSBicmVhZGNydW1iIHRyYWlsIGxpa2UKKyJob21lIC8gZGV2IC8gcHJvamVjdHMgLyAuLi4iIHdoZXJlICJwcm9qZWN0cyIgaXMgdGhlIGhvbWUgbGluay4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBvdXIgQGV4dHJhX2JyZWFkY3J1bWJzID0gKAorICAgICAgWyAnaG9tZScgPT4gJ2h0dHBzOi8vd3d3LmV4YW1wbGUub3JnLycgXSwKKyAgICAgIFsgJ2RldicgID0+ICdodHRwczovL2Rldi5leGFtcGxlLm9yZy8nIF0sCisgICAgKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJGxvZ29fdXJsOjoKKyRsb2dvX2xhYmVsOjoKKwlVUkkgYW5kIGxhYmVsICh0aXRsZSkgZm9yIHRoZSBHaXQgbG9nbyBsaW5rIChvciB5b3VyIHNpdGUgbG9nbywKKwlpZiB5b3UgY2hvc2UgdG8gdXNlIGRpZmZlcmVudCBsb2dvIGltYWdlKS4gQnkgZGVmYXVsdCwgdGhlc2UgYm90aAorCXJlZmVyIHRvIEdpdCBob21lcGFnZSwgaHR0cHM6Ly9naXQtc2NtLmNvbVtdOyBpbiB0aGUgcGFzdCwgdGhleSBwb2ludGVkCisJdG8gR2l0IGRvY3VtZW50YXRpb24gYXQgaHR0cHM6Ly93d3cua2VybmVsLm9yZ1tdLgorCisKK0NoYW5naW5nIGdpdHdlYidzIGxvb2sKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gYWRqdXN0IGhvdyBwYWdlcyBnZW5lcmF0ZWQgYnkgZ2l0d2ViIGxvb2sgdXNpbmcgdGhlIHZhcmlhYmxlcyBkZXNjcmliZWQKK2JlbG93LiAgWW91IGNhbiBjaGFuZ2UgdGhlIHNpdGUgbmFtZSwgYWRkIGNvbW1vbiBoZWFkZXJzIGFuZCBmb290ZXJzIGZvciBhbGwKK3BhZ2VzLCBhbmQgYWRkIGEgZGVzY3JpcHRpb24gb2YgdGhpcyBnaXR3ZWIgaW5zdGFsbGF0aW9uIG9uIGl0cyBtYWluIHBhZ2UKKyh3aGljaCBpcyB0aGUgcHJvamVjdHMgbGlzdCBwYWdlKSwgZXRjLgorCiskc2l0ZV9uYW1lOjoKKwlOYW1lIG9mIHlvdXIgc2l0ZSBvciBvcmdhbml6YXRpb24sIHRvIGFwcGVhciBpbiBwYWdlIHRpdGxlcy4gIFNldCBpdAorCXRvIHNvbWV0aGluZyBkZXNjcmlwdGl2ZSBmb3IgY2xlYXJlciBib29rbWFya3MgZXRjLiAgSWYgdGhpcyB2YXJpYWJsZQorCWlzIG5vdCBzZXQgb3IgaXMsIHRoZW4gZ2l0d2ViIHVzZXMgdGhlIHZhbHVlIG9mIHRoZSBgU0VSVkVSX05BTUVgCisJYENHSWAgZW52aXJvbm1lbnQgdmFyaWFibGUsIHNldHRpbmcgc2l0ZSBuYW1lIHRvICIkU0VSVkVSX05BTUUgR2l0IiwKKwlvciAiVW50aXRsZWQgR2l0IiBpZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzZXQgKGUuZy4gaWYgcnVubmluZyBnaXR3ZWIKKwlhcyBzdGFuZGFsb25lIHNjcmlwdCkuCisrCitDYW4gYmUgc2V0IHVzaW5nIHRoZSBgR0lUV0VCX1NJVEVOQU1FYCBhdCBidWlsZCB0aW1lLiAgVW5zZXQgYnkgZGVmYXVsdC4KKworJHNpdGVfaHRtbF9oZWFkX3N0cmluZzo6CisJSFRNTCBzbmlwcGV0IHRvIGJlIGluY2x1ZGVkIGluIHRoZSA8aGVhZD4gc2VjdGlvbiBvZiBlYWNoIHBhZ2UuCisJQ2FuIGJlIHNldCB1c2luZyBgR0lUV0VCX1NJVEVfSFRNTF9IRUFEX1NUUklOR2AgYXQgYnVpbGQgdGltZS4KKwlObyBkZWZhdWx0IHZhbHVlLgorCiskc2l0ZV9oZWFkZXI6OgorCU5hbWUgb2YgYSBmaWxlIHdpdGggSFRNTCB0byBiZSBpbmNsdWRlZCBhdCB0aGUgdG9wIG9mIGVhY2ggcGFnZS4KKwlSZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlICdnaXR3ZWIuY2dpJyBzY3JpcHQuCisJQ2FuIGJlIHNldCB1c2luZyBgR0lUV0VCX1NJVEVfSEVBREVSYCBhdCBidWlsZCB0aW1lLiAgTm8gZGVmYXVsdAorCXZhbHVlLgorCiskc2l0ZV9mb290ZXI6OgorCU5hbWUgb2YgYSBmaWxlIHdpdGggSFRNTCB0byBiZSBpbmNsdWRlZCBhdCB0aGUgYm90dG9tIG9mIGVhY2ggcGFnZS4KKwlSZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlICdnaXR3ZWIuY2dpJyBzY3JpcHQuCisJQ2FuIGJlIHNldCB1c2luZyBgR0lUV0VCX1NJVEVfRk9PVEVSYCBhdCBidWlsZCB0aW1lLiAgTm8gZGVmYXVsdAorCXZhbHVlLgorCiskaG9tZV90ZXh0OjoKKwlOYW1lIG9mIGEgSFRNTCBmaWxlIHdoaWNoLCBpZiBpdCBleGlzdHMsIGlzIGluY2x1ZGVkIG9uIHRoZQorCWdpdHdlYiBwcm9qZWN0cyBvdmVydmlldyBwYWdlICgicHJvamVjdHNfbGlzdCIgdmlldykuICBSZWxhdGl2ZSB0bworCXRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZ2l0d2ViLmNnaSBzY3JpcHQuICBEZWZhdWx0IHZhbHVlCisJY2FuIGJlIGFkanVzdGVkIGR1cmluZyBidWlsZCB0aW1lIHVzaW5nIGBHSVRXRUJfSE9NRVRFWFRgIHZhcmlhYmxlLgorCUJ5IGRlZmF1bHQgc2V0IHRvICdpbmRleHRleHQuaHRtbCcuCisKKyRwcm9qZWN0c19saXN0X2Rlc2NyaXB0aW9uX3dpZHRoOjoKKwlUaGUgd2lkdGggKGluIGNoYXJhY3RlcnMpIG9mIHRoZSAiRGVzY3JpcHRpb24iIGNvbHVtbiBvZiB0aGUgcHJvamVjdHMgbGlzdC4KKwlMb25nZXIgZGVzY3JpcHRpb25zIHdpbGwgYmUgdHJ1bmNhdGVkICh0cnlpbmcgdG8gY3V0IGF0IHdvcmQgYm91bmRhcnkpOworCXRoZSBmdWxsIGRlc2NyaXB0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgJ3RpdGxlJyBhdHRyaWJ1dGUgKHVzdWFsbHkgc2hvd24gb24KKwltb3VzZW92ZXIpLiAgVGhlIGRlZmF1bHQgaXMgMjUsIHdoaWNoIG1pZ2h0IGJlIHRvbyBzbWFsbCBpZiB5b3UKKwl1c2UgbG9uZyBwcm9qZWN0IGRlc2NyaXB0aW9ucy4KKworJGRlZmF1bHRfcHJvamVjdHNfb3JkZXI6OgorCURlZmF1bHQgdmFsdWUgb2Ygb3JkZXJpbmcgb2YgcHJvamVjdHMgb24gcHJvamVjdHMgbGlzdCBwYWdlLCB3aGljaAorCW1lYW5zIHRoZSBvcmRlcmluZyB1c2VkIGlmIHlvdSBkb24ndCBleHBsaWNpdGx5IHNvcnQgcHJvamVjdHMgbGlzdAorCShpZiB0aGVyZSBpcyBubyAibyIgQ0dJIHF1ZXJ5IHBhcmFtZXRlciBpbiB0aGUgVVJMKS4gIFZhbGlkIHZhbHVlcworCWFyZSAibm9uZSIgKHVuc29ydGVkKSwgInByb2plY3QiIChwcm9qZWN0cyBhcmUgYnkgcHJvamVjdCBuYW1lLAorCWkuZS4gcGF0aCB0byByZXBvc2l0b3J5IHJlbGF0aXZlIHRvIGAkcHJvamVjdHJvb3RgKSwgImRlc2NyIgorCShwcm9qZWN0IGRlc2NyaXB0aW9uKSwgIm93bmVyIiwgYW5kICJhZ2UiIChieSBkYXRlIG9mIG1vc3QgY3VycmVudAorCWNvbW1pdCkuCisrCitEZWZhdWx0IHZhbHVlIGlzICJwcm9qZWN0Ii4gIFVua25vd24gdmFsdWUgbWVhbnMgdW5zb3J0ZWQuCisKKworQ2hhbmdpbmcgZ2l0d2ViJ3MgYmVoYXZpb3IKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBjb250cm9sIF9pbnRlcm5hbF8gZ2l0d2ViIGJlaGF2aW9yLgorCiskZGVmYXVsdF9ibG9iX3BsYWluX21pbWV0eXBlOjoKKwlEZWZhdWx0IG1pbWV0eXBlIGZvciB0aGUgYmxvYl9wbGFpbiAocmF3KSB2aWV3LCBpZiBtaW1ldHlwZSBjaGVja2luZworCWRvZXNuJ3QgcmVzdWx0IGluIHNvbWUgb3RoZXIgdHlwZTsgYnkgZGVmYXVsdCAidGV4dC9wbGFpbiIuCisJR2l0d2ViIGd1ZXNzZXMgbWltZXR5cGUgb2YgYSBmaWxlIHRvIGRpc3BsYXkgYmFzZWQgb24gZXh0ZW5zaW9uCisJb2YgaXRzIGZpbGVuYW1lLCB1c2luZyBgJG1pbWV0eXBlc19maWxlYCAoaWYgc2V0IGFuZCBmaWxlIGV4aXN0cykKKwlhbmQgYC9ldGMvbWltZS50eXBlc2AgZmlsZXMgKHNlZSAqbWltZS50eXBlcyooNSkgbWFucGFnZTsgb25seQorCWZpbGVuYW1lIGV4dGVuc2lvbiBydWxlcyBhcmUgc3VwcG9ydGVkIGJ5IGdpdHdlYikuCisKKyRkZWZhdWx0X3RleHRfcGxhaW5fY2hhcnNldDo6CisJRGVmYXVsdCBjaGFyc2V0IGZvciB0ZXh0IGZpbGVzLiBJZiB0aGlzIGlzIG5vdCBzZXQsIHRoZSB3ZWIgc2VydmVyCisJY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQuICBVbnNldCBieSBkZWZhdWx0LgorCiskZmFsbGJhY2tfZW5jb2Rpbmc6OgorCUdpdHdlYiBhc3N1bWVzIHRoaXMgY2hhcnNldCB3aGVuIGEgbGluZSBjb250YWlucyBub24tVVRGLTggY2hhcmFjdGVycy4KKwlUaGUgZmFsbGJhY2sgZGVjb2RpbmcgaXMgdXNlZCB3aXRob3V0IGVycm9yIGNoZWNraW5nLCBzbyBpdCBjYW4gYmUgZXZlbgorCSJ1dGYtOCIuIFRoZSB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZW5jb2Rpbmc7IHNlZSB0aGUgKkVuY29kaW5nOjpTdXBwb3J0ZWQqKDNwbSkKKwltYW4gcGFnZSBmb3IgYSBsaXN0LiBUaGUgZGVmYXVsdCBpcyAibGF0aW4xIiwgYWthLiAiaXNvLTg4NTktMSIuCisKK0BkaWZmX29wdHM6OgorCVJlbmFtZSBkZXRlY3Rpb24gb3B0aW9ucyBmb3IgZ2l0LWRpZmYgYW5kIGdpdC1kaWZmLXRyZWUuIFRoZSBkZWZhdWx0IGlzCisJKFwnLU0nKTsgc2V0IGl0IHRvIChcJy1DJykgb3IgKFwnLUMnLCBcJy1DJykgdG8gYWxzbyBkZXRlY3QgY29waWVzLAorCW9yIHNldCBpdCB0byAoKSBpLmUuIGVtcHR5IGxpc3QgaWYgeW91IGRvbid0IHdhbnQgdG8gaGF2ZSByZW5hbWVzCisJZGV0ZWN0aW9uLgorKworKk5vdGUqIHRoYXQgcmVuYW1lIGFuZCBlc3BlY2lhbGx5IGNvcHkgZGV0ZWN0aW9uIGNhbiBiZSBxdWl0ZQorQ1BVLWludGVuc2l2ZS4gIE5vdGUgYWxzbyB0aGF0IG5vbiBHaXQgdG9vbHMgY2FuIGhhdmUgcHJvYmxlbXMgd2l0aAorcGF0Y2hlcyBnZW5lcmF0ZWQgd2l0aCBvcHRpb25zIG1lbnRpb25lZCBhYm92ZSwgZXNwZWNpYWxseSB3aGVuIHRoZXkKK2ludm9sdmUgZmlsZSBjb3BpZXMgKFwnLUMnKSBvciBjcmlzcy1jcm9zcyByZW5hbWVzIChcJy1CJykuCisKKworU29tZSBvcHRpb25hbCBmZWF0dXJlcyBhbmQgcG9saWNpZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNb3N0IG9mIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkIHZpYSBgJWZlYXR1cmVgIGhhc2g7IGhvd2V2ZXIgc29tZSBvZiBleHRyYQorZ2l0d2ViIGZlYXR1cmVzIGNhbiBiZSB0dXJuZWQgb24gYW5kIGNvbmZpZ3VyZWQgdXNpbmcgdmFyaWFibGVzIGRlc2NyaWJlZAorYmVsb3cuICBUaGlzIGxpc3QgYmVzaWRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgY29udHJvbCBob3cgZ2l0d2ViCitsb29rcyBkb2VzIGNvbnRhaW4gdmFyaWFibGVzIGNvbmZpZ3VyaW5nIGFkbWluaXN0cmF0aXZlIHNpZGUgb2YgZ2l0d2ViCisoZS5nLiBjcm9zcy1zaXRlIHNjcmlwdGluZyBwcmV2ZW50aW9uOyBhZG1pdHRlZGx5IHRoaXMgYXMgc2lkZSBlZmZlY3QKK2FmZmVjdHMgaG93ICJzdW1tYXJ5IiBwYWdlcyBsb29rIGxpa2UsIG9yIGxvYWQgbGltaXRpbmcpLgorCitAZ2l0X2Jhc2VfdXJsX2xpc3Q6OgorCUxpc3Qgb2YgR2l0IGJhc2UgVVJMcy4gIFRoZXNlIFVSTHMgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgVVJMcworCWRlc2NyaWJpbmcgZnJvbSB3aGVyZSB0byBmZXRjaCBhIHByb2plY3QsIHdoaWNoIGFyZSBzaG93biBvbgorCXByb2plY3Qgc3VtbWFyeSBwYWdlLiAgVGhlIGZ1bGwgZmV0Y2ggVVJMIGlzICJgJGdpdF9iYXNlX3VybC8kcHJvamVjdGAiLAorCWZvciBlYWNoIGVsZW1lbnQgb2YgdGhpcyBsaXN0LiBZb3UgY2FuIHNldCB1cCBtdWx0aXBsZSBiYXNlIFVSTHMKKwkoZm9yIGV4YW1wbGUgb25lIGZvciBgZ2l0Oi8vYCBwcm90b2NvbCwgYW5kIG9uZSBmb3IgYGh0dHA6Ly9gCisJcHJvdG9jb2wpLgorKworTm90ZSB0aGF0IHBlciByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNldCBpbiBgJEdJVF9ESVIvY2xvbmV1cmxgCitmaWxlLCBvciBhcyB2YWx1ZXMgb2YgbXVsdGktdmFsdWUgYGdpdHdlYi51cmxgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW4KK3Byb2plY3QgY29uZmlnLiAgUGVyLXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdmFsdWUKK2NvbXBvc2VkIGZyb20gYEBnaXRfYmFzZV91cmxfbGlzdGAgZWxlbWVudHMgYW5kIHByb2plY3QgbmFtZS4KKysKK1lvdSBjYW4gc2V0dXAgb25lIHNpbmdsZSB2YWx1ZSAoc2luZ2xlIGVudHJ5L2l0ZW0gaW4gdGhpcyBsaXN0KSBhdCBidWlsZAordGltZSBieSBzZXR0aW5nIHRoZSBgR0lUV0VCX0JBU0VfVVJMYCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCitCeSBkZWZhdWx0IGl0IGlzIHNldCB0byAoKSwgaS5lLiBhbiBlbXB0eSBsaXN0LiAgVGhpcyBtZWFucyB0aGF0IGdpdHdlYgord291bGQgbm90IHRyeSB0byBjcmVhdGUgcHJvamVjdCBVUkwgKHRvIGZldGNoKSBmcm9tIHByb2plY3QgbmFtZS4KKworJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllczo6CisJV2hldGhlciB0byBlbmFibGUgdGhlIGdyb3VwaW5nIG9mIHByb2plY3RzIGJ5IGNhdGVnb3J5IG9uIHRoZSBwcm9qZWN0CisJbGlzdCBwYWdlLiBUaGUgY2F0ZWdvcnkgb2YgYSBwcm9qZWN0IGlzIGRldGVybWluZWQgYnkgdGhlCisJYCRHSVRfRElSL2NhdGVnb3J5YCBmaWxlIG9yIHRoZSBgZ2l0d2ViLmNhdGVnb3J5YCB2YXJpYWJsZSBpbiBlYWNoCisJcmVwb3NpdG9yeSdzIGNvbmZpZ3VyYXRpb24uICBEaXNhYmxlZCBieSBkZWZhdWx0IChzZXQgdG8gMCkuCisKKyRwcm9qZWN0X2xpc3RfZGVmYXVsdF9jYXRlZ29yeTo6CisJRGVmYXVsdCBjYXRlZ29yeSBmb3IgcHJvamVjdHMgZm9yIHdoaWNoIG5vbmUgaXMgc3BlY2lmaWVkLiAgSWYgdGhpcyBpcworCXNldCB0byB0aGUgZW1wdHkgc3RyaW5nLCBzdWNoIHByb2plY3RzIHdpbGwgcmVtYWluIHVuY2F0ZWdvcml6ZWQgYW5kCisJbGlzdGVkIGF0IHRoZSB0b3AsIGFib3ZlIGNhdGVnb3JpemVkIHByb2plY3RzLiAgVXNlZCBvbmx5IGlmIHByb2plY3QKKwljYXRlZ29yaWVzIGFyZSBlbmFibGVkLCB3aGljaCBtZWFucyBpZiBgJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllc2AKKwlpcyB0cnVlLiAgQnkgZGVmYXVsdCBzZXQgdG8gIiIgKGVtcHR5IHN0cmluZykuCisKKyRwcmV2ZW50X3hzczo6CisJSWYgdHJ1ZSwgc29tZSBnaXR3ZWIgZmVhdHVyZXMgYXJlIGRpc2FibGVkIHRvIHByZXZlbnQgY29udGVudCBpbgorCXJlcG9zaXRvcmllcyBmcm9tIGxhdW5jaGluZyBjcm9zcy1zaXRlIHNjcmlwdGluZyAoWFNTKSBhdHRhY2tzLiAgU2V0IHRoaXMKKwl0byB0cnVlIGlmIHlvdSBkb24ndCB0cnVzdCB0aGUgY29udGVudCBvZiB5b3VyIHJlcG9zaXRvcmllcy4KKwlGYWxzZSBieSBkZWZhdWx0IChzZXQgdG8gMCkuCisKKyRtYXhsb2FkOjoKKwlVc2VkIHRvIHNldCB0aGUgbWF4aW11bSBsb2FkIHRoYXQgd2Ugd2lsbCBzdGlsbCByZXNwb25kIHRvIGdpdHdlYiBxdWVyaWVzLgorCUlmIHRoZSBzZXJ2ZXIgbG9hZCBleGNlZWRzIHRoaXMgdmFsdWUgdGhlbiBnaXR3ZWIgd2lsbCByZXR1cm4KKwkiNTAzIFNlcnZpY2UgVW5hdmFpbGFibGUiIGVycm9yLiAgVGhlIHNlcnZlciBsb2FkIGlzIHRha2VuIHRvIGJlIDAKKwlpZiBnaXR3ZWIgY2Fubm90IGRldGVybWluZSBpdHMgdmFsdWUuICBDdXJyZW50bHkgaXQgd29ya3Mgb25seSBvbiBMaW51eCwKKwl3aGVyZSBpdCB1c2VzIGAvcHJvYy9sb2FkYXZnYDsgdGhlIGxvYWQgdGhlcmUgaXMgdGhlIG51bWJlciBvZiBhY3RpdmUKKwl0YXNrcyBvbiB0aGUgc3lzdGVtIC0tIHByb2Nlc3NlcyB0aGF0IGFyZSBhY3R1YWxseSBydW5uaW5nIC0tIGF2ZXJhZ2VkCisJb3ZlciB0aGUgbGFzdCBtaW51dGUuCisrCitTZXQgYCRtYXhsb2FkYCB0byB1bmRlZmluZWQgdmFsdWUgKGB1bmRlZmApIHRvIHR1cm4gdGhpcyBmZWF0dXJlIG9mZi4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDMwMC4KKworJG9taXRfYWdlX2NvbHVtbjo6CisJSWYgdHJ1ZSwgb21pdCB0aGUgY29sdW1uIHdpdGggZGF0ZSBvZiB0aGUgbW9zdCBjdXJyZW50IGNvbW1pdCBvbiB0aGUKKwlwcm9qZWN0cyBsaXN0IHBhZ2UuIEl0IGNhbiBzYXZlIGEgYml0IG9mIEkvTyBhbmQgYSBmb3JrIHBlciByZXBvc2l0b3J5LgorCiskb21pdF9vd25lcjo6CisJSWYgdHJ1ZSBwcmV2ZW50cyBkaXNwbGF5aW5nIGluZm9ybWF0aW9uIGFib3V0IHJlcG9zaXRvcnkgb3duZXIuCisKKyRwZXJfcmVxdWVzdF9jb25maWc6OgorCUlmIHRoaXMgaXMgc2V0IHRvIGNvZGUgcmVmZXJlbmNlLCBpdCB3aWxsIGJlIHJ1biBvbmNlIGZvciBlYWNoIHJlcXVlc3QuCisJWW91IGNhbiBzZXQgcGFydHMgb2YgY29uZmlndXJhdGlvbiB0aGF0IGNoYW5nZSBwZXIgc2Vzc2lvbiB0aGlzIHdheS4KKwlGb3IgZXhhbXBsZSwgb25lIG1pZ2h0IHVzZSB0aGUgZm9sbG93aW5nIGNvZGUgaW4gYSBnaXR3ZWIgY29uZmlndXJhdGlvbgorCWZpbGUKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJHBlcl9yZXF1ZXN0X2NvbmZpZyA9IHN1YiB7CisJJEVOVntHTF9VU0VSfSA9ICRjZ2ktPnJlbW90ZV91c2VyIHx8ICJnaXR3ZWIiOworfTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJZiBgJHBlcl9yZXF1ZXN0X2NvbmZpZ2AgaXMgbm90IGEgY29kZSByZWZlcmVuY2UsIGl0IGlzIGludGVycHJldGVkIGFzIGJvb2xlYW4KK3ZhbHVlLiAgSWYgaXQgaXMgdHJ1ZSBnaXR3ZWIgd2lsbCBwcm9jZXNzIGNvbmZpZyBmaWxlcyBvbmNlIHBlciByZXF1ZXN0LAorYW5kIGlmIGl0IGlzIGZhbHNlIGdpdHdlYiB3aWxsIHByb2Nlc3MgY29uZmlnIGZpbGVzIG9ubHkgb25jZSwgZWFjaCB0aW1lIGl0CitpcyBleGVjdXRlZC4gIFRydWUgYnkgZGVmYXVsdCAoc2V0IHRvIDEpLgorKworKk5PVEUqOiBgJG15X3VybGAsIGAkbXlfdXJpYCwgYW5kIGAkYmFzZV91cmxgIGFyZSBvdmVyd3JpdHRlbiB3aXRoIHRoZWlyIGRlZmF1bHQKK3ZhbHVlcyBiZWZvcmUgZXZlcnkgcmVxdWVzdCwgc28gaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZW0sIGJlIHN1cmUgdG8gc2V0Cit0aGlzIHZhcmlhYmxlIHRvIHRydWUgb3IgYSBjb2RlIHJlZmVyZW5jZSBlZmZlY3RpbmcgdGhlIGRlc2lyZWQgY2hhbmdlcy4KKysKK1RoaXMgdmFyaWFibGUgbWF0dGVycyBvbmx5IHdoZW4gdXNpbmcgcGVyc2lzdGVudCB3ZWIgZW52aXJvbm1lbnRzIHRoYXQKK3NlcnZlIG11bHRpcGxlIHJlcXVlc3RzIHVzaW5nIHNpbmdsZSBnaXR3ZWIgaW5zdGFuY2UsIGxpa2UgbW9kX3BlcmwsCitGYXN0Q0dJIG9yIFBsYWNrdXAuCisKKworT3RoZXIgdmFyaWFibGVzCit+fn5+fn5+fn5+fn5+fn4KK1VzdWFsbHkgeW91IHNob3VsZCBub3QgbmVlZCB0byBjaGFuZ2UgKGFkanVzdCkgYW55IG9mIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlcyBkZXNjcmliZWQgYmVsb3c7IHRoZXkgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgc2V0IGJ5IGdpdHdlYiB0bworY29ycmVjdCB2YWx1ZS4KKworCiskdmVyc2lvbjo6CisJR2l0d2ViIHZlcnNpb24sIHNldCBhdXRvbWF0aWNhbGx5IHdoZW4gY3JlYXRpbmcgZ2l0d2ViLmNnaSBmcm9tCisJZ2l0d2ViLnBlcmwuIFlvdSBtaWdodCB3YW50IHRvIG1vZGlmeSBpdCBpZiB5b3UgYXJlIHJ1bm5pbmcgbW9kaWZpZWQKKwlnaXR3ZWIsIGZvciBleGFtcGxlCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkdmVyc2lvbiAuPSAiIHdpdGggY2FjaGluZyI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK2lmIHlvdSBydW4gbW9kaWZpZWQgdmVyc2lvbiBvZiBnaXR3ZWIgd2l0aCBjYWNoaW5nIHN1cHBvcnQuICBUaGlzIHZhcmlhYmxlCitpcyBwdXJlbHkgaW5mb3JtYXRpb25hbCwgdXNlZCBlLmcuIGluIHRoZSAiZ2VuZXJhdG9yIiBtZXRhIGhlYWRlciBpbiBIVE1MCitoZWFkZXIuCisKKyRteV91cmw6OgorJG15X3VyaTo6CisJRnVsbCBVUkwgYW5kIGFic29sdXRlIFVSTCBvZiB0aGUgZ2l0d2ViIHNjcmlwdDsKKwlpbiBlYXJsaWVyIHZlcnNpb25zIG9mIGdpdHdlYiB5b3UgbWlnaHQgaGF2ZSBuZWVkIHRvIHNldCB0aG9zZQorCXZhcmlhYmxlcywgYnV0IG5vdyB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBkbyBpdC4gIFNlZQorCWAkcGVyX3JlcXVlc3RfY29uZmlnYCBpZiB5b3UgbmVlZCB0byBzZXQgdGhlbSBzdGlsbC4KKworJGJhc2VfdXJsOjoKKwlCYXNlIFVSTCBmb3IgcmVsYXRpdmUgVVJMcyBpbiBwYWdlcyBnZW5lcmF0ZWQgYnkgZ2l0d2ViLAorCShlLmcuIGAkbG9nb2AsIGAkZmF2aWNvbmAsIGBAc3R5bGVzaGVldHNgIGlmIHRoZXkgYXJlIHJlbGF0aXZlIFVSTHMpLAorCW5lZWRlZCBhbmQgdXNlZCAnPGJhc2UgaHJlZj0iJGJhc2VfdXJsIj4nIG9ubHkgZm9yIFVSTHMgd2l0aCBub25lbXB0eQorCVBBVEhfSU5GTy4gIFVzdWFsbHkgZ2l0d2ViIHNldHMgaXRzIHZhbHVlIGNvcnJlY3RseSwKKwlhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSwgZS5nLiB0byAkbXlfdXJpIG9yICIvIi4KKwlTZWUgYCRwZXJfcmVxdWVzdF9jb25maWdgIGlmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIGl0IGFueXdheS4KKworCitDT05GSUdVUklORyBHSVRXRUIgRkVBVFVSRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWFueSBnaXR3ZWIgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQgKG9yIGRpc2FibGVkKSBhbmQgY29uZmlndXJlZCB1c2luZyB0aGUKK2AlZmVhdHVyZWAgaGFzaC4gIE5hbWVzIG9mIGdpdHdlYiBmZWF0dXJlcyBhcmUga2V5cyBvZiB0aGlzIGhhc2guCisKK0VhY2ggYCVmZWF0dXJlYCBoYXNoIGVsZW1lbnQgaXMgYSBoYXNoIHJlZmVyZW5jZSBhbmQgaGFzIHRoZSBmb2xsb3dpbmcKK3N0cnVjdHVyZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyI8ZmVhdHVyZV9uYW1lPiIgPT4geworCSJzdWIiID0+IDxmZWF0dXJlLXN1YiAoc3Vicm91dGluZSk+LAorCSJvdmVycmlkZSIgPT4gPGFsbG93LW92ZXJyaWRlIChib29sZWFuKT4sCisJImRlZmF1bHQiID0+IFsgPG9wdGlvbnM+Li4uIF0KK30sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTb21lIGZlYXR1cmVzIGNhbm5vdCBiZSBvdmVycmlkZGVuIHBlciBwcm9qZWN0LiAgRm9yIHRob3NlCitmZWF0dXJlcyB0aGUgc3RydWN0dXJlIG9mIGFwcHJvcHJpYXRlIGAlZmVhdHVyZWAgaGFzaCBlbGVtZW50IGhhcyBhIHNpbXBsZXIKK2Zvcm06CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiPGZlYXR1cmVfbmFtZT4iID0+IHsKKwkib3ZlcnJpZGUiID0+IDAsCisJImRlZmF1bHQiID0+IFsgPG9wdGlvbnM+Li4uIF0KK30sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBcyBvbmUgY2FuIHNlZSBpdCBsYWNrcyB0aGUgXCdzdWInIGVsZW1lbnQuCisKK1RoZSBtZWFuaW5nIG9mIGVhY2ggcGFydCBvZiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gaXMgZGVzY3JpYmVkCitiZWxvdzoKKworZGVmYXVsdDo6CisJTGlzdCAoYXJyYXkgcmVmZXJlbmNlKSBvZiBmZWF0dXJlIHBhcmFtZXRlcnMgKGlmIHRoZXJlIGFyZSBhbnkpLAorCXVzZWQgYWxzbyB0byB0b2dnbGUgKGVuYWJsZSBvciBkaXNhYmxlKSBnaXZlbiBmZWF0dXJlLgorKworTm90ZSB0aGF0IGl0IGlzIGN1cnJlbnRseSAqYWx3YXlzKiBhbiBhcnJheSByZWZlcmVuY2UsIGV2ZW4gaWYKK2ZlYXR1cmUgZG9lc24ndCBhY2NlcHQgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgYW5kIFwnZGVmYXVsdCcKK2lzIHVzZWQgb25seSB0byB0dXJuIGl0IG9uIG9yIG9mZi4gIEluIHN1Y2ggY2FzZSB5b3UgdHVybiBmZWF0dXJlIG9uCitieSBzZXR0aW5nIHRoaXMgZWxlbWVudCB0byBgWzFdYCwgYW5kIHRvcm4gaXQgb2ZmIGJ5IHNldHRpbmcgaXQgdG8KK2BbMF1gLiAgU2VlIGFsc28gdGhlIHBhc3NhZ2UgYWJvdXQgdGhlICJibGFtZSIgZmVhdHVyZSBpbiB0aGUgIkV4YW1wbGVzIgorc2VjdGlvbi4KKysKK1RvIGRpc2FibGUgZmVhdHVyZXMgdGhhdCBhY2NlcHQgcGFyYW1ldGVycyAoYXJlIGNvbmZpZ3VyYWJsZSksIHlvdQorbmVlZCB0byBzZXQgdGhpcyBlbGVtZW50IHRvIGVtcHR5IGxpc3QgaS5lLiBgW11gLgorCitvdmVycmlkZTo6CisJSWYgdGhpcyBmaWVsZCBoYXMgYSB0cnVlIHZhbHVlIHRoZW4gdGhlIGdpdmVuIGZlYXR1cmUgaXMKKwlvdmVycmlkYWJsZSwgd2hpY2ggbWVhbnMgdGhhdCBpdCBjYW4gYmUgY29uZmlndXJlZAorCShvciBlbmFibGVkL2Rpc2FibGVkKSBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzLgorKworVXN1YWxseSBnaXZlbiAiPGZlYXR1cmU+IiBpcyBjb25maWd1cmFibGUgdmlhIHRoZSBgZ2l0d2ViLjxmZWF0dXJlPmAKK2NvbmZpZyB2YXJpYWJsZSBpbiB0aGUgcGVyLXJlcG9zaXRvcnkgR2l0IGNvbmZpZ3VyYXRpb24gZmlsZS4KKysKKypOb3RlKiB0aGF0IG5vIGZlYXR1cmUgaXMgb3ZlcnJpZGFibGUgYnkgZGVmYXVsdC4KKworc3ViOjoKKwlJbnRlcm5hbCBkZXRhaWwgb2YgaW1wbGVtZW50YXRpb24uICBXaGF0IGlzIGltcG9ydGFudCBpcyB0aGF0CisJaWYgdGhpcyBmaWVsZCBpcyBub3QgcHJlc2VudCB0aGVuIHBlci1yZXBvc2l0b3J5IG92ZXJyaWRlIGZvcgorCWdpdmVuIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZC4KKysKK1lvdSB3b3VsZG4ndCBuZWVkIHRvIGV2ZXIgY2hhbmdlIGl0IGluIGdpdHdlYiBjb25maWcgZmlsZS4KKworCitGZWF0dXJlcyBpbiBgJWZlYXR1cmVgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgZ2l0d2ViIGZlYXR1cmVzIHRoYXQgYXJlIGNvbmZpZ3VyYWJsZSB2aWEgYCVmZWF0dXJlYCBoYXNoIGFyZSBsaXN0ZWQKK2JlbG93LiAgVGhpcyBzaG91bGQgYmUgYSBjb21wbGV0ZSBsaXN0LCBidXQgdWx0aW1hdGVseSB0aGUgYXV0aG9yaXRhdGl2ZQorYW5kIGNvbXBsZXRlIGxpc3QgaXMgaW4gZ2l0d2ViLmNnaSBzb3VyY2UgY29kZSwgd2l0aCBmZWF0dXJlcyBkZXNjcmliZWQKK2luIHRoZSBjb21tZW50cy4KKworYmxhbWU6OgorCUVuYWJsZSB0aGUgImJsYW1lIiBhbmQgImJsYW1lX2luY3JlbWVudGFsIiBibG9iIHZpZXdzLCBzaG93aW5nIGZvcgorCWVhY2ggbGluZSB0aGUgbGFzdCBjb21taXQgdGhhdCBtb2RpZmllZCBpdDsgc2VlIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdLgorCVRoaXMgY2FuIGJlIHZlcnkgQ1BVLWludGVuc2l2ZSBhbmQgaXMgdGhlcmVmb3JlIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyB2aWEKK3JlcG9zaXRvcnkncyBgZ2l0d2ViLmJsYW1lYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworc25hcHNob3Q6OgorCUVuYWJsZSBhbmQgY29uZmlndXJlIHRoZSAic25hcHNob3QiIGFjdGlvbiwgd2hpY2ggYWxsb3dzIHVzZXIgdG8KKwlkb3dubG9hZCBhIGNvbXByZXNzZWQgYXJjaGl2ZSBvZiBhbnkgdHJlZSBvciBjb21taXQsIGFzIHByb2R1Y2VkCisJYnkgbGlua2dpdDpnaXQtYXJjaGl2ZVsxXSBhbmQgcG9zc2libHkgYWRkaXRpb25hbGx5IGNvbXByZXNzZWQuCisJVGhpcyBjYW4gcG90ZW50aWFsbHkgZ2VuZXJhdGUgaGlnaCB0cmFmZmljIGlmIHlvdSBoYXZlIGxhcmdlIHByb2plY3QuCisrCitUaGUgdmFsdWUgb2YgXCdkZWZhdWx0JyBpcyBhIGxpc3Qgb2YgbmFtZXMgb2Ygc25hcHNob3QgZm9ybWF0cywKK2RlZmluZWQgaW4gYCVrbm93bl9zbmFwc2hvdF9mb3JtYXRzYCBoYXNoLCB0aGF0IHlvdSB3aXNoIHRvIG9mZmVyLgorU3VwcG9ydGVkIGZvcm1hdHMgaW5jbHVkZSAidGd6IiwgInRiejIiLCAidHh6IiAoZ3ppcC9iemlwMi94egorY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSkgYW5kICJ6aXAiOyBwbGVhc2UgY29uc3VsdCBnaXR3ZWIgc291cmNlcyBmb3IKK2EgZGVmaW5pdGl2ZSBsaXN0LiAgQnkgZGVmYXVsdCBvbmx5ICJ0Z3oiIGlzIG9mZmVyZWQuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyB2aWEKK3JlcG9zaXRvcnkncyBgZ2l0d2ViLnNuYXBzaG90YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3aGljaCBjb250YWlucworYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmb3JtYXRzIG9yICJub25lIiB0byBkaXNhYmxlIHNuYXBzaG90cy4KK1Vua25vd24gdmFsdWVzIGFyZSBpZ25vcmVkLgorCitncmVwOjoKKwlFbmFibGUgZ3JlcCBzZWFyY2gsIHdoaWNoIGxpc3RzIHRoZSBmaWxlcyBpbiBjdXJyZW50bHkgc2VsZWN0ZWQKKwl0cmVlIChkaXJlY3RvcnkpIGNvbnRhaW5pbmcgdGhlIGdpdmVuIHN0cmluZzsgc2VlIGxpbmtnaXQ6Z2l0LWdyZXBbMV0uCisJVGhpcyBjYW4gYmUgcG90ZW50aWFsbHkgQ1BVLWludGVuc2l2ZSwgb2YgY291cnNlLiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5ncmVwYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworcGlja2F4ZTo6CisJRW5hYmxlIHRoZSBzbyBjYWxsZWQgcGlja2F4ZSBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgY29tbWl0cworCXRoYXQgaW50cm9kdWNlZCBvciByZW1vdmVkIGEgZ2l2ZW4gc3RyaW5nIGluIGEgZmlsZS4gIFRoaXMgY2FuIGJlCisJcHJhY3RpY2FsIGFuZCBxdWl0ZSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gImJsYW1lIiBhY3Rpb24sIGJ1dCBpdCBpcworCXN0aWxsIHBvdGVudGlhbGx5IENQVS1pbnRlbnNpdmUuICBFbmFibGVkIGJ5IGRlZmF1bHQuCisrCitUaGUgcGlja2F4ZSBzZWFyY2ggaXMgZGVzY3JpYmVkIGluIGxpbmtnaXQ6Z2l0LWxvZ1sxXSAodGhlCitkZXNjcmlwdGlvbiBvZiBgLVM8c3RyaW5nPmAgb3B0aW9uLCB3aGljaCByZWZlcnMgdG8gcGlja2F4ZSBlbnRyeSBpbgorbGlua2dpdDpnaXRkaWZmY29yZVs3XSBmb3IgbW9yZSBkZXRhaWxzKS4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIGJ5IHNldHRpbmcKK3JlcG9zaXRvcnkncyBgZ2l0d2ViLnBpY2theGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGJvb2xlYW4pLgorCitzaG93LXNpemVzOjoKKwlFbmFibGUgc2hvd2luZyBzaXplIG9mIGJsb2JzIChvcmRpbmFyeSBmaWxlcykgaW4gYSAidHJlZSIgdmlldywgaW4gYQorCXNlcGFyYXRlIGNvbHVtbiwgc2ltaWxhciB0byB3aGF0IGBscyAtbGAgZG9lczsgc2VlIGRlc2NyaXB0aW9uIG9mCisJYC1sYCBvcHRpb24gaW4gbGlua2dpdDpnaXQtbHMtdHJlZVsxXSBtYW5wYWdlLiAgVGhpcyBjb3N0cyBhIGJpdCBvZgorCUkvTy4gIEVuYWJsZWQgYnkgZGVmYXVsdC4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuc2hvd1NpemVzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworcGF0Y2hlczo6CisJRW5hYmxlIGFuZCBjb25maWd1cmUgInBhdGNoZXMiIHZpZXcsIHdoaWNoIGRpc3BsYXlzIGxpc3Qgb2YgY29tbWl0cyBpbiBlbWFpbAorCShwbGFpbiB0ZXh0KSBvdXRwdXQgZm9ybWF0OyBzZWUgYWxzbyBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0uCisJVGhlIHZhbHVlIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRjaGVzIGluIGEgcGF0Y2hzZXQgZ2VuZXJhdGVkCisJaW4gInBhdGNoZXMiIHZpZXcuICBTZXQgdGhlICdkZWZhdWx0JyBmaWVsZCB0byBhIGxpc3QgY29udGFpbmluZyBzaW5nbGUKKwlpdGVtIG9mIG9yIHRvIGFuIGVtcHR5IGxpc3QgdG8gZGlzYWJsZSBwYXRjaCB2aWV3LCBvciB0byBhIGxpc3QKKwljb250YWluaW5nIGEgc2luZ2xlIG5lZ2F0aXZlIG51bWJlciB0byByZW1vdmUgYW55IGxpbWl0LgorCURlZmF1bHQgdmFsdWUgaXMgMTYuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyB2aWEKK3JlcG9zaXRvcnkncyBgZ2l0d2ViLnBhdGNoZXNgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGludGVnZXIpLgorCithdmF0YXI6OgorCUF2YXRhciBzdXBwb3J0LiAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdmlld3Mgc3VjaCBhcworCSJzaG9ydGxvZyIgb3IgImNvbW1pdCIgd2lsbCBkaXNwbGF5IGFuIGF2YXRhciBhc3NvY2lhdGVkIHdpdGgKKwl0aGUgZW1haWwgb2YgZWFjaCBjb21taXR0ZXIgYW5kIGF1dGhvci4KKysKK0N1cnJlbnRseSBhdmFpbGFibGUgcHJvdmlkZXJzIGFyZSAqImdyYXZhdGFyIiogYW5kICoicGljb24iKi4KK09ubHkgb25lIHByb3ZpZGVyIGF0IGEgdGltZSBjYW4gYmUgc2VsZWN0ZWQgKCdkZWZhdWx0JyBpcyBvbmUgZWxlbWVudCBsaXN0KS4KK0lmIGFuIHVua25vd24gcHJvdmlkZXIgaXMgc3BlY2lmaWVkLCB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKypOb3RlKiB0aGF0IHNvbWUgcHJvdmlkZXJzIG1pZ2h0IHJlcXVpcmUgZXh0cmEgUGVybCBwYWNrYWdlcyB0byBiZQoraW5zdGFsbGVkOyBzZWUgYGdpdHdlYi9JTlNUQUxMYCBmb3IgbW9yZSBkZXRhaWxzLgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5hdmF0YXJgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisrCitTZWUgYWxzbyBgJWF2YXRhcl9zaXplYCB3aXRoIHBpeGVsIHNpemVzIGZvciBpY29ucyBhbmQgYXZhdGFycworKCJkZWZhdWx0IiBpcyB1c2VkIGZvciBvbmUtbGluZSBsaWtlICJsb2ciIGFuZCAic2hvcnRsb2ciLCAiZG91YmxlIgoraXMgdXNlZCBmb3IgdHdvLWxpbmUgbGlrZSAiY29tbWl0IiwgImNvbW1pdGRpZmYiIG9yICJ0YWciKS4gIElmIHRoZQorZGVmYXVsdCBmb250IHNpemVzIG9yIGxpbmVoZWlnaHRzIGFyZSBjaGFuZ2VkIChlLmcuIHZpYSBhZGRpbmcgZXh0cmEKK0NTUyBzdHlsZXNoZWV0IGluIGBAc3R5bGVzaGVldHNgKSwgaXQgbWF5IGJlIGFwcHJvcHJpYXRlIHRvIGNoYW5nZQordGhlc2UgdmFsdWVzLgorCitoaWdobGlnaHQ6OgorCVNlcnZlci1zaWRlIHN5bnRheCBoaWdobGlnaHQgc3VwcG9ydCBpbiAiYmxvYiIgdmlldy4gIEl0IHJlcXVpcmVzCisJYCRoaWdobGlnaHRfYmluYCBwcm9ncmFtIHRvIGJlIGF2YWlsYWJsZSAoc2VlIHRoZSBkZXNjcmlwdGlvbiBvZgorCXRoaXMgdmFyaWFibGUgaW4gdGhlICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyIgc2VjdGlvbiBhYm92ZSksCisJYW5kIHRoZXJlZm9yZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5oaWdobGlnaHRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGJvb2xlYW4pLgorCityZW1vdGVfaGVhZHM6OgorCUVuYWJsZSBkaXNwbGF5aW5nIHJlbW90ZSBoZWFkcyAocmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzKSBpbiB0aGUgImhlYWRzIgorCWxpc3QuICBJbiBtb3N0IGNhc2VzIHRoZSBsaXN0IG9mIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpcyBhbgorCXVubmVjZXNzYXJ5IGludGVybmFsIHByaXZhdGUgZGV0YWlsLCBhbmQgdGhpcyBmZWF0dXJlIGlzIHRoZXJlZm9yZQorCWRpc2FibGVkIGJ5IGRlZmF1bHQuICBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSwgd2hpY2ggaXMgdXN1YWxseSB1c2VkCisJdG8gYnJvd3NlIGxvY2FsIHJlcG9zaXRvcmllcywgZW5hYmxlcyBhbmQgdXNlcyB0aGlzIGZlYXR1cmUuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyB2aWEKK3JlcG9zaXRvcnkncyBgZ2l0d2ViLnJlbW90ZV9oZWFkc2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKKworVGhlIHJlbWFpbmluZyBmZWF0dXJlcyBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBvbiBhIHBlciBwcm9qZWN0IGJhc2lzLgorCitzZWFyY2g6OgorCUVuYWJsZSB0ZXh0IHNlYXJjaCwgd2hpY2ggd2lsbCBsaXN0IHRoZSBjb21taXRzIHdoaWNoIG1hdGNoIGF1dGhvciwKKwljb21taXR0ZXIgb3IgY29tbWl0IHRleHQgdG8gYSBnaXZlbiBzdHJpbmc7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YKKwlgLS1hdXRob3JgLCBgLS1jb21taXR0ZXJgIGFuZCBgLS1ncmVwYCBvcHRpb25zIGluIGxpbmtnaXQ6Z2l0LWxvZ1sxXQorCW1hbnBhZ2UuICBFbmFibGVkIGJ5IGRlZmF1bHQuCisrCitQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKK2ZvcmtzOjoKKwlJZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZ2l0d2ViIGNvbnNpZGVycyBwcm9qZWN0cyBpbgorCXN1YmRpcmVjdG9yaWVzIG9mIHByb2plY3Qgcm9vdCAoYmFzZW5hbWUpIHRvIGJlIGZvcmtzIG9mIGV4aXN0aW5nCisJcHJvamVjdHMuICBGb3IgZWFjaCBwcm9qZWN0ICskcHJvam5hbWUuZ2l0KywgcHJvamVjdHMgaW4gdGhlCisJKyRwcm9qbmFtZS8rIGRpcmVjdG9yeSBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzIHdpbGwgbm90IGJlCisJc2hvd24gaW4gdGhlIG1haW4gcHJvamVjdHMgbGlzdC4gIEluc3RlYWQsIGEgXCcrJyBtYXJrIGlzIHNob3duCisJbmV4dCB0byBgJHByb2puYW1lYCwgd2hpY2ggbGlua3MgdG8gYSAiZm9ya3MiIHZpZXcgdGhhdCBsaXN0cyBhbGwKKwl0aGUgZm9ya3MgKGFsbCBwcm9qZWN0cyBpbiBgJHByb2puYW1lL2Agc3ViZGlyZWN0b3J5KS4gIEFkZGl0aW9uYWxseQorCWEgImZvcmtzIiB2aWV3IGZvciBhIHByb2plY3QgaXMgbGlua2VkIGZyb20gcHJvamVjdCBzdW1tYXJ5IHBhZ2UuCisrCitJZiB0aGUgcHJvamVjdCBsaXN0IGlzIHRha2VuIGZyb20gYSBmaWxlICgrJHByb2plY3RzX2xpc3QrIHBvaW50cyB0byBhCitmaWxlKSwgZm9ya3MgYXJlIG9ubHkgcmVjb2duaXplZCBpZiB0aGV5IGFyZSBsaXN0ZWQgYWZ0ZXIgdGhlIG1haW4gcHJvamVjdAoraW4gdGhhdCBmaWxlLgorKworUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCithY3Rpb25zOjoKKwlJbnNlcnQgY3VzdG9tIGxpbmtzIHRvIHRoZSBhY3Rpb24gYmFyIG9mIGFsbCBwcm9qZWN0IHBhZ2VzLiAgVGhpcworCWFsbG93cyB5b3UgdG8gbGluayB0byB0aGlyZC1wYXJ0eSBzY3JpcHRzIGludGVncmF0aW5nIGludG8gZ2l0d2ViLgorKworVGhlICJkZWZhdWx0IiB2YWx1ZSBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgdHJpcGxldHMgaW4gdGhlIGZvcm0KK2AoIjxsYWJlbD4iLCAiPGxpbms+IiwgIjxwb3NpdGlvbj4iKWAgd2hlcmUgInBvc2l0aW9uIiBpcyB0aGUgbGFiZWwKK2FmdGVyIHdoaWNoIHRvIGluc2VydCB0aGUgbGluaywgImxpbmsiIGlzIGEgZm9ybWF0IHN0cmluZyB3aGVyZSBgJW5gCitleHBhbmRzIHRvIHRoZSBwcm9qZWN0IG5hbWUsIGAlZmAgdG8gdGhlIHByb2plY3QgcGF0aCB3aXRoaW4gdGhlCitmaWxlc3lzdGVtIChpLmUuICIkcHJvamVjdHJvb3QvJHByb2plY3QiKSwgYCVoYCB0byB0aGUgY3VycmVudCBoYXNoCisoXCdoJyBnaXR3ZWIgcGFyYW1ldGVyKSBhbmQgYCViYCB0byB0aGUgY3VycmVudCBoYXNoIGJhc2UKKyhcJ2hiJyBnaXR3ZWIgcGFyYW1ldGVyKTsgYCUlYCBleHBhbmRzIHRvIFwnJScuCisrCitGb3IgZXhhbXBsZSwgYXQgdGhlIHRpbWUgdGhpcyBwYWdlIHdhcyB3cml0dGVuLCB0aGUgaHR0cDovL3JlcG8ub3IuY3pbXQorR2l0IGhvc3Rpbmcgc2l0ZSBzZXQgaXQgdG8gdGhlIGZvbGxvd2luZyB0byBlbmFibGUgZ3JhcGhpY2FsIGxvZworKHVzaW5nIHRoZSB0aGlyZCBwYXJ0eSB0b29sICpnaXQtYnJvd3NlciopOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGZlYXR1cmV7J2FjdGlvbnMnfXsnZGVmYXVsdCd9ID0KKwlbICgnZ3JhcGhpY2xvZycsICcvZ2l0LWJyb3dzZXIvYnktY29tbWl0Lmh0bWw/cj0lbicsICdzdW1tYXJ5JyldOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhpcyBhZGRzIGEgbGluayB0aXRsZWQgImdyYXBoaWNsb2ciIGFmdGVyIHRoZSAic3VtbWFyeSIgbGluaywgbGVhZGluZyB0bworYGdpdC1icm93c2VyYCBzY3JpcHQsIHBhc3NpbmcgYHI9PHByb2plY3Q+YCBhcyBhIHF1ZXJ5IHBhcmFtZXRlci4KKysKK1Byb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKwordGltZWQ6OgorCUVuYWJsZSBkaXNwbGF5aW5nIGhvdyBtdWNoIHRpbWUgYW5kIGhvdyBtYW55IEdpdCBjb21tYW5kcyBpdCB0b29rIHRvCisJZ2VuZXJhdGUgYW5kIGRpc3BsYXkgZWFjaCBwYWdlIGluIHRoZSBwYWdlIGZvb3RlciAoYXQgdGhlIGJvdHRvbSBvZgorCXBhZ2UpLiAgRm9yIGV4YW1wbGUgdGhlIGZvb3RlciBtaWdodCBjb250YWluOiAiVGhpcyBwYWdlIHRvb2sgNi41MzMyNQorCXNlY29uZHMgYW5kIDEzIEdpdCBjb21tYW5kcyB0byBnZW5lcmF0ZS4iICBEaXNhYmxlZCBieSBkZWZhdWx0LgorKworUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCitqYXZhc2NyaXB0LXRpbWV6b25lOjoKKwlFbmFibGUgYW5kIGNvbmZpZ3VyZSB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgYSBjb21tb24gdGltZSB6b25lIGZvciBkYXRlcworCWluIGdpdHdlYiBvdXRwdXQgdmlhIEphdmFTY3JpcHQuICBEYXRlcyBpbiBnaXR3ZWIgb3V0cHV0IGluY2x1ZGUKKwlhdXRob3JkYXRlIGFuZCBjb21taXR0ZXJkYXRlIGluICJjb21taXQiLCAiY29tbWl0ZGlmZiIgYW5kICJsb2ciCisJdmlld3MsIGFuZCB0YWdnZXJkYXRlIGluICJ0YWciIHZpZXcuICBFbmFibGVkIGJ5IGRlZmF1bHQuCisrCitUaGUgdmFsdWUgaXMgYSBsaXN0IG9mIHRocmVlIHZhbHVlczogYSBkZWZhdWx0IHRpbWUgem9uZSAoZm9yIGlmIHRoZSBjbGllbnQKK2hhc24ndCBzZWxlY3RlZCBzb21lIG90aGVyIHRpbWUgem9uZSBhbmQgc2F2ZWQgaXQgaW4gYSBjb29raWUpLCBhIG5hbWUgb2YgY29va2llCit3aGVyZSB0byBzdG9yZSBzZWxlY3RlZCB0aW1lIHpvbmUsIGFuZCBhIENTUyBjbGFzcyB1c2VkIHRvIG1hcmsgdXAKK2RhdGVzIGZvciBtYW5pcHVsYXRpb24uICBJZiB5b3Ugd2FudCB0byB0dXJuIHRoaXMgZmVhdHVyZSBvZmYsIHNldCAiZGVmYXVsdCIKK3RvIGVtcHR5IGxpc3Q6IGBbXWAuCisrCitUeXBpY2FsIGdpdHdlYiBjb25maWcgZmlsZXMgd2lsbCBvbmx5IGNoYW5nZSBzdGFydGluZyAoZGVmYXVsdCkgdGltZSB6b25lLAorYW5kIGxlYXZlIG90aGVyIGVsZW1lbnRzIGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZmVhdHVyZXsnamF2YXNjcmlwdC10aW1lem9uZSd9eydkZWZhdWx0J31bMF0gPSAidXRjIjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbiBwcmVzZW50ZWQgaGVyZSBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkcworYW5kIGZvcndhcmQgY29tcGF0aWJsZS4KKysKK1RpbWUgem9uZSB2YWx1ZXMgY2FuIGJlICJsb2NhbCIgKGZvciBsb2NhbCB0aW1lIHpvbmUgdGhhdCBicm93c2VyIHVzZXMpLCAidXRjIgorKHdoYXQgZ2l0d2ViIHVzZXMgd2hlbiBKYXZhU2NyaXB0IG9yIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCksIG9yIG51bWVyaWNhbAordGltZSB6b25lcyBpbiB0aGUgZm9ybSBvZiAiKy8tSEhNTSIsIHN1Y2ggYXMgIiswMjAwIi4KKysKK1Byb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKworZXh0cmEtYnJhbmNoLXJlZnM6OgorCUxpc3Qgb2YgYWRkaXRpb25hbCBkaXJlY3RvcmllcyB1bmRlciAicmVmcyIgd2hpY2ggYXJlIGdvaW5nIHRvCisJYmUgdXNlZCBhcyBicmFuY2ggcmVmcy4gRm9yIGV4YW1wbGUgaWYgeW91IGhhdmUgYSBnZXJyaXQgc2V0dXAKKwl3aGVyZSBhbGwgYnJhbmNoZXMgdW5kZXIgcmVmcy9oZWFkcy8gYXJlIG9mZmljaWFsLAorCXB1c2gtYWZ0ZXItcmV2aWV3IG9uZXMgYW5kIGJyYW5jaGVzIHVuZGVyIHJlZnMvc2FuZGJveC8sCisJcmVmcy93aXAgYW5kIHJlZnMvb3RoZXIgYXJlIHVzZXIgb25lcyB3aGVyZSBwZXJtaXNzaW9ucyBhcmUKKwltdWNoIHdpZGVyLCB0aGVuIHlvdSBtaWdodCB3YW50IHRvIHNldCB0aGlzIHZhcmlhYmxlIGFzCisJZm9sbG93czoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZmVhdHVyZXsnZXh0cmEtYnJhbmNoLXJlZnMnfXsnZGVmYXVsdCd9ID0KKwlbJ3NhbmRib3gnLCAnd2lwJywgJ290aGVyJ107CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIHBlci1yZXBvc2l0b3J5IGJhc2lzIGFmdGVyIHNldHRpbmcKKyRmZWF0dXJleydleHRyYS1icmFuY2gtcmVmcyd9eydvdmVycmlkZSd9IHRvIHRydWUsIHZpYSByZXBvc2l0b3J5J3MKK2BnaXR3ZWIuZXh0cmFCcmFuY2hSZWZzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3aGljaCBjb250YWlucyBhCitzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiByZWZzLiBBbiBleGFtcGxlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tnaXR3ZWJdCisJZXh0cmFCcmFuY2hSZWZzID0gc2FuZGJveCB3aXAgb3RoZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgZ2l0d2ViLmV4dHJhQnJhbmNoUmVmcyBpcyBhY3R1YWxseSBhIG11bHRpLXZhbHVlZCBjb25maWd1cmF0aW9uCit2YXJpYWJsZSwgc28gZm9sbG93aW5nIGV4YW1wbGUgaXMgYWxzbyBjb3JyZWN0IGFuZCB0aGUgcmVzdWx0IGlzIHRoZQorc2FtZSBhcyBvZiB0aGUgc25pcHBldCBhYm92ZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZ2l0d2ViXQorCWV4dHJhQnJhbmNoUmVmcyA9IHNhbmRib3gKKwlleHRyYUJyYW5jaFJlZnMgPSB3aXAgb3RoZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJdCBpcyBhbiBlcnJvciB0byBzcGVjaWZ5IGEgcmVmIHRoYXQgZG9lcyBub3QgcGFzcyAiZ2l0IGNoZWNrLXJlZi1mb3JtYXQiCitzY3J1dGlueS4gRHVwbGljYXRlZCB2YWx1ZXMgYXJlIGZpbHRlcmVkLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUbyBlbmFibGUgYmxhbWUsIHBpY2theGUgc2VhcmNoLCBhbmQgc25hcHNob3Qgc3VwcG9ydCAoYWxsb3dpbmcgInRhci5neiIgYW5kCisiemlwIiBzbmFwc2hvdHMpLCB3aGlsZSBhbGxvd2luZyBpbmRpdmlkdWFsIHByb2plY3RzIHRvIHR1cm4gdGhlbSBvZmYsIHB1dAordGhlIGZvbGxvd2luZyBpbiB5b3VyIEdJVFdFQl9DT05GSUcgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRmZWF0dXJleydibGFtZSd9eydkZWZhdWx0J30gPSBbMV07CiskZmVhdHVyZXsnYmxhbWUnfXsnb3ZlcnJpZGUnfSA9IDE7CisKKyRmZWF0dXJleydwaWNrYXhlJ317J2RlZmF1bHQnfSA9IFsxXTsKKyRmZWF0dXJleydwaWNrYXhlJ317J292ZXJyaWRlJ30gPSAxOworCiskZmVhdHVyZXsnc25hcHNob3QnfXsnZGVmYXVsdCd9ID0gWyd6aXAnLCAndGd6J107CiskZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDE7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgYWxsb3cgb3ZlcnJpZGluZyBmb3IgdGhlIHNuYXBzaG90IGZlYXR1cmUsIHlvdSBjYW4gc3BlY2lmeSB3aGljaAorc25hcHNob3QgZm9ybWF0cyBhcmUgZ2xvYmFsbHkgZGlzYWJsZWQuIFlvdSBjYW4gYWxzbyBhZGQgYW55IGNvbW1hbmQtbGluZQorb3B0aW9ucyB5b3Ugd2FudCAoc3VjaCBhcyBzZXR0aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCkuIEZvciBpbnN0YW5jZSwgeW91CitjYW4gZGlzYWJsZSBaaXAgY29tcHJlc3NlZCBzbmFwc2hvdHMgYW5kIHNldCAqZ3ppcCooMSkgdG8gcnVuIGF0IGxldmVsIDYgYnkKK2FkZGluZyB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZToKKworCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd6aXAnfXsnZGlzYWJsZWQnfSA9IDE7CisJJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3Rneid9eydjb21wcmVzc29yJ30gPSBbJ2d6aXAnLCctNiddOworCitCVUdTCistLS0tCitEZWJ1Z2dpbmcgd291bGQgYmUgZWFzaWVyIGlmIHRoZSBmYWxsYmFjayBjb25maWd1cmF0aW9uIGZpbGUKKyhgL2V0Yy9naXR3ZWIuY29uZmApIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycmlkZSBpdHMgbG9jYXRpb24KKygnR0lUV0VCX0NPTkZJR19TWVNURU0nKSBoYWQgbmFtZXMgcmVmbGVjdGluZyB0aGVpciAiZmFsbGJhY2siIHJvbGUuCitUaGUgY3VycmVudCBuYW1lcyBhcmUga2VwdCB0byBhdm9pZCBicmVha2luZyB3b3JraW5nIHNldHVwcy4KKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCitUaGUgbG9jYXRpb24gb2YgcGVyLWluc3RhbmNlIGFuZCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGVzIGNhbiBiZQorb3ZlcnJpZGRlbiB1c2luZyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczoKKworR0lUV0VCX0NPTkZJRzo6CisJU2V0cyBsb2NhdGlvbiBvZiBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmaWxlLgorR0lUV0VCX0NPTkZJR19TWVNURU06OgorCVNldHMgbG9jYXRpb24gb2YgZmFsbGJhY2sgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLgorCVRoaXMgZmlsZSBpcyByZWFkIG9ubHkgaWYgcGVyLWluc3RhbmNlIG9uZSBkb2VzIG5vdCBleGlzdC4KK0dJVFdFQl9DT05GSUdfQ09NTU9OOjoKKwlTZXRzIGxvY2F0aW9uIG9mIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCisKKworRklMRVMKKy0tLS0tCitnaXR3ZWJfY29uZmlnLnBlcmw6OgorCVRoaXMgaXMgZGVmYXVsdCBuYW1lIG9mIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGUKKwlmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIGRlc2NyaWJlZCBhYm92ZS4KKy9ldGMvZ2l0d2ViLmNvbmY6OgorCVRoaXMgaXMgZGVmYXVsdCBuYW1lIG9mIGZhbGxiYWNrIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24KKwlmaWxlLiAgVGhpcyBmaWxlIGlzIHVzZWQgb25seSBpZiBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIGlzIG5vdCBmb3VuZC4KKy9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mOjoKKwlUaGlzIGlzIGRlZmF1bHQgbmFtZSBvZiBjb21tb24gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbgorCWZpbGUuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHdlYlsxXSwgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0KKworJ2dpdHdlYi9SRUFETUUnLCAnZ2l0d2ViL0lOU1RBTEwnCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzliMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi50eHQKQEAgLTAsMCArMSw3MDMgQEAKK2dpdHdlYigxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHdlYiAtIEdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykKKworU1lOT1BTSVMKKy0tLS0tLS0tCitUbyBnZXQgc3RhcnRlZCB3aXRoIGdpdHdlYiwgcnVuIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdIGZyb20gYSBHaXQgcmVwb3NpdG9yeS4KK1RoaXMgd291bGQgY29uZmlndXJlIGFuZCBzdGFydCB5b3VyIHdlYiBzZXJ2ZXIsIGFuZCBydW4gd2ViIGJyb3dzZXIgcG9pbnRpbmcgdG8KK2dpdHdlYi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdHdlYiBwcm92aWRlcyBhIHdlYiBpbnRlcmZhY2UgdG8gR2l0IHJlcG9zaXRvcmllcy4gIEl0cyBmZWF0dXJlcyBpbmNsdWRlOgorCisqIFZpZXdpbmcgbXVsdGlwbGUgR2l0IHJlcG9zaXRvcmllcyB3aXRoIGNvbW1vbiByb290LgorKiBCcm93c2luZyBldmVyeSByZXZpc2lvbiBvZiB0aGUgcmVwb3NpdG9yeS4KKyogVmlld2luZyB0aGUgY29udGVudHMgb2YgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgYXQgYW55IHJldmlzaW9uLgorKiBWaWV3aW5nIHRoZSByZXZpc2lvbiBsb2cgb2YgYnJhbmNoZXMsIGhpc3Rvcnkgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLAorICBzZWUgd2hhdCB3YXMgY2hhbmdlZCB3aGVuLCBieSB3aG8uCisqIFZpZXdpbmcgdGhlIGJsYW1lL2Fubm90YXRpb24gZGV0YWlscyBvZiBhbnkgZmlsZSAoaWYgZW5hYmxlZCkuCisqIEdlbmVyYXRpbmcgUlNTIGFuZCBBdG9tIGZlZWRzIG9mIGNvbW1pdHMsIGZvciBhbnkgYnJhbmNoLgorICBUaGUgZmVlZHMgYXJlIGF1dG8tZGlzY292ZXJhYmxlIGluIG1vZGVybiB3ZWIgYnJvd3NlcnMuCisqIFZpZXdpbmcgZXZlcnl0aGluZyB0aGF0IHdhcyBjaGFuZ2VkIGluIGEgcmV2aXNpb24sIGFuZCBzdGVwIHRocm91Z2gKKyAgcmV2aXNpb25zIG9uZSBhdCBhIHRpbWUsIHZpZXdpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHJlcG9zaXRvcnkuCisqIEZpbmRpbmcgY29tbWl0cyB3aGljaCBjb21taXQgbWVzc2FnZXMgbWF0Y2hlcyBnaXZlbiBzZWFyY2ggdGVybS4KKworU2VlIGh0dHA6Ly9yZXBvLm9yLmN6L3cvZ2l0LmdpdC90cmVlL0hFQUQ6L2dpdHdlYi9bXSBmb3IgZ2l0d2ViIHNvdXJjZSBjb2RlLAorYnJvd3NlZCB1c2luZyBnaXR3ZWIgaXRzZWxmLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK1ZhcmlvdXMgYXNwZWN0cyBvZiBnaXR3ZWIncyBiZWhhdmlvciBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uCitmaWxlIGBnaXR3ZWJfY29uZmlnLnBlcmxgIG9yIGAvZXRjL2dpdHdlYi5jb25mYC4gIFNlZSB0aGUgbGlua2dpdDpnaXR3ZWIuY29uZls1XQorZm9yIGRldGFpbHMuCisKK1JlcG9zaXRvcmllcworfn5+fn5+fn5+fn5+CitHaXR3ZWIgY2FuIHNob3cgaW5mb3JtYXRpb24gZnJvbSBvbmUgb3IgbW9yZSBHaXQgcmVwb3NpdG9yaWVzLiAgVGhlc2UKK3JlcG9zaXRvcmllcyBoYXZlIHRvIGJlIGFsbCBvbiBsb2NhbCBmaWxlc3lzdGVtLCBhbmQgaGF2ZSB0byBzaGFyZSBjb21tb24KK3JlcG9zaXRvcnkgcm9vdCwgaS5lLiBiZSBhbGwgdW5kZXIgYSBzaW5nbGUgcGFyZW50IHJlcG9zaXRvcnkgKGJ1dCBzZWUgYWxzbworIkFkdmFuY2VkIHdlYiBzZXJ2ZXIgc2V0dXAiIHNlY3Rpb24sICJXZWJzZXJ2ZXIgY29uZmlndXJhdGlvbiB3aXRoIG11bHRpcGxlCitwcm9qZWN0cycgcm9vdCIgc3Vic2VjdGlvbikuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJHByb2plY3Ryb290ID0gJy9wYXRoL3RvL3BhcmVudC9kaXJlY3RvcnknOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGAkcHJvamVjdHJvb3RgIGlzIGAvcHViL2dpdGAuICBZb3UgY2FuIGNoYW5nZSBpdCBkdXJpbmcKK2J1aWxkaW5nIGdpdHdlYiB2aWEgYEdJVFdFQl9QUk9KRUNUUk9PVGAgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworQnkgZGVmYXVsdCBhbGwgR2l0IHJlcG9zaXRvcmllcyB1bmRlciBgJHByb2plY3Ryb290YCBhcmUgdmlzaWJsZSBhbmQgYXZhaWxhYmxlCit0byBnaXR3ZWIuICBUaGUgbGlzdCBvZiBwcm9qZWN0cyBpcyBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBieSBzY2FubmluZyB0aGUKK2AkcHJvamVjdHJvb3RgIGRpcmVjdG9yeSBmb3IgR2l0IHJlcG9zaXRvcmllcyAoZm9yIG9iamVjdCBkYXRhYmFzZXMgdG8gYmUKK21vcmUgZXhhY3Q7IGdpdHdlYiBpcyBub3QgaW50ZXJlc3RlZCBpbiBhIHdvcmtpbmcgYXJlYSwgYW5kIGlzIGJlc3Qgc3VpdGVkCit0byBzaG93aW5nICJiYXJlIiByZXBvc2l0b3JpZXMpLgorCitUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeSBpbiBnaXR3ZWIgaXMgdGhlIHBhdGggdG8gaXRzIGAkR0lUX0RJUmAgKGl0cyBvYmplY3QKK2RhdGFiYXNlKSByZWxhdGl2ZSB0byBgJHByb2plY3Ryb290YC4gIFRoZXJlZm9yZSB0aGUgcmVwb3NpdG9yeSAkcmVwbyBjYW4gYmUKK2ZvdW5kIGF0ICIkcHJvamVjdHJvb3QvJHJlcG8iLgorCisKK1Byb2plY3RzIGxpc3QgZmlsZSBmb3JtYXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0luc3RlYWQgb2YgaGF2aW5nIGdpdHdlYiBmaW5kIHJlcG9zaXRvcmllcyBieSBzY2FubmluZyBmaWxlc3lzdGVtCitzdGFydGluZyBmcm9tICRwcm9qZWN0cm9vdCwgeW91IGNhbiBwcm92aWRlIGEgcHJlLWdlbmVyYXRlZCBsaXN0IG9mCit2aXNpYmxlIHByb2plY3RzIGJ5IHNldHRpbmcgYCRwcm9qZWN0c19saXN0YCB0byBwb2ludCB0byBhIHBsYWluIHRleHQKK2ZpbGUgd2l0aCBhIGxpc3Qgb2YgcHJvamVjdHMgKHdpdGggc29tZSBhZGRpdGlvbmFsIGluZm8pLgorCitUaGlzIGZpbGUgdXNlcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworKiBPbmUgcmVjb3JkIChmb3IgcHJvamVjdCAvIHJlcG9zaXRvcnkpIHBlciBsaW5lOyBkb2VzIG5vdCBzdXBwb3J0IGxpbmUKK2NvbnRpbnVhdGlvbiAobmV3bGluZSBlc2NhcGluZykuCisKKyogTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBhcmUgaWdub3JlZC4KKworKiBXaGl0ZXNwYWNlIHNlcGFyYXRlZCBmaWVsZHM7IGFueSBydW4gb2Ygd2hpdGVzcGFjZSBjYW4gYmUgdXNlZCBhcyBmaWVsZAorc2VwYXJhdG9yIChydWxlcyBmb3IgUGVybCdzICJgc3BsaXQoIiAiLCAkbGluZSlgIikuCisKKyogRmllbGRzIHVzZSBtb2RpZmllZCBVUkkgZW5jb2RpbmcsIGRlZmluZWQgaW4gUkZDIDM5ODYsIHNlY3Rpb24gMi4xCisoUGVyY2VudC1FbmNvZGluZyksIG9yIHJhdGhlciAiUXVlcnkgc3RyaW5nIGVuY29kaW5nIiAoc2VlCitodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9RdWVyeV9zdHJpbmcjVVJMX2VuY29kaW5nW10pLCB0aGUgZGlmZmVyZW5jZQorYmVpbmcgdGhhdCBTUCAoIiAiKSBjYW4gYmUgZW5jb2RlZCBhcyAie3BsdXN9IiAoYW5kIHRoZXJlZm9yZSAie3BsdXN9IiBoYXMgdG8gYmUKK2Fsc28gcGVyY2VudC1lbmNvZGVkKS4KKysKK1Jlc2VydmVkIGNoYXJhY3RlcnMgYXJlOiAiJSIgKHVzZWQgZm9yIGVuY29kaW5nKSwgIntwbHVzfSIgKGNhbiBiZSB1c2VkIHRvCitlbmNvZGUgU1BBQ0UpLCBhbGwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW4gUGVybCwgaW5jbHVkaW5nIFNQLAorVEFCIGFuZCBMRiwgKHVzZWQgdG8gc2VwYXJhdGUgZmllbGRzIGluIGEgcmVjb3JkKS4KKworKiBDdXJyZW50bHkgcmVjb2duaXplZCBmaWVsZHMgYXJlOgorPHJlcG9zaXRvcnkgcGF0aD46OgorCXBhdGggdG8gcmVwb3NpdG9yeSBHSVRfRElSLCByZWxhdGl2ZSB0byBgJHByb2plY3Ryb290YAorPHJlcG9zaXRvcnkgb3duZXI+OjoKKwlkaXNwbGF5ZWQgYXMgcmVwb3NpdG9yeSBvd25lciwgcHJlZmVyYWJseSBmdWxsIG5hbWUsIG9yIGVtYWlsLAorCW9yIGJvdGgKKworWW91IGNhbiBnZW5lcmF0ZSB0aGUgcHJvamVjdHMgbGlzdCBpbmRleCBmaWxlIHVzaW5nIHRoZSBwcm9qZWN0X2luZGV4IGFjdGlvbgorKHRoZSAnVFhUJyBsaW5rIG9uIHByb2plY3RzIGxpc3QgcGFnZSkgZGlyZWN0bHkgZnJvbSBnaXR3ZWI7IHNlZSBhbHNvCisiR2VuZXJhdGluZyBwcm9qZWN0cyBsaXN0IHVzaW5nIGdpdHdlYiIgc2VjdGlvbiBiZWxvdy4KKworRXhhbXBsZSBjb250ZW50czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitmb28uZ2l0ICAgICAgIEpvZStSK0hhY2tlcis8am9lQGV4YW1wbGUuY29tPgorZm9vL2Jhci5naXQgICBPK1crTmVyKzxvd25lckBleGFtcGxlLm9yZz4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQnkgZGVmYXVsdCB0aGlzIGZpbGUgY29udHJvbHMgb25seSB3aGljaCBwcm9qZWN0cyBhcmUgKnZpc2libGUqIG9uIHByb2plY3RzCitsaXN0IHBhZ2UgKG5vdGUgdGhhdCBlbnRyaWVzIHRoYXQgZG8gbm90IHBvaW50IHRvIGNvcnJlY3RseSByZWNvZ25pemVkIEdpdAorcmVwb3NpdG9yaWVzIHdvbid0IGJlIGRpc3BsYXllZCBieSBnaXR3ZWIpLiAgRXZlbiBpZiBhIHByb2plY3QgaXMgbm90Cit2aXNpYmxlIG9uIHByb2plY3RzIGxpc3QgcGFnZSwgeW91IGNhbiB2aWV3IGl0IG5ldmVydGhlbGVzcyBieSBoYW5kLWNyYWZ0aW5nCithIGdpdHdlYiBVUkwuICBCeSBzZXR0aW5nIGAkc3RyaWN0X2V4cG9ydGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdHdlYi5jb25mWzVdKSB0byB0cnVlIHZhbHVlIHlvdSBjYW4gYWxsb3cgdmlld2luZyBvbmx5IG9mCityZXBvc2l0b3JpZXMgYWxzbyBzaG93biBvbiB0aGUgb3ZlcnZpZXcgcGFnZSAoaS5lLiBvbmx5IHByb2plY3RzIGV4cGxpY2l0bHkKK2xpc3RlZCBpbiBwcm9qZWN0cyBsaXN0IGZpbGUgd2lsbCBiZSBhY2Nlc3NpYmxlKS4KKworCitHZW5lcmF0aW5nIHByb2plY3RzIGxpc3QgdXNpbmcgZ2l0d2ViCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1dlIGFzc3VtZSB0aGF0IEdJVFdFQl9DT05GSUcgaGFzIGl0cyBkZWZhdWx0IE1ha2VmaWxlIHZhbHVlLCBuYW1lbHkKKydnaXR3ZWJfY29uZmlnLnBlcmwnLiBQdXQgdGhlIGZvbGxvd2luZyBpbiAnZ2l0d2ViX21ha2VfaW5kZXgucGVybCcgZmlsZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlYWRfY29uZmlnX2ZpbGUoImdpdHdlYl9jb25maWcucGVybCIpOworJHByb2plY3RzX2xpc3QgPSAkcHJvamVjdHJvb3Q7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4gY3JlYXRlIHRoZSBmb2xsb3dpbmcgc2NyaXB0IHRvIGdldCBsaXN0IG9mIHByb2plY3QgaW4gdGhlIGZvcm1hdAorc3VpdGFibGUgZm9yIEdJVFdFQl9MSVNUIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKG9yCitgJHByb2plY3RzX2xpc3RgIHZhcmlhYmxlIGluIGdpdHdlYiBjb25maWcpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKKworZXhwb3J0IEdJVFdFQl9DT05GSUc9ImdpdHdlYl9tYWtlX2luZGV4LnBlcmwiCitleHBvcnQgR0FURVdBWV9JTlRFUkZBQ0U9IkNHSS8xLjEiCitleHBvcnQgSFRUUF9BQ0NFUFQ9IiovKiIKK2V4cG9ydCBSRVFVRVNUX01FVEhPRD0iR0VUIgorZXhwb3J0IFFVRVJZX1NUUklORz0iYT1wcm9qZWN0X2luZGV4IgorCitwZXJsIC0tIC92YXIvd3d3L2NnaS1iaW4vZ2l0d2ViLmNnaQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSdW4gdGhpcyBzY3JpcHQgYW5kIHNhdmUgaXRzIG91dHB1dCB0byBhIGZpbGUuICBUaGlzIGZpbGUgY291bGQgdGhlbiBiZSB1c2VkCithcyBwcm9qZWN0cyBsaXN0IGZpbGUsIHdoaWNoIG1lYW5zIHRoYXQgeW91IGNhbiBzZXQgYCRwcm9qZWN0c19saXN0YCB0byBpdHMKK2ZpbGVuYW1lLgorCisKK0NvbnRyb2xsaW5nIGFjY2VzcyB0byBHaXQgcmVwb3NpdG9yaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQnkgZGVmYXVsdCBhbGwgR2l0IHJlcG9zaXRvcmllcyB1bmRlciBgJHByb2plY3Ryb290YCBhcmUgdmlzaWJsZSBhbmQKK2F2YWlsYWJsZSB0byBnaXR3ZWIuICBZb3UgY2FuIGhvd2V2ZXIgY29uZmlndXJlIGhvdyBnaXR3ZWIgY29udHJvbHMgYWNjZXNzCit0byByZXBvc2l0b3JpZXMuCisKKyogQXMgZGVzY3JpYmVkIGluICJQcm9qZWN0cyBsaXN0IGZpbGUgZm9ybWF0IiBzZWN0aW9uLCB5b3UgY2FuIGNvbnRyb2wgd2hpY2gKK3Byb2plY3RzIGFyZSAqdmlzaWJsZSogYnkgc2VsZWN0aXZlbHkgaW5jbHVkaW5nIHJlcG9zaXRvcmllcyBpbiBwcm9qZWN0cworbGlzdCBmaWxlLCBhbmQgc2V0dGluZyBgJHByb2plY3RzX2xpc3RgIGdpdHdlYiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvCitwb2ludCB0byBpdC4gIFdpdGggYCRzdHJpY3RfZXhwb3J0YCBzZXQsIHByb2plY3RzIGxpc3QgZmlsZSBjYW4gYmUgdXNlZCB0bworY29udHJvbCB3aGljaCByZXBvc2l0b3JpZXMgYXJlICphdmFpbGFibGUqIGFzIHdlbGwuCisKKyogWW91IGNhbiBjb25maWd1cmUgZ2l0d2ViIHRvIG9ubHkgbGlzdCBhbmQgYWxsb3cgdmlld2luZyBvZiB0aGUgZXhwbGljaXRseQorZXhwb3J0ZWQgcmVwb3NpdG9yaWVzLCB2aWEgYCRleHBvcnRfb2tgIHZhcmlhYmxlIGluIGdpdHdlYiBjb25maWcgZmlsZTsgc2VlCitsaW5rZ2l0OmdpdHdlYi5jb25mWzVdIG1hbnBhZ2UuICBJZiBpdCBldmFsdWF0ZXMgdG8gdHJ1ZSwgZ2l0d2ViIHNob3dzCityZXBvc2l0b3JpZXMgb25seSBpZiB0aGlzIGZpbGUgbmFtZWQgYnkgYCRleHBvcnRfb2tgIGV4aXN0cyBpbiBpdHMgb2JqZWN0CitkYXRhYmFzZSAoaWYgZGlyZWN0b3J5IGhhcyB0aGUgbWFnaWMgZmlsZSBuYW1lZCBgJGV4cG9ydF9va2ApLgorKworRm9yIGV4YW1wbGUgbGlua2dpdDpnaXQtZGFlbW9uWzFdIGJ5IGRlZmF1bHQgKHVubGVzcyBgLS1leHBvcnQtYWxsYCBvcHRpb24KK2lzIHVzZWQpIGFsbG93cyBwdWxsaW5nIG9ubHkgZm9yIHRob3NlIHJlcG9zaXRvcmllcyB0aGF0IGhhdmUKKydnaXQtZGFlbW9uLWV4cG9ydC1vaycgZmlsZS4gIEFkZGluZworKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkZXhwb3J0X29rID0gImdpdC1kYWVtb24tZXhwb3J0LW9rIjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCittYWtlcyBnaXR3ZWIgc2hvdyBhbmQgYWxsb3cgYWNjZXNzIG9ubHkgdG8gdGhvc2UgcmVwb3NpdG9yaWVzIHRoYXQgY2FuIGJlCitmZXRjaGVkIGZyb20gdmlhIGBnaXQ6Ly9gIHByb3RvY29sLgorCisqIEZpbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgYW4gYXJiaXRyYXJ5IHBlcmwgc3Vicm91dGluZSB0aGF0IHdpbGwKK2JlIGNhbGxlZCBmb3IgZWFjaCByZXBvc2l0b3J5IHRvIGRldGVybWluZSBpZiBpdCBjYW4gYmUgZXhwb3J0ZWQuICBUaGUKK3N1YnJvdXRpbmUgcmVjZWl2ZXMgYW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCAocmVwb3NpdG9yeSkgYXMgaXRzIG9ubHkKK3BhcmFtZXRlciAoaS5lLiAiJHByb2plY3Ryb290LyRwcm9qZWN0IikuCisrCitGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSBtb2RfcGVybCB0byBydW4gdGhlIHNjcmlwdCwgYW5kIGhhdmUgZHVtYgorSFRUUCBwcm90b2NvbCBhdXRoZW50aWNhdGlvbiBjb25maWd1cmVkIGZvciB5b3VyIHJlcG9zaXRvcmllcywgeW91CitjYW4gdXNlIHRoZSBmb2xsb3dpbmcgaG9vayB0byBhbGxvdyBhY2Nlc3Mgb25seSBpZiB0aGUgdXNlciBpcworYXV0aG9yaXplZCB0byByZWFkIHRoZSBmaWxlczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZXhwb3J0X2F1dGhfaG9vayA9IHN1YiB7CisJdXNlIEFwYWNoZTI6OlN1YlJlcXVlc3QgKCk7CisJdXNlIEFwYWNoZTI6OkNvbnN0IC1jb21waWxlID0+IHF3KEhUVFBfT0spOworCW15ICRwYXRoID0gIiRfWzBdL0hFQUQiOworCW15ICRyICAgID0gQXBhY2hlMjo6UmVxdWVzdFV0aWwtPnJlcXVlc3Q7CisJbXkgJHN1YiAgPSAkci0+bG9va3VwX2ZpbGUoJHBhdGgpOworCXJldHVybiAkc3ViLT5maWxlbmFtZSBlcSAkcGF0aAorCSAgICAmJiAkc3ViLT5zdGF0dXMgPT0gQXBhY2hlMjo6Q29uc3Q6OkhUVFBfT0s7Cit9OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitQZXItcmVwb3NpdG9yeSBnaXR3ZWIgY29uZmlndXJhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gY29uZmlndXJlIGluZGl2aWR1YWwgcmVwb3NpdG9yaWVzIHNob3duIGluIGdpdHdlYiBieSBjcmVhdGluZyBmaWxlCitpbiB0aGUgYEdJVF9ESVJgIG9mIEdpdCByZXBvc2l0b3J5LCBvciBieSBzZXR0aW5nIHNvbWUgcmVwbyBjb25maWd1cmF0aW9uCit2YXJpYWJsZSAoaW4gYEdJVF9ESVIvY29uZmlnYCwgc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKK1lvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgZmlsZXMgaW4gcmVwb3NpdG9yeToKKworUkVBRE1FLmh0bWw6OgorCUEgaHRtbCBmaWxlIChIVE1MIGZyYWdtZW50KSB3aGljaCBpcyBpbmNsdWRlZCBvbiB0aGUgZ2l0d2ViIHByb2plY3QKKwkic3VtbWFyeSIgcGFnZSBpbnNpZGUgYDxkaXY+YCBibG9jayBlbGVtZW50LiBZb3UgY2FuIHVzZSBpdCBmb3IgbG9uZ2VyCisJZGVzY3JpcHRpb24gb2YgYSBwcm9qZWN0LCB0byBwcm92aWRlIGxpbmtzIChmb3IgZXhhbXBsZSB0byBwcm9qZWN0J3MKKwlob21lcGFnZSksIGV0Yy4gVGhpcyBpcyByZWNvZ25pemVkIG9ubHkgaWYgWFNTIHByZXZlbnRpb24gaXMgb2ZmCisJKGAkcHJldmVudF94c3NgIGlzIGZhbHNlLCBzZWUgbGlua2dpdDpnaXR3ZWIuY29uZls1XSk7IGEgd2F5IHRvIGluY2x1ZGUKKwlhIFJFQURNRSBzYWZlbHkgd2hlbiBYU1MgcHJldmVudGlvbiBpcyBvbiBtYXkgYmUgd29ya2VkIG91dCBpbiB0aGUKKwlmdXR1cmUuCisKK2Rlc2NyaXB0aW9uIChvciBgZ2l0d2ViLmRlc2NyaXB0aW9uYCk6OgorCVNob3J0IChzaG9ydGVuZWQgdG8gYCRwcm9qZWN0c19saXN0X2Rlc2NyaXB0aW9uX3dpZHRoYCBpbiB0aGUgcHJvamVjdHMKKwlsaXN0IHBhZ2UsIHdoaWNoIGlzIDI1IGNoYXJhY3RlcnMgYnkgZGVmYXVsdDsgc2VlCisJbGlua2dpdDpnaXR3ZWIuY29uZls1XSkgc2luZ2xlIGxpbmUgZGVzY3JpcHRpb24gb2YgYSBwcm9qZWN0IChvZiBhCisJcmVwb3NpdG9yeSkuICBQbGFpbiB0ZXh0IGZpbGU7IEhUTUwgd2lsbCBiZSBlc2NhcGVkLiAgQnkgZGVmYXVsdCBzZXQgdG8KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1VubmFtZWQgcmVwb3NpdG9yeTsgZWRpdCB0aGlzIGZpbGUgdG8gbmFtZSBpdCBmb3IgZ2l0d2ViLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworZnJvbSB0aGUgdGVtcGxhdGUgZHVyaW5nIHJlcG9zaXRvcnkgY3JlYXRpb24sIHVzdWFsbHkgaW5zdGFsbGVkIGluCitgL3Vzci9zaGFyZS9naXQtY29yZS90ZW1wbGF0ZXMvYC4gIFlvdSBjYW4gdXNlIHRoZSBgZ2l0d2ViLmRlc2NyaXB0aW9uYCByZXBvCitjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBidXQgdGhlIGZpbGUgdGFrZXMgcHJlY2VkZW5jZS4KKworY2F0ZWdvcnkgKG9yIGBnaXR3ZWIuY2F0ZWdvcnlgKTo6CisJU2luZ2UgbGluZSBjYXRlZ29yeSBvZiBhIHByb2plY3QsIHVzZWQgdG8gZ3JvdXAgcHJvamVjdHMgaWYKKwlgJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllc2AgaXMgZW5hYmxlZC4gIEJ5IGRlZmF1bHQgKGZpbGUgYW5kCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhYnNlbnQpLCB1bmNhdGVnb3JpemVkIHByb2plY3RzIGFyZSBwdXQgaW4gdGhlCisJYCRwcm9qZWN0X2xpc3RfZGVmYXVsdF9jYXRlZ29yeWAgY2F0ZWdvcnkuICBZb3UgY2FuIHVzZSB0aGUKKwlgZ2l0d2ViLmNhdGVnb3J5YCByZXBvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGJ1dCB0aGUgZmlsZSB0YWtlcworCXByZWNlZGVuY2UuCisrCitUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYCRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXNgIGFuZAorYCRwcm9qZWN0X2xpc3RfZGVmYXVsdF9jYXRlZ29yeWAgYXJlIGRlc2NyaWJlZCBpbiBsaW5rZ2l0OmdpdHdlYi5jb25mWzVdCisKK2Nsb25ldXJsIChvciBtdWx0aXBsZS12YWx1ZWQgYGdpdHdlYi51cmxgKTo6CisJRmlsZSB3aXRoIHJlcG9zaXRvcnkgVVJMICh1c2VkIGZvciBjbG9uZSBhbmQgZmV0Y2gpLCBvbmUgcGVyIGxpbmUuCisJRGlzcGxheWVkIGluIHRoZSBwcm9qZWN0IHN1bW1hcnkgcGFnZS4gWW91IGNhbiB1c2UgbXVsdGlwbGUtdmFsdWVkCisJYGdpdHdlYi51cmxgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IgdGhhdCwgYnV0IHRoZSBmaWxlCisJdGFrZXMgcHJlY2VkZW5jZS4KKysKK1RoaXMgaXMgcGVyLXJlcG9zaXRvcnkgZW5oYW5jZW1lbnQgLyB2ZXJzaW9uIG9mIGdsb2JhbCBwcmVmaXgtYmFzZWQKK2BAZ2l0X2Jhc2VfdXJsX2xpc3RgIGdpdHdlYiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChzZWUKK2xpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0pLgorCitnaXR3ZWIub3duZXI6OgorCVlvdSBjYW4gdXNlIHRoZSBgZ2l0d2ViLm93bmVyYCByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gc2V0CisJcmVwb3NpdG9yeSdzIG93bmVyLiAgSXQgaXMgZGlzcGxheWVkIGluIHRoZSBwcm9qZWN0IGxpc3QgYW5kIHN1bW1hcnkKKwlwYWdlLgorKworSWYgaXQncyBub3Qgc2V0LCBmaWxlc3lzdGVtIGRpcmVjdG9yeSdzIG93bmVyIGlzIHVzZWQgKHZpYSBHRUNPUyBmaWVsZCwKK2kuZS4gcmVhbCBuYW1lIGZpZWxkIGZyb20gKmdldHB3dWlkKigzKSkgaWYgYCRwcm9qZWN0c19saXN0YCBpcyB1bnNldAorKGdpdHdlYiBzY2FucyBgJHByb2plY3Ryb290YCBmb3IgcmVwb3NpdG9yaWVzKTsgaWYgYCRwcm9qZWN0c19saXN0YAorcG9pbnRzIHRvIGZpbGUgd2l0aCBsaXN0IG9mIHJlcG9zaXRvcmllcywgdGhlbiBwcm9qZWN0IG93bmVyIGRlZmF1bHRzIHRvCit2YWx1ZSBmcm9tIHRoaXMgZmlsZSBmb3IgZ2l2ZW4gcmVwb3NpdG9yeS4KKwordmFyaW91cyBgZ2l0d2ViLipgIGNvbmZpZyB2YXJpYWJsZXMgKGluIGNvbmZpZyk6OgorCVJlYWQgZGVzY3JpcHRpb24gb2YgYCVmZWF0dXJlYCBoYXNoIGZvciBkZXRhaWxlZCBsaXN0LCBhbmQgZGVzY3JpcHRpb25zLgorCVNlZSBhbHNvICJDb25maWd1cmluZyBnaXR3ZWIgZmVhdHVyZXMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXR3ZWIuY29uZls1XQorCisKK0FDVElPTlMsIEFORCBVUkxTCistLS0tLS0tLS0tLS0tLS0tLQorR2l0d2ViIGNhbiB1c2UgcGF0aF9pbmZvIChjb21wb25lbnQpIGJhc2VkIFVSTHMsIG9yIGl0IGNhbiBwYXNzIGFsbCBuZWNlc3NhcnkKK2luZm9ybWF0aW9uIHZpYSBxdWVyeSBwYXJhbWV0ZXJzLiAgVGhlIHR5cGljYWwgZ2l0d2ViIFVSTHMgYXJlIGJyb2tlbiBkb3duIGluIHRvCitmaXZlIGNvbXBvbmVudHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4vZ2l0d2ViLmNnaS88cmVwbz4vPGFjdGlvbj4vPHJldmlzaW9uPjovPHBhdGg+Pzxhcmd1bWVudHM+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityZXBvOjoKKwlUaGUgcmVwb3NpdG9yeSB0aGUgYWN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIG9uLgorKworQWxsIGFjdGlvbnMgZXhjZXB0IGZvciB0aG9zZSB0aGF0IGxpc3QgYWxsIGF2YWlsYWJsZSBwcm9qZWN0cywKK2luIHdoYXRldmVyIGZvcm0sIHJlcXVpcmUgdGhpcyBwYXJhbWV0ZXIuCisKK2FjdGlvbjo6CisJVGhlIGFjdGlvbiB0aGF0IHdpbGwgYmUgcnVuLiAgRGVmYXVsdHMgdG8gJ3Byb2plY3RzX2xpc3QnIGlmIHJlcG8KKwlpcyBub3Qgc2V0LCBhbmQgdG8gJ3N1bW1hcnknIG90aGVyd2lzZS4KKworcmV2aXNpb246OgorCVJldmlzaW9uIHNob3duLiAgRGVmYXVsdHMgdG8gSEVBRC4KKworcGF0aDo6CisJVGhlIHBhdGggd2l0aGluIHRoZSA8cmVwb3NpdG9yeT4gdGhhdCB0aGUgYWN0aW9uIGlzIHBlcmZvcm1lZCBvbiwKKwlmb3IgdGhvc2UgYWN0aW9ucyB0aGF0IHJlcXVpcmUgaXQuCisKK2FyZ3VtZW50czo6CisJQW55IGFyZ3VtZW50cyB0aGF0IGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiB0aGUgYWN0aW9uLgorCitTb21lIGFjdGlvbnMgcmVxdWlyZSBvciBhbGxvdyB0byBzcGVjaWZ5IHR3byByZXZpc2lvbnMsIGFuZCBzb21ldGltZXMgZXZlbiB0d28KK3BhdGhuYW1lcy4gIEluIG1vc3QgZ2VuZXJhbCBmb3JtIHN1Y2ggcGF0aF9pbmZvIChjb21wb25lbnQpIGJhc2VkIGdpdHdlYiBVUkwKK2xvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy4uLi9naXR3ZWIuY2dpLzxyZXBvPi88YWN0aW9uPi88cmV2aXNpb25fZnJvbT46LzxwYXRoX2Zyb20+Li48cmV2aXNpb25fdG8+Oi88cGF0aF90bz4/PGFyZ3VtZW50cz4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRWFjaCBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBzdWJyb3V0aW5lLCBhbmQgbXVzdCBiZSBwcmVzZW50IGluICVhY3Rpb25zCitoYXNoLiAgU29tZSBhY3Rpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgbXVzdCBiZSB0dXJuZWQgb24gdmlhIGZlYXR1cmUKK21lY2hhbmlzbS4gIEZvciBleGFtcGxlIHRvIGVuYWJsZSAnYmxhbWUnIHZpZXcgYWRkIHRoZSBmb2xsb3dpbmcgdG8gZ2l0d2ViCitjb25maWd1cmF0aW9uIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZmVhdHVyZXsnYmxhbWUnfXsnZGVmYXVsdCd9ID0gWzFdOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitBY3Rpb25zOgorfn5+fn5+fn4KK1RoZSBzdGFuZGFyZCBhY3Rpb25zIGFyZToKKworcHJvamVjdF9saXN0OjoKKwlMaXN0cyB0aGUgYXZhaWxhYmxlIEdpdCByZXBvc2l0b3JpZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvbW1hbmQgaWYgbm8KKwlyZXBvc2l0b3J5IGlzIHNwZWNpZmllZCBpbiB0aGUgVVJMLgorCitzdW1tYXJ5OjoKKwlEaXNwbGF5cyBzdW1tYXJ5IGFib3V0IGdpdmVuIHJlcG9zaXRvcnkuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvbW1hbmQgaWYKKwlubyBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIFVSTCwgYW5kIG9ubHkgcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQuCisKK2hlYWRzOjoKK3JlbW90ZXM6OgorCUxpc3RzIGFsbCBsb2NhbCBvciBhbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGluIGdpdmVuIHJlcG9zaXRvcnkuCisrCitUaGUgbGF0dGVyIGlzIG5vdCBhdmFpbGFibGUgYnkgZGVmYXVsdCwgdW5sZXNzIGNvbmZpZ3VyZWQuCisKK3RhZ3M6OgorCUxpc3QgYWxsIHRhZ3MgKGxpZ2h0d2VpZ2h0IGFuZCBhbm5vdGF0ZWQpIGluIGdpdmVuIHJlcG9zaXRvcnkuCisKK2Jsb2I6OgordHJlZTo6CisJU2hvd3MgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiBhIGdpdmVuIHJlcG9zaXRvcnkgcGF0aCwgYXQgZ2l2ZW4KKwlyZXZpc2lvbi4gIFRoaXMgaXMgZGVmYXVsdCBjb21tYW5kIGlmIG5vIGFjdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlIFVSTCwKKwlhbmQgcGF0aCBpcyBnaXZlbi4KKworYmxvYl9wbGFpbjo6CisJUmV0dXJucyB0aGUgcmF3IGRhdGEgZm9yIHRoZSBmaWxlIGluIGdpdmVuIHJlcG9zaXRvcnksIGF0IGdpdmVuIHBhdGggYW5kCisJcmV2aXNpb24uICBMaW5rcyB0byB0aGlzIGFjdGlvbiBhcmUgbWFya2VkICdyYXcnLgorCitibG9iZGlmZjo6CisJU2hvd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcmV2aXNpb25zIG9mIHRoZSBzYW1lIGZpbGUuCisKK2JsYW1lOjoKK2JsYW1lX2luY3JlbWVudGFsOjoKKwlTaG93cyB0aGUgYmxhbWUgKGFsc28gY2FsbGVkIGFubm90YXRpb24pIGluZm9ybWF0aW9uIGZvciBhIGZpbGUuIE9uIGEKKwlwZXIgbGluZSBiYXNpcyBpdCBzaG93cyB0aGUgcmV2aXNpb24gaW4gd2hpY2ggdGhhdCBsaW5lIHdhcyBsYXN0IGNoYW5nZWQKKwlhbmQgdGhlIHVzZXIgdGhhdCBjb21taXR0ZWQgdGhlIGNoYW5nZS4gIFRoZSBpbmNyZW1lbnRhbCB2ZXJzaW9uICh3aGljaAorCWlmIGNvbmZpZ3VyZWQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5IHdoZW4gSmF2YVNjcmlwdCBpcyBlbmFibGVkKSB1c2VzCisJQWpheCB0byBpbmNyZW1lbnRhbGx5IGFkZCBibGFtZSBpbmZvIHRvIHRoZSBjb250ZW50cyBvZiBnaXZlbiBmaWxlLgorKworVGhpcyBhY3Rpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKworY29tbWl0OjoKK2NvbW1pdGRpZmY6OgorCVNob3dzIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgY29tbWl0IGluIGEgcmVwb3NpdG9yeS4gIFRoZSAnY29tbWl0JworCXZpZXcgc2hvd3MgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0IGluIG1vcmUgZGV0YWlsLCB0aGUgJ2NvbW1pdGRpZmYnCisJYWN0aW9uIHNob3dzIGNoYW5nZXNldCBmb3IgZ2l2ZW4gY29tbWl0LgorCitwYXRjaDo6CisJUmV0dXJucyB0aGUgY29tbWl0IGluIHBsYWluIHRleHQgbWFpbCBmb3JtYXQsIHN1aXRhYmxlIGZvciBhcHBseWluZyB3aXRoCisJbGlua2dpdDpnaXQtYW1bMV0uCisKK3RhZzo6CisJRGlzcGxheSBzcGVjaWZpYyBhbm5vdGF0ZWQgdGFnICh0YWcgb2JqZWN0KS4KKworbG9nOjoKK3Nob3J0bG9nOjoKKwlTaG93cyBsb2cgaW5mb3JtYXRpb24gKGNvbW1pdCBtZXNzYWdlIG9yIGp1c3QgY29tbWl0IHN1YmplY3QpIGZvciBhCisJZ2l2ZW4gYnJhbmNoIChzdGFydGluZyBmcm9tIGdpdmVuIHJldmlzaW9uKS4KKysKK1RoZSAnc2hvcnRsb2cnIHZpZXcgaXMgbW9yZSBjb21wYWN0OyBpdCBzaG93cyBvbmUgY29tbWl0IHBlciBsaW5lLgorCitoaXN0b3J5OjoKKwlTaG93cyBoaXN0b3J5IG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBpbiBhIGdpdmVuIHJlcG9zaXRvcnkgcGF0aCwKKwlzdGFydGluZyBmcm9tIGdpdmVuIHJldmlzaW9uIChkZWZhdWx0cyB0byBIRUFELCBpLmUuIGRlZmF1bHQgYnJhbmNoKS4KKysKK1RoaXMgdmlldyBpcyBzaW1pbGFyIHRvICdzaG9ydGxvZycgdmlldy4KKworcnNzOjoKK2F0b206OgorCUdlbmVyYXRlcyBhbiBSU1MgKG9yIEF0b20pIGZlZWQgb2YgY2hhbmdlcyB0byByZXBvc2l0b3J5LgorCisKK1dFQlNFUlZFUiBDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBzZWN0aW9uIGV4cGxhaW5zIGhvdyB0byBjb25maWd1cmUgc29tZSBjb21tb24gd2Vic2VydmVycyB0byBydW4gZ2l0d2ViLiBJbgorYWxsIGNhc2VzLCBgL3BhdGgvdG8vZ2l0d2ViYCBpbiB0aGUgZXhhbXBsZXMgaXMgdGhlIGRpcmVjdG9yeSB5b3UgcmFuIGluc3RhbGxlZAorZ2l0d2ViIGluLCBhbmQgY29udGFpbnMgYGdpdHdlYl9jb25maWcucGVybGAuCisKK0lmIHlvdSd2ZSBjb25maWd1cmVkIGEgd2ViIHNlcnZlciB0aGF0IGlzbid0IGxpc3RlZCBoZXJlIGZvciBnaXR3ZWIsIHBsZWFzZSBzZW5kCitpbiB0aGUgaW5zdHJ1Y3Rpb25zIHNvIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisKK0FwYWNoZSBhcyBDR0kKK35+fn5+fn5+fn5+fn4KK0FwYWNoZSBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBDR0kgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5IGluCit3aGljaCBnaXR3ZWIgaXMgaW5zdGFsbGVkLiAgTGV0J3MgYXNzdW1lIHRoYXQgaXQgaXMgYC92YXIvd3d3L2NnaS1iaW5gCitkaXJlY3RvcnkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTY3JpcHRBbGlhcyAvY2dpLWJpbi8gIi92YXIvd3d3L2NnaS1iaW4vIgorCis8RGlyZWN0b3J5ICIvdmFyL3d3dy9jZ2ktYmluIj4KKyAgICBPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltbGlua3MgRXhlY0NHSQorICAgIEFsbG93T3ZlcnJpZGUgTm9uZQorICAgIE9yZGVyIGFsbG93LGRlbnkKKyAgICBBbGxvdyBmcm9tIGFsbAorPC9EaXJlY3Rvcnk+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoYXQgY29uZmlndXJhdGlvbiB0aGUgZnVsbCBwYXRoIHRvIGJyb3dzZSByZXBvc2l0b3JpZXMgd291bGQgYmU6CisKKyAgaHR0cDovL3NlcnZlci9jZ2ktYmluL2dpdHdlYi5jZ2kKKworQXBhY2hlIHdpdGggbW9kX3BlcmwsIHZpYSBNb2RQZXJsOjpSZWdpc3RyeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorWW91IGNhbiB1c2UgbW9kX3Blcmwgd2l0aCBnaXR3ZWIuICBZb3UgbXVzdCBpbnN0YWxsIEFwYWNoZTo6UmVnaXN0cnkKKyhmb3IgbW9kX3BlcmwgMS54KSBvciBNb2RQZXJsOjpSZWdpc3RyeSAoZm9yIG1vZF9wZXJsIDIueCkgdG8gZW5hYmxlCit0aGlzIHN1cHBvcnQuCisKK0Fzc3VtaW5nIHRoYXQgZ2l0d2ViIGlzIGluc3RhbGxlZCB0byBgL3Zhci93d3cvcGVybGAsIHRoZSBmb2xsb3dpbmcKK0FwYWNoZSBjb25maWd1cmF0aW9uIChmb3IgbW9kX3BlcmwgMi54KSBpcyBzdWl0YWJsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FsaWFzIC9wZXJsICIvdmFyL3d3dy9wZXJsIgorCis8RGlyZWN0b3J5ICIvdmFyL3d3dy9wZXJsIj4KKyAgICBTZXRIYW5kbGVyIHBlcmwtc2NyaXB0CisgICAgUGVybFJlc3BvbnNlSGFuZGxlciBNb2RQZXJsOjpSZWdpc3RyeQorICAgIFBlcmxPcHRpb25zICtQYXJzZUhlYWRlcnMKKyAgICBPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltbGlua3MgK0V4ZWNDR0kKKyAgICBBbGxvd092ZXJyaWRlIE5vbmUKKyAgICBPcmRlciBhbGxvdyxkZW55CisgICAgQWxsb3cgZnJvbSBhbGwKKzwvRGlyZWN0b3J5PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24gdGhlIGZ1bGwgcGF0aCB0byBicm93c2UgcmVwb3NpdG9yaWVzIHdvdWxkIGJlOgorCisgIGh0dHA6Ly9zZXJ2ZXIvcGVybC9naXR3ZWIuY2dpCisKK0FwYWNoZSB3aXRoIEZhc3RDR0kKK35+fn5+fn5+fn5+fn5+fn5+fn4KK0dpdHdlYiB3b3JrcyB3aXRoIEFwYWNoZSBhbmQgRmFzdENHSS4gIEZpcnN0IHlvdSBuZWVkIHRvIHJlbmFtZSwgY29weQorb3Igc3ltbGluayBnaXR3ZWIuY2dpIHRvIGdpdHdlYi5mY2dpLiAgTGV0J3MgYXNzdW1lIHRoYXQgZ2l0d2ViIGlzCitpbnN0YWxsZWQgaW4gYC91c3Ivc2hhcmUvZ2l0d2ViYCBkaXJlY3RvcnkuICBUaGUgZm9sbG93aW5nIEFwYWNoZQorY29uZmlndXJhdGlvbiBpcyBzdWl0YWJsZSAoVU5URVNURUQhKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRmFzdENnaVNlcnZlciAvdXNyL3NoYXJlL2dpdHdlYi9naXR3ZWIuY2dpCitTY3JpcHRBbGlhcyAvZ2l0d2ViIC91c3Ivc2hhcmUvZ2l0d2ViL2dpdHdlYi5jZ2kKKworQWxpYXMgL2dpdHdlYi9zdGF0aWMgL3Vzci9zaGFyZS9naXR3ZWIvc3RhdGljCis8RGlyZWN0b3J5IC91c3Ivc2hhcmUvZ2l0d2ViL3N0YXRpYz4KKyAgICBTZXRIYW5kbGVyIGRlZmF1bHQtaGFuZGxlcgorPC9EaXJlY3Rvcnk+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoYXQgY29uZmlndXJhdGlvbiB0aGUgZnVsbCBwYXRoIHRvIGJyb3dzZSByZXBvc2l0b3JpZXMgd291bGQgYmU6CisKKyAgaHR0cDovL3NlcnZlci9naXR3ZWIKKworCitBRFZBTkNFRCBXRUIgU0VSVkVSIFNFVFVQCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbGwgb2YgdGhvc2UgZXhhbXBsZXMgdXNlIHJlcXVlc3QgcmV3cml0aW5nLCBhbmQgbmVlZCBgbW9kX3Jld3JpdGVgCisob3IgZXF1aXZhbGVudDsgZXhhbXBsZXMgYmVsb3cgYXJlIHdyaXR0ZW4gZm9yIEFwYWNoZSkuCisKK1NpbmdsZSBVUkwgZm9yIGdpdHdlYiBhbmQgZm9yIGZldGNoaW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSWYgeW91IHdhbnQgdG8gaGF2ZSBvbmUgVVJMIGZvciBib3RoIGdpdHdlYiBhbmQgeW91ciBgaHR0cDovL2AKK3JlcG9zaXRvcmllcywgeW91IGNhbiBjb25maWd1cmUgQXBhY2hlIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxWaXJ0dWFsSG9zdCAqOjgwPgorICAgIFNlcnZlck5hbWUgICAgZ2l0LmV4YW1wbGUub3JnCisgICAgRG9jdW1lbnRSb290ICAvcHViL2dpdAorICAgIFNldEVudiAgICAgICAgR0lUV0VCX0NPTkZJRyAgIC9ldGMvZ2l0d2ViLmNvbmYKKworICAgICMgdHVybmluZyBvbiBtb2QgcmV3cml0ZQorICAgIFJld3JpdGVFbmdpbmUgb24KKworICAgICMgbWFrZSB0aGUgZnJvbnQgcGFnZSBhbiBpbnRlcm5hbCByZXdyaXRlIHRvIHRoZSBnaXR3ZWIgc2NyaXB0CisgICAgUmV3cml0ZVJ1bGUgXi8kICAvY2dpLWJpbi9naXR3ZWIuY2dpCisKKyAgICAjIG1ha2UgYWNjZXNzIGZvciAiZHVtYiBjbGllbnRzIiB3b3JrCisgICAgUmV3cml0ZVJ1bGUgXi8oLipcLmdpdC8oPyEvPyhIRUFEfGluZm98b2JqZWN0c3xyZWZzKSkuKik/JCBcCisJCS9jZ2ktYmluL2dpdHdlYi5jZ2kle1JFUVVFU1RfVVJJfSAgW0wsUFRdCis8L1ZpcnR1YWxIb3N0PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24gZXhwZWN0cyB5b3VyIHB1YmxpYyByZXBvc2l0b3JpZXMgdG8gbGl2ZSB1bmRlcgorYC9wdWIvZ2l0YCBhbmQgd2lsbCBzZXJ2ZSB0aGVtIGFzIGBodHRwOi8vZ2l0LmRvbWFpbi5vcmcvZGlyLXVuZGVyLXB1Yi1naXRgLAorYm90aCBhcyBjbG9uYWJsZSBHaXQgVVJMIGFuZCBhcyBicm93c2VhYmxlIGdpdHdlYiBpbnRlcmZhY2UuICBJZiB5b3UgdGhlbgorc3RhcnQgeW91ciBsaW5rZ2l0OmdpdC1kYWVtb25bMV0gd2l0aCBgLS1iYXNlLXBhdGg9L3B1Yi9naXQgLS1leHBvcnQtYWxsYAordGhlbiB5b3UgY2FuIGV2ZW4gdXNlIHRoZSBgZ2l0Oi8vYCBVUkwgd2l0aCBleGFjdGx5IHRoZSBzYW1lIHBhdGguCisKK1NldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRXRUJfQ09ORklHYCB3aWxsIHRlbGwgZ2l0d2ViIHRvIHVzZSB0aGUKK25hbWVkIGZpbGUgKGkuZS4gaW4gdGhpcyBleGFtcGxlIGAvZXRjL2dpdHdlYi5jb25mYCkgYXMgYSBjb25maWd1cmF0aW9uIGZvcgorZ2l0d2ViLiAgWW91IGRvbid0IHJlYWxseSBuZWVkIGl0IGluIGFib3ZlIGV4YW1wbGU7IGl0IGlzIHJlcXVpcmVkIG9ubHkgaWYKK3lvdXIgY29uZmlndXJhdGlvbiBmaWxlIGlzIGluIGRpZmZlcmVudCBwbGFjZSB0aGFuIGJ1aWx0LWluIChkdXJpbmcKK2NvbXBpbGluZyBnaXR3ZWIpICdnaXR3ZWJfY29uZmlnLnBlcmwnIG9yIGAvZXRjL2dpdHdlYi5jb25mYC4gIFNlZQorbGlua2dpdDpnaXR3ZWIuY29uZls1XSBmb3IgZGV0YWlscywgZXNwZWNpYWxseSBpbmZvcm1hdGlvbiBhYm91dCBwcmVjZWRlbmNlCitydWxlcy4KKworSWYgeW91IHVzZSB0aGUgcmV3cml0ZSBydWxlcyBmcm9tIHRoZSBleGFtcGxlIHlvdSAqbWlnaHQqIGFsc28gbmVlZAorc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUKKyhgL2V0Yy9naXR3ZWIuY29uZmAgZm9sbG93aW5nIGV4YW1wbGUpOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQHN0eWxlc2hlZXRzID0gKCIvc29tZS9hYnNvbHV0ZS9wYXRoL2dpdHdlYi5jc3MiKTsKKyRteV91cmkgICAgPSAiLyI7CiskaG9tZV9saW5rID0gIi8iOworJHBlcl9yZXF1ZXN0X2NvbmZpZyA9IDE7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOb3dhZGF5cyB0aG91Z2ggZ2l0d2ViIHNob3VsZCBjcmVhdGUgSFRNTCBiYXNlIHRhZyB3aGVuIG5lZWRlZCAodG8gc2V0IGJhc2UKK1VSSSBmb3IgcmVsYXRpdmUgbGlua3MpLCBzbyBpdCBzaG91bGQgd29yayBhdXRvbWF0aWNhbGx5LgorCisKK1dlYnNlcnZlciBjb25maWd1cmF0aW9uIHdpdGggbXVsdGlwbGUgcHJvamVjdHMnIHJvb3QKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSB3YW50IHRvIHVzZSBnaXR3ZWIgd2l0aCBzZXZlcmFsIHByb2plY3Qgcm9vdHMgeW91IGNhbiBlZGl0IHlvdXIKK0FwYWNoZSB2aXJ0dWFsIGhvc3QgYW5kIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGVzIGluIHRoZSBmb2xsb3dpbmcgd2F5LgorCitUaGUgdmlydHVhbCBob3N0IGNvbmZpZ3VyYXRpb24gKGluIEFwYWNoZSBjb25maWd1cmF0aW9uIGZpbGUpIHNob3VsZCBsb29rCitsaWtlIHRoaXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPFZpcnR1YWxIb3N0ICo6ODA+CisgICAgU2VydmVyTmFtZSAgICBnaXQuZXhhbXBsZS5vcmcKKyAgICBEb2N1bWVudFJvb3QgIC9wdWIvZ2l0CisgICAgU2V0RW52ICAgICAgICBHSVRXRUJfQ09ORklHICAvZXRjL2dpdHdlYi5jb25mCisKKyAgICAjIHR1cm5pbmcgb24gbW9kIHJld3JpdGUKKyAgICBSZXdyaXRlRW5naW5lIG9uCisKKyAgICAjIG1ha2UgdGhlIGZyb250IHBhZ2UgYW4gaW50ZXJuYWwgcmV3cml0ZSB0byB0aGUgZ2l0d2ViIHNjcmlwdAorICAgIFJld3JpdGVSdWxlIF4vJCAgL2NnaS1iaW4vZ2l0d2ViLmNnaSAgW1FTQSxMLFBUXQorCisgICAgIyBsb29rIGZvciBhIHB1YmxpY19naXQgZm9sZGVyIGluIHVuaXggdXNlcnMnIGhvbWUKKyAgICAjIGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvfjx1c2VyPi8KKyAgICBSZXdyaXRlUnVsZSBeL1x+KFteXC9dKykoL3wvZ2l0d2ViLmNnaSk/JAkvY2dpLWJpbi9naXR3ZWIuY2dpIFwKKwkJW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovaG9tZS8kMS9wdWJsaWNfZ2l0LyxMLFBUXQorCisgICAgIyBodHRwOi8vZ2l0LmV4YW1wbGUub3JnLys8dXNlcj4vCisgICAgI1Jld3JpdGVSdWxlIF4vXCsoW15cL10rKSgvfC9naXR3ZWIuY2dpKT8kCS9jZ2ktYmluL2dpdHdlYi5jZ2kgXAorCQkgW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovaG9tZS8kMS9wdWJsaWNfZ2l0LyxMLFBUXQorCisgICAgIyBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL3VzZXIvPHVzZXI+LworICAgICNSZXdyaXRlUnVsZSBeL3VzZXIvKFteXC9dKykvKGdpdHdlYi5jZ2kpPyQJL2NnaS1iaW4vZ2l0d2ViLmNnaSBcCisJCSBbUVNBLEU9R0lUV0VCX1BST0pFQ1RST09UOi9ob21lLyQxL3B1YmxpY19naXQvLEwsUFRdCisKKyAgICAjIGRlZmluZWQgbGlzdCBvZiBwcm9qZWN0IHJvb3RzCisgICAgUmV3cml0ZVJ1bGUgXi9zY20oL3wvZ2l0d2ViLmNnaSk/JCAvY2dpLWJpbi9naXR3ZWIuY2dpIFwKKwkJW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovcHViL3NjbS8sTCxQVF0KKyAgICBSZXdyaXRlUnVsZSBeL3ZhcigvfC9naXR3ZWIuY2dpKT8kIC9jZ2ktYmluL2dpdHdlYi5jZ2kgXAorCQlbUVNBLEU9R0lUV0VCX1BST0pFQ1RST09UOi92YXIvZ2l0LyxMLFBUXQorCisgICAgIyBtYWtlIGFjY2VzcyBmb3IgImR1bWIgY2xpZW50cyIgd29yaworICAgIFJld3JpdGVSdWxlIF4vKC4qXC5naXQvKD8hLz8oSEVBRHxpbmZvfG9iamVjdHN8cmVmcykpLiopPyQgXAorCQkvY2dpLWJpbi9naXR3ZWIuY2dpJXtSRVFVRVNUX1VSSX0gIFtMLFBUXQorPC9WaXJ0dWFsSG9zdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgYWN0dWFsIHByb2plY3Qgcm9vdCBpcyBwYXNzZWQgdG8gZ2l0d2ViIHZpYSBgR0lUV0VCX1BST0pFQ1RfUk9PVGAKK2Vudmlyb25tZW50IHZhcmlhYmxlIGZyb20gYSB3ZWIgc2VydmVyLCBzbyB5b3UgbmVlZCB0byBwdXQgdGhlIGZvbGxvd2luZworbGluZSBpbiBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlIChgL2V0Yy9naXR3ZWIuY29uZmAgaW4gYWJvdmUgZXhhbXBsZSk6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJHByb2plY3Ryb290ID0gJEVOVnsnR0lUV0VCX1BST0pFQ1RST09UJ30gfHwgIi9wdWIvZ2l0IjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqTm90ZSogdGhhdCB0aGlzIHJlcXVpcmVzIHRvIGJlIHNldCBmb3IgZWFjaCByZXF1ZXN0LCBzbyBlaXRoZXIKK2AkcGVyX3JlcXVlc3RfY29uZmlnYCBtdXN0IGJlIGZhbHNlLCBvciB0aGUgYWJvdmUgbXVzdCBiZSBwdXQgaW4gY29kZQorcmVmZXJlbmNlZCBieSBgJHBlcl9yZXF1ZXN0X2NvbmZpZ2A7CisKK1RoZXNlIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0d28gdGhpbmdzLiBGaXJzdCwgZWFjaCB1bml4IHVzZXIgKGA8dXNlcj5gKSBvZgordGhlIHNlcnZlciB3aWxsIGJlIGFibGUgdG8gYnJvd3NlIHRocm91Z2ggZ2l0d2ViIEdpdCByZXBvc2l0b3JpZXMgZm91bmQgaW4KK2B+L3B1YmxpY19naXQvYCB3aXRoIHRoZSBmb2xsb3dpbmcgdXJsOgorCisgIGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvfjx1c2VyPi8KKworSWYgeW91IGRvIG5vdCB3YW50IHRoaXMgZmVhdHVyZSBvbiB5b3VyIHNlcnZlciBqdXN0IHJlbW92ZSB0aGUgc2Vjb25kCityZXdyaXRlIHJ1bGUuCisKK0lmIHlvdSBhbHJlYWR5IHVzZSBgbW9kX3VzZXJkaXJgIGluIHlvdXIgdmlydHVhbCBob3N0IG9yIHlvdSBkb24ndCB3YW50IHRvCit1c2UgdGhlIFwnficgYXMgZmlyc3QgY2hhcmFjdGVyLCBqdXN0IGNvbW1lbnQgb3IgcmVtb3ZlIHRoZSBzZWNvbmQgcmV3cml0ZQorcnVsZSwgYW5kIHVuY29tbWVudCBvbmUgb2YgdGhlIGZvbGxvd2luZyBhY2NvcmRpbmcgdG8gd2hhdCB5b3Ugd2FudC4KKworU2Vjb25kLCByZXBvc2l0b3JpZXMgZm91bmQgaW4gYC9wdWIvc2NtL2AgYW5kIGAvdmFyL2dpdC9gIHdpbGwgYmUgYWNjZXNzaWJsZQordGhyb3VnaCBgaHR0cDovL2dpdC5leGFtcGxlLm9yZy9zY20vYCBhbmQgYGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvdmFyL2AuCitZb3UgY2FuIGFkZCBhcyBtYW55IHByb2plY3Qgcm9vdHMgYXMgeW91IHdhbnQgYnkgYWRkaW5nIHJld3JpdGUgcnVsZXMgbGlrZQordGhlIHRoaXJkIGFuZCB0aGUgZm91cnRoLgorCisKK1BBVEhfSU5GTyB1c2FnZQorfn5+fn5+fn5+fn5+fn5+CitJZiB5b3UgZW5hYmxlIFBBVEhfSU5GTyB1c2FnZSBpbiBnaXR3ZWIgYnkgcHV0dGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGZlYXR1cmV7J3BhdGhpbmZvJ317J2RlZmF1bHQnfSA9IFsxXTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luIHlvdXIgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZSwgaXQgaXMgcG9zc2libGUgdG8gc2V0IHVwIHlvdXIgc2VydmVyIHNvCit0aGF0IGl0IGNvbnN1bWVzIGFuZCBwcm9kdWNlcyBVUkxzIGluIHRoZSBmb3JtCisKKyAgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9wcm9qZWN0LmdpdC9zaG9ydGxvZy9zb21ldGFnCisKK2kuZS4gd2l0aG91dCAnZ2l0d2ViLmNnaScgcGFydCwgYnkgdXNpbmcgYSBjb25maWd1cmF0aW9uIHN1Y2ggYXMgdGhlCitmb2xsb3dpbmcuICBUaGlzIGNvbmZpZ3VyYXRpb24gYXNzdW1lcyB0aGF0IGAvdmFyL3d3dy9naXR3ZWJgIGlzIHRoZQorRG9jdW1lbnRSb290IG9mIHlvdXIgd2Vic2VydmVyLCBjb250YWlucyB0aGUgZ2l0d2ViLmNnaSBzY3JpcHQgYW5kCitjb21wbGVtZW50YXJ5IHN0YXRpYyBmaWxlcyAoc3R5bGVzaGVldCwgZmF2aWNvbiwgSmF2YVNjcmlwdCk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxWaXJ0dWFsSG9zdCAqOjgwPgorCVNlcnZlckFsaWFzIGdpdC5leGFtcGxlLmNvbQorCisJRG9jdW1lbnRSb290IC92YXIvd3d3L2dpdHdlYgorCisJPERpcmVjdG9yeSAvdmFyL3d3dy9naXR3ZWI+CisJCU9wdGlvbnMgRXhlY0NHSQorCQlBZGRIYW5kbGVyIGNnaS1zY3JpcHQgY2dpCisKKwkJRGlyZWN0b3J5SW5kZXggZ2l0d2ViLmNnaQorCisJCVJld3JpdGVFbmdpbmUgT24KKwkJUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWYKKwkJUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWQKKwkJUmV3cml0ZVJ1bGUgXi4qIC9naXR3ZWIuY2dpLyQwIFtMLFBUXQorCTwvRGlyZWN0b3J5PgorPC9WaXJ0dWFsSG9zdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSByZXdyaXRlIHJ1bGUgZ3VhcmFudGVlcyB0aGF0IGV4aXN0aW5nIHN0YXRpYyBmaWxlcyB3aWxsIGJlIHByb3Blcmx5CitzZXJ2ZWQsIHdoZXJlYXMgYW55IG90aGVyIFVSTCB3aWxsIGJlIHBhc3NlZCB0byBnaXR3ZWIgYXMgUEFUSF9JTkZPCitwYXJhbWV0ZXIuCisKKypOb3RpY2UqIHRoYXQgaW4gdGhpcyBjYXNlIHlvdSBkb24ndCBuZWVkIHNwZWNpYWwgc2V0dGluZ3MgZm9yCitgQHN0eWxlc2hlZXRzYCwgYCRteV91cmlgIGFuZCBgJGhvbWVfbGlua2AsIGJ1dCB5b3UgbG9zZSAiZHVtYiBjbGllbnQiCithY2Nlc3MgdG8geW91ciBwcm9qZWN0IC5naXQgZGlycyAoZGVzY3JpYmVkIGluICJTaW5nbGUgVVJMIGZvciBnaXR3ZWIgYW5kCitmb3IgZmV0Y2hpbmciIHNlY3Rpb24pLiAgQSBwb3NzaWJsZSB3b3JrYXJvdW5kIGZvciB0aGUgbGF0dGVyIGlzIHRoZQorZm9sbG93aW5nOiBpbiB5b3VyIHByb2plY3Qgcm9vdCBkaXIgKGUuZy4gYC9wdWIvZ2l0YCkgaGF2ZSB0aGUgcHJvamVjdHMKK25hbWVkICp3aXRob3V0KiBhIC5naXQgZXh0ZW5zaW9uIChlLmcuIGAvcHViL2dpdC9wcm9qZWN0YCBpbnN0ZWFkIG9mCitgL3B1Yi9naXQvcHJvamVjdC5naXRgKSBhbmQgY29uZmlndXJlIEFwYWNoZSBhcyBmb2xsb3dzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPFZpcnR1YWxIb3N0ICo6ODA+CisJU2VydmVyQWxpYXMgZ2l0LmV4YW1wbGUuY29tCisKKwlEb2N1bWVudFJvb3QgL3Zhci93d3cvZ2l0d2ViCisKKwlBbGlhc01hdGNoIF4oLy4qPykoXC5naXQpKC8uKik/JCAvcHViL2dpdCQxJDMKKwk8RGlyZWN0b3J5IC92YXIvd3d3L2dpdHdlYj4KKwkJT3B0aW9ucyBFeGVjQ0dJCisJCUFkZEhhbmRsZXIgY2dpLXNjcmlwdCBjZ2kKKworCQlEaXJlY3RvcnlJbmRleCBnaXR3ZWIuY2dpCisKKwkJUmV3cml0ZUVuZ2luZSBPbgorCQlSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZgorCQlSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZAorCQlSZXdyaXRlUnVsZSBeLiogL2dpdHdlYi5jZ2kvJDAgW0wsUFRdCisJPC9EaXJlY3Rvcnk+Cis8L1ZpcnR1YWxIb3N0PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYWRkaXRpb25hbCBBbGlhc01hdGNoIG1ha2VzIGl0IHNvIHRoYXQKKworICBodHRwOi8vZ2l0LmV4YW1wbGUuY29tL3Byb2plY3QuZ2l0CisKK3dpbGwgZ2l2ZSByYXcgYWNjZXNzIHRvIHRoZSBwcm9qZWN0J3MgR2l0IGRpciAoc28gdGhhdCB0aGUgcHJvamVjdCBjYW4gYmUKK2Nsb25lZCksIHdoaWxlCisKKyAgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9wcm9qZWN0CisKK3dpbGwgcHJvdmlkZSBodW1hbi1mcmllbmRseSBnaXR3ZWIgYWNjZXNzLgorCitUaGlzIHNvbHV0aW9uIGlzIG5vdCAxMDAlIGJ1bGxldHByb29mLCBpbiB0aGUgc2Vuc2UgdGhhdCBpZiBzb21lIHByb2plY3QgaGFzCithIG5hbWVkIHJlZiAoYnJhbmNoLCB0YWcpIHN0YXJ0aW5nIHdpdGggYGdpdC9gLCB0aGVuIHBhdGhzIHN1Y2ggYXMKKworICBodHRwOi8vZ2l0LmV4YW1wbGUuY29tL3Byb2plY3QvY29tbWFuZC9hYnJhbmNoLi5naXQvYWJyYW5jaAorCit3aWxsIGZhaWwgd2l0aCBhIDQwNCBlcnJvci4KKworCitCVUdTCistLS0tCitQbGVhc2UgcmVwb3J0IGFueSBidWdzIG9yIGZlYXR1cmUgcmVxdWVzdHMgdG8gZ2l0QHZnZXIua2VybmVsLm9yZywKK3B1dHRpbmcgImdpdHdlYiIgaW4gdGhlIHN1YmplY3Qgb2YgZW1haWwuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR3ZWIuY29uZls1XSwgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0KKworYGdpdHdlYi9SRUFETUVgLCBgZ2l0d2ViL0lOU1RBTExgCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR3b3JrZmxvd3MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR3b3JrZmxvd3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzBkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHdvcmtmbG93cy50eHQKQEAgLTAsMCArMSw0NzkgQEAKK2dpdHdvcmtmbG93cyg3KQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHdvcmtmbG93cyAtIEFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2dpdCAqCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gd3JpdGUgZG93biBhbmQgbW90aXZhdGUgc29tZSBvZiB0aGUgd29ya2Zsb3cKK2VsZW1lbnRzIHVzZWQgZm9yIGBnaXQuZ2l0YCBpdHNlbGYuICBNYW55IGlkZWFzIGFwcGx5IGluIGdlbmVyYWwsCit0aG91Z2ggdGhlIGZ1bGwgd29ya2Zsb3cgaXMgcmFyZWx5IHJlcXVpcmVkIGZvciBzbWFsbGVyIHByb2plY3RzIHdpdGgKK2Zld2VyIHBlb3BsZSBpbnZvbHZlZC4KKworV2UgZm9ybXVsYXRlIGEgc2V0IG9mICdydWxlcycgZm9yIHF1aWNrIHJlZmVyZW5jZSwgd2hpbGUgdGhlIHByb3NlCit0cmllcyB0byBtb3RpdmF0ZSBlYWNoIG9mIHRoZW0uICBEbyBub3QgYWx3YXlzIHRha2UgdGhlbSBsaXRlcmFsbHk7Cit5b3Ugc2hvdWxkIHZhbHVlIGdvb2QgcmVhc29ucyBmb3IgeW91ciBhY3Rpb25zIGhpZ2hlciB0aGFuIG1hbnBhZ2VzCitzdWNoIGFzIHRoaXMgb25lLgorCisKK1NFUEFSQVRFIENIQU5HRVMKKy0tLS0tLS0tLS0tLS0tLS0KKworQXMgYSBnZW5lcmFsIHJ1bGUsIHlvdSBzaG91bGQgdHJ5IHRvIHNwbGl0IHlvdXIgY2hhbmdlcyBpbnRvIHNtYWxsCitsb2dpY2FsIHN0ZXBzLCBhbmQgY29tbWl0IGVhY2ggb2YgdGhlbS4gIFRoZXkgc2hvdWxkIGJlIGNvbnNpc3RlbnQsCit3b3JraW5nIGluZGVwZW5kZW50bHkgb2YgYW55IGxhdGVyIGNvbW1pdHMsIHBhc3MgdGhlIHRlc3Qgc3VpdGUsIGV0Yy4KK1RoaXMgbWFrZXMgdGhlIHJldmlldyBwcm9jZXNzIG11Y2ggZWFzaWVyLCBhbmQgdGhlIGhpc3RvcnkgbXVjaCBtb3JlCit1c2VmdWwgZm9yIGxhdGVyIGluc3BlY3Rpb24gYW5kIGFuYWx5c2lzLCBmb3IgZXhhbXBsZSB3aXRoCitsaW5rZ2l0OmdpdC1ibGFtZVsxXSBhbmQgbGlua2dpdDpnaXQtYmlzZWN0WzFdLgorCitUbyBhY2hpZXZlIHRoaXMsIHRyeSB0byBzcGxpdCB5b3VyIHdvcmsgaW50byBzbWFsbCBzdGVwcyBmcm9tIHRoZSB2ZXJ5CitiZWdpbm5pbmcuIEl0IGlzIGFsd2F5cyBlYXNpZXIgdG8gc3F1YXNoIGEgZmV3IGNvbW1pdHMgdG9nZXRoZXIgdGhhbgordG8gc3BsaXQgb25lIGJpZyBjb21taXQgaW50byBzZXZlcmFsLiAgRG9uJ3QgYmUgYWZyYWlkIG9mIG1ha2luZyB0b28KK3NtYWxsIG9yIGltcGVyZmVjdCBzdGVwcyBhbG9uZyB0aGUgd2F5LiBZb3UgY2FuIGFsd2F5cyBnbyBiYWNrIGxhdGVyCithbmQgZWRpdCB0aGUgY29tbWl0cyB3aXRoIGBnaXQgcmViYXNlIC0taW50ZXJhY3RpdmVgIGJlZm9yZSB5b3UKK3B1Ymxpc2ggdGhlbS4gIFlvdSBjYW4gdXNlIGBnaXQgc3Rhc2ggcHVzaCAtLWtlZXAtaW5kZXhgIHRvIHJ1biB0aGUKK3Rlc3Qgc3VpdGUgaW5kZXBlbmRlbnQgb2Ygb3RoZXIgdW5jb21taXR0ZWQgY2hhbmdlczsgc2VlIHRoZSBFWEFNUExFUworc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1zdGFzaFsxXS4KKworCitNQU5BR0lORyBCUkFOQ0hFUworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHR3byBtYWluIHRvb2xzIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5jbHVkZSBjaGFuZ2VzIGZyb20gb25lCiticmFuY2ggb24gYW5vdGhlcjogbGlua2dpdDpnaXQtbWVyZ2VbMV0gYW5kCitsaW5rZ2l0OmdpdC1jaGVycnktcGlja1sxXS4KKworTWVyZ2VzIGhhdmUgbWFueSBhZHZhbnRhZ2VzLCBzbyB3ZSB0cnkgdG8gc29sdmUgYXMgbWFueSBwcm9ibGVtcyBhcworcG9zc2libGUgd2l0aCBtZXJnZXMgYWxvbmUuICBDaGVycnktcGlja2luZyBpcyBzdGlsbCBvY2Nhc2lvbmFsbHkKK3VzZWZ1bDsgc2VlICJNZXJnaW5nIHVwd2FyZHMiIGJlbG93IGZvciBhbiBleGFtcGxlLgorCitNb3N0IGltcG9ydGFudGx5LCBtZXJnaW5nIHdvcmtzIGF0IHRoZSBicmFuY2ggbGV2ZWwsIHdoaWxlCitjaGVycnktcGlja2luZyB3b3JrcyBhdCB0aGUgY29tbWl0IGxldmVsLiAgVGhpcyBtZWFucyB0aGF0IGEgbWVyZ2UgY2FuCitjYXJyeSBvdmVyIHRoZSBjaGFuZ2VzIGZyb20gMSwgMTAsIG9yIDEwMDAgY29tbWl0cyB3aXRoIGVxdWFsIGVhc2UsCit3aGljaCBpbiB0dXJuIG1lYW5zIHRoZSB3b3JrZmxvdyBzY2FsZXMgbXVjaCBiZXR0ZXIgdG8gYSBsYXJnZSBudW1iZXIKK29mIGNvbnRyaWJ1dG9ycyAoYW5kIGNvbnRyaWJ1dGlvbnMpLiAgTWVyZ2VzIGFyZSBhbHNvIGVhc2llciB0bwordW5kZXJzdGFuZCBiZWNhdXNlIGEgbWVyZ2UgY29tbWl0IGlzIGEgInByb21pc2UiIHRoYXQgYWxsIGNoYW5nZXMgZnJvbQorYWxsIGl0cyBwYXJlbnRzIGFyZSBub3cgaW5jbHVkZWQuCisKK1RoZXJlIGlzIGEgdHJhZGVvZmYgb2YgY291cnNlOiBtZXJnZXMgcmVxdWlyZSBhIG1vcmUgY2FyZWZ1bCBicmFuY2gKK21hbmFnZW1lbnQuICBUaGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zIGRpc2N1c3MgdGhlIGltcG9ydGFudCBwb2ludHMuCisKKworR3JhZHVhdGlvbgorfn5+fn5+fn5+fgorCitBcyBhIGdpdmVuIGZlYXR1cmUgZ29lcyBmcm9tIGV4cGVyaW1lbnRhbCB0byBzdGFibGUsIGl0IGFsc28KKyJncmFkdWF0ZXMiIGJldHdlZW4gdGhlIGNvcnJlc3BvbmRpbmcgYnJhbmNoZXMgb2YgdGhlIHNvZnR3YXJlLgorYGdpdC5naXRgIHVzZXMgdGhlIGZvbGxvd2luZyAnaW50ZWdyYXRpb24gYnJhbmNoZXMnOgorCisqICdtYWludCcgdHJhY2tzIHRoZSBjb21taXRzIHRoYXQgc2hvdWxkIGdvIGludG8gdGhlIG5leHQgIm1haW50ZW5hbmNlCisgIHJlbGVhc2UiLCBpLmUuLCB1cGRhdGUgb2YgdGhlIGxhc3QgcmVsZWFzZWQgc3RhYmxlIHZlcnNpb247CisKKyogJ21hc3RlcicgdHJhY2tzIHRoZSBjb21taXRzIHRoYXQgc2hvdWxkIGdvIGludG8gdGhlIG5leHQgcmVsZWFzZTsKKworKiAnbmV4dCcgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0aW5nIGJyYW5jaCBmb3IgdG9waWNzIGJlaW5nIHRlc3RlZCBmb3IKKyAgc3RhYmlsaXR5IGZvciBtYXN0ZXIuCisKK1RoZXJlIGlzIGEgZm91cnRoIG9mZmljaWFsIGJyYW5jaCB0aGF0IGlzIHVzZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHk6CisKKyogJ3B1JyAocHJvcG9zZWQgdXBkYXRlcykgaXMgYW4gaW50ZWdyYXRpb24gYnJhbmNoIGZvciB0aGluZ3MgdGhhdCBhcmUKKyAgbm90IHF1aXRlIHJlYWR5IGZvciBpbmNsdXNpb24geWV0IChzZWUgIkludGVncmF0aW9uIEJyYW5jaGVzIgorICBiZWxvdykuCisKK0VhY2ggb2YgdGhlIGZvdXIgYnJhbmNoZXMgaXMgdXN1YWxseSBhIGRpcmVjdCBkZXNjZW5kYW50IG9mIHRoZSBvbmUKK2Fib3ZlIGl0LgorCitDb25jZXB0dWFsbHksIHRoZSBmZWF0dXJlIGVudGVycyBhdCBhbiB1bnN0YWJsZSBicmFuY2ggKHVzdWFsbHkgJ25leHQnCitvciAncHUnKSwgYW5kICJncmFkdWF0ZXMiIHRvICdtYXN0ZXInIGZvciB0aGUgbmV4dCByZWxlYXNlIG9uY2UgaXQgaXMKK2NvbnNpZGVyZWQgc3RhYmxlIGVub3VnaC4KKworCitNZXJnaW5nIHVwd2FyZHMKK35+fn5+fn5+fn5+fn5+fgorCitUaGUgImRvd253YXJkcyBncmFkdWF0aW9uIiBkaXNjdXNzZWQgYWJvdmUgY2Fubm90IGJlIGRvbmUgYnkgYWN0dWFsbHkKK21lcmdpbmcgZG93bndhcmRzLCBob3dldmVyLCBzaW5jZSB0aGF0IHdvdWxkIG1lcmdlICdhbGwnIGNoYW5nZXMgb24KK3RoZSB1bnN0YWJsZSBicmFuY2ggaW50byB0aGUgc3RhYmxlIG9uZS4gIEhlbmNlIHRoZSBmb2xsb3dpbmc6CisKKy5NZXJnZSB1cHdhcmRzCitbY2FwdGlvbj0iUnVsZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Fsd2F5cyBjb21taXQgeW91ciBmaXhlcyB0byB0aGUgb2xkZXN0IHN1cHBvcnRlZCBicmFuY2ggdGhhdCByZXF1aXJlcwordGhlbS4gIFRoZW4gKHBlcmlvZGljYWxseSkgbWVyZ2UgdGhlIGludGVncmF0aW9uIGJyYW5jaGVzIHVwd2FyZHMgaW50byBlYWNoCitvdGhlci4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBnaXZlcyBhIHZlcnkgY29udHJvbGxlZCBmbG93IG9mIGZpeGVzLiAgSWYgeW91IG5vdGljZSB0aGF0IHlvdQoraGF2ZSBhcHBsaWVkIGEgZml4IHRvIGUuZy4gJ21hc3RlcicgdGhhdCBpcyBhbHNvIHJlcXVpcmVkIGluICdtYWludCcsCit5b3Ugd2lsbCBuZWVkIHRvIGNoZXJyeS1waWNrIGl0ICh1c2luZyBsaW5rZ2l0OmdpdC1jaGVycnktcGlja1sxXSkKK2Rvd253YXJkcy4gIFRoaXMgd2lsbCBoYXBwZW4gYSBmZXcgdGltZXMgYW5kIGlzIG5vdGhpbmcgdG8gd29ycnkgYWJvdXQKK3VubGVzcyB5b3UgZG8gaXQgdmVyeSBmcmVxdWVudGx5LgorCisKK1RvcGljIGJyYW5jaGVzCit+fn5+fn5+fn5+fn5+fgorCitBbnkgbm9udHJpdmlhbCBmZWF0dXJlIHdpbGwgcmVxdWlyZSBzZXZlcmFsIHBhdGNoZXMgdG8gaW1wbGVtZW50LCBhbmQKK21heSBnZXQgZXh0cmEgYnVnZml4ZXMgb3IgaW1wcm92ZW1lbnRzIGR1cmluZyBpdHMgbGlmZXRpbWUuCisKK0NvbW1pdHRpbmcgZXZlcnl0aGluZyBkaXJlY3RseSBvbiB0aGUgaW50ZWdyYXRpb24gYnJhbmNoZXMgbGVhZHMgdG8gbWFueQorcHJvYmxlbXM6IEJhZCBjb21taXRzIGNhbm5vdCBiZSB1bmRvbmUsIHNvIHRoZXkgbXVzdCBiZSByZXZlcnRlZCBvbmUKK2J5IG9uZSwgd2hpY2ggY3JlYXRlcyBjb25mdXNpbmcgaGlzdG9yaWVzIGFuZCBmdXJ0aGVyIGVycm9yIHBvdGVudGlhbAord2hlbiB5b3UgZm9yZ2V0IHRvIHJldmVydCBwYXJ0IG9mIGEgZ3JvdXAgb2YgY2hhbmdlcy4gIFdvcmtpbmcgaW4KK3BhcmFsbGVsIG1peGVzIHVwIHRoZSBjaGFuZ2VzLCBjcmVhdGluZyBmdXJ0aGVyIGNvbmZ1c2lvbi4KKworVXNlIG9mICJ0b3BpYyBicmFuY2hlcyIgc29sdmVzIHRoZXNlIHByb2JsZW1zLiAgVGhlIG5hbWUgaXMgcHJldHR5CitzZWxmIGV4cGxhbmF0b3J5LCB3aXRoIGEgY2F2ZWF0IHRoYXQgY29tZXMgZnJvbSB0aGUgIm1lcmdlIHVwd2FyZHMiCitydWxlIGFib3ZlOgorCisuVG9waWMgYnJhbmNoZXMKK1tjYXB0aW9uPSJSdWxlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTWFrZSBhIHNpZGUgYnJhbmNoIGZvciBldmVyeSB0b3BpYyAoZmVhdHVyZSwgYnVnZml4LCAuLi4pLiBGb3JrIGl0IG9mZgorYXQgdGhlIG9sZGVzdCBpbnRlZ3JhdGlvbiBicmFuY2ggdGhhdCB5b3Ugd2lsbCBldmVudHVhbGx5IHdhbnQgdG8gbWVyZ2UgaXQKK2ludG8uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01hbnkgdGhpbmdzIGNhbiB0aGVuIGJlIGRvbmUgdmVyeSBuYXR1cmFsbHk6CisKKyogVG8gZ2V0IHRoZSBmZWF0dXJlL2J1Z2ZpeCBpbnRvIGFuIGludGVncmF0aW9uIGJyYW5jaCwgc2ltcGx5IG1lcmdlCisgIGl0LiAgSWYgdGhlIHRvcGljIGhhcyBldm9sdmVkIGZ1cnRoZXIgaW4gdGhlIG1lYW50aW1lLCBtZXJnZSBhZ2Fpbi4KKyAgKE5vdGUgdGhhdCB5b3UgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gbWVyZ2UgaXQgdG8gdGhlIG9sZGVzdAorICBpbnRlZ3JhdGlvbiBicmFuY2ggZmlyc3QuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBmaXJzdCBtZXJnZSBhIGJ1Z2ZpeAorICB0byAnbmV4dCcsIGdpdmUgaXQgc29tZSB0ZXN0aW5nIHRpbWUsIGFuZCBtZXJnZSB0byAnbWFpbnQnIHdoZW4geW91CisgIGtub3cgaXQgaXMgc3RhYmxlLikKKworKiBJZiB5b3UgZmluZCB5b3UgbmVlZCBuZXcgZmVhdHVyZXMgZnJvbSB0aGUgYnJhbmNoICdvdGhlcicgdG8gY29udGludWUKKyAgd29ya2luZyBvbiB5b3VyIHRvcGljLCBtZXJnZSAnb3RoZXInIHRvICd0b3BpYycuICAoSG93ZXZlciwgZG8gbm90CisgIGRvIHRoaXMgImp1c3QgaGFiaXR1YWxseSIsIHNlZSBiZWxvdy4pCisKKyogSWYgeW91IGZpbmQgeW91IGZvcmtlZCBvZmYgdGhlIHdyb25nIGJyYW5jaCBhbmQgd2FudCB0byBtb3ZlIGl0CisgICJiYWNrIGluIHRpbWUiLCB1c2UgbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCitOb3RlIHRoYXQgdGhlIGxhc3QgcG9pbnQgY2xhc2hlcyB3aXRoIHRoZSBvdGhlciB0d286IGEgdG9waWMgdGhhdCBoYXMKK2JlZW4gbWVyZ2VkIGVsc2V3aGVyZSBzaG91bGQgbm90IGJlIHJlYmFzZWQuICBTZWUgdGhlIHNlY3Rpb24gb24KK1JFQ09WRVJJTkcgRlJPTSBVUFNUUkVBTSBSRUJBU0UgaW4gbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCitXZSBzaG91bGQgcG9pbnQgb3V0IHRoYXQgImhhYml0dWFsbHkiIChyZWd1bGFybHkgZm9yIG5vIHJlYWwgcmVhc29uKQorbWVyZ2luZyBhbiBpbnRlZ3JhdGlvbiBicmFuY2ggaW50byB5b3VyIHRvcGljcyAtLSBhbmQgYnkgZXh0ZW5zaW9uLAorbWVyZ2luZyBhbnl0aGluZyB1cHN0cmVhbSBpbnRvIGFueXRoaW5nIGRvd25zdHJlYW0gb24gYSByZWd1bGFyIGJhc2lzCistLSBpcyBmcm93bmVkIHVwb246CisKKy5NZXJnZSB0byBkb3duc3RyZWFtIG9ubHkgYXQgd2VsbC1kZWZpbmVkIHBvaW50cworW2NhcHRpb249IlJ1bGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitEbyBub3QgbWVyZ2UgdG8gZG93bnN0cmVhbSBleGNlcHQgd2l0aCBhIGdvb2QgcmVhc29uOiB1cHN0cmVhbSBBUEkKK2NoYW5nZXMgYWZmZWN0IHlvdXIgYnJhbmNoOyB5b3VyIGJyYW5jaCBubyBsb25nZXIgbWVyZ2VzIHRvIHVwc3RyZWFtCitjbGVhbmx5OyBldGMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK090aGVyd2lzZSwgdGhlIHRvcGljIHRoYXQgd2FzIG1lcmdlZCB0byBzdWRkZW5seSBjb250YWlucyBtb3JlIHRoYW4gYQorc2luZ2xlICh3ZWxsLXNlcGFyYXRlZCkgY2hhbmdlLiAgVGhlIG1hbnkgcmVzdWx0aW5nIHNtYWxsIG1lcmdlcyB3aWxsCitncmVhdGx5IGNsdXR0ZXIgdXAgaGlzdG9yeS4gIEFueW9uZSB3aG8gbGF0ZXIgaW52ZXN0aWdhdGVzIHRoZSBoaXN0b3J5CitvZiBhIGZpbGUgd2lsbCBoYXZlIHRvIGZpbmQgb3V0IHdoZXRoZXIgdGhhdCBtZXJnZSBhZmZlY3RlZCB0aGUgdG9waWMKK2luIGRldmVsb3BtZW50LiAgQW4gdXBzdHJlYW0gbWlnaHQgZXZlbiBpbmFkdmVydGVudGx5IGJlIG1lcmdlZCBpbnRvIGEKKyJtb3JlIHN0YWJsZSIgYnJhbmNoLiAgQW5kIHNvIG9uLgorCisKK1Rocm93LWF3YXkgaW50ZWdyYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgeW91IGZvbGxvd2VkIHRoZSBsYXN0IHBhcmFncmFwaCwgeW91IHdpbGwgbm93IGhhdmUgbWFueSBzbWFsbCB0b3BpYworYnJhbmNoZXMsIGFuZCBvY2Nhc2lvbmFsbHkgd29uZGVyIGhvdyB0aGV5IGludGVyYWN0LiAgUGVyaGFwcyB0aGUKK3Jlc3VsdCBvZiBtZXJnaW5nIHRoZW0gZG9lcyBub3QgZXZlbiB3b3JrPyAgQnV0IG9uIHRoZSBvdGhlciBoYW5kLCB3ZQord2FudCB0byBhdm9pZCBtZXJnaW5nIHRoZW0gYW55d2hlcmUgInN0YWJsZSIgYmVjYXVzZSBzdWNoIG1lcmdlcworY2Fubm90IGVhc2lseSBiZSB1bmRvbmUuCisKK1RoZSBzb2x1dGlvbiwgb2YgY291cnNlLCBpcyB0byBtYWtlIGEgbWVyZ2UgdGhhdCB3ZSBjYW4gdW5kbzogbWVyZ2UKK2ludG8gYSB0aHJvdy1hd2F5IGJyYW5jaC4KKworLlRocm93LWF3YXkgaW50ZWdyYXRpb24gYnJhbmNoZXMKK1tjYXB0aW9uPSJSdWxlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVG8gdGVzdCB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCB0b3BpY3MsIG1lcmdlIHRoZW0gaW50byBhCit0aHJvdy1hd2F5IGJyYW5jaC4gIFlvdSBtdXN0IG5ldmVyIGJhc2UgYW55IHdvcmsgb24gc3VjaCBhIGJyYW5jaCEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IG1ha2UgaXQgKHZlcnkpIGNsZWFyIHRoYXQgdGhpcyBicmFuY2ggaXMgZ29pbmcgdG8gYmUgZGVsZXRlZAorcmlnaHQgYWZ0ZXIgdGhlIHRlc3RpbmcsIHlvdSBjYW4gZXZlbiBwdWJsaXNoIHRoaXMgYnJhbmNoLCBmb3IgZXhhbXBsZQordG8gZ2l2ZSB0aGUgdGVzdGVycyBhIGNoYW5jZSB0byB3b3JrIHdpdGggaXQsIG9yIG90aGVyIGRldmVsb3BlcnMgYQorY2hhbmNlIHRvIHNlZSBpZiB0aGVpciBpbi1wcm9ncmVzcyB3b3JrIHdpbGwgYmUgY29tcGF0aWJsZS4gIGBnaXQuZ2l0YAoraGFzIHN1Y2ggYW4gb2ZmaWNpYWwgdGhyb3ctYXdheSBpbnRlZ3JhdGlvbiBicmFuY2ggY2FsbGVkICdwdScuCisKKworQnJhbmNoIG1hbmFnZW1lbnQgZm9yIGEgcmVsZWFzZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBc3N1bWluZyB5b3UgYXJlIHVzaW5nIHRoZSBtZXJnZSBhcHByb2FjaCBkaXNjdXNzZWQgYWJvdmUsIHdoZW4geW91CithcmUgcmVsZWFzaW5nIHlvdXIgcHJvamVjdCB5b3Ugd2lsbCBuZWVkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBicmFuY2gKK21hbmFnZW1lbnQgd29yay4KKworQSBmZWF0dXJlIHJlbGVhc2UgaXMgY3JlYXRlZCBmcm9tIHRoZSAnbWFzdGVyJyBicmFuY2gsIHNpbmNlICdtYXN0ZXInCit0cmFja3MgdGhlIGNvbW1pdHMgdGhhdCBzaG91bGQgZ28gaW50byB0aGUgbmV4dCBmZWF0dXJlIHJlbGVhc2UuCisKK1RoZSAnbWFzdGVyJyBicmFuY2ggaXMgc3VwcG9zZWQgdG8gYmUgYSBzdXBlcnNldCBvZiAnbWFpbnQnLiBJZiB0aGlzCitjb25kaXRpb24gZG9lcyBub3QgaG9sZCwgdGhlbiAnbWFpbnQnIGNvbnRhaW5zIHNvbWUgY29tbWl0cyB0aGF0CithcmUgbm90IGluY2x1ZGVkIG9uICdtYXN0ZXInLiBUaGUgZml4ZXMgcmVwcmVzZW50ZWQgYnkgdGhvc2UgY29tbWl0cword2lsbCB0aGVyZWZvcmUgbm90IGJlIGluY2x1ZGVkIGluIHlvdXIgZmVhdHVyZSByZWxlYXNlLgorCitUbyB2ZXJpZnkgdGhhdCAnbWFzdGVyJyBpcyBpbmRlZWQgYSBzdXBlcnNldCBvZiAnbWFpbnQnLCB1c2UgZ2l0IGxvZzoKKworLlZlcmlmeSAnbWFzdGVyJyBpcyBhIHN1cGVyc2V0IG9mICdtYWludCcKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IGxvZyBtYXN0ZXIuLm1haW50YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvbW1hbmQgc2hvdWxkIG5vdCBsaXN0IGFueSBjb21taXRzLiAgT3RoZXJ3aXNlLCBjaGVjayBvdXQKKydtYXN0ZXInIGFuZCBtZXJnZSAnbWFpbnQnIGludG8gaXQuCisKK05vdyB5b3UgY2FuIHByb2NlZWQgd2l0aCB0aGUgY3JlYXRpb24gb2YgdGhlIGZlYXR1cmUgcmVsZWFzZS4gQXBwbHkgYQordGFnIHRvIHRoZSB0aXAgb2YgJ21hc3RlcicgaW5kaWNhdGluZyB0aGUgcmVsZWFzZSB2ZXJzaW9uOgorCisuUmVsZWFzZSB0YWdnaW5nCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCB0YWcgLXMgLW0gIkdpdCBYLlkuWiIgdlguWS5aIG1hc3RlcmAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IG5lZWQgdG8gcHVzaCB0aGUgbmV3IHRhZyB0byBhIHB1YmxpYyBHaXQgc2VydmVyIChzZWUKKyJESVNUUklCVVRFRCBXT1JLRkxPV1MiIGJlbG93KS4gVGhpcyBtYWtlcyB0aGUgdGFnIGF2YWlsYWJsZSB0bworb3RoZXJzIHRyYWNraW5nIHlvdXIgcHJvamVjdC4gVGhlIHB1c2ggY291bGQgYWxzbyB0cmlnZ2VyIGEKK3Bvc3QtdXBkYXRlIGhvb2sgdG8gcGVyZm9ybSByZWxlYXNlLXJlbGF0ZWQgaXRlbXMgc3VjaCBhcyBidWlsZGluZworcmVsZWFzZSB0YXJiYWxscyBhbmQgcHJlZm9ybWF0dGVkIGRvY3VtZW50YXRpb24gcGFnZXMuCisKK1NpbWlsYXJseSwgZm9yIGEgbWFpbnRlbmFuY2UgcmVsZWFzZSwgJ21haW50JyBpcyB0cmFja2luZyB0aGUgY29tbWl0cwordG8gYmUgcmVsZWFzZWQuIFRoZXJlZm9yZSwgaW4gdGhlIHN0ZXBzIGFib3ZlIHNpbXBseSB0YWcgYW5kIHB1c2gKKydtYWludCcgcmF0aGVyIHRoYW4gJ21hc3RlcicuCisKKworTWFpbnRlbmFuY2UgYnJhbmNoIG1hbmFnZW1lbnQgYWZ0ZXIgYSBmZWF0dXJlIHJlbGVhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FmdGVyIGEgZmVhdHVyZSByZWxlYXNlLCB5b3UgbmVlZCB0byBtYW5hZ2UgeW91ciBtYWludGVuYW5jZSBicmFuY2hlcy4KKworRmlyc3QsIGlmIHlvdSB3aXNoIHRvIGNvbnRpbnVlIHRvIHJlbGVhc2UgbWFpbnRlbmFuY2UgZml4ZXMgZm9yIHRoZQorZmVhdHVyZSByZWxlYXNlIG1hZGUgYmVmb3JlIHRoZSByZWNlbnQgb25lLCB0aGVuIHlvdSBtdXN0IGNyZWF0ZQorYW5vdGhlciBicmFuY2ggdG8gdHJhY2sgY29tbWl0cyBmb3IgdGhhdCBwcmV2aW91cyByZWxlYXNlLgorCitUbyBkbyB0aGlzLCB0aGUgY3VycmVudCBtYWludGVuYW5jZSBicmFuY2ggaXMgY29waWVkIHRvIGFub3RoZXIgYnJhbmNoCituYW1lZCB3aXRoIHRoZSBwcmV2aW91cyByZWxlYXNlIHZlcnNpb24gbnVtYmVyIChlLmcuIG1haW50LVguWS4oWi0xKQord2hlcmUgWC5ZLlogaXMgdGhlIGN1cnJlbnQgcmVsZWFzZSkuCisKKy5Db3B5IG1haW50CitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBicmFuY2ggbWFpbnQtWC5ZLihaLTEpIG1haW50YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgJ21haW50JyBicmFuY2ggc2hvdWxkIG5vdyBiZSBmYXN0LWZvcndhcmRlZCB0byB0aGUgbmV3bHkgcmVsZWFzZWQKK2NvZGUgc28gdGhhdCBtYWludGVuYW5jZSBmaXhlcyBjYW4gYmUgdHJhY2tlZCBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZToKKworLlVwZGF0ZSBtYWludCB0byBuZXcgcmVsZWFzZQorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogYGdpdCBjaGVja291dCBtYWludGAKKyogYGdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyYAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgbWVyZ2UgZmFpbHMgYmVjYXVzZSBpdCBpcyBub3QgYSBmYXN0LWZvcndhcmQsIHRoZW4gaXQgaXMKK3Bvc3NpYmxlIHNvbWUgZml4ZXMgb24gJ21haW50JyB3ZXJlIG1pc3NlZCBpbiB0aGUgZmVhdHVyZSByZWxlYXNlLgorVGhpcyB3aWxsIG5vdCBoYXBwZW4gaWYgdGhlIGNvbnRlbnQgb2YgdGhlIGJyYW5jaGVzIHdhcyB2ZXJpZmllZCBhcworZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorCisKK0JyYW5jaCBtYW5hZ2VtZW50IGZvciBuZXh0IGFuZCBwdSBhZnRlciBhIGZlYXR1cmUgcmVsZWFzZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FmdGVyIGEgZmVhdHVyZSByZWxlYXNlLCB0aGUgaW50ZWdyYXRpb24gYnJhbmNoICduZXh0JyBtYXkgb3B0aW9uYWxseSBiZQorcmV3b3VuZCBhbmQgcmVidWlsdCBmcm9tIHRoZSB0aXAgb2YgJ21hc3RlcicgdXNpbmcgdGhlIHN1cnZpdmluZwordG9waWNzIG9uICduZXh0JzoKKworLlJld2luZCBhbmQgcmVidWlsZCBuZXh0CitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBgZ2l0IHN3aXRjaCAtQyBuZXh0IG1hc3RlcmAKKyogYGdpdCBtZXJnZSBhaS90b3BpY19pbl9uZXh0MWAKKyogYGdpdCBtZXJnZSBhaS90b3BpY19pbl9uZXh0MmAKKyogLi4uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBhZHZhbnRhZ2Ugb2YgZG9pbmcgdGhpcyBpcyB0aGF0IHRoZSBoaXN0b3J5IG9mICduZXh0JyB3aWxsIGJlCitjbGVhbi4gRm9yIGV4YW1wbGUsIHNvbWUgdG9waWNzIG1lcmdlZCBpbnRvICduZXh0JyBtYXkgaGF2ZSBpbml0aWFsbHkKK2xvb2tlZCBwcm9taXNpbmcsIGJ1dCB3ZXJlIGxhdGVyIGZvdW5kIHRvIGJlIHVuZGVzaXJhYmxlIG9yIHByZW1hdHVyZS4KK0luIHN1Y2ggYSBjYXNlLCB0aGUgdG9waWMgaXMgcmV2ZXJ0ZWQgb3V0IG9mICduZXh0JyBidXQgdGhlIGZhY3QKK3JlbWFpbnMgaW4gdGhlIGhpc3RvcnkgdGhhdCBpdCB3YXMgb25jZSBtZXJnZWQgYW5kIHJldmVydGVkLiBCeQorcmVjcmVhdGluZyAnbmV4dCcsIHlvdSBnaXZlIGFub3RoZXIgaW5jYXJuYXRpb24gb2Ygc3VjaCB0b3BpY3MgYSBjbGVhbgorc2xhdGUgdG8gcmV0cnksIGFuZCBhIGZlYXR1cmUgcmVsZWFzZSBpcyBhIGdvb2QgcG9pbnQgaW4gaGlzdG9yeSB0byBkbworc28uCisKK0lmIHlvdSBkbyB0aGlzLCB0aGVuIHlvdSBzaG91bGQgbWFrZSBhIHB1YmxpYyBhbm5vdW5jZW1lbnQgaW5kaWNhdGluZwordGhhdCAnbmV4dCcgd2FzIHJld291bmQgYW5kIHJlYnVpbHQuCisKK1RoZSBzYW1lIHJld2luZCBhbmQgcmVidWlsZCBwcm9jZXNzIG1heSBiZSBmb2xsb3dlZCBmb3IgJ3B1Jy4gQSBwdWJsaWMKK2Fubm91bmNlbWVudCBpcyBub3QgbmVjZXNzYXJ5IHNpbmNlICdwdScgaXMgYSB0aHJvdy1hd2F5IGJyYW5jaCwgYXMKK2Rlc2NyaWJlZCBhYm92ZS4KKworCitESVNUUklCVVRFRCBXT1JLRkxPV1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciB0aGUgbGFzdCBzZWN0aW9uLCB5b3Ugc2hvdWxkIGtub3cgaG93IHRvIG1hbmFnZSB0b3BpY3MuICBJbgorZ2VuZXJhbCwgeW91IHdpbGwgbm90IGJlIHRoZSBvbmx5IHBlcnNvbiB3b3JraW5nIG9uIHRoZSBwcm9qZWN0LCBzbworeW91IHdpbGwgaGF2ZSB0byBzaGFyZSB5b3VyIHdvcmsuCisKK1JvdWdobHkgc3BlYWtpbmcsIHRoZXJlIGFyZSB0d28gaW1wb3J0YW50IHdvcmtmbG93czogbWVyZ2UgYW5kIHBhdGNoLgorVGhlIGltcG9ydGFudCBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIG1lcmdlIHdvcmtmbG93IGNhbiBwcm9wYWdhdGUgZnVsbAoraGlzdG9yeSwgaW5jbHVkaW5nIG1lcmdlcywgd2hpbGUgcGF0Y2hlcyBjYW5ub3QuICBCb3RoIHdvcmtmbG93cyBjYW4KK2JlIHVzZWQgaW4gcGFyYWxsZWw6IGluIGBnaXQuZ2l0YCwgb25seSBzdWJzeXN0ZW0gbWFpbnRhaW5lcnMgdXNlCit0aGUgbWVyZ2Ugd29ya2Zsb3csIHdoaWxlIGV2ZXJ5b25lIGVsc2Ugc2VuZHMgcGF0Y2hlcy4KKworTm90ZSB0aGF0IHRoZSBtYWludGFpbmVyKHMpIG1heSBpbXBvc2UgcmVzdHJpY3Rpb25zLCBzdWNoIGFzCisiU2lnbmVkLW9mZi1ieSIgcmVxdWlyZW1lbnRzLCB0aGF0IGFsbCBjb21taXRzL3BhdGNoZXMgc3VibWl0dGVkIGZvcgoraW5jbHVzaW9uIG11c3QgYWRoZXJlIHRvLiAgQ29uc3VsdCB5b3VyIHByb2plY3QncyBkb2N1bWVudGF0aW9uIGZvcgorbW9yZSBpbmZvcm1hdGlvbi4KKworCitNZXJnZSB3b3JrZmxvdworfn5+fn5+fn5+fn5+fn4KKworVGhlIG1lcmdlIHdvcmtmbG93IHdvcmtzIGJ5IGNvcHlpbmcgYnJhbmNoZXMgYmV0d2VlbiB1cHN0cmVhbSBhbmQKK2Rvd25zdHJlYW0uICBVcHN0cmVhbSBjYW4gbWVyZ2UgY29udHJpYnV0aW9ucyBpbnRvIHRoZSBvZmZpY2lhbAoraGlzdG9yeTsgZG93bnN0cmVhbSBiYXNlIHRoZWlyIHdvcmsgb24gdGhlIG9mZmljaWFsIGhpc3RvcnkuCisKK1RoZXJlIGFyZSB0aHJlZSBtYWluIHRvb2xzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRoaXM6CisKKyogbGlua2dpdDpnaXQtcHVzaFsxXSBjb3BpZXMgeW91ciBicmFuY2hlcyB0byBhIHJlbW90ZSByZXBvc2l0b3J5LAorICB1c3VhbGx5IHRvIG9uZSB0aGF0IGNhbiBiZSByZWFkIGJ5IGFsbCBpbnZvbHZlZCBwYXJ0aWVzOworCisqIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIHRoYXQgY29waWVzIHJlbW90ZSBicmFuY2hlcyB0byB5b3VyIHJlcG9zaXRvcnk7CisgIGFuZAorCisqIGxpbmtnaXQ6Z2l0LXB1bGxbMV0gdGhhdCBkb2VzIGZldGNoIGFuZCBtZXJnZSBpbiBvbmUgZ28uCisKK05vdGUgdGhlIGxhc3QgcG9pbnQuICBEbyAnbm90JyB1c2UgJ2dpdCBwdWxsJyB1bmxlc3MgeW91IGFjdHVhbGx5IHdhbnQKK3RvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoLgorCitHZXR0aW5nIGNoYW5nZXMgb3V0IGlzIGVhc3k6CisKKy5QdXNoL3B1bGw6IFB1Ymxpc2hpbmcgYnJhbmNoZXMvdG9waWNzCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBwdXNoIDxyZW1vdGU+IDxicmFuY2g+YCBhbmQgdGVsbCBldmVyeW9uZSB3aGVyZSB0aGV5IGNhbiBmZXRjaAorZnJvbS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IHdpbGwgc3RpbGwgaGF2ZSB0byB0ZWxsIHBlb3BsZSBieSBvdGhlciBtZWFucywgc3VjaCBhcyBtYWlsLiAgKEdpdAorcHJvdmlkZXMgdGhlIGxpbmtnaXQ6Z2l0LXJlcXVlc3QtcHVsbFsxXSB0byBzZW5kIHByZWZvcm1hdHRlZCBwdWxsCityZXF1ZXN0cyB0byB1cHN0cmVhbSBtYWludGFpbmVycyB0byBzaW1wbGlmeSB0aGlzIHRhc2suKQorCitJZiB5b3UganVzdCB3YW50IHRvIGdldCB0aGUgbmV3ZXN0IGNvcGllcyBvZiB0aGUgaW50ZWdyYXRpb24gYnJhbmNoZXMsCitzdGF5aW5nIHVwIHRvIGRhdGUgaXMgZWFzeSB0b286CisKKy5QdXNoL3B1bGw6IFN0YXlpbmcgdXAgdG8gZGF0ZQorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VzZSBgZ2l0IGZldGNoIDxyZW1vdGU+YCBvciBgZ2l0IHJlbW90ZSB1cGRhdGVgIHRvIHN0YXkgdXAgdG8gZGF0ZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlbiBzaW1wbHkgZm9yayB5b3VyIHRvcGljIGJyYW5jaGVzIGZyb20gdGhlIHN0YWJsZSByZW1vdGVzIGFzCitleHBsYWluZWQgZWFybGllci4KKworSWYgeW91IGFyZSBhIG1haW50YWluZXIgYW5kIHdvdWxkIGxpa2UgdG8gbWVyZ2Ugb3RoZXIgcGVvcGxlJ3MgdG9waWMKK2JyYW5jaGVzIHRvIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2hlcywgdGhleSB3aWxsIHR5cGljYWxseSBzZW5kIGEKK3JlcXVlc3QgdG8gZG8gc28gYnkgbWFpbC4gIFN1Y2ggYSByZXF1ZXN0IGxvb2tzIGxpa2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGxlYXNlIHB1bGwgZnJvbQorICAgIDx1cmw+IDxicmFuY2g+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoYXQgY2FzZSwgJ2dpdCBwdWxsJyBjYW4gZG8gdGhlIGZldGNoIGFuZCBtZXJnZSBpbiBvbmUgZ28sIGFzCitmb2xsb3dzLgorCisuUHVzaC9wdWxsOiBNZXJnaW5nIHJlbW90ZSB0b3BpY3MKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IHB1bGwgPHVybD4gPGJyYW5jaD5gCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09jY2FzaW9uYWxseSwgdGhlIG1haW50YWluZXIgbWF5IGdldCBtZXJnZSBjb25mbGljdHMgd2hlbiB0aGV5IHRyeSB0bworcHVsbCBjaGFuZ2VzIGZyb20gZG93bnN0cmVhbS4gIEluIHRoaXMgY2FzZSwgdGhleSBjYW4gYXNrIGRvd25zdHJlYW0gdG8KK2RvIHRoZSBtZXJnZSBhbmQgcmVzb2x2ZSB0aGUgY29uZmxpY3RzIHRoZW1zZWx2ZXMgKHBlcmhhcHMgdGhleSB3aWxsCitrbm93IGJldHRlciBob3cgdG8gcmVzb2x2ZSB0aGVtKS4gIEl0IGlzIG9uZSBvZiB0aGUgcmFyZSBjYXNlcyB3aGVyZQorZG93bnN0cmVhbSAnc2hvdWxkJyBtZXJnZSBmcm9tIHVwc3RyZWFtLgorCisKK1BhdGNoIHdvcmtmbG93Cit+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgYXJlIGEgY29udHJpYnV0b3IgdGhhdCBzZW5kcyBjaGFuZ2VzIHVwc3RyZWFtIGluIHRoZSBmb3JtIG9mCitlbWFpbHMsIHlvdSBzaG91bGQgdXNlIHRvcGljIGJyYW5jaGVzIGFzIHVzdWFsIChzZWUgYWJvdmUpLiAgVGhlbiB1c2UKK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSB0byBnZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBlbWFpbHMKKyhoaWdobHkgcmVjb21tZW5kZWQgb3ZlciBtYW51YWxseSBmb3JtYXR0aW5nIHRoZW0gYmVjYXVzZSBpdCBtYWtlcyB0aGUKK21haW50YWluZXIncyBsaWZlIGVhc2llcikuCisKKy5mb3JtYXQtcGF0Y2gvYW06IFB1Ymxpc2hpbmcgYnJhbmNoZXMvdG9waWNzCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBgZ2l0IGZvcm1hdC1wYXRjaCAtTSB1cHN0cmVhbS4udG9waWNgIHRvIHR1cm4gdGhlbSBpbnRvIHByZWZvcm1hdHRlZAorICBwYXRjaCBmaWxlcworKiBgZ2l0IHNlbmQtZW1haWwgLS10bz08cmVjaXBpZW50PiA8cGF0Y2hlcz5gCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NlZSB0aGUgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIGFuZCBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdCittYW5wYWdlcyBmb3IgZnVydGhlciB1c2FnZSBub3Rlcy4KKworSWYgdGhlIG1haW50YWluZXIgdGVsbHMgeW91IHRoYXQgeW91ciBwYXRjaCBubyBsb25nZXIgYXBwbGllcyB0byB0aGUKK2N1cnJlbnQgdXBzdHJlYW0sIHlvdSB3aWxsIGhhdmUgdG8gcmViYXNlIHlvdXIgdG9waWMgKHlvdSBjYW5ub3QgdXNlIGEKK21lcmdlIGJlY2F1c2UgeW91IGNhbm5vdCBmb3JtYXQtcGF0Y2ggbWVyZ2VzKToKKworLmZvcm1hdC1wYXRjaC9hbTogS2VlcGluZyB0b3BpY3MgdXAgdG8gZGF0ZQorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgcHVsbCAtLXJlYmFzZSA8dXJsPiA8YnJhbmNoPmAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IGNhbiB0aGVuIGZpeCB0aGUgY29uZmxpY3RzIGR1cmluZyB0aGUgcmViYXNlLiAgUHJlc3VtYWJseSB5b3UgaGF2ZQorbm90IHB1Ymxpc2hlZCB5b3VyIHRvcGljIG90aGVyIHRoYW4gYnkgbWFpbCwgc28gcmViYXNpbmcgaXQgaXMgbm90IGEKK3Byb2JsZW0uCisKK0lmIHlvdSByZWNlaXZlIHN1Y2ggYSBwYXRjaCBzZXJpZXMgKGFzIG1haW50YWluZXIsIG9yIHBlcmhhcHMgYXMgYQorcmVhZGVyIG9mIHRoZSBtYWlsaW5nIGxpc3QgaXQgd2FzIHNlbnQgdG8pLCBzYXZlIHRoZSBtYWlscyB0byBmaWxlcywKK2NyZWF0ZSBhIG5ldyB0b3BpYyBicmFuY2ggYW5kIHVzZSAnZ2l0IGFtJyB0byBpbXBvcnQgdGhlIGNvbW1pdHM6CisKKy5mb3JtYXQtcGF0Y2gvYW06IEltcG9ydGluZyBwYXRjaGVzCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBhbSA8IHBhdGNoYAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPbmUgZmVhdHVyZSB3b3J0aCBwb2ludGluZyBvdXQgaXMgdGhlIHRocmVlLXdheSBtZXJnZSwgd2hpY2ggY2FuIGhlbHAKK2lmIHlvdSBnZXQgY29uZmxpY3RzOiBgZ2l0IGFtIC0zYCB3aWxsIHVzZSBpbmRleCBpbmZvcm1hdGlvbiBjb250YWluZWQKK2luIHBhdGNoZXMgdG8gZmlndXJlIG91dCB0aGUgbWVyZ2UgYmFzZS4gIFNlZSBsaW5rZ2l0OmdpdC1hbVsxXSBmb3IKK290aGVyIG9wdGlvbnMuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLAorbGlua2dpdDpnaXQtcHVzaFsxXSwKK2xpbmtnaXQ6Z2l0LXB1bGxbMV0sCitsaW5rZ2l0OmdpdC1tZXJnZVsxXSwKK2xpbmtnaXQ6Z2l0LXJlYmFzZVsxXSwKK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwKK2xpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0sCitsaW5rZ2l0OmdpdC1hbVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MGM4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0CkBAIC0wLDAgKzEsNjcxIEBACitbW2RlZl9hbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlXV1hbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlOjoKKwlWaWEgdGhlIGFsdGVybmF0ZXMgbWVjaGFuaXNtLCBhIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+CisJY2FuIGluaGVyaXQgcGFydCBvZiBpdHMgPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdCBkYXRhYmFzZT4+CisJZnJvbSBhbm90aGVyIG9iamVjdCBkYXRhYmFzZSwgd2hpY2ggaXMgY2FsbGVkIGFuICJhbHRlcm5hdGUiLgorCitbW2RlZl9iYXJlX3JlcG9zaXRvcnldXWJhcmUgcmVwb3NpdG9yeTo6CisJQSBiYXJlIHJlcG9zaXRvcnkgaXMgbm9ybWFsbHkgYW4gYXBwcm9wcmlhdGVseQorCW5hbWVkIDw8ZGVmX2RpcmVjdG9yeSxkaXJlY3Rvcnk+PiB3aXRoIGEgYC5naXRgIHN1ZmZpeCB0aGF0IGRvZXMgbm90CisJaGF2ZSBhIGxvY2FsbHkgY2hlY2tlZC1vdXQgY29weSBvZiBhbnkgb2YgdGhlIGZpbGVzIHVuZGVyCisJcmV2aXNpb24gY29udHJvbC4gVGhhdCBpcywgYWxsIG9mIHRoZSBHaXQKKwlhZG1pbmlzdHJhdGl2ZSBhbmQgY29udHJvbCBmaWxlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHByZXNlbnQgaW4gdGhlCisJaGlkZGVuIGAuZ2l0YCBzdWItZGlyZWN0b3J5IGFyZSBkaXJlY3RseSBwcmVzZW50IGluIHRoZQorCWByZXBvc2l0b3J5LmdpdGAgZGlyZWN0b3J5IGluc3RlYWQsCisJYW5kIG5vIG90aGVyIGZpbGVzIGFyZSBwcmVzZW50IGFuZCBjaGVja2VkIG91dC4gVXN1YWxseSBwdWJsaXNoZXJzIG9mCisJcHVibGljIHJlcG9zaXRvcmllcyBtYWtlIGJhcmUgcmVwb3NpdG9yaWVzIGF2YWlsYWJsZS4KKworW1tkZWZfYmxvYl9vYmplY3RdXWJsb2Igb2JqZWN0OjoKKwlVbnR5cGVkIDw8ZGVmX29iamVjdCxvYmplY3Q+PiwgZS5nLiB0aGUgY29udGVudHMgb2YgYSBmaWxlLgorCitbW2RlZl9icmFuY2hdXWJyYW5jaDo6CisJQSAiYnJhbmNoIiBpcyBhbiBhY3RpdmUgbGluZSBvZiBkZXZlbG9wbWVudC4gIFRoZSBtb3N0IHJlY2VudAorCTw8ZGVmX2NvbW1pdCxjb21taXQ+PiBvbiBhIGJyYW5jaCBpcyByZWZlcnJlZCB0byBhcyB0aGUgdGlwIG9mCisJdGhhdCBicmFuY2guICBUaGUgdGlwIG9mIHRoZSBicmFuY2ggaXMgcmVmZXJlbmNlZCBieSBhIGJyYW5jaAorCTw8ZGVmX2hlYWQsaGVhZD4+LCB3aGljaCBtb3ZlcyBmb3J3YXJkIGFzIGFkZGl0aW9uYWwgZGV2ZWxvcG1lbnQKKwlpcyBkb25lIG9uIHRoZSBicmFuY2guICBBIHNpbmdsZSBHaXQKKwk8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PiBjYW4gdHJhY2sgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgorCWJyYW5jaGVzLCBidXQgeW91ciA8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4gaXMKKwlhc3NvY2lhdGVkIHdpdGgganVzdCBvbmUgb2YgdGhlbSAodGhlICJjdXJyZW50IiBvciAiY2hlY2tlZCBvdXQiCisJYnJhbmNoKSwgYW5kIDw8ZGVmX0hFQUQsSEVBRD4+IHBvaW50cyB0byB0aGF0IGJyYW5jaC4KKworW1tkZWZfY2FjaGVdXWNhY2hlOjoKKwlPYnNvbGV0ZSBmb3I6IDw8ZGVmX2luZGV4LGluZGV4Pj4uCisKK1tbZGVmX2NoYWluXV1jaGFpbjo6CisJQSBsaXN0IG9mIG9iamVjdHMsIHdoZXJlIGVhY2ggPDxkZWZfb2JqZWN0LG9iamVjdD4+IGluIHRoZSBsaXN0IGNvbnRhaW5zCisJYSByZWZlcmVuY2UgdG8gaXRzIHN1Y2Nlc3NvciAoZm9yIGV4YW1wbGUsIHRoZSBzdWNjZXNzb3Igb2YgYQorCTw8ZGVmX2NvbW1pdCxjb21taXQ+PiBjb3VsZCBiZSBvbmUgb2YgaXRzIDw8ZGVmX3BhcmVudCxwYXJlbnRzPj4pLgorCitbW2RlZl9jaGFuZ2VzZXRdXWNoYW5nZXNldDo6CisJQml0S2VlcGVyL2N2c3BzIHNwZWFrIGZvciAiPDxkZWZfY29tbWl0LGNvbW1pdD4+Ii4gU2luY2UgR2l0IGRvZXMgbm90CisJc3RvcmUgY2hhbmdlcywgYnV0IHN0YXRlcywgaXQgcmVhbGx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gdXNlIHRoZSB0ZXJtCisJImNoYW5nZXNldHMiIHdpdGggR2l0LgorCitbW2RlZl9jaGVja291dF1dY2hlY2tvdXQ6OgorCVRoZSBhY3Rpb24gb2YgdXBkYXRpbmcgYWxsIG9yIHBhcnQgb2YgdGhlCisJPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+IHdpdGggYSA8PGRlZl90cmVlX29iamVjdCx0cmVlIG9iamVjdD4+CisJb3IgPDxkZWZfYmxvYl9vYmplY3QsYmxvYj4+IGZyb20gdGhlCisJPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdCBkYXRhYmFzZT4+LCBhbmQgdXBkYXRpbmcgdGhlCisJPDxkZWZfaW5kZXgsaW5kZXg+PiBhbmQgPDxkZWZfSEVBRCxIRUFEPj4gaWYgdGhlIHdob2xlIHdvcmtpbmcgdHJlZSBoYXMKKwliZWVuIHBvaW50ZWQgYXQgYSBuZXcgPDxkZWZfYnJhbmNoLGJyYW5jaD4+LgorCitbW2RlZl9jaGVycnktcGlja2luZ11dY2hlcnJ5LXBpY2tpbmc6OgorCUluIDw8ZGVmX1NDTSxTQ00+PiBqYXJnb24sICJjaGVycnkgcGljayIgbWVhbnMgdG8gY2hvb3NlIGEgc3Vic2V0IG9mCisJY2hhbmdlcyBvdXQgb2YgYSBzZXJpZXMgb2YgY2hhbmdlcyAodHlwaWNhbGx5IGNvbW1pdHMpIGFuZCByZWNvcmQgdGhlbQorCWFzIGEgbmV3IHNlcmllcyBvZiBjaGFuZ2VzIG9uIHRvcCBvZiBhIGRpZmZlcmVudCBjb2RlYmFzZS4gSW4gR2l0LCB0aGlzIGlzCisJcGVyZm9ybWVkIGJ5IHRoZSAiZ2l0IGNoZXJyeS1waWNrIiBjb21tYW5kIHRvIGV4dHJhY3QgdGhlIGNoYW5nZSBpbnRyb2R1Y2VkCisJYnkgYW4gZXhpc3RpbmcgPDxkZWZfY29tbWl0LGNvbW1pdD4+IGFuZCB0byByZWNvcmQgaXQgYmFzZWQgb24gdGhlIHRpcAorCW9mIHRoZSBjdXJyZW50IDw8ZGVmX2JyYW5jaCxicmFuY2g+PiBhcyBhIG5ldyBjb21taXQuCisKK1tbZGVmX2NsZWFuXV1jbGVhbjo6CisJQSA8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4gaXMgY2xlYW4sIGlmIGl0CisJY29ycmVzcG9uZHMgdG8gdGhlIDw8ZGVmX3JldmlzaW9uLHJldmlzaW9uPj4gcmVmZXJlbmNlZCBieSB0aGUgY3VycmVudAorCTw8ZGVmX2hlYWQsaGVhZD4+LiBBbHNvIHNlZSAiPDxkZWZfZGlydHksZGlydHk+PiIuCisKK1tbZGVmX2NvbW1pdF1dY29tbWl0OjoKKwlBcyBhIG5vdW46IEEgc2luZ2xlIHBvaW50IGluIHRoZQorCUdpdCBoaXN0b3J5OyB0aGUgZW50aXJlIGhpc3Rvcnkgb2YgYSBwcm9qZWN0IGlzIHJlcHJlc2VudGVkIGFzIGEKKwlzZXQgb2YgaW50ZXJyZWxhdGVkIGNvbW1pdHMuICBUaGUgd29yZCAiY29tbWl0IiBpcyBvZnRlbgorCXVzZWQgYnkgR2l0IGluIHRoZSBzYW1lIHBsYWNlcyBvdGhlciByZXZpc2lvbiBjb250cm9sIHN5c3RlbXMKKwl1c2UgdGhlIHdvcmRzICJyZXZpc2lvbiIgb3IgInZlcnNpb24iLiAgQWxzbyB1c2VkIGFzIGEgc2hvcnQKKwloYW5kIGZvciA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3Q+Pi4KKysKK0FzIGEgdmVyYjogVGhlIGFjdGlvbiBvZiBzdG9yaW5nIGEgbmV3IHNuYXBzaG90IG9mIHRoZSBwcm9qZWN0J3MKK3N0YXRlIGluIHRoZSBHaXQgaGlzdG9yeSwgYnkgY3JlYXRpbmcgYSBuZXcgY29tbWl0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudAorc3RhdGUgb2YgdGhlIDw8ZGVmX2luZGV4LGluZGV4Pj4gYW5kIGFkdmFuY2luZyA8PGRlZl9IRUFELEhFQUQ+PgordG8gcG9pbnQgYXQgdGhlIG5ldyBjb21taXQuCisKK1tbZGVmX2NvbW1pdF9vYmplY3RdXWNvbW1pdCBvYmplY3Q6OgorCUFuIDw8ZGVmX29iamVjdCxvYmplY3Q+PiB3aGljaCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYQorCXBhcnRpY3VsYXIgPDxkZWZfcmV2aXNpb24scmV2aXNpb24+Piwgc3VjaCBhcyA8PGRlZl9wYXJlbnQscGFyZW50cz4+LCBjb21taXR0ZXIsCisJYXV0aG9yLCBkYXRlIGFuZCB0aGUgPDxkZWZfdHJlZV9vYmplY3QsdHJlZSBvYmplY3Q+PiB3aGljaCBjb3JyZXNwb25kcworCXRvIHRoZSB0b3AgPDxkZWZfZGlyZWN0b3J5LGRpcmVjdG9yeT4+IG9mIHRoZSBzdG9yZWQKKwlyZXZpc2lvbi4KKworW1tkZWZfY29tbWl0LWlzaF1dY29tbWl0LWlzaCAoYWxzbyBjb21taXR0aXNoKTo6CisJQSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3Q+PiBvciBhbgorCTw8ZGVmX29iamVjdCxvYmplY3Q+PiB0aGF0IGNhbiBiZSByZWN1cnNpdmVseSBkZXJlZmVyZW5jZWQgdG8KKwlhIGNvbW1pdCBvYmplY3QuCisJVGhlIGZvbGxvd2luZyBhcmUgYWxsIGNvbW1pdC1pc2hlczoKKwlhIGNvbW1pdCBvYmplY3QsCisJYSA8PGRlZl90YWdfb2JqZWN0LHRhZyBvYmplY3Q+PiB0aGF0IHBvaW50cyB0byBhIGNvbW1pdAorCW9iamVjdCwKKwlhIHRhZyBvYmplY3QgdGhhdCBwb2ludHMgdG8gYSB0YWcgb2JqZWN0IHRoYXQgcG9pbnRzIHRvIGEKKwljb21taXQgb2JqZWN0LAorCWV0Yy4KKworW1tkZWZfY29yZV9naXRdXWNvcmUgR2l0OjoKKwlGdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIHV0aWxpdGllcyBvZiBHaXQuIEV4cG9zZXMgb25seSBsaW1pdGVkCisJc291cmNlIGNvZGUgbWFuYWdlbWVudCB0b29scy4KKworW1tkZWZfREFHXV1EQUc6OgorCURpcmVjdGVkIGFjeWNsaWMgZ3JhcGguIFRoZSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3RzPj4gZm9ybSBhCisJZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaCwgYmVjYXVzZSB0aGV5IGhhdmUgcGFyZW50cyAoZGlyZWN0ZWQpLCBhbmQgdGhlCisJZ3JhcGggb2YgY29tbWl0IG9iamVjdHMgaXMgYWN5Y2xpYyAodGhlcmUgaXMgbm8gPDxkZWZfY2hhaW4sY2hhaW4+PgorCXdoaWNoIGJlZ2lucyBhbmQgZW5kcyB3aXRoIHRoZSBzYW1lIDw8ZGVmX29iamVjdCxvYmplY3Q+PikuCisKK1tbZGVmX2RhbmdsaW5nX29iamVjdF1dZGFuZ2xpbmcgb2JqZWN0OjoKKwlBbiA8PGRlZl91bnJlYWNoYWJsZV9vYmplY3QsdW5yZWFjaGFibGUgb2JqZWN0Pj4gd2hpY2ggaXMgbm90CisJPDxkZWZfcmVhY2hhYmxlLHJlYWNoYWJsZT4+IGV2ZW4gZnJvbSBvdGhlciB1bnJlYWNoYWJsZSBvYmplY3RzOyBhCisJZGFuZ2xpbmcgb2JqZWN0IGhhcyBubyByZWZlcmVuY2VzIHRvIGl0IGZyb20gYW55CisJcmVmZXJlbmNlIG9yIDw8ZGVmX29iamVjdCxvYmplY3Q+PiBpbiB0aGUgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4uCisKK1tbZGVmX2RldGFjaGVkX0hFQURdXWRldGFjaGVkIEhFQUQ6OgorCU5vcm1hbGx5IHRoZSA8PGRlZl9IRUFELEhFQUQ+PiBzdG9yZXMgdGhlIG5hbWUgb2YgYQorCTw8ZGVmX2JyYW5jaCxicmFuY2g+PiwgYW5kIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0aGUKKwloaXN0b3J5IEhFQUQgcmVwcmVzZW50cyBvcGVyYXRlIG9uIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlCisJdGlwIG9mIHRoZSBicmFuY2ggdGhlIEhFQUQgcG9pbnRzIGF0LiAgSG93ZXZlciwgR2l0IGFsc28KKwlhbGxvd3MgeW91IHRvIDw8ZGVmX2NoZWNrb3V0LGNoZWNrIG91dD4+IGFuIGFyYml0cmFyeQorCTw8ZGVmX2NvbW1pdCxjb21taXQ+PiB0aGF0IGlzbid0IG5lY2Vzc2FyaWx5IHRoZSB0aXAgb2YgYW55CisJcGFydGljdWxhciBicmFuY2guICBUaGUgSEVBRCBpbiBzdWNoIGEgc3RhdGUgaXMgY2FsbGVkCisJImRldGFjaGVkIi4KKysKK05vdGUgdGhhdCBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdGhlIGhpc3Rvcnkgb2YgdGhlIGN1cnJlbnQgYnJhbmNoCisoZS5nLiBgZ2l0IGNvbW1pdGAgdG8gYnVpbGQgYSBuZXcgaGlzdG9yeSBvbiB0b3Agb2YgaXQpIHN0aWxsIHdvcmsKK3doaWxlIHRoZSBIRUFEIGlzIGRldGFjaGVkLiBUaGV5IHVwZGF0ZSB0aGUgSEVBRCB0byBwb2ludCBhdCB0aGUgdGlwCitvZiB0aGUgdXBkYXRlZCBoaXN0b3J5IHdpdGhvdXQgYWZmZWN0aW5nIGFueSBicmFuY2guICBDb21tYW5kcyB0aGF0Cit1cGRhdGUgb3IgaW5xdWlyZSBpbmZvcm1hdGlvbiBfYWJvdXRfIHRoZSBjdXJyZW50IGJyYW5jaCAoZS5nLiBgZ2l0CiticmFuY2ggLS1zZXQtdXBzdHJlYW0tdG9gIHRoYXQgc2V0cyB3aGF0IHJlbW90ZS10cmFja2luZyBicmFuY2ggdGhlCitjdXJyZW50IGJyYW5jaCBpbnRlZ3JhdGVzIHdpdGgpIG9idmlvdXNseSBkbyBub3Qgd29yaywgYXMgdGhlcmUgaXMgbm8KKyhyZWFsKSBjdXJyZW50IGJyYW5jaCB0byBhc2sgYWJvdXQgaW4gdGhpcyBzdGF0ZS4KKworW1tkZWZfZGlyZWN0b3J5XV1kaXJlY3Rvcnk6OgorCVRoZSBsaXN0IHlvdSBnZXQgd2l0aCAibHMiIDotKQorCitbW2RlZl9kaXJ0eV1dZGlydHk6OgorCUEgPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+IGlzIHNhaWQgdG8gYmUgImRpcnR5IiBpZgorCWl0IGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgd2hpY2ggaGF2ZSBub3QgYmVlbiA8PGRlZl9jb21taXQsY29tbWl0dGVkPj4gdG8gdGhlIGN1cnJlbnQKKwk8PGRlZl9icmFuY2gsYnJhbmNoPj4uCisKK1tbZGVmX2V2aWxfbWVyZ2VdXWV2aWwgbWVyZ2U6OgorCUFuIGV2aWwgbWVyZ2UgaXMgYSA8PGRlZl9tZXJnZSxtZXJnZT4+IHRoYXQgaW50cm9kdWNlcyBjaGFuZ2VzIHRoYXQKKwlkbyBub3QgYXBwZWFyIGluIGFueSA8PGRlZl9wYXJlbnQscGFyZW50Pj4uCisKK1tbZGVmX2Zhc3RfZm9yd2FyZF1dZmFzdC1mb3J3YXJkOjoKKwlBIGZhc3QtZm9yd2FyZCBpcyBhIHNwZWNpYWwgdHlwZSBvZiA8PGRlZl9tZXJnZSxtZXJnZT4+IHdoZXJlIHlvdSBoYXZlIGEKKwk8PGRlZl9yZXZpc2lvbixyZXZpc2lvbj4+IGFuZCB5b3UgYXJlICJtZXJnaW5nIiBhbm90aGVyCisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+J3MgY2hhbmdlcyB0aGF0IGhhcHBlbiB0byBiZSBhIGRlc2NlbmRhbnQgb2Ygd2hhdAorCXlvdSBoYXZlLiBJbiBzdWNoIGEgY2FzZSwgeW91IGRvIG5vdCBtYWtlIGEgbmV3IDw8ZGVmX21lcmdlLG1lcmdlPj4KKwk8PGRlZl9jb21taXQsY29tbWl0Pj4gYnV0IGluc3RlYWQganVzdCB1cGRhdGUgdG8gaGlzCisJcmV2aXNpb24uIFRoaXMgd2lsbCBoYXBwZW4gZnJlcXVlbnRseSBvbiBhCisJPDxkZWZfcmVtb3RlX3RyYWNraW5nX2JyYW5jaCxyZW1vdGUtdHJhY2tpbmcgYnJhbmNoPj4gb2YgYSByZW1vdGUKKwk8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+Pi4KKworW1tkZWZfZmV0Y2hdXWZldGNoOjoKKwlGZXRjaGluZyBhIDw8ZGVmX2JyYW5jaCxicmFuY2g+PiBtZWFucyB0byBnZXQgdGhlCisJYnJhbmNoJ3MgPDxkZWZfaGVhZF9yZWYsaGVhZCByZWY+PiBmcm9tIGEgcmVtb3RlCisJPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4sIHRvIGZpbmQgb3V0IHdoaWNoIG9iamVjdHMgYXJlCisJbWlzc2luZyBmcm9tIHRoZSBsb2NhbCA8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4sCisJYW5kIHRvIGdldCB0aGVtLCB0b28uICBTZWUgYWxzbyBsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKworW1tkZWZfZmlsZV9zeXN0ZW1dXWZpbGUgc3lzdGVtOjoKKwlMaW51cyBUb3J2YWxkcyBvcmlnaW5hbGx5IGRlc2lnbmVkIEdpdCB0byBiZSBhIHVzZXIgc3BhY2UgZmlsZSBzeXN0ZW0sCisJaS5lLiB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gaG9sZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIFRoYXQgZW5zdXJlZCB0aGUKKwllZmZpY2llbmN5IGFuZCBzcGVlZCBvZiBHaXQuCisKK1tbZGVmX2dpdF9hcmNoaXZlXV1HaXQgYXJjaGl2ZTo6CisJU3lub255bSBmb3IgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4gKGZvciBhcmNoIHBlb3BsZSkuCisKK1tbZGVmX2dpdGZpbGVdXWdpdGZpbGU6OgorCUEgcGxhaW4gZmlsZSBgLmdpdGAgYXQgdGhlIHJvb3Qgb2YgYSB3b3JraW5nIHRyZWUgdGhhdAorCXBvaW50cyBhdCB0aGUgZGlyZWN0b3J5IHRoYXQgaXMgdGhlIHJlYWwgcmVwb3NpdG9yeS4KKworW1tkZWZfZ3JhZnRzXV1ncmFmdHM6OgorCUdyYWZ0cyBlbmFibGVzIHR3byBvdGhlcndpc2UgZGlmZmVyZW50IGxpbmVzIG9mIGRldmVsb3BtZW50IHRvIGJlIGpvaW5lZAorCXRvZ2V0aGVyIGJ5IHJlY29yZGluZyBmYWtlIGFuY2VzdHJ5IGluZm9ybWF0aW9uIGZvciBjb21taXRzLiBUaGlzIHdheQorCXlvdSBjYW4gbWFrZSBHaXQgcHJldGVuZCB0aGUgc2V0IG9mIDw8ZGVmX3BhcmVudCxwYXJlbnRzPj4gYSA8PGRlZl9jb21taXQsY29tbWl0Pj4gaGFzCisJaXMgZGlmZmVyZW50IGZyb20gd2hhdCB3YXMgcmVjb3JkZWQgd2hlbiB0aGUgY29tbWl0IHdhcworCWNyZWF0ZWQuIENvbmZpZ3VyZWQgdmlhIHRoZSBgLmdpdC9pbmZvL2dyYWZ0c2AgZmlsZS4KKysKK05vdGUgdGhhdCB0aGUgZ3JhZnRzIG1lY2hhbmlzbSBpcyBvdXRkYXRlZCBhbmQgY2FuIGxlYWQgdG8gcHJvYmxlbXMKK3RyYW5zZmVycmluZyBvYmplY3RzIGJldHdlZW4gcmVwb3NpdG9yaWVzOyBzZWUgbGlua2dpdDpnaXQtcmVwbGFjZVsxXQorZm9yIGEgbW9yZSBmbGV4aWJsZSBhbmQgcm9idXN0IHN5c3RlbSB0byBkbyB0aGUgc2FtZSB0aGluZy4KKworW1tkZWZfaGFzaF1daGFzaDo6CisJSW4gR2l0J3MgY29udGV4dCwgc3lub255bSBmb3IgPDxkZWZfb2JqZWN0X25hbWUsb2JqZWN0IG5hbWU+Pi4KKworW1tkZWZfaGVhZF1daGVhZDo6CisJQSA8PGRlZl9yZWYsbmFtZWQgcmVmZXJlbmNlPj4gdG8gdGhlIDw8ZGVmX2NvbW1pdCxjb21taXQ+PiBhdCB0aGUgdGlwIG9mIGEKKwk8PGRlZl9icmFuY2gsYnJhbmNoPj4uICBIZWFkcyBhcmUgc3RvcmVkIGluIGEgZmlsZSBpbgorCWAkR0lUX0RJUi9yZWZzL2hlYWRzL2AgZGlyZWN0b3J5LCBleGNlcHQgd2hlbiB1c2luZyBwYWNrZWQgcmVmcy4gKFNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stcmVmc1sxXS4pCisKK1tbZGVmX0hFQURdXUhFQUQ6OgorCVRoZSBjdXJyZW50IDw8ZGVmX2JyYW5jaCxicmFuY2g+Pi4gIEluIG1vcmUgZGV0YWlsOiBZb3VyIDw8ZGVmX3dvcmtpbmdfdHJlZSwKKwl3b3JraW5nIHRyZWU+PiBpcyBub3JtYWxseSBkZXJpdmVkIGZyb20gdGhlIHN0YXRlIG9mIHRoZSB0cmVlCisJcmVmZXJyZWQgdG8gYnkgSEVBRC4gIEhFQUQgaXMgYSByZWZlcmVuY2UgdG8gb25lIG9mIHRoZQorCTw8ZGVmX2hlYWQsaGVhZHM+PiBpbiB5b3VyIHJlcG9zaXRvcnksIGV4Y2VwdCB3aGVuIHVzaW5nIGEKKwk8PGRlZl9kZXRhY2hlZF9IRUFELGRldGFjaGVkIEhFQUQ+PiwgaW4gd2hpY2ggY2FzZSBpdCBkaXJlY3RseQorCXJlZmVyZW5jZXMgYW4gYXJiaXRyYXJ5IGNvbW1pdC4KKworW1tkZWZfaGVhZF9yZWZdXWhlYWQgcmVmOjoKKwlBIHN5bm9ueW0gZm9yIDw8ZGVmX2hlYWQsaGVhZD4+LgorCitbW2RlZl9ob29rXV1ob29rOjoKKwlEdXJpbmcgdGhlIG5vcm1hbCBleGVjdXRpb24gb2Ygc2V2ZXJhbCBHaXQgY29tbWFuZHMsIGNhbGwtb3V0cyBhcmUgbWFkZQorCXRvIG9wdGlvbmFsIHNjcmlwdHMgdGhhdCBhbGxvdyBhIGRldmVsb3BlciB0byBhZGQgZnVuY3Rpb25hbGl0eSBvcgorCWNoZWNraW5nLiBUeXBpY2FsbHksIHRoZSBob29rcyBhbGxvdyBmb3IgYSBjb21tYW5kIHRvIGJlIHByZS12ZXJpZmllZAorCWFuZCBwb3RlbnRpYWxseSBhYm9ydGVkLCBhbmQgYWxsb3cgZm9yIGEgcG9zdC1ub3RpZmljYXRpb24gYWZ0ZXIgdGhlCisJb3BlcmF0aW9uIGlzIGRvbmUuIFRoZSBob29rIHNjcmlwdHMgYXJlIGZvdW5kIGluIHRoZQorCWAkR0lUX0RJUi9ob29rcy9gIGRpcmVjdG9yeSwgYW5kIGFyZSBlbmFibGVkIGJ5IHNpbXBseQorCXJlbW92aW5nIHRoZSBgLnNhbXBsZWAgc3VmZml4IGZyb20gdGhlIGZpbGVuYW1lLiBJbiBlYXJsaWVyIHZlcnNpb25zCisJb2YgR2l0IHlvdSBoYWQgdG8gbWFrZSB0aGVtIGV4ZWN1dGFibGUuCisKK1tbZGVmX2luZGV4XV1pbmRleDo6CisJQSBjb2xsZWN0aW9uIG9mIGZpbGVzIHdpdGggc3RhdCBpbmZvcm1hdGlvbiwgd2hvc2UgY29udGVudHMgYXJlIHN0b3JlZAorCWFzIG9iamVjdHMuIFRoZSBpbmRleCBpcyBhIHN0b3JlZCB2ZXJzaW9uIG9mIHlvdXIKKwk8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4uIFRydXRoIGJlIHRvbGQsIGl0IGNhbiBhbHNvIGNvbnRhaW4gYSBzZWNvbmQsIGFuZCBldmVuCisJYSB0aGlyZCB2ZXJzaW9uIG9mIGEgd29ya2luZyB0cmVlLCB3aGljaCBhcmUgdXNlZAorCXdoZW4gPDxkZWZfbWVyZ2UsbWVyZ2luZz4+LgorCitbW2RlZl9pbmRleF9lbnRyeV1daW5kZXggZW50cnk6OgorCVRoZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYSBwYXJ0aWN1bGFyIGZpbGUsIHN0b3JlZCBpbiB0aGUKKwk8PGRlZl9pbmRleCxpbmRleD4+LiBBbiBpbmRleCBlbnRyeSBjYW4gYmUgdW5tZXJnZWQsIGlmIGEKKwk8PGRlZl9tZXJnZSxtZXJnZT4+IHdhcyBzdGFydGVkLCBidXQgbm90IHlldCBmaW5pc2hlZCAoaS5lLiBpZgorCXRoZSBpbmRleCBjb250YWlucyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGF0IGZpbGUpLgorCitbW2RlZl9tYXN0ZXJdXW1hc3Rlcjo6CisJVGhlIGRlZmF1bHQgZGV2ZWxvcG1lbnQgPDxkZWZfYnJhbmNoLGJyYW5jaD4+LiBXaGVuZXZlciB5b3UKKwljcmVhdGUgYSBHaXQgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4sIGEgYnJhbmNoIG5hbWVkCisJIm1hc3RlciIgaXMgY3JlYXRlZCwgYW5kIGJlY29tZXMgdGhlIGFjdGl2ZSBicmFuY2guIEluIG1vc3QKKwljYXNlcywgdGhpcyBjb250YWlucyB0aGUgbG9jYWwgZGV2ZWxvcG1lbnQsIHRob3VnaCB0aGF0IGlzCisJcHVyZWx5IGJ5IGNvbnZlbnRpb24gYW5kIGlzIG5vdCByZXF1aXJlZC4KKworW1tkZWZfbWVyZ2VdXW1lcmdlOjoKKwlBcyBhIHZlcmI6IFRvIGJyaW5nIHRoZSBjb250ZW50cyBvZiBhbm90aGVyCisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+IChwb3NzaWJseSBmcm9tIGFuIGV4dGVybmFsCisJPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4pIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgSW4gdGhlCisJY2FzZSB3aGVyZSB0aGUgbWVyZ2VkLWluIGJyYW5jaCBpcyBmcm9tIGEgZGlmZmVyZW50IHJlcG9zaXRvcnksCisJdGhpcyBpcyBkb25lIGJ5IGZpcnN0IDw8ZGVmX2ZldGNoLGZldGNoaW5nPj4gdGhlIHJlbW90ZSBicmFuY2gKKwlhbmQgdGhlbiBtZXJnaW5nIHRoZSByZXN1bHQgaW50byB0aGUgY3VycmVudCBicmFuY2guICBUaGlzCisJY29tYmluYXRpb24gb2YgZmV0Y2ggYW5kIG1lcmdlIG9wZXJhdGlvbnMgaXMgY2FsbGVkIGEKKwk8PGRlZl9wdWxsLHB1bGw+Pi4gIE1lcmdpbmcgaXMgcGVyZm9ybWVkIGJ5IGFuIGF1dG9tYXRpYyBwcm9jZXNzCisJdGhhdCBpZGVudGlmaWVzIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgYnJhbmNoZXMgZGl2ZXJnZWQsIGFuZAorCXRoZW4gYXBwbGllcyBhbGwgdGhvc2UgY2hhbmdlcyB0b2dldGhlci4gIEluIGNhc2VzIHdoZXJlIGNoYW5nZXMKKwljb25mbGljdCwgbWFudWFsIGludGVydmVudGlvbiBtYXkgYmUgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhlCisJbWVyZ2UuCisrCitBcyBhIG5vdW46IHVubGVzcyBpdCBpcyBhIDw8ZGVmX2Zhc3RfZm9yd2FyZCxmYXN0LWZvcndhcmQ+PiwgYQorc3VjY2Vzc2Z1bCBtZXJnZSByZXN1bHRzIGluIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyA8PGRlZl9jb21taXQsY29tbWl0Pj4KK3JlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSwgYW5kIGhhdmluZyBhcworPDxkZWZfcGFyZW50LHBhcmVudHM+PiB0aGUgdGlwcyBvZiB0aGUgbWVyZ2VkIDw8ZGVmX2JyYW5jaCxicmFuY2hlcz4+LgorVGhpcyBjb21taXQgaXMgcmVmZXJyZWQgdG8gYXMgYSAibWVyZ2UgY29tbWl0Iiwgb3Igc29tZXRpbWVzIGp1c3QgYQorIm1lcmdlIi4KKworW1tkZWZfb2JqZWN0XV1vYmplY3Q6OgorCVRoZSB1bml0IG9mIHN0b3JhZ2UgaW4gR2l0LiBJdCBpcyB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IHRoZQorCTw8ZGVmX1NIQTEsU0hBLTE+PiBvZiBpdHMgY29udGVudHMuIENvbnNlcXVlbnRseSwgYW4KKwlvYmplY3QgY2Fubm90IGJlIGNoYW5nZWQuCisKK1tbZGVmX29iamVjdF9kYXRhYmFzZV1db2JqZWN0IGRhdGFiYXNlOjoKKwlTdG9yZXMgYSBzZXQgb2YgIm9iamVjdHMiLCBhbmQgYW4gaW5kaXZpZHVhbCA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gaXMKKwlpZGVudGlmaWVkIGJ5IGl0cyA8PGRlZl9vYmplY3RfbmFtZSxvYmplY3QgbmFtZT4+LiBUaGUgb2JqZWN0cyB1c3VhbGx5CisJbGl2ZSBpbiBgJEdJVF9ESVIvb2JqZWN0cy9gLgorCitbW2RlZl9vYmplY3RfaWRlbnRpZmllcl1db2JqZWN0IGlkZW50aWZpZXI6OgorCVN5bm9ueW0gZm9yIDw8ZGVmX29iamVjdF9uYW1lLG9iamVjdCBuYW1lPj4uCisKK1tbZGVmX29iamVjdF9uYW1lXV1vYmplY3QgbmFtZTo6CisJVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGFuIDw8ZGVmX29iamVjdCxvYmplY3Q+Pi4gIFRoZQorCW9iamVjdCBuYW1lIGlzIHVzdWFsbHkgcmVwcmVzZW50ZWQgYnkgYSA0MCBjaGFyYWN0ZXIKKwloZXhhZGVjaW1hbCBzdHJpbmcuICBBbHNvIGNvbGxvcXVpYWxseSBjYWxsZWQgPDxkZWZfU0hBMSxTSEEtMT4+LgorCitbW2RlZl9vYmplY3RfdHlwZV1db2JqZWN0IHR5cGU6OgorCU9uZSBvZiB0aGUgaWRlbnRpZmllcnMgIjw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0Pj4iLAorCSI8PGRlZl90cmVlX29iamVjdCx0cmVlPj4iLCAiPDxkZWZfdGFnX29iamVjdCx0YWc+PiIgb3IKKwkiPDxkZWZfYmxvYl9vYmplY3QsYmxvYj4+IiBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGFuCisJPDxkZWZfb2JqZWN0LG9iamVjdD4+LgorCitbW2RlZl9vY3RvcHVzXV1vY3RvcHVzOjoKKwlUbyA8PGRlZl9tZXJnZSxtZXJnZT4+IG1vcmUgdGhhbiB0d28gPDxkZWZfYnJhbmNoLGJyYW5jaGVzPj4uCisKK1tbZGVmX29yaWdpbl1db3JpZ2luOjoKKwlUaGUgZGVmYXVsdCB1cHN0cmVhbSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+Pi4gTW9zdCBwcm9qZWN0cyBoYXZlCisJYXQgbGVhc3Qgb25lIHVwc3RyZWFtIHByb2plY3Qgd2hpY2ggdGhleSB0cmFjay4gQnkgZGVmYXVsdAorCSdvcmlnaW4nIGlzIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4gTmV3IHVwc3RyZWFtIHVwZGF0ZXMKKwl3aWxsIGJlIGZldGNoZWQgaW50byA8PGRlZl9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoLHJlbW90ZS10cmFja2luZyBicmFuY2hlcz4+IG5hbWVkCisJb3JpZ2luL25hbWUtb2YtdXBzdHJlYW0tYnJhbmNoLCB3aGljaCB5b3UgY2FuIHNlZSB1c2luZworCWBnaXQgYnJhbmNoIC1yYC4KKworW1tkZWZfb3ZlcmxheV1db3ZlcmxheTo6CisJT25seSB1cGRhdGUgYW5kIGFkZCBmaWxlcyB0byB0aGUgd29ya2luZyBkaXJlY3RvcnksIGJ1dCBkb24ndAorCWRlbGV0ZSB0aGVtLCBzaW1pbGFyIHRvIGhvdyAnY3AgLVInIHdvdWxkIHVwZGF0ZSB0aGUgY29udGVudHMKKwlpbiB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlIGluIGEKKwk8PGRlZl9jaGVja291dCxjaGVja291dD4+IHdoZW4gY2hlY2tpbmcgb3V0IGZpbGVzIGZyb20gdGhlCisJPDxkZWZfaW5kZXgsaW5kZXg+PiBvciBhIDw8ZGVmX3RyZWUtaXNoLHRyZWUtaXNoPj4uICBJbgorCWNvbnRyYXN0LCBuby1vdmVybGF5IG1vZGUgYWxzbyBkZWxldGVzIHRyYWNrZWQgZmlsZXMgbm90CisJcHJlc2VudCBpbiB0aGUgc291cmNlLCBzaW1pbGFyIHRvICdyc3luYyAtLWRlbGV0ZScuCisKK1tbZGVmX3BhY2tdXXBhY2s6OgorCUEgc2V0IG9mIG9iamVjdHMgd2hpY2ggaGF2ZSBiZWVuIGNvbXByZXNzZWQgaW50byBvbmUgZmlsZSAodG8gc2F2ZSBzcGFjZQorCW9yIHRvIHRyYW5zbWl0IHRoZW0gZWZmaWNpZW50bHkpLgorCitbW2RlZl9wYWNrX2luZGV4XV1wYWNrIGluZGV4OjoKKwlUaGUgbGlzdCBvZiBpZGVudGlmaWVycywgYW5kIG90aGVyIGluZm9ybWF0aW9uLCBvZiB0aGUgb2JqZWN0cyBpbiBhCisJPDxkZWZfcGFjayxwYWNrPj4sIHRvIGFzc2lzdCBpbiBlZmZpY2llbnRseSBhY2Nlc3NpbmcgdGhlIGNvbnRlbnRzIG9mIGEKKwlwYWNrLgorCitbW2RlZl9wYXRoc3BlY11dcGF0aHNwZWM6OgorCVBhdHRlcm4gdXNlZCB0byBsaW1pdCBwYXRocyBpbiBHaXQgY29tbWFuZHMuCisrCitQYXRoc3BlY3MgYXJlIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvZiAiZ2l0IGxzLWZpbGVzIiwgImdpdAorbHMtdHJlZSIsICJnaXQgYWRkIiwgImdpdCBncmVwIiwgImdpdCBkaWZmIiwgImdpdCBjaGVja291dCIsCithbmQgbWFueSBvdGhlciBjb21tYW5kcyB0bworbGltaXQgdGhlIHNjb3BlIG9mIG9wZXJhdGlvbnMgdG8gc29tZSBzdWJzZXQgb2YgdGhlIHRyZWUgb3IKK3dvcmt0cmVlLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIGVhY2ggY29tbWFuZCBmb3Igd2hldGhlcgorcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvciB0b3BsZXZlbC4gIFRoZQorcGF0aHNwZWMgc3ludGF4IGlzIGFzIGZvbGxvd3M6CisrCistLQorCisqIGFueSBwYXRoIG1hdGNoZXMgaXRzZWxmCisqIHRoZSBwYXRoc3BlYyB1cCB0byB0aGUgbGFzdCBzbGFzaCByZXByZXNlbnRzIGEKKyAgZGlyZWN0b3J5IHByZWZpeC4gIFRoZSBzY29wZSBvZiB0aGF0IHBhdGhzcGVjIGlzCisgIGxpbWl0ZWQgdG8gdGhhdCBzdWJ0cmVlLgorKiB0aGUgcmVzdCBvZiB0aGUgcGF0aHNwZWMgaXMgYSBwYXR0ZXJuIGZvciB0aGUgcmVtYWluZGVyCisgIG9mIHRoZSBwYXRobmFtZS4gIFBhdGhzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkKKyAgcHJlZml4IHdpbGwgYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoYXQgcGF0dGVybiB1c2luZyBmbm1hdGNoKDMpOworICBpbiBwYXJ0aWN1bGFyLCAnKicgYW5kICc/JyBfY2FuXyBtYXRjaCBkaXJlY3Rvcnkgc2VwYXJhdG9ycy4KKworLS0KKysKK0ZvciBleGFtcGxlLCBEb2N1bWVudGF0aW9uLyouanBnIHdpbGwgbWF0Y2ggYWxsIC5qcGcgZmlsZXMKK2luIHRoZSBEb2N1bWVudGF0aW9uIHN1YnRyZWUsCitpbmNsdWRpbmcgRG9jdW1lbnRhdGlvbi9jaGFwdGVyXzEvZmlndXJlXzEuanBnLgorKworQSBwYXRoc3BlYyB0aGF0IGJlZ2lucyB3aXRoIGEgY29sb24gYDpgIGhhcyBzcGVjaWFsIG1lYW5pbmcuICBJbiB0aGUKK3Nob3J0IGZvcm0sIHRoZSBsZWFkaW5nIGNvbG9uIGA6YCBpcyBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgIm1hZ2ljCitzaWduYXR1cmUiIGxldHRlcnMgKHdoaWNoIG9wdGlvbmFsbHkgaXMgdGVybWluYXRlZCBieSBhbm90aGVyIGNvbG9uIGA6YCksCithbmQgdGhlIHJlbWFpbmRlciBpcyB0aGUgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0IHRoZSBwYXRoLgorVGhlICJtYWdpYyBzaWduYXR1cmUiIGNvbnNpc3RzIG9mIEFTQ0lJIHN5bWJvbHMgdGhhdCBhcmUgbmVpdGhlcgorYWxwaGFudW1lcmljLCBnbG9iLCByZWdleCBzcGVjaWFsIGNoYXJhY3RlcnMgbm9yIGNvbG9uLgorVGhlIG9wdGlvbmFsIGNvbG9uIHRoYXQgdGVybWluYXRlcyB0aGUgIm1hZ2ljIHNpZ25hdHVyZSIgY2FuIGJlCitvbWl0dGVkIGlmIHRoZSBwYXR0ZXJuIGJlZ2lucyB3aXRoIGEgY2hhcmFjdGVyIHRoYXQgZG9lcyBub3QgYmVsb25nIHRvCisibWFnaWMgc2lnbmF0dXJlIiBzeW1ib2wgc2V0IGFuZCBpcyBub3QgYSBjb2xvbi4KKysKK0luIHRoZSBsb25nIGZvcm0sIHRoZSBsZWFkaW5nIGNvbG9uIGA6YCBpcyBmb2xsb3dlZCBieSBhbiBvcGVuCitwYXJlbnRoZXNpcyBgKGAsIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgemVybyBvciBtb3JlICJtYWdpYyB3b3JkcyIsCithbmQgYSBjbG9zZSBwYXJlbnRoZXNlcyBgKWAsIGFuZCB0aGUgcmVtYWluZGVyIGlzIHRoZSBwYXR0ZXJuIHRvIG1hdGNoCithZ2FpbnN0IHRoZSBwYXRoLgorKworQSBwYXRoc3BlYyB3aXRoIG9ubHkgYSBjb2xvbiBtZWFucyAidGhlcmUgaXMgbm8gcGF0aHNwZWMiLiBUaGlzIGZvcm0KK3Nob3VsZCBub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciBwYXRoc3BlYy4KKysKKy0tCit0b3A7OworCVRoZSBtYWdpYyB3b3JkIGB0b3BgIChtYWdpYyBzaWduYXR1cmU6IGAvYCkgbWFrZXMgdGhlIHBhdHRlcm4KKwltYXRjaCBmcm9tIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUsIGV2ZW4gd2hlbiB5b3UgYXJlCisJcnVubmluZyB0aGUgY29tbWFuZCBmcm9tIGluc2lkZSBhIHN1YmRpcmVjdG9yeS4KKworbGl0ZXJhbDs7CisJV2lsZGNhcmRzIGluIHRoZSBwYXR0ZXJuIHN1Y2ggYXMgYCpgIG9yIGA/YCBhcmUgdHJlYXRlZAorCWFzIGxpdGVyYWwgY2hhcmFjdGVycy4KKworaWNhc2U7OworCUNhc2UgaW5zZW5zaXRpdmUgbWF0Y2guCisKK2dsb2I7OworCUdpdCB0cmVhdHMgdGhlIHBhdHRlcm4gYXMgYSBzaGVsbCBnbG9iIHN1aXRhYmxlIGZvcgorCWNvbnN1bXB0aW9uIGJ5IGZubWF0Y2goMykgd2l0aCB0aGUgRk5NX1BBVEhOQU1FIGZsYWc6CisJd2lsZGNhcmRzIGluIHRoZSBwYXR0ZXJuIHdpbGwgbm90IG1hdGNoIGEgLyBpbiB0aGUgcGF0aG5hbWUuCisJRm9yIGV4YW1wbGUsICJEb2N1bWVudGF0aW9uL3thc3Rlcmlza30uaHRtbCIgbWF0Y2hlcworCSJEb2N1bWVudGF0aW9uL2dpdC5odG1sIiBidXQgbm90ICJEb2N1bWVudGF0aW9uL3BwYy9wcGMuaHRtbCIKKwlvciAidG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYuaHRtbCIuCisrCitUd28gY29uc2VjdXRpdmUgYXN0ZXJpc2tzICgiYCoqYCIpIGluIHBhdHRlcm5zIG1hdGNoZWQgYWdhaW5zdAorZnVsbCBwYXRobmFtZSBtYXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmc6CisKKyAtIEEgbGVhZGluZyAiYCoqYCIgZm9sbG93ZWQgYnkgYSBzbGFzaCBtZWFucyBtYXRjaCBpbiBhbGwKKyAgIGRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZSwgImAqKi9mb29gIiBtYXRjaGVzIGZpbGUgb3IgZGlyZWN0b3J5CisgICAiYGZvb2AiIGFueXdoZXJlLCB0aGUgc2FtZSBhcyBwYXR0ZXJuICJgZm9vYCIuICJgKiovZm9vL2JhcmAiCisgICBtYXRjaGVzIGZpbGUgb3IgZGlyZWN0b3J5ICJgYmFyYCIgYW55d2hlcmUgdGhhdCBpcyBkaXJlY3RseQorICAgdW5kZXIgZGlyZWN0b3J5ICJgZm9vYCIuCisKKyAtIEEgdHJhaWxpbmcgImAvKipgIiBtYXRjaGVzIGV2ZXJ5dGhpbmcgaW5zaWRlLiBGb3IgZXhhbXBsZSwKKyAgICJgYWJjLyoqYCIgbWF0Y2hlcyBhbGwgZmlsZXMgaW5zaWRlIGRpcmVjdG9yeSAiYWJjIiwgcmVsYXRpdmUKKyAgIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgYC5naXRpZ25vcmVgIGZpbGUsIHdpdGggaW5maW5pdGUgZGVwdGguCisKKyAtIEEgc2xhc2ggZm9sbG93ZWQgYnkgdHdvIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyB0aGVuIGEgc2xhc2gKKyAgIG1hdGNoZXMgemVybyBvciBtb3JlIGRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZSwgImBhLyoqL2JgIgorICAgbWF0Y2hlcyAiYGEvYmAiLCAiYGEveC9iYCIsICJgYS94L3kvYmAiIGFuZCBzbyBvbi4KKworIC0gT3RoZXIgY29uc2VjdXRpdmUgYXN0ZXJpc2tzIGFyZSBjb25zaWRlcmVkIGludmFsaWQuCisrCitHbG9iIG1hZ2ljIGlzIGluY29tcGF0aWJsZSB3aXRoIGxpdGVyYWwgbWFnaWMuCisKK2F0dHI7OworQWZ0ZXIgYGF0dHI6YCBjb21lcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mICJhdHRyaWJ1dGUKK3JlcXVpcmVtZW50cyIsIGFsbCBvZiB3aGljaCBtdXN0IGJlIG1ldCBpbiBvcmRlciBmb3IgdGhlCitwYXRoIHRvIGJlIGNvbnNpZGVyZWQgYSBtYXRjaDsgdGhpcyBpcyBpbiBhZGRpdGlvbiB0byB0aGUKK3VzdWFsIG5vbi1tYWdpYyBwYXRoc3BlYyBwYXR0ZXJuIG1hdGNoaW5nLgorU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XS4KKysKK0VhY2ggb2YgdGhlIGF0dHJpYnV0ZSByZXF1aXJlbWVudHMgZm9yIHRoZSBwYXRoIHRha2VzIG9uZSBvZgordGhlc2UgZm9ybXM6CisKKy0gImBBVFRSYCIgcmVxdWlyZXMgdGhhdCB0aGUgYXR0cmlidXRlIGBBVFRSYCBiZSBzZXQuCisKKy0gImAtQVRUUmAiIHJlcXVpcmVzIHRoYXQgdGhlIGF0dHJpYnV0ZSBgQVRUUmAgYmUgdW5zZXQuCisKKy0gImBBVFRSPVZBTFVFYCIgcmVxdWlyZXMgdGhhdCB0aGUgYXR0cmlidXRlIGBBVFRSYCBiZQorICBzZXQgdG8gdGhlIHN0cmluZyBgVkFMVUVgLgorCistICJgIUFUVFJgIiByZXF1aXJlcyB0aGF0IHRoZSBhdHRyaWJ1dGUgYEFUVFJgIGJlCisgIHVuc3BlY2lmaWVkLgorKworTm90ZSB0aGF0IHdoZW4gbWF0Y2hpbmcgYWdhaW5zdCBhIHRyZWUgb2JqZWN0LCBhdHRyaWJ1dGVzIGFyZSBzdGlsbAorb2J0YWluZWQgZnJvbSB3b3JraW5nIHRyZWUsIG5vdCBmcm9tIHRoZSBnaXZlbiB0cmVlIG9iamVjdC4KKworZXhjbHVkZTs7CisJQWZ0ZXIgYSBwYXRoIG1hdGNoZXMgYW55IG5vbi1leGNsdWRlIHBhdGhzcGVjLCBpdCB3aWxsIGJlIHJ1bgorCXRocm91Z2ggYWxsIGV4Y2x1ZGUgcGF0aHNwZWNzIChtYWdpYyBzaWduYXR1cmU6IGAhYCBvciBpdHMKKwlzeW5vbnltIGBeYCkuIElmIGl0IG1hdGNoZXMsIHRoZSBwYXRoIGlzIGlnbm9yZWQuICBXaGVuIHRoZXJlCisJaXMgbm8gbm9uLWV4Y2x1ZGUgcGF0aHNwZWMsIHRoZSBleGNsdXNpb24gaXMgYXBwbGllZCB0byB0aGUKKwlyZXN1bHQgc2V0IGFzIGlmIGludm9rZWQgd2l0aG91dCBhbnkgcGF0aHNwZWMuCistLQorCitbW2RlZl9wYXJlbnRdXXBhcmVudDo6CisJQSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3Q+PiBjb250YWlucyBhIChwb3NzaWJseSBlbXB0eSkgbGlzdAorCW9mIHRoZSBsb2dpY2FsIHByZWRlY2Vzc29yKHMpIGluIHRoZSBsaW5lIG9mIGRldmVsb3BtZW50LCBpLmUuIGl0cworCXBhcmVudHMuCisKK1tbZGVmX3BpY2theGVdXXBpY2theGU6OgorCVRoZSB0ZXJtIDw8ZGVmX3BpY2theGUscGlja2F4ZT4+IHJlZmVycyB0byBhbiBvcHRpb24gdG8gdGhlIGRpZmZjb3JlCisJcm91dGluZXMgdGhhdCBoZWxwIHNlbGVjdCBjaGFuZ2VzIHRoYXQgYWRkIG9yIGRlbGV0ZSBhIGdpdmVuIHRleHQKKwlzdHJpbmcuIFdpdGggdGhlIGAtLXBpY2theGUtYWxsYCBvcHRpb24sIGl0IGNhbiBiZSB1c2VkIHRvIHZpZXcgdGhlIGZ1bGwKKwk8PGRlZl9jaGFuZ2VzZXQsY2hhbmdlc2V0Pj4gdGhhdCBpbnRyb2R1Y2VkIG9yIHJlbW92ZWQsIHNheSwgYQorCXBhcnRpY3VsYXIgbGluZSBvZiB0ZXh0LiBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4KKworW1tkZWZfcGx1bWJpbmddXXBsdW1iaW5nOjoKKwlDdXRlIG5hbWUgZm9yIDw8ZGVmX2NvcmVfZ2l0LGNvcmUgR2l0Pj4uCisKK1tbZGVmX3BvcmNlbGFpbl1dcG9yY2VsYWluOjoKKwlDdXRlIG5hbWUgZm9yIHByb2dyYW1zIGFuZCBwcm9ncmFtIHN1aXRlcyBkZXBlbmRpbmcgb24KKwk8PGRlZl9jb3JlX2dpdCxjb3JlIEdpdD4+LCBwcmVzZW50aW5nIGEgaGlnaCBsZXZlbCBhY2Nlc3MgdG8KKwljb3JlIEdpdC4gUG9yY2VsYWlucyBleHBvc2UgbW9yZSBvZiBhIDw8ZGVmX1NDTSxTQ00+PgorCWludGVyZmFjZSB0aGFuIHRoZSA8PGRlZl9wbHVtYmluZyxwbHVtYmluZz4+LgorCitbW2RlZl9wZXJfd29ya3RyZWVfcmVmXV1wZXItd29ya3RyZWUgcmVmOjoKKwlSZWZzIHRoYXQgYXJlIHBlci08PGRlZl93b3JraW5nX3RyZWUsd29ya3RyZWU+PiwgcmF0aGVyIHRoYW4KKwlnbG9iYWwuICBUaGlzIGlzIHByZXNlbnRseSBvbmx5IDw8ZGVmX0hFQUQsSEVBRD4+IGFuZCBhbnkgcmVmcworCXRoYXQgc3RhcnQgd2l0aCBgcmVmcy9iaXNlY3QvYCwgYnV0IG1pZ2h0IGxhdGVyIGluY2x1ZGUgb3RoZXIKKwl1bnVzdWFsIHJlZnMuCisKK1tbZGVmX3BzZXVkb3JlZl1dcHNldWRvcmVmOjoKKwlQc2V1ZG9yZWZzIGFyZSBhIGNsYXNzIG9mIGZpbGVzIHVuZGVyIGAkR0lUX0RJUmAgd2hpY2ggYmVoYXZlCisJbGlrZSByZWZzIGZvciB0aGUgcHVycG9zZXMgb2YgcmV2LXBhcnNlLCBidXQgd2hpY2ggYXJlIHRyZWF0ZWQKKwlzcGVjaWFsbHkgYnkgZ2l0LiAgUHNldWRvcmVmcyBib3RoIGhhdmUgbmFtZXMgdGhhdCBhcmUgYWxsLWNhcHMsCisJYW5kIGFsd2F5cyBzdGFydCB3aXRoIGEgbGluZSBjb25zaXN0aW5nIG9mIGEKKwk8PGRlZl9TSEExLFNIQS0xPj4gZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS4gIFNvLCBIRUFEIGlzIG5vdCBhCisJcHNldWRvcmVmLCBiZWNhdXNlIGl0IGlzIHNvbWV0aW1lcyBhIHN5bWJvbGljIHJlZi4gIFRoZXkgbWlnaHQKKwlvcHRpb25hbGx5IGNvbnRhaW4gc29tZSBhZGRpdGlvbmFsIGRhdGEuICBgTUVSR0VfSEVBRGAgYW5kCisJYENIRVJSWV9QSUNLX0hFQURgIGFyZSBleGFtcGxlcy4gIFVubGlrZQorCTw8ZGVmX3Blcl93b3JrdHJlZV9yZWYscGVyLXdvcmt0cmVlIHJlZnM+PiwgdGhlc2UgZmlsZXMgY2Fubm90CisJYmUgc3ltYm9saWMgcmVmcywgYW5kIG5ldmVyIGhhdmUgcmVmbG9ncy4gIFRoZXkgYWxzbyBjYW5ub3QgYmUKKwl1cGRhdGVkIHRocm91Z2ggdGhlIG5vcm1hbCByZWYgdXBkYXRlIG1hY2hpbmVyeS4gIEluc3RlYWQsCisJdGhleSBhcmUgdXBkYXRlZCBieSBkaXJlY3RseSB3cml0aW5nIHRvIHRoZSBmaWxlcy4gIEhvd2V2ZXIsCisJdGhleSBjYW4gYmUgcmVhZCBhcyBpZiB0aGV5IHdlcmUgcmVmcywgc28gYGdpdCByZXYtcGFyc2UKKwlNRVJHRV9IRUFEYCB3aWxsIHdvcmsuCisKK1tbZGVmX3B1bGxdXXB1bGw6OgorCVB1bGxpbmcgYSA8PGRlZl9icmFuY2gsYnJhbmNoPj4gbWVhbnMgdG8gPDxkZWZfZmV0Y2gsZmV0Y2g+PiBpdCBhbmQKKwk8PGRlZl9tZXJnZSxtZXJnZT4+IGl0LiAgU2VlIGFsc28gbGlua2dpdDpnaXQtcHVsbFsxXS4KKworW1tkZWZfcHVzaF1dcHVzaDo6CisJUHVzaGluZyBhIDw8ZGVmX2JyYW5jaCxicmFuY2g+PiBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzCisJPDxkZWZfaGVhZF9yZWYsaGVhZCByZWY+PiBmcm9tIGEgcmVtb3RlIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LAorCWZpbmQgb3V0IGlmIGl0IGlzIGFuIGFuY2VzdG9yIHRvIHRoZSBicmFuY2gncyBsb2NhbAorCWhlYWQgcmVmLCBhbmQgaW4gdGhhdCBjYXNlLCBwdXR0aW5nIGFsbAorCW9iamVjdHMsIHdoaWNoIGFyZSA8PGRlZl9yZWFjaGFibGUscmVhY2hhYmxlPj4gZnJvbSB0aGUgbG9jYWwKKwloZWFkIHJlZiwgYW5kIHdoaWNoIGFyZSBtaXNzaW5nIGZyb20gdGhlIHJlbW90ZQorCXJlcG9zaXRvcnksIGludG8gdGhlIHJlbW90ZQorCTw8ZGVmX29iamVjdF9kYXRhYmFzZSxvYmplY3QgZGF0YWJhc2U+PiwgYW5kIHVwZGF0aW5nIHRoZSByZW1vdGUKKwloZWFkIHJlZi4gSWYgdGhlIHJlbW90ZSA8PGRlZl9oZWFkLGhlYWQ+PiBpcyBub3QgYW4KKwlhbmNlc3RvciB0byB0aGUgbG9jYWwgaGVhZCwgdGhlIHB1c2ggZmFpbHMuCisKK1tbZGVmX3JlYWNoYWJsZV1dcmVhY2hhYmxlOjoKKwlBbGwgb2YgdGhlIGFuY2VzdG9ycyBvZiBhIGdpdmVuIDw8ZGVmX2NvbW1pdCxjb21taXQ+PiBhcmUgc2FpZCB0byBiZQorCSJyZWFjaGFibGUiIGZyb20gdGhhdCBjb21taXQuIE1vcmUKKwlnZW5lcmFsbHksIG9uZSA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gaXMgcmVhY2hhYmxlIGZyb20KKwlhbm90aGVyIGlmIHdlIGNhbiByZWFjaCB0aGUgb25lIGZyb20gdGhlIG90aGVyIGJ5IGEgPDxkZWZfY2hhaW4sY2hhaW4+PgorCXRoYXQgZm9sbG93cyA8PGRlZl90YWcsdGFncz4+IHRvIHdoYXRldmVyIHRoZXkgdGFnLAorCTw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0cz4+IHRvIHRoZWlyIHBhcmVudHMgb3IgdHJlZXMsIGFuZAorCTw8ZGVmX3RyZWVfb2JqZWN0LHRyZWVzPj4gdG8gdGhlIHRyZWVzIG9yIDw8ZGVmX2Jsb2Jfb2JqZWN0LGJsb2JzPj4KKwl0aGF0IHRoZXkgY29udGFpbi4KKworW1tkZWZfcmViYXNlXV1yZWJhc2U6OgorCVRvIHJlYXBwbHkgYSBzZXJpZXMgb2YgY2hhbmdlcyBmcm9tIGEgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IHRvIGEKKwlkaWZmZXJlbnQgYmFzZSwgYW5kIHJlc2V0IHRoZSA8PGRlZl9oZWFkLGhlYWQ+PiBvZiB0aGF0IGJyYW5jaAorCXRvIHRoZSByZXN1bHQuCisKK1tbZGVmX3JlZl1dcmVmOjoKKwlBIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBgcmVmcy9gIChlLmcuIGByZWZzL2hlYWRzL21hc3RlcmApCisJdGhhdCBwb2ludHMgdG8gYW4gPDxkZWZfb2JqZWN0X25hbWUsb2JqZWN0IG5hbWU+PiBvciBhbm90aGVyCisJcmVmICh0aGUgbGF0dGVyIGlzIGNhbGxlZCBhIDw8ZGVmX3N5bXJlZixzeW1ib2xpYyByZWY+PikuCisJRm9yIGNvbnZlbmllbmNlLCBhIHJlZiBjYW4gc29tZXRpbWVzIGJlIGFiYnJldmlhdGVkIHdoZW4gdXNlZAorCWFzIGFuIGFyZ3VtZW50IHRvIGEgR2l0IGNvbW1hbmQ7IHNlZSBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XQorCWZvciBkZXRhaWxzLgorCVJlZnMgYXJlIHN0b3JlZCBpbiB0aGUgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4uCisrCitUaGUgcmVmIG5hbWVzcGFjZSBpcyBoaWVyYXJjaGljYWwuCitEaWZmZXJlbnQgc3ViaGllcmFyY2hpZXMgYXJlIHVzZWQgZm9yIGRpZmZlcmVudCBwdXJwb3NlcyAoZS5nLiB0aGUKK2ByZWZzL2hlYWRzL2AgaGllcmFyY2h5IGlzIHVzZWQgdG8gcmVwcmVzZW50IGxvY2FsIGJyYW5jaGVzKS4KKysKK1RoZXJlIGFyZSBhIGZldyBzcGVjaWFsLXB1cnBvc2UgcmVmcyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRoIGByZWZzL2AuCitUaGUgbW9zdCBub3RhYmxlIGV4YW1wbGUgaXMgYEhFQURgLgorCitbW2RlZl9yZWZsb2ddXXJlZmxvZzo6CisJQSByZWZsb2cgc2hvd3MgdGhlIGxvY2FsICJoaXN0b3J5IiBvZiBhIHJlZi4gIEluIG90aGVyIHdvcmRzLAorCWl0IGNhbiB0ZWxsIHlvdSB3aGF0IHRoZSAzcmQgbGFzdCByZXZpc2lvbiBpbiBfdGhpc18gcmVwb3NpdG9yeQorCXdhcywgYW5kIHdoYXQgd2FzIHRoZSBjdXJyZW50IHN0YXRlIGluIF90aGlzXyByZXBvc2l0b3J5LAorCXllc3RlcmRheSA5OjE0cG0uICBTZWUgbGlua2dpdDpnaXQtcmVmbG9nWzFdIGZvciBkZXRhaWxzLgorCitbW2RlZl9yZWZzcGVjXV1yZWZzcGVjOjoKKwlBICJyZWZzcGVjIiBpcyB1c2VkIGJ5IDw8ZGVmX2ZldGNoLGZldGNoPj4gYW5kCisJPDxkZWZfcHVzaCxwdXNoPj4gdG8gZGVzY3JpYmUgdGhlIG1hcHBpbmcgYmV0d2VlbiByZW1vdGUKKwk8PGRlZl9yZWYscmVmPj4gYW5kIGxvY2FsIHJlZi4KKworW1tkZWZfcmVtb3RlXV1yZW1vdGUgcmVwb3NpdG9yeTo6CisJQSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PiB3aGljaCBpcyB1c2VkIHRvIHRyYWNrIHRoZSBzYW1lCisJcHJvamVjdCBidXQgcmVzaWRlcyBzb21ld2hlcmUgZWxzZS4gVG8gY29tbXVuaWNhdGUgd2l0aCByZW1vdGVzLAorCXNlZSA8PGRlZl9mZXRjaCxmZXRjaD4+IG9yIDw8ZGVmX3B1c2gscHVzaD4+LgorCitbW2RlZl9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoXV1yZW1vdGUtdHJhY2tpbmcgYnJhbmNoOjoKKwlBIDw8ZGVmX3JlZixyZWY+PiB0aGF0IGlzIHVzZWQgdG8gZm9sbG93IGNoYW5nZXMgZnJvbSBhbm90aGVyCisJPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4uIEl0IHR5cGljYWxseSBsb29rcyBsaWtlCisJJ3JlZnMvcmVtb3Rlcy9mb28vYmFyJyAoaW5kaWNhdGluZyB0aGF0IGl0IHRyYWNrcyBhIGJyYW5jaCBuYW1lZAorCSdiYXInIGluIGEgcmVtb3RlIG5hbWVkICdmb28nKSwgYW5kIG1hdGNoZXMgdGhlIHJpZ2h0LWhhbmQtc2lkZSBvZgorCWEgY29uZmlndXJlZCBmZXRjaCA8PGRlZl9yZWZzcGVjLHJlZnNwZWM+Pi4gQSByZW1vdGUtdHJhY2tpbmcKKwlicmFuY2ggc2hvdWxkIG5vdCBjb250YWluIGRpcmVjdCBtb2RpZmljYXRpb25zIG9yIGhhdmUgbG9jYWwKKwljb21taXRzIG1hZGUgdG8gaXQuCisKK1tbZGVmX3JlcG9zaXRvcnldXXJlcG9zaXRvcnk6OgorCUEgY29sbGVjdGlvbiBvZiA8PGRlZl9yZWYscmVmcz4+IHRvZ2V0aGVyIHdpdGggYW4KKwk8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4gY29udGFpbmluZyBhbGwgb2JqZWN0cworCXdoaWNoIGFyZSA8PGRlZl9yZWFjaGFibGUscmVhY2hhYmxlPj4gZnJvbSB0aGUgcmVmcywgcG9zc2libHkKKwlhY2NvbXBhbmllZCBieSBtZXRhIGRhdGEgZnJvbSBvbmUgb3IgbW9yZSA8PGRlZl9wb3JjZWxhaW4scG9yY2VsYWlucz4+LiBBCisJcmVwb3NpdG9yeSBjYW4gc2hhcmUgYW4gb2JqZWN0IGRhdGFiYXNlIHdpdGggb3RoZXIgcmVwb3NpdG9yaWVzCisJdmlhIDw8ZGVmX2FsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UsYWx0ZXJuYXRlcyBtZWNoYW5pc20+Pi4KKworW1tkZWZfcmVzb2x2ZV1dcmVzb2x2ZTo6CisJVGhlIGFjdGlvbiBvZiBmaXhpbmcgdXAgbWFudWFsbHkgd2hhdCBhIGZhaWxlZCBhdXRvbWF0aWMKKwk8PGRlZl9tZXJnZSxtZXJnZT4+IGxlZnQgYmVoaW5kLgorCitbW2RlZl9yZXZpc2lvbl1dcmV2aXNpb246OgorCVN5bm9ueW0gZm9yIDw8ZGVmX2NvbW1pdCxjb21taXQ+PiAodGhlIG5vdW4pLgorCitbW2RlZl9yZXdpbmRdXXJld2luZDo6CisJVG8gdGhyb3cgYXdheSBwYXJ0IG9mIHRoZSBkZXZlbG9wbWVudCwgaS5lLiB0byBhc3NpZ24gdGhlCisJPDxkZWZfaGVhZCxoZWFkPj4gdG8gYW4gZWFybGllciA8PGRlZl9yZXZpc2lvbixyZXZpc2lvbj4+LgorCitbW2RlZl9TQ01dXVNDTTo6CisJU291cmNlIGNvZGUgbWFuYWdlbWVudCAodG9vbCkuCisKK1tbZGVmX1NIQTFdXVNIQS0xOjoKKwkiU2VjdXJlIEhhc2ggQWxnb3JpdGhtIDEiOyBhIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbi4KKwlJbiB0aGUgY29udGV4dCBvZiBHaXQgdXNlZCBhcyBhIHN5bm9ueW0gZm9yIDw8ZGVmX29iamVjdF9uYW1lLG9iamVjdCBuYW1lPj4uCisKK1tbZGVmX3NoYWxsb3dfY2xvbmVdXXNoYWxsb3cgY2xvbmU6OgorCU1vc3RseSBhIHN5bm9ueW0gdG8gPDxkZWZfc2hhbGxvd19yZXBvc2l0b3J5LHNoYWxsb3cgcmVwb3NpdG9yeT4+CisJYnV0IHRoZSBwaHJhc2UgbWFrZXMgaXQgbW9yZSBleHBsaWNpdCB0aGF0IGl0IHdhcyBjcmVhdGVkIGJ5CisJcnVubmluZyBgZ2l0IGNsb25lIC0tZGVwdGg9Li4uYCBjb21tYW5kLgorCitbW2RlZl9zaGFsbG93X3JlcG9zaXRvcnldXXNoYWxsb3cgcmVwb3NpdG9yeTo6CisJQSBzaGFsbG93IDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+IGhhcyBhbiBpbmNvbXBsZXRlCisJaGlzdG9yeSBzb21lIG9mIHdob3NlIDw8ZGVmX2NvbW1pdCxjb21taXRzPj4gaGF2ZSA8PGRlZl9wYXJlbnQscGFyZW50cz4+IGNhdXRlcml6ZWQgYXdheSAoaW4gb3RoZXIKKwl3b3JkcywgR2l0IGlzIHRvbGQgdG8gcHJldGVuZCB0aGF0IHRoZXNlIGNvbW1pdHMgZG8gbm90IGhhdmUgdGhlCisJcGFyZW50cywgZXZlbiB0aG91Z2ggdGhleSBhcmUgcmVjb3JkZWQgaW4gdGhlIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0CisJb2JqZWN0Pj4pLiBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwgd2hlbiB5b3UgYXJlIGludGVyZXN0ZWQgb25seSBpbiB0aGUKKwlyZWNlbnQgaGlzdG9yeSBvZiBhIHByb2plY3QgZXZlbiB0aG91Z2ggdGhlIHJlYWwgaGlzdG9yeSByZWNvcmRlZCBpbiB0aGUKKwl1cHN0cmVhbSBpcyBtdWNoIGxhcmdlci4gQSBzaGFsbG93IHJlcG9zaXRvcnkKKwlpcyBjcmVhdGVkIGJ5IGdpdmluZyB0aGUgYC0tZGVwdGhgIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1jbG9uZVsxXSwgYW5kCisJaXRzIGhpc3RvcnkgY2FuIGJlIGxhdGVyIGRlZXBlbmVkIHdpdGggbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK1tbZGVmX3N0YXNoXV1zdGFzaCBlbnRyeTo6CisJQW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+IHVzZWQgdG8gdGVtcG9yYXJpbHkgc3RvcmUgdGhlIGNvbnRlbnRzIG9mIGEKKwk8PGRlZl9kaXJ0eSxkaXJ0eT4+IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCB0aGUgaW5kZXggZm9yIGZ1dHVyZSByZXVzZS4KKworW1tkZWZfc3VibW9kdWxlXV1zdWJtb2R1bGU6OgorCUEgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4gdGhhdCBob2xkcyB0aGUgaGlzdG9yeSBvZiBhCisJc2VwYXJhdGUgcHJvamVjdCBpbnNpZGUgYW5vdGhlciByZXBvc2l0b3J5ICh0aGUgbGF0dGVyIG9mCisJd2hpY2ggaXMgY2FsbGVkIDw8ZGVmX3N1cGVycHJvamVjdCwgc3VwZXJwcm9qZWN0Pj4pLgorCitbW2RlZl9zdXBlcnByb2plY3RdXXN1cGVycHJvamVjdDo6CisJQSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PiB0aGF0IHJlZmVyZW5jZXMgcmVwb3NpdG9yaWVzCisJb2Ygb3RoZXIgcHJvamVjdHMgaW4gaXRzIHdvcmtpbmcgdHJlZSBhcyA8PGRlZl9zdWJtb2R1bGUsc3VibW9kdWxlcz4+LgorCVRoZSBzdXBlcnByb2plY3Qga25vd3MgYWJvdXQgdGhlIG5hbWVzIG9mIChidXQgZG9lcyBub3QgaG9sZAorCWNvcGllcyBvZikgY29tbWl0IG9iamVjdHMgb2YgdGhlIGNvbnRhaW5lZCBzdWJtb2R1bGVzLgorCitbW2RlZl9zeW1yZWZdXXN5bXJlZjo6CisJU3ltYm9saWMgcmVmZXJlbmNlOiBpbnN0ZWFkIG9mIGNvbnRhaW5pbmcgdGhlIDw8ZGVmX1NIQTEsU0hBLTE+PgorCWlkIGl0c2VsZiwgaXQgaXMgb2YgdGhlIGZvcm1hdCAncmVmOiByZWZzL3NvbWUvdGhpbmcnIGFuZCB3aGVuCisJcmVmZXJlbmNlZCwgaXQgcmVjdXJzaXZlbHkgZGVyZWZlcmVuY2VzIHRvIHRoaXMgcmVmZXJlbmNlLgorCSc8PGRlZl9IRUFELEhFQUQ+PicgaXMgYSBwcmltZSBleGFtcGxlIG9mIGEgc3ltcmVmLiBTeW1ib2xpYworCXJlZmVyZW5jZXMgYXJlIG1hbmlwdWxhdGVkIHdpdGggdGhlIGxpbmtnaXQ6Z2l0LXN5bWJvbGljLXJlZlsxXQorCWNvbW1hbmQuCisKK1tbZGVmX3RhZ11ddGFnOjoKKwlBIDw8ZGVmX3JlZixyZWY+PiB1bmRlciBgcmVmcy90YWdzL2AgbmFtZXNwYWNlIHRoYXQgcG9pbnRzIHRvIGFuCisJb2JqZWN0IG9mIGFuIGFyYml0cmFyeSB0eXBlICh0eXBpY2FsbHkgYSB0YWcgcG9pbnRzIHRvIGVpdGhlciBhCisJPDxkZWZfdGFnX29iamVjdCx0YWc+PiBvciBhIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+KS4KKwlJbiBjb250cmFzdCB0byBhIDw8ZGVmX2hlYWQsaGVhZD4+LCBhIHRhZyBpcyBub3QgdXBkYXRlZCBieQorCXRoZSBgY29tbWl0YCBjb21tYW5kLiBBIEdpdCB0YWcgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBhIExpc3AKKwl0YWcgKHdoaWNoIHdvdWxkIGJlIGNhbGxlZCBhbiA8PGRlZl9vYmplY3RfdHlwZSxvYmplY3QgdHlwZT4+CisJaW4gR2l0J3MgY29udGV4dCkuIEEgdGFnIGlzIG1vc3QgdHlwaWNhbGx5IHVzZWQgdG8gbWFyayBhIHBhcnRpY3VsYXIKKwlwb2ludCBpbiB0aGUgY29tbWl0IGFuY2VzdHJ5IDw8ZGVmX2NoYWluLGNoYWluPj4uCisKK1tbZGVmX3RhZ19vYmplY3RdXXRhZyBvYmplY3Q6OgorCUFuIDw8ZGVmX29iamVjdCxvYmplY3Q+PiBjb250YWluaW5nIGEgPDxkZWZfcmVmLHJlZj4+IHBvaW50aW5nIHRvCisJYW5vdGhlciBvYmplY3QsIHdoaWNoIGNhbiBjb250YWluIGEgbWVzc2FnZSBqdXN0IGxpa2UgYQorCTw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+LiBJdCBjYW4gYWxzbyBjb250YWluIGEgKFBHUCkKKwlzaWduYXR1cmUsIGluIHdoaWNoIGNhc2UgaXQgaXMgY2FsbGVkIGEgInNpZ25lZCB0YWcgb2JqZWN0Ii4KKworW1tkZWZfdG9waWNfYnJhbmNoXV10b3BpYyBicmFuY2g6OgorCUEgcmVndWxhciBHaXQgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IHRoYXQgaXMgdXNlZCBieSBhIGRldmVsb3BlciB0bworCWlkZW50aWZ5IGEgY29uY2VwdHVhbCBsaW5lIG9mIGRldmVsb3BtZW50LiBTaW5jZSBicmFuY2hlcyBhcmUgdmVyeSBlYXN5CisJYW5kIGluZXhwZW5zaXZlLCBpdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8gaGF2ZSBzZXZlcmFsIHNtYWxsIGJyYW5jaGVzCisJdGhhdCBlYWNoIGNvbnRhaW4gdmVyeSB3ZWxsIGRlZmluZWQgY29uY2VwdHMgb3Igc21hbGwgaW5jcmVtZW50YWwgeWV0CisJcmVsYXRlZCBjaGFuZ2VzLgorCitbW2RlZl90cmVlXV10cmVlOjoKKwlFaXRoZXIgYSA8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4sIG9yIGEgPDxkZWZfdHJlZV9vYmplY3QsdHJlZQorCW9iamVjdD4+IHRvZ2V0aGVyIHdpdGggdGhlIGRlcGVuZGVudCA8PGRlZl9ibG9iX29iamVjdCxibG9iPj4gYW5kIHRyZWUgb2JqZWN0cworCShpLmUuIGEgc3RvcmVkIHJlcHJlc2VudGF0aW9uIG9mIGEgd29ya2luZyB0cmVlKS4KKworW1tkZWZfdHJlZV9vYmplY3RdXXRyZWUgb2JqZWN0OjoKKwlBbiA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gY29udGFpbmluZyBhIGxpc3Qgb2YgZmlsZSBuYW1lcyBhbmQgbW9kZXMgYWxvbmcKKwl3aXRoIHJlZnMgdG8gdGhlIGFzc29jaWF0ZWQgYmxvYiBhbmQvb3IgdHJlZSBvYmplY3RzLiBBCisJPDxkZWZfdHJlZSx0cmVlPj4gaXMgZXF1aXZhbGVudCB0byBhIDw8ZGVmX2RpcmVjdG9yeSxkaXJlY3Rvcnk+Pi4KKworW1tkZWZfdHJlZS1pc2hdXXRyZWUtaXNoIChhbHNvIHRyZWVpc2gpOjoKKwlBIDw8ZGVmX3RyZWVfb2JqZWN0LHRyZWUgb2JqZWN0Pj4gb3IgYW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+CisJdGhhdCBjYW4gYmUgcmVjdXJzaXZlbHkgZGVyZWZlcmVuY2VkIHRvIGEgdHJlZSBvYmplY3QuCisJRGVyZWZlcmVuY2luZyBhIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+IHlpZWxkcyB0aGUKKwl0cmVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSA8PGRlZl9yZXZpc2lvbixyZXZpc2lvbj4+J3MKKwl0b3AgPDxkZWZfZGlyZWN0b3J5LGRpcmVjdG9yeT4+LgorCVRoZSBmb2xsb3dpbmcgYXJlIGFsbCB0cmVlLWlzaGVzOgorCWEgPDxkZWZfY29tbWl0LWlzaCxjb21taXQtaXNoPj4sCisJYSB0cmVlIG9iamVjdCwKKwlhIDw8ZGVmX3RhZ19vYmplY3QsdGFnIG9iamVjdD4+IHRoYXQgcG9pbnRzIHRvIGEgdHJlZSBvYmplY3QsCisJYSB0YWcgb2JqZWN0IHRoYXQgcG9pbnRzIHRvIGEgdGFnIG9iamVjdCB0aGF0IHBvaW50cyB0byBhIHRyZWUKKwlvYmplY3QsCisJZXRjLgorCitbW2RlZl91bm1lcmdlZF9pbmRleF1ddW5tZXJnZWQgaW5kZXg6OgorCUFuIDw8ZGVmX2luZGV4LGluZGV4Pj4gd2hpY2ggY29udGFpbnMgdW5tZXJnZWQKKwk8PGRlZl9pbmRleF9lbnRyeSxpbmRleCBlbnRyaWVzPj4uCisKK1tbZGVmX3VucmVhY2hhYmxlX29iamVjdF1ddW5yZWFjaGFibGUgb2JqZWN0OjoKKwlBbiA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gd2hpY2ggaXMgbm90IDw8ZGVmX3JlYWNoYWJsZSxyZWFjaGFibGU+PiBmcm9tIGEKKwk8PGRlZl9icmFuY2gsYnJhbmNoPj4sIDw8ZGVmX3RhZyx0YWc+Piwgb3IgYW55IG90aGVyIHJlZmVyZW5jZS4KKworW1tkZWZfdXBzdHJlYW1fYnJhbmNoXV11cHN0cmVhbSBicmFuY2g6OgorCVRoZSBkZWZhdWx0IDw8ZGVmX2JyYW5jaCxicmFuY2g+PiB0aGF0IGlzIG1lcmdlZCBpbnRvIHRoZSBicmFuY2ggaW4KKwlxdWVzdGlvbiAob3IgdGhlIGJyYW5jaCBpbiBxdWVzdGlvbiBpcyByZWJhc2VkIG9udG8pLiBJdCBpcyBjb25maWd1cmVkCisJdmlhIGJyYW5jaC48bmFtZT4ucmVtb3RlIGFuZCBicmFuY2guPG5hbWU+Lm1lcmdlLiBJZiB0aGUgdXBzdHJlYW0gYnJhbmNoCisJb2YgJ0EnIGlzICdvcmlnaW4vQicgc29tZXRpbWVzIHdlIHNheSAiJ0EnIGlzIHRyYWNraW5nICdvcmlnaW4vQiciLgorCitbW2RlZl93b3JraW5nX3RyZWVdXXdvcmtpbmcgdHJlZTo6CisJVGhlIHRyZWUgb2YgYWN0dWFsIGNoZWNrZWQgb3V0IGZpbGVzLiAgVGhlIHdvcmtpbmcgdHJlZSBub3JtYWxseQorCWNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiB0aGUgPDxkZWZfSEVBRCxIRUFEPj4gY29tbWl0J3MgdHJlZSwKKwlwbHVzIGFueSBsb2NhbCBjaGFuZ2VzIHRoYXQgeW91IGhhdmUgbWFkZSBidXQgbm90IHlldCBjb21taXR0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvLWluZGV4LnNoIGIvRG9jdW1lbnRhdGlvbi9ob3d0by1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNjdiMzYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by1pbmRleC5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKworY2F0IDw8XEVPRgorR2l0IEhvd3RvIEluZGV4Cis9PT09PT09PT09PT09PT0KKworSGVyZSBpcyBhIGNvbGxlY3Rpb24gb2YgbWFpbGluZyBsaXN0IHBvc3RpbmdzIG1hZGUgYnkgdmFyaW91cworcGVvcGxlIGRlc2NyaWJpbmcgaG93IHRoZXkgdXNlIEdpdCBpbiB0aGVpciB3b3JrZmxvdy4KKworRU9GCisKK2ZvciB0eHQKK2RvCisJdGl0bGU9JChleHByICIkdHh0IiA6ICcuKi9cKC4qXClcLnR4dCQnKQorCWZyb209JChzZWQgLW5lICcKKwkvXiQvcQorCS9eRnJvbTpbIAldL3sKKwkJcy8vLworCQlzL15bIAldKi8vCisJCXMvWyAJXSokLy8KKwkJcy9eL2J5IC8KKwkJcAorCX0KKwknICIkdHh0IikKKworCWFic3RyYWN0PSQoc2VkIC1uZSAnCisJL15BYnN0cmFjdDpbIAldL3sKKwkJcy9eW14gCV0qLy8KKwkJeAorCQlzLy4qLy8KKwkJeAorCQk6IGFnYWluCisJCS9eWyAJXS97CisJCQlzL15bIAldKi8vCisJCQlICisJCQluCisJCQliIGFnYWluCisJCX0KKwkJeAorCQlwCisJCXEKKwl9JyAiJHR4dCIpCisKKwlpZiBncmVwICdDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MnID4vZGV2L251bGwgJHR4dAorCXRoZW4KKwkJZmlsZT0kKGV4cHIgIiR0eHQiIDogJ1woLipcKVwudHh0JCcpLmh0bWwKKwllbHNlCisJCWZpbGU9IiR0eHQiCisJZmkKKworCWVjaG8gIiogbGluazokZmlsZVskdGl0bGVdICRmcm9tCiskYWJzdHJhY3QKKworIgorCitkb25lCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL2tlZXAtY2Fub25pY2FsLWhpc3RvcnktY29ycmVjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL2tlZXAtY2Fub25pY2FsLWhpc3RvcnktY29ycmVjdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkNDhlZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8va2VlcC1jYW5vbmljYWwtaGlzdG9yeS1jb3JyZWN0LnR4dApAQCAtMCwwICsxLDIxNiBAQAorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorRGF0ZTogV2VkLCAwNyBNYXkgMjAxNCAxMzoxNTozOSAtMDcwMAorU3ViamVjdDogQmVnaW5uZXIgcXVlc3Rpb24gb24gIlB1bGwgaXMgbW9zdGx5IGV2aWwiCitBYnN0cmFjdDogVGhpcyBob3ctdG8gZXhwbGFpbnMgYSBtZXRob2QgZm9yIGtlZXBpbmcgYQorIHByb2plY3QncyBoaXN0b3J5IGNvcnJlY3Qgd2hlbiB1c2luZyBnaXQgcHVsbC4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitLZWVwIGF1dGhvcml0YXRpdmUgY2Fub25pY2FsIGhpc3RvcnkgY29ycmVjdCB3aXRoIGdpdCBwdWxsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWV0aW1lcyBhIG5ldyBwcm9qZWN0IGludGVncmF0b3Igd2lsbCBlbmQgdXAgd2l0aCBwcm9qZWN0IGhpc3RvcnkKK3RoYXQgYXBwZWFycyB0byBiZSAiYmFja3dhcmRzIiBmcm9tIHdoYXQgb3RoZXIgcHJvamVjdCBkZXZlbG9wZXJzCitleHBlY3QuIFRoaXMgaG93dG8gcHJlc2VudHMgYSBzdWdnZXN0ZWQgaW50ZWdyYXRpb24gd29ya2Zsb3cgZm9yCittYWludGFpbmluZyBhIGNlbnRyYWwgcmVwb3NpdG9yeS4KKworU3VwcG9zZSB0aGF0IHRoYXQgY2VudHJhbCByZXBvc2l0b3J5IGhhcyB0aGlzIGhpc3Rvcnk6CisKKy0tLS0tLS0tLS0tLQorICAgIC0tLW8tLS1vLS0tQQorLS0tLS0tLS0tLS0tCisKK3doaWNoIGVuZHMgYXQgY29tbWl0IGBBYCAodGltZSBmbG93cyBmcm9tIGxlZnQgdG8gcmlnaHQgYW5kIGVhY2ggbm9kZQoraW4gdGhlIGdyYXBoIGlzIGEgY29tbWl0LCBsaW5lcyBiZXR3ZWVuIHRoZW0gaW5kaWNhdGluZyBwYXJlbnQtY2hpbGQKK3JlbGF0aW9uc2hpcCkuCisKK1RoZW4geW91IGNsb25lIGl0IGFuZCB3b3JrIG9uIHlvdXIgb3duIGNvbW1pdHMsIHdoaWNoIGxlYWRzIHlvdSB0bworaGF2ZSB0aGlzIGhpc3RvcnkgaW4gKnlvdXIqIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLQorICAgIC0tLW8tLS1vLS0tQS0tLUItLS1DCistLS0tLS0tLS0tLS0KKworSW1hZ2luZSB5b3VyIGNvd29ya2VyIGRpZCB0aGUgc2FtZSBhbmQgYnVpbHQgb24gdG9wIG9mIGBBYCBpbiAqaGlzKgorcmVwb3NpdG9yeSBpbiB0aGUgbWVhbnRpbWUsIGFuZCB0aGVuIHB1c2hlZCBpdCB0byB0aGUKK2NlbnRyYWwgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tCisgICAgLS0tby0tLW8tLS1BLS0tWC0tLVktLS1aCistLS0tLS0tLS0tLS0KKworTm93LCBpZiB5b3UgYGdpdCBwdXNoYCBhdCB0aGlzIHBvaW50LCBiZWNhdXNlIHlvdXIgaGlzdG9yeSB0aGF0IGxlYWRzCit0byBgQ2AgbGFja3MgYFhgLCBgWWAgYW5kIGBaYCwgaXQgd2lsbCBmYWlsLiAgWW91IG5lZWQgdG8gc29tZWhvdyBtYWtlCit0aGUgdGlwIG9mIHlvdXIgaGlzdG9yeSBhIGRlc2NlbmRhbnQgb2YgYFpgLgorCitPbmUgc3VnZ2VzdGVkIHdheSB0byBzb2x2ZSB0aGUgcHJvYmxlbSBpcyAiZmV0Y2ggYW5kIHRoZW4gbWVyZ2UiLCBha2EKK2BnaXQgcHVsbGAuIFdoZW4geW91IGZldGNoLCB5b3VyIHJlcG9zaXRvcnkgd2lsbCBoYXZlIGEgaGlzdG9yeSBsaWtlCit0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICAtLS1vLS0tby0tLUEtLS1CLS0tQworCQlcCisJCSBYLS0tWS0tLVoKKy0tLS0tLS0tLS0tLQorCitPbmNlIHlvdSBydW4gbWVyZ2UgYWZ0ZXIgdGhhdCwgd2hpbGUgc3RpbGwgb24gKnlvdXIqIGJyYW5jaCwgaS5lLiBgQ2AsCit5b3Ugd2lsbCBjcmVhdGUgYSBtZXJnZSBgTWAgYW5kIG1ha2UgdGhlIGhpc3RvcnkgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorICAgIC0tLW8tLS1vLS0tQS0tLUItLS1DLS0tTQorCQlcICAgICAgICAgLworCQkgWC0tLVktLS1aCistLS0tLS0tLS0tLS0KKworYE1gIGlzIGEgZGVzY2VuZGFudCBvZiBgWmAsIHNvIHlvdSBjYW4gcHVzaCB0byB1cGRhdGUgdGhlIGNlbnRyYWwKK3JlcG9zaXRvcnkuICBTdWNoIGEgbWVyZ2UgYE1gIGRvZXMgbm90IGxvc2UgYW55IGNvbW1pdCBpbiBib3RoCitoaXN0b3JpZXMsIHNvIGluIHRoYXQgc2Vuc2UgaXQgbWF5IG5vdCBiZSB3cm9uZywgYnV0IHdoZW4gcGVvcGxlIHdhbnQKK3RvIHRhbGsgYWJvdXQgInRoZSBhdXRob3JpdGF0aXZlIGNhbm9uaWNhbCBoaXN0b3J5IHRoYXQgaXMgc2hhcmVkCithbW9uZyB0aGUgcHJvamVjdCBwYXJ0aWNpcGFudHMiLCBpLmUuICJ0aGUgdHJ1bmsiLCB0aGV5IG9mdGVuIHZpZXcKK2l0IGFzICJjb21taXRzIHlvdSBzZWUgYnkgZm9sbG93aW5nIHRoZSBmaXJzdC1wYXJlbnQgY2hhaW4iLCBhbmQgdXNlCit0aGlzIGNvbW1hbmQgdG8gdmlldyBpdDoKKworLS0tLS0tLS0tLS0tCisgICAgJCBnaXQgbG9nIC0tZmlyc3QtcGFyZW50CistLS0tLS0tLS0tLS0KKworRm9yIGFsbCBvdGhlciBwZW9wbGUgd2hvIG9ic2VydmVkIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgYWZ0ZXIgeW91cgorY293b3JrZXIgcHVzaGVkIGBaYCBidXQgYmVmb3JlIHlvdSBwdXNoZWQgYE1gLCB0aGUgY29tbWl0IG9uIHRoZSB0cnVuawordXNlZCB0byBiZSBgby1vLUEtWC1ZLVpgLiAgQnV0IGJlY2F1c2UgeW91IG1hZGUgYE1gIHdoaWxlIHlvdSB3ZXJlIG9uCitgQ2AsIGBNYCdzIGZpcnN0IHBhcmVudCBpcyBgQ2AsIHNvIGJ5IHB1c2hpbmcgYE1gIHRvIGFkdmFuY2UgdGhlCitjZW50cmFsIHJlcG9zaXRvcnksIHlvdSBtYWRlIGBYLVktWmAgYSBzaWRlIGJyYW5jaCwgbm90IG9uIHRoZSB0cnVuay4KKworWW91IHdvdWxkIHJhdGhlciB3YW50IHRvIGhhdmUgYSBoaXN0b3J5IG9mIHRoaXMgc2hhcGU6CisKKy0tLS0tLS0tLS0tLQorICAgIC0tLW8tLS1vLS0tQS0tLVgtLS1ZLS0tWi0tLU0nCisJCVwgICAgICAgICAgICAgLworCQkgQi0tLS0tLS0tLS0tQworLS0tLS0tLS0tLS0tCisKK3NvIHRoYXQgaW4gdGhlIGZpcnN0LXBhcmVudCBjaGFpbiwgaXQgaXMgY2xlYXIgdGhhdCB0aGUgcHJvamVjdCBmaXJzdAorZGlkIGBYYCBhbmQgdGhlbiBgWWAgYW5kIHRoZW4gYFpgIGFuZCBtZXJnZWQgYSBjaGFuZ2UgdGhhdCBjb25zaXN0cyBvZgordHdvIGNvbW1pdHMgYEJgIGFuZCBgQ2AgdGhhdCBhY2hpZXZlcyBhIHNpbmdsZSBnb2FsLiAgWW91IG1heSBoYXZlCit3b3JrZWQgb24gZml4aW5nIHRoZSBidWcgIzEyMzQ1IHdpdGggdGhlc2UgdHdvIHBhdGNoZXMsIGFuZCB0aGUgbWVyZ2UKK2BNJ2Agd2l0aCBzd2FwcGVkIHBhcmVudHMgY2FuIHNheSBpbiBpdHMgbG9nIG1lc3NhZ2UgIk1lcmdlCitmaXgtYnVnLTEyMzQ1Ii4gSGF2aW5nIGEgd2F5IHRvIHRlbGwgYGdpdCBwdWxsYCB0byBjcmVhdGUgYSBtZXJnZQorYnV0IHJlY29yZCB0aGUgcGFyZW50cyBpbiByZXZlcnNlIG9yZGVyIG1heSBiZSBhIHdheSB0byBkbyBzby4KKworTm90ZSB0aGF0IEkgc2FpZCAiYWNoaWV2ZXMgYSBzaW5nbGUgZ29hbCIgYWJvdmUsIGJlY2F1c2UgdGhpcyBpcworaW1wb3J0YW50LiAgIlN3YXBwaW5nIHRoZSBtZXJnZSBvcmRlciIgb25seSBjb3ZlcnMgYSBzcGVjaWFsIGNhc2UKK3doZXJlIHRoZSBwcm9qZWN0IGRvZXMgbm90IGNhcmUgdG9vIG11Y2ggYWJvdXQgaGF2aW5nIHVucmVsYXRlZAordGhpbmdzIGRvbmUgb24gYSBzaW5nbGUgbWVyZ2UgYnV0IGNhcmVzIGEgbG90IGFib3V0IGZpcnN0LXBhcmVudAorY2hhaW4uCisKK1RoZXJlIGFyZSBtdWx0aXBsZSBzY2hvb2xzIG9mIHRob3VnaHQgYWJvdXQgdGhlICJ0cnVuayIgbWFuYWdlbWVudC4KKworIDEuIFNvbWUgcHJvamVjdHMgd2FudCB0byBrZWVwIGEgY29tcGxldGVseSBsaW5lYXIgaGlzdG9yeSB3aXRob3V0IGFueQorICAgIG1lcmdlcy4gIE9idmlvdXNseSwgc3dhcHBpbmcgdGhlIG1lcmdlIG9yZGVyIHdvdWxkIG5vdCBtYXRjaCB0aGVpcgorICAgIHRhc3RlLiAgWW91IHdvdWxkIG5lZWQgdG8gZmxhdHRlbiB5b3VyIGhpc3Rvcnkgb24gdG9wIG9mIHRoZQorICAgIHVwZGF0ZWQgdXBzdHJlYW0gdG8gcmVzdWx0IGluIGEgaGlzdG9yeSBvZiB0aGlzIHNoYXBlIGluc3RlYWQ6CisrCistLS0tLS0tLS0tLS0KKyAgICAtLS1vLS0tby0tLUEtLS1YLS0tWS0tLVotLS1CLS0tQworLS0tLS0tLS0tLS0tCisrCit3aXRoIGBnaXQgcHVsbCAtLXJlYmFzZWAgb3Igc29tZXRoaW5nLgorCisgMi4gU29tZSBwcm9qZWN0cyB0b2xlcmF0ZSBtZXJnZXMgaW4gdGhlaXIgaGlzdG9yeSwgYnV0IGRvIG5vdCB3b3JyeQorICAgIHRvbyBtdWNoIGFib3V0IHRoZSBmaXJzdC1wYXJlbnQgb3JkZXIsIGFuZCBhbGxvdyBmYXN0LWZvcndhcmQKKyAgICBtZXJnZXMuICBUbyB0aGVtLCBzd2FwcGluZyB0aGUgbWVyZ2Ugb3JkZXIgZG9lcyBub3QgaHVydCwgYnV0CisgICAgaXQgaXMgdW5uZWNlc3NhcnkuCisKKyAzLiBTb21lIHByb2plY3RzIHdhbnQgZWFjaCBjb21taXQgb24gdGhlICJ0cnVuayIgdG8gZG8gb25lIHNpbmdsZQorICAgIHRoaW5nLiAgVGhlIG91dHB1dCBvZiBgZ2l0IGxvZyAtLWZpcnN0LXBhcmVudGAgaW4gc3VjaCBhIHByb2plY3QKKyAgICB3b3VsZCBzaG93IGVpdGhlciBhIG1lcmdlIG9mIGEgc2lkZSBicmFuY2ggdGhhdCBjb21wbGV0ZXMgYSBzaW5nbGUKKyAgICB0aGVtZSwgb3IgYSBzaW5nbGUgY29tbWl0IHRoYXQgY29tcGxldGVzIGEgc2luZ2xlIHRoZW1lIGJ5IGl0c2VsZi4KKyAgICBJZiB5b3VyIHR3byBjb21taXRzIGBCYCBhbmQgYENgIChvciB0aGV5IG1heSBldmVuIGJlIHR3byBncm91cHMgb2YKKyAgICBjb21taXRzKSB3ZXJlIHNvbHZpbmcgdHdvIGluZGVwZW5kZW50IGlzc3VlcywgdGhlbiB0aGUgbWVyZ2UgYE0nYAorICAgIHdlIG1hZGUgaW4gdGhlIGVhcmxpZXIgZXhhbXBsZSBieSBzd2FwcGluZyB0aGUgbWVyZ2Ugb3JkZXIgaXMKKyAgICBzdGlsbCBub3QgdXAgdG8gdGhlIHByb2plY3Qgc3RhbmRhcmQuICBJdCBtZXJnZXMgdHdvIHVucmVsYXRlZAorICAgIGVmZm9ydHMgYEJgIGFuZCBgQ2AgYXQgdGhlIHNhbWUgdGltZS4KKworRm9yIHByb2plY3RzIGluIHRoZSBsYXN0IGNhdGVnb3J5IChHaXQgaXRzZWxmIGlzIG9uZSBvZiB0aGVtKSwKK2luZGl2aWR1YWwgZGV2ZWxvcGVycyB3b3VsZCB3YW50IHRvIHByZXBhcmUgYSBoaXN0b3J5IG1vcmUgbGlrZQordGhpczoKKworLS0tLS0tLS0tLS0tCisJCSBDMC0tQzEtLUMyICAgICB0b3BpYy1jCisJCS8KKyAgICAtLS1vLS0tby0tLUEgICAgICAgICAgICAgICAgbWFzdGVyCisJCVwKKwkJIEIwLS1CMS0tQjIgICAgIHRvcGljLWIKKy0tLS0tLS0tLS0tLQorCitUaGF0IGlzLCBrZWVwaW5nIHNlcGFyYXRlIHRvcGljcyBvbiBzZXBhcmF0ZSBicmFuY2hlcywgcGVyaGFwcyBsaWtlCitzbzoKKworLS0tLS0tLS0tLS0tCisgICAgJCBnaXQgY2xvbmUgJFVSTCB3b3JrICYmIGNkIHdvcmsKKyAgICAkIGdpdCBjaGVja291dCAtYiB0b3BpYy1iIG1hc3RlcgorICAgICQgLi4uIHdvcmsgdG8gY3JlYXRlIEIwLCBCMSBhbmQgQjIgdG8gY29tcGxldGUgb25lIHRoZW1lCisgICAgJCBnaXQgY2hlY2tvdXQgLWIgdG9waWMtYyBtYXN0ZXIKKyAgICAkIC4uLiBzYW1lIGZvciB0aGUgdGhlbWUgb2YgdG9waWMtYworLS0tLS0tLS0tLS0tCisKK0FuZCB0aGVuCisKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorICAgICQgZ2l0IHB1bGwgLS1mZi1vbmx5CistLS0tLS0tLS0tLS0KKword291bGQgZ3JhYiBgWGAsIGBZYCBhbmQgYFpgIGZyb20gdGhlIHVwc3RyZWFtIGFuZCBhZHZhbmNlIHlvdXIgbWFzdGVyCiticmFuY2g6CisKKy0tLS0tLS0tLS0tLQorCQkgQzAtLUMxLS1DMiAgICAgdG9waWMtYworCQkvCisgICAgLS0tby0tLW8tLS1BLS0tWC0tLVktLS1aICAgIG1hc3RlcgorCQlcCisJCSBCMC0tQjEtLUIyICAgICB0b3BpYy1iCistLS0tLS0tLS0tLS0KKworQW5kIHRoZW4geW91IHdvdWxkIG1lcmdlIHRoZXNlIHR3byBicmFuY2hlcyBzZXBhcmF0ZWx5OgorCistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCBtZXJnZSB0b3BpYy1iCisgICAgJCBnaXQgbWVyZ2UgdG9waWMtYworLS0tLS0tLS0tLS0tCisKK3RvIHJlc3VsdCBpbgorCistLS0tLS0tLS0tLS0KKwkJIEMwLS1DMS0tLS0tLS0tLUMyCisJCS8gICAgICAgICAgICAgICAgIFwKKyAgICAtLS1vLS0tby0tLUEtLS1YLS0tWS0tLVotLS1NLS0tTgorCQlcICAgICAgICAgICAgIC8KKwkJIEIwLS1CMS0tLS0tQjIKKy0tLS0tLS0tLS0tLQorCithbmQgcHVzaCBpdCBiYWNrIHRvIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkuCisKK0l0IGlzIHZlcnkgbXVjaCBwb3NzaWJsZSB0aGF0IHdoaWxlIHlvdSBhcmUgbWVyZ2luZyB0b3BpYy1iIGFuZAordG9waWMtYywgc29tZWJvZHkgYWdhaW4gYWR2YW5jZWQgdGhlIGhpc3RvcnkgaW4gdGhlIGNlbnRyYWwgcmVwb3NpdG9yeQordG8gcHV0IGBXYCBvbiB0b3Agb2YgYFpgLCBhbmQgbWFrZSB5b3VyIGBnaXQgcHVzaGAgZmFpbC4KKworSW4gc3VjaCBhIGNhc2UsIHlvdSB3b3VsZCByZXdpbmQgdG8gZGlzY2FyZCBgTWAgYW5kIGBOYCwgdXBkYXRlIHRoZQordGlwIG9mIHlvdXIgJ21hc3RlcicgYWdhaW4gYW5kIHJlZG8gdGhlIHR3byBtZXJnZXM6CisKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyCisgICAgJCBnaXQgcHVsbCAtLWZmLW9ubHkKKyAgICAkIGdpdCBtZXJnZSB0b3BpYy1iCisgICAgJCBnaXQgbWVyZ2UgdG9waWMtYworLS0tLS0tLS0tLS0tCisKK1RoZSBwcm9jZWR1cmUgd2lsbCByZXN1bHQgaW4gYSBoaXN0b3J5IHRoYXQgbG9va3MgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKwkJIEMwLS1DMS0tLS0tLS0tLS0tLS0tQzIKKwkJLyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAtLS1vLS0tby0tLUEtLS1YLS0tWS0tLVotLS1XLS0tTSctLU4nCisJCVwgICAgICAgICAgICAgICAgIC8KKwkJIEIwLS1CMS0tLS0tLS0tLUIyCistLS0tLS0tLS0tLS0KKworU2VlIGFsc28gaHR0cDovL2dpdC1ibGFtZS5ibG9nc3BvdC5jb20vMjAxMy8wOS9mdW4td2l0aC1maXJzdC1wYXJlbnQtaGlzdG9yeS5odG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL21haW50YWluLWdpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL21haW50YWluLWdpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0Mzc4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vbWFpbnRhaW4tZ2l0LnR4dApAQCAtMCwwICsxLDQ0OSBAQAorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorRGF0ZTogV2VkLCAyMSBOb3YgMjAwNyAxNjozMjo1NSAtMDgwMAorU3ViamVjdDogQWRkZW5kdW0gdG8gIk1haW50Tm90ZXMiCitBYnN0cmFjdDogSW1hZ2luZSB0aGF0IEdpdCBkZXZlbG9wbWVudCBpcyByYWNpbmcgYWxvbmcgYXMgdXN1YWwsIHdoZW4gb3VyIGZyaWVuZGx5CisgbmVpZ2hib3Job29kIG1haW50YWluZXIgaXMgc3RydWNrIGRvd24gYnkgYSB3YXl3YXJkIGJ1cy4gT3V0IG9mIHRoZQorIGhvcmRlcyBvZiBzdWNrZXJzIChsb3lhbCBkZXZlbG9wZXJzKSwgeW91IGhhdmUgYmVlbiB0cmlja2VkIChjaG9zZW4pIHRvCisgc3RlcCB1cCBhcyB0aGUgbmV3IG1haW50YWluZXIuIFRoaXMgaG93dG8gd2lsbCBzaG93IHlvdSAiaG93IHRvIiBkbyBpdC4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gbWFpbnRhaW4gR2l0Cis9PT09PT09PT09PT09PT09PT09CisKK0FjdGl2aXRpZXMKKy0tLS0tLS0tLS0KKworVGhlIG1haW50YWluZXIncyBHaXQgdGltZSBpcyBzcGVudCBvbiB0aHJlZSBhY3Rpdml0aWVzLgorCisgLSBDb21tdW5pY2F0aW9uICg0NSUpCisKKyAgIE1haWxpbmcgbGlzdCBkaXNjdXNzaW9ucyBvbiBnZW5lcmFsIGRlc2lnbiwgZmllbGRpbmcgdXNlcgorICAgcXVlc3Rpb25zLCBkaWFnbm9zaW5nIGJ1ZyByZXBvcnRzOyByZXZpZXdpbmcsIGNvbW1lbnRpbmcgb24sCisgICBzdWdnZXN0aW5nIGFsdGVybmF0aXZlcyB0bywgYW5kIHJlamVjdGluZyBwYXRjaGVzLgorCisgLSBJbnRlZ3JhdGlvbiAoNTAlKQorCisgICBBcHBseWluZyBuZXcgcGF0Y2hlcyBmcm9tIHRoZSBjb250cmlidXRvcnMgd2hpbGUgc3BvdHRpbmcgYW5kCisgICBjb3JyZWN0aW5nIG1pbm9yIG1pc3Rha2VzLCBzaHVmZmxpbmcgdGhlIGludGVncmF0aW9uIGFuZAorICAgdGVzdGluZyBicmFuY2hlcywgcHVzaGluZyB0aGUgcmVzdWx0cyBvdXQsIGN1dHRpbmcgdGhlCisgICByZWxlYXNlcywgYW5kIG1ha2luZyBhbm5vdW5jZW1lbnRzLgorCisgLSBPd24gZGV2ZWxvcG1lbnQgKDUlKQorCisgICBTY3JhdGNoaW5nIG15IG93biBpdGNoIGFuZCBzZW5kaW5nIHByb3Bvc2VkIHBhdGNoIHNlcmllcyBvdXQuCisKK1RoZSBQb2xpY3kKKy0tLS0tLS0tLS0KKworVGhlIHBvbGljeSBvbiBJbnRlZ3JhdGlvbiBpcyBpbmZvcm1hbGx5IG1lbnRpb25lZCBpbiAiQSBOb3RlCitmcm9tIHRoZSBtYWludGFpbmVyIiBtZXNzYWdlLCB3aGljaCBpcyBwZXJpb2RpY2FsbHkgcG9zdGVkIHRvCit0aGlzIG1haWxpbmcgbGlzdCBhZnRlciBlYWNoIGZlYXR1cmUgcmVsZWFzZSBpcyBtYWRlLgorCisgLSBGZWF0dXJlIHJlbGVhc2VzIGFyZSBudW1iZXJlZCBhcyB2WC5ZLjAgYW5kIGFyZSBtZWFudCB0bworICAgY29udGFpbiBidWdmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIGluIGFueSBhcmVhLCBpbmNsdWRpbmcKKyAgIGZ1bmN0aW9uYWxpdHksIHBlcmZvcm1hbmNlIGFuZCB1c2FiaWxpdHksIHdpdGhvdXQgcmVncmVzc2lvbi4KKworIC0gT25lIHJlbGVhc2UgY3ljbGUgZm9yIGEgZmVhdHVyZSByZWxlYXNlIGlzIGV4cGVjdGVkIHRvIGxhc3QgZm9yCisgICBlaWdodCB0byB0ZW4gd2Vla3MuCisKKyAtIE1haW50ZW5hbmNlIHJlbGVhc2VzIGFyZSBudW1iZXJlZCBhcyB2WC5ZLlogYW5kIGFyZSBtZWFudAorICAgdG8gY29udGFpbiBvbmx5IGJ1Z2ZpeGVzIGZvciB0aGUgY29ycmVzcG9uZGluZyB2WC5ZLjAgZmVhdHVyZQorICAgcmVsZWFzZSBhbmQgZWFybGllciBtYWludGVuYW5jZSByZWxlYXNlcyB2WC5ZLlcgKFcgPCBaKS4KKworIC0gJ21hc3RlcicgYnJhbmNoIGlzIHVzZWQgdG8gcHJlcGFyZSBmb3IgdGhlIG5leHQgZmVhdHVyZQorICAgcmVsZWFzZS4gSW4gb3RoZXIgd29yZHMsIGF0IHNvbWUgcG9pbnQsIHRoZSB0aXAgb2YgJ21hc3RlcicKKyAgIGJyYW5jaCBpcyB0YWdnZWQgd2l0aCB2WC5ZLjAuCisKKyAtICdtYWludCcgYnJhbmNoIGlzIHVzZWQgdG8gcHJlcGFyZSBmb3IgdGhlIG5leHQgbWFpbnRlbmFuY2UKKyAgIHJlbGVhc2UuICBBZnRlciB0aGUgZmVhdHVyZSByZWxlYXNlIHZYLlkuMCBpcyBtYWRlLCB0aGUgdGlwCisgICBvZiAnbWFpbnQnIGJyYW5jaCBpcyBzZXQgdG8gdGhhdCByZWxlYXNlLCBhbmQgYnVnZml4ZXMgd2lsbAorICAgYWNjdW11bGF0ZSBvbiB0aGUgYnJhbmNoLCBhbmQgYXQgc29tZSBwb2ludCwgdGhlIHRpcCBvZiB0aGUKKyAgIGJyYW5jaCBpcyB0YWdnZWQgd2l0aCB2WC5ZLjEsIHZYLlkuMiwgYW5kIHNvIG9uLgorCisgLSAnbmV4dCcgYnJhbmNoIGlzIHVzZWQgdG8gcHVibGlzaCBjaGFuZ2VzIChib3RoIGVuaGFuY2VtZW50cworICAgYW5kIGZpeGVzKSB0aGF0ICgxKSBoYXZlIHdvcnRod2hpbGUgZ29hbCwgKDIpIGFyZSBpbiBhIGZhaXJseQorICAgZ29vZCBzaGFwZSBzdWl0YWJsZSBmb3IgZXZlcnlkYXkgdXNlLCAoMykgYnV0IGhhdmUgbm90IHlldAorICAgZGVtb25zdHJhdGVkIHRvIGJlIHJlZ3Jlc3Npb24gZnJlZS4gIE5ldyBjaGFuZ2VzIGFyZSB0ZXN0ZWQKKyAgIGluICduZXh0JyBiZWZvcmUgbWVyZ2VkIHRvICdtYXN0ZXInLgorCisgLSAncHUnIGJyYW5jaCBpcyB1c2VkIHRvIHB1Ymxpc2ggb3RoZXIgcHJvcG9zZWQgY2hhbmdlcyB0aGF0IGRvCisgICBub3QgeWV0IHBhc3MgdGhlIGNyaXRlcmlhIHNldCBmb3IgJ25leHQnLgorCisgLSBUaGUgdGlwcyBvZiAnbWFzdGVyJyBhbmQgJ21haW50JyBicmFuY2hlcyB3aWxsIG5vdCBiZSByZXdvdW5kIHRvCisgICBhbGxvdyBwZW9wbGUgdG8gYnVpbGQgdGhlaXIgb3duIGN1c3RvbWl6YXRpb24gb24gdG9wIG9mIHRoZW0uCisgICBFYXJseSBpbiBhIG5ldyBkZXZlbG9wbWVudCBjeWNsZSwgJ25leHQnIGlzIHJld291bmQgdG8gdGhlIHRpcCBvZgorICAgJ21hc3Rlcicgb25jZSwgYnV0IG90aGVyd2lzZSBpdCB3aWxsIG5vdCBiZSByZXdvdW5kIHVudGlsIHRoZSBlbmQKKyAgIG9mIHRoZSBjeWNsZS4KKworIC0gVXN1YWxseSAnbWFzdGVyJyBjb250YWlucyBhbGwgb2YgJ21haW50JyBhbmQgJ25leHQnIGNvbnRhaW5zIGFsbAorICAgb2YgJ21hc3RlcicuICAncHUnIGNvbnRhaW5zIGFsbCB0aGUgdG9waWNzIG1lcmdlZCB0byAnbmV4dCcsIGJ1dAorICAgaXMgcmVidWlsdCBkaXJlY3RseSBvbiAnbWFzdGVyJy4KKworIC0gVGhlIHRpcCBvZiAnbWFzdGVyJyBpcyBtZWFudCB0byBiZSBtb3JlIHN0YWJsZSB0aGFuIGFueQorICAgdGFnZ2VkIHJlbGVhc2VzLCBhbmQgdGhlIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGZvbGxvdyBpdC4KKworIC0gVGhlICduZXh0JyBicmFuY2ggaXMgd2hlcmUgbmV3IGFjdGlvbiB0YWtlcyBwbGFjZSwgYW5kIHRoZQorICAgdXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdGVzdCBpdCBzbyB0aGF0IHJlZ3Jlc3Npb25zIGFuZCBidWdzCisgICBhcmUgZm91bmQgYmVmb3JlIG5ldyB0b3BpY3MgYXJlIG1lcmdlZCB0byAnbWFzdGVyJy4KKworTm90ZSB0aGF0IGJlZm9yZSB2MS45LjAgcmVsZWFzZSwgdGhlIHZlcnNpb24gbnVtYmVycyB1c2VkIHRvIGJlCitzdHJ1Y3R1cmVkIHNsaWdodGx5IGRpZmZlcmVudGx5LiAgdlguWS5aIHdlcmUgZmVhdHVyZSByZWxlYXNlcyB3aGlsZQordlguWS5aLlcgd2VyZSBtYWludGVuYW5jZSByZWxlYXNlcyBmb3IgdlguWS5aLgorCisKK0EgVHlwaWNhbCBHaXQgRGF5CistLS0tLS0tLS0tLS0tLS0tLQorCitBIHR5cGljYWwgR2l0IGRheSBmb3IgdGhlIG1haW50YWluZXIgaW1wbGVtZW50cyB0aGUgYWJvdmUgcG9saWN5CitieSBkb2luZyB0aGUgZm9sbG93aW5nOgorCisgLSBTY2FuIG1haWxpbmcgbGlzdC4gIFJlc3BvbmQgd2l0aCByZXZpZXcgY29tbWVudHMsIHN1Z2dlc3Rpb25zCisgICBldGMuICBLaWJpdHouICBDb2xsZWN0IHBvdGVudGlhbGx5IHVzYWJsZSBwYXRjaGVzIGZyb20gdGhlCisgICBtYWlsaW5nIGxpc3QuICBQYXRjaGVzIGFib3V0IGEgc2luZ2xlIHRvcGljIGdvIHRvIG9uZSBtYWlsYm94IChJCisgICByZWFkIG15IG1haWwgaW4gR251cywgYW5kIHR5cGUgXEMtbyB0byBzYXZlL2FwcGVuZCBtZXNzYWdlcyBpbgorICAgZmlsZXMgaW4gbWJveCBmb3JtYXQpLgorCisgLSBXcml0ZSBoaXMgb3duIHBhdGNoZXMgdG8gYWRkcmVzcyBpc3N1ZXMgcmFpc2VkIG9uIHRoZSBsaXN0IGJ1dAorICAgbm9ib2R5IGhhcyBzdGVwcGVkIHVwIHNvbHZpbmcuICBTZW5kIGl0IG91dCBqdXN0IGxpa2Ugb3RoZXIKKyAgIGNvbnRyaWJ1dG9ycyBkbywgYW5kIHBpY2sgdGhlbSB1cCBqdXN0IGxpa2UgcGF0Y2hlcyBmcm9tIG90aGVyCisgICBjb250cmlidXRvcnMgKHNlZSBhYm92ZSkuCisKKyAtIFJldmlldyB0aGUgcGF0Y2hlcyBpbiB0aGUgc2F2ZWQgbWFpbGJveGVzLiAgRWRpdCBwcm9wb3NlZCBsb2cKKyAgIG1lc3NhZ2UgZm9yIHR5cG9maXhlcyBhbmQgY2xhcmlmaWNhdGlvbnMsIGFuZCBhZGQgQWNrcworICAgY29sbGVjdGVkIGZyb20gdGhlIGxpc3QuICBFZGl0IHBhdGNoIHRvIGluY29ycG9yYXRlICJPb3BzLAorICAgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGxpa2UgdGhpcyIgZml4ZXMgZnJvbSB0aGUgZGlzY3Vzc2lvbi4KKworIC0gQ2xhc3NpZnkgdGhlIGNvbGxlY3RlZCBwYXRjaGVzIGFuZCBoYW5kbGUgJ21hc3RlcicgYW5kCisgICAnbWFpbnQnIHVwZGF0ZXM6CisKKyAgIC0gT2J2aW91c2x5IGNvcnJlY3QgZml4ZXMgdGhhdCBwZXJ0YWluIHRvIHRoZSB0aXAgb2YgJ21haW50JworICAgICBhcmUgZGlyZWN0bHkgYXBwbGllZCB0byAnbWFpbnQnLgorCisgICAtIE9idmlvdXNseSBjb3JyZWN0IGZpeGVzIHRoYXQgcGVydGFpbiB0byB0aGUgdGlwIG9mICdtYXN0ZXInCisgICAgIGFyZSBkaXJlY3RseSBhcHBsaWVkIHRvICdtYXN0ZXInLgorCisgICAtIE90aGVyIHRvcGljcyBhcmUgbm90IGhhbmRsZWQgaW4gdGhpcyBzdGVwLgorCisgICBUaGlzIHN0ZXAgaXMgZG9uZSB3aXRoICJnaXQgYW0iLgorCisgICAgICQgZ2l0IGNoZWNrb3V0IG1hc3RlciAgICA7IyBvciAiZ2l0IGNoZWNrb3V0IG1haW50IgorICAgICAkIGdpdCBhbSAtc2MzIG1haWxib3gKKyAgICAgJCBtYWtlIHRlc3QKKworICAgSW4gcHJhY3RpY2UsIGFsbW9zdCBubyBwYXRjaCBkaXJlY3RseSBnb2VzIHRvICdtYXN0ZXInIG9yCisgICAnbWFpbnQnLgorCisgLSBSZXZpZXcgdGhlIGxhc3QgaXNzdWUgb2YgIldoYXQncyBjb29raW5nIiBtZXNzYWdlLCByZXZpZXcgdGhlCisgICB0b3BpY3MgcmVhZHkgZm9yIG1lcmdpbmcgKHRvcGljLT5tYXN0ZXIgYW5kIHRvcGljLT5tYWludCkuICBVc2UKKyAgICJNZXRhL2Nvb2sgLXciIHNjcmlwdCAod2hlcmUgTWV0YS8gY29udGFpbnMgYSBjaGVja291dCBvZiB0aGUKKyAgICd0b2RvJyBicmFuY2gpIHRvIGFpZCB0aGlzIHN0ZXAuCisKKyAgIEFuZCBwZXJmb3JtIHRoZSBtZXJnZS4gIFVzZSAiTWV0YS9SZWludGVncmF0ZSAtZSIgc2NyaXB0IChzZWUKKyAgIGxhdGVyKSB0byBhaWQgdGhpcyBzdGVwLgorCisgICAgICQgTWV0YS9jb29rIC13IGxhc3QtaXNzdWUtb2Ytd2hhdHMtY29va2luZy5tYm94CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyICAgIDsjIG9yICJnaXQgY2hlY2tvdXQgbWFpbnQiCisgICAgICQgZWNobyBhaS90b3BpYyB8IE1ldGEvUmVpbnRlZ3JhdGUgLWUgOyMgImdpdCBtZXJnZSBhaS90b3BpYyIKKyAgICAgJCBnaXQgbG9nIC1wIE9SSUdfSEVBRC4uIDsjIGZpbmFsIHJldmlldworICAgICAkIGdpdCBkaWZmIE9SSUdfSEVBRC4uICAgOyMgZmluYWwgcmV2aWV3CisgICAgICQgbWFrZSB0ZXN0ICAgICAgICAgICAgICA7IyBmaW5hbCByZXZpZXcKKworIC0gSGFuZGxlIHRoZSByZW1haW5pbmcgcGF0Y2hlczoKKworICAgLSBBbnl0aGluZyB1bm9idmlvdXMgdGhhdCBpcyBhcHBsaWNhYmxlIHRvICdtYXN0ZXInIChpbiBvdGhlcgorICAgICB3b3JkcywgZG9lcyBub3QgZGVwZW5kIG9uIGFueXRoaW5nIHRoYXQgaXMgc3RpbGwgaW4gJ25leHQnCisgICAgIGFuZCBub3QgaW4gJ21hc3RlcicpIGlzIGFwcGxpZWQgdG8gYSBuZXcgdG9waWMgYnJhbmNoIHRoYXQKKyAgICAgaXMgZm9ya2VkIGZyb20gdGhlIHRpcCBvZiAnbWFzdGVyJy4gIFRoaXMgaW5jbHVkZXMgYm90aAorICAgICBlbmhhbmNlbWVudHMgYW5kIHVub2J2aW91cyBmaXhlcyB0byAnbWFzdGVyJy4gIEEgdG9waWMKKyAgICAgYnJhbmNoIGlzIG5hbWVkIGFzIGFpL3RvcGljIHdoZXJlICJhaSIgaXMgdHdvLWxldHRlciBzdHJpbmcKKyAgICAgbmFtZWQgYWZ0ZXIgYXV0aG9yJ3MgaW5pdGlhbCBhbmQgInRvcGljIiBpcyBhIGRlc2NyaXB0aXZlIG5hbWUKKyAgICAgb2YgdGhlIHRvcGljIChpbiBvdGhlciB3b3JkcywgIndoYXQncyB0aGUgc2VyaWVzIGlzIGFib3V0IikuCisKKyAgIC0gQW4gdW5vYnZpb3VzIGZpeCBtZWFudCBmb3IgJ21haW50JyBpcyBhcHBsaWVkIHRvIGEgbmV3CisgICAgIHRvcGljIGJyYW5jaCB0aGF0IGlzIGZvcmtlZCBmcm9tIHRoZSB0aXAgb2YgJ21haW50Jy4gIFRoZQorICAgICB0b3BpYyBpcyBuYW1lZCBhcyBhaS9tYWludC10b3BpYy4KKworICAgLSBDaGFuZ2VzIHRoYXQgcGVydGFpbiB0byBhbiBleGlzdGluZyB0b3BpYyBhcmUgYXBwbGllZCB0bworICAgICB0aGUgYnJhbmNoLCBidXQ6CisKKyAgICAgLSBvYnZpb3VzbHkgY29ycmVjdCBvbmVzIGFyZSBhcHBsaWVkIGZpcnN0OworCisgICAgIC0gcXVlc3Rpb25hYmxlIG9uZXMgYXJlIGRpc2NhcmRlZCBvciBhcHBsaWVkIHRvIG5lYXIgdGhlIHRpcDsKKworICAgLSBSZXBsYWNlbWVudCBwYXRjaGVzIHRvIGFuIGV4aXN0aW5nIHRvcGljIGFyZSBhY2NlcHRlZCBvbmx5CisgICAgIGZvciBjb21taXRzIG5vdCBpbiAnbmV4dCcuCisKKyAgIFRoZSBhYm92ZSBleGNlcHQgdGhlICJyZXBsYWNlbWVudCIgYXJlIGFsbCBkb25lIHdpdGg6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgYWkvdG9waWMgOyMgb3IgImdpdCBjaGVja291dCAtYiBhaS90b3BpYyBtYXN0ZXIiCisgICAgICQgZ2l0IGFtIC1zYzMgbWFpbGJveAorCisgICB3aGlsZSBwYXRjaCByZXBsYWNlbWVudCBpcyBvZnRlbiBkb25lIGJ5OgorCisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCBhaS90b3BpY34kbi4uYWkvdG9waWMgOyMgZXhwb3J0IGV4aXN0aW5nCisKKyAgIHRoZW4gcmVwbGFjZSBzb21lIHBhcnRzIHdpdGggdGhlIG5ldyBwYXRjaCwgYW5kIHJlYXBwbHlpbmc6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgYWkvdG9waWMKKyAgICAgJCBnaXQgcmVzZXQgLS1oYXJkIGFpL3RvcGljfiRuCisgICAgICQgZ2l0IGFtIC1zYzMgLXMgMDAwKi50eHQKKworICAgVGhlIGZ1bGwgdGVzdCBzdWl0ZSBpcyBhbHdheXMgcnVuIGZvciAnbWFpbnQnIGFuZCAnbWFzdGVyJworICAgYWZ0ZXIgcGF0Y2ggYXBwbGljYXRpb247IGZvciB0b3BpYyBicmFuY2hlcyB0aGUgdGVzdHMgYXJlIHJ1bgorICAgYXMgdGltZSBwZXJtaXRzLgorCisgLSBNZXJnZSBtYWludCB0byBtYXN0ZXIgYXMgbmVlZGVkOgorCisgICAgICQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorICAgICAkIGdpdCBtZXJnZSBtYWludAorICAgICAkIG1ha2UgdGVzdAorCisgLSBNZXJnZSBtYXN0ZXIgdG8gbmV4dCBhcyBuZWVkZWQ6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbmV4dAorICAgICAkIGdpdCBtZXJnZSBtYXN0ZXIKKyAgICAgJCBtYWtlIHRlc3QKKworIC0gUmV2aWV3IHRoZSBsYXN0IGlzc3VlIG9mICJXaGF0J3MgY29va2luZyIgYWdhaW4gYW5kIHNlZSBpZiB0b3BpY3MKKyAgIHRoYXQgYXJlIHJlYWR5IHRvIGJlIG1lcmdlZCB0byAnbmV4dCcgYXJlIHN0aWxsIGluIGdvb2Qgc2hhcGUKKyAgIChlLmcuIGhhcyB0aGVyZSBhbnkgbmV3IGlzc3VlIGlkZW50aWZpZWQgb24gdGhlIGxpc3Qgd2l0aCB0aGUKKyAgIHNlcmllcz8pCisKKyAtIFByZXBhcmUgJ2pjaCcgYnJhbmNoLCB3aGljaCBpcyB1c2VkIHRvIHJlcHJlc2VudCBzb21ld2hlcmUKKyAgIGJldHdlZW4gJ21hc3RlcicgYW5kICdwdScgYW5kIG9mdGVuIGlzIHNsaWdodGx5IGFoZWFkIG9mICduZXh0Jy4KKworICAgICAkIE1ldGEvUmVpbnRlZ3JhdGUgbWFzdGVyLi5wdSA+TWV0YS9yZWRvLWpjaC5zaAorCisgICBUaGUgcmVzdWx0IGlzIGEgc2NyaXB0IHRoYXQgbGlzdHMgdG9waWNzIHRvIGJlIG1lcmdlZCBpbiBvcmRlciB0bworICAgcmVidWlsZCAncHUnIGFzIHRoZSBpbnB1dCB0byBNZXRhL1JlaW50ZWdyYXRlIHNjcmlwdC4gIFJlbW92ZQorICAgbGF0ZXIgdG9waWNzIHRoYXQgc2hvdWxkIG5vdCBiZSBpbiAnamNoJyB5ZXQuICBBZGQgYSBsaW5lIHRoYXQKKyAgIGNvbnNpc3RzIG9mICcjIyMgbWF0Y2ggbmV4dCcgYmVmb3JlIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCB0b3BpYworICAgaW4gdGhlIG91dHB1dCB0aGF0IHNob3VsZCBiZSBpbiAnamNoJyBidXQgbm90IGluICduZXh0JyB5ZXQuCisKKyAtIE5vdyB3ZSBhcmUgcmVhZHkgdG8gc3RhcnQgbWVyZ2luZyB0b3BpY3MgdG8gJ25leHQnLiAgRm9yIGVhY2gKKyAgIGJyYW5jaCB3aG9zZSB0aXAgaXMgbm90IG1lcmdlZCB0byAnbmV4dCcsIG9uZSBvZiB0aHJlZSB0aGluZ3MgY2FuCisgICBoYXBwZW46CisKKyAgIC0gVGhlIGNvbW1pdHMgYXJlIGFsbCBuZXh0LXdvcnRoeTsgbWVyZ2UgdGhlIHRvcGljIHRvIG5leHQ7CisgICAtIFRoZSBuZXcgcGFydHMgYXJlIG9mIG1peGVkIHF1YWxpdHksIGJ1dCBlYXJsaWVyIG9uZXMgYXJlCisgICAgIG5leHQtd29ydGh5OyBtZXJnZSB0aGUgZWFybHkgcGFydHMgdG8gbmV4dDsKKyAgIC0gTm90aGluZyBpcyBuZXh0LXdvcnRoeTsgZG8gbm90IGRvIGFueXRoaW5nLgorCisgICBUaGlzIHN0ZXAgaXMgYWlkZWQgd2l0aCBNZXRhL3JlZG8tamNoLnNoIHNjcmlwdCBjcmVhdGVkIGVhcmxpZXIuCisgICBJZiBhIHRvcGljIHRoYXQgd2FzIGFscmVhZHkgaW4gJ25leHQnIGdhaW5lZCBhIHBhdGNoLCB0aGUgc2NyaXB0CisgICB3b3VsZCBsaXN0IGl0IGFzICJhaS90b3BpY34xIi4gIFRvIGluY2x1ZGUgdGhlIG5ldyBwYXRjaCB0byB0aGUKKyAgIHVwZGF0ZWQgJ25leHQnLCBkcm9wIHRoZSAifjEiIHBhcnQ7IHRvIGtlZXAgaXQgZXhjbHVkZWQsIGRvIG5vdAorICAgdG91Y2ggdGhlIGxpbmUuICBJZiBhIHRvcGljIHRoYXQgd2FzIG5vdCBpbiAnbmV4dCcgc2hvdWxkIGJlCisgICBtZXJnZWQgdG8gJ25leHQnLCBhZGQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4gIFRoZW46CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgLUIgamNoIG1hc3RlcgorICAgICAkIE1ldGEvcmVkby1qY2guc2ggLWMxCisKKyAgIHRvIHJlYnVpbGQgdGhlICdqY2gnIGJyYW5jaCBmcm9tIHNjcmF0Y2guICAiLWMxIiB0ZWxscyB0aGUgc2NyaXB0CisgICB0byBzdG9wIG1lcmdpbmcgYXQgdGhlIGZpcnN0IGxpbmUgdGhhdCBiZWdpbnMgd2l0aCAnIyMjJworICAgKGkuZS4gdGhlICIjIyMgbWF0Y2ggbmV4dCIgbGluZSB5b3UgYWRkZWQgZWFybGllcikuCisKKyAgIEF0IHRoaXMgcG9pbnQsIGJ1aWxkLXRlc3QgdGhlIHJlc3VsdC4gIEl0IG1heSByZXZlYWwgc2VtYW50aWMKKyAgIGNvbmZsaWN0cyAoZS5nLiBhIHRvcGljIHJlbmFtZWQgYSB2YXJpYWJsZSwgYW5vdGhlciBhZGRlZCBhIG5ldworICAgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSB1bmRlciBpdHMgb2xkIG5hbWUpLCBpbiB3aGljaCBjYXNlCisgICBwcmVwYXJlIGFuIGFwcHJvcHJpYXRlIG1lcmdlLWZpeCBmaXJzdCAoc2VlIGFwcGVuZGl4KSwgYW5kCisgICByZWJ1aWxkIHRoZSAnamNoJyBicmFuY2ggZnJvbSBzY3JhdGNoLCBzdGFydGluZyBhdCB0aGUgdGlwIG9mCisgICAnbWFzdGVyJy4KKworICAgVGhlbiBkbyB0aGUgc2FtZSB0byAnbmV4dCcKKworICAgICAkIGdpdCBjaGVja291dCBuZXh0CisgICAgICQgc2ggTWV0YS9yZWRvLWpjaC5zaCAtYzEgLWUKKworICAgVGhlICItZSIgb3B0aW9uIGFsbG93cyB0aGUgbWVyZ2UgbWVzc2FnZSB0aGF0IGNvbWVzIGZyb20gdGhlCisgICBoaXN0b3J5IG9mIHRoZSB0b3BpYyBhbmQgdGhlIGNvbW1lbnRzIGluIHRoZSAiV2hhdCdzIGNvb2tpbmciIHRvCisgICBiZSBlZGl0ZWQuICBUaGUgcmVzdWx0aW5nIHRyZWUgc2hvdWxkIG1hdGNoICdqY2gnIGFzIHRoZSBzYW1lIHNldAorICAgb2YgdG9waWNzIGFyZSBtZXJnZWQgb24gJ21hc3Rlcic7IG90aGVyd2lzZSB0aGVyZSBpcyBhIG1pc21lcmdlLgorICAgSW52ZXN0aWdhdGUgd2h5IGFuZCBkbyBub3QgcHJvY2VlZCB1bnRpbCB0aGUgbWlzbWVyZ2UgaXMgZm91bmQKKyAgIGFuZCByZWN0aWZpZWQuCisKKyAgICAgJCBnaXQgZGlmZiBqY2ggbmV4dAorCisgICBXaGVuIGFsbCBpcyB3ZWxsLCBjbGVhbiB1cCB0aGUgcmVkby1qY2guc2ggc2NyaXB0IHdpdGgKKworICAgICAkIHNoIE1ldGEvcmVkby1qY2guc2ggLXUKKworICAgVGhpcyByZW1vdmVzIHRvcGljcyBsaXN0ZWQgaW4gdGhlIHNjcmlwdCB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuCisgICBtZXJnZWQgdG8gJ21hc3RlcicuICBUaGlzIG1heSBsb3NlICcjIyMgbWF0Y2ggbmV4dCcgbWFya2VyOworICAgYWRkIGl0IGFnYWluIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSB3aGVuIGl0IGhhcHBlbnMuCisKKyAtIFJlYnVpbGQgJ3B1Jy4KKworICAgICAkIE1ldGEvUmVpbnRlZ3JhdGUgbWFzdGVyLi5wdSA+TWV0YS9yZWRvLXB1LnNoCisKKyAgIEVkaXQgdGhlIHJlc3VsdCBieSBhZGRpbmcgbmV3IHRvcGljcyB0aGF0IGFyZSBub3Qgc3RpbGwgaW4gJ3B1JworICAgaW4gdGhlIHNjcmlwdC4gIFRoZW4KKworICAgICAkIGdpdCBjaGVja291dCAtQiBwdSBqY2gKKyAgICAgJCBzaCBNZXRhL3JlZG8tcHUuc2gKKworICAgV2hlbiBhbGwgaXMgd2VsbCwgY2xlYW4gdXAgdGhlIHJlZG8tcHUuc2ggc2NyaXB0IHdpdGgKKworICAgICAkIHNoIE1ldGEvcmVkby1wdS5zaCAtdQorCisgICBEb3VibGUgY2hlY2sgYnkgcnVubmluZworCisgICAgICQgZ2l0IGJyYW5jaCAtLW5vLW1lcmdlZCBwdQorCisgICB0byBzZWUgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBsZWZ0b3ZlciB0b3BpY3MuCisKKyAgIEF0IHRoaXMgcG9pbnQsIGJ1aWxkLXRlc3QgdGhlIHJlc3VsdCBmb3Igc2VtYW50aWMgY29uZmxpY3RzLCBhbmQKKyAgIGlmIHRoZXJlIGFyZSwgcHJlcGFyZSBhbiBhcHByb3ByaWF0ZSBtZXJnZS1maXggZmlyc3QgKHNlZQorICAgYXBwZW5kaXgpLCBhbmQgcmVidWlsZCB0aGUgJ3B1JyBicmFuY2ggZnJvbSBzY3JhdGNoLCBzdGFydGluZyBhdAorICAgdGhlIHRpcCBvZiAnamNoJy4KKworIC0gVXBkYXRlICJXaGF0J3MgY29va2luZyIgbWVzc2FnZSB0byByZXZpZXcgdGhlIHVwZGF0ZXMgdG8KKyAgIGV4aXN0aW5nIHRvcGljcywgbmV3bHkgYWRkZWQgdG9waWNzIGFuZCBncmFkdWF0ZWQgdG9waWNzLgorCisgICBUaGlzIHN0ZXAgaXMgaGVscGVkIHdpdGggTWV0YS9jb29rIHNjcmlwdC4KKworICAgICAkIE1ldGEvY29vaworCisgICBUaGlzIHNjcmlwdCBpbnNwZWN0cyB0aGUgaGlzdG9yeSBiZXR3ZWVuIG1hc3Rlci4ucHUsIGZpbmRzIHRpcHMKKyAgIG9mIHRvcGljIGJyYW5jaGVzLCBjb21wYXJlcyB3aGF0IGl0IGZvdW5kIHdpdGggdGhlIGN1cnJlbnQKKyAgIGNvbnRlbnRzIGluIE1ldGEvd2hhdHMtY29va2luZy50eHQsIGFuZCB1cGRhdGVzIHRoYXQgZmlsZS4KKyAgIFRvcGljcyBub3QgbGlzdGVkIGluIHRoZSBmaWxlIGJ1dCBhcmUgZm91bmQgaW4gbWFzdGVyLi5wdSBhcmUKKyAgIGFkZGVkIHRvIHRoZSAiTmV3IHRvcGljcyIgc2VjdGlvbiwgdG9waWNzIGxpc3RlZCBpbiB0aGUgZmlsZSB0aGF0CisgICBhcmUgbm8gbG9uZ2VyIGZvdW5kIGluIG1hc3Rlci4ucHUgYXJlIG1vdmVkIHRvIHRoZSAiR3JhZHVhdGVkIHRvCisgICBtYXN0ZXIiIHNlY3Rpb24sIGFuZCB0b3BpY3Mgd2hvc2UgY29tbWl0cyBjaGFuZ2VkIHRoZWlyIHN0YXRlcworICAgKGUuZy4gdXNlZCB0byBiZSBvbmx5IGluICdwdScsIG5vdyBtZXJnZWQgdG8gJ25leHQnKSBhcmUgdXBkYXRlZAorICAgd2l0aCBjaGFuZ2UgbWFya2VycyAiPDwiIGFuZCAiPj4iLgorCisgICBMb29rIGZvciBsaW5lcyBlbmNsb3NlZCBpbiAiPDwiIGFuZCAiPj4iOyB0aGV5IGhvbGQgY29udGVudHMgZnJvbQorICAgb2xkIGZpbGUgdGhhdCBhcmUgcmVwbGFjZWQgYnkgdGhpcyBpbnRlZ3JhdGlvbiByb3VuZC4gIEFmdGVyCisgICB2ZXJpZnlpbmcgdGhlbSwgcmVtb3ZlIHRoZSBvbGQgcGFydC4gIFJldmlldyB0aGUgZGVzY3JpcHRpb24gZm9yCisgICBlYWNoIHRvcGljIGFuZCB1cGRhdGUgaXRzIGRvbmVuZXNzIGFuZCBwbGFuIGFzIG5lZWRlZC4gIFRvIHJldmlldworICAgdGhlIHVwZGF0ZWQgcGxhbiwgcnVuCisKKyAgICAgJCBNZXRhL2Nvb2sgLXcKKworICAgd2hpY2ggd2lsbCBwaWNrIHVwIGNvbW1lbnRzIGdpdmVuIHRvIHRoZSB0b3BpY3MsIHN1Y2ggYXMgIldpbGwKKyAgIG1lcmdlIHRvICduZXh0JyIsIGV0Yy4gKHNlZSBNZXRhL2Nvb2sgc2NyaXB0IHRvIGxlYXJuIHdoYXQga2luZAorICAgb2YgcGhyYXNlcyBhcmUgc3VwcG9ydGVkKS4KKworIC0gQ29tcGlsZSwgdGVzdCBhbmQgaW5zdGFsbCBhbGwgZm91ciAoZml2ZSkgaW50ZWdyYXRpb24gYnJhbmNoZXM7CisgICBNZXRhL0RvdGhlbSBzY3JpcHQgbWF5IGFpZCB0aGlzIHN0ZXAuCisKKyAtIEZvcm1hdCBkb2N1bWVudGF0aW9uIGlmIHRoZSAnbWFzdGVyJyBicmFuY2ggd2FzIHVwZGF0ZWQ7CisgICBNZXRhL2RvZG9jLnNoIHNjcmlwdCBtYXkgYWlkIHRoaXMgc3RlcC4KKworIC0gUHVzaCB0aGUgaW50ZWdyYXRpb24gYnJhbmNoZXMgb3V0IHRvIHB1YmxpYyBwbGFjZXM7IE1ldGEvcHVzaGFsbAorICAgc2NyaXB0IG1heSBhaWQgdGhpcyBzdGVwLgorCitPYnNlcnZhdGlvbnMKKy0tLS0tLS0tLS0tLQorCitTb21lIG9ic2VydmF0aW9ucyB0byBiZSBtYWRlLgorCisgKiBFYWNoIHRvcGljIGlzIHRlc3RlZCBpbmRpdmlkdWFsbHksIGFuZCBhbHNvIHRvZ2V0aGVyIHdpdGggb3RoZXIKKyAgIHRvcGljcyBjb29raW5nIGZpcnN0IGluICdwdScsIHRoZW4gaW4gJ2pjaCcgYW5kIHRoZW4gaW4gJ25leHQnLgorICAgVW50aWwgaXQgbWF0dXJlcywgbm8gcGFydCBvZiBpdCBpcyBtZXJnZWQgdG8gJ21hc3RlcicuCisKKyAqIEEgdG9waWMgYWxyZWFkeSBpbiAnbmV4dCcgY2FuIGdldCBmaXhlcyB3aGlsZSBzdGlsbCBpbgorICAgJ25leHQnLiAgU3VjaCBhIHRvcGljIHdpbGwgaGF2ZSBtYW55IG1lcmdlcyB0byAnbmV4dCcgKGluCisgICBvdGhlciB3b3JkcywgImdpdCBsb2cgLS1maXJzdC1wYXJlbnQgbmV4dCIgd2lsbCBzaG93IG1hbnkKKyAgICJNZXJnZSBicmFuY2ggJ2FpL3RvcGljJyB0byBuZXh0IiBmb3IgdGhlIHNhbWUgdG9waWMuCisKKyAqIEFuIHVub2J2aW91cyBmaXggZm9yICdtYWludCcgaXMgY29va2VkIGluICduZXh0JyBhbmQgdGhlbgorICAgbWVyZ2VkIHRvICdtYXN0ZXInIHRvIG1ha2UgZXh0cmEgc3VyZSBpdCBpcyBPayBhbmQgdGhlbgorICAgbWVyZ2VkIHRvICdtYWludCcuCisKKyAqIEV2ZW4gd2hlbiAnbmV4dCcgYmVjb21lcyBlbXB0eSAoaW4gb3RoZXIgd29yZHMsIGFsbCB0b3BpY3MKKyAgIHByb3ZlIHN0YWJsZSBhbmQgYXJlIG1lcmdlZCB0byAnbWFzdGVyJyBhbmQgImdpdCBkaWZmIG1hc3RlcgorICAgbmV4dCIgc2hvd3MgZW1wdHkpLCBpdCBoYXMgdG9ucyBvZiBtZXJnZSBjb21taXRzIHRoYXQgd2lsbAorICAgbmV2ZXIgYmUgaW4gJ21hc3RlcicuCisKKyAqIEluIHByaW5jaXBsZSwgImdpdCBsb2cgLS1maXJzdC1wYXJlbnQgbWFzdGVyLi5uZXh0IiBzaG91bGQKKyAgIHNob3cgbm90aGluZyBidXQgbWVyZ2VzIChpbiBwcmFjdGljZSwgdGhlcmUgYXJlIGZpeHVwIGNvbW1pdHMKKyAgIGFuZCByZXZlcnRzIHRoYXQgYXJlIG5vdCBtZXJnZXMpLgorCisgKiBDb21taXRzIG5lYXIgdGhlIHRpcCBvZiBhIHRvcGljIGJyYW5jaCB0aGF0IGFyZSBub3QgaW4gJ25leHQnCisgICBhcmUgZmFpciBnYW1lIHRvIGJlIGRpc2NhcmRlZCwgcmVwbGFjZWQgb3IgcmV3cml0dGVuLgorICAgQ29tbWl0cyBhbHJlYWR5IG1lcmdlZCB0byAnbmV4dCcgd2lsbCBub3QgYmUuCisKKyAqIEJlaW5nIGluIHRoZSAnbmV4dCcgYnJhbmNoIGlzIG5vdCBhIGd1YXJhbnRlZSBmb3IgYSB0b3BpYyB0bworICAgYmUgaW5jbHVkZWQgaW4gdGhlIG5leHQgZmVhdHVyZSByZWxlYXNlLiAgQmVpbmcgaW4gdGhlCisgICAnbWFzdGVyJyBicmFuY2ggdHlwaWNhbGx5IGlzLgorCisKK0FwcGVuZGl4CistLS0tLS0tLQorCitQcmVwYXJpbmcgYSAibWVyZ2UtZml4Igorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQSBtZXJnZSBvZiB0d28gdG9waWNzIG1heSBub3QgdGV4dHVhbGx5IGNvbmZsaWN0IGJ1dCBzdGlsbCBoYXZlCitjb25mbGljdCBhdCB0aGUgc2VtYW50aWMgbGV2ZWwuIEEgY2xhc3NpYyBleGFtcGxlIGlzIGZvciBvbmUgdG9waWMKK3RvIHJlbmFtZSBhbiB2YXJpYWJsZSBhbmQgYWxsIGl0cyB1c2VzLCB3aGlsZSBhbm90aGVyIHRvcGljIGFkZHMgYQorbmV3IHVzZSBvZiB0aGUgdmFyaWFibGUgdW5kZXIgaXRzIG9sZCBuYW1lLiBXaGVuIHRoZXNlIHR3byB0b3BpY3MKK2FyZSBtZXJnZWQgdG9nZXRoZXIsIHRoZSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIG5ld2x5IGFkZGVkIGJ5Cit0aGUgbGF0dGVyIHRvcGljIHdpbGwgc3RpbGwgdXNlIHRoZSBvbGQgbmFtZSBpbiB0aGUgcmVzdWx0LgorCitUaGUgTWV0YS9SZWludGVncmF0ZSBzY3JpcHQgdGhhdCBpcyB1c2VkIGJ5IHJlZG8tamNoIGFuZCByZWRvLXB1CitzY3JpcHRzIGltcGxlbWVudHMgYSBjcnVkZSBidXQgdXNhYmxlIHdheSB0byB3b3JrIHRoaXMgaXNzdWUgYXJvdW5kLgorV2hlbiB0aGUgc2NyaXB0IG1lcmdlcyBicmFuY2ggJFgsIGl0IGNoZWNrcyBpZiAicmVmcy9tZXJnZS1maXgvJFgiCitleGlzdHMsIGFuZCBpZiBzbywgdGhlIGVmZmVjdCBvZiBpdCBpcyBzcXVhc2hlZCBpbnRvIHRoZSByZXN1bHQgb2YKK3RoZSBtZWNoYW5pY2FsIG1lcmdlLiAgSW4gb3RoZXIgd29yZHMsCisKKyAgICAgJCBlY2hvICRYIHwgTWV0YS9SZWludGVncmF0ZQorCitpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdGhpcyBzZXF1ZW5jZToKKworICAgICAkIGdpdCBtZXJnZSAtLXJlcmVyZS1hdXRvdXBkYXRlICRYCisgICAgICQgZ2l0IGNvbW1pdAorICAgICAkIGdpdCBjaGVycnktcGljayAtbiByZWZzL21lcmdlLWZpeC8kWAorICAgICAkIGdpdCBjb21taXQgLS1hbWVuZAorCitUaGUgZ29hbCBvZiB0aGlzICJwcmVwYXJlIGEgbWVyZ2UtZml4IiBzdGVwIGlzIHRvIGNvbWUgdXAgd2l0aCBhCitjb21taXQgdGhhdCBjYW4gYmUgc3F1YXNoZWQgaW50byBhIHJlc3VsdCBvZiBtZWNoYW5pY2FsIG1lcmdlIHRvCitjb3JyZWN0IHNlbWFudGljIGNvbmZsaWN0cy4KKworQWZ0ZXIgZmluZGluZyB0aGF0IHRoZSByZXN1bHQgb2YgbWVyZ2luZyBicmFuY2ggImFpL3RvcGljIiB0byBhbgoraW50ZWdyYXRpb24gYnJhbmNoIGhhZCBzdWNoIGEgc2VtYW50aWMgY29uZmxpY3QsIHNheSBwdX40LCBjaGVjayB0aGUKK3Byb2JsZW1hdGljIG1lcmdlIG91dCBvbiBhIGRldGFjaGVkIEhFQUQsIGVkaXQgdGhlIHdvcmtpbmcgdHJlZSB0bworZml4IHRoZSBzZW1hbnRpYyBjb25mbGljdCwgYW5kIG1ha2UgYSBzZXBhcmF0ZSBjb21taXQgdG8gcmVjb3JkIHRoZQorZml4LXVwOgorCisgICAgICQgZ2l0IGNoZWNrb3V0IHB1fjQKKyAgICAgJCBnaXQgc2hvdyAtcyAtLXByZXR0eT0lcyA7IyBkb3VibGUgY2hlY2sKKyAgICAgTWVyZ2UgYnJhbmNoICdhaS90b3BpYycgdG8gcHUKKyAgICAgJCBlZGl0CisgICAgICQgZ2l0IGNvbW1pdCAtbSAnbWVyZ2UtZml4L2FpL3RvcGljJyAtYQorCitUaGVuIG1ha2UgYSByZWZlcmVuY2UgInJlZnMvbWVyZ2UtZml4L2FpL3RvcGljIiB0byBwb2ludCBhdCB0aGlzCityZXN1bHQ6CisKKyAgICAgJCBnaXQgdXBkYXRlLXJlZiByZWZzL21lcmdlLWZpeC9haS90b3BpYyBIRUFECisKK1RoZW4gZG91YmxlIGNoZWNrIHRoZSByZXN1bHQgYnkgYXNraW5nIE1ldGEvUmVpbnRlZ3JhdGUgdG8gcmVkbyB0aGUKK21lcmdlOgorCisgICAgICQgZ2l0IGNoZWNrb3V0IHB1fjUgOyMgdGhlIHBhcmVudCBvZiB0aGUgcHJvYmxlbSBtZXJnZQorICAgICAkIGVjaG8gYWkvdG9waWMgfCBNZXRhL1JlaW50ZWdyYXRlCisgICAgICQgZ2l0IGRpZmYgcHV+NAorCitUaGlzIHRpbWUsIGJlY2F1c2UgeW91IHByZXBhcmVkIHJlZnMvbWVyZ2UtZml4L2FpL3RvcGljLCB0aGUKK3Jlc3VsdGluZyBtZXJnZSBzaG91bGQgaGF2ZSBiZWVuIHR3ZWFrZWQgdG8gaW5jbHVkZSB0aGUgZml4IGZvciB0aGUKK3NlbWFudGljIGNvbmZsaWN0LgorCitOb3RlIHRoYXQgdGhpcyBhc3N1bWVzIHRoYXQgdGhlIG9yZGVyIGluIHdoaWNoIGNvbmZsaWN0aW5nIGJyYW5jaGVzCithcmUgbWVyZ2VkIGRvZXMgbm90IGNoYW5nZS4gIElmIHRoZSByZWFzb24gd2h5IG1lcmdpbmcgYWkvdG9waWMKK2JyYW5jaCBuZWVkcyB0aGlzIG1lcmdlLWZpeCBpcyBiZWNhdXNlIGFub3RoZXIgYnJhbmNoIG1lcmdlZCBlYXJsaWVyCit0byB0aGUgaW50ZWdyYXRpb24gYnJhbmNoIGNoYW5nZWQgdGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbiBhaS90b3BpYworYnJhbmNoIG1hZGUgKGUuZy4gYWkvdG9waWMgYnJhbmNoIGFkZGVkIGEgc2l0ZSB0byByZWZlciB0byBhCit2YXJpYWJsZSwgd2hpbGUgdGhlIG90aGVyIGJyYW5jaCByZW5hbWVkIHRoYXQgdmFyaWFibGUgYW5kIGFkanVzdGVkCitleGlzdGluZyB1c2Ugc2l0ZXMpLCBhbmQgaWYgeW91IGNoYW5nZWQgcmVkby1qY2ggKG9yIHJlZG8tcHUpIHNjcmlwdAordG8gbWVyZ2UgYWkvdG9waWMgYnJhbmNoIGJlZm9yZSB0aGUgb3RoZXIgYnJhbmNoLCB0aGVuIHRoZSBhYm92ZQorbWVyZ2UtZml4IHNob3VsZCBub3QgYmUgYXBwbGllZCB3aGlsZSBtZXJnaW5nIGFpL3RvcGljLCBidXQgc2hvdWxkCitpbnN0ZWFkIGJlIGFwcGxpZWQgd2hpbGUgbWVyZ2luZyB0aGUgb3RoZXIgYnJhbmNoLiAgWW91IHdvdWxkIG5lZWQKK3RvIG1vdmUgdGhlIGZpeCB0byBhcHBseSB0byB0aGUgb3RoZXIgYnJhbmNoLCBwZXJoYXBzIGxpa2UgdGhpczoKKworICAgICAgJCBtZj1yZWZzL21lcmdlLWZpeAorICAgICAgJCBnaXQgdXBkYXRlLXJlZiAkbWYvJHRoZV9vdGhlcl9icmFuY2ggJG1mL2FpL3RvcGljCisgICAgICAkIGdpdCB1cGRhdGUtcmVmIC1kICRtZi9haS90b3BpYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9uZXctY29tbWFuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL25ldy1jb21tYW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWE0YzgwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9uZXctY29tbWFuZC50eHQKQEAgLTAsMCArMSwxMDYgQEAKK0Zyb206IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHRoeXJzdXMuY29tPgorQWJzdHJhY3Q6IFRoaXMgaXMgaG93LXRvIGRvY3VtZW50YXRpb24gZm9yIHBlb3BsZSB3aG8gd2FudCB0byBhZGQgZXh0ZW5zaW9uCisgY29tbWFuZHMgdG8gR2l0LiAgSXQgc2hvdWxkIGJlIHJlYWQgYWxvbmdzaWRlIGFwaS1idWlsdGluLnR4dC4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gaW50ZWdyYXRlIG5ldyBzdWJjb21tYW5kcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBob3ctdG8gZG9jdW1lbnRhdGlvbiBmb3IgcGVvcGxlIHdobyB3YW50IHRvIGFkZCBleHRlbnNpb24KK2NvbW1hbmRzIHRvIEdpdC4gIEl0IHNob3VsZCBiZSByZWFkIGFsb25nc2lkZSBhcGktYnVpbHRpbi50eHQuCisKK1J1bnRpbWUgZW52aXJvbm1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IHN1YmNvbW1hbmRzIGFyZSBzdGFuZGFsb25lIGV4ZWN1dGFibGVzIHRoYXQgbGl2ZSBpbiB0aGUgR2l0IGV4ZWMKK3BhdGgsIG5vcm1hbGx5IC91c3IvbGliL2dpdC1jb3JlLiAgVGhlIGdpdCBleGVjdXRhYmxlIGl0c2VsZiBpcyBhCit0aGluIHdyYXBwZXIgdGhhdCBrbm93cyB3aGVyZSB0aGUgc3ViY29tbWFuZHMgbGl2ZSwgYW5kIHJ1bnMgdGhlbSBieQorcGFzc2luZyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRvIHRoZW0uCisKKyhJZiAiZ2l0IGZvbyIgaXMgbm90IGZvdW5kIGluIHRoZSBHaXQgZXhlYyBwYXRoLCB0aGUgd3JhcHBlcgord2lsbCBsb29rIGluIHRoZSByZXN0IG9mIHlvdXIgJFBBVEggZm9yIGl0LiAgVGh1cywgaXQncyBwb3NzaWJsZQordG8gd3JpdGUgbG9jYWwgR2l0IGV4dGVuc2lvbnMgdGhhdCBkb24ndCBsaXZlIGluIHN5c3RlbSBzcGFjZS4pCisKK0ltcGxlbWVudGF0aW9uIGxhbmd1YWdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01vc3Qgc3ViY29tbWFuZHMgYXJlIHdyaXR0ZW4gaW4gQyBvciBzaGVsbC4gIEEgZmV3IGFyZSB3cml0dGVuIGluCitQZXJsLgorCitXaGlsZSB3ZSBzdHJvbmdseSBlbmNvdXJhZ2UgY29kaW5nIGluIHBvcnRhYmxlIEMgZm9yIHBvcnRhYmlsaXR5LAordGhlc2Ugc3BlY2lmaWMgc2NyaXB0aW5nIGxhbmd1YWdlcyBhcmUgYWxzbyBhY2NlcHRhYmxlLiAgV2Ugd29uJ3QKK2FjY2VwdCBtb3JlIHdpdGhvdXQgYSB2ZXJ5IHN0cm9uZyB0ZWNobmljYWwgY2FzZSwgYXMgd2UgZG9uJ3Qgd2FudAordG8gYnJvYWRlbiB0aGUgR2l0IHN1aXRlJ3MgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAgSW1wb3J0IHV0aWxpdGllcywKK3N1cmdpY2FsIHRvb2xzLCByZW1vdGUgaGVscGVycyBhbmQgb3RoZXIgY29kZSBhdCB0aGUgZWRnZXMgb2YgdGhlCitHaXQgc3VpdGUgYXJlIG1vcmUgbGVuaWVudCBhbmQgd2UgYWxsb3cgUHl0aG9uIChhbmQgZXZlbiBUY2wvdGspLAorYnV0IHRoZXkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjb3JlIGZ1bmN0aW9ucy4KKworVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuICBFc3BlY2lhbGx5IFB5dGhvbiBpcyBub3QgYWxsb3dlZCBpbgorY29yZSBiZWNhdXNlIHdlIG5lZWQgYmV0dGVyIFB5dGhvbiBpbnRlZ3JhdGlvbiBpbiB0aGUgR2l0IFdpbmRvd3MKK2luc3RhbGxlciBiZWZvcmUgd2UgY2FuIGJlIGNvbmZpZGVudCBwZW9wbGUgaW4gdGhhdCBlbnZpcm9ubWVudAord29uJ3QgZXhwZXJpZW5jZSBhbiB1bmFjY2VwdGFibHkgbGFyZ2UgbG9zcyBvZiBjYXBhYmlsaXR5LgorCitDIGNvbW1hbmRzIGFyZSBub3JtYWxseSB3cml0dGVuIGFzIHNpbmdsZSBtb2R1bGVzLCBuYW1lZCBhZnRlciB0aGUKK2NvbW1hbmQsIHRoYXQgbGluayBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIGNhbGxlZCBsaWJnaXQuICBUaHVzLAoreW91ciBjb21tYW5kICdnaXQtZm9vJyB3b3VsZCBub3JtYWxseSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZQorImdpdC1mb28uYyIgKG9yICJidWlsdGluL2Zvby5jIiBpZiBpdCBpcyB0byBiZSBsaW5rZWQgdG8gdGhlIG1haW4KK2JpbmFyeSk7IHRoaXMgb3JnYW5pemF0aW9uIG1ha2VzIGl0IGVhc3kgZm9yIHBlb3BsZSByZWFkaW5nIHRoZSBjb2RlCit0byBmaW5kIHRoaW5ncy4KKworU2VlIHRoZSBDb2RpbmdHdWlkZWxpbmVzIGRvY3VtZW50IGZvciBvdGhlciBndWlkYW5jZSBvbiB3aGF0IHdlIGNvbnNpZGVyCitnb29kIHByYWN0aWNlIGluIEMgYW5kIHNoZWxsLCBhbmQgYXBpLWJ1aWx0aW4udHh0IGZvciB0aGUgc3VwcG9ydAorZnVuY3Rpb25zIGF2YWlsYWJsZSB0byBidWlsdC1pbiBjb21tYW5kcyB3cml0dGVuIGluIEMuCisKK1doYXQgZXZlcnkgZXh0ZW5zaW9uIGNvbW1hbmQgbmVlZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IG11c3QgaGF2ZSBhIG1hbiBwYWdlLCB3cml0dGVuIGluIGFzY2lpZG9jICh0aGlzIGlzIHdoYXQgR2l0IGhlbHAKK2ZvbGxvd2VkIGJ5IHlvdXIgc3ViY29tbWFuZCBuYW1lIHdpbGwgZGlzcGxheSkuICBCZSBhd2FyZSB0aGF0IHRoZXJlIGlzCithIGxvY2FsIGFzY2lpZG9jIGNvbmZpZ3VyYXRpb24gYW5kIG1hY3JvcyB3aGljaCB5b3Ugc2hvdWxkIHVzZS4gIEl0J3MKK29mdGVuIGhlbHBmdWwgdG8gc3RhcnQgYnkgY2xvbmluZyBhbiBleGlzdGluZyBwYWdlIGFuZCByZXBsYWNpbmcgdGhlCit0ZXh0IGNvbnRlbnQuCisKK1lvdSBtdXN0IGhhdmUgYSB0ZXN0LCB3cml0dGVuIHRvIHJlcG9ydCBpbiBUQVAgKFRlc3QgQW55dGhpbmcgUHJvdG9jb2wpLgorVGVzdHMgYXJlIGV4ZWN1dGFibGVzICh1c3VhbGx5IHNoZWxsIHNjcmlwdHMpIHRoYXQgbGl2ZSBpbiB0aGUgJ3QnCitzdWJkaXJlY3Rvcnkgb2YgdGhlIHRyZWUuICBFYWNoIHRlc3QgbmFtZSBiZWdpbnMgd2l0aCAndCcgYW5kIGEgc2VxdWVuY2UKK251bWJlciB0aGF0IGNvbnRyb2xzIHdoZXJlIGluIHRoZSB0ZXN0IHNlcXVlbmNlIGl0IHdpbGwgYmUgZXhlY3V0ZWQ7Citjb252ZW50aW9uYWxseSB0aGUgcmVzdCBvZiB0aGUgbmFtZSBzdGVtIGlzIHRoYXQgb2YgdGhlIGNvbW1hbmQKK2JlaW5nIHRlc3RlZC4KKworUmVhZCB0aGUgZmlsZSB0L1JFQURNRSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBjb252ZW50aW9ucyB0byBiZSB1c2VkCitpbiB3cml0aW5nIHRlc3RzLCBhbmQgdGhlIHRlc3Qgc3VwcG9ydCBsaWJyYXJ5LgorCitJbnRlZ3JhdGluZyBhIGNvbW1hbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlIGFyZSB0aGUgdGhpbmdzIHlvdSBuZWVkIHRvIGRvIHdoZW4geW91IHdhbnQgdG8gbWVyZ2UgYSBuZXcKK3N1YmNvbW1hbmQgaW50byB0aGUgR2l0IHRyZWUuCisKKzEuIERvbid0IGZvcmdldCB0byBzaWduIG9mZiB5b3VyIHBhdGNoIQorCisyLiBBcHBlbmQgeW91ciBjb21tYW5kIG5hbWUgdG8gb25lIG9mIHRoZSB2YXJpYWJsZXMgQlVJTFRJTl9PQkpTLAorRVhUUkFfUFJPR1JBTVMsIFNDUklQVF9TSCwgU0NSSVBUX1BFUkwgb3IgU0NSSVBUX1BZVEhPTi4KKworMy4gRHJvcCBpdHMgdGVzdCBpbiB0aGUgdCBkaXJlY3RvcnkuCisKKzQuIElmIHlvdXIgY29tbWFuZCBpcyBpbXBsZW1lbnRlZCBpbiBhbiBpbnRlcnByZXRlZCBsYW5ndWFnZSB3aXRoIGEKK3AtY29kZSBpbnRlcm1lZGlhdGUgZm9ybSwgbWFrZSBzdXJlIC5naXRpZ25vcmUgaW4gdGhlIG1haW4gZGlyZWN0b3J5CitpbmNsdWRlcyBhIHBhdHRlcm4gZW50cnkgdGhhdCBpZ25vcmVzIHN1Y2ggZmlsZXMuICBQeXRob24gLnB5YyBhbmQKKy5weW8gZmlsZXMgd2lsbCBhbHJlYWR5IGJlIGNvdmVyZWQuCisKKzUuIElmIHlvdXIgY29tbWFuZCBoYXMgYW55IGRlcGVuZGVuY3kgb24gYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YKK3lvdXIgbGFuZ3VhZ2UsIGRvY3VtZW50IGl0IGluIHRoZSBJTlNUQUxMIGZpbGUuCisKKzYuIFRoZXJlIGlzIGEgZmlsZSBjb21tYW5kLWxpc3QudHh0IGluIHRoZSBkaXN0cmlidXRpb24gbWFpbiBkaXJlY3RvcnkKK3RoYXQgY2F0ZWdvcml6ZXMgY29tbWFuZHMgYnkgdHlwZSwgc28gdGhleSBjYW4gYmUgbGlzdGVkIGluIGFwcHJvcHJpYXRlCitzdWJzZWN0aW9ucyBpbiB0aGUgZG9jdW1lbnRhdGlvbidzIHN1bW1hcnkgY29tbWFuZCBsaXN0LiAgQWRkIGFuIGVudHJ5Citmb3IgeW91cnMuICBUbyB1bmRlcnN0YW5kIHRoZSBjYXRlZ29yaWVzLCBsb29rIGF0IGNvbW1hbmQtbGlzdC50eHQKK2luIHRoZSBtYWluIGRpcmVjdG9yeS4gIElmIHRoZSBuZXcgY29tbWFuZCBpcyBwYXJ0IG9mIHRoZSB0eXBpY2FsIEdpdAord29ya2Zsb3cgYW5kIHlvdSBiZWxpZXZlIGl0IGNvbW1vbiBlbm91Z2ggdG8gYmUgbWVudGlvbmVkIGluICdnaXQgaGVscCcsCittYXAgdGhpcyBjb21tYW5kIHRvIGEgY29tbW9uIGdyb3VwIGluIHRoZSBjb2x1bW4gW2NvbW1vbl0uCisKKzcuIEdpdmUgdGhlIG1haW50YWluZXIgb25lIHBhcmFncmFwaCB0byBpbmNsdWRlIGluIHRoZSBSZWxOb3RlcyBmaWxlCit0byBkZXNjcmliZSB0aGUgbmV3IGZlYXR1cmU7IGEgZ29vZCBwbGFjZSB0byBkbyBzbyBpcyBpbiB0aGUgY292ZXIKK2xldHRlciBbUEFUQ0ggMC9uXS4KKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmViYXNlLWZyb20taW50ZXJuYWwtYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmViYXNlLWZyb20taW50ZXJuYWwtYnJhbmNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmNiNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0CkBAIC0wLDAgKzEsMTY0IEBACitGcm9tOglKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitUbzoJZ2l0QHZnZXIua2VybmVsLm9yZworQ2M6CVBldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PiwgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorU3ViamVjdDogUmU6IHNlbmRpbmcgY2hhbmdlc2V0cyBmcm9tIHRoZSBtaWRkbGUgb2YgYSBnaXQgdHJlZQorRGF0ZToJU3VuLCAxNCBBdWcgMjAwNSAxODozNzozOSAtMDcwMAorQWJzdHJhY3Q6IEluIHRoaXMgYXJ0aWNsZSwgSkMgdGFsa3MgYWJvdXQgaG93IGhlIHJlYmFzZXMgdGhlCisgcHVibGljICJwdSIgYnJhbmNoIHVzaW5nIHRoZSBjb3JlIEdpdCB0b29scyB3aGVuIGhlIHVwZGF0ZXMKKyB0aGUgIm1hc3RlciIgYnJhbmNoLCBhbmQgaG93ICJyZWJhc2UiIHdvcmtzLiAgQWxzbyBkaXNjdXNzZWQKKyBpcyBob3cgdGhpcyBhcHBsaWVzIHRvIGluZGl2aWR1YWwgZGV2ZWxvcGVycyB3aG8gc2VuZHMgcGF0Y2hlcworIHVwc3RyZWFtLgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byByZWJhc2UgZnJvbSBhbiBpbnRlcm5hbCBicmFuY2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PiB3cml0ZXM6CisKKz4gRGVhciBkaWFyeSwgb24gU3VuLCBBdWcgMTQsIDIwMDUgYXQgMDk6NTc6MTNBTSBDRVNULCBJIGdvdCBhIGxldHRlcgorPiB3aGVyZSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+IHRvbGQgbWUgdGhhdC4uLgorPj4gTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiB3cml0ZXM6Cis+PgorPj4gPiBKdW5pbywgbWF5YmUgeW91IHdhbnQgdG8gdGFsayBhYm91dCBob3cgeW91IG1vdmUgcGF0Y2hlcyBmcm9tIHlvdXIgInB1IgorPj4gPiBicmFuY2ggdG8gdGhlIHJlYWwgYnJhbmNoZXMuCis+PgorPiBBY3R1YWxseSwgd291bGRuJ3QgdGhpcyBiZSBhbHNvIHByZWNpc2VseSBmb3Igd2hhdCBTdEdJVCBpcyBpbnRlbmRlZCB0bz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4YWN0bHkgbXkgZmVlbGluZy4gIEkgd2FzIHNvcnQgb2Ygd2FpdGluZyBmb3IgQ2F0YWxpbiB0byBzcGVhawordXAuICBXaXRoIGl0cyBiYXNpbmcgcGhpbG9zb3BoaWNhbCBhbmNlc3RyeSBvbiBxdWlsdCwgdGhpcyBpcwordGhlIGtpbmQgb2YgdGFzayBTdEdJVCBpcyBkZXNpZ25lZCB0byBkby4KKworSSBqdXN0IGhhdmUgZG9uZSBhIHNpbXBsZXIgb25lLCB0aGlzIHRpbWUgdXNpbmcgb25seSB0aGUgY29yZQorR2l0IHRvb2xzLgorCitJIGhhZCBhIGhhbmRmdWwgb2YgY29tbWl0cyB0aGF0IHdlcmUgYWhlYWQgb2YgbWFzdGVyIGluIHB1LCBhbmQgSQord2FudGVkIHRvIGFkZCBzb21lIGRvY3VtZW50YXRpb24gYnlwYXNzaW5nIG15IHVzdWFsIGhhYml0IG9mCitwbGFjaW5nIG5ldyB0aGluZ3MgaW4gcHUgZmlyc3QuICBBdCB0aGUgYmVnaW5uaW5nLCB0aGUgY29tbWl0CithbmNlc3RyeSBncmFwaCBsb29rZWQgbGlrZSB0aGlzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoicHUiIGhlYWQKKyAgICBtYXN0ZXIgLS0+ICMxIC0tPiAjMiAtLT4gIzMKKworU28gSSBzdGFydGVkIGZyb20gbWFzdGVyLCBtYWRlIGEgYnVuY2ggb2YgZWRpdHMsIGFuZCBjb21taXR0ZWQ6CisKKyAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIKKyAgICAkIGNkIERvY3VtZW50YXRpb247IGVkIGdpdC50eHQgLi4uCisgICAgJCBjZCAuLjsgZ2l0IGFkZCBEb2N1bWVudGF0aW9uLyoudHh0CisgICAgJCBnaXQgY29tbWl0IC1zCisKK0FmdGVyIHRoZSBjb21taXQsIHRoZSBhbmNlc3RyeSBncmFwaCB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiJwdSIgaGVhZAorICAgIG1hc3Rlcl4gLS0+ICMxIC0tPiAjMiAtLT4gIzMKKyAgICAgICAgICBcCisgICAgICAgICAgICBcLS0tPiBtYXN0ZXIKKworVGhlIG9sZCBtYXN0ZXIgaXMgbm93IG1hc3Rlcl4gKHRoZSBmaXJzdCBwYXJlbnQgb2YgdGhlIG1hc3RlcikuCitUaGUgbmV3IG1hc3RlciBjb21taXQgaG9sZHMgbXkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCitOb3cgSSBoYXZlIHRvIGRlYWwgd2l0aCAicHUiIGJyYW5jaC4KKworVGhpcyBpcyB0aGUga2luZCBvZiBzaXR1YXRpb24gSSB1c2VkIHRvIGhhdmUgYWxsIHRoZSB0aW1lIHdoZW4KK0xpbnVzIHdhcyB0aGUgbWFpbnRhaW5lciBhbmQgSSB3YXMgYSBjb250cmlidXRvciwgd2hlbiB5b3UgbG9vaworYXQgIm1hc3RlciIgYnJhbmNoIGJlaW5nIHRoZSAibWFpbnRhaW5lciIgYnJhbmNoLCBhbmQgInB1IgorYnJhbmNoIGJlaW5nIHRoZSAiY29udHJpYnV0b3IiIGJyYW5jaC4gIFlvdXIgd29yayBzdGFydGVkIGF0IHRoZQordGlwIG9mIHRoZSAibWFpbnRhaW5lciIgYnJhbmNoIHNvbWUgdGltZSBhZ28sIHlvdSBtYWRlIGEgbG90IG9mCitwcm9ncmVzcyBpbiB0aGUgbWVhbnRpbWUsIGFuZCBub3cgdGhlIG1haW50YWluZXIgYnJhbmNoIGhhcyBzb21lCitvdGhlciBjb21taXRzIHlvdSBkbyBub3QgaGF2ZSB5ZXQuICBBbmQgImdpdCByZWJhc2UiIHdhcyB3cml0dGVuCit3aXRoIHRoZSBleHBsaWNpdCBwdXJwb3NlIG9mIGhlbHBpbmcgdG8gbWFpbnRhaW4gYnJhbmNoZXMgbGlrZQorInB1Ii4gIFlvdSBfY291bGRfIG1lcmdlIG1hc3RlciB0byBwdSBhbmQga2VlcCBnb2luZywgYnV0IGlmIHlvdQorZXZlbnR1YWxseSB3YW50IHRvIGNoZXJyeXBpY2sgYW5kIG1lcmdlIHNvbWUgYnV0IG5vdCBuZWNlc3NhcmlseQorYWxsIGNoYW5nZXMgYmFjayB0byB0aGUgbWFzdGVyIGJyYW5jaCwgaXQgb2Z0ZW4gbWFrZXMgbGF0ZXIKK29wZXJhdGlvbnMgZm9yIF95b3VfIGVhc2llciBpZiB5b3UgcmViYXNlIChpLmUuIGNhcnJ5IGZvcndhcmQKK3lvdXIgY2hhbmdlcykgInB1IiByYXRoZXIgdGhhbiBtZXJnZS4gIFNvIEkgcmFuICJnaXQgcmViYXNlIjoKKworICAgICQgZ2l0IGNoZWNrb3V0IHB1CisgICAgJCBnaXQgcmViYXNlIG1hc3RlciBwdQorCitXaGF0IHRoaXMgZG9lcyBpcyB0byBwaWNrIGFsbCB0aGUgY29tbWl0cyBzaW5jZSB0aGUgY3VycmVudAorYnJhbmNoIChub3RlIHRoYXQgSSBub3cgYW0gb24gInB1IiBicmFuY2gpIGZvcmtlZCBmcm9tIHRoZQorbWFzdGVyIGJyYW5jaCwgYW5kIGZvcndhcmQgcG9ydCB0aGVzZSBjaGFuZ2VzLgorCisgICAgbWFzdGVyXiAtLT4gIzEgLS0+ICMyIC0tPiAjMworICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiJwdSIgaGVhZAorICAgICAgICAgICAgXC0tLT4gbWFzdGVyIC0tPiAjMScgLS0+ICMyJyAtLT4gIzMnCisKK1RoZSBkaWZmIGJldHdlZW4gbWFzdGVyXiBhbmQgIzEgaXMgYXBwbGllZCB0byBtYXN0ZXIgYW5kCitjb21taXR0ZWQgdG8gY3JlYXRlICMxJyBjb21taXQgd2l0aCB0aGUgY29tbWl0IGluZm9ybWF0aW9uIChsb2csCithdXRob3IgYW5kIGRhdGUpIHRha2VuIGZyb20gY29tbWl0ICMxLiAgT24gdG9wIG9mIHRoYXQgIzInIGFuZCAjMycKK2NvbW1pdHMgYXJlIG1hZGUgc2ltaWxhcmx5IG91dCBvZiAjMiBhbmQgIzMgY29tbWl0cy4KKworT2xkICMzIGlzIG5vdCByZWNvcmRlZCBpbiBhbnkgb2YgdGhlIC5naXQvcmVmcy9oZWFkcy8gZmlsZQorYW55bW9yZSwgc28gYWZ0ZXIgZG9pbmcgdGhpcyB5b3Ugd2lsbCBoYXZlIGRhbmdsaW5nIGNvbW1pdCBpZgoreW91IHJhbiBmc2NrLWNhY2hlLCB3aGljaCBpcyBub3JtYWwuICBBZnRlciB0ZXN0aW5nICJwdSIsIHlvdQorY2FuIHJ1biAiZ2l0IHBydW5lIiB0byBnZXQgcmlkIG9mIHRob3NlIG9yaWdpbmFsIHRocmVlIGNvbW1pdHMuCisKK1doaWxlIEkgYW0gdGFsa2luZyBhYm91dCAiZ2l0IHJlYmFzZSIsIEkgc2hvdWxkIHRhbGsgYWJvdXQgaG93Cit0byBkbyBjaGVycnlwaWNraW5nIHVzaW5nIG9ubHkgdGhlIGNvcmUgR2l0IHRvb2xzLgorCitMZXQncyBnbyBiYWNrIHRvIHRoZSBlYXJsaWVyIHBpY3R1cmUsIHdpdGggZGlmZmVyZW50IGxhYmVscy4KKworWW91LCBhcyBhbiBpbmRpdmlkdWFsIGRldmVsb3BlciwgY2xvbmVkIHVwc3RyZWFtIHJlcG9zaXRvcnkgYW5kCittYWRlIGEgY291cGxlIG9mIGNvbW1pdHMgb24gdG9wIG9mIGl0LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqeW91ciAibWFzdGVyIiBoZWFkCisgICB1cHN0cmVhbSAtLT4gIzEgLS0+ICMyIC0tPiAjMworCitZb3Ugd291bGQgd2FudCBjaGFuZ2VzICMyIGFuZCAjMyBpbmNvcnBvcmF0ZWQgaW4gdGhlIHVwc3RyZWFtLAord2hpbGUgeW91IGZlZWwgdGhhdCAjMSBtYXkgbmVlZCBmdXJ0aGVyIGltcHJvdmVtZW50cy4gIFNvIHlvdQorcHJlcGFyZSAjMiBhbmQgIzMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uLgorCisgICAgJCBnaXQgZm9ybWF0LXBhdGNoIG1hc3Rlcl5eIG1hc3RlcgorCitUaGlzIGNyZWF0ZXMgdHdvIGZpbGVzLCAwMDAxLVhYWFgucGF0Y2ggYW5kIDAwMDItWFhYWC5wYXRjaC4gIFNlbmQKK3RoZW0gb3V0ICJUbzogIiB5b3VyIHByb2plY3QgbWFpbnRhaW5lciBhbmQgIkNjOiAiIHlvdXIgbWFpbGluZworbGlzdC4gIFlvdSBjb3VsZCB1c2UgY29udHJpYnV0ZWQgc2NyaXB0IGdpdC1zZW5kLWVtYWlsIGlmCit5b3VyIGhvc3QgaGFzIG5lY2Vzc2FyeSBwZXJsIG1vZHVsZXMgZm9yIHRoaXMsIGJ1dCB5b3VyIHVzdWFsCitNVUEgd291bGQgZG8gYXMgbG9uZyBhcyBpdCBkb2VzIG5vdCBjb3JydXB0IHdoaXRlc3BhY2VzIGluIHRoZQorcGF0Y2guCisKK1RoZW4geW91IHdvdWxkIHdhaXQsIGFuZCB5b3UgZmluZCBvdXQgdGhhdCB0aGUgdXBzdHJlYW0gcGlja2VkCit1cCB5b3VyIGNoYW5nZXMsIGFsb25nIHdpdGggb3RoZXIgY2hhbmdlcy4KKworICAgd2hlcmUgICAgICAgICAgICAgICAgICAgICAgKnlvdXIgIm1hc3RlciIgaGVhZAorICB1cHN0cmVhbSAtLT4gIzEgLS0+ICMyIC0tPiAjMworICAgIHVzZWQgICBcCisgICB0byBiZSAgICAgXC0tPiAjQSAtLT4gIzInIC0tPiAjMycgLS0+ICNCIC0tPiAjQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVwc3RyZWFtIGhlYWQKKworVGhlIHR3byBjb21taXRzICMyJyBhbmQgIzMnIGluIHRoZSBhYm92ZSBwaWN0dXJlIHJlY29yZCB0aGUgc2FtZQorY2hhbmdlcyB5b3VyIGUtbWFpbCBzdWJtaXNzaW9uIGZvciAjMiBhbmQgIzMgY29udGFpbmVkLCBidXQKK3Byb2JhYmx5IHdpdGggdGhlIG5ldyBzaWduLW9mZiBsaW5lIGFkZGVkIGJ5IHRoZSB1cHN0cmVhbQorbWFpbnRhaW5lciBhbmQgZGVmaW5pdGVseSB3aXRoIGRpZmZlcmVudCBjb21taXR0ZXIgYW5kIGFuY2VzdHJ5CitpbmZvcm1hdGlvbiwgdGhleSBhcmUgZGlmZmVyZW50IG9iamVjdHMgZnJvbSAjMiBhbmQgIzMgY29tbWl0cy4KKworWW91IGZldGNoIGZyb20gdXBzdHJlYW0sIGJ1dCBub3QgbWVyZ2UuCisKKyAgICAkIGdpdCBmZXRjaCB1cHN0cmVhbQorCitUaGlzIGxlYXZlcyB0aGUgdXBkYXRlZCB1cHN0cmVhbSBoZWFkIGluIC5naXQvRkVUQ0hfSEVBRCBidXQKK2RvZXMgbm90IHRvdWNoIHlvdXIgLmdpdC9IRUFEIG9yIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIuCitZb3UgcnVuICJnaXQgcmViYXNlIiBub3cuCisKKyAgICAkIGdpdCByZWJhc2UgRkVUQ0hfSEVBRCBtYXN0ZXIKKworRWFybGllciwgSSBzYWlkIHRoYXQgcmViYXNlIGFwcGxpZXMgYWxsIHRoZSBjb21taXRzIGZyb20geW91cgorYnJhbmNoIG9uIHRvcCBvZiB0aGUgdXBzdHJlYW0gaGVhZC4gIFdlbGwsIEkgbGllZC4gICJnaXQgcmViYXNlIgoraXMgYSBiaXQgc21hcnRlciB0aGFuIHRoYXQgYW5kIG5vdGljZXMgdGhhdCAjMiBhbmQgIzMgbmVlZCBub3QKK2JlIGFwcGxpZWQsIHNvIGl0IG9ubHkgYXBwbGllcyAjMS4gIFRoZSBjb21taXQgYW5jZXN0cnkgZ3JhcGgKK2JlY29tZXMgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgd2hlcmUgICAgICAgICAgICAgICAgICAgICAqeW91ciBvbGQgIm1hc3RlciIgaGVhZAorICB1cHN0cmVhbSAtLT4gIzEgLS0+ICMyIC0tPiAjMworICAgIHVzZWQgICBcICAgICAgICAgICAgICAgICAgICAgIHlvdXIgbmV3ICJtYXN0ZXIiIGhlYWQqCisgICB0byBiZSAgICAgXC0tPiAjQSAtLT4gIzInIC0tPiAjMycgLS0+ICNCIC0tPiAjQyAtLT4gIzEnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQKKworQWdhaW4sICJnaXQgcHJ1bmUiIHdvdWxkIGRpc2NhcmQgdGhlIGRpc3VzZWQgY29tbWl0cyAjMS0jMyBhbmQKK3lvdSBjb250aW51ZSBvbiBzdGFydGluZyBmcm9tIHRoZSBuZXcgIm1hc3RlciIgaGVhZCwgd2hpY2ggaXMKK3RoZSAjMScgY29tbWl0LgorCistamMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmVidWlsZC1mcm9tLXVwZGF0ZS1ob29rLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmVidWlsZC1mcm9tLXVwZGF0ZS1ob29rLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjIxOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sudHh0CkBAIC0wLDAgKzEsOTAgQEAKK1N1YmplY3Q6IFtIT1dUT10gVXNpbmcgcG9zdC11cGRhdGUgaG9vaworTWVzc2FnZS1JRDogPDd2eTg2bzZ1c3guZnNmQGFzc2lnbmVkLWJ5LWRoY3AuY294Lm5ldD4KK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK0RhdGU6IEZyaSwgMjYgQXVnIDIwMDUgMTg6MTk6MTAgLTA3MDAKK0Fic3RyYWN0OiBJbiB0aGlzIGhvdy10byBhcnRpY2xlLCBKQyB0YWxrcyBhYm91dCBob3cgaGUKKyB1c2VzIHRoZSBwb3N0LXVwZGF0ZSBob29rIHRvIGF1dG9tYXRlIEdpdCBkb2N1bWVudGF0aW9uIHBhZ2UKKyBzaG93biBhdCBodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvLgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byByZWJ1aWxkIGZyb20gdXBkYXRlIGhvb2sKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHBhZ2VzIHVuZGVyIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8KK2FyZSBidWlsdCBmcm9tIERvY3VtZW50YXRpb24vIGRpcmVjdG9yeSBvZiB0aGUgZ2l0LmdpdCBwcm9qZWN0CithbmQgbmVlZGVkIHRvIGJlIGtlcHQgdXAtdG8tZGF0ZS4gIFRoZSB3d3cua2VybmVsLm9yZy8gc2VydmVycworYXJlIG1pcnJvcmVkIGFuZCBJIHdhcyB0b2xkIHRoYXQgdGhlIG9yaWdpbiBvZiB0aGUgbWlycm9yIGlzIG9uCit0aGUgbWFjaGluZSAkc29tZS5rZXJuZWwub3JnLCBvbiB3aGljaCBJIHdhcyBnaXZlbiBhbiBhY2NvdW50Cit3aGVuIEkgdG9vayBvdmVyIEdpdCBtYWludGFpbmVyc2hpcCBmcm9tIExpbnVzLgorCitUaGUgZGlyZWN0b3JpZXMgcmVsZXZhbnQgdG8gdGhpcyBob3ctdG8gYXJlIHRoZXNlIHR3bzoKKworICAgIC9wdWIvc2NtL2dpdC9naXQuZ2l0LwlUaGUgcHVibGljIEdpdCByZXBvc2l0b3J5LgorICAgIC9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLwlUaGUgSFRNTCBkb2N1bWVudGF0aW9uIHBhZ2UuCisKK1NvIEkgbWFkZSBhIHJlcG9zaXRvcnkgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24gdW5kZXIgbXkKK2hvbWUgZGlyZWN0b3J5IG92ZXIgdGhlcmUuCisKKyAgICAkIGNkCisgICAgJCBta2RpciBkb2MtZ2l0ICYmIGNkIGRvYy1naXQKKyAgICAkIGdpdCBjbG9uZSAvcHViL3NjbS9naXQvZ2l0LmdpdC8gZG9jZ2VuCisKK1doYXQgbmVlZHMgdG8gaGFwcGVuIGlzIHRvIHVwZGF0ZSB0aGUgJEhPTUUvZG9jLWdpdC9kb2NnZW4vCit3b3JraW5nIHRyZWUsIGJ1aWxkIEhUTUwgZG9jcyB0aGVyZSBhbmQgaW5zdGFsbCB0aGUgcmVzdWx0IGluCisvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8gZGlyZWN0b3J5LiAgU28gSSB3cm90ZSBhIGxpdHRsZQorc2NyaXB0OgorCisgICAgJCBjYXQgPmRvZG9kb2Muc2ggPDxcRU9GCisgICAgIyEvYmluL3NoCisgICAgY2QgJEhPTUUvZG9jLWdpdC9kb2NnZW4gfHwgZXhpdAorCisgICAgdW5zZXQgR0lUX0RJUgorCisgICAgZ2l0IHB1bGwgL3B1Yi9zY20vZ2l0L2dpdC5naXQvIG1hc3RlciAmJgorICAgIGNkIERvY3VtZW50YXRpb24gJiYKKyAgICBtYWtlIGluc3RhbGwtd2ViZG9jCisgICAgRU9GCisKK0luaXRpYWxseSBJIHVzZWQgdG8gcnVuIHRoaXMgYnkgaGFuZCB3aGVuZXZlciBJIHB1c2ggaW50byB0aGUKK3B1YmxpYyBHaXQgcmVwb3NpdG9yeS4gIFRoZW4gSSBkaWQgYSBjcm9uIGpvYiB0aGF0IHJhbiB0d2ljZSBhCitkYXkuICBUaGUgY3VycmVudCByb3VuZCB1c2VzIHRoZSBwb3N0LXVwZGF0ZSBob29rIG1lY2hhbmlzbSwKK2xpa2UgdGhpczoKKworICAgICQgY2F0ID4vcHViL3NjbS9naXQvZ2l0LmdpdC9ob29rcy9wb3N0LXVwZGF0ZSA8PFxFT0YKKyAgICAjIS9iaW4vc2gKKyAgICAjCisgICAgIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHByZXBhcmUgYSBwYWNrZWQgcmVwb3NpdG9yeSBmb3IgdXNlIG92ZXIKKyAgICAjIGR1bWIgdHJhbnNwb3J0cy4KKyAgICAjCisgICAgIyBUbyBlbmFibGUgdGhpcyBob29rLCBtYWtlIHRoaXMgZmlsZSBleGVjdXRhYmxlIGJ5ICJjaG1vZCAreCBwb3N0LXVwZGF0ZSIuCisKKyAgICBjYXNlICIgJCogIiBpbgorICAgIConIHJlZnMvaGVhZHMvbWFzdGVyICcqKQorICAgICAgICAgICAgZWNobyAkSE9NRS9kb2MtZ2l0L2RvZG9kb2Muc2ggfCBhdCBub3cKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworICAgIGV4ZWMgZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbworICAgIEVPRgorICAgICQgY2htb2QgK3ggL3B1Yi9zY20vZ2l0L2dpdC5naXQvaG9va3MvcG9zdC11cGRhdGUKKworVGhlcmUgYXJlIGZvdXIgdGhpbmdzIHdvcnRoIG1lbnRpb25pbmc6CisKKyAtIFRoZSB1cGRhdGUtaG9vayBpcyBydW4gYWZ0ZXIgdGhlIHJlcG9zaXRvcnkgYWNjZXB0cyBhICJnaXQKKyAgIHB1c2giLCB1bmRlciBteSB1c2VyIHByaXZpbGVnZS4gIEl0IGlzIGdpdmVuIHRoZSBmdWxsIG5hbWVzCisgICBvZiByZWZzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQgYXMgYXJndW1lbnRzLiAgTXkgcG9zdC11cGRhdGUKKyAgIHJ1bnMgdGhlIGRvZG9kb2Muc2ggc2NyaXB0IG9ubHkgd2hlbiB0aGUgbWFzdGVyIGhlYWQgaXMKKyAgIHVwZGF0ZWQuCisKKyAtIFdoZW4gdXBkYXRlLWhvb2sgaXMgcnVuLCBHSVRfRElSIGlzIHNldCB0byAnLicgYnkgdGhlIGNhbGxpbmcKKyAgIHJlY2VpdmUtcGFjay4gIFRoaXMgaXMgaW5oZXJpdGVkIGJ5IHRoZSBkb2RvZG9jLnNoIHJ1biB2aWEKKyAgIHRoZSAiYXQiIGNvbW1hbmQsIGFuZCBuZWVkcyB0byBiZSB1bnNldDsgb3RoZXJ3aXNlLCAiZ2l0CisgICBwdWxsIiBpdCBkb2VzIGludG8gJEhPTUUvZG9jLWdpdC9kb2NnZW4vIHJlcG9zaXRvcnkgd291bGQgbm90CisgICB3b3JrIGNvcnJlY3RseS4KKworIC0gVGhlIHN0ZG91dCBvZiB1cGRhdGUgaG9vayBzY3JpcHQgaXMgbm90IGNvbm5lY3RlZCB0byBnaXQKKyAgIHB1c2g7IEkgcnVuIHRoZSBoZWF2eSBwYXJ0IG9mIHRoZSBjb21tYW5kIGluc2lkZSAiYXQiLCB0bworICAgcmVjZWl2ZSB0aGUgZXhlY3V0aW9uIHJlcG9ydCB2aWEgZS1tYWlsLgorCisgLSBUaGlzIGlzIHN0aWxsIGNydWRlIGFuZCBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3Qgc2ltdWx0YW5lb3VzCisgICBtYWtlIGludm9jYXRpb25zIHN0b21waW5nIG9uIGVhY2ggb3RoZXIuICBJIHdvdWxkIG5lZWQgdG8gYWRkCisgICBzb21lIGxvY2tpbmcgbWVjaGFuaXNtIGZvciB0aGlzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1ibG9iLW9iamVjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlY292ZXItY29ycnVwdGVkLWJsb2Itb2JqZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNiMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1ibG9iLW9iamVjdC50eHQKQEAgLTAsMCArMSwxNDQgQEAKK0RhdGU6IEZyaSwgOSBOb3YgMjAwNyAwODoyODozOCAtMDgwMCAoUFNUKQorRnJvbTogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorU3ViamVjdDogY29ycnVwdCBvYmplY3Qgb24gZ2l0LWdjCitBYnN0cmFjdDogU29tZSB0cmlja3MgdG8gcmVjb25zdHJ1Y3QgYmxvYiBvYmplY3RzIGluIG9yZGVyIHRvIGZpeAorIGEgY29ycnVwdGVkIHJlcG9zaXRvcnkuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHJlY292ZXIgYSBjb3JydXB0ZWQgYmxvYiBvYmplY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPbiBGcmksIDkgTm92IDIwMDcsIFlvc3NpIExleWJvdmljaCB3cm90ZToKKz4KKz4gRGlkIG5vdCBoZWxwIHN0aWxsIHRoZSByZXBvc2l0b3J5IGxvb2sgZm9yIHRoaXMgb2JqZWN0PworPiBBbnkgb25lIGtub3cgaG93IGNhbiBJIHRyYWNrIHRoaXMgb2JqZWN0IGFuZCB1bmRlcnN0YW5kIHdoaWNoIGZpbGUgaXMgaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvIGV4YWN0bHkgKmJlY2F1c2UqIHRoZSBTSEEtMSBoYXNoIGlzIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSwgdGhlIGhhc2gKK2l0c2VsZiBkb2Vzbid0IGFjdHVhbGx5IHRlbGwgeW91IGFueXRoaW5nLCBpbiBvcmRlciB0byBmaXggYSBjb3JydXB0CitvYmplY3QgeW91IGJhc2ljYWxseSBoYXZlIHRvIGZpbmQgdGhlICJvcmlnaW5hbCBzb3VyY2UiIGZvciBpdC4KKworVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgaXMgYWxtb3N0IGFsd2F5cyB0byBoYXZlIGJhY2t1cHMsIGFuZCBmaW5kIHRoZQorc2FtZSBvYmplY3Qgc29tZXdoZXJlIGVsc2UuIEJhY2t1cHMgcmVhbGx5IGFyZSBhIGdvb2QgaWRlYSwgYW5kIEdpdCBtYWtlcworaXQgcHJldHR5IGVhc3kgKGlmIG5vdGhpbmcgZWxzZSwganVzdCBjbG9uZSB0aGUgcmVwb3NpdG9yeSBzb21ld2hlcmUgZWxzZSwKK2FuZCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gKm5vdCogdXNlIGEgaGFyZC1saW5rZWQgY2xvbmUsIGFuZCBwcmVmZXJhYmx5Citub3QgdGhlIHNhbWUgZGlzay9tYWNoaW5lKS4KKworQnV0IHNpbmNlIHlvdSBkb24ndCBzZWVtIHRvIGhhdmUgYmFja3VwcyByaWdodCBub3csIHRoZSBnb29kIG5ld3MgaXMgdGhhdAorZXNwZWNpYWxseSB3aXRoIGEgc2luZ2xlIGJsb2IgYmVpbmcgY29ycnVwdCwgdGhlc2UgdGhpbmdzICphcmUqIHNvbWV3aGF0CitkZWJ1Z2dhYmxlLgorCitGaXJzdCBvZmYsIG1vdmUgdGhlIGNvcnJ1cHQgb2JqZWN0IGF3YXksIGFuZCAqc2F2ZSogaXQuIFRoZSBtb3N0IGNvbW1vbgorY2F1c2Ugb2YgY29ycnVwdGlvbiBzbyBmYXIgaGFzIGJlZW4gbWVtb3J5IGNvcnJ1cHRpb24sIGJ1dCBldmVuIHNvLCB0aGVyZQorYXJlIHBlb3BsZSB3aG8gd291bGQgYmUgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGNvcnJ1cHRpb24gLSBidXQgaXQncworYmFzaWNhbGx5IGltcG9zc2libGUgdG8ganVkZ2UgdGhlIGNvcnJ1cHRpb24gdW50aWwgd2UgY2FuIGFsc28gc2VlIHRoZQorb3JpZ2luYWwgb2JqZWN0LCBzbyByaWdodCBub3cgdGhlIGNvcnJ1cHQgb2JqZWN0IGlzIHVzZWxlc3MsIGJ1dCBpdCdzIHZlcnkKK2ludGVyZXN0aW5nIGZvciB0aGUgZnV0dXJlLCBpbiB0aGUgaG9wZSB0aGF0IHlvdSBjYW4gcmUtY3JlYXRlIGEKK25vbi1jb3JydXB0IHZlcnNpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTbzoKKworPiBpYl0kIG12IC5naXQvb2JqZWN0cy80Yi85NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMCAuLi8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBhbHRob3VnaCBpdCdzIHVzdWFsbHkgYmVzdCB0byBzYXZlIGl0IHVuZGVyCitpdCdzIGZ1bGwgU0hBLTEgbmFtZSAoeW91IGp1c3QgZHJvcHBlZCB0aGUgIjRiIiBmcm9tIHRoZSByZXN1bHQgOykuCisKK0xldCdzIHNlZSB3aGF0IHRoYXQgdGVsbHMgdXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis+IGliXSQgZ2l0LWZzY2sgLS1mdWxsCis+IGJyb2tlbiBsaW5rIGZyb20gICAgdHJlZSAyZDkyNjNjNmQyMzU5NWU3Y2IyYTIxZTVlYmJiNTM2NTUyNzhkZmY4Cis+ICAgICAgICAgICAgICB0byAgICBibG9iIDRiOTQ1OGIzNzg2MjI4MzY5YzYzOTM2ZGI2NTgyN2RlM2NjMDYyMDAKKz4gbWlzc2luZyBibG9iIDRiOTQ1OGIzNzg2MjI4MzY5YzYzOTM2ZGI2NTgyN2RlM2NjMDYyMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09rLCBJIHJlbW92ZWQgdGhlICJkYW5nbGluZyBjb21taXQiIG1lc3NhZ2VzLCBiZWNhdXNlIHRoZXkgYXJlIGp1c3QKK21lc3NhZ2VzIGFib3V0IHRoZSBmYWN0IHRoYXQgeW91IHByb2JhYmx5IGhhdmUgcmViYXNlZCBldGMsIHNvIHRoZXkncmUgbm90CithdCBhbGwgaW50ZXJlc3RpbmcuIEJ1dCB3aGF0IHJlbWFpbnMgaXMgc3RpbGwgdmVyeSB1c2VmdWwuIEluIHBhcnRpY3VsYXIsCit3ZSBub3cga25vdyB3aGljaCB0cmVlIHBvaW50cyB0byBpdCEKKworTm93IHlvdSBjYW4gZG8KKworCWdpdCBscy10cmVlIDJkOTI2M2M2ZDIzNTk1ZTdjYjJhMjFlNWViYmI1MzY1NTI3OGRmZjgKKword2hpY2ggd2lsbCBzaG93IHNvbWV0aGluZyBsaWtlCisKKwkxMDA2NDQgYmxvYiA4ZDE0NTMxODQ2Yjk1YmZhMzU2NGI1OGNjZmI3OTEzYTAzNDMyM2I4ICAgIC5naXRpZ25vcmUKKwkxMDA2NDQgYmxvYiBlYmY5YmY4NGRhMGFhYjVlZDk0NDI2NGE1ZGIyYTY1ZmUzYTNlODgzICAgIC5tYWlsbWFwCisJMTAwNjQ0IGJsb2IgY2E0NDJkMzEzZDg2ZGM2N2UwYTJlNWQ1ODRiNDY1YmQzODJjYmY1YyAgICBDT1BZSU5HCisJMTAwNjQ0IGJsb2IgZWU5MDlmMmNjNDllNTRmMDc5OWE0NzM5ZDI0YzRjYjkxNTFhZTQ1MyAgICBDUkVESVRTCisJMDQwMDAwIHRyZWUgMGY1ZjcwOWMxN2FkODllNzJiZGJiZWY2ZWEyMjFjNjk4MDcwMDlmNiAgICBEb2N1bWVudGF0aW9uCisJMTAwNjQ0IGJsb2IgMTU3MGQyNDhhZDkyMzdlNGZhNmU0ZDA3OTMzNmI5ZGE2MmQ5YmEzMiAgICBLYnVpbGQKKwkxMDA2NDQgYmxvYiAxYzdjMjI5YTA5MjY2NWIxMWNkNDZhMjVkYmQ0MGZlZWIzMTY2MWQ5ICAgIE1BSU5UQUlORVJTCisJLi4uCisKK2FuZCB5b3Ugc2hvdWxkIG5vdyBoYXZlIGEgbGluZSB0aGF0IGxvb2tzIGxpa2UKKworCTEwMDY0IGJsb2IgNGI5NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMAlteS1tYWdpYy1maWxlCisKK2luIHRoZSBvdXRwdXQuIFRoaXMgYWxyZWFkeSB0ZWxscyB5b3UgYSAqbG90KiBpdCB0ZWxscyB5b3Ugd2hhdCBmaWxlIHRoZQorY29ycnVwdCBibG9iIGNhbWUgZnJvbSEKKworTm93LCBpdCBkb2Vzbid0IHRlbGwgeW91IHF1aXRlIGVub3VnaCwgdGhvdWdoOiBpdCBkb2Vzbid0IHRlbGwgd2hhdAorKnZlcnNpb24qIG9mIHRoZSBmaWxlIGRpZG4ndCBnZXQgY29ycmVjdGx5IHdyaXR0ZW4hIFlvdSBtaWdodCBiZSByZWFsbHkKK2x1Y2t5LCBhbmQgaXQgbWF5IGJlIHRoZSB2ZXJzaW9uIHRoYXQgeW91IGFscmVhZHkgaGF2ZSBjaGVja2VkIG91dCBpbiB5b3VyCit3b3JraW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgZml4aW5nIHRoaXMgcHJvYmxlbSBpcyByZWFsbHkgc2ltcGxlLCBqdXN0IGRvCisKKwlnaXQgaGFzaC1vYmplY3QgLXcgbXktbWFnaWMtZmlsZQorCithZ2FpbiwgYW5kIGlmIGl0IG91dHB1dHMgdGhlIG1pc3NpbmcgU0hBLTEgKDRiOTQ1Li4pIHlvdSdyZSBub3cgYWxsIGRvbmUhCisKK0J1dCB0aGF0J3MgdGhlIHJlYWxseSBsdWNreSBjYXNlLCBzbyBsZXQncyBhc3N1bWUgdGhhdCBpdCB3YXMgc29tZSBvbGRlcgordmVyc2lvbiB0aGF0IHdhcyBicm9rZW4uIEhvdyBkbyB5b3UgdGVsbCB3aGljaCB2ZXJzaW9uIGl0IHdhcz8KKworVGhlIGVhc2llc3Qgd2F5IHRvIGRvIGl0IGlzIHRvIGRvCisKKwlnaXQgbG9nIC0tcmF3IC0tYWxsIC0tZnVsbC1oaXN0b3J5IC0tIHN1YmRpcmVjdG9yeS9teS1tYWdpYy1maWxlCisKK2FuZCB0aGF0IHdpbGwgc2hvdyB5b3UgdGhlIHdob2xlIGxvZyBmb3IgdGhhdCBmaWxlIChwbGVhc2UgcmVhbGl6ZSB0aGF0Cit0aGUgdHJlZSB5b3UgaGFkIG1heSBub3QgYmUgdGhlIHRvcC1sZXZlbCB0cmVlLCBzbyB5b3UgbmVlZCB0byBmaWd1cmUgb3V0Cit3aGljaCBzdWJkaXJlY3RvcnkgaXQgd2FzIGluIG9uIHlvdXIgb3duKSwgYW5kIGJlY2F1c2UgeW91J3JlIGFza2luZyBmb3IKK3JhdyBvdXRwdXQsIHlvdSdsbCBub3cgZ2V0IHNvbWV0aGluZyBsaWtlCisKKwljb21taXQgYWJjCisJQXV0aG9yOgorCURhdGU6CisJICAuLgorCToxMDA2NDQgMTAwNjQ0IDRiOTQ1OGIuLi4gbmV3c2hhLi4uIE0gIHNvbWVkaXJlY3RvcnkvbXktbWFnaWMtZmlsZQorCisKKwljb21taXQgeHl6CisJQXV0aG9yOgorCURhdGU6CisKKwkgIC4uCisJOjEwMDY0NCAxMDA2NDQgb2xkc2hhLi4uIDRiOTQ1OGIuLi4gTQlzb21lZGlyZWN0b3J5L215LW1hZ2ljLWZpbGUKKworYW5kIHRoaXMgYWN0dWFsbHkgdGVsbHMgeW91IHdoYXQgdGhlICpwcmV2aW91cyogYW5kICpzdWJzZXF1ZW50KiB2ZXJzaW9ucworb2YgdGhhdCBmaWxlIHdlcmUhIFNvIG5vdyB5b3UgY2FuIGxvb2sgYXQgdGhvc2UgKCJvbGRzaGEiIGFuZCAibmV3c2hhIgorcmVzcGVjdGl2ZWx5KSwgYW5kIGhvcGVmdWxseSB5b3UgaGF2ZSBkb25lIGNvbW1pdHMgb2Z0ZW4sIGFuZCBjYW4KK3JlLWNyZWF0ZSB0aGUgbWlzc2luZyBteS1tYWdpYy1maWxlIHZlcnNpb24gYnkgbG9va2luZyBhdCB0aG9zZSBvbGRlciBhbmQKK25ld2VyIHZlcnNpb25zIQorCitJZiB5b3UgY2FuIGRvIHRoYXQsIHlvdSBjYW4gbm93IHJlY3JlYXRlIHRoZSBtaXNzaW5nIG9iamVjdCB3aXRoCisKKwlnaXQgaGFzaC1vYmplY3QgLXcgPHJlY3JlYXRlZC1maWxlPgorCithbmQgeW91ciByZXBvc2l0b3J5IGlzIGdvb2QgYWdhaW4hCisKKyhCdHcsIHlvdSBjb3VsZCBoYXZlIGlnbm9yZWQgdGhlIGZzY2ssIGFuZCBzdGFydGVkIHdpdGggZG9pbmcgYQorCisJZ2l0IGxvZyAtLXJhdyAtLWFsbAorCithbmQganVzdCBsb29rZWQgZm9yIHRoZSBzaGEgb2YgdGhlIG1pc3Npbmcgb2JqZWN0ICg0Yjk0NThiLi4pIGluIHRoYXQKK3dob2xlIHRoaW5nLiBJdCdzIHVwIHRvIHlvdSAtIEdpdCBkb2VzICpoYXZlKiBhIGxvdCBvZiBpbmZvcm1hdGlvbiwgaXQgaXMKK2p1c3QgbWlzc2luZyBvbmUgcGFydGljdWxhciBibG9iIHZlcnNpb24uCisKK1RyeWluZyB0byByZWNyZWF0ZSB0cmVlcyBhbmQgZXNwZWNpYWxseSBjb21taXRzIGlzICptdWNoKiBoYXJkZXIuIFNvIHlvdQord2VyZSBsdWNreSB0aGF0IGl0J3MgYSBibG9iLiBJdCdzIHF1aXRlIHBvc3NpYmxlIHRoYXQgeW91IGNhbiByZWNyZWF0ZSB0aGUKK3RoaW5nLgorCisJCQlMaW51cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1vYmplY3QtaGFyZGVyLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmVjb3Zlci1jb3JydXB0ZWQtb2JqZWN0LWhhcmRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5NGUyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmVjb3Zlci1jb3JydXB0ZWQtb2JqZWN0LWhhcmRlci50eHQKQEAgLTAsMCArMSw0NzkgQEAKK0RhdGU6IFdlZCwgMTYgT2N0IDIwMTMgMDQ6MzQ6MDEgLTA0MDAKK0Zyb206IEplZmYgS2luZyA8cGVmZkBwZWZmLm5ldD4KK1N1YmplY3Q6IHBhY2sgY29ycnVwdGlvbiBwb3N0LW1vcnRlbQorQWJzdHJhY3Q6IFJlY292ZXJpbmcgYSBjb3JydXB0ZWQgb2JqZWN0IHdoZW4gbm8gZ29vZCBjb3B5IGlzIGF2YWlsYWJsZS4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gcmVjb3ZlciBhbiBvYmplY3QgZnJvbSBzY3JhdGNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0kgd2FzIHJlY2VudGx5IHByZXNlbnRlZCB3aXRoIGEgcmVwb3NpdG9yeSB3aXRoIGEgY29ycnVwdGVkIHBhY2tmaWxlLAorYW5kIHdhcyBhc2tlZCBpZiB0aGUgZGF0YSB3YXMgcmVjb3ZlcmFibGUuIFRoaXMgcG9zdC1tb3J0ZW0gZGVzY3JpYmVzCit0aGUgc3RlcHMgSSB0b29rIHRvIGludmVzdGlnYXRlIGFuZCBmaXggdGhlIHByb2JsZW0uIEkgdGhvdWdodCBvdGhlcnMKK21pZ2h0IGZpbmQgdGhlIHByb2Nlc3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBtaWdodCBoZWxwIHNvbWVib2R5IGluIHRoZQorc2FtZSBzaXR1YXRpb24uCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitOb3RlOiBJbiB0aGlzIGNhc2UsIG5vIGdvb2QgY29weSBvZiB0aGUgcmVwb3NpdG9yeSB3YXMgYXZhaWxhYmxlLiBGb3IKK3RoZSBtdWNoIGVhc2llciBjYXNlIHdoZXJlIHlvdSBjYW4gZ2V0IHRoZSBjb3JydXB0ZWQgb2JqZWN0IGZyb20KK2Vsc2V3aGVyZSwgc2VlIGxpbms6cmVjb3Zlci1jb3JydXB0ZWQtYmxvYi1vYmplY3QuaHRtbFt0aGlzIGhvd3RvXS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0kgc3RhcnRlZCB3aXRoIGFuIGZzY2ssIHdoaWNoIGZvdW5kIGEgcHJvYmxlbSB3aXRoIGV4YWN0bHkgb25lIG9iamVjdAorKEkndmUgdXNlZCAkcGFjayBhbmQgJG9iaiBiZWxvdyB0byBrZWVwIHRoZSBvdXRwdXQgcmVhZGFibGUsIGFuZCBhbHNvCitiZWNhdXNlIEknbGwgcmVmZXIgdG8gdGhlbSBsYXRlcik6CisKKy0tLS0tLS0tLS0tCisgICAgJCBnaXQgZnNjaworICAgIGVycm9yOiAkcGFjayBTSEExIGNoZWNrc3VtIG1pc21hdGNoCisgICAgZXJyb3I6IGluZGV4IENSQyBtaXNtYXRjaCBmb3Igb2JqZWN0ICRvYmogZnJvbSAkcGFjayBhdCBvZmZzZXQgNTE2NTM4NzMKKyAgICBlcnJvcjogaW5mbGF0ZTogZGF0YSBzdHJlYW0gZXJyb3IgKGluY29ycmVjdCBkYXRhIGNoZWNrKQorICAgIGVycm9yOiBjYW5ub3QgdW5wYWNrICRvYmogZnJvbSAkcGFjayBhdCBvZmZzZXQgNTE2NTM4NzMKKy0tLS0tLS0tLS0tCisKK1RoZSBwYWNrIGNoZWNrc3VtIGZhaWxpbmcgbWVhbnMgYSBieXRlIGlzIG11bmdlZCBzb21ld2hlcmUsIGFuZCBpdCBpcworcHJlc3VtYWJseSBpbiB0aGUgb2JqZWN0IG1lbnRpb25lZCAoc2luY2UgYm90aCB0aGUgaW5kZXggY2hlY2tzdW0gYW5kCit6bGliIHdlcmUgZmFpbGluZykuCisKK1JlYWRpbmcgdGhlIHpsaWIgc291cmNlIGNvZGUsIEkgZm91bmQgdGhhdCAiaW5jb3JyZWN0IGRhdGEgY2hlY2siIG1lYW5zCit0aGF0IHRoZSBhZGxlci0zMiBjaGVja3N1bSBhdCB0aGUgZW5kIG9mIHRoZSB6bGliIGRhdGEgZGlkIG5vdCBtYXRjaCB0aGUKK2luZmxhdGVkIGRhdGEuIFNvIHN0ZXBwaW5nIHRoZSBkYXRhIHRocm91Z2ggemxpYiB3b3VsZCBub3QgaGVscCwgYXMgaXQKK2RpZCBub3QgZmFpbCB1bnRpbCB0aGUgdmVyeSBlbmQsIHdoZW4gd2UgcmVhbGl6ZSB0aGUgQ1JDIGRvZXMgbm90IG1hdGNoLgorVGhlIHByb2JsZW1hdGljIGJ5dGVzIGNvdWxkIGJlIGFueXdoZXJlIGluIHRoZSBvYmplY3QgZGF0YS4KKworVGhlIGZpcnN0IHRoaW5nIEkgZGlkIHdhcyBwdWxsIHRoZSBicm9rZW4gZGF0YSBvdXQgb2YgdGhlIHBhY2tmaWxlLiBJCituZWVkZWQgdG8ga25vdyBob3cgYmlnIHRoZSBvYmplY3Qgd2FzLCB3aGljaCBJIGZvdW5kIG91dCB3aXRoOgorCistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCBzaG93LWluZGV4IDwkaWR4IHwgY3V0IC1kJyAnIC1mMSB8IHNvcnQgLW4gfCBncmVwIC1BMSA1MTY1Mzg3MworICAgIDUxNjUzODczCisgICAgNTE2NjQ3MzYKKy0tLS0tLS0tLS0tLQorCitTaG93LWluZGV4IGdpdmVzIHVzIHRoZSBsaXN0IG9mIG9iamVjdHMgYW5kIHRoZWlyIG9mZnNldHMuIFdlIHRocm93IGF3YXkKK2V2ZXJ5dGhpbmcgYnV0IHRoZSBvZmZzZXRzLCBhbmQgdGhlbiBzb3J0IHRoZW0gc28gdGhhdCBvdXIgaW50ZXJlc3RpbmcKK29mZnNldCAod2hpY2ggd2UgZ290IGZyb20gdGhlIGZzY2sgb3V0cHV0IGFib3ZlKSBpcyBmb2xsb3dlZCBpbW1lZGlhdGVseQorYnkgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBvYmplY3QuIE5vdyB3ZSBrbm93IHRoYXQgdGhlIG9iamVjdCBkYXRhIGlzCisxMDg2MyBieXRlcyBsb25nLCBhbmQgd2UgY2FuIGdyYWIgaXQgd2l0aDoKKworLS0tLS0tLS0tLS0tCisgIGRkIGlmPSRwYWNrIG9mPW9iamVjdCBicz0xIHNraXA9NTE2NTM4NzMgY291bnQ9MTA4NjMKKy0tLS0tLS0tLS0tLQorCitJIGluc3BlY3RlZCBhIGhleGR1bXAgb2YgdGhlIGRhdGEsIGxvb2tpbmcgZm9yIGFueSBvYnZpb3VzIGJvZ29zaXR5CisoZS5nLiwgYSA0SyBydW4gb2YgemVyb2VzIHdvdWxkIGJlIGEgZ29vZCBzaWduIG9mIGZpbGVzeXN0ZW0KK2NvcnJ1cHRpb24pLiBCdXQgZXZlcnl0aGluZyBsb29rZWQgcHJldHR5IHJlYXNvbmFibGUuCisKK05vdGUgdGhhdCB0aGUgIm9iamVjdCIgZmlsZSBpc24ndCBmaXQgZm9yIGZlZWRpbmcgc3RyYWlnaHQgdG8gemxpYjsgaXQKK2hhcyB0aGUgZ2l0IHBhY2tlZCBvYmplY3QgaGVhZGVyLCB3aGljaCBpcyB2YXJpYWJsZS1sZW5ndGguIFdlIHdhbnQgdG8KK3N0cmlwIHRoYXQgb2ZmIHNvIHdlIGNhbiBzdGFydCBwbGF5aW5nIHdpdGggdGhlIHpsaWIgZGF0YSBkaXJlY3RseS4gWW91CitjYW4gZWl0aGVyIHdvcmsgeW91ciB3YXkgdGhyb3VnaCBpdCBtYW51YWxseSAodGhlIGZvcm1hdCBpcyBkZXNjcmliZWQgaW4KK2xpbms6Li4vdGVjaG5pY2FsL3BhY2stZm9ybWF0Lmh0bWxbRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1mb3JtYXQudHh0XSksCitvciB5b3UgY2FuIHdhbGsgdGhyb3VnaCBpdCBpbiBhIGRlYnVnZ2VyLiBJIGRpZCB0aGUgbGF0dGVyLCBjcmVhdGluZyBhCit2YWxpZCBwYWNrIGxpa2U6CisKKy0tLS0tLS0tLS0tLQorICAgICMgcGFjayBtYWdpYyBhbmQgdmVyc2lvbgorICAgIHByaW50ZiAnUEFDS1wwXDBcMFwyJyA+dG1wLnBhY2sKKyAgICAjIHBhY2sgaGFzIG9uZSBvYmplY3QKKyAgICBwcmludGYgJ1wwXDBcMFwxJyA+PnRtcC5wYWNrCisgICAgIyBub3cgYWRkIG91ciBvYmplY3QgZGF0YQorICAgIGNhdCBvYmplY3QgPj50bXAucGFjaworICAgICMgYW5kIHRoZW4gYXBwZW5kIHRoZSBwYWNrIHRyYWlsZXIKKyAgICAvcGF0aC90by9naXQuZ2l0L3QvaGVscGVyL3Rlc3QtdG9vbCBzaGExIC1iIDx0bXAucGFjayA+dHJhaWxlcgorICAgIGNhdCB0cmFpbGVyID4+dG1wLnBhY2sKKy0tLS0tLS0tLS0tLQorCithbmQgdGhlbiBydW5uaW5nICJnaXQgaW5kZXgtcGFjayB0bXAucGFjayIgaW4gdGhlIGRlYnVnZ2VyIChzdG9wIGF0Cit1bnBhY2tfcmF3X2VudHJ5KS4gRG9pbmcgdGhpcywgSSBmb3VuZCB0aGF0IHRoZXJlIHdlcmUgMyBieXRlcyBvZiBoZWFkZXIKKyhhbmQgdGhlIGhlYWRlciBpdHNlbGYgaGFkIGEgc2FuZSB0eXBlIGFuZCBzaXplKS4gU28gSSBzdHJpcHBlZCB0aG9zZQorb2ZmIHdpdGg6CisKKy0tLS0tLS0tLS0tLQorICAgIGRkIGlmPW9iamVjdCBvZj16bGliIGJzPTEgc2tpcD0zCistLS0tLS0tLS0tLS0KKworSSByYW4gdGhlIHJlc3VsdCB0aHJvdWdoIHpsaWIncyBpbmZsYXRlIHVzaW5nIGEgY3VzdG9tIEMgcHJvZ3JhbS4gQW5kCit3aGlsZSBpdCBkaWQgcmVwb3J0IHRoZSBlcnJvciwgSSBkaWQgZ2V0IHRoZSByaWdodCBudW1iZXIgb2Ygb3V0cHV0CitieXRlcyAoaS5lLiwgaXQgbWF0Y2hlZCBnaXQncyBzaXplIGhlYWRlciB0aGF0IHdlIGRlY29kZWQgYWJvdmUpLiBCdXQKK2ZlZWRpbmcgdGhlIHJlc3VsdCBiYWNrIHRvICJnaXQgaGFzaC1vYmplY3QiIGRpZG4ndCBwcm9kdWNlIHRoZSBzYW1lCitzaGExLiBTbyB0aGVyZSB3ZXJlIHNvbWUgd3JvbmcgYnl0ZXMsIGJ1dCBJIGRpZG4ndCBrbm93IHdoaWNoLiBUaGUgZmlsZQoraGFwcGVuZWQgdG8gYmUgQyBzb3VyY2UgY29kZSwgc28gSSBob3BlZCBJIGNvdWxkIG5vdGljZSBzb21ldGhpbmcKK29idmlvdXNseSB3cm9uZyB3aXRoIGl0LCBidXQgSSBkaWRuJ3QuIEkgZXZlbiBnb3QgaXQgdG8gY29tcGlsZSEKKworSSBhbHNvIHRyaWVkIGNvbXBhcmluZyBpdCB0byBvdGhlciB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBwYXRoIGluIHRoZQorcmVwb3NpdG9yeSwgaG9waW5nIHRoYXQgdGhlcmUgd291bGQgYmUgc29tZSBwYXJ0IG9mIHRoZSBkaWZmIHRoYXQgZGlkbid0CittYWtlIHNlbnNlLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGhhcHBlbmVkIHRvIGJlIHRoZSBvbmx5IHJldmlzaW9uIG9mIHRoaXMKK3BhcnRpY3VsYXIgZmlsZSBpbiB0aGUgcmVwb3NpdG9yeSwgc28gSSBoYWQgbm90aGluZyB0byBjb21wYXJlIGFnYWluc3QuCisKK1NvIEkgdG9vayBhIGRpZmZlcmVudCBhcHByb2FjaC4gV29ya2luZyB1bmRlciB0aGUgZ3Vlc3MgdGhhdCB0aGUKK2NvcnJ1cHRpb24gd2FzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgYnl0ZSwgSSB3cm90ZSBhIHByb2dyYW0gdG8gbXVuZ2UgZWFjaAorYnl0ZSBpbmRpdmlkdWFsbHksIGFuZCB0cnkgaW5mbGF0aW5nIHRoZSByZXN1bHQuIFNpbmNlIHRoZSBvYmplY3Qgd2FzCitvbmx5IDEwSyBjb21wcmVzc2VkLCB0aGF0IHdvcmtlZCBvdXQgdG8gYWJvdXQgMi41TSBhdHRlbXB0cywgd2hpY2ggdG9vaworYSBmZXcgbWludXRlcy4KKworVGhlIHByb2dyYW0gSSB1c2VkIGlzIGhlcmU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHpsaWIuaD4KKworc3RhdGljIGludCB0cnlfemxpYih1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCit7CisJLyogbWFrZSB0aGlzIGFic3VyZGx5IGxhcmdlIHNvIHdlIGRvbid0IGhhdmUgdG8gbG9vcCAqLworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dFsxMDI0KjEwMjRdOworCXpfc3RyZWFtIHo7CisJaW50IHJldDsKKworCW1lbXNldCgmeiwgMCwgc2l6ZW9mKHopKTsKKwlpbmZsYXRlSW5pdCgmeik7CisKKwl6Lm5leHRfaW4gPSBidWY7CisJei5hdmFpbF9pbiA9IGxlbjsKKwl6Lm5leHRfb3V0ID0gb3V0OworCXouYXZhaWxfb3V0ID0gc2l6ZW9mKG91dCk7CisKKwlyZXQgPSBpbmZsYXRlKCZ6LCAwKTsKKwlpbmZsYXRlRW5kKCZ6KTsKKwlyZXR1cm4gcmV0ID49IDA7Cit9CisKKy8qIGV5ZSBjYW5keSAqLworc3RhdGljIGludCBjb3VudGVyID0gMDsKK3N0YXRpYyB2b2lkIHByb2dyZXNzKGludCBzaWcpCit7CisJZnByaW50ZihzdGRlcnIsICJcciVkIiwgY291bnRlcik7CisJYWxhcm0oMSk7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisJLyogb3ZlcnNpemVkIHNvIHdlIGNhbiByZWFkIHRoZSB3aG9sZSBidWZmZXIgaW4gKi8KKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0KjEwMjRdOworCWludCBsZW47CisJdW5zaWduZWQgaSwgajsKKworCXNpZ25hbChTSUdBTFJNLCBwcm9ncmVzcyk7CisJYWxhcm0oMSk7CisKKwlsZW4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSBidWZbaV07CisJCWZvciAoaiA9IDA7IGogPD0gMHhmZjsgaisrKSB7CisJCQlidWZbaV0gPSBqOworCisJCQljb3VudGVyKys7CisJCQlpZiAodHJ5X3psaWIoYnVmLCBsZW4pKQorCQkJCXByaW50ZigiaT0lZCwgaj0leFxuIiwgaSwgaik7CisJCX0KKwkJYnVmW2ldID0gYzsKKwl9CisKKwlhbGFybSgwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJcmV0dXJuIDA7Cit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgY29tcGlsZWQgYW5kIHJhbiB3aXRoOgorCistLS0tLS0tCisgIGdjYyAtV2FsbCAtV2Vycm9yIC1PMyBtdW5nZS5jIC1vIG11bmdlIC1segorICAuL211bmdlIDx6bGliCistLS0tLS0tCisKKworVGhlcmUgd2VyZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgZWFybHkgb24gKGlmIHlvdSB3cml0ZSAibm8gZGF0YSIgaW4gdGhlCit6bGliIGhlYWRlciwgemxpYiB0aGlua3MgaXQncyBqdXN0IGZpbmUgOikgKS4gQnV0IEkgZ290IGEgaGl0IGFib3V0CitoYWxmd2F5IHRocm91Z2g6CisKKy0tLS0tLS0KKyAgaT01NjQyLCBqPWM3CistLS0tLS0tCisKK0kgbGV0IGl0IHJ1biB0byBjb21wbGV0aW9uLCBhbmQgZ290IGEgZmV3IG1vcmUgaGl0cyBhdCB0aGUgZW5kICh3aGVyZSBpdAord2FzIG11bmdpbmcgdGhlIENSQyB0byBtYXRjaCBvdXIgYnJva2VuIGRhdGEpLiBTbyB0aGVyZSB3YXMgYSBnb29kCitjaGFuY2UgdGhpcyBtaWRkbGUgaGl0IHdhcyB0aGUgc291cmNlIG9mIHRoZSBwcm9ibGVtLgorCitJIGNvbmZpcm1lZCBieSB0d2Vha2luZyB0aGUgYnl0ZSBpbiBhIGhleCBlZGl0b3IsIHpsaWIgaW5mbGF0aW5nIHRoZQorcmVzdWx0IChubyBlcnJvcnMhKSwgYW5kIHRoZW4gcGlwaW5nIHRoZSBvdXRwdXQgaW50byAiZ2l0IGhhc2gtb2JqZWN0IiwKK3doaWNoIHJlcG9ydGVkIHRoZSBzaGExIG9mIHRoZSBicm9rZW4gb2JqZWN0LiBTdWNjZXNzIQorCitJIGZpeGVkIHRoZSBwYWNrZmlsZSBpdHNlbGYgd2l0aDoKKworLS0tLS0tLQorICBjaG1vZCArdyAkcGFjaworICBwcmludGYgJ1x4YzcnIHwgZGQgb2Y9JHBhY2sgYnM9MSBzZWVrPTUxNjU5NTE4IGNvbnY9bm90cnVuYworICBjaG1vZCAtdyAkcGFjaworLS0tLS0tLQorCitUaGUgYFx4YzdgIGNvbWVzIGZyb20gdGhlIHJlcGxhY2VtZW50IGJ5dGUgb3VyICJtdW5nZSIgcHJvZ3JhbSBmb3VuZC4KK1RoZSBvZmZzZXQgNTE2NTk1MTggaXMgZGVyaXZlZCBieSB0YWtpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCBvZmZzZXQKKyg1MTY1Mzg3MyksIGFkZGluZyB0aGUgcmVwbGFjZW1lbnQgb2Zmc2V0IGZvdW5kIGJ5ICJtdW5nZSIgKDU2NDIpLCBhbmQKK3RoZW4gYWRkaW5nIGJhY2sgaW4gdGhlIDMgYnl0ZXMgb2YgZ2l0IGhlYWRlciB3ZSBzdHJpcHBlZC4KKworQWZ0ZXIgdGhhdCwgImdpdCBmc2NrIiByYW4gY2xlYW4uCisKK0FzIGZvciB0aGUgY29ycnVwdGlvbiBpdHNlbGYsIEkgd2FzIGx1Y2t5IHRoYXQgaXQgd2FzIGluZGVlZCBhIHNpbmdsZQorYnl0ZS4gSW4gZmFjdCwgaXQgdHVybmVkIG91dCB0byBiZSBhIHNpbmdsZSBiaXQuIFRoZSBieXRlIDB4Yzcgd2FzCitjb3JydXB0ZWQgdG8gMHhjNS4gU28gcHJlc3VtYWJseSBpdCB3YXMgY2F1c2VkIGJ5IGZhdWx0eSBoYXJkd2FyZSwgb3IgYQorY29zbWljIHJheS4KKworQW5kIHRoZSBhYm9ydGVkIGF0dGVtcHQgdG8gbG9vayBhdCB0aGUgaW5mbGF0ZWQgb3V0cHV0IHRvIHNlZSB3aGF0IHdhcword3Jvbmc/IEkgY291bGQgaGF2ZSBsb29rZWQgZm9yZXZlciBhbmQgbmV2ZXIgZm91bmQgaXQuIEhlcmUncyB0aGUgZGlmZgorYmV0d2VlbiB3aGF0IHRoZSBjb3JydXB0ZWQgZGF0YSBpbmZsYXRlcyB0bywgdmVyc3VzIHRoZSByZWFsIGRhdGE6CisKKy0tLS0tLS0tLS0tLS0tCisgIC0gICAgICAgY3AgPSBzdHJ0b2sgKGFyZywgIisiKTsKKyAgKyAgICAgICBjcCA9IHN0cnRvayAoYXJnLCAiLiIpOworLS0tLS0tLS0tLS0tLS0KKworSXQgdHdlYWtlZCBvbmUgYnl0ZSBhbmQgc3RpbGwgZW5kZWQgdXAgYXMgdmFsaWQsIHJlYWRhYmxlIEMgdGhhdCBqdXN0CitoYXBwZW5lZCB0byBkbyBzb21ldGhpbmcgdG90YWxseSBkaWZmZXJlbnQhIE9uZSB0YWtlYXdheSBpcyB0aGF0IG9uIGEKK2xlc3MgdW5sdWNreSBkYXksIGxvb2tpbmcgYXQgdGhlIHpsaWIgb3V0cHV0IG1pZ2h0IGhhdmUgYWN0dWFsbHkgYmVlbgoraGVscGZ1bCwgYXMgbW9zdCByYW5kb20gY2hhbmdlcyB3b3VsZCBhY3R1YWxseSBicmVhayB0aGUgQyBjb2RlLgorCitCdXQgbW9yZSBpbXBvcnRhbnRseSwgZ2l0J3MgaGFzaGluZyBhbmQgY2hlY2tzdW1taW5nIG5vdGljZWQgYSBwcm9ibGVtCit0aGF0IGVhc2lseSBjb3VsZCBoYXZlIGdvbmUgdW5kZXRlY3RlZCBpbiBhbm90aGVyIHN5c3RlbS4gVGhlIHJlc3VsdAorc3RpbGwgY29tcGlsZWQsIGJ1dCB3b3VsZCBoYXZlIGNhdXNlZCBhbiBpbnRlcmVzdGluZyBidWcgKHRoYXQgd291bGQKK2hhdmUgYmVlbiBibGFtZWQgb24gc29tZSByYW5kb20gY29tbWl0KS4KKworCitUaGUgYWR2ZW50dXJlIGNvbnRpbnVlcy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSSBlbmRlZCB1cCBkb2luZyB0aGlzIGFnYWluISBTYW1lIGVudGl0eSwgbmV3IGhhcmR3YXJlLiBUaGUgYXNzdW1wdGlvbgorYXQgdGhpcyBwb2ludCBpcyB0aGF0IHRoZSBvbGQgZGlzayBjb3JydXB0ZWQgdGhlIHBhY2tmaWxlLCBhbmQgdGhlbiB0aGUKK2NvcnJ1cHRpb24gd2FzIG1pZ3JhdGVkIHRvIHRoZSBuZXcgaGFyZHdhcmUgKGJlY2F1c2UgaXQgd2FzIGRvbmUgYnkKK3JzeW5jIG9yIHNpbWlsYXIsIGFuZCBubyBmc2NrIHdhcyBkb25lIGF0IHRoZSB0aW1lIG9mIG1pZ3JhdGlvbikuCisKK1RoaXMgdGltZSwgdGhlIGFmZmVjdGVkIGJsb2Igd2FzIG92ZXIgMjAgbWVnYWJ5dGVzLCB3aGljaCB3YXMgZmFyIHRvbworbGFyZ2UgdG8gZG8gYSBicnV0ZS1mb3JjZSBvbi4gSSBmb2xsb3dlZCB0aGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIHRvCitjcmVhdGUgdGhlIGB6bGliYCBmaWxlLiBJIHRoZW4gdXNlZCB0aGUgYGluZmxhdGVgIHByb2dyYW0gYmVsb3cgdG8gcHVsbAordGhlIGNvcnJ1cHRlZCBkYXRhIGZyb20gdGhhdC4gRXhhbWluaW5nIHRoYXQgb3V0cHV0IGdhdmUgbWUgYSBoaW50IGFib3V0Cit3aGVyZSBpbiB0aGUgZmlsZSB0aGUgY29ycnVwdGlvbiB3YXMuIEJ1dCBub3cgSSB3YXMgd29ya2luZyB3aXRoIHRoZQorZmlsZSBpdHNlbGYsIG5vdCB0aGUgemxpYiBjb250ZW50cy4gU28ga25vd2luZyB0aGUgc2hhMSBvZiB0aGUgb2JqZWN0CithbmQgdGhlIGFwcHJveGltYXRlIGFyZWEgb2YgdGhlIGNvcnJ1cHRpb24sIEkgdXNlZCB0aGUgYHNoYTEtbXVuZ2VgCitwcm9ncmFtIGJlbG93IHRvIGJydXRlLWZvcmNlIHRoZSBjb3JyZWN0IGJ5dGUuCisKK0hlcmUncyB0aGUgaW5mbGF0ZSBwcm9ncmFtIChpdCdzIGVzc2VudGlhbGx5IGBndW56aXBgIGJ1dCB3aXRob3V0IHRoZQorYC5nemAgaGVhZGVyIHByb2Nlc3NpbmcpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8emxpYi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJLyoKKwkgKiBvdmVyc2l6ZWQgc28gd2UgY2FuIHJlYWQgdGhlIHdob2xlIGJ1ZmZlciBpbjsKKwkgKiB0aGlzIGNvdWxkIGFjdHVhbGx5IGJlIHN3aXRjaGVkIHRvIHN0cmVhbWluZworCSAqIHRvIGF2b2lkIGFueSBtZW1vcnkgbGltaXRhdGlvbnMKKwkgKi8KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBidWZbMjUgKiAxMDI0ICogMTAyNF07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0WzI1ICogMTAyNCAqIDEwMjRdOworCWludCBsZW47CisJel9zdHJlYW0gejsKKwlpbnQgcmV0OworCisJbGVuID0gcmVhZCgwLCBidWYsIHNpemVvZihidWYpKTsKKwltZW1zZXQoJnosIDAsIHNpemVvZih6KSk7CisJaW5mbGF0ZUluaXQoJnopOworCisJei5uZXh0X2luID0gYnVmOworCXouYXZhaWxfaW4gPSBsZW47CisJei5uZXh0X291dCA9IG91dDsKKwl6LmF2YWlsX291dCA9IHNpemVvZihvdXQpOworCisJcmV0ID0gaW5mbGF0ZSgmeiwgMCk7CisJaWYgKHJldCAhPSBaX09LICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpCisJCWZwcmludGYoc3RkZXJyLCAiaW5pdGlhbCBpbmZsYXRlIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCisJZnByaW50ZihzdGRlcnIsICJvdXRwdXR0aW5nICVsdSBieXRlcyIsIHoudG90YWxfb3V0KTsKKwlmd3JpdGUob3V0LCAxLCB6LnRvdGFsX291dCwgc3Rkb3V0KTsKKwlyZXR1cm4gMDsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuZCBoZXJlIGlzIHRoZSBgc2hhMS1tdW5nZWAgcHJvZ3JhbToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIGV5ZSBjYW5keSAqLworc3RhdGljIGludCBjb3VudGVyID0gMDsKK3N0YXRpYyB2b2lkIHByb2dyZXNzKGludCBzaWcpCit7CisJZnByaW50ZihzdGRlcnIsICJcciVkIiwgY291bnRlcik7CisJYWxhcm0oMSk7Cit9CisKK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciBoZXh2YWxfdGFibGVbMjU2XSA9IHsKKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMDAtMDcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMDgtMGYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMTAtMTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMTgtMWYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMjAtMjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMjgtMmYgKi8KKwkgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LAkJLyogMzAtMzcgKi8KKwkgIDgsICA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMzgtM2YgKi8KKwkgLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLAkJLyogNDAtNDcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNDgtNGYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNTAtNTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNTgtNWYgKi8KKwkgLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLAkJLyogNjAtNjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNjgtNjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNzAtNzcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogNzgtN2YgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogODAtODcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogODgtOGYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogOTAtOTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogOTgtOWYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYTAtYTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYTgtYWYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYjAtYjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYjgtYmYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYzAtYzcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogYzgtY2YgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZDAtZDcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZDgtZGYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZTAtZTcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZTgtZWYgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZjAtZjcgKi8KKwkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogZjgtZmYgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGhleHZhbCh1bnNpZ25lZCBjaGFyIGMpCit7CityZXR1cm4gaGV4dmFsX3RhYmxlW2NdOworfQorCitzdGF0aWMgaW50IGdldF9zaGExX2hleChjb25zdCBjaGFyICpoZXgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHZhbDsKKwkJLyoKKwkJICogaGV4WzFdPT0nXDAnIGlzIGNhdWdodCB3aGVuIHZhbCBpcyBjaGVja2VkIGJlbG93LAorCQkgKiBidXQgaWYgaGV4WzBdIGlzIE5VTCB3ZSBoYXZlIHRvIGF2b2lkIHJlYWRpbmcKKwkJICogcGFzdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmc6CisJCSAqLworCQlpZiAoIWhleFswXSkKKwkJCXJldHVybiAtMTsKKwkJdmFsID0gKGhleHZhbChoZXhbMF0pIDw8IDQpIHwgaGV4dmFsKGhleFsxXSk7CisJCWlmICh2YWwgJiB+MHhmZikKKwkJCXJldHVybiAtMTsKKwkJKnNoYTErKyA9IHZhbDsKKwkJaGV4ICs9IDI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJLyogb3ZlcnNpemVkIHNvIHdlIGNhbiByZWFkIHRoZSB3aG9sZSBidWZmZXIgaW4gKi8KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBidWZbMjUgKiAxMDI0ICogMTAyNF07CisJY2hhciBoZWFkZXJbMzJdOworCWludCBoZWFkZXJfbGVuOworCXVuc2lnbmVkIGNoYXIgaGF2ZVsyMF0sIHdhbnRbMjBdOworCWludCBzdGFydCwgbGVuOworCVNIQV9DVFggb3JpZzsKKwl1bnNpZ25lZCBpLCBqOworCisJaWYgKCFhcmd2WzFdIHx8IGdldF9zaGExX2hleChhcmd2WzFdLCB3YW50KSkgeworCQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBzaGExLW11bmdlIDxzaGExPiBbc3RhcnRdIDxmaWxlLmluXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGFyZ3ZbMl0pCisJCXN0YXJ0ID0gYXRvaShhcmd2WzJdKTsKKwllbHNlCisJCXN0YXJ0ID0gMDsKKworCWxlbiA9IHJlYWQoMCwgYnVmLCBzaXplb2YoYnVmKSk7CisJaGVhZGVyX2xlbiA9IHNwcmludGYoaGVhZGVyLCAiYmxvYiAlZCIsIGxlbikgKyAxOworCWZwcmludGYoc3RkZXJyLCAidXNpbmcgaGVhZGVyOiAlc1xuIiwgaGVhZGVyKTsKKworCS8qCisJICogV2Uga2VlcCBhIHJ1bm5pbmcgc2hhMSBzbyB0aGF0IGlmIHlvdSBhcmUgbXVuZ2luZworCSAqIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZSwgd2UgZG8gbm90IGhhdmUgdG8gcmUtc2hhMQorCSAqIHRoZSB1bmNoYW5nZWQgZWFybGllciBieXRlcworCSAqLworCVNIQTFfSW5pdCgmb3JpZyk7CisJU0hBMV9VcGRhdGUoJm9yaWcsIGhlYWRlciwgaGVhZGVyX2xlbik7CisJaWYgKHN0YXJ0KQorCQlTSEExX1VwZGF0ZSgmb3JpZywgYnVmLCBzdGFydCk7CisKKwlzaWduYWwoU0lHQUxSTSwgcHJvZ3Jlc3MpOworCWFsYXJtKDEpOworCisJZm9yIChpID0gc3RhcnQ7IGkgPCBsZW47IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGM7CisJCVNIQV9DVFggeDsKKworI2lmIDAKKwkJLyoKKwkJICogZGVsZXRpb24gLS0gdGhpcyB3b3VsZCBub3QgYWN0dWFsbHkgd29yayBpbiBwcmFjdGljZSwKKwkJICogSSB0aGluaywgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGNvbW1pdHRlZCB0byBhCisJCSAqIHBhcnRpY3VsYXIgc2l6ZSBpbiB0aGUgaGVhZGVyLiBEaXR0byBmb3IgYWRkaXRpb24KKwkJICogYmVsb3cuIEluIHRob3NlIGNhc2VzLCB5b3UnZCBoYXZlIHRvIGRvIHRoZSB3aG9sZQorCQkgKiBzaGExIGZyb20gc2NyYXRjaCwgb3IgcG9zc2libHkga2VlcCB0aHJlZSBydW5uaW5nCisJCSAqICJvcmlnIiBzaGExIGNvbXB1dGF0aW9ucyBnb2luZy4KKwkJICovCisJCW1lbWNweSgmeCwgJm9yaWcsIHNpemVvZih4KSk7CisJCVNIQTFfVXBkYXRlKCZ4LCBidWYgKyBpICsgMSwgbGVuIC0gaSAtIDEpOworCQlTSEExX0ZpbmFsKGhhdmUsICZ4KTsKKwkJaWYgKCFtZW1jbXAoaGF2ZSwgd2FudCwgMjApKQorCQkJcHJpbnRmKCJpPSVkLCBkZWxldGlvblxuIiwgaSk7CisjZW5kaWYKKworCQkvKgorCQkgKiByZXBsYWNlbWVudCAtLSBub3RlIHRoYXQgdGhpcyB0cmllcyBlYWNoIG9mIHRoZSAyNTYKKwkJICogcG9zc2libGUgYnl0ZXMuIElmIHlvdSBzdXNwZWN0IGEgc2luZ2xlLWJpdCBmbGlwLAorCQkgKiBpdCB3b3VsZCBiZSBtdWNoIHNob3J0ZXIgdG8ganVzdCB0cnkgdGhlIDgKKwkJICogYml0LWZsaXBwZWQgdmFyaWFudHMuCisJCSAqLworCQljID0gYnVmW2ldOworCQlmb3IgKGogPSAwOyBqIDw9IDB4ZmY7IGorKykgeworCQkJYnVmW2ldID0gajsKKworCQkJbWVtY3B5KCZ4LCAmb3JpZywgc2l6ZW9mKHgpKTsKKwkJCVNIQTFfVXBkYXRlKCZ4LCBidWYgKyBpLCBsZW4gLSBpKTsKKwkJCVNIQTFfRmluYWwoaGF2ZSwgJngpOworCQkJaWYgKCFtZW1jbXAoaGF2ZSwgd2FudCwgMjApKQorCQkJCXByaW50ZigiaT0lZCwgaj0lMDJ4XG4iLCBpLCBqKTsKKwkJfQorCQlidWZbaV0gPSBjOworCisjaWYgMAorCQkvKiBhZGRpdGlvbiAqLworCQlmb3IgKGogPSAwOyBqIDw9IDB4ZmY7IGorKykgeworCQkJdW5zaWduZWQgY2hhciBleHRyYSA9IGo7CisJCQltZW1jcHkoJngsICZvcmlnLCBzaXplb2YoeCkpOworCQkJU0hBMV9VcGRhdGUoJngsICZleHRyYSwgMSk7CisJCQlTSEExX1VwZGF0ZSgmeCwgYnVmICsgaSwgbGVuIC0gaSk7CisJCQlTSEExX0ZpbmFsKGhhdmUsICZ4KTsKKwkJCWlmICghbWVtY21wKGhhdmUsIHdhbnQsIDIwKSkKKwkJCQlwcmludGYoImk9JWQsIGFkZGl0aW9uPSUwMngiLCBpLCBqKTsKKwkJfQorI2VuZGlmCisKKwkJU0hBMV9VcGRhdGUoJm9yaWcsIGJ1ZiArIGksIDEpOworCQljb3VudGVyKys7CisJfQorCisJYWxhcm0oMCk7CisJZnByaW50ZihzdGRlcnIsICJcciVkXG4iLCBjb3VudGVyKTsKKwlyZXR1cm4gMDsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmNTljYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlLnR4dApAQCAtMCwwICsxLDI3MyBAQAorRGF0ZTogRnJpLCAxOSBEZWMgMjAwOCAwMDo0NToxOSAtMDgwMAorRnJvbTogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiwgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorU3ViamVjdDogUmU6IE9kZCBtZXJnZSBiZWhhdmlvdXIgaW52b2x2aW5nIHJldmVydHMKK0Fic3RyYWN0OiBTb21ldGltZXMgYSBicmFuY2ggdGhhdCB3YXMgYWxyZWFkeSBtZXJnZWQgdG8gdGhlIG1haW5saW5lCisgaXMgbGF0ZXIgZm91bmQgdG8gYmUgZmF1bHR5LiAgTGludXMgYW5kIEp1bmlvIGdpdmUgZ3VpZGFuY2Ugb24KKyByZWNvdmVyaW5nIGZyb20gc3VjaCBhIHByZW1hdHVyZSBtZXJnZSBhbmQgY29udGludWluZyBkZXZlbG9wbWVudAorIGFmdGVyIHRoZSBvZmZlbmRpbmcgYnJhbmNoIGlzIGZpeGVkLgorTWVzc2FnZS1JRDogPDd2b2N6OGE2emsuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnPgorUmVmZXJlbmNlczogPGFscGluZS5MRkQuMi4wMC4wODEyMTgxOTQ5NDUwLjE0MDE0QGxvY2FsaG9zdC5sb2NhbGRvbWFpbj4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gcmV2ZXJ0IGEgZmF1bHR5IG1lcmdlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FsYW4gPGFsYW5AY2x1ZXNlcnZlci5vcmc+IHNhaWQ6CisKKyAgICBJIGhhdmUgYSBtYXN0ZXIgYnJhbmNoLiAgV2UgaGF2ZSBhIGJyYW5jaCBvZmYgb2YgdGhhdCB0aGF0IHNvbWUKKyAgICBkZXZlbG9wZXJzIGFyZSBkb2luZyB3b3JrIG9uLiAgVGhleSBjbGFpbSBpdCBpcyByZWFkeS4gV2UgbWVyZ2UgaXQKKyAgICBpbnRvIHRoZSBtYXN0ZXIgYnJhbmNoLiAgSXQgYnJlYWtzIHNvbWV0aGluZyBzbyB3ZSByZXZlcnQgdGhlIG1lcmdlLgorICAgIFRoZXkgbWFrZSBjaGFuZ2VzIHRvIHRoZSBjb2RlLiAgdGhleSBnZXQgaXQgdG8gYSBwb2ludCB3aGVyZSB0aGV5IHNheQorICAgIGl0IGlzIG9rIGFuZCB3ZSBtZXJnZSBhZ2Fpbi4KKworICAgIFdoZW4gZXhhbWluZWQsIHdlIGZpbmQgdGhhdCBjb2RlIGNoYW5nZXMgbWFkZSBiZWZvcmUgdGhlIHJldmVydCBhcmUKKyAgICBub3QgaW4gdGhlIG1hc3RlciBicmFuY2gsIGJ1dCBjb2RlIGNoYW5nZXMgYWZ0ZXIgYXJlIGluIHRoZSBtYXN0ZXIKKyAgICBicmFuY2guCisKK2FuZCBhc2tlZCBmb3IgaGVscCByZWNvdmVyaW5nIGZyb20gdGhpcyBzaXR1YXRpb24uCisKK1RoZSBoaXN0b3J5IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAicmV2ZXJ0IG9mIHRoZSBtZXJnZSIgd291bGQgbG9vayBsaWtlCit0aGlzOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVworICAgICAgICAgICAgICAgLworICAgICAgIC0tLUEtLS1CCisKK3doZXJlIEEgYW5kIEIgYXJlIG9uIHRoZSBzaWRlIGRldmVsb3BtZW50IHRoYXQgd2FzIG5vdCBzbyBnb29kLCBNIGlzIHRoZQorbWVyZ2UgdGhhdCBicmluZ3MgdGhlc2UgcHJlbWF0dXJlIGNoYW5nZXMgaW50byB0aGUgbWFpbmxpbmUsIHggYXJlIGNoYW5nZXMKK3VucmVsYXRlZCB0byB3aGF0IHRoZSBzaWRlIGJyYW5jaCBkaWQgYW5kIGFscmVhZHkgbWFkZSBvbiB0aGUgbWFpbmxpbmUsCithbmQgVyBpcyB0aGUgInJldmVydCBvZiB0aGUgbWVyZ2UgTSIgKGRvZXNuJ3QgVyBsb29rIE0gdXBzaWRlIGRvd24/KS4KK0lPVywgYCJkaWZmIFdeLi5XImAgaXMgc2ltaWxhciB0byBgImRpZmYgLVIgTV4uLk0iYC4KKworU3VjaCBhICJyZXZlcnQiIG9mIGEgbWVyZ2UgY2FuIGJlIG1hZGUgd2l0aDoKKworICAgICQgZ2l0IHJldmVydCAtbSAxIE0KKworQWZ0ZXIgdGhlIGRldmVsb3BlcnMgb2YgdGhlIHNpZGUgYnJhbmNoIGZpeCB0aGVpciBtaXN0YWtlcywgdGhlIGhpc3RvcnkKK21heSBsb29rIGxpa2UgdGhpczoKKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisgICAgICAgICAgICAgICAvCisgICAgICAgLS0tQS0tLUItLS0tLS0tLS0tLS0tLS0tLS0tQy0tLUQKKword2hlcmUgQyBhbmQgRCBhcmUgdG8gZml4IHdoYXQgd2FzIGJyb2tlbiBpbiBBIGFuZCBCLCBhbmQgeW91IG1heSBhbHJlYWR5CitoYXZlIHNvbWUgb3RoZXIgY2hhbmdlcyBvbiB0aGUgbWFpbmxpbmUgYWZ0ZXIgVy4KKworSWYgeW91IG1lcmdlIHRoZSB1cGRhdGVkIHNpZGUgYnJhbmNoICh3aXRoIEQgYXQgaXRzIHRpcCksIG5vbmUgb2YgdGhlCitjaGFuZ2VzIG1hZGUgaW4gQSBvciBCIHdpbGwgYmUgaW4gdGhlIHJlc3VsdCwgYmVjYXVzZSB0aGV5IHdlcmUgcmV2ZXJ0ZWQKK2J5IFcuICBUaGF0IGlzIHdoYXQgQWxhbiBzYXcuCisKK0xpbnVzIGV4cGxhaW5zIHRoZSBzaXR1YXRpb246CisKKyAgICBSZXZlcnRpbmcgYSByZWd1bGFyIGNvbW1pdCBqdXN0IGVmZmVjdGl2ZWx5IHVuZG9lcyB3aGF0IHRoYXQgY29tbWl0CisgICAgZGlkLCBhbmQgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHJldmVydGluZyBhIG1lcmdlIGNvbW1pdCBhbHNvCisgICAgdW5kb2VzIHRoZSBfZGF0YV8gdGhhdCB0aGUgY29tbWl0IGNoYW5nZWQsIGJ1dCBpdCBkb2VzIGFic29sdXRlbHkKKyAgICBub3RoaW5nIHRvIHRoZSBlZmZlY3RzIG9uIF9oaXN0b3J5XyB0aGF0IHRoZSBtZXJnZSBoYWQuCisKKyAgICBTbyB0aGUgbWVyZ2Ugd2lsbCBzdGlsbCBleGlzdCwgYW5kIGl0IHdpbGwgc3RpbGwgYmUgc2VlbiBhcyBqb2luaW5nCisgICAgdGhlIHR3byBicmFuY2hlcyB0b2dldGhlciwgYW5kIGZ1dHVyZSBtZXJnZXMgd2lsbCBzZWUgdGhhdCBtZXJnZSBhcworICAgIHRoZSBsYXN0IHNoYXJlZCBzdGF0ZSAtIGFuZCB0aGUgcmV2ZXJ0IHRoYXQgcmV2ZXJ0ZWQgdGhlIG1lcmdlIGJyb3VnaHQKKyAgICBpbiB3aWxsIG5vdCBhZmZlY3QgdGhhdCBhdCBhbGwuCisKKyAgICBTbyBhICJyZXZlcnQiIHVuZG9lcyB0aGUgZGF0YSBjaGFuZ2VzLCBidXQgaXQncyB2ZXJ5IG11Y2ggX25vdF8gYW4KKyAgICAidW5kbyIgaW4gdGhlIHNlbnNlIHRoYXQgaXQgZG9lc24ndCB1bmRvIHRoZSBlZmZlY3RzIG9mIGEgY29tbWl0IG9uCisgICAgdGhlIHJlcG9zaXRvcnkgaGlzdG9yeS4KKworICAgIFNvIGlmIHlvdSB0aGluayBvZiAicmV2ZXJ0IiBhcyAidW5kbyIsIHRoZW4geW91J3JlIGdvaW5nIHRvIGFsd2F5cworICAgIG1pc3MgdGhpcyBwYXJ0IG9mIHJldmVydHMuIFllcywgaXQgdW5kb2VzIHRoZSBkYXRhLCBidXQgbm8sIGl0IGRvZXNuJ3QKKyAgICB1bmRvIGhpc3RvcnkuCisKK0luIHN1Y2ggYSBzaXR1YXRpb24sIHlvdSB3b3VsZCB3YW50IHRvIGZpcnN0IHJldmVydCB0aGUgcHJldmlvdXMgcmV2ZXJ0LAord2hpY2ggd291bGQgbWFrZSB0aGUgaGlzdG9yeSBsb29rIGxpa2UgdGhpczoKKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14LS0tWQorICAgICAgICAgICAgICAgLworICAgICAgIC0tLUEtLS1CLS0tLS0tLS0tLS0tLS0tLS0tLUMtLS1ECisKK3doZXJlIFkgaXMgdGhlIHJldmVydCBvZiBXLiAgU3VjaCBhICJyZXZlcnQgb2YgdGhlIHJldmVydCIgY2FuIGJlIGRvbmUKK3dpdGg6CisKKyAgICAkIGdpdCByZXZlcnQgVworCitUaGlzIGhpc3Rvcnkgd291bGQgKGlnbm9yaW5nIHBvc3NpYmxlIGNvbmZsaWN0cyBiZXR3ZWVuIHdoYXQgVyBhbmQgVy4uWQorY2hhbmdlZCkgYmUgZXF1aXZhbGVudCB0byBub3QgaGF2aW5nIFcgb3IgWSBhdCBhbGwgaW4gdGhlIGhpc3Rvcnk6CisKKyAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS0tLS0teC0tLS0KKyAgICAgICAgICAgICAgIC8KKyAgICAgICAtLS1BLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS1DLS0tRAorCithbmQgbWVyZ2luZyB0aGUgc2lkZSBicmFuY2ggYWdhaW4gd2lsbCBub3QgaGF2ZSBjb25mbGljdCBhcmlzaW5nIGZyb20gYW4KK2VhcmxpZXIgcmV2ZXJ0IGFuZCByZXZlcnQgb2YgdGhlIHJldmVydC4KKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLS0tLS14LS0tLS0tLSoKKyAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAtLS1BLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS1DLS0tRAorCitPZiBjb3Vyc2UgdGhlIGNoYW5nZXMgbWFkZSBpbiBDIGFuZCBEIHN0aWxsIGNhbiBjb25mbGljdCB3aXRoIHdoYXQgd2FzCitkb25lIGJ5IGFueSBvZiB0aGUgeCwgYnV0IHRoYXQgaXMganVzdCBhIG5vcm1hbCBtZXJnZSBjb25mbGljdC4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBkZXZlbG9wZXJzIG9mIHRoZSBzaWRlIGJyYW5jaCBkaXNjYXJkZWQgdGhlaXIKK2ZhdWx0eSBBIGFuZCBCLCBhbmQgcmVkb25lIHRoZSBjaGFuZ2VzIG9uIHRvcCBvZiB0aGUgdXBkYXRlZCBtYWlubGluZQorYWZ0ZXIgdGhlIHJldmVydCwgdGhlIGhpc3Rvcnkgd291bGQgaGF2ZSBsb29rZWQgbGlrZSB0aGlzOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS14CisgICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICBcCisgICAgICAgLS0tQS0tLUIgICAgICAgICAgICAgICAgICAgQSctLUInLS1DJworCitJZiB5b3UgcmV2ZXJ0ZWQgdGhlIHJldmVydCBpbiBzdWNoIGEgY2FzZSBhcyBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZToKKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14LS0teC0tLVktLS0qCisgICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICBcICAgICAgICAgLworICAgICAgIC0tLUEtLS1CICAgICAgICAgICAgICAgICAgIEEnLS1CJy0tQycKKword2hlcmUgWSBpcyB0aGUgcmV2ZXJ0IG9mIFcsIEEnIGFuZCBCJyBhcmUgcmVyb2xsZWQgQSBhbmQgQiwgYW5kIHRoZXJlIG1heQorYWxzbyBiZSBhIGZ1cnRoZXIgZml4LXVwIEMnIG9uIHRoZSBzaWRlIGJyYW5jaC4gIGAiZGlmZiBZXi4uWSJgIGlzIHNpbWlsYXIKK3RvIGAiZGlmZiAtUiBXXi4uVyJgICh3aGljaCBpbiB0dXJuIG1lYW5zIGl0IGlzIHNpbWlsYXIgdG8gYCJkaWZmIE1eLi5NImApLAorYW5kIGAiZGlmZiBBJ14uLkMnImAgYnkgZGVmaW5pdGlvbiB3b3VsZCBiZSBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgZnJvbSB0aGF0LAorYmVjYXVzZSBpdCBpcyBhIHJlcm9sbGVkIHNlcmllcyBvZiB0aGUgZWFybGllciBjaGFuZ2UuICBUaGVyZSB3aWxsIGJlIGEKK2xvdCBvZiBvdmVybGFwcGluZyBjaGFuZ2VzIHRoYXQgcmVzdWx0IGluIGNvbmZsaWN0cy4gIFNvIGRvIG5vdCBkbyAicmV2ZXJ0CitvZiByZXZlcnQiIGJsaW5kbHkgd2l0aG91dCB0aGlua2luZy4uCisKKyAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teC0tLXgKKyAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgIFwKKyAgICAgICAtLS1BLS0tQiAgICAgICAgICAgICAgICAgICBBJy0tQictLUMnCisKK0luIHRoZSBoaXN0b3J5IHdpdGggcmViYXNlZCBzaWRlIGJyYW5jaCwgVyAoYW5kIE0pIGFyZSBiZWhpbmQgdGhlIG1lcmdlCitiYXNlIG9mIHRoZSB1cGRhdGVkIGJyYW5jaCBhbmQgdGhlIHRpcCBvZiB0aGUgbWFpbmxpbmUsIGFuZCB0aGV5IHNob3VsZAorbWVyZ2Ugd2l0aG91dCB0aGUgcGFzdCBmYXVsdHkgbWVyZ2UgYW5kIGl0cyByZXZlcnQgZ2V0dGluZyBpbiB0aGUgd2F5LgorCitUbyByZWNhcCwgdGhlc2UgYXJlIHR3byB2ZXJ5IGRpZmZlcmVudCBzY2VuYXJpb3MsIGFuZCB0aGV5IHdhbnQgdHdvIHZlcnkKK2RpZmZlcmVudCByZXNvbHV0aW9uIHN0cmF0ZWdpZXM6CisKKyAtIElmIHRoZSBmYXVsdHkgc2lkZSBicmFuY2ggd2FzIGZpeGVkIGJ5IGFkZGluZyBjb3JyZWN0aW9ucyBvbiB0b3AsIHRoZW4KKyAgIGRvaW5nIGEgcmV2ZXJ0IG9mIHRoZSBwcmV2aW91cyByZXZlcnQgd291bGQgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorCisgLSBJZiB0aGUgZmF1bHR5IHNpZGUgYnJhbmNoIHdob3NlIGVmZmVjdHMgd2VyZSBkaXNjYXJkZWQgYnkgYW4gZWFybGllcgorICAgcmV2ZXJ0IG9mIGEgbWVyZ2Ugd2FzIHJlYnVpbHQgZnJvbSBzY3JhdGNoIChpLmUuIHJlYmFzaW5nIGFuZCBmaXhpbmcsCisgICBhcyB5b3Ugc2VlbSB0byBoYXZlIGludGVycHJldGVkKSwgdGhlbiByZS1tZXJnaW5nIHRoZSByZXN1bHQgd2l0aG91dAorICAgZG9pbmcgYW55dGhpbmcgZWxzZSBmYW5jeSB3b3VsZCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAoU2VlIHRoZSBBRERFTkRVTSBiZWxvdyBmb3IgaG93IHRvIHJlYnVpbGQgYSBicmFuY2ggZnJvbSBzY3JhdGNoCisgICB3aXRob3V0IGNoYW5naW5nIGl0cyBvcmlnaW5hbCBicmFuY2hpbmctb2ZmIHBvaW50LikKKworSG93ZXZlciwgdGhlcmUgYXJlIHRoaW5ncyB0byBrZWVwIGluIG1pbmQgd2hlbiByZXZlcnRpbmcgYSBtZXJnZSAoYW5kCityZXZlcnRpbmcgc3VjaCBhIHJldmVydCkuCisKK0ZvciBleGFtcGxlLCB0aGluayBhYm91dCB3aGF0IHJldmVydGluZyBhIG1lcmdlIChhbmQgdGhlbiByZXZlcnRpbmcgdGhlCityZXZlcnQpIGRvZXMgdG8gYmlzZWN0YWJpbGl0eS4gSWdub3JlIHRoZSBmYWN0IHRoYXQgdGhlIHJldmVydCBvZiBhIHJldmVydAoraXMgdW5kb2luZyBpdCAtIGp1c3QgdGhpbmsgb2YgaXQgYXMgYSAic2luZ2xlIGNvbW1pdCB0aGF0IGRvZXMgYSBsb3QiLgorQmVjYXVzZSB0aGF0IGlzIHdoYXQgaXQgZG9lcy4KKworV2hlbiB5b3UgaGF2ZSBhIHByb2JsZW0geW91IGFyZSBjaGFzaW5nIGRvd24sIGFuZCB5b3UgaGl0IGEgInJldmVydCB0aGlzCittZXJnZSIsIHdoYXQgeW91J3JlIGhpdHRpbmcgaXMgZXNzZW50aWFsbHkgYSBzaW5nbGUgY29tbWl0IHRoYXQgY29udGFpbnMKK2FsbCB0aGUgY2hhbmdlcyAoYnV0IG9idmlvdXNseSBpbiByZXZlcnNlKSBvZiBhbGwgdGhlIGNvbW1pdHMgdGhhdCBnb3QKK21lcmdlZC4gU28gaXQncyBkZWJ1Z2dpbmcgaGVsbCwgYmVjYXVzZSBub3cgeW91IGRvbid0IGhhdmUgbG90cyBvZiBzbWFsbAorY2hhbmdlcyB0aGF0IHlvdSBjYW4gdHJ5IHRvIHBpbnBvaW50IHdoaWNoIF9wYXJ0XyBvZiBpdCBjaGFuZ2VzLgorCitCdXQgZG9lcyBpdCBhbGwgd29yaz8gU3VyZSBpdCBkb2VzLiBZb3UgY2FuIHJldmVydCBhIG1lcmdlLCBhbmQgZnJvbSBhCitwdXJlbHkgdGVjaG5pY2FsIGFuZ2xlLCBHaXQgZGlkIGl0IHZlcnkgbmF0dXJhbGx5IGFuZCBoYWQgbm8gcmVhbAordHJvdWJsZXMuIEl0IGp1c3QgY29uc2lkZXJlZCBpdCBhIGNoYW5nZSBmcm9tICJzdGF0ZSBiZWZvcmUgbWVyZ2UiIHRvCisic3RhdGUgYWZ0ZXIgbWVyZ2UiLCBhbmQgdGhhdCB3YXMgaXQuIE5vdGhpbmcgY29tcGxpY2F0ZWQsIG5vdGhpbmcgb2RkLAorbm90aGluZyByZWFsbHkgZGFuZ2Vyb3VzLiBHaXQgd2lsbCBkbyBpdCB3aXRob3V0IGV2ZW4gdGhpbmtpbmcgYWJvdXQgaXQuCisKK1NvIGZyb20gYSB0ZWNobmljYWwgYW5nbGUsIHRoZXJlJ3Mgbm90aGluZyB3cm9uZyB3aXRoIHJldmVydGluZyBhIG1lcmdlLAorYnV0IGZyb20gYSB3b3JrZmxvdyBhbmdsZSBpdCdzIHNvbWV0aGluZyB0aGF0IHlvdSBnZW5lcmFsbHkgc2hvdWxkIHRyeSB0bworYXZvaWQuCisKK0lmIGF0IGFsbCBwb3NzaWJsZSwgZm9yIGV4YW1wbGUsIGlmIHlvdSBmaW5kIGEgcHJvYmxlbSB0aGF0IGdvdCBtZXJnZWQKK2ludG8gdGhlIG1haW4gdHJlZSwgcmF0aGVyIHRoYW4gcmV2ZXJ0IHRoZSBtZXJnZSwgdHJ5IF9yZWFsbHlfIGhhcmQgdG8KK2Jpc2VjdCB0aGUgcHJvYmxlbSBkb3duIGludG8gdGhlIGJyYW5jaCB5b3UgbWVyZ2VkLCBhbmQganVzdCBmaXggaXQsIG9yCit0cnkgdG8gcmV2ZXJ0IHRoZSBpbmRpdmlkdWFsIGNvbW1pdCB0aGF0IGNhdXNlZCBpdC4KKworWWVzLCBpdCdzIG1vcmUgY29tcGxleCwgYW5kIG5vLCBpdCdzIG5vdCBhbHdheXMgZ29pbmcgdG8gd29yayAoc29tZXRpbWVzCit0aGUgYW5zd2VyIGlzOiAib29wcywgSSByZWFsbHkgc2hvdWxkbid0IGhhdmUgbWVyZ2VkIGl0LCBiZWNhdXNlIGl0IHdhc24ndAorcmVhZHkgeWV0LCBhbmQgSSByZWFsbHkgbmVlZCB0byB1bmRvIF9hbGxfIG9mIHRoZSBtZXJnZSIpLiBTbyB0aGVuIHlvdQorcmVhbGx5IHNob3VsZCByZXZlcnQgdGhlIG1lcmdlLCBidXQgd2hlbiB5b3Ugd2FudCB0byByZS1kbyB0aGUgbWVyZ2UsIHlvdQorbm93IG5lZWQgdG8gZG8gaXQgYnkgcmV2ZXJ0aW5nIHRoZSByZXZlcnQuCisKK0FEREVORFVNCisKK1NvbWV0aW1lcyB5b3UgaGF2ZSB0byByZXdyaXRlIG9uZSBvZiBhIHRvcGljIGJyYW5jaCdzIGNvbW1pdHMgKmFuZCogeW91IGNhbid0CitjaGFuZ2UgdGhlIHRvcGljJ3MgYnJhbmNoaW5nLW9mZiBwb2ludC4gIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgKKyAgXCAgICAgICAgIC8KKyAgIEEtLS1CLS0tQworCit3aGVyZSBjb21taXQgVyByZXZlcnRlZCBjb21taXQgTSBiZWNhdXNlIGl0IHR1cm5lZCBvdXQgdGhhdCBjb21taXQgQiB3YXMgd3JvbmcKK2FuZCBuZWVkcyB0byBiZSByZXdyaXR0ZW4sIGJ1dCB5b3UgbmVlZCB0aGUgcmV3cml0dGVuIHRvcGljIHRvIHN0aWxsIGJyYW5jaAorZnJvbSBjb21taXQgUCAocGVyaGFwcyBQIGlzIGEgYnJhbmNoaW5nLW9mZiBwb2ludCBmb3IgeWV0IGFub3RoZXIgYnJhbmNoLCBhbmQKK3lvdSB3YW50IGJlIGFibGUgdG8gbWVyZ2UgdGhlIHRvcGljIGludG8gYm90aCBicmFuY2hlcykuCisKK1RoZSBuYXR1cmFsIHRoaW5nIHRvIGRvIGluIHRoaXMgY2FzZSBpcyB0byBjaGVja291dCB0aGUgQS1CLUMgYnJhbmNoIGFuZCB1c2UKKyJyZWJhc2UgLWkgUCIgdG8gY2hhbmdlIGNvbW1pdCBCLiAgSG93ZXZlciB0aGlzIGRvZXMgbm90IHJld3JpdGUgY29tbWl0IEEsCitiZWNhdXNlICJyZWJhc2UgLWkiIGJ5IGRlZmF1bHQgZmFzdC1mb3J3YXJkcyBvdmVyIGFueSBpbml0aWFsIGNvbW1pdHMgc2VsZWN0ZWQKK3dpdGggdGhlICJwaWNrIiBjb21tYW5kLiAgU28geW91IGVuZCB1cCB3aXRoIHRoaXM6CisKKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teAorICBcICAgICAgICAgLworICAgQS0tLUItLS1DICAgPC0tIG9sZCBicmFuY2gKKyAgICBcCisgICAgIEInLS0tQycgICA8LS0gbmFpdmVseSByZXdyaXR0ZW4gYnJhbmNoCisKK1RvIG1lcmdlIEEtQictQycgaW50byB0aGUgbWFpbmxpbmUgYnJhbmNoIHlvdSB3b3VsZCBzdGlsbCBoYXZlIHRvIGZpcnN0IHJldmVydAorY29tbWl0IFcgaW4gb3JkZXIgdG8gcGljayB1cCB0aGUgY2hhbmdlcyBpbiBBLCBidXQgdGhlbiBpdCdzIGxpa2VseSB0aGF0IHRoZQorY2hhbmdlcyBpbiBCJyB3aWxsIGNvbmZsaWN0IHdpdGggdGhlIG9yaWdpbmFsIEIgY2hhbmdlcyByZS1pbnRyb2R1Y2VkIGJ5IHRoZQorcmV2ZXJzaW9uIG9mIFcuCisKK0hvd2V2ZXIsIHlvdSBjYW4gYXZvaWQgdGhlc2UgcHJvYmxlbXMgaWYgeW91IHJlY3JlYXRlIHRoZSBlbnRpcmUgYnJhbmNoLAoraW5jbHVkaW5nIGNvbW1pdCBBOgorCisgICBBJy0tLUInLS0tQycgIDwtLSBjb21wbGV0ZWx5IHJld3JpdHRlbiBicmFuY2gKKyAgLworIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMKKworWW91IGNhbiBtZXJnZSBBJy1CJy1DJyBpbnRvIHRoZSBtYWlubGluZSBicmFuY2ggd2l0aG91dCB3b3JyeWluZyBhYm91dCBmaXJzdAorcmV2ZXJ0aW5nIFcuICBNYWlubGluZSdzIGhpc3Rvcnkgd291bGQgbG9vayBsaWtlIHRoaXM6CisKKyAgIEEnLS0tQictLS1DJy0tLS0tLS0tLS0tLS0tLS0tLQorICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14LS0tTTIKKyAgXCAgICAgICAgIC8KKyAgIEEtLS1CLS0tQworCitCdXQgaWYgeW91IGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gY2hhbmdlIGNvbW1pdCBBLCB0aGVuIHlvdSBuZWVkIHNvbWUgd2F5IHRvCityZWNyZWF0ZSBpdCBhcyBhIG5ldyBjb21taXQgd2l0aCB0aGUgc2FtZSBjaGFuZ2VzIGluIGl0LiAgVGhlIHJlYmFzZSBjb21tYW5kJ3MKKy0tbm8tZmYgb3B0aW9uIHByb3ZpZGVzIGEgd2F5IHRvIGRvIHRoaXM6CisKKyAgICAkIGdpdCByZWJhc2UgWy1pXSAtLW5vLWZmIFAKKworVGhlIC0tbm8tZmYgb3B0aW9uIGNyZWF0ZXMgYSBuZXcgYnJhbmNoIEEnLUInLUMnIHdpdGggYWxsLW5ldyBjb21taXRzIChhbGwgdGhlCitTSEEgSURzIHdpbGwgYmUgZGlmZmVyZW50KSBldmVuIGlmIGluIHRoZSBpbnRlcmFjdGl2ZSBjYXNlIHlvdSBvbmx5IGFjdHVhbGx5Cittb2RpZnkgY29tbWl0IEIuICBZb3UgY2FuIHRoZW4gbWVyZ2UgdGhpcyBuZXcgYnJhbmNoIGRpcmVjdGx5IGludG8gdGhlIG1haW5saW5lCiticmFuY2ggYW5kIGJlIHN1cmUgeW91J2xsIGdldCBhbGwgb2YgdGhlIGJyYW5jaCdzIGNoYW5nZXMuCisKK1lvdSBjYW4gYWxzbyB1c2UgLS1uby1mZiBpbiBjYXNlcyB3aGVyZSB5b3UganVzdCBhZGQgZXh0cmEgY29tbWl0cyB0byB0aGUgdG9waWMKK3RvIGZpeCBpdCB1cC4gIExldCdzIHJldmlzaXQgdGhlIHNpdHVhdGlvbiBkaXNjdXNzZWQgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgaG93dG86CisKKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teAorICBcICAgICAgICAgLworICAgQS0tLUItLS1DLS0tLS0tLS0tLS0tLS0tLUQtLS1FICAgPC0tIGZpeGVkLXVwIHRvcGljIGJyYW5jaAorCitBdCB0aGlzIHBvaW50LCB5b3UgY2FuIHVzZSAtLW5vLWZmIHRvIHJlY3JlYXRlIHRoZSB0b3BpYyBicmFuY2g6CisKKyAgICAkIGdpdCBjaGVja291dCBFCisgICAgJCBnaXQgcmViYXNlIC0tbm8tZmYgUAorCit5aWVsZGluZworCisgICBBJy0tLUInLS0tQyctLS0tLS0tLS0tLS1EJy0tLUUnICA8LS0gcmVjcmVhdGVkIHRvcGljIGJyYW5jaAorICAvCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgKKyAgXCAgICAgICAgIC8KKyAgIEEtLS1CLS0tQy0tLS0tLS0tLS0tLS0tLS1ELS0tRQorCitZb3UgY2FuIG1lcmdlIHRoZSByZWNyZWF0ZWQgYnJhbmNoIGludG8gdGhlIG1haW5saW5lIHdpdGhvdXQgcmV2ZXJ0aW5nIGNvbW1pdCBXLAorYW5kIG1haW5saW5lJ3MgaGlzdG9yeSB3aWxsIGxvb2sgbGlrZSB0aGlzOgorCisgICBBJy0tLUInLS0tQyctLS0tLS0tLS0tLS1EJy0tLUUnCisgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS1NMgorICBcICAgICAgICAgLworICAgQS0tLUItLS1DCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1icmFuY2gtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OTUwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1icmFuY2gtcmViYXNlLnR4dApAQCAtMCwwICsxLDE4NyBAQAorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorVG86IGdpdEB2Z2VyLmtlcm5lbC5vcmcKK1N1YmplY3Q6IFtIT1dUT10gUmV2ZXJ0aW5nIGFuIGV4aXN0aW5nIGNvbW1pdAorQWJzdHJhY3Q6IEluIHRoaXMgYXJ0aWNsZSwgSkMgZ2l2ZXMgYSBzbWFsbCByZWFsLWxpZmUgZXhhbXBsZSBvZiB1c2luZworICdnaXQgcmV2ZXJ0JyBjb21tYW5kLCBhbmQgdXNpbmcgYSB0ZW1wb3JhcnkgYnJhbmNoIGFuZCB0YWcgZm9yIHNhZmV0eQorIGFuZCBlYXNpZXIgc2FuaXR5IGNoZWNraW5nLgorRGF0ZTogTW9uLCAyOSBBdWcgMjAwNSAyMTozOTowMiAtMDcwMAorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCitNZXNzYWdlLUlEOiA8N3ZvZTdnM3VvcC5mc2ZAYXNzaWduZWQtYnktZGhjcC5jb3gubmV0PgorCitIb3cgdG8gcmV2ZXJ0IGFuIGV4aXN0aW5nIGNvbW1pdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT25lIG9mIHRoZSBjaGFuZ2VzIEkgcHVsbGVkIGludG8gdGhlICdtYXN0ZXInIGJyYW5jaCB0dXJucyBvdXQgdG8KK2JyZWFrIGJ1aWxkaW5nIEdpdCB3aXRoIEdDQyAyLjk1LiAgV2hpbGUgdGhleSB3ZXJlIHdlbGwtaW50ZW50aW9uZWQKK3BvcnRhYmlsaXR5IGZpeGVzLCBrZWVwaW5nIHRoaW5ncyB3b3JraW5nIHdpdGggZ2NjLTIuOTUgd2FzIGFsc28KK2ltcG9ydGFudC4gIEhlcmUgaXMgd2hhdCBJIGRpZCB0byByZXZlcnQgdGhlIGNoYW5nZSBpbiB0aGUgJ21hc3RlcicKK2JyYW5jaCBhbmQgdG8gYWRqdXN0IHRoZSAncHUnIGJyYW5jaCwgdXNpbmcgY29yZSBHaXQgdG9vbHMgYW5kCitiYXJlYm9uZSBQb3JjZWxhaW4uCisKK0ZpcnN0LCBwcmVwYXJlIGEgdGhyb3ctYXdheSBicmFuY2ggaW4gY2FzZSBJIHNjcmV3IHRoaW5ncyB1cC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiByZXZlcnQtYzk5IG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyBJIGFtIG9uIHRoZSAncmV2ZXJ0LWM5OScgYnJhbmNoLiAgTGV0J3MgZmlndXJlIG91dCB3aGljaCBjb21taXQgdG8KK3JldmVydC4gIEkgaGFwcGVuIHRvIGtub3cgdGhhdCB0aGUgdG9wIG9mIHRoZSAnbWFzdGVyJyBicmFuY2ggaXMgYQorbWVyZ2UsIGFuZCBpdHMgc2Vjb25kIHBhcmVudCAoaS5lLiBmb3JlaWduIGNvbW1pdCBJIG1lcmdlZCBmcm9tKSBoYXMKK3RoZSBjaGFuZ2UgSSB3b3VsZCB3YW50IHRvIHVuZG8uICBGdXJ0aGVyIEkgaGFwcGVuIHRvIGtub3cgdGhhdCB0aGF0CittZXJnZSBpbnRyb2R1Y2VkIDUgY29tbWl0cyBvciBzbzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLW1vcmU9NCBtYXN0ZXIgbWFzdGVyXjIgfCBoZWFkCisqIFttYXN0ZXJdIE1lcmdlIHJlZnMvaGVhZHMvcG9ydGFibGUgZnJvbSBodHRwOi8vd3d3LmNzLmJlcmtlbGV5Li4uLgorICEgW21hc3Rlcl4yXSBSZXBsYWNlIEM5OSBhcnJheSBpbml0aWFsaXplcnMgd2l0aCBjb2RlLgorLS0KKy0gIFttYXN0ZXJdIE1lcmdlIHJlZnMvaGVhZHMvcG9ydGFibGUgZnJvbSBodHRwOi8vd3d3LmNzLmJlcmtlbGV5Li4uLgorKisgW21hc3Rlcl4yXSBSZXBsYWNlIEM5OSBhcnJheSBpbml0aWFsaXplcnMgd2l0aCBjb2RlLgorKisgW21hc3Rlcl4yfjFdIFJlcGxhY2UgdW5zZXRlbnYoKSBhbmQgc2V0ZW52KCkgd2l0aCBvbGRlciBwdXRlbnYoKS4KKyorIFttYXN0ZXJeMn4yXSBJbmNsdWRlIHN5cy90aW1lLmggaW4gZGFlbW9uLmMuCisqKyBbbWFzdGVyXjJ+M10gRml4ID86IHN0YXRlbWVudHMuCisqKyBbbWFzdGVyXjJ+NF0gUmVwbGFjZSB6ZXJvLWxlbmd0aCBhcnJheSBkZWNscyB3aXRoIFtdLgorKiAgW21hc3Rlcn4xXSB0dXRvcmlhbCBub3RlIGFib3V0IGdpdCBicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJy0tbW9yZT00JyBhYm92ZSBtZWFucyAiYWZ0ZXIgd2UgcmVhY2ggdGhlIG1lcmdlIGJhc2Ugb2YgcmVmcywKK3Nob3cgdW50aWwgd2UgZGlzcGxheSBmb3VyIG1vcmUgY29tbW9uIGNvbW1pdHMiLiAgVGhhdCBsYXN0IGNvbW1pdAord291bGQgaGF2ZSBiZWVuIHdoZXJlIHRoZSAicG9ydGFibGUiIGJyYW5jaCB3YXMgZm9ya2VkIGZyb20gdGhlIG1haW4KK2dpdC5naXQgcmVwb3NpdG9yeSwgc28gdGhpcyB3b3VsZCBzaG93IGV2ZXJ5dGhpbmcgb24gYm90aCBicmFuY2hlcworc2luY2UgdGhlbi4gIEkganVzdCBsaW1pdGVkIHRoZSBvdXRwdXQgdG8gdGhlIGZpcnN0IGhhbmRmdWwgdXNpbmcKKydoZWFkJy4KKworTm93IEkga25vdyAnbWFzdGVyXjJ+NCcgKHByb25vdW5jZSBpdCBhcyAiZmluZCB0aGUgc2Vjb25kIHBhcmVudCBvZgordGhlICdtYXN0ZXInLCBhbmQgdGhlbiBnbyBmb3VyIGdlbmVyYXRpb25zIGJhY2sgZm9sbG93aW5nIHRoZSBmaXJzdAorcGFyZW50IikgaXMgdGhlIG9uZSBJIHdvdWxkIHdhbnQgdG8gcmV2ZXJ0LiAgU2luY2UgSSBhbHNvIHdhbnQgdG8gc2F5Cit3aHkgSSBhbSByZXZlcnRpbmcgaXQsIHRoZSAnLW4nIGZsYWcgaXMgZ2l2ZW4gdG8gJ2dpdCByZXZlcnQnLiAgVGhpcworcHJldmVudHMgaXQgZnJvbSBhY3R1YWxseSBtYWtpbmcgYSBjb21taXQsIGFuZCBpbnN0ZWFkICdnaXQgcmV2ZXJ0JworbGVhdmVzIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaXQgd2FudGVkIHRvIHVzZSBpbiAnLm1zZycgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZXZlcnQgLW4gbWFzdGVyXjJ+NAorJCBjYXQgLm1zZworUmV2ZXJ0ICJSZXBsYWNlIHplcm8tbGVuZ3RoIGFycmF5IGRlY2xzIHdpdGggW10uIgorCitUaGlzIHJldmVydHMgNmM1ZjliYWEzYmMwZDYzZTE0MWUwYWZjMjMxMTAyMDUzNzk5MDVhNCBjb21taXQuCiskIGdpdCBkaWZmIEhFQUQgOyMgdG8gbWFrZSBzdXJlIHdoYXQgd2UgYXJlIHJldmVydGluZyBtYWtlcyBzZW5zZS4KKyQgbWFrZSBDQz1nY2MtMi45NSBjbGVhbiB0ZXN0IDsjIG1ha2Ugc3VyZSBpdCBmaXhlZCB0aGUgYnJlYWthZ2UuCiskIG1ha2UgY2xlYW4gdGVzdCA7IyBtYWtlIHN1cmUgaXQgZGlkIG5vdCBjYXVzZSBvdGhlciBicmVha2FnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmV2ZXJ0ZWQgY2hhbmdlIG1ha2VzIHNlbnNlIChmcm9tIHJlYWRpbmcgdGhlICdkaWZmJyBvdXRwdXQpLCBkb2VzCitmaXggdGhlIHByb2JsZW0gKGZyb20gJ21ha2UgQ0M9Z2NjLTIuOTUnIHRlc3QpLCBhbmQgZG9lcyBub3QgY2F1c2UgbmV3CiticmVha2FnZSAoZnJvbSB0aGUgbGFzdCAnbWFrZSB0ZXN0JykuICBJJ20gcmVhZHkgdG8gY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtYSAtcyA7IyByZWFkIC5tc2cgaW50byB0aGUgbG9nLAorICAgICAgICAgICAgICAgICAgICAjIGFuZCBleHBsYWluIHdoeSBJIGFtIHJldmVydGluZy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGNvdWxkIGhhdmUgc2NyZXdlZCB1cCBpbiBhbnkgb2YgdGhlIGFib3ZlIHN0ZXBzLCBidXQgaW4gdGhlIHdvcnN0CitjYXNlIEkgY291bGQganVzdCBoYXZlIGRvbmUgJ2dpdCBjaGVja291dCBtYXN0ZXInIHRvIHN0YXJ0IG92ZXIuCitGb3J0dW5hdGVseSBJIGRpZCBub3QgaGF2ZSB0bzsgd2hhdCBJIGhhdmUgaW4gdGhlIGN1cnJlbnQgYnJhbmNoCisncmV2ZXJ0LWM5OScgaXMgd2hhdCBJIHdhbnQuICBTbyBtZXJnZSB0aGF0IGJhY2sgaW50byAnbWFzdGVyJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IG1lcmdlIHJldmVydC1jOTkgOyMgdGhpcyBzaG91bGQgYmUgYSBmYXN0LWZvcndhcmQKK1VwZGF0aW5nIGZyb20gMTBkNzgxYjljYWE0ZjcxNDk1YzdiMzQ5NjNiZWYxMzcyMTZmODZhOCB0byBlM2E2OTNjLi4uCisgY2FjaGUuaCAgICAgICAgfCAgICA4ICsrKystLS0tCisgY29tbWl0LmMgICAgICAgfCAgICAyICstCisgbHMtZmlsZXMuYyAgICAgfCAgICAyICstCisgcmVjZWl2ZS1wYWNrLmMgfCAgICAyICstCisgc2VydmVyLWluZm8uYyAgfCAgICAyICstCisgNSBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgbm8gbmVlZCB0byByZWRvIHRoZSB0ZXN0IGF0IHRoaXMgcG9pbnQuICBXZSBmYXN0LWZvcndhcmRlZAorYW5kIHdlIGtub3cgJ21hc3RlcicgbWF0Y2hlcyAncmV2ZXJ0LWM5OScgZXhhY3RseS4gIEluIGZhY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBtYXN0ZXIuLnJldmVydC1jOTkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzYXlzIG5vdGhpbmcuCisKK1RoZW4gd2UgcmViYXNlIHRoZSAncHUnIGJyYW5jaCBhcyB1c3VhbC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBwdQorJCBnaXQgdGFnIHB1LWFuY2hvciBwdQorJCBnaXQgcmViYXNlIG1hc3RlcgorKiBBcHBseWluZzogUmVkbyAicmV2ZXJ0IiB1c2luZyB0aHJlZS13YXkgbWVyZ2UgbWFjaGluZXJ5LgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IFJlbW92ZSBnaXQtYXBwbHktcGF0Y2gtc2NyaXB0LgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KK1NpbXBsZSBjaGVycnktcGljayBmYWlsczsgdHJ5aW5nIEF1dG9tYXRpYyBjaGVycnktcGljay4KK1JlbW92aW5nIERvY3VtZW50YXRpb24vZ2l0LWFwcGx5LXBhdGNoLXNjcmlwdC50eHQKK1JlbW92aW5nIGdpdC1hcHBseS1wYXRjaC1zY3JpcHQKKyogQXBwbHlpbmc6IERvY3VtZW50ICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIKK0ZpcnN0IHRyeWluZyBzaW1wbGUgbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hlcnJ5LXBpY2suCisqIEFwcGx5aW5nOiBtYWlsaW5mbyBhbmQgYXBwbHltYm94IHVwZGF0ZXMKK0ZpcnN0IHRyeWluZyBzaW1wbGUgbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hlcnJ5LXBpY2suCisqIEFwcGx5aW5nOiBTaG93IGNvbW1pdHMgaW4gdG9wbyBvcmRlciBhbmQgbmFtZSBhbGwgY29tbWl0cy4KK0ZpcnN0IHRyeWluZyBzaW1wbGUgbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hlcnJ5LXBpY2suCisqIEFwcGx5aW5nOiBNb3JlIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KK0ZpcnN0IHRyeWluZyBzaW1wbGUgbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hlcnJ5LXBpY2suCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHRlbXBvcmFyeSB0YWcgJ3B1LWFuY2hvcicgaXMgbWUganVzdCBiZWluZyBjYXJlZnVsLCBpbiBjYXNlICdnaXQKK3JlYmFzZScgc2NyZXdzIHVwLiAgQWZ0ZXIgdGhpcywgSSBjYW4gZG8gdGhlc2UgZm9yIHNhbml0eSBjaGVjazoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIHB1LWFuY2hvci4ucHUgOyMgbWFrZSBzdXJlIHdlIGdvdCB0aGUgbWFzdGVyIGZpeC4KKyQgbWFrZSBDQz1nY2MtMi45NSBjbGVhbiB0ZXN0IDsjIG1ha2Ugc3VyZSBpdCBmaXhlZCB0aGUgYnJlYWthZ2UuCiskIG1ha2UgY2xlYW4gdGVzdCA7IyBtYWtlIHN1cmUgaXQgZGlkIG5vdCBjYXVzZSBvdGhlciBicmVha2FnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVyeXRoaW5nIGlzIGluIHRoZSBnb29kIG9yZGVyLiAgSSBkbyBub3QgbmVlZCB0aGUgdGVtcG9yYXJ5IGJyYW5jaAorb3IgdGFnIGFueW1vcmUsIHNvIHJlbW92ZSB0aGVtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgcm0gLWYgLmdpdC9yZWZzL3RhZ3MvcHUtYW5jaG9yCiskIGdpdCBicmFuY2ggLWQgcmV2ZXJ0LWM5OQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IHdhcyBhbiBlbWVyZ2VuY3kgZml4LCBzbyB3ZSBtaWdodCBhcyB3ZWxsIG1lcmdlIGl0IGludG8gdGhlCisncmVsZWFzZSBjYW5kaWRhdGUnIGJyYW5jaCwgYWx0aG91Z2ggSSBleHBlY3QgdGhlIG5leHQgcmVsZWFzZSB3b3VsZAorYmUgc29tZSBkYXlzIG9mZjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCByYworJCBnaXQgcHVsbCAuIG1hc3RlcgorUGFja2luZyAwIG9iamVjdHMKK1VucGFja2luZyAwIG9iamVjdHMKKworKiBjb21taXQtaXNoOiBlM2E2OTNjLi4uCXJlZnMvaGVhZHMvbWFzdGVyIGZyb20gLgorVHJ5aW5nIHRvIG1lcmdlIGUzYTY5M2MuLi4gaW50byA4YzFmNWYwLi4uIHVzaW5nIDEwZDc4MWIuLi4KK0NvbW1pdHRlZCBtZXJnZSA3ZmI5YjcyNjJhMWQxZTBhNDdiYmZkY2JiY2Y1MGNlMDYzNWQzZjhmCisgY2FjaGUuaCAgICAgICAgfCAgICA4ICsrKystLS0tCisgY29tbWl0LmMgICAgICAgfCAgICAyICstCisgbHMtZmlsZXMuYyAgICAgfCAgICAyICstCisgcmVjZWl2ZS1wYWNrLmMgfCAgICAyICstCisgc2VydmVyLWluZm8uYyAgfCAgICAyICstCisgNSBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5kIHRoZSBmaW5hbCByZXBvc2l0b3J5IHN0YXR1cyBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2ggLS1tb3JlPTEgbWFzdGVyIHB1IHJjCishIFttYXN0ZXJdIFJldmVydCAiUmVwbGFjZSB6ZXJvLWxlbmd0aCBhcnJheSBkZWNscyB3aXRoIFtdLiIKKyAhIFtwdV0gZ2l0LXJlcGFjazogQWRkIG9wdGlvbiB0byByZXBhY2sgYWxsIG9iamVjdHMuCisgICogW3JjXSBNZXJnZSByZWZzL2hlYWRzL21hc3RlciBmcm9tIC4KKy0tLQorICsgIFtwdV0gZ2l0LXJlcGFjazogQWRkIG9wdGlvbiB0byByZXBhY2sgYWxsIG9iamVjdHMuCisgKyAgW3B1fjFdIE1vcmUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorICsgIFtwdX4yXSBTaG93IGNvbW1pdHMgaW4gdG9wbyBvcmRlciBhbmQgbmFtZSBhbGwgY29tbWl0cy4KKyArICBbcHV+M10gbWFpbGluZm8gYW5kIGFwcGx5bWJveCB1cGRhdGVzCisgKyAgW3B1fjRdIERvY3VtZW50ICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIKKyArICBbcHV+NV0gUmVtb3ZlIGdpdC1hcHBseS1wYXRjaC1zY3JpcHQuCisgKyAgW3B1fjZdIFJlZG8gInJldmVydCIgdXNpbmcgdGhyZWUtd2F5IG1lcmdlIG1hY2hpbmVyeS4KKyAgLSBbcmNdIE1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyIGZyb20gLgorKysqIFttYXN0ZXJdIFJldmVydCAiUmVwbGFjZSB6ZXJvLWxlbmd0aCBhcnJheSBkZWNscyB3aXRoIFtdLiIKKyAgLSBbcmN+MV0gTWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgZnJvbSAuCisuLi4gW21hc3Rlcn4xXSBNZXJnZSByZWZzL2hlYWRzL3BvcnRhYmxlIGZyb20gaHR0cDovL3d3dy5jcy5iZXJrZWxleS4uLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiZTBkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQKQEAgLTAsMCArMSw5NCBAQAorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorU3ViamVjdDogU2VwYXJhdGluZyB0b3BpYyBicmFuY2hlcworQWJzdHJhY3Q6IEluIHRoaXMgYXJ0aWNsZSwgSkMgZGVzY3JpYmVzIGhvdyB0byBzZXBhcmF0ZSB0b3BpYyBicmFuY2hlcy4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gc2VwYXJhdGUgdG9waWMgYnJhbmNoZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHRleHQgd2FzIG9yaWdpbmFsbHkgYSBmb290bm90ZSB0byBhIGRpc2N1c3Npb24gYWJvdXQgdGhlCitiZWhhdmlvdXIgb2YgdGhlIGdpdCBkaWZmIGNvbW1hbmRzLgorCitPZnRlbiBJIGZpbmQgbXlzZWxmIGRvaW5nIHRoYXQgW3J1bm5pbmcgZGlmZiBhZ2FpbnN0IHNvbWV0aGluZyBvdGhlcgordGhhbiBIRUFEXSB3aGlsZSByZXdyaXRpbmcgbWVzc3kgZGV2ZWxvcG1lbnQgaGlzdG9yeS4gIEZvciBleGFtcGxlLCBJCitzdGFydCBkb2luZyBzb21lIHdvcmsgd2l0aG91dCBrbm93aW5nIGV4YWN0bHkgd2hlcmUgaXQgbGVhZHMsIGFuZCBlbmQKK3VwIHdpdGggYSBoaXN0b3J5IGxpa2UgdGhpczoKKworICAgICAgICAgICAgIm1hc3RlciIKKyAgICAgICAgby0tLW8KKyAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAidG9waWMiCisgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tbworCitBdCB0aGlzIHBvaW50LCAidG9waWMiIGNvbnRhaW5zIHNvbWV0aGluZyBJIGtub3cgSSB3YW50LCBidXQgaXQKK2NvbnRhaW5zIHR3byBjb25jZXB0cyB0aGF0IHR1cm5lZCBvdXQgdG8gYmUgY29tcGxldGVseSBpbmRlcGVuZGVudC4KK0FuZCBvZnRlbiwgb25lIHRvcGljIGNvbXBvbmVudCBpcyBsYXJnZXIgdGhhbiB0aGUgb3RoZXIuICBJdCBtYXkKK2NvbnRhaW4gbW9yZSB0aGFuIHR3byB0b3BpY3MuCisKK0luIG9yZGVyIHRvIHJld3JpdGUgdGhpcyBtZXNzIHRvIGJlIG1vcmUgbWFuYWdlYWJsZSwgSSB3b3VsZCBmaXJzdCBkbworImRpZmYgbWFzdGVyLi50b3BpYyIsIHRvIGV4dHJhY3QgdGhlIGNoYW5nZXMgaW50byBhIHNpbmdsZSBwYXRjaCwgc3RhcnQKK3BpY2tpbmcgcGllY2VzIGZyb20gaXQgdG8gZ2V0IGxvZ2ljYWxseSBzZWxmLWNvbnRhaW5lZCB1bml0cywgYW5kCitzdGFydCBidWlsZGluZyBvbiB0b3Agb2YgIm1hc3RlciI6CisKKyAgICAgICAgJCBnaXQgZGlmZiBtYXN0ZXIuLnRvcGljID5QLmRpZmYKKyAgICAgICAgJCBnaXQgY2hlY2tvdXQgLWIgdG9waWNBIG1hc3RlcgorICAgICAgICAuLi4gcGljayBhbmQgYXBwbHkgcGllY2VzIGZyb20gUC5kaWZmIHRvIGJ1aWxkCisgICAgICAgIC4uLiBjb21taXRzIG9uIHRvcGljQSBicmFuY2guCisKKyAgICAgICAgICAgICAgby0tLW8tLS1vCisgICAgICAgICAgICAgLyAgICAgICAgInRvcGljQSIKKyAgICAgICAgby0tLW8ibWFzdGVyIgorICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICJ0b3BpYyIKKyAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vCisKK0JlZm9yZSBkb2luZyBlYWNoIGNvbW1pdCBvbiAidG9waWNBIiBIRUFELCBJIHJ1biAiZGlmZiBIRUFEIgorYmVmb3JlIHVwZGF0ZS1pbmRleCB0aGUgYWZmZWN0ZWQgcGF0aHMsIG9yICJkaWZmIC0tY2FjaGVkIEhFQUQiCithZnRlci4gIEFsc28gSSB3b3VsZCBydW4gImRpZmYgLS1jYWNoZWQgbWFzdGVyIiB0byBtYWtlIHN1cmUKK3RoYXQgdGhlIGNoYW5nZXMgYXJlIG9ubHkgdGhlIG9uZXMgcmVsYXRlZCB0byAidG9waWNBIi4gIFVzdWFsbHkKK0kgZG8gdGhpcyBmb3Igc21hbGxlciB0b3BpY3MgZmlyc3QuCisKK0FmdGVyIHRoYXQsIEknZCBkbyB0aGUgcmVtYWluZGVyIG9mIHRoZSBvcmlnaW5hbCAidG9waWMiLCBidXQKK2ZvciB0aGF0LCBJIGRvIG5vdCBzdGFydCBmcm9tIHRoZSBwYXRjaGZpbGUgSSBleHRyYWN0ZWQgYnkKK2NvbXBhcmluZyAibWFzdGVyIiBhbmQgInRvcGljIiBJIHVzZWQgaW5pdGlhbGx5LiAgU3RpbGwgb24KKyJ0b3BpY0EiLCBJIGV4dHJhY3QgImRpZmYgdG9waWMiLCBhbmQgdXNlIGl0IHRvIHJlYnVpbGQgdGhlCitvdGhlciB0b3BpYzoKKworICAgICAgICAkIGdpdCBkaWZmIC1SIHRvcGljID5QLmRpZmYgOyMgLS1jYWNoZWQgYWxzbyB3b3VsZCB3b3JrIGZpbmUKKyAgICAgICAgJCBnaXQgY2hlY2tvdXQgLWIgdG9waWNCIG1hc3RlcgorICAgICAgICAuLi4gcGljayBhbmQgYXBwbHkgcGllY2VzIGZyb20gUC5kaWZmIHRvIGJ1aWxkCisgICAgICAgIC4uLiBjb21taXRzIG9uIHRvcGljQiBicmFuY2guCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvcGljQiIKKyAgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vCisgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAvby0tLW8tLS1vCisgICAgICAgICAgICB8LyAgICAgICAgInRvcGljQSIKKyAgICAgICAgby0tLW8ibWFzdGVyIgorICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICJ0b3BpYyIKKyAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vCisKK0FmdGVyIEkgYW0gZG9uZSwgSSdkIHRyeSBhIHByZXRlbmQtbWVyZ2UgYmV0d2VlbiAidG9waWNBIiBhbmQKKyJ0b3BpY0IiIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSBJIGhhdmUgbm90IG1pc3NlZCBhbnl0aGluZzoKKworICAgICAgICAkIGdpdCBwdWxsIC4gdG9waWNBIDsjIG1lcmdlIGl0IGludG8gY3VycmVudCAidG9waWNCIgorICAgICAgICAkIGdpdCBkaWZmIHRvcGljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b3BpY0IiCisgICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tby0tLSogKHByZXRlbmQgbWVyZ2UpCisgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgLworICAgICAgICAgICAgIC9vLS0tby0tLW8tLS0tLS0tLS0tJworICAgICAgICAgICAgfC8gICAgICAgICJ0b3BpY0EiCisgICAgICAgIG8tLS1vIm1hc3RlciIKKyAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAidG9waWMiCisgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tbworCitUaGUgbGFzdCBkaWZmIGJldHRlciBub3QgdG8gc2hvdyBhbnl0aGluZyBvdGhlciB0aGFuIGNsZWFudXBzCitmb3IgY3J1ZnQuICBUaGVuIEkgY2FuIGZpbmFsbHkgY2xlYW4gdGhpbmdzIHVwOgorCisgICAgICAgICQgZ2l0IGJyYW5jaCAtRCB0b3BpYworICAgICAgICAkIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gOyMgbnVrZSBwcmV0ZW5kIG1lcmdlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvcGljQiIKKyAgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vCisgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAvby0tLW8tLS1vCisgICAgICAgICAgICB8LyAgICAgICAgInRvcGljQSIKKyAgICAgICAgby0tLW8ibWFzdGVyIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmU2ZjliCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cC50eHQKQEAgLTAsMCArMSwyODUgQEAKK0Zyb206IFJ1dGdlciBOaWpsdW5zaW5nIDxydXRnZXJAbm9zcGFtLmNvbT4KK1N1YmplY3Q6IFNldHRpbmcgdXAgYSBHaXQgcmVwb3NpdG9yeSB3aGljaCBjYW4gYmUgcHVzaGVkIGludG8gYW5kIHB1bGxlZCBmcm9tIG92ZXIgSFRUUChTKS4KK0RhdGU6IFRodSwgMTAgQXVnIDIwMDYgMjI6MDA6MjYgKzAyMDAKK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gc2V0dXAgR2l0IHNlcnZlciBvdmVyIGh0dHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOT1RFOiBUaGlzIGRvY3VtZW50IGlzIGZyb20gMjAwNi4gIEEgbG90IGhhcyBoYXBwZW5lZCBzaW5jZSB0aGVuLCBhbmQgdGhpcworZG9jdW1lbnQgaXMgbm93IHJlbGV2YW50IG1haW5seSBpZiB5b3VyIHdlYiBob3N0IGlzIG5vdCBDR0kgY2FwYWJsZS4KK0FsbW9zdCBldmVyeW9uZSBlbHNlIHNob3VsZCBpbnN0ZWFkIGxvb2sgYXQgbGlua2dpdDpnaXQtaHR0cC1iYWNrZW5kWzFdLgorCitTaW5jZSBBcGFjaGUgaXMgb25lIG9mIHRob3NlIHBhY2thZ2VzIHBlb3BsZSBsaWtlIHRvIGNvbXBpbGUKK3RoZW1zZWx2ZXMgd2hpbGUgb3RoZXJzIHByZWZlciB0aGUgYnVyZWF1Y3JhdCdzIGRyZWFtIERlYmlhbiwgaXQgaXMKK2ltcG9zc2libGUgdG8gZ2l2ZSBndWlkZWxpbmVzIHdoaWNoIHdpbGwgd29yayBmb3IgZXZlcnlvbmUuIEp1c3Qgc2VuZAorc29tZSBmZWVkYmFjayB0byB0aGUgbWFpbGluZyBsaXN0IGF0IGdpdEB2Z2VyLmtlcm5lbC5vcmcgdG8gZ2V0IHRoaXMKK2RvY3VtZW50IHRhaWxvcmVkIHRvIHlvdXIgZmF2b3JpdGUgZGlzdHJvLgorCisKK1doYXQncyBuZWVkZWQ6CisKKy0gSGF2ZSBhbiBBcGFjaGUgd2ViLXNlcnZlcgorCisgIE9uIERlYmlhbjoKKyAgICAkIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyCisgICAgVG8gZ2V0IGFwYWNoZTIgYnkgZGVmYXVsdCBzdGFydGVkLAorICAgIGVkaXQgL2V0Yy9kZWZhdWx0L2FwYWNoZTIgYW5kIHNldCBOT19TVEFSVD0wCisKKy0gY2FuIGVkaXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgaXQuCisKKyAgVGhpcyBjb3VsZCBiZSBmb3VuZCB1bmRlciAvZXRjL2h0dHBkLCBvciByZWZlciB0byB5b3VyIEFwYWNoZSBkb2N1bWVudGF0aW9uLgorCisgIE9uIERlYmlhbjogdGhpcyBtZWFucyBiZWluZyBhYmxlIHRvIGVkaXQgZmlsZXMgdW5kZXIgL2V0Yy9hcGFjaGUyCisKKy0gY2FuIHJlc3RhcnQgaXQuCisKKyAgJ2FwYWNoZWN0bCAtLWdyYWNlZnVsJyBtaWdodCBkby4gSWYgaXQgZG9lc24ndCwganVzdCBzdG9wIGFuZAorICByZXN0YXJ0IGFwYWNoZS4gQmUgd2FybmluZyB0aGF0IGFjdGl2ZSBjb25uZWN0aW9ucyB0byB5b3VyIHNlcnZlcgorICBtaWdodCBiZSBhYm9ydGVkIGJ5IHRoaXMuCisKKyAgT24gRGViaWFuOgorICAgICQgL2V0Yy9pbml0LmQvYXBhY2hlMiByZXN0YXJ0CisgIG9yCisgICAgJCAvZXRjL2luaXQuZC9hcGFjaGUyIGZvcmNlLXJlbG9hZAorICAgICh3aGljaCBzZWVtcyB0byBkbyB0aGUgc2FtZSkKKyAgVGhpcyBhZGRzIHN5bWxpbmtzIGZyb20gdGhlIC9ldGMvYXBhY2hlMi9tb2RzLWVuYWJsZWQgdG8KKyAgL2V0Yy9hcGFjaGUyL21vZHMtYXZhaWxhYmxlLgorCistIGhhdmUgcGVybWlzc2lvbnMgdG8gY2hvd24gYSBkaXJlY3RvcnkKKworLSBoYXZlIEdpdCBpbnN0YWxsZWQgb24gdGhlIGNsaWVudCwgYW5kCisKKy0gZWl0aGVyIGhhdmUgR2l0IGluc3RhbGxlZCBvbiB0aGUgc2VydmVyIG9yIGhhdmUgYSB3ZWJkYXYgY2xpZW50IG9uCisgIHRoZSBjbGllbnQuCisKK0luIGVmZmVjdCwgdGhpcyBtZWFucyB5b3UncmUgZ29pbmcgdG8gYmUgcm9vdCwgb3IgdGhhdCB5b3UncmUgdXNpbmcgYQorcHJlY29uZmlndXJlZCBXZWJEQVYgc2VydmVyLgorCisKK1N0ZXAgMTogc2V0dXAgYSBiYXJlIEdpdCByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBdCB0aGUgdGltZSBvZiB3cml0aW5nLCBnaXQtaHR0cC1wdXNoIGNhbm5vdCByZW1vdGVseSBjcmVhdGUgYSBHaXQKK3JlcG9zaXRvcnkuIFNvIHdlIGhhdmUgdG8gZG8gdGhhdCBhdCB0aGUgc2VydmVyIHNpZGUgd2l0aCBHaXQuIEFub3RoZXIKK29wdGlvbiBpcyB0byBnZW5lcmF0ZSBhbiBlbXB0eSBiYXJlIHJlcG9zaXRvcnkgYXQgdGhlIGNsaWVudCBhbmQgY29weQoraXQgdG8gdGhlIHNlcnZlciB3aXRoIGEgV2ViREFWIGNsaWVudCAod2hpY2ggaXMgdGhlIG9ubHkgb3B0aW9uIGlmIEdpdAoraXMgbm90IGluc3RhbGxlZCBvbiB0aGUgc2VydmVyKS4KKworQ3JlYXRlIHRoZSBkaXJlY3RvcnkgdW5kZXIgdGhlIERvY3VtZW50Um9vdCBvZiB0aGUgZGlyZWN0b3JpZXMgc2VydmVkCitieSBBcGFjaGUuIEFzIGFuIGV4YW1wbGUgd2UgdGFrZSAvdXNyL2xvY2FsL2FwYWNoZTIsIGJ1dCB0cnkgImdyZXAKK0RvY3VtZW50Um9vdCAvd2hlcmUvZXZlci9odHRwZC5jb25mIiB0byBmaW5kIHlvdXIgcm9vdDoKKworICAgICQgY2QgL3Vzci9sb2NhbC9hcGFjaGUvaHRkb2NzCisgICAgJCBta2RpciBteS1uZXctcmVwby5naXQKKworICBPbiBEZWJpYW46CisKKyAgICAkIGNkIC92YXIvd3d3CisgICAgJCBta2RpciBteS1uZXctcmVwby5naXQKKworCitJbml0aWFsaXplIGEgYmFyZSByZXBvc2l0b3J5CisKKyAgICAkIGNkIG15LW5ldy1yZXBvLmdpdAorICAgICQgZ2l0IC0tYmFyZSBpbml0CisKKworQ2hhbmdlIHRoZSBvd25lcnNoaXAgdG8geW91ciB3ZWItc2VydmVyJ3MgY3JlZGVudGlhbHMuIFVzZSBgImdyZXAgXlVzZXIKK2h0dHBkLmNvbmYiYCBhbmQgYCJncmVwIF5Hcm91cCBodHRwZC5jb25mImAgdG8gZmluZCBvdXQ6CisKKyAgICAkIGNob3duIC1SIHd3dy53d3cgLgorCisgIE9uIERlYmlhbjoKKworICAgICQgY2hvd24gLVIgd3d3LWRhdGEud3d3LWRhdGEgLgorCisKK0lmIHlvdSBkbyBub3Qga25vdyB3aGljaCB1c2VyIEFwYWNoZSBydW5zIGFzLCB5b3UgY2FuIGFsdGVybmF0aXZlbHkgZG8KK2EgImNobW9kIC1SIGErdyAuIiwgaW5zcGVjdCB0aGUgZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgbGF0ZXIgb24sIGFuZAorc2V0IHRoZSBwZXJtaXNzaW9ucyBhcHByb3ByaWF0ZWx5LgorCitSZXN0YXJ0IGFwYWNoZTIsIGFuZCBjaGVjayB3aGV0aGVyIGh0dHA6Ly9zZXJ2ZXIvbXktbmV3LXJlcG8uZ2l0IGdpdmVzCithIGRpcmVjdG9yeSBsaXN0aW5nLiBJZiBub3QsIGNoZWNrIHdoZXRoZXIgYXBhY2hlIHN0YXJ0ZWQgdXAKK3N1Y2Nlc3NmdWxseS4KKworCitTdGVwIDI6IGVuYWJsZSBEQVYgb24gdGhpcyByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IG1ha2Ugc3VyZSB0aGUgZGF2X21vZHVsZSBpcyBsb2FkZWQuIEZvciB0aGlzLCBpbnNlcnQgaW4gaHR0cGQuY29uZjoKKworICAgIExvYWRNb2R1bGUgZGF2X21vZHVsZSBsaWJleGVjL2h0dHBkL2xpYmRhdi5zbworICAgIEFkZE1vZHVsZSBtb2RfZGF2LmMKKworQWxzbyBtYWtlIHN1cmUgdGhhdCB0aGlzIGxpbmUgZXhpc3RzIHdoaWNoIGlzIHRoZSBmaWxlIHVzZWQgZm9yCitsb2NraW5nIERBViBvcGVyYXRpb25zOgorCisgIERBVkxvY2tEQiAiL3Vzci9sb2NhbC9hcGFjaGUyL3RlbXAvREFWLmxvY2siCisKKyAgT24gRGViaWFuIHRoZXNlIHN0ZXBzIGNhbiBiZSBwZXJmb3JtZWQgd2l0aDoKKworICAgIEVuYWJsZSB0aGUgZGF2IGFuZCBkYXZfZnMgbW9kdWxlcyBvZiBhcGFjaGU6CisgICAgJCBhMmVubW9kIGRhdl9mcworICAgIChqdXN0IHRvIGJlIHN1cmUuIGRhdl9mcyBtaWdodCBiZSB1bm5lZWRlZCwgSSBkb24ndCBrbm93KQorICAgICQgYTJlbm1vZCBkYXYKKyAgICBUaGUgREFWIGxvY2sgaXMgbG9jYXRlZCBpbiAvZXRjL2FwYWNoZTIvbW9kcy1hdmFpbGFibGUvZGF2X2ZzLmNvbmY6CisgICAgICBEQVZMb2NrREIgL3Zhci9sb2NrL2FwYWNoZTIvREFWTG9jaworCitPZiBjb3Vyc2UsIGl0IGNhbiBwb2ludCBzb21ld2hlcmUgZWxzZSwgYnV0IHRoZSBzdHJpbmcgaXMgYWN0dWFsbHkganVzdCBhCitwcmVmaXggaW4gc29tZSBBcGFjaGUgY29uZmlndXJhdGlvbnMsIGFuZCB0aGVyZWZvcmUgdGhlIF9kaXJlY3RvcnlfIGhhcyB0bworYmUgd3JpdGFibGUgYnkgdGhlIHVzZXIgQXBhY2hlIHJ1bnMgYXMuCisKK1RoZW4sIGFkZCBzb21ldGhpbmcgbGlrZSB0aGlzIHRvIHlvdXIgaHR0cGQuY29uZgorCisgIDxMb2NhdGlvbiAvbXktbmV3LXJlcG8uZ2l0PgorICAgICBEQVYgb24KKyAgICAgQXV0aFR5cGUgQmFzaWMKKyAgICAgQXV0aE5hbWUgIkdpdCIKKyAgICAgQXV0aFVzZXJGaWxlIC91c3IvbG9jYWwvYXBhY2hlMi9jb25mL3Bhc3N3ZC5naXQKKyAgICAgUmVxdWlyZSB2YWxpZC11c2VyCisgIDwvTG9jYXRpb24+CisKKyAgT24gRGViaWFuOgorICAgIENyZWF0ZSAob3IgYWRkIHRvKSAvZXRjL2FwYWNoZTIvY29uZi5kL2dpdC5jb25mIDoKKworICAgIDxMb2NhdGlvbiAvbXktbmV3LXJlcG8uZ2l0PgorICAgICAgIERBViBvbgorICAgICAgIEF1dGhUeXBlIEJhc2ljCisgICAgICAgQXV0aE5hbWUgIkdpdCIKKyAgICAgICBBdXRoVXNlckZpbGUgL2V0Yy9hcGFjaGUyL3Bhc3N3ZC5naXQKKyAgICAgICBSZXF1aXJlIHZhbGlkLXVzZXIKKyAgICA8L0xvY2F0aW9uPgorCisgICAgRGViaWFuIGF1dG9tYXRpY2FsbHkgcmVhZHMgYWxsIGZpbGVzIHVuZGVyIC9ldGMvYXBhY2hlMi9jb25mLmQuCisKK1RoZSBwYXNzd29yZCBmaWxlIGNhbiBiZSBzb21ld2hlcmUgZWxzZSwgYnV0IGl0IGhhcyB0byBiZSByZWFkYWJsZSBieQorQXBhY2hlIGFuZCBwcmVmZXJhYmx5IG5vdCByZWFkYWJsZSBieSB0aGUgd29ybGQuCisKK0NyZWF0ZSB0aGlzIGZpbGUgYnkKKyAgICAkIGh0cGFzc3dkIC1jIC91c3IvbG9jYWwvYXBhY2hlMi9jb25mL3Bhc3N3ZC5naXQgPHVzZXI+CisKKyAgICBPbiBEZWJpYW46CisgICAgICAkIGh0cGFzc3dkIC1jIC9ldGMvYXBhY2hlMi9wYXNzd2QuZ2l0IDx1c2VyPgorCitZb3Ugd2lsbCBiZSBhc2tlZCBhIHBhc3N3b3JkLCBhbmQgdGhlIGZpbGUgaXMgY3JlYXRlZC4gU3Vic2VxdWVudCBjYWxscwordG8gaHRwYXNzd2Qgc2hvdWxkIG9taXQgdGhlICctYycgb3B0aW9uLCBzaW5jZSB5b3Ugd2FudCB0byBhcHBlbmQgdG8gdGhlCitleGlzdGluZyBmaWxlLgorCitZb3UgbmVlZCB0byByZXN0YXJ0IEFwYWNoZS4KKworTm93IGdvIHRvIGh0dHA6Ly88dXNlcm5hbWU+QDxzZXJ2ZXJuYW1lPi9teS1uZXctcmVwby5naXQgaW4geW91cgorYnJvd3NlciB0byBjaGVjayB3aGV0aGVyIGl0IGFza3MgZm9yIGEgcGFzc3dvcmQgYW5kIGFjY2VwdHMgdGhlIHJpZ2h0CitwYXNzd29yZC4KKworT24gRGViaWFuOgorCisgICBUbyB0ZXN0IHRoZSBXZWJEQVYgcGFydCwgZG86CisKKyAgICQgYXB0LWdldCBpbnN0YWxsIGxpdG11cworICAgJCBsaXRtdXMgaHR0cDovLzxzZXJ2ZXJuYW1lPi9teS1uZXctcmVwby5naXQgPHVzZXJuYW1lPiA8cGFzc3dvcmQ+CisKKyAgIE1vc3QgdGVzdHMgc2hvdWxkIHBhc3MuCisKK0EgY29tbWFuZC1saW5lIHRvb2wgdG8gdGVzdCBXZWJEQVYgaXMgY2FkYXZlci4gSWYgeW91IHByZWZlciBHVUlzLCBmb3IKK2V4YW1wbGUsIGtvbnF1ZXJvciBjYW4gb3BlbiBXZWJEQVYgVVJMcyBhcyAid2ViZGF2Oi8vLi4uIiBvcgorIndlYmRhdnM6Ly8uLi4iLgorCitJZiB5b3UncmUgaW50byBXaW5kb3dzLCBmcm9tIFhQIG9ud2FyZHMgSW50ZXJuZXQgRXhwbG9yZXIgc3VwcG9ydHMKK1dlYkRBVi4gRm9yIHRoaXMsIGRvIEludGVybmV0IEV4cGxvcmVyIC0+IE9wZW4gTG9jYXRpb24gLT4KK2h0dHA6Ly88c2VydmVybmFtZT4vbXktbmV3LXJlcG8uZ2l0IFt4XSBPcGVuIGFzIHdlYmZvbGRlciAtPiBsb2dpbiAuCisKKworU3RlcCAzOiBzZXR1cCB0aGUgY2xpZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgSFRUUCBzdXBwb3J0LCBpLmUuIHlvdXIgR2l0IHdhcyBidWlsdCB3aXRoCitsaWJjdXJsICh2ZXJzaW9uIG1vcmUgcmVjZW50IHRoYW4gNy4xMCkuIFRoZSBjb21tYW5kICdnaXQgaHR0cC1wdXNoJyB3aXRoCitubyBhcmd1bWVudCBzaG91bGQgZGlzcGxheSBhIHVzYWdlIG1lc3NhZ2UuCisKK1RoZW4sIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgJEhPTUUvLm5ldHJjICh5b3UgY2FuIGRvIHdpdGhvdXQsIGJ1dCB3aWxsIGJlCithc2tlZCB0byBpbnB1dCB5b3VyIHBhc3N3b3JkIGEgX2xvdF8gb2YgdGltZXMpOgorCisgICAgbWFjaGluZSA8c2VydmVybmFtZT4KKyAgICBsb2dpbiA8dXNlcm5hbWU+CisgICAgcGFzc3dvcmQgPHBhc3N3b3JkPgorCisuLi5hbmQgc2V0IHBlcm1pc3Npb25zOgorICAgICBjaG1vZCA2MDAgfi8ubmV0cmMKKworSWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSB3ZWItc2VydmVyIGJ5IGl0cyBJUCwgeW91IGhhdmUgdG8gdHlwZSB0aGF0IGluLAoraW5zdGVhZCBvZiB0aGUgc2VydmVyIG5hbWUuCisKK1RvIGNoZWNrIHdoZXRoZXIgYWxsIGlzIE9LLCBkbzoKKworICAgY3VybCAtLW5ldHJjIC0tbG9jYXRpb24gLXYgaHR0cDovLzx1c2VybmFtZT5APHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdC9IRUFECisKKy4uLnRoaXMgc2hvdWxkIGdpdmUgc29tZXRoaW5nIGxpa2UgJ3JlZjogcmVmcy9oZWFkcy9tYXN0ZXInLCB3aGljaCBpcwordGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgSEVBRCBvbiB0aGUgc2VydmVyLgorCitOb3csIGFkZCB0aGUgcmVtb3RlIGluIHlvdXIgZXhpc3RpbmcgcmVwb3NpdG9yeSB3aGljaCBjb250YWlucyB0aGUgcHJvamVjdAoreW91IHdhbnQgdG8gZXhwb3J0OgorCisgICAkIGdpdC1jb25maWcgcmVtb3RlLnVwbG9hZC51cmwgXAorICAgICAgIGh0dHA6Ly88dXNlcm5hbWU+QDxzZXJ2ZXJuYW1lPi9teS1uZXctcmVwby5naXQvCisKK0l0IGlzIGltcG9ydGFudCB0byBwdXQgdGhlIGxhc3QgJy8nOyBXaXRob3V0IGl0LCB0aGUgc2VydmVyIHdpbGwgc2VuZAorYSByZWRpcmVjdCB3aGljaCBnaXQtaHR0cC1wdXNoIGRvZXMgbm90ICh5ZXQpIHVuZGVyc3RhbmQsIGFuZCBnaXQtaHR0cC1wdXNoCit3aWxsIHJlcGVhdCB0aGUgcmVxdWVzdCBpbmZpbml0ZWx5LgorCisKK1N0ZXAgNDogbWFrZSB0aGUgaW5pdGlhbCBwdXNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIHlvdXIgY2xpZW50IHJlcG9zaXRvcnksIGRvCisKKyAgICQgZ2l0IHB1c2ggdXBsb2FkIG1hc3RlcgorCitUaGlzIHB1c2hlcyBicmFuY2ggJ21hc3RlcicgKHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGJyYW5jaCB5b3UKK3dhbnQgdG8gZXhwb3J0KSB0byByZXBvc2l0b3J5IGNhbGxlZCAndXBsb2FkJywgd2hpY2ggd2UgcHJldmlvdXNseQorZGVmaW5lZCB3aXRoIGdpdC1jb25maWcuCisKKworVXNpbmcgYSBwcm94eToKKy0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIHRvIGFjY2VzcyB0aGUgV2ViREFWIHNlcnZlciBmcm9tIGJlaGluZCBhbiBIVFRQKFMpIHByb3h5LAorc2V0IHRoZSB2YXJpYWJsZSAnYWxsX3Byb3h5JyB0byBgaHR0cDovL3Byb3h5LWhvc3QuY29tOnBvcnRgLCBvcgorYGh0dHA6Ly9sb2dpbi1vbi1wcm94eTpwYXNzd2Qtb24tcHJveHlAcHJveHktaG9zdC5jb206cG9ydGAuIFNlZSAnbWFuCitjdXJsJyBmb3IgZGV0YWlscy4KKworCitUcm91Ymxlc2hvb3Rpbmc6CistLS0tLS0tLS0tLS0tLS0tCisKK0lmIGdpdC1odHRwLXB1c2ggc2F5cworCisgICBFcnJvcjogbm8gREFWIGxvY2tpbmcgc3VwcG9ydCBvbiByZW1vdGUgcmVwbyBodHRwOi8vLi4uCisKK3RoZW4gaXQgbWVhbnMgdGhlIHdlYi1zZXJ2ZXIgZGlkIG5vdCBhY2NlcHQgeW91ciBhdXRoZW50aWNhdGlvbi4gTWFrZSBzdXJlCit0aGF0IHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIG1hdGNoZXMgaW4gaHR0cGQuY29uZiwgLm5ldHJjIGFuZCB0aGUgVVJMCit5b3UgYXJlIHVwbG9hZGluZyB0by4KKworSWYgZ2l0LWh0dHAtcHVzaCBzaG93cyB5b3UgYW4gZXJyb3IgKDIyLzUwMikgd2hlbiB0cnlpbmcgdG8gTU9WRSBhIGJsb2IsCitpdCBtZWFucyB0aGF0IHlvdXIgd2ViLXNlcnZlciBzb21laG93IGRvZXMgbm90IHJlY29nbml6ZSBpdHMgbmFtZSBpbiB0aGUKK3JlcXVlc3Q7IFRoaXMgY2FuIGhhcHBlbiB3aGVuIHlvdSBzdGFydCBBcGFjaGUsIGJ1dCB0aGVuIGRpc2FibGUgdGhlCituZXR3b3JrIGludGVyZmFjZS4gQSBzaW1wbGUgcmVzdGFydCBvZiBBcGFjaGUgaGVscHMuCisKK0Vycm9ycyBsaWtlICgyMi81MDIpIGFyZSBvZiBmb3JtYXQgKGN1cmwgZXJyb3IgY29kZS9odHRwIGVycm9yCitjb2RlKS4gU28gKDIyLzQwNCkgbWVhbnMgc29tZXRoaW5nIGxpa2UgJ25vdCBmb3VuZCcgYXQgdGhlIHNlcnZlci4KKworUmVhZGluZyAvdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvcl9sb2cgaXMgb2Z0ZW4gaGVscGZ1bC4KKworICBPbiBEZWJpYW46IFJlYWQgL3Zhci9sb2cvYXBhY2hlMi9lcnJvci5sb2cgaW5zdGVhZC4KKworSWYgeW91IGFjY2VzcyBIVFRQUyBsb2NhdGlvbnMsIEdpdCBtYXkgZmFpbCB2ZXJpZnlpbmcgdGhlIFNTTAorY2VydGlmaWNhdGUgKHRoaXMgaXMgcmV0dXJuIGNvZGUgNjApLiBTZXR0aW5nIGh0dHAuc3NsVmVyaWZ5PWZhbHNlIGNhbgoraGVscCBkaWFnbm9zaW5nIHRoZSBwcm9ibGVtLCBidXQgcmVtb3ZlcyBzZWN1cml0eSBjaGVja3MuCisKKworRGViaWFuIFJlZmVyZW5jZXM6IGh0dHA6Ly93d3cuZGViaWFuLWFkbWluaXN0cmF0aW9uLm9yZy9hcnRpY2xlcy8yODUKKworQXV0aG9ycworICBKb2hhbm5lcyBTY2hpbmRlbGluIDxKb2hhbm5lcy5TY2hpbmRlbGluQGdteC5kZT4KKyAgUnV0Z2VyIE5pamx1bnNpbmcgPGdpdEB3aW5nZGluZy5kZW1vbi5ubD4KKyAgTWF0dGhpZXUgTW95IDxNYXR0aGlldS5Nb3lAaW1hZy5mcj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODIxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUudHh0CkBAIC0wLDAgKzEsMTkyIEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IGFuZCBDYXJsIEJhbGR3aW4gPGNuYkBmYy5ocC5jb20+CitTdWJqZWN0OiBjb250cm9sIGFjY2VzcyB0byBicmFuY2hlcy4KK0RhdGU6IFRodSwgMTcgTm92IDIwMDUgMjM6NTU6MzIgLTA4MDAKK01lc3NhZ2UtSUQ6IDw3dmZ5cHVtbHUzLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQ+CitBYnN0cmFjdDogQW4gZXhhbXBsZSBob29rcy91cGRhdGUgc2NyaXB0IGlzIHByZXNlbnRlZCB0bworIGltcGxlbWVudCByZXBvc2l0b3J5IG1haW50ZW5hbmNlIHBvbGljaWVzLCBzdWNoIGFzIHdobyBjYW4gcHVzaAorIGludG8gd2hpY2ggYnJhbmNoIGFuZCB3aG8gY2FuIG1ha2UgYSB0YWcuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHVzZSB0aGUgdXBkYXRlIGhvb2sKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4geW91ciBkZXZlbG9wZXIgcnVucyBnaXQtcHVzaCBpbnRvIHRoZSByZXBvc2l0b3J5LAorZ2l0LXJlY2VpdmUtcGFjayBpcyBydW4gKGVpdGhlciBsb2NhbGx5IG9yIG92ZXIgc3NoKSBhcyB0aGF0CitkZXZlbG9wZXIsIHNvIGlzIGhvb2tzL3VwZGF0ZSBzY3JpcHQuICBRdW90aW5nIGZyb20gdGhlIHJlbGV2YW50CitzZWN0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uOgorCisgICAgQmVmb3JlIGVhY2ggcmVmIGlzIHVwZGF0ZWQsIGlmICRHSVRfRElSL2hvb2tzL3VwZGF0ZSBmaWxlIGV4aXN0cworICAgIGFuZCBleGVjdXRhYmxlLCBpdCBpcyBjYWxsZWQgd2l0aCB0aHJlZSBwYXJhbWV0ZXJzOgorCisgICAgICAgICAgICRHSVRfRElSL2hvb2tzL3VwZGF0ZSByZWZuYW1lIHNoYTEtb2xkIHNoYTEtbmV3CisKKyAgICBUaGUgcmVmbmFtZSBwYXJhbWV0ZXIgaXMgcmVsYXRpdmUgdG8gJEdJVF9ESVI7IGUuZy4gZm9yIHRoZQorICAgIG1hc3RlciBoZWFkIHRoaXMgaXMgInJlZnMvaGVhZHMvbWFzdGVyIi4gIFR3byBzaGExIGFyZSB0aGUKKyAgICBvYmplY3QgbmFtZXMgZm9yIHRoZSByZWZuYW1lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHVwZGF0ZS4gIE5vdGUKKyAgICB0aGF0IHRoZSBob29rIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHJlZm5hbWUgaXMgdXBkYXRlZCwgc28gZWl0aGVyCisgICAgc2hhMS1vbGQgaXMgMHs0MH0gKG1lYW5pbmcgdGhlcmUgaXMgbm8gc3VjaCByZWYgeWV0KSwgb3IgaXQKKyAgICBzaG91bGQgbWF0Y2ggd2hhdCBpcyByZWNvcmRlZCBpbiByZWZuYW1lLgorCitTbyBpZiB5b3VyIHBvbGljeSBpcyAoMSkgYWx3YXlzIHJlcXVpcmUgZmFzdC1mb3J3YXJkIHB1c2gKKyhpLmUuIG5ldmVyIGFsbG93ICJnaXQtcHVzaCByZXBvICticmFuY2g6YnJhbmNoIiksICgyKSB5b3UKK2hhdmUgYSBsaXN0IG9mIHVzZXJzIGFsbG93ZWQgdG8gdXBkYXRlIGVhY2ggYnJhbmNoLCBhbmQgKDMpIHlvdQorZG8gbm90IGxldCB0YWdzIHRvIGJlIG92ZXJ3cml0dGVuLCB0aGVuIHlvdSBjYW4gdXNlIHNvbWV0aGluZworbGlrZSB0aGlzIGFzIHlvdXIgaG9va3MvdXBkYXRlIHNjcmlwdC4KKworW2pjOiBlZGl0b3JpYWwgbm90ZS4gIFRoaXMgaXMgYSBtdWNoIGltcHJvdmVkIHZlcnNpb24gYnkgQ2FybAorc2luY2UgSSBwb3N0ZWQgdGhlIG9yaWdpbmFsIG91dGxpbmVdCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMhL2Jpbi9iYXNoCisKK3VtYXNrIDAwMgorCisjIElmIHlvdSBhcmUgaGF2aW5nIHRyb3VibGUgd2l0aCB0aGlzIGFjY2VzcyBjb250cm9sIGhvb2sgc2NyaXB0CisjIHlvdSBjYW4gdHJ5IHNldHRpbmcgdGhpcyB0byB0cnVlLiAgSXQgd2lsbCB0ZWxsIHlvdSBleGFjdGx5CisjIHdoeSBhIHVzZXIgaXMgYmVpbmcgYWxsb3dlZC9kZW5pZWQgYWNjZXNzLgorCit2ZXJib3NlPWZhbHNlCisKKyMgRGVmYXVsdCBzaGVsbCBnbG9iYmluZyBtZXNzZXMgdGhpbmdzIHVwIGRvd25zdHJlYW0KK0dMT0JJR05PUkU9KgorCitmdW5jdGlvbiBncmFudCB7CisgICR2ZXJib3NlICYmIGVjaG8gPiYyICItR3JhbnQtCQkkMSIKKyAgZWNobyBncmFudAorICBleGl0IDAKK30KKworZnVuY3Rpb24gZGVueSB7CisgICR2ZXJib3NlICYmIGVjaG8gPiYyICItRGVueS0JCSQxIgorICBlY2hvIGRlbnkKKyAgZXhpdCAxCit9CisKK2Z1bmN0aW9uIGluZm8geworICAkdmVyYm9zZSAmJiBlY2hvID4mMiAiLUluZm8tCQkkMSIKK30KKworIyBJbXBsZW1lbnQgZ2VuZXJpYyBicmFuY2ggYW5kIHRhZyBwb2xpY2llcy4KKyMgLSBUYWdzIHNob3VsZCBub3QgYmUgdXBkYXRlZCBvbmNlIGNyZWF0ZWQuCisjIC0gQnJhbmNoZXMgc2hvdWxkIG9ubHkgYmUgZmFzdC1mb3J3YXJkZWQgdW5sZXNzIHRoZWlyIHBhdHRlcm4gc3RhcnRzIHdpdGggJysnCitjYXNlICIkMSIgaW4KKyAgcmVmcy90YWdzLyopCisgICAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAiJDEiICYmCisgICAgZGVueSA+L2Rldi9udWxsICJZb3UgY2FuJ3Qgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHRhZyIKKyAgICA7OworICByZWZzL2hlYWRzLyopCisgICAgIyBObyByZWJhc2luZyBvciByZXdpbmRpbmcKKyAgICBpZiBleHByICIkMiIgOiAnMCokJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBpbmZvICJUaGUgYnJhbmNoICckMScgaXMgbmV3Li4uIgorICAgIGVsc2UKKyAgICAgICMgdXBkYXRpbmcgLS0gbWFrZSBzdXJlIGl0IGlzIGEgZmFzdC1mb3J3YXJkCisgICAgICBtYj0kKGdpdCBtZXJnZS1iYXNlICIkMiIgIiQzIikKKyAgICAgIGNhc2UgIiRtYiwkMiIgaW4KKyAgICAgICAgIiQyLCRtYiIpIGluZm8gIlVwZGF0ZSBpcyBmYXN0LWZvcndhcmQiIDs7CisJKikJICBub2ZmPXk7IGluZm8gIlRoaXMgaXMgbm90IGEgZmFzdC1mb3J3YXJkIHVwZGF0ZS4iOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgICopCisgICAgZGVueSA+L2Rldi9udWxsIFwKKyAgICAiQnJhbmNoIGlzIG5vdCB1bmRlciByZWZzL2hlYWRzIG9yIHJlZnMvdGFncy4gIFdoYXQgYXJlIHlvdSB0cnlpbmcgdG8gZG8/IgorICAgIDs7Citlc2FjCisKKyMgSW1wbGVtZW50IHBlci1icmFuY2ggY29udHJvbHMgYmFzZWQgb24gdXNlcm5hbWUKK2FsbG93ZWRfdXNlcnNfZmlsZT0kR0lUX0RJUi9pbmZvL2FsbG93ZWQtdXNlcnMKK3VzZXJuYW1lPSQoaWQgLXUgLW4pCitpbmZvICJUaGUgdXNlciBpczogJyR1c2VybmFtZSciCisKK2lmIHRlc3QgLWYgIiRhbGxvd2VkX3VzZXJzX2ZpbGUiCit0aGVuCisgIHJjPSQoY2F0ICRhbGxvd2VkX3VzZXJzX2ZpbGUgfCBncmVwIC12ICdeIycgfCBncmVwIC12ICdeJCcgfAorICAgIHdoaWxlIHJlYWQgaGVhZHMgdXNlcl9wYXR0ZXJucworICAgIGRvCisgICAgICAjIGRvZXMgdGhpcyBydWxlIGFwcGx5IHRvIHVzPworICAgICAgaGVhZF9wYXR0ZXJuPSR7aGVhZHMjK30KKyAgICAgIG1hdGNobGVuPSQoZXhwciAiJDEiIDogIiR7aGVhZF9wYXR0ZXJuIyt9IikKKyAgICAgIHRlc3QgIiRtYXRjaGxlbiIgPSAkeyMxfSB8fCBjb250aW51ZQorCisgICAgICAjIGlmIG5vbi1mZiwgJGhlYWRzIG11c3QgYmUgd2l0aCB0aGUgJysnIHByZWZpeAorICAgICAgdGVzdCAtbiAiJG5vZmYiICYmCisgICAgICB0ZXN0ICIkaGVhZF9wYXR0ZXJuIiA9ICIkaGVhZHMiICYmIGNvbnRpbnVlCisKKyAgICAgIGluZm8gIkZvdW5kIG1hdGNoaW5nIGhlYWQgcGF0dGVybjogJyRoZWFkX3BhdHRlcm4nIgorICAgICAgZm9yIHVzZXJfcGF0dGVybiBpbiAkdXNlcl9wYXR0ZXJuczsgZG8KKyAgICAgICAgaW5mbyAiQ2hlY2tpbmcgdXNlcjogJyR1c2VybmFtZScgYWdhaW5zdCBwYXR0ZXJuOiAnJHVzZXJfcGF0dGVybiciCisgICAgICAgIG1hdGNobGVuPSQoZXhwciAiJHVzZXJuYW1lIiA6ICIkdXNlcl9wYXR0ZXJuIikKKyAgICAgICAgaWYgdGVzdCAiJG1hdGNobGVuIiA9ICIkeyN1c2VybmFtZX0iCisgICAgICAgIHRoZW4KKyAgICAgICAgICBncmFudCAiQWxsb3dpbmcgdXNlcjogJyR1c2VybmFtZScgd2l0aCBwYXR0ZXJuOiAnJHVzZXJfcGF0dGVybiciCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBkZW55ICJUaGUgdXNlciBpcyBub3QgaW4gdGhlIGFjY2VzcyBsaXN0IGZvciB0aGlzIGJyYW5jaCIKKyAgICBkb25lCisgICkKKyAgY2FzZSAiJHJjIiBpbgorICAgIGdyYW50KSBncmFudCA+L2Rldi9udWxsICJHcmFudGluZyBhY2Nlc3MgYmFzZWQgb24gJGFsbG93ZWRfdXNlcnNfZmlsZSIgOzsKKyAgICBkZW55KSAgZGVueSAgPi9kZXYvbnVsbCAiRGVueWluZyAgYWNjZXNzIGJhc2VkIG9uICRhbGxvd2VkX3VzZXJzX2ZpbGUiIDs7CisgICAgKikgOzsKKyAgZXNhYworZmkKKworYWxsb3dlZF9ncm91cHNfZmlsZT0kR0lUX0RJUi9pbmZvL2FsbG93ZWQtZ3JvdXBzCitncm91cHM9JChpZCAtRyAtbikKK2luZm8gIlRoZSB1c2VyIGJlbG9uZ3MgdG8gdGhlIGZvbGxvd2luZyBncm91cHM6IgoraW5mbyAiJyRncm91cHMnIgorCitpZiB0ZXN0IC1mICIkYWxsb3dlZF9ncm91cHNfZmlsZSIKK3RoZW4KKyAgcmM9JChjYXQgJGFsbG93ZWRfZ3JvdXBzX2ZpbGUgfCBncmVwIC12ICdeIycgfCBncmVwIC12ICdeJCcgfAorICAgIHdoaWxlIHJlYWQgaGVhZHMgZ3JvdXBfcGF0dGVybnMKKyAgICBkbworICAgICAgIyBkb2VzIHRoaXMgcnVsZSBhcHBseSB0byB1cz8KKyAgICAgIGhlYWRfcGF0dGVybj0ke2hlYWRzIyt9CisgICAgICBtYXRjaGxlbj0kKGV4cHIgIiQxIiA6ICIke2hlYWRfcGF0dGVybiMrfSIpCisgICAgICB0ZXN0ICIkbWF0Y2hsZW4iID0gJHsjMX0gfHwgY29udGludWUKKworICAgICAgIyBpZiBub24tZmYsICRoZWFkcyBtdXN0IGJlIHdpdGggdGhlICcrJyBwcmVmaXgKKyAgICAgIHRlc3QgLW4gIiRub2ZmIiAmJgorICAgICAgdGVzdCAiJGhlYWRfcGF0dGVybiIgPSAiJGhlYWRzIiAmJiBjb250aW51ZQorCisgICAgICBpbmZvICJGb3VuZCBtYXRjaGluZyBoZWFkIHBhdHRlcm46ICckaGVhZF9wYXR0ZXJuJyIKKyAgICAgIGZvciBncm91cF9wYXR0ZXJuIGluICRncm91cF9wYXR0ZXJuczsgZG8KKyAgICAgICAgZm9yIGdyb3VwbmFtZSBpbiAkZ3JvdXBzOyBkbworICAgICAgICAgIGluZm8gIkNoZWNraW5nIGdyb3VwOiAnJGdyb3VwbmFtZScgYWdhaW5zdCBwYXR0ZXJuOiAnJGdyb3VwX3BhdHRlcm4nIgorICAgICAgICAgIG1hdGNobGVuPSQoZXhwciAiJGdyb3VwbmFtZSIgOiAiJGdyb3VwX3BhdHRlcm4iKQorICAgICAgICAgIGlmIHRlc3QgIiRtYXRjaGxlbiIgPSAiJHsjZ3JvdXBuYW1lfSIKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICBncmFudCAiQWxsb3dpbmcgZ3JvdXA6ICckZ3JvdXBuYW1lJyB3aXRoIHBhdHRlcm46ICckZ3JvdXBfcGF0dGVybiciCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZG9uZQorICAgICAgZGVueSAiTm9uZSBvZiB0aGUgdXNlcidzIGdyb3VwcyBhcmUgaW4gdGhlIGFjY2VzcyBsaXN0IGZvciB0aGlzIGJyYW5jaCIKKyAgICBkb25lCisgICkKKyAgY2FzZSAiJHJjIiBpbgorICAgIGdyYW50KSBncmFudCA+L2Rldi9udWxsICJHcmFudGluZyBhY2Nlc3MgYmFzZWQgb24gJGFsbG93ZWRfZ3JvdXBzX2ZpbGUiIDs7CisgICAgZGVueSkgIGRlbnkgID4vZGV2L251bGwgIkRlbnlpbmcgIGFjY2VzcyBiYXNlZCBvbiAkYWxsb3dlZF9ncm91cHNfZmlsZSIgOzsKKyAgICAqKSA7OworICBlc2FjCitmaQorCitkZW55ID4vZGV2L251bGwgIlRoZXJlIGFyZSBubyBtb3JlIHJ1bGVzIHRvIGNoZWNrLiAgRGVueWluZyBhY2Nlc3MiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdXNlcyB0d28gZmlsZXMsICRHSVRfRElSL2luZm8vYWxsb3dlZC11c2VycyBhbmQKK2FsbG93ZWQtZ3JvdXBzLCB0byBkZXNjcmliZSB3aGljaCBoZWFkcyBjYW4gYmUgcHVzaGVkIGludG8gYnkKK3dob20uICBUaGUgZm9ybWF0IG9mIGVhY2ggZmlsZSB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworICAgIHJlZnMvaGVhZHMvbWFzdGVyICAganVuaW8KKyAgICArcmVmcy9oZWFkcy9wdSAgICAgIGp1bmlvCisgICAgcmVmcy9oZWFkcy9jb2dpdG8kICBwYXNreQorICAgIHJlZnMvaGVhZHMvYncvLiogICAgbGludXMKKyAgICByZWZzL2hlYWRzL3RtcC8uKiAgIC4qCisgICAgcmVmcy90YWdzL3ZbMC05XS4qICBqdW5pbworCitXaXRoIHRoaXMsIExpbnVzIGNhbiBwdXNoIG9yIGNyZWF0ZSAiYncvcGVuZ3VpbiIgb3IgImJ3L3plYnJhIgorb3IgImJ3L3BhbmRhIiBicmFuY2hlcywgUGFza3kgY2FuIGRvIG9ubHkgImNvZ2l0byIsIGFuZCBKQyBjYW4KK2RvIG1hc3RlciBhbmQgcHUgYnJhbmNoZXMgYW5kIG1ha2UgdmVyc2lvbmVkIHRhZ3MuICBBbmQgYW55Ym9keQorY2FuIGRvIHRtcC9ibGFoIGJyYW5jaGVzLiBUaGUgJysnIHNpZ24gYXQgdGhlIHB1IHJlY29yZCBtZWFucwordGhhdCBKQyBjYW4gbWFrZSBub24tZmFzdC1mb3J3YXJkIHB1c2hlcyBvbiBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vdXNlLWdpdC1kYWVtb24udHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2UtZ2l0LWRhZW1vbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmMmU1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNlLWdpdC1kYWVtb24udHh0CkBAIC0wLDAgKzEsNTQgQEAKK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gdXNlIGdpdC1kYWVtb24KKz09PT09PT09PT09PT09PT09PT09PQorCitHaXQgY2FuIGJlIHJ1biBpbiBpbmV0ZCBtb2RlIGFuZCBpbiBzdGFuZCBhbG9uZSBtb2RlLiBCdXQgYWxsIHlvdSB3YW50IGlzCitsZXQgYSBjb3dvcmtlciBwdWxsIGZyb20geW91LCBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gc2V0IHVwIGEgR2l0IHNlcnZlcgorcmVhbCBxdWljaywgcmlnaHQ/CisKK05vdGUgdGhhdCBnaXQtZGFlbW9uIGlzIG5vdCByZWFsbHkgY2hhdHR5IGF0IHRoZSBtb21lbnQsIGVzcGVjaWFsbHkgd2hlbgordGhpbmdzIGRvIG5vdCBnbyBhY2NvcmRpbmcgdG8gcGxhbiAoZS5nLiBhIHNvY2tldCBjb3VsZCBub3QgYmUgYm91bmQpLgorCitBbm90aGVyIHdvcmQgb2Ygd2FybmluZzogaWYgeW91IHJ1bgorCisJJCBnaXQgbHMtcmVtb3RlIGdpdDovLzEyNy4wLjAuMS9ydWxlLXRoZS13b3JsZC5naXQKKworYW5kIHlvdSBzZWUgYSBtZXNzYWdlIGxpa2UKKworCWZhdGFsOiBUaGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseQorCitpdCBvbmx5IG1lYW5zIHRoYXQgX3NvbWV0aGluZ18gd2VudCB3cm9uZy4gVG8gZmluZCBvdXQgX3doYXRfIHdlbnQgd3JvbmcsCit5b3UgaGF2ZSB0byBhc2sgdGhlIHNlcnZlci4gKEdpdCByZWZ1c2VzIHRvIGJlIG1vcmUgcHJlY2lzZSBmb3IgeW91cgorc2VjdXJpdHkgb25seS4gVGFrZSBvZmYgeW91ciBzaG9lcyBub3cuIFlvdSBoYXZlIGFueSBjb2lucyBpbiB5b3VyIHBvY2tldHM/CitTb3JyeSwgbm90IGFsbG93ZWQgLS0gd2hvIGtub3dzIHdoYXQgeW91IHBsYW5uZWQgdG8gZG8gd2l0aCB0aGVtPykKKworV2l0aCB0aGVzZSB0d28gY2F2ZWF0cywgbGV0J3Mgc2VlIGFuIGV4YW1wbGU6CisKKwkkIGdpdCBkYWVtb24gLS1yZXVzZWFkZHIgLS12ZXJib3NlIC0tYmFzZS1wYXRoPS9ob21lL2dpdHRlL2dpdCBcCisJICAtLWV4cG9ydC1hbGwgLS0gL2hvbWUvZ2l0dGUvZ2l0L3J1bGUtdGhlLXdvcmxkLmdpdAorCisoT2YgY291cnNlLCB1bmxlc3MgeW91ciB1c2VyIG5hbWUgaXMgYGdpdHRlYCBfYW5kXyB5b3VyIHJlcG9zaXRvcnkgaXMgaW4KK34vcnVsZS10aGUtd29ybGQuZ2l0LCB5b3UgaGF2ZSB0byBhZGp1c3QgdGhlIHBhdGhzLiBJZiB5b3VyIHJlcG9zaXRvcnkgaXMKK25vdCBiYXJlLCBiZSBhd2FyZSB0aGF0IHlvdSBoYXZlIHRvIHR5cGUgdGhlIHBhdGggdG8gdGhlIC5naXQgZGlyZWN0b3J5ISkKKworVGhpcyBpbnZvY2F0aW9uIHRyaWVzIHRvIHJldXNlIHRoZSBhZGRyZXNzIGlmIGl0IGlzIGFscmVhZHkgdGFrZW4KKyh0aGlzIGNhbiBzYXZlIHlvdSBzb21lIGRlYnVnZ2luZywgYmVjYXVzZSBvdGhlcndpc2Uga2lsbGluZyBhbmQgcmVzdGFydGluZworZ2l0LWRhZW1vbiBjb3VsZCBqdXN0IHNpbGVudGx5IGZhaWwgdG8gYmluZCB0byBhIHNvY2tldCkuCisKK0Fsc28sIGl0IGlzIChyZWxhdGl2ZWx5KSB2ZXJib3NlIHdoZW4gc29tZWJvZHkgYWN0dWFsbHkgY29ubmVjdHMgdG8gaXQuCitJdCBhbHNvIHNldHMgdGhlIGJhc2UgcGF0aCwgd2hpY2ggbWVhbnMgdGhhdCBhbGwgdGhlIHByb2plY3RzIHdoaWNoIGNhbiBiZQorYWNjZXNzZWQgdXNpbmcgdGhpcyBkYWVtb24gaGF2ZSB0byByZXNpZGUgaW4gb3IgdW5kZXIgdGhhdCBwYXRoLgorCitUaGUgb3B0aW9uIGAtLWV4cG9ydC1hbGxgIGp1c3QgbWVhbnMgdGhhdCB5b3UgX2Rvbid0XyBoYXZlIHRvIGNyZWF0ZSBhCitmaWxlIG5hbWVkIGBnaXQtZGFlbW9uLWV4cG9ydC1va2AgaW4gZWFjaCBleHBvcnRlZCByZXBvc2l0b3J5LiAoT3RoZXJ3aXNlLAorZ2l0LWRhZW1vbiB3b3VsZCBjb21wbGFpbiBsb3VkbHksIGFuZCByZWZ1c2UgdG8gY29vcGVyYXRlLikKKworTGFzdCBvZiBhbGwsIHRoZSByZXBvc2l0b3J5IHdoaWNoIHNob3VsZCBiZSBleHBvcnRlZCBpcyBzcGVjaWZpZWQuIEl0IGlzCithIGdvb2QgcHJhY3RpY2UgdG8gcHV0IHRoZSBwYXRocyBhZnRlciBhICItLSIgc2VwYXJhdG9yLgorCitOb3csIHRlc3QgeW91ciBkYWVtb24gd2l0aAorCisJJCBnaXQgbHMtcmVtb3RlIGdpdDovLzEyNy4wLjAuMS9ydWxlLXRoZS13b3JsZC5naXQKKworSWYgdGhpcyBkb2VzIG5vdCB3b3JrLCBmaW5kIG91dCB3aHksIGFuZCBzdWJtaXQgYSBwYXRjaCB0byB0aGlzIGRvY3VtZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy1tZXJnZS1zdWJ0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctbWVyZ2Utc3VidHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5OWE5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctbWVyZ2Utc3VidHJlZS50eHQKQEAgLTAsMCArMSw3NSBAQAorRGF0ZTogU2F0LCA1IEphbiAyMDA4IDIwOjE3OjQwIC0wNTAwCitGcm9tOiBTZWFuIDxzZWFubGttbEBzeW1wYXRpY28uY2E+CitUbzogTWlrbG9zIFZham5hIDx2bWlrbG9zQGZydWdhbHdhcmUub3JnPgorQ2M6IGdpdEB2Z2VyLmtlcm5lbC5vcmcKK1N1YmplY3Q6IGhvdyB0byB1c2UgZ2l0IG1lcmdlIC1zIHN1YnRyZWU/CitBYnN0cmFjdDogSW4gdGhpcyBhcnRpY2xlLCBTZWFuIGRlbW9uc3RyYXRlcyBob3cgb25lIGNhbiB1c2UgdGhlIHN1YnRyZWUgbWVyZ2UKKyBzdHJhdGVneS4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworTWVzc2FnZS1JRDogPEJBWUMxLVBBU01UUDEyMzc0QjU0QkEzNzBBMUUxQzZFNzhBRTRFMEBDRVouSUNFPgorCitIb3cgdG8gdXNlIHRoZSBzdWJ0cmVlIG1lcmdlIHN0cmF0ZWd5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIHlvdSB3YW50IHRvIGluY2x1ZGUgY29udGVudHMgaW4geW91ciBwcm9qZWN0Citmcm9tIGFuIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIHByb2plY3QuIFlvdSBjYW4ganVzdCBwdWxsIGZyb20gdGhlCitvdGhlciBwcm9qZWN0IGFzIGxvbmcgYXMgdGhlcmUgYXJlIG5vIGNvbmZsaWN0aW5nIHBhdGhzLgorCitUaGUgcHJvYmxlbWF0aWMgY2FzZSBpcyB3aGVuIHRoZXJlIGFyZSBjb25mbGljdGluZyBmaWxlcy4gUG90ZW50aWFsCitjYW5kaWRhdGVzIGFyZSBNYWtlZmlsZXMgYW5kIG90aGVyIHN0YW5kYXJkIGZpbGVuYW1lcy4gWW91IGNvdWxkIG1lcmdlCit0aGVzZSBmaWxlcyBidXQgcHJvYmFibHkgeW91IGRvIG5vdCB3YW50IHRvLiAgQSBiZXR0ZXIgc29sdXRpb24gZm9yIHRoaXMKK3Byb2JsZW0gY2FuIGJlIHRvIG1lcmdlIHRoZSBwcm9qZWN0IGFzIGl0cyBvd24gc3ViZGlyZWN0b3J5LiBUaGlzIGlzIG5vdAorc3VwcG9ydGVkIGJ5IHRoZSAncmVjdXJzaXZlJyBtZXJnZSBzdHJhdGVneSwgc28ganVzdCBwdWxsaW5nIHdvbid0IHdvcmsuCisKK1doYXQgeW91IHdhbnQgaXMgdGhlICdzdWJ0cmVlJyBtZXJnZSBzdHJhdGVneSwgd2hpY2ggaGVscHMgeW91IGluIHN1Y2ggYQorc2l0dWF0aW9uLgorCitJbiB0aGlzIGV4YW1wbGUsIGxldCdzIHNheSB5b3UgaGF2ZSB0aGUgcmVwb3NpdG9yeSBhdCBgL3BhdGgvdG8vQmAgKGJ1dAoraXQgY2FuIGJlIGEgVVJMIGFzIHdlbGwsIGlmIHlvdSB3YW50KS4gWW91IHdhbnQgdG8gbWVyZ2UgdGhlICdtYXN0ZXInCiticmFuY2ggb2YgdGhhdCByZXBvc2l0b3J5IHRvIHRoZSBgZGlyLUJgIHN1YmRpcmVjdG9yeSBpbiB5b3VyIGN1cnJlbnQKK2JyYW5jaC4KKworSGVyZSBpcyB0aGUgY29tbWFuZCBzZXF1ZW5jZSB5b3UgbmVlZDoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCAtZiBCcHJvamVjdCAvcGF0aC90by9CIDwxPgorJCBnaXQgbWVyZ2UgLXMgb3VycyAtLW5vLWNvbW1pdCAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgQnByb2plY3QvbWFzdGVyIDwyPgorJCBnaXQgcmVhZC10cmVlIC0tcHJlZml4PWRpci1CLyAtdSBCcHJvamVjdC9tYXN0ZXIgPDM+CiskIGdpdCBjb21taXQgLW0gIk1lcmdlIEIgcHJvamVjdCBhcyBvdXIgc3ViZGlyZWN0b3J5IiA8ND4KKworJCBnaXQgcHVsbCAtcyBzdWJ0cmVlIEJwcm9qZWN0IG1hc3RlciA8NT4KKy0tLS0tLS0tLS0tLS0tLS0KKzwxPiBuYW1lIHRoZSBvdGhlciBwcm9qZWN0ICJCcHJvamVjdCIsIGFuZCBmZXRjaC4KKzwyPiBwcmVwYXJlIGZvciB0aGUgbGF0ZXIgc3RlcCB0byByZWNvcmQgdGhlIHJlc3VsdCBhcyBhIG1lcmdlLgorPDM+IHJlYWQgIm1hc3RlciIgYnJhbmNoIG9mIEJwcm9qZWN0IHRvIHRoZSBzdWJkaXJlY3RvcnkgImRpci1CIi4KKzw0PiByZWNvcmQgdGhlIG1lcmdlIHJlc3VsdC4KKzw1PiBtYWludGFpbiB0aGUgcmVzdWx0IHdpdGggc3Vic2VxdWVudCBtZXJnZXMgdXNpbmcgInN1YnRyZWUiCisKK1RoZSBmaXJzdCBmb3VyIGNvbW1hbmRzIGFyZSB1c2VkIGZvciB0aGUgaW5pdGlhbCBtZXJnZSwgd2hpbGUgdGhlIGxhc3QKK29uZSBpcyB0byBtZXJnZSB1cGRhdGVzIGZyb20gJ0IgcHJvamVjdCcuCisKK0NvbXBhcmluZyAnc3VidHJlZScgbWVyZ2Ugd2l0aCBzdWJtb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIFRoZSBiZW5lZml0IG9mIHVzaW5nIHN1YnRyZWUgbWVyZ2UgaXMgdGhhdCBpdCByZXF1aXJlcyBsZXNzCisgIGFkbWluaXN0cmF0aXZlIGJ1cmRlbiBmcm9tIHRoZSB1c2VycyBvZiB5b3VyIHJlcG9zaXRvcnkuIEl0IHdvcmtzIHdpdGgKKyAgb2xkZXIgKGJlZm9yZSBHaXQgdjEuNS4yKSBjbGllbnRzIGFuZCB5b3UgaGF2ZSB0aGUgY29kZSByaWdodCBhZnRlcgorICBjbG9uZS4KKworLSBIb3dldmVyIGlmIHlvdSB1c2Ugc3VibW9kdWxlcyB0aGVuIHlvdSBjYW4gY2hvb3NlIG5vdCB0byB0cmFuc2ZlciB0aGUKKyAgc3VibW9kdWxlIG9iamVjdHMuIFRoaXMgbWF5IGJlIGEgcHJvYmxlbSB3aXRoIHRoZSBzdWJ0cmVlIG1lcmdlLgorCistIEFsc28sIGluIGNhc2UgeW91IG1ha2UgY2hhbmdlcyB0byB0aGUgb3RoZXIgcHJvamVjdCwgaXQgaXMgZWFzaWVyIHRvCisgIHN1Ym1pdCBjaGFuZ2VzIGlmIHlvdSBqdXN0IHVzZSBzdWJtb2R1bGVzLgorCitBZGRpdGlvbmFsIHRpcHMKKy0tLS0tLS0tLS0tLS0tLQorCistIElmIHlvdSBtYWRlIGNoYW5nZXMgdG8gdGhlIG90aGVyIHByb2plY3QgaW4geW91ciByZXBvc2l0b3J5LCB0aGV5IG1heQorICB3YW50IHRvIG1lcmdlIGZyb20geW91ciBwcm9qZWN0LiBUaGlzIGlzIHBvc3NpYmxlIHVzaW5nIHN1YnRyZWUgLS0gaXQKKyAgY2FuIHNoaWZ0IHVwIHRoZSBwYXRocyBpbiB5b3VyIHRyZWUgYW5kIHRoZW4gdGhleSBjYW4gbWVyZ2Ugb25seSB0aGUKKyAgcmVsZXZhbnQgcGFydHMgb2YgeW91ciB0cmVlLgorCistIFBsZWFzZSBub3RlIHRoYXQgaWYgdGhlIG90aGVyIHByb2plY3QgbWVyZ2VzIGZyb20geW91LCB0aGVuIGl0IHdpbGwKKyAgY29ubmVjdCBpdHMgaGlzdG9yeSB0byB5b3Vycywgd2hpY2ggY2FuIGJlIHNvbWV0aGluZyB0aGV5IGRvbid0IHdhbnQKKyAgdG8uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzaW5nLXNpZ25lZC10YWctaW4tcHVsbC1yZXF1ZXN0LnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctc2lnbmVkLXRhZy1pbi1wdWxsLXJlcXVlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjA0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VzaW5nLXNpZ25lZC10YWctaW4tcHVsbC1yZXF1ZXN0LnR4dApAQCAtMCwwICsxLDIxNyBAQAorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorRGF0ZTogVHVlLCAxNyBKYW4gMjAxMSAxMzowMDowMCAtMDgwMAorU3ViamVjdDogVXNpbmcgc2lnbmVkIHRhZyBpbiBwdWxsIHJlcXVlc3RzCitBYnN0cmFjdDogQmVnaW5uaW5nIHYxLjcuOSwgYSBjb250cmlidXRvciBjYW4gcHVzaCBhIHNpZ25lZCB0YWcgdG8gaGVyCisgcHVibGlzaGluZyByZXBvc2l0b3J5IGFuZCBhc2sgaGVyIGludGVncmF0b3IgdG8gcHVsbCBpdC4gVGhpcyBhc3N1cmVzIHRoZQorIGludGVncmF0b3IgdGhhdCB0aGUgcHVsbGVkIGhpc3RvcnkgaXMgYXV0aGVudGljIGFuZCBhbGxvd3Mgb3RoZXJzIHRvCisgbGF0ZXIgdmFsaWRhdGUgaXQuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHVzZSBhIHNpZ25lZCB0YWcgaW4gcHVsbCByZXF1ZXN0cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIHR5cGljYWwgZGlzdHJpYnV0ZWQgd29ya2Zsb3cgdXNpbmcgR2l0IGlzIGZvciBhIGNvbnRyaWJ1dG9yIHRvIGZvcmsgYQorcHJvamVjdCwgYnVpbGQgb24gaXQsIHB1Ymxpc2ggdGhlIHJlc3VsdCB0byBoZXIgcHVibGljIHJlcG9zaXRvcnksIGFuZCBhc2sKK3RoZSAidXBzdHJlYW0iIHBlcnNvbiAob2Z0ZW4gdGhlIG93bmVyIG9mIHRoZSBwcm9qZWN0IHdoZXJlIHNoZSBmb3JrZWQKK2Zyb20pIHRvIHB1bGwgZnJvbSBoZXIgcHVibGljIHJlcG9zaXRvcnkuIFJlcXVlc3Rpbmcgc3VjaCBhICJwdWxsIiBpcyBtYWRlCitlYXN5IGJ5IHRoZSBgZ2l0IHJlcXVlc3QtcHVsbGAgY29tbWFuZC4KKworRWFybGllciwgYSB0eXBpY2FsIHB1bGwgcmVxdWVzdCBtYXkgaGF2ZSBzdGFydGVkIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHNpbmNlIGNvbW1pdCA0MDZkYTc4MDMyMTc5Li4uOgorCisgICBGcm9ib3ogMy4yICgyMDExLTA5LTMwIDE0OjIwOjU3IC0wNzAwKQorCisgYXJlIGF2YWlsYWJsZSBpbiB0aGUgR2l0IHJlcG9zaXRvcnkgYXQ6CisKKyAgIGV4YW1wbGUuY29tOi9naXQvZnJvYm96LmdpdCBmb3IteHl6enkKKy0tLS0tLS0tLS0tLQorCitmb2xsb3dlZCBieSBhIHNob3J0bG9nIG9mIHRoZSBjaGFuZ2VzIGFuZCBhIGRpZmZzdGF0LgorCitUaGUgcmVxdWVzdCB3YXMgZm9yIGEgYnJhbmNoIG5hbWUgKGUuZy4gYGZvci14eXp6eWApIGluIHRoZSBwdWJsaWMKK3JlcG9zaXRvcnkgb2YgdGhlIGNvbnRyaWJ1dG9yLCBhbmQgZXZlbiB0aG91Z2ggaXQgc3RhdGVkIHdoZXJlIHRoZQorY29udHJpYnV0b3IgZm9ya2VkIGhlciB3b3JrIGZyb20sIHRoZSBtZXNzYWdlIGRpZCBub3Qgc2F5IGFueXRoaW5nIGFib3V0Cit0aGUgY29tbWl0IHRvIGV4cGVjdCBhdCB0aGUgdGlwIG9mIHRoZSBmb3IteHl6enkgYnJhbmNoLiBJZiB0aGUgc2l0ZSB0aGF0Citob3N0cyB0aGUgcHVibGljIHJlcG9zaXRvcnkgb2YgdGhlIGNvbnRyaWJ1dG9yIGNhbm5vdCBiZSBmdWxseSB0cnVzdGVkLCBpdAord2FzIHVubmVjZXNzYXJpbHkgaGFyZCB0byBtYWtlIHN1cmUgd2hhdCB3YXMgcHVsbGVkIGJ5IHRoZSBpbnRlZ3JhdG9yIHdhcworZ2VudWluZWx5IHdoYXQgdGhlIGNvbnRyaWJ1dG9yIGhhZCBwcm9kdWNlZCBmb3IgdGhlIHByb2plY3QuIEFsc28gdGhlcmUKK3dhcyBubyBlYXN5IHdheSBmb3IgdGhpcmQtcGFydHkgYXVkaXRvcnMgdG8gbGF0ZXIgdmVyaWZ5IHRoZSByZXN1bHRpbmcKK2hpc3RvcnkuCisKK1N0YXJ0aW5nIGZyb20gR2l0IHJlbGVhc2UgdjEuNy45LCBhIGNvbnRyaWJ1dG9yIGNhbiBhZGQgYSBzaWduZWQgdGFnIHRvCit0aGUgY29tbWl0IGF0IHRoZSB0aXAgb2YgdGhlIGhpc3RvcnkgYW5kIGFzayB0aGUgaW50ZWdyYXRvciB0byBwdWxsIHRoYXQKK3NpZ25lZCB0YWcuIFdoZW4gdGhlIGludGVncmF0b3IgcnVucyBgZ2l0IHB1bGxgLCB0aGUgc2lnbmVkIHRhZyBpcworYXV0b21hdGljYWxseSB2ZXJpZmllZCB0byBhc3N1cmUgdGhhdCB0aGUgaGlzdG9yeSBpcyBub3QgdGFtcGVyZWQgd2l0aC4KK0luIGFkZGl0aW9uLCB0aGUgcmVzdWx0aW5nIG1lcmdlIGNvbW1pdCByZWNvcmRzIHRoZSBjb250ZW50IG9mIHRoZSBzaWduZWQKK3RhZywgc28gdGhhdCBvdGhlciBwZW9wbGUgY2FuIHZlcmlmeSB0aGF0IHRoZSBicmFuY2ggbWVyZ2VkIGJ5IHRoZQoraW50ZWdyYXRvciB3YXMgc2lnbmVkIGJ5IHRoZSBjb250cmlidXRvciwgd2l0aG91dCBmZXRjaGluZyB0aGUgc2lnbmVkIHRhZwordXNlZCB0byB2YWxpZGF0ZSB0aGUgcHVsbCByZXF1ZXN0IHNlcGFyYXRlbHkgYW5kIGtlZXBpbmcgaXQgaW4gdGhlIHJlZnMKK25hbWVzcGFjZS4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHdvcmtmbG93IGJldHdlZW4gdGhlIGNvbnRyaWJ1dG9yIGFuZCB0aGUKK2ludGVncmF0b3IsIHVzaW5nIEdpdCB2MS43Ljkgb3IgbGF0ZXIuCisKKworQSBjb250cmlidXRvciBvciBhIGxpZXV0ZW5hbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIHByZXBhcmluZyBoZXIgd29yayB0byBiZSBwdWxsZWQsIHRoZSBjb250cmlidXRvciB1c2VzIGBnaXQgdGFnIC1zYAordG8gY3JlYXRlIGEgc2lnbmVkIHRhZzoKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgY2hlY2tvdXQgd29yaworICQgLi4uICJnaXQgcHVsbCIgZnJvbSBzdWJsaWV1dGVuYW50cywgImdpdCBjb21taXQiIHlvdXIgb3duIHdvcmsgLi4uCisgJCBnaXQgdGFnIC1zIC1tICJDb21wbGV0ZWQgZnJvdHogZmVhdHVyZSIgZnJvdHotZm9yLXh5enp5IHdvcmsKKy0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhpcyBleGFtcGxlIHVzZXMgdGhlIGAtbWAgb3B0aW9uIHRvIGNyZWF0ZSBhIHNpZ25lZCB0YWcgd2l0aAoranVzdCBhIG9uZS1saW5lciBtZXNzYWdlLCBidXQgdGhpcyBpcyBmb3IgaWxsdXN0cmF0aW9uIHB1cnBvc2VzIG9ubHkuIEl0CitpcyBhZHZpc2FibGUgdG8gY29tcG9zZSBhIHdlbGwtd3JpdHRlbiBleHBsYW5hdGlvbiBvZiB3aGF0IHRoZSB0b3BpYyBkb2VzCit0byBqdXN0aWZ5IHdoeSBpdCBpcyB3b3J0aHdoaWxlIGZvciB0aGUgaW50ZWdyYXRvciB0byBwdWxsIGl0LCBhcyB0aGlzCittZXNzYWdlIHdpbGwgZXZlbnR1YWxseSBiZWNvbWUgcGFydCBvZiB0aGUgZmluYWwgaGlzdG9yeSBhZnRlciB0aGUKK2ludGVncmF0b3IgcmVzcG9uZHMgdG8gdGhlIHB1bGwgcmVxdWVzdCAoYXMgd2Ugd2lsbCBzZWUgbGF0ZXIpLgorCitUaGVuIHNoZSBwdXNoZXMgdGhlIHRhZyBvdXQgdG8gaGVyIHB1YmxpYyByZXBvc2l0b3J5OgorCistLS0tLS0tLS0tLS0KKyAkIGdpdCBwdXNoIGV4YW1wbGUuY29tOi9naXQvZnJvYm96LmdpdC8gK2Zyb3R6LWZvci14eXp6eQorLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG5vIG5lZWQgdG8gcHVzaCB0aGUgYHdvcmtgIGJyYW5jaCBvciBhbnl0aGluZyBlbHNlLgorCitOb3RlIHRoYXQgdGhlIGFib3ZlIGNvbW1hbmQgbGluZSB1c2VkIGEgcGx1cyBzaWduIGF0IHRoZSBiZWdpbm5pbmcgb2YKK2ArZnJvdHotZm9yLXh5enp5YCB0byBhbGxvdyBmb3JjaW5nIHRoZSB1cGRhdGUgb2YgYSB0YWcsIGFzIHRoZSBzYW1lCitjb250cmlidXRvciBtYXkgd2FudCB0byByZXVzZSBhIHNpZ25lZCB0YWcgd2l0aCB0aGUgc2FtZSBuYW1lIGFmdGVyIHRoZQorcHJldmlvdXMgcHVsbCByZXF1ZXN0IGhhcyBhbHJlYWR5IGJlZW4gcmVzcG9uZGVkIHRvLgorCitUaGUgY29udHJpYnV0b3IgdGhlbiBwcmVwYXJlcyBhIG1lc3NhZ2UgdG8gcmVxdWVzdCBhICJwdWxsIjoKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgcmVxdWVzdC1wdWxsIHYzLjIgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0LyBmcm90ei1mb3IteHl6enkgPm1zZy50eHQKKy0tLS0tLS0tLS0tLQorCitUaGUgYXJndW1lbnRzIGFyZToKKworLiB0aGUgdmVyc2lvbiBvZiB0aGUgaW50ZWdyYXRvcidzIGNvbW1pdCB0aGUgY29udHJpYnV0b3IgYmFzZWQgaGVyIHdvcmsgb247CisuIHRoZSBVUkwgb2YgdGhlIHJlcG9zaXRvcnksIHRvIHdoaWNoIHRoZSBjb250cmlidXRvciBoYXMgcHVzaGVkIHdoYXQgc2hlCisgIHdhbnRzIHRvIGdldCBwdWxsZWQ7IGFuZAorLiB0aGUgbmFtZSBvZiB0aGUgdGFnIHRoZSBjb250cmlidXRvciB3YW50cyB0byBnZXQgcHVsbGVkIChlYXJsaWVyLCBzaGUgY291bGQKKyAgd3JpdGUgb25seSBhIGJyYW5jaCBuYW1lIGhlcmUpLgorCitUaGUgcmVzdWx0aW5nIG1zZy50eHQgZmlsZSBiZWdpbnMgbGlrZSBzbzoKKworLS0tLS0tLS0tLS0tCisgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHNpbmNlIGNvbW1pdCA0MDZkYTc4MDMyMTc5Li4uOgorCisgICBGcm9ib3ogMy4yICgyMDExLTA5LTMwIDE0OjIwOjU3IC0wNzAwKQorCisgYXJlIGF2YWlsYWJsZSBpbiB0aGUgR2l0IHJlcG9zaXRvcnkgYXQ6CisKKyAgIGV4YW1wbGUuY29tOi9naXQvZnJvYm96LmdpdCB0YWdzL2Zyb3R6LWZvci14eXp6eQorCisgZm9yIHlvdSB0byBmZXRjaCBjaGFuZ2VzIHVwIHRvIDcwM2YwNWFkNTgzNWMuLi46CisKKyAgIEFkZCB0ZXN0cyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgZnJvdHogKDIwMTEtMTItMDIgMTA6MDI6NTIgLTA4MDApCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENvbXBsZXRlZCBmcm90eiBmZWF0dXJlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLQorCitmb2xsb3dlZCBieSBhIHNob3J0bG9nIG9mIHRoZSBjaGFuZ2VzIGFuZCBhIGRpZmZzdGF0LiAgQ29tcGFyaW5nIHRoaXMgd2l0aAordGhlIGVhcmxpZXIgaWxsdXN0cmF0aW9uIG9mIHRoZSBvdXRwdXQgZnJvbSB0aGUgdHJhZGl0aW9uYWwgYGdpdCByZXF1ZXN0LXB1bGxgCitjb21tYW5kLCB0aGUgcmVhZGVyIHNob3VsZCBub3RpY2UgdGhhdDoKKworLiBUaGUgdGlwIGNvbW1pdCB0byBleHBlY3QgaXMgc2hvd24gdG8gdGhlIGludGVncmF0b3I7IGFuZAorLiBUaGUgc2lnbmVkIHRhZyBtZXNzYWdlIGlzIHNob3duIHByb21pbmVudGx5IGJldHdlZW4gdGhlIGRhc2hlZCBsaW5lcworICBiZWZvcmUgdGhlIHNob3J0bG9nLgorCitUaGUgbGF0dGVyIGlzIHdoeSB0aGUgY29udHJpYnV0b3Igd291bGQgd2FudCB0byBqdXN0aWZ5IHdoeSBwdWxsaW5nIGhlcgord29yayBpcyB3b3J0aHdoaWxlIHdoZW4gY3JlYXRpbmcgdGhlIHNpZ25lZCB0YWcuICBUaGUgY29udHJpYnV0b3IgdGhlbgorb3BlbnMgaGVyIGZhdm9yaXRlIE1VQSwgcmVhZHMgbXNnLnR4dCwgZWRpdHMgYW5kIHNlbmRzIGl0IHRvIGhlciB1cHN0cmVhbQoraW50ZWdyYXRvci4KKworCitJbnRlZ3JhdG9yCistLS0tLS0tLS0tCisKK0FmdGVyIHJlY2VpdmluZyBzdWNoIGEgcHVsbCByZXF1ZXN0IG1lc3NhZ2UsIHRoZSBpbnRlZ3JhdG9yIGZldGNoZXMgYW5kCitpbnRlZ3JhdGVzIHRoZSB0YWcgbmFtZWQgaW4gdGhlIHJlcXVlc3QsIHdpdGg6CisKKy0tLS0tLS0tLS0tLQorICQgZ2l0IHB1bGwgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0LyB0YWdzL2Zyb3R6LWZvci14eXp6eQorLS0tLS0tLS0tLS0tCisKK1RoaXMgb3BlcmF0aW9uIHdpbGwgYWx3YXlzIG9wZW4gYW4gZWRpdG9yIHRvIGFsbG93IHRoZSBpbnRlZ3JhdG9yIHRvIGZpbmUKK3R1bmUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB3aGVuIG1lcmdpbmcgYSBzaWduZWQgdGFnLiAgQWxzbywgcHVsbGluZyBhCitzaWduZWQgdGFnIHdpbGwgYWx3YXlzIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCBldmVuIHdoZW4gdGhlIGludGVncmF0b3IgZG9lcworbm90IGhhdmUgYW55IG5ldyBjb21taXQgc2luY2UgdGhlIGNvbnRyaWJ1dG9yJ3Mgd29yayBmb3JrZWQgKGkuZS4gJ2Zhc3QKK2ZvcndhcmQnKSwgc28gdGhhdCB0aGUgaW50ZWdyYXRvciBjYW4gcHJvcGVybHkgZXhwbGFpbiB3aGF0IHRoZSBtZXJnZSBpcworYWJvdXQgYW5kIHdoeSBpdCB3YXMgbWFkZS4KKworSW4gdGhlIGVkaXRvciwgdGhlIGludGVncmF0b3Igd2lsbCBzZWUgc29tZXRoaW5nIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisgTWVyZ2UgdGFnICdmcm90ei1mb3IteHl6enknIG9mIGV4YW1wbGUuY29tOi9naXQvZnJvYm96LmdpdC8KKworIENvbXBsZXRlZCBmcm90eiBmZWF0dXJlCisgIyBncGc6IFNpZ25hdHVyZSBtYWRlIEZyaSAwMiBEZWMgMjAxMSAxMDowMzowMSBBTSBQU1QgdXNpbmcgUlNBIGtleSBJRCA5NkFGRTZDQgorICMgZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tICJDb24gVHJpYnV0b3IgPG5pdGZvbEBleGFtcGxlLmNvbT4iCistLS0tLS0tLS0tLS0KKworTm90aWNlIHRoYXQgdGhlIG1lc3NhZ2UgcmVjb3JkZWQgaW4gdGhlIHNpZ25lZCB0YWcgIkNvbXBsZXRlZCBmcm90egorZmVhdHVyZSIgYXBwZWFycyBoZXJlLCBhbmQgYWdhaW4gdGhhdCBpcyB3aHkgaXQgaXMgaW1wb3J0YW50IGZvciB0aGUKK2NvbnRyaWJ1dG9yIHRvIGV4cGxhaW4gaGVyIHdvcmsgd2VsbCB3aGVuIGNyZWF0aW5nIHRoZSBzaWduZWQgdGFnLgorCitBcyB1c3VhbCwgdGhlIGxpbmVzIGNvbW1lbnRlZCB3aXRoIGAjYCBhcmUgc3RyaXBwZWQgb3V0LiBUaGUgcmVzdWx0aW5nCitjb21taXQgcmVjb3JkcyB0aGUgc2lnbmVkIHRhZyB1c2VkIGZvciB0aGlzIHZhbGlkYXRpb24gaW4gYSBoaWRkZW4gZmllbGQKK3NvIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHVzZWQgYnkgb3RoZXJzIHRvIGF1ZGl0IHRoZSBoaXN0b3J5LiBUaGVyZSBpcyBubworbmVlZCBmb3IgdGhlIGludGVncmF0b3IgdG8ga2VlcCBhIHNlcGFyYXRlIGNvcHkgb2YgdGhlIHRhZyBpbiBoaXMKK3JlcG9zaXRvcnkgKGkuZS4gYGdpdCB0YWcgLWxgIHdvbid0IGxpc3QgdGhlIGBmcm90ei1mb3IteHl6enlgIHRhZyBpbiB0aGUKK2Fib3ZlIGV4YW1wbGUpLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBwdWJsaXNoIHRoZSB0YWcgdG8gaGlzIHB1YmxpYworcmVwb3NpdG9yeSwgZWl0aGVyLgorCitBZnRlciB0aGUgaW50ZWdyYXRvciByZXNwb25kcyB0byB0aGUgcHVsbCByZXF1ZXN0IGFuZCBoZXIgd29yayBiZWNvbWVzCitwYXJ0IG9mIHRoZSBwZXJtYW5lbnQgaGlzdG9yeSwgdGhlIGNvbnRyaWJ1dG9yIGNhbiByZW1vdmUgdGhlIHRhZyBmcm9tCitoZXIgcHVibGljIHJlcG9zaXRvcnksIGlmIHNoZSBjaG9vc2VzLCBpbiBvcmRlciB0byBrZWVwIHRoZSB0YWcgbmFtZXNwYWNlCitvZiBoZXIgcHVibGljIHJlcG9zaXRvcnkgY2xlYW4sIHdpdGg6CisKKy0tLS0tLS0tLS0tLQorICQgZ2l0IHB1c2ggZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0IDpmcm90ei1mb3IteHl6enkKKy0tLS0tLS0tLS0tLQorCisKK0F1ZGl0b3JzCistLS0tLS0tLQorCitUaGUgYC0tc2hvdy1zaWduYXR1cmVgIG9wdGlvbiBjYW4gYmUgZ2l2ZW4gdG8gYGdpdCBsb2dgIG9yIGBnaXQgc2hvd2AgYW5kCitzaG93cyB0aGUgdmVyaWZpY2F0aW9uIHN0YXR1cyBvZiB0aGUgZW1iZWRkZWQgc2lnbmVkIHRhZyBpbiBtZXJnZSBjb21taXRzCitjcmVhdGVkIHdoZW4gdGhlIGludGVncmF0b3IgcmVzcG9uZGVkIHRvIGEgcHVsbCByZXF1ZXN0IG9mIGEgc2lnbmVkIHRhZy4KKworQSB0eXBpY2FsIG91dHB1dCBmcm9tIGBnaXQgc2hvdyAtLXNob3ctc2lnbmF0dXJlYCBtYXkgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorICQgZ2l0IHNob3cgLS1zaG93LXNpZ25hdHVyZQorIGNvbW1pdCAwMjMwNmVmNmEzNDk4YTM5MTE4YWVmOWRmNzk3NWJkYjUwMDkxNTg1CisgbWVyZ2VkIHRhZyAnZnJvdHotZm9yLXh5enp5JworIGdwZzogU2lnbmF0dXJlIG1hZGUgRnJpIDA2IEphbiAyMDEyIDEyOjQxOjQ5IFBNIFBTVCB1c2luZyBSU0Ega2V5IElEIDk2QUZFNkNCCisgZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tICJDb24gVHJpYnV0b3IgPG5pdGZvbEBleGFtcGxlLmNvbT4iCisgTWVyZ2U6IDQwNmRhNzggNzAzZjA1YQorIEF1dGhvcjogSW50ZSBHcmF0b3IgPHh5enp5QGV4YW1wbGUuY29tPgorIERhdGU6ICAgVHVlIEphbiAxNyAxMzo0OTo0MSAyMDEyIC0wODAwCisKKyAgICAgTWVyZ2UgdGFnICdmcm90ei1mb3IteHl6enknIG9mIGV4YW1wbGUuY29tOi9naXQvZnJvYm96LmdpdC8KKworICAgICBDb21wbGV0ZWQgZnJvdHogZmVhdHVyZQorCisgICAgICogdGFnICdmcm90ei1mb3IteHl6enknICgxMDAgY29tbWl0cykKKyAgICAgICBBZGQgdGVzdHMgYW5kIGRvY3VtZW50YXRpb24gZm9yIGZyb3R6CisgICAgICAgLi4uCistLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIGF1ZGl0b3IgdG8gZXhwbGljaXRseSBmZXRjaCB0aGUgY29udHJpYnV0b3Incworc2lnbmF0dXJlLCBvciB0byBldmVuIGJlIGF3YXJlIG9mIHdoYXQgdGFnKHMpIHRoZSBjb250cmlidXRvciBhbmQgaW50ZWdyYXRvcgordXNlZCB0byBjb21tdW5pY2F0ZSB0aGUgc2lnbmF0dXJlLiAgQWxsIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiBpcyByZWNvcmRlZAorYXMgcGFydCBvZiB0aGUgbWVyZ2UgY29tbWl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMThuLnR4dCBiL0RvY3VtZW50YXRpb24vaTE4bi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzNmU1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTE4bi50eHQKQEAgLTAsMCArMSw3MCBAQAorR2l0IGlzIHRvIHNvbWUgZXh0ZW50IGNoYXJhY3RlciBlbmNvZGluZyBhZ25vc3RpYy4KKworIC0gVGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIG9iamVjdHMgYXJlIHVuaW50ZXJwcmV0ZWQgc2VxdWVuY2VzCisgICBvZiBieXRlcy4gIFRoZXJlIGlzIG5vIGVuY29kaW5nIHRyYW5zbGF0aW9uIGF0IHRoZSBjb3JlCisgICBsZXZlbC4KKworIC0gUGF0aCBuYW1lcyBhcmUgZW5jb2RlZCBpbiBVVEYtOCBub3JtYWxpemF0aW9uIGZvcm0gQy4gVGhpcworICAgYXBwbGllcyB0byB0cmVlIG9iamVjdHMsIHRoZSBpbmRleCBmaWxlLCByZWYgbmFtZXMsIGFzIHdlbGwgYXMKKyAgIHBhdGggbmFtZXMgaW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cywgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICBhbmQgY29uZmlnIGZpbGVzIChgLmdpdC9jb25maWdgIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKSwKKyAgIGxpbmtnaXQ6Z2l0aWdub3JlWzVdLCBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gYW5kCisgICBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0pLgorKworTm90ZSB0aGF0IEdpdCBhdCB0aGUgY29yZSBsZXZlbCB0cmVhdHMgcGF0aCBuYW1lcyBzaW1wbHkgYXMKK3NlcXVlbmNlcyBvZiBub24tTlVMIGJ5dGVzLCB0aGVyZSBhcmUgbm8gcGF0aCBuYW1lIGVuY29kaW5nCitjb252ZXJzaW9ucyAoZXhjZXB0IG9uIE1hYyBhbmQgV2luZG93cykuIFRoZXJlZm9yZSwgdXNpbmcKK25vbi1BU0NJSSBwYXRoIG5hbWVzIHdpbGwgbW9zdGx5IHdvcmsgZXZlbiBvbiBwbGF0Zm9ybXMgYW5kIGZpbGUKK3N5c3RlbXMgdGhhdCB1c2UgbGVnYWN5IGV4dGVuZGVkIEFTQ0lJIGVuY29kaW5ncy4gSG93ZXZlciwKK3JlcG9zaXRvcmllcyBjcmVhdGVkIG9uIHN1Y2ggc3lzdGVtcyB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IG9uCitVVEYtOC1iYXNlZCBzeXN0ZW1zIChlLmcuIExpbnV4LCBNYWMsIFdpbmRvd3MpIGFuZCB2aWNlIHZlcnNhLgorQWRkaXRpb25hbGx5LCBtYW55IEdpdC1iYXNlZCB0b29scyBzaW1wbHkgYXNzdW1lIHBhdGggbmFtZXMgdG8KK2JlIFVURi04IGFuZCB3aWxsIGZhaWwgdG8gZGlzcGxheSBvdGhlciBlbmNvZGluZ3MgY29ycmVjdGx5LgorCisgLSBDb21taXQgbG9nIG1lc3NhZ2VzIGFyZSB0eXBpY2FsbHkgZW5jb2RlZCBpbiBVVEYtOCwgYnV0IG90aGVyCisgICBleHRlbmRlZCBBU0NJSSBlbmNvZGluZ3MgYXJlIGFsc28gc3VwcG9ydGVkLiBUaGlzIGluY2x1ZGVzCisgICBJU08tODg1OS14LCBDUDEyNXggYW5kIG1hbnkgb3RoZXJzLCBidXQgX25vdF8gVVRGLTE2LzMyLAorICAgRUJDRElDIGFuZCBDSksgbXVsdGktYnl0ZSBlbmNvZGluZ3MgKEdCSywgU2hpZnQtSklTLCBCaWc1LAorICAgRVVDLXgsIENQOXh4IGV0Yy4pLgorCitBbHRob3VnaCB3ZSBlbmNvdXJhZ2UgdGhhdCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlcyBhcmUgZW5jb2RlZAoraW4gVVRGLTgsIGJvdGggdGhlIGNvcmUgYW5kIEdpdCBQb3JjZWxhaW4gYXJlIGRlc2lnbmVkIG5vdCB0bworZm9yY2UgVVRGLTggb24gcHJvamVjdHMuICBJZiBhbGwgcGFydGljaXBhbnRzIG9mIGEgcGFydGljdWxhcgorcHJvamVjdCBmaW5kIGl0IG1vcmUgY29udmVuaWVudCB0byB1c2UgbGVnYWN5IGVuY29kaW5ncywgR2l0Citkb2VzIG5vdCBmb3JiaWQgaXQuICBIb3dldmVyLCB0aGVyZSBhcmUgYSBmZXcgdGhpbmdzIHRvIGtlZXAgaW4KK21pbmQuCisKKy4gJ2dpdCBjb21taXQnIGFuZCAnZ2l0IGNvbW1pdC10cmVlJyBpc3N1ZXMKKyAgYSB3YXJuaW5nIGlmIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgZ2l2ZW4gdG8gaXQgZG9lcyBub3QgbG9vaworICBsaWtlIGEgdmFsaWQgVVRGLTggc3RyaW5nLCB1bmxlc3MgeW91IGV4cGxpY2l0bHkgc2F5IHlvdXIKKyAgcHJvamVjdCB1c2VzIGEgbGVnYWN5IGVuY29kaW5nLiAgVGhlIHdheSB0byBzYXkgdGhpcyBpcyB0bworICBoYXZlIGkxOG4uY29tbWl0ZW5jb2RpbmcgaW4gYC5naXQvY29uZmlnYCBmaWxlLCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KK1tpMThuXQorCWNvbW1pdEVuY29kaW5nID0gSVNPLTg4NTktMQorLS0tLS0tLS0tLS0tCisrCitDb21taXQgb2JqZWN0cyBjcmVhdGVkIHdpdGggdGhlIGFib3ZlIHNldHRpbmcgcmVjb3JkIHRoZSB2YWx1ZQorb2YgYGkxOG4uY29tbWl0RW5jb2RpbmdgIGluIGl0cyBgZW5jb2RpbmdgIGhlYWRlci4gIFRoaXMgaXMgdG8KK2hlbHAgb3RoZXIgcGVvcGxlIHdobyBsb29rIGF0IHRoZW0gbGF0ZXIuICBMYWNrIG9mIHRoaXMgaGVhZGVyCitpbXBsaWVzIHRoYXQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpcyBlbmNvZGVkIGluIFVURi04LgorCisuICdnaXQgbG9nJywgJ2dpdCBzaG93JywgJ2dpdCBibGFtZScgYW5kIGZyaWVuZHMgbG9vayBhdCB0aGUKKyAgYGVuY29kaW5nYCBoZWFkZXIgb2YgYSBjb21taXQgb2JqZWN0LCBhbmQgdHJ5IHRvIHJlLWNvZGUgdGhlCisgIGxvZyBtZXNzYWdlIGludG8gVVRGLTggdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuICBZb3UgY2FuCisgIHNwZWNpZnkgdGhlIGRlc2lyZWQgb3V0cHV0IGVuY29kaW5nIHdpdGgKKyAgYGkxOG4ubG9nT3V0cHV0RW5jb2RpbmdgIGluIGAuZ2l0L2NvbmZpZ2AgZmlsZSwgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tCitbaTE4bl0KKwlsb2dPdXRwdXRFbmNvZGluZyA9IElTTy04ODU5LTEKKy0tLS0tLS0tLS0tLQorKworSWYgeW91IGRvIG5vdCBoYXZlIHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgdGhlIHZhbHVlIG9mCitgaTE4bi5jb21taXRFbmNvZGluZ2AgaXMgdXNlZCBpbnN0ZWFkLgorCitOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGNob3NlIG5vdCB0byByZS1jb2RlIHRoZSBjb21taXQgbG9nCittZXNzYWdlIHdoZW4gYSBjb21taXQgaXMgbWFkZSB0byBmb3JjZSBVVEYtOCBhdCB0aGUgY29tbWl0CitvYmplY3QgbGV2ZWwsIGJlY2F1c2UgcmUtY29kaW5nIHRvIFVURi04IGlzIG5vdCBuZWNlc3NhcmlseSBhCityZXZlcnNpYmxlIG9wZXJhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5zdGFsbC1kb2MtcXVpY2suc2ggYi9Eb2N1bWVudGF0aW9uL2luc3RhbGwtZG9jLXF1aWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3MjMxZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2luc3RhbGwtZG9jLXF1aWNrLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorIyBUaGlzIHJlcXVpcmVzIGdpdC1tYW5wYWdlcyBhbmQvb3IgZ2l0LWh0bWxkb2NzIHJlcG9zaXRvcmllcworCityZXBvc2l0b3J5PSR7MT9yZXBvc2l0b3J5fQorZGVzdGRpcj0kezI/ZGVzdGluYXRpb259CitHSVRfTUFOX1JFRj0kezM/bWFzdGVyfQorCitHSVRfRElSPQorZm9yIGQgaW4gIiRyZXBvc2l0b3J5Ly5naXQiICIkcmVwb3NpdG9yeSIKK2RvCisJaWYgR0lUX0RJUj0iJGQiIGdpdCByZXYtcGFyc2UgIiRHSVRfTUFOX1JFRiIgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQlHSVRfRElSPSIkZCIKKwkJZXhwb3J0IEdJVF9ESVIKKwkJYnJlYWsKKwlmaQorZG9uZQorCitpZiB0ZXN0IC16ICIkR0lUX0RJUiIKK3RoZW4KKwllY2hvID4mMiAiTmVpdGhlciAkcmVwb3NpdG9yeSBub3IgJHJlcG9zaXRvcnkvLmdpdCBpcyBhIHJlcG9zaXRvcnkiCisJZXhpdCAxCitmaQorCitHSVRfV09SS19UUkVFPSQocHdkKQorR0lUX0lOREVYX0ZJTEU9JChwd2QpLy5xdWljay1kb2MuJCQKK2V4cG9ydCBHSVRfSU5ERVhfRklMRSBHSVRfV09SS19UUkVFCitybSAtZiAiJEdJVF9JTkRFWF9GSUxFIgordHJhcCAncm0gLWYgIiRHSVRfSU5ERVhfRklMRSInIDAKKworZ2l0IHJlYWQtdHJlZSAiJEdJVF9NQU5fUkVGIgorZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC1mIC0tcHJlZml4PSIkZGVzdGRpciIvCisKK2lmIHRlc3QgLW4gIiRHWiIKK3RoZW4KKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSAiJEdJVF9NQU5fUkVGIiB8CisJeGFyZ3MgcHJpbnRmICIkZGVzdGRpci8lc1xuIiB8CisJeGFyZ3MgZ3ppcCAtZgorZmkKK3JtIC1mICIkR0lUX0lOREVYX0ZJTEUiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luc3RhbGwtd2ViZG9jLnNoIGIvRG9jdW1lbnRhdGlvbi9pbnN0YWxsLXdlYmRvYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZDhiNGZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnN0YWxsLXdlYmRvYy5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKworVD0iJDEiCisKK2ZvciBoIGluIFwKKwkqLnR4dCAqLmh0bWwgXAorCWhvd3RvLyoudHh0IGhvd3RvLyouaHRtbCBcCisJdGVjaG5pY2FsLyoudHh0IHRlY2huaWNhbC8qLmh0bWwgXAorCVJlbE5vdGVzLyoudHh0ICouY3NzCitkbworCWlmIHRlc3QgISAtZiAiJGgiCisJdGhlbgorCQk6IGRpZCBub3QgbWF0Y2gKKwllbGlmIHRlc3QgLWYgIiRULyRoIiAmJgorCQkkRElGRiAtdSAtSSdeTGFzdCB1cGRhdGVkICcgIiRULyRoIiAiJGgiCisJdGhlbgorCQk6OyAjIHVwIHRvIGRhdGUKKwllbHNlCisJCWVjaG8gPiYyICIjIGluc3RhbGwgJGggJFQvJGgiCisJCXJtIC1mICIkVC8kaCIKKwkJbWtkaXIgLXAgJChkaXJuYW1lICIkVC8kaCIpCisJCWNwICIkaCIgIiRULyRoIgorCWZpCitkb25lCitzdHJpcF9sZWFkaW5nPSQoZWNobyAiJFQvIiB8IHNlZCAtZSAnc3wufC58ZycpCitmb3IgdGggaW4gXAorCSIkVCIvKi5odG1sICIkVCIvKi50eHQgXAorCSIkVCIvaG93dG8vKi50eHQgIiRUIi9ob3d0by8qLmh0bWwgXAorCSIkVCIvdGVjaG5pY2FsLyoudHh0ICIkVCIvdGVjaG5pY2FsLyouaHRtbAorZG8KKwloPSQoZXhwciAiJHRoIiA6ICIkc3RyaXBfbGVhZGluZyInXCguKlwpJykKKwljYXNlICIkaCIgaW4KKwlSZWxOb3Rlcy0qLnR4dCB8IGluZGV4Lmh0bWwpIGNvbnRpbnVlIDs7CisJZXNhYworCXRlc3QgLWYgIiRoIiAmJiBjb250aW51ZQorCWVjaG8gPiYyICIjIHJtIC1mICR0aCIKKwlybSAtZiAiJHRoIgorZG9uZQorbG4gLXNmIGdpdC5odG1sICIkVC9pbmRleC5odG1sIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9saW5lLXJhbmdlLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2xpbmUtcmFuZ2UtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjk2NzZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9saW5lLXJhbmdlLWZvcm1hdC50eHQKQEAgLTAsMCArMSwzMCBAQAorPHN0YXJ0PiBhbmQgPGVuZD4gY2FuIHRha2Ugb25lIG9mIHRoZXNlIGZvcm1zOgorCistIG51bWJlcgorKworSWYgPHN0YXJ0PiBvciA8ZW5kPiBpcyBhIG51bWJlciwgaXQgc3BlY2lmaWVzIGFuCithYnNvbHV0ZSBsaW5lIG51bWJlciAobGluZXMgY291bnQgZnJvbSAxKS4KKysKKworLSAvcmVnZXgvCisrCitUaGlzIGZvcm0gd2lsbCB1c2UgdGhlIGZpcnN0IGxpbmUgbWF0Y2hpbmcgdGhlIGdpdmVuCitQT1NJWCByZWdleC4gSWYgPHN0YXJ0PiBpcyBhIHJlZ2V4LCBpdCB3aWxsIHNlYXJjaCBmcm9tIHRoZSBlbmQgb2YKK3RoZSBwcmV2aW91cyBgLUxgIHJhbmdlLCBpZiBhbnksIG90aGVyd2lzZSBmcm9tIHRoZSBzdGFydCBvZiBmaWxlLgorSWYgPHN0YXJ0PiBpcyBgYF4vcmVnZXgvJycsIGl0IHdpbGwgc2VhcmNoIGZyb20gdGhlIHN0YXJ0IG9mIGZpbGUuCitJZiA8ZW5kPiBpcyBhIHJlZ2V4LCBpdCB3aWxsIHNlYXJjaAorc3RhcnRpbmcgYXQgdGhlIGxpbmUgZ2l2ZW4gYnkgPHN0YXJ0Pi4KKysKKworLSArb2Zmc2V0IG9yIC1vZmZzZXQKKysKK1RoaXMgaXMgb25seSB2YWxpZCBmb3IgPGVuZD4gYW5kIHdpbGwgc3BlY2lmeSBhIG51bWJlcgorb2YgbGluZXMgYmVmb3JlIG9yIGFmdGVyIHRoZSBsaW5lIGdpdmVuIGJ5IDxzdGFydD4uCisKKysKK0lmIGBgOjxmdW5jbmFtZT4nJyBpcyBnaXZlbiBpbiBwbGFjZSBvZiA8c3RhcnQ+IGFuZCA8ZW5kPiwgaXQgaXMgYQorcmVndWxhciBleHByZXNzaW9uIHRoYXQgZGVub3RlcyB0aGUgcmFuZ2UgZnJvbSB0aGUgZmlyc3QgZnVuY25hbWUgbGluZQordGhhdCBtYXRjaGVzIDxmdW5jbmFtZT4sIHVwIHRvIHRoZSBuZXh0IGZ1bmNuYW1lIGxpbmUuIGBgOjxmdW5jbmFtZT4nJworc2VhcmNoZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBgLUxgIHJhbmdlLCBpZiBhbnksIG90aGVyd2lzZQorZnJvbSB0aGUgc3RhcnQgb2YgZmlsZS4gYGBeOjxmdW5jbmFtZT4nJyBzZWFyY2hlcyBmcm9tIHRoZSBzdGFydCBvZgorZmlsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGludC1naXRsaW5rLnBlcmwgYi9Eb2N1bWVudGF0aW9uL2xpbnQtZ2l0bGluay5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3NmNjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xpbnQtZ2l0bGluay5wZXJsCkBAIC0wLDAgKzEsNzEgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2UgRmlsZTo6RmluZDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRiYXNlZGlyID0gIi4iOworR2V0T3B0aW9ucygiYmFzZWRpcj1zIiA9PiBcJGJhc2VkaXIpCisJb3IgZGllKCJDYW5ub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuIik7CisKK215ICRmb3VuZF9lcnJvcnMgPSAwOworCitzdWIgcmVwb3J0IHsKKwlteSAoJHdoZXJlLCAkd2hhdCwgJGVycm9yKSA9IEBfOworCXByaW50ICIkd2hlcmU6ICRlcnJvcjogJHdoYXRcbiI7CisJJGZvdW5kX2Vycm9ycyA9IDE7Cit9CisKK3N1YiBncmFiX3NlY3Rpb24geworCW15ICgkcGFnZSkgPSBAXzsKKwlvcGVuIG15ICRmaCwgIjwiLCAiJGJhc2VkaXIvJHBhZ2UudHh0IjsKKwlteSAkZmlyc3RsaW5lID0gPCRmaD47CisJY2hvbXAgJGZpcnN0bGluZTsKKwljbG9zZSAkZmg7CisJbXkgKCRzZWN0aW9uKSA9ICgkZmlyc3RsaW5lID1+IC8uKlwoKFxkKVwpJC8pOworCXJldHVybiAkc2VjdGlvbjsKK30KKworc3ViIGxpbnQgeworCW15ICgkZmlsZSkgPSBAXzsKKwlvcGVuIG15ICRmaCwgIjwiLCAkZmlsZQorCQlvciByZXR1cm47CisJd2hpbGUgKDwkZmg+KSB7CisJCW15ICR3aGVyZSA9ICIkZmlsZTokLiI7CisJCXdoaWxlIChzL2xpbmtnaXQ6KCguKj8pXFsoXGQpXF0pLy8pIHsKKwkJCW15ICgkdGFyZ2V0LCAkcGFnZSwgJHNlY3Rpb24pID0gKCQxLCAkMiwgJDMpOworCisJCQkjIERlLUFzY2lpRG9jCisJCQkkcGFnZSA9fiBzL3tsaXRkZH0vLS0vZzsKKworCQkJaWYgKCRwYWdlICF+IC9eZ2l0LykgeworCQkJCXJlcG9ydCgkd2hlcmUsICR0YXJnZXQsICJub25naXQgbGluayIpOworCQkJCW5leHQ7CisJCQl9CisJCQlpZiAoISAtZiAiJGJhc2VkaXIvJHBhZ2UudHh0IikgeworCQkJCXJlcG9ydCgkd2hlcmUsICR0YXJnZXQsICJubyBzdWNoIHNvdXJjZSIpOworCQkJCW5leHQ7CisJCQl9CisJCQkkcmVhbF9zZWN0aW9uID0gZ3JhYl9zZWN0aW9uKCRwYWdlKTsKKwkJCWlmICgkcmVhbF9zZWN0aW9uICE9ICRzZWN0aW9uKSB7CisJCQkJcmVwb3J0KCR3aGVyZSwgJHRhcmdldCwKKwkJCQkJIndyb25nIHNlY3Rpb24gKHNob3VsZCBiZSAkcmVhbF9zZWN0aW9uKSIpOworCQkJCW5leHQ7CisJCQl9CisJCX0KKwl9CisJY2xvc2UgJGZoOworfQorCitzdWIgbGludF9pdCB7CisJbGludCgkRmlsZTo6RmluZDo6bmFtZSkgaWYgLWYgJiYgL1wudHh0JC87Cit9CisKK2lmICghQEFSR1YpIHsKKwlmaW5kKHsgd2FudGVkID0+IFwmbGludF9pdCwgbm9fY2hkaXIgPT4gMSB9LCAkYmFzZWRpcik7Cit9IGVsc2UgeworCWZvciAoQEFSR1YpIHsKKwkJbGludCgkXyk7CisJfQorfQorCitleGl0ICRmb3VuZF9lcnJvcnM7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21haWxtYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9tYWlsbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThjMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYWlsbWFwLnR4dApAQCAtMCwwICsxLDc1IEBACitJZiB0aGUgZmlsZSBgLm1haWxtYXBgIGV4aXN0cyBhdCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHJlcG9zaXRvcnksIG9yIGF0Cit0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSB0aGUgbWFpbG1hcC5maWxlIG9yIG1haWxtYXAuYmxvYgorY29uZmlndXJhdGlvbiBvcHRpb25zLCBpdAoraXMgdXNlZCB0byBtYXAgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3NlcyB0bworY2Fub25pY2FsIHJlYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3Nlcy4KKworSW4gdGhlIHNpbXBsZSBmb3JtLCBlYWNoIGxpbmUgaW4gdGhlIGZpbGUgY29uc2lzdHMgb2YgdGhlIGNhbm9uaWNhbAorcmVhbCBuYW1lIG9mIGFuIGF1dGhvciwgd2hpdGVzcGFjZSwgYW5kIGFuIGVtYWlsIGFkZHJlc3MgdXNlZCBpbiB0aGUKK2NvbW1pdCAoZW5jbG9zZWQgYnkgJzwnIGFuZCAnPicpIHRvIG1hcCB0byB0aGUgbmFtZS4gRm9yIGV4YW1wbGU6CistLQorCVByb3BlciBOYW1lIDxjb21taXRAZW1haWwueHg+CistLQorCitUaGUgbW9yZSBjb21wbGV4IGZvcm1zIGFyZToKKy0tCisJPHByb3BlckBlbWFpbC54eD4gPGNvbW1pdEBlbWFpbC54eD4KKy0tCit3aGljaCBhbGxvd3MgbWFpbG1hcCB0byByZXBsYWNlIG9ubHkgdGhlIGVtYWlsIHBhcnQgb2YgYSBjb21taXQsIGFuZDoKKy0tCisJUHJvcGVyIE5hbWUgPHByb3BlckBlbWFpbC54eD4gPGNvbW1pdEBlbWFpbC54eD4KKy0tCit3aGljaCBhbGxvd3MgbWFpbG1hcCB0byByZXBsYWNlIGJvdGggdGhlIG5hbWUgYW5kIHRoZSBlbWFpbCBvZiBhCitjb21taXQgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBjb21taXQgZW1haWwgYWRkcmVzcywgYW5kOgorLS0KKwlQcm9wZXIgTmFtZSA8cHJvcGVyQGVtYWlsLnh4PiBDb21taXQgTmFtZSA8Y29tbWl0QGVtYWlsLnh4PgorLS0KK3doaWNoIGFsbG93cyBtYWlsbWFwIHRvIHJlcGxhY2UgYm90aCB0aGUgbmFtZSBhbmQgdGhlIGVtYWlsIG9mIGEKK2NvbW1pdCBtYXRjaGluZyBib3RoIHRoZSBzcGVjaWZpZWQgY29tbWl0IG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MuCisKK0V4YW1wbGUgMTogWW91ciBoaXN0b3J5IGNvbnRhaW5zIGNvbW1pdHMgYnkgdHdvIGF1dGhvcnMsIEphbmUKK2FuZCBKb2UsIHdob3NlIG5hbWVzIGFwcGVhciBpbiB0aGUgcmVwb3NpdG9yeSB1bmRlciBzZXZlcmFsIGZvcm1zOgorCistLS0tLS0tLS0tLS0KK0pvZSBEZXZlbG9wZXIgPGpvZUBleGFtcGxlLmNvbT4KK0pvZSBSLiBEZXZlbG9wZXIgPGpvZUBleGFtcGxlLmNvbT4KK0phbmUgRG9lIDxqYW5lQGV4YW1wbGUuY29tPgorSmFuZSBEb2UgPGphbmVAbGFwdG9wLihub25lKT4KK0phbmUgRC4gPGphbmVAZGVza3RvcC4obm9uZSk+CistLS0tLS0tLS0tLS0KKworTm93IHN1cHBvc2UgdGhhdCBKb2Ugd2FudHMgaGlzIG1pZGRsZSBuYW1lIGluaXRpYWwgdXNlZCwgYW5kIEphbmUKK3ByZWZlcnMgaGVyIGZhbWlseSBuYW1lIGZ1bGx5IHNwZWxsZWQgb3V0LiBBIHByb3BlciBgLm1haWxtYXBgIGZpbGUKK3dvdWxkIGxvb2sgbGlrZToKKworLS0tLS0tLS0tLS0tCitKYW5lIERvZSAgICAgICAgIDxqYW5lQGRlc2t0b3AuKG5vbmUpPgorSm9lIFIuIERldmVsb3BlciA8am9lQGV4YW1wbGUuY29tPgorLS0tLS0tLS0tLS0tCisKK05vdGUgaG93IHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFuIGVudHJ5IGZvciBgPGphbmVAbGFwdG9wLihub25lKT5gLCBiZWNhdXNlIHRoZQorcmVhbCBuYW1lIG9mIHRoYXQgYXV0aG9yIGlzIGFscmVhZHkgY29ycmVjdC4KKworRXhhbXBsZSAyOiBZb3VyIHJlcG9zaXRvcnkgY29udGFpbnMgY29tbWl0cyBmcm9tIHRoZSBmb2xsb3dpbmcKK2F1dGhvcnM6CisKKy0tLS0tLS0tLS0tLQorbmljazEgPGJ1Z3NAY29tcGFueS54eD4KK25pY2syIDxidWdzQGNvbXBhbnkueHg+CituaWNrMiA8bmljazJAY29tcGFueS54eD4KK3NhbnRhIDxtZUBjb21wYW55Lnh4PgorY2xhdXMgPG1lQGNvbXBhbnkueHg+CitDVE8gPGN0b0Bjb29tcGFueS54eD4KKy0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSBtaWdodCB3YW50IGEgYC5tYWlsbWFwYCBmaWxlIHRoYXQgbG9va3MgbGlrZToKKy0tLS0tLS0tLS0tLQorPGN0b0Bjb21wYW55Lnh4PiAgICAgICAgICAgICAgICAgICAgICAgPGN0b0Bjb29tcGFueS54eD4KK1NvbWUgRHVkZSA8c29tZUBkdWRlLnh4PiAgICAgICAgIG5pY2sxIDxidWdzQGNvbXBhbnkueHg+CitPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PgorT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+ICAgICAgICAgPG5pY2syQGNvbXBhbnkueHg+CitTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PiA8bWVAY29tcGFueS54eD4KKy0tLS0tLS0tLS0tLQorCitVc2UgaGFzaCAnIycgZm9yIGNvbW1lbnRzIHRoYXQgYXJlIGVpdGhlciBvbiB0aGVpciBvd24gbGluZSwgb3IgYWZ0ZXIKK3RoZSBlbWFpbCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLTEuNzIueHNsIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLTEuNzIueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDMxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtMS43Mi54c2wKQEAgLTAsMCArMSwxNCBAQAorPCEtLSBtYW5wYWdlLTEuNzIueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sKKyAgICAgaGFuZGxlcyBwZWN1bGlhcml0aWVzIGluIGRvY2Jvb2steHNsIDEuNzIuMCAtLT4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworPHhzbDppbXBvcnQgaHJlZj0ibWFucGFnZS1iYXNlLnhzbCIvPgorCis8IS0tIHRoZXNlIGFyZSB0aGUgc3BlY2lhbCB2YWx1ZXMgZm9yIHRoZSByb2ZmIGNvbnRyb2wgY2hhcmFjdGVycworICAgICBuZWVkZWQgZm9yIGRvY2Jvb2steHNsIDEuNzIuMCAtLT4KKzx4c2w6cGFyYW0gbmFtZT0iZ2l0LmRvY2Jvb2suYmFja3NsYXNoIj4mI3gyNTkzOzwveHNsOnBhcmFtPgorPHhzbDpwYXJhbSBuYW1lPSJnaXQuZG9jYm9vay5kb3QiICAgICAgPiYjeDIzMDI7PC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS11cmwueHNsLmluIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODAwOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgpAQCAtMCwwICsxLDEwIEBACis8IS0tIG1hbnBhZ2UtYmFzZS11cmwueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIG5ld2VyIGRvY2Jvb2sgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gc2V0IGEgYmFzZSBVUkwgZm9yIHJlbGF0aXZlIGxpbmtzIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJtYW4uYmFzZS51cmwuZm9yLnJlbGF0aXZlLmxpbmtzIgorCT5AQE1BTl9CQVNFX1VSTEBAPC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2NGZhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1iYXNlLnhzbApAQCAtMCwwICsxLDM1IEBACis8IS0tIG1hbnBhZ2UtYmFzZS54c2w6CisgICAgIHNwZWNpYWwgZm9ybWF0dGluZyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rIC0tPgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8IS0tIHRoZXNlIHBhcmFtcyBzaWxlbmNlIHNvbWUgb3V0cHV0IGZyb20geG1sdG8gLS0+Cis8eHNsOnBhcmFtIG5hbWU9Im1hbi5vdXRwdXQucXVpZXRseSIgc2VsZWN0PSIxIi8+Cis8eHNsOnBhcmFtIG5hbWU9InJlZmVudHJ5Lm1ldGEuZ2V0LnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorCis8IS0tIGNvbnZlcnQgYXNjaWlkb2MgY2FsbG91dHMgdG8gbWFuIHBhZ2UgZm9ybWF0OworICAgICBnaXQuZG9jYm9vay5iYWNrc2xhc2ggYW5kIGdpdC5kb2Nib29rLmRvdCBwYXJhbXMKKyAgICAgbXVzdCBiZSBzdXBwbGllZCBieSBhbm90aGVyIFhTTCBmaWxlIG9yIG90aGVyIG1lYW5zIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY28iPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoCisJCQkgICAgICAkZ2l0LmRvY2Jvb2suYmFja3NsYXNoLCdmQignLAorCQkJICAgICAgc3Vic3RyaW5nLWFmdGVyKEBpZCwnLScpLCcpJywKKwkJCSAgICAgICRnaXQuZG9jYm9vay5iYWNrc2xhc2gsJ2ZSJykiLz4KKzwveHNsOnRlbXBsYXRlPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2FsbG91dGxpc3QiPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suZG90Ii8+CisJPHhzbDp0ZXh0PnNwJiMxMDs8L3hzbDp0ZXh0PgorCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKwk8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjYWxsb3V0Ij4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KAorCQkJICAgICAgJGdpdC5kb2Nib29rLmJhY2tzbGFzaCwnZkInLAorCQkJICAgICAgc3Vic3RyaW5nLWFmdGVyKEBhcmVhcmVmcywnLScpLAorCQkJICAgICAgJy4gJywkZ2l0LmRvY2Jvb2suYmFja3NsYXNoLCdmUicpIi8+CisJPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suZG90Ii8+CisJPHhzbDp0ZXh0PmJyJiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1ib2xkLWxpdGVyYWwueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDZjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbApAQCAtMCwwICsxLDE4IEBACis8IS0tIG1hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbDoKKyAgICAgc3BlY2lhbCBmb3JtYXR0aW5nIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8IS0tIHJlbmRlciBsaXRlcmFsIHRleHQgYXMgYm9sZCAoaW5zdGVhZCBvZiBwbGFpbiBvciBtb25vc3BhY2UpOworICAgICB0aGlzIG1ha2VzIGxpdGVyYWwgdGV4dCBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggaW4gbWFucGFnZXMKKyAgICAgdmlld2VkIG9uIGEgdHR5IC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGl0ZXJhbHxkOmxpdGVyYWwiPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suYmFja3NsYXNoIi8+CisJPHhzbDp0ZXh0PmZCPC94c2w6dGV4dD4KKwk8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CisJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRnaXQuZG9jYm9vay5iYWNrc2xhc2giLz4KKwk8eHNsOnRleHQ+ZlI8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utbm9ybWFsLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1ub3JtYWwueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OGY1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utbm9ybWFsLnhzbApAQCAtMCwwICsxLDEzIEBACis8IS0tIG1hbnBhZ2Utbm9ybWFsLnhzbDoKKyAgICAgc3BlY2lhbCBzZXR0aW5ncyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rCisgICAgIGhhbmRsZXMgYW55dGhpbmcgd2Ugd2FudCB0byBrZWVwIGF3YXkgZnJvbSBkb2Nib29rLXhzbCAxLjcyLjAgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzx4c2w6aW1wb3J0IGhyZWY9Im1hbnBhZ2UtYmFzZS54c2wiLz4KKworPCEtLSB0aGVzZSBhcmUgdGhlIG5vcm1hbCB2YWx1ZXMgZm9yIHRoZSByb2ZmIGNvbnRyb2wgY2hhcmFjdGVycyAtLT4KKzx4c2w6cGFyYW0gbmFtZT0iZ2l0LmRvY2Jvb2suYmFja3NsYXNoIj5cPC94c2w6cGFyYW0+Cis8eHNsOnBhcmFtIG5hbWU9ImdpdC5kb2Nib29rLmRvdCIJPi48L3hzbDpwYXJhbT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFucGFnZS1xdW90ZS1hcG9zLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1xdW90ZS1hcG9zLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWI4ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLXF1b3RlLWFwb3MueHNsCkBAIC0wLDAgKzEsMTYgQEAKKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworPCEtLSB3b3JrIGFyb3VuZCBuZXdlciBncm9mZi9tYW4gc2V0dXBzIHVzaW5nIGEgcHJldHRpZXIgYXBvc3Ryb3BoZQorICAgICB0aGF0IHVuZm9ydHVuYXRlbHkgZG9lcyBub3QgcXVvdGUgYW55dGhpbmcgd2hlbiBjdXQmcGFzdGluZworICAgICBleGFtcGxlcyB0byB0aGUgc2hlbGwgLS0+Cis8eHNsOnRlbXBsYXRlIG5hbWU9ImVzY2FwZS5hcG9zdHJvcGhlIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjb250ZW50Ii8+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmcuc3Vic3QiPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzdHJpbmciIHNlbGVjdD0iJGNvbnRlbnQiLz4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idGFyZ2V0Ij4nPC94c2w6d2l0aC1wYXJhbT4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZW1lbnQiPlwoYXE8L3hzbDp3aXRoLXBhcmFtPgorICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utc3VwcHJlc3Mtc3AueHNsIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLXN1cHByZXNzLXNwLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNjNzYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLXN1cHByZXNzLXNwLnhzbApAQCAtMCwwICsxLDIxIEBACis8IS0tIG1hbnBhZ2Utc3VwcHJlc3Mtc3AueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sKKyAgICAgaGFuZGxlcyBlcnJvbmVvdXMsIGlubGluZSAuc3AgaW4gbWFucGFnZSBvdXRwdXQgb2Ygc29tZQorICAgICB2ZXJzaW9ucyBvZiBkb2Nib29rLXhzbCAtLT4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworPCEtLSBhdHRlbXB0IHRvIHdvcmsgYXJvdW5kIHNwdXJpb3VzIC5zcCBhdCB0aGUgdGFpbCBvZiB0aGUgbGluZQorICAgICB0aGF0IHNvbWUgdmVyc2lvbnMgb2YgZG9jYm9vayBzdHlsZXNoZWV0cyBzZWVtIHRvIGFkZCAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InNpbXBhcmEiPgorICA8eHNsOnZhcmlhYmxlIG5hbWU9ImNvbnRlbnQiPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKyAgPC94c2w6dmFyaWFibGU+CisgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJub3JtYWxpemUtc3BhY2UoJGNvbnRlbnQpIi8+CisgIDx4c2w6aWYgdGVzdD0ibm90KGFuY2VzdG9yOjphdXRob3JibHVyYikgYW5kCisgICAgICAgICAgICAgICAgbm90KGFuY2VzdG9yOjpwZXJzb25ibHVyYikiPgorICAgIDx4c2w6dGV4dD4mIzEwOyYjMTA7PC94c2w6dGV4dD4KKyAgPC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFucGFnZS54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjRiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UueHNsCkBAIC0wLDAgKzEsMyBAQAorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9uPSIxLjAiPgorCTx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC1ucy9jdXJyZW50L21hbnBhZ2VzL2RvY2Jvb2sueHNsIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZGM0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0CkBAIC0wLDAgKzEsMTY2IEBACistLWNvbW1pdDo6CistLW5vLWNvbW1pdDo6CisJUGVyZm9ybSB0aGUgbWVyZ2UgYW5kIGNvbW1pdCB0aGUgcmVzdWx0LiBUaGlzIG9wdGlvbiBjYW4KKwliZSB1c2VkIHRvIG92ZXJyaWRlIC0tbm8tY29tbWl0LgorKworV2l0aCAtLW5vLWNvbW1pdCBwZXJmb3JtIHRoZSBtZXJnZSBhbmQgc3RvcCBqdXN0IGJlZm9yZSBjcmVhdGluZworYSBtZXJnZSBjb21taXQsIHRvIGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8gaW5zcGVjdCBhbmQgZnVydGhlcgordHdlYWsgdGhlIG1lcmdlIHJlc3VsdCBiZWZvcmUgY29tbWl0dGluZy4KKysKK05vdGUgdGhhdCBmYXN0LWZvcndhcmQgdXBkYXRlcyBkbyBub3QgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IGFuZAordGhlcmVmb3JlIHRoZXJlIGlzIG5vIHdheSB0byBzdG9wIHRob3NlIG1lcmdlcyB3aXRoIC0tbm8tY29tbWl0LgorVGh1cywgaWYgeW91IHdhbnQgdG8gZW5zdXJlIHlvdXIgYnJhbmNoIGlzIG5vdCBjaGFuZ2VkIG9yIHVwZGF0ZWQKK2J5IHRoZSBtZXJnZSBjb21tYW5kLCB1c2UgLS1uby1mZiB3aXRoIC0tbm8tY29tbWl0LgorCistLWVkaXQ6OgorLWU6OgorLS1uby1lZGl0OjoKKwlJbnZva2UgYW4gZWRpdG9yIGJlZm9yZSBjb21taXR0aW5nIHN1Y2Nlc3NmdWwgbWVjaGFuaWNhbCBtZXJnZSB0bworCWZ1cnRoZXIgZWRpdCB0aGUgYXV0by1nZW5lcmF0ZWQgbWVyZ2UgbWVzc2FnZSwgc28gdGhhdCB0aGUgdXNlcgorCWNhbiBleHBsYWluIGFuZCBqdXN0aWZ5IHRoZSBtZXJnZS4gVGhlIGAtLW5vLWVkaXRgIG9wdGlvbiBjYW4gYmUKKwl1c2VkIHRvIGFjY2VwdCB0aGUgYXV0by1nZW5lcmF0ZWQgbWVzc2FnZSAodGhpcyBpcyBnZW5lcmFsbHkKKwlkaXNjb3VyYWdlZCkuCitpZm5kZWY6OmdpdC1wdWxsW10KK1RoZSBgLS1lZGl0YCAob3IgYC1lYCkgb3B0aW9uIGlzIHN0aWxsIHVzZWZ1bCBpZiB5b3UgYXJlCitnaXZpbmcgYSBkcmFmdCBtZXNzYWdlIHdpdGggdGhlIGAtbWAgb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQgbGluZQorYW5kIHdhbnQgdG8gZWRpdCBpdCBpbiB0aGUgZWRpdG9yLgorZW5kaWY6OmdpdC1wdWxsW10KKysKK09sZGVyIHNjcmlwdHMgbWF5IGRlcGVuZCBvbiB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgb2Ygbm90IGFsbG93aW5nIHRoZQordXNlciB0byBlZGl0IHRoZSBtZXJnZSBsb2cgbWVzc2FnZS4gVGhleSB3aWxsIHNlZSBhbiBlZGl0b3Igb3BlbmVkIHdoZW4KK3RoZXkgcnVuIGBnaXQgbWVyZ2VgLiBUbyBtYWtlIGl0IGVhc2llciB0byBhZGp1c3Qgc3VjaCBzY3JpcHRzIHRvIHRoZQordXBkYXRlZCBiZWhhdmlvdXIsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUX01FUkdFX0FVVE9FRElUYCBjYW4gYmUKK3NldCB0byBgbm9gIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlbS4KKworLS1jbGVhbnVwPTxtb2RlPjo6CisJVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyBob3cgdGhlIG1lcmdlIG1lc3NhZ2Ugd2lsbCBiZSBjbGVhbmVkIHVwIGJlZm9yZQorCWNvbW1pdHRpbmcuIFNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIG1vcmUgZGV0YWlscy4gSW4gYWRkaXRpb24sIGlmCisJdGhlICc8bW9kZT4nIGlzIGdpdmVuIGEgdmFsdWUgb2YgYHNjaXNzb3JzYCwgc2Npc3NvcnMgd2lsbCBiZSBhcHBlbmRlZAorCXRvIGBNRVJHRV9NU0dgIGJlZm9yZSBiZWluZyBwYXNzZWQgb24gdG8gdGhlIGNvbW1pdCBtYWNoaW5lcnkgaW4gdGhlCisJY2FzZSBvZiBhIG1lcmdlIGNvbmZsaWN0LgorCistLWZmOjoKKy0tbm8tZmY6OgorLS1mZi1vbmx5OjoKKwlTcGVjaWZpZXMgaG93IGEgbWVyZ2UgaXMgaGFuZGxlZCB3aGVuIHRoZSBtZXJnZWQtaW4gaGlzdG9yeSBpcworCWFscmVhZHkgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGhpc3RvcnkuICBgLS1mZmAgaXMgdGhlCisJZGVmYXVsdCB1bmxlc3MgbWVyZ2luZyBhbiBhbm5vdGF0ZWQgKGFuZCBwb3NzaWJseSBzaWduZWQpIHRhZworCXRoYXQgaXMgbm90IHN0b3JlZCBpbiBpdHMgbmF0dXJhbCBwbGFjZSBpbiB0aGUgYHJlZnMvdGFncy9gCisJaGllcmFyY2h5LCBpbiB3aGljaCBjYXNlIGAtLW5vLWZmYCBpcyBhc3N1bWVkLgorKworV2l0aCBgLS1mZmAsIHdoZW4gcG9zc2libGUgcmVzb2x2ZSB0aGUgbWVyZ2UgYXMgYSBmYXN0LWZvcndhcmQgKG9ubHkKK3VwZGF0ZSB0aGUgYnJhbmNoIHBvaW50ZXIgdG8gbWF0Y2ggdGhlIG1lcmdlZCBicmFuY2g7IGRvIG5vdCBjcmVhdGUgYQorbWVyZ2UgY29tbWl0KS4gIFdoZW4gbm90IHBvc3NpYmxlICh3aGVuIHRoZSBtZXJnZWQtaW4gaGlzdG9yeSBpcyBub3QgYQorZGVzY2VuZGFudCBvZiB0aGUgY3VycmVudCBoaXN0b3J5KSwgY3JlYXRlIGEgbWVyZ2UgY29tbWl0LgorKworV2l0aCBgLS1uby1mZmAsIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCBpbiBhbGwgY2FzZXMsIGV2ZW4gd2hlbiB0aGUgbWVyZ2UKK2NvdWxkIGluc3RlYWQgYmUgcmVzb2x2ZWQgYXMgYSBmYXN0LWZvcndhcmQuCisrCitXaXRoIGAtLWZmLW9ubHlgLCByZXNvbHZlIHRoZSBtZXJnZSBhcyBhIGZhc3QtZm9yd2FyZCB3aGVuIHBvc3NpYmxlLgorV2hlbiBub3QgcG9zc2libGUsIHJlZnVzZSB0byBtZXJnZSBhbmQgZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgorCistU1s8a2V5aWQ+XTo6CistLWdwZy1zaWduWz08a2V5aWQ+XTo6CisJR1BHLXNpZ24gdGhlIHJlc3VsdGluZyBtZXJnZSBjb21taXQuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzCisJb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwKKwlpdCBtdXN0IGJlIHN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistLWxvZ1s9PG4+XTo6CistLW5vLWxvZzo6CisJSW4gYWRkaXRpb24gdG8gYnJhbmNoIG5hbWVzLCBwb3B1bGF0ZSB0aGUgbG9nIG1lc3NhZ2Ugd2l0aAorCW9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIGF0IG1vc3QgPG4+IGFjdHVhbCBjb21taXRzIHRoYXQgYXJlIGJlaW5nCisJbWVyZ2VkLiBTZWUgYWxzbyBsaW5rZ2l0OmdpdC1mbXQtbWVyZ2UtbXNnWzFdLgorKworV2l0aCAtLW5vLWxvZyBkbyBub3QgbGlzdCBvbmUtbGluZSBkZXNjcmlwdGlvbnMgZnJvbSB0aGUKK2FjdHVhbCBjb21taXRzIGJlaW5nIG1lcmdlZC4KKworLS1zaWdub2ZmOjoKKy0tbm8tc2lnbm9mZjo6CisJQWRkIFNpZ25lZC1vZmYtYnkgbGluZSBieSB0aGUgY29tbWl0dGVyIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1pdAorCWxvZyBtZXNzYWdlLiAgVGhlIG1lYW5pbmcgb2YgYSBzaWdub2ZmIGRlcGVuZHMgb24gdGhlIHByb2plY3QsCisJYnV0IGl0IHR5cGljYWxseSBjZXJ0aWZpZXMgdGhhdCBjb21taXR0ZXIgaGFzCisJdGhlIHJpZ2h0cyB0byBzdWJtaXQgdGhpcyB3b3JrIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYW5kCisJYWdyZWVzIHRvIGEgRGV2ZWxvcGVyIENlcnRpZmljYXRlIG9mIE9yaWdpbgorCShzZWUgaHR0cDovL2RldmVsb3BlcmNlcnRpZmljYXRlLm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorKworV2l0aCAtLW5vLXNpZ25vZmYgZG8gbm90IGFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZS4KKworLS1zdGF0OjoKKy1uOjoKKy0tbm8tc3RhdDo6CisJU2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlLiBUaGUgZGlmZnN0YXQgaXMgYWxzbworCWNvbnRyb2xsZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1lcmdlLnN0YXQuCisrCitXaXRoIC1uIG9yIC0tbm8tc3RhdCBkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlCittZXJnZS4KKworLS1zcXVhc2g6OgorLS1uby1zcXVhc2g6OgorCVByb2R1Y2UgdGhlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggc3RhdGUgYXMgaWYgYSByZWFsIG1lcmdlCisJaGFwcGVuZWQgKGV4Y2VwdCBmb3IgdGhlIG1lcmdlIGluZm9ybWF0aW9uKSwgYnV0IGRvIG5vdCBhY3R1YWxseQorCW1ha2UgYSBjb21taXQsIG1vdmUgdGhlIGBIRUFEYCwgb3IgcmVjb3JkIGAkR0lUX0RJUi9NRVJHRV9IRUFEYAorCSh0byBjYXVzZSB0aGUgbmV4dCBgZ2l0IGNvbW1pdGAgY29tbWFuZCB0byBjcmVhdGUgYSBtZXJnZQorCWNvbW1pdCkuICBUaGlzIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBvbiB0b3Agb2YKKwl0aGUgY3VycmVudCBicmFuY2ggd2hvc2UgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIG1lcmdpbmcgYW5vdGhlcgorCWJyYW5jaCAob3IgbW9yZSBpbiBjYXNlIG9mIGFuIG9jdG9wdXMpLgorKworV2l0aCAtLW5vLXNxdWFzaCBwZXJmb3JtIHRoZSBtZXJnZSBhbmQgY29tbWl0IHRoZSByZXN1bHQuIFRoaXMKK29wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSAtLXNxdWFzaC4KKysKK1dpdGggLS1zcXVhc2gsIC0tY29tbWl0IGlzIG5vdCBhbGxvd2VkLCBhbmQgd2lsbCBmYWlsLgorCistLW5vLXZlcmlmeTo6CisJVGhpcyBvcHRpb24gYnlwYXNzZXMgdGhlIHByZS1tZXJnZSBhbmQgY29tbWl0LW1zZyBob29rcy4KKwlTZWUgYWxzbyBsaW5rZ2l0OmdpdGhvb2tzWzVdLgorCistcyA8c3RyYXRlZ3k+OjoKKy0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CisJVXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneTsgY2FuIGJlIHN1cHBsaWVkIG1vcmUgdGhhbgorCW9uY2UgdG8gc3BlY2lmeSB0aGVtIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCBiZSB0cmllZC4KKwlJZiB0aGVyZSBpcyBubyBgLXNgIG9wdGlvbiwgYSBidWlsdC1pbiBsaXN0IG9mIHN0cmF0ZWdpZXMKKwlpcyB1c2VkIGluc3RlYWQgKCdnaXQgbWVyZ2UtcmVjdXJzaXZlJyB3aGVuIG1lcmdpbmcgYSBzaW5nbGUKKwloZWFkLCAnZ2l0IG1lcmdlLW9jdG9wdXMnIG90aGVyd2lzZSkuCisKKy1YIDxvcHRpb24+OjoKKy0tc3RyYXRlZ3ktb3B0aW9uPTxvcHRpb24+OjoKKwlQYXNzIG1lcmdlIHN0cmF0ZWd5IHNwZWNpZmljIG9wdGlvbiB0aHJvdWdoIHRvIHRoZSBtZXJnZQorCXN0cmF0ZWd5LgorCistLXZlcmlmeS1zaWduYXR1cmVzOjoKKy0tbm8tdmVyaWZ5LXNpZ25hdHVyZXM6OgorCVZlcmlmeSB0aGF0IHRoZSB0aXAgY29tbWl0IG9mIHRoZSBzaWRlIGJyYW5jaCBiZWluZyBtZXJnZWQgaXMKKwlzaWduZWQgd2l0aCBhIHZhbGlkIGtleSwgaS5lLiBhIGtleSB0aGF0IGhhcyBhIHZhbGlkIHVpZDogaW4gdGhlCisJZGVmYXVsdCB0cnVzdCBtb2RlbCwgdGhpcyBtZWFucyB0aGUgc2lnbmluZyBrZXkgaGFzIGJlZW4gc2lnbmVkIGJ5CisJYSB0cnVzdGVkIGtleS4gIElmIHRoZSB0aXAgY29tbWl0IG9mIHRoZSBzaWRlIGJyYW5jaCBpcyBub3Qgc2lnbmVkCisJd2l0aCBhIHZhbGlkIGtleSwgdGhlIG1lcmdlIGlzIGFib3J0ZWQuCisKKy0tc3VtbWFyeTo6CistLW5vLXN1bW1hcnk6OgorCVN5bm9ueW1zIHRvIC0tc3RhdCBhbmQgLS1uby1zdGF0OyB0aGVzZSBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQorCXJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistcTo6CistLXF1aWV0OjoKKwlPcGVyYXRlIHF1aWV0bHkuIEltcGxpZXMgLS1uby1wcm9ncmVzcy4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLgorCistLXByb2dyZXNzOjoKKy0tbm8tcHJvZ3Jlc3M6OgorCVR1cm4gcHJvZ3Jlc3Mgb24vb2ZmIGV4cGxpY2l0bHkuIElmIG5laXRoZXIgaXMgc3BlY2lmaWVkLAorCXByb2dyZXNzIGlzIHNob3duIGlmIHN0YW5kYXJkIGVycm9yIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLgorCU5vdGUgdGhhdCBub3QgYWxsIG1lcmdlIHN0cmF0ZWdpZXMgbWF5IHN1cHBvcnQgcHJvZ3Jlc3MKKwlyZXBvcnRpbmcuCisKK2VuZGlmOjpnaXQtcHVsbFtdCisKKy0tYWxsb3ctdW5yZWxhdGVkLWhpc3Rvcmllczo6CisJQnkgZGVmYXVsdCwgYGdpdCBtZXJnZWAgY29tbWFuZCByZWZ1c2VzIHRvIG1lcmdlIGhpc3RvcmllcworCXRoYXQgZG8gbm90IHNoYXJlIGEgY29tbW9uIGFuY2VzdG9yLiAgVGhpcyBvcHRpb24gY2FuIGJlCisJdXNlZCB0byBvdmVycmlkZSB0aGlzIHNhZmV0eSB3aGVuIG1lcmdpbmcgaGlzdG9yaWVzIG9mIHR3bworCXByb2plY3RzIHRoYXQgc3RhcnRlZCB0aGVpciBsaXZlcyBpbmRlcGVuZGVudGx5LiBBcyB0aGF0IGlzCisJYSB2ZXJ5IHJhcmUgb2NjYXNpb24sIG5vIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZW5hYmxlCisJdGhpcyBieSBkZWZhdWx0IGV4aXN0cyBhbmQgd2lsbCBub3QgYmUgYWRkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTEyZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dApAQCAtMCwwICsxLDEzNiBAQAorTUVSR0UgU1RSQVRFR0lFUworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVyZ2UgbWVjaGFuaXNtIChgZ2l0IG1lcmdlYCBhbmQgYGdpdCBwdWxsYCBjb21tYW5kcykgYWxsb3dzIHRoZQorYmFja2VuZCAnbWVyZ2Ugc3RyYXRlZ2llcycgdG8gYmUgY2hvc2VuIHdpdGggYC1zYCBvcHRpb24uICBTb21lIHN0cmF0ZWdpZXMKK2NhbiBhbHNvIHRha2UgdGhlaXIgb3duIG9wdGlvbnMsIHdoaWNoIGNhbiBiZSBwYXNzZWQgYnkgZ2l2aW5nIGAtWDxvcHRpb24+YAorYXJndW1lbnRzIHRvIGBnaXQgbWVyZ2VgIGFuZC9vciBgZ2l0IHB1bGxgLgorCityZXNvbHZlOjoKKwlUaGlzIGNhbiBvbmx5IHJlc29sdmUgdHdvIGhlYWRzIChpLmUuIHRoZSBjdXJyZW50IGJyYW5jaAorCWFuZCBhbm90aGVyIGJyYW5jaCB5b3UgcHVsbGVkIGZyb20pIHVzaW5nIGEgMy13YXkgbWVyZ2UKKwlhbGdvcml0aG0uICBJdCB0cmllcyB0byBjYXJlZnVsbHkgZGV0ZWN0IGNyaXNzLWNyb3NzCisJbWVyZ2UgYW1iaWd1aXRpZXMgYW5kIGlzIGNvbnNpZGVyZWQgZ2VuZXJhbGx5IHNhZmUgYW5kCisJZmFzdC4KKworcmVjdXJzaXZlOjoKKwlUaGlzIGNhbiBvbmx5IHJlc29sdmUgdHdvIGhlYWRzIHVzaW5nIGEgMy13YXkgbWVyZ2UKKwlhbGdvcml0aG0uICBXaGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY29tbW9uCisJYW5jZXN0b3IgdGhhdCBjYW4gYmUgdXNlZCBmb3IgMy13YXkgbWVyZ2UsIGl0IGNyZWF0ZXMgYQorCW1lcmdlZCB0cmVlIG9mIHRoZSBjb21tb24gYW5jZXN0b3JzIGFuZCB1c2VzIHRoYXQgYXMKKwl0aGUgcmVmZXJlbmNlIHRyZWUgZm9yIHRoZSAzLXdheSBtZXJnZS4gIFRoaXMgaGFzIGJlZW4KKwlyZXBvcnRlZCB0byByZXN1bHQgaW4gZmV3ZXIgbWVyZ2UgY29uZmxpY3RzIHdpdGhvdXQKKwljYXVzaW5nIG1pc21lcmdlcyBieSB0ZXN0cyBkb25lIG9uIGFjdHVhbCBtZXJnZSBjb21taXRzCisJdGFrZW4gZnJvbSBMaW51eCAyLjYga2VybmVsIGRldmVsb3BtZW50IGhpc3RvcnkuCisJQWRkaXRpb25hbGx5IHRoaXMgY2FuIGRldGVjdCBhbmQgaGFuZGxlIG1lcmdlcyBpbnZvbHZpbmcKKwlyZW5hbWVzLCBidXQgY3VycmVudGx5IGNhbm5vdCBtYWtlIHVzZSBvZiBkZXRlY3RlZAorCWNvcGllcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgd2hlbiBwdWxsaW5nCisJb3IgbWVyZ2luZyBvbmUgYnJhbmNoLgorKworVGhlICdyZWN1cnNpdmUnIHN0cmF0ZWd5IGNhbiB0YWtlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworb3Vyczs7CisJVGhpcyBvcHRpb24gZm9yY2VzIGNvbmZsaWN0aW5nIGh1bmtzIHRvIGJlIGF1dG8tcmVzb2x2ZWQgY2xlYW5seSBieQorCWZhdm9yaW5nICdvdXInIHZlcnNpb24uICBDaGFuZ2VzIGZyb20gdGhlIG90aGVyIHRyZWUgdGhhdCBkbyBub3QKKwljb25mbGljdCB3aXRoIG91ciBzaWRlIGFyZSByZWZsZWN0ZWQgaW4gdGhlIG1lcmdlIHJlc3VsdC4KKwlGb3IgYSBiaW5hcnkgZmlsZSwgdGhlIGVudGlyZSBjb250ZW50cyBhcmUgdGFrZW4gZnJvbSBvdXIgc2lkZS4KKysKK1RoaXMgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSAnb3VycycgbWVyZ2Ugc3RyYXRlZ3ksIHdoaWNoIGRvZXMgbm90CitldmVuIGxvb2sgYXQgd2hhdCB0aGUgb3RoZXIgdHJlZSBjb250YWlucyBhdCBhbGwuICBJdCBkaXNjYXJkcyBldmVyeXRoaW5nCit0aGUgb3RoZXIgdHJlZSBkaWQsIGRlY2xhcmluZyAnb3VyJyBoaXN0b3J5IGNvbnRhaW5zIGFsbCB0aGF0IGhhcHBlbmVkIGluIGl0LgorCit0aGVpcnM7OworCVRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mICdvdXJzJzsgbm90ZSB0aGF0LCB1bmxpa2UgJ291cnMnLCB0aGVyZSBpcworCW5vICd0aGVpcnMnIG1lcmdlIHN0cmF0ZWd5IHRvIGNvbmZ1c2UgdGhpcyBtZXJnZSBvcHRpb24gd2l0aC4KKworcGF0aWVuY2U7OworCVdpdGggdGhpcyBvcHRpb24sICdtZXJnZS1yZWN1cnNpdmUnIHNwZW5kcyBhIGxpdHRsZSBleHRyYSB0aW1lCisJdG8gYXZvaWQgbWlzbWVyZ2VzIHRoYXQgc29tZXRpbWVzIG9jY3VyIGR1ZSB0byB1bmltcG9ydGFudAorCW1hdGNoaW5nIGxpbmVzIChlLmcuLCBicmFjZXMgZnJvbSBkaXN0aW5jdCBmdW5jdGlvbnMpLiAgVXNlCisJdGhpcyB3aGVuIHRoZSBicmFuY2hlcyB0byBiZSBtZXJnZWQgaGF2ZSBkaXZlcmdlZCB3aWxkbHkuCisJU2VlIGFsc28gbGlua2dpdDpnaXQtZGlmZlsxXSBgLS1wYXRpZW5jZWAuCisKK2RpZmYtYWxnb3JpdGhtPVtwYXRpZW5jZXxtaW5pbWFsfGhpc3RvZ3JhbXxteWVyc107OworCVRlbGxzICdtZXJnZS1yZWN1cnNpdmUnIHRvIHVzZSBhIGRpZmZlcmVudCBkaWZmIGFsZ29yaXRobSwgd2hpY2gKKwljYW4gaGVscCBhdm9pZCBtaXNtZXJnZXMgdGhhdCBvY2N1ciBkdWUgdG8gdW5pbXBvcnRhbnQgbWF0Y2hpbmcKKwlsaW5lcyAoc3VjaCBhcyBicmFjZXMgZnJvbSBkaXN0aW5jdCBmdW5jdGlvbnMpLiAgU2VlIGFsc28KKwlsaW5rZ2l0OmdpdC1kaWZmWzFdIGAtLWRpZmYtYWxnb3JpdGhtYC4KKworaWdub3JlLXNwYWNlLWNoYW5nZTs7CitpZ25vcmUtYWxsLXNwYWNlOzsKK2lnbm9yZS1zcGFjZS1hdC1lb2w7OworaWdub3JlLWNyLWF0LWVvbDs7CisJVHJlYXRzIGxpbmVzIHdpdGggdGhlIGluZGljYXRlZCB0eXBlIG9mIHdoaXRlc3BhY2UgY2hhbmdlIGFzCisJdW5jaGFuZ2VkIGZvciB0aGUgc2FrZSBvZiBhIHRocmVlLXdheSBtZXJnZS4gIFdoaXRlc3BhY2UKKwljaGFuZ2VzIG1peGVkIHdpdGggb3RoZXIgY2hhbmdlcyB0byBhIGxpbmUgYXJlIG5vdCBpZ25vcmVkLgorCVNlZSBhbHNvIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYC1iYCwgYC13YCwKKwlgLS1pZ25vcmUtc3BhY2UtYXQtZW9sYCwgYW5kIGAtLWlnbm9yZS1jci1hdC1lb2xgLgorKworKiBJZiAndGhlaXInIHZlcnNpb24gb25seSBpbnRyb2R1Y2VzIHdoaXRlc3BhY2UgY2hhbmdlcyB0byBhIGxpbmUsCisgICdvdXInIHZlcnNpb24gaXMgdXNlZDsKKyogSWYgJ291cicgdmVyc2lvbiBpbnRyb2R1Y2VzIHdoaXRlc3BhY2UgY2hhbmdlcyBidXQgJ3RoZWlyJworICB2ZXJzaW9uIGluY2x1ZGVzIGEgc3Vic3RhbnRpYWwgY2hhbmdlLCAndGhlaXInIHZlcnNpb24gaXMgdXNlZDsKKyogT3RoZXJ3aXNlLCB0aGUgbWVyZ2UgcHJvY2VlZHMgaW4gdGhlIHVzdWFsIHdheS4KKworcmVub3JtYWxpemU7OworCVRoaXMgcnVucyBhIHZpcnR1YWwgY2hlY2stb3V0IGFuZCBjaGVjay1pbiBvZiBhbGwgdGhyZWUgc3RhZ2VzCisJb2YgYSBmaWxlIHdoZW4gcmVzb2x2aW5nIGEgdGhyZWUtd2F5IG1lcmdlLiAgVGhpcyBvcHRpb24gaXMKKwltZWFudCB0byBiZSB1c2VkIHdoZW4gbWVyZ2luZyBicmFuY2hlcyB3aXRoIGRpZmZlcmVudCBjbGVhbgorCWZpbHRlcnMgb3IgZW5kLW9mLWxpbmUgbm9ybWFsaXphdGlvbiBydWxlcy4gIFNlZSAiTWVyZ2luZworCWJyYW5jaGVzIHdpdGggZGlmZmVyaW5nIGNoZWNraW4vY2hlY2tvdXQgYXR0cmlidXRlcyIgaW4KKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK25vLXJlbm9ybWFsaXplOzsKKwlEaXNhYmxlcyB0aGUgYHJlbm9ybWFsaXplYCBvcHRpb24uICBUaGlzIG92ZXJyaWRlcyB0aGUKKwlgbWVyZ2UucmVub3JtYWxpemVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK25vLXJlbmFtZXM7OworCVR1cm4gb2ZmIHJlbmFtZSBkZXRlY3Rpb24uIFRoaXMgb3ZlcnJpZGVzIHRoZSBgbWVyZ2UucmVuYW1lc2AKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCVNlZSBhbHNvIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYC0tbm8tcmVuYW1lc2AuCisKK2ZpbmQtcmVuYW1lc1s9PG4+XTs7CisJVHVybiBvbiByZW5hbWUgZGV0ZWN0aW9uLCBvcHRpb25hbGx5IHNldHRpbmcgdGhlIHNpbWlsYXJpdHkKKwl0aHJlc2hvbGQuICBUaGlzIGlzIHRoZSBkZWZhdWx0LiBUaGlzIG92ZXJyaWRlcyB0aGUKKwknbWVyZ2UucmVuYW1lcycgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKwlTZWUgYWxzbyBsaW5rZ2l0OmdpdC1kaWZmWzFdIGAtLWZpbmQtcmVuYW1lc2AuCisKK3JlbmFtZS10aHJlc2hvbGQ9PG4+OzsKKwlEZXByZWNhdGVkIHN5bm9ueW0gZm9yIGBmaW5kLXJlbmFtZXM9PG4+YC4KKworc3VidHJlZVs9PHBhdGg+XTs7CisJVGhpcyBvcHRpb24gaXMgYSBtb3JlIGFkdmFuY2VkIGZvcm0gb2YgJ3N1YnRyZWUnIHN0cmF0ZWd5LCB3aGVyZQorCXRoZSBzdHJhdGVneSBtYWtlcyBhIGd1ZXNzIG9uIGhvdyB0d28gdHJlZXMgbXVzdCBiZSBzaGlmdGVkIHRvCisJbWF0Y2ggd2l0aCBlYWNoIG90aGVyIHdoZW4gbWVyZ2luZy4gIEluc3RlYWQsIHRoZSBzcGVjaWZpZWQgcGF0aAorCWlzIHByZWZpeGVkIChvciBzdHJpcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcpIHRvIG1ha2UgdGhlIHNoYXBlIG9mCisJdHdvIHRyZWVzIHRvIG1hdGNoLgorCitvY3RvcHVzOjoKKwlUaGlzIHJlc29sdmVzIGNhc2VzIHdpdGggbW9yZSB0aGFuIHR3byBoZWFkcywgYnV0IHJlZnVzZXMgdG8gZG8KKwlhIGNvbXBsZXggbWVyZ2UgdGhhdCBuZWVkcyBtYW51YWwgcmVzb2x1dGlvbi4gIEl0IGlzCisJcHJpbWFyaWx5IG1lYW50IHRvIGJlIHVzZWQgZm9yIGJ1bmRsaW5nIHRvcGljIGJyYW5jaAorCWhlYWRzIHRvZ2V0aGVyLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtZXJnZSBzdHJhdGVneSB3aGVuCisJcHVsbGluZyBvciBtZXJnaW5nIG1vcmUgdGhhbiBvbmUgYnJhbmNoLgorCitvdXJzOjoKKwlUaGlzIHJlc29sdmVzIGFueSBudW1iZXIgb2YgaGVhZHMsIGJ1dCB0aGUgcmVzdWx0aW5nIHRyZWUgb2YgdGhlCisJbWVyZ2UgaXMgYWx3YXlzIHRoYXQgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQsIGVmZmVjdGl2ZWx5CisJaWdub3JpbmcgYWxsIGNoYW5nZXMgZnJvbSBhbGwgb3RoZXIgYnJhbmNoZXMuICBJdCBpcyBtZWFudCB0bworCWJlIHVzZWQgdG8gc3VwZXJzZWRlIG9sZCBkZXZlbG9wbWVudCBoaXN0b3J5IG9mIHNpZGUKKwlicmFuY2hlcy4gIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSAtWG91cnMgb3B0aW9uIHRvCisJdGhlICdyZWN1cnNpdmUnIG1lcmdlIHN0cmF0ZWd5LgorCitzdWJ0cmVlOjoKKwlUaGlzIGlzIGEgbW9kaWZpZWQgcmVjdXJzaXZlIHN0cmF0ZWd5LiBXaGVuIG1lcmdpbmcgdHJlZXMgQSBhbmQKKwlCLCBpZiBCIGNvcnJlc3BvbmRzIHRvIGEgc3VidHJlZSBvZiBBLCBCIGlzIGZpcnN0IGFkanVzdGVkIHRvCisJbWF0Y2ggdGhlIHRyZWUgc3RydWN0dXJlIG9mIEEsIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgdHJlZXMgYXQKKwl0aGUgc2FtZSBsZXZlbC4gVGhpcyBhZGp1c3RtZW50IGlzIGFsc28gZG9uZSB0byB0aGUgY29tbW9uCisJYW5jZXN0b3IgdHJlZS4KKworV2l0aCB0aGUgc3RyYXRlZ2llcyB0aGF0IHVzZSAzLXdheSBtZXJnZSAoaW5jbHVkaW5nIHRoZSBkZWZhdWx0LCAncmVjdXJzaXZlJyksCitpZiBhIGNoYW5nZSBpcyBtYWRlIG9uIGJvdGggYnJhbmNoZXMsIGJ1dCBsYXRlciByZXZlcnRlZCBvbiBvbmUgb2YgdGhlCiticmFuY2hlcywgdGhhdCBjaGFuZ2Ugd2lsbCBiZSBwcmVzZW50IGluIHRoZSBtZXJnZWQgcmVzdWx0OyBzb21lIHBlb3BsZSBmaW5kCit0aGlzIGJlaGF2aW9yIGNvbmZ1c2luZy4gIEl0IG9jY3VycyBiZWNhdXNlIG9ubHkgdGhlIGhlYWRzIGFuZCB0aGUgbWVyZ2UgYmFzZQorYXJlIGNvbnNpZGVyZWQgd2hlbiBwZXJmb3JtaW5nIGEgbWVyZ2UsIG5vdCB0aGUgaW5kaXZpZHVhbCBjb21taXRzLiAgVGhlIG1lcmdlCithbGdvcml0aG0gdGhlcmVmb3JlIGNvbnNpZGVycyB0aGUgcmV2ZXJ0ZWQgY2hhbmdlIGFzIG5vIGNoYW5nZSBhdCBhbGwsIGFuZAorc3Vic3RpdHV0ZXMgdGhlIGNoYW5nZWQgdmVyc2lvbiBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGI2ZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKQEAgLTAsMCArMSwzMjggQEAKK1BSRVRUWSBGT1JNQVRTCistLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgY29tbWl0IGlzIGEgbWVyZ2UsIGFuZCBpZiB0aGUgcHJldHR5LWZvcm1hdAoraXMgbm90ICdvbmVsaW5lJywgJ2VtYWlsJyBvciAncmF3JywgYW4gYWRkaXRpb25hbCBsaW5lIGlzCitpbnNlcnRlZCBiZWZvcmUgdGhlICdBdXRob3I6JyBsaW5lLiAgVGhpcyBsaW5lIGJlZ2lucyB3aXRoCisiTWVyZ2U6ICIgYW5kIHRoZSBoYXNoZXMgb2YgYW5jZXN0cmFsIGNvbW1pdHMgYXJlIHByaW50ZWQsCitzZXBhcmF0ZWQgYnkgc3BhY2VzLiAgTm90ZSB0aGF0IHRoZSBsaXN0ZWQgY29tbWl0cyBtYXkgbm90CituZWNlc3NhcmlseSBiZSB0aGUgbGlzdCBvZiB0aGUgKmRpcmVjdCogcGFyZW50IGNvbW1pdHMgaWYgeW91CitoYXZlIGxpbWl0ZWQgeW91ciB2aWV3IG9mIGhpc3Rvcnk6IGZvciBleGFtcGxlLCBpZiB5b3UgYXJlCitvbmx5IGludGVyZXN0ZWQgaW4gY2hhbmdlcyByZWxhdGVkIHRvIGEgY2VydGFpbiBkaXJlY3Rvcnkgb3IKK2ZpbGUuCisKK1RoZXJlIGFyZSBzZXZlcmFsIGJ1aWx0LWluIGZvcm1hdHMsIGFuZCB5b3UgY2FuIGRlZmluZQorYWRkaXRpb25hbCBmb3JtYXRzIGJ5IHNldHRpbmcgYSBwcmV0dHkuPG5hbWU+Citjb25maWcgb3B0aW9uIHRvIGVpdGhlciBhbm90aGVyIGZvcm1hdCBuYW1lLCBvciBhCisnZm9ybWF0Oicgc3RyaW5nLCBhcyBkZXNjcmliZWQgYmVsb3cgKHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gSGVyZSBhcmUgdGhlIGRldGFpbHMgb2YgdGhlCitidWlsdC1pbiBmb3JtYXRzOgorCisqICdvbmVsaW5lJworCisJICA8aGFzaD4gPHRpdGxlIGxpbmU+CisrCitUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIGFzIGNvbXBhY3QgYXMgcG9zc2libGUuCisKKyogJ3Nob3J0JworCisJICBjb21taXQgPGhhc2g+CisJICBBdXRob3I6IDxhdXRob3I+CisKKwkgICAgICA8dGl0bGUgbGluZT4KKworKiAnbWVkaXVtJworCisJICBjb21taXQgPGhhc2g+CisJICBBdXRob3I6IDxhdXRob3I+CisJICBEYXRlOiAgIDxhdXRob3IgZGF0ZT4KKworCSAgICAgIDx0aXRsZSBsaW5lPgorCisJICAgICAgPGZ1bGwgY29tbWl0IG1lc3NhZ2U+CisKKyogJ2Z1bGwnCisKKwkgIGNvbW1pdCA8aGFzaD4KKwkgIEF1dGhvcjogPGF1dGhvcj4KKwkgIENvbW1pdDogPGNvbW1pdHRlcj4KKworCSAgICAgIDx0aXRsZSBsaW5lPgorCisJICAgICAgPGZ1bGwgY29tbWl0IG1lc3NhZ2U+CisKKyogJ2Z1bGxlcicKKworCSAgY29tbWl0IDxoYXNoPgorCSAgQXV0aG9yOiAgICAgPGF1dGhvcj4KKwkgIEF1dGhvckRhdGU6IDxhdXRob3IgZGF0ZT4KKwkgIENvbW1pdDogICAgIDxjb21taXR0ZXI+CisJICBDb21taXREYXRlOiA8Y29tbWl0dGVyIGRhdGU+CisKKwkgICAgICAgPHRpdGxlIGxpbmU+CisKKwkgICAgICAgPGZ1bGwgY29tbWl0IG1lc3NhZ2U+CisKKyogJ3JlZmVyZW5jZScKKworCSAgPGFiYnJldiBoYXNoPiAoPHRpdGxlIGxpbmU+LCA8c2hvcnQgYXV0aG9yIGRhdGU+KQorKworVGhpcyBmb3JtYXQgaXMgdXNlZCB0byByZWZlciB0byBhbm90aGVyIGNvbW1pdCBpbiBhIGNvbW1pdCBtZXNzYWdlIGFuZAoraXMgdGhlIHNhbWUgYXMgYC0tcHJldHR5PSdmb3JtYXQ6JUMoYXV0byklaCAoJXMsICVhZCknYC4gIEJ5IGRlZmF1bHQsCit0aGUgZGF0ZSBpcyBmb3JtYXR0ZWQgd2l0aCBgLS1kYXRlPXNob3J0YCB1bmxlc3MgYW5vdGhlciBgLS1kYXRlYCBvcHRpb24KK2lzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgQXMgd2l0aCBhbnkgYGZvcm1hdDpgIHdpdGggZm9ybWF0CitwbGFjZWhvbGRlcnMsIGl0cyBvdXRwdXQgaXMgbm90IGFmZmVjdGVkIGJ5IG90aGVyIG9wdGlvbnMgbGlrZQorYC0tZGVjb3JhdGVgIGFuZCBgLS13YWxrLXJlZmxvZ3NgLgorCisqICdlbWFpbCcKKworCSAgRnJvbSA8aGFzaD4gPGRhdGU+CisJICBGcm9tOiA8YXV0aG9yPgorCSAgRGF0ZTogPGF1dGhvciBkYXRlPgorCSAgU3ViamVjdDogW1BBVENIXSA8dGl0bGUgbGluZT4KKworCSAgPGZ1bGwgY29tbWl0IG1lc3NhZ2U+CisKKyogJ3JhdycKKysKK1RoZSAncmF3JyBmb3JtYXQgc2hvd3MgdGhlIGVudGlyZSBjb21taXQgZXhhY3RseSBhcworc3RvcmVkIGluIHRoZSBjb21taXQgb2JqZWN0LiAgTm90YWJseSwgdGhlIGhhc2hlcyBhcmUKK2Rpc3BsYXllZCBpbiBmdWxsLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgLS1hYmJyZXYgb3IKKy0tbm8tYWJicmV2IGFyZSB1c2VkLCBhbmQgJ3BhcmVudHMnIGluZm9ybWF0aW9uIHNob3cgdGhlCit0cnVlIHBhcmVudCBjb21taXRzLCB3aXRob3V0IHRha2luZyBncmFmdHMgb3IgaGlzdG9yeQorc2ltcGxpZmljYXRpb24gaW50byBhY2NvdW50LiBOb3RlIHRoYXQgdGhpcyBmb3JtYXQgYWZmZWN0cyB0aGUgd2F5Citjb21taXRzIGFyZSBkaXNwbGF5ZWQsIGJ1dCBub3QgdGhlIHdheSB0aGUgZGlmZiBpcyBzaG93biBlLmcuIHdpdGgKK2BnaXQgbG9nIC0tcmF3YC4gVG8gZ2V0IGZ1bGwgb2JqZWN0IG5hbWVzIGluIGEgcmF3IGRpZmYgZm9ybWF0LAordXNlIGAtLW5vLWFiYnJldmAuCisKKyogJ2Zvcm1hdDo8c3RyaW5nPicKKysKK1RoZSAnZm9ybWF0OjxzdHJpbmc+JyBmb3JtYXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIGluZm9ybWF0aW9uCit5b3Ugd2FudCB0byBzaG93LiBJdCB3b3JrcyBhIGxpdHRsZSBiaXQgbGlrZSBwcmludGYgZm9ybWF0LAord2l0aCB0aGUgbm90YWJsZSBleGNlcHRpb24gdGhhdCB5b3UgZ2V0IGEgbmV3bGluZSB3aXRoICclbicKK2luc3RlYWQgb2YgJ1xuJy4KKysKK0UuZywgJ2Zvcm1hdDoiVGhlIGF1dGhvciBvZiAlaCB3YXMgJWFuLCAlYXIlblRoZSB0aXRsZSB3YXMgPj4lczw8JW4iJword291bGQgc2hvdyBzb21ldGhpbmcgbGlrZSB0aGlzOgorKworLS0tLS0tLQorVGhlIGF1dGhvciBvZiBmZTZlMGVlIHdhcyBKdW5pbyBDIEhhbWFubywgMjMgaG91cnMgYWdvCitUaGUgdGl0bGUgd2FzID4+dDQxMTk6IHRlc3QgYXV0b2NvbXB1dGluZyAtcDxuPiBmb3IgdHJhZGl0aW9uYWwgZGlmZiBpbnB1dC48PAorCistLS0tLS0tCisrCitUaGUgcGxhY2Vob2xkZXJzIGFyZToKKworLSBQbGFjZWhvbGRlcnMgdGhhdCBleHBhbmQgdG8gYSBzaW5nbGUgbGl0ZXJhbCBjaGFyYWN0ZXI6CisnJW4nOjogbmV3bGluZQorJyUlJzo6IGEgcmF3ICclJworJyV4MDAnOjogcHJpbnQgYSBieXRlIGZyb20gYSBoZXggY29kZQorCistIFBsYWNlaG9sZGVycyB0aGF0IGFmZmVjdCBmb3JtYXR0aW5nIG9mIGxhdGVyIHBsYWNlaG9sZGVyczoKKyclQ3JlZCc6OiBzd2l0Y2ggY29sb3IgdG8gcmVkCisnJUNncmVlbic6OiBzd2l0Y2ggY29sb3IgdG8gZ3JlZW4KKyclQ2JsdWUnOjogc3dpdGNoIGNvbG9yIHRvIGJsdWUKKyclQ3Jlc2V0Jzo6IHJlc2V0IGNvbG9yCisnJUMoLi4uKSc6OiBjb2xvciBzcGVjaWZpY2F0aW9uLCBhcyBkZXNjcmliZWQgdW5kZXIgVmFsdWVzIGluIHRoZQorCSAgICAiQ09ORklHVVJBVElPTiBGSUxFIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4gIEJ5CisJICAgIGRlZmF1bHQsIGNvbG9ycyBhcmUgc2hvd24gb25seSB3aGVuIGVuYWJsZWQgZm9yIGxvZyBvdXRwdXQKKwkgICAgKGJ5IGBjb2xvci5kaWZmYCwgYGNvbG9yLnVpYCwgb3IgYC0tY29sb3JgLCBhbmQgcmVzcGVjdGluZworCSAgICB0aGUgYGF1dG9gIHNldHRpbmdzIG9mIHRoZSBmb3JtZXIgaWYgd2UgYXJlIGdvaW5nIHRvIGEKKwkgICAgdGVybWluYWwpLiBgJUMoYXV0bywuLi4pYCBpcyBhY2NlcHRlZCBhcyBhIGhpc3RvcmljYWwKKwkgICAgc3lub255bSBmb3IgdGhlIGRlZmF1bHQgKGUuZy4sIGAlQyhhdXRvLHJlZClgKS4gU3BlY2lmeWluZworCSAgICBgJUMoYWx3YXlzLC4uLilgIHdpbGwgc2hvdyB0aGUgY29sb3JzIGV2ZW4gd2hlbiBjb2xvciBpcworCSAgICBub3Qgb3RoZXJ3aXNlIGVuYWJsZWQgKHRob3VnaCBjb25zaWRlciBqdXN0IHVzaW5nCisJICAgIGAtLWNvbG9yPWFsd2F5c2AgdG8gZW5hYmxlIGNvbG9yIGZvciB0aGUgd2hvbGUgb3V0cHV0LAorCSAgICBpbmNsdWRpbmcgdGhpcyBmb3JtYXQgYW5kIGFueXRoaW5nIGVsc2UgZ2l0IG1pZ2h0IGNvbG9yKS4KKwkgICAgYGF1dG9gIGFsb25lIChpLmUuIGAlQyhhdXRvKWApIHdpbGwgdHVybiBvbiBhdXRvIGNvbG9yaW5nCisJICAgIG9uIHRoZSBuZXh0IHBsYWNlaG9sZGVycyB1bnRpbCB0aGUgY29sb3IgaXMgc3dpdGNoZWQKKwkgICAgYWdhaW4uCisnJW0nOjogbGVmdCAoYDxgKSwgcmlnaHQgKGA+YCkgb3IgYm91bmRhcnkgKGAtYCkgbWFyaworJyV3KFs8dz5bLDxpMT5bLDxpMj5dXV0pJzo6IHN3aXRjaCBsaW5lIHdyYXBwaW5nLCBsaWtlIHRoZSAtdyBvcHRpb24gb2YKKwkJCSAgICBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXS4KKyclPCg8Tj5bLHRydW5jfGx0cnVuY3xtdHJ1bmNdKSc6OiBtYWtlIHRoZSBuZXh0IHBsYWNlaG9sZGVyIHRha2UgYXQKKwkJCQkgIGxlYXN0IE4gY29sdW1ucywgcGFkZGluZyBzcGFjZXMgb24KKwkJCQkgIHRoZSByaWdodCBpZiBuZWNlc3NhcnkuICBPcHRpb25hbGx5CisJCQkJICB0cnVuY2F0ZSBhdCB0aGUgYmVnaW5uaW5nIChsdHJ1bmMpLAorCQkJCSAgdGhlIG1pZGRsZSAobXRydW5jKSBvciB0aGUgZW5kCisJCQkJICAodHJ1bmMpIGlmIHRoZSBvdXRwdXQgaXMgbG9uZ2VyIHRoYW4KKwkJCQkgIE4gY29sdW1ucy4gIE5vdGUgdGhhdCB0cnVuY2F0aW5nCisJCQkJICBvbmx5IHdvcmtzIGNvcnJlY3RseSB3aXRoIE4gPj0gMi4KKyclPHwoPE4+KSc6OiBtYWtlIHRoZSBuZXh0IHBsYWNlaG9sZGVyIHRha2UgYXQgbGVhc3QgdW50aWwgTnRoCisJICAgICBjb2x1bW5zLCBwYWRkaW5nIHNwYWNlcyBvbiB0aGUgcmlnaHQgaWYgbmVjZXNzYXJ5CisnJT4oPE4+KScsICclPnwoPE4+KSc6OiBzaW1pbGFyIHRvICclPCg8Tj4pJywgJyU8fCg8Tj4pJyByZXNwZWN0aXZlbHksCisJCQlidXQgcGFkZGluZyBzcGFjZXMgb24gdGhlIGxlZnQKKyclPj4oPE4+KScsICclPj58KDxOPiknOjogc2ltaWxhciB0byAnJT4oPE4+KScsICclPnwoPE4+KScKKwkJCSAgcmVzcGVjdGl2ZWx5LCBleGNlcHQgdGhhdCBpZiB0aGUgbmV4dAorCQkJICBwbGFjZWhvbGRlciB0YWtlcyBtb3JlIHNwYWNlcyB0aGFuIGdpdmVuIGFuZAorCQkJICB0aGVyZSBhcmUgc3BhY2VzIG9uIGl0cyBsZWZ0LCB1c2UgdGhvc2UKKwkJCSAgc3BhY2VzCisnJT48KDxOPiknLCAnJT48fCg8Tj4pJzo6IHNpbWlsYXIgdG8gJyU8KDxOPiknLCAnJTx8KDxOPiknCisJCQkgIHJlc3BlY3RpdmVseSwgYnV0IHBhZGRpbmcgYm90aCBzaWRlcworCQkJICAoaS5lLiB0aGUgdGV4dCBpcyBjZW50ZXJlZCkKKworLSBQbGFjZWhvbGRlcnMgdGhhdCBleHBhbmQgdG8gaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20gdGhlIGNvbW1pdDoKKyclSCc6OiBjb21taXQgaGFzaAorJyVoJzo6IGFiYnJldmlhdGVkIGNvbW1pdCBoYXNoCisnJVQnOjogdHJlZSBoYXNoCisnJXQnOjogYWJicmV2aWF0ZWQgdHJlZSBoYXNoCisnJVAnOjogcGFyZW50IGhhc2hlcworJyVwJzo6IGFiYnJldmlhdGVkIHBhcmVudCBoYXNoZXMKKyclYW4nOjogYXV0aG9yIG5hbWUKKyclYU4nOjogYXV0aG9yIG5hbWUgKHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXQorCW9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorJyVhZSc6OiBhdXRob3IgZW1haWwKKyclYUUnOjogYXV0aG9yIGVtYWlsIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0KKwlvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclYWwnOjogYXV0aG9yIGVtYWlsIGxvY2FsLXBhcnQgKHRoZSBwYXJ0IGJlZm9yZSB0aGUgJ0AnIHNpZ24pCisnJWFMJzo6IGF1dGhvciBsb2NhbC1wYXJ0IChzZWUgJyVhbCcpIHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZQorCWxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorJyVhZCc6OiBhdXRob3IgZGF0ZSAoZm9ybWF0IHJlc3BlY3RzIC0tZGF0ZT0gb3B0aW9uKQorJyVhRCc6OiBhdXRob3IgZGF0ZSwgUkZDMjgyMiBzdHlsZQorJyVhcic6OiBhdXRob3IgZGF0ZSwgcmVsYXRpdmUKKyclYXQnOjogYXV0aG9yIGRhdGUsIFVOSVggdGltZXN0YW1wCisnJWFpJzo6IGF1dGhvciBkYXRlLCBJU08gODYwMS1saWtlIGZvcm1hdAorJyVhSSc6OiBhdXRob3IgZGF0ZSwgc3RyaWN0IElTTyA4NjAxIGZvcm1hdAorJyVhcyc6OiBhdXRob3IgZGF0ZSwgc2hvcnQgZm9ybWF0IChgWVlZWS1NTS1ERGApCisnJWNuJzo6IGNvbW1pdHRlciBuYW1lCisnJWNOJzo6IGNvbW1pdHRlciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclY2UnOjogY29tbWl0dGVyIGVtYWlsCisnJWNFJzo6IGNvbW1pdHRlciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCisJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWNsJzo6IGF1dGhvciBlbWFpbCBsb2NhbC1wYXJ0ICh0aGUgcGFydCBiZWZvcmUgdGhlICdAJyBzaWduKQorJyVjTCc6OiBhdXRob3IgbG9jYWwtcGFydCAoc2VlICclY2wnKSByZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclY2QnOjogY29tbWl0dGVyIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKKyclY0QnOjogY29tbWl0dGVyIGRhdGUsIFJGQzI4MjIgc3R5bGUKKyclY3InOjogY29tbWl0dGVyIGRhdGUsIHJlbGF0aXZlCisnJWN0Jzo6IGNvbW1pdHRlciBkYXRlLCBVTklYIHRpbWVzdGFtcAorJyVjaSc6OiBjb21taXR0ZXIgZGF0ZSwgSVNPIDg2MDEtbGlrZSBmb3JtYXQKKyclY0knOjogY29tbWl0dGVyIGRhdGUsIHN0cmljdCBJU08gODYwMSBmb3JtYXQKKyclY3MnOjogY29tbWl0dGVyIGRhdGUsIHNob3J0IGZvcm1hdCAoYFlZWVktTU0tRERgKQorJyVkJzo6IHJlZiBuYW1lcywgbGlrZSB0aGUgLS1kZWNvcmF0ZSBvcHRpb24gb2YgbGlua2dpdDpnaXQtbG9nWzFdCisnJUQnOjogcmVmIG5hbWVzIHdpdGhvdXQgdGhlICIgKCIsICIpIiB3cmFwcGluZy4KKyclUyc6OiByZWYgbmFtZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHdoaWNoIHRoZSBjb21taXQgd2FzIHJlYWNoZWQKKyAgICAgICAobGlrZSBgZ2l0IGxvZyAtLXNvdXJjZWApLCBvbmx5IHdvcmtzIHdpdGggYGdpdCBsb2dgCisnJWUnOjogZW5jb2RpbmcKKyclcyc6OiBzdWJqZWN0CisnJWYnOjogc2FuaXRpemVkIHN1YmplY3QgbGluZSwgc3VpdGFibGUgZm9yIGEgZmlsZW5hbWUKKyclYic6OiBib2R5CisnJUInOjogcmF3IGJvZHkgKHVud3JhcHBlZCBzdWJqZWN0IGFuZCBib2R5KQoraWZuZGVmOjpnaXQtcmV2LWxpc3RbXQorJyVOJzo6IGNvbW1pdCBub3RlcworZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisnJUdHJzo6IHJhdyB2ZXJpZmljYXRpb24gbWVzc2FnZSBmcm9tIEdQRyBmb3IgYSBzaWduZWQgY29tbWl0CisnJUc/Jzo6IHNob3cgIkciIGZvciBhIGdvb2QgKHZhbGlkKSBzaWduYXR1cmUsCisJIkIiIGZvciBhIGJhZCBzaWduYXR1cmUsCisJIlUiIGZvciBhIGdvb2Qgc2lnbmF0dXJlIHdpdGggdW5rbm93biB2YWxpZGl0eSwKKwkiWCIgZm9yIGEgZ29vZCBzaWduYXR1cmUgdGhhdCBoYXMgZXhwaXJlZCwKKwkiWSIgZm9yIGEgZ29vZCBzaWduYXR1cmUgbWFkZSBieSBhbiBleHBpcmVkIGtleSwKKwkiUiIgZm9yIGEgZ29vZCBzaWduYXR1cmUgbWFkZSBieSBhIHJldm9rZWQga2V5LAorCSJFIiBpZiB0aGUgc2lnbmF0dXJlIGNhbm5vdCBiZSBjaGVja2VkIChlLmcuIG1pc3Npbmcga2V5KQorCWFuZCAiTiIgZm9yIG5vIHNpZ25hdHVyZQorJyVHUyc6OiBzaG93IHRoZSBuYW1lIG9mIHRoZSBzaWduZXIgZm9yIGEgc2lnbmVkIGNvbW1pdAorJyVHSyc6OiBzaG93IHRoZSBrZXkgdXNlZCB0byBzaWduIGEgc2lnbmVkIGNvbW1pdAorJyVHRic6OiBzaG93IHRoZSBmaW5nZXJwcmludCBvZiB0aGUga2V5IHVzZWQgdG8gc2lnbiBhIHNpZ25lZCBjb21taXQKKyclR1AnOjogc2hvdyB0aGUgZmluZ2VycHJpbnQgb2YgdGhlIHByaW1hcnkga2V5IHdob3NlIHN1YmtleSB3YXMgdXNlZAorCXRvIHNpZ24gYSBzaWduZWQgY29tbWl0CisnJUdUJzo6IHNob3cgdGhlIHRydXN0IGxldmVsIGZvciB0aGUga2V5IHVzZWQgdG8gc2lnbiBhIHNpZ25lZCBjb21taXQKKyclZ0QnOjogcmVmbG9nIHNlbGVjdG9yLCBlLmcuLCBgcmVmcy9zdGFzaEB7MX1gIG9yIGByZWZzL3N0YXNoQHsyCisJbWludXRlcyBhZ299YDsgdGhlIGZvcm1hdCBmb2xsb3dzIHRoZSBydWxlcyBkZXNjcmliZWQgZm9yIHRoZQorCWAtZ2Agb3B0aW9uLiBUaGUgcG9ydGlvbiBiZWZvcmUgdGhlIGBAYCBpcyB0aGUgcmVmbmFtZSBhcworCWdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgKHNvIGBnaXQgbG9nIC1nIHJlZnMvaGVhZHMvbWFzdGVyYAorCXdvdWxkIHlpZWxkIGByZWZzL2hlYWRzL21hc3RlckB7MH1gKS4KKyclZ2QnOjogc2hvcnRlbmVkIHJlZmxvZyBzZWxlY3Rvcjsgc2FtZSBhcyBgJWdEYCwgYnV0IHRoZSByZWZuYW1lCisJcG9ydGlvbiBpcyBzaG9ydGVuZWQgZm9yIGh1bWFuIHJlYWRhYmlsaXR5IChzbworCWByZWZzL2hlYWRzL21hc3RlcmAgYmVjb21lcyBqdXN0IGBtYXN0ZXJgKS4KKyclZ24nOjogcmVmbG9nIGlkZW50aXR5IG5hbWUKKyclZ04nOjogcmVmbG9nIGlkZW50aXR5IG5hbWUgKHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZQorCWxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorJyVnZSc6OiByZWZsb2cgaWRlbnRpdHkgZW1haWwKKyclZ0UnOjogcmVmbG9nIGlkZW50aXR5IGVtYWlsIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclZ3MnOjogcmVmbG9nIHN1YmplY3QKKyclKHRyYWlsZXJzWzpvcHRpb25zXSknOjogZGlzcGxheSB0aGUgdHJhaWxlcnMgb2YgdGhlIGJvZHkgYXMKKwkJCSAgaW50ZXJwcmV0ZWQgYnkKKwkJCSAgbGlua2dpdDpnaXQtaW50ZXJwcmV0LXRyYWlsZXJzWzFdLiBUaGUKKwkJCSAgYHRyYWlsZXJzYCBzdHJpbmcgbWF5IGJlIGZvbGxvd2VkIGJ5IGEgY29sb24KKwkJCSAgYW5kIHplcm8gb3IgbW9yZSBjb21tYS1zZXBhcmF0ZWQgb3B0aW9uczoKKyoqICdrZXk9PEs+Jzogb25seSBzaG93IHRyYWlsZXJzIHdpdGggc3BlY2lmaWVkIGtleS4gTWF0Y2hpbmcgaXMgZG9uZQorICAgY2FzZS1pbnNlbnNpdGl2ZWx5IGFuZCB0cmFpbGluZyBjb2xvbiBpcyBvcHRpb25hbC4gSWYgb3B0aW9uIGlzCisgICBnaXZlbiBtdWx0aXBsZSB0aW1lcyB0cmFpbGVyIGxpbmVzIG1hdGNoaW5nIGFueSBvZiB0aGUga2V5cyBhcmUKKyAgIHNob3duLiBUaGlzIG9wdGlvbiBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgdGhlIGBvbmx5YCBvcHRpb24gc28gdGhhdAorICAgbm9uLXRyYWlsZXIgbGluZXMgaW4gdGhlIHRyYWlsZXIgYmxvY2sgYXJlIGhpZGRlbi4gSWYgdGhhdCBpcyBub3QKKyAgIGRlc2lyZWQgaXQgY2FuIGJlIGRpc2FibGVkIHdpdGggYG9ubHk9ZmFsc2VgLiAgRS5nLiwKKyAgIGAlKHRyYWlsZXJzOmtleT1SZXZpZXdlZC1ieSlgIHNob3dzIHRyYWlsZXIgbGluZXMgd2l0aCBrZXkKKyAgIGBSZXZpZXdlZC1ieWAuCisqKiAnb25seVs9dmFsXSc6IHNlbGVjdCB3aGV0aGVyIG5vbi10cmFpbGVyIGxpbmVzIGZyb20gdGhlIHRyYWlsZXIKKyAgIGJsb2NrIHNob3VsZCBiZSBpbmNsdWRlZC4gVGhlIGBvbmx5YCBrZXl3b3JkIG1heSBvcHRpb25hbGx5IGJlCisgICBmb2xsb3dlZCBieSBhbiBlcXVhbCBzaWduIGFuZCBvbmUgb2YgYHRydWVgLCBgb25gLCBgeWVzYCB0byBvbWl0IG9yCisgICBgZmFsc2VgLCBgb2ZmYCwgYG5vYCB0byBzaG93IHRoZSBub24tdHJhaWxlciBsaW5lcy4gSWYgb3B0aW9uIGlzCisgICBnaXZlbiB3aXRob3V0IHZhbHVlIGl0IGlzIGVuYWJsZWQuIElmIGdpdmVuIG11bHRpcGxlIHRpbWVzIHRoZSBsYXN0CisgICB2YWx1ZSBpcyB1c2VkLgorKiogJ3NlcGFyYXRvcj08U0VQPic6IHNwZWNpZnkgYSBzZXBhcmF0b3IgaW5zZXJ0ZWQgYmV0d2VlbiB0cmFpbGVyCisgICBsaW5lcy4gV2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgZ2l2ZW4gZWFjaCB0cmFpbGVyIGxpbmUgaXMKKyAgIHRlcm1pbmF0ZWQgd2l0aCBhIGxpbmUgZmVlZCBjaGFyYWN0ZXIuIFRoZSBzdHJpbmcgU0VQIG1heSBjb250YWluCisgICB0aGUgbGl0ZXJhbCBmb3JtYXR0aW5nIGNvZGVzIGRlc2NyaWJlZCBhYm92ZS4gVG8gdXNlIGNvbW1hIGFzCisgICBzZXBhcmF0b3Igb25lIG11c3QgdXNlIGAleDJDYCBhcyBpdCB3b3VsZCBvdGhlcndpc2UgYmUgcGFyc2VkIGFzCisgICBuZXh0IG9wdGlvbi4gSWYgc2VwYXJhdG9yIG9wdGlvbiBpcyBnaXZlbiBtdWx0aXBsZSB0aW1lcyBvbmx5IHRoZQorICAgbGFzdCBvbmUgaXMgdXNlZC4gRS5nLiwgYCUodHJhaWxlcnM6a2V5PVRpY2tldCxzZXBhcmF0b3I9JXgyQyApYAorICAgc2hvd3MgYWxsIHRyYWlsZXIgbGluZXMgd2hvc2Uga2V5IGlzICJUaWNrZXQiIHNlcGFyYXRlZCBieSBhIGNvbW1hCisgICBhbmQgYSBzcGFjZS4KKyoqICd1bmZvbGRbPXZhbF0nOiBtYWtlIGl0IGJlaGF2ZSBhcyBpZiBpbnRlcnByZXQtdHJhaWxlcidzIGAtLXVuZm9sZGAKKyAgIG9wdGlvbiB3YXMgZ2l2ZW4uIEluIHNhbWUgd2F5IGFzIHRvIGZvciBgb25seWAgaXQgY2FuIGJlIGZvbGxvd2VkCisgICBieSBhbiBlcXVhbCBzaWduIGFuZCBleHBsaWNpdCB2YWx1ZS4gRS5nLiwKKyAgIGAlKHRyYWlsZXJzOm9ubHksdW5mb2xkPXRydWUpYCB1bmZvbGRzIGFuZCBzaG93cyBhbGwgdHJhaWxlciBsaW5lcy4KKyoqICd2YWx1ZW9ubHlbPXZhbF0nOiBza2lwIG92ZXIgdGhlIGtleSBwYXJ0IG9mIHRoZSB0cmFpbGVyIGxpbmUgYW5kIG9ubHkKKyAgIHNob3cgdGhlIHZhbHVlIHBhcnQuIEFsc28gdGhpcyBvcHRpb25hbGx5IGFsbG93cyBleHBsaWNpdCB2YWx1ZS4KKworTk9URTogU29tZSBwbGFjZWhvbGRlcnMgbWF5IGRlcGVuZCBvbiBvdGhlciBvcHRpb25zIGdpdmVuIHRvIHRoZQorcmV2aXNpb24gdHJhdmVyc2FsIGVuZ2luZS4gRm9yIGV4YW1wbGUsIHRoZSBgJWcqYCByZWZsb2cgb3B0aW9ucyB3aWxsCitpbnNlcnQgYW4gZW1wdHkgc3RyaW5nIHVubGVzcyB3ZSBhcmUgdHJhdmVyc2luZyByZWZsb2cgZW50cmllcyAoZS5nLiwgYnkKK2BnaXQgbG9nIC1nYCkuIFRoZSBgJWRgIGFuZCBgJURgIHBsYWNlaG9sZGVycyB3aWxsIHVzZSB0aGUgInNob3J0IgorZGVjb3JhdGlvbiBmb3JtYXQgaWYgYC0tZGVjb3JhdGVgIHdhcyBub3QgYWxyZWFkeSBwcm92aWRlZCBvbiB0aGUgY29tbWFuZAorbGluZS4KKworSWYgeW91IGFkZCBhIGArYCAocGx1cyBzaWduKSBhZnRlciAnJScgb2YgYSBwbGFjZWhvbGRlciwgYSBsaW5lLWZlZWQKK2lzIGluc2VydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZXhwYW5zaW9uIGlmIGFuZCBvbmx5IGlmIHRoZQorcGxhY2Vob2xkZXIgZXhwYW5kcyB0byBhIG5vbi1lbXB0eSBzdHJpbmcuCisKK0lmIHlvdSBhZGQgYSBgLWAgKG1pbnVzIHNpZ24pIGFmdGVyICclJyBvZiBhIHBsYWNlaG9sZGVyLCBhbGwgY29uc2VjdXRpdmUKK2xpbmUtZmVlZHMgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBleHBhbnNpb24gYXJlIGRlbGV0ZWQgaWYgYW5kIG9ubHkgaWYgdGhlCitwbGFjZWhvbGRlciBleHBhbmRzIHRvIGFuIGVtcHR5IHN0cmluZy4KKworSWYgeW91IGFkZCBhIGAgYCAoc3BhY2UpIGFmdGVyICclJyBvZiBhIHBsYWNlaG9sZGVyLCBhIHNwYWNlCitpcyBpbnNlcnRlZCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGV4cGFuc2lvbiBpZiBhbmQgb25seSBpZiB0aGUKK3BsYWNlaG9sZGVyIGV4cGFuZHMgdG8gYSBub24tZW1wdHkgc3RyaW5nLgorCisqICd0Zm9ybWF0OicKKysKK1RoZSAndGZvcm1hdDonIGZvcm1hdCB3b3JrcyBleGFjdGx5IGxpa2UgJ2Zvcm1hdDonLCBleGNlcHQgdGhhdCBpdAorcHJvdmlkZXMgInRlcm1pbmF0b3IiIHNlbWFudGljcyBpbnN0ZWFkIG9mICJzZXBhcmF0b3IiIHNlbWFudGljcy4gSW4KK290aGVyIHdvcmRzLCBlYWNoIGNvbW1pdCBoYXMgdGhlIG1lc3NhZ2UgdGVybWluYXRvciBjaGFyYWN0ZXIgKHVzdWFsbHkgYQorbmV3bGluZSkgYXBwZW5kZWQsIHJhdGhlciB0aGFuIGEgc2VwYXJhdG9yIHBsYWNlZCBiZXR3ZWVuIGVudHJpZXMuCitUaGlzIG1lYW5zIHRoYXQgdGhlIGZpbmFsIGVudHJ5IG9mIGEgc2luZ2xlLWxpbmUgZm9ybWF0IHdpbGwgYmUgcHJvcGVybHkKK3Rlcm1pbmF0ZWQgd2l0aCBhIG5ldyBsaW5lLCBqdXN0IGFzIHRoZSAib25lbGluZSIgZm9ybWF0IGRvZXMuCitGb3IgZXhhbXBsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0yIC0tcHJldHR5PWZvcm1hdDolaCA0ZGE0NWJlZiBcCisgIHwgcGVybCAtcGUgJyRfIC49ICIgLS0gTk8gTkVXTElORVxuIiB1bmxlc3MgL1xuLycKKzRkYTQ1YmUKKzcxMzQ5NzMgLS0gTk8gTkVXTElORQorCiskIGdpdCBsb2cgLTIgLS1wcmV0dHk9dGZvcm1hdDolaCA0ZGE0NWJlZiBcCisgIHwgcGVybCAtcGUgJyRfIC49ICIgLS0gTk8gTkVXTElORVxuIiB1bmxlc3MgL1xuLycKKzRkYTQ1YmUKKzcxMzQ5NzMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSW4gYWRkaXRpb24sIGFueSB1bnJlY29nbml6ZWQgc3RyaW5nIHRoYXQgaGFzIGEgYCVgIGluIGl0IGlzIGludGVycHJldGVkCithcyBpZiBpdCBoYXMgYHRmb3JtYXQ6YCBpbiBmcm9udCBvZiBpdC4gIEZvciBleGFtcGxlLCB0aGVzZSB0d28gYXJlCitlcXVpdmFsZW50OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLTIgLS1wcmV0dHk9dGZvcm1hdDolaCA0ZGE0NWJlZgorJCBnaXQgbG9nIC0yIC0tcHJldHR5PSVoIDRkYTQ1YmVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2ZGE2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0CkBAIC0wLDAgKzEsOTYgQEAKKy0tcHJldHR5Wz08Zm9ybWF0Pl06OgorLS1mb3JtYXQ9PGZvcm1hdD46OgorCisJUHJldHR5LXByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgY29tbWl0IGxvZ3MgaW4gYSBnaXZlbiBmb3JtYXQsCisJd2hlcmUgJzxmb3JtYXQ+JyBjYW4gYmUgb25lIG9mICdvbmVsaW5lJywgJ3Nob3J0JywgJ21lZGl1bScsCisJJ2Z1bGwnLCAnZnVsbGVyJywgJ3JlZmVyZW5jZScsICdlbWFpbCcsICdyYXcnLCAnZm9ybWF0OjxzdHJpbmc+JworCWFuZCAndGZvcm1hdDo8c3RyaW5nPicuICBXaGVuICc8Zm9ybWF0PicgaXMgbm9uZSBvZiB0aGUgYWJvdmUsCisJYW5kIGhhcyAnJXBsYWNlaG9sZGVyJyBpbiBpdCwgaXQgYWN0cyBhcyBpZgorCSctLXByZXR0eT10Zm9ybWF0Ojxmb3JtYXQ+JyB3ZXJlIGdpdmVuLgorKworU2VlIHRoZSAiUFJFVFRZIEZPUk1BVFMiIHNlY3Rpb24gZm9yIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzIGZvciBlYWNoCitmb3JtYXQuICBXaGVuICc9PGZvcm1hdD4nIHBhcnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ21lZGl1bScuCisrCitOb3RlOiB5b3UgY2FuIHNwZWNpZnkgdGhlIGRlZmF1bHQgcHJldHR5IGZvcm1hdCBpbiB0aGUgcmVwb3NpdG9yeQorY29uZmlndXJhdGlvbiAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKKy0tYWJicmV2LWNvbW1pdDo6CisJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgY29tbWl0IG9iamVjdAorCW5hbWUsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LiAgTm9uIGRlZmF1bHQgbnVtYmVyIG9mCisJZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAiLS1hYmJyZXY9PG4+IiAod2hpY2ggYWxzbyBtb2RpZmllcworCWRpZmYgb3V0cHV0LCBpZiBpdCBpcyBkaXNwbGF5ZWQpLgorKworVGhpcyBzaG91bGQgbWFrZSAiLS1wcmV0dHk9b25lbGluZSIgYSB3aG9sZSBsb3QgbW9yZSByZWFkYWJsZSBmb3IKK3Blb3BsZSB1c2luZyA4MC1jb2x1bW4gdGVybWluYWxzLgorCistLW5vLWFiYnJldi1jb21taXQ6OgorCVNob3cgdGhlIGZ1bGwgNDAtYnl0ZSBoZXhhZGVjaW1hbCBjb21taXQgb2JqZWN0IG5hbWUuIFRoaXMgbmVnYXRlcworCWAtLWFiYnJldi1jb21taXRgIGFuZCB0aG9zZSBvcHRpb25zIHdoaWNoIGltcGx5IGl0IHN1Y2ggYXMKKwkiLS1vbmVsaW5lIi4gSXQgYWxzbyBvdmVycmlkZXMgdGhlIGBsb2cuYWJicmV2Q29tbWl0YCB2YXJpYWJsZS4KKworLS1vbmVsaW5lOjoKKwlUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciAiLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQiCisJdXNlZCB0b2dldGhlci4KKworLS1lbmNvZGluZz08ZW5jb2Rpbmc+OjoKKwlUaGUgY29tbWl0IG9iamVjdHMgcmVjb3JkIHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUgbG9nIG1lc3NhZ2UKKwlpbiB0aGVpciBlbmNvZGluZyBoZWFkZXI7IHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlCisJY29tbWFuZCB0byByZS1jb2RlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaW4gdGhlIGVuY29kaW5nCisJcHJlZmVycmVkIGJ5IHRoZSB1c2VyLiAgRm9yIG5vbiBwbHVtYmluZyBjb21tYW5kcyB0aGlzCisJZGVmYXVsdHMgdG8gVVRGLTguIE5vdGUgdGhhdCBpZiBhbiBvYmplY3QgY2xhaW1zIHRvIGJlIGVuY29kZWQKKwlpbiBgWGAgYW5kIHdlIGFyZSBvdXRwdXR0aW5nIGluIGBYYCwgd2Ugd2lsbCBvdXRwdXQgdGhlIG9iamVjdAorCXZlcmJhdGltOyB0aGlzIG1lYW5zIHRoYXQgaW52YWxpZCBzZXF1ZW5jZXMgaW4gdGhlIG9yaWdpbmFsCisJY29tbWl0IG1heSBiZSBjb3BpZWQgdG8gdGhlIG91dHB1dC4KKworLS1leHBhbmQtdGFicz08bj46OgorLS1leHBhbmQtdGFiczo6CistLW5vLWV4cGFuZC10YWJzOjoKKwlQZXJmb3JtIGEgdGFiIGV4cGFuc2lvbiAocmVwbGFjZSBlYWNoIHRhYiB3aXRoIGVub3VnaCBzcGFjZXMKKwl0byBmaWxsIHRvIHRoZSBuZXh0IGRpc3BsYXkgY29sdW1uIHRoYXQgaXMgbXVsdGlwbGUgb2YgJzxuPicpCisJaW4gdGhlIGxvZyBtZXNzYWdlIGJlZm9yZSBzaG93aW5nIGl0IGluIHRoZSBvdXRwdXQuCisJYC0tZXhwYW5kLXRhYnNgIGlzIGEgc2hvcnQtaGFuZCBmb3IgYC0tZXhwYW5kLXRhYnM9OGAsIGFuZAorCWAtLW5vLWV4cGFuZC10YWJzYCBpcyBhIHNob3J0LWhhbmQgZm9yIGAtLWV4cGFuZC10YWJzPTBgLAorCXdoaWNoIGRpc2FibGVzIHRhYiBleHBhbnNpb24uCisrCitCeSBkZWZhdWx0LCB0YWJzIGFyZSBleHBhbmRlZCBpbiBwcmV0dHkgZm9ybWF0cyB0aGF0IGluZGVudCB0aGUgbG9nCittZXNzYWdlIGJ5IDQgc3BhY2VzIChpLmUuICAnbWVkaXVtJywgd2hpY2ggaXMgdGhlIGRlZmF1bHQsICdmdWxsJywKK2FuZCAnZnVsbGVyJykuCisKK2lmbmRlZjo6Z2l0LXJldi1saXN0W10KKy0tbm90ZXNbPTxyZWY+XTo6CisJU2hvdyB0aGUgbm90ZXMgKHNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSkgdGhhdCBhbm5vdGF0ZSB0aGUKKwljb21taXQsIHdoZW4gc2hvd2luZyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorCWZvciBgZ2l0IGxvZ2AsIGBnaXQgc2hvd2AgYW5kIGBnaXQgd2hhdGNoYW5nZWRgIGNvbW1hbmRzIHdoZW4KKwl0aGVyZSBpcyBubyBgLS1wcmV0dHlgLCBgLS1mb3JtYXRgLCBvciBgLS1vbmVsaW5lYCBvcHRpb24gZ2l2ZW4KKwlvbiB0aGUgY29tbWFuZCBsaW5lLgorKworQnkgZGVmYXVsdCwgdGhlIG5vdGVzIHNob3duIGFyZSBmcm9tIHRoZSBub3RlcyByZWZzIGxpc3RlZCBpbiB0aGUKK2Bjb3JlLm5vdGVzUmVmYCBhbmQgYG5vdGVzLmRpc3BsYXlSZWZgIHZhcmlhYmxlcyAob3IgY29ycmVzcG9uZGluZworZW52aXJvbm1lbnQgb3ZlcnJpZGVzKS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBkZXRhaWxzLgorKworV2l0aCBhbiBvcHRpb25hbCAnPHJlZj4nIGFyZ3VtZW50LCB1c2UgdGhlIHJlZiB0byBmaW5kIHRoZSBub3RlcwordG8gZGlzcGxheS4gIFRoZSByZWYgY2FuIHNwZWNpZnkgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucword2l0aCBgcmVmcy9ub3Rlcy9gOyB3aGVuIGl0IGJlZ2lucyB3aXRoIGBub3Rlcy9gLCBgcmVmcy9gIGFuZCBvdGhlcndpc2UKK2ByZWZzL25vdGVzL2AgaXMgcHJlZml4ZWQgdG8gZm9ybSBhIGZ1bGwgbmFtZSBvZiB0aGUgcmVmLgorKworTXVsdGlwbGUgLS1ub3RlcyBvcHRpb25zIGNhbiBiZSBjb21iaW5lZCB0byBjb250cm9sIHdoaWNoIG5vdGVzIGFyZQorYmVpbmcgZGlzcGxheWVkLiBFeGFtcGxlczogIi0tbm90ZXM9Zm9vIiB3aWxsIHNob3cgb25seSBub3RlcyBmcm9tCisicmVmcy9ub3Rlcy9mb28iOyAiLS1ub3Rlcz1mb28gLS1ub3RlcyIgd2lsbCBzaG93IGJvdGggbm90ZXMgZnJvbQorInJlZnMvbm90ZXMvZm9vIiBhbmQgZnJvbSB0aGUgZGVmYXVsdCBub3RlcyByZWYocykuCisKKy0tbm8tbm90ZXM6OgorCURvIG5vdCBzaG93IG5vdGVzLiBUaGlzIG5lZ2F0ZXMgdGhlIGFib3ZlIGAtLW5vdGVzYCBvcHRpb24sIGJ5CisJcmVzZXR0aW5nIHRoZSBsaXN0IG9mIG5vdGVzIHJlZnMgZnJvbSB3aGljaCBub3RlcyBhcmUgc2hvd24uCisJT3B0aW9ucyBhcmUgcGFyc2VkIGluIHRoZSBvcmRlciBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBzbyBlLmcuCisJIi0tbm90ZXMgLS1ub3Rlcz1mb28gLS1uby1ub3RlcyAtLW5vdGVzPWJhciIgd2lsbCBvbmx5IHNob3cgbm90ZXMKKwlmcm9tICJyZWZzL25vdGVzL2JhciIuCisKKy0tc2hvdy1ub3Rlc1s9PHJlZj5dOjoKKy0tW25vLV1zdGFuZGFyZC1ub3Rlczo6CisJVGhlc2Ugb3B0aW9ucyBhcmUgZGVwcmVjYXRlZC4gVXNlIHRoZSBhYm92ZSAtLW5vdGVzLy0tbm8tbm90ZXMKKwlvcHRpb25zIGluc3RlYWQuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KKworLS1zaG93LXNpZ25hdHVyZTo6CisJQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIGEgc2lnbmVkIGNvbW1pdCBvYmplY3QgYnkgcGFzc2luZyB0aGUgc2lnbmF0dXJlCisJdG8gYGdwZyAtLXZlcmlmeWAgYW5kIHNob3cgdGhlIG91dHB1dC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkM2E2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0CkBAIC0wLDAgKzEsMTAyIEBACis8cmVwb3NpdG9yeT46OgorCVRoZSAicmVtb3RlIiByZXBvc2l0b3J5IHRoYXQgaXMgdGhlIHNvdXJjZSBvZiBhIGZldGNoCisJb3IgcHVsbCBvcGVyYXRpb24uICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgZWl0aGVyIGEgVVJMCisJKHNlZSB0aGUgc2VjdGlvbiA8PFVSTFMsR0lUIFVSTFM+PiBiZWxvdykgb3IgdGhlIG5hbWUKKwlvZiBhIHJlbW90ZSAoc2VlIHRoZSBzZWN0aW9uIDw8UkVNT1RFUyxSRU1PVEVTPj4gYmVsb3cpLgorCitpZm5kZWY6OmdpdC1wdWxsW10KKzxncm91cD46OgorCUEgbmFtZSByZWZlcnJpbmcgdG8gYSBsaXN0IG9mIHJlcG9zaXRvcmllcyBhcyB0aGUgdmFsdWUKKwlvZiByZW1vdGVzLjxncm91cD4gaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKwkoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCitlbmRpZjo6Z2l0LXB1bGxbXQorCis8cmVmc3BlYz46OgorCVNwZWNpZmllcyB3aGljaCByZWZzIHRvIGZldGNoIGFuZCB3aGljaCBsb2NhbCByZWZzIHRvIHVwZGF0ZS4KKwlXaGVuIG5vIDxyZWZzcGVjPnMgYXBwZWFyIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSByZWZzIHRvIGZldGNoCisJYXJlIHJlYWQgZnJvbSBgcmVtb3RlLjxyZXBvc2l0b3J5Pi5mZXRjaGAgdmFyaWFibGVzIGluc3RlYWQKK2lmbmRlZjo6Z2l0LXB1bGxbXQorCShzZWUgPDxDUlRCLENPTkZJR1VSRUQgUkVNT1RFLVRSQUNLSU5HIEJSQU5DSEVTPj4gYmVsb3cpLgorZW5kaWY6OmdpdC1wdWxsW10KK2lmZGVmOjpnaXQtcHVsbFtdCisJKHNlZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXSkuCitlbmRpZjo6Z2l0LXB1bGxbXQorKworVGhlIGZvcm1hdCBvZiBhIDxyZWZzcGVjPiBwYXJhbWV0ZXIgaXMgYW4gb3B0aW9uYWwgcGx1cworYCtgLCBmb2xsb3dlZCBieSB0aGUgc291cmNlIDxzcmM+LCBmb2xsb3dlZAorYnkgYSBjb2xvbiBgOmAsIGZvbGxvd2VkIGJ5IHRoZSBkZXN0aW5hdGlvbiByZWYgPGRzdD4uCitUaGUgY29sb24gY2FuIGJlIG9taXR0ZWQgd2hlbiA8ZHN0PiBpcyBlbXB0eS4gIDxzcmM+IGlzCit0eXBpY2FsbHkgYSByZWYsIGJ1dCBpdCBjYW4gYWxzbyBiZSBhIGZ1bGx5IHNwZWxsZWQgaGV4IG9iamVjdAorbmFtZS4KKysKK2B0YWcgPHRhZz5gIG1lYW5zIHRoZSBzYW1lIGFzIGByZWZzL3RhZ3MvPHRhZz46cmVmcy90YWdzLzx0YWc+YDsKK2l0IHJlcXVlc3RzIGZldGNoaW5nIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGdpdmVuIHRhZy4KKysKK1RoZSByZW1vdGUgcmVmIHRoYXQgbWF0Y2hlcyA8c3JjPgoraXMgZmV0Y2hlZCwgYW5kIGlmIDxkc3Q+IGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcsIGFuIGF0dGVtcHQKK2lzIG1hZGUgdG8gdXBkYXRlIHRoZSBsb2NhbCByZWYgdGhhdCBtYXRjaGVzIGl0LgorKworV2hldGhlciB0aGF0IHVwZGF0ZSBpcyBhbGxvd2VkIHdpdGhvdXQgYC0tZm9yY2VgIGRlcGVuZHMgb24gdGhlIHJlZgorbmFtZXNwYWNlIGl0J3MgYmVpbmcgZmV0Y2hlZCB0bywgdGhlIHR5cGUgb2Ygb2JqZWN0IGJlaW5nIGZldGNoZWQsIGFuZAord2hldGhlciB0aGUgdXBkYXRlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBmYXN0LWZvcndhcmQuIEdlbmVyYWxseSwgdGhlCitzYW1lIHJ1bGVzIGFwcGx5IGZvciBmZXRjaGluZyBhcyB3aGVuIHB1c2hpbmcsIHNlZSB0aGUgYDxyZWZzcGVjPi4uLmAKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXQtcHVzaFsxXSBmb3Igd2hhdCB0aG9zZSBhcmUuIEV4Y2VwdGlvbnMgdG8gdGhvc2UKK3J1bGVzIHBhcnRpY3VsYXIgdG8gJ2dpdCBmZXRjaCcgYXJlIG5vdGVkIGJlbG93LgorKworVW50aWwgR2l0IHZlcnNpb24gMi4yMCwgYW5kIHVubGlrZSB3aGVuIHB1c2hpbmcgd2l0aAorbGlua2dpdDpnaXQtcHVzaFsxXSwgYW55IHVwZGF0ZXMgdG8gYHJlZnMvdGFncy8qYCB3b3VsZCBiZSBhY2NlcHRlZAord2l0aG91dCBgK2AgaW4gdGhlIHJlZnNwZWMgKG9yIGAtLWZvcmNlYCkuIFdoZW4gZmV0Y2hpbmcsIHdlIHByb21pc2N1b3VzbHkKK2NvbnNpZGVyZWQgYWxsIHRhZyB1cGRhdGVzIGZyb20gYSByZW1vdGUgdG8gYmUgZm9yY2VkIGZldGNoZXMuICBTaW5jZQorR2l0IHZlcnNpb24gMi4yMCwgZmV0Y2hpbmcgdG8gdXBkYXRlIGByZWZzL3RhZ3MvKmAgd29ya3MgdGhlIHNhbWUgd2F5CithcyB3aGVuIHB1c2hpbmcuIEkuZS4gYW55IHVwZGF0ZXMgd2lsbCBiZSByZWplY3RlZCB3aXRob3V0IGArYCBpbiB0aGUKK3JlZnNwZWMgKG9yIGAtLWZvcmNlYCkuCisrCitVbmxpa2Ugd2hlbiBwdXNoaW5nIHdpdGggbGlua2dpdDpnaXQtcHVzaFsxXSwgYW55IHVwZGF0ZXMgb3V0c2lkZSBvZgorYHJlZnMve3RhZ3MsaGVhZHN9LypgIHdpbGwgYmUgYWNjZXB0ZWQgd2l0aG91dCBgK2AgaW4gdGhlIHJlZnNwZWMgKG9yCitgLS1mb3JjZWApLCB3aGV0aGVyIHRoYXQncyBzd2FwcGluZyBlLmcuIGEgdHJlZSBvYmplY3QgZm9yIGEgYmxvYiwgb3IKK2EgY29tbWl0IGZvciBhbm90aGVyIGNvbW1pdCB0aGF0J3MgZG9lc24ndCBoYXZlIHRoZSBwcmV2aW91cyBjb21taXQgYXMKK2FuIGFuY2VzdG9yIGV0Yy4KKysKK1VubGlrZSB3aGVuIHB1c2hpbmcgd2l0aCBsaW5rZ2l0OmdpdC1wdXNoWzFdLCB0aGVyZSBpcyBubworY29uZmlndXJhdGlvbiB3aGljaCdsbCBhbWVuZCB0aGVzZSBydWxlcywgYW5kIG5vdGhpbmcgbGlrZSBhCitgcHJlLWZldGNoYCBob29rIGFuYWxvZ291cyB0byB0aGUgYHByZS1yZWNlaXZlYCBob29rLgorKworQXMgd2l0aCBwdXNoaW5nIHdpdGggbGlua2dpdDpnaXQtcHVzaFsxXSwgYWxsIG9mIHRoZSBydWxlcyBkZXNjcmliZWQKK2Fib3ZlIGFib3V0IHdoYXQncyBub3QgYWxsb3dlZCBhcyBhbiB1cGRhdGUgY2FuIGJlIG92ZXJyaWRkZW4gYnkKK2FkZGluZyBhbiB0aGUgb3B0aW9uYWwgbGVhZGluZyBgK2AgdG8gYSByZWZzcGVjIChvciB1c2luZyBgLS1mb3JjZWAKK2NvbW1hbmQgbGluZSBvcHRpb24pLiBUaGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyB0aGF0IG5vIGFtb3VudCBvZgorZm9yY2luZyB3aWxsIG1ha2UgdGhlIGByZWZzL2hlYWRzLypgIG5hbWVzcGFjZSBhY2NlcHQgYSBub24tY29tbWl0CitvYmplY3QuCisrCitbTk9URV0KK1doZW4gdGhlIHJlbW90ZSBicmFuY2ggeW91IHdhbnQgdG8gZmV0Y2ggaXMga25vd24gdG8KK2JlIHJld291bmQgYW5kIHJlYmFzZWQgcmVndWxhcmx5LCBpdCBpcyBleHBlY3RlZCB0aGF0CitpdHMgbmV3IHRpcCB3aWxsIG5vdCBiZSBkZXNjZW5kYW50IG9mIGl0cyBwcmV2aW91cyB0aXAKKyhhcyBzdG9yZWQgaW4geW91ciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHRoZSBsYXN0IHRpbWUKK3lvdSBmZXRjaGVkKS4gIFlvdSB3b3VsZCB3YW50Cit0byB1c2UgdGhlIGArYCBzaWduIHRvIGluZGljYXRlIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcword2lsbCBiZSBuZWVkZWQgZm9yIHN1Y2ggYnJhbmNoZXMuICBUaGVyZSBpcyBubyB3YXkgdG8KK2RldGVybWluZSBvciBkZWNsYXJlIHRoYXQgYSBicmFuY2ggd2lsbCBiZSBtYWRlIGF2YWlsYWJsZQoraW4gYSByZXBvc2l0b3J5IHdpdGggdGhpcyBiZWhhdmlvcjsgdGhlIHB1bGxpbmcgdXNlciBzaW1wbHkKK211c3Qga25vdyB0aGlzIGlzIHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJuIGZvciBhIGJyYW5jaC4KK2lmZGVmOjpnaXQtcHVsbFtdCisrCitbTk9URV0KK1RoZXJlIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGxpc3RpbmcgbXVsdGlwbGUgPHJlZnNwZWM+CitkaXJlY3RseSBvbiAnZ2l0IHB1bGwnIGNvbW1hbmQgbGluZSBhbmQgaGF2aW5nIG11bHRpcGxlCitgcmVtb3RlLjxyZXBvc2l0b3J5Pi5mZXRjaGAgZW50cmllcyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24KK2ZvciBhIDxyZXBvc2l0b3J5PiBhbmQgcnVubmluZyBhCisnZ2l0IHB1bGwnIGNvbW1hbmQgd2l0aG91dCBhbnkgZXhwbGljaXQgPHJlZnNwZWM+IHBhcmFtZXRlcnMuCis8cmVmc3BlYz5zIGxpc3RlZCBleHBsaWNpdGx5IG9uIHRoZSBjb21tYW5kIGxpbmUgYXJlIGFsd2F5cworbWVyZ2VkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIGFmdGVyIGZldGNoaW5nLiAgSW4gb3RoZXIgd29yZHMsCitpZiB5b3UgbGlzdCBtb3JlIHRoYW4gb25lIHJlbW90ZSByZWYsICdnaXQgcHVsbCcgd2lsbCBjcmVhdGUKK2FuIE9jdG9wdXMgbWVyZ2UuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGRvIG5vdCBsaXN0IGFueQorZXhwbGljaXQgPHJlZnNwZWM+IHBhcmFtZXRlciBvbiB0aGUgY29tbWFuZCBsaW5lLCAnZ2l0IHB1bGwnCit3aWxsIGZldGNoIGFsbCB0aGUgPHJlZnNwZWM+cyBpdCBmaW5kcyBpbiB0aGUKK2ByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYCBjb25maWd1cmF0aW9uIGFuZCBtZXJnZQorb25seSB0aGUgZmlyc3QgPHJlZnNwZWM+IGZvdW5kIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorVGhpcyBpcyBiZWNhdXNlIG1ha2luZyBhbgorT2N0b3B1cyBmcm9tIHJlbW90ZSByZWZzIGlzIHJhcmVseSBkb25lLCB3aGlsZSBrZWVwaW5nIHRyYWNrCitvZiBtdWx0aXBsZSByZW1vdGUgaGVhZHMgaW4gb25lLWdvIGJ5IGZldGNoaW5nIG1vcmUgdGhhbiBvbmUKK2lzIG9mdGVuIHVzZWZ1bC4KK2VuZGlmOjpnaXQtcHVsbFtdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQwMmFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtMCwwICsxLDEwMjkgQEAKK0NvbW1pdCBMaW1pdGluZworfn5+fn5+fn5+fn5+fn5+CisKK0Jlc2lkZXMgc3BlY2lmeWluZyBhIHJhbmdlIG9mIGNvbW1pdHMgdGhhdCBzaG91bGQgYmUgbGlzdGVkIHVzaW5nIHRoZQorc3BlY2lhbCBub3RhdGlvbnMgZXhwbGFpbmVkIGluIHRoZSBkZXNjcmlwdGlvbiwgYWRkaXRpb25hbCBjb21taXQKK2xpbWl0aW5nIG1heSBiZSBhcHBsaWVkLgorCitVc2luZyBtb3JlIG9wdGlvbnMgZ2VuZXJhbGx5IGZ1cnRoZXIgbGltaXRzIHRoZSBvdXRwdXQgKGUuZy4KK2AtLXNpbmNlPTxkYXRlMT5gIGxpbWl0cyB0byBjb21taXRzIG5ld2VyIHRoYW4gYDxkYXRlMT5gLCBhbmQgdXNpbmcgaXQKK3dpdGggYC0tZ3JlcD08cGF0dGVybj5gIGZ1cnRoZXIgbGltaXRzIHRvIGNvbW1pdHMgd2hvc2UgbG9nIG1lc3NhZ2UKK2hhcyBhIGxpbmUgdGhhdCBtYXRjaGVzIGA8cGF0dGVybj5gKSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworTm90ZSB0aGF0IHRoZXNlIGFyZSBhcHBsaWVkIGJlZm9yZSBjb21taXQKK29yZGVyaW5nIGFuZCBmb3JtYXR0aW5nIG9wdGlvbnMsIHN1Y2ggYXMgYC0tcmV2ZXJzZWAuCisKKy08bnVtYmVyPjo6CistbiA8bnVtYmVyPjo6CistLW1heC1jb3VudD08bnVtYmVyPjo6CisJTGltaXQgdGhlIG51bWJlciBvZiBjb21taXRzIHRvIG91dHB1dC4KKworLS1za2lwPTxudW1iZXI+OjoKKwlTa2lwICdudW1iZXInIGNvbW1pdHMgYmVmb3JlIHN0YXJ0aW5nIHRvIHNob3cgdGhlIGNvbW1pdCBvdXRwdXQuCisKKy0tc2luY2U9PGRhdGU+OjoKKy0tYWZ0ZXI9PGRhdGU+OjoKKwlTaG93IGNvbW1pdHMgbW9yZSByZWNlbnQgdGhhbiBhIHNwZWNpZmljIGRhdGUuCisKKy0tdW50aWw9PGRhdGU+OjoKKy0tYmVmb3JlPTxkYXRlPjo6CisJU2hvdyBjb21taXRzIG9sZGVyIHRoYW4gYSBzcGVjaWZpYyBkYXRlLgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KKy0tbWF4LWFnZT08dGltZXN0YW1wPjo6CistLW1pbi1hZ2U9PHRpbWVzdGFtcD46OgorCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBzcGVjaWZpZWQgdGltZSByYW5nZS4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLWF1dGhvcj08cGF0dGVybj46OgorLS1jb21taXR0ZXI9PHBhdHRlcm4+OjoKKwlMaW1pdCB0aGUgY29tbWl0cyBvdXRwdXQgdG8gb25lcyB3aXRoIGF1dGhvci9jb21taXR0ZXIKKwloZWFkZXIgbGluZXMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHBhdHRlcm4gKHJlZ3VsYXIKKwlleHByZXNzaW9uKS4gIFdpdGggbW9yZSB0aGFuIG9uZSBgLS1hdXRob3I9PHBhdHRlcm4+YCwKKwljb21taXRzIHdob3NlIGF1dGhvciBtYXRjaGVzIGFueSBvZiB0aGUgZ2l2ZW4gcGF0dGVybnMgYXJlCisJY2hvc2VuIChzaW1pbGFybHkgZm9yIG11bHRpcGxlIGAtLWNvbW1pdHRlcj08cGF0dGVybj5gKS4KKworLS1ncmVwLXJlZmxvZz08cGF0dGVybj46OgorCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBvbmVzIHdpdGggcmVmbG9nIGVudHJpZXMgdGhhdAorCW1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybiAocmVndWxhciBleHByZXNzaW9uKS4gV2l0aAorCW1vcmUgdGhhbiBvbmUgYC0tZ3JlcC1yZWZsb2dgLCBjb21taXRzIHdob3NlIHJlZmxvZyBtZXNzYWdlCisJbWF0Y2hlcyBhbnkgb2YgdGhlIGdpdmVuIHBhdHRlcm5zIGFyZSBjaG9zZW4uICBJdCBpcyBhbgorCWVycm9yIHRvIHVzZSB0aGlzIG9wdGlvbiB1bmxlc3MgYC0td2Fsay1yZWZsb2dzYCBpcyBpbiB1c2UuCisKKy0tZ3JlcD08cGF0dGVybj46OgorCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBvbmVzIHdpdGggbG9nIG1lc3NhZ2UgdGhhdAorCW1hdGNoZXMgdGhlIHNwZWNpZmllZCBwYXR0ZXJuIChyZWd1bGFyIGV4cHJlc3Npb24pLiAgV2l0aAorCW1vcmUgdGhhbiBvbmUgYC0tZ3JlcD08cGF0dGVybj5gLCBjb21taXRzIHdob3NlIG1lc3NhZ2UKKwltYXRjaGVzIGFueSBvZiB0aGUgZ2l2ZW4gcGF0dGVybnMgYXJlIGNob3NlbiAoYnV0IHNlZQorCWAtLWFsbC1tYXRjaGApLgoraWZuZGVmOjpnaXQtcmV2LWxpc3RbXQorKworV2hlbiBgLS1ub3Rlc2AgaXMgaW4gZWZmZWN0LCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBub3RlcyBpcworbWF0Y2hlZCBhcyBpZiBpdCB3ZXJlIHBhcnQgb2YgdGhlIGxvZyBtZXNzYWdlLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tYWxsLW1hdGNoOjoKKwlMaW1pdCB0aGUgY29tbWl0cyBvdXRwdXQgdG8gb25lcyB0aGF0IG1hdGNoIGFsbCBnaXZlbiBgLS1ncmVwYCwKKwlpbnN0ZWFkIG9mIG9uZXMgdGhhdCBtYXRjaCBhdCBsZWFzdCBvbmUuCisKKy0taW52ZXJ0LWdyZXA6OgorCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBvbmVzIHdpdGggbG9nIG1lc3NhZ2UgdGhhdCBkbyBub3QKKwltYXRjaCB0aGUgcGF0dGVybiBzcGVjaWZpZWQgd2l0aCBgLS1ncmVwPTxwYXR0ZXJuPmAuCisKKy1pOjoKKy0tcmVnZXhwLWlnbm9yZS1jYXNlOjoKKwlNYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uIGxpbWl0aW5nIHBhdHRlcm5zIHdpdGhvdXQgcmVnYXJkIHRvIGxldHRlcgorCWNhc2UuCisKKy0tYmFzaWMtcmVnZXhwOjoKKwlDb25zaWRlciB0aGUgbGltaXRpbmcgcGF0dGVybnMgdG8gYmUgYmFzaWMgcmVndWxhciBleHByZXNzaW9uczsKKwl0aGlzIGlzIHRoZSBkZWZhdWx0LgorCistRTo6CistLWV4dGVuZGVkLXJlZ2V4cDo6CisJQ29uc2lkZXIgdGhlIGxpbWl0aW5nIHBhdHRlcm5zIHRvIGJlIGV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKwlpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKKy1GOjoKKy0tZml4ZWQtc3RyaW5nczo6CisJQ29uc2lkZXIgdGhlIGxpbWl0aW5nIHBhdHRlcm5zIHRvIGJlIGZpeGVkIHN0cmluZ3MgKGRvbid0IGludGVycHJldAorCXBhdHRlcm4gYXMgYSByZWd1bGFyIGV4cHJlc3Npb24pLgorCistUDo6CistLXBlcmwtcmVnZXhwOjoKKwlDb25zaWRlciB0aGUgbGltaXRpbmcgcGF0dGVybnMgdG8gYmUgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIKKwlleHByZXNzaW9ucy4KKysKK1N1cHBvcnQgZm9yIHRoZXNlIHR5cGVzIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaXMgYW4gb3B0aW9uYWwKK2NvbXBpbGUtdGltZSBkZXBlbmRlbmN5LiBJZiBHaXQgd2Fzbid0IGNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgdGhlbQorcHJvdmlkaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgaXQgdG8gZGllLgorCistLXJlbW92ZS1lbXB0eTo6CisJU3RvcCB3aGVuIGEgZ2l2ZW4gcGF0aCBkaXNhcHBlYXJzIGZyb20gdGhlIHRyZWUuCisKKy0tbWVyZ2VzOjoKKwlQcmludCBvbmx5IG1lcmdlIGNvbW1pdHMuIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBgLS1taW4tcGFyZW50cz0yYC4KKworLS1uby1tZXJnZXM6OgorCURvIG5vdCBwcmludCBjb21taXRzIHdpdGggbW9yZSB0aGFuIG9uZSBwYXJlbnQuIFRoaXMgaXMKKwlleGFjdGx5IHRoZSBzYW1lIGFzIGAtLW1heC1wYXJlbnRzPTFgLgorCistLW1pbi1wYXJlbnRzPTxudW1iZXI+OjoKKy0tbWF4LXBhcmVudHM9PG51bWJlcj46OgorLS1uby1taW4tcGFyZW50czo6CistLW5vLW1heC1wYXJlbnRzOjoKKwlTaG93IG9ubHkgY29tbWl0cyB3aGljaCBoYXZlIGF0IGxlYXN0IChvciBhdCBtb3N0KSB0aGF0IG1hbnkgcGFyZW50CisJY29tbWl0cy4gSW4gcGFydGljdWxhciwgYC0tbWF4LXBhcmVudHM9MWAgaXMgdGhlIHNhbWUgYXMgYC0tbm8tbWVyZ2VzYCwKKwlgLS1taW4tcGFyZW50cz0yYCBpcyB0aGUgc2FtZSBhcyBgLS1tZXJnZXNgLiAgYC0tbWF4LXBhcmVudHM9MGAKKwlnaXZlcyBhbGwgcm9vdCBjb21taXRzIGFuZCBgLS1taW4tcGFyZW50cz0zYCBhbGwgb2N0b3B1cyBtZXJnZXMuCisrCitgLS1uby1taW4tcGFyZW50c2AgYW5kIGAtLW5vLW1heC1wYXJlbnRzYCByZXNldCB0aGVzZSBsaW1pdHMgKHRvIG5vIGxpbWl0KQorYWdhaW4uICBFcXVpdmFsZW50IGZvcm1zIGFyZSBgLS1taW4tcGFyZW50cz0wYCAoYW55IGNvbW1pdCBoYXMgMCBvciBtb3JlCitwYXJlbnRzKSBhbmQgYC0tbWF4LXBhcmVudHM9LTFgIChuZWdhdGl2ZSBudW1iZXJzIGRlbm90ZSBubyB1cHBlciBsaW1pdCkuCisKKy0tZmlyc3QtcGFyZW50OjoKKwlGb2xsb3cgb25seSB0aGUgZmlyc3QgcGFyZW50IGNvbW1pdCB1cG9uIHNlZWluZyBhIG1lcmdlCisJY29tbWl0LiAgVGhpcyBvcHRpb24gY2FuIGdpdmUgYSBiZXR0ZXIgb3ZlcnZpZXcgd2hlbgorCXZpZXdpbmcgdGhlIGV2b2x1dGlvbiBvZiBhIHBhcnRpY3VsYXIgdG9waWMgYnJhbmNoLAorCWJlY2F1c2UgbWVyZ2VzIGludG8gYSB0b3BpYyBicmFuY2ggdGVuZCB0byBiZSBvbmx5IGFib3V0CisJYWRqdXN0aW5nIHRvIHVwZGF0ZWQgdXBzdHJlYW0gZnJvbSB0aW1lIHRvIHRpbWUsIGFuZAorCXRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gaWdub3JlIHRoZSBpbmRpdmlkdWFsIGNvbW1pdHMKKwlicm91Z2h0IGluIHRvIHlvdXIgaGlzdG9yeSBieSBzdWNoIGEgbWVyZ2UuIENhbm5vdCBiZQorCWNvbWJpbmVkIHdpdGggLS1iaXNlY3QuCisKKy0tbm90OjoKKwlSZXZlcnNlcyB0aGUgbWVhbmluZyBvZiB0aGUgJ3tjYXJldH0nIHByZWZpeCAob3IgbGFjayB0aGVyZW9mKQorCWZvciBhbGwgZm9sbG93aW5nIHJldmlzaW9uIHNwZWNpZmllcnMsIHVwIHRvIHRoZSBuZXh0IGAtLW5vdGAuCisKKy0tYWxsOjoKKwlQcmV0ZW5kIGFzIGlmIGFsbCB0aGUgcmVmcyBpbiBgcmVmcy9gLCBhbG9uZyB3aXRoIGBIRUFEYCwgYXJlCisJbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4KKworLS1icmFuY2hlc1s9PHBhdHRlcm4+XTo6CisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvaGVhZHNgIGFyZSBsaXN0ZWQKKwlvbiB0aGUgY29tbWFuZCBsaW5lIGFzICc8Y29tbWl0PicuIElmICc8cGF0dGVybj4nIGlzIGdpdmVuLCBsaW1pdAorCWJyYW5jaGVzIHRvIG9uZXMgbWF0Y2hpbmcgZ2l2ZW4gc2hlbGwgZ2xvYi4gSWYgcGF0dGVybiBsYWNrcyAnPycsCisJJ3thc3Rlcmlza30nLCBvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLXRhZ3NbPTxwYXR0ZXJuPl06OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGByZWZzL3RhZ3NgIGFyZSBsaXN0ZWQKKwlvbiB0aGUgY29tbWFuZCBsaW5lIGFzICc8Y29tbWl0PicuIElmICc8cGF0dGVybj4nIGlzIGdpdmVuLCBsaW1pdAorCXRhZ3MgdG8gb25lcyBtYXRjaGluZyBnaXZlbiBzaGVsbCBnbG9iLiBJZiBwYXR0ZXJuIGxhY2tzICc/JywgJ3thc3Rlcmlza30nLAorCW9yICdbJywgJy97YXN0ZXJpc2t9JyBhdCB0aGUgZW5kIGlzIGltcGxpZWQuCisKKy0tcmVtb3Rlc1s9PHBhdHRlcm4+XTo6CisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvcmVtb3Rlc2AgYXJlIGxpc3RlZAorCW9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgJzxwYXR0ZXJuPicgaXMgZ2l2ZW4sIGxpbWl0CisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHRvIG9uZXMgbWF0Y2hpbmcgZ2l2ZW4gc2hlbGwgZ2xvYi4KKwlJZiBwYXR0ZXJuIGxhY2tzICc/JywgJ3thc3Rlcmlza30nLCBvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLWdsb2I9PGdsb2ItcGF0dGVybj46OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIG1hdGNoaW5nIHNoZWxsIGdsb2IgJzxnbG9iLXBhdHRlcm4+JworCWFyZSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLiBMZWFkaW5nICdyZWZzLycsCisJaXMgYXV0b21hdGljYWxseSBwcmVwZW5kZWQgaWYgbWlzc2luZy4gSWYgcGF0dGVybiBsYWNrcyAnPycsICd7YXN0ZXJpc2t9JywKKwlvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLWV4Y2x1ZGU9PGdsb2ItcGF0dGVybj46OgorCisJRG8gbm90IGluY2x1ZGUgcmVmcyBtYXRjaGluZyAnPGdsb2ItcGF0dGVybj4nIHRoYXQgdGhlIG5leHQgYC0tYWxsYCwKKwlgLS1icmFuY2hlc2AsIGAtLXRhZ3NgLCBgLS1yZW1vdGVzYCwgb3IgYC0tZ2xvYmAgd291bGQgb3RoZXJ3aXNlCisJY29uc2lkZXIuIFJlcGV0aXRpb25zIG9mIHRoaXMgb3B0aW9uIGFjY3VtdWxhdGUgZXhjbHVzaW9uIHBhdHRlcm5zCisJdXAgdG8gdGhlIG5leHQgYC0tYWxsYCwgYC0tYnJhbmNoZXNgLCBgLS10YWdzYCwgYC0tcmVtb3Rlc2AsIG9yCisJYC0tZ2xvYmAgb3B0aW9uIChvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cyBkbyBub3QgY2xlYXIKKwlhY2N1bXVsYXRlZCBwYXR0ZXJucykuCisrCitUaGUgcGF0dGVybnMgZ2l2ZW4gc2hvdWxkIG5vdCBiZWdpbiB3aXRoIGByZWZzL2hlYWRzYCwgYHJlZnMvdGFnc2AsIG9yCitgcmVmcy9yZW1vdGVzYCB3aGVuIGFwcGxpZWQgdG8gYC0tYnJhbmNoZXNgLCBgLS10YWdzYCwgb3IgYC0tcmVtb3Rlc2AsCityZXNwZWN0aXZlbHksIGFuZCB0aGV5IG11c3QgYmVnaW4gd2l0aCBgcmVmcy9gIHdoZW4gYXBwbGllZCB0byBgLS1nbG9iYAorb3IgYC0tYWxsYC4gSWYgYSB0cmFpbGluZyAnL3thc3Rlcmlza30nIGlzIGludGVuZGVkLCBpdCBtdXN0IGJlIGdpdmVuCitleHBsaWNpdGx5LgorCistLXJlZmxvZzo6CisJUHJldGVuZCBhcyBpZiBhbGwgb2JqZWN0cyBtZW50aW9uZWQgYnkgcmVmbG9ncyBhcmUgbGlzdGVkIG9uIHRoZQorCWNvbW1hbmQgbGluZSBhcyBgPGNvbW1pdD5gLgorCistLWFsdGVybmF0ZS1yZWZzOjoKKwlQcmV0ZW5kIGFzIGlmIGFsbCBvYmplY3RzIG1lbnRpb25lZCBhcyByZWYgdGlwcyBvZiBhbHRlcm5hdGUKKwlyZXBvc2l0b3JpZXMgd2VyZSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gQW4gYWx0ZXJuYXRlCisJcmVwb3NpdG9yeSBpcyBhbnkgcmVwb3NpdG9yeSB3aG9zZSBvYmplY3QgZGlyZWN0b3J5IGlzIHNwZWNpZmllZAorCWluIGBvYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AuICBUaGUgc2V0IG9mIGluY2x1ZGVkIG9iamVjdHMgbWF5CisJYmUgbW9kaWZpZWQgYnkgYGNvcmUuYWx0ZXJuYXRlUmVmc0NvbW1hbmRgLCBldGMuIFNlZQorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1zaW5nbGUtd29ya3RyZWU6OgorCUJ5IGRlZmF1bHQsIGFsbCB3b3JraW5nIHRyZWVzIHdpbGwgYmUgZXhhbWluZWQgYnkgdGhlCisJZm9sbG93aW5nIG9wdGlvbnMgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSAoc2VlCisJbGlua2dpdDpnaXQtd29ya3RyZWVbMV0pOiBgLS1hbGxgLCBgLS1yZWZsb2dgIGFuZAorCWAtLWluZGV4ZWQtb2JqZWN0c2AuCisJVGhpcyBvcHRpb24gZm9yY2VzIHRoZW0gdG8gZXhhbWluZSB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUKKwlvbmx5LgorCistLWlnbm9yZS1taXNzaW5nOjoKKwlVcG9uIHNlZWluZyBhbiBpbnZhbGlkIG9iamVjdCBuYW1lIGluIHRoZSBpbnB1dCwgcHJldGVuZCBhcyBpZgorCXRoZSBiYWQgaW5wdXQgd2FzIG5vdCBnaXZlbi4KKworaWZuZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1iaXNlY3Q6OgorCVByZXRlbmQgYXMgaWYgdGhlIGJhZCBiaXNlY3Rpb24gcmVmIGByZWZzL2Jpc2VjdC9iYWRgCisJd2FzIGxpc3RlZCBhbmQgYXMgaWYgaXQgd2FzIGZvbGxvd2VkIGJ5IGAtLW5vdGAgYW5kIHRoZSBnb29kCisJYmlzZWN0aW9uIHJlZnMgYHJlZnMvYmlzZWN0L2dvb2QtKmAgb24gdGhlIGNvbW1hbmQKKwlsaW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtLWZpcnN0LXBhcmVudC4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLXN0ZGluOjoKKwlJbiBhZGRpdGlvbiB0byB0aGUgJzxjb21taXQ+JyBsaXN0ZWQgb24gdGhlIGNvbW1hbmQKKwlsaW5lLCByZWFkIHRoZW0gZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuIElmIGEgYC0tYCBzZXBhcmF0b3IgaXMKKwlzZWVuLCBzdG9wIHJlYWRpbmcgY29tbWl0cyBhbmQgc3RhcnQgcmVhZGluZyBwYXRocyB0byBsaW1pdCB0aGUKKwlyZXN1bHQuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1xdWlldDo6CisJRG9uJ3QgcHJpbnQgYW55dGhpbmcgdG8gc3RhbmRhcmQgb3V0cHV0LiAgVGhpcyBmb3JtCisJaXMgcHJpbWFyaWx5IG1lYW50IHRvIGFsbG93IHRoZSBjYWxsZXIgdG8KKwl0ZXN0IHRoZSBleGl0IHN0YXR1cyB0byBzZWUgaWYgYSByYW5nZSBvZiBvYmplY3RzIGlzIGZ1bGx5CisJY29ubmVjdGVkIChvciBub3QpLiAgSXQgaXMgZmFzdGVyIHRoYW4gcmVkaXJlY3Rpbmcgc3Rkb3V0CisJdG8gYC9kZXYvbnVsbGAgYXMgdGhlIG91dHB1dCBkb2VzIG5vdCBoYXZlIHRvIGJlIGZvcm1hdHRlZC4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLWNoZXJyeS1tYXJrOjoKKwlMaWtlIGAtLWNoZXJyeS1waWNrYCAoc2VlIGJlbG93KSBidXQgbWFyayBlcXVpdmFsZW50IGNvbW1pdHMKKwl3aXRoIGA9YCByYXRoZXIgdGhhbiBvbWl0dGluZyB0aGVtLCBhbmQgaW5lcXVpdmFsZW50IG9uZXMgd2l0aCBgK2AuCisKKy0tY2hlcnJ5LXBpY2s6OgorCU9taXQgYW55IGNvbW1pdCB0aGF0IGludHJvZHVjZXMgdGhlIHNhbWUgY2hhbmdlIGFzCisJYW5vdGhlciBjb21taXQgb24gdGhlIGBgb3RoZXIgc2lkZScnIHdoZW4gdGhlIHNldCBvZgorCWNvbW1pdHMgYXJlIGxpbWl0ZWQgd2l0aCBzeW1tZXRyaWMgZGlmZmVyZW5jZS4KKysKK0ZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gYnJhbmNoZXMsIGBBYCBhbmQgYEJgLCBhIHVzdWFsIHdheQordG8gbGlzdCBhbGwgY29tbWl0cyBvbiBvbmx5IG9uZSBzaWRlIG9mIHRoZW0gaXMgd2l0aAorYC0tbGVmdC1yaWdodGAgKHNlZSB0aGUgZXhhbXBsZSBiZWxvdyBpbiB0aGUgZGVzY3JpcHRpb24gb2YKK3RoZSBgLS1sZWZ0LXJpZ2h0YCBvcHRpb24pLiBIb3dldmVyLCBpdCBzaG93cyB0aGUgY29tbWl0cyB0aGF0IHdlcmUKK2NoZXJyeS1waWNrZWQgZnJvbSB0aGUgb3RoZXIgYnJhbmNoIChmb3IgZXhhbXBsZSwgYGAzcmQgb24gYicnIG1heSBiZQorY2hlcnJ5LXBpY2tlZCBmcm9tIGJyYW5jaCBBKS4gV2l0aCB0aGlzIG9wdGlvbiwgc3VjaCBwYWlycyBvZiBjb21taXRzIGFyZQorZXhjbHVkZWQgZnJvbSB0aGUgb3V0cHV0LgorCistLWxlZnQtb25seTo6CistLXJpZ2h0LW9ubHk6OgorCUxpc3Qgb25seSBjb21taXRzIG9uIHRoZSByZXNwZWN0aXZlIHNpZGUgb2YgYSBzeW1tZXRyaWMgZGlmZmVyZW5jZSwKKwlpLmUuIG9ubHkgdGhvc2Ugd2hpY2ggd291bGQgYmUgbWFya2VkIGA8YCByZXNwLiBgPmAgYnkKKwlgLS1sZWZ0LXJpZ2h0YC4KKysKK0ZvciBleGFtcGxlLCBgLS1jaGVycnktcGljayAtLXJpZ2h0LW9ubHkgQS4uLkJgIG9taXRzIHRob3NlCitjb21taXRzIGZyb20gYEJgIHdoaWNoIGFyZSBpbiBgQWAgb3IgYXJlIHBhdGNoLWVxdWl2YWxlbnQgdG8gYSBjb21taXQgaW4KK2BBYC4gSW4gb3RoZXIgd29yZHMsIHRoaXMgbGlzdHMgdGhlIGArYCBjb21taXRzIGZyb20gYGdpdCBjaGVycnkgQSBCYC4KK01vcmUgcHJlY2lzZWx5LCBgLS1jaGVycnktcGljayAtLXJpZ2h0LW9ubHkgLS1uby1tZXJnZXNgIGdpdmVzIHRoZSBleGFjdAorbGlzdC4KKworLS1jaGVycnk6OgorCUEgc3lub255bSBmb3IgYC0tcmlnaHQtb25seSAtLWNoZXJyeS1tYXJrIC0tbm8tbWVyZ2VzYDsgdXNlZnVsIHRvCisJbGltaXQgdGhlIG91dHB1dCB0byB0aGUgY29tbWl0cyBvbiBvdXIgc2lkZSBhbmQgbWFyayB0aG9zZSB0aGF0CisJaGF2ZSBiZWVuIGFwcGxpZWQgdG8gdGhlIG90aGVyIHNpZGUgb2YgYSBmb3JrZWQgaGlzdG9yeSB3aXRoCisJYGdpdCBsb2cgLS1jaGVycnkgdXBzdHJlYW0uLi5teWJyYW5jaGAsIHNpbWlsYXIgdG8KKwlgZ2l0IGNoZXJyeSB1cHN0cmVhbSBteWJyYW5jaGAuCisKKy1nOjoKKy0td2Fsay1yZWZsb2dzOjoKKwlJbnN0ZWFkIG9mIHdhbGtpbmcgdGhlIGNvbW1pdCBhbmNlc3RyeSBjaGFpbiwgd2FsaworCXJlZmxvZyBlbnRyaWVzIGZyb20gdGhlIG1vc3QgcmVjZW50IG9uZSB0byBvbGRlciBvbmVzLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCB5b3UgY2Fubm90IHNwZWNpZnkgY29tbWl0cyB0bworCWV4Y2x1ZGUgKHRoYXQgaXMsICd7Y2FyZXR9Y29tbWl0JywgJ2NvbW1pdDEuLmNvbW1pdDInLAorCWFuZCAnY29tbWl0MVwuLi5jb21taXQyJyBub3RhdGlvbnMgY2Fubm90IGJlIHVzZWQpLgorKworV2l0aCBgLS1wcmV0dHlgIGZvcm1hdCBvdGhlciB0aGFuIGBvbmVsaW5lYCBhbmQgYHJlZmVyZW5jZWAgKGZvciBvYnZpb3VzIHJlYXNvbnMpLAordGhpcyBjYXVzZXMgdGhlIG91dHB1dCB0byBoYXZlIHR3byBleHRyYSBsaW5lcyBvZiBpbmZvcm1hdGlvbgordGFrZW4gZnJvbSB0aGUgcmVmbG9nLiAgVGhlIHJlZmxvZyBkZXNpZ25hdG9yIGluIHRoZSBvdXRwdXQgbWF5IGJlIHNob3duCithcyBgcmVmQHtOdGh9YCAod2hlcmUgYE50aGAgaXMgdGhlIHJldmVyc2UtY2hyb25vbG9naWNhbCBpbmRleCBpbiB0aGUKK3JlZmxvZykgb3IgYXMgYHJlZkB7dGltZXN0YW1wfWAgKHdpdGggdGhlIHRpbWVzdGFtcCBmb3IgdGhhdCBlbnRyeSksCitkZXBlbmRpbmcgb24gYSBmZXcgcnVsZXM6CisrCistLQorMS4gSWYgdGhlIHN0YXJ0aW5nIHBvaW50IGlzIHNwZWNpZmllZCBhcyBgcmVmQHtOdGh9YCwgc2hvdyB0aGUgaW5kZXgKKyAgIGZvcm1hdC4KKysKKzIuIElmIHRoZSBzdGFydGluZyBwb2ludCB3YXMgc3BlY2lmaWVkIGFzIGByZWZAe25vd31gLCBzaG93IHRoZQorICAgdGltZXN0YW1wIGZvcm1hdC4KKysKKzMuIElmIG5laXRoZXIgd2FzIHVzZWQsIGJ1dCBgLS1kYXRlYCB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgc2hvdworICAgdGhlIHRpbWVzdGFtcCBpbiB0aGUgZm9ybWF0IHJlcXVlc3RlZCBieSBgLS1kYXRlYC4KKysKKzQuIE90aGVyd2lzZSwgc2hvdyB0aGUgaW5kZXggZm9ybWF0LgorLS0KKysKK1VuZGVyIGAtLXByZXR0eT1vbmVsaW5lYCwgdGhlIGNvbW1pdCBtZXNzYWdlIGlzCitwcmVmaXhlZCB3aXRoIHRoaXMgaW5mb3JtYXRpb24gb24gdGhlIHNhbWUgbGluZS4KK1RoaXMgb3B0aW9uIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLXJldmVyc2VgLgorU2VlIGFsc28gbGlua2dpdDpnaXQtcmVmbG9nWzFdLgorKworVW5kZXIgYC0tcHJldHR5PXJlZmVyZW5jZWAsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgc2hvd24gYXQgYWxsLgorCistLW1lcmdlOjoKKwlBZnRlciBhIGZhaWxlZCBtZXJnZSwgc2hvdyByZWZzIHRoYXQgdG91Y2ggZmlsZXMgaGF2aW5nIGEKKwljb25mbGljdCBhbmQgZG9uJ3QgZXhpc3Qgb24gYWxsIGhlYWRzIHRvIG1lcmdlLgorCistLWJvdW5kYXJ5OjoKKwlPdXRwdXQgZXhjbHVkZWQgYm91bmRhcnkgY29tbWl0cy4gQm91bmRhcnkgY29tbWl0cyBhcmUKKwlwcmVmaXhlZCB3aXRoIGAtYC4KKworaWZkZWY6OmdpdC1yZXYtbGlzdFtdCistLXVzZS1iaXRtYXAtaW5kZXg6OgorCisJVHJ5IHRvIHNwZWVkIHVwIHRoZSB0cmF2ZXJzYWwgdXNpbmcgdGhlIHBhY2sgYml0bWFwIGluZGV4IChpZgorCW9uZSBpcyBhdmFpbGFibGUpLiBOb3RlIHRoYXQgd2hlbiB0cmF2ZXJzaW5nIHdpdGggYC0tb2JqZWN0c2AsCisJdHJlZXMgYW5kIGJsb2JzIHdpbGwgbm90IGhhdmUgdGhlaXIgYXNzb2NpYXRlZCBwYXRoIHByaW50ZWQuCisKKy0tcHJvZ3Jlc3M9PGhlYWRlcj46OgorCVNob3cgcHJvZ3Jlc3MgcmVwb3J0cyBvbiBzdGRlcnIgYXMgb2JqZWN0cyBhcmUgY29uc2lkZXJlZC4gVGhlCisJYDxoZWFkZXI+YCB0ZXh0IHdpbGwgYmUgcHJpbnRlZCB3aXRoIGVhY2ggcHJvZ3Jlc3MgdXBkYXRlLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKK0hpc3RvcnkgU2ltcGxpZmljYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU29tZXRpbWVzIHlvdSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHBhcnRzIG9mIHRoZSBoaXN0b3J5LCBmb3IgZXhhbXBsZSB0aGUKK2NvbW1pdHMgbW9kaWZ5aW5nIGEgcGFydGljdWxhciA8cGF0aD4uIEJ1dCB0aGVyZSBhcmUgdHdvIHBhcnRzIG9mCisnSGlzdG9yeSBTaW1wbGlmaWNhdGlvbicsIG9uZSBwYXJ0IGlzIHNlbGVjdGluZyB0aGUgY29tbWl0cyBhbmQgdGhlIG90aGVyCitpcyBob3cgdG8gZG8gaXQsIGFzIHRoZXJlIGFyZSB2YXJpb3VzIHN0cmF0ZWdpZXMgdG8gc2ltcGxpZnkgdGhlIGhpc3RvcnkuCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBzZWxlY3QgdGhlIGNvbW1pdHMgdG8gYmUgc2hvd246CisKKzxwYXRocz46OgorCUNvbW1pdHMgbW9kaWZ5aW5nIHRoZSBnaXZlbiA8cGF0aHM+IGFyZSBzZWxlY3RlZC4KKworLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uOjoKKwlDb21taXRzIHRoYXQgYXJlIHJlZmVycmVkIGJ5IHNvbWUgYnJhbmNoIG9yIHRhZyBhcmUgc2VsZWN0ZWQuCisKK05vdGUgdGhhdCBleHRyYSBjb21taXRzIGNhbiBiZSBzaG93biB0byBnaXZlIGEgbWVhbmluZ2Z1bCBoaXN0b3J5LgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYWZmZWN0IHRoZSB3YXkgdGhlIHNpbXBsaWZpY2F0aW9uIGlzIHBlcmZvcm1lZDoKKworRGVmYXVsdCBtb2RlOjoKKwlTaW1wbGlmaWVzIHRoZSBoaXN0b3J5IHRvIHRoZSBzaW1wbGVzdCBoaXN0b3J5IGV4cGxhaW5pbmcgdGhlCisJZmluYWwgc3RhdGUgb2YgdGhlIHRyZWUuIFNpbXBsZXN0IGJlY2F1c2UgaXQgcHJ1bmVzIHNvbWUgc2lkZQorCWJyYW5jaGVzIGlmIHRoZSBlbmQgcmVzdWx0IGlzIHRoZSBzYW1lIChpLmUuIG1lcmdpbmcgYnJhbmNoZXMKKwl3aXRoIHRoZSBzYW1lIGNvbnRlbnQpCisKKy0tZnVsbC1oaXN0b3J5OjoKKwlTYW1lIGFzIHRoZSBkZWZhdWx0IG1vZGUsIGJ1dCBkb2VzIG5vdCBwcnVuZSBzb21lIGhpc3RvcnkuCisKKy0tZGVuc2U6OgorCU9ubHkgdGhlIHNlbGVjdGVkIGNvbW1pdHMgYXJlIHNob3duLCBwbHVzIHNvbWUgdG8gaGF2ZSBhCisJbWVhbmluZ2Z1bCBoaXN0b3J5LgorCistLXNwYXJzZTo6CisJQWxsIGNvbW1pdHMgaW4gdGhlIHNpbXBsaWZpZWQgaGlzdG9yeSBhcmUgc2hvd24uCisKKy0tc2ltcGxpZnktbWVyZ2VzOjoKKwlBZGRpdGlvbmFsIG9wdGlvbiB0byBgLS1mdWxsLWhpc3RvcnlgIHRvIHJlbW92ZSBzb21lIG5lZWRsZXNzCisJbWVyZ2VzIGZyb20gdGhlIHJlc3VsdGluZyBoaXN0b3J5LCBhcyB0aGVyZSBhcmUgbm8gc2VsZWN0ZWQKKwljb21taXRzIGNvbnRyaWJ1dGluZyB0byB0aGlzIG1lcmdlLgorCistLWFuY2VzdHJ5LXBhdGg6OgorCVdoZW4gZ2l2ZW4gYSByYW5nZSBvZiBjb21taXRzIHRvIGRpc3BsYXkgKGUuZy4gJ2NvbW1pdDEuLmNvbW1pdDInCisJb3IgJ2NvbW1pdDIge2NhcmV0fWNvbW1pdDEnKSwgb25seSBkaXNwbGF5IGNvbW1pdHMgdGhhdCBleGlzdAorCWRpcmVjdGx5IG9uIHRoZSBhbmNlc3RyeSBjaGFpbiBiZXR3ZWVuIHRoZSAnY29tbWl0MScgYW5kCisJJ2NvbW1pdDInLCBpLmUuIGNvbW1pdHMgdGhhdCBhcmUgYm90aCBkZXNjZW5kYW50cyBvZiAnY29tbWl0MScsCisJYW5kIGFuY2VzdG9ycyBvZiAnY29tbWl0MicuCisKK0EgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbiBmb2xsb3dzLgorCitTdXBwb3NlIHlvdSBzcGVjaWZpZWQgYGZvb2AgYXMgdGhlIDxwYXRocz4uICBXZSBzaGFsbCBjYWxsIGNvbW1pdHMKK3RoYXQgbW9kaWZ5IGBmb29gICFUUkVFU0FNRSwgYW5kIHRoZSByZXN0IFRSRUVTQU1FLiAgKEluIGEgZGlmZgorZmlsdGVyZWQgZm9yIGBmb29gLCB0aGV5IGxvb2sgZGlmZmVyZW50IGFuZCBlcXVhbCwgcmVzcGVjdGl2ZWx5LikKKworSW4gdGhlIGZvbGxvd2luZywgd2Ugd2lsbCBhbHdheXMgcmVmZXIgdG8gdGhlIHNhbWUgZXhhbXBsZSBoaXN0b3J5IHRvCitpbGx1c3RyYXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHNpbXBsaWZpY2F0aW9uIHNldHRpbmdzLiAgV2UgYXNzdW1lCit0aGF0IHlvdSBhcmUgZmlsdGVyaW5nIGZvciBhIGZpbGUgYGZvb2AgaW4gdGhpcyBjb21taXQgZ3JhcGg6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgLi1BLS0tTS0tLU4tLS1PLS0tUC0tLVEKKwkgLyAgICAgLyAgIC8gICAvICAgLyAgIC8KKwlJICAgICBCICAgQyAgIEQgICBFICAgWQorCSBcICAgLyAgIC8gICAvICAgLyAgIC8KKwkgIGAtLS0tLS0tLS0tLS0tJyAgIFgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgaG9yaXpvbnRhbCBsaW5lIG9mIGhpc3RvcnkgQS0tLVEgaXMgdGFrZW4gdG8gYmUgdGhlIGZpcnN0IHBhcmVudCBvZgorZWFjaCBtZXJnZS4gIFRoZSBjb21taXRzIGFyZToKKworKiBgSWAgaXMgdGhlIGluaXRpYWwgY29tbWl0LCBpbiB3aGljaCBgZm9vYCBleGlzdHMgd2l0aCBjb250ZW50cworICBgYGFzZGYnJywgYW5kIGEgZmlsZSBgcXV1eGAgZXhpc3RzIHdpdGggY29udGVudHMgYGBxdXV4JycuIEluaXRpYWwKKyAgY29tbWl0cyBhcmUgY29tcGFyZWQgdG8gYW4gZW1wdHkgdHJlZSwgc28gYElgIGlzICFUUkVFU0FNRS4KKworKiBJbiBgQWAsIGBmb29gIGNvbnRhaW5zIGp1c3QgYGBmb28nJy4KKworKiBgQmAgY29udGFpbnMgdGhlIHNhbWUgY2hhbmdlIGFzIGBBYC4gIEl0cyBtZXJnZSBgTWAgaXMgdHJpdmlhbCBhbmQKKyAgaGVuY2UgVFJFRVNBTUUgdG8gYWxsIHBhcmVudHMuCisKKyogYENgIGRvZXMgbm90IGNoYW5nZSBgZm9vYCwgYnV0IGl0cyBtZXJnZSBgTmAgY2hhbmdlcyBpdCB0byBgYGZvb2JhcicnLAorICBzbyBpdCBpcyBub3QgVFJFRVNBTUUgdG8gYW55IHBhcmVudC4KKworKiBgRGAgc2V0cyBgZm9vYCB0byBgYGJheicnLiBJdHMgbWVyZ2UgYE9gIGNvbWJpbmVzIHRoZSBzdHJpbmdzIGZyb20KKyAgYE5gIGFuZCBgRGAgdG8gYGBmb29iYXJiYXonJzsgaS5lLiwgaXQgaXMgbm90IFRSRUVTQU1FIHRvIGFueSBwYXJlbnQuCisKKyogYEVgIGNoYW5nZXMgYHF1dXhgIHRvIGBgeHl6enknJywgYW5kIGl0cyBtZXJnZSBgUGAgY29tYmluZXMgdGhlCisgIHN0cmluZ3MgdG8gYGBxdXV4IHh5enp5JycuIGBQYCBpcyBUUkVFU0FNRSB0byBgT2AsIGJ1dCBub3QgdG8gYEVgLgorCisqIGBYYCBpcyBhbiBpbmRlcGVuZGVudCByb290IGNvbW1pdCB0aGF0IGFkZGVkIGEgbmV3IGZpbGUgYHNpZGVgLCBhbmQgYFlgCisgIG1vZGlmaWVkIGl0LiBgWWAgaXMgVFJFRVNBTUUgdG8gYFhgLiBJdHMgbWVyZ2UgYFFgIGFkZGVkIGBzaWRlYCB0byBgUGAsIGFuZAorICBgUWAgaXMgVFJFRVNBTUUgdG8gYFBgLCBidXQgbm90IHRvIGBZYC4KKworYHJldi1saXN0YCB3YWxrcyBiYWNrd2FyZHMgdGhyb3VnaCBoaXN0b3J5LCBpbmNsdWRpbmcgb3IgZXhjbHVkaW5nCitjb21taXRzIGJhc2VkIG9uIHdoZXRoZXIgYC0tZnVsbC1oaXN0b3J5YCBhbmQvb3IgcGFyZW50IHJld3JpdGluZworKHZpYSBgLS1wYXJlbnRzYCBvciBgLS1jaGlsZHJlbmApIGFyZSB1c2VkLiBUaGUgZm9sbG93aW5nIHNldHRpbmdzCithcmUgYXZhaWxhYmxlLgorCitEZWZhdWx0IG1vZGU6OgorCUNvbW1pdHMgYXJlIGluY2x1ZGVkIGlmIHRoZXkgYXJlIG5vdCBUUkVFU0FNRSB0byBhbnkgcGFyZW50CisJKHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLCBzZWUgYC0tc3BhcnNlYCBiZWxvdykuICBJZiB0aGUKKwljb21taXQgd2FzIGEgbWVyZ2UsIGFuZCBpdCB3YXMgVFJFRVNBTUUgdG8gb25lIHBhcmVudCwgZm9sbG93CisJb25seSB0aGF0IHBhcmVudC4gIChFdmVuIGlmIHRoZXJlIGFyZSBzZXZlcmFsIFRSRUVTQU1FCisJcGFyZW50cywgZm9sbG93IG9ubHkgb25lIG9mIHRoZW0uKSAgT3RoZXJ3aXNlLCBmb2xsb3cgYWxsCisJcGFyZW50cy4KKysKK1RoaXMgcmVzdWx0cyBpbjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAuLUEtLS1OLS0tTworCSAvICAgICAvICAgLworCUktLS0tLS0tLS1ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm90ZSBob3cgdGhlIHJ1bGUgdG8gb25seSBmb2xsb3cgdGhlIFRSRUVTQU1FIHBhcmVudCwgaWYgb25lIGlzCithdmFpbGFibGUsIHJlbW92ZWQgYEJgIGZyb20gY29uc2lkZXJhdGlvbiBlbnRpcmVseS4gIGBDYCB3YXMKK2NvbnNpZGVyZWQgdmlhIGBOYCwgYnV0IGlzIFRSRUVTQU1FLiAgUm9vdCBjb21taXRzIGFyZSBjb21wYXJlZCB0byBhbgorZW1wdHkgdHJlZSwgc28gYElgIGlzICFUUkVFU0FNRS4KKysKK1BhcmVudC9jaGlsZCByZWxhdGlvbnMgYXJlIG9ubHkgdmlzaWJsZSB3aXRoIGAtLXBhcmVudHNgLCBidXQgdGhhdCBkb2VzCitub3QgYWZmZWN0IHRoZSBjb21taXRzIHNlbGVjdGVkIGluIGRlZmF1bHQgbW9kZSwgc28gd2UgaGF2ZSBzaG93biB0aGUKK3BhcmVudCBsaW5lcy4KKworLS1mdWxsLWhpc3Rvcnkgd2l0aG91dCBwYXJlbnQgcmV3cml0aW5nOjoKKwlUaGlzIG1vZGUgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0IGluIG9uZSBwb2ludDogYWx3YXlzIGZvbGxvdworCWFsbCBwYXJlbnRzIG9mIGEgbWVyZ2UsIGV2ZW4gaWYgaXQgaXMgVFJFRVNBTUUgdG8gb25lIG9mIHRoZW0uCisJRXZlbiBpZiBtb3JlIHRoYW4gb25lIHNpZGUgb2YgdGhlIG1lcmdlIGhhcyBjb21taXRzIHRoYXQgYXJlCisJaW5jbHVkZWQsIHRoaXMgZG9lcyBub3QgaW1wbHkgdGhhdCB0aGUgbWVyZ2UgaXRzZWxmIGlzISAgSW4KKwl0aGUgZXhhbXBsZSwgd2UgZ2V0CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUkgIEEgIEIgIE4gIEQgIE8gIFAgIFEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitgTWAgd2FzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgaXMgVFJFRVNBTUUgdG8gYm90aCBwYXJlbnRzLiAgYEVgLAorYENgIGFuZCBgQmAgd2VyZSBhbGwgd2Fsa2VkLCBidXQgb25seSBgQmAgd2FzICFUUkVFU0FNRSwgc28gdGhlIG90aGVycworZG8gbm90IGFwcGVhci4KKysKK05vdGUgdGhhdCB3aXRob3V0IHBhcmVudCByZXdyaXRpbmcsIGl0IGlzIG5vdCByZWFsbHkgcG9zc2libGUgdG8gdGFsaworYWJvdXQgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGNvbW1pdHMsIHNvIHdlIHNob3cKK3RoZW0gZGlzY29ubmVjdGVkLgorCistLWZ1bGwtaGlzdG9yeSB3aXRoIHBhcmVudCByZXdyaXRpbmc6OgorCU9yZGluYXJ5IGNvbW1pdHMgYXJlIG9ubHkgaW5jbHVkZWQgaWYgdGhleSBhcmUgIVRSRUVTQU1FCisJKHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLCBzZWUgYC0tc3BhcnNlYCBiZWxvdykuCisrCitNZXJnZXMgYXJlIGFsd2F5cyBpbmNsdWRlZC4gIEhvd2V2ZXIsIHRoZWlyIHBhcmVudCBsaXN0IGlzIHJld3JpdHRlbjoKK0Fsb25nIGVhY2ggcGFyZW50LCBwcnVuZSBhd2F5IGNvbW1pdHMgdGhhdCBhcmUgbm90IGluY2x1ZGVkCit0aGVtc2VsdmVzLiAgVGhpcyByZXN1bHRzIGluCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgLi1BLS0tTS0tLU4tLS1PLS0tUC0tLVEKKwkgLyAgICAgLyAgIC8gICAvICAgLworCUkgICAgIEIgICAvICAgRCAgIC8KKwkgXCAgIC8gICAvICAgLyAgIC8KKwkgIGAtLS0tLS0tLS0tLS0tJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0NvbXBhcmUgdG8gYC0tZnVsbC1oaXN0b3J5YCB3aXRob3V0IHJld3JpdGluZyBhYm92ZS4gIE5vdGUgdGhhdCBgRWAKK3dhcyBwcnVuZWQgYXdheSBiZWNhdXNlIGl0IGlzIFRSRUVTQU1FLCBidXQgdGhlIHBhcmVudCBsaXN0IG9mIFAgd2FzCityZXdyaXR0ZW4gdG8gY29udGFpbiBgRWAncyBwYXJlbnQgYElgLiAgVGhlIHNhbWUgaGFwcGVuZWQgZm9yIGBDYCBhbmQKK2BOYCwgYW5kIGBYYCwgYFlgIGFuZCBgUWAuCisKK0luIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBzZXR0aW5ncywgeW91IGNhbiBjaGFuZ2Ugd2hldGhlciBUUkVFU0FNRQorYWZmZWN0cyBpbmNsdXNpb246CisKKy0tZGVuc2U6OgorCUNvbW1pdHMgdGhhdCBhcmUgd2Fsa2VkIGFyZSBpbmNsdWRlZCBpZiB0aGV5IGFyZSBub3QgVFJFRVNBTUUKKwl0byBhbnkgcGFyZW50LgorCistLXNwYXJzZTo6CisJQWxsIGNvbW1pdHMgdGhhdCBhcmUgd2Fsa2VkIGFyZSBpbmNsdWRlZC4KKysKK05vdGUgdGhhdCB3aXRob3V0IGAtLWZ1bGwtaGlzdG9yeWAsIHRoaXMgc3RpbGwgc2ltcGxpZmllcyBtZXJnZXM6IGlmCitvbmUgb2YgdGhlIHBhcmVudHMgaXMgVFJFRVNBTUUsIHdlIGZvbGxvdyBvbmx5IHRoYXQgb25lLCBzbyB0aGUgb3RoZXIKK3NpZGVzIG9mIHRoZSBtZXJnZSBhcmUgbmV2ZXIgd2Fsa2VkLgorCistLXNpbXBsaWZ5LW1lcmdlczo6CisJRmlyc3QsIGJ1aWxkIGEgaGlzdG9yeSBncmFwaCBpbiB0aGUgc2FtZSB3YXkgdGhhdAorCWAtLWZ1bGwtaGlzdG9yeWAgd2l0aCBwYXJlbnQgcmV3cml0aW5nIGRvZXMgKHNlZSBhYm92ZSkuCisrCitUaGVuIHNpbXBsaWZ5IGVhY2ggY29tbWl0IGBDYCB0byBpdHMgcmVwbGFjZW1lbnQgYEMnYCBpbiB0aGUgZmluYWwKK2hpc3RvcnkgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisrCistLQorKiBTZXQgYEMnYCB0byBgQ2AuCisrCisqIFJlcGxhY2UgZWFjaCBwYXJlbnQgYFBgIG9mIGBDJ2Agd2l0aCBpdHMgc2ltcGxpZmljYXRpb24gYFAnYC4gIEluCisgIHRoZSBwcm9jZXNzLCBkcm9wIHBhcmVudHMgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIG90aGVyIHBhcmVudHMgb3IgdGhhdCBhcmUKKyAgcm9vdCBjb21taXRzIFRSRUVTQU1FIHRvIGFuIGVtcHR5IHRyZWUsIGFuZCByZW1vdmUgZHVwbGljYXRlcywgYnV0IHRha2UgY2FyZQorICB0byBuZXZlciBkcm9wIGFsbCBwYXJlbnRzIHRoYXQgd2UgYXJlIFRSRUVTQU1FIHRvLgorKworKiBJZiBhZnRlciB0aGlzIHBhcmVudCByZXdyaXRpbmcsIGBDJ2AgaXMgYSByb290IG9yIG1lcmdlIGNvbW1pdCAoaGFzCisgIHplcm8gb3IgPjEgcGFyZW50cyksIGEgYm91bmRhcnkgY29tbWl0LCBvciAhVFJFRVNBTUUsIGl0IHJlbWFpbnMuCisgIE90aGVyd2lzZSwgaXQgaXMgcmVwbGFjZWQgd2l0aCBpdHMgb25seSBwYXJlbnQuCistLQorKworVGhlIGVmZmVjdCBvZiB0aGlzIGlzIGJlc3Qgc2hvd24gYnkgd2F5IG9mIGNvbXBhcmluZyB0bworYC0tZnVsbC1oaXN0b3J5YCB3aXRoIHBhcmVudCByZXdyaXRpbmcuICBUaGUgZXhhbXBsZSB0dXJucyBpbnRvOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIC4tQS0tLU0tLS1OLS0tTworCSAvICAgICAvICAgICAgIC8KKwlJICAgICBCICAgICAgIEQKKwkgXCAgIC8gICAgICAgLworCSAgYC0tLS0tLS0tLScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitOb3RlIHRoZSBtYWpvciBkaWZmZXJlbmNlcyBpbiBgTmAsIGBQYCwgYW5kIGBRYCBvdmVyIGAtLWZ1bGwtaGlzdG9yeWA6CisrCistLQorKiBgTmAncyBwYXJlbnQgbGlzdCBoYWQgYElgIHJlbW92ZWQsIGJlY2F1c2UgaXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlCisgIG90aGVyIHBhcmVudCBgTWAuICBTdGlsbCwgYE5gIHJlbWFpbmVkIGJlY2F1c2UgaXQgaXMgIVRSRUVTQU1FLgorKworKiBgUGAncyBwYXJlbnQgbGlzdCBzaW1pbGFybHkgaGFkIGBJYCByZW1vdmVkLiAgYFBgIHdhcyB0aGVuCisgIHJlbW92ZWQgY29tcGxldGVseSwgYmVjYXVzZSBpdCBoYWQgb25lIHBhcmVudCBhbmQgaXMgVFJFRVNBTUUuCisrCisqIGBRYCdzIHBhcmVudCBsaXN0IGhhZCBgWWAgc2ltcGxpZmllZCB0byBgWGAuIGBYYCB3YXMgdGhlbiByZW1vdmVkLCBiZWNhdXNlIGl0CisgIHdhcyBhIFRSRUVTQU1FIHJvb3QuIGBRYCB3YXMgdGhlbiByZW1vdmVkIGNvbXBsZXRlbHksIGJlY2F1c2UgaXQgaGFkIG9uZQorICBwYXJlbnQgYW5kIGlzIFRSRUVTQU1FLgorLS0KKworRmluYWxseSwgdGhlcmUgaXMgYSBmaWZ0aCBzaW1wbGlmaWNhdGlvbiBtb2RlIGF2YWlsYWJsZToKKworLS1hbmNlc3RyeS1wYXRoOjoKKwlMaW1pdCB0aGUgZGlzcGxheWVkIGNvbW1pdHMgdG8gdGhvc2UgZGlyZWN0bHkgb24gdGhlIGFuY2VzdHJ5CisJY2hhaW4gYmV0d2VlbiB0aGUgYGBmcm9tJycgYW5kIGBgdG8nJyBjb21taXRzIGluIHRoZSBnaXZlbiBjb21taXQKKwlyYW5nZS4gSS5lLiBvbmx5IGRpc3BsYXkgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvciBvZiB0aGUgYGB0bycnCisJY29tbWl0IGFuZCBkZXNjZW5kYW50cyBvZiB0aGUgYGBmcm9tJycgY29tbWl0LgorKworQXMgYW4gZXhhbXBsZSB1c2UgY2FzZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb21taXQgaGlzdG9yeToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgIEQtLS1FLS0tLS0tLUYKKwkgICAvICAgICBcICAgICAgIFwKKwkgIEItLS1DLS0tRy0tLUgtLS1JLS0tSgorCSAvICAgICAgICAgICAgICAgICAgICAgXAorCUEtLS0tLS0tSy0tLS0tLS0tLS0tLS0tLUwtLU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitBIHJlZ3VsYXIgJ0QuLk0nIGNvbXB1dGVzIHRoZSBzZXQgb2YgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgYE1gLAorYnV0IGV4Y2x1ZGVzIHRoZSBvbmVzIHRoYXQgYXJlIGFuY2VzdG9ycyBvZiBgRGAuIFRoaXMgaXMgdXNlZnVsIHRvIHNlZQord2hhdCBoYXBwZW5lZCB0byB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIGBNYCBzaW5jZSBgRGAsIGluIHRoZSBzZW5zZQordGhhdCBgYHdoYXQgZG9lcyBgTWAgaGF2ZSB0aGF0IGRpZCBub3QgZXhpc3QgaW4gYERgJycuIFRoZSByZXN1bHQgaW4gdGhpcworZXhhbXBsZSB3b3VsZCBiZSBhbGwgdGhlIGNvbW1pdHMsIGV4Y2VwdCBgQWAgYW5kIGBCYCAoYW5kIGBEYCBpdHNlbGYsCitvZiBjb3Vyc2UpLgorKworV2hlbiB3ZSB3YW50IHRvIGZpbmQgb3V0IHdoYXQgY29tbWl0cyBpbiBgTWAgYXJlIGNvbnRhbWluYXRlZCB3aXRoIHRoZQorYnVnIGludHJvZHVjZWQgYnkgYERgIGFuZCBuZWVkIGZpeGluZywgaG93ZXZlciwgd2UgbWlnaHQgd2FudCB0byB2aWV3Citvbmx5IHRoZSBzdWJzZXQgb2YgJ0QuLk0nIHRoYXQgYXJlIGFjdHVhbGx5IGRlc2NlbmRhbnRzIG9mIGBEYCwgaS5lLgorZXhjbHVkaW5nIGBDYCBhbmQgYEtgLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCB0aGUgYC0tYW5jZXN0cnktcGF0aGAKK29wdGlvbiBkb2VzLiBBcHBsaWVkIHRvIHRoZSAnRC4uTScgcmFuZ2UsIGl0IHJlc3VsdHMgaW46CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlFLS0tLS0tLUYKKwkJIFwgICAgICAgXAorCQkgIEctLS1ILS0tSS0tLUoKKwkJCSAgICAgICBcCisJCQkJTC0tTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb25gIG9wdGlvbiBhbGxvd3MgeW91IHRvIHZpZXcgb25seSB0aGUKK2JpZyBwaWN0dXJlIG9mIHRoZSB0b3BvbG9neSBvZiB0aGUgaGlzdG9yeSwgYnkgb21pdHRpbmcgY29tbWl0cwordGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgdGFncy4gIENvbW1pdHMgYXJlIG1hcmtlZCBhcyAhVFJFRVNBTUUKKyhpbiBvdGhlciB3b3Jkcywga2VwdCBhZnRlciBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIHJ1bGVzIGRlc2NyaWJlZAorYWJvdmUpIGlmICgxKSB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHRhZ3MsIG9yICgyKSB0aGV5IGNoYW5nZSB0aGUKK2NvbnRlbnRzIG9mIHRoZSBwYXRocyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgQWxsIG90aGVyCitjb21taXRzIGFyZSBtYXJrZWQgYXMgVFJFRVNBTUUgKHN1YmplY3QgdG8gYmUgc2ltcGxpZmllZCBhd2F5KS4KKworaWZuZGVmOjpnaXQtc2hvcnRsb2dbXQoraWZkZWY6OmdpdC1yZXYtbGlzdFtdCitCaXNlY3Rpb24gSGVscGVycworfn5+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+fgorCitMaXN0ZWQgYmVsb3cgYXJlIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBmb3JtYXR0aW5nIG9mIGRpZmYgb3V0cHV0LgorU29tZSBvZiB0aGVtIGFyZSBzcGVjaWZpYyB0byBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSwgaG93ZXZlciBvdGhlciBkaWZmCitvcHRpb25zIG1heSBiZSBnaXZlbi4gU2VlIGxpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0gZm9yIG1vcmUgb3B0aW9ucy4KKworLWM6OgorCVdpdGggdGhpcyBvcHRpb24sIGRpZmYgb3V0cHV0IGZvciBhIG1lcmdlIGNvbW1pdAorCXNob3dzIHRoZSBkaWZmZXJlbmNlcyBmcm9tIGVhY2ggb2YgdGhlIHBhcmVudHMgdG8gdGhlIG1lcmdlIHJlc3VsdAorCXNpbXVsdGFuZW91c2x5IGluc3RlYWQgb2Ygc2hvd2luZyBwYWlyd2lzZSBkaWZmIGJldHdlZW4gYSBwYXJlbnQKKwlhbmQgdGhlIHJlc3VsdCBvbmUgYXQgYSB0aW1lLiBGdXJ0aGVybW9yZSwgaXQgbGlzdHMgb25seSBmaWxlcworCXdoaWNoIHdlcmUgbW9kaWZpZWQgZnJvbSBhbGwgcGFyZW50cy4KKworLS1jYzo6CisJVGhpcyBmbGFnIGltcGxpZXMgdGhlIGAtY2Agb3B0aW9uIGFuZCBmdXJ0aGVyIGNvbXByZXNzZXMgdGhlCisJcGF0Y2ggb3V0cHV0IGJ5IG9taXR0aW5nIHVuaW50ZXJlc3RpbmcgaHVua3Mgd2hvc2UgY29udGVudHMgaW4KKwl0aGUgcGFyZW50cyBoYXZlIG9ubHkgdHdvIHZhcmlhbnRzIGFuZCB0aGUgbWVyZ2UgcmVzdWx0IHBpY2tzCisJb25lIG9mIHRoZW0gd2l0aG91dCBtb2RpZmljYXRpb24uCisKKy0tY29tYmluZWQtYWxsLXBhdGhzOjoKKwlUaGlzIGZsYWcgY2F1c2VzIGNvbWJpbmVkIGRpZmZzICh1c2VkIGZvciBtZXJnZSBjb21taXRzKSB0bworCWxpc3QgdGhlIG5hbWUgb2YgdGhlIGZpbGUgZnJvbSBhbGwgcGFyZW50cy4gIEl0IHRodXMgb25seSBoYXMKKwllZmZlY3Qgd2hlbiAtYyBvciAtLWNjIGFyZSBzcGVjaWZpZWQsIGFuZCBpcyBsaWtlbHkgb25seQorCXVzZWZ1bCBpZiBmaWxlbmFtZSBjaGFuZ2VzIGFyZSBkZXRlY3RlZCAoaS5lLiB3aGVuIGVpdGhlcgorCXJlbmFtZSBvciBjb3B5IGRldGVjdGlvbiBoYXZlIGJlZW4gcmVxdWVzdGVkKS4KKworLW06OgorCVRoaXMgZmxhZyBtYWtlcyB0aGUgbWVyZ2UgY29tbWl0cyBzaG93IHRoZSBmdWxsIGRpZmYgbGlrZQorCXJlZ3VsYXIgY29tbWl0czsgZm9yIGVhY2ggbWVyZ2UgcGFyZW50LCBhIHNlcGFyYXRlIGxvZyBlbnRyeQorCWFuZCBkaWZmIGlzIGdlbmVyYXRlZC4gQW4gZXhjZXB0aW9uIGlzIHRoYXQgb25seSBkaWZmIGFnYWluc3QKKwl0aGUgZmlyc3QgcGFyZW50IGlzIHNob3duIHdoZW4gYC0tZmlyc3QtcGFyZW50YCBvcHRpb24gaXMgZ2l2ZW47CisJaW4gdGhhdCBjYXNlLCB0aGUgb3V0cHV0IHJlcHJlc2VudHMgdGhlIGNoYW5nZXMgdGhlIG1lcmdlCisJYnJvdWdodCBfaW50b18gdGhlIHRoZW4tY3VycmVudCBicmFuY2guCisKKy1yOjoKKwlTaG93IHJlY3Vyc2l2ZSBkaWZmcy4KKworLXQ6OgorCVNob3cgdGhlIHRyZWUgb2JqZWN0cyBpbiB0aGUgZGlmZiBvdXRwdXQuIFRoaXMgaW1wbGllcyBgLXJgLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2aXNpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vcmV2aXNpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Y5OTVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0CkBAIC0wLDAgKzEsMzc3IEBACitTUEVDSUZZSU5HIFJFVklTSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSByZXZpc2lvbiBwYXJhbWV0ZXIgJzxyZXY+JyB0eXBpY2FsbHksIGJ1dCBub3QgbmVjZXNzYXJpbHksIG5hbWVzIGEKK2NvbW1pdCBvYmplY3QuICBJdCB1c2VzIHdoYXQgaXMgY2FsbGVkIGFuICdleHRlbmRlZCBTSEEtMScKK3N5bnRheC4gIEhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMuICBUaGUKK29uZXMgbGlzdGVkIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGxpc3QgbmFtZSB0cmVlcyBhbmQKK2Jsb2JzIGNvbnRhaW5lZCBpbiBhIGNvbW1pdC4KKworTk9URTogVGhpcyBkb2N1bWVudCBzaG93cyB0aGUgInJhdyIgc3ludGF4IGFzIHNlZW4gYnkgZ2l0LiBUaGUgc2hlbGwKK2FuZCBvdGhlciBVSXMgbWlnaHQgcmVxdWlyZSBhZGRpdGlvbmFsIHF1b3RpbmcgdG8gcHJvdGVjdCBzcGVjaWFsCitjaGFyYWN0ZXJzIGFuZCB0byBhdm9pZCB3b3JkIHNwbGl0dGluZy4KKworJzxzaGExPicsIGUuZy4gJ2RhZTg2ZTE5NTBiMTI3N2U1NDVjZWUxODA1NTE3NTAwMjljZmU3MzUnLCAnZGFlODZlJzo6CisgIFRoZSBmdWxsIFNIQS0xIG9iamVjdCBuYW1lICg0MC1ieXRlIGhleGFkZWNpbWFsIHN0cmluZyksIG9yCisgIGEgbGVhZGluZyBzdWJzdHJpbmcgdGhhdCBpcyB1bmlxdWUgd2l0aGluIHRoZSByZXBvc2l0b3J5LgorICBFLmcuIGRhZTg2ZTE5NTBiMTI3N2U1NDVjZWUxODA1NTE3NTAwMjljZmU3MzUgYW5kIGRhZTg2ZSBib3RoCisgIG5hbWUgdGhlIHNhbWUgY29tbWl0IG9iamVjdCBpZiB0aGVyZSBpcyBubyBvdGhlciBvYmplY3QgaW4KKyAgeW91ciByZXBvc2l0b3J5IHdob3NlIG9iamVjdCBuYW1lIHN0YXJ0cyB3aXRoIGRhZTg2ZS4KKworJzxkZXNjcmliZU91dHB1dD4nLCBlLmcuICd2MS43LjQuMi02NzktZzNiZWU3ZmInOjoKKyAgT3V0cHV0IGZyb20gYGdpdCBkZXNjcmliZWA7IGkuZS4gYSBjbG9zZXN0IHRhZywgb3B0aW9uYWxseQorICBmb2xsb3dlZCBieSBhIGRhc2ggYW5kIGEgbnVtYmVyIG9mIGNvbW1pdHMsIGZvbGxvd2VkIGJ5IGEgZGFzaCwgYQorICAnZycsIGFuZCBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZS4KKworJzxyZWZuYW1lPicsIGUuZy4gJ21hc3RlcicsICdoZWFkcy9tYXN0ZXInLCAncmVmcy9oZWFkcy9tYXN0ZXInOjoKKyAgQSBzeW1ib2xpYyByZWYgbmFtZS4gIEUuZy4gJ21hc3RlcicgdHlwaWNhbGx5IG1lYW5zIHRoZSBjb21taXQKKyAgb2JqZWN0IHJlZmVyZW5jZWQgYnkgJ3JlZnMvaGVhZHMvbWFzdGVyJy4gIElmIHlvdQorICBoYXBwZW4gdG8gaGF2ZSBib3RoICdoZWFkcy9tYXN0ZXInIGFuZCAndGFncy9tYXN0ZXInLCB5b3UgY2FuCisgIGV4cGxpY2l0bHkgc2F5ICdoZWFkcy9tYXN0ZXInIHRvIHRlbGwgR2l0IHdoaWNoIG9uZSB5b3UgbWVhbi4KKyAgV2hlbiBhbWJpZ3VvdXMsIGEgJzxyZWZuYW1lPicgaXMgZGlzYW1iaWd1YXRlZCBieSB0YWtpbmcgdGhlCisgIGZpcnN0IG1hdGNoIGluIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisKKyAgLiBJZiAnJEdJVF9ESVIvPHJlZm5hbWU+JyBleGlzdHMsIHRoYXQgaXMgd2hhdCB5b3UgbWVhbiAodGhpcyBpcyB1c3VhbGx5CisgICAgdXNlZnVsIG9ubHkgZm9yIGBIRUFEYCwgYEZFVENIX0hFQURgLCBgT1JJR19IRUFEYCwgYE1FUkdFX0hFQURgCisgICAgYW5kIGBDSEVSUllfUElDS19IRUFEYCk7CisKKyAgLiBvdGhlcndpc2UsICdyZWZzLzxyZWZuYW1lPicgaWYgaXQgZXhpc3RzOworCisgIC4gb3RoZXJ3aXNlLCAncmVmcy90YWdzLzxyZWZuYW1lPicgaWYgaXQgZXhpc3RzOworCisgIC4gb3RoZXJ3aXNlLCAncmVmcy9oZWFkcy88cmVmbmFtZT4nIGlmIGl0IGV4aXN0czsKKworICAuIG90aGVyd2lzZSwgJ3JlZnMvcmVtb3Rlcy88cmVmbmFtZT4nIGlmIGl0IGV4aXN0czsKKworICAuIG90aGVyd2lzZSwgJ3JlZnMvcmVtb3Rlcy88cmVmbmFtZT4vSEVBRCcgaWYgaXQgZXhpc3RzLgorKworYEhFQURgIG5hbWVzIHRoZSBjb21taXQgb24gd2hpY2ggeW91IGJhc2VkIHRoZSBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUuCitgRkVUQ0hfSEVBRGAgcmVjb3JkcyB0aGUgYnJhbmNoIHdoaWNoIHlvdSBmZXRjaGVkIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeQord2l0aCB5b3VyIGxhc3QgYGdpdCBmZXRjaGAgaW52b2NhdGlvbi4KK2BPUklHX0hFQURgIGlzIGNyZWF0ZWQgYnkgY29tbWFuZHMgdGhhdCBtb3ZlIHlvdXIgYEhFQURgIGluIGEgZHJhc3RpYword2F5LCB0byByZWNvcmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBgSEVBRGAgYmVmb3JlIHRoZWlyIG9wZXJhdGlvbiwgc28gdGhhdAoreW91IGNhbiBlYXNpbHkgY2hhbmdlIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgeW91IHJhbgordGhlbS4KK2BNRVJHRV9IRUFEYCByZWNvcmRzIHRoZSBjb21taXQocykgd2hpY2ggeW91IGFyZSBtZXJnaW5nIGludG8geW91ciBicmFuY2gKK3doZW4geW91IHJ1biBgZ2l0IG1lcmdlYC4KK2BDSEVSUllfUElDS19IRUFEYCByZWNvcmRzIHRoZSBjb21taXQgd2hpY2ggeW91IGFyZSBjaGVycnktcGlja2luZword2hlbiB5b3UgcnVuIGBnaXQgY2hlcnJ5LXBpY2tgLgorKworTm90ZSB0aGF0IGFueSBvZiB0aGUgJ3JlZnMvKicgY2FzZXMgYWJvdmUgbWF5IGNvbWUgZWl0aGVyIGZyb20KK3RoZSBgJEdJVF9ESVIvcmVmc2AgZGlyZWN0b3J5IG9yIGZyb20gdGhlIGAkR0lUX0RJUi9wYWNrZWQtcmVmc2AgZmlsZS4KK1doaWxlIHRoZSByZWYgbmFtZSBlbmNvZGluZyBpcyB1bnNwZWNpZmllZCwgVVRGLTggaXMgcHJlZmVycmVkIGFzCitzb21lIG91dHB1dCBwcm9jZXNzaW5nIG1heSBhc3N1bWUgcmVmIG5hbWVzIGluIFVURi04LgorCisnQCc6OgorICAnQCcgYWxvbmUgaXMgYSBzaG9ydGN1dCBmb3IgYEhFQURgLgorCisnWzxyZWZuYW1lPl1AezxkYXRlPn0nLCBlLmcuICdtYXN0ZXJAXHt5ZXN0ZXJkYXlcfScsICdIRUFEQHs1IG1pbnV0ZXMgYWdvfSc6OgorICBBIHJlZiBmb2xsb3dlZCBieSB0aGUgc3VmZml4ICdAJyB3aXRoIGEgZGF0ZSBzcGVjaWZpY2F0aW9uCisgIGVuY2xvc2VkIGluIGEgYnJhY2UKKyAgcGFpciAoZS5nLiAnXHt5ZXN0ZXJkYXlcfScsICd7MSBtb250aCAyIHdlZWtzIDMgZGF5cyAxIGhvdXIgMQorICBzZWNvbmQgYWdvfScgb3IgJ3sxOTc5LTAyLTI2IDE4OjMwOjAwfScpIHNwZWNpZmllcyB0aGUgdmFsdWUKKyAgb2YgdGhlIHJlZiBhdCBhIHByaW9yIHBvaW50IGluIHRpbWUuICBUaGlzIHN1ZmZpeCBtYXkgb25seSBiZQorICB1c2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIHJlZiBuYW1lIGFuZCB0aGUgcmVmIG11c3QgaGF2ZSBhbgorICBleGlzdGluZyBsb2cgKCckR0lUX0RJUi9sb2dzLzxyZWY+JykuIE5vdGUgdGhhdCB0aGlzIGxvb2tzIHVwIHRoZSBzdGF0ZQorICBvZiB5b3VyICpsb2NhbCogcmVmIGF0IGEgZ2l2ZW4gdGltZTsgZS5nLiwgd2hhdCB3YXMgaW4geW91ciBsb2NhbAorICAnbWFzdGVyJyBicmFuY2ggbGFzdCB3ZWVrLiBJZiB5b3Ugd2FudCB0byBsb29rIGF0IGNvbW1pdHMgbWFkZSBkdXJpbmcKKyAgY2VydGFpbiB0aW1lcywgc2VlIGAtLXNpbmNlYCBhbmQgYC0tdW50aWxgLgorCisnPHJlZm5hbWU+QHs8bj59JywgZS5nLiAnbWFzdGVyQFx7MVx9Jzo6CisgIEEgcmVmIGZvbGxvd2VkIGJ5IHRoZSBzdWZmaXggJ0AnIHdpdGggYW4gb3JkaW5hbCBzcGVjaWZpY2F0aW9uCisgIGVuY2xvc2VkIGluIGEgYnJhY2UgcGFpciAoZS5nLiAnXHsxXH0nLCAnXHsxNVx9Jykgc3BlY2lmaWVzCisgIHRoZSBuLXRoIHByaW9yIHZhbHVlIG9mIHRoYXQgcmVmLiAgRm9yIGV4YW1wbGUgJ21hc3RlckBcezFcfScKKyAgaXMgdGhlIGltbWVkaWF0ZSBwcmlvciB2YWx1ZSBvZiAnbWFzdGVyJyB3aGlsZSAnbWFzdGVyQFx7NVx9JworICBpcyB0aGUgNXRoIHByaW9yIHZhbHVlIG9mICdtYXN0ZXInLiBUaGlzIHN1ZmZpeCBtYXkgb25seSBiZSB1c2VkCisgIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIHJlZiBuYW1lIGFuZCB0aGUgcmVmIG11c3QgaGF2ZSBhbiBleGlzdGluZworICBsb2cgKCckR0lUX0RJUi9sb2dzLzxyZWZuYW1lPicpLgorCisnQHs8bj59JywgZS5nLiAnQFx7MVx9Jzo6CisgIFlvdSBjYW4gdXNlIHRoZSAnQCcgY29uc3RydWN0IHdpdGggYW4gZW1wdHkgcmVmIHBhcnQgdG8gZ2V0IGF0IGEKKyAgcmVmbG9nIGVudHJ5IG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgb24KKyAgYnJhbmNoICdibGFibGEnIHRoZW4gJ0BcezFcfScgbWVhbnMgdGhlIHNhbWUgYXMgJ2JsYWJsYUBcezFcfScuCisKKydAey08bj59JywgZS5nLiAnQHstMX0nOjoKKyAgVGhlIGNvbnN0cnVjdCAnQHstPG4+fScgbWVhbnMgdGhlIDxuPnRoIGJyYW5jaC9jb21taXQgY2hlY2tlZCBvdXQKKyAgYmVmb3JlIHRoZSBjdXJyZW50IG9uZS4KKworJ1s8YnJhbmNobmFtZT5dQFx7dXBzdHJlYW1cfScsIGUuZy4gJ21hc3RlckBce3Vwc3RyZWFtXH0nLCAnQFx7dVx9Jzo6CisgIFRoZSBzdWZmaXggJ0Bce3Vwc3RyZWFtXH0nIHRvIGEgYnJhbmNobmFtZSAoc2hvcnQgZm9ybSAnPGJyYW5jaG5hbWU+QFx7dVx9JykKKyAgcmVmZXJzIHRvIHRoZSBicmFuY2ggdGhhdCB0aGUgYnJhbmNoIHNwZWNpZmllZCBieSBicmFuY2huYW1lIGlzIHNldCB0byBidWlsZCBvbgorICB0b3Agb2YgKGNvbmZpZ3VyZWQgd2l0aCBgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGFuZAorICBgYnJhbmNoLjxuYW1lPi5tZXJnZWApLiAgQSBtaXNzaW5nIGJyYW5jaG5hbWUgZGVmYXVsdHMgdG8gdGhlCisgIGN1cnJlbnQgb25lLiBUaGVzZSBzdWZmaXhlcyBhcmUgYWxzbyBhY2NlcHRlZCB3aGVuIHNwZWxsZWQgaW4gdXBwZXJjYXNlLCBhbmQKKyAgdGhleSBtZWFuIHRoZSBzYW1lIHRoaW5nIG5vIG1hdHRlciB0aGUgY2FzZS4KKworJ1s8YnJhbmNobmFtZT5dQFx7cHVzaFx9JywgZS5nLiAnbWFzdGVyQFx7cHVzaFx9JywgJ0Bce3B1c2hcfSc6OgorICBUaGUgc3VmZml4ICdAXHtwdXNofScgcmVwb3J0cyB0aGUgYnJhbmNoICJ3aGVyZSB3ZSB3b3VsZCBwdXNoIHRvIiBpZgorICBgZ2l0IHB1c2hgIHdlcmUgcnVuIHdoaWxlIGBicmFuY2huYW1lYCB3YXMgY2hlY2tlZCBvdXQgKG9yIHRoZSBjdXJyZW50CisgIGBIRUFEYCBpZiBubyBicmFuY2huYW1lIGlzIHNwZWNpZmllZCkuIFNpbmNlIG91ciBwdXNoIGRlc3RpbmF0aW9uIGlzCisgIGluIGEgcmVtb3RlIHJlcG9zaXRvcnksIG9mIGNvdXJzZSwgd2UgcmVwb3J0IHRoZSBsb2NhbCB0cmFja2luZyBicmFuY2gKKyAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0IGJyYW5jaCAoaS5lLiwgc29tZXRoaW5nIGluIGByZWZzL3JlbW90ZXMvYCkuCisrCitIZXJlJ3MgYW4gZXhhbXBsZSB0byBtYWtlIGl0IG1vcmUgY2xlYXI6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgY3VycmVudAorJCBnaXQgY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBteWZvcmsKKyQgZ2l0IHN3aXRjaCAtYyBteWJyYW5jaCBvcmlnaW4vbWFzdGVyCisKKyQgZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAe3Vwc3RyZWFtfQorcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKworJCBnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7cHVzaH0KK3JlZnMvcmVtb3Rlcy9teWZvcmsvbXlicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm90ZSBpbiB0aGUgZXhhbXBsZSB0aGF0IHdlIHNldCB1cCBhIHRyaWFuZ3VsYXIgd29ya2Zsb3csIHdoZXJlIHdlIHB1bGwKK2Zyb20gb25lIGxvY2F0aW9uIGFuZCBwdXNoIHRvIGFub3RoZXIuIEluIGEgbm9uLXRyaWFuZ3VsYXIgd29ya2Zsb3csCisnQFx7cHVzaH0nIGlzIHRoZSBzYW1lIGFzICdAXHt1cHN0cmVhbX0nLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQuCisrCitUaGlzIHN1ZmZpeCBpcyBhbHNvIGFjY2VwdGVkIHdoZW4gc3BlbGxlZCBpbiB1cHBlcmNhc2UsIGFuZCBtZWFucyB0aGUgc2FtZQordGhpbmcgbm8gbWF0dGVyIHRoZSBjYXNlLgorCisnPHJldj57Y2FyZXR9WzxuPl0nLCBlLmcuICdIRUFEe2NhcmV0fSwgdjEuNS4xe2NhcmV0fTAnOjoKKyAgQSBzdWZmaXggJ3tjYXJldH0nIHRvIGEgcmV2aXNpb24gcGFyYW1ldGVyIG1lYW5zIHRoZSBmaXJzdCBwYXJlbnQgb2YKKyAgdGhhdCBjb21taXQgb2JqZWN0LiAgJ3tjYXJldH08bj4nIG1lYW5zIHRoZSA8bj50aCBwYXJlbnQgKGkuZS4KKyAgJzxyZXY+e2NhcmV0fScKKyAgaXMgZXF1aXZhbGVudCB0byAnPHJldj57Y2FyZXR9MScpLiAgQXMgYSBzcGVjaWFsIHJ1bGUsCisgICc8cmV2PntjYXJldH0wJyBtZWFucyB0aGUgY29tbWl0IGl0c2VsZiBhbmQgaXMgdXNlZCB3aGVuICc8cmV2PicgaXMgdGhlCisgIG9iamVjdCBuYW1lIG9mIGEgdGFnIG9iamVjdCB0aGF0IHJlZmVycyB0byBhIGNvbW1pdCBvYmplY3QuCisKKyc8cmV2Pnt0aWxkZX1bPG4+XScsIGUuZy4gJ0hFQUR7dGlsZGV9LCBtYXN0ZXJ7dGlsZGV9Myc6OgorICBBIHN1ZmZpeCAne3RpbGRlfScgdG8gYSByZXZpc2lvbiBwYXJhbWV0ZXIgbWVhbnMgdGhlIGZpcnN0IHBhcmVudCBvZgorICB0aGF0IGNvbW1pdCBvYmplY3QuCisgIEEgc3VmZml4ICd7dGlsZGV9PG4+JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciBtZWFucyB0aGUgY29tbWl0CisgIG9iamVjdCB0aGF0IGlzIHRoZSA8bj50aCBnZW5lcmF0aW9uIGFuY2VzdG9yIG9mIHRoZSBuYW1lZAorICBjb21taXQgb2JqZWN0LCBmb2xsb3dpbmcgb25seSB0aGUgZmlyc3QgcGFyZW50cy4gIEkuZS4gJzxyZXY+e3RpbGRlfTMnIGlzCisgIGVxdWl2YWxlbnQgdG8gJzxyZXY+e2NhcmV0fXtjYXJldH17Y2FyZXR9JyB3aGljaCBpcyBlcXVpdmFsZW50IHRvCisgICc8cmV2PntjYXJldH0xe2NhcmV0fTF7Y2FyZXR9MScuICBTZWUgYmVsb3cgZm9yIGFuIGlsbHVzdHJhdGlvbiBvZgorICB0aGUgdXNhZ2Ugb2YgdGhpcyBmb3JtLgorCisnPHJldj57Y2FyZXR9ezx0eXBlPn0nLCBlLmcuICd2MC45OS44e2NhcmV0fVx7Y29tbWl0XH0nOjoKKyAgQSBzdWZmaXggJ3tjYXJldH0nIGZvbGxvd2VkIGJ5IGFuIG9iamVjdCB0eXBlIG5hbWUgZW5jbG9zZWQgaW4KKyAgYnJhY2UgcGFpciBtZWFucyBkZXJlZmVyZW5jZSB0aGUgb2JqZWN0IGF0ICc8cmV2PicgcmVjdXJzaXZlbHkgdW50aWwKKyAgYW4gb2JqZWN0IG9mIHR5cGUgJzx0eXBlPicgaXMgZm91bmQgb3IgdGhlIG9iamVjdCBjYW5ub3QgYmUKKyAgZGVyZWZlcmVuY2VkIGFueW1vcmUgKGluIHdoaWNoIGNhc2UsIGJhcmYpLgorICBGb3IgZXhhbXBsZSwgaWYgJzxyZXY+JyBpcyBhIGNvbW1pdC1pc2gsICc8cmV2PntjYXJldH1ce2NvbW1pdFx9JworICBkZXNjcmliZXMgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWl0IG9iamVjdC4KKyAgU2ltaWxhcmx5LCBpZiAnPHJldj4nIGlzIGEgdHJlZS1pc2gsICc8cmV2PntjYXJldH1ce3RyZWVcfScKKyAgZGVzY3JpYmVzIHRoZSBjb3JyZXNwb25kaW5nIHRyZWUgb2JqZWN0LgorICAnPHJldj57Y2FyZXR9MCcKKyAgaXMgYSBzaG9ydC1oYW5kIGZvciAnPHJldj57Y2FyZXR9XHtjb21taXRcfScuCisrCisnPHJldj57Y2FyZXR9XHtvYmplY3RcfScgY2FuIGJlIHVzZWQgdG8gbWFrZSBzdXJlICc8cmV2PicgbmFtZXMgYW4KK29iamVjdCB0aGF0IGV4aXN0cywgd2l0aG91dCByZXF1aXJpbmcgJzxyZXY+JyB0byBiZSBhIHRhZywgYW5kCit3aXRob3V0IGRlcmVmZXJlbmNpbmcgJzxyZXY+JzsgYmVjYXVzZSBhIHRhZyBpcyBhbHJlYWR5IGFuIG9iamVjdCwKK2l0IGRvZXMgbm90IGhhdmUgdG8gYmUgZGVyZWZlcmVuY2VkIGV2ZW4gb25jZSB0byBnZXQgdG8gYW4gb2JqZWN0LgorKworJzxyZXY+e2NhcmV0fVx7dGFnXH0nIGNhbiBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0ICc8cmV2PicgaWRlbnRpZmllcyBhbgorZXhpc3RpbmcgdGFnIG9iamVjdC4KKworJzxyZXY+e2NhcmV0fXt9JywgZS5nLiAndjAuOTkuOHtjYXJldH17fSc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gZW1wdHkgYnJhY2UgcGFpcgorICBtZWFucyB0aGUgb2JqZWN0IGNvdWxkIGJlIGEgdGFnLAorICBhbmQgZGVyZWZlcmVuY2UgdGhlIHRhZyByZWN1cnNpdmVseSB1bnRpbCBhIG5vbi10YWcgb2JqZWN0IGlzCisgIGZvdW5kLgorCisnPHJldj57Y2FyZXR9ey88dGV4dD59JywgZS5nLiAnSEVBRF57L2ZpeCBuYXN0eSBidWd9Jzo6CisgIEEgc3VmZml4ICd7Y2FyZXR9JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciwgZm9sbG93ZWQgYnkgYSBicmFjZQorICBwYWlyIHRoYXQgY29udGFpbnMgYSB0ZXh0IGxlZCBieSBhIHNsYXNoLAorICBpcyB0aGUgc2FtZSBhcyB0aGUgJzovZml4IG5hc3R5IGJ1Zycgc3ludGF4IGJlbG93IGV4Y2VwdCB0aGF0CisgIGl0IHJldHVybnMgdGhlIHlvdW5nZXN0IG1hdGNoaW5nIGNvbW1pdCB3aGljaCBpcyByZWFjaGFibGUgZnJvbQorICB0aGUgJzxyZXY+JyBiZWZvcmUgJ3tjYXJldH0nLgorCisnOi88dGV4dD4nLCBlLmcuICc6L2ZpeCBuYXN0eSBidWcnOjoKKyAgQSBjb2xvbiwgZm9sbG93ZWQgYnkgYSBzbGFzaCwgZm9sbG93ZWQgYnkgYSB0ZXh0LCBuYW1lcworICBhIGNvbW1pdCB3aG9zZSBjb21taXQgbWVzc2FnZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcmVndWxhciBleHByZXNzaW9uLgorICBUaGlzIG5hbWUgcmV0dXJucyB0aGUgeW91bmdlc3QgbWF0Y2hpbmcgY29tbWl0IHdoaWNoIGlzCisgIHJlYWNoYWJsZSBmcm9tIGFueSByZWYsIGluY2x1ZGluZyBIRUFELgorICBUaGUgcmVndWxhciBleHByZXNzaW9uIGNhbiBtYXRjaCBhbnkgcGFydCBvZiB0aGUKKyAgY29tbWl0IG1lc3NhZ2UuIFRvIG1hdGNoIG1lc3NhZ2VzIHN0YXJ0aW5nIHdpdGggYSBzdHJpbmcsIG9uZSBjYW4gdXNlCisgIGUuZy4gJzovXmZvbycuIFRoZSBzcGVjaWFsIHNlcXVlbmNlICc6LyEnIGlzIHJlc2VydmVkIGZvciBtb2RpZmllcnMgdG8gd2hhdAorICBpcyBtYXRjaGVkLiAnOi8hLWZvbycgcGVyZm9ybXMgYSBuZWdhdGl2ZSBtYXRjaCwgd2hpbGUgJzovISFmb28nIG1hdGNoZXMgYQorICBsaXRlcmFsICchJyBjaGFyYWN0ZXIsIGZvbGxvd2VkIGJ5ICdmb28nLiBBbnkgb3RoZXIgc2VxdWVuY2UgYmVnaW5uaW5nIHdpdGgKKyAgJzovIScgaXMgcmVzZXJ2ZWQgZm9yIG5vdy4KKyAgRGVwZW5kaW5nIG9uIHRoZSBnaXZlbiB0ZXh0LCB0aGUgc2hlbGwncyB3b3JkIHNwbGl0dGluZyBydWxlcyBtaWdodAorICByZXF1aXJlIGFkZGl0aW9uYWwgcXVvdGluZy4KKworJzxyZXY+OjxwYXRoPicsIGUuZy4gJ0hFQUQ6UkVBRE1FJywgJ21hc3RlcjouL1JFQURNRSc6OgorICBBIHN1ZmZpeCAnOicgZm9sbG93ZWQgYnkgYSBwYXRoIG5hbWVzIHRoZSBibG9iIG9yIHRyZWUKKyAgYXQgdGhlIGdpdmVuIHBhdGggaW4gdGhlIHRyZWUtaXNoIG9iamVjdCBuYW1lZCBieSB0aGUgcGFydAorICBiZWZvcmUgdGhlIGNvbG9uLgorICBBIHBhdGggc3RhcnRpbmcgd2l0aCAnLi8nIG9yICcuLi8nIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICBUaGUgZ2l2ZW4gcGF0aCB3aWxsIGJlIGNvbnZlcnRlZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgd29ya2luZyB0cmVlJ3Mgcm9vdCBkaXJlY3RvcnkuCisgIFRoaXMgaXMgbW9zdCB1c2VmdWwgdG8gYWRkcmVzcyBhIGJsb2Igb3IgdHJlZSBmcm9tIGEgY29tbWl0IG9yIHRyZWUgdGhhdCBoYXMKKyAgdGhlIHNhbWUgdHJlZSBzdHJ1Y3R1cmUgYXMgdGhlIHdvcmtpbmcgdHJlZS4KKworJzpbPG4+Ol08cGF0aD4nLCBlLmcuICc6MDpSRUFETUUnLCAnOlJFQURNRSc6OgorICBBIGNvbG9uLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgc3RhZ2UgbnVtYmVyICgwIHRvIDMpIGFuZCBhCisgIGNvbG9uLCBmb2xsb3dlZCBieSBhIHBhdGgsIG5hbWVzIGEgYmxvYiBvYmplY3QgaW4gdGhlCisgIGluZGV4IGF0IHRoZSBnaXZlbiBwYXRoLiBBIG1pc3Npbmcgc3RhZ2UgbnVtYmVyIChhbmQgdGhlIGNvbG9uCisgIHRoYXQgZm9sbG93cyBpdCkgbmFtZXMgYSBzdGFnZSAwIGVudHJ5LiBEdXJpbmcgYSBtZXJnZSwgc3RhZ2UKKyAgMSBpcyB0aGUgY29tbW9uIGFuY2VzdG9yLCBzdGFnZSAyIGlzIHRoZSB0YXJnZXQgYnJhbmNoJ3MgdmVyc2lvbgorICAodHlwaWNhbGx5IHRoZSBjdXJyZW50IGJyYW5jaCksIGFuZCBzdGFnZSAzIGlzIHRoZSB2ZXJzaW9uIGZyb20KKyAgdGhlIGJyYW5jaCB3aGljaCBpcyBiZWluZyBtZXJnZWQuCisKK0hlcmUgaXMgYW4gaWxsdXN0cmF0aW9uLCBieSBKb24gTG9lbGlnZXIuICBCb3RoIGNvbW1pdCBub2RlcyBCCithbmQgQyBhcmUgcGFyZW50cyBvZiBjb21taXQgbm9kZSBBLiAgUGFyZW50IGNvbW1pdHMgYXJlIG9yZGVyZWQKK2xlZnQtdG8tcmlnaHQuCisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KK0cgICBIICAgSSAgIEoKKyBcIC8gICAgIFwgLworICBEICAgRSAgIEYKKyAgIFwgIHwgIC8gXAorICAgIFwgfCAvICAgfAorICAgICBcfC8gICAgfAorICAgICAgQiAgICAgQworICAgICAgIFwgICAvCisgICAgICAgIFwgLworICAgICAgICAgQQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisgICAgQSA9ICAgICAgPSBBXjAKKyAgICBCID0gQV4gICA9IEFeMSAgICAgPSBBfjEKKyAgICBDID0gQV4yICA9IEFeMgorICAgIEQgPSBBXl4gID0gQV4xXjEgICA9IEF+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+XWAuCisKK2BPUFRfX0NPTE9SKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC0tY29sb3JbPTx3aGVuPl1gIGFuZCBgLS1uby1jb2xvcmAuCisKK2BPUFRfX0RSWV9SVU4oJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUFkZCBgLW4sIC0tZHJ5LXJ1bmAuCisKK2BPUFRfX0ZPUkNFKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC1mLCAtLWZvcmNlYC4KKworYE9QVF9fUVVJRVQoJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUFkZCBgLXEsIC0tcXVpZXRgLgorCitgT1BUX19WRVJCT1NFKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC12LCAtLXZlcmJvc2VgLgorCitgT1BUX0dST1VQKGRlc2NyaXB0aW9uKWA6OgorCVN0YXJ0IGFuIG9wdGlvbiBncm91cC4gYGRlc2NyaXB0aW9uYCBpcyBhIHNob3J0IHN0cmluZyB0aGF0CisJZGVzY3JpYmVzIHRoZSBncm91cCBvciBhbiBlbXB0eSBzdHJpbmcuCisJU3RhcnQgdGhlIGRlc2NyaXB0aW9uIHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIuCisKK2BPUFRfQk9PTChzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLiBgaW50X3ZhcmAgaXMgc2V0IHRvIG9uZSB3aXRoCisJYC0tb3B0aW9uYCBhbmQgc2V0IHRvIHplcm8gd2l0aCBgLS1uby1vcHRpb25gLgorCitgT1BUX0NPVU5UVVAoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYSBjb3VudC11cCBvcHRpb24uCisJRWFjaCB1c2Ugb2YgYC0tb3B0aW9uYCBpbmNyZW1lbnRzIGBpbnRfdmFyYCwgc3RhcnRpbmcgZnJvbSB6ZXJvCisJKGV2ZW4gaWYgaW5pdGlhbGx5IG5lZ2F0aXZlKSwgYW5kIGAtLW5vLW9wdGlvbmAgcmVzZXRzIGl0IHRvCisJemVyby4gVG8gZGV0ZXJtaW5lIGlmIGAtLW9wdGlvbmAgb3IgYC0tbm8tb3B0aW9uYCB3YXMgZW5jb3VudGVyZWQgYXQKKwlhbGwsIGluaXRpYWxpemUgYGludF92YXJgIHRvIGEgbmVnYXRpdmUgdmFsdWUsIGFuZCBpZiBpdCBpcyBzdGlsbAorCW5lZ2F0aXZlIGFmdGVyIHBhcnNlX29wdGlvbnMoKSwgdGhlbiBuZWl0aGVyIGAtLW9wdGlvbmAgbm9yCisJYC0tbm8tb3B0aW9uYCB3YXMgc2Vlbi4KKworYE9QVF9CSVQoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbiwgbWFzaylgOjoKKwlJbnRyb2R1Y2UgYSBib29sZWFuIG9wdGlvbi4KKwlJZiB1c2VkLCBgaW50X3ZhcmAgaXMgYml0d2lzZS1vcmVkIHdpdGggYG1hc2tgLgorCitgT1BUX05FR0JJVChzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uLCBtYXNrKWA6OgorCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLgorCUlmIHVzZWQsIGBpbnRfdmFyYCBpcyBiaXR3aXNlLWFuZGVkIHdpdGggdGhlIGludmVydGVkIGBtYXNrYC4KKworYE9QVF9TRVRfSU5UKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIGludGVnZXIpYDo6CisJSW50cm9kdWNlIGFuIGludGVnZXIgb3B0aW9uLgorCWBpbnRfdmFyYCBpcyBzZXQgdG8gYGludGVnZXJgIHdpdGggYC0tb3B0aW9uYCwgYW5kCisJcmVzZXQgdG8gemVybyB3aXRoIGAtLW5vLW9wdGlvbmAuCisKK2BPUFRfU1RSSU5HKHNob3J0LCBsb25nLCAmc3RyX3ZhciwgYXJnX3N0ciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudC4KKwlUaGUgc3RyaW5nIGFyZ3VtZW50IGlzIHB1dCBpbnRvIGBzdHJfdmFyYC4KKworYE9QVF9TVFJJTkdfTElTVChzaG9ydCwgbG9uZywgJnN0cnVjdCBzdHJpbmdfbGlzdCwgYXJnX3N0ciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudC4KKwlUaGUgc3RyaW5nIGFyZ3VtZW50IGlzIHN0b3JlZCBhcyBhbiBlbGVtZW50IGluIGBzdHJpbmdfbGlzdGAuCisJVXNlIG9mIGAtLW5vLW9wdGlvbmAgd2lsbCBjbGVhciB0aGUgbGlzdCBvZiBwcmVjZWRpbmcgdmFsdWVzLgorCitgT1BUX0lOVEVHRVIoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggaW50ZWdlciBhcmd1bWVudC4KKwlUaGUgaW50ZWdlciBpcyBwdXQgaW50byBgaW50X3ZhcmAuCisKK2BPUFRfTUFHTklUVURFKHNob3J0LCBsb25nLCAmdW5zaWduZWRfbG9uZ192YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBhIHNpemUgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEKKwlub24tbmVnYXRpdmUgaW50ZWdlciBhbmQgbWF5IGluY2x1ZGUgYSBzdWZmaXggb2YgJ2snLCAnbScgb3IgJ2cnIHRvCisJc2NhbGUgdGhlIHByb3ZpZGVkIHZhbHVlIGJ5IDEwMjQsIDEwMjReMiBvciAxMDI0XjMgcmVzcGVjdGl2ZWx5LgorCVRoZSBzY2FsZWQgdmFsdWUgaXMgcHV0IGludG8gYHVuc2lnbmVkX2xvbmdfdmFyYC4KKworYE9QVF9FWFBJUllfREFURShzaG9ydCwgbG9uZywgJnRpbWVzdGFtcF90X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIGV4cGlyeSBkYXRlIGFyZ3VtZW50LCBzZWUgYHBhcnNlX2V4cGlyeV9kYXRlKClgLgorCVRoZSB0aW1lc3RhbXAgaXMgcHV0IGludG8gYHRpbWVzdGFtcF90X3ZhcmAuCisKK2BPUFRfQ0FMTEJBQ0soc2hvcnQsIGxvbmcsICZ2YXIsIGFyZ19zdHIsIGRlc2NyaXB0aW9uLCBmdW5jX3B0cilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggYXJndW1lbnQuCisJVGhlIGFyZ3VtZW50IHdpbGwgYmUgZmVkIGludG8gdGhlIGZ1bmN0aW9uIGdpdmVuIGJ5IGBmdW5jX3B0cmAKKwlhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIHB1dCBpbnRvIGB2YXJgLgorCVNlZSAnT3B0aW9uIENhbGxiYWNrcycgYmVsb3cgZm9yIGEgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24uCisKK2BPUFRfRklMRU5BTUUoc2hvcnQsIGxvbmcsICZ2YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBhIGZpbGVuYW1lIGFyZ3VtZW50LgorCVRoZSBmaWxlbmFtZSB3aWxsIGJlIHByZWZpeGVkIGJ5IHBhc3NpbmcgdGhlIGZpbGVuYW1lIGFsb25nIHdpdGgKKwl0aGUgcHJlZml4IGFyZ3VtZW50IG9mIGBwYXJzZV9vcHRpb25zKClgIHRvIGBwcmVmaXhfZmlsZW5hbWUoKWAuCisKK2BPUFRfQVJHVU1FTlQobG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhIGxvbmctb3B0aW9uIGFyZ3VtZW50IHRoYXQgd2lsbCBiZSBrZXB0IGluIGBhcmd2W11gLgorCUlmIHRoaXMgb3B0aW9uIHdhcyBzZWVuLCBgaW50X3ZhcmAgd2lsbCBiZSBzZXQgdG8gb25lIChleGNlcHQKKwlpZiBhIGBOVUxMYCBwb2ludGVyIHdhcyBwYXNzZWQpLgorCitgT1BUX05VTUJFUl9DQUxMQkFDSygmdmFyLCBkZXNjcmlwdGlvbiwgZnVuY19wdHIpYDo6CisJUmVjb2duaXplIG51bWVyaWNhbCBvcHRpb25zIGxpa2UgLTEyMyBhbmQgZmVlZCB0aGUgaW50ZWdlciBhcworCWlmIGl0IHdhcyBhbiBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gZ2l2ZW4gYnkgYGZ1bmNfcHRyYC4KKwlUaGUgcmVzdWx0IHdpbGwgYmUgcHV0IGludG8gYHZhcmAuICBUaGVyZSBjYW4gYmUgb25seSBvbmUgc3VjaAorCW9wdGlvbiBkZWZpbml0aW9uLiAgSXQgY2Fubm90IGJlIG5lZ2F0ZWQgYW5kIGl0IHRha2VzIG5vCisJYXJndW1lbnRzLiAgU2hvcnQgb3B0aW9ucyB0aGF0IGhhcHBlbiB0byBiZSBkaWdpdHMgdGFrZQorCXByZWNlZGVuY2Ugb3ZlciBpdC4KKworYE9QVF9DT0xPUl9GTEFHKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB0aGF0IHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgY2FuCisJaGF2ZSBvbmUgb2YgdGhyZWUgdmFsdWVzOiAiYWx3YXlzIiwgIm5ldmVyIiwgb3IgImF1dG8iLiAgSWYgdGhlCisJYXJndW1lbnQgaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byAiYWx3YXlzIi4gIFRoZSBgLS1uby1gIGZvcm0KKwl3b3JrcyBsaWtlIGAtLWxvbmc9bmV2ZXJgOyBpdCBjYW5ub3QgdGFrZSBhbiBhcmd1bWVudC4gIElmCisJImFsd2F5cyIsIHNldCBgaW50X3ZhcmAgdG8gMTsgaWYgIm5ldmVyIiwgc2V0IGBpbnRfdmFyYCB0byAwOyBpZgorCSJhdXRvIiwgc2V0IGBpbnRfdmFyYCB0byAxIGlmIHN0ZG91dCBpcyBhIHR0eSBvciBhIHBhZ2VyLAorCTAgb3RoZXJ3aXNlLgorCitgT1BUX05PT1BfTk9BUkcoc2hvcnQsIGxvbmcpYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB0aGF0IGhhcyBubyBlZmZlY3QgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KKwlVc2UgaXQgdG8gaGlkZSBkZXByZWNhdGVkIG9wdGlvbnMgdGhhdCBhcmUgc3RpbGwgdG8gYmUgcmVjb2duaXplZAorCWFuZCBpZ25vcmVkIHNpbGVudGx5LgorCitgT1BUX1BBU1NUSFJVKHNob3J0LCBsb25nLCAmY2hhcl92YXIsIGFyZ19zdHIsIGRlc2NyaXB0aW9uLCBmbGFncylgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHRoYXQgd2lsbCBiZSByZWNvbnN0cnVjdGVkIGludG8gYSBjaGFyKiBzdHJpbmcsCisJd2hpY2ggbXVzdCBiZSBpbml0aWFsaXplZCB0byBOVUxMLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvCisJcGFzcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiB0byBhbm90aGVyIGNvbW1hbmQuIEFueSBwcmV2aW91cyB2YWx1ZQorCXdpbGwgYmUgb3ZlcndyaXR0ZW4sIHNvIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igb3B0aW9ucyB3aGVyZQorCXRoZSBsYXN0IG9uZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB3aW5zLgorCitgT1BUX1BBU1NUSFJVX0FSR1Yoc2hvcnQsIGxvbmcsICZhcmd2X2FycmF5X3ZhciwgYXJnX3N0ciwgZGVzY3JpcHRpb24sIGZsYWdzKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2hlcmUgYWxsIGluc3RhbmNlcyBvZiBpdCBvbiB0aGUgY29tbWFuZC1saW5lIHdpbGwKKwliZSByZWNvbnN0cnVjdGVkIGludG8gYW4gYXJndl9hcnJheS4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgbmVlZCB0bworCXBhc3MgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24sIHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMsCisJdG8gYW5vdGhlciBjb21tYW5kLgorCitgT1BUX0NNRE1PREUoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbiwgZW51bV92YWwpYDo6CisJRGVmaW5lIGFuICJvcGVyYXRpb24gbW9kZSIgb3B0aW9uLCBvbmx5IG9uZSBvZiB3aGljaCBpbiB0aGUgc2FtZQorCWdyb3VwIG9mICJvcGVyYXRpbmcgbW9kZSIgb3B0aW9ucyB0aGF0IHNoYXJlIHRoZSBzYW1lIGBpbnRfdmFyYAorCWNhbiBiZSBnaXZlbiBieSB0aGUgdXNlci4gYGVudW1fdmFsYCBpcyBzZXQgdG8gYGludF92YXJgIHdoZW4gdGhlCisJb3B0aW9uIGlzIHVzZWQsIGJ1dCBhbiBlcnJvciBpcyByZXBvcnRlZCBpZiBvdGhlciAib3BlcmF0aW5nIG1vZGUiCisJb3B0aW9uIGhhcyBhbHJlYWR5IHNldCBpdHMgdmFsdWUgdG8gdGhlIHNhbWUgYGludF92YXJgLgorCisKK1RoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IG11c3QgYmUgYE9QVF9FTkQoKWAuCisKK0lmIG5vdCBzdGF0ZWQgb3RoZXJ3aXNlLCBpbnRlcnByZXQgdGhlIGFyZ3VtZW50cyBhcyBmb2xsb3dzOgorCisqIGBzaG9ydGAgaXMgYSBjaGFyYWN0ZXIgZm9yIHRoZSBzaG9ydCBvcHRpb24KKyAgKGUuZy4gYCdlJ2AgZm9yIGAtZWAsIHVzZSBgMGAgdG8gb21pdCksCisKKyogYGxvbmdgIGlzIGEgc3RyaW5nIGZvciB0aGUgbG9uZyBvcHRpb24KKyAgKGUuZy4gYCJleGFtcGxlImAgZm9yIGAtLWV4YW1wbGVgLCB1c2UgYE5VTExgIHRvIG9taXQpLAorCisqIGBpbnRfdmFyYCBpcyBhbiBpbnRlZ2VyIHZhcmlhYmxlLAorCisqIGBzdHJfdmFyYCBpcyBhIHN0cmluZyB2YXJpYWJsZSAoYGNoYXIgKmApLAorCisqIGBhcmdfc3RyYCBpcyB0aGUgc3RyaW5nIHRoYXQgaXMgc2hvd24gYXMgYXJndW1lbnQKKyAgKGUuZy4gYCJicmFuY2giYCB3aWxsIHJlc3VsdCBpbiBgPGJyYW5jaD5gKS4KKyAgSWYgc2V0IHRvIGBOVUxMYCwgdGhyZWUgZG90cyAoYC4uLmApIHdpbGwgYmUgZGlzcGxheWVkLgorCisqIGBkZXNjcmlwdGlvbmAgaXMgYSBzaG9ydCBzdHJpbmcgdG8gZGVzY3JpYmUgdGhlIGVmZmVjdCBvZiB0aGUgb3B0aW9uLgorICBJdCBzaGFsbCBiZWdpbiB3aXRoIGEgbG93ZXItY2FzZSBsZXR0ZXIgYW5kIGEgZnVsbCBzdG9wIChgLmApIHNoYWxsIGJlCisgIG9taXR0ZWQgYXQgdGhlIGVuZC4KKworT3B0aW9uIENhbGxiYWNrcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnVuY3Rpb24gbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgZm9ybToKKworCWludCBmdW5jKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCisKK1RoZSBjYWxsYmFjayBtZWNoYW5pc20gaXMgYXMgZm9sbG93czoKKworKiBJbnNpZGUgYGZ1bmNgLCB0aGUgb25seSBpbnRlcmVzdGluZyBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZQorICBnaXZlbiBieSBgb3B0YCBpcyB0aGUgdm9pZCBwb2ludGVyIGBvcHQtPnZhbHVlYC4KKyAgYCpvcHQtPnZhbHVlYCB3aWxsIGJlIHRoZSB2YWx1ZSB0aGF0IGlzIHNhdmVkIGludG8gYHZhcmAsIGlmIHlvdQorICB1c2UgYE9QVF9DQUxMQkFDSygpYC4KKyAgRm9yIGV4YW1wbGUsIGRvIGAqKHVuc2lnbmVkIGxvbmcgKilvcHQtPnZhbHVlID0gNDI7YCB0byBnZXQgNDIKKyAgaW50byBhbiBgdW5zaWduZWQgbG9uZ2AgdmFyaWFibGUuCisKKyogUmV0dXJuIHZhbHVlIGAwYCBpbmRpY2F0ZXMgc3VjY2VzcyBhbmQgbm9uLXplcm8gcmV0dXJuCisgIHZhbHVlIHdpbGwgaW52b2tlIGB1c2FnZV93aXRoX29wdGlvbnMoKWAgYW5kLCB0aHVzLCBkaWUuCisKKyogSWYgdGhlIHVzZXIgbmVnYXRlcyB0aGUgb3B0aW9uLCBgYXJnYCBpcyBgTlVMTGAgYW5kIGB1bnNldGAgaXMgMS4KKworU29waGlzdGljYXRlZCBvcHRpb24gcGFyc2luZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbmVlZCwgZm9yIGV4YW1wbGUsIG9wdGlvbiBjYWxsYmFja3Mgd2l0aCBvcHRpb25hbCBhcmd1bWVudHMKK29yIHdpdGhvdXQgYXJndW1lbnRzIGF0IGFsbCwgb3IgaWYgeW91IG5lZWQgb3RoZXIgc3BlY2lhbCBjYXNlcywKK3RoYXQgYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBtYWNyb3MgYWJvdmUsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlCittZW1iZXJzIG9mIHRoZSBgb3B0aW9uYCBzdHJ1Y3R1cmUgbWFudWFsbHkuCisKK1RoaXMgaXMgbm90IGNvdmVyZWQgaW4gdGhpcyBkb2N1bWVudCwgYnV0IHdlbGwgZG9jdW1lbnRlZAoraW4gYHBhcnNlLW9wdGlvbnMuaGAgaXRzZWxmLgorCitFeGFtcGxlcworLS0tLS0tLS0KKworU2VlIGB0ZXN0LXBhcnNlLW9wdGlvbnMuY2AgYW5kCitgYnVpbHRpbi9hZGQuY2AsCitgYnVpbHRpbi9jbG9uZS5jYCwKK2BidWlsdGluL2NvbW1pdC5jYCwKK2BidWlsdGluL2ZldGNoLmNgLAorYGJ1aWx0aW4vZnNjay5jYCwKK2BidWlsdGluL3JtLmNgCitmb3IgcmVhbC13b3JsZCBleGFtcGxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyYWNlMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwN2NlYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CkBAIC0wLDAgKzEsMTE3MCBAQAorPSBUcmFjZTIgQVBJCisKK1RoZSBUcmFjZTIgQVBJIGNhbiBiZSB1c2VkIHRvIHByaW50IGRlYnVnLCBwZXJmb3JtYW5jZSwgYW5kIHRlbGVtZXRyeQoraW5mb3JtYXRpb24gdG8gc3RkZXJyIG9yIGEgZmlsZS4gIFRoZSBUcmFjZTIgZmVhdHVyZSBpcyBpbmFjdGl2ZSB1bmxlc3MKK2V4cGxpY2l0bHkgZW5hYmxlZCBieSBlbmFibGluZyBvbmUgb3IgbW9yZSBUcmFjZTIgVGFyZ2V0cy4KKworVGhlIFRyYWNlMiBBUEkgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgKFRyYWNlMSkKK3ByaW50Zi1zdHlsZSB0cmFjaW5nIHByb3ZpZGVkIGJ5IHRoZSBleGlzdGluZyBgR0lUX1RSQUNFYCBhbmQKK2BHSVRfVFJBQ0VfUEVSRk9STUFOQ0VgIGZhY2lsaXRpZXMuICBEdXJpbmcgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwKK1RyYWNlMiBhbmQgVHJhY2UxIG1heSBvcGVyYXRlIGluIHBhcmFsbGVsLgorCitUaGUgVHJhY2UyIEFQSSBkZWZpbmVzIGEgc2V0IG9mIGhpZ2gtbGV2ZWwgbWVzc2FnZXMgd2l0aCBrbm93biBmaWVsZHMsCitzdWNoIGFzIChgc3RhcnRgOiBgYXJndmApIGFuZCAoYGV4aXRgOiB7YGV4aXQtY29kZWAsIGBlbGFwc2VkLXRpbWVgfSkuCisKK1RyYWNlMiBpbnN0cnVtZW50YXRpb24gdGhyb3VnaG91dCB0aGUgR2l0IGNvZGUgYmFzZSBzZW5kcyBUcmFjZTIKK21lc3NhZ2VzIHRvIHRoZSBlbmFibGVkIFRyYWNlMiBUYXJnZXRzLiAgVGFyZ2V0cyB0cmFuc2Zvcm0gdGhlc2UKK21lc3NhZ2VzIGNvbnRlbnQgaW50byBwdXJwb3NlLXNwZWNpZmljIGZvcm1hdHMgYW5kIHdyaXRlIGV2ZW50cyB0bwordGhlaXIgZGF0YSBzdHJlYW1zLiAgSW4gdGhpcyBtYW5uZXIsIHRoZSBUcmFjZTIgQVBJIGNhbiBkcml2ZQorbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgYW5hbHlzaXMuCisKK1RhcmdldHMgYXJlIGRlZmluZWQgdXNpbmcgYSBWVGFibGUgYWxsb3dpbmcgZWFzeSBleHRlbnNpb24gdG8gb3RoZXIKK2Zvcm1hdHMgaW4gdGhlIGZ1dHVyZS4gIFRoaXMgbWlnaHQgYmUgdXNlZCB0byBkZWZpbmUgYSBiaW5hcnkgZm9ybWF0LAorZm9yIGV4YW1wbGUuCisKK1RyYWNlMiBpcyBjb250cm9sbGVkIHVzaW5nIGB0cmFjZTIuKmAgY29uZmlnIHZhbHVlcyBpbiB0aGUgc3lzdGVtIGFuZAorZ2xvYmFsIGNvbmZpZyBmaWxlcyBhbmQgYEdJVF9UUkFDRTIqYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUcmFjZTIgZG9lcworbm90IHJlYWQgZnJvbSByZXBvIGxvY2FsIG9yIHdvcmt0cmVlIGNvbmZpZyBmaWxlcyBvciByZXNwZWN0IGAtY2AKK2NvbW1hbmQgbGluZSBjb25maWcgc2V0dGluZ3MuCisKKz09IFRyYWNlMiBUYXJnZXRzCisKK1RyYWNlMiBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgc2V0IG9mIFRyYWNlMiBUYXJnZXRzLgorRm9ybWF0IGRldGFpbHMgYXJlIGdpdmVuIGluIGEgbGF0ZXIgc2VjdGlvbi4KKworPT09IFRoZSBOb3JtYWwgRm9ybWF0IFRhcmdldAorCitUaGUgbm9ybWFsIGZvcm1hdCB0YXJnZXQgaXMgYSB0cmFkaXRpb24gcHJpbnRmIGZvcm1hdCBhbmQgc2ltaWxhcgordG8gR0lUX1RSQUNFIGZvcm1hdC4gIFRoaXMgZm9ybWF0IGlzIGVuYWJsZWQgd2l0aCB0aGUgYEdJVF9UUkFDRTJgCitlbnZpcm9ubWVudCB2YXJpYWJsZSBvciB0aGUgYHRyYWNlMi5ub3JtYWxUYXJnZXRgIHN5c3RlbSBvciBnbG9iYWwKK2NvbmZpZyBzZXR0aW5nLgorCitGb3IgZXhhbXBsZQorCistLS0tLS0tLS0tLS0KKyQgZXhwb3J0IEdJVF9UUkFDRTI9fi9sb2cubm9ybWFsCiskIGdpdCB2ZXJzaW9uCitnaXQgdmVyc2lvbiAyLjIwLjEuMTU1Lmc0MjZjOTZmY2RiCistLS0tLS0tLS0tLS0KKworb3IKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdHJhY2UyLm5vcm1hbFRhcmdldCB+L2xvZy5ub3JtYWwKKyQgZ2l0IHZlcnNpb24KK2dpdCB2ZXJzaW9uIDIuMjAuMS4xNTUuZzQyNmM5NmZjZGIKKy0tLS0tLS0tLS0tLQorCit5aWVsZHMKKworLS0tLS0tLS0tLS0tCiskIGNhdCB+L2xvZy5ub3JtYWwKKzEyOjI4OjQyLjYyMDAwOSBjb21tb24tbWFpbi5jOjM4ICAgICAgICAgICAgICAgICAgdmVyc2lvbiAyLjIwLjEuMTU1Lmc0MjZjOTZmY2RiCisxMjoyODo0Mi42MjA5ODkgY29tbW9uLW1haW4uYzozOSAgICAgICAgICAgICAgICAgIHN0YXJ0IGdpdCB2ZXJzaW9uCisxMjoyODo0Mi42MjExMDEgZ2l0LmM6NDMyICAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9uYW1lIHZlcnNpb24gKHZlcnNpb24pCisxMjoyODo0Mi42MjEyMTUgZ2l0LmM6NjYyICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgZWxhcHNlZDowLjAwMTIyNyBjb2RlOjAKKzEyOjI4OjQyLjYyMTI1MCB0cmFjZTIvdHIyX3RndF9ub3JtYWwuYzoxMjQgICAgICAgYXRleGl0IGVsYXBzZWQ6MC4wMDEyNjUgY29kZTowCistLS0tLS0tLS0tLS0KKworPT09IFRoZSBQZXJmb3JtYW5jZSBGb3JtYXQgVGFyZ2V0CisKK1RoZSBwZXJmb3JtYW5jZSBmb3JtYXQgdGFyZ2V0IChQRVJGKSBpcyBhIGNvbHVtbi1iYXNlZCBmb3JtYXQgdG8KK3JlcGxhY2UgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIGFuZCBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgYW5kCit0ZXN0aW5nLCBwb3NzaWJseSB0byBjb21wbGVtZW50IHRvb2xzIGxpa2UgZ3Byb2YuICBUaGlzIGZvcm1hdCBpcworZW5hYmxlZCB3aXRoIHRoZSBgR0lUX1RSQUNFMl9QRVJGYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciB0aGUKK2B0cmFjZTIucGVyZlRhcmdldGAgc3lzdGVtIG9yIGdsb2JhbCBjb25maWcgc2V0dGluZy4KKworRm9yIGV4YW1wbGUKKworLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfVFJBQ0UyX1BFUkY9fi9sb2cucGVyZgorJCBnaXQgdmVyc2lvbgorZ2l0IHZlcnNpb24gMi4yMC4xLjE1NS5nNDI2Yzk2ZmNkYgorLS0tLS0tLS0tLS0tCisKK29yCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHRyYWNlMi5wZXJmVGFyZ2V0IH4vbG9nLnBlcmYKKyQgZ2l0IHZlcnNpb24KK2dpdCB2ZXJzaW9uIDIuMjAuMS4xNTUuZzQyNmM5NmZjZGIKKy0tLS0tLS0tLS0tLQorCit5aWVsZHMKKworLS0tLS0tLS0tLS0tCiskIGNhdCB+L2xvZy5wZXJmCisxMjoyODo0Mi42MjA2NzUgY29tbW9uLW1haW4uYzozOCAgICAgICAgICAgICAgICAgIHwgZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCB2ZXJzaW9uICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgMi4yMC4xLjE1NS5nNDI2Yzk2ZmNkYgorMTI6Mjg6NDIuNjIxMDAxIGNvbW1vbi1tYWluLmM6MzkgICAgICAgICAgICAgICAgICB8IGQwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgc3RhcnQgICAgICAgIHwgICAgIHwgIDAuMDAxMTczIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGdpdCB2ZXJzaW9uCisxMjoyODo0Mi42MjExMTEgZ2l0LmM6NDMyICAgICAgICAgICAgICAgICAgICAgICAgIHwgZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBjbWRfbmFtZSAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgdmVyc2lvbiAodmVyc2lvbikKKzEyOjI4OjQyLjYyMTIyNSBnaXQuYzo2NjIgICAgICAgICAgICAgICAgICAgICAgICAgfCBkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGV4aXQgICAgICAgICB8ICAgICB8ICAwLjAwMTIyNyB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBjb2RlOjAKKzEyOjI4OjQyLjYyMTI1OSB0cmFjZTIvdHIyX3RndF9wZXJmLmM6MjExICAgICAgICAgfCBkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGF0ZXhpdCAgICAgICB8ICAgICB8ICAwLjAwMTI2NSB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBjb2RlOjAKKy0tLS0tLS0tLS0tLQorCis9PT0gVGhlIEV2ZW50IEZvcm1hdCBUYXJnZXQKKworVGhlIGV2ZW50IGZvcm1hdCB0YXJnZXQgaXMgYSBKU09OLWJhc2VkIGZvcm1hdCBvZiBldmVudCBkYXRhIHN1aXRhYmxlCitmb3IgdGVsZW1ldHJ5IGFuYWx5c2lzLiAgVGhpcyBmb3JtYXQgaXMgZW5hYmxlZCB3aXRoIHRoZSBgR0lUX1RSQUNFMl9FVkVOVGAKK2Vudmlyb25tZW50IHZhcmlhYmxlIG9yIHRoZSBgdHJhY2UyLmV2ZW50VGFyZ2V0YCBzeXN0ZW0gb3IgZ2xvYmFsIGNvbmZpZworc2V0dGluZy4KKworRm9yIGV4YW1wbGUKKworLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfVFJBQ0UyX0VWRU5UPX4vbG9nLmV2ZW50CiskIGdpdCB2ZXJzaW9uCitnaXQgdmVyc2lvbiAyLjIwLjEuMTU1Lmc0MjZjOTZmY2RiCistLS0tLS0tLS0tLS0KKworb3IKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdHJhY2UyLmV2ZW50VGFyZ2V0IH4vbG9nLmV2ZW50CiskIGdpdCB2ZXJzaW9uCitnaXQgdmVyc2lvbiAyLjIwLjEuMTU1Lmc0MjZjOTZmY2RiCistLS0tLS0tLS0tLS0KKworeWllbGRzCisKKy0tLS0tLS0tLS0tLQorJCBjYXQgfi9sb2cuZXZlbnQKK3siZXZlbnQiOiJ2ZXJzaW9uIiwic2lkIjoic2lkIjoiMjAxOTA0MDhUMTkxNjEwLjUwNzAxOFotSDliNjhjMzVmLVAwMDAwNTlhOCIsInRocmVhZCI6Im1haW4iLCJ0aW1lIjoiMjAxOS0wMS0xNlQxNzoyODo0Mi42MjA3MTNaIiwiZmlsZSI6ImNvbW1vbi1tYWluLmMiLCJsaW5lIjozOCwiZXZ0IjoiMiIsImV4ZSI6IjIuMjAuMS4xNTUuZzQyNmM5NmZjZGIifQoreyJldmVudCI6InN0YXJ0Iiwic2lkIjoiMjAxOTA0MDhUMTkxNjEwLjUwNzAxOFotSDliNjhjMzVmLVAwMDAwNTlhOCIsInRocmVhZCI6Im1haW4iLCJ0aW1lIjoiMjAxOS0wMS0xNlQxNzoyODo0Mi42MjEwMjdaIiwiZmlsZSI6ImNvbW1vbi1tYWluLmMiLCJsaW5lIjozOSwidF9hYnMiOjAuMDAxMTczLCJhcmd2IjpbImdpdCIsInZlcnNpb24iXX0KK3siZXZlbnQiOiJjbWRfbmFtZSIsInNpZCI6IjIwMTkwNDA4VDE5MTYxMC41MDcwMThaLUg5YjY4YzM1Zi1QMDAwMDU5YTgiLCJ0aHJlYWQiOiJtYWluIiwidGltZSI6IjIwMTktMDEtMTZUMTc6Mjg6NDIuNjIxMTIyWiIsImZpbGUiOiJnaXQuYyIsImxpbmUiOjQzMiwibmFtZSI6InZlcnNpb24iLCJoaWVyYXJjaHkiOiJ2ZXJzaW9uIn0KK3siZXZlbnQiOiJleGl0Iiwic2lkIjoiMjAxOTA0MDhUMTkxNjEwLjUwNzAxOFotSDliNjhjMzVmLVAwMDAwNTlhOCIsInRocmVhZCI6Im1haW4iLCJ0aW1lIjoiMjAxOS0wMS0xNlQxNzoyODo0Mi42MjEyMzZaIiwiZmlsZSI6ImdpdC5jIiwibGluZSI6NjYyLCJ0X2FicyI6MC4wMDEyMjcsImNvZGUiOjB9Cit7ImV2ZW50IjoiYXRleGl0Iiwic2lkIjoiMjAxOTA0MDhUMTkxNjEwLjUwNzAxOFotSDliNjhjMzVmLVAwMDAwNTlhOCIsInRocmVhZCI6Im1haW4iLCJ0aW1lIjoiMjAxOS0wMS0xNlQxNzoyODo0Mi42MjEyNjhaIiwiZmlsZSI6InRyYWNlMi90cjJfdGd0X2V2ZW50LmMiLCJsaW5lIjoxNjMsInRfYWJzIjowLjAwMTI2NSwiY29kZSI6MH0KKy0tLS0tLS0tLS0tLQorCis9PT0gRW5hYmxpbmcgYSBUYXJnZXQKKworVG8gZW5hYmxlIGEgdGFyZ2V0LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IKK3N5c3RlbSBvciBnbG9iYWwgY29uZmlnIHZhbHVlIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCitpbmNsdWRlOjouLi90cmFjZTItdGFyZ2V0LXZhbHVlcy50eHRbXQorCitXaGVuIHRyYWNlIGZpbGVzIGFyZSB3cml0dGVuIHRvIGEgdGFyZ2V0IGRpcmVjdG9yeSwgdGhleSB3aWxsIGJlIG5hbWVkIGFjY29yZGluZwordG8gdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBTSUQgKG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBjb3VudGVyIHRvIGF2b2lkCitmaWxlbmFtZSBjb2xsaXNpb25zKS4KKworPT0gVHJhY2UyIEFQSQorCitBbGwgcHVibGljIFRyYWNlMiBmdW5jdGlvbnMgYW5kIG1hY3JvcyBhcmUgZGVmaW5lZCBpbiBgdHJhY2UyLmhgIGFuZAorYHRyYWNlMi5jYC4gIEFsbCBwdWJsaWMgc3ltYm9scyBhcmUgcHJlZml4ZWQgd2l0aCBgdHJhY2UyX2AuCisKK1RoZXJlIGFyZSBubyBwdWJsaWMgVHJhY2UyIGRhdGEgc3RydWN0dXJlcy4KKworVGhlIFRyYWNlMiBjb2RlIGFsc28gZGVmaW5lcyBhIHNldCBvZiBwcml2YXRlIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcworaW4gdGhlIGB0cmFjZTIvYCBkaXJlY3RvcnkuICBUaGVzZSBzeW1ib2xzIGFyZSBwcmVmaXhlZCB3aXRoIGB0cjJfYAorYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZnVuY3Rpb25zIGluIGB0cmFjZTIuY2AuCisKKz09IENvbnZlbnRpb25zIGZvciBQdWJsaWMgRnVuY3Rpb25zIGFuZCBNYWNyb3MKKworVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSBUcmFjZTIgQVBJIGFyZSBkZWNsYXJlZCBhbmQgZG9jdW1lbnRlZAoraW4gYHRyYWNlMi5oYC4gIEl0IGRlZmluZXMgdGhlIEFQSSBmdW5jdGlvbnMgYW5kIHdyYXBwZXIgbWFjcm9zIGZvcgorVHJhY2UyLgorCitTb21lIGZ1bmN0aW9ucyBoYXZlIGEgYF9mbCgpYCBzdWZmaXggdG8gaW5kaWNhdGUgdGhhdCB0aGV5IHRha2UgYGZpbGVgCithbmQgYGxpbmUtbnVtYmVyYCBhcmd1bWVudHMuCisKK1NvbWUgZnVuY3Rpb25zIGhhdmUgYSBgX3ZhX2ZsKClgIHN1ZmZpeCB0byBpbmRpY2F0ZSB0aGF0IHRoZXkgYWxzbwordGFrZSBhIGB2YV9saXN0YCBhcmd1bWVudC4KKworU29tZSBmdW5jdGlvbnMgaGF2ZSBhIGBfcHJpbnRmX2ZsKClgIHN1ZmZpeCB0byBpbmRpY2F0ZSB0aGF0IHRoZXkgYWxzbwordGFrZSBhIHZhcmFyZ3MgYXJndW1lbnQuCisKK1RoZXJlIGFyZSBDUFAgd3JhcHBlciBtYWNyb3MgYW5kIGlmZGVmcyB0byBoaWRlIG1vc3Qgb2YgdGhlc2UgZGV0YWlscy4KK1NlZSBgdHJhY2UyLmhgIGZvciBtb3JlIGRldGFpbHMuICBUaGUgZm9sbG93aW5nIGRpc2N1c3Npb24gd2lsbCBvbmx5CitkZXNjcmliZSB0aGUgc2ltcGxpZmllZCBmb3Jtcy4KKworPT0gUHVibGljIEFQSQorCitBbGwgVHJhY2UyIEFQSSBmdW5jdGlvbnMgc2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG9mIHRoZSBhY3RpdmUKK1RyYWNlMiBUYXJnZXRzLiAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc2V0IG9mIGF2YWlsYWJsZQorbWVzc2FnZXMuCisKK0l0IGhlbHBzIHRvIGRpdmlkZSB0aGVzZSBmdW5jdGlvbnMgaW50byBncm91cHMgZm9yIGRpc2N1c3Npb24KK3B1cnBvc2VzLgorCis9PT0gQmFzaWMgQ29tbWFuZCBNZXNzYWdlcworCitUaGVzZSBhcmUgY29uY2VybmVkIHdpdGggdGhlIGxpZmV0aW1lIG9mIHRoZSBvdmVyYWxsIGdpdCBwcm9jZXNzLgorZS5nOiBgdm9pZCB0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jaygpYCwgYHZvaWQgdHJhY2UyX2luaXRpYWxpemUoKWAsCitgaW50IHRyYWNlMl9pc19lbmFibGVkKClgLCBgdm9pZCB0cmFjZTJfY21kX3N0YXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilgLgorCis9PT0gQ29tbWFuZCBEZXRhaWwgTWVzc2FnZXMKKworVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljIEdpdCBjb21tYW5kCithZnRlciB0aGUgY29tbWFuZCBsaW5lLCBjb25maWcsIGFuZCBlbnZpcm9ubWVudCBhcmUgaW5zcGVjdGVkLgorZS5nOiBgdm9pZCB0cmFjZTJfY21kX25hbWUoY29uc3QgY2hhciAqbmFtZSlgLAorYHZvaWQgdHJhY2UyX2NtZF9tb2RlKGNvbnN0IGNoYXIgKm1vZGUpYC4KKworPT09IENoaWxkIFByb2Nlc3MgTWVzc2FnZXMKKworVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSB2YXJpb3VzIHNwYXduZWQgY2hpbGQgcHJvY2Vzc2VzLAoraW5jbHVkaW5nIHNoZWxsIHNjcmlwdHMsIGdpdCBjb21tYW5kcywgZWRpdG9ycywgcGFnZXJzLCBhbmQgaG9va3MuCisKK2UuZzogYHZvaWQgdHJhY2UyX2NoaWxkX3N0YXJ0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpYC4KKworPT09IEdpdCBUaHJlYWQgTWVzc2FnZXMKKworVGhlc2UgbWVzc2FnZXMgYXJlIGNvbmNlcm5lZCB3aXRoIEdpdCB0aHJlYWQgdXNhZ2UuCisKK2UuZzogYHZvaWQgdHJhY2UyX3RocmVhZF9zdGFydChjb25zdCBjaGFyICp0aHJlYWRfbmFtZSlgLgorCis9PT0gUmVnaW9uIGFuZCBEYXRhIE1lc3NhZ2VzCisKK1RoZXNlIGFyZSBjb25jZXJuZWQgd2l0aCByZWNvcmRpbmcgcGVyZm9ybWFuY2UgZGF0YQorb3ZlciByZWdpb25zIG9yIHNwYW5zIG9mIGNvZGUuIGUuZzoKK2B2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXIoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbylgLgorCitSZWZlciB0byB0cmFjZTIuaCBmb3IgZGV0YWlscyBhYm91dCBhbGwgdHJhY2UyIGZ1bmN0aW9ucy4KKworPT0gVHJhY2UyIFRhcmdldCBGb3JtYXRzCisKKz09PSBOT1JNQUwgRm9ybWF0CisKK0V2ZW50cyBhcmUgd3JpdHRlbiBhcyBsaW5lcyBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tCitbPHRpbWU+IFNQIDxmaWxlbmFtZT46PGxpbmU+IFNQK10gPGV2ZW50LW5hbWU+IFtbU1BdIDxldmVudC1tZXNzYWdlPl0gTEYKKy0tLS0tLS0tLS0tLQorCitgPGV2ZW50LW5hbWU+YDo6CisKKwlpcyB0aGUgZXZlbnQgbmFtZS4KKworYDxldmVudC1tZXNzYWdlPmA6OgorCWlzIGEgZnJlZS1mb3JtIHByaW50ZiBtZXNzYWdlIGludGVuZGVkIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKysKK05vdGUgdGhhdCB0aGlzIG1heSBjb250YWluIGVtYmVkZGVkIExGIG9yIENSTEYgY2hhcmFjdGVycyB0aGF0IGFyZQorbm90IGVzY2FwZWQsIHNvIHRoZSBldmVudCBtYXkgc3BpbGwgYWNyb3NzIG11bHRpcGxlIGxpbmVzLgorCitJZiBgR0lUX1RSQUNFMl9CUklFRmAgb3IgYHRyYWNlMi5ub3JtYWxCcmllZmAgaXMgdHJ1ZSwgdGhlIGB0aW1lYCwgYGZpbGVuYW1lYCwKK2FuZCBgbGluZWAgZmllbGRzIGFyZSBvbWl0dGVkLgorCitUaGlzIHRhcmdldCBpcyBpbnRlbmRlZCB0byBiZSBtb3JlIG9mIGEgc3VtbWFyeSAobGlrZSBHSVRfVFJBQ0UpIGFuZAorbGVzcyBkZXRhaWxlZCB0aGFuIHRoZSBvdGhlciB0YXJnZXRzLiAgSXQgaWdub3JlcyB0aHJlYWQsIHJlZ2lvbiwgYW5kCitkYXRhIG1lc3NhZ2VzLCBmb3IgZXhhbXBsZS4KKworPT09IFBFUkYgRm9ybWF0CisKK0V2ZW50cyBhcmUgd3JpdHRlbiBhcyBsaW5lcyBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tCitbPHRpbWU+IFNQIDxmaWxlbmFtZT46PGxpbmU+IFNQKworICAgIEJBUiBTUF0gZDxkZXB0aD4gU1AKKyAgICBCQVIgU1AgPHRocmVhZC1uYW1lPiBTUCsKKyAgICBCQVIgU1AgPGV2ZW50LW5hbWU+IFNQKworICAgIEJBUiBTUCBbcjxyZXBvLWlkPl0gU1ArCisgICAgQkFSIFNQIFs8dF9hYnM+XSBTUCsKKyAgICBCQVIgU1AgWzx0X3JlbD5dIFNQKworICAgIEJBUiBTUCBbPGNhdGVnb3J5Pl0gU1ArCisgICAgQkFSIFNQIERPVFMqIDxwZXJmLWV2ZW50LW1lc3NhZ2U+CisgICAgTEYKKy0tLS0tLS0tLS0tLQorCitgPGRlcHRoPmA6OgorCWlzIHRoZSBnaXQgcHJvY2VzcyBkZXB0aC4gIFRoaXMgaXMgdGhlIG51bWJlciBvZiBwYXJlbnQKKwlnaXQgcHJvY2Vzc2VzLiAgQSB0b3AtbGV2ZWwgZ2l0IGNvbW1hbmQgaGFzIGRlcHRoIHZhbHVlICJkMCIuCisJQSBjaGlsZCBvZiBpdCBoYXMgZGVwdGggdmFsdWUgImQxIi4gIEEgc2Vjb25kIGxldmVsIGNoaWxkCisJaGFzIGRlcHRoIHZhbHVlICJkMiIgYW5kIHNvIG9uLgorCitgPHRocmVhZC1uYW1lPmA6OgorCWlzIGEgdW5pcXVlIG5hbWUgZm9yIHRoZSB0aHJlYWQuICBUaGUgcHJpbWFyeSB0aHJlYWQKKwlpcyBjYWxsZWQgIm1haW4iLiAgT3RoZXIgdGhyZWFkIG5hbWVzIGFyZSBvZiB0aGUgZm9ybSAidGglZDolcyIKKwlhbmQgaW5jbHVkZSBhIHVuaXF1ZSBudW1iZXIgYW5kIHRoZSBuYW1lIG9mIHRoZSB0aHJlYWQtcHJvYy4KKworYDxldmVudC1uYW1lPmA6OgorCWlzIHRoZSBldmVudCBuYW1lLgorCitgPHJlcG8taWQ+YDo6CisJd2hlbiBwcmVzZW50LCBpcyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSByZXBvc2l0b3J5CisJaW4gdXNlLiAgQSBgZGVmX3JlcG9gIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIHJlcG9zaXRvcnkgaXMKKwlvcGVuZWQuICBUaGlzIGRlZmluZXMgdGhlIHJlcG8taWQgYW5kIGFzc29jaWF0ZWQgd29ya3RyZWUuCisJU3Vic2VxdWVudCByZXBvLXNwZWNpZmljIGV2ZW50cyB3aWxsIHJlZmVyZW5jZSB0aGlzIHJlcG8taWQuCisrCitDdXJyZW50bHksIHRoaXMgaXMgYWx3YXlzICJyMSIgZm9yIHRoZSBtYWluIHJlcG9zaXRvcnkuCitUaGlzIGZpZWxkIGlzIGluIGFudGljaXBhdGlvbiBvZiBpbi1wcm9jIHN1Ym1vZHVsZXMgaW4gdGhlIGZ1dHVyZS4KKworYDx0X2Ficz5gOjoKKwl3aGVuIHByZXNlbnQsIGlzIHRoZSBhYnNvbHV0ZSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlCisJcHJvZ3JhbSBzdGFydGVkLgorCitgPHRfcmVsPmA6OgorCXdoZW4gcHJlc2VudCwgaXMgdGltZSBpbiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZgorCXRoZSBjdXJyZW50IHJlZ2lvbi4gIEZvciBhIHRocmVhZC1leGl0IGV2ZW50LCBpdCBpcyB0aGUgZWxhcHNlZAorCXRpbWUgb2YgdGhlIHRocmVhZC4KKworYDxjYXRlZ29yeT5gOjoKKwlpcyBwcmVzZW50IG9uIHJlZ2lvbiBhbmQgZGF0YSBldmVudHMgYW5kIGlzIHVzZWQgdG8KKwlpbmRpY2F0ZSBhIGJyb2FkIGNhdGVnb3J5LCBzdWNoIGFzICJpbmRleCIgb3IgInN0YXR1cyIuCisKK2A8cGVyZi1ldmVudC1tZXNzYWdlPmA6OgorCWlzIGEgZnJlZS1mb3JtIHByaW50ZiBtZXNzYWdlIGludGVuZGVkIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKworLS0tLS0tLS0tLS0tCisxNTozMzozMy41MzI3MTIgd3Qtc3RhdHVzLmM6MjMxMCAgICAgICAgICAgICAgICAgIHwgZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCByMSAgfCAgMC4xMjYwNjQgfCAgICAgICAgICAgfCBzdGF0dXMgICAgIHwgbGFiZWw6cHJpbnQKKzE1OjMzOjMzLjUzMjcxMiB3dC1zdGF0dXMuYzoyMzMxICAgICAgICAgICAgICAgICAgfCBkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8IHIxICB8ICAwLjEyNzU2OCB8ICAwLjAwMTUwNCB8IHN0YXR1cyAgICAgfCBsYWJlbDpwcmludAorLS0tLS0tLS0tLS0tCisKK0lmIGBHSVRfVFJBQ0UyX1BFUkZfQlJJRUZgIG9yIGB0cmFjZTIucGVyZkJyaWVmYCBpcyB0cnVlLCB0aGUgYHRpbWVgLCBgZmlsZWAsCithbmQgYGxpbmVgIGZpZWxkcyBhcmUgb21pdHRlZC4KKworLS0tLS0tLS0tLS0tCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8IHIxICB8ICAwLjAxMTcxNyB8ICAwLjAwOTEyMiB8IGluZGV4ICAgICAgfCBsYWJlbDpwcmVsb2FkCistLS0tLS0tLS0tLS0KKworVGhlIFBFUkYgdGFyZ2V0IGlzIGludGVuZGVkIGZvciBpbnRlcmFjdGl2ZSBwZXJmb3JtYW5jZSBhbmFseXNpcworZHVyaW5nIGRldmVsb3BtZW50IGFuZCBpcyBxdWl0ZSBub2lzeS4KKworPT09IEVWRU5UIEZvcm1hdAorCitFYWNoIGV2ZW50IGlzIGEgSlNPTi1vYmplY3QgY29udGFpbmluZyBtdWx0aXBsZSBrZXkvdmFsdWUgcGFpcnMKK3dyaXR0ZW4gYXMgYSBzaW5nbGUgbGluZSBhbmQgZm9sbG93ZWQgYnkgYSBMRi4KKworLS0tLS0tLS0tLS0tCisneycgPGtleT4gJzonIDx2YWx1ZT4gWycsJyA8a2V5PiAnOicgPHZhbHVlPl0qICd9JyBMRgorLS0tLS0tLS0tLS0tCisKK1NvbWUga2V5L3ZhbHVlIHBhaXJzIGFyZSBjb21tb24gdG8gYWxsIGV2ZW50cyBhbmQgc29tZSBhcmUKK2V2ZW50LXNwZWNpZmljLgorCis9PT09IENvbW1vbiBLZXkvVmFsdWUgUGFpcnMKKworVGhlIGZvbGxvd2luZyBrZXkvdmFsdWUgcGFpcnMgYXJlIGNvbW1vbiB0byBhbGwgZXZlbnRzOgorCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJ2ZXJzaW9uIiwKKwkic2lkIjoiMjAxOTA0MDhUMTkxODI3LjI3Mjc1OVotSDliNjhjMzVmLVAwMDAwMzUxMCIsCisJInRocmVhZCI6Im1haW4iLAorCSJ0aW1lIjoiMjAxOS0wNC0wOFQxOToxODoyNy4yODI3NjFaIiwKKwkiZmlsZSI6ImNvbW1vbi1tYWluLmMiLAorCSJsaW5lIjo0MiwKKwkuLi4KK30KKy0tLS0tLS0tLS0tLQorCitgImV2ZW50Ijo8ZXZlbnQ+YDo6CisJaXMgdGhlIGV2ZW50IG5hbWUuCisKK2Aic2lkIjo8c2lkPmA6OgorCWlzIHRoZSBzZXNzaW9uLWlkLiAgVGhpcyBpcyBhIHVuaXF1ZSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlCisJcHJvY2VzcyBpbnN0YW5jZSB0byBhbGxvdyBhbGwgZXZlbnRzIGVtaXR0ZWQgYnkgYSBwcm9jZXNzIHRvCisJYmUgaWRlbnRpZmllZC4gIEEgc2Vzc2lvbi1pZCBpcyB1c2VkIGluc3RlYWQgb2YgYSBQSUQgYmVjYXVzZQorCVBJRHMgYXJlIHJlY3ljbGVkIGJ5IHRoZSBPUy4gIEZvciBjaGlsZCBnaXQgcHJvY2Vzc2VzLCB0aGUKKwlzZXNzaW9uLWlkIGlzIHByZXBlbmRlZCB3aXRoIHRoZSBzZXNzaW9uLWlkIG9mIHRoZSBwYXJlbnQgZ2l0CisJcHJvY2VzcyB0byBhbGxvdyBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcyB0byBiZSBpZGVudGlmaWVkCisJZHVyaW5nIHBvc3QtcHJvY2Vzc2luZy4KKworYCJ0aHJlYWQiOjx0aHJlYWQ+YDo6CisJaXMgdGhlIHRocmVhZCBuYW1lLgorCitgInRpbWUiOjx0aW1lPmA6OgorCWlzIHRoZSBVVEMgdGltZSBvZiB0aGUgZXZlbnQuCisKK2AiZmlsZSI6PGZpbGVuYW1lPmA6OgorCWlzIHNvdXJjZSBmaWxlIGdlbmVyYXRpbmcgdGhlIGV2ZW50LgorCitgImxpbmUiOjxsaW5lLW51bWJlcj5gOjoKKwlpcyB0aGUgaW50ZWdlciBzb3VyY2UgbGluZSBudW1iZXIgZ2VuZXJhdGluZyB0aGUgZXZlbnQuCisKK2AicmVwbyI6PHJlcG8taWQ+YDo6CisJd2hlbiBwcmVzZW50LCBpcyB0aGUgaW50ZWdlciByZXBvLWlkIGFzIGRlc2NyaWJlZCBwcmV2aW91c2x5LgorCitJZiBgR0lUX1RSQUNFMl9FVkVOVF9CUklFRmAgb3IgYHRyYWNlMi5ldmVudEJyaWVmYCBpcyB0cnVlLCB0aGUgYGZpbGVgCithbmQgYGxpbmVgIGZpZWxkcyBhcmUgb21pdHRlZCBmcm9tIGFsbCBldmVudHMgYW5kIHRoZSBgdGltZWAgZmllbGQgaXMKK29ubHkgcHJlc2VudCBvbiB0aGUgInN0YXJ0IiBhbmQgImF0ZXhpdCIgZXZlbnRzLgorCis9PT09IEV2ZW50LVNwZWNpZmljIEtleS9WYWx1ZSBQYWlycworCitgInZlcnNpb24iYDo6CisJVGhpcyBldmVudCBnaXZlcyB0aGUgdmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZSBhbmQgdGhlIEVWRU5UIGZvcm1hdC4gSXQKKwlzaG91bGQgYWx3YXlzIGJlIHRoZSBmaXJzdCBldmVudCBpbiBhIHRyYWNlIHNlc3Npb24uIFRoZSBFVkVOVCBmb3JtYXQKKwl2ZXJzaW9uIHdpbGwgYmUgaW5jcmVtZW50ZWQgaWYgbmV3IGV2ZW50IHR5cGVzIGFyZSBhZGRlZCwgaWYgZXhpc3RpbmcKKwlmaWVsZHMgYXJlIHJlbW92ZWQsIG9yIGlmIHRoZXJlIGFyZSBzaWduaWZpY2FudCBjaGFuZ2VzIGluCisJaW50ZXJwcmV0YXRpb24gb2YgZXhpc3RpbmcgZXZlbnRzIG9yIGZpZWxkcy4gU21hbGxlciBjaGFuZ2VzLCBzdWNoIGFzCisJYWRkaW5nIGEgbmV3IGZpZWxkIHRvIGFuIGV4aXN0aW5nIGV2ZW50LCB3aWxsIG5vdCByZXF1aXJlIGFuIGluY3JlbWVudAorCXRvIHRoZSBFVkVOVCBmb3JtYXQgdmVyc2lvbi4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6InZlcnNpb24iLAorCS4uLgorCSJldnQiOiIyIiwJCSAgICAgICAjIEVWRU5UIGZvcm1hdCB2ZXJzaW9uCisJImV4ZSI6IjIuMjAuMS4xNTUuZzQyNmM5NmZjZGIiICMgZ2l0IHZlcnNpb24KK30KKy0tLS0tLS0tLS0tLQorCitgImRpc2NhcmQiYDo6CisJVGhpcyBldmVudCBpcyB3cml0dGVuIHRvIHRoZSBnaXQtdHJhY2UyLWRpc2NhcmQgc2VudGluZWwgZmlsZSBpZiB0aGVyZQorCWFyZSB0b28gbWFueSBmaWxlcyBpbiB0aGUgdGFyZ2V0IHRyYWNlIGRpcmVjdG9yeSAoc2VlIHRoZQorCXRyYWNlMi5tYXhGaWxlcyBjb25maWcgb3B0aW9uKS4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImRpc2NhcmQiLAorCS4uLgorfQorLS0tLS0tLS0tLS0tCisKK2Aic3RhcnQiYDo6CisJVGhpcyBldmVudCBjb250YWlucyB0aGUgY29tcGxldGUgYXJndiByZWNlaXZlZCBieSBtYWluKCkuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJzdGFydCIsCisJLi4uCisJInRfYWJzIjowLjAwMTIyNywgIyBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcworCSJhcmd2IjpbImdpdCIsInZlcnNpb24iXQorfQorLS0tLS0tLS0tLS0tCisKK2AiZXhpdCJgOjoKKwlUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBnaXQgY2FsbHMgYGV4aXQoKWAuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJleGl0IiwKKwkuLi4KKwkidF9hYnMiOjAuMDAxMjI3LCAjIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzCisJImNvZGUiOjAJICAjIGV4aXQgY29kZQorfQorLS0tLS0tLS0tLS0tCisKK2AiYXRleGl0ImA6OgorCVRoaXMgZXZlbnQgaXMgZW1pdHRlZCBieSB0aGUgVHJhY2UyIGBhdGV4aXRgIHJvdXRpbmUgZHVyaW5nCisJZmluYWwgc2h1dGRvd24uICBJdCBzaG91bGQgYmUgdGhlIGxhc3QgZXZlbnQgZW1pdHRlZCBieSB0aGUKKwlwcm9jZXNzLgorKworKFRoZSBlbGFwc2VkIHRpbWUgcmVwb3J0ZWQgaGVyZSBpcyBncmVhdGVyIHRoYW4gdGhlIHRpbWUgcmVwb3J0ZWQgaW4KK3RoZSAiZXhpdCIgZXZlbnQgYmVjYXVzZSBpdCBydW5zIGFmdGVyIGFsbCBvdGhlciBhdGV4aXQgdGFza3MgaGF2ZQorY29tcGxldGVkLikKKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImF0ZXhpdCIsCisJLi4uCisJInRfYWJzIjowLjAwMTIyNywgIyBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcworCSJjb2RlIjowICAgICAgICAgICMgZXhpdCBjb2RlCit9CistLS0tLS0tLS0tLS0KKworYCJzaWduYWwiYDo6CisJVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gdGhlIHByb2dyYW0gaXMgdGVybWluYXRlZCBieSBhIHVzZXIKKwlzaWduYWwuICBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCB0aGUgc2lnbmFsIGV2ZW50IG1heQorCXByZXZlbnQgdGhlICJhdGV4aXQiIGV2ZW50IGZyb20gYmVpbmcgZ2VuZXJhdGVkLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50Ijoic2lnbmFsIiwKKwkuLi4KKwkidF9hYnMiOjAuMDAxMjI3LCAgIyBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcworCSJzaWdubyI6MTMgICAgICAgICAjIFNJR1RFUk0sIFNJR0lOVCwgZXRjLgorfQorLS0tLS0tLS0tLS0tCisKK2AiZXJyb3IiYDo6CisJVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gb25lIG9mIHRoZSBgZXJyb3IoKWAsIGBkaWUoKWAsCisJb3IgYHVzYWdlKClgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiZXJyb3IiLAorCS4uLgorCSJtc2ciOiJpbnZhbGlkIG9wdGlvbjogLS1jYWhjZWQiLCAjIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlCisJImZtdCI6ImludmFsaWQgb3B0aW9uOiAlcyIJICAjIGVycm9yIGZvcm1hdCBzdHJpbmcKK30KKy0tLS0tLS0tLS0tLQorKworVGhlIGVycm9yIGV2ZW50IG1heSBiZSBlbWl0dGVkIG1vcmUgdGhhbiBvbmNlLiAgVGhlIGZvcm1hdCBzdHJpbmcKK2FsbG93cyBwb3N0LXByb2Nlc3NvcnMgdG8gZ3JvdXAgZXJyb3JzIGJ5IHR5cGUgd2l0aG91dCB3b3JyeWluZworYWJvdXQgc3BlY2lmaWMgZXJyb3IgYXJndW1lbnRzLgorCitgImNtZF9wYXRoImA6OgorCVRoaXMgZXZlbnQgY29udGFpbnMgdGhlIGRpc2NvdmVyZWQgZnVsbCBwYXRoIG9mIHRoZSBnaXQKKwlleGVjdXRhYmxlIChvbiBwbGF0Zm9ybXMgdGhhdCBhcmUgY29uZmlndXJlZCB0byByZXNvbHZlIGl0KS4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImNtZF9wYXRoIiwKKwkuLi4KKwkicGF0aCI6IkM6L3dvcmsvZ2Z3L2dpdC5leGUiCit9CistLS0tLS0tLS0tLS0KKworYCJjbWRfbmFtZSJgOjoKKwlUaGlzIGV2ZW50IGNvbnRhaW5zIHRoZSBjb21tYW5kIG5hbWUgZm9yIHRoaXMgZ2l0IHByb2Nlc3MKKwlhbmQgdGhlIGhpZXJhcmNoeSBvZiBjb21tYW5kcyBmcm9tIHBhcmVudCBnaXQgcHJvY2Vzc2VzLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiY21kX25hbWUiLAorCS4uLgorCSJuYW1lIjoicGFjay1vYmplY3RzIiwKKwkiaGllcmFyY2h5IjoicHVzaC9wYWNrLW9iamVjdHMiCit9CistLS0tLS0tLS0tLS0KKysKK05vcm1hbGx5LCB0aGUgIm5hbWUiIGZpZWxkIGNvbnRhaW5zIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUKK2NvbW1hbmQuICBXaGVuIGEgY2Fub25pY2FsIG5hbWUgaXMgbm90IGF2YWlsYWJsZSwgb25lIG9mCit0aGVzZSBzcGVjaWFsIHZhbHVlcyBhcmUgdXNlZDoKKysKKy0tLS0tLS0tLS0tLQorIl9xdWVyeV8iICAgICAgICAgICAgIyAiZ2l0IC0taHRtbC1wYXRoIgorIl9ydW5fZGFzaGVkXyIgICAgICAgIyB3aGVuICJnaXQgZm9vIiB0cmllcyB0byBydW4gImdpdC1mb28iCisiX3J1bl9zaGVsbF9hbGlhc18iICAjIGFsaWFzIGV4cGFuc2lvbiB0byBhIHNoZWxsIGNvbW1hbmQKKyJfcnVuX2dpdF9hbGlhc18iICAgICMgYWxpYXMgZXhwYW5zaW9uIHRvIGEgZ2l0IGNvbW1hbmQKKyJfdXNhZ2VfIiAgICAgICAgICAgICMgdXNhZ2UgZXJyb3IKKy0tLS0tLS0tLS0tLQorCitgImNtZF9tb2RlImA6OgorCVRoaXMgZXZlbnQsIHdoZW4gcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBjb21tYW5kIHZhcmlhbnQgVGhpcworCWV2ZW50IG1heSBiZSBlbWl0dGVkIG1vcmUgdGhhbiBvbmNlLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiY21kX21vZGUiLAorCS4uLgorCSJuYW1lIjoiYnJhbmNoIgorfQorLS0tLS0tLS0tLS0tCisrCitUaGUgIm5hbWUiIGZpZWxkIGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgdG8gZGVzY3JpYmUgdGhlIGNvbW1hbmQgbW9kZS4KK0ZvciBleGFtcGxlLCBjaGVja291dCBjYW4gY2hlY2tvdXQgYSBicmFuY2ggb3IgYW4gaW5kaXZpZHVhbCBmaWxlLgorQW5kIHRoZXNlIHZhcmlhdGlvbnMgdHlwaWNhbGx5IGhhdmUgZGlmZmVyZW50IHBlcmZvcm1hbmNlCitjaGFyYWN0ZXJpc3RpY3MgdGhhdCBhcmUgbm90IGNvbXBhcmFibGUuCisKK2AiYWxpYXMiYDo6CisJVGhpcyBldmVudCBpcyBwcmVzZW50IHdoZW4gYW4gYWxpYXMgaXMgZXhwYW5kZWQuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJhbGlhcyIsCisJLi4uCisJImFsaWFzIjoibCIsCQkgIyByZWdpc3RlcmVkIGFsaWFzCisJImFyZ3YiOlsibG9nIiwiLS1ncmFwaCJdICMgYWxpYXMgZXhwYW5zaW9uCit9CistLS0tLS0tLS0tLS0KKworYCJjaGlsZF9zdGFydCJgOjoKKwlUaGlzIGV2ZW50IGRlc2NyaWJlcyBhIGNoaWxkIHByb2Nlc3MgdGhhdCBpcyBhYm91dCB0byBiZQorCXNwYXduZWQuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJjaGlsZF9zdGFydCIsCisJLi4uCisJImNoaWxkX2lkIjoyLAorCSJjaGlsZF9jbGFzcyI6Ij8iLAorCSJ1c2Vfc2hlbGwiOmZhbHNlLAorCSJhcmd2IjpbImdpdCIsInJldi1saXN0IiwiLS1vYmplY3RzIiwiLS1zdGRpbiIsIi0tbm90IiwiLS1hbGwiLCItLXF1aWV0Il0KKworCSJob29rX25hbWUiOiI8aG9va19uYW1lPiIgICMgcHJlc2VudCB3aGVuIGNoaWxkX2NsYXNzIGlzICJob29rIgorCSJjZCI6IjxwYXRoPiIJCSAgICMgcHJlc2VudCB3aGVuIGNkIGlzIHJlcXVpcmVkCit9CistLS0tLS0tLS0tLS0KKysKK1RoZSAiY2hpbGRfaWQiIGZpZWxkIGNhbiBiZSB1c2VkIHRvIG1hdGNoIHRoaXMgY2hpbGRfc3RhcnQgd2l0aCB0aGUKK2NvcnJlc3BvbmRpbmcgY2hpbGRfZXhpdCBldmVudC4KKysKK1RoZSAiY2hpbGRfY2xhc3MiIGZpZWxkIGlzIGEgcm91Z2ggY2xhc3NpZmljYXRpb24sIHN1Y2ggYXMgImVkaXRvciIsCisicGFnZXIiLCAidHJhbnNwb3J0LyoiLCBhbmQgImhvb2siLiAgVW5jbGFzc2lmaWVkIGNoaWxkcmVuIGFyZSBjbGFzc2lmaWVkCit3aXRoICI/Ii4KKworYCJjaGlsZF9leGl0ImA6OgorCVRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaGFzIHJldHVybmVkCisJZnJvbSB0aGUgd2FpdHBpZCgpIGFuZCBjb2xsZWN0ZWQgdGhlIGV4aXQgaW5mb3JtYXRpb24gZnJvbSB0aGUKKwljaGlsZC4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImNoaWxkX2V4aXQiLAorCS4uLgorCSJjaGlsZF9pZCI6MiwKKwkicGlkIjoxNDcwOCwJICMgY2hpbGQgUElECisJImNvZGUiOjAsCSAjIGNoaWxkIGV4aXQtY29kZQorCSJ0X3JlbCI6MC4xMTA2MDUgIyBvYnNlcnZlZCBydW4tdGltZSBvZiBjaGlsZCBwcm9jZXNzCit9CistLS0tLS0tLS0tLS0KKysKK05vdGUgdGhhdCB0aGUgc2Vzc2lvbi1pZCBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBub3QgYXZhaWxhYmxlIHRvCit0aGUgY3VycmVudC9zcGF3bmluZyBwcm9jZXNzLCBzbyB0aGUgY2hpbGQncyBQSUQgaXMgcmVwb3J0ZWQgaGVyZSBhcworYSBoaW50IGZvciBwb3N0LXByb2Nlc3NpbmcuICAoQnV0IGl0IGlzIG9ubHkgYSBoaW50IGJlY2F1c2UgdGhlIGNoaWxkCitwcm9jZXNzIG1heSBiZSBhIHNoZWxsIHNjcmlwdCB3aGljaCBkb2Vzbid0IGhhdmUgYSBzZXNzaW9uLWlkLikKKysKK05vdGUgdGhhdCB0aGUgYHRfcmVsYCBmaWVsZCBjb250YWlucyB0aGUgb2JzZXJ2ZWQgcnVuIHRpbWUgaW4gc2Vjb25kcworZm9yIHRoZSBjaGlsZCBwcm9jZXNzIChzdGFydGluZyBiZWZvcmUgdGhlIGZvcmsvZXhlYy9zcGF3biBhbmQKK3N0b3BwaW5nIGFmdGVyIHRoZSB3YWl0cGlkKCkgYW5kIGluY2x1ZGVzIE9TIHByb2Nlc3MgY3JlYXRpb24gb3ZlcmhlYWQpLgorU28gdGhpcyB0aW1lIHdpbGwgYmUgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIGF0ZXhpdCB0aW1lIHJlcG9ydGVkIGJ5Cit0aGUgY2hpbGQgcHJvY2VzcyBpdHNlbGYuCisKK2AiZXhlYyJgOjoKKwlUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBiZWZvcmUgZ2l0IGF0dGVtcHRzIHRvIGBleGVjKClgCisJYW5vdGhlciBjb21tYW5kIHJhdGhlciB0aGFuIHN0YXJ0aW5nIGEgY2hpbGQgcHJvY2Vzcy4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImV4ZWMiLAorCS4uLgorCSJleGVjX2lkIjowLAorCSJleGUiOiJnaXQiLAorCSJhcmd2IjpbImZvbyIsICJiYXIiXQorfQorLS0tLS0tLS0tLS0tCisrCitUaGUgImV4ZWNfaWQiIGZpZWxkIGlzIGEgY29tbWFuZC11bmlxdWUgaWQgYW5kIGlzIG9ubHkgdXNlZnVsIGlmIHRoZQorYGV4ZWMoKWAgZmFpbHMgYW5kIGEgY29ycmVzcG9uZGluZyBleGVjX3Jlc3VsdCBldmVudCBpcyBnZW5lcmF0ZWQuCisKK2AiZXhlY19yZXN1bHQiYDo6CisJVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgaWYgdGhlIGBleGVjKClgIGZhaWxzIGFuZCBjb250cm9sCisJcmV0dXJucyB0byB0aGUgY3VycmVudCBnaXQgY29tbWFuZC4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImV4ZWNfcmVzdWx0IiwKKwkuLi4KKwkiZXhlY19pZCI6MCwKKwkiY29kZSI6MSAgICAgICMgZXJyb3IgY29kZSAoZXJybm8pIGZyb20gZXhlYygpCit9CistLS0tLS0tLS0tLS0KKworYCJ0aHJlYWRfc3RhcnQiYDo6CisJVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhIHRocmVhZCBpcyBzdGFydGVkLiAgSXQgaXMKKwlnZW5lcmF0ZWQgZnJvbSAqd2l0aGluKiB0aGUgbmV3IHRocmVhZCdzIHRocmVhZC1wcm9jIChmb3IgVExTCisJcmVhc29ucykuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJ0aHJlYWRfc3RhcnQiLAorCS4uLgorCSJ0aHJlYWQiOiJ0aDAyOnByZWxvYWRfdGhyZWFkIiAjIHRocmVhZCBuYW1lCit9CistLS0tLS0tLS0tLS0KKworYCJ0aHJlYWRfZXhpdCJgOjoKKwlUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIGEgdGhyZWFkIGV4aXRzLiAgSXQgaXMgZ2VuZXJhdGVkCisJZnJvbSAqd2l0aGluKiB0aGUgdGhyZWFkJ3MgdGhyZWFkLXByb2MgKGZvciBUTFMgcmVhc29ucykuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJ0aHJlYWRfZXhpdCIsCisJLi4uCisJInRocmVhZCI6InRoMDI6cHJlbG9hZF90aHJlYWQiLCAjIHRocmVhZCBuYW1lCisJInRfcmVsIjowLjAwNzMyOCAgICAgICAgICAgICAgICAjIHRocmVhZCBlbGFwc2VkIHRpbWUKK30KKy0tLS0tLS0tLS0tLQorCitgImRlZl9wYXJhbSJgOjoKKwlUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB0byBsb2cgYSBnbG9iYWwgcGFyYW1ldGVyLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiZGVmX3BhcmFtIiwKKwkuLi4KKwkicGFyYW0iOiJjb3JlLmFiYnJldiIsCisJInZhbHVlIjoiNyIKK30KKy0tLS0tLS0tLS0tLQorCitgImRlZl9yZXBvImA6OgorCVRoaXMgZXZlbnQgZGVmaW5lcyBhIHJlcG8taWQgYW5kIGFzc29jaWF0ZXMgaXQgd2l0aCB0aGUgcm9vdAorCW9mIHRoZSB3b3JrdHJlZS4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6ImRlZl9yZXBvIiwKKwkuLi4KKwkicmVwbyI6MSwKKwkid29ya3RyZWUiOiIvVXNlcnMvamVmZmhvc3Qvd29yay9nZnciCit9CistLS0tLS0tLS0tLS0KKysKK0FzIHN0YXRlZCBlYXJsaWVyLCB0aGUgcmVwby1pZCBpcyBjdXJyZW50bHkgYWx3YXlzIDEsIHNvIHRoZXJlIHdpbGwKK29ubHkgYmUgb25lIGRlZl9yZXBvIGV2ZW50LiAgTGF0ZXIsIGlmIGluLXByb2Mgc3VibW9kdWxlcyBhcmUKK3N1cHBvcnRlZCwgYSBkZWZfcmVwbyBldmVudCBzaG91bGQgYmUgZW1pdHRlZCBmb3IgZWFjaCBzdWJtb2R1bGUKK3Zpc2l0ZWQuCisKK2AicmVnaW9uX2VudGVyImA6OgorCVRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gZW50ZXJpbmcgYSByZWdpb24uCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJyZWdpb25fZW50ZXIiLAorCS4uLgorCSJyZXBvIjoxLCAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCisJIm5lc3RpbmciOjEsICAgICAgICAgICAgICMgY3VycmVudCByZWdpb24gc3RhY2sgZGVwdGgKKwkiY2F0ZWdvcnkiOiJpbmRleCIsICAgICAgIyBvcHRpb25hbAorCSJsYWJlbCI6ImRvX3JlYWRfaW5kZXgiLCAjIG9wdGlvbmFsCisJIm1zZyI6Ii5naXQvaW5kZXgiICAgICAgICMgb3B0aW9uYWwKK30KKy0tLS0tLS0tLS0tLQorKworVGhlIGBjYXRlZ29yeWAgZmllbGQgbWF5IGJlIHVzZWQgaW4gYSBmdXR1cmUgZW5oYW5jZW1lbnQgdG8KK2RvIGNhdGVnb3J5LWJhc2VkIGZpbHRlcmluZy4KKysKK2BHSVRfVFJBQ0UyX0VWRU5UX05FU1RJTkdgIG9yIGB0cmFjZTIuZXZlbnROZXN0aW5nYCBjYW4gYmUgdXNlZCB0bworZmlsdGVyIGRlZXBseSBuZXN0ZWQgcmVnaW9ucyBhbmQgZGF0YSBldmVudHMuICBJdCBkZWZhdWx0cyB0byAiMiIuCisKK2AicmVnaW9uX2xlYXZlImA6OgorCVRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gbGVhdmluZyBhIHJlZ2lvbi4KKysKKy0tLS0tLS0tLS0tLQoreworCSJldmVudCI6InJlZ2lvbl9sZWF2ZSIsCisJLi4uCisJInJlcG8iOjEsICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKKwkidF9yZWwiOjAuMDAyODc2LCAgICAgICAgIyB0aW1lIHNwZW50IGluIHJlZ2lvbiBpbiBzZWNvbmRzCisJIm5lc3RpbmciOjEsICAgICAgICAgICAgICMgcmVnaW9uIHN0YWNrIGRlcHRoCisJImNhdGVnb3J5IjoiaW5kZXgiLCAgICAgICMgb3B0aW9uYWwKKwkibGFiZWwiOiJkb19yZWFkX2luZGV4IiwgIyBvcHRpb25hbAorCSJtc2ciOiIuZ2l0L2luZGV4IiAgICAgICAjIG9wdGlvbmFsCit9CistLS0tLS0tLS0tLS0KKworYCJkYXRhImA6OgorCVRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIHRvIGxvZyBhIHRocmVhZC0gYW5kIHJlZ2lvbi1sb2NhbAorCWtleS92YWx1ZSBwYWlyLgorKworLS0tLS0tLS0tLS0tCit7CisJImV2ZW50IjoiZGF0YSIsCisJLi4uCisJInJlcG8iOjEsICAgICAgICAgICAgICAjIG9wdGlvbmFsCisJInRfYWJzIjowLjAyNDEwNywgICAgICAjIGFic29sdXRlIGVsYXBzZWQgdGltZQorCSJ0X3JlbCI6MC4wMDEwMzEsICAgICAgIyBlbGFwc2VkIHRpbWUgaW4gcmVnaW9uL3RocmVhZAorCSJuZXN0aW5nIjoyLCAgICAgICAgICAgIyByZWdpb24gc3RhY2sgZGVwdGgKKwkiY2F0ZWdvcnkiOiJpbmRleCIsCisJImtleSI6InJlYWQvY2FjaGVfbnIiLAorCSJ2YWx1ZSI6IjM1NTIiCit9CistLS0tLS0tLS0tLS0KKysKK1RoZSAidmFsdWUiIGZpZWxkIG1heSBiZSBhbiBpbnRlZ2VyIG9yIGEgc3RyaW5nLgorCitgImRhdGEtanNvbiJgOjoKKwlUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCB0byBsb2cgYSBwcmUtZm9ybWF0dGVkIEpTT04gc3RyaW5nCisJY29udGFpbmluZyBzdHJ1Y3R1cmVkIGRhdGEuCisrCistLS0tLS0tLS0tLS0KK3sKKwkiZXZlbnQiOiJkYXRhX2pzb24iLAorCS4uLgorCSJyZXBvIjoxLCAgICAgICAgICAgICAgIyBvcHRpb25hbAorCSJ0X2FicyI6MC4wMTU5MDUsCisJInRfcmVsIjowLjAxNTkwNSwKKwkibmVzdGluZyI6MSwKKwkiY2F0ZWdvcnkiOiJwcm9jZXNzIiwKKwkia2V5Ijoid2luZG93cy9hbmNlc3RyeSIsCisJInZhbHVlIjpbImJhc2guZXhlIiwiYmFzaC5leGUiXQorfQorLS0tLS0tLS0tLS0tCisKKz09IEV4YW1wbGUgVHJhY2UyIEFQSSBVc2FnZQorCitIZXJlIGlzIGEgaHlwb3RoZXRpY2FsIHVzYWdlIG9mIHRoZSBUcmFjZTIgQVBJIHNob3dpbmcgdGhlIGludGVuZGVkCit1c2FnZSAod2l0aG91dCB3b3JyeWluZyBhYm91dCB0aGUgYWN0dWFsIEdpdCBkZXRhaWxzKS4KKworSW5pdGlhbGl6YXRpb246OgorCisJSW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbiBgbWFpbigpYC4gIEJlaGluZCB0aGUgc2NlbmVzLCBhbgorCWBhdGV4aXRgIGFuZCBgc2lnbmFsYCBoYW5kbGVyIGFyZSByZWdpc3RlcmVkLgorKworLS0tLS0tLS0tLS0tLS0tLQoraW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBleGl0X2NvZGU7CisKKwl0cmFjZTJfaW5pdGlhbGl6ZSgpOworCXRyYWNlMl9jbWRfc3RhcnQoYXJndik7CisKKwlleGl0X2NvZGUgPSBjbWRfbWFpbihhcmdjLCBhcmd2KTsKKworCXRyYWNlMl9jbWRfZXhpdChleGl0X2NvZGUpOworCisJcmV0dXJuIGV4aXRfY29kZTsKK30KKy0tLS0tLS0tLS0tLS0tLS0KKworQ29tbWFuZCBEZXRhaWxzOjoKKworCUFmdGVyIHRoZSBiYXNpY3MgYXJlIGVzdGFibGlzaGVkLCBhZGRpdGlvbmFsIGNvbW1hbmQKKwlpbmZvcm1hdGlvbiBjYW4gYmUgc2VudCB0byBUcmFjZTIgYXMgaXQgaXMgZGlzY292ZXJlZC4KKysKKy0tLS0tLS0tLS0tLS0tLS0KK2ludCBjbWRfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXRyYWNlMl9jbWRfbmFtZSgiY2hlY2tvdXQiKTsKKwl0cmFjZTJfY21kX21vZGUoImJyYW5jaCIpOworCXRyYWNlMl9kZWZfcmVwbyh0aGVfcmVwb3NpdG9yeSk7CisKKwkvLyBlbWl0ICJkZWZfcGFyYW0iIG1lc3NhZ2VzIGZvciAiaW50ZXJlc3RpbmciIGNvbmZpZyBzZXR0aW5ncy4KKwl0cmFjZTJfY21kX2xpc3RfY29uZmlnKCk7CisKKwlpZiAoZG9fc29tZXRoaW5nKCkpCisJICAgIHRyYWNlMl9jbWRfZXJyb3IoIlBhdGggJyVzJzogY2Fubm90IGRvIHNvbWV0aGluZyIsIHBhdGgpOworCisJcmV0dXJuIDA7Cit9CistLS0tLS0tLS0tLS0tLS0tCisKK0NoaWxkIFByb2Nlc3Nlczo6CisKKwlXcmFwIGNvZGUgc3Bhd25pbmcgY2hpbGQgcHJvY2Vzc2VzLgorKworLS0tLS0tLS0tLS0tLS0tLQordm9pZCBydW5fY2hpbGQoLi4uKQoreworCWludCBjaGlsZF9leGl0X2NvZGU7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCS4uLgorCWNtZC50cmFjZTJfY2hpbGRfY2xhc3MgPSAiZWRpdG9yIjsKKworCXRyYWNlMl9jaGlsZF9zdGFydCgmY21kKTsKKwljaGlsZF9leGl0X2NvZGUgPSBzcGF3bl9jaGlsZF9hbmRfd2FpdF9mb3JfaXQoKTsKKwl0cmFjZTJfY2hpbGRfZXhpdCgmY21kLCBjaGlsZF9leGl0X2NvZGUpOworfQorLS0tLS0tLS0tLS0tLS0tLQorKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZmV0Y2ggY29tbWFuZCBzcGF3bmVkIHNzaCwgaW5kZXgtcGFjaywKK3Jldi1saXN0LCBhbmQgZ2MuICBUaGlzIGV4YW1wbGUgYWxzbyBzaG93cyB0aGF0IGZldGNoIHRvb2sKKzUuMTk5IHNlY29uZHMgYW5kIG9mIHRoYXQgNC45MzIgd2FzIGluIHNzaC4KKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZXhwb3J0IEdJVF9UUkFDRTJfQlJJRUY9MQorJCBleHBvcnQgR0lUX1RSQUNFMj1+L2xvZy5ub3JtYWwKKyQgZ2l0IGZldGNoIG9yaWdpbgorLi4uCistLS0tLS0tLS0tLS0tLS0tCisrCistLS0tLS0tLS0tLS0tLS0tCiskIGNhdCB+L2xvZy5ub3JtYWwKK3ZlcnNpb24gMi4yMC4xLnZmcy4xLjEuNDcuZzUzNGRiZTFhZDEKK3N0YXJ0IGdpdCBmZXRjaCBvcmlnaW4KK3dvcmt0cmVlIC9Vc2Vycy9qZWZmaG9zdC93b3JrL2dmdworY21kX25hbWUgZmV0Y2ggKGZldGNoKQorY2hpbGRfc3RhcnRbMF0gc3NoIGdpdEBnaXRodWIuY29tIC4uLgorY2hpbGRfc3RhcnRbMV0gZ2l0IGluZGV4LXBhY2sgLi4uCisuLi4gKFRyYWNlMiBldmVudHMgZnJvbSBjaGlsZCBwcm9jZXNzZXMgb21pdHRlZCkKK2NoaWxkX2V4aXRbMV0gcGlkOjE0NzA3IGNvZGU6MCBlbGFwc2VkOjAuMDc2MzUzCitjaGlsZF9leGl0WzBdIHBpZDoxNDcwNiBjb2RlOjAgZWxhcHNlZDo0LjkzMTg2OQorY2hpbGRfc3RhcnRbMl0gZ2l0IHJldi1saXN0IC4uLgorLi4uIChUcmFjZTIgZXZlbnRzIGZyb20gY2hpbGQgcHJvY2VzcyBvbWl0dGVkKQorY2hpbGRfZXhpdFsyXSBwaWQ6MTQ3MDggY29kZTowIGVsYXBzZWQ6MC4xMTA2MDUKK2NoaWxkX3N0YXJ0WzNdIGdpdCBnYyAtLWF1dG8KKy4uLiAoVHJhY2UyIGV2ZW50cyBmcm9tIGNoaWxkIHByb2Nlc3Mgb21pdHRlZCkKK2NoaWxkX2V4aXRbM10gcGlkOjE0NzA5IGNvZGU6MCBlbGFwc2VkOjAuMDA2MjQwCitleGl0IGVsYXBzZWQ6NS4xOTg1MDMgY29kZTowCithdGV4aXQgZWxhcHNlZDo1LjE5ODU0MSBjb2RlOjAKKy0tLS0tLS0tLS0tLS0tLS0KKysKK1doZW4gYSBnaXQgcHJvY2VzcyBpcyBhIChkaXJlY3Qgb3IgaW5kaXJlY3QpIGNoaWxkIG9mIGFub3RoZXIKK2dpdCBwcm9jZXNzLCBpdCBpbmhlcml0cyBUcmFjZTIgY29udGV4dCBpbmZvcm1hdGlvbi4gIFRoaXMKK2FsbG93cyB0aGUgY2hpbGQgdG8gcHJpbnQgdGhlIGNvbW1hbmQgaGllcmFyY2h5LiAgVGhpcyBleGFtcGxlCitzaG93cyBnYyBhcyBjaGlsZFszXSBvZiBmZXRjaC4gIFdoZW4gdGhlIGdjIHByb2Nlc3MgcmVwb3J0cworaXRzIG5hbWUgYXMgImdjIiwgaXQgYWxzbyByZXBvcnRzIHRoZSBoaWVyYXJjaHkgYXMgImZldGNoL2djIi4KKyhJbiB0aGlzIGV4YW1wbGUsIHRyYWNlMiBtZXNzYWdlcyBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIGlzCitpbmRlbnRlZCBmb3IgY2xhcml0eS4pCisrCistLS0tLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfVFJBQ0UyX0JSSUVGPTEKKyQgZXhwb3J0IEdJVF9UUkFDRTI9fi9sb2cubm9ybWFsCiskIGdpdCBmZXRjaCBvcmlnaW4KKy4uLgorLS0tLS0tLS0tLS0tLS0tLQorKworLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgfi9sb2cubm9ybWFsCit2ZXJzaW9uIDIuMjAuMS4xNjAuZzU2NzYxMDdlY2QuZGlydHkKK3N0YXJ0IGdpdCBmZXRjaCBvZmZpY2lhbAord29ya3RyZWUgL1VzZXJzL2plZmZob3N0L3dvcmsvZ2Z3CitjbWRfbmFtZSBmZXRjaCAoZmV0Y2gpCisuLi4KK2NoaWxkX3N0YXJ0WzNdIGdpdCBnYyAtLWF1dG8KKyAgICB2ZXJzaW9uIDIuMjAuMS4xNjAuZzU2NzYxMDdlY2QuZGlydHkKKyAgICBzdGFydCAvVXNlcnMvamVmZmhvc3Qvd29yay9nZncvZ2l0IGdjIC0tYXV0bworICAgIHdvcmt0cmVlIC9Vc2Vycy9qZWZmaG9zdC93b3JrL2dmdworICAgIGNtZF9uYW1lIGdjIChmZXRjaC9nYykKKyAgICBleGl0IGVsYXBzZWQ6MC4wMDE5NTkgY29kZTowCisgICAgYXRleGl0IGVsYXBzZWQ6MC4wMDE5OTcgY29kZTowCitjaGlsZF9leGl0WzNdIHBpZDoyMDMwMyBjb2RlOjAgZWxhcHNlZDowLjAwNzU2NAorZXhpdCBlbGFwc2VkOjMuODY4OTM4IGNvZGU6MAorYXRleGl0IGVsYXBzZWQ6My44Njg5NzAgY29kZTowCistLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lvbnM6OgorCisJUmVnaW9ucyBjYW4gYmUgdXNlIHRvIHRpbWUgYW4gaW50ZXJlc3Rpbmcgc2VjdGlvbiBvZiBjb2RlLgorKworLS0tLS0tLS0tLS0tLS0tLQordm9pZCB3dF9zdGF0dXNfY29sbGVjdChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXRyYWNlMl9yZWdpb25fZW50ZXIoInN0YXR1cyIsICJ3b3JrdHJlZXMiLCBzLT5yZXBvKTsKKwl3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX3dvcmt0cmVlKHMpOworCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJ3b3JrdHJlZXMiLCBzLT5yZXBvKTsKKworCXRyYWNlMl9yZWdpb25fZW50ZXIoInN0YXR1cyIsICJpbmRleCIsIHMtPnJlcG8pOworCXd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfaW5kZXgocyk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgic3RhdHVzIiwgImluZGV4Iiwgcy0+cmVwbyk7CisKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJzdGF0dXMiLCAidW50cmFja2VkIiwgcy0+cmVwbyk7CisJd3Rfc3RhdHVzX2NvbGxlY3RfdW50cmFja2VkKHMpOworCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJ1bnRyYWNrZWQiLCBzLT5yZXBvKTsKK30KKwordm9pZCB3dF9zdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJzdGF0dXMiLCAicHJpbnQiLCBzLT5yZXBvKTsKKwlzd2l0Y2ggKHMtPnN0YXR1c19mb3JtYXQpIHsKKwkgICAgLi4uCisJfQorCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJwcmludCIsIHMtPnJlcG8pOworfQorLS0tLS0tLS0tLS0tLS0tLQorKworSW4gdGhpcyBleGFtcGxlLCBzY2FubmluZyBmb3IgdW50cmFja2VkIGZpbGVzIHJhbiBmcm9tICswLjAxMjU2OCB0bworKzAuMDI3MTQ5IChzaW5jZSB0aGUgcHJvY2VzcyBzdGFydGVkKSBhbmQgdG9vayAwLjAxNDU4MSBzZWNvbmRzLgorKworLS0tLS0tLS0tLS0tLS0tLQorJCBleHBvcnQgR0lUX1RSQUNFMl9QRVJGX0JSSUVGPTEKKyQgZXhwb3J0IEdJVF9UUkFDRTJfUEVSRj1+L2xvZy5wZXJmCiskIGdpdCBzdGF0dXMKKy4uLgorCiskIGNhdCB+L2xvZy5wZXJmCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHZlcnNpb24gICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCAyLjIwLjEuMTYwLmc1Njc2MTA3ZWNkLmRpcnR5CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHN0YXJ0ICAgICAgICB8ICAgICB8ICAwLjAwMTE3MyB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBnaXQgc3RhdHVzCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGRlZl9yZXBvICAgICB8IHIxICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCB3b3JrdHJlZTovVXNlcnMvamVmZmhvc3Qvd29yay9nZncKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgY21kX25hbWUgICAgIHwgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IHN0YXR1cyAoc3RhdHVzKQorLi4uCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9lbnRlciB8IHIxICB8ICAwLjAxMDk4OCB8ICAgICAgICAgICB8IHN0YXR1cyAgICAgfCBsYWJlbDp3b3JrdHJlZXMKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDExMjM2IHwgIDAuMDAwMjQ4IHwgc3RhdHVzICAgICB8IGxhYmVsOndvcmt0cmVlcworZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCByMSAgfCAgMC4wMTEyNjAgfCAgICAgICAgICAgfCBzdGF0dXMgICAgIHwgbGFiZWw6aW5kZXgKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDEyNTQyIHwgIDAuMDAxMjgyIHwgc3RhdHVzICAgICB8IGxhYmVsOmluZGV4CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9lbnRlciB8IHIxICB8ICAwLjAxMjU2OCB8ICAgICAgICAgICB8IHN0YXR1cyAgICAgfCBsYWJlbDp1bnRyYWNrZWQKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDI3MTQ5IHwgIDAuMDE0NTgxIHwgc3RhdHVzICAgICB8IGxhYmVsOnVudHJhY2tlZAorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCByMSAgfCAgMC4wMjc0MTEgfCAgICAgICAgICAgfCBzdGF0dXMgICAgIHwgbGFiZWw6cHJpbnQKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDI4NzQxIHwgIDAuMDAxMzMwIHwgc3RhdHVzICAgICB8IGxhYmVsOnByaW50CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGV4aXQgICAgICAgICB8ICAgICB8ICAwLjAyODc3OCB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBjb2RlOjAKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgYXRleGl0ICAgICAgIHwgICAgIHwgIDAuMDI4ODA5IHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGNvZGU6MAorLS0tLS0tLS0tLS0tLS0tLQorKworUmVnaW9ucyBtYXkgYmUgbmVzdGVkLiAgVGhpcyBjYXVzZXMgbWVzc2FnZXMgdG8gYmUgaW5kZW50ZWQgaW4gdGhlCitQRVJGIHRhcmdldCwgZm9yIGV4YW1wbGUuCitFbGFwc2VkIHRpbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbmVzdGluZworbGV2ZWwgYXMgZXhwZWN0ZWQuICBGb3IgZXhhbXBsZSwgaWYgd2UgYWRkIHJlZ2lvbiBtZXNzYWdlIHRvOgorKworLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGVudW0gcGF0aF90cmVhdG1lbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsIGludCBjaGVja19vbmx5LAorCWludCBzdG9wX2F0X2ZpcnN0X2ZpbGUsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJZW51bSBwYXRoX3RyZWF0bWVudCBzdGF0ZSwgc3ViZGlyX3N0YXRlLCBkaXJfc3RhdGUgPSBwYXRoX25vbmU7CisKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50ZigiZGlyIiwgInJlYWRfcmVjdXJzaXZlIiwgTlVMTCwgIiUuKnMiLCBiYXNlbGVuLCBiYXNlKTsKKwkuLi4KKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50ZigiZGlyIiwgInJlYWRfcmVjdXJzaXZlIiwgTlVMTCwgIiUuKnMiLCBiYXNlbGVuLCBiYXNlKTsKKwlyZXR1cm4gZGlyX3N0YXRlOworfQorLS0tLS0tLS0tLS0tLS0tLQorKworV2UgY2FuIGZ1cnRoZXIgaW52ZXN0aWdhdGUgdGhlIHRpbWUgc3BlbnQgc2Nhbm5pbmcgZm9yIHVudHJhY2tlZCBmaWxlcy4KKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZXhwb3J0IEdJVF9UUkFDRTJfUEVSRl9CUklFRj0xCiskIGV4cG9ydCBHSVRfVFJBQ0UyX1BFUkY9fi9sb2cucGVyZgorJCBnaXQgc3RhdHVzCisuLi4KKyQgY2F0IH4vbG9nLnBlcmYKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgdmVyc2lvbiAgICAgIHwgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IDIuMjAuMS4xNjIuZ2I0Y2NlYTQ0ZGIuZGlydHkKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgc3RhcnQgICAgICAgIHwgICAgIHwgIDAuMDAxMTczIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGdpdCBzdGF0dXMKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgZGVmX3JlcG8gICAgIHwgcjEgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IHdvcmt0cmVlOi9Vc2Vycy9qZWZmaG9zdC93b3JrL2dmdworZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBjbWRfbmFtZSAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgc3RhdHVzIChzdGF0dXMpCisuLi4KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgcjEgIHwgIDAuMDE1MDQ3IHwgICAgICAgICAgIHwgc3RhdHVzICAgICB8IGxhYmVsOnVudHJhY2tlZAorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCAgICAgfCAgMC4wMTUxMzIgfCAgICAgICAgICAgfCBkaXIgICAgICAgIHwgLi5sYWJlbDpyZWFkX3JlY3Vyc2l2ZQorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCAgICAgfCAgMC4wMTYzNDEgfCAgICAgICAgICAgfCBkaXIgICAgICAgIHwgLi4uLmxhYmVsOnJlYWRfcmVjdXJzaXZlIHZjcy1zdm4vCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8ICAgICB8ICAwLjAxNjQyMiB8ICAwLjAwMDA4MSB8IGRpciAgICAgICAgfCAuLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgdmNzLXN2bi8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgICAgIHwgIDAuMDE2NDQ2IHwgICAgICAgICAgIHwgZGlyICAgICAgICB8IC4uLi5sYWJlbDpyZWFkX3JlY3Vyc2l2ZSB4ZGlmZi8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgICAgIHwgIDAuMDE2NTIyIHwgIDAuMDAwMDc2IHwgZGlyICAgICAgICB8IC4uLi5sYWJlbDpyZWFkX3JlY3Vyc2l2ZSB4ZGlmZi8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgICAgIHwgIDAuMDE2NjEyIHwgICAgICAgICAgIHwgZGlyICAgICAgICB8IC4uLi5sYWJlbDpyZWFkX3JlY3Vyc2l2ZSBnaXQtZ3VpLworZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCAgICAgfCAgMC4wMTY2OTggfCAgICAgICAgICAgfCBkaXIgICAgICAgIHwgLi4uLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgZ2l0LWd1aS9wby8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgICAgIHwgIDAuMDE2ODEwIHwgICAgICAgICAgIHwgZGlyICAgICAgICB8IC4uLi4uLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgZ2l0LWd1aS9wby9nbG9zc2FyeS8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgICAgIHwgIDAuMDE2ODYzIHwgIDAuMDAwMDUzIHwgZGlyICAgICAgICB8IC4uLi4uLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgZ2l0LWd1aS9wby9nbG9zc2FyeS8KKy4uLgorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCByZWdpb25fZW50ZXIgfCAgICAgfCAgMC4wMzE4NzYgfCAgICAgICAgICAgfCBkaXIgICAgICAgIHwgLi4uLmxhYmVsOnJlYWRfcmVjdXJzaXZlIGJ1aWx0aW4vCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8ICAgICB8ICAwLjAzMjI3MCB8ICAwLjAwMDM5NCB8IGRpciAgICAgICAgfCAuLi4ubGFiZWw6cmVhZF9yZWN1cnNpdmUgYnVpbHRpbi8KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgICAgIHwgIDAuMDMyNDE0IHwgIDAuMDE3MjgyIHwgZGlyICAgICAgICB8IC4ubGFiZWw6cmVhZF9yZWN1cnNpdmUKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDMyNDU0IHwgIDAuMDE3NDA3IHwgc3RhdHVzICAgICB8IGxhYmVsOnVudHJhY2tlZAorLi4uCitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGV4aXQgICAgICAgICB8ICAgICB8ICAwLjAzNDI3OSB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBjb2RlOjAKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgYXRleGl0ICAgICAgIHwgICAgIHwgIDAuMDM0MzIyIHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGNvZGU6MAorLS0tLS0tLS0tLS0tLS0tLQorKworVHJhY2UyIHJlZ2lvbnMgYXJlIHNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nIHRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKCkKK2FuZCB0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgpIHJvdXRpbmVzLCBidXQgYXJlIHRocmVhZCBzYWZlIGFuZAorbWFpbnRhaW4gcGVyLXRocmVhZCBzdGFja3Mgb2YgdGltZXJzLgorCitEYXRhIE1lc3NhZ2VzOjoKKworCURhdGEgbWVzc2FnZXMgYWRkZWQgdG8gYSByZWdpb24uCisrCistLS0tLS0tLS0tLS0tLS0tCitpbnQgcmVhZF9pbmRleF9mcm9tKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLAorCWNvbnN0IGNoYXIgKmdpdGRpcikKK3sKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50ZigiaW5kZXgiLCAiZG9fcmVhZF9pbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAiJXMiLCBwYXRoKTsKKworCS4uLgorCisJdHJhY2UyX2RhdGFfaW50bWF4KCJpbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAicmVhZC92ZXJzaW9uIiwgaXN0YXRlLT52ZXJzaW9uKTsKKwl0cmFjZTJfZGF0YV9pbnRtYXgoImluZGV4IiwgdGhlX3JlcG9zaXRvcnksICJyZWFkL2NhY2hlX25yIiwgaXN0YXRlLT5jYWNoZV9ucik7CisKKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50ZigiaW5kZXgiLCAiZG9fcmVhZF9pbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAiJXMiLCBwYXRoKTsKK30KKy0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgZXhhbXBsZSBzaG93cyB0aGF0IHRoZSBpbmRleCBjb250YWluZWQgMzU1MiBlbnRyaWVzLgorKworLS0tLS0tLS0tLS0tLS0tLQorJCBleHBvcnQgR0lUX1RSQUNFMl9QRVJGX0JSSUVGPTEKKyQgZXhwb3J0IEdJVF9UUkFDRTJfUEVSRj1+L2xvZy5wZXJmCiskIGdpdCBzdGF0dXMKKy4uLgorJCBjYXQgfi9sb2cucGVyZgorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCB2ZXJzaW9uICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgMi4yMC4xLjE1Ni5nZjk5MTZhZTA5NC5kaXJ0eQorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBzdGFydCAgICAgICAgfCAgICAgfCAgMC4wMDExNzMgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgZ2l0IHN0YXR1cworZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBkZWZfcmVwbyAgICAgfCByMSAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgd29ya3RyZWU6L1VzZXJzL2plZmZob3N0L3dvcmsvZ2Z3CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IGNtZF9uYW1lICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCBzdGF0dXMgKHN0YXR1cykKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgcjEgIHwgIDAuMDAxNzkxIHwgICAgICAgICAgIHwgaW5kZXggICAgICB8IGxhYmVsOmRvX3JlYWRfaW5kZXggLmdpdC9pbmRleAorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI0OTQgfCAgMC4wMDA3MDMgfCBpbmRleCAgICAgIHwgLi5yZWFkL3ZlcnNpb246MgorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI1MjAgfCAgMC4wMDA3MjkgfCBpbmRleCAgICAgIHwgLi5yZWFkL2NhY2hlX25yOjM1NTIKK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2xlYXZlIHwgcjEgIHwgIDAuMDAyNTM5IHwgIDAuMDAwNzQ4IHwgaW5kZXggICAgICB8IGxhYmVsOmRvX3JlYWRfaW5kZXggLmdpdC9pbmRleAorLi4uCistLS0tLS0tLS0tLS0tLS0tCisKK1RocmVhZCBFdmVudHM6OgorCisJVGhyZWFkIG1lc3NhZ2VzIGFkZGVkIHRvIGEgdGhyZWFkLXByb2MuCisrCitGb3IgZXhhbXBsZSwgdGhlIG11bHRpdGhyZWFkZWQgcHJlbG9hZC1pbmRleCBjb2RlIGNhbiBiZQoraW5zdHJ1bWVudGVkIHdpdGggYSByZWdpb24gYXJvdW5kIHRoZSB0aHJlYWQgcG9vbCBhbmQgdGhlbgorcGVyLXRocmVhZCBzdGFydCBhbmQgZXhpdCBldmVudHMgd2l0aGluIHRoZSB0aHJlYWRwcm9jLgorKworLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIHZvaWQgKnByZWxvYWRfdGhyZWFkKHZvaWQgKl9kYXRhKQoreworCS8vIHN0YXJ0IHRoZSBwZXItdGhyZWFkIGNsb2NrIGFuZCBlbWl0IGEgbWVzc2FnZS4KKwl0cmFjZTJfdGhyZWFkX3N0YXJ0KCJwcmVsb2FkX3RocmVhZCIpOworCisJLy8gcmVwb3J0IHdoaWNoIGNodW5rIG9mIHRoZSBhcnJheSB0aGlzIHRocmVhZCB3YXMgYXNzaWduZWQuCisJdHJhY2UyX2RhdGFfaW50bWF4KCJpbmRleCIsIHRoZV9yZXBvc2l0b3J5LCAib2Zmc2V0IiwgcC0+b2Zmc2V0KTsKKwl0cmFjZTJfZGF0YV9pbnRtYXgoImluZGV4IiwgdGhlX3JlcG9zaXRvcnksICJjb3VudCIsIG5yKTsKKworCWRvIHsKKwkgICAgLi4uCisJfSB3aGlsZSAoLS1uciA+IDApOworCS4uLgorCisJLy8gcmVwb3J0IGVsYXBzZWQgdGltZSB0YWtlbiBieSB0aGlzIHRocmVhZC4KKwl0cmFjZTJfdGhyZWFkX2V4aXQoKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBwcmVsb2FkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXgsCisJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwl1bnNpZ25lZCBpbnQgcmVmcmVzaF9mbGFncykKK3sKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJpbmRleCIsICJwcmVsb2FkIiwgdGhlX3JlcG9zaXRvcnkpOworCisJZm9yIChpID0gMDsgaSA8IHRocmVhZHM7IGkrKykgeworCSAgICAuLi4gLyogY3JlYXRlIHRocmVhZCAqLworCX0KKworCWZvciAoaSA9IDA7IGkgPCB0aHJlYWRzOyBpKyspIHsKKwkgICAgLi4uIC8qIGpvaW4gdGhyZWFkICovCisJfQorCisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiaW5kZXgiLCAicHJlbG9hZCIsIHRoZV9yZXBvc2l0b3J5KTsKK30KKy0tLS0tLS0tLS0tLS0tLS0KKysKK0luIHRoaXMgZXhhbXBsZSBwcmVsb2FkX2luZGV4KCkgd2FzIGV4ZWN1dGVkIGJ5IHRoZSBgbWFpbmAgdGhyZWFkCithbmQgc3RhcnRlZCB0aGUgYHByZWxvYWRgIHJlZ2lvbi4gIFNldmVuIHRocmVhZHMsIG5hbWVkCitgdGgwMTpwcmVsb2FkX3RocmVhZGAgdGhyb3VnaCBgdGgwNzpwcmVsb2FkX3RocmVhZGAsIHdlcmUgc3RhcnRlZC4KK0V2ZW50cyBmcm9tIGVhY2ggdGhyZWFkIGFyZSBhdG9taWNhbGx5IGFwcGVuZGVkIHRvIHRoZSBzaGFyZWQgdGFyZ2V0CitzdHJlYW0gYXMgdGhleSBvY2N1ciBzbyB0aGV5IG1heSBhcHBlYXIgaW4gcmFuZG9tIG9yZGVyIHdpdGggcmVzcGVjdAorb3RoZXIgdGhyZWFkcy4gRmluYWxseSwgdGhlIG1haW4gdGhyZWFkIHdhaXRzIGZvciB0aGUgdGhyZWFkcyB0bworZmluaXNoIGFuZCBsZWF2ZXMgdGhlIHJlZ2lvbi4KKysKK0RhdGEgZXZlbnRzIGFyZSB0YWdnZWQgd2l0aCB0aGUgYWN0aXZlIHRocmVhZCBuYW1lLiAgVGhleSBhcmUgdXNlZAordG8gcmVwb3J0IHRoZSBwZXItdGhyZWFkIHBhcmFtZXRlcnMuCisrCistLS0tLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfVFJBQ0UyX1BFUkZfQlJJRUY9MQorJCBleHBvcnQgR0lUX1RSQUNFMl9QRVJGPX4vbG9nLnBlcmYKKyQgZ2l0IHN0YXR1cworLi4uCiskIGNhdCB+L2xvZy5wZXJmCisuLi4KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgcmVnaW9uX2VudGVyIHwgcjEgIHwgIDAuMDAyNTk1IHwgICAgICAgICAgIHwgaW5kZXggICAgICB8IGxhYmVsOnByZWxvYWQKK2QwIHwgdGgwMTpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX3N0YXJ0IHwgICAgIHwgIDAuMDAyNjk5IHwgICAgICAgICAgIHwgICAgICAgICAgICB8CitkMCB8IHRoMDI6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9zdGFydCB8ICAgICB8ICAwLjAwMjcyMSB8ICAgICAgICAgICB8ICAgICAgICAgICAgfAorZDAgfCB0aDAxOnByZWxvYWRfdGhyZWFkICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI3MzYgfCAgMC4wMDAwMzcgfCBpbmRleCAgICAgIHwgb2Zmc2V0OjAKK2QwIHwgdGgwMjpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAyNzUxIHwgIDAuMDAwMDMwIHwgaW5kZXggICAgICB8IG9mZnNldDoyMDMyCitkMCB8IHRoMDM6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9zdGFydCB8ICAgICB8ICAwLjAwMjcxMSB8ICAgICAgICAgICB8ICAgICAgICAgICAgfAorZDAgfCB0aDA2OnByZWxvYWRfdGhyZWFkICAgICAgfCB0aHJlYWRfc3RhcnQgfCAgICAgfCAgMC4wMDI3MzkgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwKK2QwIHwgdGgwMTpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAyNzY2IHwgIDAuMDAwMDY3IHwgaW5kZXggICAgICB8IGNvdW50OjUwOAorZDAgfCB0aDA2OnByZWxvYWRfdGhyZWFkICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI4NTYgfCAgMC4wMDAxMTcgfCBpbmRleCAgICAgIHwgb2Zmc2V0OjI1NDAKK2QwIHwgdGgwMzpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAyODI0IHwgIDAuMDAwMTEzIHwgaW5kZXggICAgICB8IG9mZnNldDoxMDE2CitkMCB8IHRoMDQ6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9zdGFydCB8ICAgICB8ICAwLjAwMjcxMCB8ICAgICAgICAgICB8ICAgICAgICAgICAgfAorZDAgfCB0aDAyOnByZWxvYWRfdGhyZWFkICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI3NzkgfCAgMC4wMDAwNTggfCBpbmRleCAgICAgIHwgY291bnQ6NTA4CitkMCB8IHRoMDY6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwMjk2NiB8ICAwLjAwMDIyNyB8IGluZGV4ICAgICAgfCBjb3VudDo1MDgKK2QwIHwgdGgwNzpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX3N0YXJ0IHwgICAgIHwgIDAuMDAyNzQxIHwgICAgICAgICAgIHwgICAgICAgICAgICB8CitkMCB8IHRoMDc6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwMzAxNyB8ICAwLjAwMDI3NiB8IGluZGV4ICAgICAgfCBvZmZzZXQ6MzA0OAorZDAgfCB0aDA1OnByZWxvYWRfdGhyZWFkICAgICAgfCB0aHJlYWRfc3RhcnQgfCAgICAgfCAgMC4wMDI3MTIgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwKK2QwIHwgdGgwNTpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAzMDY3IHwgIDAuMDAwMzU1IHwgaW5kZXggICAgICB8IG9mZnNldDoxNTI0CitkMCB8IHRoMDU6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwMzA5MCB8ICAwLjAwMDM3OCB8IGluZGV4ICAgICAgfCBjb3VudDo1MDgKK2QwIHwgdGgwNzpwcmVsb2FkX3RocmVhZCAgICAgIHwgZGF0YSAgICAgICAgIHwgcjEgIHwgIDAuMDAzMDM3IHwgIDAuMDAwMjk2IHwgaW5kZXggICAgICB8IGNvdW50OjUwNAorZDAgfCB0aDAzOnByZWxvYWRfdGhyZWFkICAgICAgfCBkYXRhICAgICAgICAgfCByMSAgfCAgMC4wMDI5NzEgfCAgMC4wMDAyNjAgfCBpbmRleCAgICAgIHwgY291bnQ6NTA4CitkMCB8IHRoMDQ6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwMjk4MyB8ICAwLjAwMDI3MyB8IGluZGV4ICAgICAgfCBvZmZzZXQ6NTA4CitkMCB8IHRoMDQ6cHJlbG9hZF90aHJlYWQgICAgICB8IGRhdGEgICAgICAgICB8IHIxICB8ICAwLjAwNzMxMSB8ICAwLjAwNDYwMSB8IGluZGV4ICAgICAgfCBjb3VudDo1MDgKK2QwIHwgdGgwNTpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX2V4aXQgIHwgICAgIHwgIDAuMDA4NzgxIHwgIDAuMDA2MDY5IHwgICAgICAgICAgICB8CitkMCB8IHRoMDE6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9leGl0ICB8ICAgICB8ICAwLjAwOTU2MSB8ICAwLjAwNjg2MiB8ICAgICAgICAgICAgfAorZDAgfCB0aDAzOnByZWxvYWRfdGhyZWFkICAgICAgfCB0aHJlYWRfZXhpdCAgfCAgICAgfCAgMC4wMDk3NDIgfCAgMC4wMDcwMzEgfCAgICAgICAgICAgIHwKK2QwIHwgdGgwNjpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX2V4aXQgIHwgICAgIHwgIDAuMDA5ODIwIHwgIDAuMDA3MDgxIHwgICAgICAgICAgICB8CitkMCB8IHRoMDI6cHJlbG9hZF90aHJlYWQgICAgICB8IHRocmVhZF9leGl0ICB8ICAgICB8ICAwLjAxMDI3NCB8ICAwLjAwNzU1MyB8ICAgICAgICAgICAgfAorZDAgfCB0aDA3OnByZWxvYWRfdGhyZWFkICAgICAgfCB0aHJlYWRfZXhpdCAgfCAgICAgfCAgMC4wMTA0NzcgfCAgMC4wMDc3MzYgfCAgICAgICAgICAgIHwKK2QwIHwgdGgwNDpwcmVsb2FkX3RocmVhZCAgICAgIHwgdGhyZWFkX2V4aXQgIHwgICAgIHwgIDAuMDExNjU3IHwgIDAuMDA4OTQ3IHwgICAgICAgICAgICB8CitkMCB8IG1haW4gICAgICAgICAgICAgICAgICAgICB8IHJlZ2lvbl9sZWF2ZSB8IHIxICB8ICAwLjAxMTcxNyB8ICAwLjAwOTEyMiB8IGluZGV4ICAgICAgfCBsYWJlbDpwcmVsb2FkCisuLi4KK2QwIHwgbWFpbiAgICAgICAgICAgICAgICAgICAgIHwgZXhpdCAgICAgICAgIHwgICAgIHwgIDAuMDI5OTk2IHwgICAgICAgICAgIHwgICAgICAgICAgICB8IGNvZGU6MAorZDAgfCBtYWluICAgICAgICAgICAgICAgICAgICAgfCBhdGV4aXQgICAgICAgfCAgICAgfCAgMC4wMzAwMjcgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgY29kZTowCistLS0tLS0tLS0tLS0tLS0tCisrCitJbiB0aGlzIGV4YW1wbGUsIHRoZSBwcmVsb2FkIHJlZ2lvbiB0b29rIDAuMDA5MTIyIHNlY29uZHMuICBUaGUgNyB0aHJlYWRzCit0b29rIGJldHdlZW4gMC4wMDYwNjkgYW5kIDAuMDA4OTQ3IHNlY29uZHMgdG8gd29yayBvbiB0aGVpciBwb3J0aW9uIG9mCit0aGUgaW5kZXguICBUaHJlYWQgInRoMDEiIHdvcmtlZCBvbiA1MDggaXRlbXMgYXQgb2Zmc2V0IDAuICBUaHJlYWQgInRoMDIiCit3b3JrZWQgb24gNTA4IGl0ZW1zIGF0IG9mZnNldCAyMDMyLiAgVGhyZWFkICJ0aDA0IiB3b3JrZWQgb24gNTA4IGl0ZW1zCithdCBvZmZzZXQgNTA4LgorKworVGhpcyBleGFtcGxlIGFsc28gc2hvd3MgdGhhdCB0aHJlYWQgbmFtZXMgYXJlIGFzc2lnbmVkIGluIGEgcmFjeSBtYW5uZXIKK2FzIGVhY2ggdGhyZWFkIHN0YXJ0cyBhbmQgYWxsb2NhdGVzIFRMUyBzdG9yYWdlLgorCis9PSBGdXR1cmUgV29yaworCis9PT0gUmVsYXRpb25zaGlwIHRvIHRoZSBFeGlzdGluZyBUcmFjZSBBcGkgKGFwaS10cmFjZS50eHQpCisKK1RoZXJlIGFyZSBhIGZldyBpc3N1ZXMgdG8gcmVzb2x2ZSBiZWZvcmUgd2UgY2FuIGNvbXBsZXRlbHkKK3N3aXRjaCB0byBUcmFjZTIuCisKKyogVXBkYXRpbmcgZXhpc3RpbmcgdGVzdHMgdGhhdCBhc3N1bWUgR0lUX1RSQUNFIGZvcm1hdCBtZXNzYWdlcy4KKworKiBIb3cgdG8gYmVzdCBoYW5kbGUgY3VzdG9tIEdJVF9UUkFDRV88a2V5PiBtZXNzYWdlcz8KKworKiogVGhlIEdJVF9UUkFDRV88a2V5PiBtZWNoYW5pc20gYWxsb3dzIGVhY2ggPGtleT4gdG8gd3JpdGUgdG8gYQorZGlmZmVyZW50IGZpbGUgKGluIGFkZGl0aW9uIHRvIGp1c3Qgc3RkZXJyKS4KKworKiogRG8gd2Ugd2FudCB0byBtYWludGFpbiB0aGF0IGFiaWxpdHkgb3Igc2ltcGx5IHdyaXRlIHRvIHRoZSBleGlzdGluZworVHJhY2UyIHRhcmdldHMgKGFuZCBjb252ZXJ0IDxrZXk+IHRvIGEgImNhdGVnb3J5IikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9iaXRtYXAtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2JpdG1hcC1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzE4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9iaXRtYXAtZm9ybWF0LnR4dApAQCAtMCwwICsxLDE2NCBAQAorR0lUIGJpdG1hcCB2MSBmb3JtYXQKKz09PT09PT09PT09PT09PT09PT09CisKKwktIEEgaGVhZGVyIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZzoKKworCQk0LWJ5dGUgc2lnbmF0dXJlOiB7J0InLCAnSScsICdUJywgJ00nfQorCisJCTItYnl0ZSB2ZXJzaW9uIG51bWJlciAobmV0d29yayBieXRlIG9yZGVyKQorCQkJVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyB2ZXJzaW9uIDEKKwkJCW9mIHRoZSBiaXRtYXAgaW5kZXggKHRoZSBzYW1lIG9uZSBhcyBKR2l0KS4KKworCQkyLWJ5dGUgZmxhZ3MgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKworCQkJVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgc3VwcG9ydGVkOgorCisJCQktIEJJVE1BUF9PUFRfRlVMTF9EQUcgKDB4MSkgUkVRVUlSRUQKKwkJCVRoaXMgZmxhZyBtdXN0IGFsd2F5cyBiZSBwcmVzZW50LiBJdCBpbXBsaWVzIHRoYXQgdGhlIGJpdG1hcAorCQkJaW5kZXggaGFzIGJlZW4gZ2VuZXJhdGVkIGZvciBhIHBhY2tmaWxlIHdpdGggZnVsbCBjbG9zdXJlCisJCQkoaS5lLiB3aGVyZSBldmVyeSBzaW5nbGUgb2JqZWN0IGluIHRoZSBwYWNrZmlsZSBjYW4gZmluZAorCQkJIGl0cyBwYXJlbnQgbGlua3MgaW5zaWRlIHRoZSBzYW1lIHBhY2tmaWxlKS4gVGhpcyBpcyBhCisJCQlyZXF1aXJlbWVudCBmb3IgdGhlIGJpdG1hcCBpbmRleCBmb3JtYXQsIGFsc28gcHJlc2VudCBpbiBKR2l0LAorCQkJdGhhdCBncmVhdGx5IHJlZHVjZXMgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLgorCisJCQktIEJJVE1BUF9PUFRfSEFTSF9DQUNIRSAoMHg0KQorCQkJSWYgcHJlc2VudCwgdGhlIGVuZCBvZiB0aGUgYml0bWFwIGZpbGUgY29udGFpbnMKKwkJCWBOYCAzMi1iaXQgbmFtZS1oYXNoIHZhbHVlcywgb25lIHBlciBvYmplY3QgaW4gdGhlCisJCQlwYWNrLiBUaGUgZm9ybWF0IGFuZCBtZWFuaW5nIG9mIHRoZSBuYW1lLWhhc2ggaXMKKwkJCWRlc2NyaWJlZCBiZWxvdy4KKworCQk0LWJ5dGUgZW50cnkgY291bnQgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKworCQkJVGhlIHRvdGFsIGNvdW50IG9mIGVudHJpZXMgKGJpdG1hcHBlZCBjb21taXRzKSBpbiB0aGlzIGJpdG1hcCBpbmRleC4KKworCQkyMC1ieXRlIGNoZWNrc3VtCisKKwkJCVRoZSBTSEExIGNoZWNrc3VtIG9mIHRoZSBwYWNrIHRoaXMgYml0bWFwIGluZGV4IGJlbG9uZ3MgdG8uCisKKwktIDQgRVdBSCBiaXRtYXBzIHRoYXQgYWN0IGFzIHR5cGUgaW5kZXhlcworCisJCVR5cGUgaW5kZXhlcyBhcmUgc2VyaWFsaXplZCBhZnRlciB0aGUgaGFzaCBjYWNoZSBpbiB0aGUgc2hhcGUKKwkJb2YgZm91ciBFV0FIIGJpdG1hcHMgc3RvcmVkIGNvbnNlY3V0aXZlbHkgKHNlZSBBcHBlbmRpeCBBIGZvcgorCQl0aGUgc2VyaWFsaXphdGlvbiBmb3JtYXQgb2YgYW4gRVdBSCBiaXRtYXApLgorCisJCVRoZXJlIGlzIGEgYml0bWFwIGZvciBlYWNoIEdpdCBvYmplY3QgdHlwZSwgc3RvcmVkIGluIHRoZSBmb2xsb3dpbmcKKwkJb3JkZXI6CisKKwkJCS0gQ29tbWl0cworCQkJLSBUcmVlcworCQkJLSBCbG9icworCQkJLSBUYWdzCisKKwkJSW4gZWFjaCBiaXRtYXAsIHRoZSBgbmB0aCBiaXQgaXMgc2V0IHRvIHRydWUgaWYgdGhlIGBuYHRoIG9iamVjdAorCQlpbiB0aGUgcGFja2ZpbGUgaXMgb2YgdGhhdCB0eXBlLgorCisJCVRoZSBvYnZpb3VzIGNvbnNlcXVlbmNlIGlzIHRoYXQgdGhlIE9SIG9mIGFsbCA0IGJpdG1hcHMgd2lsbCByZXN1bHQKKwkJaW4gYSBmdWxsIHNldCAoYWxsIGJpdHMgc2V0KSwgYW5kIHRoZSBBTkQgb2YgYWxsIDQgYml0bWFwcyB3aWxsCisJCXJlc3VsdCBpbiBhbiBlbXB0eSBiaXRtYXAgKG5vIGJpdHMgc2V0KS4KKworCS0gTiBlbnRyaWVzIHdpdGggY29tcHJlc3NlZCBiaXRtYXBzLCBvbmUgZm9yIGVhY2ggaW5kZXhlZCBjb21taXQKKworCQlXaGVyZSBgTmAgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBlbnRyaWVzIGluIHRoaXMgYml0bWFwIGluZGV4LgorCQlFYWNoIGVudHJ5IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisKKwkJLSA0LWJ5dGUgb2JqZWN0IHBvc2l0aW9uIChuZXR3b3JrIGJ5dGUgb3JkZXIpCisJCQlUaGUgcG9zaXRpb24gKippbiB0aGUgaW5kZXggZm9yIHRoZSBwYWNrZmlsZSoqIHdoZXJlIHRoZQorCQkJYml0bWFwIGZvciB0aGlzIGNvbW1pdCBpcyBmb3VuZC4KKworCQktIDEtYnl0ZSBYT1Itb2Zmc2V0CisJCQlUaGUgeG9yIG9mZnNldCB1c2VkIHRvIGNvbXByZXNzIHRoaXMgYml0bWFwLiBGb3IgYW4gZW50cnkKKwkJCWluIHBvc2l0aW9uIGB4YCwgYSBYT1Igb2Zmc2V0IG9mIGB5YCBtZWFucyB0aGF0IHRoZSBhY3R1YWwKKwkJCWJpdG1hcCByZXByZXNlbnRpbmcgdGhpcyBjb21taXQgaXMgY29tcG9zZWQgYnkgWE9SaW5nIHRoZQorCQkJYml0bWFwIGZvciB0aGlzIGVudHJ5IHdpdGggdGhlIGJpdG1hcCBpbiBlbnRyeSBgeC15YCAoaS5lLgorCQkJdGhlIGJpdG1hcCBgeWAgZW50cmllcyBiZWZvcmUgdGhpcyBvbmUpLgorCisJCQlOb3RlIHRoYXQgdGhpcyBjb21wcmVzc2lvbiBjYW4gYmUgcmVjdXJzaXZlLiBJbiBvcmRlciB0bworCQkJWE9SIHRoaXMgZW50cnkgd2l0aCBhIHByZXZpb3VzIG9uZSwgdGhlIHByZXZpb3VzIGVudHJ5IG5lZWRzCisJCQl0byBiZSBkZWNvbXByZXNzZWQgZmlyc3QsIGFuZCBzbyBvbi4KKworCQkJVGhlIGhhcmQtbGltaXQgZm9yIHRoaXMgb2Zmc2V0IGlzIDE2MCAoYW4gZW50cnkgY2FuIG9ubHkgYmUKKwkJCXhvcidlZCBhZ2FpbnN0IG9uZSBvZiB0aGUgMTYwIGVudHJpZXMgcHJlY2VkaW5nIGl0KS4gVGhpcworCQkJbnVtYmVyIGlzIGFsd2F5cyBwb3NpdGl2ZSwgYW5kIGhlbmNlIGVudHJpZXMgYXJlIGFsd2F5cyB4b3InZWQKKwkJCXdpdGggKipwcmV2aW91cyoqIGJpdG1hcHMsIG5vdCBiaXRtYXBzIHRoYXQgd2lsbCBjb21lIGFmdGVyd2FyZHMKKwkJCWluIHRoZSBpbmRleC4KKworCQktIDEtYnl0ZSBmbGFncyBmb3IgdGhpcyBiaXRtYXAKKwkJCUF0IHRoZSBtb21lbnQgdGhlIG9ubHkgYXZhaWxhYmxlIGZsYWcgaXMgYDB4MWAsIHdoaWNoIGhpbnRzCisJCQl0aGF0IHRoaXMgYml0bWFwIGNhbiBiZSByZS11c2VkIHdoZW4gcmVidWlsZGluZyBiaXRtYXAgaW5kZXhlcworCQkJZm9yIHRoZSByZXBvc2l0b3J5LgorCisJCS0gVGhlIGNvbXByZXNzZWQgYml0bWFwIGl0c2VsZiwgc2VlIEFwcGVuZGl4IEEuCisKKz09IEFwcGVuZGl4IEE6IFNlcmlhbGl6YXRpb24gZm9ybWF0IGZvciBhbiBFV0FIIGJpdG1hcAorCitFd2FoIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgaW4gdGhlIHNhbWUgcHJvdG9jb2wgYXMgdGhlIEpBVkFFV0FICitsaWJyYXJ5LCBtYWtpbmcgdGhlbSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZSBKR2l0CitpbXBsZW1lbnRhdGlvbjoKKworCS0gNC1ieXRlIG51bWJlciBvZiBiaXRzIG9mIHRoZSByZXN1bHRpbmcgVU5DT01QUkVTU0VEIGJpdG1hcAorCisJLSA0LWJ5dGUgbnVtYmVyIG9mIHdvcmRzIG9mIHRoZSBDT01QUkVTU0VEIGJpdG1hcCwgd2hlbiBzdG9yZWQKKworCS0gTiB4IDgtYnl0ZSB3b3JkcywgYXMgc3BlY2lmaWVkIGJ5IHRoZSBwcmV2aW91cyBmaWVsZAorCisJCVRoaXMgaXMgdGhlIGFjdHVhbCBjb250ZW50IG9mIHRoZSBjb21wcmVzc2VkIGJpdG1hcC4KKworCS0gNC1ieXRlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IFJMVyBmb3IgdGhlIGNvbXByZXNzZWQKKwkJYml0bWFwCisKK0FsbCB3b3JkcyBhcmUgc3RvcmVkIGluIG5ldHdvcmsgYnl0ZSBvcmRlciBmb3IgdGhlaXIgY29ycmVzcG9uZGluZworc2l6ZXMuCisKK1RoZSBjb21wcmVzc2VkIGJpdG1hcCBpcyBzdG9yZWQgaW4gYSBmb3JtIG9mIHJ1bi1sZW5ndGggZW5jb2RpbmcsIGFzCitmb2xsb3dzLiAgSXQgY29uc2lzdHMgb2YgYSBjb25jYXRlbmF0aW9uIG9mIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKK2NodW5rcy4gIEVhY2ggY2h1bmsgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgNjQtYml0IHdvcmRzCisKKyAgICAgSCAgTF8xICBMXzIgIExfMyAuLi4uIExfTQorCitIIGlzIGNhbGxlZCBSTFcgKHJ1biBsZW5ndGggd29yZCkuICBJdCBjb25zaXN0cyBvZiAoZnJvbSBsb3dlciB0byBoaWdoZXIKK29yZGVyIGJpdHMpOgorCisgICAgIC0gMSBiaXQ6IHRoZSByZXBlYXRlZCBiaXQgQgorCisgICAgIC0gMzIgYml0czogcmVwZXRpdGlvbiBjb3VudCBLICh1bnNpZ25lZCkKKworICAgICAtIDMxIGJpdHM6IGxpdGVyYWwgd29yZCBjb3VudCBNICh1bnNpZ25lZCkKKworVGhlIGJpdHN0cmVhbSByZXByZXNlbnRlZCBieSB0aGUgYWJvdmUgY2h1bmsgaXMgdGhlbjoKKworICAgICAtIEsgcmVwZXRpdGlvbnMgb2YgQgorCisgICAgIC0gVGhlIGJpdHMgc3RvcmVkIGluIGBMXzFgIHRocm91Z2ggYExfTWAuICBXaXRoaW4gYSB3b3JkLCBiaXRzIGF0CisgICAgICAgbG93ZXIgb3JkZXIgY29tZSBlYXJsaWVyIGluIHRoZSBzdHJlYW0gdGhhbiB0aG9zZSBhdCBoaWdoZXIKKyAgICAgICBvcmRlci4KKworVGhlIG5leHQgd29yZCBhZnRlciBgTF9NYCAoaWYgYW55KSBtdXN0IGFnYWluIGJlIGEgUkxXLCBmb3IgdGhlIG5leHQKK2NodW5rLiAgRm9yIGVmZmljaWVudCBhcHBlbmRpbmcgdG8gdGhlIGJpdHN0cmVhbSwgdGhlIEVXQUggc3RvcmVzIGEKK3BvaW50ZXIgdG8gdGhlIGxhc3QgUkxXIGluIHRoZSBzdHJlYW0uCisKKworPT0gQXBwZW5kaXggQjogT3B0aW9uYWwgQml0bWFwIFNlY3Rpb25zCisKK1RoZXNlIHNlY3Rpb25zIG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQgaW4gdGhlIGAuYml0bWFwYCBmaWxlOyB0aGVpcgorcHJlc2VuY2UgaXMgaW5kaWNhdGVkIGJ5IHRoZSBoZWFkZXIgZmxhZ3Mgc2VjdGlvbiBkZXNjcmliZWQgYWJvdmUuCisKK05hbWUtaGFzaCBjYWNoZQorLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBCSVRNQVBfT1BUX0hBU0hfQ0FDSEUgZmxhZyBpcyBzZXQsIHRoZSBlbmQgb2YgdGhlIGJpdG1hcCBjb250YWlucworYSBjYWNoZSBvZiAzMi1iaXQgdmFsdWVzLCBvbmUgcGVyIG9iamVjdCBpbiB0aGUgcGFjay4gVGhlIHZhbHVlIGF0Citwb3NpdGlvbiBgaWAgaXMgdGhlIGhhc2ggb2YgdGhlIHBhdGhuYW1lIGF0IHdoaWNoIHRoZSBgaWB0aCBvYmplY3QKKyhjb3VudGluZyBpbiBpbmRleCBvcmRlcikgaW4gdGhlIHBhY2sgY2FuIGJlIGZvdW5kLiAgVGhpcyBjYW4gYmUgZmVkCitpbnRvIHRoZSBkZWx0YSBoZXVyaXN0aWNzIHRvIGNvbXBhcmUgb2JqZWN0cyB3aXRoIHNpbWlsYXIgcGF0aG5hbWVzLgorCitUaGUgaGFzaCBhbGdvcml0aG0gdXNlZCBpczoKKworICAgIGhhc2ggPSAwOworICAgIHdoaWxlICgoYyA9ICpuYW1lKyspKQorCSAgICBpZiAoIWlzc3BhY2UoYykpCisJCSAgICBoYXNoID0gKGhhc2ggPj4gMikgKyAoYyA8PCAyNCk7CisKK05vdGUgdGhhdCB0aGlzIGhhc2hpbmcgc2NoZW1lIGlzIHRpZWQgdG8gdGhlIEJJVE1BUF9PUFRfSEFTSF9DQUNIRSBmbGFnLgorSWYgaW1wbGVtZW50YXRpb25zIHdhbnQgdG8gY2hvb3NlIGEgZGlmZmVyZW50IGhhc2hpbmcgc2NoZW1lLCB0aGV5IGFyZQorZnJlZSB0byBkbyBzbywgYnV0IE1VU1QgYWxsb2NhdGUgYSBuZXcgaGVhZGVyIGZsYWcgKGJlY2F1c2UgY29tcGFyaW5nCitoYXNoZXMgbWFkZSB1bmRlciB0d28gZGlmZmVyZW50IHNjaGVtZXMgd291bGQgYmUgcG9pbnRsZXNzKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2J1bmRsZS1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYnVuZGxlLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4MjgxNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2J1bmRsZS1mb3JtYXQudHh0CkBAIC0wLDAgKzEsNDggQEAKKz0gR2l0IGJ1bmRsZSB2MiBmb3JtYXQKKworVGhlIEdpdCBidW5kbGUgZm9ybWF0IGlzIGEgZm9ybWF0IHRoYXQgcmVwcmVzZW50cyBib3RoIHJlZnMgYW5kIEdpdCBvYmplY3RzLgorCis9PSBGb3JtYXQKKworV2Ugd2lsbCB1c2UgQUJORiBub3RhdGlvbiB0byBkZWZpbmUgdGhlIEdpdCBidW5kbGUgZm9ybWF0LiBTZWUKK3Byb3RvY29sLWNvbW1vbi50eHQgZm9yIHRoZSBkZXRhaWxzLgorCistLS0tCitidW5kbGUgICAgPSBzaWduYXR1cmUgKnByZXJlcXVpc2l0ZSAqcmVmZXJlbmNlIExGIHBhY2sKK3NpZ25hdHVyZSA9ICIjIHYyIGdpdCBidW5kbGUiIExGCisKK3ByZXJlcXVpc2l0ZSA9ICItIiBvYmotaWQgU1AgY29tbWVudCBMRgorY29tbWVudCAgICAgID0gKkNIQVIKK3JlZmVyZW5jZSAgICA9IG9iai1pZCBTUCByZWZuYW1lIExGCisKK3BhY2sgICAgICAgICA9IC4uLiA7IHBhY2tmaWxlCistLS0tCisKKz09IFNlbWFudGljcworCitBIEdpdCBidW5kbGUgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMuCisKKyogIlByZXJlcXVpc2l0ZXMiIGxpc3RzIHRoZSBvYmplY3RzIHRoYXQgYXJlIE5PVCBpbmNsdWRlZCBpbiB0aGUgYnVuZGxlIGFuZCB0aGUKKyAgcmVhZGVyIG9mIHRoZSBidW5kbGUgTVVTVCBhbHJlYWR5IGhhdmUsIGluIG9yZGVyIHRvIHVzZSB0aGUgZGF0YSBpbiB0aGUKKyAgYnVuZGxlLiBUaGUgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIGJ1bmRsZSBtYXkgcmVmZXIgdG8gcHJlcmVxdWlzaXRlIG9iamVjdHMgYW5kCisgIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoZW0gKGUuZy4gYSB0cmVlIG9iamVjdCBpbiB0aGUgYnVuZGxlIGNhbiByZWZlcmVuY2UKKyAgYSBibG9iIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYSBwcmVyZXF1aXNpdGUpIGFuZC9vciBleHByZXNzZWQgYXMgYSBkZWx0YQorICBhZ2FpbnN0IHByZXJlcXVpc2l0ZSBvYmplY3RzLgorCisqICJSZWZlcmVuY2VzIiByZWNvcmQgdGhlIHRpcHMgb2YgdGhlIGhpc3RvcnkgZ3JhcGgsIGlvdywgd2hhdCB0aGUgcmVhZGVyIG9mIHRoZQorICBidW5kbGUgQ0FOICJnaXQgZmV0Y2giIGZyb20gaXQuCisKKyogIlBhY2siIGlzIHRoZSBwYWNrIGRhdGEgc3RyZWFtICJnaXQgZmV0Y2giIHdvdWxkIHNlbmQsIGlmIHlvdSBmZXRjaCBmcm9tIGEKKyAgcmVwb3NpdG9yeSB0aGF0IGhhcyB0aGUgcmVmZXJlbmNlcyByZWNvcmRlZCBpbiB0aGUgIlJlZmVyZW5jZXMiIGFib3ZlIGludG8gYQorICByZXBvc2l0b3J5IHRoYXQgaGFzIHJlZmVyZW5jZXMgcG9pbnRpbmcgYXQgdGhlIG9iamVjdHMgbGlzdGVkIGluCisgICJQcmVyZXF1aXNpdGVzIiBhYm92ZS4KKworSW4gdGhlIGJ1bmRsZSBmb3JtYXQsIHRoZXJlIGNhbiBiZSBhIGNvbW1lbnQgZm9sbG93aW5nIGEgcHJlcmVxdWlzaXRlIG9iai1pZC4KK1RoaXMgaXMgYSBjb21tZW50IGFuZCBpdCBoYXMgbm8gc3BlY2lmaWMgbWVhbmluZy4gVGhlIHdyaXRlciBvZiB0aGUgYnVuZGxlIE1BWQorcHV0IGFueSBzdHJpbmcgaGVyZS4gVGhlIHJlYWRlciBvZiB0aGUgYnVuZGxlIE1VU1QgaWdub3JlIHRoZSBjb21tZW50LgorCis9PT0gTm90ZSBvbiB0aGUgc2hhbGxvdyBjbG9uZSBhbmQgYSBHaXQgYnVuZGxlCisKK05vdGUgdGhhdCB0aGUgcHJlcmVxdWlzaXRlcyBkb2VzIG5vdCByZXByZXNlbnQgYSBzaGFsbG93LWNsb25lIGJvdW5kYXJ5LiBUaGUKK3NlbWFudGljcyBvZiB0aGUgcHJlcmVxdWlzaXRlcyBhbmQgdGhlIHNoYWxsb3ctY2xvbmUgYm91bmRhcmllcyBhcmUgZGlmZmVyZW50LAorYW5kIHRoZSBHaXQgYnVuZGxlIHYyIGZvcm1hdCBjYW5ub3QgcmVwcmVzZW50IGEgc2hhbGxvdyBjbG9uZSByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGYxNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxMDQgQEAKK0dpdCBjb21taXQgZ3JhcGggZm9ybWF0Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgR2l0IGNvbW1pdCBncmFwaCBzdG9yZXMgYSBsaXN0IG9mIGNvbW1pdCBPSURzIGFuZCBzb21lIGFzc29jaWF0ZWQKK21ldGFkYXRhLCBpbmNsdWRpbmc6CisKKy0gVGhlIGdlbmVyYXRpb24gbnVtYmVyIG9mIHRoZSBjb21taXQuIENvbW1pdHMgd2l0aCBubyBwYXJlbnRzIGhhdmUKKyAgZ2VuZXJhdGlvbiBudW1iZXIgMTsgY29tbWl0cyB3aXRoIHBhcmVudHMgaGF2ZSBnZW5lcmF0aW9uIG51bWJlcgorICBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtIGdlbmVyYXRpb24gbnVtYmVyIG9mIGl0cyBwYXJlbnRzLiBXZQorICByZXNlcnZlIHplcm8gYXMgc3BlY2lhbCwgYW5kIGNhbiBiZSB1c2VkIHRvIG1hcmsgYSBnZW5lcmF0aW9uCisgIG51bWJlciBpbnZhbGlkIG9yIGFzICJub3QgY29tcHV0ZWQiLgorCistIFRoZSByb290IHRyZWUgT0lELgorCistIFRoZSBjb21taXQgZGF0ZS4KKworLSBUaGUgcGFyZW50cyBvZiB0aGUgY29tbWl0LCBzdG9yZWQgdXNpbmcgcG9zaXRpb25hbCByZWZlcmVuY2VzIHdpdGhpbgorICB0aGUgZ3JhcGggZmlsZS4KKworVGhlc2UgcG9zaXRpb25hbCByZWZlcmVuY2VzIGFyZSBzdG9yZWQgYXMgdW5zaWduZWQgMzItYml0IGludGVnZXJzCitjb3JyZXNwb25kaW5nIHRvIHRoZSBhcnJheSBwb3NpdGlvbiB3aXRoaW4gdGhlIGxpc3Qgb2YgY29tbWl0IE9JRHMuIER1ZQordG8gc29tZSBzcGVjaWFsIGNvbnN0YW50cyB3ZSB1c2UgdG8gdHJhY2sgcGFyZW50cywgd2UgY2FuIHN0b3JlIGF0IG1vc3QKKygxIDw8IDMwKSArICgxIDw8IDI5KSArICgxIDw8IDI4KSAtIDEgKGFyb3VuZCAxLjggYmlsbGlvbikgY29tbWl0cy4KKworPT0gQ29tbWl0IGdyYXBoIGZpbGVzIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKK0luIG9yZGVyIHRvIGFsbG93IGV4dGVuc2lvbnMgdGhhdCBhZGQgZXh0cmEgZGF0YSB0byB0aGUgZ3JhcGgsIHdlIG9yZ2FuaXplCit0aGUgYm9keSBpbnRvICJjaHVua3MiIGFuZCBwcm92aWRlIGEgYmluYXJ5IGxvb2t1cCB0YWJsZSBhdCB0aGUgYmVnaW5uaW5nCitvZiB0aGUgYm9keS4gVGhlIGhlYWRlciBpbmNsdWRlcyBjZXJ0YWluIHZhbHVlcywgc3VjaCBhcyBudW1iZXIgb2YgY2h1bmtzCithbmQgaGFzaCB0eXBlLgorCitBbGwgNC1ieXRlIG51bWJlcnMgYXJlIGluIG5ldHdvcmsgb3JkZXIuCisKK0hFQURFUjoKKworICA0LWJ5dGUgc2lnbmF0dXJlOgorICAgICAgVGhlIHNpZ25hdHVyZSBpczogeydDJywgJ0cnLCAnUCcsICdIJ30KKworICAxLWJ5dGUgdmVyc2lvbiBudW1iZXI6CisgICAgICBDdXJyZW50bHksIHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gaXMgMS4KKworICAxLWJ5dGUgSGFzaCBWZXJzaW9uICgxID0gU0hBLTEpCisgICAgICBXZSBpbmZlciB0aGUgaGFzaCBsZW5ndGggKEgpIGZyb20gdGhpcyB2YWx1ZS4KKworICAxLWJ5dGUgbnVtYmVyIChDKSBvZiAiY2h1bmtzIgorCisgIDEtYnl0ZSBudW1iZXIgKEIpIG9mIGJhc2UgY29tbWl0LWdyYXBocworICAgICAgV2UgaW5mZXIgdGhlIGxlbmd0aCAoSCpCKSBvZiB0aGUgQmFzZSBHcmFwaHMgY2h1bmsKKyAgICAgIGZyb20gdGhpcyB2YWx1ZS4KKworQ0hVTksgTE9PS1VQOgorCisgIChDICsgMSkgKiAxMiBieXRlcyBsaXN0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cyBmb3IgdGhlIGNodW5rczoKKyAgICAgIEZpcnN0IDQgYnl0ZXMgZGVzY3JpYmUgdGhlIGNodW5rIGlkLiBWYWx1ZSAwIGlzIGEgdGVybWluYXRpbmcgbGFiZWwuCisgICAgICBPdGhlciA4IGJ5dGVzIHByb3ZpZGUgdGhlIGJ5dGUtb2Zmc2V0IGluIGN1cnJlbnQgZmlsZSBmb3IgY2h1bmsgdG8KKyAgICAgIHN0YXJ0LiAoQ2h1bmtzIGFyZSBvcmRlcmVkIGNvbnRpZ3VvdXNseSBpbiB0aGUgZmlsZSwgc28geW91IGNhbiBpbmZlcgorICAgICAgdGhlIGxlbmd0aCB1c2luZyB0aGUgbmV4dCBjaHVuayBwb3NpdGlvbiBpZiBuZWNlc3NhcnkuKSBFYWNoIGNodW5rCisgICAgICBJRCBhcHBlYXJzIGF0IG1vc3Qgb25jZS4KKworICBUaGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJvZHkgaXMgZGVzY3JpYmVkIG9uZSBjaHVuayBhdCBhIHRpbWUsIGFuZAorICB0aGVzZSBjaHVua3MgbWF5IGJlIGdpdmVuIGluIGFueSBvcmRlci4gQ2h1bmtzIGFyZSByZXF1aXJlZCB1bmxlc3MKKyAgb3RoZXJ3aXNlIHNwZWNpZmllZC4KKworQ0hVTksgREFUQToKKworICBPSUQgRmFub3V0IChJRDogeydPJywgJ0knLCAnRCcsICdGJ30pICgyNTYgKiA0IGJ5dGVzKQorICAgICAgVGhlIGl0aCBlbnRyeSwgRltpXSwgc3RvcmVzIHRoZSBudW1iZXIgb2YgT0lEcyB3aXRoIGZpcnN0CisgICAgICBieXRlIGF0IG1vc3QgaS4gVGh1cyBGWzI1NV0gc3RvcmVzIHRoZSB0b3RhbAorICAgICAgbnVtYmVyIG9mIGNvbW1pdHMgKE4pLgorCisgIE9JRCBMb29rdXAgKElEOiB7J08nLCAnSScsICdEJywgJ0wnfSkgKE4gKiBIIGJ5dGVzKQorICAgICAgVGhlIE9JRHMgZm9yIGFsbCBjb21taXRzIGluIHRoZSBncmFwaCwgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4KKworICBDb21taXQgRGF0YSAoSUQ6IHsnQycsICdEJywgJ0EnLCAnVCcgfSkgKE4gKiAoSCArIDE2KSBieXRlcykKKyAgICAqIFRoZSBmaXJzdCBIIGJ5dGVzIGFyZSBmb3IgdGhlIE9JRCBvZiB0aGUgcm9vdCB0cmVlLgorICAgICogVGhlIG5leHQgOCBieXRlcyBhcmUgZm9yIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGZpcnN0IHR3byBwYXJlbnRzCisgICAgICBvZiB0aGUgaXRoIGNvbW1pdC4gU3RvcmVzIHZhbHVlIDB4NzAwMDAwMCBpZiBubyBwYXJlbnQgaW4gdGhhdAorICAgICAgcG9zaXRpb24uIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdHdvIHBhcmVudHMsIHRoZSBzZWNvbmQgdmFsdWUKKyAgICAgIGhhcyBpdHMgbW9zdC1zaWduaWZpY2FudCBiaXQgb24gYW5kIHRoZSBvdGhlciBiaXRzIHN0b3JlIGFuIGFycmF5CisgICAgICBwb3NpdGlvbiBpbnRvIHRoZSBFeHRyYSBFZGdlIExpc3QgY2h1bmsuCisgICAgKiBUaGUgbmV4dCA4IGJ5dGVzIHN0b3JlIHRoZSBnZW5lcmF0aW9uIG51bWJlciBvZiB0aGUgY29tbWl0IGFuZAorICAgICAgdGhlIGNvbW1pdCB0aW1lIGluIHNlY29uZHMgc2luY2UgRVBPQ0guIFRoZSBnZW5lcmF0aW9uIG51bWJlcgorICAgICAgdXNlcyB0aGUgaGlnaGVyIDMwIGJpdHMgb2YgdGhlIGZpcnN0IDQgYnl0ZXMsIHdoaWxlIHRoZSBjb21taXQKKyAgICAgIHRpbWUgdXNlcyB0aGUgMzIgYml0cyBvZiB0aGUgc2Vjb25kIDQgYnl0ZXMsIGFsb25nIHdpdGggdGhlIGxvd2VzdAorICAgICAgMiBiaXRzIG9mIHRoZSBsb3dlc3QgYnl0ZSwgc3RvcmluZyB0aGUgMzNyZCBhbmQgMzR0aCBiaXQgb2YgdGhlCisgICAgICBjb21taXQgdGltZS4KKworICBFeHRyYSBFZGdlIExpc3QgKElEOiB7J0UnLCAnRCcsICdHJywgJ0UnfSkgW09wdGlvbmFsXQorICAgICAgVGhpcyBsaXN0IG9mIDQtYnl0ZSB2YWx1ZXMgc3RvcmUgdGhlIHNlY29uZCB0aHJvdWdoIG50aCBwYXJlbnRzIGZvcgorICAgICAgYWxsIG9jdG9wdXMgbWVyZ2VzLiBUaGUgc2Vjb25kIHBhcmVudCB2YWx1ZSBpbiB0aGUgY29tbWl0IGRhdGEgc3RvcmVzCisgICAgICBhbiBhcnJheSBwb3NpdGlvbiB3aXRoaW4gdGhpcyBsaXN0IGFsb25nIHdpdGggdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0CisgICAgICBvbi4gU3RhcnRpbmcgYXQgdGhhdCBhcnJheSBwb3NpdGlvbiwgaXRlcmF0ZSB0aHJvdWdoIHRoaXMgbGlzdCBvZiBjb21taXQKKyAgICAgIHBvc2l0aW9ucyBmb3IgdGhlIHBhcmVudHMgdW50aWwgcmVhY2hpbmcgYSB2YWx1ZSB3aXRoIHRoZSBtb3N0LXNpZ25pZmljYW50CisgICAgICBiaXQgb24uIFRoZSBvdGhlciBiaXRzIGNvcnJlc3BvbmQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHBhcmVudC4KKworICBCYXNlIEdyYXBocyBMaXN0IChJRDogeydCJywgJ0EnLCAnUycsICdFJ30pIFtPcHRpb25hbF0KKyAgICAgIFRoaXMgbGlzdCBvZiBILWJ5dGUgaGFzaGVzIGRlc2NyaWJlIGEgc2V0IG9mIEIgY29tbWl0LWdyYXBoIGZpbGVzIHRoYXQKKyAgICAgIGZvcm0gYSBjb21taXQtZ3JhcGggY2hhaW4uIFRoZSBncmFwaCBwb3NpdGlvbiBmb3IgdGhlIGl0aCBjb21taXQgaW4gdGhpcworICAgICAgZmlsZSdzIE9JRCBMb29rdXAgY2h1bmsgaXMgZXF1YWwgdG8gaSBwbHVzIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpbiBhbGwKKyAgICAgIGJhc2UgZ3JhcGhzLiAgSWYgQiBpcyBub24temVybywgdGhpcyBjaHVuayBtdXN0IGV4aXN0LgorCitUUkFJTEVSOgorCisJSC1ieXRlIEhBU0gtY2hlY2tzdW0gb2YgYWxsIG9mIHRoZSBhYm92ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOGZhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgudHh0CkBAIC0wLDAgKzEsMzUwIEBACitHaXQgQ29tbWl0IEdyYXBoIERlc2lnbiBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworR2l0IHdhbGtzIHRoZSBjb21taXQgZ3JhcGggZm9yIG1hbnkgcmVhc29ucywgaW5jbHVkaW5nOgorCisxLiBMaXN0aW5nIGFuZCBmaWx0ZXJpbmcgY29tbWl0IGhpc3RvcnkuCisyLiBDb21wdXRpbmcgbWVyZ2UgYmFzZXMuCisKK1RoZXNlIG9wZXJhdGlvbnMgY2FuIGJlY29tZSBzbG93IGFzIHRoZSBjb21taXQgY291bnQgZ3Jvd3MuIFRoZSBtZXJnZQorYmFzZSBjYWxjdWxhdGlvbiBzaG93cyB1cCBpbiBtYW55IHVzZXItZmFjaW5nIGNvbW1hbmRzLCBzdWNoIGFzICdtZXJnZS1iYXNlJworb3IgJ3N0YXR1cycgYW5kIGNhbiB0YWtlIG1pbnV0ZXMgdG8gY29tcHV0ZSBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaGFwZS4KKworVGhlcmUgYXJlIHR3byBtYWluIGNvc3RzIGhlcmU6CisKKzEuIERlY29tcHJlc3NpbmcgYW5kIHBhcnNpbmcgY29tbWl0cy4KKzIuIFdhbGtpbmcgdGhlIGVudGlyZSBncmFwaCB0byBzYXRpc2Z5IHRvcG9sb2dpY2FsIG9yZGVyIGNvbnN0cmFpbnRzLgorCitUaGUgY29tbWl0LWdyYXBoIGZpbGUgaXMgYSBzdXBwbGVtZW50YWwgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBhY2NlbGVyYXRlcworY29tbWl0IGdyYXBoIHdhbGtzLiBJZiBhIHVzZXIgZG93bmdyYWRlcyBvciBkaXNhYmxlcyB0aGUgJ2NvcmUuY29tbWl0R3JhcGgnCitjb25maWcgc2V0dGluZywgdGhlbiB0aGUgZXhpc3RpbmcgT0RCIGlzIHN1ZmZpY2llbnQuIFRoZSBmaWxlIGlzIHN0b3JlZAorYXMgImNvbW1pdC1ncmFwaCIgZWl0aGVyIGluIHRoZSAuZ2l0L29iamVjdHMvaW5mbyBkaXJlY3Rvcnkgb3IgaW4gdGhlIGluZm8KK2RpcmVjdG9yeSBvZiBhbiBhbHRlcm5hdGUuCisKK1RoZSBjb21taXQtZ3JhcGggZmlsZSBzdG9yZXMgdGhlIGNvbW1pdCBncmFwaCBzdHJ1Y3R1cmUgYWxvbmcgd2l0aCBzb21lCitleHRyYSBtZXRhZGF0YSB0byBzcGVlZCB1cCBncmFwaCB3YWxrcy4gQnkgbGlzdGluZyBjb21taXQgT0lEcyBpbgorbGV4aWNvZ3JhcGhpYyBvcmRlciwgd2UgY2FuIGlkZW50aWZ5IGFuIGludGVnZXIgcG9zaXRpb24gZm9yIGVhY2ggY29tbWl0CithbmQgcmVmZXIgdG8gdGhlIHBhcmVudHMgb2YgYSBjb21taXQgdXNpbmcgdGhvc2UgaW50ZWdlciBwb3NpdGlvbnMuIFdlCit1c2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIGluaXRpYWwgY29tbWl0cyBhbmQgdGhlbiB1c2UgdGhlIGludGVnZXIKK3Bvc2l0aW9ucyBmb3IgZmFzdCBsb29rdXBzIGR1cmluZyB0aGUgd2Fsay4KKworQSBjb25zdW1lciBtYXkgbG9hZCB0aGUgZm9sbG93aW5nIGluZm8gZm9yIGEgY29tbWl0IGZyb20gdGhlIGdyYXBoOgorCisxLiBUaGUgY29tbWl0IE9JRC4KKzIuIFRoZSBsaXN0IG9mIHBhcmVudHMsIGFsb25nIHdpdGggdGhlaXIgaW50ZWdlciBwb3NpdGlvbi4KKzMuIFRoZSBjb21taXQgZGF0ZS4KKzQuIFRoZSByb290IHRyZWUgT0lELgorNS4gVGhlIGdlbmVyYXRpb24gbnVtYmVyIChzZWUgZGVmaW5pdGlvbiBiZWxvdykuCisKK1ZhbHVlcyAxLTQgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIHBhcnNlX2NvbW1pdF9nZW50bHkoKS4KKworRGVmaW5lIHRoZSAiZ2VuZXJhdGlvbiBudW1iZXIiIG9mIGEgY29tbWl0IHJlY3Vyc2l2ZWx5IGFzIGZvbGxvd3M6CisKKyAqIEEgY29tbWl0IHdpdGggbm8gcGFyZW50cyAoYSByb290IGNvbW1pdCkgaGFzIGdlbmVyYXRpb24gbnVtYmVyIG9uZS4KKworICogQSBjb21taXQgd2l0aCBhdCBsZWFzdCBvbmUgcGFyZW50IGhhcyBnZW5lcmF0aW9uIG51bWJlciBvbmUgbW9yZSB0aGFuCisgICB0aGUgbGFyZ2VzdCBnZW5lcmF0aW9uIG51bWJlciBhbW9uZyBpdHMgcGFyZW50cy4KKworRXF1aXZhbGVudGx5LCB0aGUgZ2VuZXJhdGlvbiBudW1iZXIgb2YgYSBjb21taXQgQSBpcyBvbmUgbW9yZSB0aGFuIHRoZQorbGVuZ3RoIG9mIGEgbG9uZ2VzdCBwYXRoIGZyb20gQSB0byBhIHJvb3QgY29tbWl0LiBUaGUgcmVjdXJzaXZlIGRlZmluaXRpb24KK2lzIGVhc2llciB0byB1c2UgZm9yIGNvbXB1dGF0aW9uIGFuZCBvYnNlcnZpbmcgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eToKKworICAgIElmIEEgYW5kIEIgYXJlIGNvbW1pdHMgd2l0aCBnZW5lcmF0aW9uIG51bWJlcnMgTiBhbmQgTSwgcmVzcGVjdGl2ZWx5LAorICAgIGFuZCBOIDw9IE0sIHRoZW4gQSBjYW5ub3QgcmVhY2ggQi4gVGhhdCBpcywgd2Uga25vdyB3aXRob3V0IHNlYXJjaGluZworICAgIHRoYXQgQiBpcyBub3QgYW4gYW5jZXN0b3Igb2YgQSBiZWNhdXNlIGl0IGlzIGZ1cnRoZXIgZnJvbSBhIHJvb3QgY29tbWl0CisgICAgdGhhbiBBLgorCisgICAgQ29udmVyc2VseSwgd2hlbiBjaGVja2luZyBpZiBBIGlzIGFuIGFuY2VzdG9yIG9mIEIsIHRoZW4gd2Ugb25seSBuZWVkCisgICAgdG8gd2FsayBjb21taXRzIHVudGlsIGFsbCBjb21taXRzIG9uIHRoZSB3YWxrIGJvdW5kYXJ5IGhhdmUgZ2VuZXJhdGlvbgorICAgIG51bWJlciBhdCBtb3N0IE4uIElmIHdlIHdhbGsgY29tbWl0cyB1c2luZyBhIHByaW9yaXR5IHF1ZXVlIHNlZWRlZCBieQorICAgIGdlbmVyYXRpb24gbnVtYmVycywgdGhlbiB3ZSBhbHdheXMgZXhwYW5kIHRoZSBib3VuZGFyeSBjb21taXQgd2l0aCBoaWdoZXN0CisgICAgZ2VuZXJhdGlvbiBudW1iZXIgYW5kIGNhbiBlYXNpbHkgZGV0ZWN0IHRoZSBzdG9wcGluZyBjb25kaXRpb24uCisKK1RoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIHRpbWUgaXQgdGFrZXMgdG8KK3dhbGsgY29tbWl0cyBhbmQgZGV0ZXJtaW5lIHRvcG9sb2dpY2FsIHJlbGF0aW9uc2hpcHMuIFdpdGhvdXQgZ2VuZXJhdGlvbgorbnVtYmVycywgdGhlIGdlbmVyYWwgaGV1cmlzdGljIGlzIHRoZSBmb2xsb3dpbmc6CisKKyAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggY29tbWl0IHRpbWUgWCBhbmQgWSwgcmVzcGVjdGl2ZWx5LCBhbmQKKyAgICBYIDwgWSwgdGhlbiBBIF9wcm9iYWJseV8gY2Fubm90IHJlYWNoIEIuCisKK1RoaXMgaGV1cmlzdGljIGlzIGN1cnJlbnRseSB1c2VkIHdoZW5ldmVyIHRoZSBjb21wdXRhdGlvbiBpcyBhbGxvd2VkIHRvCit2aW9sYXRlIHRvcG9sb2dpY2FsIHJlbGF0aW9uc2hpcHMgZHVlIHRvIGNsb2NrIHNrZXcgKHN1Y2ggYXMgImdpdCBsb2ciCit3aXRoIGRlZmF1bHQgb3JkZXIpLCBidXQgaXMgbm90IHVzZWQgd2hlbiB0aGUgdG9wb2xvZ2ljYWwgb3JkZXIgaXMKK3JlcXVpcmVkIChzdWNoIGFzIG1lcmdlIGJhc2UgY2FsY3VsYXRpb25zLCAiZ2l0IGxvZyAtLWdyYXBoIikuCisKK0luIHByYWN0aWNlLCB3ZSBleHBlY3Qgc29tZSBjb21taXRzIHRvIGJlIGNyZWF0ZWQgcmVjZW50bHkgYW5kIG5vdCBzdG9yZWQKK2luIHRoZSBjb21taXQgZ3JhcGguIFdlIGNhbiB0cmVhdCB0aGVzZSBjb21taXRzIGFzIGhhdmluZyAiaW5maW5pdGUiCitnZW5lcmF0aW9uIG51bWJlciBhbmQgd2FsayB1bnRpbCByZWFjaGluZyBjb21taXRzIHdpdGgga25vd24gZ2VuZXJhdGlvbgorbnVtYmVyLgorCitXZSB1c2UgdGhlIG1hY3JvIEdFTkVSQVRJT05fTlVNQkVSX0lORklOSVRZID0gMHhGRkZGRkZGRiB0byBtYXJrIGNvbW1pdHMgbm90CitpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUuIElmIGEgY29tbWl0LWdyYXBoIGZpbGUgd2FzIHdyaXR0ZW4gYnkgYSB2ZXJzaW9uCitvZiBHaXQgdGhhdCBkaWQgbm90IGNvbXB1dGUgZ2VuZXJhdGlvbiBudW1iZXJzLCB0aGVuIHRob3NlIGNvbW1pdHMgd2lsbAoraGF2ZSBnZW5lcmF0aW9uIG51bWJlciByZXByZXNlbnRlZCBieSB0aGUgbWFjcm8gR0VORVJBVElPTl9OVU1CRVJfWkVSTyA9IDAuCisKK1NpbmNlIHRoZSBjb21taXQtZ3JhcGggZmlsZSBpcyBjbG9zZWQgdW5kZXIgcmVhY2hhYmlsaXR5LCB3ZSBjYW4gZ3VhcmFudGVlCit0aGUgZm9sbG93aW5nIHdlYWtlciBjb25kaXRpb24gb24gYWxsIGNvbW1pdHM6CisKKyAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggZ2VuZXJhdGlvbiBudW1iZXJzIE4gYW5kIE0sIHJlc3BlY3RpdmVseSwKKyAgICBhbmQgTiA8IE0sIHRoZW4gQSBjYW5ub3QgcmVhY2ggQi4KKworTm90ZSBob3cgdGhlIHN0cmljdCBpbmVxdWFsaXR5IGRpZmZlcnMgZnJvbSB0aGUgaW5lcXVhbGl0eSB3aGVuIHdlIGhhdmUKK2Z1bGx5LWNvbXB1dGVkIGdlbmVyYXRpb24gbnVtYmVycy4gVXNpbmcgc3RyaWN0IGluZXF1YWxpdHkgbWF5IHJlc3VsdCBpbgord2Fsa2luZyBhIGZldyBleHRyYSBjb21taXRzLCBidXQgdGhlIHNpbXBsaWNpdHkgaW4gZGVhbGluZyB3aXRoIGNvbW1pdHMKK3dpdGggZ2VuZXJhdGlvbiBudW1iZXIgKl9JTkZJTklUWSBvciAqX1pFUk8gaXMgdmFsdWFibGUuCisKK1dlIHVzZSB0aGUgbWFjcm8gR0VORVJBVElPTl9OVU1CRVJfTUFYID0gMHgzRkZGRkZGRiB0byBmb3IgY29tbWl0cyB3aG9zZQorZ2VuZXJhdGlvbiBudW1iZXJzIGFyZSBjb21wdXRlZCB0byBiZSBhdCBsZWFzdCB0aGlzIHZhbHVlLiBXZSBsaW1pdCBhdAordGhpcyB2YWx1ZSBzaW5jZSBpdCBpcyB0aGUgbGFyZ2VzdCB2YWx1ZSB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlCitjb21taXQtZ3JhcGggZmlsZSB1c2luZyB0aGUgMzAgYml0cyBhdmFpbGFibGUgdG8gZ2VuZXJhdGlvbiBudW1iZXJzLiBUaGlzCitwcmVzZW50cyBhbm90aGVyIGNhc2Ugd2hlcmUgYSBjb21taXQgY2FuIGhhdmUgZ2VuZXJhdGlvbiBudW1iZXIgZXF1YWwgdG8KK3RoYXQgb2YgYSBwYXJlbnQuCisKK0Rlc2lnbiBEZXRhaWxzCistLS0tLS0tLS0tLS0tLQorCistIFRoZSBjb21taXQtZ3JhcGggZmlsZSBpcyBzdG9yZWQgaW4gYSBmaWxlIG5hbWVkICdjb21taXQtZ3JhcGgnIGluIHRoZQorICAuZ2l0L29iamVjdHMvaW5mbyBkaXJlY3RvcnkuIFRoaXMgY291bGQgYmUgc3RvcmVkIGluIHRoZSBpbmZvIGRpcmVjdG9yeQorICBvZiBhbiBhbHRlcm5hdGUuCisKKy0gVGhlIGNvcmUuY29tbWl0R3JhcGggY29uZmlnIHNldHRpbmcgbXVzdCBiZSBvbiB0byBjb25zdW1lIGdyYXBoIGZpbGVzLgorCistIFRoZSBmaWxlIGZvcm1hdCBpbmNsdWRlcyBwYXJhbWV0ZXJzIGZvciB0aGUgb2JqZWN0IElEIGhhc2ggZnVuY3Rpb24sCisgIHNvIGEgZnV0dXJlIGNoYW5nZSBvZiBoYXNoIGFsZ29yaXRobSBkb2VzIG5vdCByZXF1aXJlIGEgY2hhbmdlIGluIGZvcm1hdC4KKworLSBDb21taXQgZ3JhZnRzIGFuZCByZXBsYWNlIG9iamVjdHMgY2FuIGNoYW5nZSB0aGUgc2hhcGUgb2YgdGhlIGNvbW1pdAorICBoaXN0b3J5LiBUaGUgbGF0dGVyIGNhbiBhbHNvIGJlIGVuYWJsZWQvZGlzYWJsZWQgb24gdGhlIGZseSB1c2luZworICBgLS1uby1yZXBsYWNlLW9iamVjdHNgLiBUaGlzIGxlYWRzIHRvIGRpZmZpY3VsdGx5IHN0b3JpbmcgYm90aCBwb3NzaWJsZQorICBpbnRlcnByZXRhdGlvbnMgb2YgYSBjb21taXQgaWQsIGVzcGVjaWFsbHkgd2hlbiBjb21wdXRpbmcgZ2VuZXJhdGlvbgorICBudW1iZXJzLiBUaGUgY29tbWl0LWdyYXBoIHdpbGwgbm90IGJlIHJlYWQgb3Igd3JpdHRlbiB3aGVuCisgIHJlcGxhY2Utb2JqZWN0cyBvciBncmFmdHMgYXJlIHByZXNlbnQuCisKKy0gU2hhbGxvdyBjbG9uZXMgY3JlYXRlIGdyYWZ0cyBvZiBjb21taXRzIGJ5IGRyb3BwaW5nIHRoZWlyIHBhcmVudHMuIFRoaXMKKyAgbGVhZHMgdGhlIGNvbW1pdC1ncmFwaCB0byB0aGluayB0aG9zZSBjb21taXRzIGhhdmUgZ2VuZXJhdGlvbiBudW1iZXIgMS4KKyAgSWYgYW5kIHdoZW4gdGhvc2UgY29tbWl0cyBhcmUgbWFkZSB1bnNoYWxsb3csIHRob3NlIGdlbmVyYXRpb24gbnVtYmVycworICBiZWNvbWUgaW52YWxpZC4gU2luY2Ugc2hhbGxvdyBjbG9uZXMgYXJlIGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBjb21taXQKKyAgaGlzdG9yeSB0byBhIHZlcnkgc21hbGwgc2V0IG9mIGNvbW1pdHMsIHRoZSBjb21taXQtZ3JhcGggZmVhdHVyZSBpcyBsZXNzCisgIGhlbHBmdWwgZm9yIHRoZXNlIGNsb25lcywgYW55d2F5LiBUaGUgY29tbWl0LWdyYXBoIHdpbGwgbm90IGJlIHJlYWQgb3IKKyAgd3JpdHRlbiB3aGVuIHNoYWxsb3cgY29tbWl0cyBhcmUgcHJlc2VudC4KKworQ29tbWl0IEdyYXBocyBDaGFpbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1R5cGljYWxseSwgcmVwb3MgZ3JvdyB3aXRoIG5lYXItY29uc3RhbnQgdmVsb2NpdHkgKGNvbW1pdHMgcGVyIGRheSkuIE92ZXIgdGltZSwKK3RoZSBudW1iZXIgb2YgY29tbWl0cyBhZGRlZCBieSBhIGZldGNoIG9wZXJhdGlvbiBpcyBtdWNoIHNtYWxsZXIgdGhhbiB0aGUKK251bWJlciBvZiBjb21taXRzIGluIHRoZSBmdWxsIGhpc3RvcnkuIEJ5IGNyZWF0aW5nIGEgImNoYWluIiBvZiBjb21taXQtZ3JhcGhzLAord2UgZW5hYmxlIGZhc3Qgd3JpdGVzIG9mIG5ldyBjb21taXQgZGF0YSB3aXRob3V0IHJld3JpdGluZyB0aGUgZW50aXJlIGNvbW1pdAoraGlzdG9yeSAtLSBhdCBsZWFzdCwgbW9zdCBvZiB0aGUgdGltZS4KKworIyMgRmlsZSBMYXlvdXQKKworQSBjb21taXQtZ3JhcGggY2hhaW4gdXNlcyBtdWx0aXBsZSBmaWxlcywgYW5kIHdlIHVzZSBhIGZpeGVkIG5hbWluZyBjb252ZW50aW9uCit0byBvcmdhbml6ZSB0aGVzZSBmaWxlcy4gRWFjaCBjb21taXQtZ3JhcGggZmlsZSBoYXMgYSBuYW1lCitgJE9CSkRJUi9pbmZvL2NvbW1pdC1ncmFwaHMvZ3JhcGgte2hhc2h9LmdyYXBoYCB3aGVyZSBge2hhc2h9YCBpcyB0aGUgaGV4LQordmFsdWVkIGhhc2ggc3RvcmVkIGluIHRoZSBmb290ZXIgb2YgdGhhdCBmaWxlICh3aGljaCBpcyBhIGhhc2ggb2YgdGhlIGZpbGUncworY29udGVudHMgYmVmb3JlIHRoYXQgaGFzaCkuIEZvciBhIGNoYWluIG9mIGNvbW1pdC1ncmFwaCBmaWxlcywgYSBwbGFpbi10ZXh0CitmaWxlIGF0IGAkT0JKRElSL2luZm8vY29tbWl0LWdyYXBocy9jb21taXQtZ3JhcGgtY2hhaW5gIGNvbnRhaW5zIHRoZQoraGFzaGVzIGZvciB0aGUgZmlsZXMgaW4gb3JkZXIgZnJvbSAibG93ZXN0IiB0byAiaGlnaGVzdCIuCisKK0ZvciBleGFtcGxlLCBpZiB0aGUgYGNvbW1pdC1ncmFwaC1jaGFpbmAgZmlsZSBjb250YWlucyB0aGUgbGluZXMKKworYGBgCisJe2hhc2gwfQorCXtoYXNoMX0KKwl7aGFzaDJ9CitgYGAKKwordGhlbiB0aGUgY29tbWl0LWdyYXBoIGNoYWluIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBkaWFncmFtOgorCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgIGdyYXBoLXtoYXNoMn0uZ3JhcGggIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICBncmFwaC17aGFzaDF9LmdyYXBoICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgZ3JhcGgte2hhc2gwfS5ncmFwaCAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworTGV0IFgwIGJlIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpbiBgZ3JhcGgte2hhc2gwfS5ncmFwaGAsIFgxIGJlIHRoZSBudW1iZXIgb2YKK2NvbW1pdHMgaW4gYGdyYXBoLXtoYXNoMX0uZ3JhcGhgLCBhbmQgWDIgYmUgdGhlIG51bWJlciBvZiBjb21taXRzIGluCitgZ3JhcGgte2hhc2gyfS5ncmFwaGAuIElmIGEgY29tbWl0IGFwcGVhcnMgaW4gcG9zaXRpb24gaSBpbiBgZ3JhcGgte2hhc2gyfS5ncmFwaGAsCit0aGVuIHdlIGludGVycHJldCB0aGlzIGFzIGJlaW5nIHRoZSBjb21taXQgaW4gcG9zaXRpb24gKFgwICsgWDEgKyBpKSwgYW5kIHRoYXQKK3dpbGwgYmUgdXNlZCBhcyBpdHMgImdyYXBoIHBvc2l0aW9uIi4gVGhlIGNvbW1pdHMgaW4gYGdyYXBoLXtoYXNoMn0uZ3JhcGhgIHVzZSB0aGVzZQorcG9zaXRpb25zIHRvIHJlZmVyIHRvIHRoZWlyIHBhcmVudHMsIHdoaWNoIG1heSBiZSBpbiBgZ3JhcGgte2hhc2gxfS5ncmFwaGAgb3IKK2BncmFwaC17aGFzaDB9LmdyYXBoYC4gV2UgY2FuIG5hdmlnYXRlIHRvIGFuIGFyYml0cmFyeSBjb21taXQgaW4gcG9zaXRpb24gaiBieSBjaGVja2luZworaXRzIGNvbnRhaW5tZW50IGluIHRoZSBpbnRlcnZhbHMgWzAsIFgwKSwgW1gwLCBYMCArIFgxKSwgW1gwICsgWDEsIFgwICsgWDEgKworWDIpLgorCitFYWNoIGNvbW1pdC1ncmFwaCBmaWxlIChleGNlcHQgdGhlIGJhc2UsIGBncmFwaC17aGFzaDB9LmdyYXBoYCkgY29udGFpbnMgZGF0YQorc3BlY2lmeWluZyB0aGUgaGFzaGVzIG9mIGFsbCBmaWxlcyBpbiB0aGUgbG93ZXIgbGF5ZXJzLiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwKK2BncmFwaC17aGFzaDF9LmdyYXBoYCBjb250YWlucyBge2hhc2gwfWAgd2hpbGUgYGdyYXBoLXtoYXNoMn0uZ3JhcGhgIGNvbnRhaW5zCitge2hhc2gwfWAgYW5kIGB7aGFzaDF9YC4KKworIyMgTWVyZ2luZyBjb21taXQtZ3JhcGggZmlsZXMKKworSWYgd2Ugb25seSBhZGRlZCBhIG5ldyBjb21taXQtZ3JhcGggZmlsZSBvbiBldmVyeSB3cml0ZSwgd2Ugd291bGQgcnVuIGludG8gYQorbGluZWFyIHNlYXJjaCBwcm9ibGVtIHRocm91Z2ggbWFueSBjb21taXQtZ3JhcGggZmlsZXMuICBJbnN0ZWFkLCB3ZSB1c2UgYSBtZXJnZQorc3RyYXRlZ3kgdG8gZGVjaWRlIHdoZW4gdGhlIHN0YWNrIHNob3VsZCBjb2xsYXBzZSBzb21lIG51bWJlciBvZiBsZXZlbHMuCisKK1RoZSBkaWFncmFtIGJlbG93IHNob3dzIHN1Y2ggYSBjb2xsYXBzZS4gQXMgYSBzZXQgb2YgbmV3IGNvbW1pdHMgYXJlIGFkZGVkLCBpdAoraXMgZGV0ZXJtaW5lZCBieSB0aGUgbWVyZ2Ugc3RyYXRlZ3kgdGhhdCB0aGUgZmlsZXMgc2hvdWxkIGNvbGxhcHNlIHRvCitgZ3JhcGgte2hhc2gxfWAuIFRodXMsIHRoZSBuZXcgY29tbWl0cywgdGhlIGNvbW1pdHMgaW4gYGdyYXBoLXtoYXNoMn1gIGFuZAordGhlIGNvbW1pdHMgaW4gYGdyYXBoLXtoYXNoMX1gIHNob3VsZCBiZSBjb21iaW5lZCBpbnRvIGEgbmV3IGBncmFwaC17aGFzaDN9YAorZmlsZS4KKworCQkJICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCQkgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKwkJCSAgICB8ICAgIChuZXcgY29tbWl0cykgICAgfAorCQkJICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisJCQkgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJCSAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgZ3JhcGgte2hhc2gyfSB8LT58ICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICBncmFwaC17aGFzaDF9IHwtPnwgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfCAgICAgICAgICAgICAgICAgIHRtcF9ncmFwaFhYWAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICBncmFwaC17aGFzaDB9IHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0R1cmluZyB0aGlzIHByb2Nlc3MsIHRoZSBjb21taXRzIHRvIHdyaXRlIGFyZSBjb21iaW5lZCwgc29ydGVkIGFuZCB3ZSB3cml0ZSB0aGUKK2NvbnRlbnRzIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIGFsbCB3aGlsZSBob2xkaW5nIGEgYGNvbW1pdC1ncmFwaC1jaGFpbi5sb2NrYAorbG9jay1maWxlLiAgV2hlbiB0aGUgZmlsZSBpcyBmbHVzaGVkLCB3ZSByZW5hbWUgaXQgdG8gYGdyYXBoLXtoYXNoM31gCithY2NvcmRpbmcgdG8gdGhlIGNvbXB1dGVkIGB7aGFzaDN9YC4gRmluYWxseSwgd2Ugd3JpdGUgdGhlIG5ldyBjaGFpbiBkYXRhIHRvCitgY29tbWl0LWdyYXBoLWNoYWluLmxvY2tgOgorCitgYGAKKwl7aGFzaDN9CisJe2hhc2gwfQorYGBgCisKK1dlIHRoZW4gY2xvc2UgdGhlIGxvY2stZmlsZS4KKworIyMgTWVyZ2UgU3RyYXRlZ3kKKworV2hlbiB3cml0aW5nIGEgc2V0IG9mIGNvbW1pdHMgdGhhdCBkbyBub3QgZXhpc3QgaW4gdGhlIGNvbW1pdC1ncmFwaCBzdGFjayBvZgoraGVpZ2h0IE4sIHdlIGRlZmF1bHQgdG8gY3JlYXRpbmcgYSBuZXcgZmlsZSBhdCBsZXZlbCBOICsgMS4gV2UgdGhlbiBkZWNpZGUgdG8KK21lcmdlIHdpdGggdGhlIE50aCBsZXZlbCBpZiBvbmUgb2YgdHdvIGNvbmRpdGlvbnMgaG9sZDoKKworICAxLiBgLS1zaXplLW11bHRpcGxlPTxYPmAgaXMgc3BlY2lmaWVkIG9yIFggPSAyLCBhbmQgdGhlIG51bWJlciBvZiBjb21taXRzIGluCisgICAgIGxldmVsIE4gaXMgbGVzcyB0aGFuIFggdGltZXMgdGhlIG51bWJlciBvZiBjb21taXRzIGluIGxldmVsIE4gKyAxLgorCisgIDIuIGAtLW1heC1jb21taXRzPTxDPmAgaXMgc3BlY2lmaWVkIHdpdGggbm9uLXplcm8gQyBhbmQgdGhlIG51bWJlciBvZiBjb21taXRzCisgICAgIGluIGxldmVsIE4gKyAxIGlzIG1vcmUgdGhhbiBDIGNvbW1pdHMuCisKK1RoaXMgZGVjaXNpb24gY2FzY2FkZXMgZG93biB0aGUgbGV2ZWxzOiB3aGVuIHdlIG1lcmdlIGEgbGV2ZWwgd2UgY3JlYXRlIGEgbmV3CitzZXQgb2YgY29tbWl0cyB0aGF0IHRoZW4gY29tcGFyZXMgdG8gdGhlIG5leHQgbGV2ZWwuCisKK1RoZSBmaXJzdCBjb25kaXRpb24gYm91bmRzIHRoZSBudW1iZXIgb2YgbGV2ZWxzIHRvIGJlIGxvZ2FyaXRobWljIGluIHRoZSB0b3RhbAorbnVtYmVyIG9mIGNvbW1pdHMuICBUaGUgc2Vjb25kIGNvbmRpdGlvbiBib3VuZHMgdGhlIHRvdGFsIG51bWJlciBvZiBjb21taXRzIGluCithIGBncmFwaC17aGFzaE59YCBmaWxlIGFuZCBub3QgaW4gdGhlIGBjb21taXQtZ3JhcGhgIGZpbGUsIHByZXZlbnRpbmcKK3NpZ25pZmljYW50IHBlcmZvcm1hbmNlIGlzc3VlcyB3aGVuIHRoZSBzdGFjayBtZXJnZXMgYW5kIGFub3RoZXIgcHJvY2VzcyBvbmx5CitwYXJ0aWFsbHkgcmVhZHMgdGhlIHByZXZpb3VzIHN0YWNrLgorCitUaGUgbWVyZ2Ugc3RyYXRlZ3kgdmFsdWVzICgyIGZvciB0aGUgc2l6ZSBtdWx0aXBsZSwgNjQsMDAwIGZvciB0aGUgbWF4aW11bQorbnVtYmVyIG9mIGNvbW1pdHMpIGNvdWxkIGJlIGV4dHJhY3RlZCBpbnRvIGNvbmZpZyBzZXR0aW5ncyBmb3IgZnVsbAorZmxleGliaWxpdHkuCisKKyMjIERlbGV0aW5nIGdyYXBoLXtoYXNofSBmaWxlcworCitBZnRlciBhIG5ldyB0aXAgZmlsZSBpcyB3cml0dGVuLCBzb21lIGBncmFwaC17aGFzaH1gIGZpbGVzIG1heSBubyBsb25nZXIKK2JlIHBhcnQgb2YgYSBjaGFpbi4gSXQgaXMgaW1wb3J0YW50IHRvIHJlbW92ZSB0aGVzZSBmaWxlcyBmcm9tIGRpc2ssIGV2ZW50dWFsbHkuCitUaGUgbWFpbiByZWFzb24gdG8gZGVsYXkgcmVtb3ZhbCBpcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBjb3VsZCByZWFkIHRoZQorYGNvbW1pdC1ncmFwaC1jaGFpbmAgZmlsZSBiZWZvcmUgaXQgaXMgcmV3cml0dGVuLCBidXQgdGhlbiBsb29rIGZvciB0aGUKK2BncmFwaC17aGFzaH1gIGZpbGVzIGFmdGVyIHRoZXkgYXJlIGRlbGV0ZWQuCisKK1RvIGFsbG93IGhvbGRpbmcgb2xkIHNwbGl0IGNvbW1pdC1ncmFwaHMgZm9yIGEgd2hpbGUgYWZ0ZXIgdGhleSBhcmUgdW5yZWZlcmVuY2VkLAord2UgdXBkYXRlIHRoZSBtb2RpZmllZCB0aW1lcyBvZiB0aGUgZmlsZXMgd2hlbiB0aGV5IGJlY29tZSB1bnJlZmVyZW5jZWQuIFRoZW4sCit3ZSBzY2FuIHRoZSBgJE9CSkRJUi9pbmZvL2NvbW1pdC1ncmFwaHMvYCBkaXJlY3RvcnkgZm9yIGBncmFwaC17aGFzaH1gCitmaWxlcyB3aG9zZSBtb2RpZmllZCB0aW1lcyBhcmUgb2xkZXIgdGhhbiBhIGdpdmVuIGV4cGlyeSB3aW5kb3cuIFRoaXMgd2luZG93CitkZWZhdWx0cyB0byB6ZXJvLCBidXQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBvciBhIGNvbmZpZworc2V0dGluZy4KKworIyMgQ2hhaW5zIGFjcm9zcyBtdWx0aXBsZSBvYmplY3QgZGlyZWN0b3JpZXMKKworSW4gYSByZXBvIHdpdGggYWx0ZXJuYXRlcywgd2UgbG9vayBmb3IgdGhlIGBjb21taXQtZ3JhcGgtY2hhaW5gIGZpbGUgc3RhcnRpbmcKK2luIHRoZSBsb2NhbCBvYmplY3QgZGlyZWN0b3J5IGFuZCB0aGVuIGluIGVhY2ggYWx0ZXJuYXRlLiBUaGUgZmlyc3QgZmlsZSB0aGF0CitleGlzdHMgZGVmaW5lcyBvdXIgY2hhaW4uIEFzIHdlIGxvb2sgZm9yIHRoZSBgZ3JhcGgte2hhc2h9YCBmaWxlcyBmb3IKK2VhY2ggYHtoYXNofWAgaW4gdGhlIGNoYWluIGZpbGUsIHdlIGZvbGxvdyB0aGUgc2FtZSBwYXR0ZXJuIGZvciB0aGUgaG9zdAorZGlyZWN0b3JpZXMuCisKK1RoaXMgYWxsb3dzIGNvbW1pdC1ncmFwaHMgdG8gYmUgc3BsaXQgYWNyb3NzIG11bHRpcGxlIGZvcmtzIGluIGEgZm9yayBuZXR3b3JrLgorVGhlIHR5cGljYWwgY2FzZSBpcyBhIGxhcmdlICJiYXNlIiByZXBvIHdpdGggbWFueSBzbWFsbGVyIGZvcmtzLgorCitBcyB0aGUgYmFzZSByZXBvIGFkdmFuY2VzLCBpdCB3aWxsIGxpa2VseSB1cGRhdGUgYW5kIG1lcmdlIGl0cyBjb21taXQtZ3JhcGgKK2NoYWluIG1vcmUgZnJlcXVlbnRseSB0aGFuIHRoZSBmb3Jrcy4gSWYgYSBmb3JrIHVwZGF0ZXMgdGhlaXIgY29tbWl0LWdyYXBoIGFmdGVyCit0aGUgYmFzZSByZXBvLCB0aGVuIGl0IHNob3VsZCAicmVwYXJlbnQiIHRoZSBjb21taXQtZ3JhcGggY2hhaW4gb250byB0aGUgbmV3CitjaGFpbiBpbiB0aGUgYmFzZSByZXBvLiBXaGVuIHJlYWRpbmcgZWFjaCBgZ3JhcGgte2hhc2h9YCBmaWxlLCB3ZSB0cmFjawordGhlIG9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBpdC4gRHVyaW5nIGEgd3JpdGUgb2YgYSBuZXcgY29tbWl0LWdyYXBoIGZpbGUsCit3ZSBjaGVjayBmb3IgYW55IGNoYW5nZXMgaW4gdGhlIHNvdXJjZSBvYmplY3QgZGlyZWN0b3J5IGFuZCByZWFkIHRoZQorYGNvbW1pdC1ncmFwaC1jaGFpbmAgZmlsZSBmb3IgdGhhdCBzb3VyY2UgYW5kIGNyZWF0ZSBhIG5ldyBmaWxlIGJhc2VkIG9uIHRob3NlCitmaWxlcy4gRHVyaW5nIHRoaXMgInJlcGFyZW50IiBvcGVyYXRpb24sIHdlIG5lY2Vzc2FyaWx5IG5lZWQgdG8gY29sbGFwc2UgYWxsCitsZXZlbHMgaW4gdGhlIGZvcmssIGFzIGFsbCBvZiB0aGUgZmlsZXMgYXJlIGludmFsaWQgYWdhaW5zdCB0aGUgbmV3IGJhc2UgZmlsZS4KKworSXQgaXMgY3J1Y2lhbCB0byBiZSBjYXJlZnVsIHdoZW4gY2xlYW5pbmcgdXAgInVucmVmZXJlbmNlZCIgYGdyYXBoLXtoYXNofS5ncmFwaGAKK2ZpbGVzIGluIHRoaXMgc2NlbmFyaW8uIEl0IGZhbGxzIHRvIHRoZSB1c2VyIHRvIGRlZmluZSB0aGUgcHJvcGVyIHNldHRpbmdzIGZvcgordGhlaXIgY3VzdG9tIGVudmlyb25tZW50OgorCisgMS4gV2hlbiBtZXJnaW5nIGxldmVscyBpbiB0aGUgYmFzZSByZXBvLCB0aGUgdW5yZWZlcmVuY2VkIGZpbGVzIG1heSBzdGlsbCBiZQorICAgIHJlZmVyZW5jZWQgYnkgY2hhaW5zIGZyb20gZm9yayByZXBvcy4KKworIDIuIFRoZSBleHBpcnkgdGltZSBzaG91bGQgYmUgc2V0IHRvIGEgbGVuZ3RoIG9mIHRpbWUgc3VjaCB0aGF0IGV2ZXJ5IGZvcmsgaGFzCisgICAgdGltZSB0byByZWNvbXB1dGUgdGhlaXIgY29tbWl0LWdyYXBoIGNoYWluIHRvICJyZXBhcmVudCIgb250byB0aGUgbmV3IGJhc2UKKyAgICBmaWxlKHMpLgorCisgMy4gSWYgdGhlIGNvbW1pdC1ncmFwaCBjaGFpbiBpcyB1cGRhdGVkIGluIHRoZSBiYXNlLCB0aGUgZm9yayB3aWxsIG5vdCBoYXZlCisgICAgYWNjZXNzIHRvIHRoZSBuZXcgY2hhaW4gdW50aWwgaXRzIGNoYWluIGlzIHVwZGF0ZWQgdG8gcmVmZXJlbmNlIHRob3NlIGZpbGVzLgorICAgIChUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBbNV0uKQorCitSZWxhdGVkIExpbmtzCistLS0tLS0tLS0tLS0tCitbMF0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2dpdC9pc3N1ZXMvZGV0YWlsP2lkPTgKKyAgICBDaHJvbWl1bSB3b3JrIGl0ZW0gZm9yOiBTZXJpYWxpemVkIENvbW1pdCBHcmFwaAorCitbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTEwNzEzMDcwNTE3LkdDMTg1NjZAc2lnaWxsLmludHJhLnBlZmYubmV0LworICAgIEFuIGFiYW5kb25lZCBwYXRjaCB0aGF0IGludHJvZHVjZWQgZ2VuZXJhdGlvbiBudW1iZXJzLgorCitbMl0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwOTA4MDMzNDAzLnE3ZTZkajdiZW5hc3JqZXNAc2lnaWxsLmludHJhLnBlZmYubmV0LworICAgIERpc2N1c3Npb24gYWJvdXQgZ2VuZXJhdGlvbiBudW1iZXJzIG9uIGNvbW1pdHMgYW5kIGhvdyB0aGV5IGludGVyYWN0CisgICAgd2l0aCBmc2NrLgorCitbM10gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwOTA4MDM0NzM5LjRvcDN3NGYybWE1czY1a3VAc2lnaWxsLmludHJhLnBlZmYubmV0LworICAgIE1vcmUgZGlzY3Vzc2lvbiBhYm91dCBnZW5lcmF0aW9uIG51bWJlcnMgYW5kIG5vdCBzdG9yaW5nIHRoZW0gaW5zaWRlCisgICAgY29tbWl0IG9iamVjdHMuIEEgdmFsdWFibGUgcXVvdGU6CisKKyAgICAiSSB0aGluayB3ZSBzaG91bGQgYmUgbW92aW5nIG1vcmUgaW4gdGhlIGRpcmVjdGlvbiBvZiBrZWVwaW5nCisgICAgIHJlcG8tbG9jYWwgY2FjaGVzIGZvciBvcHRpbWl6YXRpb25zLiBSZWFjaGFiaWxpdHkgYml0bWFwcyBoYXZlIGJlZW4KKyAgICAgYSBiaWcgcGVyZm9ybWFuY2Ugd2luLiBJIHRoaW5rIHdlIHNob3VsZCBiZSBkb2luZyB0aGUgc2FtZSB3aXRoIG91cgorICAgICBwcm9wZXJ0aWVzIG9mIGNvbW1pdHMuIE5vdCBqdXN0IGdlbmVyYXRpb24gbnVtYmVycywgYnV0IG1ha2luZyBpdAorICAgICBjaGVhcCB0byBhY2Nlc3MgdGhlIGdyYXBoIHN0cnVjdHVyZSB3aXRob3V0IHpsaWItaW5mbGF0aW5nIHdob2xlCisgICAgIGNvbW1pdCBvYmplY3RzIChpLmUuLCBwYWNrdjQgb3Igc29tZXRoaW5nIGxpa2UgdGhlICJtZXRhcGFja3MiIEkKKyAgICAgcHJvcG9zZWQgYSBmZXcgeWVhcnMgYWdvKS4iCisKK1s0XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxODAxMDgxNTQ4MjIuNTQ4MjktMS1naXRAamVmZmhvc3RldGxlci5jb20vVC8jdQorICAgIEEgcGF0Y2ggdG8gcmVtb3ZlIHRoZSBhaGVhZC1iZWhpbmQgY2FsY3VsYXRpb24gZnJvbSAnc3RhdHVzJy4KKworWzVdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9mMjdkYjI4MS1hYmFkLTUwNDMtNmQ3MS1jYmIwODNiMWM4NzdAZ21haWwuY29tLworICAgIEEgZGlzY3Vzc2lvbiBvZiBhICJ0d28tZGltZW5zaW9uYWwgZ3JhcGggcG9zaXRpb24iIHRoYXQgY2FuIGFsbG93IHJlYWRpbmcKKyAgICBtdWx0aXBsZSBjb21taXQtZ3JhcGggY2hhaW5zIGF0IHRoZSBzYW1lIHRpbWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9kaXJlY3RvcnktcmVuYW1lLWRldGVjdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9kaXJlY3RvcnktcmVuYW1lLWRldGVjdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0NjI5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2RpcmVjdG9yeS1yZW5hbWUtZGV0ZWN0aW9uLnR4dApAQCAtMCwwICsxLDExNSBAQAorRGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbmFtZSBkZXRlY3Rpb24gbG9naWMgaW4gZGlmZmNvcmUtcmVuYW1lIHRoYXQgY2hlY2tzIGZvciByZW5hbWVzIG9mCitpbmRpdmlkdWFsIGZpbGVzIGlzIGFnZ3JlZ2F0ZWQgYW5kIGFuYWx5emVkIGluIG1lcmdlLXJlY3Vyc2l2ZSBmb3IgY2FzZXMKK3doZXJlIGNvbWJpbmF0aW9ucyBvZiByZW5hbWVzIGluZGljYXRlIHRoYXQgYSBmdWxsIGRpcmVjdG9yeSBoYXMgYmVlbgorcmVuYW1lZC4KKworU2NvcGUgb2YgYWJpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgcGVyaGFwcyBlYXNpZXN0IHRvIHN0YXJ0IHdpdGggYW4gZXhhbXBsZToKKworICAqIFdoZW4gYWxsIG9mIHgvYSwgeC9iIGFuZCB4L2MgaGF2ZSBtb3ZlZCB0byB6L2EsIHovYiBhbmQgei9jLCBpdCBpcworICAgIGxpa2VseSB0aGF0IHgvZCBhZGRlZCBpbiB0aGUgbWVhbnRpbWUgd291bGQgYWxzbyB3YW50IHRvIG1vdmUgdG8gei9kIGJ5CisgICAgdGFraW5nIHRoZSBoaW50IHRoYXQgdGhlIGVudGlyZSBkaXJlY3RvcnkgJ3gnIG1vdmVkIHRvICd6Jy4KKworTW9yZSBpbnRlcmVzdGluZyBwb3NzaWJpbGl0aWVzIGV4aXN0LCB0aG91Z2gsIHN1Y2ggYXM6CisKKyAgKiBvbmUgc2lkZSBvZiBoaXN0b3J5IHJlbmFtZXMgeCAtPiB6LCBhbmQgdGhlIG90aGVyIHJlbmFtZXMgc29tZSBmaWxlIHRvCisgICAgeC9lLCBjYXVzaW5nIHRoZSBuZWVkIGZvciB0aGUgbWVyZ2UgdG8gZG8gYSB0cmFuc2l0aXZlIHJlbmFtZS4KKworICAqIG9uZSBzaWRlIG9mIGhpc3RvcnkgcmVuYW1lcyB4IC0+IHosIGJ1dCBhbHNvIHJlbmFtZXMgYWxsIGZpbGVzIHdpdGhpbiB4LgorICAgIEZvciBleGFtcGxlLCB4L2EgLT4gei9hbHBoYSwgeC9iIC0+IHovYnJhdm8sIGV0Yy4KKworICAqIGJvdGggJ3gnIGFuZCAneScgYmVpbmcgbWVyZ2VkIGludG8gYSBzaW5nbGUgZGlyZWN0b3J5ICd6Jywgd2l0aCBhCisgICAgZGlyZWN0b3J5IHJlbmFtZSBiZWluZyBkZXRlY3RlZCBmb3IgYm90aCB4LT56IGFuZCB5LT56LgorCisgICogbm90IGFsbCBmaWxlcyBpbiBhIGRpcmVjdG9yeSBiZWluZyByZW5hbWVkIHRvIHRoZSBzYW1lIGxvY2F0aW9uOworICAgIGkuZS4gcGVyaGFwcyBtb3N0IHRoZSBmaWxlcyBpbiAneCcgYXJlIG5vdyBmb3VuZCB1bmRlciAneicsIGJ1dCBhIGZldworICAgIGFyZSBmb3VuZCB1bmRlciAndycuCisKKyAgKiBhIGRpcmVjdG9yeSBiZWluZyByZW5hbWVkLCB3aGljaCBhbHNvIGNvbnRhaW5lZCBhIHN1YmRpcmVjdG9yeSB0aGF0IHdhcworICAgIHJlbmFtZWQgdG8gc29tZSBlbnRpcmVseSBkaWZmZXJlbnQgbG9jYXRpb24uICAoQW5kIHBlcmhhcHMgdGhlIGlubmVyCisgICAgZGlyZWN0b3J5IGl0c2VsZiBjb250YWluZWQgaW5uZXIgZGlyZWN0b3JpZXMgdGhhdCB3ZXJlIHJlbmFtZWQgdG8geWV0CisgICAgb3RoZXIgbG9jYXRpb25zKS4KKworICAqIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmU7IHNlZSB0L3Q2MDQzLW1lcmdlLXJlbmFtZS1kaXJlY3Rvcmllcy5zaCBmb3IKKyAgICB2YXJpb3VzIGludGVyZXN0aW5nIGNhc2VzLgorCitMaW1pdGF0aW9ucyAtLSBhcHBsaWNhYmlsaXR5IG9mIGRpcmVjdG9yeSByZW5hbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIHByZXZlbnQgZWRnZSBhbmQgY29ybmVyIGNhc2VzIHJlc3VsdGluZyBpbiBlaXRoZXIgY29uZmxpY3RzCit0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgaW5kZXggb3Igd2hpY2ggbWlnaHQgYmUgdG9vIGNvbXBsZXggZm9yCit1c2VycyB0byB0cnkgdG8gdW5kZXJzdGFuZCBhbmQgcmVzb2x2ZSwgYSBjb3VwbGUgYmFzaWMgcnVsZXMgbGltaXQgd2hlbgorZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gYXBwbGllczoKKworICAxKSBJZiBhIGdpdmVuIGRpcmVjdG9yeSBzdGlsbCBleGlzdHMgb24gYm90aCBzaWRlcyBvZiBhIG1lcmdlLCB3ZSBkbworICAgICBub3QgY29uc2lkZXIgaXQgdG8gaGF2ZSBiZWVuIHJlbmFtZWQuCisKKyAgMikgSWYgYSBzdWJzZXQgb2YgdG8tYmUtcmVuYW1lZCBmaWxlcyBoYXZlIGEgZmlsZSBvciBkaXJlY3RvcnkgaW4gdGhlCisgICAgIHdheSAob3Igd291bGQgYmUgaW4gdGhlIHdheSBvZiBlYWNoIG90aGVyKSwgInR1cm4gb2ZmIiB0aGUgZGlyZWN0b3J5CisgICAgIHJlbmFtZSBmb3IgdGhvc2Ugc3BlY2lmaWMgc3ViLXBhdGhzIGFuZCByZXBvcnQgdGhlIGNvbmZsaWN0IHRvIHRoZQorICAgICB1c2VyLgorCisgIDMpIElmIHRoZSBvdGhlciBzaWRlIG9mIGhpc3RvcnkgZGlkIGEgZGlyZWN0b3J5IHJlbmFtZSB0byBhIHBhdGggdGhhdAorICAgICB5b3VyIHNpZGUgb2YgaGlzdG9yeSByZW5hbWVkIGF3YXksIHRoZW4gaWdub3JlIHRoYXQgcGFydGljdWxhcgorICAgICByZW5hbWUgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZiBoaXN0b3J5IGZvciBhbnkgaW1wbGljaXQgZGlyZWN0b3J5CisgICAgIHJlbmFtZXMgKGJ1dCB3YXJuIHRoZSB1c2VyKS4KKworTGltaXRhdGlvbnMgLS0gZGV0YWlsZWQgcnVsZXMgYW5kIHRlc3RjYXNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0L3Q2MDQzLW1lcmdlLXJlbmFtZS1kaXJlY3Rvcmllcy5zaCBjb250YWlucyBleHRlbnNpdmUgdGVzdHMgYW5kIGNvbW1lbnRhcnkKK3doaWNoIGdlbmVyYXRlIGFuZCBleHBsb3JlIHRoZSBydWxlcyBsaXN0ZWQgYWJvdmUuICBJdCBhbHNvIGxpc3RzIGEgZmV3CithZGRpdGlvbmFsIHJ1bGVzOgorCisgIGEpIElmIHJlbmFtZXMgc3BsaXQgYSBkaXJlY3RvcnkgaW50byB0d28gb3IgbW9yZSBvdGhlcnMsIHRoZSBkaXJlY3RvcnkKKyAgICAgd2l0aCB0aGUgbW9zdCByZW5hbWVzLCAid2lucyIuCisKKyAgYikgQXZvaWQgZGlyZWN0b3J5LXJlbmFtZS1kZXRlY3Rpb24gZm9yIGEgcGF0aCwgaWYgdGhhdCBwYXRoIGlzIHRoZQorICAgICBzb3VyY2Ugb2YgYSByZW5hbWUgb24gZWl0aGVyIHNpZGUgb2YgYSBtZXJnZS4KKworICBjKSBPbmx5IGFwcGx5IGltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRvIGRpcmVjdG9yaWVzIGlmIHRoZSBvdGhlciBzaWRlCisgICAgIG9mIGhpc3RvcnkgaXMgdGhlIG9uZSBkb2luZyB0aGUgcmVuYW1pbmcuCisKK0xpbWl0YXRpb25zIC0tIHN1cHBvcnQgaW4gZGlmZmVyZW50IGNvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBpcyBzdXBwb3J0ZWQgYnkgJ21lcmdlJyBhbmQgJ2NoZXJyeS1waWNrJy4KK090aGVyIGdpdCBjb21tYW5kcyB3aGljaCB1c2VycyBtaWdodCBiZSBzdXJwcmlzZWQgdG8gc2VlIGxpbWl0ZWQgb3Igbm8KK2RpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIHN1cHBvcnQgaW46CisKKyAgKiBkaWZmCisKKyAgICBGb2xrcyBoYXZlIHJlcXVlc3RlZCBpbiB0aGUgcGFzdCB0aGF0IGBnaXQgZGlmZmAgZGV0ZWN0IGRpcmVjdG9yeQorICAgIHJlbmFtZXMgYW5kIHNvbWVob3cgc2ltcGxpZnkgaXRzIG91dHB1dC4gIEl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIHRoaXMKKyAgICB3b3VsZCBiZSBkZXNpcmFibGUgb3IgaG93IHRoZSBvdXRwdXQgc2hvdWxkIGJlIHNpbXBsaWZpZWQsIHNvIHRoaXMgd2FzCisgICAgc2ltcGx5IG5vdCBpbXBsZW1lbnRlZC4gIEZ1cnRoZXIsIHRvIGltcGxlbWVudCB0aGlzLCBkaXJlY3RvcnkgcmVuYW1lCisgICAgZGV0ZWN0aW9uIGxvZ2ljIHdvdWxkIG5lZWQgdG8gbW92ZSBmcm9tIG1lcmdlLXJlY3Vyc2l2ZSB0bworICAgIGRpZmZjb3JlLXJlbmFtZS4KKworICAqIGFtCisKKyAgICBnaXQtYW0gdHJpZXMgdG8gYXZvaWQgYSBmdWxsIHRocmVlIHdheSBtZXJnZSwgaW5zdGVhZCBjYWxsaW5nCisgICAgZ2l0LWFwcGx5LiAgVGhhdCBwcmV2ZW50cyB1cyBmcm9tIGRldGVjdGluZyByZW5hbWVzIGF0IGFsbCwgd2hpY2ggbWF5CisgICAgZGVmZWF0IHRoZSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbi4gIFRoZXJlIGlzIGEgZmFsbGJhY2ssIHRob3VnaDsgaWYKKyAgICB0aGUgaW5pdGlhbCBnaXQtYXBwbHkgZmFpbHMgYW5kIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIC0zIG9wdGlvbiwKKyAgICBnaXQtYW0gd2lsbCBmYWxsIGJhY2sgdG8gYSB0aHJlZSB3YXkgbWVyZ2UuICBIb3dldmVyLCBnaXQtYW0gbGFja3MgdGhlCisgICAgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRvIGEgInJlYWwiIHRocmVlIHdheSBtZXJnZS4gIEluc3RlYWQsIGl0IGhhcworICAgIHRvIHVzZSBidWlsZF9mYWtlX2FuY2VzdG9yKCkgdG8gZ2V0IGEgbWVyZ2UgYmFzZSB0aGF0IGlzIG1pc3NpbmcgZmlsZXMKKyAgICB3aG9zZSByZW5hbWUgbWF5IGhhdmUgYmVlbiBpbXBvcnRhbnQgdG8gZGV0ZWN0IGZvciBkaXJlY3RvcnkgcmVuYW1lCisgICAgZGV0ZWN0aW9uIHRvIGZ1bmN0aW9uLgorCisgICogcmViYXNlCisKKyAgICBTaW5jZSBhbS1iYXNlZCByZWJhc2VzIHdvcmsgYnkgZmlyc3QgZ2VuZXJhdGluZyBhIGJ1bmNoIG9mIHBhdGNoZXMKKyAgICAod2hpY2ggbm8gbG9uZ2VyIHJlY29yZCB3aGF0IHRoZSBvcmlnaW5hbCBjb21taXRzIHdlcmUgYW5kIHRodXMgZG9uJ3QKKyAgICBoYXZlIHRoZSBuZWNlc3NhcnkgaW5mbyBmcm9tIHdoaWNoIHdlIGNhbiBmaW5kIGEgcmVhbCBtZXJnZS1iYXNlKSwgYW5kCisgICAgdGhlbiBjYWxsaW5nIGdpdC1hbSwgdGhpcyBpbXBsaWVzIHRoYXQgYW0tYmFzZWQgcmViYXNlcyB3aWxsIG5vdCBhbHdheXMKKyAgICBzdWNjZXNzZnVsbHkgZGV0ZWN0IGRpcmVjdG9yeSByZW5hbWVzIGVpdGhlciAoc2VlIHRoZSAnYW0nIHNlY3Rpb24KKyAgICBhYm92ZSkuICBtZXJnZWQtYmFzZWQgcmViYXNlcyAocmViYXNlIC1tKSBhbmQgY2hlcnJ5LXBpY2stYmFzZWQgcmViYXNlcworICAgIChyZWJhc2UgLWkpIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhpcyBzaG9ydGNvbWluZywgYW5kIGZ1bGx5IHN1cHBvcnQKKyAgICBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9oYXNoLWZ1bmN0aW9uLXRyYW5zaXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMmRiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9oYXNoLWZ1bmN0aW9uLXRyYW5zaXRpb24udHh0CkBAIC0wLDAgKzEsODI3IEBACitHaXQgaGFzaCBmdW5jdGlvbiB0cmFuc2l0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09iamVjdGl2ZQorLS0tLS0tLS0tCitNaWdyYXRlIEdpdCBmcm9tIFNIQS0xIHRvIGEgc3Ryb25nZXIgaGFzaCBmdW5jdGlvbi4KKworQmFja2dyb3VuZAorLS0tLS0tLS0tLQorQXQgaXRzIGNvcmUsIHRoZSBHaXQgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBpcyBhIGNvbnRlbnQgYWRkcmVzc2FibGUKK2ZpbGVzeXN0ZW0uIEl0IHVzZXMgdGhlIFNIQS0xIGhhc2ggZnVuY3Rpb24gdG8gbmFtZSBjb250ZW50LiBGb3IKK2V4YW1wbGUsIGZpbGVzLCBkaXJlY3RvcmllcywgYW5kIHJldmlzaW9ucyBhcmUgcmVmZXJyZWQgdG8gYnkgaGFzaAordmFsdWVzIHVubGlrZSBpbiBvdGhlciB0cmFkaXRpb25hbCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtcyB3aGVyZSBmaWxlcworb3IgdmVyc2lvbnMgYXJlIHJlZmVycmVkIHRvIHZpYSBzZXF1ZW50aWFsIG51bWJlcnMuIFRoZSB1c2Ugb2YgYSBoYXNoCitmdW5jdGlvbiB0byBhZGRyZXNzIGl0cyBjb250ZW50IGRlbGl2ZXJzIGEgZmV3IGFkdmFudGFnZXM6CisKKyogSW50ZWdyaXR5IGNoZWNraW5nIGlzIGVhc3kuIEJpdCBmbGlwcywgZm9yIGV4YW1wbGUsIGFyZSBlYXNpbHkKKyAgZGV0ZWN0ZWQsIGFzIHRoZSBoYXNoIG9mIGNvcnJ1cHRlZCBjb250ZW50IGRvZXMgbm90IG1hdGNoIGl0cyBuYW1lLgorKiBMb29rdXAgb2Ygb2JqZWN0cyBpcyBmYXN0LgorCitVc2luZyBhIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSBoYXNoIGZ1bmN0aW9uIGJyaW5ncyBhZGRpdGlvbmFsCithZHZhbnRhZ2VzOgorCisqIE9iamVjdCBuYW1lcyBjYW4gYmUgc2lnbmVkIGFuZCB0aGlyZCBwYXJ0aWVzIGNhbiB0cnVzdCB0aGUgaGFzaCB0bworICBhZGRyZXNzIHRoZSBzaWduZWQgb2JqZWN0IGFuZCBhbGwgb2JqZWN0cyBpdCByZWZlcmVuY2VzLgorKiBDb21tdW5pY2F0aW9uIHVzaW5nIEdpdCBwcm90b2NvbCBhbmQgb3V0IG9mIGJhbmQgY29tbXVuaWNhdGlvbgorICBtZXRob2RzIGhhdmUgYSBzaG9ydCByZWxpYWJsZSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCB0byByZWxpYWJseQorICBhZGRyZXNzIHN0b3JlZCBjb250ZW50LgorCitPdmVyIHRpbWUgc29tZSBmbGF3cyBpbiBTSEEtMSBoYXZlIGJlZW4gZGlzY292ZXJlZCBieSBzZWN1cml0eQorcmVzZWFyY2hlcnMuIE9uIDIzIEZlYnJ1YXJ5IDIwMTcgdGhlIFNIQXR0ZXJlZCBhdHRhY2sKKyhodHRwczovL3NoYXR0ZXJlZC5pbykgZGVtb25zdHJhdGVkIGEgcHJhY3RpY2FsIFNIQS0xIGhhc2ggY29sbGlzaW9uLgorCitHaXQgdjIuMTMuMCBhbmQgbGF0ZXIgc3Vic2VxdWVudGx5IG1vdmVkIHRvIGEgaGFyZGVuZWQgU0hBLTEKK2ltcGxlbWVudGF0aW9uIGJ5IGRlZmF1bHQsIHdoaWNoIGlzbid0IHZ1bG5lcmFibGUgdG8gdGhlIFNIQXR0ZXJlZAorYXR0YWNrLgorCitUaHVzIEdpdCBoYXMgaW4gZWZmZWN0IGFscmVhZHkgbWlncmF0ZWQgdG8gYSBuZXcgaGFzaCB0aGF0IGlzbid0IFNIQS0xCithbmQgZG9lc24ndCBzaGFyZSBpdHMgdnVsbmVyYWJpbGl0aWVzLCBpdHMgbmV3IGhhc2ggZnVuY3Rpb24ganVzdAoraGFwcGVucyB0byBwcm9kdWNlIGV4YWN0bHkgdGhlIHNhbWUgb3V0cHV0IGZvciBhbGwga25vd24gaW5wdXRzLAorZXhjZXB0IHR3byBQREZzIHB1Ymxpc2hlZCBieSB0aGUgU0hBdHRlcmVkIHJlc2VhcmNoZXJzLCBhbmQgdGhlIG5ldworaW1wbGVtZW50YXRpb24gKHdyaXR0ZW4gYnkgdGhvc2UgcmVzZWFyY2hlcnMpIGNsYWltcyB0byBkZXRlY3QgZnV0dXJlCitjcnlwdGFuYWx5dGljIGNvbGxpc2lvbiBhdHRhY2tzLgorCitSZWdhcmRsZXNzLCBpdCdzIGNvbnNpZGVyZWQgcHJ1ZGVudCB0byBtb3ZlIHBhc3QgYW55IHZhcmlhbnQgb2YgU0hBLTEKK3RvIGEgbmV3IGhhc2guIFRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgZnV0dXJlIGF0dGFja3Mgb24gU0hBLTEgd29uJ3QKK2JlIHB1Ymxpc2hlZCBpbiB0aGUgZnV0dXJlLCBhbmQgdGhvc2UgYXR0YWNrcyBtYXkgbm90IGhhdmUgdmlhYmxlCittaXRpZ2F0aW9ucy4KKworSWYgU0hBLTEgYW5kIGl0cyB2YXJpYW50cyB3ZXJlIHRvIGJlIHRydWx5IGJyb2tlbiwgR2l0J3MgaGFzaCBmdW5jdGlvbgorY291bGQgbm90IGJlIGNvbnNpZGVyZWQgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIGFueSBtb3JlLiBUaGlzIHdvdWxkCitpbXBhY3QgdGhlIGNvbW11bmljYXRpb24gb2YgaGFzaCB2YWx1ZXMgYmVjYXVzZSB3ZSBjb3VsZCBub3QgdHJ1c3QKK3RoYXQgYSBnaXZlbiBoYXNoIHZhbHVlIHJlcHJlc2VudGVkIHRoZSBrbm93biBnb29kIHZlcnNpb24gb2YgY29udGVudAordGhhdCB0aGUgc3BlYWtlciBpbnRlbmRlZC4KKworU0hBLTEgc3RpbGwgcG9zc2Vzc2VzIHRoZSBvdGhlciBwcm9wZXJ0aWVzIHN1Y2ggYXMgZmFzdCBvYmplY3QgbG9va3VwCithbmQgc2FmZSBlcnJvciBjaGVja2luZywgYnV0IG90aGVyIGhhc2ggZnVuY3Rpb25zIGFyZSBlcXVhbGx5IHN1aXRhYmxlCit0aGF0IGFyZSBiZWxpZXZlZCB0byBiZSBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUuCisKK0dvYWxzCistLS0tLQorMS4gVGhlIHRyYW5zaXRpb24gdG8gU0hBLTI1NiBjYW4gYmUgZG9uZSBvbmUgbG9jYWwgcmVwb3NpdG9yeSBhdCBhIHRpbWUuCisgICBhLiBSZXF1aXJpbmcgbm8gYWN0aW9uIGJ5IGFueSBvdGhlciBwYXJ0eS4KKyAgIGIuIEEgU0hBLTI1NiByZXBvc2l0b3J5IGNhbiBjb21tdW5pY2F0ZSB3aXRoIFNIQS0xIEdpdCBzZXJ2ZXJzCisgICAgICAocHVzaC9mZXRjaCkuCisgICBjLiBVc2VycyBjYW4gdXNlIFNIQS0xIGFuZCBTSEEtMjU2IGlkZW50aWZpZXJzIGZvciBvYmplY3RzCisgICAgICBpbnRlcmNoYW5nZWFibHkgKHNlZSAiT2JqZWN0IG5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUiLCBiZWxvdykuCisgICBkLiBOZXcgc2lnbmVkIG9iamVjdHMgbWFrZSB1c2Ugb2YgYSBzdHJvbmdlciBoYXNoIGZ1bmN0aW9uIHRoYW4KKyAgICAgIFNIQS0xIGZvciB0aGVpciBzZWN1cml0eSBndWFyYW50ZWVzLgorMi4gQWxsb3cgYSBjb21wbGV0ZSB0cmFuc2l0aW9uIGF3YXkgZnJvbSBTSEEtMS4KKyAgIGEuIExvY2FsIG1ldGFkYXRhIGZvciBTSEEtMSBjb21wYXRpYmlsaXR5IGNhbiBiZSByZW1vdmVkIGZyb20gYQorICAgICAgcmVwb3NpdG9yeSBpZiBjb21wYXRpYmlsaXR5IHdpdGggU0hBLTEgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKzMuIE1haW50YWluYWJpbGl0eSB0aHJvdWdob3V0IHRoZSBwcm9jZXNzLgorICAgYS4gVGhlIG9iamVjdCBmb3JtYXQgaXMga2VwdCBzaW1wbGUgYW5kIGNvbnNpc3RlbnQuCisgICBiLiBDcmVhdGlvbiBvZiBhIGdlbmVyYWxpemVkIHJlcG9zaXRvcnkgY29udmVyc2lvbiB0b29sLgorCitOb24tR29hbHMKKy0tLS0tLS0tLQorMS4gQWRkIFNIQS0yNTYgc3VwcG9ydCB0byBHaXQgcHJvdG9jb2wuIFRoaXMgaXMgdmFsdWFibGUgYW5kIHRoZQorICAgbG9naWNhbCBuZXh0IHN0ZXAgYnV0IGl0IGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcyBpbml0aWFsIGRlc2lnbi4KKzIuIFRyYW5zcGFyZW50bHkgaW1wcm92aW5nIHRoZSBzZWN1cml0eSBvZiBleGlzdGluZyBTSEEtMSBzaWduZWQKKyAgIG9iamVjdHMuCiszLiBJbnRlcm1peGluZyBvYmplY3RzIHVzaW5nIG11bHRpcGxlIGhhc2ggZnVuY3Rpb25zIGluIGEgc2luZ2xlCisgICByZXBvc2l0b3J5LgorNC4gVGFraW5nIHRoZSBvcHBvcnR1bml0eSB0byBmaXggb3RoZXIgYnVncyBpbiBHaXQncyBmb3JtYXRzIGFuZAorICAgcHJvdG9jb2xzLgorNS4gU2hhbGxvdyBjbG9uZXMgYW5kIGZldGNoZXMgaW50byBhIFNIQS0yNTYgcmVwb3NpdG9yeS4gKFRoaXMgd2lsbAorICAgY2hhbmdlIHdoZW4gd2UgYWRkIFNIQS0yNTYgc3VwcG9ydCB0byBHaXQgcHJvdG9jb2wuKQorNi4gU2tpcCBmZXRjaGluZyBzb21lIHN1Ym1vZHVsZXMgb2YgYSBwcm9qZWN0IGludG8gYSBTSEEtMjU2CisgICByZXBvc2l0b3J5LiAoVGhpcyBhbHNvIGRlcGVuZHMgb24gU0hBLTI1NiBzdXBwb3J0IGluIEdpdAorICAgcHJvdG9jb2wuKQorCitPdmVydmlldworLS0tLS0tLS0KK1dlIGludHJvZHVjZSBhIG5ldyByZXBvc2l0b3J5IGZvcm1hdCBleHRlbnNpb24uIFJlcG9zaXRvcmllcyB3aXRoIHRoaXMKK2V4dGVuc2lvbiBlbmFibGVkIHVzZSBTSEEtMjU2IGluc3RlYWQgb2YgU0hBLTEgdG8gbmFtZSB0aGVpciBvYmplY3RzLgorVGhpcyBhZmZlY3RzIGJvdGggb2JqZWN0IG5hbWVzIGFuZCBvYmplY3QgY29udGVudCAtLS0gYm90aCB0aGUgbmFtZXMKK29mIG9iamVjdHMgYW5kIGFsbCByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgd2l0aGluIGFuIG9iamVjdCBhcmUKK3N3aXRjaGVkIHRvIHRoZSBuZXcgaGFzaCBmdW5jdGlvbi4KKworU0hBLTI1NiByZXBvc2l0b3JpZXMgY2Fubm90IGJlIHJlYWQgYnkgb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgorCitBbG9uZ3NpZGUgdGhlIHBhY2tmaWxlLCBhIFNIQS0yNTYgcmVwb3NpdG9yeSBzdG9yZXMgYSBiaWRpcmVjdGlvbmFsCittYXBwaW5nIGJldHdlZW4gU0hBLTI1NiBhbmQgU0hBLTEgb2JqZWN0IG5hbWVzLiBUaGUgbWFwcGluZyBpcyBnZW5lcmF0ZWQKK2xvY2FsbHkgYW5kIGNhbiBiZSB2ZXJpZmllZCB1c2luZyAiZ2l0IGZzY2siLiBPYmplY3QgbG9va3VwcyB1c2UgdGhpcworbWFwcGluZyB0byBhbGxvdyBuYW1pbmcgb2JqZWN0cyB1c2luZyBlaXRoZXIgdGhlaXIgU0hBLTEgYW5kIFNIQS0yNTYgbmFtZXMKK2ludGVyY2hhbmdlYWJseS4KKworImdpdCBjYXQtZmlsZSIgYW5kICJnaXQgaGFzaC1vYmplY3QiIGdhaW4gb3B0aW9ucyB0byBkaXNwbGF5IGFuIG9iamVjdAoraW4gaXRzIHNoYTEgZm9ybSBhbmQgd3JpdGUgYW4gb2JqZWN0IGdpdmVuIGl0cyBzaGExIGZvcm0uIFRoaXMKK3JlcXVpcmVzIGFsbCBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhhdCBvYmplY3QgdG8gYmUgcHJlc2VudCBpbiB0aGUKK29iamVjdCBkYXRhYmFzZSBzbyB0aGF0IHRoZXkgY2FuIGJlIG5hbWVkIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBuYW1lCisodXNpbmcgdGhlIGJpZGlyZWN0aW9uYWwgaGFzaCBtYXBwaW5nKS4KKworRmV0Y2hlcyBmcm9tIGEgU0hBLTEgYmFzZWQgc2VydmVyIGNvbnZlcnQgdGhlIGZldGNoZWQgb2JqZWN0cyBpbnRvCitTSEEtMjU2IGZvcm0gYW5kIHJlY29yZCB0aGUgbWFwcGluZyBpbiB0aGUgYmlkaXJlY3Rpb25hbCBtYXBwaW5nIHRhYmxlCisoc2VlIGJlbG93IGZvciBkZXRhaWxzKS4gUHVzaGVzIHRvIGEgU0hBLTEgYmFzZWQgc2VydmVyIGNvbnZlcnQgdGhlCitvYmplY3RzIGJlaW5nIHB1c2hlZCBpbnRvIHNoYTEgZm9ybSBzbyB0aGUgc2VydmVyIGRvZXMgbm90IGhhdmUgdG8gYmUKK2F3YXJlIG9mIHRoZSBoYXNoIGZ1bmN0aW9uIHRoZSBjbGllbnQgaXMgdXNpbmcuCisKK0RldGFpbGVkIERlc2lnbgorLS0tLS0tLS0tLS0tLS0tCitSZXBvc2l0b3J5IGZvcm1hdCBleHRlbnNpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQSBTSEEtMjU2IHJlcG9zaXRvcnkgdXNlcyByZXBvc2l0b3J5IGZvcm1hdCB2ZXJzaW9uIGAxYCAoc2VlCitEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXBvc2l0b3J5LXZlcnNpb24udHh0KSB3aXRoIGV4dGVuc2lvbnMKK2BvYmplY3RGb3JtYXRgIGFuZCBgY29tcGF0T2JqZWN0Rm9ybWF0YDoKKworCVtjb3JlXQorCQlyZXBvc2l0b3J5Rm9ybWF0VmVyc2lvbiA9IDEKKwlbZXh0ZW5zaW9uc10KKwkJb2JqZWN0Rm9ybWF0ID0gc2hhMjU2CisJCWNvbXBhdE9iamVjdEZvcm1hdCA9IHNoYTEKKworVGhlIGNvbWJpbmF0aW9uIG9mIHNldHRpbmcgYGNvcmUucmVwb3NpdG9yeUZvcm1hdFZlcnNpb249MWAgYW5kCitwb3B1bGF0aW5nIGBleHRlbnNpb25zLipgIGVuc3VyZXMgdGhhdCBhbGwgdmVyc2lvbnMgb2YgR2l0IGxhdGVyIHRoYW4KK2B2MC45OS45bGAgd2lsbCBkaWUgaW5zdGVhZCBvZiB0cnlpbmcgdG8gb3BlcmF0ZSBvbiB0aGUgU0hBLTI1NgorcmVwb3NpdG9yeSwgaW5zdGVhZCBwcm9kdWNpbmcgYW4gZXJyb3IgbWVzc2FnZS4KKworCSMgQmV0d2VlbiB2MC45OS45bCBhbmQgdjIuNy4wCisJJCBnaXQgc3RhdHVzCisJZmF0YWw6IEV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gMCwgZm91bmQgMQorCSMgQWZ0ZXIgdjIuNy4wCisJJCBnaXQgc3RhdHVzCisJZmF0YWw6IHVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOgorCQlvYmplY3Rmb3JtYXQKKwkJY29tcGF0b2JqZWN0Zm9ybWF0CisKK1NlZSB0aGUgIlRyYW5zaXRpb24gcGxhbiIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZXNlCityZXBvc2l0b3J5IGV4dGVuc2lvbnMuCisKK09iamVjdCBuYW1lcworfn5+fn5+fn5+fn5+CitPYmplY3RzIGNhbiBiZSBuYW1lZCBieSB0aGVpciA0MCBoZXhhZGVjaW1hbCBkaWdpdCBzaGExLW5hbWUgb3IgNjQKK2hleGFkZWNpbWFsIGRpZ2l0IHNoYTI1Ni1uYW1lLCBwbHVzIG5hbWVzIGRlcml2ZWQgZnJvbSB0aG9zZSAoc2VlCitnaXRyZXZpc2lvbnMoNykpLgorCitUaGUgc2hhMS1uYW1lIG9mIGFuIG9iamVjdCBpcyB0aGUgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgaXRzCit0eXBlLCBsZW5ndGgsIGEgbnVsIGJ5dGUsIGFuZCB0aGUgb2JqZWN0J3Mgc2hhMS1jb250ZW50LiBUaGlzIGlzIHRoZQordHJhZGl0aW9uYWwgPHNoYTE+IHVzZWQgaW4gR2l0IHRvIG5hbWUgb2JqZWN0cy4KKworVGhlIHNoYTI1Ni1uYW1lIG9mIGFuIG9iamVjdCBpcyB0aGUgU0hBLTI1NiBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBpdHMKK3R5cGUsIGxlbmd0aCwgYSBudWwgYnl0ZSwgYW5kIHRoZSBvYmplY3QncyBzaGEyNTYtY29udGVudC4KKworT2JqZWN0IGZvcm1hdAorfn5+fn5+fn5+fn5+fgorVGhlIGNvbnRlbnQgYXMgYSBieXRlIHNlcXVlbmNlIG9mIGEgdGFnLCBjb21taXQsIG9yIHRyZWUgb2JqZWN0IG5hbWVkCitieSBzaGExIGFuZCBzaGEyNTYgZGlmZmVyIGJlY2F1c2UgYW4gb2JqZWN0IG5hbWVkIGJ5IHNoYTI1Ni1uYW1lIHJlZmVycyB0bworb3RoZXIgb2JqZWN0cyBieSB0aGVpciBzaGEyNTYtbmFtZXMgYW5kIGFuIG9iamVjdCBuYW1lZCBieSBzaGExLW5hbWUKK3JlZmVycyB0byBvdGhlciBvYmplY3RzIGJ5IHRoZWlyIHNoYTEtbmFtZXMuCisKK1RoZSBzaGEyNTYtY29udGVudCBvZiBhbiBvYmplY3QgaXMgdGhlIHNhbWUgYXMgaXRzIHNoYTEtY29udGVudCwgZXhjZXB0Cit0aGF0IG9iamVjdHMgcmVmZXJlbmNlZCBieSB0aGUgb2JqZWN0IGFyZSBuYW1lZCB1c2luZyB0aGVpciBzaGEyNTYtbmFtZXMKK2luc3RlYWQgb2Ygc2hhMS1uYW1lcy4gQmVjYXVzZSBhIGJsb2Igb2JqZWN0IGRvZXMgbm90IHJlZmVyIHRvIGFueQorb3RoZXIgb2JqZWN0LCBpdHMgc2hhMS1jb250ZW50IGFuZCBzaGEyNTYtY29udGVudCBhcmUgdGhlIHNhbWUuCisKK1RoZSBmb3JtYXQgYWxsb3dzIHJvdW5kLXRyaXAgY29udmVyc2lvbiBiZXR3ZWVuIHNoYTI1Ni1jb250ZW50IGFuZAorc2hhMS1jb250ZW50LgorCitPYmplY3Qgc3RvcmFnZQorfn5+fn5+fn5+fn5+fn4KK0xvb3NlIG9iamVjdHMgdXNlIHpsaWIgY29tcHJlc3Npb24gYW5kIHBhY2tlZCBvYmplY3RzIHVzZSB0aGUgcGFja2VkCitmb3JtYXQgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stZm9ybWF0LnR4dCwganVzdCBsaWtlCit0b2RheS4gVGhlIGNvbnRlbnQgdGhhdCBpcyBjb21wcmVzc2VkIGFuZCBzdG9yZWQgdXNlcyBzaGEyNTYtY29udGVudAoraW5zdGVhZCBvZiBzaGExLWNvbnRlbnQuCisKK1BhY2sgaW5kZXgKK35+fn5+fn5+fn4KK1BhY2sgaW5kZXggKC5pZHgpIGZpbGVzIHVzZSBhIG5ldyB2MyBmb3JtYXQgdGhhdCBzdXBwb3J0cyBtdWx0aXBsZQoraGFzaCBmdW5jdGlvbnMuIFRoZXkgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdCAoYWxsIGludGVnZXJzIGFyZSBpbgorbmV0d29yayBieXRlIG9yZGVyKToKKworLSBBIGhlYWRlciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmc6CisgIC0gVGhlIDQtYnl0ZSBwYWNrIGluZGV4IHNpZ25hdHVyZTogJ1wzNzd0MGMnCisgIC0gNC1ieXRlIHZlcnNpb24gbnVtYmVyOiAzCisgIC0gNC1ieXRlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIHNlY3Rpb24sIGluY2x1ZGluZyB0aGUgc2lnbmF0dXJlIGFuZAorICAgIHZlcnNpb24gbnVtYmVyCisgIC0gNC1ieXRlIG51bWJlciBvZiBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGUgcGFjaworICAtIDQtYnl0ZSBudW1iZXIgb2Ygb2JqZWN0IGZvcm1hdHMgaW4gdGhpcyBwYWNrIGluZGV4OiAyCisgIC0gRm9yIGVhY2ggb2JqZWN0IGZvcm1hdDoKKyAgICAtIDQtYnl0ZSBmb3JtYXQgaWRlbnRpZmllciAoZS5nLiwgJ3NoYTEnIGZvciBTSEEtMSkKKyAgICAtIDQtYnl0ZSBsZW5ndGggaW4gYnl0ZXMgb2Ygc2hvcnRlbmVkIG9iamVjdCBuYW1lcy4gVGhpcyBpcyB0aGUKKyAgICAgIHNob3J0ZXN0IHBvc3NpYmxlIGxlbmd0aCBuZWVkZWQgdG8gbWFrZSBuYW1lcyBpbiB0aGUgc2hvcnRlbmVkCisgICAgICBvYmplY3QgbmFtZSB0YWJsZSB1bmFtYmlndW91cy4KKyAgICAtIDQtYnl0ZSBpbnRlZ2VyLCByZWNvcmRpbmcgd2hlcmUgdGFibGVzIHJlbGF0aW5nIHRvIHRoaXMgZm9ybWF0CisgICAgICBhcmUgc3RvcmVkIGluIHRoaXMgaW5kZXggZmlsZSwgYXMgYW4gb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZy4KKyAgLSA0LWJ5dGUgb2Zmc2V0IHRvIHRoZSB0cmFpbGVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUuCisgIC0gWmVybyBvciBtb3JlIGFkZGl0aW9uYWwga2V5L3ZhbHVlIHBhaXJzICg0LWJ5dGUga2V5LCA0LWJ5dGUKKyAgICB2YWx1ZSkuIE9ubHkgb25lIGtleSBpcyBzdXBwb3J0ZWQ6ICdQU1JDJy4gU2VlIHRoZSAiTG9vc2Ugb2JqZWN0cworICAgIGFuZCB1bnJlYWNoYWJsZSBvYmplY3RzIiBzZWN0aW9uIGZvciBzdXBwb3J0ZWQgdmFsdWVzIGFuZCBob3cgdGhpcworICAgIGlzIHVzZWQuICBBbGwgb3RoZXIga2V5cyBhcmUgcmVzZXJ2ZWQuIFJlYWRlcnMgbXVzdCBpZ25vcmUKKyAgICB1bnJlY29nbml6ZWQga2V5cy4KKy0gWmVybyBvciBtb3JlIE5VTCBieXRlcy4gVGhpcyBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGltcHJvdmUgdGhlCisgIGFsaWdubWVudCBvZiB0aGUgZnVsbCBvYmplY3QgbmFtZSB0YWJsZSBiZWxvdy4KKy0gVGFibGVzIGZvciB0aGUgZmlyc3Qgb2JqZWN0IGZvcm1hdDoKKyAgLSBBIHNvcnRlZCB0YWJsZSBvZiBzaG9ydGVuZWQgb2JqZWN0IG5hbWVzLiAgVGhlc2UgYXJlIHByZWZpeGVzIG9mCisgICAgdGhlIG5hbWVzIG9mIGFsbCBvYmplY3RzIGluIHRoaXMgcGFjayBmaWxlLCBwYWNrZWQgdG9nZXRoZXIKKyAgICB3aXRob3V0IG9mZnNldCB2YWx1ZXMgdG8gcmVkdWNlIHRoZSBjYWNoZSBmb290cHJpbnQgb2YgdGhlIGJpbmFyeQorICAgIHNlYXJjaCBmb3IgYSBzcGVjaWZpYyBvYmplY3QgbmFtZS4KKworICAtIEEgdGFibGUgb2YgZnVsbCBvYmplY3QgbmFtZXMgaW4gcGFjayBvcmRlci4gVGhpcyBhbGxvd3MgcmVzb2x2aW5nCisgICAgYSByZWZlcmVuY2UgdG8gInRoZSBudGggb2JqZWN0IGluIHRoZSBwYWNrIGZpbGUiIChmcm9tIGEKKyAgICByZWFjaGFiaWxpdHkgYml0bWFwIG9yIGZyb20gdGhlIG5leHQgdGFibGUgb2YgYW5vdGhlciBvYmplY3QKKyAgICBmb3JtYXQpIHRvIGl0cyBvYmplY3QgbmFtZS4KKworICAtIEEgdGFibGUgb2YgNC1ieXRlIHZhbHVlcyBtYXBwaW5nIG9iamVjdCBuYW1lIG9yZGVyIHRvIHBhY2sgb3JkZXIuCisgICAgRm9yIGFuIG9iamVjdCBpbiB0aGUgdGFibGUgb2Ygc29ydGVkIHNob3J0ZW5lZCBvYmplY3QgbmFtZXMsIHRoZQorICAgIHZhbHVlIGF0IHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluIHRoaXMgdGFibGUgaXMgdGhlIGluZGV4IGluIHRoZQorICAgIHByZXZpb3VzIHRhYmxlIGZvciB0aGF0IHNhbWUgb2JqZWN0LgorCisgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBsb29rIHVwIHRoZSBvYmplY3QgaW4gcmVhY2hhYmlsaXR5IGJpdG1hcHMgb3IKKyAgICB0byBsb29rIHVwIGl0cyBuYW1lIGluIGFub3RoZXIgb2JqZWN0IGZvcm1hdC4KKworICAtIEEgdGFibGUgb2YgNC1ieXRlIENSQzMyIHZhbHVlcyBvZiB0aGUgcGFja2VkIG9iamVjdCBkYXRhLCBpbiB0aGUKKyAgICBvcmRlciB0aGF0IHRoZSBvYmplY3RzIGFwcGVhciBpbiB0aGUgcGFjayBmaWxlLiBUaGlzIGlzIHRvIGFsbG93CisgICAgY29tcHJlc3NlZCBkYXRhIHRvIGJlIGNvcGllZCBkaXJlY3RseSBmcm9tIHBhY2sgdG8gcGFjayBkdXJpbmcKKyAgICByZXBhY2tpbmcgd2l0aG91dCB1bmRldGVjdGVkIGRhdGEgY29ycnVwdGlvbi4KKworICAtIEEgdGFibGUgb2YgNC1ieXRlIG9mZnNldCB2YWx1ZXMuIEZvciBhbiBvYmplY3QgaW4gdGhlIHRhYmxlIG9mCisgICAgc29ydGVkIHNob3J0ZW5lZCBvYmplY3QgbmFtZXMsIHRoZSB2YWx1ZSBhdCB0aGUgY29ycmVzcG9uZGluZworICAgIGluZGV4IGluIHRoaXMgdGFibGUgaW5kaWNhdGVzIHdoZXJlIHRoYXQgb2JqZWN0IGNhbiBiZSBmb3VuZCBpbgorICAgIHRoZSBwYWNrIGZpbGUuIFRoZXNlIGFyZSB1c3VhbGx5IDMxLWJpdCBwYWNrIGZpbGUgb2Zmc2V0cywgYnV0CisgICAgbGFyZ2Ugb2Zmc2V0cyBhcmUgZW5jb2RlZCBhcyBhbiBpbmRleCBpbnRvIHRoZSBuZXh0IHRhYmxlIHdpdGggdGhlCisgICAgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0LgorCisgIC0gQSB0YWJsZSBvZiA4LWJ5dGUgb2Zmc2V0IGVudHJpZXMgKGVtcHR5IGZvciBwYWNrIGZpbGVzIGxlc3MgdGhhbgorICAgIDIgR2lCKS4gUGFjayBmaWxlcyBhcmUgb3JnYW5pemVkIHdpdGggaGVhdmlseSB1c2VkIG9iamVjdHMgdG93YXJkCisgICAgdGhlIGZyb250LCBzbyBtb3N0IG9iamVjdCByZWZlcmVuY2VzIHNob3VsZCBub3QgbmVlZCB0byByZWZlciB0bworICAgIHRoaXMgdGFibGUuCistIFplcm8gb3IgbW9yZSBOVUwgYnl0ZXMuCistIFRhYmxlcyBmb3IgdGhlIHNlY29uZCBvYmplY3QgZm9ybWF0LCB3aXRoIHRoZSBzYW1lIGxheW91dCBhcyBhYm92ZSwKKyAgdXAgdG8gYW5kIG5vdCBpbmNsdWRpbmcgdGhlIHRhYmxlIG9mIENSQzMyIHZhbHVlcy4KKy0gWmVybyBvciBtb3JlIE5VTCBieXRlcy4KKy0gVGhlIHRyYWlsZXIgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgLSBBIGNvcHkgb2YgdGhlIDIwLWJ5dGUgU0hBLTI1NiBjaGVja3N1bSBhdCB0aGUgZW5kIG9mIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgcGFja2ZpbGUuCisKKyAgLSAyMC1ieXRlIFNIQS0yNTYgY2hlY2tzdW0gb2YgYWxsIG9mIHRoZSBhYm92ZS4KKworTG9vc2Ugb2JqZWN0IGluZGV4Cit+fn5+fn5+fn5+fn5+fn5+fn4KK0EgbmV3IGZpbGUgJEdJVF9PQkpFQ1RfRElSL2xvb3NlLW9iamVjdC1pZHggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKK2FsbCBsb29zZSBvYmplY3RzLiBJdHMgZm9ybWF0IGlzCisKKyAgIyBsb29zZS1vYmplY3QtaWR4CisgIChzaGEyNTYtbmFtZSBTUCBzaGExLW5hbWUgTEYpKgorCit3aGVyZSB0aGUgb2JqZWN0IG5hbWVzIGFyZSBpbiBoZXhhZGVjaW1hbCBmb3JtYXQuIFRoZSBmaWxlIGlzIG5vdAorc29ydGVkLgorCitUaGUgbG9vc2Ugb2JqZWN0IGluZGV4IGlzIHByb3RlY3RlZCBhZ2FpbnN0IGNvbmN1cnJlbnQgd3JpdGVzIGJ5IGEKK2xvY2sgZmlsZSAkR0lUX09CSkVDVF9ESVIvbG9vc2Utb2JqZWN0LWlkeC5sb2NrLiBUbyBhZGQgYSBuZXcgbG9vc2UKK29iamVjdDoKKworMS4gV3JpdGUgdGhlIGxvb3NlIG9iamVjdCB0byBhIHRlbXBvcmFyeSBmaWxlLCBsaWtlIHRvZGF5LgorMi4gT3BlbiBsb29zZS1vYmplY3QtaWR4LmxvY2sgd2l0aCBPX0NSRUFUIHwgT19FWENMIHRvIGFjcXVpcmUgdGhlIGxvY2suCiszLiBSZW5hbWUgdGhlIGxvb3NlIG9iamVjdCBpbnRvIHBsYWNlLgorNC4gT3BlbiBsb29zZS1vYmplY3QtaWR4IHdpdGggT19BUFBFTkQgYW5kIHdyaXRlIHRoZSBuZXcgb2JqZWN0Cis1LiBVbmxpbmsgbG9vc2Utb2JqZWN0LWlkeC5sb2NrIHRvIHJlbGVhc2UgdGhlIGxvY2suCisKK1RvIHJlbW92ZSBlbnRyaWVzIChlLmcuIGluICJnaXQgcGFjay1yZWZzIiBvciAiZ2l0LXBydW5lIik6CisKKzEuIE9wZW4gbG9vc2Utb2JqZWN0LWlkeC5sb2NrIHdpdGggT19DUkVBVCB8IE9fRVhDTCB0byBhY3F1aXJlIHRoZQorICAgbG9jay4KKzIuIFdyaXRlIHRoZSBuZXcgY29udGVudCB0byBsb29zZS1vYmplY3QtaWR4LmxvY2suCiszLiBVbmxpbmsgYW55IGxvb3NlIG9iamVjdHMgYmVpbmcgcmVtb3ZlZC4KKzQuIFJlbmFtZSB0byByZXBsYWNlIGxvb3NlLW9iamVjdC1pZHgsIHJlbGVhc2luZyB0aGUgbG9jay4KKworVHJhbnNsYXRpb24gdGFibGUKK35+fn5+fn5+fn5+fn5+fn5+CitUaGUgaW5kZXggZmlsZXMgc3VwcG9ydCBhIGJpZGlyZWN0aW9uYWwgbWFwcGluZyBiZXR3ZWVuIHNoYTEtbmFtZXMKK2FuZCBzaGEyNTYtbmFtZXMuIFRoZSBsb29rdXAgcHJvY2VlZHMgc2ltaWxhcmx5IHRvIG9yZGluYXJ5IG9iamVjdAorbG9va3Vwcy4gRm9yIGV4YW1wbGUsIHRvIGNvbnZlcnQgYSBzaGExLW5hbWUgdG8gYSBzaGEyNTYtbmFtZToKKworIDEuIExvb2sgZm9yIHRoZSBvYmplY3QgaW4gaWR4IGZpbGVzLiBJZiBhIG1hdGNoIGlzIHByZXNlbnQgaW4gdGhlCisgICAgaWR4J3Mgc29ydGVkIGxpc3Qgb2YgdHJ1bmNhdGVkIHNoYTEtbmFtZXMsIHRoZW46CisgICAgYS4gUmVhZCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgc2hhMS1uYW1lIG9yZGVyIHRvIHBhY2sKKyAgICAgICBuYW1lIG9yZGVyIG1hcHBpbmcuCisgICAgYi4gUmVhZCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgZnVsbCBzaGExLW5hbWUgdGFibGUgdG8KKyAgICAgICB2ZXJpZnkgd2UgZm91bmQgdGhlIHJpZ2h0IG9iamVjdC4gSWYgaXQgaXMsIHRoZW4KKyAgICBjLiBSZWFkIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBmdWxsIHNoYTI1Ni1uYW1lIHRhYmxlLgorICAgICAgIFRoYXQgaXMgdGhlIG9iamVjdCdzIHNoYTI1Ni1uYW1lLgorIDIuIENoZWNrIGZvciBhIGxvb3NlIG9iamVjdC4gUmVhZCBsaW5lcyBmcm9tIGxvb3NlLW9iamVjdC1pZHggdW50aWwKKyAgICB3ZSBmaW5kIGEgbWF0Y2guCisKK1N0ZXAgKDEpIHRha2VzIHRoZSBzYW1lIGFtb3VudCBvZiB0aW1lIGFzIGFuIG9yZGluYXJ5IG9iamVjdCBsb29rdXA6CitPKG51bWJlciBvZiBwYWNrcyAqIGxvZyhvYmplY3RzIHBlciBwYWNrKSkuIFN0ZXAgKDIpIHRha2VzIE8obnVtYmVyIG9mCitsb29zZSBvYmplY3RzKSB0aW1lLiBUbyBtYWludGFpbiBnb29kIHBlcmZvcm1hbmNlIGl0IHdpbGwgYmUgbmVjZXNzYXJ5Cit0byBrZWVwIHRoZSBudW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyBsb3cuIFNlZSB0aGUgIkxvb3NlIG9iamVjdHMgYW5kCit1bnJlYWNoYWJsZSBvYmplY3RzIiBzZWN0aW9uIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKK1NpbmNlIGFsbCBvcGVyYXRpb25zIHRoYXQgbWFrZSBuZXcgb2JqZWN0cyAoZS5nLiwgImdpdCBjb21taXQiKSBhZGQKK3RoZSBuZXcgb2JqZWN0cyB0byB0aGUgY29ycmVzcG9uZGluZyBpbmRleCwgdGhpcyBtYXBwaW5nIGlzIHBvc3NpYmxlCitmb3IgYWxsIG9iamVjdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4KKworUmVhZGluZyBhbiBvYmplY3QncyBzaGExLWNvbnRlbnQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgc2hhMS1jb250ZW50IG9mIGFuIG9iamVjdCBjYW4gYmUgcmVhZCBieSBjb252ZXJ0aW5nIGFsbCBzaGEyNTYtbmFtZXMKK2l0cyBzaGEyNTYtY29udGVudCByZWZlcmVuY2VzIHRvIHNoYTEtbmFtZXMgdXNpbmcgdGhlIHRyYW5zbGF0aW9uIHRhYmxlLgorCitGZXRjaAorfn5+fn4KK0ZldGNoaW5nIGZyb20gYSBTSEEtMSBiYXNlZCBzZXJ2ZXIgcmVxdWlyZXMgdHJhbnNsYXRpbmcgYmV0d2VlbiBTSEEtMQorYW5kIFNIQS0yNTYgYmFzZWQgcmVwcmVzZW50YXRpb25zIG9uIHRoZSBmbHkuCisKK1NIQS0xcyBuYW1lZCBpbiB0aGUgcmVmIGFkdmVydGlzZW1lbnQgdGhhdCBhcmUgcHJlc2VudCBvbiB0aGUgY2xpZW50CitjYW4gYmUgdHJhbnNsYXRlZCB0byBTSEEtMjU2IGFuZCBsb29rZWQgdXAgYXMgbG9jYWwgb2JqZWN0cyB1c2luZyB0aGUKK3RyYW5zbGF0aW9uIHRhYmxlLgorCitOZWdvdGlhdGlvbiBwcm9jZWVkcyBhcyB0b2RheS4gQW55ICJoYXZlInMgZ2VuZXJhdGVkIGxvY2FsbHkgYXJlCitjb252ZXJ0ZWQgdG8gU0hBLTEgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIHNlcnZlciwgYW5kIFNIQS0xcworbWVudGlvbmVkIGJ5IHRoZSBzZXJ2ZXIgYXJlIGNvbnZlcnRlZCB0byBTSEEtMjU2IHdoZW4gbG9va2luZyB0aGVtIHVwCitsb2NhbGx5LgorCitBZnRlciBuZWdvdGlhdGlvbiwgdGhlIHNlcnZlciBzZW5kcyBhIHBhY2tmaWxlIGNvbnRhaW5pbmcgdGhlCityZXF1ZXN0ZWQgb2JqZWN0cy4gV2UgY29udmVydCB0aGUgcGFja2ZpbGUgdG8gU0hBLTI1NiBmb3JtYXQgdXNpbmcKK3RoZSBmb2xsb3dpbmcgc3RlcHM6CisKKzEuIGluZGV4LXBhY2s6IGluZmxhdGUgZWFjaCBvYmplY3QgaW4gdGhlIHBhY2tmaWxlIGFuZCBjb21wdXRlIGl0cworICAgU0hBLTEuIE9iamVjdHMgY2FuIGNvbnRhaW4gZGVsdGFzIGluIE9CSl9SRUZfREVMVEEgZm9ybWF0IGFnYWluc3QKKyAgIG9iamVjdHMgdGhlIGNsaWVudCBoYXMgbG9jYWxseS4gVGhlc2Ugb2JqZWN0cyBjYW4gYmUgbG9va2VkIHVwCisgICB1c2luZyB0aGUgdHJhbnNsYXRpb24gdGFibGUgYW5kIHRoZWlyIHNoYTEtY29udGVudCByZWFkIGFzCisgICBkZXNjcmliZWQgYWJvdmUgdG8gcmVzb2x2ZSB0aGUgZGVsdGFzLgorMi4gdG9wb2xvZ2ljYWwgc29ydDogc3RhcnRpbmcgYXQgdGhlICJ3YW50InMgZnJvbSB0aGUgbmVnb3RpYXRpb24KKyAgIHBoYXNlLCB3YWxrIHRocm91Z2ggb2JqZWN0cyBpbiB0aGUgcGFjayBhbmQgZW1pdCBhIGxpc3Qgb2YgdGhlbSwKKyAgIGV4Y2x1ZGluZyBibG9icywgaW4gcmV2ZXJzZSB0b3BvbG9naWNhbGx5IHNvcnRlZCBvcmRlciwgd2l0aCBlYWNoCisgICBvYmplY3QgY29taW5nIGxhdGVyIGluIHRoZSBsaXN0IHRoYW4gYWxsIG9iamVjdHMgaXQgcmVmZXJlbmNlcy4KKyAgIChUaGlzIGxpc3Qgb25seSBjb250YWlucyBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoZSAid2FudHMiLiBJZiB0aGUKKyAgIHBhY2sgZnJvbSB0aGUgc2VydmVyIGNvbnRhaW5lZCBhZGRpdGlvbmFsIGV4dHJhbmVvdXMgb2JqZWN0cywgdGhlbgorICAgdGhleSB3aWxsIGJlIGRpc2NhcmRlZC4pCiszLiBjb252ZXJ0IHRvIHNoYTI1Njogb3BlbiBhIG5ldyAoc2hhMjU2KSBwYWNrZmlsZS4gUmVhZCB0aGUgdG9wb2xvZ2ljYWxseQorICAgc29ydGVkIGxpc3QganVzdCBnZW5lcmF0ZWQuIEZvciBlYWNoIG9iamVjdCwgaW5mbGF0ZSBpdHMKKyAgIHNoYTEtY29udGVudCwgY29udmVydCB0byBzaGEyNTYtY29udGVudCwgYW5kIHdyaXRlIGl0IHRvIHRoZSBzaGEyNTYKKyAgIHBhY2suIFJlY29yZCB0aGUgbmV3IHNoYTE8LT5zaGEyNTYgbWFwcGluZyBlbnRyeSBmb3IgdXNlIGluIHRoZSBpZHguCis0LiBzb3J0OiByZW9yZGVyIGVudHJpZXMgaW4gdGhlIG5ldyBwYWNrIHRvIG1hdGNoIHRoZSBvcmRlciBvZiBvYmplY3RzCisgICBpbiB0aGUgcGFjayB0aGUgc2VydmVyIGdlbmVyYXRlZCBhbmQgaW5jbHVkZSBibG9icy4gV3JpdGUgYSBzaGEyNTYgaWR4CisgICBmaWxlCis1LiBjbGVhbiB1cDogcmVtb3ZlIHRoZSBTSEEtMSBiYXNlZCBwYWNrIGZpbGUsIGluZGV4LCBhbmQKKyAgIHRvcG9sb2dpY2FsbHkgc29ydGVkIGxpc3Qgb2J0YWluZWQgZnJvbSB0aGUgc2VydmVyIGluIHN0ZXBzIDEKKyAgIGFuZCAyLgorCitTdGVwIDMgcmVxdWlyZXMgZXZlcnkgb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIG5ldyBvYmplY3QgdG8gYmUgaW4gdGhlCit0cmFuc2xhdGlvbiB0YWJsZS4gVGhpcyBpcyB3aHkgdGhlIHRvcG9sb2dpY2FsIHNvcnQgc3RlcCBpcyBuZWNlc3NhcnkuCisKK0FzIGFuIG9wdGltaXphdGlvbiwgc3RlcCAxIGNvdWxkIHdyaXRlIGEgZmlsZSBkZXNjcmliaW5nIHdoYXQgbm9uLWJsb2IKK29iamVjdHMgZWFjaCBvYmplY3QgaXQgaGFzIGluZmxhdGVkIGZyb20gdGhlIHBhY2tmaWxlIHJlZmVyZW5jZXMuIFRoaXMKK21ha2VzIHRoZSB0b3BvbG9naWNhbCBzb3J0IGluIHN0ZXAgMiBwb3NzaWJsZSB3aXRob3V0IGluZmxhdGluZyB0aGUKK29iamVjdHMgaW4gdGhlIHBhY2tmaWxlIGZvciBhIHNlY29uZCB0aW1lLiBUaGUgb2JqZWN0cyBuZWVkIHRvIGJlCitpbmZsYXRlZCBhZ2FpbiBpbiBzdGVwIDMsIGZvciBhIHRvdGFsIG9mIHR3byBpbmZsYXRpb25zLgorCitTdGVwIDQgaXMgcHJvYmFibHkgbmVjZXNzYXJ5IGZvciBnb29kIHJlYWQtdGltZSBwZXJmb3JtYW5jZS4gImdpdAorcGFjay1vYmplY3RzIiBvbiB0aGUgc2VydmVyIG9wdGltaXplcyB0aGUgcGFjayBmaWxlIGZvciBnb29kIGRhdGEKK2xvY2FsaXR5IChzZWUgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1oZXVyaXN0aWNzLnR4dCkuCisKK0RldGFpbHMgb2YgdGhpcyBwcm9jZXNzIGFyZSBsaWtlbHkgdG8gY2hhbmdlLiBJdCB3aWxsIHRha2Ugc29tZQorZXhwZXJpbWVudGluZyB0byBnZXQgdGhpcyB0byBwZXJmb3JtIHdlbGwuCisKK1B1c2gKK35+fn4KK1B1c2ggaXMgc2ltcGxlciB0aGFuIGZldGNoIGJlY2F1c2UgdGhlIG9iamVjdHMgcmVmZXJlbmNlZCBieSB0aGUKK3B1c2hlZCBvYmplY3RzIGFyZSBhbHJlYWR5IGluIHRoZSB0cmFuc2xhdGlvbiB0YWJsZS4gVGhlIHNoYTEtY29udGVudAorb2YgZWFjaCBvYmplY3QgYmVpbmcgcHVzaGVkIGNhbiBiZSByZWFkIGFzIGRlc2NyaWJlZCBpbiB0aGUgIlJlYWRpbmcKK2FuIG9iamVjdCdzIHNoYTEtY29udGVudCIgc2VjdGlvbiB0byBnZW5lcmF0ZSB0aGUgcGFjayB3cml0dGVuIGJ5IGdpdAorc2VuZC1wYWNrLgorCitTaWduZWQgQ29tbWl0cworfn5+fn5+fn5+fn5+fn4KK1dlIGFkZCBhIG5ldyBmaWVsZCAiZ3Bnc2lnLXNoYTI1NiIgdG8gdGhlIGNvbW1pdCBvYmplY3QgZm9ybWF0IHRvIGFsbG93CitzaWduaW5nIGNvbW1pdHMgd2l0aG91dCByZWx5aW5nIG9uIFNIQS0xLiBJdCBpcyBzaW1pbGFyIHRvIHRoZQorZXhpc3RpbmcgImdwZ3NpZyIgZmllbGQuIEl0cyBzaWduZWQgcGF5bG9hZCBpcyB0aGUgc2hhMjU2LWNvbnRlbnQgb2YgdGhlCitjb21taXQgb2JqZWN0IHdpdGggYW55ICJncGdzaWciIGFuZCAiZ3Bnc2lnLXNoYTI1NiIgZmllbGRzIHJlbW92ZWQuCisKK1RoaXMgbWVhbnMgY29tbWl0cyBjYW4gYmUgc2lnbmVkCisxLiB1c2luZyBTSEEtMSBvbmx5LCBhcyBpbiBleGlzdGluZyBzaWduZWQgY29tbWl0IG9iamVjdHMKKzIuIHVzaW5nIGJvdGggU0hBLTEgYW5kIFNIQS0yNTYsIGJ5IHVzaW5nIGJvdGggZ3Bnc2lnLXNoYTI1NiBhbmQgZ3Bnc2lnCisgICBmaWVsZHMuCiszLiB1c2luZyBvbmx5IFNIQS0yNTYsIGJ5IG9ubHkgdXNpbmcgdGhlIGdwZ3NpZy1zaGEyNTYgZmllbGQuCisKK09sZCB2ZXJzaW9ucyBvZiAiZ2l0IHZlcmlmeS1jb21taXQiIGNhbiB2ZXJpZnkgdGhlIGdwZ3NpZyBzaWduYXR1cmUgaW4KK2Nhc2VzICgxKSBhbmQgKDIpIHdpdGhvdXQgbW9kaWZpY2F0aW9ucyBhbmQgdmlldyBjYXNlICgzKSBhcyBhbgorb3JkaW5hcnkgdW5zaWduZWQgY29tbWl0LgorCitTaWduZWQgVGFncworfn5+fn5+fn5+fn4KK1dlIGFkZCBhIG5ldyBmaWVsZCAiZ3Bnc2lnLXNoYTI1NiIgdG8gdGhlIHRhZyBvYmplY3QgZm9ybWF0IHRvIGFsbG93CitzaWduaW5nIHRhZ3Mgd2l0aG91dCByZWx5aW5nIG9uIFNIQS0xLiBJdHMgc2lnbmVkIHBheWxvYWQgaXMgdGhlCitzaGEyNTYtY29udGVudCBvZiB0aGUgdGFnIHdpdGggaXRzIGdwZ3NpZy1zaGEyNTYgZmllbGQgYW5kICItLS0tLUJFR0lOIFBHUAorU0lHTkFUVVJFLS0tLS0iIGRlbGltaXRlZCBpbi1ib2R5IHNpZ25hdHVyZSByZW1vdmVkLgorCitUaGlzIG1lYW5zIHRhZ3MgY2FuIGJlIHNpZ25lZAorMS4gdXNpbmcgU0hBLTEgb25seSwgYXMgaW4gZXhpc3Rpbmcgc2lnbmVkIHRhZyBvYmplY3RzCisyLiB1c2luZyBib3RoIFNIQS0xIGFuZCBTSEEtMjU2LCBieSB1c2luZyBncGdzaWctc2hhMjU2IGFuZCBhbiBpbi1ib2R5CisgICBzaWduYXR1cmUuCiszLiB1c2luZyBvbmx5IFNIQS0yNTYsIGJ5IG9ubHkgdXNpbmcgdGhlIGdwZ3NpZy1zaGEyNTYgZmllbGQuCisKK01lcmdldGFnIGVtYmVkZGluZworfn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgbWVyZ2V0YWcgZmllbGQgaW4gdGhlIHNoYTEtY29udGVudCBvZiBhIGNvbW1pdCBjb250YWlucyB0aGUKK3NoYTEtY29udGVudCBvZiBhIHRhZyB0aGF0IHdhcyBtZXJnZWQgYnkgdGhhdCBjb21taXQuCisKK1RoZSBtZXJnZXRhZyBmaWVsZCBpbiB0aGUgc2hhMjU2LWNvbnRlbnQgb2YgdGhlIHNhbWUgY29tbWl0IGNvbnRhaW5zIHRoZQorc2hhMjU2LWNvbnRlbnQgb2YgdGhlIHNhbWUgdGFnLgorCitTdWJtb2R1bGVzCit+fn5+fn5+fn5+CitUbyBjb252ZXJ0IHJlY29yZGVkIHN1Ym1vZHVsZSBwb2ludGVycywgeW91IG5lZWQgdG8gaGF2ZSB0aGUgY29udmVydGVkCitzdWJtb2R1bGUgcmVwb3NpdG9yeSBpbiBwbGFjZS4gVGhlIHRyYW5zbGF0aW9uIHRhYmxlIG9mIHRoZSBzdWJtb2R1bGUKK2NhbiBiZSB1c2VkIHRvIGxvb2sgdXAgdGhlIG5ldyBoYXNoLgorCitMb29zZSBvYmplY3RzIGFuZCB1bnJlYWNoYWJsZSBvYmplY3RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGYXN0IGxvb2t1cHMgaW4gdGhlIGxvb3NlLW9iamVjdC1pZHggcmVxdWlyZSB0aGF0IHRoZSBudW1iZXIgb2YgbG9vc2UKK29iamVjdHMgbm90IGdyb3cgdG9vIGhpZ2guCisKKyJnaXQgZ2MgLS1hdXRvIiBjdXJyZW50bHkgd2FpdHMgZm9yIHRoZXJlIHRvIGJlIDY3MDAgbG9vc2Ugb2JqZWN0cworcHJlc2VudCBiZWZvcmUgY29uc29saWRhdGluZyB0aGVtIGludG8gYSBwYWNrZmlsZS4gV2Ugd2lsbCBuZWVkIHRvCittZWFzdXJlIHRvIGZpbmQgYSBtb3JlIGFwcHJvcHJpYXRlIHRocmVzaG9sZCBmb3IgaXQgdG8gdXNlLgorCisiZ2l0IGdjIC0tYXV0byIgY3VycmVudGx5IHdhaXRzIGZvciB0aGVyZSB0byBiZSA1MCBwYWNrcyBwcmVzZW50CitiZWZvcmUgY29tYmluaW5nIHBhY2tmaWxlcy4gUGFja2luZyBsb29zZSBvYmplY3RzIG1vcmUgYWdncmVzc2l2ZWx5CittYXkgY2F1c2UgdGhlIG51bWJlciBvZiBwYWNrIGZpbGVzIHRvIGdyb3cgdG9vIHF1aWNrbHkuIFRoaXMgY2FuIGJlCittaXRpZ2F0ZWQgYnkgdXNpbmcgYSBzdHJhdGVneSBzaW1pbGFyIHRvIE1hcnRpbiBGaWNrJ3MgZXhwb25lbnRpYWwKK3JvbGxpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIHNjcmlwdDoKK2h0dHBzOi8vZ2Vycml0LXJldmlldy5nb29nbGVzb3VyY2UuY29tL2MvZ2Vycml0LysvMzUyMTUKKworImdpdCBnYyIgY3VycmVudGx5IGV4cGVscyBhbnkgdW5yZWFjaGFibGUgb2JqZWN0cyBpdCBlbmNvdW50ZXJzIGluCitwYWNrIGZpbGVzIHRvIGxvb3NlIG9iamVjdHMgaW4gYW4gYXR0ZW1wdCB0byBwcmV2ZW50IGEgcmFjZSB3aGVuCitwcnVuaW5nIHRoZW0gKGluIGNhc2UgYW5vdGhlciBwcm9jZXNzIGlzIHNpbXVsdGFuZW91c2x5IHdyaXRpbmcgYSBuZXcKK29iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgYWJvdXQtdG8tYmUtZGVsZXRlZCBvYmplY3QpLiBUaGlzIGxlYWRzIHRvCithbiBleHBsb3Npb24gaW4gdGhlIG51bWJlciBvZiBsb29zZSBvYmplY3RzIHByZXNlbnQgYW5kIGRpc2sgc3BhY2UKK3VzYWdlIGR1ZSB0byB0aGUgb2JqZWN0cyBpbiBkZWx0YSBmb3JtIGJlaW5nIHJlcGxhY2VkIHdpdGggaW5kZXBlbmRlbnQKK2xvb3NlIG9iamVjdHMuICBXb3JzZSwgdGhlIHJhY2UgaXMgc3RpbGwgcHJlc2VudCBmb3IgbG9vc2Ugb2JqZWN0cy4KKworSW5zdGVhZCwgImdpdCBnYyIgd2lsbCBuZWVkIHRvIG1vdmUgdW5yZWFjaGFibGUgb2JqZWN0cyB0byBhIG5ldworcGFja2ZpbGUgbWFya2VkIGFzIFVOUkVBQ0hBQkxFX0dBUkJBR0UgKHVzaW5nIHRoZSBQU1JDIGZpZWxkOyBzZWUKK2JlbG93KS4gVG8gYXZvaWQgdGhlIHJhY2Ugd2hlbiB3cml0aW5nIG5ldyBvYmplY3RzIHJlZmVycmluZyB0byBhbgorYWJvdXQtdG8tYmUtZGVsZXRlZCBvYmplY3QsIGNvZGUgcGF0aHMgdGhhdCB3cml0ZSBuZXcgb2JqZWN0cyB3aWxsCituZWVkIHRvIGNvcHkgYW55IG9iamVjdHMgZnJvbSBVTlJFQUNIQUJMRV9HQVJCQUdFIHBhY2tzIHRoYXQgdGhleQorcmVmZXIgdG8gbmV3LCBub24tVU5SRUFDSEFCTEVfR0FSQkFHRSBwYWNrcyAob3IgbG9vc2Ugb2JqZWN0cykuCitVTlJFQUNIQUJMRV9HQVJCQUdFIGFyZSB0aGVuIHNhZmUgdG8gZGVsZXRlIGlmIHRoZWlyIGNyZWF0aW9uIHRpbWUgKGFzCitpbmRpY2F0ZWQgYnkgdGhlIGZpbGUncyBtdGltZSkgaXMgbG9uZyBlbm91Z2ggYWdvLgorCitUbyBhdm9pZCBhIHByb2xpZmVyYXRpb24gb2YgVU5SRUFDSEFCTEVfR0FSQkFHRSBwYWNrcywgdGhleSBjYW4gYmUKK2NvbWJpbmVkIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gSWYgImdjLmdhcmJhZ2VUdGwiIGlzIHNldCB0bworZ3JlYXRlciB0aGFuIG9uZSBkYXksIHRoZW4gcGFja3MgY3JlYXRlZCB3aXRoaW4gYSBzaW5nbGUgY2FsZW5kYXIgZGF5LAorVVRDLCBjYW4gYmUgY29hbGVzY2VkIHRvZ2V0aGVyLiBUaGUgcmVzdWx0aW5nIHBhY2tmaWxlIHdvdWxkIGhhdmUgYW4KK210aW1lIGJlZm9yZSBtaWRuaWdodCBvbiB0aGF0IGRheSwgc28gdGhpcyBtYWtlcyB0aGUgZWZmZWN0aXZlIG1heGltdW0KK3R0bCB0aGUgZ2FyYmFnZVR0bCArIDEgZGF5LiBJZiAiZ2MuZ2FyYmFnZVR0bCIgaXMgbGVzcyB0aGFuIG9uZSBkYXksCit0aGVuIHdlIGRpdmlkZSB0aGUgY2FsZW5kYXIgZGF5IGludG8gaW50ZXJ2YWxzIG9uZS10aGlyZCBvZiB0aGF0IHR0bAoraW4gZHVyYXRpb24uIFBhY2tzIGNyZWF0ZWQgd2l0aGluIHRoZSBzYW1lIGludGVydmFsIGNhbiBiZSBjb2FsZXNjZWQKK3RvZ2V0aGVyLiBUaGUgcmVzdWx0aW5nIHBhY2tmaWxlIHdvdWxkIGhhdmUgYW4gbXRpbWUgYmVmb3JlIHRoZSBlbmQgb2YKK3RoZSBpbnRlcnZhbCwgc28gdGhpcyBtYWtlcyB0aGUgZWZmZWN0aXZlIG1heGltdW0gdHRsIGVxdWFsIHRvIHRoZQorZ2FyYmFnZVR0bCAqIDQvMy4KKworVGhpcyBydWxlIGNvbWVzIGZyb20gVGhpcnVtYWxhIFJlZGR5IE11dGNodWtvdGEncyBKR2l0IGNoYW5nZQoraHR0cHM6Ly9naXQuZWNsaXBzZS5vcmcvci85MDQ2NS4KKworVGhlIFVOUkVBQ0hBQkxFX0dBUkJBR0Ugc2V0dGluZyBnb2VzIGluIHRoZSBQU1JDIGZpZWxkIG9mIHRoZSBwYWNrCitpbmRleC4gTW9yZSBnZW5lcmFsbHksIHRoYXQgZmllbGQgaW5kaWNhdGVzIHdoZXJlIGEgcGFjayBjYW1lIGZyb206CisKKyAtIDEgKFBBQ0tfU09VUkNFX1JFQ0VJVkUpIGZvciBhIHBhY2sgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yaworIC0gMiAoUEFDS19TT1VSQ0VfQVVUTykgZm9yIGEgcGFjayBjcmVhdGVkIGJ5IGEgbGlnaHR3ZWlnaHQKKyAgICJnYyAtLWF1dG8iIG9wZXJhdGlvbgorIC0gMyAoUEFDS19TT1VSQ0VfR0MpIGZvciBhIHBhY2sgY3JlYXRlZCBieSBhIGZ1bGwgZ2MKKyAtIDQgKFBBQ0tfU09VUkNFX1VOUkVBQ0hBQkxFX0dBUkJBR0UpIGZvciBwb3RlbnRpYWwgZ2FyYmFnZQorICAgZGlzY292ZXJlZCBieSBnYworIC0gNSAoUEFDS19TT1VSQ0VfSU5TRVJUKSBmb3IgbG9jYWxseSBjcmVhdGVkIG9iamVjdHMgdGhhdCB3ZXJlCisgICB3cml0dGVuIGRpcmVjdGx5IHRvIGEgcGFjayBmaWxlLCBlLmcuIGZyb20gImdpdCBhZGQgLiIKKworVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGZvciAiZ2MgLS1hdXRvIiB0bworbWFrZSBhcHByb3ByaWF0ZSBjaG9pY2VzIGFib3V0IHdoaWNoIHBhY2tzIHRvIGNvYWxlc2NlLgorCitDYXZlYXRzCistLS0tLS0tCitJbnZhbGlkIG9iamVjdHMKK35+fn5+fn5+fn5+fn5+fgorVGhlIGNvbnZlcnNpb24gZnJvbSBzaGExLWNvbnRlbnQgdG8gc2hhMjU2LWNvbnRlbnQgcmV0YWlucyBhbnkKK2Jyb2tlbm5lc3MgaW4gdGhlIG9yaWdpbmFsIG9iamVjdCAoZS5nLiwgdHJlZSBlbnRyeSBtb2RlcyBlbmNvZGVkIHdpdGgKK2xlYWRpbmcgMCwgdHJlZSBvYmplY3RzIHdob3NlIHBhdGhzIGFyZSBub3Qgc29ydGVkIGNvcnJlY3RseSwgYW5kCitjb21taXQgb2JqZWN0cyB3aXRob3V0IGFuIGF1dGhvciBvciBjb21taXR0ZXIpLiBUaGlzIGlzIGEgZGVsaWJlcmF0ZQorZmVhdHVyZSBvZiB0aGUgZGVzaWduIHRvIGFsbG93IHRoZSBjb252ZXJzaW9uIHRvIHJvdW5kLXRyaXAuCisKK01vcmUgcHJvZm91bmRseSBicm9rZW4gb2JqZWN0cyAoZS5nLiwgYSBjb21taXQgd2l0aCBhIHRydW5jYXRlZCAidHJlZSIKK2hlYWRlciBsaW5lKSBjYW5ub3QgYmUgY29udmVydGVkIGJ1dCB3ZXJlIG5vdCB1c2FibGUgYnkgY3VycmVudCBHaXQKK2FueXdheS4KKworU2hhbGxvdyBjbG9uZSBhbmQgc3VibW9kdWxlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQmVjYXVzZSBpdCByZXF1aXJlcyBhbGwgcmVmZXJlbmNlZCBvYmplY3RzIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUKK2xvY2FsbHkgZ2VuZXJhdGVkIHRyYW5zbGF0aW9uIHRhYmxlLCB0aGlzIGRlc2lnbiBkb2VzIG5vdCBzdXBwb3J0CitzaGFsbG93IGNsb25lIG9yIHVuZmV0Y2hlZCBzdWJtb2R1bGVzLiBQcm90b2NvbCBpbXByb3ZlbWVudHMgbWlnaHQKK2FsbG93IGxpZnRpbmcgdGhpcyByZXN0cmljdGlvbi4KKworQWx0ZXJuYXRlcworfn5+fn5+fn5+fgorRm9yIHRoZSBzYW1lIHJlYXNvbiwgYSBzaGEyNTYgcmVwb3NpdG9yeSBjYW5ub3QgYm9ycm93IG9iamVjdHMgZnJvbSBhCitzaGExIHJlcG9zaXRvcnkgdXNpbmcgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgb3IKKyRHSVRfQUxURVJOQVRFX09CSkVDVF9SRVBPU0lUT1JJRVMuCisKK2dpdCBub3Rlcworfn5+fn5+fn5+CitUaGUgImdpdCBub3RlcyIgdG9vbCBhbm5vdGF0ZXMgb2JqZWN0cyB1c2luZyB0aGVpciBzaGExLW5hbWUgYXMga2V5LgorVGhpcyBkZXNpZ24gZG9lcyBub3QgZGVzY3JpYmUgYSB3YXkgdG8gbWlncmF0ZSBub3RlcyB0cmVlcyB0byB1c2UKK3NoYTI1Ni1uYW1lcy4gVGhhdCBtaWdyYXRpb24gaXMgZXhwZWN0ZWQgdG8gaGFwcGVuIHNlcGFyYXRlbHkgKGZvcgorZXhhbXBsZSB1c2luZyBhIGZpbGUgYXQgdGhlIHJvb3Qgb2YgdGhlIG5vdGVzIHRyZWUgdG8gZGVzY3JpYmUgd2hpY2gKK2hhc2ggaXQgdXNlcykuCisKK1NlcnZlci1zaWRlIGNvc3QKK35+fn5+fn5+fn5+fn5+fn4KK1VudGlsIEdpdCBwcm90b2NvbCBnYWlucyBTSEEtMjU2IHN1cHBvcnQsIHVzaW5nIFNIQS0yNTYgYmFzZWQgc3RvcmFnZQorb24gcHVibGljLWZhY2luZyBHaXQgc2VydmVycyBpcyBzdHJvbmdseSBkaXNjb3VyYWdlZC4gT25jZSBHaXQKK3Byb3RvY29sIGdhaW5zIFNIQS0yNTYgc3VwcG9ydCwgU0hBLTI1NiBiYXNlZCBzZXJ2ZXJzIGFyZSBsaWtlbHkgbm90Cit0byBzdXBwb3J0IFNIQS0xIGNvbXBhdGliaWxpdHksIHRvIGF2b2lkIHdoYXQgbWF5IGJlIGEgdmVyeSBleHBlbnNpdmUKK2hhc2ggcmUtZW5jb2RlIGR1cmluZyBjbG9uZSBhbmQgdG8gZW5jb3VyYWdlIHBlZXJzIHRvIG1vZGVybml6ZS4KKworVGhlIGRlc2lnbiBkZXNjcmliZWQgaGVyZSBhbGxvd3MgZmV0Y2hlcyBieSBTSEEtMSBjbGllbnRzIG9mIGEKK3BlcnNvbmFsIFNIQS0yNTYgcmVwb3NpdG9yeSBiZWNhdXNlIGl0J3Mgbm90IG11Y2ggbW9yZSBkaWZmaWN1bHQgdGhhbgorYWxsb3dpbmcgcHVzaGVzIGZyb20gdGhhdCByZXBvc2l0b3J5LiBUaGlzIHN1cHBvcnQgbmVlZHMgdG8gYmUgZ3VhcmRlZAorYnkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiAtLS0gc2VydmVycyBsaWtlIGdpdC5rZXJuZWwub3JnIHRoYXQgc2VydmUgYQorbGFyZ2UgbnVtYmVyIG9mIGNsaWVudHMgd291bGQgbm90IGJlIGV4cGVjdGVkIHRvIGJlYXIgdGhhdCBjb3N0LgorCitNZWFuaW5nIG9mIHNpZ25hdHVyZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIHNpZ25lZCBwYXlsb2FkIGZvciBzaWduZWQgY29tbWl0cyBhbmQgdGFncyBkb2VzIG5vdCBleHBsaWNpdGx5CituYW1lIHRoZSBoYXNoIHVzZWQgdG8gaWRlbnRpZnkgb2JqZWN0cy4gSWYgc29tZSBkYXkgR2l0IGFkb3B0cyBhIG5ldworaGFzaCBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgY3VycmVudCBTSEEtMSAoNDAKK2hleGFkZWNpbWFsIGRpZ2l0KSBvciBTSEEtMjU2ICg2NCBoZXhhZGVjaW1hbCBkaWdpdCkgb2JqZWN0cyB0aGVuIHRoZQoraW50ZW50IGJlaGluZCB0aGUgUEdQIHNpZ25lZCBwYXlsb2FkIGluIGFuIG9iamVjdCBzaWduYXR1cmUgaXMKK3VuY2xlYXI6CisKKwlvYmplY3QgZTdlMDdkNWE0ZmNjMmEyMDNkOTg3Mzk2OGFkM2U2YmQ0ZDc0MTlkNworCXR5cGUgY29tbWl0CisJdGFnIHYyLjEyLjAKKwl0YWdnZXIgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiAxNDg3OTYyMjA1IC0wODAwCisKKwlHaXQgMi4xMgorCitEb2VzIHRoaXMgbWVhbiBHaXQgdjIuMTIuMCBpcyB0aGUgY29tbWl0IHdpdGggc2hhMS1uYW1lCitlN2UwN2Q1YTRmY2MyYTIwM2Q5ODczOTY4YWQzZTZiZDRkNzQxOWQ3IG9yIHRoZSBjb21taXQgd2l0aAorbmV3LTQwLWRpZ2l0LWhhc2gtbmFtZSBlN2UwN2Q1YTRmY2MyYTIwM2Q5ODczOTY4YWQzZTZiZDRkNzQxOWQ3PworCitGb3J0dW5hdGVseSBTSEEtMjU2IGFuZCBTSEEtMSBoYXZlIGRpZmZlcmVudCBsZW5ndGhzLiBJZiBHaXQgc3RhcnRzCit1c2luZyBhbm90aGVyIGhhc2ggd2l0aCB0aGUgc2FtZSBsZW5ndGggdG8gbmFtZSBvYmplY3RzLCB0aGVuIGl0IHdpbGwKK25lZWQgdG8gY2hhbmdlIHRoZSBmb3JtYXQgb2Ygc2lnbmVkIHBheWxvYWRzIHVzaW5nIHRoYXQgaGFzaCB0bworYWRkcmVzcyB0aGlzIGlzc3VlLgorCitPYmplY3QgbmFtZXMgb24gdGhlIGNvbW1hbmQgbGluZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RvIHN1cHBvcnQgdGhlIHRyYW5zaXRpb24gKHNlZSBUcmFuc2l0aW9uIHBsYW4gYmVsb3cpLCB0aGlzIGRlc2lnbgorc3VwcG9ydHMgZm91ciBkaWZmZXJlbnQgbW9kZXMgb2Ygb3BlcmF0aW9uOgorCisgMS4gKCJkYXJrIGxhdW5jaCIpIFRyZWF0IG9iamVjdCBuYW1lcyBpbnB1dCBieSB0aGUgdXNlciBhcyBTSEEtMSBhbmQKKyAgICBjb252ZXJ0IGFueSBvYmplY3QgbmFtZXMgd3JpdHRlbiB0byBvdXRwdXQgdG8gU0hBLTEsIGJ1dCBzdG9yZQorICAgIG9iamVjdHMgdXNpbmcgU0hBLTI1Ni4gIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHRlc3QgdGhlIGNvZGUgd2l0aCBubworICAgIHZpc2libGUgYmVoYXZpb3IgY2hhbmdlIGV4Y2VwdCBmb3IgcGVyZm9ybWFuY2UuICBUaGlzIGFsbG93cworICAgIGFsbG93cyBydW5uaW5nIGV2ZW4gdGVzdHMgdGhhdCBhc3N1bWUgdGhlIFNIQS0xIGhhc2ggZnVuY3Rpb24sIHRvCisgICAgc2FuaXR5LWNoZWNrIHRoZSBiZWhhdmlvciBvZiB0aGUgbmV3IG1vZGUuCisKKyAyLiAoImVhcmx5IHRyYW5zaXRpb24iKSBBbGxvdyBib3RoIFNIQS0xIGFuZCBTSEEtMjU2IG9iamVjdCBuYW1lcyBpbgorICAgIGlucHV0LiBBbnkgb2JqZWN0IG5hbWVzIHdyaXR0ZW4gdG8gb3V0cHV0IHVzZSBTSEEtMS4gVGhpcyBhbGxvd3MKKyAgICB1c2VycyB0byBjb250aW51ZSB0byBtYWtlIHVzZSBvZiBTSEEtMSB0byBjb21tdW5pY2F0ZSB3aXRoIHBlZXJzCisgICAgKGUuZy4gYnkgZW1haWwpIHRoYXQgaGF2ZSBub3QgbWlncmF0ZWQgeWV0IGFuZCBwcmVwYXJlcyBmb3IgbW9kZSAzLgorCisgMy4gKCJsYXRlIHRyYW5zaXRpb24iKSBBbGxvdyBib3RoIFNIQS0xIGFuZCBTSEEtMjU2IG9iamVjdCBuYW1lcyBpbgorICAgIGlucHV0LiBBbnkgb2JqZWN0IG5hbWVzIHdyaXR0ZW4gdG8gb3V0cHV0IHVzZSBTSEEtMjU2LiBJbiB0aGlzCisgICAgbW9kZSwgdXNlcnMgYXJlIHVzaW5nIGEgbW9yZSBzZWN1cmUgb2JqZWN0IG5hbWluZyBtZXRob2QgYnkKKyAgICBkZWZhdWx0LiAgVGhlIGRpc3J1cHRpb24gaXMgbWluaW1hbCBhcyBsb25nIGFzIG1vc3Qgb2YgdGhlaXIgcGVlcnMKKyAgICBhcmUgaW4gbW9kZSAyIG9yIG1vZGUgMy4KKworIDQuICgicG9zdC10cmFuc2l0aW9uIikgVHJlYXQgb2JqZWN0IG5hbWVzIGlucHV0IGJ5IHRoZSB1c2VyIGFzCisgICAgU0hBLTI1NiBhbmQgd3JpdGUgb3V0cHV0IHVzaW5nIFNIQS0yNTYuIFRoaXMgaXMgc2FmZXIgdGhhbiBtb2RlIDMKKyAgICBiZWNhdXNlIHRoZXJlIGlzIGxlc3MgcmlzayB0aGF0IGlucHV0IGlzIGluY29ycmVjdGx5IGludGVycHJldGVkCisgICAgdXNpbmcgdGhlIHdyb25nIGhhc2ggZnVuY3Rpb24uCisKK1RoZSBtb2RlIGlzIHNwZWNpZmllZCBpbiBjb25maWd1cmF0aW9uLgorCitUaGUgdXNlciBjYW4gYWxzbyBleHBsaWNpdGx5IHNwZWNpZnkgd2hpY2ggZm9ybWF0IHRvIHVzZSBmb3IgYQorcGFydGljdWxhciByZXZpc2lvbiBzcGVjaWZpZXIgYW5kIGZvciBvdXRwdXQsIG92ZXJyaWRpbmcgdGhlIG1vZGUuIEZvcgorZXhhbXBsZToKKworZ2l0IC0tb3V0cHV0LWZvcm1hdD1zaGExIGxvZyBhYmFjODdhXntzaGExfS4uZjc4N2NhY157c2hhMjU2fQorCitDaG9pY2Ugb2YgSGFzaAorLS0tLS0tLS0tLS0tLS0KK0luIGVhcmx5IDIwMDUsIGFyb3VuZCB0aGUgdGltZSB0aGF0IEdpdCB3YXMgd3JpdHRlbiwgWGlhb3l1biBXYW5nLAorWWlxdW4gTGlzYSBZaW4sIGFuZCBIb25nYm8gWXUgYW5ub3VuY2VkIGFuIGF0dGFjayBmaW5kaW5nIFNIQS0xCitjb2xsaXNpb25zIGluIDJeNjkgb3BlcmF0aW9ucy4gSW4gQXVndXN0IHRoZXkgcHVibGlzaGVkIGRldGFpbHMuCitMdWNraWx5LCBubyBwcmFjdGljYWwgZGVtb25zdHJhdGlvbnMgb2YgYSBjb2xsaXNpb24gaW4gZnVsbCBTSEEtMSB3ZXJlCitwdWJsaXNoZWQgdW50aWwgMTAgeWVhcnMgbGF0ZXIsIGluIDIwMTcuCisKK0dpdCB2Mi4xMy4wIGFuZCBsYXRlciBzdWJzZXF1ZW50bHkgbW92ZWQgdG8gYSBoYXJkZW5lZCBTSEEtMQoraW1wbGVtZW50YXRpb24gYnkgZGVmYXVsdCB0aGF0IG1pdGlnYXRlcyB0aGUgU0hBdHRlcmVkIGF0dGFjaywgYnV0CitTSEEtMSBpcyBzdGlsbCBiZWxpZXZlZCB0byBiZSB3ZWFrLgorCitUaGUgaGFzaCB0byByZXBsYWNlIHRoaXMgaGFyZGVuZWQgU0hBLTEgc2hvdWxkIGJlIHN0cm9uZ2VyIHRoYW4gU0hBLTEKK3dhczogd2Ugd291bGQgbGlrZSBpdCB0byBiZSB0cnVzdHdvcnRoeSBhbmQgdXNlZnVsIGluIHByYWN0aWNlIGZvciBhdAorbGVhc3QgMTAgeWVhcnMuCisKK1NvbWUgb3RoZXIgcmVsZXZhbnQgcHJvcGVydGllczoKKworMS4gQSAyNTYtYml0IGhhc2ggKGxvbmcgZW5vdWdoIHRvIG1hdGNoIGNvbW1vbiBzZWN1cml0eSBwcmFjdGljZTsgbm90CisgICBleGNlc3NpdmVseSBsb25nIHRvIGh1cnQgcGVyZm9ybWFuY2UgYW5kIGRpc2sgdXNhZ2UpLgorCisyLiBIaWdoIHF1YWxpdHkgaW1wbGVtZW50YXRpb25zIHNob3VsZCBiZSB3aWRlbHkgYXZhaWxhYmxlIChlLmcuLCBpbgorICAgT3BlblNTTCBhbmQgQXBwbGUgQ29tbW9uQ3J5cHRvKS4KKworMy4gVGhlIGhhc2ggZnVuY3Rpb24ncyBwcm9wZXJ0aWVzIHNob3VsZCBtYXRjaCBHaXQncyBuZWVkcyAoZS5nLiBHaXQKKyAgIHJlcXVpcmVzIGNvbGxpc2lvbiBhbmQgMm5kIHByZWltYWdlIHJlc2lzdGFuY2UgYW5kIGRvZXMgbm90IHJlcXVpcmUKKyAgIGxlbmd0aCBleHRlbnNpb24gcmVzaXN0YW5jZSkuCisKKzQuIEFzIGEgdGllYnJlYWtlciwgdGhlIGhhc2ggc2hvdWxkIGJlIGZhc3QgdG8gY29tcHV0ZSAoZm9ydHVuYXRlbHkKKyAgIG1hbnkgY29udGVuZGVycyBhcmUgZmFzdGVyIHRoYW4gU0hBLTEpLgorCitXZSBjaG9vc2UgU0hBLTI1Ni4KKworVHJhbnNpdGlvbiBwbGFuCistLS0tLS0tLS0tLS0tLS0KK1NvbWUgaW5pdGlhbCBzdGVwcyBjYW4gYmUgaW1wbGVtZW50ZWQgaW5kZXBlbmRlbnRseSBvZiBvbmUgYW5vdGhlcjoKKy0gYWRkaW5nIGEgaGFzaCBmdW5jdGlvbiBBUEkgKHZ0YWJsZSkKKy0gdGVhY2hpbmcgZnNjayB0byB0b2xlcmF0ZSB0aGUgZ3Bnc2lnLXNoYTI1NiBmaWVsZAorLSBleGNsdWRpbmcgZ3Bnc2lnLSogZnJvbSB0aGUgZmllbGRzIGNvcGllZCBieSAiZ2l0IGNvbW1pdCAtLWFtZW5kIgorLSBhbm5vdGF0aW5nIHRlc3RzIHRoYXQgZGVwZW5kIG9uIFNIQS0xIHZhbHVlcyB3aXRoIGEgU0hBMSB0ZXN0CisgIHByZXJlcXVpc2l0ZQorLSB1c2luZyAic3RydWN0IG9iamVjdF9pZCIsIEdJVF9NQVhfUkFXU1osIGFuZCBHSVRfTUFYX0hFWFNaCisgIGNvbnNpc3RlbnRseSBpbnN0ZWFkIG9mICJ1bnNpZ25lZCBjaGFyICoiIGFuZCB0aGUgaGFyZGNvZGVkCisgIGNvbnN0YW50cyAyMCBhbmQgNDAuCistIGludHJvZHVjaW5nIGluZGV4IHYzCistIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUFNSQyBmaWVsZCBhbmQgc2FmZXIgb2JqZWN0IHBydW5pbmcKKworCitUaGUgZmlyc3QgdXNlci12aXNpYmxlIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBvYmplY3RGb3JtYXQKK2V4dGVuc2lvbiAod2l0aG91dCBjb21wYXRPYmplY3RGb3JtYXQpLiBUaGlzIHJlcXVpcmVzOgorLSBpbXBsZW1lbnRpbmcgdGhlIGxvb3NlLW9iamVjdC1pZHgKKy0gdGVhY2hpbmcgZnNjayBhYm91dCB0aGlzIG1vZGUgb2Ygb3BlcmF0aW9uCistIHVzaW5nIHRoZSBoYXNoIGZ1bmN0aW9uIEFQSSAodnRhYmxlKSB3aGVuIGNvbXB1dGluZyBvYmplY3QgbmFtZXMKKy0gc2lnbmluZyBvYmplY3RzIGFuZCB2ZXJpZnlpbmcgc2lnbmF0dXJlcworLSByZWplY3RpbmcgYXR0ZW1wdHMgdG8gZmV0Y2ggZnJvbSBvciBwdXNoIHRvIGFuIGluY29tcGF0aWJsZQorICByZXBvc2l0b3J5CisKK05leHQgY29tZXMgaW50cm9kdWN0aW9uIG9mIGNvbXBhdE9iamVjdEZvcm1hdDoKKy0gdHJhbnNsYXRpbmcgb2JqZWN0IG5hbWVzIGJldHdlZW4gb2JqZWN0IGZvcm1hdHMKKy0gdHJhbnNsYXRpbmcgb2JqZWN0IGNvbnRlbnQgYmV0d2VlbiBvYmplY3QgZm9ybWF0cworLSBnZW5lcmF0aW5nIGFuZCB2ZXJpZnlpbmcgc2lnbmF0dXJlcyBpbiB0aGUgY29tcGF0IGZvcm1hdAorLSBhZGRpbmcgYXBwcm9wcmlhdGUgaW5kZXggZW50cmllcyB3aGVuIGFkZGluZyBhIG5ldyBvYmplY3QgdG8gdGhlCisgIG9iamVjdCBzdG9yZQorLSAtLW91dHB1dC1mb3JtYXQgb3B0aW9uCistIF57c2hhMX0gYW5kIF57c2hhMjU2fSByZXZpc2lvbiBub3RhdGlvbgorLSBjb25maWd1cmF0aW9uIHRvIHNwZWNpZnkgZGVmYXVsdCBpbnB1dCBhbmQgb3V0cHV0IGZvcm1hdCAoc2VlCisgICJPYmplY3QgbmFtZXMgb24gdGhlIGNvbW1hbmQgbGluZSIgYWJvdmUpCisKK1RoZSBuZXh0IHN0ZXAgaXMgc3VwcG9ydGluZyBmZXRjaGVzIGFuZCBwdXNoZXMgdG8gU0hBLTEgcmVwb3NpdG9yaWVzOgorLSBhbGxvdyBwdXNoZXMgdG8gYSByZXBvc2l0b3J5IHVzaW5nIHRoZSBjb21wYXQgZm9ybWF0CistIGdlbmVyYXRlIGEgdG9wb2xvZ2ljYWxseSBzb3J0ZWQgbGlzdCBvZiB0aGUgU0hBLTEgbmFtZXMgb2YgZmV0Y2hlZAorICBvYmplY3RzCistIGNvbnZlcnQgdGhlIGZldGNoZWQgcGFja2ZpbGUgdG8gc2hhMjU2IGZvcm1hdCBhbmQgZ2VuZXJhdGUgYW4gaWR4CisgIGZpbGUKKy0gcmUtc29ydCB0byBtYXRjaCB0aGUgb3JkZXIgb2Ygb2JqZWN0cyBpbiB0aGUgZmV0Y2hlZCBwYWNrZmlsZQorCitUaGUgaW5mcmFzdHJ1Y3R1cmUgc3VwcG9ydGluZyBmZXRjaCBhbHNvIGFsbG93cyBjb252ZXJ0aW5nIGFuIGV4aXN0aW5nCityZXBvc2l0b3J5LiBJbiBjb252ZXJ0ZWQgcmVwb3NpdG9yaWVzIGFuZCBuZXcgY2xvbmVzLCBlbmQgdXNlcnMgY2FuCitnYWluIHN1cHBvcnQgZm9yIHRoZSBuZXcgaGFzaCBmdW5jdGlvbiB3aXRob3V0IGFueSB2aXNpYmxlIGNoYW5nZSBpbgorYmVoYXZpb3IgKHNlZSAiZGFyayBsYXVuY2giIGluIHRoZSAiT2JqZWN0IG5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCitzZWN0aW9uKS4gSW4gcGFydGljdWxhciB0aGlzIGFsbG93cyB1c2VycyB0byB2ZXJpZnkgU0hBLTI1NiBzaWduYXR1cmVzCitvbiBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LCBhbmQgaXQgc2hvdWxkIGVuc3VyZSB0aGUgdHJhbnNpdGlvbiBjb2RlCitpcyBzdGFibGUgaW4gcHJvZHVjdGlvbiBpbiBwcmVwYXJhdGlvbiBmb3IgdXNpbmcgaXQgbW9yZSB3aWRlbHkuCisKK092ZXIgdGltZSBwcm9qZWN0cyB3b3VsZCBlbmNvdXJhZ2UgdGhlaXIgdXNlcnMgdG8gYWRvcHQgdGhlICJlYXJseQordHJhbnNpdGlvbiIgYW5kIHRoZW4gImxhdGUgdHJhbnNpdGlvbiIgbW9kZXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlCituZXcsIG1vcmUgZnV0dXJlcHJvb2YgU0hBLTI1NiBvYmplY3QgbmFtZXMuCisKK1doZW4gb2JqZWN0Rm9ybWF0IGFuZCBjb21wYXRPYmplY3RGb3JtYXQgYXJlIGJvdGggc2V0LCBjb21tYW5kcworZ2VuZXJhdGluZyBzaWduYXR1cmVzIHdvdWxkIGdlbmVyYXRlIGJvdGggU0hBLTEgYW5kIFNIQS0yNTYgc2lnbmF0dXJlcworYnkgZGVmYXVsdCB0byBzdXBwb3J0IGJvdGggbmV3IGFuZCBvbGQgdXNlcnMuCisKK0luIHByb2plY3RzIHVzaW5nIFNIQS0yNTYgaGVhdmlseSwgdXNlcnMgY291bGQgYmUgZW5jb3VyYWdlZCB0byBhZG9wdAordGhlICJwb3N0LXRyYW5zaXRpb24iIG1vZGUgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IG1ha2luZyBpbXBsaWNpdCB1c2UKK29mIFNIQS0xIG9iamVjdCBuYW1lcy4KKworT25jZSBhIGNyaXRpY2FsIG1hc3Mgb2YgdXNlcnMgaGF2ZSB1cGdyYWRlZCB0byBhIHZlcnNpb24gb2YgR2l0IHRoYXQKK2NhbiB2ZXJpZnkgU0hBLTI1NiBzaWduYXR1cmVzIGFuZCBoYXZlIGNvbnZlcnRlZCB0aGVpciBleGlzdGluZworcmVwb3NpdG9yaWVzIHRvIHN1cHBvcnQgdmVyaWZ5aW5nIHRoZW0sIHdlIGNhbiBhZGQgc3VwcG9ydCBmb3IgYQorc2V0dGluZyB0byBnZW5lcmF0ZSBvbmx5IFNIQS0yNTYgc2lnbmF0dXJlcy4gVGhpcyBpcyBleHBlY3RlZCB0byBiZSBhdAorbGVhc3QgYSB5ZWFyIGxhdGVyLgorCitUaGF0IGlzIGFsc28gYSBnb29kIG1vbWVudCB0byBhZHZlcnRpc2UgdGhlIGFiaWxpdHkgdG8gY29udmVydAorcmVwb3NpdG9yaWVzIHRvIHVzZSBTSEEtMjU2IG9ubHksIHN0cmlwcGluZyBvdXQgYWxsIFNIQS0xIHJlbGF0ZWQKK21ldGFkYXRhLiBUaGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5IGVsaW1pbmF0aW5nIHRyYW5zbGF0aW9uCitvdmVyaGVhZCBhbmQgc2VjdXJpdHkgYnkgYXZvaWRpbmcgdGhlIHBvc3NpYmlsaXR5IG9mIGFjY2lkZW50YWxseQorcmVseWluZyBvbiB0aGUgc2FmZXR5IG9mIFNIQS0xLgorCitVcGRhdGluZyBHaXQncyBwcm90b2NvbHMgdG8gYWxsb3cgYSBzZXJ2ZXIgdG8gc3BlY2lmeSB3aGljaCBoYXNoCitmdW5jdGlvbnMgaXQgc3VwcG9ydHMgaXMgYWxzbyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGlzIHRyYW5zaXRpb24uIEl0CitpcyBub3QgZGlzY3Vzc2VkIGluIGRldGFpbCBpbiB0aGlzIGRvY3VtZW50IGJ1dCB0aGlzIHRyYW5zaXRpb24gcGxhbgorYXNzdW1lcyBpdCBoYXBwZW5zLiA6KQorCitBbHRlcm5hdGl2ZXMgY29uc2lkZXJlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1VwZ3JhZGluZyBldmVyeW9uZSB3b3JraW5nIG9uIGEgcGFydGljdWxhciBwcm9qZWN0IG9uIGEgZmxhZyBkYXkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1Byb2plY3RzIGxpa2UgdGhlIExpbnV4IGtlcm5lbCBhcmUgbGFyZ2UgYW5kIGNvbXBsZXggZW5vdWdoIHRoYXQKK2ZsaXBwaW5nIHRoZSBzd2l0Y2ggZm9yIGFsbCBwcm9qZWN0cyBiYXNlZCBvbiB0aGUgcmVwb3NpdG9yeSBhdCBvbmNlCitpcyBpbmZlYXNpYmxlLgorCitOb3Qgb25seSB3b3VsZCBhbGwgZGV2ZWxvcGVycyBhbmQgc2VydmVyIG9wZXJhdG9ycyBzdXBwb3J0aW5nCitkZXZlbG9wZXJzIGhhdmUgdG8gc3dpdGNoIG9uIHRoZSBzYW1lIGZsYWcgZGF5LCBidXQgc3VwcG9ydGluZyB0b29saW5nCisoY29udGludW91cyBpbnRlZ3JhdGlvbiwgY29kZSByZXZpZXcsIGJ1ZyB0cmFja2VycywgZXRjKSB3b3VsZCBoYXZlIHRvCitiZSBhZGFwdGVkIGFzIHdlbGwuIFRoaXMgYWxzbyBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gZ2V0IGVhcmx5IGZlZWRiYWNrCitmcm9tIHNvbWUgcHJvamVjdCBwYXJ0aWNpcGFudHMgdGVzdGluZyBiZWZvcmUgaXQgaXMgdGltZSBmb3IgbWFzcworYWRvcHRpb24uCisKK1VzaW5nIGhhc2ggZnVuY3Rpb25zIGluIHBhcmFsbGVsCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorKGUuZy4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIyNzA4Ljg5MTMuODY0MDQ5LjQ1MjI1MkBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrLyApCitPYmplY3RzIG5ld2x5IGNyZWF0ZWQgd291bGQgYmUgYWRkcmVzc2VkIGJ5IHRoZSBuZXcgaGFzaCwgYnV0IGluc2lkZQorc3VjaCBhbiBvYmplY3QgKGUuZy4gY29tbWl0KSBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0byBhZGRyZXNzIG9iamVjdHMKK3VzaW5nIHRoZSBvbGQgaGFzaCBmdW5jdGlvbi4KKyogWW91IGNhbm5vdCB0cnVzdCBpdHMgaGlzdG9yeSAobmVlZGVkIGZvciBiaXNlY3RhYmlsaXR5KSBpbiB0aGUKKyAgZnV0dXJlIHdpdGhvdXQgZnVydGhlciB3b3JrCisqIE1haW50ZW5hbmNlIGJ1cmRlbiBhcyB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXNoIGZ1bmN0aW9ucyBncm93cworICAodGhleSB3aWxsIG5ldmVyIGdvIGF3YXksIHNvIHRoZXkgYWNjdW11bGF0ZSkuIEluIHRoaXMgcHJvcG9zYWwsIGJ5CisgIGNvbXBhcmlzb24sIGNvbnZlcnRlZCBvYmplY3RzIGxvc2UgYWxsIHJlZmVyZW5jZXMgdG8gU0hBLTEuCisKK1NpZ25lZCBvYmplY3RzIHdpdGggbXVsdGlwbGUgaGFzaGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSW5zdGVhZCBvZiBpbnRyb2R1Y2luZyB0aGUgZ3Bnc2lnLXNoYTI1NiBmaWVsZCBpbiBjb21taXQgYW5kIHRhZyBvYmplY3RzCitmb3Igc2hhMjU2LWNvbnRlbnQgYmFzZWQgc2lnbmF0dXJlcywgYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoaXMgZGVzaWduCithZGRlZCAiaGFzaCBzaGEyNTYgPHNoYTI1Ni1uYW1lPiIgZmllbGRzIHRvIHN0cmVuZ3RoZW4gdGhlIGV4aXN0aW5nCitzaGExLWNvbnRlbnQgYmFzZWQgc2lnbmF0dXJlcy4KKworSW4gb3RoZXIgd29yZHMsIGEgc2luZ2xlIHNpZ25hdHVyZSB3YXMgdXNlZCB0byBhdHRlc3QgdG8gdGhlIG9iamVjdAorY29udGVudCB1c2luZyBib3RoIGhhc2ggZnVuY3Rpb25zLiBUaGlzIGhhZCBzb21lIGFkdmFudGFnZXM6CisqIFVzaW5nIG9uZSBzaWduYXR1cmUgaW5zdGVhZCBvZiB0d28gc3BlZWRzIHVwIHRoZSBzaWduaW5nIHByb2Nlc3MuCisqIEhhdmluZyBvbmUgc2lnbmVkIHBheWxvYWQgd2l0aCBib3RoIGhhc2hlcyBhbGxvd3MgdGhlIHNpZ25lciB0bworICBhdHRlc3QgdG8gdGhlIHNoYTEtbmFtZSBhbmQgc2hhMjU2LW5hbWUgcmVmZXJyaW5nIHRvIHRoZSBzYW1lIG9iamVjdC4KKyogQWxsIHVzZXJzIGNvbnN1bWUgdGhlIHNhbWUgc2lnbmF0dXJlLiBCcm9rZW4gc2lnbmF0dXJlcyBhcmUgbGlrZWx5CisgIHRvIGJlIGRldGVjdGVkIHF1aWNrbHkgdXNpbmcgY3VycmVudCB2ZXJzaW9ucyBvZiBnaXQuCisKK0hvd2V2ZXIsIGl0IGFsc28gY2FtZSB3aXRoIGRpc2FkdmFudGFnZXM6CisqIFZlcmlmeWluZyBhIHNpZ25lZCBvYmplY3QgcmVxdWlyZXMgYWNjZXNzIHRvIHRoZSBzaGExLW5hbWVzIG9mIGFsbAorICBvYmplY3RzIGl0IHJlZmVyZW5jZXMsIGV2ZW4gYWZ0ZXIgdGhlIHRyYW5zaXRpb24gaXMgY29tcGxldGUgYW5kCisgIHRyYW5zbGF0aW9uIHRhYmxlIGlzIG5vIGxvbmdlciBuZWVkZWQgZm9yIGFueXRoaW5nIGVsc2UuIFRvIHN1cHBvcnQKKyAgdGhpcywgdGhlIGRlc2lnbiBhZGRlZCBmaWVsZHMgc3VjaCBhcyAiaGFzaCBzaGExIHRyZWUgPHNoYTEtbmFtZT4iCisgIGFuZCAiaGFzaCBzaGExIHBhcmVudCA8c2hhMS1uYW1lPiIgdG8gdGhlIHNoYTI1Ni1jb250ZW50IG9mIGEgc2lnbmVkCisgIGNvbW1pdCwgY29tcGxpY2F0aW5nIHRoZSBjb252ZXJzaW9uIHByb2Nlc3MuCisqIEFsbG93aW5nIHNpZ25lZCBvYmplY3RzIHdpdGhvdXQgYSBzaGExIChmb3IgYWZ0ZXIgdGhlIHRyYW5zaXRpb24gaXMKKyAgY29tcGxldGUpIGNvbXBsaWNhdGVkIHRoZSBkZXNpZ24gZnVydGhlciwgcmVxdWlyaW5nIGEgIm5vaGFzaCBzaGExIgorICBmaWVsZCB0byBzdXBwcmVzcyBpbmNsdWRpbmcgImhhc2ggc2hhMSIgZmllbGRzIGluIHRoZSBzaGEyNTYtY29udGVudAorICBhbmQgc2lnbmVkIHBheWxvYWQuCisKK0xhemlseSBwb3B1bGF0ZWQgdHJhbnNsYXRpb24gdGFibGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1NvbWUgb2YgdGhlIHdvcmsgb2YgYnVpbGRpbmcgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIGNvdWxkIGJlIGRlZmVycmVkIHRvCitwdXNoIHRpbWUsIGJ1dCB0aGF0IHdvdWxkIHNpZ25pZmljYW50bHkgY29tcGxpY2F0ZSBhbmQgc2xvdyBkb3duIHB1c2hlcy4KK0NhbGN1bGF0aW5nIHRoZSBzaGExLW5hbWUgYXQgb2JqZWN0IGNyZWF0aW9uIHRpbWUgYXQgdGhlIHNhbWUgdGltZSBpdCBpcworYmVpbmcgc3RyZWFtZWQgdG8gZGlzayBhbmQgaGF2aW5nIGl0cyBzaGEyNTYtbmFtZSBjYWxjdWxhdGVkIHNob3VsZCBiZQorYW4gYWNjZXB0YWJsZSBjb3N0LgorCitEb2N1bWVudCBIaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tCisKKzIwMTctMDMtMDMKK2Jtd2lsbEBnb29nbGUuY29tLCBqb25hdGhhbnRhbm15QGdvb2dsZS5jb20sIGpybmllZGVyQGdtYWlsLmNvbSwKK3NiZWxsZXJAZ29vZ2xlLmNvbQorCitJbml0aWFsIHZlcnNpb24gc2VudCB0bworaHR0cDovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzAzMDQwMTEyNTEuR0EyNjc4OUBhaWVkZS5tdHYuY29ycC5nb29nbGUuY29tCisKKzIwMTctMDMtMDMganJuaWVkZXJAZ21haWwuY29tCitJbmNvcnBvcmF0ZWQgc3VnZ2VzdGlvbnMgZnJvbSBqb25hdGhhbnRhbm15IGFuZCBzYmVsbGVyOgorKiBkZXNjcmliZSBwdXJwb3NlIG9mIHNpZ25lZCBvYmplY3RzIHdpdGggZWFjaCBoYXNoIHR5cGUKKyogcmVkZWZpbmUgc2lnbmVkIG9iamVjdCB2ZXJpZmljYXRpb24gdXNpbmcgb2JqZWN0IGNvbnRlbnQgdW5kZXIgdGhlCisgIGZpcnN0IGhhc2ggZnVuY3Rpb24KKworMjAxNy0wMy0wNiBqcm5pZWRlckBnbWFpbC5jb20KKyogVXNlIFNIQTMtMjU2IGluc3RlYWQgb2YgU0hBMiAodGhhbmtzLCBMaW51cyBhbmQgYnJpYW4gbS4gY2FybHNvbikuWzFdWzJdCisqIE1ha2Ugc2hhMy1iYXNlZCBzaWduYXR1cmVzIGEgc2VwYXJhdGUgZmllbGQsIGF2b2lkaW5nIHRoZSBuZWVkIGZvcgorICAiaGFzaCIgYW5kICJub2hhc2giIGZpZWxkcyAodGhhbmtzIHRvIHBlZmZbM10pLgorKiBBZGQgYSBzb3J0aW5nIHBoYXNlIHRvIGZldGNoICh0aGFua3MgdG8gSnVuaW8gZm9yIG5vdGljaW5nIHRoZSBuZWVkCisgIGZvciB0aGlzKS4KKyogT21pdCBibG9icyBmcm9tIHRoZSB0b3BvbG9naWNhbCBzb3J0IGR1cmluZyBmZXRjaCAodGhhbmtzIHRvIHBlZmYpLgorKiBEaXNjdXNzIGFsdGVybmF0ZXMsIGdpdCBub3RlcywgYW5kIGdpdCBzZXJ2ZXJzIGluIHRoZSBjYXZlYXRzCisgIHNlY3Rpb24gKHRoYW5rcyB0byBKdW5pbyBIYW1hbm8sIGJyaWFuIG0uIGNhcmxzb25bNF0sIGFuZCBTaGF3bgorICBQZWFyY2UpLgorKiBDbGFyaWZ5IGxhbmd1YWdlIHRocm91Z2hvdXQgKHRoYW5rcyB0byB2YXJpb3VzIGNvbW1lbnRlcnMsCisgIGVzcGVjaWFsbHkgSnVuaW8pLgorCisyMDE3LTA5LTI3IGpybmllZGVyQGdtYWlsLmNvbSwgc2JlbGxlckBnb29nbGUuY29tCisqIHVzZSBwbGFjZWhvbGRlciBOZXdIYXNoIGluc3RlYWQgb2YgU0hBMy0yNTYKKyogZGVzY3JpYmUgY3JpdGVyaWEgZm9yIHBpY2tpbmcgYSBoYXNoIGZ1bmN0aW9uLgorKiBpbmNsdWRlIGEgdHJhbnNpdGlvbiBwbGFuICh0aGFua3MgZXNwZWNpYWxseSB0byBCcmFuZG9uIFdpbGxpYW1zCisgIGZvciBmbGVzaGluZyB0aGVzZSBpZGVhcyBvdXQpCisqIGRlZmluZSB0aGUgdHJhbnNsYXRpb24gdGFibGUgKHRoYW5rcywgU2hhd24gUGVhcmNlWzVdLCBKb25hdGhhbgorICBUYW4sIGFuZCBNYXNheWEgU3V6dWtpKQorKiBhdm9pZCBsb29zZSBvYmplY3Qgb3ZlcmhlYWQgYnkgcGFja2luZyBtb3JlIGFnZ3Jlc3NpdmVseSBpbgorICAiZ2l0IGdjIC0tYXV0byIKKworTGF0ZXIgaGlzdG9yeToKKworIFNlZSB0aGUgaGlzdG9yeSBvZiB0aGlzIGZpbGUgaW4gZ2l0LmdpdCBmb3IgdGhlIGhpc3Rvcnkgb2Ygc3Vic2VxdWVudAorIGVkaXRzLiBUaGlzIGRvY3VtZW50IGhpc3RvcnkgaXMgbm8gbG9uZ2VyIGJlaW5nIG1haW50YWluZWQgYXMgaXQKKyB3b3VsZCBub3cgYmUgc3VwZXJmbHVvdXMgdG8gdGhlIGNvbW1pdCBsb2cKKworWzFdIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L0NBKzU1YUZ6SnRlamlDalYwZTQzKzlvUjNRdUpLMlBpRmlMUWVteXRvTHB5SldlNlA5d0BtYWlsLmdtYWlsLmNvbS8KK1syXSBodHRwOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9DQSs1NWFGeitna0FzRFoyNHptZVBRdUVzMVhQUzlCUF9zOE83UTR3UTdMVjdYNS1vREFAbWFpbC5nbWFpbC5jb20vCitbM10gaHR0cDovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzAzMDYwODQzNTMubnJuczQ1NWR2a2RzZmdvNUBzaWdpbGwuaW50cmEucGVmZi5uZXQvCitbNF0gaHR0cDovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzAzMDQyMjQ5MzYucnFxdGtkdmZqZ3llenNodEBnZW5yZS5jcnVzdHl0b290aHBhc3RlLm5ldAorWzVdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9DQUpvPWhKdG9YOT1BeUxISHBVSlM3ZnVlVjljaVpfTU5wbkVQSFV6OFdodWk2ZzlGMEFAbWFpbC5nbWFpbC5jb20vCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9odHRwLXByb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2h0dHAtcHJvdG9jb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNWI2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9odHRwLXByb3RvY29sLnR4dApAQCAtMCwwICsxLDUxOCBAQAorSFRUUCB0cmFuc2ZlciBwcm90b2NvbHMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK0dpdCBzdXBwb3J0cyB0d28gSFRUUCBiYXNlZCB0cmFuc2ZlciBwcm90b2NvbHMuICBBICJkdW1iIiBwcm90b2NvbAord2hpY2ggcmVxdWlyZXMgb25seSBhIHN0YW5kYXJkIEhUVFAgc2VydmVyIG9uIHRoZSBzZXJ2ZXIgZW5kIG9mIHRoZQorY29ubmVjdGlvbiwgYW5kIGEgInNtYXJ0IiBwcm90b2NvbCB3aGljaCByZXF1aXJlcyBhIEdpdCBhd2FyZSBDR0kKKyhvciBzZXJ2ZXIgbW9kdWxlKS4gIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGJvdGggcHJvdG9jb2xzLgorCitBcyBhIGRlc2lnbiBmZWF0dXJlIHNtYXJ0IGNsaWVudHMgY2FuIGF1dG9tYXRpY2FsbHkgdXBncmFkZSAiZHVtYiIKK3Byb3RvY29sIFVSTHMgdG8gc21hcnQgVVJMcy4gIFRoaXMgcGVybWl0cyBhbGwgdXNlcnMgdG8gaGF2ZSB0aGUKK3NhbWUgcHVibGlzaGVkIFVSTCwgYW5kIHRoZSBwZWVycyBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbW9zdAorZWZmaWNpZW50IHRyYW5zcG9ydCBhdmFpbGFibGUgdG8gdGhlbS4KKworCitVUkwgRm9ybWF0CistLS0tLS0tLS0tCisKK1VSTHMgZm9yIEdpdCByZXBvc2l0b3JpZXMgYWNjZXNzZWQgYnkgSFRUUCB1c2UgdGhlIHN0YW5kYXJkIEhUVFAKK1VSTCBzeW50YXggZG9jdW1lbnRlZCBieSBSRkMgMTczOCwgc28gdGhleSBhcmUgb2YgdGhlIGZvcm06CisKKyAgaHR0cDovLzxob3N0Pjo8cG9ydD4vPHBhdGg+PzxzZWFyY2hwYXJ0PgorCitXaXRoaW4gdGhpcyBkb2N1bWVudGF0aW9uIHRoZSBwbGFjZWhvbGRlciBgJEdJVF9VUkxgIHdpbGwgc3RhbmQgZm9yCit0aGUgaHR0cDovLyByZXBvc2l0b3J5IFVSTCBlbnRlcmVkIGJ5IHRoZSBlbmQtdXNlci4KKworU2VydmVycyBTSE9VTEQgaGFuZGxlIGFsbCByZXF1ZXN0cyB0byBsb2NhdGlvbnMgbWF0Y2hpbmcgYCRHSVRfVVJMYCwgYXMKK2JvdGggdGhlICJzbWFydCIgYW5kICJkdW1iIiBIVFRQIHByb3RvY29scyB1c2VkIGJ5IEdpdCBvcGVyYXRlCitieSBhcHBlbmRpbmcgYWRkaXRpb25hbCBwYXRoIGNvbXBvbmVudHMgb250byB0aGUgZW5kIG9mIHRoZSB1c2VyCitzdXBwbGllZCBgJEdJVF9VUkxgIHN0cmluZy4KKworQW4gZXhhbXBsZSBvZiBhIGR1bWIgY2xpZW50IHJlcXVlc3RpbmcgZm9yIGEgbG9vc2Ugb2JqZWN0OgorCisgICRHSVRfVVJMOiAgICAgaHR0cDovL2V4YW1wbGUuY29tOjgwODAvZ2l0L3JlcG8uZ2l0CisgIFVSTCByZXF1ZXN0OiAgaHR0cDovL2V4YW1wbGUuY29tOjgwODAvZ2l0L3JlcG8uZ2l0L29iamVjdHMvZDAvNDlmNmMyN2EyMjQ0ZTEyMDQxOTU1ZTI2MmE0MDRjN2ZhYmEzNTUKKworQW4gZXhhbXBsZSBvZiBhIHNtYXJ0IHJlcXVlc3QgdG8gYSBjYXRjaC1hbGwgZ2F0ZXdheToKKworICAkR0lUX1VSTDogICAgIGh0dHA6Ly9leGFtcGxlLmNvbS9kYWVtb24uY2dpP3N2Yz1naXQmcT0KKyAgVVJMIHJlcXVlc3Q6ICBodHRwOi8vZXhhbXBsZS5jb20vZGFlbW9uLmNnaT9zdmM9Z2l0JnE9L2luZm8vcmVmcyZzZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sKKworQW4gZXhhbXBsZSBvZiBhIHJlcXVlc3QgdG8gYSBzdWJtb2R1bGU6CisKKyAgJEdJVF9VUkw6ICAgICBodHRwOi8vZXhhbXBsZS5jb20vZ2l0L3JlcG8uZ2l0L3BhdGgvc3VibW9kdWxlLmdpdAorICBVUkwgcmVxdWVzdDogIGh0dHA6Ly9leGFtcGxlLmNvbS9naXQvcmVwby5naXQvcGF0aC9zdWJtb2R1bGUuZ2l0L2luZm8vcmVmcworCitDbGllbnRzIE1VU1Qgc3RyaXAgYSB0cmFpbGluZyBgL2AsIGlmIHByZXNlbnQsIGZyb20gdGhlIHVzZXIgc3VwcGxpZWQKK2AkR0lUX1VSTGAgc3RyaW5nIHRvIHByZXZlbnQgZW1wdHkgcGF0aCB0b2tlbnMgKGAvL2ApIGZyb20gYXBwZWFyaW5nCitpbiBhbnkgVVJMIHNlbnQgdG8gYSBzZXJ2ZXIuICBDb21wYXRpYmxlIGNsaWVudHMgTVVTVCBleHBhbmQKK2AkR0lUX1VSTC9pbmZvL3JlZnNgIGFzIGBmb28vaW5mby9yZWZzYCBhbmQgbm90IGBmb28vL2luZm8vcmVmc2AuCisKKworQXV0aGVudGljYXRpb24KKy0tLS0tLS0tLS0tLS0tCisKK1N0YW5kYXJkIEhUVFAgYXV0aGVudGljYXRpb24gaXMgdXNlZCBpZiBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZAordG8gYWNjZXNzIGEgcmVwb3NpdG9yeSwgYW5kIE1BWSBiZSBjb25maWd1cmVkIGFuZCBlbmZvcmNlZCBieSB0aGUKK0hUVFAgc2VydmVyIHNvZnR3YXJlLgorCitCZWNhdXNlIEdpdCByZXBvc2l0b3JpZXMgYXJlIGFjY2Vzc2VkIGJ5IHN0YW5kYXJkIHBhdGggY29tcG9uZW50cworc2VydmVyIGFkbWluaXN0cmF0b3JzIE1BWSB1c2UgZGlyZWN0b3J5IGJhc2VkIHBlcm1pc3Npb25zIHdpdGhpbgordGhlaXIgSFRUUCBzZXJ2ZXIgdG8gY29udHJvbCByZXBvc2l0b3J5IGFjY2Vzcy4KKworQ2xpZW50cyBTSE9VTEQgc3VwcG9ydCBCYXNpYyBhdXRoZW50aWNhdGlvbiBhcyBkZXNjcmliZWQgYnkgUkZDIDI2MTcuCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IEJhc2ljIGF1dGhlbnRpY2F0aW9uIGJ5IHJlbHlpbmcgdXBvbiB0aGUKK0hUVFAgc2VydmVyIHBsYWNlZCBpbiBmcm9udCBvZiB0aGUgR2l0IHNlcnZlciBzb2Z0d2FyZS4KKworU2VydmVycyBTSE9VTEQgTk9UIHJlcXVpcmUgSFRUUCBjb29raWVzIGZvciB0aGUgcHVycG9zZXMgb2YKK2F1dGhlbnRpY2F0aW9uIG9yIGFjY2VzcyBjb250cm9sLgorCitDbGllbnRzIGFuZCBzZXJ2ZXJzIE1BWSBzdXBwb3J0IG90aGVyIGNvbW1vbiBmb3JtcyBvZiBIVFRQIGJhc2VkCithdXRoZW50aWNhdGlvbiwgc3VjaCBhcyBEaWdlc3QgYXV0aGVudGljYXRpb24uCisKKworU1NMCistLS0KKworQ2xpZW50cyBhbmQgc2VydmVycyBTSE9VTEQgc3VwcG9ydCBTU0wsIHBhcnRpY3VsYXJseSB0byBwcm90ZWN0CitwYXNzd29yZHMgd2hlbiByZWx5aW5nIG9uIEJhc2ljIEhUVFAgYXV0aGVudGljYXRpb24uCisKKworU2Vzc2lvbiBTdGF0ZQorLS0tLS0tLS0tLS0tLQorCitUaGUgR2l0IG92ZXIgSFRUUCBwcm90b2NvbCAobXVjaCBsaWtlIEhUVFAgaXRzZWxmKSBpcyBzdGF0ZWxlc3MKK2Zyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBIVFRQIHNlcnZlciBzaWRlLiAgQWxsIHN0YXRlIE1VU1QgYmUKK3JldGFpbmVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBjbGllbnQgcHJvY2Vzcy4gIFRoaXMgcGVybWl0cyBzaW1wbGUKK3JvdW5kLXJvYmluIGxvYWQtYmFsYW5jaW5nIG9uIHRoZSBzZXJ2ZXIgc2lkZSwgd2l0aG91dCBuZWVkaW5nIHRvCit3b3JyeSBhYm91dCBzdGF0ZSBtYW5hZ2VtZW50LgorCitDbGllbnRzIE1VU1QgTk9UIHJlcXVpcmUgc3RhdGUgbWFuYWdlbWVudCBvbiB0aGUgc2VydmVyIHNpZGUgaW4KK29yZGVyIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KKworU2VydmVycyBNVVNUIE5PVCByZXF1aXJlIEhUVFAgY29va2llcyBpbiBvcmRlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCitDbGllbnRzIE1BWSBzdG9yZSBhbmQgZm9yd2FyZCBIVFRQIGNvb2tpZXMgZHVyaW5nIHJlcXVlc3QgcHJvY2Vzc2luZworYXMgZGVzY3JpYmVkIGJ5IFJGQyAyNjE2IChIVFRQLzEuMSkuICBTZXJ2ZXJzIFNIT1VMRCBpZ25vcmUgYW55Citjb29raWVzIHNlbnQgYnkgYSBjbGllbnQuCisKKworR2VuZXJhbCBSZXF1ZXN0IFByb2Nlc3NpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4Y2VwdCB3aGVyZSBub3RlZCwgYWxsIHN0YW5kYXJkIEhUVFAgYmVoYXZpb3IgU0hPVUxEIGJlIGFzc3VtZWQKK2J5IGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIuICBUaGlzIGluY2x1ZGVzIChidXQgaXMgbm90IG5lY2Vzc2FyaWx5CitsaW1pdGVkIHRvKToKKworSWYgdGhlcmUgaXMgbm8gcmVwb3NpdG9yeSBhdCBgJEdJVF9VUkxgLCBvciB0aGUgcmVzb3VyY2UgcG9pbnRlZCB0byBieSBhCitsb2NhdGlvbiBtYXRjaGluZyBgJEdJVF9VUkxgIGRvZXMgbm90IGV4aXN0LCB0aGUgc2VydmVyIE1VU1QgTk9UIHJlc3BvbmQKK3dpdGggYDIwMCBPS2AgcmVzcG9uc2UuICBBIHNlcnZlciBTSE9VTEQgcmVzcG9uZCB3aXRoCitgNDA0IE5vdCBGb3VuZGAsIGA0MTAgR29uZWAsIG9yIGFueSBvdGhlciBzdWl0YWJsZSBIVFRQIHN0YXR1cyBjb2RlCit3aGljaCBkb2VzIG5vdCBpbXBseSB0aGUgcmVzb3VyY2UgZXhpc3RzIGFzIHJlcXVlc3RlZC4KKworSWYgdGhlcmUgaXMgYSByZXBvc2l0b3J5IGF0IGAkR0lUX1VSTGAsIGJ1dCBhY2Nlc3MgaXMgbm90IGN1cnJlbnRseQorcGVybWl0dGVkLCB0aGUgc2VydmVyIE1VU1QgcmVzcG9uZCB3aXRoIHRoZSBgNDAzIEZvcmJpZGRlbmAgSFRUUAorc3RhdHVzIGNvZGUuCisKK1NlcnZlcnMgU0hPVUxEIHN1cHBvcnQgYm90aCBIVFRQIDEuMCBhbmQgSFRUUCAxLjEuCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGNodW5rZWQgZW5jb2RpbmcgZm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UKK2JvZGllcy4KKworQ2xpZW50cyBTSE9VTEQgc3VwcG9ydCBib3RoIEhUVFAgMS4wIGFuZCBIVFRQIDEuMS4KK0NsaWVudHMgU0hPVUxEIHN1cHBvcnQgY2h1bmtlZCBlbmNvZGluZyBmb3IgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZQorYm9kaWVzLgorCitTZXJ2ZXJzIE1BWSByZXR1cm4gRVRhZyBhbmQvb3IgTGFzdC1Nb2RpZmllZCBoZWFkZXJzLgorCitDbGllbnRzIE1BWSByZXZhbGlkYXRlIGNhY2hlZCBlbnRpdGllcyBieSBpbmNsdWRpbmcgSWYtTW9kaWZpZWQtU2luY2UKK2FuZC9vciBJZi1Ob25lLU1hdGNoIHJlcXVlc3QgaGVhZGVycy4KKworU2VydmVycyBNQVkgcmV0dXJuIGAzMDQgTm90IE1vZGlmaWVkYCBpZiB0aGUgcmVsZXZhbnQgaGVhZGVycyBhcHBlYXIKK2luIHRoZSByZXF1ZXN0IGFuZCB0aGUgZW50aXR5IGhhcyBub3QgY2hhbmdlZC4gIENsaWVudHMgTVVTVCB0cmVhdAorYDMwNCBOb3QgTW9kaWZpZWRgIGlkZW50aWNhbCB0byBgMjAwIE9LYCBieSByZXVzaW5nIHRoZSBjYWNoZWQgZW50aXR5LgorCitDbGllbnRzIE1BWSByZXVzZSBhIGNhY2hlZCBlbnRpdHkgd2l0aG91dCByZXZhbGlkYXRpb24gaWYgdGhlCitDYWNoZS1Db250cm9sIGFuZC9vciBFeHBpcmVzIGhlYWRlciBwZXJtaXRzIGNhY2hpbmcuICBDbGllbnRzIGFuZAorc2VydmVycyBNVVNUIGZvbGxvdyBSRkMgMjYxNiBmb3IgY2FjaGUgY29udHJvbHMuCisKKworRGlzY292ZXJpbmcgUmVmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgSFRUUCBjbGllbnRzIE1VU1QgYmVnaW4gZWl0aGVyIGEgZmV0Y2ggb3IgYSBwdXNoIGV4Y2hhbmdlIGJ5CitkaXNjb3ZlcmluZyB0aGUgcmVmZXJlbmNlcyBhdmFpbGFibGUgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCitEdW1iIENsaWVudHMKK35+fn5+fn5+fn5+fgorCitIVFRQIGNsaWVudHMgdGhhdCBvbmx5IHN1cHBvcnQgdGhlICJkdW1iIiBwcm90b2NvbCBNVVNUIGRpc2NvdmVyCityZWZlcmVuY2VzIGJ5IG1ha2luZyBhIHJlcXVlc3QgZm9yIHRoZSBzcGVjaWFsIGluZm8vcmVmcyBmaWxlIG9mCit0aGUgcmVwb3NpdG9yeS4KKworRHVtYiBIVFRQIGNsaWVudHMgTVVTVCBtYWtlIGEgYEdFVGAgcmVxdWVzdCB0byBgJEdJVF9VUkwvaW5mby9yZWZzYCwKK3dpdGhvdXQgYW55IHNlYXJjaC9xdWVyeSBwYXJhbWV0ZXJzLgorCisgICBDOiBHRVQgJEdJVF9VUkwvaW5mby9yZWZzIEhUVFAvMS4wCisKKyAgIFM6IDIwMCBPSworICAgUzoKKyAgIFM6IDk1ZGNmYTM2MzMwMDRkYTAwNDlkM2QwZmEwM2Y4MDU4OWNiY2FmMzEJcmVmcy9oZWFkcy9tYWludAorICAgUzogZDA0OWY2YzI3YTIyNDRlMTIwNDE5NTVlMjYyYTQwNGM3ZmFiYTM1NQlyZWZzL2hlYWRzL21hc3RlcgorICAgUzogMmNiNThiNzk0ODhhOThkMjcyMWNlYTY0NDg3NWE4ZGQwMDI2YjExNQlyZWZzL3RhZ3MvdjEuMAorICAgUzogYTNjMmUyNDAyYjk5MTYzZDFkNTk3NTZlNWYyMDdhZTIxY2NjYmE0YwlyZWZzL3RhZ3MvdjEuMF57fQorCitUaGUgQ29udGVudC1UeXBlIG9mIHRoZSByZXR1cm5lZCBpbmZvL3JlZnMgZW50aXR5IFNIT1VMRCBiZQorYHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThgLCBidXQgTUFZIGJlIGFueSBjb250ZW50IHR5cGUuCitDbGllbnRzIE1VU1QgTk9UIGF0dGVtcHQgdG8gdmFsaWRhdGUgdGhlIHJldHVybmVkIENvbnRlbnQtVHlwZS4KK0R1bWIgc2VydmVycyBNVVNUIE5PVCByZXR1cm4gYSByZXR1cm4gdHlwZSBzdGFydGluZyB3aXRoCitgYXBwbGljYXRpb24veC1naXQtYC4KKworQ2FjaGUtQ29udHJvbCBoZWFkZXJzIE1BWSBiZSByZXR1cm5lZCB0byBkaXNhYmxlIGNhY2hpbmcgb2YgdGhlCityZXR1cm5lZCBlbnRpdHkuCisKK1doZW4gZXhhbWluaW5nIHRoZSByZXNwb25zZSBjbGllbnRzIFNIT1VMRCBvbmx5IGV4YW1pbmUgdGhlIEhUVFAKK3N0YXR1cyBjb2RlLiAgVmFsaWQgcmVzcG9uc2VzIGFyZSBgMjAwIE9LYCwgb3IgYDMwNCBOb3QgTW9kaWZpZWRgLgorCitUaGUgcmV0dXJuZWQgY29udGVudCBpcyBhIFVOSVggZm9ybWF0dGVkIHRleHQgZmlsZSBkZXNjcmliaW5nCitlYWNoIHJlZiBhbmQgaXRzIGtub3duIHZhbHVlLiAgVGhlIGZpbGUgU0hPVUxEIGJlIHNvcnRlZCBieSBuYW1lCithY2NvcmRpbmcgdG8gdGhlIEMgbG9jYWxlIG9yZGVyaW5nLiAgVGhlIGZpbGUgU0hPVUxEIE5PVCBpbmNsdWRlCit0aGUgZGVmYXVsdCByZWYgbmFtZWQgYEhFQURgLgorCisgIGluZm9fcmVmcyAgID0gICooIHJlZl9yZWNvcmQgKQorICByZWZfcmVjb3JkICA9ICBhbnlfcmVmIC8gcGVlbGVkX3JlZgorCisgIGFueV9yZWYgICAgID0gIG9iai1pZCBIVEFCIHJlZm5hbWUgTEYKKyAgcGVlbGVkX3JlZiAgPSAgb2JqLWlkIEhUQUIgcmVmbmFtZSBMRgorCQkgb2JqLWlkIEhUQUIgcmVmbmFtZSAiXnt9IiBMRgorCitTbWFydCBDbGllbnRzCit+fn5+fn5+fn5+fn5+CisKK0hUVFAgY2xpZW50cyB0aGF0IHN1cHBvcnQgdGhlICJzbWFydCIgcHJvdG9jb2wgKG9yIGJvdGggdGhlCisic21hcnQiIGFuZCAiZHVtYiIgcHJvdG9jb2xzKSBNVVNUIGRpc2NvdmVyIHJlZmVyZW5jZXMgYnkgbWFraW5nCithIHBhcmFtZXRlcml6ZWQgcmVxdWVzdCBmb3IgdGhlIGluZm8vcmVmcyBmaWxlIG9mIHRoZSByZXBvc2l0b3J5LgorCitUaGUgcmVxdWVzdCBNVVNUIGNvbnRhaW4gZXhhY3RseSBvbmUgcXVlcnkgcGFyYW1ldGVyLAorYHNlcnZpY2U9JHNlcnZpY2VuYW1lYCwgd2hlcmUgYCRzZXJ2aWNlbmFtZWAgTVVTVCBiZSB0aGUgc2VydmljZQorbmFtZSB0aGUgY2xpZW50IHdpc2hlcyB0byBjb250YWN0IHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uCitUaGUgcmVxdWVzdCBNVVNUIE5PVCBjb250YWluIGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy4KKworICAgQzogR0VUICRHSVRfVVJML2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMAorCitkdW1iIHNlcnZlciByZXBseToKKworICAgUzogMjAwIE9LCisgICBTOgorICAgUzogOTVkY2ZhMzYzMzAwNGRhMDA0OWQzZDBmYTAzZjgwNTg5Y2JjYWYzMQlyZWZzL2hlYWRzL21haW50CisgICBTOiBkMDQ5ZjZjMjdhMjI0NGUxMjA0MTk1NWUyNjJhNDA0YzdmYWJhMzU1CXJlZnMvaGVhZHMvbWFzdGVyCisgICBTOiAyY2I1OGI3OTQ4OGE5OGQyNzIxY2VhNjQ0ODc1YThkZDAwMjZiMTE1CXJlZnMvdGFncy92MS4wCisgICBTOiBhM2MyZTI0MDJiOTkxNjNkMWQ1OTc1NmU1ZjIwN2FlMjFjY2NiYTRjCXJlZnMvdGFncy92MS4wXnt9CisKK3NtYXJ0IHNlcnZlciByZXBseToKKworICAgUzogMjAwIE9LCisgICBTOiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLWFkdmVydGlzZW1lbnQKKyAgIFM6IENhY2hlLUNvbnRyb2w6IG5vLWNhY2hlCisgICBTOgorICAgUzogMDAxZSMgc2VydmljZT1naXQtdXBsb2FkLXBhY2tcbgorICAgUzogMDAwMAorICAgUzogMDA0ODk1ZGNmYTM2MzMwMDRkYTAwNDlkM2QwZmEwM2Y4MDU4OWNiY2FmMzEgcmVmcy9oZWFkcy9tYWludFwwbXVsdGlfYWNrXG4KKyAgIFM6IDAwNDJkMDQ5ZjZjMjdhMjI0NGUxMjA0MTk1NWUyNjJhNDA0YzdmYWJhMzU1IHJlZnMvaGVhZHMvbWFzdGVyXG4KKyAgIFM6IDAwM2MyY2I1OGI3OTQ4OGE5OGQyNzIxY2VhNjQ0ODc1YThkZDAwMjZiMTE1IHJlZnMvdGFncy92MS4wXG4KKyAgIFM6IDAwM2ZhM2MyZTI0MDJiOTkxNjNkMWQ1OTc1NmU1ZjIwN2FlMjFjY2NiYTRjIHJlZnMvdGFncy92MS4wXnt9XG4KKyAgIFM6IDAwMDAKKworVGhlIGNsaWVudCBtYXkgc2VuZCBFeHRyYSBQYXJhbWV0ZXJzIChzZWUKK0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0KSBhcyBhIGNvbG9uLXNlcGFyYXRlZCBzdHJpbmcKK2luIHRoZSBHaXQtUHJvdG9jb2wgSFRUUCBoZWFkZXIuCisKK0R1bWIgU2VydmVyIFJlc3BvbnNlCiteXl5eXl5eXl5eXl5eXl5eXl5eXgorRHVtYiBzZXJ2ZXJzIE1VU1QgcmVzcG9uZCB3aXRoIHRoZSBkdW1iIHNlcnZlciByZXBseSBmb3JtYXQuCisKK1NlZSB0aGUgcHJpb3Igc2VjdGlvbiB1bmRlciBkdW1iIGNsaWVudHMgZm9yIGEgbW9yZSBkZXRhaWxlZAorZGVzY3JpcHRpb24gb2YgdGhlIGR1bWIgc2VydmVyIHJlc3BvbnNlLgorCitTbWFydCBTZXJ2ZXIgUmVzcG9uc2UKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorSWYgdGhlIHNlcnZlciBkb2VzIG5vdCByZWNvZ25pemUgdGhlIHJlcXVlc3RlZCBzZXJ2aWNlIG5hbWUsIG9yIHRoZQorcmVxdWVzdGVkIHNlcnZpY2UgbmFtZSBoYXMgYmVlbiBkaXNhYmxlZCBieSB0aGUgc2VydmVyIGFkbWluaXN0cmF0b3IsCit0aGUgc2VydmVyIE1VU1QgcmVzcG9uZCB3aXRoIHRoZSBgNDAzIEZvcmJpZGRlbmAgSFRUUCBzdGF0dXMgY29kZS4KKworT3RoZXJ3aXNlLCBzbWFydCBzZXJ2ZXJzIE1VU1QgcmVzcG9uZCB3aXRoIHRoZSBzbWFydCBzZXJ2ZXIgcmVwbHkKK2Zvcm1hdCBmb3IgdGhlIHJlcXVlc3RlZCBzZXJ2aWNlIG5hbWUuCisKK0NhY2hlLUNvbnRyb2wgaGVhZGVycyBTSE9VTEQgYmUgdXNlZCB0byBkaXNhYmxlIGNhY2hpbmcgb2YgdGhlCityZXR1cm5lZCBlbnRpdHkuCisKK1RoZSBDb250ZW50LVR5cGUgTVVTVCBiZSBgYXBwbGljYXRpb24veC0kc2VydmljZW5hbWUtYWR2ZXJ0aXNlbWVudGAuCitDbGllbnRzIFNIT1VMRCBmYWxsIGJhY2sgdG8gdGhlIGR1bWIgcHJvdG9jb2wgaWYgYW5vdGhlciBjb250ZW50Cit0eXBlIGlzIHJldHVybmVkLiAgV2hlbiBmYWxsaW5nIGJhY2sgdG8gdGhlIGR1bWIgcHJvdG9jb2wgY2xpZW50cworU0hPVUxEIE5PVCBtYWtlIGFuIGFkZGl0aW9uYWwgcmVxdWVzdCB0byBgJEdJVF9VUkwvaW5mby9yZWZzYCwgYnV0CitpbnN0ZWFkIFNIT1VMRCB1c2UgdGhlIHJlc3BvbnNlIGFscmVhZHkgaW4gaGFuZC4gIENsaWVudHMgTVVTVCBOT1QKK2NvbnRpbnVlIGlmIHRoZXkgZG8gbm90IHN1cHBvcnQgdGhlIGR1bWIgcHJvdG9jb2wuCisKK0NsaWVudHMgTVVTVCB2YWxpZGF0ZSB0aGUgc3RhdHVzIGNvZGUgaXMgZWl0aGVyIGAyMDAgT0tgIG9yCitgMzA0IE5vdCBNb2RpZmllZGAuCisKK0NsaWVudHMgTVVTVCB2YWxpZGF0ZSB0aGUgZmlyc3QgZml2ZSBieXRlcyBvZiB0aGUgcmVzcG9uc2UgZW50aXR5CittYXRjaGVzIHRoZSByZWdleCBgXlswLTlhLWZdezR9I2AuICBJZiB0aGlzIHRlc3QgZmFpbHMsIGNsaWVudHMKK01VU1QgTk9UIGNvbnRpbnVlLgorCitDbGllbnRzIE1VU1QgcGFyc2UgdGhlIGVudGlyZSByZXNwb25zZSBhcyBhIHNlcXVlbmNlIG9mIHBrdC1saW5lCityZWNvcmRzLgorCitDbGllbnRzIE1VU1QgdmVyaWZ5IHRoZSBmaXJzdCBwa3QtbGluZSBpcyBgIyBzZXJ2aWNlPSRzZXJ2aWNlbmFtZWAuCitTZXJ2ZXJzIE1VU1Qgc2V0ICRzZXJ2aWNlbmFtZSB0byBiZSB0aGUgcmVxdWVzdCBwYXJhbWV0ZXIgdmFsdWUuCitTZXJ2ZXJzIFNIT1VMRCBpbmNsdWRlIGFuIExGIGF0IHRoZSBlbmQgb2YgdGhpcyBsaW5lLgorQ2xpZW50cyBNVVNUIGlnbm9yZSBhbiBMRiBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitTZXJ2ZXJzIE1VU1QgdGVybWluYXRlIHRoZSByZXNwb25zZSB3aXRoIHRoZSBtYWdpYyBgMDAwMGAgZW5kCitwa3QtbGluZSBtYXJrZXIuCisKK1RoZSByZXR1cm5lZCByZXNwb25zZSBpcyBhIHBrdC1saW5lIHN0cmVhbSBkZXNjcmliaW5nIGVhY2ggcmVmIGFuZAoraXRzIGtub3duIHZhbHVlLiAgVGhlIHN0cmVhbSBTSE9VTEQgYmUgc29ydGVkIGJ5IG5hbWUgYWNjb3JkaW5nIHRvCit0aGUgQyBsb2NhbGUgb3JkZXJpbmcuICBUaGUgc3RyZWFtIFNIT1VMRCBpbmNsdWRlIHRoZSBkZWZhdWx0IHJlZgorbmFtZWQgYEhFQURgIGFzIHRoZSBmaXJzdCByZWYuICBUaGUgc3RyZWFtIE1VU1QgaW5jbHVkZSBjYXBhYmlsaXR5CitkZWNsYXJhdGlvbnMgYmVoaW5kIGEgTlVMIG9uIHRoZSBmaXJzdCByZWYuCisKK1RoZSByZXR1cm5lZCByZXNwb25zZSBjb250YWlucyAidmVyc2lvbiAxIiBpZiAidmVyc2lvbj0xIiB3YXMgc2VudCBhcyBhbgorRXh0cmEgUGFyYW1ldGVyLgorCisgIHNtYXJ0X3JlcGx5ICAgICA9ICBQS1QtTElORSgiIyBzZXJ2aWNlPSRzZXJ2aWNlbmFtZSIgTEYpCisJCSAgICAgIjAwMDAiCisJCSAgICAgKjEoInZlcnNpb24gMSIpCisJCSAgICAgcmVmX2xpc3QKKwkJICAgICAiMDAwMCIKKyAgcmVmX2xpc3QgICAgICAgID0gIGVtcHR5X2xpc3QgLyBub25fZW1wdHlfbGlzdAorCisgIGVtcHR5X2xpc3QgICAgICA9ICBQS1QtTElORSh6ZXJvLWlkIFNQICJjYXBhYmlsaXRpZXNee30iIE5VTCBjYXAtbGlzdCBMRikKKworICBub25fZW1wdHlfbGlzdCAgPSAgUEtULUxJTkUob2JqLWlkIFNQIG5hbWUgTlVMIGNhcF9saXN0IExGKQorCQkgICAgICpyZWZfcmVjb3JkCisKKyAgY2FwLWxpc3QgICAgICAgID0gIGNhcGFiaWxpdHkgKihTUCBjYXBhYmlsaXR5KQorICBjYXBhYmlsaXR5ICAgICAgPSAgMSooTENfQUxQSEEgLyBESUdJVCAvICItIiAvICJfIikKKyAgTENfQUxQSEEgICAgICAgID0gICV4NjEtN0EKKworICByZWZfcmVjb3JkICAgICAgPSAgYW55X3JlZiAvIHBlZWxlZF9yZWYKKyAgYW55X3JlZiAgICAgICAgID0gIFBLVC1MSU5FKG9iai1pZCBTUCBuYW1lIExGKQorICBwZWVsZWRfcmVmICAgICAgPSAgUEtULUxJTkUob2JqLWlkIFNQIG5hbWUgTEYpCisJCSAgICAgUEtULUxJTkUob2JqLWlkIFNQIG5hbWUgIl57fSIgTEYKKworCitTbWFydCBTZXJ2aWNlIGdpdC11cGxvYWQtcGFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIHNlcnZpY2UgcmVhZHMgZnJvbSB0aGUgcmVwb3NpdG9yeSBwb2ludGVkIHRvIGJ5IGAkR0lUX1VSTGAuCisKK0NsaWVudHMgTVVTVCBmaXJzdCBwZXJmb3JtIHJlZiBkaXNjb3Zlcnkgd2l0aAorYCRHSVRfVVJML2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFja2AuCisKKyAgIEM6IFBPU1QgJEdJVF9VUkwvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4wCisgICBDOiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLXJlcXVlc3QKKyAgIEM6CisgICBDOiAwMDMyd2FudCAwYTUzZTlkZGVhZGRhZDYzYWQxMDY4NjAyMzdiYmY1MzQxMWQxMWE3XG4KKyAgIEM6IDAwMzJoYXZlIDQ0MWI0MGQ4MzNmZGZhOTNlYjI5MDhlNTI3NDIyNDhmYWYwZWU5OTNcbgorICAgQzogMDAwMAorCisgICBTOiAyMDAgT0sKKyAgIFM6IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stcmVzdWx0CisgICBTOiBDYWNoZS1Db250cm9sOiBuby1jYWNoZQorICAgUzoKKyAgIFM6IC4uLi5BQ0sgJXMsIGNvbnRpbnVlCisgICBTOiAuLi4uTkFLCisKK0NsaWVudHMgTVVTVCBOT1QgcmV1c2Ugb3IgcmV2YWxpZGF0ZSBhIGNhY2hlZCByZXNwb25zZS4KK1NlcnZlcnMgTVVTVCBpbmNsdWRlIHN1ZmZpY2llbnQgQ2FjaGUtQ29udHJvbCBoZWFkZXJzCit0byBwcmV2ZW50IGNhY2hpbmcgb2YgdGhlIHJlc3BvbnNlLgorCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGFsbCBjYXBhYmlsaXRpZXMgZGVmaW5lZCBoZXJlLgorCitDbGllbnRzIE1VU1Qgc2VuZCBhdCBsZWFzdCBvbmUgIndhbnQiIGNvbW1hbmQgaW4gdGhlIHJlcXVlc3QgYm9keS4KK0NsaWVudHMgTVVTVCBOT1QgcmVmZXJlbmNlIGFuIGlkIGluIGEgIndhbnQiIGNvbW1hbmQgd2hpY2ggZGlkIG5vdAorYXBwZWFyIGluIHRoZSByZXNwb25zZSBvYnRhaW5lZCB0aHJvdWdoIHJlZiBkaXNjb3ZlcnkgdW5sZXNzIHRoZQorc2VydmVyIGFkdmVydGlzZXMgY2FwYWJpbGl0eSBgYWxsb3ctdGlwLXNoYTEtaW4td2FudGAgb3IKK2BhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50YC4KKworICBjb21wdXRlX3JlcXVlc3QgICA9ICB3YW50X2xpc3QKKwkJICAgICAgIGhhdmVfbGlzdAorCQkgICAgICAgcmVxdWVzdF9lbmQKKyAgcmVxdWVzdF9lbmQgICAgICAgPSAgIjAwMDAiIC8gImRvbmUiCisKKyAgd2FudF9saXN0ICAgICAgICAgPSAgUEtULUxJTkUod2FudCBTUCBjYXBfbGlzdCBMRikKKwkJICAgICAgICood2FudF9wa3QpCisgIHdhbnRfcGt0ICAgICAgICAgID0gIFBLVC1MSU5FKHdhbnQgTEYpCisgIHdhbnQgICAgICAgICAgICAgID0gICJ3YW50IiBTUCBpZAorICBjYXBfbGlzdCAgICAgICAgICA9ICBjYXBhYmlsaXR5ICooU1AgY2FwYWJpbGl0eSkKKworICBoYXZlX2xpc3QgICAgICAgICA9ICAqUEtULUxJTkUoImhhdmUiIFNQIGlkIExGKQorCitUT0RPOiBEb2N1bWVudCB0aGlzIGZ1cnRoZXIuCisKK1RoZSBOZWdvdGlhdGlvbiBBbGdvcml0aG0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZSBjb21wdXRhdGlvbiB0byBzZWxlY3QgdGhlIG1pbmltYWwgcGFjayBwcm9jZWVkcyBhcyBmb2xsb3dzCisoQyA9IGNsaWVudCwgUyA9IHNlcnZlcik6CisKKydpbml0IHN0ZXA6JworCitDOiBVc2UgcmVmIGRpc2NvdmVyeSB0byBvYnRhaW4gdGhlIGFkdmVydGlzZWQgcmVmcy4KKworQzogUGxhY2UgYW55IG9iamVjdCBzZWVuIGludG8gc2V0IGBhZHZlcnRpc2VkYC4KKworQzogQnVpbGQgYW4gZW1wdHkgc2V0LCBgY29tbW9uYCwgdG8gaG9sZCB0aGUgb2JqZWN0cyB0aGF0IGFyZSBsYXRlcgorICAgZGV0ZXJtaW5lZCB0byBiZSBvbiBib3RoIGVuZHMuCisKK0M6IEJ1aWxkIGEgc2V0LCBgd2FudGAsIG9mIHRoZSBvYmplY3RzIGZyb20gYGFkdmVydGlzZWRgIHRoZSBjbGllbnQKKyAgIHdhbnRzIHRvIGZldGNoLCBiYXNlZCBvbiB3aGF0IGl0IHNhdyBkdXJpbmcgcmVmIGRpc2NvdmVyeS4KKworQzogU3RhcnQgYSBxdWV1ZSwgYGNfcGVuZGluZ2AsIG9yZGVyZWQgYnkgY29tbWl0IHRpbWUgKHBvcHBpbmcgbmV3ZXN0CisgICBmaXJzdCkuICBBZGQgYWxsIGNsaWVudCByZWZzLiAgV2hlbiBhIGNvbW1pdCBpcyBwb3BwZWQgZnJvbQorICAgdGhlIHF1ZXVlIGl0cyBwYXJlbnRzIFNIT1VMRCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGJhY2suCisgICBDb21taXRzIE1VU1Qgb25seSBlbnRlciB0aGUgcXVldWUgb25jZS4KKworJ29uZSBjb21wdXRlIHN0ZXA6JworCitDOiBTZW5kIG9uZSBgJEdJVF9VUkwvZ2l0LXVwbG9hZC1wYWNrYCByZXF1ZXN0OgorCisgICBDOiAwMDMyd2FudCA8d2FudCAjMT4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICBDOiAwMDMyd2FudCA8d2FudCAjMj4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAuLi4uCisgICBDOiAwMDMyaGF2ZSA8Y29tbW9uICMxPi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICBDOiAwMDMyaGF2ZSA8Y29tbW9uICMyPi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAuLi4uCisgICBDOiAwMDMyaGF2ZSA8aGF2ZSAjMT4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICBDOiAwMDMyaGF2ZSA8aGF2ZSAjMj4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAuLi4uCisgICBDOiAwMDAwCisKK1RoZSBzdHJlYW0gaXMgb3JnYW5pemVkIGludG8gImNvbW1hbmRzIiwgd2l0aCBlYWNoIGNvbW1hbmQKK2FwcGVhcmluZyBieSBpdHNlbGYgaW4gYSBwa3QtbGluZS4gIFdpdGhpbiBhIGNvbW1hbmQgbGluZSwKK3RoZSB0ZXh0IGxlYWRpbmcgdXAgdG8gdGhlIGZpcnN0IHNwYWNlIGlzIHRoZSBjb21tYW5kIG5hbWUsCithbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSB0byB0aGUgZmlyc3QgTEYgaXMgdGhlIHZhbHVlLgorQ29tbWFuZCBsaW5lcyBhcmUgdGVybWluYXRlZCB3aXRoIGFuIExGIGFzIHRoZSBsYXN0IGJ5dGUgb2YKK3RoZSBwa3QtbGluZSB2YWx1ZS4KKworQ29tbWFuZHMgTVVTVCBhcHBlYXIgaW4gdGhlIGZvbGxvd2luZyBvcmRlciwgaWYgdGhleSBhcHBlYXIKK2F0IGFsbCBpbiB0aGUgcmVxdWVzdCBzdHJlYW06CisKKyogIndhbnQiCisqICJoYXZlIgorCitUaGUgc3RyZWFtIGlzIHRlcm1pbmF0ZWQgYnkgYSBwa3QtbGluZSBmbHVzaCAoYDAwMDBgKS4KKworQSBzaW5nbGUgIndhbnQiIG9yICJoYXZlIiBjb21tYW5kIE1VU1QgaGF2ZSBvbmUgaGV4IGZvcm1hdHRlZAorU0hBLTEgYXMgaXRzIHZhbHVlLiAgTXVsdGlwbGUgU0hBLTFzIE1VU1QgYmUgc2VudCBieSBzZW5kaW5nCittdWx0aXBsZSBjb21tYW5kcy4KKworVGhlIGBoYXZlYCBsaXN0IGlzIGNyZWF0ZWQgYnkgcG9wcGluZyB0aGUgZmlyc3QgMzIgY29tbWl0cworZnJvbSBgY19wZW5kaW5nYC4gIExlc3MgY2FuIGJlIHN1cHBsaWVkIGlmIGBjX3BlbmRpbmdgIGVtcHRpZXMuCisKK0lmIHRoZSBjbGllbnQgaGFzIHNlbnQgMjU2ICJoYXZlIiBjb21taXRzIGFuZCBoYXMgbm90IHlldAorcmVjZWl2ZWQgb25lIG9mIHRob3NlIGJhY2sgZnJvbSBgc19jb21tb25gLCBvciB0aGUgY2xpZW50IGhhcworZW1wdGllZCBgY19wZW5kaW5nYCBpdCBTSE9VTEQgaW5jbHVkZSBhICJkb25lIiBjb21tYW5kIHRvIGxldAordGhlIHNlcnZlciBrbm93IGl0IHdvbid0IHByb2NlZWQ6CisKKyAgIEM6IDAwMDlkb25lCisKK1M6IFBhcnNlIHRoZSBnaXQtdXBsb2FkLXBhY2sgcmVxdWVzdDoKKworVmVyaWZ5IGFsbCBvYmplY3RzIGluIGB3YW50YCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gcmVmcy4KKworVGhlIHNlcnZlciBNQVkgd2FsayBiYWNrd2FyZHMgdGhyb3VnaCBoaXN0b3J5IG9yIHRocm91Z2gKK3RoZSByZWZsb2cgdG8gcGVybWl0IHNsaWdodGx5IHN0YWxlIHJlcXVlc3RzLgorCitJZiBubyAid2FudCIgb2JqZWN0cyBhcmUgcmVjZWl2ZWQsIHNlbmQgYW4gZXJyb3I6CitUT0RPOiBEZWZpbmUgZXJyb3IgaWYgbm8gIndhbnQiIGxpbmVzIGFyZSByZXF1ZXN0ZWQuCisKK0lmIGFueSAid2FudCIgb2JqZWN0IGlzIG5vdCByZWFjaGFibGUsIHNlbmQgYW4gZXJyb3I6CitUT0RPOiBEZWZpbmUgZXJyb3IgaWYgYW4gaW52YWxpZCAid2FudCIgaXMgcmVxdWVzdGVkLgorCitDcmVhdGUgYW4gZW1wdHkgbGlzdCwgYHNfY29tbW9uYC4KKworSWYgImhhdmUiIHdhcyBzZW50OgorCitMb29wIHRocm91Z2ggdGhlIG9iamVjdHMgaW4gdGhlIG9yZGVyIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQuCisKK0ZvciBlYWNoIG9iamVjdCwgaWYgdGhlIHNlcnZlciBoYXMgdGhlIG9iamVjdCByZWFjaGFibGUgZnJvbQorYSByZWYsIGFkZCBpdCB0byBgc19jb21tb25gLiAgSWYgYSBjb21taXQgaXMgYWRkZWQgdG8gYHNfY29tbW9uYCwKK2RvIG5vdCBhZGQgYW55IGFuY2VzdG9ycywgZXZlbiBpZiB0aGV5IGFsc28gYXBwZWFyIGluIGBoYXZlYC4KKworUzogU2VuZCB0aGUgZ2l0LXVwbG9hZC1wYWNrIHJlc3BvbnNlOgorCitJZiB0aGUgc2VydmVyIGhhcyBmb3VuZCBhIGNsb3NlZCBzZXQgb2Ygb2JqZWN0cyB0byBwYWNrIG9yIHRoZQorcmVxdWVzdCBlbmRzIHdpdGggImRvbmUiLCBpdCByZXBsaWVzIHdpdGggdGhlIHBhY2suCitUT0RPOiBEb2N1bWVudCB0aGUgcGFjayBiYXNlZCByZXNwb25zZQorCisgICBTOiBQQUNLLi4uCisKK1RoZSByZXR1cm5lZCBzdHJlYW0gaXMgdGhlIHNpZGUtYmFuZC02NGsgcHJvdG9jb2wgc3VwcG9ydGVkCitieSB0aGUgZ2l0LXVwbG9hZC1wYWNrIHNlcnZpY2UsIGFuZCB0aGUgcGFjayBpcyBlbWJlZGRlZCBpbnRvCitzdHJlYW0gMS4gIFByb2dyZXNzIG1lc3NhZ2VzIGZyb20gdGhlIHNlcnZlciBzaWRlIE1BWSBhcHBlYXIKK2luIHN0cmVhbSAyLgorCitIZXJlIGEgImNsb3NlZCBzZXQgb2Ygb2JqZWN0cyIgaXMgZGVmaW5lZCB0byBoYXZlIGF0IGxlYXN0CitvbmUgcGF0aCBmcm9tIGV2ZXJ5ICJ3YW50IiB0byBhdCBsZWFzdCBvbmUgImNvbW1vbiIgb2JqZWN0LgorCitJZiB0aGUgc2VydmVyIG5lZWRzIG1vcmUgaW5mb3JtYXRpb24sIGl0IHJlcGxpZXMgd2l0aCBhCitzdGF0dXMgY29udGludWUgcmVzcG9uc2U6CitUT0RPOiBEb2N1bWVudCB0aGUgbm9uLXBhY2sgcmVzcG9uc2UKKworQzogUGFyc2UgdGhlIHVwbG9hZC1wYWNrIHJlc3BvbnNlOgorICAgVE9ETzogRG9jdW1lbnQgcGFyc2luZyByZXNwb25zZQorCisnRG8gYW5vdGhlciBjb21wdXRlIHN0ZXAuJworCisKK1NtYXJ0IFNlcnZpY2UgZ2l0LXJlY2VpdmUtcGFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIHNlcnZpY2UgcmVhZHMgZnJvbSB0aGUgcmVwb3NpdG9yeSBwb2ludGVkIHRvIGJ5IGAkR0lUX1VSTGAuCisKK0NsaWVudHMgTVVTVCBmaXJzdCBwZXJmb3JtIHJlZiBkaXNjb3Zlcnkgd2l0aAorYCRHSVRfVVJML2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2tgLgorCisgICBDOiBQT1NUICRHSVRfVVJML2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjAKKyAgIEM6IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtcmVjZWl2ZS1wYWNrLXJlcXVlc3QKKyAgIEM6CisgICBDOiAuLi4uMGE1M2U5ZGRlYWRkYWQ2M2FkMTA2ODYwMjM3YmJmNTM0MTFkMTFhNyA0NDFiNDBkODMzZmRmYTkzZWIyOTA4ZTUyNzQyMjQ4ZmFmMGVlOTkzIHJlZnMvaGVhZHMvbWFpbnRcMCByZXBvcnQtc3RhdHVzCisgICBDOiAwMDAwCisgICBDOiBQQUNLLi4uLgorCisgICBTOiAyMDAgT0sKKyAgIFM6IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtcmVjZWl2ZS1wYWNrLXJlc3VsdAorICAgUzogQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUKKyAgIFM6CisgICBTOiAuLi4uCisKK0NsaWVudHMgTVVTVCBOT1QgcmV1c2Ugb3IgcmV2YWxpZGF0ZSBhIGNhY2hlZCByZXNwb25zZS4KK1NlcnZlcnMgTVVTVCBpbmNsdWRlIHN1ZmZpY2llbnQgQ2FjaGUtQ29udHJvbCBoZWFkZXJzCit0byBwcmV2ZW50IGNhY2hpbmcgb2YgdGhlIHJlc3BvbnNlLgorCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGFsbCBjYXBhYmlsaXRpZXMgZGVmaW5lZCBoZXJlLgorCitDbGllbnRzIE1VU1Qgc2VuZCBhdCBsZWFzdCBvbmUgY29tbWFuZCBpbiB0aGUgcmVxdWVzdCBib2R5LgorV2l0aGluIHRoZSBjb21tYW5kIHBvcnRpb24gb2YgdGhlIHJlcXVlc3QgYm9keSBjbGllbnRzIFNIT1VMRCBzZW5kCit0aGUgaWQgb2J0YWluZWQgdGhyb3VnaCByZWYgZGlzY292ZXJ5IGFzIG9sZF9pZC4KKworICB1cGRhdGVfcmVxdWVzdCAgPSAgY29tbWFuZF9saXN0CisJCSAgICAgIlBBQ0siIDxiaW5hcnkgZGF0YT4KKworICBjb21tYW5kX2xpc3QgICAgPSAgUEtULUxJTkUoY29tbWFuZCBOVUwgY2FwX2xpc3QgTEYpCisJCSAgICAgKihjb21tYW5kX3BrdCkKKyAgY29tbWFuZF9wa3QgICAgID0gIFBLVC1MSU5FKGNvbW1hbmQgTEYpCisgIGNhcF9saXN0ICAgICAgICA9ICAqKFNQIGNhcGFiaWxpdHkpIFNQCisKKyAgY29tbWFuZCAgICAgICAgID0gIGNyZWF0ZSAvIGRlbGV0ZSAvIHVwZGF0ZQorICBjcmVhdGUgICAgICAgICAgPSAgemVyby1pZCBTUCBuZXdfaWQgU1AgbmFtZQorICBkZWxldGUgICAgICAgICAgPSAgb2xkX2lkIFNQIHplcm8taWQgU1AgbmFtZQorICB1cGRhdGUgICAgICAgICAgPSAgb2xkX2lkIFNQIG5ld19pZCBTUCBuYW1lCisKK1RPRE86IERvY3VtZW50IHRoaXMgZnVydGhlci4KKworCitSZWZlcmVuY2VzCistLS0tLS0tLS0tCisKK2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE3MzgudHh0W1JGQyAxNzM4OiBVbmlmb3JtIFJlc291cmNlIExvY2F0b3JzIChVUkwpXQoraHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjYxNi50eHRbUkZDIDI2MTY6IEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCAtLSBIVFRQLzEuMV0KK2xpbms6dGVjaG5pY2FsL3BhY2stcHJvdG9jb2wuaHRtbAorbGluazp0ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2luZGV4LWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTI1YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMzU3IEBACitHaXQgaW5kZXggZm9ybWF0Cis9PT09PT09PT09PT09PT09CisKKz09IFRoZSBHaXQgaW5kZXggZmlsZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQKKworICBBbGwgYmluYXJ5IG51bWJlcnMgYXJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4gVmVyc2lvbiAyIGlzIGRlc2NyaWJlZAorICBoZXJlIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLgorCisgICAtIEEgMTItYnl0ZSBoZWFkZXIgY29uc2lzdGluZyBvZgorCisgICAgIDQtYnl0ZSBzaWduYXR1cmU6CisgICAgICAgVGhlIHNpZ25hdHVyZSBpcyB7ICdEJywgJ0knLCAnUicsICdDJyB9IChzdGFuZHMgZm9yICJkaXJjYWNoZSIpCisKKyAgICAgNC1ieXRlIHZlcnNpb24gbnVtYmVyOgorICAgICAgIFRoZSBjdXJyZW50IHN1cHBvcnRlZCB2ZXJzaW9ucyBhcmUgMiwgMyBhbmQgNC4KKworICAgICAzMi1iaXQgbnVtYmVyIG9mIGluZGV4IGVudHJpZXMuCisKKyAgIC0gQSBudW1iZXIgb2Ygc29ydGVkIGluZGV4IGVudHJpZXMgKHNlZSBiZWxvdykuCisKKyAgIC0gRXh0ZW5zaW9ucworCisgICAgIEV4dGVuc2lvbnMgYXJlIGlkZW50aWZpZWQgYnkgc2lnbmF0dXJlLiBPcHRpb25hbCBleHRlbnNpb25zIGNhbgorICAgICBiZSBpZ25vcmVkIGlmIEdpdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZW0uCisKKyAgICAgR2l0IGN1cnJlbnRseSBzdXBwb3J0cyBjYWNoZWQgdHJlZSBhbmQgcmVzb2x2ZSB1bmRvIGV4dGVuc2lvbnMuCisKKyAgICAgNC1ieXRlIGV4dGVuc2lvbiBzaWduYXR1cmUuIElmIHRoZSBmaXJzdCBieXRlIGlzICdBJy4uJ1onIHRoZQorICAgICBleHRlbnNpb24gaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBpZ25vcmVkLgorCisgICAgIDMyLWJpdCBzaXplIG9mIHRoZSBleHRlbnNpb24KKworICAgICBFeHRlbnNpb24gZGF0YQorCisgICAtIDE2MC1iaXQgU0hBLTEgb3ZlciB0aGUgY29udGVudCBvZiB0aGUgaW5kZXggZmlsZSBiZWZvcmUgdGhpcworICAgICBjaGVja3N1bS4KKworPT0gSW5kZXggZW50cnkKKworICBJbmRleCBlbnRyaWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIG9uIHRoZSBuYW1lIGZpZWxkLAorICBpbnRlcnByZXRlZCBhcyBhIHN0cmluZyBvZiB1bnNpZ25lZCBieXRlcyAoaS5lLiBtZW1jbXAoKSBvcmRlciwgbm8KKyAgbG9jYWxpemF0aW9uLCBubyBzcGVjaWFsIGNhc2luZyBvZiBkaXJlY3Rvcnkgc2VwYXJhdG9yICcvJykuIEVudHJpZXMKKyAgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBzb3J0ZWQgYnkgdGhlaXIgc3RhZ2UgZmllbGQuCisKKyAgMzItYml0IGN0aW1lIHNlY29uZHMsIHRoZSBsYXN0IHRpbWUgYSBmaWxlJ3MgbWV0YWRhdGEgY2hhbmdlZAorICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IGN0aW1lIG5hbm9zZWNvbmQgZnJhY3Rpb25zCisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgbXRpbWUgc2Vjb25kcywgdGhlIGxhc3QgdGltZSBhIGZpbGUncyBkYXRhIGNoYW5nZWQKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBtdGltZSBuYW5vc2Vjb25kIGZyYWN0aW9ucworICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IGRldgorICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IGlubworICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IG1vZGUsIHNwbGl0IGludG8gKGhpZ2ggdG8gbG93IGJpdHMpCisKKyAgICA0LWJpdCBvYmplY3QgdHlwZQorICAgICAgdmFsaWQgdmFsdWVzIGluIGJpbmFyeSBhcmUgMTAwMCAocmVndWxhciBmaWxlKSwgMTAxMCAoc3ltYm9saWMgbGluaykKKyAgICAgIGFuZCAxMTEwIChnaXRsaW5rKQorCisgICAgMy1iaXQgdW51c2VkCisKKyAgICA5LWJpdCB1bml4IHBlcm1pc3Npb24uIE9ubHkgMDc1NSBhbmQgMDY0NCBhcmUgdmFsaWQgZm9yIHJlZ3VsYXIgZmlsZXMuCisgICAgU3ltYm9saWMgbGlua3MgYW5kIGdpdGxpbmtzIGhhdmUgdmFsdWUgMCBpbiB0aGlzIGZpZWxkLgorCisgIDMyLWJpdCB1aWQKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBnaWQKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBmaWxlIHNpemUKKyAgICBUaGlzIGlzIHRoZSBvbi1kaXNrIHNpemUgZnJvbSBzdGF0KDIpLCB0cnVuY2F0ZWQgdG8gMzItYml0LgorCisgIDE2MC1iaXQgU0hBLTEgZm9yIHRoZSByZXByZXNlbnRlZCBvYmplY3QKKworICBBIDE2LWJpdCAnZmxhZ3MnIGZpZWxkIHNwbGl0IGludG8gKGhpZ2ggdG8gbG93IGJpdHMpCisKKyAgICAxLWJpdCBhc3N1bWUtdmFsaWQgZmxhZworCisgICAgMS1iaXQgZXh0ZW5kZWQgZmxhZyAobXVzdCBiZSB6ZXJvIGluIHZlcnNpb24gMikKKworICAgIDItYml0IHN0YWdlIChkdXJpbmcgbWVyZ2UpCisKKyAgICAxMi1iaXQgbmFtZSBsZW5ndGggaWYgdGhlIGxlbmd0aCBpcyBsZXNzIHRoYW4gMHhGRkY7IG90aGVyd2lzZSAweEZGRgorICAgIGlzIHN0b3JlZCBpbiB0aGlzIGZpZWxkLgorCisgIChWZXJzaW9uIDMgb3IgbGF0ZXIpIEEgMTYtYml0IGZpZWxkLCBvbmx5IGFwcGxpY2FibGUgaWYgdGhlCisgICJleHRlbmRlZCBmbGFnIiBhYm92ZSBpcyAxLCBzcGxpdCBpbnRvIChoaWdoIHRvIGxvdyBiaXRzKS4KKworICAgIDEtYml0IHJlc2VydmVkIGZvciBmdXR1cmUKKworICAgIDEtYml0IHNraXAtd29ya3RyZWUgZmxhZyAodXNlZCBieSBzcGFyc2UgY2hlY2tvdXQpCisKKyAgICAxLWJpdCBpbnRlbnQtdG8tYWRkIGZsYWcgKHVzZWQgYnkgImdpdCBhZGQgLU4iKQorCisgICAgMTMtYml0IHVudXNlZCwgbXVzdCBiZSB6ZXJvCisKKyAgRW50cnkgcGF0aCBuYW1lICh2YXJpYWJsZSBsZW5ndGgpIHJlbGF0aXZlIHRvIHRvcCBsZXZlbCBkaXJlY3RvcnkKKyAgICAod2l0aG91dCBsZWFkaW5nIHNsYXNoKS4gJy8nIGlzIHVzZWQgYXMgcGF0aCBzZXBhcmF0b3IuIFRoZSBzcGVjaWFsCisgICAgcGF0aCBjb21wb25lbnRzICIuIiwgIi4uIiBhbmQgIi5naXQiICh3aXRob3V0IHF1b3RlcykgYXJlIGRpc2FsbG93ZWQuCisgICAgVHJhaWxpbmcgc2xhc2ggaXMgYWxzbyBkaXNhbGxvd2VkLgorCisgICAgVGhlIGV4YWN0IGVuY29kaW5nIGlzIHVuZGVmaW5lZCwgYnV0IHRoZSAnLicgYW5kICcvJyBjaGFyYWN0ZXJzCisgICAgYXJlIGVuY29kZWQgaW4gNy1iaXQgQVNDSUkgYW5kIHRoZSBlbmNvZGluZyBjYW5ub3QgY29udGFpbiBhIE5VTAorICAgIGJ5dGUgKGlvdywgdGhpcyBpcyBhIFVOSVggcGF0aG5hbWUpLgorCisgIChWZXJzaW9uIDQpIEluIHZlcnNpb24gNCwgdGhlIGVudHJ5IHBhdGggbmFtZSBpcyBwcmVmaXgtY29tcHJlc3NlZAorICAgIHJlbGF0aXZlIHRvIHRoZSBwYXRoIG5hbWUgZm9yIHRoZSBwcmV2aW91cyBlbnRyeSAodGhlIHZlcnkgZmlyc3QKKyAgICBlbnRyeSBpcyBlbmNvZGVkIGFzIGlmIHRoZSBwYXRoIG5hbWUgZm9yIHRoZSBwcmV2aW91cyBlbnRyeSBpcyBhbgorICAgIGVtcHR5IHN0cmluZykuICBBdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGVudHJ5LCBhbiBpbnRlZ2VyIE4gaW4gdGhlCisgICAgdmFyaWFibGUgd2lkdGggZW5jb2RpbmcgKHRoZSBzYW1lIGVuY29kaW5nIGFzIHRoZSBvZmZzZXQgaXMgZW5jb2RlZAorICAgIGZvciBPRlNfREVMVEEgcGFjayBlbnRyaWVzOyBzZWUgcGFjay1mb3JtYXQudHh0KSBpcyBzdG9yZWQsIGZvbGxvd2VkCisgICAgYnkgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgUy4gIFJlbW92aW5nIE4gYnl0ZXMgZnJvbSB0aGUgZW5kIG9mIHRoZQorICAgIHBhdGggbmFtZSBmb3IgdGhlIHByZXZpb3VzIGVudHJ5LCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIHN0cmluZyBTCisgICAgeWllbGRzIHRoZSBwYXRoIG5hbWUgZm9yIHRoaXMgZW50cnkuCisKKyAgMS04IG51bCBieXRlcyBhcyBuZWNlc3NhcnkgdG8gcGFkIHRoZSBlbnRyeSB0byBhIG11bHRpcGxlIG9mIGVpZ2h0IGJ5dGVzCisgIHdoaWxlIGtlZXBpbmcgdGhlIG5hbWUgTlVMLXRlcm1pbmF0ZWQuCisKKyAgKFZlcnNpb24gNCkgSW4gdmVyc2lvbiA0LCB0aGUgcGFkZGluZyBhZnRlciB0aGUgcGF0aG5hbWUgZG9lcyBub3QKKyAgZXhpc3QuCisKKyAgSW50ZXJwcmV0YXRpb24gb2YgaW5kZXggZW50cmllcyBpbiBzcGxpdCBpbmRleCBtb2RlIGlzIGNvbXBsZXRlbHkKKyAgZGlmZmVyZW50LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisKKz09IEV4dGVuc2lvbnMKKworPT09IENhY2hlZCB0cmVlCisKKyAgQ2FjaGVkIHRyZWUgZXh0ZW5zaW9uIGNvbnRhaW5zIHByZS1jb21wdXRlZCBoYXNoZXMgZm9yIHRyZWVzIHRoYXQgY2FuCisgIGJlIGRlcml2ZWQgZnJvbSB0aGUgaW5kZXguIEl0IGhlbHBzIHNwZWVkIHVwIHRyZWUgb2JqZWN0IGdlbmVyYXRpb24KKyAgZnJvbSBpbmRleCBmb3IgYSBuZXcgY29tbWl0LgorCisgIFdoZW4gYSBwYXRoIGlzIHVwZGF0ZWQgaW4gaW5kZXgsIHRoZSBwYXRoIG11c3QgYmUgaW52YWxpZGF0ZWQgYW5kCisgIHJlbW92ZWQgZnJvbSB0cmVlIGNhY2hlLgorCisgIFRoZSBzaWduYXR1cmUgZm9yIHRoaXMgZXh0ZW5zaW9uIGlzIHsgJ1QnLCAnUicsICdFJywgJ0UnIH0uCisKKyAgQSBzZXJpZXMgb2YgZW50cmllcyBmaWxsIHRoZSBlbnRpcmUgZXh0ZW5zaW9uOyBlYWNoIG9mIHdoaWNoCisgIGNvbnNpc3RzIG9mOgorCisgIC0gTlVMLXRlcm1pbmF0ZWQgcGF0aCBjb21wb25lbnQgKHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgZGlyZWN0b3J5KTsKKworICAtIEFTQ0lJIGRlY2ltYWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGluZGV4IHRoYXQgaXMgY292ZXJlZCBieSB0aGUKKyAgICB0cmVlIHRoaXMgZW50cnkgcmVwcmVzZW50cyAoZW50cnlfY291bnQpOworCisgIC0gQSBzcGFjZSAoQVNDSUkgMzIpOworCisgIC0gQVNDSUkgZGVjaW1hbCBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygc3VidHJlZXMgdGhpcworICAgIHRyZWUgaGFzOworCisgIC0gQSBuZXdsaW5lIChBU0NJSSAxMCk7IGFuZAorCisgIC0gMTYwLWJpdCBvYmplY3QgbmFtZSBmb3IgdGhlIG9iamVjdCB0aGF0IHdvdWxkIHJlc3VsdCBmcm9tIHdyaXRpbmcKKyAgICB0aGlzIHNwYW4gb2YgaW5kZXggYXMgYSB0cmVlLgorCisgIEFuIGVudHJ5IGNhbiBiZSBpbiBhbiBpbnZhbGlkYXRlZCBzdGF0ZSBhbmQgaXMgcmVwcmVzZW50ZWQgYnkgaGF2aW5nCisgIGEgbmVnYXRpdmUgbnVtYmVyIGluIHRoZSBlbnRyeV9jb3VudCBmaWVsZC4gSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBubworICBvYmplY3QgbmFtZSBhbmQgdGhlIG5leHQgZW50cnkgc3RhcnRzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBuZXdsaW5lLgorICBXaGVuIHdyaXRpbmcgYW4gaW52YWxpZCBlbnRyeSwgLTEgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGFzIGVudHJ5X2NvdW50LgorCisgIFRoZSBlbnRyaWVzIGFyZSB3cml0dGVuIG91dCBpbiB0aGUgdG9wLWRvd24sIGRlcHRoLWZpcnN0IG9yZGVyLiAgVGhlCisgIGZpcnN0IGVudHJ5IHJlcHJlc2VudHMgdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHJlcG9zaXRvcnksIGZvbGxvd2VkIGJ5IHRoZQorICBmaXJzdCBzdWJ0cmVlLS1sZXQncyBjYWxsIHRoaXMgQS0tb2YgdGhlIHJvb3QgbGV2ZWwgKHdpdGggaXRzIG5hbWUKKyAgcmVsYXRpdmUgdG8gdGhlIHJvb3QgbGV2ZWwpLCBmb2xsb3dlZCBieSB0aGUgZmlyc3Qgc3VidHJlZSBvZiBBICh3aXRoCisgIGl0cyBuYW1lIHJlbGF0aXZlIHRvIEEpLCAuLi4KKworPT09IFJlc29sdmUgdW5kbworCisgIEEgY29uZmxpY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIGluZGV4IGFzIGEgc2V0IG9mIGhpZ2hlciBzdGFnZSBlbnRyaWVzLgorICBXaGVuIGEgY29uZmxpY3QgaXMgcmVzb2x2ZWQgKGUuZy4gd2l0aCAiZ2l0IGFkZCBwYXRoIiksIHRoZXNlIGhpZ2hlcgorICBzdGFnZSBlbnRyaWVzIHdpbGwgYmUgcmVtb3ZlZCBhbmQgYSBzdGFnZS0wIGVudHJ5IHdpdGggcHJvcGVyIHJlc29sdXRpb24KKyAgaXMgYWRkZWQuCisKKyAgV2hlbiB0aGVzZSBoaWdoZXIgc3RhZ2UgZW50cmllcyBhcmUgcmVtb3ZlZCwgdGhleSBhcmUgc2F2ZWQgaW4gdGhlCisgIHJlc29sdmUgdW5kbyBleHRlbnNpb24sIHNvIHRoYXQgY29uZmxpY3RzIGNhbiBiZSByZWNyZWF0ZWQgKGUuZy4gd2l0aAorICAiZ2l0IGNoZWNrb3V0IC1tIiksIGluIGNhc2UgdXNlcnMgd2FudCB0byByZWRvIGEgY29uZmxpY3QgcmVzb2x1dGlvbgorICBmcm9tIHNjcmF0Y2guCisKKyAgVGhlIHNpZ25hdHVyZSBmb3IgdGhpcyBleHRlbnNpb24gaXMgeyAnUicsICdFJywgJ1UnLCAnQycgfS4KKworICBBIHNlcmllcyBvZiBlbnRyaWVzIGZpbGwgdGhlIGVudGlyZSBleHRlbnNpb247IGVhY2ggb2Ygd2hpY2gKKyAgY29uc2lzdHMgb2Y6CisKKyAgLSBOVUwtdGVybWluYXRlZCBwYXRobmFtZSB0aGUgZW50cnkgZGVzY3JpYmVzIChyZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgorICAgIHRoZSByZXBvc2l0b3J5LCBpLmUuIGZ1bGwgcGF0aG5hbWUpOworCisgIC0gVGhyZWUgTlVMLXRlcm1pbmF0ZWQgQVNDSUkgb2N0YWwgbnVtYmVycywgZW50cnkgbW9kZSBvZiBlbnRyaWVzIGluCisgICAgc3RhZ2UgMSB0byAzIChhIG1pc3Npbmcgc3RhZ2UgaXMgcmVwcmVzZW50ZWQgYnkgIjAiIGluIHRoaXMgZmllbGQpOworICAgIGFuZAorCisgIC0gQXQgbW9zdCB0aHJlZSAxNjAtYml0IG9iamVjdCBuYW1lcyBvZiB0aGUgZW50cnkgaW4gc3RhZ2VzIGZyb20gMSB0byAzCisgICAgKG5vdGhpbmcgaXMgd3JpdHRlbiBmb3IgYSBtaXNzaW5nIHN0YWdlKS4KKworPT09IFNwbGl0IGluZGV4CisKKyAgSW4gc3BsaXQgaW5kZXggbW9kZSwgdGhlIG1ham9yaXR5IG9mIGluZGV4IGVudHJpZXMgY291bGQgYmUgc3RvcmVkCisgIGluIGEgc2VwYXJhdGUgZmlsZS4gVGhpcyBleHRlbnNpb24gcmVjb3JkcyB0aGUgY2hhbmdlcyB0byBiZSBtYWRlIG9uCisgIHRvcCBvZiB0aGF0IHRvIHByb2R1Y2UgdGhlIGZpbmFsIGluZGV4LgorCisgIFRoZSBzaWduYXR1cmUgZm9yIHRoaXMgZXh0ZW5zaW9uIGlzIHsgJ2wnLCAnaScsICduJywgJ2snIH0uCisKKyAgVGhlIGV4dGVuc2lvbiBjb25zaXN0cyBvZjoKKworICAtIDE2MC1iaXQgU0hBLTEgb2YgdGhlIHNoYXJlZCBpbmRleCBmaWxlLiBUaGUgc2hhcmVkIGluZGV4IGZpbGUgcGF0aAorICAgIGlzICRHSVRfRElSL3NoYXJlZGluZGV4LjxTSEEtMT4uIElmIGFsbCAxNjAgYml0cyBhcmUgemVybywgdGhlCisgICAgaW5kZXggZG9lcyBub3QgcmVxdWlyZSBhIHNoYXJlZCBpbmRleCBmaWxlLgorCisgIC0gQW4gZXdhaC1lbmNvZGVkIGRlbGV0ZSBiaXRtYXAsIGVhY2ggYml0IHJlcHJlc2VudHMgYW4gZW50cnkgaW4gdGhlCisgICAgc2hhcmVkIGluZGV4LiBJZiBhIGJpdCBpcyBzZXQsIGl0cyBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZQorICAgIHNoYXJlZCBpbmRleCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZmluYWwgaW5kZXguICBOb3RlLCBiZWNhdXNlCisgICAgYSBkZWxldGUgb3BlcmF0aW9uIGNoYW5nZXMgaW5kZXggZW50cnkgcG9zaXRpb25zLCBidXQgd2UgZG8gbmVlZAorICAgIG9yaWdpbmFsIHBvc2l0aW9ucyBpbiByZXBsYWNlIHBoYXNlLCBpdCdzIGJlc3QgdG8ganVzdCBtYXJrCisgICAgZW50cmllcyBmb3IgcmVtb3ZhbCwgdGhlbiBkbyBhIG1hc3MgZGVsZXRpb24gYWZ0ZXIgcmVwbGFjZW1lbnQuCisKKyAgLSBBbiBld2FoLWVuY29kZWQgcmVwbGFjZSBiaXRtYXAsIGVhY2ggYml0IHJlcHJlc2VudHMgYW4gZW50cnkgaW4KKyAgICB0aGUgc2hhcmVkIGluZGV4LiBJZiBhIGJpdCBpcyBzZXQsIGl0cyBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZQorICAgIHNoYXJlZCBpbmRleCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYW4gZW50cnkgaW4gdGhpcyBpbmRleAorICAgIGZpbGUuIEFsbCByZXBsYWNlZCBlbnRyaWVzIGFyZSBzdG9yZWQgaW4gc29ydGVkIG9yZGVyIGluIHRoaXMKKyAgICBpbmRleC4gVGhlIGZpcnN0ICIxIiBiaXQgaW4gdGhlIHJlcGxhY2UgYml0bWFwIGNvcnJlc3BvbmRzIHRvIHRoZQorICAgIGZpcnN0IGluZGV4IGVudHJ5LCB0aGUgc2Vjb25kICIxIiBiaXQgdG8gdGhlIHNlY29uZCBlbnRyeSBhbmQgc28KKyAgICBvbi4gUmVwbGFjZWQgZW50cmllcyBtYXkgaGF2ZSBlbXB0eSBwYXRoIG5hbWVzIHRvIHNhdmUgc3BhY2UuCisKKyAgVGhlIHJlbWFpbmluZyBpbmRleCBlbnRyaWVzIGFmdGVyIHJlcGxhY2VkIG9uZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUKKyAgZmluYWwgaW5kZXguIFRoZXNlIGFkZGVkIGVudHJpZXMgYXJlIGFsc28gc29ydGVkIGJ5IGVudHJ5IG5hbWUgdGhlbgorICBzdGFnZS4KKworPT0gVW50cmFja2VkIGNhY2hlCisKKyAgVW50cmFja2VkIGNhY2hlIHNhdmVzIHRoZSB1bnRyYWNrZWQgZmlsZSBsaXN0IGFuZCBuZWNlc3NhcnkgZGF0YSB0bworICB2ZXJpZnkgdGhlIGNhY2hlLiBUaGUgc2lnbmF0dXJlIGZvciB0aGlzIGV4dGVuc2lvbiBpcyB7ICdVJywgJ04nLAorICAnVCcsICdSJyB9LgorCisgIFRoZSBleHRlbnNpb24gc3RhcnRzIHdpdGgKKworICAtIEEgc2VxdWVuY2Ugb2YgTlVMLXRlcm1pbmF0ZWQgc3RyaW5ncywgcHJlY2VkZWQgYnkgdGhlIHNpemUgb2YgdGhlCisgICAgc2VxdWVuY2UgaW4gdmFyaWFibGUgd2lkdGggZW5jb2RpbmcuIEVhY2ggc3RyaW5nIGRlc2NyaWJlcyB0aGUKKyAgICBlbnZpcm9ubWVudCB3aGVyZSB0aGUgY2FjaGUgY2FuIGJlIHVzZWQuCisKKyAgLSBTdGF0IGRhdGEgb2YgJEdJVF9ESVIvaW5mby9leGNsdWRlLiBTZWUgIkluZGV4IGVudHJ5IiBzZWN0aW9uIGZyb20KKyAgICBjdGltZSBmaWVsZCB1bnRpbCAiZmlsZSBzaXplIi4KKworICAtIFN0YXQgZGF0YSBvZiBjb3JlLmV4Y2x1ZGVzZmlsZQorCisgIC0gMzItYml0IGRpcl9mbGFncyAoc2VlIHN0cnVjdCBkaXJfc3RydWN0KQorCisgIC0gMTYwLWJpdCBTSEEtMSBvZiAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUuIE51bGwgU0hBLTEgbWVhbnMgdGhlIGZpbGUKKyAgICBkb2VzIG5vdCBleGlzdC4KKworICAtIDE2MC1iaXQgU0hBLTEgb2YgY29yZS5leGNsdWRlc2ZpbGUuIE51bGwgU0hBLTEgbWVhbnMgdGhlIGZpbGUgZG9lcworICAgIG5vdCBleGlzdC4KKworICAtIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBvZiBwZXItZGlyIGV4Y2x1ZGUgZmlsZSBuYW1lLiBUaGlzIHVzdWFsbHkKKyAgICBpcyAiLmdpdGlnbm9yZSIuCisKKyAgLSBUaGUgbnVtYmVyIG9mIGZvbGxvd2luZyBkaXJlY3RvcnkgYmxvY2tzLCB2YXJpYWJsZSB3aWR0aAorICAgIGVuY29kaW5nLiBJZiB0aGlzIG51bWJlciBpcyB6ZXJvLCB0aGUgZXh0ZW5zaW9uIGVuZHMgaGVyZSB3aXRoIGEKKyAgICBmb2xsb3dpbmcgTlVMLgorCisgIC0gQSBudW1iZXIgb2YgZGlyZWN0b3J5IGJsb2NrcyBpbiBkZXB0aC1maXJzdC1zZWFyY2ggb3JkZXIsIGVhY2gKKyAgICBjb25zaXN0cyBvZgorCisgICAgLSBUaGUgbnVtYmVyIG9mIHVudHJhY2tlZCBlbnRyaWVzLCB2YXJpYWJsZSB3aWR0aCBlbmNvZGluZy4KKworICAgIC0gVGhlIG51bWJlciBvZiBzdWItZGlyZWN0b3J5IGJsb2NrcywgdmFyaWFibGUgd2lkdGggZW5jb2RpbmcuCisKKyAgICAtIFRoZSBkaXJlY3RvcnkgbmFtZSB0ZXJtaW5hdGVkIGJ5IE5VTC4KKworICAgIC0gQSBudW1iZXIgb2YgdW50cmFja2VkIGZpbGUvZGlyIG5hbWVzIHRlcm1pbmF0ZWQgYnkgTlVMLgorCitUaGUgcmVtYWluaW5nIGRhdGEgb2YgZWFjaCBkaXJlY3RvcnkgYmxvY2sgaXMgZ3JvdXBlZCBieSB0eXBlOgorCisgIC0gQW4gZXdhaCBiaXRtYXAsIHRoZSBuLXRoIGJpdCBtYXJrcyB3aGV0aGVyIHRoZSBuLXRoIGRpcmVjdG9yeSBoYXMKKyAgICB2YWxpZCB1bnRyYWNrZWQgY2FjaGUgZW50cmllcy4KKworICAtIEFuIGV3YWggYml0bWFwLCB0aGUgbi10aCBiaXQgcmVjb3JkcyAiY2hlY2stb25seSIgYml0IG9mCisgICAgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKCkgZm9yIHRoZSBuLXRoIGRpcmVjdG9yeS4KKworICAtIEFuIGV3YWggYml0bWFwLCB0aGUgbi10aCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgU0hBLTEgYW5kIHN0YXQgZGF0YQorICAgIGlzIHZhbGlkIGZvciB0aGUgbi10aCBkaXJlY3RvcnkgYW5kIGV4aXN0cyBpbiB0aGUgbmV4dCBkYXRhLgorCisgIC0gQW4gYXJyYXkgb2Ygc3RhdCBkYXRhLiBUaGUgbi10aCBkYXRhIGNvcnJlc3BvbmRzIHdpdGggdGhlIG4tdGgKKyAgICAib25lIiBiaXQgaW4gdGhlIHByZXZpb3VzIGV3YWggYml0bWFwLgorCisgIC0gQW4gYXJyYXkgb2YgU0hBLTEuIFRoZSBuLXRoIFNIQS0xIGNvcnJlc3BvbmRzIHdpdGggdGhlIG4tdGggIm9uZSIgYml0CisgICAgaW4gdGhlIHByZXZpb3VzIGV3YWggYml0bWFwLgorCisgIC0gT25lIE5VTC4KKworPT0gRmlsZSBTeXN0ZW0gTW9uaXRvciBjYWNoZQorCisgIFRoZSBmaWxlIHN5c3RlbSBtb25pdG9yIGNhY2hlIHRyYWNrcyBmaWxlcyBmb3Igd2hpY2ggdGhlIGNvcmUuZnNtb25pdG9yCisgIGhvb2sgaGFzIHRvbGQgdXMgYWJvdXQgY2hhbmdlcy4gIFRoZSBzaWduYXR1cmUgZm9yIHRoaXMgZXh0ZW5zaW9uIGlzCisgIHsgJ0YnLCAnUycsICdNJywgJ04nIH0uCisKKyAgVGhlIGV4dGVuc2lvbiBzdGFydHMgd2l0aAorCisgIC0gMzItYml0IHZlcnNpb24gbnVtYmVyOiB0aGUgY3VycmVudCBzdXBwb3J0ZWQgdmVyc2lvbiBpcyAxLgorCisgIC0gNjQtYml0IHRpbWU6IHRoZSBleHRlbnNpb24gZGF0YSByZWZsZWN0cyBhbGwgY2hhbmdlcyB0aHJvdWdoIHRoZSBnaXZlbgorCXRpbWUgd2hpY2ggaXMgc3RvcmVkIGFzIHRoZSBuYW5vc2Vjb25kcyBlbGFwc2VkIHNpbmNlIG1pZG5pZ2h0LAorCUphbnVhcnkgMSwgMTk3MC4KKworICAtIDMyLWJpdCBiaXRtYXAgc2l6ZTogdGhlIHNpemUgb2YgdGhlIENFX0ZTTU9OSVRPUl9WQUxJRCBiaXRtYXAuCisKKyAgLSBBbiBld2FoIGJpdG1hcCwgdGhlIG4tdGggYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBuLXRoIGluZGV4IGVudHJ5CisgICAgaXMgbm90IENFX0ZTTU9OSVRPUl9WQUxJRC4KKworPT0gRW5kIG9mIEluZGV4IEVudHJ5CisKKyAgVGhlIEVuZCBvZiBJbmRleCBFbnRyeSAoRU9JRSkgaXMgdXNlZCB0byBsb2NhdGUgdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUKKyAgbGVuZ3RoIGluZGV4IGVudHJpZXMgYW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4dGVuc2lvbnMuIENvZGUgY2FuIHRha2UKKyAgYWR2YW50YWdlIG9mIHRoaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGluZGV4IGV4dGVuc2lvbnMgd2l0aG91dCBoYXZpbmcKKyAgdG8gcGFyc2UgdGhyb3VnaCBhbGwgb2YgdGhlIGluZGV4IGVudHJpZXMuCisKKyAgQmVjYXVzZSBpdCBtdXN0IGJlIGFibGUgdG8gYmUgbG9hZGVkIGJlZm9yZSB0aGUgdmFyaWFibGUgbGVuZ3RoIGNhY2hlCisgIGVudHJpZXMgYW5kIG90aGVyIGluZGV4IGV4dGVuc2lvbnMsIHRoaXMgZXh0ZW5zaW9uIG11c3QgYmUgd3JpdHRlbiBsYXN0LgorICBUaGUgc2lnbmF0dXJlIGZvciB0aGlzIGV4dGVuc2lvbiBpcyB7ICdFJywgJ08nLCAnSScsICdFJyB9LgorCisgIFRoZSBleHRlbnNpb24gY29uc2lzdHMgb2Y6CisKKyAgLSAzMi1iaXQgb2Zmc2V0IHRvIHRoZSBlbmQgb2YgdGhlIGluZGV4IGVudHJpZXMKKworICAtIDE2MC1iaXQgU0hBLTEgb3ZlciB0aGUgZXh0ZW5zaW9uIHR5cGVzIGFuZCB0aGVpciBzaXplcyAoYnV0IG5vdAorCXRoZWlyIGNvbnRlbnRzKS4gIEUuZy4gaWYgd2UgaGF2ZSAiVFJFRSIgZXh0ZW5zaW9uIHRoYXQgaXMgTi1ieXRlcworCWxvbmcsICJSRVVDIiBleHRlbnNpb24gdGhhdCBpcyBNLWJ5dGVzIGxvbmcsIGZvbGxvd2VkIGJ5ICJFT0lFIiwKKwl0aGVuIHRoZSBoYXNoIHdvdWxkIGJlOgorCisJU0hBLTEoIlRSRUUiICsgPGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBOPiArCisJCSJSRVVDIiArIDxiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgTT4pCisKKz09IEluZGV4IEVudHJ5IE9mZnNldCBUYWJsZQorCisgIFRoZSBJbmRleCBFbnRyeSBPZmZzZXQgVGFibGUgKElFT1QpIGlzIHVzZWQgdG8gaGVscCBhZGRyZXNzIHRoZSBDUFUKKyAgY29zdCBvZiBsb2FkaW5nIHRoZSBpbmRleCBieSBlbmFibGluZyBtdWx0aS10aHJlYWRpbmcgdGhlIHByb2Nlc3Mgb2YKKyAgY29udmVydGluZyBjYWNoZSBlbnRyaWVzIGZyb20gdGhlIG9uLWRpc2sgZm9ybWF0IHRvIHRoZSBpbi1tZW1vcnkgZm9ybWF0LgorICBUaGUgc2lnbmF0dXJlIGZvciB0aGlzIGV4dGVuc2lvbiBpcyB7ICdJJywgJ0UnLCAnTycsICdUJyB9LgorCisgIFRoZSBleHRlbnNpb24gY29uc2lzdHMgb2Y6CisKKyAgLSAzMi1iaXQgdmVyc2lvbiAoY3VycmVudGx5IDEpCisKKyAgLSBBIG51bWJlciBvZiBpbmRleCBvZmZzZXQgZW50cmllcyBlYWNoIGNvbnNpc3Rpbmcgb2Y6CisKKyAgICAtIDMyLWJpdCBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHRvIHRoZSBmaXJzdCBjYWNoZSBlbnRyeQorCWluIHRoaXMgYmxvY2sgb2YgZW50cmllcy4KKworICAgIC0gMzItYml0IGNvdW50IG9mIGNhY2hlIGVudHJpZXMgaW4gdGhpcyBibG9jawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvbG9uZy1ydW5uaW5nLXByb2Nlc3MtcHJvdG9jb2wudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvbG9uZy1ydW5uaW5nLXByb2Nlc3MtcHJvdG9jb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMGFhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9sb25nLXJ1bm5pbmctcHJvY2Vzcy1wcm90b2NvbC50eHQKQEAgLTAsMCArMSw1MCBAQAorTG9uZy1ydW5uaW5nIHByb2Nlc3MgcHJvdG9jb2wKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcHJvdG9jb2wgaXMgdXNlZCB3aGVuIEdpdCBuZWVkcyB0byBjb21tdW5pY2F0ZSB3aXRoIGFuIGV4dGVybmFsCitwcm9jZXNzIHRocm91Z2hvdXQgdGhlIGVudGlyZSBsaWZlIG9mIGEgc2luZ2xlIEdpdCBjb21tYW5kLiBBbGwKK2NvbW11bmljYXRpb24gaXMgaW4gcGt0LWxpbmUgZm9ybWF0IChzZWUgdGVjaG5pY2FsL3Byb3RvY29sLWNvbW1vbi50eHQpCitvdmVyIHN0YW5kYXJkIGlucHV0IGFuZCBzdGFuZGFyZCBvdXRwdXQuCisKK0hhbmRzaGFrZQorLS0tLS0tLS0tCisKK0dpdCBzdGFydHMgYnkgc2VuZGluZyBhIHdlbGNvbWUgbWVzc2FnZSAoZm9yIGV4YW1wbGUsCisiZ2l0LWZpbHRlci1jbGllbnQiKSwgYSBsaXN0IG9mIHN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIG51bWJlcnMsIGFuZAorYSBmbHVzaCBwYWNrZXQuIEdpdCBleHBlY3RzIHRvIHJlYWQgdGhlIHdlbGNvbWUgbWVzc2FnZSB3aXRoICJzZXJ2ZXIiCitpbnN0ZWFkIG9mICJjbGllbnQiIChmb3IgZXhhbXBsZSwgImdpdC1maWx0ZXItc2VydmVyIiksIGV4YWN0bHkgb25lCitwcm90b2NvbCB2ZXJzaW9uIG51bWJlciBmcm9tIHRoZSBwcmV2aW91c2x5IHNlbnQgbGlzdCwgYW5kIGEgZmx1c2gKK3BhY2tldC4gQWxsIGZ1cnRoZXIgY29tbXVuaWNhdGlvbiB3aWxsIGJlIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCB2ZXJzaW9uLgorVGhlIHJlbWFpbmluZyBwcm90b2NvbCBkZXNjcmlwdGlvbiBiZWxvdyBkb2N1bWVudHMgInZlcnNpb249MiIuIFBsZWFzZQorbm90ZSB0aGF0ICJ2ZXJzaW9uPTQyIiBpbiB0aGUgZXhhbXBsZSBiZWxvdyBkb2VzIG5vdCBleGlzdCBhbmQgaXMgb25seQordGhlcmUgdG8gaWxsdXN0cmF0ZSBob3cgdGhlIHByb3RvY29sIHdvdWxkIGxvb2sgbGlrZSB3aXRoIG1vcmUgdGhhbiBvbmUKK3ZlcnNpb24uCisKK0FmdGVyIHRoZSB2ZXJzaW9uIG5lZ290aWF0aW9uIEdpdCBzZW5kcyBhIGxpc3Qgb2YgYWxsIGNhcGFiaWxpdGllcyB0aGF0CitpdCBzdXBwb3J0cyBhbmQgYSBmbHVzaCBwYWNrZXQuIEdpdCBleHBlY3RzIHRvIHJlYWQgYSBsaXN0IG9mIGRlc2lyZWQKK2NhcGFiaWxpdGllcywgd2hpY2ggbXVzdCBiZSBhIHN1YnNldCBvZiB0aGUgc3VwcG9ydGVkIGNhcGFiaWxpdGllcyBsaXN0LAorYW5kIGEgZmx1c2ggcGFja2V0IGFzIHJlc3BvbnNlOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gZ2l0LWZpbHRlci1jbGllbnQKK3BhY2tldDogICAgICAgICAgZ2l0PiB2ZXJzaW9uPTIKK3BhY2tldDogICAgICAgICAgZ2l0PiB2ZXJzaW9uPTQyCitwYWNrZXQ6ICAgICAgICAgIGdpdD4gMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ8IGdpdC1maWx0ZXItc2VydmVyCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgdmVyc2lvbj0yCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgMDAwMAorcGFja2V0OiAgICAgICAgICBnaXQ+IGNhcGFiaWxpdHk9Y2xlYW4KK3BhY2tldDogICAgICAgICAgZ2l0PiBjYXBhYmlsaXR5PXNtdWRnZQorcGFja2V0OiAgICAgICAgICBnaXQ+IGNhcGFiaWxpdHk9bm90LXlldC1pbnZlbnRlZAorcGFja2V0OiAgICAgICAgICBnaXQ+IDAwMDAKK3BhY2tldDogICAgICAgICAgZ2l0PCBjYXBhYmlsaXR5PWNsZWFuCitwYWNrZXQ6ICAgICAgICAgIGdpdDwgY2FwYWJpbGl0eT1zbXVkZ2UKK3BhY2tldDogICAgICAgICAgZ2l0PCAwMDAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2h1dGRvd24KKy0tLS0tLS0tCisKK0dpdCB3aWxsIGNsb3NlCit0aGUgY29tbWFuZCBwaXBlIG9uIGV4aXQuIFRoZSBmaWx0ZXIgaXMgZXhwZWN0ZWQgdG8gZGV0ZWN0IEVPRgorYW5kIGV4aXQgZ3JhY2VmdWxseSBvbiBpdHMgb3duLiBHaXQgd2lsbCB3YWl0IHVudGlsIHRoZSBmaWx0ZXIKK3Byb2Nlc3MgaGFzIHN0b3BwZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9tdWx0aS1wYWNrLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL211bHRpLXBhY2staW5kZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNzYzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9tdWx0aS1wYWNrLWluZGV4LnR4dApAQCAtMCwwICsxLDEwOSBAQAorTXVsdGktUGFjay1JbmRleCAoTUlEWCkgRGVzaWduIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIEdpdCBvYmplY3QgZGlyZWN0b3J5IGNvbnRhaW5zIGEgJ3BhY2snIGRpcmVjdG9yeSBjb250YWluaW5nCitwYWNrZmlsZXMgKHdpdGggc3VmZml4ICIucGFjayIpIGFuZCBwYWNrLWluZGV4ZXMgKHdpdGggc3VmZml4CisiLmlkeCIpLiBUaGUgcGFjay1pbmRleGVzIHByb3ZpZGUgYSB3YXkgdG8gbG9va3VwIG9iamVjdHMgYW5kCituYXZpZ2F0ZSB0byB0aGVpciBvZmZzZXQgd2l0aGluIHRoZSBwYWNrLCBidXQgdGhlc2UgbXVzdCBjb21lCitpbiBwYWlycyB3aXRoIHRoZSBwYWNrZmlsZXMuIFRoaXMgcGFpcmluZyBkZXBlbmRzIG9uIHRoZSBmaWxlCituYW1lcywgYXMgdGhlIHBhY2staW5kZXggZGlmZmVycyBvbmx5IGluIHN1ZmZpeCB3aXRoIGl0cyBwYWNrLQorZmlsZS4gV2hpbGUgdGhlIHBhY2staW5kZXhlcyBwcm92aWRlIGZhc3QgbG9va3VwIHBlciBwYWNrZmlsZSwKK3RoaXMgcGVyZm9ybWFuY2UgZGVncmFkZXMgYXMgdGhlIG51bWJlciBvZiBwYWNrZmlsZXMgaW5jcmVhc2VzLAorYmVjYXVzZSBhYmJyZXZpYXRpb25zIG5lZWQgdG8gaW5zcGVjdCBldmVyeSBwYWNrZmlsZSBhbmQgd2UgYXJlCittb3JlIGxpa2VseSB0byBoYXZlIGEgbWlzcyBvbiBvdXIgbW9zdC1yZWNlbnRseS11c2VkIHBhY2tmaWxlLgorRm9yIHNvbWUgbGFyZ2UgcmVwb3NpdG9yaWVzLCByZXBhY2tpbmcgaW50byBhIHNpbmdsZSBwYWNrZmlsZQoraXMgbm90IGZlYXNpYmxlIGR1ZSB0byBzdG9yYWdlIHNwYWNlIG9yIGV4Y2Vzc2l2ZSByZXBhY2sgdGltZXMuCisKK1RoZSBtdWx0aS1wYWNrLWluZGV4IChNSURYIGZvciBzaG9ydCkgc3RvcmVzIGEgbGlzdCBvZiBvYmplY3RzCithbmQgdGhlaXIgb2Zmc2V0cyBpbnRvIG11bHRpcGxlIHBhY2tmaWxlcy4gSXQgY29udGFpbnM6CisKKy0gQSBsaXN0IG9mIHBhY2tmaWxlIG5hbWVzLgorLSBBIHNvcnRlZCBsaXN0IG9mIG9iamVjdCBJRHMuCistIEEgbGlzdCBvZiBtZXRhZGF0YSBmb3IgdGhlIGl0aCBvYmplY3QgSUQgaW5jbHVkaW5nOgorICAtIEEgdmFsdWUgaiByZWZlcnJpbmcgdG8gdGhlIGp0aCBwYWNrZmlsZS4KKyAgLSBBbiBvZmZzZXQgd2l0aGluIHRoZSBqdGggcGFja2ZpbGUgZm9yIHRoZSBvYmplY3QuCistIElmIGxhcmdlIG9mZnNldHMgYXJlIHJlcXVpcmVkLCB3ZSB1c2UgYW5vdGhlciBsaXN0IG9mIGxhcmdlCisgIG9mZnNldHMgc2ltaWxhciB0byB2ZXJzaW9uIDIgcGFjay1pbmRleGVzLgorCitUaHVzLCB3ZSBjYW4gcHJvdmlkZSBPKGxvZyBOKSBsb29rdXAgdGltZSBmb3IgYW55IG51bWJlcgorb2YgcGFja2ZpbGVzLgorCitEZXNpZ24gRGV0YWlscworLS0tLS0tLS0tLS0tLS0KKworLSBUaGUgTUlEWCBpcyBzdG9yZWQgaW4gYSBmaWxlIG5hbWVkICdtdWx0aS1wYWNrLWluZGV4JyBpbiB0aGUKKyAgLmdpdC9vYmplY3RzL3BhY2sgZGlyZWN0b3J5LiBUaGlzIGNvdWxkIGJlIHN0b3JlZCBpbiB0aGUgcGFjaworICBkaXJlY3Rvcnkgb2YgYW4gYWx0ZXJuYXRlLiBJdCByZWZlcnMgb25seSB0byBwYWNrZmlsZXMgaW4gdGhhdAorICBzYW1lIGRpcmVjdG9yeS4KKworLSBUaGUgY29yZS5tdWx0aVBhY2tJbmRleCBjb25maWcgc2V0dGluZyBtdXN0IGJlIG9uIHRvIGNvbnN1bWUgTUlEWCBmaWxlcy4KKworLSBUaGUgZmlsZSBmb3JtYXQgaW5jbHVkZXMgcGFyYW1ldGVycyBmb3IgdGhlIG9iamVjdCBJRCBoYXNoCisgIGZ1bmN0aW9uLCBzbyBhIGZ1dHVyZSBjaGFuZ2Ugb2YgaGFzaCBhbGdvcml0aG0gZG9lcyBub3QgcmVxdWlyZQorICBhIGNoYW5nZSBpbiBmb3JtYXQuCisKKy0gVGhlIE1JRFgga2VlcHMgb25seSBvbmUgcmVjb3JkIHBlciBvYmplY3QgSUQuIElmIGFuIG9iamVjdCBhcHBlYXJzCisgIGluIG11bHRpcGxlIHBhY2tmaWxlcywgdGhlbiB0aGUgTUlEWCBzZWxlY3RzIHRoZSBjb3B5IGluIHRoZSBtb3N0LQorICByZWNlbnRseSBtb2RpZmllZCBwYWNrZmlsZS4KKworLSBJZiB0aGVyZSBleGlzdCBwYWNrZmlsZXMgaW4gdGhlIHBhY2sgZGlyZWN0b3J5IG5vdCByZWdpc3RlcmVkIGluCisgIHRoZSBNSURYLCB0aGVuIHRob3NlIHBhY2tmaWxlcyBhcmUgbG9hZGVkIGludG8gdGhlIGBwYWNrZWRfZ2l0YAorICBsaXN0IGFuZCBgcGFja2VkX2dpdF9tcnVgIGNhY2hlLgorCistIFRoZSBwYWNrLWluZGV4ZXMgKC5pZHggZmlsZXMpIHJlbWFpbiBpbiB0aGUgcGFjayBkaXJlY3Rvcnkgc28gd2UKKyAgY2FuIGRlbGV0ZSB0aGUgTUlEWCBmaWxlLCBzZXQgY29yZS5taWR4IHRvIGZhbHNlLCBvciBkb3duZ3JhZGUKKyAgd2l0aG91dCBhbnkgbG9zcyBvZiBpbmZvcm1hdGlvbi4KKworLSBUaGUgTUlEWCBmaWxlIGZvcm1hdCB1c2VzIGEgY2h1bmstYmFzZWQgYXBwcm9hY2ggKHNpbWlsYXIgdG8gdGhlCisgIGNvbW1pdC1ncmFwaCBmaWxlKSB0aGF0IGFsbG93cyBvcHRpb25hbCBkYXRhIHRvIGJlIGFkZGVkLgorCitGdXR1cmUgV29yaworLS0tLS0tLS0tLS0KKworLSBBZGQgYSAndmVyaWZ5JyBzdWJjb21tYW5kIHRvIHRoZSAnZ2l0IG1pZHgnIGJ1aWx0aW4gdG8gdmVyaWZ5IHRoZQorICBjb250ZW50cyBvZiB0aGUgbXVsdGktcGFjay1pbmRleCBmaWxlIG1hdGNoIHRoZSBvZmZzZXRzIGxpc3RlZCBpbgorICB0aGUgY29ycmVzcG9uZGluZyBwYWNrLWluZGV4ZXMuCisKKy0gVGhlIG11bHRpLXBhY2staW5kZXggYWxsb3dzIG1hbnkgcGFja2ZpbGVzLCBlc3BlY2lhbGx5IGluIGEgY29udGV4dAorICB3aGVyZSByZXBhY2tpbmcgaXMgZXhwZW5zaXZlIChzdWNoIGFzIGEgdmVyeSBsYXJnZSByZXBvKSwgb3IKKyAgdW5leHBlY3RlZCBtYWludGVuYW5jZSB0aW1lIGlzIHVuYWNjZXB0YWJsZSAoc3VjaCBhcyBhIGhpZ2gtZGVtYW5kCisgIGJ1aWxkIG1hY2hpbmUpLiBIb3dldmVyLCB0aGUgbXVsdGktcGFjay1pbmRleCBuZWVkcyB0byBiZSByZXdyaXR0ZW4KKyAgaW4gZnVsbCBldmVyeSB0aW1lLiBXZSBjYW4gZXh0ZW5kIHRoZSBmb3JtYXQgdG8gYmUgaW5jcmVtZW50YWwsIHNvCisgIHdyaXRlcyBhcmUgZmFzdC4gQnkgc3RvcmluZyBhIHNtYWxsICJ0aXAiIG11bHRpLXBhY2staW5kZXggdGhhdAorICBwb2ludHMgdG8gbGFyZ2UgImJhc2UiIE1JRFggZmlsZXMsIHdlIGNhbiBrZWVwIHdyaXRlcyBmYXN0IHdoaWxlCisgIHN0aWxsIHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgYmluYXJ5IHNlYXJjaGVzIHJlcXVpcmVkIGZvciBvYmplY3QKKyAgbG9va3Vwcy4KKworLSBUaGUgcmVhY2hhYmlsaXR5IGJpdG1hcCBpcyBjdXJyZW50bHkgcGFpcmVkIGRpcmVjdGx5IHdpdGggYSBzaW5nbGUKKyAgcGFja2ZpbGUsIHVzaW5nIHRoZSBwYWNrLW9yZGVyIGFzIHRoZSBvYmplY3Qgb3JkZXIgdG8gaG9wZWZ1bGx5CisgIGNvbXByZXNzIHRoZSBiaXRtYXBzIHdlbGwgdXNpbmcgcnVuLWxlbmd0aCBlbmNvZGluZy4gVGhpcyBjb3VsZCBiZQorICBleHRlbmRlZCB0byBwYWlyIGEgcmVhY2hhYmlsaXR5IGJpdG1hcCB3aXRoIGEgbXVsdGktcGFjay1pbmRleC4gSWYKKyAgdGhlIG11bHRpLXBhY2staW5kZXggaXMgZXh0ZW5kZWQgdG8gc3RvcmUgYSAic3RhYmxlIG9iamVjdCBvcmRlciIKKyAgKGEgZnVuY3Rpb24gT3JkZXIoaGFzaCkgPSBpbnRlZ2VyIHRoYXQgaXMgY29uc3RhbnQgZm9yIGEgZ2l2ZW4gaGFzaCwKKyAgZXZlbiBhcyB0aGUgbXVsdGktcGFjay1pbmRleCBpcyB1cGRhdGVkKSB0aGVuIGEgcmVhY2hhYmlsaXR5IGJpdG1hcAorICBjb3VsZCBwb2ludCB0byBhIG11bHRpLXBhY2staW5kZXggYW5kIGJlIHVwZGF0ZWQgaW5kZXBlbmRlbnRseS4KKworLSBQYWNrZmlsZXMgY2FuIGJlIG1hcmtlZCBhcyAic3BlY2lhbCIgdXNpbmcgZW1wdHkgZmlsZXMgdGhhdCBzaGFyZQorICB0aGUgaW5pdGlhbCBuYW1lIGJ1dCByZXBsYWNlICIucGFjayIgd2l0aCAiLmtlZXAiIG9yICIucHJvbWlzb3IiLgorICBXZSBjYW4gYWRkIGFuIG9wdGlvbmFsIGNodW5rIG9mIGRhdGEgdG8gdGhlIG11bHRpLXBhY2staW5kZXggdGhhdAorICByZWNvcmRzIGZsYWdzIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrZmlsZXMuIFRoaXMgYWxsb3dzIG5ldworICBzdGF0ZXMsIHN1Y2ggYXMgJ3JlcGFja2VkJyBvciAncmVkZWx0aWZpZWQnLCB0aGF0IGNhbiBoZWxwIHdpdGgKKyAgcGFjayBtYWludGVuYW5jZSBpbiBhIG11bHRpLXBhY2sgZW52aXJvbm1lbnQuIEl0IG1heSBhbHNvIGJlCisgIGhlbHBmdWwgdG8gb3JnYW5pemUgcGFja2ZpbGVzIGJ5IG9iamVjdCB0eXBlIChjb21taXQsIHRyZWUsIGJsb2IsCisgIGV0Yy4pIGFuZCB1c2UgdGhpcyBtZXRhZGF0YSB0byBoZWxwIHRoYXQgbWFpbnRlbmFuY2UuCisKKy0gVGhlIHBhcnRpYWwgY2xvbmUgZmVhdHVyZSByZWNvcmRzIHNwZWNpYWwgInByb21pc29yIiBwYWNrcyB0aGF0CisgIG1heSBwb2ludCB0byBvYmplY3RzIHRoYXQgYXJlIG5vdCBzdG9yZWQgbG9jYWxseSwgYnV0IGF2YWlsYWJsZQorICBvbiByZXF1ZXN0IHRvIGEgc2VydmVyLiBUaGUgbXVsdGktcGFjay1pbmRleCBkb2VzIG5vdCBjdXJyZW50bHkKKyAgdHJhY2sgdGhlc2UgcHJvbWlzb3IgcGFja3MuCisKK1JlbGF0ZWQgTGlua3MKKy0tLS0tLS0tLS0tLS0KK1swXSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvZ2l0L2lzc3Vlcy9kZXRhaWw/aWQ9NgorICAgIENocm9taXVtIHdvcmsgaXRlbSBmb3I6IE11bHRpLVBhY2sgSW5kZXggKE1JRFgpCisKK1sxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxODAxMDcxODE0NTkuMjIyOTA5LTEtZHN0b2xlZUBtaWNyb3NvZnQuY29tLworICAgIEFuIGVhcmxpZXIgUkZDIGZvciB0aGUgbXVsdGktcGFjay1pbmRleCBmZWF0dXJlCisKK1syXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvYWxwaW5lLkRFQi4yLjIwLjE4MDMwOTE1NTc1MTAuMjMxMDlAYWxleG12LWxpbnV4LworICAgIEdpdCBNZXJnZSAyMDE4IENvbnRyaWJ1dG9yJ3Mgc3VtbWl0IG5vdGVzIChpbmNsdWRlcyBkaXNjdXNzaW9uIG9mIE1JRFgpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhMTQyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stZm9ybWF0LnR4dApAQCAtMCwwICsxLDMzMiBAQAorR2l0IHBhY2sgZm9ybWF0Cis9PT09PT09PT09PT09PT0KKworPT0gcGFjay0qLnBhY2sgZmlsZXMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworICAgLSBBIGhlYWRlciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgNC1ieXRlIHNpZ25hdHVyZToKKyAgICAgICAgIFRoZSBzaWduYXR1cmUgaXM6IHsnUCcsICdBJywgJ0MnLCAnSyd9CisKKyAgICAgNC1ieXRlIHZlcnNpb24gbnVtYmVyIChuZXR3b3JrIGJ5dGUgb3JkZXIpOgorCSBHaXQgY3VycmVudGx5IGFjY2VwdHMgdmVyc2lvbiBudW1iZXIgMiBvciAzIGJ1dAorICAgICAgICAgZ2VuZXJhdGVzIHZlcnNpb24gMiBvbmx5LgorCisgICAgIDQtYnl0ZSBudW1iZXIgb2Ygb2JqZWN0cyBjb250YWluZWQgaW4gdGhlIHBhY2sgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKworICAgICBPYnNlcnZhdGlvbjogd2UgY2Fubm90IGhhdmUgbW9yZSB0aGFuIDRHIHZlcnNpb25zIDstKSBhbmQKKyAgICAgbW9yZSB0aGFuIDRHIG9iamVjdHMgaW4gYSBwYWNrLgorCisgICAtIFRoZSBoZWFkZXIgaXMgZm9sbG93ZWQgYnkgbnVtYmVyIG9mIG9iamVjdCBlbnRyaWVzLCBlYWNoIG9mCisgICAgIHdoaWNoIGxvb2tzIGxpa2UgdGhpczoKKworICAgICAodW5kZWx0aWZpZWQgcmVwcmVzZW50YXRpb24pCisgICAgIG4tYnl0ZSB0eXBlIGFuZCBsZW5ndGggKDMtYml0IHR5cGUsIChuLTEpKjcrNC1iaXQgbGVuZ3RoKQorICAgICBjb21wcmVzc2VkIGRhdGEKKworICAgICAoZGVsdGlmaWVkIHJlcHJlc2VudGF0aW9uKQorICAgICBuLWJ5dGUgdHlwZSBhbmQgbGVuZ3RoICgzLWJpdCB0eXBlLCAobi0xKSo3KzQtYml0IGxlbmd0aCkKKyAgICAgMjAtYnl0ZSBiYXNlIG9iamVjdCBuYW1lIGlmIE9CSl9SRUZfREVMVEEgb3IgYSBuZWdhdGl2ZSByZWxhdGl2ZQorCSBvZmZzZXQgZnJvbSB0aGUgZGVsdGEgb2JqZWN0J3MgcG9zaXRpb24gaW4gdGhlIHBhY2sgaWYgdGhpcworCSBpcyBhbiBPQkpfT0ZTX0RFTFRBIG9iamVjdAorICAgICBjb21wcmVzc2VkIGRlbHRhIGRhdGEKKworICAgICBPYnNlcnZhdGlvbjogbGVuZ3RoIG9mIGVhY2ggb2JqZWN0IGlzIGVuY29kZWQgaW4gYSB2YXJpYWJsZQorICAgICBsZW5ndGggZm9ybWF0IGFuZCBpcyBub3QgY29uc3RyYWluZWQgdG8gMzItYml0IG9yIGFueXRoaW5nLgorCisgIC0gVGhlIHRyYWlsZXIgcmVjb3JkcyAyMC1ieXRlIFNIQS0xIGNoZWNrc3VtIG9mIGFsbCBvZiB0aGUgYWJvdmUuCisKKz09PSBPYmplY3QgdHlwZXMKKworVmFsaWQgb2JqZWN0IHR5cGVzIGFyZToKKworLSBPQkpfQ09NTUlUICgxKQorLSBPQkpfVFJFRSAoMikKKy0gT0JKX0JMT0IgKDMpCistIE9CSl9UQUcgKDQpCistIE9CSl9PRlNfREVMVEEgKDYpCistIE9CSl9SRUZfREVMVEEgKDcpCisKK1R5cGUgNSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4gVHlwZSAwIGlzIGludmFsaWQuCisKKz09PSBEZWx0aWZpZWQgcmVwcmVzZW50YXRpb24KKworQ29uY2VwdHVhbGx5IHRoZXJlIGFyZSBvbmx5IGZvdXIgb2JqZWN0IHR5cGVzOiBjb21taXQsIHRyZWUsIHRhZyBhbmQKK2Jsb2IuIEhvd2V2ZXIgdG8gc2F2ZSBzcGFjZSwgYW4gb2JqZWN0IGNvdWxkIGJlIHN0b3JlZCBhcyBhICJkZWx0YSIgb2YKK2Fub3RoZXIgImJhc2UiIG9iamVjdC4gVGhlc2UgcmVwcmVzZW50YXRpb25zIGFyZSBhc3NpZ25lZCBuZXcgdHlwZXMKK29mcy1kZWx0YSBhbmQgcmVmLWRlbHRhLCB3aGljaCBpcyBvbmx5IHZhbGlkIGluIGEgcGFjayBmaWxlLgorCitCb3RoIG9mcy1kZWx0YSBhbmQgcmVmLWRlbHRhIHN0b3JlIHRoZSAiZGVsdGEiIHRvIGJlIGFwcGxpZWQgdG8KK2Fub3RoZXIgb2JqZWN0IChjYWxsZWQgJ2Jhc2Ugb2JqZWN0JykgdG8gcmVjb25zdHJ1Y3QgdGhlIG9iamVjdC4gVGhlCitkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcywgcmVmLWRlbHRhIGRpcmVjdGx5IGVuY29kZXMgMjAtYnl0ZSBiYXNlCitvYmplY3QgbmFtZS4gSWYgdGhlIGJhc2Ugb2JqZWN0IGlzIGluIHRoZSBzYW1lIHBhY2ssIG9mcy1kZWx0YSBlbmNvZGVzCit0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIG9iamVjdCBpbiB0aGUgcGFjayBpbnN0ZWFkLgorCitUaGUgYmFzZSBvYmplY3QgY291bGQgYWxzbyBiZSBkZWx0aWZpZWQgaWYgaXQncyBpbiB0aGUgc2FtZSBwYWNrLgorUmVmLWRlbHRhIGNhbiBhbHNvIHJlZmVyIHRvIGFuIG9iamVjdCBvdXRzaWRlIHRoZSBwYWNrIChpLmUuIHRoZQorc28tY2FsbGVkICJ0aGluIHBhY2siKS4gV2hlbiBzdG9yZWQgb24gZGlzayBob3dldmVyLCB0aGUgcGFjayBzaG91bGQKK2JlIHNlbGYgY29udGFpbmVkIHRvIGF2b2lkIGN5Y2xpYyBkZXBlbmRlbmN5LgorCitUaGUgZGVsdGEgZGF0YSBpcyBhIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucyB0byByZWNvbnN0cnVjdCBhbiBvYmplY3QKK2Zyb20gdGhlIGJhc2Ugb2JqZWN0LiBJZiB0aGUgYmFzZSBvYmplY3QgaXMgZGVsdGlmaWVkLCBpdCBtdXN0IGJlCitjb252ZXJ0ZWQgdG8gY2Fub25pY2FsIGZvcm0gZmlyc3QuIEVhY2ggaW5zdHJ1Y3Rpb24gYXBwZW5kcyBtb3JlIGFuZAorbW9yZSBkYXRhIHRvIHRoZSB0YXJnZXQgb2JqZWN0IHVudGlsIGl0J3MgY29tcGxldGUuIFRoZXJlIGFyZSB0d28KK3N1cHBvcnRlZCBpbnN0cnVjdGlvbnMgc28gZmFyOiBvbmUgZm9yIGNvcHkgYSBieXRlIHJhbmdlIGZyb20gdGhlCitzb3VyY2Ugb2JqZWN0IGFuZCBvbmUgZm9yIGluc2VydGluZyBuZXcgZGF0YSBlbWJlZGRlZCBpbiB0aGUKK2luc3RydWN0aW9uIGl0c2VsZi4KKworRWFjaCBpbnN0cnVjdGlvbiBoYXMgdmFyaWFibGUgbGVuZ3RoLiBJbnN0cnVjdGlvbiB0eXBlIGlzIGRldGVybWluZWQKK2J5IHRoZSBzZXZlbnRoIGJpdCBvZiB0aGUgZmlyc3Qgb2N0ZXQuIFRoZSBmb2xsb3dpbmcgZGlhZ3JhbXMgZm9sbG93Cit0aGUgY29udmVudGlvbiBpbiBSRkMgMTk1MSAoRGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0KS4KKworPT09PSBJbnN0cnVjdGlvbiB0byBjb3B5IGZyb20gYmFzZSBvYmplY3QKKworICArLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisgIHwgMXh4eHh4eHggfCBvZmZzZXQxIHwgb2Zmc2V0MiB8IG9mZnNldDMgfCBvZmZzZXQ0IHwgc2l6ZTEgfCBzaXplMiB8IHNpemUzIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworCitUaGlzIGlzIHRoZSBpbnN0cnVjdGlvbiBmb3JtYXQgdG8gY29weSBhIGJ5dGUgcmFuZ2UgZnJvbSB0aGUgc291cmNlCitvYmplY3QuIEl0IGVuY29kZXMgdGhlIG9mZnNldCB0byBjb3B5IGZyb20gYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8KK2NvcHkuIE9mZnNldCBhbmQgc2l6ZSBhcmUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlci4KKworQWxsIG9mZnNldCBhbmQgc2l6ZSBieXRlcyBhcmUgb3B0aW9uYWwuIFRoaXMgaXMgdG8gcmVkdWNlIHRoZQoraW5zdHJ1Y3Rpb24gc2l6ZSB3aGVuIGVuY29kaW5nIHNtYWxsIG9mZnNldHMgb3Igc2l6ZXMuIFRoZSBmaXJzdCBzZXZlbgorYml0cyBpbiB0aGUgZmlyc3Qgb2N0ZXQgZGV0ZXJtaW5lcyB3aGljaCBvZiB0aGUgbmV4dCBzZXZlbiBvY3RldHMgaXMKK3ByZXNlbnQuIElmIGJpdCB6ZXJvIGlzIHNldCwgb2Zmc2V0MSBpcyBwcmVzZW50LiBJZiBiaXQgb25lIGlzIHNldAorb2Zmc2V0MiBpcyBwcmVzZW50IGFuZCBzbyBvbi4KKworTm90ZSB0aGF0IGEgbW9yZSBjb21wYWN0IGluc3RydWN0aW9uIGRvZXMgbm90IGNoYW5nZSBvZmZzZXQgYW5kIHNpemUKK2VuY29kaW5nLiBGb3IgZXhhbXBsZSwgaWYgb25seSBvZmZzZXQyIGlzIG9taXR0ZWQgbGlrZSBiZWxvdywgb2Zmc2V0Mworc3RpbGwgY29udGFpbnMgYml0cyAxNi0yMy4gSXQgZG9lcyBub3QgYmVjb21lIG9mZnNldDIgYW5kIGNvbnRhaW5zCitiaXRzIDgtMTUgZXZlbiBpZiBpdCdzIHJpZ2h0IG5leHQgdG8gb2Zmc2V0MS4KKworICArLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworICB8IDEwMDAwMTAxIHwgb2Zmc2V0MSB8IG9mZnNldDMgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworCitJbiBpdHMgbW9zdCBjb21wYWN0IGZvcm0sIHRoaXMgaW5zdHJ1Y3Rpb24gb25seSB0YWtlcyB1cCBvbmUgYnl0ZQorKDB4ODApIHdpdGggYm90aCBvZmZzZXQgYW5kIHNpemUgb21pdHRlZCwgd2hpY2ggd2lsbCBoYXZlIGRlZmF1bHQKK3ZhbHVlcyB6ZXJvLiBUaGVyZSBpcyBhbm90aGVyIGV4Y2VwdGlvbjogc2l6ZSB6ZXJvIGlzIGF1dG9tYXRpY2FsbHkKK2NvbnZlcnRlZCB0byAweDEwMDAwLgorCis9PT09IEluc3RydWN0aW9uIHRvIGFkZCBuZXcgZGF0YQorCisgICstLS0tLS0tLS0tKz09PT09PT09PT09PSsKKyAgfCAweHh4eHh4eCB8ICAgIGRhdGEgICAgfAorICArLS0tLS0tLS0tLSs9PT09PT09PT09PT0rCisKK1RoaXMgaXMgdGhlIGluc3RydWN0aW9uIHRvIGNvbnN0cnVjdCB0YXJnZXQgb2JqZWN0IHdpdGhvdXQgdGhlIGJhc2UKK29iamVjdC4gVGhlIGZvbGxvd2luZyBkYXRhIGlzIGFwcGVuZGVkIHRvIHRoZSB0YXJnZXQgb2JqZWN0LiBUaGUgZmlyc3QKK3NldmVuIGJpdHMgb2YgdGhlIGZpcnN0IG9jdGV0IGRldGVybWluZXMgdGhlIHNpemUgb2YgZGF0YSBpbgorYnl0ZXMuIFRoZSBzaXplIG11c3QgYmUgbm9uLXplcm8uCisKKz09PT0gUmVzZXJ2ZWQgaW5zdHJ1Y3Rpb24KKworICArLS0tLS0tLS0tLSs9PT09PT09PT09PT0KKyAgfCAwMDAwMDAwMCB8CisgICstLS0tLS0tLS0tKz09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBpbnN0cnVjdGlvbiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4KKworPT0gT3JpZ2luYWwgKHZlcnNpb24gMSkgcGFjay0qLmlkeCBmaWxlcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgIC0gVGhlIGhlYWRlciBjb25zaXN0cyBvZiAyNTYgNC1ieXRlIG5ldHdvcmsgYnl0ZSBvcmRlcgorICAgIGludGVnZXJzLiAgTi10aCBlbnRyeSBvZiB0aGlzIHRhYmxlIHJlY29yZHMgdGhlIG51bWJlciBvZgorICAgIG9iamVjdHMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGFjaywgdGhlIGZpcnN0IGJ5dGUgb2Ygd2hvc2UKKyAgICBvYmplY3QgbmFtZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTi4gIFRoaXMgaXMgY2FsbGVkIHRoZQorICAgICdmaXJzdC1sZXZlbCBmYW4tb3V0JyB0YWJsZS4KKworICAtIFRoZSBoZWFkZXIgaXMgZm9sbG93ZWQgYnkgc29ydGVkIDI0LWJ5dGUgZW50cmllcywgb25lIGVudHJ5CisgICAgcGVyIG9iamVjdCBpbiB0aGUgcGFjay4gIEVhY2ggZW50cnkgaXM6CisKKyAgICA0LWJ5dGUgbmV0d29yayBieXRlIG9yZGVyIGludGVnZXIsIHJlY29yZGluZyB3aGVyZSB0aGUKKyAgICBvYmplY3QgaXMgc3RvcmVkIGluIHRoZSBwYWNrZmlsZSBhcyB0aGUgb2Zmc2V0IGZyb20gdGhlCisgICAgYmVnaW5uaW5nLgorCisgICAgMjAtYnl0ZSBvYmplY3QgbmFtZS4KKworICAtIFRoZSBmaWxlIGlzIGNvbmNsdWRlZCB3aXRoIGEgdHJhaWxlcjoKKworICAgIEEgY29weSBvZiB0aGUgMjAtYnl0ZSBTSEEtMSBjaGVja3N1bSBhdCB0aGUgZW5kIG9mCisgICAgY29ycmVzcG9uZGluZyBwYWNrZmlsZS4KKworICAgIDIwLWJ5dGUgU0hBLTEtY2hlY2tzdW0gb2YgYWxsIG9mIHRoZSBhYm92ZS4KKworUGFjayBJZHggZmlsZToKKworCS0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCitmYW5vdXQJICAgIHwgZmFub3V0WzBdID0gMiAoZm9yIGV4YW1wbGUpICAgIHwtLgordGFibGUJICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorCSAgICB8IGZhbm91dFsxXSAgICAgICAgICAgICAgICAgICAgICB8IHwKKwkgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8CisJICAgIHwgZmFub3V0WzJdICAgICAgICAgICAgICAgICAgICAgIHwgfAorCSAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+IHwKKwkgICAgfCBmYW5vdXRbMjU1XSA9IHRvdGFsIG9iamVjdHMgICAgfC0tLS4KKwktLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwKK21haW4JICAgIHwgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8CitpbmRleAkgICAgfCBvYmplY3QgbmFtZSAwMFhYWFhYWFhYWFhYWFhYWFggfCB8IHwKK3RhYmxlCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgfAorCSAgICB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfAorCSAgICB8IG9iamVjdCBuYW1lIDAwWFhYWFhYWFhYWFhYWFhYWCB8IHwgfAorCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rPCsgfAorCSAgLi18IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIDAxWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCSAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgfAorCSAgfCB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIDAxWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCSAgfCB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ICAgfAorCSAgfCB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIEZGWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCS0tfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rPC0tKwordHJhaWxlcgkgIHwgfCBwYWNrZmlsZSBjaGVja3N1bSAgICAgICAgICAgICAgfAorCSAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8IHwgaWR4ZmlsZSBjaGVja3N1bSAgICAgICAgICAgICAgIHwKKwkgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIC4tLS0tLS0tLgorICAgICAgICAgICAgICAgICAgfAorUGFjayBmaWxlIGVudHJ5OiA8KworCisgICAgIHBhY2tlZCBvYmplY3QgaGVhZGVyOgorCTEtYnl0ZSBzaXplIGV4dGVuc2lvbiBiaXQgKE1TQikKKwkgICAgICAgdHlwZSAobmV4dCAzIGJpdCkKKwkgICAgICAgc2l6ZTAgKGxvd2VyIDQtYml0KQorICAgICAgICBuLWJ5dGUgc2l6ZU4gKGFzIGxvbmcgYXMgTVNCIGlzIHNldCwgZWFjaCA3LWJpdCkKKwkJc2l6ZTAuLnNpemVOIGZvcm0gNCs3KzcrLi4rNyBiaXQgaW50ZWdlciwgc2l6ZTAKKwkJaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IHBhcnQsIGFuZCBzaXplTiBpcyB0aGUKKwkJbW9zdCBzaWduaWZpY2FudCBwYXJ0LgorICAgICBwYWNrZWQgb2JqZWN0IGRhdGE6CisgICAgICAgIElmIGl0IGlzIG5vdCBERUxUQSwgdGhlbiBkZWZsYXRlZCBieXRlcyAodGhlIHNpemUgYWJvdmUKKwkJaXMgdGhlIHNpemUgYmVmb3JlIGNvbXByZXNzaW9uKS4KKwlJZiBpdCBpcyBSRUZfREVMVEEsIHRoZW4KKwkgIDIwLWJ5dGUgYmFzZSBvYmplY3QgbmFtZSBTSEEtMSAodGhlIHNpemUgYWJvdmUgaXMgdGhlCisJCXNpemUgb2YgdGhlIGRlbHRhIGRhdGEgdGhhdCBmb2xsb3dzKS4KKyAgICAgICAgICBkZWx0YSBkYXRhLCBkZWZsYXRlZC4KKwlJZiBpdCBpcyBPRlNfREVMVEEsIHRoZW4KKwkgIG4tYnl0ZSBvZmZzZXQgKHNlZSBiZWxvdykgaW50ZXJwcmV0ZWQgYXMgYSBuZWdhdGl2ZQorCQlvZmZzZXQgZnJvbSB0aGUgdHlwZS1ieXRlIG9mIHRoZSBoZWFkZXIgb2YgdGhlCisJCW9mcy1kZWx0YSBlbnRyeSAodGhlIHNpemUgYWJvdmUgaXMgdGhlIHNpemUgb2YKKwkJdGhlIGRlbHRhIGRhdGEgdGhhdCBmb2xsb3dzKS4KKwkgIGRlbHRhIGRhdGEsIGRlZmxhdGVkLgorCisgICAgIG9mZnNldCBlbmNvZGluZzoKKwkgIG4gYnl0ZXMgd2l0aCBNU0Igc2V0IGluIGFsbCBidXQgdGhlIGxhc3Qgb25lLgorCSAgVGhlIG9mZnNldCBpcyB0aGVuIHRoZSBudW1iZXIgY29uc3RydWN0ZWQgYnkKKwkgIGNvbmNhdGVuYXRpbmcgdGhlIGxvd2VyIDcgYml0IG9mIGVhY2ggYnl0ZSwgYW5kCisJICBmb3IgbiA+PSAyIGFkZGluZyAyXjcgKyAyXjE0ICsgLi4uICsgMl4oNyoobi0xKSkKKwkgIHRvIHRoZSByZXN1bHQuCisKKworCis9PSBWZXJzaW9uIDIgcGFjay0qLmlkeCBmaWxlcyBzdXBwb3J0IHBhY2tzIGxhcmdlciB0aGFuIDQgR2lCLCBhbmQKKyAgIGhhdmUgc29tZSBvdGhlciByZW9yZ2FuaXphdGlvbnMuICBUaGV5IGhhdmUgdGhlIGZvcm1hdDoKKworICAtIEEgNC1ieXRlIG1hZ2ljIG51bWJlciAnXDM3N3RPYycgd2hpY2ggaXMgYW4gdW5yZWFzb25hYmxlCisgICAgZmFub3V0WzBdIHZhbHVlLgorCisgIC0gQSA0LWJ5dGUgdmVyc2lvbiBudW1iZXIgKD0gMikKKworICAtIEEgMjU2LWVudHJ5IGZhbi1vdXQgdGFibGUganVzdCBsaWtlIHYxLgorCisgIC0gQSB0YWJsZSBvZiBzb3J0ZWQgMjAtYnl0ZSBTSEEtMSBvYmplY3QgbmFtZXMuICBUaGVzZSBhcmUKKyAgICBwYWNrZWQgdG9nZXRoZXIgd2l0aG91dCBvZmZzZXQgdmFsdWVzIHRvIHJlZHVjZSB0aGUgY2FjaGUKKyAgICBmb290cHJpbnQgb2YgdGhlIGJpbmFyeSBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgb2JqZWN0IG5hbWUuCisKKyAgLSBBIHRhYmxlIG9mIDQtYnl0ZSBDUkMzMiB2YWx1ZXMgb2YgdGhlIHBhY2tlZCBvYmplY3QgZGF0YS4KKyAgICBUaGlzIGlzIG5ldyBpbiB2MiBzbyBjb21wcmVzc2VkIGRhdGEgY2FuIGJlIGNvcGllZCBkaXJlY3RseQorICAgIGZyb20gcGFjayB0byBwYWNrIGR1cmluZyByZXBhY2tpbmcgd2l0aG91dCB1bmRldGVjdGVkCisgICAgZGF0YSBjb3JydXB0aW9uLgorCisgIC0gQSB0YWJsZSBvZiA0LWJ5dGUgb2Zmc2V0IHZhbHVlcyAoaW4gbmV0d29yayBieXRlIG9yZGVyKS4KKyAgICBUaGVzZSBhcmUgdXN1YWxseSAzMS1iaXQgcGFjayBmaWxlIG9mZnNldHMsIGJ1dCBsYXJnZQorICAgIG9mZnNldHMgYXJlIGVuY29kZWQgYXMgYW4gaW5kZXggaW50byB0aGUgbmV4dCB0YWJsZSB3aXRoCisgICAgdGhlIG1zYml0IHNldC4KKworICAtIEEgdGFibGUgb2YgOC1ieXRlIG9mZnNldCBlbnRyaWVzIChlbXB0eSBmb3IgcGFjayBmaWxlcyBsZXNzCisgICAgdGhhbiAyIEdpQikuICBQYWNrIGZpbGVzIGFyZSBvcmdhbml6ZWQgd2l0aCBoZWF2aWx5IHVzZWQKKyAgICBvYmplY3RzIHRvd2FyZCB0aGUgZnJvbnQsIHNvIG1vc3Qgb2JqZWN0IHJlZmVyZW5jZXMgc2hvdWxkCisgICAgbm90IG5lZWQgdG8gcmVmZXIgdG8gdGhpcyB0YWJsZS4KKworICAtIFRoZSBzYW1lIHRyYWlsZXIgYXMgYSB2MSBwYWNrIGZpbGU6CisKKyAgICBBIGNvcHkgb2YgdGhlIDIwLWJ5dGUgU0hBLTEgY2hlY2tzdW0gYXQgdGhlIGVuZCBvZgorICAgIGNvcnJlc3BvbmRpbmcgcGFja2ZpbGUuCisKKyAgICAyMC1ieXRlIFNIQS0xLWNoZWNrc3VtIG9mIGFsbCBvZiB0aGUgYWJvdmUuCisKKz09IG11bHRpLXBhY2staW5kZXggKE1JRFgpIGZpbGVzIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKK1RoZSBtdWx0aS1wYWNrLWluZGV4IGZpbGVzIHJlZmVyIHRvIG11bHRpcGxlIHBhY2stZmlsZXMgYW5kIGxvb3NlIG9iamVjdHMuCisKK0luIG9yZGVyIHRvIGFsbG93IGV4dGVuc2lvbnMgdGhhdCBhZGQgZXh0cmEgZGF0YSB0byB0aGUgTUlEWCwgd2Ugb3JnYW5pemUKK3RoZSBib2R5IGludG8gImNodW5rcyIgYW5kIHByb3ZpZGUgYSBsb29rdXAgdGFibGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKK2JvZHkuIFRoZSBoZWFkZXIgaW5jbHVkZXMgY2VydGFpbiBsZW5ndGggdmFsdWVzLCBzdWNoIGFzIHRoZSBudW1iZXIgb2YgcGFja3MsCit0aGUgbnVtYmVyIG9mIGJhc2UgTUlEWCBmaWxlcywgaGFzaCBsZW5ndGhzIGFuZCB0eXBlcy4KKworQWxsIDQtYnl0ZSBudW1iZXJzIGFyZSBpbiBuZXR3b3JrIG9yZGVyLgorCitIRUFERVI6CisKKwk0LWJ5dGUgc2lnbmF0dXJlOgorCSAgICBUaGUgc2lnbmF0dXJlIGlzOiB7J00nLCAnSScsICdEJywgJ1gnfQorCisJMS1ieXRlIHZlcnNpb24gbnVtYmVyOgorCSAgICBHaXQgb25seSB3cml0ZXMgb3IgcmVjb2duaXplcyB2ZXJzaW9uIDEuCisKKwkxLWJ5dGUgT2JqZWN0IElkIFZlcnNpb24KKwkgICAgR2l0IG9ubHkgd3JpdGVzIG9yIHJlY29nbml6ZXMgdmVyc2lvbiAxIChTSEExKS4KKworCTEtYnl0ZSBudW1iZXIgb2YgImNodW5rcyIKKworCTEtYnl0ZSBudW1iZXIgb2YgYmFzZSBtdWx0aS1wYWNrLWluZGV4IGZpbGVzOgorCSAgICBUaGlzIHZhbHVlIGlzIGN1cnJlbnRseSBhbHdheXMgemVyby4KKworCTQtYnl0ZSBudW1iZXIgb2YgcGFjayBmaWxlcworCitDSFVOSyBMT09LVVA6CisKKwkoQyArIDEpICogMTIgYnl0ZXMgcHJvdmlkaW5nIHRoZSBjaHVuayBvZmZzZXRzOgorCSAgICBGaXJzdCA0IGJ5dGVzIGRlc2NyaWJlIGNodW5rIGlkLiBWYWx1ZSAwIGlzIGEgdGVybWluYXRpbmcgbGFiZWwuCisJICAgIE90aGVyIDggYnl0ZXMgcHJvdmlkZSBvZmZzZXQgaW4gY3VycmVudCBmaWxlIGZvciBjaHVuayB0byBzdGFydC4KKwkgICAgKENodW5rcyBhcmUgcHJvdmlkZWQgaW4gZmlsZS1vcmRlciwgc28geW91IGNhbiBpbmZlciB0aGUgbGVuZ3RoCisJICAgIHVzaW5nIHRoZSBuZXh0IGNodW5rIHBvc2l0aW9uIGlmIG5lY2Vzc2FyeS4pCisKKwlUaGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJvZHkgaXMgZGVzY3JpYmVkIG9uZSBjaHVuayBhdCBhIHRpbWUsIGFuZAorCXRoZXNlIGNodW5rcyBtYXkgYmUgZ2l2ZW4gaW4gYW55IG9yZGVyLiBDaHVua3MgYXJlIHJlcXVpcmVkIHVubGVzcworCW90aGVyd2lzZSBzcGVjaWZpZWQuCisKK0NIVU5LIERBVEE6CisKKwlQYWNrZmlsZSBOYW1lcyAoSUQ6IHsnUCcsICdOJywgJ0EnLCAnTSd9KQorCSAgICBTdG9yZXMgdGhlIHBhY2tmaWxlIG5hbWVzIGFzIGNvbmNhdGVuYXRlZCwgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuCisJICAgIFBhY2tmaWxlcyBtdXN0IGJlIGxpc3RlZCBpbiBsZXhpY29ncmFwaGljIG9yZGVyIGZvciBmYXN0IGxvb2t1cHMgYnkKKwkgICAgbmFtZS4gVGhpcyBpcyB0aGUgb25seSBjaHVuayBub3QgZ3VhcmFudGVlZCB0byBiZSBhIG11bHRpcGxlIG9mIGZvdXIKKwkgICAgYnl0ZXMgaW4gbGVuZ3RoLCBzbyBzaG91bGQgYmUgdGhlIGxhc3QgY2h1bmsgZm9yIGFsaWdubWVudCByZWFzb25zLgorCisJT0lEIEZhbm91dCAoSUQ6IHsnTycsICdJJywgJ0QnLCAnRid9KQorCSAgICBUaGUgaXRoIGVudHJ5LCBGW2ldLCBzdG9yZXMgdGhlIG51bWJlciBvZiBPSURzIHdpdGggZmlyc3QKKwkgICAgYnl0ZSBhdCBtb3N0IGkuIFRodXMgRlsyNTVdIHN0b3JlcyB0aGUgdG90YWwKKwkgICAgbnVtYmVyIG9mIG9iamVjdHMuCisKKwlPSUQgTG9va3VwIChJRDogeydPJywgJ0knLCAnRCcsICdMJ30pCisJICAgIFRoZSBPSURzIGZvciBhbGwgb2JqZWN0cyBpbiB0aGUgTUlEWCBhcmUgc3RvcmVkIGluIGxleGljb2dyYXBoaWMKKwkgICAgb3JkZXIgaW4gdGhpcyBjaHVuay4KKworCU9iamVjdCBPZmZzZXRzIChJRDogeydPJywgJ08nLCAnRicsICdGJ30pCisJICAgIFN0b3JlcyB0d28gNC1ieXRlIHZhbHVlcyBmb3IgZXZlcnkgb2JqZWN0LgorCSAgICAxOiBUaGUgcGFjay1pbnQtaWQgZm9yIHRoZSBwYWNrIHN0b3JpbmcgdGhpcyBvYmplY3QuCisJICAgIDI6IFRoZSBvZmZzZXQgd2l0aGluIHRoZSBwYWNrLgorCQlJZiBhbGwgb2Zmc2V0cyBhcmUgbGVzcyB0aGFuIDJeMzIsIHRoZW4gdGhlIGxhcmdlIG9mZnNldCBjaHVuaworCQl3aWxsIG5vdCBleGlzdCBhbmQgb2Zmc2V0cyBhcmUgc3RvcmVkIGFzIGluIElEWCB2MS4KKwkJSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG9mZnNldCB2YWx1ZSBsYXJnZXIgdGhhbiAyXjMyLTEsIHRoZW4KKwkJdGhlIGxhcmdlIG9mZnNldCBjaHVuayBtdXN0IGV4aXN0LCBhbmQgb2Zmc2V0cyBsYXJnZXIgdGhhbgorCQkyXjMxLTEgbXVzdCBiZSBzdG9yZWQgaW4gaXQgaW5zdGVhZC4gSWYgdGhlIGxhcmdlIG9mZnNldCBjaHVuaworCQlleGlzdHMgYW5kIHRoZSAzMXN0IGJpdCBpcyBvbiwgdGhlbiByZW1vdmluZyB0aGF0IGJpdCByZXZlYWxzCisJCXRoZSByb3cgaW4gdGhlIGxhcmdlIG9mZnNldHMgY29udGFpbmluZyB0aGUgOC1ieXRlIG9mZnNldCBvZgorCQl0aGlzIG9iamVjdC4KKworCVtPcHRpb25hbF0gT2JqZWN0IExhcmdlIE9mZnNldHMgKElEOiB7J0wnLCAnTycsICdGJywgJ0YnfSkKKwkgICAgOC1ieXRlIG9mZnNldHMgaW50byBsYXJnZSBwYWNrZmlsZXMuCisKK1RSQUlMRVI6CisKKwkyMC1ieXRlIFNIQTEtY2hlY2tzdW0gb2YgdGhlIGFib3ZlIGNvbnRlbnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1oZXVyaXN0aWNzLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2staGV1cmlzdGljcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhMDdkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2staGV1cmlzdGljcy50eHQKQEAgLTAsMCArMSw0NjAgQEAKK0NvbmNlcm5pbmcgR2l0J3MgUGFja2luZyBIZXVyaXN0aWNzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIE9oLCBoZXJlJ3MgYSByZWFsbHkgc3R1cGlkIHF1ZXN0aW9uOgorCisgICAgICAgICAgICAgICAgICBXaGVyZSBkbyBJIGdvCisgICAgICAgICAgICAgICB0byBsZWFybiB0aGUgZGV0YWlscworCSAgICBvZiBHaXQncyBwYWNraW5nIGhldXJpc3RpY3M/CisKK0JlIGNhcmVmdWwgd2hhdCB5b3UgYXNrIQorCitGb2xsb3dlcnMgb2YgdGhlIEdpdCwgcGxlYXNlIG9wZW4gdGhlIEdpdCBJUkMgTG9nIGFuZCB0dXJuIHRvCitGZWJydWFyeSAxMCwgMjAwNi4KKworSXQncyBhIHJhcmUgb2NjYXNpb24sIGFuZCB3ZSBhcmUgam9pbmVkIGJ5IHRoZSBLaW5nIEdpdCBIaW1zZWxmLAorTGludXMgVG9ydmFsZHMgKGxpbnVzKS4gIE5hdGhhbmllbCBTbWl0aCwgKG5qc2ApLCBoYXMgdGhlIGZsb29yCithbmQgc2Vla3MgZW5saWdodGVubWVudC4gIE90aGVycyBhcmUgcHJlc2VudCwgYnV0IHNpbGVudC4KKworTGV0J3MgbGlzdGVuIGluIQorCisgICAgPG5qc2A+IE9oLCBoZXJlJ3MgYSByZWFsbHkgc3R1cGlkIHF1ZXN0aW9uIC0tIHdoZXJlIGRvIEkgZ28gdG8KKwlsZWFybiB0aGUgZGV0YWlscyBvZiBHaXQncyBwYWNraW5nIGhldXJpc3RpY3M/ICBnb29nbGUgYXZhaWxzCisgICAgICAgIG1lIG5vdCwgcmVhZGluZyB0aGUgc291cmNlIGRpZG4ndCBoZWxwIGEgbG90LCBhbmQgd2FkaW5nCisgICAgICAgIHRocm91Z2ggdGhlIHdob2xlIG1haWxpbmcgbGlzdCBzZWVtcyBsZXNzIGVmZmljaWVudCB0aGFuIGFueQorICAgICAgICBvZiB0aGF0LgorCitJdCBpcyBhIGJvbGQgc3RhcnQhICBBIHBsZWEgZm9yIGhlbHAgY29tYmluZWQgd2l0aCBhIHNpbXVsdGFuZW91cwordHJpLXBhcnQgYXR0YWNrIG9uIHNvbWUgb2YgdGhlIHRyaWVkIGFuZCB0cnVlIG1haW5zdGF5cyBpbiB0aGUgcXVlc3QKK2ZvciBlbmxpZ2h0ZW5tZW50LiAgQnJhc2ggYWNjdXNhdGlvbnMgb2YgZ29vZ2xlIGJlaW5nIHVzZWxlc3MuIEh1YnJpcyEKK01hbGlnbmluZyB0aGUgc291cmNlLiAgSGVyZXN5ISAgRGlzZGFpbiBmb3IgdGhlIG1haWxpbmcgbGlzdCBhcmNoaXZlcy4KK1dvZS4KKworICAgIDxwYXNreT4geWVzLCB0aGUgcGFja2luZy1yZWxhdGVkIGRlbHRhIHN0dWZmIGlzIHNvbWV3aGF0CisgICAgICAgIG15c3RlcmlvdXMgZXZlbiBmb3IgbWUgOykKKworQWghICBNb2Rlc3R5IGFmdGVyIGFsbC4KKworICAgIDxsaW51cz4gbmpzLCBJIGRvbid0IHRoaW5rIHRoZSBkb2NzIGV4aXN0LiBUaGF0J3Mgc29tZXRoaW5nIHdoZXJlCisJIEkgZG9uJ3QgdGhpbmsgYW55Ym9keSBlbHNlIHRoYW4gbWUgZXZlbiByZWFsbHkgZ290IGludm9sdmVkLgorCSBNb3N0IG9mIHRoZSByZXN0IG9mIEdpdCBvdGhlcnMgaGF2ZSBiZWVuIGJ1c3kgd2l0aCAoZXNwZWNpYWxseQorCSBKdW5pbyksIGJ1dCBwYWNraW5nIG5vYm9keSB0b3VjaGVkIGFmdGVyIEkgZGlkIGl0LgorCitJdCdzIGNyeXB0aWMsIHlldCB2YWd1ZS4gIExpbnVzIGluIHN0eWxlIGZvciBzdXJlLiAgV2lzZSBtZW4KK2ludGVycHJldCB0aGlzIGFzIGFuIGFwb2xvZ3kuICBBIGZldyBhcmd1ZSBpdCBpcyBtZXJlbHkgYQorc3RhdGVtZW50IG9mIGZhY3QuCisKKyAgICA8bmpzYD4gSSBndWVzcyB0aGUgbmV4dCBzdGVwIGlzICJyZWFkIHRoZSBzb3VyY2UgYWdhaW4iLCBidXQgSQorICAgICAgICBoYXZlIHRvIGJ1aWxkIHVwIGEgY2VydGFpbiBsZXZlbCBvZiBndW1wdGlvbiBmaXJzdCA6LSkKKworSW5kZWVkISAgT24gYm90aCBwb2ludHMuCisKKyAgICA8bGludXM+IFRoZSBwYWNraW5nIGhldXJpc3RpYyBpcyBhY3R1YWxseSByZWFsbHkgcmVhbGx5IHNpbXBsZS4KKworQmFpdC4uLgorCisgICAgPGxpbnVzPiBCdXQgc3RyYW5nZS4KKworQW5kIHN3aXRjaC4gIFRoYXQgb3VnaHQgdG8gZG8gaXQhCisKKyAgICA8bGludXM+IFJlbWVtYmVyOiBHaXQgcmVhbGx5IGRvZXNuJ3QgZm9sbG93IGZpbGVzLiBTbyB3aGF0IGl0IGRvZXMgaXMKKyAgICAgICAgLSBnZW5lcmF0ZSBhIGxpc3Qgb2YgYWxsIG9iamVjdHMKKyAgICAgICAgLSBzb3J0IHRoZSBsaXN0IGFjY29yZGluZyB0byBtYWdpYyBoZXVyaXN0aWNzCisgICAgICAgIC0gd2FsayB0aGUgbGlzdCwgdXNpbmcgYSBzbGlkaW5nIHdpbmRvdywgc2VlaW5nIGlmIGFuIG9iamVjdAorICAgICAgICAgIGNhbiBiZSBkaWZmZWQgYWdhaW5zdCBhbm90aGVyIG9iamVjdCBpbiB0aGUgd2luZG93CisgICAgICAgIC0gd3JpdGUgb3V0IHRoZSBsaXN0IGluIHJlY2VuY3kgb3JkZXIKKworVGhlIHRyYWRpdGlvbmFsIHVuZGVyc3RhdGVtZW50OgorCisgICAgPG5qc2A+IEkgc3VzcGVjdCB0aGF0IHdoYXQgSSdtIG1pc3NpbmcgaXMgdGhlIHByZWNpc2UgZGVmaW5pdGlvbiBvZgorICAgICAgICB0aGUgd29yZCAibWFnaWMiCisKK1RoZSB0cmFkaXRpb25hbCBpbnNpZ2h0OgorCisgICAgPHBhc2t5PiB5ZXMKKworQW5kIEJhYmVsLWxpa2UgY29uZnVzaW9uIGZsb3dlZC4KKworICAgIDxuanNgPiBvaCwgaG1tLCBhbmQgSSdtIG5vdCBzdXJlIHdoYXQgdGhpcyBzbGlkaW5nIHdpbmRvdyBtZWFucyBlaXRoZXIKKworICAgIDxwYXNreT4gaWlyYywgaXQgYXBwZWFyZWQgdG8gbWUgdG8gYmUganVzdCB0aGUgc2hhMSBvZiB0aGUgb2JqZWN0CisgICAgICAgIHdoZW4gcmVhZGluZyB0aGUgY29kZSBjYXN1YWxseSAuLi4KKworICAgICAgICAuLi4gd2hpY2ggc2ltcGx5IGRvZXNuJ3Qgc291bmQgYXMgYSB2ZXJ5IGdvb2QgaGV1cmlzdGljcywgdGhvdWdoIDspCisKKyAgICA8bmpzYD4gLi4uLi5hbmQgcmVjZW5jeSBvcmRlci4gIG9rYXksIEkgdGhpbmsgaXQncyBjbGVhciBJIGRpZG4ndAorICAgICAgIGV2ZW4gcmVhbGl6ZSBob3cgbXVjaCBJIHdhc24ndCByZWFsaXppbmcgOi0pCisKK0FoLCBncmFzc2hvcHBlciEgIEFuZCB0aHVzIHRoZSBlbmxpZ2h0ZW5tZW50IGJlZ2lucyBhbmV3LgorCisgICAgPGxpbnVzPiBUaGUgIm1hZ2ljIiBpcyBhY3R1YWxseSBpbiB0aGVvcnkgdG90YWxseSBhcmJpdHJhcnkuCisgICAgICAgIEFOWSBvcmRlciB3aWxsIGdpdmUgeW91IGEgd29ya2luZyBwYWNrLCBidXQgbm8sIGl0J3Mgbm90CisJb3JkZXJlZCBieSBTSEEtMS4KKworICAgICAgICBCZWZvcmUgdGFsa2luZyBhYm91dCB0aGUgb3JkZXJpbmcgZm9yIHRoZSBzbGlkaW5nIGRlbHRhCisgICAgICAgIHdpbmRvdywgbGV0J3MgdGFsayBhYm91dCB0aGUgcmVjZW5jeSBvcmRlci4gVGhhdCdzIG1vcmUKKyAgICAgICAgaW1wb3J0YW50IGluIG9uZSB3YXkuCisKKyAgICA8bmpzYD4gUmlnaHQsIGJ1dCBpZiBhbGwgeW91IHdhbnQgaXMgYSB3b3JraW5nIHdheSB0byBwYWNrIHRoaW5ncworICAgICAgICB0b2dldGhlciwgeW91IGNvdWxkIGp1c3QgdXNlIGNhdCBhbmQgc2F2ZSB5b3Vyc2VsZiBzb21lCisgICAgICAgIHRyb3VibGUuLi4KKworV2FhYWl0IGZvciBpdC4uLi4KKworICAgIDxsaW51cz4gVGhlIHJlY2VuY3kgb3JkZXJpbmcgKHdoaWNoIGlzIGJhc2ljYWxseTogcHV0IG9iamVjdHMKKyAgICAgICAgX3BoeXNpY2FsbHlfIGludG8gdGhlIHBhY2sgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUKKyAgICAgICAgInJlYWNoYWJsZSIgZnJvbSB0aGUgaGVhZCkgaXMgaW1wb3J0YW50LgorCisgICAgPG5qc2A+IG9rYXkKKworICAgIDxsaW51cz4gSXQncyBpbXBvcnRhbnQgYmVjYXVzZSB0aGF0J3MgdGhlIHRoaW5nIHRoYXQgZ2l2ZXMgcGFja3MKKyAgICAgICAgZ29vZCBsb2NhbGl0eS4gSXQga2VlcHMgdGhlIG9iamVjdHMgY2xvc2UgdG8gdGhlIGhlYWQgKHdoZXRoZXIKKyAgICAgICAgdGhleSBhcmUgb2xkIG9yIG5ldywgYnV0IHRoZXkgYXJlIF9yZWFjaGFibGVfIGZyb20gdGhlIGhlYWQpCisgICAgICAgIGF0IHRoZSBoZWFkIG9mIHRoZSBwYWNrLiBTbyBwYWNrcyBhY3R1YWxseSBoYXZlIGFic29sdXRlbHkKKyAgICAgICAgX3dvbmRlcmZ1bF8gSU8gcGF0dGVybnMuCisKK1JlYWQgdGhhdCBhZ2FpbiwgYmVjYXVzZSBpdCBpcyBpbXBvcnRhbnQuCisKKyAgICA8bGludXM+IEJ1dCByZWNlbmN5IG9yZGVyaW5nIGlzIHRvdGFsbHkgdXNlbGVzcyBmb3IgZGVjaWRpbmcgaG93CisgICAgICAgIHRvIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBkZWx0YXMsIHNvIHRoZSBkZWx0YSBvcmRlcmluZyBpcworICAgICAgICBzb21ldGhpbmcgZWxzZS4KKworICAgICAgICBUaGUgZGVsdGEgb3JkZXJpbmcgaXMgKHdhaXQgZm9yIGl0KToKKyAgICAgICAgLSBmaXJzdCBzb3J0IGJ5IHRoZSAiYmFzZW5hbWUiIG9mIHRoZSBvYmplY3QsIGFzIGRlZmluZWQgYnkKKyAgICAgICAgICB0aGUgbmFtZSB0aGUgb2JqZWN0IHdhcyBfZmlyc3RfIHJlYWNoZWQgdGhyb3VnaCB3aGVuCisgICAgICAgICAgZ2VuZXJhdGluZyB0aGUgb2JqZWN0IGxpc3QKKyAgICAgICAgLSB3aXRoaW4gdGhlIHNhbWUgYmFzZW5hbWUsIHNvcnQgYnkgc2l6ZSBvZiB0aGUgb2JqZWN0CisgICAgICAgIC0gYnV0IGFsd2F5cyBzb3J0IGRpZmZlcmVudCB0eXBlcyBzZXBhcmF0ZWx5IChjb21taXRzIGZpcnN0KS4KKworICAgICAgICBUaGF0J3Mgbm90IGV4YWN0bHkgaXQsIGJ1dCBpdCdzIHZlcnkgY2xvc2UuCisKKyAgICA8bmpzYD4gVGhlICJfZmlyc3RfIHJlYWNoZWQiIHRoaW5nIGlzIG5vdCB0b28gaW1wb3J0YW50LCBqdXN0IHlvdQorICAgICAgICBuZWVkIHNvbWUgd2F5IHRvIGJyZWFrIHRpZXMgc2luY2UgdGhlIHNhbWUgb2JqZWN0cyBtYXkgYmUKKyAgICAgICAgcmVhY2hhYmxlIG1hbnkgd2F5cywgeWVzPworCitBbmQgYXMgaWYgdG8gY2xhcmlmeToKKworICAgIDxsaW51cz4gVGhlIHBvaW50IGlzIHRoYXQgaXQncyBhbGwgcmVhbGx5IGp1c3QgYW55IHJhbmRvbQorICAgICAgICBoZXVyaXN0aWMsIGFuZCB0aGUgb3JkZXJpbmcgaXMgdG90YWxseSB1bmltcG9ydGFudCBmb3IKKyAgICAgICAgY29ycmVjdG5lc3MsIGJ1dCBpdCBoZWxwcyBhIGxvdCBpZiB0aGUgaGV1cmlzdGljIGdpdmVzCisgICAgICAgICJjbHVtcGluZyIgZm9yIHRoaW5ncyB0aGF0IGFyZSBsaWtlbHkgdG8gZGVsdGEgd2VsbCBhZ2FpbnN0CisgICAgICAgIGVhY2ggb3RoZXIuCisKK0l0IGlzIGFuIGltcG9ydGFudCBwb2ludCwgc28gc2VjcmV0bHksIEkgZGlkIG15IG93biByZXNlYXJjaCBhbmQgaGF2ZQoraW5jbHVkZWQgbXkgcmVzdWx0cyBiZWxvdy4gIFRvIGJlIGZhaXIsIGl0IGhhcyBjaGFuZ2VkIHNvbWUgb3ZlciB0aW1lLgorQW5kIHRocm91Z2ggdGhlIG1hZ2ljIG9mIFJldmlzaW9uaXN0aWMgSGlzdG9yeSwgSSBkcmF3IHVwb24gdGhpcyBlbnRyeQorZnJvbSBUaGUgR2l0IElSQyBMb2dzIG9uIG15IGZhdGhlcidzIGJpcnRoZGF5LCBNYXJjaCAxOgorCisgICAgPGdpdHN0ZXI+IFRoZSBxdW90ZSBmcm9tIHRoZSBhYm92ZSBsaW51cyBzaG91bGQgYmUgcmV3cml0dGVuIGEKKyAgICAgICAgYml0ICh3YWl0IGZvciBpdCk6CisgICAgICAgIC0gZmlyc3Qgc29ydCBieSB0eXBlLiAgRGlmZmVyZW50IG9iamVjdHMgbmV2ZXIgZGVsdGEgd2l0aAorCSAgZWFjaCBvdGhlci4KKyAgICAgICAgLSB0aGVuIHNvcnQgYnkgZmlsZW5hbWUvZGlybmFtZS4gIGhhc2ggb2YgdGhlIGJhc2VuYW1lCisgICAgICAgICAgb2NjdXBpZXMgdGhlIHRvcCBCSVRTX1BFUl9JTlQtRElSX0JJVFMgYml0cywgYW5kIGJvdHRvbQorICAgICAgICAgIERJUl9CSVRTIGFyZSBmb3IgdGhlIGhhc2ggb2YgbGVhZGluZyBwYXRoIGVsZW1lbnRzLgorICAgICAgICAtIHRoZW4gaWYgd2UgYXJlIGRvaW5nICJ0aGluIiBwYWNrLCB0aGUgb2JqZWN0cyB3ZSBhcmUgX25vdF8KKyAgICAgICAgICBnb2luZyB0byBwYWNrIGJ1dCB3ZSBrbm93IGFib3V0IGFyZSBzb3J0ZWQgZWFybGllciB0aGFuCisgICAgICAgICAgb3RoZXIgb2JqZWN0cy4KKyAgICAgICAgLSBhbmQgZmluYWxseSBzb3J0IGJ5IHNpemUsIGxhcmdlciB0byBzbWFsbGVyLgorCitJbiBvbmUgc3dlbGwtZm9vcCwgY2xhcmlmaWNhdGlvbiBhbmQgb2JzY3VyaWZpY2F0aW9uISAgTm9uZXRoZWxlc3MsCithdXRob3JpdGF0aXZlLiAgQ3J5cHRpYywgeWV0IGNvbmNpc2UuICBJdCBldmVuIHNvbGljaXRzIG5vdGlvbnMgb2YKK3F1b3RlcyBmcm9tIFRoZSBTb3VyY2UgQ29kZS4gIENsZWFybHksIG1vcmUgc3R1ZHkgaXMgbmVlZGVkLgorCisgICAgPGdpdHN0ZXI+IFRoYXQncyB0aGUgc29ydCBvcmRlci4gIFdoYXQgdGhpcyBtZWFucyBpczoKKyAgICAgICAgLSB3ZSBkbyBub3QgZGVsdGEgZGlmZmVyZW50IG9iamVjdCB0eXBlcy4KKwktIHdlIHByZWZlciB0byBkZWx0YSB0aGUgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGZ1bGwgcGF0aCwgYnV0CisgICAgICAgICAgYWxsb3cgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGZyb20gZGlmZmVyZW50IGRpcmVjdG9yaWVzLgorCS0gd2UgYWx3YXlzIHByZWZlciB0byBkZWx0YSBhZ2FpbnN0IG9iamVjdHMgd2UgYXJlIG5vdCBnb2luZworICAgICAgICAgIHRvIHNlbmQsIGlmIHRoZXJlIGFyZSBzb21lLgorCS0gd2UgcHJlZmVyIHRvIGRlbHRhIGFnYWluc3QgbGFyZ2VyIG9iamVjdHMsIHNvIHRoYXQgd2UgaGF2ZQorICAgICAgICAgIGxvdHMgb2YgcmVtb3ZhbHMuCisKKyAgICAgICAgVGhlIHBlbnVsdGltYXRlIHJ1bGUgaXMgZm9yICJ0aGluIiBwYWNrcy4gIEl0IGlzIHVzZWQgd2hlbgorICAgICAgICB0aGUgb3RoZXIgc2lkZSBpcyBrbm93biB0byBoYXZlIHN1Y2ggb2JqZWN0cy4KKworVGhlcmUgaXQgaXMgYWdhaW4uICJUaGluIiBwYWNrcy4gIEknbSB0aGlua2luZyB0byBteXNlbGYsICJXaGF0CitpcyBhICd0aGluJyBwYWNrPyIgIFNvIEkgYXNrOgorCisgICAgPGpkbD4gV2hhdCBpcyBhICJ0aGluIiBwYWNrPworCisgICAgPGdpdHN0ZXI+IFVzZSBvZiAtLW9iamVjdHMtZWRnZSB0byByZXYtbGlzdCBhcyB0aGUgdXBzdHJlYW0gb2YKKyAgICAgICAgcGFjay1vYmplY3RzLiAgVGhlIHBhY2sgdHJhbnNmZXIgcHJvdG9jb2wgbmVnb3RpYXRlcyB0aGF0LgorCitXb28gaG9vISAgQ2xlYXJlZCB0aGF0IF9yaWdodF8gdXAhCisKKyAgICA8Z2l0c3Rlcj4gVGhlcmUgYXJlIHR3byBkaXJlY3Rpb25zIC0gcHVzaCBhbmQgZmV0Y2guCisKK1RoZXJlISAgRGlkIHlvdSBzZWUgaXQ/ICBJdCBpcyBub3QgJyJwdXNoIiBhbmQgInB1bGwiJyEgIEhvdyBvZnRlbiB0aGUKK2NvbmZ1c2lvbiBoYXMgc3RhcnRlZCBoZXJlLiAgU28gY2FzdWFsbHkgbWVudGlvbmVkLCB0b28hCisKKyAgICA8Z2l0c3Rlcj4gRm9yIHB1c2gsIGdpdC1zZW5kLXBhY2sgaW52b2tlcyBnaXQtcmVjZWl2ZS1wYWNrIG9uIHRoZQorICAgICAgICBvdGhlciBlbmQuICBUaGUgcmVjZWl2ZS1wYWNrIHNheXMgIkkgaGF2ZSB1cCB0byB0aGVzZSBjb21taXRzIi4KKyAgICAgICAgc2VuZC1wYWNrIGxvb2tzIGF0IHRoZW0sIGFuZCBjb21wdXRlcyB3aGF0IGFyZSBtaXNzaW5nIGZyb20KKyAgICAgICAgdGhlIG90aGVyIGVuZC4gIFNvICJ0aGluIiBjb3VsZCBiZSB0aGUgZGVmYXVsdCB0aGVyZS4KKworICAgICAgICBJbiB0aGUgb3RoZXIgZGlyZWN0aW9uLCBmZXRjaCwgZ2l0LWZldGNoLXBhY2sgYW5kCisgICAgICAgIGdpdC1jbG9uZS1wYWNrIGludm9rZXMgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSBvdGhlciBlbmQKKwkodmlhIHNzaCBvciBieSB0YWxraW5nIHRvIHRoZSBkYWVtb24pLgorCisJVGhlcmUgYXJlIHR3byBjYXNlczogZmV0Y2gtcGFjayB3aXRoIC1rIGFuZCBjbG9uZS1wYWNrIGlzIG9uZSwKKyAgICAgICAgZmV0Y2gtcGFjayB3aXRob3V0IC1rIGlzIHRoZSBvdGhlci4gIGNsb25lLXBhY2sgYW5kIGZldGNoLXBhY2sKKyAgICAgICAgd2l0aCAtayB3aWxsIGtlZXAgdGhlIGRvd25sb2FkZWQgcGFja2ZpbGUgd2l0aG91dCBleHBhbmRlZCwgc28KKyAgICAgICAgd2UgZG8gbm90IHVzZSB0aGluIHBhY2sgdHJhbnNmZXIuICBPdGhlcndpc2UsIHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgcGFjayB3aWxsIGhhdmUgZGVsdGEgd2l0aG91dCBiYXNlIG9iamVjdCBpbiB0aGUgc2FtZSBwYWNrLgorCisgICAgICAgIEJ1dCBmZXRjaC1wYWNrIHdpdGhvdXQgLWsgd2lsbCBleHBsb2RlIHRoZSByZWNlaXZlZCBwYWNrIGludG8KKyAgICAgICAgaW5kaXZpZHVhbCBvYmplY3RzLCBzbyB3ZSBhdXRvbWF0aWNhbGx5IGFzayB1cGxvYWQtcGFjayB0bworICAgICAgICBnaXZlIHVzIGEgdGhpbiBwYWNrIGlmIHVwbG9hZC1wYWNrIHN1cHBvcnRzIGl0LgorCitPSyB0aGVuLgorCitVaC4KKworTGV0J3MgcmV0dXJuIHRvIHRoZSBwcmV2aW91cyBjb252ZXJzYXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3MuCisKKyAgICA8bmpzYD4gYW5kICJiYXNlbmFtZSIgbWVhbnMgc29tZXRoaW5nIGxpa2UgInRoZSB0YWlsIG9mIGVuZCBvZgorICAgICAgICBwYXRoIG9mIGZpbGUgb2JqZWN0cyBhbmQgZGlyIG9iamVjdHMsIGFzIHBlciBiYXNlbmFtZSgzKSwgYW5kCisgICAgICAgIHdlIGp1c3QgZGVjbGFyZSBhbGwgY29tbWl0IGFuZCB0YWcgb2JqZWN0cyB0byBoYXZlIHRoZSBzYW1lCisgICAgICAgIGJhc2VuYW1lIiBvciBzb21ldGhpbmc/CisKK0x1Y2tpbHksIHRoYXQgdG9vIGlzIGEgcG9pbnQgdGhhdCBnaXRzdGVyIGNsYXJpZmllZCBmb3IgdXMhCisKK0lmIEkgbWlnaHQgYWRkLCB0aGUgdHJpY2sgaXMgdG8gbWFrZSBmaWxlcyB0aGF0IF9taWdodF8gYmUgc2ltaWxhciBiZQorbG9jYXRlZCBjbG9zZSB0byBlYWNoIG90aGVyIGluIHRoZSBoYXNoIGJ1Y2tldHMgYmFzZWQgb24gdGhlaXIgZmlsZQorbmFtZXMuICBJdCB1c2VkIHRvIGJlIHRoYXQgImZvby9NYWtlZmlsZSIsICJiYXIvYmF6L3F1dXgvTWFrZWZpbGUiIGFuZAorIk1ha2VmaWxlIiBhbGwgbGFuZGVkIGluIHRoZSBzYW1lIGJ1Y2tldCBkdWUgdG8gdGhlaXIgY29tbW9uIGJhc2VuYW1lLAorIk1ha2VmaWxlIi4gSG93ZXZlciwgbm93IHRoZXkgbGFuZCBpbiAiY2xvc2UiIGJ1Y2tldHMuCisKK1RoZSBhbGdvcml0aG0gYWxsb3dzIG5vdCBqdXN0IGZvciB0aGUgX3NhbWVfIGJ1Y2tldCwgYnV0IGZvciBfY2xvc2VfCitidWNrZXRzIHRvIGJlIGNvbnNpZGVyZWQgZGVsdGEgY2FuZGlkYXRlcy4gIFRoZSByYXRpb25hbGUgaXMKK2Vzc2VudGlhbGx5IHRoYXQgZmlsZXMsIGxpa2UgTWFrZWZpbGVzLCBvZnRlbiBoYXZlIHZlcnkgc2ltaWxhcgorY29udGVudCBubyBtYXR0ZXIgd2hhdCBkaXJlY3RvcnkgdGhleSBsaXZlIGluLgorCisgICAgPGxpbnVzPiBJIHBsYXllZCBhcm91bmQgd2l0aCBkaWZmZXJlbnQgZGVsdGEgYWxnb3JpdGhtcywgYW5kIHdpdGgKKyAgICAgICAgbWFraW5nIHRoZSAiZGVsdGEgd2luZG93IiBiaWdnZXIsIGJ1dCBoYXZpbmcgdG9vIGJpZyBvZiBhCisgICAgICAgIHNsaWRpbmcgd2luZG93IG1ha2VzIGl0IHZlcnkgZXhwZW5zaXZlIHRvIGdlbmVyYXRlIHRoZSBwYWNrOgorICAgICAgICB5b3UgbmVlZCB0byBjb21wYXJlIGV2ZXJ5IG9iamVjdCB3aXRoIGEgX3Rvbl8gb2Ygb3RoZXIgb2JqZWN0cy4KKworICAgICAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygb3RoZXIgdHJpdmlhbCBoZXVyaXN0aWNzIHRvbywgd2hpY2gKKyAgICAgICAgYmFzaWNhbGx5IGJvaWwgZG93biB0byAiZG9uJ3QgYm90aGVyIGV2ZW4gdHJ5aW5nIHRvIGRlbHRhIHRoaXMKKyAgICAgICAgcGFpciIgaWYgd2UgY2FuIHRlbGwgYmVmb3JlLWhhbmQgdGhhdCB0aGUgZGVsdGEgaXNuJ3Qgd29ydGggaXQKKyAgICAgICAgKGR1ZSB0byBzaXplIGRpZmZlcmVuY2VzLCB3aGVyZSB3ZSBjYW4gdGFrZSBhIHByZXZpb3VzIGRlbHRhCisgICAgICAgIHJlc3VsdCBpbnRvIGFjY291bnQgdG8gZGVjaWRlIHRoYXQgIm9rLCBubyBwb2ludCBpbiB0cnlpbmcKKyAgICAgICAgdGhhdCBvbmUsIGl0IHdpbGwgYmUgd29yc2UiKS4KKworICAgICAgICBFbmQgcmVzdWx0OiBwYWNraW5nIGlzIGFjdHVhbGx5IHZlcnkgc2l6ZSBlZmZpY2llbnQuIEl0J3MKKyAgICAgICAgc29tZXdoYXQgQ1BVLXdhc3RlZnVsLCBidXQgb24gdGhlIG90aGVyIGhhbmQsIHNpbmNlIHlvdSdyZQorICAgICAgICByZWFsbHkgb25seSBzdXBwb3NlZCB0byBkbyBpdCBtYXliZSBvbmNlIGEgbW9udGggKGFuZCB5b3UgY2FuCisgICAgICAgIGRvIGl0IGR1cmluZyB0aGUgbmlnaHQpLCBub2JvZHkgcmVhbGx5IHNlZW1zIHRvIGNhcmUuCisKK05pY2UgRW5naW5lZXJpbmcgVG91Y2gsIHRoZXJlLiAgRmluZCB3aGVuIGl0IGRvZXNuJ3QgbWF0dGVyLCBhbmQKK3Byb2NsYWltIGl0IGEgbm9uLWlzc3VlLiAgR29vZCBzdHlsZSB0b28hCisKKyAgICA8bmpzYD4gU28sIGp1c3QgdG8gcmVwZWF0IHRvIHNlZSBpZiBJJ20gZm9sbG93aW5nLCB3ZSBzdGFydCBieQorICAgICAgICBnZXR0aW5nIGEgbGlzdCBvZiB0aGUgb2JqZWN0cyB3ZSB3YW50IHRvIHBhY2ssIHdlIHNvcnQgaXQgYnkKKyAgICAgICAgdGhpcyBoZXVyaXN0aWMgKGJhc2ljYWxseSBsZXhpY29ncmFwaGljYWxseSBvbiB0aGUgdHVwbGUKKyAgICAgICAgKHR5cGUsIGJhc2VuYW1lLCBzaXplKSkuCisKKyAgICAgICAgVGhlbiB3ZSB3YWxrIHRocm91Z2ggdGhpcyBsaXN0LCBhbmQgY2FsY3VsYXRlIGEgZGVsdGEgb2YKKyAgICAgICAgZWFjaCBvYmplY3QgYWdhaW5zdCB0aGUgbGFzdCBuICh0dW5hYmxlIHBhcmFtZXRlcikgb2JqZWN0cywKKyAgICAgICAgYW5kIHBpY2sgdGhlIHNtYWxsZXN0IG9mIHRoZXNlIGRlbHRhcy4KKworVmFzdGx5IHNpbXBsaWZpZWQsIGJ1dCB0aGUgZXNzZW5jZSBpcyB0aGVyZSEKKworICAgIDxsaW51cz4gQ29ycmVjdC4KKworICAgIDxuanNgPiBBbmQgdGhlbiBvbmNlIHdlIGhhdmUgcGlja2VkIGEgZGVsdGEgb3IgZnVsbHRleHQgdG8KKyAgICAgICAgcmVwcmVzZW50IGVhY2ggb2JqZWN0LCB3ZSByZS1zb3J0IGJ5IHJlY2VuY3ksIGFuZCB3cml0ZSB0aGVtCisgICAgICAgIG91dCBpbiB0aGF0IG9yZGVyLgorCisgICAgPGxpbnVzPiBZdXAuIFNvbWUgb3RoZXIgc21hbGwgZGV0YWlsczoKKworQW5kIG9mIGNvdXJzZSB0aGVyZSBpcyB0aGUgIk90aGVyIFNob2UiIEZhY3RvciB0b28uCisKKyAgICA8bGludXM+IC0gV2UgbGltaXQgdGhlIGRlbHRhIGRlcHRoIHRvIGFub3RoZXIgbWFnaWMgdmFsdWUgKHJpZ2h0CisgICAgICAgIG5vdyBib3RoIHRoZSB3aW5kb3cgYW5kIGRlbHRhIGRlcHRoIG1hZ2ljIHZhbHVlcyBhcmUganVzdCAiMTAiKQorCisgICAgPG5qc2A+IEhybSwgbXkgaW50dWl0aW9uIGlzIHRoYXQgeW91J2QgZW5kIHVwIHdpdGggcmVhbGx5IF9iYWRfIElPCisgICAgICAgIHBhdHRlcm5zLCBiZWNhdXNlIHRoZSB0aGluZ3MgeW91IHdhbnQgYXJlIG5lYXIgYnksIGJ1dCB0bworICAgICAgICBhY3R1YWxseSByZWNvbnN0cnVjdCB0aGVtIHlvdSBtYXkgaGF2ZSB0byBqdW1wIGFsbCBvdmVyIGluCisgICAgICAgIHJhbmRvbSB3YXlzLgorCisgICAgPGxpbnVzPiAtIFdoZW4gd2Ugd3JpdGUgb3V0IGEgZGVsdGEsIGFuZCB3ZSBoYXZlbid0IHlldCB3cml0dGVuCisgICAgICAgIG91dCB0aGUgb2JqZWN0IGl0IGlzIGEgZGVsdGEgYWdhaW5zdCwgd2Ugd3JpdGUgb3V0IHRoZSBiYXNlCisgICAgICAgIG9iamVjdCBmaXJzdC4gIEFuZCBubywgd2hlbiB3ZSByZWNvbnN0cnVjdCB0aGVtLCB3ZSBhY3R1YWxseQorICAgICAgICBnZXQgbmljZSBJTyBwYXR0ZXJucywgYmVjYXVzZToKKyAgICAgICAgLSBsYXJnZXIgb2JqZWN0cyB0ZW5kIHRvIGJlICJtb3JlIHJlY2VudCIgKExpbnVzJyBsYXc6IGZpbGVzIGdyb3cpCisgICAgICAgIC0gd2UgYWN0aXZlbHkgdHJ5IHRvIGdlbmVyYXRlIGRlbHRhcyBmcm9tIGEgbGFyZ2VyIG9iamVjdCB0byBhCisgICAgICAgICAgc21hbGxlciBvbmUKKyAgICAgICAgLSB0aGlzIG1lYW5zIHRoYXQgdGhlIHRvcC1vZi10cmVlIHZlcnkgc2VsZG9tIGhhcyBkZWx0YXMKKyAgICAgICAgICAoaS5lLiBkZWx0YXMgaW4gX3ByYWN0aWNlXyBhcmUgImJhY2t3YXJkcyBkZWx0YXMiKQorCitBZ2Fpbiwgd2Ugc2hvdWxkIHJlcmVhZCB0aGF0IHdob2xlIHBhcmFncmFwaC4gIE5vdCBqdXN0IGJlY2F1c2UKK0xpbnVzIGhhcyBzbGlwcGVkIExpbnVzJ3MgTGF3IGluIHRoZXJlIG9uIHVzLCBidXQgYmVjYXVzZSBpdCBpcworaW1wb3J0YW50LiAgTGV0J3MgbWFrZSBzdXJlIHdlIGNsYXJpZnkgc29tZSBvZiB0aGUgcG9pbnRzIGhlcmU6CisKKyAgICA8bmpzYD4gU28gdGhlIHBvaW50IGlzIGp1c3QgdGhhdCBpbiBwcmFjdGljZSwgZGVsdGEgb3JkZXIgYW5kCisgICAgICAgIHJlY2VuY3kgb3JkZXIgbWF0Y2ggZWFjaCBvdGhlciBxdWl0ZSB3ZWxsLgorCisgICAgPGxpbnVzPiBZZXMuIFRoZXJlJ3MgYW5vdGhlciBuaWNlIHNpZGUgdG8gdGhpcyAoYW5kIHllcywgaXQgd2FzCisJZGVzaWduZWQgdGhhdCB3YXkgOyk6CisgICAgICAgIC0gdGhlIHJlYXNvbiB3ZSBnZW5lcmF0ZSBkZWx0YXMgYWdhaW5zdCB0aGUgbGFyZ2VyIG9iamVjdCBpcworCSAgYWN0dWFsbHkgYSBiaWcgc3BhY2Ugc2F2ZXIgdG9vIQorCisgICAgPG5qc2A+IEhtbSwgYnV0IHlvdXIgbGFzdCBjb21tZW50IChpZiAid2UgaGF2ZW4ndCB5ZXQgd3JpdHRlbiBvdXQKKyAgICAgICAgdGhlIG9iamVjdCBpdCBpcyBhIGRlbHRhIGFnYWluc3QsIHdlIHdyaXRlIG91dCB0aGUgYmFzZSBvYmplY3QKKyAgICAgICAgZmlyc3QiKSwgc2VlbXMgbGlrZSBpdCB3b3VsZCBtYWtlIHRoZXNlIGZhY3RzIG1vc3RseQorICAgICAgICBpcnJlbGV2YW50IGJlY2F1c2UgZXZlbiBpZiBpbiBwcmFjdGljZSB5b3Ugd291bGQgbm90IGhhdmUgdG8KKyAgICAgICAgd2FuZGVyIGFyb3VuZCBtdWNoLCBpbiBmYWN0IHlvdSBqdXN0IGJydXRlLWZvcmNlIHNheSB0aGF0IGluCisgICAgICAgIHRoZSBjYXNlcyB3aGVyZSB5b3UgbWlnaHQgaGF2ZSB0byB3YW5kZXIsIGRvbid0IGRvIHRoYXQgOi0pCisKKyAgICA8bGludXM+IFllcyBhbmQgbm8uIE5vdGljZSB0aGUgcnVsZTogd2Ugb25seSB3cml0ZSBvdXQgdGhlIGJhc2UKKyAgICAgICAgb2JqZWN0IGZpcnN0IGlmIHRoZSBkZWx0YSBhZ2FpbnN0IGl0IHdhcyBtb3JlIHJlY2VudC4gIFRoYXQKKyAgICAgICAgbWVhbnMgdGhhdCB5b3UgY2FuIGFjdHVhbGx5IGhhdmUgZGVsdGFzIHRoYXQgcmVmZXIgdG8gYSBiYXNlCisgICAgICAgIG9iamVjdCB0aGF0IGlzIF9ub3RfIGNsb3NlIHRvIHRoZSBkZWx0YSBvYmplY3QsIGJ1dCB0aGF0IG9ubHkKKyAgICAgICAgaGFwcGVucyB3aGVuIHRoZSBkZWx0YSBpcyBuZWVkZWQgdG8gZ2VuZXJhdGUgYW4gX29sZF8gb2JqZWN0LgorCisgICAgPGxpbnVzPiBTZWU/CisKK1llYWgsIG5vLiAgSSBtaXNzZWQgdGhhdCBvbiB0aGUgZmlyc3QgdHdvIG9yIHRocmVlIHJlYWRpbmdzIG15c2VsZi4KKworICAgIDxsaW51cz4gVGhpcyBrZWVwcyB0aGUgZnJvbnQgb2YgdGhlIHBhY2sgZGVuc2UuIFRoZSBmcm9udCBvZiB0aGUKKyAgICAgICAgcGFjayBuZXZlciBjb250YWlucyBkYXRhIHRoYXQgaXNuJ3QgcmVsZXZhbnQgdG8gYSAicmVjZW50IgorICAgICAgICBvYmplY3QuICBUaGUgc2l6ZSBvcHRpbWl6YXRpb24gY29tZXMgZnJvbSBvdXIgdXNlIG9mIHhkZWx0YQorICAgICAgICAoYnV0IGlzIHRydWUgZm9yIG1hbnkgb3RoZXIgZGVsdGEgYWxnb3JpdGhtcyk6IHJlbW92aW5nIGRhdGEKKyAgICAgICAgaXMgY2hlYXBlciAoaW4gc2l6ZSkgdGhhbiBhZGRpbmcgZGF0YS4KKworICAgICAgICBXaGVuIHlvdSByZW1vdmUgZGF0YSwgeW91IG9ubHkgbmVlZCB0byBzYXkgImNvcHkgYnl0ZXMgbi0tbSIuCisJSW4gY29udHJhc3QsIGluIGEgZGVsdGEgdGhhdCBfYWRkc18gZGF0YSwgeW91IGhhdmUgdG8gc2F5ICJhZGQKKyAgICAgICAgdGhlc2UgYnl0ZXM6ICdhY3R1YWwgZGF0YSBnb2VzIGhlcmUnIgorCisgICAgKioqIG5qc2AgaGFzIHF1aXQ6IFJlYWQgZXJyb3I6IDEwNCAoQ29ubmVjdGlvbiByZXNldCBieSBwZWVyKQorCisgICAgPGxpbnVzPiBVaGh1aC4gSSBob3BlIEkgZGlkbid0IGJsb3cgbmpzYCBtaW5kLgorCisgICAgKioqIG5qc2AgaGFzIGpvaW5lZCBjaGFubmVsICNnaXQKKworICAgIDxwYXNreT4gOikKKworVGhlIHNpbGVudCBvYnNlcnZlcnMgYXJlIGFtdXNlZC4gIE9mIGNvdXJzZS4KKworQW5kIGFzIGlmIG5qc2Agd2FzIGV4cGVjdGVkIHRvIGJlIG9tbmlzY2llbnQ6CisKKyAgICA8bGludXM+IG5qcyAtIGRpZCB5b3UgbWlzcyBhbnl0aGluZz8KKworT0ssIEknbGwgc3BlbGwgaXQgb3V0LiAgVGhhdCdzIEdlZWsgSHVtb3IuICBJZiBuanNgIHdhcyBub3QgYWN0dWFsbHkKK2Nvbm5lY3RlZCBmb3IgYSBsaXR0bGUgYml0IHRoZXJlLCBob3cgd291bGQgaGUga25vdyBpZiBtaXNzZWQgYW55dGhpbmcKK3doaWxlIGhlIHdhcyBkaXNjb25uZWN0ZWQ/ICBIZSdzIGEgYmVuZXZvbGVudCBkaWN0YXRvciB3aXRoIGEgc2Vuc2Ugb2YKK2h1bW9yISAgV2VsbCBub3RlZCEKKworICAgIDxuanNgPiBTdHVwaWQgcm91dGVyLiAgT3IgZ3JlbWxpbnMsIG9yIHdoYXRldmVyLgorCitJdCdzIGEgY2hlYXAgc2hvdCBhdCBDaXNjby4gIFRha2UgJ2VtIHdoZW4geW91IGNhbi4KKworICAgIDxuanNgPiBZZXMgYW5kIG5vLiBOb3RpY2UgdGhlIHJ1bGU6IHdlIG9ubHkgd3JpdGUgb3V0IHRoZSBiYXNlCisgICAgICAgIG9iamVjdCBmaXJzdCBpZiB0aGUgZGVsdGEgYWdhaW5zdCBpdCB3YXMgbW9yZSByZWNlbnQuCisKKyAgICAgICAgSSdtIGdldHRpbmcgbG9zdCBpbiBhbGwgdGhlc2Ugb3JkZXJzLCBsZXQgbWUgcmUtcmVhZCA6LSkKKwlTbyB0aGUgd3JpdGUtb3V0IG9yZGVyIGlzIGZyb20gbW9zdCByZWNlbnQgdG8gbGVhc3QgcmVjZW50PworICAgICAgICAoQ29uY2VpdmFibHkgaXQgY291bGQgYmUgdGhlIG9wcG9zaXRlIHdheSB0b28sIEknbSBub3Qgc3VyZSBpZgorICAgICAgICB3ZSd2ZSBzYWlkKSB0aG91Z2ggbXkgY29ubmVjdGlvbiBiYWNrIGF0IGhvbWUgaXMgbG9nZ2luZywgc28gSQorICAgICAgICBjYW4ganVzdCByZWFkIHdoYXQgeW91IHNhaWQgdGhlcmUgOi0pCisKK0FuZCBmb3IgdGhvc2Ugb2YgeW91IHBheWluZyBhdHRlbnRpb24sIHRoZSBPbW5pc2NpZW50IFRyaWNrIGhhcyBqdXN0CitiZWVuIGRldGFpbGVkIQorCisgICAgPGxpbnVzPiBZZXMsIHdlIGFsd2F5cyB3cml0ZSBvdXQgbW9zdCByZWNlbnQgZmlyc3QKKworICAgIDxuanNgPiBBbmQsIHllYWgsIEkgZ290IHRoZSBwYXJ0IGFib3V0IGRlZXBlci1pbi1oaXN0b3J5IHN0dWZmCisgICAgICAgIGhhdmluZyB3b3JzZSBJTyBjaGFyYWN0ZXJpc3RpY3MsIG9uZSBzb3J0IG9mIGRvZXNuJ3QgY2FyZS4KKworICAgIDxsaW51cz4gV2l0aCB0aGUgY2F2ZWF0IHRoYXQgaWYgdGhlICJtb3N0IHJlY2VudCIgbmVlZHMgYW4gb2xkZXIKKyAgICAgICAgb2JqZWN0IHRvIGRlbHRhIGFnYWluc3QgKGhleSwgc2hyaW5raW5nIHNvbWV0aW1lcyBkb2VzCisgICAgICAgIGhhcHBlbiksIHdlIHdyaXRlIG91dCB0aGUgb2xkIG9iamVjdCB3aXRoIHRoZSBkZWx0YS4KKworICAgIDxuanNgPiAoaWYgb25seSBpdCBoYXBwZW5lZCBtb3JlLi4uKQorCisgICAgPGxpbnVzPiBBbnl3YXksIHRoZSBwYWNrLWZpbGUgY291bGQgZWFzaWx5IGJlIGRlbnNlciBzdGlsbCwgYnV0CisJYmVjYXVzZSBpdCdzIHVzZWQgYm90aCBmb3Igc3RyZWFtaW5nICh0aGUgR2l0IHByb3RvY29sKSBhbmQKKyAgICAgICAgZm9yIG9uLWRpc2ssIGl0IGhhcyBhIGZldyBwZXNzaW1pemF0aW9ucy4KKworQWN0dWFsbHksIGl0IGlzIGEgbWFkZS11cCB3b3JkLiBCdXQgaXQgaXMgYSBtYWRlLXVwIHdvcmQgYmVpbmcKK3VzZWQgYXMgc2V0dXAgZm9yIGEgbGF0ZXIgb3B0aW1pemF0aW9uLCB3aGljaCBpcyBhIHJlYWwgd29yZDoKKworICAgIDxsaW51cz4gSW4gcGFydGljdWxhciwgd2hpbGUgdGhlIHBhY2stZmlsZSBpcyB0aGVuIGNvbXByZXNzZWQsCisgICAgICAgIGl0J3MgY29tcHJlc3NlZCBqdXN0IG9uZSBvYmplY3QgYXQgYSB0aW1lLCBzbyB0aGUgYWN0dWFsCisgICAgICAgIGNvbXByZXNzaW9uIGZhY3RvciBpcyBsZXNzIHRoYW4gaXQgY291bGQgYmUgaW4gdGhlb3J5LiBCdXQgaXQKKyAgICAgICAgbWVhbnMgdGhhdCBpdCdzIGFsbCBuaWNlIHJhbmRvbS1hY2Nlc3Mgd2l0aCBhIHNpbXBsZSBpbmRleCB0bworICAgICAgICBkbyAib2JqZWN0IG5hbWUtPmxvY2F0aW9uIGluIHBhY2tmaWxlIiB0cmFuc2xhdGlvbi4KKworICAgIDxuanNgPiBJJ20gYXNzdW1pbmcgdGhlIHJlYWwgd2luIGZvciBkZWx0YS1pbmcgbGFyZ2UtPnNtYWxsIGlzCisgICAgICAgIG1vcmUgaG9tb2dlbmVvdXMgc3RhdGlzdGljcyBmb3IgZ3ppcCB0byBydW4gb3Zlcj8KKworICAgICAgICAoWW91IGhhdmUgdG8gcHV0IHRoZSBieXRlcyBpbiBvbmUgcGxhY2Ugb3IgYW5vdGhlciwgYnV0CisgICAgICAgIHB1dHRpbmcgdGhlbSBpbiBhIGxhcmdlciBibG9iIHdpbnMgb24gY29tcHJlc3Npb24pCisKKyAgICAgICAgQWN0dWFsbHksIHdoYXQgaXMgdGhlIGNvbXByZXNzaW9uIHN0cmF0ZWd5IC0tIGVhY2ggZGVsdGEKKyAgICAgICAgaW5kaXZpZHVhbGx5IGd6aXBwZWQsIHRoZSB3aG9sZSBmaWxlIGd6aXBwZWQsIHNvbWV3aGVyZSBpbgorICAgICAgICBiZXR3ZWVuLCBubyBjb21wcmVzc2lvbiBhdCBhbGwsIC4uLi4/CisKKyAgICAgICAgUmlnaHQuCisKK1JlYWxpdHkgSVJDIHNldHMgaW4uICBGb3IgZXhhbXBsZToKKworICAgIDxwYXNreT4gSSdsbCByZWFkIHRoZSByZXN0IGluIHRoZSBtb3JuaW5nLCBJIHJlYWxseSBoYXZlIHRvIGdvCisgICAgICAgIHNsZWVwIG9yIHRoZXJlJ3Mgbm8gaG9wZSB3aGF0c29ldmVyIGZvciBtZSBhdCB0aGUgdG9kYXkncworICAgICAgICBleGFtLi4uIGcnbml0ZSBhbGwuCisKK0hlaC4KKworICAgIDxsaW51cz4gcGFza3k6IGcnbml0ZQorCisgICAgPG5qc2A+IHBhc2t5OiAnbHVjaworCisgICAgPGxpbnVzPiBSaWdodDogbGFyZ2UtPnNtYWxsIG1hdHRlcnMgZXhhY3RseSBiZWNhdXNlIG9mIGNvbXByZXNzaW9uCisgICAgICAgIGJlaGF2aW91ci4gSWYgaXQgd2FzIG5vbi1jb21wcmVzc2VkLCBpdCBwcm9iYWJseSB3b3VsZG4ndCBtYWtlCisgICAgICAgIGFueSBkaWZmZXJlbmNlLgorCisgICAgPG5qc2A+IHllYWgKKworICAgIDxsaW51cz4gQW55d2F5OiBJJ20gbm90IGV2ZW4gdHJ5aW5nIHRvIGNsYWltIHRoYXQgdGhlIHBhY2stZmlsZXMKKyAgICAgICAgYXJlIHBlcmZlY3QsIGJ1dCB0aGV5IGRvIHRlbmQgdG8gaGF2ZSBhIG5pY2UgYmFsYW5jZSBvZgorICAgICAgICBkZW5zaXR5IHZzIGVhc2Utb2YgdXNlLgorCitHYXNwISAgT0ssIHNhdmVkLiAgVGhhdCdzIGEgZmFpciBFbmdpbmVlcmluZyB0cmFkZSBvZmYuICBDbG9zZSBjYWxsIQorSW4gZmFjdCwgTGludXMgcmVmbGVjdHMgb24gc29tZSBCYXNpYyBFbmdpbmVlcmluZyBGdW5kYW1lbnRhbHMsCitkZXNpZ24gb3B0aW9ucywgZXRjLgorCisgICAgPGxpbnVzPiBNb3JlIGltcG9ydGFudGx5LCB0aGV5IGFsbG93IEdpdCB0byBzdGlsbCBfY29uY2VwdHVhbGx5XworICAgICAgICBuZXZlciBkZWFsIHdpdGggZGVsdGFzIGF0IGFsbCwgYW5kIGJlIGEgIndob2xlIG9iamVjdCIgc3RvcmUuCisKKyAgICAgICAgV2hpY2ggaGFzIHNvbWUgcHJvYmxlbXMgKHdlIGRpc2N1c3NlZCBiYWQgaHVnZS1maWxlCisJYmVoYXZpb3VyIG9uIHRoZSBHaXQgbGlzdHMgdGhlIG90aGVyIGRheSksIGJ1dCBpdCBkb2VzIG1lYW4KKwl0aGF0IHRoZSBiYXNpYyBHaXQgY29uY2VwdHMgYXJlIHJlYWxseSByZWFsbHkgc2ltcGxlIGFuZAorICAgICAgICBzdHJhaWdodGZvcndhcmQuCisKKyAgICAgICAgSXQncyBhbGwgYmVlbiBxdWl0ZSBzdGFibGUuCisKKyAgICAgICAgV2hpY2ggSSB0aGluayBpcyB2ZXJ5IG11Y2ggYSByZXN1bHQgb2YgaGF2aW5nIHZlcnkgc2ltcGxlCisgICAgICAgIGJhc2ljIGlkZWFzLCBzbyB0aGF0IHRoZXJlJ3MgbmV2ZXIgYW55IGNvbmZ1c2lvbiBhYm91dCB3aGF0J3MKKyAgICAgICAgZ29pbmcgb24uCisKKyAgICAgICAgQnVncyBoYXBwZW4sIGJ1dCB0aGV5IGFyZSAic2ltcGxlIiBidWdzLiBBbmQgYnVncyB0aGF0CisgICAgICAgIGFjdHVhbGx5IGdldCBzb21lIG9iamVjdCBzdG9yZSBkZXRhaWwgd3JvbmcgYXJlIGFsbW9zdCBhbHdheXMKKyAgICAgICAgc28gb2J2aW91cyB0aGF0IHRoZXkgbmV2ZXIgZ28gYW55d2hlcmUuCisKKyAgICA8bmpzYD4gWWVhaC4KKworTnVmZiBzYWlkLgorCisgICAgPGxpbnVzPiBBbnl3YXkuICBJJ20gb2ZmIGZvciBiZWQuIEl0J3Mgbm90IDZBTSBoZXJlLCBidXQgSSd2ZSBnb3QKKwkgdGhyZWUga2lkcywgYW5kIGhhdmUgdG8gZ2V0IHVwIGVhcmx5IGluIHRoZSBtb3JuaW5nIHRvIHNlbmQKKwkgdGhlbSBvZmYuIEkgbmVlZCBteSBiZWF1dHkgc2xlZXAuCisKKyAgICA8bmpzYD4gOi0pCisKKyAgICA8bmpzYD4gYXBwcmVjaWF0ZSB0aGUgaW5mb2R1bXAsIEkgcmVhbGx5IHdhcyBmYWlsaW5nIHRvIGZpbmQgdGhlCisJZGV0YWlscyBvbiBHaXQgcGFja3MgOi0pCisKK0FuZCBub3cgeW91IGtub3cgdGhlIHJlc3Qgb2YgdGhlIHN0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWNlNGVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1wcm90b2NvbC50eHQKQEAgLTAsMCArMSw2NzQgQEAKK1BhY2tmaWxlIHRyYW5zZmVyIHByb3RvY29scworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0dpdCBzdXBwb3J0cyB0cmFuc2ZlcnJpbmcgZGF0YSBpbiBwYWNrZmlsZXMgb3ZlciB0aGUgc3NoOi8vLCBnaXQ6Ly8sIGh0dHA6Ly8gYW5kCitmaWxlOi8vIHRyYW5zcG9ydHMuICBUaGVyZSBleGlzdCB0d28gc2V0cyBvZiBwcm90b2NvbHMsIG9uZSBmb3IgcHVzaGluZworZGF0YSBmcm9tIGEgY2xpZW50IHRvIGEgc2VydmVyIGFuZCBhbm90aGVyIGZvciBmZXRjaGluZyBkYXRhIGZyb20gYQorc2VydmVyIHRvIGEgY2xpZW50LiAgVGhlIHRocmVlIHRyYW5zcG9ydHMgKHNzaCwgZ2l0LCBmaWxlKSB1c2UgdGhlIHNhbWUKK3Byb3RvY29sIHRvIHRyYW5zZmVyIGRhdGEuIGh0dHAgaXMgZG9jdW1lbnRlZCBpbiBodHRwLXByb3RvY29sLnR4dC4KKworVGhlIHByb2Nlc3NlcyBpbnZva2VkIGluIHRoZSBjYW5vbmljYWwgR2l0IGltcGxlbWVudGF0aW9uIGFyZSAndXBsb2FkLXBhY2snCitvbiB0aGUgc2VydmVyIHNpZGUgYW5kICdmZXRjaC1wYWNrJyBvbiB0aGUgY2xpZW50IHNpZGUgZm9yIGZldGNoaW5nIGRhdGE7Cit0aGVuICdyZWNlaXZlLXBhY2snIG9uIHRoZSBzZXJ2ZXIgYW5kICdzZW5kLXBhY2snIG9uIHRoZSBjbGllbnQgZm9yIHB1c2hpbmcKK2RhdGEuICBUaGUgcHJvdG9jb2wgZnVuY3Rpb25zIHRvIGhhdmUgYSBzZXJ2ZXIgdGVsbCBhIGNsaWVudCB3aGF0IGlzCitjdXJyZW50bHkgb24gdGhlIHNlcnZlciwgdGhlbiBmb3IgdGhlIHR3byB0byBuZWdvdGlhdGUgdGhlIHNtYWxsZXN0IGFtb3VudAorb2YgZGF0YSB0byBzZW5kIGluIG9yZGVyIHRvIGZ1bGx5IHVwZGF0ZSBvbmUgb3IgdGhlIG90aGVyLgorCitwa3QtbGluZSBGb3JtYXQKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVzY3JpcHRpb25zIGJlbG93IGJ1aWxkIG9uIHRoZSBwa3QtbGluZSBmb3JtYXQgZGVzY3JpYmVkIGluCitwcm90b2NvbC1jb21tb24udHh0LiBXaGVuIHRoZSBncmFtbWFyIGluZGljYXRlIGBQS1QtTElORSguLi4pYCwgdW5sZXNzCitvdGhlcndpc2Ugbm90ZWQgdGhlIHVzdWFsIHBrdC1saW5lIExGIHJ1bGVzIGFwcGx5OiB0aGUgc2VuZGVyIFNIT1VMRAoraW5jbHVkZSBhIExGLCBidXQgdGhlIHJlY2VpdmVyIE1VU1QgTk9UIGNvbXBsYWluIGlmIGl0IGlzIG5vdCBwcmVzZW50LgorCitBbiBlcnJvciBwYWNrZXQgaXMgYSBzcGVjaWFsIHBrdC1saW5lIHRoYXQgY29udGFpbnMgYW4gZXJyb3Igc3RyaW5nLgorCistLS0tCisgIGVycm9yLWxpbmUgICAgID0gIFBLVC1MSU5FKCJFUlIiIFNQIGV4cGxhbmF0aW9uLXRleHQpCistLS0tCisKK1Rocm91Z2hvdXQgdGhlIHByb3RvY29sLCB3aGVyZSBgUEtULUxJTkUoLi4uKWAgaXMgZXhwZWN0ZWQsIGFuIGVycm9yIHBhY2tldCBNQVkKK2JlIHNlbnQuIE9uY2UgdGhpcyBwYWNrZXQgaXMgc2VudCBieSBhIGNsaWVudCBvciBhIHNlcnZlciwgdGhlIGRhdGEgdHJhbnNmZXIKK3Byb2Nlc3MgZGVmaW5lZCBpbiB0aGlzIHByb3RvY29sIGlzIHRlcm1pbmF0ZWQuCisKK1RyYW5zcG9ydHMKKy0tLS0tLS0tLS0KK1RoZXJlIGFyZSB0aHJlZSB0cmFuc3BvcnRzIG92ZXIgd2hpY2ggdGhlIHBhY2tmaWxlIHByb3RvY29sIGlzCitpbml0aWF0ZWQuICBUaGUgR2l0IHRyYW5zcG9ydCBpcyBhIHNpbXBsZSwgdW5hdXRoZW50aWNhdGVkIHNlcnZlciB0aGF0Cit0YWtlcyB0aGUgY29tbWFuZCAoYWxtb3N0IGFsd2F5cyAndXBsb2FkLXBhY2snLCB0aG91Z2ggR2l0CitzZXJ2ZXJzIGNhbiBiZSBjb25maWd1cmVkIHRvIGJlIGdsb2JhbGx5IHdyaXRhYmxlLCBpbiB3aGljaCAncmVjZWl2ZS0KK3BhY2snIGluaXRpYXRpb24gaXMgYWxzbyBhbGxvd2VkKSB3aXRoIHdoaWNoIHRoZSBjbGllbnQgd2lzaGVzIHRvCitjb21tdW5pY2F0ZSBhbmQgZXhlY3V0ZXMgaXQgYW5kIGNvbm5lY3RzIGl0IHRvIHRoZSByZXF1ZXN0aW5nCitwcm9jZXNzLgorCitJbiB0aGUgU1NIIHRyYW5zcG9ydCwgdGhlIGNsaWVudCBqdXN0IHJ1bnMgdGhlICd1cGxvYWQtcGFjaycKK29yICdyZWNlaXZlLXBhY2snIHByb2Nlc3Mgb24gdGhlIHNlcnZlciBvdmVyIHRoZSBTU0ggcHJvdG9jb2wgYW5kIHRoZW4KK2NvbW11bmljYXRlcyB3aXRoIHRoYXQgaW52b2tlZCBwcm9jZXNzIG92ZXIgdGhlIFNTSCBjb25uZWN0aW9uLgorCitUaGUgZmlsZTovLyB0cmFuc3BvcnQgcnVucyB0aGUgJ3VwbG9hZC1wYWNrJyBvciAncmVjZWl2ZS1wYWNrJworcHJvY2VzcyBsb2NhbGx5IGFuZCBjb21tdW5pY2F0ZXMgd2l0aCBpdCBvdmVyIGEgcGlwZS4KKworRXh0cmEgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcHJvdG9jb2wgcHJvdmlkZXMgYSBtZWNoYW5pc20gaW4gd2hpY2ggY2xpZW50cyBjYW4gc2VuZCBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiBpbiBpdHMgZmlyc3QgbWVzc2FnZSB0byB0aGUgc2VydmVyLiBUaGVzZSBhcmUgY2FsbGVkICJFeHRyYQorUGFyYW1ldGVycyIsIGFuZCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBHaXQsIFNTSCwgYW5kIEhUVFAgcHJvdG9jb2xzLgorCitFYWNoIEV4dHJhIFBhcmFtZXRlciB0YWtlcyB0aGUgZm9ybSBvZiBgPGtleT49PHZhbHVlPmAgb3IgYDxrZXk+YC4KKworU2VydmVycyB0aGF0IHJlY2VpdmUgYW55IHN1Y2ggRXh0cmEgUGFyYW1ldGVycyBNVVNUIGlnbm9yZSBhbGwKK3VucmVjb2duaXplZCBrZXlzLiBDdXJyZW50bHksIHRoZSBvbmx5IEV4dHJhIFBhcmFtZXRlciByZWNvZ25pemVkIGlzCisidmVyc2lvbiIgd2l0aCBhIHZhbHVlIG9mICcxJyBvciAnMicuICBTZWUgcHJvdG9jb2wtdjIudHh0IGZvciBtb3JlCitpbmZvcm1hdGlvbiBvbiBwcm90b2NvbCB2ZXJzaW9uIDIuCisKK0dpdCBUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0KKworVGhlIEdpdCB0cmFuc3BvcnQgc3RhcnRzIG9mZiBieSBzZW5kaW5nIHRoZSBjb21tYW5kIGFuZCByZXBvc2l0b3J5CitvbiB0aGUgd2lyZSB1c2luZyB0aGUgcGt0LWxpbmUgZm9ybWF0LCBmb2xsb3dlZCBieSBhIE5VTCBieXRlIGFuZCBhCitob3N0bmFtZSBwYXJhbWV0ZXIsIHRlcm1pbmF0ZWQgYnkgYSBOVUwgYnl0ZS4KKworICAgMDAzM2dpdC11cGxvYWQtcGFjayAvcHJvamVjdC5naXRcMGhvc3Q9bXlzZXJ2ZXIuY29tXDAKKworVGhlIHRyYW5zcG9ydCBtYXkgc2VuZCBFeHRyYSBQYXJhbWV0ZXJzIGJ5IGFkZGluZyBhbiBhZGRpdGlvbmFsIE5VTAorYnl0ZSwgYW5kIHRoZW4gYWRkaW5nIG9uZSBvciBtb3JlIE5VTC10ZXJtaW5hdGVkIHN0cmluZ3M6CisKKyAgIDAwM2VnaXQtdXBsb2FkLXBhY2sgL3Byb2plY3QuZ2l0XDBob3N0PW15c2VydmVyLmNvbVwwXDB2ZXJzaW9uPTFcMAorCistLQorICAgZ2l0LXByb3RvLXJlcXVlc3QgPSByZXF1ZXN0LWNvbW1hbmQgU1AgcGF0aG5hbWUgTlVMCisJCSAgICAgICBbIGhvc3QtcGFyYW1ldGVyIE5VTCBdIFsgTlVMIGV4dHJhLXBhcmFtZXRlcnMgXQorICAgcmVxdWVzdC1jb21tYW5kICAgPSAiZ2l0LXVwbG9hZC1wYWNrIiAvICJnaXQtcmVjZWl2ZS1wYWNrIiAvCisJCSAgICAgICAiZ2l0LXVwbG9hZC1hcmNoaXZlIiAgIDsgY2FzZSBzZW5zaXRpdmUKKyAgIHBhdGhuYW1lICAgICAgICAgID0gKiggJXgwMS1mZiApIDsgZXhjbHVkZSBOVUwKKyAgIGhvc3QtcGFyYW1ldGVyICAgID0gImhvc3Q9IiBob3N0bmFtZSBbICI6IiBwb3J0IF0KKyAgIGV4dHJhLXBhcmFtZXRlcnMgID0gMSpleHRyYS1wYXJhbWV0ZXIKKyAgIGV4dHJhLXBhcmFtZXRlciAgID0gMSooICV4MDEtZmYgKSBOVUwKKy0tCisKK2hvc3QtcGFyYW1ldGVyIGlzIHVzZWQgZm9yIHRoZQorZ2l0LWRhZW1vbiBuYW1lIGJhc2VkIHZpcnR1YWwgaG9zdGluZy4gIFNlZSAtLWludGVycG9sYXRlZC1wYXRoCitvcHRpb24gdG8gZ2l0IGRhZW1vbiwgd2l0aCB0aGUgJUgvJUNIIGZvcm1hdCBjaGFyYWN0ZXJzLgorCitCYXNpY2FsbHkgd2hhdCB0aGUgR2l0IGNsaWVudCBpcyBkb2luZyB0byBjb25uZWN0IHRvIGFuICd1cGxvYWQtcGFjaycKK3Byb2Nlc3Mgb24gdGhlIHNlcnZlciBzaWRlIG92ZXIgdGhlIEdpdCBwcm90b2NvbCBpcyB0aGlzOgorCisgICAkIGVjaG8gLWUgLW4gXAorICAgICAiMDAzOWdpdC11cGxvYWQtcGFjayAvc2NoYWNvbi9naXRib29rLmdpdFwwaG9zdD1leGFtcGxlLmNvbVwwIiB8CisgICAgIG5jIC12IGV4YW1wbGUuY29tIDk0MTgKKworCitTU0ggVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tCisKK0luaXRpYXRpbmcgdGhlIHVwbG9hZC1wYWNrIG9yIHJlY2VpdmUtcGFjayBwcm9jZXNzZXMgb3ZlciBTU0ggaXMKK2V4ZWN1dGluZyB0aGUgYmluYXJ5IG9uIHRoZSBzZXJ2ZXIgdmlhIFNTSCByZW1vdGUgZXhlY3V0aW9uLgorSXQgaXMgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gcnVubmluZyB0aGlzOgorCisgICAkIHNzaCBnaXQuZXhhbXBsZS5jb20gImdpdC11cGxvYWQtcGFjayAnL3Byb2plY3QuZ2l0JyIKKworRm9yIGEgc2VydmVyIHRvIHN1cHBvcnQgR2l0IHB1c2hpbmcgYW5kIHB1bGxpbmcgZm9yIGEgZ2l2ZW4gdXNlciBvdmVyCitTU0gsIHRoYXQgdXNlciBuZWVkcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgb25lIG9yIGJvdGggb2YgdGhvc2UKK2NvbW1hbmRzIHZpYSB0aGUgU1NIIHNoZWxsIHRoYXQgdGhleSBhcmUgcHJvdmlkZWQgb24gbG9naW4uICBPbiBzb21lCitzeXN0ZW1zLCB0aGF0IHNoZWxsIGFjY2VzcyBpcyBsaW1pdGVkIHRvIG9ubHkgYmVpbmcgYWJsZSB0byBydW4gdGhvc2UKK3R3byBjb21tYW5kcywgb3IgZXZlbiBqdXN0IG9uZSBvZiB0aGVtLgorCitJbiBhbiBzc2g6Ly8gZm9ybWF0IFVSSSwgaXQncyBhYnNvbHV0ZSBpbiB0aGUgVVJJLCBzbyB0aGUgJy8nIGFmdGVyCit0aGUgaG9zdCBuYW1lIChvciBwb3J0IG51bWJlcikgaXMgc2VudCBhcyBhbiBhcmd1bWVudCwgd2hpY2ggaXMgdGhlbgorcmVhZCBieSB0aGUgcmVtb3RlIGdpdC11cGxvYWQtcGFjayBleGFjdGx5IGFzIGlzLCBzbyBpdCdzIGVmZmVjdGl2ZWx5CithbiBhYnNvbHV0ZSBwYXRoIGluIHRoZSByZW1vdGUgZmlsZXN5c3RlbS4KKworICAgICAgIGdpdCBjbG9uZSBzc2g6Ly91c2VyQGV4YW1wbGUuY29tL3Byb2plY3QuZ2l0CisJCSAgICB8CisJCSAgICB2CisgICAgc3NoIHVzZXJAZXhhbXBsZS5jb20gImdpdC11cGxvYWQtcGFjayAnL3Byb2plY3QuZ2l0JyIKKworSW4gYSAidXNlckBob3N0OnBhdGgiIGZvcm1hdCBVUkksIGl0cyByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGhvbWUKK2RpcmVjdG9yeSwgYmVjYXVzZSB0aGUgR2l0IGNsaWVudCB3aWxsIHJ1bjoKKworICAgICBnaXQgY2xvbmUgdXNlckBleGFtcGxlLmNvbTpwcm9qZWN0LmdpdAorCQkgICAgfAorCQkgICAgdgorICBzc2ggdXNlckBleGFtcGxlLmNvbSAiZ2l0LXVwbG9hZC1wYWNrICdwcm9qZWN0LmdpdCciCisKK1RoZSBleGNlcHRpb24gaXMgaWYgYSAnficgaXMgdXNlZCwgaW4gd2hpY2ggY2FzZQord2UgZXhlY3V0ZSBpdCB3aXRob3V0IHRoZSBsZWFkaW5nICcvJy4KKworICAgICAgc3NoOi8vdXNlckBleGFtcGxlLmNvbS9+YWxpY2UvcHJvamVjdC5naXQsCisJCSAgICAgfAorCQkgICAgIHYKKyAgIHNzaCB1c2VyQGV4YW1wbGUuY29tICJnaXQtdXBsb2FkLXBhY2sgJ35hbGljZS9wcm9qZWN0LmdpdCciCisKK0RlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIGBwcm90b2NvbC52ZXJzaW9uYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLAorR2l0IG1heSBhdHRlbXB0IHRvIHNlbmQgRXh0cmEgUGFyYW1ldGVycyBhcyBhIGNvbG9uLXNlcGFyYXRlZCBzdHJpbmcgaW4KK3RoZSBHSVRfUFJPVE9DT0wgZW52aXJvbm1lbnQgdmFyaWFibGUuIFRoaXMgaXMgZG9uZSBvbmx5IGlmCit0aGUgYHNzaC52YXJpYW50YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluZGljYXRlcyB0aGF0IHRoZSBzc2ggY29tbWFuZAorc3VwcG9ydHMgcGFzc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXMgYW4gYXJndW1lbnQuCisKK0EgZmV3IHRoaW5ncyB0byByZW1lbWJlciBoZXJlOgorCistIFRoZSAiY29tbWFuZCBuYW1lIiBpcyBzcGVsbGVkIHdpdGggZGFzaCAoZS5nLiBnaXQtdXBsb2FkLXBhY2spLCBidXQKKyAgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2xpZW50OworCistIFRoZSByZXBvc2l0b3J5IHBhdGggaXMgYWx3YXlzIHF1b3RlZCB3aXRoIHNpbmdsZSBxdW90ZXMuCisKK0ZldGNoaW5nIERhdGEgRnJvbSBhIFNlcnZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gb25lIEdpdCByZXBvc2l0b3J5IHdhbnRzIHRvIGdldCBkYXRhIHRoYXQgYSBzZWNvbmQgcmVwb3NpdG9yeQoraGFzLCB0aGUgZmlyc3QgY2FuICdmZXRjaCcgZnJvbSB0aGUgc2Vjb25kLiAgVGhpcyBvcGVyYXRpb24gZGV0ZXJtaW5lcword2hhdCBkYXRhIHRoZSBzZXJ2ZXIgaGFzIHRoYXQgdGhlIGNsaWVudCBkb2VzIG5vdCB0aGVuIHN0cmVhbXMgdGhhdAorZGF0YSBkb3duIHRvIHRoZSBjbGllbnQgaW4gcGFja2ZpbGUgZm9ybWF0LgorCisKK1JlZmVyZW5jZSBEaXNjb3ZlcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB0aGUgY2xpZW50IGluaXRpYWxseSBjb25uZWN0cyB0aGUgc2VydmVyIHdpbGwgaW1tZWRpYXRlbHkgcmVzcG9uZAord2l0aCBhIHZlcnNpb24gbnVtYmVyIChpZiAidmVyc2lvbj0xIiBpcyBzZW50IGFzIGFuIEV4dHJhIFBhcmFtZXRlciksCithbmQgYSBsaXN0aW5nIG9mIGVhY2ggcmVmZXJlbmNlIGl0IGhhcyAoYWxsIGJyYW5jaGVzIGFuZCB0YWdzKSBhbG9uZword2l0aCB0aGUgb2JqZWN0IG5hbWUgdGhhdCBlYWNoIHJlZmVyZW5jZSBjdXJyZW50bHkgcG9pbnRzIHRvLgorCisgICAkIGVjaG8gLWUgLW4gIjAwNDRnaXQtdXBsb2FkLXBhY2sgL3NjaGFjb24vZ2l0Ym9vay5naXRcMGhvc3Q9ZXhhbXBsZS5jb21cMFwwdmVyc2lvbj0xXDAiIHwKKyAgICAgIG5jIC12IGV4YW1wbGUuY29tIDk0MTgKKyAgIDAwMGF2ZXJzaW9uIDEKKyAgIDAwODg3MjE3YTdjN2U1ODJjNDZjZWMyMmExMzBhZGY0YjlkN2Q5NTBmYmEwIEhFQURcMG11bHRpX2FjayB0aGluLXBhY2sKKwkJc2lkZS1iYW5kIHNpZGUtYmFuZC02NGsgb2ZzLWRlbHRhIHNoYWxsb3cgbm8tcHJvZ3Jlc3MgaW5jbHVkZS10YWcKKyAgIDAwNDQxZDNmY2Q1Y2VkNDQ1ZDFhYmM0MDIyMjVjMGI4YTEyOTk2NDFmNDk3IHJlZnMvaGVhZHMvaW50ZWdyYXRpb24KKyAgIDAwM2Y3MjE3YTdjN2U1ODJjNDZjZWMyMmExMzBhZGY0YjlkN2Q5NTBmYmEwIHJlZnMvaGVhZHMvbWFzdGVyCisgICAwMDNjYjg4ZDI0NDFjYWMwOTc3ZmFmOThlZmM4MDMwNTAxMjExMjIzOGQ5ZCByZWZzL3RhZ3MvdjAuOQorICAgMDAzYzUyNTEyODQ4MGI5NmM4OWU2NDE4YjFlNDA5MDliZjZjNWIyZDU4MGYgcmVmcy90YWdzL3YxLjAKKyAgIDAwM2ZlOTJkZjQ4NzQzYjdiYzdkMjZiY2FhYmZkZGRlMGExZTIwY2FlNDdjIHJlZnMvdGFncy92MS4wXnt9CisgICAwMDAwCisKK1RoZSByZXR1cm5lZCByZXNwb25zZSBpcyBhIHBrdC1saW5lIHN0cmVhbSBkZXNjcmliaW5nIGVhY2ggcmVmIGFuZAoraXRzIGN1cnJlbnQgdmFsdWUuICBUaGUgc3RyZWFtIE1VU1QgYmUgc29ydGVkIGJ5IG5hbWUgYWNjb3JkaW5nIHRvCit0aGUgQyBsb2NhbGUgb3JkZXJpbmcuCisKK0lmIEhFQUQgaXMgYSB2YWxpZCByZWYsIEhFQUQgTVVTVCBhcHBlYXIgYXMgdGhlIGZpcnN0IGFkdmVydGlzZWQKK3JlZi4gIElmIEhFQUQgaXMgbm90IGEgdmFsaWQgcmVmLCBIRUFEIE1VU1QgTk9UIGFwcGVhciBpbiB0aGUKK2FkdmVydGlzZW1lbnQgbGlzdCBhdCBhbGwsIGJ1dCBvdGhlciByZWZzIG1heSBzdGlsbCBhcHBlYXIuCisKK1RoZSBzdHJlYW0gTVVTVCBpbmNsdWRlIGNhcGFiaWxpdHkgZGVjbGFyYXRpb25zIGJlaGluZCBhIE5VTCBvbiB0aGUKK2ZpcnN0IHJlZi4gVGhlIHBlZWxlZCB2YWx1ZSBvZiBhIHJlZiAodGhhdCBpcyAicmVmXnt9IikgTVVTVCBiZQoraW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHJlZiBpdHNlbGYsIGlmIHByZXNlbnRlZC4gQSBjb25mb3JtaW5nIHNlcnZlcgorTVVTVCBwZWVsIHRoZSByZWYgaWYgaXQncyBhbiBhbm5vdGF0ZWQgdGFnLgorCistLS0tCisgIGFkdmVydGlzZWQtcmVmcyAgPSAgKjEoInZlcnNpb24gMSIpCisJCSAgICAgIChuby1yZWZzIC8gbGlzdC1vZi1yZWZzKQorCQkgICAgICAqc2hhbGxvdworCQkgICAgICBmbHVzaC1wa3QKKworICBuby1yZWZzICAgICAgICAgID0gIFBLVC1MSU5FKHplcm8taWQgU1AgImNhcGFiaWxpdGllc157fSIKKwkJICAgICAgTlVMIGNhcGFiaWxpdHktbGlzdCkKKworICBsaXN0LW9mLXJlZnMgICAgID0gIGZpcnN0LXJlZiAqb3RoZXItcmVmCisgIGZpcnN0LXJlZiAgICAgICAgPSAgUEtULUxJTkUob2JqLWlkIFNQIHJlZm5hbWUKKwkJICAgICAgTlVMIGNhcGFiaWxpdHktbGlzdCkKKworICBvdGhlci1yZWYgICAgICAgID0gIFBLVC1MSU5FKG90aGVyLXRpcCAvIG90aGVyLXBlZWxlZCkKKyAgb3RoZXItdGlwICAgICAgICA9ICBvYmotaWQgU1AgcmVmbmFtZQorICBvdGhlci1wZWVsZWQgICAgID0gIG9iai1pZCBTUCByZWZuYW1lICJee30iCisKKyAgc2hhbGxvdyAgICAgICAgICA9ICBQS1QtTElORSgic2hhbGxvdyIgU1Agb2JqLWlkKQorCisgIGNhcGFiaWxpdHktbGlzdCAgPSAgY2FwYWJpbGl0eSAqKFNQIGNhcGFiaWxpdHkpCisgIGNhcGFiaWxpdHkgICAgICAgPSAgMSooTENfQUxQSEEgLyBESUdJVCAvICItIiAvICJfIikKKyAgTENfQUxQSEEgICAgICAgICA9ICAleDYxLTdBCistLS0tCisKK1NlcnZlciBhbmQgY2xpZW50IE1VU1QgdXNlIGxvd2VyY2FzZSBmb3Igb2JqLWlkLCBib3RoIE1VU1QgdHJlYXQgb2JqLWlkCithcyBjYXNlLWluc2Vuc2l0aXZlLgorCitTZWUgcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dCBmb3IgYSBsaXN0IG9mIGFsbG93ZWQgc2VydmVyIGNhcGFiaWxpdGllcworYW5kIGRlc2NyaXB0aW9ucy4KKworUGFja2ZpbGUgTmVnb3RpYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitBZnRlciByZWZlcmVuY2UgYW5kIGNhcGFiaWxpdGllcyBkaXNjb3ZlcnksIHRoZSBjbGllbnQgY2FuIGRlY2lkZSB0bwordGVybWluYXRlIHRoZSBjb25uZWN0aW9uIGJ5IHNlbmRpbmcgYSBmbHVzaC1wa3QsIHRlbGxpbmcgdGhlIHNlcnZlciBpdCBjYW4KK25vdyBncmFjZWZ1bGx5IHRlcm1pbmF0ZSwgYW5kIGRpc2Nvbm5lY3QsIHdoZW4gaXQgZG9lcyBub3QgbmVlZCBhbnkgcGFjaworZGF0YS4gVGhpcyBjYW4gaGFwcGVuIHdpdGggdGhlIGxzLXJlbW90ZSBjb21tYW5kLCBhbmQgYWxzbyBjYW4gaGFwcGVuIHdoZW4KK3RoZSBjbGllbnQgYWxyZWFkeSBpcyB1cCB0byBkYXRlLgorCitPdGhlcndpc2UsIGl0IGVudGVycyB0aGUgbmVnb3RpYXRpb24gcGhhc2UsIHdoZXJlIHRoZSBjbGllbnQgYW5kCitzZXJ2ZXIgZGV0ZXJtaW5lIHdoYXQgdGhlIG1pbmltYWwgcGFja2ZpbGUgbmVjZXNzYXJ5IGZvciB0cmFuc3BvcnQgaXMsCitieSB0ZWxsaW5nIHRoZSBzZXJ2ZXIgd2hhdCBvYmplY3RzIGl0IHdhbnRzLCBpdHMgc2hhbGxvdyBvYmplY3RzCisoaWYgYW55KSwgYW5kIHRoZSBtYXhpbXVtIGNvbW1pdCBkZXB0aCBpdCB3YW50cyAoaWYgYW55KS4gIFRoZSBjbGllbnQKK3dpbGwgYWxzbyBzZW5kIGEgbGlzdCBvZiB0aGUgY2FwYWJpbGl0aWVzIGl0IHdhbnRzIHRvIGJlIGluIGVmZmVjdCwKK291dCBvZiB3aGF0IHRoZSBzZXJ2ZXIgc2FpZCBpdCBjb3VsZCBkbyB3aXRoIHRoZSBmaXJzdCAnd2FudCcgbGluZS4KKworLS0tLQorICB1cGxvYWQtcmVxdWVzdCAgICA9ICB3YW50LWxpc3QKKwkJICAgICAgICpzaGFsbG93LWxpbmUKKwkJICAgICAgICoxZGVwdGgtcmVxdWVzdAorCQkgICAgICAgW2ZpbHRlci1yZXF1ZXN0XQorCQkgICAgICAgZmx1c2gtcGt0CisKKyAgd2FudC1saXN0ICAgICAgICAgPSAgZmlyc3Qtd2FudAorCQkgICAgICAgKmFkZGl0aW9uYWwtd2FudAorCisgIHNoYWxsb3ctbGluZSAgICAgID0gIFBLVC1MSU5FKCJzaGFsbG93IiBTUCBvYmotaWQpCisKKyAgZGVwdGgtcmVxdWVzdCAgICAgPSAgUEtULUxJTkUoImRlZXBlbiIgU1AgZGVwdGgpIC8KKwkJICAgICAgIFBLVC1MSU5FKCJkZWVwZW4tc2luY2UiIFNQIHRpbWVzdGFtcCkgLworCQkgICAgICAgUEtULUxJTkUoImRlZXBlbi1ub3QiIFNQIHJlZikKKworICBmaXJzdC13YW50ICAgICAgICA9ICBQS1QtTElORSgid2FudCIgU1Agb2JqLWlkIFNQIGNhcGFiaWxpdHktbGlzdCkKKyAgYWRkaXRpb25hbC13YW50ICAgPSAgUEtULUxJTkUoIndhbnQiIFNQIG9iai1pZCkKKworICBkZXB0aCAgICAgICAgICAgICA9ICAxKkRJR0lUCisKKyAgZmlsdGVyLXJlcXVlc3QgICAgPSAgUEtULUxJTkUoImZpbHRlciIgU1AgZmlsdGVyLXNwZWMpCistLS0tCisKK0NsaWVudHMgTVVTVCBzZW5kIGFsbCB0aGUgb2JqLWlkcyBpdCB3YW50cyBmcm9tIHRoZSByZWZlcmVuY2UKK2Rpc2NvdmVyeSBwaGFzZSBhcyAnd2FudCcgbGluZXMuIENsaWVudHMgTVVTVCBzZW5kIGF0IGxlYXN0IG9uZQorJ3dhbnQnIGNvbW1hbmQgaW4gdGhlIHJlcXVlc3QgYm9keS4gQ2xpZW50cyBNVVNUIE5PVCBtZW50aW9uIGFuCitvYmotaWQgaW4gYSAnd2FudCcgY29tbWFuZCB3aGljaCBkaWQgbm90IGFwcGVhciBpbiB0aGUgcmVzcG9uc2UKK29idGFpbmVkIHRocm91Z2ggcmVmIGRpc2NvdmVyeS4KKworVGhlIGNsaWVudCBNVVNUIHdyaXRlIGFsbCBvYmotaWRzIHdoaWNoIGl0IG9ubHkgaGFzIHNoYWxsb3cgY29waWVzCitvZiAobWVhbmluZyB0aGF0IGl0IGRvZXMgbm90IGhhdmUgdGhlIHBhcmVudHMgb2YgYSBjb21taXQpIGFzCisnc2hhbGxvdycgbGluZXMgc28gdGhhdCB0aGUgc2VydmVyIGlzIGF3YXJlIG9mIHRoZSBsaW1pdGF0aW9ucyBvZgordGhlIGNsaWVudCdzIGhpc3RvcnkuCisKK1RoZSBjbGllbnQgbm93IHNlbmRzIHRoZSBtYXhpbXVtIGNvbW1pdCBoaXN0b3J5IGRlcHRoIGl0IHdhbnRzIGZvcgordGhpcyB0cmFuc2FjdGlvbiwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiBjb21taXRzIGl0IHdhbnRzIGZyb20gdGhlCit0aXAgb2YgdGhlIGhpc3RvcnksIGlmIGFueSwgYXMgYSAnZGVlcGVuJyBsaW5lLiAgQSBkZXB0aCBvZiAwIGlzIHRoZQorc2FtZSBhcyBub3QgbWFraW5nIGEgZGVwdGggcmVxdWVzdC4gVGhlIGNsaWVudCBkb2VzIG5vdCB3YW50IHRvIHJlY2VpdmUKK2FueSBjb21taXRzIGJleW9uZCB0aGlzIGRlcHRoLCBub3IgZG9lcyBpdCB3YW50IG9iamVjdHMgbmVlZGVkIG9ubHkgdG8KK2NvbXBsZXRlIHRob3NlIGNvbW1pdHMuIENvbW1pdHMgd2hvc2UgcGFyZW50cyBhcmUgbm90IHJlY2VpdmVkIGFzIGEKK3Jlc3VsdCBhcmUgZGVmaW5lZCBhcyBzaGFsbG93IGFuZCBtYXJrZWQgYXMgc3VjaCBpbiB0aGUgc2VydmVyLiBUaGlzCitpbmZvcm1hdGlvbiBpcyBzZW50IGJhY2sgdG8gdGhlIGNsaWVudCBpbiB0aGUgbmV4dCBzdGVwLgorCitUaGUgY2xpZW50IGNhbiBvcHRpb25hbGx5IHJlcXVlc3QgdGhhdCBwYWNrLW9iamVjdHMgb21pdCB2YXJpb3VzCitvYmplY3RzIGZyb20gdGhlIHBhY2tmaWxlIHVzaW5nIG9uZSBvZiBzZXZlcmFsIGZpbHRlcmluZyB0ZWNobmlxdWVzLgorVGhlc2UgYXJlIGludGVuZGVkIGZvciB1c2Ugd2l0aCBwYXJ0aWFsIGNsb25lIGFuZCBwYXJ0aWFsIGZldGNoCitvcGVyYXRpb25zLiBBbiBvYmplY3QgdGhhdCBkb2VzIG5vdCBtZWV0IGEgZmlsdGVyLXNwZWMgdmFsdWUgaXMKK29taXR0ZWQgdW5sZXNzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGluIGEgJ3dhbnQnIGxpbmUuIFNlZSBgcmV2LWxpc3RgCitmb3IgcG9zc2libGUgZmlsdGVyLXNwZWMgdmFsdWVzLgorCitPbmNlIGFsbCB0aGUgJ3dhbnQncyBhbmQgJ3NoYWxsb3cncyAoYW5kIG9wdGlvbmFsICdkZWVwZW4nKSBhcmUKK3RyYW5zZmVycmVkLCBjbGllbnRzIE1VU1Qgc2VuZCBhIGZsdXNoLXBrdCwgdG8gdGVsbCB0aGUgc2VydmVyIHNpZGUKK3RoYXQgaXQgaXMgZG9uZSBzZW5kaW5nIHRoZSBsaXN0LgorCitPdGhlcndpc2UsIGlmIHRoZSBjbGllbnQgc2VudCBhIHBvc2l0aXZlIGRlcHRoIHJlcXVlc3QsIHRoZSBzZXJ2ZXIKK3dpbGwgZGV0ZXJtaW5lIHdoaWNoIGNvbW1pdHMgd2lsbCBhbmQgd2lsbCBub3QgYmUgc2hhbGxvdyBhbmQKK3NlbmQgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2xpZW50LiBJZiB0aGUgY2xpZW50IGRpZCBub3QgcmVxdWVzdAorYSBwb3NpdGl2ZSBkZXB0aCwgdGhpcyBzdGVwIGlzIHNraXBwZWQuCisKKy0tLS0KKyAgc2hhbGxvdy11cGRhdGUgICA9ICAqc2hhbGxvdy1saW5lCisJCSAgICAgICp1bnNoYWxsb3ctbGluZQorCQkgICAgICBmbHVzaC1wa3QKKworICBzaGFsbG93LWxpbmUgICAgID0gIFBLVC1MSU5FKCJzaGFsbG93IiBTUCBvYmotaWQpCisKKyAgdW5zaGFsbG93LWxpbmUgICA9ICBQS1QtTElORSgidW5zaGFsbG93IiBTUCBvYmotaWQpCistLS0tCisKK0lmIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZCBhIHBvc2l0aXZlIGRlcHRoLCB0aGUgc2VydmVyIHdpbGwgY29tcHV0ZQordGhlIHNldCBvZiBjb21taXRzIHdoaWNoIGFyZSBubyBkZWVwZXIgdGhhbiB0aGUgZGVzaXJlZCBkZXB0aC4gVGhlIHNldAorb2YgY29tbWl0cyBzdGFydCBhdCB0aGUgY2xpZW50J3Mgd2FudHMuCisKK1RoZSBzZXJ2ZXIgd3JpdGVzICdzaGFsbG93JyBsaW5lcyBmb3IgZWFjaAorY29tbWl0IHdob3NlIHBhcmVudHMgd2lsbCBub3QgYmUgc2VudCBhcyBhIHJlc3VsdC4gVGhlIHNlcnZlciB3cml0ZXMKK2FuICd1bnNoYWxsb3cnIGxpbmUgZm9yIGVhY2ggY29tbWl0IHdoaWNoIHRoZSBjbGllbnQgaGFzIGluZGljYXRlZCBpcworc2hhbGxvdywgYnV0IGlzIG5vIGxvbmdlciBzaGFsbG93IGF0IHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIGRlcHRoCisodGhhdCBpcywgaXRzIHBhcmVudHMgd2lsbCBub3cgYmUgc2VudCkuIFRoZSBzZXJ2ZXIgTVVTVCBOT1QgbWFyaworYXMgdW5zaGFsbG93IGFueXRoaW5nIHdoaWNoIHRoZSBjbGllbnQgaGFzIG5vdCBpbmRpY2F0ZWQgd2FzIHNoYWxsb3cuCisKK05vdyB0aGUgY2xpZW50IHdpbGwgc2VuZCBhIGxpc3Qgb2YgdGhlIG9iai1pZHMgaXQgaGFzIHVzaW5nICdoYXZlJworbGluZXMsIHNvIHRoZSBzZXJ2ZXIgY2FuIG1ha2UgYSBwYWNrZmlsZSB0aGF0IG9ubHkgY29udGFpbnMgdGhlIG9iamVjdHMKK3RoYXQgdGhlIGNsaWVudCBuZWVkcy4gSW4gbXVsdGlfYWNrIG1vZGUsIHRoZSBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24KK3dpbGwgc2VuZCB1cCB0byAzMiBvZiB0aGVzZSBhdCBhIHRpbWUsIHRoZW4gd2lsbCBzZW5kIGEgZmx1c2gtcGt0LiBUaGUKK2Nhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiB3aWxsIHNraXAgYWhlYWQgYW5kIHNlbmQgdGhlIG5leHQgMzIgaW1tZWRpYXRlbHksCitzbyB0aGF0IHRoZXJlIGlzIGFsd2F5cyBhIGJsb2NrIG9mIDMyICJpbi1mbGlnaHQgb24gdGhlIHdpcmUiIGF0IGEgdGltZS4KKworLS0tLQorICB1cGxvYWQtaGF2ZXMgICAgICA9ICBoYXZlLWxpc3QKKwkJICAgICAgIGNvbXB1dGUtZW5kCisKKyAgaGF2ZS1saXN0ICAgICAgICAgPSAgKmhhdmUtbGluZQorICBoYXZlLWxpbmUgICAgICAgICA9ICBQS1QtTElORSgiaGF2ZSIgU1Agb2JqLWlkKQorICBjb21wdXRlLWVuZCAgICAgICA9ICBmbHVzaC1wa3QgLyBQS1QtTElORSgiZG9uZSIpCistLS0tCisKK0lmIHRoZSBzZXJ2ZXIgcmVhZHMgJ2hhdmUnIGxpbmVzLCBpdCB0aGVuIHdpbGwgcmVzcG9uZCBieSBBQ0tpbmcgYW55CitvZiB0aGUgb2JqLWlkcyB0aGUgY2xpZW50IHNhaWQgaXQgaGFkIHRoYXQgdGhlIHNlcnZlciBhbHNvIGhhcy4gVGhlCitzZXJ2ZXIgd2lsbCBBQ0sgb2JqLWlkcyBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hpY2ggYWNrIG1vZGUgaXMKK2Nob3NlbiBieSB0aGUgY2xpZW50LgorCitJbiBtdWx0aV9hY2sgbW9kZToKKworICAqIHRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kIHdpdGggJ0FDSyBvYmotaWQgY29udGludWUnIGZvciBhbnkgY29tbW9uCisgICAgY29tbWl0cy4KKworICAqIG9uY2UgdGhlIHNlcnZlciBoYXMgZm91bmQgYW4gYWNjZXB0YWJsZSBjb21tb24gYmFzZSBjb21taXQgYW5kIGlzCisgICAgcmVhZHkgdG8gbWFrZSBhIHBhY2tmaWxlLCBpdCB3aWxsIGJsaW5kbHkgQUNLIGFsbCAnaGF2ZScgb2JqLWlkcworICAgIGJhY2sgdG8gdGhlIGNsaWVudC4KKworICAqIHRoZSBzZXJ2ZXIgd2lsbCB0aGVuIHNlbmQgYSAnTkFLJyBhbmQgdGhlbiB3YWl0IGZvciBhbm90aGVyIHJlc3BvbnNlCisgICAgZnJvbSB0aGUgY2xpZW50IC0gZWl0aGVyIGEgJ2RvbmUnIG9yIGFub3RoZXIgbGlzdCBvZiAnaGF2ZScgbGluZXMuCisKK0luIG11bHRpX2Fja19kZXRhaWxlZCBtb2RlOgorCisgICogdGhlIHNlcnZlciB3aWxsIGRpZmZlcmVudGlhdGUgdGhlIEFDS3Mgd2hlcmUgaXQgaXMgc2lnbmFsaW5nCisgICAgdGhhdCBpdCBpcyByZWFkeSB0byBzZW5kIGRhdGEgd2l0aCAnQUNLIG9iai1pZCByZWFkeScgbGluZXMsIGFuZAorICAgIHNpZ25hbHMgdGhlIGlkZW50aWZpZWQgY29tbW9uIGNvbW1pdHMgd2l0aCAnQUNLIG9iai1pZCBjb21tb24nIGxpbmVzLgorCitXaXRob3V0IGVpdGhlciBtdWx0aV9hY2sgb3IgbXVsdGlfYWNrX2RldGFpbGVkOgorCisgKiB1cGxvYWQtcGFjayBzZW5kcyAiQUNLIG9iai1pZCIgb24gdGhlIGZpcnN0IGNvbW1vbiBvYmplY3QgaXQgZmluZHMuCisgICBBZnRlciB0aGF0IGl0IHNheXMgbm90aGluZyB1bnRpbCB0aGUgY2xpZW50IGdpdmVzIGl0IGEgImRvbmUiLgorCisgKiB1cGxvYWQtcGFjayBzZW5kcyAiTkFLIiBvbiBhIGZsdXNoLXBrdCBpZiBubyBjb21tb24gb2JqZWN0CisgICBoYXMgYmVlbiBmb3VuZCB5ZXQuICBJZiBvbmUgaGFzIGJlZW4gZm91bmQsIGFuZCB0aHVzIGFuIEFDSworICAgd2FzIGFscmVhZHkgc2VudCwgaXQncyBzaWxlbnQgb24gdGhlIGZsdXNoLXBrdC4KKworQWZ0ZXIgdGhlIGNsaWVudCBoYXMgZ290dGVuIGVub3VnaCBBQ0sgcmVzcG9uc2VzIHRoYXQgaXQgY2FuIGRldGVybWluZQordGhhdCB0aGUgc2VydmVyIGhhcyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gc2VuZCBhbiBlZmZpY2llbnQgcGFja2ZpbGUKKyhpbiB0aGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIGRldGVybWluZWQgd2hlbiBpdCBoYXMgcmVjZWl2ZWQKK2Vub3VnaCBBQ0tzIHRoYXQgaXQgY2FuIGNvbG9yIGV2ZXJ5dGhpbmcgbGVmdCBpbiB0aGUgLS1kYXRlLW9yZGVyIHF1ZXVlCithcyBjb21tb24gd2l0aCB0aGUgc2VydmVyLCBvciB0aGUgLS1kYXRlLW9yZGVyIHF1ZXVlIGlzIGVtcHR5KSwgb3IgdGhlCitjbGllbnQgZGV0ZXJtaW5lcyB0aGF0IGl0IHdhbnRzIHRvIGdpdmUgdXAgKGluIHRoZSBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24sCit0aGlzIGlzIGRldGVybWluZWQgd2hlbiB0aGUgY2xpZW50IHNlbmRzIDI1NiAnaGF2ZScgbGluZXMgd2l0aG91dCBnZXR0aW5nCithbnkgb2YgdGhlbSBBQ0tlZCBieSB0aGUgc2VydmVyIC0gbWVhbmluZyB0aGVyZSBpcyBub3RoaW5nIGluIGNvbW1vbiBhbmQKK3RoZSBzZXJ2ZXIgc2hvdWxkIGp1c3Qgc2VuZCBhbGwgb2YgaXRzIG9iamVjdHMpLCB0aGVuIHRoZSBjbGllbnQgd2lsbCBzZW5kCithICdkb25lJyBjb21tYW5kLiAgVGhlICdkb25lJyBjb21tYW5kIHNpZ25hbHMgdG8gdGhlIHNlcnZlciB0aGF0IHRoZSBjbGllbnQKK2lzIHJlYWR5IHRvIHJlY2VpdmUgaXRzIHBhY2tmaWxlIGRhdGEuCisKK0hvd2V2ZXIsIHRoZSAyNTYgbGltaXQgKm9ubHkqIHR1cm5zIG9uIGluIHRoZSBjYW5vbmljYWwgY2xpZW50CitpbXBsZW1lbnRhdGlvbiBpZiB3ZSBoYXZlIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSAiQUNLICVzIGNvbnRpbnVlIgorZHVyaW5nIGEgcHJpb3Igcm91bmQuICBUaGlzIGhlbHBzIHRvIGVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBjb21tb24KK2FuY2VzdG9yIGlzIGZvdW5kIGJlZm9yZSB3ZSBnaXZlIHVwIGVudGlyZWx5LgorCitPbmNlIHRoZSAnZG9uZScgbGluZSBpcyByZWFkIGZyb20gdGhlIGNsaWVudCwgdGhlIHNlcnZlciB3aWxsIGVpdGhlcgorc2VuZCBhIGZpbmFsICdBQ0sgb2JqLWlkJyBvciBpdCB3aWxsIHNlbmQgYSAnTkFLJy4gJ29iai1pZCcgaXMgdGhlIG9iamVjdAorbmFtZSBvZiB0aGUgbGFzdCBjb21taXQgZGV0ZXJtaW5lZCB0byBiZSBjb21tb24uIFRoZSBzZXJ2ZXIgb25seSBzZW5kcworQUNLIGFmdGVyICdkb25lJyBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY29tbW9uIGJhc2UgYW5kIG11bHRpX2FjayBvcgorbXVsdGlfYWNrX2RldGFpbGVkIGlzIGVuYWJsZWQuIFRoZSBzZXJ2ZXIgYWx3YXlzIHNlbmRzIE5BSyBhZnRlciAnZG9uZScKK2lmIHRoZXJlIGlzIG5vIGNvbW1vbiBiYXNlIGZvdW5kLgorCitJbnN0ZWFkIG9mICdBQ0snIG9yICdOQUsnLCB0aGUgc2VydmVyIG1heSBzZW5kIGFuIGVycm9yIG1lc3NhZ2UgKGZvcgorZXhhbXBsZSwgaWYgaXQgZG9lcyBub3QgcmVjb2duaXplIGFuIG9iamVjdCBpbiBhICd3YW50JyBsaW5lIHJlY2VpdmVkCitmcm9tIHRoZSBjbGllbnQpLgorCitUaGVuIHRoZSBzZXJ2ZXIgd2lsbCBzdGFydCBzZW5kaW5nIGl0cyBwYWNrZmlsZSBkYXRhLgorCistLS0tCisgIHNlcnZlci1yZXNwb25zZSA9ICphY2tfbXVsdGkgYWNrIC8gbmFrCisgIGFja19tdWx0aSAgICAgICA9IFBLVC1MSU5FKCJBQ0siIFNQIG9iai1pZCBhY2tfc3RhdHVzKQorICBhY2tfc3RhdHVzICAgICAgPSAiY29udGludWUiIC8gImNvbW1vbiIgLyAicmVhZHkiCisgIGFjayAgICAgICAgICAgICA9IFBLVC1MSU5FKCJBQ0siIFNQIG9iai1pZCkKKyAgbmFrICAgICAgICAgICAgID0gUEtULUxJTkUoIk5BSyIpCistLS0tCisKK0Egc2ltcGxlIGNsb25lIG1heSBsb29rIGxpa2UgdGhpcyAod2l0aCBubyAnaGF2ZScgbGluZXMpOgorCistLS0tCisgICBDOiAwMDU0d2FudCA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIG11bHRpX2FjayBcCisgICAgIHNpZGUtYmFuZC02NGsgb2ZzLWRlbHRhXG4KKyAgIEM6IDAwMzJ3YW50IDdkMTY2NTE0NGEzYTk3NWMwNWYxZjQzOTAyZGRhZjA4NGU3ODRkYmVcbgorICAgQzogMDAzMndhbnQgNWEzZjZiZTc1NWJiYjdkZWFlNTAwNjU5ODhjYmZhMWZmYTlhYjY4YVxuCisgICBDOiAwMDMyd2FudCA3ZTQ3ZmUyYmQ4ZDAxZDQ4MWY0NGQ3YWYwNTMxYmQ5M2QzYjIxYzAxXG4KKyAgIEM6IDAwMzJ3YW50IDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmRcbgorICAgQzogMDAwMAorICAgQzogMDAwOWRvbmVcbgorCisgICBTOiAwMDA4TkFLXG4KKyAgIFM6IFtQQUNLRklMRV0KKy0tLS0KKworQW4gaW5jcmVtZW50YWwgdXBkYXRlIChmZXRjaCkgcmVzcG9uc2UgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0KKyAgIEM6IDAwNTR3YW50IDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgbXVsdGlfYWNrIFwKKyAgICAgc2lkZS1iYW5kLTY0ayBvZnMtZGVsdGFcbgorICAgQzogMDAzMndhbnQgN2QxNjY1MTQ0YTNhOTc1YzA1ZjFmNDM5MDJkZGFmMDg0ZTc4NGRiZVxuCisgICBDOiAwMDMyd2FudCA1YTNmNmJlNzU1YmJiN2RlYWU1MDA2NTk4OGNiZmExZmZhOWFiNjhhXG4KKyAgIEM6IDAwMDAKKyAgIEM6IDAwMzJoYXZlIDdlNDdmZTJiZDhkMDFkNDgxZjQ0ZDdhZjA1MzFiZDkzZDNiMjFjMDFcbgorICAgQzogWzMwIG1vcmUgaGF2ZSBsaW5lc10KKyAgIEM6IDAwMzJoYXZlIDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmRcbgorICAgQzogMDAwMAorCisgICBTOiAwMDNhQUNLIDdlNDdmZTJiZDhkMDFkNDgxZjQ0ZDdhZjA1MzFiZDkzZDNiMjFjMDEgY29udGludWVcbgorICAgUzogMDAzYUFDSyA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIGNvbnRpbnVlXG4KKyAgIFM6IDAwMDhOQUtcbgorCisgICBDOiAwMDA5ZG9uZVxuCisKKyAgIFM6IDAwMzFBQ0sgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZFxuCisgICBTOiBbUEFDS0ZJTEVdCistLS0tCisKKworUGFja2ZpbGUgRGF0YQorLS0tLS0tLS0tLS0tLQorCitOb3cgdGhhdCB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgaGF2ZSBmaW5pc2hlZCBuZWdvdGlhdGlvbiBhYm91dCB3aGF0Cit0aGUgbWluaW1hbCBhbW91bnQgb2YgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHNlbnQgdG8gdGhlIGNsaWVudCBpcywgdGhlIHNlcnZlcgord2lsbCBjb25zdHJ1Y3QgYW5kIHNlbmQgdGhlIHJlcXVpcmVkIGRhdGEgaW4gcGFja2ZpbGUgZm9ybWF0LgorCitTZWUgcGFjay1mb3JtYXQudHh0IGZvciB3aGF0IHRoZSBwYWNrZmlsZSBpdHNlbGYgYWN0dWFsbHkgbG9va3MgbGlrZS4KKworSWYgJ3NpZGUtYmFuZCcgb3IgJ3NpZGUtYmFuZC02NGsnIGNhcGFiaWxpdGllcyBoYXZlIGJlZW4gc3BlY2lmaWVkIGJ5Cit0aGUgY2xpZW50LCB0aGUgc2VydmVyIHdpbGwgc2VuZCB0aGUgcGFja2ZpbGUgZGF0YSBtdWx0aXBsZXhlZC4KKworRWFjaCBwYWNrZXQgc3RhcnRpbmcgd2l0aCB0aGUgcGFja2V0LWxpbmUgbGVuZ3RoIG9mIHRoZSBhbW91bnQgb2YgZGF0YQordGhhdCBmb2xsb3dzLCBmb2xsb3dlZCBieSBhIHNpbmdsZSBieXRlIHNwZWNpZnlpbmcgdGhlIHNpZGViYW5kIHRoZQorZm9sbG93aW5nIGRhdGEgaXMgY29taW5nIGluIG9uLgorCitJbiAnc2lkZS1iYW5kJyBtb2RlLCBpdCB3aWxsIHNlbmQgdXAgdG8gOTk5IGRhdGEgYnl0ZXMgcGx1cyAxIGNvbnRyb2wKK2NvZGUsIGZvciBhIHRvdGFsIG9mIHVwIHRvIDEwMDAgYnl0ZXMgaW4gYSBwa3QtbGluZS4gIEluICdzaWRlLWJhbmQtNjRrJworbW9kZSBpdCB3aWxsIHNlbmQgdXAgdG8gNjU1MTkgZGF0YSBieXRlcyBwbHVzIDEgY29udHJvbCBjb2RlLCBmb3IgYQordG90YWwgb2YgdXAgdG8gNjU1MjAgYnl0ZXMgaW4gYSBwa3QtbGluZS4KKworVGhlIHNpZGViYW5kIGJ5dGUgd2lsbCBiZSBhICcxJywgJzInIG9yIGEgJzMnLiBTaWRlYmFuZCAnMScgd2lsbCBjb250YWluCitwYWNrZmlsZSBkYXRhLCBzaWRlYmFuZCAnMicgd2lsbCBiZSB1c2VkIGZvciBwcm9ncmVzcyBpbmZvcm1hdGlvbiB0aGF0IHRoZQorY2xpZW50IHdpbGwgZ2VuZXJhbGx5IHByaW50IHRvIHN0ZGVyciBhbmQgc2lkZWJhbmQgJzMnIGlzIHVzZWQgZm9yIGVycm9yCitpbmZvcm1hdGlvbi4KKworSWYgbm8gJ3NpZGUtYmFuZCcgY2FwYWJpbGl0eSB3YXMgc3BlY2lmaWVkLCB0aGUgc2VydmVyIHdpbGwgc3RyZWFtIHRoZQorZW50aXJlIHBhY2tmaWxlIHdpdGhvdXQgbXVsdGlwbGV4aW5nLgorCisKK1B1c2hpbmcgRGF0YSBUbyBhIFNlcnZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B1c2hpbmcgZGF0YSB0byBhIHNlcnZlciB3aWxsIGludm9rZSB0aGUgJ3JlY2VpdmUtcGFjaycgcHJvY2VzcyBvbiB0aGUKK3NlcnZlciwgd2hpY2ggd2lsbCBhbGxvdyB0aGUgY2xpZW50IHRvIHRlbGwgaXQgd2hpY2ggcmVmZXJlbmNlcyBpdCBzaG91bGQKK3VwZGF0ZSBhbmQgdGhlbiBzZW5kIGFsbCB0aGUgZGF0YSB0aGUgc2VydmVyIHdpbGwgbmVlZCBmb3IgdGhvc2UgbmV3CityZWZlcmVuY2VzIHRvIGJlIGNvbXBsZXRlLiAgT25jZSBhbGwgdGhlIGRhdGEgaXMgcmVjZWl2ZWQgYW5kIHZhbGlkYXRlZCwKK3RoZSBzZXJ2ZXIgd2lsbCB0aGVuIHVwZGF0ZSBpdHMgcmVmZXJlbmNlcyB0byB3aGF0IHRoZSBjbGllbnQgc3BlY2lmaWVkLgorCitBdXRoZW50aWNhdGlvbgorLS0tLS0tLS0tLS0tLS0KKworVGhlIHByb3RvY29sIGl0c2VsZiBjb250YWlucyBubyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLiAgVGhhdCBpcyB0byBiZQoraGFuZGxlZCBieSB0aGUgdHJhbnNwb3J0LCBzdWNoIGFzIFNTSCwgYmVmb3JlIHRoZSAncmVjZWl2ZS1wYWNrJyBwcm9jZXNzIGlzCitpbnZva2VkLiAgSWYgJ3JlY2VpdmUtcGFjaycgaXMgY29uZmlndXJlZCBvdmVyIHRoZSBHaXQgdHJhbnNwb3J0LCB0aG9zZQorcmVwb3NpdG9yaWVzIHdpbGwgYmUgd3JpdGFibGUgYnkgYW55b25lIHdobyBjYW4gYWNjZXNzIHRoYXQgcG9ydCAoOTQxOCkgYXMKK3RoYXQgdHJhbnNwb3J0IGlzIHVuYXV0aGVudGljYXRlZC4KKworUmVmZXJlbmNlIERpc2NvdmVyeQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmVmZXJlbmNlIGRpc2NvdmVyeSBwaGFzZSBpcyBkb25lIG5lYXJseSB0aGUgc2FtZSB3YXkgYXMgaXQgaXMgaW4gdGhlCitmZXRjaGluZyBwcm90b2NvbC4gRWFjaCByZWZlcmVuY2Ugb2JqLWlkIGFuZCBuYW1lIG9uIHRoZSBzZXJ2ZXIgaXMgc2VudAoraW4gcGFja2V0LWxpbmUgZm9ybWF0IHRvIHRoZSBjbGllbnQsIGZvbGxvd2VkIGJ5IGEgZmx1c2gtcGt0LiAgVGhlIG9ubHkKK3JlYWwgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBjYXBhYmlsaXR5IGxpc3RpbmcgaXMgZGlmZmVyZW50IC0gdGhlIG9ubHkKK3Bvc3NpYmxlIHZhbHVlcyBhcmUgJ3JlcG9ydC1zdGF0dXMnLCAnZGVsZXRlLXJlZnMnLCAnb2ZzLWRlbHRhJyBhbmQKKydwdXNoLW9wdGlvbnMnLgorCitSZWZlcmVuY2UgVXBkYXRlIFJlcXVlc3QgYW5kIFBhY2tmaWxlIFRyYW5zZmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uY2UgdGhlIGNsaWVudCBrbm93cyB3aGF0IHJlZmVyZW5jZXMgdGhlIHNlcnZlciBpcyBhdCwgaXQgY2FuIHNlbmQgYQorbGlzdCBvZiByZWZlcmVuY2UgdXBkYXRlIHJlcXVlc3RzLiAgRm9yIGVhY2ggcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIKK3RoYXQgaXQgd2FudHMgdG8gdXBkYXRlLCBpdCBzZW5kcyBhIGxpbmUgbGlzdGluZyB0aGUgb2JqLWlkIGN1cnJlbnRseSBvbgordGhlIHNlcnZlciwgdGhlIG9iai1pZCB0aGUgY2xpZW50IHdvdWxkIGxpa2UgdG8gdXBkYXRlIGl0IHRvIGFuZCB0aGUgbmFtZQorb2YgdGhlIHJlZmVyZW5jZS4KKworVGhpcyBsaXN0IGlzIGZvbGxvd2VkIGJ5IGEgZmx1c2gtcGt0LgorCistLS0tCisgIHVwZGF0ZS1yZXF1ZXN0cyAgID0gICpzaGFsbG93ICggY29tbWFuZC1saXN0IHwgcHVzaC1jZXJ0ICkKKworICBzaGFsbG93ICAgICAgICAgICA9ICBQS1QtTElORSgic2hhbGxvdyIgU1Agb2JqLWlkKQorCisgIGNvbW1hbmQtbGlzdCAgICAgID0gIFBLVC1MSU5FKGNvbW1hbmQgTlVMIGNhcGFiaWxpdHktbGlzdCkKKwkJICAgICAgICpQS1QtTElORShjb21tYW5kKQorCQkgICAgICAgZmx1c2gtcGt0CisKKyAgY29tbWFuZCAgICAgICAgICAgPSAgY3JlYXRlIC8gZGVsZXRlIC8gdXBkYXRlCisgIGNyZWF0ZSAgICAgICAgICAgID0gIHplcm8taWQgU1AgbmV3LWlkICBTUCBuYW1lCisgIGRlbGV0ZSAgICAgICAgICAgID0gIG9sZC1pZCAgU1AgemVyby1pZCBTUCBuYW1lCisgIHVwZGF0ZSAgICAgICAgICAgID0gIG9sZC1pZCAgU1AgbmV3LWlkICBTUCBuYW1lCisKKyAgb2xkLWlkICAgICAgICAgICAgPSAgb2JqLWlkCisgIG5ldy1pZCAgICAgICAgICAgID0gIG9iai1pZAorCisgIHB1c2gtY2VydCAgICAgICAgID0gUEtULUxJTkUoInB1c2gtY2VydCIgTlVMIGNhcGFiaWxpdHktbGlzdCBMRikKKwkJICAgICAgUEtULUxJTkUoImNlcnRpZmljYXRlIHZlcnNpb24gMC4xIiBMRikKKwkJICAgICAgUEtULUxJTkUoInB1c2hlciIgU1AgaWRlbnQgTEYpCisJCSAgICAgIFBLVC1MSU5FKCJwdXNoZWUiIFNQIHVybCBMRikKKwkJICAgICAgUEtULUxJTkUoIm5vbmNlIiBTUCBub25jZSBMRikKKwkJICAgICAgKlBLVC1MSU5FKCJwdXNoLW9wdGlvbiIgU1AgcHVzaC1vcHRpb24gTEYpCisJCSAgICAgIFBLVC1MSU5FKExGKQorCQkgICAgICAqUEtULUxJTkUoY29tbWFuZCBMRikKKwkJICAgICAgKlBLVC1MSU5FKGdwZy1zaWduYXR1cmUtbGluZXMgTEYpCisJCSAgICAgIFBLVC1MSU5FKCJwdXNoLWNlcnQtZW5kIiBMRikKKworICBwdXNoLW9wdGlvbiAgICAgICA9ICAxKiggVkNIQVIgfCBTUCApCistLS0tCisKK0lmIHRoZSBzZXJ2ZXIgaGFzIGFkdmVydGlzZWQgdGhlICdwdXNoLW9wdGlvbnMnIGNhcGFiaWxpdHkgYW5kIHRoZSBjbGllbnQgaGFzCitzcGVjaWZpZWQgJ3B1c2gtb3B0aW9ucycgYXMgcGFydCBvZiB0aGUgY2FwYWJpbGl0eSBsaXN0IGFib3ZlLCB0aGUgY2xpZW50IHRoZW4KK3NlbmRzIGl0cyBwdXNoIG9wdGlvbnMgZm9sbG93ZWQgYnkgYSBmbHVzaC1wa3QuCisKKy0tLS0KKyAgcHVzaC1vcHRpb25zICAgICAgPSAgKlBLVC1MSU5FKHB1c2gtb3B0aW9uKSBmbHVzaC1wa3QKKy0tLS0KKworRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgR2l0IHNlcnZlcnMsIGlmIHRoZSBjbGllbnQgc2VuZHMgYSBwdXNoCitjZXJ0IGFuZCBwdXNoIG9wdGlvbnMsIGl0IE1VU1Qgc2VuZCBpdHMgcHVzaCBvcHRpb25zIGJvdGggZW1iZWRkZWQgd2l0aGluIHRoZQorcHVzaCBjZXJ0IGFuZCBhZnRlciB0aGUgcHVzaCBjZXJ0LiAoTm90ZSB0aGF0IHRoZSBwdXNoIG9wdGlvbnMgd2l0aGluIHRoZSBjZXJ0CithcmUgcHJlZml4ZWQsIGJ1dCB0aGUgcHVzaCBvcHRpb25zIGFmdGVyIHRoZSBjZXJ0IGFyZSBub3QuKSBCb3RoIHRoZXNlIGxpc3RzCitNVVNUIGJlIHRoZSBzYW1lLCBtb2R1bG8gdGhlIHByZWZpeC4KKworQWZ0ZXIgdGhhdCB0aGUgcGFja2ZpbGUgdGhhdAorc2hvdWxkIGNvbnRhaW4gYWxsIHRoZSBvYmplY3RzIHRoYXQgdGhlIHNlcnZlciB3aWxsIG5lZWQgdG8gY29tcGxldGUgdGhlIG5ldworcmVmZXJlbmNlcyB3aWxsIGJlIHNlbnQuCisKKy0tLS0KKyAgcGFja2ZpbGUgICAgICAgICAgPSAgIlBBQ0siIDI4KihPQ1RFVCkKKy0tLS0KKworSWYgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBkZWxldGUtcmVmcywgdGhlIHNlbmRpbmcgZW5kIE1VU1QKK05PVCBhc2sgZm9yIGRlbGV0ZSBjb21tYW5kLgorCitJZiB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2gtY2VydCwgdGhlIHNlbmRpbmcgZW5kCitNVVNUIE5PVCBzZW5kIGEgcHVzaC1jZXJ0IGNvbW1hbmQuICBXaGVuIGEgcHVzaC1jZXJ0IGNvbW1hbmQgaXMKK3NlbnQsIGNvbW1hbmQtbGlzdCBNVVNUIE5PVCBiZSBzZW50OyB0aGUgY29tbWFuZHMgcmVjb3JkZWQgaW4gdGhlCitwdXNoIGNlcnRpZmljYXRlIGlzIHVzZWQgaW5zdGVhZC4KKworVGhlIHBhY2tmaWxlIE1VU1QgTk9UIGJlIHNlbnQgaWYgdGhlIG9ubHkgY29tbWFuZCB1c2VkIGlzICdkZWxldGUnLgorCitBIHBhY2tmaWxlIE1VU1QgYmUgc2VudCBpZiBlaXRoZXIgY3JlYXRlIG9yIHVwZGF0ZSBjb21tYW5kIGlzIHVzZWQsCitldmVuIGlmIHRoZSBzZXJ2ZXIgYWxyZWFkeSBoYXMgYWxsIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4gIEluIHRoaXMKK2Nhc2UgdGhlIGNsaWVudCBNVVNUIHNlbmQgYW4gZW1wdHkgcGFja2ZpbGUuICAgVGhlIG9ubHkgdGltZSB0aGlzCitpcyBsaWtlbHkgdG8gaGFwcGVuIGlzIGlmIHRoZSBjbGllbnQgaXMgY3JlYXRpbmcKK2EgbmV3IGJyYW5jaCBvciBhIHRhZyB0aGF0IHBvaW50cyB0byBhbiBleGlzdGluZyBvYmotaWQuCisKK1RoZSBzZXJ2ZXIgd2lsbCByZWNlaXZlIHRoZSBwYWNrZmlsZSwgdW5wYWNrIGl0LCB0aGVuIHZhbGlkYXRlIGVhY2gKK3JlZmVyZW5jZSB0aGF0IGlzIGJlaW5nIHVwZGF0ZWQgdGhhdCBpdCBoYXNuJ3QgY2hhbmdlZCB3aGlsZSB0aGUgcmVxdWVzdAord2FzIGJlaW5nIHByb2Nlc3NlZCAodGhlIG9iai1pZCBpcyBzdGlsbCB0aGUgc2FtZSBhcyB0aGUgb2xkLWlkKSwgYW5kCitpdCB3aWxsIHJ1biBhbnkgdXBkYXRlIGhvb2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1cGRhdGUgaXMgYWNjZXB0YWJsZS4KK0lmIGFsbCBvZiB0aGF0IGlzIGZpbmUsIHRoZSBzZXJ2ZXIgd2lsbCB0aGVuIHVwZGF0ZSB0aGUgcmVmZXJlbmNlcy4KKworUHVzaCBDZXJ0aWZpY2F0ZQorLS0tLS0tLS0tLS0tLS0tLQorCitBIHB1c2ggY2VydGlmaWNhdGUgYmVnaW5zIHdpdGggYSBzZXQgb2YgaGVhZGVyIGxpbmVzLiAgQWZ0ZXIgdGhlCitoZWFkZXIgYW5kIGFuIGVtcHR5IGxpbmUsIHRoZSBwcm90b2NvbCBjb21tYW5kcyBmb2xsb3csIG9uZSBwZXIKK2xpbmUuIE5vdGUgdGhhdCB0aGUgdHJhaWxpbmcgTEYgaW4gcHVzaC1jZXJ0IFBLVC1MSU5FcyBpcyBfbm90Xworb3B0aW9uYWw7IGl0IG11c3QgYmUgcHJlc2VudC4KKworQ3VycmVudGx5LCB0aGUgZm9sbG93aW5nIGhlYWRlciBmaWVsZHMgYXJlIGRlZmluZWQ6CisKK2BwdXNoZXJgIGlkZW50OjoKKwlJZGVudGlmeSB0aGUgR1BHIGtleSBpbiAiSHVtYW4gUmVhZGFibGUgTmFtZSA8ZW1haWxAYWRkcmVzcz4iCisJZm9ybWF0LgorCitgcHVzaGVlYCB1cmw6OgorCVRoZSByZXBvc2l0b3J5IFVSTCAoYW5vbnltaXplZCwgaWYgdGhlIFVSTCBjb250YWlucworCWF1dGhlbnRpY2F0aW9uIG1hdGVyaWFsKSB0aGUgdXNlciB3aG8gcmFuIGBnaXQgcHVzaGAKKwlpbnRlbmRlZCB0byBwdXNoIGludG8uCisKK2Bub25jZWAgbm9uY2U6OgorCVRoZSAnbm9uY2UnIHN0cmluZyB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgYXNrZWQgdGhlCisJcHVzaGluZyB1c2VyIHRvIGluY2x1ZGUgaW4gdGhlIGNlcnRpZmljYXRlLCB0byBwcmV2ZW50CisJcmVwbGF5IGF0dGFja3MuCisKK1RoZSBHUEcgc2lnbmF0dXJlIGxpbmVzIGFyZSBhIGRldGFjaGVkIHNpZ25hdHVyZSBmb3IgdGhlIGNvbnRlbnRzCityZWNvcmRlZCBpbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSBiZWZvcmUgdGhlIHNpZ25hdHVyZSBibG9jayBiZWdpbnMuCitUaGUgZGV0YWNoZWQgc2lnbmF0dXJlIGlzIHVzZWQgdG8gY2VydGlmeSB0aGF0IHRoZSBjb21tYW5kcyB3ZXJlCitnaXZlbiBieSB0aGUgcHVzaGVyLCB3aG8gbXVzdCBiZSB0aGUgc2lnbmVyLgorCitSZXBvcnQgU3RhdHVzCistLS0tLS0tLS0tLS0tCisKK0FmdGVyIHJlY2VpdmluZyB0aGUgcGFjayBkYXRhIGZyb20gdGhlIHNlbmRlciwgdGhlIHJlY2VpdmVyIHNlbmRzIGEKK3JlcG9ydCBpZiAncmVwb3J0LXN0YXR1cycgY2FwYWJpbGl0eSBpcyBpbiBlZmZlY3QuCitJdCBpcyBhIHNob3J0IGxpc3Rpbmcgb2Ygd2hhdCBoYXBwZW5lZCBpbiB0aGF0IHVwZGF0ZS4gIEl0IHdpbGwgZmlyc3QKK2xpc3QgdGhlIHN0YXR1cyBvZiB0aGUgcGFja2ZpbGUgdW5wYWNraW5nIGFzIGVpdGhlciAndW5wYWNrIG9rJyBvcgorJ3VucGFjayBbZXJyb3JdJy4gIFRoZW4gaXQgd2lsbCBsaXN0IHRoZSBzdGF0dXMgZm9yIGVhY2ggb2YgdGhlIHJlZmVyZW5jZXMKK3RoYXQgaXQgdHJpZWQgdG8gdXBkYXRlLiAgRWFjaCBsaW5lIGlzIGVpdGhlciAnb2sgW3JlZm5hbWVdJyBpZiB0aGUKK3VwZGF0ZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgJ25nIFtyZWZuYW1lXSBbZXJyb3JdJyBpZiB0aGUgdXBkYXRlIHdhcyBub3QuCisKKy0tLS0KKyAgcmVwb3J0LXN0YXR1cyAgICAgPSB1bnBhY2stc3RhdHVzCisJCSAgICAgIDEqKGNvbW1hbmQtc3RhdHVzKQorCQkgICAgICBmbHVzaC1wa3QKKworICB1bnBhY2stc3RhdHVzICAgICA9IFBLVC1MSU5FKCJ1bnBhY2siIFNQIHVucGFjay1yZXN1bHQpCisgIHVucGFjay1yZXN1bHQgICAgID0gIm9rIiAvIGVycm9yLW1zZworCisgIGNvbW1hbmQtc3RhdHVzICAgID0gY29tbWFuZC1vayAvIGNvbW1hbmQtZmFpbAorICBjb21tYW5kLW9rICAgICAgICA9IFBLVC1MSU5FKCJvayIgU1AgcmVmbmFtZSkKKyAgY29tbWFuZC1mYWlsICAgICAgPSBQS1QtTElORSgibmciIFNQIHJlZm5hbWUgU1AgZXJyb3ItbXNnKQorCisgIGVycm9yLW1zZyAgICAgICAgID0gMSooT0NURVQpIDsgd2hlcmUgbm90ICJvayIKKy0tLS0KKworVXBkYXRlcyBjYW4gYmUgdW5zdWNjZXNzZnVsIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlIHJlZmVyZW5jZSBjYW4gaGF2ZQorY2hhbmdlZCBzaW5jZSB0aGUgcmVmZXJlbmNlIGRpc2NvdmVyeSBwaGFzZSB3YXMgb3JpZ2luYWxseSBzZW50LCBtZWFuaW5nCitzb21lb25lIHB1c2hlZCBpbiB0aGUgbWVhbnRpbWUuICBUaGUgcmVmZXJlbmNlIGJlaW5nIHB1c2hlZCBjb3VsZCBiZSBhCitub24tZmFzdC1mb3J3YXJkIHJlZmVyZW5jZSBhbmQgdGhlIHVwZGF0ZSBob29rcyBvciBjb25maWd1cmF0aW9uIGNvdWxkIGJlCitzZXQgdG8gbm90IGFsbG93IHRoYXQsIGV0Yy4gIEFsc28sIHNvbWUgcmVmZXJlbmNlcyBjYW4gYmUgdXBkYXRlZCB3aGlsZSBvdGhlcnMKK2NhbiBiZSByZWplY3RlZC4KKworQW4gZXhhbXBsZSBjbGllbnQvc2VydmVyIGNvbW11bmljYXRpb24gbWlnaHQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0KKyAgIFM6IDAwNjI3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIHJlZnMvaGVhZHMvbG9jYWxcMHJlcG9ydC1zdGF0dXMgZGVsZXRlLXJlZnMgb2ZzLWRlbHRhXG4KKyAgIFM6IDAwM2U3ZDE2NjUxNDRhM2E5NzVjMDVmMWY0MzkwMmRkYWYwODRlNzg0ZGJlIHJlZnMvaGVhZHMvZGVidWdcbgorICAgUzogMDAzZjc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgcmVmcy9oZWFkcy9tYXN0ZXJcbgorICAgUzogMDAzZDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgcmVmcy9oZWFkcy90ZWFtXG4KKyAgIFM6IDAwMDAKKworICAgQzogMDA2NzdkMTY2NTE0NGEzYTk3NWMwNWYxZjQzOTAyZGRhZjA4NGU3ODRkYmUgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCByZWZzL2hlYWRzL2RlYnVnXG4KKyAgIEM6IDAwNjg3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIDVhM2Y2YmU3NTViYmI3ZGVhZTUwMDY1OTg4Y2JmYTFmZmE5YWI2OGEgcmVmcy9oZWFkcy9tYXN0ZXJcbgorICAgQzogMDAwMAorICAgQzogW1BBQ0tEQVRBXQorCisgICBTOiAwMDBldW5wYWNrIG9rXG4KKyAgIFM6IDAwMThvayByZWZzL2hlYWRzL2RlYnVnXG4KKyAgIFM6IDAwMmFuZyByZWZzL2hlYWRzL21hc3RlciBub24tZmFzdC1mb3J3YXJkXG4KKy0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhcnRpYWwtY2xvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFydGlhbC1jbG9uZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjllMTdlNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhcnRpYWwtY2xvbmUudHh0CkBAIC0wLDAgKzEsMzc1IEBACitQYXJ0aWFsIENsb25lIERlc2lnbiBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlICJQYXJ0aWFsIENsb25lIiBmZWF0dXJlIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGZvciBHaXQgdGhhdAorYWxsb3dzIEdpdCB0byBmdW5jdGlvbiB3aXRob3V0IGhhdmluZyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHJlcG9zaXRvcnkuCitUaGUgZ29hbCBvZiB0aGlzIHdvcmsgaXMgdG8gYWxsb3cgR2l0IGJldHRlciBoYW5kbGUgZXh0cmVtZWx5IGxhcmdlCityZXBvc2l0b3JpZXMuCisKK0R1cmluZyBjbG9uZSBhbmQgZmV0Y2ggb3BlcmF0aW9ucywgR2l0IGRvd25sb2FkcyB0aGUgY29tcGxldGUgY29udGVudHMKK2FuZCBoaXN0b3J5IG9mIHRoZSByZXBvc2l0b3J5LiAgVGhpcyBpbmNsdWRlcyBhbGwgY29tbWl0cywgdHJlZXMsIGFuZAorYmxvYnMgZm9yIHRoZSBjb21wbGV0ZSBsaWZlIG9mIHRoZSByZXBvc2l0b3J5LiAgRm9yIGV4dHJlbWVseSBsYXJnZQorcmVwb3NpdG9yaWVzLCBjbG9uZXMgY2FuIHRha2UgaG91cnMgKG9yIGRheXMpIGFuZCBjb25zdW1lIDEwMCtHaUIgb2YgZGlzaworc3BhY2UuCisKK09mdGVuIGluIHRoZXNlIHJlcG9zaXRvcmllcyB0aGVyZSBhcmUgbWFueSBibG9icyBhbmQgdHJlZXMgdGhhdCB0aGUgdXNlcgorZG9lcyBub3QgbmVlZCBzdWNoIGFzOgorCisgIDEuIGZpbGVzIG91dHNpZGUgb2YgdGhlIHVzZXIncyB3b3JrIGFyZWEgaW4gdGhlIHRyZWUuICBGb3IgZXhhbXBsZSwgaW4KKyAgICAgYSByZXBvc2l0b3J5IHdpdGggNTAwSyBkaXJlY3RvcmllcyBhbmQgMy41TSBmaWxlcyBpbiBldmVyeSBjb21taXQsCisgICAgIHdlIGNhbiBhdm9pZCBkb3dubG9hZGluZyBtYW55IG9iamVjdHMgaWYgdGhlIHVzZXIgb25seSBuZWVkcyBhCisgICAgIG5hcnJvdyAiY29uZSIgb2YgdGhlIHNvdXJjZSB0cmVlLgorCisgIDIuIGxhcmdlIGJpbmFyeSBhc3NldHMuICBGb3IgZXhhbXBsZSwgaW4gYSByZXBvc2l0b3J5IHdoZXJlIGxhcmdlIGJ1aWxkCisgICAgIGFydGlmYWN0cyBhcmUgY2hlY2tlZCBpbnRvIHRoZSB0cmVlLCB3ZSBjYW4gYXZvaWQgZG93bmxvYWRpbmcgYWxsCisgICAgIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZXNlIG5vbi1tZXJnZWFibGUgYmluYXJ5IGFzc2V0cyBhbmQgb25seQorICAgICBkb3dubG9hZCB2ZXJzaW9ucyB0aGF0IGFyZSBhY3R1YWxseSByZWZlcmVuY2VkLgorCitQYXJ0aWFsIGNsb25lIGFsbG93cyB1cyB0byBhdm9pZCBkb3dubG9hZGluZyBzdWNoIHVubmVlZGVkIG9iamVjdHMgKmluCithZHZhbmNlKiBkdXJpbmcgY2xvbmUgYW5kIGZldGNoIG9wZXJhdGlvbnMgYW5kIHRoZXJlYnkgcmVkdWNlIGRvd25sb2FkCit0aW1lcyBhbmQgZGlzayB1c2FnZS4gIE1pc3Npbmcgb2JqZWN0cyBjYW4gbGF0ZXIgYmUgImRlbWFuZCBmZXRjaGVkIgoraWYvd2hlbiBuZWVkZWQuCisKK0EgcmVtb3RlIHRoYXQgY2FuIGxhdGVyIHByb3ZpZGUgdGhlIG1pc3Npbmcgb2JqZWN0cyBpcyBjYWxsZWQgYQorcHJvbWlzb3IgcmVtb3RlLCBhcyBpdCBwcm9taXNlcyB0byBzZW5kIHRoZSBvYmplY3RzIHdoZW4KK3JlcXVlc3RlZC4gSW5pdGlhbGx5IEdpdCBzdXBwb3J0ZWQgb25seSBvbmUgcHJvbWlzb3IgcmVtb3RlLCB0aGUgb3JpZ2luCityZW1vdGUgZnJvbSB3aGljaCB0aGUgdXNlciBjbG9uZWQgYW5kIHRoYXQgd2FzIGNvbmZpZ3VyZWQgaW4gdGhlCisiZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmUiIGNvbmZpZyBvcHRpb24uIExhdGVyIHN1cHBvcnQgZm9yIG1vcmUgdGhhbgorb25lIHByb21pc29yIHJlbW90ZSBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKworVXNlIG9mIHBhcnRpYWwgY2xvbmUgcmVxdWlyZXMgdGhhdCB0aGUgdXNlciBiZSBvbmxpbmUgYW5kIHRoZSBvcmlnaW4KK3JlbW90ZSBvciBvdGhlciBwcm9taXNvciByZW1vdGVzIGJlIGF2YWlsYWJsZSBmb3Igb24tZGVtYW5kIGZldGNoaW5nCitvZiBtaXNzaW5nIG9iamVjdHMuICBUaGlzIG1heSBvciBtYXkgbm90IGJlIHByb2JsZW1hdGljIGZvciB0aGUgdXNlci4KK0ZvciBleGFtcGxlLCBpZiB0aGUgdXNlciBjYW4gc3RheSB3aXRoaW4gdGhlIHByZS1zZWxlY3RlZCBzdWJzZXQgb2YKK3RoZSBzb3VyY2UgdHJlZSwgdGhleSBtYXkgbm90IGVuY291bnRlciBhbnkgbWlzc2luZyBvYmplY3RzLgorQWx0ZXJuYXRpdmVseSwgdGhlIHVzZXIgY291bGQgdHJ5IHRvIHByZS1mZXRjaCB2YXJpb3VzIG9iamVjdHMgaWYgdGhleQora25vdyB0aGF0IHRoZXkgYXJlIGdvaW5nIG9mZmxpbmUuCisKKworTm9uLUdvYWxzCistLS0tLS0tLS0KKworUGFydGlhbCBjbG9uZSBpcyBhIG1lY2hhbmlzbSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGJsb2JzIGFuZCB0cmVlcyBkb3dubG9hZGVkCisqd2l0aGluKiBhIGdpdmVuIHJhbmdlIG9mIGNvbW1pdHMgLS0gYW5kIGlzIHRoZXJlZm9yZSBpbmRlcGVuZGVudCBvZiBhbmQgbm90CitpbnRlbmRlZCB0byBjb25mbGljdCB3aXRoIGV4aXN0aW5nIERBRy1sZXZlbCBtZWNoYW5pc21zIHRvIGxpbWl0IHRoZSBzZXQgb2YKK3JlcXVlc3RlZCBjb21taXRzIChpLmUuIHNoYWxsb3cgY2xvbmUsIHNpbmdsZSBicmFuY2gsIG9yIGZldGNoICc8cmVmc3BlYz4nKS4KKworCitEZXNpZ24gT3ZlcnZpZXcKKy0tLS0tLS0tLS0tLS0tLQorCitQYXJ0aWFsIGNsb25lIGxvZ2ljYWxseSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHBhcnRzOgorCistIEEgbWVjaGFuaXNtIGZvciB0aGUgY2xpZW50IHRvIGRlc2NyaWJlIHVubmVlZGVkIG9yIHVud2FudGVkIG9iamVjdHMgdG8KKyAgdGhlIHNlcnZlci4KKworLSBBIG1lY2hhbmlzbSBmb3IgdGhlIHNlcnZlciB0byBvbWl0IHN1Y2ggdW53YW50ZWQgb2JqZWN0cyBmcm9tIHBhY2tmaWxlcworICBzZW50IHRvIHRoZSBjbGllbnQuCisKKy0gQSBtZWNoYW5pc20gZm9yIHRoZSBjbGllbnQgdG8gZ3JhY2VmdWxseSBoYW5kbGUgbWlzc2luZyBvYmplY3RzICh0aGF0CisgIHdlcmUgcHJldmlvdXNseSBvbWl0dGVkIGJ5IHRoZSBzZXJ2ZXIpLgorCistIEEgbWVjaGFuaXNtIGZvciB0aGUgY2xpZW50IHRvIGJhY2tmaWxsIG1pc3Npbmcgb2JqZWN0cyBhcyBuZWVkZWQuCisKKworRGVzaWduIERldGFpbHMKKy0tLS0tLS0tLS0tLS0tCisKKy0gQSBuZXcgcGFjay1wcm90b2NvbCBjYXBhYmlsaXR5ICJmaWx0ZXIiIGlzIGFkZGVkIHRvIHRoZSBmZXRjaC1wYWNrIGFuZAorICB1cGxvYWQtcGFjayBuZWdvdGlhdGlvbi4KKysKK1RoaXMgdXNlcyB0aGUgZXhpc3RpbmcgY2FwYWJpbGl0eSBkaXNjb3ZlcnkgbWVjaGFuaXNtLgorU2VlICJmaWx0ZXIiIGluIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0LgorCistIENsaWVudHMgcGFzcyBhICJmaWx0ZXItc3BlYyIgdG8gY2xvbmUgYW5kIGZldGNoIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUKKyAgc2VydmVyIHRvIHJlcXVlc3QgZmlsdGVyaW5nIGR1cmluZyBwYWNrZmlsZSBjb25zdHJ1Y3Rpb24uCisrCitUaGVyZSBhcmUgdmFyaW91cyBmaWx0ZXJzIGF2YWlsYWJsZSB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgc2l0dWF0aW9ucy4KK1NlZSAiLS1maWx0ZXI9PGZpbHRlci1zcGVjPiIgaW4gRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dC4KKworLSBPbiB0aGUgc2VydmVyIHBhY2stb2JqZWN0cyBhcHBsaWVzIHRoZSByZXF1ZXN0ZWQgZmlsdGVyLXNwZWMgYXMgaXQKKyAgY3JlYXRlcyAiZmlsdGVyZWQiIHBhY2tmaWxlcyBmb3IgdGhlIGNsaWVudC4KKysKK1RoZXNlIGZpbHRlcmVkIHBhY2tmaWxlcyBhcmUgKmluY29tcGxldGUqIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSBiZWNhdXNlCit0aGV5IG1heSBjb250YWluIG9iamVjdHMgdGhhdCByZWZlcmVuY2Ugb2JqZWN0cyBub3QgY29udGFpbmVkIGluIHRoZQorcGFja2ZpbGUgYW5kIHRoYXQgdGhlIGNsaWVudCBkb2Vzbid0IGFscmVhZHkgaGF2ZS4gIEZvciBleGFtcGxlLCB0aGUKK2ZpbHRlcmVkIHBhY2tmaWxlIG1heSBjb250YWluIHRyZWVzIG9yIHRhZ3MgdGhhdCByZWZlcmVuY2UgbWlzc2luZyBibG9icworb3IgY29tbWl0cyB0aGF0IHJlZmVyZW5jZSBtaXNzaW5nIHRyZWVzLgorCistIE9uIHRoZSBjbGllbnQgdGhlc2UgaW5jb21wbGV0ZSBwYWNrZmlsZXMgYXJlIG1hcmtlZCBhcyAicHJvbWlzb3IgcGFja2ZpbGVzIgorICBhbmQgdHJlYXRlZCBkaWZmZXJlbnRseSBieSB2YXJpb3VzIGNvbW1hbmRzLgorCistIE9uIHRoZSBjbGllbnQgYSByZXBvc2l0b3J5IGV4dGVuc2lvbiBpcyBhZGRlZCB0byB0aGUgbG9jYWwgY29uZmlnIHRvCisgIHByZXZlbnQgb2xkZXIgdmVyc2lvbnMgb2YgZ2l0IGZyb20gZmFpbGluZyBtaWQtb3BlcmF0aW9uIGJlY2F1c2Ugb2YKKyAgbWlzc2luZyBvYmplY3RzIHRoYXQgdGhleSBjYW5ub3QgaGFuZGxlLgorICBTZWUgImV4dGVuc2lvbnMucGFydGlhbENsb25lIiBpbiBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXBvc2l0b3J5LXZlcnNpb24udHh0IgorCisKK0hhbmRsaW5nIE1pc3NpbmcgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gQW4gb2JqZWN0IG1heSBiZSBtaXNzaW5nIGR1ZSB0byBhIHBhcnRpYWwgY2xvbmUgb3IgZmV0Y2gsIG9yIG1pc3NpbmcKKyAgZHVlIHRvIHJlcG9zaXRvcnkgY29ycnVwdGlvbi4gIFRvIGRpZmZlcmVudGlhdGUgdGhlc2UgY2FzZXMsIHRoZQorICBsb2NhbCByZXBvc2l0b3J5IHNwZWNpYWxseSBpbmRpY2F0ZXMgc3VjaCBmaWx0ZXJlZCBwYWNrZmlsZXMKKyAgb2J0YWluZWQgZnJvbSBwcm9taXNvciByZW1vdGVzIGFzICJwcm9taXNvciBwYWNrZmlsZXMiLgorKworVGhlc2UgcHJvbWlzb3IgcGFja2ZpbGVzIGNvbnNpc3Qgb2YgYSAiPG5hbWU+LnByb21pc29yIiBmaWxlIHdpdGgKK2FyYml0cmFyeSBjb250ZW50cyAobGlrZSB0aGUgIjxuYW1lPi5rZWVwIiBmaWxlcyksIGluIGFkZGl0aW9uIHRvCit0aGVpciAiPG5hbWU+LnBhY2siIGFuZCAiPG5hbWU+LmlkeCIgZmlsZXMuCisKKy0gVGhlIGxvY2FsIHJlcG9zaXRvcnkgY29uc2lkZXJzIGEgInByb21pc29yIG9iamVjdCIgdG8gYmUgYW4gb2JqZWN0IHRoYXQKKyAgaXQga25vd3MgKHRvIHRoZSBiZXN0IG9mIGl0cyBhYmlsaXR5KSB0aGF0IHByb21pc29yIHJlbW90ZXMgaGF2ZSBwcm9taXNlZAorICB0aGF0IHRoZXkgaGF2ZSwgZWl0aGVyIGJlY2F1c2UgdGhlIGxvY2FsIHJlcG9zaXRvcnkgaGFzIHRoYXQgb2JqZWN0IGluIG9uZSBvZgorICBpdHMgcHJvbWlzb3IgcGFja2ZpbGVzLCBvciBiZWNhdXNlIGFub3RoZXIgcHJvbWlzb3Igb2JqZWN0IHJlZmVycyB0byBpdC4KKysKK1doZW4gR2l0IGVuY291bnRlcnMgYSBtaXNzaW5nIG9iamVjdCwgR2l0IGNhbiBzZWUgaWYgaXQgaXMgYSBwcm9taXNvciBvYmplY3QKK2FuZCBoYW5kbGUgaXQgYXBwcm9wcmlhdGVseS4gIElmIG5vdCwgR2l0IGNhbiByZXBvcnQgYSBjb3JydXB0aW9uLgorKworVGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBjbGllbnQgdG8gZXhwbGljaXRseSBtYWludGFpbiBhbgorZXhwZW5zaXZlLXRvLW1vZGlmeSBsaXN0IG9mIG1pc3Npbmcgb2JqZWN0cy5bYV0KKworLSBTaW5jZSBhbG1vc3QgYWxsIEdpdCBjb2RlIGN1cnJlbnRseSBleHBlY3RzIGFueSByZWZlcmVuY2VkIG9iamVjdCB0byBiZQorICBwcmVzZW50IGxvY2FsbHkgYW5kIGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gZm9yY2UgZXZlcnkgY29tbWFuZCB0byBkbworICBhIGRyeS1ydW4gZmlyc3QsIGEgZmFsbGJhY2sgbWVjaGFuaXNtIGlzIGFkZGVkIHRvIGFsbG93IEdpdCB0byBhdHRlbXB0CisgIHRvIGR5bmFtaWNhbGx5IGZldGNoIG1pc3Npbmcgb2JqZWN0cyBmcm9tIHByb21pc29yIHJlbW90ZXMuCisrCitXaGVuIHRoZSBub3JtYWwgb2JqZWN0IGxvb2t1cCBmYWlscyB0byBmaW5kIGFuIG9iamVjdCwgR2l0IGludm9rZXMKK3Byb21pc29yX3JlbW90ZV9nZXRfZGlyZWN0KCkgdG8gdHJ5IHRvIGdldCB0aGUgb2JqZWN0IGZyb20gYSBwcm9taXNvcgorcmVtb3RlIGFuZCB0aGVuIHJldHJ5IHRoZSBvYmplY3QgbG9va3VwLiAgVGhpcyBhbGxvd3Mgb2JqZWN0cyB0byBiZQorImZhdWx0ZWQgaW4iIHdpdGhvdXQgY29tcGxpY2F0ZWQgcHJlZGljdGlvbiBhbGdvcml0aG1zLgorKworRm9yIGVmZmljaWVuY3kgcmVhc29ucywgbm8gY2hlY2sgYXMgdG8gd2hldGhlciB0aGUgbWlzc2luZyBvYmplY3QgaXMKK2FjdHVhbGx5IGEgcHJvbWlzb3Igb2JqZWN0IGlzIHBlcmZvcm1lZC4KKysKK0R5bmFtaWMgb2JqZWN0IGZldGNoaW5nIHRlbmRzIHRvIGJlIHNsb3cgYXMgb2JqZWN0cyBhcmUgZmV0Y2hlZCBvbmUgYXQKK2EgdGltZS4KKworLSBgY2hlY2tvdXRgIChhbmQgYW55IG90aGVyIGNvbW1hbmQgdXNpbmcgYHVucGFjay10cmVlc2ApIGhhcyBiZWVuIHRhdWdodAorICB0byBidWxrIHByZS1mZXRjaCBhbGwgcmVxdWlyZWQgbWlzc2luZyBibG9icyBpbiBhIHNpbmdsZSBiYXRjaC4KKworLSBgcmV2LWxpc3RgIGhhcyBiZWVuIHRhdWdodCB0byBwcmludCBtaXNzaW5nIG9iamVjdHMuCisrCitUaGlzIGNhbiBiZSB1c2VkIGJ5IG90aGVyIGNvbW1hbmRzIHRvIGJ1bGsgcHJlZmV0Y2ggb2JqZWN0cy4KK0ZvciBleGFtcGxlLCBhICJnaXQgbG9nIC1wIEEuLkIiIG1heSBpbnRlcm5hbGx5IHdhbnQgdG8gZmlyc3QgZG8KK3NvbWV0aGluZyBsaWtlICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tcXVpZXQgLS1taXNzaW5nPXByaW50IEEuLkIiCithbmQgcHJlZmV0Y2ggdGhvc2Ugb2JqZWN0cyBpbiBidWxrLgorCistIGBmc2NrYCBoYXMgYmVlbiB1cGRhdGVkIHRvIGJlIGZ1bGx5IGF3YXJlIG9mIHByb21pc29yIG9iamVjdHMuCisKKy0gYHJlcGFja2AgaW4gR0MgaGFzIGJlZW4gdXBkYXRlZCB0byBub3QgdG91Y2ggcHJvbWlzb3IgcGFja2ZpbGVzIGF0IGFsbCwKKyAgYW5kIHRvIG9ubHkgcmVwYWNrIG90aGVyIG9iamVjdHMuCisKKy0gVGhlIGdsb2JhbCB2YXJpYWJsZSAiZmV0Y2hfaWZfbWlzc2luZyIgaXMgdXNlZCB0byBjb250cm9sIHdoZXRoZXIgYW4KKyAgb2JqZWN0IGxvb2t1cCB3aWxsIGF0dGVtcHQgdG8gZHluYW1pY2FsbHkgZmV0Y2ggYSBtaXNzaW5nIG9iamVjdCBvcgorICByZXBvcnQgYW4gZXJyb3IuCisrCitXZSBhcmUgbm90IGhhcHB5IHdpdGggdGhpcyBnbG9iYWwgdmFyaWFibGUgYW5kIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIGl0LAorYnV0IHRoYXQgcmVxdWlyZXMgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgdGhlIG9iamVjdCBjb2RlIHRvIHBhc3MgYW4KK2FkZGl0aW9uYWwgZmxhZy4KKworCitGZXRjaGluZyBNaXNzaW5nIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIEZldGNoaW5nIG9mIG9iamVjdHMgaXMgZG9uZSB1c2luZyB0aGUgZXhpc3RpbmcgdHJhbnNwb3J0IG1lY2hhbmlzbSB1c2luZworICB0cmFuc3BvcnRfZmV0Y2hfcmVmcygpLCBzZXR0aW5nIGEgbmV3IHRyYW5zcG9ydCBvcHRpb24KKyAgVFJBTlNfT1BUX05PX0RFUEVOREVOVFMgdG8gaW5kaWNhdGUgdGhhdCBvbmx5IHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlCisgIGRlc2lyZWQsIG5vdCBhbnkgb2JqZWN0IHRoYXQgdGhleSByZWZlciB0by4KKysKK0JlY2F1c2Ugc29tZSB0cmFuc3BvcnRzIGludm9rZSBmZXRjaF9wYWNrKCkgaW4gdGhlIHNhbWUgcHJvY2VzcywgZmV0Y2hfcGFjaygpCitoYXMgYmVlbiB1cGRhdGVkIHRvIG5vdCB1c2UgYW55IG9iamVjdCBmbGFncyB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50Cisobm9fZGVwZW5kZW50cykgaXMgc2V0LgorCistIFRoZSBsb2NhbCByZXBvc2l0b3J5IHNlbmRzIGEgcmVxdWVzdCB3aXRoIHRoZSBoYXNoZXMgb2YgYWxsIHJlcXVlc3RlZAorICBvYmplY3RzIGFzICJ3YW50IiBsaW5lcywgYW5kIGRvZXMgbm90IHBlcmZvcm0gYW55IHBhY2tmaWxlIG5lZ290aWF0aW9uLgorICBJdCB0aGVuIHJlY2VpdmVzIGEgcGFja2ZpbGUuCisKKy0gQmVjYXVzZSB3ZSBhcmUgcmV1c2luZyB0aGUgZXhpc3RpbmcgZmV0Y2gtcGFjayBtZWNoYW5pc20sIGZldGNoaW5nCisgIGN1cnJlbnRseSBmZXRjaGVzIGFsbCBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSByZXF1ZXN0ZWQgb2JqZWN0cywgZXZlbgorICB0aG91Z2ggdGhleSBhcmUgbm90IG5lY2Vzc2FyeS4KKworCitVc2luZyBtYW55IHByb21pc29yIHJlbW90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYW55IHByb21pc29yIHJlbW90ZXMgY2FuIGJlIGNvbmZpZ3VyZWQgYW5kIHVzZWQuCisKK1RoaXMgYWxsb3dzIGZvciBleGFtcGxlIGEgdXNlciB0byBoYXZlIG11bHRpcGxlIGdlb2dyYXBoaWNhbGx5LWNsb3NlCitjYWNoZSBzZXJ2ZXJzIGZvciBmZXRjaGluZyBtaXNzaW5nIGJsb2JzIHdoaWxlIGNvbnRpbnVpbmcgdG8gZG8KK2ZpbHRlcmVkIGBnaXQtZmV0Y2hgIGNvbW1hbmRzIGZyb20gdGhlIGNlbnRyYWwgc2VydmVyLgorCitXaGVuIGZldGNoaW5nIG9iamVjdHMsIHByb21pc29yIHJlbW90ZXMgYXJlIHRyaWVkIG9uZSBhZnRlciB0aGUgb3RoZXIKK3VudGlsIGFsbCB0aGUgb2JqZWN0cyBoYXZlIGJlZW4gZmV0Y2hlZC4KKworUmVtb3RlcyB0aGF0IGFyZSBjb25zaWRlcmVkICJwcm9taXNvciIgcmVtb3RlcyBhcmUgdGhvc2Ugc3BlY2lmaWVkIGJ5Cit0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOgorCistIGBleHRlbnNpb25zLnBhcnRpYWxDbG9uZSA9IDxuYW1lPmAKKworLSBgcmVtb3RlLjxuYW1lPi5wcm9taXNvciA9IHRydWVgCisKKy0gYHJlbW90ZS48bmFtZT4ucGFydGlhbENsb25lRmlsdGVyID0gLi4uYAorCitPbmx5IG9uZSBwcm9taXNvciByZW1vdGUgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlCitgZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmVgIGNvbmZpZyB2YXJpYWJsZS4gVGhpcyBwcm9taXNvciByZW1vdGUgd2lsbAorYmUgdGhlIGxhc3Qgb25lIHRyaWVkIHdoZW4gZmV0Y2hpbmcgb2JqZWN0cy4KKworV2UgZGVjaWRlZCB0byBtYWtlIGl0IHRoZSBsYXN0IG9uZSB3ZSB0cnksIGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRoYXQKK3NvbWVvbmUgdXNpbmcgbWFueSBwcm9taXNvciByZW1vdGVzIGlzIGRvaW5nIHNvIGJlY2F1c2UgdGhlIG90aGVyCitwcm9taXNvciByZW1vdGVzIGFyZSBiZXR0ZXIgZm9yIHNvbWUgcmVhc29uIChtYXliZSB0aGV5IGFyZSBjbG9zZXIgb3IKK2Zhc3RlciBmb3Igc29tZSBraW5kIG9mIG9iamVjdHMpIHRoYW4gdGhlIG9yaWdpbiwgYW5kIHRoZSBvcmlnaW4gaXMKK2xpa2VseSB0byBiZSB0aGUgcmVtb3RlIHNwZWNpZmllZCBieSBleHRlbnNpb25zLnBhcnRpYWxDbG9uZS4KKworVGhpcyBqdXN0aWZpY2F0aW9uIGlzIG5vdCB2ZXJ5IHN0cm9uZywgYnV0IG9uZSBjaG9pY2UgaGFkIHRvIGJlIG1hZGUsCithbmQgYW55d2F5IHRoZSBsb25nIHRlcm0gcGxhbiBzaG91bGQgYmUgdG8gbWFrZSB0aGUgb3JkZXIgc29tZWhvdworZnVsbHkgY29uZmlndXJhYmxlLgorCitGb3Igbm93IHRob3VnaCB0aGUgb3RoZXIgcHJvbWlzb3IgcmVtb3RlcyB3aWxsIGJlIHRyaWVkIGluIHRoZSBvcmRlcgordGhleSBhcHBlYXIgaW4gdGhlIGNvbmZpZyBmaWxlLgorCitDdXJyZW50IExpbWl0YXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBwcm9taXNvcgorICByZW1vdGVzIGFyZSB0cmllZCBpbiBvdGhlciB3YXlzIHRoYW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyCisgIGluIHRoZSBjb25maWcgZmlsZS4KKysKK0l0IGlzIGFsc28gbm90IHBvc3NpYmxlIHRvIHNwZWNpZnkgYW4gb3JkZXIgdG8gYmUgdXNlZCB3aGVuIGZldGNoaW5nCitmcm9tIG9uZSByZW1vdGUgYW5kIGEgZGlmZmVyZW50IG9yZGVyIHdoZW4gZmV0Y2hpbmcgZnJvbSBhbm90aGVyCityZW1vdGUuCisKKy0gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1c2ggb25seSBzcGVjaWZpYyBvYmplY3RzIHRvIGEgcHJvbWlzb3IKKyAgcmVtb3RlLgorKworSXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1c2ggYXQgdGhlIHNhbWUgdGltZSB0byBtdWx0aXBsZSBwcm9taXNvcgorcmVtb3RlIGluIGEgc3BlY2lmaWMgb3JkZXIuCisKKy0gRHluYW1pYyBvYmplY3QgZmV0Y2hpbmcgd2lsbCBvbmx5IGFzayBwcm9taXNvciByZW1vdGVzIGZvciBtaXNzaW5nCisgIG9iamVjdHMuICBXZSBhc3N1bWUgdGhhdCBwcm9taXNvciByZW1vdGVzIGhhdmUgYSBjb21wbGV0ZSB2aWV3IG9mIHRoZQorICByZXBvc2l0b3J5IGFuZCBjYW4gc2F0aXNmeSBhbGwgc3VjaCByZXF1ZXN0cy4KKworLSBSZXBhY2sgZXNzZW50aWFsbHkgdHJlYXRzIHByb21pc29yIGFuZCBub24tcHJvbWlzb3IgcGFja2ZpbGVzIGFzIDIKKyAgZGlzdGluY3QgcGFydGl0aW9ucyBhbmQgZG9lcyBub3QgbWl4IHRoZW0uICBSZXBhY2sgY3VycmVudGx5IG9ubHkgd29ya3MKKyAgb24gbm9uLXByb21pc29yIHBhY2tmaWxlcyBhbmQgbG9vc2Ugb2JqZWN0cy4KKworLSBEeW5hbWljIG9iamVjdCBmZXRjaGluZyBpbnZva2VzIGZldGNoLXBhY2sgb25jZSAqZm9yIGVhY2ggaXRlbSoKKyAgYmVjYXVzZSBtb3N0IGFsZ29yaXRobXMgc3R1bWJsZSB1cG9uIGEgbWlzc2luZyBvYmplY3QgYW5kIG5lZWQgdG8gaGF2ZQorICBpdCByZXNvbHZlZCBiZWZvcmUgY29udGludWluZyB0aGVpciB3b3JrLiAgVGhpcyBtYXkgaW5jdXIgc2lnbmlmaWNhbnQKKyAgb3ZlcmhlYWQgLS0gYW5kIG11bHRpcGxlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3RzIC0tIGlmIG1hbnkgb2JqZWN0cyBhcmUKKyAgbmVlZGVkLgorCistIER5bmFtaWMgb2JqZWN0IGZldGNoaW5nIGN1cnJlbnRseSB1c2VzIHRoZSBleGlzdGluZyBwYWNrIHByb3RvY29sIFYwCisgIHdoaWNoIG1lYW5zIHRoYXQgZWFjaCBvYmplY3QgaXMgcmVxdWVzdGVkIHZpYSBmZXRjaC1wYWNrLiAgVGhlIHNlcnZlcgorICB3aWxsIHNlbmQgYSBmdWxsIHNldCBvZiBpbmZvL3JlZnMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4KKyAgSWYgdGhlcmUgYXJlIGxhcmdlIG51bWJlciBvZiByZWZzLCB0aGlzIG1heSBpbmN1ciBzaWduaWZpY2FudCBvdmVyaGVhZC4KKworCitGdXR1cmUgV29yaworLS0tLS0tLS0tLS0KKworLSBJbXByb3ZlIHRoZSB3YXkgdG8gc3BlY2lmeSB0aGUgb3JkZXIgaW4gd2hpY2ggcHJvbWlzb3IgcmVtb3RlcyBhcmUKKyAgdHJpZWQuCisrCitGb3IgZXhhbXBsZSB0aGlzIGNvdWxkIGFsbG93IHRvIHNwZWNpZnkgZXhwbGljaXRseSBzb21ldGhpbmcgbGlrZToKKyJXaGVuIGZldGNoaW5nIGZyb20gdGhpcyByZW1vdGUsIEkgd2FudCB0byB1c2UgdGhlc2UgcHJvbWlzb3IgcmVtb3RlcworaW4gdGhpcyBvcmRlciwgdGhvdWdoLCB3aGVuIHB1c2hpbmcgb3IgZmV0Y2hpbmcgdG8gdGhhdCByZW1vdGUsIEkgd2FudAordG8gdXNlIHRob3NlIHByb21pc29yIHJlbW90ZXMgaW4gdGhhdCBvcmRlci4iCisKKy0gQWxsb3cgcHVzaGluZyB0byBwcm9taXNvciByZW1vdGVzLgorKworVGhlIHVzZXIgbWlnaHQgd2FudCB0byB3b3JrIGluIGEgdHJpYW5ndWxhciB3b3JrIGZsb3cgd2l0aCBtdWx0aXBsZQorcHJvbWlzb3IgcmVtb3RlcyB0aGF0IGVhY2ggaGF2ZSBhbiBpbmNvbXBsZXRlIHZpZXcgb2YgdGhlIHJlcG9zaXRvcnkuCisKKy0gQWxsb3cgcmVwYWNrIHRvIHdvcmsgb24gcHJvbWlzb3IgcGFja2ZpbGVzICh3aGlsZSBrZWVwaW5nIHRoZW0gZGlzdGluY3QKKyAgZnJvbSBub24tcHJvbWlzb3IgcGFja2ZpbGVzKS4KKworLSBBbGxvdyBub24tcGF0aG5hbWUtYmFzZWQgZmlsdGVycyB0byBtYWtlIHVzZSBvZiBwYWNrZmlsZSBiaXRtYXBzICh3aGVuCisgIHByZXNlbnQpLiAgVGhpcyB3YXMganVzdCBhbiBvbWlzc2lvbiBkdXJpbmcgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCisKKy0gSW52ZXN0aWdhdGUgdXNlIG9mIGEgbG9uZy1ydW5uaW5nIHByb2Nlc3MgdG8gZHluYW1pY2FsbHkgZmV0Y2ggYSBzZXJpZXMKKyAgb2Ygb2JqZWN0cywgc3VjaCBhcyBwcm9wb3NlZCBpbiBbNSw2XSB0byByZWR1Y2UgcHJvY2VzcyBzdGFydHVwIGFuZAorICBvdmVyaGVhZCBjb3N0cy4KKysKK0l0IHdvdWxkIGJlIG5pY2UgaWYgcGFjayBwcm90b2NvbCBWMiBjb3VsZCBhbGxvdyB0aGF0IGxvbmctcnVubmluZworcHJvY2VzcyB0byBtYWtlIGEgc2VyaWVzIG9mIHJlcXVlc3RzIG92ZXIgYSBzaW5nbGUgbG9uZy1ydW5uaW5nCitjb25uZWN0aW9uLgorCistIEludmVzdGlnYXRlIHBhY2sgcHJvdG9jb2wgVjIgdG8gYXZvaWQgdGhlIGluZm8vcmVmcyBicm9hZGNhc3Qgb24KKyAgZWFjaCBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciB0byBkeW5hbWljYWxseSBmZXRjaCBtaXNzaW5nIG9iamVjdHMuCisKKy0gSW52ZXN0aWdhdGUgdGhlIG5lZWQgdG8gaGFuZGxlIGxvb3NlIHByb21pc29yIG9iamVjdHMuCisrCitPYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyBhcmUgYWxsb3dlZCB0byByZWZlcmVuY2UgbWlzc2luZyBvYmplY3RzCit0aGF0IGNhbiBiZSBkeW5hbWljYWxseSBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci4gIEFuIGFzc3VtcHRpb24gd2FzCittYWRlIHRoYXQgbG9vc2Ugb2JqZWN0cyBhcmUgb25seSBjcmVhdGVkIGxvY2FsbHkgYW5kIHRoZXJlZm9yZSBzaG91bGQKK25vdCByZWZlcmVuY2UgYSBtaXNzaW5nIG9iamVjdC4gIFdlIG1heSBuZWVkIHRvIHJldmlzaXQgdGhhdCBhc3N1bXB0aW9uCitpZiwgZm9yIGV4YW1wbGUsIHdlIGR5bmFtaWNhbGx5IGZldGNoIGEgbWlzc2luZyB0cmVlIGFuZCBzdG9yZSBpdCBhcyBhCitsb29zZSBvYmplY3QgcmF0aGVyIHRoYW4gYSBzaW5nbGUgb2JqZWN0IHBhY2tmaWxlLgorKworVGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHdlIG5lZWQgdG8gbWFyayBsb29zZSBvYmplY3RzIGFzIHByb21pc29yOworaXQgbWF5IGJlIHN1ZmZpY2llbnQgdG8gcmVsYXggdGhlIG9iamVjdCBsb29rdXAgb3IgaXMtcHJvbWlzb3IgZnVuY3Rpb25zLgorCisKK05vbi1UYXNrcworLS0tLS0tLS0tCisKKy0gRXZlcnkgdGltZSB0aGUgc3ViamVjdCBvZiAiZGVtYW5kIGxvYWRpbmcgYmxvYnMiIGNvbWVzIHVwIGl0IHNlZW1zCisgIHRoYXQgc29tZW9uZSBzdWdnZXN0cyB0aGF0IHRoZSBzZXJ2ZXIgYmUgYWxsb3dlZCB0byAiZ3Vlc3MiIGFuZCBzZW5kCisgIGFkZGl0aW9uYWwgb2JqZWN0cyB0aGF0IG1heSBiZSByZWxhdGVkIHRvIHRoZSByZXF1ZXN0ZWQgb2JqZWN0cy4KKysKK05vIHdvcmsgaGFzIGdvbmUgaW50byBhY3R1YWxseSBkb2luZyB0aGF0OyB3ZSdyZSBqdXN0IGRvY3VtZW50aW5nIHRoYXQKK2l0IGlzIGEgY29tbW9uIHN1Z2dlc3Rpb24uICBXZSdyZSBub3Qgc3VyZSBob3cgaXQgd291bGQgd29yayBhbmQgaGF2ZQorbm8gcGxhbnMgdG8gd29yayBvbiBpdC4KKysKK0l0IGlzIHZhbGlkIGZvciB0aGUgc2VydmVyIHRvIHNlbmQgbW9yZSBvYmplY3RzIHRoYW4gcmVxdWVzdGVkIChldmVuCitmb3IgYSBkeW5hbWljIG9iamVjdCBmZXRjaCksIGJ1dCB3ZSBhcmUgbm90IGJ1aWxkaW5nIG9uIHRoYXQuCisKKworRm9vdG5vdGVzCistLS0tLS0tLS0KKworW2FdIGV4cGVuc2l2ZS10by1tb2RpZnkgbGlzdCBvZiBtaXNzaW5nIG9iamVjdHM6ICBFYXJsaWVyIGluIHRoZSBkZXNpZ24gb2YKKyAgICBwYXJ0aWFsIGNsb25lIHdlIGRpc2N1c3NlZCB0aGUgbmVlZCBmb3IgYSBzaW5nbGUgbGlzdCBvZiBtaXNzaW5nIG9iamVjdHMuCisgICAgVGhpcyB3b3VsZCBlc3NlbnRpYWxseSBiZSBhIHNvcnRlZCBsaW5lYXIgbGlzdCBvZiBPSURzIHRoYXQgdGhlIHdlcmUKKyAgICBvbWl0dGVkIGJ5IHRoZSBzZXJ2ZXIgZHVyaW5nIGEgY2xvbmUgb3Igc3Vic2VxdWVudCBmZXRjaGVzLgorCitUaGlzIGZpbGUgd291bGQgbmVlZCB0byBiZSBsb2FkZWQgaW50byBtZW1vcnkgb24gZXZlcnkgb2JqZWN0IGxvb2t1cC4KK0l0IHdvdWxkIG5lZWQgdG8gYmUgcmVhZCwgdXBkYXRlZCwgYW5kIHJlLXdyaXR0ZW4gKGxpa2UgdGhlIC5naXQvaW5kZXgpCitvbiBldmVyeSBleHBsaWNpdCAiZ2l0IGZldGNoIiBjb21tYW5kICphbmQqIG9uIGFueSBkeW5hbWljIG9iamVjdCBmZXRjaC4KKworVGhlIGNvc3QgdG8gcmVhZCwgdXBkYXRlLCBhbmQgd3JpdGUgdGhpcyBmaWxlIGNvdWxkIGFkZCBzaWduaWZpY2FudAorb3ZlcmhlYWQgdG8gZXZlcnkgY29tbWFuZCBpZiB0aGVyZSBhcmUgbWFueSBtaXNzaW5nIG9iamVjdHMuICBGb3IgZXhhbXBsZSwKK2lmIHRoZXJlIGFyZSAxMDBNIG1pc3NpbmcgYmxvYnMsIHRoaXMgZmlsZSB3b3VsZCBiZSBhdCBsZWFzdCAyR2lCIG9uIGRpc2suCisKK1dpdGggdGhlICJwcm9taXNvciIgY29uY2VwdCwgd2UgKmluZmVyKiBhIG1pc3Npbmcgb2JqZWN0IGJhc2VkIHVwb24gdGhlCit0eXBlIG9mIHBhY2tmaWxlIHRoYXQgcmVmZXJlbmNlcyBpdC4KKworCitSZWxhdGVkIExpbmtzCistLS0tLS0tLS0tLS0tCitbMF0gaHR0cHM6Ly9jcmJ1Zy5jb20vZ2l0LzIKKyAgICBCdWcjMjogUGFydGlhbCBDbG9uZQorCitbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMTEzMTU1MjUzLjE2NDQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCisgICAgU3ViamVjdDogW1JGQ10gQWRkIHN1cHBvcnQgZm9yIGRvd25sb2FkaW5nIGJsb2JzIG9uIGRlbWFuZCArCisgICAgRGF0ZTogRnJpLCAxMyBKYW4gMjAxNyAxMDo1Mjo1MyAtMDUwMAorCitbMl0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L2NvdmVyLjE1MDY3MTQ5OTkuZ2l0LmpvbmF0aGFudGFubXlAZ29vZ2xlLmNvbS8gKworICAgIFN1YmplY3Q6IFtQQVRDSCAwMC8xOF0gUGFydGlhbCBjbG9uZSAoZnJvbSBjbG9uZSB0byBsYXp5IGZldGNoIGluIDE4IHBhdGNoZXMpICsKKyAgICBEYXRlOiBGcmksIDI5IFNlcCAyMDE3IDEzOjExOjM2IC0wNzAwCisKK1szXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzA0MjYyMjEzNDYuMjUzMzctMS1qb25hdGhhbnRhbm15QGdvb2dsZS5jb20vICsKKyAgICBTdWJqZWN0OiBQcm9wb3NhbCBmb3IgbWlzc2luZyBibG9iIHN1cHBvcnQgaW4gR2l0IHJlcG9zICsKKyAgICBEYXRlOiBXZWQsIDI2IEFwciAyMDE3IDE1OjEzOjQ2IC0wNzAwCisKK1s0XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMTQ4ODk5OTAzOS0zNzYzMS0xLWdpdC1zZW5kLWVtYWlsLWdpdEBqZWZmaG9zdGV0bGVyLmNvbS8gKworICAgIFN1YmplY3Q6IFtQQVRDSCAwMC8xMF0gUkZDIFBhcnRpYWwgQ2xvbmUgYW5kIEZldGNoICsKKyAgICBEYXRlOiBXZWQsICA4IE1hciAyMDE3IDE4OjUwOjI5ICswMDAwCisKK1s1XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzA1MDUxNTI4MDIuNjcyNC0xLWJlbnBlYXJ0QG1pY3Jvc29mdC5jb20vICsKKyAgICBTdWJqZWN0OiBbUEFUQ0ggdjcgMDAvMTBdIHJlZmFjdG9yIHRoZSBmaWx0ZXIgcHJvY2VzcyBjb2RlIGludG8gYSByZXVzYWJsZSBtb2R1bGUgKworICAgIERhdGU6IEZyaSwgIDUgTWF5IDIwMTcgMTE6Mjc6NTIgLTA0MDAKKworWzZdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE3MDcxNDEzMjY1MS4xNzA3MDgtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCisgICAgU3ViamVjdDogW1JGQy9QQVRDSCB2MiAwLzFdIEFkZCBzdXBwb3J0IGZvciBkb3dubG9hZGluZyBibG9icyBvbiBkZW1hbmQgKworICAgIERhdGU6IEZyaSwgMTQgSnVsIDIwMTcgMDk6MjY6NTAgLTA0MDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNhcGFiaWxpdGllcy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jYXBhYmlsaXRpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjY3YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jYXBhYmlsaXRpZXMudHh0CkBAIC0wLDAgKzEsMzM3IEBACitHaXQgUHJvdG9jb2wgQ2FwYWJpbGl0aWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK05PVEU6IHRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGNhcGFiaWxpdGllcyBmb3IgdmVyc2lvbnMgMCBhbmQgMSBvZiB0aGUgcGFjaworcHJvdG9jb2wuIEZvciB2ZXJzaW9uIDIsIHBsZWFzZSByZWZlciB0byB0aGUgbGluazpwcm90b2NvbC12Mi5odG1sW3Byb3RvY29sLXYyXQorZG9jLgorCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGFsbCBjYXBhYmlsaXRpZXMgZGVmaW5lZCBpbiB0aGlzIGRvY3VtZW50LgorCitPbiB0aGUgdmVyeSBmaXJzdCBsaW5lIG9mIHRoZSBpbml0aWFsIHNlcnZlciByZXNwb25zZSBvZiBlaXRoZXIKK3JlY2VpdmUtcGFjayBhbmQgdXBsb2FkLXBhY2sgdGhlIGZpcnN0IHJlZmVyZW5jZSBpcyBmb2xsb3dlZCBieQorYSBOVUwgYnl0ZSBhbmQgdGhlbiBhIGxpc3Qgb2Ygc3BhY2UgZGVsaW1pdGVkIHNlcnZlciBjYXBhYmlsaXRpZXMuCitUaGVzZSBhbGxvdyB0aGUgc2VydmVyIHRvIGRlY2xhcmUgd2hhdCBpdCBjYW4gYW5kIGNhbm5vdCBzdXBwb3J0Cit0byB0aGUgY2xpZW50LgorCitDbGllbnQgd2lsbCB0aGVuIHNlbmQgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjYXBhYmlsaXRpZXMgaXQgd2FudHMKK3RvIGJlIGluIGVmZmVjdC4gVGhlIGNsaWVudCBNVVNUIE5PVCBhc2sgZm9yIGNhcGFiaWxpdGllcyB0aGUgc2VydmVyCitkaWQgbm90IHNheSBpdCBzdXBwb3J0cy4KKworU2VydmVyIE1VU1QgZGlhZ25vc2UgYW5kIGFib3J0IGlmIGNhcGFiaWxpdGllcyBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kCit3YXMgc2VudC4gIFNlcnZlciBNVVNUIE5PVCBpZ25vcmUgY2FwYWJpbGl0aWVzIHRoYXQgY2xpZW50IHJlcXVlc3RlZAorYW5kIHNlcnZlciBhZHZlcnRpc2VkLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGVzZSBydWxlcywgc2VydmVyIE1VU1QKK05PVCBhZHZlcnRpc2UgY2FwYWJpbGl0aWVzIGl0IGRvZXMgbm90IHVuZGVyc3RhbmQuCisKK1RoZSAnYXRvbWljJywgJ3JlcG9ydC1zdGF0dXMnLCAnZGVsZXRlLXJlZnMnLCAncXVpZXQnLCBhbmQgJ3B1c2gtY2VydCcKK2NhcGFiaWxpdGllcyBhcmUgc2VudCBhbmQgcmVjb2duaXplZCBieSB0aGUgcmVjZWl2ZS1wYWNrIChwdXNoIHRvIHNlcnZlcikKK3Byb2Nlc3MuCisKK1RoZSAnb2ZzLWRlbHRhJyBhbmQgJ3NpZGUtYmFuZC02NGsnIGNhcGFiaWxpdGllcyBhcmUgc2VudCBhbmQgcmVjb2duaXplZAorYnkgYm90aCB1cGxvYWQtcGFjayBhbmQgcmVjZWl2ZS1wYWNrIHByb3RvY29scy4gIFRoZSAnYWdlbnQnIGNhcGFiaWxpdHkKK21heSBvcHRpb25hbGx5IGJlIHNlbnQgaW4gYm90aCBwcm90b2NvbHMuCisKK0FsbCBvdGhlciBjYXBhYmlsaXRpZXMgYXJlIG9ubHkgcmVjb2duaXplZCBieSB0aGUgdXBsb2FkLXBhY2sgKGZldGNoCitmcm9tIHNlcnZlcikgcHJvY2Vzcy4KKworbXVsdGlfYWNrCistLS0tLS0tLS0KKworVGhlICdtdWx0aV9hY2snIGNhcGFiaWxpdHkgYWxsb3dzIHRoZSBzZXJ2ZXIgdG8gcmV0dXJuICJBQ0sgb2JqLWlkCitjb250aW51ZSIgYXMgc29vbiBhcyBpdCBmaW5kcyBhIGNvbW1pdCB0aGF0IGl0IGNhbiB1c2UgYXMgYSBjb21tb24KK2Jhc2UsIGJldHdlZW4gdGhlIGNsaWVudCdzIHdhbnRzIGFuZCB0aGUgY2xpZW50J3MgaGF2ZSBzZXQuCisKK0J5IHNlbmRpbmcgdGhpcyBlYXJseSwgdGhlIHNlcnZlciBjYW4gcG90ZW50aWFsbHkgaGVhZCBvZmYgdGhlIGNsaWVudAorZnJvbSB3YWxraW5nIGFueSBmdXJ0aGVyIGRvd24gdGhhdCBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0aGUgY2xpZW50J3MKK3JlcG9zaXRvcnkgaGlzdG9yeS4gIFRoZSBjbGllbnQgbWF5IHN0aWxsIG5lZWQgdG8gd2FsayBkb3duIG90aGVyCiticmFuY2hlcywgc2VuZGluZyBoYXZlIGxpbmVzIGZvciB0aG9zZSwgdW50aWwgdGhlIHNlcnZlciBoYXMgYQorY29tcGxldGUgY3V0IGFjcm9zcyB0aGUgREFHLCBvciB0aGUgY2xpZW50IGhhcyBzYWlkICJkb25lIi4KKworV2l0aG91dCBtdWx0aV9hY2ssIGEgY2xpZW50IHNlbmRzIGhhdmUgbGluZXMgaW4gLS1kYXRlLW9yZGVyIHVudGlsCit0aGUgc2VydmVyIGhhcyBmb3VuZCBhIGNvbW1vbiBiYXNlLiAgVGhhdCBtZWFucyB0aGUgY2xpZW50IHdpbGwgc2VuZAoraGF2ZSBsaW5lcyB0aGF0IGFyZSBhbHJlYWR5IGtub3duIGJ5IHRoZSBzZXJ2ZXIgdG8gYmUgY29tbW9uLCBiZWNhdXNlCit0aGV5IG92ZXJsYXAgaW4gdGltZSB3aXRoIGFub3RoZXIgYnJhbmNoIHRoYXQgdGhlIHNlcnZlciBoYXNuJ3QgZm91bmQKK2EgY29tbW9uIGJhc2Ugb24geWV0LgorCitGb3IgZXhhbXBsZSBzdXBwb3NlIHRoZSBjbGllbnQgaGFzIGNvbW1pdHMgaW4gY2FwcyB0aGF0IHRoZSBzZXJ2ZXIKK2RvZXNuJ3QgYW5kIHRoZSBzZXJ2ZXIgaGFzIGNvbW1pdHMgaW4gbG93ZXIgY2FzZSB0aGF0IHRoZSBjbGllbnQKK2RvZXNuJ3QsIGFzIGluIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbToKKworICAgICAgICstLS0tIHUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB4CisgICAgICAvICAgICAgICAgICAgICArLS0tLS0geQorICAgICAvICAgICAgICAgICAgICAvCisgICAgYSAtLSBiIC0tIGMgLS0gZCAtLSBFIC0tIEYKKyAgICAgICBcCisJKy0tLSBRIC0tIFIgLS0gUworCitJZiB0aGUgY2xpZW50IHdhbnRzIHgseSBhbmQgc3RhcnRzIG91dCBieSBzYXlpbmcgaGF2ZSBGLFMsIHRoZSBzZXJ2ZXIKK2RvZXNuJ3Qga25vdyB3aGF0IEYsUyBpcy4gIEV2ZW50dWFsbHkgdGhlIGNsaWVudCBzYXlzICJoYXZlIGQiIGFuZAordGhlIHNlcnZlciBzZW5kcyAiQUNLIGQgY29udGludWUiIHRvIGxldCB0aGUgY2xpZW50IGtub3cgdG8gc3RvcAord2Fsa2luZyBkb3duIHRoYXQgbGluZSAoc28gZG9uJ3Qgc2VuZCBjLWItYSksIGJ1dCBpdCdzIG5vdCBkb25lIHlldCwKK2l0IG5lZWRzIGEgYmFzZSBmb3IgeC4gVGhlIGNsaWVudCBrZWVwcyBnb2luZyB3aXRoIFMtUi1RLCB1bnRpbCBhCitnZXRzIHJlYWNoZWQsIGF0IHdoaWNoIHBvaW50IHRoZSBzZXJ2ZXIgaGFzIGEgY2xlYXIgYmFzZSBhbmQgaXQgYWxsCitlbmRzLgorCitXaXRob3V0IG11bHRpX2FjayB0aGUgY2xpZW50IHdvdWxkIGhhdmUgc2VudCB0aGF0IGMtYi1hIGNoYWluIGFueXdheSwKK2ludGVybGVhdmVkIHdpdGggUy1SLVEuCisKK211bHRpX2Fja19kZXRhaWxlZAorLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiBtdWx0aV9hY2sgdGhhdCBwZXJtaXRzIGNsaWVudCB0byBiZXR0ZXIKK3VuZGVyc3RhbmQgdGhlIHNlcnZlcidzIGluLW1lbW9yeSBzdGF0ZS4gU2VlIHBhY2stcHJvdG9jb2wudHh0LAorc2VjdGlvbiAiUGFja2ZpbGUgTmVnb3RpYXRpb24iIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCituby1kb25lCistLS0tLS0tCitUaGlzIGNhcGFiaWxpdHkgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBzbWFydCBIVFRQIHByb3RvY29sLiBJZgorbXVsdGlfYWNrX2RldGFpbGVkIGFuZCBuby1kb25lIGFyZSBib3RoIHByZXNlbnQsIHRoZW4gdGhlIHNlbmRlciBpcworZnJlZSB0byBpbW1lZGlhdGVseSBzZW5kIGEgcGFjayBmb2xsb3dpbmcgaXRzIGZpcnN0ICJBQ0sgb2JqLWlkIHJlYWR5IgorbWVzc2FnZS4KKworV2l0aG91dCBuby1kb25lIGluIHRoZSBzbWFydCBIVFRQIHByb3RvY29sLCB0aGUgc2VydmVyIHNlc3Npb24gd291bGQKK2VuZCBhbmQgdGhlIGNsaWVudCBoYXMgdG8gbWFrZSBhbm90aGVyIHRyaXAgdG8gc2VuZCAiZG9uZSIgYmVmb3JlCit0aGUgc2VydmVyIGNhbiBzZW5kIHRoZSBwYWNrLiBuby1kb25lIHJlbW92ZXMgdGhlIGxhc3Qgcm91bmQgYW5kCit0aHVzIHNsaWdodGx5IHJlZHVjZXMgbGF0ZW5jeS4KKwordGhpbi1wYWNrCistLS0tLS0tLS0KKworQSB0aGluIHBhY2sgaXMgb25lIHdpdGggZGVsdGFzIHdoaWNoIHJlZmVyZW5jZSBiYXNlIG9iamVjdHMgbm90Citjb250YWluZWQgd2l0aGluIHRoZSBwYWNrIChidXQgYXJlIGtub3duIHRvIGV4aXN0IGF0IHRoZSByZWNlaXZpbmcKK2VuZCkuIFRoaXMgY2FuIHJlZHVjZSB0aGUgbmV0d29yayB0cmFmZmljIHNpZ25pZmljYW50bHksIGJ1dCBpdAorcmVxdWlyZXMgdGhlIHJlY2VpdmluZyBlbmQgdG8ga25vdyBob3cgdG8gInRoaWNrZW4iIHRoZXNlIHBhY2tzIGJ5CithZGRpbmcgdGhlIG1pc3NpbmcgYmFzZXMgdG8gdGhlIHBhY2suCisKK1RoZSB1cGxvYWQtcGFjayBzZXJ2ZXIgYWR2ZXJ0aXNlcyAndGhpbi1wYWNrJyB3aGVuIGl0IGNhbiBnZW5lcmF0ZQorYW5kIHNlbmQgYSB0aGluIHBhY2suIEEgY2xpZW50IHJlcXVlc3RzIHRoZSAndGhpbi1wYWNrJyBjYXBhYmlsaXR5Cit3aGVuIGl0IHVuZGVyc3RhbmRzIGhvdyB0byAidGhpY2tlbiIgaXQsIG5vdGlmeWluZyB0aGUgc2VydmVyIHRoYXQKK2l0IGNhbiByZWNlaXZlIHN1Y2ggYSBwYWNrLiBBIGNsaWVudCBNVVNUIE5PVCByZXF1ZXN0IHRoZQorJ3RoaW4tcGFjaycgY2FwYWJpbGl0eSBpZiBpdCBjYW5ub3QgdHVybiBhIHRoaW4gcGFjayBpbnRvIGEKK3NlbGYtY29udGFpbmVkIHBhY2suCisKK1JlY2VpdmUtcGFjaywgb24gdGhlIG90aGVyIGhhbmQsIGlzIGFzc3VtZWQgYnkgZGVmYXVsdCB0byBiZSBhYmxlIHRvCitoYW5kbGUgdGhpbiBwYWNrcywgYnV0IGNhbiBhc2sgdGhlIGNsaWVudCBub3QgdG8gdXNlIHRoZSBmZWF0dXJlIGJ5CithZHZlcnRpc2luZyB0aGUgJ25vLXRoaW4nIGNhcGFiaWxpdHkuIEEgY2xpZW50IE1VU1QgTk9UIHNlbmQgYSB0aGluCitwYWNrIGlmIHRoZSBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGUgJ25vLXRoaW4nIGNhcGFiaWxpdHkuCisKK1RoZSByZWFzb25zIGZvciB0aGlzIGFzeW1tZXRyeSBhcmUgaGlzdG9yaWNhbC4gVGhlIHJlY2VpdmUtcGFjaworcHJvZ3JhbSBkaWQgbm90IGV4aXN0IHVudGlsIGFmdGVyIHRoZSBpbnZlbnRpb24gb2YgdGhpbiBwYWNrcywgc28KK2hpc3RvcmljYWxseSB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHJlY2VpdmUtcGFjayBhbHdheXMKK3VuZGVyc3Rvb2QgdGhpbiBwYWNrcy4gQWRkaW5nICduby10aGluJyBsYXRlciBhbGxvd2VkIHJlY2VpdmUtcGFjawordG8gZGlzYWJsZSB0aGUgZmVhdHVyZSBpbiBhIGJhY2t3YXJkcy1jb21wYXRpYmxlIG1hbm5lci4KKworCitzaWRlLWJhbmQsIHNpZGUtYmFuZC02NGsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNhcGFiaWxpdHkgbWVhbnMgdGhhdCBzZXJ2ZXIgY2FuIHNlbmQsIGFuZCBjbGllbnQgdW5kZXJzdGFuZCBtdWx0aXBsZXhlZAorcHJvZ3Jlc3MgcmVwb3J0cyBhbmQgZXJyb3IgaW5mbyBpbnRlcmxlYXZlZCB3aXRoIHRoZSBwYWNrZmlsZSBpdHNlbGYuCisKK1RoZXNlIHR3byBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIEEgbW9kZXJuIGNsaWVudCBhbHdheXMKK2Zhdm9ycyAnc2lkZS1iYW5kLTY0aycuCisKK0VpdGhlciBtb2RlIGluZGljYXRlcyB0aGF0IHRoZSBwYWNrZmlsZSBkYXRhIHdpbGwgYmUgc3RyZWFtZWQgYnJva2VuCit1cCBpbnRvIHBhY2tldHMgb2YgdXAgdG8gZWl0aGVyIDEwMDAgYnl0ZXMgaW4gdGhlIGNhc2Ugb2YgJ3NpZGVfYmFuZCcsCitvciA2NTUyMCBieXRlcyBpbiB0aGUgY2FzZSBvZiAnc2lkZV9iYW5kXzY0aycuIEVhY2ggcGFja2V0IGlzIG1hZGUgdXAKK29mIGEgbGVhZGluZyA0LWJ5dGUgcGt0LWxpbmUgbGVuZ3RoIG9mIGhvdyBtdWNoIGRhdGEgaXMgaW4gdGhlIHBhY2tldCwKK2ZvbGxvd2VkIGJ5IGEgMS1ieXRlIHN0cmVhbSBjb2RlLCBmb2xsb3dlZCBieSB0aGUgYWN0dWFsIGRhdGEuCisKK1RoZSBzdHJlYW0gY29kZSBjYW4gYmUgb25lIG9mOgorCisgMSAtIHBhY2sgZGF0YQorIDIgLSBwcm9ncmVzcyBtZXNzYWdlcworIDMgLSBmYXRhbCBlcnJvciBtZXNzYWdlIGp1c3QgYmVmb3JlIHN0cmVhbSBhYm9ydHMKKworVGhlICJzaWRlLWJhbmQtNjRrIiBjYXBhYmlsaXR5IGNhbWUgYWJvdXQgYXMgYSB3YXkgZm9yIG5ld2VyIGNsaWVudHMKK3RoYXQgY2FuIGhhbmRsZSBtdWNoIGxhcmdlciBwYWNrZXRzIHRvIHJlcXVlc3QgcGFja2V0cyB0aGF0IGFyZQorYWN0dWFsbHkgY3JhbW1lZCBuZWFybHkgZnVsbCwgd2hpbGUgbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorZm9yIHRoZSBvbGRlciBjbGllbnRzLgorCitGdXJ0aGVyLCB3aXRoIHNpZGUtYmFuZCBhbmQgaXRzIHVwIHRvIDEwMDAtYnl0ZSBtZXNzYWdlcywgaXQncyBhY3R1YWxseQorOTk5IGJ5dGVzIG9mIHBheWxvYWQgYW5kIDEgYnl0ZSBmb3IgdGhlIHN0cmVhbSBjb2RlLiBXaXRoIHNpZGUtYmFuZC02NGssCitzYW1lIGRlYWwsIHlvdSBoYXZlIHVwIHRvIDY1NTE5IGJ5dGVzIG9mIGRhdGEgYW5kIDEgYnl0ZSBmb3IgdGhlIHN0cmVhbQorY29kZS4KKworVGhlIGNsaWVudCBNVVNUIHNlbmQgb25seSBtYXhpbXVtIG9mIG9uZSBvZiAic2lkZS1iYW5kIiBhbmQgInNpZGUtCitiYW5kLTY0ayIuICBTZXJ2ZXIgTVVTVCBkaWFnbm9zZSBpdCBhcyBhbiBlcnJvciBpZiBjbGllbnQgcmVxdWVzdHMKK2JvdGguCisKK29mcy1kZWx0YQorLS0tLS0tLS0tCisKK1NlcnZlciBjYW4gc2VuZCwgYW5kIGNsaWVudCB1bmRlcnN0YW5kIFBBQ0t2MiB3aXRoIGRlbHRhIHJlZmVycmluZyB0bworaXRzIGJhc2UgYnkgcG9zaXRpb24gaW4gcGFjayByYXRoZXIgdGhhbiBieSBhbiBvYmotaWQuICBUaGF0IGlzLCB0aGV5IGNhbgorc2VuZC9yZWFkIE9CSl9PRlNfREVMVEEgKGFrYSB0eXBlIDYpIGluIGEgcGFja2ZpbGUuCisKK2FnZW50CistLS0tLQorCitUaGUgc2VydmVyIG1heSBvcHRpb25hbGx5IHNlbmQgYSBjYXBhYmlsaXR5IG9mIHRoZSBmb3JtIGBhZ2VudD1YYCB0bworbm90aWZ5IHRoZSBjbGllbnQgdGhhdCB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgdmVyc2lvbiBgWGAuIFRoZSBjbGllbnQgbWF5CitvcHRpb25hbGx5IHJldHVybiBpdHMgb3duIGFnZW50IHN0cmluZyBieSByZXNwb25kaW5nIHdpdGggYW4gYGFnZW50PVlgCitjYXBhYmlsaXR5IChidXQgaXQgTVVTVCBOT1QgZG8gc28gaWYgdGhlIHNlcnZlciBkaWQgbm90IG1lbnRpb24gdGhlCithZ2VudCBjYXBhYmlsaXR5KS4gVGhlIGBYYCBhbmQgYFlgIHN0cmluZ3MgbWF5IGNvbnRhaW4gYW55IHByaW50YWJsZQorQVNDSUkgY2hhcmFjdGVycyBleGNlcHQgc3BhY2UgKGkuZS4sIHRoZSBieXRlIHJhbmdlIDMyIDwgeCA8IDEyNyksIGFuZAorYXJlIHR5cGljYWxseSBvZiB0aGUgZm9ybSAicGFja2FnZS92ZXJzaW9uIiAoZS5nLiwgImdpdC8xLjguMy4xIikuIFRoZQorYWdlbnQgc3RyaW5ncyBhcmUgcHVyZWx5IGluZm9ybWF0aXZlIGZvciBzdGF0aXN0aWNzIGFuZCBkZWJ1Z2dpbmcKK3B1cnBvc2VzLCBhbmQgTVVTVCBOT1QgYmUgdXNlZCB0byBwcm9ncmFtbWF0aWNhbGx5IGFzc3VtZSB0aGUgcHJlc2VuY2UKK29yIGFic2VuY2Ugb2YgcGFydGljdWxhciBmZWF0dXJlcy4KKworc3ltcmVmCistLS0tLS0KKworVGhpcyBwYXJhbWV0ZXJpemVkIGNhcGFiaWxpdHkgaXMgdXNlZCB0byBpbmZvcm0gdGhlIHJlY2VpdmVyIHdoaWNoIHN5bWJvbGljIHJlZgorcG9pbnRzIHRvIHdoaWNoIHJlZjsgZm9yIGV4YW1wbGUsICJzeW1yZWY9SEVBRDpyZWZzL2hlYWRzL21hc3RlciIgdGVsbHMgdGhlCityZWNlaXZlciB0aGF0IEhFQUQgcG9pbnRzIHRvIG1hc3Rlci4gVGhpcyBjYXBhYmlsaXR5IGNhbiBiZSByZXBlYXRlZCB0bworcmVwcmVzZW50IG11bHRpcGxlIHN5bXJlZnMuCisKK1NlcnZlcnMgU0hPVUxEIGluY2x1ZGUgdGhpcyBjYXBhYmlsaXR5IGZvciB0aGUgSEVBRCBzeW1yZWYgaWYgaXQgaXMgb25lIG9mIHRoZQorcmVmcyBiZWluZyBzZW50LgorCitDbGllbnRzIE1BWSB1c2UgdGhlIHBhcmFtZXRlcnMgZnJvbSB0aGlzIGNhcGFiaWxpdHkgdG8gc2VsZWN0IHRoZSBwcm9wZXIgaW5pdGlhbAorYnJhbmNoIHdoZW4gY2xvbmluZyBhIHJlcG9zaXRvcnkuCisKK3NoYWxsb3cKKy0tLS0tLS0KKworVGhpcyBjYXBhYmlsaXR5IGFkZHMgImRlZXBlbiIsICJzaGFsbG93IiBhbmQgInVuc2hhbGxvdyIgY29tbWFuZHMgdG8KK3RoZSAgZmV0Y2gtcGFjay91cGxvYWQtcGFjayBwcm90b2NvbCBzbyBjbGllbnRzIGNhbiByZXF1ZXN0IHNoYWxsb3cKK2Nsb25lcy4KKworZGVlcGVuLXNpbmNlCistLS0tLS0tLS0tLS0KKworVGhpcyBjYXBhYmlsaXR5IGFkZHMgImRlZXBlbi1zaW5jZSIgY29tbWFuZCB0byBmZXRjaC1wYWNrL3VwbG9hZC1wYWNrCitwcm90b2NvbCBzbyB0aGUgY2xpZW50IGNhbiByZXF1ZXN0IHNoYWxsb3cgY2xvbmVzIHRoYXQgYXJlIGN1dCBhdCBhCitzcGVjaWZpYyB0aW1lLCBpbnN0ZWFkIG9mIGRlcHRoLiBJbnRlcm5hbGx5IGl0J3MgZXF1aXZhbGVudCBvZiBkb2luZworInJldi1saXN0IC0tbWF4LWFnZT08dGltZXN0YW1wPiIgb24gdGhlIHNlcnZlciBzaWRlLiAiZGVlcGVuLXNpbmNlIgorY2Fubm90IGJlIHVzZWQgd2l0aCAiZGVlcGVuIi4KKworZGVlcGVuLW5vdAorLS0tLS0tLS0tLQorCitUaGlzIGNhcGFiaWxpdHkgYWRkcyAiZGVlcGVuLW5vdCIgY29tbWFuZCB0byBmZXRjaC1wYWNrL3VwbG9hZC1wYWNrCitwcm90b2NvbCBzbyB0aGUgY2xpZW50IGNhbiByZXF1ZXN0IHNoYWxsb3cgY2xvbmVzIHRoYXQgYXJlIGN1dCBhdCBhCitzcGVjaWZpYyByZXZpc2lvbiwgaW5zdGVhZCBvZiBkZXB0aC4gSW50ZXJuYWxseSBpdCdzIGVxdWl2YWxlbnQgb2YKK2RvaW5nICJyZXYtbGlzdCAtLW5vdCA8cmV2PiIgb24gdGhlIHNlcnZlciBzaWRlLiAiZGVlcGVuLW5vdCIKK2Nhbm5vdCBiZSB1c2VkIHdpdGggImRlZXBlbiIsIGJ1dCBjYW4gYmUgdXNlZCB3aXRoICJkZWVwZW4tc2luY2UiLgorCitkZWVwZW4tcmVsYXRpdmUKKy0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGlzIGNhcGFiaWxpdHkgaXMgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQsIHRoZSBzZW1hbnRpY3Mgb2YKKyJkZWVwZW4iIGNvbW1hbmQgaXMgY2hhbmdlZC4gVGhlICJkZXB0aCIgYXJndW1lbnQgaXMgdGhlIGRlcHRoIGZyb20KK3RoZSBjdXJyZW50IHNoYWxsb3cgYm91bmRhcnksIGluc3RlYWQgb2YgdGhlIGRlcHRoIGZyb20gcmVtb3RlIHJlZnMuCisKK25vLXByb2dyZXNzCistLS0tLS0tLS0tLQorCitUaGUgY2xpZW50IHdhcyBzdGFydGVkIHdpdGggImdpdCBjbG9uZSAtcSIgb3Igc29tZXRoaW5nLCBhbmQgZG9lc24ndAord2FudCB0aGF0IHNpZGUgYmFuZCAyLiAgQmFzaWNhbGx5IHRoZSBjbGllbnQganVzdCBzYXlzICJJIGRvIG5vdAord2lzaCB0byByZWNlaXZlIHN0cmVhbSAyIG9uIHNpZGViYW5kLCBzbyBkbyBub3Qgc2VuZCBpdCB0byBtZSwgYW5kIGlmCit5b3UgZGlkLCBJIHdpbGwgZHJvcCBpdCBvbiB0aGUgZmxvb3IgYW55d2F5Ii4gIEhvd2V2ZXIsIHRoZSBzaWRlYmFuZAorY2hhbm5lbCAzIGlzIHN0aWxsIHVzZWQgZm9yIGVycm9yIHJlc3BvbnNlcy4KKworaW5jbHVkZS10YWcKKy0tLS0tLS0tLS0tCisKK1RoZSAnaW5jbHVkZS10YWcnIGNhcGFiaWxpdHkgaXMgYWJvdXQgc2VuZGluZyBhbm5vdGF0ZWQgdGFncyBpZiB3ZSBhcmUKK3NlbmRpbmcgb2JqZWN0cyB0aGV5IHBvaW50IHRvLiAgSWYgd2UgcGFjayBhbiBvYmplY3QgdG8gdGhlIGNsaWVudCwgYW5kCithIHRhZyBvYmplY3QgcG9pbnRzIGV4YWN0bHkgYXQgdGhhdCBvYmplY3QsIHdlIHBhY2sgdGhlIHRhZyBvYmplY3QgdG9vLgorSW4gZ2VuZXJhbCB0aGlzIGFsbG93cyBhIGNsaWVudCB0byBnZXQgYWxsIG5ldyBhbm5vdGF0ZWQgdGFncyB3aGVuIGl0CitmZXRjaGVzIGEgYnJhbmNoLCBpbiBhIHNpbmdsZSBuZXR3b3JrIGNvbm5lY3Rpb24uCisKK0NsaWVudHMgTUFZIGFsd2F5cyBzZW5kIGluY2x1ZGUtdGFnLCBoYXJkY29kaW5nIGl0IGludG8gYSByZXF1ZXN0IHdoZW4KK3RoZSBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGlzIGNhcGFiaWxpdHkuIFRoZSBkZWNpc2lvbiBmb3IgYSBjbGllbnQgdG8KK3JlcXVlc3QgaW5jbHVkZS10YWcgb25seSBoYXMgdG8gZG8gd2l0aCB0aGUgY2xpZW50J3MgZGVzaXJlcyBmb3IgdGFnCitkYXRhLCB3aGV0aGVyIG9yIG5vdCBhIHNlcnZlciBoYWQgYWR2ZXJ0aXNlZCBvYmplY3RzIGluIHRoZQorcmVmcy90YWdzLyogbmFtZXNwYWNlLgorCitTZXJ2ZXJzIE1VU1QgcGFjayB0aGUgdGFncyBpZiB0aGVpciByZWZlcnJhbnQgaXMgcGFja2VkIGFuZCB0aGUgY2xpZW50CitoYXMgcmVxdWVzdGVkIGluY2x1ZGUtdGFncy4KKworQ2xpZW50cyBNVVNUIGJlIHByZXBhcmVkIGZvciB0aGUgY2FzZSB3aGVyZSBhIHNlcnZlciBoYXMgaWdub3JlZAoraW5jbHVkZS10YWcgYW5kIGhhcyBub3QgYWN0dWFsbHkgc2VudCB0YWdzIGluIHRoZSBwYWNrLiAgSW4gc3VjaAorY2FzZXMgdGhlIGNsaWVudCBTSE9VTEQgaXNzdWUgYSBzdWJzZXF1ZW50IGZldGNoIHRvIGFjcXVpcmUgdGhlIHRhZ3MKK3RoYXQgaW5jbHVkZS10YWcgd291bGQgaGF2ZSBvdGhlcndpc2UgZ2l2ZW4gdGhlIGNsaWVudC4KKworVGhlIHNlcnZlciBTSE9VTEQgc2VuZCBpbmNsdWRlLXRhZywgaWYgaXQgc3VwcG9ydHMgaXQsIHJlZ2FyZGxlc3MKK29mIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSB0YWdzIGF2YWlsYWJsZS4KKworcmVwb3J0LXN0YXR1cworLS0tLS0tLS0tLS0tLQorCitUaGUgcmVjZWl2ZS1wYWNrIHByb2Nlc3MgY2FuIHJlY2VpdmUgYSAncmVwb3J0LXN0YXR1cycgY2FwYWJpbGl0eSwKK3doaWNoIHRlbGxzIGl0IHRoYXQgdGhlIGNsaWVudCB3YW50cyBhIHJlcG9ydCBvZiB3aGF0IGhhcHBlbmVkIGFmdGVyCithIHBhY2tmaWxlIHVwbG9hZCBhbmQgcmVmZXJlbmNlIHVwZGF0ZS4gIElmIHRoZSBwdXNoaW5nIGNsaWVudCByZXF1ZXN0cwordGhpcyBjYXBhYmlsaXR5LCBhZnRlciB1bnBhY2tpbmcgYW5kIHVwZGF0aW5nIHJlZmVyZW5jZXMgdGhlIHNlcnZlcgord2lsbCByZXNwb25kIHdpdGggd2hldGhlciB0aGUgcGFja2ZpbGUgdW5wYWNrZWQgc3VjY2Vzc2Z1bGx5IGFuZCBpZgorZWFjaCByZWZlcmVuY2Ugd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LiAgSWYgYW55IG9mIHRob3NlIHdlcmUgbm90CitzdWNjZXNzZnVsLCBpdCB3aWxsIHNlbmQgYmFjayBhbiBlcnJvciBtZXNzYWdlLiAgU2VlIHBhY2stcHJvdG9jb2wudHh0Citmb3IgZXhhbXBsZSBtZXNzYWdlcy4KKworZGVsZXRlLXJlZnMKKy0tLS0tLS0tLS0tCisKK0lmIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayB0aGUgJ2RlbGV0ZS1yZWZzJyBjYXBhYmlsaXR5LCBpdCBtZWFucyB0aGF0CitpdCBpcyBjYXBhYmxlIG9mIGFjY2VwdGluZyBhIHplcm8taWQgdmFsdWUgYXMgdGhlIHRhcmdldAordmFsdWUgb2YgYSByZWZlcmVuY2UgdXBkYXRlLiAgSXQgaXMgbm90IHNlbnQgYmFjayBieSB0aGUgY2xpZW50LCBpdAorc2ltcGx5IGluZm9ybXMgdGhlIGNsaWVudCB0aGF0IGl0IGNhbiBiZSBzZW50IHplcm8taWQgdmFsdWVzCit0byBkZWxldGUgcmVmZXJlbmNlcy4KKworcXVpZXQKKy0tLS0tCisKK0lmIHRoZSByZWNlaXZlLXBhY2sgc2VydmVyIGFkdmVydGlzZXMgdGhlICdxdWlldCcgY2FwYWJpbGl0eSwgaXQgaXMKK2NhcGFibGUgb2Ygc2lsZW5jaW5nIGh1bWFuLXJlYWRhYmxlIHByb2dyZXNzIG91dHB1dCB3aGljaCBvdGhlcndpc2UgbWF5CitiZSBzaG93biB3aGVuIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmVkIHBhY2suIEEgc2VuZC1wYWNrIGNsaWVudCBzaG91bGQKK3Jlc3BvbmQgd2l0aCB0aGUgJ3F1aWV0JyBjYXBhYmlsaXR5IHRvIHN1cHByZXNzIHNlcnZlci1zaWRlIHByb2dyZXNzCityZXBvcnRpbmcgaWYgdGhlIGxvY2FsIHByb2dyZXNzIHJlcG9ydGluZyBpcyBhbHNvIGJlaW5nIHN1cHByZXNzZWQKKyhlLmcuLCB2aWEgYHB1c2ggLXFgLCBvciBpZiBzdGRlcnIgZG9lcyBub3QgZ28gdG8gYSB0dHkpLgorCithdG9taWMKKy0tLS0tLQorCitJZiB0aGUgc2VydmVyIHNlbmRzIHRoZSAnYXRvbWljJyBjYXBhYmlsaXR5IGl0IGlzIGNhcGFibGUgb2YgYWNjZXB0aW5nCithdG9taWMgcHVzaGVzLiBJZiB0aGUgcHVzaGluZyBjbGllbnQgcmVxdWVzdHMgdGhpcyBjYXBhYmlsaXR5LCB0aGUgc2VydmVyCit3aWxsIHVwZGF0ZSB0aGUgcmVmcyBpbiBvbmUgYXRvbWljIHRyYW5zYWN0aW9uLiBFaXRoZXIgYWxsIHJlZnMgYXJlCit1cGRhdGVkIG9yIG5vbmUuCisKK3B1c2gtb3B0aW9ucworLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBzZXJ2ZXIgc2VuZHMgdGhlICdwdXNoLW9wdGlvbnMnIGNhcGFiaWxpdHkgaXQgaXMgYWJsZSB0byBhY2NlcHQKK3B1c2ggb3B0aW9ucyBhZnRlciB0aGUgdXBkYXRlIGNvbW1hbmRzIGhhdmUgYmVlbiBzZW50LCBidXQgYmVmb3JlIHRoZQorcGFja2ZpbGUgaXMgc3RyZWFtZWQuIElmIHRoZSBwdXNoaW5nIGNsaWVudCByZXF1ZXN0cyB0aGlzIGNhcGFiaWxpdHksCit0aGUgc2VydmVyIHdpbGwgcGFzcyB0aGUgb3B0aW9ucyB0byB0aGUgcHJlLSBhbmQgcG9zdC0gcmVjZWl2ZSBob29rcwordGhhdCBwcm9jZXNzIHRoaXMgcHVzaCByZXF1ZXN0LgorCithbGxvdy10aXAtc2hhMS1pbi13YW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSB1cGxvYWQtcGFjayBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGlzIGNhcGFiaWxpdHksIGZldGNoLXBhY2sgbWF5CitzZW5kICJ3YW50IiBsaW5lcyB3aXRoIFNIQS0xcyB0aGF0IGV4aXN0IGF0IHRoZSBzZXJ2ZXIgYnV0IGFyZSBub3QKK2FkdmVydGlzZWQgYnkgdXBsb2FkLXBhY2suCisKK2FsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIHVwbG9hZC1wYWNrIHNlcnZlciBhZHZlcnRpc2VzIHRoaXMgY2FwYWJpbGl0eSwgZmV0Y2gtcGFjayBtYXkKK3NlbmQgIndhbnQiIGxpbmVzIHdpdGggU0hBLTFzIHRoYXQgZXhpc3QgYXQgdGhlIHNlcnZlciBidXQgYXJlIG5vdAorYWR2ZXJ0aXNlZCBieSB1cGxvYWQtcGFjay4KKworcHVzaC1jZXJ0PTxub25jZT4KKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZWNlaXZlLXBhY2sgc2VydmVyIHRoYXQgYWR2ZXJ0aXNlcyB0aGlzIGNhcGFiaWxpdHkgaXMgd2lsbGluZwordG8gYWNjZXB0IGEgc2lnbmVkIHB1c2ggY2VydGlmaWNhdGUsIGFuZCBhc2tzIHRoZSA8bm9uY2U+IHRvIGJlCitpbmNsdWRlZCBpbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZS4gIEEgc2VuZC1wYWNrIGNsaWVudCBNVVNUIE5PVAorc2VuZCBhIHB1c2gtY2VydCBwYWNrZXQgdW5sZXNzIHRoZSByZWNlaXZlLXBhY2sgc2VydmVyIGFkdmVydGlzZXMKK3RoaXMgY2FwYWJpbGl0eS4KKworZmlsdGVyCistLS0tLS0KKworSWYgdGhlIHVwbG9hZC1wYWNrIHNlcnZlciBhZHZlcnRpc2VzIHRoZSAnZmlsdGVyJyBjYXBhYmlsaXR5LAorZmV0Y2gtcGFjayBtYXkgc2VuZCAiZmlsdGVyIiBjb21tYW5kcyB0byByZXF1ZXN0IGEgcGFydGlhbCBjbG9uZQorb3IgcGFydGlhbCBmZXRjaCBhbmQgcmVxdWVzdCB0aGF0IHRoZSBzZXJ2ZXIgb21pdCB2YXJpb3VzIG9iamVjdHMKK2Zyb20gdGhlIHBhY2tmaWxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY29tbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNvbW1vbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlZGIzNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNvbW1vbi50eHQKQEAgLTAsMCArMSw5OSBAQAorRG9jdW1lbnRhdGlvbiBDb21tb24gdG8gUGFjayBhbmQgSHR0cCBQcm90b2NvbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FCTkYgTm90YXRpb24KKy0tLS0tLS0tLS0tLS0KKworQUJORiBub3RhdGlvbiBhcyBkZXNjcmliZWQgYnkgUkZDIDUyMzQgaXMgdXNlZCB3aXRoaW4gdGhlIHByb3RvY29sIGRvY3VtZW50cywKK2V4Y2VwdCB0aGUgZm9sbG93aW5nIHJlcGxhY2VtZW50IGNvcmUgcnVsZXMgYXJlIHVzZWQ6CistLS0tCisgIEhFWERJRyAgICA9ICBESUdJVCAvICJhIiAvICJiIiAvICJjIiAvICJkIiAvICJlIiAvICJmIgorLS0tLQorCitXZSBhbHNvIGRlZmluZSB0aGUgZm9sbG93aW5nIGNvbW1vbiBydWxlczoKKy0tLS0KKyAgTlVMICAgICAgID0gICV4MDAKKyAgemVyby1pZCAgID0gIDQwKiIwIgorICBvYmotaWQgICAgPSAgNDAqKEhFWERJR0lUKQorCisgIHJlZm5hbWUgID0gICJIRUFEIgorICByZWZuYW1lIC89ICAicmVmcy8iIDxzZWUgZGlzY3Vzc2lvbiBiZWxvdz4KKy0tLS0KKworQSByZWZuYW1lIGlzIGEgaGllcmFyY2hpY2FsIG9jdGV0IHN0cmluZyBiZWdpbm5pbmcgd2l0aCAicmVmcy8iIGFuZAorbm90IHZpb2xhdGluZyB0aGUgJ2dpdC1jaGVjay1yZWYtZm9ybWF0JyBjb21tYW5kJ3MgdmFsaWRhdGlvbiBydWxlcy4KK01vcmUgc3BlY2lmaWNhbGx5LCB0aGV5OgorCisuIFRoZXkgY2FuIGluY2x1ZGUgc2xhc2ggYC9gIGZvciBoaWVyYXJjaGljYWwgKGRpcmVjdG9yeSkKKyAgZ3JvdXBpbmcsIGJ1dCBubyBzbGFzaC1zZXBhcmF0ZWQgY29tcG9uZW50IGNhbiBiZWdpbiB3aXRoIGEKKyAgZG90IGAuYC4KKworLiBUaGV5IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgYC9gLiBUaGlzIGVuZm9yY2VzIHRoZSBwcmVzZW5jZSBvZiBhCisgIGNhdGVnb3J5IGxpa2UgYGhlYWRzL2AsIGB0YWdzL2AgZXRjLiBidXQgdGhlIGFjdHVhbCBuYW1lcyBhcmUgbm90CisgIHJlc3RyaWN0ZWQuCisKKy4gVGhleSBjYW5ub3QgaGF2ZSB0d28gY29uc2VjdXRpdmUgZG90cyBgLi5gIGFueXdoZXJlLgorCisuIFRoZXkgY2Fubm90IGhhdmUgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuIGJ5dGVzIHdob3NlCisgIHZhbHVlcyBhcmUgbG93ZXIgdGhhbiBcMDQwLCBvciBcMTc3IGBERUxgKSwgc3BhY2UsIHRpbGRlIGB+YCwKKyAgY2FyZXQgYF5gLCBjb2xvbiBgOmAsIHF1ZXN0aW9uLW1hcmsgYD9gLCBhc3RlcmlzayBgKmAsCisgIG9yIG9wZW4gYnJhY2tldCBgW2AgYW55d2hlcmUuCisKKy4gVGhleSBjYW5ub3QgZW5kIHdpdGggYSBzbGFzaCBgL2Agb3IgYSBkb3QgYC5gLgorCisuIFRoZXkgY2Fubm90IGVuZCB3aXRoIHRoZSBzZXF1ZW5jZSBgLmxvY2tgLgorCisuIFRoZXkgY2Fubm90IGNvbnRhaW4gYSBzZXF1ZW5jZSBgQHtgLgorCisuIFRoZXkgY2Fubm90IGNvbnRhaW4gYSBgXFxgLgorCisKK3BrdC1saW5lIEZvcm1hdAorLS0tLS0tLS0tLS0tLS0tCisKK011Y2ggKGJ1dCBub3QgYWxsKSBvZiB0aGUgcGF5bG9hZCBpcyBkZXNjcmliZWQgYXJvdW5kIHBrdC1saW5lcy4KKworQSBwa3QtbGluZSBpcyBhIHZhcmlhYmxlIGxlbmd0aCBiaW5hcnkgc3RyaW5nLiAgVGhlIGZpcnN0IGZvdXIgYnl0ZXMKK29mIHRoZSBsaW5lLCB0aGUgcGt0LWxlbiwgaW5kaWNhdGVzIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIGxpbmUsCitpbiBoZXhhZGVjaW1hbC4gIFRoZSBwa3QtbGVuIGluY2x1ZGVzIHRoZSA0IGJ5dGVzIHVzZWQgdG8gY29udGFpbgordGhlIGxlbmd0aCdzIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorCitBIHBrdC1saW5lIE1BWSBjb250YWluIGJpbmFyeSBkYXRhLCBzbyBpbXBsZW1lbnRvcnMgTVVTVCBlbnN1cmUKK3BrdC1saW5lIHBhcnNpbmcvZm9ybWF0dGluZyByb3V0aW5lcyBhcmUgOC1iaXQgY2xlYW4uCisKK0Egbm9uLWJpbmFyeSBsaW5lIFNIT1VMRCBCRSB0ZXJtaW5hdGVkIGJ5IGFuIExGLCB3aGljaCBpZiBwcmVzZW50CitNVVNUIGJlIGluY2x1ZGVkIGluIHRoZSB0b3RhbCBsZW5ndGguIFJlY2VpdmVycyBNVVNUIHRyZWF0IHBrdC1saW5lcword2l0aCBub24tYmluYXJ5IGRhdGEgdGhlIHNhbWUgd2hldGhlciBvciBub3QgdGhleSBjb250YWluIHRoZSB0cmFpbGluZworTEYgKHN0cmlwcGluZyB0aGUgTEYgaWYgcHJlc2VudCwgYW5kIG5vdCBjb21wbGFpbmluZyB3aGVuIGl0IGlzCittaXNzaW5nKS4KKworVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgcGt0LWxpbmUncyBkYXRhIGNvbXBvbmVudCBpcyA2NTUxNiBieXRlcy4KK0ltcGxlbWVudGF0aW9ucyBNVVNUIE5PVCBzZW5kIHBrdC1saW5lIHdob3NlIGxlbmd0aCBleGNlZWRzIDY1NTIwCisoNjU1MTYgYnl0ZXMgb2YgcGF5bG9hZCArIDQgYnl0ZXMgb2YgbGVuZ3RoIGRhdGEpLgorCitJbXBsZW1lbnRhdGlvbnMgU0hPVUxEIE5PVCBzZW5kIGFuIGVtcHR5IHBrdC1saW5lICgiMDAwNCIpLgorCitBIHBrdC1saW5lIHdpdGggYSBsZW5ndGggZmllbGQgb2YgMCAoIjAwMDAiKSwgY2FsbGVkIGEgZmx1c2gtcGt0LAoraXMgYSBzcGVjaWFsIGNhc2UgYW5kIE1VU1QgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSB0aGFuIGFuIGVtcHR5Citwa3QtbGluZSAoIjAwMDQiKS4KKworLS0tLQorICBwa3QtbGluZSAgICAgPSAgZGF0YS1wa3QgLyBmbHVzaC1wa3QKKworICBkYXRhLXBrdCAgICAgPSAgcGt0LWxlbiBwa3QtcGF5bG9hZAorICBwa3QtbGVuICAgICAgPSAgNCooSEVYRElHKQorICBwa3QtcGF5bG9hZCAgPSAgKHBrdC1sZW4gLSA0KSooT0NURVQpCisKKyAgZmx1c2gtcGt0ICAgID0gIjAwMDAiCistLS0tCisKK0V4YW1wbGVzIChhcyBDLXN0eWxlIHN0cmluZ3MpOgorCistLS0tCisgIHBrdC1saW5lICAgICAgICAgIGFjdHVhbCB2YWx1ZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIjAwMDZhXG4iICAgICAgICAgImFcbiIKKyAgIjAwMDVhIiAgICAgICAgICAgImEiCisgICIwMDBiZm9vYmFyXG4iICAgICJmb29iYXJcbiIKKyAgIjAwMDQiICAgICAgICAgICAgIiIKKy0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLXYyLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLXYyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTM3NjZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtdjIudHh0CkBAIC0wLDAgKzEsNDU1IEBACitHaXQgV2lyZSBQcm90b2NvbCwgVmVyc2lvbiAyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgcHJlc2VudHMgYSBzcGVjaWZpY2F0aW9uIGZvciBhIHZlcnNpb24gMiBvZiBHaXQncyB3aXJlCitwcm90b2NvbC4gIFByb3RvY29sIHYyIHdpbGwgaW1wcm92ZSB1cG9uIHYxIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKworICAqIEluc3RlYWQgb2YgbXVsdGlwbGUgc2VydmljZSBuYW1lcywgbXVsdGlwbGUgY29tbWFuZHMgd2lsbCBiZQorICAgIHN1cHBvcnRlZCBieSBhIHNpbmdsZSBzZXJ2aWNlCisgICogRWFzaWx5IGV4dGVuZGFibGUgYXMgY2FwYWJpbGl0aWVzIGFyZSBtb3ZlZCBpbnRvIHRoZWlyIG93biBzZWN0aW9uCisgICAgb2YgdGhlIHByb3RvY29sLCBubyBsb25nZXIgYmVpbmcgaGlkZGVuIGJlaGluZCBhIE5VTCBieXRlIGFuZAorICAgIGxpbWl0ZWQgYnkgdGhlIHNpemUgb2YgYSBwa3QtbGluZQorICAqIFNlcGFyYXRlIG91dCBvdGhlciBpbmZvcm1hdGlvbiBoaWRkZW4gYmVoaW5kIE5VTCBieXRlcyAoZS5nLiBhZ2VudAorICAgIHN0cmluZyBhcyBhIGNhcGFiaWxpdHkgYW5kIHN5bXJlZnMgY2FuIGJlIHJlcXVlc3RlZCB1c2luZyAnbHMtcmVmcycpCisgICogUmVmZXJlbmNlIGFkdmVydGlzZW1lbnQgd2lsbCBiZSBvbWl0dGVkIHVubGVzcyBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAqIGxzLXJlZnMgY29tbWFuZCB0byBleHBsaWNpdGx5IHJlcXVlc3Qgc29tZSByZWZzCisgICogRGVzaWduZWQgd2l0aCBodHRwIGFuZCBzdGF0ZWxlc3MtcnBjIGluIG1pbmQuICBXaXRoIGNsZWFyIGZsdXNoCisgICAgc2VtYW50aWNzIHRoZSBodHRwIHJlbW90ZSBoZWxwZXIgY2FuIHNpbXBseSBhY3QgYXMgYSBwcm94eQorCitJbiBwcm90b2NvbCB2MiBjb21tdW5pY2F0aW9uIGlzIGNvbW1hbmQgb3JpZW50ZWQuICBXaGVuIGZpcnN0IGNvbnRhY3RpbmcgYQorc2VydmVyIGEgbGlzdCBvZiBjYXBhYmlsaXRpZXMgd2lsbCBhZHZlcnRpc2VkLiAgU29tZSBvZiB0aGVzZSBjYXBhYmlsaXRpZXMKK3dpbGwgYmUgY29tbWFuZHMgd2hpY2ggYSBjbGllbnQgY2FuIHJlcXVlc3QgYmUgZXhlY3V0ZWQuICBPbmNlIGEgY29tbWFuZAoraGFzIGNvbXBsZXRlZCwgYSBjbGllbnQgY2FuIHJldXNlIHRoZSBjb25uZWN0aW9uIGFuZCByZXF1ZXN0IHRoYXQgb3RoZXIKK2NvbW1hbmRzIGJlIGV4ZWN1dGVkLgorCitQYWNrZXQtTGluZSBGcmFtaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBjb21tdW5pY2F0aW9uIGlzIGRvbmUgdXNpbmcgcGFja2V0LWxpbmUgZnJhbWluZywganVzdCBhcyBpbiB2MS4gIFNlZQorYERvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0YCBhbmQKK2BEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jb21tb24udHh0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworSW4gcHJvdG9jb2wgdjIgdGhlc2Ugc3BlY2lhbCBwYWNrZXRzIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHNlbWFudGljczoKKworICAqICcwMDAwJyBGbHVzaCBQYWNrZXQgKGZsdXNoLXBrdCkgLSBpbmRpY2F0ZXMgdGhlIGVuZCBvZiBhIG1lc3NhZ2UKKyAgKiAnMDAwMScgRGVsaW1pdGVyIFBhY2tldCAoZGVsaW0tcGt0KSAtIHNlcGFyYXRlcyBzZWN0aW9ucyBvZiBhIG1lc3NhZ2UKKworSW5pdGlhbCBDbGllbnQgUmVxdWVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBnZW5lcmFsIGEgY2xpZW50IGNhbiByZXF1ZXN0IHRvIHNwZWFrIHByb3RvY29sIHYyIGJ5IHNlbmRpbmcKK2B2ZXJzaW9uPTJgIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgc2lkZS1jaGFubmVsIGZvciB0aGUgdHJhbnNwb3J0IGJlaW5nCit1c2VkIHdoaWNoIGluZXZpdGFibHkgc2V0cyBgR0lUX1BST1RPQ09MYC4gIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlCitmb3VuZCBpbiBgcGFjay1wcm90b2NvbC50eHRgIGFuZCBgaHR0cC1wcm90b2NvbC50eHRgLiAgSW4gYWxsIGNhc2VzIHRoZQorcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIGlzIHRoZSBjYXBhYmlsaXR5IGFkdmVydGlzZW1lbnQuCisKK0dpdCBUcmFuc3BvcnQKK35+fn5+fn5+fn5+fn4KKworV2hlbiB1c2luZyB0aGUgZ2l0Oi8vIHRyYW5zcG9ydCwgeW91IGNhbiByZXF1ZXN0IHRvIHVzZSBwcm90b2NvbCB2MiBieQorc2VuZGluZyAidmVyc2lvbj0yIiBhcyBhbiBleHRyYSBwYXJhbWV0ZXI6CisKKyAgIDAwM2VnaXQtdXBsb2FkLXBhY2sgL3Byb2plY3QuZ2l0XDBob3N0PW15c2VydmVyLmNvbVwwXDB2ZXJzaW9uPTJcMAorCitTU0ggYW5kIEZpbGUgVHJhbnNwb3J0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gdXNpbmcgZWl0aGVyIHRoZSBzc2g6Ly8gb3IgZmlsZTovLyB0cmFuc3BvcnQsIHRoZSBHSVRfUFJPVE9DT0wKK2Vudmlyb25tZW50IHZhcmlhYmxlIG11c3QgYmUgc2V0IGV4cGxpY2l0bHkgdG8gaW5jbHVkZSAidmVyc2lvbj0yIi4KKworSFRUUCBUcmFuc3BvcnQKK35+fn5+fn5+fn5+fn5+CisKK1doZW4gdXNpbmcgdGhlIGh0dHA6Ly8gb3IgaHR0cHM6Ly8gdHJhbnNwb3J0IGEgY2xpZW50IG1ha2VzIGEgInNtYXJ0IgoraW5mby9yZWZzIHJlcXVlc3QgYXMgZGVzY3JpYmVkIGluIGBodHRwLXByb3RvY29sLnR4dGAgYW5kIHJlcXVlc3RzIHRoYXQKK3YyIGJlIHVzZWQgYnkgc3VwcGx5aW5nICJ2ZXJzaW9uPTIiIGluIHRoZSBgR2l0LVByb3RvY29sYCBoZWFkZXIuCisKKyAgIEM6IEdFVCAkR0lUX1VSTC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjAKKyAgIEM6IEdpdC1Qcm90b2NvbDogdmVyc2lvbj0yCisKK0EgdjIgc2VydmVyIHdvdWxkIHJlcGx5OgorCisgICBTOiAyMDAgT0sKKyAgIFM6IDxTb21lIGhlYWRlcnM+CisgICBTOiAuLi4KKyAgIFM6CisgICBTOiAwMDBldmVyc2lvbiAyXG4KKyAgIFM6IDxjYXBhYmlsaXR5LWFkdmVydGlzZW1lbnQ+CisKK1N1YnNlcXVlbnQgcmVxdWVzdHMgYXJlIHRoZW4gbWFkZSBkaXJlY3RseSB0byB0aGUgc2VydmljZQorYCRHSVRfVVJML2dpdC11cGxvYWQtcGFja2AuIChUaGlzIHdvcmtzIHRoZSBzYW1lIGZvciBnaXQtcmVjZWl2ZS1wYWNrKS4KKworQ2FwYWJpbGl0eSBBZHZlcnRpc2VtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBzZXJ2ZXIgd2hpY2ggZGVjaWRlcyB0byBjb21tdW5pY2F0ZSAoYmFzZWQgb24gYSByZXF1ZXN0IGZyb20gYSBjbGllbnQpCit1c2luZyBwcm90b2NvbCB2ZXJzaW9uIDIsIG5vdGlmaWVzIHRoZSBjbGllbnQgYnkgc2VuZGluZyBhIHZlcnNpb24gc3RyaW5nCitpbiBpdHMgaW5pdGlhbCByZXNwb25zZSBmb2xsb3dlZCBieSBhbiBhZHZlcnRpc2VtZW50IG9mIGl0cyBjYXBhYmlsaXRpZXMuCitFYWNoIGNhcGFiaWxpdHkgaXMgYSBrZXkgd2l0aCBhbiBvcHRpb25hbCB2YWx1ZS4gIENsaWVudHMgbXVzdCBpZ25vcmUgYWxsCit1bmtub3duIGtleXMuICBTZW1hbnRpY3Mgb2YgdW5rbm93biB2YWx1ZXMgYXJlIGxlZnQgdG8gdGhlIGRlZmluaXRpb24gb2YKK2VhY2gga2V5LiAgU29tZSBjYXBhYmlsaXRpZXMgd2lsbCBkZXNjcmliZSBjb21tYW5kcyB3aGljaCBjYW4gYmUgcmVxdWVzdGVkCit0byBiZSBleGVjdXRlZCBieSB0aGUgY2xpZW50LgorCisgICAgY2FwYWJpbGl0eS1hZHZlcnRpc2VtZW50ID0gcHJvdG9jb2wtdmVyc2lvbgorCQkJICAgICAgIGNhcGFiaWxpdHktbGlzdAorCQkJICAgICAgIGZsdXNoLXBrdAorCisgICAgcHJvdG9jb2wtdmVyc2lvbiA9IFBLVC1MSU5FKCJ2ZXJzaW9uIDIiIExGKQorICAgIGNhcGFiaWxpdHktbGlzdCA9ICpjYXBhYmlsaXR5CisgICAgY2FwYWJpbGl0eSA9IFBLVC1MSU5FKGtleVs9dmFsdWVdIExGKQorCisgICAga2V5ID0gMSooQUxQSEEgfCBESUdJVCB8ICItXyIpCisgICAgdmFsdWUgPSAxKihBTFBIQSB8IERJR0lUIHwgIiAtXy4sP1wve31bXSgpPD4hQCMkJV4mKis9OjsiKQorCitDb21tYW5kIFJlcXVlc3QKKy0tLS0tLS0tLS0tLS0tLQorCitBZnRlciByZWNlaXZpbmcgdGhlIGNhcGFiaWxpdHkgYWR2ZXJ0aXNlbWVudCwgYSBjbGllbnQgY2FuIHRoZW4gaXNzdWUgYQorcmVxdWVzdCB0byBzZWxlY3QgdGhlIGNvbW1hbmQgaXQgd2FudHMgd2l0aCBhbnkgcGFydGljdWxhciBjYXBhYmlsaXRpZXMKK29yIGFyZ3VtZW50cy4gIFRoZXJlIGlzIHRoZW4gYW4gb3B0aW9uYWwgc2VjdGlvbiB3aGVyZSB0aGUgY2xpZW50IGNhbgorcHJvdmlkZSBhbnkgY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXJzIG9yIHF1ZXJpZXMuICBPbmx5IGEgc2luZ2xlCitjb21tYW5kIGNhbiBiZSByZXF1ZXN0ZWQgYXQgYSB0aW1lLgorCisgICAgcmVxdWVzdCA9IGVtcHR5LXJlcXVlc3QgfCBjb21tYW5kLXJlcXVlc3QKKyAgICBlbXB0eS1yZXF1ZXN0ID0gZmx1c2gtcGt0CisgICAgY29tbWFuZC1yZXF1ZXN0ID0gY29tbWFuZAorCQkgICAgICBjYXBhYmlsaXR5LWxpc3QKKwkJICAgICAgW2NvbW1hbmQtYXJnc10KKwkJICAgICAgZmx1c2gtcGt0CisgICAgY29tbWFuZCA9IFBLVC1MSU5FKCJjb21tYW5kPSIga2V5IExGKQorICAgIGNvbW1hbmQtYXJncyA9IGRlbGltLXBrdAorCQkgICAqY29tbWFuZC1zcGVjaWZpYy1hcmcKKworICAgIGNvbW1hbmQtc3BlY2lmaWMtYXJncyBhcmUgcGFja2V0IGxpbmUgZnJhbWVkIGFyZ3VtZW50cyBkZWZpbmVkIGJ5CisgICAgZWFjaCBpbmRpdmlkdWFsIGNvbW1hbmQuCisKK1RoZSBzZXJ2ZXIgd2lsbCB0aGVuIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBjbGllbnQncyByZXF1ZXN0IGlzCitjb21wcmlzZWQgb2YgYSB2YWxpZCBjb21tYW5kIGFzIHdlbGwgYXMgdmFsaWQgY2FwYWJpbGl0aWVzIHdoaWNoIHdlcmUKK2FkdmVydGlzZWQuICBJZiB0aGUgcmVxdWVzdCBpcyB2YWxpZCB0aGUgc2VydmVyIHdpbGwgdGhlbiBleGVjdXRlIHRoZQorY29tbWFuZC4gIEEgc2VydmVyIE1VU1Qgd2FpdCB0aWxsIGl0IGhhcyByZWNlaXZlZCB0aGUgY2xpZW50J3MgZW50aXJlCityZXF1ZXN0IGJlZm9yZSBpc3N1aW5nIGEgcmVzcG9uc2UuICBUaGUgZm9ybWF0IG9mIHRoZSByZXNwb25zZSBpcworZGV0ZXJtaW5lZCBieSB0aGUgY29tbWFuZCBiZWluZyBleGVjdXRlZCwgYnV0IGluIGFsbCBjYXNlcyBhIGZsdXNoLXBrdAoraW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIHJlc3BvbnNlLgorCitXaGVuIGEgY29tbWFuZCBoYXMgZmluaXNoZWQsIGFuZCB0aGUgY2xpZW50IGhhcyByZWNlaXZlZCB0aGUgZW50aXJlCityZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIsIGEgY2xpZW50IGNhbiBlaXRoZXIgcmVxdWVzdCB0aGF0IGFub3RoZXIKK2NvbW1hbmQgYmUgZXhlY3V0ZWQgb3IgY2FuIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbi4gIEEgY2xpZW50IG1heQorb3B0aW9uYWxseSBzZW5kIGFuIGVtcHR5IHJlcXVlc3QgY29uc2lzdGluZyBvZiBqdXN0IGEgZmx1c2gtcGt0IHRvCitpbmRpY2F0ZSB0aGF0IG5vIG1vcmUgcmVxdWVzdHMgd2lsbCBiZSBtYWRlLgorCitDYXBhYmlsaXRpZXMKKy0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCB0eXBlcyBvZiBjYXBhYmlsaXRpZXM6IG5vcm1hbCBjYXBhYmlsaXRpZXMsCit3aGljaCBjYW4gYmUgdXNlZCB0byBjb252ZXkgaW5mb3JtYXRpb24gb3IgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIGEKK3JlcXVlc3QsIGFuZCBjb21tYW5kcywgd2hpY2ggYXJlIHRoZSBjb3JlIGFjdGlvbnMgdGhhdCBhIGNsaWVudCB3YW50cyB0bworcGVyZm9ybSAoZmV0Y2gsIHB1c2gsIGV0YykuCisKK1Byb3RvY29sIHZlcnNpb24gMiBpcyBzdGF0ZWxlc3MgYnkgZGVmYXVsdC4gIFRoaXMgbWVhbnMgdGhhdCBhbGwgY29tbWFuZHMKK211c3Qgb25seSBsYXN0IGEgc2luZ2xlIHJvdW5kIGFuZCBiZSBzdGF0ZWxlc3MgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlCitzZXJ2ZXIgc2lkZSwgdW5sZXNzIHRoZSBjbGllbnQgaGFzIHJlcXVlc3RlZCBhIGNhcGFiaWxpdHkgaW5kaWNhdGluZyB0aGF0CitzdGF0ZSBzaG91bGQgYmUgbWFpbnRhaW5lZCBieSB0aGUgc2VydmVyLiAgQ2xpZW50cyBNVVNUIE5PVCByZXF1aXJlIHN0YXRlCittYW5hZ2VtZW50IG9uIHRoZSBzZXJ2ZXIgc2lkZSBpbiBvcmRlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuICBUaGlzCitwZXJtaXRzIHNpbXBsZSByb3VuZC1yb2JpbiBsb2FkLWJhbGFuY2luZyBvbiB0aGUgc2VydmVyIHNpZGUsIHdpdGhvdXQKK25lZWRpbmcgdG8gd29ycnkgYWJvdXQgc3RhdGUgbWFuYWdlbWVudC4KKworYWdlbnQKK35+fn5+CisKK1RoZSBzZXJ2ZXIgY2FuIGFkdmVydGlzZSB0aGUgYGFnZW50YCBjYXBhYmlsaXR5IHdpdGggYSB2YWx1ZSBgWGAgKGluIHRoZQorZm9ybSBgYWdlbnQ9WGApIHRvIG5vdGlmeSB0aGUgY2xpZW50IHRoYXQgdGhlIHNlcnZlciBpcyBydW5uaW5nIHZlcnNpb24KK2BYYC4gIFRoZSBjbGllbnQgbWF5IG9wdGlvbmFsbHkgc2VuZCBpdHMgb3duIGFnZW50IHN0cmluZyBieSBpbmNsdWRpbmcKK3RoZSBgYWdlbnRgIGNhcGFiaWxpdHkgd2l0aCBhIHZhbHVlIGBZYCAoaW4gdGhlIGZvcm0gYGFnZW50PVlgKSBpbiBpdHMKK3JlcXVlc3QgdG8gdGhlIHNlcnZlciAoYnV0IGl0IE1VU1QgTk9UIGRvIHNvIGlmIHRoZSBzZXJ2ZXIgZGlkIG5vdAorYWR2ZXJ0aXNlIHRoZSBhZ2VudCBjYXBhYmlsaXR5KS4gVGhlIGBYYCBhbmQgYFlgIHN0cmluZ3MgbWF5IGNvbnRhaW4gYW55CitwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyBleGNlcHQgc3BhY2UgKGkuZS4sIHRoZSBieXRlIHJhbmdlIDMyIDwgeCA8CisxMjcpLCBhbmQgYXJlIHR5cGljYWxseSBvZiB0aGUgZm9ybSAicGFja2FnZS92ZXJzaW9uIiAoZS5nLiwKKyJnaXQvMS44LjMuMSIpLiBUaGUgYWdlbnQgc3RyaW5ncyBhcmUgcHVyZWx5IGluZm9ybWF0aXZlIGZvciBzdGF0aXN0aWNzCithbmQgZGVidWdnaW5nIHB1cnBvc2VzLCBhbmQgTVVTVCBOT1QgYmUgdXNlZCB0byBwcm9ncmFtbWF0aWNhbGx5IGFzc3VtZQordGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgcGFydGljdWxhciBmZWF0dXJlcy4KKworbHMtcmVmcworfn5+fn5+fgorCitgbHMtcmVmc2AgaXMgdGhlIGNvbW1hbmQgdXNlZCB0byByZXF1ZXN0IGEgcmVmZXJlbmNlIGFkdmVydGlzZW1lbnQgaW4gdjIuCitVbmxpa2UgdGhlIGN1cnJlbnQgcmVmZXJlbmNlIGFkdmVydGlzZW1lbnQsIGxzLXJlZnMgdGFrZXMgaW4gYXJndW1lbnRzCit3aGljaCBjYW4gYmUgdXNlZCB0byBsaW1pdCB0aGUgcmVmcyBzZW50IGZyb20gdGhlIHNlcnZlci4KKworQWRkaXRpb25hbCBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBiYXNlIGNvbW1hbmQgd2lsbCBiZSBhZHZlcnRpc2VkCithcyB0aGUgdmFsdWUgb2YgdGhlIGNvbW1hbmQgaW4gdGhlIGNhcGFiaWxpdHkgYWR2ZXJ0aXNlbWVudCBpbiB0aGUgZm9ybQorb2YgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBmZWF0dXJlczogIjxjb21tYW5kPj08ZmVhdHVyZSAxPiA8ZmVhdHVyZSAyPiIKKworbHMtcmVmcyB0YWtlcyBpbiB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKworICAgIHN5bXJlZnMKKwlJbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQsIHNob3cgdGhlIHVuZGVybHlpbmcgcmVmCisJcG9pbnRlZCBieSBpdCB3aGVuIHNob3dpbmcgYSBzeW1ib2xpYyByZWYuCisgICAgcGVlbAorCVNob3cgcGVlbGVkIHRhZ3MuCisgICAgcmVmLXByZWZpeCA8cHJlZml4PgorCVdoZW4gc3BlY2lmaWVkLCBvbmx5IHJlZmVyZW5jZXMgaGF2aW5nIGEgcHJlZml4IG1hdGNoaW5nIG9uZSBvZgorCXRoZSBwcm92aWRlZCBwcmVmaXhlcyBhcmUgZGlzcGxheWVkLgorCitUaGUgb3V0cHV0IG9mIGxzLXJlZnMgaXMgYXMgZm9sbG93czoKKworICAgIG91dHB1dCA9ICpyZWYKKwkgICAgIGZsdXNoLXBrdAorICAgIHJlZiA9IFBLVC1MSU5FKG9iai1pZCBTUCByZWZuYW1lICooU1AgcmVmLWF0dHJpYnV0ZSkgTEYpCisgICAgcmVmLWF0dHJpYnV0ZSA9IChzeW1yZWYgfCBwZWVsZWQpCisgICAgc3ltcmVmID0gInN5bXJlZi10YXJnZXQ6IiBzeW1yZWYtdGFyZ2V0CisgICAgcGVlbGVkID0gInBlZWxlZDoiIG9iai1pZAorCitmZXRjaAorfn5+fn4KKworYGZldGNoYCBpcyB0aGUgY29tbWFuZCB1c2VkIHRvIGZldGNoIGEgcGFja2ZpbGUgaW4gdjIuICBJdCBjYW4gYmUgbG9va2VkCithdCBhcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHYxIGZldGNoIHdoZXJlIHRoZSByZWYtYWR2ZXJ0aXNlbWVudCBpcworc3RyaXBwZWQgb3V0IChzaW5jZSB0aGUgYGxzLXJlZnNgIGNvbW1hbmQgZmlsbHMgdGhhdCByb2xlKSBhbmQgdGhlCittZXNzYWdlIGZvcm1hdCBpcyB0d2Vha2VkIHRvIGVsaW1pbmF0ZSByZWR1bmRhbmNpZXMgYW5kIHBlcm1pdCBlYXN5CithZGRpdGlvbiBvZiBmdXR1cmUgZXh0ZW5zaW9ucy4KKworQWRkaXRpb25hbCBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBiYXNlIGNvbW1hbmQgd2lsbCBiZSBhZHZlcnRpc2VkCithcyB0aGUgdmFsdWUgb2YgdGhlIGNvbW1hbmQgaW4gdGhlIGNhcGFiaWxpdHkgYWR2ZXJ0aXNlbWVudCBpbiB0aGUgZm9ybQorb2YgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBmZWF0dXJlczogIjxjb21tYW5kPj08ZmVhdHVyZSAxPiA8ZmVhdHVyZSAyPiIKKworQSBgZmV0Y2hgIHJlcXVlc3QgY2FuIHRha2UgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisKKyAgICB3YW50IDxvaWQ+CisJSW5kaWNhdGVzIHRvIHRoZSBzZXJ2ZXIgYW4gb2JqZWN0IHdoaWNoIHRoZSBjbGllbnQgd2FudHMgdG8KKwlyZXRyaWV2ZS4gIFdhbnRzIGNhbiBiZSBhbnl0aGluZyBhbmQgYXJlIG5vdCBsaW1pdGVkIHRvCisJYWR2ZXJ0aXNlZCBvYmplY3RzLgorCisgICAgaGF2ZSA8b2lkPgorCUluZGljYXRlcyB0byB0aGUgc2VydmVyIGFuIG9iamVjdCB3aGljaCB0aGUgY2xpZW50IGhhcyBsb2NhbGx5LgorCVRoaXMgYWxsb3dzIHRoZSBzZXJ2ZXIgdG8gbWFrZSBhIHBhY2tmaWxlIHdoaWNoIG9ubHkgY29udGFpbnMKKwl0aGUgb2JqZWN0cyB0aGF0IHRoZSBjbGllbnQgbmVlZHMuIE11bHRpcGxlICdoYXZlJyBsaW5lcyBjYW4gYmUKKwlzdXBwbGllZC4KKworICAgIGRvbmUKKwlJbmRpY2F0ZXMgdG8gdGhlIHNlcnZlciB0aGF0IG5lZ290aWF0aW9uIHNob3VsZCB0ZXJtaW5hdGUgKG9yCisJbm90IGV2ZW4gYmVnaW4gaWYgcGVyZm9ybWluZyBhIGNsb25lKSBhbmQgdGhhdCB0aGUgc2VydmVyIHNob3VsZAorCXVzZSB0aGUgaW5mb3JtYXRpb24gc3VwcGxpZWQgaW4gdGhlIHJlcXVlc3QgdG8gY29uc3RydWN0IHRoZQorCXBhY2tmaWxlLgorCisgICAgdGhpbi1wYWNrCisJUmVxdWVzdCB0aGF0IGEgdGhpbiBwYWNrIGJlIHNlbnQsIHdoaWNoIGlzIGEgcGFjayB3aXRoIGRlbHRhcworCXdoaWNoIHJlZmVyZW5jZSBiYXNlIG9iamVjdHMgbm90IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHBhY2sgKGJ1dAorCWFyZSBrbm93biB0byBleGlzdCBhdCB0aGUgcmVjZWl2aW5nIGVuZCkuIFRoaXMgY2FuIHJlZHVjZSB0aGUKKwluZXR3b3JrIHRyYWZmaWMgc2lnbmlmaWNhbnRseSwgYnV0IGl0IHJlcXVpcmVzIHRoZSByZWNlaXZpbmcgZW5kCisJdG8ga25vdyBob3cgdG8gInRoaWNrZW4iIHRoZXNlIHBhY2tzIGJ5IGFkZGluZyB0aGUgbWlzc2luZyBiYXNlcworCXRvIHRoZSBwYWNrLgorCisgICAgbm8tcHJvZ3Jlc3MKKwlSZXF1ZXN0IHRoYXQgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBub3JtYWxseSBiZSBzZW50IG9uCisJc2lkZS1iYW5kIGNoYW5uZWwgMiwgZHVyaW5nIHRoZSBwYWNrZmlsZSB0cmFuc2Zlciwgc2hvdWxkIG5vdCBiZQorCXNlbnQuICBIb3dldmVyLCB0aGUgc2lkZS1iYW5kIGNoYW5uZWwgMyBpcyBzdGlsbCB1c2VkIGZvciBlcnJvcgorCXJlc3BvbnNlcy4KKworICAgIGluY2x1ZGUtdGFnCisJUmVxdWVzdCB0aGF0IGFubm90YXRlZCB0YWdzIHNob3VsZCBiZSBzZW50IGlmIHRoZSBvYmplY3RzIHRoZXkKKwlwb2ludCB0byBhcmUgYmVpbmcgc2VudC4KKworICAgIG9mcy1kZWx0YQorCUluZGljYXRlIHRoYXQgdGhlIGNsaWVudCB1bmRlcnN0YW5kcyBQQUNLdjIgd2l0aCBkZWx0YSByZWZlcnJpbmcKKwl0byBpdHMgYmFzZSBieSBwb3NpdGlvbiBpbiBwYWNrIHJhdGhlciB0aGFuIGJ5IGFuIG9pZC4gIFRoYXQgaXMsCisJdGhleSBjYW4gcmVhZCBPQkpfT0ZTX0RFTFRBIChha2EgdHlwZSA2KSBpbiBhIHBhY2tmaWxlLgorCitJZiB0aGUgJ3NoYWxsb3cnIGZlYXR1cmUgaXMgYWR2ZXJ0aXNlZCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBjYW4gYmUKK2luY2x1ZGVkIGluIHRoZSBjbGllbnRzIHJlcXVlc3QgYXMgd2VsbCBhcyB0aGUgcG90ZW50aWFsIGFkZGl0aW9uIG9mIHRoZQorJ3NoYWxsb3ctaW5mbycgc2VjdGlvbiBpbiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgYXMgZXhwbGFpbmVkIGJlbG93LgorCisgICAgc2hhbGxvdyA8b2lkPgorCUEgY2xpZW50IG11c3Qgbm90aWZ5IHRoZSBzZXJ2ZXIgb2YgYWxsIGNvbW1pdHMgZm9yIHdoaWNoIGl0IG9ubHkKKwloYXMgc2hhbGxvdyBjb3BpZXMgKG1lYW5pbmcgdGhhdCBpdCBkb2Vzbid0IGhhdmUgdGhlIHBhcmVudHMgb2YKKwlhIGNvbW1pdCkgYnkgc3VwcGx5aW5nIGEgJ3NoYWxsb3cgPG9pZD4nIGxpbmUgZm9yIGVhY2ggc3VjaAorCW9iamVjdCBzbyB0aGF0IHRoZSBzZXJ2ZXIgaXMgYXdhcmUgb2YgdGhlIGxpbWl0YXRpb25zIG9mIHRoZQorCWNsaWVudCdzIGhpc3RvcnkuICBUaGlzIGlzIHNvIHRoYXQgdGhlIHNlcnZlciBpcyBhd2FyZSB0aGF0IHRoZQorCWNsaWVudCBtYXkgbm90IGhhdmUgYWxsIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gc3VjaCBjb21taXRzLgorCisgICAgZGVlcGVuIDxkZXB0aD4KKwlSZXF1ZXN0cyB0aGF0IHRoZSBmZXRjaC9jbG9uZSBzaG91bGQgYmUgc2hhbGxvdyBoYXZpbmcgYSBjb21taXQKKwlkZXB0aCBvZiA8ZGVwdGg+IHJlbGF0aXZlIHRvIHRoZSByZW1vdGUgc2lkZS4KKworICAgIGRlZXBlbi1yZWxhdGl2ZQorCVJlcXVlc3RzIHRoYXQgdGhlIHNlbWFudGljcyBvZiB0aGUgImRlZXBlbiIgY29tbWFuZCBiZSBjaGFuZ2VkCisJdG8gaW5kaWNhdGUgdGhhdCB0aGUgZGVwdGggcmVxdWVzdGVkIGlzIHJlbGF0aXZlIHRvIHRoZSBjbGllbnQncworCWN1cnJlbnQgc2hhbGxvdyBib3VuZGFyeSwgaW5zdGVhZCBvZiByZWxhdGl2ZSB0byB0aGUgcmVxdWVzdGVkCisJY29tbWl0cy4KKworICAgIGRlZXBlbi1zaW5jZSA8dGltZXN0YW1wPgorCVJlcXVlc3RzIHRoYXQgdGhlIHNoYWxsb3cgY2xvbmUvZmV0Y2ggc2hvdWxkIGJlIGN1dCBhdCBhCisJc3BlY2lmaWMgdGltZSwgaW5zdGVhZCBvZiBkZXB0aC4gIEludGVybmFsbHkgaXQncyBlcXVpdmFsZW50IHRvCisJZG9pbmcgImdpdCByZXYtbGlzdCAtLW1heC1hZ2U9PHRpbWVzdGFtcD4iLiBDYW5ub3QgYmUgdXNlZCB3aXRoCisJImRlZXBlbiIuCisKKyAgICBkZWVwZW4tbm90IDxyZXY+CisJUmVxdWVzdHMgdGhhdCB0aGUgc2hhbGxvdyBjbG9uZS9mZXRjaCBzaG91bGQgYmUgY3V0IGF0IGEKKwlzcGVjaWZpYyByZXZpc2lvbiBzcGVjaWZpZWQgYnkgJzxyZXY+JywgaW5zdGVhZCBvZiBhIGRlcHRoLgorCUludGVybmFsbHkgaXQncyBlcXVpdmFsZW50IG9mIGRvaW5nICJnaXQgcmV2LWxpc3QgLS1ub3QgPHJldj4iLgorCUNhbm5vdCBiZSB1c2VkIHdpdGggImRlZXBlbiIsIGJ1dCBjYW4gYmUgdXNlZCB3aXRoCisJImRlZXBlbi1zaW5jZSIuCisKK0lmIHRoZSAnZmlsdGVyJyBmZWF0dXJlIGlzIGFkdmVydGlzZWQsIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQgY2FuIGJlCitpbmNsdWRlZCBpbiB0aGUgY2xpZW50J3MgcmVxdWVzdDoKKworICAgIGZpbHRlciA8ZmlsdGVyLXNwZWM+CisJUmVxdWVzdCB0aGF0IHZhcmlvdXMgb2JqZWN0cyBmcm9tIHRoZSBwYWNrZmlsZSBiZSBvbWl0dGVkCisJdXNpbmcgb25lIG9mIHNldmVyYWwgZmlsdGVyaW5nIHRlY2huaXF1ZXMuIFRoZXNlIGFyZSBpbnRlbmRlZAorCWZvciB1c2Ugd2l0aCBwYXJ0aWFsIGNsb25lIGFuZCBwYXJ0aWFsIGZldGNoIG9wZXJhdGlvbnMuIFNlZQorCWByZXYtbGlzdGAgZm9yIHBvc3NpYmxlICJmaWx0ZXItc3BlYyIgdmFsdWVzLiBXaGVuIGNvbW11bmljYXRpbmcKKwl3aXRoIG90aGVyIHByb2Nlc3Nlcywgc2VuZGVycyBTSE9VTEQgdHJhbnNsYXRlIHNjYWxlZCBpbnRlZ2VycworCShlLmcuICIxayIpIGludG8gYSBmdWxseS1leHBhbmRlZCBmb3JtIChlLmcuICIxMDI0IikgdG8gYWlkCisJaW50ZXJvcGVyYWJpbGl0eSB3aXRoIG9sZGVyIHJlY2VpdmVycyB0aGF0IG1heSBub3QgdW5kZXJzdGFuZAorCW5ld2x5LWludmVudGVkIHNjYWxpbmcgc3VmZml4ZXMuIEhvd2V2ZXIsIHJlY2VpdmVycyBTSE9VTEQKKwlhY2NlcHQgdGhlIGZvbGxvd2luZyBzdWZmaXhlczogJ2snLCAnbScsIGFuZCAnZycgZm9yIDEwMjQsCisJMTA0ODU3NiwgYW5kIDEwNzM3NDE4MjQsIHJlc3BlY3RpdmVseS4KKworSWYgdGhlICdyZWYtaW4td2FudCcgZmVhdHVyZSBpcyBhZHZlcnRpc2VkLCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50IGNhbgorYmUgaW5jbHVkZWQgaW4gdGhlIGNsaWVudCdzIHJlcXVlc3QgYXMgd2VsbCBhcyB0aGUgcG90ZW50aWFsIGFkZGl0aW9uIG9mCit0aGUgJ3dhbnRlZC1yZWZzJyBzZWN0aW9uIGluIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBhcyBleHBsYWluZWQgYmVsb3cuCisKKyAgICB3YW50LXJlZiA8cmVmPgorCUluZGljYXRlcyB0byB0aGUgc2VydmVyIHRoYXQgdGhlIGNsaWVudCB3YW50cyB0byByZXRyaWV2ZSBhCisJcGFydGljdWxhciByZWYsIHdoZXJlIDxyZWY+IGlzIHRoZSBmdWxsIG5hbWUgb2YgYSByZWYgb24gdGhlCisJc2VydmVyLgorCitJZiB0aGUgJ3NpZGViYW5kLWFsbCcgZmVhdHVyZSBpcyBhZHZlcnRpc2VkLCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50IGNhbiBiZQoraW5jbHVkZWQgaW4gdGhlIGNsaWVudCdzIHJlcXVlc3Q6CisKKyAgICBzaWRlYmFuZC1hbGwKKwlJbnN0cnVjdCB0aGUgc2VydmVyIHRvIHNlbmQgdGhlIHdob2xlIHJlc3BvbnNlIG11bHRpcGxleGVkLCBub3QganVzdAorCXRoZSBwYWNrZmlsZSBzZWN0aW9uLiBBbGwgbm9uLWZsdXNoIGFuZCBub24tZGVsaW0gUEtULUxJTkUgaW4gdGhlCisJcmVzcG9uc2UgKG5vdCBvbmx5IGluIHRoZSBwYWNrZmlsZSBzZWN0aW9uKSB3aWxsIHRoZW4gc3RhcnQgd2l0aCBhIGJ5dGUKKwlpbmRpY2F0aW5nIGl0cyBzaWRlYmFuZCAoMSwgMiwgb3IgMyksIGFuZCB0aGUgc2VydmVyIG1heSBzZW5kICIwMDA1XDIiCisJKGEgUEtULUxJTkUgb2Ygc2lkZWJhbmQgMiB3aXRoIG5vIHBheWxvYWQpIGFzIGEga2VlcGFsaXZlIHBhY2tldC4KKworVGhlIHJlc3BvbnNlIG9mIGBmZXRjaGAgaXMgYnJva2VuIGludG8gYSBudW1iZXIgb2Ygc2VjdGlvbnMgc2VwYXJhdGVkIGJ5CitkZWxpbWl0ZXIgcGFja2V0cyAoMDAwMSksIHdpdGggZWFjaCBzZWN0aW9uIGJlZ2lubmluZyB3aXRoIGl0cyBzZWN0aW9uCitoZWFkZXIuCisKKyAgICBvdXRwdXQgPSAqc2VjdGlvbgorICAgIHNlY3Rpb24gPSAoYWNrbm93bGVkZ21lbnRzIHwgc2hhbGxvdy1pbmZvIHwgd2FudGVkLXJlZnMgfCBwYWNrZmlsZSkKKwkgICAgICAoZmx1c2gtcGt0IHwgZGVsaW0tcGt0KQorCisgICAgYWNrbm93bGVkZ21lbnRzID0gUEtULUxJTkUoImFja25vd2xlZGdtZW50cyIgTEYpCisJCSAgICAgIChuYWsgfCAqYWNrKQorCQkgICAgICAocmVhZHkpCisgICAgcmVhZHkgPSBQS1QtTElORSgicmVhZHkiIExGKQorICAgIG5hayA9IFBLVC1MSU5FKCJOQUsiIExGKQorICAgIGFjayA9IFBLVC1MSU5FKCJBQ0siIFNQIG9iai1pZCBMRikKKworICAgIHNoYWxsb3ctaW5mbyA9IFBLVC1MSU5FKCJzaGFsbG93LWluZm8iIExGKQorCQkgICAqUEtULUxJTkUoKHNoYWxsb3cgfCB1bnNoYWxsb3cpIExGKQorICAgIHNoYWxsb3cgPSAic2hhbGxvdyIgU1Agb2JqLWlkCisgICAgdW5zaGFsbG93ID0gInVuc2hhbGxvdyIgU1Agb2JqLWlkCisKKyAgICB3YW50ZWQtcmVmcyA9IFBLVC1MSU5FKCJ3YW50ZWQtcmVmcyIgTEYpCisJCSAgKlBLVC1MSU5FKHdhbnRlZC1yZWYgTEYpCisgICAgd2FudGVkLXJlZiA9IG9iai1pZCBTUCByZWZuYW1lCisKKyAgICBwYWNrZmlsZSA9IFBLVC1MSU5FKCJwYWNrZmlsZSIgTEYpCisJICAgICAgICpQS1QtTElORSgleDAxLTAzIColeDAwLWZmKQorCisgICAgYWNrbm93bGVkZ21lbnRzIHNlY3Rpb24KKwkqIElmIHRoZSBjbGllbnQgZGV0ZXJtaW5lcyB0aGF0IGl0IGlzIGZpbmlzaGVkIHdpdGggbmVnb3RpYXRpb25zCisJICBieSBzZW5kaW5nIGEgImRvbmUiIGxpbmUsIHRoZSBhY2tub3dsZWRnbWVudHMgc2VjdGlvbnMgTVVTVCBiZQorCSAgb21pdHRlZCBmcm9tIHRoZSBzZXJ2ZXIncyByZXNwb25zZS4KKworCSogQWx3YXlzIGJlZ2lucyB3aXRoIHRoZSBzZWN0aW9uIGhlYWRlciAiYWNrbm93bGVkZ21lbnRzIgorCisJKiBUaGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoICJOQUsiIGlmIG5vbmUgb2YgdGhlIG9iamVjdCBpZHMgc2VudAorCSAgYXMgaGF2ZSBsaW5lcyB3ZXJlIGNvbW1vbi4KKworCSogVGhlIHNlcnZlciB3aWxsIHJlc3BvbmQgd2l0aCAiQUNLIG9iai1pZCIgZm9yIGFsbCBvZiB0aGUKKwkgIG9iamVjdCBpZHMgc2VudCBhcyBoYXZlIGxpbmVzIHdoaWNoIGFyZSBjb21tb24uCisKKwkqIEEgcmVzcG9uc2UgY2Fubm90IGhhdmUgYm90aCAiQUNLIiBsaW5lcyBhcyB3ZWxsIGFzIGEgIk5BSyIKKwkgIGxpbmUuCisKKwkqIFRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kIHdpdGggYSAicmVhZHkiIGxpbmUgaW5kaWNhdGluZyB0aGF0CisJICB0aGUgc2VydmVyIGhhcyBmb3VuZCBhbiBhY2NlcHRhYmxlIGNvbW1vbiBiYXNlIGFuZCBpcyByZWFkeSB0bworCSAgbWFrZSBhbmQgc2VuZCBhIHBhY2tmaWxlICh3aGljaCB3aWxsIGJlIGZvdW5kIGluIHRoZSBwYWNrZmlsZQorCSAgc2VjdGlvbiBvZiB0aGUgc2FtZSByZXNwb25zZSkKKworCSogSWYgdGhlIHNlcnZlciBoYXMgZm91bmQgYSBzdWl0YWJsZSBjdXQgcG9pbnQgYW5kIGhhcyBkZWNpZGVkCisJICB0byBzZW5kIGEgInJlYWR5IiBsaW5lLCB0aGVuIHRoZSBzZXJ2ZXIgY2FuIGRlY2lkZSB0byAoYXMgYW4KKwkgIG9wdGltaXphdGlvbikgb21pdCBhbnkgIkFDSyIgbGluZXMgaXQgd291bGQgaGF2ZSBzZW50IGR1cmluZworCSAgaXRzIHJlc3BvbnNlLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBzZXJ2ZXIgd2lsbCBoYXZlIGFscmVhZHkKKwkgIGRldGVybWluZWQgdGhlIG9iamVjdHMgaXQgcGxhbnMgdG8gc2VuZCB0byB0aGUgY2xpZW50IGFuZCBubworCSAgZnVydGhlciBuZWdvdGlhdGlvbiBpcyBuZWVkZWQuCisKKyAgICBzaGFsbG93LWluZm8gc2VjdGlvbgorCSogSWYgdGhlIGNsaWVudCBoYXMgcmVxdWVzdGVkIGEgc2hhbGxvdyBmZXRjaC9jbG9uZSwgYSBzaGFsbG93CisJICBjbGllbnQgcmVxdWVzdHMgYSBmZXRjaCBvciB0aGUgc2VydmVyIGlzIHNoYWxsb3cgdGhlbiB0aGUKKwkgIHNlcnZlcidzIHJlc3BvbnNlIG1heSBpbmNsdWRlIGEgc2hhbGxvdy1pbmZvIHNlY3Rpb24uICBUaGUKKwkgIHNoYWxsb3ctaW5mbyBzZWN0aW9uIHdpbGwgYmUgaW5jbHVkZWQgaWYgKGR1ZSB0byBvbmUgb2YgdGhlCisJICBhYm92ZSBjb25kaXRpb25zKSB0aGUgc2VydmVyIG5lZWRzIHRvIGluZm9ybSB0aGUgY2xpZW50IG9mIGFueQorCSAgc2hhbGxvdyBib3VuZGFyaWVzIG9yIGFkanVzdG1lbnRzIHRvIHRoZSBjbGllbnRzIGFscmVhZHkKKwkgIGV4aXN0aW5nIHNoYWxsb3cgYm91bmRhcmllcy4KKworCSogQWx3YXlzIGJlZ2lucyB3aXRoIHRoZSBzZWN0aW9uIGhlYWRlciAic2hhbGxvdy1pbmZvIgorCisJKiBJZiBhIHBvc2l0aXZlIGRlcHRoIGlzIHJlcXVlc3RlZCwgdGhlIHNlcnZlciB3aWxsIGNvbXB1dGUgdGhlCisJICBzZXQgb2YgY29tbWl0cyB3aGljaCBhcmUgbm8gZGVlcGVyIHRoYW4gdGhlIGRlc2lyZWQgZGVwdGguCisKKwkqIFRoZSBzZXJ2ZXIgc2VuZHMgYSAic2hhbGxvdyBvYmotaWQiIGxpbmUgZm9yIGVhY2ggY29tbWl0IHdob3NlCisJICBwYXJlbnRzIHdpbGwgbm90IGJlIHNlbnQgaW4gdGhlIGZvbGxvd2luZyBwYWNrZmlsZS4KKworCSogVGhlIHNlcnZlciBzZW5kcyBhbiAidW5zaGFsbG93IG9iai1pZCIgbGluZSBmb3IgZWFjaCBjb21taXQKKwkgIHdoaWNoIHRoZSBjbGllbnQgaGFzIGluZGljYXRlZCBpcyBzaGFsbG93LCBidXQgaXMgbm8gbG9uZ2VyCisJICBzaGFsbG93IGFzIGEgcmVzdWx0IG9mIHRoZSBmZXRjaCAoZHVlIHRvIGl0cyBwYXJlbnRzIGJlaW5nCisJICBzZW50IGluIHRoZSBmb2xsb3dpbmcgcGFja2ZpbGUpLgorCisJKiBUaGUgc2VydmVyIE1VU1QgTk9UIHNlbmQgYW55ICJ1bnNoYWxsb3ciIGxpbmVzIGZvciBhbnl0aGluZworCSAgd2hpY2ggdGhlIGNsaWVudCBoYXMgbm90IGluZGljYXRlZCB3YXMgc2hhbGxvdyBhcyBhIHBhcnQgb2YKKwkgIGl0cyByZXF1ZXN0LgorCisJKiBUaGlzIHNlY3Rpb24gaXMgb25seSBpbmNsdWRlZCBpZiBhIHBhY2tmaWxlIHNlY3Rpb24gaXMgYWxzbworCSAgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlLgorCisgICAgd2FudGVkLXJlZnMgc2VjdGlvbgorCSogVGhpcyBzZWN0aW9uIGlzIG9ubHkgaW5jbHVkZWQgaWYgdGhlIGNsaWVudCBoYXMgcmVxdWVzdGVkIGEKKwkgIHJlZiB1c2luZyBhICd3YW50LXJlZicgbGluZSBhbmQgaWYgYSBwYWNrZmlsZSBzZWN0aW9uIGlzIGFsc28KKwkgIGluY2x1ZGVkIGluIHRoZSByZXNwb25zZS4KKworCSogQWx3YXlzIGJlZ2lucyB3aXRoIHRoZSBzZWN0aW9uIGhlYWRlciAid2FudGVkLXJlZnMiLgorCisJKiBUaGUgc2VydmVyIHdpbGwgc2VuZCBhIHJlZiBsaXN0aW5nICgiPG9pZD4gPHJlZm5hbWU+IikgZm9yCisJICBlYWNoIHJlZmVyZW5jZSByZXF1ZXN0ZWQgdXNpbmcgJ3dhbnQtcmVmJyBsaW5lcy4KKworCSogVGhlIHNlcnZlciBNVVNUIE5PVCBzZW5kIGFueSByZWZzIHdoaWNoIHdlcmUgbm90IHJlcXVlc3RlZAorCSAgdXNpbmcgJ3dhbnQtcmVmJyBsaW5lcy4KKworICAgIHBhY2tmaWxlIHNlY3Rpb24KKwkqIFRoaXMgc2VjdGlvbiBpcyBvbmx5IGluY2x1ZGVkIGlmIHRoZSBjbGllbnQgaGFzIHNlbnQgJ3dhbnQnCisJICBsaW5lcyBpbiBpdHMgcmVxdWVzdCBhbmQgZWl0aGVyIHJlcXVlc3RlZCB0aGF0IG5vIG1vcmUKKwkgIG5lZ290aWF0aW9uIGJlIGRvbmUgYnkgc2VuZGluZyAnZG9uZScgb3IgaWYgdGhlIHNlcnZlciBoYXMKKwkgIGRlY2lkZWQgaXQgaGFzIGZvdW5kIGEgc3VmZmljaWVudCBjdXQgcG9pbnQgdG8gcHJvZHVjZSBhCisJICBwYWNrZmlsZS4KKworCSogQWx3YXlzIGJlZ2lucyB3aXRoIHRoZSBzZWN0aW9uIGhlYWRlciAicGFja2ZpbGUiCisKKwkqIFRoZSB0cmFuc21pc3Npb24gb2YgdGhlIHBhY2tmaWxlIGJlZ2lucyBpbW1lZGlhdGVseSBhZnRlciB0aGUKKwkgIHNlY3Rpb24gaGVhZGVyCisKKwkqIFRoZSBkYXRhIHRyYW5zZmVyIG9mIHRoZSBwYWNrZmlsZSBpcyBhbHdheXMgbXVsdGlwbGV4ZWQsIHVzaW5nCisJICB0aGUgc2FtZSBzZW1hbnRpY3Mgb2YgdGhlICdzaWRlLWJhbmQtNjRrJyBjYXBhYmlsaXR5IGZyb20KKwkgIHByb3RvY29sIHZlcnNpb24gMS4gIFRoaXMgbWVhbnMgdGhhdCBlYWNoIHBhY2tldCwgZHVyaW5nIHRoZQorCSAgcGFja2ZpbGUgZGF0YSBzdHJlYW0sIGlzIG1hZGUgdXAgb2YgYSBsZWFkaW5nIDQtYnl0ZSBwa3QtbGluZQorCSAgbGVuZ3RoICh0eXBpY2FsIG9mIHRoZSBwa3QtbGluZSBmb3JtYXQpLCBmb2xsb3dlZCBieSBhIDEtYnl0ZQorCSAgc3RyZWFtIGNvZGUsIGZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgZGF0YS4KKworCSAgVGhlIHN0cmVhbSBjb2RlIGNhbiBiZSBvbmUgb2Y6CisJCTEgLSBwYWNrIGRhdGEKKwkJMiAtIHByb2dyZXNzIG1lc3NhZ2VzCisJCTMgLSBmYXRhbCBlcnJvciBtZXNzYWdlIGp1c3QgYmVmb3JlIHN0cmVhbSBhYm9ydHMKKworc2VydmVyLW9wdGlvbgorfn5+fn5+fn5+fn5+fgorCitJZiBhZHZlcnRpc2VkLCBpbmRpY2F0ZXMgdGhhdCBhbnkgbnVtYmVyIG9mIHNlcnZlciBzcGVjaWZpYyBvcHRpb25zIGNhbiBiZQoraW5jbHVkZWQgaW4gYSByZXF1ZXN0LiAgVGhpcyBpcyBkb25lIGJ5IHNlbmRpbmcgZWFjaCBvcHRpb24gYXMgYQorInNlcnZlci1vcHRpb249PG9wdGlvbj4iIGNhcGFiaWxpdHkgbGluZSBpbiB0aGUgY2FwYWJpbGl0eS1saXN0IHNlY3Rpb24gb2YKK2EgcmVxdWVzdC4KKworVGhlIHByb3ZpZGVkIG9wdGlvbnMgbXVzdCBub3QgY29udGFpbiBhIE5VTCBvciBMRiBjaGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkYTRiYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JhY3ktZ2l0LnR4dApAQCAtMCwwICsxLDIwMSBAQAorVXNlIG9mIGluZGV4IGFuZCBSYWN5IEdpdCBwcm9ibGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja2dyb3VuZAorLS0tLS0tLS0tLQorCitUaGUgaW5kZXggaXMgb25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBkYXRhIHN0cnVjdHVyZXMgaW4gR2l0LgorSXQgcmVwcmVzZW50cyBhIHZpcnR1YWwgd29ya2luZyB0cmVlIHN0YXRlIGJ5IHJlY29yZGluZyBsaXN0IG9mCitwYXRocyBhbmQgdGhlaXIgb2JqZWN0IG5hbWVzIGFuZCBzZXJ2ZXMgYXMgYSBzdGFnaW5nIGFyZWEgdG8KK3dyaXRlIG91dCB0aGUgbmV4dCB0cmVlIG9iamVjdCB0byBiZSBjb21taXR0ZWQuICBUaGUgc3RhdGUgaXMKKyJ2aXJ0dWFsIiBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvLCBhbmQKK29mdGVuIGRvZXMgbm90LCBtYXRjaCB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworVGhlcmUgYXJlIGNhc2VzIEdpdCBuZWVkcyB0byBleGFtaW5lIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZQordmlydHVhbCB3b3JraW5nIHRyZWUgc3RhdGUgaW4gdGhlIGluZGV4IGFuZCB0aGUgZmlsZXMgaW4gdGhlCit3b3JraW5nIHRyZWUuICBUaGUgbW9zdCBvYnZpb3VzIGNhc2UgaXMgd2hlbiB0aGUgdXNlciBhc2tzIGBnaXQKK2RpZmZgIChvciBpdHMgbG93IGxldmVsIGltcGxlbWVudGF0aW9uLCBgZ2l0IGRpZmYtZmlsZXNgKSBvcgorYGdpdC1scy1maWxlcyAtLW1vZGlmaWVkYC4gIEluIGFkZGl0aW9uLCBHaXQgaW50ZXJuYWxseSBjaGVja3MKK2lmIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFyZSBkaWZmZXJlbnQgZnJvbSB3aGF0IGFyZQorcmVjb3JkZWQgaW4gdGhlIGluZGV4IHRvIGF2b2lkIHN0b21waW5nIG9uIGxvY2FsIGNoYW5nZXMgaW4gdGhlbQorZHVyaW5nIHBhdGNoIGFwcGxpY2F0aW9uLCBzd2l0Y2hpbmcgYnJhbmNoZXMsIGFuZCBtZXJnaW5nLgorCitJbiBvcmRlciB0byBzcGVlZCB1cCB0aGlzIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgZmlsZXMgaW4gdGhlCit3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBlbnRyaWVzLCB0aGUgaW5kZXggZW50cmllcyByZWNvcmQgdGhlCitpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBmaWxlc3lzdGVtIHZpYSBgbHN0YXQoMilgIHN5c3RlbQorY2FsbCB3aGVuIHRoZXkgd2VyZSBsYXN0IHVwZGF0ZWQuICBXaGVuIGNoZWNraW5nIGlmIHRoZXkgZGlmZmVyLAorR2l0IGZpcnN0IHJ1bnMgYGxzdGF0KDIpYCBvbiB0aGUgZmlsZXMgYW5kIGNvbXBhcmVzIHRoZSByZXN1bHQKK3dpdGggdGhpcyBpbmZvcm1hdGlvbiAodGhpcyBpcyB3aGF0IHdhcyBvcmlnaW5hbGx5IGRvbmUgYnkgdGhlCitgY2VfbWF0Y2hfc3RhdCgpYCBmdW5jdGlvbiwgYnV0IHRoZSBjdXJyZW50IGNvZGUgZG9lcyBpdCBpbgorYGNlX21hdGNoX3N0YXRfYmFzaWMoKWAgZnVuY3Rpb24pLiAgSWYgc29tZSBvZiB0aGVzZSAiY2FjaGVkCitzdGF0IGluZm9ybWF0aW9uIiBmaWVsZHMgZG8gbm90IG1hdGNoLCBHaXQgY2FuIHRlbGwgdGhhdCB0aGUKK2ZpbGVzIGFyZSBtb2RpZmllZCB3aXRob3V0IGV2ZW4gbG9va2luZyBhdCB0aGVpciBjb250ZW50cy4KKworTm90ZTogbm90IGFsbCBtZW1iZXJzIGluIGBzdHJ1Y3Qgc3RhdGAgb2J0YWluZWQgdmlhIGBsc3RhdCgyKWAKK2FyZSB1c2VkIGZvciB0aGlzIGNvbXBhcmlzb24uICBGb3IgZXhhbXBsZSwgYHN0X2F0aW1lYCBvYnZpb3VzbHkKK2lzIG5vdCB1c2VmdWwuICBDdXJyZW50bHksIEdpdCBjb21wYXJlcyB0aGUgZmlsZSB0eXBlIChyZWd1bGFyCitmaWxlcyB2cyBzeW1ib2xpYyBsaW5rcykgYW5kIGV4ZWN1dGFibGUgYml0cyAob25seSBmb3IgcmVndWxhcgorZmlsZXMpIGZyb20gYHN0X21vZGVgIG1lbWJlciwgYHN0X210aW1lYCBhbmQgYHN0X2N0aW1lYAordGltZXN0YW1wcywgYHN0X3VpZGAsIGBzdF9naWRgLCBgc3RfaW5vYCwgYW5kIGBzdF9zaXplYCBtZW1iZXJzLgorV2l0aCBhIGBVU0VfU1RERVZgIGNvbXBpbGUtdGltZSBvcHRpb24sIGBzdF9kZXZgIGlzIGFsc28KK2NvbXBhcmVkLCBidXQgdGhpcyBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhpcyBtZW1iZXIKK2lzIG5vdCBzdGFibGUgb24gbmV0d29yayBmaWxlc3lzdGVtcy4gIFdpdGggYFVTRV9OU0VDYAorY29tcGlsZS10aW1lIG9wdGlvbiwgYHN0X210aW0udHZfbnNlY2AgYW5kIGBzdF9jdGltLnR2X25zZWNgCittZW1iZXJzIGFyZSBhbHNvIGNvbXBhcmVkLiBPbiBMaW51eCwgdGhpcyBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0CitiZWNhdXNlIGluLWNvcmUgdGltZXN0YW1wcyBjYW4gaGF2ZSBmaW5lciBncmFudWxhcml0eSB0aGFuCitvbi1kaXNrIHRpbWVzdGFtcHMsIHJlc3VsdGluZyBpbiBtZWFuaW5nbGVzcyBjaGFuZ2VzIHdoZW4gYW4KK2lub2RlIGlzIGV2aWN0ZWQgZnJvbSB0aGUgaW5vZGUgY2FjaGUuICBTZWUgY29tbWl0IDhjZTEzYjAKK29mIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90Z2x4L2hpc3RvcnkuZ2l0CisoW1BBVENIXSBTeW5jIGluIGNvcmUgdGltZSBncmFudWxhcml0eSB3aXRoIGZpbGVzeXN0ZW1zLAorMjAwNS0wMS0wNCkuIFRoaXMgcGF0Y2ggaXMgaW5jbHVkZWQgaW4ga2VybmVsIDIuNi4xMSBhbmQgbmV3ZXIsIGJ1dAorb25seSBmaXhlcyB0aGUgaXNzdWUgZm9yIGZpbGUgc3lzdGVtcyB3aXRoIGV4YWN0bHkgMSBucyBvciAxIHMKK3Jlc29sdXRpb24uIE90aGVyIGZpbGUgc3lzdGVtcyBhcmUgc3RpbGwgYnJva2VuIGluIGN1cnJlbnQgTGludXgKK2tlcm5lbHMgKGUuZy4gQ0VQSCwgQ0lGUywgTlRGUywgVURGKSwgc2VlCitodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzU1NzcyNDBELjcwMjAzMDlAZ21haWwuY29tLworCitSYWN5IEdpdAorLS0tLS0tLS0KKworVGhlcmUgaXMgb25lIHNsaWdodCBwcm9ibGVtIHdpdGggdGhlIG9wdGltaXphdGlvbiBiYXNlZCBvbiB0aGUKK2NhY2hlZCBzdGF0IGluZm9ybWF0aW9uLiAgQ29uc2lkZXIgdGhpcyBzZXF1ZW5jZToKKworICA6IG1vZGlmeSAnZm9vJworICAkIGdpdCB1cGRhdGUtaW5kZXggJ2ZvbycKKyAgOiBtb2RpZnkgJ2ZvbycgYWdhaW4sIGluLXBsYWNlLCB3aXRob3V0IGNoYW5naW5nIGl0cyBzaXplCisKK1RoZSBmaXJzdCBgdXBkYXRlLWluZGV4YCBjb21wdXRlcyB0aGUgb2JqZWN0IG5hbWUgb2YgdGhlCitjb250ZW50cyBvZiBmaWxlIGBmb29gIGFuZCB1cGRhdGVzIHRoZSBpbmRleCBlbnRyeSBmb3IgYGZvb2AKK2Fsb25nIHdpdGggdGhlIGBzdHJ1Y3Qgc3RhdGAgaW5mb3JtYXRpb24uICBJZiB0aGUgbW9kaWZpY2F0aW9uCit0aGF0IGZvbGxvd3MgaXQgaGFwcGVucyB2ZXJ5IGZhc3Qgc28gdGhhdCB0aGUgZmlsZSdzIGBzdF9tdGltZWAKK3RpbWVzdGFtcCBkb2VzIG5vdCBjaGFuZ2UsIGFmdGVyIHRoaXMgc2VxdWVuY2UsIHRoZSBjYWNoZWQgc3RhdAoraW5mb3JtYXRpb24gdGhlIGluZGV4IGVudHJ5IHJlY29yZHMgc3RpbGwgZXhhY3RseSBtYXRjaCB3aGF0IHlvdQord291bGQgc2VlIGluIHRoZSBmaWxlc3lzdGVtLCBldmVuIHRob3VnaCB0aGUgZmlsZSBgZm9vYCBpcyBub3cKK2RpZmZlcmVudC4KK1RoaXMgd2F5LCBHaXQgY2FuIGluY29ycmVjdGx5IHRoaW5rIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUKK2FyZSB1bm1vZGlmaWVkIGV2ZW4gdGhvdWdoIHRoZXkgYWN0dWFsbHkgYXJlLiAgVGhpcyBpcyBjYWxsZWQKK3RoZSAicmFjeSBHaXQiIHByb2JsZW0gKGRpc2NvdmVyZWQgYnkgUGFza3kpLCBhbmQgdGhlIGVudHJpZXMKK3RoYXQgYXBwZWFyIGNsZWFuIHdoZW4gdGhleSBtYXkgbm90IGJlIGJlY2F1c2Ugb2YgdGhpcyBwcm9ibGVtCithcmUgY2FsbGVkICJyYWNpbHkgY2xlYW4iLgorCitUbyBhdm9pZCB0aGlzIHByb2JsZW0sIEdpdCBkb2VzIHR3byB0aGluZ3M6CisKKy4gV2hlbiB0aGUgY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24gc2F5cyB0aGUgZmlsZSBoYXMgbm90IGJlZW4KKyAgbW9kaWZpZWQsIGFuZCB0aGUgYHN0X210aW1lYCBpcyB0aGUgc2FtZSBhcyAob3IgbmV3ZXIgdGhhbikKKyAgdGhlIHRpbWVzdGFtcCBvZiB0aGUgaW5kZXggZmlsZSBpdHNlbGYgKHdoaWNoIGlzIHRoZSB0aW1lIGBnaXQKKyAgdXBkYXRlLWluZGV4IGZvb2AgZmluaXNoZWQgcnVubmluZyBpbiB0aGUgYWJvdmUgZXhhbXBsZSksIGl0CisgIGFsc28gY29tcGFyZXMgdGhlIGNvbnRlbnRzIHdpdGggdGhlIG9iamVjdCByZWdpc3RlcmVkIGluIHRoZQorICBpbmRleCBlbnRyeSB0byBtYWtlIHN1cmUgdGhleSBtYXRjaC4KKworLiBXaGVuIHRoZSBpbmRleCBmaWxlIGlzIHVwZGF0ZWQgdGhhdCBjb250YWlucyByYWNpbHkgY2xlYW4KKyAgZW50cmllcywgY2FjaGVkIGBzdF9zaXplYCBpbmZvcm1hdGlvbiBpcyB0cnVuY2F0ZWQgdG8gemVybworICBiZWZvcmUgd3JpdGluZyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBpbmRleCBmaWxlLgorCitCZWNhdXNlIHRoZSBpbmRleCBmaWxlIGl0c2VsZiBpcyB3cml0dGVuIGFmdGVyIGNvbGxlY3RpbmcgYWxsCit0aGUgc3RhdCBpbmZvcm1hdGlvbiBmcm9tIHVwZGF0ZWQgcGF0aHMsIGBzdF9tdGltZWAgdGltZXN0YW1wIG9mCitpdCBpcyB1c3VhbGx5IHRoZSBzYW1lIGFzIG9yIG5ld2VyIHRoYW4gYW55IG9mIHRoZSBwYXRocyB0aGUKK2luZGV4IGNvbnRhaW5zLiAgQW5kIG5vIG1hdHRlciBob3cgcXVpY2sgdGhlIG1vZGlmaWNhdGlvbiB0aGF0Citmb2xsb3dzIGBnaXQgdXBkYXRlLWluZGV4IGZvb2AgZmluaXNoZXMsIHRoZSByZXN1bHRpbmcKK2BzdF9tdGltZWAgdGltZXN0YW1wIG9uIGBmb29gIGNhbm5vdCBnZXQgYSB2YWx1ZSBlYXJsaWVyCit0aGFuIHRoZSBpbmRleCBmaWxlLiAgVGhlcmVmb3JlLCBpbmRleCBlbnRyaWVzIHRoYXQgY2FuIGJlCityYWNpbHkgY2xlYW4gYXJlIGxpbWl0ZWQgdG8gdGhlIG9uZXMgdGhhdCBoYXZlIHRoZSBzYW1lCit0aW1lc3RhbXAgYXMgdGhlIGluZGV4IGZpbGUgaXRzZWxmLgorCitUaGUgY2FsbGVycyB0aGF0IHdhbnQgdG8gY2hlY2sgaWYgYW4gaW5kZXggZW50cnkgbWF0Y2hlcyB0aGUKK2NvcnJlc3BvbmRpbmcgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlIGNvbnRpbnVlIHRvIGNhbGwKK2BjZV9tYXRjaF9zdGF0KClgLCBidXQgd2l0aCB0aGlzIGNoYW5nZSwgYGNlX21hdGNoX3N0YXQoKWAgdXNlcworYGNlX21vZGlmaWVkX2NoZWNrX2ZzKClgIHRvIHNlZSBpZiByYWNpbHkgY2xlYW4gb25lcyBhcmUKK2FjdHVhbGx5IGNsZWFuIGFmdGVyIGNvbXBhcmluZyB0aGUgY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24gdXNpbmcKK2BjZV9tYXRjaF9zdGF0X2Jhc2ljKClgLgorCitUaGUgcHJvYmxlbSB0aGUgbGF0dGVyIHNvbHZlcyBpcyB0aGlzIHNlcXVlbmNlOgorCisgICQgZ2l0IHVwZGF0ZS1pbmRleCAnZm9vJworICA6IG1vZGlmeSAnZm9vJyBpbi1wbGFjZSB3aXRob3V0IGNoYW5naW5nIGl0cyBzaXplCisgIDogd2FpdCBmb3IgZW5vdWdoIHRpbWUKKyAgJCBnaXQgdXBkYXRlLWluZGV4ICdiYXInCisKK1dpdGhvdXQgdGhlIGxhdHRlciwgdGhlIHRpbWVzdGFtcCBvZiB0aGUgaW5kZXggZmlsZSBnZXRzIGEgbmV3ZXIKK3ZhbHVlLCBhbmQgZmFsc2VseSBjbGVhbiBlbnRyeSBgZm9vYCB3b3VsZCBub3QgYmUgY2F1Z2h0IGJ5IHRoZQordGltZXN0YW1wIGNvbXBhcmlzb24gY2hlY2sgZG9uZSB3aXRoIHRoZSBmb3JtZXIgbG9naWMgYW55bW9yZS4KK1RoZSBsYXR0ZXIgbWFrZXMgc3VyZSB0aGF0IHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbiBmb3IgYGZvb2AKK3dvdWxkIG5ldmVyIG1hdGNoIHdpdGggdGhlIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgc28gbGF0ZXIKK2NoZWNrcyBieSBgY2VfbWF0Y2hfc3RhdF9iYXNpYygpYCB3b3VsZCByZXBvcnQgdGhhdCB0aGUgaW5kZXggZW50cnkKK2RvZXMgbm90IG1hdGNoIHRoZSBmaWxlIGFuZCBHaXQgZG9lcyBub3QgaGF2ZSB0byBmYWxsIGJhY2sgb24gbW9yZQorZXhwZW5zaXZlIGBjZV9tb2RpZmllZF9jaGVja19mcygpYC4KKworCitSdW50aW1lIHBlbmFsdHkKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgcnVudGltZSBwZW5hbHR5IG9mIGZhbGxpbmcgYmFjayB0byBgY2VfbW9kaWZpZWRfY2hlY2tfZnMoKWAKK2Zyb20gYGNlX21hdGNoX3N0YXQoKWAgY2FuIGJlIHZlcnkgZXhwZW5zaXZlIHdoZW4gdGhlcmUgYXJlIG1hbnkKK3JhY2lseSBjbGVhbiBlbnRyaWVzLiAgQW4gb2J2aW91cyB3YXkgdG8gYXJ0aWZpY2lhbGx5IGNyZWF0ZQordGhpcyBzaXR1YXRpb24gaXMgdG8gZ2l2ZSB0aGUgc2FtZSB0aW1lc3RhbXAgdG8gYWxsIHRoZSBmaWxlcyBpbgordGhlIHdvcmtpbmcgdHJlZSBpbiBhIGxhcmdlIHByb2plY3QsIHJ1biBgZ2l0IHVwZGF0ZS1pbmRleGAgb24KK3RoZW0sIGFuZCBnaXZlIHRoZSBzYW1lIHRpbWVzdGFtcCB0byB0aGUgaW5kZXggZmlsZToKKworICAkIGRhdGUgPi5kYXRlc3RhbXAKKyAgJCBnaXQgbHMtZmlsZXMgfCB4YXJncyB0b3VjaCAtciAuZGF0ZXN0YW1wCisgICQgZ2l0IGxzLWZpbGVzIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLXN0ZGluCisgICQgdG91Y2ggLXIgLmRhdGVzdGFtcCAuZ2l0L2luZGV4CisKK1RoaXMgd2lsbCBtYWtlIGFsbCBpbmRleCBlbnRyaWVzIHJhY2lseSBjbGVhbi4gIFRoZSBsaW51eCBwcm9qZWN0LCBmb3IKK2V4YW1wbGUsIHRoZXJlIGFyZSBvdmVyIDIwLDAwMCBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLiAgT24gbXkKK0F0aGxvbiA2NCBYMiAzODAwKywgYWZ0ZXIgdGhlIGFib3ZlOgorCisgICQgL3Vzci9iaW4vdGltZSBnaXQgZGlmZi1maWxlcworICAxLjY4dXNlciAwLjU0c3lzdGVtIDA6MDIuMjJlbGFwc2VkIDEwMCVDUFUgKDBhdmd0ZXh0KzBhdmdkYXRhIDBtYXhyZXNpZGVudClrCisgIDBpbnB1dHMrMG91dHB1dHMgKDBtYWpvcis2NzExMW1pbm9yKXBhZ2VmYXVsdHMgMHN3YXBzCisgICQgZ2l0IHVwZGF0ZS1pbmRleCBNQUlOVEFJTkVSUworICAkIC91c3IvYmluL3RpbWUgZ2l0IGRpZmYtZmlsZXMKKyAgMC4wMnVzZXIgMC4xMnN5c3RlbSAwOjAwLjE0ZWxhcHNlZCAxMDAlQ1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpaworICAwaW5wdXRzKzBvdXRwdXRzICgwbWFqb3IrOTM1bWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKKworUnVubmluZyBgZ2l0IHVwZGF0ZS1pbmRleGAgaW4gdGhlIG1pZGRsZSBjaGVja2VkIHRoZSByYWNpbHkKK2NsZWFuIGVudHJpZXMsIGFuZCBsZWZ0IHRoZSBjYWNoZWQgYHN0X210aW1lYCBmb3IgYWxsIHRoZSBwYXRocworaW50YWN0IGJlY2F1c2UgdGhleSB3ZXJlIGFjdHVhbGx5IGNsZWFuIChzbyB0aGlzIHN0ZXAgdG9vayBhYm91dAordGhlIHNhbWUgYW1vdW50IG9mIHRpbWUgYXMgdGhlIGZpcnN0IGBnaXQgZGlmZi1maWxlc2ApLiAgQWZ0ZXIKK3RoYXQsIHRoZXkgYXJlIG5vdCByYWNpbHkgY2xlYW4gYW55bW9yZSBidXQgYXJlIHRydWx5IGNsZWFuLCBzbwordGhlIHNlY29uZCBpbnZvY2F0aW9uIG9mIGBnaXQgZGlmZi1maWxlc2AgZnVsbHkgdG9vayBhZHZhbnRhZ2UKK29mIHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbi4KKworCitBdm9pZGluZyBydW50aW1lIHBlbmFsdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byBhdm9pZCB0aGUgYWJvdmUgcnVudGltZSBwZW5hbHR5LCBwb3N0IDEuNC4yIEdpdCB1c2VkCit0byBoYXZlIGEgY29kZSB0aGF0IG1hZGUgc3VyZSB0aGUgaW5kZXggZmlsZQorZ290IHRpbWVzdGFtcCBuZXdlciB0aGFuIHRoZSB5b3VuZ2VzdCBmaWxlcyBpbiB0aGUgaW5kZXggd2hlbgordGhlcmUgYXJlIG1hbnkgeW91bmcgZmlsZXMgd2l0aCB0aGUgc2FtZSB0aW1lc3RhbXAgYXMgdGhlCityZXN1bHRpbmcgaW5kZXggZmlsZSB3b3VsZCBvdGhlcndpc2Ugd291bGQgaGF2ZSBieSB3YWl0aW5nCitiZWZvcmUgZmluaXNoaW5nIHdyaXRpbmcgdGhlIGluZGV4IGZpbGUgb3V0LgorCitJIHN1c3BlY3RlZCB0aGF0IGluIHByYWN0aWNlIHRoZSBzaXR1YXRpb24gd2hlcmUgbWFueSBwYXRocyBpbiB0aGUKK2luZGV4IGFyZSBhbGwgcmFjaWx5IGNsZWFuIHdhcyBxdWl0ZSByYXJlLiAgVGhlIG9ubHkgY29kZSBwYXRocwordGhhdCBjYW4gcmVjb3JkIHJlY2VudCB0aW1lc3RhbXAgZm9yIGxhcmdlIG51bWJlciBvZiBwYXRocyBhcmU6CisKKy4gSW5pdGlhbCBgZ2l0IGFkZCAuYCBvZiBhIGxhcmdlIHByb2plY3QuCisKKy4gYGdpdCBjaGVja291dGAgb2YgYSBsYXJnZSBwcm9qZWN0IGZyb20gYW4gZW1wdHkgaW5kZXggaW50byBhbgorICB1bnBvcHVsYXRlZCB3b3JraW5nIHRyZWUuCisKK05vdGU6IHN3aXRjaGluZyBicmFuY2hlcyB3aXRoIGBnaXQgY2hlY2tvdXRgIGtlZXBzIHRoZSBjYWNoZWQKK3N0YXQgaW5mb3JtYXRpb24gb2YgZXhpc3Rpbmcgd29ya2luZyB0cmVlIGZpbGVzIHRoYXQgYXJlIHRoZQorc2FtZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIG5ldyBicmFuY2gsIHdoaWNoIGFyZQorYWxsIG9sZGVyIHRoYW4gdGhlIHJlc3VsdGluZyBpbmRleCBmaWxlLCBhbmQgdGhleSB3aWxsIG5vdAorYmVjb21lIHJhY2lseSBjbGVhbi4gIE9ubHkgdGhlIGZpbGVzIHRoYXQgYXJlIGFjdHVhbGx5IGNoZWNrZWQKK291dCBjYW4gYmVjb21lIHJhY2lseSBjbGVhbi4KKworSW4gYSBsYXJnZSBwcm9qZWN0IHdoZXJlIHJhY2luZXNzIGF2b2lkYW5jZSBjb3N0IHJlYWxseSBtYXR0ZXJzLAoraG93ZXZlciwgdGhlIGluaXRpYWwgY29tcHV0YXRpb24gb2YgYWxsIG9iamVjdCBuYW1lcyBpbiB0aGUKK2luZGV4IHRha2VzIG1vcmUgdGhhbiBvbmUgc2Vjb25kLCBhbmQgdGhlIGluZGV4IGZpbGUgaXMgd3JpdHRlbgorb3V0IGFmdGVyIGFsbCB0aGF0IGhhcHBlbnMuICBUaGVyZWZvcmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUKK2luZGV4IGZpbGUgd2lsbCBiZSBtb3JlIHRoYW4gb25lIHNlY29uZHMgbGF0ZXIgdGhhbiB0aGUKK3lvdW5nZXN0IGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZS4gIFRoaXMgbWVhbnMgdGhhdCBpbiB0aGVzZQorY2FzZXMgdGhlcmUgYWN0dWFsbHkgd2lsbCBub3QgYmUgYW55IHJhY2lseSBjbGVhbiBlbnRyeSBpbgordGhlIHJlc3VsdGluZyBpbmRleC4KKworQmFzZWQgb24gdGhpcyBkaXNjdXNzaW9uLCB0aGUgY3VycmVudCBjb2RlIGRvZXMgbm90IHVzZSB0aGUKKyJ3b3JrYXJvdW5kIiB0byBhdm9pZCB0aGUgcnVudGltZSBwZW5hbHR5IHRoYXQgZG9lcyBub3QgZXhpc3QgaW4KK3ByYWN0aWNlIGFueW1vcmUuICBUaGlzIHdhcyBkb25lIHdpdGggY29tbWl0IDBmYzgyY2ZmIG9uIEF1ZyAxNSwKKzIwMDYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXBvc2l0b3J5LXZlcnNpb24udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVwb3NpdG9yeS12ZXJzaW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODQ0ZWYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVwb3NpdG9yeS12ZXJzaW9uLnR4dApAQCAtMCwwICsxLDEwMiBAQAorPT0gR2l0IFJlcG9zaXRvcnkgRm9ybWF0IFZlcnNpb25zCisKK0V2ZXJ5IGdpdCByZXBvc2l0b3J5IGlzIG1hcmtlZCB3aXRoIGEgbnVtZXJpYyB2ZXJzaW9uIGluIHRoZQorYGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb25gIGtleSBvZiBpdHMgYGNvbmZpZ2AgZmlsZS4gVGhpcyB2ZXJzaW9uCitzcGVjaWZpZXMgdGhlIHJ1bGVzIGZvciBvcGVyYXRpbmcgb24gdGhlIG9uLWRpc2sgcmVwb3NpdG9yeSBkYXRhLiBBbgoraW1wbGVtZW50YXRpb24gb2YgZ2l0IHdoaWNoIGRvZXMgbm90IHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIHZlcnNpb24KK2FkdmVydGlzZWQgYnkgYW4gb24tZGlzayByZXBvc2l0b3J5IE1VU1QgTk9UIG9wZXJhdGUgb24gdGhhdCByZXBvc2l0b3J5OworZG9pbmcgc28gcmlza3Mgbm90IG9ubHkgcHJvZHVjaW5nIHdyb25nIHJlc3VsdHMsIGJ1dCBhY3R1YWxseSBsb3NpbmcKK2RhdGEuCisKK0JlY2F1c2Ugb2YgdGhpcyBydWxlLCB2ZXJzaW9uIGJ1bXBzIHNob3VsZCBiZSBrZXB0IHRvIGFuIGFic29sdXRlCittaW5pbXVtLiBJbnN0ZWFkLCB3ZSBnZW5lcmFsbHkgcHJlZmVyIHRoZXNlIHN0cmF0ZWdpZXM6CisKKyAgLSBidW1waW5nIGZvcm1hdCB2ZXJzaW9uIG51bWJlcnMgb2YgaW5kaXZpZHVhbCBkYXRhIGZpbGVzIChlLmcuLAorICAgIGluZGV4LCBwYWNrZmlsZXMsIGV0YykuIFRoaXMgcmVzdHJpY3RzIHRoZSBpbmNvbXBhdGliaWxpdGllcyBvbmx5IHRvCisgICAgdGhvc2UgZmlsZXMuCisKKyAgLSBpbnRyb2R1Y2luZyBuZXcgZGF0YSB0aGF0IGdyYWNlZnVsbHkgZGVncmFkZXMgd2hlbiB1c2VkIGJ5IG9sZGVyCisgICAgY2xpZW50cyAoZS5nLiwgcGFjayBiaXRtYXAgZmlsZXMgYXJlIGlnbm9yZWQgYnkgb2xkZXIgY2xpZW50cywgd2hpY2gKKyAgICBzaW1wbHkgZG8gbm90IHRha2UgYWR2YW50YWdlIG9mIHRoZSBvcHRpbWl6YXRpb24gdGhleSBwcm92aWRlKS4KKworQSB3aG9sZS1yZXBvc2l0b3J5IGZvcm1hdCB2ZXJzaW9uIGJ1bXAgc2hvdWxkIG9ubHkgYmUgcGFydCBvZiBhIGNoYW5nZQordGhhdCBjYW5ub3QgYmUgaW5kZXBlbmRlbnRseSB2ZXJzaW9uZWQuIEZvciBpbnN0YW5jZSwgaWYgb25lIHdlcmUgdG8KK2NoYW5nZSB0aGUgcmVhY2hhYmlsaXR5IHJ1bGVzIGZvciBvYmplY3RzLCBvciB0aGUgcnVsZXMgZm9yIGxvY2tpbmcKK3JlZnMsIHRoYXQgd291bGQgcmVxdWlyZSBhIGJ1bXAgb2YgdGhlIHJlcG9zaXRvcnkgZm9ybWF0IHZlcnNpb24uCisKK05vdGUgdGhhdCB0aGlzIGFwcGxpZXMgb25seSB0byBhY2Nlc3NpbmcgdGhlIHJlcG9zaXRvcnkncyBkaXNrIGNvbnRlbnRzCitkaXJlY3RseS4gQW4gb2xkZXIgY2xpZW50IHdoaWNoIHVuZGVyc3RhbmRzIG9ubHkgZm9ybWF0IGAwYCBtYXkgc3RpbGwKK2Nvbm5lY3QgdmlhIGBnaXQ6Ly9gIHRvIGEgcmVwb3NpdG9yeSB1c2luZyBmb3JtYXQgYDFgLCBhcyBsb25nIGFzIHRoZQorc2VydmVyIHByb2Nlc3MgdW5kZXJzdGFuZHMgZm9ybWF0IGAxYC4KKworVGhlIHByZWZlcnJlZCBzdHJhdGVneSBmb3Igcm9sbGluZyBvdXQgYSB2ZXJzaW9uIGJ1bXAgKHdoZXRoZXIgd2hvbGUKK3JlcG9zaXRvcnkgb3IgZm9yIGEgc2luZ2xlIGZpbGUpIGlzIHRvIHRlYWNoIGdpdCB0byByZWFkIHRoZSBuZXcgZm9ybWF0LAorYW5kIGFsbG93IHdyaXRpbmcgdGhlIG5ldyBmb3JtYXQgd2l0aCBhIGNvbmZpZyBzd2l0Y2ggb3IgY29tbWFuZCBsaW5lCitvcHRpb24gKGZvciBleHBlcmltZW50YXRpb24gb3IgZm9yIHRob3NlIHdobyBkbyBub3QgY2FyZSBhYm91dCBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBnaXRzKS4gVGhlbiBhZnRlciBhIGxvbmcgcGVyaW9kIHRvIGFsbG93IHRoZQorcmVhZGluZyBjYXBhYmlsaXR5IHRvIGJlY29tZSBjb21tb24sIHdlIG1heSBzd2l0Y2ggdG8gd3JpdGluZyB0aGUgbmV3Citmb3JtYXQgYnkgZGVmYXVsdC4KKworVGhlIGN1cnJlbnRseSBkZWZpbmVkIGZvcm1hdCB2ZXJzaW9ucyBhcmU6CisKKz09PSBWZXJzaW9uIGAwYAorCitUaGlzIGlzIHRoZSBmb3JtYXQgZGVmaW5lZCBieSB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIGdpdCwgaW5jbHVkaW5nIGJ1dAorbm90IGxpbWl0ZWQgdG8gdGhlIGZvcm1hdCBvZiB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnksIHRoZSByZXBvc2l0b3J5Citjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB0aGUgb2JqZWN0IGFuZCByZWYgc3RvcmFnZS4gU3BlY2lmeWluZyB0aGUKK2NvbXBsZXRlIGJlaGF2aW9yIG9mIGdpdCBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuCisKKz09PSBWZXJzaW9uIGAxYAorCitUaGlzIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gdmVyc2lvbiBgMGAsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgorCisgIDEuIFdoZW4gcmVhZGluZyB0aGUgYGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb25gIHZhcmlhYmxlLCBhIGdpdAorICAgICBpbXBsZW1lbnRhdGlvbiB3aGljaCBzdXBwb3J0cyB2ZXJzaW9uIDEgTVVTVCBhbHNvIHJlYWQgYW55CisgICAgIGNvbmZpZ3VyYXRpb24ga2V5cyBmb3VuZCBpbiB0aGUgYGV4dGVuc2lvbnNgIHNlY3Rpb24gb2YgdGhlCisgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworICAyLiBJZiBhIHZlcnNpb24tMSByZXBvc2l0b3J5IHNwZWNpZmllcyBhbnkgYGV4dGVuc2lvbnMuKmAga2V5cyB0aGF0CisgICAgIHRoZSBydW5uaW5nIGdpdCBoYXMgbm90IGltcGxlbWVudGVkLCB0aGUgb3BlcmF0aW9uIE1VU1QgTk9UCisgICAgIHByb2NlZWQuIFNpbWlsYXJseSwgaWYgdGhlIHZhbHVlIG9mIGFueSBrbm93biBrZXkgaXMgbm90IHVuZGVyc3Rvb2QKKyAgICAgYnkgdGhlIGltcGxlbWVudGF0aW9uLCB0aGUgb3BlcmF0aW9uIE1VU1QgTk9UIHByb2NlZWQuCisKK05vdGUgdGhhdCBpZiBubyBleHRlbnNpb25zIGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyBmaWxlLCB0aGVuCitgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbmAgU0hPVUxEIGJlIHNldCB0byBgMGAgKHNldHRpbmcgaXQgdG8gYDFgCitwcm92aWRlcyBubyBiZW5lZml0LCBhbmQgbWFrZXMgdGhlIHJlcG9zaXRvcnkgaW5jb21wYXRpYmxlIHdpdGggb2xkZXIKK2ltcGxlbWVudGF0aW9ucyBvZiBnaXQpLgorCitUaGlzIGRvY3VtZW50IHdpbGwgc2VydmUgYXMgdGhlIG1hc3RlciBsaXN0IGZvciBleHRlbnNpb25zLiBBbnkKK2ltcGxlbWVudGF0aW9uIHdpc2hpbmcgdG8gZGVmaW5lIGEgbmV3IGV4dGVuc2lvbiBzaG91bGQgbWFrZSBhIG5vdGUgb2YKK2l0IGhlcmUsIGluIG9yZGVyIHRvIGNsYWltIHRoZSBuYW1lLgorCitUaGUgZGVmaW5lZCBleHRlbnNpb25zIGFyZToKKworPT09PSBgbm9vcGAKKworVGhpcyBleHRlbnNpb24gZG9lcyBub3QgY2hhbmdlIGdpdCdzIGJlaGF2aW9yIGF0IGFsbC4gSXQgaXMgdXNlZnVsIG9ubHkKK2ZvciB0ZXN0aW5nIGZvcm1hdC0xIGNvbXBhdGliaWxpdHkuCisKKz09PT0gYHByZWNpb3VzT2JqZWN0c2AKKworV2hlbiB0aGUgY29uZmlnIGtleSBgZXh0ZW5zaW9ucy5wcmVjaW91c09iamVjdHNgIGlzIHNldCB0byBgdHJ1ZWAsCitvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5IE1VU1QgTk9UIGJlIGRlbGV0ZWQgKGUuZy4sIGJ5IGBnaXQtcHJ1bmVgIG9yCitgZ2l0IHJlcGFjayAtZGApLgorCis9PT09IGBwYXJ0aWFsY2xvbmVgCisKK1doZW4gdGhlIGNvbmZpZyBrZXkgYGV4dGVuc2lvbnMucGFydGlhbGNsb25lYCBpcyBzZXQsIGl0IGluZGljYXRlcwordGhhdCB0aGUgcmVwbyB3YXMgY3JlYXRlZCB3aXRoIGEgcGFydGlhbCBjbG9uZSAob3IgbGF0ZXIgcGVyZm9ybWVkCithIHBhcnRpYWwgZmV0Y2gpIGFuZCB0aGF0IHRoZSByZW1vdGUgbWF5IGhhdmUgb21pdHRlZCBzZW5kaW5nCitjZXJ0YWluIHVud2FudGVkIG9iamVjdHMuICBTdWNoIGEgcmVtb3RlIGlzIGNhbGxlZCBhICJwcm9taXNvciByZW1vdGUiCithbmQgaXQgcHJvbWlzZXMgdGhhdCBhbGwgc3VjaCBvbWl0dGVkIG9iamVjdHMgY2FuIGJlIGZldGNoZWQgZnJvbSBpdAoraW4gdGhlIGZ1dHVyZS4KKworVGhlIHZhbHVlIG9mIHRoaXMga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9taXNvciByZW1vdGUuCisKKz09PT0gYHdvcmt0cmVlQ29uZmlnYAorCitJZiBzZXQsIGJ5IGRlZmF1bHQgImdpdCBjb25maWciIHJlYWRzIGZyb20gYm90aCAiY29uZmlnIiBhbmQKKyJjb25maWcud29ya3RyZWUiIGZpbGUgZnJvbSBHSVRfRElSIGluIHRoYXQgb3JkZXIuIEluCittdWx0aXBsZSB3b3JraW5nIGRpcmVjdG9yeSBtb2RlLCAiY29uZmlnIiBmaWxlIGlzIHNoYXJlZCB3aGlsZQorImNvbmZpZy53b3JrdHJlZSIgaXMgcGVyLXdvcmtpbmcgZGlyZWN0b3J5IChpLmUuLCBpdCdzIGluCitHSVRfQ09NTU9OX0RJUi93b3JrdHJlZXMvPGlkPi9jb25maWcud29ya3RyZWUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXJlcmUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVyZXJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVmOWZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVyZXJlLnR4dApAQCAtMCwwICsxLDE4NiBAQAorUmVyZXJlCis9PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHJlcmVyZSBsb2dpYy4KKworQ29uZmxpY3Qgbm9ybWFsaXphdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBlbnN1cmUgcmVjb3JkZWQgY29uZmxpY3QgcmVzb2x1dGlvbnMgY2FuIGJlIGxvb2tlZCB1cCBpbiB0aGUgcmVyZXJlCitkYXRhYmFzZSwgZXZlbiB3aGVuIGJyYW5jaGVzIGFyZSBtZXJnZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIsCitkaWZmZXJlbnQgYnJhbmNoZXMgYXJlIG1lcmdlZCB0aGF0IHJlc3VsdCBpbiB0aGUgc2FtZSBjb25mbGljdCwgb3IKK3doZW4gZGlmZmVyZW50IGNvbmZsaWN0IHN0eWxlIHNldHRpbmdzIGFyZSB1c2VkLCByZXJlcmUgbm9ybWFsaXplcyB0aGUKK2NvbmZsaWN0cyBiZWZvcmUgd3JpdGluZyB0aGVtIHRvIHRoZSByZXJlcmUgZGF0YWJhc2UuCisKK0RpZmZlcmVudCBjb25mbGljdCBzdHlsZXMgYW5kIGJyYW5jaCBuYW1lcyBhcmUgbm9ybWFsaXplZCBieSBzdHJpcHBpbmcKK3RoZSBsYWJlbHMgZnJvbSB0aGUgY29uZmxpY3QgbWFya2VycywgYW5kIHJlbW92aW5nIHRoZSBjb21tb24gYW5jZXN0b3IKK3ZlcnNpb24gZnJvbSB0aGUgYGRpZmYzYCBjb25mbGljdCBzdHlsZS4gQnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkCitpbiBkaWZmZXJlbnQgb3JkZXIgYXJlIG5vcm1hbGl6ZWQgYnkgc29ydGluZyB0aGUgY29uZmxpY3QgaHVua3MuICBNb3JlCitvbiBlYWNoIG9mIHRob3NlIHN0ZXBzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisKK09uY2UgdGhlc2UgdHdvIG5vcm1hbGl6YXRpb24gb3BlcmF0aW9ucyBhcmUgYXBwbGllZCwgYSBjb25mbGljdCBJRCBpcworY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbm9ybWFsaXplZCBjb25mbGljdCwgd2hpY2ggaXMgbGF0ZXIgdXNlZCBieQorcmVyZXJlIHRvIGxvb2sgdXAgdGhlIGNvbmZsaWN0IGluIHRoZSByZXJlcmUgZGF0YWJhc2UuCisKK1JlbW92aW5nIHRoZSBjb21tb24gYW5jZXN0b3IgdmVyc2lvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NheSB3ZSBoYXZlIHRocmVlIGJyYW5jaGVzIEFCLCBBQyBhbmQgQUMyLiAgVGhlIGNvbW1vbiBhbmNlc3RvciBvZgordGhlc2UgYnJhbmNoZXMgaGFzIGEgZmlsZSB3aXRoIGEgbGluZSBjb250YWluaW5nIHRoZSBzdHJpbmcgIkEiIChmb3IKK2JyZXZpdHkgdGhpcyBpcyBjYWxsZWQgImxpbmUgQSIgaW4gdGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50KS4gIEluCiticmFuY2ggQUIgdGhpcyBsaW5lIGlzIGNoYW5nZWQgdG8gIkIiLCBpbiBBQywgdGhpcyBsaW5lIGlzIGNoYW5nZWQgdG8KKyJDIiwgYW5kIGJyYW5jaCBBQzIgaXMgZm9ya2VkIG9mZiBvZiBBQywgYWZ0ZXIgdGhlIGxpbmUgd2FzIGNoYW5nZWQgdG8KKyJDIi4KKworRm9ya2luZyBhIGJyYW5jaCBBQkFDIG9mZiBvZiBicmFuY2ggQUIgYW5kIHRoZW4gbWVyZ2luZyBBQyBpbnRvIGl0LCB3ZQorZ2V0IGEgY29uZmxpY3QgbGlrZSB0aGUgZm9sbG93aW5nOgorCisgICAgPDw8PDw8PCBIRUFECisgICAgQgorICAgID09PT09PT0KKyAgICBDCisgICAgPj4+Pj4+PiBBQworCitEb2luZyB0aGUgYW5hbG9nb3VzIHdpdGggQUMyIChmb3JraW5nIGEgYnJhbmNoIEFCQUMyIG9mZiBvZiBicmFuY2ggQUIKK2FuZCB0aGVuIG1lcmdpbmcgYnJhbmNoIEFDMiBpbnRvIGl0KSwgdXNpbmcgdGhlIGRpZmYzIGNvbmZsaWN0IHN0eWxlLAord2UgZ2V0IGEgY29uZmxpY3QgbGlrZSB0aGUgZm9sbG93aW5nOgorCisgICAgPDw8PDw8PCBIRUFECisgICAgQgorICAgIHx8fHx8fHwgbWVyZ2VkIGNvbW1vbiBhbmNlc3RvcnMKKyAgICBBCisgICAgPT09PT09PQorICAgIEMKKyAgICA+Pj4+Pj4+IEFDMgorCitCeSByZXNvbHZpbmcgdGhpcyBjb25mbGljdCwgdG8gbGVhdmUgbGluZSBELCB0aGUgdXNlciBkZWNsYXJlczoKKworICAgIEFmdGVyIGV4YW1pbmluZyB3aGF0IGJyYW5jaGVzIEFCIGFuZCBBQyBkaWQsIEkgYmVsaWV2ZSB0aGF0IG1ha2luZworICAgIGxpbmUgQSBpbnRvIGxpbmUgRCBpcyB0aGUgYmVzdCB0aGluZyB0byBkbyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAorICAgIHdoYXQgQUIgYW5kIEFDIHdhbnRlZCB0byBkby4KKworQXMgYnJhbmNoIEFDMiByZWZlcnMgdG8gdGhlIHNhbWUgY29tbWl0IGFzIEFDLCB0aGUgYWJvdmUgaW1wbGllcyB0aGF0Cit0aGlzIGlzIGFsc28gY29tcGF0aWJsZSB3aGF0IEFCIGFuZCBBQzIgd2FudGVkIHRvIGRvLgorCitCeSBleHRlbnNpb24sIHRoaXMgbWVhbnMgdGhhdCByZXJlcmUgc2hvdWxkIHJlY29nbml6ZSB0aGF0IHRoZSBhYm92ZQorY29uZmxpY3RzIGFyZSB0aGUgc2FtZS4gIFRvIGRvIHRoaXMsIHRoZSBsYWJlbHMgb24gdGhlIGNvbmZsaWN0CittYXJrZXJzIGFyZSBzdHJpcHBlZCwgYW5kIHRoZSBjb21tb24gYW5jZXN0b3IgdmVyc2lvbiBpcyByZW1vdmVkLiAgVGhlIGFib3ZlCitleGFtcGxlcyB3b3VsZCBib3RoIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIG5vcm1hbGl6ZWQgY29uZmxpY3Q6CisKKyAgICA8PDw8PDw8CisgICAgQgorICAgID09PT09PT0KKyAgICBDCisgICAgPj4+Pj4+PgorCitTb3J0aW5nIGh1bmtzCit+fn5+fn5+fn5+fn5+CisKK0FzIGJlZm9yZSwgbGV0cyBpbWFnaW5lIHRoYXQgYSBjb21tb24gYW5jZXN0b3IgaGFkIGEgZmlsZSB3aXRoIGxpbmUgQQoraXRzIGVhcmx5IHBhcnQsIGFuZCBsaW5lIFggaW4gaXRzIGxhdGUgcGFydC4gIEFuZCB0aGVuIGZvdXIgYnJhbmNoZXMKK2FyZSBmb3JrZWQgdGhhdCBkbyB0aGVzZSB0aGluZ3M6CisKKyAgICAtIEFCOiBjaGFuZ2VzIEEgdG8gQgorICAgIC0gQUM6IGNoYW5nZXMgQSB0byBDCisgICAgLSBYWTogY2hhbmdlcyBYIHRvIFkKKyAgICAtIFhaOiBjaGFuZ2VzIFggdG8gWgorCitOb3csIGZvcmtpbmcgYSBicmFuY2ggQUJBQyBvZmYgb2YgYnJhbmNoIEFCIGFuZCB0aGVuIG1lcmdpbmcgQUMgaW50bworaXQsIGFuZCBmb3JraW5nIGEgYnJhbmNoIEFDQUIgb2ZmIG9mIGJyYW5jaCBBQyBhbmQgdGhlbiBtZXJnaW5nIEFCCitpbnRvIGl0LCB3b3VsZCB5aWVsZCB0aGUgY29uZmxpY3QgaW4gYSBkaWZmZXJlbnQgb3JkZXIuICBUaGUgZm9ybWVyCit3b3VsZCBzYXkgIkEgYmVjYW1lIEIgb3IgQywgd2hhdCBub3c/IiB3aGlsZSB0aGUgbGF0dGVyIHdvdWxkIHNheSAiQQorYmVjYW1lIEMgb3IgQiwgd2hhdCBub3c/IgorCitBcyBhIHJlbWluZGVyLCB0aGUgYWN0IG9mIG1lcmdpbmcgQUMgaW50byBBQkFDIGFuZCByZXNvbHZpbmcgdGhlCitjb25mbGljdCB0byBsZWF2ZSBsaW5lIEQgbWVhbnMgdGhhdCB0aGUgdXNlciBkZWNsYXJlczoKKworICAgIEFmdGVyIGV4YW1pbmluZyB3aGF0IGJyYW5jaGVzIEFCIGFuZCBBQyBkaWQsIEkgYmVsaWV2ZSB0aGF0CisgICAgbWFraW5nIGxpbmUgQSBpbnRvIGxpbmUgRCBpcyB0aGUgYmVzdCB0aGluZyB0byBkbyB0aGF0IGlzCisgICAgY29tcGF0aWJsZSB3aXRoIHdoYXQgQUIgYW5kIEFDIHdhbnRlZCB0byBkby4KKworU28gdGhlIGNvbmZsaWN0IHdlIHdvdWxkIHNlZSB3aGVuIG1lcmdpbmcgQUIgaW50byBBQ0FCIHNob3VsZCBiZQorcmVzb2x2ZWQgdGhlIHNhbWUgd2F5LS0taXQgaXMgdGhlIHJlc29sdXRpb24gdGhhdCBpcyBpbiBsaW5lIHdpdGggdGhhdAorZGVjbGFyYXRpb24uCisKK0ltYWdpbmUgdGhhdCBzaW1pbGFybHkgcHJldmlvdXNseSBhIGJyYW5jaCBYWVhaIHdhcyBmb3JrZWQgZnJvbSBYWSwKK2FuZCBYWiB3YXMgbWVyZ2VkIGludG8gaXQsIGFuZCByZXNvbHZlZCAiWCBiZWNhbWUgWSBvciBaIiBpbnRvICJYCitiZWNhbWUgVyIuCisKK05vdywgaWYgYSBicmFuY2ggQUJYWSB3YXMgZm9ya2VkIGZyb20gQUIgYW5kIHRoZW4gbWVyZ2VkIFhZLCB0aGVuIEFCWFkKK3dvdWxkIGhhdmUgbGluZSBCIGluIGl0cyBlYXJseSBwYXJ0IGFuZCBsaW5lIFkgaW4gaXRzIGxhdGVyIHBhcnQuCitTdWNoIGEgbWVyZ2Ugd291bGQgYmUgcXVpdGUgY2xlYW4uICBXZSBjYW4gY29uc3RydWN0IDQgY29tYmluYXRpb25zCit1c2luZyB0aGVzZSBmb3VyIGJyYW5jaGVzICgoQUIsIEFDKSB4IChYWSwgWFopKS4KKworTWVyZ2luZyBBQlhZIGFuZCBBQ1haIHdvdWxkIG1ha2UgImFuIGVhcmx5IEEgYmVjYW1lIEIgb3IgQywgYSBsYXRlIFgKK2JlY2FtZSBZIG9yIFoiIGNvbmZsaWN0LCB3aGlsZSBtZXJnaW5nIEFDWFkgYW5kIEFCWFogd291bGQgbWFrZSAiYW4KK2Vhcmx5IEEgYmVjYW1lIEMgb3IgQiwgYSBsYXRlIFggYmVjYW1lIFkgb3IgWiIuICBXZSBjYW4gc2VlIHRoZXJlIGFyZQorNCBjb21iaW5hdGlvbnMgb2YgKCJCIG9yIEMiLCAiQyBvciBCIikgeCAoIlggb3IgWSIsICJZIG9yIFgiKS4KKworQnkgc29ydGluZywgdGhlIGNvbmZsaWN0IGlzIGdpdmVuIGl0cyBjYW5vbmljYWwgbmFtZSwgbmFtZWx5LCAiYW4KK2Vhcmx5IHBhcnQgYmVjYW1lIEIgb3IgQywgYSBsYXRlIHBhcnQgYmVjYW1lIFggb3IgWSIsIGFuZCB3aGVuZXZlcgorYW55IG9mIHRoZXNlIGZvdXIgcGF0dGVybnMgYXBwZWFyLCBhbmQgd2UgY2FuIGdldCB0byB0aGUgc2FtZSBjb25mbGljdAorYW5kIHJlc29sdXRpb24gdGhhdCB3ZSBzYXcgZWFybGllci4KKworV2l0aG91dCB0aGUgc29ydGluZywgd2UnZCBoYXZlIHRvIHNvbWVob3cgZmluZCBhIHByZXZpb3VzIHJlc29sdXRpb24KK2Zyb20gY29tYmluYXRvcmlhbCBleHBsb3Npb24uCisKK0NvbmZsaWN0IElEIGNhbGN1bGF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitPbmNlIHRoZSBjb25mbGljdCBub3JtYWxpemF0aW9uIGlzIGRvbmUsIHRoZSBjb25mbGljdCBJRCBpcyBjYWxjdWxhdGVkCithcyB0aGUgc2hhMSBoYXNoIG9mIHRoZSBjb25mbGljdCBodW5rcyBhcHBlbmRlZCB0byBlYWNoIG90aGVyLAorc2VwYXJhdGVkIGJ5IDxOVUw+IGNoYXJhY3RlcnMuICBUaGUgY29uZmxpY3QgbWFya2VycyBhcmUgc3RyaXBwZWQgb3V0CitiZWZvcmUgdGhlIHNoYTEgaXMgY2FsY3VsYXRlZC4gIFNvIGluIHRoZSBleGFtcGxlIGFib3ZlLCB3aGVyZSB3ZQorbWVyZ2UgYnJhbmNoIEFDIHdoaWNoIGNoYW5nZXMgbGluZSBBIHRvIGxpbmUgQywgaW50byBicmFuY2ggQUIsIHdoaWNoCitjaGFuZ2VzIGxpbmUgQSB0byBsaW5lIEMsIHRoZSBjb25mbGljdCBJRCB3b3VsZCBiZQorU0hBMSgnQjxOVUw+QzxOVUw+JykuCisKK0lmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25mbGljdHMgaW4gb25lIGZpbGUsIHRoZSBzaGExIGlzIGNhbGN1bGF0ZWQKK3RoZSBzYW1lIHdheSB3aXRoIGFsbCBodW5rcyBhcHBlbmRlZCB0byBlYWNoIG90aGVyLCBpbiB0aGUgb3JkZXIgaW4KK3doaWNoIHRoZXkgYXBwZWFyIGluIHRoZSBmaWxlLCBzZXBhcmF0ZWQgYnkgYSA8TlVMPiBjaGFyYWN0ZXIuCisKK05lc3RlZCBjb25mbGljdHMKK35+fn5+fn5+fn5+fn5+fn4KKworTmVzdGVkIGNvbmZsaWN0cyBhcmUgaGFuZGxlZCB2ZXJ5IHNpbWlsYXJseSB0byAic2ltcGxlIiBjb25mbGljdHMuCitTaW1pbGFyIHRvIHNpbXBsZSBjb25mbGljdHMsIHRoZSBjb25mbGljdCBpcyBmaXJzdCBub3JtYWxpemVkIGJ5CitzdHJpcHBpbmcgdGhlIGxhYmVscyBmcm9tIGNvbmZsaWN0IG1hcmtlcnMsIHN0cmlwcGluZyB0aGUgY29tbW9uIGFuY2VzdG9yCit2ZXJzaW9uLCBhbmQgdGhlIHNvcnRpbmcgdGhlIGNvbmZsaWN0IGh1bmtzLCBib3RoIGZvciB0aGUgb3V0ZXIgYW5kIHRoZQoraW5uZXIgY29uZmxpY3QuICBUaGlzIGlzIGRvbmUgcmVjdXJzaXZlbHksIHNvIGFueSBudW1iZXIgb2YgbmVzdGVkCitjb25mbGljdHMgY2FuIGJlIGhhbmRsZWQuCisKK05vdGUgdGhhdCB0aGlzIG9ubHkgd29ya3MgZm9yIGNvbmZsaWN0IG1hcmtlcnMgdGhhdCAiY2xlYW5seSBuZXN0Ii4gIElmCit0aGVyZSBhcmUgYW55IHVubWF0Y2hlZCBjb25mbGljdCBtYXJrZXJzLCByZXJlcmUgd2lsbCBmYWlsIHRvIGhhbmRsZQordGhlIGNvbmZsaWN0IGFuZCByZWNvcmQgYSBjb25mbGljdCByZXNvbHV0aW9uLgorCitUaGUgb25seSBkaWZmZXJlbmNlIGlzIGluIGhvdyB0aGUgY29uZmxpY3QgSUQgaXMgY2FsY3VsYXRlZC4gIEZvciB0aGUKK2lubmVyIGNvbmZsaWN0LCB0aGUgY29uZmxpY3QgbWFya2VycyB0aGVtc2VsdmVzIGFyZSBub3Qgc3RyaXBwZWQgb3V0CitiZWZvcmUgY2FsY3VsYXRpbmcgdGhlIHNoYTEuCisKK1NheSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29uZmxpY3QgZm9yIGV4YW1wbGU6CisKKyAgICA8PDw8PDw8IEhFQUQKKyAgICAxCisgICAgPT09PT09PQorICAgIDw8PDw8PDwgSEVBRAorICAgIDMKKyAgICA9PT09PT09CisgICAgMgorICAgID4+Pj4+Pj4gYnJhbmNoLTIKKyAgICA+Pj4+Pj4+IGJyYW5jaC0zfgorCitBZnRlciBzdHJpcHBpbmcgb3V0IHRoZSBsYWJlbHMgb2YgdGhlIGNvbmZsaWN0IG1hcmtlcnMsIGFuZCBzb3J0aW5nCit0aGUgaHVua3MsIHRoZSBjb25mbGljdCB3b3VsZCBsb29rIGFzIGZvbGxvd3M6CisKKyAgICA8PDw8PDw8CisgICAgMQorICAgID09PT09PT0KKyAgICA8PDw8PDw8CisgICAgMgorICAgID09PT09PT0KKyAgICAzCisgICAgPj4+Pj4+PgorICAgID4+Pj4+Pj4KKworYW5kIGZpbmFsbHkgdGhlIGNvbmZsaWN0IElEIHdvdWxkIGJlIGNhbGN1bGF0ZWQgYXM6Citgc2hhMSgnMTxOVUw+PDw8PDw8PFxuM1xuPT09PT09PVxuMlxuPj4+Pj4+PjxOVUw+JylgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zZW5kLXBhY2stcGlwZWxpbmUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2VuZC1wYWNrLXBpcGVsaW5lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjVhMGJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2VuZC1wYWNrLXBpcGVsaW5lLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQtc2VuZC1wYWNrIGludGVybmFscworPT09PT09PT09PT09PT09PT09PT09PT0KKworT3ZlcmFsbCBvcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4gQ29ubmVjdHMgdG8gdGhlIHJlbW90ZSBzaWRlIGFuZCBpbnZva2VzIGdpdC1yZWNlaXZlLXBhY2suCisKKy4gTGVhcm5zIHdoYXQgcmVmcyB0aGUgcmVtb3RlIGhhcyBhbmQgd2hhdCBjb21taXQgdGhleSBwb2ludCBhdC4KKyAgTWF0Y2hlcyB0aGVtIHRvIHRoZSByZWZzcGVjcyB3ZSBhcmUgcHVzaGluZy4KKworLiBDaGVja3MgaWYgdGhlcmUgYXJlIG5vbi1mYXN0LWZvcndhcmRzLiAgVW5saWtlIGZldGNoLXBhY2ssCisgIHRoZSByZXBvc2l0b3J5IHNlbmQtcGFjayBydW5zIGluIGlzIHN1cHBvc2VkIHRvIGJlIGEgc3VwZXJzZXQKKyAgb2YgdGhlIHJlY2lwaWVudCBpbiBmYXN0LWZvcndhcmQgY2FzZXMsIHNvIHRoZXJlIGlzIG5vIG5lZWQKKyAgZm9yIHdhbnQvaGF2ZSBleGNoYW5nZXMsIGFuZCBmYXN0LWZvcndhcmQgY2hlY2sgY2FuIGJlIGRvbmUKKyAgbG9jYWxseS4gIFRlbGwgdGhlIHJlc3VsdCB0byB0aGUgb3RoZXIgZW5kLgorCisuIENhbGxzIHBhY2tfb2JqZWN0cygpIHdoaWNoIGdlbmVyYXRlcyBhIHBhY2tmaWxlIGFuZCBzZW5kcyBpdAorICBvdmVyIHRvIHRoZSBvdGhlciBlbmQuCisKKy4gSWYgdGhlIHJlbW90ZSBzaWRlIGlzIG5ldyBlbm91Z2ggKHYxLjEuMCBvciBsYXRlciksIHdhaXQgZm9yCisgIHRoZSB1bnBhY2sgYW5kIGhvb2sgc3RhdHVzIGZyb20gdGhlIG90aGVyIGVuZC4KKworLiBFeGl0IHdpdGggYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMuCisKKworUGFja19vYmplY3RzIHBpcGVsaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmdW5jdGlvbiBnZXRzIG9uZSBmaWxlIGRlc2NyaXB0b3IgKGBmZGApIHdoaWNoIGlzIGVpdGhlciBhCitzb2NrZXQgKG92ZXIgdGhlIG5ldHdvcmspIG9yIGEgcGlwZSAobG9jYWwpLiAgV2hhdCdzIHdyaXR0ZW4gdG8KK3RoaXMgZmQgZ29lcyB0byBnaXQtcmVjZWl2ZS1wYWNrIHRvIGJlIHVucGFja2VkLgorCisgICAgc2VuZC1wYWNrIC0tLT4gZmQgLS0tPiByZWNlaXZlLXBhY2sKKworVGhlIGZ1bmN0aW9uIHBhY2tfb2JqZWN0cyBjcmVhdGVzIGEgcGlwZSBhbmQgdGhlbiBmb3Jrcy4gIFRoZQorZm9ya2VkIGNoaWxkIGV4ZWNzIHBhY2stb2JqZWN0cyB3aXRoIC0tcmV2cyB0byByZWNlaXZlIHJldmlzaW9uCitwYXJhbWV0ZXJzIGZyb20gaXRzIHN0YW5kYXJkIGlucHV0LiBUaGlzIHByb2Nlc3Mgd2lsbCB3cml0ZSB0aGUKK3BhY2tmaWxlIHRvIHRoZSBvdGhlciBlbmQuCisKKyAgICBzZW5kLXBhY2sKKyAgICAgICB8CisgICAgICAgcGFja19vYmplY3RzKCkgLS0tPiBmZCAtLS0+IHJlY2VpdmUtcGFjaworICAgICAgICAgIHwgXiAocGlwZSkKKwkgIHYgfAorICAgICAgICAgKGNoaWxkKQorCitUaGUgY2hpbGQgZHVwMidzIHRvIGFycmFuZ2UgaXRzIHN0YW5kYXJkIG91dHB1dCB0byBnbyBiYWNrIHRvCit0aGUgb3RoZXIgZW5kLCBhbmQgcmVhZCBpdHMgc3RhbmRhcmQgaW5wdXQgdG8gY29tZSBmcm9tIHRoZQorcGlwZS4gIEFmdGVyIHRoYXQgaXQgZXhlYydzIHBhY2stb2JqZWN0cy4gIE9uIHRoZSBvdGhlciBoYW5kLAordGhlIHBhcmVudCBwcm9jZXNzLCBiZWZvcmUgc3RhcnRpbmcgdG8gZmVlZCB0aGUgY2hpbGQgcGlwZWxpbmUsCitjbG9zZXMgdGhlIHJlYWRpbmcgc2lkZSBvZiB0aGUgcGlwZSBhbmQgZmQgdG8gcmVjZWl2ZS1wYWNrLgorCisgICAgc2VuZC1wYWNrCisgICAgICAgfAorICAgICAgIHBhY2tfb2JqZWN0cyhwYXJlbnQpCisgICAgICAgICAgfAorCSAgdiBbMF0KKyAgICAgICAgIHBhY2stb2JqZWN0cyBbMF0gLS0tPiByZWNlaXZlLXBhY2sKKworCitbamM6IHRoZSBwaXBlbGluZSB3YXMgbXVjaCBtb3JlIGNvbXBsZXggYW5kIG5lZWRlZCBkb2N1bWVudGF0aW9uIGJlZm9yZQorIEkgdW5kZXJzdG9vZCBhbiBlYXJsaWVyIGJ1ZywgYnV0IG5vdyBpdCBpcyB0cml2aWFsIGFuZCBzdHJhaWdodGZvcndhcmQuXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2hhbGxvdy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zaGFsbG93LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWRlZGZlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2hhbGxvdy50eHQKQEAgLTAsMCArMSw2MCBAQAorU2hhbGxvdyBjb21taXRzCis9PT09PT09PT09PT09PT0KKworLkRlZmluaXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU2hhbGxvdyBjb21taXRzIGRvIGhhdmUgcGFyZW50cywgYnV0IG5vdCBpbiB0aGUgc2hhbGxvdworcmVwbywgYW5kIHRoZXJlZm9yZSBncmFmdHMgYXJlIGludHJvZHVjZWQgcHJldGVuZGluZyB0aGF0Cit0aGVzZSBjb21taXRzIGhhdmUgbm8gcGFyZW50cy4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCiskR0lUX0RJUi9zaGFsbG93IGxpc3RzIGNvbW1pdCBvYmplY3QgbmFtZXMgYW5kIHRlbGxzIEdpdCB0bworcHJldGVuZCBhcyBpZiB0aGV5IGFyZSByb290IGNvbW1pdHMgKGUuZy4gImdpdCBsb2ciIHRyYXZlcnNhbAorc3RvcHMgYWZ0ZXIgc2hvd2luZyB0aGVtOyAiZ2l0IGZzY2siIGRvZXMgbm90IGNvbXBsYWluIHNheWluZwordGhlIGNvbW1pdHMgbGlzdGVkIG9uIHRoZWlyICJwYXJlbnQiIGxpbmVzIGRvIG5vdCBleGlzdCkuCisKK0VhY2ggbGluZSBjb250YWlucyBleGFjdGx5IG9uZSBTSEEtMS4gV2hlbiByZWFkLCBhIGNvbW1pdF9ncmFmdAord2lsbCBiZSBjb25zdHJ1Y3RlZCwgd2hpY2ggaGFzIG5yX3BhcmVudCA8IDAgdG8gbWFrZSBpdCBlYXNpZXIKK3RvIGRpc2Nlcm4gZnJvbSB1c2VyIHByb3ZpZGVkIGdyYWZ0cy4KKworTm90ZSB0aGF0IHRoZSBzaGFsbG93IGZlYXR1cmUgY291bGQgbm90IGJlIGNoYW5nZWQgZWFzaWx5IHRvCit1c2UgcmVwbGFjZSByZWZzOiBhIGNvbW1pdCBjb250YWluaW5nIGEgYG1lcmdldGFnYCBpcyBub3QgYWxsb3dlZAordG8gYmUgcmVwbGFjZWQsIG5vdCBldmVuIGJ5IGEgcm9vdCBjb21taXQuIFN1Y2ggYSBjb21taXQgY2FuIGJlCittYWRlIHNoYWxsb3csIHRob3VnaC4gQWxzbywgaGF2aW5nIGEgYHNoYWxsb3dgIGZpbGUgZXhwbGljaXRseQorbGlzdGluZyBhbGwgdGhlIGNvbW1pdHMgbWFkZSBzaGFsbG93IG1ha2VzIGl0IGEgKmxvdCogZWFzaWVyIHRvCitkbyBzaGFsbG93LXNwZWNpZmljIHRoaW5ncyBzdWNoIGFzIHRvIGRlZXBlbiB0aGUgaGlzdG9yeS4KKworU2luY2UgZnNjay1vYmplY3RzIHJlbGllcyBvbiB0aGUgbGlicmFyeSB0byByZWFkIHRoZSBvYmplY3RzLAoraXQgaG9ub3VycyBzaGFsbG93IGNvbW1pdHMgYXV0b21hdGljYWxseS4KKworVGhlcmUgYXJlIHNvbWUgdW5maW5pc2hlZCBlbmRzIG9mIHRoZSB3aG9sZSBzaGFsbG93IGJ1c2luZXNzOgorCistIG1heWJlIHdlIGhhdmUgdG8gZm9yY2Ugbm9uLXRoaW4gcGFja3Mgd2hlbiBmZXRjaGluZyBpbnRvIGEKKyAgc2hhbGxvdyByZXBvIChBVE0gdGhleSBhcmUgZm9yY2VkIG5vbi10aGluKS4KKworLSBBIHNwZWNpYWwgaGFuZGxpbmcgb2YgYSBzaGFsbG93IHVwc3RyZWFtIGlzIG5lZWRlZC4gQXQgc29tZQorICBzdGFnZSwgdXBsb2FkLXBhY2sgaGFzIHRvIGNoZWNrIGlmIGl0IHNlbmRzIGEgc2hhbGxvdyBjb21taXQsCisgIGFuZCBpdCBzaG91bGQgc2VuZCB0aGF0IGluZm9ybWF0aW9uIGVhcmx5IChvciBmYWlsLCBpZiB0aGUKKyAgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXBvc2l0b3JpZXMpLiBUaGVyZSBpcyBubworICBzdXBwb3J0IGF0IGFsbCBmb3IgdGhpcyBpbiB0aGlzIHBhdGNoIHNlcmllcy4KKworLSBJbnN0ZWFkIG9mIGxvY2tpbmcgJEdJVF9ESVIvc2hhbGxvdyBhdCB0aGUgc3RhcnQsIGp1c3QKKyAgdGhlIHRpbWVzdGFtcCBvZiBpdCBpcyBub3RlZCwgYW5kIHdoZW4gaXQgY29tZXMgdG8gd3JpdGluZyBpdCwKKyAgYSBjaGVjayBpcyBwZXJmb3JtZWQgaWYgdGhlIG10aW1lIGlzIHN0aWxsIHRoZSBzYW1lLCBkeWluZyBpZgorICBpdCBpcyBub3QuCisKKy0gSXQgaXMgdW5jbGVhciBob3cgInB1c2ggaW50by9mcm9tIGEgc2hhbGxvdyByZXBvIiBzaG91bGQgYmVoYXZlLgorCistIElmIHlvdSBkZWVwZW4gYSBoaXN0b3J5LCB5b3UnZCB3YW50IHRvIGdldCB0aGUgdGFncyBvZiB0aGUKKyAgbmV3bHkgc3RvcmVkIChidXQgb2xkZXIhKSBjb21taXRzLiBUaGlzIGRvZXMgbm90IHdvcmsgcmlnaHQgbm93LgorCitUbyBtYWtlIGEgc2hhbGxvdyBjbG9uZSwgeW91IGNhbiBjYWxsICJnaXQtY2xvbmUgLS1kZXB0aCAyMCByZXBvIi4KK1RoZSByZXN1bHQgY29udGFpbnMgb25seSBjb21taXQgY2hhaW5zIHdpdGggYSBsZW5ndGggb2YgYXQgbW9zdCAyMC4KK0l0IGFsc28gd3JpdGVzIGFuIGFwcHJvcHJpYXRlICRHSVRfRElSL3NoYWxsb3cuCisKK1lvdSBjYW4gZGVlcGVuIGEgc2hhbGxvdyByZXBvc2l0b3J5IHdpdGggImdpdC1mZXRjaCAtLWRlcHRoIDIwCityZXBvIGJyYW5jaCIsIHdoaWNoIHdpbGwgZmV0Y2ggYnJhbmNoIGZyb20gcmVwbywgYnV0IHN0b3AgYXQgZGVwdGgKKzIwLCB1cGRhdGluZyAkR0lUX0RJUi9zaGFsbG93LgorCitUaGUgc3BlY2lhbCBkZXB0aCAyMTQ3NDgzNjQ3IChvciAweDdmZmZmZmZmLCB0aGUgbGFyZ2VzdCBwb3NpdGl2ZQorbnVtYmVyIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNhbiBjb250YWluKSBtZWFucyBpbmZpbml0ZSBkZXB0aC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3NpZ25hdHVyZS1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2lnbmF0dXJlLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5NDA2YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3NpZ25hdHVyZS1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMTg2IEBACitHaXQgc2lnbmF0dXJlIGZvcm1hdAorPT09PT09PT09PT09PT09PT09PT0KKworPT0gT3ZlcnZpZXcKKworR2l0IHVzZXMgY3J5cHRvZ3JhcGhpYyBzaWduYXR1cmVzIGluIHZhcmlvdXMgcGxhY2VzLCBjdXJyZW50bHkgb2JqZWN0cyAodGFncywKK2NvbW1pdHMsIG1lcmdldGFncykgYW5kIHRyYW5zYWN0aW9ucyAocHVzaGVzKS4gSW4gZXZlcnkgY2FzZSwgdGhlIGNvbW1hbmQgd2hpY2gKK2lzIGFib3V0IHRvIGNyZWF0ZSBhbiBvYmplY3Qgb3IgdHJhbnNhY3Rpb24gZGV0ZXJtaW5lcyBhIHBheWxvYWQgZnJvbSB0aGF0LAorY2FsbHMgZ3BnIHRvIG9idGFpbiBhIGRldGFjaGVkIHNpZ25hdHVyZSBmb3IgdGhlIHBheWxvYWQgKGBncGcgLWJzYWApIGFuZAorZW1iZWRzIHRoZSBzaWduYXR1cmUgaW50byB0aGUgb2JqZWN0IG9yIHRyYW5zYWN0aW9uLgorCitTaWduYXR1cmVzIGFsd2F5cyBiZWdpbiB3aXRoIGAtLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLWAKK2FuZCBlbmQgd2l0aCBgLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tYCwgdW5sZXNzIGdwZyBpcyB0b2xkIHRvCitwcm9kdWNlIFJGQzE5OTEgc2lnbmF0dXJlcyB3aGljaCB1c2UgYE1FU1NBR0VgIGluc3RlYWQgb2YgYFNJR05BVFVSRWAuCisKK1RoZSBzaWduZWQgcGF5bG9hZCBhbmQgdGhlIHdheSB0aGUgc2lnbmF0dXJlIGlzIGVtYmVkZGVkIGRlcGVuZHMKK29uIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgcmVzcC4gdHJhbnNhY3Rpb24uCisKKz09IFRhZyBzaWduYXR1cmVzCisKKy0gY3JlYXRlZCBieTogYGdpdCB0YWcgLXNgCistIHBheWxvYWQ6IGFubm90YXRlZCB0YWcgb2JqZWN0CistIGVtYmVkZGluZzogYXBwZW5kIHRoZSBzaWduYXR1cmUgdG8gdGhlIHVuc2lnbmVkIHRhZyBvYmplY3QKKy0gZXhhbXBsZTogdGFnIGBzaWduZWR0YWdgIHdpdGggc3ViamVjdCBgc2lnbmVkIHRhZ2AKKworLS0tLQorb2JqZWN0IDA0Yjg3MTc5NmRjMDQyMGY4ZTc1NjFhODk1YjUyNDg0YjcwMWQ1MWEKK3R5cGUgY29tbWl0Cit0YWcgc2lnbmVkdGFnCit0YWdnZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxNDY1OTgxMDA2ICswMDAwCisKK3NpZ25lZCB0YWcKKworc2lnbmVkIHRhZyBtZXNzYWdlIGJvZHkKKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiBHbnVQRyB2MQorCitpUUVjQkFBQkFnQUdCUUpYWVJoT0FBb0pFR0VKTG9XM0luR0prbGtJQUljbmhMN1J3RWIvK1FlWDllbmtYaHhuCityeGZkcXJ2V2QxSzgwc2wyVE90OEJnL05Zd3JVQncvUldKK3NnL2hoSHA0V3R2RTFIREdIbGtFejN5MTFMa3VoCis4dFN4UzNxS1R4WFVHb3p5UEd1RTkwc0pmRXhoWmxXNGtuSVExd3QveVdxTSszM0U5cE40aHpQcUx3eXJkb2RzCitxOEZXRXFQUFViU0pYb01iUlB3MDRTNWpyTHRaU3NVV2JSWWptSkNIemxoU2ZGV1c0ZUZkMzd1cXVJYUxVQlMwCitya0MzSnJ4NzQyMGprSXBnRmNUSTJzNjB1aFNRTHpnY0N3ZEEydWtTWUlSbmpnL3pEa2o4KzNoL0dhUk9KNzJ4CitsWnlJNkhXaXhLSmtXdzhsRTlhQU9EOVRtVFc5c0ZKd2NWQXptQXVGWDJrVXJlRFVLTVpkdUdjb1JZR3BEN0U9Cis9anBYYQorLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCistLS0tCisKKy0gdmVyaWZ5IHdpdGg6IGBnaXQgdmVyaWZ5LXRhZyBbLXZdYCBvciBgZ2l0IHRhZyAtdmAKKworLS0tLQorZ3BnOiBTaWduYXR1cmUgbWFkZSBXZWQgSnVuIDE1IDEwOjU2OjQ2IDIwMTYgQ0VTVCB1c2luZyBSU0Ega2V5IElEIEI3MjI3MTg5CitncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PiIKK2dwZzogV0FSTklORzogVGhpcyBrZXkgaXMgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUhCitncGc6ICAgICAgICAgIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc2lnbmF0dXJlIGJlbG9uZ3MgdG8gdGhlIG93bmVyLgorUHJpbWFyeSBrZXkgZmluZ2VycHJpbnQ6IEQ0QkUgMjIzMSAxQUQzIDEzMUUgNUVEQSAgMjlBNCA2MTA5IDJFODUgQjcyMiA3MTg5CitvYmplY3QgMDRiODcxNzk2ZGMwNDIwZjhlNzU2MWE4OTViNTI0ODRiNzAxZDUxYQordHlwZSBjb21taXQKK3RhZyBzaWduZWR0YWcKK3RhZ2dlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDE0NjU5ODEwMDYgKzAwMDAKKworc2lnbmVkIHRhZworCitzaWduZWQgdGFnIG1lc3NhZ2UgYm9keQorLS0tLQorCis9PSBDb21taXQgc2lnbmF0dXJlcworCistIGNyZWF0ZWQgYnk6IGBnaXQgY29tbWl0IC1TYAorLSBwYXlsb2FkOiBjb21taXQgb2JqZWN0CistIGVtYmVkZGluZzogaGVhZGVyIGVudHJ5IGBncGdzaWdgCisgIChjb250ZW50IGlzIHByZWNlZGVkIGJ5IGEgc3BhY2UpCistIGV4YW1wbGU6IGNvbW1pdCB3aXRoIHN1YmplY3QgYHNpZ25lZCBjb21taXRgCisKKy0tLS0KK3RyZWUgZWViZmVkOTRlNzVlNzc2MDU0MGQxNDg1Yzc0MDkwMjU5MGEwMDMzMgorcGFyZW50IDA0Yjg3MTc5NmRjMDQyMGY4ZTc1NjFhODk1YjUyNDg0YjcwMWQ1MWEKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxNDY1OTgxMTM3ICswMDAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxNDY1OTgxMTM3ICswMDAwCitncGdzaWcgLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KKyBWZXJzaW9uOiBHbnVQRyB2MQorCisgaVFFY0JBQUJBZ0FHQlFKWFlSalJBQW9KRUdFSkxvVzNJbkdKM0l3SUFJWTRTQTZHeFkzQmpMNjBZeXZzSlBoLworIEhSQ0p3SCt3N3d0M1ljLzkvYlcyRitnRjcya2RIT09zMmpmditPWmhxMHE0T0FONmZ2VlNjeklTWS84MkxwUzcKKyBEVmRNUWoyL1ljSERUNHhyRE5CblhudmlETzlHN2FtLzlPRTc3a0ViWHJwN1FQeHZoamtpY0hOd3kyckVmbEFBCisgem4wNzVydEVFUkRIcjhuUllpRGg4ZVZyZWZTTzdEK2JkUTdndis3R3NZTXNkMmF1SldpMWRIT1NmVHI5SElGNAorIEhKaFdYVDlkMmY4VytkaVJZWEdoNFgwd1lpR2c2bmEvc29YYyt2ZHREWUJ6SXhhblJxamc4akNBZW8xZU9UazEKKyBFZFR3aGNUWmxJMHg1cHZKM0gwKzRoQTJqdGxkVnRtUE00T1RCMGNUckVXQmFkN1hWNllnaXl1SUk3M1ZlM0k9CisgPWpLSE0KKyAtLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KKworc2lnbmVkIGNvbW1pdAorCitzaWduZWQgY29tbWl0IG1lc3NhZ2UgYm9keQorLS0tLQorCistIHZlcmlmeSB3aXRoOiBgZ2l0IHZlcmlmeS1jb21taXQgWy12XWAgKG9yIGBnaXQgc2hvdyAtLXNob3ctc2lnbmF0dXJlYCkKKworLS0tLQorZ3BnOiBTaWduYXR1cmUgbWFkZSBXZWQgSnVuIDE1IDEwOjU4OjU3IDIwMTYgQ0VTVCB1c2luZyBSU0Ega2V5IElEIEI3MjI3MTg5CitncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PiIKK2dwZzogV0FSTklORzogVGhpcyBrZXkgaXMgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUhCitncGc6ICAgICAgICAgIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc2lnbmF0dXJlIGJlbG9uZ3MgdG8gdGhlIG93bmVyLgorUHJpbWFyeSBrZXkgZmluZ2VycHJpbnQ6IEQ0QkUgMjIzMSAxQUQzIDEzMUUgNUVEQSAgMjlBNCA2MTA5IDJFODUgQjcyMiA3MTg5Cit0cmVlIGVlYmZlZDk0ZTc1ZTc3NjA1NDBkMTQ4NWM3NDA5MDI1OTBhMDAzMzIKK3BhcmVudCAwNGI4NzE3OTZkYzA0MjBmOGU3NTYxYTg5NWI1MjQ4NGI3MDFkNTFhCithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTQ2NTk4MTEzNyArMDAwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTQ2NTk4MTEzNyArMDAwMAorCitzaWduZWQgY29tbWl0CisKK3NpZ25lZCBjb21taXQgbWVzc2FnZSBib2R5CistLS0tCisKKz09IE1lcmdldGFnIHNpZ25hdHVyZXMKKworLSBjcmVhdGVkIGJ5OiBgZ2l0IG1lcmdlYCBvbiBzaWduZWQgdGFnCistIHBheWxvYWQvZW1iZWRkaW5nOiB0aGUgd2hvbGUgc2lnbmVkIHRhZyBvYmplY3QgaXMgZW1iZWRkZWQgaW50bworICB0aGUgKG1lcmdlKSBjb21taXQgb2JqZWN0IGFzIGhlYWRlciBlbnRyeSBgbWVyZ2V0YWdgCistIGV4YW1wbGU6IG1lcmdlIG9mIHRoZSBzaWduZWQgdGFnIGBzaWduZWR0YWdgIGFzIGFib3ZlCisKKy0tLS0KK3RyZWUgYzdiMWNmZjAzOWE5M2YzNjAwYTFkMThiODJkMjY2ODg2NjhjN2RlYQorcGFyZW50IGMzMzQyOWJlOTRiNWYyZDNlZTliMGFkYWQyMjNmODc3ZjE3NGIwNWQKK3BhcmVudCAwNGI4NzE3OTZkYzA0MjBmOGU3NTYxYTg5NWI1MjQ4NGI3MDFkNTFhCithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTQ2NTk4MjAwOSArMDAwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTQ2NTk4MjAwOSArMDAwMAorbWVyZ2V0YWcgb2JqZWN0IDA0Yjg3MTc5NmRjMDQyMGY4ZTc1NjFhODk1YjUyNDg0YjcwMWQ1MWEKKyB0eXBlIGNvbW1pdAorIHRhZyBzaWduZWR0YWcKKyB0YWdnZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxNDY1OTgxMDA2ICswMDAwCisKKyBzaWduZWQgdGFnCisKKyBzaWduZWQgdGFnIG1lc3NhZ2UgYm9keQorIC0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCisgVmVyc2lvbjogR251UEcgdjEKKworIGlRRWNCQUFCQWdBR0JRSlhZUmhPQUFvSkVHRUpMb1czSW5HSmtsa0lBSWNuaEw3UndFYi8rUWVYOWVua1hoeG4KKyByeGZkcXJ2V2QxSzgwc2wyVE90OEJnL05Zd3JVQncvUldKK3NnL2hoSHA0V3R2RTFIREdIbGtFejN5MTFMa3VoCisgOHRTeFMzcUtUeFhVR296eVBHdUU5MHNKZkV4aFpsVzRrbklRMXd0L3lXcU0rMzNFOXBONGh6UHFMd3lyZG9kcworIHE4RldFcVBQVWJTSlhvTWJSUHcwNFM1anJMdFpTc1VXYlJZam1KQ0h6bGhTZkZXVzRlRmQzN3VxdUlhTFVCUzAKKyBya0MzSnJ4NzQyMGprSXBnRmNUSTJzNjB1aFNRTHpnY0N3ZEEydWtTWUlSbmpnL3pEa2o4KzNoL0dhUk9KNzJ4CisgbFp5STZIV2l4S0prV3c4bEU5YUFPRDlUbVRXOXNGSndjVkF6bUF1Rlgya1VyZURVS01aZHVHY29SWUdwRDdFPQorID1qcFhhCisgLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCisKK01lcmdlIHRhZyAnc2lnbmVkdGFnJyBpbnRvIGRvd25zdHJlYW0KKworc2lnbmVkIHRhZworCitzaWduZWQgdGFnIG1lc3NhZ2UgYm9keQorCisjIGdwZzogU2lnbmF0dXJlIG1hZGUgV2VkIEp1biAxNSAwODo1Njo0NiAyMDE2IFVUQyB1c2luZyBSU0Ega2V5IElEIEI3MjI3MTg5CisjIGdwZzogR29vZCBzaWduYXR1cmUgZnJvbSAiRXJpcyBEaXNjb3JkaWEgPGRpc2NvcmRAZXhhbXBsZS5uZXQ+IgorIyBncGc6IFdBUk5JTkc6IFRoaXMga2V5IGlzIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlIQorIyBncGc6ICAgICAgICAgIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc2lnbmF0dXJlIGJlbG9uZ3MgdG8gdGhlIG93bmVyLgorIyBQcmltYXJ5IGtleSBmaW5nZXJwcmludDogRDRCRSAyMjMxIDFBRDMgMTMxRSA1RURBICAyOUE0IDYxMDkgMkU4NSBCNzIyIDcxODkKKy0tLS0KKworLSB2ZXJpZnkgd2l0aDogdmVyaWZpY2F0aW9uIGlzIGVtYmVkZGVkIGluIG1lcmdlIGNvbW1pdCBtZXNzYWdlIGJ5IGRlZmF1bHQsCisgIGFsdGVybmF0aXZlbHkgd2l0aCBgZ2l0IHNob3cgLS1zaG93LXNpZ25hdHVyZWA6CisKKy0tLS0KK2NvbW1pdCA5ODYzZjBjNzZmZjc4NzEyYjY4MDBlMTk5YTQ2YWE1NmFmYmNiZDQ5CittZXJnZWQgdGFnICdzaWduZWR0YWcnCitncGc6IFNpZ25hdHVyZSBtYWRlIFdlZCBKdW4gMTUgMTA6NTY6NDYgMjAxNiBDRVNUIHVzaW5nIFJTQSBrZXkgSUQgQjcyMjcxODkKK2dwZzogR29vZCBzaWduYXR1cmUgZnJvbSAiRXJpcyBEaXNjb3JkaWEgPGRpc2NvcmRAZXhhbXBsZS5uZXQ+IgorZ3BnOiBXQVJOSU5HOiBUaGlzIGtleSBpcyBub3QgY2VydGlmaWVkIHdpdGggYSB0cnVzdGVkIHNpZ25hdHVyZSEKK2dwZzogICAgICAgICAgVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBzaWduYXR1cmUgYmVsb25ncyB0byB0aGUgb3duZXIuCitQcmltYXJ5IGtleSBmaW5nZXJwcmludDogRDRCRSAyMjMxIDFBRDMgMTMxRSA1RURBICAyOUE0IDYxMDkgMkU4NSBCNzIyIDcxODkKK01lcmdlOiBjMzM0MjliIDA0Yjg3MTcKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAxNSAwOToxMzoyOSAyMDE2ICswMDAwCisKKyAgICBNZXJnZSB0YWcgJ3NpZ25lZHRhZycgaW50byBkb3duc3RyZWFtCisKKyAgICBzaWduZWQgdGFnCisKKyAgICBzaWduZWQgdGFnIG1lc3NhZ2UgYm9keQorCisgICAgIyBncGc6IFNpZ25hdHVyZSBtYWRlIFdlZCBKdW4gMTUgMDg6NTY6NDYgMjAxNiBVVEMgdXNpbmcgUlNBIGtleSBJRCBCNzIyNzE4OQorICAgICMgZ3BnOiBHb29kIHNpZ25hdHVyZSBmcm9tICJFcmlzIERpc2NvcmRpYSA8ZGlzY29yZEBleGFtcGxlLm5ldD4iCisgICAgIyBncGc6IFdBUk5JTkc6IFRoaXMga2V5IGlzIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlIQorICAgICMgZ3BnOiAgICAgICAgICBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhlIHNpZ25hdHVyZSBiZWxvbmdzIHRvIHRoZSBvd25lci4KKyAgICAjIFByaW1hcnkga2V5IGZpbmdlcnByaW50OiBENEJFIDIyMzEgMUFEMyAxMzFFIDVFREEgIDI5QTQgNjEwOSAyRTg1IEI3MjIgNzE4OQorLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvdHJpdmlhbC1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC90cml2aWFsLW1lcmdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjFjMzNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvdHJpdmlhbC1tZXJnZS50eHQKQEAgLTAsMCArMSwxMjEgQEAKK1RyaXZpYWwgbWVyZ2UgcnVsZXMKKz09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIG91dGNvbWVzIG9mIHRoZSB0cml2aWFsIG1lcmdlIGxvZ2ljIGluIHJlYWQtdHJlZS4KKworT25lLXdheSBtZXJnZQorLS0tLS0tLS0tLS0tLQorCitUaGlzIHJlcGxhY2VzIHRoZSBpbmRleCB3aXRoIGEgZGlmZmVyZW50IHRyZWUsIGtlZXBpbmcgdGhlIHN0YXQgaW5mbworZm9yIGVudHJpZXMgdGhhdCBkb24ndCBjaGFuZ2UsIGFuZCBhbGxvd2luZyAtdSB0byBtYWtlIHRoZSBtaW5pbXVtCityZXF1aXJlZCBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nIHRyZWUgdG8gaGF2ZSBpdCBtYXRjaC4KKworRW50cmllcyBtYXJrZWQgJysnIGhhdmUgc3RhdCBpbmZvcm1hdGlvbi4gU3BhY2VzIG1hcmtlZCAnKicgZG9uJ3QKK2FmZmVjdCB0aGUgcmVzdWx0LgorCisgICBpbmRleCAgIHRyZWUgICAgcmVzdWx0CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgICAgICAoZW1wdHkpIChlbXB0eSkKKyAgIChlbXB0eSkgdHJlZSAgICB0cmVlCisgICBpbmRleCsgIHRyZWUgICAgdHJlZQorICAgaW5kZXgrICBpbmRleCAgIGluZGV4KworCitUd28td2F5IG1lcmdlCistLS0tLS0tLS0tLS0tCisKK0l0IGlzIHBlcm1pdHRlZCBmb3IgdGhlIGluZGV4IHRvIGxhY2sgYW4gZW50cnk7IHRoaXMgZG9lcyBub3QgcHJldmVudAorYW55IGNhc2UgZnJvbSBhcHBseWluZy4KKworSWYgdGhlIGluZGV4IGV4aXN0cywgaXQgaXMgYW4gZXJyb3IgZm9yIGl0IG5vdCB0byBtYXRjaCBlaXRoZXIgdGhlIG9sZAorb3IgdGhlIHJlc3VsdC4KKworSWYgbXVsdGlwbGUgY2FzZXMgYXBwbHksIHRoZSBvbmUgdXNlZCBpcyBsaXN0ZWQgZmlyc3QuCisKK0EgcmVzdWx0IHdoaWNoIGNoYW5nZXMgdGhlIGluZGV4IGlzIGFuIGVycm9yIGlmIHRoZSBpbmRleCBpcyBub3QgZW1wdHkKK2FuZCBub3QgdXAgdG8gZGF0ZS4KKworRW50cmllcyBtYXJrZWQgJysnIGhhdmUgc3RhdCBpbmZvcm1hdGlvbi4gU3BhY2VzIG1hcmtlZCAnKicgZG9uJ3QKK2FmZmVjdCB0aGUgcmVzdWx0LgorCisgY2FzZSAgaW5kZXggICBvbGQgICAgIG5ldyAgICAgcmVzdWx0CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDAvMiAgIChlbXB0eSkgKiAgICAgICAoZW1wdHkpIChlbXB0eSkKKyAxLzMgICAoZW1wdHkpICogICAgICAgbmV3ICAgICBuZXcKKyA0LzUgICBpbmRleCsgIChlbXB0eSkgKGVtcHR5KSBpbmRleCsKKyA2LzcgICBpbmRleCsgIChlbXB0eSkgaW5kZXggICBpbmRleCsKKyAxMCAgICBpbmRleCsgIGluZGV4ICAgKGVtcHR5KSAoZW1wdHkpCisgMTQvMTUgaW5kZXgrICBvbGQgICAgIG9sZCAgICAgaW5kZXgrCisgMTgvMTkgaW5kZXgrICBvbGQgICAgIGluZGV4ICAgaW5kZXgrCisgMjAgICAgaW5kZXgrICBpbmRleCAgIG5ldyAgICAgbmV3CisKK1RocmVlLXdheSBtZXJnZQorLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIHBlcm1pdHRlZCBmb3IgdGhlIGluZGV4IHRvIGxhY2sgYW4gZW50cnk7IHRoaXMgZG9lcyBub3QgcHJldmVudAorYW55IGNhc2UgZnJvbSBhcHBseWluZy4KKworSWYgdGhlIGluZGV4IGV4aXN0cywgaXQgaXMgYW4gZXJyb3IgZm9yIGl0IG5vdCB0byBtYXRjaCBlaXRoZXIgdGhlCitoZWFkIG9yIChpZiB0aGUgbWVyZ2UgaXMgdHJpdmlhbCkgdGhlIHJlc3VsdC4KKworSWYgbXVsdGlwbGUgY2FzZXMgYXBwbHksIHRoZSBvbmUgdXNlZCBpcyBsaXN0ZWQgZmlyc3QuCisKK0EgcmVzdWx0IG9mICJubyBtZXJnZSIgbWVhbnMgdGhhdCBpbmRleCBpcyBsZWZ0IGluIHN0YWdlIDAsIGFuY2VzdCBpbgorc3RhZ2UgMSwgaGVhZCBpbiBzdGFnZSAyLCBhbmQgcmVtb3RlIGluIHN0YWdlIDMgKGlmIGFueSBvZiB0aGVzZSBhcmUKK2VtcHR5LCBubyBlbnRyeSBpcyBsZWZ0IGZvciB0aGF0IHN0YWdlKS4gT3RoZXJ3aXNlLCB0aGUgZ2l2ZW4gZW50cnkgaXMKK2xlZnQgaW4gc3RhZ2UgMCwgYW5kIHRoZXJlIGFyZSBubyBvdGhlciBlbnRyaWVzLgorCitBIHJlc3VsdCBvZiAibm8gbWVyZ2UiIGlzIGFuIGVycm9yIGlmIHRoZSBpbmRleCBpcyBub3QgZW1wdHkgYW5kIG5vdAordXAgdG8gZGF0ZS4KKworKmVtcHR5KiBtZWFucyB0aGF0IHRoZSB0cmVlIG11c3Qgbm90IGhhdmUgYSBkaXJlY3RvcnktZmlsZSBjb25mbGljdAorIHdpdGggdGhlIGVudHJ5LgorCitGb3IgbXVsdGlwbGUgYW5jZXN0b3JzLCBhICcrJyBtZWFucyB0aGF0IHRoaXMgY2FzZSBhcHBsaWVzIGV2ZW4gaWYKK29ubHkgb25lIGFuY2VzdG9yIG9yIHJlbW90ZSBmaXRzOyBhICdeJyBtZWFucyBhbGwgb2YgdGhlIGFuY2VzdG9ycworbXVzdCBiZSB0aGUgc2FtZS4KKworIGNhc2UgIGFuY2VzdCAgICBoZWFkICAgIHJlbW90ZSAgICByZXN1bHQKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSAgICAgKGVtcHR5KSsgIChlbXB0eSkgKGVtcHR5KSAgIChlbXB0eSkKKyAyQUxUICAoZW1wdHkpKyAgKmVtcHR5KiByZW1vdGUgICAgcmVtb3RlCisgMiAgICAgKGVtcHR5KV4gIChlbXB0eSkgcmVtb3RlICAgIG5vIG1lcmdlCisgM0FMVCAgKGVtcHR5KSsgIGhlYWQgICAgKmVtcHR5KiAgIGhlYWQKKyAzICAgICAoZW1wdHkpXiAgaGVhZCAgICAoZW1wdHkpICAgbm8gbWVyZ2UKKyA0ICAgICAoZW1wdHkpXiAgaGVhZCAgICByZW1vdGUgICAgbm8gbWVyZ2UKKyA1QUxUICAqICAgICAgICAgaGVhZCAgICBoZWFkICAgICAgaGVhZAorIDYgICAgIGFuY2VzdCsgICAoZW1wdHkpIChlbXB0eSkgICBubyBtZXJnZQorIDggICAgIGFuY2VzdF4gICAoZW1wdHkpIGFuY2VzdCAgICBubyBtZXJnZQorIDcgICAgIGFuY2VzdCsgICAoZW1wdHkpIHJlbW90ZSAgICBubyBtZXJnZQorIDEwICAgIGFuY2VzdF4gICBhbmNlc3QgIChlbXB0eSkgICBubyBtZXJnZQorIDkgICAgIGFuY2VzdCsgICBoZWFkICAgIChlbXB0eSkgICBubyBtZXJnZQorIDE2ICAgIGFuYzEvYW5jMiBhbmMxICAgIGFuYzIgICAgICBubyBtZXJnZQorIDEzICAgIGFuY2VzdCsgICBoZWFkICAgIGFuY2VzdCAgICBoZWFkCisgMTQgICAgYW5jZXN0KyAgIGFuY2VzdCAgcmVtb3RlICAgIHJlbW90ZQorIDExICAgIGFuY2VzdCsgICBoZWFkICAgIHJlbW90ZSAgICBubyBtZXJnZQorCitPbmx5ICMyQUxUIGFuZCAjM0FMVCB1c2UgKmVtcHR5KiwgYmVjYXVzZSB0aGVzZSBhcmUgdGhlIG9ubHkgY2FzZXMKK3doZXJlIHRoZXJlIGNhbiBiZSBjb25mbGljdHMgdGhhdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLiBOb3RlIHRoYXQgd2UKK2FsbG93IGRpcmVjdG9yeS1maWxlIGNvbmZsaWN0cyBiZXR3ZWVuIHRoaW5ncyBpbiBkaWZmZXJlbnQgc3RhZ2VzCithZnRlciB0aGUgdHJpdmlhbCBtZXJnZS4KKworQSBwb3NzaWJsZSBhbHRlcm5hdGl2ZSBmb3IgIzYgaXMgKGVtcHR5KSwgd2hpY2ggd291bGQgbWFrZSBpdCBsaWtlCisjMS4gVGhpcyBpcyBub3QgdXNlZCwgZHVlIHRvIHRoZSBsaWtlbGlob29kIHRoYXQgaXQgYXJpc2VzIGR1ZSB0bworbW92aW5nIHRoZSBmaWxlIHRvIG11bHRpcGxlIGRpZmZlcmVudCBsb2NhdGlvbnMgb3IgbW92aW5nIGFuZCBkZWxldGluZworaXQgaW4gZGlmZmVyZW50IGJyYW5jaGVzLgorCitDYXNlICMxIGlzIGluY2x1ZGVkIGZvciBjb21wbGV0ZW5lc3MsIGFuZCBhbHNvIGluIGNhc2Ugd2UgZGVjaWRlIHRvCitwdXQgb24gJysnIG1hcmtpbmdzOyBhbnkgcGF0aCB0aGF0IGlzIG5ldmVyIG1lbnRpb25lZCBhdCBhbGwgaXNuJ3QKK2hhbmRsZWQuCisKK05vdGUgdGhhdCAjMTYgaXMgd2hlbiBib3RoICMxMyBhbmQgIzE0IGFwcGx5OyBpbiB0aGlzIGNhc2UsIHdlIHJlZnVzZQordGhlIHRyaXZpYWwgbWVyZ2UsIGJlY2F1c2Ugd2UgY2FuJ3QgdGVsbCBmcm9tIHRoaXMgZGF0YSB3aGljaCBpcworcmlnaHQuIFRoaXMgaXMgYSBjYXNlIG9mIGEgcmV2ZXJ0ZWQgcGF0Y2ggKGluIHNvbWUgZGlyZWN0aW9uLCBtYXliZQorbXVsdGlwbGUgdGltZXMpLCBhbmQgdGhlIHJpZ2h0IGFuc3dlciBkZXBlbmRzIG9uIGxvb2tpbmcgYXQgY3Jvc3NpbmdzCitvZiBoaXN0b3J5IG9yIGNvbW1vbiBhbmNlc3RvcnMgb2YgdGhlIGFuY2VzdG9ycy4KKworTm90ZSB0aGF0LCBiZXR3ZWVuICM2LCAjNywgIzksIGFuZCAjMTEsIGFsbCBjYXNlcyBub3Qgb3RoZXJ3aXNlCitjb3ZlcmVkIGFyZSBoYW5kbGVkIGluIHRoaXMgdGFibGUuCisKK0ZvciAjOCBhbmQgIzEwLCB0aGVyZSBpcyBhbHRlcm5hdGl2ZSBiZWhhdmlvciwgbm90IGN1cnJlbnRseQoraW1wbGVtZW50ZWQsIHdoZXJlIHRoZSByZXN1bHQgaXMgKGVtcHR5KS4gQXMgY3VycmVudGx5IGltcGxlbWVudGVkLAordGhlIGF1dG9tYXRpYyBtZXJnZSB3aWxsIGdlbmVyYWxseSBnaXZlIHRoaXMgZWZmZWN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZXhpLnhzbCBiL0RvY3VtZW50YXRpb24vdGV4aS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4ZmYwNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGV4aS54c2wKQEAgLTAsMCArMSwyNiBAQAorPCEtLSB0ZXhpLnhzbDoKKyAgICAgY29udmVydCByZWZzZWN0aW9uIGVsZW1lbnRzIGludG8gcmVmc2VjdCBlbGVtZW50cyB0aGF0IGRvY2Jvb2sydGV4aSBjYW4KKyAgICAgdW5kZXJzdGFuZCAtLT4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiCisJICAgIGVuY29kaW5nPSJVVEYtOCIKKwkgICAgZG9jdHlwZS1wdWJsaWM9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNS8vRU4iCisJICAgIGRvY3R5cGUtc3lzdGVtPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiIC8+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8vcmVmc2VjdGlvbiI+CisJPHhzbDp2YXJpYWJsZSBuYW1lPSJlbGVtZW50Ij5yZWZzZWN0PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGFuY2VzdG9yLW9yLXNlbGY6OnJlZnNlY3Rpb24pIiAvPjwveHNsOnZhcmlhYmxlPgorCTx4c2w6ZWxlbWVudCBuYW1lPSJ7JGVsZW1lbnR9Ij4KKwkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAKnxub2RlKCkiIC8+CisJPC94c2w6ZWxlbWVudD4KKzwveHNsOnRlbXBsYXRlPgorCis8IS0tIENvcHkgYWxsIG90aGVyIG5vZGVzIHRocm91Z2guIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibm9kZSgpfEAqIj4KKwk8eHNsOmNvcHk+CisJCTx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQCp8bm9kZSgpIiAvPgorCTwveHNsOmNvcHk+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UyLXRhcmdldC12YWx1ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZTItdGFyZ2V0LXZhbHVlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4NWI2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UyLXRhcmdldC12YWx1ZXMudHh0CkBAIC0wLDAgKzEsMTIgQEAKKy0tCisqIGAwYCBvciBgZmFsc2VgIC0gRGlzYWJsZXMgdGhlIHRhcmdldC4KKyogYDFgIG9yIGB0cnVlYCAtIFdyaXRlcyB0byBgU1RERVJSYC4KKyogYFsyLTldYCAtIFdyaXRlcyB0byB0aGUgYWxyZWFkeSBvcGVuZWQgZmlsZSBkZXNjcmlwdG9yLgorKiBgPGFic29sdXRlLXBhdGhuYW1lPmAgLSBXcml0ZXMgdG8gdGhlIGZpbGUgaW4gYXBwZW5kIG1vZGUuIElmIHRoZSB0YXJnZXQKK2FscmVhZHkgZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeSwgdGhlIHRyYWNlcyB3aWxsIGJlIHdyaXR0ZW4gdG8gZmlsZXMgKG9uZQorcGVyIHByb2Nlc3MpIHVuZGVybmVhdGggdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyogYGFmX3VuaXg6Wzxzb2NrZXRfdHlwZT46XTxhYnNvbHV0ZS1wYXRobmFtZT5gIC0gV3JpdGUgdG8gYQorVW5peCBEb21haW5Tb2NrZXQgKG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbSkuICBTb2NrZXQKK3R5cGUgY2FuIGJlIGVpdGhlciBgc3RyZWFtYCBvciBgZGdyYW1gOyBpZiBvbWl0dGVkIEdpdCB3aWxsCit0cnkgYm90aC4KKy0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zZmVyLWRhdGEtbGVha3MudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFuc2Zlci1kYXRhLWxlYWtzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTRiYWNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFuc2Zlci1kYXRhLWxlYWtzLnR4dApAQCAtMCwwICsxLDMwIEBACitTRUNVUklUWQorLS0tLS0tLS0KK1RoZSBmZXRjaCBhbmQgcHVzaCBwcm90b2NvbHMgYXJlIG5vdCBkZXNpZ25lZCB0byBwcmV2ZW50IG9uZSBzaWRlIGZyb20KK3N0ZWFsaW5nIGRhdGEgZnJvbSB0aGUgb3RoZXIgcmVwb3NpdG9yeSB0aGF0IHdhcyBub3QgaW50ZW5kZWQgdG8gYmUKK3NoYXJlZC4gSWYgeW91IGhhdmUgcHJpdmF0ZSBkYXRhIHRoYXQgeW91IG5lZWQgdG8gcHJvdGVjdCBmcm9tIGEgbWFsaWNpb3VzCitwZWVyLCB5b3VyIGJlc3Qgb3B0aW9uIGlzIHRvIHN0b3JlIGl0IGluIGFub3RoZXIgcmVwb3NpdG9yeS4gVGhpcyBhcHBsaWVzCit0byBib3RoIGNsaWVudHMgYW5kIHNlcnZlcnMuIEluIHBhcnRpY3VsYXIsIG5hbWVzcGFjZXMgb24gYSBzZXJ2ZXIgYXJlIG5vdAorZWZmZWN0aXZlIGZvciByZWFkIGFjY2VzcyBjb250cm9sOyB5b3Ugc2hvdWxkIG9ubHkgZ3JhbnQgcmVhZCBhY2Nlc3MgdG8gYQorbmFtZXNwYWNlIHRvIGNsaWVudHMgdGhhdCB5b3Ugd291bGQgdHJ1c3Qgd2l0aCByZWFkIGFjY2VzcyB0byB0aGUgZW50aXJlCityZXBvc2l0b3J5LgorCitUaGUga25vd24gYXR0YWNrIHZlY3RvcnMgYXJlIGFzIGZvbGxvd3M6CisKKy4gVGhlIHZpY3RpbSBzZW5kcyAiaGF2ZSIgbGluZXMgYWR2ZXJ0aXNpbmcgdGhlIElEcyBvZiBvYmplY3RzIGl0IGhhcyB0aGF0CisgIGFyZSBub3QgZXhwbGljaXRseSBpbnRlbmRlZCB0byBiZSBzaGFyZWQgYnV0IGNhbiBiZSB1c2VkIHRvIG9wdGltaXplIHRoZQorICB0cmFuc2ZlciBpZiB0aGUgcGVlciBhbHNvIGhhcyB0aGVtLiBUaGUgYXR0YWNrZXIgY2hvb3NlcyBhbiBvYmplY3QgSUQgWAorICB0byBzdGVhbCBhbmQgc2VuZHMgYSByZWYgdG8gWCwgYnV0IGlzbid0IHJlcXVpcmVkIHRvIHNlbmQgdGhlIGNvbnRlbnQgb2YKKyAgWCBiZWNhdXNlIHRoZSB2aWN0aW0gYWxyZWFkeSBoYXMgaXQuIE5vdyB0aGUgdmljdGltIGJlbGlldmVzIHRoYXQgdGhlCisgIGF0dGFja2VyIGhhcyBYLCBhbmQgaXQgc2VuZHMgdGhlIGNvbnRlbnQgb2YgWCBiYWNrIHRvIHRoZSBhdHRhY2tlcgorICBsYXRlci4gKFRoaXMgYXR0YWNrIGlzIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGZvciBhIGNsaWVudCB0byBwZXJmb3JtIG9uIGEKKyAgc2VydmVyLCBieSBjcmVhdGluZyBhIHJlZiB0byBYIGluIHRoZSBuYW1lc3BhY2UgdGhlIGNsaWVudCBoYXMgYWNjZXNzCisgIHRvIGFuZCB0aGVuIGZldGNoaW5nIGl0LiBUaGUgbW9zdCBsaWtlbHkgd2F5IGZvciBhIHNlcnZlciB0byBwZXJmb3JtIGl0CisgIG9uIGEgY2xpZW50IGlzIHRvICJtZXJnZSIgWCBpbnRvIGEgcHVibGljIGJyYW5jaCBhbmQgaG9wZSB0aGF0IHRoZSB1c2VyCisgIGRvZXMgYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgYnJhbmNoIGFuZCBwdXNoZXMgaXQgYmFjayB0byB0aGUgc2VydmVyCisgIHdpdGhvdXQgbm90aWNpbmcgdGhlIG1lcmdlLikKKworLiBBcyBpbiAjMSwgdGhlIGF0dGFja2VyIGNob29zZXMgYW4gb2JqZWN0IElEIFggdG8gc3RlYWwuIFRoZSB2aWN0aW0gc2VuZHMKKyAgYW4gb2JqZWN0IFkgdGhhdCB0aGUgYXR0YWNrZXIgYWxyZWFkeSBoYXMsIGFuZCB0aGUgYXR0YWNrZXIgZmFsc2VseQorICBjbGFpbXMgdG8gaGF2ZSBYIGFuZCBub3QgWSwgc28gdGhlIHZpY3RpbSBzZW5kcyBZIGFzIGEgZGVsdGEgYWdhaW5zdCBYLgorICBUaGUgZGVsdGEgcmV2ZWFscyByZWdpb25zIG9mIFggdGhhdCBhcmUgc2ltaWxhciB0byBZIHRvIHRoZSBhdHRhY2tlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDE4NGNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91cmxzLXJlbW90ZXMudHh0CkBAIC0wLDAgKzEsOTQgQEAKK2luY2x1ZGU6OnVybHMudHh0W10KKworUkVNT1RFU1tbUkVNT1RFU11dCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmcgY2FuIGJlIHVzZWQgaW5zdGVhZAorb2YgYSBVUkwgYXMgYDxyZXBvc2l0b3J5PmAgYXJndW1lbnQ6CisKKyogYSByZW1vdGUgaW4gdGhlIEdpdCBjb25maWd1cmF0aW9uIGZpbGU6IGAkR0lUX0RJUi9jb25maWdgLAorKiBhIGZpbGUgaW4gdGhlIGAkR0lUX0RJUi9yZW1vdGVzYCBkaXJlY3RvcnksIG9yCisqIGEgZmlsZSBpbiB0aGUgYCRHSVRfRElSL2JyYW5jaGVzYCBkaXJlY3RvcnkuCisKK0FsbCBvZiB0aGVzZSBhbHNvIGFsbG93IHlvdSB0byBvbWl0IHRoZSByZWZzcGVjIGZyb20gdGhlIGNvbW1hbmQgbGluZQorYmVjYXVzZSB0aGV5IGVhY2ggY29udGFpbiBhIHJlZnNwZWMgd2hpY2ggZ2l0IHdpbGwgdXNlIGJ5IGRlZmF1bHQuCisKK05hbWVkIHJlbW90ZSBpbiBjb25maWd1cmF0aW9uIGZpbGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBjaG9vc2UgdG8gcHJvdmlkZSB0aGUgbmFtZSBvZiBhIHJlbW90ZSB3aGljaCB5b3UgaGFkIHByZXZpb3VzbHkKK2NvbmZpZ3VyZWQgdXNpbmcgbGlua2dpdDpnaXQtcmVtb3RlWzFdLCBsaW5rZ2l0OmdpdC1jb25maWdbMV0KK29yIGV2ZW4gYnkgYSBtYW51YWwgZWRpdCB0byB0aGUgYCRHSVRfRElSL2NvbmZpZ2AgZmlsZS4gIFRoZSBVUkwgb2YKK3RoaXMgcmVtb3RlIHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHJlcG9zaXRvcnkuICBUaGUgcmVmc3BlYworb2YgdGhpcyByZW1vdGUgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQgd2hlbiB5b3UgZG8KK25vdCBwcm92aWRlIGEgcmVmc3BlYyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIGVudHJ5IGluIHRoZQorY29uZmlnIGZpbGUgd291bGQgYXBwZWFyIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisJW3JlbW90ZSAiPG5hbWU+Il0KKwkJdXJsID0gPHVybD4KKwkJcHVzaHVybCA9IDxwdXNodXJsPgorCQlwdXNoID0gPHJlZnNwZWM+CisJCWZldGNoID0gPHJlZnNwZWM+CistLS0tLS0tLS0tLS0KKworVGhlIGA8cHVzaHVybD5gIGlzIHVzZWQgZm9yIHB1c2hlcyBvbmx5LiBJdCBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMKK3RvIGA8dXJsPmAuCisKK05hbWVkIGZpbGUgaW4gYCRHSVRfRElSL3JlbW90ZXNgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIGNob29zZSB0byBwcm92aWRlIHRoZSBuYW1lIG9mIGEKK2ZpbGUgaW4gYCRHSVRfRElSL3JlbW90ZXNgLiAgVGhlIFVSTAoraW4gdGhpcyBmaWxlIHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHJlcG9zaXRvcnkuICBUaGUgcmVmc3BlYworaW4gdGhpcyBmaWxlIHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHdoZW4geW91IGRvIG5vdAorcHJvdmlkZSBhIHJlZnNwZWMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMgZmlsZSBzaG91bGQgaGF2ZSB0aGUKK2ZvbGxvd2luZyBmb3JtYXQ6CisKKy0tLS0tLS0tLS0tLQorCVVSTDogb25lIG9mIHRoZSBhYm92ZSBVUkwgZm9ybWF0CisJUHVzaDogPHJlZnNwZWM+CisJUHVsbDogPHJlZnNwZWM+CisKKy0tLS0tLS0tLS0tLQorCitgUHVzaDpgIGxpbmVzIGFyZSB1c2VkIGJ5ICdnaXQgcHVzaCcgYW5kCitgUHVsbDpgIGxpbmVzIGFyZSB1c2VkIGJ5ICdnaXQgcHVsbCcgYW5kICdnaXQgZmV0Y2gnLgorTXVsdGlwbGUgYFB1c2g6YCBhbmQgYFB1bGw6YCBsaW5lcyBtYXkKK2JlIHNwZWNpZmllZCBmb3IgYWRkaXRpb25hbCBicmFuY2ggbWFwcGluZ3MuCisKK05hbWVkIGZpbGUgaW4gYCRHSVRfRElSL2JyYW5jaGVzYAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gY2hvb3NlIHRvIHByb3ZpZGUgdGhlIG5hbWUgb2YgYQorZmlsZSBpbiBgJEdJVF9ESVIvYnJhbmNoZXNgLgorVGhlIFVSTCBpbiB0aGlzIGZpbGUgd2lsbCBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgcmVwb3NpdG9yeS4KK1RoaXMgZmlsZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworCistLS0tLS0tLS0tLS0KKwk8dXJsPiM8aGVhZD4KKy0tLS0tLS0tLS0tLQorCitgPHVybD5gIGlzIHJlcXVpcmVkOyBgIzxoZWFkPmAgaXMgb3B0aW9uYWwuCisKK0RlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW9uLCBnaXQgd2lsbCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcKK3JlZnNwZWNzLCBpZiB5b3UgZG9uJ3QgcHJvdmlkZSBvbmUgb24gdGhlIGNvbW1hbmQgbGluZS4KK2A8YnJhbmNoPmAgaXMgdGhlIG5hbWUgb2YgdGhpcyBmaWxlIGluIGAkR0lUX0RJUi9icmFuY2hlc2AgYW5kCitgPGhlYWQ+YCBkZWZhdWx0cyB0byBgbWFzdGVyYC4KKworZ2l0IGZldGNoIHVzZXM6CisKKy0tLS0tLS0tLS0tLQorCXJlZnMvaGVhZHMvPGhlYWQ+OnJlZnMvaGVhZHMvPGJyYW5jaD4KKy0tLS0tLS0tLS0tLQorCitnaXQgcHVzaCB1c2VzOgorCistLS0tLS0tLS0tLS0KKwlIRUFEOnJlZnMvaGVhZHMvPGhlYWQ+CistLS0tLS0tLS0tLS0KKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91cmxzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyMjlkNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXJscy50eHQKQEAgLTAsMCArMSwxMDggQEAKK0dJVCBVUkxTW1tVUkxTXV0KKy0tLS0tLS0tLS0tLS0tLS0KKworSW4gZ2VuZXJhbCwgVVJMcyBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wsIHRoZQorYWRkcmVzcyBvZiB0aGUgcmVtb3RlIHNlcnZlciwgYW5kIHRoZSBwYXRoIHRvIHRoZSByZXBvc2l0b3J5LgorRGVwZW5kaW5nIG9uIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wsIHNvbWUgb2YgdGhpcyBpbmZvcm1hdGlvbiBtYXkgYmUKK2Fic2VudC4KKworR2l0IHN1cHBvcnRzIHNzaCwgZ2l0LCBodHRwLCBhbmQgaHR0cHMgcHJvdG9jb2xzIChpbiBhZGRpdGlvbiwgZnRwLAorYW5kIGZ0cHMgY2FuIGJlIHVzZWQgZm9yIGZldGNoaW5nLCBidXQgdGhpcyBpcyBpbmVmZmljaWVudCBhbmQKK2RlcHJlY2F0ZWQ7IGRvIG5vdCB1c2UgaXQpLgorCitUaGUgbmF0aXZlIHRyYW5zcG9ydCAoaS5lLiBnaXQ6Ly8gVVJMKSBkb2VzIG5vIGF1dGhlbnRpY2F0aW9uIGFuZAorc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uIG9uIHVuc2VjdXJlZCBuZXR3b3Jrcy4KKworVGhlIGZvbGxvd2luZyBzeW50YXhlcyBtYXkgYmUgdXNlZCB3aXRoIHRoZW06CisKKy0gc3NoOi8ve3N0YXJ0c2J9dXNlckB7ZW5kc2J9aG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworLSBnaXQ6Ly9ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCistIGh0dHB7c3RhcnRzYn1ze2VuZHNifTovL2hvc3QueHp7c3RhcnRzYn06cG9ydHtlbmRzYn0vcGF0aC90by9yZXBvLmdpdC8KKy0gZnRwe3N0YXJ0c2J9c3tlbmRzYn06Ly9ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCisKK0FuIGFsdGVybmF0aXZlIHNjcC1saWtlIHN5bnRheCBtYXkgYWxzbyBiZSB1c2VkIHdpdGggdGhlIHNzaCBwcm90b2NvbDoKKworLSB7c3RhcnRzYn11c2VyQHtlbmRzYn1ob3N0Lnh6OnBhdGgvdG8vcmVwby5naXQvCisKK1RoaXMgc3ludGF4IGlzIG9ubHkgcmVjb2duaXplZCBpZiB0aGVyZSBhcmUgbm8gc2xhc2hlcyBiZWZvcmUgdGhlCitmaXJzdCBjb2xvbi4gVGhpcyBoZWxwcyBkaWZmZXJlbnRpYXRlIGEgbG9jYWwgcGF0aCB0aGF0IGNvbnRhaW5zIGEKK2NvbG9uLiBGb3IgZXhhbXBsZSB0aGUgbG9jYWwgcGF0aCBgZm9vOmJhcmAgY291bGQgYmUgc3BlY2lmaWVkIGFzIGFuCithYnNvbHV0ZSBwYXRoIG9yIGAuL2ZvbzpiYXJgIHRvIGF2b2lkIGJlaW5nIG1pc2ludGVycHJldGVkIGFzIGFuIHNzaAordXJsLgorCitUaGUgc3NoIGFuZCBnaXQgcHJvdG9jb2xzIGFkZGl0aW9uYWxseSBzdXBwb3J0IH51c2VybmFtZSBleHBhbnNpb246CisKKy0gc3NoOi8ve3N0YXJ0c2J9dXNlckB7ZW5kc2J9aG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9+e3N0YXJ0c2J9dXNlcntlbmRzYn0vcGF0aC90by9yZXBvLmdpdC8KKy0gZ2l0Oi8vaG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9+e3N0YXJ0c2J9dXNlcntlbmRzYn0vcGF0aC90by9yZXBvLmdpdC8KKy0ge3N0YXJ0c2J9dXNlckB7ZW5kc2J9aG9zdC54ejovfntzdGFydHNifXVzZXJ7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCisKK0ZvciBsb2NhbCByZXBvc2l0b3JpZXMsIGFsc28gc3VwcG9ydGVkIGJ5IEdpdCBuYXRpdmVseSwgdGhlIGZvbGxvd2luZworc3ludGF4ZXMgbWF5IGJlIHVzZWQ6CisKKy0gL3BhdGgvdG8vcmVwby5naXQvCistIFxmaWxlOi8vL3BhdGgvdG8vcmVwby5naXQvCisKK2lmbmRlZjo6Z2l0LWNsb25lW10KK1RoZXNlIHR3byBzeW50YXhlcyBhcmUgbW9zdGx5IGVxdWl2YWxlbnQsIGV4Y2VwdCB3aGVuIGNsb25pbmcsIHdoZW4KK3RoZSBmb3JtZXIgaW1wbGllcyAtLWxvY2FsIG9wdGlvbi4gU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdIGZvcgorZGV0YWlscy4KK2VuZGlmOjpnaXQtY2xvbmVbXQorCitpZmRlZjo6Z2l0LWNsb25lW10KK1RoZXNlIHR3byBzeW50YXhlcyBhcmUgbW9zdGx5IGVxdWl2YWxlbnQsIGV4Y2VwdCB0aGUgZm9ybWVyIGltcGxpZXMKKy0tbG9jYWwgb3B0aW9uLgorZW5kaWY6OmdpdC1jbG9uZVtdCisKKydnaXQgY2xvbmUnLCAnZ2l0IGZldGNoJyBhbmQgJ2dpdCBwdWxsJywgYnV0IG5vdCAnZ2l0IHB1c2gnLCB3aWxsIGFsc28KK2FjY2VwdCBhIHN1aXRhYmxlIGJ1bmRsZSBmaWxlLiBTZWUgbGlua2dpdDpnaXQtYnVuZGxlWzFdLgorCitXaGVuIEdpdCBkb2Vzbid0IGtub3cgaG93IHRvIGhhbmRsZSBhIGNlcnRhaW4gdHJhbnNwb3J0IHByb3RvY29sLCBpdAorYXR0ZW1wdHMgdG8gdXNlIHRoZSAncmVtb3RlLTx0cmFuc3BvcnQ+JyByZW1vdGUgaGVscGVyLCBpZiBvbmUKK2V4aXN0cy4gVG8gZXhwbGljaXRseSByZXF1ZXN0IGEgcmVtb3RlIGhlbHBlciwgdGhlIGZvbGxvd2luZyBzeW50YXgKK21heSBiZSB1c2VkOgorCistIDx0cmFuc3BvcnQ+Ojo8YWRkcmVzcz4KKword2hlcmUgPGFkZHJlc3M+IG1heSBiZSBhIHBhdGgsIGEgc2VydmVyIGFuZCBwYXRoLCBvciBhbiBhcmJpdHJhcnkKK1VSTC1saWtlIHN0cmluZyByZWNvZ25pemVkIGJ5IHRoZSBzcGVjaWZpYyByZW1vdGUgaGVscGVyIGJlaW5nCitpbnZva2VkLiBTZWUgbGlua2dpdDpnaXRyZW1vdGUtaGVscGVyc1s3XSBmb3IgZGV0YWlscy4KKworSWYgdGhlcmUgYXJlIGEgbGFyZ2UgbnVtYmVyIG9mIHNpbWlsYXJseS1uYW1lZCByZW1vdGUgcmVwb3NpdG9yaWVzIGFuZAoreW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IGZvcm1hdCBmb3IgdGhlbSAoc3VjaCB0aGF0IHRoZSBVUkxzIHlvdQordXNlIHdpbGwgYmUgcmV3cml0dGVuIGludG8gVVJMcyB0aGF0IHdvcmspLCB5b3UgY2FuIGNyZWF0ZSBhCitjb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhlIGZvcm06CisKKy0tLS0tLS0tLS0tLQorCVt1cmwgIjxhY3R1YWwgdXJsIGJhc2U+Il0KKwkJaW5zdGVhZE9mID0gPG90aGVyIHVybCBiYXNlPgorLS0tLS0tLS0tLS0tCisKK0ZvciBleGFtcGxlLCB3aXRoIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCVt1cmwgImdpdDovL2dpdC5ob3N0Lnh6LyJdCisJCWluc3RlYWRPZiA9IGhvc3QueHo6L3BhdGgvdG8vCisJCWluc3RlYWRPZiA9IHdvcms6CistLS0tLS0tLS0tLS0KKworYSBVUkwgbGlrZSAid29yazpyZXBvLmdpdCIgb3IgbGlrZSAiaG9zdC54ejovcGF0aC90by9yZXBvLmdpdCIgd2lsbCBiZQorcmV3cml0dGVuIGluIGFueSBjb250ZXh0IHRoYXQgdGFrZXMgYSBVUkwgdG8gYmUgImdpdDovL2dpdC5ob3N0Lnh6L3JlcG8uZ2l0Ii4KKworSWYgeW91IHdhbnQgdG8gcmV3cml0ZSBVUkxzIGZvciBwdXNoIG9ubHksIHlvdSBjYW4gY3JlYXRlIGEKK2NvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tCisJW3VybCAiPGFjdHVhbCB1cmwgYmFzZT4iXQorCQlwdXNoSW5zdGVhZE9mID0gPG90aGVyIHVybCBiYXNlPgorLS0tLS0tLS0tLS0tCisKK0ZvciBleGFtcGxlLCB3aXRoIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCVt1cmwgInNzaDovL2V4YW1wbGUub3JnLyJdCisJCXB1c2hJbnN0ZWFkT2YgPSBnaXQ6Ly9leGFtcGxlLm9yZy8KKy0tLS0tLS0tLS0tLQorCithIFVSTCBsaWtlICJnaXQ6Ly9leGFtcGxlLm9yZy9wYXRoL3RvL3JlcG8uZ2l0IiB3aWxsIGJlIHJld3JpdHRlbiB0bworInNzaDovL2V4YW1wbGUub3JnL3BhdGgvdG8vcmVwby5naXQiIGZvciBwdXNoZXMsIGJ1dCBwdWxscyB3aWxsIHN0aWxsCit1c2UgdGhlIG9yaWdpbmFsIFVSTC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwuY29uZiBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODcyOTRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC5jb25mCkBAIC0wLDAgKzEsMjEgQEAKK1t0aXRsZXNdCisJdW5kZXJsaW5lcz0iX18iLCI9PSIsIi0tIiwifn4iLCJeXiIKKworW2F0dHJpYnV0ZXNdCitjYXJldD1eCitzdGFydHNiPSYjOTE7CitlbmRzYj0mIzkzOwordGlsZGU9JiMxMjY7CisKK1tsaW5rZ2l0LWlubGluZW1hY3JvXQorPHVsaW5rIHVybD0ie3RhcmdldH0uaHRtbCI+e3RhcmdldH17MD8oezB9KX08L3VsaW5rPgorCitpZmRlZjo6YmFja2VuZC1kb2Nib29rW10KKyMgInVuYnJlYWsiIGRvY2Jvb2steHNsIHYxLjY4IGZvciBtYW5wYWdlcy4gdjEuNjkgd29ya3Mgd2l0aCBvciB3aXRob3V0IHRoaXMuCitbbGlzdGluZ2Jsb2NrXQorPGV4YW1wbGU+PHRpdGxlPnt0aXRsZX08L3RpdGxlPgorPGxpdGVyYWxsYXlvdXQgY2xhc3M9Im1vbm9zcGFjZWQiPgorfAorPC9saXRlcmFsbGF5b3V0Pgore3RpdGxlI308L2V4YW1wbGU+CitlbmRpZjo6YmFja2VuZC1kb2Nib29rW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0IGIvRG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzNjUyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CkBAIC0wLDAgKzEsNDU3OCBAQAorPSBHaXQgVXNlciBNYW51YWwKKworR2l0IGlzIGEgZmFzdCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbS4KKworVGhpcyBtYW51YWwgaXMgZGVzaWduZWQgdG8gYmUgcmVhZGFibGUgYnkgc29tZW9uZSB3aXRoIGJhc2ljIFVOSVgKK2NvbW1hbmQtbGluZSBza2lsbHMsIGJ1dCBubyBwcmV2aW91cyBrbm93bGVkZ2Ugb2YgR2l0LgorCis8PHJlcG9zaXRvcmllcy1hbmQtYnJhbmNoZXM+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+Ly5naXRjb25maWcgPDxcRU9GCitbdXNlcl0KKwluYW1lID0gWW91ciBOYW1lIENvbWVzIEhlcmUKKwllbWFpbCA9IHlvdUB5b3VyZG9tYWluLmV4YW1wbGUuY29tCitFT0YKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWxlY3QgZmlsZSBjb250ZW50cyB0byBpbmNsdWRlIGluIHRoZSBuZXh0IGNvbW1pdCwgdGhlbiBtYWtlIHRoZQorY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGEudHh0ICAgICMgdXBkYXRlZCBmaWxlCiskIGdpdCBhZGQgYi50eHQgICAgIyBuZXcgZmlsZQorJCBnaXQgcm0gYy50eHQgICAgICMgb2xkIGZpbGUKKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IsIHByZXBhcmUgYW5kIGNyZWF0ZSB0aGUgY29tbWl0IGluIG9uZSBzdGVwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IGQudHh0ICMgdXNlIGxhdGVzdCBjb250ZW50IG9ubHkgb2YgZC50eHQKKyQgZ2l0IGNvbW1pdCAtYQkgICAjIHVzZSBsYXRlc3QgY29udGVudCBvZiBhbGwgdHJhY2tlZCBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1ttZXJnaW5nXV0KKz09PSBNZXJnaW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSB0ZXN0ICAgIyBtZXJnZSBicmFuY2ggInRlc3QiIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCiskIGdpdCBwdWxsIGdpdDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0IG1hc3RlcgorCQkgICAjIGZldGNoIGFuZCBtZXJnZSBpbiByZW1vdGUgYnJhbmNoCiskIGdpdCBwdWxsIC4gdGVzdCAgIyBlcXVpdmFsZW50IHRvIGdpdCBtZXJnZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW3NoYXJpbmcteW91ci1jaGFuZ2VzXV0KKz09PSBTaGFyaW5nIHlvdXIgY2hhbmdlcworCitJbXBvcnRpbmcgb3IgZXhwb3J0aW5nIHBhdGNoZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luLi5IRUFEICMgZm9ybWF0IGEgcGF0Y2ggZm9yIGVhY2ggY29tbWl0CisJCQkJIyBpbiBIRUFEIGJ1dCBub3QgaW4gb3JpZ2luCiskIGdpdCBhbSBtYm94ICMgaW1wb3J0IHBhdGNoZXMgZnJvbSB0aGUgbWFpbGJveCAibWJveCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZldGNoIGEgYnJhbmNoIGluIGEgZGlmZmVyZW50IEdpdCByZXBvc2l0b3J5LCB0aGVuIG1lcmdlIGludG8gdGhlCitjdXJyZW50IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGhlaXJicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N0b3JlIHRoZSBmZXRjaGVkIGJyYW5jaCBpbnRvIGEgbG9jYWwgYnJhbmNoIGJlZm9yZSBtZXJnaW5nIGludG8gdGhlCitjdXJyZW50IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGhlaXJicmFuY2g6bXlicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIGNyZWF0aW5nIGNvbW1pdHMgb24gYSBsb2NhbCBicmFuY2gsIHVwZGF0ZSB0aGUgcmVtb3RlCiticmFuY2ggd2l0aCB5b3VyIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIHNzaDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0IG15YnJhbmNoOnRoZWlyYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHJlbW90ZSBhbmQgbG9jYWwgYnJhbmNoIGFyZSBib3RoIG5hbWVkICJ0ZXN0IjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggc3NoOi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2hvcnRjdXQgdmVyc2lvbiBmb3IgYSBmcmVxdWVudGx5IHVzZWQgcmVtb3RlIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUgYWRkIGV4YW1wbGUgc3NoOi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQKKyQgZ2l0IHB1c2ggZXhhbXBsZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW3JlcG9zaXRvcnktbWFpbnRlbmFuY2VdXQorPT09IFJlcG9zaXRvcnkgbWFpbnRlbmFuY2UKKworQ2hlY2sgZm9yIGNvcnJ1cHRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmc2NrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWNvbXByZXNzLCByZW1vdmUgdW51c2VkIGNydWZ0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZ2MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworW1t0b2RvXV0KK1thcHBlbmRpeF0KKz09IE5vdGVzIGFuZCB0b2RvIGxpc3QgZm9yIHRoaXMgbWFudWFsCisKK1tbdG9kby1saXN0XV0KKz09PSBUb2RvIGxpc3QKKworVGhpcyBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MuCisKK1RoZSBiYXNpYyByZXF1aXJlbWVudHM6CisKKy0gSXQgbXVzdCBiZSByZWFkYWJsZSBpbiBvcmRlciwgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLCBieSBzb21lb25lCisgIGludGVsbGlnZW50IHdpdGggYSBiYXNpYyBncmFzcCBvZiB0aGUgVU5JWCBjb21tYW5kIGxpbmUsIGJ1dCB3aXRob3V0CisgIGFueSBzcGVjaWFsIGtub3dsZWRnZSBvZiBHaXQuICBJZiBuZWNlc3NhcnksIGFueSBvdGhlciBwcmVyZXF1aXNpdGVzCisgIHNob3VsZCBiZSBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGFzIHRoZXkgYXJpc2UuCistIFdoZW5ldmVyIHBvc3NpYmxlLCBzZWN0aW9uIGhlYWRpbmdzIHNob3VsZCBjbGVhcmx5IGRlc2NyaWJlIHRoZSB0YXNrCisgIHRoZXkgZXhwbGFpbiBob3cgdG8gZG8sIGluIGxhbmd1YWdlIHRoYXQgcmVxdWlyZXMgbm8gbW9yZSBrbm93bGVkZ2UKKyAgdGhhbiBuZWNlc3Nhcnk6IGZvciBleGFtcGxlLCAiaW1wb3J0aW5nIHBhdGNoZXMgaW50byBhIHByb2plY3QiIHJhdGhlcgorICB0aGFuICJ0aGUgYGdpdCBhbWAgY29tbWFuZCIKKworVGhpbmsgYWJvdXQgaG93IHRvIGNyZWF0ZSBhIGNsZWFyIGNoYXB0ZXIgZGVwZW5kZW5jeSBncmFwaCB0aGF0IHdpbGwKK2FsbG93IHBlb3BsZSB0byBnZXQgdG8gaW1wb3J0YW50IHRvcGljcyB3aXRob3V0IG5lY2Vzc2FyaWx5IHJlYWRpbmcKK2V2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4KKworU2NhbiBgRG9jdW1lbnRhdGlvbi9gIGZvciBvdGhlciBzdHVmZiBsZWZ0IG91dDsgaW4gcGFydGljdWxhcjoKKworLSBob3d0bydzCistIHNvbWUgb2YgYHRlY2huaWNhbC9gPworLSBob29rcworLSBsaXN0IG9mIGNvbW1hbmRzIGluIGxpbmtnaXQ6Z2l0WzFdCisKK1NjYW4gZW1haWwgYXJjaGl2ZXMgZm9yIG90aGVyIHN0dWZmIGxlZnQgb3V0CisKK1NjYW4gbWFuIHBhZ2VzIHRvIHNlZSBpZiBhbnkgYXNzdW1lIG1vcmUgYmFja2dyb3VuZCB0aGFuIHRoaXMgbWFudWFsCitwcm92aWRlcy4KKworQWRkIG1vcmUgZ29vZCBleGFtcGxlcy4gIEVudGlyZSBzZWN0aW9ucyBvZiBqdXN0IGNvb2tib29rIGV4YW1wbGVzCittaWdodCBiZSBhIGdvb2QgaWRlYTsgbWF5YmUgbWFrZSBhbiAiYWR2YW5jZWQgZXhhbXBsZXMiIHNlY3Rpb24gYQorc3RhbmRhcmQgZW5kLW9mLWNoYXB0ZXIgc2VjdGlvbj8KKworSW5jbHVkZSBjcm9zcy1yZWZlcmVuY2VzIHRvIHRoZSBnbG9zc2FyeSwgd2hlcmUgYXBwcm9wcmlhdGUuCisKK0FkZCBhIHNlY3Rpb24gb24gd29ya2luZyB3aXRoIG90aGVyIHZlcnNpb24gY29udHJvbCBzeXN0ZW1zLCBpbmNsdWRpbmcKK0NWUywgU3VidmVyc2lvbiwgYW5kIGp1c3QgaW1wb3J0cyBvZiBzZXJpZXMgb2YgcmVsZWFzZSB0YXJiYWxscy4KKworV3JpdGUgYSBjaGFwdGVyIG9uIHVzaW5nIHBsdW1iaW5nIGFuZCB3cml0aW5nIHNjcmlwdHMuCisKK0FsdGVybmF0ZXMsIGNsb25lIC1yZWZlcmVuY2UsIGV0Yy4KKworTW9yZSBvbiByZWNvdmVyeSBmcm9tIHJlcG9zaXRvcnkgY29ycnVwdGlvbi4gIFNlZToKKwlodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvUGluZS5MTlguNC42NC4wNzAyMjcyMDM5NTQwLjEyNDg1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnLworCWh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9QaW5lLkxOWC40LjY0LjA3MDIxNDEwMzM0MDAuMzYwNEB3b29keS5saW51eC1mb3VuZGF0aW9uLm9yZy8KZGlmZiAtLWdpdCBhL0dJVC1WRVJTSU9OLUdFTiBiL0dJVC1WRVJTSU9OLUdFTgppbmRleCA5MjM3M2QyLi5hN2EwZmM5IDEwMDc1NQotLS0gYS9HSVQtVkVSU0lPTi1HRU4KKysrIGIvR0lULVZFUlNJT04tR0VOCkBAIC0xLDgwICsxLDQwIEBACiAjIS9iaW4vc2gKIAogR1ZGPUdJVC1WRVJTSU9OLUZJTEUKLURFRl9WRVI9MC4yMS5HSVRHVUkKK0RFRl9WRVI9djIuMjYuMC1yYzIKIAogTEY9JwogJwogCi10cmVlX3NlYXJjaCAoKQotewotCWhlYWQ9JDEKLQl0cmVlPSQyCi0JZm9yIHAgaW4gJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0tbWF4LWNvdW50PTEgJGhlYWQgMj4vZGV2L251bGwpCi0JZG8KLQkJdGVzdCAkdHJlZSA9ICQoZ2l0IHJldi1wYXJzZSAkcF57dHJlZX0gMj4vZGV2L251bGwpICYmCi0JCXZuPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgJHAgMj4vZGV2L251bGwpICYmCi0JCWNhc2UgIiR2biIgaW4KLQkJZ2l0Z3VpLVswLTldKikgZWNobyAkdm47IGJyZWFrOzsKLQkJZXNhYwotCWRvbmUKLX0KLQotIyBBbHdheXMgdXNlIHRoZSB0YXJiYWxsIHZlcnNpb24gZmlsZSBpZiBmb3VuZCwganVzdAotIyBpbiBjYXNlIHdlIGFyZSBzb21laG93IGNvbnRhaW5lZCBpbiBhIGxhcmdlciBnaXQKLSMgcmVwb3NpdG9yeSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgdHJhY2sgb3VyIHN0YXRlLgotIyAoQXQgbGVhc3Qgb25lIHBhY2thZ2UgbWFuYWdlciBpcyBkb2luZyB0aGlzLikKLSMKLSMgV2UgbWF5IGJlIGEgc3VicHJvamVjdCwgc28gdHJ5IGxvb2tpbmcgZm9yIHRoZSBtZXJnZQotIyBjb21taXQgdGhhdCBzdXBwbGllZCB0aGlzIGRpcmVjdG9yeSBjb250ZW50IGlmIHdlIGFyZQotIyBub3QgYXQgdGhlIHRvcGxldmVsLiAgV2UgcHJvYmFibHkgd2lsbCBhbHdheXMgYmUgdGhlCi0jIHNlY29uZCBwYXJlbnQgaW4gdGhlIGNvbW1pdCwgYnV0IHdlIHNob3VsZG4ndCByZWx5IG9uCi0jIHRoYXQgZmFjdC4KLSMKLSMgSWYgd2UgYXJlIGF0IHRoZSB0b3BsZXZlbCBvciB0aGUgbWVyZ2UgYXNzdW1wdGlvbiBmYWlscwotIyB0cnkgbG9va2luZyBmb3IgYSBnaXRndWktKiB0YWcuCi0KLWlmIHRlc3QgLWYgdmVyc2lvbiAmJgotICAgVk49JChjYXQgdmVyc2lvbikKKyMgRmlyc3Qgc2VlIGlmIHRoZXJlIGlzIGEgdmVyc2lvbiBmaWxlIChpbmNsdWRlZCBpbiByZWxlYXNlIHRhcmJhbGxzKSwKKyMgdGhlbiB0cnkgZ2l0LWRlc2NyaWJlLCB0aGVuIGRlZmF1bHQuCitpZiB0ZXN0IC1mIHZlcnNpb24KIHRoZW4KLQk6IGhhcHB5Ci1lbGlmIHByZWZpeD0iJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggMj4vZGV2L251bGwpIgotICAgdGVzdCAtbiAiJHByZWZpeCIgJiYKLSAgIGhlYWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEIC0tIC4gMj4vZGV2L251bGwpICYmCi0gICB0cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiSEVBRDokcHJlZml4IiAyPi9kZXYvbnVsbCkgJiYKLSAgIFZOPSQodHJlZV9zZWFyY2ggJGhlYWQgJHRyZWUpCi0gICBjYXNlICIkVk4iIGluCi0gICBnaXRndWktWzAtOV0qKSA6IGhhcHB5IDs7Ci0gICAqKSAoZXhpdCAxKSA7OwotICAgZXNhYworCVZOPSQoY2F0IHZlcnNpb24pIHx8IFZOPSIkREVGX1ZFUiIKK2VsaWYgdGVzdCAtZCAke0dJVF9ESVI6LS5naXR9IC1vIC1mIC5naXQgJiYKKwlWTj0kKGdpdCBkZXNjcmliZSAtLW1hdGNoICJ2WzAtOV0qIiBIRUFEIDI+L2Rldi9udWxsKSAmJgorCWNhc2UgIiRWTiIgaW4KKwkqJExGKikgKGV4aXQgMSkgOzsKKwl2WzAtOV0qKQorCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorCQl0ZXN0IC16ICIkKGdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQgLS0pIiB8fAorCQlWTj0iJFZOLWRpcnR5IiA7OworCWVzYWMKIHRoZW4KLQlWTj0kKGVjaG8gIiRWTiIgfCBzZWQgLWUgJ3MvXmdpdGd1aS0vLztzLy0vLi9nJyk7Ci1lbGlmIFZOPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbCkgJiYKLSAgIGNhc2UgIiRWTiIgaW4KLSAgIGdpdGd1aS1bMC05XSopIDogaGFwcHkgOzsKLSAgICopIChleGl0IDEpIDs7Ci0gICBlc2FjCi10aGVuCi0JVk49JChlY2hvICIkVk4iIHwgc2VkIC1lICdzL15naXRndWktLy87cy8tLy4vZycpOworCVZOPSQoZWNobyAiJFZOIiB8IHNlZCAtZSAncy8tLy4vZycpOwogZWxzZQogCVZOPSIkREVGX1ZFUiIKIGZpCiAKLWRpcnR5PSQoc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsKSB8fCBkaXJ0eT0KLWNhc2UgIiRkaXJ0eSIgaW4KLScnKQotCTs7Ci0qKQotCVZOPSIkVk4tZGlydHkiIDs7Ci1lc2FjCitWTj0kKGV4cHIgIiRWTiIgOiB2KidcKC4qXCknKQogCiBpZiB0ZXN0IC1yICRHVkYKIHRoZW4KLQlWQz0kKHNlZCAtZSAncy9eR0lUR1VJX1ZFUlNJT04gPSAvLycgPCRHVkYpCisJVkM9JChzZWQgLWUgJ3MvXkdJVF9WRVJTSU9OID0gLy8nIDwkR1ZGKQogZWxzZQogCVZDPXVuc2V0CiBmaQogdGVzdCAiJFZOIiA9ICIkVkMiIHx8IHsKLQllY2hvID4mMiAiR0lUR1VJX1ZFUlNJT04gPSAkVk4iCi0JZWNobyAiR0lUR1VJX1ZFUlNJT04gPSAkVk4iID4kR1ZGCisJZWNobyA+JjIgIkdJVF9WRVJTSU9OID0gJFZOIgorCWVjaG8gIkdJVF9WRVJTSU9OID0gJFZOIiA+JEdWRgogfQpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjMzY0ZgotLS0gL2Rldi9udWxsCisrKyBiL0lOU1RBTEwKQEAgLTAsMCArMSwyNDQgQEAKKworCQlHaXQgaW5zdGFsbGF0aW9uCisKK05vcm1hbGx5IHlvdSBjYW4ganVzdCBkbyAibWFrZSIgZm9sbG93ZWQgYnkgIm1ha2UgaW5zdGFsbCIsIGFuZCB0aGF0Cit3aWxsIGluc3RhbGwgdGhlIGdpdCBwcm9ncmFtcyBpbiB5b3VyIG93biB+L2Jpbi8gZGlyZWN0b3J5LiAgSWYgeW91IHdhbnQKK3RvIGRvIGEgZ2xvYmFsIGluc3RhbGwsIHlvdSBjYW4gZG8KKworCSQgbWFrZSBwcmVmaXg9L3VzciBhbGwgZG9jIGluZm8gOyMgYXMgeW91cnNlbGYKKwkjIG1ha2UgcHJlZml4PS91c3IgaW5zdGFsbCBpbnN0YWxsLWRvYyBpbnN0YWxsLWh0bWwgaW5zdGFsbC1pbmZvIDsjIGFzIHJvb3QKKworKG9yIHByZWZpeD0vdXNyL2xvY2FsLCBvZiBjb3Vyc2UpLiAgSnVzdCBsaWtlIGFueSBwcm9ncmFtIHN1aXRlCit0aGF0IHVzZXMgJHByZWZpeCwgdGhlIGJ1aWx0IHJlc3VsdHMgaGF2ZSBzb21lIHBhdGhzIGVuY29kZWQsCit3aGljaCBhcmUgZGVyaXZlZCBmcm9tICRwcmVmaXgsIHNvICJtYWtlIGFsbDsgbWFrZSBwcmVmaXg9L3VzcgoraW5zdGFsbCIgd291bGQgbm90IHdvcmsuCisKK1RoZSBiZWdpbm5pbmcgb2YgdGhlIE1ha2VmaWxlIGRvY3VtZW50cyBtYW55IHZhcmlhYmxlcyB0aGF0IGFmZmVjdCB0aGUgd2F5CitnaXQgaXMgYnVpbHQuICBZb3UgY2FuIG92ZXJyaWRlIHRoZW0gZWl0aGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgaW4gYQorY29uZmlnLm1hayBmaWxlLgorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNlIGF1dG9jb25mIGdlbmVyYXRlZCAuL2NvbmZpZ3VyZSBzY3JpcHQgdG8KK3NldCB1cCBpbnN0YWxsIHBhdGhzICh2aWEgY29uZmlnLm1hay5hdXRvZ2VuKSwgc28geW91IGNhbiB3cml0ZSBpbnN0ZWFkCisKKwkkIG1ha2UgY29uZmlndXJlIDsjIGFzIHlvdXJzZWxmCisJJCAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyIDsjIGFzIHlvdXJzZWxmCisJJCBtYWtlIGFsbCBkb2MgOyMgYXMgeW91cnNlbGYKKwkjIG1ha2UgaW5zdGFsbCBpbnN0YWxsLWRvYyBpbnN0YWxsLWh0bWw7IyBhcyByb290CisKK0lmIHlvdSdyZSB3aWxsaW5nIHRvIHRyYWRlIG9mZiAobXVjaCkgbG9uZ2VyIGJ1aWxkIHRpbWUgZm9yIGEgbGF0ZXIKK2Zhc3RlciBnaXQgeW91IGNhbiBhbHNvIGRvIGEgcHJvZmlsZSBmZWVkYmFjayBidWlsZCB3aXRoCisKKwkkIG1ha2UgcHJlZml4PS91c3IgcHJvZmlsZQorCSMgbWFrZSBwcmVmaXg9L3VzciBQUk9GSUxFPUJVSUxEIGluc3RhbGwKKworVGhpcyB3aWxsIHJ1biB0aGUgY29tcGxldGUgdGVzdCBzdWl0ZSBhcyB0cmFpbmluZyB3b3JrbG9hZCBhbmQgdGhlbgorcmVidWlsZCBnaXQgd2l0aCB0aGUgZ2VuZXJhdGVkIHByb2ZpbGUgZmVlZGJhY2suIFRoaXMgcmVzdWx0cyBpbiBhIGdpdAord2hpY2ggaXMgYSBmZXcgcGVyY2VudCBmYXN0ZXIgb24gQ1BVIGludGVuc2l2ZSB3b3JrbG9hZHMuICBUaGlzCittYXkgYmUgYSBnb29kIHRyYWRlb2ZmIGZvciBkaXN0cmlidXRpb24gcGFja2FnZXJzLgorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gcnVuIHByb2ZpbGUgZmVlZGJhY2sgb25seSB3aXRoIHRoZSBnaXQgYmVuY2htYXJrCitzdWl0ZS4gVGhpcyBydW5zIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIGZ1bGwgdGVzdCBzdWl0ZSwgYnV0CitoYXMgbGVzcyBjb3ZlcmFnZToKKworCSQgbWFrZSBwcmVmaXg9L3VzciBwcm9maWxlLWZhc3QKKwkjIG1ha2UgcHJlZml4PS91c3IgUFJPRklMRT1CVUlMRCBpbnN0YWxsCisKK09yIGlmIHlvdSBqdXN0IHdhbnQgdG8gaW5zdGFsbCBhIHByb2ZpbGUtb3B0aW1pemVkIHZlcnNpb24gb2YgZ2l0IGludG8KK3lvdXIgaG9tZSBkaXJlY3RvcnksIHlvdSBjb3VsZCBydW46CisKKwkkIG1ha2UgcHJvZmlsZS1pbnN0YWxsCisKK29yCisJJCBtYWtlIHByb2ZpbGUtZmFzdC1pbnN0YWxsCisKK0FzIGEgY2F2ZWF0OiBhIHByb2ZpbGUtb3B0aW1pemVkIGJ1aWxkIHRha2VzIGEgKmxvdCogbG9uZ2VyIHNpbmNlIHRoZQorZ2l0IHRyZWUgbXVzdCBiZSBidWlsdCB0d2ljZSwgYW5kIGluIG9yZGVyIGZvciB0aGUgcHJvZmlsaW5nCittZWFzdXJlbWVudHMgdG8gd29yayBwcm9wZXJseSwgY2NhY2hlIG11c3QgYmUgZGlzYWJsZWQgYW5kIHRoZSB0ZXN0CitzdWl0ZSBoYXMgdG8gYmUgcnVuIHVzaW5nIG9ubHkgYSBzaW5nbGUgQ1BVLiAgSW4gYWRkaXRpb24sIHRoZSBwcm9maWxlCitmZWVkYmFjayBidWlsZCBzdGFnZSBjdXJyZW50bHkgZ2VuZXJhdGVzIGEgbG90IG9mIGFkZGl0aW9uYWwgY29tcGlsZXIKK3dhcm5pbmdzLgorCitJc3N1ZXMgb2Ygbm90ZToKKworIC0gQW5jaWVudCB2ZXJzaW9ucyBvZiBHTlUgSW50ZXJhY3RpdmUgVG9vbHMgKHByZS00LjkuMikgaW5zdGFsbGVkIGEKKyAgIHByb2dyYW0gImdpdCIsIHdob3NlIG5hbWUgY29uZmxpY3RzIHdpdGggdGhpcyBwcm9ncmFtLiAgQnV0IHdpdGgKKyAgIHZlcnNpb24gNC45LjIsIGFmdGVyIGxvbmcgaGlhdHVzIHdpdGhvdXQgYWN0aXZlIG1haW50ZW5hbmNlIChzaW5jZQorICAgYXJvdW5kIDE5OTcpLCBpdCBjaGFuZ2VkIGl0cyBuYW1lIHRvIGdudWl0IGFuZCB0aGUgbmFtZSBjb25mbGljdCBpcyBubworICAgbG9uZ2VyIGEgcHJvYmxlbS4KKworICAgTk9URTogV2hlbiBjb21waWxlZCB3aXRoIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3B0aW9uLCB0aGUgR05VCisgICBJbnRlcmFjdGl2ZSBUb29scyBwYWNrYWdlIHN0aWxsIGNhbiBpbnN0YWxsICJnaXQiLCBidXQgeW91IGNhbiBidWlsZCBpdAorICAgd2l0aCAtLWRpc2FibGUtdHJhbnNpdGlvbiBvcHRpb24gdG8gYXZvaWQgdGhpcy4KKworIC0gWW91IGNhbiB1c2UgZ2l0IGFmdGVyIGJ1aWxkaW5nIGJ1dCB3aXRob3V0IGluc3RhbGxpbmcgaWYgeW91IHdhbnQKKyAgIHRvIHRlc3QgZHJpdmUgaXQuICBTaW1wbHkgcnVuIGdpdCBmb3VuZCBpbiBiaW4td3JhcHBlcnMgZGlyZWN0b3J5CisgICBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LCBvciBwcmVwZW5kIHRoYXQgZGlyZWN0b3J5IHRvIHlvdXIgJFBBVEguCisgICBUaGlzIGhvd2V2ZXIgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBydW5uaW5nIGFuIGluc3RhbGxlZCBnaXQsIGFzCisgICB5b3UgYWx3YXlzIG5lZWQgYW4gZXh0cmEgZm9yaytleGVjIHRvIHJ1biBhbnkgZ2l0IHN1YmNvbW1hbmQuCisKKyAgIEl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHVzZSBnaXQgd2l0aG91dCBpbnN0YWxsaW5nIGJ5IHNldHRpbmcgYSBmZXcKKyAgIGVudmlyb25tZW50IHZhcmlhYmxlcywgd2hpY2ggd2FzIHRoZSB3YXkgdGhpcyB3YXMgZG9uZQorICAgdHJhZGl0aW9uYWxseS4gIEJ1dCB1c2luZyBnaXQgZm91bmQgaW4gYmluLXdyYXBwZXJzIGRpcmVjdG9yeSBpbgorICAgdGhlIGJ1aWxkIGRpcmVjdG9yeSBpcyBmYXIgc2ltcGxlci4gIEFzIGEgaGlzdG9yaWNhbCByZWZlcmVuY2UsIHRoZQorICAgb2xkIHdheSB3ZW50IGxpa2UgdGhpczoKKworCUdJVF9FWEVDX1BBVEg9YHB3ZGAKKwlQQVRIPWBwd2RgOiRQQVRICisJR0lUUEVSTExJQj1gcHdkYC9wZXJsL2J1aWxkL2xpYgorCWV4cG9ydCBHSVRfRVhFQ19QQVRIIFBBVEggR0lUUEVSTExJQgorCisgLSBCeSBkZWZhdWx0ICh1bmxlc3MgTk9fUEVSTCBpcyBwcm92aWRlZCkgR2l0IHdpbGwgc2hpcCB2YXJpb3VzIHBlcmwKKyAgIHNjcmlwdHMuIEhvd2V2ZXIsIGZvciBzaW1wbGljaXR5IGl0IGRvZXNuJ3QgdXNlIHRoZQorICAgRXh0VXRpbHM6Ok1ha2VNYWtlciB0b29sY2hhaW4gdG8gZGVjaWRlIHdoZXJlIHRvIHBsYWNlIHRoZSBwZXJsCisgICBsaWJyYXJpZXMuIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtIHRoaXMgY2FuIHJlc3VsdCBpbiB0aGUgcGVybAorICAgbGlicmFyaWVzIG5vdCBiZWluZyB3aGVyZSB5b3UnZCBsaWtlIHRoZW0gaWYgdGhleSdyZSBleHBlY3RlZCB0byBiZQorICAgdXNlZCBieSB0aGluZ3Mgb3RoZXIgdGhhbiBHaXQgaXRzZWxmLgorCisgICBNYW51YWxseSBzdXBwbHlpbmcgYSBwZXJsbGliZGlyIHByZWZpeCBzaG91bGQgZml4IHRoaXMsIGlmIHRoaXMgaXMKKyAgIGEgcHJvYmxlbSB5b3UgY2FyZSBhYm91dCwgZS5nLjoKKworICAgICAgIHByZWZpeD0vdXNyIHBlcmxsaWJkaXI9L3Vzci8kKC91c3IvYmluL3BlcmwgLU1Db25maWcgLXdsZSAncHJpbnQgc3Vic3RyICRDb25maWd7aW5zdGFsbHNpdGVsaWJ9LCAxICsgbGVuZ3RoICRDb25maWd7c2l0ZXByZWZpeGV4cH0nKQorCisgICBXaWxsIHJlc3VsdCBpbiBlLmcuIHBlcmxsaWJkaXI9L3Vzci9zaGFyZS9wZXJsLzUuMjYuMSBvbiBEZWJpYW4sCisgICBwZXJsbGliZGlyPS91c3Ivc2hhcmUvcGVybDUgKHdoaWNoIHdlJ2QgdXNlIGJ5IGRlZmF1bHQpIG9uIENlbnRPUy4KKworIC0gVW5sZXNzIE5PX1BFUkwgaXMgcHJvdmlkZWQgR2l0IHdpbGwgc2hpcCB2YXJpb3VzIHBlcmwgbGlicmFyaWVzIGl0CisgICBuZWVkcy4gRGlzdHJpYnV0b3JzIG9mIEdpdCB3aWxsIHVzdWFsbHkgd2FudCB0byBzZXQKKyAgIE5PX1BFUkxfQ1BBTl9GQUxMQkFDS1MgaWYgTk9fUEVSTCBpcyBub3QgcHJvdmlkZWQgdG8gdXNlIHRoZWlyIG93bgorICAgY29waWVzIG9mIHRoZSBDUEFOIG1vZHVsZXMgR2l0IG5lZWRzLgorCisgLSBHaXQgaXMgcmVhc29uYWJseSBzZWxmLXN1ZmZpY2llbnQsIGJ1dCBkb2VzIGRlcGVuZCBvbiBhIGZldyBleHRlcm5hbAorICAgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4gIEdpdCBjYW4gYmUgdXNlZCB3aXRob3V0IG1vc3Qgb2YgdGhlbSBieSBhZGRpbmcKKyAgIHRoZSBhcHByb3ByaWF0ZSAiTk9fPExJQlJBUlk+PVllc1BsZWFzZSIgdG8gdGhlIG1ha2UgY29tbWFuZCBsaW5lIG9yCisgICBjb25maWcubWFrIGZpbGUuCisKKwktICJ6bGliIiwgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkuIEdpdCB3b24ndCBidWlsZCB3aXRob3V0IGl0LgorCisJLSAic3NoIiBpcyB1c2VkIHRvIHB1c2ggYW5kIHB1bGwgb3ZlciB0aGUgbmV0LgorCisJLSBBIFBPU0lYLWNvbXBsaWFudCBzaGVsbCBpcyByZXF1aXJlZCB0byBydW4gc29tZSBzY3JpcHRzIG5lZWRlZAorCSAgZm9yIGV2ZXJ5ZGF5IHVzZSAoZS5nLiAiYmlzZWN0IiwgInJlcXVlc3QtcHVsbCIpLgorCisJLSAiUGVybCIgdmVyc2lvbiA1Ljggb3IgbGF0ZXIgaXMgbmVlZGVkIHRvIHVzZSBzb21lIG9mIHRoZQorCSAgZmVhdHVyZXMgKGUuZy4gcHJlcGFyaW5nIGEgcGFydGlhbCBjb21taXQgdXNpbmcgImdpdCBhZGQgLWkvLXAiLAorCSAgaW50ZXJhY3Rpbmcgd2l0aCBzdm4gcmVwb3NpdG9yaWVzIHdpdGggImdpdCBzdm4iKS4gIElmIHlvdSBjYW4KKwkgIGxpdmUgd2l0aG91dCB0aGVzZSwgdXNlIE5PX1BFUkwuICBOb3RlIHRoYXQgcmVjZW50IHJlbGVhc2VzIG9mCisJICBSZWRoYXQvRmVkb3JhIGFyZSByZXBvcnRlZCB0byBzaGlwIFBlcmwgYmluYXJ5IHBhY2thZ2Ugd2l0aCBzb21lCisJICBjb3JlIG1vZHVsZXMgc3RyaXBwZWQgYXdheSAoc2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzQ3NzIzNC8pLAorCSAgc28geW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhZGRpdGlvbmFsIHBhY2thZ2VzIG90aGVyIHRoYW4gUGVybAorCSAgaXRzZWxmLCBlLmcuIERpZ2VzdDo6TUQ1LCBGaWxlOjpTcGVjLCBGaWxlOjpUZW1wLCBOZXQ6OkRvbWFpbiwKKwkgIE5ldDo6U01UUCwgYW5kIFRpbWU6OkhpUmVzLgorCisJLSBnaXQtaW1hcC1zZW5kIG5lZWRzIHRoZSBPcGVuU1NMIGxpYnJhcnkgdG8gdGFsayBJTUFQIG92ZXIgU1NMIGlmCisJICB5b3UgYXJlIHVzaW5nIGxpYmN1cmwgb2xkZXIgdGhhbiA3LjM0LjAuICBPdGhlcndpc2UgeW91IGNhbiB1c2UKKwkgIE5PX09QRU5TU0wgd2l0aG91dCBsb3NpbmcgZ2l0LWltYXAtc2VuZC4KKworCSAgQnkgZGVmYXVsdCwgZ2l0IHVzZXMgT3BlblNTTCBmb3IgU0hBMSBidXQgaXQgd2lsbCB1c2UgaXRzIG93bgorCSAgbGlicmFyeSAoaW5zcGlyZWQgYnkgTW96aWxsYSdzKSB3aXRoIGVpdGhlciBOT19PUEVOU1NMIG9yCisJICBCTEtfU0hBMS4gIEFsc28gaW5jbHVkZWQgaXMgYSB2ZXJzaW9uIG9wdGltaXplZCBmb3IgUG93ZXJQQworCSAgKFBQQ19TSEExKS4KKworCS0gImxpYmN1cmwiIGxpYnJhcnkgaXMgdXNlZCBieSBnaXQtaHR0cC1mZXRjaCwgZ2l0LWZldGNoLCBhbmQsIGlmCisJICB0aGUgY3VybCB2ZXJzaW9uID49IDcuMzQuMCwgZm9yIGdpdC1pbWFwLXNlbmQuICBZb3UgbWlnaHQgYWxzbworCSAgd2FudCB0aGUgImN1cmwiIGV4ZWN1dGFibGUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSWYgeW91IGRvIG5vdAorCSAgdXNlIGh0dHA6Ly8gb3IgaHR0cHM6Ly8gcmVwb3NpdG9yaWVzLCBhbmQgZG8gbm90IHdhbnQgdG8gcHV0CisJICBwYXRjaGVzIGludG8gYW4gSU1BUCBtYWlsYm94LCB5b3UgZG8gbm90IGhhdmUgdG8gaGF2ZSB0aGVtCisJICAodXNlIE5PX0NVUkwpLgorCisJLSAiZXhwYXQiIGxpYnJhcnk7IGdpdC1odHRwLXB1c2ggdXNlcyBpdCBmb3IgcmVtb3RlIGxvY2sKKwkgIG1hbmFnZW1lbnQgb3ZlciBEQVYuICBTaW1pbGFyIHRvICJjdXJsIiBhYm92ZSwgdGhpcyBpcyBvcHRpb25hbAorCSAgKHdpdGggTk9fRVhQQVQpLgorCisJLSAid2lzaCIsIHRoZSBUY2wvVGsgd2luZG93aW5nIHNoZWxsIGlzIHVzZWQgaW4gZ2l0ayB0byBzaG93IHRoZQorCSAgaGlzdG9yeSBncmFwaGljYWxseSwgYW5kIGluIGdpdC1ndWkuICBJZiB5b3UgZG9uJ3Qgd2FudCBnaXRrIG9yCisJICBnaXQtZ3VpLCB5b3UgY2FuIHVzZSBOT19UQ0xUSy4KKworCS0gQSBnZXR0ZXh0IGxpYnJhcnkgaXMgdXNlZCBieSBkZWZhdWx0IGZvciBsb2NhbGl6aW5nIEdpdC4gVGhlCisJICBwcmltYXJ5IHRhcmdldCBpcyBHTlUgbGliaW50bCwgYnV0IHRoZSBTb2xhcmlzIGdldHRleHQKKwkgIGltcGxlbWVudGF0aW9uIGFsc28gd29ya3MuCisKKwkgIFdlIG5lZWQgYSBnZXR0ZXh0Lmggb24gdGhlIHN5c3RlbSBmb3IgQyBjb2RlLCBnZXR0ZXh0LnNoIChvcgorCSAgU29sYXJpcyBnZXR0ZXh0KDEpKSBmb3Igc2hlbGwgc2NyaXB0cywgYW5kIGxpYmludGwtcGVybCBmb3IgUGVybAorCSAgcHJvZ3JhbXMuCisKKwkgIFNldCBOT19HRVRURVhUIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIHN1cHBvcnQgYW5kIG1ha2UgR2l0IG9ubHkKKwkgIHVzZSBFbmdsaXNoLiBVbmRlciBhdXRvY29uZiB0aGUgY29uZmlndXJlIHNjcmlwdCB3aWxsIGRvIHRoaXMKKwkgIGF1dG9tYXRpY2FsbHkgaWYgaXQgY2FuJ3QgZmluZCBsaWJpbnRsIG9uIHRoZSBzeXN0ZW0uCisKKwktIFB5dGhvbiB2ZXJzaW9uIDIuNCBvciBsYXRlciAoYnV0IG5vdCAzLngsIHdoaWNoIGlzIG5vdAorCSAgc3VwcG9ydGVkIGJ5IFBlcmZvcmNlKSBpcyBuZWVkZWQgdG8gdXNlIHRoZSBnaXQtcDQgaW50ZXJmYWNlCisJICB0byBQZXJmb3JjZS4KKworIC0gU29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBpc3N1ZXMgYXJlIGRlYWx0IHdpdGggTWFrZWZpbGUgcnVsZXMsCisgICBidXQgZGVwZW5kaW5nIG9uIHlvdXIgc3BlY2lmaWMgaW5zdGFsbGF0aW9uLCB5b3UgbWF5IG5vdAorICAgaGF2ZSBhbGwgdGhlIGxpYnJhcmllcy90b29scyBuZWVkZWQsIG9yIHlvdSBtYXkgaGF2ZQorICAgbmVjZXNzYXJ5IGxpYnJhcmllcyBhdCB1bnVzdWFsIGxvY2F0aW9ucy4gIFBsZWFzZSBsb29rIGF0IHRoZQorICAgdG9wIG9mIHRoZSBNYWtlZmlsZSB0byBzZWUgd2hhdCBjYW4gYmUgYWRqdXN0ZWQgZm9yIHlvdXIgbmVlZHMuCisgICBZb3UgY2FuIHBsYWNlIGxvY2FsIHNldHRpbmdzIGluIGNvbmZpZy5tYWsgYW5kIHRoZSBNYWtlZmlsZQorICAgd2lsbCBpbmNsdWRlIHRoZW0uICBOb3RlIHRoYXQgY29uZmlnLm1hayBpcyBub3QgZGlzdHJpYnV0ZWQ7CisgICB0aGUgbmFtZSBpcyByZXNlcnZlZCBmb3IgbG9jYWwgc2V0dGluZ3MuCisKKyAtIFRvIGJ1aWxkIGFuZCBpbnN0YWxsIGRvY3VtZW50YXRpb24gc3VpdGUsIHlvdSBuZWVkIHRvIGhhdmUKKyAgIHRoZSBhc2NpaWRvYy94bWx0byB0b29sY2hhaW4uICBCZWNhdXNlIG5vdCBtYW55IHBlb3BsZSBhcmUKKyAgIGluY2xpbmVkIHRvIGluc3RhbGwgdGhlIHRvb2xzLCB0aGUgZGVmYXVsdCBidWlsZCB0YXJnZXQKKyAgICgibWFrZSBhbGwiKSBkb2VzIF9ub3RfIGJ1aWxkIHRoZW0uCisKKyAgICJtYWtlIGRvYyIgYnVpbGRzIGRvY3VtZW50YXRpb24gaW4gbWFuIGFuZCBodG1sIGZvcm1hdHM7IHRoZXJlIGFyZQorICAgYWxzbyAibWFrZSBtYW4iLCAibWFrZSBodG1sIiBhbmQgIm1ha2UgaW5mbyIuIE5vdGUgdGhhdCAibWFrZSBodG1sIgorICAgcmVxdWlyZXMgYXNjaWlkb2MsIGJ1dCBub3QgeG1sdG8uICJtYWtlIG1hbiIgKGFuZCB0aHVzIG1ha2UgZG9jKQorICAgcmVxdWlyZXMgYm90aC4KKworICAgIm1ha2UgaW5zdGFsbC1kb2MiIGluc3RhbGxzIGRvY3VtZW50YXRpb24gaW4gbWFuIGZvcm1hdCBvbmx5OyB0aGVyZQorICAgYXJlIGFsc28gIm1ha2UgaW5zdGFsbC1tYW4iLCAibWFrZSBpbnN0YWxsLWh0bWwiIGFuZCAibWFrZQorICAgaW5zdGFsbC1pbmZvIi4KKworICAgQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgdGhlIGluZm8gZmlsZSBhZGRpdGlvbmFsbHkgcmVxdWlyZXMKKyAgIG1ha2VpbmZvIGFuZCBkb2Nib29rMlguICBWZXJzaW9uIDAuOC4zIGlzIGtub3duIHRvIHdvcmsuCisKKyAgIEJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBwZGYgZmlsZSBhZGRpdGlvbmFsbHkgcmVxdWlyZXMKKyAgIGRibGF0ZXguICBWZXJzaW9uID49IDAuMi43IGlzIGtub3duIHRvIHdvcmsuCisKKyAgIEFsbCBmb3JtYXRzIHJlcXVpcmUgYXQgbGVhc3QgYXNjaWlkb2MgOC40LjEuCisKKyAgIFRoZXJlIGFyZSBhbHNvICJtYWtlIHF1aWNrLWluc3RhbGwtZG9jIiwgIm1ha2UgcXVpY2staW5zdGFsbC1tYW4iCisgICBhbmQgIm1ha2UgcXVpY2staW5zdGFsbC1odG1sIiB3aGljaCBpbnN0YWxsIHByZWZvcm1hdHRlZCBtYW4gcGFnZXMKKyAgIGFuZCBodG1sIGRvY3VtZW50YXRpb24uIFRvIHVzZSB0aGVzZSBidWlsZCB0YXJnZXRzLCB5b3UgbmVlZCB0bworICAgY2xvbmUgdHdvIHNlcGFyYXRlIGdpdC1odG1sZG9jcyBhbmQgZ2l0LW1hbnBhZ2VzIHJlcG9zaXRvcmllcyBuZXh0CisgICB0byB0aGUgY2xvbmUgb2YgZ2l0IGl0c2VsZi4KKworICAgSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdGhhdCBkb2Nib29rLXhzbCB2ZXJzaW9uIDEuNzIgYW5kIDEuNzMgYXJlCisgICBidWdneTsgMS43MiBtaXNmb3JtYXRzIG1hbnVhbCBwYWdlcyBmb3IgY2FsbG91dHMsIGFuZCAxLjczIG5lZWRzCisgICB0aGUgcGF0Y2ggaW4gY29udHJpYi9wYXRjaGVzL2RvY2Jvb2steHNsLW1hbnBhZ2VzLWNoYXJtYXAucGF0Y2gKKworICAgVXNlcnMgYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgZG9jdW1lbnRhdGlvbiBvbiBDeWd3aW4gbWF5IG5lZWQgdG8gZW5zdXJlCisgICB0aGF0IHRoZSAvZXRjL3htbC9jYXRhbG9nIGZpbGUgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+CisgICA8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMKKyAgICAgICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiCisgICA+CisgICA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgICAgIDxyZXdyaXRlVVJJCisgICAgICAgdXJpU3RhcnRTdHJpbmcgPSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQiCisgICAgICAgcmV3cml0ZVByZWZpeCA9ICIvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMiCisgICAgIC8+CisgICAgIDxyZXdyaXRlVVJJCisgICAgICAgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41IgorICAgICAgIHJld3JpdGVQcmVmaXg9Ii91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbC1kdGQtNC41IgorICAgICAvPgorICA8L2NhdGFsb2c+CisKKyAgVGhpcyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHR3byB4bWxjYXRhbG9nIGNvbW1hbmRzOgorCisgIHhtbGNhdGFsb2cgLS1ub291dCBcCisgICAgIC0tYWRkIHJld3JpdGVVUkkgXAorICAgICAgICBodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudCBcCisgICAgICAgIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cyBcCisgICAgIC9ldGMveG1sL2NhdGFsb2cKKworICB4bWxjYXRhbG9nIC0tbm9vdXQgXAorICAgICAtLWFkZCByZXdyaXRlVVJJIFwKKyAgICAgICAgIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L3hzbC9jdXJyZW50IFwKKyAgICAgICAgIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbC1kdGQtNC41IFwKKyAgICAgL2V0Yy94bWwvY2F0YWxvZwpkaWZmIC0tZ2l0IGEvTEdQTC0yLjEgYi9MR1BMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhiMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvTEdQTC0yLjEKQEAgLTAsMCArMSw1MTEgQEAKKworIFdoaWxlIG1vc3Qgb2YgdGhpcyBwcm9qZWN0IGlzIHVuZGVyIHRoZSBHUEwgKHNlZSBDT1BZSU5HKSwgdGhlIHhkaWZmLworIGxpYnJhcnkgYW5kIHNvbWUgbGliYyBjb2RlIGZyb20gY29tcGF0LyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlCisgR05VIExHUEwsIHZlcnNpb24gMi4xIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24gYW5kIHNvbWUKKyBvdGhlciBmaWxlcyBhcmUgdW5kZXIgb3RoZXIgbGljZW5zZXMuICBDaGVjayB0aGUgaW5kaXZpZHVhbCBmaWxlcyB0bworIGJlIHN1cmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5CisKKyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKKyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQorIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQorZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisgIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQorY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgordGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKK3N0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKK25vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKK2ZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKK2l0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgoraXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCit0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQorcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCit5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKK2xpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwordGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCithdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKK2ludHJvZHVjZWQgYnkgb3RoZXJzLgorDAorICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgorYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAorZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCityZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAorYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQorY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKKyAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKK2lzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCit0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCitsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KKworICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZworYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCitjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCitlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKK3RoZSBsaWJyYXJ5LgorCisgIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKK2RvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKK29mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKK2FyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQorbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgorc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCisgIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCitlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcworYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQorYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQorbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCitjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKK3NvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCitwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKK2ZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KK25vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQorb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKK3N5c3RlbS4KKworICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQordXNlcnMnIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMKK2xpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgordGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQorZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdAorYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisMCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgorcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3IKK290aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KK0VhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKK2NvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Cit5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgorYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKK2FsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Cit3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQorTGlicmFyeS4KKworICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAorYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQorZmVlLgorDAorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCisgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKKyAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCisgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQorICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAorICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgorICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCisgICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKKyAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKKyAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCisgICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KK3RoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KK3RoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKK2luc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKK3RoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KK3RoZXNlIG5vdGljZXMuCisMCisgIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKK3RoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCitzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgordGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgorbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKK3dvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKK3RoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQorbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCitTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQordGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCitkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KK1doZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCitsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQordGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQorc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCitmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0CitmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCit3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQorTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCitBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKK3doZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKwwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQorICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAorICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQorICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKKyAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKKyAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KKworICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcworbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KKwwKKyAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKK2xpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgordGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCitwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKKyAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CisgICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgU2VjdGlvbnMgYWJvdmUuCisKKyAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAorICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCisgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCit0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKK29yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQorc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGYxMGNhZWQuLjk4MDRhMDcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDM0NyArMSwzMjc4IEBACisjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCiBhbGw6OgogCiAjIERlZmluZSBWPTEgdG8gaGF2ZSBhIG1vcmUgdmVyYm9zZSBjb21waWxlLgogIwotIyBEZWZpbmUgTk9fTVNHRk1UIGlmIHlvdSBkbyBub3QgaGF2ZSBtc2dmbXQgZnJvbSB0aGUgR05VIGdldHRleHQKLSMgcGFja2FnZSBhbmQgd2FudCB0byB1c2Ugb3VyIHJvdWdoIHB1cmUgVGNsIHBvLT5tc2cgdHJhbnNsYXRvci4KLSMgVENMX1BBVEggbXVzdCBiZSB2YWxpZCBmb3IgdGhpcyB0byB3b3JrLgorIyBEZWZpbmUgU0hFTExfUEFUSCB0byBhIFBPU0lYIHNoZWxsIGlmIHlvdXIgL2Jpbi9zaCBpcyBicm9rZW4uCiAjCisjIERlZmluZSBTQU5FX1RPT0xfUEFUSCB0byBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGhzIHRvIHByZXBlbmQKKyMgdG8gUEFUSCBpZiB5b3VyIHRvb2xzIGluIC91c3IvYmluIGFyZSBicm9rZW4uCisjCisjIERlZmluZSBTT0NLTEVOX1QgdG8gYSBzdWl0YWJsZSB0eXBlIChzdWNoIGFzICdzaXplX3QnKSBpZiB5b3VyCisjIHN5c3RlbSBoZWFkZXJzIGRvIG5vdCBkZWZpbmUgYSBzb2NrbGVuX3QgdHlwZS4KKyMKKyMgRGVmaW5lIElOTElORSB0byBhIHN1aXRhYmxlIHN1YnN0aXR1dGUgKHN1Y2ggYXMgJ19faW5saW5lJyBvciAnJykgaWYgZ2l0CisjIGZhaWxzIHRvIGNvbXBpbGUgd2l0aCBlcnJvcnMgYWJvdXQgdW5kZWZpbmVkIGlubGluZSBmdW5jdGlvbnMgb3Igc2ltaWxhci4KKyMKKyMgRGVmaW5lIFNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgaWYgeW91IGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzbnByaW50ZigpCisjIG9yIHZzbnByaW50ZigpIHJldHVybiAtMSBpbnN0ZWFkIG9mIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCisjIGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSBmaW5hbCBzdHJpbmcgaWYgZW5vdWdoIHNwYWNlIGhhZCBiZWVuIGF2YWlsYWJsZS4KKyMKKyMgRGVmaW5lIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTIGlmIHlvdSBhcmUgb24gYSBzeXN0ZW0gd2hpY2ggc3VjY2VlZHMKKyMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSBhbiBmb3BlbidlZCBkaXJlY3RvcnkgKG9yIGV2ZW4gdG8gZm9wZW4KKyMgaXQgYXQgYWxsKS4KKyMKKyMgRGVmaW5lIE5PX09QRU5TU0wgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91IGRvIG5vdCBoYXZlIE9wZW5TU0wuCisjCisjIERlZmluZSBVU0VfTElCUENSRSBpZiB5b3UgaGF2ZSBhbmQgd2FudCB0byB1c2UgbGlicGNyZS4gVmFyaW91cworIyBjb21tYW5kcyBzdWNoIGFzIGxvZyBhbmQgZ3JlcCBvZmZlciBydW50aW1lIG9wdGlvbnMgdG8gdXNlCisjIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIGluc3RlYWQgb2Ygc3RhbmRhcmQgb3IgZXh0ZW5kZWQKKyMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucy4KKyMKKyMgVVNFX0xJQlBDUkUgaXMgYSBzeW5vbnltIGZvciBVU0VfTElCUENSRTIsIGRlZmluZSBVU0VfTElCUENSRTEKKyMgaW5zdGVhZCBpZiB5b3UnZCBsaWtlIHRvIHVzZSB0aGUgbGVnYWN5IHZlcnNpb24gMSBvZiB0aGUgUENSRQorIyBsaWJyYXJ5LiBTdXBwb3J0IGZvciB2ZXJzaW9uIDEgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZCBpbiBzb21lIGZ1dHVyZQorIyByZWxlYXNlIG9mIEdpdCwgYXMgdXBzdHJlYW0gaGFzIGFsbCBidXQgYWJhbmRvbmVkIGl0LgorIworIyBXaGVuIHVzaW5nIFVTRV9MSUJQQ1JFMSwgZGVmaW5lIE5PX0xJQlBDUkUxX0pJVCBpZiB5b3Ugd2FudCB0bworIyBkaXNhYmxlIEpJVCBldmVuIGlmIHN1cHBvcnRlZCBieSB5b3VyIGxpYnJhcnkuCisjCisjIERlZmluZSBMSUJQQ1JFRElSPS9mb28vYmFyIGlmIHlvdXIgUENSRSBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlCisjIGluIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4gV2hpY2ggdmVyc2lvbiBvZgorIyBQQ1JFIHRoaXMgcG9pbnRzIHRvIGRldGVybWluZWQgYnkgdGhlIFVTRV9MSUJQQ1JFMSBhbmQgVVNFX0xJQlBDUkUyCisjIHZhcmlhYmxlcy4KKyMKKyMgRGVmaW5lIEhBVkVfQUxMT0NBX0ggaWYgeW91IGhhdmUgd29ya2luZyBhbGxvY2EoMykgZGVmaW5lZCBpbiB0aGF0IGhlYWRlci4KKyMKKyMgRGVmaW5lIE5PX0NVUkwgaWYgeW91IGRvIG5vdCBoYXZlIGxpYmN1cmwgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtZmV0Y2ggYW5kCisjIGdpdC1odHRwLXB1c2ggYXJlIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vCisjIHRyYW5zcG9ydHMgKG5laXRoZXIgc21hcnQgbm9yIGR1bWIpLgorIworIyBEZWZpbmUgQ1VSTERJUj0vZm9vL2JhciBpZiB5b3VyIGN1cmwgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCisjCisjIERlZmluZSBDVVJMX0NPTkZJRyB0byBjdXJsJ3MgY29uZmlndXJhdGlvbiBwcm9ncmFtIHRoYXQgcHJpbnRzIGluZm9ybWF0aW9uCisjIGFib3V0IHRoZSBsaWJyYXJ5IChlLmcuLCBpdHMgdmVyc2lvbiBudW1iZXIpLiAgVGhlIGRlZmF1bHQgaXMgJ2N1cmwtY29uZmlnJy4KKyMKKyMgRGVmaW5lIENVUkxfTERGTEFHUyB0byBzcGVjaWZ5IGZsYWdzIHRoYXQgeW91IG5lZWQgdG8gbGluayB3aGVuIHVzaW5nIGxpYmN1cmwsCisjIGlmIHlvdSBkbyBub3Qgd2FudCB0byByZWx5IG9uIHRoZSBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgQ1VSTF9DT05GSUcuICBUaGUKKyMgZGVmYXVsdCB2YWx1ZSBpcyBhIHJlc3VsdCBvZiBgY3VybC1jb25maWcgLS1saWJzYC4gIEFuIGV4YW1wbGUgdmFsdWUgZm9yCisjIENVUkxfTERGTEFHUyBpcyBhcyBmb2xsb3dzOgorIworIyAgICAgQ1VSTF9MREZMQUdTPS1sY3VybAorIworIyBEZWZpbmUgTk9fRVhQQVQgaWYgeW91IGRvIG5vdCBoYXZlIGV4cGF0IGluc3RhbGxlZC4gIGdpdC1odHRwLXB1c2ggaXMKKyMgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCBwdXNoIHVzaW5nIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMgKGR1bWIpLgorIworIyBEZWZpbmUgRVhQQVRESVI9L2Zvby9iYXIgaWYgeW91ciBleHBhdCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KKyMKKyMgRGVmaW5lIEVYUEFUX05FRURTX1hNTFBBUlNFX0ggaWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gb2YgZXhwYXQgKGUuZy4sCisjIDEuMSBvciAxLjIpIHRoYXQgcHJvdmlkZXMgeG1scGFyc2UuaCBpbnN0ZWFkIG9mIGV4cGF0LmguCisjCisjIERlZmluZSBOT19HRVRURVhUIGlmIHlvdSBkb24ndCB3YW50IEdpdCBvdXRwdXQgdG8gYmUgdHJhbnNsYXRlZC4KKyMgQSB0cmFuc2xhdGVkIEdpdCByZXF1aXJlcyBHTlUgbGliaW50bCBvciBhbm90aGVyIGdldHRleHQgaW1wbGVtZW50YXRpb24sCisjIHBsdXMgbGliaW50bC1wZXJsIGF0IHJ1bnRpbWUuCisjCisjIERlZmluZSBVU0VfR0VUVEVYVF9TQ0hFTUUgYW5kIHNldCBpdCB0byAnZmFsbHRocm91Z2gnLCBpZiB5b3UgZG9uJ3QgdHJ1c3QKKyMgdGhlIGluc3RhbGxlZCBnZXR0ZXh0IHRyYW5zbGF0aW9uIG9mIHRoZSBzaGVsbCBzY3JpcHRzIG91dHB1dC4KKyMKKyMgRGVmaW5lIEhBVkVfTElCQ0hBUlNFVF9IIGlmIHlvdSBoYXZlbid0IHNldCBOT19HRVRURVhUIGFuZCB5b3UgY2FuJ3QKKyMgdHJ1c3QgdGhlIGxhbmdpbmZvLmgncyBubF9sYW5naW5mbyhDT0RFU0VUKSBmdW5jdGlvbiB0byByZXR1cm4gdGhlCisjIGN1cnJlbnQgY2hhcmFjdGVyIHNldC4gR05VIGFuZCBTb2xhcmlzIGhhdmUgYSBubF9sYW5naW5mbyhDT0RFU0VUKSwKKyMgRnJlZUJTRCBjYW4gdXNlIGVpdGhlciwgYnV0IE1pbkdXIGFuZCBzb21lIG90aGVycyBuZWVkIHRvIHVzZQorIyBsaWJjaGFyc2V0LmgncyBsb2NhbGVfY2hhcnNldCgpIGluc3RlYWQuCisjCisjIERlZmluZSBDSEFSU0VUX0xJQiB0byB0aGUgbGlicmFyeSB5b3UgbmVlZCB0byBsaW5rIHdpdGggaW4gb3JkZXIgdG8KKyMgdXNlIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24uICBPbiBzb21lIHBsYXRmb3JtcyB0aGlzIG5lZWRzIHRvIHNldCB0bworIyAtbGNoYXJzZXQsIG9uIG90aGVycyB0byAtbGljb252IC4KKyMKKyMgRGVmaW5lIExJQkNfQ09OVEFJTlNfTElCSU5UTCBpZiB5b3VyIGdldHRleHQgaW1wbGVtZW50YXRpb24gZG9lc24ndAorIyBuZWVkIC1saW50bCB3aGVuIGxpbmtpbmcuCisjCisjIERlZmluZSBOT19NU0dGTVRfRVhURU5ERURfT1BUSU9OUyBpZiB5b3VyIGltcGxlbWVudGF0aW9uIG9mIG1zZ2ZtdAorIyBkb2Vzbid0IHN1cHBvcnQgR05VIGV4dGVuc2lvbnMgbGlrZSAtLWNoZWNrIGFuZCAtLXN0YXRpc3RpY3MKKyMKKyMgRGVmaW5lIEhBVkVfUEFUSFNfSCBpZiB5b3UgaGF2ZSBwYXRocy5oIGFuZCB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBQQVRICisjIGl0IHNwZWNpZmllcy4KKyMKKyMgRGVmaW5lIE5PX0RfVFlQRV9JTl9ESVJFTlQgaWYgeW91ciBwbGF0Zm9ybSBkZWZpbmVzIERUX1VOS05PV04gYnV0IGxhY2tzCisjIGRfdHlwZSBpbiBzdHJ1Y3QgZGlyZW50IChDeWd3aW4gMS41LCBmaXhlZCBpbiBDeWd3aW4gMS43KS4KKyMKKyMgRGVmaW5lIEhBVkVfU1RSSU5HU19IIGlmIHlvdSBoYXZlIHN0cmluZ3MuaCBhbmQgbmVlZCBpdCBmb3Igc3RyY2FzZWNtcC4KKyMKKyMgRGVmaW5lIE5PX1NUUkNBU0VTVFIgaWYgeW91IGRvbid0IGhhdmUgc3RyY2FzZXN0ci4KKyMKKyMgRGVmaW5lIE5PX01FTU1FTSBpZiB5b3UgZG9uJ3QgaGF2ZSBtZW1tZW0uCisjCisjIERlZmluZSBOT19HRVRQQUdFU0laRSBpZiB5b3UgZG9uJ3QgaGF2ZSBnZXRwYWdlc2l6ZS4KKyMKKyMgRGVmaW5lIE5PX1NUUkxDUFkgaWYgeW91IGRvbid0IGhhdmUgc3RybGNweS4KKyMKKyMgRGVmaW5lIE5PX1NUUlRPVU1BWCBpZiB5b3UgZG9uJ3QgaGF2ZSBib3RoIHN0cnRvaW1heCBhbmQgc3RydG91bWF4IGluIHRoZQorIyBDIGxpYnJhcnkuIElmIHlvdXIgY29tcGlsZXIgYWxzbyBkb2VzIG5vdCBzdXBwb3J0IGxvbmcgbG9uZyBvciBkb2VzIG5vdCBoYXZlCisjIHN0cnRvdWxsLCBkZWZpbmUgTk9fU1RSVE9VTEwuCisjCisjIERlZmluZSBOT19TRVRFTlYgaWYgeW91IGRvbid0IGhhdmUgc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCisjCisjIERlZmluZSBOT19VTlNFVEVOViBpZiB5b3UgZG9uJ3QgaGF2ZSB1bnNldGVudiBpbiB0aGUgQyBsaWJyYXJ5LgorIworIyBEZWZpbmUgTk9fTUtEVEVNUCBpZiB5b3UgZG9uJ3QgaGF2ZSBta2R0ZW1wIGluIHRoZSBDIGxpYnJhcnkuCisjCisjIERlZmluZSBNS0RJUl9XT19UUkFJTElOR19TTEFTSCBpZiB5b3VyIG1rZGlyKCkgY2FuJ3QgZGVhbCB3aXRoIHRyYWlsaW5nIHNsYXNoLgorIworIyBEZWZpbmUgTk9fR0VDT1NfSU5fUFdFTlQgaWYgeW91IGRvbid0IGhhdmUgcHdfZ2Vjb3MgaW4gc3RydWN0IHBhc3N3ZAorIyBpbiB0aGUgQyBsaWJyYXJ5LgorIworIyBEZWZpbmUgTk9fTElCR0VOX0ggaWYgeW91IGRvbid0IGhhdmUgbGliZ2VuLmguCisjCisjIERlZmluZSBORUVEU19MSUJHRU4gaWYgeW91ciBsaWJnZW4gbmVlZHMgLWxnZW4gd2hlbiBsaW5raW5nCisjCisjIERlZmluZSBOT19TWVNfU0VMRUNUX0ggaWYgeW91IGRvbid0IGhhdmUgc3lzL3NlbGVjdC5oLgorIworIyBEZWZpbmUgTk9fU1lNTElOS19IRUFEIGlmIHlvdSBuZXZlciB3YW50IC5naXQvSEVBRCB0byBiZSBhIHN5bWJvbGljIGxpbmsuCisjIEVuYWJsZSBpdCBvbiBXaW5kb3dzLiAgQnkgZGVmYXVsdCwgc3ltcmVmcyBhcmUgc3RpbGwgdXNlZC4KKyMKKyMgRGVmaW5lIE5PX1NWTl9URVNUUyBpZiB5b3Ugd2FudCB0byBza2lwIHRpbWUtY29uc3VtaW5nIFNWTiBpbnRlcm9wZXJhYmlsaXR5CisjIHRlc3RzLiAgVGhlc2UgdGVzdHMgdGFrZSB1cCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aGUgdG90YWwgdGVzdCB0aW1lCisjIGJ1dCBhcmUgbm90IG5lZWRlZCB1bmxlc3MgeW91IHBsYW4gdG8gdGFsayB0byBTVk4gcmVwb3MuCisjCisjIERlZmluZSBOT19GSU5LIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYLCBoYXZlIEZpbmsKKyMgaW5zdGFsbGVkIGluIC9zdywgYnV0IGRvbid0IHdhbnQgR0lUIHRvIGxpbmsgYWdhaW5zdCBhbnkgbGlicmFyaWVzCisjIGluc3RhbGxlZCB0aGVyZS4gIElmIGRlZmluZWQgeW91IG1heSBzcGVjaWZ5IHlvdXIgb3duIChvciBGaW5rJ3MpCisjIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMgYnkgZGVmaW5pbmcgQ0ZMQUdTCisjIGFuZCBMREZMQUdTIGFwcHJvcHJpYXRlbHkuCisjCisjIERlZmluZSBOT19EQVJXSU5fUE9SVFMgaWYgeW91IGFyZSBidWlsZGluZyBvbiBEYXJ3aW4vTWFjIE9TIFgsCisjIGhhdmUgRGFyd2luUG9ydHMgaW5zdGFsbGVkIGluIC9vcHQvbG9jYWwsIGJ1dCBkb24ndCB3YW50IEdJVCB0bworIyBsaW5rIGFnYWluc3QgYW55IGxpYnJhcmllcyBpbnN0YWxsZWQgdGhlcmUuICBJZiBkZWZpbmVkIHlvdSBtYXkKKyMgc3BlY2lmeSB5b3VyIG93biAob3IgRGFyd2luUG9ydCdzKSBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZAorIyBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IGRlZmluaW5nIENGTEFHUyBhbmQgTERGTEFHUyBhcHByb3ByaWF0ZWx5LgorIworIyBEZWZpbmUgTk9fQVBQTEVfQ09NTU9OX0NSWVBUTyBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIERhcndpbi9NYWMgT1MgWAorIyBhbmQgZG8gbm90IHdhbnQgdG8gdXNlIEFwcGxlJ3MgQ29tbW9uQ3J5cHRvIGxpYnJhcnkuICBUaGlzIGFsbG93cyB5b3UKKyMgdG8gcHJvdmlkZSB5b3VyIG93biBPcGVuU1NMIGxpYnJhcnksIGZvciBleGFtcGxlIGZyb20gTWFjUG9ydHMuCisjCisjIERlZmluZSBCTEtfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBtYWtlIHVzZSBvZiB0aGUgYnVuZGxlZAorIyBvcHRpbWl6ZWQgQyBTSEExIHJvdXRpbmUuCisjCisjIERlZmluZSBQUENfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgorIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgUG93ZXJQQy4KKyMKKyMgRGVmaW5lIERDX1NIQTEgdG8gdW5jb25kaXRpb25hbGx5IGVuYWJsZSB0aGUgY29sbGlzaW9uLWRldGVjdGluZyBzaGExCisjIGFsZ29yaXRobS4gVGhpcyBpcyBzbG93ZXIsIGJ1dCBtYXkgZGV0ZWN0IGF0dGVtcHRlZCBjb2xsaXNpb24gYXR0YWNrcy4KKyMgVGFrZXMgcHJpb3JpdHkgb3ZlciBvdGhlciAqX1NIQTEga25vYnMuCisjCisjIERlZmluZSBEQ19TSEExX0VYVEVSTkFMIGluIGFkZGl0aW9uIHRvIERDX1NIQTEgaWYgeW91IHdhbnQgdG8gYnVpbGQgLyBsaW5rCisjIGdpdCB3aXRoIHRoZSBleHRlcm5hbCBTSEExIGNvbGxpc2lvbi1kZXRlY3QgbGlicmFyeS4KKyMgV2l0aG91dCB0aGlzIG9wdGlvbiwgaS5lLiB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBidWlsZCBnaXQgd2l0aCBpdHMKKyMgb3duIGJ1aWx0LWluIGNvZGUgKG9yIHN1Ym1vZHVsZSkuCisjCisjIERlZmluZSBEQ19TSEExX1NVQk1PRFVMRSBpbiBhZGRpdGlvbiB0byBEQ19TSEExIHRvIHVzZSB0aGUKKyMgc2hhMWNvbGxpc2lvbmRldGVjdGlvbiBzaGlwcGVkIGFzIGEgc3VibW9kdWxlIGluc3RlYWQgb2YgdGhlCisjIG5vbi1zdWJtb2R1bGUgY29weSBpbiBzaGExZGMvLiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBvcHRpb24gdXNlZAorIyBieSB0aGUgZ2l0IHByb2plY3QgdG8gbWlncmF0ZSB0byB1c2luZyBzaGExY29sbGlzaW9uZGV0ZWN0aW9uIGFzIGEKKyMgc3VibW9kdWxlLgorIworIyBEZWZpbmUgT1BFTlNTTF9TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIGxpbmsKKyMgd2l0aCB0aGUgU0hBMSByb3V0aW5lIGZyb20gb3BlbnNzbCBsaWJyYXJ5LgorIworIyBEZWZpbmUgU0hBMV9NQVhfQkxPQ0tfU0laRSB0byBsaW1pdCB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3aWxsIGJlIGhhc2hlZAorIyBpbiBvbmUgY2FsbCB0byB0aGUgcGxhdGZvcm0ncyBTSEExX1VwZGF0ZSgpLiBlLmcuIEFQUExFX0NPTU1PTl9DUllQVE8KKyMgd2FudHMgJ1NIQTFfTUFYX0JMT0NLX1NJWkU9MTAyNEwqMTAyNEwqMTAyNEwnIGRlZmluZWQuCisjCisjIERlZmluZSBCTEtfU0hBMjU2IHRvIHVzZSB0aGUgYnVpbHQtaW4gU0hBLTI1NiByb3V0aW5lcy4KKyMKKyMgRGVmaW5lIEdDUllQVF9TSEEyNTYgdG8gdXNlIHRoZSBTSEEtMjU2IHJvdXRpbmVzIGluIGxpYmdjcnlwdC4KKyMKKyMgRGVmaW5lIE9QRU5TU0xfU0hBMjU2IHRvIHVzZSB0aGUgU0hBLTI1NiByb3V0aW5lcyBpbiBPcGVuU1NMLgorIworIyBEZWZpbmUgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMIGlmIHlvdSBuZWVkIC1sY3J5cHRvIHdoZW4gdXNpbmcgLWxzc2wgKERhcndpbikuCisjCisjIERlZmluZSBORUVEU19TU0xfV0lUSF9DUllQVE8gaWYgeW91IG5lZWQgLWxzc2wgd2hlbiB1c2luZyAtbGNyeXB0byAoRGFyd2luKS4KKyMKKyMgRGVmaW5lIE5FRURTX0xJQklDT05WIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKERhcndpbikuCisjCisjIERlZmluZSBORUVEU19MSUJJTlRMX0JFRk9SRV9MSUJJQ09OViBpZiB5b3UgbmVlZCBsaWJpbnRsIGJlZm9yZSBsaWJpY29udi4KKyMKKyMgRGVmaW5lIE5PX0lOVFBUUl9UIGlmIHlvdSBkb24ndCBoYXZlIGludHB0cl90IG9yIHVpbnRwdHJfdC4KKyMKKyMgRGVmaW5lIE5PX1VJTlRNQVhfVCBpZiB5b3UgZG9uJ3QgaGF2ZSB1aW50bWF4X3QuCisjCisjIERlZmluZSBORUVEU19TT0NLRVQgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoU3VuT1MsCisjIFBhdHJpY2sgTWF1cml0eikuCisjCisjIERlZmluZSBORUVEU19SRVNPTFYgaWYgbGlua2luZyB3aXRoIC1sbnNsIGFuZC9vciAtbHNvY2tldCBpcyBub3QgZW5vdWdoLgorIyBOb3RhYmx5IG9uIFNvbGFyaXMgaHN0cmVycm9yIHJlc2lkZXMgaW4gbGlicmVzb2x2IGFuZCBvbiBTb2xhcmlzIDcKKyMgaW5ldF9udG9wIGFuZCBpbmV0X3B0b24gYWRkaXRpb25hbGx5IHJlc2lkZSB0aGVyZS4KKyMKKyMgRGVmaW5lIE5PX01NQVAgaWYgeW91IHdhbnQgdG8gYXZvaWQgbW1hcC4KKyMKKyMgRGVmaW5lIE1NQVBfUFJFVkVOVFNfREVMRVRFIGlmIGEgZmlsZSB0aGF0IGlzIGN1cnJlbnRseSBtbWFwcGVkIGNhbm5vdCBiZQorIyBkZWxldGVkIG9yIGNhbm5vdCBiZSByZXBsYWNlZCB1c2luZyByZW5hbWUoKS4KKyMKKyMgRGVmaW5lIE5PX1BPTExfSCBpZiB5b3UgZG9uJ3QgaGF2ZSBwb2xsLmguCisjCisjIERlZmluZSBOT19TWVNfUE9MTF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9wb2xsLmguCisjCisjIERlZmluZSBOT19QT0xMIGlmIHlvdSBkbyBub3QgaGF2ZSBvciBkb24ndCB3YW50IHRvIHVzZSBwb2xsKCkuCisjIFRoaXMgYWxzbyBpbXBsaWVzIE5PX1BPTExfSCBhbmQgTk9fU1lTX1BPTExfSC4KKyMKKyMgRGVmaW5lIE5FRURTX1NZU19QQVJBTV9IIGlmIHlvdSBuZWVkIHRvIGluY2x1ZGUgc3lzL3BhcmFtLmggdG8gY29tcGlsZSwKKyMgKlBMRUFTRSogUkVQT1JUIHRvIGdpdEB2Z2VyLmtlcm5lbC5vcmcgaWYgeW91ciBwbGF0Zm9ybSBuZWVkcyB0aGlzOworIyB3ZSB3YW50IHRvIGtub3cgbW9yZSBhYm91dCB0aGUgaXNzdWUuCisjCisjIERlZmluZSBOT19QVEhSRUFEUyBpZiB5b3UgZG8gbm90IGhhdmUgb3IgZG8gbm90IHdhbnQgdG8gdXNlIFB0aHJlYWRzLgorIworIyBEZWZpbmUgTk9fUFJFQUQgaWYgeW91IGhhdmUgYSBwcm9ibGVtIHdpdGggcHJlYWQoKSBzeXN0ZW0gY2FsbCAoZS5nLgorIyBjeWd3aW4xLmRsbCBiZWZvcmUgdjEuNS4yMikuCisjCisjIERlZmluZSBOT19TRVRJVElNRVIgaWYgeW91IGRvbid0IGhhdmUgc2V0aXRpbWVyKCkKKyMKKyMgRGVmaW5lIE5PX1NUUlVDVF9JVElNRVJWQUwgaWYgeW91IGRvbid0IGhhdmUgc3RydWN0IGl0aW1lcnZhbAorIyBUaGlzIGFsc28gaW1wbGllcyBOT19TRVRJVElNRVIKKyMKKyMgRGVmaW5lIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkgaWYgYWNjZXNzaW5nIG9iamVjdHMgaW4gcGFjayBmaWxlcyBpcworIyBnZW5lcmFsbHkgZmFzdGVyIG9uIHlvdXIgcGxhdGZvcm0gdGhhbiBhY2Nlc3NpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorIworIyBEZWZpbmUgTk9fVFJVU1RBQkxFX0ZJTEVNT0RFIGlmIHlvdXIgZmlsZXN5c3RlbSBtYXkgY2xhaW0gdG8gc3VwcG9ydAorIyB0aGUgZXhlY3V0YWJsZSBtb2RlIGJpdCwgYnV0IGRvZXNuJ3QgcmVhbGx5IGRvIHNvLgorIworIyBEZWZpbmUgTkVFRFNfTU9ERV9UUkFOU0xBVElPTiBpZiB5b3VyIE9TIHN0cmF5cyBmcm9tIHRoZSB0eXBpY2FsIGZpbGUgdHlwZQorIyBiaXRzIGluIG1vZGUgdmFsdWVzIChlLmcuIHovT1MgZGVmaW5lcyBJX1NGTVQgdG8gMHhGRjAwMDAwMCBhcyBvcHBvc2VkIHRvIHRoZQorIyB1c3VhbCAweEYwMDApLgorIworIyBEZWZpbmUgTk9fSVBWNiBpZiB5b3UgbGFjayBJUHY2IHN1cHBvcnQgYW5kIGdldGFkZHJpbmZvKCkuCisjCisjIERlZmluZSBOT19VTklYX1NPQ0tFVFMgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgb2ZmZXIgdW5peCBzb2NrZXRzLgorIworIyBEZWZpbmUgTk9fU09DS0FERFJfU1RPUkFHRSBpZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IGhhdmUgc3RydWN0CisjIHNvY2thZGRyX3N0b3JhZ2UuCisjCisjIERlZmluZSBOT19JQ09OViBpZiB5b3VyIGxpYmMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBpY29udi4KKyMKKyMgRGVmaW5lIE9MRF9JQ09OViBpZiB5b3VyIGxpYnJhcnkgaGFzIGFuIG9sZCBpY29udigpLCB3aGVyZSB0aGUgc2Vjb25kCisjIChpbnB1dCBidWZmZXIgcG9pbnRlcikgcGFyYW1ldGVyIGlzIGRlY2xhcmVkIHdpdGggdHlwZSAoY29uc3QgY2hhciAqKikuCisjCisjIERlZmluZSBJQ09OVl9PTUlUU19CT00gaWYgeW91ciBpY29udiBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB3cml0ZSBhCisjIGJ5dGUtb3JkZXIgbWFyayAoQk9NKSB3aGVuIHdyaXRpbmcgVVRGLTE2IG9yIFVURi0zMiBhbmQgYWx3YXlzIHdyaXRlcyBpbgorIyBiaWctZW5kaWFuIGZvcm1hdC4KKyMKKyMgRGVmaW5lIE5PX0RFRkxBVEVfQk9VTkQgaWYgeW91ciB6bGliIGRvZXMgbm90IGhhdmUgZGVmbGF0ZUJvdW5kLgorIworIyBEZWZpbmUgTk9fTk9SRVRVUk4gaWYgdXNpbmcgYnVnZ3kgdmVyc2lvbnMgb2YgZ2NjIDQuNisgYW5kIHByb2ZpbGUgZmVlZGJhY2ssCisjIGFzIHRoZSBjb21waWxlciBjYW4gY3Jhc2ggKGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDkyOTkpCisjCisjIERlZmluZSBVU0VfTlNFQyBiZWxvdyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzCisjIGFuZCBjdGltZXMuIE5vdGUgdGhhdCB5b3UgbmVlZCByZWNlbnQgZ2xpYmMgKGF0IGxlYXN0IDIuMi40KSBmb3IgdGhpcy4gT24KKyMgTGludXgsIGtlcm5lbCAyLjYuMTEgb3IgbmV3ZXIgaXMgcmVxdWlyZWQgZm9yIHJlbGlhYmxlIHN1Yi1zZWNvbmQgZmlsZSB0aW1lcworIyBvbiBmaWxlIHN5c3RlbXMgd2l0aCBleGFjdGx5IDEgbnMgb3IgMSBzIHJlc29sdXRpb24uIElmIHlvdSBpbnRlbmQgdG8gdXNlIEdpdAorIyBvbiBvdGhlciBmaWxlIHN5c3RlbXMgKGUuZy4gQ0VQSCwgQ0lGUywgTlRGUywgVURGKSwgZG9uJ3QgZW5hYmxlIFVTRV9OU0VDLiBTZWUKKyMgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0IGZvciBkZXRhaWxzLgorIworIyBEZWZpbmUgVVNFX1NUX1RJTUVTUEVDIGlmIHlvdXIgInN0cnVjdCBzdGF0IiB1c2VzICJzdF9jdGltZXNwZWMiIGluc3RlYWQgb2YKKyMgInN0X2N0aW0iCisjCisjIERlZmluZSBOT19OU0VDIGlmIHlvdXIgInN0cnVjdCBzdGF0IiBkb2VzIG5vdCBoYXZlICJzdF9jdGltLnR2X25zZWMiCisjIGF2YWlsYWJsZS4gIFRoaXMgYXV0b21hdGljYWxseSB0dXJucyBVU0VfTlNFQyBvZmYuCisjCisjIERlZmluZSBVU0VfU1RERVYgYmVsb3cgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGV2aWNlCisjIGNoYW5nZSBiZWluZyBjb25zaWRlcmVkIGFuIGlub2RlIGNoYW5nZSBmcm9tIHRoZSB1cGRhdGUtaW5kZXggcGVyc3BlY3RpdmUuCisjCisjIERlZmluZSBOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgaWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN0X2Jsb2NrcworIyBmaWVsZCB0aGF0IGNvdW50cyB0aGUgb24tZGlzayBmb290cHJpbnQgaW4gNTEyLWJ5dGUgYmxvY2tzLgorIworIyBEZWZpbmUgRE9DQk9PS19YU0xfMTcyIGlmIHlvdSB3YW50IHRvIGZvcm1hdCBtYW4gcGFnZXMgd2l0aCBEb2NCb29rIFhTTCB2MS43MgorIyAobm90IHYxLjczIG9yIHYxLjcxKS4KKyMKKyMgRGVmaW5lIEFTQ0lJRE9DX1JPRkYgaWYgeW91ciBEb2NCb29rIFhTTCBkb2VzIG5vdCBlc2NhcGUgcmF3IHJvZmYgZGlyZWN0aXZlcworIyAodmVyc2lvbnMgMS42OC4xIHRocm91Z2ggdjEuNzIpLgorIworIyBEZWZpbmUgR05VX1JPRkYgaWYgeW91ciB0YXJnZXQgc3lzdGVtIHVzZXMgR05VIGdyb2ZmLiAgVGhpcyBmb3JjZXMKKyMgYXBvc3Ryb3BoZXMgdG8gYmUgQVNDSUkgc28gdGhhdCBjdXQmcGFzdGluZyBleGFtcGxlcyB0byB0aGUgc2hlbGwKKyMgd2lsbCB3b3JrLgorIworIyBEZWZpbmUgVVNFX0FTQ0lJRE9DVE9SIHRvIHVzZSBBc2NpaWRvY3RvciBpbnN0ZWFkIG9mIEFzY2lpRG9jIHRvIGJ1aWxkIHRoZQorIyBkb2N1bWVudGF0aW9uLgorIworIyBEZWZpbmUgQVNDSUlET0NUT1JfRVhURU5TSU9OU19MQUIgdG8gcG9pbnQgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBBc2NpaWRvY3RvcgorIyBFeHRlbnNpb25zIExhYiBpZiB5b3UgaGF2ZSBpdCBhdmFpbGFibGUuCisjCisjIERlZmluZSBQRVJMX1BBVEggdG8gdGhlIHBhdGggb2YgeW91ciBQZXJsIGJpbmFyeSAodXN1YWxseSAvdXNyL2Jpbi9wZXJsKS4KKyMKKyMgRGVmaW5lIE5PX1BFUkwgaWYgeW91IGRvIG5vdCB3YW50IFBlcmwgc2NyaXB0cyBvciBsaWJyYXJpZXMgYXQgYWxsLgorIworIyBEZWZpbmUgTk9fUEVSTF9DUEFOX0ZBTExCQUNLUyBpZiB5b3UgZG8gbm90IHdhbnQgdG8gaW5zdGFsbCBidW5kbGVkCisjIGNvcGllcyBvZiBDUEFOIG1vZHVsZXMgdGhhdCBzZXJ2ZSBhcyBhIGZhbGxiYWNrIGluIGNhc2UgdGhlIG1vZHVsZXMKKyMgYXJlIG5vdCBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4gVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yCisjIGRpc3RyaWJ1dGlvbnMgdGhhdCB3YW50IHRvIHVzZSB0aGVpciBwYWNrYWdlZCB2ZXJzaW9ucyBvZiBQZXJsCisjIG1vZHVsZXMsIGluc3RlYWQgb2YgdGhlIGZhbGxiYWNrcyBzaGlwcGVkIHdpdGggR2l0LgorIworIyBEZWZpbmUgUFlUSE9OX1BBVEggdG8gdGhlIHBhdGggb2YgeW91ciBQeXRob24gYmluYXJ5IChvZnRlbiAvdXNyL2Jpbi9weXRob24KKyMgYnV0IC91c3IvYmluL3B5dGhvbjIuNyBvbiBzb21lIHBsYXRmb3JtcykuCisjCisjIERlZmluZSBOT19QWVRIT04gaWYgeW91IGRvIG5vdCB3YW50IFB5dGhvbiBzY3JpcHRzIG9yIGxpYnJhcmllcyBhdCBhbGwuCisjCisjIERlZmluZSBOT19UQ0xUSyBpZiB5b3UgZG8gbm90IHdhbnQgVGNsL1RrIEdVSS4KKyMKKyMgRGVmaW5lIFNBTkVfVEVYVF9HUkVQIHRvICItYSIgaWYgeW91IHVzZSByZWNlbnQgdmVyc2lvbnMgb2YgR05VIGdyZXAKKyMgYW5kIGVncmVwIHRoYXQgYXJlIHBpY2tpZXIgd2hlbiB0aGVpciBpbnB1dCBjb250YWlucyBub24tQVNDSUkgZGF0YS4KKyMKKyMgVGhlIFRDTF9QQVRIIHZhcmlhYmxlIGdvdmVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBUY2wgaW50ZXJwcmV0ZXIKKyMgdXNlZCB0byBvcHRpbWl6ZSBnaXQtZ3VpIGZvciB5b3VyIHN5c3RlbS4gIE9ubHkgdXNlZCBpZiBOT19UQ0xUSworIyBpcyBub3Qgc2V0LiAgRGVmYXVsdHMgdG8gdGhlIGJhcmUgJ3RjbHNoJy4KKyMKKyMgVGhlIFRDTFRLX1BBVEggdmFyaWFibGUgZ292ZXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIFRjbC9UayBpbnRlcnByZXRlci4KKyMgSWYgbm90IHNldCBpdCBkZWZhdWx0cyB0byB0aGUgYmFyZSAnd2lzaCcuIElmIGl0IGlzIHNldCB0byB0aGUgZW1wdHkKKyMgc3RyaW5nIHRoZW4gTk9fVENMVEsgd2lsbCBiZSBmb3JjZWQgKHRoaXMgaXMgdXNlZCBieSBjb25maWd1cmUgc2NyaXB0KS4KKyMKKyMgRGVmaW5lIElOVEVSTkFMX1FTT1JUIHRvIHVzZSBHaXQncyBpbXBsZW1lbnRhdGlvbiBvZiBxc29ydCgpLCB3aGljaAorIyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgbWVyZ2Ugc29ydCB1c2VkIGluIGdsaWJjLiBUaGlzIGlzCisjIHJlY29tbWVuZGVkIGlmIEdpdCB0cmlnZ2VycyBPKG5eMikgYmVoYXZpb3IgaW4geW91ciBwbGF0Zm9ybSdzIHFzb3J0KCkuCisjCisjIERlZmluZSBIQVZFX0lTT19RU09SVF9TIGlmIHlvdXIgcGxhdGZvcm0gcHJvdmlkZXMgYSBxc29ydF9zKCkgdGhhdCdzCisjIGNvbXBhdGlibGUgd2l0aCB0aGUgb25lIGRlc2NyaWJlZCBpbiBDMTEgQW5uZXggSy4KKyMKKyMgRGVmaW5lIFVOUkVMSUFCTEVfRlNUQVQgaWYgeW91ciBzeXN0ZW0ncyBmc3RhdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNhbWUKKyMgaW5mb3JtYXRpb24gb24gYSBub3QgeWV0IGNsb3NlZCBmaWxlIHRoYXQgbHN0YXQgd291bGQgcmV0dXJuIGZvciB0aGUgc2FtZQorIyBmaWxlIGFmdGVyIGl0IHdhcyBjbG9zZWQuCisjCisjIERlZmluZSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTIGlmIHlvdXIgb3BlcmF0aW5nIHN5c3RlbXMgaGFzIHByb2JsZW1zCisjIHdoZW4gaGFyZGxpbmtpbmcgYSBmaWxlIHRvIGFub3RoZXIgbmFtZSBhbmQgdW5saW5raW5nIHRoZSBvcmlnaW5hbCBmaWxlIHJpZ2h0CisjIGF3YXkgKHNvbWUgTlRGUyBkcml2ZXJzIHNlZW0gdG8gemVybyB0aGUgY29udGVudHMgaW4gdGhhdCBzY2VuYXJpbykuCisjCisjIERlZmluZSBJTlNUQUxMX1NZTUxJTktTIGlmIHlvdSBwcmVmZXIgdG8gaGF2ZSBldmVyeXRoaW5nIHRoYXQgY2FuIGJlCisjIHN5bWxpbmtlZCBiZXR3ZWVuIGJpbi8gYW5kIGxpYmV4ZWMvIHRvIHVzZSByZWxhdGl2ZSBzeW1saW5rcyBiZXR3ZWVuCisjIHRoZSB0d28uIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTIGFuZAorIyBOT19JTlNUQUxMX0hBUkRMSU5LUyB3aGljaCB3aWxsIGFsc28gdXNlIHN5bWxpbmtpbmcgYnkgaW5kaXJlY3Rpb24KKyMgd2l0aGluIHRoZSBzYW1lIGRpcmVjdG9yeSBpbiBzb21lIGNhc2VzLCBJTlNUQUxMX1NZTUxJTktTIHdpbGwKKyMgYWx3YXlzIHN5bWxpbmsgdG8gdGhlIGZpbmFsIHRhcmdldCBkaXJlY3RseS4KKyMKKyMgRGVmaW5lIE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1MgaWYgeW91IHBsYW4gdG8gZGlzdHJpYnV0ZSB0aGUgaW5zdGFsbGVkCisjIHByb2dyYW1zIGFzIGEgdGFyLCB3aGVyZSBiaW4vIGFuZCBsaWJleGVjLyBtaWdodCBiZSBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLgorIworIyBEZWZpbmUgTk9fSU5TVEFMTF9IQVJETElOS1MgaWYgeW91IHByZWZlciB0byB1c2UgZWl0aGVyIHN5bWJvbGljIGxpbmtzIG9yCisjIGNvcGllcyB0byBpbnN0YWxsIGJ1aWx0LWluIGdpdCBjb21tYW5kcyBlLmcuIGdpdC1jYXQtZmlsZS4KKyMKKyMgRGVmaW5lIFVTRV9ORURfQUxMT0NBVE9SIGlmIHlvdSB3YW50IHRvIHJlcGxhY2UgdGhlIHBsYXRmb3JtcyBkZWZhdWx0CisjIG1lbW9yeSBhbGxvY2F0b3JzIHdpdGggdGhlIG5lZG1hbGxvYyBhbGxvY2F0b3Igd3JpdHRlbiBieSBOaWFsbCBEb3VnbGFzLgorIworIyBEZWZpbmUgT1ZFUlJJREVfU1RSRFVQIHRvIG92ZXJyaWRlIHRoZSBsaWJjIHZlcnNpb24gb2Ygc3RyZHVwKDMpLgorIyBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIHVzaW5nIGEgY3VzdG9tIGFsbG9jYXRvciBpbiBvcmRlciB0byBhdm9pZAorIyBjcmFzaGVzIGR1ZSB0byBhbGxvY2F0aW9uIGFuZCBmcmVlIHdvcmtpbmcgb24gZGlmZmVyZW50ICdoZWFwcycuCisjIEl0J3MgZGVmaW5lZCBhdXRvbWF0aWNhbGx5IGlmIFVTRV9ORURfQUxMT0NBVE9SIGlzIHNldC4KKyMKKyMgRGVmaW5lIE5PX1JFR0VYIGlmIHlvdXIgQyBsaWJyYXJ5IGxhY2tzIHJlZ2V4IHN1cHBvcnQgd2l0aCBSRUdfU1RBUlRFTkQKKyMgZmVhdHVyZS4KKyMKKyMgRGVmaW5lIEhBVkVfREVWX1RUWSBpZiB5b3VyIHN5c3RlbSBjYW4gb3BlbiAvZGV2L3R0eSB0byBpbnRlcmFjdCB3aXRoIHRoZQorIyB1c2VyLgorIworIyBEZWZpbmUgSlNNSU4gdG8gcG9pbnQgdG8gSmF2YVNjcmlwdCBtaW5pZmllciB0aGF0IGZ1bmN0aW9ucyBhcworIyBhIGZpbHRlciB0byBoYXZlIGdpdHdlYi5qcyBtaW5pZmllZC4KKyMKKyMgRGVmaW5lIENTU01JTiB0byBwb2ludCB0byBhIENTUyBtaW5pZmllciBpbiBvcmRlciB0byBnZW5lcmF0ZSBhIG1pbmlmaWVkCisjIHZlcnNpb24gb2YgZ2l0d2ViLmNzcworIworIyBEZWZpbmUgREVGQVVMVF9QQUdFUiB0byBhIHNlbnNpYmxlIHBhZ2VyIGNvbW1hbmQgKGRlZmF1bHRzIHRvICJsZXNzIikgaWYKKyMgeW91IHdhbnQgdG8gdXNlIHNvbWV0aGluZyBkaWZmZXJlbnQuICBUaGUgdmFsdWUgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUKKyMgc2hlbGwgYXQgcnVudGltZSB3aGVuIGl0IGlzIHVzZWQuCisjCisjIERlZmluZSBERUZBVUxUX0VESVRPUiB0byBhIHNlbnNpYmxlIGVkaXRvciBjb21tYW5kIChkZWZhdWx0cyB0byAidmkiKSBpZiB5b3UKKyMgd2FudCB0byB1c2Ugc29tZXRoaW5nIGRpZmZlcmVudC4gIFRoZSB2YWx1ZSB3aWxsIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbAorIyBpZiBuZWNlc3Nhcnkgd2hlbiBpdCBpcyB1c2VkLiAgRXhhbXBsZXM6CisjCisjICAgREVGQVVMVF9FRElUT1I9J34vYmluL3ZpJywKKyMgICBERUZBVUxUX0VESVRPUj0nJEdJVF9GQUxMQkFDS19FRElUT1InLAorIyAgIERFRkFVTFRfRURJVE9SPSciQzpcUHJvZ3JhbSBGaWxlc1xWaW1cZ3ZpbS5leGUiIC0tbm9mb3JrJworIworIyBEZWZpbmUgQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTIHRvICJ5ZXMiIGlmIHlvdSB3YW50IGRlcGVuZGVuY2llcyBvbgorIyBoZWFkZXIgZmlsZXMgdG8gYmUgYXV0b21hdGljYWxseSBjb21wdXRlZCwgdG8gYXZvaWQgcmVidWlsZGluZyBvYmplY3RzIHdoZW4KKyMgYW4gdW5yZWxhdGVkIGhlYWRlciBmaWxlIGNoYW5nZXMuICBEZWZpbmUgaXQgdG8gIm5vIiB0byB1c2UgdGhlIGhhcmQtY29kZWQKKyMgZGVwZW5kZW5jeSBydWxlcy4gIFRoZSBkZWZhdWx0IGlzICJhdXRvIiwgd2hpY2ggbWVhbnMgdG8gdXNlIGNvbXB1dGVkIGhlYWRlcgorIyBkZXBlbmRlbmNpZXMgaWYgeW91ciBjb21waWxlciBpcyBkZXRlY3RlZCB0byBzdXBwb3J0IGl0LgorIworIyBEZWZpbmUgTkFUSVZFX0NSTEYgaWYgeW91ciBwbGF0Zm9ybSB1c2VzIENSTEYgZm9yIGxpbmUgZW5kaW5ncy4KKyMKKyMgRGVmaW5lIEdJVF9VU0VSX0FHRU5UIGlmIHlvdSB3YW50IHRvIGNoYW5nZSBob3cgZ2l0IGlkZW50aWZpZXMgaXRzZWxmIGR1cmluZworIyBuZXR3b3JrIGludGVyYWN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzICJnaXQvJChHSVRfVkVSU0lPTikiLgorIworIyBEZWZpbmUgREVGQVVMVF9IRUxQX0ZPUk1BVCB0byAibWFuIiwgImluZm8iIG9yICJodG1sIgorIyAoZGVmYXVsdHMgdG8gIm1hbiIpIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgZGVmYXVsdCB3aGVuCisjICJnaXQgaGVscCIgaXMgY2FsbGVkIHdpdGhvdXQgYSBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgZm9ybWF0LgorIworIyBEZWZpbmUgR0lUX1RFU1RfSU5ERVhfVkVSU0lPTiB0byAyLCAzIG9yIDQgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlCisjIHdpdGggYSBkaWZmZXJlbnQgaW5kZXhmaWxlIGZvcm1hdCB2ZXJzaW9uLiAgSWYgaXQgaXNuJ3Qgc2V0IHRoZSBpbmRleAorIyBmaWxlIGZvcm1hdCB1c2VkIGlzIGluZGV4LXZbMjNdLgorIworIyBEZWZpbmUgR01USU1FX1VOUkVMSUFCTEVfRVJST1JTIGlmIHlvdXIgZ210aW1lKCkgZnVuY3Rpb24gZG9lcyBub3QKKyMgcmV0dXJuIE5VTEwgd2hlbiBpdCByZWNlaXZlcyBhIGJvZ3VzIHRpbWVfdC4KKyMKKyMgRGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSBpZiB5b3VyIHBsYXRmb3JtIGhhcyBjbG9ja19nZXR0aW1lLgorIworIyBEZWZpbmUgSEFWRV9DTE9DS19NT05PVE9OSUMgaWYgeW91ciBwbGF0Zm9ybSBoYXMgQ0xPQ0tfTU9OT1RPTklDLgorIworIyBEZWZpbmUgTkVFRFNfTElCUlQgaWYgeW91ciBwbGF0Zm9ybSByZXF1aXJlcyBsaW5raW5nIHdpdGggbGlicnQgKGdsaWJjIHZlcnNpb24KKyMgYmVmb3JlIDIuMTcpIGZvciBjbG9ja19nZXR0aW1lIGFuZCBDTE9DS19NT05PVE9OSUMuCisjCisjIERlZmluZSBVU0VfUEFSRU5TX0FST1VORF9HRVRURVhUX04gdG8gInllcyIgaWYgeW91ciBjb21waWxlciBoYXBwaWx5CisjIGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb246CisjCisjICAgc3RhdGljIGNvbnN0IGNoYXIgc1tdID0gKCJGT08iKTsKKyMKKyMgYW5kIGRlZmluZSBpdCB0byAibm8iIGlmIHlvdSBuZWVkIHRvIHJlbW92ZSB0aGUgcGFyZW50aGVzZXMgKCkgYXJvdW5kIHRoZQorIyBjb25zdGFudC4gIFRoZSBkZWZhdWx0IGlzICJhdXRvIiwgd2hpY2ggbWVhbnMgdG8gdXNlIHBhcmVudGhlc2VzIGlmIHlvdXIKKyMgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdG8gc3VwcG9ydCBpdC4KKyMKKyMgRGVmaW5lIEhBVkVfQlNEX1NZU0NUTCBpZiB5b3VyIHBsYXRmb3JtIGhhcyBhIEJTRC1jb21wYXRpYmxlIHN5c2N0bCBmdW5jdGlvbi4KKyMKKyMgRGVmaW5lIEhBVkVfR0VUREVMSU0gaWYgeW91ciBzeXN0ZW0gaGFzIHRoZSBnZXRkZWxpbSgpIGZ1bmN0aW9uLgorIworIyBEZWZpbmUgRklMRU5PX0lTX0FfTUFDUk8gaWYgZmlsZW5vKCkgaXMgYSBtYWNybywgbm90IGEgcmVhbCBmdW5jdGlvbi4KKyMKKyMgRGVmaW5lIE5FRURfQUNDRVNTX1JPT1RfSEFORExFUiBpZiBhY2Nlc3MoKSB1bmRlciByb290IG1heSBzdWNjZXNzIGZvciBYX09LCisjIGV2ZW4gaWYgZXhlY3V0aW9uIHBlcm1pc3Npb24gaXNuJ3QgZ3JhbnRlZCBmb3IgYW55IHVzZXIuCisjCisjIERlZmluZSBQQUdFUl9FTlYgdG8gYSBTUCBzZXBhcmF0ZWQgVkFSPVZBTCBwYWlycyB0byBkZWZpbmUKKyMgZGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgcGFzc2VkIHdoZW4gYSBwYWdlciBpcyBzcGF3bmVkLCBlLmcuCisjCisjICAgIFBBR0VSX0VOViA9IExFU1M9RlJYIExWPS1jCisjCisjIHRvIHNheSAiZXhwb3J0IExFU1M9RlJYIChhbmQgTFY9LWMpIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBMRVNTIChhbmQgTFYpIGlzIG5vdCBzZXQsIHJlc3BlY3RpdmVseSIuCisjCisjIERlZmluZSBURVNUX1NIRUxMX1BBVEggaWYgeW91IHdhbnQgdG8gdXNlIGEgc2hlbGwgYmVzaWRlcyBTSEVMTF9QQVRIIGZvcgorIyBydW5uaW5nIHRoZSB0ZXN0IHNjcmlwdHMgKGUuZy4sIGJhc2ggaGFzIGJldHRlciBzdXBwb3J0IGZvciAic2V0IC14IgorIyB0cmFjaW5nKS4KKyMKKyMgV2hlbiBjcm9zcy1jb21waWxpbmcsIGRlZmluZSBIT1NUX0NQVSBhcyB0aGUgY2Fub25pY2FsIG5hbWUgb2YgdGhlIENQVSBvbgorIyB3aGljaCB0aGUgYnVpbHQgR2l0IHdpbGwgcnVuIChmb3IgaW5zdGFuY2UgIng4Nl82NCIpLgorIworIyBEZWZpbmUgUlVOVElNRV9QUkVGSVggdG8gY29uZmlndXJlIEdpdCB0byByZXNvbHZlIGl0cyBhbmNpbGxhcnkgdG9vbGluZyBhbmQKKyMgc3VwcG9ydCBmaWxlcyByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIHJ1bnRpbWUgYmluYXJ5LCByYXRoZXIgdGhhbgorIyBoYXJkLWNvZGluZyB0aGVtIGludG8gdGhlIGJpbmFyeS4gR2l0IGluc3RhbGxhdGlvbnMgYnVpbHQgd2l0aCBSVU5USU1FX1BSRUZJWAorIyBjYW4gYmUgbW92ZWQgdG8gYXJiaXRyYXJ5IGZpbGVzeXN0ZW0gbG9jYXRpb25zLiBSVU5USU1FX1BSRUZJWCBhbHNvIGNhdXNlcworIyBQZXJsIHNjcmlwdHMgdG8gdXNlIGEgbW9kaWZpZWQgZW50cnkgcG9pbnQgaGVhZGVyIGFsbG93aW5nIHRoZW0gdG8gcmVzb2x2ZQorIyBzdXBwb3J0IGZpbGVzIGF0IHJ1bnRpbWUuCisjCisjIFdoZW4gdXNpbmcgUlVOVElNRV9QUkVGSVgsIGRlZmluZSBIQVZFX0JTRF9LRVJOX1BST0NfU1lTQ1RMIGlmIHlvdXIgcGxhdGZvcm0KKyMgc3VwcG9ydHMgdGhlIEtFUk5fUFJPQyBCU0Qgc3lzY3RsIGZ1bmN0aW9uLgorIworIyBXaGVuIHVzaW5nIFJVTlRJTUVfUFJFRklYLCBkZWZpbmUgUFJPQ0ZTX0VYRUNVVEFCTEVfUEFUSCBpZiB5b3VyIHBsYXRmb3JtCisjIG1vdW50cyBhICJwcm9jZnMiIGZpbGVzeXN0ZW0gY2FwYWJsZSBvZiByZXNvbHZpbmcgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQKKyMgZXhlY3V0YWJsZS4gSWYgZGVmaW5lZCwgdGhpcyBtdXN0IGJlIHRoZSBjYW5vbmljYWwgcGF0aCBmb3IgdGhlICJwcm9jZnMiCisjIGN1cnJlbnQgZXhlY3V0YWJsZSBwYXRoLgorIworIyBXaGVuIHVzaW5nIFJVTlRJTUVfUFJFRklYLCBkZWZpbmUgSEFWRV9OU19HRVRfRVhFQ1VUQUJMRV9QQVRIIGlmIHlvdXIgcGxhdGZvcm0KKyMgc3VwcG9ydHMgY2FsbGluZyBfTlNHZXRFeGVjdXRhYmxlUGF0aCB0byByZXRyaWV2ZSB0aGUgcGF0aCBvZiB0aGUgcnVubmluZworIyBleGVjdXRhYmxlLgorIworIyBXaGVuIHVzaW5nIFJVTlRJTUVfUFJFRklYLCBkZWZpbmUgSEFWRV9XUEdNUFRSIGlmIHlvdXIgcGxhdGZvcm0gb2ZmZXJzCisjIHRoZSBnbG9iYWwgdmFyaWFibGUgX3dwZ21wdHIgY29udGFpbmluZyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgY3VycmVudAorIyBleGVjdXRhYmxlICh0aGlzIGlzIHRoZSBjYXNlIG9uIFdpbmRvd3MpLgorIworIyBEZWZpbmUgREVWRUxPUEVSIHRvIGVuYWJsZSBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzLiBDb21waWxlciB2ZXJzaW9uCisjIGFuZCBmYW1pbHkgYXJlIGF1dG8gZGV0ZWN0ZWQsIGJ1dCBjb3VsZCBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nCisjIENPTVBJTEVSX0ZFQVRVUkVTIChzZWUgY29uZmlnLm1hay5kZXYpLiBZb3UgY2FuIHN0aWxsIHNldAorIyBDRkxBR1M9Ii4uLiIgaW4gY29tYmluYXRpb24gd2l0aCBERVZFTE9QRVIgZW5hYmxlcywgd2hldGhlciB0aGF0J3MKKyMgZm9yIHR3ZWFraW5nIHNvbWV0aGluZyB1bnJlbGF0ZWQgKGUuZy4gb3B0aW1pemF0aW9uIGxldmVsKSwgb3IgZm9yCisjIHNlbGVjdGl2ZWx5IG92ZXJyaWRpbmcgc29tZXRoaW5nIERFVkVMT1BFUiBvciBvbmUgb2YgdGhlIERFVk9QVFMKKyMgKHNlZSBqdXN0IGJlbG93KSBicmluZ3MgaW4uCisjCisjIFdoZW4gREVWRUxPUEVSIGlzIHNldCwgREVWT1BUUyBjYW4gYmUgdXNlZCB0byBjb250cm9sIGNvbXBpbGVyCisjIG9wdGlvbnMuICBUaGlzIHZhcmlhYmxlIGNvbnRhaW5zIGtleXdvcmRzIHNlcGFyYXRlZCBieQorIyB3aGl0ZXNwYWNlLiBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGFyZSByZWNvZ25pemVkOgorIworIyAgICBuby1lcnJvcjoKKyMKKyMgICAgICAgIHN1cHByZXNzZXMgdGhlIC1XZXJyb3IgdGhhdCBpbXBsaWNpdGx5IGNvbWVzIHdpdGgKKyMgICAgICAgIERFVkVMT1BFUj0xLiBVc2VmdWwgZm9yIGdldHRpbmcgdGhlIGZ1bGwgc2V0IG9mIGVycm9ycworIyAgICAgICAgd2l0aG91dCBpbW1lZGlhdGVseSBkeWluZywgb3IgZm9yIGxvZ2dpbmcgdGhlbS4KKyMKKyMgICAgZXh0cmEtYWxsOgorIworIyAgICAgICAgVGhlIERFVkVMT1BFUiBtb2RlIGVuYWJsZXMgLVdleHRyYSB3aXRoIGEgZmV3IGV4Y2VwdGlvbnMuIEJ5CisjICAgICAgICBzZXR0aW5nIHRoaXMgZmxhZyB0aGUgZXhjZXB0aW9ucyBhcmUgcmVtb3ZlZCwgYW5kIGFsbCBvZgorIyAgICAgICAgLVdleHRyYSBpcyB1c2VkLgorIworIyAgICBwZWRhbnRpYzoKKyMKKyMgICAgICAgIEVuYWJsZSAtcGVkYW50aWMgY29tcGlsYXRpb24uIFRoaXMgYWxzbyBkaXNhYmxlcworIyAgICAgICAgVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OIHRvIHByb2R1Y2Ugb25seSByZWxldmFudCB3YXJuaW5ncy4KIAogR0lULVZFUlNJT04tRklMRTogRk9SQ0UKIAlAJChTSEVMTF9QQVRIKSAuL0dJVC1WRVJTSU9OLUdFTgogLWluY2x1ZGUgR0lULVZFUlNJT04tRklMRQogCi11bmFtZV9TIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1zIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKLXVuYW1lX08gOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLW8gMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQotdW5hbWVfUiA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtciAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCisjIFNldCBvdXIgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorIworIyBBbW9uZyB0aGUgdmFyaWFibGVzIGJlbG93LCB0aGVzZToKKyMgICBnaXRleGVjZGlyCisjICAgdGVtcGxhdGVfZGlyCisjICAgc3lzY29uZmRpcgorIyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgcmVsYXRpdmUgcGF0aCBzb21lL3doZXJlL2Vsc2U7CisjIHRoaXMgaXMgaW50ZXJwcmV0ZWQgYXMgcmVsYXRpdmUgdG8gJChwcmVmaXgpIGFuZCAiZ2l0IiBhdAorIyBydW50aW1lIGZpZ3VyZXMgb3V0IHdoZXJlIHRoZXkgYXJlIGJhc2VkIG9uIHRoZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLgorIyBBZGRpdGlvbmFsbHksIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSB0cmVhdGVkIGFzIHJlbGF0aXZlIGJ5ICJnaXQiIGlmIHRoZXkKKyMgYmVnaW4gd2l0aCAiJChwcmVmaXgpLyI6CisjICAgbWFuZGlyCisjICAgaW5mb2RpcgorIyAgIGh0bWxkaXIKKyMgICBsb2NhbGVkaXIKKyMgICBwZXJsbGliZGlyCisjIFRoaXMgY2FuIGhlbHAgaW5zdGFsbGluZyB0aGUgc3VpdGUgaW4gYSByZWxvY2F0YWJsZSB3YXkuCiAKLVNDUklQVF9TSCA9IGdpdC1ndWkuc2gKLUdJVEdVSV9NQUlOIDo9IGdpdC1ndWkKLUdJVEdVSV9CVUlMVF9JTlMgPSBnaXQtY2l0b29sCi1BTExfTElCRklMRVMgPSAkKHdpbGRjYXJkIGxpYi8qLnRjbCkKLVBSRUxPQURfRklMRVMgPSBsaWIvY2xhc3MudGNsCi1OT05UQ0xfTElCRklMRVMgPSBcCi0JbGliL2dpdC1ndWkuaWNvIFwKLQkkKHdpbGRjYXJkIGxpYi93aW4zMl8qLmpzKSBcCi0jZW5kIE5PTlRDTF9MSUJGSUxFUworcHJlZml4ID0gJChIT01FKQorYmluZGlyID0gJChwcmVmaXgpL2JpbgorbWFuZGlyID0gJChwcmVmaXgpL3NoYXJlL21hbgoraW5mb2RpciA9ICQocHJlZml4KS9zaGFyZS9pbmZvCitnaXRleGVjZGlyID0gbGliZXhlYy9naXQtY29yZQorbWVyZ2V0b29sc2RpciA9ICQoZ2l0ZXhlY2RpcikvbWVyZ2V0b29scworc2hhcmVkaXIgPSAkKHByZWZpeCkvc2hhcmUKK2dpdHdlYmRpciA9ICQoc2hhcmVkaXIpL2dpdHdlYgorcGVybGxpYmRpciA9ICQoc2hhcmVkaXIpL3Blcmw1Citsb2NhbGVkaXIgPSAkKHNoYXJlZGlyKS9sb2NhbGUKK3RlbXBsYXRlX2RpciA9IHNoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcworaHRtbGRpciA9ICQocHJlZml4KS9zaGFyZS9kb2MvZ2l0LWRvYworRVRDX0dJVENPTkZJRyA9ICQoc3lzY29uZmRpcikvZ2l0Y29uZmlnCitFVENfR0lUQVRUUklCVVRFUyA9ICQoc3lzY29uZmRpcikvZ2l0YXR0cmlidXRlcworbGliID0gbGliCisjIERFU1RESVIgPQorcGF0aHNlcCA9IDoKIAorYmluZGlyX3JlbGF0aXZlID0gJChwYXRzdWJzdCAkKHByZWZpeCkvJSwlLCQoYmluZGlyKSkKK21hbmRpcl9yZWxhdGl2ZSA9ICQocGF0c3Vic3QgJChwcmVmaXgpLyUsJSwkKG1hbmRpcikpCitpbmZvZGlyX3JlbGF0aXZlID0gJChwYXRzdWJzdCAkKHByZWZpeCkvJSwlLCQoaW5mb2RpcikpCitnaXRleGVjZGlyX3JlbGF0aXZlID0gJChwYXRzdWJzdCAkKHByZWZpeCkvJSwlLCQoZ2l0ZXhlY2RpcikpCitsb2NhbGVkaXJfcmVsYXRpdmUgPSAkKHBhdHN1YnN0ICQocHJlZml4KS8lLCUsJChsb2NhbGVkaXIpKQoraHRtbGRpcl9yZWxhdGl2ZSA9ICQocGF0c3Vic3QgJChwcmVmaXgpLyUsJSwkKGh0bWxkaXIpKQorcGVybGxpYmRpcl9yZWxhdGl2ZSA9ICQocGF0c3Vic3QgJChwcmVmaXgpLyUsJSwkKHBlcmxsaWJkaXIpKQorCitleHBvcnQgcHJlZml4IGJpbmRpciBzaGFyZWRpciBzeXNjb25mZGlyIGdpdHdlYmRpciBwZXJsbGliZGlyIGxvY2FsZWRpcgorCisjIFNldCBvdXIgZGVmYXVsdCBwcm9ncmFtcworQ0MgPSBjYworQVIgPSBhcgorUk0gPSBybSAtZgorRElGRiA9IGRpZmYKK1RBUiA9IHRhcgorRklORCA9IGZpbmQKK0lOU1RBTEwgPSBpbnN0YWxsCitUQ0xfUEFUSCA9IHRjbHNoCitUQ0xUS19QQVRIID0gd2lzaAorWEdFVFRFWFQgPSB4Z2V0dGV4dAorTVNHRk1UID0gbXNnZm10CitDVVJMX0NPTkZJRyA9IGN1cmwtY29uZmlnCitHQ09WID0gZ2NvdgorU1RSSVAgPSBzdHJpcAorU1BBVENIID0gc3BhdGNoCisKK2V4cG9ydCBUQ0xfUEFUSCBUQ0xUS19QQVRICisKKyMgU2V0IG91ciBkZWZhdWx0IExJQlMgdmFyaWFibGVzCitQVEhSRUFEX0xJQlMgPSAtbHB0aHJlYWQKKworIyBHdWFyZCBhZ2FpbnN0IGVudmlyb25tZW50IHZhcmlhYmxlcworQlVJTFRJTl9PQkpTID0KK0JVSUxUX0lOUyA9CitDT01QQVRfQ0ZMQUdTID0KK0NPTVBBVF9PQkpTID0KK1hESUZGX09CSlMgPQorVkNTU1ZOX09CSlMgPQorR0VORVJBVEVEX0ggPQorRVhUUkFfQ1BQRkxBR1MgPQorRlVaWl9PQkpTID0KK0ZVWlpfUFJPR1JBTVMgPQorTElCX09CSlMgPQorUFJPR1JBTV9PQkpTID0KK1BST0dSQU1TID0KK0VYQ0xVREVEX1BST0dSQU1TID0KK1NDUklQVF9QRVJMID0KK1NDUklQVF9QWVRIT04gPQorU0NSSVBUX1NIID0KK1NDUklQVF9MSUIgPQorVEVTVF9CVUlMVElOU19PQkpTID0KK1RFU1RfUFJPR1JBTVNfTkVFRF9YID0KK1RISVJEX1BBUlRZX1NPVVJDRVMgPQorCisjIEhhdmluZyB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQgd291bGQgYnJlYWsgcGlwZWxpbmVzIGJlY2F1c2UKKyMgeW91IGNhdXNlICJjZCIgdG8gZWNobyBpdHMgZGVzdGluYXRpb24gdG8gc3Rkb3V0LiAgSXQgY2FuIGFsc28gdGFrZQorIyBzY3JpcHRzIHRvIHVuZXhwZWN0ZWQgcGxhY2VzLiAgSWYgeW91IGxpa2UgQ0RQQVRILCBkZWZpbmUgaXQgZm9yIHlvdXIKKyMgaW50ZXJhY3RpdmUgc2hlbGwgc2Vzc2lvbnMgd2l0aG91dCBleHBvcnRpbmcgaXQuCit1bmV4cG9ydCBDRFBBVEgKKworU0NSSVBUX1NIICs9IGdpdC1iaXNlY3Quc2gKK1NDUklQVF9TSCArPSBnaXQtZGlmZnRvb2wtLWhlbHBlci5zaAorU0NSSVBUX1NIICs9IGdpdC1maWx0ZXItYnJhbmNoLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LW1lcmdlLW9jdG9wdXMuc2gKK1NDUklQVF9TSCArPSBnaXQtbWVyZ2Utb25lLWZpbGUuc2gKK1NDUklQVF9TSCArPSBnaXQtbWVyZ2UtcmVzb2x2ZS5zaAorU0NSSVBUX1NIICs9IGdpdC1tZXJnZXRvb2wuc2gKK1NDUklQVF9TSCArPSBnaXQtcXVpbHRpbXBvcnQuc2gKK1NDUklQVF9TSCArPSBnaXQtbGVnYWN5LXN0YXNoLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LXJlcXVlc3QtcHVsbC5zaAorU0NSSVBUX1NIICs9IGdpdC1zdWJtb2R1bGUuc2gKK1NDUklQVF9TSCArPSBnaXQtd2ViLS1icm93c2Uuc2gKKworU0NSSVBUX0xJQiArPSBnaXQtbWVyZ2V0b29sLS1saWIKK1NDUklQVF9MSUIgKz0gZ2l0LXBhcnNlLXJlbW90ZQorU0NSSVBUX0xJQiArPSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMKK1NDUklQVF9MSUIgKz0gZ2l0LXNoLXNldHVwCitTQ1JJUFRfTElCICs9IGdpdC1zaC1pMThuCisKK1NDUklQVF9QRVJMICs9IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1hcmNoaW1wb3J0LnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1jdnNleHBvcnRjb21taXQucGVybAorU0NSSVBUX1BFUkwgKz0gZ2l0LWN2c2ltcG9ydC5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtY3Zzc2VydmVyLnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1zZW5kLWVtYWlsLnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1zdm4ucGVybAorCitTQ1JJUFRfUFlUSE9OICs9IGdpdC1wNC5weQorCisjIEdlbmVyYXRlZCBmaWxlcyBmb3Igc2NyaXB0cworU0NSSVBUX1NIX0dFTiA9ICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkKK1NDUklQVF9QRVJMX0dFTiA9ICQocGF0c3Vic3QgJS5wZXJsLCUsJChTQ1JJUFRfUEVSTCkpCitTQ1JJUFRfUFlUSE9OX0dFTiA9ICQocGF0c3Vic3QgJS5weSwlLCQoU0NSSVBUX1BZVEhPTikpCisKKyMgSW5kaXZpZHVhbCBydWxlcyB0byBhbGxvdyBlLmcuCisjICJtYWtlIC1DIC4uLy4uIFNDUklQVF9QRVJMPWNvbnRyaWIvZm9vL2Jhci5wZXJsIGJ1aWxkLXBlcmwtc2NyaXB0IgorIyBmcm9tIHN1YmRpcmVjdG9yaWVzIGxpa2UgY29udHJpYi8qLworLlBIT05ZOiBidWlsZC1wZXJsLXNjcmlwdCBidWlsZC1zaC1zY3JpcHQgYnVpbGQtcHl0aG9uLXNjcmlwdAorYnVpbGQtcGVybC1zY3JpcHQ6ICQoU0NSSVBUX1BFUkxfR0VOKQorYnVpbGQtc2gtc2NyaXB0OiAkKFNDUklQVF9TSF9HRU4pCitidWlsZC1weXRob24tc2NyaXB0OiAkKFNDUklQVF9QWVRIT05fR0VOKQorCisuUEhPTlk6IGluc3RhbGwtcGVybC1zY3JpcHQgaW5zdGFsbC1zaC1zY3JpcHQgaW5zdGFsbC1weXRob24tc2NyaXB0CitpbnN0YWxsLXNoLXNjcmlwdDogJChTQ1JJUFRfU0hfR0VOKQorCSQoSU5TVEFMTCkgJF4gJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCitpbnN0YWxsLXBlcmwtc2NyaXB0OiAkKFNDUklQVF9QRVJMX0dFTikKKwkkKElOU1RBTEwpICReICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworaW5zdGFsbC1weXRob24tc2NyaXB0OiAkKFNDUklQVF9QWVRIT05fR0VOKQorCSQoSU5TVEFMTCkgJF4gJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisKKy5QSE9OWTogY2xlYW4tcGVybC1zY3JpcHQgY2xlYW4tc2gtc2NyaXB0IGNsZWFuLXB5dGhvbi1zY3JpcHQKK2NsZWFuLXNoLXNjcmlwdDoKKwkkKFJNKSAkKFNDUklQVF9TSF9HRU4pCitjbGVhbi1wZXJsLXNjcmlwdDoKKwkkKFJNKSAkKFNDUklQVF9QRVJMX0dFTikKK2NsZWFuLXB5dGhvbi1zY3JpcHQ6CisJJChSTSkgJChTQ1JJUFRfUFlUSE9OX0dFTikKKworU0NSSVBUUyA9ICQoU0NSSVBUX1NIX0dFTikgXAorCSAgJChTQ1JJUFRfUEVSTF9HRU4pIFwKKwkgICQoU0NSSVBUX1BZVEhPTl9HRU4pIFwKKwkgIGdpdC1pbnN0YXdlYgorCitFVEFHU19UQVJHRVQgPSBUQUdTCisKK0ZVWlpfT0JKUyArPSBmdXp6LWNvbW1pdC1ncmFwaC5vCitGVVpaX09CSlMgKz0gZnV6ei1wYWNrLWhlYWRlcnMubworRlVaWl9PQkpTICs9IGZ1enotcGFjay1pZHgubworCisjIEFsd2F5cyBidWlsZCBmdXp6IG9iamVjdHMgZXZlbiBpZiBub3QgdGVzdGluZywgdG8gcHJldmVudCBiaXQtcm90LgorYWxsOjogJChGVVpaX09CSlMpCisKK0ZVWlpfUFJPR1JBTVMgKz0gJChwYXRzdWJzdCAlLm8sJSwkKEZVWlpfT0JKUykpCisKKyMgRW1wdHkuLi4KK0VYVFJBX1BST0dSQU1TID0KKworIyAuLi4gYW5kIGFsbCB0aGUgcmVzdCB0aGF0IGNvdWxkIGJlIG1vdmVkIG91dCBvZiBiaW5kaXIgdG8gZ2l0ZXhlY2RpcgorUFJPR1JBTVMgKz0gJChFWFRSQV9QUk9HUkFNUykKKworUFJPR1JBTV9PQkpTICs9IGNyZWRlbnRpYWwtc3RvcmUubworUFJPR1JBTV9PQkpTICs9IGRhZW1vbi5vCitQUk9HUkFNX09CSlMgKz0gZmFzdC1pbXBvcnQubworUFJPR1JBTV9PQkpTICs9IGh0dHAtYmFja2VuZC5vCitQUk9HUkFNX09CSlMgKz0gaW1hcC1zZW5kLm8KK1BST0dSQU1fT0JKUyArPSBzaC1pMThuLS1lbnZzdWJzdC5vCitQUk9HUkFNX09CSlMgKz0gc2hlbGwubworUFJPR1JBTV9PQkpTICs9IHJlbW90ZS10ZXN0c3ZuLm8KKworIyBCaW5hcnkgc3VmZml4LCBzZXQgdG8gLmV4ZSBmb3IgV2luZG93cyBidWlsZHMKK1ggPQorCitQUk9HUkFNUyArPSAkKHBhdHN1YnN0ICUubyxnaXQtJSRYLCQoUFJPR1JBTV9PQkpTKSkKKworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtY2htdGltZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1jb25maWcubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtY3R5cGUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZGF0ZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1kZWx0YS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1kaXItaXRlcmF0b3IubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZHJvcC1jYWNoZXMubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZHVtcC1jYWNoZS10cmVlLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWR1bXAtZnNtb25pdG9yLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWR1bXAtc3BsaXQtaW5kZXgubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZXhhbXBsZS1kZWNvcmF0ZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1nZW5yYW5kb20ubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtZ2VuemVyb3MubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtaGFzaC5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1oYXNobWFwLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LWhhc2gtc3BlZWQubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtaW5kZXgtdmVyc2lvbi5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1qc29uLXdyaXRlci5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1sYXp5LWluaXQtbmFtZS1oYXNoLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LW1hdGNoLXRyZWVzLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LW1lcmdlc29ydC5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1ta3RlbXAubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtb2lkbWFwLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LW9ubGluZS1jcHVzLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXBhcnNlLW9wdGlvbnMubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcGFyc2UtcGF0aHNwZWMtZmlsZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1wYXRoLXV0aWxzLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXBrdC1saW5lLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXByaW8tcXVldWUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcHJvZ3Jlc3MubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVhY2gubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVhZC1jYWNoZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWFkLWdyYXBoLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJlYWQtbWlkeC5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWYtc3RvcmUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVnZXgubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVwb3NpdG9yeS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZXZpc2lvbi13YWxraW5nLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJ1bi1jb21tYW5kLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXNjcmFwLWNhY2hlLXRyZWUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtc2VydmUtdjIubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtc2hhMS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zaGExLWFycmF5Lm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXNoYTI1Ni5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zaWdjaGFpbi5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zdHJjbXAtb2Zmc2V0Lm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXN0cmluZy1saXN0Lm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXN1Ym1vZHVsZS1jb25maWcubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtc3VibW9kdWxlLW5lc3RlZC1yZXBvLWNvbmZpZy5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1zdWJwcm9jZXNzLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXRyYWNlMi5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXhtbC1lbmNvZGUubworVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3Qtd2lsZG1hdGNoLm8KK1RFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXdpbmRvd3MtbmFtZWQtcGlwZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC13cml0ZS1jYWNoZS5vCisKKyMgRG8gbm90IGFkZCBtb3JlIHRlc3RzIGhlcmUgdW5sZXNzIHRoZXkgaGF2ZSBleHRyYSBkZXBlbmRlbmNpZXMuIEFkZAorIyB0aGVtIGluIFRFU1RfQlVJTFRJTlNfT0JKUyBhYm92ZS4KK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtZmFrZS1zc2gKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtbGluZS1idWZmZXIKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3Qtc3ZuLWZlCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXRvb2wKKworVEVTVF9QUk9HUkFNUyA9ICQocGF0c3Vic3QgJSx0L2hlbHBlci8lJFgsJChURVNUX1BST0dSQU1TX05FRURfWCkpCisKKyMgTGlzdCBidWlsdC1pbiBjb21tYW5kICRDIHdob3NlIGltcGxlbWVudGF0aW9uIGNtZF8kQygpIGlzIG5vdCBpbgorIyBidWlsdGluLyRDLm8gYnV0IGlzIGxpbmtlZCBpbiBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgY29tbWFuZC4KK0JVSUxUX0lOUyArPSAkKHBhdHN1YnN0IGJ1aWx0aW4vJS5vLGdpdC0lJFgsJChCVUlMVElOX09CSlMpKQorCitCVUlMVF9JTlMgKz0gZ2l0LWNoZXJyeSRYCitCVUlMVF9JTlMgKz0gZ2l0LWNoZXJyeS1waWNrJFgKK0JVSUxUX0lOUyArPSBnaXQtZm9ybWF0LXBhdGNoJFgKK0JVSUxUX0lOUyArPSBnaXQtZnNjay1vYmplY3RzJFgKK0JVSUxUX0lOUyArPSBnaXQtaW5pdCRYCitCVUlMVF9JTlMgKz0gZ2l0LW1lcmdlLXN1YnRyZWUkWAorQlVJTFRfSU5TICs9IGdpdC1yZXN0b3JlJFgKK0JVSUxUX0lOUyArPSBnaXQtc2hvdyRYCitCVUlMVF9JTlMgKz0gZ2l0LXN0YWdlJFgKK0JVSUxUX0lOUyArPSBnaXQtc3RhdHVzJFgKK0JVSUxUX0lOUyArPSBnaXQtc3dpdGNoJFgKK0JVSUxUX0lOUyArPSBnaXQtd2hhdGNoYW5nZWQkWAorCisjIHdoYXQgJ2FsbCcgd2lsbCBidWlsZCBhbmQgJ2luc3RhbGwnIHdpbGwgaW5zdGFsbCBpbiBnaXRleGVjZGlyLAorIyBleGNsdWRpbmcgcHJvZ3JhbXMgZm9yIGJ1aWx0LWluIGNvbW1hbmRzCitBTExfUFJPR1JBTVMgPSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCisKKyMgd2hhdCAnYWxsJyB3aWxsIGJ1aWxkIGJ1dCBub3QgaW5zdGFsbCBpbiBnaXRleGVjZGlyCitPVEhFUl9QUk9HUkFNUyA9IGdpdCRYCisKKyMgd2hhdCB0ZXN0IHdyYXBwZXJzIGFyZSBuZWVkZWQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwsIGluIGJpbmRpcgorQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0LXVwbG9hZC1wYWNrCitCSU5ESVJfUFJPR1JBTVNfTkVFRF9YICs9IGdpdC1yZWNlaXZlLXBhY2sKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0LXVwbG9hZC1hcmNoaXZlCitCSU5ESVJfUFJPR1JBTVNfTkVFRF9YICs9IGdpdC1zaGVsbAorCitCSU5ESVJfUFJPR1JBTVNfTk9fWCArPSBnaXQtY3Zzc2VydmVyCisKKyMgU2V0IHBhdGhzIHRvIHRvb2xzIGVhcmx5IHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBmb3IgdmVyc2lvbiB0ZXN0cy4KIGlmbmRlZiBTSEVMTF9QQVRICiAJU0hFTExfUEFUSCA9IC9iaW4vc2gKIGVuZGlmCi0KLWlmbmRlZiBnaXRleGVjZGlyCi0JZ2l0ZXhlY2RpciA6PSAkKHNoZWxsIGdpdCAtLWV4ZWMtcGF0aCkKK2lmbmRlZiBQRVJMX1BBVEgKKwlQRVJMX1BBVEggPSAvdXNyL2Jpbi9wZXJsCitlbmRpZgoraWZuZGVmIFBZVEhPTl9QQVRICisJUFlUSE9OX1BBVEggPSAvdXNyL2Jpbi9weXRob24KIGVuZGlmCiAKLWlmbmRlZiBzaGFyZWRpcgotaWZlcSAoZ2l0LWNvcmUsJChub3RkaXIgJChnaXRleGVjZGlyKSkpCi0Jc2hhcmVkaXIgOj0gJChkaXIgJChwYXRzdWJzdCAlLywlLCQoZGlyICQoZ2l0ZXhlY2RpcikpKSlzaGFyZQotZWxzZQotCXNoYXJlZGlyIDo9ICQoZGlyICQoZ2l0ZXhlY2Rpcikpc2hhcmUKLWVuZGlmCitleHBvcnQgUEVSTF9QQVRICitleHBvcnQgUFlUSE9OX1BBVEgKKworVEVTVF9TSEVMTF9QQVRIID0gJChTSEVMTF9QQVRIKQorCitMSUJfRklMRSA9IGxpYmdpdC5hCitYRElGRl9MSUIgPSB4ZGlmZi9saWIuYQorVkNTU1ZOX0xJQiA9IHZjcy1zdm4vbGliLmEKKworR0VORVJBVEVEX0ggKz0gY29tbWFuZC1saXN0LmgKKworTElCX0ggOj0gJChzb3J0ICQocGF0c3Vic3QgLi8lLCUsJChzaGVsbCBnaXQgbHMtZmlsZXMgJyouaCcgJzohdC8nICc6IURvY3VtZW50YXRpb24vJyAyPi9kZXYvbnVsbCB8fCBcCisJJChGSU5EKSAuIFwKKwktbmFtZSAuZ2l0IC1wcnVuZSAtbyBcCisJLW5hbWUgdCAtcHJ1bmUgLW8gXAorCS1uYW1lIERvY3VtZW50YXRpb24gLXBydW5lIC1vIFwKKwktbmFtZSAnKi5oJyAtcHJpbnQpKSkKKworTElCX09CSlMgKz0gYWJzcGF0aC5vCitMSUJfT0JKUyArPSBhZGQtaW50ZXJhY3RpdmUubworTElCX09CSlMgKz0gYWRkLXBhdGNoLm8KK0xJQl9PQkpTICs9IGFkdmljZS5vCitMSUJfT0JKUyArPSBhbGlhcy5vCitMSUJfT0JKUyArPSBhbGxvYy5vCitMSUJfT0JKUyArPSBhcHBseS5vCitMSUJfT0JKUyArPSBhcmNoaXZlLm8KK0xJQl9PQkpTICs9IGFyY2hpdmUtdGFyLm8KK0xJQl9PQkpTICs9IGFyY2hpdmUtemlwLm8KK0xJQl9PQkpTICs9IGFyZ3YtYXJyYXkubworTElCX09CSlMgKz0gYXR0ci5vCitMSUJfT0JKUyArPSBiYXNlODUubworTElCX09CSlMgKz0gYmlzZWN0Lm8KK0xJQl9PQkpTICs9IGJsYW1lLm8KK0xJQl9PQkpTICs9IGJsb2IubworTElCX09CSlMgKz0gYnJhbmNoLm8KK0xJQl9PQkpTICs9IGJ1bGstY2hlY2tpbi5vCitMSUJfT0JKUyArPSBidW5kbGUubworTElCX09CSlMgKz0gY2FjaGUtdHJlZS5vCitMSUJfT0JKUyArPSBjaGRpci1ub3RpZnkubworTElCX09CSlMgKz0gY2hlY2tvdXQubworTElCX09CSlMgKz0gY29sb3IubworTElCX09CSlMgKz0gY29sdW1uLm8KK0xJQl9PQkpTICs9IGNvbWJpbmUtZGlmZi5vCitMSUJfT0JKUyArPSBjb21taXQubworTElCX09CSlMgKz0gY29tbWl0LWdyYXBoLm8KK0xJQl9PQkpTICs9IGNvbW1pdC1yZWFjaC5vCitMSUJfT0JKUyArPSBjb21wYXQvb2JzdGFjay5vCitMSUJfT0JKUyArPSBjb21wYXQvdGVybWluYWwubworTElCX09CSlMgKz0gY29uZmlnLm8KK0xJQl9PQkpTICs9IGNvbm5lY3QubworTElCX09CSlMgKz0gY29ubmVjdGVkLm8KK0xJQl9PQkpTICs9IGNvbnZlcnQubworTElCX09CSlMgKz0gY29weS5vCitMSUJfT0JKUyArPSBjcmVkZW50aWFsLm8KK0xJQl9PQkpTICs9IGNzdW0tZmlsZS5vCitMSUJfT0JKUyArPSBjdHlwZS5vCitMSUJfT0JKUyArPSBkYXRlLm8KK0xJQl9PQkpTICs9IGRlY29yYXRlLm8KK0xJQl9PQkpTICs9IGRlbHRhLWlzbGFuZHMubworTElCX09CSlMgKz0gZGlmZmNvcmUtYnJlYWsubworTElCX09CSlMgKz0gZGlmZmNvcmUtZGVsdGEubworTElCX09CSlMgKz0gZGlmZmNvcmUtb3JkZXIubworTElCX09CSlMgKz0gZGlmZmNvcmUtcGlja2F4ZS5vCitMSUJfT0JKUyArPSBkaWZmY29yZS1yZW5hbWUubworTElCX09CSlMgKz0gZGlmZi1kZWx0YS5vCitMSUJfT0JKUyArPSBkaWZmLWxpYi5vCitMSUJfT0JKUyArPSBkaWZmLW5vLWluZGV4Lm8KK0xJQl9PQkpTICs9IGRpZmYubworTElCX09CSlMgKz0gZGlyLm8KK0xJQl9PQkpTICs9IGRpci1pdGVyYXRvci5vCitMSUJfT0JKUyArPSBlZGl0b3IubworTElCX09CSlMgKz0gZW50cnkubworTElCX09CSlMgKz0gZW52aXJvbm1lbnQubworTElCX09CSlMgKz0gZXdhaC9iaXRtYXAubworTElCX09CSlMgKz0gZXdhaC9ld2FoX2JpdG1hcC5vCitMSUJfT0JKUyArPSBld2FoL2V3YWhfaW8ubworTElCX09CSlMgKz0gZXdhaC9ld2FoX3Jsdy5vCitMSUJfT0JKUyArPSBleGVjLWNtZC5vCitMSUJfT0JKUyArPSBmZXRjaC1uZWdvdGlhdG9yLm8KK0xJQl9PQkpTICs9IGZldGNoLXBhY2subworTElCX09CSlMgKz0gZnNjay5vCitMSUJfT0JKUyArPSBmc21vbml0b3IubworTElCX09CSlMgKz0gZ2V0dGV4dC5vCitMSUJfT0JKUyArPSBncGctaW50ZXJmYWNlLm8KK0xJQl9PQkpTICs9IGdyYXBoLm8KK0xJQl9PQkpTICs9IGdyZXAubworTElCX09CSlMgKz0gaGFzaG1hcC5vCitMSUJfT0JKUyArPSBsaW5lYXItYXNzaWdubWVudC5vCitMSUJfT0JKUyArPSBoZWxwLm8KK0xJQl9PQkpTICs9IGhleC5vCitMSUJfT0JKUyArPSBpZGVudC5vCitMSUJfT0JKUyArPSBpbnRlcmRpZmYubworTElCX09CSlMgKz0ganNvbi13cml0ZXIubworTElCX09CSlMgKz0ga3dzZXQubworTElCX09CSlMgKz0gbGV2ZW5zaHRlaW4ubworTElCX09CSlMgKz0gbGluZS1sb2cubworTElCX09CSlMgKz0gbGluZS1yYW5nZS5vCitMSUJfT0JKUyArPSBsaXN0LW9iamVjdHMubworTElCX09CSlMgKz0gbGlzdC1vYmplY3RzLWZpbHRlci5vCitMSUJfT0JKUyArPSBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMubworTElCX09CSlMgKz0gbGwtbWVyZ2UubworTElCX09CSlMgKz0gbG9ja2ZpbGUubworTElCX09CSlMgKz0gbG9nLXRyZWUubworTElCX09CSlMgKz0gbHMtcmVmcy5vCitMSUJfT0JKUyArPSBtYWlsaW5mby5vCitMSUJfT0JKUyArPSBtYWlsbWFwLm8KK0xJQl9PQkpTICs9IG1hdGNoLXRyZWVzLm8KK0xJQl9PQkpTICs9IG1lbS1wb29sLm8KK0xJQl9PQkpTICs9IG1lcmdlLm8KK0xJQl9PQkpTICs9IG1lcmdlLWJsb2JzLm8KK0xJQl9PQkpTICs9IG1lcmdlLXJlY3Vyc2l2ZS5vCitMSUJfT0JKUyArPSBtZXJnZXNvcnQubworTElCX09CSlMgKz0gbWlkeC5vCitMSUJfT0JKUyArPSBuYW1lLWhhc2gubworTElCX09CSlMgKz0gbmVnb3RpYXRvci9kZWZhdWx0Lm8KK0xJQl9PQkpTICs9IG5lZ290aWF0b3Ivc2tpcHBpbmcubworTElCX09CSlMgKz0gbm90ZXMubworTElCX09CSlMgKz0gbm90ZXMtY2FjaGUubworTElCX09CSlMgKz0gbm90ZXMtbWVyZ2UubworTElCX09CSlMgKz0gbm90ZXMtdXRpbHMubworTElCX09CSlMgKz0gb2JqZWN0Lm8KK0xJQl9PQkpTICs9IG9pZG1hcC5vCitMSUJfT0JKUyArPSBvaWRzZXQubworTElCX09CSlMgKz0gcGFja2ZpbGUubworTElCX09CSlMgKz0gcGFjay1iaXRtYXAubworTElCX09CSlMgKz0gcGFjay1iaXRtYXAtd3JpdGUubworTElCX09CSlMgKz0gcGFjay1jaGVjay5vCitMSUJfT0JKUyArPSBwYWNrLW9iamVjdHMubworTElCX09CSlMgKz0gcGFjay1yZXZpbmRleC5vCitMSUJfT0JKUyArPSBwYWNrLXdyaXRlLm8KK0xJQl9PQkpTICs9IHBhZ2VyLm8KK0xJQl9PQkpTICs9IHBhcnNlLW9wdGlvbnMubworTElCX09CSlMgKz0gcGFyc2Utb3B0aW9ucy1jYi5vCitMSUJfT0JKUyArPSBwYXRjaC1kZWx0YS5vCitMSUJfT0JKUyArPSBwYXRjaC1pZHMubworTElCX09CSlMgKz0gcGF0aC5vCitMSUJfT0JKUyArPSBwYXRoc3BlYy5vCitMSUJfT0JKUyArPSBwa3QtbGluZS5vCitMSUJfT0JKUyArPSBwcmVsb2FkLWluZGV4Lm8KK0xJQl9PQkpTICs9IHByZXR0eS5vCitMSUJfT0JKUyArPSBwcmlvLXF1ZXVlLm8KK0xJQl9PQkpTICs9IHByb2dyZXNzLm8KK0xJQl9PQkpTICs9IHByb21pc29yLXJlbW90ZS5vCitMSUJfT0JKUyArPSBwcm9tcHQubworTElCX09CSlMgKz0gcHJvdG9jb2wubworTElCX09CSlMgKz0gcXVvdGUubworTElCX09CSlMgKz0gcmFuZ2UtZGlmZi5vCitMSUJfT0JKUyArPSByZWFjaGFibGUubworTElCX09CSlMgKz0gcmVhZC1jYWNoZS5vCitMSUJfT0JKUyArPSByZWJhc2UubworTElCX09CSlMgKz0gcmViYXNlLWludGVyYWN0aXZlLm8KK0xJQl9PQkpTICs9IHJlZmxvZy13YWxrLm8KK0xJQl9PQkpTICs9IHJlZnMubworTElCX09CSlMgKz0gcmVmcy9maWxlcy1iYWNrZW5kLm8KK0xJQl9PQkpTICs9IHJlZnMvaXRlcmF0b3IubworTElCX09CSlMgKz0gcmVmcy9wYWNrZWQtYmFja2VuZC5vCitMSUJfT0JKUyArPSByZWZzL3JlZi1jYWNoZS5vCitMSUJfT0JKUyArPSByZWZzcGVjLm8KK0xJQl9PQkpTICs9IHJlZi1maWx0ZXIubworTElCX09CSlMgKz0gcmVtb3RlLm8KK0xJQl9PQkpTICs9IHJlcGxhY2Utb2JqZWN0Lm8KK0xJQl9PQkpTICs9IHJlcG8tc2V0dGluZ3MubworTElCX09CSlMgKz0gcmVwb3NpdG9yeS5vCitMSUJfT0JKUyArPSByZXJlcmUubworTElCX09CSlMgKz0gcmVzb2x2ZS11bmRvLm8KK0xJQl9PQkpTICs9IHJldmlzaW9uLm8KK0xJQl9PQkpTICs9IHJ1bi1jb21tYW5kLm8KK0xJQl9PQkpTICs9IHNlbmQtcGFjay5vCitMSUJfT0JKUyArPSBzZXF1ZW5jZXIubworTElCX09CSlMgKz0gc2VydmUubworTElCX09CSlMgKz0gc2VydmVyLWluZm8ubworTElCX09CSlMgKz0gc2V0dXAubworTElCX09CSlMgKz0gc2hhMS1hcnJheS5vCitMSUJfT0JKUyArPSBzaGExLWxvb2t1cC5vCitMSUJfT0JKUyArPSBzaGExLWZpbGUubworTElCX09CSlMgKz0gc2hhMS1uYW1lLm8KK0xJQl9PQkpTICs9IHNoYWxsb3cubworTElCX09CSlMgKz0gc2lkZWJhbmQubworTElCX09CSlMgKz0gc2lnY2hhaW4ubworTElCX09CSlMgKz0gc3BsaXQtaW5kZXgubworTElCX09CSlMgKz0gc3RhYmxlLXFzb3J0Lm8KK0xJQl9PQkpTICs9IHN0cmJ1Zi5vCitMSUJfT0JKUyArPSBzdHJlYW1pbmcubworTElCX09CSlMgKz0gc3RyaW5nLWxpc3QubworTElCX09CSlMgKz0gc3VibW9kdWxlLm8KK0xJQl9PQkpTICs9IHN1Ym1vZHVsZS1jb25maWcubworTElCX09CSlMgKz0gc3ViLXByb2Nlc3MubworTElCX09CSlMgKz0gc3ltbGlua3MubworTElCX09CSlMgKz0gdGFnLm8KK0xJQl9PQkpTICs9IHRlbXBmaWxlLm8KK0xJQl9PQkpTICs9IHRocmVhZC11dGlscy5vCitMSUJfT0JKUyArPSB0bXAtb2JqZGlyLm8KK0xJQl9PQkpTICs9IHRyYWNlLm8KK0xJQl9PQkpTICs9IHRyYWNlMi5vCitMSUJfT0JKUyArPSB0cmFjZTIvdHIyX2NmZy5vCitMSUJfT0JKUyArPSB0cmFjZTIvdHIyX2NtZF9uYW1lLm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfZHN0Lm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfc2lkLm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfc3lzZW52Lm8KK0xJQl9PQkpTICs9IHRyYWNlMi90cjJfdGJ1Zi5vCitMSUJfT0JKUyArPSB0cmFjZTIvdHIyX3RndF9ldmVudC5vCitMSUJfT0JKUyArPSB0cmFjZTIvdHIyX3RndF9ub3JtYWwubworTElCX09CSlMgKz0gdHJhY2UyL3RyMl90Z3RfcGVyZi5vCitMSUJfT0JKUyArPSB0cmFjZTIvdHIyX3Rscy5vCitMSUJfT0JKUyArPSB0cmFpbGVyLm8KK0xJQl9PQkpTICs9IHRyYW5zcG9ydC5vCitMSUJfT0JKUyArPSB0cmFuc3BvcnQtaGVscGVyLm8KK0xJQl9PQkpTICs9IHRyZWUtZGlmZi5vCitMSUJfT0JKUyArPSB0cmVlLm8KK0xJQl9PQkpTICs9IHRyZWUtd2Fsay5vCitMSUJfT0JKUyArPSB1bnBhY2stdHJlZXMubworTElCX09CSlMgKz0gdXBsb2FkLXBhY2subworTElCX09CSlMgKz0gdXJsLm8KK0xJQl9PQkpTICs9IHVybG1hdGNoLm8KK0xJQl9PQkpTICs9IHVzYWdlLm8KK0xJQl9PQkpTICs9IHVzZXJkaWZmLm8KK0xJQl9PQkpTICs9IHV0ZjgubworTElCX09CSlMgKz0gdmFyaW50Lm8KK0xJQl9PQkpTICs9IHZlcnNpb24ubworTElCX09CSlMgKz0gdmVyc2lvbmNtcC5vCitMSUJfT0JKUyArPSB3YWxrZXIubworTElCX09CSlMgKz0gd2lsZG1hdGNoLm8KK0xJQl9PQkpTICs9IHdvcmt0cmVlLm8KK0xJQl9PQkpTICs9IHdyYXBwZXIubworTElCX09CSlMgKz0gd3JpdGUtb3ItZGllLm8KK0xJQl9PQkpTICs9IHdzLm8KK0xJQl9PQkpTICs9IHd0LXN0YXR1cy5vCitMSUJfT0JKUyArPSB4ZGlmZi1pbnRlcmZhY2UubworTElCX09CSlMgKz0gemxpYi5vCisKK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2FkZC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9hbS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9hbm5vdGF0ZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9hcHBseS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9hcmNoaXZlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2Jpc2VjdC0taGVscGVyLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2JsYW1lLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2JyYW5jaC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9idW5kbGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2F0LWZpbGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2stYXR0ci5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVjay1pZ25vcmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVjay1yZWYtZm9ybWF0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrb3V0LWluZGV4Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrb3V0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NsZWFuLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2Nsb25lLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NvbHVtbi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb21taXQtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb21taXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY29tbWl0LWdyYXBoLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NvbmZpZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb3VudC1vYmplY3RzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NyZWRlbnRpYWwubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGVzY3JpYmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGlmZi1maWxlcy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmLWluZGV4Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2RpZmYtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2RpZmZ0b29sLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2Vudi0taGVscGVyLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2Zhc3QtZXhwb3J0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2ZldGNoLXBhY2subworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZmV0Y2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9mb3ItZWFjaC1yZWYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZnNjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9nYy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9nZXQtdGFyLWNvbW1pdC1pZC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9ncmVwLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2hhc2gtb2JqZWN0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2hlbHAubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vaW5kZXgtcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9pbml0LWRiLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9sb2cubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbHMtZmlsZXMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbHMtcmVtb3RlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2xzLXRyZWUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWFpbGluZm8ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWFpbHNwbGl0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLWJhc2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWVyZ2UtZmlsZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tZXJnZS1pbmRleC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tZXJnZS1vdXJzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tZXJnZS10cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21rdGFnLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21rdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL212Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL25hbWUtcmV2Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL25vdGVzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3BhY2stb2JqZWN0cy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wYWNrLXJlZHVuZGFudC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wYWNrLXJlZnMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcGF0Y2gtaWQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3BydW5lLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3B1bGwubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcHVzaC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yYW5nZS1kaWZmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlYWQtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZWJhc2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlZmxvZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZW1vdGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVtb3RlLWV4dC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZW1vdGUtZmQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVwYWNrLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlcGxhY2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVyZXJlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Jlc2V0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Jldi1saXN0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Jldi1wYXJzZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZXZlcnQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcm0ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc2VuZC1wYWNrLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Nob3J0bG9nLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Nob3ctYnJhbmNoLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Nob3ctaW5kZXgubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc2hvdy1yZWYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3N0YXNoLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3N0cmlwc3BhY2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vc3ltYm9saWMtcmVmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3RhZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91bnBhY2stZmlsZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91bnBhY2stb2JqZWN0cy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91cGRhdGUtaW5kZXgubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdXBkYXRlLXJlZi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdXBsb2FkLWFyY2hpdmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdXBsb2FkLXBhY2subworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdmFyLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3ZlcmlmeS1jb21taXQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdmVyaWZ5LXBhY2subworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdmVyaWZ5LXRhZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi93b3JrdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi93cml0ZS10cmVlLm8KKworIyBUSElSRF9QQVJUWV9TT1VSQ0VTIGlzIGEgbGlzdCBvZiBwYXR0ZXJucyBjb21wYXRpYmxlIHdpdGggdGhlCisjICQoZmlsdGVyKSBhbmQgJChmaWx0ZXItb3V0KSBmYW1pbHkgb2YgZnVuY3Rpb25zLiBUaGV5IHNwZWNpZnkgc291cmNlCisjIGZpbGVzIHdoaWNoIGFyZSB0YWtlbiBmcm9tIHNvbWUgdGhpcmQtcGFydHkgc291cmNlIHdoZXJlIHdlIHdhbnQgdG8gYmUKKyMgbGVzcyBzdHJpY3QgYWJvdXQgaXNzdWVzIHN1Y2ggYXMgY29kaW5nIHN0eWxlIHNvIHdlIGRvbid0IGRpdmVyZ2UgZnJvbQorIyB1cHN0cmVhbSB1bm5lY2Vzc2FyaWx5IChtYWtpbmcgbWVyZ2luZyBpbiBmdXR1cmUgY2hhbmdlcyBlYXNpZXIpLgorVEhJUkRfUEFSVFlfU09VUkNFUyArPSBjb21wYXQvaW5ldF9udG9wLmMKK1RISVJEX1BBUlRZX1NPVVJDRVMgKz0gY29tcGF0L2luZXRfcHRvbi5jCitUSElSRF9QQVJUWV9TT1VSQ0VTICs9IGNvbXBhdC9uZWRtYWxsb2MvJQorVEhJUkRfUEFSVFlfU09VUkNFUyArPSBjb21wYXQvb2JzdGFjay4lCitUSElSRF9QQVJUWV9TT1VSQ0VTICs9IGNvbXBhdC9wb2xsLyUKK1RISVJEX1BBUlRZX1NPVVJDRVMgKz0gY29tcGF0L3JlZ2V4LyUKK1RISVJEX1BBUlRZX1NPVVJDRVMgKz0gc2hhMWNvbGxpc2lvbmRldGVjdGlvbi8lCitUSElSRF9QQVJUWV9TT1VSQ0VTICs9IHNoYTFkYy8lCisKK0dJVExJQlMgPSBjb21tb24tbWFpbi5vICQoTElCX0ZJTEUpICQoWERJRkZfTElCKQorRVhUTElCUyA9CisKK0dJVF9VU0VSX0FHRU5UID0gZ2l0LyQoR0lUX1ZFUlNJT04pCisKK2lmZXEgKCQod2lsZGNhcmQgc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvc2hhMS5oKSxzaGExY29sbGlzaW9uZGV0ZWN0aW9uL2xpYi9zaGExLmgpCitEQ19TSEExX1NVQk1PRFVMRSA9IGF1dG8KIGVuZGlmCiAKLWlmbmRlZiBJTlNUQUxMCi0JSU5TVEFMTCA9IGluc3RhbGwKLWVuZGlmCisjIFNldCBDRkxBR1MsIExERkxBR1MgYW5kIG90aGVyICpGTEFHUyB2YXJpYWJsZXMuIFRoZXNlIG1pZ2h0IGJlCisjIHR3ZWFrZWQgYnkgY29uZmlnLiogYmVsb3cgYXMgd2VsbCBhcyB0aGUgY29tbWFuZC1saW5lLCBib3RoIG9mCisjIHdoaWNoJ2xsIG92ZXJyaWRlIHRoZXNlIGRlZmF1bHRzLgorQ0ZMQUdTID0gLWcgLU8yIC1XYWxsCitMREZMQUdTID0KK0NDX0xEX0RZTlBBVEggPSAtV2wsLXJwYXRoLAorQkFTSUNfQ0ZMQUdTID0gLUkuCitCQVNJQ19MREZMQUdTID0KIAotUk1fUkYgICAgID89IHJtIC1yZgotUk1ESVIgICAgID89IHJtZGlyCisjIGxpYnJhcnkgZmxhZ3MKK0FSRkxBR1MgPSByY3MKK1BUSFJFQURfQ0ZMQUdTID0KIAotSU5TVEFMTF9EMCA9ICQoSU5TVEFMTCkgLWQgLW0gNzU1ICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotSU5TVEFMTF9EMSA9Ci1JTlNUQUxMX1IwID0gJChJTlNUQUxMKSAtbSA2NDQgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCi1JTlNUQUxMX1IxID0KLUlOU1RBTExfWDAgPSAkKElOU1RBTEwpIC1tIDc1NSAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLUlOU1RBTExfWDEgPQotSU5TVEFMTF9BMCA9IGZpbmQgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCi1JTlNUQUxMX0ExID0gfCBjcGlvIC1wdWQKLUlOU1RBTExfTDAgPSBybSAtZiAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLUlOU1RBTExfTDEgPSAmJiBsbiAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLUlOU1RBTExfTDIgPQotSU5TVEFMTF9MMyA9CisjIEZvciB0aGUgJ3NwYXJzZScgdGFyZ2V0CitTUEFSU0VfRkxBR1MgPz0KK1NQX0VYVFJBX0ZMQUdTID0KIAotUkVNT1ZFX0QwICA9ICQoUk1ESVIpICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQotUkVNT1ZFX0QxICA9IHx8IHRydWUKLVJFTU9WRV9GMCAgPSAkKFJNX1JGKSAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKLVJFTU9WRV9GMSAgPQotQ0xFQU5fRFNUICA9IHRydWUKKyMgRm9yIHRoZSAnY29jY2ljaGVjaycgdGFyZ2V0OyBzZXR0aW5nIFNQQVRDSF9CQVRDSF9TSVpFIGhpZ2hlciB3aWxsCisjIHVzdWFsbHkgcmVzdWx0IGluIGxlc3MgQ1BVIHVzYWdlIGF0IHRoZSBjb3N0IG9mIGhpZ2hlciBwZWFrIG1lbW9yeS4KKyMgU2V0dGluZyBpdCB0byAwIHdpbGwgZmVlZCBhbGwgZmlsZXMgaW4gYSBzaW5nbGUgc3BhdGNoIGludm9jYXRpb24uCitTUEFUQ0hfRkxBR1MgPSAtLWFsbC1pbmNsdWRlcyAtLXBhdGNoIC4KK1NQQVRDSF9CQVRDSF9TSVpFID0gMQogCi1pZm5kZWYgVgotCVFVSUVUICAgICAgICAgID0gQAotCVFVSUVUX0dFTiAgICAgID0gJChRVUlFVCllY2hvICcgICAnIEdFTiAnJEAnICYmCi0JUVVJRVRfSU5ERVggICAgPSAkKFFVSUVUKWVjaG8gJyAgICcgSU5ERVggJChkaXIgJEApICYmCi0JUVVJRVRfTVNHRk1UMCAgPSAkKFFVSUVUKXByaW50ZiAnICAgIE1TR0ZNVCAlMTJzICcgJEAgJiYgdj1gCi0JUVVJRVRfTVNHRk1UMSAgPSAyPiYxYCAmJiBlY2hvICIkJHYiIHwgc2VkIC1lICdzL2Z1enp5IHRyYW5zbGF0aW9ucy9mdXp6eS8nIHwgc2VkIC1lICdzLyBtZXNzYWdlcyovL2cnCi0JUVVJRVRfMkRFVk5VTEwgPSAyPi9kZXYvbnVsbAotCi0JSU5TVEFMTF9EMCA9IGRpcj0KLQlJTlNUQUxMX0QxID0gJiYgZWNobyAnICcgREVTVCAkJGRpciAmJiAkKElOU1RBTEwpIC1kIC1tIDc1NSAiJCRkaXIiCi0JSU5TVEFMTF9SMCA9IHNyYz0KLQlJTlNUQUxMX1IxID0gJiYgZWNobyAnICAgJyBJTlNUQUxMIDY0NCBgYmFzZW5hbWUgJCRzcmNgICYmICQoSU5TVEFMTCkgLW0gNjQ0ICQkc3JjCi0JSU5TVEFMTF9YMCA9IHNyYz0KLQlJTlNUQUxMX1gxID0gJiYgZWNobyAnICAgJyBJTlNUQUxMIDc1NSBgYmFzZW5hbWUgJCRzcmNgICYmICQoSU5TVEFMTCkgLW0gNzU1ICQkc3JjCi0JSU5TVEFMTF9BMCA9IHNyYz0KLQlJTlNUQUxMX0ExID0gJiYgZWNobyAnICAgJyBJTlNUQUxMICcgICAnIGBiYXNlbmFtZSAiJCRzcmMiYCAmJiBmaW5kICIkJHNyYyIgfCBjcGlvIC1wdWQKLQotCUlOU1RBTExfTDAgPSBkc3Q9Ci0JSU5TVEFMTF9MMSA9ICYmIHNyYz0KLQlJTlNUQUxMX0wyID0gJiYgZHN0PQotCUlOU1RBTExfTDMgPSAmJiBlY2hvICcgICAnICdMSU5LICAgICAgICcgYGJhc2VuYW1lICIkJGRzdCJgICctPicgYGJhc2VuYW1lICIkJHNyYyJgICYmIHJtIC1mICIkJGRzdCIgJiYgbG4gIiQkc3JjIiAiJCRkc3QiCi0KLQlDTEVBTl9EU1QgPSBlY2hvICcgJyBVTklOU1RBTEwKLQlSRU1PVkVfRDAgPSBkaXI9Ci0JUkVNT1ZFX0QxID0gJiYgZWNobyAnICcgUkVNT1ZFICQkZGlyICYmIHRlc3QgLWQgIiQkZGlyIiAmJiAkKFJNRElSKSAiJCRkaXIiIHx8IHRydWUKLQlSRU1PVkVfRjAgPSBkc3Q9Ci0JUkVNT1ZFX0YxID0gJiYgZWNobyAnICAgJyBSRU1PVkUgYGJhc2VuYW1lICIkJGRzdCJgICYmICQoUk1fUkYpICIkJGRzdCIKLWVuZGlmCi0KLVRDTFRLX1BBVEggPz0gd2lzaAotaWZlcSAoLi8sJChkaXIgJChUQ0xUS19QQVRIKSkpCi0JVENMX1BBVEggPz0gJChzdWJzdCB3aXNoLHRjbHNoLCQoVENMVEtfUEFUSCkpCi1lbHNlCi0JVENMX1BBVEggPz0gJChkaXIgJChUQ0xUS19QQVRIKSkkKG5vdGRpciAkKHN1YnN0IHdpc2gsdGNsc2gsJChUQ0xUS19QQVRIKSkpCi1lbmRpZgotCi1pZmVxICgkKHVuYW1lX1MpLERhcndpbikKLQlUS0ZSQU1FV09SSyA9IC9MaWJyYXJ5L0ZyYW1ld29ya3MvVGsuZnJhbWV3b3JrL1Jlc291cmNlcy9XaXNoLmFwcAotCWlmZXEgKCQoc2hlbGwgZWNobyAiJCh1bmFtZV9SKSIgfCBhd2sgLUYuICd7aWYgKCQkMSA+PSA5KSBwcmludCAieSJ9JylfJChzaGVsbCB0ZXN0IC1kICQoVEtGUkFNRVdPUkspIHx8IGVjaG8gbikseV9uKQotCQlUS0ZSQU1FV09SSyA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1RrLmZyYW1ld29yay9SZXNvdXJjZXMvV2lzaC5hcHAKLQkJaWZlcSAoJChzaGVsbCB0ZXN0IC1kICQoVEtGUkFNRVdPUkspIHx8IGVjaG8gbiksbikKLQkJCVRLRlJBTUVXT1JLID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvVGsuZnJhbWV3b3JrL1Jlc291cmNlcy9XaXNoXCBTaGVsbC5hcHAKLQkJZW5kaWYKLQllbmRpZgotCVRLRVhFQ1VUQUJMRSA9ICQoc2hlbGwgYmFzZW5hbWUgIiQoVEtGUkFNRVdPUkspIiAuYXBwKQotZW5kaWYKLQotaWZlcSAoJChmaW5kc3RyaW5nICQoTUFLRUZMQUdTKSxzKSxzKQotUVVJRVRfR0VOID0KLWVuZGlmCi0KK2luY2x1ZGUgY29uZmlnLm1hay51bmFtZQorLWluY2x1ZGUgY29uZmlnLm1hay5hdXRvZ2VuCiAtaW5jbHVkZSBjb25maWcubWFrCiAKLURFU1RESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKQotZ2l0ZXhlY2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY2RpcikpCi1TSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKLVRDTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xfUEFUSCkpCi1UQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKLVRDTFRLX1BBVEhfU0VEID0gJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLFxcLCQoVENMVEtfUEFUSCkpKQotCi1nZ19saWJkaXIgPz0gJChzaGFyZWRpcikvZ2l0LWd1aS9saWIKLWxpYmRpcl9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKGdnX2xpYmRpcikpCi1saWJkaXJfU0VEID0gJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLFxcLCQoZ2dfbGliZGlyX3NlZF9pbikpKQotZXhlZGlyICAgICA9ICQoZGlyICQoZ2l0ZXhlY2Rpcikpc2hhcmUvZ2l0LWd1aS9saWIKLQotR0lUR1VJX1NDUklQVCAgIDo9ICQkMAotR0lUR1VJX1JFTEFUSVZFIDo9Ci1HSVRHVUlfTUFDT1NYQVBQIDo9Ci0KLWlmZXEgKCQodW5hbWVfTyksQ3lnd2luKQotCUdJVEdVSV9TQ1JJUFQgOj0gYGN5Z3BhdGggLS13aW5kb3dzIC0tYWJzb2x1dGUgIiQoR0lUR1VJX1NDUklQVCkiYAotCi0JIyBJcyB0aGlzIGEgQ3lnd2luIFRjbC9UayBiaW5hcnk/ICBJZiBzbyBpdCBrbm93cyBob3cgdG8gZG8KLQkjIFBPU0lYIHBhdGggdHJhbnNsYXRpb24ganVzdCBsaWtlIGN5Z3BhdGggZG9lcyBhbmQgd2UgbXVzdAotCSMga2VlcCBsaWJkaXIgaW4gUE9TSVggZm9ybWF0IHNvIEN5Z3dpbiBwYWNrYWdlcyBvZiBnaXQtZ3VpCi0JIyB3b3JrIG5vIG1hdHRlciB3aGVyZSB0aGUgdXNlciBpbnN0YWxscyB0aGVtLgotCSMKLQlpZmVxICgkKHNoZWxsIGVjaG8gJ3B1dHMgW2ZpbGUgbm9ybWFsaXplIC9dJyB8ICckKFRDTF9QQVRIX1NRKScpLCQoc2hlbGwgY3lncGF0aCAtLW1peGVkIC0tYWJzb2x1dGUgLykpCi0JCWdnX2xpYmRpcl9zZWRfaW4gOj0gJChnZ19saWJkaXIpCi0JZWxzZQotCQlnZ19saWJkaXJfc2VkX2luIDo9ICQoc2hlbGwgY3lncGF0aCAtLXdpbmRvd3MgLS1hYnNvbHV0ZSAiJChnZ19saWJkaXIpIikKLQllbmRpZgotZWxzZQotCWlmZXEgKCQoZXhlZGlyKSwkKGdnX2xpYmRpcikpCi0JCUdJVEdVSV9SRUxBVElWRSA6PSAxCi0JZW5kaWYKLQlnZ19saWJkaXJfc2VkX2luIDo9ICQoZ2dfbGliZGlyKQoraWZkZWYgREVWRUxPUEVSCitpbmNsdWRlIGNvbmZpZy5tYWsuZGV2CiBlbmRpZgorCitBTExfQ0ZMQUdTID0gJChERVZFTE9QRVJfQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKENGTEFHUykKK0FMTF9MREZMQUdTID0gJChMREZMQUdTKQorCitjb21tYSA6PSAsCitlbXB0eSA6PQorc3BhY2UgOj0gJChlbXB0eSkgJChlbXB0eSkKKworaWZkZWYgU0FOSVRJWkUKK1NBTklUSVpFUlMgOj0gJChmb3JlYWNoIGZsYWcsJChzdWJzdCAkKGNvbW1hKSwkKHNwYWNlKSwkKFNBTklUSVpFKSksJChmbGFnKSkKK0JBU0lDX0NGTEFHUyArPSAtZnNhbml0aXplPSQoU0FOSVRJWkUpIC1mbm8tc2FuaXRpemUtcmVjb3Zlcj0kKFNBTklUSVpFKQorQkFTSUNfQ0ZMQUdTICs9IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyCitpZm5lcSAoJChmaWx0ZXIgdW5kZWZpbmVkLCQoU0FOSVRJWkVSUykpLCkKK0JBU0lDX0NGTEFHUyArPSAtRE5PX1VOQUxJR05FRF9MT0FEUworQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMURDX0ZPUkNFX0FMSUdORURfQUNDRVNTCitlbmRpZgoraWZuZXEgKCQoZmlsdGVyIGxlYWssJChTQU5JVElaRVJTKSksKQorQkFTSUNfQ0ZMQUdTICs9IC1EU1VQUFJFU1NfQU5OT1RBVEVEX0xFQUtTCitlbmRpZgoraWZuZXEgKCQoZmlsdGVyIGFkZHJlc3MsJChTQU5JVElaRVJTKSksKQorTk9fUkVHRVggPSBOZWVkZWRGb3JBU0FOCitlbmRpZgorZW5kaWYKKworaWZuZGVmIHN5c2NvbmZkaXIKK2lmZXEgKCQocHJlZml4KSwvdXNyKQorc3lzY29uZmRpciA9IC9ldGMKK2Vsc2UKK3N5c2NvbmZkaXIgPSBldGMKK2VuZGlmCitlbmRpZgorCitpZm5kZWYgQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTCitDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMgPSBhdXRvCitlbmRpZgorCitpZmVxICgkKENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyksYXV0bykKK2RlcF9jaGVjayA9ICQoc2hlbGwgJChDQykgJChBTExfQ0ZMQUdTKSBcCisJLWMgLU1GIC9kZXYvbnVsbCAtTVEgL2Rldi9udWxsIC1NTUQgLU1QIFwKKwkteCBjIC9kZXYvbnVsbCAtbyAvZGV2L251bGwgMj4mMTsgXAorCWVjaG8gJCQ/KQoraWZlcSAoJChkZXBfY2hlY2spLDApCitvdmVycmlkZSBDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMgPSB5ZXMKK2Vsc2UKK292ZXJyaWRlIENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyA9IG5vCitlbmRpZgorZW5kaWYKKworaWZlcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLHllcykKK1VTRV9DT01QVVRFRF9IRUFERVJfREVQRU5ERU5DSUVTID0gWWVzUGxlYXNlCitlbHNlCitpZm5lcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLG5vKQorJChlcnJvciBwbGVhc2Ugc2V0IENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyB0byB5ZXMsIG5vLCBvciBhdXRvIFwKKyhub3QgIiQoQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTKSIpKQorZW5kaWYKK2VuZGlmCisKK2lmZGVmIFNBTkVfVE9PTF9QQVRICitTQU5FX1RPT0xfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0FORV9UT09MX1BBVEgpKQorQlJPS0VOX1BBVEhfRklYID0gJ3N8XlwjIEBAQlJPS0VOX1BBVEhfRklYQEAkJHxnaXRfYnJva2VuX3BhdGhfZml4ICIkKFNBTkVfVE9PTF9QQVRIX1NRKSJ8JworUEFUSCA6PSAkKFNBTkVfVE9PTF9QQVRIKToke1BBVEh9CitlbHNlCitCUk9LRU5fUEFUSF9GSVggPSAnL15cIyBAQEJST0tFTl9QQVRIX0ZJWEBAJCQvZCcKK2VuZGlmCisKK2lmZXEgKCwkKEhPU1RfQ1BVKSkKKwlCQVNJQ19DRkxBR1MgKz0gLURHSVRfSE9TVF9DUFU9IlwiJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh1bmFtZV9NKSkpXCIiCitlbHNlCisJQkFTSUNfQ0ZMQUdTICs9IC1ER0lUX0hPU1RfQ1BVPSJcIiQoSE9TVF9DUFUpXCIiCitlbmRpZgorCitpZm5lcSAoLCQoSU5MSU5FKSkKKwlCQVNJQ19DRkxBR1MgKz0gLURpbmxpbmU9JChJTkxJTkUpCitlbmRpZgorCitpZm5lcSAoLCQoU09DS0xFTl9UKSkKKwlCQVNJQ19DRkxBR1MgKz0gLURzb2NrbGVuX3Q9JChTT0NLTEVOX1QpCitlbmRpZgorCitpZmVxICh5ZXMsJChVU0VfUEFSRU5TX0FST1VORF9HRVRURVhUX04pKQorCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTj0xCitlbHNlCitpZmVxIChubywkKFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTikpCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OPTAKK2VuZGlmCitlbmRpZgorCiBpZmVxICgkKHVuYW1lX1MpLERhcndpbikKLQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgJChUS0ZSQU1FV09SSykgJiYgZWNobyB5KSx5KQotCQlHSVRHVUlfTUFDT1NYQVBQIDo9IFllc1BsZWFzZQorCWlmbmRlZiBOT19GSU5LCisJCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAvc3cvbGliICYmIGVjaG8geSkseSkKKwkJCUJBU0lDX0NGTEFHUyArPSAtSS9zdy9pbmNsdWRlCisJCQlCQVNJQ19MREZMQUdTICs9IC1ML3N3L2xpYgorCQllbmRpZgogCWVuZGlmCi1lbmRpZgotaWZuZXEgKCwkKGZpbmRzdHJpbmcgTUlOR1csJCh1bmFtZV9TKSkpCi1pZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJzFcLicpLDIpCi0JTk9fTVNHRk1UPTEKLWVuZGlmCi0JR0lUR1VJX1dJTkRPV1NfV1JBUFBFUiA6PSBZZXNQbGVhc2UKLQlHSVRHVUlfUkVMQVRJVkUgOj0gMQorCWlmbmRlZiBOT19EQVJXSU5fUE9SVFMKKwkJaWZlcSAoJChzaGVsbCB0ZXN0IC1kIC9vcHQvbG9jYWwvbGliICYmIGVjaG8geSkseSkKKwkJCUJBU0lDX0NGTEFHUyArPSAtSS9vcHQvbG9jYWwvaW5jbHVkZQorCQkJQkFTSUNfTERGTEFHUyArPSAtTC9vcHQvbG9jYWwvbGliCisJCWVuZGlmCisJZW5kaWYKKwlpZm5kZWYgTk9fQVBQTEVfQ09NTU9OX0NSWVBUTworCQlOT19PUEVOU1NMID0gWWVzUGxlYXNlCisJCUFQUExFX0NPTU1PTl9DUllQVE8gPSBZZXNQbGVhc2UKKwkJQ09NUEFUX0NGTEFHUyArPSAtREFQUExFX0NPTU1PTl9DUllQVE8KKwllbmRpZgorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJUFRIUkVBRF9MSUJTID0KIGVuZGlmCiAKLWlmZGVmIEdJVEdVSV9NQUNPU1hBUFAKLUdJVEdVSV9NQUlOIDo9IGdpdC1ndWkudGNsCi0KLWdpdC1ndWk6IEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCi0JJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKLQllY2hvICcjISQoU0hFTExfUEFUSF9TUSknID4kQCsgJiYgXAotCWVjaG8gJ2lmIHRlc3QgInokJCoiID0genZlcnNpb24gfHwnID4+JEArICYmIFwKLQllY2hvICcgICB0ZXN0ICJ6JCQqIiA9IHotLXZlcnNpb24nID4+JEArICYmIFwKLQllY2hvIHRoZW4gPj4kQCsgJiYgXAotCWVjaG8gJwknZWNobyBcJ2dpdC1ndWkgdmVyc2lvbiAnJChHSVRHVUlfVkVSU0lPTiknXCcgPj4kQCsgJiYgXAotCWVjaG8gZWxzZSA+PiRAKyAmJiBcCi0JZWNobyAnCWxpYmRpcj0iJCR7R0lUX0dVSV9MSUJfRElSOi0kKGxpYmRpcl9TUSl9IicgPj4kQCsgJiYgXAotCWVjaG8gJwknZXhlYyBcIickJGxpYmRpci9HaXQgR3VpLmFwcC9Db250ZW50cy9NYWNPUy8kKHN1YnN0IFwsLCQoVEtFWEVDVVRBQkxFKSknXCIgXAotCQknIiQkMCIgIiQkQCInID4+JEArICYmIFwKLQllY2hvIGZpID4+JEArICYmIFwKLQljaG1vZCAreCAkQCsgJiYgXAotCW12ICRAKyAkQAotCi1HaXRcIEd1aS5hcHA6IEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTIFwKLQkJbWFjb3N4L0luZm8ucGxpc3QgXAotCQltYWNvc3gvZ2l0LWd1aS5pY25zIFwKLQkJbWFjb3N4L0FwcE1haW4udGNsIFwKLQkJJChUS0ZSQU1FV09SSykvQ29udGVudHMvTWFjT1MvJChUS0VYRUNVVEFCTEUpCi0JJChRVUlFVF9HRU4pcm0gLXJmICckQCcgJyRAJysgJiYgXAotCW1rZGlyIC1wICckQCcrL0NvbnRlbnRzL01hY09TICYmIFwKLQlta2RpciAtcCAnJEAnKy9Db250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cyAmJiBcCi0JY3AgJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgXCwsJChUS0ZSQU1FV09SSykvQ29udGVudHMvTWFjT1MvJChUS0VYRUNVVEFCTEUpKSknIFwKLQkJJyRAJysvQ29udGVudHMvTWFjT1MgJiYgXAotCWNwIG1hY29zeC9naXQtZ3VpLmljbnMgJyRAJysvQ29udGVudHMvUmVzb3VyY2VzICYmIFwKLQlzZWQgLWUgJ3MvQEBHSVRHVUlfVkVSU0lPTkBALyQoR0lUR1VJX1ZFUlNJT04pL2cnIFwKLQkJLWUgJ3MvQEBHSVRHVUlfVEtFWEVDVVRBQkxFQEAvJChUS0VYRUNVVEFCTEUpL2cnIFwKLQkJbWFjb3N4L0luZm8ucGxpc3QgXAotCQk+JyRAJysvQ29udGVudHMvSW5mby5wbGlzdCAmJiBcCi0Jc2VkIC1lICdzfEBAZ2l0ZXhlY2RpckBAfCQoZ2l0ZXhlY2Rpcl9TUSl8JyBcCi0JCS1lICdzfEBAR0lUR1VJX0xJQkRJUkBAfCQobGliZGlyX1NFRCl8JyBcCi0JCW1hY29zeC9BcHBNYWluLnRjbCBcCi0JCT4nJEAnKy9Db250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cy9BcHBNYWluLnRjbCAmJiBcCi0JbXYgJyRAJysgJyRAJworaWZkZWYgTk9fTElCR0VOX0gKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTElCR0VOX0gKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvYmFzZW5hbWUubwogZW5kaWYKIAotaWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgotR0lUR1VJX01BSU4gOj0gZ2l0LWd1aS50Y2wKK1VTRV9MSUJQQ1JFMiA/PSAkKFVTRV9MSUJQQ1JFKQogCi1naXQtZ3VpOiB3aW5kb3dzL2dpdC1ndWkuc2gKLQljcCAkPCAkQAoraWZuZXEgKCwkKFVTRV9MSUJQQ1JFMikpCisJaWZkZWYgVVNFX0xJQlBDUkUxCiskKGVycm9yIE9ubHkgc2V0IFVTRV9MSUJQQ1JFMiAob3IgaXRzIGFsaWFzIFVTRV9MSUJQQ1JFKSBvciBVU0VfTElCUENSRTEsIG5vdCBib3RoISkKKwllbmRpZgorCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX0xJQlBDUkUyCisJRVhUTElCUyArPSAtbHBjcmUyLTgKIGVuZGlmCiAKLSQoR0lUR1VJX01BSU4pOiBnaXQtZ3VpLnNoIEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCi0JJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKLQlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAotCQktZSAnc3xAQFNIRUxMX1BBVEhAQHwkKFNIRUxMX1BBVEhfU1EpfCcgXAotCQktZSAnMSwzMHN8XiBhcmd2MD0kJDB8IGFyZ3YwPSQoR0lUR1VJX1NDUklQVCl8JyBcCi0JCS1lICcxLDMwc3xeIGV4ZWMgd2lzaCB8IGV4ZWMgJ1wnJyQoVENMVEtfUEFUSF9TRUQpJ1wnJyB8JyBcCi0JCS1lICdzL0BAR0lUR1VJX1ZFUlNJT05AQC8kKEdJVEdVSV9WRVJTSU9OKS9nJyBcCi0JCS1lICdzfEBAR0lUR1VJX1JFTEFUSVZFQEB8JChHSVRHVUlfUkVMQVRJVkUpfCcgXAotCQktZSAnJChHSVRHVUlfUkVMQVRJVkUpc3xAQEdJVEdVSV9MSUJESVJAQHwkKGxpYmRpcl9TRUQpfCcgXAotCQlnaXQtZ3VpLnNoID4kQCsgJiYgXAotCWNobW9kICt4ICRAKyAmJiBcCi0JbXYgJEArICRACitpZmRlZiBVU0VfTElCUENSRTEKKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfTElCUENSRTEKKwlFWFRMSUJTICs9IC1scGNyZQogCi1YR0VUVEVYVCAgID89IHhnZXR0ZXh0Ci1pZmRlZiBOT19NU0dGTVQKLQlNU0dGTVQgPz0gJChUQ0xfUEFUSCkgcG8vcG8ybXNnLnNoCitpZmRlZiBOT19MSUJQQ1JFMV9KSVQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQQ1JFMV9KSVQKK2VuZGlmCitlbmRpZgorCitpZmRlZiBMSUJQQ1JFRElSCisJQkFTSUNfQ0ZMQUdTICs9IC1JJChMSUJQQ1JFRElSKS9pbmNsdWRlCisJRVhUTElCUyArPSAtTCQoTElCUENSRURJUikvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKExJQlBDUkVESVIpLyQobGliKQorZW5kaWYKKworaWZkZWYgSEFWRV9BTExPQ0FfSAorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfQUxMT0NBX0gKK2VuZGlmCisKK0lNQVBfU0VORF9CVUlMRERFUFMgPQorSU1BUF9TRU5EX0xERkxBR1MgPQorCitpZmRlZiBOT19DVVJMCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fQ1VSTAorCVJFTU9URV9DVVJMX1BSSU1BUlkgPQorCVJFTU9URV9DVVJMX0FMSUFTRVMgPQorCVJFTU9URV9DVVJMX05BTUVTID0KKwlFWENMVURFRF9QUk9HUkFNUyArPSBnaXQtaHR0cC1mZXRjaCBnaXQtaHR0cC1wdXNoCiBlbHNlCi0JTVNHRk1UID89IG1zZ2ZtdAotCWlmbmVxICgkKHNoZWxsICQoTVNHRk1UKSAtLXRjbCAtbCBDIC1kIC4gL2Rldi9udWxsIDI+L2Rldi9udWxsOyBlY2hvICQkPyksMCkKLQkJTVNHRk1UIDo9ICQoVENMX1BBVEgpIHBvL3BvMm1zZy5zaAorCWlmZGVmIENVUkxESVIKKwkJIyBUcnkgIi1XbCwtcnBhdGg9JChDVVJMRElSKS8kKGxpYikiIGluIHN1Y2ggYSBjYXNlLgorCQlCQVNJQ19DRkxBR1MgKz0gLUkkKENVUkxESVIpL2luY2x1ZGUKKwkJQ1VSTF9MSUJDVVJMID0gLUwkKENVUkxESVIpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChDVVJMRElSKS8kKGxpYikKKwllbHNlCisJCUNVUkxfTElCQ1VSTCA9CisJZW5kaWYKKworaWZkZWYgQ1VSTF9MREZMQUdTCisJQ1VSTF9MSUJDVVJMICs9ICQoQ1VSTF9MREZMQUdTKQorZWxzZQorCUNVUkxfTElCQ1VSTCArPSAkKHNoZWxsICQoQ1VSTF9DT05GSUcpIC0tbGlicykKK2VuZGlmCisKKwlSRU1PVEVfQ1VSTF9QUklNQVJZID0gZ2l0LXJlbW90ZS1odHRwJFgKKwlSRU1PVEVfQ1VSTF9BTElBU0VTID0gZ2l0LXJlbW90ZS1odHRwcyRYIGdpdC1yZW1vdGUtZnRwJFggZ2l0LXJlbW90ZS1mdHBzJFgKKwlSRU1PVEVfQ1VSTF9OQU1FUyA9ICQoUkVNT1RFX0NVUkxfUFJJTUFSWSkgJChSRU1PVEVfQ1VSTF9BTElBU0VTKQorCVBST0dSQU1fT0JKUyArPSBodHRwLWZldGNoLm8KKwlQUk9HUkFNUyArPSAkKFJFTU9URV9DVVJMX05BTUVTKQorCWN1cmxfY2hlY2sgOj0gJChzaGVsbCAoZWNobyAwNzA5MDg7ICQoQ1VSTF9DT05GSUcpIC0tdmVybnVtIHwgc2VkIC1lICcvXjcwW0JDXS9zL14vMC8nKSAyPi9kZXYvbnVsbCB8IHNvcnQgLXIgfCBzZWQgLW5lIDJwKQorCWlmZXEgIiQoY3VybF9jaGVjaykiICIwNzA5MDgiCisJCWlmbmRlZiBOT19FWFBBVAorCQkJUFJPR1JBTV9PQkpTICs9IGh0dHAtcHVzaC5vCisJCWVsc2UKKwkJCUVYQ0xVREVEX1BST0dSQU1TICs9IGdpdC1odHRwLXB1c2gKKwkJZW5kaWYKKwllbHNlCisJCUVYQ0xVREVEX1BST0dSQU1TICs9IGdpdC1odHRwLXB1c2gKKwllbmRpZgorCWN1cmxfY2hlY2sgOj0gJChzaGVsbCAoZWNobyAwNzIyMDA7ICQoQ1VSTF9DT05GSUcpIC0tdmVybnVtIHwgc2VkIC1lICcvXjcwW0JDXS9zL14vMC8nKSAyPi9kZXYvbnVsbCB8IHNvcnQgLXIgfCBzZWQgLW5lIDJwKQorCWlmZXEgIiQoY3VybF9jaGVjaykiICIwNzIyMDAiCisJCVVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQgPSBZZXNQbGVhc2UKKwllbmRpZgorCWlmZGVmIFVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQKKwkJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX0NVUkxfRk9SX0lNQVBfU0VORAorCQlJTUFQX1NFTkRfQlVJTERERVBTID0gaHR0cC5vCisJCUlNQVBfU0VORF9MREZMQUdTICs9ICQoQ1VSTF9MSUJDVVJMKQorCWVuZGlmCisJaWZuZGVmIE5PX0VYUEFUCisJCWlmZGVmIEVYUEFURElSCisJCQlCQVNJQ19DRkxBR1MgKz0gLUkkKEVYUEFURElSKS9pbmNsdWRlCisJCQlFWFBBVF9MSUJFWFBBVCA9IC1MJChFWFBBVERJUikvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKEVYUEFURElSKS8kKGxpYikgLWxleHBhdAorCQllbHNlCisJCQlFWFBBVF9MSUJFWFBBVCA9IC1sZXhwYXQKKwkJZW5kaWYKKwkJaWZkZWYgRVhQQVRfTkVFRFNfWE1MUEFSU0VfSAorCQkJQkFTSUNfQ0ZMQUdTICs9IC1ERVhQQVRfTkVFRFNfWE1MUEFSU0VfSAorCQllbmRpZgogCWVuZGlmCiBlbmRpZgorSU1BUF9TRU5EX0xERkxBR1MgKz0gJChPUEVOU1NMX0xJTkspICQoT1BFTlNTTF9MSUJTU0wpICQoTElCXzRfQ1JZUFRPKQogCi1tc2dzZGlyICAgICA9ICQoZ2dfbGliZGlyKS9tc2dzCi1tc2dzZGlyX1NRICA9ICQoc3Vic3QgJywnXCcnLCQobXNnc2RpcikpCi1QT19URU1QTEFURSA9IHBvL2dpdC1ndWkucG90Ci1BTExfUE9GSUxFUyA9ICQod2lsZGNhcmQgcG8vKi5wbykKLUFMTF9NU0dGSUxFUyA9ICQoc3Vic3QgLnBvLC5tc2csJChBTExfUE9GSUxFUykpCitpZmRlZiBaTElCX1BBVEgKKwlCQVNJQ19DRkxBR1MgKz0gLUkkKFpMSUJfUEFUSCkvaW5jbHVkZQorCUVYVExJQlMgKz0gLUwkKFpMSUJfUEFUSCkvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKFpMSUJfUEFUSCkvJChsaWIpCitlbmRpZgorRVhUTElCUyArPSAtbHoKIAotJChQT19URU1QTEFURSk6ICQoU0NSSVBUX1NIKSAkKEFMTF9MSUJGSUxFUykKLQkkKFhHRVRURVhUKSAta21jIC1MVGNsIC1vICRAICQoU0NSSVBUX1NIKSAkKEFMTF9MSUJGSUxFUykKLXVwZGF0ZS1wbzo6ICQoUE9fVEVNUExBVEUpCi0JJChmb3JlYWNoIHAsICQoQUxMX1BPRklMRVMpLCBlY2hvIFVwZGF0aW5nICRwIDsgbXNnbWVyZ2UgLVUgJHAgJChQT19URU1QTEFURSkgOyApCi0kKEFMTF9NU0dGSUxFUyk6ICUubXNnIDogJS5wbwotCSQoUVVJRVRfTVNHRk1UMCkkKE1TR0ZNVCkgLS1zdGF0aXN0aWNzIC0tdGNsIC1sICQoYmFzZW5hbWUgJChub3RkaXIgJDwpKSAtZCAkKGRpciAkQCkgJDwgJChRVUlFVF9NU0dGTVQxKQoraWZuZGVmIE5PX09QRU5TU0wKKwlPUEVOU1NMX0xJQlNTTCA9IC1sc3NsCisJaWZkZWYgT1BFTlNTTERJUgorCQlCQVNJQ19DRkxBR1MgKz0gLUkkKE9QRU5TU0xESVIpL2luY2x1ZGUKKwkJT1BFTlNTTF9MSU5LID0gLUwkKE9QRU5TU0xESVIpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChPUEVOU1NMRElSKS8kKGxpYikKKwllbHNlCisJCU9QRU5TU0xfTElOSyA9CisJZW5kaWYKKwlpZmRlZiBORUVEU19DUllQVE9fV0lUSF9TU0wKKwkJT1BFTlNTTF9MSUJTU0wgKz0gLWxjcnlwdG8KKwllbmRpZgorZWxzZQorCUJBU0lDX0NGTEFHUyArPSAtRE5PX09QRU5TU0wKKwlPUEVOU1NMX0xJQlNTTCA9CitlbmRpZgoraWZkZWYgTk9fT1BFTlNTTAorCUxJQl80X0NSWVBUTyA9CitlbHNlCitpZmRlZiBORUVEU19TU0xfV0lUSF9DUllQVE8KKwlMSUJfNF9DUllQVE8gPSAkKE9QRU5TU0xfTElOSykgLWxjcnlwdG8gLWxzc2wKK2Vsc2UKKwlMSUJfNF9DUllQVE8gPSAkKE9QRU5TU0xfTElOSykgLWxjcnlwdG8KK2VuZGlmCitpZmRlZiBBUFBMRV9DT01NT05fQ1JZUFRPCisJTElCXzRfQ1JZUFRPICs9IC1mcmFtZXdvcmsgU2VjdXJpdHkgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbgorZW5kaWYKK2VuZGlmCitpZm5kZWYgTk9fSUNPTlYKKwlpZmRlZiBORUVEU19MSUJJQ09OVgorCQlpZmRlZiBJQ09OVkRJUgorCQkJQkFTSUNfQ0ZMQUdTICs9IC1JJChJQ09OVkRJUikvaW5jbHVkZQorCQkJSUNPTlZfTElOSyA9IC1MJChJQ09OVkRJUikvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKElDT05WRElSKS8kKGxpYikKKwkJZWxzZQorCQkJSUNPTlZfTElOSyA9CisJCWVuZGlmCisJCWlmZGVmIE5FRURTX0xJQklOVExfQkVGT1JFX0xJQklDT05WCisJCQlJQ09OVl9MSU5LICs9IC1saW50bAorCQllbmRpZgorCQlFWFRMSUJTICs9ICQoSUNPTlZfTElOSykgLWxpY29udgorCWVuZGlmCitlbmRpZgoraWZkZWYgSUNPTlZfT01JVFNfQk9NCisJQkFTSUNfQ0ZMQUdTICs9IC1ESUNPTlZfT01JVFNfQk9NCitlbmRpZgoraWZkZWYgTkVFRFNfTElCR0VOCisJRVhUTElCUyArPSAtbGdlbgorZW5kaWYKK2lmbmRlZiBOT19HRVRURVhUCitpZm5kZWYgTElCQ19DT05UQUlOU19MSUJJTlRMCisJRVhUTElCUyArPSAtbGludGwKK2VuZGlmCitlbmRpZgoraWZkZWYgTkVFRFNfU09DS0VUCisJRVhUTElCUyArPSAtbHNvY2tldAorZW5kaWYKK2lmZGVmIE5FRURTX05TTAorCUVYVExJQlMgKz0gLWxuc2wKK2VuZGlmCitpZmRlZiBORUVEU19SRVNPTFYKKwlFWFRMSUJTICs9IC1scmVzb2x2CitlbmRpZgoraWZkZWYgTk9fRF9UWVBFX0lOX0RJUkVOVAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0RfVFlQRV9JTl9ESVJFTlQKK2VuZGlmCitpZmRlZiBOT19HRUNPU19JTl9QV0VOVAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0dFQ09TX0lOX1BXRU5UCitlbmRpZgoraWZkZWYgTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUCitlbmRpZgoraWZkZWYgVVNFX05TRUMKKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfTlNFQworZW5kaWYKK2lmZGVmIFVTRV9TVF9USU1FU1BFQworCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9TVF9USU1FU1BFQworZW5kaWYKK2lmZGVmIE5PX05PUkVUVVJOCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTk9SRVRVUk4KK2VuZGlmCitpZmRlZiBOT19OU0VDCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTlNFQworZW5kaWYKK2lmZGVmIFNOUFJJTlRGX1JFVFVSTlNfQk9HVVMKKwlDT01QQVRfQ0ZMQUdTICs9IC1EU05QUklOVEZfUkVUVVJOU19CT0dVUworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zbnByaW50Zi5vCitlbmRpZgoraWZkZWYgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMKKwlDT01QQVRfQ0ZMQUdTICs9IC1ERlJFQURfUkVBRFNfRElSRUNUT1JJRVMKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvZm9wZW4ubworZW5kaWYKK2lmZGVmIE5PX1NZTUxJTktfSEVBRAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1NZTUxJTktfSEVBRAorZW5kaWYKK2lmZGVmIEdFVFRFWFRfUE9JU09OCiskKHdhcm5pbmcgVGhlIEdFVFRFWFRfUE9JU09OIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkIGluIGZhdm9yIG9mIHJ1bnRpbWUgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04uIFNlZSB0L1JFQURNRSEpCitlbmRpZgoraWZkZWYgTk9fR0VUVEVYVAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0dFVFRFWFQKKwlVU0VfR0VUVEVYVF9TQ0hFTUUgPz0gZmFsbHRocm91Z2gKK2VuZGlmCitpZmRlZiBOT19QT0xMCisJTk9fUE9MTF9IID0gWWVzUGxlYXNlCisJTk9fU1lTX1BPTExfSCA9IFllc1BsZWFzZQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19QT0xMIC1JY29tcGF0L3BvbGwKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvcG9sbC9wb2xsLm8KK2VuZGlmCitpZmRlZiBOT19TVFJDQVNFU1RSCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NUUkNBU0VTVFIKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvc3RyY2FzZXN0ci5vCitlbmRpZgoraWZkZWYgTk9fU1RSTENQWQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TVFJMQ1BZCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3N0cmxjcHkubworZW5kaWYKK2lmZGVmIE5PX1NUUlRPVU1BWAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TVFJUT1VNQVgKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvc3RydG91bWF4Lm8gY29tcGF0L3N0cnRvaW1heC5vCitlbmRpZgoraWZkZWYgTk9fU1RSVE9VTEwKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU1RSVE9VTEwKK2VuZGlmCitpZmRlZiBOT19TRVRFTlYKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU0VURU5WCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3NldGVudi5vCitlbmRpZgoraWZkZWYgTk9fTUtEVEVNUAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19NS0RURU1QCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L21rZHRlbXAubworZW5kaWYKK2lmZGVmIE1LRElSX1dPX1RSQUlMSU5HX1NMQVNICisJQ09NUEFUX0NGTEFHUyArPSAtRE1LRElSX1dPX1RSQUlMSU5HX1NMQVNICisJQ09NUEFUX09CSlMgKz0gY29tcGF0L21rZGlyLm8KK2VuZGlmCitpZmRlZiBOT19VTlNFVEVOVgorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19VTlNFVEVOVgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC91bnNldGVudi5vCitlbmRpZgoraWZkZWYgTk9fU1lTX1NFTEVDVF9ICisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fU1lTX1NFTEVDVF9ICitlbmRpZgoraWZkZWYgTk9fUE9MTF9ICisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fUE9MTF9ICitlbmRpZgoraWZkZWYgTk9fU1lTX1BPTExfSAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1NZU19QT0xMX0gKK2VuZGlmCitpZmRlZiBORUVEU19TWVNfUEFSQU1fSAorCUJBU0lDX0NGTEFHUyArPSAtRE5FRURTX1NZU19QQVJBTV9ICitlbmRpZgoraWZkZWYgTk9fSU5UVFlQRVNfSAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0lOVFRZUEVTX0gKK2VuZGlmCitpZmRlZiBOT19JTklUR1JPVVBTCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSU5JVEdST1VQUworZW5kaWYKK2lmZGVmIE5PX01NQVAKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTU1BUAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9tbWFwLm8KK2Vsc2UKKwlpZmRlZiBVU0VfV0lOMzJfTU1BUAorCQlDT01QQVRfQ0ZMQUdTICs9IC1EVVNFX1dJTjMyX01NQVAKKwkJQ09NUEFUX09CSlMgKz0gY29tcGF0L3dpbjMybW1hcC5vCisJZW5kaWYKK2VuZGlmCitpZmRlZiBNTUFQX1BSRVZFTlRTX0RFTEVURQorCUJBU0lDX0NGTEFHUyArPSAtRE1NQVBfUFJFVkVOVFNfREVMRVRFCitlbmRpZgoraWZkZWYgT0JKRUNUX0NSRUFUSU9OX1VTRVNfUkVOQU1FUworCUNPTVBBVF9DRkxBR1MgKz0gLURPQkpFQ1RfQ1JFQVRJT05fTU9ERT0xCitlbmRpZgoraWZkZWYgTk9fU1RSVUNUX0lUSU1FUlZBTAorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TVFJVQ1RfSVRJTUVSVkFMCisJTk9fU0VUSVRJTUVSID0gWWVzUGxlYXNlCitlbmRpZgoraWZkZWYgTk9fU0VUSVRJTUVSCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NFVElUSU1FUgorZW5kaWYKK2lmZGVmIE5PX1BSRUFECisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1BSRUFECisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3ByZWFkLm8KK2VuZGlmCitpZmRlZiBOT19GQVNUX1dPUktJTkdfRElSRUNUT1JZCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fRkFTVF9XT1JLSU5HX0RJUkVDVE9SWQorZW5kaWYKK2lmZGVmIE5PX1RSVVNUQUJMRV9GSUxFTU9ERQorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1RSVVNUQUJMRV9GSUxFTU9ERQorZW5kaWYKK2lmZGVmIE5FRURTX01PREVfVFJBTlNMQVRJT04KKwlDT01QQVRfQ0ZMQUdTICs9IC1ETkVFRFNfTU9ERV9UUkFOU0xBVElPTgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zdGF0Lm8KK2VuZGlmCitpZmRlZiBOT19JUFY2CisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSVBWNgorZW5kaWYKK2lmZGVmIE5PX0lOVFBUUl9UCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX0lOVFBUUl9UCitlbmRpZgoraWZkZWYgTk9fVUlOVE1BWF9UCisJQkFTSUNfQ0ZMQUdTICs9IC1EdWludG1heF90PXVpbnQzMl90CitlbmRpZgoraWZkZWYgTk9fU09DS0FERFJfU1RPUkFHRQoraWZkZWYgTk9fSVBWNgorCUJBU0lDX0NGTEFHUyArPSAtRHNvY2thZGRyX3N0b3JhZ2U9c29ja2FkZHJfaW4KK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLURzb2NrYWRkcl9zdG9yYWdlPXNvY2thZGRyX2luNgorZW5kaWYKK2VuZGlmCitpZmRlZiBOT19JTkVUX05UT1AKKwlMSUJfT0JKUyArPSBjb21wYXQvaW5ldF9udG9wLm8KKwlCQVNJQ19DRkxBR1MgKz0gLUROT19JTkVUX05UT1AKK2VuZGlmCitpZmRlZiBOT19JTkVUX1BUT04KKwlMSUJfT0JKUyArPSBjb21wYXQvaW5ldF9wdG9uLm8KKwlCQVNJQ19DRkxBR1MgKz0gLUROT19JTkVUX1BUT04KK2VuZGlmCitpZmRlZiBOT19VTklYX1NPQ0tFVFMKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19VTklYX1NPQ0tFVFMKKwlFWENMVURFRF9QUk9HUkFNUyArPSBnaXQtY3JlZGVudGlhbC1jYWNoZSBnaXQtY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uCitlbHNlCisJTElCX09CSlMgKz0gdW5peC1zb2NrZXQubworCVBST0dSQU1fT0JKUyArPSBjcmVkZW50aWFsLWNhY2hlLm8KKwlQUk9HUkFNX09CSlMgKz0gY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLm8KK2VuZGlmCiAKLWxpYi90Y2xJbmRleDogJChBTExfTElCRklMRVMpIEdJVC1HVUktVkFSUwotCSQoUVVJRVRfSU5ERVgpaWYgZWNobyBcCi0JICAkKGZvcmVhY2ggcCwkKFBSRUxPQURfRklMRVMpLHNvdXJjZSAkcFw7KSBcCi0JICBhdXRvX21raW5kZXggbGliICQocGF0c3Vic3QgbGliLyUsJSwkKHNvcnQgJChBTExfTElCRklMRVMpKSkgXAotCXwgJChUQ0xfUEFUSCkgJChRVUlFVF8yREVWTlVMTCk7IHRoZW4gOiBvazsgXAoraWZkZWYgTk9fSUNPTlYKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19JQ09OVgorZW5kaWYKKworaWZkZWYgT0xEX0lDT05WCisJQkFTSUNfQ0ZMQUdTICs9IC1ET0xEX0lDT05WCitlbmRpZgorCitpZmRlZiBOT19ERUZMQVRFX0JPVU5ECisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fREVGTEFURV9CT1VORAorZW5kaWYKKworaWZkZWYgTk9fUE9TSVhfR09PRElFUworCUJBU0lDX0NGTEFHUyArPSAtRE5PX1BPU0lYX0dPT0RJRVMKK2VuZGlmCisKK2lmZGVmIEFQUExFX0NPTU1PTl9DUllQVE8KKwkjIEFwcGxlIENvbW1vbkNyeXB0byByZXF1aXJlcyBjaHVua2luZworCVNIQTFfTUFYX0JMT0NLX1NJWkUgPSAxMDI0TCoxMDI0TCoxMDI0TAorZW5kaWYKKworaWZkZWYgT1BFTlNTTF9TSEExCisJRVhUTElCUyArPSAkKExJQl80X0NSWVBUTykKKwlCQVNJQ19DRkxBR1MgKz0gLURTSEExX09QRU5TU0wKK2Vsc2UKK2lmZGVmIEJMS19TSEExCisJTElCX09CSlMgKz0gYmxvY2stc2hhMS9zaGExLm8KKwlCQVNJQ19DRkxBR1MgKz0gLURTSEExX0JMSworZWxzZQoraWZkZWYgUFBDX1NIQTEKKwlMSUJfT0JKUyArPSBwcGMvc2hhMS5vIHBwYy9zaGExcHBjLm8KKwlCQVNJQ19DRkxBR1MgKz0gLURTSEExX1BQQworZWxzZQoraWZkZWYgQVBQTEVfQ09NTU9OX0NSWVBUTworCUNPTVBBVF9DRkxBR1MgKz0gLURDT01NT05fRElHRVNUX0ZPUl9PUEVOU1NMCisJQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMV9BUFBMRQorZWxzZQorCURDX1NIQTEgOj0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMV9EQworCUxJQl9PQkpTICs9IHNoYTFkY19naXQubworaWZkZWYgRENfU0hBMV9FWFRFUk5BTAorCWlmZGVmIERDX1NIQTFfU1VCTU9EVUxFCisJCWlmbmVxICgkKERDX1NIQTFfU1VCTU9EVUxFKSxhdXRvKQorJChlcnJvciBPbmx5IHNldCBEQ19TSEExX0VYVEVSTkFMIG9yIERDX1NIQTFfU1VCTU9EVUxFLCBub3QgYm90aCkKKwkJZW5kaWYKKwllbmRpZgorCUJBU0lDX0NGTEFHUyArPSAtRERDX1NIQTFfRVhURVJOQUwKKwlFWFRMSUJTICs9IC1sc2hhMWRldGVjdGNvbGwKK2Vsc2UKK2lmZGVmIERDX1NIQTFfU1VCTU9EVUxFCisJTElCX09CSlMgKz0gc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvc2hhMS5vCisJTElCX09CSlMgKz0gc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvdWJjX2NoZWNrLm8KKwlCQVNJQ19DRkxBR1MgKz0gLUREQ19TSEExX1NVQk1PRFVMRQorZWxzZQorCUxJQl9PQkpTICs9IHNoYTFkYy9zaGExLm8KKwlMSUJfT0JKUyArPSBzaGExZGMvdWJjX2NoZWNrLm8KK2VuZGlmCisJQkFTSUNfQ0ZMQUdTICs9IFwKKwkJLURTSEExRENfTk9fU1RBTkRBUkRfSU5DTFVERVMgXAorCQktRFNIQTFEQ19JTklUX1NBRkVfSEFTSF9ERUZBVUxUPTAgXAorCQktRFNIQTFEQ19DVVNUT01fSU5DTFVERV9TSEExX0M9IlwiY2FjaGUuaFwiIiBcCisJCS1EU0hBMURDX0NVU1RPTV9JTkNMVURFX1VCQ19DSEVDS19DPSJcImdpdC1jb21wYXQtdXRpbC5oXCIiCitlbmRpZgorZW5kaWYKK2VuZGlmCitlbmRpZgorZW5kaWYKKworaWZkZWYgT1BFTlNTTF9TSEEyNTYKKwlFWFRMSUJTICs9ICQoTElCXzRfQ1JZUFRPKQorCUJBU0lDX0NGTEFHUyArPSAtRFNIQTI1Nl9PUEVOU1NMCitlbHNlCitpZmRlZiBHQ1JZUFRfU0hBMjU2CisJQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMjU2X0dDUllQVAorCUVYVExJQlMgKz0gLWxnY3J5cHQKK2Vsc2UKKwlMSUJfT0JKUyArPSBzaGEyNTYvYmxvY2svc2hhMjU2Lm8KKwlCQVNJQ19DRkxBR1MgKz0gLURTSEEyNTZfQkxLCitlbmRpZgorZW5kaWYKKworaWZkZWYgU0hBMV9NQVhfQkxPQ0tfU0laRQorCUxJQl9PQkpTICs9IGNvbXBhdC9zaGExLWNodW5rZWQubworCUJBU0lDX0NGTEFHUyArPSAtRFNIQTFfTUFYX0JMT0NLX1NJWkU9IiQoU0hBMV9NQVhfQkxPQ0tfU0laRSkiCitlbmRpZgoraWZkZWYgTk9fSFNUUkVSUk9SCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX0hTVFJFUlJPUgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9oc3RyZXJyb3IubworZW5kaWYKK2lmZGVmIE5PX01FTU1FTQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19NRU1NRU0KKwlDT01QQVRfT0JKUyArPSBjb21wYXQvbWVtbWVtLm8KK2VuZGlmCitpZmRlZiBOT19HRVRQQUdFU0laRQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19HRVRQQUdFU0laRQorZW5kaWYKK2lmZGVmIElOVEVSTkFMX1FTT1JUCisJQ09NUEFUX0NGTEFHUyArPSAtRElOVEVSTkFMX1FTT1JUCitlbmRpZgoraWZkZWYgSEFWRV9JU09fUVNPUlRfUworCUNPTVBBVF9DRkxBR1MgKz0gLURIQVZFX0lTT19RU09SVF9TCitlbHNlCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3Fzb3J0X3MubworZW5kaWYKK2lmZGVmIFJVTlRJTUVfUFJFRklYCisJQ09NUEFUX0NGTEFHUyArPSAtRFJVTlRJTUVfUFJFRklYCitlbmRpZgorCitpZmRlZiBOT19QVEhSRUFEUworCUJBU0lDX0NGTEFHUyArPSAtRE5PX1BUSFJFQURTCitlbHNlCisJQkFTSUNfQ0ZMQUdTICs9ICQoUFRIUkVBRF9DRkxBR1MpCisJRVhUTElCUyArPSAkKFBUSFJFQURfTElCUykKK2VuZGlmCisKK2lmZGVmIEhBVkVfUEFUSFNfSAorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfUEFUSFNfSAorZW5kaWYKKworaWZkZWYgSEFWRV9MSUJDSEFSU0VUX0gKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0xJQkNIQVJTRVRfSAorCUVYVExJQlMgKz0gJChDSEFSU0VUX0xJQikKK2VuZGlmCisKK2lmZGVmIEhBVkVfU1RSSU5HU19ICisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9TVFJJTkdTX0gKK2VuZGlmCisKK2lmZGVmIEhBVkVfREVWX1RUWQorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfREVWX1RUWQorZW5kaWYKKworaWZkZWYgRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTCisJQ09NUEFUX0NGTEFHUyArPSAtRERJUl9IQVNfQlNEX0dST1VQX1NFTUFOVElDUworZW5kaWYKK2lmZGVmIFVOUkVMSUFCTEVfRlNUQVQKKwlCQVNJQ19DRkxBR1MgKz0gLURVTlJFTElBQkxFX0ZTVEFUCitlbmRpZgoraWZkZWYgTk9fUkVHRVgKKwlDT01QQVRfQ0ZMQUdTICs9IC1JY29tcGF0L3JlZ2V4CisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3JlZ2V4L3JlZ2V4Lm8KK2VuZGlmCitpZmRlZiBOQVRJVkVfQ1JMRgorCUJBU0lDX0NGTEFHUyArPSAtRE5BVElWRV9DUkxGCitlbmRpZgorCitpZmRlZiBVU0VfTkVEX0FMTE9DQVRPUgorCUNPTVBBVF9DRkxBR1MgKz0gLUljb21wYXQvbmVkbWFsbG9jCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MubworCU9WRVJSSURFX1NUUkRVUCA9IFllc1BsZWFzZQorZW5kaWYKKworaWZkZWYgT1ZFUlJJREVfU1RSRFVQCisJQ09NUEFUX0NGTEFHUyArPSAtRE9WRVJSSURFX1NUUkRVUAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zdHJkdXAubworZW5kaWYKKworaWZkZWYgR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVAorCWV4cG9ydCBHSVRfVEVTVF9DTVBfVVNFX0NPUElFRF9DT05URVhUCitlbmRpZgorCitpZm5kZWYgTk9fTVNHRk1UX0VYVEVOREVEX09QVElPTlMKKwlNU0dGTVQgKz0gLS1jaGVjayAtLXN0YXRpc3RpY3MKK2VuZGlmCisKK2lmZGVmIEdNVElNRV9VTlJFTElBQkxFX0VSUk9SUworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9nbXRpbWUubworCUJBU0lDX0NGTEFHUyArPSAtREdNVElNRV9VTlJFTElBQkxFX0VSUk9SUworZW5kaWYKKworaWZkZWYgSEFWRV9DTE9DS19HRVRUSU1FCisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9DTE9DS19HRVRUSU1FCitlbmRpZgorCitpZmRlZiBIQVZFX0NMT0NLX01PTk9UT05JQworCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfQ0xPQ0tfTU9OT1RPTklDCitlbmRpZgorCitpZmRlZiBORUVEU19MSUJSVAorCUVYVExJQlMgKz0gLWxydAorZW5kaWYKKworaWZkZWYgSEFWRV9CU0RfU1lTQ1RMCisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9CU0RfU1lTQ1RMCitlbmRpZgorCitpZmRlZiBIQVZFX0JTRF9LRVJOX1BST0NfU1lTQ1RMCisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9CU0RfS0VSTl9QUk9DX1NZU0NUTAorZW5kaWYKKworaWZkZWYgSEFWRV9HRVRERUxJTQorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfR0VUREVMSU0KK2VuZGlmCisKK2lmbmVxICgkKFBST0NGU19FWEVDVVRBQkxFX1BBVEgpLCkKKwlwcm9jZnNfZXhlY3V0YWJsZV9wYXRoX1NRID0gJChzdWJzdCAnLCdcJycsJChQUk9DRlNfRVhFQ1VUQUJMRV9QQVRIKSkKKwlCQVNJQ19DRkxBR1MgKz0gJy1EUFJPQ0ZTX0VYRUNVVEFCTEVfUEFUSD0iJChwcm9jZnNfZXhlY3V0YWJsZV9wYXRoX1NRKSInCitlbmRpZgorCitpZmRlZiBIQVZFX05TX0dFVF9FWEVDVVRBQkxFX1BBVEgKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX05TX0dFVF9FWEVDVVRBQkxFX1BBVEgKK2VuZGlmCisKK2lmZGVmIEhBVkVfV1BHTVBUUgorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfV1BHTVBUUgorZW5kaWYKKworaWZkZWYgRklMRU5PX0lTX0FfTUFDUk8KKwlDT01QQVRfQ0ZMQUdTICs9IC1ERklMRU5PX0lTX0FfTUFDUk8KKwlDT01QQVRfT0JKUyArPSBjb21wYXQvZmlsZW5vLm8KK2VuZGlmCisKK2lmZGVmIE5FRURfQUNDRVNTX1JPT1RfSEFORExFUgorCUNPTVBBVF9DRkxBR1MgKz0gLURORUVEX0FDQ0VTU19ST09UX0hBTkRMRVIKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvYWNjZXNzLm8KK2VuZGlmCisKK2lmZXEgKCQoVENMVEtfUEFUSCksKQorTk9fVENMVEsgPSBOb1RoYW5rcworZW5kaWYKKworaWZlcSAoJChQRVJMX1BBVEgpLCkKK05PX1BFUkwgPSBOb1RoYW5rcworZW5kaWYKKworaWZlcSAoJChQWVRIT05fUEFUSCksKQorTk9fUFlUSE9OID0gTm9UaGFua3MKK2VuZGlmCisKK2lmbmRlZiBQQUdFUl9FTlYKK1BBR0VSX0VOViA9IExFU1M9RlJYIExWPS1jCitlbmRpZgorCitRVUlFVF9TVUJESVIwICA9ICskKE1BS0UpIC1DICMgc3BhY2UgdG8gc2VwYXJhdGUgLUMgYW5kIHN1YmRpcgorUVVJRVRfU1VCRElSMSAgPQorCitpZm5lcSAoJChmaW5kc3RyaW5nIHcsJChNQUtFRkxBR1MpKSx3KQorUFJJTlRfRElSID0gLS1uby1wcmludC1kaXJlY3RvcnkKK2Vsc2UgIyAibWFrZSAtdyIKK05PX1NVQkRJUiA9IDoKK2VuZGlmCisKK2lmbmVxICgkKGZpbmRzdHJpbmcgcywkKE1BS0VGTEFHUykpLHMpCitpZm5kZWYgVgorCVFVSUVUX0NDICAgICAgID0gQGVjaG8gJyAgICcgQ0MgJEA7CisJUVVJRVRfQVIgICAgICAgPSBAZWNobyAnICAgJyBBUiAkQDsKKwlRVUlFVF9MSU5LICAgICA9IEBlY2hvICcgICAnIExJTksgJEA7CisJUVVJRVRfQlVJTFRfSU4gPSBAZWNobyAnICAgJyBCVUlMVElOICRAOworCVFVSUVUX0dFTiAgICAgID0gQGVjaG8gJyAgICcgR0VOICRAOworCVFVSUVUX0xOQ1AgICAgID0gQGVjaG8gJyAgICcgTE4vQ1AgJEA7CisJUVVJRVRfWEdFVFRFWFQgPSBAZWNobyAnICAgJyBYR0VUVEVYVCAkQDsKKwlRVUlFVF9NU0dGTVQgICA9IEBlY2hvICcgICAnIE1TR0ZNVCAkQDsKKwlRVUlFVF9HQ09WICAgICA9IEBlY2hvICcgICAnIEdDT1YgJEA7CisJUVVJRVRfU1AgICAgICAgPSBAZWNobyAnICAgJyBTUCAkPDsKKwlRVUlFVF9IRFIgICAgICA9IEBlY2hvICcgICAnIEhEUiAkKDw6aGNjPWgpOworCVFVSUVUX1JDICAgICAgID0gQGVjaG8gJyAgICcgUkMgJEA7CisJUVVJRVRfU1BBVENIICAgPSBAZWNobyAnICAgJyBTUEFUQ0ggJDw7CisJUVVJRVRfU1VCRElSMCAgPSArQHN1YmRpcj0KKwlRVUlFVF9TVUJESVIxICA9IDskKE5PX1NVQkRJUikgZWNobyAnICAgJyBTVUJESVIgJCRzdWJkaXI7IFwKKwkJCSAkKE1BS0UpICQoUFJJTlRfRElSKSAtQyAkJHN1YmRpcgorCWV4cG9ydCBWCisJZXhwb3J0IFFVSUVUX0dFTgorCWV4cG9ydCBRVUlFVF9CVUlMVF9JTgorZW5kaWYKK2VuZGlmCisKK2lmZGVmIE5PX0lOU1RBTExfSEFSRExJTktTCisJZXhwb3J0IE5PX0lOU1RBTExfSEFSRExJTktTCitlbmRpZgorCisjIyMgcHJvZmlsZSBmZWVkYmFjayBidWlsZAorIworCisjIENhbiBhZGp1c3QgdGhpcyB0byBiZSBhIGdsb2JhbCBkaXJlY3RvcnkgaWYgeW91IHdhbnQgdG8gZG8gZXh0ZW5kZWQKKyMgZGF0YSBnYXRoZXJpbmcKK1BST0ZJTEVfRElSIDo9ICQoQ1VSRElSKQorCitpZmVxICgiJChQUk9GSUxFKSIsIkdFTiIpCisJQkFTSUNfQ0ZMQUdTICs9IC1mcHJvZmlsZS1nZW5lcmF0ZT0kKFBST0ZJTEVfRElSKSAtRE5PX05PUkVUVVJOPTEKKwlFWFRMSUJTICs9IC1sZ2NvdgorCWV4cG9ydCBDQ0FDSEVfRElTQUJMRSA9IHQKKwlWID0gMQorZWxzZQoraWZuZXEgKCIkKFBST0ZJTEUpIiwiIikKKwlCQVNJQ19DRkxBR1MgKz0gLWZwcm9maWxlLXVzZT0kKFBST0ZJTEVfRElSKSAtZnByb2ZpbGUtY29ycmVjdGlvbiAtRE5PX05PUkVUVVJOPTEKKwlleHBvcnQgQ0NBQ0hFX0RJU0FCTEUgPSB0CisJViA9IDEKK2VuZGlmCitlbmRpZgorCisjIFNoZWxsIHF1b3RlIChkbyBub3QgdXNlICQoY2FsbCkgdG8gYWNjb21tb2RhdGUgYW5jaWVudCBzZXR1cHMpOworCitFVENfR0lUQ09ORklHX1NRID0gJChzdWJzdCAnLCdcJycsJChFVENfR0lUQ09ORklHKSkKK0VUQ19HSVRBVFRSSUJVVEVTX1NRID0gJChzdWJzdCAnLCdcJycsJChFVENfR0lUQVRUUklCVVRFUykpCisKK0RFU1RESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKQorYmluZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChiaW5kaXIpKQorYmluZGlyX3JlbGF0aXZlX1NRID0gJChzdWJzdCAnLCdcJycsJChiaW5kaXJfcmVsYXRpdmUpKQorbWFuZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChtYW5kaXIpKQorbWFuZGlyX3JlbGF0aXZlX1NRID0gJChzdWJzdCAnLCdcJycsJChtYW5kaXJfcmVsYXRpdmUpKQoraW5mb2Rpcl9yZWxhdGl2ZV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoaW5mb2Rpcl9yZWxhdGl2ZSkpCitwZXJsbGliZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChwZXJsbGliZGlyKSkKK2xvY2FsZWRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQobG9jYWxlZGlyKSkKK2xvY2FsZWRpcl9yZWxhdGl2ZV9TUSA9ICQoc3Vic3QgJywnXCcnLCQobG9jYWxlZGlyX3JlbGF0aXZlKSkKK2dpdGV4ZWNkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGdpdGV4ZWNkaXIpKQorZ2l0ZXhlY2Rpcl9yZWxhdGl2ZV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY2Rpcl9yZWxhdGl2ZSkpCit0ZW1wbGF0ZV9kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKHRlbXBsYXRlX2RpcikpCitodG1sZGlyX3JlbGF0aXZlX1NRID0gJChzdWJzdCAnLCdcJycsJChodG1sZGlyX3JlbGF0aXZlKSkKK3ByZWZpeF9TUSA9ICQoc3Vic3QgJywnXCcnLCQocHJlZml4KSkKK3BlcmxsaWJkaXJfcmVsYXRpdmVfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKHBlcmxsaWJkaXJfcmVsYXRpdmUpKQorZ2l0d2ViZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXR3ZWJkaXIpKQorCitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKK1RFU1RfU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoVEVTVF9TSEVMTF9QQVRIKSkKK1BFUkxfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkKK1BZVEhPTl9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQWVRIT05fUEFUSCkpCitUQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKK0RJRkZfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERJRkYpKQorUEVSTExJQl9FWFRSQV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTExJQl9FWFRSQSkpCisKKyMgUlVOVElNRV9QUkVGSVgncyByZXNvbHV0aW9uIGxvZ2ljIHJlcXVpcmVzIHJlc291cmNlIHBhdGhzIHRvIGJlIGV4cHJlc3NlZAorIyByZWxhdGl2ZSB0byBlYWNoIG90aGVyIGFuZCBzaGFyZSBhbiBpbnN0YWxsYXRpb24gcGF0aC4KKyMKKyMgVGhpcyBpcyBhIGRlcGVuZGVuY3kgaW46CisjIC0gR2l0J3MgYmluYXJ5IFJVTlRJTUVfUFJFRklYIGxvZ2ljIGluIChzZWUgImV4ZWNfY21kLmMiKS4KKyMgLSBUaGUgcnVudGltZSBwcmVmaXggUGVybCBoZWFkZXIgKHNlZQorIyAgICJwZXJsL2hlYWRlcl90ZW1wbGF0ZXMvcnVudGltZV9wcmVmaXgudGVtcGxhdGUucGwiKS4KK2lmZGVmIFJVTlRJTUVfUFJFRklYCisKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKGdpdGV4ZWNkaXJfcmVsYXRpdmUpKSksKQorJChlcnJvciBSVU5USU1FX1BSRUZJWCByZXF1aXJlcyBhIHJlbGF0aXZlIGdpdGV4ZWNkaXIsIG5vdDogJChnaXRleGVjZGlyKSkKK2VuZGlmCisKK2lmbmVxICgkKGZpbHRlciAvJSwkKGZpcnN0d29yZCAkKGxvY2FsZWRpcl9yZWxhdGl2ZSkpKSwpCiskKGVycm9yIFJVTlRJTUVfUFJFRklYIHJlcXVpcmVzIGEgcmVsYXRpdmUgbG9jYWxlZGlyLCBub3Q6ICQobG9jYWxlZGlyKSkKK2VuZGlmCisKK2lmbmRlZiBOT19QRVJMCitpZm5lcSAoJChmaWx0ZXIgLyUsJChmaXJzdHdvcmQgJChwZXJsbGliZGlyX3JlbGF0aXZlKSkpLCkKKyQoZXJyb3IgUlVOVElNRV9QUkVGSVggcmVxdWlyZXMgYSByZWxhdGl2ZSBwZXJsbGliZGlyLCBub3Q6ICQocGVybGxpYmRpcikpCitlbmRpZgorZW5kaWYKKworZW5kaWYKKworIyBXZSBtdXN0IGZpbHRlciBvdXQgYW55IG9iamVjdCBmaWxlcyBmcm9tICQoR0lUTElCUyksCisjIGFzIGl0IGlzIHR5cGljYWxseSB1c2VkIGxpa2U6CisjCisjICAgZm9vOiBmb28ubyAkKEdJVExJQlMpCisjCSQoQ0MpICQoZmlsdGVyICUubywkXikgJChMSUJTKQorIworIyB3aGVyZSB3ZSB1c2UgaXQgYXMgYSBkZXBlbmRlbmN5LiBTaW5jZSB3ZSBhbHNvIHB1bGwgb2JqZWN0IGZpbGVzCisjIGZyb20gdGhlIGRlcGVuZGVuY3kgbGlzdCwgdGhhdCB3b3VsZCBtYWtlIGVhY2ggZW50cnkgYXBwZWFyIHR3aWNlLgorTElCUyA9ICQoZmlsdGVyLW91dCAlLm8sICQoR0lUTElCUykpICQoRVhUTElCUykKKworQkFTSUNfQ0ZMQUdTICs9ICQoQ09NUEFUX0NGTEFHUykKK0xJQl9PQkpTICs9ICQoQ09NUEFUX09CSlMpCisKKyMgUXVvdGUgZm9yIEMKKworaWZkZWYgREVGQVVMVF9FRElUT1IKK0RFRkFVTFRfRURJVE9SX0NRID0gIiQoc3Vic3QgIixcIiwkKHN1YnN0IFwsXFwsJChERUZBVUxUX0VESVRPUikpKSIKK0RFRkFVTFRfRURJVE9SX0NRX1NRID0gJChzdWJzdCAnLCdcJycsJChERUZBVUxUX0VESVRPUl9DUSkpCisKK0JBU0lDX0NGTEFHUyArPSAtRERFRkFVTFRfRURJVE9SPSckKERFRkFVTFRfRURJVE9SX0NRX1NRKScKK2VuZGlmCisKK2lmZGVmIERFRkFVTFRfUEFHRVIKK0RFRkFVTFRfUEFHRVJfQ1EgPSAiJChzdWJzdCAiLFwiLCQoc3Vic3QgXCxcXCwkKERFRkFVTFRfUEFHRVIpKSkiCitERUZBVUxUX1BBR0VSX0NRX1NRID0gJChzdWJzdCAnLCdcJycsJChERUZBVUxUX1BBR0VSX0NRKSkKKworQkFTSUNfQ0ZMQUdTICs9IC1EREVGQVVMVF9QQUdFUj0nJChERUZBVUxUX1BBR0VSX0NRX1NRKScKK2VuZGlmCisKK2lmZGVmIFNIRUxMX1BBVEgKK1NIRUxMX1BBVEhfQ1EgPSAiJChzdWJzdCAiLFwiLCQoc3Vic3QgXCxcXCwkKFNIRUxMX1BBVEgpKSkiCitTSEVMTF9QQVRIX0NRX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIX0NRKSkKKworQkFTSUNfQ0ZMQUdTICs9IC1EU0hFTExfUEFUSD0nJChTSEVMTF9QQVRIX0NRX1NRKScKK2VuZGlmCisKK0dJVF9VU0VSX0FHRU5UX1NRID0gJChzdWJzdCAnLCdcJycsJChHSVRfVVNFUl9BR0VOVCkpCitHSVRfVVNFUl9BR0VOVF9DUSA9ICIkKHN1YnN0ICIsXCIsJChzdWJzdCBcLFxcLCQoR0lUX1VTRVJfQUdFTlQpKSkiCitHSVRfVVNFUl9BR0VOVF9DUV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoR0lUX1VTRVJfQUdFTlRfQ1EpKQorR0lULVVTRVItQUdFTlQ6IEZPUkNFCisJQGlmIHRlc3QgeCckKEdJVF9VU0VSX0FHRU5UX1NRKScgIT0geCJgY2F0IEdJVC1VU0VSLUFHRU5UIDI+L2Rldi9udWxsYCI7IHRoZW4gXAorCQllY2hvICckKEdJVF9VU0VSX0FHRU5UX1NRKScgPkdJVC1VU0VSLUFHRU5UOyBcCisJZmkKKworaWZkZWYgREVGQVVMVF9IRUxQX0ZPUk1BVAorQkFTSUNfQ0ZMQUdTICs9IC1EREVGQVVMVF9IRUxQX0ZPUk1BVD0nIiQoREVGQVVMVF9IRUxQX0ZPUk1BVCkiJworZW5kaWYKKworUEFHRVJfRU5WX1NRID0gJChzdWJzdCAnLCdcJycsJChQQUdFUl9FTlYpKQorUEFHRVJfRU5WX0NRID0gIiQoc3Vic3QgIixcIiwkKHN1YnN0IFwsXFwsJChQQUdFUl9FTlYpKSkiCitQQUdFUl9FTlZfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBBR0VSX0VOVl9DUSkpCitCQVNJQ19DRkxBR1MgKz0gLURQQUdFUl9FTlY9JyQoUEFHRVJfRU5WX0NRX1NRKScKKworQUxMX0NGTEFHUyArPSAkKEJBU0lDX0NGTEFHUykKK0FMTF9MREZMQUdTICs9ICQoQkFTSUNfTERGTEFHUykKKworZXhwb3J0IERJRkYgVEFSIElOU1RBTEwgREVTVERJUiBTSEVMTF9QQVRICisKKworIyMjIEJ1aWxkIHJ1bGVzCisKK1NIRUxMID0gJChTSEVMTF9QQVRIKQorCithbGw6OiBzaGVsbF9jb21wYXRpYmlsaXR5X3Rlc3QKKworaWZlcSAiJChQUk9GSUxFKSIgIkJVSUxEIgorYWxsOjogcHJvZmlsZQorZW5kaWYKKworcHJvZmlsZTo6IHByb2ZpbGUtY2xlYW4KKwkkKE1BS0UpIFBST0ZJTEU9R0VOIGFsbAorCSQoTUFLRSkgUFJPRklMRT1HRU4gLWoxIHRlc3QKKwlAaWYgdGVzdCAtbiAiJCRHSVRfUEVSRl9SRVBPIiB8fCB0ZXN0IC1kIC5naXQ7IHRoZW4gXAorCQkkKE1BS0UpIFBST0ZJTEU9R0VOIC1qMSBwZXJmOyBcCiAJZWxzZSBcCi0JIGVjaG8gPiYyICIgICAgKiAkKFRDTF9QQVRIKSBmYWlsZWQ7IHVzaW5nIHVub3B0aW1pemVkIGxvYWRpbmciOyBcCi0JIHJtIC1mICRAIDsgXAotCSBlY2hvICcjIEF1dG9nZW5lcmF0ZWQgYnkgZ2l0LWd1aSBNYWtlZmlsZScgPiRAICYmIFwKLQkgZWNobyA+PiRAICYmIFwKLQkgJChmb3JlYWNoIHAsJChQUkVMT0FEX0ZJTEVTKSAkKHNvcnQgJChBTExfTElCRklMRVMpKSxlY2hvICckKHN1YnN0IGxpYi8sLCRwKScgPj4kQCAmJikgXAotCSBlY2hvID4+JEAgOyBcCisJCWVjaG8gIlNraXBwaW5nIHByb2ZpbGUgb2YgcGVyZiB0ZXN0cy4uLiI7IFwKKwlmaQorCSQoTUFLRSkgUFJPRklMRT1VU0UgYWxsCisKK3Byb2ZpbGUtZmFzdDogcHJvZmlsZS1jbGVhbgorCSQoTUFLRSkgUFJPRklMRT1HRU4gYWxsCisJJChNQUtFKSBQUk9GSUxFPUdFTiAtajEgcGVyZgorCSQoTUFLRSkgUFJPRklMRT1VU0UgYWxsCisKKworYWxsOjogJChBTExfUFJPR1JBTVMpICQoU0NSSVBUX0xJQikgJChCVUlMVF9JTlMpICQoT1RIRVJfUFJPR1JBTVMpIEdJVC1CVUlMRC1PUFRJT05TCitpZm5lcSAoLCRYKQorCSQoUVVJRVRfQlVJTFRfSU4pJChmb3JlYWNoIHAsJChwYXRzdWJzdCAlJFgsJSwkKGZpbHRlciAlJFgsJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQkWCkpLCB0ZXN0IC1kICckcCcgLW8gJyRwJyAtZWYgJyRwJFgnIHx8ICQoUk0pICckcCc7KQorZW5kaWYKKworYWxsOjoKK2lmbmRlZiBOT19UQ0xUSworCSQoUVVJRVRfU1VCRElSMClnaXQtZ3VpICQoUVVJRVRfU1VCRElSMSkgZ2l0ZXhlY2Rpcj0nJChnaXRleGVjX2luc3RkaXJfU1EpJyBhbGwKKwkkKFFVSUVUX1NVQkRJUjApZ2l0ay1naXQgJChRVUlFVF9TVUJESVIxKSBhbGwKK2VuZGlmCisJJChRVUlFVF9TVUJESVIwKXRlbXBsYXRlcyAkKFFVSUVUX1NVQkRJUjEpIFNIRUxMX1BBVEg9JyQoU0hFTExfUEFUSF9TUSknIFBFUkxfUEFUSD0nJChQRVJMX1BBVEhfU1EpJworCitwbGVhc2Vfc2V0X1NIRUxMX1BBVEhfdG9fYV9tb3JlX21vZGVybl9zaGVsbDoKKwlAJCQoOikKKworc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0OiBwbGVhc2Vfc2V0X1NIRUxMX1BBVEhfdG9fYV9tb3JlX21vZGVybl9zaGVsbAorCitzdHJpcDogJChQUk9HUkFNUykgZ2l0JFgKKwkkKFNUUklQKSAkKFNUUklQX09QVFMpICReCisKKyMjIyBUYXJnZXQtc3BlY2lmaWMgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcworCisjIFRoZSBnZW5lcmljIGNvbXBpbGF0aW9uIHBhdHRlcm4gcnVsZSBhbmQgYXV0b21hdGljYWxseQorIyBjb21wdXRlZCBoZWFkZXIgZGVwZW5kZW5jaWVzIChmYWxsaW5nIGJhY2sgdG8gYSBkZXBlbmRlbmN5IG9uCisjIExJQl9IKSBhcmUgZW5vdWdoIHRvIGRlc2NyaWJlIGhvdyBtb3N0IHRhcmdldHMgc2hvdWxkIGJlIGJ1aWx0LAorIyBidXQgc29tZSB0YXJnZXRzIGFyZSBzcGVjaWFsIGVub3VnaCB0byBuZWVkIHNvbWV0aGluZyBhIGxpdHRsZQorIyBkaWZmZXJlbnQuCisjCisjIC0gV2hlbiBhIHNvdXJjZSBmaWxlICJmb28uYyIgI2luY2x1ZGVzIGEgZ2VuZXJhdGVkIGhlYWRlciBmaWxlLAorIyAgIHdlIG5lZWQgdG8gbGlzdCB0aGF0IGRlcGVuZGVuY3kgZm9yIHRoZSAiZm9vLm8iIHRhcmdldC4KKyMKKyMgICBXZSBhbHNvIGxpc3QgaXQgZnJvbSBvdGhlciB0YXJnZXRzIHRoYXQgYXJlIGJ1aWx0IGZyb20gZm9vLmMKKyMgICBsaWtlICJmb28uc3AiIGFuZCAiZm9vLnMiLCBldmVuIHRob3VnaCB0aGF0IGlzIGVhc3kgdG8gZm9yZ2V0CisjICAgdG8gZG8gYmVjYXVzZSB0aGUgZ2VuZXJhdGVkIGhlYWRlciBpcyBhbHJlYWR5IHByZXNlbnQgYXJvdW5kCisjICAgYWZ0ZXIgYSByZWd1bGFyIGJ1aWxkIGF0dGVtcHQuCisjCisjIC0gU29tZSBjb2RlIGRlcGVuZHMgb24gY29uZmlndXJhdGlvbiBrZXB0IGluIG1ha2VmaWxlCisjICAgdmFyaWFibGVzLiBUaGUgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIEVYVFJBX0NQUEZMQUdTIGNhbgorIyAgIGJlIHVzZWQgdG8gY29udmV5IHRoYXQgaW5mb3JtYXRpb24gdG8gdGhlIEMgcHJlcHJvY2Vzc29yCisjICAgdXNpbmcgLUQgb3B0aW9ucy4KKyMKKyMgICBUaGUgImZvby5vIiB0YXJnZXQgc2hvdWxkIGhhdmUgYSBjb3JyZXNwb25kaW5nIGRlcGVuZGVuY3kgb24KKyMgICBhIGZpbGUgdGhhdCBjaGFuZ2VzIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBtYWtlZmlsZSB2YXJpYWJsZQorIyAgIGNoYW5nZXMuICBGb3IgZXhhbXBsZSwgdGFyZ2V0cyBtYWtpbmcgdXNlIG9mIHRoZQorIyAgICQoR0lUX1ZFUlNJT04pIHZhcmlhYmxlIGRlcGVuZCBvbiBHSVQtVkVSU0lPTi1GSUxFLgorIworIyAgIFRlY2huaWNhbGx5IHRoZSAiLnNwIiBhbmQgIi5zIiB0YXJnZXRzIGRvIG5vdCBuZWVkIHRoaXMKKyMgICBkZXBlbmRlbmN5IGJlY2F1c2UgdGhleSBhcmUgZm9yY2UtYnVpbHQsIGJ1dCB0aGV5IGdldCB0aGUKKyMgICBzYW1lIGRlcGVuZGVuY3kgZm9yIGNvbnNpc3RlbmN5LiBUaGlzIHdheSwgeW91IGRvIG5vdCBoYXZlIHRvCisjICAga25vdyBob3cgZWFjaCB0YXJnZXQgaXMgaW1wbGVtZW50ZWQuIEFuZCBpdCBtZWFucyB0aGUKKyMgICBkZXBlbmRlbmNpZXMgaGVyZSB3aWxsIG5vdCBuZWVkIHRvIGNoYW5nZSBpZiB0aGUgZm9yY2UtYnVpbGQKKyMgICBkZXRhaWxzIGNoYW5nZSBzb21lIGRheS4KKworZ2l0LnNwIGdpdC5zIGdpdC5vOiBHSVQtUFJFRklYCitnaXQuc3AgZ2l0LnMgZ2l0Lm86IEVYVFJBX0NQUEZMQUdTID0gXAorCSctREdJVF9IVE1MX1BBVEg9IiQoaHRtbGRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1ER0lUX01BTl9QQVRIPSIkKG1hbmRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1ER0lUX0lORk9fUEFUSD0iJChpbmZvZGlyX3JlbGF0aXZlX1NRKSInCisKK2dpdCRYOiBnaXQubyBHSVQtTERGTEFHUyAkKEJVSUxUSU5fT0JKUykgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpIFwKKwkJJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisKK2hlbHAuc3AgaGVscC5zIGhlbHAubzogY29tbWFuZC1saXN0LmgKKworYnVpbHRpbi9oZWxwLnNwIGJ1aWx0aW4vaGVscC5zIGJ1aWx0aW4vaGVscC5vOiBjb21tYW5kLWxpc3QuaCBHSVQtUFJFRklYCitidWlsdGluL2hlbHAuc3AgYnVpbHRpbi9oZWxwLnMgYnVpbHRpbi9oZWxwLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCSctREdJVF9IVE1MX1BBVEg9IiQoaHRtbGRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1ER0lUX01BTl9QQVRIPSIkKG1hbmRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1ER0lUX0lORk9fUEFUSD0iJChpbmZvZGlyX3JlbGF0aXZlX1NRKSInCisKK3ZlcnNpb24uc3AgdmVyc2lvbi5zIHZlcnNpb24ubzogR0lULVZFUlNJT04tRklMRSBHSVQtVVNFUi1BR0VOVAordmVyc2lvbi5zcCB2ZXJzaW9uLnMgdmVyc2lvbi5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwknLURHSVRfVkVSU0lPTj0iJChHSVRfVkVSU0lPTikiJyBcCisJJy1ER0lUX1VTRVJfQUdFTlQ9JChHSVRfVVNFUl9BR0VOVF9DUV9TUSknIFwKKwknLURHSVRfQlVJTFRfRlJPTV9DT01NSVQ9IiQoc2hlbGwgXAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJChDVVJESVIpLy4uIiBcCisJCWdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgSEVBRCAyPi9kZXYvbnVsbCkiJworCiskKEJVSUxUX0lOUyk6IGdpdCRYCisJJChRVUlFVF9CVUlMVF9JTikkKFJNKSAkQCAmJiBcCisJbG4gJDwgJEAgMj4vZGV2L251bGwgfHwgXAorCWxuIC1zICQ8ICRAIDI+L2Rldi9udWxsIHx8IFwKKwljcCAkPCAkQAorCitjb21tYW5kLWxpc3QuaDogZ2VuZXJhdGUtY21kbGlzdC5zaCBjb21tYW5kLWxpc3QudHh0CisKK2NvbW1hbmQtbGlzdC5oOiAkKHdpbGRjYXJkIERvY3VtZW50YXRpb24vZ2l0Ki50eHQpIERvY3VtZW50YXRpb24vKmNvbmZpZy50eHQgRG9jdW1lbnRhdGlvbi9jb25maWcvKi50eHQKKwkkKFFVSUVUX0dFTikkKFNIRUxMX1BBVEgpIC4vZ2VuZXJhdGUtY21kbGlzdC5zaCBcCisJCSQocGF0c3Vic3QgJSwtLWV4Y2x1ZGUtcHJvZ3JhbSAlLCQoRVhDTFVERURfUFJPR1JBTVMpKSBcCisJCWNvbW1hbmQtbGlzdC50eHQgPiRAKyAmJiBtdiAkQCsgJEAKKworU0NSSVBUX0RFRklORVMgPSAkKFNIRUxMX1BBVEhfU1EpOiQoRElGRl9TUSk6JChHSVRfVkVSU0lPTik6XAorCSQobG9jYWxlZGlyX1NRKTokKE5PX0NVUkwpOiQoVVNFX0dFVFRFWFRfU0NIRU1FKTokKFNBTkVfVE9PTF9QQVRIX1NRKTpcCisJJChnaXR3ZWJkaXJfU1EpOiQoUEVSTF9QQVRIX1NRKTokKFNBTkVfVEVYVF9HUkVQKTokKFBBR0VSX0VOVik6XAorCSQocGVybGxpYmRpcl9TUSkKK2RlZmluZSBjbWRfbXVuZ2Vfc2NyaXB0CiskKFJNKSAkQCAkQCsgJiYgXAorc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKyAgICAtZSAnc3xAU0hFTExfUEFUSEB8JChTSEVMTF9QQVRIX1NRKXwnIFwKKyAgICAtZSAnc3xAQERJRkZAQHwkKERJRkZfU1EpfCcgXAorICAgIC1lICdzfEBATE9DQUxFRElSQEB8JChsb2NhbGVkaXJfU1EpfGcnIFwKKyAgICAtZSAncy9AQE5PX0NVUkxAQC8kKE5PX0NVUkwpL2cnIFwKKyAgICAtZSAncy9AQFVTRV9HRVRURVhUX1NDSEVNRUBALyQoVVNFX0dFVFRFWFRfU0NIRU1FKS9nJyBcCisgICAgLWUgJChCUk9LRU5fUEFUSF9GSVgpIFwKKyAgICAtZSAnc3xAQEdJVFdFQkRJUkBAfCQoZ2l0d2ViZGlyX1NRKXxnJyBcCisgICAgLWUgJ3N8QEBQRVJMQEB8JChQRVJMX1BBVEhfU1EpfGcnIFwKKyAgICAtZSAnc3xAQFNBTkVfVEVYVF9HUkVQQEB8JChTQU5FX1RFWFRfR1JFUCl8ZycgXAorICAgIC1lICdzfEBAUEFHRVJfRU5WQEB8JChQQUdFUl9FTlZfU1EpfGcnIFwKKyAgICAkQC5zaCA+JEArCitlbmRlZgorCitHSVQtU0NSSVBULURFRklORVM6IEZPUkNFCisJQEZMQUdTPSckKFNDUklQVF9ERUZJTkVTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgc2NyaXB0IHBhcmFtZXRlcnMiOyBcCisJCWVjaG8gIiQkRkxBR1MiID4kQDsgXAorICAgICAgICAgICAgZmkKKworCiskKFNDUklQVF9TSF9HRU4pIDogJSA6ICUuc2ggR0lULVNDUklQVC1ERUZJTkVTCisJJChRVUlFVF9HRU4pJChjbWRfbXVuZ2Vfc2NyaXB0KSAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKKworJChTQ1JJUFRfTElCKSA6ICUgOiAlLnNoIEdJVC1TQ1JJUFQtREVGSU5FUworCSQoUVVJRVRfR0VOKSQoY21kX211bmdlX3NjcmlwdCkgJiYgXAorCW12ICRAKyAkQAorCitnaXQucmVzOiBnaXQucmMgR0lULVZFUlNJT04tRklMRSBHSVQtUFJFRklYCisJJChRVUlFVF9SQykkKFJDKSBcCisJICAkKGpvaW4gLURNQUpPUj0gLURNSU5PUj0gLURNSUNSTz0gLURQQVRDSExFVkVMPSwgJCh3b3JkbGlzdCAxLCA0LCBcCisJICAgICQoc2hlbGwgZWNobyAkKEdJVF9WRVJTSU9OKSAwIDAgMCAwIHwgdHIgJy5hLXpBLVotJyAnICcpKSkgXAorCSAgLURHSVRfVkVSU0lPTj0iXFxcIiQoR0lUX1ZFUlNJT04pXFxcIiIgLWkgJDwgLW8gJEAKKworIyBUaGlzIG1ha2VzIHN1cmUgd2UgZGVwZW5kIG9uIHRoZSBOT19QRVJMIHNldHRpbmcgaXRzZWxmLgorJChTQ1JJUFRfUEVSTF9HRU4pOiBHSVQtQlVJTEQtT1BUSU9OUworCisjIFVzZWQgZm9yIHN1YnN0aXR1dGlvbiBpbiBQZXJsIG1vZHVsZXMuIERpc2FibGVkIHdoZW4gdXNpbmcgUlVOVElNRV9QUkVGSVgKKyMgc2luY2UgdGhlIGxvY2FsZSBkaXJlY3RvcnkgaXMgaW5qZWN0ZWQuCitwZXJsX2xvY2FsZWRpcl9TUSA9ICQobG9jYWxlZGlyX1NRKQorCitpZm5kZWYgTk9fUEVSTAorUEVSTF9IRUFERVJfVEVNUExBVEUgPSBwZXJsL2hlYWRlcl90ZW1wbGF0ZXMvZml4ZWRfcHJlZml4LnRlbXBsYXRlLnBsCitQRVJMX0RFRklORVMgPSAkKFBFUkxfUEFUSF9TUSk6JChQRVJMTElCX0VYVFJBX1NRKTokKHBlcmxsaWJkaXJfU1EpCisKK1BFUkxfREVGSU5FUyA6PSAkKFBFUkxfUEFUSF9TUSkgJChQRVJMTElCX0VYVFJBX1NRKSAkKHBlcmxsaWJkaXJfU1EpCitQRVJMX0RFRklORVMgKz0gJChSVU5USU1FX1BSRUZJWCkKKworIyBTdXBwb3J0IFBlcmwgcnVudGltZSBwcmVmaXguIEluIHRoaXMgbW9kZSwgYSBkaWZmZXJlbnQgaGVhZGVyIGlzIGluc3RhbGxlZAorIyBpbnRvIFBlcmwgc2NyaXB0cy4KK2lmZGVmIFJVTlRJTUVfUFJFRklYCisKK1BFUkxfSEVBREVSX1RFTVBMQVRFID0gcGVybC9oZWFkZXJfdGVtcGxhdGVzL3J1bnRpbWVfcHJlZml4LnRlbXBsYXRlLnBsCisKKyMgRG9uJ3QgZXhwb3J0IGEgZml4ZWQgJChsb2NhbGVkaXIpIHBhdGg7IGl0IHdpbGwgYmUgcmVzb2x2ZWQgYnkgdGhlIFBlcmwgaGVhZGVyCisjIGF0IHJ1bnRpbWUuCitwZXJsX2xvY2FsZWRpcl9TUSA9CisKK2VuZGlmCisKK1BFUkxfREVGSU5FUyArPSAkKGdpdGV4ZWNkaXIpICQocGVybGxpYmRpcikgJChsb2NhbGVkaXIpCisKKyQoU0NSSVBUX1BFUkxfR0VOKTogJSA6ICUucGVybCBHSVQtUEVSTC1ERUZJTkVTIEdJVC1QRVJMLUhFQURFUiBHSVQtVkVSU0lPTi1GSUxFCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwlzZWQgLWUgJzF7JyBcCisJICAgIC1lICcJc3wjIS4qcGVybHwjISQoUEVSTF9QQVRIX1NRKXwnIFwKKwkgICAgLWUgJwlyIEdJVC1QRVJMLUhFQURFUicgXAorCSAgICAtZSAnCUcnIFwKKwkgICAgLWUgJ30nIFwKKwkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKKwkgICAgJDwgPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKKworUEVSTF9ERUZJTkVTIDo9ICQoc3Vic3QgJChzcGFjZSksOiwkKFBFUkxfREVGSU5FUykpCitHSVQtUEVSTC1ERUZJTkVTOiBGT1JDRQorCUBGTEFHUz0nJChQRVJMX0RFRklORVMpJzsgXAorCSAgICBpZiB0ZXN0IHgiJCRGTEFHUyIgIT0geCJgY2F0ICRAIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBwZXJsLXNwZWNpZmljIHBhcmFtZXRlcnMiOyBcCisJCWVjaG8gIiQkRkxBR1MiID4kQDsgXAorCSAgICBmaQorCitHSVQtUEVSTC1IRUFERVI6ICQoUEVSTF9IRUFERVJfVEVNUExBVEUpIEdJVC1QRVJMLURFRklORVMgTWFrZWZpbGUKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAmJiBcCisJSU5TVExJQkRJUj0nJChwZXJsbGliZGlyX1NRKScgJiYgXAorCUlOU1RMSUJESVJfRVhUUkE9JyQoUEVSTExJQl9FWFRSQV9TUSknICYmIFwKKwlJTlNUTElCRElSPSIkJElOU1RMSUJESVIkJHtJTlNUTElCRElSX0VYVFJBOis6JCRJTlNUTElCRElSX0VYVFJBfSIgJiYgXAorCXNlZCAtZSAncz1AQFBBVEhTRVBAQD0kKHBhdGhzZXApPWcnIFwKKwkgICAgLWUgInM9QEBJTlNUTElCRElSQEA9JCRJTlNUTElCRElSPWciIFwKKwkgICAgLWUgJ3M9QEBQRVJMTElCRElSX1JFTEBAPSQocGVybGxpYmRpcl9yZWxhdGl2ZV9TUSk9ZycgXAorCSAgICAtZSAncz1AQEdJVEVYRUNESVJfUkVMQEA9JChnaXRleGVjZGlyX3JlbGF0aXZlX1NRKT1nJyBcCisJICAgIC1lICdzPUBATE9DQUxFRElSX1JFTEBAPSQobG9jYWxlZGlyX3JlbGF0aXZlX1NRKT1nJyBcCisJICAgICQ8ID4kQCsgJiYgXAorCW12ICRAKyAkQAorCisuUEhPTlk6IHBlcmxsaWJkaXIKK3BlcmxsaWJkaXI6CisJQGVjaG8gJyQocGVybGxpYmRpcl9TUSknCisKKy5QSE9OWTogZ2l0d2ViCitnaXR3ZWI6CisJJChRVUlFVF9TVUJESVIwKWdpdHdlYiAkKFFVSUVUX1NVQkRJUjEpIGFsbAorCitnaXQtaW5zdGF3ZWI6IGdpdC1pbnN0YXdlYi5zaCBHSVQtU0NSSVBULURFRklORVMKKwkkKFFVSUVUX0dFTikkKGNtZF9tdW5nZV9zY3JpcHQpICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12ICRAKyAkQAorZWxzZSAjIE5PX1BFUkwKKyQoU0NSSVBUX1BFUkxfR0VOKSBnaXQtaW5zdGF3ZWI6ICUgOiB1bmltcGxlbWVudGVkLnNoCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCSAgICAtZSAnc3xAQFJFQVNPTkBAfE5PX1BFUkw9JChOT19QRVJMKXxnJyBcCisJICAgIHVuaW1wbGVtZW50ZWQuc2ggPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKK2VuZGlmICMgTk9fUEVSTAorCisjIFRoaXMgbWFrZXMgc3VyZSB3ZSBkZXBlbmQgb24gdGhlIE5PX1BZVEhPTiBzZXR0aW5nIGl0c2VsZi4KKyQoU0NSSVBUX1BZVEhPTl9HRU4pOiBHSVQtQlVJTEQtT1BUSU9OUworCitpZm5kZWYgTk9fUFlUSE9OCiskKFNDUklQVF9QWVRIT05fR0VOKTogR0lULUNGTEFHUyBHSVQtUFJFRklYIEdJVC1QWVRIT04tVkFSUworJChTQ1JJUFRfUFlUSE9OX0dFTik6ICUgOiAlLnB5CisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwlzZWQgLWUgJzFzfCMhLipweXRob258IyEkKFBZVEhPTl9QQVRIX1NRKXwnIFwKKwkgICAgJDwgPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKK2Vsc2UgIyBOT19QWVRIT04KKyQoU0NSSVBUX1BZVEhPTl9HRU4pOiAlIDogdW5pbXBsZW1lbnRlZC5zaAorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKwkgICAgLWUgJ3N8QEBSRUFTT05AQHxOT19QWVRIT049JChOT19QWVRIT04pfGcnIFwKKwkgICAgdW5pbXBsZW1lbnRlZC5zaCA+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12ICRAKyAkQAorZW5kaWYgIyBOT19QWVRIT04KKworQ09ORklHVVJFX1JFQ0lQRSA9ICQoUk0pIGNvbmZpZ3VyZSBjb25maWd1cmUuYWMrICYmIFwKKwkJICAgc2VkIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyBcCisJCQljb25maWd1cmUuYWMgPmNvbmZpZ3VyZS5hYysgJiYgXAorCQkgICBhdXRvY29uZiAtbyBjb25maWd1cmUgY29uZmlndXJlLmFjKyAmJiBcCisJCSAgICQoUk0pIGNvbmZpZ3VyZS5hYysKKworY29uZmlndXJlOiBjb25maWd1cmUuYWMgR0lULVZFUlNJT04tRklMRQorCSQoUVVJRVRfR0VOKSQoQ09ORklHVVJFX1JFQ0lQRSkKKworaWZkZWYgQVVUT0NPTkZJR1VSRUQKKyMgV2UgYXZvaWQgZGVwZW5kaW5nIG9uICdjb25maWd1cmUnIGhlcmUsIGJlY2F1c2UgaXQgZ2V0cyByZWJ1aWx0CisjIGV2ZXJ5IHRpbWUgR0lULVZFUlNJT04tRklMRSBpcyBtb2RpZmllZCwgb25seSB0byB1cGRhdGUgdGhlIGVtYmVkZGVkCisjIHZlcnNpb24gbnVtYmVyIHN0cmluZywgd2hpY2ggY29uZmlnLnN0YXR1cyBkb2VzIG5vdCBjYXJlIGFib3V0LiAgV2UKKyMgZG8gd2FudCB0byByZWNoZWNrIHdoZW4gdGhlIHBsYXRmb3JtL2Vudmlyb25tZW50IGRldGVjdGlvbiBsb2dpYworIyBjaGFuZ2VzLCBoZW5jZSB0aGlzIGRlcGVuZHMgb24gY29uZmlndXJlLmFjLgorY29uZmlnLnN0YXR1czogY29uZmlndXJlLmFjCisJJChRVUlFVF9HRU4pJChDT05GSUdVUkVfUkVDSVBFKSAmJiBcCisJaWYgdGVzdCAtZiBjb25maWcuc3RhdHVzOyB0aGVuIFwKKwkgIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2s7IFwKKwllbHNlIFwKKwkgIC4vY29uZmlndXJlOyBcCisJZmkKK3JlY29uZmlndXJlIGNvbmZpZy5tYWsuYXV0b2dlbjogY29uZmlnLnN0YXR1cworCSQoUVVJRVRfR0VOKS4vY29uZmlnLnN0YXR1cworLlBIT05ZOiByZWNvbmZpZ3VyZSAjIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB0YXJnZXQuCitlbmRpZgorCitYRElGRl9PQkpTICs9IHhkaWZmL3hkaWZmaS5vCitYRElGRl9PQkpTICs9IHhkaWZmL3hwcmVwYXJlLm8KK1hESUZGX09CSlMgKz0geGRpZmYveHV0aWxzLm8KK1hESUZGX09CSlMgKz0geGRpZmYveGVtaXQubworWERJRkZfT0JKUyArPSB4ZGlmZi94bWVyZ2UubworWERJRkZfT0JKUyArPSB4ZGlmZi94cGF0aWVuY2UubworWERJRkZfT0JKUyArPSB4ZGlmZi94aGlzdG9ncmFtLm8KKworVkNTU1ZOX09CSlMgKz0gdmNzLXN2bi9saW5lX2J1ZmZlci5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL3NsaWRpbmdfd2luZG93Lm8KK1ZDU1NWTl9PQkpTICs9IHZjcy1zdm4vZmFzdF9leHBvcnQubworVkNTU1ZOX09CSlMgKz0gdmNzLXN2bi9zdm5kaWZmLm8KK1ZDU1NWTl9PQkpTICs9IHZjcy1zdm4vc3ZuZHVtcC5vCisKK1RFU1RfT0JKUyA6PSAkKHBhdHN1YnN0ICUkWCwlLm8sJChURVNUX1BST0dSQU1TKSkgJChwYXRzdWJzdCAlLHQvaGVscGVyLyUsJChURVNUX0JVSUxUSU5TX09CSlMpKQorT0JKRUNUUyA6PSAkKExJQl9PQkpTKSAkKEJVSUxUSU5fT0JKUykgJChQUk9HUkFNX09CSlMpICQoVEVTVF9PQkpTKSBcCisJJChYRElGRl9PQkpTKSBcCisJJChWQ1NTVk5fT0JKUykgXAorCSQoRlVaWl9PQkpTKSBcCisJY29tbW9uLW1haW4ubyBcCisJZ2l0Lm8KK2lmbmRlZiBOT19DVVJMCisJT0JKRUNUUyArPSBodHRwLm8gaHR0cC13YWxrZXIubyByZW1vdGUtY3VybC5vCitlbmRpZgorCitkZXBfZmlsZXMgOj0gJChmb3JlYWNoIGYsJChPQkpFQ1RTKSwkKGRpciAkZikuZGVwZW5kLyQobm90ZGlyICRmKS5kKQorZGVwX2RpcnMgOj0gJChhZGRzdWZmaXggLmRlcGVuZCwkKHNvcnQgJChkaXIgJChPQkpFQ1RTKSkpKQorCitpZmVxICgkKENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUykseWVzKQorJChkZXBfZGlycyk6CisJQG1rZGlyIC1wICRACisKK21pc3NpbmdfZGVwX2RpcnMgOj0gJChmaWx0ZXItb3V0ICQod2lsZGNhcmQgJChkZXBfZGlycykpLCQoZGVwX2RpcnMpKQorZGVwX2ZpbGUgPSAkKGRpciAkQCkuZGVwZW5kLyQobm90ZGlyICRAKS5kCitkZXBfYXJncyA9IC1NRiAkKGRlcF9maWxlKSAtTVEgJEAgLU1NRCAtTVAKK2VuZGlmCisKK2lmbmVxICgkKENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUykseWVzKQorZGVwX2RpcnMgPQorbWlzc2luZ19kZXBfZGlycyA9CitkZXBfYXJncyA9CitlbmRpZgorCitBU01fU1JDIDo9ICQod2lsZGNhcmQgJChPQkpFQ1RTOm89UykpCitBU01fT0JKIDo9ICQoQVNNX1NSQzpTPW8pCitDX09CSiA6PSAkKGZpbHRlci1vdXQgJChBU01fT0JKKSwkKE9CSkVDVFMpKQorCisuU1VGRklYRVM6CisKKyQoQ19PQkopOiAlLm86ICUuYyBHSVQtQ0ZMQUdTICQobWlzc2luZ19kZXBfZGlycykKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vICQqLm8gLWMgJChkZXBfYXJncykgJChBTExfQ0ZMQUdTKSAkKEVYVFJBX0NQUEZMQUdTKSAkPAorJChBU01fT0JKKTogJS5vOiAlLlMgR0lULUNGTEFHUyAkKG1pc3NpbmdfZGVwX2RpcnMpCisJJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoZGVwX2FyZ3MpICQoQUxMX0NGTEFHUykgJChFWFRSQV9DUFBGTEFHUykgJDwKKworJS5zOiAlLmMgR0lULUNGTEFHUyBGT1JDRQorCSQoUVVJRVRfQ0MpJChDQykgLW8gJEAgLVMgJChBTExfQ0ZMQUdTKSAkKEVYVFJBX0NQUEZMQUdTKSAkPAorCitpZmRlZiBVU0VfQ09NUFVURURfSEVBREVSX0RFUEVOREVOQ0lFUworIyBUYWtlIGFkdmFudGFnZSBvZiBnY2MncyBvbi10aGUtZmx5IGRlcGVuZGVuY3kgZ2VuZXJhdGlvbgorIyBTZWUgPGh0dHA6Ly9nY2MuZ251Lm9yZy9nY2MtMy4wL2ZlYXR1cmVzLmh0bWw+LgorZGVwX2ZpbGVzX3ByZXNlbnQgOj0gJCh3aWxkY2FyZCAkKGRlcF9maWxlcykpCitpZm5lcSAoJChkZXBfZmlsZXNfcHJlc2VudCksKQoraW5jbHVkZSAkKGRlcF9maWxlc19wcmVzZW50KQorZW5kaWYKK2Vsc2UKKyMgRGVwZW5kZW5jaWVzIG9uIGhlYWRlciBmaWxlcywgZm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0CisjIHRoZSBnY2MgLU1NRCBvcHRpb24uCisjCisjIERlcGVuZGVuY2llcyBvbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBoZWFkZXJzIHN1Y2ggYXMgY29tbWFuZC1saXN0LmgKKyMgc2hvdWxkIF9ub3RfIGJlIGluY2x1ZGVkIGhlcmUsIHNpbmNlIHRoZXkgYXJlIG5lY2Vzc2FyeSBldmVuIHdoZW4KKyMgYnVpbGRpbmcgYW4gb2JqZWN0IGZvciB0aGUgZmlyc3QgdGltZS4KKworJChPQkpFQ1RTKTogJChMSUJfSCkgJChHRU5FUkFURURfSCkKK2VuZGlmCisKK2V4ZWMtY21kLnNwIGV4ZWMtY21kLnMgZXhlYy1jbWQubzogR0lULVBSRUZJWAorZXhlYy1jbWQuc3AgZXhlYy1jbWQucyBleGVjLWNtZC5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwknLURHSVRfRVhFQ19QQVRIPSIkKGdpdGV4ZWNkaXJfU1EpIicgXAorCSctREdJVF9MT0NBTEVfUEFUSD0iJChsb2NhbGVkaXJfcmVsYXRpdmVfU1EpIicgXAorCSctREJJTkRJUj0iJChiaW5kaXJfcmVsYXRpdmVfU1EpIicgXAorCSctREZBTExCQUNLX1JVTlRJTUVfUFJFRklYPSIkKHByZWZpeF9TUSkiJworCitidWlsdGluL2luaXQtZGIuc3AgYnVpbHRpbi9pbml0LWRiLnMgYnVpbHRpbi9pbml0LWRiLm86IEdJVC1QUkVGSVgKK2J1aWx0aW4vaW5pdC1kYi5zcCBidWlsdGluL2luaXQtZGIucyBidWlsdGluL2luaXQtZGIubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLURERUZBVUxUX0dJVF9URU1QTEFURV9ESVI9JyIkKHRlbXBsYXRlX2Rpcl9TUSkiJworCitjb25maWcuc3AgY29uZmlnLnMgY29uZmlnLm86IEdJVC1QUkVGSVgKK2NvbmZpZy5zcCBjb25maWcucyBjb25maWcubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLURFVENfR0lUQ09ORklHPSciJChFVENfR0lUQ09ORklHX1NRKSInCisKK2F0dHIuc3AgYXR0ci5zIGF0dHIubzogR0lULVBSRUZJWAorYXR0ci5zcCBhdHRyLnMgYXR0ci5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwktREVUQ19HSVRBVFRSSUJVVEVTPSciJChFVENfR0lUQVRUUklCVVRFU19TUSkiJworCitnZXR0ZXh0LnNwIGdldHRleHQucyBnZXR0ZXh0Lm86IEdJVC1QUkVGSVgKK2dldHRleHQuc3AgZ2V0dGV4dC5zIGdldHRleHQubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLURHSVRfTE9DQUxFX1BBVEg9JyIkKGxvY2FsZWRpcl9yZWxhdGl2ZV9TUSkiJworCitodHRwLXB1c2guc3AgaHR0cC5zcCBodHRwLXdhbGtlci5zcCByZW1vdGUtY3VybC5zcCBpbWFwLXNlbmQuc3A6IFNQX0VYVFJBX0ZMQUdTICs9IFwKKwktRENVUkxfRElTQUJMRV9UWVBFQ0hFQ0sKKworcGFjay1yZXZpbmRleC5zcDogU1BfRVhUUkFfRkxBR1MgKz0gLVduby1tZW1jcHktbWF4LWNvdW50CisKK2lmZGVmIE5PX0VYUEFUCitodHRwLXdhbGtlci5zcCBodHRwLXdhbGtlci5zIGh0dHAtd2Fsa2VyLm86IEVYVFJBX0NQUEZMQUdTID0gLUROT19FWFBBVAorZW5kaWYKKworaWZkZWYgTk9fUkVHRVgKK2NvbXBhdC9yZWdleC9yZWdleC5zcCBjb21wYXQvcmVnZXgvcmVnZXgubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLURHQVdLIC1ETk9fTUJTVVBQT1JUCitlbmRpZgorCitpZmRlZiBVU0VfTkVEX0FMTE9DQVRPUgorY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2Muc3AgY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLUROREVCVUcgLURSRVBMQUNFX1NZU1RFTV9BTExPQ0FUT1IKK2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLnNwOiBTUF9FWFRSQV9GTEFHUyArPSAtV25vLW5vbi1wb2ludGVyLW51bGwKK2VuZGlmCisKK2dpdC0lJFg6ICUubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisKK2dpdC1pbWFwLXNlbmQkWDogaW1hcC1zZW5kLm8gJChJTUFQX1NFTkRfQlVJTERERVBTKSBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSBcCisJCSQoSU1BUF9TRU5EX0xERkxBR1MpICQoTElCUykKKworZ2l0LWh0dHAtZmV0Y2gkWDogaHR0cC5vIGh0dHAtd2Fsa2VyLm8gaHR0cC1mZXRjaC5vIEdJVC1MREZMQUdTICQoR0lUTElCUykKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pIFwKKwkJJChDVVJMX0xJQkNVUkwpICQoTElCUykKK2dpdC1odHRwLXB1c2gkWDogaHR0cC5vIGh0dHAtcHVzaC5vIEdJVC1MREZMQUdTICQoR0lUTElCUykKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pIFwKKwkJJChDVVJMX0xJQkNVUkwpICQoRVhQQVRfTElCRVhQQVQpICQoTElCUykKKworZ2l0LXJlbW90ZS10ZXN0c3ZuJFg6IHJlbW90ZS10ZXN0c3ZuLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKSAkKFZDU1NWTl9MSUIpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpIFwKKwkkKFZDU1NWTl9MSUIpCisKKyQoUkVNT1RFX0NVUkxfQUxJQVNFUyk6ICQoUkVNT1RFX0NVUkxfUFJJTUFSWSkKKwkkKFFVSUVUX0xOQ1ApJChSTSkgJEAgJiYgXAorCWxuICQ8ICRAIDI+L2Rldi9udWxsIHx8IFwKKwlsbiAtcyAkPCAkQCAyPi9kZXYvbnVsbCB8fCBcCisJY3AgJDwgJEAKKworJChSRU1PVEVfQ1VSTF9QUklNQVJZKTogcmVtb3RlLWN1cmwubyBodHRwLm8gaHR0cC13YWxrZXIubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSBcCisJCSQoQ1VSTF9MSUJDVVJMKSAkKEVYUEFUX0xJQkVYUEFUKSAkKExJQlMpCisKKyQoTElCX0ZJTEUpOiAkKExJQl9PQkpTKQorCSQoUVVJRVRfQVIpJChSTSkgJEAgJiYgJChBUikgJChBUkZMQUdTKSAkQCAkXgorCiskKFhESUZGX0xJQik6ICQoWERJRkZfT0JKUykKKwkkKFFVSUVUX0FSKSQoUk0pICRAICYmICQoQVIpICQoQVJGTEFHUykgJEAgJF4KKworJChWQ1NTVk5fTElCKTogJChWQ1NTVk5fT0JKUykKKwkkKFFVSUVUX0FSKSQoUk0pICRAICYmICQoQVIpICQoQVJGTEFHUykgJEAgJF4KKworZXhwb3J0IERFRkFVTFRfRURJVE9SIERFRkFVTFRfUEFHRVIKKworRG9jdW1lbnRhdGlvbi9HSVQtRVhDTFVERUQtUFJPR1JBTVM6IEZPUkNFCisJQEVYQ0xVREVEPSdFWENMVURFRF9QUk9HUkFNUyA6PSAkKEVYQ0xVREVEX1BST0dSQU1TKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRVhDTFVERUQiICE9IFwKKwkJeCJgY2F0IERvY3VtZW50YXRpb24vR0lULUVYQ0xVREVELVBST0dSQU1TIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBkb2N1bWVudGF0aW9uIGZsYWdzIjsgXAorCQllY2hvICIkJEVYQ0xVREVEIiA+RG9jdW1lbnRhdGlvbi9HSVQtRVhDTFVERUQtUFJPR1JBTVM7IFwKKyAgICAgICAgICAgIGZpCisKKy5QSE9OWTogZG9jIG1hbiBtYW4tcGVybCBodG1sIGluZm8gcGRmCitkb2M6IG1hbi1wZXJsCisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGFsbAorCittYW46IG1hbi1wZXJsCisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIG1hbgorCittYW4tcGVybDogcGVybC9idWlsZC9tYW4vbWFuMy9HaXQuM3BtCisKK2h0bWw6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGh0bWwKKworaW5mbzoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5mbworCitwZGY6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHBkZgorCitYR0VUVEVYVF9GTEFHUyA9IFwKKwktLWZvcmNlLXBvIFwKKwktLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogXAorCS0tbXNnaWQtYnVncy1hZGRyZXNzPSJHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPiIgXAorCS0tZnJvbS1jb2RlPVVURi04CitYR0VUVEVYVF9GTEFHU19DID0gJChYR0VUVEVYVF9GTEFHUykgLS1sYW5ndWFnZT1DIFwKKwktLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gLS1rZXl3b3JkPSJRXzoxLDIiCitYR0VUVEVYVF9GTEFHU19TSCA9ICQoWEdFVFRFWFRfRkxBR1MpIC0tbGFuZ3VhZ2U9U2hlbGwgXAorCS0ta2V5d29yZD1nZXR0ZXh0bG4gLS1rZXl3b3JkPWV2YWxfZ2V0dGV4dGxuCitYR0VUVEVYVF9GTEFHU19QRVJMID0gJChYR0VUVEVYVF9GTEFHUykgLS1sYW5ndWFnZT1QZXJsIFwKKwktLWtleXdvcmQ9X18gLS1rZXl3b3JkPU5fXyAtLWtleXdvcmQ9Il9fbjoxLDIiCitMT0NBTElaRURfQyA9ICQoQ19PQko6bz1jKSAkKExJQl9IKSAkKEdFTkVSQVRFRF9IKQorTE9DQUxJWkVEX1NIID0gJChTQ1JJUFRfU0gpCitMT0NBTElaRURfU0ggKz0gZ2l0LXBhcnNlLXJlbW90ZS5zaAorTE9DQUxJWkVEX1NIICs9IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaAorTE9DQUxJWkVEX1NIICs9IGdpdC1zaC1zZXR1cC5zaAorTE9DQUxJWkVEX1BFUkwgPSAkKFNDUklQVF9QRVJMKQorCitpZmRlZiBYR0VUVEVYVF9JTkNMVURFX1RFU1RTCitMT0NBTElaRURfQyArPSB0L3QwMjAwL3Rlc3QuYworTE9DQUxJWkVEX1NIICs9IHQvdDAyMDAvdGVzdC5zaAorTE9DQUxJWkVEX1BFUkwgKz0gdC90MDIwMC90ZXN0LnBlcmwKK2VuZGlmCisKKyMjIE5vdGUgdGhhdCB0aGlzIGlzIG1lYW50IHRvIGJlIHJ1biBvbmx5IGJ5IHRoZSBsb2NhbGl6YXRpb24gY29vcmRpbmF0b3IKKyMjIHVuZGVyIGEgdmVyeSBjb250cm9sbGVkIGNvbmRpdGlvbiwgaS5lLiAoMSkgaXQgaXMgdG8gYmUgcnVuIGluIGEKKyMjIEdpdCByZXBvc2l0b3J5IChub3QgYSB0YXJiYWxsIGV4dHJhY3QpLCAoMikgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMKKyMjIHdpbGwgYmUgbG9zdC4KKyMjIEdldHRleHQgdG9vbHMgY2Fubm90IHdvcmsgd2l0aCBvdXIgb3duIGN1c3RvbSBQUkl0aW1lIHR5cGUsIHNvCisjIyB3ZSByZXBsYWNlIFBSSXRpbWUgd2l0aCBQUkl1TUFYLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhpcyB0bworIyMgUFJJZE1BWCBpZiB3ZSBzd2l0Y2ggdG8gYSBzaWduZWQgdHlwZSBsYXRlci4KKworcG8vZ2l0LnBvdDogJChHRU5FUkFURURfSCkgRk9SQ0UKKwkjIEFsbCBtb2RpZmljYXRpb25zIHdpbGwgYmUgcmV2ZXJ0ZWQgYXQgdGhlIGVuZCwgc28gd2UgZG8gbm90CisJIyB3YW50IHRvIGhhdmUgYW55IGxvY2FsIGNoYW5nZS4KKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgJiYgZ2l0IGRpZmYgLS1xdWlldCAtLWNhY2hlZAorCisJQGZvciBzIGluICQoTE9DQUxJWkVEX0MpICQoTE9DQUxJWkVEX1NIKSAkKExPQ0FMSVpFRF9QRVJMKTsgXAorCWRvIFwKKwkJc2VkIC1lICdzfFBSSXRpbWV8UFJJdU1BWHxnJyA8IiQkcyIgPiIkJHMrIiAmJiBcCisJCWNhdCAiJCRzKyIgPiIkJHMiICYmIHJtICIkJHMrIjsgXAorCWRvbmUKKworCSQoUVVJRVRfWEdFVFRFWFQpJChYR0VUVEVYVCkgLW8kQCsgJChYR0VUVEVYVF9GTEFHU19DKSAkKExPQ0FMSVpFRF9DKQorCSQoUVVJRVRfWEdFVFRFWFQpJChYR0VUVEVYVCkgLW8kQCsgLS1qb2luLWV4aXN0aW5nICQoWEdFVFRFWFRfRkxBR1NfU0gpIFwKKwkJJChMT0NBTElaRURfU0gpCisJJChRVUlFVF9YR0VUVEVYVCkkKFhHRVRURVhUKSAtbyRAKyAtLWpvaW4tZXhpc3RpbmcgJChYR0VUVEVYVF9GTEFHU19QRVJMKSBcCisJCSQoTE9DQUxJWkVEX1BFUkwpCisKKwkjIFJldmVydGluZyB0aGUgbXVuZ2VkIHNvdXJjZSwgbGVhdmluZyBvbmx5IHRoZSB1cGRhdGVkICRACisJZ2l0IHJlc2V0IC0taGFyZAorCW12ICRAKyAkQAorCisuUEhPTlk6IHBvdAorcG90OiBwby9naXQucG90CisKK1BPRklMRVMgOj0gJCh3aWxkY2FyZCBwby8qLnBvKQorTU9GSUxFUyA6PSAkKHBhdHN1YnN0IHBvLyUucG8scG8vYnVpbGQvbG9jYWxlLyUvTENfTUVTU0FHRVMvZ2l0Lm1vLCQoUE9GSUxFUykpCisKK2lmbmRlZiBOT19HRVRURVhUCithbGw6OiAkKE1PRklMRVMpCitlbmRpZgorCitwby9idWlsZC9sb2NhbGUvJS9MQ19NRVNTQUdFUy9naXQubW86IHBvLyUucG8KKwkkKFFVSUVUX01TR0ZNVClta2RpciAtcCAkKGRpciAkQCkgJiYgJChNU0dGTVQpIC1vICRAICQ8CisKK0xJQl9QRVJMIDo9ICQod2lsZGNhcmQgcGVybC9HaXQucG0gcGVybC9HaXQvKi5wbSBwZXJsL0dpdC8qLyoucG0gcGVybC9HaXQvKi8qLyoucG0pCitMSUJfUEVSTF9HRU4gOj0gJChwYXRzdWJzdCBwZXJsLyUucG0scGVybC9idWlsZC9saWIvJS5wbSwkKExJQl9QRVJMKSkKK0xJQl9DUEFOIDo9ICQod2lsZGNhcmQgcGVybC9Gcm9tQ1BBTi8qLnBtIHBlcmwvRnJvbUNQQU4vKi8qLnBtKQorTElCX0NQQU5fR0VOIDo9ICQocGF0c3Vic3QgcGVybC8lLnBtLHBlcmwvYnVpbGQvbGliLyUucG0sJChMSUJfQ1BBTikpCisKK2lmbmRlZiBOT19QRVJMCithbGw6OiAkKExJQl9QRVJMX0dFTikKK2lmbmRlZiBOT19QRVJMX0NQQU5fRkFMTEJBQ0tTCithbGw6OiAkKExJQl9DUEFOX0dFTikKK2VuZGlmCitOT19QRVJMX0NQQU5fRkFMTEJBQ0tTX1NRID0gJChzdWJzdCAnLCdcJycsJChOT19QRVJMX0NQQU5fRkFMTEJBQ0tTKSkKK2VuZGlmCisKK3BlcmwvYnVpbGQvbGliLyUucG06IHBlcmwvJS5wbQorCSQoUVVJRVRfR0VOKW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJc2VkIC1lICdzfEBATE9DQUxFRElSQEB8JChwZXJsX2xvY2FsZWRpcl9TUSl8ZycgXAorCSAgICAtZSAnc3xAQE5PX1BFUkxfQ1BBTl9GQUxMQkFDS1NAQHwkKE5PX1BFUkxfQ1BBTl9GQUxMQkFDS1NfU1EpfGcnIFwKKwk8ICQ8ID4gJEAKKworcGVybC9idWlsZC9tYW4vbWFuMy9HaXQuM3BtOiBwZXJsL0dpdC5wbQorCSQoUVVJRVRfR0VOKW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJcG9kMm1hbiAkPCAkQAorCitGSU5EX1NPVVJDRV9GSUxFUyA9ICggXAorCWdpdCBscy1maWxlcyBcCisJCScqLltoY1NdJyBcCisJCScqLnNoJyBcCisJCSc6ISpbdHBdWzAtOV1bMC05XVswLTldWzAtOV0qJyBcCisJCSc6IWNvbnRyaWInIFwKKwkJMj4vZGV2L251bGwgfHwgXAorCSQoRklORCkgLiBcCisJCVwoIC1uYW1lIC5naXQgLXR5cGUgZCAtcHJ1bmUgXCkgXAorCQktbyBcKCAtbmFtZSAnW3RwXVswLTldWzAtOV1bMC05XVswLTldKicgLXBydW5lIFwpIFwKKwkJLW8gXCggLW5hbWUgY29udHJpYiAtdHlwZSBkIC1wcnVuZSBcKSBcCisJCS1vIFwoIC1uYW1lIGJ1aWxkIC10eXBlIGQgLXBydW5lIFwpIFwKKwkJLW8gXCggLW5hbWUgJ3RyYXNoKicgLXR5cGUgZCAtcHJ1bmUgXCkgXAorCQktbyBcKCAtbmFtZSAnKi5baGNTXScgLXR5cGUgZiAtcHJpbnQgXCkgXAorCQktbyBcKCAtbmFtZSAnKi5zaCcgLXR5cGUgZiAtcHJpbnQgXCkgXAorCQl8IHNlZCAtZSAnc3xeXC4vfHwnIFwKKwkpCisKKyQoRVRBR1NfVEFSR0VUKTogRk9SQ0UKKwkkKFJNKSAkKEVUQUdTX1RBUkdFVCkKKwkkKEZJTkRfU09VUkNFX0ZJTEVTKSB8IHhhcmdzIGV0YWdzIC1hIC1vICQoRVRBR1NfVEFSR0VUKQorCit0YWdzOiBGT1JDRQorCSQoUk0pIHRhZ3MKKwkkKEZJTkRfU09VUkNFX0ZJTEVTKSB8IHhhcmdzIGN0YWdzIC1hCisKK2NzY29wZToKKwkkKFJNKSBjc2NvcGUqCisJJChGSU5EX1NPVVJDRV9GSUxFUykgfCB4YXJncyBjc2NvcGUgLWIKKworIyMjIERldGVjdCBwcmVmaXggY2hhbmdlcworVFJBQ0tfUFJFRklYID0gJChiaW5kaXJfU1EpOiQoZ2l0ZXhlY2Rpcl9TUSk6JCh0ZW1wbGF0ZV9kaXJfU1EpOiQocHJlZml4X1NRKTpcCisJCSQobG9jYWxlZGlyX1NRKQorCitHSVQtUFJFRklYOiBGT1JDRQorCUBGTEFHUz0nJChUUkFDS19QUkVGSVgpJzsgXAorCWlmIHRlc3QgeCIkJEZMQUdTIiAhPSB4ImBjYXQgR0lULVBSRUZJWCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgcHJlZml4IGZsYWdzIjsgXAorCQllY2hvICIkJEZMQUdTIiA+R0lULVBSRUZJWDsgXAogCWZpCiAKLVRSQUNLX1ZBUlMgPSBcCi0JJChzdWJzdCAnLCdcJycsU0hFTExfUEFUSD0nJChTSEVMTF9QQVRIX1NRKScpIFwKLQkkKHN1YnN0ICcsJ1wnJyxUQ0xfUEFUSD0nJChUQ0xfUEFUSF9TUSknKSBcCi0JJChzdWJzdCAnLCdcJycsVENMVEtfUEFUSD0nJChUQ0xUS19QQVRIX1NRKScpIFwKLQkkKHN1YnN0ICcsJ1wnJyxnaXRleGVjZGlyPSckKGdpdGV4ZWNkaXJfU1EpJykgXAotCSQoc3Vic3QgJywnXCcnLGdnX2xpYmRpcj0nJChsaWJkaXJfU1EpJykgXAotCUdJVEdVSV9NQUNPU1hBUFA9JChHSVRHVUlfTUFDT1NYQVBQKSBcCi0jZW5kIFRSQUNLX1ZBUlMKK1RSQUNLX0NGTEFHUyA9ICQoQ0MpOiQoc3Vic3QgJywnXCcnLCQoQUxMX0NGTEFHUykpOiQoVVNFX0dFVFRFWFRfU0NIRU1FKQogCi1HSVQtR1VJLVZBUlM6IEZPUkNFCi0JQFZBUlM9JyQoVFJBQ0tfVkFSUyknOyBcCi0JaWYgdGVzdCB4IiQkVkFSUyIgIT0geCJgY2F0ICRAIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKLQkJZWNobyA+JjIgIiAgICAqIG5ldyBsb2NhdGlvbnMgb3IgVGNsL1RrIGludGVycHJldGVyIjsgXAotCQllY2hvID4kQCAiJCRWQVJTIjsgXAorR0lULUNGTEFHUzogRk9SQ0UKKwlARkxBR1M9JyQoVFJBQ0tfQ0ZMQUdTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCBHSVQtQ0ZMQUdTIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBidWlsZCBmbGFncyI7IFwKKwkJZWNobyAiJCRGTEFHUyIgPkdJVC1DRkxBR1M7IFwKKyAgICAgICAgICAgIGZpCisKK1RSQUNLX0xERkxBR1MgPSAkKHN1YnN0ICcsJ1wnJywkKEFMTF9MREZMQUdTKSkKKworR0lULUxERkxBR1M6IEZPUkNFCisJQEZMQUdTPSckKFRSQUNLX0xERkxBR1MpJzsgXAorCSAgICBpZiB0ZXN0IHgiJCRGTEFHUyIgIT0geCJgY2F0IEdJVC1MREZMQUdTIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBsaW5rIGZsYWdzIjsgXAorCQllY2hvICIkJEZMQUdTIiA+R0lULUxERkxBR1M7IFwKKyAgICAgICAgICAgIGZpCisKKyMgV2UgbmVlZCB0byBhcHBseSBzcSB0d2ljZSwgb25jZSB0byBwcm90ZWN0IGZyb20gdGhlIHNoZWxsCisjIHRoYXQgcnVucyBHSVQtQlVJTEQtT1BUSU9OUywgYW5kIHRoZW4gYWdhaW4gdG8gcHJvdGVjdCBpdAorIyBhbmQgdGhlIGZpcnN0IGxldmVsIHF1b3RpbmcgZnJvbSB0aGUgc2hlbGwgdGhhdCBydW5zICJlY2hvIi4KK0dJVC1CVUlMRC1PUFRJT05TOiBGT1JDRQorCUBlY2hvIFNIRUxMX1BBVEg9XCcnJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIX1NRKSknXCcgPiRAKworCUBlY2hvIFRFU1RfU0hFTExfUEFUSD1cJyckKHN1YnN0ICcsJ1wnJywkKFRFU1RfU0hFTExfUEFUSF9TUSkpJ1wnID4+JEArCisJQGVjaG8gUEVSTF9QQVRIPVwnJyQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIX1NRKSknXCcgPj4kQCsKKwlAZWNobyBESUZGPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoRElGRikpKSdcJyA+PiRAKworCUBlY2hvIFBZVEhPTl9QQVRIPVwnJyQoc3Vic3QgJywnXCcnLCQoUFlUSE9OX1BBVEhfU1EpKSdcJyA+PiRAKworCUBlY2hvIFRBUj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFRBUikpKSdcJyA+PiRAKworCUBlY2hvIE5PX0NVUkw9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19DVVJMKSkpJ1wnID4+JEArCisJQGVjaG8gTk9fRVhQQVQ9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19FWFBBVCkpKSdcJyA+PiRAKworCUBlY2hvIFVTRV9MSUJQQ1JFMT1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFVTRV9MSUJQQ1JFMSkpKSdcJyA+PiRAKworCUBlY2hvIFVTRV9MSUJQQ1JFMj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFVTRV9MSUJQQ1JFMikpKSdcJyA+PiRAKworCUBlY2hvIE5PX0xJQlBDUkUxX0pJVD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX0xJQlBDUkUxX0pJVCkpKSdcJyA+PiRAKworCUBlY2hvIE5PX1BFUkw9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19QRVJMKSkpJ1wnID4+JEArCisJQGVjaG8gTk9fUFRIUkVBRFM9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19QVEhSRUFEUykpKSdcJyA+PiRAKworCUBlY2hvIE5PX1BZVEhPTj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX1BZVEhPTikpKSdcJyA+PiRAKworCUBlY2hvIE5PX1VOSVhfU09DS0VUUz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX1VOSVhfU09DS0VUUykpKSdcJyA+PiRAKworCUBlY2hvIFBBR0VSX0VOVj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFBBR0VSX0VOVikpKSdcJyA+PiRAKworCUBlY2hvIERDX1NIQTE9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChEQ19TSEExKSkpJ1wnID4+JEArCisJQGVjaG8gWD1cJyQoWClcJyA+PiRAKworaWZkZWYgVEVTVF9PVVRQVVRfRElSRUNUT1JZCisJQGVjaG8gVEVTVF9PVVRQVVRfRElSRUNUT1JZPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoVEVTVF9PVVRQVVRfRElSRUNUT1JZKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX1RFU1RfT1BUUworCUBlY2hvIEdJVF9URVNUX09QVFM9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfVEVTVF9PUFRTKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX1RFU1RfQ01QCisJQGVjaG8gR0lUX1RFU1RfQ01QPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoR0lUX1RFU1RfQ01QKSkpJ1wnID4+JEArCitlbmRpZgoraWZkZWYgR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVAorCUBlY2hvIEdJVF9URVNUX0NNUF9VU0VfQ09QSUVEX0NPTlRFWFQ9WWVzUGxlYXNlID4+JEArCitlbmRpZgorCUBlY2hvIE5PX0dFVFRFWFQ9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19HRVRURVhUKSkpJ1wnID4+JEArCitpZmRlZiBHSVRfUEVSRl9SRVBFQVRfQ09VTlQKKwlAZWNobyBHSVRfUEVSRl9SRVBFQVRfQ09VTlQ9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfUEVSRl9SRVBFQVRfQ09VTlQpKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfUEVSRl9SRVBPCisJQGVjaG8gR0lUX1BFUkZfUkVQTz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9QRVJGX1JFUE8pKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfUEVSRl9MQVJHRV9SRVBPCisJQGVjaG8gR0lUX1BFUkZfTEFSR0VfUkVQTz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9QRVJGX0xBUkdFX1JFUE8pKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfUEVSRl9NQUtFX09QVFMKKwlAZWNobyBHSVRfUEVSRl9NQUtFX09QVFM9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfUEVSRl9NQUtFX09QVFMpKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfUEVSRl9NQUtFX0NPTU1BTkQKKwlAZWNobyBHSVRfUEVSRl9NQUtFX0NPTU1BTkQ9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfUEVSRl9NQUtFX0NPTU1BTkQpKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfSU5URVJPUF9NQUtFX09QVFMKKwlAZWNobyBHSVRfSU5URVJPUF9NQUtFX09QVFM9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfSU5URVJPUF9NQUtFX09QVFMpKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfVEVTVF9JTkRFWF9WRVJTSU9OCisJQGVjaG8gR0lUX1RFU1RfSU5ERVhfVkVSU0lPTj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9URVNUX0lOREVYX1ZFUlNJT04pKSknXCcgPj4kQCsKK2VuZGlmCisJQGlmIGNtcCAkQCsgJEAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuICQoUk0pICRAKzsgZWxzZSBtdiAkQCsgJEA7IGZpCisKKyMjIyBEZXRlY3QgUHl0aG9uIGludGVycHJldGVyIHBhdGggY2hhbmdlcworaWZuZGVmIE5PX1BZVEhPTgorVFJBQ0tfUFlUSE9OID0gJChzdWJzdCAnLCdcJycsLURQWVRIT05fUEFUSD0nJChQWVRIT05fUEFUSF9TUSknKQorCitHSVQtUFlUSE9OLVZBUlM6IEZPUkNFCisJQFZBUlM9JyQoVFJBQ0tfUFlUSE9OKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkVkFSUyIgIT0geCJgY2F0ICRAIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBQeXRob24gaW50ZXJwcmV0ZXIgbG9jYXRpb24iOyBcCisJCWVjaG8gIiQkVkFSUyIgPiRAOyBcCisgICAgICAgICAgICBmaQorZW5kaWYKKwordGVzdF9iaW5kaXJfcHJvZ3JhbXMgOj0gJChwYXRzdWJzdCAlLGJpbi13cmFwcGVycy8lLCQoQklORElSX1BST0dSQU1TX05FRURfWCkgJChCSU5ESVJfUFJPR1JBTVNfTk9fWCkgJChURVNUX1BST0dSQU1TX05FRURfWCkpCisKK2FsbDo6ICQoVEVTVF9QUk9HUkFNUykgJCh0ZXN0X2JpbmRpcl9wcm9ncmFtcykKKworYmluLXdyYXBwZXJzLyU6IHdyYXAtZm9yLWJpbi5zaAorCUBta2RpciAtcCBiaW4td3JhcHBlcnMKKwkkKFFVSUVUX0dFTilzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCSAgICAgLWUgJ3N8QEBCVUlMRF9ESVJAQHwkKHNoZWxsIHB3ZCl8JyBcCisJICAgICAtZSAnc3xAQFBST0dAQHwkKHBhdHN1YnN0IHRlc3QtJSx0L2hlbHBlci90ZXN0LSUkKFgpLCQoQEYpKSQocGF0c3Vic3QgZ2l0JSwkKFgpLCQoZmlsdGVyICQoQEYpLCQoQklORElSX1BST0dSQU1TX05FRURfWCkpKXwnIDwgJDwgPiAkQCAmJiBcCisJY2htb2QgK3ggJEAKKworIyBHTlUgbWFrZSBzdXBwb3J0cyBleHBvcnRpbmcgYWxsIHZhcmlhYmxlcyBieSAiZXhwb3J0IiB3aXRob3V0IHBhcmFtZXRlcnMuCisjIEhvd2V2ZXIsIHRoZSBlbnZpcm9ubWVudCBnZXRzIHF1aXRlIGJpZywgYW5kIHNvbWUgcHJvZ3JhbXMgaGF2ZSBwcm9ibGVtcworIyB3aXRoIHRoYXQuCisKK2V4cG9ydCBOT19TVk5fVEVTVFMKK2V4cG9ydCBURVNUX05PX01BTExPQ19DSEVDSworCisjIyMgVGVzdGluZyBydWxlcworCit0ZXN0OiBhbGwKKwkkKE1BS0UpIC1DIHQvIGFsbAorCitwZXJmOiBhbGwKKwkkKE1BS0UpIC1DIHQvcGVyZi8gYWxsCisKKy5QSE9OWTogdGVzdCBwZXJmCisKK3QvaGVscGVyL3Rlc3QtbGluZS1idWZmZXIkWDogJChWQ1NTVk5fTElCKQorCit0L2hlbHBlci90ZXN0LXN2bi1mZSRYOiAkKFZDU1NWTl9MSUIpCisKKy5QUkVDSU9VUzogJChURVNUX09CSlMpCisKK3QvaGVscGVyL3Rlc3QtdG9vbCRYOiAkKHBhdHN1YnN0ICUsdC9oZWxwZXIvJSwkKFRFU1RfQlVJTFRJTlNfT0JKUykpCisKK3QvaGVscGVyL3Rlc3QtJSRYOiB0L2hlbHBlci90ZXN0LSUubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChBTExfTERGTEFHUykgJChmaWx0ZXIgJS5vLCReKSAkKGZpbHRlciAlLmEsJF4pICQoTElCUykKKworY2hlY2stc2hhMTo6IHQvaGVscGVyL3Rlc3QtdG9vbCRYCisJdC9oZWxwZXIvdGVzdC1zaGExLnNoCisKK1NQX09CSiA9ICQocGF0c3Vic3QgJS5vLCUuc3AsJChDX09CSikpCisKKyQoU1BfT0JKKTogJS5zcDogJS5jIEdJVC1DRkxBR1MgRk9SQ0UKKwkkKFFVSUVUX1NQKWNnY2MgLW5vLWNvbXBpbGUgJChBTExfQ0ZMQUdTKSAkKEVYVFJBX0NQUEZMQUdTKSBcCisJCSQoU1BBUlNFX0ZMQUdTKSAkKFNQX0VYVFJBX0ZMQUdTKSAkPAorCisuUEhPTlk6IHNwYXJzZSAkKFNQX09CSikKK3NwYXJzZTogJChTUF9PQkopCisKK0VYQ0VQVF9IRFJTIDo9IGNvbW1hbmQtbGlzdC5oIHVuaWNvZGUtd2lkdGguaCBjb21wYXQvJSB4ZGlmZi8lCitpZm5kZWYgR0NSWVBUX1NIQTI1NgorCUVYQ0VQVF9IRFJTICs9IHNoYTI1Ni9nY3J5cHQuaAorZW5kaWYKK0NIS19IRFJTID0gJChmaWx0ZXItb3V0ICQoRVhDRVBUX0hEUlMpLCQoTElCX0gpKQorSENPID0gJChwYXRzdWJzdCAlLmgsJS5oY28sJChDSEtfSERSUykpCitIQ0MgPSAkKEhDTzpoY289aGNjKQorCislLmhjYzogJS5oCisJQGVjaG8gJyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCInID4kQAorCUBlY2hvICcjaW5jbHVkZSAiJDwiJyA+PiRACisKKyQoSENPKTogJS5oY286ICUuaGNjIEZPUkNFCisJJChRVUlFVF9IRFIpJChDQykgJChBTExfQ0ZMQUdTKSAtbyAvZGV2L251bGwgLWMgLXhjICQ8CisKKy5QSE9OWTogaGRyLWNoZWNrICQoSENPKQoraGRyLWNoZWNrOiAkKEhDTykKKworLlBIT05ZOiBzdHlsZQorc3R5bGU6CisJZ2l0IGNsYW5nLWZvcm1hdCAtLXN0eWxlIGZpbGUgLS1kaWZmIC0tZXh0ZW5zaW9ucyBjLGgKKworY2hlY2s6IGNvbW1hbmQtbGlzdC5oCisJQGlmIHNwYXJzZTsgXAorCXRoZW4gXAorCQllY2hvID4mMiAiVXNlICdtYWtlIHNwYXJzZScgaW5zdGVhZCI7IFwKKwkJJChNQUtFKSAtLW5vLXByaW50LWRpcmVjdG9yeSBzcGFyc2U7IFwKKwllbHNlIFwKKwkJZWNobyA+JjIgIkRpZCB5b3UgbWVhbiAnbWFrZSB0ZXN0Jz8iOyBcCisJCWV4aXQgMTsgXAogCWZpCiAKLWlmZGVmIEdJVEdVSV9NQUNPU1hBUFAKLWFsbDo6IGdpdC1ndWkgR2l0XCBHdWkuYXBwCitGT1VORF9DX1NPVVJDRVMgPSAkKGZpbHRlciAlLmMsJChzaGVsbCAkKEZJTkRfU09VUkNFX0ZJTEVTKSkpCitDT0NDSV9TT1VSQ0VTID0gJChmaWx0ZXItb3V0ICQoVEhJUkRfUEFSVFlfU09VUkNFUyksJChGT1VORF9DX1NPVVJDRVMpKQorCislLmNvY2NpLnBhdGNoOiAlLmNvY2NpICQoQ09DQ0lfU09VUkNFUykKKwkkKFFVSUVUX1NQQVRDSCkgXAorCWlmIHRlc3QgJChTUEFUQ0hfQkFUQ0hfU0laRSkgPSAwOyB0aGVuIFwKKwkJbGltaXQ9OyBcCisJZWxzZSBcCisJCWxpbWl0PSctbiAkKFNQQVRDSF9CQVRDSF9TSVpFKSc7IFwKKwlmaTsgXAorCWlmICEgZWNobyAkKENPQ0NJX1NPVVJDRVMpIHwgeGFyZ3MgJCRsaW1pdCBcCisJCSQoU1BBVENIKSAtLXNwLWZpbGUgJDwgJChTUEFUQ0hfRkxBR1MpIFwKKwkJPiRAKyAyPiRALmxvZzsgXAorCXRoZW4gXAorCQljYXQgJEAubG9nOyBcCisJCWV4aXQgMTsgXAorCWZpOyBcCisJbXYgJEArICRAOyBcCisJaWYgdGVzdCAtcyAkQDsgXAorCXRoZW4gXAorCQllY2hvICcgICAgJyBTUEFUQ0ggcmVzdWx0OiAkQDsgXAorCWZpCitjb2NjaWNoZWNrOiAkKGFkZHN1ZmZpeCAucGF0Y2gsJChmaWx0ZXItb3V0ICUucGVuZGluZy5jb2NjaSwkKHdpbGRjYXJkIGNvbnRyaWIvY29jY2luZWxsZS8qLmNvY2NpKSkpCisKKyMgU2VlIGNvbnRyaWIvY29jY2luZWxsZS9SRUFETUUKK2NvY2NpY2hlY2stcGVuZGluZzogJChhZGRzdWZmaXggLnBhdGNoLCQod2lsZGNhcmQgY29udHJpYi9jb2NjaW5lbGxlLyoucGVuZGluZy5jb2NjaSkpCisKKy5QSE9OWTogY29jY2ljaGVjayBjb2NjaWNoZWNrLXBlbmRpbmcKKworIyMjIEluc3RhbGxhdGlvbiBydWxlcworCitpZm5lcSAoJChmaWx0ZXIgLyUsJChmaXJzdHdvcmQgJCh0ZW1wbGF0ZV9kaXIpKSksKQordGVtcGxhdGVfaW5zdGRpciA9ICQodGVtcGxhdGVfZGlyKQorZWxzZQordGVtcGxhdGVfaW5zdGRpciA9ICQocHJlZml4KS8kKHRlbXBsYXRlX2RpcikKIGVuZGlmCi1pZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCi1hbGw6OiBnaXQtZ3VpCitleHBvcnQgdGVtcGxhdGVfaW5zdGRpcgorCitpZm5lcSAoJChmaWx0ZXIgLyUsJChmaXJzdHdvcmQgJChnaXRleGVjZGlyKSkpLCkKK2dpdGV4ZWNfaW5zdGRpciA9ICQoZ2l0ZXhlY2RpcikKK2Vsc2UKK2dpdGV4ZWNfaW5zdGRpciA9ICQocHJlZml4KS8kKGdpdGV4ZWNkaXIpCiBlbmRpZgotYWxsOjogJChHSVRHVUlfTUFJTikgbGliL3RjbEluZGV4ICQoQUxMX01TR0ZJTEVTKQorZ2l0ZXhlY19pbnN0ZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXRleGVjX2luc3RkaXIpKQorZXhwb3J0IGdpdGV4ZWNfaW5zdGRpcgorCitpZm5lcSAoJChmaWx0ZXIgLyUsJChmaXJzdHdvcmQgJChtZXJnZXRvb2xzZGlyKSkpLCkKK21lcmdldG9vbHNfaW5zdGRpciA9ICQobWVyZ2V0b29sc2RpcikKK2Vsc2UKK21lcmdldG9vbHNfaW5zdGRpciA9ICQocHJlZml4KS8kKG1lcmdldG9vbHNkaXIpCitlbmRpZgorbWVyZ2V0b29sc19pbnN0ZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChtZXJnZXRvb2xzX2luc3RkaXIpKQorCitpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcyA6PSAkKHBhdHN1YnN0ICUsJSRYLCQoQklORElSX1BST0dSQU1TX05FRURfWCkpICQoQklORElSX1BST0dSQU1TX05PX1gpCisKKy5QSE9OWTogcHJvZmlsZS1pbnN0YWxsIHByb2ZpbGUtZmFzdC1pbnN0YWxsCitwcm9maWxlLWluc3RhbGw6IHByb2ZpbGUKKwkkKE1BS0UpIGluc3RhbGwKKworcHJvZmlsZS1mYXN0LWluc3RhbGw6IHByb2ZpbGUtZmFzdAorCSQoTUFLRSkgaW5zdGFsbAogCiBpbnN0YWxsOiBhbGwKLQkkKFFVSUVUKSQoSU5TVEFMTF9EMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknICQoSU5TVEFMTF9EMSkKLQkkKFFVSUVUKSQoSU5TVEFMTF9YMClnaXQtZ3VpICQoSU5TVEFMTF9YMSkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJwotCSQoUVVJRVQpJChJTlNUQUxMX1gwKWdpdC1ndWktLWFza3Bhc3MgJChJTlNUQUxMX1gxKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknCi0JJChRVUlFVCkkKGZvcmVhY2ggcCwkKEdJVEdVSV9CVUlMVF9JTlMpLCAkKElOU1RBTExfTDApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpLyRwJyAkKElOU1RBTExfTDEpJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpL2dpdC1ndWknICQoSU5TVEFMTF9MMiknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSkvJHAnICQoSU5TVEFMTF9MMykgJiYpIHRydWUKLWlmZGVmIEdJVEdVSV9XSU5ET1dTX1dSQVBQRVIKLQkkKFFVSUVUKSQoSU5TVEFMTF9SMClnaXQtZ3VpLnRjbCAkKElOU1RBTExfUjEpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpICQoQUxMX1BST0dSQU1TKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIC1tIDY0NCAkKFNDUklQVF9MSUIpICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgJChpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcykgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCitpZmRlZiBNU1ZDCisJIyBXZSBETyBOT1QgaW5zdGFsbCB0aGUgaW5kaXZpZHVhbCBmb28uby5wZGIgZmlsZXMgYmVjYXVzZSB0aGV5CisJIyBoYXZlIGFscmVhZHkgYmVlbiByb2xsZWQgdXAgaW50byB0aGUgZXhlJ3MgcGRiIGZpbGUuCisJIyBXZSBETyBOT1QgaGF2ZSBwZGIgZmlsZXMgZm9yIHRoZSBidWlsdGluIGNvbW1hbmRzIChsaWtlIGdpdC1zdGF0dXMuZXhlKQorCSMgYmVjYXVzZSBpdCBpcyBqdXN0IGEgY29weS9oYXJkbGluayBvZiBnaXQuZXhlLCByYXRoZXIgdGhhbiBhIHVuaXF1ZSBiaW5hcnkuCisJJChJTlNUQUxMKSBnaXQucGRiICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LXNoZWxsLnBkYiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC11cGxvYWQtcGFjay5wZGIgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtY3JlZGVudGlhbC1zdG9yZS5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtZGFlbW9uLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1mYXN0LWltcG9ydC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtaHR0cC1iYWNrZW5kLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1odHRwLWZldGNoLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1odHRwLXB1c2gucGRiICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LWltYXAtc2VuZC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtcmVtb3RlLWh0dHAucGRiICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgZ2l0LXJlbW90ZS10ZXN0c3ZuLnBkYiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdC1zaC1pMThuLS1lbnZzdWJzdC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSBnaXQtc2hvdy1pbmRleC5wZGIgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCitpZm5kZWYgREVCVUcKKwkkKElOU1RBTEwpICQodmNwa2dfcmVsX2JpbikvKi5kbGwgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCisJJChJTlNUQUxMKSAkKHZjcGtnX3JlbF9iaW4pLyoucGRiICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworZWxzZQorCSQoSU5TVEFMTCkgJCh2Y3BrZ19kYmdfYmluKS8qLmRsbCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpICQodmNwa2dfZGJnX2JpbikvKi5wZGIgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCiBlbmRpZgotCSQoUVVJRVQpJChJTlNUQUxMX0QwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJyAkKElOU1RBTExfRDEpCi0JJChRVUlFVCkkKElOU1RBTExfUjApbGliL3RjbEluZGV4ICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknCi1pZmRlZiBHSVRHVUlfTUFDT1NYQVBQCi0JJChRVUlFVCkkKElOU1RBTExfQTApJ0dpdCBHdWkuYXBwJyAkKElOU1RBTExfQTEpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJwotCSQoUVVJRVQpJChJTlNUQUxMX1gwKWdpdC1ndWkudGNsICQoSU5TVEFMTF9YMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknCiBlbmRpZgotCSQoUVVJRVQpJChmb3JlYWNoIHAsJChBTExfTElCRklMRVMpICQoTk9OVENMX0xJQkZJTEVTKSwgJChJTlNUQUxMX1IwKSRwICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknICYmKSB0cnVlCi0JJChRVUlFVCkkKElOU1RBTExfRDApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAkKElOU1RBTExfRDEpCi0JJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9NU0dGSUxFUyksICQoSU5TVEFMTF9SMCkkcCAkKElOU1RBTExfUjEpICckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScgJiYpIHRydWUKLQotdW5pbnN0YWxsOgotCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKLQkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aSAkKFJFTU9WRV9GMSkKLQkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aS0tYXNrcGFzcyAkKFJFTU9WRV9GMSkKLQkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoR0lUR1VJX0JVSUxUX0lOUyksICQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvJHAgJChSRU1PVkVfRjEpICYmKSB0cnVlCi1pZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCi0JJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknL2dpdC1ndWkudGNsICQoUkVNT1ZFX0YxKQorCSQoTUFLRSkgLUMgdGVtcGxhdGVzIERFU1RESVI9JyQoREVTVERJUl9TUSknIGluc3RhbGwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobWVyZ2V0b29sc19pbnN0ZGlyX1NRKScKKwkkKElOU1RBTEwpIC1tIDY0NCBtZXJnZXRvb2xzLyogJyQoREVTVERJUl9TUSkkKG1lcmdldG9vbHNfaW5zdGRpcl9TUSknCitpZm5kZWYgTk9fR0VUVEVYVAorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChsb2NhbGVkaXJfU1EpJworCShjZCBwby9idWlsZC9sb2NhbGUgJiYgJChUQVIpIGNmIC0gLikgfCBcCisJKGNkICckKERFU1RESVJfU1EpJChsb2NhbGVkaXJfU1EpJyAmJiB1bWFzayAwMjIgJiYgJChUQVIpIHhvZiAtKQogZW5kaWYKLQkkKFFVSUVUKSQoQ0xFQU5fRFNUKSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKScKLQkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJy90Y2xJbmRleCAkKFJFTU9WRV9GMSkKLWlmZGVmIEdJVEdVSV9NQUNPU1hBUFAKLQkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpL0dpdCBHdWkuYXBwJyAkKFJFTU9WRV9GMSkKLQkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJy9naXQtZ3VpLnRjbCAkKFJFTU9WRV9GMSkKK2lmbmRlZiBOT19QRVJMCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBlcmxsaWJkaXJfU1EpJworCShjZCBwZXJsL2J1aWxkL2xpYiAmJiAkKFRBUikgY2YgLSAuKSB8IFwKKwkoY2QgJyQoREVTVERJUl9TUSkkKHBlcmxsaWJkaXJfU1EpJyAmJiB1bWFzayAwMjIgJiYgJChUQVIpIHhvZiAtKQorCSQoTUFLRSkgLUMgZ2l0d2ViIGluc3RhbGwKIGVuZGlmCi0JJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9MSUJGSUxFUykgJChOT05UQ0xfTElCRklMRVMpLCAkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKScvJChub3RkaXIgJHApICQoUkVNT1ZFX0YxKSAmJikgdHJ1ZQotCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScKLQkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJy8kKG5vdGRpciAkcCkgJChSRU1PVkVfRjEpICYmKSB0cnVlCi0JJChRVUlFVCkkKFJFTU9WRV9EMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknICQoUkVNT1ZFX0QxKQotCSQoUVVJRVQpJChSRU1PVkVfRDApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAkKFJFTU9WRV9EMSkKLQkkKFFVSUVUKSQoUkVNT1ZFX0QwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJyAkKFJFTU9WRV9EMSkKLQkkKFFVSUVUKSQoUkVNT1ZFX0QwKWBkaXJuYW1lICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJ2AgJChSRU1PVkVfRDEpCi0KLWRpc3QtdmVyc2lvbjoKLQlAbWtkaXIgLXAgJChUQVJESVIpCi0JQGVjaG8gJChHSVRHVUlfVkVSU0lPTikgPiAkKFRBUkRJUikvdmVyc2lvbgotCi1jbGVhbjo6Ci0JJChSTV9SRikgJChHSVRHVUlfTUFJTikgbGliL3RjbEluZGV4IHBvLyoubXNnCi0JJChSTV9SRikgR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMKLWlmZGVmIEdJVEdVSV9NQUNPU1hBUFAKLQkkKFJNX1JGKSAnR2l0IEd1aS5hcHAnKiBnaXQtZ3VpCitpZm5kZWYgTk9fVENMVEsKKwkkKE1BS0UpIC1DIGdpdGstZ2l0IGluc3RhbGwKKwkkKE1BS0UpIC1DIGdpdC1ndWkgZ2l0ZXhlY2Rpcj0nJChnaXRleGVjX2luc3RkaXJfU1EpJyBpbnN0YWxsCiBlbmRpZgotaWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgotCSQoUk1fUkYpIGdpdC1ndWkKK2lmbmVxICgsJFgpCisJJChmb3JlYWNoIHAsJChwYXRzdWJzdCAlJFgsJSwkKGZpbHRlciAlJFgsJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQkWCkpLCB0ZXN0ICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpLyRwJyAtZWYgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSkvJHAkWCcgfHwgJChSTSkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSkvJHAnOykKIGVuZGlmCiAKLS5QSE9OWTogYWxsIGluc3RhbGwgdW5pbnN0YWxsIGRpc3QtdmVyc2lvbiBjbGVhbgotLlBIT05ZOiBGT1JDRQorCWJpbmRpcj0kJChjZCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScgJiYgcHdkKSAmJiBcCisJZXhlY2Rpcj0kJChjZCAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScgJiYgcHdkKSAmJiBcCisJZGVzdGRpcl9mcm9tX2V4ZWNkaXJfU1E9JCQoZWNobyAnJChnaXRleGVjZGlyX3JlbGF0aXZlX1NRKScgfCBzZWQgLWUgJ3N8W14vXVteL10qfC4ufGcnKSAmJiBcCisJeyB0ZXN0ICIkJGJpbmRpci8iID0gIiQkZXhlY2Rpci8iIHx8IFwKKwkgIGZvciBwIGluIGdpdCRYICQoZmlsdGVyICQoaW5zdGFsbF9iaW5kaXJfcHJvZ3JhbXMpLCQoQUxMX1BST0dSQU1TKSk7IGRvIFwKKwkJJChSTSkgIiQkZXhlY2Rpci8kJHAiICYmIFwKKwkJdGVzdCAtbiAiJChJTlNUQUxMX1NZTUxJTktTKSIgJiYgXAorCQlsbiAtcyAiJCRkZXN0ZGlyX2Zyb21fZXhlY2Rpcl9TUS8kKGJpbmRpcl9yZWxhdGl2ZV9TUSkvJCRwIiAiJCRleGVjZGlyLyQkcCIgfHwgXAorCQl7IHRlc3QgLXogIiQoTk9fSU5TVEFMTF9IQVJETElOS1MpJChOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTKSIgJiYgXAorCQkgIGxuICIkJGJpbmRpci8kJHAiICIkJGV4ZWNkaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCSAgY3AgIiQkYmluZGlyLyQkcCIgIiQkZXhlY2Rpci8kJHAiIHx8IGV4aXQ7IH0gXAorCSAgZG9uZTsgXAorCX0gJiYgXAorCWZvciBwIGluICQoZmlsdGVyICQoaW5zdGFsbF9iaW5kaXJfcHJvZ3JhbXMpLCQoQlVJTFRfSU5TKSk7IGRvIFwKKwkJJChSTSkgIiQkYmluZGlyLyQkcCIgJiYgXAorCQl0ZXN0IC1uICIkKElOU1RBTExfU1lNTElOS1MpIiAmJiBcCisJCWxuIC1zICJnaXQkWCIgIiQkYmluZGlyLyQkcCIgfHwgXAorCQl7IHRlc3QgLXogIiQoTk9fSU5TVEFMTF9IQVJETElOS1MpIiAmJiBcCisJCSAgbG4gIiQkYmluZGlyL2dpdCRYIiAiJCRiaW5kaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCSAgbG4gLXMgImdpdCRYIiAiJCRiaW5kaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCSAgY3AgIiQkYmluZGlyL2dpdCRYIiAiJCRiaW5kaXIvJCRwIiB8fCBleGl0OyB9IFwKKwlkb25lICYmIFwKKwlmb3IgcCBpbiAkKEJVSUxUX0lOUyk7IGRvIFwKKwkJJChSTSkgIiQkZXhlY2Rpci8kJHAiICYmIFwKKwkJdGVzdCAtbiAiJChJTlNUQUxMX1NZTUxJTktTKSIgJiYgXAorCQlsbiAtcyAiJCRkZXN0ZGlyX2Zyb21fZXhlY2Rpcl9TUS8kKGJpbmRpcl9yZWxhdGl2ZV9TUSkvZ2l0JFgiICIkJGV4ZWNkaXIvJCRwIiB8fCBcCisJCXsgdGVzdCAteiAiJChOT19JTlNUQUxMX0hBUkRMSU5LUykiICYmIFwKKwkJICBsbiAiJCRleGVjZGlyL2dpdCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQkgIGxuIC1zICJnaXQkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJICBjcCAiJCRleGVjZGlyL2dpdCRYIiAiJCRleGVjZGlyLyQkcCIgfHwgZXhpdDsgfSBcCisJZG9uZSAmJiBcCisJcmVtb3RlX2N1cmxfYWxpYXNlcz0iJChSRU1PVEVfQ1VSTF9BTElBU0VTKSIgJiYgXAorCWZvciBwIGluICQkcmVtb3RlX2N1cmxfYWxpYXNlczsgZG8gXAorCQkkKFJNKSAiJCRleGVjZGlyLyQkcCIgJiYgXAorCQl0ZXN0IC1uICIkKElOU1RBTExfU1lNTElOS1MpIiAmJiBcCisJCWxuIC1zICJnaXQtcmVtb3RlLWh0dHAkWCIgIiQkZXhlY2Rpci8kJHAiIHx8IFwKKwkJeyB0ZXN0IC16ICIkKE5PX0lOU1RBTExfSEFSRExJTktTKSIgJiYgXAorCQkgIGxuICIkJGV4ZWNkaXIvZ2l0LXJlbW90ZS1odHRwJFgiICIkJGV4ZWNkaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCSAgbG4gLXMgImdpdC1yZW1vdGUtaHR0cCRYIiAiJCRleGVjZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQkgIGNwICIkJGV4ZWNkaXIvZ2l0LXJlbW90ZS1odHRwJFgiICIkJGV4ZWNkaXIvJCRwIiB8fCBleGl0OyB9IFwKKwlkb25lICYmIFwKKwkuL2NoZWNrX2JpbmRpciAieiQkYmluZGlyIiAieiQkZXhlY2RpciIgIiQkYmluZGlyL2dpdC1hZGQkWCIKKworLlBIT05ZOiBpbnN0YWxsLWdpdHdlYiBpbnN0YWxsLWRvYyBpbnN0YWxsLW1hbiBpbnN0YWxsLW1hbi1wZXJsIGluc3RhbGwtaHRtbCBpbnN0YWxsLWluZm8gaW5zdGFsbC1wZGYKKy5QSE9OWTogcXVpY2staW5zdGFsbC1kb2MgcXVpY2staW5zdGFsbC1tYW4gcXVpY2staW5zdGFsbC1odG1sCitpbnN0YWxsLWdpdHdlYjoKKwkkKE1BS0UpIC1DIGdpdHdlYiBpbnN0YWxsCisKK2luc3RhbGwtZG9jOiBpbnN0YWxsLW1hbi1wZXJsCisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwKKworaW5zdGFsbC1tYW46IGluc3RhbGwtbWFuLXBlcmwKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbC1tYW4KKworaW5zdGFsbC1tYW4tcGVybDogbWFuLXBlcmwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobWFuZGlyX1NRKS9tYW4zJworCShjZCBwZXJsL2J1aWxkL21hbi9tYW4zICYmICQoVEFSKSBjZiAtIC4pIHwgXAorCShjZCAnJChERVNURElSX1NRKSQobWFuZGlyX1NRKS9tYW4zJyAmJiB1bWFzayAwMjIgJiYgJChUQVIpIHhvZiAtKQorCitpbnN0YWxsLWh0bWw6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwtaHRtbAorCitpbnN0YWxsLWluZm86CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwtaW5mbworCitpbnN0YWxsLXBkZjoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbC1wZGYKKworcXVpY2staW5zdGFsbC1kb2M6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHF1aWNrLWluc3RhbGwKKworcXVpY2staW5zdGFsbC1tYW46CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHF1aWNrLWluc3RhbGwtbWFuCisKK3F1aWNrLWluc3RhbGwtaHRtbDoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gcXVpY2staW5zdGFsbC1odG1sCisKKworCisjIyMgTWFpbnRhaW5lcidzIGRpc3QgcnVsZXMKKworR0lUX1RBUk5BTUUgPSBnaXQtJChHSVRfVkVSU0lPTikKK2Rpc3Q6IGdpdC1hcmNoaXZlJChYKSBjb25maWd1cmUKKwkuL2dpdC1hcmNoaXZlIC0tZm9ybWF0PXRhciBcCisJCS0tcHJlZml4PSQoR0lUX1RBUk5BTUUpLyBIRUFEXnt0cmVlfSA+ICQoR0lUX1RBUk5BTUUpLnRhcgorCUBta2RpciAtcCAkKEdJVF9UQVJOQU1FKQorCUBjcCBjb25maWd1cmUgJChHSVRfVEFSTkFNRSkKKwlAZWNobyAkKEdJVF9WRVJTSU9OKSA+ICQoR0lUX1RBUk5BTUUpL3ZlcnNpb24KKwlAJChNQUtFKSAtQyBnaXQtZ3VpIFRBUkRJUj0uLi8kKEdJVF9UQVJOQU1FKS9naXQtZ3VpIGRpc3QtdmVyc2lvbgorCSQoVEFSKSByZiAkKEdJVF9UQVJOQU1FKS50YXIgXAorCQkkKEdJVF9UQVJOQU1FKS9jb25maWd1cmUgXAorCQkkKEdJVF9UQVJOQU1FKS92ZXJzaW9uIFwKKwkJJChHSVRfVEFSTkFNRSkvZ2l0LWd1aS92ZXJzaW9uCitpZmRlZiBEQ19TSEExX1NVQk1PRFVMRQorCUBta2RpciAtcCAkKEdJVF9UQVJOQU1FKS9zaGExY29sbGlzaW9uZGV0ZWN0aW9uL2xpYgorCUBjcCBzaGExY29sbGlzaW9uZGV0ZWN0aW9uL0xJQ0VOU0UudHh0IFwKKwkJJChHSVRfVEFSTkFNRSkvc2hhMWNvbGxpc2lvbmRldGVjdGlvbi8KKwlAY3Agc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9MSUNFTlNFLnR4dCBcCisJCSQoR0lUX1RBUk5BTUUpL3NoYTFjb2xsaXNpb25kZXRlY3Rpb24vCisJQGNwIHNoYTFjb2xsaXNpb25kZXRlY3Rpb24vbGliL3NoYTEuW2NoXSBcCisJCSQoR0lUX1RBUk5BTUUpL3NoYTFjb2xsaXNpb25kZXRlY3Rpb24vbGliLworCUBjcCBzaGExY29sbGlzaW9uZGV0ZWN0aW9uL2xpYi91YmNfY2hlY2suW2NoXSBcCisJCSQoR0lUX1RBUk5BTUUpL3NoYTFjb2xsaXNpb25kZXRlY3Rpb24vbGliLworCSQoVEFSKSByZiAkKEdJVF9UQVJOQU1FKS50YXIgXAorCQkkKEdJVF9UQVJOQU1FKS9zaGExY29sbGlzaW9uZGV0ZWN0aW9uL0xJQ0VOU0UudHh0IFwKKwkJJChHSVRfVEFSTkFNRSkvc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvc2hhMS5bY2hdIFwKKwkJJChHSVRfVEFSTkFNRSkvc2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvdWJjX2NoZWNrLltjaF0KK2VuZGlmCisJQCQoUk0pIC1yICQoR0lUX1RBUk5BTUUpCisJZ3ppcCAtZiAtOSAkKEdJVF9UQVJOQU1FKS50YXIKKworcnBtOjoKKwlAZWNobyA+JjIgIlVzZSBkaXN0cm8gcGFja2FnZWQgc291cmNlcyB0byBydW4gcnBtYnVpbGQiCisJQGZhbHNlCisuUEhPTlk6IHJwbQorCitpZm5lcSAoJChJTkNMVURFX0RMTFNfSU5fQVJUSUZBQ1RTKSwpCitPVEhFUl9QUk9HUkFNUyArPSAkKHNoZWxsIGVjaG8gKi5kbGwgdC9oZWxwZXIvKi5kbGwpCitlbmRpZgorCithcnRpZmFjdHMtdGFyOjogJChBTExfUFJPR1JBTVMpICQoU0NSSVBUX0xJQikgJChCVUlMVF9JTlMpICQoT1RIRVJfUFJPR1JBTVMpIFwKKwkJR0lULUJVSUxELU9QVElPTlMgJChURVNUX1BST0dSQU1TKSAkKHRlc3RfYmluZGlyX3Byb2dyYW1zKSBcCisJCSQoTU9GSUxFUykKKwkkKFFVSUVUX1NVQkRJUjApdGVtcGxhdGVzICQoUVVJRVRfU1VCRElSMSkgXAorCQlTSEVMTF9QQVRIPSckKFNIRUxMX1BBVEhfU1EpJyBQRVJMX1BBVEg9JyQoUEVSTF9QQVRIX1NRKScKKwl0ZXN0IC1uICIkKEFSVElGQUNUU19ESVJFQ1RPUlkpIgorCW1rZGlyIC1wICIkKEFSVElGQUNUU19ESVJFQ1RPUlkpIgorCSQoVEFSKSBjemYgIiQoQVJUSUZBQ1RTX0RJUkVDVE9SWSkvYXJ0aWZhY3RzLnRhci5neiIgJF4gdGVtcGxhdGVzL2JsdC8KKy5QSE9OWTogYXJ0aWZhY3RzLXRhcgorCitodG1sZG9jcyA9IGdpdC1odG1sZG9jcy0kKEdJVF9WRVJTSU9OKQorbWFucGFnZXMgPSBnaXQtbWFucGFnZXMtJChHSVRfVkVSU0lPTikKKy5QSE9OWTogZGlzdC1kb2MgZGlzdGNsZWFuCitkaXN0LWRvYzoKKwkkKFJNKSAtciAuZG9jLXRtcC1kaXIKKwlta2RpciAuZG9jLXRtcC1kaXIKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gV0VCRE9DX0RFU1Q9Li4vLmRvYy10bXAtZGlyIGluc3RhbGwtd2ViZG9jCisJY2QgLmRvYy10bXAtZGlyICYmICQoVEFSKSBjZiAuLi8kKGh0bWxkb2NzKS50YXIgLgorCWd6aXAgLW4gLTkgLWYgJChodG1sZG9jcykudGFyCisJOgorCSQoUk0pIC1yIC5kb2MtdG1wLWRpcgorCW1rZGlyIC1wIC5kb2MtdG1wLWRpci9tYW4xIC5kb2MtdG1wLWRpci9tYW41IC5kb2MtdG1wLWRpci9tYW43CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIERFU1RESVI9Li8gXAorCQltYW4xZGlyPS4uLy5kb2MtdG1wLWRpci9tYW4xIFwKKwkJbWFuNWRpcj0uLi8uZG9jLXRtcC1kaXIvbWFuNSBcCisJCW1hbjdkaXI9Li4vLmRvYy10bXAtZGlyL21hbjcgXAorCQlpbnN0YWxsCisJY2QgLmRvYy10bXAtZGlyICYmICQoVEFSKSBjZiAuLi8kKG1hbnBhZ2VzKS50YXIgLgorCWd6aXAgLW4gLTkgLWYgJChtYW5wYWdlcykudGFyCisJJChSTSkgLXIgLmRvYy10bXAtZGlyCisKKyMjIyBDbGVhbmluZyBydWxlcworCitkaXN0Y2xlYW46IGNsZWFuCisJJChSTSkgY29uZmlndXJlCisJJChSTSkgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZQorCSQoUk0pIGNvbmZpZy5tYWsuYXV0b2dlbiBjb25maWcubWFrLmFwcGVuZAorCSQoUk0pIC1yIGF1dG9tNHRlLmNhY2hlCisKK3Byb2ZpbGUtY2xlYW46CisJJChSTSkgJChhZGRzdWZmaXggKi5nY2RhLCQoYWRkcHJlZml4ICQoUFJPRklMRV9ESVIpLywgJChvYmplY3RfZGlycykpKQorCSQoUk0pICQoYWRkc3VmZml4ICouZ2NubywkKGFkZHByZWZpeCAkKFBST0ZJTEVfRElSKS8sICQob2JqZWN0X2RpcnMpKSkKKworY29jY2ljbGVhbjoKKwkkKFJNKSBjb250cmliL2NvY2NpbmVsbGUvKi5jb2NjaS5wYXRjaCoKKworY2xlYW46IHByb2ZpbGUtY2xlYW4gY292ZXJhZ2UtY2xlYW4gY29jY2ljbGVhbgorCSQoUk0pICoucmVzCisJJChSTSkgJChPQkpFQ1RTKQorCSQoUk0pICQoTElCX0ZJTEUpICQoWERJRkZfTElCKSAkKFZDU1NWTl9MSUIpCisJJChSTSkgJChBTExfUFJPR1JBTVMpICQoU0NSSVBUX0xJQikgJChCVUlMVF9JTlMpIGdpdCRYCisJJChSTSkgJChURVNUX1BST0dSQU1TKQorCSQoUk0pICQoRlVaWl9QUk9HUkFNUykKKwkkKFJNKSAkKEhDQykKKwkkKFJNKSAtciBiaW4td3JhcHBlcnMgJChkZXBfZGlycykKKwkkKFJNKSAtciBwby9idWlsZC8KKwkkKFJNKSAqLnB5YyAqLnB5byAqLyoucHljICovKi5weW8gJChHRU5FUkFURURfSCkgJChFVEFHU19UQVJHRVQpIHRhZ3MgY3Njb3BlKgorCSQoUk0pIC1yICQoR0lUX1RBUk5BTUUpIC5kb2MtdG1wLWRpcgorCSQoUk0pICQoR0lUX1RBUk5BTUUpLnRhci5neiBnaXQtY29yZV8kKEdJVF9WRVJTSU9OKS0qLnRhci5negorCSQoUk0pICQoaHRtbGRvY3MpLnRhci5neiAkKG1hbnBhZ2VzKS50YXIuZ3oKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24vIGNsZWFuCisJJChSTSkgRG9jdW1lbnRhdGlvbi9HSVQtRVhDTFVERUQtUFJPR1JBTVMKK2lmbmRlZiBOT19QRVJMCisJJChNQUtFKSAtQyBnaXR3ZWIgY2xlYW4KKwkkKFJNKSAtciBwZXJsL2J1aWxkLworZW5kaWYKKwkkKE1BS0UpIC1DIHRlbXBsYXRlcy8gY2xlYW4KKwkkKE1BS0UpIC1DIHQvIGNsZWFuCitpZm5kZWYgTk9fVENMVEsKKwkkKE1BS0UpIC1DIGdpdGstZ2l0IGNsZWFuCisJJChNQUtFKSAtQyBnaXQtZ3VpIGNsZWFuCitlbmRpZgorCSQoUk0pIEdJVC1WRVJTSU9OLUZJTEUgR0lULUNGTEFHUyBHSVQtTERGTEFHUyBHSVQtQlVJTEQtT1BUSU9OUworCSQoUk0pIEdJVC1VU0VSLUFHRU5UIEdJVC1QUkVGSVgKKwkkKFJNKSBHSVQtU0NSSVBULURFRklORVMgR0lULVBFUkwtREVGSU5FUyBHSVQtUEVSTC1IRUFERVIgR0lULVBZVEhPTi1WQVJTCitpZmRlZiBNU1ZDCisJJChSTSkgJChwYXRzdWJzdCAlLm8sJS5vLnBkYiwkKE9CSkVDVFMpKQorCSQoUk0pICQocGF0c3Vic3QgJS5leGUsJS5wZGIsJChPVEhFUl9QUk9HUkFNUykpCisJJChSTSkgJChwYXRzdWJzdCAlLmV4ZSwlLmlvYmosJChPVEhFUl9QUk9HUkFNUykpCisJJChSTSkgJChwYXRzdWJzdCAlLmV4ZSwlLmlwZGIsJChPVEhFUl9QUk9HUkFNUykpCisJJChSTSkgJChwYXRzdWJzdCAlLmV4ZSwlLnBkYiwkKFBST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaW9iaiwkKFBST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaXBkYiwkKFBST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUucGRiLCQoVEVTVF9QUk9HUkFNUykpCisJJChSTSkgJChwYXRzdWJzdCAlLmV4ZSwlLmlvYmosJChURVNUX1BST0dSQU1TKSkKKwkkKFJNKSAkKHBhdHN1YnN0ICUuZXhlLCUuaXBkYiwkKFRFU1RfUFJPR1JBTVMpKQorCSQoUk0pIGNvbXBhdC92Y2J1aWxkL01TVkMtREVGUy1HRU4KK2VuZGlmCisKKy5QSE9OWTogYWxsIGluc3RhbGwgcHJvZmlsZS1jbGVhbiBjb2NjaWNsZWFuIGNsZWFuIHN0cmlwCisuUEhPTlk6IHNoZWxsX2NvbXBhdGliaWxpdHlfdGVzdCBwbGVhc2Vfc2V0X1NIRUxMX1BBVEhfdG9fYV9tb3JlX21vZGVybl9zaGVsbAorLlBIT05ZOiBGT1JDRSBjc2NvcGUKKworIyMjIENoZWNrIGRvY3VtZW50YXRpb24KKyMKK0FMTF9DT01NQU5EUyA9ICQoQUxMX1BST0dSQU1TKSAkKFNDUklQVF9MSUIpICQoQlVJTFRfSU5TKQorQUxMX0NPTU1BTkRTICs9IGdpdAorQUxMX0NPTU1BTkRTICs9IGdpdGsKK0FMTF9DT01NQU5EUyArPSBnaXR3ZWIKK0FMTF9DT01NQU5EUyArPSBnaXQtZ3VpIGdpdC1jaXRvb2wKKworLlBIT05ZOiBjaGVjay1kb2NzCitjaGVjay1kb2NzOjoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gbGludC1kb2NzCisJQChmb3IgdiBpbiAkKHBhdHN1YnN0ICUkWCwlLCQoQUxMX0NPTU1BTkRTKSk7IFwKKwlkbyBcCisJCWNhc2UgIiQkdiIgaW4gXAorCQlnaXQtbWVyZ2Utb2N0b3B1cyB8IGdpdC1tZXJnZS1vdXJzIHwgZ2l0LW1lcmdlLXJlY3Vyc2l2ZSB8IFwKKwkJZ2l0LW1lcmdlLXJlc29sdmUgfCBnaXQtbWVyZ2Utc3VidHJlZSB8IFwKKwkJZ2l0LWZzY2stb2JqZWN0cyB8IGdpdC1pbml0LWRiIHwgXAorCQlnaXQtcmVtb3RlLSogfCBnaXQtc3RhZ2UgfCBnaXQtbGVnYWN5LSogfCBcCisJCWdpdC0/Ki0tPyogKSBjb250aW51ZSA7OyBcCisJCWVzYWMgOyBcCisJCXRlc3QgLWYgIkRvY3VtZW50YXRpb24vJCR2LnR4dCIgfHwgXAorCQllY2hvICJubyBkb2M6ICQkdiI7IFwKKwkJc2VkIC1lICcxLC9eIyMjIGNvbW1hbmQgbGlzdC9kJyAtZSAnL14jL2QnIGNvbW1hbmQtbGlzdC50eHQgfCBcCisJCWdyZXAgLXEgIl4kJHZbIAldIiB8fCBcCisJCWNhc2UgIiQkdiIgaW4gXAorCQlnaXQpIDs7IFwKKwkJKikgZWNobyAibm8gbGluazogJCR2Ijs7IFwKKwkJZXNhYyA7IFwKKwlkb25lOyBcCisJKCBcCisJCXNlZCAtZSAnMSwvXiMjIyBjb21tYW5kIGxpc3QvZCcgXAorCQkgICAgLWUgJy9eIy9kJyBcCisJCSAgICAtZSAnL2d1aWRlJCQvZCcgXAorCQkgICAgLWUgJ3MvWyAJXS4qLy8nIFwKKwkJICAgIC1lICdzL14vbGlzdGVkIC8nIGNvbW1hbmQtbGlzdC50eHQ7IFwKKwkJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHByaW50LW1hbjEgfCBcCisJCWdyZXAgJ1wudHh0JCQnIHwgXAorCQlzZWQgLWUgJ3N8Xnxkb2N1bWVudGVkIHwnIFwKKwkJICAgIC1lICdzL1wudHh0Ly8nOyBcCisJKSB8IHdoaWxlIHJlYWQgaG93IGNtZDsgXAorCWRvIFwKKwkJY2FzZSAiICQocGF0c3Vic3QgJSRYLCUsJChBTExfQ09NTUFORFMpICQoRVhDTFVERURfUFJPR1JBTVMpKSAiIGluIFwKKwkJKiIgJCRjbWQgIiopCTs7IFwKKwkJKikgZWNobyAicmVtb3ZlZCBidXQgJCRob3c6ICQkY21kIiA7OyBcCisJCWVzYWM7IFwKKwlkb25lICkgfCBzb3J0CisKKyMjIyBNYWtlIHN1cmUgYnVpbHQtaW5zIGRvIG5vdCBoYXZlIGR1cHMgYW5kIGxpc3RlZCBpbiBnaXQuYworIworY2hlY2stYnVpbHRpbnM6OgorCS4vY2hlY2stYnVpbHRpbnMuc2gKKworIyMjIFRlc3Qgc3VpdGUgY292ZXJhZ2UgdGVzdGluZworIworLlBIT05ZOiBjb3ZlcmFnZSBjb3ZlcmFnZS1jbGVhbiBjb3ZlcmFnZS1jb21waWxlIGNvdmVyYWdlLXRlc3QgY292ZXJhZ2UtcmVwb3J0CisuUEhPTlk6IGNvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucyBjb3Zlcl9kYiBjb3Zlcl9kYl9odG1sCisuUEhPTlk6IGNvdmVyYWdlLWNsZWFuLXJlc3VsdHMKKworY292ZXJhZ2U6CisJJChNQUtFKSBjb3ZlcmFnZS10ZXN0CisJJChNQUtFKSBjb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMKKworb2JqZWN0X2RpcnMgOj0gJChzb3J0ICQoZGlyICQoT0JKRUNUUykpKQorY292ZXJhZ2UtY2xlYW4tcmVzdWx0czoKKwkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjb3YsJChvYmplY3RfZGlycykpCisJJChSTSkgJChhZGRzdWZmaXggKi5nY2RhLCQob2JqZWN0X2RpcnMpKQorCSQoUk0pIGNvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucworCSQoUk0pIC1yIGNvdmVyX2RiLworCSQoUk0pIC1yIGNvdmVyX2RiX2h0bWwvCisKK2NvdmVyYWdlLWNsZWFuOiBjb3ZlcmFnZS1jbGVhbi1yZXN1bHRzCisJJChSTSkgJChhZGRzdWZmaXggKi5nY25vLCQob2JqZWN0X2RpcnMpKQorCitDT1ZFUkFHRV9DRkxBR1MgPSAkKENGTEFHUykgLU8wIC1mdGVzdC1jb3ZlcmFnZSAtZnByb2ZpbGUtYXJjcworQ09WRVJBR0VfTERGTEFHUyA9ICQoQ0ZMQUdTKSAgLU8wIC1sZ2NvdgorR0NPVkZMQUdTID0gLS1wcmVzZXJ2ZS1wYXRocyAtLWJyYW5jaC1wcm9iYWJpbGl0aWVzIC0tYWxsLWJsb2NrcworCitjb3ZlcmFnZS1jb21waWxlOgorCSQoTUFLRSkgQ0ZMQUdTPSIkKENPVkVSQUdFX0NGTEFHUykiIExERkxBR1M9IiQoQ09WRVJBR0VfTERGTEFHUykiIGFsbAorCitjb3ZlcmFnZS10ZXN0OiBjb3ZlcmFnZS1jbGVhbi1yZXN1bHRzIGNvdmVyYWdlLWNvbXBpbGUKKwkkKE1BS0UpIENGTEFHUz0iJChDT1ZFUkFHRV9DRkxBR1MpIiBMREZMQUdTPSIkKENPVkVSQUdFX0xERkxBR1MpIiBcCisJCURFRkFVTFRfVEVTVF9UQVJHRVQ9dGVzdCAtajEgdGVzdAorCitjb3ZlcmFnZS1wcm92ZTogY292ZXJhZ2UtY2xlYW4tcmVzdWx0cyBjb3ZlcmFnZS1jb21waWxlCisJJChNQUtFKSBDRkxBR1M9IiQoQ09WRVJBR0VfQ0ZMQUdTKSIgTERGTEFHUz0iJChDT1ZFUkFHRV9MREZMQUdTKSIgXAorCQlERUZBVUxUX1RFU1RfVEFSR0VUPXByb3ZlIEdJVF9QUk9WRV9PUFRTPSIkKEdJVF9QUk9WRV9PUFRTKSAtajEiIFwKKwkJLWoxIHRlc3QKKworY292ZXJhZ2UtcmVwb3J0OgorCSQoUVVJRVRfR0NPVilmb3IgZGlyIGluICQob2JqZWN0X2RpcnMpOyBkbyBcCisJCSQoR0NPVikgJChHQ09WRkxBR1MpIC0tb2JqZWN0LWRpcmVjdG9yeT0kJGRpciAkJGRpciouYyB8fCBleGl0OyBcCisJZG9uZQorCitjb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnM6IGNvdmVyYWdlLXJlcG9ydAorCWdyZXAgJ15mdW5jdGlvbi4qY2FsbGVkIDAgJyAqLmMuZ2NvdiBcCisJCXwgc2VkIC1lICdzL1woW146XSpcKVwuZ2NvdjogKmZ1bmN0aW9uIFwoW14gXSpcKSBjYWxsZWQuKi9cMTogXDIvJyBcCisJCT4gY292ZXJhZ2UtdW50ZXN0ZWQtZnVuY3Rpb25zCisKK2NvdmVyX2RiOiBjb3ZlcmFnZS1yZXBvcnQKKwlnY292MnBlcmwgLWRiIGNvdmVyX2RiICouZ2NvdgorCitjb3Zlcl9kYl9odG1sOiBjb3Zlcl9kYgorCWNvdmVyIC1yZXBvcnQgaHRtbCAtb3V0cHV0ZGlyIGNvdmVyX2RiX2h0bWwgY292ZXJfZGIKKworCisjIyMgRnV6eiB0ZXN0aW5nCisjCisjIEJ1aWxkaW5nIGZ1enogdGFyZ2V0cyBnZW5lcmFsbHkgcmVxdWlyZXMgYSBzcGVjaWFsIHNldCBvZiBjb21waWxlciBmbGFncyB0aGF0CisjIGFyZSBub3QgbmVjZXNzYXJpbHkgYXBwcm9wcmlhdGUgZm9yIGdlbmVyYWwgYnVpbGRzLCBhbmQgdGhhdCB2YXJ5IGdyZWF0bHkKKyMgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciB2ZXJzaW9uIHVzZWQuCisjCisjIEFuIGV4YW1wbGUgY29tbWFuZCB0byBidWlsZCBhZ2FpbnN0IGxpYkZ1enplciBmcm9tIExMVk0gNC4wLjA6CisjCisjIG1ha2UgQ0M9Y2xhbmcgQ1hYPWNsYW5nKysgXAorIyAgICAgIENGTEFHUz0iLWZzYW5pdGl6ZS1jb3ZlcmFnZT10cmFjZS1wYy1ndWFyZCAtZnNhbml0aXplPWFkZHJlc3MiIFwKKyMgICAgICBMSUJfRlVaWklOR19FTkdJTkU9L3Vzci9saWIvbGx2bS00LjAvbGliL2xpYkZ1enplci5hIFwKKyMgICAgICBmdXp6LWFsbAorIworRlVaWl9DWFhGTEFHUyA/PSAkKENGTEFHUykKKworLlBIT05ZOiBmdXp6LWFsbAorCiskKEZVWlpfUFJPR1JBTVMpOiBhbGwKKwkkKFFVSUVUX0xJTkspJChDWFgpICQoRlVaWl9DWFhGTEFHUykgJChMSUJfT0JKUykgJChCVUlMVElOX09CSlMpIFwKKwkJJChYRElGRl9PQkpTKSAkKEVYVExJQlMpIGdpdC5vICRALm8gJChMSUJfRlVaWklOR19FTkdJTkUpIC1vICRACisKK2Z1enotYWxsOiAkKEZVWlpfUFJPR1JBTVMpCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggNWNlMjEyMi4uOWQ0NTY0YyAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMSwxNzQgKzEsNjYgQEAKLSMgR2l0IEdVSSAtIEEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQKK1shW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly9kZXYuYXp1cmUuY29tL2dpdC9naXQvX2FwaXMvYnVpbGQvc3RhdHVzL2dpdC5naXQpXShodHRwczovL2Rldi5henVyZS5jb20vZ2l0L2dpdC9fYnVpbGQvbGF0ZXN0P2RlZmluaXRpb25JZD0xMSkKIAotR2l0IEdVSSBhbGxvd3MgeW91IHRvIHVzZSB0aGUgW0dpdCBzb3VyY2UgY29udHJvbCBtYW5hZ2VtZW50Ci10b29sc10oaHR0cHM6Ly9naXQtc2NtLmNvbS8pIHZpYSBhIEdVSS4gVGhpcyBpbmNsdWRlcyBzdGFnaW5nLCBjb21taXR0aW5nLAotYWRkaW5nLCBwdXNoaW5nLCBldGMuIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBibGFtZSB2aWV3ZXIsIGEgdHJlZSBicm93c2VyLAotYW5kIGEgY2l0b29sIChtYWtlIGV4YWN0bHkgb25lIGNvbW1pdCBiZWZvcmUgZXhpdGluZyBhbmQgcmV0dXJuaW5nIHRvIHNoZWxsKS4KLU1vcmUgZGV0YWlscyBhYm91dCBHaXQgR1VJIGNhbiBiZSBmb3VuZCBpbiBpdHMgbWFudWFsIHBhZ2UgYnkgZWl0aGVyIHJ1bm5pbmcKLWBtYW4gZ2l0LWd1aWAsIG9yIGJ5IHZpc2l0aW5nIHRoZSBbb25saW5lIG1hbnVhbAotcGFnZV0oaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1ndWkpLgorR2l0IC0gZmFzdCwgc2NhbGFibGUsIGRpc3RyaWJ1dGVkIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotR2l0IEdVSSB3YXMgaW5pdGlhbGx5IHdyaXR0ZW4gYnkgU2hhd24gTy4gUGVhcmNlLCBhbmQgaXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUKLXN0YW5kYXJkIEdpdCBpbnN0YWxsYXRpb24uCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KIAotIyBCdWlsZGluZyBhbmQgaW5zdGFsbGluZworR2l0IGlzIGFuIE9wZW4gU291cmNlIHByb2plY3QgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiAoc29tZSBwYXJ0cyBvZiBpdCBhcmUgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2VzLAorY29tcGF0aWJsZSB3aXRoIHRoZSBHUEx2MikuIEl0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTGludXMKK1RvcnZhbGRzIHdpdGggaGVscCBvZiBhIGdyb3VwIG9mIGhhY2tlcnMgYXJvdW5kIHRoZSBuZXQuCiAKLVlvdSBuZWVkIHRvIGhhdmUgdGhlIGZvbGxvd2luZyBkZXBlbmRlbmNpZXMgaW5zdGFsbGVkIGJlZm9yZSB5b3UgYmVnaW46CitQbGVhc2UgcmVhZCB0aGUgZmlsZSBbSU5TVEFMTF1bXSBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KIAotLSBHaXQKLS0gVGNsCi0tIFRrCi0tIHdpc2gKLS0gR2l0ayAobmVlZGVkIGZvciBicm93c2luZyBoaXN0b3J5KQotLSBtc2dmbXQKK01hbnkgR2l0IG9ubGluZSByZXNvdXJjZXMgYXJlIGFjY2Vzc2libGUgZnJvbSA8aHR0cHM6Ly9naXQtc2NtLmNvbS8+CitpbmNsdWRpbmcgZnVsbCBkb2N1bWVudGF0aW9uIGFuZCBHaXQgcmVsYXRlZCB0b29scy4KIAotTW9zdCBvZiBHaXQgR1VJIGlzIHdyaXR0ZW4gaW4gVGNsLCBzbyB0aGVyZSBpcyBubyBjb21waWxhdGlvbiBpbnZvbHZlZC4gU3RpbGwsCi1zb21lIHRoaW5ncyBkbyBuZWVkIHRvIGJlIGRvbmUgKG1vc3RseSBzb21lIHN1YnN0aXR1dGlvbnMpLCBzbyB5b3UgZG8gbmVlZCB0bwotImJ1aWxkIiBpdC4KK1NlZSBbRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHRdW10gdG8gZ2V0IHN0YXJ0ZWQsIHRoZW4gc2VlCitbRG9jdW1lbnRhdGlvbi9naXRldmVyeWRheS50eHRdW10gZm9yIGEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzLCBhbmQKK2BEb2N1bWVudGF0aW9uL2dpdC08Y29tbWFuZG5hbWU+LnR4dGAgZm9yIGRvY3VtZW50YXRpb24gb2YgZWFjaCBjb21tYW5kLgorSWYgZ2l0IGhhcyBiZWVuIGNvcnJlY3RseSBpbnN0YWxsZWQsIHRoZW4gdGhlIHR1dG9yaWFsIGNhbiBhbHNvIGJlCityZWFkIHdpdGggYG1hbiBnaXR0dXRvcmlhbGAgb3IgYGdpdCBoZWxwIHR1dG9yaWFsYCwgYW5kIHRoZQorZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGNvbW1hbmQgd2l0aCBgbWFuIGdpdC08Y29tbWFuZG5hbWU+YCBvciBgZ2l0IGhlbHAKKzxjb21tYW5kbmFtZT5gLgogCi1Zb3UgY2FuIGJ1aWxkIEdpdCBHVUkgdXNpbmc6CitDVlMgdXNlcnMgbWF5IGFsc28gd2FudCB0byByZWFkIFtEb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0XVtdCisoYG1hbiBnaXRjdnMtbWlncmF0aW9uYCBvciBgZ2l0IGhlbHAgY3ZzLW1pZ3JhdGlvbmAgaWYgZ2l0IGlzCitpbnN0YWxsZWQpLgogCi1gYGAKLW1ha2UKLWBgYAorVGhlIHVzZXIgZGlzY3Vzc2lvbiBhbmQgZGV2ZWxvcG1lbnQgb2YgR2l0IHRha2UgcGxhY2Ugb24gdGhlIEdpdAorbWFpbGluZyBsaXN0IC0tIGV2ZXJ5b25lIGlzIHdlbGNvbWUgdG8gcG9zdCBidWcgcmVwb3J0cywgZmVhdHVyZQorcmVxdWVzdHMsIGNvbW1lbnRzIGFuZCBwYXRjaGVzIHRvIGdpdEB2Z2VyLmtlcm5lbC5vcmcgKHJlYWQKK1tEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzXVtdIGZvciBpbnN0cnVjdGlvbnMgb24gcGF0Y2ggc3VibWlzc2lvbikuCitUbyBzdWJzY3JpYmUgdG8gdGhlIGxpc3QsIHNlbmQgYW4gZW1haWwgd2l0aCBqdXN0ICJzdWJzY3JpYmUgZ2l0IiBpbgordGhlIGJvZHkgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZy4gVGhlIG1haWxpbmcgbGlzdCBhcmNoaXZlcyBhcmUKK2F2YWlsYWJsZSBhdCA8aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lz4sCis8aHR0cDovL21hcmMuaW5mby8/bD1naXQ+IGFuZCBvdGhlciBhcmNoaXZhbCBzaXRlcy4KIAotQW5kIHRoZW4gaW5zdGFsbCBpdCB1c2luZzoKK0lzc3VlcyB3aGljaCBhcmUgc2VjdXJpdHkgcmVsZXZhbnQgc2hvdWxkIGJlIGRpc2Nsb3NlZCBwcml2YXRlbHkgdG8KK3RoZSBHaXQgU2VjdXJpdHkgbWFpbGluZyBsaXN0IDxnaXQtc2VjdXJpdHlAZ29vZ2xlZ3JvdXBzLmNvbT4uCiAKLWBgYAotbWFrZSBpbnN0YWxsCi1gYGAKK1RoZSBtYWludGFpbmVyIGZyZXF1ZW50bHkgc2VuZHMgdGhlICJXaGF0J3MgY29va2luZyIgcmVwb3J0cyB0aGF0CitsaXN0IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB2YXJpb3VzIGRldmVsb3BtZW50IHRvcGljcyB0byB0aGUgbWFpbGluZworbGlzdC4gIFRoZSBkaXNjdXNzaW9uIGZvbGxvd2luZyB0aGVtIGdpdmUgYSBnb29kIHJlZmVyZW5jZSBmb3IKK3Byb2plY3Qgc3RhdHVzLCBkZXZlbG9wbWVudCBkaXJlY3Rpb24gYW5kIHJlbWFpbmluZyB0YXNrcy4KIAotWW91IHByb2JhYmx5IG5lZWQgdG8gaGF2ZSByb290L2FkbWluIHBlcm1pc3Npb25zIHRvIGluc3RhbGwuCitUaGUgbmFtZSAiZ2l0IiB3YXMgZ2l2ZW4gYnkgTGludXMgVG9ydmFsZHMgd2hlbiBoZSB3cm90ZSB0aGUgdmVyeQorZmlyc3QgdmVyc2lvbi4gSGUgZGVzY3JpYmVkIHRoZSB0b29sIGFzICJ0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlciIKK2FuZCB0aGUgbmFtZSBhcyAoZGVwZW5kaW5nIG9uIHlvdXIgbW9vZCk6CiAKLSMgQ29udHJpYnV0aW5nCisgLSByYW5kb20gdGhyZWUtbGV0dGVyIGNvbWJpbmF0aW9uIHRoYXQgaXMgcHJvbm91bmNlYWJsZSwgYW5kIG5vdAorICAgYWN0dWFsbHkgdXNlZCBieSBhbnkgY29tbW9uIFVOSVggY29tbWFuZC4gIFRoZSBmYWN0IHRoYXQgaXQgaXMgYQorICAgbWlzcHJvbnVuY2lhdGlvbiBvZiAiZ2V0IiBtYXkgb3IgbWF5IG5vdCBiZSByZWxldmFudC4KKyAtIHN0dXBpZC4gY29udGVtcHRpYmxlIGFuZCBkZXNwaWNhYmxlLiBzaW1wbGUuIFRha2UgeW91ciBwaWNrIGZyb20gdGhlCisgICBkaWN0aW9uYXJ5IG9mIHNsYW5nLgorIC0gImdsb2JhbCBpbmZvcm1hdGlvbiB0cmFja2VyIjogeW91J3JlIGluIGEgZ29vZCBtb29kLCBhbmQgaXQgYWN0dWFsbHkKKyAgIHdvcmtzIGZvciB5b3UuIEFuZ2VscyBzaW5nLCBhbmQgYSBsaWdodCBzdWRkZW5seSBmaWxscyB0aGUgcm9vbS4KKyAtICJnb2RkYW1uIGlkaW90aWMgdHJ1Y2tsb2FkIG9mIHNoKnQiOiB3aGVuIGl0IGJyZWFrcwogCi1UaGUgcHJvamVjdCBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBQcmF0eXVzaCBZYWRhdiBvdmVyIGF0Ci1odHRwczovL2dpdGh1Yi5jb20vcHJhdGkwMTAwL2dpdC1ndWkuIEV2ZW4gdGhvdWdoIHRoZSBwcm9qZWN0IGlzIGhvc3RlZCBhdAotR2l0SHViLCB0aGUgZGV2ZWxvcG1lbnQgZG9lcyBub3QgaGFwcGVuIG92ZXIgR2l0SHViIElzc3VlcyBhbmQgUHVsbCBSZXF1ZXN0cy4KLUluc3RlYWQsIGFuIGVtYWlsIGJhc2VkIHdvcmtmbG93IGlzIHVzZWQuIFRoZSBHaXQgbWFpbGluZyBsaXN0Ci1bZ2l0QHZnZXIua2VybmVsLm9yZ10obWFpbHRvOmdpdEB2Z2VyLmtlcm5lbC5vcmcpIGlzIHdoZXJlIHRoZSBwYXRjaGVzIGFyZQotZGlzY3Vzc2VkIGFuZCByZXZpZXdlZC4KLQotTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgR2l0IG1haWxpbmcgbGlzdCBhbmQgaW5zdHJ1Y3Rpb25zIHRvIHN1YnNjcmliZSBjYW4KLWJlIGZvdW5kIFtoZXJlXShodHRwczovL2dpdC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0dpdENvbW11bml0eSkuCi0KLSMjIFNlbmRpbmcgeW91ciBjaGFuZ2VzCi0KLVNpbmNlIHRoZSBkZXZlbG9wbWVudCBoYXBwZW5zIG92ZXIgZW1haWwsIHlvdSBuZWVkIHRvIHNlbmQgaW4geW91ciBjb21taXRzIGluCi10ZXh0IGZvcm1hdC4gQ29tbWl0cyBjYW4gYmUgY29udmVydGVkIHRvIGVtYWlscyB2aWEgdGhlIHR3byB0b29scyBwcm92aWRlZCBieQotR2l0OiBgZ2l0LXNlbmQtZW1haWxgIGFuZCBgZ2l0LWZvcm1hdC1wYXRjaGAuCi0KLVlvdSBjYW4gdXNlIGBnaXQtZm9ybWF0LXBhdGNoYCB0byBnZW5lcmF0ZSBwYXRjaGVzIGluIG1ib3ggZm9ybWF0IGZyb20geW91cgotY29tbWl0cyB0aGF0IGNhbiB0aGVuIGJlIHNlbnQgdmlhIGVtYWlsLiBMZXQncyBzYXkgeW91IGFyZSB3b3JraW5nIG9uIGEgYnJhbmNoCi1jYWxsZWQgJ2ZvbycgdGhhdCB3YXMgY3JlYXRlZCBvbiB0b3Agb2YgJ21hc3RlcicuIFlvdSBjYW4gcnVuOgotCi1gYGAKLWdpdCBmb3JtYXQtcGF0Y2ggLW8gb3V0cHV0X2RpciBtYXN0ZXIuLmZvbwotYGBgCi0KLXRvIGNvbnZlcnQgYWxsIHRoZSBleHRyYSBjb21taXRzIGluICdmb28nIGludG8gYSBzZXQgb2YgcGF0Y2hlcyBzYXZlZCBpbiB0aGUKLWZvbGRlciBgb3V0cHV0X2RpcmAuCi0KLUlmIHlvdSBhcmUgc2VuZGluZyBtdWx0aXBsZSBwYXRjaGVzLCBpdCBpcyByZWNvbW1lbmRlZCB0byBpbmNsdWRlIGEgY292ZXIKLWxldHRlci4gQSBjb3ZlciBsZXR0ZXIgaXMgYW4gZW1haWwgZXhwbGFpbmluZyBpbiBicmllZiB3aGF0IHRoZSBzZXJpZXMgaXMKLXN1cHBvc2VkIHRvIGRvLiBBIGNvdmVyIGxldHRlciB0ZW1wbGF0ZSBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHBhc3NpbmcKLWAtLWNvdmVyLWxldHRlcmAgdG8gYGdpdC1mb3JtYXQtcGF0Y2hgLgotCi1BZnRlciB5b3Ugc2VuZCB5b3VyIHBhdGNoZXMsIHlvdSBtaWdodCBnZXQgYSByZXZpZXcgc3VnZ2VzdGluZyBzb21lIGNoYW5nZXMuCi1NYWtlIHRob3NlIGNoYW5nZXMsIGFuZCByZS1zZW5kIHlvdXIgcGF0Y2goZXMpIGluIHJlcGx5IHRvIHRoZSBmaXJzdCBwYXRjaCBvZgoteW91ciBpbml0aWFsIHZlcnNpb24uIEFsc28gcGxlYXNlIG1lbnRpb24gdGhlIHZlcnNpb24gb2YgdGhlIHBhdGNoLiBUaGlzIGNhbiBiZQotZG9uZSBieSBwYXNzaW5nIGAtdiBYYCB0byBgZ2l0LWZvcm1hdC1wYXRjaGAsIHdoZXJlICdYJyBpcyB0aGUgdmVyc2lvbiBudW1iZXIKLW9mIHRoZSBwYXRjaChlcykuCi0KLSMjIyBVc2luZyBnaXQtc2VuZC1lbWFpbAotCi1Zb3UgY2FuIHVzZSBgZ2l0LXNlbmQtZW1haWxgIHRvIHNlbmQgcGF0Y2hlcyBnZW5lcmF0ZWQgdmlhIGBnaXQtZm9ybWF0LXBhdGNoYC4KLVdoaWxlIHlvdSBjYW4gZGlyZWN0bHkgc2VuZCBwYXRjaGVzIHZpYSBgZ2l0LXNlbmQtZW1haWxgLCBpdCBpcyByZWNvbW1lbmRlZAotdGhhdCB5b3UgZmlyc3QgdXNlIGBnaXQtZm9ybWF0LXBhdGNoYCB0byBnZW5lcmF0ZSB0aGUgZW1haWxzLCBhdWRpdCB0aGVtLCBhbmQKLXRoZW4gc2VuZCB0aGVtIHZpYSBgZ2l0LXNlbmQtZW1haWxgLgotCi1BIHByZXR0eSBnb29kIGd1aWRlIHRvIGNvbmZpZ3VyaW5nIGFuZCB1c2luZyBgZ2l0LXNlbmQtZW1haWxgIGNhbiBiZSBmb3VuZAotW2hlcmVdKGh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL1B1bHNlQXVkaW8vSG93VG9Vc2VHaXRTZW5kRW1haWwvKQotCi0jIyMgVXNpbmcgeW91ciBlbWFpbCBjbGllbnQKLQotSWYgeW91ciBlbWFpbCBjbGllbnQgc3VwcG9ydHMgc2VuZGluZyBtYm94IGZvcm1hdCBlbWFpbHMsIHlvdSBjYW4gdXNlCi1gZ2l0LWZvcm1hdC1wYXRjaGAgdG8gZ2V0IGFuIG1ib3ggZmlsZSBmb3IgZWFjaCBjb21taXQsIGFuZCB0aGVuIHNlbmQgdGhlbS4gSWYKLXRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGF0Y2ggaW4gdGhlIHNlcmllcywgdGhlbiBhbGwgcGF0Y2hlcyBhZnRlciB0aGUgZmlyc3QKLXBhdGNoIChvciB0aGUgY292ZXIgbGV0dGVyKSBuZWVkIHRvIGJlIHNlbnQgYXMgcmVwbGllcyB0byB0aGUgZmlyc3QuCi1gZ2l0LXNlbmQtZW1haWxgIGRvZXMgdGhpcyBieSBkZWZhdWx0LgotCi0jIyMgVXNpbmcgR2l0R2l0R2FkZ2V0Ci0KLVNpbmNlIHNvbWUgcGVvcGxlIHByZWZlciBhIEdpdEh1YiBwdWxsIHJlcXVlc3QgYmFzZWQgd29ya2Zsb3csIHRoZXkgY2FuIHVzZQotW0dpdEdpdEdhZGdldF0oaHR0cHM6Ly9naXRnaXRnYWRnZXQuZ2l0aHViLmlvLykgdG8gc2VuZCBpbiBwYXRjaGVzLiBUaGUgdG9vbAotd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3Igc2VuZGluZyBwYXRjaGVzIHRvIHRoZSBHaXQgcHJvamVjdCwgYnV0IGl0IG5vdyBhbHNvCi1zdXBwb3J0cyBzZW5kaW5nIHBhdGNoZXMgZm9yIGdpdC1ndWkuCi0KLUluc3RydWN0aW9ucyBmb3IgdXNpbmcgR2l0R2l0R2FkZ2V0IHRvIHNlbmQgZ2l0LWd1aSBwYXRjaGVzLCBjb3VydGVzeSBvZgotSm9oYW5uZXMgU2NoaW5kZWxpbjoKLQotSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBhIGZvcmsgb2YgdGhlIFtnaXQvZ2l0XShodHRwczovL2dpdGh1Yi5jb20vZ2l0L2dpdCkKLXJlcG8sIHlvdSBuZWVkIHRvIG1ha2Ugb25lLiBUaGVuIGNsb25lIHlvdXIgZm9yazoKLQotYGBgCi1naXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tLzx5b3VyLXVzZXJuYW1lPi9naXQKLWBgYAotCi1UaGVuIGFkZCBHaXRHaXRHYWRnZXQgYXMgYSByZW1vdGU6Ci0KLWBgYAotZ2l0IHJlbW90ZSBhZGQgZ2l0Z2l0Z2FkZ2V0IGh0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0Ci1gYGAKLQotVGhlbiBmZXRjaCB0aGUgZ2l0LWd1aSBicmFuY2g6Ci0KLWBgYAotZ2l0IGZldGNoIGdpdGdpdGdhZGdldCBnaXQtZ3VpL21hc3RlcgotYGBgCi0KLVRoZW4gY3JlYXRlIGEgbmV3IGJyYW5jaCBiYXNlZCBvbiBnaXQtZ3VpL21hc3RlcjoKLQotYGBgCi1naXQgY2hlY2tvdXQgLWIgPHlvdXItYnJhbmNoLW5hbWU+IGdpdC1ndWkvbWFzdGVyCi1gYGAKLQotTWFrZSB3aGF0ZXZlciBjb21taXRzIHlvdSBuZWVkIHRvLCBwdXNoIHRoZW0gdG8geW91ciBmb3JrLCBhbmQgdGhlbiBoZWFkIG92ZXIKLXRvIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0L3B1bGxzIGFuZCBvcGVuIGEgUHVsbCBSZXF1ZXN0IHRhcmdldGluZwotZ2l0LWd1aS9tYXN0ZXIuCi0KLUdpdEdpdEdhZGdldCB3aWxsIHdlbGNvbWUgeW91IHdpdGggYSAoaG9wZWZ1bGx5KSBoZWxwZnVsIG1lc3NhZ2UuCi0KLSMjIFNpZ25pbmcgb2ZmCi0KLVlvdSBuZWVkIHRvIHNpZ24gb2ZmIHlvdXIgY29tbWl0cyBiZWZvcmUgc2VuZGluZyB0aGVtIHRvIHRoZSBsaXN0LiBZb3UgY2FuIGRvCi10aGF0IGJ5IHBhc3NpbmcgdGhlIGAtc2Agb3B0aW9uIHRvIGBnaXQtY29tbWl0YC4gWW91IGNhbiBhbHNvIHVzZSB0aGUgIlNpZ24KLU9mZiIgb3B0aW9uIGluIEdpdCBHVUkuCi0KLUEgc2lnbi1vZmYgaXMgYSBzaW1wbGUgJ1NpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIFw8YXV0aG9yQGV4YW1wbGUuY29tXD4nIGxpbmUgYXQKLXRoZSBlbmQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLCBhZnRlciB5b3VyIGV4cGxhbmF0aW9uIG9mIHRoZSBjb21taXQuCi0KLUEgc2lnbi1vZmYgbWVhbnMgdGhhdCB5b3UgYXJlIGxlZ2FsbHkgYWxsb3dlZCB0byBzZW5kIHRoZSBjb2RlLCBhbmQgaXQgc2VydmVzCi1hcyBhIGNlcnRpZmljYXRlIG9mIG9yaWdpbi4gTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgYXQKLVtkZXZlbG9wZXJjZXJ0aWZpY2F0ZS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyY2VydGlmaWNhdGUub3JnLykuCi0KLSMjIFJlc3BvbmRpbmcgdG8gcmV2aWV3IGNvbW1lbnRzCi0KLUl0IGlzIHF1aXRlIGxpa2VseSB5b3VyIHBhdGNoZXMgd2lsbCBnZXQgcmV2aWV3IGNvbW1lbnRzLiBUaG9zZSBjb21tZW50cyBhcmUKLXNlbnQgb24gdGhlIEdpdCBtYWlsaW5nIGxpc3QgYXMgcmVwbGllcyB0byB5b3VyIHBhdGNoLCBhbmQgeW91IHdpbGwgdXN1YWxseSBiZQotQ2MnZWQgaW4gdGhvc2UgcmVwbGllcy4KLQotWW91IGFyZSBleHBlY3RlZCB0byByZXNwb25kIGJ5IGVpdGhlciBleHBsYWluaW5nIHlvdXIgY29kZSBmdXJ0aGVyIHRvIGNvbnZpbmNlCi10aGUgcmV2aWV3ZXIgd2hhdCB5b3UgYXJlIGRvaW5nIGlzIGNvcnJlY3QsIG9yIGFja25vd2xlZGdlIHRoZSBjb21tZW50cyBhbmQKLXJlLXNlbmQgdGhlIHBhdGNoZXMgd2l0aCB0aG9zZSBjb21tZW50cyBhZGRyZXNzZWQuCi0KLVNvbWUgdGlwcyBmb3IgdGhvc2Ugbm90IGZhbWlsaWFyIHdpdGggY29tbXVuaWNhdGlvbiBvbiBhIG1haWxpbmcgbGlzdDoKLQotLSBVc2Ugb25seSBwbGFpbiB0ZXh0IGVtYWlscy4gTm8gSFRNTCBhdCBhbGwuCi0tIFdyYXAgbGluZXMgYXQgYXJvdW5kIDc1IGNoYXJhY3RlcnMuCi0tIERvIG5vdCBzZW5kIGF0dGFjaG1lbnRzLiBJZiB5b3UgZG8gbmVlZCB0byBzZW5kIHNvbWUgZmlsZXMsIGNvbnNpZGVyIHVzaW5nIGEKLSAgaG9zdGluZyBzZXJ2aWNlLCBhbmQgcGFzdGUgdGhlIGxpbmsgaW4geW91ciBlbWFpbC4KLS0gRG8gbm90IFt0b3AgcG9zdF0oaHR0cDovL3d3dy5pZGFsbGVuLmNvbS90b3Bwb3N0aW5nLmh0bWwpLgotLSBBbHdheXMgInJlcGx5IGFsbCIuIEtlZXAgYWxsIGNvcnJlc3BvbmRlbnRzIGFuZCB0aGUgbGlzdCBpbiBDYy4gSWYgeW91IHJlcGx5Ci0gIGRpcmVjdGx5IHRvIGEgcmV2aWV3ZXIsIGFuZCBub3QgQ2MgdGhlIGxpc3QsIG90aGVyIHBlb3BsZSB3b3VsZCBub3QgYmUgYWJsZQotICB0byBjaGltZSBpbi4KK1tJTlNUQUxMXTogSU5TVEFMTAorW0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0XTogRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQKK1tEb2N1bWVudGF0aW9uL2dpdGV2ZXJ5ZGF5LnR4dF06IERvY3VtZW50YXRpb24vZ2l0ZXZlcnlkYXkudHh0CitbRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dF06IERvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQKK1tEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzXTogRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpkaWZmIC0tZ2l0IGEvUmVsTm90ZXMgYi9SZWxOb3RlcwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4zNzAyNjlkCi0tLSAvZGV2L251bGwKKysrIGIvUmVsTm90ZXMKQEAgLTAsMCArMSBAQAorRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI2LjAudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYWJzcGF0aC5jIGIvYWJzcGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NTc5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hYnNwYXRoLmMKQEAgLTAsMCArMSwyNzAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCisvKgorICogRG8gbm90IHVzZSB0aGlzIGZvciBpbnNwZWN0aW5nICp0cmFja2VkKiBjb250ZW50LiAgV2hlbiBwYXRoIGlzIGEKKyAqIHN5bWxpbmsgdG8gYSBkaXJlY3RvcnksIHdlIGRvIG5vdCB3YW50IHRvIHNheSBpdCBpcyBhIGRpcmVjdG9yeSB3aGVuCisgKiBkZWFsaW5nIHdpdGggdHJhY2tlZCBjb250ZW50IGluIHRoZSB3b3JraW5nIHRyZWUuCisgKi8KK2ludCBpc19kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlyZXR1cm4gKCFzdGF0KHBhdGgsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKSk7Cit9CisKKy8qIHJlbW92ZXMgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgZnJvbSAncGF0aCcgZXhjZXB0IGlmICdwYXRoJyBpcyByb290ICovCitzdGF0aWMgdm9pZCBzdHJpcF9sYXN0X2NvbXBvbmVudChzdHJ1Y3Qgc3RyYnVmICpwYXRoKQoreworCXNpemVfdCBvZmZzZXQgPSBvZmZzZXRfMXN0X2NvbXBvbmVudChwYXRoLT5idWYpOworCXNpemVfdCBsZW4gPSBwYXRoLT5sZW47CisKKwkvKiBGaW5kIHN0YXJ0IG9mIHRoZSBsYXN0IGNvbXBvbmVudCAqLworCXdoaWxlIChvZmZzZXQgPCBsZW4gJiYgIWlzX2Rpcl9zZXAocGF0aC0+YnVmW2xlbiAtIDFdKSkKKwkJbGVuLS07CisJLyogU2tpcCBzZXF1ZW5jZXMgb2YgbXVsdGlwbGUgcGF0aC1zZXBhcmF0b3JzICovCisJd2hpbGUgKG9mZnNldCA8IGxlbiAmJiBpc19kaXJfc2VwKHBhdGgtPmJ1ZltsZW4gLSAxXSkpCisJCWxlbi0tOworCisJc3RyYnVmX3NldGxlbihwYXRoLCBsZW4pOworfQorCisvKiBnZXQgKGFuZCByZW1vdmUpIHRoZSBuZXh0IGNvbXBvbmVudCBpbiAncmVtYWluaW5nJyBhbmQgcGxhY2UgaXQgaW4gJ25leHQnICovCitzdGF0aWMgdm9pZCBnZXRfbmV4dF9jb21wb25lbnQoc3RydWN0IHN0cmJ1ZiAqbmV4dCwgc3RydWN0IHN0cmJ1ZiAqcmVtYWluaW5nKQoreworCWNoYXIgKnN0YXJ0ID0gTlVMTDsKKwljaGFyICplbmQgPSBOVUxMOworCisJc3RyYnVmX3Jlc2V0KG5leHQpOworCisJLyogbG9vayBmb3IgdGhlIG5leHQgY29tcG9uZW50ICovCisJLyogU2tpcCBzZXF1ZW5jZXMgb2YgbXVsdGlwbGUgcGF0aC1zZXBhcmF0b3JzICovCisJZm9yIChzdGFydCA9IHJlbWFpbmluZy0+YnVmOyBpc19kaXJfc2VwKCpzdGFydCk7IHN0YXJ0KyspCisJCTsgLyogbm90aGluZyAqLworCS8qIEZpbmQgZW5kIG9mIHRoZSBwYXRoIGNvbXBvbmVudCAqLworCWZvciAoZW5kID0gc3RhcnQ7ICplbmQgJiYgIWlzX2Rpcl9zZXAoKmVuZCk7IGVuZCsrKQorCQk7IC8qIG5vdGhpbmcgKi8KKworCXN0cmJ1Zl9hZGQobmV4dCwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKwkvKiByZW1vdmUgdGhlIGNvbXBvbmVudCBmcm9tICdyZW1haW5pbmcnICovCisJc3RyYnVmX3JlbW92ZShyZW1haW5pbmcsIDAsIGVuZCAtIHJlbWFpbmluZy0+YnVmKTsKK30KKworLyogY29waWVzIHJvb3QgcGFydCBmcm9tIHJlbWFpbmluZyB0byByZXNvbHZlZCwgY2Fub25pY2FsaXppbmcgaXQgb24gdGhlIHdheSAqLworc3RhdGljIHZvaWQgZ2V0X3Jvb3RfcGFydChzdHJ1Y3Qgc3RyYnVmICpyZXNvbHZlZCwgc3RydWN0IHN0cmJ1ZiAqcmVtYWluaW5nKQoreworCWludCBvZmZzZXQgPSBvZmZzZXRfMXN0X2NvbXBvbmVudChyZW1haW5pbmctPmJ1Zik7CisKKwlzdHJidWZfcmVzZXQocmVzb2x2ZWQpOworCXN0cmJ1Zl9hZGQocmVzb2x2ZWQsIHJlbWFpbmluZy0+YnVmLCBvZmZzZXQpOworI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCWNvbnZlcnRfc2xhc2hlcyhyZXNvbHZlZC0+YnVmKTsKKyNlbmRpZgorCXN0cmJ1Zl9yZW1vdmUocmVtYWluaW5nLCAwLCBvZmZzZXQpOworfQorCisvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiBzeW1ib2xpYyBsaW5rcy4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2guICovCisjaWZuZGVmIE1BWFNZTUxJTktTCisjZGVmaW5lIE1BWFNZTUxJTktTIDMyCisjZW5kaWYKKworLyoKKyAqIFJldHVybiB0aGUgcmVhbCBwYXRoIChpLmUuLCBhYnNvbHV0ZSBwYXRoLCB3aXRoIHN5bWxpbmtzIHJlc29sdmVkCisgKiBhbmQgZXh0cmEgc2xhc2hlcyByZW1vdmVkKSBlcXVpdmFsZW50IHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4gIChJZgorICogeW91IHdhbnQgYW4gYWJzb2x1dGUgcGF0aCBidXQgZG9uJ3QgbWluZCBsaW5rcywgdXNlCisgKiBhYnNvbHV0ZV9wYXRoKCkuKSAgUGxhY2VzIHRoZSByZXNvbHZlZCByZWFscGF0aCBpbiB0aGUgcHJvdmlkZWQgc3RyYnVmLgorICoKKyAqIFRoZSBkaXJlY3RvcnkgcGFydCBvZiBwYXRoIChpLmUuLCBldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0CisgKiBkaXJfc2VwKSBtdXN0IGRlbm90ZSBhIHZhbGlkLCBleGlzdGluZyBkaXJlY3RvcnksIGJ1dCB0aGUgbGFzdAorICogY29tcG9uZW50IG5lZWQgbm90IGV4aXN0LiAgSWYgZGllX29uX2Vycm9yIGlzIHNldCwgdGhlbiBkaWUgd2l0aCBhbgorICogaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBpcyBhIHByb2JsZW0uICBPdGhlcndpc2UsIHJldHVybgorICogTlVMTCBvbiBlcnJvcnMgKHdpdGhvdXQgZ2VuZXJhdGluZyBhbnkgb3V0cHV0KS4KKyAqLworY2hhciAqc3RyYnVmX3JlYWxwYXRoKHN0cnVjdCBzdHJidWYgKnJlc29sdmVkLCBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgICBpbnQgZGllX29uX2Vycm9yKQoreworCXN0cnVjdCBzdHJidWYgcmVtYWluaW5nID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBuZXh0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzeW1saW5rID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmV0dmFsID0gTlVMTDsKKwlpbnQgbnVtX3N5bWxpbmtzID0gMDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghKnBhdGgpIHsKKwkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCWRpZSgiVGhlIGVtcHR5IHN0cmluZyBpcyBub3QgYSB2YWxpZCBwYXRoIik7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnJlbWFpbmluZywgcGF0aCk7CisJZ2V0X3Jvb3RfcGFydChyZXNvbHZlZCwgJnJlbWFpbmluZyk7CisKKwlpZiAoIXJlc29sdmVkLT5sZW4pIHsKKwkJLyogcmVsYXRpdmUgcGF0aDsgY2FuIHVzZSBDV0QgYXMgdGhlIGluaXRpYWwgcmVzb2x2ZWQgcGF0aCAqLworCQlpZiAoc3RyYnVmX2dldGN3ZChyZXNvbHZlZCkpIHsKKwkJCWlmIChkaWVfb25fZXJyb3IpCisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCWVsc2UKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJfQorCX0KKworCS8qIEl0ZXJhdGUgb3ZlciB0aGUgcmVtYWluaW5nIHBhdGggY29tcG9uZW50cyAqLworCXdoaWxlIChyZW1haW5pbmcubGVuID4gMCkgeworCQlnZXRfbmV4dF9jb21wb25lbnQoJm5leHQsICZyZW1haW5pbmcpOworCisJCWlmIChuZXh0LmxlbiA9PSAwKSB7CisJCQljb250aW51ZTsgLyogZW1wdHkgY29tcG9uZW50ICovCisJCX0gZWxzZSBpZiAobmV4dC5sZW4gPT0gMSAmJiAhc3RyY21wKG5leHQuYnVmLCAiLiIpKSB7CisJCQljb250aW51ZTsgLyogJy4nIGNvbXBvbmVudCAqLworCQl9IGVsc2UgaWYgKG5leHQubGVuID09IDIgJiYgIXN0cmNtcChuZXh0LmJ1ZiwgIi4uIikpIHsKKwkJCS8qICcuLicgY29tcG9uZW50OyBzdHJpcCB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudCAqLworCQkJc3RyaXBfbGFzdF9jb21wb25lbnQocmVzb2x2ZWQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBhcHBlbmQgdGhlIG5leHQgY29tcG9uZW50IGFuZCByZXNvbHZlIHJlc3VsdGFudCBwYXRoICovCisJCWlmICghaXNfZGlyX3NlcChyZXNvbHZlZC0+YnVmW3Jlc29sdmVkLT5sZW4gLSAxXSkpCisJCQlzdHJidWZfYWRkY2gocmVzb2x2ZWQsICcvJyk7CisJCXN0cmJ1Zl9hZGRidWYocmVzb2x2ZWQsICZuZXh0KTsKKworCQlpZiAobHN0YXQocmVzb2x2ZWQtPmJ1ZiwgJnN0KSkgeworCQkJLyogZXJyb3Igb3V0IHVubGVzcyB0aGlzIHdhcyB0aGUgbGFzdCBjb21wb25lbnQgKi8KKwkJCWlmIChlcnJubyAhPSBFTk9FTlQgfHwgcmVtYWluaW5nLmxlbikgeworCQkJCWlmIChkaWVfb25fZXJyb3IpCisJCQkJCWRpZV9lcnJubygiSW52YWxpZCBwYXRoICclcyciLAorCQkJCQkJICByZXNvbHZlZC0+YnVmKTsKKwkJCQllbHNlCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJfQorCQl9IGVsc2UgaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKwkJCXNzaXplX3QgbGVuOworCQkJc3RyYnVmX3Jlc2V0KCZzeW1saW5rKTsKKworCQkJaWYgKG51bV9zeW1saW5rcysrID4gTUFYU1lNTElOS1MpIHsKKwkJCQllcnJubyA9IEVMT09QOworCisJCQkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCQkJZGllKCJNb3JlIHRoYW4gJWQgbmVzdGVkIHN5bWxpbmtzICIKKwkJCQkJICAgICJvbiBwYXRoICclcyciLCBNQVhTWU1MSU5LUywgcGF0aCk7CisJCQkJZWxzZQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCX0KKworCQkJbGVuID0gc3RyYnVmX3JlYWRsaW5rKCZzeW1saW5rLCByZXNvbHZlZC0+YnVmLAorCQkJCQkgICAgICBzdC5zdF9zaXplKTsKKwkJCWlmIChsZW4gPCAwKSB7CisJCQkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCQkJZGllX2Vycm5vKCJJbnZhbGlkIHN5bWxpbmsgJyVzJyIsCisJCQkJCQkgIHJlc29sdmVkLT5idWYpOworCQkJCWVsc2UKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQl9CisKKwkJCWlmIChpc19hYnNvbHV0ZV9wYXRoKHN5bWxpbmsuYnVmKSkgeworCQkJCS8qIGFic29sdXRlIHN5bWxpbms7IHNldCByZXNvbHZlZCB0byByb290ICovCisJCQkJZ2V0X3Jvb3RfcGFydChyZXNvbHZlZCwgJnN5bWxpbmspOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIHJlbGF0aXZlIHN5bWxpbmsKKwkJCQkgKiBzdHJpcCBvZmYgdGhlIGxhc3QgY29tcG9uZW50IHNpbmNlIGl0IHdpbGwKKwkJCQkgKiBiZSByZXBsYWNlZCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgc3ltbGluaworCQkJCSAqLworCQkJCXN0cmlwX2xhc3RfY29tcG9uZW50KHJlc29sdmVkKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIGlmIHRoZXJlIGFyZSBzdGlsbCByZW1haW5pbmcgY29tcG9uZW50cyB0byByZXNvbHZlCisJCQkgKiB0aGVuIGFwcGVuZCB0aGVtIHRvIHN5bWxpbmsKKwkJCSAqLworCQkJaWYgKHJlbWFpbmluZy5sZW4pIHsKKwkJCQlzdHJidWZfYWRkY2goJnN5bWxpbmssICcvJyk7CisJCQkJc3RyYnVmX2FkZGJ1Zigmc3ltbGluaywgJnJlbWFpbmluZyk7CisJCQl9CisKKwkJCS8qCisJCQkgKiB1c2UgdGhlIHN5bWxpbmsgYXMgdGhlIHJlbWFpbmluZyBjb21wb25lbnRzIHRoYXQKKwkJCSAqIG5lZWQgdG8gYmUgcmVzb2x2ZWQKKwkJCSAqLworCQkJc3RyYnVmX3N3YXAoJnN5bWxpbmssICZyZW1haW5pbmcpOworCQl9CisJfQorCisJcmV0dmFsID0gcmVzb2x2ZWQtPmJ1ZjsKKworZXJyb3Jfb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZyZW1haW5pbmcpOworCXN0cmJ1Zl9yZWxlYXNlKCZuZXh0KTsKKwlzdHJidWZfcmVsZWFzZSgmc3ltbGluayk7CisKKwlpZiAoIXJldHZhbCkKKwkJc3RyYnVmX3Jlc2V0KHJlc29sdmVkKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBSZXNvbHZlIGBwYXRoYCBpbnRvIGFuIGFic29sdXRlLCBjbGVhbmVkLXVwIHBhdGguIFRoZSByZXR1cm4gdmFsdWUKKyAqIGNvbWVzIGZyb20gYSBzaGFyZWQgYnVmZmVyLgorICovCitjb25zdCBjaGFyICpyZWFsX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiByZWFscGF0aCA9IFNUUkJVRl9JTklUOworCXJldHVybiBzdHJidWZfcmVhbHBhdGgoJnJlYWxwYXRoLCBwYXRoLCAxKTsKK30KKworY29uc3QgY2hhciAqcmVhbF9wYXRoX2lmX3ZhbGlkKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgcmVhbHBhdGggPSBTVFJCVUZfSU5JVDsKKwlyZXR1cm4gc3RyYnVmX3JlYWxwYXRoKCZyZWFscGF0aCwgcGF0aCwgMCk7Cit9CisKK2NoYXIgKnJlYWxfcGF0aGR1cChjb25zdCBjaGFyICpwYXRoLCBpbnQgZGllX29uX2Vycm9yKQoreworCXN0cnVjdCBzdHJidWYgcmVhbHBhdGggPSBTVFJCVUZfSU5JVDsKKwljaGFyICpyZXR2YWwgPSBOVUxMOworCisJaWYgKHN0cmJ1Zl9yZWFscGF0aCgmcmVhbHBhdGgsIHBhdGgsIGRpZV9vbl9lcnJvcikpCisJCXJldHZhbCA9IHN0cmJ1Zl9kZXRhY2goJnJlYWxwYXRoLCBOVUxMKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWFscGF0aCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVXNlIHRoaXMgdG8gZ2V0IGFuIGFic29sdXRlIHBhdGggZnJvbSBhIHJlbGF0aXZlIG9uZS4gSWYgeW91IHdhbnQKKyAqIHRvIHJlc29sdmUgbGlua3MsIHlvdSBzaG91bGQgdXNlIHJlYWxfcGF0aC4KKyAqLworY29uc3QgY2hhciAqYWJzb2x1dGVfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKCZzYiwgcGF0aCk7CisJcmV0dXJuIHNiLmJ1ZjsKK30KKworY2hhciAqYWJzb2x1dGVfcGF0aGR1cChjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJnNiLCBwYXRoKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworfQorCitjaGFyICpwcmVmaXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcGZ4LCBjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHBmeF9sZW4gPSBwZnggPyBzdHJsZW4ocGZ4KSA6IDA7CisKKwlpZiAoIXBmeF9sZW4pCisJCTsgLyogbm90aGluZyB0byBwcmVmaXggKi8KKwllbHNlIGlmIChpc19hYnNvbHV0ZV9wYXRoKGFyZykpCisJCXBmeF9sZW4gPSAwOworCWVsc2UKKwkJc3RyYnVmX2FkZCgmcGF0aCwgcGZ4LCBwZnhfbGVuKTsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGFyZyk7CisjaWZkZWYgR0lUX1dJTkRPV1NfTkFUSVZFCisJY29udmVydF9zbGFzaGVzKHBhdGguYnVmICsgcGZ4X2xlbik7CisjZW5kaWYKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmcGF0aCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTFiYzdlCi0tLSAvZGV2L251bGwKKysrIGIvYWNsb2NhbC5tNApAQCAtMCwwICsxLDQwIEBACitkbmwgQ2hlY2sgZm9yIHNvY2tsZW5fdDogaGlzdG9yaWNhbGx5IG9uIEJTRCBpdCBpcyBhbiBpbnQsIGFuZCBpbgorZG5sIFBPU0lYIDFnIGl0IGlzIGEgdHlwZSBvZiBpdHMgb3duLCBidXQgc29tZSBwbGF0Zm9ybXMgdXNlIGRpZmZlcmVudAorZG5sIHR5cGVzIGZvciB0aGUgYXJndW1lbnQgdG8gZ2V0c29ja29wdCwgZ2V0cGVlcm5hbWUsIGV0Yy4gIFNvIHdlCitkbmwgaGF2ZSB0byB0ZXN0IHRvIGZpbmQgc29tZXRoaW5nIHRoYXQgd2lsbCB3b3JrLgorQUNfREVGVU4oW1RZUEVfU09DS0xFTl9UXSwKK1sKKyAgIEFDX0NIRUNLX1RZUEUoW3NvY2tsZW5fdF0sICxbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3QgZXF1aXZhbGVudF0pCisgICAgICBBQ19DQUNIRV9WQUwoW2dpdF9jdl9zb2NrbGVuX3RfZXF1aXZdLAorICAgICAgWworICAgICAgICAgIyBTeXN0ZW1zIGhhdmUgZWl0aGVyICJzdHJ1Y3Qgc29ja2FkZHIgKiIgb3IKKyAgICAgICAgICMgInZvaWQgKiIgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBnZXRwZWVybmFtZQorICAgICAgICAgZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdj0KKyAgICAgICAgIGZvciBhcmcyIGluICJzdHJ1Y3Qgc29ja2FkZHIiIHZvaWQ7IGRvCisgICAgICAgICAgICBmb3IgdCBpbiBpbnQgc2l6ZV90IHVuc2lnbmVkIGxvbmcgInVuc2lnbmVkIGxvbmciOyBkbworICAgICAgICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisgICAgICAgICAgICAgICAgICBpbnQgZ2V0cGVlcm5hbWUgKGludCwgJGFyZzIgKiwgJHQgKik7CisgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgICR0IGxlbjsKKyAgICAgICAgICAgICAgICAgIGdldHBlZXJuYW1lKDAsMCwmbGVuKTsKKyAgICAgICAgICAgICAgIF0pXSxbCisgICAgICAgICAgICAgICAgICBnaXRfY3Zfc29ja2xlbl90X2VxdWl2PSIkdCIKKyAgICAgICAgICAgICAgICAgIGJyZWFrIDIKKyAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICBkb25lCisgICAgICAgICBkb25lCisKKyAgICAgICAgIGlmIHRlc3QgIngkZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdiIgPSB4OyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90XSkKKyAgICAgICAgIGZpCisgICAgICBdKQorICAgICAgQUNfTVNHX1JFU1VMVCgkZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdikKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChzb2NrbGVuX3QsICRnaXRfY3Zfc29ja2xlbl90X2VxdWl2LAorCQkJW3R5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCBpZiBub3QgZGVmaW5lZF0pXSwKKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitdKQpkaWZmIC0tZ2l0IGEvYWRkLWludGVyYWN0aXZlLmMgYi9hZGQtaW50ZXJhY3RpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTliZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYWRkLWludGVyYWN0aXZlLmMKQEAgLTAsMCArMSwxMTc2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhZGQtaW50ZXJhY3RpdmUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKK3N0YXRpYyB2b2lkIGluaXRfY29sb3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywKKwkJICAgICAgIGNvbnN0IGNoYXIgKnNsb3RfbmFtZSwgY2hhciAqZHN0LAorCQkgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF9jb2xvcikKK3sKKwljaGFyICprZXkgPSB4c3RyZm10KCJjb2xvci5pbnRlcmFjdGl2ZS4lcyIsIHNsb3RfbmFtZSk7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwlpZiAoIXMtPnVzZV9jb2xvcikKKwkJZHN0WzBdID0gJ1wwJzsKKwllbHNlIGlmIChyZXBvX2NvbmZpZ19nZXRfdmFsdWUociwga2V5LCAmdmFsdWUpIHx8CisJCSBjb2xvcl9wYXJzZSh2YWx1ZSwgZHN0KSkKKwkJc3RybGNweShkc3QsIGRlZmF1bHRfY29sb3IsIENPTE9SX01BWExFTik7CisKKwlmcmVlKGtleSk7Cit9CisKK3ZvaWQgaW5pdF9hZGRfaV9zdGF0ZShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJcy0+ciA9IHI7CisKKwlpZiAocmVwb19jb25maWdfZ2V0X3ZhbHVlKHIsICJjb2xvci5pbnRlcmFjdGl2ZSIsICZ2YWx1ZSkpCisJCXMtPnVzZV9jb2xvciA9IC0xOworCWVsc2UKKwkJcy0+dXNlX2NvbG9yID0KKwkJCWdpdF9jb25maWdfY29sb3Jib29sKCJjb2xvci5pbnRlcmFjdGl2ZSIsIHZhbHVlKTsKKwlzLT51c2VfY29sb3IgPSB3YW50X2NvbG9yKHMtPnVzZV9jb2xvcik7CisKKwlpbml0X2NvbG9yKHIsIHMsICJoZWFkZXIiLCBzLT5oZWFkZXJfY29sb3IsIEdJVF9DT0xPUl9CT0xEKTsKKwlpbml0X2NvbG9yKHIsIHMsICJoZWxwIiwgcy0+aGVscF9jb2xvciwgR0lUX0NPTE9SX0JPTERfUkVEKTsKKwlpbml0X2NvbG9yKHIsIHMsICJwcm9tcHQiLCBzLT5wcm9tcHRfY29sb3IsIEdJVF9DT0xPUl9CT0xEX0JMVUUpOworCWluaXRfY29sb3IociwgcywgImVycm9yIiwgcy0+ZXJyb3JfY29sb3IsIEdJVF9DT0xPUl9CT0xEX1JFRCk7CisJaW5pdF9jb2xvcihyLCBzLCAicmVzZXQiLCBzLT5yZXNldF9jb2xvciwgR0lUX0NPTE9SX1JFU0VUKTsKKwlpbml0X2NvbG9yKHIsIHMsICJmcmFnaW5mbyIsIHMtPmZyYWdpbmZvX2NvbG9yLAorCQkgICBkaWZmX2dldF9jb2xvcihzLT51c2VfY29sb3IsIERJRkZfRlJBR0lORk8pKTsKKwlpbml0X2NvbG9yKHIsIHMsICJjb250ZXh0Iiwgcy0+Y29udGV4dF9jb2xvciwKKwkJZGlmZl9nZXRfY29sb3Iocy0+dXNlX2NvbG9yLCBESUZGX0NPTlRFWFQpKTsKKwlpbml0X2NvbG9yKHIsIHMsICJvbGQiLCBzLT5maWxlX29sZF9jb2xvciwKKwkJZGlmZl9nZXRfY29sb3Iocy0+dXNlX2NvbG9yLCBESUZGX0ZJTEVfT0xEKSk7CisJaW5pdF9jb2xvcihyLCBzLCAibmV3Iiwgcy0+ZmlsZV9uZXdfY29sb3IsCisJCWRpZmZfZ2V0X2NvbG9yKHMtPnVzZV9jb2xvciwgRElGRl9GSUxFX05FVykpOworCisJRlJFRV9BTkRfTlVMTChzLT5pbnRlcmFjdGl2ZV9kaWZmX2ZpbHRlcik7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJpbnRlcmFjdGl2ZS5kaWZmZmlsdGVyIiwKKwkJCSAgICAgICZzLT5pbnRlcmFjdGl2ZV9kaWZmX2ZpbHRlcik7CisKKwlGUkVFX0FORF9OVUxMKHMtPmludGVyYWN0aXZlX2RpZmZfYWxnb3JpdGhtKTsKKwlnaXRfY29uZmlnX2dldF9zdHJpbmcoImRpZmYuYWxnb3JpdGhtIiwKKwkJCSAgICAgICZzLT5pbnRlcmFjdGl2ZV9kaWZmX2FsZ29yaXRobSk7CisKKwlnaXRfY29uZmlnX2dldF9ib29sKCJpbnRlcmFjdGl2ZS5zaW5nbGVrZXkiLCAmcy0+dXNlX3NpbmdsZV9rZXkpOworfQorCit2b2lkIGNsZWFyX2FkZF9pX3N0YXRlKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcykKK3sKKwlGUkVFX0FORF9OVUxMKHMtPmludGVyYWN0aXZlX2RpZmZfZmlsdGVyKTsKKwlGUkVFX0FORF9OVUxMKHMtPmludGVyYWN0aXZlX2RpZmZfYWxnb3JpdGhtKTsKKwltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7CisJcy0+dXNlX2NvbG9yID0gLTE7Cit9CisKKy8qCisgKiBBICJwcmVmaXggaXRlbSBsaXN0IiBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBhcmUgaWRlbnRpZmllZCBieSBhIHN0cmluZywgYW5kCisgKiBhIHVuaXF1ZSBwcmVmaXggKGlmIGFueSkgaXMgZGV0ZXJtaW5lZCBmb3IgZWFjaCBpdGVtLgorICoKKyAqIEl0IGlzIGltcGxlbWVudGVkIGluIHRoZSBmb3JtIG9mIGEgcGFpciBvZiBgc3RyaW5nX2xpc3RgcywgdGhlIGZpcnN0IG9uZQorICogZHVwbGljYXRpbmcgdGhlIHN0cmluZ3MsIHdpdGggdGhlIGB1dGlsYCBmaWVsZCBwb2ludGluZyBhdCBhIHN0cnVjdHVyZSB3aG9zZQorICogZmlyc3QgZmllbGQgbXVzdCBiZSBgc2l6ZV90IHByZWZpeF9sZW5ndGhgLgorICoKKyAqIFRoYXQgYHByZWZpeF9sZW5ndGhgIGZpZWxkIHdpbGwgYmUgY29tcHV0ZWQgYnkgYGZpbmRfdW5pcXVlX3ByZWZpeGVzKClgOyBJdAorICogd2lsbCBiZSBzZXQgdG8gemVybyBpZiBubyB2YWxpZCwgdW5pcXVlIHByZWZpeCBjb3VsZCBiZSBmb3VuZC4KKyAqCisgKiBUaGUgc2Vjb25kIGBzdHJpbmdfbGlzdGAgaXMgY2FsbGVkIGBzb3J0ZWRgIGFuZCBkb2VzIF9ub3RfIGR1cGxpY2F0ZSB0aGUKKyAqIHN0cmluZ3MgYnV0IHNpbXBseSByZXVzZXMgdGhlIGZpcnN0IG9uZSdzLCB3aXRoIHRoZSBgdXRpbGAgZmllbGQgcG9pbnRpbmcgYXQKKyAqIHRoZSBgc3RyaW5nX2l0ZW1fbGlzdGAgb2YgdGhlIGZpcnN0IGBzdHJpbmdfbGlzdGAuIEl0ICB3aWxsIGJlIHBvcHVsYXRlZCBhbmQKKyAqIHNvcnRlZCBieSBgZmluZF91bmlxdWVfcHJlZml4ZXMoKWAuCisgKi8KK3N0cnVjdCBwcmVmaXhfaXRlbV9saXN0IHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaXRlbXM7CisJc3RydWN0IHN0cmluZ19saXN0IHNvcnRlZDsKKwlpbnQgKnNlbGVjdGVkOyAvKiBmb3IgbXVsdGktc2VsZWN0aW9ucyAqLworCXNpemVfdCBtaW5fbGVuZ3RoLCBtYXhfbGVuZ3RoOworfTsKKyNkZWZpbmUgUFJFRklYX0lURU1fTElTVF9JTklUIFwKKwl7IFNUUklOR19MSVNUX0lOSVRfRFVQLCBTVFJJTkdfTElTVF9JTklUX05PRFVQLCBOVUxMLCAxLCA0IH0KKworc3RhdGljIHZvaWQgcHJlZml4X2l0ZW1fbGlzdF9jbGVhcihzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqbGlzdCkKK3sKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdC0+aXRlbXMsIDEpOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LT5zb3J0ZWQsIDApOworCUZSRUVfQU5EX05VTEwobGlzdC0+c2VsZWN0ZWQpOworfQorCitzdGF0aWMgdm9pZCBleHRlbmRfcHJlZml4X2xlbmd0aChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcCwKKwkJCQkgY29uc3QgY2hhciAqb3RoZXJfc3RyaW5nLCBzaXplX3QgbWF4X2xlbmd0aCkKK3sKKwlzaXplX3QgKmxlbiA9IHAtPnV0aWw7CisKKwlpZiAoISpsZW4gfHwgbWVtY21wKHAtPnN0cmluZywgb3RoZXJfc3RyaW5nLCAqbGVuKSkKKwkJcmV0dXJuOworCisJZm9yICg7OykgeworCQljaGFyIGMgPSBwLT5zdHJpbmdbKmxlbl07CisKKwkJLyoKKwkJICogSXMgYHBgIGEgc3RyaWN0IHByZWZpeCBvZiBgb3RoZXJgPyBPciBoYXZlIHdlIGV4aGF1c3RlZCB0aGUKKwkJICogbWF4aW1hbCBsZW5ndGggb2YgdGhlIHByZWZpeD8gT3IgaXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGEKKwkJICogbXVsdGktYnl0ZSBVVEYtOCBvbmU/IElmIHNvLCB0aGVyZSBpcyBubyB2YWxpZCwgdW5pcXVlCisJCSAqIHByZWZpeC4KKwkJICovCisJCWlmICghYyB8fCArKypsZW4gPiBtYXhfbGVuZ3RoIHx8ICFpc2FzY2lpKGMpKSB7CisJCQkqbGVuID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMgIT0gb3RoZXJfc3RyaW5nWypsZW4gLSAxXSkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZmluZF91bmlxdWVfcHJlZml4ZXMoc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmxpc3QpCit7CisJc2l6ZV90IGk7CisKKwlpZiAobGlzdC0+c29ydGVkLm5yID09IGxpc3QtPml0ZW1zLm5yKQorCQlyZXR1cm47CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdC0+c29ydGVkLCAwKTsKKwkvKiBBdm9pZCByZWFsbG9jYXRpbmcgaW5jcmVtZW50YWxseSAqLworCWxpc3QtPnNvcnRlZC5pdGVtcyA9IHhtYWxsb2Moc3RfbXVsdChzaXplb2YoKmxpc3QtPnNvcnRlZC5pdGVtcyksCisJCQkJCSAgICAgbGlzdC0+aXRlbXMubnIpKTsKKwlsaXN0LT5zb3J0ZWQubnIgPSBsaXN0LT5zb3J0ZWQuYWxsb2MgPSBsaXN0LT5pdGVtcy5ucjsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5pdGVtcy5ucjsgaSsrKSB7CisJCWxpc3QtPnNvcnRlZC5pdGVtc1tpXS5zdHJpbmcgPSBsaXN0LT5pdGVtcy5pdGVtc1tpXS5zdHJpbmc7CisJCWxpc3QtPnNvcnRlZC5pdGVtc1tpXS51dGlsID0gbGlzdC0+aXRlbXMuaXRlbXMgKyBpOworCX0KKworCXN0cmluZ19saXN0X3NvcnQoJmxpc3QtPnNvcnRlZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+c29ydGVkLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnNvcnRlZF9pdGVtID0gbGlzdC0+c29ydGVkLml0ZW1zICsgaTsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSBzb3J0ZWRfaXRlbS0+dXRpbDsKKwkJc2l6ZV90ICpsZW4gPSBpdGVtLT51dGlsOworCisJCSpsZW4gPSAwOworCQl3aGlsZSAoKmxlbiA8IGxpc3QtPm1pbl9sZW5ndGgpIHsKKwkJCWNoYXIgYyA9IGl0ZW0tPnN0cmluZ1soKmxlbikrK107CisKKwkJCWlmICghYyB8fCAhaXNhc2NpaShjKSkgeworCQkJCSpsZW4gPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGkgPiAwKQorCQkJZXh0ZW5kX3ByZWZpeF9sZW5ndGgoaXRlbSwgc29ydGVkX2l0ZW1bLTFdLnN0cmluZywKKwkJCQkJICAgICBsaXN0LT5tYXhfbGVuZ3RoKTsKKwkJaWYgKGkgKyAxIDwgbGlzdC0+c29ydGVkLm5yKQorCQkJZXh0ZW5kX3ByZWZpeF9sZW5ndGgoaXRlbSwgc29ydGVkX2l0ZW1bMV0uc3RyaW5nLAorCQkJCQkgICAgIGxpc3QtPm1heF9sZW5ndGgpOworCX0KK30KKworc3RhdGljIHNzaXplX3QgZmluZF91bmlxdWUoY29uc3QgY2hhciAqc3RyaW5nLCBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqbGlzdCkKK3sKKwlpbnQgaW5kZXggPSBzdHJpbmdfbGlzdF9maW5kX2luc2VydF9pbmRleCgmbGlzdC0+c29ydGVkLCBzdHJpbmcsIDEpOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKGxpc3QtPml0ZW1zLm5yICE9IGxpc3QtPnNvcnRlZC5ucikKKwkJQlVHKCJwcmVmaXhfaXRlbV9saXN0IGluIGluY29uc2lzdGVudCBzdGF0ZSAoJSJQUkl1TUFYCisJCSAgICAiIHZzICUiUFJJdU1BWCIpIiwKKwkJICAgICh1aW50bWF4X3QpbGlzdC0+aXRlbXMubnIsICh1aW50bWF4X3QpbGlzdC0+c29ydGVkLm5yKTsKKworCWlmIChpbmRleCA8IDApCisJCWl0ZW0gPSBsaXN0LT5zb3J0ZWQuaXRlbXNbLTEgLSBpbmRleF0udXRpbDsKKwllbHNlIGlmIChpbmRleCA+IDAgJiYKKwkJIHN0YXJ0c193aXRoKGxpc3QtPnNvcnRlZC5pdGVtc1tpbmRleCAtIDFdLnN0cmluZywgc3RyaW5nKSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGluZGV4ICsgMSA8IGxpc3QtPnNvcnRlZC5uciAmJgorCQkgc3RhcnRzX3dpdGgobGlzdC0+c29ydGVkLml0ZW1zW2luZGV4ICsgMV0uc3RyaW5nLCBzdHJpbmcpKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoaW5kZXggPCBsaXN0LT5zb3J0ZWQubnIpCisJCWl0ZW0gPSBsaXN0LT5zb3J0ZWQuaXRlbXNbaW5kZXhdLnV0aWw7CisJZWxzZQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGl0ZW0gLSBsaXN0LT5pdGVtcy5pdGVtczsKK30KKworc3RydWN0IGxpc3Rfb3B0aW9ucyB7CisJaW50IGNvbHVtbnM7CisJY29uc3QgY2hhciAqaGVhZGVyOworCXZvaWQgKCpwcmludF9pdGVtKShpbnQgaSwgaW50IHNlbGVjdGVkLCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwKKwkJCSAgIHZvaWQgKnByaW50X2l0ZW1fZGF0YSk7CisJdm9pZCAqcHJpbnRfaXRlbV9kYXRhOworfTsKKworc3RhdGljIHZvaWQgbGlzdChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50ICpzZWxlY3RlZCwKKwkJIHN0cnVjdCBsaXN0X29wdGlvbnMgKm9wdHMpCit7CisJaW50IGksIGxhc3RfbGYgPSAwOworCisJaWYgKCFsaXN0LT5ucikKKwkJcmV0dXJuOworCisJaWYgKG9wdHMtPmhlYWRlcikKKwkJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlYWRlcl9jb2xvciwKKwkJCQkgIiVzIiwgb3B0cy0+aGVhZGVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCW9wdHMtPnByaW50X2l0ZW0oaSwgc2VsZWN0ZWQgPyBzZWxlY3RlZFtpXSA6IDAsIGxpc3QtPml0ZW1zICsgaSwKKwkJCQkgb3B0cy0+cHJpbnRfaXRlbV9kYXRhKTsKKworCQlpZiAoKG9wdHMtPmNvbHVtbnMpICYmICgoaSArIDEpICUgKG9wdHMtPmNvbHVtbnMpKSkgeworCQkJcHV0Y2hhcignXHQnKTsKKwkJCWxhc3RfbGYgPSAwOworCQl9CisJCWVsc2UgeworCQkJcHV0Y2hhcignXG4nKTsKKwkJCWxhc3RfbGYgPSAxOworCQl9CisJfQorCisJaWYgKCFsYXN0X2xmKQorCQlwdXRjaGFyKCdcbicpOworfQorc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zIHsKKwlzdHJ1Y3QgbGlzdF9vcHRpb25zIGxpc3Rfb3B0czsKKworCWNvbnN0IGNoYXIgKnByb21wdDsKKwllbnVtIHsKKwkJU0lOR0xFVE9OID0gKDE8PDApLAorCQlJTU1FRElBVEUgPSAoMTw8MSksCisJfSBmbGFnczsKKwl2b2lkICgqcHJpbnRfaGVscCkoc3RydWN0IGFkZF9pX3N0YXRlICpzKTsKK307CisKKyNkZWZpbmUgTElTVF9BTkRfQ0hPT1NFX0VSUk9SICgtMSkKKyNkZWZpbmUgTElTVF9BTkRfQ0hPT1NFX1FVSVQgICgtMikKKworLyoKKyAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGluZGV4IGluIHNpbmdsZXRvbiBtb2RlLCB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zCisgKiBvdGhlcndpc2UuCisgKgorICogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJldHVybnMgYExJU1RfQU5EX0NIT09TRV9FUlJPUmAuIFVwb24gRU9GLAorICogYExJU1RfQU5EX0NIT09TRV9RVUlUYCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIHNzaXplX3QgbGlzdF9hbmRfY2hvb3NlKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywKKwkJCSAgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqaXRlbXMsCisJCQkgICAgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKQoreworCWludCBzaW5nbGV0b24gPSBvcHRzLT5mbGFncyAmIFNJTkdMRVRPTjsKKwlpbnQgaW1tZWRpYXRlID0gb3B0cy0+ZmxhZ3MgJiBJTU1FRElBVEU7CisKKwlzdHJ1Y3Qgc3RyYnVmIGlucHV0ID0gU1RSQlVGX0lOSVQ7CisJc3NpemVfdCByZXMgPSBzaW5nbGV0b24gPyBMSVNUX0FORF9DSE9PU0VfRVJST1IgOiAwOworCisJaWYgKCFzaW5nbGV0b24pIHsKKwkJZnJlZShpdGVtcy0+c2VsZWN0ZWQpOworCQlDQUxMT0NfQVJSQVkoaXRlbXMtPnNlbGVjdGVkLCBpdGVtcy0+aXRlbXMubnIpOworCX0KKworCWlmIChzaW5nbGV0b24gJiYgIWltbWVkaWF0ZSkKKwkJQlVHKCJzaW5nbGV0b24gcmVxdWlyZXMgaW1tZWRpYXRlIik7CisKKwlmaW5kX3VuaXF1ZV9wcmVmaXhlcyhpdGVtcyk7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgKnA7CisKKwkJc3RyYnVmX3Jlc2V0KCZpbnB1dCk7CisKKwkJbGlzdChzLCAmaXRlbXMtPml0ZW1zLCBpdGVtcy0+c2VsZWN0ZWQsICZvcHRzLT5saXN0X29wdHMpOworCisJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBzLT5wcm9tcHRfY29sb3IsICIlcyIsIG9wdHMtPnByb21wdCk7CisJCWZwdXRzKHNpbmdsZXRvbiA/ICI+ICIgOiAiPj4gIiwgc3Rkb3V0KTsKKwkJZmZsdXNoKHN0ZG91dCk7CisKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZpbnB1dCwgc3RkaW4pID09IEVPRikgeworCQkJcHV0Y2hhcignXG4nKTsKKwkJCWlmIChpbW1lZGlhdGUpCisJCQkJcmVzID0gTElTVF9BTkRfQ0hPT1NFX1FVSVQ7CisJCQlicmVhazsKKwkJfQorCQlzdHJidWZfdHJpbSgmaW5wdXQpOworCisJCWlmICghaW5wdXQubGVuKQorCQkJYnJlYWs7CisKKwkJaWYgKCFzdHJjbXAoaW5wdXQuYnVmLCAiPyIpKSB7CisJCQlvcHRzLT5wcmludF9oZWxwKHMpOworCQkJY29udGludWU7CisJCX0KKworCQlwID0gaW5wdXQuYnVmOworCQlmb3IgKDs7KSB7CisJCQlzaXplX3Qgc2VwID0gc3RyY3NwbihwLCAiIFx0XHJcbiwiKTsKKwkJCWludCBjaG9vc2UgPSAxOworCQkJLyogYGZyb21gIGlzIGluY2x1c2l2ZSwgYHRvYCBpcyBleGNsdXNpdmUgKi8KKwkJCXNzaXplX3QgZnJvbSA9IC0xLCB0byA9IC0xOworCisJCQlpZiAoIXNlcCkgeworCQkJCWlmICghKnApCisJCQkJCWJyZWFrOworCQkJCXArKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogSW5wdXQgdGhhdCBiZWdpbnMgd2l0aCAnLSc7IGRlLXNlbGVjdCAqLworCQkJaWYgKCpwID09ICctJykgeworCQkJCWNob29zZSA9IDA7CisJCQkJcCsrOworCQkJCXNlcC0tOworCQkJfQorCisJCQlpZiAoc2VwID09IDEgJiYgKnAgPT0gJyonKSB7CisJCQkJZnJvbSA9IDA7CisJCQkJdG8gPSBpdGVtcy0+aXRlbXMubnI7CisJCQl9IGVsc2UgaWYgKGlzZGlnaXQoKnApKSB7CisJCQkJY2hhciAqZW5kcDsKKwkJCQkvKgorCQkJCSAqIEEgcmFuZ2UgY2FuIGJlIHNwZWNpZmllZCBsaWtlIDUtNyBvciA1LS4KKwkJCQkgKgorCQkJCSAqIE5vdGU6IGBmcm9tYCBpcyAwLWJhc2VkIHdoaWxlIHRoZSB1c2VyIGlucHV0CisJCQkJICogaXMgMS1iYXNlZCwgaGVuY2Ugd2UgaGF2ZSB0byBkZWNyZW1lbnQgYnkKKwkJCQkgKiBvbmUuIFdlIGRvIG5vdCBoYXZlIHRvIGRlY3JlbWVudCBgdG9gIGV2ZW4KKwkJCQkgKiBpZiBpdCBpcyAwLWJhc2VkIGJlY2F1c2UgaXQgaXMgYW4gZXhjbHVzaXZlCisJCQkJICogYm91bmRhcnkuCisJCQkJICovCisJCQkJZnJvbSA9IHN0cnRvdWwocCwgJmVuZHAsIDEwKSAtIDE7CisJCQkJaWYgKGVuZHAgPT0gcCArIHNlcCkKKwkJCQkJdG8gPSBmcm9tICsgMTsKKwkJCQllbHNlIGlmICgqZW5kcCA9PSAnLScpIHsKKwkJCQkJaWYgKGlzZGlnaXQoKigrK2VuZHApKSkKKwkJCQkJCXRvID0gc3RydG91bChlbmRwLCAmZW5kcCwgMTApOworCQkJCQllbHNlCisJCQkJCQl0byA9IGl0ZW1zLT5pdGVtcy5ucjsKKwkJCQkJLyogZXh0cmEgY2hhcmFjdGVycyBhZnRlciB0aGUgcmFuZ2U/ICovCisJCQkJCWlmIChlbmRwICE9IHAgKyBzZXApCisJCQkJCQlmcm9tID0gLTE7CisJCQkJfQorCQkJfQorCisJCQlpZiAocFtzZXBdKQorCQkJCXBbc2VwKytdID0gJ1wwJzsKKwkJCWlmIChmcm9tIDwgMCkgeworCQkJCWZyb20gPSBmaW5kX3VuaXF1ZShwLCBpdGVtcyk7CisJCQkJaWYgKGZyb20gPj0gMCkKKwkJCQkJdG8gPSBmcm9tICsgMTsKKwkJCX0KKworCQkJaWYgKGZyb20gPCAwIHx8IGZyb20gPj0gaXRlbXMtPml0ZW1zLm5yIHx8CisJCQkgICAgKHNpbmdsZXRvbiAmJiBmcm9tICsgMSAhPSB0bykpIHsKKwkJCQljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+ZXJyb3JfY29sb3IsCisJCQkJCQkgXygiSHVoICglcyk/IiksIHApOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChzaW5nbGV0b24pIHsKKwkJCQlyZXMgPSBmcm9tOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAodG8gPiBpdGVtcy0+aXRlbXMubnIpCisJCQkJdG8gPSBpdGVtcy0+aXRlbXMubnI7CisKKwkJCWZvciAoOyBmcm9tIDwgdG87IGZyb20rKykKKwkJCQlpZiAoaXRlbXMtPnNlbGVjdGVkW2Zyb21dICE9IGNob29zZSkgeworCQkJCQlpdGVtcy0+c2VsZWN0ZWRbZnJvbV0gPSBjaG9vc2U7CisJCQkJCXJlcyArPSBjaG9vc2UgPyArMSA6IC0xOworCQkJCX0KKworCQkJcCArPSBzZXA7CisJCX0KKworCQlpZiAoKGltbWVkaWF0ZSAmJiByZXMgIT0gTElTVF9BTkRfQ0hPT1NFX0VSUk9SKSB8fAorCQkgICAgIXN0cmNtcChpbnB1dC5idWYsICIqIikpCisJCQlicmVhazsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmaW5wdXQpOworCXJldHVybiByZXM7Cit9CisKK3N0cnVjdCBhZGRkZWwgeworCXVpbnRtYXhfdCBhZGQsIGRlbDsKKwl1bnNpZ25lZCBzZWVuOjEsIHVubWVyZ2VkOjEsIGJpbmFyeToxOworfTsKKworc3RydWN0IGZpbGVfaXRlbSB7CisJc2l6ZV90IHByZWZpeF9sZW5ndGg7CisJc3RydWN0IGFkZGRlbCBpbmRleCwgd29ya3RyZWU7Cit9OworCitzdGF0aWMgdm9pZCBhZGRfZmlsZV9pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdCAqZmlsZXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZpbGVfaXRlbSAqaXRlbSA9IHhjYWxsb2Moc2l6ZW9mKCppdGVtKSwgMSk7CisKKwlzdHJpbmdfbGlzdF9hcHBlbmQoZmlsZXMsIG5hbWUpLT51dGlsID0gaXRlbTsKK30KKworc3RydWN0IHBhdGhuYW1lX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZmlsZV9pdGVtICppdGVtOworfTsKKworc3RhdGljIGludCBwYXRobmFtZV9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmhlMSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICpoZTIsCisJCQkgICAgICBjb25zdCB2b2lkICpuYW1lKQoreworCWNvbnN0IHN0cnVjdCBwYXRobmFtZV9lbnRyeSAqZTEgPQorCQljb250YWluZXJfb2YoaGUxLCBjb25zdCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnksIGVudCk7CisJY29uc3Qgc3RydWN0IHBhdGhuYW1lX2VudHJ5ICplMiA9CisJCWNvbnRhaW5lcl9vZihoZTIsIGNvbnN0IHN0cnVjdCBwYXRobmFtZV9lbnRyeSwgZW50KTsKKworCXJldHVybiBzdHJjbXAoZTEtPm5hbWUsIG5hbWUgPyAoY29uc3QgY2hhciAqKW5hbWUgOiBlMi0+bmFtZSk7Cit9CisKK3N0cnVjdCBjb2xsZWN0aW9uX3N0YXR1cyB7CisJZW51bSB7IEZST01fV09SS1RSRUUgPSAwLCBGUk9NX0lOREVYID0gMSB9IG1vZGU7CisKKwljb25zdCBjaGFyICpyZWZlcmVuY2U7CisKKwl1bnNpZ25lZCBza2lwX3Vuc2VlbjoxOworCXNpemVfdCB1bm1lcmdlZF9jb3VudCwgYmluYXJ5X2NvdW50OworCXN0cnVjdCBzdHJpbmdfbGlzdCAqZmlsZXM7CisJc3RydWN0IGhhc2htYXAgZmlsZV9tYXA7Cit9OworCitzdGF0aWMgdm9pZCBjb2xsZWN0X2NoYW5nZXNfY2Ioc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29sbGVjdGlvbl9zdGF0dXMgKnMgPSBkYXRhOworCXN0cnVjdCBkaWZmc3RhdF90IHN0YXQgPSB7IDAgfTsKKwlpbnQgaTsKKworCWlmICghcS0+bnIpCisJCXJldHVybjsKKworCWNvbXB1dGVfZGlmZnN0YXQob3B0aW9ucywgJnN0YXQsIHEpOworCisJZm9yIChpID0gMDsgaSA8IHN0YXQubnI7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gc3RhdC5maWxlc1tpXS0+bmFtZTsKKwkJaW50IGhhc2ggPSBzdHJoYXNoKG5hbWUpOworCQlzdHJ1Y3QgcGF0aG5hbWVfZW50cnkgKmVudHJ5OworCQlzdHJ1Y3QgZmlsZV9pdGVtICpmaWxlX2l0ZW07CisJCXN0cnVjdCBhZGRkZWwgKmFkZGRlbCwgKm90aGVyX2FkZGRlbDsKKworCQllbnRyeSA9IGhhc2htYXBfZ2V0X2VudHJ5X2Zyb21faGFzaCgmcy0+ZmlsZV9tYXAsIGhhc2gsIG5hbWUsCisJCQkJCQkgICAgc3RydWN0IHBhdGhuYW1lX2VudHJ5LCBlbnQpOworCQlpZiAoIWVudHJ5KSB7CisJCQlpZiAocy0+c2tpcF91bnNlZW4pCisJCQkJY29udGludWU7CisKKwkJCWFkZF9maWxlX2l0ZW0ocy0+ZmlsZXMsIG5hbWUpOworCisJCQllbnRyeSA9IHhjYWxsb2Moc2l6ZW9mKCplbnRyeSksIDEpOworCQkJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeS0+ZW50LCBoYXNoKTsKKwkJCWVudHJ5LT5uYW1lID0gcy0+ZmlsZXMtPml0ZW1zW3MtPmZpbGVzLT5uciAtIDFdLnN0cmluZzsKKwkJCWVudHJ5LT5pdGVtID0gcy0+ZmlsZXMtPml0ZW1zW3MtPmZpbGVzLT5uciAtIDFdLnV0aWw7CisJCQloYXNobWFwX2FkZCgmcy0+ZmlsZV9tYXAsICZlbnRyeS0+ZW50KTsKKwkJfQorCisJCWZpbGVfaXRlbSA9IGVudHJ5LT5pdGVtOworCQlhZGRkZWwgPSBzLT5tb2RlID09IEZST01fSU5ERVggPworCQkJJmZpbGVfaXRlbS0+aW5kZXggOiAmZmlsZV9pdGVtLT53b3JrdHJlZTsKKwkJb3RoZXJfYWRkZGVsID0gcy0+bW9kZSA9PSBGUk9NX0lOREVYID8KKwkJCSZmaWxlX2l0ZW0tPndvcmt0cmVlIDogJmZpbGVfaXRlbS0+aW5kZXg7CisJCWFkZGRlbC0+c2VlbiA9IDE7CisJCWFkZGRlbC0+YWRkID0gc3RhdC5maWxlc1tpXS0+YWRkZWQ7CisJCWFkZGRlbC0+ZGVsID0gc3RhdC5maWxlc1tpXS0+ZGVsZXRlZDsKKwkJaWYgKHN0YXQuZmlsZXNbaV0tPmlzX2JpbmFyeSkgeworCQkJaWYgKCFvdGhlcl9hZGRkZWwtPmJpbmFyeSkKKwkJCQlzLT5iaW5hcnlfY291bnQrKzsKKwkJCWFkZGRlbC0+YmluYXJ5ID0gMTsKKwkJfQorCQlpZiAoc3RhdC5maWxlc1tpXS0+aXNfdW5tZXJnZWQpIHsKKwkJCWlmICghb3RoZXJfYWRkZGVsLT51bm1lcmdlZCkKKwkJCQlzLT51bm1lcmdlZF9jb3VudCsrOworCQkJYWRkZGVsLT51bm1lcmdlZCA9IDE7CisJCX0KKwl9CisJZnJlZV9kaWZmc3RhdF9pbmZvKCZzdGF0KTsKK30KKworZW51bSBtb2RpZmllZF9maWxlc19maWx0ZXIgeworCU5PX0ZJTFRFUiA9IDAsCisJV09SS1RSRUVfT05MWSA9IDEsCisJSU5ERVhfT05MWSA9IDIsCit9OworCitzdGF0aWMgaW50IGdldF9tb2RpZmllZF9maWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgIGVudW0gbW9kaWZpZWRfZmlsZXNfZmlsdGVyIGZpbHRlciwKKwkJCSAgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCQkgICAgICBzaXplX3QgKnVubWVyZ2VkX2NvdW50LAorCQkJICAgICAgc2l6ZV90ICpiaW5hcnlfY291bnQpCit7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKwlpbnQgaXNfaW5pdGlhbCA9ICFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkgICAgICZoZWFkX29pZCwgTlVMTCk7CisJc3RydWN0IGNvbGxlY3Rpb25fc3RhdHVzIHMgPSB7IDAgfTsKKwlpbnQgaTsKKworCWlmIChkaXNjYXJkX2luZGV4KHItPmluZGV4KSA8IDAgfHwKKwkgICAgcmVwb19yZWFkX2luZGV4X3ByZWxvYWQociwgcHMsIDApIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkIGluZGV4IikpOworCisJcHJlZml4X2l0ZW1fbGlzdF9jbGVhcihmaWxlcyk7CisJcy5maWxlcyA9ICZmaWxlcy0+aXRlbXM7CisJaGFzaG1hcF9pbml0KCZzLmZpbGVfbWFwLCBwYXRobmFtZV9lbnRyeV9jbXAsIE5VTEwsIDApOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCQlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdCA9IHsgMCB9OworCisJCWlmIChmaWx0ZXIgPT0gSU5ERVhfT05MWSkKKwkJCXMubW9kZSA9IChpID09IDApID8gRlJPTV9JTkRFWCA6IEZST01fV09SS1RSRUU7CisJCWVsc2UKKwkJCXMubW9kZSA9IChpID09IDApID8gRlJPTV9XT1JLVFJFRSA6IEZST01fSU5ERVg7CisJCXMuc2tpcF91bnNlZW4gPSBmaWx0ZXIgJiYgaTsKKworCQlvcHQuZGVmID0gaXNfaW5pdGlhbCA/CisJCQllbXB0eV90cmVlX29pZF9oZXgoKSA6IG9pZF90b19oZXgoJmhlYWRfb2lkKTsKKworCQlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwkJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsICZvcHQpOworCisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwkJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gY29sbGVjdF9jaGFuZ2VzX2NiOworCQlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZzOworCisJCWlmIChwcykKKwkJCWNvcHlfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhLCBwcyk7CisKKwkJaWYgKHMubW9kZSA9PSBGUk9NX0lOREVYKQorCQkJcnVuX2RpZmZfaW5kZXgoJnJldiwgMSk7CisJCWVsc2UgeworCQkJcmV2LmRpZmZvcHQuZmxhZ3MuaWdub3JlX2RpcnR5X3N1Ym1vZHVsZXMgPSAxOworCQkJcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7CisJCX0KKworCQlpZiAocHMpCisJCQljbGVhcl9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEpOworCX0KKwloYXNobWFwX2ZyZWVfZW50cmllcygmcy5maWxlX21hcCwgc3RydWN0IHBhdGhuYW1lX2VudHJ5LCBlbnQpOworCWlmICh1bm1lcmdlZF9jb3VudCkKKwkJKnVubWVyZ2VkX2NvdW50ID0gcy51bm1lcmdlZF9jb3VudDsKKwlpZiAoYmluYXJ5X2NvdW50KQorCQkqYmluYXJ5X2NvdW50ID0gcy5iaW5hcnlfY291bnQ7CisKKwkvKiBXaGlsZSB0aGUgZGlmZnMgYXJlIG9yZGVyZWQgYWxyZWFkeSwgd2UgcmFuICp0d28qIGRpZmZzLi4uICovCisJc3RyaW5nX2xpc3Rfc29ydCgmZmlsZXMtPml0ZW1zKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJfYWRkZGVsKHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCQlzdHJ1Y3QgYWRkZGVsICphZCwgY29uc3QgY2hhciAqbm9fY2hhbmdlcykKK3sKKwlpZiAoYWQtPmJpbmFyeSkKKwkJc3RyYnVmX2FkZHN0cihidWYsIF8oImJpbmFyeSIpKTsKKwllbHNlIGlmIChhZC0+c2VlbikKKwkJc3RyYnVmX2FkZGYoYnVmLCAiKyUiUFJJdU1BWCIvLSUiUFJJdU1BWCwKKwkJCSAgICAodWludG1heF90KWFkLT5hZGQsICh1aW50bWF4X3QpYWQtPmRlbCk7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKGJ1Ziwgbm9fY2hhbmdlcyk7Cit9CisKKy8qIGZpbHRlcnMgb3V0IHByZWZpeGVzIHdoaWNoIGhhdmUgc3BlY2lhbCBtZWFuaW5nIHRvIGxpc3RfYW5kX2Nob29zZSgpICovCitzdGF0aWMgaW50IGlzX3ZhbGlkX3ByZWZpeChjb25zdCBjaGFyICpwcmVmaXgsIHNpemVfdCBwcmVmaXhfbGVuKQoreworCXJldHVybiBwcmVmaXhfbGVuICYmIHByZWZpeCAmJgorCQkvKgorCQkgKiBXZSBleHBlY3QgYHByZWZpeGAgdG8gYmUgTlVMIHRlcm1pbmF0ZWQsIHRoZXJlZm9yZSB0aGlzCisJCSAqIGBzdHJjc3BuKClgIGNhbGwgaXMgb2theSwgZXZlbiBpZiBpdCBtaWdodCBkbyBtdWNoIG1vcmUKKwkJICogd29yayB0aGFuIHN0cmljdGx5IG5lY2Vzc2FyeS4KKwkJICovCisJCXN0cmNzcG4ocHJlZml4LCAiIFx0XHJcbiwiKSA+PSBwcmVmaXhfbGVuICYmCS8qIHNlcGFyYXRvcnMgKi8KKwkJKnByZWZpeCAhPSAnLScgJiYJCQkJLyogZGVzZWxlY3Rpb24gKi8KKwkJIWlzZGlnaXQoKnByZWZpeCkgJiYJCQkJLyogc2VsZWN0aW9uICovCisJCShwcmVmaXhfbGVuICE9IDEgfHwKKwkJICgqcHJlZml4ICE9ICcqJyAmJgkJCQkvKiAiYWxsIiB3aWxkY2FyZCAqLworCQkgICpwcmVmaXggIT0gJz8nKSk7CQkJCS8qIHByb21wdCBoZWxwICovCit9CisKK3N0cnVjdCBwcmludF9maWxlX2l0ZW1fZGF0YSB7CisJY29uc3QgY2hhciAqbW9kaWZpZWRfZm10LCAqY29sb3IsICpyZXNldDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiwgbmFtZSwgaW5kZXgsIHdvcmt0cmVlOworCXVuc2lnbmVkIG9ubHlfbmFtZXM6MTsKK307CisKK3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfaXRlbShpbnQgaSwgaW50IHNlbGVjdGVkLCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwKKwkJCSAgICB2b2lkICpwcmludF9maWxlX2l0ZW1fZGF0YSkKK3sKKwlzdHJ1Y3QgZmlsZV9pdGVtICpjID0gaXRlbS0+dXRpbDsKKwlzdHJ1Y3QgcHJpbnRfZmlsZV9pdGVtX2RhdGEgKmQgPSBwcmludF9maWxlX2l0ZW1fZGF0YTsKKwljb25zdCBjaGFyICpoaWdobGlnaHRlZCA9IE5VTEw7CisKKwlzdHJidWZfcmVzZXQoJmQtPmluZGV4KTsKKwlzdHJidWZfcmVzZXQoJmQtPndvcmt0cmVlKTsKKwlzdHJidWZfcmVzZXQoJmQtPmJ1Zik7CisKKwkvKiBGb3JtYXQgdGhlIGl0ZW0gd2l0aCB0aGUgcHJlZml4IGhpZ2hsaWdodGVkLiAqLworCWlmIChjLT5wcmVmaXhfbGVuZ3RoID4gMCAmJgorCSAgICBpc192YWxpZF9wcmVmaXgoaXRlbS0+c3RyaW5nLCBjLT5wcmVmaXhfbGVuZ3RoKSkgeworCQlzdHJidWZfcmVzZXQoJmQtPm5hbWUpOworCQlzdHJidWZfYWRkZigmZC0+bmFtZSwgIiVzJS4qcyVzJXMiLCBkLT5jb2xvciwKKwkJCSAgICAoaW50KWMtPnByZWZpeF9sZW5ndGgsIGl0ZW0tPnN0cmluZywgZC0+cmVzZXQsCisJCQkgICAgaXRlbS0+c3RyaW5nICsgYy0+cHJlZml4X2xlbmd0aCk7CisJCWhpZ2hsaWdodGVkID0gZC0+bmFtZS5idWY7CisJfQorCisJaWYgKGQtPm9ubHlfbmFtZXMpIHsKKwkJcHJpbnRmKCIlYyUyZDogJXMiLCBzZWxlY3RlZCA/ICcqJyA6ICcgJywgaSArIDEsCisJCSAgICAgICBoaWdobGlnaHRlZCA/IGhpZ2hsaWdodGVkIDogaXRlbS0+c3RyaW5nKTsKKwkJcmV0dXJuOworCX0KKworCXJlbmRlcl9hZGRkZWwoJmQtPndvcmt0cmVlLCAmYy0+d29ya3RyZWUsIF8oIm5vdGhpbmciKSk7CisJcmVuZGVyX2FkZGRlbCgmZC0+aW5kZXgsICZjLT5pbmRleCwgXygidW5jaGFuZ2VkIikpOworCisJc3RyYnVmX2FkZGYoJmQtPmJ1ZiwgZC0+bW9kaWZpZWRfZm10LCBkLT5pbmRleC5idWYsIGQtPndvcmt0cmVlLmJ1ZiwKKwkJICAgIGhpZ2hsaWdodGVkID8gaGlnaGxpZ2h0ZWQgOiBpdGVtLT5zdHJpbmcpOworCisJcHJpbnRmKCIlYyUyZDogJXMiLCBzZWxlY3RlZCA/ICcqJyA6ICcgJywgaSArIDEsIGQtPmJ1Zi5idWYpOworfQorCitzdGF0aWMgaW50IHJ1bl9zdGF0dXMoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCSAgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIE5PX0ZJTFRFUiwgZmlsZXMsIHBzLCBOVUxMLCBOVUxMKSA8IDApCisJCXJldHVybiAtMTsKKworCWxpc3QocywgJmZpbGVzLT5pdGVtcywgTlVMTCwgJm9wdHMtPmxpc3Rfb3B0cyk7CisJcHV0Y2hhcignXG4nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ1bl91cGRhdGUoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCSAgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgcmVzID0gMCwgZmQ7CisJc2l6ZV90IGNvdW50LCBpOworCXN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKKworCWlmIChnZXRfbW9kaWZpZWRfZmlsZXMocy0+ciwgV09SS1RSRUVfT05MWSwgZmlsZXMsIHBzLCBOVUxMLCBOVUxMKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICghZmlsZXMtPml0ZW1zLm5yKSB7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXJldHVybiAwOworCX0KKworCW9wdHMtPnByb21wdCA9IE5fKCJVcGRhdGUiKTsKKwljb3VudCA9IGxpc3RfYW5kX2Nob29zZShzLCBmaWxlcywgb3B0cyk7CisJaWYgKGNvdW50IDw9IDApIHsKKwkJcHV0Y2hhcignXG4nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmQgPSByZXBvX2hvbGRfbG9ja2VkX2luZGV4KHMtPnIsICZpbmRleF9sb2NrLCBMT0NLX1JFUE9SVF9PTl9FUlJPUik7CisJaWYgKGZkIDwgMCkgeworCQlwdXRjaGFyKCdcbicpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGZpbGVzLT5pdGVtcy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBmaWxlcy0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nOworCQlpZiAoZmlsZXMtPnNlbGVjdGVkW2ldICYmCisJCSAgICBhZGRfZmlsZV90b19pbmRleChzLT5yLT5pbmRleCwgbmFtZSwgMCkgPCAwKSB7CisJCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIpLCBuYW1lKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFyZXMgJiYgd3JpdGVfbG9ja2VkX2luZGV4KHMtPnItPmluZGV4LCAmaW5kZXhfbG9jaywgQ09NTUlUX0xPQ0spIDwgMCkKKwkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGluZGV4IikpOworCisJaWYgKCFyZXMpCisJCXByaW50ZihRXygidXBkYXRlZCAlZCBwYXRoXG4iLAorCQkJICAidXBkYXRlZCAlZCBwYXRoc1xuIiwgY291bnQpLCAoaW50KWNvdW50KTsKKworCXB1dGNoYXIoJ1xuJyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgcmV2ZXJ0X2Zyb21fZGlmZihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaSwgYWRkX2ZsYWdzID0gQUREX0NBQ0hFX09LX1RPX0FERCB8IEFERF9DQUNIRV9PS19UT19SRVBMQUNFOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSA9IHEtPnF1ZXVlW2ldLT5vbmU7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkJaWYgKCEob25lLT5tb2RlICYmICFpc19udWxsX29pZCgmb25lLT5vaWQpKSkgeworCQkJcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChvcHQtPnJlcG8tPmluZGV4LCBvbmUtPnBhdGgpOworCQkJcHJpbnRmKF8oIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iKSwgb25lLT5wYXRoKTsKKwkJfSBlbHNlIHsKKwkJCWNlID0gbWFrZV9jYWNoZV9lbnRyeShvcHQtPnJlcG8tPmluZGV4LCBvbmUtPm1vZGUsCisJCQkJCSAgICAgICZvbmUtPm9pZCwgb25lLT5wYXRoLCAwLCAwKTsKKwkJCWlmICghY2UpCisJCQkJZGllKF8oIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciKSwKKwkJCQkgICAgb25lLT5wYXRoKTsKKwkJCWFkZF9pbmRleF9lbnRyeShvcHQtPnJlcG8tPmluZGV4LCBjZSwgYWRkX2ZsYWdzKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBydW5fcmV2ZXJ0KHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaW50IHJlcyA9IDAsIGZkOworCXNpemVfdCBjb3VudCwgaSwgajsKKworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBpc19pbml0aWFsID0gIXJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsICZvaWQsCisJCQkJCSAgICAgTlVMTCk7CisJc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOworCWNvbnN0IGNoYXIgKipwYXRoczsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHQgPSB7IE5VTEwgfTsKKworCWlmIChnZXRfbW9kaWZpZWRfZmlsZXMocy0+ciwgSU5ERVhfT05MWSwgZmlsZXMsIHBzLCBOVUxMLCBOVUxMKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICghZmlsZXMtPml0ZW1zLm5yKSB7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXJldHVybiAwOworCX0KKworCW9wdHMtPnByb21wdCA9IE5fKCJSZXZlcnQiKTsKKwljb3VudCA9IGxpc3RfYW5kX2Nob29zZShzLCBmaWxlcywgb3B0cyk7CisJaWYgKGNvdW50IDw9IDApCisJCWdvdG8gZmluaXNoX3JldmVydDsKKworCWZkID0gcmVwb19ob2xkX2xvY2tlZF9pbmRleChzLT5yLCAmaW5kZXhfbG9jaywgTE9DS19SRVBPUlRfT05fRVJST1IpOworCWlmIChmZCA8IDApIHsKKwkJcmVzID0gLTE7CisJCWdvdG8gZmluaXNoX3JldmVydDsKKwl9CisKKwlpZiAoaXNfaW5pdGlhbCkKKwkJb2lkY3B5KCZvaWQsIHMtPnItPmhhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisJZWxzZSB7CisJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCQlpZiAoIXRyZWUpIHsKKwkJCXJlcyA9IGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBIRUFEXnt0cmVlfSIpKTsKKwkJCWdvdG8gZmluaXNoX3JldmVydDsKKwkJfQorCQlvaWRjcHkoJm9pZCwgJnRyZWUtPm9iamVjdC5vaWQpOworCX0KKworCUFMTE9DX0FSUkFZKHBhdGhzLCBjb3VudCArIDEpOworCWZvciAoaSA9IGogPSAwOyBpIDwgZmlsZXMtPml0ZW1zLm5yOyBpKyspCisJCWlmIChmaWxlcy0+c2VsZWN0ZWRbaV0pCisJCQlwYXRoc1tqKytdID0gZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZzsKKwlwYXRoc1tqXSA9IE5VTEw7CisKKwlwYXJzZV9wYXRoc3BlYygmZGlmZm9wdC5wYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwgUEFUSFNQRUNfTElURVJBTF9QQVRILAorCQkgICAgICAgTlVMTCwgcGF0aHMpOworCisJZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSByZXZlcnRfZnJvbV9kaWZmOworCWRpZmZvcHQuZmxhZ3Mub3ZlcnJpZGVfc3VibW9kdWxlX2NvbmZpZyA9IDE7CisJZGlmZm9wdC5yZXBvID0gcy0+cjsKKworCWlmIChkb19kaWZmX2NhY2hlKCZvaWQsICZkaWZmb3B0KSkKKwkJcmVzID0gLTE7CisJZWxzZSB7CisJCWRpZmZjb3JlX3N0ZCgmZGlmZm9wdCk7CisJCWRpZmZfZmx1c2goJmRpZmZvcHQpOworCX0KKwlmcmVlKHBhdGhzKTsKKwljbGVhcl9wYXRoc3BlYygmZGlmZm9wdC5wYXRoc3BlYyk7CisKKwlpZiAoIXJlcyAmJiB3cml0ZV9sb2NrZWRfaW5kZXgocy0+ci0+aW5kZXgsICZpbmRleF9sb2NrLAorCQkJCSAgICAgICBDT01NSVRfTE9DSykgPCAwKQorCQlyZXMgPSAtMTsKKwllbHNlCisJCXJlcyA9IHJlcG9fcmVmcmVzaF9hbmRfd3JpdGVfaW5kZXgocy0+ciwgUkVGUkVTSF9RVUlFVCwgMCwgMSwKKwkJCQkJCSAgIE5VTEwsIE5VTEwsIE5VTEwpOworCisJaWYgKCFyZXMpCisJCXByaW50ZihRXygicmV2ZXJ0ZWQgJWQgcGF0aFxuIiwKKwkJCSAgInJldmVydGVkICVkIHBhdGhzXG4iLCBjb3VudCksIChpbnQpY291bnQpOworCitmaW5pc2hfcmV2ZXJ0OgorCXB1dGNoYXIoJ1xuJyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBnZXRfdW50cmFja2VkX2ZpbGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKQoreworCXN0cnVjdCBkaXJfc3RydWN0IGRpciA9IHsgMCB9OworCXNpemVfdCBpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocmVwb19yZWFkX2luZGV4KHIpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkIGluZGV4IikpOworCisJcHJlZml4X2l0ZW1fbGlzdF9jbGVhcihmaWxlcyk7CisJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisJYWRkX3BhdHRlcm5fbGlzdCgmZGlyLCBFWENfQ01ETCwgIi0tZXhjbHVkZSBvcHRpb24iKTsKKwlmaWxsX2RpcmVjdG9yeSgmZGlyLCByLT5pbmRleCwgcHMpOworCisJZm9yIChpID0gMDsgaSA8IGRpci5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci5lbnRyaWVzW2ldOworCisJCWlmIChpbmRleF9uYW1lX2lzX290aGVyKHItPmluZGV4LCBlbnQtPm5hbWUsIGVudC0+bGVuKSkgeworCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJc3RyYnVmX2FkZCgmYnVmLCBlbnQtPm5hbWUsIGVudC0+bGVuKTsKKwkJCWFkZF9maWxlX2l0ZW0oJmZpbGVzLT5pdGVtcywgYnVmLmJ1Zik7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydW5fYWRkX3VudHJhY2tlZChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJICAgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBwcmludF9maWxlX2l0ZW1fZGF0YSAqZCA9IG9wdHMtPmxpc3Rfb3B0cy5wcmludF9pdGVtX2RhdGE7CisJaW50IHJlcyA9IDAsIGZkOworCXNpemVfdCBjb3VudCwgaTsKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2s7CisKKwlpZiAoZ2V0X3VudHJhY2tlZF9maWxlcyhzLT5yLCBmaWxlcywgcHMpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFmaWxlcy0+aXRlbXMubnIpIHsKKwkJcHJpbnRmKF8oIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIpKTsKKwkJZ290byBmaW5pc2hfYWRkX3VudHJhY2tlZDsKKwl9CisKKwlvcHRzLT5wcm9tcHQgPSBOXygiQWRkIHVudHJhY2tlZCIpOworCWQtPm9ubHlfbmFtZXMgPSAxOworCWNvdW50ID0gbGlzdF9hbmRfY2hvb3NlKHMsIGZpbGVzLCBvcHRzKTsKKwlkLT5vbmx5X25hbWVzID0gMDsKKwlpZiAoY291bnQgPD0gMCkKKwkJZ290byBmaW5pc2hfYWRkX3VudHJhY2tlZDsKKworCWZkID0gcmVwb19ob2xkX2xvY2tlZF9pbmRleChzLT5yLCAmaW5kZXhfbG9jaywgTE9DS19SRVBPUlRfT05fRVJST1IpOworCWlmIChmZCA8IDApIHsKKwkJcmVzID0gLTE7CisJCWdvdG8gZmluaXNoX2FkZF91bnRyYWNrZWQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGZpbGVzLT5pdGVtcy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBmaWxlcy0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nOworCQlpZiAoZmlsZXMtPnNlbGVjdGVkW2ldICYmCisJCSAgICBhZGRfZmlsZV90b19pbmRleChzLT5yLT5pbmRleCwgbmFtZSwgMCkgPCAwKSB7CisJCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIpLCBuYW1lKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFyZXMgJiYKKwkgICAgd3JpdGVfbG9ja2VkX2luZGV4KHMtPnItPmluZGV4LCAmaW5kZXhfbG9jaywgQ09NTUlUX0xPQ0spIDwgMCkKKwkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGluZGV4IikpOworCisJaWYgKCFyZXMpCisJCXByaW50ZihRXygiYWRkZWQgJWQgcGF0aFxuIiwKKwkJCSAgImFkZGVkICVkIHBhdGhzXG4iLCBjb3VudCksIChpbnQpY291bnQpOworCitmaW5pc2hfYWRkX3VudHJhY2tlZDoKKwlwdXRjaGFyKCdcbicpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3BhdGNoKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCSAgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKQoreworCWludCByZXMgPSAwOworCXNzaXplX3QgY291bnQsIGksIGo7CisJc2l6ZV90IHVubWVyZ2VkX2NvdW50ID0gMCwgYmluYXJ5X2NvdW50ID0gMDsKKworCWlmIChnZXRfbW9kaWZpZWRfZmlsZXMocy0+ciwgV09SS1RSRUVfT05MWSwgZmlsZXMsIHBzLAorCQkJICAgICAgICZ1bm1lcmdlZF9jb3VudCwgJmJpbmFyeV9jb3VudCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodW5tZXJnZWRfY291bnQgfHwgYmluYXJ5X2NvdW50KSB7CisJCWZvciAoaSA9IGogPSAwOyBpIDwgZmlsZXMtPml0ZW1zLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBmaWxlX2l0ZW0gKml0ZW0gPSBmaWxlcy0+aXRlbXMuaXRlbXNbaV0udXRpbDsKKworCQkJaWYgKGl0ZW0tPmluZGV4LmJpbmFyeSB8fCBpdGVtLT53b3JrdHJlZS5iaW5hcnkpIHsKKwkJCQlmcmVlKGl0ZW0pOworCQkJCWZyZWUoZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZyk7CisJCQl9IGVsc2UgaWYgKGl0ZW0tPmluZGV4LnVubWVyZ2VkIHx8CisJCQkJIGl0ZW0tPndvcmt0cmVlLnVubWVyZ2VkKSB7CisJCQkJY29sb3JfZnByaW50Zl9sbihzdGRlcnIsIHMtPmVycm9yX2NvbG9yLAorCQkJCQkJIF8oImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIpLAorCQkJCQkJIGZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmcpOworCQkJCWZyZWUoaXRlbSk7CisJCQkJZnJlZShmaWxlcy0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJCX0gZWxzZQorCQkJCWZpbGVzLT5pdGVtcy5pdGVtc1tqKytdID0gZmlsZXMtPml0ZW1zLml0ZW1zW2ldOworCQl9CisJCWZpbGVzLT5pdGVtcy5uciA9IGo7CisJfQorCisJaWYgKCFmaWxlcy0+aXRlbXMubnIpIHsKKwkJaWYgKGJpbmFyeV9jb3VudCkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIikpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiTm8gY2hhbmdlcy5cbiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb3B0cy0+cHJvbXB0ID0gTl8oIlBhdGNoIHVwZGF0ZSIpOworCWNvdW50ID0gbGlzdF9hbmRfY2hvb3NlKHMsIGZpbGVzLCBvcHRzKTsKKwlpZiAoY291bnQgPiAwKSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCXN0cnVjdCBwYXRoc3BlYyBwc19zZWxlY3RlZCA9IHsgMCB9OworCisJCWZvciAoaSA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykKKwkJCWlmIChmaWxlcy0+c2VsZWN0ZWRbaV0pCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLAorCQkJCQkJZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZyk7CisJCXBhcnNlX3BhdGhzcGVjKCZwc19zZWxlY3RlZCwKKwkJCSAgICAgICBQQVRIU1BFQ19BTExfTUFHSUMgJiB+UEFUSFNQRUNfTElURVJBTCwKKwkJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMX1BBVEgsICIiLCBhcmdzLmFyZ3YpOworCQlyZXMgPSBydW5fYWRkX3Aocy0+ciwgQUREX1BfQURELCBOVUxMLCAmcHNfc2VsZWN0ZWQpOworCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwkJY2xlYXJfcGF0aHNwZWMoJnBzX3NlbGVjdGVkKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHJ1bl9kaWZmKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgcmVzID0gMDsKKwlzc2l6ZV90IGNvdW50LCBpOworCisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGlzX2luaXRpYWwgPSAhcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywgJm9pZCwKKwkJCQkJICAgICBOVUxMKTsKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIElOREVYX09OTFksIGZpbGVzLCBwcywgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWZpbGVzLT5pdGVtcy5ucikgeworCQlwdXRjaGFyKCdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvcHRzLT5wcm9tcHQgPSBOXygiUmV2aWV3IGRpZmYiKTsKKwlvcHRzLT5mbGFncyA9IElNTUVESUFURTsKKwljb3VudCA9IGxpc3RfYW5kX2Nob29zZShzLCBmaWxlcywgb3B0cyk7CisJb3B0cy0+ZmxhZ3MgPSAwOworCWlmIChjb3VudCA+IDApIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAiZ2l0IiwgImRpZmYiLCAiLXAiLCAiLS1jYWNoZWQiLAorCQkJCSBvaWRfdG9faGV4KCFpc19pbml0aWFsID8gJm9pZCA6CisJCQkJCSAgICBzLT5yLT5oYXNoX2FsZ28tPmVtcHR5X3RyZWUpLAorCQkJCSAiLS0iLCBOVUxMKTsKKwkJZm9yIChpID0gMDsgaSA8IGZpbGVzLT5pdGVtcy5ucjsgaSsrKQorCQkJaWYgKGZpbGVzLT5zZWxlY3RlZFtpXSkKKwkJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsCisJCQkJCQlmaWxlcy0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJcmVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJncy5hcmd2LCAwKTsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJfQorCisJcHV0Y2hhcignXG4nKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHJ1bl9oZWxwKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICp1bnVzZWRfcHMsCisJCSAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqdW51c2VkX2ZpbGVzLAorCQkgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICp1bnVzZWRfb3B0cykKK3sKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgInN0YXR1cyAgICAgICAgLSAlcyIsCisJCQkgXygic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJ1cGRhdGUgICAgICAgIC0gJXMiLAorCQkJIF8oImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgInJldmVydCAgICAgICAgLSAlcyIsCisJCQkgXygicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJwYXRjaCAgICAgICAgIC0gJXMiLAorCQkJIF8oInBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseSIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgImRpZmYgICAgICAgICAgLSAlcyIsCisJCQkgXygidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJhZGQgdW50cmFja2VkIC0gJXMiLAorCQkJIF8oImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaG9vc2VfcHJvbXB0X2hlbHAoc3RydWN0IGFkZF9pX3N0YXRlICpzKQoreworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiJXMiLAorCQkJIF8oIlByb21wdCBoZWxwOiIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIjEgICAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGEgc2luZ2xlIGl0ZW0iKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICIzLTUgICAgICAgIC0gJXMiLAorCQkJIF8oInNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiMi0zLDYtOSAgICAtICVzIiwKKwkJCSBfKCJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiZm9vICAgICAgICAtICVzIiwKKwkJCSBfKCJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiLS4uLiAgICAgICAtICVzIiwKKwkJCSBfKCJ1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICIqICAgICAgICAgIC0gJXMiLAorCQkJIF8oImNob29zZSBhbGwgaXRlbXMiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICIgICAgICAgICAgIC0gJXMiLAorCQkJIF8oIihlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIpKTsKK30KKwordHlwZWRlZiBpbnQgKCpjb21tYW5kX3QpKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCSBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCQkgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKTsKKworc3RydWN0IGNvbW1hbmRfaXRlbSB7CisJc2l6ZV90IHByZWZpeF9sZW5ndGg7CisJY29tbWFuZF90IGNvbW1hbmQ7Cit9OworCitzdHJ1Y3QgcHJpbnRfY29tbWFuZF9pdGVtX2RhdGEgeworCWNvbnN0IGNoYXIgKmNvbG9yLCAqcmVzZXQ7Cit9OworCitzdGF0aWMgdm9pZCBwcmludF9jb21tYW5kX2l0ZW0oaW50IGksIGludCBzZWxlY3RlZCwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwKKwkJCSAgICAgICB2b2lkICpwcmludF9jb21tYW5kX2l0ZW1fZGF0YSkKK3sKKwlzdHJ1Y3QgcHJpbnRfY29tbWFuZF9pdGVtX2RhdGEgKmQgPSBwcmludF9jb21tYW5kX2l0ZW1fZGF0YTsKKwlzdHJ1Y3QgY29tbWFuZF9pdGVtICp1dGlsID0gaXRlbS0+dXRpbDsKKworCWlmICghdXRpbC0+cHJlZml4X2xlbmd0aCB8fAorCSAgICAhaXNfdmFsaWRfcHJlZml4KGl0ZW0tPnN0cmluZywgdXRpbC0+cHJlZml4X2xlbmd0aCkpCisJCXByaW50ZigiICUyZDogJXMiLCBpICsgMSwgaXRlbS0+c3RyaW5nKTsKKwllbHNlCisJCXByaW50ZigiICUyZDogJXMlLipzJXMlcyIsIGkgKyAxLAorCQkgICAgICAgZC0+Y29sb3IsIChpbnQpdXRpbC0+cHJlZml4X2xlbmd0aCwgaXRlbS0+c3RyaW5nLAorCQkgICAgICAgZC0+cmVzZXQsIGl0ZW0tPnN0cmluZyArIHV0aWwtPnByZWZpeF9sZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCBjb21tYW5kX3Byb21wdF9oZWxwKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcykKK3sKKwljb25zdCBjaGFyICpoZWxwX2NvbG9yID0gcy0+aGVscF9jb2xvcjsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgIiVzIiwgXygiUHJvbXB0IGhlbHA6IikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBoZWxwX2NvbG9yLCAiMSAgICAgICAgICAtICVzIiwKKwkJCSBfKCJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBoZWxwX2NvbG9yLCAiZm9vICAgICAgICAtICVzIiwKKwkJCSBfKCJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBoZWxwX2NvbG9yLCAiICAgICAgICAgICAtICVzIiwKKwkJCSBfKCIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIikpOworfQorCitpbnQgcnVuX2FkZF9pKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKQoreworCXN0cnVjdCBhZGRfaV9zdGF0ZSBzID0geyBOVUxMIH07CisJc3RydWN0IHByaW50X2NvbW1hbmRfaXRlbV9kYXRhIGRhdGEgPSB7ICJbIiwgIl0iIH07CisJc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zIG1haW5fbG9vcF9vcHRzID0geworCQl7IDQsIE5fKCIqKiogQ29tbWFuZHMgKioqIiksIHByaW50X2NvbW1hbmRfaXRlbSwgJmRhdGEgfSwKKwkJTl8oIldoYXQgbm93IiksIFNJTkdMRVRPTiB8IElNTUVESUFURSwgY29tbWFuZF9wcm9tcHRfaGVscAorCX07CisJc3RydWN0IHsKKwkJY29uc3QgY2hhciAqc3RyaW5nOworCQljb21tYW5kX3QgY29tbWFuZDsKKwl9IGNvbW1hbmRfbGlzdFtdID0geworCQl7ICJzdGF0dXMiLCBydW5fc3RhdHVzIH0sCisJCXsgInVwZGF0ZSIsIHJ1bl91cGRhdGUgfSwKKwkJeyAicmV2ZXJ0IiwgcnVuX3JldmVydCB9LAorCQl7ICJhZGQgdW50cmFja2VkIiwgcnVuX2FkZF91bnRyYWNrZWQgfSwKKwkJeyAicGF0Y2giLCBydW5fcGF0Y2ggfSwKKwkJeyAiZGlmZiIsIHJ1bl9kaWZmIH0sCisJCXsgInF1aXQiLCBOVUxMIH0sCisJCXsgImhlbHAiLCBydW5faGVscCB9LAorCX07CisJc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgY29tbWFuZHMgPSBQUkVGSVhfSVRFTV9MSVNUX0lOSVQ7CisKKwlzdHJ1Y3QgcHJpbnRfZmlsZV9pdGVtX2RhdGEgcHJpbnRfZmlsZV9pdGVtX2RhdGEgPSB7CisJCSIlMTJzICUxMnMgJXMiLCBOVUxMLCBOVUxMLAorCQlTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVAorCX07CisJc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zIG9wdHMgPSB7CisJCXsgMCwgTlVMTCwgcHJpbnRfZmlsZV9pdGVtLCAmcHJpbnRfZmlsZV9pdGVtX2RhdGEgfSwKKwkJTlVMTCwgMCwgY2hvb3NlX3Byb21wdF9oZWxwCisJfTsKKwlzdHJ1Y3Qgc3RyYnVmIGhlYWRlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwcmVmaXhfaXRlbV9saXN0IGZpbGVzID0gUFJFRklYX0lURU1fTElTVF9JTklUOworCXNzaXplX3QgaTsKKwlpbnQgcmVzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRfbGlzdCk7IGkrKykgeworCQlzdHJ1Y3QgY29tbWFuZF9pdGVtICp1dGlsID0geGNhbGxvYyhzaXplb2YoKnV0aWwpLCAxKTsKKwkJdXRpbC0+Y29tbWFuZCA9IGNvbW1hbmRfbGlzdFtpXS5jb21tYW5kOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmNvbW1hbmRzLml0ZW1zLCBjb21tYW5kX2xpc3RbaV0uc3RyaW5nKQorCQkJLT51dGlsID0gdXRpbDsKKwl9CisKKwlpbml0X2FkZF9pX3N0YXRlKCZzLCByKTsKKworCS8qCisJICogV2hlbiBjb2xvciB3YXMgYXNrZWQgZm9yLCB1c2UgdGhlIHByb21wdCBjb2xvciBmb3IKKwkgKiBoaWdobGlnaHRpbmcsIG90aGVyd2lzZSB1c2Ugc3F1YXJlIGJyYWNrZXRzLgorCSAqLworCWlmIChzLnVzZV9jb2xvcikgeworCQlkYXRhLmNvbG9yID0gcy5wcm9tcHRfY29sb3I7CisJCWRhdGEucmVzZXQgPSBzLnJlc2V0X2NvbG9yOworCX0KKwlwcmludF9maWxlX2l0ZW1fZGF0YS5jb2xvciA9IGRhdGEuY29sb3I7CisJcHJpbnRfZmlsZV9pdGVtX2RhdGEucmVzZXQgPSBkYXRhLnJlc2V0OworCisJc3RyYnVmX2FkZHN0cigmaGVhZGVyLCAiICAgICAgIik7CisJc3RyYnVmX2FkZGYoJmhlYWRlciwgcHJpbnRfZmlsZV9pdGVtX2RhdGEubW9kaWZpZWRfZm10LAorCQkgICAgXygic3RhZ2VkIiksIF8oInVuc3RhZ2VkIiksIF8oInBhdGgiKSk7CisJb3B0cy5saXN0X29wdHMuaGVhZGVyID0gaGVhZGVyLmJ1ZjsKKworCWlmIChkaXNjYXJkX2luZGV4KHItPmluZGV4KSA8IDAgfHwKKwkgICAgcmVwb19yZWFkX2luZGV4KHIpIDwgMCB8fAorCSAgICByZXBvX3JlZnJlc2hfYW5kX3dyaXRlX2luZGV4KHIsIFJFRlJFU0hfUVVJRVQsIDAsIDEsCisJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKSA8IDApCisJCXdhcm5pbmcoXygiY291bGQgbm90IHJlZnJlc2ggaW5kZXgiKSk7CisKKwlyZXMgPSBydW5fc3RhdHVzKCZzLCBwcywgJmZpbGVzLCAmb3B0cyk7CisKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBjb21tYW5kX2l0ZW0gKnV0aWw7CisKKwkJaSA9IGxpc3RfYW5kX2Nob29zZSgmcywgJmNvbW1hbmRzLCAmbWFpbl9sb29wX29wdHMpOworCQlpZiAoaSA8IDAgfHwgaSA+PSBjb21tYW5kcy5pdGVtcy5ucikKKwkJCXV0aWwgPSBOVUxMOworCQllbHNlCisJCQl1dGlsID0gY29tbWFuZHMuaXRlbXMuaXRlbXNbaV0udXRpbDsKKworCQlpZiAoaSA9PSBMSVNUX0FORF9DSE9PU0VfUVVJVCB8fCAodXRpbCAmJiAhdXRpbC0+Y29tbWFuZCkpIHsKKwkJCXByaW50ZihfKCJCeWUuXG4iKSk7CisJCQlyZXMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodXRpbCkKKwkJCXJlcyA9IHV0aWwtPmNvbW1hbmQoJnMsIHBzLCAmZmlsZXMsICZvcHRzKTsKKwl9CisKKwlwcmVmaXhfaXRlbV9saXN0X2NsZWFyKCZmaWxlcyk7CisJc3RyYnVmX3JlbGVhc2UoJnByaW50X2ZpbGVfaXRlbV9kYXRhLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnByaW50X2ZpbGVfaXRlbV9kYXRhLm5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS5pbmRleCk7CisJc3RyYnVmX3JlbGVhc2UoJnByaW50X2ZpbGVfaXRlbV9kYXRhLndvcmt0cmVlKTsKKwlzdHJidWZfcmVsZWFzZSgmaGVhZGVyKTsKKwlwcmVmaXhfaXRlbV9saXN0X2NsZWFyKCZjb21tYW5kcyk7CisJY2xlYXJfYWRkX2lfc3RhdGUoJnMpOworCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2FkZC1pbnRlcmFjdGl2ZS5oIGIvYWRkLWludGVyYWN0aXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzZjEyNQotLS0gL2Rldi9udWxsCisrKyBiL2FkZC1pbnRlcmFjdGl2ZS5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgQUREX0lOVEVSQUNUSVZFX0gKKyNkZWZpbmUgQUREX0lOVEVSQUNUSVZFX0gKKworI2luY2x1ZGUgImNvbG9yLmgiCisKK3N0cnVjdCBhZGRfaV9zdGF0ZSB7CisJc3RydWN0IHJlcG9zaXRvcnkgKnI7CisJaW50IHVzZV9jb2xvcjsKKwljaGFyIGhlYWRlcl9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgaGVscF9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgcHJvbXB0X2NvbG9yW0NPTE9SX01BWExFTl07CisJY2hhciBlcnJvcl9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgcmVzZXRfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGZyYWdpbmZvX2NvbG9yW0NPTE9SX01BWExFTl07CisJY2hhciBjb250ZXh0X2NvbG9yW0NPTE9SX01BWExFTl07CisJY2hhciBmaWxlX29sZF9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgZmlsZV9uZXdfY29sb3JbQ09MT1JfTUFYTEVOXTsKKworCWludCB1c2Vfc2luZ2xlX2tleTsKKwljaGFyICppbnRlcmFjdGl2ZV9kaWZmX2ZpbHRlciwgKmludGVyYWN0aXZlX2RpZmZfYWxnb3JpdGhtOworfTsKKwordm9pZCBpbml0X2FkZF9pX3N0YXRlKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgc3RydWN0IHJlcG9zaXRvcnkgKnIpOwordm9pZCBjbGVhcl9hZGRfaV9zdGF0ZShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMpOworCitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCBwYXRoc3BlYzsKK2ludCBydW5fYWRkX2koc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpOworCitlbnVtIGFkZF9wX21vZGUgeworCUFERF9QX0FERCwKKwlBRERfUF9TVEFTSCwKKwlBRERfUF9SRVNFVCwKKwlBRERfUF9DSEVDS09VVCwKKwlBRERfUF9XT1JLVFJFRSwKK307CisKK2ludCBydW5fYWRkX3Aoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGVudW0gYWRkX3BfbW9kZSBtb2RlLAorCSAgICAgIGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hZGQtcGF0Y2guYyBiL2FkZC1wYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZGFmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hZGQtcGF0Y2guYwpAQCAtMCwwICsxLDE2ODMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFkZC1pbnRlcmFjdGl2ZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tcGF0L3Rlcm1pbmFsLmgiCisKK2VudW0gcHJvbXB0X21vZGVfdHlwZSB7CisJUFJPTVBUX01PREVfQ0hBTkdFID0gMCwgUFJPTVBUX0RFTEVUSU9OLCBQUk9NUFRfSFVOSywKKwlQUk9NUFRfTU9ERV9NQVgsIC8qIG11c3QgYmUgbGFzdCAqLworfTsKKworc3RydWN0IHBhdGNoX21vZGUgeworCS8qCisJICogVGhlIG1hZ2ljIGNvbnN0YW50IDQgaXMgY2hvc2VuIHN1Y2ggdGhhdCBhbGwgcGF0Y2ggbW9kZXMKKwkgKiBwcm92aWRlIGVub3VnaCBzcGFjZSBmb3IgdGhyZWUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBmb2xsb3dlZCBieSBhCisJICogdHJhaWxpbmcgYE5VTExgLgorCSAqLworCWNvbnN0IGNoYXIgKmRpZmZfY21kWzRdLCAqYXBwbHlfYXJnc1s0XSwgKmFwcGx5X2NoZWNrX2FyZ3NbNF07CisJdW5zaWduZWQgaXNfcmV2ZXJzZToxLCBpbmRleF9vbmx5OjEsIGFwcGx5X2Zvcl9jaGVja291dDoxOworCWNvbnN0IGNoYXIgKnByb21wdF9tb2RlW1BST01QVF9NT0RFX01BWF07CisJY29uc3QgY2hhciAqZWRpdF9odW5rX2hpbnQsICpoZWxwX3BhdGNoX3RleHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHBhdGNoX21vZGUgcGF0Y2hfbW9kZV9hZGQgPSB7CisJLmRpZmZfY21kID0geyAiZGlmZi1maWxlcyIsIE5VTEwgfSwKKwkuYXBwbHlfYXJncyA9IHsgIi0tY2FjaGVkIiwgTlVMTCB9LAorCS5hcHBseV9jaGVja19hcmdzID0geyAiLS1jYWNoZWQiLCBOVUxMIH0sCisJLnByb21wdF9tb2RlID0geworCQlOXygiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiKQorCX0sCisJLmVkaXRfaHVua19oaW50ID0gTl8oIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayAiCisJCQkgICAgICJ3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3Igc3RhZ2luZy4iKSwKKwkuaGVscF9wYXRjaF90ZXh0ID0KKwkJTl8oInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKwkJICAgIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisJCSAgICJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyAiCisJCQkib25lc1xuIgorCQkgICAiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisJCSAgICJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluICIKKwkJCSJ0aGUgZmlsZVxuIikKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGF0Y2hfbW9kZSBwYXRjaF9tb2RlX3N0YXNoID0geworCS5kaWZmX2NtZCA9IHsgImRpZmYtaW5kZXgiLCAiSEVBRCIsIE5VTEwgfSwKKwkuYXBwbHlfYXJncyA9IHsgIi0tY2FjaGVkIiwgTlVMTCB9LAorCS5hcHBseV9jaGVja19hcmdzID0geyAiLS1jYWNoZWQiLCBOVUxMIH0sCisJLnByb21wdF9tb2RlID0geworCQlOXygiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCS5lZGl0X2h1bmtfaGludCA9IE5fKCJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgIgorCQkJICAgICAid2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yIHN0YXNoaW5nLiIpLAorCS5oZWxwX3BhdGNoX3RleHQgPQorCQlOXygieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorCQkgICAibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKwkJICAgInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nICIKKwkJCSJvbmVzXG4iCisJCSAgICJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKwkJICAgImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gIgorCQkJInRoZSBmaWxlXG4iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGF0Y2hfbW9kZSBwYXRjaF9tb2RlX3Jlc2V0X2hlYWQgPSB7CisJLmRpZmZfY21kID0geyAiZGlmZi1pbmRleCIsICItLWNhY2hlZCIsIE5VTEwgfSwKKwkuYXBwbHlfYXJncyA9IHsgIi1SIiwgIi0tY2FjaGVkIiwgTlVMTCB9LAorCS5hcHBseV9jaGVja19hcmdzID0geyAiLVIiLCAiLS1jYWNoZWQiLCBOVUxMIH0sCisJLmlzX3JldmVyc2UgPSAxLAorCS5pbmRleF9vbmx5ID0gMSwKKwkucHJvbXB0X21vZGUgPSB7CisJCU5fKCJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJVbnN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJLmVkaXRfaHVua19oaW50ID0gTl8oIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayAiCisJCQkgICAgICJ3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgdW5zdGFnaW5nLiIpLAorCS5oZWxwX3BhdGNoX3RleHQgPQorCQlOXygieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisJCSAgICJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisJCSAgICJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nICIKKwkJCSJvbmVzXG4iCisJCSAgICJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorCQkgICAiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluICIKKwkJCSJ0aGUgZmlsZVxuIiksCit9OworCitzdGF0aWMgc3RydWN0IHBhdGNoX21vZGUgcGF0Y2hfbW9kZV9yZXNldF9ub3RoZWFkID0geworCS5kaWZmX2NtZCA9IHsgImRpZmYtaW5kZXgiLCAiLVIiLCAiLS1jYWNoZWQiLCBOVUxMIH0sCisJLmFwcGx5X2FyZ3MgPSB7ICItLWNhY2hlZCIsIE5VTEwgfSwKKwkuYXBwbHlfY2hlY2tfYXJncyA9IHsgIi0tY2FjaGVkIiwgTlVMTCB9LAorCS5pbmRleF9vbmx5ID0gMSwKKwkucHJvbXB0X21vZGUgPSB7CisJCU5fKCJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJLmVkaXRfaHVua19oaW50ID0gTl8oIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayAiCisJCQkgICAgICJ3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgYXBwbHlpbmcuIiksCisJLmhlbHBfcGF0Y2hfdGV4dCA9CisJCU5fKCJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisJCSAgICJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorCQkgICAicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgIgorCQkJIm9uZXNcbiIKKwkJICAgImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorCQkgICAiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiAiCisJCQkidGhlIGZpbGVcbiIpLAorfTsKKworc3RhdGljIHN0cnVjdCBwYXRjaF9tb2RlIHBhdGNoX21vZGVfY2hlY2tvdXRfaW5kZXggPSB7CisJLmRpZmZfY21kID0geyAiZGlmZi1maWxlcyIsIE5VTEwgfSwKKwkuYXBwbHlfYXJncyA9IHsgIi1SIiwgTlVMTCB9LAorCS5hcHBseV9jaGVja19hcmdzID0geyAiLVIiLCBOVUxMIH0sCisJLmlzX3JldmVyc2UgPSAxLAorCS5wcm9tcHRfbW9kZSA9IHsKKwkJTl8oIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwkuZWRpdF9odW5rX2hpbnQgPSBOXygiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rICIKKwkJCSAgICAgIndpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciBkaXNjYXJkaW5nLiIpLAorCS5oZWxwX3BhdGNoX3RleHQgPQorCQlOXygieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKwkJICAgIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorCQkgICAicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyAiCisJCQkib25lc1xuIgorCQkgICAiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKwkJICAgImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiAiCisJCQkidGhlIGZpbGVcbiIpLAorfTsKKworc3RhdGljIHN0cnVjdCBwYXRjaF9tb2RlIHBhdGNoX21vZGVfY2hlY2tvdXRfaGVhZCA9IHsKKwkuZGlmZl9jbWQgPSB7ICJkaWZmLWluZGV4IiwgTlVMTCB9LAorCS5hcHBseV9mb3JfY2hlY2tvdXQgPSAxLAorCS5hcHBseV9jaGVja19hcmdzID0geyAiLVIiLCBOVUxMIH0sCisJLmlzX3JldmVyc2UgPSAxLAorCS5wcm9tcHRfbW9kZSA9IHsKKwkJTl8oIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwkuZWRpdF9odW5rX2hpbnQgPSBOXygiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rICIKKwkJCSAgICAgIndpbGwgaW1tZWRpYXRlbHkgYmUgbWFya2VkIGZvciBkaXNjYXJkaW5nLiIpLAorCS5oZWxwX3BhdGNoX3RleHQgPQorCQlOXygieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisJCSAgICJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisJCSAgICJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nICIKKwkJCSJvbmVzXG4iCisJCSAgICJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorCQkgICAiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluICIKKwkJCSJ0aGUgZmlsZVxuIiksCit9OworCitzdGF0aWMgc3RydWN0IHBhdGNoX21vZGUgcGF0Y2hfbW9kZV9jaGVja291dF9ub3RoZWFkID0geworCS5kaWZmX2NtZCA9IHsgImRpZmYtaW5kZXgiLCAiLVIiLCBOVUxMIH0sCisJLmFwcGx5X2Zvcl9jaGVja291dCA9IDEsCisJLmFwcGx5X2NoZWNrX2FyZ3MgPSB7IE5VTEwgfSwKKwkucHJvbXB0X21vZGUgPSB7CisJCU5fKCJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlOXygiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJLmVkaXRfaHVua19oaW50ID0gTl8oIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayAiCisJCQkgICAgICJ3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgYXBwbHlpbmcuIiksCisJLmhlbHBfcGF0Y2hfdGV4dCA9CisJCU5fKCJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorCQkgICAibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisJCSAgICJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyAiCisJCQkib25lc1xuIgorCQkgICAiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisJCSAgICJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluICIKKwkJCSJ0aGUgZmlsZVxuIiksCit9OworCitzdGF0aWMgc3RydWN0IHBhdGNoX21vZGUgcGF0Y2hfbW9kZV93b3JrdHJlZV9oZWFkID0geworCS5kaWZmX2NtZCA9IHsgImRpZmYtaW5kZXgiLCBOVUxMIH0sCisJLmFwcGx5X2FyZ3MgPSB7ICItUiIsIE5VTEwgfSwKKwkuYXBwbHlfY2hlY2tfYXJncyA9IHsgIi1SIiwgTlVMTCB9LAorCS5pc19yZXZlcnNlID0gMSwKKwkucHJvbXB0X21vZGUgPSB7CisJCU5fKCJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJLmVkaXRfaHVua19oaW50ID0gTl8oIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayAiCisJCQkgICAgICJ3aWxsIGltbWVkaWF0ZWx5IGJlIG1hcmtlZCBmb3IgZGlzY2FyZGluZy4iKSwKKwkuaGVscF9wYXRjaF90ZXh0ID0KKwkJTl8oInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisJCSAgICJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKwkJICAgInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgIgorCQkJIm9uZXNcbiIKKwkJICAgImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisJCSAgICJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gIgorCQkJInRoZSBmaWxlXG4iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGF0Y2hfbW9kZSBwYXRjaF9tb2RlX3dvcmt0cmVlX25vdGhlYWQgPSB7CisJLmRpZmZfY21kID0geyAiZGlmZi1pbmRleCIsICItUiIsIE5VTEwgfSwKKwkuYXBwbHlfYXJncyA9IHsgTlVMTCB9LAorCS5hcHBseV9jaGVja19hcmdzID0geyBOVUxMIH0sCisJLnByb21wdF9tb2RlID0geworCQlOXygiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCU5fKCJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJTl8oIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCS5lZGl0X2h1bmtfaGludCA9IE5fKCJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgIgorCQkJICAgICAid2lsbCBpbW1lZGlhdGVseSBiZSBtYXJrZWQgZm9yIGFwcGx5aW5nLiIpLAorCS5oZWxwX3BhdGNoX3RleHQgPQorCQlOXygieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorCQkgICAibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKwkJICAgInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nICIKKwkJCSJvbmVzXG4iCisJCSAgICJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKwkJICAgImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gIgorCQkJInRoZSBmaWxlXG4iKSwKK307CisKK3N0cnVjdCBodW5rX2hlYWRlciB7CisJdW5zaWduZWQgbG9uZyBvbGRfb2Zmc2V0LCBvbGRfY291bnQsIG5ld19vZmZzZXQsIG5ld19jb3VudDsKKwkvKgorCSAqIFN0YXJ0L2VuZCBvZmZzZXRzIHRvIHRoZSBleHRyYSB0ZXh0IGFmdGVyIHRoZSBzZWNvbmQgYEBAYCBpbiB0aGUKKwkgKiBodW5rIGhlYWRlciwgZS5nLiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBUaGlzIGlzIGV4cGVjdGVkIHRvCisJICogaW5jbHVkZSB0aGUgbmV3bGluZS4KKwkgKi8KKwlzaXplX3QgZXh0cmFfc3RhcnQsIGV4dHJhX2VuZCwgY29sb3JlZF9leHRyYV9zdGFydCwgY29sb3JlZF9leHRyYV9lbmQ7Cit9OworCitzdHJ1Y3QgaHVuayB7CisJc2l6ZV90IHN0YXJ0LCBlbmQsIGNvbG9yZWRfc3RhcnQsIGNvbG9yZWRfZW5kLCBzcGxpdHRhYmxlX2ludG87CisJc3NpemVfdCBkZWx0YTsKKwllbnVtIHsgVU5ERUNJREVEX0hVTksgPSAwLCBTS0lQX0hVTkssIFVTRV9IVU5LIH0gdXNlOworCXN0cnVjdCBodW5rX2hlYWRlciBoZWFkZXI7Cit9OworCitzdHJ1Y3QgYWRkX3Bfc3RhdGUgeworCXN0cnVjdCBhZGRfaV9zdGF0ZSBzOworCXN0cnVjdCBzdHJidWYgYW5zd2VyLCBidWY7CisKKwkvKiBwYXJzZWQgZGlmZiAqLworCXN0cnVjdCBzdHJidWYgcGxhaW4sIGNvbG9yZWQ7CisJc3RydWN0IGZpbGVfZGlmZiB7CisJCXN0cnVjdCBodW5rIGhlYWQ7CisJCXN0cnVjdCBodW5rICpodW5rOworCQlzaXplX3QgaHVua19uciwgaHVua19hbGxvYzsKKwkJdW5zaWduZWQgZGVsZXRlZDoxLCBtb2RlX2NoYW5nZToxLGJpbmFyeToxOworCX0gKmZpbGVfZGlmZjsKKwlzaXplX3QgZmlsZV9kaWZmX25yOworCisJLyogcGF0Y2ggbW9kZSAqLworCXN0cnVjdCBwYXRjaF9tb2RlICptb2RlOworCWNvbnN0IGNoYXIgKnJldmlzaW9uOworfTsKKworc3RhdGljIHZvaWQgZXJyKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlmcHV0cyhzLT5zLmVycm9yX2NvbG9yLCBzdGRlcnIpOworCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdzKTsKKwlmcHV0cyhzLT5zLnJlc2V0X2NvbG9yLCBzdGRlcnIpOworCWZwdXRjKCdcbicsIHN0ZGVycik7CisJdmFfZW5kKGFyZ3MpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9jaGlsZF9wcm9jZXNzKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywKKwkJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY3AsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNvbnN0IGNoYXIgKmFyZzsKKworCXZhX3N0YXJ0KGFwLCBjcCk7CisJd2hpbGUgKChhcmcgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKikpKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCBhcmcpOworCXZhX2VuZChhcCk7CisKKwljcC0+Z2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNoZigmY3AtPmVudl9hcnJheSwKKwkJCSBJTkRFWF9FTlZJUk9OTUVOVCAiPSVzIiwgcy0+cy5yLT5pbmRleF9maWxlKTsKK30KKworc3RhdGljIGludCBwYXJzZV9yYW5nZShjb25zdCBjaGFyICoqcCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCwgdW5zaWduZWQgbG9uZyAqY291bnQpCit7CisJY2hhciAqcGVuZDsKKworCSpvZmZzZXQgPSBzdHJ0b3VsKCpwLCAmcGVuZCwgMTApOworCWlmIChwZW5kID09ICpwKQorCQlyZXR1cm4gLTE7CisJaWYgKCpwZW5kICE9ICcsJykgeworCQkqY291bnQgPSAxOworCQkqcCA9IHBlbmQ7CisJCXJldHVybiAwOworCX0KKwkqY291bnQgPSBzdHJ0b3VsKHBlbmQgKyAxLCAoY2hhciAqKilwLCAxMCk7CisJcmV0dXJuICpwID09IHBlbmQgKyAxID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2h1bmtfaGVhZGVyKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IGh1bmsgKmh1bmspCit7CisJc3RydWN0IGh1bmtfaGVhZGVyICpoZWFkZXIgPSAmaHVuay0+aGVhZGVyOworCWNvbnN0IGNoYXIgKmxpbmUgPSBzLT5wbGFpbi5idWYgKyBodW5rLT5zdGFydCwgKnAgPSBsaW5lOworCWNoYXIgKmVvbCA9IG1lbWNocihwLCAnXG4nLCBzLT5wbGFpbi5sZW4gLSBodW5rLT5zdGFydCk7CisKKwlpZiAoIWVvbCkKKwkJZW9sID0gcy0+cGxhaW4uYnVmICsgcy0+cGxhaW4ubGVuOworCisJaWYgKCFza2lwX3ByZWZpeChwLCAiQEAgLSIsICZwKSB8fAorCSAgICBwYXJzZV9yYW5nZSgmcCwgJmhlYWRlci0+b2xkX29mZnNldCwgJmhlYWRlci0+b2xkX2NvdW50KSA8IDAgfHwKKwkgICAgIXNraXBfcHJlZml4KHAsICIgKyIsICZwKSB8fAorCSAgICBwYXJzZV9yYW5nZSgmcCwgJmhlYWRlci0+bmV3X29mZnNldCwgJmhlYWRlci0+bmV3X2NvdW50KSA8IDAgfHwKKwkgICAgIXNraXBfcHJlZml4KHAsICIgQEAiLCAmcCkpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIiksCisJCQkgICAgIChpbnQpKGVvbCAtIGxpbmUpLCBsaW5lKTsKKworCWh1bmstPnN0YXJ0ID0gZW9sIC0gcy0+cGxhaW4uYnVmICsgKCplb2wgPT0gJ1xuJyk7CisJaGVhZGVyLT5leHRyYV9zdGFydCA9IHAgLSBzLT5wbGFpbi5idWY7CisJaGVhZGVyLT5leHRyYV9lbmQgPSBodW5rLT5zdGFydDsKKworCWlmICghcy0+Y29sb3JlZC5sZW4pIHsKKwkJaGVhZGVyLT5jb2xvcmVkX2V4dHJhX3N0YXJ0ID0gaGVhZGVyLT5jb2xvcmVkX2V4dHJhX2VuZCA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qIE5vdyBmaW5kIHRoZSBleHRyYSB0ZXh0IGluIHRoZSBjb2xvcmVkIGRpZmYgKi8KKwlsaW5lID0gcy0+Y29sb3JlZC5idWYgKyBodW5rLT5jb2xvcmVkX3N0YXJ0OworCWVvbCA9IG1lbWNocihsaW5lLCAnXG4nLCBzLT5jb2xvcmVkLmxlbiAtIGh1bmstPmNvbG9yZWRfc3RhcnQpOworCWlmICghZW9sKQorCQllb2wgPSBzLT5jb2xvcmVkLmJ1ZiArIHMtPmNvbG9yZWQubGVuOworCXAgPSBtZW1tZW0obGluZSwgZW9sIC0gbGluZSwgIkBAIC0iLCA0KTsKKwlpZiAoIXApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciKSwKKwkJCSAgICAgKGludCkoZW9sIC0gbGluZSksIGxpbmUpOworCXAgPSBtZW1tZW0ocCArIDQsIGVvbCAtIHAgLSA0LCAiIEBAIiwgMyk7CisJaWYgKCFwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgaHVuayBoZWFkZXIgJyUuKnMnIiksCisJCQkgICAgIChpbnQpKGVvbCAtIGxpbmUpLCBsaW5lKTsKKwlodW5rLT5jb2xvcmVkX3N0YXJ0ID0gZW9sIC0gcy0+Y29sb3JlZC5idWYgKyAoKmVvbCA9PSAnXG4nKTsKKwloZWFkZXItPmNvbG9yZWRfZXh0cmFfc3RhcnQgPSBwICsgMyAtIHMtPmNvbG9yZWQuYnVmOworCWhlYWRlci0+Y29sb3JlZF9leHRyYV9lbmQgPSBodW5rLT5jb2xvcmVkX3N0YXJ0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfb2N0YWwoY29uc3QgY2hhciAqcCwgc2l6ZV90IGxlbikKK3sKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAobGVuLS0pCisJCWlmICgqcCA8ICcwJyB8fCAqKHArKykgPiAnNycpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwYXJzZV9kaWZmKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCWNvbnN0IGNoYXIgKmRpZmZfYWxnb3JpdGhtID0gcy0+cy5pbnRlcmFjdGl2ZV9kaWZmX2FsZ29yaXRobTsKKwlzdHJ1Y3Qgc3RyYnVmICpwbGFpbiA9ICZzLT5wbGFpbiwgKmNvbG9yZWQgPSBOVUxMOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNoYXIgKnAsICpwZW5kLCAqY29sb3JlZF9wID0gTlVMTCwgKmNvbG9yZWRfcGVuZCA9IE5VTEwsIG1hcmtlciA9ICdcMCc7CisJc2l6ZV90IGZpbGVfZGlmZl9hbGxvYyA9IDAsIGksIGNvbG9yX2FyZ19pbmRleDsKKwlzdHJ1Y3QgZmlsZV9kaWZmICpmaWxlX2RpZmYgPSBOVUxMOworCXN0cnVjdCBodW5rICpodW5rID0gTlVMTDsKKwlpbnQgcmVzOworCisJYXJndl9hcnJheV9wdXNodigmYXJncywgcy0+bW9kZS0+ZGlmZl9jbWQpOworCWlmIChkaWZmX2FsZ29yaXRobSkKKwkJYXJndl9hcnJheV9wdXNoZigmYXJncywgIi0tZGlmZi1hbGdvcml0aG09JXMiLCBkaWZmX2FsZ29yaXRobSk7CisJaWYgKHMtPnJldmlzaW9uKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsCisJCQkJLyogY291bGQgYmUgb24gYW4gdW5ib3JuIGJyYW5jaCAqLworCQkJCSFzdHJjbXAoIkhFQUQiLCBzLT5yZXZpc2lvbikgJiYKKwkJCQlnZXRfb2lkKCJIRUFEIiwgJm9pZCkgPworCQkJCWVtcHR5X3RyZWVfb2lkX2hleCgpIDogcy0+cmV2aXNpb24pOworCX0KKwljb2xvcl9hcmdfaW5kZXggPSBhcmdzLmFyZ2M7CisJLyogVXNlIGAtLW5vLWNvbG9yYCBleHBsaWNpdGx5LCBqdXN0IGluIGNhc2UgYGRpZmYuY29sb3IgPSBhbHdheXNgLiAqLworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICItLW5vLWNvbG9yIiwgIi1wIiwgIi0tIiwgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IHBzLT5ucjsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIHBzLT5pdGVtc1tpXS5vcmlnaW5hbCk7CisKKwlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZjcCwgTlVMTCk7CisJY3AuYXJndiA9IGFyZ3MuYXJndjsKKwlyZXMgPSBjYXB0dXJlX2NvbW1hbmQoJmNwLCBwbGFpbiwgMCk7CisJaWYgKHJlcykgeworCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBkaWZmIikpOworCX0KKwlpZiAoIXBsYWluLT5sZW4pIHsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCXJldHVybiAwOworCX0KKwlzdHJidWZfY29tcGxldGVfbGluZShwbGFpbik7CisKKwlpZiAod2FudF9jb2xvcl9mZCgxLCAtMSkpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY29sb3JlZF9jcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJY29uc3QgY2hhciAqZGlmZl9maWx0ZXIgPSBzLT5zLmludGVyYWN0aXZlX2RpZmZfZmlsdGVyOworCisJCXNldHVwX2NoaWxkX3Byb2Nlc3MocywgJmNvbG9yZWRfY3AsIE5VTEwpOworCQl4c25wcmludGYoKGNoYXIgKilhcmdzLmFyZ3ZbY29sb3JfYXJnX2luZGV4XSwgOCwgIi0tY29sb3IiKTsKKwkJY29sb3JlZF9jcC5hcmd2ID0gYXJncy5hcmd2OworCQljb2xvcmVkID0gJnMtPmNvbG9yZWQ7CisJCXJlcyA9IGNhcHR1cmVfY29tbWFuZCgmY29sb3JlZF9jcCwgY29sb3JlZCwgMCk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCQlpZiAocmVzKQorCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiKSk7CisKKwkJaWYgKGRpZmZfZmlsdGVyKSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBmaWx0ZXJfY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJCXNldHVwX2NoaWxkX3Byb2Nlc3MocywgJmZpbHRlcl9jcCwKKwkJCQkJICAgIGRpZmZfZmlsdGVyLCBOVUxMKTsKKwkJCWZpbHRlcl9jcC5naXRfY21kID0gMDsKKwkJCWZpbHRlcl9jcC51c2Vfc2hlbGwgPSAxOworCQkJc3RyYnVmX3Jlc2V0KCZzLT5idWYpOworCQkJaWYgKHBpcGVfY29tbWFuZCgmZmlsdGVyX2NwLAorCQkJCQkgY29sb3JlZC0+YnVmLCBjb2xvcmVkLT5sZW4sCisJCQkJCSAmcy0+YnVmLCBjb2xvcmVkLT5sZW4sCisJCQkJCSBOVUxMLCAwKSA8IDApCisJCQkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byBydW4gJyVzJyIpLAorCQkJCQkgICAgIGRpZmZfZmlsdGVyKTsKKwkJCXN0cmJ1Zl9zd2FwKGNvbG9yZWQsICZzLT5idWYpOworCQl9CisKKwkJc3RyYnVmX2NvbXBsZXRlX2xpbmUoY29sb3JlZCk7CisJCWNvbG9yZWRfcCA9IGNvbG9yZWQtPmJ1ZjsKKwkJY29sb3JlZF9wZW5kID0gY29sb3JlZF9wICsgY29sb3JlZC0+bGVuOworCX0KKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKworCS8qIHBhcnNlIGZpbGVzIGFuZCBodW5rcyAqLworCXAgPSBwbGFpbi0+YnVmOworCXBlbmQgPSBwICsgcGxhaW4tPmxlbjsKKwl3aGlsZSAocCAhPSBwZW5kKSB7CisJCWNoYXIgKmVvbCA9IG1lbWNocihwLCAnXG4nLCBwZW5kIC0gcCk7CisJCWNvbnN0IGNoYXIgKmRlbGV0ZWQgPSBOVUxMLCAqbW9kZV9jaGFuZ2UgPSBOVUxMOworCisJCWlmICghZW9sKQorCQkJZW9sID0gcGVuZDsKKworCQlpZiAoc3RhcnRzX3dpdGgocCwgImRpZmYgIikpIHsKKwkJCXMtPmZpbGVfZGlmZl9ucisrOworCQkJQUxMT0NfR1JPVyhzLT5maWxlX2RpZmYsIHMtPmZpbGVfZGlmZl9uciwKKwkJCQkgICBmaWxlX2RpZmZfYWxsb2MpOworCQkJZmlsZV9kaWZmID0gcy0+ZmlsZV9kaWZmICsgcy0+ZmlsZV9kaWZmX25yIC0gMTsKKwkJCW1lbXNldChmaWxlX2RpZmYsIDAsIHNpemVvZigqZmlsZV9kaWZmKSk7CisJCQlodW5rID0gJmZpbGVfZGlmZi0+aGVhZDsKKwkJCWh1bmstPnN0YXJ0ID0gcCAtIHBsYWluLT5idWY7CisJCQlpZiAoY29sb3JlZF9wKQorCQkJCWh1bmstPmNvbG9yZWRfc3RhcnQgPSBjb2xvcmVkX3AgLSBjb2xvcmVkLT5idWY7CisJCQltYXJrZXIgPSAnXDAnOworCQl9IGVsc2UgaWYgKHAgPT0gcGxhaW4tPmJ1ZikKKwkJCUJVRygiZGlmZiBzdGFydHMgd2l0aCB1bmV4cGVjdGVkIGxpbmU6XG4iCisJCQkgICAgIiUuKnNcbiIsIChpbnQpKGVvbCAtIHApLCBwKTsKKwkJZWxzZSBpZiAoZmlsZV9kaWZmLT5kZWxldGVkKQorCQkJOyAvKiBrZWVwIHRoZSByZXN0IG9mIHRoZSBmaWxlIGluIGEgc2luZ2xlICJodW5rIiAqLworCQllbHNlIGlmIChzdGFydHNfd2l0aChwLCAiQEAgIikgfHwKKwkJCSAoaHVuayA9PSAmZmlsZV9kaWZmLT5oZWFkICYmCisJCQkgIHNraXBfcHJlZml4KHAsICJkZWxldGVkIGZpbGUiLCAmZGVsZXRlZCkpKSB7CisJCQlpZiAobWFya2VyID09ICctJyB8fCBtYXJrZXIgPT0gJysnKQorCQkJCS8qCisJCQkJICogU2hvdWxkIG5vdCBoYXBwZW47IHByZXZpb3VzIGh1bmsgZGlkIG5vdCBlbmQKKwkJCQkgKiBpbiBhIGNvbnRleHQgbGluZT8gSGFuZGxlIGl0IGFueXdheS4KKwkJCQkgKi8KKwkJCQlodW5rLT5zcGxpdHRhYmxlX2ludG8rKzsKKworCQkJZmlsZV9kaWZmLT5odW5rX25yKys7CisJCQlBTExPQ19HUk9XKGZpbGVfZGlmZi0+aHVuaywgZmlsZV9kaWZmLT5odW5rX25yLAorCQkJCSAgIGZpbGVfZGlmZi0+aHVua19hbGxvYyk7CisJCQlodW5rID0gZmlsZV9kaWZmLT5odW5rICsgZmlsZV9kaWZmLT5odW5rX25yIC0gMTsKKwkJCW1lbXNldChodW5rLCAwLCBzaXplb2YoKmh1bmspKTsKKworCQkJaHVuay0+c3RhcnQgPSBwIC0gcGxhaW4tPmJ1ZjsKKwkJCWlmIChjb2xvcmVkKQorCQkJCWh1bmstPmNvbG9yZWRfc3RhcnQgPSBjb2xvcmVkX3AgLSBjb2xvcmVkLT5idWY7CisKKwkJCWlmIChkZWxldGVkKQorCQkJCWZpbGVfZGlmZi0+ZGVsZXRlZCA9IDE7CisJCQllbHNlIGlmIChwYXJzZV9odW5rX2hlYWRlcihzLCBodW5rKSA8IDApCisJCQkJcmV0dXJuIC0xOworCisJCQkvKgorCQkJICogU3RhcnQgY291bnRpbmcgaW50byBob3cgbWFueSBodW5rcyB0aGlzIG9uZSBjYW4gYmUKKwkJCSAqIHNwbGl0CisJCQkgKi8KKwkJCW1hcmtlciA9ICpwOworCQl9IGVsc2UgaWYgKGh1bmsgPT0gJmZpbGVfZGlmZi0+aGVhZCAmJgorCQkJICAgc2tpcF9wcmVmaXgocCwgIm9sZCBtb2RlICIsICZtb2RlX2NoYW5nZSkgJiYKKwkJCSAgIGlzX29jdGFsKG1vZGVfY2hhbmdlLCBlb2wgLSBtb2RlX2NoYW5nZSkpIHsKKwkJCWlmIChmaWxlX2RpZmYtPm1vZGVfY2hhbmdlKQorCQkJCUJVRygiZG91YmxlIG1vZGUgY2hhbmdlP1xuXG4lLipzIiwKKwkJCQkgICAgKGludCkoZW9sIC0gcGxhaW4tPmJ1ZiksIHBsYWluLT5idWYpOworCQkJaWYgKGZpbGVfZGlmZi0+aHVua19ucisrKQorCQkJCUJVRygibW9kZSBjaGFuZ2UgaW4gdGhlIG1pZGRsZT9cblxuJS4qcyIsCisJCQkJICAgIChpbnQpKGVvbCAtIHBsYWluLT5idWYpLCBwbGFpbi0+YnVmKTsKKworCQkJLyoKKwkJCSAqIERvICpub3QqIGNoYW5nZSBgaHVua2A6IHRoZSBtb2RlIGNoYW5nZSBwc2V1ZG8taHVuaworCQkJICogaXMgX3BhcnQgb2ZfIHRoZSBoZWFkZXIgImh1bmsiLgorCQkJICovCisJCQlmaWxlX2RpZmYtPm1vZGVfY2hhbmdlID0gMTsKKwkJCUFMTE9DX0dST1coZmlsZV9kaWZmLT5odW5rLCBmaWxlX2RpZmYtPmh1bmtfbnIsCisJCQkJICAgZmlsZV9kaWZmLT5odW5rX2FsbG9jKTsKKwkJCW1lbXNldChmaWxlX2RpZmYtPmh1bmssIDAsIHNpemVvZihzdHJ1Y3QgaHVuaykpOworCQkJZmlsZV9kaWZmLT5odW5rLT5zdGFydCA9IHAgLSBwbGFpbi0+YnVmOworCQkJaWYgKGNvbG9yZWRfcCkKKwkJCQlmaWxlX2RpZmYtPmh1bmstPmNvbG9yZWRfc3RhcnQgPQorCQkJCQljb2xvcmVkX3AgLSBjb2xvcmVkLT5idWY7CisJCX0gZWxzZSBpZiAoaHVuayA9PSAmZmlsZV9kaWZmLT5oZWFkICYmCisJCQkgICBza2lwX3ByZWZpeChwLCAibmV3IG1vZGUgIiwgJm1vZGVfY2hhbmdlKSAmJgorCQkJICAgaXNfb2N0YWwobW9kZV9jaGFuZ2UsIGVvbCAtIG1vZGVfY2hhbmdlKSkgeworCisJCQkvKgorCQkJICogRXh0ZW5kIHRoZSAibW9kZSBjaGFuZ2UiIHBzZXVkby1odW5rIHRvIGluY2x1ZGUgYWxzbworCQkJICogdGhlICJuZXcgbW9kZSIgbGluZS4KKwkJCSAqLworCQkJaWYgKCFmaWxlX2RpZmYtPm1vZGVfY2hhbmdlKQorCQkJCUJVRygiJ25ldyBtb2RlJyB3aXRob3V0ICdvbGQgbW9kZSc/XG5cbiUuKnMiLAorCQkJCSAgICAoaW50KShlb2wgLSBwbGFpbi0+YnVmKSwgcGxhaW4tPmJ1Zik7CisJCQlpZiAoZmlsZV9kaWZmLT5odW5rX25yICE9IDEpCisJCQkJQlVHKCJtb2RlIGNoYW5nZSBpbiB0aGUgbWlkZGxlP1xuXG4lLipzIiwKKwkJCQkgICAgKGludCkoZW9sIC0gcGxhaW4tPmJ1ZiksIHBsYWluLT5idWYpOworCQkJaWYgKHAgLSBwbGFpbi0+YnVmICE9IGZpbGVfZGlmZi0+aHVuay0+ZW5kKQorCQkJCUJVRygiJ25ldyBtb2RlJyBkb2VzIG5vdCBpbW1lZGlhdGVseSBmb2xsb3cgIgorCQkJCSAgICAiJ29sZCBtb2RlJz9cblxuJS4qcyIsCisJCQkJICAgIChpbnQpKGVvbCAtIHBsYWluLT5idWYpLCBwbGFpbi0+YnVmKTsKKwkJfSBlbHNlIGlmIChodW5rID09ICZmaWxlX2RpZmYtPmhlYWQgJiYKKwkJCSAgIHN0YXJ0c193aXRoKHAsICJCaW5hcnkgZmlsZXMgIikpCisJCQlmaWxlX2RpZmYtPmJpbmFyeSA9IDE7CisKKwkJaWYgKGZpbGVfZGlmZi0+ZGVsZXRlZCAmJiBmaWxlX2RpZmYtPm1vZGVfY2hhbmdlKQorCQkJQlVHKCJkaWZmIGNvbnRhaW5zIGRlbGV0ZSAqYW5kKiBhIG1vZGUgY2hhbmdlPyE/XG4lLipzIiwKKwkJCSAgICAoaW50KShlb2wgLSAocGxhaW4tPmJ1ZiArIGZpbGVfZGlmZi0+aGVhZC5zdGFydCkpLAorCQkJICAgIHBsYWluLT5idWYgKyBmaWxlX2RpZmYtPmhlYWQuc3RhcnQpOworCisJCWlmICgobWFya2VyID09ICctJyB8fCBtYXJrZXIgPT0gJysnKSAmJiAqcCA9PSAnICcpCisJCQlodW5rLT5zcGxpdHRhYmxlX2ludG8rKzsKKwkJaWYgKG1hcmtlciAmJiAqcCAhPSAnXFwnKQorCQkJbWFya2VyID0gKnA7CisKKwkJcCA9IGVvbCA9PSBwZW5kID8gcGVuZCA6IGVvbCArIDE7CisJCWh1bmstPmVuZCA9IHAgLSBwbGFpbi0+YnVmOworCisJCWlmIChjb2xvcmVkKSB7CisJCQljaGFyICpjb2xvcmVkX2VvbCA9IG1lbWNocihjb2xvcmVkX3AsICdcbicsCisJCQkJCQkgICBjb2xvcmVkX3BlbmQgLSBjb2xvcmVkX3ApOworCQkJaWYgKGNvbG9yZWRfZW9sKQorCQkJCWNvbG9yZWRfcCA9IGNvbG9yZWRfZW9sICsgMTsKKwkJCWVsc2UgaWYgKHAgIT0gcGVuZCkKKwkJCQkvKiBjb2xvcmVkIHNob3J0ZXIgdGhhbiBub24tY29sb3JlZD8gKi8KKwkJCQlnb3RvIG1pc21hdGNoZWRfb3V0cHV0OworCQkJZWxzZQorCQkJCWNvbG9yZWRfcCA9IGNvbG9yZWRfcGVuZDsKKworCQkJaHVuay0+Y29sb3JlZF9lbmQgPSBjb2xvcmVkX3AgLSBjb2xvcmVkLT5idWY7CisJCX0KKworCQlpZiAobW9kZV9jaGFuZ2UpIHsKKwkJCWlmIChmaWxlX2RpZmYtPmh1bmtfbnIgIT0gMSkKKwkJCQlCVUcoIm1vZGUgY2hhbmdlIGluIGh1bmsgIyVkPz8/IiwKKwkJCQkgICAgKGludClmaWxlX2RpZmYtPmh1bmtfbnIpOworCQkJLyogQWRqdXN0IHRoZSBlbmQgb2YgdGhlICJtb2RlIGNoYW5nZSIgcHNldWRvLWh1bmsgKi8KKwkJCWZpbGVfZGlmZi0+aHVuay0+ZW5kID0gaHVuay0+ZW5kOworCQkJaWYgKGNvbG9yZWQpCisJCQkJZmlsZV9kaWZmLT5odW5rLT5jb2xvcmVkX2VuZCA9IGh1bmstPmNvbG9yZWRfZW5kOworCQl9CisJfQorCisJaWYgKG1hcmtlciA9PSAnLScgfHwgbWFya2VyID09ICcrJykKKwkJLyoKKwkJICogTGFzdCBodW5rIGVuZGVkIGluIG5vbi1jb250ZXh0IGxpbmUgKGkuZS4gaXQgYXBwZW5kZWQgbGluZXMKKwkJICogdG8gdGhlIGZpbGUsIHNvIHRoZXJlIGFyZSBubyB0cmFpbGluZyBjb250ZXh0IGxpbmVzKS4KKwkJICovCisJCWh1bmstPnNwbGl0dGFibGVfaW50bysrOworCisJLyogbm9uLWNvbG9yZWQgc2hvcnRlciB0aGFuIGNvbG9yZWQ/ICovCisJaWYgKGNvbG9yZWRfcCAhPSBjb2xvcmVkX3BlbmQpIHsKK21pc21hdGNoZWRfb3V0cHV0OgorCQllcnJvcihfKCJtaXNtYXRjaGVkIG91dHB1dCBmcm9tIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIiKSk7CisJCWFkdmlzZShfKCJZb3VyIGZpbHRlciBtdXN0IG1haW50YWluIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZVxuIgorCQkJICJiZXR3ZWVuIGl0cyBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IGZpbmRfbmV4dF9saW5lKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3Qgb2Zmc2V0KQoreworCWNoYXIgKmVvbDsKKworCWlmIChvZmZzZXQgPj0gc2ItPmxlbikKKwkJQlVHKCJsb29raW5nIGZvciBuZXh0IGxpbmUgYmV5b25kIGJ1ZmZlciAoJWQgPj0gJWQpXG4lcyIsCisJCSAgICAoaW50KW9mZnNldCwgKGludClzYi0+bGVuLCBzYi0+YnVmKTsKKworCWVvbCA9IG1lbWNocihzYi0+YnVmICsgb2Zmc2V0LCAnXG4nLCBzYi0+bGVuIC0gb2Zmc2V0KTsKKwlpZiAoIWVvbCkKKwkJcmV0dXJuIHNiLT5sZW47CisJcmV0dXJuIGVvbCAtIHNiLT5idWYgKyAxOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJfaHVuayhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIHN0cnVjdCBodW5rICpodW5rLAorCQkJc3NpemVfdCBkZWx0YSwgaW50IGNvbG9yZWQsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3QgaHVua19oZWFkZXIgKmhlYWRlciA9ICZodW5rLT5oZWFkZXI7CisKKwlpZiAoaHVuay0+aGVhZGVyLm9sZF9vZmZzZXQgIT0gMCB8fCBodW5rLT5oZWFkZXIubmV3X29mZnNldCAhPSAwKSB7CisJCS8qCisJCSAqIEdlbmVyYXRlIHRoZSBodW5rIGhlYWRlciBkeW5hbWljYWxseSwgZXhjZXB0IGZvciBzcGVjaWFsCisJCSAqIGh1bmtzIChzdWNoIGFzIHRoZSBkaWZmIGhlYWRlcikuCisJCSAqLworCQljb25zdCBjaGFyICpwOworCQlzaXplX3QgbGVuOworCQl1bnNpZ25lZCBsb25nIG9sZF9vZmZzZXQgPSBoZWFkZXItPm9sZF9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvbmcgbmV3X29mZnNldCA9IGhlYWRlci0+bmV3X29mZnNldDsKKworCQlpZiAoIWNvbG9yZWQpIHsKKwkJCXAgPSBzLT5wbGFpbi5idWYgKyBoZWFkZXItPmV4dHJhX3N0YXJ0OworCQkJbGVuID0gaGVhZGVyLT5leHRyYV9lbmQgLSBoZWFkZXItPmV4dHJhX3N0YXJ0OworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZHN0cihvdXQsIHMtPnMuZnJhZ2luZm9fY29sb3IpOworCQkJcCA9IHMtPmNvbG9yZWQuYnVmICsgaGVhZGVyLT5jb2xvcmVkX2V4dHJhX3N0YXJ0OworCQkJbGVuID0gaGVhZGVyLT5jb2xvcmVkX2V4dHJhX2VuZAorCQkJCS0gaGVhZGVyLT5jb2xvcmVkX2V4dHJhX3N0YXJ0OworCQl9CisKKwkJaWYgKHMtPm1vZGUtPmlzX3JldmVyc2UpCisJCQlvbGRfb2Zmc2V0IC09IGRlbHRhOworCQllbHNlCisJCQluZXdfb2Zmc2V0ICs9IGRlbHRhOworCisJCXN0cmJ1Zl9hZGRmKG91dCwgIkBAIC0lbHUsJWx1ICslbHUsJWx1IEBAIiwKKwkJCSAgICBvbGRfb2Zmc2V0LCBoZWFkZXItPm9sZF9jb3VudCwKKwkJCSAgICBuZXdfb2Zmc2V0LCBoZWFkZXItPm5ld19jb3VudCk7CisJCWlmIChsZW4pCisJCQlzdHJidWZfYWRkKG91dCwgcCwgbGVuKTsKKwkJZWxzZSBpZiAoY29sb3JlZCkKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzXG4iLCBHSVRfQ09MT1JfUkVTRVQpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwl9CisKKwlpZiAoY29sb3JlZCkKKwkJc3RyYnVmX2FkZChvdXQsIHMtPmNvbG9yZWQuYnVmICsgaHVuay0+Y29sb3JlZF9zdGFydCwKKwkJCSAgIGh1bmstPmNvbG9yZWRfZW5kIC0gaHVuay0+Y29sb3JlZF9zdGFydCk7CisJZWxzZQorCQlzdHJidWZfYWRkKG91dCwgcy0+cGxhaW4uYnVmICsgaHVuay0+c3RhcnQsCisJCQkgICBodW5rLT5lbmQgLSBodW5rLT5zdGFydCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlcl9kaWZmX2hlYWRlcihzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsCisJCQkgICAgICAgc3RydWN0IGZpbGVfZGlmZiAqZmlsZV9kaWZmLCBpbnQgY29sb3JlZCwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJLyoKKwkgKiBJZiB0aGVyZSB3YXMgYSBtb2RlIGNoYW5nZSwgdGhlIGZpcnN0IGh1bmsgaXMgYSBwc2V1ZG8gaHVuayB0aGF0CisJICogY29ycmVzcG9uZHMgdG8gdGhlIG1vZGUgbGluZSBpbiB0aGUgaGVhZGVyLiBJZiB0aGUgdXNlciBkaWQgbm90IHdhbnQKKwkgKiB0byBzdGFnZSB0aGF0ICJodW5rIiwgd2UgYWN0dWFsbHkgaGF2ZSB0byBjdXQgaXQgb3V0IGZyb20gdGhlIGhlYWRlci4KKwkgKi8KKwlpbnQgc2tpcF9tb2RlX2NoYW5nZSA9CisJCWZpbGVfZGlmZi0+bW9kZV9jaGFuZ2UgJiYgZmlsZV9kaWZmLT5odW5rLT51c2UgIT0gVVNFX0hVTks7CisJc3RydWN0IGh1bmsgKmhlYWQgPSAmZmlsZV9kaWZmLT5oZWFkLCAqZmlyc3QgPSBmaWxlX2RpZmYtPmh1bms7CisKKwlpZiAoIXNraXBfbW9kZV9jaGFuZ2UpIHsKKwkJcmVuZGVyX2h1bmsocywgaGVhZCwgMCwgY29sb3JlZCwgb3V0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjb2xvcmVkKSB7CisJCWNvbnN0IGNoYXIgKnAgPSBzLT5jb2xvcmVkLmJ1ZjsKKworCQlzdHJidWZfYWRkKG91dCwgcCArIGhlYWQtPmNvbG9yZWRfc3RhcnQsCisJCQkgICAgZmlyc3QtPmNvbG9yZWRfc3RhcnQgLSBoZWFkLT5jb2xvcmVkX3N0YXJ0KTsKKwkJc3RyYnVmX2FkZChvdXQsIHAgKyBmaXJzdC0+Y29sb3JlZF9lbmQsCisJCQkgICAgaGVhZC0+Y29sb3JlZF9lbmQgLSBmaXJzdC0+Y29sb3JlZF9lbmQpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnAgPSBzLT5wbGFpbi5idWY7CisKKwkJc3RyYnVmX2FkZChvdXQsIHAgKyBoZWFkLT5zdGFydCwgZmlyc3QtPnN0YXJ0IC0gaGVhZC0+c3RhcnQpOworCQlzdHJidWZfYWRkKG91dCwgcCArIGZpcnN0LT5lbmQsIGhlYWQtPmVuZCAtIGZpcnN0LT5lbmQpOworCX0KK30KKworLyogQ29hbGVzY2UgaHVua3MgYWdhaW4gdGhhdCB3ZXJlIHNwbGl0ICovCitzdGF0aWMgaW50IG1lcmdlX2h1bmtzKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IGZpbGVfZGlmZiAqZmlsZV9kaWZmLAorCQkgICAgICAgc2l6ZV90ICpodW5rX2luZGV4LCBpbnQgdXNlX2FsbCwgc3RydWN0IGh1bmsgKm1lcmdlZCkKK3sKKwlzaXplX3QgaSA9ICpodW5rX2luZGV4LCBkZWx0YTsKKwlzdHJ1Y3QgaHVuayAqaHVuayA9IGZpbGVfZGlmZi0+aHVuayArIGk7CisJLyogYGhlYWRlcmAgY29ycmVzcG9uZHMgdG8gdGhlIG1lcmdlZCBodW5rICovCisJc3RydWN0IGh1bmtfaGVhZGVyICpoZWFkZXIgPSAmbWVyZ2VkLT5oZWFkZXIsICpuZXh0OworCisJaWYgKCF1c2VfYWxsICYmIGh1bmstPnVzZSAhPSBVU0VfSFVOSykKKwkJcmV0dXJuIDA7CisKKwkqbWVyZ2VkID0gKmh1bms7CisJLyogV2Ugc2ltcGx5IHNraXAgdGhlIGNvbG9yZWQgcGFydCAoaWYgYW55KSB3aGVuIG1lcmdpbmcgaHVua3MgKi8KKwltZXJnZWQtPmNvbG9yZWRfc3RhcnQgPSBtZXJnZWQtPmNvbG9yZWRfZW5kID0gMDsKKworCWZvciAoOyBpICsgMSA8IGZpbGVfZGlmZi0+aHVua19ucjsgaSsrKSB7CisJCWh1bmsrKzsKKwkJbmV4dCA9ICZodW5rLT5oZWFkZXI7CisKKwkJLyoKKwkJICogU3RvcCBtZXJnaW5nIGh1bmtzIHdoZW46CisJCSAqCisJCSAqIC0gdGhlIGh1bmsgaXMgbm90IHNlbGVjdGVkIGZvciB1c2UsIG9yCisJCSAqIC0gdGhlIGh1bmsgZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIHRoZSBhbHJlYWR5LW1lcmdlZCBodW5rKHMpCisJCSAqLworCQlpZiAoKCF1c2VfYWxsICYmIGh1bmstPnVzZSAhPSBVU0VfSFVOSykgfHwKKwkJICAgIGhlYWRlci0+bmV3X29mZnNldCA+PSBuZXh0LT5uZXdfb2Zmc2V0ICsgbWVyZ2VkLT5kZWx0YSB8fAorCQkgICAgaGVhZGVyLT5uZXdfb2Zmc2V0ICsgaGVhZGVyLT5uZXdfY291bnQKKwkJICAgIDwgbmV4dC0+bmV3X29mZnNldCArIG1lcmdlZC0+ZGVsdGEpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiB0aGUgaHVua3Mgd2VyZSBub3QgZWRpdGVkLCBhbmQgb3ZlcmxhcCwgd2UgY2FuIHNpbXBseQorCQkgKiBleHRlbmQgdGhlIGxpbmUgcmFuZ2UuCisJCSAqLworCQlpZiAobWVyZ2VkLT5zdGFydCA8IGh1bmstPnN0YXJ0ICYmIG1lcmdlZC0+ZW5kID4gaHVuay0+c3RhcnQpIHsKKwkJCW1lcmdlZC0+ZW5kID0gaHVuay0+ZW5kOworCQkJbWVyZ2VkLT5jb2xvcmVkX2VuZCA9IGh1bmstPmNvbG9yZWRfZW5kOworCQkJZGVsdGEgPSAwOworCQl9IGVsc2UgeworCQkJY29uc3QgY2hhciAqcGxhaW4gPSBzLT5wbGFpbi5idWY7CisJCQlzaXplX3QgIG92ZXJsYXBwaW5nX2xpbmVfY291bnQgPSBoZWFkZXItPm5ld19vZmZzZXQKKwkJCQkrIGhlYWRlci0+bmV3X2NvdW50IC0gbWVyZ2VkLT5kZWx0YQorCQkJCS0gbmV4dC0+bmV3X29mZnNldDsKKwkJCXNpemVfdCBvdmVybGFwX2VuZCA9IGh1bmstPnN0YXJ0OworCQkJc2l6ZV90IG92ZXJsYXBfc3RhcnQgPSBvdmVybGFwX2VuZDsKKwkJCXNpemVfdCBvdmVybGFwX25leHQsIGxlbiwgajsKKworCQkJLyoKKwkJCSAqIE9uZSBvZiB0aGUgaHVua3Mgd2FzIGVkaXRlZDogdGhlIG1vZGlmaWVkIGh1bmsgd2FzCisJCQkgKiBhcHBlbmRlZCB0byB0aGUgc3RyYnVmIGBzLT5wbGFpbmAuCisJCQkgKgorCQkJICogTGV0J3MgZW5zdXJlIHRoYXQgYXQgbGVhc3QgdGhlIGxhc3QgY29udGV4dCBsaW5lIG9mCisJCQkgKiB0aGUgZmlyc3QgaHVuayBvdmVybGFwcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGxpbmUKKwkJCSAqIG9mIHRoZSBzZWNvbmQgaHVuaywgYW5kIHRoZW4gbWVyZ2UuCisJCQkgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBvdmVybGFwcGluZ19saW5lX2NvdW50OyBqKyspIHsKKwkJCQlvdmVybGFwX25leHQgPSBmaW5kX25leHRfbGluZSgmcy0+cGxhaW4sCisJCQkJCQkJICAgICAgb3ZlcmxhcF9lbmQpOworCisJCQkJaWYgKG92ZXJsYXBfbmV4dCA+IGh1bmstPmVuZCkKKwkJCQkJQlVHKCJmYWlsZWQgdG8gZmluZCAlZCBjb250ZXh0IGxpbmVzICIKKwkJCQkJICAgICJpbjpcbiUuKnMiLAorCQkJCQkgICAgKGludClvdmVybGFwcGluZ19saW5lX2NvdW50LAorCQkJCQkgICAgKGludCkoaHVuay0+ZW5kIC0gaHVuay0+c3RhcnQpLAorCQkJCQkgICAgcGxhaW4gKyBodW5rLT5zdGFydCk7CisKKwkJCQlpZiAocGxhaW5bb3ZlcmxhcF9lbmRdICE9ICcgJykKKwkJCQkJcmV0dXJuIGVycm9yKF8oImV4cGVjdGVkIGNvbnRleHQgbGluZSAiCisJCQkJCQkgICAgICAgIiMlZCBpblxuJS4qcyIpLAorCQkJCQkJICAgICAoaW50KShqICsgMSksCisJCQkJCQkgICAgIChpbnQpKGh1bmstPmVuZAorCQkJCQkJCSAgIC0gaHVuay0+c3RhcnQpLAorCQkJCQkJICAgICBwbGFpbiArIGh1bmstPnN0YXJ0KTsKKworCQkJCW92ZXJsYXBfc3RhcnQgPSBvdmVybGFwX2VuZDsKKwkJCQlvdmVybGFwX2VuZCA9IG92ZXJsYXBfbmV4dDsKKwkJCX0KKwkJCWxlbiA9IG92ZXJsYXBfZW5kIC0gb3ZlcmxhcF9zdGFydDsKKworCQkJaWYgKGxlbiA+IG1lcmdlZC0+ZW5kIC0gbWVyZ2VkLT5zdGFydCB8fAorCQkJICAgIG1lbWNtcChwbGFpbiArIG1lcmdlZC0+ZW5kIC0gbGVuLAorCQkJCSAgIHBsYWluICsgb3ZlcmxhcF9zdGFydCwgbGVuKSkKKwkJCQlyZXR1cm4gZXJyb3IoXygiaHVua3MgZG8gbm90IG92ZXJsYXA6XG4lLipzXG4iCisJCQkJCSAgICAgICAiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiUuKnMiKSwKKwkJCQkJICAgICAoaW50KShtZXJnZWQtPmVuZCAtIG1lcmdlZC0+c3RhcnQpLAorCQkJCQkgICAgIHBsYWluICsgbWVyZ2VkLT5zdGFydCwKKwkJCQkJICAgICAoaW50KWxlbiwgcGxhaW4gKyBvdmVybGFwX3N0YXJ0KTsKKworCQkJLyoKKwkJCSAqIFNpbmNlIHRoZSBzdGFydC1lbmQgcmFuZ2VzIGFyZSBub3QgYWRqYWNlbnQsIHdlCisJCQkgKiBjYW5ub3Qgc2ltcGx5IHRha2UgdGhlIHVuaW9uIG9mIHRoZSByYW5nZXMuIFRvCisJCQkgKiBhZGRyZXNzIHRoYXQsIHdlIHRlbXBvcmFyaWx5IGFwcGVuZCB0aGUgdW5pb24gb2YgdGhlCisJCQkgKiBsaW5lcyB0byB0aGUgYHBsYWluYCBzdHJidWYuCisJCQkgKi8KKwkJCWlmIChtZXJnZWQtPmVuZCAhPSBzLT5wbGFpbi5sZW4pIHsKKwkJCQlzaXplX3Qgc3RhcnQgPSBzLT5wbGFpbi5sZW47CisKKwkJCQlzdHJidWZfYWRkKCZzLT5wbGFpbiwgcGxhaW4gKyBtZXJnZWQtPnN0YXJ0LAorCQkJCQkgICBtZXJnZWQtPmVuZCAtIG1lcmdlZC0+c3RhcnQpOworCQkJCXBsYWluID0gcy0+cGxhaW4uYnVmOworCQkJCW1lcmdlZC0+c3RhcnQgPSBzdGFydDsKKwkJCQltZXJnZWQtPmVuZCA9IHMtPnBsYWluLmxlbjsKKwkJCX0KKworCQkJc3RyYnVmX2FkZCgmcy0+cGxhaW4sCisJCQkJICAgcGxhaW4gKyBvdmVybGFwX2VuZCwKKwkJCQkgICBodW5rLT5lbmQgLSBvdmVybGFwX2VuZCk7CisJCQltZXJnZWQtPmVuZCA9IHMtPnBsYWluLmxlbjsKKwkJCW1lcmdlZC0+c3BsaXR0YWJsZV9pbnRvICs9IGh1bmstPnNwbGl0dGFibGVfaW50bzsKKwkJCWRlbHRhID0gbWVyZ2VkLT5kZWx0YTsKKwkJCW1lcmdlZC0+ZGVsdGEgKz0gaHVuay0+ZGVsdGE7CisJCX0KKworCQloZWFkZXItPm9sZF9jb3VudCA9IG5leHQtPm9sZF9vZmZzZXQgKyBuZXh0LT5vbGRfY291bnQKKwkJCS0gaGVhZGVyLT5vbGRfb2Zmc2V0OworCQloZWFkZXItPm5ld19jb3VudCA9IG5leHQtPm5ld19vZmZzZXQgKyBkZWx0YQorCQkJKyBuZXh0LT5uZXdfY291bnQgLSBoZWFkZXItPm5ld19vZmZzZXQ7CisJfQorCisJaWYgKGkgPT0gKmh1bmtfaW5kZXgpCisJCXJldHVybiAwOworCisJKmh1bmtfaW5kZXggPSBpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZWFzc2VtYmxlX3BhdGNoKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywKKwkJCSAgICAgc3RydWN0IGZpbGVfZGlmZiAqZmlsZV9kaWZmLCBpbnQgdXNlX2FsbCwKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCXN0cnVjdCBodW5rICpodW5rOworCXNpemVfdCBzYXZlX2xlbiA9IHMtPnBsYWluLmxlbiwgaTsKKwlzc2l6ZV90IGRlbHRhID0gMDsKKworCXJlbmRlcl9kaWZmX2hlYWRlcihzLCBmaWxlX2RpZmYsIDAsIG91dCk7CisKKwlmb3IgKGkgPSBmaWxlX2RpZmYtPm1vZGVfY2hhbmdlOyBpIDwgZmlsZV9kaWZmLT5odW5rX25yOyBpKyspIHsKKwkJc3RydWN0IGh1bmsgbWVyZ2VkID0geyAwIH07CisKKwkJaHVuayA9IGZpbGVfZGlmZi0+aHVuayArIGk7CisJCWlmICghdXNlX2FsbCAmJiBodW5rLT51c2UgIT0gVVNFX0hVTkspCisJCQlkZWx0YSArPSBodW5rLT5oZWFkZXIub2xkX2NvdW50CisJCQkJLSBodW5rLT5oZWFkZXIubmV3X2NvdW50OworCQllbHNlIHsKKwkJCS8qIG1lcmdlIG92ZXJsYXBwaW5nIGh1bmtzIGludG8gYSB0ZW1wb3JhcnkgaHVuayAqLworCQkJaWYgKG1lcmdlX2h1bmtzKHMsIGZpbGVfZGlmZiwgJmksIHVzZV9hbGwsICZtZXJnZWQpKQorCQkJCWh1bmsgPSAmbWVyZ2VkOworCisJCQlyZW5kZXJfaHVuayhzLCBodW5rLCBkZWx0YSwgMCwgb3V0KTsKKworCQkJLyoKKwkJCSAqIEluIGNhc2UgYG1lcmdlX2h1bmtzKClgIHVzZWQgYHBsYWluYCBhcyBhIHNjcmF0Y2gKKwkJCSAqIHBhZCAodGhpcyBoYXBwZW5zIHdoZW4gYW4gZWRpdGVkIGh1bmsgaGFkIHRvIGJlCisJCQkgKiBjb2FsZXNjZWQgd2l0aCBhbm90aGVyIGh1bmspLgorCQkJICovCisJCQlzdHJidWZfc2V0bGVuKCZzLT5wbGFpbiwgc2F2ZV9sZW4pOworCisJCQlkZWx0YSArPSBodW5rLT5kZWx0YTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBzcGxpdF9odW5rKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IGZpbGVfZGlmZiAqZmlsZV9kaWZmLAorCQkgICAgICAgc2l6ZV90IGh1bmtfaW5kZXgpCit7CisJaW50IGNvbG9yZWQgPSAhIXMtPmNvbG9yZWQubGVuLCBmaXJzdCA9IDE7CisJc3RydWN0IGh1bmsgKmh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBodW5rX2luZGV4OworCXNpemVfdCBzcGxpdHRhYmxlX2ludG87CisJc2l6ZV90IGVuZCwgY29sb3JlZF9lbmQsIGN1cnJlbnQsIGNvbG9yZWRfY3VycmVudCA9IDAsIGNvbnRleHRfbGluZV9jb3VudDsKKwlzdHJ1Y3QgaHVua19oZWFkZXIgcmVtYWluaW5nLCAqaGVhZGVyOworCWNoYXIgbWFya2VyLCBjaDsKKworCWlmIChodW5rX2luZGV4ID49IGZpbGVfZGlmZi0+aHVua19ucikKKwkJQlVHKCJpbnZhbGlkIGh1bmsgaW5kZXg6ICVkIChtdXN0IGJlID49IDAgYW5kIDwgJWQpIiwKKwkJICAgIChpbnQpaHVua19pbmRleCwgKGludClmaWxlX2RpZmYtPmh1bmtfbnIpOworCisJaWYgKGh1bmstPnNwbGl0dGFibGVfaW50byA8IDIpCisJCXJldHVybiAwOworCXNwbGl0dGFibGVfaW50byA9IGh1bmstPnNwbGl0dGFibGVfaW50bzsKKworCWVuZCA9IGh1bmstPmVuZDsKKwljb2xvcmVkX2VuZCA9IGh1bmstPmNvbG9yZWRfZW5kOworCisJcmVtYWluaW5nID0gaHVuay0+aGVhZGVyOworCisJZmlsZV9kaWZmLT5odW5rX25yICs9IHNwbGl0dGFibGVfaW50byAtIDE7CisJQUxMT0NfR1JPVyhmaWxlX2RpZmYtPmh1bmssIGZpbGVfZGlmZi0+aHVua19uciwgZmlsZV9kaWZmLT5odW5rX2FsbG9jKTsKKwlpZiAoaHVua19pbmRleCArIHNwbGl0dGFibGVfaW50byA8IGZpbGVfZGlmZi0+aHVua19ucikKKwkJbWVtbW92ZShmaWxlX2RpZmYtPmh1bmsgKyBodW5rX2luZGV4ICsgc3BsaXR0YWJsZV9pbnRvLAorCQkJZmlsZV9kaWZmLT5odW5rICsgaHVua19pbmRleCArIDEsCisJCQkoZmlsZV9kaWZmLT5odW5rX25yIC0gaHVua19pbmRleCAtIHNwbGl0dGFibGVfaW50bykKKwkJCSogc2l6ZW9mKCpodW5rKSk7CisJaHVuayA9IGZpbGVfZGlmZi0+aHVuayArIGh1bmtfaW5kZXg7CisJaHVuay0+c3BsaXR0YWJsZV9pbnRvID0gMTsKKwltZW1zZXQoaHVuayArIDEsIDAsIChzcGxpdHRhYmxlX2ludG8gLSAxKSAqIHNpemVvZigqaHVuaykpOworCisJaGVhZGVyID0gJmh1bmstPmhlYWRlcjsKKwloZWFkZXItPm9sZF9jb3VudCA9IGhlYWRlci0+bmV3X2NvdW50ID0gMDsKKworCWN1cnJlbnQgPSBodW5rLT5zdGFydDsKKwlpZiAoY29sb3JlZCkKKwkJY29sb3JlZF9jdXJyZW50ID0gaHVuay0+Y29sb3JlZF9zdGFydDsKKwltYXJrZXIgPSAnXDAnOworCWNvbnRleHRfbGluZV9jb3VudCA9IDA7CisKKwl3aGlsZSAoc3BsaXR0YWJsZV9pbnRvID4gMSkgeworCQljaCA9IHMtPnBsYWluLmJ1ZltjdXJyZW50XTsKKworCQlpZiAoIWNoKQorCQkJQlVHKCJidWZmZXIgb3ZlcnJ1biB3aGlsZSBzcGxpdHRpbmcgaHVua3MiKTsKKworCQkvKgorCQkgKiBJcyB0aGlzIHRoZSBmaXJzdCBjb250ZXh0IGxpbmUgYWZ0ZXIgYSBjaGFpbiBvZiArLy0gbGluZXM/CisJCSAqIFRoZW4gcmVjb3JkIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBzcGxpdCBodW5rLgorCQkgKi8KKwkJaWYgKChtYXJrZXIgPT0gJy0nIHx8IG1hcmtlciA9PSAnKycpICYmIGNoID09ICcgJykgeworCQkJZmlyc3QgPSAwOworCQkJaHVua1sxXS5zdGFydCA9IGN1cnJlbnQ7CisJCQlpZiAoY29sb3JlZCkKKwkJCQlodW5rWzFdLmNvbG9yZWRfc3RhcnQgPSBjb2xvcmVkX2N1cnJlbnQ7CisJCQljb250ZXh0X2xpbmVfY291bnQgPSAwOworCQl9CisKKwkJLyoKKwkJICogV2FzIHRoZSBwcmV2aW91cyBsaW5lIGEgKy8tIG9uZT8gQWx0ZXJuYXRpdmVseSwgaXMgdGhpcyB0aGUKKwkJICogZmlyc3QgbGluZSAoYW5kIG5vdCBhICsvLSBvbmUpPworCQkgKgorCQkgKiBUaGVuIGp1c3QgaW5jcmVtZW50IHRoZSBhcHByb3ByaWF0ZSBjb3VudGVyIGFuZCBjb250aW51ZQorCQkgKiB3aXRoIHRoZSBuZXh0IGxpbmUuCisJCSAqLworCQlpZiAobWFya2VyICE9ICcgJyB8fCAoY2ggIT0gJy0nICYmIGNoICE9ICcrJykpIHsKK25leHRfaHVua19saW5lOgorCQkJLyogQ29tbWVudCBsaW5lcyBhcmUgYXR0YWNoZWQgdG8gdGhlIHByZXZpb3VzIGxpbmUgKi8KKwkJCWlmIChjaCA9PSAnXFwnKQorCQkJCWNoID0gbWFya2VyID8gbWFya2VyIDogJyAnOworCisJCQkvKiBjdXJyZW50IGh1bmsgbm90IGRvbmUgeWV0ICovCisJCQlpZiAoY2ggPT0gJyAnKQorCQkJCWNvbnRleHRfbGluZV9jb3VudCsrOworCQkJZWxzZSBpZiAoY2ggPT0gJy0nKQorCQkJCWhlYWRlci0+b2xkX2NvdW50Kys7CisJCQllbHNlIGlmIChjaCA9PSAnKycpCisJCQkJaGVhZGVyLT5uZXdfY291bnQrKzsKKwkJCWVsc2UKKwkJCQlCVUcoInVuaGFuZGxlZCBkaWZmIG1hcmtlcjogJyVjJyIsIGNoKTsKKwkJCW1hcmtlciA9IGNoOworCQkJY3VycmVudCA9IGZpbmRfbmV4dF9saW5lKCZzLT5wbGFpbiwgY3VycmVudCk7CisJCQlpZiAoY29sb3JlZCkKKwkJCQljb2xvcmVkX2N1cnJlbnQgPQorCQkJCQlmaW5kX25leHRfbGluZSgmcy0+Y29sb3JlZCwKKwkJCQkJCSAgICAgICBjb2xvcmVkX2N1cnJlbnQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBnb3QgdXMgdGhlIHN0YXJ0IG9mIGEgbmV3IGh1bmshCisJCSAqCisJCSAqIFRoaXMgaXMgYSBjb250ZXh0IGxpbmUsIHNvIGl0IGlzIHNoYXJlZCB3aXRoIHRoZSBwcmV2aW91cworCQkgKiBodW5rLCBpZiBhbnkuCisJCSAqLworCisJCWlmIChmaXJzdCkgeworCQkJaWYgKGhlYWRlci0+b2xkX2NvdW50IHx8IGhlYWRlci0+bmV3X2NvdW50KQorCQkJCUJVRygiY291bnRzIGFyZSBvZmY6ICVkLyVkIiwKKwkJCQkgICAgKGludCloZWFkZXItPm9sZF9jb3VudCwKKwkJCQkgICAgKGludCloZWFkZXItPm5ld19jb3VudCk7CisKKwkJCWhlYWRlci0+b2xkX2NvdW50ID0gY29udGV4dF9saW5lX2NvdW50OworCQkJaGVhZGVyLT5uZXdfY291bnQgPSBjb250ZXh0X2xpbmVfY291bnQ7CisJCQljb250ZXh0X2xpbmVfY291bnQgPSAwOworCQkJZmlyc3QgPSAwOworCQkJZ290byBuZXh0X2h1bmtfbGluZTsKKwkJfQorCisJCXJlbWFpbmluZy5vbGRfb2Zmc2V0ICs9IGhlYWRlci0+b2xkX2NvdW50OworCQlyZW1haW5pbmcub2xkX2NvdW50IC09IGhlYWRlci0+b2xkX2NvdW50OworCQlyZW1haW5pbmcubmV3X29mZnNldCArPSBoZWFkZXItPm5ld19jb3VudDsKKwkJcmVtYWluaW5nLm5ld19jb3VudCAtPSBoZWFkZXItPm5ld19jb3VudDsKKworCQkvKiBpbml0aWFsaXplIG5leHQgaHVuayBoZWFkZXIncyBvZmZzZXRzICovCisJCWh1bmtbMV0uaGVhZGVyLm9sZF9vZmZzZXQgPQorCQkJaGVhZGVyLT5vbGRfb2Zmc2V0ICsgaGVhZGVyLT5vbGRfY291bnQ7CisJCWh1bmtbMV0uaGVhZGVyLm5ld19vZmZzZXQgPQorCQkJaGVhZGVyLT5uZXdfb2Zmc2V0ICsgaGVhZGVyLT5uZXdfY291bnQ7CisKKwkJLyogYWRkIG9uZSBzcGxpdCBodW5rICovCisJCWhlYWRlci0+b2xkX2NvdW50ICs9IGNvbnRleHRfbGluZV9jb3VudDsKKwkJaGVhZGVyLT5uZXdfY291bnQgKz0gY29udGV4dF9saW5lX2NvdW50OworCisJCWh1bmstPmVuZCA9IGN1cnJlbnQ7CisJCWlmIChjb2xvcmVkKQorCQkJaHVuay0+Y29sb3JlZF9lbmQgPSBjb2xvcmVkX2N1cnJlbnQ7CisKKwkJaHVuaysrOworCQlodW5rLT5zcGxpdHRhYmxlX2ludG8gPSAxOworCQlodW5rLT51c2UgPSBodW5rWy0xXS51c2U7CisJCWhlYWRlciA9ICZodW5rLT5oZWFkZXI7CisKKwkJaGVhZGVyLT5vbGRfY291bnQgPSBoZWFkZXItPm5ld19jb3VudCA9IGNvbnRleHRfbGluZV9jb3VudDsKKwkJY29udGV4dF9saW5lX2NvdW50ID0gMDsKKworCQlzcGxpdHRhYmxlX2ludG8tLTsKKwkJbWFya2VyID0gY2g7CisJfQorCisJLyogbGFzdCBodW5rIHNpbXBseSBnZXRzIHRoZSByZXN0ICovCisJaWYgKGhlYWRlci0+b2xkX29mZnNldCAhPSByZW1haW5pbmcub2xkX29mZnNldCkKKwkJQlVHKCJtaXNjb3VudGVkIG9sZF9vZmZzZXQ6ICVsdSAhPSAlbHUiLAorCQkgICAgaGVhZGVyLT5vbGRfb2Zmc2V0LCByZW1haW5pbmcub2xkX29mZnNldCk7CisJaWYgKGhlYWRlci0+bmV3X29mZnNldCAhPSByZW1haW5pbmcubmV3X29mZnNldCkKKwkJQlVHKCJtaXNjb3VudGVkIG5ld19vZmZzZXQ6ICVsdSAhPSAlbHUiLAorCQkgICAgaGVhZGVyLT5uZXdfb2Zmc2V0LCByZW1haW5pbmcubmV3X29mZnNldCk7CisJaGVhZGVyLT5vbGRfY291bnQgPSByZW1haW5pbmcub2xkX2NvdW50OworCWhlYWRlci0+bmV3X2NvdW50ID0gcmVtYWluaW5nLm5ld19jb3VudDsKKwlodW5rLT5lbmQgPSBlbmQ7CisJaWYgKGNvbG9yZWQpCisJCWh1bmstPmNvbG9yZWRfZW5kID0gY29sb3JlZF9lbmQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVjb2xvcl9odW5rKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IGh1bmsgKmh1bmspCit7CisJY29uc3QgY2hhciAqcGxhaW4gPSBzLT5wbGFpbi5idWY7CisJc2l6ZV90IGN1cnJlbnQsIGVvbCwgbmV4dDsKKworCWlmICghcy0+Y29sb3JlZC5sZW4pCisJCXJldHVybjsKKworCWh1bmstPmNvbG9yZWRfc3RhcnQgPSBzLT5jb2xvcmVkLmxlbjsKKwlmb3IgKGN1cnJlbnQgPSBodW5rLT5zdGFydDsgY3VycmVudCA8IGh1bmstPmVuZDsgKSB7CisJCWZvciAoZW9sID0gY3VycmVudDsgZW9sIDwgaHVuay0+ZW5kOyBlb2wrKykKKwkJCWlmIChwbGFpbltlb2xdID09ICdcbicpCisJCQkJYnJlYWs7CisJCW5leHQgPSBlb2wgKyAoZW9sIDwgaHVuay0+ZW5kKTsKKwkJaWYgKGVvbCA+IGN1cnJlbnQgJiYgcGxhaW5bZW9sIC0gMV0gPT0gJ1xyJykKKwkJCWVvbC0tOworCisJCXN0cmJ1Zl9hZGRzdHIoJnMtPmNvbG9yZWQsCisJCQkgICAgICBwbGFpbltjdXJyZW50XSA9PSAnLScgPworCQkJICAgICAgcy0+cy5maWxlX29sZF9jb2xvciA6CisJCQkgICAgICBwbGFpbltjdXJyZW50XSA9PSAnKycgPworCQkJICAgICAgcy0+cy5maWxlX25ld19jb2xvciA6CisJCQkgICAgICBzLT5zLmNvbnRleHRfY29sb3IpOworCQlzdHJidWZfYWRkKCZzLT5jb2xvcmVkLCBwbGFpbiArIGN1cnJlbnQsIGVvbCAtIGN1cnJlbnQpOworCQlzdHJidWZfYWRkc3RyKCZzLT5jb2xvcmVkLCBHSVRfQ09MT1JfUkVTRVQpOworCQlpZiAobmV4dCA+IGVvbCkKKwkJCXN0cmJ1Zl9hZGQoJnMtPmNvbG9yZWQsIHBsYWluICsgZW9sLCBuZXh0IC0gZW9sKTsKKwkJY3VycmVudCA9IG5leHQ7CisJfQorCWh1bmstPmNvbG9yZWRfZW5kID0gcy0+Y29sb3JlZC5sZW47Cit9CisKK3N0YXRpYyBpbnQgZWRpdF9odW5rX21hbnVhbGx5KHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IGh1bmsgKmh1bmspCit7CisJc2l6ZV90IGk7CisKKwlzdHJidWZfcmVzZXQoJnMtPmJ1Zik7CisJc3RyYnVmX2NvbW1lbnRlZF9hZGRmKCZzLT5idWYsIF8oIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciAiCisJCQkJICAgICAgImEgcXVpY2sgZ3VpZGUuXG4iKSk7CisJcmVuZGVyX2h1bmsocywgaHVuaywgMCwgMCwgJnMtPmJ1Zik7CisJc3RyYnVmX2NvbW1lbnRlZF9hZGRmKCZzLT5idWYsCisJCQkgICAgICBfKCItLS1cbiIKKwkJCQkiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgIgorCQkJCSIoY29udGV4dCkuXG4iCisJCQkJIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKwkJCQkiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iKSwKKwkJCSAgICAgIHMtPm1vZGUtPmlzX3JldmVyc2UgPyAnKycgOiAnLScsCisJCQkgICAgICBzLT5tb2RlLT5pc19yZXZlcnNlID8gJy0nIDogJysnLAorCQkJICAgICAgY29tbWVudF9saW5lX2NoYXIpOworCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmcy0+YnVmLCAiJXMiLCBfKHMtPm1vZGUtPmVkaXRfaHVua19oaW50KSk7CisJLyoKKwkgKiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMKKwkgKiBtZXNzYWdlcy4KKwkgKi8KKwlzdHJidWZfY29tbWVudGVkX2FkZGYoJnMtPmJ1ZiwKKwkJCSAgICAgIF8oIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlICIKKwkJCQkiZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKwkJCQkiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgIgorCQkJCSJyZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisJCQkJImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIikpOworCisJaWYgKHN0cmJ1Zl9lZGl0X2ludGVyYWN0aXZlbHkoJnMtPmJ1ZiwgImFkZHAtaHVuay1lZGl0LmRpZmYiLCBOVUxMKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIHN0cmlwIG91dCBjb21tZW50ZWQgbGluZXMgKi8KKwlodW5rLT5zdGFydCA9IHMtPnBsYWluLmxlbjsKKwlmb3IgKGkgPSAwOyBpIDwgcy0+YnVmLmxlbjsgKSB7CisJCXNpemVfdCBuZXh0ID0gZmluZF9uZXh0X2xpbmUoJnMtPmJ1ZiwgaSk7CisKKwkJaWYgKHMtPmJ1Zi5idWZbaV0gIT0gY29tbWVudF9saW5lX2NoYXIpCisJCQlzdHJidWZfYWRkKCZzLT5wbGFpbiwgcy0+YnVmLmJ1ZiArIGksIG5leHQgLSBpKTsKKwkJaSA9IG5leHQ7CisJfQorCisJaHVuay0+ZW5kID0gcy0+cGxhaW4ubGVuOworCWlmIChodW5rLT5lbmQgPT0gaHVuay0+c3RhcnQpCisJCS8qIFRoZSB1c2VyIGFib3J0ZWQgZWRpdGluZyBieSBkZWxldGluZyBldmVyeXRoaW5nICovCisJCXJldHVybiAwOworCisJcmVjb2xvcl9odW5rKHMsIGh1bmspOworCisJLyoKKwkgKiBJZiB0aGUgaHVuayBoZWFkZXIgaXMgaW50YWN0LCBwYXJzZSBpdCwgb3RoZXJ3aXNlIHNpbXBseSB1c2UgdGhlCisJICogaHVuayBoZWFkZXIgcHJpb3IgdG8gZWRpdGluZyAod2hpY2ggd2lsbCBhZGp1c3QgYGh1bmstPnN0YXJ0YCB0bworCSAqIHNraXAgdGhlIGh1bmsgaGVhZGVyKS4KKwkgKi8KKwlpZiAocy0+cGxhaW4uYnVmW2h1bmstPnN0YXJ0XSA9PSAnQCcgJiYKKwkgICAgcGFyc2VfaHVua19oZWFkZXIocywgaHVuaykgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIikpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY291bnRfZWRpdGVkX2h1bmsoc3RydWN0IGFkZF9wX3N0YXRlICpzLCBzdHJ1Y3QgaHVuayAqaHVuaywKKwkJCQkgICBzaXplX3Qgb3JpZ19vbGRfY291bnQsIHNpemVfdCBvcmlnX25ld19jb3VudCkKK3sKKwlzdHJ1Y3QgaHVua19oZWFkZXIgKmhlYWRlciA9ICZodW5rLT5oZWFkZXI7CisJc2l6ZV90IGk7CisKKwloZWFkZXItPm9sZF9jb3VudCA9IGhlYWRlci0+bmV3X2NvdW50ID0gMDsKKwlmb3IgKGkgPSBodW5rLT5zdGFydDsgaSA8IGh1bmstPmVuZDsgKSB7CisJCXN3aXRjaCAocy0+cGxhaW4uYnVmW2ldKSB7CisJCWNhc2UgJy0nOgorCQkJaGVhZGVyLT5vbGRfY291bnQrKzsKKwkJCWJyZWFrOworCQljYXNlICcrJzoKKwkJCWhlYWRlci0+bmV3X2NvdW50Kys7CisJCQlicmVhazsKKwkJY2FzZSAnICc6IGNhc2UgJ1xyJzogY2FzZSAnXG4nOgorCQkJaGVhZGVyLT5vbGRfY291bnQrKzsKKwkJCWhlYWRlci0+bmV3X2NvdW50Kys7CisJCQlicmVhazsKKwkJfQorCisJCWkgPSBmaW5kX25leHRfbGluZSgmcy0+cGxhaW4sIGkpOworCX0KKworCXJldHVybiBvcmlnX29sZF9jb3VudCAtIG9yaWdfbmV3X2NvdW50CisJCS0gaGVhZGVyLT5vbGRfY291bnQgKyBoZWFkZXItPm5ld19jb3VudDsKK30KKworc3RhdGljIGludCBydW5fYXBwbHlfY2hlY2soc3RydWN0IGFkZF9wX3N0YXRlICpzLAorCQkJICAgc3RydWN0IGZpbGVfZGlmZiAqZmlsZV9kaWZmKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJc3RyYnVmX3Jlc2V0KCZzLT5idWYpOworCXJlYXNzZW1ibGVfcGF0Y2gocywgZmlsZV9kaWZmLCAxLCAmcy0+YnVmKTsKKworCXNldHVwX2NoaWxkX3Byb2Nlc3MocywgJmNwLAorCQkJICAgICJhcHBseSIsICItLWNoZWNrIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNodigmY3AuYXJncywgcy0+bW9kZS0+YXBwbHlfY2hlY2tfYXJncyk7CisJaWYgKHBpcGVfY29tbWFuZCgmY3AsIHMtPmJ1Zi5idWYsIHMtPmJ1Zi5sZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorCQlyZXR1cm4gZXJyb3IoXygiJ2dpdCBhcHBseSAtLWNhY2hlZCcgZmFpbGVkIikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9zaW5nbGVfY2hhcmFjdGVyKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcykKK3sKKwlpZiAocy0+cy51c2Vfc2luZ2xlX2tleSkgeworCQlpbnQgcmVzID0gcmVhZF9rZXlfd2l0aG91dF9lY2hvKCZzLT5hbnN3ZXIpOworCQlwcmludGYoIiVzXG4iLCByZXMgPT0gRU9GID8gIiIgOiBzLT5hbnN3ZXIuYnVmKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlpZiAoc3RyYnVmX2dldGxpbmUoJnMtPmFuc3dlciwgc3RkaW4pID09IEVPRikKKwkJcmV0dXJuIEVPRjsKKwlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKCZzLT5hbnN3ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb21wdF95ZXNubyhzdHJ1Y3QgYWRkX3Bfc3RhdGUgKnMsIGNvbnN0IGNoYXIgKnByb21wdCkKK3sKKwlmb3IgKDs7KSB7CisJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBzLT5zLnByb21wdF9jb2xvciwgIiVzIiwgXyhwcm9tcHQpKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJCWlmIChyZWFkX3NpbmdsZV9jaGFyYWN0ZXIocykgPT0gRU9GKQorCQkJcmV0dXJuIC0xOworCQlzd2l0Y2ggKHRvbG93ZXIocy0+YW5zd2VyLmJ1ZlswXSkpIHsKKwkJY2FzZSAnbic6IHJldHVybiAwOworCQljYXNlICd5JzogcmV0dXJuIDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZWRpdF9odW5rX2xvb3Aoc3RydWN0IGFkZF9wX3N0YXRlICpzLAorCQkJICBzdHJ1Y3QgZmlsZV9kaWZmICpmaWxlX2RpZmYsIHN0cnVjdCBodW5rICpodW5rKQoreworCXNpemVfdCBwbGFpbl9sZW4gPSBzLT5wbGFpbi5sZW4sIGNvbG9yZWRfbGVuID0gcy0+Y29sb3JlZC5sZW47CisJc3RydWN0IGh1bmsgYmFja3VwOworCisJYmFja3VwID0gKmh1bms7CisKKwlmb3IgKDs7KSB7CisJCWludCByZXMgPSBlZGl0X2h1bmtfbWFudWFsbHkocywgaHVuayk7CisJCWlmIChyZXMgPT0gMCkgeworCQkJLyogYWJhbmRvbmRlZCAqLworCQkJKmh1bmsgPSBiYWNrdXA7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAocmVzID4gMCkgeworCQkJaHVuay0+ZGVsdGEgKz0KKwkJCQlyZWNvdW50X2VkaXRlZF9odW5rKHMsIGh1bmssCisJCQkJCQkgICAgYmFja3VwLmhlYWRlci5vbGRfY291bnQsCisJCQkJCQkgICAgYmFja3VwLmhlYWRlci5uZXdfY291bnQpOworCQkJaWYgKCFydW5fYXBwbHlfY2hlY2socywgZmlsZV9kaWZmKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIERyb3AgZWRpdHMgKHRoZXkgd2VyZSBhcHBlbmRlZCB0byBzLT5wbGFpbikgKi8KKwkJc3RyYnVmX3NldGxlbigmcy0+cGxhaW4sIHBsYWluX2xlbik7CisJCXN0cmJ1Zl9zZXRsZW4oJnMtPmNvbG9yZWQsIGNvbG9yZWRfbGVuKTsKKwkJKmh1bmsgPSBiYWNrdXA7CisKKwkJLyoKKwkJICogVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKwkJICogVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisJCSAqIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisJCSAqIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisJCSAqIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorCQkgKi8KKwkJcmVzID0gcHJvbXB0X3llc25vKHMsIF8oIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuICIKKwkJCQkJIkVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSAiCisJCQkJCSJbeS9uXT8gIikpOworCQlpZiAocmVzIDwgMSkKKwkJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZm9yX2NoZWNrb3V0KHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IHN0cmJ1ZiAqZGlmZiwKKwkJCSAgICAgIGludCBpc19yZXZlcnNlKQoreworCWNvbnN0IGNoYXIgKnJldmVyc2UgPSBpc19yZXZlcnNlID8gIi1SIiA6IE5VTEw7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hlY2tfaW5kZXggPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hlY2tfd29ya3RyZWUgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgYXBwbHlfaW5kZXggPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgYXBwbHlfd29ya3RyZWUgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGFwcGxpZXNfaW5kZXgsIGFwcGxpZXNfd29ya3RyZWU7CisKKwlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZjaGVja19pbmRleCwKKwkJCSAgICAiYXBwbHkiLCAiLS1jYWNoZWQiLCAiLS1jaGVjayIsIHJldmVyc2UsIE5VTEwpOworCWFwcGxpZXNfaW5kZXggPSAhcGlwZV9jb21tYW5kKCZjaGVja19pbmRleCwgZGlmZi0+YnVmLCBkaWZmLT5sZW4sCisJCQkJICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisKKwlzZXR1cF9jaGlsZF9wcm9jZXNzKHMsICZjaGVja193b3JrdHJlZSwKKwkJCSAgICAiYXBwbHkiLCAiLS1jaGVjayIsIHJldmVyc2UsIE5VTEwpOworCWFwcGxpZXNfd29ya3RyZWUgPSAhcGlwZV9jb21tYW5kKCZjaGVja193b3JrdHJlZSwgZGlmZi0+YnVmLCBkaWZmLT5sZW4sCisJCQkJCSBOVUxMLCAwLCBOVUxMLCAwKTsKKworCWlmIChhcHBsaWVzX3dvcmt0cmVlICYmIGFwcGxpZXNfaW5kZXgpIHsKKwkJc2V0dXBfY2hpbGRfcHJvY2VzcyhzLCAmYXBwbHlfaW5kZXgsCisJCQkJICAgICJhcHBseSIsICItLWNhY2hlZCIsIHJldmVyc2UsIE5VTEwpOworCQlwaXBlX2NvbW1hbmQoJmFwcGx5X2luZGV4LCBkaWZmLT5idWYsIGRpZmYtPmxlbiwKKwkJCSAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisKKwkJc2V0dXBfY2hpbGRfcHJvY2VzcyhzLCAmYXBwbHlfd29ya3RyZWUsCisJCQkJICAgICJhcHBseSIsIHJldmVyc2UsIE5VTEwpOworCQlwaXBlX2NvbW1hbmQoJmFwcGx5X3dvcmt0cmVlLCBkaWZmLT5idWYsIGRpZmYtPmxlbiwKKwkJCSAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CisKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFhcHBsaWVzX2luZGV4KSB7CisJCWVycihzLCBfKCJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCEiKSk7CisJCWlmIChwcm9tcHRfeWVzbm8ocywgXygiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgIgorCQkJCQkgICJhbnl3YXk/ICIpKSA+IDApIHsKKwkJCXNldHVwX2NoaWxkX3Byb2Nlc3MocywgJmFwcGx5X3dvcmt0cmVlLAorCQkJCQkgICAgImFwcGx5IiwgcmV2ZXJzZSwgTlVMTCk7CisJCQlyZXR1cm4gcGlwZV9jb21tYW5kKCZhcHBseV93b3JrdHJlZSwgZGlmZi0+YnVmLAorCQkJCQkgICAgZGlmZi0+bGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKKwkJfQorCQllcnIocywgXygiTm90aGluZyB3YXMgYXBwbGllZC5cbiIpKTsKKwl9IGVsc2UKKwkJLyogQXMgYSBsYXN0IHJlc29ydCwgc2hvdyB0aGUgZGlmZiB0byB0aGUgdXNlciAqLworCQlmd3JpdGUoZGlmZi0+YnVmLCBkaWZmLT5sZW4sIDEsIHN0ZGVycik7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBTVU1NQVJZX0hFQURFUl9XSURUSCAyMAorI2RlZmluZSBTVU1NQVJZX0xJTkVfV0lEVEggODAKK3N0YXRpYyB2b2lkIHN1bW1hcml6ZV9odW5rKHN0cnVjdCBhZGRfcF9zdGF0ZSAqcywgc3RydWN0IGh1bmsgKmh1bmssCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJc3RydWN0IGh1bmtfaGVhZGVyICpoZWFkZXIgPSAmaHVuay0+aGVhZGVyOworCXN0cnVjdCBzdHJidWYgKnBsYWluID0gJnMtPnBsYWluOworCXNpemVfdCBsZW4gPSBvdXQtPmxlbiwgaTsKKworCXN0cmJ1Zl9hZGRmKG91dCwgIiAtJWx1LCVsdSArJWx1LCVsdSAiLAorCQkgICAgaGVhZGVyLT5vbGRfb2Zmc2V0LCBoZWFkZXItPm9sZF9jb3VudCwKKwkJICAgIGhlYWRlci0+bmV3X29mZnNldCwgaGVhZGVyLT5uZXdfY291bnQpOworCWlmIChvdXQtPmxlbiAtIGxlbiA8IFNVTU1BUllfSEVBREVSX1dJRFRIKQorCQlzdHJidWZfYWRkY2hhcnMob3V0LCAnICcsCisJCQkJU1VNTUFSWV9IRUFERVJfV0lEVEggKyBsZW4gLSBvdXQtPmxlbik7CisJZm9yIChpID0gaHVuay0+c3RhcnQ7IGkgPCBodW5rLT5lbmQ7IGkgPSBmaW5kX25leHRfbGluZShwbGFpbiwgaSkpCisJCWlmIChwbGFpbi0+YnVmW2ldICE9ICcgJykKKwkJCWJyZWFrOworCWlmIChpIDwgaHVuay0+ZW5kKQorCQlzdHJidWZfYWRkKG91dCwgcGxhaW4tPmJ1ZiArIGksIGZpbmRfbmV4dF9saW5lKHBsYWluLCBpKSAtIGkpOworCWlmIChvdXQtPmxlbiAtIGxlbiA+IFNVTU1BUllfTElORV9XSURUSCkKKwkJc3RyYnVmX3NldGxlbihvdXQsIGxlbiArIFNVTU1BUllfTElORV9XSURUSCk7CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUob3V0KTsKK30KKworI2RlZmluZSBESVNQTEFZX0hVTktTX0xJTkVTIDIwCitzdGF0aWMgc2l6ZV90IGRpc3BsYXlfaHVua3Moc3RydWN0IGFkZF9wX3N0YXRlICpzLAorCQkJICAgIHN0cnVjdCBmaWxlX2RpZmYgKmZpbGVfZGlmZiwgc2l6ZV90IHN0YXJ0X2luZGV4KQoreworCXNpemVfdCBlbmRfaW5kZXggPSBzdGFydF9pbmRleCArIERJU1BMQVlfSFVOS1NfTElORVM7CisKKwlpZiAoZW5kX2luZGV4ID4gZmlsZV9kaWZmLT5odW5rX25yKQorCQllbmRfaW5kZXggPSBmaWxlX2RpZmYtPmh1bmtfbnI7CisKKwl3aGlsZSAoc3RhcnRfaW5kZXggPCBlbmRfaW5kZXgpIHsKKwkJc3RydWN0IGh1bmsgKmh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBzdGFydF9pbmRleCsrOworCisJCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwkJc3RyYnVmX2FkZGYoJnMtPmJ1ZiwgIiVjJTJkOiAiLCBodW5rLT51c2UgPT0gVVNFX0hVTksgPyAnKycKKwkJCSAgICA6IGh1bmstPnVzZSA9PSBTS0lQX0hVTksgPyAnLScgOiAnICcsCisJCQkgICAgKGludClzdGFydF9pbmRleCk7CisJCXN1bW1hcml6ZV9odW5rKHMsIGh1bmssICZzLT5idWYpOworCQlmcHV0cyhzLT5idWYuYnVmLCBzdGRvdXQpOworCX0KKworCXJldHVybiBlbmRfaW5kZXg7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGhlbHBfcGF0Y2hfcmVtYWluZGVyW10gPQorTl8oImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorICAgIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisgICAiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorICAgIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorICAgImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisgICAiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorICAgInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorICAgImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyAgICI/IC0gcHJpbnQgaGVscFxuIik7CisKK3N0YXRpYyBpbnQgcGF0Y2hfdXBkYXRlX2ZpbGUoc3RydWN0IGFkZF9wX3N0YXRlICpzLAorCQkJICAgICBzdHJ1Y3QgZmlsZV9kaWZmICpmaWxlX2RpZmYpCit7CisJc2l6ZV90IGh1bmtfaW5kZXggPSAwOworCXNzaXplX3QgaSwgdW5kZWNpZGVkX3ByZXZpb3VzLCB1bmRlY2lkZWRfbmV4dDsKKwlzdHJ1Y3QgaHVuayAqaHVuazsKKwljaGFyIGNoOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBjb2xvcmVkID0gISFzLT5jb2xvcmVkLmxlbiwgcXVpdCA9IDA7CisJZW51bSBwcm9tcHRfbW9kZV90eXBlIHByb21wdF9tb2RlX3R5cGU7CisKKwlpZiAoIWZpbGVfZGlmZi0+aHVua19ucikKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfcmVzZXQoJnMtPmJ1Zik7CisJcmVuZGVyX2RpZmZfaGVhZGVyKHMsIGZpbGVfZGlmZiwgY29sb3JlZCwgJnMtPmJ1Zik7CisJZnB1dHMocy0+YnVmLmJ1Ziwgc3Rkb3V0KTsKKwlmb3IgKDs7KSB7CisJCWlmIChodW5rX2luZGV4ID49IGZpbGVfZGlmZi0+aHVua19ucikKKwkJCWh1bmtfaW5kZXggPSAwOworCQlodW5rID0gZmlsZV9kaWZmLT5odW5rICsgaHVua19pbmRleDsKKworCQl1bmRlY2lkZWRfcHJldmlvdXMgPSAtMTsKKwkJZm9yIChpID0gaHVua19pbmRleCAtIDE7IGkgPj0gMDsgaS0tKQorCQkJaWYgKGZpbGVfZGlmZi0+aHVua1tpXS51c2UgPT0gVU5ERUNJREVEX0hVTkspIHsKKwkJCQl1bmRlY2lkZWRfcHJldmlvdXMgPSBpOworCQkJCWJyZWFrOworCQkJfQorCisJCXVuZGVjaWRlZF9uZXh0ID0gLTE7CisJCWZvciAoaSA9IGh1bmtfaW5kZXggKyAxOyBpIDwgZmlsZV9kaWZmLT5odW5rX25yOyBpKyspCisJCQlpZiAoZmlsZV9kaWZmLT5odW5rW2ldLnVzZSA9PSBVTkRFQ0lERURfSFVOSykgeworCQkJCXVuZGVjaWRlZF9uZXh0ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkvKiBFdmVyeXRoaW5nIGRlY2lkZWQ/ICovCisJCWlmICh1bmRlY2lkZWRfcHJldmlvdXMgPCAwICYmIHVuZGVjaWRlZF9uZXh0IDwgMCAmJgorCQkgICAgaHVuay0+dXNlICE9IFVOREVDSURFRF9IVU5LKQorCQkJYnJlYWs7CisKKwkJc3RyYnVmX3Jlc2V0KCZzLT5idWYpOworCQlyZW5kZXJfaHVuayhzLCBodW5rLCAwLCBjb2xvcmVkLCAmcy0+YnVmKTsKKwkJZnB1dHMocy0+YnVmLmJ1Ziwgc3Rkb3V0KTsKKworCQlzdHJidWZfcmVzZXQoJnMtPmJ1Zik7CisJCWlmICh1bmRlY2lkZWRfcHJldmlvdXMgPj0gMCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnMtPmJ1ZiwgIixrIik7CisJCWlmIChodW5rX2luZGV4KQorCQkJc3RyYnVmX2FkZHN0cigmcy0+YnVmLCAiLEsiKTsKKwkJaWYgKHVuZGVjaWRlZF9uZXh0ID49IDApCisJCQlzdHJidWZfYWRkc3RyKCZzLT5idWYsICIsaiIpOworCQlpZiAoaHVua19pbmRleCArIDEgPCBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCQlzdHJidWZfYWRkc3RyKCZzLT5idWYsICIsSiIpOworCQlpZiAoZmlsZV9kaWZmLT5odW5rX25yID4gMSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnMtPmJ1ZiwgIixnLC8iKTsKKwkJaWYgKGh1bmstPnNwbGl0dGFibGVfaW50byA+IDEpCisJCQlzdHJidWZfYWRkc3RyKCZzLT5idWYsICIscyIpOworCQlpZiAoaHVua19pbmRleCArIDEgPiBmaWxlX2RpZmYtPm1vZGVfY2hhbmdlICYmCisJCSAgICAhZmlsZV9kaWZmLT5kZWxldGVkKQorCQkJc3RyYnVmX2FkZHN0cigmcy0+YnVmLCAiLGUiKTsKKworCQlpZiAoZmlsZV9kaWZmLT5kZWxldGVkKQorCQkJcHJvbXB0X21vZGVfdHlwZSA9IFBST01QVF9ERUxFVElPTjsKKwkJZWxzZSBpZiAoZmlsZV9kaWZmLT5tb2RlX2NoYW5nZSAmJiAhaHVua19pbmRleCkKKwkJCXByb21wdF9tb2RlX3R5cGUgPSBQUk9NUFRfTU9ERV9DSEFOR0U7CisJCWVsc2UKKwkJCXByb21wdF9tb2RlX3R5cGUgPSBQUk9NUFRfSFVOSzsKKworCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgcy0+cy5wcm9tcHRfY29sb3IsCisJCQkgICAgICAiKCUiUFJJdU1BWCIvJSJQUkl1TUFYIikgIiwKKwkJCSAgICAgICh1aW50bWF4X3QpaHVua19pbmRleCArIDEsCisJCQkgICAgICAodWludG1heF90KWZpbGVfZGlmZi0+aHVua19ucik7CisJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBzLT5zLnByb21wdF9jb2xvciwKKwkJCSAgICAgIF8ocy0+bW9kZS0+cHJvbXB0X21vZGVbcHJvbXB0X21vZGVfdHlwZV0pLAorCQkJICAgICAgcy0+YnVmLmJ1Zik7CisJCWZmbHVzaChzdGRvdXQpOworCQlpZiAocmVhZF9zaW5nbGVfY2hhcmFjdGVyKHMpID09IEVPRikKKwkJCWJyZWFrOworCisJCWlmICghcy0+YW5zd2VyLmxlbikKKwkJCWNvbnRpbnVlOworCQljaCA9IHRvbG93ZXIocy0+YW5zd2VyLmJ1ZlswXSk7CisJCWlmIChjaCA9PSAneScpIHsKKwkJCWh1bmstPnVzZSA9IFVTRV9IVU5LOworc29mdF9pbmNyZW1lbnQ6CisJCQlodW5rX2luZGV4ID0gdW5kZWNpZGVkX25leHQgPCAwID8KKwkJCQlmaWxlX2RpZmYtPmh1bmtfbnIgOiB1bmRlY2lkZWRfbmV4dDsKKwkJfSBlbHNlIGlmIChjaCA9PSAnbicpIHsKKwkJCWh1bmstPnVzZSA9IFNLSVBfSFVOSzsKKwkJCWdvdG8gc29mdF9pbmNyZW1lbnQ7CisJCX0gZWxzZSBpZiAoY2ggPT0gJ2EnKSB7CisJCQlmb3IgKDsgaHVua19pbmRleCA8IGZpbGVfZGlmZi0+aHVua19ucjsgaHVua19pbmRleCsrKSB7CisJCQkJaHVuayA9IGZpbGVfZGlmZi0+aHVuayArIGh1bmtfaW5kZXg7CisJCQkJaWYgKGh1bmstPnVzZSA9PSBVTkRFQ0lERURfSFVOSykKKwkJCQkJaHVuay0+dXNlID0gVVNFX0hVTks7CisJCQl9CisJCX0gZWxzZSBpZiAoY2ggPT0gJ2QnIHx8IGNoID09ICdxJykgeworCQkJZm9yICg7IGh1bmtfaW5kZXggPCBmaWxlX2RpZmYtPmh1bmtfbnI7IGh1bmtfaW5kZXgrKykgeworCQkJCWh1bmsgPSBmaWxlX2RpZmYtPmh1bmsgKyBodW5rX2luZGV4OworCQkJCWlmIChodW5rLT51c2UgPT0gVU5ERUNJREVEX0hVTkspCisJCQkJCWh1bmstPnVzZSA9IFNLSVBfSFVOSzsKKwkJCX0KKwkJCWlmIChjaCA9PSAncScpIHsKKwkJCQlxdWl0ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIGlmIChzLT5hbnN3ZXIuYnVmWzBdID09ICdLJykgeworCQkJaWYgKGh1bmtfaW5kZXgpCisJCQkJaHVua19pbmRleC0tOworCQkJZWxzZQorCQkJCWVycihzLCBfKCJObyBwcmV2aW91cyBodW5rIikpOworCQl9IGVsc2UgaWYgKHMtPmFuc3dlci5idWZbMF0gPT0gJ0onKSB7CisJCQlpZiAoaHVua19pbmRleCArIDEgPCBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCQkJaHVua19pbmRleCsrOworCQkJZWxzZQorCQkJCWVycihzLCBfKCJObyBuZXh0IGh1bmsiKSk7CisJCX0gZWxzZSBpZiAocy0+YW5zd2VyLmJ1ZlswXSA9PSAnaycpIHsKKwkJCWlmICh1bmRlY2lkZWRfcHJldmlvdXMgPj0gMCkKKwkJCQlodW5rX2luZGV4ID0gdW5kZWNpZGVkX3ByZXZpb3VzOworCQkJZWxzZQorCQkJCWVycihzLCBfKCJObyBwcmV2aW91cyBodW5rIikpOworCQl9IGVsc2UgaWYgKHMtPmFuc3dlci5idWZbMF0gPT0gJ2onKSB7CisJCQlpZiAodW5kZWNpZGVkX25leHQgPj0gMCkKKwkJCQlodW5rX2luZGV4ID0gdW5kZWNpZGVkX25leHQ7CisJCQllbHNlCisJCQkJZXJyKHMsIF8oIk5vIG5leHQgaHVuayIpKTsKKwkJfSBlbHNlIGlmIChzLT5hbnN3ZXIuYnVmWzBdID09ICdnJykgeworCQkJY2hhciAqcGVuZDsKKwkJCXVuc2lnbmVkIGxvbmcgcmVzcG9uc2U7CisKKwkJCWlmIChmaWxlX2RpZmYtPmh1bmtfbnIgPCAyKSB7CisJCQkJZXJyKHMsIF8oIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iKSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJidWZfcmVtb3ZlKCZzLT5hbnN3ZXIsIDAsIDEpOworCQkJc3RyYnVmX3RyaW0oJnMtPmFuc3dlcik7CisJCQlpID0gaHVua19pbmRleCAtIERJU1BMQVlfSFVOS1NfTElORVMgLyAyOworCQkJaWYgKGkgPCBmaWxlX2RpZmYtPm1vZGVfY2hhbmdlKQorCQkJCWkgPSBmaWxlX2RpZmYtPm1vZGVfY2hhbmdlOworCQkJd2hpbGUgKHMtPmFuc3dlci5sZW4gPT0gMCkgeworCQkJCWkgPSBkaXNwbGF5X2h1bmtzKHMsIGZpbGVfZGlmZiwgaSk7CisJCQkJcHJpbnRmKCIlcyIsIGkgPCBmaWxlX2RpZmYtPmh1bmtfbnIgPworCQkJCSAgICAgICBfKCJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgIgorCQkJCQkgIm1vcmUpPyAiKSA6IF8oImdvIHRvIHdoaWNoIGh1bms/ICIpKTsKKwkJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCQlpZiAoc3RyYnVmX2dldGxpbmUoJnMtPmFuc3dlciwKKwkJCQkJCSAgIHN0ZGluKSA9PSBFT0YpCisJCQkJCWJyZWFrOworCQkJCXN0cmJ1Zl90cmltX3RyYWlsaW5nX25ld2xpbmUoJnMtPmFuc3dlcik7CisJCQl9CisKKwkJCXN0cmJ1Zl90cmltKCZzLT5hbnN3ZXIpOworCQkJcmVzcG9uc2UgPSBzdHJ0b3VsKHMtPmFuc3dlci5idWYsICZwZW5kLCAxMCk7CisJCQlpZiAoKnBlbmQgfHwgcGVuZCA9PSBzLT5hbnN3ZXIuYnVmKQorCQkJCWVycihzLCBfKCJJbnZhbGlkIG51bWJlcjogJyVzJyIpLAorCQkJCSAgICBzLT5hbnN3ZXIuYnVmKTsKKwkJCWVsc2UgaWYgKDAgPCByZXNwb25zZSAmJiByZXNwb25zZSA8PSBmaWxlX2RpZmYtPmh1bmtfbnIpCisJCQkJaHVua19pbmRleCA9IHJlc3BvbnNlIC0gMTsKKwkJCWVsc2UKKwkJCQllcnIocywgUV8oIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIsCisJCQkJCSAgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS4iLAorCQkJCQkgIGZpbGVfZGlmZi0+aHVua19uciksCisJCQkJICAgIChpbnQpZmlsZV9kaWZmLT5odW5rX25yKTsKKwkJfSBlbHNlIGlmIChzLT5hbnN3ZXIuYnVmWzBdID09ICcvJykgeworCQkJcmVnZXhfdCByZWdleDsKKwkJCWludCByZXQ7CisKKwkJCWlmIChmaWxlX2RpZmYtPmh1bmtfbnIgPCAyKSB7CisJCQkJZXJyKHMsIF8oIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZW1vdmUoJnMtPmFuc3dlciwgMCwgMSk7CisJCQlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKCZzLT5hbnN3ZXIpOworCQkJaWYgKHMtPmFuc3dlci5sZW4gPT0gMCkgeworCQkJCXByaW50ZigiJXMiLCBfKCJzZWFyY2ggZm9yIHJlZ2V4PyAiKSk7CisJCQkJZmZsdXNoKHN0ZG91dCk7CisJCQkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZzLT5hbnN3ZXIsCisJCQkJCQkgICBzdGRpbikgPT0gRU9GKQorCQkJCQlicmVhazsKKwkJCQlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKCZzLT5hbnN3ZXIpOworCQkJCWlmIChzLT5hbnN3ZXIubGVuID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmV0ID0gcmVnY29tcCgmcmVnZXgsIHMtPmFuc3dlci5idWYsCisJCQkJICAgICAgUkVHX0VYVEVOREVEIHwgUkVHX05PU1VCIHwgUkVHX05FV0xJTkUpOworCQkJaWYgKHJldCkgeworCQkJCWNoYXIgZXJyYnVmWzEwMjRdOworCisJCQkJcmVnZXJyb3IocmV0LCAmcmVnZXgsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOworCQkJCWVycihzLCBfKCJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXMiKSwKKwkJCQkgICAgcy0+YW5zd2VyLmJ1ZiwgZXJyYnVmKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWkgPSBodW5rX2luZGV4OworCQkJZm9yICg7OykgeworCQkJCS8qIHJlbmRlciB0aGUgaHVuayBpbnRvIGEgc2NyYXRjaCBidWZmZXIgKi8KKwkJCQlyZW5kZXJfaHVuayhzLCBmaWxlX2RpZmYtPmh1bmsgKyBpLCAwLCAwLAorCQkJCQkgICAgJnMtPmJ1Zik7CisJCQkJaWYgKHJlZ2V4ZWMoJnJlZ2V4LCBzLT5idWYuYnVmLCAwLCBOVUxMLCAwKQorCQkJCSAgICAhPSBSRUdfTk9NQVRDSCkKKwkJCQkJYnJlYWs7CisJCQkJaSsrOworCQkJCWlmIChpID09IGZpbGVfZGlmZi0+aHVua19ucikKKwkJCQkJaSA9IDA7CisJCQkJaWYgKGkgIT0gaHVua19pbmRleCkKKwkJCQkJY29udGludWU7CisJCQkJZXJyKHMsIF8oIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWh1bmtfaW5kZXggPSBpOworCQl9IGVsc2UgaWYgKHMtPmFuc3dlci5idWZbMF0gPT0gJ3MnKSB7CisJCQlzaXplX3Qgc3BsaXR0YWJsZV9pbnRvID0gaHVuay0+c3BsaXR0YWJsZV9pbnRvOworCQkJaWYgKHNwbGl0dGFibGVfaW50byA8IDIpCisJCQkJZXJyKHMsIF8oIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rIikpOworCQkJZWxzZSBpZiAoIXNwbGl0X2h1bmsocywgZmlsZV9kaWZmLAorCQkJCQkgICAgIGh1bmsgLSBmaWxlX2RpZmYtPmh1bmspKQorCQkJCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5zLmhlYWRlcl9jb2xvciwKKwkJCQkJCSBfKCJTcGxpdCBpbnRvICVkIGh1bmtzLiIpLAorCQkJCQkJIChpbnQpc3BsaXR0YWJsZV9pbnRvKTsKKwkJfSBlbHNlIGlmIChzLT5hbnN3ZXIuYnVmWzBdID09ICdlJykgeworCQkJaWYgKGh1bmtfaW5kZXggKyAxID09IGZpbGVfZGlmZi0+bW9kZV9jaGFuZ2UpCisJCQkJZXJyKHMsIF8oIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiKSk7CisJCQllbHNlIGlmIChlZGl0X2h1bmtfbG9vcChzLCBmaWxlX2RpZmYsIGh1bmspID49IDApIHsKKwkJCQlodW5rLT51c2UgPSBVU0VfSFVOSzsKKwkJCQlnb3RvIHNvZnRfaW5jcmVtZW50OworCQkJfQorCQl9IGVsc2UgeworCQkJY29uc3QgY2hhciAqcCA9IF8oaGVscF9wYXRjaF9yZW1haW5kZXIpLCAqZW9sID0gcDsKKworCQkJY29sb3JfZnByaW50ZihzdGRvdXQsIHMtPnMuaGVscF9jb2xvciwgIiVzIiwKKwkJCQkgICAgICBfKHMtPm1vZGUtPmhlbHBfcGF0Y2hfdGV4dCkpOworCisJCQkvKgorCQkJICogU2hvdyBvbmx5IHRob3NlIGxpbmVzIG9mIHRoZSByZW1haW5kZXIgdGhhdCBhcmUKKwkJCSAqIGFjdHVhbGx5IGFwcGxpY2FibGUgd2l0aCB0aGUgY3VycmVudCBodW5rLgorCQkJICovCisJCQlmb3IgKDsgKnA7IHAgPSBlb2wgKyAoKmVvbCA9PSAnXG4nKSkgeworCQkJCWVvbCA9IHN0cmNocm51bChwLCAnXG4nKTsKKworCQkJCS8qCisJCQkJICogYHMtPmJ1ZmAgc3RpbGwgY29udGFpbnMgdGhlIHBhcnQgb2YgdGhlCisJCQkJICogY29tbWFuZHMgc2hvd24gaW4gdGhlIHByb21wdCB0aGF0IGFyZSBub3QKKwkJCQkgKiBhbHdheXMgYXZhaWxhYmxlLgorCQkJCSAqLworCQkJCWlmICgqcCAhPSAnPycgJiYgIXN0cmNocihzLT5idWYuYnVmLCAqcCkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPnMuaGVscF9jb2xvciwKKwkJCQkJCSAiJS4qcyIsIChpbnQpKGVvbCAtIHApLCBwKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEFueSBodW5rIHRvIGJlIHVzZWQ/ICovCisJZm9yIChpID0gMDsgaSA8IGZpbGVfZGlmZi0+aHVua19ucjsgaSsrKQorCQlpZiAoZmlsZV9kaWZmLT5odW5rW2ldLnVzZSA9PSBVU0VfSFVOSykKKwkJCWJyZWFrOworCisJaWYgKGkgPCBmaWxlX2RpZmYtPmh1bmtfbnIpIHsKKwkJLyogQXQgbGVhc3Qgb25lIGh1bmsgc2VsZWN0ZWQ6IGFwcGx5ICovCisJCXN0cmJ1Zl9yZXNldCgmcy0+YnVmKTsKKwkJcmVhc3NlbWJsZV9wYXRjaChzLCBmaWxlX2RpZmYsIDAsICZzLT5idWYpOworCisJCWRpc2NhcmRfaW5kZXgocy0+cy5yLT5pbmRleCk7CisJCWlmIChzLT5tb2RlLT5hcHBseV9mb3JfY2hlY2tvdXQpCisJCQlhcHBseV9mb3JfY2hlY2tvdXQocywgJnMtPmJ1ZiwKKwkJCQkJICAgcy0+bW9kZS0+aXNfcmV2ZXJzZSk7CisJCWVsc2UgeworCQkJc2V0dXBfY2hpbGRfcHJvY2VzcyhzLCAmY3AsICJhcHBseSIsIE5VTEwpOworCQkJYXJndl9hcnJheV9wdXNodigmY3AuYXJncywgcy0+bW9kZS0+YXBwbHlfYXJncyk7CisJCQlpZiAocGlwZV9jb21tYW5kKCZjcCwgcy0+YnVmLmJ1Ziwgcy0+YnVmLmxlbiwKKwkJCQkJIE5VTEwsIDAsIE5VTEwsIDApKQorCQkJCWVycm9yKF8oIidnaXQgYXBwbHknIGZhaWxlZCIpKTsKKwkJfQorCQlpZiAoIXJlcG9fcmVhZF9pbmRleChzLT5zLnIpKQorCQkJcmVwb19yZWZyZXNoX2FuZF93cml0ZV9pbmRleChzLT5zLnIsIFJFRlJFU0hfUVVJRVQsIDAsCisJCQkJCQkgICAgIDEsIE5VTEwsIE5VTEwsIE5VTEwpOworCX0KKworCXB1dGNoYXIoJ1xuJyk7CisJcmV0dXJuIHF1aXQ7Cit9CisKK2ludCBydW5fYWRkX3Aoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGVudW0gYWRkX3BfbW9kZSBtb2RlLAorCSAgICAgIGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKQoreworCXN0cnVjdCBhZGRfcF9zdGF0ZSBzID0geworCQl7IHIgfSwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQKKwl9OworCXNpemVfdCBpLCBiaW5hcnlfY291bnQgPSAwOworCisJaW5pdF9hZGRfaV9zdGF0ZSgmcy5zLCByKTsKKworCWlmIChtb2RlID09IEFERF9QX1NUQVNIKQorCQlzLm1vZGUgPSAmcGF0Y2hfbW9kZV9zdGFzaDsKKwllbHNlIGlmIChtb2RlID09IEFERF9QX1JFU0VUKSB7CisJCWlmICghcmV2aXNpb24gfHwgIXN0cmNtcChyZXZpc2lvbiwgIkhFQUQiKSkKKwkJCXMubW9kZSA9ICZwYXRjaF9tb2RlX3Jlc2V0X2hlYWQ7CisJCWVsc2UKKwkJCXMubW9kZSA9ICZwYXRjaF9tb2RlX3Jlc2V0X25vdGhlYWQ7CisJfSBlbHNlIGlmIChtb2RlID09IEFERF9QX0NIRUNLT1VUKSB7CisJCWlmICghcmV2aXNpb24pCisJCQlzLm1vZGUgPSAmcGF0Y2hfbW9kZV9jaGVja291dF9pbmRleDsKKwkJZWxzZSBpZiAoIXN0cmNtcChyZXZpc2lvbiwgIkhFQUQiKSkKKwkJCXMubW9kZSA9ICZwYXRjaF9tb2RlX2NoZWNrb3V0X2hlYWQ7CisJCWVsc2UKKwkJCXMubW9kZSA9ICZwYXRjaF9tb2RlX2NoZWNrb3V0X25vdGhlYWQ7CisJfSBlbHNlIGlmIChtb2RlID09IEFERF9QX1dPUktUUkVFKSB7CisJCWlmICghcmV2aXNpb24pCisJCQlzLm1vZGUgPSAmcGF0Y2hfbW9kZV9jaGVja291dF9pbmRleDsKKwkJZWxzZSBpZiAoIXN0cmNtcChyZXZpc2lvbiwgIkhFQUQiKSkKKwkJCXMubW9kZSA9ICZwYXRjaF9tb2RlX3dvcmt0cmVlX2hlYWQ7CisJCWVsc2UKKwkJCXMubW9kZSA9ICZwYXRjaF9tb2RlX3dvcmt0cmVlX25vdGhlYWQ7CisJfSBlbHNlCisJCXMubW9kZSA9ICZwYXRjaF9tb2RlX2FkZDsKKwlzLnJldmlzaW9uID0gcmV2aXNpb247CisKKwlpZiAoZGlzY2FyZF9pbmRleChyLT5pbmRleCkgPCAwIHx8IHJlcG9fcmVhZF9pbmRleChyKSA8IDAgfHwKKwkgICAgKCFzLm1vZGUtPmluZGV4X29ubHkgJiYKKwkgICAgIHJlcG9fcmVmcmVzaF9hbmRfd3JpdGVfaW5kZXgociwgUkVGUkVTSF9RVUlFVCwgMCwgMSwKKwkJCQkJICBOVUxMLCBOVUxMLCBOVUxMKSA8IDApIHx8CisJICAgIHBhcnNlX2RpZmYoJnMsIHBzKSA8IDApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnMucGxhaW4pOworCQlzdHJidWZfcmVsZWFzZSgmcy5jb2xvcmVkKTsKKwkJY2xlYXJfYWRkX2lfc3RhdGUoJnMucyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcy5maWxlX2RpZmZfbnI7IGkrKykKKwkJaWYgKHMuZmlsZV9kaWZmW2ldLmJpbmFyeSAmJiAhcy5maWxlX2RpZmZbaV0uaHVua19ucikKKwkJCWJpbmFyeV9jb3VudCsrOworCQllbHNlIGlmIChwYXRjaF91cGRhdGVfZmlsZSgmcywgcy5maWxlX2RpZmYgKyBpKSkKKwkJCWJyZWFrOworCisJaWYgKHMuZmlsZV9kaWZmX25yID09IDApCisJCWZwcmludGYoc3RkZXJyLCBfKCJObyBjaGFuZ2VzLlxuIikpOworCWVsc2UgaWYgKGJpbmFyeV9jb3VudCA9PSBzLmZpbGVfZGlmZl9ucikKKwkJZnByaW50ZihzdGRlcnIsIF8oIk9ubHkgYmluYXJ5IGZpbGVzIGNoYW5nZWQuXG4iKSk7CisKKwlzdHJidWZfcmVsZWFzZSgmcy5hbnN3ZXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZzLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnMucGxhaW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZzLmNvbG9yZWQpOworCWNsZWFyX2FkZF9pX3N0YXRlKCZzLnMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWR2aWNlLmMgYi9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2YzZjk4Ci0tLSAvZGV2L251bGwKKysrIGIvYWR2aWNlLmMKQEAgLTAsMCArMSwyMjYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiaGVscC5oIgorCitpbnQgYWR2aWNlX2ZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMgPSAxOworaW50IGFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCA9IDE7CitpbnQgYWR2aWNlX3B1c2hfbm9uX2ZmX2N1cnJlbnQgPSAxOworaW50IGFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZyA9IDE7CitpbnQgYWR2aWNlX3B1c2hfYWxyZWFkeV9leGlzdHMgPSAxOworaW50IGFkdmljZV9wdXNoX2ZldGNoX2ZpcnN0ID0gMTsKK2ludCBhZHZpY2VfcHVzaF9uZWVkc19mb3JjZSA9IDE7CitpbnQgYWR2aWNlX3B1c2hfdW5xdWFsaWZpZWRfcmVmX25hbWUgPSAxOworaW50IGFkdmljZV9zdGF0dXNfaGludHMgPSAxOworaW50IGFkdmljZV9zdGF0dXNfdV9vcHRpb24gPSAxOworaW50IGFkdmljZV9zdGF0dXNfYWhlYWRfYmVoaW5kX3dhcm5pbmcgPSAxOworaW50IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlID0gMTsKK2ludCBhZHZpY2VfcmVzZXRfcXVpZXRfd2FybmluZyA9IDE7CitpbnQgYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QgPSAxOworaW50IGFkdmljZV9zZXF1ZW5jZXJfaW5fdXNlID0gMTsKK2ludCBhZHZpY2VfaW1wbGljaXRfaWRlbnRpdHkgPSAxOworaW50IGFkdmljZV9kZXRhY2hlZF9oZWFkID0gMTsKK2ludCBhZHZpY2Vfc2V0X3Vwc3RyZWFtX2ZhaWx1cmUgPSAxOworaW50IGFkdmljZV9vYmplY3RfbmFtZV93YXJuaW5nID0gMTsKK2ludCBhZHZpY2VfYW13b3JrZGlyID0gMTsKK2ludCBhZHZpY2Vfcm1faGludHMgPSAxOworaW50IGFkdmljZV9hZGRfZW1iZWRkZWRfcmVwbyA9IDE7CitpbnQgYWR2aWNlX2lnbm9yZWRfaG9vayA9IDE7CitpbnQgYWR2aWNlX3dhaXRpbmdfZm9yX2VkaXRvciA9IDE7CitpbnQgYWR2aWNlX2dyYWZ0X2ZpbGVfZGVwcmVjYXRlZCA9IDE7CitpbnQgYWR2aWNlX2NoZWNrb3V0X2FtYmlndW91c19yZW1vdGVfYnJhbmNoX25hbWUgPSAxOworaW50IGFkdmljZV9uZXN0ZWRfdGFnID0gMTsKK2ludCBhZHZpY2Vfc3VibW9kdWxlX2FsdGVybmF0ZV9lcnJvcl9zdHJhdGVneV9kaWUgPSAxOworaW50IGFkdmljZV9hZGRfaWdub3JlZF9maWxlID0gMTsKK2ludCBhZHZpY2VfYWRkX2VtcHR5X3BhdGhzcGVjID0gMTsKKworc3RhdGljIGludCBhZHZpY2VfdXNlX2NvbG9yID0gLTE7CitzdGF0aWMgY2hhciBhZHZpY2VfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKKwlHSVRfQ09MT1JfUkVTRVQsCisJR0lUX0NPTE9SX1lFTExPVywJLyogSElOVCAqLworfTsKKworZW51bSBjb2xvcl9hZHZpY2UgeworCUFEVklDRV9DT0xPUl9SRVNFVCA9IDAsCisJQURWSUNFX0NPTE9SX0hJTlQgPSAxLAorfTsKKworc3RhdGljIGludCBwYXJzZV9hZHZpc2VfY29sb3Jfc2xvdChjb25zdCBjaGFyICpzbG90KQoreworCWlmICghc3RyY2FzZWNtcChzbG90LCAicmVzZXQiKSkKKwkJcmV0dXJuIEFEVklDRV9DT0xPUl9SRVNFVDsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgImhpbnQiKSkKKwkJcmV0dXJuIEFEVklDRV9DT0xPUl9ISU5UOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFkdmlzZV9nZXRfY29sb3IoZW51bSBjb2xvcl9hZHZpY2UgaXgpCit7CisJaWYgKHdhbnRfY29sb3Jfc3RkZXJyKGFkdmljZV91c2VfY29sb3IpKQorCQlyZXR1cm4gYWR2aWNlX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAqcHJlZmVyZW5jZTsKK30gYWR2aWNlX2NvbmZpZ1tdID0geworCXsgImZldGNoU2hvd0ZvcmNlZFVwZGF0ZXMiLCAmYWR2aWNlX2ZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMgfSwKKwl7ICJwdXNoVXBkYXRlUmVqZWN0ZWQiLCAmYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkIH0sCisJeyAicHVzaE5vbkZGQ3VycmVudCIsICZhZHZpY2VfcHVzaF9ub25fZmZfY3VycmVudCB9LAorCXsgInB1c2hOb25GRk1hdGNoaW5nIiwgJmFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZyB9LAorCXsgInB1c2hBbHJlYWR5RXhpc3RzIiwgJmFkdmljZV9wdXNoX2FscmVhZHlfZXhpc3RzIH0sCisJeyAicHVzaEZldGNoRmlyc3QiLCAmYWR2aWNlX3B1c2hfZmV0Y2hfZmlyc3QgfSwKKwl7ICJwdXNoTmVlZHNGb3JjZSIsICZhZHZpY2VfcHVzaF9uZWVkc19mb3JjZSB9LAorCXsgInB1c2hVbnF1YWxpZmllZFJlZk5hbWUiLCAmYWR2aWNlX3B1c2hfdW5xdWFsaWZpZWRfcmVmX25hbWUgfSwKKwl7ICJzdGF0dXNIaW50cyIsICZhZHZpY2Vfc3RhdHVzX2hpbnRzIH0sCisJeyAic3RhdHVzVW9wdGlvbiIsICZhZHZpY2Vfc3RhdHVzX3Vfb3B0aW9uIH0sCisJeyAic3RhdHVzQWhlYWRCZWhpbmRXYXJuaW5nIiwgJmFkdmljZV9zdGF0dXNfYWhlYWRfYmVoaW5kX3dhcm5pbmcgfSwKKwl7ICJjb21taXRCZWZvcmVNZXJnZSIsICZhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZSB9LAorCXsgInJlc2V0UXVpZXQiLCAmYWR2aWNlX3Jlc2V0X3F1aWV0X3dhcm5pbmcgfSwKKwl7ICJyZXNvbHZlQ29uZmxpY3QiLCAmYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QgfSwKKwl7ICJzZXF1ZW5jZXJJblVzZSIsICZhZHZpY2Vfc2VxdWVuY2VyX2luX3VzZSB9LAorCXsgImltcGxpY2l0SWRlbnRpdHkiLCAmYWR2aWNlX2ltcGxpY2l0X2lkZW50aXR5IH0sCisJeyAiZGV0YWNoZWRIZWFkIiwgJmFkdmljZV9kZXRhY2hlZF9oZWFkIH0sCisJeyAic2V0dXBTdHJlYW1GYWlsdXJlIiwgJmFkdmljZV9zZXRfdXBzdHJlYW1fZmFpbHVyZSB9LAorCXsgIm9iamVjdE5hbWVXYXJuaW5nIiwgJmFkdmljZV9vYmplY3RfbmFtZV93YXJuaW5nIH0sCisJeyAiYW1Xb3JrRGlyIiwgJmFkdmljZV9hbXdvcmtkaXIgfSwKKwl7ICJybUhpbnRzIiwgJmFkdmljZV9ybV9oaW50cyB9LAorCXsgImFkZEVtYmVkZGVkUmVwbyIsICZhZHZpY2VfYWRkX2VtYmVkZGVkX3JlcG8gfSwKKwl7ICJpZ25vcmVkSG9vayIsICZhZHZpY2VfaWdub3JlZF9ob29rIH0sCisJeyAid2FpdGluZ0ZvckVkaXRvciIsICZhZHZpY2Vfd2FpdGluZ19mb3JfZWRpdG9yIH0sCisJeyAiZ3JhZnRGaWxlRGVwcmVjYXRlZCIsICZhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkIH0sCisJeyAiY2hlY2tvdXRBbWJpZ3VvdXNSZW1vdGVCcmFuY2hOYW1lIiwgJmFkdmljZV9jaGVja291dF9hbWJpZ3VvdXNfcmVtb3RlX2JyYW5jaF9uYW1lIH0sCisJeyAibmVzdGVkVGFnIiwgJmFkdmljZV9uZXN0ZWRfdGFnIH0sCisJeyAic3VibW9kdWxlQWx0ZXJuYXRlRXJyb3JTdHJhdGVneURpZSIsICZhZHZpY2Vfc3VibW9kdWxlX2FsdGVybmF0ZV9lcnJvcl9zdHJhdGVneV9kaWUgfSwKKwl7ICJhZGRJZ25vcmVkRmlsZSIsICZhZHZpY2VfYWRkX2lnbm9yZWRfZmlsZSB9LAorCXsgImFkZEVtcHR5UGF0aHNwZWMiLCAmYWR2aWNlX2FkZF9lbXB0eV9wYXRoc3BlYyB9LAorCisJLyogbWFrZSB0aGlzIGFuIGFsaWFzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJeyAicHVzaE5vbkZhc3RGb3J3YXJkIiwgJmFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCB9Cit9OworCit2b2lkIGFkdmlzZShjb25zdCBjaGFyICphZHZpY2UsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgcGFyYW1zOworCWNvbnN0IGNoYXIgKmNwLCAqbnA7CisKKwl2YV9zdGFydChwYXJhbXMsIGFkdmljZSk7CisJc3RyYnVmX3ZhZGRmKCZidWYsIGFkdmljZSwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKworCWZvciAoY3AgPSBidWYuYnVmOyAqY3A7IGNwID0gbnApIHsKKwkJbnAgPSBzdHJjaHJudWwoY3AsICdcbicpOworCQlmcHJpbnRmKHN0ZGVyciwJXygiJXNoaW50OiAlLipzJXNcbiIpLAorCQkJYWR2aXNlX2dldF9jb2xvcihBRFZJQ0VfQ09MT1JfSElOVCksCisJCQkoaW50KShucCAtIGNwKSwgY3AsCisJCQlhZHZpc2VfZ2V0X2NvbG9yKEFEVklDRV9DT0xPUl9SRVNFVCkpOworCQlpZiAoKm5wKQorCQkJbnArKzsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK2ludCBnaXRfZGVmYXVsdF9hZHZpY2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqaywgKnNsb3RfbmFtZTsKKwlpbnQgaTsKKworCWlmICghc3RyY21wKHZhciwgImNvbG9yLmFkdmljZSIpKSB7CisJCWFkdmljZV91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNraXBfcHJlZml4KHZhciwgImNvbG9yLmFkdmljZS4iLCAmc2xvdF9uYW1lKSkgeworCQlpbnQgc2xvdCA9IHBhcnNlX2FkdmlzZV9jb2xvcl9zbG90KHNsb3RfbmFtZSk7CisJCWlmIChzbG90IDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXJldHVybiBjb2xvcl9wYXJzZSh2YWx1ZSwgYWR2aWNlX2NvbG9yc1tzbG90XSk7CisJfQorCisJaWYgKCFza2lwX3ByZWZpeCh2YXIsICJhZHZpY2UuIiwgJmspKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkdmljZV9jb25maWcpOyBpKyspIHsKKwkJaWYgKHN0cmNhc2VjbXAoaywgYWR2aWNlX2NvbmZpZ1tpXS5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQkqYWR2aWNlX2NvbmZpZ1tpXS5wcmVmZXJlbmNlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaXN0X2NvbmZpZ19hZHZpY2VzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWR2aWNlX2NvbmZpZyk7IGkrKykKKwkJbGlzdF9jb25maWdfaXRlbShsaXN0LCBwcmVmaXgsIGFkdmljZV9jb25maWdbaV0ubmFtZSk7Cit9CisKK2ludCBlcnJvcl9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKQoreworCWlmICghc3RyY21wKG1lLCAiY2hlcnJ5LXBpY2siKSkKKwkJZXJyb3IoXygiQ2hlcnJ5LXBpY2tpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIikpOworCWVsc2UgaWYgKCFzdHJjbXAobWUsICJjb21taXQiKSkKKwkJZXJyb3IoXygiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iKSk7CisJZWxzZSBpZiAoIXN0cmNtcChtZSwgIm1lcmdlIikpCisJCWVycm9yKF8oIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIikpOworCWVsc2UgaWYgKCFzdHJjbXAobWUsICJwdWxsIikpCisJCWVycm9yKF8oIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIikpOworCWVsc2UgaWYgKCFzdHJjbXAobWUsICJyZXZlcnQiKSkKKwkJZXJyb3IoXygiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIpKTsKKwllbHNlCisJCWVycm9yKF8oIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIpLAorCQkJbWUpOworCisJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkvKgorCQkgKiBNZXNzYWdlIHVzZWQgYm90aCB3aGVuICdnaXQgY29tbWl0JyBmYWlscyBhbmQgd2hlbgorCQkgKiBvdGhlciBjb21tYW5kcyBkb2luZyBhIG1lcmdlIGRvLgorCQkgKi8KKwkJYWR2aXNlKF8oIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisJCQkgImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iKSk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIE5PUkVUVVJOIGRpZV9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKQoreworCWVycm9yX3Jlc29sdmVfY29uZmxpY3QobWUpOworCWRpZShfKCJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iKSk7Cit9CisKK3ZvaWQgTk9SRVRVUk4gZGllX2NvbmNsdWRlX21lcmdlKHZvaWQpCit7CisJZXJyb3IoXygiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIikpOworCWlmIChhZHZpY2VfcmVzb2x2ZV9jb25mbGljdCkKKwkJYWR2aXNlKF8oIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iKSk7CisJZGllKF8oIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIpKTsKK30KKwordm9pZCBkZXRhY2hfYWR2aWNlKGNvbnN0IGNoYXIgKm5ld19uYW1lKQoreworCWNvbnN0IGNoYXIgKmZtdCA9CisJXygiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCisJIlxuIgorCSJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKwkiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorCSJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisJIlxuIgorCSJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKwkiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisJIlxuIgorCSIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKwkiXG4iCisJIk9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDpcbiIKKwkiXG4iCisJIiAgZ2l0IHN3aXRjaCAtXG4iCisJIlxuIgorCSJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvIGZhbHNlXG5cbiIpOworCisJZnByaW50ZihzdGRlcnIsIGZtdCwgbmV3X25hbWUpOworfQpkaWZmIC0tZ2l0IGEvYWR2aWNlLmggYi9hZHZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTZlNThkCi0tLSAvZGV2L251bGwKKysrIGIvYWR2aWNlLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBBRFZJQ0VfSAorI2RlZmluZSBBRFZJQ0VfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2V4dGVybiBpbnQgYWR2aWNlX2ZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXM7CitleHRlcm4gaW50IGFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZDsKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfbm9uX2ZmX2N1cnJlbnQ7CitleHRlcm4gaW50IGFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZzsKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfYWxyZWFkeV9leGlzdHM7CitleHRlcm4gaW50IGFkdmljZV9wdXNoX2ZldGNoX2ZpcnN0OworZXh0ZXJuIGludCBhZHZpY2VfcHVzaF9uZWVkc19mb3JjZTsKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfdW5xdWFsaWZpZWRfcmVmX25hbWU7CitleHRlcm4gaW50IGFkdmljZV9zdGF0dXNfaGludHM7CitleHRlcm4gaW50IGFkdmljZV9zdGF0dXNfdV9vcHRpb247CitleHRlcm4gaW50IGFkdmljZV9zdGF0dXNfYWhlYWRfYmVoaW5kX3dhcm5pbmc7CitleHRlcm4gaW50IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlOworZXh0ZXJuIGludCBhZHZpY2VfcmVzZXRfcXVpZXRfd2FybmluZzsKK2V4dGVybiBpbnQgYWR2aWNlX3Jlc29sdmVfY29uZmxpY3Q7CitleHRlcm4gaW50IGFkdmljZV9zZXF1ZW5jZXJfaW5fdXNlOworZXh0ZXJuIGludCBhZHZpY2VfaW1wbGljaXRfaWRlbnRpdHk7CitleHRlcm4gaW50IGFkdmljZV9kZXRhY2hlZF9oZWFkOworZXh0ZXJuIGludCBhZHZpY2Vfc2V0X3Vwc3RyZWFtX2ZhaWx1cmU7CitleHRlcm4gaW50IGFkdmljZV9vYmplY3RfbmFtZV93YXJuaW5nOworZXh0ZXJuIGludCBhZHZpY2VfYW13b3JrZGlyOworZXh0ZXJuIGludCBhZHZpY2Vfcm1faGludHM7CitleHRlcm4gaW50IGFkdmljZV9hZGRfZW1iZWRkZWRfcmVwbzsKK2V4dGVybiBpbnQgYWR2aWNlX2lnbm9yZWRfaG9vazsKK2V4dGVybiBpbnQgYWR2aWNlX3dhaXRpbmdfZm9yX2VkaXRvcjsKK2V4dGVybiBpbnQgYWR2aWNlX2dyYWZ0X2ZpbGVfZGVwcmVjYXRlZDsKK2V4dGVybiBpbnQgYWR2aWNlX2NoZWNrb3V0X2FtYmlndW91c19yZW1vdGVfYnJhbmNoX25hbWU7CitleHRlcm4gaW50IGFkdmljZV9uZXN0ZWRfdGFnOworZXh0ZXJuIGludCBhZHZpY2Vfc3VibW9kdWxlX2FsdGVybmF0ZV9lcnJvcl9zdHJhdGVneV9kaWU7CitleHRlcm4gaW50IGFkdmljZV9hZGRfaWdub3JlZF9maWxlOworZXh0ZXJuIGludCBhZHZpY2VfYWRkX2VtcHR5X3BhdGhzcGVjOworCitpbnQgZ2l0X2RlZmF1bHRfYWR2aWNlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCit2b2lkIGFkdmlzZShjb25zdCBjaGFyICphZHZpY2UsIC4uLik7CitpbnQgZXJyb3JfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSk7Cit2b2lkIE5PUkVUVVJOIGRpZV9yZXNvbHZlX2NvbmZsaWN0KGNvbnN0IGNoYXIgKm1lKTsKK3ZvaWQgTk9SRVRVUk4gZGllX2NvbmNsdWRlX21lcmdlKHZvaWQpOwordm9pZCBkZXRhY2hfYWR2aWNlKGNvbnN0IGNoYXIgKm5ld19uYW1lKTsKKworI2VuZGlmIC8qIEFEVklDRV9IICovCmRpZmYgLS1naXQgYS9hbGlhcy5jIGIvYWxpYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDcxNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYWxpYXMuYwpAQCAtMCwwICsxLDEwOCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdHJ1Y3QgY29uZmlnX2FsaWFzX2RhdGEgeworCWNvbnN0IGNoYXIgKmFsaWFzOworCWNoYXIgKnY7CisJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0OworfTsKKworc3RhdGljIGludCBjb25maWdfYWxpYXNfY2IoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29uZmlnX2FsaWFzX2RhdGEgKmRhdGEgPSBkOworCWNvbnN0IGNoYXIgKnA7CisKKwlpZiAoIXNraXBfcHJlZml4KGtleSwgImFsaWFzLiIsICZwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGF0YS0+YWxpYXMpIHsKKwkJaWYgKCFzdHJjYXNlY21wKHAsIGRhdGEtPmFsaWFzKSkKKwkJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygoY29uc3QgY2hhciAqKikmZGF0YS0+diwKKwkJCQkJCSBrZXksIHZhbHVlKTsKKwl9IGVsc2UgaWYgKGRhdGEtPmxpc3QpIHsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGRhdGEtPmxpc3QsIHApOworCX0KKworCXJldHVybiAwOworfQorCitjaGFyICphbGlhc19sb29rdXAoY29uc3QgY2hhciAqYWxpYXMpCit7CisJc3RydWN0IGNvbmZpZ19hbGlhc19kYXRhIGRhdGEgPSB7IGFsaWFzLCBOVUxMIH07CisKKwlyZWFkX2Vhcmx5X2NvbmZpZyhjb25maWdfYWxpYXNfY2IsICZkYXRhKTsKKworCXJldHVybiBkYXRhLnY7Cit9CisKK3ZvaWQgbGlzdF9hbGlhc2VzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29uZmlnX2FsaWFzX2RhdGEgZGF0YSA9IHsgTlVMTCwgTlVMTCwgbGlzdCB9OworCisJcmVhZF9lYXJseV9jb25maWcoY29uZmlnX2FsaWFzX2NiLCAmZGF0YSk7Cit9CisKKyNkZWZpbmUgU1BMSVRfQ01ETElORV9CQURfRU5ESU5HIDEKKyNkZWZpbmUgU1BMSVRfQ01ETElORV9VTkNMT1NFRF9RVU9URSAyCitzdGF0aWMgY29uc3QgY2hhciAqc3BsaXRfY21kbGluZV9lcnJvcnNbXSA9IHsKKwlOXygiY21kbGluZSBlbmRzIHdpdGggXFwiKSwKKwlOXygidW5jbG9zZWQgcXVvdGUiKQorfTsKKworaW50IHNwbGl0X2NtZGxpbmUoY2hhciAqY21kbGluZSwgY29uc3QgY2hhciAqKiphcmd2KQoreworCWludCBzcmMsIGRzdCwgY291bnQgPSAwLCBzaXplID0gMTY7CisJY2hhciBxdW90ZWQgPSAwOworCisJQUxMT0NfQVJSQVkoKmFyZ3YsIHNpemUpOworCisJLyogc3BsaXQgYWxpYXNfc3RyaW5nICovCisJKCphcmd2KVtjb3VudCsrXSA9IGNtZGxpbmU7CisJZm9yIChzcmMgPSBkc3QgPSAwOyBjbWRsaW5lW3NyY107KSB7CisJCWNoYXIgYyA9IGNtZGxpbmVbc3JjXTsKKwkJaWYgKCFxdW90ZWQgJiYgaXNzcGFjZShjKSkgeworCQkJY21kbGluZVtkc3QrK10gPSAwOworCQkJd2hpbGUgKGNtZGxpbmVbKytzcmNdCisJCQkJCSYmIGlzc3BhY2UoY21kbGluZVtzcmNdKSkKKwkJCQk7IC8qIHNraXAgKi8KKwkJCUFMTE9DX0dST1coKmFyZ3YsIGNvdW50ICsgMSwgc2l6ZSk7CisJCQkoKmFyZ3YpW2NvdW50KytdID0gY21kbGluZSArIGRzdDsKKwkJfSBlbHNlIGlmICghcXVvdGVkICYmIChjID09ICdcJycgfHwgYyA9PSAnIicpKSB7CisJCQlxdW90ZWQgPSBjOworCQkJc3JjKys7CisJCX0gZWxzZSBpZiAoYyA9PSBxdW90ZWQpIHsKKwkJCXF1b3RlZCA9IDA7CisJCQlzcmMrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChjID09ICdcXCcgJiYgcXVvdGVkICE9ICdcJycpIHsKKwkJCQlzcmMrKzsKKwkJCQljID0gY21kbGluZVtzcmNdOworCQkJCWlmICghYykgeworCQkJCQlGUkVFX0FORF9OVUxMKCphcmd2KTsKKwkJCQkJcmV0dXJuIC1TUExJVF9DTURMSU5FX0JBRF9FTkRJTkc7CisJCQkJfQorCQkJfQorCQkJY21kbGluZVtkc3QrK10gPSBjOworCQkJc3JjKys7CisJCX0KKwl9CisKKwljbWRsaW5lW2RzdF0gPSAwOworCisJaWYgKHF1b3RlZCkgeworCQlGUkVFX0FORF9OVUxMKCphcmd2KTsKKwkJcmV0dXJuIC1TUExJVF9DTURMSU5FX1VOQ0xPU0VEX1FVT1RFOworCX0KKworCUFMTE9DX0dST1coKmFyZ3YsIGNvdW50ICsgMSwgc2l6ZSk7CisJKCphcmd2KVtjb3VudF0gPSBOVUxMOworCisJcmV0dXJuIGNvdW50OworfQorCitjb25zdCBjaGFyICpzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGludCBzcGxpdF9jbWRsaW5lX2Vycm5vKQoreworCXJldHVybiBzcGxpdF9jbWRsaW5lX2Vycm9yc1stc3BsaXRfY21kbGluZV9lcnJubyAtIDFdOworfQpkaWZmIC0tZ2l0IGEvYWxpYXMuaCBiL2FsaWFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmNDg0MwotLS0gL2Rldi9udWxsCisrKyBiL2FsaWFzLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBBTElBU19ICisjZGVmaW5lIEFMSUFTX0gKKworc3RydWN0IHN0cmluZ19saXN0OworCitjaGFyICphbGlhc19sb29rdXAoY29uc3QgY2hhciAqYWxpYXMpOworaW50IHNwbGl0X2NtZGxpbmUoY2hhciAqY21kbGluZSwgY29uc3QgY2hhciAqKiphcmd2KTsKKy8qIFRha2VzIGEgbmVnYXRpdmUgdmFsdWUgcmV0dXJuZWQgYnkgc3BsaXRfY21kbGluZSAqLworY29uc3QgY2hhciAqc3BsaXRfY21kbGluZV9zdHJlcnJvcihpbnQgY21kbGluZV9lcnJubyk7Cit2b2lkIGxpc3RfYWxpYXNlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FsbG9jLmMgYi9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNjRjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hbGxvYy5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogYWxsb2MuYyAgLSBzcGVjaWFsaXplZCBhbGxvY2F0b3IgZm9yIGludGVybmFsIG9iamVjdHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGUgc3RhbmRhcmQgbWFsbG9jL2ZyZWUgd2FzdGVzIHRvbyBtdWNoIHNwYWNlIGZvciBvYmplY3RzLCBwYXJ0bHkgYmVjYXVzZQorICogaXQgbWFpbnRhaW5zIGFsbCB0aGUgYWxsb2NhdGlvbiBpbmZyYXN0cnVjdHVyZSwgYnV0IGV2ZW4gbW9yZSBiZWNhdXNlIGl0IGVuZHMKKyAqIHVwIHdpdGggbWF4aW1hbCBhbGlnbm1lbnQgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgd2hhdCB0aGUgb2JqZWN0IGFsaWdubWVudAorICogZm9yIHRoZSBuZXcgYWxsb2NhdGlvbiBpcy4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorCisjZGVmaW5lIEJMT0NLSU5HIDEwMjQKKwordW5pb24gYW55X29iamVjdCB7CisJc3RydWN0IG9iamVjdCBvYmplY3Q7CisJc3RydWN0IGJsb2IgYmxvYjsKKwlzdHJ1Y3QgdHJlZSB0cmVlOworCXN0cnVjdCBjb21taXQgY29tbWl0OworCXN0cnVjdCB0YWcgdGFnOworfTsKKworc3RydWN0IGFsbG9jX3N0YXRlIHsKKwlpbnQgY291bnQ7IC8qIHRvdGFsIG51bWJlciBvZiBub2RlcyBhbGxvY2F0ZWQgKi8KKwlpbnQgbnI7ICAgIC8qIG51bWJlciBvZiBub2RlcyBsZWZ0IGluIGN1cnJlbnQgYWxsb2NhdGlvbiAqLworCXZvaWQgKnA7ICAgLyogZmlyc3QgZnJlZSBub2RlIGluIGN1cnJlbnQgYWxsb2NhdGlvbiAqLworCisJLyogYm9va2tlZXBpbmcgb2YgYWxsb2NhdGlvbnMgKi8KKwl2b2lkICoqc2xhYnM7CisJaW50IHNsYWJfbnIsIHNsYWJfYWxsb2M7Cit9OworCitzdHJ1Y3QgYWxsb2Nfc3RhdGUgKmFsbG9jYXRlX2FsbG9jX3N0YXRlKHZvaWQpCit7CisJcmV0dXJuIHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBhbGxvY19zdGF0ZSkpOworfQorCit2b2lkIGNsZWFyX2FsbG9jX3N0YXRlKHN0cnVjdCBhbGxvY19zdGF0ZSAqcykKK3sKKwl3aGlsZSAocy0+c2xhYl9uciA+IDApIHsKKwkJcy0+c2xhYl9uci0tOworCQlmcmVlKHMtPnNsYWJzW3MtPnNsYWJfbnJdKTsKKwl9CisKKwlGUkVFX0FORF9OVUxMKHMtPnNsYWJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICphbGxvY19ub2RlKHN0cnVjdCBhbGxvY19zdGF0ZSAqcywgc2l6ZV90IG5vZGVfc2l6ZSkKK3sKKwl2b2lkICpyZXQ7CisKKwlpZiAoIXMtPm5yKSB7CisJCXMtPm5yID0gQkxPQ0tJTkc7CisJCXMtPnAgPSB4bWFsbG9jKEJMT0NLSU5HICogbm9kZV9zaXplKTsKKworCQlBTExPQ19HUk9XKHMtPnNsYWJzLCBzLT5zbGFiX25yICsgMSwgcy0+c2xhYl9hbGxvYyk7CisJCXMtPnNsYWJzW3MtPnNsYWJfbnIrK10gPSBzLT5wOworCX0KKwlzLT5uci0tOworCXMtPmNvdW50Kys7CisJcmV0ID0gcy0+cDsKKwlzLT5wID0gKGNoYXIgKilzLT5wICsgbm9kZV9zaXplOworCW1lbXNldChyZXQsIDAsIG5vZGVfc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkICphbGxvY19ibG9iX25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IGJsb2IgKmIgPSBhbGxvY19ub2RlKHItPnBhcnNlZF9vYmplY3RzLT5ibG9iX3N0YXRlLCBzaXplb2Yoc3RydWN0IGJsb2IpKTsKKwliLT5vYmplY3QudHlwZSA9IE9CSl9CTE9COworCXJldHVybiBiOworfQorCit2b2lkICphbGxvY190cmVlX25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IHRyZWUgKnQgPSBhbGxvY19ub2RlKHItPnBhcnNlZF9vYmplY3RzLT50cmVlX3N0YXRlLCBzaXplb2Yoc3RydWN0IHRyZWUpKTsKKwl0LT5vYmplY3QudHlwZSA9IE9CSl9UUkVFOworCXJldHVybiB0OworfQorCit2b2lkICphbGxvY190YWdfbm9kZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3QgdGFnICp0ID0gYWxsb2Nfbm9kZShyLT5wYXJzZWRfb2JqZWN0cy0+dGFnX3N0YXRlLCBzaXplb2Yoc3RydWN0IHRhZykpOworCXQtPm9iamVjdC50eXBlID0gT0JKX1RBRzsKKwlyZXR1cm4gdDsKK30KKwordm9pZCAqYWxsb2Nfb2JqZWN0X25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gYWxsb2Nfbm9kZShyLT5wYXJzZWRfb2JqZWN0cy0+b2JqZWN0X3N0YXRlLCBzaXplb2YodW5pb24gYW55X29iamVjdCkpOworCW9iai0+dHlwZSA9IE9CSl9OT05FOworCXJldHVybiBvYmo7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2NfY29tbWl0X2luZGV4KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXJldHVybiByLT5wYXJzZWRfb2JqZWN0cy0+Y29tbWl0X2NvdW50Kys7Cit9CisKK3ZvaWQgaW5pdF9jb21taXRfbm9kZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqYykKK3sKKwljLT5vYmplY3QudHlwZSA9IE9CSl9DT01NSVQ7CisJYy0+aW5kZXggPSBhbGxvY19jb21taXRfaW5kZXgocik7CisJYy0+Z3JhcGhfcG9zID0gQ09NTUlUX05PVF9GUk9NX0dSQVBIOworCWMtPmdlbmVyYXRpb24gPSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWTsKK30KKwordm9pZCAqYWxsb2NfY29tbWl0X25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IGNvbW1pdCAqYyA9IGFsbG9jX25vZGUoci0+cGFyc2VkX29iamVjdHMtPmNvbW1pdF9zdGF0ZSwgc2l6ZW9mKHN0cnVjdCBjb21taXQpKTsKKwlpbml0X2NvbW1pdF9ub2RlKHIsIGMpOworCXJldHVybiBjOworfQorCitzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGNvdW50LCBzaXplX3Qgc2l6ZSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiUxMHM6ICU4dSAoJSJQUkl1TUFYIiBrQilcbiIsCisJCQluYW1lLCBjb3VudCwgKHVpbnRtYXhfdCkgc2l6ZSk7Cit9CisKKyNkZWZpbmUgUkVQT1JUKG5hbWUsIHR5cGUpCVwKKyAgICByZXBvcnQoI25hbWUsIHItPnBhcnNlZF9vYmplY3RzLT5uYW1lIyNfc3RhdGUtPmNvdW50LCBcCisJCSAgci0+cGFyc2VkX29iamVjdHMtPm5hbWUjI19zdGF0ZS0+Y291bnQgKiBzaXplb2YodHlwZSkgPj4gMTApCisKK3ZvaWQgYWxsb2NfcmVwb3J0KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCVJFUE9SVChibG9iLCBzdHJ1Y3QgYmxvYik7CisJUkVQT1JUKHRyZWUsIHN0cnVjdCB0cmVlKTsKKwlSRVBPUlQoY29tbWl0LCBzdHJ1Y3QgY29tbWl0KTsKKwlSRVBPUlQodGFnLCBzdHJ1Y3QgdGFnKTsKKwlSRVBPUlQob2JqZWN0LCB1bmlvbiBhbnlfb2JqZWN0KTsKK30KZGlmZiAtLWdpdCBhL2FsbG9jLmggYi9hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMTA3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9hbGxvYy5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgQUxMT0NfSAorI2RlZmluZSBBTExPQ19ICisKK3N0cnVjdCBhbGxvY19zdGF0ZTsKK3N0cnVjdCB0cmVlOworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCB0YWc7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKwordm9pZCAqYWxsb2NfYmxvYl9ub2RlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3ZvaWQgKmFsbG9jX3RyZWVfbm9kZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Cit2b2lkIGluaXRfY29tbWl0X25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKmMpOwordm9pZCAqYWxsb2NfY29tbWl0X25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwordm9pZCAqYWxsb2NfdGFnX25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwordm9pZCAqYWxsb2Nfb2JqZWN0X25vZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwordm9pZCBhbGxvY19yZXBvcnQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworCitzdHJ1Y3QgYWxsb2Nfc3RhdGUgKmFsbG9jYXRlX2FsbG9jX3N0YXRlKHZvaWQpOwordm9pZCBjbGVhcl9hbGxvY19zdGF0ZShzdHJ1Y3QgYWxsb2Nfc3RhdGUgKnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcGx5LmMgYi9hcHBseS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYzAwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBseS5jCkBAIC0wLDAgKzEsNTAzOSBAQAorLyoKKyAqIGFwcGx5LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKgorICogVGhpcyBhcHBsaWVzIHBhdGNoZXMgb24gdG9wIG9mIHNvbWUgKGFyYml0cmFyeSkgdmVyc2lvbiBvZiB0aGUgU0NNLgorICoKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgImFwcGx5LmgiCisKK3N0cnVjdCBnaXRkaWZmX2RhdGEgeworCXN0cnVjdCBzdHJidWYgKnJvb3Q7CisJaW50IGxpbmVucjsKKwlpbnQgcF92YWx1ZTsKK307CisKK3N0YXRpYyB2b2lkIGdpdF9hcHBseV9jb25maWcodm9pZCkKK3sKKwlnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoImFwcGx5LndoaXRlc3BhY2UiLCAmYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlKTsKKwlnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoImFwcGx5Lmlnbm9yZXdoaXRlc3BhY2UiLCAmYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlKTsKKwlnaXRfY29uZmlnKGdpdF94bWVyZ2VfY29uZmlnLCBOVUxMKTsKK30KKworc3RhdGljIGludCBwYXJzZV93aGl0ZXNwYWNlX29wdGlvbihzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKCFvcHRpb24pIHsKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IHdhcm5fb25fd3NfZXJyb3I7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChvcHRpb24sICJ3YXJuIikpIHsKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IHdhcm5fb25fd3NfZXJyb3I7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChvcHRpb24sICJub3dhcm4iKSkgeworCQlzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID0gbm93YXJuX3dzX2Vycm9yOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAiZXJyb3IiKSkgeworCQlzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID0gZGllX29uX3dzX2Vycm9yOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAiZXJyb3ItYWxsIikpIHsKKwkJc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9IGRpZV9vbl93c19lcnJvcjsKKwkJc3RhdGUtPnNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAic3RyaXAiKSB8fCAhc3RyY21wKG9wdGlvbiwgImZpeCIpKSB7CisJCXN0YXRlLT53c19lcnJvcl9hY3Rpb24gPSBjb3JyZWN0X3dzX2Vycm9yOworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF93aGl0ZXNwYWNlbGlzdCBpbiBnaXQtY29tcGxldGlvbi5iYXNoCisJICogd2hlbiB5b3UgYWRkIG5ldyBvcHRpb25zLgorCSAqLworCXJldHVybiBlcnJvcihfKCJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIpLCBvcHRpb24pOworfQorCitzdGF0aWMgaW50IHBhcnNlX2lnbm9yZXdoaXRlc3BhY2Vfb3B0aW9uKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJCQkgY29uc3QgY2hhciAqb3B0aW9uKQoreworCWlmICghb3B0aW9uIHx8ICFzdHJjbXAob3B0aW9uLCAibm8iKSB8fAorCSAgICAhc3RyY21wKG9wdGlvbiwgImZhbHNlIikgfHwgIXN0cmNtcChvcHRpb24sICJuZXZlciIpIHx8CisJICAgICFzdHJjbXAob3B0aW9uLCAibm9uZSIpKSB7CisJCXN0YXRlLT53c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChvcHRpb24sICJjaGFuZ2UiKSkgeworCQlzdGF0ZS0+d3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19jaGFuZ2U7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXJyb3IoXygidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIiksIG9wdGlvbik7Cit9CisKK2ludCBpbml0X2FwcGx5X3N0YXRlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCSAgICAgY29uc3QgY2hhciAqcHJlZml4KQoreworCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCXN0YXRlLT5wcmVmaXggPSBwcmVmaXg7CisJc3RhdGUtPnJlcG8gPSByZXBvOworCXN0YXRlLT5hcHBseSA9IDE7CisJc3RhdGUtPmxpbmVfdGVybWluYXRpb24gPSAnXG4nOworCXN0YXRlLT5wX3ZhbHVlID0gMTsKKwlzdGF0ZS0+cF9jb250ZXh0ID0gVUlOVF9NQVg7CisJc3RhdGUtPnNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPSA1OworCXN0YXRlLT53c19lcnJvcl9hY3Rpb24gPSB3YXJuX29uX3dzX2Vycm9yOworCXN0YXRlLT53c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CisJc3RhdGUtPmxpbmVuciA9IDE7CisJc3RyaW5nX2xpc3RfaW5pdCgmc3RhdGUtPmZuX3RhYmxlLCAwKTsKKwlzdHJpbmdfbGlzdF9pbml0KCZzdGF0ZS0+bGltaXRfYnlfbmFtZSwgMCk7CisJc3RyaW5nX2xpc3RfaW5pdCgmc3RhdGUtPnN5bWxpbmtfY2hhbmdlcywgMCk7CisJc3RyYnVmX2luaXQoJnN0YXRlLT5yb290LCAwKTsKKworCWdpdF9hcHBseV9jb25maWcoKTsKKwlpZiAoYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlICYmIHBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKHN0YXRlLCBhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpKQorCQlyZXR1cm4gLTE7CisJaWYgKGFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZSAmJiBwYXJzZV9pZ25vcmV3aGl0ZXNwYWNlX29wdGlvbihzdGF0ZSwgYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCit2b2lkIGNsZWFyX2FwcGx5X3N0YXRlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUpCit7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlLT5saW1pdF9ieV9uYW1lLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGUtPnN5bWxpbmtfY2hhbmdlcywgMCk7CisJc3RyYnVmX3JlbGVhc2UoJnN0YXRlLT5yb290KTsKKworCS8qICZzdGF0ZS0+Zm5fdGFibGUgaXMgY2xlYXJlZCBhdCB0aGUgZW5kIG9mIGFwcGx5X3BhdGNoKCkgKi8KK30KKworc3RhdGljIHZvaWQgbXV0ZV9yb3V0aW5lKGNvbnN0IGNoYXIgKm1zZywgdmFfbGlzdCBwYXJhbXMpCit7CisJLyogZG8gbm90aGluZyAqLworfQorCitpbnQgY2hlY2tfYXBwbHlfc3RhdGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgaW50IGZvcmNlX2FwcGx5KQoreworCWludCBpc19ub3RfZ2l0ZGlyID0gIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5OworCisJaWYgKHN0YXRlLT5hcHBseV93aXRoX3JlamVjdCAmJiBzdGF0ZS0+dGhyZWV3YXkpCisJCXJldHVybiBlcnJvcihfKCItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIpKTsKKwlpZiAoc3RhdGUtPmNhY2hlZCAmJiBzdGF0ZS0+dGhyZWV3YXkpCisJCXJldHVybiBlcnJvcihfKCItLWNhY2hlZCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIpKTsKKwlpZiAoc3RhdGUtPnRocmVld2F5KSB7CisJCWlmIChpc19ub3RfZ2l0ZGlyKQorCQkJcmV0dXJuIGVycm9yKF8oIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKKwkJc3RhdGUtPmNoZWNrX2luZGV4ID0gMTsKKwl9CisJaWYgKHN0YXRlLT5hcHBseV93aXRoX3JlamVjdCkgeworCQlzdGF0ZS0+YXBwbHkgPSAxOworCQlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA9PSB2ZXJib3NpdHlfbm9ybWFsKQorCQkJc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA9IHZlcmJvc2l0eV92ZXJib3NlOworCX0KKwlpZiAoIWZvcmNlX2FwcGx5ICYmIChzdGF0ZS0+ZGlmZnN0YXQgfHwgc3RhdGUtPm51bXN0YXQgfHwgc3RhdGUtPnN1bW1hcnkgfHwgc3RhdGUtPmNoZWNrIHx8IHN0YXRlLT5mYWtlX2FuY2VzdG9yKSkKKwkJc3RhdGUtPmFwcGx5ID0gMDsKKwlpZiAoc3RhdGUtPmNoZWNrX2luZGV4ICYmIGlzX25vdF9naXRkaXIpCisJCXJldHVybiBlcnJvcihfKCItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IikpOworCWlmIChzdGF0ZS0+Y2FjaGVkKSB7CisJCWlmIChpc19ub3RfZ2l0ZGlyKQorCQkJcmV0dXJuIGVycm9yKF8oIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IikpOworCQlzdGF0ZS0+Y2hlY2tfaW5kZXggPSAxOworCX0KKwlpZiAoc3RhdGUtPml0YV9vbmx5ICYmIChzdGF0ZS0+Y2hlY2tfaW5kZXggfHwgaXNfbm90X2dpdGRpcikpCisJCXN0YXRlLT5pdGFfb25seSA9IDA7CisJaWYgKHN0YXRlLT5jaGVja19pbmRleCkKKwkJc3RhdGUtPnVuc2FmZV9wYXRocyA9IDA7CisKKwlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA8PSB2ZXJib3NpdHlfc2lsZW50KSB7CisJCXN0YXRlLT5zYXZlZF9lcnJvcl9yb3V0aW5lID0gZ2V0X2Vycm9yX3JvdXRpbmUoKTsKKwkJc3RhdGUtPnNhdmVkX3dhcm5fcm91dGluZSA9IGdldF93YXJuX3JvdXRpbmUoKTsKKwkJc2V0X2Vycm9yX3JvdXRpbmUobXV0ZV9yb3V0aW5lKTsKKwkJc2V0X3dhcm5fcm91dGluZShtdXRlX3JvdXRpbmUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGVmYXVsdF93aGl0ZXNwYWNlX21vZGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoIXN0YXRlLT53aGl0ZXNwYWNlX29wdGlvbiAmJiAhYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlKQorCQlzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID0gKHN0YXRlLT5hcHBseSA/IHdhcm5fb25fd3NfZXJyb3IgOiBub3dhcm5fd3NfZXJyb3IpOworfQorCisvKgorICogVGhpcyByZXByZXNlbnRzIG9uZSAiaHVuayIgZnJvbSBhIHBhdGNoLCBzdGFydGluZyB3aXRoCisgKiAiQEAgLW9sZHBvcyxvbGRsaW5lcyArbmV3cG9zLG5ld2xpbmVzIEBAIiBtYXJrZXIuICBUaGUKKyAqIHBhdGNoIHRleHQgaXMgcG9pbnRlZCBhdCBieSBwYXRjaCwgYW5kIGl0cyBieXRlIGxlbmd0aAorICogaXMgc3RvcmVkIGluIHNpemUuICBsZWFkaW5nIGFuZCB0cmFpbGluZyBhcmUgdGhlIG51bWJlcgorICogb2YgY29udGV4dCBsaW5lcy4KKyAqLworc3RydWN0IGZyYWdtZW50IHsKKwl1bnNpZ25lZCBsb25nIGxlYWRpbmcsIHRyYWlsaW5nOworCXVuc2lnbmVkIGxvbmcgb2xkcG9zLCBvbGRsaW5lczsKKwl1bnNpZ25lZCBsb25nIG5ld3BvcywgbmV3bGluZXM7CisJLyoKKwkgKiAncGF0Y2gnIGlzIHVzdWFsbHkgYm9ycm93ZWQgZnJvbSBidWYgaW4gYXBwbHlfcGF0Y2goKSwKKwkgKiBidXQgc29tZSBjb2RlcGF0aHMgc3RvcmUgYW4gYWxsb2NhdGVkIGJ1ZmZlci4KKwkgKi8KKwljb25zdCBjaGFyICpwYXRjaDsKKwl1bnNpZ25lZCBmcmVlX3BhdGNoOjEsCisJCXJlamVjdGVkOjE7CisJaW50IHNpemU7CisJaW50IGxpbmVucjsKKwlzdHJ1Y3QgZnJhZ21lbnQgKm5leHQ7Cit9OworCisvKgorICogV2hlbiBkZWFsaW5nIHdpdGggYSBiaW5hcnkgcGF0Y2gsIHdlIHJldXNlICJsZWFkaW5nIiBmaWVsZAorICogdG8gc3RvcmUgdGhlIHR5cGUgb2YgdGhlIGJpbmFyeSBodW5rLCBlaXRoZXIgZGVmbGF0ZWQgImRlbHRhIgorICogb3IgZGVmbGF0ZWQgImxpdGVyYWwiLgorICovCisjZGVmaW5lIGJpbmFyeV9wYXRjaF9tZXRob2QgbGVhZGluZworI2RlZmluZSBCSU5BUllfREVMVEFfREVGTEFURUQJMQorI2RlZmluZSBCSU5BUllfTElURVJBTF9ERUZMQVRFRCAyCisKK3N0YXRpYyB2b2lkIGZyZWVfZnJhZ21lbnRfbGlzdChzdHJ1Y3QgZnJhZ21lbnQgKmxpc3QpCit7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGZyYWdtZW50ICpuZXh0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKGxpc3QtPmZyZWVfcGF0Y2gpCisJCQlmcmVlKChjaGFyICopbGlzdC0+cGF0Y2gpOworCQlmcmVlKGxpc3QpOworCQlsaXN0ID0gbmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGF0Y2goc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlmcmVlX2ZyYWdtZW50X2xpc3QocGF0Y2gtPmZyYWdtZW50cyk7CisJZnJlZShwYXRjaC0+ZGVmX25hbWUpOworCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKKwlmcmVlKHBhdGNoLT5uZXdfbmFtZSk7CisJZnJlZShwYXRjaC0+cmVzdWx0KTsKKwlmcmVlKHBhdGNoKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqbGlzdCkKK3sKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgcGF0Y2ggKm5leHQgPSBsaXN0LT5uZXh0OworCQlmcmVlX3BhdGNoKGxpc3QpOworCQlsaXN0ID0gbmV4dDsKKwl9Cit9CisKKy8qCisgKiBBIGxpbmUgaW4gYSBmaWxlLCBsZW4tYnl0ZXMgbG9uZyAoaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIExGLAorICogZXhjZXB0IGZvciBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZCBpZiB0aGUgZmlsZSBlbmRzIHdpdGgKKyAqIG9uZSksIGFuZCBpdHMgY29udGVudHMgaGFzaGVzIHRvICdoYXNoJy4KKyAqLworc3RydWN0IGxpbmUgeworCXNpemVfdCBsZW47CisJdW5zaWduZWQgaGFzaCA6IDI0OworCXVuc2lnbmVkIGZsYWcgOiA4OworI2RlZmluZSBMSU5FX0NPTU1PTiAgICAgMQorI2RlZmluZSBMSU5FX1BBVENIRUQJMgorfTsKKworLyoKKyAqIFRoaXMgcmVwcmVzZW50cyBhICJmaWxlIiwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgImxpbmVzIi4KKyAqLworc3RydWN0IGltYWdlIHsKKwljaGFyICpidWY7CisJc2l6ZV90IGxlbjsKKwlzaXplX3QgbnI7CisJc2l6ZV90IGFsbG9jOworCXN0cnVjdCBsaW5lICpsaW5lX2FsbG9jYXRlZDsKKwlzdHJ1Y3QgbGluZSAqbGluZTsKK307CisKK3N0YXRpYyB1aW50MzJfdCBoYXNoX2xpbmUoY29uc3QgY2hhciAqY3AsIHNpemVfdCBsZW4pCit7CisJc2l6ZV90IGk7CisJdWludDMyX3QgaDsKKwlmb3IgKGkgPSAwLCBoID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICghaXNzcGFjZShjcFtpXSkpIHsKKwkJCWggPSBoICogMyArIChjcFtpXSAmIDB4ZmYpOworCQl9CisJfQorCXJldHVybiBoOworfQorCisvKgorICogQ29tcGFyZSBsaW5lcyBzMSBvZiBsZW5ndGggbjEgYW5kIHMyIG9mIGxlbmd0aCBuMiwgaWdub3JpbmcKKyAqIHdoaXRlc3BhY2UgZGlmZmVyZW5jZS4gUmV0dXJucyAxIGlmIHRoZXkgbWF0Y2gsIDAgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgZnV6enlfbWF0Y2hsaW5lcyhjb25zdCBjaGFyICpzMSwgc2l6ZV90IG4xLAorCQkJICAgIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbjIpCit7CisJY29uc3QgY2hhciAqZW5kMSA9IHMxICsgbjE7CisJY29uc3QgY2hhciAqZW5kMiA9IHMyICsgbjI7CisKKwkvKiBpZ25vcmUgbGluZSBlbmRpbmdzICovCisJd2hpbGUgKHMxIDwgZW5kMSAmJiAoZW5kMVstMV0gPT0gJ1xyJyB8fCBlbmQxWy0xXSA9PSAnXG4nKSkKKwkJZW5kMS0tOworCXdoaWxlIChzMiA8IGVuZDIgJiYgKGVuZDJbLTFdID09ICdccicgfHwgZW5kMlstMV0gPT0gJ1xuJykpCisJCWVuZDItLTsKKworCXdoaWxlIChzMSA8IGVuZDEgJiYgczIgPCBlbmQyKSB7CisJCWlmIChpc3NwYWNlKCpzMSkpIHsKKwkJCS8qCisJCQkgKiBTa2lwIHdoaXRlc3BhY2UuIFdlIGNoZWNrIG9uIGJvdGggYnVmZmVycworCQkJICogYmVjYXVzZSB3ZSBkb24ndCB3YW50ICJhIGIiIHRvIG1hdGNoICJhYiIuCisJCQkgKi8KKwkJCWlmICghaXNzcGFjZSgqczIpKQorCQkJCXJldHVybiAwOworCQkJd2hpbGUgKHMxIDwgZW5kMSAmJiBpc3NwYWNlKCpzMSkpCisJCQkJczErKzsKKwkJCXdoaWxlIChzMiA8IGVuZDIgJiYgaXNzcGFjZSgqczIpKQorCQkJCXMyKys7CisJCX0gZWxzZSBpZiAoKnMxKysgIT0gKnMyKyspCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiB3ZSByZWFjaGVkIHRoZSBlbmQgb24gb25lIHNpZGUgb25seSwgbGluZXMgZG9uJ3QgbWF0Y2guICovCisJcmV0dXJuIHMxID09IGVuZDEgJiYgczIgPT0gZW5kMjsKK30KKworc3RhdGljIHZvaWQgYWRkX2xpbmVfaW5mbyhzdHJ1Y3QgaW1hZ2UgKmltZywgY29uc3QgY2hhciAqYm9sLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBmbGFnKQoreworCUFMTE9DX0dST1coaW1nLT5saW5lX2FsbG9jYXRlZCwgaW1nLT5uciArIDEsIGltZy0+YWxsb2MpOworCWltZy0+bGluZV9hbGxvY2F0ZWRbaW1nLT5ucl0ubGVuID0gbGVuOworCWltZy0+bGluZV9hbGxvY2F0ZWRbaW1nLT5ucl0uaGFzaCA9IGhhc2hfbGluZShib2wsIGxlbik7CisJaW1nLT5saW5lX2FsbG9jYXRlZFtpbWctPm5yXS5mbGFnID0gZmxhZzsKKwlpbWctPm5yKys7Cit9CisKKy8qCisgKiAiYnVmIiBoYXMgdGhlIGZpbGUgY29udGVudHMgdG8gYmUgcGF0Y2hlZCAocmVhZCBmcm9tIHZhcmlvdXMgc291cmNlcykuCisgKiBhdHRhY2ggaXQgdG8gImltYWdlIiBhbmQgYWRkIGxpbmUtYmFzZWQgaW5kZXggdG8gaXQuCisgKiAiaW1hZ2UiIG5vdyBvd25zIHRoZSAiYnVmIi4KKyAqLworc3RhdGljIHZvaWQgcHJlcGFyZV9pbWFnZShzdHJ1Y3QgaW1hZ2UgKmltYWdlLCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisJCQkgIGludCBwcmVwYXJlX2xpbmV0YWJsZSkKK3sKKwljb25zdCBjaGFyICpjcCwgKmVwOworCisJbWVtc2V0KGltYWdlLCAwLCBzaXplb2YoKmltYWdlKSk7CisJaW1hZ2UtPmJ1ZiA9IGJ1ZjsKKwlpbWFnZS0+bGVuID0gbGVuOworCisJaWYgKCFwcmVwYXJlX2xpbmV0YWJsZSkKKwkJcmV0dXJuOworCisJZXAgPSBpbWFnZS0+YnVmICsgaW1hZ2UtPmxlbjsKKwljcCA9IGltYWdlLT5idWY7CisJd2hpbGUgKGNwIDwgZXApIHsKKwkJY29uc3QgY2hhciAqbmV4dDsKKwkJZm9yIChuZXh0ID0gY3A7IG5leHQgPCBlcCAmJiAqbmV4dCAhPSAnXG4nOyBuZXh0KyspCisJCQk7CisJCWlmIChuZXh0IDwgZXApCisJCQluZXh0Kys7CisJCWFkZF9saW5lX2luZm8oaW1hZ2UsIGNwLCBuZXh0IC0gY3AsIDApOworCQljcCA9IG5leHQ7CisJfQorCWltYWdlLT5saW5lID0gaW1hZ2UtPmxpbmVfYWxsb2NhdGVkOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9pbWFnZShzdHJ1Y3QgaW1hZ2UgKmltYWdlKQoreworCWZyZWUoaW1hZ2UtPmJ1Zik7CisJZnJlZShpbWFnZS0+bGluZV9hbGxvY2F0ZWQpOworCW1lbXNldChpbWFnZSwgMCwgc2l6ZW9mKCppbWFnZSkpOworfQorCisvKiBmbXQgbXVzdCBjb250YWluIF9vbmVfICVzIGFuZCBubyBvdGhlciBzdWJzdGl0dXRpb24gKi8KK3N0YXRpYyB2b2lkIHNheV9wYXRjaF9uYW1lKEZJTEUgKm91dHB1dCwgY29uc3QgY2hhciAqZm10LCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChwYXRjaC0+b2xkX25hbWUgJiYgcGF0Y2gtPm5ld19uYW1lICYmCisJICAgIHN0cmNtcChwYXRjaC0+b2xkX25hbWUsIHBhdGNoLT5uZXdfbmFtZSkpIHsKKwkJcXVvdGVfY19zdHlsZShwYXRjaC0+b2xkX25hbWUsICZzYiwgTlVMTCwgMCk7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiID0+ICIpOworCQlxdW90ZV9jX3N0eWxlKHBhdGNoLT5uZXdfbmFtZSwgJnNiLCBOVUxMLCAwKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpuID0gcGF0Y2gtPm5ld19uYW1lOworCQlpZiAoIW4pCisJCQluID0gcGF0Y2gtPm9sZF9uYW1lOworCQlxdW90ZV9jX3N0eWxlKG4sICZzYiwgTlVMTCwgMCk7CisJfQorCWZwcmludGYob3V0cHV0LCBmbXQsIHNiLmJ1Zik7CisJZnB1dGMoJ1xuJywgb3V0cHV0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisjZGVmaW5lIFNMT1AgKDE2KQorCitzdGF0aWMgaW50IHJlYWRfcGF0Y2hfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGZkKQoreworCWlmIChzdHJidWZfcmVhZChzYiwgZmQsIDApIDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKCJnaXQgYXBwbHk6IGZhaWxlZCB0byByZWFkIik7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgc29tZSBzbG9wIGluIHRoZSBidWZmZXIKKwkgKiBzbyB0aGF0IHdlIGNhbiBkbyBzcGVjdWxhdGl2ZSAibWVtY21wIiBldGMsIGFuZAorCSAqIHNlZSB0byBpdCB0aGF0IGl0IGlzIE5VTC1maWxsZWQuCisJICovCisJc3RyYnVmX2dyb3coc2IsIFNMT1ApOworCW1lbXNldChzYi0+YnVmICsgc2ItPmxlbiwgMCwgU0xPUCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxpbmVsZW4oY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBsZW4gPSAwOworCXdoaWxlIChzaXplLS0pIHsKKwkJbGVuKys7CisJCWlmICgqYnVmZmVyKysgPT0gJ1xuJykKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGlzX2Rldl9udWxsKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc2tpcF9wcmVmaXgoc3RyLCAiL2Rldi9udWxsIiwgJnN0cikgJiYgaXNzcGFjZSgqc3RyKTsKK30KKworI2RlZmluZSBURVJNX1NQQUNFCTEKKyNkZWZpbmUgVEVSTV9UQUIJMgorCitzdGF0aWMgaW50IG5hbWVfdGVybWluYXRlKGludCBjLCBpbnQgdGVybWluYXRlKQoreworCWlmIChjID09ICcgJyAmJiAhKHRlcm1pbmF0ZSAmIFRFUk1fU1BBQ0UpKQorCQlyZXR1cm4gMDsKKwlpZiAoYyA9PSAnXHQnICYmICEodGVybWluYXRlICYgVEVSTV9UQUIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKiByZW1vdmUgZG91YmxlIHNsYXNoZXMgdG8gbWFrZSAtLWluZGV4IHdvcmsgd2l0aCBzdWNoIGZpbGVuYW1lcyAqLworc3RhdGljIGNoYXIgKnNxdWFzaF9zbGFzaChjaGFyICpuYW1lKQoreworCWludCBpID0gMCwgaiA9IDA7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKG5hbWVbaV0pIHsKKwkJaWYgKChuYW1lW2orK10gPSBuYW1lW2krK10pID09ICcvJykKKwkJCXdoaWxlIChuYW1lW2ldID09ICcvJykKKwkJCQlpKys7CisJfQorCW5hbWVbal0gPSAnXDAnOworCXJldHVybiBuYW1lOworfQorCitzdGF0aWMgY2hhciAqZmluZF9uYW1lX2dudShzdHJ1Y3Qgc3RyYnVmICpyb290LAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIGludCBwX3ZhbHVlKQoreworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKmNwOworCisJLyoKKwkgKiBQcm9wb3NlZCAibmV3LXN0eWxlIiBHTlUgcGF0Y2gvZGlmZiBmb3JtYXQ7IHNlZQorCSAqIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmxsMHd2YjJhLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQvCisJICovCisJaWYgKHVucXVvdGVfY19zdHlsZSgmbmFtZSwgbGluZSwgTlVMTCkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IgKGNwID0gbmFtZS5idWY7IHBfdmFsdWU7IHBfdmFsdWUtLSkgeworCQljcCA9IHN0cmNocihjcCwgJy8nKTsKKwkJaWYgKCFjcCkgeworCQkJc3RyYnVmX3JlbGVhc2UoJm5hbWUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJY3ArKzsKKwl9CisKKwlzdHJidWZfcmVtb3ZlKCZuYW1lLCAwLCBjcCAtIG5hbWUuYnVmKTsKKwlpZiAocm9vdC0+bGVuKQorCQlzdHJidWZfaW5zZXJ0KCZuYW1lLCAwLCByb290LT5idWYsIHJvb3QtPmxlbik7CisJcmV0dXJuIHNxdWFzaF9zbGFzaChzdHJidWZfZGV0YWNoKCZuYW1lLCBOVUxMKSk7Cit9CisKK3N0YXRpYyBzaXplX3Qgc2FuZV90el9sZW4oY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICp0eiwgKnA7CisKKwlpZiAobGVuIDwgc3RybGVuKCIgKzA1MDAiKSB8fCBsaW5lW2xlbi1zdHJsZW4oIiArMDUwMCIpXSAhPSAnICcpCisJCXJldHVybiAwOworCXR6ID0gbGluZSArIGxlbiAtIHN0cmxlbigiICswNTAwIik7CisKKwlpZiAodHpbMV0gIT0gJysnICYmIHR6WzFdICE9ICctJykKKwkJcmV0dXJuIDA7CisKKwlmb3IgKHAgPSB0eiArIDI7IHAgIT0gbGluZSArIGxlbjsgcCsrKQorCQlpZiAoIWlzZGlnaXQoKnApKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbGluZSArIGxlbiAtIHR6OworfQorCitzdGF0aWMgc2l6ZV90IHR6X3dpdGhfY29sb25fbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqdHosICpwOworCisJaWYgKGxlbiA8IHN0cmxlbigiICswODowMCIpIHx8IGxpbmVbbGVuIC0gc3RybGVuKCI6MDAiKV0gIT0gJzonKQorCQlyZXR1cm4gMDsKKwl0eiA9IGxpbmUgKyBsZW4gLSBzdHJsZW4oIiArMDg6MDAiKTsKKworCWlmICh0elswXSAhPSAnICcgfHwgKHR6WzFdICE9ICcrJyAmJiB0elsxXSAhPSAnLScpKQorCQlyZXR1cm4gMDsKKwlwID0gdHogKyAyOworCWlmICghaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICc6JyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbGluZSArIGxlbiAtIHR6OworfQorCitzdGF0aWMgc2l6ZV90IGRhdGVfbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqZGF0ZSwgKnA7CisKKwlpZiAobGVuIDwgc3RybGVuKCI3Mi0wMi0wNSIpIHx8IGxpbmVbbGVuLXN0cmxlbigiLTA1IildICE9ICctJykKKwkJcmV0dXJuIDA7CisJcCA9IGRhdGUgPSBsaW5lICsgbGVuIC0gc3RybGVuKCI3Mi0wMi0wNSIpOworCisJaWYgKCFpc2RpZ2l0KCpwKyspIHx8ICFpc2RpZ2l0KCpwKyspIHx8ICpwKysgIT0gJy0nIHx8CisJICAgICFpc2RpZ2l0KCpwKyspIHx8ICFpc2RpZ2l0KCpwKyspIHx8ICpwKysgIT0gJy0nIHx8CisJICAgICFpc2RpZ2l0KCpwKyspIHx8ICFpc2RpZ2l0KCpwKyspKQkvKiBOb3QgYSBkYXRlLiAqLworCQlyZXR1cm4gMDsKKworCWlmIChkYXRlIC0gbGluZSA+PSBzdHJsZW4oIjE5IikgJiYKKwkgICAgaXNkaWdpdChkYXRlWy0xXSkgJiYgaXNkaWdpdChkYXRlWy0yXSkpCS8qIDQtZGlnaXQgeWVhciAqLworCQlkYXRlIC09IHN0cmxlbigiMTkiKTsKKworCXJldHVybiBsaW5lICsgbGVuIC0gZGF0ZTsKK30KKworc3RhdGljIHNpemVfdCBzaG9ydF90aW1lX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnRpbWUsICpwOworCisJaWYgKGxlbiA8IHN0cmxlbigiIDA3OjAxOjMyIikgfHwgbGluZVtsZW4tc3RybGVuKCI6MzIiKV0gIT0gJzonKQorCQlyZXR1cm4gMDsKKwlwID0gdGltZSA9IGxpbmUgKyBsZW4gLSBzdHJsZW4oIiAwNzowMTozMiIpOworCisJLyogUGVybWl0IDEtZGlnaXQgaG91cnM/ICovCisJaWYgKCpwKysgIT0gJyAnIHx8CisJICAgICFpc2RpZ2l0KCpwKyspIHx8ICFpc2RpZ2l0KCpwKyspIHx8ICpwKysgIT0gJzonIHx8CisJICAgICFpc2RpZ2l0KCpwKyspIHx8ICFpc2RpZ2l0KCpwKyspIHx8ICpwKysgIT0gJzonIHx8CisJICAgICFpc2RpZ2l0KCpwKyspIHx8ICFpc2RpZ2l0KCpwKyspKQkvKiBOb3QgYSB0aW1lLiAqLworCQlyZXR1cm4gMDsKKworCXJldHVybiBsaW5lICsgbGVuIC0gdGltZTsKK30KKworc3RhdGljIHNpemVfdCBmcmFjdGlvbmFsX3RpbWVfbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqcDsKKwlzaXplX3QgbjsKKworCS8qIEV4cGVjdGVkIGZvcm1hdDogMTk6NDE6MTcuNjIwMDAwMDIzICovCisJaWYgKCFsZW4gfHwgIWlzZGlnaXQobGluZVtsZW4gLSAxXSkpCisJCXJldHVybiAwOworCXAgPSBsaW5lICsgbGVuIC0gMTsKKworCS8qIEZyYWN0aW9uYWwgc2Vjb25kcy4gKi8KKwl3aGlsZSAocCA+IGxpbmUgJiYgaXNkaWdpdCgqcCkpCisJCXAtLTsKKwlpZiAoKnAgIT0gJy4nKQorCQlyZXR1cm4gMDsKKworCS8qIEhvdXJzLCBtaW51dGVzLCBhbmQgd2hvbGUgc2Vjb25kcy4gKi8KKwluID0gc2hvcnRfdGltZV9sZW4obGluZSwgcCAtIGxpbmUpOworCWlmICghbikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbGluZSArIGxlbiAtIHAgKyBuOworfQorCitzdGF0aWMgc2l6ZV90IHRyYWlsaW5nX3NwYWNlc19sZW4oY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICpwOworCisJLyogRXhwZWN0ZWQgZm9ybWF0OiAnICcgeCAoMSBvciBtb3JlKSAgKi8KKwlpZiAoIWxlbiB8fCBsaW5lW2xlbiAtIDFdICE9ICcgJykKKwkJcmV0dXJuIDA7CisKKwlwID0gbGluZSArIGxlbjsKKwl3aGlsZSAocCAhPSBsaW5lKSB7CisJCXAtLTsKKwkJaWYgKCpwICE9ICcgJykKKwkJCXJldHVybiBsaW5lICsgbGVuIC0gKHAgKyAxKTsKKwl9CisKKwkvKiBBbGwgc3BhY2VzISAqLworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzaXplX3QgZGlmZl90aW1lc3RhbXBfbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqZW5kID0gbGluZSArIGxlbjsKKwlzaXplX3QgbjsKKworCS8qCisJICogUG9zaXg6IDIwMTAtMDctMDUgMTk6NDE6MTcKKwkgKiBHTlU6IDIwMTAtMDctMDUgMTk6NDE6MTcuNjIwMDAwMDIzIC0wNTAwCisJICovCisKKwlpZiAoIWlzZGlnaXQoZW5kWy0xXSkpCisJCXJldHVybiAwOworCisJbiA9IHNhbmVfdHpfbGVuKGxpbmUsIGVuZCAtIGxpbmUpOworCWlmICghbikKKwkJbiA9IHR6X3dpdGhfY29sb25fbGVuKGxpbmUsIGVuZCAtIGxpbmUpOworCWVuZCAtPSBuOworCisJbiA9IHNob3J0X3RpbWVfbGVuKGxpbmUsIGVuZCAtIGxpbmUpOworCWlmICghbikKKwkJbiA9IGZyYWN0aW9uYWxfdGltZV9sZW4obGluZSwgZW5kIC0gbGluZSk7CisJZW5kIC09IG47CisKKwluID0gZGF0ZV9sZW4obGluZSwgZW5kIC0gbGluZSk7CisJaWYgKCFuKQkvKiBObyBkYXRlLiAgVG9vIGJhZC4gKi8KKwkJcmV0dXJuIDA7CisJZW5kIC09IG47CisKKwlpZiAoZW5kID09IGxpbmUpCS8qIE5vIHNwYWNlIGJlZm9yZSBkYXRlLiAqLworCQlyZXR1cm4gMDsKKwlpZiAoZW5kWy0xXSA9PSAnXHQnKSB7CS8qIFN1Y2Nlc3MhICovCisJCWVuZC0tOworCQlyZXR1cm4gbGluZSArIGxlbiAtIGVuZDsKKwl9CisJaWYgKGVuZFstMV0gIT0gJyAnKQkvKiBObyBzcGFjZSBiZWZvcmUgZGF0ZS4gKi8KKwkJcmV0dXJuIDA7CisKKwkvKiBXaGl0ZXNwYWNlIGRhbWFnZS4gKi8KKwllbmQgLT0gdHJhaWxpbmdfc3BhY2VzX2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwlyZXR1cm4gbGluZSArIGxlbiAtIGVuZDsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfbmFtZV9jb21tb24oc3RydWN0IHN0cmJ1ZiAqcm9vdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgICBjb25zdCBjaGFyICpkZWYsCisJCQkgICAgICBpbnQgcF92YWx1ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmVuZCwKKwkJCSAgICAgIGludCB0ZXJtaW5hdGUpCit7CisJaW50IGxlbjsKKwljb25zdCBjaGFyICpzdGFydCA9IE5VTEw7CisKKwlpZiAocF92YWx1ZSA9PSAwKQorCQlzdGFydCA9IGxpbmU7CisJd2hpbGUgKGxpbmUgIT0gZW5kKSB7CisJCWNoYXIgYyA9ICpsaW5lOworCisJCWlmICghZW5kICYmIGlzc3BhY2UoYykpIHsKKwkJCWlmIChjID09ICdcbicpCisJCQkJYnJlYWs7CisJCQlpZiAobmFtZV90ZXJtaW5hdGUoYywgdGVybWluYXRlKSkKKwkJCQlicmVhazsKKwkJfQorCQlsaW5lKys7CisJCWlmIChjID09ICcvJyAmJiAhLS1wX3ZhbHVlKQorCQkJc3RhcnQgPSBsaW5lOworCX0KKwlpZiAoIXN0YXJ0KQorCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHhzdHJkdXBfb3JfbnVsbChkZWYpKTsKKwlsZW4gPSBsaW5lIC0gc3RhcnQ7CisJaWYgKCFsZW4pCisJCXJldHVybiBzcXVhc2hfc2xhc2goeHN0cmR1cF9vcl9udWxsKGRlZikpOworCisJLyoKKwkgKiBHZW5lcmFsbHkgd2UgcHJlZmVyIHRoZSBzaG9ydGVyIG5hbWUsIGVzcGVjaWFsbHkKKwkgKiBpZiB0aGUgb3RoZXIgb25lIGlzIGp1c3QgYSB2YXJpYXRpb24gb2YgdGhhdCB3aXRoCisJICogc29tZXRoaW5nIGVsc2UgdGFja2VkIG9uIHRvIHRoZSBlbmQgKGllICJmaWxlLm9yaWciCisJICogb3IgImZpbGV+IikuCisJICovCisJaWYgKGRlZikgeworCQlpbnQgZGVmbGVuID0gc3RybGVuKGRlZik7CisJCWlmIChkZWZsZW4gPCBsZW4gJiYgIXN0cm5jbXAoc3RhcnQsIGRlZiwgZGVmbGVuKSkKKwkJCXJldHVybiBzcXVhc2hfc2xhc2goeHN0cmR1cChkZWYpKTsKKwl9CisKKwlpZiAocm9vdC0+bGVuKSB7CisJCWNoYXIgKnJldCA9IHhzdHJmbXQoIiVzJS4qcyIsIHJvb3QtPmJ1ZiwgbGVuLCBzdGFydCk7CisJCXJldHVybiBzcXVhc2hfc2xhc2gocmV0KTsKKwl9CisKKwlyZXR1cm4gc3F1YXNoX3NsYXNoKHhtZW1kdXB6KHN0YXJ0LCBsZW4pKTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfbmFtZShzdHJ1Y3Qgc3RyYnVmICpyb290LAorCQkgICAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJICAgICAgIGNoYXIgKmRlZiwKKwkJICAgICAgIGludCBwX3ZhbHVlLAorCQkgICAgICAgaW50IHRlcm1pbmF0ZSkKK3sKKwlpZiAoKmxpbmUgPT0gJyInKSB7CisJCWNoYXIgKm5hbWUgPSBmaW5kX25hbWVfZ251KHJvb3QsIGxpbmUsIHBfdmFsdWUpOworCQlpZiAobmFtZSkKKwkJCXJldHVybiBuYW1lOworCX0KKworCXJldHVybiBmaW5kX25hbWVfY29tbW9uKHJvb3QsIGxpbmUsIGRlZiwgcF92YWx1ZSwgTlVMTCwgdGVybWluYXRlKTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfbmFtZV90cmFkaXRpb25hbChzdHJ1Y3Qgc3RyYnVmICpyb290LAorCQkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkJICAgY2hhciAqZGVmLAorCQkJCSAgIGludCBwX3ZhbHVlKQoreworCXNpemVfdCBsZW47CisJc2l6ZV90IGRhdGVfbGVuOworCisJaWYgKCpsaW5lID09ICciJykgeworCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShyb290LCBsaW5lLCBwX3ZhbHVlKTsKKwkJaWYgKG5hbWUpCisJCQlyZXR1cm4gbmFtZTsKKwl9CisKKwlsZW4gPSBzdHJjaHJudWwobGluZSwgJ1xuJykgLSBsaW5lOworCWRhdGVfbGVuID0gZGlmZl90aW1lc3RhbXBfbGVuKGxpbmUsIGxlbik7CisJaWYgKCFkYXRlX2xlbikKKwkJcmV0dXJuIGZpbmRfbmFtZV9jb21tb24ocm9vdCwgbGluZSwgZGVmLCBwX3ZhbHVlLCBOVUxMLCBURVJNX1RBQik7CisJbGVuIC09IGRhdGVfbGVuOworCisJcmV0dXJuIGZpbmRfbmFtZV9jb21tb24ocm9vdCwgbGluZSwgZGVmLCBwX3ZhbHVlLCBsaW5lICsgbGVuLCAwKTsKK30KKworLyoKKyAqIEdpdmVuIHRoZSBzdHJpbmcgYWZ0ZXIgIi0tLSAiIG9yICIrKysgIiwgZ3Vlc3MgdGhlIGFwcHJvcHJpYXRlCisgKiBwX3ZhbHVlIGZvciB0aGUgZ2l2ZW4gcGF0Y2guCisgKi8KK3N0YXRpYyBpbnQgZ3Vlc3NfcF92YWx1ZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpuYW1lbGluZSkKK3sKKwljaGFyICpuYW1lLCAqY3A7CisJaW50IHZhbCA9IC0xOworCisJaWYgKGlzX2Rldl9udWxsKG5hbWVsaW5lKSkKKwkJcmV0dXJuIC0xOworCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoJnN0YXRlLT5yb290LCBuYW1lbGluZSwgTlVMTCwgMCk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLTE7CisJY3AgPSBzdHJjaHIobmFtZSwgJy8nKTsKKwlpZiAoIWNwKQorCQl2YWwgPSAwOworCWVsc2UgaWYgKHN0YXRlLT5wcmVmaXgpIHsKKwkJLyoKKwkJICogRG9lcyBpdCBiZWdpbiB3aXRoICJhLyRvdXItcHJlZml4IiBhbmQgc3VjaD8gIFRoZW4gdGhpcyBpcworCQkgKiB2ZXJ5IGxpa2VseSB0byBhcHBseSB0byBvdXIgZGlyZWN0b3J5LgorCQkgKi8KKwkJaWYgKHN0YXJ0c193aXRoKG5hbWUsIHN0YXRlLT5wcmVmaXgpKQorCQkJdmFsID0gY291bnRfc2xhc2hlcyhzdGF0ZS0+cHJlZml4KTsKKwkJZWxzZSB7CisJCQljcCsrOworCQkJaWYgKHN0YXJ0c193aXRoKGNwLCBzdGF0ZS0+cHJlZml4KSkKKwkJCQl2YWwgPSBjb3VudF9zbGFzaGVzKHN0YXRlLT5wcmVmaXgpICsgMTsKKwkJfQorCX0KKwlmcmVlKG5hbWUpOworCXJldHVybiB2YWw7Cit9CisKKy8qCisgKiBEb2VzIHRoZSAtLS0vKysrIGxpbmUgaGF2ZSB0aGUgUE9TSVggdGltZXN0YW1wIGFmdGVyIHRoZSBsYXN0IEhUPworICogR05VIGRpZmYgcHV0cyBlcG9jaCB0aGVyZSB0byBzaWduYWwgYSBjcmVhdGlvbi9kZWxldGlvbiBldmVudC4gIElzCisgKiB0aGlzIHN1Y2ggYSB0aW1lc3RhbXA/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2Vwb2NoX3RpbWVzdGFtcChjb25zdCBjaGFyICpuYW1lbGluZSkKK3sKKwkvKgorCSAqIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gZXBvY2ggdGltZXN0YW1wOyBhbnkgbm9uLXplcm8KKwkgKiBmcmFjdGlvbiBjYW5ub3QgYmUgb25lLCBoZW5jZSAiKFwuMCspPyIgaW4gdGhlIHJlZ2V4cCBiZWxvdy4KKwkgKiBGb3IgdGhlIHNhbWUgcmVhc29uLCB0aGUgZGF0ZSBtdXN0IGJlIGVpdGhlciAxOTY5LTEyLTMxIG9yCisJICogMTk3MC0wMS0wMSwgYW5kIHRoZSBzZWNvbmRzIHBhcnQgbXVzdCBiZSAiMDAiLgorCSAqLworCWNvbnN0IGNoYXIgc3RhbXBfcmVnZXhwW10gPQorCQkiXlswLTJdWzAtOV06KFswLTVdWzAtOV0pOjAwKFxcLjArKT8iCisJCSIgIgorCQkiKFstK11bMC0yXVswLTldOj9bMC01XVswLTldKVxuIjsKKwljb25zdCBjaGFyICp0aW1lc3RhbXAgPSBOVUxMLCAqY3AsICpjb2xvbjsKKwlzdGF0aWMgcmVnZXhfdCAqc3RhbXA7CisJcmVnbWF0Y2hfdCBtWzEwXTsKKwlpbnQgem9uZW9mZnNldCwgZXBvY2hfaG91ciwgaG91ciwgbWludXRlOworCWludCBzdGF0dXM7CisKKwlmb3IgKGNwID0gbmFtZWxpbmU7ICpjcCAhPSAnXG4nOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ1x0JykKKwkJCXRpbWVzdGFtcCA9IGNwICsgMTsKKwl9CisJaWYgKCF0aW1lc3RhbXApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBZWVlZLU1NLUREIGhoOm1tOnNzIG11c3QgYmUgZnJvbSBlaXRoZXIgMTk2OS0xMi0zMQorCSAqICh3ZXN0IG9mIEdNVCkgb3IgMTk3MC0wMS0wMSAoZWFzdCBvZiBHTVQpCisJICovCisJaWYgKHNraXBfcHJlZml4KHRpbWVzdGFtcCwgIjE5NjktMTItMzEgIiwgJnRpbWVzdGFtcCkpCisJCWVwb2NoX2hvdXIgPSAyNDsKKwllbHNlIGlmIChza2lwX3ByZWZpeCh0aW1lc3RhbXAsICIxOTcwLTAxLTAxICIsICZ0aW1lc3RhbXApKQorCQllcG9jaF9ob3VyID0gMDsKKwllbHNlCisJCXJldHVybiAwOworCisJaWYgKCFzdGFtcCkgeworCQlzdGFtcCA9IHhtYWxsb2Moc2l6ZW9mKCpzdGFtcCkpOworCQlpZiAocmVnY29tcChzdGFtcCwgc3RhbXBfcmVnZXhwLCBSRUdfRVhURU5ERUQpKSB7CisJCQl3YXJuaW5nKF8oIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiKSwKKwkJCQlzdGFtcF9yZWdleHApOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzdGF0dXMgPSByZWdleGVjKHN0YW1wLCB0aW1lc3RhbXAsIEFSUkFZX1NJWkUobSksIG0sIDApOworCWlmIChzdGF0dXMpIHsKKwkJaWYgKHN0YXR1cyAhPSBSRUdfTk9NQVRDSCkKKwkJCXdhcm5pbmcoXygicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIiksCisJCQkJc3RhdHVzLCB0aW1lc3RhbXApOworCQlyZXR1cm4gMDsKKwl9CisKKwlob3VyID0gc3RydG9sKHRpbWVzdGFtcCwgTlVMTCwgMTApOworCW1pbnV0ZSA9IHN0cnRvbCh0aW1lc3RhbXAgKyBtWzFdLnJtX3NvLCBOVUxMLCAxMCk7CisKKwl6b25lb2Zmc2V0ID0gc3RydG9sKHRpbWVzdGFtcCArIG1bM10ucm1fc28gKyAxLCAoY2hhciAqKikgJmNvbG9uLCAxMCk7CisJaWYgKCpjb2xvbiA9PSAnOicpCisJCXpvbmVvZmZzZXQgPSB6b25lb2Zmc2V0ICogNjAgKyBzdHJ0b2woY29sb24gKyAxLCBOVUxMLCAxMCk7CisJZWxzZQorCQl6b25lb2Zmc2V0ID0gKHpvbmVvZmZzZXQgLyAxMDApICogNjAgKyAoem9uZW9mZnNldCAlIDEwMCk7CisJaWYgKHRpbWVzdGFtcFttWzNdLnJtX3NvXSA9PSAnLScpCisJCXpvbmVvZmZzZXQgPSAtem9uZW9mZnNldDsKKworCXJldHVybiBob3VyICogNjAgKyBtaW51dGUgLSB6b25lb2Zmc2V0ID09IGVwb2NoX2hvdXIgKiA2MDsKK30KKworLyoKKyAqIEdldCB0aGUgbmFtZSBldGMgaW5mbyBmcm9tIHRoZSAtLS0vKysrIGxpbmVzIG9mIGEgdHJhZGl0aW9uYWwgcGF0Y2ggaGVhZGVyCisgKgorICogRklYTUUhIFRoZSBlbmQtb2YtZmlsZW5hbWUgaGV1cmlzdGljcyBhcmUga2luZCBvZiBzY3Jld3kuIEZvciBleGlzdGluZworICogZmlsZXMsIHdlIGNhbiBoYXBwaWx5IGNoZWNrIHRoZSBpbmRleCBmb3IgYSBtYXRjaCwgYnV0IGZvciBjcmVhdGluZyBhCisgKiBuZXcgZmlsZSB3ZSBzaG91bGQgdHJ5IHRvIG1hdGNoIHdoYXRldmVyICJwYXRjaCIgZG9lcy4gSSBoYXZlIG5vIGlkZWEuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfdHJhZGl0aW9uYWxfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCQkgICBjb25zdCBjaGFyICpmaXJzdCwKKwkJCQkgICBjb25zdCBjaGFyICpzZWNvbmQsCisJCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwljaGFyICpuYW1lOworCisJZmlyc3QgKz0gNDsJLyogc2tpcCAiLS0tICIgKi8KKwlzZWNvbmQgKz0gNDsJLyogc2tpcCAiKysrICIgKi8KKwlpZiAoIXN0YXRlLT5wX3ZhbHVlX2tub3duKSB7CisJCWludCBwLCBxOworCQlwID0gZ3Vlc3NfcF92YWx1ZShzdGF0ZSwgZmlyc3QpOworCQlxID0gZ3Vlc3NfcF92YWx1ZShzdGF0ZSwgc2Vjb25kKTsKKwkJaWYgKHAgPCAwKSBwID0gcTsKKwkJaWYgKDAgPD0gcCAmJiBwID09IHEpIHsKKwkJCXN0YXRlLT5wX3ZhbHVlID0gcDsKKwkJCXN0YXRlLT5wX3ZhbHVlX2tub3duID0gMTsKKwkJfQorCX0KKwlpZiAoaXNfZGV2X251bGwoZmlyc3QpKSB7CisJCXBhdGNoLT5pc19uZXcgPSAxOworCQlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKwkJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbCgmc3RhdGUtPnJvb3QsIHNlY29uZCwgTlVMTCwgc3RhdGUtPnBfdmFsdWUpOworCQlwYXRjaC0+bmV3X25hbWUgPSBuYW1lOworCX0gZWxzZSBpZiAoaXNfZGV2X251bGwoc2Vjb25kKSkgeworCQlwYXRjaC0+aXNfbmV3ID0gMDsKKwkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDE7CisJCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoJnN0YXRlLT5yb290LCBmaXJzdCwgTlVMTCwgc3RhdGUtPnBfdmFsdWUpOworCQlwYXRjaC0+b2xkX25hbWUgPSBuYW1lOworCX0gZWxzZSB7CisJCWNoYXIgKmZpcnN0X25hbWU7CisJCWZpcnN0X25hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoJnN0YXRlLT5yb290LCBmaXJzdCwgTlVMTCwgc3RhdGUtPnBfdmFsdWUpOworCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKCZzdGF0ZS0+cm9vdCwgc2Vjb25kLCBmaXJzdF9uYW1lLCBzdGF0ZS0+cF92YWx1ZSk7CisJCWZyZWUoZmlyc3RfbmFtZSk7CisJCWlmIChoYXNfZXBvY2hfdGltZXN0YW1wKGZpcnN0KSkgeworCQkJcGF0Y2gtPmlzX25ldyA9IDE7CisJCQlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKwkJCXBhdGNoLT5uZXdfbmFtZSA9IG5hbWU7CisJCX0gZWxzZSBpZiAoaGFzX2Vwb2NoX3RpbWVzdGFtcChzZWNvbmQpKSB7CisJCQlwYXRjaC0+aXNfbmV3ID0gMDsKKwkJCXBhdGNoLT5pc19kZWxldGUgPSAxOworCQkJcGF0Y2gtPm9sZF9uYW1lID0gbmFtZTsKKwkJfSBlbHNlIHsKKwkJCXBhdGNoLT5vbGRfbmFtZSA9IG5hbWU7CisJCQlwYXRjaC0+bmV3X25hbWUgPSB4c3RyZHVwX29yX251bGwobmFtZSk7CisJCX0KKwl9CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfaGRyZW5kKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICBjb25zdCBjaGFyICpsaW5lLAorCQkJICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiAxOworfQorCisvKgorICogV2UncmUgYW5hbCBhYm91dCBkaWZmIGhlYWRlciBjb25zaXN0ZW5jeSwgdG8gbWFrZQorICogc3VyZSB0aGF0IHdlIGRvbid0IGVuZCB1cCBoYXZpbmcgc3RyYW5nZSBhbWJpZ3VvdXMKKyAqIHBhdGNoZXMgZmxvYXRpbmcgYXJvdW5kLgorICoKKyAqIEFzIGEgcmVzdWx0LCBnaXRkaWZmX3tvbGR8bmV3fW5hbWUoKSB3aWxsIGNoZWNrCisgKiB0aGVpciBuYW1lcyBhZ2FpbnN0IGFueSBwcmV2aW91cyBpbmZvcm1hdGlvbiwganVzdAorICogdG8gbWFrZSBzdXJlLi4KKyAqLworI2RlZmluZSBESUZGX09MRF9OQU1FIDAKKyNkZWZpbmUgRElGRl9ORVdfTkFNRSAxCisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl92ZXJpZnlfbmFtZShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICAgIGludCBpc251bGwsCisJCQkgICAgICAgY2hhciAqKm5hbWUsCisJCQkgICAgICAgaW50IHNpZGUpCit7CisJaWYgKCEqbmFtZSAmJiAhaXNudWxsKSB7CisJCSpuYW1lID0gZmluZF9uYW1lKHN0YXRlLT5yb290LCBsaW5lLCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSwgVEVSTV9UQUIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKm5hbWUpIHsKKwkJY2hhciAqYW5vdGhlcjsKKwkJaWYgKGlzbnVsbCkKKwkJCXJldHVybiBlcnJvcihfKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiKSwKKwkJCQkgICAgICpuYW1lLCBzdGF0ZS0+bGluZW5yKTsKKwkJYW5vdGhlciA9IGZpbmRfbmFtZShzdGF0ZS0+cm9vdCwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUsIFRFUk1fVEFCKTsKKwkJaWYgKCFhbm90aGVyIHx8IHN0cmNtcChhbm90aGVyLCAqbmFtZSkpIHsKKwkJCWZyZWUoYW5vdGhlcik7CisJCQlyZXR1cm4gZXJyb3IoKHNpZGUgPT0gRElGRl9ORVdfTkFNRSkgPworCQkJICAgIF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIikgOgorCQkJICAgIF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIiksIHN0YXRlLT5saW5lbnIpOworCQl9CisJCWZyZWUoYW5vdGhlcik7CisJfSBlbHNlIHsKKwkJaWYgKCFpc19kZXZfbnVsbChsaW5lKSkKKwkJCXJldHVybiBlcnJvcihfKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIiksIHN0YXRlLT5saW5lbnIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfb2xkbmFtZShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiBnaXRkaWZmX3ZlcmlmeV9uYW1lKHN0YXRlLCBsaW5lLAorCQkJCSAgIHBhdGNoLT5pc19uZXcsICZwYXRjaC0+b2xkX25hbWUsCisJCQkJICAgRElGRl9PTERfTkFNRSk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9uZXduYW1lKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuIGdpdGRpZmZfdmVyaWZ5X25hbWUoc3RhdGUsIGxpbmUsCisJCQkJICAgcGF0Y2gtPmlzX2RlbGV0ZSwgJnBhdGNoLT5uZXdfbmFtZSwKKwkJCQkgICBESUZGX05FV19OQU1FKTsKK30KKworc3RhdGljIGludCBwYXJzZV9tb2RlX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50IGxpbmVuciwgdW5zaWduZWQgaW50ICptb2RlKQoreworCWNoYXIgKmVuZDsKKwkqbW9kZSA9IHN0cnRvdWwobGluZSwgJmVuZCwgOCk7CisJaWYgKGVuZCA9PSBsaW5lIHx8ICFpc3NwYWNlKCplbmQpKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBtb2RlIG9uIGxpbmUgJWQ6ICVzIiksIGxpbmVuciwgbGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9vbGRtb2RlKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuIHBhcnNlX21vZGVfbGluZShsaW5lLCBzdGF0ZS0+bGluZW5yLCAmcGF0Y2gtPm9sZF9tb2RlKTsKK30KKworc3RhdGljIGludCBnaXRkaWZmX25ld21vZGUoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4gcGFyc2VfbW9kZV9saW5lKGxpbmUsIHN0YXRlLT5saW5lbnIsICZwYXRjaC0+bmV3X21vZGUpOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfZGVsZXRlKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICBjb25zdCBjaGFyICpsaW5lLAorCQkJICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXBhdGNoLT5pc19kZWxldGUgPSAxOworCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKKwlwYXRjaC0+b2xkX25hbWUgPSB4c3RyZHVwX29yX251bGwocGF0Y2gtPmRlZl9uYW1lKTsKKwlyZXR1cm4gZ2l0ZGlmZl9vbGRtb2RlKHN0YXRlLCBsaW5lLCBwYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9uZXdmaWxlKHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX25ldyA9IDE7CisJZnJlZShwYXRjaC0+bmV3X25hbWUpOworCXBhdGNoLT5uZXdfbmFtZSA9IHhzdHJkdXBfb3JfbnVsbChwYXRjaC0+ZGVmX25hbWUpOworCXJldHVybiBnaXRkaWZmX25ld21vZGUoc3RhdGUsIGxpbmUsIHBhdGNoKTsKK30KKworc3RhdGljIGludCBnaXRkaWZmX2NvcHlzcmMoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfY29weSA9IDE7CisJZnJlZShwYXRjaC0+b2xkX25hbWUpOworCXBhdGNoLT5vbGRfbmFtZSA9IGZpbmRfbmFtZShzdGF0ZS0+cm9vdCwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUgPyBzdGF0ZS0+cF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX2NvcHlkc3Qoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfY29weSA9IDE7CisJZnJlZShwYXRjaC0+bmV3X25hbWUpOworCXBhdGNoLT5uZXdfbmFtZSA9IGZpbmRfbmFtZShzdGF0ZS0+cm9vdCwgbGluZSwgTlVMTCwgc3RhdGUtPnBfdmFsdWUgPyBzdGF0ZS0+cF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX3JlbmFtZXNyYyhzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfcmVuYW1lID0gMTsKKwlmcmVlKHBhdGNoLT5vbGRfbmFtZSk7CisJcGF0Y2gtPm9sZF9uYW1lID0gZmluZF9uYW1lKHN0YXRlLT5yb290LCBsaW5lLCBOVUxMLCBzdGF0ZS0+cF92YWx1ZSA/IHN0YXRlLT5wX3ZhbHVlIC0gMSA6IDAsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfcmVuYW1lZHN0KHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lLAorCQkJICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXBhdGNoLT5pc19yZW5hbWUgPSAxOworCWZyZWUocGF0Y2gtPm5ld19uYW1lKTsKKwlwYXRjaC0+bmV3X25hbWUgPSBmaW5kX25hbWUoc3RhdGUtPnJvb3QsIGxpbmUsIE5VTEwsIHN0YXRlLT5wX3ZhbHVlID8gc3RhdGUtPnBfdmFsdWUgLSAxIDogMCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9zaW1pbGFyaXR5KHN0cnVjdCBnaXRkaWZmX2RhdGEgKnN0YXRlLAorCQkJICAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b3VsKGxpbmUsIE5VTEwsIDEwKTsKKwlpZiAodmFsIDw9IDEwMCkKKwkJcGF0Y2gtPnNjb3JlID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfZGlzc2ltaWxhcml0eShzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCQkgY29uc3QgY2hhciAqbGluZSwKKwkJCQkgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvdWwobGluZSwgTlVMTCwgMTApOworCWlmICh2YWwgPD0gMTAwKQorCQlwYXRjaC0+c2NvcmUgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9pbmRleChzdHJ1Y3QgZ2l0ZGlmZl9kYXRhICpzdGF0ZSwKKwkJCSBjb25zdCBjaGFyICpsaW5lLAorCQkJIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJLyoKKwkgKiBpbmRleCBsaW5lIGlzIE4gaGV4YWRlY2ltYWwsICIuLiIsIE4gaGV4YWRlY2ltYWwsCisJICogYW5kIG9wdGlvbmFsIHNwYWNlIHdpdGggb2N0YWwgbW9kZS4KKwkgKi8KKwljb25zdCBjaGFyICpwdHIsICplb2w7CisJaW50IGxlbjsKKwljb25zdCB1bnNpZ25lZCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJcHRyID0gc3RyY2hyKGxpbmUsICcuJyk7CisJaWYgKCFwdHIgfHwgcHRyWzFdICE9ICcuJyB8fCBoZXhzeiA8IHB0ciAtIGxpbmUpCisJCXJldHVybiAwOworCWxlbiA9IHB0ciAtIGxpbmU7CisJbWVtY3B5KHBhdGNoLT5vbGRfb2lkX3ByZWZpeCwgbGluZSwgbGVuKTsKKwlwYXRjaC0+b2xkX29pZF9wcmVmaXhbbGVuXSA9IDA7CisKKwlsaW5lID0gcHRyICsgMjsKKwlwdHIgPSBzdHJjaHIobGluZSwgJyAnKTsKKwllb2wgPSBzdHJjaHJudWwobGluZSwgJ1xuJyk7CisKKwlpZiAoIXB0ciB8fCBlb2wgPCBwdHIpCisJCXB0ciA9IGVvbDsKKwlsZW4gPSBwdHIgLSBsaW5lOworCisJaWYgKGhleHN6IDwgbGVuKQorCQlyZXR1cm4gMDsKKwltZW1jcHkocGF0Y2gtPm5ld19vaWRfcHJlZml4LCBsaW5lLCBsZW4pOworCXBhdGNoLT5uZXdfb2lkX3ByZWZpeFtsZW5dID0gMDsKKwlpZiAoKnB0ciA9PSAnICcpCisJCXJldHVybiBnaXRkaWZmX29sZG1vZGUoc3RhdGUsIHB0ciArIDEsIHBhdGNoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgbm9ybWFsIGZvciBhIGRpZmYgdGhhdCBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZzogd2UnbGwgZmFsbCB0aHJvdWdoCisgKiBpbnRvIHRoZSBuZXh0IGRpZmYuIFRlbGwgdGhlIHBhcnNlciB0byBicmVhayBvdXQuCisgKi8KK3N0YXRpYyBpbnQgZ2l0ZGlmZl91bnJlY29nbml6ZWQoc3RydWN0IGdpdGRpZmZfZGF0YSAqc3RhdGUsCisJCQkJY29uc3QgY2hhciAqbGluZSwKKwkJCQlzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiAxOworfQorCisvKgorICogU2tpcCBwX3ZhbHVlIGxlYWRpbmcgY29tcG9uZW50cyBmcm9tICJsaW5lIjsgYXMgd2UgZG8gbm90IGFjY2VwdAorICogYWJzb2x1dGUgcGF0aHMsIHJldHVybiBOVUxMIGluIHRoYXQgY2FzZS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfdHJlZV9wcmVmaXgoaW50IHBfdmFsdWUsCisJCQkJICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkJICAgIGludCBsbGVuKQoreworCWludCBuc2xhc2g7CisJaW50IGk7CisKKwlpZiAoIXBfdmFsdWUpCisJCXJldHVybiAobGxlbiAmJiBsaW5lWzBdID09ICcvJykgPyBOVUxMIDogbGluZTsKKworCW5zbGFzaCA9IHBfdmFsdWU7CisJZm9yIChpID0gMDsgaSA8IGxsZW47IGkrKykgeworCQlpbnQgY2ggPSBsaW5lW2ldOworCQlpZiAoY2ggPT0gJy8nICYmIC0tbnNsYXNoIDw9IDApCisJCQlyZXR1cm4gKGkgPT0gMCkgPyBOVUxMIDogJmxpbmVbaSArIDFdOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgaXMgdG8gZXh0cmFjdCB0aGUgc2FtZSBuYW1lIHRoYXQgYXBwZWFycyBvbiAiZGlmZiAtLWdpdCIKKyAqIGxpbmUuICBXZSBkbyBub3QgZmluZCBhbmQgcmV0dXJuIGFueXRoaW5nIGlmIGl0IGlzIGEgcmVuYW1lCisgKiBwYXRjaCwgYW5kIGl0IGlzIE9LIGJlY2F1c2Ugd2Ugd2lsbCBmaW5kIHRoZSBuYW1lIGVsc2V3aGVyZS4KKyAqIFdlIG5lZWQgdG8gcmVsaWFibHkgZmluZCBuYW1lIG9ubHkgd2hlbiBpdCBpcyBtb2RlLWNoYW5nZSBvbmx5LAorICogY3JlYXRpb24gb3IgZGVsZXRpb24gb2YgYW4gZW1wdHkgZmlsZS4gIEluIGFueSBvZiB0aGVzZSBjYXNlcywKKyAqIGJvdGggc2lkZXMgYXJlIHRoZSBzYW1lIG5hbWUgdW5kZXIgYS8gYW5kIGIvIHJlc3BlY3RpdmVseS4KKyAqLworc3RhdGljIGNoYXIgKmdpdF9oZWFkZXJfbmFtZShpbnQgcF92YWx1ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICAgaW50IGxsZW4pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpzZWNvbmQgPSBOVUxMOworCXNpemVfdCBsZW4sIGxpbmVfbGVuOworCisJbGluZSArPSBzdHJsZW4oImRpZmYgLS1naXQgIik7CisJbGxlbiAtPSBzdHJsZW4oImRpZmYgLS1naXQgIik7CisKKwlpZiAoKmxpbmUgPT0gJyInKSB7CisJCWNvbnN0IGNoYXIgKmNwOworCQlzdHJ1Y3Qgc3RyYnVmIGZpcnN0ID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgc3AgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZmaXJzdCwgbGluZSwgJnNlY29uZCkpCisJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCisJCS8qIHN0cmlwIHRoZSBhL2IgcHJlZml4IGluY2x1ZGluZyB0cmFpbGluZyBzbGFzaCAqLworCQljcCA9IHNraXBfdHJlZV9wcmVmaXgocF92YWx1ZSwgZmlyc3QuYnVmLCBmaXJzdC5sZW4pOworCQlpZiAoIWNwKQorCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJc3RyYnVmX3JlbW92ZSgmZmlyc3QsIDAsIGNwIC0gZmlyc3QuYnVmKTsKKworCQkvKgorCQkgKiBzZWNvbmQgcG9pbnRzIGF0IG9uZSBwYXN0IGNsb3NpbmcgZHEgb2YgbmFtZS4KKwkJICogZmluZCB0aGUgc2Vjb25kIG5hbWUuCisJCSAqLworCQl3aGlsZSAoKHNlY29uZCA8IGxpbmUgKyBsbGVuKSAmJiBpc3NwYWNlKCpzZWNvbmQpKQorCQkJc2Vjb25kKys7CisKKwkJaWYgKGxpbmUgKyBsbGVuIDw9IHNlY29uZCkKKwkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCWlmICgqc2Vjb25kID09ICciJykgeworCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmc3AsIHNlY29uZCwgTlVMTCkpCisJCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJCWNwID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBzcC5idWYsIHNwLmxlbik7CisJCQlpZiAoIWNwKQorCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCQkvKiBUaGV5IG11c3QgbWF0Y2gsIG90aGVyd2lzZSBpZ25vcmUgKi8KKwkJCWlmIChzdHJjbXAoY3AsIGZpcnN0LmJ1ZikpCisJCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzcCk7CisJCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmZmlyc3QsIE5VTEwpOworCQl9CisKKwkJLyogdW5xdW90ZWQgc2Vjb25kICovCisJCWNwID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBzZWNvbmQsIGxpbmUgKyBsbGVuIC0gc2Vjb25kKTsKKwkJaWYgKCFjcCkKKwkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCWlmIChsaW5lICsgbGxlbiAtIGNwICE9IGZpcnN0LmxlbiB8fAorCQkgICAgbWVtY21wKGZpcnN0LmJ1ZiwgY3AsIGZpcnN0LmxlbikpCisJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmZmlyc3QsIE5VTEwpOworCisJZnJlZV9hbmRfZmFpbDE6CisJCXN0cmJ1Zl9yZWxlYXNlKCZmaXJzdCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzcCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHVucXVvdGVkIGZpcnN0IG5hbWUgKi8KKwluYW1lID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBsaW5lLCBsbGVuKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBzaW5jZSB0aGUgZmlyc3QgbmFtZSBpcyB1bnF1b3RlZCwgYSBkcSBpZiBleGlzdHMgbXVzdCBiZQorCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBuYW1lLgorCSAqLworCWZvciAoc2Vjb25kID0gbmFtZTsgc2Vjb25kIDwgbGluZSArIGxsZW47IHNlY29uZCsrKSB7CisJCWlmICgqc2Vjb25kID09ICciJykgeworCQkJc3RydWN0IHN0cmJ1ZiBzcCA9IFNUUkJVRl9JTklUOworCQkJY29uc3QgY2hhciAqbnA7CisKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnNwLCBzZWNvbmQsIE5VTEwpKQorCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDI7CisKKwkJCW5wID0gc2tpcF90cmVlX3ByZWZpeChwX3ZhbHVlLCBzcC5idWYsIHNwLmxlbik7CisJCQlpZiAoIW5wKQorCQkJCWdvdG8gZnJlZV9hbmRfZmFpbDI7CisKKwkJCWxlbiA9IHNwLmJ1ZiArIHNwLmxlbiAtIG5wOworCQkJaWYgKGxlbiA8IHNlY29uZCAtIG5hbWUgJiYKKwkJCSAgICAhc3RybmNtcChucCwgbmFtZSwgbGVuKSAmJgorCQkJICAgIGlzc3BhY2UobmFtZVtsZW5dKSkgeworCQkJCS8qIEdvb2QgKi8KKwkJCQlzdHJidWZfcmVtb3ZlKCZzcCwgMCwgbnAgLSBzcC5idWYpOworCQkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZzcCwgTlVMTCk7CisJCQl9CisKKwkJZnJlZV9hbmRfZmFpbDI6CisJCQlzdHJidWZfcmVsZWFzZSgmc3ApOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkvKgorCSAqIEFjY2VwdCBhIG5hbWUgb25seSBpZiBpdCBzaG93cyB1cCB0d2ljZSwgZXhhY3RseSB0aGUgc2FtZQorCSAqIGZvcm0uCisJICovCisJc2Vjb25kID0gc3RyY2hyKG5hbWUsICdcbicpOworCWlmICghc2Vjb25kKQorCQlyZXR1cm4gTlVMTDsKKwlsaW5lX2xlbiA9IHNlY29uZCAtIG5hbWU7CisJZm9yIChsZW4gPSAwIDsgOyBsZW4rKykgeworCQlzd2l0Y2ggKG5hbWVbbGVuXSkgeworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCWNhc2UgJ1xuJzoKKwkJCXJldHVybiBOVUxMOworCQljYXNlICdcdCc6IGNhc2UgJyAnOgorCQkJLyoKKwkJCSAqIElzIHRoaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBwcmVpbWFnZQorCQkJICogYW5kIHRoZSBwb3N0aW1hZ2UgcGF0aG5hbWU/ICBBZ2Fpbiwgd2UgYXJlCisJCQkgKiBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMKKwkJCSAqIG5vIHJlbmFtZSwgYXMgdGhpcyBpcyBvbmx5IHRvIHNldCBkZWZfbmFtZQorCQkJICogYW5kIGEgcmVuYW1lIHBhdGNoIGhhcyB0aGUgbmFtZXMgZWxzZXdoZXJlCisJCQkgKiBpbiBhbiB1bmFtYmlndW91cyBmb3JtLgorCQkJICovCisJCQlpZiAoIW5hbWVbbGVuICsgMV0pCisJCQkJcmV0dXJuIE5VTEw7IC8qIG5vIHBvc3RpbWFnZSBuYW1lICovCisJCQlzZWNvbmQgPSBza2lwX3RyZWVfcHJlZml4KHBfdmFsdWUsIG5hbWUgKyBsZW4gKyAxLAorCQkJCQkJICBsaW5lX2xlbiAtIChsZW4gKyAxKSk7CisJCQlpZiAoIXNlY29uZCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCS8qCisJCQkgKiBEb2VzIGxlbiBieXRlcyBzdGFydGluZyBhdCAibmFtZSIgYW5kICJzZWNvbmQiCisJCQkgKiAodGhhdCBhcmUgc2VwYXJhdGVkIGJ5IG9uZSBIVCBvciBTUCB3ZSBqdXN0CisJCQkgKiBmb3VuZCkgZXhhY3RseSBtYXRjaD8KKwkJCSAqLworCQkJaWYgKHNlY29uZFtsZW5dID09ICdcbicgJiYgIXN0cm5jbXAobmFtZSwgc2Vjb25kLCBsZW4pKQorCQkJCXJldHVybiB4bWVtZHVweihuYW1lLCBsZW4pOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNoZWNrX2hlYWRlcl9saW5lKGludCBsaW5lbnIsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGV4dGVuc2lvbnMgPSAocGF0Y2gtPmlzX2RlbGV0ZSA9PSAxKSArIChwYXRjaC0+aXNfbmV3ID09IDEpICsKKwkJCSAocGF0Y2gtPmlzX3JlbmFtZSA9PSAxKSArIChwYXRjaC0+aXNfY29weSA9PSAxKTsKKwlpZiAoZXh0ZW5zaW9ucyA+IDEpCisJCXJldHVybiBlcnJvcihfKCJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIpLAorCQkJICAgICBwYXRjaC0+ZXh0ZW5zaW9uX2xpbmVuciwgbGluZW5yKTsKKwlpZiAoZXh0ZW5zaW9ucyAmJiAhcGF0Y2gtPmV4dGVuc2lvbl9saW5lbnIpCisJCXBhdGNoLT5leHRlbnNpb25fbGluZW5yID0gbGluZW5yOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2VfZ2l0X2RpZmZfaGVhZGVyKHN0cnVjdCBzdHJidWYgKnJvb3QsCisJCQkgIGludCAqbGluZW5yLAorCQkJICBpbnQgcF92YWx1ZSwKKwkJCSAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgaW50IGxlbiwKKwkJCSAgdW5zaWduZWQgaW50IHNpemUsCisJCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IGdpdGRpZmZfZGF0YSBwYXJzZV9oZHJfc3RhdGU7CisKKwkvKiBBIGdpdCBkaWZmIGhhcyBleHBsaWNpdCBuZXcvZGVsZXRlIGluZm9ybWF0aW9uLCBzbyB3ZSBkb24ndCBndWVzcyAqLworCXBhdGNoLT5pc19uZXcgPSAwOworCXBhdGNoLT5pc19kZWxldGUgPSAwOworCisJLyoKKwkgKiBTb21lIHRoaW5ncyBtYXkgbm90IGhhdmUgdGhlIG9sZCBuYW1lIGluIHRoZQorCSAqIHJlc3Qgb2YgdGhlIGhlYWRlcnMgYW55d2hlcmUgKHB1cmUgbW9kZSBjaGFuZ2VzLAorCSAqIG9yIHJlbW92aW5nIG9yIGFkZGluZyBlbXB0eSBmaWxlcyksIHNvIHdlIGdldAorCSAqIHRoZSBkZWZhdWx0IG5hbWUgZnJvbSB0aGUgaGVhZGVyLgorCSAqLworCXBhdGNoLT5kZWZfbmFtZSA9IGdpdF9oZWFkZXJfbmFtZShwX3ZhbHVlLCBsaW5lLCBsZW4pOworCWlmIChwYXRjaC0+ZGVmX25hbWUgJiYgcm9vdC0+bGVuKSB7CisJCWNoYXIgKnMgPSB4c3RyZm10KCIlcyVzIiwgcm9vdC0+YnVmLCBwYXRjaC0+ZGVmX25hbWUpOworCQlmcmVlKHBhdGNoLT5kZWZfbmFtZSk7CisJCXBhdGNoLT5kZWZfbmFtZSA9IHM7CisJfQorCisJbGluZSArPSBsZW47CisJc2l6ZSAtPSBsZW47CisJKCpsaW5lbnIpKys7CisJcGFyc2VfaGRyX3N0YXRlLnJvb3QgPSByb290OworCXBhcnNlX2hkcl9zdGF0ZS5saW5lbnIgPSAqbGluZW5yOworCXBhcnNlX2hkcl9zdGF0ZS5wX3ZhbHVlID0gcF92YWx1ZTsKKworCWZvciAob2Zmc2V0ID0gbGVuIDsgc2l6ZSA+IDAgOyBvZmZzZXQgKz0gbGVuLCBzaXplIC09IGxlbiwgbGluZSArPSBsZW4sICgqbGluZW5yKSsrKSB7CisJCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3BlbnRyeSB7CisJCQljb25zdCBjaGFyICpzdHI7CisJCQlpbnQgKCpmbikoc3RydWN0IGdpdGRpZmZfZGF0YSAqLCBjb25zdCBjaGFyICosIHN0cnVjdCBwYXRjaCAqKTsKKwkJfSBvcHRhYmxlW10gPSB7CisJCQl7ICJAQCAtIiwgZ2l0ZGlmZl9oZHJlbmQgfSwKKwkJCXsgIi0tLSAiLCBnaXRkaWZmX29sZG5hbWUgfSwKKwkJCXsgIisrKyAiLCBnaXRkaWZmX25ld25hbWUgfSwKKwkJCXsgIm9sZCBtb2RlICIsIGdpdGRpZmZfb2xkbW9kZSB9LAorCQkJeyAibmV3IG1vZGUgIiwgZ2l0ZGlmZl9uZXdtb2RlIH0sCisJCQl7ICJkZWxldGVkIGZpbGUgbW9kZSAiLCBnaXRkaWZmX2RlbGV0ZSB9LAorCQkJeyAibmV3IGZpbGUgbW9kZSAiLCBnaXRkaWZmX25ld2ZpbGUgfSwKKwkJCXsgImNvcHkgZnJvbSAiLCBnaXRkaWZmX2NvcHlzcmMgfSwKKwkJCXsgImNvcHkgdG8gIiwgZ2l0ZGlmZl9jb3B5ZHN0IH0sCisJCQl7ICJyZW5hbWUgb2xkICIsIGdpdGRpZmZfcmVuYW1lc3JjIH0sCisJCQl7ICJyZW5hbWUgbmV3ICIsIGdpdGRpZmZfcmVuYW1lZHN0IH0sCisJCQl7ICJyZW5hbWUgZnJvbSAiLCBnaXRkaWZmX3JlbmFtZXNyYyB9LAorCQkJeyAicmVuYW1lIHRvICIsIGdpdGRpZmZfcmVuYW1lZHN0IH0sCisJCQl7ICJzaW1pbGFyaXR5IGluZGV4ICIsIGdpdGRpZmZfc2ltaWxhcml0eSB9LAorCQkJeyAiZGlzc2ltaWxhcml0eSBpbmRleCAiLCBnaXRkaWZmX2Rpc3NpbWlsYXJpdHkgfSwKKwkJCXsgImluZGV4ICIsIGdpdGRpZmZfaW5kZXggfSwKKwkJCXsgIiIsIGdpdGRpZmZfdW5yZWNvZ25pemVkIH0sCisJCX07CisJCWludCBpOworCisJCWxlbiA9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisJCWlmICghbGVuIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3B0YWJsZSk7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IG9wZW50cnkgKnAgPSBvcHRhYmxlICsgaTsKKwkJCWludCBvcGxlbiA9IHN0cmxlbihwLT5zdHIpOworCQkJaW50IHJlczsKKwkJCWlmIChsZW4gPCBvcGxlbiB8fCBtZW1jbXAocC0+c3RyLCBsaW5lLCBvcGxlbikpCisJCQkJY29udGludWU7CisJCQlyZXMgPSBwLT5mbigmcGFyc2VfaGRyX3N0YXRlLCBsaW5lICsgb3BsZW4sIHBhdGNoKTsKKwkJCWlmIChyZXMgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChjaGVja19oZWFkZXJfbGluZSgqbGluZW5yLCBwYXRjaCkpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKHJlcyA+IDApCisJCQkJZ290byBkb25lOworCQkJYnJlYWs7CisJCX0KKwl9CisKK2RvbmU6CisJaWYgKCFwYXRjaC0+b2xkX25hbWUgJiYgIXBhdGNoLT5uZXdfbmFtZSkgeworCQlpZiAoIXBhdGNoLT5kZWZfbmFtZSkgeworCQkJZXJyb3IoUV8oImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICIKKwkJCQkgIiVkIGxlYWRpbmcgcGF0aG5hbWUgY29tcG9uZW50IChsaW5lICVkKSIsCisJCQkJICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAiCisJCQkJICIlZCBsZWFkaW5nIHBhdGhuYW1lIGNvbXBvbmVudHMgKGxpbmUgJWQpIiwKKwkJCQkgcGFyc2VfaGRyX3N0YXRlLnBfdmFsdWUpLAorCQkJICAgICAgcGFyc2VfaGRyX3N0YXRlLnBfdmFsdWUsICpsaW5lbnIpOworCQkJcmV0dXJuIC0xMjg7CisJCX0KKwkJcGF0Y2gtPm9sZF9uYW1lID0geHN0cmR1cChwYXRjaC0+ZGVmX25hbWUpOworCQlwYXRjaC0+bmV3X25hbWUgPSB4c3RyZHVwKHBhdGNoLT5kZWZfbmFtZSk7CisJfQorCWlmICgoIXBhdGNoLT5uZXdfbmFtZSAmJiAhcGF0Y2gtPmlzX2RlbGV0ZSkgfHwKKwkgICAgKCFwYXRjaC0+b2xkX25hbWUgJiYgIXBhdGNoLT5pc19uZXcpKSB7CisJCWVycm9yKF8oImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAiCisJCQkiKGxpbmUgJWQpIiksICpsaW5lbnIpOworCQlyZXR1cm4gLTEyODsKKwl9CisJcGF0Y2gtPmlzX3RvcGxldmVsX3JlbGF0aXZlID0gMTsKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IHBhcnNlX251bShjb25zdCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nICpwKQoreworCWNoYXIgKnB0cjsKKworCWlmICghaXNkaWdpdCgqbGluZSkpCisJCXJldHVybiAwOworCSpwID0gc3RydG91bChsaW5lLCAmcHRyLCAxMCk7CisJcmV0dXJuIHB0ciAtIGxpbmU7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmFuZ2UoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgaW50IG9mZnNldCwgY29uc3QgY2hhciAqZXhwZWN0LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQoreworCWludCBkaWdpdHMsIGV4OworCisJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID49IGxlbikKKwkJcmV0dXJuIC0xOworCWxpbmUgKz0gb2Zmc2V0OworCWxlbiAtPSBvZmZzZXQ7CisKKwlkaWdpdHMgPSBwYXJzZV9udW0obGluZSwgcDEpOworCWlmICghZGlnaXRzKQorCQlyZXR1cm4gLTE7CisKKwlvZmZzZXQgKz0gZGlnaXRzOworCWxpbmUgKz0gZGlnaXRzOworCWxlbiAtPSBkaWdpdHM7CisKKwkqcDIgPSAxOworCWlmICgqbGluZSA9PSAnLCcpIHsKKwkJZGlnaXRzID0gcGFyc2VfbnVtKGxpbmUrMSwgcDIpOworCQlpZiAoIWRpZ2l0cykKKwkJCXJldHVybiAtMTsKKworCQlvZmZzZXQgKz0gZGlnaXRzKzE7CisJCWxpbmUgKz0gZGlnaXRzKzE7CisJCWxlbiAtPSBkaWdpdHMrMTsKKwl9CisKKwlleCA9IHN0cmxlbihleHBlY3QpOworCWlmIChleCA+IGxlbikKKwkJcmV0dXJuIC0xOworCWlmIChtZW1jbXAobGluZSwgZXhwZWN0LCBleCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBvZmZzZXQgKyBleDsKK30KKworc3RhdGljIHZvaWQgcmVjb3VudF9kaWZmKGNvbnN0IGNoYXIgKmxpbmUsIGludCBzaXplLCBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50KQoreworCWludCBvbGRsaW5lcyA9IDAsIG5ld2xpbmVzID0gMCwgcmV0ID0gMDsKKworCWlmIChzaXplIDwgMSkgeworCQl3YXJuaW5nKCJyZWNvdW50OiBpZ25vcmUgZW1wdHkgaHVuayIpOworCQlyZXR1cm47CisJfQorCisJZm9yICg7OykgeworCQlpbnQgbGVuID0gbGluZWxlbihsaW5lLCBzaXplKTsKKwkJc2l6ZSAtPSBsZW47CisJCWxpbmUgKz0gbGVuOworCisJCWlmIChzaXplIDwgMSkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAoKmxpbmUpIHsKKwkJY2FzZSAnICc6IGNhc2UgJ1xuJzoKKwkJCW5ld2xpbmVzKys7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSAnLSc6CisJCQlvbGRsaW5lcysrOworCQkJY29udGludWU7CisJCWNhc2UgJysnOgorCQkJbmV3bGluZXMrKzsKKwkJCWNvbnRpbnVlOworCQljYXNlICdcXCc6CisJCQljb250aW51ZTsKKwkJY2FzZSAnQCc6CisJCQlyZXQgPSBzaXplIDwgMyB8fCAhc3RhcnRzX3dpdGgobGluZSwgIkBAICIpOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJcmV0ID0gc2l6ZSA8IDUgfHwgIXN0YXJ0c193aXRoKGxpbmUsICJkaWZmICIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQpIHsKKwkJCXdhcm5pbmcoXygicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIiksCisJCQkJKGludClsaW5lbGVuKGxpbmUsIHNpemUpLCBsaW5lKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwl9CisJZnJhZ21lbnQtPm9sZGxpbmVzID0gb2xkbGluZXM7CisJZnJhZ21lbnQtPm5ld2xpbmVzID0gbmV3bGluZXM7Cit9CisKKy8qCisgKiBQYXJzZSBhIHVuaWZpZWQgZGlmZiBmcmFnbWVudCBoZWFkZXIgb2YgdGhlCisgKiBmb3JtICJAQCAtYSxiICtjLGQgQEAiCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfZnJhZ21lbnRfaGVhZGVyKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQpCit7CisJaW50IG9mZnNldDsKKworCWlmICghbGVuIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCXJldHVybiAtMTsKKworCS8qIEZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiBhIGZyYWdtZW50ICovCisJb2Zmc2V0ID0gcGFyc2VfcmFuZ2UobGluZSwgbGVuLCA0LCAiICsiLCAmZnJhZ21lbnQtPm9sZHBvcywgJmZyYWdtZW50LT5vbGRsaW5lcyk7CisJb2Zmc2V0ID0gcGFyc2VfcmFuZ2UobGluZSwgbGVuLCBvZmZzZXQsICIgQEAiLCAmZnJhZ21lbnQtPm5ld3BvcywgJmZyYWdtZW50LT5uZXdsaW5lcyk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCisvKgorICogRmluZCBmaWxlIGRpZmYgaGVhZGVyCisgKgorICogUmV0dXJuczoKKyAqICAtMSBpZiBubyBoZWFkZXIgd2FzIGZvdW5kCisgKiAgLTEyOCBpbiBjYXNlIG9mIGVycm9yCisgKiAgIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgaW4gYnl0ZXMgKGNhbGxlZCAib2Zmc2V0Iikgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgZmluZF9oZWFkZXIoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCSAgICAgICBpbnQgKmhkcnNpemUsCisJCSAgICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsZW47CisKKwlwYXRjaC0+aXNfdG9wbGV2ZWxfcmVsYXRpdmUgPSAwOworCXBhdGNoLT5pc19yZW5hbWUgPSBwYXRjaC0+aXNfY29weSA9IDA7CisJcGF0Y2gtPmlzX25ldyA9IHBhdGNoLT5pc19kZWxldGUgPSAtMTsKKwlwYXRjaC0+b2xkX21vZGUgPSBwYXRjaC0+bmV3X21vZGUgPSAwOworCXBhdGNoLT5vbGRfbmFtZSA9IHBhdGNoLT5uZXdfbmFtZSA9IE5VTEw7CisJZm9yIChvZmZzZXQgPSAwOyBzaXplID4gMDsgb2Zmc2V0ICs9IGxlbiwgc2l6ZSAtPSBsZW4sIGxpbmUgKz0gbGVuLCBzdGF0ZS0+bGluZW5yKyspIHsKKwkJdW5zaWduZWQgbG9uZyBuZXh0bGVuOworCisJCWxlbiA9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisJCWlmICghbGVuKQorCQkJYnJlYWs7CisKKwkJLyogVGVzdGluZyB0aGlzIGVhcmx5IGFsbG93cyB1cyB0byB0YWtlIGEgZmV3IHNob3J0Y3V0cy4uICovCisJCWlmIChsZW4gPCA2KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHdlIGRvbid0IGZpbmQgYW55IHVuY29ubmVjdGVkIHBhdGNoIGZyYWdtZW50cy4KKwkJICogVGhhdCdzIGEgc2lnbiB0aGF0IHdlIGRpZG4ndCBmaW5kIGEgaGVhZGVyLCBhbmQgdGhhdCBhCisJCSAqIHBhdGNoIGhhcyBiZWNvbWUgY29ycnVwdGVkL2Jyb2tlbiB1cC4KKwkJICovCisJCWlmICghbWVtY21wKCJAQCAtIiwgbGluZSwgNCkpIHsKKwkJCXN0cnVjdCBmcmFnbWVudCBkdW1teTsKKwkJCWlmIChwYXJzZV9mcmFnbWVudF9oZWFkZXIobGluZSwgbGVuLCAmZHVtbXkpIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWVycm9yKF8oInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiKSwKKwkJCQkgICAgIHN0YXRlLT5saW5lbnIsIChpbnQpbGVuLTEsIGxpbmUpOworCQkJcmV0dXJuIC0xMjg7CisJCX0KKworCQlpZiAoc2l6ZSA8IGxlbiArIDYpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBHaXQgcGF0Y2g/IEl0IG1pZ2h0IG5vdCBoYXZlIGEgcmVhbCBwYXRjaCwganVzdCBhIHJlbmFtZQorCQkgKiBvciBtb2RlIGNoYW5nZSwgc28gd2UgaGFuZGxlIHRoYXQgc3BlY2lhbGx5CisJCSAqLworCQlpZiAoIW1lbWNtcCgiZGlmZiAtLWdpdCAiLCBsaW5lLCAxMSkpIHsKKwkJCWludCBnaXRfaGRyX2xlbiA9IHBhcnNlX2dpdF9kaWZmX2hlYWRlcigmc3RhdGUtPnJvb3QsICZzdGF0ZS0+bGluZW5yLAorCQkJCQkJCQlzdGF0ZS0+cF92YWx1ZSwgbGluZSwgbGVuLAorCQkJCQkJCQlzaXplLCBwYXRjaCk7CisJCQlpZiAoZ2l0X2hkcl9sZW4gPCAwKQorCQkJCXJldHVybiAtMTI4OworCQkJaWYgKGdpdF9oZHJfbGVuIDw9IGxlbikKKwkJCQljb250aW51ZTsKKwkJCSpoZHJzaXplID0gZ2l0X2hkcl9sZW47CisJCQlyZXR1cm4gb2Zmc2V0OworCQl9CisKKwkJLyogLS0tIGZvbGxvd2VkIGJ5ICsrKyA/ICovCisJCWlmIChtZW1jbXAoIi0tLSAiLCBsaW5lLCAgNCkgfHwgbWVtY21wKCIrKysgIiwgbGluZSArIGxlbiwgNCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBvbmx5IGFjY2VwdCB1bmlmaWVkIHBhdGNoZXMsIHNvIHdlIHdhbnQgaXQgdG8KKwkJICogYXQgbGVhc3QgaGF2ZSAiQEAgLWEsYiArYyxkIEBAXG4iLCB3aGljaCBpcyAxNCBjaGFycworCQkgKiBtaW5pbXVtICgiQEAgLTAsMCArMSBAQFxuIiBpcyB0aGUgc2hvcnRlc3QpLgorCQkgKi8KKwkJbmV4dGxlbiA9IGxpbmVsZW4obGluZSArIGxlbiwgc2l6ZSAtIGxlbik7CisJCWlmIChzaXplIDwgbmV4dGxlbiArIDE0IHx8IG1lbWNtcCgiQEAgLSIsIGxpbmUgKyBsZW4gKyBuZXh0bGVuLCA0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE9rLCB3ZSdsbCBjb25zaWRlciBpdCBhIHBhdGNoICovCisJCWlmIChwYXJzZV90cmFkaXRpb25hbF9wYXRjaChzdGF0ZSwgbGluZSwgbGluZStsZW4sIHBhdGNoKSkKKwkJCXJldHVybiAtMTI4OworCQkqaGRyc2l6ZSA9IGxlbiArIG5leHRsZW47CisJCXN0YXRlLT5saW5lbnIgKz0gMjsKKwkJcmV0dXJuIG9mZnNldDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfd3NfZXJyb3Ioc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICB1bnNpZ25lZCByZXN1bHQsCisJCQkgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCSAgICBpbnQgbGVuLAorCQkJICAgIGludCBsaW5lbnIpCit7CisJY2hhciAqZXJyOworCisJaWYgKCFyZXN1bHQpCisJCXJldHVybjsKKworCXN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKys7CisJaWYgKHN0YXRlLT5zcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzICYmCisJICAgIHN0YXRlLT5zcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzIDwgc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IpCisJCXJldHVybjsKKworCWVyciA9IHdoaXRlc3BhY2VfZXJyb3Jfc3RyaW5nKHJlc3VsdCk7CisJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlcy5cbiUuKnNcbiIsCisJCQlzdGF0ZS0+cGF0Y2hfaW5wdXRfZmlsZSwgbGluZW5yLCBlcnIsIGxlbiwgbGluZSk7CisJZnJlZShlcnIpOworfQorCitzdGF0aWMgdm9pZCBjaGVja193aGl0ZXNwYWNlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgIGludCBsZW4sCisJCQkgICAgIHVuc2lnbmVkIHdzX3J1bGUpCit7CisJdW5zaWduZWQgcmVzdWx0ID0gd3NfY2hlY2sobGluZSArIDEsIGxlbiAtIDEsIHdzX3J1bGUpOworCisJcmVjb3JkX3dzX2Vycm9yKHN0YXRlLCByZXN1bHQsIGxpbmUgKyAxLCBsZW4gLSAyLCBzdGF0ZS0+bGluZW5yKTsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSBwYXRjaCBoYXMgY29udGV4dCBsaW5lcyB3aXRoIENSTEYgb3IKKyAqIHRoZSBwYXRjaCB3YW50cyB0byByZW1vdmUgbGluZXMgd2l0aCBDUkxGLgorICovCitzdGF0aWMgdm9pZCBjaGVja19vbGRfZm9yX2NybGYoc3RydWN0IHBhdGNoICpwYXRjaCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlpZiAobGVuID49IDIgJiYgbGluZVtsZW4tMV0gPT0gJ1xuJyAmJiBsaW5lW2xlbi0yXSA9PSAnXHInKSB7CisJCXBhdGNoLT53c19ydWxlIHw9IFdTX0NSX0FUX0VPTDsKKwkJcGF0Y2gtPmNybGZfaW5fb2xkID0gMTsKKwl9Cit9CisKKworLyoKKyAqIFBhcnNlIGEgdW5pZmllZCBkaWZmLiBOb3RlIHRoYXQgdGhpcyByZWFsbHkgbmVlZHMgdG8gcGFyc2UgZWFjaAorICogZnJhZ21lbnQgc2VwYXJhdGVseSwgc2luY2UgdGhlIG9ubHkgd2F5IHRvIGtub3cgdGhlIGRpZmZlcmVuY2UKKyAqIGJldHdlZW4gYSAiLS0tIiB0aGF0IGlzIHBhcnQgb2YgYSBwYXRjaCwgYW5kIGEgIi0tLSIgdGhhdCBzdGFydHMKKyAqIHRoZSBuZXh0IHBhdGNoIGlzIHRvIGxvb2sgYXQgdGhlIGxpbmUgY291bnRzLi4KKyAqLworc3RhdGljIGludCBwYXJzZV9mcmFnbWVudChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICBjb25zdCBjaGFyICpsaW5lLAorCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQkgIHN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQpCit7CisJaW50IGFkZGVkLCBkZWxldGVkOworCWludCBsZW4gPSBsaW5lbGVuKGxpbmUsIHNpemUpLCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBvbGRsaW5lcywgbmV3bGluZXM7CisJdW5zaWduZWQgbG9uZyBsZWFkaW5nLCB0cmFpbGluZzsKKworCW9mZnNldCA9IHBhcnNlX2ZyYWdtZW50X2hlYWRlcihsaW5lLCBsZW4sIGZyYWdtZW50KTsKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChvZmZzZXQgPiAwICYmIHBhdGNoLT5yZWNvdW50KQorCQlyZWNvdW50X2RpZmYobGluZSArIG9mZnNldCwgc2l6ZSAtIG9mZnNldCwgZnJhZ21lbnQpOworCW9sZGxpbmVzID0gZnJhZ21lbnQtPm9sZGxpbmVzOworCW5ld2xpbmVzID0gZnJhZ21lbnQtPm5ld2xpbmVzOworCWxlYWRpbmcgPSAwOworCXRyYWlsaW5nID0gMDsKKworCS8qIFBhcnNlIHRoZSB0aGluZy4uICovCisJbGluZSArPSBsZW47CisJc2l6ZSAtPSBsZW47CisJc3RhdGUtPmxpbmVucisrOworCWFkZGVkID0gZGVsZXRlZCA9IDA7CisJZm9yIChvZmZzZXQgPSBsZW47CisJICAgICAwIDwgc2l6ZTsKKwkgICAgIG9mZnNldCArPSBsZW4sIHNpemUgLT0gbGVuLCBsaW5lICs9IGxlbiwgc3RhdGUtPmxpbmVucisrKSB7CisJCWlmICghb2xkbGluZXMgJiYgIW5ld2xpbmVzKQorCQkJYnJlYWs7CisJCWxlbiA9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisJCWlmICghbGVuIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCQlyZXR1cm4gLTE7CisJCXN3aXRjaCAoKmxpbmUpIHsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJY2FzZSAnXG4nOiAvKiBuZXdlciBHTlUgZGlmZiwgYW4gZW1wdHkgY29udGV4dCBsaW5lICovCisJCWNhc2UgJyAnOgorCQkJb2xkbGluZXMtLTsKKwkJCW5ld2xpbmVzLS07CisJCQlpZiAoIWRlbGV0ZWQgJiYgIWFkZGVkKQorCQkJCWxlYWRpbmcrKzsKKwkJCXRyYWlsaW5nKys7CisJCQljaGVja19vbGRfZm9yX2NybGYocGF0Y2gsIGxpbmUsIGxlbik7CisJCQlpZiAoIXN0YXRlLT5hcHBseV9pbl9yZXZlcnNlICYmCisJCQkgICAgc3RhdGUtPndzX2Vycm9yX2FjdGlvbiA9PSBjb3JyZWN0X3dzX2Vycm9yKQorCQkJCWNoZWNrX3doaXRlc3BhY2Uoc3RhdGUsIGxpbmUsIGxlbiwgcGF0Y2gtPndzX3J1bGUpOworCQkJYnJlYWs7CisJCWNhc2UgJy0nOgorCQkJaWYgKCFzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSkKKwkJCQljaGVja19vbGRfZm9yX2NybGYocGF0Y2gsIGxpbmUsIGxlbik7CisJCQlpZiAoc3RhdGUtPmFwcGx5X2luX3JldmVyc2UgJiYKKwkJCSAgICBzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uICE9IG5vd2Fybl93c19lcnJvcikKKwkJCQljaGVja193aGl0ZXNwYWNlKHN0YXRlLCBsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWRlbGV0ZWQrKzsKKwkJCW9sZGxpbmVzLS07CisJCQl0cmFpbGluZyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnKyc6CisJCQlpZiAoc3RhdGUtPmFwcGx5X2luX3JldmVyc2UpCisJCQkJY2hlY2tfb2xkX2Zvcl9jcmxmKHBhdGNoLCBsaW5lLCBsZW4pOworCQkJaWYgKCFzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSAmJgorCQkJICAgIHN0YXRlLT53c19lcnJvcl9hY3Rpb24gIT0gbm93YXJuX3dzX2Vycm9yKQorCQkJCWNoZWNrX3doaXRlc3BhY2Uoc3RhdGUsIGxpbmUsIGxlbiwgcGF0Y2gtPndzX3J1bGUpOworCQkJYWRkZWQrKzsKKwkJCW5ld2xpbmVzLS07CisJCQl0cmFpbGluZyA9IDA7CisJCQlicmVhazsKKworCQkvKgorCQkgKiBXZSBhbGxvdyAiXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIi4gRGVwZW5kaW5nCisJCSAqIG9uIGxvY2FsZSBzZXR0aW5ncyB3aGVuIHRoZSBwYXRjaCB3YXMgcHJvZHVjZWQgd2UKKwkJICogZG9uJ3Qga25vdyB3aGF0IHRoaXMgbGluZSBsb29rcyBsaWtlLiBUaGUgb25seQorCQkgKiB0aGluZyB3ZSBkbyBrbm93IGlzIHRoYXQgaXQgYmVnaW5zIHdpdGggIlwgIi4KKwkJICogQ2hlY2tpbmcgZm9yIDEyIGlzIGp1c3QgZm9yIHNhbml0eSBjaGVjayAtLSBhbnkKKwkJICogbDEwbiBvZiAiXCBObyBuZXdsaW5lLi4uIiBpcyBhdCBsZWFzdCB0aGF0IGxvbmcuCisJCSAqLworCQljYXNlICdcXCc6CisJCQlpZiAobGVuIDwgMTIgfHwgbWVtY21wKGxpbmUsICJcXCAiLCAyKSkKKwkJCQlyZXR1cm4gLTE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAob2xkbGluZXMgfHwgbmV3bGluZXMpCisJCXJldHVybiAtMTsKKwlpZiAoIXBhdGNoLT5yZWNvdW50ICYmICFkZWxldGVkICYmICFhZGRlZCkKKwkJcmV0dXJuIC0xOworCisJZnJhZ21lbnQtPmxlYWRpbmcgPSBsZWFkaW5nOworCWZyYWdtZW50LT50cmFpbGluZyA9IHRyYWlsaW5nOworCisJLyoKKwkgKiBJZiBhIGZyYWdtZW50IGVuZHMgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUsIHdlIGZhaWxlZCB0byBpbmNsdWRlCisJICogaXQgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoaXQgb2xkbGluZXMgPT0gbmV3bGluZXMgPT0gMAorCSAqIGJlZm9yZSBzZWVpbmcgaXQuCisJICovCisJaWYgKDEyIDwgc2l6ZSAmJiAhbWVtY21wKGxpbmUsICJcXCAiLCAyKSkKKwkJb2Zmc2V0ICs9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisKKwlwYXRjaC0+bGluZXNfYWRkZWQgKz0gYWRkZWQ7CisJcGF0Y2gtPmxpbmVzX2RlbGV0ZWQgKz0gZGVsZXRlZDsKKworCWlmICgwIDwgcGF0Y2gtPmlzX25ldyAmJiBvbGRsaW5lcykKKwkJcmV0dXJuIGVycm9yKF8oIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIikpOworCWlmICgwIDwgcGF0Y2gtPmlzX2RlbGV0ZSAmJiBuZXdsaW5lcykKKwkJcmV0dXJuIGVycm9yKF8oImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiKSk7CisJcmV0dXJuIG9mZnNldDsKK30KKworLyoKKyAqIFdlIGhhdmUgc2VlbiAiZGlmZiAtLWdpdCBhLy4uLiBiLy4uLiIgaGVhZGVyIChvciBhIHRyYWRpdGlvbmFsIHBhdGNoCisgKiBoZWFkZXIpLiAgUmVhZCBodW5rcyB0aGF0IGJlbG9uZyB0byB0aGlzIHBhdGNoIGludG8gZnJhZ21lbnRzIGFuZCBoYW5nCisgKiB0aGVtIHRvIHRoZSBnaXZlbiBwYXRjaCBzdHJ1Y3R1cmUuCisgKgorICogVGhlIChmcmFnbWVudC0+cGF0Y2gsIGZyYWdtZW50LT5zaXplKSBwYWlyIHBvaW50cyBpbnRvIHRoZSBtZW1vcnkgZ2l2ZW4KKyAqIGJ5IHRoZSBjYWxsZXIsIG5vdCBhIGNvcHksIHdoZW4gd2UgcmV0dXJuLgorICoKKyAqIFJldHVybnM6CisgKiAgIC0xIGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHBhdGNoIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBwYXJzZV9zaW5nbGVfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIG9sZGxpbmVzID0gMCwgbmV3bGluZXMgPSAwLCBjb250ZXh0ID0gMDsKKwlzdHJ1Y3QgZnJhZ21lbnQgKipmcmFncCA9ICZwYXRjaC0+ZnJhZ21lbnRzOworCisJd2hpbGUgKHNpemUgPiA0ICYmICFtZW1jbXAobGluZSwgIkBAIC0iLCA0KSkgeworCQlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50OworCQlpbnQgbGVuOworCisJCWZyYWdtZW50ID0geGNhbGxvYygxLCBzaXplb2YoKmZyYWdtZW50KSk7CisJCWZyYWdtZW50LT5saW5lbnIgPSBzdGF0ZS0+bGluZW5yOworCQlsZW4gPSBwYXJzZV9mcmFnbWVudChzdGF0ZSwgbGluZSwgc2l6ZSwgcGF0Y2gsIGZyYWdtZW50KTsKKwkJaWYgKGxlbiA8PSAwKSB7CisJCQlmcmVlKGZyYWdtZW50KTsKKwkJCXJldHVybiBlcnJvcihfKCJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiKSwgc3RhdGUtPmxpbmVucik7CisJCX0KKwkJZnJhZ21lbnQtPnBhdGNoID0gbGluZTsKKwkJZnJhZ21lbnQtPnNpemUgPSBsZW47CisJCW9sZGxpbmVzICs9IGZyYWdtZW50LT5vbGRsaW5lczsKKwkJbmV3bGluZXMgKz0gZnJhZ21lbnQtPm5ld2xpbmVzOworCQljb250ZXh0ICs9IGZyYWdtZW50LT5sZWFkaW5nICsgZnJhZ21lbnQtPnRyYWlsaW5nOworCisJCSpmcmFncCA9IGZyYWdtZW50OworCQlmcmFncCA9ICZmcmFnbWVudC0+bmV4dDsKKworCQlvZmZzZXQgKz0gbGVuOworCQlsaW5lICs9IGxlbjsKKwkJc2l6ZSAtPSBsZW47CisJfQorCisJLyoKKwkgKiBJZiBzb21ldGhpbmcgd2FzIHJlbW92ZWQgKGkuZS4gd2UgaGF2ZSBvbGQtbGluZXMpIGl0IGNhbm5vdAorCSAqIGJlIGNyZWF0aW9uLCBhbmQgaWYgc29tZXRoaW5nIHdhcyBhZGRlZCBpdCBjYW5ub3QgYmUKKwkgKiBkZWxldGlvbi4gIEhvd2V2ZXIsIHRoZSByZXZlcnNlIGlzIG5vdCB0cnVlOyAtLXVuaWZpZWQ9MAorCSAqIHBhdGNoZXMgdGhhdCBvbmx5IGFkZCBhcmUgbm90IG5lY2Vzc2FyaWx5IGNyZWF0aW9uIGV2ZW4KKwkgKiB0aG91Z2ggdGhleSBkbyBub3QgaGF2ZSBhbnkgb2xkIGxpbmVzLCBhbmQgb25lcyB0aGF0IG9ubHkKKwkgKiBkZWxldGUgYXJlIG5vdCBuZWNlc3NhcmlseSBkZWxldGlvbi4KKwkgKgorCSAqIFVuZm9ydHVuYXRlbHksIGEgcmVhbCBjcmVhdGlvbi9kZWxldGlvbiBwYXRjaCBkbyBfbm90XyBoYXZlCisJICogYW55IGNvbnRleHQgbGluZSBieSBkZWZpbml0aW9uLCBzbyB3ZSBjYW5ub3Qgc2FmZWx5IHRlbGwgaXQKKwkgKiBhcGFydCB3aXRoIC0tdW5pZmllZD0wIGluc2FuaXR5LiAgQXQgbGVhc3QgaWYgdGhlIHBhdGNoIGhhcworCSAqIG1vcmUgdGhhbiBvbmUgaHVuayBpdCBpcyBub3QgY3JlYXRpb24gb3IgZGVsZXRpb24uCisJICovCisJaWYgKHBhdGNoLT5pc19uZXcgPCAwICYmCisJICAgIChvbGRsaW5lcyB8fCAocGF0Y2gtPmZyYWdtZW50cyAmJiBwYXRjaC0+ZnJhZ21lbnRzLT5uZXh0KSkpCisJCXBhdGNoLT5pc19uZXcgPSAwOworCWlmIChwYXRjaC0+aXNfZGVsZXRlIDwgMCAmJgorCSAgICAobmV3bGluZXMgfHwgKHBhdGNoLT5mcmFnbWVudHMgJiYgcGF0Y2gtPmZyYWdtZW50cy0+bmV4dCkpKQorCQlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKworCWlmICgwIDwgcGF0Y2gtPmlzX25ldyAmJiBvbGRsaW5lcykKKwkJcmV0dXJuIGVycm9yKF8oIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIiksIHBhdGNoLT5uZXdfbmFtZSk7CisJaWYgKDAgPCBwYXRjaC0+aXNfZGVsZXRlICYmIG5ld2xpbmVzKQorCQlyZXR1cm4gZXJyb3IoXygiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIpLCBwYXRjaC0+b2xkX25hbWUpOworCWlmICghcGF0Y2gtPmlzX2RlbGV0ZSAmJiAhbmV3bGluZXMgJiYgY29udGV4dCAmJiBzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBfKCIqKiB3YXJuaW5nOiAiCisJCQkgICAgICJmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIiksCisJCQkgICBwYXRjaC0+bmV3X25hbWUpOworCisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWV0YWRhdGFfY2hhbmdlcyhzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybglwYXRjaC0+aXNfcmVuYW1lID4gMCB8fAorCQlwYXRjaC0+aXNfY29weSA+IDAgfHwKKwkJcGF0Y2gtPmlzX25ldyA+IDAgfHwKKwkJcGF0Y2gtPmlzX2RlbGV0ZSB8fAorCQkocGF0Y2gtPm9sZF9tb2RlICYmIHBhdGNoLT5uZXdfbW9kZSAmJgorCQkgcGF0Y2gtPm9sZF9tb2RlICE9IHBhdGNoLT5uZXdfbW9kZSk7Cit9CisKK3N0YXRpYyBjaGFyICppbmZsYXRlX2l0KGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCXVuc2lnbmVkIGxvbmcgaW5mbGF0ZWRfc2l6ZSkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdm9pZCAqb3V0OworCWludCBzdDsKKworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisKKwlzdHJlYW0ubmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsKKwlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCXN0cmVhbS5uZXh0X291dCA9IG91dCA9IHhtYWxsb2MoaW5mbGF0ZWRfc2l6ZSk7CisJc3RyZWFtLmF2YWlsX291dCA9IGluZmxhdGVkX3NpemU7CisJZ2l0X2luZmxhdGVfaW5pdCgmc3RyZWFtKTsKKwlzdCA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJaWYgKChzdCAhPSBaX1NUUkVBTV9FTkQpIHx8IHN0cmVhbS50b3RhbF9vdXQgIT0gaW5mbGF0ZWRfc2l6ZSkgeworCQlmcmVlKG91dCk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gb3V0OworfQorCisvKgorICogUmVhZCBhIGJpbmFyeSBodW5rIGFuZCByZXR1cm4gYSBuZXcgZnJhZ21lbnQ7IGZyYWdtZW50LT5wYXRjaAorICogcG9pbnRzIGF0IGFuIGFsbG9jYXRlZCBtZW1vcnkgdGhhdCB0aGUgY2FsbGVyIG11c3QgZnJlZSwgc28KKyAqIGl0IGlzIG1hcmtlZCBhcyAiLT5mcmVlX3BhdGNoID0gMSIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnJhZ21lbnQgKnBhcnNlX2JpbmFyeV9odW5rKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJCSAgY2hhciAqKmJ1Zl9wLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgKnN6X3AsCisJCQkJCSAgaW50ICpzdGF0dXNfcCwKKwkJCQkJICBpbnQgKnVzZWRfcCkKK3sKKwkvKgorCSAqIEV4cGVjdCBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBiaW5hcnkgcGF0Y2ggbWV0aG9kICgibGl0ZXJhbCIKKwkgKiBvciAiZGVsdGEiKSwgZm9sbG93ZWQgYnkgdGhlIGxlbmd0aCBvZiBkYXRhIGJlZm9yZSBkZWZsYXRpbmcuCisJICogYSBzZXF1ZW5jZSBvZiAnbGVuZ3RoLWJ5dGUnIGZvbGxvd2VkIGJ5IGJhc2UtODUgZW5jb2RlZCBkYXRhCisJICogc2hvdWxkIGZvbGxvdywgdGVybWluYXRlZCBieSBhIG5ld2xpbmUuCisJICoKKwkgKiBFYWNoIDUtYnl0ZSBzZXF1ZW5jZSBvZiBiYXNlLTg1IGVuY29kZXMgdXAgdG8gNCBieXRlcywKKwkgKiBhbmQgd2Ugd291bGQgbGltaXQgdGhlIHBhdGNoIGxpbmUgdG8gNjYgY2hhcmFjdGVycywKKwkgKiBzbyBvbmUgbGluZSBjYW4gZml0IHVwIHRvIDEzIGdyb3VwcyB0aGF0IHdvdWxkIGRlY29kZQorCSAqIHRvIDUyIGJ5dGVzIG1heC4gIFRoZSBsZW5ndGggYnl0ZSAnQSctJ1onIGNvcnJlc3BvbmRzCisJICogdG8gMS0yNiBieXRlcywgYW5kICdhJy0neicgY29ycmVzcG9uZHMgdG8gMjctNTIgYnl0ZXMuCisJICovCisJaW50IGxsZW4sIHVzZWQ7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKnN6X3A7CisJY2hhciAqYnVmZmVyID0gKmJ1Zl9wOworCWludCBwYXRjaF9tZXRob2Q7CisJdW5zaWduZWQgbG9uZyBvcmlnbGVuOworCWNoYXIgKmRhdGEgPSBOVUxMOworCWludCBodW5rX3NpemUgPSAwOworCXN0cnVjdCBmcmFnbWVudCAqZnJhZzsKKworCWxsZW4gPSBsaW5lbGVuKGJ1ZmZlciwgc2l6ZSk7CisJdXNlZCA9IGxsZW47CisKKwkqc3RhdHVzX3AgPSAwOworCisJaWYgKHN0YXJ0c193aXRoKGJ1ZmZlciwgImRlbHRhICIpKSB7CisJCXBhdGNoX21ldGhvZCA9IEJJTkFSWV9ERUxUQV9ERUZMQVRFRDsKKwkJb3JpZ2xlbiA9IHN0cnRvdWwoYnVmZmVyICsgNiwgTlVMTCwgMTApOworCX0KKwllbHNlIGlmIChzdGFydHNfd2l0aChidWZmZXIsICJsaXRlcmFsICIpKSB7CisJCXBhdGNoX21ldGhvZCA9IEJJTkFSWV9MSVRFUkFMX0RFRkxBVEVEOworCQlvcmlnbGVuID0gc3RydG91bChidWZmZXIgKyA4LCBOVUxMLCAxMCk7CisJfQorCWVsc2UKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZS0+bGluZW5yKys7CisJYnVmZmVyICs9IGxsZW47CisJd2hpbGUgKDEpIHsKKwkJaW50IGJ5dGVfbGVuZ3RoLCBtYXhfYnl0ZV9sZW5ndGgsIG5ld3NpemU7CisJCWxsZW4gPSBsaW5lbGVuKGJ1ZmZlciwgc2l6ZSk7CisJCXVzZWQgKz0gbGxlbjsKKwkJc3RhdGUtPmxpbmVucisrOworCQlpZiAobGxlbiA9PSAxKSB7CisJCQkvKiBjb25zdW1lIHRoZSBibGFuayBsaW5lICovCisJCQlidWZmZXIrKzsKKwkJCXNpemUtLTsKKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIE1pbmltdW0gbGluZSBpcyAiQTAwMDAwXG4iIHdoaWNoIGlzIDctYnl0ZSBsb25nLAorCQkgKiBhbmQgdGhlIGxpbmUgbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgNSBwbHVzIDIuCisJCSAqLworCQlpZiAoKGxsZW4gPCA3KSB8fCAobGxlbi0yKSAlIDUpCisJCQlnb3RvIGNvcnJ1cHQ7CisJCW1heF9ieXRlX2xlbmd0aCA9IChsbGVuIC0gMikgLyA1ICogNDsKKwkJYnl0ZV9sZW5ndGggPSAqYnVmZmVyOworCQlpZiAoJ0EnIDw9IGJ5dGVfbGVuZ3RoICYmIGJ5dGVfbGVuZ3RoIDw9ICdaJykKKwkJCWJ5dGVfbGVuZ3RoID0gYnl0ZV9sZW5ndGggLSAnQScgKyAxOworCQllbHNlIGlmICgnYScgPD0gYnl0ZV9sZW5ndGggJiYgYnl0ZV9sZW5ndGggPD0gJ3onKQorCQkJYnl0ZV9sZW5ndGggPSBieXRlX2xlbmd0aCAtICdhJyArIDI3OworCQllbHNlCisJCQlnb3RvIGNvcnJ1cHQ7CisJCS8qIGlmIHRoZSBpbnB1dCBsZW5ndGggd2FzIG5vdCBtdWx0aXBsZSBvZiA0LCB3ZSB3b3VsZAorCQkgKiBoYXZlIGZpbGxlciBhdCB0aGUgZW5kIGJ1dCB0aGUgZmlsbGVyIHNob3VsZCBuZXZlcgorCQkgKiBleGNlZWQgMyBieXRlcworCQkgKi8KKwkJaWYgKG1heF9ieXRlX2xlbmd0aCA8IGJ5dGVfbGVuZ3RoIHx8CisJCSAgICBieXRlX2xlbmd0aCA8PSBtYXhfYnl0ZV9sZW5ndGggLSA0KQorCQkJZ290byBjb3JydXB0OworCQluZXdzaXplID0gaHVua19zaXplICsgYnl0ZV9sZW5ndGg7CisJCWRhdGEgPSB4cmVhbGxvYyhkYXRhLCBuZXdzaXplKTsKKwkJaWYgKGRlY29kZV84NShkYXRhICsgaHVua19zaXplLCBidWZmZXIgKyAxLCBieXRlX2xlbmd0aCkpCisJCQlnb3RvIGNvcnJ1cHQ7CisJCWh1bmtfc2l6ZSA9IG5ld3NpemU7CisJCWJ1ZmZlciArPSBsbGVuOworCQlzaXplIC09IGxsZW47CisJfQorCisJZnJhZyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpmcmFnKSk7CisJZnJhZy0+cGF0Y2ggPSBpbmZsYXRlX2l0KGRhdGEsIGh1bmtfc2l6ZSwgb3JpZ2xlbik7CisJZnJhZy0+ZnJlZV9wYXRjaCA9IDE7CisJaWYgKCFmcmFnLT5wYXRjaCkKKwkJZ290byBjb3JydXB0OworCWZyZWUoZGF0YSk7CisJZnJhZy0+c2l6ZSA9IG9yaWdsZW47CisJKmJ1Zl9wID0gYnVmZmVyOworCSpzel9wID0gc2l6ZTsKKwkqdXNlZF9wID0gdXNlZDsKKwlmcmFnLT5iaW5hcnlfcGF0Y2hfbWV0aG9kID0gcGF0Y2hfbWV0aG9kOworCXJldHVybiBmcmFnOworCisgY29ycnVwdDoKKwlmcmVlKGRhdGEpOworCSpzdGF0dXNfcCA9IC0xOworCWVycm9yKF8oImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiKSwKKwkgICAgICBzdGF0ZS0+bGluZW5yLTEsIGxsZW4tMSwgYnVmZmVyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybnM6CisgKiAgIC0xIGluIGNhc2Ugb2YgZXJyb3IsCisgKiAgIHRoZSBsZW5ndGggb2YgdGhlIHBhcnNlZCBiaW5hcnkgcGF0Y2ggb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfYmluYXJ5KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQljaGFyICpidWZmZXIsCisJCQl1bnNpZ25lZCBsb25nIHNpemUsCisJCQlzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCS8qCisJICogV2UgaGF2ZSByZWFkICJHSVQgYmluYXJ5IHBhdGNoXG4iOyB3aGF0IGZvbGxvd3MgaXMgYSBsaW5lCisJICogdGhhdCBzYXlzIHRoZSBwYXRjaCBtZXRob2QgKGN1cnJlbnRseSwgZWl0aGVyICJsaXRlcmFsIiBvcgorCSAqICJkZWx0YSIpIGFuZCB0aGUgbGVuZ3RoIG9mIGRhdGEgYmVmb3JlIGRlZmxhdGluZzsgYQorCSAqIHNlcXVlbmNlIG9mICdsZW5ndGgtYnl0ZScgZm9sbG93ZWQgYnkgYmFzZS04NSBlbmNvZGVkIGRhdGEKKwkgKiBmb2xsb3dzLgorCSAqCisJICogV2hlbiBhIGJpbmFyeSBwYXRjaCBpcyByZXZlcnNpYmxlLCB0aGVyZSBpcyBhbm90aGVyIGJpbmFyeQorCSAqIGh1bmsgaW4gdGhlIHNhbWUgZm9ybWF0LCBzdGFydGluZyB3aXRoIHBhdGNoIG1ldGhvZCAoZWl0aGVyCisJICogImxpdGVyYWwiIG9yICJkZWx0YSIpIHdpdGggdGhlIGxlbmd0aCBvZiBkYXRhLCBhbmQgYSBzZXF1ZW5jZQorCSAqIG9mIGxlbmd0aC1ieXRlICsgYmFzZS04NSBlbmNvZGVkIGRhdGEsIHRlcm1pbmF0ZWQgd2l0aCBhbm90aGVyCisJICogZW1wdHkgbGluZS4gIFRoaXMgZGF0YSwgd2hlbiBhcHBsaWVkIHRvIHRoZSBwb3N0aW1hZ2UsIHByb2R1Y2VzCisJICogdGhlIHByZWltYWdlLgorCSAqLworCXN0cnVjdCBmcmFnbWVudCAqZm9yd2FyZDsKKwlzdHJ1Y3QgZnJhZ21lbnQgKnJldmVyc2U7CisJaW50IHN0YXR1czsKKwlpbnQgdXNlZCwgdXNlZF8xOworCisJZm9yd2FyZCA9IHBhcnNlX2JpbmFyeV9odW5rKHN0YXRlLCAmYnVmZmVyLCAmc2l6ZSwgJnN0YXR1cywgJnVzZWQpOworCWlmICghZm9yd2FyZCAmJiAhc3RhdHVzKQorCQkvKiB0aGVyZSBoYXMgdG8gYmUgb25lIGh1bmsgKGZvcndhcmQgaHVuaykgKi8KKwkJcmV0dXJuIGVycm9yKF8oInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yLTEpOworCWlmIChzdGF0dXMpCisJCS8qIG90aGVyd2lzZSB3ZSBhbHJlYWR5IGdhdmUgYW4gZXJyb3IgbWVzc2FnZSAqLworCQlyZXR1cm4gc3RhdHVzOworCisJcmV2ZXJzZSA9IHBhcnNlX2JpbmFyeV9odW5rKHN0YXRlLCAmYnVmZmVyLCAmc2l6ZSwgJnN0YXR1cywgJnVzZWRfMSk7CisJaWYgKHJldmVyc2UpCisJCXVzZWQgKz0gdXNlZF8xOworCWVsc2UgaWYgKHN0YXR1cykgeworCQkvKgorCQkgKiBOb3QgaGF2aW5nIHJldmVyc2UgaHVuayBpcyBub3QgYW4gZXJyb3IsIGJ1dCBoYXZpbmcKKwkJICogYSBjb3JydXB0IHJldmVyc2UgaHVuayBpcy4KKwkJICovCisJCWZyZWUoKHZvaWQqKSBmb3J3YXJkLT5wYXRjaCk7CisJCWZyZWUoZm9yd2FyZCk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCWZvcndhcmQtPm5leHQgPSByZXZlcnNlOworCXBhdGNoLT5mcmFnbWVudHMgPSBmb3J3YXJkOworCXBhdGNoLT5pc19iaW5hcnkgPSAxOworCXJldHVybiB1c2VkOworfQorCitzdGF0aWMgdm9pZCBwcmVmaXhfb25lKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNoYXIgKipuYW1lKQoreworCWNoYXIgKm9sZF9uYW1lID0gKm5hbWU7CisJaWYgKCFvbGRfbmFtZSkKKwkJcmV0dXJuOworCSpuYW1lID0gcHJlZml4X2ZpbGVuYW1lKHN0YXRlLT5wcmVmaXgsICpuYW1lKTsKKwlmcmVlKG9sZF9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgcHJlZml4X3BhdGNoKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcCkKK3sKKwlpZiAoIXN0YXRlLT5wcmVmaXggfHwgcC0+aXNfdG9wbGV2ZWxfcmVsYXRpdmUpCisJCXJldHVybjsKKwlwcmVmaXhfb25lKHN0YXRlLCAmcC0+bmV3X25hbWUpOworCXByZWZpeF9vbmUoc3RhdGUsICZwLT5vbGRfbmFtZSk7Cit9CisKKy8qCisgKiBpbmNsdWRlL2V4Y2x1ZGUKKyAqLworCitzdGF0aWMgdm9pZCBhZGRfbmFtZV9saW1pdChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgIGludCBleGNsdWRlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKworCWl0ID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZS0+bGltaXRfYnlfbmFtZSwgbmFtZSk7CisJaXQtPnV0aWwgPSBleGNsdWRlID8gTlVMTCA6ICh2b2lkICopIDE7Cit9CisKK3N0YXRpYyBpbnQgdXNlX3BhdGNoKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcCkKK3sKKwljb25zdCBjaGFyICpwYXRobmFtZSA9IHAtPm5ld19uYW1lID8gcC0+bmV3X25hbWUgOiBwLT5vbGRfbmFtZTsKKwlpbnQgaTsKKworCS8qIFBhdGhzIG91dHNpZGUgYXJlIG5vdCB0b3VjaGVkIHJlZ2FyZGxlc3Mgb2YgIi0taW5jbHVkZSIgKi8KKwlpZiAoc3RhdGUtPnByZWZpeCAmJiAqc3RhdGUtPnByZWZpeCkgeworCQljb25zdCBjaGFyICpyZXN0OworCQlpZiAoIXNraXBfcHJlZml4KHBhdGhuYW1lLCBzdGF0ZS0+cHJlZml4LCAmcmVzdCkgfHwgISpyZXN0KQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogU2VlIGlmIGl0IG1hdGNoZXMgYW55IG9mIGV4Y2x1ZGUvaW5jbHVkZSBydWxlICovCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5saW1pdF9ieV9uYW1lLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ID0gJnN0YXRlLT5saW1pdF9ieV9uYW1lLml0ZW1zW2ldOworCQlpZiAoIXdpbGRtYXRjaChpdC0+c3RyaW5nLCBwYXRobmFtZSwgMCkpCisJCQlyZXR1cm4gKGl0LT51dGlsICE9IE5VTEwpOworCX0KKworCS8qCisJICogSWYgd2UgaGFkIGFueSBpbmNsdWRlLCBhIHBhdGggdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnkgcnVsZSBpcworCSAqIG5vdCB1c2VkLiAgT3RoZXJ3aXNlLCB3ZSBzYXcgYnVuY2ggb2YgZXhjbHVkZSBydWxlcyAob3Igbm9uZSkKKwkgKiBhbmQgc3VjaCBhIHBhdGggaXMgdXNlZC4KKwkgKi8KKwlyZXR1cm4gIXN0YXRlLT5oYXNfaW5jbHVkZTsKK30KKworLyoKKyAqIFJlYWQgdGhlIHBhdGNoIHRleHQgaW4gImJ1ZmZlciIgdGhhdCBleHRlbmRzIGZvciAic2l6ZSIgYnl0ZXM7IHN0b3AKKyAqIHJlYWRpbmcgYWZ0ZXIgc2VlaW5nIGEgc2luZ2xlIHBhdGNoIChpLmUuIGNoYW5nZXMgdG8gYSBzaW5nbGUgZmlsZSkuCisgKiBDcmVhdGUgZnJhZ21lbnRzIChpLmUuIHBhdGNoIGh1bmtzKSBhbmQgaGFuZyB0aGVtIHRvIHRoZSBnaXZlbiBwYXRjaC4KKyAqCisgKiBSZXR1cm5zOgorICogICAtMSBpZiBubyBoZWFkZXIgd2FzIGZvdW5kIG9yIHBhcnNlX2JpbmFyeSgpIGZhaWxlZCwKKyAqICAgLTEyOCBvbiBhbm90aGVyIGVycm9yLAorICogICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIG90aGVyd2lzZSwKKyAqICAgICBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGNhbGwgdXMgYWdhaW4gZm9yIHRoZSBuZXh0IHBhdGNoLgorICovCitzdGF0aWMgaW50IHBhcnNlX2NodW5rKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWludCBoZHJzaXplLCBwYXRjaHNpemU7CisJaW50IG9mZnNldCA9IGZpbmRfaGVhZGVyKHN0YXRlLCBidWZmZXIsIHNpemUsICZoZHJzaXplLCBwYXRjaCk7CisKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuIG9mZnNldDsKKworCXByZWZpeF9wYXRjaChzdGF0ZSwgcGF0Y2gpOworCisJaWYgKCF1c2VfcGF0Y2goc3RhdGUsIHBhdGNoKSkKKwkJcGF0Y2gtPndzX3J1bGUgPSAwOworCWVsc2UgaWYgKHBhdGNoLT5uZXdfbmFtZSkKKwkJcGF0Y2gtPndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUoc3RhdGUtPnJlcG8tPmluZGV4LAorCQkJCQkJIHBhdGNoLT5uZXdfbmFtZSk7CisJZWxzZQorCQlwYXRjaC0+d3NfcnVsZSA9IHdoaXRlc3BhY2VfcnVsZShzdGF0ZS0+cmVwby0+aW5kZXgsCisJCQkJCQkgcGF0Y2gtPm9sZF9uYW1lKTsKKworCXBhdGNoc2l6ZSA9IHBhcnNlX3NpbmdsZV9wYXRjaChzdGF0ZSwKKwkJCQkgICAgICAgYnVmZmVyICsgb2Zmc2V0ICsgaGRyc2l6ZSwKKwkJCQkgICAgICAgc2l6ZSAtIG9mZnNldCAtIGhkcnNpemUsCisJCQkJICAgICAgIHBhdGNoKTsKKworCWlmIChwYXRjaHNpemUgPCAwKQorCQlyZXR1cm4gLTEyODsKKworCWlmICghcGF0Y2hzaXplKSB7CisJCXN0YXRpYyBjb25zdCBjaGFyIGdpdF9iaW5hcnlbXSA9ICJHSVQgYmluYXJ5IHBhdGNoXG4iOworCQlpbnQgaGQgPSBoZHJzaXplICsgb2Zmc2V0OworCQl1bnNpZ25lZCBsb25nIGxsZW4gPSBsaW5lbGVuKGJ1ZmZlciArIGhkLCBzaXplIC0gaGQpOworCisJCWlmIChsbGVuID09IHNpemVvZihnaXRfYmluYXJ5KSAtIDEgJiYKKwkJICAgICFtZW1jbXAoZ2l0X2JpbmFyeSwgYnVmZmVyICsgaGQsIGxsZW4pKSB7CisJCQlpbnQgdXNlZDsKKwkJCXN0YXRlLT5saW5lbnIrKzsKKwkJCXVzZWQgPSBwYXJzZV9iaW5hcnkoc3RhdGUsIGJ1ZmZlciArIGhkICsgbGxlbiwKKwkJCQkJICAgIHNpemUgLSBoZCAtIGxsZW4sIHBhdGNoKTsKKwkJCWlmICh1c2VkIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAodXNlZCkKKwkJCQlwYXRjaHNpemUgPSB1c2VkICsgbGxlbjsKKwkJCWVsc2UKKwkJCQlwYXRjaHNpemUgPSAwOworCQl9CisJCWVsc2UgaWYgKCFtZW1jbXAoIiBkaWZmZXJcbiIsIGJ1ZmZlciArIGhkICsgbGxlbiAtIDgsIDgpKSB7CisJCQlzdGF0aWMgY29uc3QgY2hhciAqYmluaGRyW10gPSB7CisJCQkJIkJpbmFyeSBmaWxlcyAiLAorCQkJCSJGaWxlcyAiLAorCQkJCU5VTEwsCisJCQl9OworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBiaW5oZHJbaV07IGkrKykgeworCQkJCWludCBsZW4gPSBzdHJsZW4oYmluaGRyW2ldKTsKKwkJCQlpZiAobGVuIDwgc2l6ZSAtIGhkICYmCisJCQkJICAgICFtZW1jbXAoYmluaGRyW2ldLCBidWZmZXIgKyBoZCwgbGVuKSkgeworCQkJCQlzdGF0ZS0+bGluZW5yKys7CisJCQkJCXBhdGNoLT5pc19iaW5hcnkgPSAxOworCQkJCQlwYXRjaHNpemUgPSBsbGVuOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBFbXB0eSBwYXRjaCBjYW5ub3QgYmUgYXBwbGllZCBpZiBpdCBpcyBhIHRleHQgcGF0Y2gKKwkJICogd2l0aG91dCBtZXRhZGF0YSBjaGFuZ2UuICBBIGJpbmFyeSBwYXRjaCBhcHBlYXJzCisJCSAqIGVtcHR5IHRvIHVzIGhlcmUuCisJCSAqLworCQlpZiAoKHN0YXRlLT5hcHBseSB8fCBzdGF0ZS0+Y2hlY2spICYmCisJCSAgICAoIXBhdGNoLT5pc19iaW5hcnkgJiYgIW1ldGFkYXRhX2NoYW5nZXMocGF0Y2gpKSkgeworCQkJZXJyb3IoXygicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIpLCBzdGF0ZS0+bGluZW5yKTsKKwkJCXJldHVybiAtMTI4OworCQl9CisJfQorCisJcmV0dXJuIG9mZnNldCArIGhkcnNpemUgKyBwYXRjaHNpemU7Cit9CisKK3N0YXRpYyB2b2lkIHJldmVyc2VfcGF0Y2hlcyhzdHJ1Y3QgcGF0Y2ggKnApCit7CisJZm9yICg7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBmcmFnbWVudCAqZnJhZyA9IHAtPmZyYWdtZW50czsKKworCQlTV0FQKHAtPm5ld19uYW1lLCBwLT5vbGRfbmFtZSk7CisJCVNXQVAocC0+bmV3X21vZGUsIHAtPm9sZF9tb2RlKTsKKwkJU1dBUChwLT5pc19uZXcsIHAtPmlzX2RlbGV0ZSk7CisJCVNXQVAocC0+bGluZXNfYWRkZWQsIHAtPmxpbmVzX2RlbGV0ZWQpOworCQlTV0FQKHAtPm9sZF9vaWRfcHJlZml4LCBwLT5uZXdfb2lkX3ByZWZpeCk7CisKKwkJZm9yICg7IGZyYWc7IGZyYWcgPSBmcmFnLT5uZXh0KSB7CisJCQlTV0FQKGZyYWctPm5ld3BvcywgZnJhZy0+b2xkcG9zKTsKKwkJCVNXQVAoZnJhZy0+bmV3bGluZXMsIGZyYWctPm9sZGxpbmVzKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgcGx1c2VzW10gPQorIisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiOworc3RhdGljIGNvbnN0IGNoYXIgbWludXNlc1tdPQorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iOworCitzdGF0aWMgdm9pZCBzaG93X3N0YXRzKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IHN0cmJ1ZiBxbmFtZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKmNwID0gcGF0Y2gtPm5ld19uYW1lID8gcGF0Y2gtPm5ld19uYW1lIDogcGF0Y2gtPm9sZF9uYW1lOworCWludCBtYXgsIGFkZCwgZGVsOworCisJcXVvdGVfY19zdHlsZShjcCwgJnFuYW1lLCBOVUxMLCAwKTsKKworCS8qCisJICogInNjYWxlIiB0aGUgZmlsZW5hbWUKKwkgKi8KKwltYXggPSBzdGF0ZS0+bWF4X2xlbjsKKwlpZiAobWF4ID4gNTApCisJCW1heCA9IDUwOworCisJaWYgKHFuYW1lLmxlbiA+IG1heCkgeworCQljcCA9IHN0cmNocihxbmFtZS5idWYgKyBxbmFtZS5sZW4gKyAzIC0gbWF4LCAnLycpOworCQlpZiAoIWNwKQorCQkJY3AgPSBxbmFtZS5idWYgKyBxbmFtZS5sZW4gKyAzIC0gbWF4OworCQlzdHJidWZfc3BsaWNlKCZxbmFtZSwgMCwgY3AgLSBxbmFtZS5idWYsICIuLi4iLCAzKTsKKwl9CisKKwlpZiAocGF0Y2gtPmlzX2JpbmFyeSkgeworCQlwcmludGYoIiAlLSpzIHwgIEJpblxuIiwgbWF4LCBxbmFtZS5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmcW5hbWUpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKCIgJS0qcyB8IiwgbWF4LCBxbmFtZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZxbmFtZSk7CisKKwkvKgorCSAqIHNjYWxlIHRoZSBhZGQvZGVsZXRlCisJICovCisJbWF4ID0gbWF4ICsgc3RhdGUtPm1heF9jaGFuZ2UgPiA3MCA/IDcwIC0gbWF4IDogc3RhdGUtPm1heF9jaGFuZ2U7CisJYWRkID0gcGF0Y2gtPmxpbmVzX2FkZGVkOworCWRlbCA9IHBhdGNoLT5saW5lc19kZWxldGVkOworCisJaWYgKHN0YXRlLT5tYXhfY2hhbmdlID4gMCkgeworCQlpbnQgdG90YWwgPSAoKGFkZCArIGRlbCkgKiBtYXggKyBzdGF0ZS0+bWF4X2NoYW5nZSAvIDIpIC8gc3RhdGUtPm1heF9jaGFuZ2U7CisJCWFkZCA9IChhZGQgKiBtYXggKyBzdGF0ZS0+bWF4X2NoYW5nZSAvIDIpIC8gc3RhdGUtPm1heF9jaGFuZ2U7CisJCWRlbCA9IHRvdGFsIC0gYWRkOworCX0KKwlwcmludGYoIiU1ZCAlLipzJS4qc1xuIiwgcGF0Y2gtPmxpbmVzX2FkZGVkICsgcGF0Y2gtPmxpbmVzX2RlbGV0ZWQsCisJCWFkZCwgcGx1c2VzLCBkZWwsIG1pbnVzZXMpOworfQorCitzdGF0aWMgaW50IHJlYWRfb2xkX2RhdGEoc3RydWN0IHN0YXQgKnN0LCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpbnQgY29udl9mbGFncyA9IHBhdGNoLT5jcmxmX2luX29sZCA/CisJCUNPTlZfRU9MX0tFRVBfQ1JMRiA6IENPTlZfRU9MX1JFTk9STUFMSVpFOworCXN3aXRjaCAoc3QtPnN0X21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZMTks6CisJCWlmIChzdHJidWZfcmVhZGxpbmsoYnVmLCBwYXRoLCBzdC0+c3Rfc2l6ZSkgPCAwKQorCQkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiKSwgcGF0aCk7CisJCXJldHVybiAwOworCWNhc2UgU19JRlJFRzoKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoYnVmLCBwYXRoLCBzdC0+c3Rfc2l6ZSkgIT0gc3QtPnN0X3NpemUpCisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIpLCBwYXRoKTsKKwkJLyoKKwkJICogImdpdCBhcHBseSIgd2l0aG91dCAiLS1pbmRleC8tLWNhY2hlZCIgc2hvdWxkIG5ldmVyIGxvb2sKKwkJICogYXQgdGhlIGluZGV4OyB0aGUgdGFyZ2V0IGZpbGUgbWF5IG5vdCBoYXZlIGJlZW4gYWRkZWQgdG8KKwkJICogdGhlIGluZGV4IHlldCwgYW5kIHdlIG1heSBub3QgZXZlbiBiZSBpbiBhbnkgR2l0IHJlcG9zaXRvcnkuCisJCSAqIFBhc3MgTlVMTCB0byBjb252ZXJ0X3RvX2dpdCgpIHRvIHN0cmVzcyB0aGlzOyB0aGUgZnVuY3Rpb24KKwkJICogc2hvdWxkIG5ldmVyIGxvb2sgYXQgdGhlIGluZGV4IHdoZW4gZXhwbGljaXQgY3JsZiBvcHRpb24KKwkJICogaXMgZ2l2ZW4uCisJCSAqLworCQljb252ZXJ0X3RvX2dpdChOVUxMLCBwYXRoLCBidWYtPmJ1ZiwgYnVmLT5sZW4sIGJ1ZiwgY29udl9mbGFncyk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIHByZWltYWdlLCBhbmQgdGhlIGNvbW1vbiBsaW5lcyBpbiBwb3N0aW1hZ2UsCisgKiBmcm9tIGJ1ZmZlciBidWYgb2YgbGVuZ3RoIGxlbi4gSWYgcG9zdGxlbiBpcyAwIHRoZSBwb3N0aW1hZ2UKKyAqIGlzIHVwZGF0ZWQgaW4gcGxhY2UsIG90aGVyd2lzZSBpdCdzIHVwZGF0ZWQgb24gYSBuZXcgYnVmZmVyCisgKiBvZiBsZW5ndGggcG9zdGxlbgorICovCisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9wcmVfcG9zdF9pbWFnZXMoc3RydWN0IGltYWdlICpwcmVpbWFnZSwKKwkJCQkgICBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSwKKwkJCQkgICBjaGFyICpidWYsCisJCQkJICAgc2l6ZV90IGxlbiwgc2l6ZV90IHBvc3RsZW4pCit7CisJaW50IGksIGN0eCwgcmVkdWNlZDsKKwljaGFyICpuZXdfYnVmLCAqb2xkX2J1ZiwgKmZpeGVkOworCXN0cnVjdCBpbWFnZSBmaXhlZF9wcmVpbWFnZTsKKworCS8qCisJICogVXBkYXRlIHRoZSBwcmVpbWFnZSB3aXRoIHdoaXRlc3BhY2UgZml4ZXMuICBOb3RlIHRoYXQgd2UKKwkgKiBhcmUgbm90IGxvc2luZyBwcmVpbWFnZS0+YnVmIC0tIGFwcGx5X29uZV9mcmFnbWVudCgpIHdpbGwKKwkgKiBmcmVlICJvbGRsaW5lcyIuCisJICovCisJcHJlcGFyZV9pbWFnZSgmZml4ZWRfcHJlaW1hZ2UsIGJ1ZiwgbGVuLCAxKTsKKwlhc3NlcnQocG9zdGxlbgorCSAgICAgICA/IGZpeGVkX3ByZWltYWdlLm5yID09IHByZWltYWdlLT5ucgorCSAgICAgICA6IGZpeGVkX3ByZWltYWdlLm5yIDw9IHByZWltYWdlLT5ucik7CisJZm9yIChpID0gMDsgaSA8IGZpeGVkX3ByZWltYWdlLm5yOyBpKyspCisJCWZpeGVkX3ByZWltYWdlLmxpbmVbaV0uZmxhZyA9IHByZWltYWdlLT5saW5lW2ldLmZsYWc7CisJZnJlZShwcmVpbWFnZS0+bGluZV9hbGxvY2F0ZWQpOworCSpwcmVpbWFnZSA9IGZpeGVkX3ByZWltYWdlOworCisJLyoKKwkgKiBBZGp1c3QgdGhlIGNvbW1vbiBjb250ZXh0IGxpbmVzIGluIHBvc3RpbWFnZS4gVGhpcyBjYW4gYmUKKwkgKiBkb25lIGluLXBsYWNlIHdoZW4gd2UgYXJlIHNocmlua2luZyBpdCB3aXRoIHdoaXRlc3BhY2UKKwkgKiBmaXhpbmcsIGJ1dCBuZWVkcyBhIG5ldyBidWZmZXIgd2hlbiBpZ25vcmluZyB3aGl0ZXNwYWNlIG9yCisJICogZXhwYW5kaW5nIGxlYWRpbmcgdGFicyB0byBzcGFjZXMuCisJICoKKwkgKiBXZSB0cnVzdCB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaWYgdGhlIHVwZGF0ZSBjYW4gYmUgZG9uZQorCSAqIGluIHBsYWNlIChwb3N0bGVuPT0wKSBvciBub3QuCisJICovCisJb2xkX2J1ZiA9IHBvc3RpbWFnZS0+YnVmOworCWlmIChwb3N0bGVuKQorCQluZXdfYnVmID0gcG9zdGltYWdlLT5idWYgPSB4bWFsbG9jKHBvc3RsZW4pOworCWVsc2UKKwkJbmV3X2J1ZiA9IG9sZF9idWY7CisJZml4ZWQgPSBwcmVpbWFnZS0+YnVmOworCisJZm9yIChpID0gcmVkdWNlZCA9IGN0eCA9IDA7IGkgPCBwb3N0aW1hZ2UtPm5yOyBpKyspIHsKKwkJc2l6ZV90IGxfbGVuID0gcG9zdGltYWdlLT5saW5lW2ldLmxlbjsKKwkJaWYgKCEocG9zdGltYWdlLT5saW5lW2ldLmZsYWcgJiBMSU5FX0NPTU1PTikpIHsKKwkJCS8qIGFuIGFkZGVkIGxpbmUgLS0gbm8gY291bnRlcnBhcnRzIGluIHByZWltYWdlICovCisJCQltZW1tb3ZlKG5ld19idWYsIG9sZF9idWYsIGxfbGVuKTsKKwkJCW9sZF9idWYgKz0gbF9sZW47CisJCQluZXdfYnVmICs9IGxfbGVuOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBhIGNvbW1vbiBjb250ZXh0IC0tIHNraXAgaXQgaW4gdGhlIG9yaWdpbmFsIHBvc3RpbWFnZSAqLworCQlvbGRfYnVmICs9IGxfbGVuOworCisJCS8qIGFuZCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIG9uZSBpbiB0aGUgZml4ZWQgcHJlaW1hZ2UgKi8KKwkJd2hpbGUgKGN0eCA8IHByZWltYWdlLT5uciAmJgorCQkgICAgICAgIShwcmVpbWFnZS0+bGluZVtjdHhdLmZsYWcgJiBMSU5FX0NPTU1PTikpIHsKKwkJCWZpeGVkICs9IHByZWltYWdlLT5saW5lW2N0eF0ubGVuOworCQkJY3R4Kys7CisJCX0KKworCQkvKgorCQkgKiBwcmVpbWFnZSBpcyBleHBlY3RlZCB0byBydW4gb3V0LCBpZiB0aGUgY2FsbGVyCisJCSAqIGZpeGVkIGFkZGl0aW9uIG9mIHRyYWlsaW5nIGJsYW5rIGxpbmVzLgorCQkgKi8KKwkJaWYgKHByZWltYWdlLT5uciA8PSBjdHgpIHsKKwkJCXJlZHVjZWQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogYW5kIGNvcHkgaXQgaW4sIHdoaWxlIGZpeGluZyB0aGUgbGluZSBsZW5ndGggKi8KKwkJbF9sZW4gPSBwcmVpbWFnZS0+bGluZVtjdHhdLmxlbjsKKwkJbWVtY3B5KG5ld19idWYsIGZpeGVkLCBsX2xlbik7CisJCW5ld19idWYgKz0gbF9sZW47CisJCWZpeGVkICs9IGxfbGVuOworCQlwb3N0aW1hZ2UtPmxpbmVbaV0ubGVuID0gbF9sZW47CisJCWN0eCsrOworCX0KKworCWlmIChwb3N0bGVuCisJICAgID8gcG9zdGxlbiA8IG5ld19idWYgLSBwb3N0aW1hZ2UtPmJ1ZgorCSAgICA6IHBvc3RpbWFnZS0+bGVuIDwgbmV3X2J1ZiAtIHBvc3RpbWFnZS0+YnVmKQorCQlCVUcoImNhbGxlciBtaXNjb3VudGVkIHBvc3RsZW46IGFza2VkICVkLCBvcmlnID0gJWQsIHVzZWQgPSAlZCIsCisJCSAgICAoaW50KXBvc3RsZW4sIChpbnQpIHBvc3RpbWFnZS0+bGVuLCAoaW50KShuZXdfYnVmIC0gcG9zdGltYWdlLT5idWYpKTsKKworCS8qIEZpeCB0aGUgbGVuZ3RoIG9mIHRoZSB3aG9sZSB0aGluZyAqLworCXBvc3RpbWFnZS0+bGVuID0gbmV3X2J1ZiAtIHBvc3RpbWFnZS0+YnVmOworCXBvc3RpbWFnZS0+bnIgLT0gcmVkdWNlZDsKK30KKworc3RhdGljIGludCBsaW5lX2J5X2xpbmVfZnV6enlfbWF0Y2goc3RydWN0IGltYWdlICppbWcsCisJCQkJICAgIHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCQkJICAgIHN0cnVjdCBpbWFnZSAqcG9zdGltYWdlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnQsCisJCQkJICAgIGludCBjdXJyZW50X2xubywKKwkJCQkgICAgaW50IHByZWltYWdlX2xpbWl0KQoreworCWludCBpOworCXNpemVfdCBpbWdvZmYgPSAwOworCXNpemVfdCBwcmVvZmYgPSAwOworCXNpemVfdCBwb3N0bGVuID0gcG9zdGltYWdlLT5sZW47CisJc2l6ZV90IGV4dHJhX2NoYXJzOworCWNoYXIgKmJ1ZjsKKwljaGFyICpwcmVpbWFnZV9lb2Y7CisJY2hhciAqcHJlaW1hZ2VfZW5kOworCXN0cnVjdCBzdHJidWYgZml4ZWQ7CisJY2hhciAqZml4ZWRfYnVmOworCXNpemVfdCBmaXhlZF9sZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykgeworCQlzaXplX3QgcHJlbGVuID0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCQlzaXplX3QgaW1nbGVuID0gaW1nLT5saW5lW2N1cnJlbnRfbG5vK2ldLmxlbjsKKworCQlpZiAoIWZ1enp5X21hdGNobGluZXMoaW1nLT5idWYgKyBjdXJyZW50ICsgaW1nb2ZmLCBpbWdsZW4sCisJCQkJICAgICAgcHJlaW1hZ2UtPmJ1ZiArIHByZW9mZiwgcHJlbGVuKSkKKwkJCXJldHVybiAwOworCQlpZiAocHJlaW1hZ2UtPmxpbmVbaV0uZmxhZyAmIExJTkVfQ09NTU9OKQorCQkJcG9zdGxlbiArPSBpbWdsZW4gLSBwcmVsZW47CisJCWltZ29mZiArPSBpbWdsZW47CisJCXByZW9mZiArPSBwcmVsZW47CisJfQorCisJLyoKKwkgKiBPaywgdGhlIHByZWltYWdlIG1hdGNoZXMgd2l0aCB3aGl0ZXNwYWNlIGZ1enouCisJICoKKwkgKiBpbWdvZmYgbm93IGhvbGRzIHRoZSB0cnVlIGxlbmd0aCBvZiB0aGUgdGFyZ2V0IHRoYXQKKwkgKiBtYXRjaGVzIHRoZSBwcmVpbWFnZSBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkgKgorCSAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgcHJlaW1hZ2UgdGhhdCBmYWxsCisJICogYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIG1ha2Ugc3VyZSB0aGF0IGFsbCBvZiB0aGVtCisJICogYXJlIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gKFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmCisJICogd2UgYXJlIHJlbW92aW5nIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuKQorCSAqLworCWJ1ZiA9IHByZWltYWdlX2VvZiA9IHByZWltYWdlLT5idWYgKyBwcmVvZmY7CisJZm9yICggOyBpIDwgcHJlaW1hZ2UtPm5yOyBpKyspCisJCXByZW9mZiArPSBwcmVpbWFnZS0+bGluZVtpXS5sZW47CisJcHJlaW1hZ2VfZW5kID0gcHJlaW1hZ2UtPmJ1ZiArIHByZW9mZjsKKwlmb3IgKCA7IGJ1ZiA8IHByZWltYWdlX2VuZDsgYnVmKyspCisJCWlmICghaXNzcGFjZSgqYnVmKSkKKwkJCXJldHVybiAwOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIHByZWltYWdlIGFuZCB0aGUgY29tbW9uIHBvc3RpbWFnZSBjb250ZXh0CisJICogbGluZXMgdG8gdXNlIHRoZSBzYW1lIHdoaXRlc3BhY2UgYXMgdGhlIHRhcmdldC4KKwkgKiBJZiB3aGl0ZXNwYWNlIGlzIG1pc3NpbmcgaW4gdGhlIHRhcmdldCAoaS5lLgorCSAqIGlmIHRoZSBwcmVpbWFnZSBleHRlbmRzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlKSwKKwkgKiB1c2UgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgcHJlaW1hZ2UuCisJICovCisJZXh0cmFfY2hhcnMgPSBwcmVpbWFnZV9lbmQgLSBwcmVpbWFnZV9lb2Y7CisJc3RyYnVmX2luaXQoJmZpeGVkLCBpbWdvZmYgKyBleHRyYV9jaGFycyk7CisJc3RyYnVmX2FkZCgmZml4ZWQsIGltZy0+YnVmICsgY3VycmVudCwgaW1nb2ZmKTsKKwlzdHJidWZfYWRkKCZmaXhlZCwgcHJlaW1hZ2VfZW9mLCBleHRyYV9jaGFycyk7CisJZml4ZWRfYnVmID0gc3RyYnVmX2RldGFjaCgmZml4ZWQsICZmaXhlZF9sZW4pOworCXVwZGF0ZV9wcmVfcG9zdF9pbWFnZXMocHJlaW1hZ2UsIHBvc3RpbWFnZSwKKwkJCSAgICAgICBmaXhlZF9idWYsIGZpeGVkX2xlbiwgcG9zdGxlbik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfZnJhZ21lbnQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgc3RydWN0IGltYWdlICppbWcsCisJCQkgIHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCQkgIHN0cnVjdCBpbWFnZSAqcG9zdGltYWdlLAorCQkJICB1bnNpZ25lZCBsb25nIGN1cnJlbnQsCisJCQkgIGludCBjdXJyZW50X2xubywKKwkJCSAgdW5zaWduZWQgd3NfcnVsZSwKKwkJCSAgaW50IG1hdGNoX2JlZ2lubmluZywgaW50IG1hdGNoX2VuZCkKK3sKKwlpbnQgaTsKKwljaGFyICpmaXhlZF9idWYsICpidWYsICpvcmlnLCAqdGFyZ2V0OworCXN0cnVjdCBzdHJidWYgZml4ZWQ7CisJc2l6ZV90IGZpeGVkX2xlbiwgcG9zdGxlbjsKKwlpbnQgcHJlaW1hZ2VfbGltaXQ7CisKKwlpZiAocHJlaW1hZ2UtPm5yICsgY3VycmVudF9sbm8gPD0gaW1nLT5ucikgeworCQkvKgorCQkgKiBUaGUgaHVuayBmYWxscyB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgaW1nLgorCQkgKi8KKwkJcHJlaW1hZ2VfbGltaXQgPSBwcmVpbWFnZS0+bnI7CisJCWlmIChtYXRjaF9lbmQgJiYgKHByZWltYWdlLT5uciArIGN1cnJlbnRfbG5vICE9IGltZy0+bnIpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID09IGNvcnJlY3Rfd3NfZXJyb3IgJiYKKwkJICAgKHdzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpKSB7CisJCS8qCisJCSAqIFRoaXMgaHVuayBleHRlbmRzIGJleW9uZCB0aGUgZW5kIG9mIGltZywgYW5kIHdlIGFyZQorCQkgKiByZW1vdmluZyBibGFuayBsaW5lcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgVGhpcworCQkgKiBtYW55IGxpbmVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJlaW1hZ2UgbXVzdAorCQkgKiBtYXRjaCB3aXRoIGltZywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIHByZWltYWdlCisJCSAqIG11c3QgYmUgYmxhbmsuCisJCSAqLworCQlwcmVpbWFnZV9saW1pdCA9IGltZy0+bnIgLSBjdXJyZW50X2xubzsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgaHVuayBleHRlbmRzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbWcgYW5kCisJCSAqIHdlIGFyZSBub3QgcmVtb3ZpbmcgYmxhbmtzIGF0IHRoZSBlbmQsIHNvIHdlCisJCSAqIHNob3VsZCByZWplY3QgdGhlIGh1bmsgYXQgdGhpcyBwb3NpdGlvbi4KKwkJICovCisJCXJldHVybiAwOworCX0KKworCWlmIChtYXRjaF9iZWdpbm5pbmcgJiYgY3VycmVudF9sbm8pCisJCXJldHVybiAwOworCisJLyogUXVpY2sgaGFzaCBjaGVjayAqLworCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKQorCQlpZiAoKGltZy0+bGluZVtjdXJyZW50X2xubyArIGldLmZsYWcgJiBMSU5FX1BBVENIRUQpIHx8CisJCSAgICAocHJlaW1hZ2UtPmxpbmVbaV0uaGFzaCAhPSBpbWctPmxpbmVbY3VycmVudF9sbm8gKyBpXS5oYXNoKSkKKwkJCXJldHVybiAwOworCisJaWYgKHByZWltYWdlX2xpbWl0ID09IHByZWltYWdlLT5ucikgeworCQkvKgorCQkgKiBEbyB3ZSBoYXZlIGFuIGV4YWN0IG1hdGNoPyAgSWYgd2Ugd2VyZSB0b2xkIHRvIG1hdGNoCisJCSAqIGF0IHRoZSBlbmQsIHNpemUgbXVzdCBiZSBleGFjdGx5IGF0IGN1cnJlbnQrZnJhZ3NpemUsCisJCSAqIG90aGVyd2lzZSBjdXJyZW50K2ZyYWdzaXplIG11c3QgYmUgc3RpbGwgd2l0aGluIHRoZSBwcmVpbWFnZSwKKwkJICogYW5kIGVpdGhlciBjYXNlLCB0aGUgb2xkIHBpZWNlIHNob3VsZCBtYXRjaCB0aGUgcHJlaW1hZ2UKKwkJICogZXhhY3RseS4KKwkJICovCisJCWlmICgobWF0Y2hfZW5kCisJCSAgICAgPyAoY3VycmVudCArIHByZWltYWdlLT5sZW4gPT0gaW1nLT5sZW4pCisJCSAgICAgOiAoY3VycmVudCArIHByZWltYWdlLT5sZW4gPD0gaW1nLT5sZW4pKSAmJgorCQkgICAgIW1lbWNtcChpbWctPmJ1ZiArIGN1cnJlbnQsIHByZWltYWdlLT5idWYsIHByZWltYWdlLT5sZW4pKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIHByZWltYWdlIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgaW1nLCBzbworCQkgKiB0aGVyZSBjYW5ub3QgYmUgYW4gZXhhY3QgbWF0Y2guCisJCSAqCisJCSAqIFRoZXJlIG11c3QgYmUgb25lIG5vbi1ibGFuayBjb250ZXh0IGxpbmUgdGhhdCBtYXRjaAorCQkgKiBhIGxpbmUgYmVmb3JlIHRoZSBlbmQgb2YgaW1nLgorCQkgKi8KKwkJY2hhciAqYnVmX2VuZDsKKworCQlidWYgPSBwcmVpbWFnZS0+YnVmOworCQlidWZfZW5kID0gYnVmOworCQlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykKKwkJCWJ1Zl9lbmQgKz0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCisJCWZvciAoIDsgYnVmIDwgYnVmX2VuZDsgYnVmKyspCisJCQlpZiAoIWlzc3BhY2UoKmJ1ZikpCisJCQkJYnJlYWs7CisJCWlmIChidWYgPT0gYnVmX2VuZCkKKwkJCXJldHVybiAwOworCX0KKworCS8qCisJICogTm8gZXhhY3QgbWF0Y2guIElmIHdlIGFyZSBpZ25vcmluZyB3aGl0ZXNwYWNlLCBydW4gYSBsaW5lLWJ5LWxpbmUKKwkgKiBmdXp6eSBtYXRjaGluZy4gV2UgY29sbGVjdCBhbGwgdGhlIGxpbmUgbGVuZ3RoIGluZm9ybWF0aW9uIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIGl0IHRvIGFkanVzdCB3aGl0ZXNwYWNlIGlmIHdlIG1hdGNoLgorCSAqLworCWlmIChzdGF0ZS0+d3NfaWdub3JlX2FjdGlvbiA9PSBpZ25vcmVfd3NfY2hhbmdlKQorCQlyZXR1cm4gbGluZV9ieV9saW5lX2Z1enp5X21hdGNoKGltZywgcHJlaW1hZ2UsIHBvc3RpbWFnZSwKKwkJCQkJCWN1cnJlbnQsIGN1cnJlbnRfbG5vLCBwcmVpbWFnZV9saW1pdCk7CisKKwlpZiAoc3RhdGUtPndzX2Vycm9yX2FjdGlvbiAhPSBjb3JyZWN0X3dzX2Vycm9yKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhlIGh1bmsgZG9lcyBub3QgYXBwbHkgYnl0ZS1ieS1ieXRlLCBidXQgdGhlIGhhc2ggc2F5cworCSAqIGl0IG1pZ2h0IHdpdGggd2hpdGVzcGFjZSBmdXp6LiBXZSB3ZXJlbid0IGFza2VkIHRvCisJICogaWdub3JlIHdoaXRlc3BhY2UsIHdlIHdlcmUgYXNrZWQgdG8gY29ycmVjdCB3aGl0ZXNwYWNlCisJICogZXJyb3JzLCBzbyBsZXQncyB0cnkgbWF0Y2hpbmcgYWZ0ZXIgd2hpdGVzcGFjZSBjb3JyZWN0aW9uLgorCSAqCisJICogV2hpbGUgY2hlY2tpbmcgdGhlIHByZWltYWdlIGFnYWluc3QgdGhlIHRhcmdldCwgd2hpdGVzcGFjZQorCSAqIGVycm9ycyBpbiBib3RoIGZpeGVkLCB3ZSBjb3VudCBob3cgbGFyZ2UgdGhlIGNvcnJlc3BvbmRpbmcKKwkgKiBwb3N0aW1hZ2UgbmVlZHMgdG8gYmUuICBUaGUgcG9zdGltYWdlIHByZXBhcmVkIGJ5CisJICogYXBwbHlfb25lX2ZyYWdtZW50KCkgaGFzIHdoaXRlc3BhY2UgZXJyb3JzIGZpeGVkIG9uIGFkZGVkCisJICogbGluZXMgYWxyZWFkeSwgYnV0IHRoZSBjb21tb24gbGluZXMgd2VyZSBwcm9wYWdhdGVkIGFzLWlzLAorCSAqIHdoaWNoIG1heSBiZWNvbWUgbG9uZ2VyIHdoZW4gdGhlaXIgd2hpdGVzcGFjZSBlcnJvcnMgYXJlCisJICogZml4ZWQuCisJICovCisKKwkvKiBGaXJzdCBjb3VudCBhZGRlZCBsaW5lcyBpbiBwb3N0aW1hZ2UgKi8KKwlwb3N0bGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcG9zdGltYWdlLT5ucjsgaSsrKSB7CisJCWlmICghKHBvc3RpbWFnZS0+bGluZVtpXS5mbGFnICYgTElORV9DT01NT04pKQorCQkJcG9zdGxlbiArPSBwb3N0aW1hZ2UtPmxpbmVbaV0ubGVuOworCX0KKworCS8qCisJICogVGhlIHByZWltYWdlIG1heSBleHRlbmQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUsCisJICogYnV0IGluIHRoaXMgbG9vcCB3ZSB3aWxsIG9ubHkgaGFuZGxlIHRoZSBwYXJ0IG9mIHRoZQorCSAqIHByZWltYWdlIHRoYXQgZmFsbHMgd2l0aGluIHRoZSBmaWxlLgorCSAqLworCXN0cmJ1Zl9pbml0KCZmaXhlZCwgcHJlaW1hZ2UtPmxlbiArIDEpOworCW9yaWcgPSBwcmVpbWFnZS0+YnVmOworCXRhcmdldCA9IGltZy0+YnVmICsgY3VycmVudDsKKwlmb3IgKGkgPSAwOyBpIDwgcHJlaW1hZ2VfbGltaXQ7IGkrKykgeworCQlzaXplX3Qgb2xkbGVuID0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCQlzaXplX3QgdGd0bGVuID0gaW1nLT5saW5lW2N1cnJlbnRfbG5vICsgaV0ubGVuOworCQlzaXplX3QgZml4c3RhcnQgPSBmaXhlZC5sZW47CisJCXN0cnVjdCBzdHJidWYgdGd0Zml4OworCQlpbnQgbWF0Y2g7CisKKwkJLyogVHJ5IGZpeGluZyB0aGUgbGluZSBpbiB0aGUgcHJlaW1hZ2UgKi8KKwkJd3NfZml4X2NvcHkoJmZpeGVkLCBvcmlnLCBvbGRsZW4sIHdzX3J1bGUsIE5VTEwpOworCisJCS8qIFRyeSBmaXhpbmcgdGhlIGxpbmUgaW4gdGhlIHRhcmdldCAqLworCQlzdHJidWZfaW5pdCgmdGd0Zml4LCB0Z3RsZW4pOworCQl3c19maXhfY29weSgmdGd0Zml4LCB0YXJnZXQsIHRndGxlbiwgd3NfcnVsZSwgTlVMTCk7CisKKwkJLyoKKwkJICogSWYgdGhleSBtYXRjaCwgZWl0aGVyIHRoZSBwcmVpbWFnZSB3YXMgYmFzZWQgb24KKwkJICogYSB2ZXJzaW9uIGJlZm9yZSBvdXIgdHJlZSBmaXhlZCB3aGl0ZXNwYWNlIGJyZWFrYWdlLAorCQkgKiBvciB3ZSBhcmUgbGFja2luZyBhIHdoaXRlc3BhY2UtZml4IHBhdGNoIHRoZSB0cmVlCisJCSAqIHRoZSBwcmVpbWFnZSB3YXMgYmFzZWQgb24gYWxyZWFkeSBoYWQgKGkuZS4gdGFyZ2V0CisJCSAqIGhhcyB3aGl0ZXNwYWNlIGJyZWFrYWdlLCB0aGUgcHJlaW1hZ2UgZG9lc24ndCkuCisJCSAqIEluIGVpdGhlciBjYXNlLCB3ZSBhcmUgZml4aW5nIHRoZSB3aGl0ZXNwYWNlIGJyZWFrYWdlcworCQkgKiBzbyB3ZSBtaWdodCBhcyB3ZWxsIHRha2UgdGhlIGZpeCB0b2dldGhlciB3aXRoIHRoZWlyCisJCSAqIHJlYWwgY2hhbmdlLgorCQkgKi8KKwkJbWF0Y2ggPSAodGd0Zml4LmxlbiA9PSBmaXhlZC5sZW4gLSBmaXhzdGFydCAmJgorCQkJICFtZW1jbXAodGd0Zml4LmJ1ZiwgZml4ZWQuYnVmICsgZml4c3RhcnQsCisJCQkJCSAgICAgZml4ZWQubGVuIC0gZml4c3RhcnQpKTsKKworCQkvKiBBZGQgdGhlIGxlbmd0aCBpZiB0aGlzIGlzIGNvbW1vbiB3aXRoIHRoZSBwb3N0aW1hZ2UgKi8KKwkJaWYgKHByZWltYWdlLT5saW5lW2ldLmZsYWcgJiBMSU5FX0NPTU1PTikKKwkJCXBvc3RsZW4gKz0gdGd0Zml4LmxlbjsKKworCQlzdHJidWZfcmVsZWFzZSgmdGd0Zml4KTsKKwkJaWYgKCFtYXRjaCkKKwkJCWdvdG8gdW5tYXRjaF9leGl0OworCisJCW9yaWcgKz0gb2xkbGVuOworCQl0YXJnZXQgKz0gdGd0bGVuOworCX0KKworCisJLyoKKwkgKiBOb3cgaGFuZGxlIHRoZSBsaW5lcyBpbiB0aGUgcHJlaW1hZ2UgdGhhdCBmYWxscyBiZXlvbmQgdGhlCisJICogZW5kIG9mIHRoZSBmaWxlIChpZiBhbnkpLiBUaGV5IHdpbGwgb25seSBtYXRjaCBpZiB0aGV5IGFyZQorCSAqIGVtcHR5IG9yIG9ubHkgY29udGFpbiB3aGl0ZXNwYWNlIChpZiBXU19CTEFOS19BVF9FT0wgaXMKKwkgKiBmYWxzZSkuCisJICovCisJZm9yICggOyBpIDwgcHJlaW1hZ2UtPm5yOyBpKyspIHsKKwkJc2l6ZV90IGZpeHN0YXJ0ID0gZml4ZWQubGVuOyAvKiBzdGFydCBvZiB0aGUgZml4ZWQgcHJlaW1hZ2UgKi8KKwkJc2l6ZV90IG9sZGxlbiA9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKwkJaW50IGo7CisKKwkJLyogVHJ5IGZpeGluZyB0aGUgbGluZSBpbiB0aGUgcHJlaW1hZ2UgKi8KKwkJd3NfZml4X2NvcHkoJmZpeGVkLCBvcmlnLCBvbGRsZW4sIHdzX3J1bGUsIE5VTEwpOworCisJCWZvciAoaiA9IGZpeHN0YXJ0OyBqIDwgZml4ZWQubGVuOyBqKyspCisJCQlpZiAoIWlzc3BhY2UoZml4ZWQuYnVmW2pdKSkKKwkJCQlnb3RvIHVubWF0Y2hfZXhpdDsKKworCQlvcmlnICs9IG9sZGxlbjsKKwl9CisKKwkvKgorCSAqIFllcywgdGhlIHByZWltYWdlIGlzIGJhc2VkIG9uIGFuIG9sZGVyIHZlcnNpb24gdGhhdCBzdGlsbAorCSAqIGhhcyB3aGl0ZXNwYWNlIGJyZWFrYWdlcyB1bmZpeGVkLCBhbmQgZml4aW5nIHRoZW0gbWFrZXMgdGhlCisJICogaHVuayBtYXRjaC4gIFVwZGF0ZSB0aGUgY29udGV4dCBsaW5lcyBpbiB0aGUgcG9zdGltYWdlLgorCSAqLworCWZpeGVkX2J1ZiA9IHN0cmJ1Zl9kZXRhY2goJmZpeGVkLCAmZml4ZWRfbGVuKTsKKwlpZiAocG9zdGxlbiA8IHBvc3RpbWFnZS0+bGVuKQorCQlwb3N0bGVuID0gMDsKKwl1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkgICAgICAgZml4ZWRfYnVmLCBmaXhlZF9sZW4sIHBvc3RsZW4pOworCXJldHVybiAxOworCisgdW5tYXRjaF9leGl0OgorCXN0cmJ1Zl9yZWxlYXNlKCZmaXhlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9wb3Moc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJICAgIHN0cnVjdCBpbWFnZSAqaW1nLAorCQkgICAgc3RydWN0IGltYWdlICpwcmVpbWFnZSwKKwkJICAgIHN0cnVjdCBpbWFnZSAqcG9zdGltYWdlLAorCQkgICAgaW50IGxpbmUsCisJCSAgICB1bnNpZ25lZCB3c19ydWxlLAorCQkgICAgaW50IG1hdGNoX2JlZ2lubmluZywgaW50IG1hdGNoX2VuZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGJhY2t3YXJkcywgZm9yd2FyZHMsIGN1cnJlbnQ7CisJaW50IGJhY2t3YXJkc19sbm8sIGZvcndhcmRzX2xubywgY3VycmVudF9sbm87CisKKwkvKgorCSAqIFdoZW4gcnVubmluZyB3aXRoIC0tYWxsb3ctb3ZlcmxhcCwgaXQgaXMgcG9zc2libGUgdGhhdCBhIGh1bmsgaXMKKwkgKiBzZWVuIHRoYXQgcHJldGVuZHMgdG8gc3RhcnQgYXQgdGhlIGJlZ2lubmluZyAoYnV0IG5vIGxvbmdlciBkb2VzKSwKKwkgKiBhbmQgdGhhdCAqc3RpbGwqIG5lZWRzIHRvIG1hdGNoIHRoZSBlbmQuIFNvIHRydXN0IGBtYXRjaF9lbmRgIG1vcmUKKwkgKiB0aGFuIGBtYXRjaF9iZWdpbm5pbmdgLgorCSAqLworCWlmIChzdGF0ZS0+YWxsb3dfb3ZlcmxhcCAmJiBtYXRjaF9iZWdpbm5pbmcgJiYgbWF0Y2hfZW5kICYmCisJICAgIGltZy0+bnIgLSBwcmVpbWFnZS0+bnIgIT0gMCkKKwkJbWF0Y2hfYmVnaW5uaW5nID0gMDsKKworCS8qCisJICogSWYgbWF0Y2hfYmVnaW5uaW5nIG9yIG1hdGNoX2VuZCBpcyBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgc3RhcnRpbmcgZnJvbSBhIHdyb25nIGxpbmUgdGhhdCB3aWxsIG5ldmVyIG1hdGNoIGFuZAorCSAqIHdhbmRlciBhcm91bmQgYW5kIHdhaXQgZm9yIGEgbWF0Y2ggYXQgdGhlIHNwZWNpZmllZCBlbmQuCisJICovCisJaWYgKG1hdGNoX2JlZ2lubmluZykKKwkJbGluZSA9IDA7CisJZWxzZSBpZiAobWF0Y2hfZW5kKQorCQlsaW5lID0gaW1nLT5uciAtIHByZWltYWdlLT5ucjsKKworCS8qCisJICogQmVjYXVzZSB0aGUgY29tcGFyaXNvbiBpcyB1bnNpZ25lZCwgdGhlIGZvbGxvd2luZyB0ZXN0CisJICogd2lsbCBhbHNvIHRha2UgY2FyZSBvZiBhIG5lZ2F0aXZlIGxpbmUgbnVtYmVyIHRoYXQgY2FuCisJICogcmVzdWx0IHdoZW4gbWF0Y2hfZW5kIGFuZCBwcmVpbWFnZSBpcyBsYXJnZXIgdGhhbiB0aGUgdGFyZ2V0LgorCSAqLworCWlmICgoc2l6ZV90KSBsaW5lID4gaW1nLT5ucikKKwkJbGluZSA9IGltZy0+bnI7CisKKwljdXJyZW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGluZTsgaSsrKQorCQljdXJyZW50ICs9IGltZy0+bGluZVtpXS5sZW47CisKKwkvKgorCSAqIFRoZXJlJ3MgcHJvYmFibHkgc29tZSBzbWFydCB3YXkgdG8gZG8gdGhpcywgYnV0IEknbGwgbGVhdmUKKwkgKiB0aGF0IHRvIHRoZSBzbWFydCBhbmQgYmVhdXRpZnVsIHBlb3BsZS4gSSdtIHNpbXBsZSBhbmQgc3R1cGlkLgorCSAqLworCWJhY2t3YXJkcyA9IGN1cnJlbnQ7CisJYmFja3dhcmRzX2xubyA9IGxpbmU7CisJZm9yd2FyZHMgPSBjdXJyZW50OworCWZvcndhcmRzX2xubyA9IGxpbmU7CisJY3VycmVudF9sbm8gPSBsaW5lOworCisJZm9yIChpID0gMDsgOyBpKyspIHsKKwkJaWYgKG1hdGNoX2ZyYWdtZW50KHN0YXRlLCBpbWcsIHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkJICAgY3VycmVudCwgY3VycmVudF9sbm8sIHdzX3J1bGUsCisJCQkJICAgbWF0Y2hfYmVnaW5uaW5nLCBtYXRjaF9lbmQpKQorCQkJcmV0dXJuIGN1cnJlbnRfbG5vOworCisJYWdhaW46CisJCWlmIChiYWNrd2FyZHNfbG5vID09IDAgJiYgZm9yd2FyZHNfbG5vID09IGltZy0+bnIpCisJCQlicmVhazsKKworCQlpZiAoaSAmIDEpIHsKKwkJCWlmIChiYWNrd2FyZHNfbG5vID09IDApIHsKKwkJCQlpKys7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKwkJCWJhY2t3YXJkc19sbm8tLTsKKwkJCWJhY2t3YXJkcyAtPSBpbWctPmxpbmVbYmFja3dhcmRzX2xub10ubGVuOworCQkJY3VycmVudCA9IGJhY2t3YXJkczsKKwkJCWN1cnJlbnRfbG5vID0gYmFja3dhcmRzX2xubzsKKwkJfSBlbHNlIHsKKwkJCWlmIChmb3J3YXJkc19sbm8gPT0gaW1nLT5ucikgeworCQkJCWkrKzsKKwkJCQlnb3RvIGFnYWluOworCQkJfQorCQkJZm9yd2FyZHMgKz0gaW1nLT5saW5lW2ZvcndhcmRzX2xub10ubGVuOworCQkJZm9yd2FyZHNfbG5vKys7CisJCQljdXJyZW50ID0gZm9yd2FyZHM7CisJCQljdXJyZW50X2xubyA9IGZvcndhcmRzX2xubzsKKwkJfQorCisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2ZpcnN0X2xpbmUoc3RydWN0IGltYWdlICppbWcpCit7CisJaW1nLT5idWYgKz0gaW1nLT5saW5lWzBdLmxlbjsKKwlpbWctPmxlbiAtPSBpbWctPmxpbmVbMF0ubGVuOworCWltZy0+bGluZSsrOworCWltZy0+bnItLTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2xhc3RfbGluZShzdHJ1Y3QgaW1hZ2UgKmltZykKK3sKKwlpbWctPmxlbiAtPSBpbWctPmxpbmVbLS1pbWctPm5yXS5sZW47Cit9CisKKy8qCisgKiBUaGUgY2hhbmdlIGZyb20gInByZWltYWdlIiBhbmQgInBvc3RpbWFnZSIgaGFzIGJlZW4gZm91bmQgdG8KKyAqIGFwcGx5IGF0IGFwcGxpZWRfcG9zIChjb3VudHMgaW4gbGluZSBudW1iZXJzKSBpbiAiaW1nIi4KKyAqIFVwZGF0ZSAiaW1nIiB0byByZW1vdmUgInByZWltYWdlIiBhbmQgcmVwbGFjZSBpdCB3aXRoICJwb3N0aW1hZ2UiLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfaW1hZ2Uoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSBzdHJ1Y3QgaW1hZ2UgKmltZywKKwkJCSBpbnQgYXBwbGllZF9wb3MsCisJCQkgc3RydWN0IGltYWdlICpwcmVpbWFnZSwKKwkJCSBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSkKK3sKKwkvKgorCSAqIHJlbW92ZSB0aGUgY29weSBvZiBwcmVpbWFnZSBhdCBvZmZzZXQgaW4gaW1nCisJICogYW5kIHJlcGxhY2UgaXQgd2l0aCBwb3N0aW1hZ2UKKwkgKi8KKwlpbnQgaSwgbnI7CisJc2l6ZV90IHJlbW92ZV9jb3VudCwgaW5zZXJ0X2NvdW50LCBhcHBsaWVkX2F0ID0gMDsKKwljaGFyICpyZXN1bHQ7CisJaW50IHByZWltYWdlX2xpbWl0OworCisJLyoKKwkgKiBJZiB3ZSBhcmUgcmVtb3ZpbmcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBpbWcsCisJICogdGhlIHByZWltYWdlIG1heSBleHRlbmQgYmV5b25kIHRoZSBlbmQuCisJICogSWYgdGhhdCBpcyB0aGUgY2FzZSwgd2UgbXVzdCBiZSBjYXJlZnVsIG9ubHkgdG8KKwkgKiByZW1vdmUgdGhlIHBhcnQgb2YgdGhlIHByZWltYWdlIHRoYXQgZmFsbHMgd2l0aGluCisJICogdGhlIGJvdW5kYXJpZXMgb2YgaW1nLiBJbml0aWFsaXplIHByZWltYWdlX2xpbWl0CisJICogdG8gdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgcHJlaW1hZ2UgdGhhdCBmYWxscworCSAqIHdpdGhpbiB0aGUgYm91bmRhcmllcy4KKwkgKi8KKwlwcmVpbWFnZV9saW1pdCA9IHByZWltYWdlLT5ucjsKKwlpZiAocHJlaW1hZ2VfbGltaXQgPiBpbWctPm5yIC0gYXBwbGllZF9wb3MpCisJCXByZWltYWdlX2xpbWl0ID0gaW1nLT5uciAtIGFwcGxpZWRfcG9zOworCisJZm9yIChpID0gMDsgaSA8IGFwcGxpZWRfcG9zOyBpKyspCisJCWFwcGxpZWRfYXQgKz0gaW1nLT5saW5lW2ldLmxlbjsKKworCXJlbW92ZV9jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHByZWltYWdlX2xpbWl0OyBpKyspCisJCXJlbW92ZV9jb3VudCArPSBpbWctPmxpbmVbYXBwbGllZF9wb3MgKyBpXS5sZW47CisJaW5zZXJ0X2NvdW50ID0gcG9zdGltYWdlLT5sZW47CisKKwkvKiBBZGp1c3QgdGhlIGNvbnRlbnRzICovCisJcmVzdWx0ID0geG1hbGxvYyhzdF9hZGQzKHN0X3N1YihpbWctPmxlbiwgcmVtb3ZlX2NvdW50KSwgaW5zZXJ0X2NvdW50LCAxKSk7CisJbWVtY3B5KHJlc3VsdCwgaW1nLT5idWYsIGFwcGxpZWRfYXQpOworCW1lbWNweShyZXN1bHQgKyBhcHBsaWVkX2F0LCBwb3N0aW1hZ2UtPmJ1ZiwgcG9zdGltYWdlLT5sZW4pOworCW1lbWNweShyZXN1bHQgKyBhcHBsaWVkX2F0ICsgcG9zdGltYWdlLT5sZW4sCisJICAgICAgIGltZy0+YnVmICsgKGFwcGxpZWRfYXQgKyByZW1vdmVfY291bnQpLAorCSAgICAgICBpbWctPmxlbiAtIChhcHBsaWVkX2F0ICsgcmVtb3ZlX2NvdW50KSk7CisJZnJlZShpbWctPmJ1Zik7CisJaW1nLT5idWYgPSByZXN1bHQ7CisJaW1nLT5sZW4gKz0gaW5zZXJ0X2NvdW50IC0gcmVtb3ZlX2NvdW50OworCXJlc3VsdFtpbWctPmxlbl0gPSAnXDAnOworCisJLyogQWRqdXN0IHRoZSBsaW5lIHRhYmxlICovCisJbnIgPSBpbWctPm5yICsgcG9zdGltYWdlLT5uciAtIHByZWltYWdlX2xpbWl0OworCWlmIChwcmVpbWFnZV9saW1pdCA8IHBvc3RpbWFnZS0+bnIpIHsKKwkJLyoKKwkJICogTk9URTogdGhpcyBrbm93cyB0aGF0IHdlIG5ldmVyIGNhbGwgcmVtb3ZlX2ZpcnN0X2xpbmUoKQorCQkgKiBvbiBhbnl0aGluZyBvdGhlciB0aGFuIHByZS9wb3N0IGltYWdlLgorCQkgKi8KKwkJUkVBTExPQ19BUlJBWShpbWctPmxpbmUsIG5yKTsKKwkJaW1nLT5saW5lX2FsbG9jYXRlZCA9IGltZy0+bGluZTsKKwl9CisJaWYgKHByZWltYWdlX2xpbWl0ICE9IHBvc3RpbWFnZS0+bnIpCisJCU1PVkVfQVJSQVkoaW1nLT5saW5lICsgYXBwbGllZF9wb3MgKyBwb3N0aW1hZ2UtPm5yLAorCQkJICAgaW1nLT5saW5lICsgYXBwbGllZF9wb3MgKyBwcmVpbWFnZV9saW1pdCwKKwkJCSAgIGltZy0+bnIgLSAoYXBwbGllZF9wb3MgKyBwcmVpbWFnZV9saW1pdCkpOworCUNPUFlfQVJSQVkoaW1nLT5saW5lICsgYXBwbGllZF9wb3MsIHBvc3RpbWFnZS0+bGluZSwgcG9zdGltYWdlLT5ucik7CisJaWYgKCFzdGF0ZS0+YWxsb3dfb3ZlcmxhcCkKKwkJZm9yIChpID0gMDsgaSA8IHBvc3RpbWFnZS0+bnI7IGkrKykKKwkJCWltZy0+bGluZVthcHBsaWVkX3BvcyArIGldLmZsYWcgfD0gTElORV9QQVRDSEVEOworCWltZy0+bnIgPSBucjsKK30KKworLyoKKyAqIFVzZSB0aGUgcGF0Y2gtaHVuayB0ZXh0IGluICJmcmFnIiB0byBwcmVwYXJlIHR3byBpbWFnZXMgKHByZWltYWdlIGFuZAorICogcG9zdGltYWdlKSBmb3IgdGhlIGh1bmsuICBGaW5kIGxpbmVzIHRoYXQgbWF0Y2ggInByZWltYWdlIiBpbiAiaW1nIiBhbmQKKyAqIHJlcGxhY2UgdGhlIHBhcnQgb2YgImltZyIgd2l0aCAicG9zdGltYWdlIiB0ZXh0LgorICovCitzdGF0aWMgaW50IGFwcGx5X29uZV9mcmFnbWVudChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgc3RydWN0IGltYWdlICppbWcsIHN0cnVjdCBmcmFnbWVudCAqZnJhZywKKwkJCSAgICAgIGludCBpbmFjY3VyYXRlX2VvZiwgdW5zaWduZWQgd3NfcnVsZSwKKwkJCSAgICAgIGludCBudGhfZnJhZ21lbnQpCit7CisJaW50IG1hdGNoX2JlZ2lubmluZywgbWF0Y2hfZW5kOworCWNvbnN0IGNoYXIgKnBhdGNoID0gZnJhZy0+cGF0Y2g7CisJaW50IHNpemUgPSBmcmFnLT5zaXplOworCWNoYXIgKm9sZCwgKm9sZGxpbmVzOworCXN0cnVjdCBzdHJidWYgbmV3bGluZXM7CisJaW50IG5ld19ibGFua19saW5lc19hdF9lbmQgPSAwOworCWludCBmb3VuZF9uZXdfYmxhbmtfbGluZXNfYXRfZW5kID0gMDsKKwlpbnQgaHVua19saW5lbnIgPSBmcmFnLT5saW5lbnI7CisJdW5zaWduZWQgbG9uZyBsZWFkaW5nLCB0cmFpbGluZzsKKwlpbnQgcG9zLCBhcHBsaWVkX3BvczsKKwlzdHJ1Y3QgaW1hZ2UgcHJlaW1hZ2U7CisJc3RydWN0IGltYWdlIHBvc3RpbWFnZTsKKworCW1lbXNldCgmcHJlaW1hZ2UsIDAsIHNpemVvZihwcmVpbWFnZSkpOworCW1lbXNldCgmcG9zdGltYWdlLCAwLCBzaXplb2YocG9zdGltYWdlKSk7CisJb2xkbGluZXMgPSB4bWFsbG9jKHNpemUpOworCXN0cmJ1Zl9pbml0KCZuZXdsaW5lcywgc2l6ZSk7CisKKwlvbGQgPSBvbGRsaW5lczsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJY2hhciBmaXJzdDsKKwkJaW50IGxlbiA9IGxpbmVsZW4ocGF0Y2gsIHNpemUpOworCQlpbnQgcGxlbjsKKwkJaW50IGFkZGVkX2JsYW5rX2xpbmUgPSAwOworCQlpbnQgaXNfYmxhbmtfY29udGV4dCA9IDA7CisJCXNpemVfdCBzdGFydDsKKworCQlpZiAoIWxlbikKKwkJCWJyZWFrOworCisJCS8qCisJCSAqICJwbGVuIiBpcyBob3cgbXVjaCBvZiB0aGUgbGluZSB3ZSBzaG91bGQgdXNlIGZvcgorCQkgKiB0aGUgYWN0dWFsIHBhdGNoIGRhdGEuIE5vcm1hbGx5IHdlIGp1c3QgcmVtb3ZlIHRoZQorCQkgKiBmaXJzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUsIGJ1dCBpZiB0aGUgbGluZSBpcworCQkgKiBmb2xsb3dlZCBieSAiXCBObyBuZXdsaW5lIiwgdGhlbiB3ZSBhbHNvIHJlbW92ZSB0aGUKKwkJICogbGFzdCBvbmUgKHdoaWNoIGlzIHRoZSBuZXdsaW5lLCBvZiBjb3Vyc2UpLgorCQkgKi8KKwkJcGxlbiA9IGxlbiAtIDE7CisJCWlmIChsZW4gPCBzaXplICYmIHBhdGNoW2xlbl0gPT0gJ1xcJykKKwkJCXBsZW4tLTsKKwkJZmlyc3QgPSAqcGF0Y2g7CisJCWlmIChzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSkgeworCQkJaWYgKGZpcnN0ID09ICctJykKKwkJCQlmaXJzdCA9ICcrJzsKKwkJCWVsc2UgaWYgKGZpcnN0ID09ICcrJykKKwkJCQlmaXJzdCA9ICctJzsKKwkJfQorCisJCXN3aXRjaCAoZmlyc3QpIHsKKwkJY2FzZSAnXG4nOgorCQkJLyogTmV3ZXIgR05VIGRpZmYsIGVtcHR5IGNvbnRleHQgbGluZSAqLworCQkJaWYgKHBsZW4gPCAwKQorCQkJCS8qIC4uLiBmb2xsb3dlZCBieSAnXE5vIG5ld2xpbmUnOyBub3RoaW5nICovCisJCQkJYnJlYWs7CisJCQkqb2xkKysgPSAnXG4nOworCQkJc3RyYnVmX2FkZGNoKCZuZXdsaW5lcywgJ1xuJyk7CisJCQlhZGRfbGluZV9pbmZvKCZwcmVpbWFnZSwgIlxuIiwgMSwgTElORV9DT01NT04pOworCQkJYWRkX2xpbmVfaW5mbygmcG9zdGltYWdlLCAiXG4iLCAxLCBMSU5FX0NPTU1PTik7CisJCQlpc19ibGFua19jb250ZXh0ID0gMTsKKwkJCWJyZWFrOworCQljYXNlICcgJzoKKwkJCWlmIChwbGVuICYmICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSAmJgorCQkJICAgIHdzX2JsYW5rX2xpbmUocGF0Y2ggKyAxLCBwbGVuLCB3c19ydWxlKSkKKwkJCQlpc19ibGFua19jb250ZXh0ID0gMTsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgJy0nOgorCQkJbWVtY3B5KG9sZCwgcGF0Y2ggKyAxLCBwbGVuKTsKKwkJCWFkZF9saW5lX2luZm8oJnByZWltYWdlLCBvbGQsIHBsZW4sCisJCQkJICAgICAgKGZpcnN0ID09ICcgJyA/IExJTkVfQ09NTU9OIDogMCkpOworCQkJb2xkICs9IHBsZW47CisJCQlpZiAoZmlyc3QgPT0gJy0nKQorCQkJCWJyZWFrOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAnKyc6CisJCQkvKiAtLW5vLWFkZCBkb2VzIG5vdCBhZGQgbmV3IGxpbmVzICovCisJCQlpZiAoZmlyc3QgPT0gJysnICYmIHN0YXRlLT5ub19hZGQpCisJCQkJYnJlYWs7CisKKwkJCXN0YXJ0ID0gbmV3bGluZXMubGVuOworCQkJaWYgKGZpcnN0ICE9ICcrJyB8fAorCQkJICAgICFzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvciB8fAorCQkJICAgIHN0YXRlLT53c19lcnJvcl9hY3Rpb24gIT0gY29ycmVjdF93c19lcnJvcikgeworCQkJCXN0cmJ1Zl9hZGQoJm5ld2xpbmVzLCBwYXRjaCArIDEsIHBsZW4pOworCQkJfQorCQkJZWxzZSB7CisJCQkJd3NfZml4X2NvcHkoJm5ld2xpbmVzLCBwYXRjaCArIDEsIHBsZW4sIHdzX3J1bGUsICZzdGF0ZS0+YXBwbGllZF9hZnRlcl9maXhpbmdfd3MpOworCQkJfQorCQkJYWRkX2xpbmVfaW5mbygmcG9zdGltYWdlLCBuZXdsaW5lcy5idWYgKyBzdGFydCwgbmV3bGluZXMubGVuIC0gc3RhcnQsCisJCQkJICAgICAgKGZpcnN0ID09ICcrJyA/IDAgOiBMSU5FX0NPTU1PTikpOworCQkJaWYgKGZpcnN0ID09ICcrJyAmJgorCQkJICAgICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSAmJgorCQkJICAgIHdzX2JsYW5rX2xpbmUocGF0Y2ggKyAxLCBwbGVuLCB3c19ydWxlKSkKKwkJCQlhZGRlZF9ibGFua19saW5lID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdAJzogY2FzZSAnXFwnOgorCQkJLyogSWdub3JlIGl0LCB3ZSBhbHJlYWR5IGhhbmRsZWQgaXQgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfbm9ybWFsKQorCQkJCWVycm9yKF8oImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIpLCBmaXJzdCk7CisJCQlhcHBsaWVkX3BvcyA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGFkZGVkX2JsYW5rX2xpbmUpIHsKKwkJCWlmICghbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCkKKwkJCQlmb3VuZF9uZXdfYmxhbmtfbGluZXNfYXRfZW5kID0gaHVua19saW5lbnI7CisJCQluZXdfYmxhbmtfbGluZXNfYXRfZW5kKys7CisJCX0KKwkJZWxzZSBpZiAoaXNfYmxhbmtfY29udGV4dCkKKwkJCTsKKwkJZWxzZQorCQkJbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCA9IDA7CisJCXBhdGNoICs9IGxlbjsKKwkJc2l6ZSAtPSBsZW47CisJCWh1bmtfbGluZW5yKys7CisJfQorCWlmIChpbmFjY3VyYXRlX2VvZiAmJgorCSAgICBvbGQgPiBvbGRsaW5lcyAmJiBvbGRbLTFdID09ICdcbicgJiYKKwkgICAgbmV3bGluZXMubGVuID4gMCAmJiBuZXdsaW5lcy5idWZbbmV3bGluZXMubGVuIC0gMV0gPT0gJ1xuJykgeworCQlvbGQtLTsKKwkJc3RyYnVmX3NldGxlbigmbmV3bGluZXMsIG5ld2xpbmVzLmxlbiAtIDEpOworCQlwcmVpbWFnZS5saW5lX2FsbG9jYXRlZFtwcmVpbWFnZS5uciAtIDFdLmxlbi0tOworCQlwb3N0aW1hZ2UubGluZV9hbGxvY2F0ZWRbcG9zdGltYWdlLm5yIC0gMV0ubGVuLS07CisJfQorCisJbGVhZGluZyA9IGZyYWctPmxlYWRpbmc7CisJdHJhaWxpbmcgPSBmcmFnLT50cmFpbGluZzsKKworCS8qCisJICogQSBodW5rIHRvIGNoYW5nZSBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIHdvdWxkIGJlZ2luIHdpdGgKKwkgKiBAQCAtMSxMICtOLE0gQEAKKwkgKiBidXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsLiAgLVUwIHRoYXQgaW5zZXJ0cyBiZWZvcmUgdGhlIHNlY29uZAorCSAqIGxpbmUgYWxzbyBoYXMgdGhpcyBwYXR0ZXJuLgorCSAqCisJICogQW5kIGEgaHVuayB0byBhZGQgdG8gYW4gZW1wdHkgZmlsZSB3b3VsZCBiZWdpbiB3aXRoCisJICogQEAgLTAsMCArTixNIEBACisJICoKKwkgKiBJbiBvdGhlciB3b3JkcywgYSBodW5rIHRoYXQgaXMgKGZyYWctPm9sZHBvcyA8PSAxKSB3aXRoIG9yCisJICogd2l0aG91dCBsZWFkaW5nIGNvbnRleHQgbXVzdCBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nLgorCSAqLworCW1hdGNoX2JlZ2lubmluZyA9ICghZnJhZy0+b2xkcG9zIHx8CisJCQkgICAoZnJhZy0+b2xkcG9zID09IDEgJiYgIXN0YXRlLT51bmlkaWZmX3plcm8pKTsKKworCS8qCisJICogQSBodW5rIHdpdGhvdXQgdHJhaWxpbmcgbGluZXMgbXVzdCBtYXRjaCBhdCB0aGUgZW5kLgorCSAqIEhvd2V2ZXIsIHdlIHNpbXBseSBjYW5ub3QgdGVsbCBpZiBhIGh1bmsgbXVzdCBtYXRjaCBlbmQKKwkgKiBmcm9tIHRoZSBsYWNrIG9mIHRyYWlsaW5nIGxpbmVzIGlmIHRoZSBwYXRjaCB3YXMgZ2VuZXJhdGVkCisJICogd2l0aCB1bmlkaWZmIHdpdGhvdXQgYW55IGNvbnRleHQuCisJICovCisJbWF0Y2hfZW5kID0gIXN0YXRlLT51bmlkaWZmX3plcm8gJiYgIXRyYWlsaW5nOworCisJcG9zID0gZnJhZy0+bmV3cG9zID8gKGZyYWctPm5ld3BvcyAtIDEpIDogMDsKKwlwcmVpbWFnZS5idWYgPSBvbGRsaW5lczsKKwlwcmVpbWFnZS5sZW4gPSBvbGQgLSBvbGRsaW5lczsKKwlwb3N0aW1hZ2UuYnVmID0gbmV3bGluZXMuYnVmOworCXBvc3RpbWFnZS5sZW4gPSBuZXdsaW5lcy5sZW47CisJcHJlaW1hZ2UubGluZSA9IHByZWltYWdlLmxpbmVfYWxsb2NhdGVkOworCXBvc3RpbWFnZS5saW5lID0gcG9zdGltYWdlLmxpbmVfYWxsb2NhdGVkOworCisJZm9yICg7OykgeworCisJCWFwcGxpZWRfcG9zID0gZmluZF9wb3Moc3RhdGUsIGltZywgJnByZWltYWdlLCAmcG9zdGltYWdlLCBwb3MsCisJCQkJICAgICAgIHdzX3J1bGUsIG1hdGNoX2JlZ2lubmluZywgbWF0Y2hfZW5kKTsKKworCQlpZiAoYXBwbGllZF9wb3MgPj0gMCkKKwkJCWJyZWFrOworCisJCS8qIEFtIEkgYXQgbXkgY29udGV4dCBsaW1pdHM/ICovCisJCWlmICgobGVhZGluZyA8PSBzdGF0ZS0+cF9jb250ZXh0KSAmJiAodHJhaWxpbmcgPD0gc3RhdGUtPnBfY29udGV4dCkpCisJCQlicmVhazsKKwkJaWYgKG1hdGNoX2JlZ2lubmluZyB8fCBtYXRjaF9lbmQpIHsKKwkJCW1hdGNoX2JlZ2lubmluZyA9IG1hdGNoX2VuZCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFJlZHVjZSB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbGluZXM7IHJlZHVjZSBib3RoCisJCSAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGlmIHRoZXkgYXJlIGVxdWFsIG90aGVyd2lzZQorCQkgKiBqdXN0IHJlZHVjZSB0aGUgbGFyZ2VyIGNvbnRleHQuCisJCSAqLworCQlpZiAobGVhZGluZyA+PSB0cmFpbGluZykgeworCQkJcmVtb3ZlX2ZpcnN0X2xpbmUoJnByZWltYWdlKTsKKwkJCXJlbW92ZV9maXJzdF9saW5lKCZwb3N0aW1hZ2UpOworCQkJcG9zLS07CisJCQlsZWFkaW5nLS07CisJCX0KKwkJaWYgKHRyYWlsaW5nID4gbGVhZGluZykgeworCQkJcmVtb3ZlX2xhc3RfbGluZSgmcHJlaW1hZ2UpOworCQkJcmVtb3ZlX2xhc3RfbGluZSgmcG9zdGltYWdlKTsKKwkJCXRyYWlsaW5nLS07CisJCX0KKwl9CisKKwlpZiAoYXBwbGllZF9wb3MgPj0gMCkgeworCQlpZiAobmV3X2JsYW5rX2xpbmVzX2F0X2VuZCAmJgorCQkgICAgcHJlaW1hZ2UubnIgKyBhcHBsaWVkX3BvcyA+PSBpbWctPm5yICYmCisJCSAgICAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkJICAgIHN0YXRlLT53c19lcnJvcl9hY3Rpb24gIT0gbm93YXJuX3dzX2Vycm9yKSB7CisJCQlyZWNvcmRfd3NfZXJyb3Ioc3RhdGUsIFdTX0JMQU5LX0FUX0VPRiwgIisiLCAxLAorCQkJCQlmb3VuZF9uZXdfYmxhbmtfbGluZXNfYXRfZW5kKTsKKwkJCWlmIChzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID09IGNvcnJlY3Rfd3NfZXJyb3IpIHsKKwkJCQl3aGlsZSAobmV3X2JsYW5rX2xpbmVzX2F0X2VuZC0tKQorCQkJCQlyZW1vdmVfbGFzdF9saW5lKCZwb3N0aW1hZ2UpOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIHdvdWxkIHdhbnQgdG8gcHJldmVudCB3cml0ZV9vdXRfcmVzdWx0cygpCisJCQkgKiBmcm9tIHRha2luZyBwbGFjZSBpbiBhcHBseV9wYXRjaCgpIHRoYXQgZm9sbG93cworCQkJICogdGhlIGNhbGxjaGFpbiBsZWQgdXMgaGVyZSwgd2hpY2ggaXM6CisJCQkgKiBhcHBseV9wYXRjaC0+Y2hlY2tfcGF0Y2hfbGlzdC0+Y2hlY2tfcGF0Y2gtPgorCQkJICogYXBwbHlfZGF0YS0+YXBwbHlfZnJhZ21lbnRzLT5hcHBseV9vbmVfZnJhZ21lbnQKKwkJCSAqLworCQkJaWYgKHN0YXRlLT53c19lcnJvcl9hY3Rpb24gPT0gZGllX29uX3dzX2Vycm9yKQorCQkJCXN0YXRlLT5hcHBseSA9IDA7CisJCX0KKworCQlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9ub3JtYWwgJiYgYXBwbGllZF9wb3MgIT0gcG9zKSB7CisJCQlpbnQgb2Zmc2V0ID0gYXBwbGllZF9wb3MgLSBwb3M7CisJCQlpZiAoc3RhdGUtPmFwcGx5X2luX3JldmVyc2UpCisJCQkJb2Zmc2V0ID0gMCAtIG9mZnNldDsKKwkJCWZwcmludGZfbG4oc3RkZXJyLAorCQkJCSAgIFFfKCJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iLAorCQkJCSAgICAgICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIiwKKwkJCQkgICAgICBvZmZzZXQpLAorCQkJCSAgIG50aF9mcmFnbWVudCwgYXBwbGllZF9wb3MgKyAxLCBvZmZzZXQpOworCQl9CisKKwkJLyoKKwkJICogV2FybiBpZiBpdCB3YXMgbmVjZXNzYXJ5IHRvIHJlZHVjZSB0aGUgbnVtYmVyCisJCSAqIG9mIGNvbnRleHQgbGluZXMuCisJCSAqLworCQlpZiAoKGxlYWRpbmcgIT0gZnJhZy0+bGVhZGluZyB8fAorCQkgICAgIHRyYWlsaW5nICE9IGZyYWctPnRyYWlsaW5nKSAmJiBzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIgorCQkJCQkgICAgICIgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiKSwKKwkJCQkgICBsZWFkaW5nLCB0cmFpbGluZywgYXBwbGllZF9wb3MrMSk7CisJCXVwZGF0ZV9pbWFnZShzdGF0ZSwgaW1nLCBhcHBsaWVkX3BvcywgJnByZWltYWdlLCAmcG9zdGltYWdlKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9ub3JtYWwpCisJCQllcnJvcihfKCJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuJS4qcyIpLAorCQkJICAgICAgKGludCkob2xkIC0gb2xkbGluZXMpLCBvbGRsaW5lcyk7CisJfQorCitvdXQ6CisJZnJlZShvbGRsaW5lcyk7CisJc3RyYnVmX3JlbGVhc2UoJm5ld2xpbmVzKTsKKwlmcmVlKHByZWltYWdlLmxpbmVfYWxsb2NhdGVkKTsKKwlmcmVlKHBvc3RpbWFnZS5saW5lX2FsbG9jYXRlZCk7CisKKwlyZXR1cm4gKGFwcGxpZWRfcG9zIDwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfYmluYXJ5X2ZyYWdtZW50KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJIHN0cnVjdCBpbWFnZSAqaW1nLAorCQkJCSBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQgPSBwYXRjaC0+ZnJhZ21lbnRzOworCXVuc2lnbmVkIGxvbmcgbGVuOworCXZvaWQgKmRzdDsKKworCWlmICghZnJhZ21lbnQpCisJCXJldHVybiBlcnJvcihfKCJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIiksCisJCQkgICAgIHBhdGNoLT5uZXdfbmFtZSA/CisJCQkgICAgIHBhdGNoLT5uZXdfbmFtZSA6CisJCQkgICAgIHBhdGNoLT5vbGRfbmFtZSk7CisKKwkvKiBCaW5hcnkgcGF0Y2ggaXMgaXJyZXZlcnNpYmxlIHdpdGhvdXQgdGhlIG9wdGlvbmFsIHNlY29uZCBodW5rICovCisJaWYgKHN0YXRlLT5hcHBseV9pbl9yZXZlcnNlKSB7CisJCWlmICghZnJhZ21lbnQtPm5leHQpCisJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggIgorCQkJCSAgICAgICAid2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciKSwKKwkJCQkgICAgIHBhdGNoLT5uZXdfbmFtZQorCQkJCSAgICAgPyBwYXRjaC0+bmV3X25hbWUgOiBwYXRjaC0+b2xkX25hbWUpOworCQlmcmFnbWVudCA9IGZyYWdtZW50LT5uZXh0OworCX0KKwlzd2l0Y2ggKGZyYWdtZW50LT5iaW5hcnlfcGF0Y2hfbWV0aG9kKSB7CisJY2FzZSBCSU5BUllfREVMVEFfREVGTEFURUQ6CisJCWRzdCA9IHBhdGNoX2RlbHRhKGltZy0+YnVmLCBpbWctPmxlbiwgZnJhZ21lbnQtPnBhdGNoLAorCQkJCSAgZnJhZ21lbnQtPnNpemUsICZsZW4pOworCQlpZiAoIWRzdCkKKwkJCXJldHVybiAtMTsKKwkJY2xlYXJfaW1hZ2UoaW1nKTsKKwkJaW1nLT5idWYgPSBkc3Q7CisJCWltZy0+bGVuID0gbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIEJJTkFSWV9MSVRFUkFMX0RFRkxBVEVEOgorCQljbGVhcl9pbWFnZShpbWcpOworCQlpbWctPmxlbiA9IGZyYWdtZW50LT5zaXplOworCQlpbWctPmJ1ZiA9IHhtZW1kdXB6KGZyYWdtZW50LT5wYXRjaCwgaW1nLT5sZW4pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICogUmVwbGFjZSAiaW1nIiB3aXRoIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIGJpbmFyeSBwYXRjaC4KKyAqIFRoZSBiaW5hcnkgcGF0Y2ggZGF0YSBpdHNlbGYgaW4gcGF0Y2gtPmZyYWdtZW50IGlzIHN0aWxsIGtlcHQKKyAqIGJ1dCB0aGUgcHJlaW1hZ2UgcHJlcGFyZWQgYnkgdGhlIGNhbGxlciBpbiAiaW1nIiBpcyBmcmVlZCBoZXJlCisgKiBvciBpbiB0aGUgaGVscGVyIGZ1bmN0aW9uIGFwcGx5X2JpbmFyeV9mcmFnbWVudCgpIHRoaXMgY2FsbHMuCisgKi8KK3N0YXRpYyBpbnQgYXBwbHlfYmluYXJ5KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQlzdHJ1Y3QgaW1hZ2UgKmltZywKKwkJCXN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IHBhdGNoLT5vbGRfbmFtZSA/IHBhdGNoLT5vbGRfbmFtZSA6IHBhdGNoLT5uZXdfbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCB1bnNpZ25lZCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJLyoKKwkgKiBGb3Igc2FmZXR5LCB3ZSByZXF1aXJlIHBhdGNoIGluZGV4IGxpbmUgdG8gY29udGFpbgorCSAqIGZ1bGwgaGV4IHRleHR1YWwgb2JqZWN0IElEIGZvciBvbGQgYW5kIG5ldywgYXQgbGVhc3QgZm9yIG5vdy4KKwkgKi8KKwlpZiAoc3RybGVuKHBhdGNoLT5vbGRfb2lkX3ByZWZpeCkgIT0gaGV4c3ogfHwKKwkgICAgc3RybGVuKHBhdGNoLT5uZXdfb2lkX3ByZWZpeCkgIT0gaGV4c3ogfHwKKwkgICAgZ2V0X29pZF9oZXgocGF0Y2gtPm9sZF9vaWRfcHJlZml4LCAmb2lkKSB8fAorCSAgICBnZXRfb2lkX2hleChwYXRjaC0+bmV3X29pZF9wcmVmaXgsICZvaWQpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnICIKKwkJCSAgICAgICAid2l0aG91dCBmdWxsIGluZGV4IGxpbmUiKSwgbmFtZSk7CisKKwlpZiAocGF0Y2gtPm9sZF9uYW1lKSB7CisJCS8qCisJCSAqIFNlZSBpZiB0aGUgb2xkIG9uZSBtYXRjaGVzIHdoYXQgdGhlIHBhdGNoCisJCSAqIGFwcGxpZXMgdG8uCisJCSAqLworCQloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGltZy0+YnVmLCBpbWctPmxlbiwgYmxvYl90eXBlLAorCQkJCSAmb2lkKTsKKwkJaWYgKHN0cmNtcChvaWRfdG9faGV4KCZvaWQpLCBwYXRjaC0+b2xkX29pZF9wcmVmaXgpKQorCQkJcmV0dXJuIGVycm9yKF8oInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgIgorCQkJCSAgICAgICAid2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlICIKKwkJCQkgICAgICAgImN1cnJlbnQgY29udGVudHMuIiksCisJCQkJICAgICBuYW1lLCBvaWRfdG9faGV4KCZvaWQpKTsKKwl9CisJZWxzZSB7CisJCS8qIE90aGVyd2lzZSwgdGhlIG9sZCBvbmUgbXVzdCBiZSBlbXB0eS4gKi8KKwkJaWYgKGltZy0+bGVuKQorCQkJcmV0dXJuIGVycm9yKF8oInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICIKKwkJCQkgICAgICAgIiclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIpLCBuYW1lKTsKKwl9CisKKwlnZXRfb2lkX2hleChwYXRjaC0+bmV3X29pZF9wcmVmaXgsICZvaWQpOworCWlmIChpc19udWxsX29pZCgmb2lkKSkgeworCQljbGVhcl9pbWFnZShpbWcpOworCQlyZXR1cm4gMDsgLyogZGVsZXRpb24gcGF0Y2ggKi8KKwl9CisKKwlpZiAoaGFzX29iamVjdF9maWxlKCZvaWQpKSB7CisJCS8qIFdlIGFscmVhZHkgaGF2ZSB0aGUgcG9zdGltYWdlICovCisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpyZXN1bHQ7CisKKwkJcmVzdWx0ID0gcmVhZF9vYmplY3RfZmlsZSgmb2lkLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIXJlc3VsdCkKKwkJCXJldHVybiBlcnJvcihfKCJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgIgorCQkJCSAgICAgICAiJyVzJyBjYW5ub3QgYmUgcmVhZCIpLAorCQkJCSAgICAgcGF0Y2gtPm5ld19vaWRfcHJlZml4LCBuYW1lKTsKKwkJY2xlYXJfaW1hZ2UoaW1nKTsKKwkJaW1nLT5idWYgPSByZXN1bHQ7CisJCWltZy0+bGVuID0gc2l6ZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSBoYXZlIHZlcmlmaWVkIGJ1ZiBtYXRjaGVzIHRoZSBwcmVpbWFnZTsKKwkJICogYXBwbHkgdGhlIHBhdGNoIGRhdGEgdG8gaXQsIHdoaWNoIGlzIHN0b3JlZAorCQkgKiBpbiB0aGUgcGF0Y2gtPmZyYWdtZW50cy0+e3BhdGNoLHNpemV9LgorCQkgKi8KKwkJaWYgKGFwcGx5X2JpbmFyeV9mcmFnbWVudChzdGF0ZSwgaW1nLCBwYXRjaCkpCisJCQlyZXR1cm4gZXJyb3IoXygiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciKSwKKwkJCQkgICAgIG5hbWUpOworCisJCS8qIHZlcmlmeSB0aGF0IHRoZSByZXN1bHQgbWF0Y2hlcyAqLworCQloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGltZy0+YnVmLCBpbWctPmxlbiwgYmxvYl90eXBlLAorCQkJCSAmb2lkKTsKKwkJaWYgKHN0cmNtcChvaWRfdG9faGV4KCZvaWQpLCBwYXRjaC0+bmV3X29pZF9wcmVmaXgpKQorCQkJcmV0dXJuIGVycm9yKF8oImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIiksCisJCQkJbmFtZSwgcGF0Y2gtPm5ld19vaWRfcHJlZml4LCBvaWRfdG9faGV4KCZvaWQpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9mcmFnbWVudHMoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IGltYWdlICppbWcsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IGZyYWdtZW50ICpmcmFnID0gcGF0Y2gtPmZyYWdtZW50czsKKwljb25zdCBjaGFyICpuYW1lID0gcGF0Y2gtPm9sZF9uYW1lID8gcGF0Y2gtPm9sZF9uYW1lIDogcGF0Y2gtPm5ld19uYW1lOworCXVuc2lnbmVkIHdzX3J1bGUgPSBwYXRjaC0+d3NfcnVsZTsKKwl1bnNpZ25lZCBpbmFjY3VyYXRlX2VvZiA9IHBhdGNoLT5pbmFjY3VyYXRlX2VvZjsKKwlpbnQgbnRoID0gMDsKKworCWlmIChwYXRjaC0+aXNfYmluYXJ5KQorCQlyZXR1cm4gYXBwbHlfYmluYXJ5KHN0YXRlLCBpbWcsIHBhdGNoKTsKKworCXdoaWxlIChmcmFnKSB7CisJCW50aCsrOworCQlpZiAoYXBwbHlfb25lX2ZyYWdtZW50KHN0YXRlLCBpbWcsIGZyYWcsIGluYWNjdXJhdGVfZW9mLCB3c19ydWxlLCBudGgpKSB7CisJCQllcnJvcihfKCJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIpLCBuYW1lLCBmcmFnLT5vbGRwb3MpOworCQkJaWYgKCFzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QpCisJCQkJcmV0dXJuIC0xOworCQkJZnJhZy0+cmVqZWN0ZWQgPSAxOworCQl9CisJCWZyYWcgPSBmcmFnLT5uZXh0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2Jsb2Jfb2JqZWN0KHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB1bnNpZ25lZCBtb2RlKQoreworCWlmIChTX0lTR0lUTElOSyhtb2RlKSkgeworCQlzdHJidWZfZ3JvdyhidWYsIDEwMCk7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIlN1YnByb2plY3QgY29tbWl0ICVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCX0gZWxzZSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzejsKKwkJY2hhciAqcmVzdWx0OworCisJCXJlc3VsdCA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnN6KTsKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXR1cm4gLTE7CisJCS8qIFhYWCByZWFkX3NoYTFfZmlsZSBOVUwtdGVybWluYXRlcyAqLworCQlzdHJidWZfYXR0YWNoKGJ1ZiwgcmVzdWx0LCBzeiwgc3ogKyAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9maWxlX29yX2dpdGxpbmsoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWlmICghY2UpCisJCXJldHVybiAwOworCXJldHVybiByZWFkX2Jsb2Jfb2JqZWN0KGJ1ZiwgJmNlLT5vaWQsIGNlLT5jZV9tb2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYXRjaCAqaW5fZm5fdGFibGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmIChuYW1lID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cCgmc3RhdGUtPmZuX3RhYmxlLCBuYW1lKTsKKwlpZiAoaXRlbSAhPSBOVUxMKQorCQlyZXR1cm4gKHN0cnVjdCBwYXRjaCAqKWl0ZW0tPnV0aWw7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGl0ZW0tPnV0aWwgaW4gdGhlIGZpbGVuYW1lIHRhYmxlIHJlY29yZHMgdGhlIHN0YXR1cyBvZiB0aGUgcGF0aC4KKyAqIFVzdWFsbHkgaXQgcG9pbnRzIGF0IGEgcGF0Y2ggKHdob3NlIHJlc3VsdCByZWNvcmRzIHRoZSBjb250ZW50cworICogb2YgaXQgYWZ0ZXIgYXBwbHlpbmcgaXQpLCBidXQgaXQgY291bGQgYmUgUEFUSF9XQVNfREVMRVRFRCBmb3IgYQorICogcGF0aCB0aGF0IGEgcHJldmlvdXNseSBhcHBsaWVkIHBhdGNoIGhhcyBhbHJlYWR5IHJlbW92ZWQsIG9yCisgKiBQQVRIX1RPX0JFX0RFTEVURUQgZm9yIGEgcGF0aCB0aGF0IGEgbGF0ZXIgcGF0Y2ggd291bGQgcmVtb3ZlLgorICoKKyAqIFRoZSBsYXR0ZXIgaXMgbmVlZGVkIHRvIGRlYWwgd2l0aCBhIGNhc2Ugd2hlcmUgdHdvIHBhdGhzIEEgYW5kIEIKKyAqIGFyZSBzd2FwcGVkIGJ5IGZpcnN0IHJlbmFtaW5nIEEgdG8gQiBhbmQgdGhlbiByZW5hbWluZyBCIHRvIEE7CisgKiBtb3ZpbmcgQSB0byBCIHNob3VsZCBub3QgYmUgcHJldmVudGVkIGR1ZSB0byBwcmVzZW5jZSBvZiBCIGFzIHdlCisgKiB3aWxsIHJlbW92ZSBpdCBpbiBhIGxhdGVyIHBhdGNoLgorICovCisjZGVmaW5lIFBBVEhfVE9fQkVfREVMRVRFRCAoKHN0cnVjdCBwYXRjaCAqKSAtMikKKyNkZWZpbmUgUEFUSF9XQVNfREVMRVRFRCAoKHN0cnVjdCBwYXRjaCAqKSAtMSkKKworc3RhdGljIGludCB0b19iZV9kZWxldGVkKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuIHBhdGNoID09IFBBVEhfVE9fQkVfREVMRVRFRDsKK30KKworc3RhdGljIGludCB3YXNfZGVsZXRlZChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiBwYXRjaCA9PSBQQVRIX1dBU19ERUxFVEVEOworfQorCitzdGF0aWMgdm9pZCBhZGRfdG9fZm5fdGFibGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCS8qCisJICogQWx3YXlzIGFkZCBuZXdfbmFtZSB1bmxlc3MgcGF0Y2ggaXMgYSBkZWxldGlvbgorCSAqIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSBjYXNlcyBmb3Igbm9ybWFsIGRpZmZzLAorCSAqIGZpbGUgY3JlYXRpb25zIGFuZCBjb3BpZXMKKwkgKi8KKwlpZiAocGF0Y2gtPm5ld19uYW1lICE9IE5VTEwpIHsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmc3RhdGUtPmZuX3RhYmxlLCBwYXRjaC0+bmV3X25hbWUpOworCQlpdGVtLT51dGlsID0gcGF0Y2g7CisJfQorCisJLyoKKwkgKiBzdG9yZSBhIGZhaWx1cmUgb24gcmVuYW1lL2RlbGV0aW9uIGNhc2VzIGJlY2F1c2UKKwkgKiBsYXRlciBjaHVua3Mgc2hvdWxkbid0IHBhdGNoIG9sZCBuYW1lcworCSAqLworCWlmICgocGF0Y2gtPm5ld19uYW1lID09IE5VTEwpIHx8IChwYXRjaC0+aXNfcmVuYW1lKSkgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZzdGF0ZS0+Zm5fdGFibGUsIHBhdGNoLT5vbGRfbmFtZSk7CisJCWl0ZW0tPnV0aWwgPSBQQVRIX1dBU19ERUxFVEVEOworCX0KK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9mbl90YWJsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCS8qCisJICogc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgaW5jb21pbmcgZmlsZSBkZWxldGlvbgorCSAqLworCXdoaWxlIChwYXRjaCkgeworCQlpZiAoKHBhdGNoLT5uZXdfbmFtZSA9PSBOVUxMKSB8fCAocGF0Y2gtPmlzX3JlbmFtZSkpIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmc3RhdGUtPmZuX3RhYmxlLCBwYXRjaC0+b2xkX25hbWUpOworCQkJaXRlbS0+dXRpbCA9IFBBVEhfVE9fQkVfREVMRVRFRDsKKwkJfQorCQlwYXRjaCA9IHBhdGNoLT5uZXh0OworCX0KK30KKworc3RhdGljIGludCBjaGVja291dF90YXJnZXQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJc3RydWN0IGNoZWNrb3V0IGNvc3RhdGUgPSBDSEVDS09VVF9JTklUOworCisJY29zdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwljb3N0YXRlLmlzdGF0ZSA9IGlzdGF0ZTsKKwlpZiAoY2hlY2tvdXRfZW50cnkoY2UsICZjb3N0YXRlLCBOVUxMLCBOVUxMKSB8fAorCSAgICBsc3RhdChjZS0+bmFtZSwgc3QpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGNoZWNrb3V0ICVzIiksIGNlLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwYXRjaCAqcHJldmlvdXNfcGF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgc3RydWN0IHBhdGNoICpwYXRjaCwKKwkJCQkgICAgaW50ICpnb25lKQoreworCXN0cnVjdCBwYXRjaCAqcHJldmlvdXM7CisKKwkqZ29uZSA9IDA7CisJaWYgKHBhdGNoLT5pc19jb3B5IHx8IHBhdGNoLT5pc19yZW5hbWUpCisJCXJldHVybiBOVUxMOyAvKiAiZ2l0IiBwYXRjaGVzIGRvIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVyICovCisKKwlwcmV2aW91cyA9IGluX2ZuX3RhYmxlKHN0YXRlLCBwYXRjaC0+b2xkX25hbWUpOworCWlmICghcHJldmlvdXMpCisJCXJldHVybiBOVUxMOworCisJaWYgKHRvX2JlX2RlbGV0ZWQocHJldmlvdXMpKQorCQlyZXR1cm4gTlVMTDsgLyogdGhlIGRlbGV0aW9uIGhhc24ndCBoYXBwZW5lZCB5ZXQgKi8KKworCWlmICh3YXNfZGVsZXRlZChwcmV2aW91cykpCisJCSpnb25lID0gMTsKKworCXJldHVybiBwcmV2aW91czsKK30KKworc3RhdGljIGludCB2ZXJpZnlfaW5kZXhfbWF0Y2goc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkgeworCQlpZiAoIVNfSVNESVIoc3QtPnN0X21vZGUpKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGllX21hdGNoX3N0YXQoc3RhdGUtPnJlcG8tPmluZGV4LCBjZSwgc3QsCisJCQkgICAgIENFX01BVENIX0lHTk9SRV9WQUxJRCB8IENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFKTsKK30KKworI2RlZmluZSBTVUJNT0RVTEVfUEFUQ0hfV0lUSE9VVF9JTkRFWCAxCisKK3N0YXRpYyBpbnQgbG9hZF9wYXRjaF90YXJnZXQoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgICBzdHJ1Y3Qgc3RhdCAqc3QsCisJCQkgICAgIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIHVuc2lnbmVkIGV4cGVjdGVkX21vZGUpCit7CisJaWYgKHN0YXRlLT5jYWNoZWQgfHwgc3RhdGUtPmNoZWNrX2luZGV4KSB7CisJCWlmIChyZWFkX2ZpbGVfb3JfZ2l0bGluayhjZSwgYnVmKSkKKwkJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gcmVhZCAlcyIpLCBuYW1lKTsKKwl9IGVsc2UgaWYgKG5hbWUpIHsKKwkJaWYgKFNfSVNHSVRMSU5LKGV4cGVjdGVkX21vZGUpKSB7CisJCQlpZiAoY2UpCisJCQkJcmV0dXJuIHJlYWRfZmlsZV9vcl9naXRsaW5rKGNlLCBidWYpOworCQkJZWxzZQorCQkJCXJldHVybiBTVUJNT0RVTEVfUEFUQ0hfV0lUSE9VVF9JTkRFWDsKKwkJfSBlbHNlIGlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgobmFtZSwgc3RybGVuKG5hbWUpKSkgeworCQkJcmV0dXJuIGVycm9yKF8oInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiKSwgbmFtZSk7CisJCX0gZWxzZSB7CisJCQlpZiAocmVhZF9vbGRfZGF0YShzdCwgcGF0Y2gsIG5hbWUsIGJ1ZikpCisJCQkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byByZWFkICVzIiksIG5hbWUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogV2UgYXJlIGFib3V0IHRvIGFwcGx5ICJwYXRjaCI7IHBvcHVsYXRlIHRoZSAiaW1hZ2UiIHdpdGggdGhlCisgKiBjdXJyZW50IHZlcnNpb24gd2UgaGF2ZSwgZnJvbSB0aGUgd29ya2luZyB0cmVlIG9yIGZyb20gdGhlIGluZGV4LAorICogZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb24gZS5nLiAtLWNhY2hlZC8tLWluZGV4LiAgSWYgd2UgYXJlCisgKiBhcHBseWluZyBhIG5vbi1naXQgcGF0Y2ggdGhhdCBpbmNyZW1lbnRhbGx5IHVwZGF0ZXMgdGhlIHRyZWUsCisgKiB3ZSByZWFkIGZyb20gdGhlIHJlc3VsdCBvZiBhIHByZXZpb3VzIGRpZmYuCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9wcmVpbWFnZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJIHN0cnVjdCBpbWFnZSAqaW1hZ2UsCisJCQkgc3RydWN0IHBhdGNoICpwYXRjaCwgc3RydWN0IHN0YXQgKnN0LAorCQkJIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgbGVuOworCWNoYXIgKmltZzsKKwlzdHJ1Y3QgcGF0Y2ggKnByZXZpb3VzOworCWludCBzdGF0dXM7CisKKwlwcmV2aW91cyA9IHByZXZpb3VzX3BhdGNoKHN0YXRlLCBwYXRjaCwgJnN0YXR1cyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIiksCisJCQkgICAgIHBhdGNoLT5vbGRfbmFtZSk7CisJaWYgKHByZXZpb3VzKSB7CisJCS8qIFdlIGhhdmUgYSBwYXRjaGVkIGNvcHkgaW4gbWVtb3J5OyB1c2UgdGhhdC4gKi8KKwkJc3RyYnVmX2FkZCgmYnVmLCBwcmV2aW91cy0+cmVzdWx0LCBwcmV2aW91cy0+cmVzdWx0c2l6ZSk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gbG9hZF9wYXRjaF90YXJnZXQoc3RhdGUsICZidWYsIGNlLCBzdCwgcGF0Y2gsCisJCQkJCSAgIHBhdGNoLT5vbGRfbmFtZSwgcGF0Y2gtPm9sZF9tb2RlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQllbHNlIGlmIChzdGF0dXMgPT0gU1VCTU9EVUxFX1BBVENIX1dJVEhPVVRfSU5ERVgpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBubyB3YXkgdG8gYXBwbHkgc3VicHJvamVjdAorCQkJICogcGF0Y2ggd2l0aG91dCBsb29raW5nIGF0IHRoZSBpbmRleC4KKwkJCSAqIE5FRURTV09SSzogc2hvdWxkbid0IHRoaXMgYmUgZmxhZ2dlZAorCQkJICogYXMgYW4gZXJyb3I/Pz8KKwkJCSAqLworCQkJZnJlZV9mcmFnbWVudF9saXN0KHBhdGNoLT5mcmFnbWVudHMpOworCQkJcGF0Y2gtPmZyYWdtZW50cyA9IE5VTEw7CisJCX0gZWxzZSBpZiAoc3RhdHVzKSB7CisJCQlyZXR1cm4gZXJyb3IoXygiZmFpbGVkIHRvIHJlYWQgJXMiKSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwkJfQorCX0KKworCWltZyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJmxlbik7CisJcHJlcGFyZV9pbWFnZShpbWFnZSwgaW1nLCBsZW4sICFwYXRjaC0+aXNfYmluYXJ5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aHJlZV93YXlfbWVyZ2Uoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgIHN0cnVjdCBpbWFnZSAqaW1hZ2UsCisJCQkgICBjaGFyICpwYXRoLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm91cnMsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0aGVpcnMpCit7CisJbW1maWxlX3QgYmFzZV9maWxlLCBvdXJfZmlsZSwgdGhlaXJfZmlsZTsKKwltbWJ1ZmZlcl90IHJlc3VsdCA9IHsgTlVMTCB9OworCWludCBzdGF0dXM7CisKKwlyZWFkX21tYmxvYigmYmFzZV9maWxlLCBiYXNlKTsKKwlyZWFkX21tYmxvYigmb3VyX2ZpbGUsIG91cnMpOworCXJlYWRfbW1ibG9iKCZ0aGVpcl9maWxlLCB0aGVpcnMpOworCXN0YXR1cyA9IGxsX21lcmdlKCZyZXN1bHQsIHBhdGgsCisJCQkgICZiYXNlX2ZpbGUsICJiYXNlIiwKKwkJCSAgJm91cl9maWxlLCAib3VycyIsCisJCQkgICZ0aGVpcl9maWxlLCAidGhlaXJzIiwKKwkJCSAgc3RhdGUtPnJlcG8tPmluZGV4LAorCQkJICBOVUxMKTsKKwlmcmVlKGJhc2VfZmlsZS5wdHIpOworCWZyZWUob3VyX2ZpbGUucHRyKTsKKwlmcmVlKHRoZWlyX2ZpbGUucHRyKTsKKwlpZiAoc3RhdHVzIDwgMCB8fCAhcmVzdWx0LnB0cikgeworCQlmcmVlKHJlc3VsdC5wdHIpOworCQlyZXR1cm4gLTE7CisJfQorCWNsZWFyX2ltYWdlKGltYWdlKTsKKwlpbWFnZS0+YnVmID0gcmVzdWx0LnB0cjsKKwlpbWFnZS0+bGVuID0gcmVzdWx0LnNpemU7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogV2hlbiBkaXJlY3RseSBmYWxsaW5nIGJhY2sgdG8gYWRkL2FkZCB0aHJlZS13YXkgbWVyZ2UsIHdlIHJlYWQgZnJvbQorICogdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIG5ld19uYW1lLiAgSW4gbm8gY2FzZXMgb3RoZXIgdGhhbiB0aGF0CisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLgorICovCitzdGF0aWMgaW50IGxvYWRfY3VycmVudChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJc3RydWN0IGltYWdlICppbWFnZSwKKwkJCXN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3RhdHVzLCBwb3M7CisJc2l6ZV90IGxlbjsKKwljaGFyICppbWc7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwljaGFyICpuYW1lID0gcGF0Y2gtPm5ld19uYW1lOworCXVuc2lnbmVkIG1vZGUgPSBwYXRjaC0+bmV3X21vZGU7CisKKwlpZiAoIXBhdGNoLT5pc19uZXcpCisJCUJVRygicGF0Y2ggdG8gJXMgaXMgbm90IGEgY3JlYXRpb24iLCBwYXRjaC0+b2xkX25hbWUpOworCisJcG9zID0gaW5kZXhfbmFtZV9wb3Moc3RhdGUtPnJlcG8tPmluZGV4LCBuYW1lLCBzdHJsZW4obmFtZSkpOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IiksIG5hbWUpOworCWNlID0gc3RhdGUtPnJlcG8tPmluZGV4LT5jYWNoZVtwb3NdOworCWlmIChsc3RhdChuYW1lLCAmc3QpKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oIiVzIiwgbmFtZSk7CisJCWlmIChjaGVja291dF90YXJnZXQoc3RhdGUtPnJlcG8tPmluZGV4LCBjZSwgJnN0KSkKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKHZlcmlmeV9pbmRleF9tYXRjaChzdGF0ZSwgY2UsICZzdCkpCisJCXJldHVybiBlcnJvcihfKCIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiKSwgbmFtZSk7CisKKwlzdGF0dXMgPSBsb2FkX3BhdGNoX3RhcmdldChzdGF0ZSwgJmJ1ZiwgY2UsICZzdCwgcGF0Y2gsIG5hbWUsIG1vZGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCWVsc2UgaWYgKHN0YXR1cykKKwkJcmV0dXJuIC0xOworCWltZyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJmxlbik7CisJcHJlcGFyZV9pbWFnZShpbWFnZSwgaW1nLCBsZW4sICFwYXRjaC0+aXNfYmluYXJ5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfdGhyZWV3YXkoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCXN0cnVjdCBpbWFnZSAqaW1hZ2UsCisJCQlzdHJ1Y3QgcGF0Y2ggKnBhdGNoLAorCQkJc3RydWN0IHN0YXQgKnN0LAorCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHByZV9vaWQsIHBvc3Rfb2lkLCBvdXJfb2lkOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGxlbjsKKwlpbnQgc3RhdHVzOworCWNoYXIgKmltZzsKKwlzdHJ1Y3QgaW1hZ2UgdG1wX2ltYWdlOworCisJLyogTm8gcG9pbnQgZmFsbGluZyBiYWNrIHRvIDMtd2F5IG1lcmdlIGluIHRoZXNlIGNhc2VzICovCisJaWYgKHBhdGNoLT5pc19kZWxldGUgfHwKKwkgICAgU19JU0dJVExJTksocGF0Y2gtPm9sZF9tb2RlKSB8fCBTX0lTR0lUTElOSyhwYXRjaC0+bmV3X21vZGUpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBQcmVpbWFnZSB0aGUgcGF0Y2ggd2FzIHByZXBhcmVkIGZvciAqLworCWlmIChwYXRjaC0+aXNfbmV3KQorCQl3cml0ZV9vYmplY3RfZmlsZSgiIiwgMCwgYmxvYl90eXBlLCAmcHJlX29pZCk7CisJZWxzZSBpZiAoZ2V0X29pZChwYXRjaC0+b2xkX29pZF9wcmVmaXgsICZwcmVfb2lkKSB8fAorCQkgcmVhZF9ibG9iX29iamVjdCgmYnVmLCAmcHJlX29pZCwgcGF0Y2gtPm9sZF9tb2RlKSkKKwkJcmV0dXJuIGVycm9yKF8oInJlcG9zaXRvcnkgbGFja3MgdGhlIG5lY2Vzc2FyeSBibG9iIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iKSk7CisKKwlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9zaWxlbnQpCisJCWZwcmludGYoc3RkZXJyLCBfKCJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iKSk7CisKKwlpbWcgPSBzdHJidWZfZGV0YWNoKCZidWYsICZsZW4pOworCXByZXBhcmVfaW1hZ2UoJnRtcF9pbWFnZSwgaW1nLCBsZW4sIDEpOworCS8qIEFwcGx5IHRoZSBwYXRjaCB0byBnZXQgdGhlIHBvc3QgaW1hZ2UgKi8KKwlpZiAoYXBwbHlfZnJhZ21lbnRzKHN0YXRlLCAmdG1wX2ltYWdlLCBwYXRjaCkgPCAwKSB7CisJCWNsZWFyX2ltYWdlKCZ0bXBfaW1hZ2UpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIHBvc3Rfb2lkIGlzIHRoZWlycyAqLworCXdyaXRlX29iamVjdF9maWxlKHRtcF9pbWFnZS5idWYsIHRtcF9pbWFnZS5sZW4sIGJsb2JfdHlwZSwgJnBvc3Rfb2lkKTsKKwljbGVhcl9pbWFnZSgmdG1wX2ltYWdlKTsKKworCS8qIG91cl9vaWQgaXMgb3VycyAqLworCWlmIChwYXRjaC0+aXNfbmV3KSB7CisJCWlmIChsb2FkX2N1cnJlbnQoc3RhdGUsICZ0bXBfaW1hZ2UsIHBhdGNoKSkKKwkJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiAnJXMnIiksCisJCQkJICAgICBwYXRjaC0+bmV3X25hbWUpOworCX0gZWxzZSB7CisJCWlmIChsb2FkX3ByZWltYWdlKHN0YXRlLCAmdG1wX2ltYWdlLCBwYXRjaCwgc3QsIGNlKSkKKwkJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiAnJXMnIiksCisJCQkJICAgICBwYXRjaC0+b2xkX25hbWUpOworCX0KKwl3cml0ZV9vYmplY3RfZmlsZSh0bXBfaW1hZ2UuYnVmLCB0bXBfaW1hZ2UubGVuLCBibG9iX3R5cGUsICZvdXJfb2lkKTsKKwljbGVhcl9pbWFnZSgmdG1wX2ltYWdlKTsKKworCS8qIGluLWNvcmUgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gcG9zdCBhbmQgb3VyIHVzaW5nIHByZSBhcyBiYXNlICovCisJc3RhdHVzID0gdGhyZWVfd2F5X21lcmdlKHN0YXRlLCBpbWFnZSwgcGF0Y2gtPm5ld19uYW1lLAorCQkJCSAmcHJlX29pZCwgJm91cl9vaWQsICZwb3N0X29pZCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIpKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpZiAoc3RhdHVzKSB7CisJCXBhdGNoLT5jb25mbGljdGVkX3RocmVld2F5ID0gMTsKKwkJaWYgKHBhdGNoLT5pc19uZXcpCisJCQlvaWRjbHIoJnBhdGNoLT50aHJlZXdheV9zdGFnZVswXSk7CisJCWVsc2UKKwkJCW9pZGNweSgmcGF0Y2gtPnRocmVld2F5X3N0YWdlWzBdLCAmcHJlX29pZCk7CisJCW9pZGNweSgmcGF0Y2gtPnRocmVld2F5X3N0YWdlWzFdLCAmb3VyX29pZCk7CisJCW9pZGNweSgmcGF0Y2gtPnRocmVld2F5X3N0YWdlWzJdLCAmcG9zdF9vaWQpOworCQlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9zaWxlbnQpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iKSwKKwkJCQlwYXRjaC0+bmV3X25hbWUpOworCX0gZWxzZSB7CisJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIiksCisJCQkJcGF0Y2gtPm5ld19uYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZGF0YShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoLAorCQkgICAgICBzdHJ1Y3Qgc3RhdCAqc3QsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IGltYWdlIGltYWdlOworCisJaWYgKGxvYWRfcHJlaW1hZ2Uoc3RhdGUsICZpbWFnZSwgcGF0Y2gsIHN0LCBjZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocGF0Y2gtPmRpcmVjdF90b190aHJlZXdheSB8fAorCSAgICBhcHBseV9mcmFnbWVudHMoc3RhdGUsICZpbWFnZSwgcGF0Y2gpIDwgMCkgeworCQkvKiBOb3RlOiB3aXRoIC0tcmVqZWN0LCBhcHBseV9mcmFnbWVudHMoKSByZXR1cm5zIDAgKi8KKwkJaWYgKCFzdGF0ZS0+dGhyZWV3YXkgfHwgdHJ5X3RocmVld2F5KHN0YXRlLCAmaW1hZ2UsIHBhdGNoLCBzdCwgY2UpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisJcGF0Y2gtPnJlc3VsdCA9IGltYWdlLmJ1ZjsKKwlwYXRjaC0+cmVzdWx0c2l6ZSA9IGltYWdlLmxlbjsKKwlhZGRfdG9fZm5fdGFibGUoc3RhdGUsIHBhdGNoKTsKKwlmcmVlKGltYWdlLmxpbmVfYWxsb2NhdGVkKTsKKworCWlmICgwIDwgcGF0Y2gtPmlzX2RlbGV0ZSAmJiBwYXRjaC0+cmVzdWx0c2l6ZSkKKwkJcmV0dXJuIGVycm9yKF8oInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmICJwYXRjaCIgdGhhdCB3ZSBhcmUgbG9va2luZyBhdCBtb2RpZmllcyBvciBkZWxldGVzIHdoYXQgd2UgaGF2ZSwKKyAqIHdlIHdvdWxkIHdhbnQgaXQgbm90IHRvIGxvc2UgYW55IGxvY2FsIG1vZGlmaWNhdGlvbiB3ZSBoYXZlLCBlaXRoZXIKKyAqIGluIHRoZSB3b3JraW5nIHRyZWUgb3IgaW4gdGhlIGluZGV4LgorICoKKyAqIFRoaXMgYWxzbyBkZWNpZGVzIGlmIGEgbm9uLWdpdCBwYXRjaCBpcyBhIGNyZWF0aW9uIHBhdGNoIG9yIGEKKyAqIG1vZGlmaWNhdGlvbiB0byBhbiBleGlzdGluZyBlbXB0eSBmaWxlLiAgV2UgZG8gbm90IGNoZWNrIHRoZSBzdGF0ZQorICogb2YgdGhlIGN1cnJlbnQgdHJlZSBmb3IgYSBjcmVhdGlvbiBwYXRjaCBpbiB0aGlzIGZ1bmN0aW9uOyB0aGUgY2FsbGVyCisgKiBjaGVja19wYXRjaCgpIHNlcGFyYXRlbHkgbWFrZXMgc3VyZSAoYW5kIGVycm9ycyBvdXQgb3RoZXJ3aXNlKSB0aGF0CisgKiB0aGUgcGF0aCB0aGUgcGF0Y2ggY3JlYXRlcyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCB0cmVlLgorICovCitzdGF0aWMgaW50IGNoZWNrX3ByZWltYWdlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQkgIHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlLAorCQkJICBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJY29uc3QgY2hhciAqb2xkX25hbWUgPSBwYXRjaC0+b2xkX25hbWU7CisJc3RydWN0IHBhdGNoICpwcmV2aW91cyA9IE5VTEw7CisJaW50IHN0YXRfcmV0ID0gMCwgc3RhdHVzOworCXVuc2lnbmVkIHN0X21vZGUgPSAwOworCisJaWYgKCFvbGRfbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlhc3NlcnQocGF0Y2gtPmlzX25ldyA8PSAwKTsKKwlwcmV2aW91cyA9IHByZXZpb3VzX3BhdGNoKHN0YXRlLCBwYXRjaCwgJnN0YXR1cyk7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gZXJyb3IoXygicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiKSwgb2xkX25hbWUpOworCWlmIChwcmV2aW91cykgeworCQlzdF9tb2RlID0gcHJldmlvdXMtPm5ld19tb2RlOworCX0gZWxzZSBpZiAoIXN0YXRlLT5jYWNoZWQpIHsKKwkJc3RhdF9yZXQgPSBsc3RhdChvbGRfbmFtZSwgc3QpOworCQlpZiAoc3RhdF9yZXQgJiYgZXJybm8gIT0gRU5PRU5UKQorCQkJcmV0dXJuIGVycm9yX2Vycm5vKCIlcyIsIG9sZF9uYW1lKTsKKwl9CisKKwlpZiAoc3RhdGUtPmNoZWNrX2luZGV4ICYmICFwcmV2aW91cykgeworCQlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3Moc3RhdGUtPnJlcG8tPmluZGV4LCBvbGRfbmFtZSwKKwkJCQkJIHN0cmxlbihvbGRfbmFtZSkpOworCQlpZiAocG9zIDwgMCkgeworCQkJaWYgKHBhdGNoLT5pc19uZXcgPCAwKQorCQkJCWdvdG8gaXNfbmV3OworCQkJcmV0dXJuIGVycm9yKF8oIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIpLCBvbGRfbmFtZSk7CisJCX0KKwkJKmNlID0gc3RhdGUtPnJlcG8tPmluZGV4LT5jYWNoZVtwb3NdOworCQlpZiAoc3RhdF9yZXQgPCAwKSB7CisJCQlpZiAoY2hlY2tvdXRfdGFyZ2V0KHN0YXRlLT5yZXBvLT5pbmRleCwgKmNlLCBzdCkpCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICghc3RhdGUtPmNhY2hlZCAmJiB2ZXJpZnlfaW5kZXhfbWF0Y2goc3RhdGUsICpjZSwgc3QpKQorCQkJcmV0dXJuIGVycm9yKF8oIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIpLCBvbGRfbmFtZSk7CisJCWlmIChzdGF0ZS0+Y2FjaGVkKQorCQkJc3RfbW9kZSA9ICgqY2UpLT5jZV9tb2RlOworCX0gZWxzZSBpZiAoc3RhdF9yZXQgPCAwKSB7CisJCWlmIChwYXRjaC0+aXNfbmV3IDwgMCkKKwkJCWdvdG8gaXNfbmV3OworCQlyZXR1cm4gZXJyb3JfZXJybm8oIiVzIiwgb2xkX25hbWUpOworCX0KKworCWlmICghc3RhdGUtPmNhY2hlZCAmJiAhcHJldmlvdXMpCisJCXN0X21vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdCgqY2UsIHN0LT5zdF9tb2RlKTsKKworCWlmIChwYXRjaC0+aXNfbmV3IDwgMCkKKwkJcGF0Y2gtPmlzX25ldyA9IDA7CisJaWYgKCFwYXRjaC0+b2xkX21vZGUpCisJCXBhdGNoLT5vbGRfbW9kZSA9IHN0X21vZGU7CisJaWYgKChzdF9tb2RlIF4gcGF0Y2gtPm9sZF9tb2RlKSAmIFNfSUZNVCkKKwkJcmV0dXJuIGVycm9yKF8oIiVzOiB3cm9uZyB0eXBlIiksIG9sZF9uYW1lKTsKKwlpZiAoc3RfbW9kZSAhPSBwYXRjaC0+b2xkX21vZGUpCisJCXdhcm5pbmcoXygiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIiksCisJCQlvbGRfbmFtZSwgc3RfbW9kZSwgcGF0Y2gtPm9sZF9tb2RlKTsKKwlpZiAoIXBhdGNoLT5uZXdfbW9kZSAmJiAhcGF0Y2gtPmlzX2RlbGV0ZSkKKwkJcGF0Y2gtPm5ld19tb2RlID0gc3RfbW9kZTsKKwlyZXR1cm4gMDsKKworIGlzX25ldzoKKwlwYXRjaC0+aXNfbmV3ID0gMTsKKwlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKwlGUkVFX0FORF9OVUxMKHBhdGNoLT5vbGRfbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKworI2RlZmluZSBFWElTVFNfSU5fSU5ERVggMQorI2RlZmluZSBFWElTVFNfSU5fV09SS1RSRUUgMgorCitzdGF0aWMgaW50IGNoZWNrX3RvX2NyZWF0ZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqbmV3X25hbWUsCisJCQkgICBpbnQgb2tfaWZfZXhpc3RzKQoreworCXN0cnVjdCBzdGF0IG5zdDsKKworCWlmIChzdGF0ZS0+Y2hlY2tfaW5kZXggJiYKKwkgICAgaW5kZXhfbmFtZV9wb3Moc3RhdGUtPnJlcG8tPmluZGV4LCBuZXdfbmFtZSwgc3RybGVuKG5ld19uYW1lKSkgPj0gMCAmJgorCSAgICAhb2tfaWZfZXhpc3RzKQorCQlyZXR1cm4gRVhJU1RTX0lOX0lOREVYOworCWlmIChzdGF0ZS0+Y2FjaGVkKQorCQlyZXR1cm4gMDsKKworCWlmICghbHN0YXQobmV3X25hbWUsICZuc3QpKSB7CisJCWlmIChTX0lTRElSKG5zdC5zdF9tb2RlKSB8fCBva19pZl9leGlzdHMpCisJCQlyZXR1cm4gMDsKKwkJLyoKKwkJICogQSBsZWFkaW5nIGNvbXBvbmVudCBvZiBuZXdfbmFtZSBtaWdodCBiZSBhIHN5bWxpbmsKKwkJICogdGhhdCBpcyBnb2luZyB0byBiZSByZW1vdmVkIHdpdGggdGhpcyBwYXRjaCwgYnV0CisJCSAqIHN0aWxsIHBvaW50aW5nIGF0IHNvbWV3aGVyZSB0aGF0IGhhcyB0aGUgcGF0aC4KKwkJICogSW4gc3VjaCBhIGNhc2UsIHBhdGggIm5ld19uYW1lIiBkb2VzIG5vdCBleGlzdCBhcworCQkgKiBmYXIgYXMgZ2l0IGlzIGNvbmNlcm5lZC4KKwkJICovCisJCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgobmV3X25hbWUsIHN0cmxlbihuZXdfbmFtZSkpKQorCQkJcmV0dXJuIDA7CisKKwkJcmV0dXJuIEVYSVNUU19JTl9XT1JLVFJFRTsKKwl9IGVsc2UgaWYgKCFpc19taXNzaW5nX2ZpbGVfZXJyb3IoZXJybm8pKSB7CisJCXJldHVybiBlcnJvcl9lcnJubygiJXMiLCBuZXdfbmFtZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdWludHB0cl90IHJlZ2lzdGVyX3N5bWxpbmtfY2hhbmdlcyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgdWludHB0cl90IHdoYXQpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmVudDsKKworCWVudCA9IHN0cmluZ19saXN0X2xvb2t1cCgmc3RhdGUtPnN5bWxpbmtfY2hhbmdlcywgcGF0aCk7CisJaWYgKCFlbnQpIHsKKwkJZW50ID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZzdGF0ZS0+c3ltbGlua19jaGFuZ2VzLCBwYXRoKTsKKwkJZW50LT51dGlsID0gKHZvaWQgKikwOworCX0KKwllbnQtPnV0aWwgPSAodm9pZCAqKSh3aGF0IHwgKCh1aW50cHRyX3QpZW50LT51dGlsKSk7CisJcmV0dXJuICh1aW50cHRyX3QpZW50LT51dGlsOworfQorCitzdGF0aWMgdWludHB0cl90IGNoZWNrX3N5bWxpbmtfY2hhbmdlcyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICplbnQ7CisKKwllbnQgPSBzdHJpbmdfbGlzdF9sb29rdXAoJnN0YXRlLT5zeW1saW5rX2NoYW5nZXMsIHBhdGgpOworCWlmICghZW50KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKHVpbnRwdHJfdCllbnQtPnV0aWw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfc3ltbGlua19jaGFuZ2VzKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJZm9yICggOyBwYXRjaDsgcGF0Y2ggPSBwYXRjaC0+bmV4dCkgeworCQlpZiAoKHBhdGNoLT5vbGRfbmFtZSAmJiBTX0lTTE5LKHBhdGNoLT5vbGRfbW9kZSkpICYmCisJCSAgICAocGF0Y2gtPmlzX3JlbmFtZSB8fCBwYXRjaC0+aXNfZGVsZXRlKSkKKwkJCS8qIHRoZSBzeW1saW5rIGF0IHBhdGNoLT5vbGRfbmFtZSBpcyByZW1vdmVkICovCisJCQlyZWdpc3Rlcl9zeW1saW5rX2NoYW5nZXMoc3RhdGUsIHBhdGNoLT5vbGRfbmFtZSwgQVBQTFlfU1lNTElOS19HT0VTX0FXQVkpOworCisJCWlmIChwYXRjaC0+bmV3X25hbWUgJiYgU19JU0xOSyhwYXRjaC0+bmV3X21vZGUpKQorCQkJLyogdGhlIHN5bWxpbmsgYXQgcGF0Y2gtPm5ld19uYW1lIGlzIGNyZWF0ZWQgb3IgcmVtYWlucyAqLworCQkJcmVnaXN0ZXJfc3ltbGlua19jaGFuZ2VzKHN0YXRlLCBwYXRjaC0+bmV3X25hbWUsIEFQUExZX1NZTUxJTktfSU5fUkVTVUxUKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGF0aF9pc19iZXlvbmRfc3ltbGlua18xKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBzdHJidWYgKm5hbWUpCit7CisJZG8geworCQl1bnNpZ25lZCBpbnQgY2hhbmdlOworCisJCXdoaWxlICgtLW5hbWUtPmxlbiAmJiBuYW1lLT5idWZbbmFtZS0+bGVuXSAhPSAnLycpCisJCQk7IC8qIHNjYW4gYmFja3dhcmRzICovCisJCWlmICghbmFtZS0+bGVuKQorCQkJYnJlYWs7CisJCW5hbWUtPmJ1ZltuYW1lLT5sZW5dID0gJ1wwJzsKKwkJY2hhbmdlID0gY2hlY2tfc3ltbGlua19jaGFuZ2VzKHN0YXRlLCBuYW1lLT5idWYpOworCQlpZiAoY2hhbmdlICYgQVBQTFlfU1lNTElOS19JTl9SRVNVTFQpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGNoYW5nZSAmIEFQUExZX1NZTUxJTktfR09FU19BV0FZKQorCQkJLyoKKwkJCSAqIFRoaXMgY2Fubm90IGJlICJyZXR1cm4gMCIsIGJlY2F1c2Ugd2UgbWF5CisJCQkgKiBzZWUgYSBuZXcgb25lIGNyZWF0ZWQgYXQgYSBoaWdoZXIgbGV2ZWwuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCisJCS8qIG90aGVyd2lzZSwgY2hlY2sgdGhlIHByZWltYWdlICovCisJCWlmIChzdGF0ZS0+Y2hlY2tfaW5kZXgpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkJCWNlID0gaW5kZXhfZmlsZV9leGlzdHMoc3RhdGUtPnJlcG8tPmluZGV4LCBuYW1lLT5idWYsCisJCQkJCSAgICAgICBuYW1lLT5sZW4sIGlnbm9yZV9jYXNlKTsKKwkJCWlmIChjZSAmJiBTX0lTTE5LKGNlLT5jZV9tb2RlKSkKKwkJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzdGF0IHN0OworCQkJaWYgKCFsc3RhdChuYW1lLT5idWYsICZzdCkgJiYgU19JU0xOSyhzdC5zdF9tb2RlKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0gd2hpbGUgKDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhdGhfaXNfYmV5b25kX3N5bWxpbmsoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbmFtZV8pCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCWFzc2VydCgqbmFtZV8gIT0gJ1wwJyk7CisJc3RyYnVmX2FkZHN0cigmbmFtZSwgbmFtZV8pOworCXJldCA9IHBhdGhfaXNfYmV5b25kX3N5bWxpbmtfMShzdGF0ZSwgJm5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfdW5zYWZlX3BhdGgoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwljb25zdCBjaGFyICpvbGRfbmFtZSA9IE5VTEw7CisJY29uc3QgY2hhciAqbmV3X25hbWUgPSBOVUxMOworCWlmIChwYXRjaC0+aXNfZGVsZXRlKQorCQlvbGRfbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKKwllbHNlIGlmICghcGF0Y2gtPmlzX25ldyAmJiAhcGF0Y2gtPmlzX2NvcHkpCisJCW9sZF9uYW1lID0gcGF0Y2gtPm9sZF9uYW1lOworCWlmICghcGF0Y2gtPmlzX2RlbGV0ZSkKKwkJbmV3X25hbWUgPSBwYXRjaC0+bmV3X25hbWU7CisKKwlpZiAob2xkX25hbWUgJiYgIXZlcmlmeV9wYXRoKG9sZF9uYW1lLCBwYXRjaC0+b2xkX21vZGUpKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBwYXRoICclcyciKSwgb2xkX25hbWUpOworCWlmIChuZXdfbmFtZSAmJiAhdmVyaWZ5X3BhdGgobmV3X25hbWUsIHBhdGNoLT5uZXdfbW9kZSkpCisJCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIHBhdGggJyVzJyIpLCBuZXdfbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBhbmQgYXBwbHkgdGhlIHBhdGNoIGluLWNvcmU7IGxlYXZlIHRoZSByZXN1bHQgaW4gcGF0Y2gtPnJlc3VsdAorICogZm9yIHRoZSBjYWxsZXIgdG8gd3JpdGUgaXQgb3V0IHRvIHRoZSBmaW5hbCBkZXN0aW5hdGlvbi4KKyAqLworc3RhdGljIGludCBjaGVja19wYXRjaChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0gcGF0Y2gtPm9sZF9uYW1lOworCWNvbnN0IGNoYXIgKm5ld19uYW1lID0gcGF0Y2gtPm5ld19uYW1lOworCWNvbnN0IGNoYXIgKm5hbWUgPSBvbGRfbmFtZSA/IG9sZF9uYW1lIDogbmV3X25hbWU7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IE5VTEw7CisJc3RydWN0IHBhdGNoICp0cGF0Y2g7CisJaW50IG9rX2lmX2V4aXN0czsKKwlpbnQgc3RhdHVzOworCisJcGF0Y2gtPnJlamVjdGVkID0gMTsgLyogd2Ugd2lsbCBkcm9wIHRoaXMgYWZ0ZXIgd2Ugc3VjY2VlZCAqLworCisJc3RhdHVzID0gY2hlY2tfcHJlaW1hZ2Uoc3RhdGUsIHBhdGNoLCAmY2UsICZzdCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlvbGRfbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKKworCS8qCisJICogQSB0eXBlLWNoYW5nZSBkaWZmIGlzIGFsd2F5cyBzcGxpdCBpbnRvIGEgcGF0Y2ggdG8gZGVsZXRlCisJICogb2xkLCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHBhdGNoIHRvIGNyZWF0ZSBuZXcgKHNlZQorCSAqIGRpZmYuYzo6cnVuX2RpZmYoKSk7IGluIHN1Y2ggYSBjYXNlIGl0IGlzIE9rIHRoYXQgdGhlIGVudHJ5CisJICogdG8gYmUgZGVsZXRlZCBieSB0aGUgcHJldmlvdXMgcGF0Y2ggaXMgc3RpbGwgaW4gdGhlIHdvcmtpbmcKKwkgKiB0cmVlIGFuZCBpbiB0aGUgaW5kZXguCisJICoKKwkgKiBBIHBhdGNoIHRvIHN3YXAtcmVuYW1lIGJldHdlZW4gQSBhbmQgQiB3b3VsZCBmaXJzdCByZW5hbWUgQQorCSAqIHRvIEIgYW5kIHRoZW4gcmVuYW1lIEIgdG8gQS4gIFdoaWxlIGFwcGx5aW5nIHRoZSBmaXJzdCBvbmUsCisJICogdGhlIHByZXNlbmNlIG9mIEIgc2hvdWxkIG5vdCBzdG9wIEEgZnJvbSBnZXR0aW5nIHJlbmFtZWQgdG8KKwkgKiBCOyBhc2sgdG9fYmVfZGVsZXRlZCgpIGFib3V0IHRoZSBsYXRlciByZW5hbWUuICBSZW1vdmFsIG9mCisJICogQiBhbmQgcmVuYW1lIGZyb20gQSB0byBCIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGJ5IGFza2luZworCSAqIHdhc19kZWxldGVkKCkuCisJICovCisJaWYgKCh0cGF0Y2ggPSBpbl9mbl90YWJsZShzdGF0ZSwgbmV3X25hbWUpKSAmJgorCSAgICAod2FzX2RlbGV0ZWQodHBhdGNoKSB8fCB0b19iZV9kZWxldGVkKHRwYXRjaCkpKQorCQlva19pZl9leGlzdHMgPSAxOworCWVsc2UKKwkJb2tfaWZfZXhpc3RzID0gMDsKKworCWlmIChuZXdfbmFtZSAmJgorCSAgICAoKDAgPCBwYXRjaC0+aXNfbmV3KSB8fCBwYXRjaC0+aXNfcmVuYW1lIHx8IHBhdGNoLT5pc19jb3B5KSkgeworCQlpbnQgZXJyID0gY2hlY2tfdG9fY3JlYXRlKHN0YXRlLCBuZXdfbmFtZSwgb2tfaWZfZXhpc3RzKTsKKworCQlpZiAoZXJyICYmIHN0YXRlLT50aHJlZXdheSkgeworCQkJcGF0Y2gtPmRpcmVjdF90b190aHJlZXdheSA9IDE7CisJCX0gZWxzZSBzd2l0Y2ggKGVycikgeworCQljYXNlIDA6CisJCQlicmVhazsgLyogaGFwcHkgKi8KKwkJY2FzZSBFWElTVFNfSU5fSU5ERVg6CisJCQlyZXR1cm4gZXJyb3IoXygiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IiksIG5ld19uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIEVYSVNUU19JTl9XT1JLVFJFRToKKwkJCXJldHVybiBlcnJvcihfKCIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiKSwKKwkJCQkgICAgIG5ld19uYW1lKTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpZiAoIXBhdGNoLT5uZXdfbW9kZSkgeworCQkJaWYgKDAgPCBwYXRjaC0+aXNfbmV3KQorCQkJCXBhdGNoLT5uZXdfbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCQkJZWxzZQorCQkJCXBhdGNoLT5uZXdfbW9kZSA9IHBhdGNoLT5vbGRfbW9kZTsKKwkJfQorCX0KKworCWlmIChuZXdfbmFtZSAmJiBvbGRfbmFtZSkgeworCQlpbnQgc2FtZSA9ICFzdHJjbXAob2xkX25hbWUsIG5ld19uYW1lKTsKKwkJaWYgKCFwYXRjaC0+bmV3X21vZGUpCisJCQlwYXRjaC0+bmV3X21vZGUgPSBwYXRjaC0+b2xkX21vZGU7CisJCWlmICgocGF0Y2gtPm9sZF9tb2RlIF4gcGF0Y2gtPm5ld19tb2RlKSAmIFNfSUZNVCkgeworCQkJaWYgKHNhbWUpCisJCQkJcmV0dXJuIGVycm9yKF8oIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgIgorCQkJCQkgICAgICAgIm1hdGNoIG9sZCBtb2RlICglbykiKSwKKwkJCQkJcGF0Y2gtPm5ld19tb2RlLCBuZXdfbmFtZSwKKwkJCQkJcGF0Y2gtPm9sZF9tb2RlKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZXJyb3IoXygibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCAiCisJCQkJCSAgICAgICAibWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIpLAorCQkJCQlwYXRjaC0+bmV3X21vZGUsIG5ld19uYW1lLAorCQkJCQlwYXRjaC0+b2xkX21vZGUsIG9sZF9uYW1lKTsKKwkJfQorCX0KKworCWlmICghc3RhdGUtPnVuc2FmZV9wYXRocyAmJiBjaGVja191bnNhZmVfcGF0aChwYXRjaCkpCisJCXJldHVybiAtMTI4OworCisJLyoKKwkgKiBBbiBhdHRlbXB0IHRvIHJlYWQgZnJvbSBvciBkZWxldGUgYSBwYXRoIHRoYXQgaXMgYmV5b25kIGEKKwkgKiBzeW1ib2xpYyBsaW5rIHdpbGwgYmUgcHJldmVudGVkIGJ5IGxvYWRfcGF0Y2hfdGFyZ2V0KCkgdGhhdAorCSAqIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFwcGx5X2RhdGEoKSBzbyB3ZSBkbyBub3QKKwkgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IGEgcGF0Y2ggbWFya2VkIHdpdGggImlzX2RlbGV0ZSIgYml0CisJICogaGVyZS4gIFdlIGhvd2V2ZXIgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcGF0Y2ggcmVzdWx0CisJICogaXMgbm90IGRlcG9zaXRlZCB0byBhIHBhdGggdGhhdCBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rCisJICogaGVyZS4KKwkgKi8KKwlpZiAoIXBhdGNoLT5pc19kZWxldGUgJiYgcGF0aF9pc19iZXlvbmRfc3ltbGluayhzdGF0ZSwgcGF0Y2gtPm5ld19uYW1lKSkKKwkJcmV0dXJuIGVycm9yKF8oImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiksCisJCQkgICAgIHBhdGNoLT5uZXdfbmFtZSk7CisKKwlpZiAoYXBwbHlfZGF0YShzdGF0ZSwgcGF0Y2gsICZzdCwgY2UpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIpLCBuYW1lKTsKKwlwYXRjaC0+cmVqZWN0ZWQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX3BhdGNoX2xpc3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXByZXBhcmVfc3ltbGlua19jaGFuZ2VzKHN0YXRlLCBwYXRjaCk7CisJcHJlcGFyZV9mbl90YWJsZShzdGF0ZSwgcGF0Y2gpOworCXdoaWxlIChwYXRjaCkgeworCQlpbnQgcmVzOworCQlpZiAoc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSA+IHZlcmJvc2l0eV9ub3JtYWwpCisJCQlzYXlfcGF0Y2hfbmFtZShzdGRlcnIsCisJCQkJICAgICAgIF8oIkNoZWNraW5nIHBhdGNoICVzLi4uIiksIHBhdGNoKTsKKwkJcmVzID0gY2hlY2tfcGF0Y2goc3RhdGUsIHBhdGNoKTsKKwkJaWYgKHJlcyA9PSAtMTI4KQorCQkJcmV0dXJuIC0xMjg7CisJCWVyciB8PSByZXM7CisJCXBhdGNoID0gcGF0Y2gtPm5leHQ7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9hcHBseV9jYWNoZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlKQoreworCWlmIChzdGF0ZS0+aW5kZXhfZmlsZSkKKwkJcmV0dXJuIHJlYWRfaW5kZXhfZnJvbShzdGF0ZS0+cmVwby0+aW5kZXgsIHN0YXRlLT5pbmRleF9maWxlLAorCQkJCSAgICAgICBnZXRfZ2l0X2RpcigpKTsKKwllbHNlCisJCXJldHVybiByZXBvX3JlYWRfaW5kZXgoc3RhdGUtPnJlcG8pOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHJlYWQgdGhlIG9iamVjdCBuYW1lIGZyb20gdGhlIGN1cnJlbnQgaW5kZXggKi8KK3N0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfb2lkKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IHBvczsKKworCWlmIChyZWFkX2FwcGx5X2NhY2hlKHN0YXRlKSA8IDApCisJCXJldHVybiAtMTsKKwlwb3MgPSBpbmRleF9uYW1lX3BvcyhzdGF0ZS0+cmVwby0+aW5kZXgsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiAtMTsKKwlvaWRjcHkob2lkLCAmc3RhdGUtPnJlcG8tPmluZGV4LT5jYWNoZVtwb3NdLT5vaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByZWltYWdlX29pZF9pbl9naXRsaW5rX3BhdGNoKHN0cnVjdCBwYXRjaCAqcCwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCS8qCisJICogQSB1c2FibGUgZ2l0bGluayBwYXRjaCBoYXMgb25seSBvbmUgZnJhZ21lbnQgKGh1bmspIHRoYXQgbG9va3MgbGlrZToKKwkgKiBAQCAtMSArMSBAQAorCSAqIC1TdWJwcm9qZWN0IGNvbW1pdCA8b2xkIHNoYTE+CisJICogK1N1YnByb2plY3QgY29tbWl0IDxuZXcgc2hhMT4KKwkgKiBvcgorCSAqIEBAIC0xICswLDAgQEAKKwkgKiAtU3VicHJvamVjdCBjb21taXQgPG9sZCBzaGExPgorCSAqIGZvciBhIHJlbW92YWwgcGF0Y2guCisJICovCisJc3RydWN0IGZyYWdtZW50ICpodW5rID0gcC0+ZnJhZ21lbnRzOworCXN0YXRpYyBjb25zdCBjaGFyIGhlYWRpbmdbXSA9ICItU3VicHJvamVjdCBjb21taXQgIjsKKwljaGFyICpwcmVpbWFnZTsKKworCWlmICgvKiBkb2VzIHRoZSBwYXRjaCBoYXZlIG9ubHkgb25lIGh1bms/ICovCisJICAgIGh1bmsgJiYgIWh1bmstPm5leHQgJiYKKwkgICAgLyogaXMgaXRzIHByZWltYWdlIG9uZSBsaW5lPyAqLworCSAgICBodW5rLT5vbGRwb3MgPT0gMSAmJiBodW5rLT5vbGRsaW5lcyA9PSAxICYmCisJICAgIC8qIGRvZXMgcHJlaW1hZ2UgYmVnaW4gd2l0aCB0aGUgaGVhZGluZz8gKi8KKwkgICAgKHByZWltYWdlID0gbWVtY2hyKGh1bmstPnBhdGNoLCAnXG4nLCBodW5rLT5zaXplKSkgIT0gTlVMTCAmJgorCSAgICBzdGFydHNfd2l0aCgrK3ByZWltYWdlLCBoZWFkaW5nKSAmJgorCSAgICAvKiBkb2VzIGl0IHJlY29yZCBmdWxsIFNIQS0xPyAqLworCSAgICAhZ2V0X29pZF9oZXgocHJlaW1hZ2UgKyBzaXplb2YoaGVhZGluZykgLSAxLCBvaWQpICYmCisJICAgIHByZWltYWdlW3NpemVvZihoZWFkaW5nKSArIHRoZV9oYXNoX2FsZ28tPmhleHN6IC0gMV0gPT0gJ1xuJyAmJgorCSAgICAvKiBkb2VzIHRoZSBhYmJyZXZpYXRlZCBuYW1lIG9uIHRoZSBpbmRleCBsaW5lIGFncmVlIHdpdGggaXQ/ICovCisJICAgIHN0YXJ0c193aXRoKHByZWltYWdlICsgc2l6ZW9mKGhlYWRpbmcpIC0gMSwgcC0+b2xkX29pZF9wcmVmaXgpKQorCQlyZXR1cm4gMDsgLyogaXQgYWxsIGxvb2tzIGZpbmUgKi8KKworCS8qIHdlIG1heSBoYXZlIGZ1bGwgb2JqZWN0IG5hbWUgb24gdGhlIGluZGV4IGxpbmUgKi8KKwlyZXR1cm4gZ2V0X29pZF9oZXgocC0+b2xkX29pZF9wcmVmaXgsIG9pZCk7Cit9CisKKy8qIEJ1aWxkIGFuIGluZGV4IHRoYXQgY29udGFpbnMganVzdCB0aGUgZmlsZXMgbmVlZGVkIGZvciBhIDN3YXkgbWVyZ2UgKi8KK3N0YXRpYyBpbnQgYnVpbGRfZmFrZV9hbmNlc3RvcihzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKmxpc3QpCit7CisJc3RydWN0IHBhdGNoICpwYXRjaDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0ID0geyBOVUxMIH07CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrID0gTE9DS19JTklUOworCWludCByZXM7CisKKwkvKiBPbmNlIHdlIHN0YXJ0IHN1cHBvcnRpbmcgdGhlIHJldmVyc2UgcGF0Y2gsIGl0IG1heSBiZQorCSAqIHdvcnRoIHNob3dpbmcgdGhlIG5ldyBzaGExIHByZWZpeCwgYnV0IHVudGlsIHRoZW4uLi4KKwkgKi8KKwlmb3IgKHBhdGNoID0gbGlzdDsgcGF0Y2g7IHBhdGNoID0gcGF0Y2gtPm5leHQpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJbmFtZSA9IHBhdGNoLT5vbGRfbmFtZSA/IHBhdGNoLT5vbGRfbmFtZSA6IHBhdGNoLT5uZXdfbmFtZTsKKwkJaWYgKDAgPCBwYXRjaC0+aXNfbmV3KQorCQkJY29udGludWU7CisKKwkJaWYgKFNfSVNHSVRMSU5LKHBhdGNoLT5vbGRfbW9kZSkpIHsKKwkJCWlmICghcHJlaW1hZ2Vfb2lkX2luX2dpdGxpbmtfcGF0Y2gocGF0Y2gsICZvaWQpKQorCQkJCTsgLyogb2ssIHRoZSB0ZXh0dWFsIHBhcnQgbG9va3Mgc2FuZSAqLworCQkJZWxzZQorCQkJCXJldHVybiBlcnJvcihfKCJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgIgorCQkJCQkgICAgICAgInVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIpLCBuYW1lKTsKKwkJfSBlbHNlIGlmICghZ2V0X29pZF9ibG9iKHBhdGNoLT5vbGRfb2lkX3ByZWZpeCwgJm9pZCkpIHsKKwkJCTsgLyogb2sgKi8KKwkJfSBlbHNlIGlmICghcGF0Y2gtPmxpbmVzX2FkZGVkICYmICFwYXRjaC0+bGluZXNfZGVsZXRlZCkgeworCQkJLyogbW9kZS1vbmx5IGNoYW5nZTogdXBkYXRlIHRoZSBjdXJyZW50ICovCisJCQlpZiAoZ2V0X2N1cnJlbnRfb2lkKHN0YXRlLCBwYXRjaC0+b2xkX25hbWUsICZvaWQpKQorCQkJCXJldHVybiBlcnJvcihfKCJtb2RlIGNoYW5nZSBmb3IgJXMsIHdoaWNoIGlzIG5vdCAiCisJCQkJCSAgICAgICAiaW4gY3VycmVudCBIRUFEIiksIG5hbWUpOworCQl9IGVsc2UKKwkJCXJldHVybiBlcnJvcihfKCJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAiCisJCQkJICAgICAgICIoJXMpLiIpLCBuYW1lKTsKKworCQljZSA9IG1ha2VfY2FjaGVfZW50cnkoJnJlc3VsdCwgcGF0Y2gtPm9sZF9tb2RlLCAmb2lkLCBuYW1lLCAwLCAwKTsKKwkJaWYgKCFjZSkKKwkJCXJldHVybiBlcnJvcihfKCJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIiksCisJCQkJICAgICBuYW1lKTsKKwkJaWYgKGFkZF9pbmRleF9lbnRyeSgmcmVzdWx0LCBjZSwgQUREX0NBQ0hFX09LX1RPX0FERCkpIHsKKwkJCWRpc2NhcmRfY2FjaGVfZW50cnkoY2UpOworCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IiksCisJCQkJICAgICBuYW1lKTsKKwkJfQorCX0KKworCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxvY2ssIHN0YXRlLT5mYWtlX2FuY2VzdG9yLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJcmVzID0gd3JpdGVfbG9ja2VkX2luZGV4KCZyZXN1bHQsICZsb2NrLCBDT01NSVRfTE9DSyk7CisJZGlzY2FyZF9pbmRleCgmcmVzdWx0KTsKKworCWlmIChyZXMpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIiksCisJCQkgICAgIHN0YXRlLT5mYWtlX2FuY2VzdG9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGF0X3BhdGNoX2xpc3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlpbnQgZmlsZXMsIGFkZHMsIGRlbHM7CisKKwlmb3IgKGZpbGVzID0gYWRkcyA9IGRlbHMgPSAwIDsgcGF0Y2ggOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7CisJCWZpbGVzKys7CisJCWFkZHMgKz0gcGF0Y2gtPmxpbmVzX2FkZGVkOworCQlkZWxzICs9IHBhdGNoLT5saW5lc19kZWxldGVkOworCQlzaG93X3N0YXRzKHN0YXRlLCBwYXRjaCk7CisJfQorCisJcHJpbnRfc3RhdF9zdW1tYXJ5KHN0ZG91dCwgZmlsZXMsIGFkZHMsIGRlbHMpOworfQorCitzdGF0aWMgdm9pZCBudW1zdGF0X3BhdGNoX2xpc3Qoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWZvciAoIDsgcGF0Y2g7IHBhdGNoID0gcGF0Y2gtPm5leHQpIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJbmFtZSA9IHBhdGNoLT5uZXdfbmFtZSA/IHBhdGNoLT5uZXdfbmFtZSA6IHBhdGNoLT5vbGRfbmFtZTsKKwkJaWYgKHBhdGNoLT5pc19iaW5hcnkpCisJCQlwcmludGYoIi1cdC1cdCIpOworCQllbHNlCisJCQlwcmludGYoIiVkXHQlZFx0IiwgcGF0Y2gtPmxpbmVzX2FkZGVkLCBwYXRjaC0+bGluZXNfZGVsZXRlZCk7CisJCXdyaXRlX25hbWVfcXVvdGVkKG5hbWUsIHN0ZG91dCwgc3RhdGUtPmxpbmVfdGVybWluYXRpb24pOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlX21vZGVfbmFtZShjb25zdCBjaGFyICpuZXdkZWxldGUsIHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChtb2RlKQorCQlwcmludGYoIiAlcyBtb2RlICUwNm8gJXNcbiIsIG5ld2RlbGV0ZSwgbW9kZSwgbmFtZSk7CisJZWxzZQorCQlwcmludGYoIiAlcyAlc1xuIiwgbmV3ZGVsZXRlLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19tb2RlX2NoYW5nZShzdHJ1Y3QgcGF0Y2ggKnAsIGludCBzaG93X25hbWUpCit7CisJaWYgKHAtPm9sZF9tb2RlICYmIHAtPm5ld19tb2RlICYmIHAtPm9sZF9tb2RlICE9IHAtPm5ld19tb2RlKSB7CisJCWlmIChzaG93X25hbWUpCisJCQlwcmludGYoIiBtb2RlIGNoYW5nZSAlMDZvID0+ICUwNm8gJXNcbiIsCisJCQkgICAgICAgcC0+b2xkX21vZGUsIHAtPm5ld19tb2RlLCBwLT5uZXdfbmFtZSk7CisJCWVsc2UKKwkJCXByaW50ZigiIG1vZGUgY2hhbmdlICUwNm8gPT4gJTA2b1xuIiwKKwkJCSAgICAgICBwLT5vbGRfbW9kZSwgcC0+bmV3X21vZGUpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19yZW5hbWVfY29weShzdHJ1Y3QgcGF0Y2ggKnApCit7CisJY29uc3QgY2hhciAqcmVuYW1lY29weSA9IHAtPmlzX3JlbmFtZSA/ICJyZW5hbWUiIDogImNvcHkiOworCWNvbnN0IGNoYXIgKm9sZF9uYW1lLCAqbmV3X25hbWU7CisKKwkvKiBGaW5kIGNvbW1vbiBwcmVmaXggKi8KKwlvbGRfbmFtZSA9IHAtPm9sZF9uYW1lOworCW5ld19uYW1lID0gcC0+bmV3X25hbWU7CisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqc2xhc2hfb2xkLCAqc2xhc2hfbmV3OworCQlzbGFzaF9vbGQgPSBzdHJjaHIob2xkX25hbWUsICcvJyk7CisJCXNsYXNoX25ldyA9IHN0cmNocihuZXdfbmFtZSwgJy8nKTsKKwkJaWYgKCFzbGFzaF9vbGQgfHwKKwkJICAgICFzbGFzaF9uZXcgfHwKKwkJICAgIHNsYXNoX29sZCAtIG9sZF9uYW1lICE9IHNsYXNoX25ldyAtIG5ld19uYW1lIHx8CisJCSAgICBtZW1jbXAob2xkX25hbWUsIG5ld19uYW1lLCBzbGFzaF9uZXcgLSBuZXdfbmFtZSkpCisJCQlicmVhazsKKwkJb2xkX25hbWUgPSBzbGFzaF9vbGQgKyAxOworCQluZXdfbmFtZSA9IHNsYXNoX25ldyArIDE7CisJfQorCS8qIHAtPm9sZF9uYW1lIHRocm91Z2ggb2xkX25hbWUgaXMgdGhlIGNvbW1vbiBwcmVmaXgsIGFuZCBvbGRfbmFtZSBhbmQKKwkgKiBuZXdfbmFtZSB0aHJvdWdoIHRoZSBlbmQgb2YgbmFtZXMgYXJlIHJlbmFtZXMKKwkgKi8KKwlpZiAob2xkX25hbWUgIT0gcC0+b2xkX25hbWUpCisJCXByaW50ZigiICVzICUuKnN7JXMgPT4gJXN9ICglZCUlKVxuIiwgcmVuYW1lY29weSwKKwkJICAgICAgIChpbnQpKG9sZF9uYW1lIC0gcC0+b2xkX25hbWUpLCBwLT5vbGRfbmFtZSwKKwkJICAgICAgIG9sZF9uYW1lLCBuZXdfbmFtZSwgcC0+c2NvcmUpOworCWVsc2UKKwkJcHJpbnRmKCIgJXMgJXMgPT4gJXMgKCVkJSUpXG4iLCByZW5hbWVjb3B5LAorCQkgICAgICAgcC0+b2xkX25hbWUsIHAtPm5ld19uYW1lLCBwLT5zY29yZSk7CisJc2hvd19tb2RlX2NoYW5nZShwLCAwKTsKK30KKworc3RhdGljIHZvaWQgc3VtbWFyeV9wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IHBhdGNoICpwOworCisJZm9yIChwID0gcGF0Y2g7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5pc19uZXcpCisJCQlzaG93X2ZpbGVfbW9kZV9uYW1lKCJjcmVhdGUiLCBwLT5uZXdfbW9kZSwgcC0+bmV3X25hbWUpOworCQllbHNlIGlmIChwLT5pc19kZWxldGUpCisJCQlzaG93X2ZpbGVfbW9kZV9uYW1lKCJkZWxldGUiLCBwLT5vbGRfbW9kZSwgcC0+b2xkX25hbWUpOworCQllbHNlIHsKKwkJCWlmIChwLT5pc19yZW5hbWUgfHwgcC0+aXNfY29weSkKKwkJCQlzaG93X3JlbmFtZV9jb3B5KHApOworCQkJZWxzZSB7CisJCQkJaWYgKHAtPnNjb3JlKSB7CisJCQkJCXByaW50ZigiIHJld3JpdGUgJXMgKCVkJSUpXG4iLAorCQkJCQkgICAgICAgcC0+bmV3X25hbWUsIHAtPnNjb3JlKTsKKwkJCQkJc2hvd19tb2RlX2NoYW5nZShwLCAwKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlzaG93X21vZGVfY2hhbmdlKHAsIDEpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXRjaF9zdGF0cyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWludCBsaW5lcyA9IHBhdGNoLT5saW5lc19hZGRlZCArIHBhdGNoLT5saW5lc19kZWxldGVkOworCisJaWYgKGxpbmVzID4gc3RhdGUtPm1heF9jaGFuZ2UpCisJCXN0YXRlLT5tYXhfY2hhbmdlID0gbGluZXM7CisJaWYgKHBhdGNoLT5vbGRfbmFtZSkgeworCQlpbnQgbGVuID0gcXVvdGVfY19zdHlsZShwYXRjaC0+b2xkX25hbWUsIE5VTEwsIE5VTEwsIDApOworCQlpZiAoIWxlbikKKwkJCWxlbiA9IHN0cmxlbihwYXRjaC0+b2xkX25hbWUpOworCQlpZiAobGVuID4gc3RhdGUtPm1heF9sZW4pCisJCQlzdGF0ZS0+bWF4X2xlbiA9IGxlbjsKKwl9CisJaWYgKHBhdGNoLT5uZXdfbmFtZSkgeworCQlpbnQgbGVuID0gcXVvdGVfY19zdHlsZShwYXRjaC0+bmV3X25hbWUsIE5VTEwsIE5VTEwsIDApOworCQlpZiAoIWxlbikKKwkJCWxlbiA9IHN0cmxlbihwYXRjaC0+bmV3X25hbWUpOworCQlpZiAobGVuID4gc3RhdGUtPm1heF9sZW4pCisJCQlzdGF0ZS0+bWF4X2xlbiA9IGxlbjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2ZpbGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwgc3RydWN0IHBhdGNoICpwYXRjaCwgaW50IHJtZGlyX2VtcHR5KQoreworCWlmIChzdGF0ZS0+dXBkYXRlX2luZGV4ICYmICFzdGF0ZS0+aXRhX29ubHkpIHsKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21faW5kZXgoc3RhdGUtPnJlcG8tPmluZGV4LCBwYXRjaC0+b2xkX25hbWUpIDwgMCkKKwkJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiKSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwl9CisJaWYgKCFzdGF0ZS0+Y2FjaGVkKSB7CisJCWlmICghcmVtb3ZlX29yX3dhcm4ocGF0Y2gtPm9sZF9tb2RlLCBwYXRjaC0+b2xkX25hbWUpICYmIHJtZGlyX2VtcHR5KSB7CisJCQlyZW1vdmVfcGF0aChwYXRjaC0+b2xkX25hbWUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9pbmRleF9maWxlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgIHVuc2lnbmVkIG1vZGUsCisJCQkgIHZvaWQgKmJ1ZiwKKwkJCSAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisKKwljZSA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoc3RhdGUtPnJlcG8tPmluZGV4LCBuYW1lbGVuKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKDApOworCWNlLT5jZV9uYW1lbGVuID0gbmFtZWxlbjsKKwlpZiAoc3RhdGUtPml0YV9vbmx5KSB7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9JTlRFTlRfVE9fQUREOworCQlzZXRfb2JqZWN0X25hbWVfZm9yX2ludGVudF90b19hZGRfZW50cnkoY2UpOworCX0gZWxzZSBpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJY29uc3QgY2hhciAqczsKKworCQlpZiAoIXNraXBfcHJlZml4KGJ1ZiwgIlN1YnByb2plY3QgY29tbWl0ICIsICZzKSB8fAorCQkgICAgZ2V0X29pZF9oZXgocywgJmNlLT5vaWQpKSB7CisJCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwkJCXJldHVybiBlcnJvcihfKCJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiKSwgcGF0aCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIXN0YXRlLT5jYWNoZWQpIHsKKwkJCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkgeworCQkJCWRpc2NhcmRfY2FjaGVfZW50cnkoY2UpOworCQkJCXJldHVybiBlcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gc3RhdCBuZXdseSAiCisJCQkJCQkgICAgICJjcmVhdGVkIGZpbGUgJyVzJyIpLAorCQkJCQkJICAgcGF0aCk7CisJCQl9CisJCQlmaWxsX3N0YXRfY2FjaGVfaW5mbyhzdGF0ZS0+cmVwby0+aW5kZXgsIGNlLCAmc3QpOworCQl9CisJCWlmICh3cml0ZV9vYmplY3RfZmlsZShidWYsIHNpemUsIGJsb2JfdHlwZSwgJmNlLT5vaWQpIDwgMCkgeworCQkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlICIKKwkJCQkgICAgICAgImZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiKSwgcGF0aCk7CisJCX0KKwl9CisJaWYgKGFkZF9pbmRleF9lbnRyeShzdGF0ZS0+cmVwby0+aW5kZXgsIGNlLCBBRERfQ0FDSEVfT0tfVE9fQUREKSA8IDApIHsKKwkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIpLCBwYXRoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybnM6CisgKiAgLTEgaWYgYW4gdW5yZWNvdmVyYWJsZSBlcnJvciBoYXBwZW5lZAorICogICAwIGlmIGV2ZXJ5dGhpbmcgd2VudCB3ZWxsCisgKiAgIDEgaWYgYSByZWNvdmVyYWJsZSBlcnJvciBoYXBwZW5lZAorICovCitzdGF0aWMgaW50IHRyeV9jcmVhdGVfZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgdW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgZmQsIHJlczsKKwlzdHJ1Y3Qgc3RyYnVmIG5idWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChTX0lTR0lUTElOSyhtb2RlKSkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKCFsc3RhdChwYXRoLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuICEhbWtkaXIocGF0aCwgMDc3Nyk7CisJfQorCisJaWYgKGhhc19zeW1saW5rcyAmJiBTX0lTTE5LKG1vZGUpKQorCQkvKiBBbHRob3VnaCBidWY6c2l6ZSBpcyBjb3VudGVkIHN0cmluZywgaXQgYWxzbyBpcyBOVUwKKwkJICogdGVybWluYXRlZC4KKwkJICovCisJCXJldHVybiAhIXN5bWxpbmsoYnVmLCBwYXRoKTsKKworCWZkID0gb3BlbihwYXRoLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIChtb2RlICYgMDEwMCkgPyAwNzc3IDogMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUoc3RhdGUtPnJlcG8tPmluZGV4LCBwYXRoLCBidWYsIHNpemUsICZuYnVmKSkgeworCQlzaXplID0gbmJ1Zi5sZW47CisJCWJ1ZiAgPSBuYnVmLmJ1ZjsKKwl9CisKKwlyZXMgPSB3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHNpemUpIDwgMDsKKwlpZiAocmVzKQorCQllcnJvcl9lcnJubyhfKCJmYWlsZWQgdG8gd3JpdGUgdG8gJyVzJyIpLCBwYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmbmJ1Zik7CisKKwlpZiAoY2xvc2UoZmQpIDwgMCAmJiAhcmVzKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY2xvc2luZyBmaWxlICclcyciKSwgcGF0aCk7CisKKwlyZXR1cm4gcmVzID8gLTEgOiAwOworfQorCisvKgorICogV2Ugb3B0aW1pc3RpY2FsbHkgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yaWVzIGV4aXN0LAorICogd2hpY2ggaXMgdHJ1ZSA5OSUgb2YgdGhlIHRpbWUgYW55d2F5LiBJZiB0aGV5IGRvbid0LAorICogd2UgY3JlYXRlIHRoZW0gYW5kIHRyeSBhZ2Fpbi4KKyAqCisgKiBSZXR1cm5zOgorICogICAtMSBvbiBlcnJvcgorICogICAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGNyZWF0ZV9vbmVfZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJICAgY2hhciAqcGF0aCwKKwkJCSAgIHVuc2lnbmVkIG1vZGUsCisJCQkgICBjb25zdCBjaGFyICpidWYsCisJCQkgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IHJlczsKKworCWlmIChzdGF0ZS0+Y2FjaGVkKQorCQlyZXR1cm4gMDsKKworCXJlcyA9IHRyeV9jcmVhdGVfZmlsZShzdGF0ZSwgcGF0aCwgbW9kZSwgYnVmLCBzaXplKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmICghcmVzKQorCQlyZXR1cm4gMDsKKworCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMocGF0aCkpCisJCQlyZXR1cm4gMDsKKwkJcmVzID0gdHJ5X2NyZWF0ZV9maWxlKHN0YXRlLCBwYXRoLCBtb2RlLCBidWYsIHNpemUpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCFyZXMpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZXJybm8gPT0gRUVYSVNUIHx8IGVycm5vID09IEVBQ0NFUykgeworCQkvKiBXZSBtYXkgYmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIGZpbGUgd2hlcmUgYSBkaXJlY3RvcnkKKwkJICogdXNlZCB0byBiZS4KKwkJICovCisJCXN0cnVjdCBzdGF0IHN0OworCQlpZiAoIWxzdGF0KHBhdGgsICZzdCkgJiYgKCFTX0lTRElSKHN0LnN0X21vZGUpIHx8ICFybWRpcihwYXRoKSkpCisJCQllcnJubyA9IEVFWElTVDsKKwl9CisKKwlpZiAoZXJybm8gPT0gRUVYSVNUKSB7CisJCXVuc2lnbmVkIGludCBuciA9IGdldHBpZCgpOworCisJCWZvciAoOzspIHsKKwkJCWNoYXIgbmV3cGF0aFtQQVRIX01BWF07CisJCQlta3NucGF0aChuZXdwYXRoLCBzaXplb2YobmV3cGF0aCksICIlc34ldSIsIHBhdGgsIG5yKTsKKwkJCXJlcyA9IHRyeV9jcmVhdGVfZmlsZShzdGF0ZSwgbmV3cGF0aCwgbW9kZSwgYnVmLCBzaXplKTsKKwkJCWlmIChyZXMgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmICghcmVzKSB7CisJCQkJaWYgKCFyZW5hbWUobmV3cGF0aCwgcGF0aCkpCisJCQkJCXJldHVybiAwOworCQkJCXVubGlua19vcl93YXJuKG5ld3BhdGgpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJCQlicmVhazsKKwkJCSsrbnI7CisJCX0KKwl9CisJcmV0dXJuIGVycm9yX2Vycm5vKF8oInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIpLAorCQkJICAgcGF0aCwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2NvbmZsaWN0ZWRfc3RhZ2VzX2ZpbGUoc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICAgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlpbnQgc3RhZ2UsIG5hbWVsZW47CisJdW5zaWduZWQgbW9kZTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKCFzdGF0ZS0+dXBkYXRlX2luZGV4KQorCQlyZXR1cm4gMDsKKwluYW1lbGVuID0gc3RybGVuKHBhdGNoLT5uZXdfbmFtZSk7CisJbW9kZSA9IHBhdGNoLT5uZXdfbW9kZSA/IHBhdGNoLT5uZXdfbW9kZSA6IChTX0lGUkVHIHwgMDY0NCk7CisKKwlyZW1vdmVfZmlsZV9mcm9tX2luZGV4KHN0YXRlLT5yZXBvLT5pbmRleCwgcGF0Y2gtPm5ld19uYW1lKTsKKwlmb3IgKHN0YWdlID0gMTsgc3RhZ2UgPCA0OyBzdGFnZSsrKSB7CisJCWlmIChpc19udWxsX29pZCgmcGF0Y2gtPnRocmVld2F5X3N0YWdlW3N0YWdlIC0gMV0pKQorCQkJY29udGludWU7CisJCWNlID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeShzdGF0ZS0+cmVwby0+aW5kZXgsIG5hbWVsZW4pOworCQltZW1jcHkoY2UtPm5hbWUsIHBhdGNoLT5uZXdfbmFtZSwgbmFtZWxlbik7CisJCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncyhzdGFnZSk7CisJCWNlLT5jZV9uYW1lbGVuID0gbmFtZWxlbjsKKwkJb2lkY3B5KCZjZS0+b2lkLCAmcGF0Y2gtPnRocmVld2F5X3N0YWdlW3N0YWdlIC0gMV0pOworCQlpZiAoYWRkX2luZGV4X2VudHJ5KHN0YXRlLT5yZXBvLT5pbmRleCwgY2UsIEFERF9DQUNIRV9PS19UT19BREQpIDwgMCkgeworCQkJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiKSwKKwkJCQkgICAgIHBhdGNoLT5uZXdfbmFtZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcmVhdGVfZmlsZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWNoYXIgKnBhdGggPSBwYXRjaC0+bmV3X25hbWU7CisJdW5zaWduZWQgbW9kZSA9IHBhdGNoLT5uZXdfbW9kZTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBwYXRjaC0+cmVzdWx0c2l6ZTsKKwljaGFyICpidWYgPSBwYXRjaC0+cmVzdWx0OworCisJaWYgKCFtb2RlKQorCQltb2RlID0gU19JRlJFRyB8IDA2NDQ7CisJaWYgKGNyZWF0ZV9vbmVfZmlsZShzdGF0ZSwgcGF0aCwgbW9kZSwgYnVmLCBzaXplKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHBhdGNoLT5jb25mbGljdGVkX3RocmVld2F5KQorCQlyZXR1cm4gYWRkX2NvbmZsaWN0ZWRfc3RhZ2VzX2ZpbGUoc3RhdGUsIHBhdGNoKTsKKwllbHNlIGlmIChzdGF0ZS0+dXBkYXRlX2luZGV4KQorCQlyZXR1cm4gYWRkX2luZGV4X2ZpbGUoc3RhdGUsIHBhdGgsIG1vZGUsIGJ1Ziwgc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHBoYXNlIHplcm8gaXMgdG8gcmVtb3ZlLCBwaGFzZSBvbmUgaXMgdG8gY3JlYXRlICovCitzdGF0aWMgaW50IHdyaXRlX291dF9vbmVfcmVzdWx0KHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCQkJc3RydWN0IHBhdGNoICpwYXRjaCwKKwkJCQlpbnQgcGhhc2UpCit7CisJaWYgKHBhdGNoLT5pc19kZWxldGUgPiAwKSB7CisJCWlmIChwaGFzZSA9PSAwKQorCQkJcmV0dXJuIHJlbW92ZV9maWxlKHN0YXRlLCBwYXRjaCwgMSk7CisJCXJldHVybiAwOworCX0KKwlpZiAocGF0Y2gtPmlzX25ldyA+IDAgfHwgcGF0Y2gtPmlzX2NvcHkpIHsKKwkJaWYgKHBoYXNlID09IDEpCisJCQlyZXR1cm4gY3JlYXRlX2ZpbGUoc3RhdGUsIHBhdGNoKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qCisJICogUmVuYW1lIG9yIG1vZGlmaWNhdGlvbiBib2lscyBkb3duIHRvIHRoZSBzYW1lCisJICogdGhpbmc6IHJlbW92ZSB0aGUgb2xkLCB3cml0ZSB0aGUgbmV3CisJICovCisJaWYgKHBoYXNlID09IDApCisJCXJldHVybiByZW1vdmVfZmlsZShzdGF0ZSwgcGF0Y2gsIHBhdGNoLT5pc19yZW5hbWUpOworCWlmIChwaGFzZSA9PSAxKQorCQlyZXR1cm4gY3JlYXRlX2ZpbGUoc3RhdGUsIHBhdGNoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9vdXRfb25lX3JlamVjdChzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCUZJTEUgKnJlajsKKwljaGFyIG5hbWVidWZbUEFUSF9NQVhdOworCXN0cnVjdCBmcmFnbWVudCAqZnJhZzsKKwlpbnQgY250ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGNudCA9IDAsIGZyYWcgPSBwYXRjaC0+ZnJhZ21lbnRzOyBmcmFnOyBmcmFnID0gZnJhZy0+bmV4dCkgeworCQlpZiAoIWZyYWctPnJlamVjdGVkKQorCQkJY29udGludWU7CisJCWNudCsrOworCX0KKworCWlmICghY250KSB7CisJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X25vcm1hbCkKKwkJCXNheV9wYXRjaF9uYW1lKHN0ZGVyciwKKwkJCQkgICAgICAgXygiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIpLCBwYXRjaCk7CisJCXJldHVybiAwOworCX0KKworCS8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJlY2F1c2UgYSByZW1vdmFsIHBhdGNoIHRoYXQgbGVhdmVzCisJICogY29udGVudHMgYXJlIG1hcmtlZCAicmVqZWN0ZWQiIGF0IHRoZSBwYXRjaCBsZXZlbC4KKwkgKi8KKwlpZiAoIXBhdGNoLT5uZXdfbmFtZSkKKwkJZGllKF8oImludGVybmFsIGVycm9yIikpOworCisJLyogU2F5IHRoaXMgZXZlbiB3aXRob3V0IC0tdmVyYm9zZSAqLworCXN0cmJ1Zl9hZGRmKCZzYiwgUV8oIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIsCisJCQkgICAgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iLAorCQkJICAgIGNudCksCisJCSAgICBjbnQpOworCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJc2F5X3BhdGNoX25hbWUoc3RkZXJyLCBzYi5idWYsIHBhdGNoKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJY250ID0gc3RybGVuKHBhdGNoLT5uZXdfbmFtZSk7CisJaWYgKEFSUkFZX1NJWkUobmFtZWJ1ZikgPD0gY250ICsgNSkgeworCQljbnQgPSBBUlJBWV9TSVpFKG5hbWVidWYpIC0gNTsKKwkJd2FybmluZyhfKCJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiKSwKKwkJCWNudCAtIDEsIHBhdGNoLT5uZXdfbmFtZSk7CisJfQorCW1lbWNweShuYW1lYnVmLCBwYXRjaC0+bmV3X25hbWUsIGNudCk7CisJbWVtY3B5KG5hbWVidWYgKyBjbnQsICIucmVqIiwgNSk7CisKKwlyZWogPSBmb3BlbihuYW1lYnVmLCAidyIpOworCWlmICghcmVqKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY2Fubm90IG9wZW4gJXMiKSwgbmFtZWJ1Zik7CisKKwkvKiBOb3JtYWwgZ2l0IHRvb2xzIG5ldmVyIGRlYWwgd2l0aCAucmVqLCBzbyBkbyBub3QgcHJldGVuZAorCSAqIHRoaXMgaXMgYSBnaXQgcGF0Y2ggYnkgc2F5aW5nIC0tZ2l0IG9yIGdpdmluZyBleHRlbmRlZAorCSAqIGhlYWRlcnMuICBXaGlsZSBhdCBpdCwgbWF5YmUgcGxlYXNlICJrb21wYXJlIiB0aGF0IHdhbnRzCisJICogdGhlIHRyYWlsaW5nIFRBQiBhbmQgc29tZSBnYXJiYWdlIGF0IHRoZSBlbmQgb2YgbGluZSA7LSkuCisJICovCisJZnByaW50ZihyZWosICJkaWZmIGEvJXMgYi8lc1x0KHJlamVjdGVkIGh1bmtzKVxuIiwKKwkJcGF0Y2gtPm5ld19uYW1lLCBwYXRjaC0+bmV3X25hbWUpOworCWZvciAoY250ID0gMSwgZnJhZyA9IHBhdGNoLT5mcmFnbWVudHM7CisJICAgICBmcmFnOworCSAgICAgY250KyssIGZyYWcgPSBmcmFnLT5uZXh0KSB7CisJCWlmICghZnJhZy0+cmVqZWN0ZWQpIHsKKwkJCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5ID4gdmVyYm9zaXR5X3NpbGVudCkKKwkJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIpLCBjbnQpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlJlamVjdGVkIGh1bmsgIyVkLiIpLCBjbnQpOworCQlmcHJpbnRmKHJlaiwgIiUuKnMiLCBmcmFnLT5zaXplLCBmcmFnLT5wYXRjaCk7CisJCWlmIChmcmFnLT5wYXRjaFtmcmFnLT5zaXplLTFdICE9ICdcbicpCisJCQlmcHV0YygnXG4nLCByZWopOworCX0KKwlmY2xvc2UocmVqKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBSZXR1cm5zOgorICogIC0xIGlmIGFuIGVycm9yIGhhcHBlbmVkCisgKiAgIDAgaWYgdGhlIHBhdGNoIGFwcGxpZWQgY2xlYW5seQorICogICAxIGlmIHRoZSBwYXRjaCBkaWQgbm90IGFwcGx5IGNsZWFubHkKKyAqLworc3RhdGljIGludCB3cml0ZV9vdXRfcmVzdWx0cyhzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgcGF0Y2ggKmxpc3QpCit7CisJaW50IHBoYXNlOworCWludCBlcnJzID0gMDsKKwlzdHJ1Y3QgcGF0Y2ggKmw7CisJc3RydWN0IHN0cmluZ19saXN0IGNwYXRoID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPCAyOyBwaGFzZSsrKSB7CisJCWwgPSBsaXN0OworCQl3aGlsZSAobCkgeworCQkJaWYgKGwtPnJlamVjdGVkKQorCQkJCWVycnMgPSAxOworCQkJZWxzZSB7CisJCQkJaWYgKHdyaXRlX291dF9vbmVfcmVzdWx0KHN0YXRlLCBsLCBwaGFzZSkpIHsKKwkJCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmNwYXRoLCAwKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQlpZiAocGhhc2UgPT0gMSkgeworCQkJCQlpZiAod3JpdGVfb3V0X29uZV9yZWplY3Qoc3RhdGUsIGwpKQorCQkJCQkJZXJycyA9IDE7CisJCQkJCWlmIChsLT5jb25mbGljdGVkX3RocmVld2F5KSB7CisJCQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmNwYXRoLCBsLT5uZXdfbmFtZSk7CisJCQkJCQllcnJzID0gMTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWwgPSBsLT5uZXh0OworCQl9CisJfQorCisJaWYgKGNwYXRoLm5yKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJCXN0cmluZ19saXN0X3NvcnQoJmNwYXRoKTsKKwkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KSB7CisJCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZjcGF0aCkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlUgJXNcbiIsIGl0ZW0tPnN0cmluZyk7CisJCX0KKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmNwYXRoLCAwKTsKKworCQlyZXBvX3JlcmVyZShzdGF0ZS0+cmVwbywgMCk7CisJfQorCisJcmV0dXJuIGVycnM7Cit9CisKKy8qCisgKiBUcnkgdG8gYXBwbHkgYSBwYXRjaC4KKyAqCisgKiBSZXR1cm5zOgorICogIC0xMjggaWYgYSBiYWQgZXJyb3IgaGFwcGVuZWQgKGxpa2UgcGF0Y2ggdW5yZWFkYWJsZSkKKyAqICAtMSBpZiBwYXRjaCBkaWQgbm90IGFwcGx5IGFuZCB1c2VyIGNhbm5vdCBkZWFsIHdpdGggaXQKKyAqICAgMCBpZiB0aGUgcGF0Y2ggYXBwbGllZAorICogICAxIGlmIHRoZSBwYXRjaCBkaWQgbm90IGFwcGx5IGJ1dCB1c2VyIG1pZ2h0IGZpeCBpdAorICovCitzdGF0aWMgaW50IGFwcGx5X3BhdGNoKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgICBpbnQgZmQsCisJCSAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJICAgICAgIGludCBvcHRpb25zKQoreworCXNpemVfdCBvZmZzZXQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsgLyogb3ducyB0aGUgcGF0Y2ggdGV4dCAqLworCXN0cnVjdCBwYXRjaCAqbGlzdCA9IE5VTEwsICoqbGlzdHAgPSAmbGlzdDsKKwlpbnQgc2tpcHBlZF9wYXRjaCA9IDA7CisJaW50IHJlcyA9IDA7CisJaW50IGZsdXNoX2F0dHJpYnV0ZXMgPSAwOworCisJc3RhdGUtPnBhdGNoX2lucHV0X2ZpbGUgPSBmaWxlbmFtZTsKKwlpZiAocmVhZF9wYXRjaF9maWxlKCZidWYsIGZkKSA8IDApCisJCXJldHVybiAtMTI4OworCW9mZnNldCA9IDA7CisJd2hpbGUgKG9mZnNldCA8IGJ1Zi5sZW4pIHsKKwkJc3RydWN0IHBhdGNoICpwYXRjaDsKKwkJaW50IG5yOworCisJCXBhdGNoID0geGNhbGxvYygxLCBzaXplb2YoKnBhdGNoKSk7CisJCXBhdGNoLT5pbmFjY3VyYXRlX2VvZiA9ICEhKG9wdGlvbnMgJiBBUFBMWV9PUFRfSU5BQ0NVUkFURV9FT0YpOworCQlwYXRjaC0+cmVjb3VudCA9ICAhIShvcHRpb25zICYgQVBQTFlfT1BUX1JFQ09VTlQpOworCQluciA9IHBhcnNlX2NodW5rKHN0YXRlLCBidWYuYnVmICsgb2Zmc2V0LCBidWYubGVuIC0gb2Zmc2V0LCBwYXRjaCk7CisJCWlmIChuciA8IDApIHsKKwkJCWZyZWVfcGF0Y2gocGF0Y2gpOworCQkJaWYgKG5yID09IC0xMjgpIHsKKwkJCQlyZXMgPSAtMTI4OworCQkJCWdvdG8gZW5kOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0YXRlLT5hcHBseV9pbl9yZXZlcnNlKQorCQkJcmV2ZXJzZV9wYXRjaGVzKHBhdGNoKTsKKwkJaWYgKHVzZV9wYXRjaChzdGF0ZSwgcGF0Y2gpKSB7CisJCQlwYXRjaF9zdGF0cyhzdGF0ZSwgcGF0Y2gpOworCQkJKmxpc3RwID0gcGF0Y2g7CisJCQlsaXN0cCA9ICZwYXRjaC0+bmV4dDsKKworCQkJaWYgKChwYXRjaC0+bmV3X25hbWUgJiYKKwkJCSAgICAgZW5kc193aXRoX3BhdGhfY29tcG9uZW50cyhwYXRjaC0+bmV3X25hbWUsCisJCQkJCQkgICAgICAgR0lUQVRUUklCVVRFU19GSUxFKSkgfHwKKwkJCSAgICAocGF0Y2gtPm9sZF9uYW1lICYmCisJCQkgICAgIGVuZHNfd2l0aF9wYXRoX2NvbXBvbmVudHMocGF0Y2gtPm9sZF9uYW1lLAorCQkJCQkJICAgICAgIEdJVEFUVFJJQlVURVNfRklMRSkpKQorCQkJCWZsdXNoX2F0dHJpYnV0ZXMgPSAxOworCQl9CisJCWVsc2UgeworCQkJaWYgKHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfbm9ybWFsKQorCQkJCXNheV9wYXRjaF9uYW1lKHN0ZGVyciwgXygiU2tpcHBlZCBwYXRjaCAnJXMnLiIpLCBwYXRjaCk7CisJCQlmcmVlX3BhdGNoKHBhdGNoKTsKKwkJCXNraXBwZWRfcGF0Y2grKzsKKwkJfQorCQlvZmZzZXQgKz0gbnI7CisJfQorCisJaWYgKCFsaXN0ICYmICFza2lwcGVkX3BhdGNoKSB7CisJCWVycm9yKF8oInVucmVjb2duaXplZCBpbnB1dCIpKTsKKwkJcmVzID0gLTEyODsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yICYmIChzdGF0ZS0+d3NfZXJyb3JfYWN0aW9uID09IGRpZV9vbl93c19lcnJvcikpCisJCXN0YXRlLT5hcHBseSA9IDA7CisKKwlzdGF0ZS0+dXBkYXRlX2luZGV4ID0gKHN0YXRlLT5jaGVja19pbmRleCB8fCBzdGF0ZS0+aXRhX29ubHkpICYmIHN0YXRlLT5hcHBseTsKKwlpZiAoc3RhdGUtPnVwZGF0ZV9pbmRleCAmJiAhaXNfbG9ja19maWxlX2xvY2tlZCgmc3RhdGUtPmxvY2tfZmlsZSkpIHsKKwkJaWYgKHN0YXRlLT5pbmRleF9maWxlKQorCQkJaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmc3RhdGUtPmxvY2tfZmlsZSwKKwkJCQkJCSAgc3RhdGUtPmluZGV4X2ZpbGUsCisJCQkJCQkgIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJZWxzZQorCQkJcmVwb19ob2xkX2xvY2tlZF9pbmRleChzdGF0ZS0+cmVwbywgJnN0YXRlLT5sb2NrX2ZpbGUsCisJCQkJCSAgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CisJfQorCisJaWYgKHN0YXRlLT5jaGVja19pbmRleCAmJiByZWFkX2FwcGx5X2NhY2hlKHN0YXRlKSA8IDApIHsKKwkJZXJyb3IoXygidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIpKTsKKwkJcmVzID0gLTEyODsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKHN0YXRlLT5jaGVjayB8fCBzdGF0ZS0+YXBwbHkpIHsKKwkJaW50IHIgPSBjaGVja19wYXRjaF9saXN0KHN0YXRlLCBsaXN0KTsKKwkJaWYgKHIgPT0gLTEyOCkgeworCQkJcmVzID0gLTEyODsKKwkJCWdvdG8gZW5kOworCQl9CisJCWlmIChyIDwgMCAmJiAhc3RhdGUtPmFwcGx5X3dpdGhfcmVqZWN0KSB7CisJCQlyZXMgPSAtMTsKKwkJCWdvdG8gZW5kOworCQl9CisJfQorCisJaWYgKHN0YXRlLT5hcHBseSkgeworCQlpbnQgd3JpdGVfcmVzID0gd3JpdGVfb3V0X3Jlc3VsdHMoc3RhdGUsIGxpc3QpOworCQlpZiAod3JpdGVfcmVzIDwgMCkgeworCQkJcmVzID0gLTEyODsKKwkJCWdvdG8gZW5kOworCQl9CisJCWlmICh3cml0ZV9yZXMgPiAwKSB7CisJCQkvKiB3aXRoIC0tM3dheSwgd2Ugc3RpbGwgbmVlZCB0byB3cml0ZSB0aGUgaW5kZXggb3V0ICovCisJCQlyZXMgPSBzdGF0ZS0+YXBwbHlfd2l0aF9yZWplY3QgPyAtMSA6IDE7CisJCQlnb3RvIGVuZDsKKwkJfQorCX0KKworCWlmIChzdGF0ZS0+ZmFrZV9hbmNlc3RvciAmJgorCSAgICBidWlsZF9mYWtlX2FuY2VzdG9yKHN0YXRlLCBsaXN0KSkgeworCQlyZXMgPSAtMTI4OworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAoc3RhdGUtPmRpZmZzdGF0ICYmIHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KQorCQlzdGF0X3BhdGNoX2xpc3Qoc3RhdGUsIGxpc3QpOworCisJaWYgKHN0YXRlLT5udW1zdGF0ICYmIHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KQorCQludW1zdGF0X3BhdGNoX2xpc3Qoc3RhdGUsIGxpc3QpOworCisJaWYgKHN0YXRlLT5zdW1tYXJ5ICYmIHN0YXRlLT5hcHBseV92ZXJib3NpdHkgPiB2ZXJib3NpdHlfc2lsZW50KQorCQlzdW1tYXJ5X3BhdGNoX2xpc3QobGlzdCk7CisKKwlpZiAoZmx1c2hfYXR0cmlidXRlcykKKwkJcmVzZXRfcGFyc2VkX2F0dHJpYnV0ZXMoKTsKK2VuZDoKKwlmcmVlX3BhdGNoX2xpc3QobGlzdCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlLT5mbl90YWJsZSwgMCk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBhcHBseV9vcHRpb25fcGFyc2VfZXhjbHVkZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlhZGRfbmFtZV9saW1pdChzdGF0ZSwgYXJnLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9vcHRpb25fcGFyc2VfaW5jbHVkZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlhZGRfbmFtZV9saW1pdChzdGF0ZSwgYXJnLCAwKTsKKwlzdGF0ZS0+aGFzX2luY2x1ZGUgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGx5X29wdGlvbl9wYXJzZV9wKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsCisJCQkJaW50IHVuc2V0KQoreworCXN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJc3RhdGUtPnBfdmFsdWUgPSBhdG9pKGFyZyk7CisJc3RhdGUtPnBfdmFsdWVfa25vd24gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGx5X29wdGlvbl9wYXJzZV9zcGFjZV9jaGFuZ2UoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlpZiAodW5zZXQpCisJCXN0YXRlLT53c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CisJZWxzZQorCQlzdGF0ZS0+d3NfaWdub3JlX2FjdGlvbiA9IGlnbm9yZV93c19jaGFuZ2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfb3B0aW9uX3BhcnNlX3doaXRlc3BhY2UoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGFwcGx5X3N0YXRlICpzdGF0ZSA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlzdGF0ZS0+d2hpdGVzcGFjZV9vcHRpb24gPSBhcmc7CisJaWYgKHBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKHN0YXRlLCBhcmcpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfb3B0aW9uX3BhcnNlX2RpcmVjdG9yeShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJc3RyYnVmX3Jlc2V0KCZzdGF0ZS0+cm9vdCk7CisJc3RyYnVmX2FkZHN0cigmc3RhdGUtPnJvb3QsIGFyZyk7CisJc3RyYnVmX2NvbXBsZXRlKCZzdGF0ZS0+cm9vdCwgJy8nKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGFwcGx5X2FsbF9wYXRjaGVzKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgIGludCBhcmdjLAorCQkgICAgICBjb25zdCBjaGFyICoqYXJndiwKKwkJICAgICAgaW50IG9wdGlvbnMpCit7CisJaW50IGk7CisJaW50IHJlczsKKwlpbnQgZXJycyA9IDA7CisJaW50IHJlYWRfc3RkaW4gPSAxOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQljaGFyICp0b19mcmVlID0gTlVMTDsKKwkJaW50IGZkOworCisJCWlmICghc3RyY21wKGFyZywgIi0iKSkgeworCQkJcmVzID0gYXBwbHlfcGF0Y2goc3RhdGUsIDAsICI8c3RkaW4+Iiwgb3B0aW9ucyk7CisJCQlpZiAocmVzIDwgMCkKKwkJCQlnb3RvIGVuZDsKKwkJCWVycnMgfD0gcmVzOworCQkJcmVhZF9zdGRpbiA9IDA7CisJCQljb250aW51ZTsKKwkJfSBlbHNlCisJCQlhcmcgPSB0b19mcmVlID0gcHJlZml4X2ZpbGVuYW1lKHN0YXRlLT5wcmVmaXgsIGFyZyk7CisKKwkJZmQgPSBvcGVuKGFyZywgT19SRE9OTFkpOworCQlpZiAoZmQgPCAwKSB7CisJCQllcnJvcihfKCJjYW4ndCBvcGVuIHBhdGNoICclcyc6ICVzIiksIGFyZywgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJlcyA9IC0xMjg7CisJCQlmcmVlKHRvX2ZyZWUpOworCQkJZ290byBlbmQ7CisJCX0KKwkJcmVhZF9zdGRpbiA9IDA7CisJCXNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZShzdGF0ZSk7CisJCXJlcyA9IGFwcGx5X3BhdGNoKHN0YXRlLCBmZCwgYXJnLCBvcHRpb25zKTsKKwkJY2xvc2UoZmQpOworCQlmcmVlKHRvX2ZyZWUpOworCQlpZiAocmVzIDwgMCkKKwkJCWdvdG8gZW5kOworCQllcnJzIHw9IHJlczsKKwl9CisJc2V0X2RlZmF1bHRfd2hpdGVzcGFjZV9tb2RlKHN0YXRlKTsKKwlpZiAocmVhZF9zdGRpbikgeworCQlyZXMgPSBhcHBseV9wYXRjaChzdGF0ZSwgMCwgIjxzdGRpbj4iLCBvcHRpb25zKTsKKwkJaWYgKHJlcyA8IDApCisJCQlnb3RvIGVuZDsKKwkJZXJycyB8PSByZXM7CisJfQorCisJaWYgKHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKSB7CisJCWlmIChzdGF0ZS0+c3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyAmJgorCQkgICAgc3RhdGUtPnNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgPCBzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvcikgeworCQkJaW50IHNxdWVsY2hlZCA9CisJCQkJc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IgLSBzdGF0ZS0+c3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9yczsKKwkJCXdhcm5pbmcoUV8oInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIiwKKwkJCQkgICAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIiwKKwkJCQkgICBzcXVlbGNoZWQpLAorCQkJCXNxdWVsY2hlZCk7CisJCX0KKwkJaWYgKHN0YXRlLT53c19lcnJvcl9hY3Rpb24gPT0gZGllX29uX3dzX2Vycm9yKSB7CisJCQllcnJvcihRXygiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkJICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIiwKKwkJCQkgc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IpLAorCQkJICAgICAgc3RhdGUtPndoaXRlc3BhY2VfZXJyb3IpOworCQkJcmVzID0gLTEyODsKKwkJCWdvdG8gZW5kOworCQl9CisJCWlmIChzdGF0ZS0+YXBwbGllZF9hZnRlcl9maXhpbmdfd3MgJiYgc3RhdGUtPmFwcGx5KQorCQkJd2FybmluZyhRXygiJWQgbGluZSBhcHBsaWVkIGFmdGVyIgorCQkJCSAgICIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkJICAgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIiCisJCQkJICAgIiBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIiwKKwkJCQkgICBzdGF0ZS0+YXBwbGllZF9hZnRlcl9maXhpbmdfd3MpLAorCQkJCXN0YXRlLT5hcHBsaWVkX2FmdGVyX2ZpeGluZ193cyk7CisJCWVsc2UgaWYgKHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKQorCQkJd2FybmluZyhRXygiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkJICAgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iLAorCQkJCSAgIHN0YXRlLT53aGl0ZXNwYWNlX2Vycm9yKSwKKwkJCQlzdGF0ZS0+d2hpdGVzcGFjZV9lcnJvcik7CisJfQorCisJaWYgKHN0YXRlLT51cGRhdGVfaW5kZXgpIHsKKwkJcmVzID0gd3JpdGVfbG9ja2VkX2luZGV4KHN0YXRlLT5yZXBvLT5pbmRleCwgJnN0YXRlLT5sb2NrX2ZpbGUsIENPTU1JVF9MT0NLKTsKKwkJaWYgKHJlcykgeworCQkJZXJyb3IoXygiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCQkJcmVzID0gLTEyODsKKwkJCWdvdG8gZW5kOworCQl9CisJfQorCisJcmVzID0gISFlcnJzOworCitlbmQ6CisJcm9sbGJhY2tfbG9ja19maWxlKCZzdGF0ZS0+bG9ja19maWxlKTsKKworCWlmIChzdGF0ZS0+YXBwbHlfdmVyYm9zaXR5IDw9IHZlcmJvc2l0eV9zaWxlbnQpIHsKKwkJc2V0X2Vycm9yX3JvdXRpbmUoc3RhdGUtPnNhdmVkX2Vycm9yX3JvdXRpbmUpOworCQlzZXRfd2Fybl9yb3V0aW5lKHN0YXRlLT5zYXZlZF93YXJuX3JvdXRpbmUpOworCX0KKworCWlmIChyZXMgPiAtMSkKKwkJcmV0dXJuIHJlczsKKwlyZXR1cm4gKHJlcyA9PSAtMSA/IDEgOiAxMjgpOworfQorCitpbnQgYXBwbHlfcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQlzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJaW50ICpmb3JjZV9hcHBseSwgaW50ICpvcHRpb25zLAorCQkJY29uc3QgY2hhciAqIGNvbnN0ICphcHBseV91c2FnZSkKK3sKKwlzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fYXBwbHlfb3B0aW9uc1tdID0geworCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImV4Y2x1ZGUiLCBzdGF0ZSwgTl8oInBhdGgiKSwKKwkJCU5fKCJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIiksCisJCQlQQVJTRV9PUFRfTk9ORUcsIGFwcGx5X29wdGlvbl9wYXJzZV9leGNsdWRlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaW5jbHVkZSIsIHN0YXRlLCBOXygicGF0aCIpLAorCQkJTl8oImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiKSwKKwkJCVBBUlNFX09QVF9OT05FRywgYXBwbHlfb3B0aW9uX3BhcnNlX2luY2x1ZGUgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdwJywgTlVMTCwgc3RhdGUsIE5fKCJudW0iKSwKKwkJCU5fKCJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIpLAorCQkJMCwgYXBwbHlfb3B0aW9uX3BhcnNlX3AgfSwKKwkJT1BUX0JPT0woMCwgIm5vLWFkZCIsICZzdGF0ZS0+bm9fYWRkLAorCQkJTl8oImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giKSksCisJCU9QVF9CT09MKDAsICJzdGF0IiwgJnN0YXRlLT5kaWZmc3RhdCwKKwkJCU5fKCJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiKSksCisJCU9QVF9OT09QX05PQVJHKDAsICJhbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQiKSwKKwkJT1BUX05PT1BfTk9BUkcoMCwgImJpbmFyeSIpLAorCQlPUFRfQk9PTCgwLCAibnVtc3RhdCIsICZzdGF0ZS0+bnVtc3RhdCwKKwkJCU5fKCJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIikpLAorCQlPUFRfQk9PTCgwLCAic3VtbWFyeSIsICZzdGF0ZS0+c3VtbWFyeSwKKwkJCU5fKCJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IikpLAorCQlPUFRfQk9PTCgwLCAiY2hlY2siLCAmc3RhdGUtPmNoZWNrLAorCQkJTl8oImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiKSksCisJCU9QVF9CT09MKDAsICJpbmRleCIsICZzdGF0ZS0+Y2hlY2tfaW5kZXgsCisJCQlOXygibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IikpLAorCQlPUFRfQk9PTCgnTicsICJpbnRlbnQtdG8tYWRkIiwgJnN0YXRlLT5pdGFfb25seSwKKwkJCU5fKCJtYXJrIG5ldyBmaWxlcyB3aXRoIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiKSksCisJCU9QVF9CT09MKDAsICJjYWNoZWQiLCAmc3RhdGUtPmNhY2hlZCwKKwkJCU5fKCJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0JPT0xfRigwLCAidW5zYWZlLXBhdGhzIiwgJnN0YXRlLT51bnNhZmVfcGF0aHMsCisJCQkgICBOXygiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIpLAorCQkJICAgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfQk9PTCgwLCAiYXBwbHkiLCBmb3JjZV9hcHBseSwKKwkJCU5fKCJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIpKSwKKwkJT1BUX0JPT0woJzMnLCAiM3dheSIsICZzdGF0ZS0+dGhyZWV3YXksCisJCQkgTl8oICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IikpLAorCQlPUFRfRklMRU5BTUUoMCwgImJ1aWxkLWZha2UtYW5jZXN0b3IiLCAmc3RhdGUtPmZha2VfYW5jZXN0b3IsCisJCQlOXygiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iKSksCisJCS8qIFRoaW5rIHR3aWNlIGJlZm9yZSBhZGRpbmcgIi0tbnVsIiBzeW5vbnltIHRvIHRoaXMgKi8KKwkJT1BUX1NFVF9JTlQoJ3onLCBOVUxMLCAmc3RhdGUtPmxpbmVfdGVybWluYXRpb24sCisJCQlOXygicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiKSwgJ1wwJyksCisJCU9QVF9JTlRFR0VSKCdDJywgTlVMTCwgJnN0YXRlLT5wX2NvbnRleHQsCisJCQkJTl8oImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJ3aGl0ZXNwYWNlIiwgc3RhdGUsIE5fKCJhY3Rpb24iKSwKKwkJCU5fKCJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIpLAorCQkJMCwgYXBwbHlfb3B0aW9uX3BhcnNlX3doaXRlc3BhY2UgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpZ25vcmUtc3BhY2UtY2hhbmdlIiwgc3RhdGUsIE5VTEwsCisJCQlOXygiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBhcHBseV9vcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaWdub3JlLXdoaXRlc3BhY2UiLCBzdGF0ZSwgTlVMTCwKKwkJCU5fKCJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IiksCisJCQlQQVJTRV9PUFRfTk9BUkcsIGFwcGx5X29wdGlvbl9wYXJzZV9zcGFjZV9jaGFuZ2UgfSwKKwkJT1BUX0JPT0woJ1InLCAicmV2ZXJzZSIsICZzdGF0ZS0+YXBwbHlfaW5fcmV2ZXJzZSwKKwkJCU5fKCJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIpKSwKKwkJT1BUX0JPT0woMCwgInVuaWRpZmYtemVybyIsICZzdGF0ZS0+dW5pZGlmZl96ZXJvLAorCQkJTl8oImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IikpLAorCQlPUFRfQk9PTCgwLCAicmVqZWN0IiwgJnN0YXRlLT5hcHBseV93aXRoX3JlamVjdCwKKwkJCU5fKCJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIpKSwKKwkJT1BUX0JPT0woMCwgImFsbG93LW92ZXJsYXAiLCAmc3RhdGUtPmFsbG93X292ZXJsYXAsCisJCQlOXygiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiKSksCisJCU9QVF9fVkVSQk9TRSgmc3RhdGUtPmFwcGx5X3ZlcmJvc2l0eSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9CSVQoMCwgImluYWNjdXJhdGUtZW9mIiwgb3B0aW9ucywKKwkJCU5fKCJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIpLAorCQkJQVBQTFlfT1BUX0lOQUNDVVJBVEVfRU9GKSwKKwkJT1BUX0JJVCgwLCAicmVjb3VudCIsIG9wdGlvbnMsCisJCQlOXygiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIiksCisJCQlBUFBMWV9PUFRfUkVDT1VOVCksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiZGlyZWN0b3J5Iiwgc3RhdGUsIE5fKCJyb290IiksCisJCQlOXygicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIpLAorCQkJMCwgYXBwbHlfb3B0aW9uX3BhcnNlX2RpcmVjdG9yeSB9LAorCQlPUFRfRU5EKCkKKwl9OworCisJcmV0dXJuIHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgc3RhdGUtPnByZWZpeCwgYnVpbHRpbl9hcHBseV9vcHRpb25zLCBhcHBseV91c2FnZSwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcHBseS5oIGIvYXBwbHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTNkOTVmCi0tLSAvZGV2L251bGwKKysrIGIvYXBwbHkuaApAQCAtMCwwICsxLDE5MCBAQAorI2lmbmRlZiBBUFBMWV9ICisjZGVmaW5lIEFQUExZX0gKKworI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCByZXBvc2l0b3J5OworCitlbnVtIGFwcGx5X3dzX2Vycm9yX2FjdGlvbiB7CisJbm93YXJuX3dzX2Vycm9yLAorCXdhcm5fb25fd3NfZXJyb3IsCisJZGllX29uX3dzX2Vycm9yLAorCWNvcnJlY3Rfd3NfZXJyb3IKK307CisKK2VudW0gYXBwbHlfd3NfaWdub3JlIHsKKwlpZ25vcmVfd3Nfbm9uZSwKKwlpZ25vcmVfd3NfY2hhbmdlCit9OworCitlbnVtIGFwcGx5X3ZlcmJvc2l0eSB7CisJdmVyYm9zaXR5X3NpbGVudCA9IC0xLAorCXZlcmJvc2l0eV9ub3JtYWwgPSAwLAorCXZlcmJvc2l0eV92ZXJib3NlID0gMQorfTsKKworLyoKKyAqIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3cgc3ltbGlua3MgaW4gdGhlIHByZWltYWdlIGFyZQorICogbWFuaXB1bGF0ZWQgYnkgdGhlIHBhdGNoZXMuICBBIHBhdGNoIHRvIGFkZCBhL2IvYyB3aGVyZSBhL2IKKyAqIGlzIGEgc3ltbGluayBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gYWZmZWN0IHRoZSBkaXJlY3RvcnkKKyAqIHRoZSBzeW1saW5rIHBvaW50cyBhdCwgYnV0IGlmIHRoZSBzYW1lIHBhdGNoIHJlbW92ZXMgYS9iLAorICogaXQgaXMgcGVyZmVjdGx5IGZpbmUsIGFzIHRoZSBwYXRjaCByZW1vdmVzIGEvYiB0byBtYWtlIHJvb20KKyAqIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBhL2Igc28gdGhhdCBhL2IvYyBjYW4gYmUgY3JlYXRlZC4KKyAqCisgKiBTZWUgYWxzbyAic3RydWN0IHN0cmluZ19saXN0IHN5bWxpbmtfY2hhbmdlcyIgaW4gInN0cnVjdAorICogYXBwbHlfc3RhdGUiLgorICovCisjZGVmaW5lIEFQUExZX1NZTUxJTktfR09FU19BV0FZIDAxCisjZGVmaW5lIEFQUExZX1NZTUxJTktfSU5fUkVTVUxUIDAyCisKK3N0cnVjdCBhcHBseV9zdGF0ZSB7CisJY29uc3QgY2hhciAqcHJlZml4OworCisJLyogTG9jayBmaWxlICovCisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGU7CisKKwkvKiBUaGVzZSBjb250cm9sIHdoYXQgZ2V0cyBsb29rZWQgYXQgYW5kIG1vZGlmaWVkICovCisJaW50IGFwcGx5OyAvKiB0aGlzIGlzIG5vdCBhIGRyeS1ydW4gKi8KKwlpbnQgY2FjaGVkOyAvKiBhcHBseSB0byB0aGUgaW5kZXggb25seSAqLworCWludCBjaGVjazsgLyogcHJlaW1hZ2UgbXVzdCBtYXRjaCB3b3JraW5nIHRyZWUsIGRvbid0IGFjdHVhbGx5IGFwcGx5ICovCisJaW50IGNoZWNrX2luZGV4OyAvKiBwcmVpbWFnZSBtdXN0IG1hdGNoIHRoZSBpbmRleGVkIHZlcnNpb24gKi8KKwlpbnQgdXBkYXRlX2luZGV4OyAvKiBjaGVja19pbmRleCAmJiBhcHBseSAqLworCWludCBpdGFfb25seTsJICAvKiBhZGQgaW50ZW50LXRvLWFkZCBlbnRyaWVzIHRvIHRoZSBpbmRleCAqLworCisJLyogVGhlc2UgY29udHJvbCBjb3NtZXRpYyBhc3BlY3Qgb2YgdGhlIG91dHB1dCAqLworCWludCBkaWZmc3RhdDsgLyoganVzdCBzaG93IGEgZGlmZnN0YXQsIGFuZCBkb24ndCBhY3R1YWxseSBhcHBseSAqLworCWludCBudW1zdGF0OyAvKiBqdXN0IHNob3cgYSBudW1lcmljIGRpZmZzdGF0LCBhbmQgZG9uJ3QgYWN0dWFsbHkgYXBwbHkgKi8KKwlpbnQgc3VtbWFyeTsgLyoganVzdCByZXBvcnQgY3JlYXRpb24sIGRlbGV0aW9uLCBldGMsIGFuZCBkb24ndCBhY3R1YWxseSBhcHBseSAqLworCisJLyogVGhlc2UgYm9vbGVhbiBwYXJhbWV0ZXJzIGNvbnRyb2wgaG93IHRoZSBhcHBseSBpcyBkb25lICovCisJaW50IGFsbG93X292ZXJsYXA7CisJaW50IGFwcGx5X2luX3JldmVyc2U7CisJaW50IGFwcGx5X3dpdGhfcmVqZWN0OworCWludCBub19hZGQ7CisJaW50IHRocmVld2F5OworCWludCB1bmlkaWZmX3plcm87CisJaW50IHVuc2FmZV9wYXRoczsKKworCS8qIE90aGVyIG5vbiBib29sZWFuIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwljb25zdCBjaGFyICppbmRleF9maWxlOworCWVudW0gYXBwbHlfdmVyYm9zaXR5IGFwcGx5X3ZlcmJvc2l0eTsKKwljb25zdCBjaGFyICpmYWtlX2FuY2VzdG9yOworCWNvbnN0IGNoYXIgKnBhdGNoX2lucHV0X2ZpbGU7CisJaW50IGxpbmVfdGVybWluYXRpb247CisJc3RydWN0IHN0cmJ1ZiByb290OworCWludCBwX3ZhbHVlOworCWludCBwX3ZhbHVlX2tub3duOworCXVuc2lnbmVkIGludCBwX2NvbnRleHQ7CisKKwkvKiBFeGNsdWRlIGFuZCBpbmNsdWRlIHBhdGggcGFyYW1ldGVycyAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaW1pdF9ieV9uYW1lOworCWludCBoYXNfaW5jbHVkZTsKKworCS8qIFZhcmlvdXMgImN1cnJlbnQgc3RhdGUiICovCisJaW50IGxpbmVucjsgLyogY3VycmVudCBsaW5lIG51bWJlciAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCBzeW1saW5rX2NoYW5nZXM7IC8qIHdlIGhhdmUgdG8gdHJhY2sgc3ltbGlua3MgKi8KKworCS8qCisJICogRm9yICJkaWZmLXN0YXQiIGxpa2UgYmVoYXZpb3VyLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBiaWdnZXN0IGNoYW5nZQorCSAqIHdlJ3ZlIHNlZW4sIGFuZCB0aGUgbG9uZ2VzdCBmaWxlbmFtZS4gVGhhdCBhbGxvd3MgdXMgdG8gZG8gc2ltcGxlCisJICogc2NhbGluZy4KKwkgKi8KKwlpbnQgbWF4X2NoYW5nZTsKKwlpbnQgbWF4X2xlbjsKKworCS8qCisJICogUmVjb3JkcyBmaWxlbmFtZXMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCwgaW4gb3JkZXIgdG8gaGFuZGxlCisJICogdGhlIGNhc2Ugd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXRjaGVzIHRvdWNoIHRoZSBzYW1lIGZpbGUuCisJICovCisJc3RydWN0IHN0cmluZ19saXN0IGZuX3RhYmxlOworCisJLyoKKwkgKiBUaGlzIGlzIHRvIHNhdmUgcmVwb3J0aW5nIHJvdXRpbmVzIGJlZm9yZSB1c2luZworCSAqIHNldF9lcnJvcl9yb3V0aW5lKCkgb3Igc2V0X3dhcm5fcm91dGluZSgpIHRvIGluc3RhbGwgbXV0aW5nCisJICogcm91dGluZXMgd2hlbiBpbiB2ZXJib3NpdHlfc2lsZW50IG1vZGUuCisJICovCisJdm9pZCAoKnNhdmVkX2Vycm9yX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpOworCXZvaWQgKCpzYXZlZF93YXJuX3JvdXRpbmUpKGNvbnN0IGNoYXIgKndhcm4sIHZhX2xpc3QgcGFyYW1zKTsKKworCS8qIFRoZXNlIGNvbnRyb2wgd2hpdGVzcGFjZSBlcnJvcnMgKi8KKwllbnVtIGFwcGx5X3dzX2Vycm9yX2FjdGlvbiB3c19lcnJvcl9hY3Rpb247CisJZW51bSBhcHBseV93c19pZ25vcmUgd3NfaWdub3JlX2FjdGlvbjsKKwljb25zdCBjaGFyICp3aGl0ZXNwYWNlX29wdGlvbjsKKwlpbnQgd2hpdGVzcGFjZV9lcnJvcjsKKwlpbnQgc3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9yczsKKwlpbnQgYXBwbGllZF9hZnRlcl9maXhpbmdfd3M7Cit9OworCisvKgorICogVGhpcyByZXByZXNlbnRzIGEgInBhdGNoIiB0byBhIGZpbGUsIGJvdGggbWV0YWluZm8gY2hhbmdlcworICogc3VjaCBhcyBjcmVhdGlvbi9kZWxldGlvbiwgZmlsZW1vZGUgYW5kIGNvbnRlbnQgY2hhbmdlcyByZXByZXNlbnRlZAorICogYXMgYSBzZXJpZXMgb2YgZnJhZ21lbnRzLgorICovCitzdHJ1Y3QgcGF0Y2ggeworCWNoYXIgKm5ld19uYW1lLCAqb2xkX25hbWUsICpkZWZfbmFtZTsKKwl1bnNpZ25lZCBpbnQgb2xkX21vZGUsIG5ld19tb2RlOworCWludCBpc19uZXcsIGlzX2RlbGV0ZTsJLyogLTEgPSB1bmtub3duLCAwID0gZmFsc2UsIDEgPSB0cnVlICovCisJaW50IHJlamVjdGVkOworCXVuc2lnbmVkIHdzX3J1bGU7CisJaW50IGxpbmVzX2FkZGVkLCBsaW5lc19kZWxldGVkOworCWludCBzY29yZTsKKwlpbnQgZXh0ZW5zaW9uX2xpbmVucjsgLyogZmlyc3QgbGluZSBzcGVjaWZ5aW5nIGRlbGV0ZS9uZXcvcmVuYW1lL2NvcHkgKi8KKwl1bnNpZ25lZCBpbnQgaXNfdG9wbGV2ZWxfcmVsYXRpdmU6MTsKKwl1bnNpZ25lZCBpbnQgaW5hY2N1cmF0ZV9lb2Y6MTsKKwl1bnNpZ25lZCBpbnQgaXNfYmluYXJ5OjE7CisJdW5zaWduZWQgaW50IGlzX2NvcHk6MTsKKwl1bnNpZ25lZCBpbnQgaXNfcmVuYW1lOjE7CisJdW5zaWduZWQgaW50IHJlY291bnQ6MTsKKwl1bnNpZ25lZCBpbnQgY29uZmxpY3RlZF90aHJlZXdheToxOworCXVuc2lnbmVkIGludCBkaXJlY3RfdG9fdGhyZWV3YXk6MTsKKwl1bnNpZ25lZCBpbnQgY3JsZl9pbl9vbGQ6MTsKKwlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50czsKKwljaGFyICpyZXN1bHQ7CisJc2l6ZV90IHJlc3VsdHNpemU7CisJY2hhciBvbGRfb2lkX3ByZWZpeFtHSVRfTUFYX0hFWFNaICsgMV07CisJY2hhciBuZXdfb2lkX3ByZWZpeFtHSVRfTUFYX0hFWFNaICsgMV07CisJc3RydWN0IHBhdGNoICpuZXh0OworCisJLyogdGhyZWUtd2F5IGZhbGxiYWNrIHJlc3VsdCAqLworCXN0cnVjdCBvYmplY3RfaWQgdGhyZWV3YXlfc3RhZ2VbM107Cit9OworCitpbnQgYXBwbHlfcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQlzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkJaW50ICpmb3JjZV9hcHBseSwgaW50ICpvcHRpb25zLAorCQkJY29uc3QgY2hhciAqIGNvbnN0ICphcHBseV91c2FnZSk7CitpbnQgaW5pdF9hcHBseV9zdGF0ZShzdHJ1Y3QgYXBwbHlfc3RhdGUgKnN0YXRlLAorCQkgICAgIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCk7Cit2b2lkIGNsZWFyX2FwcGx5X3N0YXRlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUpOworaW50IGNoZWNrX2FwcGx5X3N0YXRlKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGludCBmb3JjZV9hcHBseSk7CisKKy8qCisgKiBQYXJzZSBhIGdpdCBkaWZmIGhlYWRlciwgc3RhcnRpbmcgYXQgbGluZS4gIEZpbGxzIHRoZSByZWxldmFudAorICogbWV0YWRhdGEgaW5mb3JtYXRpb24gaW4gJ3N0cnVjdCBwYXRjaCcuCisgKgorICogUmV0dXJucyAtMSBvbiBmYWlsdXJlLCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXJzZWQgaGVhZGVyIG90aGVyd2lzZS4KKyAqLworaW50IHBhcnNlX2dpdF9kaWZmX2hlYWRlcihzdHJ1Y3Qgc3RyYnVmICpyb290LAorCQkJICBpbnQgKmxpbmVuciwKKwkJCSAgaW50IHBfdmFsdWUsCisJCQkgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgIGludCBsZW4sCisJCQkgIHVuc2lnbmVkIGludCBzaXplLAorCQkJICBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKTsKKworLyoKKyAqIFNvbWUgYXNwZWN0cyBvZiB0aGUgYXBwbHkgYmVoYXZpb3IgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZworICogYml0cyBpbiB0aGUgIm9wdGlvbnMiIHBhcmFtZXRlciBwYXNzZWQgdG8gYXBwbHlfYWxsX3BhdGNoZXMoKS4KKyAqLworI2RlZmluZSBBUFBMWV9PUFRfSU5BQ0NVUkFURV9FT0YJKDE8PDApIC8qIGFjY2VwdCBpbmFjY3VyYXRlIGVvZiAqLworI2RlZmluZSBBUFBMWV9PUFRfUkVDT1VOVAkJKDE8PDEpIC8qIGFjY2VwdCBpbmFjY3VyYXRlIGxpbmUgY291bnQgKi8KKworaW50IGFwcGx5X2FsbF9wYXRjaGVzKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJICAgICAgaW50IG9wdGlvbnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2hpdmUtdGFyLmMgYi9hcmNoaXZlLXRhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNzc3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoaXZlLXRhci5jCkBAIC0wLDAgKzEsNTAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFJlbmUgU2NoYXJmZQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0YXIuaCIKKyNpbmNsdWRlICJhcmNoaXZlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworI2RlZmluZSBSRUNPUkRTSVpFCSg1MTIpCisjZGVmaW5lIEJMT0NLU0laRQkoUkVDT1JEU0laRSAqIDIwKQorCitzdGF0aWMgY2hhciBibG9ja1tCTE9DS1NJWkVdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCitzdGF0aWMgaW50IHRhcl91bWFzayA9IDAwMjsKKworc3RhdGljIGludCB3cml0ZV90YXJfZmlsdGVyX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyICphciwKKwkJCQkgICAgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MpOworCisvKgorICogVGhpcyBpcyB0aGUgbWF4IHZhbHVlIHRoYXQgYSB1c3RhciBzaXplIGhlYWRlciBjYW4gc3BlY2lmeSwgYXMgaXQgaXMgZml4ZWQKKyAqIGF0IDExIG9jdGFsIGRpZ2l0cy4gUE9TSVggc3BlY2lmaWVzIHRoYXQgd2Ugc3dpdGNoIHRvIGV4dGVuZGVkIGhlYWRlcnMgYXQKKyAqIHRoaXMgc2l6ZS4KKyAqCisgKiBMaWtld2lzZSBmb3IgdGhlIG10aW1lICh3aGljaCBoYXBwZW5zIHRvIHVzZSBhIGJ1ZmZlciBvZiB0aGUgc2FtZSBzaXplKS4KKyAqLworI2lmIFVMT05HX01BWCA9PSAweEZGRkZGRkZGCisjZGVmaW5lIFVTVEFSX01BWF9TSVpFIFVMT05HX01BWAorI2Vsc2UKKyNkZWZpbmUgVVNUQVJfTUFYX1NJWkUgMDc3Nzc3Nzc3Nzc3VUwKKyNlbmRpZgorI2lmIFRJTUVfTUFYID09IDB4RkZGRkZGRkYKKyNkZWZpbmUgVVNUQVJfTUFYX01USU1FIFRJTUVfTUFYCisjZWxzZQorI2RlZmluZSBVU1RBUl9NQVhfTVRJTUUgMDc3Nzc3Nzc3Nzc3VUxMCisjZW5kaWYKKworLyogd3JpdGVzIG91dCB0aGUgd2hvbGUgYmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGlzIGZ1bGwgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX2lmX25lZWRlZCh2b2lkKQoreworCWlmIChvZmZzZXQgPT0gQkxPQ0tTSVpFKSB7CisJCXdyaXRlX29yX2RpZSgxLCBibG9jaywgQkxPQ0tTSVpFKTsKKwkJb2Zmc2V0ID0gMDsKKwl9Cit9CisKKy8qCisgKiBxdWV1ZXMgdXAgd3JpdGVzLCBzbyB0aGF0IGFsbCBvdXIgd3JpdGUoMikgY2FsbHMgd3JpdGUgZXhhY3RseSBvbmUKKyAqIGZ1bGwgYmxvY2s7IHBhZHMgd3JpdGVzIHRvIFJFQ09SRFNJWkUKKyAqLworc3RhdGljIHZvaWQgZG9fd3JpdGVfYmxvY2tlZChjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJY29uc3QgY2hhciAqYnVmID0gZGF0YTsKKworCWlmIChvZmZzZXQpIHsKKwkJdW5zaWduZWQgbG9uZyBjaHVuayA9IEJMT0NLU0laRSAtIG9mZnNldDsKKwkJaWYgKHNpemUgPCBjaHVuaykKKwkJCWNodW5rID0gc2l6ZTsKKwkJbWVtY3B5KGJsb2NrICsgb2Zmc2V0LCBidWYsIGNodW5rKTsKKwkJc2l6ZSAtPSBjaHVuazsKKwkJb2Zmc2V0ICs9IGNodW5rOworCQlidWYgKz0gY2h1bms7CisJCXdyaXRlX2lmX25lZWRlZCgpOworCX0KKwl3aGlsZSAoc2l6ZSA+PSBCTE9DS1NJWkUpIHsKKwkJd3JpdGVfb3JfZGllKDEsIGJ1ZiwgQkxPQ0tTSVpFKTsKKwkJc2l6ZSAtPSBCTE9DS1NJWkU7CisJCWJ1ZiArPSBCTE9DS1NJWkU7CisJfQorCWlmIChzaXplKSB7CisJCW1lbWNweShibG9jayArIG9mZnNldCwgYnVmLCBzaXplKTsKKwkJb2Zmc2V0ICs9IHNpemU7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfcmVjb3JkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0YWlsOworCXRhaWwgPSBvZmZzZXQgJSBSRUNPUkRTSVpFOworCWlmICh0YWlsKSAgeworCQltZW1zZXQoYmxvY2sgKyBvZmZzZXQsIDAsIFJFQ09SRFNJWkUgLSB0YWlsKTsKKwkJb2Zmc2V0ICs9IFJFQ09SRFNJWkUgLSB0YWlsOworCX0KKwl3cml0ZV9pZl9uZWVkZWQoKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfYmxvY2tlZChjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJZG9fd3JpdGVfYmxvY2tlZChkYXRhLCBzaXplKTsKKwlmaW5pc2hfcmVjb3JkKCk7Cit9CisKKy8qCisgKiBUaGUgZW5kIG9mIHRhciBhcmNoaXZlcyBpcyBtYXJrZWQgYnkgMio1MTIgbnVsIGJ5dGVzIGFuZCBhZnRlciB0aGF0CisgKiBmb2xsb3dzIHRoZSByZXN0IG9mIHRoZSBibG9jayAoaWYgYW55KS4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfdHJhaWxlcih2b2lkKQoreworCWludCB0YWlsID0gQkxPQ0tTSVpFIC0gb2Zmc2V0OworCW1lbXNldChibG9jayArIG9mZnNldCwgMCwgdGFpbCk7CisJd3JpdGVfb3JfZGllKDEsIGJsb2NrLCBCTE9DS1NJWkUpOworCWlmICh0YWlsIDwgMiAqIFJFQ09SRFNJWkUpIHsKKwkJbWVtc2V0KGJsb2NrLCAwLCBvZmZzZXQpOworCQl3cml0ZV9vcl9kaWUoMSwgYmxvY2ssIEJMT0NLU0laRSk7CisJfQorfQorCisvKgorICogcXVldWVzIHVwIHdyaXRlcywgc28gdGhhdCBhbGwgb3VyIHdyaXRlKDIpIGNhbGxzIHdyaXRlIGV4YWN0bHkgb25lCisgKiBmdWxsIGJsb2NrOyBwYWRzIHdyaXRlcyB0byBSRUNPUkRTSVpFCisgKi8KK3N0YXRpYyBpbnQgc3RyZWFtX2Jsb2NrZWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHN6OworCWNoYXIgYnVmW0JMT0NLU0laRV07CisJc3NpemVfdCByZWFkbGVuOworCisJc3QgPSBvcGVuX2lzdHJlYW0ociwgb2lkLCAmdHlwZSwgJnN6LCBOVUxMKTsKKwlpZiAoIXN0KQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHN0cmVhbSBibG9iICVzIiksIG9pZF90b19oZXgob2lkKSk7CisJZm9yICg7OykgeworCQlyZWFkbGVuID0gcmVhZF9pc3RyZWFtKHN0LCBidWYsIHNpemVvZihidWYpKTsKKwkJaWYgKHJlYWRsZW4gPD0gMCkKKwkJCWJyZWFrOworCQlkb193cml0ZV9ibG9ja2VkKGJ1ZiwgcmVhZGxlbik7CisJfQorCWNsb3NlX2lzdHJlYW0oc3QpOworCWlmICghcmVhZGxlbikKKwkJZmluaXNoX3JlY29yZCgpOworCXJldHVybiByZWFkbGVuOworfQorCisvKgorICogcGF4IGV4dGVuZGVkIGhlYWRlciByZWNvcmRzIGhhdmUgdGhlIGZvcm1hdCAiJXUgJXM9JXNcbiIuICAldSBjb250YWlucworICogdGhlIHNpemUgb2YgdGhlIHdob2xlIHN0cmluZyAoaW5jbHVkaW5nIHRoZSAldSksIHRoZSBmaXJzdCAlcyBpcyB0aGUKKyAqIGtleXdvcmQsIHRoZSBzZWNvbmQgb25lIGlzIHRoZSB2YWx1ZS4gIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0cyBzdWNoIGEKKyAqIHN0cmluZyBhbmQgYXBwZW5kcyBpdCB0byBhIHN0cnVjdCBzdHJidWYuCisgKi8KK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqa2V5d29yZCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgdmFsdWVsZW4pCit7CisJc2l6ZV90IG9yaWdfbGVuID0gc2ItPmxlbjsKKwlzaXplX3QgbGVuLCB0bXA7CisKKwkvKiAiJXUgJXM9JXNcbiIgKi8KKwlsZW4gPSAxICsgMSArIHN0cmxlbihrZXl3b3JkKSArIDEgKyB2YWx1ZWxlbiArIDE7CisJZm9yICh0bXAgPSAxOyBsZW4gLyAxMCA+PSB0bXA7IHRtcCAqPSAxMCkKKwkJbGVuKys7CisKKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwlzdHJidWZfYWRkZihzYiwgIiUiUFJJdU1BWCIgJXM9IiwgKHVpbnRtYXhfdClsZW4sIGtleXdvcmQpOworCXN0cmJ1Zl9hZGQoc2IsIHZhbHVlLCB2YWx1ZWxlbik7CisJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKworCWlmIChsZW4gIT0gc2ItPmxlbiAtIG9yaWdfbGVuKQorCQlCVUcoInBheCBleHRlbmRlZCBoZWFkZXIgbGVuZ3RoIG1pc2NhbGN1bGF0ZWQgYXMgJSJQUkl1TUFYCisJCSAgICAiLCBzaG91bGQgYmUgJSJQUkl1TUFYLAorCQkgICAgKHVpbnRtYXhfdClsZW4sICh1aW50bWF4X3QpKHNiLT5sZW4gLSBvcmlnX2xlbikpOworfQorCisvKgorICogTGlrZSBzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXIsIGJ1dCBmb3IgbnVtZXJpYyB2YWx1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcl91aW50KHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCQkgIGNvbnN0IGNoYXIgKmtleXdvcmQsCisJCQkJCSAgdWludG1heF90IHZhbHVlKQoreworCWNoYXIgYnVmWzQwXTsgLyogYmlnIGVub3VnaCBmb3IgMl4xMjggaW4gZGVjaW1hbCwgcGx1cyBOVUwgKi8KKwlpbnQgbGVuOworCisJbGVuID0geHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlIlBSSXVNQVgsIHZhbHVlKTsKKwlzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXIoc2IsIGtleXdvcmQsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB1c3Rhcl9oZWFkZXJfY2hrc3VtKGNvbnN0IHN0cnVjdCB1c3Rhcl9oZWFkZXIgKmhlYWRlcikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisJdW5zaWduZWQgaW50IGNoa3N1bSA9IDA7CisJd2hpbGUgKHAgPCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWhlYWRlci0+Y2hrc3VtKQorCQljaGtzdW0gKz0gKnArKzsKKwljaGtzdW0gKz0gc2l6ZW9mKGhlYWRlci0+Y2hrc3VtKSAqICcgJzsKKwlwICs9IHNpemVvZihoZWFkZXItPmNoa3N1bSk7CisJd2hpbGUgKHAgPCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWhlYWRlciArIHNpemVvZihzdHJ1Y3QgdXN0YXJfaGVhZGVyKSkKKwkJY2hrc3VtICs9ICpwKys7CisJcmV0dXJuIGNoa3N1bTsKK30KKworc3RhdGljIHNpemVfdCBnZXRfcGF0aF9wcmVmaXgoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4sIHNpemVfdCBtYXhsZW4pCit7CisJc2l6ZV90IGkgPSBwYXRobGVuOworCWlmIChpID4gMSAmJiBwYXRoW2kgLSAxXSA9PSAnLycpCisJCWktLTsKKwlpZiAoaSA+IG1heGxlbikKKwkJaSA9IG1heGxlbjsKKwlkbyB7CisJCWktLTsKKwl9IHdoaWxlIChpID4gMCAmJiBwYXRoW2ldICE9ICcvJyk7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaGVhZGVyKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJICAgc3RydWN0IHVzdGFyX2hlYWRlciAqaGVhZGVyLAorCQkJICAgdW5zaWduZWQgaW50IG1vZGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl4c25wcmludGYoaGVhZGVyLT5tb2RlLCBzaXplb2YoaGVhZGVyLT5tb2RlKSwgIiUwN28iLCBtb2RlICYgMDc3NzcpOworCXhzbnByaW50ZihoZWFkZXItPnNpemUsIHNpemVvZihoZWFkZXItPnNpemUpLCAiJTAxMSJQUklvTUFYICwgU19JU1JFRyhtb2RlKSA/ICh1aW50bWF4X3Qpc2l6ZSA6ICh1aW50bWF4X3QpMCk7CisJeHNucHJpbnRmKGhlYWRlci0+bXRpbWUsIHNpemVvZihoZWFkZXItPm10aW1lKSwgIiUwMTFsbyIsICh1bnNpZ25lZCBsb25nKSBhcmdzLT50aW1lKTsKKworCXhzbnByaW50ZihoZWFkZXItPnVpZCwgc2l6ZW9mKGhlYWRlci0+dWlkKSwgIiUwN28iLCAwKTsKKwl4c25wcmludGYoaGVhZGVyLT5naWQsIHNpemVvZihoZWFkZXItPmdpZCksICIlMDdvIiwgMCk7CisJc3RybGNweShoZWFkZXItPnVuYW1lLCAicm9vdCIsIHNpemVvZihoZWFkZXItPnVuYW1lKSk7CisJc3RybGNweShoZWFkZXItPmduYW1lLCAicm9vdCIsIHNpemVvZihoZWFkZXItPmduYW1lKSk7CisJeHNucHJpbnRmKGhlYWRlci0+ZGV2bWFqb3IsIHNpemVvZihoZWFkZXItPmRldm1ham9yKSwgIiUwN28iLCAwKTsKKwl4c25wcmludGYoaGVhZGVyLT5kZXZtaW5vciwgc2l6ZW9mKGhlYWRlci0+ZGV2bWlub3IpLCAiJTA3byIsIDApOworCisJbWVtY3B5KGhlYWRlci0+bWFnaWMsICJ1c3RhciIsIDYpOworCW1lbWNweShoZWFkZXItPnZlcnNpb24sICIwMCIsIDIpOworCisJeHNucHJpbnRmKGhlYWRlci0+Y2hrc3VtLCBzaXplb2YoaGVhZGVyLT5jaGtzdW0pLCAiJTA3byIsIHVzdGFyX2hlYWRlcl9jaGtzdW0oaGVhZGVyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2V4dGVuZGVkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgaGVhZGVyOworCXVuc2lnbmVkIGludCBtb2RlOworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJKmhlYWRlci50eXBlZmxhZyA9IFRZUEVGTEFHX0VYVF9IRUFERVI7CisJbW9kZSA9IDAxMDA2NjY7CisJeHNucHJpbnRmKGhlYWRlci5uYW1lLCBzaXplb2YoaGVhZGVyLm5hbWUpLCAiJXMucGF4aGVhZGVyIiwgb2lkX3RvX2hleChvaWQpKTsKKwlwcmVwYXJlX2hlYWRlcihhcmdzLCAmaGVhZGVyLCBtb2RlLCBzaXplKTsKKwl3cml0ZV9ibG9ja2VkKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKKwl3cml0ZV9ibG9ja2VkKGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfdGFyX2VudHJ5KHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4sCisJCQkgICB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgdXN0YXJfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIGV4dF9oZWFkZXIgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBpbnQgb2xkX21vZGUgPSBtb2RlOworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV9pbl9oZWFkZXI7CisJdm9pZCAqYnVmZmVyOworCWludCBlcnIgPSAwOworCisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKworCWlmIChTX0lTRElSKG1vZGUpIHx8IFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCSpoZWFkZXIudHlwZWZsYWcgPSBUWVBFRkxBR19ESVI7CisJCW1vZGUgPSAobW9kZSB8IDA3NzcpICYgfnRhcl91bWFzazsKKwl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKKwkJKmhlYWRlci50eXBlZmxhZyA9IFRZUEVGTEFHX0xOSzsKKwkJbW9kZSB8PSAwNzc3OworCX0gZWxzZSBpZiAoU19JU1JFRyhtb2RlKSkgeworCQkqaGVhZGVyLnR5cGVmbGFnID0gVFlQRUZMQUdfUkVHOworCQltb2RlID0gKG1vZGUgfCAoKG1vZGUgJiAwMTAwKSA/IDA3NzcgOiAwNjY2KSkgJiB+dGFyX3VtYXNrOworCX0gZWxzZSB7CisJCXJldHVybiBlcnJvcihfKCJ1bnN1cHBvcnRlZCBmaWxlIG1vZGU6IDAlbyAoU0hBMTogJXMpIiksCisJCQkgICAgIG1vZGUsIG9pZF90b19oZXgob2lkKSk7CisJfQorCWlmIChwYXRobGVuID4gc2l6ZW9mKGhlYWRlci5uYW1lKSkgeworCQlzaXplX3QgcGxlbiA9IGdldF9wYXRoX3ByZWZpeChwYXRoLCBwYXRobGVuLAorCQkJCQkgICAgICBzaXplb2YoaGVhZGVyLnByZWZpeCkpOworCQlzaXplX3QgcmVzdCA9IHBhdGhsZW4gLSBwbGVuIC0gMTsKKwkJaWYgKHBsZW4gPiAwICYmIHJlc3QgPD0gc2l6ZW9mKGhlYWRlci5uYW1lKSkgeworCQkJbWVtY3B5KGhlYWRlci5wcmVmaXgsIHBhdGgsIHBsZW4pOworCQkJbWVtY3B5KGhlYWRlci5uYW1lLCBwYXRoICsgcGxlbiArIDEsIHJlc3QpOworCQl9IGVsc2UgeworCQkJeHNucHJpbnRmKGhlYWRlci5uYW1lLCBzaXplb2YoaGVhZGVyLm5hbWUpLCAiJXMuZGF0YSIsCisJCQkJICBvaWRfdG9faGV4KG9pZCkpOworCQkJc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyKCZleHRfaGVhZGVyLCAicGF0aCIsCisJCQkJCQkgcGF0aCwgcGF0aGxlbik7CisJCX0KKwl9IGVsc2UKKwkJbWVtY3B5KGhlYWRlci5uYW1lLCBwYXRoLCBwYXRobGVuKTsKKworCWlmIChTX0lTUkVHKG1vZGUpICYmICFhcmdzLT5jb252ZXJ0ICYmCisJICAgIG9pZF9vYmplY3RfaW5mbyhhcmdzLT5yZXBvLCBvaWQsICZzaXplKSA9PSBPQkpfQkxPQiAmJgorCSAgICBzaXplID4gYmlnX2ZpbGVfdGhyZXNob2xkKQorCQlidWZmZXIgPSBOVUxMOworCWVsc2UgaWYgKFNfSVNMTksobW9kZSkgfHwgU19JU1JFRyhtb2RlKSkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWJ1ZmZlciA9IG9iamVjdF9maWxlX3RvX2FyY2hpdmUoYXJncywgcGF0aCwgb2lkLCBvbGRfbW9kZSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWZmZXIpCisJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlYWQgJXMiKSwgb2lkX3RvX2hleChvaWQpKTsKKwl9IGVsc2UgeworCQlidWZmZXIgPSBOVUxMOworCQlzaXplID0gMDsKKwl9CisKKwlpZiAoU19JU0xOSyhtb2RlKSkgeworCQlpZiAoc2l6ZSA+IHNpemVvZihoZWFkZXIubGlua25hbWUpKSB7CisJCQl4c25wcmludGYoaGVhZGVyLmxpbmtuYW1lLCBzaXplb2YoaGVhZGVyLmxpbmtuYW1lKSwKKwkJCQkgICJzZWUgJXMucGF4aGVhZGVyIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcigmZXh0X2hlYWRlciwgImxpbmtwYXRoIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemUpOworCQl9IGVsc2UKKwkJCW1lbWNweShoZWFkZXIubGlua25hbWUsIGJ1ZmZlciwgc2l6ZSk7CisJfQorCisJc2l6ZV9pbl9oZWFkZXIgPSBzaXplOworCWlmIChTX0lTUkVHKG1vZGUpICYmIHNpemUgPiBVU1RBUl9NQVhfU0laRSkgeworCQlzaXplX2luX2hlYWRlciA9IDA7CisJCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcl91aW50KCZleHRfaGVhZGVyLCAic2l6ZSIsIHNpemUpOworCX0KKworCXByZXBhcmVfaGVhZGVyKGFyZ3MsICZoZWFkZXIsIG1vZGUsIHNpemVfaW5faGVhZGVyKTsKKworCWlmIChleHRfaGVhZGVyLmxlbiA+IDApIHsKKwkJd3JpdGVfZXh0ZW5kZWRfaGVhZGVyKGFyZ3MsIG9pZCwgZXh0X2hlYWRlci5idWYsCisJCQkJICAgICAgZXh0X2hlYWRlci5sZW4pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZXh0X2hlYWRlcik7CisJd3JpdGVfYmxvY2tlZCgmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisJaWYgKFNfSVNSRUcobW9kZSkgJiYgc2l6ZSA+IDApIHsKKwkJaWYgKGJ1ZmZlcikKKwkJCXdyaXRlX2Jsb2NrZWQoYnVmZmVyLCBzaXplKTsKKwkJZWxzZQorCQkJZXJyID0gc3RyZWFtX2Jsb2NrZWQoYXJncy0+cmVwbywgb2lkKTsKKwl9CisJZnJlZShidWZmZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2dsb2JhbF9leHRlbmRlZF9oZWFkZXIoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkID0gYXJncy0+Y29tbWl0X29pZDsKKwlzdHJ1Y3Qgc3RyYnVmIGV4dF9oZWFkZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgdXN0YXJfaGVhZGVyIGhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKworCWlmIChvaWQpCisJCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcigmZXh0X2hlYWRlciwgImNvbW1lbnQiLAorCQkJCQkgb2lkX3RvX2hleChvaWQpLAorCQkJCQkgdGhlX2hhc2hfYWxnby0+aGV4c3opOworCWlmIChhcmdzLT50aW1lID4gVVNUQVJfTUFYX01USU1FKSB7CisJCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcl91aW50KCZleHRfaGVhZGVyLCAibXRpbWUiLAorCQkJCQkgICAgICBhcmdzLT50aW1lKTsKKwkJYXJncy0+dGltZSA9IFVTVEFSX01BWF9NVElNRTsKKwl9CisKKwlpZiAoIWV4dF9oZWFkZXIubGVuKQorCQlyZXR1cm47CisKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCSpoZWFkZXIudHlwZWZsYWcgPSBUWVBFRkxBR19HTE9CQUxfSEVBREVSOworCW1vZGUgPSAwMTAwNjY2OworCXhzbnByaW50ZihoZWFkZXIubmFtZSwgc2l6ZW9mKGhlYWRlci5uYW1lKSwgInBheF9nbG9iYWxfaGVhZGVyIik7CisJcHJlcGFyZV9oZWFkZXIoYXJncywgJmhlYWRlciwgbW9kZSwgZXh0X2hlYWRlci5sZW4pOworCXdyaXRlX2Jsb2NrZWQoJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworCXdyaXRlX2Jsb2NrZWQoZXh0X2hlYWRlci5idWYsIGV4dF9oZWFkZXIubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmZXh0X2hlYWRlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXJjaGl2ZXIgKip0YXJfZmlsdGVyczsKK3N0YXRpYyBpbnQgbnJfdGFyX2ZpbHRlcnM7CitzdGF0aWMgaW50IGFsbG9jX3Rhcl9maWx0ZXJzOworCitzdGF0aWMgc3RydWN0IGFyY2hpdmVyICpmaW5kX3Rhcl9maWx0ZXIoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdGFyX2ZpbHRlcnM7IGkrKykgeworCQlzdHJ1Y3QgYXJjaGl2ZXIgKmFyID0gdGFyX2ZpbHRlcnNbaV07CisJCWlmICghc3RybmNtcChhci0+bmFtZSwgbmFtZSwgbGVuKSAmJiAhYXItPm5hbWVbbGVuXSkKKwkJCXJldHVybiBhcjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdGFyX2ZpbHRlcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXJjaGl2ZXIgKmFyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgbmFtZWxlbjsKKworCWlmIChwYXJzZV9jb25maWdfa2V5KHZhciwgInRhciIsICZuYW1lLCAmbmFtZWxlbiwgJnR5cGUpIDwgMCB8fCAhbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlhciA9IGZpbmRfdGFyX2ZpbHRlcihuYW1lLCBuYW1lbGVuKTsKKwlpZiAoIWFyKSB7CisJCWFyID0geGNhbGxvYygxLCBzaXplb2YoKmFyKSk7CisJCWFyLT5uYW1lID0geG1lbWR1cHoobmFtZSwgbmFtZWxlbik7CisJCWFyLT53cml0ZV9hcmNoaXZlID0gd3JpdGVfdGFyX2ZpbHRlcl9hcmNoaXZlOworCQlhci0+ZmxhZ3MgPSBBUkNISVZFUl9XQU5UX0NPTVBSRVNTSU9OX0xFVkVMUzsKKwkJQUxMT0NfR1JPVyh0YXJfZmlsdGVycywgbnJfdGFyX2ZpbHRlcnMgKyAxLCBhbGxvY190YXJfZmlsdGVycyk7CisJCXRhcl9maWx0ZXJzW25yX3Rhcl9maWx0ZXJzKytdID0gYXI7CisJfQorCisJaWYgKCFzdHJjbXAodHlwZSwgImNvbW1hbmQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWZyZWUoYXItPmRhdGEpOworCQlhci0+ZGF0YSA9IHhzdHJkdXAodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodHlwZSwgInJlbW90ZSIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQlhci0+ZmxhZ3MgfD0gQVJDSElWRVJfUkVNT1RFOworCQllbHNlCisJCQlhci0+ZmxhZ3MgJj0gfkFSQ0hJVkVSX1JFTU9URTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3Rhcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAidGFyLnVtYXNrIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjbXAodmFsdWUsICJ1c2VyIikpIHsKKwkJCXRhcl91bWFzayA9IHVtYXNrKDApOworCQkJdW1hc2sodGFyX3VtYXNrKTsKKwkJfSBlbHNlIHsKKwkJCXRhcl91bWFzayA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQl9CisJCXJldHVybiAwOworCX0KKworCXJldHVybiB0YXJfZmlsdGVyX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfdGFyX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyICphciwKKwkJCSAgICAgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MpCit7CisJaW50IGVyciA9IDA7CisKKwl3cml0ZV9nbG9iYWxfZXh0ZW5kZWRfaGVhZGVyKGFyZ3MpOworCWVyciA9IHdyaXRlX2FyY2hpdmVfZW50cmllcyhhcmdzLCB3cml0ZV90YXJfZW50cnkpOworCWlmICghZXJyKQorCQl3cml0ZV90cmFpbGVyKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB3cml0ZV90YXJfZmlsdGVyX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyICphciwKKwkJCQkgICAgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBjbWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBmaWx0ZXIgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndlsyXTsKKwlpbnQgcjsKKworCWlmICghYXItPmRhdGEpCisJCUJVRygidGFyLWZpbHRlciBhcmNoaXZlciBjYWxsZWQgd2l0aCBubyBmaWx0ZXIgZGVmaW5lZCIpOworCisJc3RyYnVmX2FkZHN0cigmY21kLCBhci0+ZGF0YSk7CisJaWYgKGFyZ3MtPmNvbXByZXNzaW9uX2xldmVsID49IDApCisJCXN0cmJ1Zl9hZGRmKCZjbWQsICIgLSVkIiwgYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwpOworCisJYXJndlswXSA9IGNtZC5idWY7CisJYXJndlsxXSA9IE5VTEw7CisJZmlsdGVyLmFyZ3YgPSBhcmd2OworCWZpbHRlci51c2Vfc2hlbGwgPSAxOworCWZpbHRlci5pbiA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmZpbHRlcikgPCAwKQorCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIiksIGFyZ3ZbMF0pOworCWNsb3NlKDEpOworCWlmIChkdXAyKGZpbHRlci5pbiwgMSkgPCAwKQorCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiKSk7CisJY2xvc2UoZmlsdGVyLmluKTsKKworCXIgPSB3cml0ZV90YXJfYXJjaGl2ZShhciwgYXJncyk7CisKKwljbG9zZSgxKTsKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmZpbHRlcikgIT0gMCkKKwkJZGllKF8oIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIiksIGFyZ3ZbMF0pOworCisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXJjaGl2ZXIgdGFyX2FyY2hpdmVyID0geworCSJ0YXIiLAorCXdyaXRlX3Rhcl9hcmNoaXZlLAorCUFSQ0hJVkVSX1JFTU9URQorfTsKKwordm9pZCBpbml0X3Rhcl9hcmNoaXZlcih2b2lkKQoreworCWludCBpOworCXJlZ2lzdGVyX2FyY2hpdmVyKCZ0YXJfYXJjaGl2ZXIpOworCisJdGFyX2ZpbHRlcl9jb25maWcoInRhci50Z3ouY29tbWFuZCIsICJnemlwIC1jbiIsIE5VTEwpOworCXRhcl9maWx0ZXJfY29uZmlnKCJ0YXIudGd6LnJlbW90ZSIsICJ0cnVlIiwgTlVMTCk7CisJdGFyX2ZpbHRlcl9jb25maWcoInRhci50YXIuZ3ouY29tbWFuZCIsICJnemlwIC1jbiIsIE5VTEwpOworCXRhcl9maWx0ZXJfY29uZmlnKCJ0YXIudGFyLmd6LnJlbW90ZSIsICJ0cnVlIiwgTlVMTCk7CisJZ2l0X2NvbmZpZyhnaXRfdGFyX2NvbmZpZywgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IG5yX3Rhcl9maWx0ZXJzOyBpKyspIHsKKwkJLyogb21pdCBhbnkgZmlsdGVycyB0aGF0IG5ldmVyIGhhZCBhIGNvbW1hbmQgY29uZmlndXJlZCAqLworCQlpZiAodGFyX2ZpbHRlcnNbaV0tPmRhdGEpCisJCQlyZWdpc3Rlcl9hcmNoaXZlcih0YXJfZmlsdGVyc1tpXSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS16aXAuYyBiL2FyY2hpdmUtemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmNDI2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2hpdmUtemlwLmMKQEAgLTAsMCArMSw2NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUmVuZSBTY2hhcmZlCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKworc3RhdGljIGludCB6aXBfZGF0ZTsKK3N0YXRpYyBpbnQgemlwX3RpbWU7CisKKy8qIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgImJ1ZiIgcGFydCBoZXJlLiAqLworc3RhdGljIHN0cnVjdCBzdHJidWYgemlwX2RpcjsKKworc3RhdGljIHVpbnRtYXhfdCB6aXBfb2Zmc2V0Oworc3RhdGljIHVpbnQ2NF90IHppcF9kaXJfZW50cmllczsKKworc3RhdGljIHVuc2lnbmVkIGludCBtYXhfY3JlYXRvcl92ZXJzaW9uOworCisjZGVmaW5lIFpJUF9TVFJFQU0JKDEgPDwgIDMpCisjZGVmaW5lIFpJUF9VVEY4CSgxIDw8IDExKQorCitlbnVtIHppcF9tZXRob2QgeworCVpJUF9NRVRIT0RfU1RPUkUgPSAwLAorCVpJUF9NRVRIT0RfREVGTEFURSA9IDgKK307CisKK3N0cnVjdCB6aXBfbG9jYWxfaGVhZGVyIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGNoYXIgdmVyc2lvblsyXTsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzWzJdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3Npb25fbWV0aG9kWzJdOworCXVuc2lnbmVkIGNoYXIgbXRpbWVbMl07CisJdW5zaWduZWQgY2hhciBtZGF0ZVsyXTsKKwl1bnNpZ25lZCBjaGFyIGNyYzMyWzRdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3NlZF9zaXplWzRdOworCXVuc2lnbmVkIGNoYXIgc2l6ZVs0XTsKKwl1bnNpZ25lZCBjaGFyIGZpbGVuYW1lX2xlbmd0aFsyXTsKKwl1bnNpZ25lZCBjaGFyIGV4dHJhX2xlbmd0aFsyXTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwX2RhdGFfZGVzYyB7CisJdW5zaWduZWQgY2hhciBtYWdpY1s0XTsKKwl1bnNpZ25lZCBjaGFyIGNyYzMyWzRdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3NlZF9zaXplWzRdOworCXVuc2lnbmVkIGNoYXIgc2l6ZVs0XTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwNjRfZGF0YV9kZXNjIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGNoYXIgY3JjMzJbNF07CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkX3NpemVbOF07CisJdW5zaWduZWQgY2hhciBzaXplWzhdOworCXVuc2lnbmVkIGNoYXIgX2VuZFsxXTsKK307CisKK3N0cnVjdCB6aXBfZGlyX3RyYWlsZXIgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbNF07CisJdW5zaWduZWQgY2hhciBkaXNrWzJdOworCXVuc2lnbmVkIGNoYXIgZGlyZWN0b3J5X3N0YXJ0X2Rpc2tbMl07CisJdW5zaWduZWQgY2hhciBlbnRyaWVzX29uX3RoaXNfZGlza1syXTsKKwl1bnNpZ25lZCBjaGFyIGVudHJpZXNbMl07CisJdW5zaWduZWQgY2hhciBzaXplWzRdOworCXVuc2lnbmVkIGNoYXIgb2Zmc2V0WzRdOworCXVuc2lnbmVkIGNoYXIgY29tbWVudF9sZW5ndGhbMl07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcF9leHRyYV9tdGltZSB7CisJdW5zaWduZWQgY2hhciBtYWdpY1syXTsKKwl1bnNpZ25lZCBjaGFyIGV4dHJhX3NpemVbMl07CisJdW5zaWduZWQgY2hhciBmbGFnc1sxXTsKKwl1bnNpZ25lZCBjaGFyIG10aW1lWzRdOworCXVuc2lnbmVkIGNoYXIgX2VuZFsxXTsKK307CisKK3N0cnVjdCB6aXA2NF9leHRyYSB7CisJdW5zaWduZWQgY2hhciBtYWdpY1syXTsKKwl1bnNpZ25lZCBjaGFyIGV4dHJhX3NpemVbMl07CisJdW5zaWduZWQgY2hhciBzaXplWzhdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3NlZF9zaXplWzhdOworCXVuc2lnbmVkIGNoYXIgX2VuZFsxXTsKK307CisKK3N0cnVjdCB6aXA2NF9kaXJfdHJhaWxlciB7CisJdW5zaWduZWQgY2hhciBtYWdpY1s0XTsKKwl1bnNpZ25lZCBjaGFyIHJlY29yZF9zaXplWzhdOworCXVuc2lnbmVkIGNoYXIgY3JlYXRvcl92ZXJzaW9uWzJdOworCXVuc2lnbmVkIGNoYXIgdmVyc2lvblsyXTsKKwl1bnNpZ25lZCBjaGFyIGRpc2tbNF07CisJdW5zaWduZWQgY2hhciBkaXJlY3Rvcnlfc3RhcnRfZGlza1s0XTsKKwl1bnNpZ25lZCBjaGFyIGVudHJpZXNfb25fdGhpc19kaXNrWzhdOworCXVuc2lnbmVkIGNoYXIgZW50cmllc1s4XTsKKwl1bnNpZ25lZCBjaGFyIHNpemVbOF07CisJdW5zaWduZWQgY2hhciBvZmZzZXRbOF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcDY0X2Rpcl90cmFpbGVyX2xvY2F0b3IgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbNF07CisJdW5zaWduZWQgY2hhciBkaXNrWzRdOworCXVuc2lnbmVkIGNoYXIgb2Zmc2V0WzhdOworCXVuc2lnbmVkIGNoYXIgbnVtYmVyX29mX2Rpc2tzWzRdOworCXVuc2lnbmVkIGNoYXIgX2VuZFsxXTsKK307CisKKy8qCisgKiBPbiBBUk0sIHBhZGRpbmcgaXMgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0LCBzbyBhIHNpbXBsZQorICogc2l6ZW9mKHN0cnVjdCAuLi4pIHJlcG9ydHMgdHdvIGJ5dGVzIG1vcmUgdGhhbiB0aGUgcGF5bG9hZCBzaXplCisgKiB3ZSdyZSBpbnRlcmVzdGVkIGluLgorICovCisjZGVmaW5lIFpJUF9MT0NBTF9IRUFERVJfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwX2xvY2FsX2hlYWRlciwgX2VuZCkKKyNkZWZpbmUgWklQX0RBVEFfREVTQ19TSVpFCW9mZnNldG9mKHN0cnVjdCB6aXBfZGF0YV9kZXNjLCBfZW5kKQorI2RlZmluZSBaSVA2NF9EQVRBX0RFU0NfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwNjRfZGF0YV9kZXNjLCBfZW5kKQorI2RlZmluZSBaSVBfRElSX0hFQURFUl9TSVpFCW9mZnNldG9mKHN0cnVjdCB6aXBfZGlyX2hlYWRlciwgX2VuZCkKKyNkZWZpbmUgWklQX0RJUl9UUkFJTEVSX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcF9kaXJfdHJhaWxlciwgX2VuZCkKKyNkZWZpbmUgWklQX0VYVFJBX01USU1FX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcF9leHRyYV9tdGltZSwgX2VuZCkKKyNkZWZpbmUgWklQX0VYVFJBX01USU1FX1BBWUxPQURfU0laRSBcCisJKFpJUF9FWFRSQV9NVElNRV9TSVpFIC0gb2Zmc2V0b2Yoc3RydWN0IHppcF9leHRyYV9tdGltZSwgZmxhZ3MpKQorI2RlZmluZSBaSVA2NF9FWFRSQV9TSVpFCW9mZnNldG9mKHN0cnVjdCB6aXA2NF9leHRyYSwgX2VuZCkKKyNkZWZpbmUgWklQNjRfRVhUUkFfUEFZTE9BRF9TSVpFIFwKKwkoWklQNjRfRVhUUkFfU0laRSAtIG9mZnNldG9mKHN0cnVjdCB6aXA2NF9leHRyYSwgc2l6ZSkpCisjZGVmaW5lIFpJUDY0X0RJUl9UUkFJTEVSX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcDY0X2Rpcl90cmFpbGVyLCBfZW5kKQorI2RlZmluZSBaSVA2NF9ESVJfVFJBSUxFUl9SRUNPUkRfU0laRSBcCisJKFpJUDY0X0RJUl9UUkFJTEVSX1NJWkUgLSBcCisJIG9mZnNldG9mKHN0cnVjdCB6aXA2NF9kaXJfdHJhaWxlciwgY3JlYXRvcl92ZXJzaW9uKSkKKyNkZWZpbmUgWklQNjRfRElSX1RSQUlMRVJfTE9DQVRPUl9TSVpFIFwKKwlvZmZzZXRvZihzdHJ1Y3QgemlwNjRfZGlyX3RyYWlsZXJfbG9jYXRvciwgX2VuZCkKKworc3RhdGljIHZvaWQgY29weV9sZTE2KHVuc2lnbmVkIGNoYXIgKmRlc3QsIHVuc2lnbmVkIGludCBuKQoreworCWRlc3RbMF0gPSAweGZmICYgbjsKKwlkZXN0WzFdID0gMHhmZiAmIChuID4+IDAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGUzMih1bnNpZ25lZCBjaGFyICpkZXN0LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlkZXN0WzBdID0gMHhmZiAmIG47CisJZGVzdFsxXSA9IDB4ZmYgJiAobiA+PiAwMTApOworCWRlc3RbMl0gPSAweGZmICYgKG4gPj4gMDIwKTsKKwlkZXN0WzNdID0gMHhmZiAmIChuID4+IDAzMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGU2NCh1bnNpZ25lZCBjaGFyICpkZXN0LCB1aW50NjRfdCBuKQoreworCWRlc3RbMF0gPSAweGZmICYgbjsKKwlkZXN0WzFdID0gMHhmZiAmIChuID4+IDAxMCk7CisJZGVzdFsyXSA9IDB4ZmYgJiAobiA+PiAwMjApOworCWRlc3RbM10gPSAweGZmICYgKG4gPj4gMDMwKTsKKwlkZXN0WzRdID0gMHhmZiAmIChuID4+IDA0MCk7CisJZGVzdFs1XSA9IDB4ZmYgJiAobiA+PiAwNTApOworCWRlc3RbNl0gPSAweGZmICYgKG4gPj4gMDYwKTsKKwlkZXN0WzddID0gMHhmZiAmIChuID4+IDA3MCk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBjbGFtcF9tYXgodWludDY0X3QgbiwgdWludDY0X3QgbWF4LCBpbnQgKmNsYW1wZWQpCit7CisJaWYgKG4gPD0gbWF4KQorCQlyZXR1cm4gbjsKKwkqY2xhbXBlZCA9IDE7CisJcmV0dXJuIG1heDsKK30KKworc3RhdGljIHZvaWQgY29weV9sZTE2X2NsYW1wKHVuc2lnbmVkIGNoYXIgKmRlc3QsIHVpbnQ2NF90IG4sIGludCAqY2xhbXBlZCkKK3sKKwljb3B5X2xlMTYoZGVzdCwgY2xhbXBfbWF4KG4sIDB4ZmZmZiwgY2xhbXBlZCkpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2xlMzJfY2xhbXAodW5zaWduZWQgY2hhciAqZGVzdCwgdWludDY0X3QgbiwgaW50ICpjbGFtcGVkKQoreworCWNvcHlfbGUzMihkZXN0LCBjbGFtcF9tYXgobiwgMHhmZmZmZmZmZiwgY2xhbXBlZCkpOworfQorCitzdGF0aWMgaW50IHN0cmJ1Zl9hZGRfbGUoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBzaXplLCB1aW50bWF4X3QgbikKK3sKKwl3aGlsZSAoc2l6ZS0tID4gMCkgeworCQlzdHJidWZfYWRkY2goc2IsIG4gJiAweGZmKTsKKwkJbiA+Pj0gODsKKwl9CisJcmV0dXJuIC0hIW47Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjbGFtcDMyKHVpbnRtYXhfdCBuKQoreworCWNvbnN0IHVpbnRtYXhfdCBtYXggPSAweGZmZmZmZmZmOworCXJldHVybiAobiA8IG1heCkgPyBuIDogbWF4OworfQorCitzdGF0aWMgdm9pZCAqemxpYl9kZWZsYXRlX3Jhdyh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICBpbnQgY29tcHJlc3Npb25fbGV2ZWwsCisJCQkgICAgICB1bnNpZ25lZCBsb25nICpjb21wcmVzc2VkX3NpemUpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXVuc2lnbmVkIGxvbmcgbWF4c2l6ZTsKKwl2b2lkICpidWZmZXI7CisJaW50IHJlc3VsdDsKKworCWdpdF9kZWZsYXRlX2luaXRfcmF3KCZzdHJlYW0sIGNvbXByZXNzaW9uX2xldmVsKTsKKwltYXhzaXplID0gZ2l0X2RlZmxhdGVfYm91bmQoJnN0cmVhbSwgc2l6ZSk7CisJYnVmZmVyID0geG1hbGxvYyhtYXhzaXplKTsKKworCXN0cmVhbS5uZXh0X2luID0gZGF0YTsKKwlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCXN0cmVhbS5uZXh0X291dCA9IGJ1ZmZlcjsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gbWF4c2l6ZTsKKworCWRvIHsKKwkJcmVzdWx0ID0gZ2l0X2RlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCX0gd2hpbGUgKHJlc3VsdCA9PSBaX09LKTsKKworCWlmIChyZXN1bHQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCSpjb21wcmVzc2VkX3NpemUgPSBzdHJlYW0udG90YWxfb3V0OworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfemlwX2RhdGFfZGVzYyh1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJdW5zaWduZWQgbG9uZyBjb21wcmVzc2VkX3NpemUsCisJCQkJdW5zaWduZWQgbG9uZyBjcmMpCit7CisJaWYgKHNpemUgPj0gMHhmZmZmZmZmZiB8fCBjb21wcmVzc2VkX3NpemUgPj0gMHhmZmZmZmZmZikgeworCQlzdHJ1Y3QgemlwNjRfZGF0YV9kZXNjIHRyYWlsZXI7CisJCWNvcHlfbGUzMih0cmFpbGVyLm1hZ2ljLCAweDA4MDc0YjUwKTsKKwkJY29weV9sZTMyKHRyYWlsZXIuY3JjMzIsIGNyYyk7CisJCWNvcHlfbGU2NCh0cmFpbGVyLmNvbXByZXNzZWRfc2l6ZSwgY29tcHJlc3NlZF9zaXplKTsKKwkJY29weV9sZTY0KHRyYWlsZXIuc2l6ZSwgc2l6ZSk7CisJCXdyaXRlX29yX2RpZSgxLCAmdHJhaWxlciwgWklQNjRfREFUQV9ERVNDX1NJWkUpOworCQl6aXBfb2Zmc2V0ICs9IFpJUDY0X0RBVEFfREVTQ19TSVpFOworCX0gZWxzZSB7CisJCXN0cnVjdCB6aXBfZGF0YV9kZXNjIHRyYWlsZXI7CisJCWNvcHlfbGUzMih0cmFpbGVyLm1hZ2ljLCAweDA4MDc0YjUwKTsKKwkJY29weV9sZTMyKHRyYWlsZXIuY3JjMzIsIGNyYyk7CisJCWNvcHlfbGUzMih0cmFpbGVyLmNvbXByZXNzZWRfc2l6ZSwgY29tcHJlc3NlZF9zaXplKTsKKwkJY29weV9sZTMyKHRyYWlsZXIuc2l6ZSwgc2l6ZSk7CisJCXdyaXRlX29yX2RpZSgxLCAmdHJhaWxlciwgWklQX0RBVEFfREVTQ19TSVpFKTsKKwkJemlwX29mZnNldCArPSBaSVBfREFUQV9ERVNDX1NJWkU7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfemlwX2hlYWRlcl9kYXRhX2Rlc2Moc3RydWN0IHppcF9sb2NhbF9oZWFkZXIgKmhlYWRlciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY29tcHJlc3NlZF9zaXplLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBjcmMpCit7CisJY29weV9sZTMyKGhlYWRlci0+Y3JjMzIsIGNyYyk7CisJY29weV9sZTMyKGhlYWRlci0+Y29tcHJlc3NlZF9zaXplLCBjb21wcmVzc2VkX3NpemUpOworCWNvcHlfbGUzMihoZWFkZXItPnNpemUsIHNpemUpOworfQorCitzdGF0aWMgaW50IGhhc19vbmx5X2FzY2lpKGNvbnN0IGNoYXIgKnMpCit7CisJZm9yICg7OykgeworCQlpbnQgYyA9ICpzKys7CisJCWlmIChjID09ICdcMCcpCisJCQlyZXR1cm4gMTsKKwkJaWYgKCFpc2FzY2lpKGMpKQorCQkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IGVudHJ5X2lzX2JpbmFyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyID0gdXNlcmRpZmZfZmluZF9ieV9wYXRoKGlzdGF0ZSwgcGF0aCk7CisJaWYgKCFkcml2ZXIpCisJCWRyaXZlciA9IHVzZXJkaWZmX2ZpbmRfYnlfbmFtZSgiZGVmYXVsdCIpOworCWlmIChkcml2ZXItPmJpbmFyeSAhPSAtMSkKKwkJcmV0dXJuIGRyaXZlci0+YmluYXJ5OworCXJldHVybiBidWZmZXJfaXNfYmluYXJ5KGJ1ZmZlciwgc2l6ZSk7Cit9CisKKyNkZWZpbmUgU1RSRUFNX0JVRkZFUl9TSVpFICgxMDI0ICogMTYpCisKK3N0YXRpYyBpbnQgd3JpdGVfemlwX2VudHJ5KHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4sCisJCQkgICB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgemlwX2xvY2FsX2hlYWRlciBoZWFkZXI7CisJdWludG1heF90IG9mZnNldCA9IHppcF9vZmZzZXQ7CisJc3RydWN0IHppcF9leHRyYV9tdGltZSBleHRyYTsKKwlzdHJ1Y3QgemlwNjRfZXh0cmEgZXh0cmE2NDsKKwlzaXplX3QgaGVhZGVyX2V4dHJhX3NpemUgPSBaSVBfRVhUUkFfTVRJTUVfU0laRTsKKwlpbnQgbmVlZF96aXA2NF9leHRyYSA9IDA7CisJdW5zaWduZWQgbG9uZyBhdHRyMjsKKwl1bnNpZ25lZCBsb25nIGNvbXByZXNzZWRfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGNyYzsKKwllbnVtIHppcF9tZXRob2QgbWV0aG9kOworCXVuc2lnbmVkIGNoYXIgKm91dDsKKwl2b2lkICpkZWZsYXRlZCA9IE5VTEw7CisJdm9pZCAqYnVmZmVyOworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3RyZWFtID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGlzX2JpbmFyeSA9IC0xOworCWNvbnN0IGNoYXIgKnBhdGhfd2l0aG91dF9wcmVmaXggPSBwYXRoICsgYXJncy0+YmFzZWxlbjsKKwl1bnNpZ25lZCBpbnQgY3JlYXRvcl92ZXJzaW9uID0gMDsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbl9uZWVkZWQgPSAxMDsKKwlzaXplX3QgemlwX2Rpcl9leHRyYV9zaXplID0gWklQX0VYVFJBX01USU1FX1NJWkU7CisJc2l6ZV90IHppcDY0X2Rpcl9leHRyYV9wYXlsb2FkX3NpemUgPSAwOworCisJY3JjID0gY3JjMzIoMCwgTlVMTCwgMCk7CisKKwlpZiAoIWhhc19vbmx5X2FzY2lpKHBhdGgpKSB7CisJCWlmIChpc191dGY4KHBhdGgpKQorCQkJZmxhZ3MgfD0gWklQX1VURjg7CisJCWVsc2UKKwkJCXdhcm5pbmcoXygicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIiksIHBhdGgpOworCX0KKworCWlmIChwYXRobGVuID4gMHhmZmZmKSB7CisJCXJldHVybiBlcnJvcihfKCJwYXRoIHRvbyBsb25nICglZCBjaGFycywgU0hBMTogJXMpOiAlcyIpLAorCQkJCShpbnQpcGF0aGxlbiwgb2lkX3RvX2hleChvaWQpLCBwYXRoKTsKKwl9CisKKwlpZiAoU19JU0RJUihtb2RlKSB8fCBTX0lTR0lUTElOSyhtb2RlKSkgeworCQltZXRob2QgPSBaSVBfTUVUSE9EX1NUT1JFOworCQlhdHRyMiA9IDE2OworCQlvdXQgPSBOVUxMOworCQlzaXplID0gMDsKKwkJY29tcHJlc3NlZF9zaXplID0gMDsKKwkJYnVmZmVyID0gTlVMTDsKKwl9IGVsc2UgaWYgKFNfSVNSRUcobW9kZSkgfHwgU19JU0xOSyhtb2RlKSkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvaWRfb2JqZWN0X2luZm8oYXJncy0+cmVwbywgb2lkLAorCQkJCQkJCSZzaXplKTsKKworCQltZXRob2QgPSBaSVBfTUVUSE9EX1NUT1JFOworCQlhdHRyMiA9IFNfSVNMTksobW9kZSkgPyAoKG1vZGUgfCAwNzc3KSA8PCAxNikgOgorCQkJKG1vZGUgJiAwMTExKSA/ICgobW9kZSkgPDwgMTYpIDogMDsKKwkJaWYgKFNfSVNMTksobW9kZSkgfHwgKG1vZGUgJiAwMTExKSkKKwkJCWNyZWF0b3JfdmVyc2lvbiA9IDB4MDMxNzsKKwkJaWYgKFNfSVNSRUcobW9kZSkgJiYgYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwgIT0gMCAmJiBzaXplID4gMCkKKwkJCW1ldGhvZCA9IFpJUF9NRVRIT0RfREVGTEFURTsKKworCQlpZiAoU19JU1JFRyhtb2RlKSAmJiB0eXBlID09IE9CSl9CTE9CICYmICFhcmdzLT5jb252ZXJ0ICYmCisJCSAgICBzaXplID4gYmlnX2ZpbGVfdGhyZXNob2xkKSB7CisJCQlzdHJlYW0gPSBvcGVuX2lzdHJlYW0oYXJncy0+cmVwbywgb2lkLCAmdHlwZSwgJnNpemUsCisJCQkJCSAgICAgIE5VTEwpOworCQkJaWYgKCFzdHJlYW0pCisJCQkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIpLAorCQkJCQkgICAgIG9pZF90b19oZXgob2lkKSk7CisJCQlmbGFncyB8PSBaSVBfU1RSRUFNOworCQkJb3V0ID0gYnVmZmVyID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWJ1ZmZlciA9IG9iamVjdF9maWxlX3RvX2FyY2hpdmUoYXJncywgcGF0aCwgb2lkLCBtb2RlLAorCQkJCQkJCSZ0eXBlLCAmc2l6ZSk7CisJCQlpZiAoIWJ1ZmZlcikKKwkJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlYWQgJXMiKSwKKwkJCQkJICAgICBvaWRfdG9faGV4KG9pZCkpOworCQkJY3JjID0gY3JjMzIoY3JjLCBidWZmZXIsIHNpemUpOworCQkJaXNfYmluYXJ5ID0gZW50cnlfaXNfYmluYXJ5KGFyZ3MtPnJlcG8tPmluZGV4LAorCQkJCQkJICAgIHBhdGhfd2l0aG91dF9wcmVmaXgsCisJCQkJCQkgICAgYnVmZmVyLCBzaXplKTsKKwkJCW91dCA9IGJ1ZmZlcjsKKwkJfQorCQljb21wcmVzc2VkX3NpemUgPSAobWV0aG9kID09IFpJUF9NRVRIT0RfU1RPUkUpID8gc2l6ZSA6IDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGVycm9yKF8oInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiKSwgbW9kZSwKKwkJCQlvaWRfdG9faGV4KG9pZCkpOworCX0KKworCWlmIChjcmVhdG9yX3ZlcnNpb24gPiBtYXhfY3JlYXRvcl92ZXJzaW9uKQorCQltYXhfY3JlYXRvcl92ZXJzaW9uID0gY3JlYXRvcl92ZXJzaW9uOworCisJaWYgKGJ1ZmZlciAmJiBtZXRob2QgPT0gWklQX01FVEhPRF9ERUZMQVRFKSB7CisJCW91dCA9IGRlZmxhdGVkID0gemxpYl9kZWZsYXRlX3JhdyhidWZmZXIsIHNpemUsCisJCQkJCQkgIGFyZ3MtPmNvbXByZXNzaW9uX2xldmVsLAorCQkJCQkJICAmY29tcHJlc3NlZF9zaXplKTsKKwkJaWYgKCFvdXQgfHwgY29tcHJlc3NlZF9zaXplID49IHNpemUpIHsKKwkJCW91dCA9IGJ1ZmZlcjsKKwkJCW1ldGhvZCA9IFpJUF9NRVRIT0RfU1RPUkU7CisJCQljb21wcmVzc2VkX3NpemUgPSBzaXplOworCQl9CisJfQorCisJY29weV9sZTE2KGV4dHJhLm1hZ2ljLCAweDU0NTUpOworCWNvcHlfbGUxNihleHRyYS5leHRyYV9zaXplLCBaSVBfRVhUUkFfTVRJTUVfUEFZTE9BRF9TSVpFKTsKKwlleHRyYS5mbGFnc1swXSA9IDE7CS8qIGp1c3QgbXRpbWUgKi8KKwljb3B5X2xlMzIoZXh0cmEubXRpbWUsIGFyZ3MtPnRpbWUpOworCisJaWYgKHNpemUgPiAweGZmZmZmZmZmIHx8IGNvbXByZXNzZWRfc2l6ZSA+IDB4ZmZmZmZmZmYpCisJCW5lZWRfemlwNjRfZXh0cmEgPSAxOworCWlmIChzdHJlYW0gJiYgc2l6ZSA+IDB4N2ZmZmZmZmYpCisJCW5lZWRfemlwNjRfZXh0cmEgPSAxOworCisJaWYgKG5lZWRfemlwNjRfZXh0cmEpCisJCXZlcnNpb25fbmVlZGVkID0gNDU7CisKKwljb3B5X2xlMzIoaGVhZGVyLm1hZ2ljLCAweDA0MDM0YjUwKTsKKwljb3B5X2xlMTYoaGVhZGVyLnZlcnNpb24sIHZlcnNpb25fbmVlZGVkKTsKKwljb3B5X2xlMTYoaGVhZGVyLmZsYWdzLCBmbGFncyk7CisJY29weV9sZTE2KGhlYWRlci5jb21wcmVzc2lvbl9tZXRob2QsIG1ldGhvZCk7CisJY29weV9sZTE2KGhlYWRlci5tdGltZSwgemlwX3RpbWUpOworCWNvcHlfbGUxNihoZWFkZXIubWRhdGUsIHppcF9kYXRlKTsKKwlpZiAobmVlZF96aXA2NF9leHRyYSkgeworCQlzZXRfemlwX2hlYWRlcl9kYXRhX2Rlc2MoJmhlYWRlciwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgY3JjKTsKKwkJaGVhZGVyX2V4dHJhX3NpemUgKz0gWklQNjRfRVhUUkFfU0laRTsKKwl9IGVsc2UgeworCQlzZXRfemlwX2hlYWRlcl9kYXRhX2Rlc2MoJmhlYWRlciwgc2l6ZSwgY29tcHJlc3NlZF9zaXplLCBjcmMpOworCX0KKwljb3B5X2xlMTYoaGVhZGVyLmZpbGVuYW1lX2xlbmd0aCwgcGF0aGxlbik7CisJY29weV9sZTE2KGhlYWRlci5leHRyYV9sZW5ndGgsIGhlYWRlcl9leHRyYV9zaXplKTsKKwl3cml0ZV9vcl9kaWUoMSwgJmhlYWRlciwgWklQX0xPQ0FMX0hFQURFUl9TSVpFKTsKKwl6aXBfb2Zmc2V0ICs9IFpJUF9MT0NBTF9IRUFERVJfU0laRTsKKwl3cml0ZV9vcl9kaWUoMSwgcGF0aCwgcGF0aGxlbik7CisJemlwX29mZnNldCArPSBwYXRobGVuOworCXdyaXRlX29yX2RpZSgxLCAmZXh0cmEsIFpJUF9FWFRSQV9NVElNRV9TSVpFKTsKKwl6aXBfb2Zmc2V0ICs9IFpJUF9FWFRSQV9NVElNRV9TSVpFOworCWlmIChuZWVkX3ppcDY0X2V4dHJhKSB7CisJCWNvcHlfbGUxNihleHRyYTY0Lm1hZ2ljLCAweDAwMDEpOworCQljb3B5X2xlMTYoZXh0cmE2NC5leHRyYV9zaXplLCBaSVA2NF9FWFRSQV9QQVlMT0FEX1NJWkUpOworCQljb3B5X2xlNjQoZXh0cmE2NC5zaXplLCBzaXplKTsKKwkJY29weV9sZTY0KGV4dHJhNjQuY29tcHJlc3NlZF9zaXplLCBjb21wcmVzc2VkX3NpemUpOworCQl3cml0ZV9vcl9kaWUoMSwgJmV4dHJhNjQsIFpJUDY0X0VYVFJBX1NJWkUpOworCQl6aXBfb2Zmc2V0ICs9IFpJUDY0X0VYVFJBX1NJWkU7CisJfQorCisJaWYgKHN0cmVhbSAmJiBtZXRob2QgPT0gWklQX01FVEhPRF9TVE9SRSkgeworCQl1bnNpZ25lZCBjaGFyIGJ1ZltTVFJFQU1fQlVGRkVSX1NJWkVdOworCQlzc2l6ZV90IHJlYWRsZW47CisKKwkJZm9yICg7OykgeworCQkJcmVhZGxlbiA9IHJlYWRfaXN0cmVhbShzdHJlYW0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQkJaWYgKHJlYWRsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCWNyYyA9IGNyYzMyKGNyYywgYnVmLCByZWFkbGVuKTsKKwkJCWlmIChpc19iaW5hcnkgPT0gLTEpCisJCQkJaXNfYmluYXJ5ID0gZW50cnlfaXNfYmluYXJ5KGFyZ3MtPnJlcG8tPmluZGV4LAorCQkJCQkJCSAgICBwYXRoX3dpdGhvdXRfcHJlZml4LAorCQkJCQkJCSAgICBidWYsIHJlYWRsZW4pOworCQkJd3JpdGVfb3JfZGllKDEsIGJ1ZiwgcmVhZGxlbik7CisJCX0KKwkJY2xvc2VfaXN0cmVhbShzdHJlYW0pOworCQlpZiAocmVhZGxlbikKKwkJCXJldHVybiByZWFkbGVuOworCisJCWNvbXByZXNzZWRfc2l6ZSA9IHNpemU7CisJCXppcF9vZmZzZXQgKz0gY29tcHJlc3NlZF9zaXplOworCisJCXdyaXRlX3ppcF9kYXRhX2Rlc2Moc2l6ZSwgY29tcHJlc3NlZF9zaXplLCBjcmMpOworCX0gZWxzZSBpZiAoc3RyZWFtICYmIG1ldGhvZCA9PSBaSVBfTUVUSE9EX0RFRkxBVEUpIHsKKwkJdW5zaWduZWQgY2hhciBidWZbU1RSRUFNX0JVRkZFUl9TSVpFXTsKKwkJc3NpemVfdCByZWFkbGVuOworCQlnaXRfenN0cmVhbSB6c3RyZWFtOworCQlpbnQgcmVzdWx0OworCQlzaXplX3Qgb3V0X2xlbjsKKwkJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkW1NUUkVBTV9CVUZGRVJfU0laRSAqIDJdOworCisJCWdpdF9kZWZsYXRlX2luaXRfcmF3KCZ6c3RyZWFtLCBhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCk7CisKKwkJY29tcHJlc3NlZF9zaXplID0gMDsKKwkJenN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWQ7CisJCXpzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGNvbXByZXNzZWQpOworCisJCWZvciAoOzspIHsKKwkJCXJlYWRsZW4gPSByZWFkX2lzdHJlYW0oc3RyZWFtLCBidWYsIHNpemVvZihidWYpKTsKKwkJCWlmIChyZWFkbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQljcmMgPSBjcmMzMihjcmMsIGJ1ZiwgcmVhZGxlbik7CisJCQlpZiAoaXNfYmluYXJ5ID09IC0xKQorCQkJCWlzX2JpbmFyeSA9IGVudHJ5X2lzX2JpbmFyeShhcmdzLT5yZXBvLT5pbmRleCwKKwkJCQkJCQkgICAgcGF0aF93aXRob3V0X3ByZWZpeCwKKwkJCQkJCQkgICAgYnVmLCByZWFkbGVuKTsKKworCQkJenN0cmVhbS5uZXh0X2luID0gYnVmOworCQkJenN0cmVhbS5hdmFpbF9pbiA9IHJlYWRsZW47CisJCQlyZXN1bHQgPSBnaXRfZGVmbGF0ZSgmenN0cmVhbSwgMCk7CisJCQlpZiAocmVzdWx0ICE9IFpfT0spCisJCQkJZGllKF8oImRlZmxhdGUgZXJyb3IgKCVkKSIpLCByZXN1bHQpOworCQkJb3V0X2xlbiA9IHpzdHJlYW0ubmV4dF9vdXQgLSBjb21wcmVzc2VkOworCisJCQlpZiAob3V0X2xlbiA+IDApIHsKKwkJCQl3cml0ZV9vcl9kaWUoMSwgY29tcHJlc3NlZCwgb3V0X2xlbik7CisJCQkJY29tcHJlc3NlZF9zaXplICs9IG91dF9sZW47CisJCQkJenN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWQ7CisJCQkJenN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoY29tcHJlc3NlZCk7CisJCQl9CisKKwkJfQorCQljbG9zZV9pc3RyZWFtKHN0cmVhbSk7CisJCWlmIChyZWFkbGVuKQorCQkJcmV0dXJuIHJlYWRsZW47CisKKwkJenN0cmVhbS5uZXh0X2luID0gYnVmOworCQl6c3RyZWFtLmF2YWlsX2luID0gMDsKKwkJcmVzdWx0ID0gZ2l0X2RlZmxhdGUoJnpzdHJlYW0sIFpfRklOSVNIKTsKKwkJaWYgKHJlc3VsdCAhPSBaX1NUUkVBTV9FTkQpCisJCQlkaWUoImRlZmxhdGUgZXJyb3IgKCVkKSIsIHJlc3VsdCk7CisKKwkJZ2l0X2RlZmxhdGVfZW5kKCZ6c3RyZWFtKTsKKwkJb3V0X2xlbiA9IHpzdHJlYW0ubmV4dF9vdXQgLSBjb21wcmVzc2VkOworCQl3cml0ZV9vcl9kaWUoMSwgY29tcHJlc3NlZCwgb3V0X2xlbik7CisJCWNvbXByZXNzZWRfc2l6ZSArPSBvdXRfbGVuOworCQl6aXBfb2Zmc2V0ICs9IGNvbXByZXNzZWRfc2l6ZTsKKworCQl3cml0ZV96aXBfZGF0YV9kZXNjKHNpemUsIGNvbXByZXNzZWRfc2l6ZSwgY3JjKTsKKwl9IGVsc2UgaWYgKGNvbXByZXNzZWRfc2l6ZSA+IDApIHsKKwkJd3JpdGVfb3JfZGllKDEsIG91dCwgY29tcHJlc3NlZF9zaXplKTsKKwkJemlwX29mZnNldCArPSBjb21wcmVzc2VkX3NpemU7CisJfQorCisJZnJlZShkZWZsYXRlZCk7CisJZnJlZShidWZmZXIpOworCisJaWYgKGNvbXByZXNzZWRfc2l6ZSA+IDB4ZmZmZmZmZmYgfHwgc2l6ZSA+IDB4ZmZmZmZmZmYgfHwKKwkgICAgb2Zmc2V0ID4gMHhmZmZmZmZmZikgeworCQlpZiAoY29tcHJlc3NlZF9zaXplID49IDB4ZmZmZmZmZmYpCisJCQl6aXA2NF9kaXJfZXh0cmFfcGF5bG9hZF9zaXplICs9IDg7CisJCWlmIChzaXplID49IDB4ZmZmZmZmZmYpCisJCQl6aXA2NF9kaXJfZXh0cmFfcGF5bG9hZF9zaXplICs9IDg7CisJCWlmIChvZmZzZXQgPj0gMHhmZmZmZmZmZikKKwkJCXppcDY0X2Rpcl9leHRyYV9wYXlsb2FkX3NpemUgKz0gODsKKwkJemlwX2Rpcl9leHRyYV9zaXplICs9IDIgKyAyICsgemlwNjRfZGlyX2V4dHJhX3BheWxvYWRfc2l6ZTsKKwl9CisKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCA0LCAweDAyMDE0YjUwKTsJLyogbWFnaWMgKi8KKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCBjcmVhdG9yX3ZlcnNpb24pOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIHZlcnNpb25fbmVlZGVkKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCBmbGFncyk7CisJc3RyYnVmX2FkZF9sZSgmemlwX2RpciwgMiwgbWV0aG9kKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCB6aXBfdGltZSk7CisJc3RyYnVmX2FkZF9sZSgmemlwX2RpciwgMiwgemlwX2RhdGUpOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDQsIGNyYyk7CisJc3RyYnVmX2FkZF9sZSgmemlwX2RpciwgNCwgY2xhbXAzMihjb21wcmVzc2VkX3NpemUpKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCA0LCBjbGFtcDMyKHNpemUpKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCBwYXRobGVuKTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCB6aXBfZGlyX2V4dHJhX3NpemUpOworCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDIsIDApOwkJLyogY29tbWVudCBsZW5ndGggKi8KKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCAwKTsJCS8qIGRpc2sgKi8KKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCAhaXNfYmluYXJ5KTsKKwlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCA0LCBhdHRyMik7CisJc3RyYnVmX2FkZF9sZSgmemlwX2RpciwgNCwgY2xhbXAzMihvZmZzZXQpKTsKKwlzdHJidWZfYWRkKCZ6aXBfZGlyLCBwYXRoLCBwYXRobGVuKTsKKwlzdHJidWZfYWRkKCZ6aXBfZGlyLCAmZXh0cmEsIFpJUF9FWFRSQV9NVElNRV9TSVpFKTsKKwlpZiAoemlwNjRfZGlyX2V4dHJhX3BheWxvYWRfc2l6ZSkgeworCQlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCAweDAwMDEpOwkvKiBtYWdpYyAqLworCQlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCAyLCB6aXA2NF9kaXJfZXh0cmFfcGF5bG9hZF9zaXplKTsKKwkJaWYgKHNpemUgPj0gMHhmZmZmZmZmZikKKwkJCXN0cmJ1Zl9hZGRfbGUoJnppcF9kaXIsIDgsIHNpemUpOworCQlpZiAoY29tcHJlc3NlZF9zaXplID49IDB4ZmZmZmZmZmYpCisJCQlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCA4LCBjb21wcmVzc2VkX3NpemUpOworCQlpZiAob2Zmc2V0ID49IDB4ZmZmZmZmZmYpCisJCQlzdHJidWZfYWRkX2xlKCZ6aXBfZGlyLCA4LCBvZmZzZXQpOworCX0KKwl6aXBfZGlyX2VudHJpZXMrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV96aXA2NF90cmFpbGVyKHZvaWQpCit7CisJc3RydWN0IHppcDY0X2Rpcl90cmFpbGVyIHRyYWlsZXI2NDsKKwlzdHJ1Y3QgemlwNjRfZGlyX3RyYWlsZXJfbG9jYXRvciBsb2NhdG9yNjQ7CisKKwljb3B5X2xlMzIodHJhaWxlcjY0Lm1hZ2ljLCAweDA2MDY0YjUwKTsKKwljb3B5X2xlNjQodHJhaWxlcjY0LnJlY29yZF9zaXplLCBaSVA2NF9ESVJfVFJBSUxFUl9SRUNPUkRfU0laRSk7CisJY29weV9sZTE2KHRyYWlsZXI2NC5jcmVhdG9yX3ZlcnNpb24sIG1heF9jcmVhdG9yX3ZlcnNpb24pOworCWNvcHlfbGUxNih0cmFpbGVyNjQudmVyc2lvbiwgNDUpOworCWNvcHlfbGUzMih0cmFpbGVyNjQuZGlzaywgMCk7CisJY29weV9sZTMyKHRyYWlsZXI2NC5kaXJlY3Rvcnlfc3RhcnRfZGlzaywgMCk7CisJY29weV9sZTY0KHRyYWlsZXI2NC5lbnRyaWVzX29uX3RoaXNfZGlzaywgemlwX2Rpcl9lbnRyaWVzKTsKKwljb3B5X2xlNjQodHJhaWxlcjY0LmVudHJpZXMsIHppcF9kaXJfZW50cmllcyk7CisJY29weV9sZTY0KHRyYWlsZXI2NC5zaXplLCB6aXBfZGlyLmxlbik7CisJY29weV9sZTY0KHRyYWlsZXI2NC5vZmZzZXQsIHppcF9vZmZzZXQpOworCisJY29weV9sZTMyKGxvY2F0b3I2NC5tYWdpYywgMHgwNzA2NGI1MCk7CisJY29weV9sZTMyKGxvY2F0b3I2NC5kaXNrLCAwKTsKKwljb3B5X2xlNjQobG9jYXRvcjY0Lm9mZnNldCwgemlwX29mZnNldCArIHppcF9kaXIubGVuKTsKKwljb3B5X2xlMzIobG9jYXRvcjY0Lm51bWJlcl9vZl9kaXNrcywgMSk7CisKKwl3cml0ZV9vcl9kaWUoMSwgJnRyYWlsZXI2NCwgWklQNjRfRElSX1RSQUlMRVJfU0laRSk7CisJd3JpdGVfb3JfZGllKDEsICZsb2NhdG9yNjQsIFpJUDY0X0RJUl9UUkFJTEVSX0xPQ0FUT1JfU0laRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3ppcF90cmFpbGVyKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgemlwX2Rpcl90cmFpbGVyIHRyYWlsZXI7CisJaW50IGNsYW1wZWQgPSAwOworCisJY29weV9sZTMyKHRyYWlsZXIubWFnaWMsIDB4MDYwNTRiNTApOworCWNvcHlfbGUxNih0cmFpbGVyLmRpc2ssIDApOworCWNvcHlfbGUxNih0cmFpbGVyLmRpcmVjdG9yeV9zdGFydF9kaXNrLCAwKTsKKwljb3B5X2xlMTZfY2xhbXAodHJhaWxlci5lbnRyaWVzX29uX3RoaXNfZGlzaywgemlwX2Rpcl9lbnRyaWVzLAorCQkJJmNsYW1wZWQpOworCWNvcHlfbGUxNl9jbGFtcCh0cmFpbGVyLmVudHJpZXMsIHppcF9kaXJfZW50cmllcywgJmNsYW1wZWQpOworCWNvcHlfbGUzMih0cmFpbGVyLnNpemUsIHppcF9kaXIubGVuKTsKKwljb3B5X2xlMzJfY2xhbXAodHJhaWxlci5vZmZzZXQsIHppcF9vZmZzZXQsICZjbGFtcGVkKTsKKwljb3B5X2xlMTYodHJhaWxlci5jb21tZW50X2xlbmd0aCwgb2lkID8gdGhlX2hhc2hfYWxnby0+aGV4c3ogOiAwKTsKKworCXdyaXRlX29yX2RpZSgxLCB6aXBfZGlyLmJ1ZiwgemlwX2Rpci5sZW4pOworCWlmIChjbGFtcGVkKQorCQl3cml0ZV96aXA2NF90cmFpbGVyKCk7CisJd3JpdGVfb3JfZGllKDEsICZ0cmFpbGVyLCBaSVBfRElSX1RSQUlMRVJfU0laRSk7CisJaWYgKG9pZCkKKwkJd3JpdGVfb3JfZGllKDEsIG9pZF90b19oZXgob2lkKSwgdGhlX2hhc2hfYWxnby0+aGV4c3opOworfQorCitzdGF0aWMgdm9pZCBkb3NfdGltZSh0aW1lc3RhbXBfdCAqdGltZXN0YW1wLCBpbnQgKmRvc19kYXRlLCBpbnQgKmRvc190aW1lKQoreworCXRpbWVfdCB0aW1lOworCXN0cnVjdCB0bSB0bTsKKworCWlmIChkYXRlX292ZXJmbG93cygqdGltZXN0YW1wKSkKKwkJZGllKF8oInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlIlBSSXRpbWUpLAorCQkgICAgKnRpbWVzdGFtcCk7CisJdGltZSA9ICh0aW1lX3QpKnRpbWVzdGFtcDsKKwlsb2NhbHRpbWVfcigmdGltZSwgJnRtKTsKKwkqdGltZXN0YW1wID0gdGltZTsKKworCSpkb3NfZGF0ZSA9IHRtLnRtX21kYXkgKyAodG0udG1fbW9uICsgMSkgKiAzMiArCisJCSAgICAodG0udG1feWVhciArIDE5MDAgLSAxOTgwKSAqIDUxMjsKKwkqZG9zX3RpbWUgPSB0bS50bV9zZWMgLyAyICsgdG0udG1fbWluICogMzIgKyB0bS50bV9ob3VyICogMjA0ODsKK30KKworc3RhdGljIGludCBhcmNoaXZlX3ppcF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3ppcF9hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqYXIsCisJCQkgICAgIHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzKQoreworCWludCBlcnI7CisKKwlnaXRfY29uZmlnKGFyY2hpdmVfemlwX2NvbmZpZywgTlVMTCk7CisKKwlkb3NfdGltZSgmYXJncy0+dGltZSwgJnppcF9kYXRlLCAmemlwX3RpbWUpOworCisJc3RyYnVmX2luaXQoJnppcF9kaXIsIDApOworCisJZXJyID0gd3JpdGVfYXJjaGl2ZV9lbnRyaWVzKGFyZ3MsIHdyaXRlX3ppcF9lbnRyeSk7CisJaWYgKCFlcnIpCisJCXdyaXRlX3ppcF90cmFpbGVyKGFyZ3MtPmNvbW1pdF9vaWQpOworCisJc3RyYnVmX3JlbGVhc2UoJnppcF9kaXIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBhcmNoaXZlciB6aXBfYXJjaGl2ZXIgPSB7CisJInppcCIsCisJd3JpdGVfemlwX2FyY2hpdmUsCisJQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFN8QVJDSElWRVJfUkVNT1RFCit9OworCit2b2lkIGluaXRfemlwX2FyY2hpdmVyKHZvaWQpCit7CisJcmVnaXN0ZXJfYXJjaGl2ZXIoJnppcF9hcmNoaXZlcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoaXZlLmMgYi9hcmNoaXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkYTBmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2hpdmUuYwpAQCAtMCwwICsxLDU4MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJhcmNoaXZlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImRpci5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGFyY2hpdmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIpLAorCU5fKCJnaXQgYXJjaGl2ZSAtLWxpc3QiKSwKKwlOXygiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iKSwKKwlOXygiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKiphcmNoaXZlcnM7CitzdGF0aWMgaW50IG5yX2FyY2hpdmVyczsKK3N0YXRpYyBpbnQgYWxsb2NfYXJjaGl2ZXJzOworc3RhdGljIGludCByZW1vdGVfYWxsb3dfdW5yZWFjaGFibGU7CisKK3ZvaWQgcmVnaXN0ZXJfYXJjaGl2ZXIoc3RydWN0IGFyY2hpdmVyICphcikKK3sKKwlBTExPQ19HUk9XKGFyY2hpdmVycywgbnJfYXJjaGl2ZXJzICsgMSwgYWxsb2NfYXJjaGl2ZXJzKTsKKwlhcmNoaXZlcnNbbnJfYXJjaGl2ZXJzKytdID0gYXI7Cit9CisKK3ZvaWQgaW5pdF9hcmNoaXZlcnModm9pZCkKK3sKKwlpbml0X3Rhcl9hcmNoaXZlcigpOworCWluaXRfemlwX2FyY2hpdmVyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZvcm1hdF9zdWJzdChjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkJIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIGZtdCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJY3R4LmRhdGVfbW9kZS50eXBlID0gREFURV9OT1JNQUw7CisJY3R4LmFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCisJaWYgKHNyYyA9PSBidWYtPmJ1ZikKKwkJdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goYnVmLCBOVUxMKTsKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKmIsICpjOworCisJCWIgPSBtZW1tZW0oc3JjLCBsZW4sICIkRm9ybWF0OiIsIDgpOworCQlpZiAoIWIpCisJCQlicmVhazsKKwkJYyA9IG1lbWNocihiICsgOCwgJyQnLCAoc3JjICsgbGVuKSAtIGIgLSA4KTsKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisKKwkJc3RyYnVmX3Jlc2V0KCZmbXQpOworCQlzdHJidWZfYWRkKCZmbXQsIGIgKyA4LCBjIC0gYiAtIDgpOworCisJCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIGIgLSBzcmMpOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCBmbXQuYnVmLCBidWYsICZjdHgpOworCQlsZW4gLT0gYyArIDEgLSBzcmM7CisJCXNyYyAgPSBjICsgMTsKKwl9CisJc3RyYnVmX2FkZChidWYsIHNyYywgbGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmZm10KTsKKwlmcmVlKHRvX2ZyZWUpOworfQorCit2b2lkICpvYmplY3RfZmlsZV90b19hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJICAgICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCBtb2RlLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJICAgICB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwl2b2lkICpidWZmZXI7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gYXJncy0+Y29udmVydCA/IGFyZ3MtPmNvbW1pdCA6IE5VTEw7CisKKwlwYXRoICs9IGFyZ3MtPmJhc2VsZW47CisJYnVmZmVyID0gcmVhZF9vYmplY3RfZmlsZShvaWQsIHR5cGUsIHNpemVwKTsKKwlpZiAoYnVmZmVyICYmIFNfSVNSRUcobW9kZSkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJc2l6ZV90IHNpemUgPSAwOworCisJCXN0cmJ1Zl9hdHRhY2goJmJ1ZiwgYnVmZmVyLCAqc2l6ZXAsICpzaXplcCArIDEpOworCQljb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShhcmdzLT5yZXBvLT5pbmRleCwgcGF0aCwgYnVmLmJ1ZiwgYnVmLmxlbiwgJmJ1Zik7CisJCWlmIChjb21taXQpCisJCQlmb3JtYXRfc3Vic3QoY29tbWl0LCBidWYuYnVmLCBidWYubGVuLCAmYnVmKTsKKwkJYnVmZmVyID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJCSpzaXplcCA9IHNpemU7CisJfQorCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RydWN0IGRpcmVjdG9yeSB7CisJc3RydWN0IGRpcmVjdG9yeSAqdXA7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGJhc2VsZW4sIGxlbjsKKwl1bnNpZ25lZCBtb2RlOworCWludCBzdGFnZTsKKwljaGFyIHBhdGhbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgYXJjaGl2ZXJfY29udGV4dCB7CisJc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3M7CisJd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90IHdyaXRlX2VudHJ5OworCXN0cnVjdCBkaXJlY3RvcnkgKmJvdHRvbTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cl9jaGVjayAqZ2V0X2FyY2hpdmVfYXR0cnMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKwlpZiAoIWNoZWNrKQorCQljaGVjayA9IGF0dHJfY2hlY2tfaW5pdGwoImV4cG9ydC1pZ25vcmUiLCAiZXhwb3J0LXN1YnN0IiwgTlVMTCk7CisJZ2l0X2NoZWNrX2F0dHIoaXN0YXRlLCBwYXRoLCBjaGVjayk7CisJcmV0dXJuIGNoZWNrOworfQorCitzdGF0aWMgaW50IGNoZWNrX2F0dHJfZXhwb3J0X2lnbm9yZShjb25zdCBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spCit7CisJcmV0dXJuIGNoZWNrICYmIEFUVFJfVFJVRShjaGVjay0+aXRlbXNbMF0udmFsdWUpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2F0dHJfZXhwb3J0X3N1YnN0KGNvbnN0IHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjaykKK3sKKwlyZXR1cm4gY2hlY2sgJiYgQVRUUl9UUlVFKGNoZWNrLT5pdGVtc1sxXS52YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfYXJjaGl2ZV9lbnRyeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmJhc2UsCisJCWludCBiYXNlbGVuLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLAorCQl2b2lkICpjb250ZXh0KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYXJjaGl2ZXJfY29udGV4dCAqYyA9IGNvbnRleHQ7CisJc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MgPSBjLT5hcmdzOworCXdyaXRlX2FyY2hpdmVfZW50cnlfZm5fdCB3cml0ZV9lbnRyeSA9IGMtPndyaXRlX2VudHJ5OworCWludCBlcnI7CisJY29uc3QgY2hhciAqcGF0aF93aXRob3V0X3ByZWZpeDsKKworCWFyZ3MtPmNvbnZlcnQgPSAwOworCXN0cmJ1Zl9yZXNldCgmcGF0aCk7CisJc3RyYnVmX2dyb3coJnBhdGgsIFBBVEhfTUFYKTsKKwlzdHJidWZfYWRkKCZwYXRoLCBhcmdzLT5iYXNlLCBhcmdzLT5iYXNlbGVuKTsKKwlzdHJidWZfYWRkKCZwYXRoLCBiYXNlLCBiYXNlbGVuKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBmaWxlbmFtZSk7CisJaWYgKFNfSVNESVIobW9kZSkgfHwgU19JU0dJVExJTksobW9kZSkpCisJCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwlwYXRoX3dpdGhvdXRfcHJlZml4ID0gcGF0aC5idWYgKyBhcmdzLT5iYXNlbGVuOworCisJaWYgKCFTX0lTRElSKG1vZGUpKSB7CisJCWNvbnN0IHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKwkJY2hlY2sgPSBnZXRfYXJjaGl2ZV9hdHRycyhhcmdzLT5yZXBvLT5pbmRleCwgcGF0aF93aXRob3V0X3ByZWZpeCk7CisJCWlmIChjaGVja19hdHRyX2V4cG9ydF9pZ25vcmUoY2hlY2spKQorCQkJcmV0dXJuIDA7CisJCWFyZ3MtPmNvbnZlcnQgPSBjaGVja19hdHRyX2V4cG9ydF9zdWJzdChjaGVjayk7CisJfQorCisJaWYgKFNfSVNESVIobW9kZSkgfHwgU19JU0dJVExJTksobW9kZSkpIHsKKwkJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnNcbiIsIChpbnQpcGF0aC5sZW4sIHBhdGguYnVmKTsKKwkJZXJyID0gd3JpdGVfZW50cnkoYXJncywgb2lkLCBwYXRoLmJ1ZiwgcGF0aC5sZW4sIG1vZGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIChTX0lTRElSKG1vZGUpID8gUkVBRF9UUkVFX1JFQ1VSU0lWRSA6IDApOworCX0KKworCWlmIChhcmdzLT52ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnNcbiIsIChpbnQpcGF0aC5sZW4sIHBhdGguYnVmKTsKKwlyZXR1cm4gd3JpdGVfZW50cnkoYXJncywgb2lkLCBwYXRoLmJ1ZiwgcGF0aC5sZW4sIG1vZGUpOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9kaXJlY3RvcnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJc3RydWN0IHN0cmJ1ZiAqYmFzZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCXVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgKmMpCit7CisJc3RydWN0IGRpcmVjdG9yeSAqZDsKKwlzaXplX3QgbGVuID0gc3RfYWRkNChiYXNlLT5sZW4sIDEsIHN0cmxlbihmaWxlbmFtZSksIDEpOworCWQgPSB4bWFsbG9jKHN0X2FkZChzaXplb2YoKmQpLCBsZW4pKTsKKwlkLT51cAkgICA9IGMtPmJvdHRvbTsKKwlkLT5iYXNlbGVuID0gYmFzZS0+bGVuOworCWQtPm1vZGUJICAgPSBtb2RlOworCWQtPnN0YWdlICAgPSBzdGFnZTsKKwljLT5ib3R0b20gID0gZDsKKwlkLT5sZW4gPSB4c25wcmludGYoZC0+cGF0aCwgbGVuLCAiJS4qcyVzLyIsIChpbnQpYmFzZS0+bGVuLCBiYXNlLT5idWYsIGZpbGVuYW1lKTsKKwloYXNoY3B5KGQtPm9pZC5oYXNoLCBzaGExKTsKK30KKworc3RhdGljIGludCB3cml0ZV9kaXJlY3Rvcnkoc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgKmMpCit7CisJc3RydWN0IGRpcmVjdG9yeSAqZCA9IGMtPmJvdHRvbTsKKwlpbnQgcmV0OworCisJaWYgKCFkKQorCQlyZXR1cm4gMDsKKwljLT5ib3R0b20gPSBkLT51cDsKKwlkLT5wYXRoW2QtPmxlbiAtIDFdID0gJ1wwJzsgLyogbm8gdHJhaWxpbmcgc2xhc2ggKi8KKwlyZXQgPQorCQl3cml0ZV9kaXJlY3RvcnkoYykgfHwKKwkJd3JpdGVfYXJjaGl2ZV9lbnRyeSgmZC0+b2lkLCBkLT5wYXRoLCBkLT5iYXNlbGVuLAorCQkJCSAgICBkLT5wYXRoICsgZC0+YmFzZWxlbiwgZC0+bW9kZSwKKwkJCQkgICAgZC0+c3RhZ2UsIGMpICE9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJZnJlZShkKTsKKwlyZXR1cm4gcmV0ID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IHF1ZXVlX29yX3dyaXRlX2FyY2hpdmVfZW50cnkoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBhcmNoaXZlcl9jb250ZXh0ICpjID0gY29udGV4dDsKKworCXdoaWxlIChjLT5ib3R0b20gJiYKKwkgICAgICAgIShiYXNlLT5sZW4gPj0gYy0+Ym90dG9tLT5sZW4gJiYKKwkJICFzdHJuY21wKGJhc2UtPmJ1ZiwgYy0+Ym90dG9tLT5wYXRoLCBjLT5ib3R0b20tPmxlbikpKSB7CisJCXN0cnVjdCBkaXJlY3RvcnkgKm5leHQgPSBjLT5ib3R0b20tPnVwOworCQlmcmVlKGMtPmJvdHRvbSk7CisJCWMtPmJvdHRvbSA9IG5leHQ7CisJfQorCisJaWYgKFNfSVNESVIobW9kZSkpIHsKKwkJc2l6ZV90IGJhc2VsZW4gPSBiYXNlLT5sZW47CisJCWNvbnN0IHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKworCQkvKiBCb3Jyb3cgYmFzZSwgYnV0IHJlc3RvcmUgaXRzIG9yaWdpbmFsIHZhbHVlIHdoZW4gZG9uZS4gKi8KKwkJc3RyYnVmX2FkZHN0cihiYXNlLCBmaWxlbmFtZSk7CisJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCQljaGVjayA9IGdldF9hcmNoaXZlX2F0dHJzKGMtPmFyZ3MtPnJlcG8tPmluZGV4LCBiYXNlLT5idWYpOworCQlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2VsZW4pOworCisJCWlmIChjaGVja19hdHRyX2V4cG9ydF9pZ25vcmUoY2hlY2spKQorCQkJcmV0dXJuIDA7CisJCXF1ZXVlX2RpcmVjdG9yeShvaWQtPmhhc2gsIGJhc2UsIGZpbGVuYW1lLAorCQkJCW1vZGUsIHN0YWdlLCBjKTsKKwkJcmV0dXJuIFJFQURfVFJFRV9SRUNVUlNJVkU7CisJfQorCisJaWYgKHdyaXRlX2RpcmVjdG9yeShjKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiB3cml0ZV9hcmNoaXZlX2VudHJ5KG9pZCwgYmFzZS0+YnVmLCBiYXNlLT5sZW4sIGZpbGVuYW1lLCBtb2RlLAorCQkJCSAgIHN0YWdlLCBjb250ZXh0KTsKK30KKworaW50IHdyaXRlX2FyY2hpdmVfZW50cmllcyhzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90IHdyaXRlX2VudHJ5KQoreworCXN0cnVjdCBhcmNoaXZlcl9jb250ZXh0IGNvbnRleHQ7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCWludCBlcnI7CisKKwlpZiAoYXJncy0+YmFzZWxlbiA+IDAgJiYgYXJncy0+YmFzZVthcmdzLT5iYXNlbGVuIC0gMV0gPT0gJy8nKSB7CisJCXNpemVfdCBsZW4gPSBhcmdzLT5iYXNlbGVuOworCisJCXdoaWxlIChsZW4gPiAxICYmIGFyZ3MtPmJhc2VbbGVuIC0gMl0gPT0gJy8nKQorCQkJbGVuLS07CisJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICIlLipzXG4iLCAoaW50KWxlbiwgYXJncy0+YmFzZSk7CisJCWVyciA9IHdyaXRlX2VudHJ5KGFyZ3MsICZhcmdzLT50cmVlLT5vYmplY3Qub2lkLCBhcmdzLT5iYXNlLAorCQkJCSAgbGVuLCAwNDA3NzcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwltZW1zZXQoJmNvbnRleHQsIDAsIHNpemVvZihjb250ZXh0KSk7CisJY29udGV4dC5hcmdzID0gYXJnczsKKwljb250ZXh0LndyaXRlX2VudHJ5ID0gd3JpdGVfZW50cnk7CisKKwkvKgorCSAqIFNldHVwIGluZGV4IGFuZCBpbnN0cnVjdCBhdHRyIHRvIHJlYWQgaW5kZXggb25seQorCSAqLworCWlmICghYXJncy0+d29ya3RyZWVfYXR0cmlidXRlcykgeworCQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJCW9wdHMuaW5kZXhfb25seSA9IDE7CisJCW9wdHMuaGVhZF9pZHggPSAtMTsKKwkJb3B0cy5zcmNfaW5kZXggPSBhcmdzLT5yZXBvLT5pbmRleDsKKwkJb3B0cy5kc3RfaW5kZXggPSBhcmdzLT5yZXBvLT5pbmRleDsKKwkJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwkJaW5pdF90cmVlX2Rlc2MoJnQsIGFyZ3MtPnRyZWUtPmJ1ZmZlciwgYXJncy0+dHJlZS0+c2l6ZSk7CisJCWlmICh1bnBhY2tfdHJlZXMoMSwgJnQsICZvcHRzKSkKKwkJCXJldHVybiAtMTsKKwkJZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihHSVRfQVRUUl9JTkRFWCk7CisJfQorCisJZXJyID0gcmVhZF90cmVlX3JlY3Vyc2l2ZShhcmdzLT5yZXBvLCBhcmdzLT50cmVlLCAiIiwKKwkJCQkgIDAsIDAsICZhcmdzLT5wYXRoc3BlYywKKwkJCQkgIHF1ZXVlX29yX3dyaXRlX2FyY2hpdmVfZW50cnksCisJCQkJICAmY29udGV4dCk7CisJaWYgKGVyciA9PSBSRUFEX1RSRUVfUkVDVVJTSVZFKQorCQllcnIgPSAwOworCXdoaWxlIChjb250ZXh0LmJvdHRvbSkgeworCQlzdHJ1Y3QgZGlyZWN0b3J5ICpuZXh0ID0gY29udGV4dC5ib3R0b20tPnVwOworCQlmcmVlKGNvbnRleHQuYm90dG9tKTsKKwkJY29udGV4dC5ib3R0b20gPSBuZXh0OworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyY2hpdmVyICpsb29rdXBfYXJjaGl2ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYXJjaGl2ZXJzOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgYXJjaGl2ZXJzW2ldLT5uYW1lKSkKKwkJCXJldHVybiBhcmNoaXZlcnNbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgcGF0aF9leGlzdHNfY29udGV4dCB7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzOworfTsKKworc3RhdGljIGludCByZWplY3RfZW50cnkoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIG1vZGUsCisJCQlpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IHJldCA9IC0xOworCXN0cnVjdCBwYXRoX2V4aXN0c19jb250ZXh0ICpjdHggPSBjb250ZXh0OworCisJaWYgKFNfSVNESVIobW9kZSkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkYnVmKCZzYiwgYmFzZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBmaWxlbmFtZSk7CisJCWlmICghbWF0Y2hfcGF0aHNwZWMoY3R4LT5hcmdzLT5yZXBvLT5pbmRleCwKKwkJCQkgICAgJmN0eC0+cGF0aHNwZWMsCisJCQkJICAgIHNiLmJ1Ziwgc2IubGVuLCAwLCBOVUxMLCAxKSkKKwkJCXJldCA9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGF0aF9leGlzdHMoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcGF0aHNbXSA9IHsgcGF0aCwgTlVMTCB9OworCXN0cnVjdCBwYXRoX2V4aXN0c19jb250ZXh0IGN0eDsKKwlpbnQgcmV0OworCisJY3R4LmFyZ3MgPSBhcmdzOworCXBhcnNlX3BhdGhzcGVjKCZjdHgucGF0aHNwZWMsIDAsIDAsICIiLCBwYXRocyk7CisJY3R4LnBhdGhzcGVjLnJlY3Vyc2l2ZSA9IDE7CisJcmV0ID0gcmVhZF90cmVlX3JlY3Vyc2l2ZShhcmdzLT5yZXBvLCBhcmdzLT50cmVlLCAiIiwKKwkJCQkgIDAsIDAsICZjdHgucGF0aHNwZWMsCisJCQkJICByZWplY3RfZW50cnksICZjdHgpOworCWNsZWFyX3BhdGhzcGVjKCZjdHgucGF0aHNwZWMpOworCXJldHVybiByZXQgIT0gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcGF0aHNwZWNfYXJnKGNvbnN0IGNoYXIgKipwYXRoc3BlYywKKwkJc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyX2FyZ3MpCit7CisJLyoKKwkgKiBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBwYXJzZV9wYXRoc3BlYyBpbiBwYXRoX2V4aXN0cygpCisJICogQWxzbyBpZiBwYXRoc3BlYyBwYXR0ZXJucyBhcmUgZGVwZW5kZW50LCB3ZSdyZSBpbiBiaWcKKwkgKiB0cm91YmxlIGFzIHdlIHRlc3QgZWFjaCBvbmUgc2VwYXJhdGVseQorCSAqLworCXBhcnNlX3BhdGhzcGVjKCZhcl9hcmdzLT5wYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMLAorCQkgICAgICAgIiIsIHBhdGhzcGVjKTsKKwlhcl9hcmdzLT5wYXRoc3BlYy5yZWN1cnNpdmUgPSAxOworCWlmIChwYXRoc3BlYykgeworCQl3aGlsZSAoKnBhdGhzcGVjKSB7CisJCQlpZiAoKipwYXRoc3BlYyAmJiAhcGF0aF9leGlzdHMoYXJfYXJncywgKnBhdGhzcGVjKSkKKwkJCQlkaWUoXygicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIpLCAqcGF0aHNwZWMpOworCQkJcGF0aHNwZWMrKzsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfdHJlZWlzaF9hcmcoY29uc3QgY2hhciAqKmFyZ3YsCisJCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcl9hcmdzLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCWludCByZW1vdGUpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IGFyZ3ZbMF07CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29pZDsKKwl0aW1lX3QgYXJjaGl2ZV90aW1lOworCXN0cnVjdCB0cmVlICp0cmVlOworCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCS8qIFJlbW90ZXMgYXJlIG9ubHkgYWxsb3dlZCB0byBmZXRjaCBhY3R1YWwgcmVmcyAqLworCWlmIChyZW1vdGUgJiYgIXJlbW90ZV9hbGxvd191bnJlYWNoYWJsZSkgeworCQljaGFyICpyZWYgPSBOVUxMOworCQljb25zdCBjaGFyICpjb2xvbiA9IHN0cmNocm51bChuYW1lLCAnOicpOworCQlpbnQgcmVmbmFtZWxlbiA9IGNvbG9uIC0gbmFtZTsKKworCQlpZiAoIWR3aW1fcmVmKG5hbWUsIHJlZm5hbWVsZW4sICZvaWQsICZyZWYpKQorCQkJZGllKF8oIm5vIHN1Y2ggcmVmOiAlLipzIiksIHJlZm5hbWVsZW4sIG5hbWUpOworCQlmcmVlKHJlZik7CisJfQorCisJaWYgKGdldF9vaWQobmFtZSwgJm9pZCkpCisJCWRpZShfKCJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJXMiKSwgbmFtZSk7CisKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoYXJfYXJncy0+cmVwbywgJm9pZCwgMSk7CisJaWYgKGNvbW1pdCkgeworCQljb21taXRfb2lkID0gJmNvbW1pdC0+b2JqZWN0Lm9pZDsKKwkJYXJjaGl2ZV90aW1lID0gY29tbWl0LT5kYXRlOworCX0gZWxzZSB7CisJCWNvbW1pdF9vaWQgPSBOVUxMOworCQlhcmNoaXZlX3RpbWUgPSB0aW1lKE5VTEwpOworCX0KKworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCWlmICh0cmVlID09IE5VTEwpCisJCWRpZShfKCJub3QgYSB0cmVlIG9iamVjdDogJXMiKSwgb2lkX3RvX2hleCgmb2lkKSk7CisKKwlpZiAocHJlZml4KSB7CisJCXN0cnVjdCBvYmplY3RfaWQgdHJlZV9vaWQ7CisJCXVuc2lnbmVkIHNob3J0IG1vZGU7CisJCWludCBlcnI7CisKKwkJZXJyID0gZ2V0X3RyZWVfZW50cnkoYXJfYXJncy0+cmVwbywKKwkJCQkgICAgICZ0cmVlLT5vYmplY3Qub2lkLAorCQkJCSAgICAgcHJlZml4LCAmdHJlZV9vaWQsCisJCQkJICAgICAmbW9kZSk7CisJCWlmIChlcnIgfHwgIVNfSVNESVIobW9kZSkpCisJCQlkaWUoXygiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiKSk7CisKKwkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJnRyZWVfb2lkKTsKKwl9CisJYXJfYXJncy0+dHJlZSA9IHRyZWU7CisJYXJfYXJncy0+Y29tbWl0X29pZCA9IGNvbW1pdF9vaWQ7CisJYXJfYXJncy0+Y29tbWl0ID0gY29tbWl0OworCWFyX2FyZ3MtPnRpbWUgPSBhcmNoaXZlX3RpbWU7Cit9CisKKyNkZWZpbmUgT1BUX19DT01QUihzLCB2LCBoLCBwKSBcCisJT1BUX1NFVF9JTlRfRihzLCBOVUxMLCB2LCBoLCBwLCBQQVJTRV9PUFRfTk9ORUcpCisjZGVmaW5lIE9QVF9fQ09NUFJfSElEREVOKHMsIHYsIHApIFwKKwlPUFRfU0VUX0lOVF9GKHMsIE5VTEwsIHYsICIiLCBwLCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfSElEREVOKQorCitzdGF0aWMgaW50IHBhcnNlX2FyY2hpdmVfYXJncyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IHN0cnVjdCBhcmNoaXZlciAqKmFyLCBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJY29uc3QgY2hhciAqbmFtZV9oaW50LCBpbnQgaXNfcmVtb3RlKQoreworCWNvbnN0IGNoYXIgKmZvcm1hdCA9IE5VTEw7CisJY29uc3QgY2hhciAqYmFzZSA9IE5VTEw7CisJY29uc3QgY2hhciAqcmVtb3RlID0gTlVMTDsKKwljb25zdCBjaGFyICpleGVjID0gTlVMTDsKKwljb25zdCBjaGFyICpvdXRwdXQgPSBOVUxMOworCWludCBjb21wcmVzc2lvbl9sZXZlbCA9IC0xOworCWludCB2ZXJib3NlID0gMDsKKwlpbnQgaTsKKwlpbnQgbGlzdCA9IDA7CisJaW50IHdvcmt0cmVlX2F0dHJpYnV0ZXMgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfU1RSSU5HKDAsICJmb3JtYXQiLCAmZm9ybWF0LCBOXygiZm10IiksIE5fKCJhcmNoaXZlIGZvcm1hdCIpKSwKKwkJT1BUX1NUUklORygwLCAicHJlZml4IiwgJmJhc2UsIE5fKCJwcmVmaXgiKSwKKwkJCU5fKCJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIikpLAorCQlPUFRfU1RSSU5HKCdvJywgIm91dHB1dCIsICZvdXRwdXQsIE5fKCJmaWxlIiksCisJCQlOXygid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIikpLAorCQlPUFRfQk9PTCgwLCAid29ya3RyZWUtYXR0cmlidXRlcyIsICZ3b3JrdHJlZV9hdHRyaWJ1dGVzLAorCQkJTl8oInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiKSksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiKSksCisJCU9QVF9fQ09NUFIoJzAnLCAmY29tcHJlc3Npb25fbGV2ZWwsIE5fKCJzdG9yZSBvbmx5IiksIDApLAorCQlPUFRfX0NPTVBSKCcxJywgJmNvbXByZXNzaW9uX2xldmVsLCBOXygiY29tcHJlc3MgZmFzdGVyIiksIDEpLAorCQlPUFRfX0NPTVBSX0hJRERFTignMicsICZjb21wcmVzc2lvbl9sZXZlbCwgMiksCisJCU9QVF9fQ09NUFJfSElEREVOKCczJywgJmNvbXByZXNzaW9uX2xldmVsLCAzKSwKKwkJT1BUX19DT01QUl9ISURERU4oJzQnLCAmY29tcHJlc3Npb25fbGV2ZWwsIDQpLAorCQlPUFRfX0NPTVBSX0hJRERFTignNScsICZjb21wcmVzc2lvbl9sZXZlbCwgNSksCisJCU9QVF9fQ09NUFJfSElEREVOKCc2JywgJmNvbXByZXNzaW9uX2xldmVsLCA2KSwKKwkJT1BUX19DT01QUl9ISURERU4oJzcnLCAmY29tcHJlc3Npb25fbGV2ZWwsIDcpLAorCQlPUFRfX0NPTVBSX0hJRERFTignOCcsICZjb21wcmVzc2lvbl9sZXZlbCwgOCksCisJCU9QVF9fQ09NUFIoJzknLCAmY29tcHJlc3Npb25fbGV2ZWwsIE5fKCJjb21wcmVzcyBiZXR0ZXIiKSwgOSksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9CT09MKCdsJywgImxpc3QiLCAmbGlzdCwKKwkJCU5fKCJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiKSksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9TVFJJTkcoMCwgInJlbW90ZSIsICZyZW1vdGUsIE5fKCJyZXBvIiksCisJCQlOXygicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iKSksCisJCU9QVF9TVFJJTkcoMCwgImV4ZWMiLCAmZXhlYywgTl8oImNvbW1hbmQiKSwKKwkJCU5fKCJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRzLCBhcmNoaXZlX3VzYWdlLCAwKTsKKworCWlmIChyZW1vdGUpCisJCWRpZShfKCJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIpKTsKKwlpZiAoZXhlYykKKwkJZGllKF8oIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIikpOworCWlmIChvdXRwdXQpCisJCWRpZShfKCJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIpKTsKKworCWlmICghYmFzZSkKKwkJYmFzZSA9ICIiOworCisJaWYgKGxpc3QpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5yX2FyY2hpdmVyczsgaSsrKQorCQkJaWYgKCFpc19yZW1vdGUgfHwgYXJjaGl2ZXJzW2ldLT5mbGFncyAmIEFSQ0hJVkVSX1JFTU9URSkKKwkJCQlwcmludGYoIiVzXG4iLCBhcmNoaXZlcnNbaV0tPm5hbWUpOworCQlleGl0KDApOworCX0KKworCWlmICghZm9ybWF0ICYmIG5hbWVfaGludCkKKwkJZm9ybWF0ID0gYXJjaGl2ZV9mb3JtYXRfZnJvbV9maWxlbmFtZShuYW1lX2hpbnQpOworCWlmICghZm9ybWF0KQorCQlmb3JtYXQgPSAidGFyIjsKKworCS8qIFdlIG5lZWQgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciAtLSB0cmVlLWlzaCAqLworCWlmIChhcmdjIDwgMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGFyY2hpdmVfdXNhZ2UsIG9wdHMpOworCSphciA9IGxvb2t1cF9hcmNoaXZlcihmb3JtYXQpOworCWlmICghKmFyIHx8IChpc19yZW1vdGUgJiYgISgoKmFyKS0+ZmxhZ3MgJiBBUkNISVZFUl9SRU1PVEUpKSkKKwkJZGllKF8oIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIpLCBmb3JtYXQpOworCisJYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJaWYgKGNvbXByZXNzaW9uX2xldmVsICE9IC0xKSB7CisJCWlmICgoKmFyKS0+ZmxhZ3MgJiBBUkNISVZFUl9XQU5UX0NPTVBSRVNTSU9OX0xFVkVMUykKKwkJCWFyZ3MtPmNvbXByZXNzaW9uX2xldmVsID0gY29tcHJlc3Npb25fbGV2ZWw7CisJCWVsc2UgeworCQkJZGllKF8oIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiKSwKKwkJCQkJZm9ybWF0LCBjb21wcmVzc2lvbl9sZXZlbCk7CisJCX0KKwl9CisJYXJncy0+dmVyYm9zZSA9IHZlcmJvc2U7CisJYXJncy0+YmFzZSA9IGJhc2U7CisJYXJncy0+YmFzZWxlbiA9IHN0cmxlbihiYXNlKTsKKwlhcmdzLT53b3JrdHJlZV9hdHRyaWJ1dGVzID0gd29ya3RyZWVfYXR0cmlidXRlczsKKworCXJldHVybiBhcmdjOworfQorCitpbnQgd3JpdGVfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJICBjb25zdCBjaGFyICpuYW1lX2hpbnQsIGludCByZW1vdGUpCit7CisJY29uc3Qgc3RydWN0IGFyY2hpdmVyICphciA9IE5VTEw7CisJc3RydWN0IGFyY2hpdmVyX2FyZ3MgYXJnczsKKworCWdpdF9jb25maWdfZ2V0X2Jvb2woInVwbG9hZGFyY2hpdmUuYWxsb3d1bnJlYWNoYWJsZSIsICZyZW1vdGVfYWxsb3dfdW5yZWFjaGFibGUpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ3MucmVwbyA9IHJlcG87CisJYXJnYyA9IHBhcnNlX2FyY2hpdmVfYXJncyhhcmdjLCBhcmd2LCAmYXIsICZhcmdzLCBuYW1lX2hpbnQsIHJlbW90ZSk7CisJaWYgKCFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkgeworCQkvKgorCQkgKiBXZSBrbm93IHRoaXMgd2lsbCBkaWUoKSB3aXRoIGFuIGVycm9yLCBzbyB3ZSBjb3VsZCBqdXN0CisJCSAqIGRpZSBvdXJzZWx2ZXM7IGJ1dCBpdHMgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIG1vcmUgc3BlY2lmaWMKKwkJICogdGhhbiB3aGF0IHdlIGNvdWxkIHdyaXRlIGhlcmUuCisJCSAqLworCQlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJfQorCisJcGFyc2VfdHJlZWlzaF9hcmcoYXJndiwgJmFyZ3MsIHByZWZpeCwgcmVtb3RlKTsKKwlwYXJzZV9wYXRoc3BlY19hcmcoYXJndiArIDEsICZhcmdzKTsKKworCXJldHVybiBhci0+d3JpdGVfYXJjaGl2ZShhciwgJmFyZ3MpOworfQorCitzdGF0aWMgaW50IG1hdGNoX2V4dGVuc2lvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZXh0KQoreworCWludCBwcmVmaXhsZW4gPSBzdHJsZW4oZmlsZW5hbWUpIC0gc3RybGVuKGV4dCk7CisKKwkvKgorCSAqIFdlIG5lZWQgMSBjaGFyYWN0ZXIgZm9yIHRoZSAnLicsIGFuZCAxIGNoYXJhY3RlciB0byBlbnN1cmUgdGhhdCB0aGUKKwkgKiBwcmVmaXggaXMgbm9uLWVtcHR5IChrLmUuLCB3ZSBkb24ndCBtYXRjaCAudGFyLmd6IHdpdGggbm8gYWN0dWFsCisJICogZmlsZW5hbWUpLgorCSAqLworCWlmIChwcmVmaXhsZW4gPCAyIHx8IGZpbGVuYW1lW3ByZWZpeGxlbiAtIDFdICE9ICcuJykKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFzdHJjbXAoZmlsZW5hbWUgKyBwcmVmaXhsZW4sIGV4dCk7Cit9CisKK2NvbnN0IGNoYXIgKmFyY2hpdmVfZm9ybWF0X2Zyb21fZmlsZW5hbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYXJjaGl2ZXJzOyBpKyspCisJCWlmIChtYXRjaF9leHRlbnNpb24oZmlsZW5hbWUsIGFyY2hpdmVyc1tpXS0+bmFtZSkpCisJCQlyZXR1cm4gYXJjaGl2ZXJzW2ldLT5uYW1lOworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS5oIGIvYXJjaGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MGUzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoaXZlLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBBUkNISVZFX0gKKyNkZWZpbmUgQVJDSElWRV9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisKK3N0cnVjdCByZXBvc2l0b3J5OworCitzdHJ1Y3QgYXJjaGl2ZXJfYXJncyB7CisJc3RydWN0IHJlcG9zaXRvcnkgKnJlcG87CisJY29uc3QgY2hhciAqYmFzZTsKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkOworCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwl0aW1lc3RhbXBfdCB0aW1lOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwl1bnNpZ25lZCBpbnQgdmVyYm9zZSA6IDE7CisJdW5zaWduZWQgaW50IHdvcmt0cmVlX2F0dHJpYnV0ZXMgOiAxOworCXVuc2lnbmVkIGludCBjb252ZXJ0IDogMTsKKwlpbnQgY29tcHJlc3Npb25fbGV2ZWw7Cit9OworCisvKiBtYWluIGFwaSAqLworCitpbnQgd3JpdGVfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJICBjb25zdCBjaGFyICpuYW1lX2hpbnQsIGludCByZW1vdGUpOworCitjb25zdCBjaGFyICphcmNoaXZlX2Zvcm1hdF9mcm9tX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworLyogYXJjaGl2ZSBiYWNrZW5kIHN0dWZmICovCisKKyNkZWZpbmUgQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFMgMQorI2RlZmluZSBBUkNISVZFUl9SRU1PVEUgMgorc3RydWN0IGFyY2hpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKndyaXRlX2FyY2hpdmUpKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqLCBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqKTsKKwl1bnNpZ25lZCBmbGFnczsKKwl2b2lkICpkYXRhOworfTsKK3ZvaWQgcmVnaXN0ZXJfYXJjaGl2ZXIoc3RydWN0IGFyY2hpdmVyICopOworCit2b2lkIGluaXRfdGFyX2FyY2hpdmVyKHZvaWQpOwordm9pZCBpbml0X3ppcF9hcmNoaXZlcih2b2lkKTsKK3ZvaWQgaW5pdF9hcmNoaXZlcnModm9pZCk7CisKK3R5cGVkZWYgaW50ICgqd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90KShzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQljb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwKKwkJCQkJdW5zaWduZWQgaW50IG1vZGUpOworCitpbnQgd3JpdGVfYXJjaGl2ZV9lbnRyaWVzKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLCB3cml0ZV9hcmNoaXZlX2VudHJ5X2ZuX3Qgd3JpdGVfZW50cnkpOwordm9pZCAqb2JqZWN0X2ZpbGVfdG9fYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZXApOworCisjZW5kaWYJLyogQVJDSElWRV9IICovCmRpZmYgLS1naXQgYS9hcmd2LWFycmF5LmMgYi9hcmd2LWFycmF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlZjhjMAotLS0gL2Rldi9udWxsCisrKyBiL2FyZ3YtYXJyYXkuYwpAQCAtMCwwICsxLDEwOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitjb25zdCBjaGFyICplbXB0eV9hcmd2W10gPSB7IE5VTEwgfTsKKwordm9pZCBhcmd2X2FycmF5X2luaXQoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5KQoreworCWFycmF5LT5hcmd2ID0gZW1wdHlfYXJndjsKKwlhcnJheS0+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+aXRlbXNbMF0udmFsdWU7CisgKgorICogaWYgKEFUVFJfVFJVRSh2YWx1ZSkpIHsKKyAqIFRoZSBhdHRyaWJ1dGUgaXMgU2V0LCBieSBsaXN0aW5nIG9ubHkgdGhlIG5hbWUgb2YgdGhlCisgKiBhdHRyaWJ1dGUgaW4gdGhlIGdpdGF0dHJpYnV0ZXMgZmlsZSBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKSB7CisgKiBUaGUgYXR0cmlidXRlIGlzIFVuc2V0LCBieSBsaXN0aW5nIHRoZSBuYW1lIG9mIHRoZQorICogICAgICAgICBhdHRyaWJ1dGUgcHJlZml4ZWQgd2l0aCBhIGRhc2ggLSBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKSB7CisgKiBUaGUgYXR0cmlidXRlIGlzIG5laXRoZXIgc2V0IG5vciB1bnNldCBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKSB7CisgKiBJZiBub25lIG9mIEFUVFJfVFJVRSgpLCBBVFRSX0ZBTFNFKCksIG9yIEFUVFJfVU5TRVQoKSBpcworICogICAgICAgICB0cnVlLCB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgc2V0IGluIHRoZSBnaXRhdHRyaWJ1dGVzCisgKiBmaWxlIGZvciB0aGUgcGF0aCBieSBzYXlpbmcgImF0dHI9dmFsdWUiLgorICogfSBlbHNlIGlmICguLi4gb3RoZXIgY2hlY2sgdXNpbmcgdmFsdWUgYXMgc3RyaW5nIC4uLikgeworICogLi4uCisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBUbyBzZWUgaG93IGF0dHJpYnV0ZXMgaW4gYXJndltdIGFyZSBzZXQgZm9yIGRpZmZlcmVudCBwYXRocywgb25seQorICogdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIGFib3ZlIHdvdWxkIGJlIGRpZmZlcmVudC4KKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIHN0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7CisgKiBzdGF0aWMgdm9pZCBzZXR1cF9jaGVjayhjb25zdCBjaGFyICoqYXJndikKKyAqIHsKKyAqICAgICBjaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKKyAqICAgICB3aGlsZSAoKmFyZ3YpIHsKKyAqICAgICAgICAgc3RydWN0IGdpdF9hdHRyICphdHRyID0gZ2l0X2F0dHIoKmFyZ3YpOworICogICAgICAgICBhdHRyX2NoZWNrX2FwcGVuZChjaGVjaywgYXR0cik7CisgKiAgICAgICAgIGFyZ3YrKzsKKyAqICAgICB9CisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogUXVlcnlpbmcgQWxsIEF0dHJpYnV0ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVG8gZ2V0IHRoZSB2YWx1ZXMgb2YgYWxsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZToKKyAqCisgKiAtIFByZXBhcmUgYW4gZW1wdHkgYGF0dHJfY2hlY2tgIHN0cnVjdHVyZSBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2FsbG9jKClgLgorICoKKyAqIC0gQ2FsbCBgZ2l0X2FsbF9hdHRycygpYCwgd2hpY2ggcG9wdWxhdGVzIHRoZSBgYXR0cl9jaGVja2Agd2l0aCB0aGUKKyAqIGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gdGhlIHBhdGguCisgKgorICogLSBJdGVyYXRlIG92ZXIgdGhlIGBhdHRyX2NoZWNrLml0ZW1zW11gIGFycmF5IHRvIGV4YW1pbmUgdGhlIGF0dHJpYnV0ZQorICogbmFtZXMgYW5kIHZhbHVlcy4gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBkZXNjcmliZWQgYnkgYW4KKyAqIGBhdHRyX2NoZWNrLml0ZW1zW11gIG9iamVjdCBjYW4gYmUgcmV0cmlldmVkIHZpYQorICogYGdpdF9hdHRyX25hbWUoY2hlY2stPml0ZW1zW2ldLmF0dHIpYC4gKFBsZWFzZSBub3RlIHRoYXQgbm8gaXRlbXMgd2lsbCBiZQorICogcmV0dXJuZWQgZm9yIHVuc2V0IGF0dHJpYnV0ZXMsIHNvIGBBVFRSX1VOU0VUKClgIHdpbGwgcmV0dXJuIGZhbHNlIGZvciBhbGwKKyAqIHJldHVybmVkIGBhdHRyX2NoZWNrLml0ZW1zW11gIG9iamVjdHMuKQorICoKKyAqIC0gRnJlZSB0aGUgYGF0dHJfY2hlY2tgIHN0cnVjdCBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2ZyZWUoKWAuCisgKi8KKworc3RydWN0IGluZGV4X3N0YXRlOworCisvKioKKyAqIEFuIGF0dHJpYnV0ZSBpcyBhbiBvcGFxdWUgb2JqZWN0IHRoYXQgaXMgaWRlbnRpZmllZCBieSBpdHMgbmFtZS4gUGFzcyB0aGUKKyAqIG5hbWUgdG8gYGdpdF9hdHRyKClgIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgb2JqZWN0IG9mIHRoaXMgdHlwZS4KKyAqIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHN0cnVjdHVyZSBpcyBvZiBubyBpbnRlcmVzdCB0byB0aGUKKyAqIGNhbGxpbmcgcHJvZ3JhbXMuIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nCisgKiBgZ2l0X2F0dHJfbmFtZSgpYC4KKyAqLworc3RydWN0IGdpdF9hdHRyOworCisvKiBvcGFxdWUgc3RydWN0dXJlcyB1c2VkIGludGVybmFsbHkgZm9yIGF0dHJpYnV0ZSBjb2xsZWN0aW9uICovCitzdHJ1Y3QgYWxsX2F0dHJzX2l0ZW07CitzdHJ1Y3QgYXR0cl9zdGFjazsKK3N0cnVjdCBpbmRleF9zdGF0ZTsKKworLyoKKyAqIEdpdmVuIGEgc3RyaW5nLCByZXR1cm4gdGhlIGdpdGF0dHJpYnV0ZSBvYmplY3QgdGhhdAorICogY29ycmVzcG9uZHMgdG8gaXQuCisgKi8KK2NvbnN0IHN0cnVjdCBnaXRfYXR0ciAqZ2l0X2F0dHIoY29uc3QgY2hhciAqKTsKKworLyogSW50ZXJuYWwgdXNlICovCitleHRlcm4gY29uc3QgY2hhciBnaXRfYXR0cl9fdHJ1ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX2ZhbHNlW107CisKKy8qKgorICogQXR0cmlidXRlIFZhbHVlcworICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFuIGF0dHJpYnV0ZSBmb3IgYSBwYXRoIGNhbiBiZSBpbiBvbmUgb2YgZm91ciBzdGF0ZXM6IFNldCwgVW5zZXQsIFVuc3BlY2lmaWVkCisgKiBvciBzZXQgdG8gYSBzdHJpbmcsIGFuZCBgLnZhbHVlYCBtZW1iZXIgb2YgYHN0cnVjdCBhdHRyX2NoZWNrX2l0ZW1gIHJlY29yZHMKKyAqIGl0LiBUaGUgdGhyZWUgbWFjcm9zIGNoZWNrIHRoZXNlLCBpZiBub25lIG9mIHRoZW0gcmV0dXJucyB0cnVlLCBgLnZhbHVlYAorICogbWVtYmVyIHBvaW50cyBhdCBhIHN0cmluZyB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGUgcGF0aC4KKyAqLworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBTZXQgZm9yIHRoZSBwYXRoLiAqLworI2RlZmluZSBBVFRSX1RSVUUodikgKCh2KSA9PSBnaXRfYXR0cl9fdHJ1ZSkKKworLyogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgVW5zZXQgZm9yIHRoZSBwYXRoLiAqLworI2RlZmluZSBBVFRSX0ZBTFNFKHYpICgodikgPT0gZ2l0X2F0dHJfX2ZhbHNlKQorCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBVbnNwZWNpZmllZCBmb3IgdGhlIHBhdGguICovCisjZGVmaW5lIEFUVFJfVU5TRVQodikgKCh2KSA9PSBOVUxMKQorCisvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIG9uZSBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZS4gKi8KK3N0cnVjdCBhdHRyX2NoZWNrX2l0ZW0geworCWNvbnN0IHN0cnVjdCBnaXRfYXR0ciAqYXR0cjsKKwljb25zdCBjaGFyICp2YWx1ZTsKK307CisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYGF0dHJfY2hlY2tfaXRlbWAuIEl0IGlzIHBhc3NlZCB0bworICogYGdpdF9jaGVja19hdHRyKClgIGZ1bmN0aW9uLCBzcGVjaWZ5aW5nIHRoZSBhdHRyaWJ1dGVzIHRvIGNoZWNrLCBhbmQKKyAqIHJlY2VpdmVzIHRoZWlyIHZhbHVlcy4KKyAqLworc3RydWN0IGF0dHJfY2hlY2sgeworCWludCBucjsKKwlpbnQgYWxsb2M7CisJc3RydWN0IGF0dHJfY2hlY2tfaXRlbSAqaXRlbXM7CisJaW50IGFsbF9hdHRyc19ucjsKKwlzdHJ1Y3QgYWxsX2F0dHJzX2l0ZW0gKmFsbF9hdHRyczsKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqc3RhY2s7Cit9OworCitzdHJ1Y3QgYXR0cl9jaGVjayAqYXR0cl9jaGVja19hbGxvYyh2b2lkKTsKK3N0cnVjdCBhdHRyX2NoZWNrICphdHRyX2NoZWNrX2luaXRsKGNvbnN0IGNoYXIgKiwgLi4uKTsKK3N0cnVjdCBhdHRyX2NoZWNrICphdHRyX2NoZWNrX2R1cChjb25zdCBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spOworCitzdHJ1Y3QgYXR0cl9jaGVja19pdGVtICphdHRyX2NoZWNrX2FwcGVuZChzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2ssCisJCQkJCSAgY29uc3Qgc3RydWN0IGdpdF9hdHRyICphdHRyKTsKKwordm9pZCBhdHRyX2NoZWNrX3Jlc2V0KHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjayk7Cit2b2lkIGF0dHJfY2hlY2tfY2xlYXIoc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrKTsKK3ZvaWQgYXR0cl9jaGVja19mcmVlKHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjayk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSByZXByZXNlbnRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUKKyAqIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBudWxsLWRlbGltaXRlZCBzdHJpbmcgdGhhdCBpcyBwYXJ0CisgKiBvZiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmU7IGl0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGNoYXIgKmdpdF9hdHRyX25hbWUoY29uc3Qgc3RydWN0IGdpdF9hdHRyICopOworCit2b2lkIGdpdF9jaGVja19hdHRyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrKTsKKworLyoKKyAqIFJldHJpZXZlIGFsbCBhdHRyaWJ1dGVzIHRoYXQgYXBwbHkgdG8gdGhlIHNwZWNpZmllZCBwYXRoLgorICogY2hlY2sgaG9sZHMgdGhlIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIHZhbHVlcy4KKyAqLwordm9pZCBnaXRfYWxsX2F0dHJzKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2spOworCitlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiB7CisJR0lUX0FUVFJfQ0hFQ0tJTiwKKwlHSVRfQVRUUl9DSEVDS09VVCwKKwlHSVRfQVRUUl9JTkRFWAorfTsKK3ZvaWQgZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiBuZXdfZGlyZWN0aW9uKTsKKwordm9pZCBhdHRyX3N0YXJ0KHZvaWQpOworCisjZW5kaWYgLyogQVRUUl9IICovCmRpZmYgLS1naXQgYS9henVyZS1waXBlbGluZXMueW1sIGIvYXp1cmUtcGlwZWxpbmVzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzVjM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvYXp1cmUtcGlwZWxpbmVzLnltbApAQCAtMCwwICsxLDU1OCBAQAordmFyaWFibGVzOgorICBBZ2VudC5Tb3VyY2UuR2l0LlNoYWxsb3dGZXRjaERlcHRoOiAxCisKK2pvYnM6CistIGpvYjogd2luZG93c19idWlsZAorICBkaXNwbGF5TmFtZTogV2luZG93cyBCdWlsZAorICBjb25kaXRpb246IHN1Y2NlZWRlZCgpCisgIHBvb2w6CisgICAgdm1JbWFnZTogd2luZG93cy1sYXRlc3QKKyAgdGltZW91dEluTWludXRlczogMjQwCisgIHN0ZXBzOgorICAtIHBvd2Vyc2hlbGw6IHwKKyAgICAgIGlmICgiJEdJVEZJTEVTSEFSRVBXRCIgLW5lICIiIC1hbmQgIiRHSVRGSUxFU0hBUkVQV0QiIC1uZSAiYCRgKGdpdGZpbGVzaGFyZS5wd2QpIikgeworICAgICAgICBuZXQgdXNlIHM6IFxcZ2l0ZmlsZXNoYXJlLmZpbGUuY29yZS53aW5kb3dzLm5ldFx0ZXN0LWNhY2hlICIkR0lURklMRVNIQVJFUFdEIiAvdXNlcjpBWlVSRVxnaXRmaWxlc2hhcmUgL3BlcnNpc3RlbnQ6bm8KKyAgICAgICAgY21kIC9jIG1rbGluayAvZCAiJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KVx0ZXN0LWNhY2hlIiBTOlwKKyAgICAgIH0KKyAgICBkaXNwbGF5TmFtZTogJ01vdW50IHRlc3QtY2FjaGUnCisgICAgZW52OgorICAgICAgR0lURklMRVNIQVJFUFdEOiAkKGdpdGZpbGVzaGFyZS5wd2QpCisgIC0gcG93ZXJzaGVsbDogfAorICAgICAgJHVybGJhc2UgPSAiaHR0cHM6Ly9kZXYuYXp1cmUuY29tL2dpdC1mb3Itd2luZG93cy9naXQvX2FwaXMvYnVpbGQvYnVpbGRzIgorICAgICAgJGlkID0gKChJbnZva2UtV2ViUmVxdWVzdCAtVXNlQmFzaWNQYXJzaW5nICIke3VybGJhc2V9P2RlZmluaXRpb25zPTIyJnN0YXR1c0ZpbHRlcj1jb21wbGV0ZWQmcmVzdWx0RmlsdGVyPXN1Y2NlZWRlZCZgJHRvcD0xIikuY29udGVudCB8IENvbnZlcnRGcm9tLUpTT04pLnZhbHVlWzBdLmlkCisgICAgICAkZG93bmxvYWRVcmwgPSAoKEludm9rZS1XZWJSZXF1ZXN0IC1Vc2VCYXNpY1BhcnNpbmcgIiR7dXJsYmFzZX0vJGlkL2FydGlmYWN0cyIpLmNvbnRlbnQgfCBDb252ZXJ0RnJvbS1KU09OKS52YWx1ZVsxXS5yZXNvdXJjZS5kb3dubG9hZFVybAorICAgICAgKE5ldy1PYmplY3QgTmV0LldlYkNsaWVudCkuRG93bmxvYWRGaWxlKCRkb3dubG9hZFVybCwiZ2l0LXNkay02NC1taW5pbWFsLnppcCIpCisgICAgICBFeHBhbmQtQXJjaGl2ZSBnaXQtc2RrLTY0LW1pbmltYWwuemlwIC1EZXN0aW5hdGlvblBhdGggLiAtRm9yY2UKKyAgICAgIFJlbW92ZS1JdGVtIGdpdC1zZGstNjQtbWluaW1hbC56aXAKKworICAgICAgIyBMZXQgR2l0IGlnbm9yZSB0aGUgU0RLIGFuZCB0aGUgdGVzdC1jYWNoZQorICAgICAgIi9naXQtc2RrLTY0LW1pbmltYWwvYG4vdGVzdC1jYWNoZS9gbiIgfCBPdXQtRmlsZSAtTm9OZXdMaW5lIC1FbmNvZGluZyBhc2NpaSAtQXBwZW5kICIkKEJ1aWxkLlNvdXJjZXNEaXJlY3RvcnkpXC5naXRcaW5mb1xleGNsdWRlIgorICAgIGRpc3BsYXlOYW1lOiAnRG93bmxvYWQgZ2l0LXNkay02NC1taW5pbWFsJworICAtIHBvd2Vyc2hlbGw6IHwKKyAgICAgICYgZ2l0LXNkay02NC1taW5pbWFsXHVzclxiaW5cYmFzaC5leGUgLWxjIEAiCisgICAgICAgIGNpL21ha2UtdGVzdC1hcnRpZmFjdHMuc2ggYXJ0aWZhY3RzCisgICAgICAiQAorICAgICAgaWYgKCEkPykgeyBleGl0KDEpIH0KKyAgICBkaXNwbGF5TmFtZTogQnVpbGQKKyAgICBlbnY6CisgICAgICBIT01FOiAkKEJ1aWxkLlNvdXJjZXNEaXJlY3RvcnkpCisgICAgICBNU1lTVEVNOiBNSU5HVzY0CisgICAgICBERVZFTE9QRVI6IDEKKyAgICAgIE5PX1BFUkw6IDEKKyAgLSB0YXNrOiBQdWJsaXNoUGlwZWxpbmVBcnRpZmFjdEAwCisgICAgZGlzcGxheU5hbWU6ICdQdWJsaXNoIFBpcGVsaW5lIEFydGlmYWN0OiB0ZXN0IGFydGlmYWN0cycKKyAgICBpbnB1dHM6CisgICAgICBhcnRpZmFjdE5hbWU6ICd3aW5kb3dzLWFydGlmYWN0cycKKyAgICAgIHRhcmdldFBhdGg6ICckKEJ1aWxkLlNvdXJjZXNEaXJlY3RvcnkpXGFydGlmYWN0cycKKyAgLSB0YXNrOiBQdWJsaXNoUGlwZWxpbmVBcnRpZmFjdEAwCisgICAgZGlzcGxheU5hbWU6ICdQdWJsaXNoIFBpcGVsaW5lIEFydGlmYWN0OiBnaXQtc2RrLTY0LW1pbmltYWwnCisgICAgaW5wdXRzOgorICAgICAgYXJ0aWZhY3ROYW1lOiAnZ2l0LXNkay02NC1taW5pbWFsJworICAgICAgdGFyZ2V0UGF0aDogJyQoQnVpbGQuU291cmNlc0RpcmVjdG9yeSlcZ2l0LXNkay02NC1taW5pbWFsJworICAtIHBvd2Vyc2hlbGw6IHwKKyAgICAgIGlmICgiJEdJVEZJTEVTSEFSRVBXRCIgLW5lICIiIC1hbmQgIiRHSVRGSUxFU0hBUkVQV0QiIC1uZSAiYCRgKGdpdGZpbGVzaGFyZS5wd2QpIikgeworICAgICAgICBjbWQgL2Mgcm1kaXIgIiQoQnVpbGQuU291cmNlc0RpcmVjdG9yeSlcdGVzdC1jYWNoZSIKKyAgICAgIH0KKyAgICBkaXNwbGF5TmFtZTogJ1VubW91bnQgdGVzdC1jYWNoZScKKyAgICBjb25kaXRpb246IHRydWUKKyAgICBlbnY6CisgICAgICBHSVRGSUxFU0hBUkVQV0Q6ICQoZ2l0ZmlsZXNoYXJlLnB3ZCkKKworLSBqb2I6IHdpbmRvd3NfdGVzdAorICBkaXNwbGF5TmFtZTogV2luZG93cyBUZXN0CisgIGRlcGVuZHNPbjogd2luZG93c19idWlsZAorICBjb25kaXRpb246IHN1Y2NlZWRlZCgpCisgIHBvb2w6CisgICAgdm1JbWFnZTogd2luZG93cy1sYXRlc3QKKyAgdGltZW91dEluTWludXRlczogMjQwCisgIHN0cmF0ZWd5OgorICAgIHBhcmFsbGVsOiAxMAorICBzdGVwczoKKyAgLSBwb3dlcnNoZWxsOiB8CisgICAgICBpZiAoIiRHSVRGSUxFU0hBUkVQV0QiIC1uZSAiIiAtYW5kICIkR0lURklMRVNIQVJFUFdEIiAtbmUgImAkYChnaXRmaWxlc2hhcmUucHdkKSIpIHsKKyAgICAgICAgbmV0IHVzZSBzOiBcXGdpdGZpbGVzaGFyZS5maWxlLmNvcmUud2luZG93cy5uZXRcdGVzdC1jYWNoZSAiJEdJVEZJTEVTSEFSRVBXRCIgL3VzZXI6QVpVUkVcZ2l0ZmlsZXNoYXJlIC9wZXJzaXN0ZW50Om5vCisgICAgICAgIGNtZCAvYyBta2xpbmsgL2QgIiQoQnVpbGQuU291cmNlc0RpcmVjdG9yeSlcdGVzdC1jYWNoZSIgUzpcCisgICAgICB9CisgICAgZGlzcGxheU5hbWU6ICdNb3VudCB0ZXN0LWNhY2hlJworICAgIGVudjoKKyAgICAgIEdJVEZJTEVTSEFSRVBXRDogJChnaXRmaWxlc2hhcmUucHdkKQorICAtIHRhc2s6IERvd25sb2FkUGlwZWxpbmVBcnRpZmFjdEAwCisgICAgZGlzcGxheU5hbWU6ICdEb3dubG9hZCBQaXBlbGluZSBBcnRpZmFjdDogdGVzdCBhcnRpZmFjdHMnCisgICAgaW5wdXRzOgorICAgICAgYXJ0aWZhY3ROYW1lOiAnd2luZG93cy1hcnRpZmFjdHMnCisgICAgICB0YXJnZXRQYXRoOiAnJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KScKKyAgLSB0YXNrOiBEb3dubG9hZFBpcGVsaW5lQXJ0aWZhY3RAMAorICAgIGRpc3BsYXlOYW1lOiAnRG93bmxvYWQgUGlwZWxpbmUgQXJ0aWZhY3Q6IGdpdC1zZGstNjQtbWluaW1hbCcKKyAgICBpbnB1dHM6CisgICAgICBhcnRpZmFjdE5hbWU6ICdnaXQtc2RrLTY0LW1pbmltYWwnCisgICAgICB0YXJnZXRQYXRoOiAnJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KVxnaXQtc2RrLTY0LW1pbmltYWwnCisgIC0gcG93ZXJzaGVsbDogfAorICAgICAgJiBnaXQtc2RrLTY0LW1pbmltYWxcdXNyXGJpblxiYXNoLmV4ZSAtbGMgQCIKKyAgICAgICAgdGVzdCAtZiBhcnRpZmFjdHMudGFyLmd6IHx8IHsKKyAgICAgICAgICBlY2hvIE5vIHRlc3QgYXJ0aWZhY3RzIGZvdW5kXDsgc2tpcHBpbmcgPiYyCisgICAgICAgICAgZXhpdCAwCisgICAgICAgIH0KKyAgICAgICAgdGFyIHhmIGFydGlmYWN0cy50YXIuZ3ogfHwgZXhpdCAxCisKKyAgICAgICAgIyBMZXQgR2l0IGlnbm9yZSB0aGUgU0RLIGFuZCB0aGUgdGVzdC1jYWNoZQorICAgICAgICBwcmludGYgJyVzXG4nIC9naXQtc2RrLTY0LW1pbmltYWwvIC90ZXN0LWNhY2hlLyA+Pi5naXQvaW5mby9leGNsdWRlCisKKyAgICAgICAgY2kvcnVuLXRlc3Qtc2xpY2Uuc2ggYCRTWVNURU1fSk9CUE9TSVRJT05JTlBIQVNFIGAkU1lTVEVNX1RPVEFMSk9CU0lOUEhBU0UgfHwgeworICAgICAgICAgIGNpL3ByaW50LXRlc3QtZmFpbHVyZXMuc2gKKyAgICAgICAgICBleGl0IDEKKyAgICAgICAgfQorICAgICAgIkAKKyAgICAgIGlmICghJD8pIHsgZXhpdCgxKSB9CisgICAgZGlzcGxheU5hbWU6ICdUZXN0IChwYXJhbGxlbCknCisgICAgZW52OgorICAgICAgSE9NRTogJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KQorICAgICAgTVNZU1RFTTogTUlOR1c2NAorICAgICAgTk9fU1ZOX1RFU1RTOiAxCisgICAgICBHSVRfVEVTVF9TS0lQX1JFQkFTRV9QOiAxCisgIC0gcG93ZXJzaGVsbDogfAorICAgICAgaWYgKCIkR0lURklMRVNIQVJFUFdEIiAtbmUgIiIgLWFuZCAiJEdJVEZJTEVTSEFSRVBXRCIgLW5lICJgJGAoZ2l0ZmlsZXNoYXJlLnB3ZCkiKSB7CisgICAgICAgIGNtZCAvYyBybWRpciAiJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KVx0ZXN0LWNhY2hlIgorICAgICAgfQorICAgIGRpc3BsYXlOYW1lOiAnVW5tb3VudCB0ZXN0LWNhY2hlJworICAgIGNvbmRpdGlvbjogdHJ1ZQorICAgIGVudjoKKyAgICAgIEdJVEZJTEVTSEFSRVBXRDogJChnaXRmaWxlc2hhcmUucHdkKQorICAtIHRhc2s6IFB1Ymxpc2hUZXN0UmVzdWx0c0AyCisgICAgZGlzcGxheU5hbWU6ICdQdWJsaXNoIFRlc3QgUmVzdWx0cyAqKi9URVNULSoueG1sJworICAgIGlucHV0czoKKyAgICAgIG1lcmdlVGVzdFJlc3VsdHM6IHRydWUKKyAgICAgIHRlc3RSdW5UaXRsZTogJ3dpbmRvd3MnCisgICAgICBwbGF0Zm9ybTogV2luZG93cworICAgICAgcHVibGlzaFJ1bkF0dGFjaG1lbnRzOiBmYWxzZQorICAgIGNvbmRpdGlvbjogc3VjY2VlZGVkT3JGYWlsZWQoKQorICAtIHRhc2s6IFB1Ymxpc2hCdWlsZEFydGlmYWN0c0AxCisgICAgZGlzcGxheU5hbWU6ICdQdWJsaXNoIHRyYXNoIGRpcmVjdG9yaWVzIG9mIGZhaWxlZCB0ZXN0cycKKyAgICBjb25kaXRpb246IGZhaWxlZCgpCisgICAgaW5wdXRzOgorICAgICAgUGF0aHRvUHVibGlzaDogdC9mYWlsZWQtdGVzdC1hcnRpZmFjdHMKKyAgICAgIEFydGlmYWN0TmFtZTogZmFpbGVkLXRlc3QtYXJ0aWZhY3RzCisKKy0gam9iOiB2c19idWlsZAorICBkaXNwbGF5TmFtZTogVmlzdWFsIFN0dWRpbyBCdWlsZAorICBjb25kaXRpb246IHN1Y2NlZWRlZCgpCisgIHBvb2w6CisgICAgdm1JbWFnZTogd2luZG93cy1sYXRlc3QKKyAgdGltZW91dEluTWludXRlczogMjQwCisgIHN0ZXBzOgorICAtIHBvd2Vyc2hlbGw6IHwKKyAgICAgIGlmICgiJEdJVEZJTEVTSEFSRVBXRCIgLW5lICIiIC1hbmQgIiRHSVRGSUxFU0hBUkVQV0QiIC1uZSAiYCRgKGdpdGZpbGVzaGFyZS5wd2QpIikgeworICAgICAgICBuZXQgdXNlIHM6IFxcZ2l0ZmlsZXNoYXJlLmZpbGUuY29yZS53aW5kb3dzLm5ldFx0ZXN0LWNhY2hlICIkR0lURklMRVNIQVJFUFdEIiAvdXNlcjpBWlVSRVxnaXRmaWxlc2hhcmUgL3BlcnNpc3RlbnQ6bm8KKyAgICAgICAgY21kIC9jIG1rbGluayAvZCAiJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KVx0ZXN0LWNhY2hlIiBTOlwKKyAgICAgIH0KKyAgICBkaXNwbGF5TmFtZTogJ01vdW50IHRlc3QtY2FjaGUnCisgICAgZW52OgorICAgICAgR0lURklMRVNIQVJFUFdEOiAkKGdpdGZpbGVzaGFyZS5wd2QpCisgIC0gcG93ZXJzaGVsbDogfAorICAgICAgJHVybGJhc2UgPSAiaHR0cHM6Ly9kZXYuYXp1cmUuY29tL2dpdC1mb3Itd2luZG93cy9naXQvX2FwaXMvYnVpbGQvYnVpbGRzIgorICAgICAgJGlkID0gKChJbnZva2UtV2ViUmVxdWVzdCAtVXNlQmFzaWNQYXJzaW5nICIke3VybGJhc2V9P2RlZmluaXRpb25zPTIyJnN0YXR1c0ZpbHRlcj1jb21wbGV0ZWQmcmVzdWx0RmlsdGVyPXN1Y2NlZWRlZCZgJHRvcD0xIikuY29udGVudCB8IENvbnZlcnRGcm9tLUpTT04pLnZhbHVlWzBdLmlkCisgICAgICAkZG93bmxvYWRVcmwgPSAoKEludm9rZS1XZWJSZXF1ZXN0IC1Vc2VCYXNpY1BhcnNpbmcgIiR7dXJsYmFzZX0vJGlkL2FydGlmYWN0cyIpLmNvbnRlbnQgfCBDb252ZXJ0RnJvbS1KU09OKS52YWx1ZVsxXS5yZXNvdXJjZS5kb3dubG9hZFVybAorICAgICAgKE5ldy1PYmplY3QgTmV0LldlYkNsaWVudCkuRG93bmxvYWRGaWxlKCRkb3dubG9hZFVybCwiZ2l0LXNkay02NC1taW5pbWFsLnppcCIpCisgICAgICBFeHBhbmQtQXJjaGl2ZSBnaXQtc2RrLTY0LW1pbmltYWwuemlwIC1EZXN0aW5hdGlvblBhdGggLiAtRm9yY2UKKyAgICAgIFJlbW92ZS1JdGVtIGdpdC1zZGstNjQtbWluaW1hbC56aXAKKworICAgICAgIyBMZXQgR2l0IGlnbm9yZSB0aGUgU0RLIGFuZCB0aGUgdGVzdC1jYWNoZQorICAgICAgIi9naXQtc2RrLTY0LW1pbmltYWwvYG4vdGVzdC1jYWNoZS9gbiIgfCBPdXQtRmlsZSAtTm9OZXdMaW5lIC1FbmNvZGluZyBhc2NpaSAtQXBwZW5kICIkKEJ1aWxkLlNvdXJjZXNEaXJlY3RvcnkpXC5naXRcaW5mb1xleGNsdWRlIgorICAgIGRpc3BsYXlOYW1lOiAnRG93bmxvYWQgZ2l0LXNkay02NC1taW5pbWFsJworICAtIHBvd2Vyc2hlbGw6IHwKKyAgICAgICYgZ2l0LXNkay02NC1taW5pbWFsXHVzclxiaW5cYmFzaC5leGUgLWxjIEAiCisgICAgICAgIG1ha2UgTkRFQlVHPTEgREVWRUxPUEVSPTEgdmN4cHJvagorICAgICAgIkAKKyAgICAgIGlmICghJD8pIHsgZXhpdCgxKSB9CisgICAgZGlzcGxheU5hbWU6IEdlbmVyYXRlIFZpc3VhbCBTdHVkaW8gU29sdXRpb24KKyAgICBlbnY6CisgICAgICBIT01FOiAkKEJ1aWxkLlNvdXJjZXNEaXJlY3RvcnkpCisgICAgICBNU1lTVEVNOiBNSU5HVzY0CisgICAgICBERVZFTE9QRVI6IDEKKyAgICAgIE5PX1BFUkw6IDEKKyAgICAgIEdJVF9DT05GSUdfUEFSQU1FVEVSUzogIid1c2VyLm5hbWU9Q0knICd1c2VyLmVtYWlsPWNpQGdpdCciCisgIC0gcG93ZXJzaGVsbDogfAorICAgICAgJHVybGJhc2UgPSAiaHR0cHM6Ly9kZXYuYXp1cmUuY29tL2dpdC9naXQvX2FwaXMvYnVpbGQvYnVpbGRzIgorICAgICAgJGlkID0gKChJbnZva2UtV2ViUmVxdWVzdCAtVXNlQmFzaWNQYXJzaW5nICIke3VybGJhc2V9P2RlZmluaXRpb25zPTkmc3RhdHVzRmlsdGVyPWNvbXBsZXRlZCZyZXN1bHRGaWx0ZXI9c3VjY2VlZGVkJmAkdG9wPTEiKS5jb250ZW50IHwgQ29udmVydEZyb20tSlNPTikudmFsdWVbMF0uaWQKKyAgICAgICRkb3dubG9hZFVybCA9ICgoSW52b2tlLVdlYlJlcXVlc3QgLVVzZUJhc2ljUGFyc2luZyAiJHt1cmxiYXNlfS8kaWQvYXJ0aWZhY3RzIikuY29udGVudCB8IENvbnZlcnRGcm9tLUpTT04pLnZhbHVlWzBdLnJlc291cmNlLmRvd25sb2FkVXJsCisgICAgICAoTmV3LU9iamVjdCBOZXQuV2ViQ2xpZW50KS5Eb3dubG9hZEZpbGUoJGRvd25sb2FkVXJsLCAiY29tcGF0LnppcCIpCisgICAgICBFeHBhbmQtQXJjaGl2ZSBjb21wYXQuemlwIC1EZXN0aW5hdGlvblBhdGggLiAtRm9yY2UKKyAgICAgIFJlbW92ZS1JdGVtIGNvbXBhdC56aXAKKyAgICBkaXNwbGF5TmFtZTogJ0Rvd25sb2FkIHZjcGtnIGFydGlmYWN0cycKKyAgLSB0YXNrOiBNU0J1aWxkQDEKKyAgICBpbnB1dHM6CisgICAgICBzb2x1dGlvbjogZ2l0LnNsbgorICAgICAgcGxhdGZvcm06IHg2NAorICAgICAgY29uZmlndXJhdGlvbjogUmVsZWFzZQorICAgICAgbWF4aW11bUNwdUNvdW50OiA0CisgICAgICBtc2J1aWxkQXJndW1lbnRzOiAvcDpQbGF0Zm9ybVRvb2xzZXQ9djE0MgorICAtIHBvd2Vyc2hlbGw6IHwKKyAgICAgICYgY29tcGF0XHZjYnVpbGRcdmNwa2dfY29weV9kbGxzLmJhdCByZWxlYXNlCisgICAgICBpZiAoISQ/KSB7IGV4aXQoMSkgfQorICAgICAgJiBnaXQtc2RrLTY0LW1pbmltYWxcdXNyXGJpblxiYXNoLmV4ZSAtbGMgQCIKKyAgICAgICAgbWtkaXIgLXAgYXJ0aWZhY3RzICYmCisgICAgICAgIGV2YWwgXCJgJChtYWtlIC1uIGFydGlmYWN0cy10YXIgSU5DTFVERV9ETExTX0lOX0FSVElGQUNUUz1ZZXNQbGVhc2UgQVJUSUZBQ1RTX0RJUkVDVE9SWT1hcnRpZmFjdHMgfCBncmVwIF50YXIpXCIKKyAgICAgICJACisgICAgICBpZiAoISQ/KSB7IGV4aXQoMSkgfQorICAgIGRpc3BsYXlOYW1lOiBCdW5kbGUgYXJ0aWZhY3QgdGFyCisgICAgZW52OgorICAgICAgSE9NRTogJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KQorICAgICAgTVNZU1RFTTogTUlOR1c2NAorICAgICAgREVWRUxPUEVSOiAxCisgICAgICBOT19QRVJMOiAxCisgICAgICBNU1ZDOiAxCisgICAgICBWQ1BLR19ST09UOiAkKEJ1aWxkLlNvdXJjZXNEaXJlY3RvcnkpXGNvbXBhdFx2Y2J1aWxkXHZjcGtnCisgIC0gcG93ZXJzaGVsbDogfAorICAgICAgJHRhZyA9IChJbnZva2UtV2ViUmVxdWVzdCAtVXNlQmFzaWNQYXJzaW5nICJodHRwczovL2dpdGZvcndpbmRvd3Mub3JnL2xhdGVzdC10YWcudHh0IikuY29udGVudAorICAgICAgJHZlcnNpb24gPSAoSW52b2tlLVdlYlJlcXVlc3QgLVVzZUJhc2ljUGFyc2luZyAiaHR0cHM6Ly9naXRmb3J3aW5kb3dzLm9yZy9sYXRlc3QtdmVyc2lvbi50eHQiKS5jb250ZW50CisgICAgICAkdXJsID0gImh0dHBzOi8vZ2l0aHViLmNvbS9naXQtZm9yLXdpbmRvd3MvZ2l0L3JlbGVhc2VzL2Rvd25sb2FkLyR7dGFnfS9Qb3J0YWJsZUdpdC0ke3ZlcnNpb259LTY0LWJpdC43ei5leGUiCisgICAgICAoTmV3LU9iamVjdCBOZXQuV2ViQ2xpZW50KS5Eb3dubG9hZEZpbGUoJHVybCwiUG9ydGFibGVHaXQuZXhlIikKKyAgICAgICYgLlxQb3J0YWJsZUdpdC5leGUgLXkgLW9hcnRpZmFjdHNcUG9ydGFibGVHaXQKKyAgICAgICMgV2FpdCB1bnRpbCBpdCBpcyB1bnBhY2tlZAorICAgICAgd2hpbGUgKC1ub3QgQChSZW1vdmUtSXRlbSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSBQb3J0YWJsZUdpdC5leGU7ICQ/KSkgeyBzbGVlcCAxIH0KKyAgICBkaXNwbGF5TmFtZTogRG93bmxvYWQgJiBleHRyYWN0IHBvcnRhYmxlIEdpdAorICAtIHRhc2s6IFB1Ymxpc2hQaXBlbGluZUFydGlmYWN0QDAKKyAgICBkaXNwbGF5TmFtZTogJ1B1Ymxpc2ggUGlwZWxpbmUgQXJ0aWZhY3Q6IE1TVkMgdGVzdCBhcnRpZmFjdHMnCisgICAgaW5wdXRzOgorICAgICAgYXJ0aWZhY3ROYW1lOiAndnMtYXJ0aWZhY3RzJworICAgICAgdGFyZ2V0UGF0aDogJyQoQnVpbGQuU291cmNlc0RpcmVjdG9yeSlcYXJ0aWZhY3RzJworICAtIHBvd2Vyc2hlbGw6IHwKKyAgICAgIGlmICgiJEdJVEZJTEVTSEFSRVBXRCIgLW5lICIiIC1hbmQgIiRHSVRGSUxFU0hBUkVQV0QiIC1uZSAiYCRgKGdpdGZpbGVzaGFyZS5wd2QpIikgeworICAgICAgICBjbWQgL2Mgcm1kaXIgIiQoQnVpbGQuU291cmNlc0RpcmVjdG9yeSlcdGVzdC1jYWNoZSIKKyAgICAgIH0KKyAgICBkaXNwbGF5TmFtZTogJ1VubW91bnQgdGVzdC1jYWNoZScKKyAgICBjb25kaXRpb246IHRydWUKKyAgICBlbnY6CisgICAgICBHSVRGSUxFU0hBUkVQV0Q6ICQoZ2l0ZmlsZXNoYXJlLnB3ZCkKKworLSBqb2I6IHZzX3Rlc3QKKyAgZGlzcGxheU5hbWU6IFZpc3VhbCBTdHVkaW8gVGVzdAorICBkZXBlbmRzT246IHZzX2J1aWxkCisgIGNvbmRpdGlvbjogc3VjY2VlZGVkKCkKKyAgcG9vbDoKKyAgICB2bUltYWdlOiB3aW5kb3dzLWxhdGVzdAorICB0aW1lb3V0SW5NaW51dGVzOiAyNDAKKyAgc3RyYXRlZ3k6CisgICAgcGFyYWxsZWw6IDEwCisgIHN0ZXBzOgorICAtIHBvd2Vyc2hlbGw6IHwKKyAgICAgIGlmICgiJEdJVEZJTEVTSEFSRVBXRCIgLW5lICIiIC1hbmQgIiRHSVRGSUxFU0hBUkVQV0QiIC1uZSAiYCRgKGdpdGZpbGVzaGFyZS5wd2QpIikgeworICAgICAgICBuZXQgdXNlIHM6IFxcZ2l0ZmlsZXNoYXJlLmZpbGUuY29yZS53aW5kb3dzLm5ldFx0ZXN0LWNhY2hlICIkR0lURklMRVNIQVJFUFdEIiAvdXNlcjpBWlVSRVxnaXRmaWxlc2hhcmUgL3BlcnNpc3RlbnQ6bm8KKyAgICAgICAgY21kIC9jIG1rbGluayAvZCAiJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KVx0ZXN0LWNhY2hlIiBTOlwKKyAgICAgIH0KKyAgICBkaXNwbGF5TmFtZTogJ01vdW50IHRlc3QtY2FjaGUnCisgICAgZW52OgorICAgICAgR0lURklMRVNIQVJFUFdEOiAkKGdpdGZpbGVzaGFyZS5wd2QpCisgIC0gdGFzazogRG93bmxvYWRQaXBlbGluZUFydGlmYWN0QDAKKyAgICBkaXNwbGF5TmFtZTogJ0Rvd25sb2FkIFBpcGVsaW5lIEFydGlmYWN0OiBWUyB0ZXN0IGFydGlmYWN0cycKKyAgICBpbnB1dHM6CisgICAgICBhcnRpZmFjdE5hbWU6ICd2cy1hcnRpZmFjdHMnCisgICAgICB0YXJnZXRQYXRoOiAnJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KScKKyAgLSBwb3dlcnNoZWxsOiB8CisgICAgICAmIFBvcnRhYmxlR2l0XGdpdC1jbWQuZXhlIC0tY29tbWFuZD11c3JcYmluXGJhc2guZXhlIC1sYyBAIgorICAgICAgICB0ZXN0IC1mIGFydGlmYWN0cy50YXIuZ3ogfHwgeworICAgICAgICAgIGVjaG8gTm8gdGVzdCBhcnRpZmFjdHMgZm91bmRcOyBza2lwcGluZyA+JjIKKyAgICAgICAgICBleGl0IDAKKyAgICAgICAgfQorICAgICAgICB0YXIgeGYgYXJ0aWZhY3RzLnRhci5neiB8fCBleGl0IDEKKworICAgICAgICAjIExldCBHaXQgaWdub3JlIHRoZSBTREsgYW5kIHRoZSB0ZXN0LWNhY2hlCisgICAgICAgIHByaW50ZiAnJXNcbicgL1BvcnRhYmxlR2l0LyAvdGVzdC1jYWNoZS8gPj4uZ2l0L2luZm8vZXhjbHVkZQorCisgICAgICAgIGNkIHQgJiYKKyAgICAgICAgUEFUSD1cImAkUFdEL2hlbHBlcjpgJFBBVEhcIiAmJgorICAgICAgICB0ZXN0LXRvb2wuZXhlIHJ1bi1jb21tYW5kIHRlc3RzdWl0ZSAtLWpvYnM9MTAgLVYgLXggLS13cml0ZS1qdW5pdC14bWwgXAorICAgICAgICAgICAgICAgIGAkKHRlc3QtdG9vbC5leGUgcGF0aC11dGlscyBzbGljZS10ZXN0cyBcCisgICAgICAgICAgICAgICAgICAgICAgICBgJFNZU1RFTV9KT0JQT1NJVElPTklOUEhBU0UgYCRTWVNURU1fVE9UQUxKT0JTSU5QSEFTRSB0WzAtOV0qLnNoKQorICAgICAgIkAKKyAgICAgIGlmICghJD8pIHsgZXhpdCgxKSB9CisgICAgZGlzcGxheU5hbWU6ICdUZXN0IChwYXJhbGxlbCknCisgICAgZW52OgorICAgICAgSE9NRTogJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KQorICAgICAgTVNZU1RFTTogTUlOR1c2NAorICAgICAgTk9fU1ZOX1RFU1RTOiAxCisgICAgICBHSVRfVEVTVF9TS0lQX1JFQkFTRV9QOiAxCisgIC0gcG93ZXJzaGVsbDogfAorICAgICAgaWYgKCIkR0lURklMRVNIQVJFUFdEIiAtbmUgIiIgLWFuZCAiJEdJVEZJTEVTSEFSRVBXRCIgLW5lICJgJGAoZ2l0ZmlsZXNoYXJlLnB3ZCkiKSB7CisgICAgICAgIGNtZCAvYyBybWRpciAiJChCdWlsZC5Tb3VyY2VzRGlyZWN0b3J5KVx0ZXN0LWNhY2hlIgorICAgICAgfQorICAgIGRpc3BsYXlOYW1lOiAnVW5tb3VudCB0ZXN0LWNhY2hlJworICAgIGNvbmRpdGlvbjogdHJ1ZQorICAgIGVudjoKKyAgICAgIEdJVEZJTEVTSEFSRVBXRDogJChnaXRmaWxlc2hhcmUucHdkKQorICAtIHRhc2s6IFB1Ymxpc2hUZXN0UmVzdWx0c0AyCisgICAgZGlzcGxheU5hbWU6ICdQdWJsaXNoIFRlc3QgUmVzdWx0cyAqKi9URVNULSoueG1sJworICAgIGlucHV0czoKKyAgICAgIG1lcmdlVGVzdFJlc3VsdHM6IHRydWUKKyAgICAgIHRlc3RSdW5UaXRsZTogJ3ZzJworICAgICAgcGxhdGZvcm06IFdpbmRvd3MKKyAgICAgIHB1Ymxpc2hSdW5BdHRhY2htZW50czogZmFsc2UKKyAgICBjb25kaXRpb246IHN1Y2NlZWRlZE9yRmFpbGVkKCkKKyAgLSB0YXNrOiBQdWJsaXNoQnVpbGRBcnRpZmFjdHNAMQorICAgIGRpc3BsYXlOYW1lOiAnUHVibGlzaCB0cmFzaCBkaXJlY3RvcmllcyBvZiBmYWlsZWQgdGVzdHMnCisgICAgY29uZGl0aW9uOiBmYWlsZWQoKQorICAgIGlucHV0czoKKyAgICAgIFBhdGh0b1B1Ymxpc2g6IHQvZmFpbGVkLXRlc3QtYXJ0aWZhY3RzCisgICAgICBBcnRpZmFjdE5hbWU6IGZhaWxlZC12cy10ZXN0LWFydGlmYWN0cworCistIGpvYjogbGludXhfY2xhbmcKKyAgZGlzcGxheU5hbWU6IGxpbnV4LWNsYW5nCisgIGNvbmRpdGlvbjogc3VjY2VlZGVkKCkKKyAgcG9vbDoKKyAgICB2bUltYWdlOiB1YnVudHUtbGF0ZXN0CisgIHN0ZXBzOgorICAtIGJhc2g6IHwKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCBjaS9tb3VudC1maWxlc2hhcmUuc2ggLy9naXRmaWxlc2hhcmUuZmlsZS5jb3JlLndpbmRvd3MubmV0L3Rlc3QtY2FjaGUgZ2l0ZmlsZXNoYXJlICIkR0lURklMRVNIQVJFUFdEIiAiJEhPTUUvdGVzdC1jYWNoZSIgfHwgZXhpdCAxCisKKyAgICAgICBzdWRvIGFwdC1nZXQgdXBkYXRlICYmCisgICAgICAgc3VkbyBhcHQtZ2V0IC15IGluc3RhbGwgZ2l0IGdjYyBtYWtlIGxpYnNzbC1kZXYgbGliY3VybDQtb3BlbnNzbC1kZXYgbGliZXhwYXQtZGV2IHRjbCB0ayBnZXR0ZXh0IGdpdC1lbWFpbCB6bGliMWctZGV2IGFwYWNoZTItYmluICYmCisKKyAgICAgICBleHBvcnQgQ0M9Y2xhbmcgfHwgZXhpdCAxCisKKyAgICAgICBjaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaCB8fCBleGl0IDEKKyAgICAgICBjaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoIHx8IHsKKyAgICAgICAgICAgY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaAorICAgICAgICAgICBleGl0IDEKKyAgICAgICB9CisKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCBzdWRvIHVtb3VudCAiJEhPTUUvdGVzdC1jYWNoZSIgfHwgZXhpdCAxCisgICAgZGlzcGxheU5hbWU6ICdjaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoJworICAgIGVudjoKKyAgICAgIEdJVEZJTEVTSEFSRVBXRDogJChnaXRmaWxlc2hhcmUucHdkKQorICAtIHRhc2s6IFB1Ymxpc2hUZXN0UmVzdWx0c0AyCisgICAgZGlzcGxheU5hbWU6ICdQdWJsaXNoIFRlc3QgUmVzdWx0cyAqKi9URVNULSoueG1sJworICAgIGlucHV0czoKKyAgICAgIG1lcmdlVGVzdFJlc3VsdHM6IHRydWUKKyAgICAgIHRlc3RSdW5UaXRsZTogJ2xpbnV4LWNsYW5nJworICAgICAgcGxhdGZvcm06IExpbnV4CisgICAgICBwdWJsaXNoUnVuQXR0YWNobWVudHM6IGZhbHNlCisgICAgY29uZGl0aW9uOiBzdWNjZWVkZWRPckZhaWxlZCgpCisgIC0gdGFzazogUHVibGlzaEJ1aWxkQXJ0aWZhY3RzQDEKKyAgICBkaXNwbGF5TmFtZTogJ1B1Ymxpc2ggdHJhc2ggZGlyZWN0b3JpZXMgb2YgZmFpbGVkIHRlc3RzJworICAgIGNvbmRpdGlvbjogZmFpbGVkKCkKKyAgICBpbnB1dHM6CisgICAgICBQYXRodG9QdWJsaXNoOiB0L2ZhaWxlZC10ZXN0LWFydGlmYWN0cworICAgICAgQXJ0aWZhY3ROYW1lOiBmYWlsZWQtdGVzdC1hcnRpZmFjdHMKKworLSBqb2I6IGxpbnV4X2djYworICBkaXNwbGF5TmFtZTogbGludXgtZ2NjCisgIGNvbmRpdGlvbjogc3VjY2VlZGVkKCkKKyAgcG9vbDoKKyAgICB2bUltYWdlOiB1YnVudHUtbGF0ZXN0CisgIHN0ZXBzOgorICAtIGJhc2g6IHwKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCBjaS9tb3VudC1maWxlc2hhcmUuc2ggLy9naXRmaWxlc2hhcmUuZmlsZS5jb3JlLndpbmRvd3MubmV0L3Rlc3QtY2FjaGUgZ2l0ZmlsZXNoYXJlICIkR0lURklMRVNIQVJFUFdEIiAiJEhPTUUvdGVzdC1jYWNoZSIgfHwgZXhpdCAxCisKKyAgICAgICBzdWRvIGFkZC1hcHQtcmVwb3NpdG9yeSBwcGE6dWJ1bnR1LXRvb2xjaGFpbi1yL3Rlc3QgJiYKKyAgICAgICBzdWRvIGFwdC1nZXQgdXBkYXRlICYmCisgICAgICAgc3VkbyBhcHQtZ2V0IC15IGluc3RhbGwgZ2l0IGdjYyBtYWtlIGxpYnNzbC1kZXYgbGliY3VybDQtb3BlbnNzbC1kZXYgbGliZXhwYXQtZGV2IHRjbCB0ayBnZXR0ZXh0IGdpdC1lbWFpbCB6bGliMWctZGV2IGFwYWNoZTIgbGFuZ3VhZ2UtcGFjay1pcyBnaXQtc3ZuIGdjYy04IHx8IGV4aXQgMQorCisgICAgICAgY2kvaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2ggfHwgZXhpdCAxCisgICAgICAgY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaCB8fCB7CisgICAgICAgICAgIGNpL3ByaW50LXRlc3QtZmFpbHVyZXMuc2gKKyAgICAgICAgICAgZXhpdCAxCisgICAgICAgfQorCisgICAgICAgdGVzdCAiJEdJVEZJTEVTSEFSRVBXRCIgPSAnJChnaXRmaWxlc2hhcmUucHdkKScgfHwgc3VkbyB1bW91bnQgIiRIT01FL3Rlc3QtY2FjaGUiIHx8IGV4aXQgMQorICAgIGRpc3BsYXlOYW1lOiAnY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaCcKKyAgICBlbnY6CisgICAgICBHSVRGSUxFU0hBUkVQV0Q6ICQoZ2l0ZmlsZXNoYXJlLnB3ZCkKKyAgLSB0YXNrOiBQdWJsaXNoVGVzdFJlc3VsdHNAMgorICAgIGRpc3BsYXlOYW1lOiAnUHVibGlzaCBUZXN0IFJlc3VsdHMgKiovVEVTVC0qLnhtbCcKKyAgICBpbnB1dHM6CisgICAgICBtZXJnZVRlc3RSZXN1bHRzOiB0cnVlCisgICAgICB0ZXN0UnVuVGl0bGU6ICdsaW51eC1nY2MnCisgICAgICBwbGF0Zm9ybTogTGludXgKKyAgICAgIHB1Ymxpc2hSdW5BdHRhY2htZW50czogZmFsc2UKKyAgICBjb25kaXRpb246IHN1Y2NlZWRlZE9yRmFpbGVkKCkKKyAgLSB0YXNrOiBQdWJsaXNoQnVpbGRBcnRpZmFjdHNAMQorICAgIGRpc3BsYXlOYW1lOiAnUHVibGlzaCB0cmFzaCBkaXJlY3RvcmllcyBvZiBmYWlsZWQgdGVzdHMnCisgICAgY29uZGl0aW9uOiBmYWlsZWQoKQorICAgIGlucHV0czoKKyAgICAgIFBhdGh0b1B1Ymxpc2g6IHQvZmFpbGVkLXRlc3QtYXJ0aWZhY3RzCisgICAgICBBcnRpZmFjdE5hbWU6IGZhaWxlZC10ZXN0LWFydGlmYWN0cworCistIGpvYjogb3N4X2NsYW5nCisgIGRpc3BsYXlOYW1lOiBvc3gtY2xhbmcKKyAgY29uZGl0aW9uOiBzdWNjZWVkZWQoKQorICBwb29sOgorICAgIHZtSW1hZ2U6IG1hY09TLWxhdGVzdAorICBzdGVwczoKKyAgLSBiYXNoOiB8CisgICAgICAgdGVzdCAiJEdJVEZJTEVTSEFSRVBXRCIgPSAnJChnaXRmaWxlc2hhcmUucHdkKScgfHwgY2kvbW91bnQtZmlsZXNoYXJlLnNoIC8vZ2l0ZmlsZXNoYXJlLmZpbGUuY29yZS53aW5kb3dzLm5ldC90ZXN0LWNhY2hlIGdpdGZpbGVzaGFyZSAiJEdJVEZJTEVTSEFSRVBXRCIgIiRIT01FL3Rlc3QtY2FjaGUiIHx8IGV4aXQgMQorCisgICAgICAgZXhwb3J0IENDPWNsYW5nCisKKyAgICAgICBjaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaCB8fCBleGl0IDEKKyAgICAgICBjaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoIHx8IHsKKyAgICAgICAgICAgY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaAorICAgICAgICAgICBleGl0IDEKKyAgICAgICB9CisKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCB1bW91bnQgIiRIT01FL3Rlc3QtY2FjaGUiIHx8IGV4aXQgMQorICAgIGRpc3BsYXlOYW1lOiAnY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaCcKKyAgICBlbnY6CisgICAgICBHSVRGSUxFU0hBUkVQV0Q6ICQoZ2l0ZmlsZXNoYXJlLnB3ZCkKKyAgLSB0YXNrOiBQdWJsaXNoVGVzdFJlc3VsdHNAMgorICAgIGRpc3BsYXlOYW1lOiAnUHVibGlzaCBUZXN0IFJlc3VsdHMgKiovVEVTVC0qLnhtbCcKKyAgICBpbnB1dHM6CisgICAgICBtZXJnZVRlc3RSZXN1bHRzOiB0cnVlCisgICAgICB0ZXN0UnVuVGl0bGU6ICdvc3gtY2xhbmcnCisgICAgICBwbGF0Zm9ybTogbWFjT1MKKyAgICAgIHB1Ymxpc2hSdW5BdHRhY2htZW50czogZmFsc2UKKyAgICBjb25kaXRpb246IHN1Y2NlZWRlZE9yRmFpbGVkKCkKKyAgLSB0YXNrOiBQdWJsaXNoQnVpbGRBcnRpZmFjdHNAMQorICAgIGRpc3BsYXlOYW1lOiAnUHVibGlzaCB0cmFzaCBkaXJlY3RvcmllcyBvZiBmYWlsZWQgdGVzdHMnCisgICAgY29uZGl0aW9uOiBmYWlsZWQoKQorICAgIGlucHV0czoKKyAgICAgIFBhdGh0b1B1Ymxpc2g6IHQvZmFpbGVkLXRlc3QtYXJ0aWZhY3RzCisgICAgICBBcnRpZmFjdE5hbWU6IGZhaWxlZC10ZXN0LWFydGlmYWN0cworCistIGpvYjogb3N4X2djYworICBkaXNwbGF5TmFtZTogb3N4LWdjYworICBjb25kaXRpb246IHN1Y2NlZWRlZCgpCisgIHBvb2w6CisgICAgdm1JbWFnZTogbWFjT1MtbGF0ZXN0CisgIHN0ZXBzOgorICAtIGJhc2g6IHwKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCBjaS9tb3VudC1maWxlc2hhcmUuc2ggLy9naXRmaWxlc2hhcmUuZmlsZS5jb3JlLndpbmRvd3MubmV0L3Rlc3QtY2FjaGUgZ2l0ZmlsZXNoYXJlICIkR0lURklMRVNIQVJFUFdEIiAiJEhPTUUvdGVzdC1jYWNoZSIgfHwgZXhpdCAxCisKKyAgICAgICBjaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaCB8fCBleGl0IDEKKyAgICAgICBjaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoIHx8IHsKKyAgICAgICAgICAgY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaAorICAgICAgICAgICBleGl0IDEKKyAgICAgICB9CisKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCB1bW91bnQgIiRIT01FL3Rlc3QtY2FjaGUiIHx8IGV4aXQgMQorICAgIGRpc3BsYXlOYW1lOiAnY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaCcKKyAgICBlbnY6CisgICAgICBHSVRGSUxFU0hBUkVQV0Q6ICQoZ2l0ZmlsZXNoYXJlLnB3ZCkKKyAgLSB0YXNrOiBQdWJsaXNoVGVzdFJlc3VsdHNAMgorICAgIGRpc3BsYXlOYW1lOiAnUHVibGlzaCBUZXN0IFJlc3VsdHMgKiovVEVTVC0qLnhtbCcKKyAgICBpbnB1dHM6CisgICAgICBtZXJnZVRlc3RSZXN1bHRzOiB0cnVlCisgICAgICB0ZXN0UnVuVGl0bGU6ICdvc3gtZ2NjJworICAgICAgcGxhdGZvcm06IG1hY09TCisgICAgICBwdWJsaXNoUnVuQXR0YWNobWVudHM6IGZhbHNlCisgICAgY29uZGl0aW9uOiBzdWNjZWVkZWRPckZhaWxlZCgpCisgIC0gdGFzazogUHVibGlzaEJ1aWxkQXJ0aWZhY3RzQDEKKyAgICBkaXNwbGF5TmFtZTogJ1B1Ymxpc2ggdHJhc2ggZGlyZWN0b3JpZXMgb2YgZmFpbGVkIHRlc3RzJworICAgIGNvbmRpdGlvbjogZmFpbGVkKCkKKyAgICBpbnB1dHM6CisgICAgICBQYXRodG9QdWJsaXNoOiB0L2ZhaWxlZC10ZXN0LWFydGlmYWN0cworICAgICAgQXJ0aWZhY3ROYW1lOiBmYWlsZWQtdGVzdC1hcnRpZmFjdHMKKworLSBqb2I6IGdldHRleHRfcG9pc29uCisgIGRpc3BsYXlOYW1lOiBHRVRURVhUX1BPSVNPTgorICBjb25kaXRpb246IHN1Y2NlZWRlZCgpCisgIHBvb2w6CisgICAgdm1JbWFnZTogdWJ1bnR1LWxhdGVzdAorICBzdGVwczoKKyAgLSBiYXNoOiB8CisgICAgICAgdGVzdCAiJEdJVEZJTEVTSEFSRVBXRCIgPSAnJChnaXRmaWxlc2hhcmUucHdkKScgfHwgY2kvbW91bnQtZmlsZXNoYXJlLnNoIC8vZ2l0ZmlsZXNoYXJlLmZpbGUuY29yZS53aW5kb3dzLm5ldC90ZXN0LWNhY2hlIGdpdGZpbGVzaGFyZSAiJEdJVEZJTEVTSEFSRVBXRCIgIiRIT01FL3Rlc3QtY2FjaGUiIHx8IGV4aXQgMQorCisgICAgICAgc3VkbyBhcHQtZ2V0IHVwZGF0ZSAmJgorICAgICAgIHN1ZG8gYXB0LWdldCAteSBpbnN0YWxsIGdpdCBnY2MgbWFrZSBsaWJzc2wtZGV2IGxpYmN1cmw0LW9wZW5zc2wtZGV2IGxpYmV4cGF0LWRldiB0Y2wgdGsgZ2V0dGV4dCBnaXQtZW1haWwgemxpYjFnLWRldiAmJgorCisgICAgICAgZXhwb3J0IGpvYm5hbWU9R0VUVEVYVF9QT0lTT04gfHwgZXhpdCAxCisKKyAgICAgICBjaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoIHx8IHsKKyAgICAgICAgICAgY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaAorICAgICAgICAgICBleGl0IDEKKyAgICAgICB9CisKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCBzdWRvIHVtb3VudCAiJEhPTUUvdGVzdC1jYWNoZSIgfHwgZXhpdCAxCisgICAgZGlzcGxheU5hbWU6ICdjaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoJworICAgIGVudjoKKyAgICAgIEdJVEZJTEVTSEFSRVBXRDogJChnaXRmaWxlc2hhcmUucHdkKQorICAtIHRhc2s6IFB1Ymxpc2hUZXN0UmVzdWx0c0AyCisgICAgZGlzcGxheU5hbWU6ICdQdWJsaXNoIFRlc3QgUmVzdWx0cyAqKi9URVNULSoueG1sJworICAgIGlucHV0czoKKyAgICAgIG1lcmdlVGVzdFJlc3VsdHM6IHRydWUKKyAgICAgIHRlc3RSdW5UaXRsZTogJ2dldHRleHQtcG9pc29uJworICAgICAgcGxhdGZvcm06IExpbnV4CisgICAgICBwdWJsaXNoUnVuQXR0YWNobWVudHM6IGZhbHNlCisgICAgY29uZGl0aW9uOiBzdWNjZWVkZWRPckZhaWxlZCgpCisgIC0gdGFzazogUHVibGlzaEJ1aWxkQXJ0aWZhY3RzQDEKKyAgICBkaXNwbGF5TmFtZTogJ1B1Ymxpc2ggdHJhc2ggZGlyZWN0b3JpZXMgb2YgZmFpbGVkIHRlc3RzJworICAgIGNvbmRpdGlvbjogZmFpbGVkKCkKKyAgICBpbnB1dHM6CisgICAgICBQYXRodG9QdWJsaXNoOiB0L2ZhaWxlZC10ZXN0LWFydGlmYWN0cworICAgICAgQXJ0aWZhY3ROYW1lOiBmYWlsZWQtdGVzdC1hcnRpZmFjdHMKKworLSBqb2I6IGxpbnV4MzIKKyAgZGlzcGxheU5hbWU6IExpbnV4MzIKKyAgY29uZGl0aW9uOiBzdWNjZWVkZWQoKQorICBwb29sOgorICAgIHZtSW1hZ2U6IHVidW50dS1sYXRlc3QKKyAgc3RlcHM6CisgIC0gYmFzaDogfAorICAgICAgIHRlc3QgIiRHSVRGSUxFU0hBUkVQV0QiID0gJyQoZ2l0ZmlsZXNoYXJlLnB3ZCknIHx8IGNpL21vdW50LWZpbGVzaGFyZS5zaCAvL2dpdGZpbGVzaGFyZS5maWxlLmNvcmUud2luZG93cy5uZXQvdGVzdC1jYWNoZSBnaXRmaWxlc2hhcmUgIiRHSVRGSUxFU0hBUkVQV0QiICIkSE9NRS90ZXN0LWNhY2hlIiB8fCBleGl0IDEKKworICAgICAgIHJlcz0wCisgICAgICAgc3VkbyBBR0VOVF9PUz0iJEFHRU5UX09TIiBCVUlMRF9CVUlMRE5VTUJFUj0iJEJVSUxEX0JVSUxETlVNQkVSIiBCVUlMRF9SRVBPU0lUT1JZX1VSST0iJEJVSUxEX1JFUE9TSVRPUllfVVJJIiBCVUlMRF9TT1VSQ0VCUkFOQ0g9IiRCVUlMRF9TT1VSQ0VCUkFOQ0giIEJVSUxEX1NPVVJDRVZFUlNJT049IiRCVUlMRF9TT1VSQ0VWRVJTSU9OIiBTWVNURU1fUEhBU0VOQU1FPSIkU1lTVEVNX1BIQVNFTkFNRSIgU1lTVEVNX1RBU0tERUZJTklUSU9OU1VSST0iJFNZU1RFTV9UQVNLREVGSU5JVElPTlNVUkkiIFNZU1RFTV9URUFNUFJPSkVDVD0iJFNZU1RFTV9URUFNUFJPSkVDVCIgQ0M9JENDIE1BS0VGTEFHUz0iJE1BS0VGTEFHUyIgYmFzaCAtbHhjIGNpL3J1bi1saW51eDMyLWRvY2tlci5zaCB8fCByZXM9MQorCisgICAgICAgc3VkbyBjaG1vZCBhK3IgdC9vdXQvVEVTVC0qLnhtbAorICAgICAgIHRlc3QgISAtZCB0L2ZhaWxlZC10ZXN0LWFydGlmYWN0cyB8fCBzdWRvIGNobW9kIGErciB0L2ZhaWxlZC10ZXN0LWFydGlmYWN0cworCisgICAgICAgdGVzdCAiJEdJVEZJTEVTSEFSRVBXRCIgPSAnJChnaXRmaWxlc2hhcmUucHdkKScgfHwgc3VkbyB1bW91bnQgIiRIT01FL3Rlc3QtY2FjaGUiIHx8IHJlcz0xCisgICAgICAgZXhpdCAkcmVzCisgICAgZGlzcGxheU5hbWU6ICdjaS9ydW4tbGludXgzMi1kb2NrZXIuc2gnCisgICAgZW52OgorICAgICAgR0lURklMRVNIQVJFUFdEOiAkKGdpdGZpbGVzaGFyZS5wd2QpCisgIC0gdGFzazogUHVibGlzaFRlc3RSZXN1bHRzQDIKKyAgICBkaXNwbGF5TmFtZTogJ1B1Ymxpc2ggVGVzdCBSZXN1bHRzICoqL1RFU1QtKi54bWwnCisgICAgaW5wdXRzOgorICAgICAgbWVyZ2VUZXN0UmVzdWx0czogdHJ1ZQorICAgICAgdGVzdFJ1blRpdGxlOiAnbGludXgzMicKKyAgICAgIHBsYXRmb3JtOiBMaW51eAorICAgICAgcHVibGlzaFJ1bkF0dGFjaG1lbnRzOiBmYWxzZQorICAgIGNvbmRpdGlvbjogc3VjY2VlZGVkT3JGYWlsZWQoKQorICAtIHRhc2s6IFB1Ymxpc2hCdWlsZEFydGlmYWN0c0AxCisgICAgZGlzcGxheU5hbWU6ICdQdWJsaXNoIHRyYXNoIGRpcmVjdG9yaWVzIG9mIGZhaWxlZCB0ZXN0cycKKyAgICBjb25kaXRpb246IGZhaWxlZCgpCisgICAgaW5wdXRzOgorICAgICAgUGF0aHRvUHVibGlzaDogdC9mYWlsZWQtdGVzdC1hcnRpZmFjdHMKKyAgICAgIEFydGlmYWN0TmFtZTogZmFpbGVkLXRlc3QtYXJ0aWZhY3RzCisKKy0gam9iOiBzdGF0aWNfYW5hbHlzaXMKKyAgZGlzcGxheU5hbWU6IFN0YXRpY0FuYWx5c2lzCisgIGNvbmRpdGlvbjogc3VjY2VlZGVkKCkKKyAgcG9vbDoKKyAgICB2bUltYWdlOiB1YnVudHUtbGF0ZXN0CisgIHN0ZXBzOgorICAtIGJhc2g6IHwKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCBjaS9tb3VudC1maWxlc2hhcmUuc2ggLy9naXRmaWxlc2hhcmUuZmlsZS5jb3JlLndpbmRvd3MubmV0L3Rlc3QtY2FjaGUgZ2l0ZmlsZXNoYXJlICIkR0lURklMRVNIQVJFUFdEIiAiJEhPTUUvdGVzdC1jYWNoZSIgfHwgZXhpdCAxCisKKyAgICAgICBzdWRvIGFwdC1nZXQgdXBkYXRlICYmCisgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgLXkgY29jY2luZWxsZSBsaWJjdXJsNC1vcGVuc3NsLWRldiBsaWJzc2wtZGV2IGxpYmV4cGF0LWRldiBnZXR0ZXh0ICYmCisKKyAgICAgICBleHBvcnQgam9ibmFtZT1TdGF0aWNBbmFseXNpcyAmJgorCisgICAgICAgY2kvcnVuLXN0YXRpYy1hbmFseXNpcy5zaCB8fCBleGl0IDEKKworICAgICAgIHRlc3QgIiRHSVRGSUxFU0hBUkVQV0QiID0gJyQoZ2l0ZmlsZXNoYXJlLnB3ZCknIHx8IHN1ZG8gdW1vdW50ICIkSE9NRS90ZXN0LWNhY2hlIiB8fCBleGl0IDEKKyAgICBkaXNwbGF5TmFtZTogJ2NpL3J1bi1zdGF0aWMtYW5hbHlzaXMuc2gnCisgICAgZW52OgorICAgICAgR0lURklMRVNIQVJFUFdEOiAkKGdpdGZpbGVzaGFyZS5wd2QpCisKKy0gam9iOiBkb2N1bWVudGF0aW9uCisgIGRpc3BsYXlOYW1lOiBEb2N1bWVudGF0aW9uCisgIGNvbmRpdGlvbjogc3VjY2VlZGVkKCkKKyAgcG9vbDoKKyAgICB2bUltYWdlOiB1YnVudHUtbGF0ZXN0CisgIHN0ZXBzOgorICAtIGJhc2g6IHwKKyAgICAgICB0ZXN0ICIkR0lURklMRVNIQVJFUFdEIiA9ICckKGdpdGZpbGVzaGFyZS5wd2QpJyB8fCBjaS9tb3VudC1maWxlc2hhcmUuc2ggLy9naXRmaWxlc2hhcmUuZmlsZS5jb3JlLndpbmRvd3MubmV0L3Rlc3QtY2FjaGUgZ2l0ZmlsZXNoYXJlICIkR0lURklMRVNIQVJFUFdEIiAiJEhPTUUvdGVzdC1jYWNoZSIgfHwgZXhpdCAxCisKKyAgICAgICBzdWRvIGFwdC1nZXQgdXBkYXRlICYmCisgICAgICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgLXkgYXNjaWlkb2MgeG1sdG8gYXNjaWlkb2N0b3IgZG9jYm9vay14c2wtbnMgJiYKKworICAgICAgIGV4cG9ydCBBTFJFQURZX0hBVkVfQVNDSUlET0NUT1I9eWVzLiAmJgorICAgICAgIGV4cG9ydCBqb2JuYW1lPURvY3VtZW50YXRpb24gJiYKKworICAgICAgIGNpL3Rlc3QtZG9jdW1lbnRhdGlvbi5zaCB8fCBleGl0IDEKKworICAgICAgIHRlc3QgIiRHSVRGSUxFU0hBUkVQV0QiID0gJyQoZ2l0ZmlsZXNoYXJlLnB3ZCknIHx8IHN1ZG8gdW1vdW50ICIkSE9NRS90ZXN0LWNhY2hlIiB8fCBleGl0IDEKKyAgICBkaXNwbGF5TmFtZTogJ2NpL3Rlc3QtZG9jdW1lbnRhdGlvbi5zaCcKKyAgICBlbnY6CisgICAgICBHSVRGSUxFU0hBUkVQV0Q6ICQoZ2l0ZmlsZXNoYXJlLnB3ZCkKZGlmZiAtLWdpdCBhL2Jhbm5lZC5oIGIvYmFubmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhMThkNAotLS0gL2Rldi9udWxsCisrKyBiL2Jhbm5lZC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgQkFOTkVEX0gKKyNkZWZpbmUgQkFOTkVEX0gKKworLyoKKyAqIFRoaXMgaGVhZGVyIGxpc3RzIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBiYW5uZWQgZnJvbSBvdXIgY29kZSBiYXNlLAorICogYmVjYXVzZSB0aGV5J3JlIHRvbyBlYXN5IHRvIG1pc3VzZSAoYW5kIGV2ZW4gaWYgdXNlZCBjb3JyZWN0bHksCisgKiBjb21wbGljYXRlIGF1ZGl0cykuIEluY2x1ZGluZyB0aGlzIGhlYWRlciB0dXJucyB0aGVtIGludG8gY29tcGlsZS10aW1lCisgKiBlcnJvcnMuCisgKi8KKworI2RlZmluZSBCQU5ORUQoZnVuYykgc29ycnlfIyNmdW5jIyNfaXNfYV9iYW5uZWRfZnVuY3Rpb24KKworI3VuZGVmIHN0cmNweQorI2RlZmluZSBzdHJjcHkoeCx5KSBCQU5ORUQoc3RyY3B5KQorI3VuZGVmIHN0cmNhdAorI2RlZmluZSBzdHJjYXQoeCx5KSBCQU5ORUQoc3RyY2F0KQorI3VuZGVmIHN0cm5jcHkKKyNkZWZpbmUgc3RybmNweSh4LHksbikgQkFOTkVEKHN0cm5jcHkpCisjdW5kZWYgc3RybmNhdAorI2RlZmluZSBzdHJuY2F0KHgseSxuKSBCQU5ORUQoc3RybmNhdCkKKworI3VuZGVmIHNwcmludGYKKyN1bmRlZiB2c3ByaW50ZgorI2lmZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCisjZGVmaW5lIHNwcmludGYoLi4uKSBCQU5ORUQoc3ByaW50ZikKKyNkZWZpbmUgdnNwcmludGYoLi4uKSBCQU5ORUQodnNwcmludGYpCisjZWxzZQorI2RlZmluZSBzcHJpbnRmKGJ1ZixmbXQsYXJnKSBCQU5ORUQoc3ByaW50ZikKKyNkZWZpbmUgdnNwcmludGYoYnVmLGZtdCxhcmcpIEJBTk5FRCh2c3ByaW50ZikKKyNlbmRpZgorCisjZW5kaWYgLyogQkFOTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2Jhc2U4NS5jIGIvYmFzZTg1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNjAxZQotLS0gL2Rldi9udWxsCisrKyBiL2Jhc2U4NS5jCkBAIC0wLDAgKzEsMTMyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworI3VuZGVmIERFQlVHXzg1CisKKyNpZmRlZiBERUJVR184NQorI2RlZmluZSBzYXkoYSkgZnByaW50ZihzdGRlcnIsIGEpCisjZGVmaW5lIHNheTEoYSxiKSBmcHJpbnRmKHN0ZGVyciwgYSwgYikKKyNkZWZpbmUgc2F5MihhLGIsYykgZnByaW50ZihzdGRlcnIsIGEsIGIsIGMpCisjZWxzZQorI2RlZmluZSBzYXkoYSkgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZGVmaW5lIHNheTEoYSxiKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2F5MihhLGIsYykgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgZW44NVtdID0geworCScwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKKwknQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsCisJJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLAorCSdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsCisJJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLAorCSdrJywgJ2wnLCAnbScsICduJywgJ28nLCAncCcsICdxJywgJ3InLCAncycsICd0JywKKwkndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLAorCSchJywgJyMnLCAnJCcsICclJywgJyYnLCAnKCcsICcpJywgJyonLCAnKycsICctJywKKwknOycsICc8JywgJz0nLCAnPicsICc/JywgJ0AnLCAnXicsICdfJywJJ2AnLCAneycsCisJJ3wnLCAnfScsICd+JworfTsKKworc3RhdGljIGNoYXIgZGU4NVsyNTZdOworc3RhdGljIHZvaWQgcHJlcF9iYXNlODUodm9pZCkKK3sKKwlpbnQgaTsKKwlpZiAoZGU4NVsnWiddKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW44NSk7IGkrKykgeworCQlpbnQgY2ggPSBlbjg1W2ldOworCQlkZTg1W2NoXSA9IGkgKyAxOworCX0KK30KKworaW50IGRlY29kZV84NShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKK3sKKwlwcmVwX2Jhc2U4NSgpOworCisJc2F5MigiZGVjb2RlIDg1IDwlLipzPiIsIGxlbiAvIDQgKiA1LCBidWZmZXIpOworCXdoaWxlIChsZW4pIHsKKwkJdW5zaWduZWQgYWNjID0gMDsKKwkJaW50IGRlLCBjbnQgPSA0OworCQl1bnNpZ25lZCBjaGFyIGNoOworCQlkbyB7CisJCQljaCA9ICpidWZmZXIrKzsKKwkJCWRlID0gZGU4NVtjaF07CisJCQlpZiAoLS1kZSA8IDApCisJCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGJhc2U4NSBhbHBoYWJldCAlYyIsIGNoKTsKKwkJCWFjYyA9IGFjYyAqIDg1ICsgZGU7CisJCX0gd2hpbGUgKC0tY250KTsKKwkJY2ggPSAqYnVmZmVyKys7CisJCWRlID0gZGU4NVtjaF07CisJCWlmICgtLWRlIDwgMCkKKwkJCXJldHVybiBlcnJvcigiaW52YWxpZCBiYXNlODUgYWxwaGFiZXQgJWMiLCBjaCk7CisJCS8qIERldGVjdCBvdmVyZmxvdy4gKi8KKwkJaWYgKDB4ZmZmZmZmZmYgLyA4NSA8IGFjYyB8fAorCQkgICAgMHhmZmZmZmZmZiAtIGRlIDwgKGFjYyAqPSA4NSkpCisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgYmFzZTg1IHNlcXVlbmNlICUuNXMiLCBidWZmZXItNSk7CisJCWFjYyArPSBkZTsKKwkJc2F5MSgiICUwOHgiLCBhY2MpOworCisJCWNudCA9IChsZW4gPCA0KSA/IGxlbiA6IDQ7CisJCWxlbiAtPSBjbnQ7CisJCWRvIHsKKwkJCWFjYyA9IChhY2MgPDwgOCkgfCAoYWNjID4+IDI0KTsKKwkJCSpkc3QrKyA9IGFjYzsKKwkJfSB3aGlsZSAoLS1jbnQpOworCX0KKwlzYXkoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBlbmNvZGVfODUoY2hhciAqYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYnl0ZXMpCit7CisJc2F5KCJlbmNvZGUgODUiKTsKKwl3aGlsZSAoYnl0ZXMpIHsKKwkJdW5zaWduZWQgYWNjID0gMDsKKwkJaW50IGNudDsKKwkJZm9yIChjbnQgPSAyNDsgY250ID49IDA7IGNudCAtPSA4KSB7CisJCQl1bnNpZ25lZCBjaCA9ICpkYXRhKys7CisJCQlhY2MgfD0gY2ggPDwgY250OworCQkJaWYgKC0tYnl0ZXMgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQlzYXkxKCIgJTA4eCIsIGFjYyk7CisJCWZvciAoY250ID0gNDsgY250ID49IDA7IGNudC0tKSB7CisJCQlpbnQgdmFsID0gYWNjICUgODU7CisJCQlhY2MgLz0gODU7CisJCQlidWZbY250XSA9IGVuODVbdmFsXTsKKwkJfQorCQlidWYgKz0gNTsKKwl9CisJc2F5KCJcbiIpOworCisJKmJ1ZiA9IDA7Cit9CisKKyNpZmRlZiBERUJVR184NQoraW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCit7CisJY2hhciBidWZbMTAyNF07CisKKwlpZiAoIXN0cmNtcChhdlsxXSwgIi1lIikpIHsKKwkJaW50IGxlbiA9IHN0cmxlbihhdlsyXSk7CisJCWVuY29kZV84NShidWYsIGF2WzJdLCBsZW4pOworCQlpZiAobGVuIDw9IDI2KSBsZW4gPSBsZW4gKyAnQScgLSAxOworCQllbHNlIGxlbiA9IGxlbiArICdhJyAtIDI2IC0gMTsKKwkJcHJpbnRmKCJlbmNvZGVkOiAlYyVzXG4iLCBsZW4sIGJ1Zik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChhdlsxXSwgIi1kIikpIHsKKwkJaW50IGxlbiA9ICphdlsyXTsKKwkJaWYgKCdBJyA8PSBsZW4gJiYgbGVuIDw9ICdaJykgbGVuID0gbGVuIC0gJ0EnICsgMTsKKwkJZWxzZSBsZW4gPSBsZW4gLSAnYScgKyAyNiArIDE7CisJCWRlY29kZV84NShidWYsIGF2WzJdKzEsIGxlbik7CisJCXByaW50ZigiZGVjb2RlZDogJS4qc1xuIiwgbGVuLCBidWYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoYXZbMV0sICItdCIpKSB7CisJCWNoYXIgdFs0XSA9IHsgLTEsLTEsLTEsLTEgfTsKKwkJZW5jb2RlXzg1KGJ1ZiwgdCwgNCk7CisJCXByaW50ZigiZW5jb2RlZDogRCVzXG4iLCBidWYpOworCQlyZXR1cm4gMDsKKwl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2Jpc2VjdC5jIGIvYmlzZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1NGY4MQotLS0gL2Rldi9udWxsCisrKyBiL2Jpc2VjdC5jCkBAIC0wLDAgKzEsMTE0NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYmlzZWN0LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdGF0aWMgc3RydWN0IG9pZF9hcnJheSBnb29kX3JldnM7CitzdGF0aWMgc3RydWN0IG9pZF9hcnJheSBza2lwcGVkX3JldnM7CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJyZW50X2JhZF9vaWQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICphcmd2X2NoZWNrb3V0W10gPSB7ImNoZWNrb3V0IiwgIi1xIiwgTlVMTCwgIi0tIiwgTlVMTH07CitzdGF0aWMgY29uc3QgY2hhciAqYXJndl9zaG93X2JyYW5jaFtdID0geyJzaG93LWJyYW5jaCIsIE5VTEwsIE5VTEx9OworCitzdGF0aWMgY29uc3QgY2hhciAqdGVybV9iYWQ7CitzdGF0aWMgY29uc3QgY2hhciAqdGVybV9nb29kOworCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBDT1VOVEVECQkoMXU8PDE2KQorCisvKgorICogVGhpcyBpcyBhIHRydWx5IHN0dXBpZCBhbGdvcml0aG0sIGJ1dCBpdCdzIG9ubHkKKyAqIHVzZWQgZm9yIGJpc2VjdGlvbiwgYW5kIHdlIGp1c3QgZG9uJ3QgY2FyZSBlbm91Z2guCisgKgorICogV2UgY2FyZSBqdXN0IGJhcmVseSBlbm91Z2ggdG8gYXZvaWQgcmVjdXJzaW5nIGZvcgorICogbm9uLW1lcmdlIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbnQgY291bnRfZGlzdGFuY2Uoc3RydWN0IGNvbW1pdF9saXN0ICplbnRyeSkKK3sKKwlpbnQgbnIgPSAwOworCisJd2hpbGUgKGVudHJ5KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGVudHJ5LT5pdGVtOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwkJaWYgKGNvbW1pdC0+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+bmV4dCk7CisJCQliZXN0ID0gbGlzdDsKKwkJCWJlc3QtPm5leHQgPSBOVUxMOworCQl9CisJCSpyZWFjaGVzID0gd2VpZ2h0KGJlc3QpOworCX0KKwlmcmVlKHdlaWdodHMpOworCSpjb21taXRfbGlzdCA9IGJlc3Q7CisJY2xlYXJfY29tbWl0X3dlaWdodCgmY29tbWl0X3dlaWdodCk7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGdvb2RfcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZHN0cigmZ29vZF9wcmVmaXgsIHRlcm1fZ29vZCk7CisJc3RyYnVmX2FkZHN0cigmZ29vZF9wcmVmaXgsICItIik7CisKKwlpZiAoIXN0cmNtcChyZWZuYW1lLCB0ZXJtX2JhZCkpIHsKKwkJY3VycmVudF9iYWRfb2lkID0geG1hbGxvYyhzaXplb2YoKmN1cnJlbnRfYmFkX29pZCkpOworCQlvaWRjcHkoY3VycmVudF9iYWRfb2lkLCBvaWQpOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgZ29vZF9wcmVmaXguYnVmKSkgeworCQlvaWRfYXJyYXlfYXBwZW5kKCZnb29kX3JldnMsIG9pZCk7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAic2tpcC0iKSkgeworCQlvaWRfYXJyYXlfYXBwZW5kKCZza2lwcGVkX3JldnMsIG9pZCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmdvb2RfcHJlZml4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfYmlzZWN0X3JlZnModm9pZCkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdC8iLCByZWdpc3Rlcl9yZWYsIE5VTEwpOworfQorCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9iaXNlY3RfbmFtZXMsICJCSVNFQ1RfTkFNRVMiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X2V4cGVjdGVkX3JldiwgIkJJU0VDVF9FWFBFQ1RFRF9SRVYiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X2FuY2VzdG9yc19vaywgIkJJU0VDVF9BTkNFU1RPUlNfT0siKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X3J1biwgIkJJU0VDVF9SVU4iKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X3N0YXJ0LCAiQklTRUNUX1NUQVJUIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9sb2csICJCSVNFQ1RfTE9HIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF90ZXJtcywgIkJJU0VDVF9URVJNUyIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9oZWFkX25hbWUsICJoZWFkLW5hbWUiKQorCitzdGF0aWMgdm9pZCByZWFkX2Jpc2VjdF9wYXRocyhzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX2Jpc2VjdF9uYW1lcygpOworCUZJTEUgKmZwID0geGZvcGVuKGZpbGVuYW1lLCAiciIpOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZzdHIsIGZwKSAhPSBFT0YpIHsKKwkJc3RyYnVmX3RyaW0oJnN0cik7CisJCWlmIChzcV9kZXF1b3RlX3RvX2FyZ3ZfYXJyYXkoc3RyLmJ1ZiwgYXJyYXkpKQorCQkJZGllKF8oIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiKSwKKwkJCSAgICBmaWxlbmFtZSwgc3RyLmJ1Zik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnN0cik7CisJZmNsb3NlKGZwKTsKK30KKworc3RhdGljIGNoYXIgKmpvaW5fc2hhMV9hcnJheV9oZXgoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksIGNoYXIgZGVsaW0pCit7CisJc3RydWN0IHN0cmJ1ZiBqb2luZWRfaGV4cyA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmpvaW5lZF9oZXhzLCBvaWRfdG9faGV4KGFycmF5LT5vaWQgKyBpKSk7CisJCWlmIChpICsgMSA8IGFycmF5LT5ucikKKwkJCXN0cmJ1Zl9hZGRjaCgmam9pbmVkX2hleHMsIGRlbGltKTsKKwl9CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmam9pbmVkX2hleHMsIE5VTEwpOworfQorCisvKgorICogSW4gdGhpcyBmdW5jdGlvbiwgcGFzc2luZyBhIG5vdCBOVUxMIHNraXBwZWRfZmlyc3QgaXMgdmVyeSBzcGVjaWFsLgorICogSXQgbWVhbnMgdGhhdCB3ZSB3YW50IHRvIGtub3cgaWYgdGhlIGZpcnN0IGNvbW1pdCBpbiB0aGUgbGlzdCBpcworICogc2tpcHBlZCBiZWNhdXNlIHdlIHdpbGwgd2FudCB0byB0ZXN0IGEgY29tbWl0IGF3YXkgZnJvbSBpdCBpZiBpdCBpcworICogaW5kZWVkIHNraXBwZWQuCisgKiBTbyBpZiB0aGUgZmlyc3QgY29tbWl0IGlzIHNraXBwZWQsIHdlIGNhbm5vdCB0YWtlIHRoZSBzaG9ydGN1dCB0bworICoganVzdCAicmV0dXJuIGxpc3QiIHdoZW4gd2UgZmluZCB0aGUgZmlyc3Qgbm9uIHNraXBwZWQgY29tbWl0LCB3ZQorICogaGF2ZSB0byByZXR1cm4gYSBmdWxseSBmaWx0ZXJlZCBsaXN0LgorICoKKyAqIFdlIHVzZSAoKnNraXBwZWRfZmlyc3QgPT0gLTEpIHRvIG1lYW4gIml0IGhhcyBiZWVuIGZvdW5kIHRoYXQgdGhlCisgKiBmaXJzdCBjb21taXQgaXMgbm90IHNraXBwZWQiLiBJbiB0aGlzIGNhc2UgKnNraXBwZWRfZmlyc3QgaXMgc2V0IGJhY2sKKyAqIHRvIDAganVzdCBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMuCisgKi8KK3N0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRyaWVkLAorCQkJCSAgIGludCBzaG93X2FsbCwKKwkJCQkgICBpbnQgKmNvdW50LAorCQkJCSAgIGludCAqc2tpcHBlZF9maXJzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpbHRlcmVkID0gTlVMTCwgKipmID0gJmZpbHRlcmVkOworCisJKnRyaWVkID0gTlVMTDsKKworCWlmIChza2lwcGVkX2ZpcnN0KQorCQkqc2tpcHBlZF9maXJzdCA9IDA7CisJaWYgKGNvdW50KQorCQkqY291bnQgPSAwOworCisJaWYgKCFza2lwcGVkX3JldnMubnIpCisJCXJldHVybiBsaXN0OworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0ID0gbGlzdC0+bmV4dDsKKwkJbGlzdC0+bmV4dCA9IE5VTEw7CisJCWlmICgwIDw9IG9pZF9hcnJheV9sb29rdXAoJnNraXBwZWRfcmV2cywgJmxpc3QtPml0ZW0tPm9iamVjdC5vaWQpKSB7CisJCQlpZiAoc2tpcHBlZF9maXJzdCAmJiAhKnNraXBwZWRfZmlyc3QpCisJCQkJKnNraXBwZWRfZmlyc3QgPSAxOworCQkJLyogTW92ZSBjdXJyZW50IHRvIHRyaWVkIGxpc3QgKi8KKwkJCSp0cmllZCA9IGxpc3Q7CisJCQl0cmllZCA9ICZsaXN0LT5uZXh0OworCQl9IGVsc2UgeworCQkJaWYgKCFzaG93X2FsbCkgeworCQkJCWlmICghc2tpcHBlZF9maXJzdCB8fCAhKnNraXBwZWRfZmlyc3QpCisJCQkJCXJldHVybiBsaXN0OworCQkJfSBlbHNlIGlmIChza2lwcGVkX2ZpcnN0ICYmICEqc2tpcHBlZF9maXJzdCkgeworCQkJCS8qIFRoaXMgbWVhbnMgd2Uga25vdyBpdCdzIG5vdCBza2lwcGVkICovCisJCQkJKnNraXBwZWRfZmlyc3QgPSAtMTsKKwkJCX0KKwkJCS8qIE1vdmUgY3VycmVudCB0byBmaWx0ZXJlZCBsaXN0ICovCisJCQkqZiA9IGxpc3Q7CisJCQlmID0gJmxpc3QtPm5leHQ7CisJCQlpZiAoY291bnQpCisJCQkJKCpjb3VudCkrKzsKKwkJfQorCQlsaXN0ID0gbmV4dDsKKwl9CisKKwlpZiAoc2tpcHBlZF9maXJzdCAmJiAqc2tpcHBlZF9maXJzdCA9PSAtMSkKKwkJKnNraXBwZWRfZmlyc3QgPSAwOworCisJcmV0dXJuIGZpbHRlcmVkOworfQorCisjZGVmaW5lIFBSTl9NT0RVTE8gMzI3NjgKKworLyoKKyAqIFRoaXMgaXMgYSBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYmFzZWQgb24gIm1hbiAzIHJhbmQiLgorICogSXQgaXMgbm90IHVzZWQgcHJvcGVybHkgYmVjYXVzZSB0aGUgc2VlZCBpcyB0aGUgYXJndW1lbnQgYW5kIGl0CisgKiBpcyBpbmNyZWFzZWQgYnkgb25lIGJldHdlZW4gZWFjaCBjYWxsLCBidXQgdGhhdCBzaG91bGQgbm90IG1hdHRlcgorICogZm9yIHRoaXMgYXBwbGljYXRpb24uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBnZXRfcHJuKHVuc2lnbmVkIGNvdW50KQoreworCWNvdW50ID0gY291bnQgKiAxMTAzNTE1MjQ1ICsgMTIzNDU7CisJcmV0dXJuIChjb3VudC82NTUzNikgJSBQUk5fTU9EVUxPOworfQorCisvKgorICogQ3VzdG9tIGludGVnZXIgc3F1YXJlIHJvb3QgZnJvbQorICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZWdlcl9zcXVhcmVfcm9vdAorICovCitzdGF0aWMgaW50IHNxcnRpKGludCB2YWwpCit7CisJZmxvYXQgZCwgeCA9IHZhbDsKKworCWlmICghdmFsKQorCQlyZXR1cm4gMDsKKworCWRvIHsKKwkJZmxvYXQgeSA9ICh4ICsgKGZsb2F0KXZhbCAvIHgpIC8gMjsKKwkJZCA9ICh5ID4geCkgPyB5IC0geCA6IHggLSB5OworCQl4ID0geTsKKwl9IHdoaWxlIChkID49IDAuNSk7CisKKwlyZXR1cm4gKGludCl4OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpza2lwX2F3YXkoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCBpbnQgY291bnQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjdXIsICpwcmV2aW91czsKKwlpbnQgcHJuLCBpbmRleCwgaTsKKworCXBybiA9IGdldF9wcm4oY291bnQpOworCWluZGV4ID0gKGNvdW50ICogcHJuIC8gUFJOX01PRFVMTykgKiBzcXJ0aShwcm4pIC8gc3FydGkoUFJOX01PRFVMTyk7CisKKwljdXIgPSBsaXN0OworCXByZXZpb3VzID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGN1cjsgY3VyID0gY3VyLT5uZXh0LCBpKyspIHsKKwkJaWYgKGkgPT0gaW5kZXgpIHsKKwkJCWlmICghb2lkZXEoJmN1ci0+aXRlbS0+b2JqZWN0Lm9pZCwgY3VycmVudF9iYWRfb2lkKSkKKwkJCQlyZXR1cm4gY3VyOworCQkJaWYgKHByZXZpb3VzKQorCQkJCXJldHVybiBwcmV2aW91czsKKwkJCXJldHVybiBsaXN0OworCQl9CisJCXByZXZpb3VzID0gY3VyOworCX0KKworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICptYW5hZ2VkX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0cmllZCkKK3sKKwlpbnQgY291bnQsIHNraXBwZWRfZmlyc3Q7CisKKwkqdHJpZWQgPSBOVUxMOworCisJaWYgKCFza2lwcGVkX3JldnMubnIpCisJCXJldHVybiBsaXN0OworCisJbGlzdCA9IGZpbHRlcl9za2lwcGVkKGxpc3QsIHRyaWVkLCAwLCAmY291bnQsICZza2lwcGVkX2ZpcnN0KTsKKworCWlmICghc2tpcHBlZF9maXJzdCkKKwkJcmV0dXJuIGxpc3Q7CisKKwlyZXR1cm4gc2tpcF9hd2F5KGxpc3QsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQgYmlzZWN0X3Jldl9zZXR1cChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJhZF9mb3JtYXQsIGNvbnN0IGNoYXIgKmdvb2RfZm9ybWF0LAorCQkJICAgICBpbnQgcmVhZF9wYXRocykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSByZXZfYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgaTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMociwgcmV2cywgcHJlZml4KTsKKwlyZXZzLT5hYmJyZXYgPSAwOworCXJldnMtPmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9VTlNQRUNJRklFRDsKKworCS8qIHJldl9hcmd2LmFyZ3ZbMF0gd2lsbCBiZSBpZ25vcmVkIGJ5IHNldHVwX3JldmlzaW9ucyAqLworCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2FyZ3YsICJiaXNlY3RfcmV2X3NldHVwIik7CisJYXJndl9hcnJheV9wdXNoZigmcmV2X2FyZ3YsIGJhZF9mb3JtYXQsIG9pZF90b19oZXgoY3VycmVudF9iYWRfb2lkKSk7CisJZm9yIChpID0gMDsgaSA8IGdvb2RfcmV2cy5ucjsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2hmKCZyZXZfYXJndiwgZ29vZF9mb3JtYXQsCisJCQkJIG9pZF90b19oZXgoZ29vZF9yZXZzLm9pZCArIGkpKTsKKwlhcmd2X2FycmF5X3B1c2goJnJldl9hcmd2LCAiLS0iKTsKKwlpZiAocmVhZF9wYXRocykKKwkJcmVhZF9iaXNlY3RfcGF0aHMoJnJldl9hcmd2KTsKKworCXNldHVwX3JldmlzaW9ucyhyZXZfYXJndi5hcmdjLCByZXZfYXJndi5hcmd2LCByZXZzLCBOVUxMKTsKKwkvKiBYWFggbGVhayByZXZfYXJndiwgYXMgInJldnMiIG1heSBzdGlsbCBiZSBwb2ludGluZyB0byBpdCAqLworfQorCitzdGF0aWMgdm9pZCBiaXNlY3RfY29tbW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJaWYgKHJldnMtPnRyZWVfb2JqZWN0cykKKwkJbWFya19lZGdlc191bmludGVyZXN0aW5nKHJldnMsIE5VTEwsIDApOworfQorCitzdGF0aWMgZW51bSBiaXNlY3RfZXJyb3IgZXJyb3JfaWZfc2tpcHBlZF9jb21taXRzKHN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJhZCkKK3sKKwlpZiAoIXRyaWVkKQorCQlyZXR1cm4gQklTRUNUX09LOworCisJcHJpbnRmKCJUaGVyZSBhcmUgb25seSAnc2tpcCdwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QuXG4iCisJICAgICAgICJUaGUgZmlyc3QgJXMgY29tbWl0IGNvdWxkIGJlIGFueSBvZjpcbiIsIHRlcm1fYmFkKTsKKworCWZvciAoIDsgdHJpZWQ7IHRyaWVkID0gdHJpZWQtPm5leHQpCisJCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoJnRyaWVkLT5pdGVtLT5vYmplY3Qub2lkKSk7CisKKwlpZiAoYmFkKQorCQlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KGJhZCkpOworCXByaW50ZihfKCJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iKSk7CisKKwlyZXR1cm4gQklTRUNUX09OTFlfU0tJUFBFRF9MRUZUOworfQorCitzdGF0aWMgaW50IGlzX2V4cGVjdGVkX3Jldihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aF9iaXNlY3RfZXhwZWN0ZWRfcmV2KCk7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcDsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3QpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworCWZwID0gZm9wZW5fb3Jfd2FybihmaWxlbmFtZSwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJidWZfZ2V0bGluZV9sZigmc3RyLCBmcCkgIT0gRU9GKQorCQlyZXMgPSAhc3RyY21wKHN0ci5idWYsIG9pZF90b19oZXgob2lkKSk7CisKKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlmY2xvc2UoZnApOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGVudW0gYmlzZWN0X2Vycm9yIGJpc2VjdF9jaGVja291dChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiaXNlY3RfcmV2LCBpbnQgbm9fY2hlY2tvdXQpCit7CisJY2hhciBiaXNlY3RfcmV2X2hleFtHSVRfTUFYX0hFWFNaICsgMV07CisJZW51bSBiaXNlY3RfZXJyb3IgcmVzID0gQklTRUNUX09LOworCisJbWVtY3B5KGJpc2VjdF9yZXZfaGV4LCBvaWRfdG9faGV4KGJpc2VjdF9yZXYpLCB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDEpOworCXVwZGF0ZV9yZWYoTlVMTCwgIkJJU0VDVF9FWFBFQ1RFRF9SRVYiLCBiaXNlY3RfcmV2LCBOVUxMLCAwLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKworCWFyZ3ZfY2hlY2tvdXRbMl0gPSBiaXNlY3RfcmV2X2hleDsKKwlpZiAobm9fY2hlY2tvdXQpIHsKKwkJdXBkYXRlX3JlZihOVUxMLCAiQklTRUNUX0hFQUQiLCBiaXNlY3RfcmV2LCBOVUxMLCAwLAorCQkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJfSBlbHNlIHsKKwkJcmVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9jaGVja291dCwgUlVOX0dJVF9DTUQpOworCQlpZiAocmVzKQorCQkJLyoKKwkJCSAqIEVycm9ycyBpbiBgcnVuX2NvbW1hbmQoKWAgaXRzZWxmLCBzaWduYWxlZCBieSByZXMgPCAwLAorCQkJICogYW5kIGVycm9ycyBpbiB0aGUgY2hpbGQgcHJvY2Vzcywgc2lnbmFsZWQgYnkgcmVzID4gMAorCQkJICogY2FuIGJvdGggYmUgdHJlYXRlZCBhcyByZWd1bGFyIEJJU0VDVF9GQUlMVVJFICgtMSkuCisJCQkgKi8KKwkJCXJldHVybiAtYWJzKHJlcyk7CisJfQorCisJYXJndl9zaG93X2JyYW5jaFsxXSA9IGJpc2VjdF9yZXZfaGV4OworCXJlcyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3Zfc2hvd19icmFuY2gsIFJVTl9HSVRfQ01EKTsKKwkvKgorCSAqIEVycm9ycyBpbiBgcnVuX2NvbW1hbmQoKWAgaXRzZWxmLCBzaWduYWxlZCBieSByZXMgPCAwLAorCSAqIGFuZCBlcnJvcnMgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIHNpZ25hbGVkIGJ5IHJlcyA+IDAKKwkgKiBjYW4gYm90aCBiZSB0cmVhdGVkIGFzIHJlZ3VsYXIgQklTRUNUX0ZBSUxVUkUgKC0xKS4KKwkgKi8KKwlyZXR1cm4gLWFicyhyZXMpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X2NvbW1pdF9yZWZlcmVuY2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uociwgb2lkKTsKKwlpZiAoIWMpCisJCWRpZShfKCJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCXJldHVybiBjOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqKmdldF9iYWRfYW5kX2dvb2RfY29tbWl0cyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCWludCAqcmV2X25yKQoreworCXN0cnVjdCBjb21taXQgKipyZXY7CisJaW50IGksIG4gPSAwOworCisJQUxMT0NfQVJSQVkocmV2LCAxICsgZ29vZF9yZXZzLm5yKTsKKwlyZXZbbisrXSA9IGdldF9jb21taXRfcmVmZXJlbmNlKHIsIGN1cnJlbnRfYmFkX29pZCk7CisJZm9yIChpID0gMDsgaSA8IGdvb2RfcmV2cy5ucjsgaSsrKQorCQlyZXZbbisrXSA9IGdldF9jb21taXRfcmVmZXJlbmNlKHIsIGdvb2RfcmV2cy5vaWQgKyBpKTsKKwkqcmV2X25yID0gbjsKKworCXJldHVybiByZXY7Cit9CisKK3N0YXRpYyBlbnVtIGJpc2VjdF9lcnJvciBoYW5kbGVfYmFkX21lcmdlX2Jhc2Uodm9pZCkKK3sKKwlpZiAoaXNfZXhwZWN0ZWRfcmV2KGN1cnJlbnRfYmFkX29pZCkpIHsKKwkJY2hhciAqYmFkX2hleCA9IG9pZF90b19oZXgoY3VycmVudF9iYWRfb2lkKTsKKwkJY2hhciAqZ29vZF9oZXggPSBqb2luX3NoYTFfYXJyYXlfaGV4KCZnb29kX3JldnMsICcgJyk7CisJCWlmICghc3RyY21wKHRlcm1fYmFkLCAiYmFkIikgJiYgIXN0cmNtcCh0ZXJtX2dvb2QsICJnb29kIikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisJCQkJIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCAiCisJCQkJImJldHdlZW4gJXMgYW5kIFslc10uXG4iKSwKKwkJCQliYWRfaGV4LCBiYWRfaGV4LCBnb29kX2hleCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0ZXJtX2JhZCwgIm5ldyIpICYmICFzdHJjbXAodGVybV9nb29kLCAib2xkIikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisJCQkJIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCAiCisJCQkJImJldHdlZW4gJXMgYW5kIFslc10uXG4iKSwKKwkJCQliYWRfaGV4LCBiYWRfaGV4LCBnb29kX2hleCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisJCQkJIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzICIKKwkJCQkiYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIpLAorCQkJCWJhZF9oZXgsIHRlcm1fYmFkLCB0ZXJtX2dvb2QsIGJhZF9oZXgsIGdvb2RfaGV4KTsKKwkJfQorCQlyZXR1cm4gQklTRUNUX01FUkdFX0JBU0VfQ0hFQ0s7CisJfQorCisJZnByaW50ZihzdGRlcnIsIF8oIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorCQkiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisJCSJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIpLAorCQl0ZXJtX2dvb2QsIHRlcm1fYmFkLCB0ZXJtX2dvb2QsIHRlcm1fYmFkKTsKKwlyZXR1cm4gQklTRUNUX0ZBSUxFRDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3NraXBwZWRfbWVyZ2VfYmFzZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICptYikKK3sKKwljaGFyICptYl9oZXggPSBvaWRfdG9faGV4KG1iKTsKKwljaGFyICpiYWRfaGV4ID0gb2lkX3RvX2hleChjdXJyZW50X2JhZF9vaWQpOworCWNoYXIgKmdvb2RfaGV4ID0gam9pbl9zaGExX2FycmF5X2hleCgmZ29vZF9yZXZzLCAnICcpOworCisJd2FybmluZyhfKCJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdICIKKwkJIm11c3QgYmUgc2tpcHBlZC5cbiIKKwkJIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgIgorCQkiYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisJCSJXZSBjb250aW51ZSBhbnl3YXkuIiksCisJCWJhZF9oZXgsIGdvb2RfaGV4LCB0ZXJtX2JhZCwgbWJfaGV4LCBiYWRfaGV4KTsKKwlmcmVlKGdvb2RfaGV4KTsKK30KKworLyoKKyAqICJjaGVja19tZXJnZV9iYXNlcyIgY2hlY2tzIHRoYXQgbWVyZ2UgYmFzZXMgYXJlIG5vdCAiYmFkIiAob3IgIm5ldyIpLgorICoKKyAqIC0gSWYgb25lIGlzICJiYWQiIChvciAibmV3IiksIGl0IG1lYW5zIHRoZSB1c2VyIGFzc3VtZWQgc29tZXRoaW5nIHdyb25nCisgKiBhbmQgd2UgbXVzdCByZXR1cm4gZXJyb3Igd2l0aCBhIG5vbiAwIGVycm9yIGNvZGUuCisgKiAtIElmIG9uZSBpcyAiZ29vZCIgKG9yICJvbGQiKSwgdGhhdCdzIGdvb2QsIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAqIC0gSWYgb25lIGlzICJza2lwcGVkIiwgd2UgY2FuJ3Qga25vdyBidXQgd2Ugc2hvdWxkIHdhcm4uCisgKiAtIElmIHdlIGRvbid0IGtub3csIHdlIHNob3VsZCBjaGVjayBpdCBvdXQgYW5kIGFzayB0aGUgdXNlciB0byB0ZXN0LgorICogLSBJZiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQsIG9uIHN1Y2Nlc3MgcmV0dXJuCisgKiBCSVNFQ1RfSU5URVJOQUxfU1VDQ0VTU19NRVJHRV9CQVNFICgtMTEpIGEgc3BlY2lhbCBjb25kaXRpb24KKyAqIGZvciBlYXJseSBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgY29udmVydGVkIGJhY2sgdG8gMCBpbgorICogY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZCgpLgorICovCitzdGF0aWMgZW51bSBiaXNlY3RfZXJyb3IgY2hlY2tfbWVyZ2VfYmFzZXMoaW50IHJldl9uciwgc3RydWN0IGNvbW1pdCAqKnJldiwgaW50IG5vX2NoZWNrb3V0KQoreworCWVudW0gYmlzZWN0X2Vycm9yIHJlcyA9IEJJU0VDVF9PSzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKworCXJlc3VsdCA9IGdldF9tZXJnZV9iYXNlc19tYW55KHJldlswXSwgcmV2X25yIC0gMSwgcmV2ICsgMSk7CisKKwlmb3IgKDsgcmVzdWx0OyByZXN1bHQgPSByZXN1bHQtPm5leHQpIHsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWIgPSAmcmVzdWx0LT5pdGVtLT5vYmplY3Qub2lkOworCQlpZiAob2lkZXEobWIsIGN1cnJlbnRfYmFkX29pZCkpIHsKKwkJCXJlcyA9IGhhbmRsZV9iYWRfbWVyZ2VfYmFzZSgpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoMCA8PSBvaWRfYXJyYXlfbG9va3VwKCZnb29kX3JldnMsIG1iKSkgeworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoMCA8PSBvaWRfYXJyYXlfbG9va3VwKCZza2lwcGVkX3JldnMsIG1iKSkgeworCQkJaGFuZGxlX3NraXBwZWRfbWVyZ2VfYmFzZShtYik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoXygiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIpKTsKKwkJCXJlcyA9IGJpc2VjdF9jaGVja291dChtYiwgbm9fY2hlY2tvdXQpOworCQkJaWYgKCFyZXMpCisJCQkJLyogaW5kaWNhdGUgZWFybHkgc3VjY2VzcyAqLworCQkJCXJlcyA9IEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTX01FUkdFX0JBU0U7CisJCQlicmVhazsKKwkJfQorCX0KKworCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FuY2VzdG9ycyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgaW50IHJldl9uciwKKwkJCSAgIHN0cnVjdCBjb21taXQgKipyZXYsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlpbnQgcmVzOworCisJYmlzZWN0X3Jldl9zZXR1cChyLCAmcmV2cywgcHJlZml4LCAiXiVzIiwgIiVzIiwgMCk7CisKKwliaXNlY3RfY29tbW9uKCZyZXZzKTsKKwlyZXMgPSAocmV2cy5jb21taXRzICE9IE5VTEwpOworCisJLyogQ2xlYW4gdXAgb2JqZWN0cyB1c2VkLCBhcyB0aGV5IHdpbGwgYmUgcmV1c2VkLiAqLworCWNsZWFyX2NvbW1pdF9tYXJrc19tYW55KHJldl9uciwgcmV2LCBBTExfUkVWX0ZMQUdTKTsKKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiAiY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZCIgY2hlY2tzIHRoYXQgYWxsICJnb29kIiByZXZzIGFyZQorICogYW5jZXN0b3Igb2YgdGhlICJiYWQiIHJldi4KKyAqCisgKiBJZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBtZXJnZSBiYXNlcy4KKyAqIElmIGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCBieSB0aGUgdXNlciwgaXRzIHNvdXJjZSBjb2RlIHdpbGwgYmUKKyAqIGNoZWNrZWQgb3V0IHRvIGJlIHRlc3RlZCBieSB0aGUgdXNlciBhbmQgd2Ugd2lsbCByZXR1cm4uCisgKi8KKworc3RhdGljIGVudW0gYmlzZWN0X2Vycm9yIGNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSAgICBpbnQgbm9fY2hlY2tvdXQpCit7CisJY2hhciAqZmlsZW5hbWU7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGZkLCByZXZfbnI7CisJZW51bSBiaXNlY3RfZXJyb3IgcmVzID0gQklTRUNUX09LOworCXN0cnVjdCBjb21taXQgKipyZXY7CisKKwlpZiAoIWN1cnJlbnRfYmFkX29pZCkKKwkJcmV0dXJuIGVycm9yKF8oImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIiksIHRlcm1fYmFkKTsKKworCWZpbGVuYW1lID0gZ2l0X3BhdGhkdXAoIkJJU0VDVF9BTkNFU1RPUlNfT0siKTsKKworCS8qIENoZWNrIGlmIGZpbGUgQklTRUNUX0FOQ0VTVE9SU19PSyBleGlzdHMuICovCisJaWYgKCFzdGF0KGZpbGVuYW1lLCAmc3QpICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCWdvdG8gZG9uZTsKKworCS8qIEJpc2VjdGluZyB3aXRoIG5vIGdvb2QgcmV2IGlzIG9rLiAqLworCWlmICghZ29vZF9yZXZzLm5yKQorCQlnb3RvIGRvbmU7CisKKwkvKiBDaGVjayBpZiBhbGwgZ29vZCByZXZzIGFyZSBhbmNlc3RvciBvZiB0aGUgYmFkIHJldi4gKi8KKworCXJldiA9IGdldF9iYWRfYW5kX2dvb2RfY29tbWl0cyhyLCAmcmV2X25yKTsKKwlpZiAoY2hlY2tfYW5jZXN0b3JzKHIsIHJldl9uciwgcmV2LCBwcmVmaXgpKQorCQlyZXMgPSBjaGVja19tZXJnZV9iYXNlcyhyZXZfbnIsIHJldiwgbm9fY2hlY2tvdXQpOworCWZyZWUocmV2KTsKKworCWlmICghcmVzKSB7CisJCS8qIENyZWF0ZSBmaWxlIEJJU0VDVF9BTkNFU1RPUlNfT0suICovCisJCWZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisJCWlmIChmZCA8IDApCisJCQkvKgorCQkJICogQklTRUNUX0FOQ0VTVE9SU19PSyBmaWxlIGlzIG5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwKKwkJCSAqIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlIGF0IHRoZSBuZXh0CisJCQkgKiBiaXNlY3Rpb24gc3RlcC4KKwkJCSAqIFNvLCBqdXN0IHNpZ25hbCB3aXRoIGEgd2FybmluZyB0aGF0IHNvbWV0aGluZworCQkJICogbWlnaHQgYmUgd3JvbmcuCisJCQkgKi8KKwkJCXdhcm5pbmdfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciKSwKKwkJCQlmaWxlbmFtZSk7CisJCWVsc2UKKwkJCWNsb3NlKGZkKTsKKwl9CisgZG9uZToKKwlmcmVlKGZpbGVuYW1lKTsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogVGhpcyBkb2VzICJnaXQgZGlmZi10cmVlIC0tcHJldHR5IENPTU1JVCIgd2l0aG91dCBvbmUgZm9yaytleGVjLgorICovCitzdGF0aWMgdm9pZCBzaG93X2RpZmZfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7CisJCSJkaWZmLXRyZWUiLCAiLS1wcmV0dHkiLCAiLS1zdGF0IiwgIi0tc3VtbWFyeSIsICItLWNjIiwgTlVMTAorCX07CisJc3RydWN0IHJldl9pbmZvIG9wdDsKKworCWdpdF9jb25maWcoZ2l0X2RpZmZfdWlfY29uZmlnLCBOVUxMKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZvcHQsIHByZWZpeCk7CisKKwlzZXR1cF9yZXZpc2lvbnMoQVJSQVlfU0laRShhcmd2KSAtIDEsIGFyZ3YsICZvcHQsIE5VTEwpOworCWxvZ190cmVlX2NvbW1pdCgmb3B0LCBjb21taXQpOworfQorCisvKgorICogVGhlIHRlcm1zIHVzZWQgZm9yIHRoaXMgYmlzZWN0IHNlc3Npb24gYXJlIHN0b3JlZCBpbiBCSVNFQ1RfVEVSTVMuCisgKiBXZSByZWFkIHRoZW0gYW5kIHN0b3JlIHRoZW0gdG8gYWRhcHQgdGhlIG1lc3NhZ2VzIGFjY29yZGluZ2x5LgorICogRGVmYXVsdCBpcyBiYWQvZ29vZC4KKyAqLwordm9pZCByZWFkX2Jpc2VjdF90ZXJtcyhjb25zdCBjaGFyICoqcmVhZF9iYWQsIGNvbnN0IGNoYXIgKipyZWFkX2dvb2QpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX2Jpc2VjdF90ZXJtcygpOworCUZJTEUgKmZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisKKwlpZiAoIWZwKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJCSpyZWFkX2JhZCA9ICJiYWQiOworCQkJKnJlYWRfZ29vZCA9ICJnb29kIjsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciKSwgZmlsZW5hbWUpOworCQl9CisJfSBlbHNlIHsKKwkJc3RyYnVmX2dldGxpbmVfbGYoJnN0ciwgZnApOworCQkqcmVhZF9iYWQgPSBzdHJidWZfZGV0YWNoKCZzdHIsIE5VTEwpOworCQlzdHJidWZfZ2V0bGluZV9sZigmc3RyLCBmcCk7CisJCSpyZWFkX2dvb2QgPSBzdHJidWZfZGV0YWNoKCZzdHIsIE5VTEwpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlmY2xvc2UoZnApOworfQorCisvKgorICogV2UgdXNlIHRoZSBjb252ZW50aW9uIHRoYXQgcmV0dXJuIEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTXzFTVF9CQURfRk9VTkQgKC0xMCkgbWVhbnMKKyAqIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisgKiBJbiB0aGlzIGNhc2UgdGhlIGNhbGxpbmcgZnVuY3Rpb24gb3IgY29tbWFuZCBzaG91bGQgbm90IHR1cm4gYQorICogQklTRUNUX0lOVEVSTkFMX1NVQ0NFU1NfMVNUX0JBRF9GT1VORCByZXR1cm4gY29kZSBpbnRvIGFuIGVycm9yIG9yIGEgbm9uIHplcm8gZXhpdCBjb2RlLgorICogSWYgbm9fY2hlY2tvdXQgaXMgbm9uLXplcm8sIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBkb2VzIG5vdAorICogY2hlY2tvdXQgdGhlIHRyaWFsIGNvbW1pdCBidXQgaW5zdGVhZCBzaW1wbHkgdXBkYXRlcyBCSVNFQ1RfSEVBRC4KKyAqLworZW51bSBiaXNlY3RfZXJyb3IgYmlzZWN0X25leHRfYWxsKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBub19jaGVja291dCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkOworCWludCByZWFjaGVzID0gMCwgYWxsID0gMCwgbnIsIHN0ZXBzOworCWVudW0gYmlzZWN0X2Vycm9yIHJlcyA9IEJJU0VDVF9PSzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpiaXNlY3RfcmV2OworCWNoYXIgKnN0ZXBzX21zZzsKKworCXJlYWRfYmlzZWN0X3Rlcm1zKCZ0ZXJtX2JhZCwgJnRlcm1fZ29vZCk7CisJaWYgKHJlYWRfYmlzZWN0X3JlZnMoKSkKKwkJZGllKF8oInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIikpOworCisJcmVzID0gY2hlY2tfZ29vZF9hcmVfYW5jZXN0b3JzX29mX2JhZChyLCBwcmVmaXgsIG5vX2NoZWNrb3V0KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJYmlzZWN0X3Jldl9zZXR1cChyLCAmcmV2cywgcHJlZml4LCAiJXMiLCAiXiVzIiwgMSk7CisJcmV2cy5saW1pdGVkID0gMTsKKworCWJpc2VjdF9jb21tb24oJnJldnMpOworCisJZmluZF9iaXNlY3Rpb24oJnJldnMuY29tbWl0cywgJnJlYWNoZXMsICZhbGwsICEhc2tpcHBlZF9yZXZzLm5yKTsKKwlyZXZzLmNvbW1pdHMgPSBtYW5hZ2VkX3NraXBwZWQocmV2cy5jb21taXRzLCAmdHJpZWQpOworCisJaWYgKCFyZXZzLmNvbW1pdHMpIHsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIHJldHVybiBlcnJvciBoZXJlIG9ubHkgaWYgdGhlICJiYWQiCisJCSAqIGNvbW1pdCBpcyBhbHNvIGEgInNraXAiIGNvbW1pdC4KKwkJICovCisJCXJlcyA9IGVycm9yX2lmX3NraXBwZWRfY29tbWl0cyh0cmllZCwgTlVMTCk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwkJcHJpbnRmKF8oIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIiksCisJCSAgICAgICBvaWRfdG9faGV4KGN1cnJlbnRfYmFkX29pZCksCisJCSAgICAgICB0ZXJtX2dvb2QsCisJCSAgICAgICB0ZXJtX2JhZCk7CisKKwkJcmV0dXJuIEJJU0VDVF9GQUlMRUQ7CisJfQorCisJaWYgKCFhbGwpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKwkJCSJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iKSk7CisKKwkJcmV0dXJuIEJJU0VDVF9OT19URVNUQUJMRV9DT01NSVQ7CisJfQorCisJYmlzZWN0X3JldiA9ICZyZXZzLmNvbW1pdHMtPml0ZW0tPm9iamVjdC5vaWQ7CisKKwlpZiAob2lkZXEoYmlzZWN0X3JldiwgY3VycmVudF9iYWRfb2lkKSkgeworCQlyZXMgPSBlcnJvcl9pZl9za2lwcGVkX2NvbW1pdHModHJpZWQsIGN1cnJlbnRfYmFkX29pZCk7CisJCWlmIChyZXMpCisJCQlyZXR1cm4gcmVzOworCQlwcmludGYoIiVzIGlzIHRoZSBmaXJzdCAlcyBjb21taXRcbiIsIG9pZF90b19oZXgoYmlzZWN0X3JldiksCisJCQl0ZXJtX2JhZCk7CisKKwkJc2hvd19kaWZmX3RyZWUociwgcHJlZml4LCByZXZzLmNvbW1pdHMtPml0ZW0pOworCQkvKgorCQkgKiBUaGlzIG1lYW5zIHRoZSBiaXNlY3Rpb24gcHJvY2VzcyBzdWNjZWVkZWQuCisJCSAqIFVzaW5nIEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTXzFTVF9CQURfRk9VTkQgKC0xMCkKKwkJICogc28gdGhhdCB0aGUgY2FsbCBjaGFpbiBjYW4gc2ltcGx5IGNoZWNrCisJCSAqIGZvciBuZWdhdGl2ZSByZXR1cm4gdmFsdWVzIGZvciBlYXJseSByZXR1cm5zIHVwCisJCSAqIHVudGlsIHRoZSBjbWRfYmlzZWN0X19oZWxwZXIoKSBjYWxsZXIuCisJCSAqLworCQlyZXR1cm4gQklTRUNUX0lOVEVSTkFMX1NVQ0NFU1NfMVNUX0JBRF9GT1VORDsKKwl9CisKKwluciA9IGFsbCAtIHJlYWNoZXMgLSAxOworCXN0ZXBzID0gZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGFsbCk7CisKKwlzdGVwc19tc2cgPSB4c3RyZm10KFFfKCIocm91Z2hseSAlZCBzdGVwKSIsICIocm91Z2hseSAlZCBzdGVwcykiLAorCQkgIHN0ZXBzKSwgc3RlcHMpOworCS8qCisJICogVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKwkgKiBzdGVwcykiIHRyYW5zbGF0aW9uLgorCSAqLworCXByaW50ZihRXygiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIiwKKwkJICAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgJXNcbiIsCisJCSAgbnIpLCBuciwgc3RlcHNfbXNnKTsKKwlmcmVlKHN0ZXBzX21zZyk7CisKKwlyZXR1cm4gYmlzZWN0X2NoZWNrb3V0KGJpc2VjdF9yZXYsIG5vX2NoZWNrb3V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9nMmkoaW50IG4pCit7CisJaW50IGxvZzIgPSAwOworCisJZm9yICg7IG4gPiAxOyBuID4+PSAxKQorCQlsb2cyKys7CisKKwlyZXR1cm4gbG9nMjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhwMmkoaW50IG4pCit7CisJcmV0dXJuIDEgPDwgbjsKK30KKworLyoKKyAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgYmlzZWN0IHN0ZXBzIGxlZnQgKGFmdGVyIHRoZSBjdXJyZW50IHN0ZXApCisgKgorICogRm9yIGFueSB4IGJldHdlZW4gMCBpbmNsdWRlZCBhbmQgMl5uIGV4Y2x1ZGVkLCB0aGUgcHJvYmFiaWxpdHkgZm9yCisgKiBuIC0gMSBzdGVwcyBsZWZ0IGxvb2tzIGxpa2U6CisgKgorICogUCgyXm4gKyB4KSA9PSAoMl5uIC0geCkgLyAoMl5uICsgeCkKKyAqCisgKiBhbmQgUCgyXm4gKyB4KSA8IDAuNSBtZWFucyAyXm4gPCAzeAorICovCitpbnQgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGludCBhbGwpCit7CisJaW50IG4sIHgsIGU7CisKKwlpZiAoYWxsIDwgMykKKwkJcmV0dXJuIDA7CisKKwluID0gbG9nMmkoYWxsKTsKKwllID0gZXhwMmkobik7CisJeCA9IGFsbCAtIGU7CisKKwlyZXR1cm4gKGUgPCAzICogeCkgPyBuIDogbiAtIDE7Cit9CisKK3N0YXRpYyBpbnQgbWFya19mb3JfcmVtb3ZhbChjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZzID0gY2JfZGF0YTsKKwljaGFyICpyZWYgPSB4c3RyZm10KCJyZWZzL2Jpc2VjdCVzIiwgcmVmbmFtZSk7CisJc3RyaW5nX2xpc3RfYXBwZW5kKHJlZnMsIHJlZik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBiaXNlY3RfY2xlYW5fc3RhdGUodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCS8qIFRoZXJlIG1heSBiZSBzb21lIHJlZnMgcGFja2VkIGR1cmluZyBiaXNlY3Rpb24gKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmc19mb3JfcmVtb3ZhbCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJZm9yX2VhY2hfcmVmX2luKCJyZWZzL2Jpc2VjdCIsIG1hcmtfZm9yX3JlbW92YWwsICh2b2lkICopICZyZWZzX2Zvcl9yZW1vdmFsKTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlZnNfZm9yX3JlbW92YWwsIHhzdHJkdXAoIkJJU0VDVF9IRUFEIikpOworCXJlc3VsdCA9IGRlbGV0ZV9yZWZzKCJiaXNlY3Q6IHJlbW92ZSIsICZyZWZzX2Zvcl9yZW1vdmFsLCBSRUZfTk9fREVSRUYpOworCXJlZnNfZm9yX3JlbW92YWwuc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0cmluZ19saXN0X2NsZWFyKCZyZWZzX2Zvcl9yZW1vdmFsLCAwKTsKKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9iaXNlY3RfZXhwZWN0ZWRfcmV2KCkpOworCXVubGlua19vcl93YXJuKGdpdF9wYXRoX2Jpc2VjdF9hbmNlc3RvcnNfb2soKSk7CisJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfYmlzZWN0X2xvZygpKTsKKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9iaXNlY3RfbmFtZXMoKSk7CisJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfYmlzZWN0X3J1bigpKTsKKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9iaXNlY3RfdGVybXMoKSk7CisJLyogQ2xlYW51cCBoZWFkLW5hbWUgaWYgaXQgZ290IGxlZnQgYnkgYW4gb2xkIHZlcnNpb24gb2YgZ2l0LWJpc2VjdCAqLworCXVubGlua19vcl93YXJuKGdpdF9wYXRoX2hlYWRfbmFtZSgpKTsKKwkvKgorCSAqIENsZWFudXAgQklTRUNUX1NUQVJUIGxhc3QgdG8gc3VwcG9ydCB0aGUgLS1uby1jaGVja291dCBvcHRpb24KKwkgKiBpbnRyb2R1Y2VkIGluIHRoZSBjb21taXQgNDc5NmU4MjNhLgorCSAqLworCXVubGlua19vcl93YXJuKGdpdF9wYXRoX2Jpc2VjdF9zdGFydCgpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9iaXNlY3QuaCBiL2Jpc2VjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYWQ4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXNlY3QuaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIEJJU0VDVF9ICisjZGVmaW5lIEJJU0VDVF9ICisKK3N0cnVjdCBjb21taXRfbGlzdDsKK3N0cnVjdCByZXBvc2l0b3J5OworCisvKgorICogRmluZCBiaXNlY3Rpb24uIElmIHNvbWV0aGluZyBpcyBmb3VuZCwgYHJlYWNoZXNgIHdpbGwgYmUgdGhlIG51bWJlciBvZgorICogY29tbWl0cyB0aGF0IHRoZSBiZXN0IGNvbW1pdCByZWFjaGVzLiBgYWxsYCB3aWxsIGJlIHRoZSBjb3VudCBvZgorICogbm9uLVNBTUVUUkVFIGNvbW1pdHMuIElmIG5vdGhpbmcgaXMgZm91bmQsIGBsaXN0YCB3aWxsIGJlIE5VTEwuCisgKiBPdGhlcndpc2UsIGl0IHdpbGwgYmUgZWl0aGVyIGFsbCBub24tU0FNRVRSRUUgY29tbWl0cyBvciB0aGUgc2luZ2xlCisgKiBiZXN0IGNvbW1pdCwgYXMgY2hvc2VuIGJ5IGBmaW5kX2FsbGAuCisgKi8KK3ZvaWQgZmluZF9iaXNlY3Rpb24oc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwgaW50ICpyZWFjaGVzLCBpbnQgKmFsbCwKKwkJICAgIGludCBmaW5kX2FsbCk7CisKK3N0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRyaWVkLAorCQkJCSAgIGludCBzaG93X2FsbCwKKwkJCQkgICBpbnQgKmNvdW50LAorCQkJCSAgIGludCAqc2tpcHBlZF9maXJzdCk7CisKKyNkZWZpbmUgQklTRUNUX1NIT1dfQUxMCQkoMTw8MCkKKyNkZWZpbmUgUkVWX0xJU1RfUVVJRVQJCSgxPDwxKQorCitzdHJ1Y3QgcmV2X2xpc3RfaW5mbyB7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCWludCBmbGFnczsKKwlpbnQgc2hvd190aW1lc3RhbXA7CisJaW50IGhkcl90ZXJtaW5hdGlvbjsKKwljb25zdCBjaGFyICpoZWFkZXJfcHJlZml4OworfTsKKworLyoKKyAqIGVudW0gYmlzZWN0X2Vycm9yIHJlcHJlc2VudHMgdGhlIGZvbGxvd2luZyByZXR1cm4gY29kZXM6CisgKiBCSVNFQ1RfT0s6IHN1Y2Nlc3MgY29kZS4gSW50ZXJuYWxseSwgaXQgbWVhbnMgdGhhdCBuZXh0CisgKiBjb21taXQgaGFzIGJlZW4gZm91bmQgKGFuZCBwb3NzaWJseSBjaGVja2VkIG91dCkgYW5kIGl0CisgKiBzaG91bGQgYmUgdGVzdGVkLgorICogQklTRUNUX0ZBSUxFRCBlcnJvciBjb2RlOiBkZWZhdWx0IGVycm9yIGNvZGUuCisgKiBCSVNFQ1RfT05MWV9TS0lQUEVEX0xFRlQgZXJyb3IgY29kZTogb25seSBza2lwcGVkCisgKiBjb21taXRzIGxlZnQgdG8gYmUgdGVzdGVkLgorICogQklTRUNUX01FUkdFX0JBU0VfQ0hFQ0sgZXJyb3IgY29kZTogbWVyZ2UgYmFzZSBjaGVjayBmYWlsZWQuCisgKiBCSVNFQ1RfTk9fVEVTVEFCTEVfQ09NTUlUIGVycm9yIGNvZGU6IG5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC4KKyAqIEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTXzFTVF9CQURfRk9VTkQgZWFybHkgc3VjY2VzcyBjb2RlOgorICogZmlyc3QgdGVybV9iYWQgY29tbWl0IGZvdW5kLgorICogQklTRUNUX0lOVEVSTkFMX1NVQ0NFU1NfTUVSR0VfQkFTRSBlYXJseSBzdWNjZXNzCisgKiBjb2RlOiBmb3VuZCBtZXJnZSBiYXNlIHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4KKyAqIEVhcmx5IHN1Y2Nlc3MgY29kZXMgQklTRUNUX0lOVEVSTkFMX1NVQ0NFU1NfMVNUX0JBRF9GT1VORCBhbmQKKyAqIEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTX01FUkdFX0JBU0Ugc2hvdWxkIGJlIG9ubHkgaW50ZXJuYWwgY29kZXMuCisgKi8KK2VudW0gYmlzZWN0X2Vycm9yIHsKKwlCSVNFQ1RfT0sgPSAwLAorCUJJU0VDVF9GQUlMRUQgPSAtMSwKKwlCSVNFQ1RfT05MWV9TS0lQUEVEX0xFRlQgPSAtMiwKKwlCSVNFQ1RfTUVSR0VfQkFTRV9DSEVDSyA9IC0zLAorCUJJU0VDVF9OT19URVNUQUJMRV9DT01NSVQgPSAtNCwKKwlCSVNFQ1RfSU5URVJOQUxfU1VDQ0VTU18xU1RfQkFEX0ZPVU5EID0gLTEwLAorCUJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTX01FUkdFX0JBU0UgPSAtMTEKK307CisKK2VudW0gYmlzZWN0X2Vycm9yIGJpc2VjdF9uZXh0X2FsbChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgIGludCBub19jaGVja291dCk7CisKK2ludCBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoaW50IGFsbCk7CisKK3ZvaWQgcmVhZF9iaXNlY3RfdGVybXMoY29uc3QgY2hhciAqKmJhZCwgY29uc3QgY2hhciAqKmdvb2QpOworCitpbnQgYmlzZWN0X2NsZWFuX3N0YXRlKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JsYW1lLmMgYi9ibGFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzcwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9ibGFtZS5jCkBAIC0wLDAgKzEsMjgxMSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJibGFtZS5oIgorI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKworZGVmaW5lX2NvbW1pdF9zbGFiKGJsYW1lX3N1c3BlY3RzLCBzdHJ1Y3QgYmxhbWVfb3JpZ2luICopOworc3RhdGljIHN0cnVjdCBibGFtZV9zdXNwZWN0cyBibGFtZV9zdXNwZWN0czsKKworc3RydWN0IGJsYW1lX29yaWdpbiAqZ2V0X2JsYW1lX3N1c3BlY3RzKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICoqcmVzdWx0OworCisJcmVzdWx0ID0gYmxhbWVfc3VzcGVjdHNfcGVlaygmYmxhbWVfc3VzcGVjdHMsIGNvbW1pdCk7CisKKwlyZXR1cm4gcmVzdWx0ID8gKnJlc3VsdCA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9ibGFtZV9zdXNwZWN0cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBibGFtZV9vcmlnaW4gKm9yaWdpbikKK3sKKwkqYmxhbWVfc3VzcGVjdHNfYXQoJmJsYW1lX3N1c3BlY3RzLCBjb21taXQpID0gb3JpZ2luOworfQorCit2b2lkIGJsYW1lX29yaWdpbl9kZWNyZWYoc3RydWN0IGJsYW1lX29yaWdpbiAqbykKK3sKKwlpZiAobyAmJiAtLW8tPnJlZmNudCA8PSAwKSB7CisJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnAsICpsID0gTlVMTDsKKwkJaWYgKG8tPnByZXZpb3VzKQorCQkJYmxhbWVfb3JpZ2luX2RlY3JlZihvLT5wcmV2aW91cyk7CisJCWZyZWUoby0+ZmlsZS5wdHIpOworCQkvKiBTaG91bGQgYmUgcHJlc2VudCBleGFjdGx5IG9uY2UgaW4gY29tbWl0IGNoYWluICovCisJCWZvciAocCA9IGdldF9ibGFtZV9zdXNwZWN0cyhvLT5jb21taXQpOyBwOyBsID0gcCwgcCA9IHAtPm5leHQpIHsKKwkJCWlmIChwID09IG8pIHsKKwkJCQlpZiAobCkKKwkJCQkJbC0+bmV4dCA9IHAtPm5leHQ7CisJCQkJZWxzZQorCQkJCQlzZXRfYmxhbWVfc3VzcGVjdHMoby0+Y29tbWl0LCBwLT5uZXh0KTsKKwkJCQlmcmVlKG8pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlkaWUoImludGVybmFsIGVycm9yIGluIGJsYW1lX29yaWdpbl9kZWNyZWYiKTsKKwl9Cit9CisKKy8qCisgKiBHaXZlbiBhIGNvbW1pdCBhbmQgYSBwYXRoIGluIGl0LCBjcmVhdGUgYSBuZXcgb3JpZ2luIHN0cnVjdHVyZS4KKyAqIFRoZSBjYWxsZXJzIHRoYXQgYWRkIGJsYW1lIHRvIHRoZSBzY29yZWJvYXJkIHNob3VsZCB1c2UKKyAqIGdldF9vcmlnaW4oKSB0byBvYnRhaW4gc2hhcmVkLCByZWZjb3VudGVkIGNvcHkgaW5zdGVhZCBvZiBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LgorICovCitzdGF0aWMgc3RydWN0IGJsYW1lX29yaWdpbiAqbWFrZV9vcmlnaW4oc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBibGFtZV9vcmlnaW4gKm87CisJRkxFWF9BTExPQ19TVFIobywgcGF0aCwgcGF0aCk7CisJby0+Y29tbWl0ID0gY29tbWl0OworCW8tPnJlZmNudCA9IDE7CisJby0+bmV4dCA9IGdldF9ibGFtZV9zdXNwZWN0cyhjb21taXQpOworCXNldF9ibGFtZV9zdXNwZWN0cyhjb21taXQsIG8pOworCXJldHVybiBvOworfQorCisvKgorICogTG9jYXRlIGFuIGV4aXN0aW5nIG9yaWdpbiBvciBjcmVhdGUgYSBuZXcgb25lLgorICogVGhpcyBtb3ZlcyB0aGUgb3JpZ2luIHRvIGZyb250IHBvc2l0aW9uIGluIHRoZSBjb21taXQgdXRpbCBsaXN0LgorICovCitzdGF0aWMgc3RydWN0IGJsYW1lX29yaWdpbiAqZ2V0X29yaWdpbihzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqbywgKmw7CisKKwlmb3IgKG8gPSBnZXRfYmxhbWVfc3VzcGVjdHMoY29tbWl0KSwgbCA9IE5VTEw7IG87IGwgPSBvLCBvID0gby0+bmV4dCkgeworCQlpZiAoIXN0cmNtcChvLT5wYXRoLCBwYXRoKSkgeworCQkJLyogYnVtcCB0byBmcm9udCAqLworCQkJaWYgKGwpIHsKKwkJCQlsLT5uZXh0ID0gby0+bmV4dDsKKwkJCQlvLT5uZXh0ID0gZ2V0X2JsYW1lX3N1c3BlY3RzKGNvbW1pdCk7CisJCQkJc2V0X2JsYW1lX3N1c3BlY3RzKGNvbW1pdCwgbyk7CisJCQl9CisJCQlyZXR1cm4gYmxhbWVfb3JpZ2luX2luY3JlZihvKTsKKwkJfQorCX0KKwlyZXR1cm4gbWFrZV9vcmlnaW4oY29tbWl0LCBwYXRoKTsKK30KKworCisKK3N0YXRpYyB2b2lkIHZlcmlmeV93b3JraW5nX3RyZWVfcGF0aChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgIHN0cnVjdCBjb21taXQgKndvcmtfdHJlZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJaW50IHBvczsKKworCWZvciAocGFyZW50cyA9IHdvcmtfdHJlZS0+cGFyZW50czsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29pZCA9ICZwYXJlbnRzLT5pdGVtLT5vYmplY3Qub2lkOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIGJsb2Jfb2lkOworCQl1bnNpZ25lZCBzaG9ydCBtb2RlOworCisJCWlmICghZ2V0X3RyZWVfZW50cnkociwgY29tbWl0X29pZCwgcGF0aCwgJmJsb2Jfb2lkLCAmbW9kZSkgJiYKKwkJICAgIG9pZF9vYmplY3RfaW5mbyhyLCAmYmxvYl9vaWQsIE5VTEwpID09IE9CSl9CTE9CKQorCQkJcmV0dXJuOworCX0KKworCXBvcyA9IGluZGV4X25hbWVfcG9zKHItPmluZGV4LCBwYXRoLCBzdHJsZW4ocGF0aCkpOworCWlmIChwb3MgPj0gMCkKKwkJOyAvKiBwYXRoIGlzIGluIHRoZSBpbmRleCAqLworCWVsc2UgaWYgKC0xIC0gcG9zIDwgci0+aW5kZXgtPmNhY2hlX25yICYmCisJCSAhc3RyY21wKHItPmluZGV4LT5jYWNoZVstMSAtIHBvc10tPm5hbWUsIHBhdGgpKQorCQk7IC8qIHBhdGggaXMgaW4gdGhlIGluZGV4LCB1bm1lcmdlZCAqLworCWVsc2UKKwkJZGllKCJubyBzdWNoIHBhdGggJyVzJyBpbiBIRUFEIiwgcGF0aCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKiphcHBlbmRfcGFyZW50KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRhaWwsCisJCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBjb21taXQgKnBhcmVudDsKKworCXBhcmVudCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHIsIG9pZCk7CisJaWYgKCFwYXJlbnQpCisJCWRpZSgibm8gc3VjaCBjb21taXQgJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCXJldHVybiAmY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudCwgdGFpbCktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9tZXJnZV9wYXJlbnRzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0YWlsKQoreworCWludCBtZXJnZV9oZWFkOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJbWVyZ2VfaGVhZCA9IG9wZW4oZ2l0X3BhdGhfbWVyZ2VfaGVhZChyKSwgT19SRE9OTFkpOworCWlmIChtZXJnZV9oZWFkIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuOworCQlkaWUoImNhbm5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciLAorCQkgICAgZ2l0X3BhdGhfbWVyZ2VfaGVhZChyKSk7CisJfQorCisJd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lX2ZkKCZsaW5lLCBtZXJnZV9oZWFkLCAnXG4nKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJaWYgKGdldF9vaWRfaGV4KGxpbmUuYnVmLCAmb2lkKSkKKwkJCWRpZSgidW5rbm93biBsaW5lIGluICclcyc6ICVzIiwKKwkJCSAgICBnaXRfcGF0aF9tZXJnZV9oZWFkKHIpLCBsaW5lLmJ1Zik7CisJCXRhaWwgPSBhcHBlbmRfcGFyZW50KHIsIHRhaWwsICZvaWQpOworCX0KKwljbG9zZShtZXJnZV9oZWFkKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7Cit9CisKKy8qCisgKiBUaGlzIGlzbid0IGFzIHNpbXBsZSBhcyBwYXNzaW5nIHNiLT5idWYgYW5kIHNiLT5sZW4sIGJlY2F1c2Ugd2UKKyAqIHdhbnQgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgdG8gdGhlIGNvbW1pdCAoc28gd2UKKyAqIG11c3QgdXNlIGRldGFjaCkuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9jb21taXRfYnVmZmVyX2Zyb21fc3RyYnVmKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgIHN0cnVjdCBjb21taXQgKmMsCisJCQkJCSAgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJc2l6ZV90IGxlbjsKKwl2b2lkICpidWYgPSBzdHJidWZfZGV0YWNoKHNiLCAmbGVuKTsKKwlzZXRfY29tbWl0X2J1ZmZlcihyLCBjLCBidWYsIGxlbik7Cit9CisKKy8qCisgKiBQcmVwYXJlIGEgZHVtbXkgY29tbWl0IHRoYXQgcmVwcmVzZW50cyB0aGUgd29yayB0cmVlIChvciBzdGFnZWQpIGl0ZW0uCisgKiBOb3RlIHRoYXQgYW5ub3RhdGluZyB3b3JrIHRyZWUgaXRlbSBuZXZlciB3b3JrcyBpbiB0aGUgcmV2ZXJzZS4KKyAqLworc3RhdGljIHN0cnVjdCBjb21taXQgKmZha2Vfd29ya2luZ190cmVlX2NvbW1pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgICAgICBjb25zdCBjaGFyICpjb250ZW50c19mcm9tKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvcmlnaW47CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcGFyZW50X3RhaWwsICpwYXJlbnQ7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmlkZW50OworCXRpbWVfdCBub3c7CisJaW50IGxlbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCXVuc2lnbmVkIG1vZGU7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKworCXJlcG9fcmVhZF9pbmRleChyKTsKKwl0aW1lKCZub3cpOworCWNvbW1pdCA9IGFsbG9jX2NvbW1pdF9ub2RlKHIpOworCWNvbW1pdC0+b2JqZWN0LnBhcnNlZCA9IDE7CisJY29tbWl0LT5kYXRlID0gbm93OworCXBhcmVudF90YWlsID0gJmNvbW1pdC0+cGFyZW50czsKKworCWlmICghcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywgJmhlYWRfb2lkLCBOVUxMKSkKKwkJZGllKCJubyBzdWNoIHJlZjogSEVBRCIpOworCisJcGFyZW50X3RhaWwgPSBhcHBlbmRfcGFyZW50KHIsIHBhcmVudF90YWlsLCAmaGVhZF9vaWQpOworCWFwcGVuZF9tZXJnZV9wYXJlbnRzKHIsIHBhcmVudF90YWlsKTsKKwl2ZXJpZnlfd29ya2luZ190cmVlX3BhdGgociwgY29tbWl0LCBwYXRoKTsKKworCW9yaWdpbiA9IG1ha2Vfb3JpZ2luKGNvbW1pdCwgcGF0aCk7CisKKwlpZGVudCA9IGZtdF9pZGVudCgiTm90IENvbW1pdHRlZCBZZXQiLCAibm90LmNvbW1pdHRlZC55ZXQiLAorCQkJV0FOVF9CTEFOS19JREVOVCwgTlVMTCwgMCk7CisJc3RyYnVmX2FkZHN0cigmbXNnLCAidHJlZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXG4iKTsKKwlmb3IgKHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpCisJCXN0cmJ1Zl9hZGRmKCZtc2csICJwYXJlbnQgJXNcbiIsCisJCQkgICAgb2lkX3RvX2hleCgmcGFyZW50LT5pdGVtLT5vYmplY3Qub2lkKSk7CisJc3RyYnVmX2FkZGYoJm1zZywKKwkJICAgICJhdXRob3IgJXNcbiIKKwkJICAgICJjb21taXR0ZXIgJXNcblxuIgorCQkgICAgIlZlcnNpb24gb2YgJXMgZnJvbSAlc1xuIiwKKwkJICAgIGlkZW50LCBpZGVudCwgcGF0aCwKKwkJICAgICghY29udGVudHNfZnJvbSA/IHBhdGggOgorCQkgICAgICghc3RyY21wKGNvbnRlbnRzX2Zyb20sICItIikgPyAic3RhbmRhcmQgaW5wdXQiIDogY29udGVudHNfZnJvbSkpKTsKKwlzZXRfY29tbWl0X2J1ZmZlcl9mcm9tX3N0cmJ1ZihyLCBjb21taXQsICZtc2cpOworCisJaWYgKCFjb250ZW50c19mcm9tIHx8IHN0cmNtcCgiLSIsIGNvbnRlbnRzX2Zyb20pKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQljb25zdCBjaGFyICpyZWFkX2Zyb207CisJCWNoYXIgKmJ1Zl9wdHI7CisJCXVuc2lnbmVkIGxvbmcgYnVmX2xlbjsKKworCQlpZiAoY29udGVudHNfZnJvbSkgeworCQkJaWYgKHN0YXQoY29udGVudHNfZnJvbSwgJnN0KSA8IDApCisJCQkJZGllX2Vycm5vKCJDYW5ub3Qgc3RhdCAnJXMnIiwgY29udGVudHNfZnJvbSk7CisJCQlyZWFkX2Zyb20gPSBjb250ZW50c19mcm9tOworCQl9CisJCWVsc2UgeworCQkJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQorCQkJCWRpZV9lcnJubygiQ2Fubm90IGxzdGF0ICclcyciLCBwYXRoKTsKKwkJCXJlYWRfZnJvbSA9IHBhdGg7CisJCX0KKwkJbW9kZSA9IGNhbm9uX21vZGUoc3Quc3RfbW9kZSk7CisKKwkJc3dpdGNoIChzdC5zdF9tb2RlICYgU19JRk1UKSB7CisJCWNhc2UgU19JRlJFRzoKKwkJCWlmIChvcHQtPmZsYWdzLmFsbG93X3RleHRjb252ICYmCisJCQkgICAgdGV4dGNvbnZfb2JqZWN0KHIsIHJlYWRfZnJvbSwgbW9kZSwgJm51bGxfb2lkLCAwLCAmYnVmX3B0ciwgJmJ1Zl9sZW4pKQorCQkJCXN0cmJ1Zl9hdHRhY2goJmJ1ZiwgYnVmX3B0ciwgYnVmX2xlbiwgYnVmX2xlbiArIDEpOworCQkJZWxzZSBpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCByZWFkX2Zyb20sIHN0LnN0X3NpemUpICE9IHN0LnN0X3NpemUpCisJCQkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBvciByZWFkICclcyciLCByZWFkX2Zyb20pOworCQkJYnJlYWs7CisJCWNhc2UgU19JRkxOSzoKKwkJCWlmIChzdHJidWZfcmVhZGxpbmsoJmJ1ZiwgcmVhZF9mcm9tLCBzdC5zdF9zaXplKSA8IDApCisJCQkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZGxpbmsgJyVzJyIsIHJlYWRfZnJvbSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRpZSgidW5zdXBwb3J0ZWQgZmlsZSB0eXBlICVzIiwgcmVhZF9mcm9tKTsKKwkJfQorCX0KKwllbHNlIHsKKwkJLyogUmVhZGluZyBmcm9tIHN0ZGluICovCisJCW1vZGUgPSAwOworCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMCkgPCAwKQorCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gcmVhZCBmcm9tIHN0ZGluIik7CisJfQorCWNvbnZlcnRfdG9fZ2l0KHItPmluZGV4LCBwYXRoLCBidWYuYnVmLCBidWYubGVuLCAmYnVmLCAwKTsKKwlvcmlnaW4tPmZpbGUucHRyID0gYnVmLmJ1ZjsKKwlvcmlnaW4tPmZpbGUuc2l6ZSA9IGJ1Zi5sZW47CisJcHJldGVuZF9vYmplY3RfZmlsZShidWYuYnVmLCBidWYubGVuLCBPQkpfQkxPQiwgJm9yaWdpbi0+YmxvYl9vaWQpOworCisJLyoKKwkgKiBSZWFkIHRoZSBjdXJyZW50IGluZGV4LCByZXBsYWNlIHRoZSBwYXRoIGVudHJ5IHdpdGgKKwkgKiBvcmlnaW4tPmJsb2Jfc2hhMSB3aXRob3V0IG11Y2tpbmcgd2l0aCBpdHMgbW9kZSBvciB0eXBlCisJICogYml0czsgd2UgYXJlIG5vdCBnb2luZyB0byB3cml0ZSB0aGlzIGluZGV4IG91dCAtLSB3ZSBqdXN0CisJICogd2FudCB0byBydW4gImRpZmYtaW5kZXggLS1jYWNoZWQiLgorCSAqLworCWRpc2NhcmRfaW5kZXgoci0+aW5kZXgpOworCXJlcG9fcmVhZF9pbmRleChyKTsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAoIW1vZGUpIHsKKwkJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKHItPmluZGV4LCBwYXRoLCBsZW4pOworCQlpZiAoMCA8PSBwb3MpCisJCQltb2RlID0gci0+aW5kZXgtPmNhY2hlW3Bvc10tPmNlX21vZGU7CisJCWVsc2UKKwkJCS8qIExldCdzIG5vdCBib3RoZXIgcmVhZGluZyBmcm9tIEhFQUQgdHJlZSAqLworCQkJbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCX0KKwljZSA9IG1ha2VfZW1wdHlfY2FjaGVfZW50cnkoci0+aW5kZXgsIGxlbik7CisJb2lkY3B5KCZjZS0+b2lkLCAmb3JpZ2luLT5ibG9iX29pZCk7CisJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBsZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncygwKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCWFkZF9pbmRleF9lbnRyeShyLT5pbmRleCwgY2UsCisJCQlBRERfQ0FDSEVfT0tfVE9fQUREIHwgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UpOworCisJY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoci0+aW5kZXgsIHBhdGgpOworCisJcmV0dXJuIGNvbW1pdDsKK30KKworCisKK3N0YXRpYyBpbnQgZGlmZl9odW5rcyhtbWZpbGVfdCAqZmlsZV9hLCBtbWZpbGVfdCAqZmlsZV9iLAorCQkgICAgICB4ZGxfZW1pdF9odW5rX2NvbnN1bWVfZnVuY190IGh1bmtfZnVuYywgdm9pZCAqY2JfZGF0YSwgaW50IHhkbF9vcHRzKQoreworCXhwcGFyYW1fdCB4cHAgPSB7MH07CisJeGRlbWl0Y29uZl90IHhlY2ZnID0gezB9OworCXhkZW1pdGNiX3QgZWNiID0ge05VTEx9OworCisJeHBwLmZsYWdzID0geGRsX29wdHM7CisJeGVjZmcuaHVua19mdW5jID0gaHVua19mdW5jOworCWVjYi5wcml2ID0gY2JfZGF0YTsKKwlyZXR1cm4geGRpX2RpZmYoZmlsZV9hLCBmaWxlX2IsICZ4cHAsICZ4ZWNmZywgJmVjYik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfbmV4dF9saW5lKGNvbnN0IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpCit7CisJY29uc3QgY2hhciAqbmwgPSBtZW1jaHIoc3RhcnQsICdcbicsIGVuZCAtIHN0YXJ0KTsKKworCXJldHVybiBubCA/IG5sICsgMSA6IGVuZDsKK30KKworc3RhdGljIGludCBmaW5kX2xpbmVfc3RhcnRzKGludCAqKmxpbmVfc3RhcnRzLCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJY29uc3QgY2hhciAqZW5kID0gYnVmICsgbGVuOworCWNvbnN0IGNoYXIgKnA7CisJaW50ICpsaW5lbm87CisJaW50IG51bSA9IDA7CisKKwlmb3IgKHAgPSBidWY7IHAgPCBlbmQ7IHAgPSBnZXRfbmV4dF9saW5lKHAsIGVuZCkpCisJCW51bSsrOworCisJQUxMT0NfQVJSQVkoKmxpbmVfc3RhcnRzLCBudW0gKyAxKTsKKwlsaW5lbm8gPSAqbGluZV9zdGFydHM7CisKKwlmb3IgKHAgPSBidWY7IHAgPCBlbmQ7IHAgPSBnZXRfbmV4dF9saW5lKHAsIGVuZCkpCisJCSpsaW5lbm8rKyA9IHAgLSBidWY7CisKKwkqbGluZW5vID0gbGVuOworCisJcmV0dXJuIG51bTsKK30KKworc3RydWN0IGZpbmdlcnByaW50X2VudHJ5OworCisvKiBBIGZpbmdlcnByaW50IGlzIGludGVuZGVkIHRvIGxvb3NlbHkgcmVwcmVzZW50IGEgc3RyaW5nLCBzdWNoIHRoYXQgdHdvCisgKiBmaW5nZXJwcmludHMgY2FuIGJlIHF1aWNrbHkgY29tcGFyZWQgdG8gZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSBzaW1pbGFyaXR5CisgKiBvZiB0aGUgc3RyaW5ncyB0aGF0IHRoZXkgcmVwcmVzZW50LgorICoKKyAqIEEgZmluZ2VycHJpbnQgaXMgcmVwcmVzZW50ZWQgYXMgYSBtdWx0aXNldCBvZiB0aGUgbG93ZXItY2FzZWQgYnl0ZSBwYWlycyBpbgorICogdGhlIHN0cmluZyB0aGF0IGl0IHJlcHJlc2VudHMuIFdoaXRlc3BhY2UgaXMgYWRkZWQgYXQgZWFjaCBlbmQgb2YgdGhlCisgKiBzdHJpbmcuIFdoaXRlc3BhY2UgcGFpcnMgYXJlIGlnbm9yZWQuIFdoaXRlc3BhY2UgaXMgY29udmVydGVkIHRvICdcMCcuCisgKiBGb3IgZXhhbXBsZSwgdGhlIHN0cmluZyAiRGFydGggICBSYWRhciIgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIGZvbGxvd2luZworICogZmluZ2VycHJpbnQ6CisgKiB7IlwwZCIsICJkYSIsICJkYSIsICJhciIsICJhciIsICJydCIsICJ0aCIsICJoXDAiLCAiXDByIiwgInJhIiwgImFkIiwgInJcMCJ9CisgKgorICogVGhlIHNpbWlsYXJpdHkgYmV0d2VlbiB0d28gZmluZ2VycHJpbnRzIGlzIHRoZSBzaXplIG9mIHRoZSBpbnRlcnNlY3Rpb24gb2YKKyAqIHRoZWlyIG11bHRpc2V0cywgaW5jbHVkaW5nIHJlcGVhdGVkIGVsZW1lbnRzLiBTZWUgZmluZ2VycHJpbnRfc2ltaWxhcml0eSBmb3IKKyAqIGV4YW1wbGVzLgorICoKKyAqIEZvciBlYXNlIG9mIGltcGxlbWVudGF0aW9uLCB0aGUgZmluZ2VycHJpbnQgaXMgaW1wbGVtZW50ZWQgYXMgYSBtYXAKKyAqIG9mIGJ5dGUgcGFpcnMgdG8gdGhlIGNvdW50IG9mIHRoYXQgYnl0ZSBwYWlyIGluIHRoZSBzdHJpbmcsIGluc3RlYWQgb2YKKyAqIGFsbG93aW5nIHJlcGVhdGVkIGVsZW1lbnRzIGluIGEgc2V0LgorICovCitzdHJ1Y3QgZmluZ2VycHJpbnQgeworCXN0cnVjdCBoYXNobWFwIG1hcDsKKwkvKiBBcyB3ZSBrbm93IHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIGFkdmFuY2UsIGl0J3MKKwkgKiBjb252ZW5pZW50IHRvIHN0b3JlIHRoZSBlbnRyaWVzIGluIGEgc2luZ2xlIGFycmF5IGluc3RlYWQgb2YgaGF2aW5nCisJICogdGhlIGhhc2htYXAgbWFuYWdlIHRoZSBtZW1vcnkuCisJICovCisJc3RydWN0IGZpbmdlcnByaW50X2VudHJ5ICplbnRyaWVzOworfTsKKworLyogQSBieXRlIHBhaXIgaW4gYSBmaW5nZXJwcmludC4gU3RvcmVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGJ5dGUgcGFpcgorICogb2NjdXJzIGluIHRoZSBzdHJpbmcgdGhhdCB0aGUgZmluZ2VycHJpbnQgcmVwcmVzZW50cy4KKyAqLworc3RydWN0IGZpbmdlcnByaW50X2VudHJ5IHsKKwkvKiBUaGUgaGFzaG1hcCBlbnRyeSAtIHRoZSBoYXNoIHJlcHJlc2VudHMgdGhlIGJ5dGUgcGFpciBpbiBpdHMKKwkgKiBlbnRpcmV0eSBzbyB3ZSBkb24ndCBuZWVkIHRvIHN0b3JlIHRoZSBieXRlIHBhaXIgc2VwYXJhdGVseS4KKwkgKi8KKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwkvKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBieXRlIHBhaXIgb2NjdXJzIGluIHRoZSBzdHJpbmcgdGhhdCB0aGUKKwkgKiBmaW5nZXJwcmludCByZXByZXNlbnRzLgorCSAqLworCWludCBjb3VudDsKK307CisKKy8qIFNlZSBgc3RydWN0IGZpbmdlcnByaW50YCBmb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2hhdCBhIGZpbmdlcnByaW50IGlzLgorICogXHBhcmFtIHJlc3VsdCB0aGUgZmluZ2VycHJpbnQgb2YgdGhlIHN0cmluZyBpcyBzdG9yZWQgaGVyZS4gVGhpcyBtdXN0IGJlCisgKiAJCSBmcmVlZCBsYXRlciB1c2luZyBmcmVlX2ZpbmdlcnByaW50LgorICogXHBhcmFtIGxpbmVfYmVnaW4gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcKKyAqIFxwYXJhbSBsaW5lX2VuZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAqLworc3RhdGljIHZvaWQgZ2V0X2ZpbmdlcnByaW50KHN0cnVjdCBmaW5nZXJwcmludCAqcmVzdWx0LAorCQkJICAgIGNvbnN0IGNoYXIgKmxpbmVfYmVnaW4sCisJCQkgICAgY29uc3QgY2hhciAqbGluZV9lbmQpCit7CisJdW5zaWduZWQgaW50IGhhc2gsIGMwID0gMCwgYzE7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgbWF4X21hcF9lbnRyeV9jb3VudCA9IDEgKyBsaW5lX2VuZCAtIGxpbmVfYmVnaW47CisJc3RydWN0IGZpbmdlcnByaW50X2VudHJ5ICplbnRyeSA9IHhjYWxsb2MobWF4X21hcF9lbnRyeV9jb3VudCwKKwkJc2l6ZW9mKHN0cnVjdCBmaW5nZXJwcmludF9lbnRyeSkpOworCXN0cnVjdCBmaW5nZXJwcmludF9lbnRyeSAqZm91bmRfZW50cnk7CisKKwloYXNobWFwX2luaXQoJnJlc3VsdC0+bWFwLCBOVUxMLCBOVUxMLCBtYXhfbWFwX2VudHJ5X2NvdW50KTsKKwlyZXN1bHQtPmVudHJpZXMgPSBlbnRyeTsKKwlmb3IgKHAgPSBsaW5lX2JlZ2luOyBwIDw9IGxpbmVfZW5kOyArK3AsIGMwID0gYzEpIHsKKwkJLyogQWx3YXlzIHRlcm1pbmF0ZSB0aGUgc3RyaW5nIHdpdGggd2hpdGVzcGFjZS4KKwkJICogTm9ybWFsaXNlIHdoaXRlc3BhY2UgdG8gMCwgYW5kIG5vcm1hbGlzZSBsZXR0ZXJzIHRvCisJCSAqIGxvd2VyIGNhc2UuIFRoaXMgd29uJ3Qgd29yayBmb3IgbXVsdGlieXRlIGNoYXJhY3RlcnMgYnV0IGF0CisJCSAqIHdvcnN0IHdpbGwgbWF0Y2ggc29tZSB1bnJlbGF0ZWQgY2hhcmFjdGVycy4KKwkJICovCisJCWlmICgocCA9PSBsaW5lX2VuZCkgfHwgaXNzcGFjZSgqcCkpCisJCQljMSA9IDA7CisJCWVsc2UKKwkJCWMxID0gdG9sb3dlcigqcCk7CisJCWhhc2ggPSBjMCB8IChjMSA8PCA4KTsKKwkJLyogSWdub3JlIHdoaXRlc3BhY2UgcGFpcnMgKi8KKwkJaWYgKGhhc2ggPT0gMCkKKwkJCWNvbnRpbnVlOworCQloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnRyeSwgaGFzaCk7CisKKwkJZm91bmRfZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeSgmcmVzdWx0LT5tYXAsIGVudHJ5LAorCQkJCQkJLyogbWVtYmVyIG5hbWUgKi8gZW50cnksIE5VTEwpOworCQlpZiAoZm91bmRfZW50cnkpIHsKKwkJCWZvdW5kX2VudHJ5LT5jb3VudCArPSAxOworCQl9IGVsc2UgeworCQkJZW50cnktPmNvdW50ID0gMTsKKwkJCWhhc2htYXBfYWRkKCZyZXN1bHQtPm1hcCwgJmVudHJ5LT5lbnRyeSk7CisJCQkrK2VudHJ5OworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2ZpbmdlcnByaW50KHN0cnVjdCBmaW5nZXJwcmludCAqZikKK3sKKwloYXNobWFwX2ZyZWUoJmYtPm1hcCk7CisJZnJlZShmLT5lbnRyaWVzKTsKK30KKworLyogQ2FsY3VsYXRlcyB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIHR3byBmaW5nZXJwcmludHMgYXMgdGhlIHNpemUgb2YgdGhlCisgKiBpbnRlcnNlY3Rpb24gb2YgdGhlaXIgbXVsdGlzZXRzLCBpbmNsdWRpbmcgcmVwZWF0ZWQgZWxlbWVudHMuIFNlZQorICogYHN0cnVjdCBmaW5nZXJwcmludGAgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBmaW5nZXJwcmludCByZXByZXNlbnRhdGlvbi4KKyAqIFRoZSBzaW1pbGFyaXR5IGJldHdlZW4gImNhdCBtYXQiIGFuZCAiZmF0aGVyIHJhdGhlciIgaXMgMiBiZWNhdXNlICJhdCIgaXMKKyAqIHByZXNlbnQgdHdpY2UgaW4gYm90aCBzdHJpbmdzIHdoaWxlIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gInRpbSIgYW5kICJtaXQiCisgKiBpcyAwLgorICovCitzdGF0aWMgaW50IGZpbmdlcnByaW50X3NpbWlsYXJpdHkoc3RydWN0IGZpbmdlcnByaW50ICphLCBzdHJ1Y3QgZmluZ2VycHJpbnQgKmIpCit7CisJaW50IGludGVyc2VjdGlvbiA9IDA7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCWNvbnN0IHN0cnVjdCBmaW5nZXJwcmludF9lbnRyeSAqZW50cnlfYSwgKmVudHJ5X2I7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZiLT5tYXAsICZpdGVyLCBlbnRyeV9iLAorCQkJCWVudHJ5IC8qIG1lbWJlciBuYW1lICovKSB7CisJCWVudHJ5X2EgPSBoYXNobWFwX2dldF9lbnRyeSgmYS0+bWFwLCBlbnRyeV9iLCBlbnRyeSwgTlVMTCk7CisJCWlmIChlbnRyeV9hKSB7CisJCQlpbnRlcnNlY3Rpb24gKz0gZW50cnlfYS0+Y291bnQgPCBlbnRyeV9iLT5jb3VudCA/CisJCQkJCWVudHJ5X2EtPmNvdW50IDogZW50cnlfYi0+Y291bnQ7CisJCX0KKwl9CisJcmV0dXJuIGludGVyc2VjdGlvbjsKK30KKworLyogU3VidHJhY3RzIGJ5dGUtcGFpciBlbGVtZW50cyBpbiBCIGZyb20gQSwgbW9kaWZ5aW5nIEEgaW4gcGxhY2UuCisgKi8KK3N0YXRpYyB2b2lkIGZpbmdlcnByaW50X3N1YnRyYWN0KHN0cnVjdCBmaW5nZXJwcmludCAqYSwgc3RydWN0IGZpbmdlcnByaW50ICpiKQoreworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZmluZ2VycHJpbnRfZW50cnkgKmVudHJ5X2E7CisJY29uc3Qgc3RydWN0IGZpbmdlcnByaW50X2VudHJ5ICplbnRyeV9iOworCisJaGFzaG1hcF9pdGVyX2luaXQoJmItPm1hcCwgJml0ZXIpOworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmYi0+bWFwLCAmaXRlciwgZW50cnlfYiwKKwkJCQllbnRyeSAvKiBtZW1iZXIgbmFtZSAqLykgeworCQllbnRyeV9hID0gaGFzaG1hcF9nZXRfZW50cnkoJmEtPm1hcCwgZW50cnlfYiwgZW50cnksIE5VTEwpOworCQlpZiAoZW50cnlfYSkgeworCQkJaWYgKGVudHJ5X2EtPmNvdW50IDw9IGVudHJ5X2ItPmNvdW50KQorCQkJCWhhc2htYXBfcmVtb3ZlKCZhLT5tYXAsICZlbnRyeV9iLT5lbnRyeSwgTlVMTCk7CisJCQllbHNlCisJCQkJZW50cnlfYS0+Y291bnQgLT0gZW50cnlfYi0+Y291bnQ7CisJCX0KKwl9Cit9CisKKy8qIENhbGN1bGF0ZSBmaW5nZXJwcmludHMgZm9yIGEgc2VyaWVzIG9mIGxpbmVzLgorICogUHV0cyB0aGUgZmluZ2VycHJpbnRzIGluIHRoZSBmaW5nZXJwcmludHMgYXJyYXksIHdoaWNoIG11c3QgaGF2ZSBiZWVuCisgKiBwcmVhbGxvY2F0ZWQgdG8gYWxsb3cgc3RvcmluZyBsaW5lX2NvdW50IGVsZW1lbnRzLgorICovCitzdGF0aWMgdm9pZCBnZXRfbGluZV9maW5nZXJwcmludHMoc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHMsCisJCQkJICBjb25zdCBjaGFyICpjb250ZW50LCBjb25zdCBpbnQgKmxpbmVfc3RhcnRzLAorCQkJCSAgbG9uZyBmaXJzdF9saW5lLCBsb25nIGxpbmVfY291bnQpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqbGluZXN0YXJ0LCAqbGluZWVuZDsKKworCWxpbmVfc3RhcnRzICs9IGZpcnN0X2xpbmU7CisJZm9yIChpID0gMDsgaSA8IGxpbmVfY291bnQ7ICsraSkgeworCQlsaW5lc3RhcnQgPSBjb250ZW50ICsgbGluZV9zdGFydHNbaV07CisJCWxpbmVlbmQgPSBjb250ZW50ICsgbGluZV9zdGFydHNbaSArIDFdOworCQlnZXRfZmluZ2VycHJpbnQoZmluZ2VycHJpbnRzICsgaSwgbGluZXN0YXJ0LCBsaW5lZW5kKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbGluZV9maW5nZXJwcmludHMoc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHMsCisJCQkJICAgaW50IG5yX2ZpbmdlcnByaW50cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9maW5nZXJwcmludHM7IGkrKykKKwkJZnJlZV9maW5nZXJwcmludCgmZmluZ2VycHJpbnRzW2ldKTsKK30KKworLyogVGhpcyBjb250YWlucyB0aGUgZGF0YSBuZWNlc3NhcnkgdG8gbGluZWFybHkgbWFwIGEgbGluZSBudW1iZXIgaW4gb25lIGhhbGYKKyAqIG9mIGEgZGlmZiBjaHVuayB0byB0aGUgbGluZSBpbiB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgZGlmZiBjaHVuayB0aGF0IGlzCisgKiBjbG9zZXN0IGluIHRlcm1zIG9mIGl0cyBwb3NpdGlvbiBhcyBhIGZyYWN0aW9uIG9mIHRoZSBsZW5ndGggb2YgdGhlIGNodW5rLgorICovCitzdHJ1Y3QgbGluZV9udW1iZXJfbWFwcGluZyB7CisJaW50IGRlc3RpbmF0aW9uX3N0YXJ0LCBkZXN0aW5hdGlvbl9sZW5ndGgsCisJCXNvdXJjZV9zdGFydCwgc291cmNlX2xlbmd0aDsKK307CisKKy8qIEdpdmVuIGEgbGluZSBudW1iZXIgaW4gb25lIHJhbmdlLCBvZmZzZXQgYW5kIHNjYWxlIGl0IHRvIG1hcCBpdCBvbnRvIHRoZQorICogb3RoZXIgcmFuZ2UuCisgKiBFc3NlbnRpYWxseSB0aGlzIG1hcHBpbmcgaXMgYSBzaW1wbGUgbGluZWFyIGVxdWF0aW9uIGJ1dCB0aGUgY2FsY3VsYXRpb24gaXMKKyAqIG1vcmUgY29tcGxpY2F0ZWQgdG8gYWxsb3cgcGVyZm9ybWluZyBpdCB3aXRoIGludGVnZXIgb3BlcmF0aW9ucy4KKyAqIEFub3RoZXIgY29tcGxpY2F0aW9uIGlzIHRoYXQgaWYgYSBsaW5lIGNvdWxkIG1hcCBvbnRvIG1hbnkgbGluZXMgaW4gdGhlCisgKiBkZXN0aW5hdGlvbiByYW5nZSB0aGVuIHdlIHdhbnQgdG8gY2hvb3NlIHRoZSBsaW5lIGF0IHRoZSBjZW50ZXIgb2YgdGhvc2UKKyAqIHBvc3NpYmlsaXRpZXMuCisgKiBFeGFtcGxlOiBpZiB0aGUgY2h1bmsgaXMgMiBsaW5lcyBsb25nIGluIEEgYW5kIDEwIGxpbmVzIGxvbmcgaW4gQiB0aGVuIHRoZQorICogZmlyc3QgNSBsaW5lcyBpbiBCIHdpbGwgbWFwIG9udG8gdGhlIGZpcnN0IGxpbmUgaW4gdGhlIEEgY2h1bmssIHdoaWxlIHRoZQorICogbGFzdCA1IGxpbmVzIHdpbGwgYWxsIG1hcCBvbnRvIHRoZSBzZWNvbmQgbGluZSBpbiB0aGUgQSBjaHVuay4KKyAqIEV4YW1wbGU6IGlmIHRoZSBjaHVuayBpcyAxMCBsaW5lcyBsb25nIGluIEEgYW5kIDIgbGluZXMgbG9uZyBpbiBCIHRoZW4gbGluZQorICogMCBpbiBCIHdpbGwgbWFwIG9udG8gbGluZSAyIGluIEEsIGFuZCBsaW5lIDEgaW4gQiB3aWxsIG1hcCBvbnRvIGxpbmUgNyBpbiBBLgorICovCitzdGF0aWMgaW50IG1hcF9saW5lX251bWJlcihpbnQgbGluZV9udW1iZXIsCisJY29uc3Qgc3RydWN0IGxpbmVfbnVtYmVyX21hcHBpbmcgKm1hcHBpbmcpCit7CisJcmV0dXJuICgobGluZV9udW1iZXIgLSBtYXBwaW5nLT5zb3VyY2Vfc3RhcnQpICogMiArIDEpICoKKwkgICAgICAgbWFwcGluZy0+ZGVzdGluYXRpb25fbGVuZ3RoIC8KKwkgICAgICAgKG1hcHBpbmctPnNvdXJjZV9sZW5ndGggKiAyKSArCisJICAgICAgIG1hcHBpbmctPmRlc3RpbmF0aW9uX3N0YXJ0OworfQorCisvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50IHN0b3JpbmcgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBhIGxpbmUgaW4gQQorICogYW5kIGEgbGluZSBpbiBCLgorICoKKyAqIFRoZSBzaW1pbGFyaXRpZXMgYXJlIHN0b3JlZCBpbiBhIDItZGltZW5zaW9uYWwgYXJyYXkuIEVhY2ggInJvdyIgaW4gdGhlCisgKiBhcnJheSBjb250YWlucyB0aGUgc2ltaWxhcml0aWVzIGZvciBhIGxpbmUgaW4gQi4gVGhlIHNpbWlsYXJpdGllcyBzdG9yZWQgaW4KKyAqIGEgcm93IGFyZSB0aGUgc2ltaWxhcml0aWVzIGJldHdlZW4gdGhlIGxpbmUgaW4gQiBhbmQgdGhlIG5lYXJieSBsaW5lcyBpbiBBLgorICogVG8ga2VlcCB0aGUgbGVuZ3RoIG9mIGVhY2ggcm93IHRoZSBzYW1lLCBpdCBpcyBwYWRkZWQgb3V0IHdpdGggdmFsdWVzIG9mIC0xCisgKiB3aGVyZSB0aGUgc2VhcmNoIHJhbmdlIGV4dGVuZHMgYmV5b25kIHRoZSBsaW5lcyBpbiBBLgorICogRm9yIGV4YW1wbGUsIGlmIG1heF9zZWFyY2hfZGlzdGFuY2VfYSBpcyAyIGFuZCB0aGUgdHdvIHNpZGVzIG9mIGEgZGlmZiBjaHVuaworICogbG9vayBsaWtlIHRoaXM6CisgKiBhIHwgbQorICogYiB8IG4KKyAqIGMgfCBvCisgKiBkIHwgcAorICogZSB8IHEKKyAqIFRoZW4gdGhlIHNpbWlsYXJpdHkgYXJyYXkgd2lsbCBjb250YWluOgorICogWy0xLCAtMSwgYW0sIGJtLCBjbSwKKyAqICAtMSwgYW4sIGJuLCBjbiwgZG4sCisgKiAgYW8sIGJvLCBjbywgZG8sIGVvLAorICogIGJwLCBjcCwgZHAsIGVwLCAtMSwKKyAqICBjcSwgZHEsIGVxLCAtMSwgLTFdCisgKiBXaGVyZSBzaW1pbGFyaXRpZXMgYXJlIGRlbm90ZWQgZWl0aGVyIGJ5IC0xIGZvciBpbnZhbGlkLCBvciB0aGUKKyAqIGNvbmNhdGVuYXRpb24gb2YgdGhlIHR3byBsaW5lcyBpbiB0aGUgZGlmZiBiZWluZyBjb21wYXJlZC4KKyAqCisgKiBccGFyYW0gc2ltaWxhcml0aWVzIGFycmF5IG9mIHNpbWlsYXJpdGllcyBiZXR3ZWVuIGxpbmVzIGluIEEgYW5kIEIKKyAqIFxwYXJhbSBsaW5lX2EgdGhlIGluZGV4IG9mIHRoZSBsaW5lIGluIEEsIGluIHRoZSBzYW1lIGZyYW1lIG9mIHJlZmVyZW5jZSBhcworICoJY2xvc2VzdF9saW5lX2EuCisgKiBccGFyYW0gbG9jYWxfbGluZV9iIHRoZSBpbmRleCBvZiB0aGUgbGluZSBpbiBCLCByZWxhdGl2ZSB0byB0aGUgZmlyc3QgbGluZQorICoJCSAgICAgICBpbiBCIHRoYXQgc2ltaWxhcml0aWVzIHJlcHJlc2VudHMuCisgKiBccGFyYW0gY2xvc2VzdF9saW5lX2EgdGhlIGluZGV4IG9mIHRoZSBsaW5lIGluIEEgdGhhdCBpcyBkZWVtZWQgdG8gYmUKKyAqCQkJIGNsb3Nlc3QgdG8gbG9jYWxfbGluZV9iLiBUaGlzIG11c3QgYmUgaW4gdGhlIHNhbWUKKyAqCQkJIGZyYW1lIG9mIHJlZmVyZW5jZSBhcyBsaW5lX2EuIFRoaXMgdmFsdWUgZGVmaW5lcworICoJCQkgd2hlcmUgc2ltaWxhcml0aWVzIGlzIGNlbnRlcmVkIGZvciB0aGUgbGluZSBpbiBCLgorICogXHBhcmFtIG1heF9zZWFyY2hfZGlzdGFuY2VfYSBtYXhpbXVtIGRpc3RhbmNlIGluIGxpbmVzIGZyb20gdGhlIGNsb3Nlc3QgbGluZQorICogCQkJCWluIEEgZm9yIG90aGVyIGxpbmVzIGluIEEgZm9yIHdoaWNoCisgKiAJCQkJc2ltaWxhcml0aWVzIG1heSBiZSBjYWxjdWxhdGVkLgorICovCitzdGF0aWMgaW50ICpnZXRfc2ltaWxhcml0eShpbnQgKnNpbWlsYXJpdGllcywKKwkJCSAgIGludCBsaW5lX2EsIGludCBsb2NhbF9saW5lX2IsCisJCQkgICBpbnQgY2xvc2VzdF9saW5lX2EsIGludCBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EpCit7CisJYXNzZXJ0KGFicyhsaW5lX2EgLSBjbG9zZXN0X2xpbmVfYSkgPD0KKwkgICAgICAgbWF4X3NlYXJjaF9kaXN0YW5jZV9hKTsKKwlyZXR1cm4gc2ltaWxhcml0aWVzICsgbGluZV9hIC0gY2xvc2VzdF9saW5lX2EgKworCSAgICAgICBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgKworCSAgICAgICBsb2NhbF9saW5lX2IgKiAobWF4X3NlYXJjaF9kaXN0YW5jZV9hICogMiArIDEpOworfQorCisjZGVmaW5lIENFUlRBSU5fTk9USElOR19NQVRDSEVTIC0yCisjZGVmaW5lIENFUlRBSU5UWV9OT1RfQ0FMQ1VMQVRFRCAtMQorCisvKiBHaXZlbiBhIGxpbmUgaW4gQiwgZmlyc3QgY2FsY3VsYXRlIGl0cyBzaW1pbGFyaXRpZXMgd2l0aCBuZWFyYnkgbGluZXMgaW4gQQorICogaWYgbm90IGFscmVhZHkgY2FsY3VsYXRlZCwgdGhlbiBpZGVudGlmeSB0aGUgbW9zdCBzaW1pbGFyIGFuZCBzZWNvbmQgbW9zdAorICogc2ltaWxhciBsaW5lcy4gVGhlICJjZXJ0YWludHkiIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhvc2UgdHdvCisgKiBzaW1pbGFyaXRpZXMuCisgKgorICogXHBhcmFtIHN0YXJ0X2EgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjaHVuayBpbiBBCisgKiBccGFyYW0gbGVuZ3RoX2EgdGhlIGxlbmd0aCBpbiBsaW5lcyBvZiB0aGUgY2h1bmsgaW4gQQorICogXHBhcmFtIGxvY2FsX2xpbmVfYiB0aGUgaW5kZXggb2YgdGhlIGxpbmUgaW4gQiwgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGxpbmUKKyAqIAkJICAgICAgIGluIHRoZSBjaHVuay4KKyAqIFxwYXJhbSBmaW5nZXJwcmludHNfYSBhcnJheSBvZiBmaW5nZXJwcmludHMgZm9yIHRoZSBjaHVuayBpbiBBCisgKiBccGFyYW0gZmluZ2VycHJpbnRzX2IgYXJyYXkgb2YgZmluZ2VycHJpbnRzIGZvciB0aGUgY2h1bmsgaW4gQgorICogXHBhcmFtIHNpbWlsYXJpdGllcyAyLWRpbWVuc2lvbmFsIGFycmF5IG9mIHNpbWlsYXJpdGllcyBiZXR3ZWVuIGxpbmVzIGluIEEKKyAqIAkJICAgICAgIGFuZCBCLiBTZWUgZ2V0X3NpbWlsYXJpdHkoKSBmb3IgbW9yZSBkZXRhaWxzLgorICogXHBhcmFtIGNlcnRhaW50aWVzIGFycmF5IG9mIHZhbHVlcyBpbmRpY2F0aW5nIGhvdyBzdHJvbmdseSBhIGxpbmUgaW4gQiBpcworICogCQkgICAgICBtYXRjaGVkIHdpdGggc29tZSBsaW5lIGluIEEuCisgKiBccGFyYW0gc2Vjb25kX2Jlc3RfcmVzdWx0IGFycmF5IG9mIGFic29sdXRlIGluZGljZXMgaW4gQSBmb3IgdGhlIHNlY29uZAorICogCQkJICAgICBjbG9zZXN0IG1hdGNoIG9mIGEgbGluZSBpbiBCLgorICogXHBhcmFtIHJlc3VsdCBhcnJheSBvZiBhYnNvbHV0ZSBpbmRpY2VzIGluIEEgZm9yIHRoZSBjbG9zZXN0IG1hdGNoIG9mIGEgbGluZQorICogCQkgaW4gQi4KKyAqIFxwYXJhbSBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgbWF4aW11bSBkaXN0YW5jZSBpbiBsaW5lcyBmcm9tIHRoZSBjbG9zZXN0IGxpbmUKKyAqIAkJCQlpbiBBIGZvciBvdGhlciBsaW5lcyBpbiBBIGZvciB3aGljaAorICogCQkJCXNpbWlsYXJpdGllcyBtYXkgYmUgY2FsY3VsYXRlZC4KKyAqIFxwYXJhbSBtYXBfbGluZV9udW1iZXJfaW5fYl90b19hIHBhcmFtZXRlciB0byBtYXBfbGluZV9udW1iZXIoKS4KKyAqLworc3RhdGljIHZvaWQgZmluZF9iZXN0X2xpbmVfbWF0Y2hlcygKKwlpbnQgc3RhcnRfYSwKKwlpbnQgbGVuZ3RoX2EsCisJaW50IHN0YXJ0X2IsCisJaW50IGxvY2FsX2xpbmVfYiwKKwlzdHJ1Y3QgZmluZ2VycHJpbnQgKmZpbmdlcnByaW50c19hLAorCXN0cnVjdCBmaW5nZXJwcmludCAqZmluZ2VycHJpbnRzX2IsCisJaW50ICpzaW1pbGFyaXRpZXMsCisJaW50ICpjZXJ0YWludGllcywKKwlpbnQgKnNlY29uZF9iZXN0X3Jlc3VsdCwKKwlpbnQgKnJlc3VsdCwKKwljb25zdCBpbnQgbWF4X3NlYXJjaF9kaXN0YW5jZV9hLAorCWNvbnN0IHN0cnVjdCBsaW5lX251bWJlcl9tYXBwaW5nICptYXBfbGluZV9udW1iZXJfaW5fYl90b19hKQoreworCisJaW50IGksIHNlYXJjaF9zdGFydCwgc2VhcmNoX2VuZCwgY2xvc2VzdF9sb2NhbF9saW5lX2EsICpzaW1pbGFyaXR5LAorCQliZXN0X3NpbWlsYXJpdHkgPSAwLCBzZWNvbmRfYmVzdF9zaW1pbGFyaXR5ID0gMCwKKwkJYmVzdF9zaW1pbGFyaXR5X2luZGV4ID0gMCwgc2Vjb25kX2Jlc3Rfc2ltaWxhcml0eV9pbmRleCA9IDA7CisKKwkvKiBjZXJ0YWludHkgaGFzIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIHNvIG5vIG5lZWQgdG8gcmVkbyB0aGUgd29yayAqLworCWlmIChjZXJ0YWludGllc1tsb2NhbF9saW5lX2JdICE9IENFUlRBSU5UWV9OT1RfQ0FMQ1VMQVRFRCkKKwkJcmV0dXJuOworCisJY2xvc2VzdF9sb2NhbF9saW5lX2EgPSBtYXBfbGluZV9udW1iZXIoCisJCWxvY2FsX2xpbmVfYiArIHN0YXJ0X2IsIG1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpIC0gc3RhcnRfYTsKKworCXNlYXJjaF9zdGFydCA9IGNsb3Nlc3RfbG9jYWxfbGluZV9hIC0gbWF4X3NlYXJjaF9kaXN0YW5jZV9hOworCWlmIChzZWFyY2hfc3RhcnQgPCAwKQorCQlzZWFyY2hfc3RhcnQgPSAwOworCisJc2VhcmNoX2VuZCA9IGNsb3Nlc3RfbG9jYWxfbGluZV9hICsgbWF4X3NlYXJjaF9kaXN0YW5jZV9hICsgMTsKKwlpZiAoc2VhcmNoX2VuZCA+IGxlbmd0aF9hKQorCQlzZWFyY2hfZW5kID0gbGVuZ3RoX2E7CisKKwlmb3IgKGkgPSBzZWFyY2hfc3RhcnQ7IGkgPCBzZWFyY2hfZW5kOyArK2kpIHsKKwkJc2ltaWxhcml0eSA9IGdldF9zaW1pbGFyaXR5KHNpbWlsYXJpdGllcywKKwkJCQkJICAgIGksIGxvY2FsX2xpbmVfYiwKKwkJCQkJICAgIGNsb3Nlc3RfbG9jYWxfbGluZV9hLAorCQkJCQkgICAgbWF4X3NlYXJjaF9kaXN0YW5jZV9hKTsKKwkJaWYgKCpzaW1pbGFyaXR5ID09IC0xKSB7CisJCQkvKiBUaGlzIHZhbHVlIHdpbGwgbmV2ZXIgZXhjZWVkIDEwIGJ1dCBhc3NlcnQganVzdCBpbgorCQkJICogY2FzZQorCQkJICovCisJCQlhc3NlcnQoYWJzKGkgLSBjbG9zZXN0X2xvY2FsX2xpbmVfYSkgPCAxMDAwKTsKKwkJCS8qIHNjYWxlIHRoZSBzaW1pbGFyaXR5IGJ5ICgxMDAwIC0gZGlzdGFuY2UgZnJvbQorCQkJICogY2xvc2VzdCBsaW5lKSB0byBhY3QgYXMgYSB0aWUgYnJlYWsgYmV0d2VlbiBsaW5lcworCQkJICogdGhhdCBvdGhlcndpc2UgYXJlIGVxdWFsbHkgc2ltaWxhci4KKwkJCSAqLworCQkJKnNpbWlsYXJpdHkgPSBmaW5nZXJwcmludF9zaW1pbGFyaXR5KAorCQkJCWZpbmdlcnByaW50c19iICsgbG9jYWxfbGluZV9iLAorCQkJCWZpbmdlcnByaW50c19hICsgaSkgKgorCQkJCSgxMDAwIC0gYWJzKGkgLSBjbG9zZXN0X2xvY2FsX2xpbmVfYSkpOworCQl9CisJCWlmICgqc2ltaWxhcml0eSA+IGJlc3Rfc2ltaWxhcml0eSkgeworCQkJc2Vjb25kX2Jlc3Rfc2ltaWxhcml0eSA9IGJlc3Rfc2ltaWxhcml0eTsKKwkJCXNlY29uZF9iZXN0X3NpbWlsYXJpdHlfaW5kZXggPSBiZXN0X3NpbWlsYXJpdHlfaW5kZXg7CisJCQliZXN0X3NpbWlsYXJpdHkgPSAqc2ltaWxhcml0eTsKKwkJCWJlc3Rfc2ltaWxhcml0eV9pbmRleCA9IGk7CisJCX0gZWxzZSBpZiAoKnNpbWlsYXJpdHkgPiBzZWNvbmRfYmVzdF9zaW1pbGFyaXR5KSB7CisJCQlzZWNvbmRfYmVzdF9zaW1pbGFyaXR5ID0gKnNpbWlsYXJpdHk7CisJCQlzZWNvbmRfYmVzdF9zaW1pbGFyaXR5X2luZGV4ID0gaTsKKwkJfQorCX0KKworCWlmIChiZXN0X3NpbWlsYXJpdHkgPT0gMCkgeworCQkvKiB0aGlzIGxpbmUgZGVmaW5pdGVseSBkb2Vzbid0IG1hdGNoIHdpdGggYW55dGhpbmcuIE1hcmsgaXQKKwkJICogd2l0aCB0aGlzIHNwZWNpYWwgdmFsdWUgc28gaXQgZG9lc24ndCBnZXQgaW52YWxpZGF0ZWQgYW5kCisJCSAqIHdvbid0IGJlIHJlY2FsY3VsYXRlZC4KKwkJICovCisJCWNlcnRhaW50aWVzW2xvY2FsX2xpbmVfYl0gPSBDRVJUQUlOX05PVEhJTkdfTUFUQ0hFUzsKKwkJcmVzdWx0W2xvY2FsX2xpbmVfYl0gPSAtMTsKKwl9IGVsc2UgeworCQkvKiBDYWxjdWxhdGUgdGhlIGNlcnRhaW50eSB3aXRoIHdoaWNoIHRoaXMgbGluZSBtYXRjaGVzLgorCQkgKiBJZiB0aGUgbGluZSBtYXRjaGVzIHdlbGwgd2l0aCB0d28gbGluZXMgdGhlbiB0aGF0IHJlZHVjZXMKKwkJICogdGhlIGNlcnRhaW50eS4gSG93ZXZlciB3ZSBzdGlsbCB3YW50IHRvIHByaW9yaXRpc2UgbWF0Y2hpbmcKKwkJICogYSBsaW5lIHRoYXQgbWF0Y2hlcyB2ZXJ5IHdlbGwgd2l0aCB0d28gbGluZXMgb3ZlciBtYXRjaGluZyBhCisJCSAqIGxpbmUgdGhhdCBtYXRjaGVzIHBvb3JseSB3aXRoIG9uZSBsaW5lLCBoZW5jZSBkb3VibGluZworCQkgKiBiZXN0X3NpbWlsYXJpdHkuCisJCSAqIFRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBoYXZlCisJCSAqIGxpbmUgWCB0aGF0IG1hdGNoZXMgb25seSBvbmUgbGluZSB3aXRoIGEgc2NvcmUgb2YgMywKKwkJICogbGluZSBZIHRoYXQgbWF0Y2hlcyB0d28gbGluZXMgZXF1YWxseSB3aXRoIGEgc2NvcmUgb2YgNSwKKwkJICogYW5kIGxpbmUgWiB0aGF0IG1hdGNoZXMgb25seSBvbmUgbGluZSB3aXRoIGEgc2NvcmUgb3IgMiwKKwkJICogdGhlbiB0aGUgbGluZXMgaW4gb3JkZXIgb2YgY2VydGFpbnR5IGFyZSBYLCBZLCBaLgorCQkgKi8KKwkJY2VydGFpbnRpZXNbbG9jYWxfbGluZV9iXSA9IGJlc3Rfc2ltaWxhcml0eSAqIDIgLQorCQkJc2Vjb25kX2Jlc3Rfc2ltaWxhcml0eTsKKworCQkvKiBXZSBrZWVwIGJvdGggdGhlIGJlc3QgYW5kIHNlY29uZCBiZXN0IHJlc3VsdHMgdG8gYWxsb3cgdXMgdG8KKwkJICogY2hlY2sgYXQgYSBsYXRlciBzdGFnZSBvZiB0aGUgbWF0Y2hpbmcgcHJvY2VzcyB3aGV0aGVyIHRoZQorCQkgKiByZXN1bHQgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQuCisJCSAqLworCQlyZXN1bHRbbG9jYWxfbGluZV9iXSA9IHN0YXJ0X2EgKyBiZXN0X3NpbWlsYXJpdHlfaW5kZXg7CisJCXNlY29uZF9iZXN0X3Jlc3VsdFtsb2NhbF9saW5lX2JdID0KKwkJCXN0YXJ0X2EgKyBzZWNvbmRfYmVzdF9zaW1pbGFyaXR5X2luZGV4OworCX0KK30KKworLyoKKyAqIFRoaXMgZmluZHMgdGhlIGxpbmUgdGhhdCB3ZSBjYW4gbWF0Y2ggd2l0aCB0aGUgbW9zdCBjb25maWRlbmNlLCBhbmQKKyAqIHVzZXMgaXQgYXMgYSBwYXJ0aXRpb24uIEl0IHRoZW4gY2FsbHMgaXRzZWxmIG9uIHRoZSBsaW5lcyBvbiBlaXRoZXIgc2lkZSBvZgorICogdGhhdCBwYXJ0aXRpb24uIEluIHRoaXMgd2F5IHdlIGF2b2lkIGxpbmVzIGFwcGVhcmluZyBvdXQgb2Ygb3JkZXIsIGFuZAorICogcmV0YWluIGEgc2Vuc2libGUgbGluZSBvcmRlcmluZy4KKyAqIFxwYXJhbSBzdGFydF9hIGluZGV4IG9mIHRoZSBmaXJzdCBsaW5lIGluIEEgd2l0aCB3aGljaCBsaW5lcyBpbiBCIG1heSBiZQorICogCQkgIGNvbXBhcmVkLgorICogXHBhcmFtIHN0YXJ0X2IgaW5kZXggb2YgdGhlIGZpcnN0IGxpbmUgaW4gQiBmb3Igd2hpY2ggbWF0Y2hpbmcgc2hvdWxkIGJlCisgKiAJCSAgZG9uZS4KKyAqIFxwYXJhbSBsZW5ndGhfYSBudW1iZXIgb2YgbGluZXMgaW4gQSB3aXRoIHdoaWNoIGxpbmVzIGluIEIgbWF5IGJlIGNvbXBhcmVkLgorICogXHBhcmFtIGxlbmd0aF9iIG51bWJlciBvZiBsaW5lcyBpbiBCIGZvciB3aGljaCBtYXRjaGluZyBzaG91bGQgYmUgZG9uZS4KKyAqIFxwYXJhbSBmaW5nZXJwcmludHNfYSBtdXRhYmxlIGFycmF5IG9mIGZpbmdlcnByaW50cyBpbiBBLiBUaGUgZmlyc3QgZWxlbWVudAorICogCQkJIGNvcnJlc3BvbmRzIHRvIHRoZSBsaW5lIGF0IHN0YXJ0X2EuCisgKiBccGFyYW0gZmluZ2VycHJpbnRzX2IgYXJyYXkgb2YgZmluZ2VycHJpbnRzIGluIEIuIFRoZSBmaXJzdCBlbGVtZW50CisgKiAJCQkgY29ycmVzcG9uZHMgdG8gdGhlIGxpbmUgYXQgc3RhcnRfYi4KKyAqIFxwYXJhbSBzaW1pbGFyaXRpZXMgMi1kaW1lbnNpb25hbCBhcnJheSBvZiBzaW1pbGFyaXRpZXMgYmV0d2VlbiBsaW5lcyBpbiBBCisgKiAJCSAgICAgICBhbmQgQi4gU2VlIGdldF9zaW1pbGFyaXR5KCkgZm9yIG1vcmUgZGV0YWlscy4KKyAqIFxwYXJhbSBjZXJ0YWludGllcyBhcnJheSBvZiB2YWx1ZXMgaW5kaWNhdGluZyBob3cgc3Ryb25nbHkgYSBsaW5lIGluIEIgaXMKKyAqIAkJICAgICAgbWF0Y2hlZCB3aXRoIHNvbWUgbGluZSBpbiBBLgorICogXHBhcmFtIHNlY29uZF9iZXN0X3Jlc3VsdCBhcnJheSBvZiBhYnNvbHV0ZSBpbmRpY2VzIGluIEEgZm9yIHRoZSBzZWNvbmQKKyAqIAkJCSAgICAgY2xvc2VzdCBtYXRjaCBvZiBhIGxpbmUgaW4gQi4KKyAqIFxwYXJhbSByZXN1bHQgYXJyYXkgb2YgYWJzb2x1dGUgaW5kaWNlcyBpbiBBIGZvciB0aGUgY2xvc2VzdCBtYXRjaCBvZiBhIGxpbmUKKyAqIAkJIGluIEIuCisgKiBccGFyYW0gbWF4X3NlYXJjaF9kaXN0YW5jZV9hIG1heGltdW0gZGlzdGFuY2UgaW4gbGluZXMgZnJvbSB0aGUgY2xvc2VzdCBsaW5lCisgKiAJCQkgICAgICBpbiBBIGZvciBvdGhlciBsaW5lcyBpbiBBIGZvciB3aGljaAorICogCQkJICAgICAgc2ltaWxhcml0aWVzIG1heSBiZSBjYWxjdWxhdGVkLgorICogXHBhcmFtIG1heF9zZWFyY2hfZGlzdGFuY2VfYiBhbiB1cHBlciBib3VuZCBvbiB0aGUgZ3JlYXRlc3QgcG9zc2libGUKKyAqIAkJCSAgICAgIGRpc3RhbmNlIGJldHdlZW4gbGluZXMgaW4gQiBzdWNoIHRoYXQgdGhleSB3aWxsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGggYmUgY29tcGFyZWQgd2l0aCB0aGUgc2FtZSBsaW5lIGluIEEKKyAqIAkJCSAgICAgIGFjY29yZGluZyB0byBtYXhfc2VhcmNoX2Rpc3RhbmNlX2EuCisgKiBccGFyYW0gbWFwX2xpbmVfbnVtYmVyX2luX2JfdG9fYSBwYXJhbWV0ZXIgdG8gbWFwX2xpbmVfbnVtYmVyKCkuCisgKi8KK3N0YXRpYyB2b2lkIGZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZSgKKwlpbnQgc3RhcnRfYSwgaW50IHN0YXJ0X2IsCisJaW50IGxlbmd0aF9hLCBpbnQgbGVuZ3RoX2IsCisJc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHNfYSwKKwlzdHJ1Y3QgZmluZ2VycHJpbnQgKmZpbmdlcnByaW50c19iLAorCWludCAqc2ltaWxhcml0aWVzLAorCWludCAqY2VydGFpbnRpZXMsCisJaW50ICpzZWNvbmRfYmVzdF9yZXN1bHQsCisJaW50ICpyZXN1bHQsCisJaW50IG1heF9zZWFyY2hfZGlzdGFuY2VfYSwKKwlpbnQgbWF4X3NlYXJjaF9kaXN0YW5jZV9iLAorCWNvbnN0IHN0cnVjdCBsaW5lX251bWJlcl9tYXBwaW5nICptYXBfbGluZV9udW1iZXJfaW5fYl90b19hKQoreworCWludCBpLCBpbnZhbGlkYXRlX21pbiwgaW52YWxpZGF0ZV9tYXgsIG9mZnNldF9iLAorCQlzZWNvbmRfaGFsZl9zdGFydF9hLCBzZWNvbmRfaGFsZl9zdGFydF9iLAorCQlzZWNvbmRfaGFsZl9sZW5ndGhfYSwgc2Vjb25kX2hhbGZfbGVuZ3RoX2IsCisJCW1vc3RfY2VydGFpbl9saW5lX2EsIG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgPSAtMSwKKwkJbW9zdF9jZXJ0YWluX2xpbmVfY2VydGFpbnR5ID0gLTEsCisJCWNsb3Nlc3RfbG9jYWxfbGluZV9hOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aF9iOyArK2kpIHsKKwkJZmluZF9iZXN0X2xpbmVfbWF0Y2hlcyhzdGFydF9hLAorCQkJCSAgICAgICBsZW5ndGhfYSwKKwkJCQkgICAgICAgc3RhcnRfYiwKKwkJCQkgICAgICAgaSwKKwkJCQkgICAgICAgZmluZ2VycHJpbnRzX2EsCisJCQkJICAgICAgIGZpbmdlcnByaW50c19iLAorCQkJCSAgICAgICBzaW1pbGFyaXRpZXMsCisJCQkJICAgICAgIGNlcnRhaW50aWVzLAorCQkJCSAgICAgICBzZWNvbmRfYmVzdF9yZXN1bHQsCisJCQkJICAgICAgIHJlc3VsdCwKKwkJCQkgICAgICAgbWF4X3NlYXJjaF9kaXN0YW5jZV9hLAorCQkJCSAgICAgICBtYXBfbGluZV9udW1iZXJfaW5fYl90b19hKTsKKworCQlpZiAoY2VydGFpbnRpZXNbaV0gPiBtb3N0X2NlcnRhaW5fbGluZV9jZXJ0YWludHkpIHsKKwkJCW1vc3RfY2VydGFpbl9saW5lX2NlcnRhaW50eSA9IGNlcnRhaW50aWVzW2ldOworCQkJbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiA9IGk7CisJCX0KKwl9CisKKwkvKiBObyBtYXRjaGVzLiAqLworCWlmIChtb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iID09IC0xKQorCQlyZXR1cm47CisKKwltb3N0X2NlcnRhaW5fbGluZV9hID0gcmVzdWx0W21vc3RfY2VydGFpbl9sb2NhbF9saW5lX2JdOworCisJLyoKKwkgKiBTdWJ0cmFjdCB0aGUgbW9zdCBjZXJ0YWluIGxpbmUncyBmaW5nZXJwcmludCBpbiBCIGZyb20gdGhlIG1hdGNoZWQKKwkgKiBmaW5nZXJwcmludCBpbiBBLiBUaGlzIG1lYW5zIHRoYXQgb3RoZXIgbGluZXMgaW4gQiBjYW4ndCBhbHNvIG1hdGNoCisJICogdGhlIHNhbWUgcGFydHMgb2YgdGhlIGxpbmUgaW4gQS4KKwkgKi8KKwlmaW5nZXJwcmludF9zdWJ0cmFjdChmaW5nZXJwcmludHNfYSArIG1vc3RfY2VydGFpbl9saW5lX2EgLSBzdGFydF9hLAorCQkJICAgICBmaW5nZXJwcmludHNfYiArIG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IpOworCisJLyogSW52YWxpZGF0ZSByZXN1bHRzIHRoYXQgbWF5IGJlIGFmZmVjdGVkIGJ5IHRoZSBjaG9pY2Ugb2YgbW9zdAorCSAqIGNlcnRhaW4gbGluZS4KKwkgKi8KKwlpbnZhbGlkYXRlX21pbiA9IG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgLSBtYXhfc2VhcmNoX2Rpc3RhbmNlX2I7CisJaW52YWxpZGF0ZV9tYXggPSBtb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iICsgbWF4X3NlYXJjaF9kaXN0YW5jZV9iICsgMTsKKwlpZiAoaW52YWxpZGF0ZV9taW4gPCAwKQorCQlpbnZhbGlkYXRlX21pbiA9IDA7CisJaWYgKGludmFsaWRhdGVfbWF4ID4gbGVuZ3RoX2IpCisJCWludmFsaWRhdGVfbWF4ID0gbGVuZ3RoX2I7CisKKwkvKiBBcyB0aGUgZmluZ2VycHJpbnQgaW4gQSBoYXMgY2hhbmdlZCwgZGlzY2FyZCBwcmV2aW91c2x5IGNhbGN1bGF0ZWQKKwkgKiBzaW1pbGFyaXR5IHZhbHVlcyB3aXRoIHRoYXQgZmluZ2VycHJpbnQuCisJICovCisJZm9yIChpID0gaW52YWxpZGF0ZV9taW47IGkgPCBpbnZhbGlkYXRlX21heDsgKytpKSB7CisJCWNsb3Nlc3RfbG9jYWxfbGluZV9hID0gbWFwX2xpbmVfbnVtYmVyKAorCQkJaSArIHN0YXJ0X2IsIG1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpIC0gc3RhcnRfYTsKKworCQkvKiBDaGVjayB0aGF0IHRoZSBsaW5lcyBpbiBBIGFuZCBCIGFyZSBjbG9zZSBlbm91Z2ggdGhhdCB0aGVyZQorCQkgKiBpcyBhIHNpbWlsYXJpdHkgdmFsdWUgZm9yIHRoZW0uCisJCSAqLworCQlpZiAoYWJzKG1vc3RfY2VydGFpbl9saW5lX2EgLSBzdGFydF9hIC0gY2xvc2VzdF9sb2NhbF9saW5lX2EpID4KKwkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYSkgeworCQkJY29udGludWU7CisJCX0KKworCQkqZ2V0X3NpbWlsYXJpdHkoc2ltaWxhcml0aWVzLCBtb3N0X2NlcnRhaW5fbGluZV9hIC0gc3RhcnRfYSwKKwkJCQlpLCBjbG9zZXN0X2xvY2FsX2xpbmVfYSwKKwkJCQltYXhfc2VhcmNoX2Rpc3RhbmNlX2EpID0gLTE7CisJfQorCisJLyogTW9yZSBpbnZhbGlkYXRpbmcgb2YgcmVzdWx0cyB0aGF0IG1heSBiZSBhZmZlY3RlZCBieSB0aGUgY2hvaWNlIG9mCisJICogbW9zdCBjZXJ0YWluIGxpbmUuCisJICogRGlzY2FyZCB0aGUgbWF0Y2hlcyBmb3IgbGluZXMgaW4gQiB0aGF0IGFyZSBjdXJyZW50bHkgbWF0Y2hlZCB3aXRoIGEKKwkgKiBsaW5lIGluIEEgc3VjaCB0aGF0IHRoZWlyIG9yZGVyaW5nIGNvbnRyYWRpY3RzIHRoZSBvcmRlcmluZyBpbXBvc2VkCisJICogYnkgdGhlIGNob2ljZSBvZiBtb3N0IGNlcnRhaW4gbGluZS4KKwkgKi8KKwlmb3IgKGkgPSBtb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iIC0gMTsgaSA+PSBpbnZhbGlkYXRlX21pbjsgLS1pKSB7CisJCS8qIEluIHRoaXMgbG9vcCB3ZSBkaXNjYXJkIHJlc3VsdHMgZm9yIGxpbmVzIGluIEIgdGhhdCBhcmUKKwkJICogYmVmb3JlIG1vc3QtY2VydGFpbi1saW5lLUIgYnV0IGFyZSBtYXRjaGVkIHdpdGggYSBsaW5lIGluIEEKKwkJICogdGhhdCBpcyBhZnRlciBtb3N0LWNlcnRhaW4tbGluZS1BLgorCQkgKi8KKwkJaWYgKGNlcnRhaW50aWVzW2ldID49IDAgJiYKKwkJICAgIChyZXN1bHRbaV0gPj0gbW9zdF9jZXJ0YWluX2xpbmVfYSB8fAorCQkgICAgIHNlY29uZF9iZXN0X3Jlc3VsdFtpXSA+PSBtb3N0X2NlcnRhaW5fbGluZV9hKSkgeworCQkJY2VydGFpbnRpZXNbaV0gPSBDRVJUQUlOVFlfTk9UX0NBTENVTEFURUQ7CisJCX0KKwl9CisJZm9yIChpID0gbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiArIDE7IGkgPCBpbnZhbGlkYXRlX21heDsgKytpKSB7CisJCS8qIEluIHRoaXMgbG9vcCB3ZSBkaXNjYXJkIHJlc3VsdHMgZm9yIGxpbmVzIGluIEIgdGhhdCBhcmUKKwkJICogYWZ0ZXIgbW9zdC1jZXJ0YWluLWxpbmUtQiBidXQgYXJlIG1hdGNoZWQgd2l0aCBhIGxpbmUgaW4gQQorCQkgKiB0aGF0IGlzIGJlZm9yZSBtb3N0LWNlcnRhaW4tbGluZS1BLgorCQkgKi8KKwkJaWYgKGNlcnRhaW50aWVzW2ldID49IDAgJiYKKwkJICAgIChyZXN1bHRbaV0gPD0gbW9zdF9jZXJ0YWluX2xpbmVfYSB8fAorCQkgICAgIHNlY29uZF9iZXN0X3Jlc3VsdFtpXSA8PSBtb3N0X2NlcnRhaW5fbGluZV9hKSkgeworCQkJY2VydGFpbnRpZXNbaV0gPSBDRVJUQUlOVFlfTk9UX0NBTENVTEFURUQ7CisJCX0KKwl9CisKKwkvKiBSZXBlYXQgdGhlIG1hdGNoaW5nIHByb2Nlc3MgZm9yIGxpbmVzIGJlZm9yZSB0aGUgbW9zdCBjZXJ0YWluIGxpbmUuCisJICovCisJaWYgKG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgPiAwKSB7CisJCWZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZSgKKwkJCXN0YXJ0X2EsIHN0YXJ0X2IsCisJCQltb3N0X2NlcnRhaW5fbGluZV9hICsgMSAtIHN0YXJ0X2EsCisJCQltb3N0X2NlcnRhaW5fbG9jYWxfbGluZV9iLAorCQkJZmluZ2VycHJpbnRzX2EsIGZpbmdlcnByaW50c19iLCBzaW1pbGFyaXRpZXMsCisJCQljZXJ0YWludGllcywgc2Vjb25kX2Jlc3RfcmVzdWx0LCByZXN1bHQsCisJCQltYXhfc2VhcmNoX2Rpc3RhbmNlX2EsCisJCQltYXhfc2VhcmNoX2Rpc3RhbmNlX2IsCisJCQltYXBfbGluZV9udW1iZXJfaW5fYl90b19hKTsKKwl9CisJLyogUmVwZWF0IHRoZSBtYXRjaGluZyBwcm9jZXNzIGZvciBsaW5lcyBhZnRlciB0aGUgbW9zdCBjZXJ0YWluIGxpbmUuCisJICovCisJaWYgKG1vc3RfY2VydGFpbl9sb2NhbF9saW5lX2IgKyAxIDwgbGVuZ3RoX2IpIHsKKwkJc2Vjb25kX2hhbGZfc3RhcnRfYSA9IG1vc3RfY2VydGFpbl9saW5lX2E7CisJCW9mZnNldF9iID0gbW9zdF9jZXJ0YWluX2xvY2FsX2xpbmVfYiArIDE7CisJCXNlY29uZF9oYWxmX3N0YXJ0X2IgPSBzdGFydF9iICsgb2Zmc2V0X2I7CisJCXNlY29uZF9oYWxmX2xlbmd0aF9hID0KKwkJCWxlbmd0aF9hICsgc3RhcnRfYSAtIHNlY29uZF9oYWxmX3N0YXJ0X2E7CisJCXNlY29uZF9oYWxmX2xlbmd0aF9iID0KKwkJCWxlbmd0aF9iICsgc3RhcnRfYiAtIHNlY29uZF9oYWxmX3N0YXJ0X2I7CisJCWZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZSgKKwkJCXNlY29uZF9oYWxmX3N0YXJ0X2EsIHNlY29uZF9oYWxmX3N0YXJ0X2IsCisJCQlzZWNvbmRfaGFsZl9sZW5ndGhfYSwgc2Vjb25kX2hhbGZfbGVuZ3RoX2IsCisJCQlmaW5nZXJwcmludHNfYSArIHNlY29uZF9oYWxmX3N0YXJ0X2EgLSBzdGFydF9hLAorCQkJZmluZ2VycHJpbnRzX2IgKyBvZmZzZXRfYiwKKwkJCXNpbWlsYXJpdGllcyArCisJCQkJb2Zmc2V0X2IgKiAobWF4X3NlYXJjaF9kaXN0YW5jZV9hICogMiArIDEpLAorCQkJY2VydGFpbnRpZXMgKyBvZmZzZXRfYiwKKwkJCXNlY29uZF9iZXN0X3Jlc3VsdCArIG9mZnNldF9iLCByZXN1bHQgKyBvZmZzZXRfYiwKKwkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYSwKKwkJCW1heF9zZWFyY2hfZGlzdGFuY2VfYiwKKwkJCW1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpOworCX0KK30KKworLyogRmluZCB0aGUgbGluZXMgaW4gdGhlIHBhcmVudCBsaW5lIHJhbmdlIHRoYXQgbW9zdCBjbG9zZWx5IG1hdGNoIHRoZSBsaW5lcyBpbgorICogdGhlIHRhcmdldCBsaW5lIHJhbmdlLiBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBtYXRjaGluZyBmaW5nZXJwcmludHMgaW4gZWFjaAorICogYmxhbWVfb3JpZ2luLCBhbmQgY2hvb3NpbmcgdGhlIGJlc3QgbWF0Y2hlcyB0aGF0IHByZXNlcnZlIHRoZSBsaW5lIG9yZGVyaW5nLgorICogU2VlIHN0cnVjdCBmaW5nZXJwcmludCBmb3IgZGV0YWlscyBvZiBmaW5nZXJwcmludCBtYXRjaGluZywgYW5kCisgKiBmdXp6eV9maW5kX21hdGNoaW5nX2xpbmVzX3JlY3Vyc2UgZm9yIGRldGFpbHMgb2YgcHJlc2VydmluZyBsaW5lIG9yZGVyaW5nLgorICoKKyAqIFRoZSBwZXJmb3JtYW5jZSBpcyBiZWxpZXZlZCB0byBiZSBPKG4gbG9nIG4pIGluIHRoZSB0eXBpY2FsIGNhc2UgYW5kIE8obl4yKQorICogaW4gYSBwYXRob2xvZ2ljYWwgY2FzZSwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSB0YXJnZXQgcmFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgKmZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXMoc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50LAorCQkJCSAgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKnRhcmdldCwKKwkJCQkgICAgICBpbnQgdGxubywgaW50IHBhcmVudF9zbG5vLCBpbnQgc2FtZSwKKwkJCQkgICAgICBpbnQgcGFyZW50X2xlbikKK3sKKwkvKiBXZSB1c2UgdGhlIHRlcm1pbm9sb2d5ICJBIiBmb3IgdGhlIGxlZnQgaGFuZCBzaWRlIG9mIHRoZSBkaWZmIEFLQQorCSAqIHBhcmVudCwgYW5kICJCIiBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgZGlmZiBBS0EgdGFyZ2V0LiAqLworCWludCBzdGFydF9hID0gcGFyZW50X3Nsbm87CisJaW50IGxlbmd0aF9hID0gcGFyZW50X2xlbjsKKwlpbnQgc3RhcnRfYiA9IHRsbm87CisJaW50IGxlbmd0aF9iID0gc2FtZSAtIHRsbm87CisKKwlzdHJ1Y3QgbGluZV9udW1iZXJfbWFwcGluZyBtYXBfbGluZV9udW1iZXJfaW5fYl90b19hID0geworCQlzdGFydF9hLCBsZW5ndGhfYSwgc3RhcnRfYiwgbGVuZ3RoX2IKKwl9OworCisJc3RydWN0IGZpbmdlcnByaW50ICpmaW5nZXJwcmludHNfYSA9IHBhcmVudC0+ZmluZ2VycHJpbnRzOworCXN0cnVjdCBmaW5nZXJwcmludCAqZmluZ2VycHJpbnRzX2IgPSB0YXJnZXQtPmZpbmdlcnByaW50czsKKworCWludCBpLCAqcmVzdWx0LCAqc2Vjb25kX2Jlc3RfcmVzdWx0LAorCQkqY2VydGFpbnRpZXMsICpzaW1pbGFyaXRpZXMsIHNpbWlsYXJpdHlfY291bnQ7CisKKwkvKgorCSAqIG1heF9zZWFyY2hfZGlzdGFuY2VfYSBtZWFucyB0aGF0IGdpdmVuIGEgbGluZSBpbiBCLCBjb21wYXJlIGl0IHRvCisJICogdGhlIGxpbmUgaW4gQSB0aGF0IGlzIGNsb3Nlc3QgdG8gaXRzIHBvc2l0aW9uLCBhbmQgdGhlIGxpbmVzIGluIEEKKwkgKiB0aGF0IGFyZSBubyBncmVhdGVyIHRoYW4gbWF4X3NlYXJjaF9kaXN0YW5jZV9hIGxpbmVzIGF3YXkgZnJvbSB0aGUKKwkgKiBjbG9zZXN0IGxpbmUgaW4gQS4KKwkgKgorCSAqIG1heF9zZWFyY2hfZGlzdGFuY2VfYiBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgZ3JlYXRlc3QgcG9zc2libGUKKwkgKiBkaXN0YW5jZSBiZXR3ZWVuIGxpbmVzIGluIEIgc3VjaCB0aGF0IHRoZXkgd2lsbCBib3RoIGJlIGNvbXBhcmVkCisJICogd2l0aCB0aGUgc2FtZSBsaW5lIGluIEEgYWNjb3JkaW5nIHRvIG1heF9zZWFyY2hfZGlzdGFuY2VfYS4KKwkgKi8KKwlpbnQgbWF4X3NlYXJjaF9kaXN0YW5jZV9hID0gMTAsIG1heF9zZWFyY2hfZGlzdGFuY2VfYjsKKworCWlmIChsZW5ndGhfYSA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChtYXhfc2VhcmNoX2Rpc3RhbmNlX2EgPj0gbGVuZ3RoX2EpCisJCW1heF9zZWFyY2hfZGlzdGFuY2VfYSA9IGxlbmd0aF9hID8gbGVuZ3RoX2EgLSAxIDogMDsKKworCW1heF9zZWFyY2hfZGlzdGFuY2VfYiA9ICgoMiAqIG1heF9zZWFyY2hfZGlzdGFuY2VfYSArIDEpICogbGVuZ3RoX2IKKwkJCQkgLSAxKSAvIGxlbmd0aF9hOworCisJcmVzdWx0ID0geGNhbGxvYyhzaXplb2YoaW50KSwgbGVuZ3RoX2IpOworCXNlY29uZF9iZXN0X3Jlc3VsdCA9IHhjYWxsb2Moc2l6ZW9mKGludCksIGxlbmd0aF9iKTsKKwljZXJ0YWludGllcyA9IHhjYWxsb2Moc2l6ZW9mKGludCksIGxlbmd0aF9iKTsKKworCS8qIFNlZSBnZXRfc2ltaWxhcml0eSgpIGZvciBkZXRhaWxzIG9mIHNpbWlsYXJpdGllcy4gKi8KKwlzaW1pbGFyaXR5X2NvdW50ID0gbGVuZ3RoX2IgKiAobWF4X3NlYXJjaF9kaXN0YW5jZV9hICogMiArIDEpOworCXNpbWlsYXJpdGllcyA9IHhjYWxsb2Moc2l6ZW9mKGludCksIHNpbWlsYXJpdHlfY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aF9iOyArK2kpIHsKKwkJcmVzdWx0W2ldID0gLTE7CisJCXNlY29uZF9iZXN0X3Jlc3VsdFtpXSA9IC0xOworCQljZXJ0YWludGllc1tpXSA9IENFUlRBSU5UWV9OT1RfQ0FMQ1VMQVRFRDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2ltaWxhcml0eV9jb3VudDsgKytpKQorCQlzaW1pbGFyaXRpZXNbaV0gPSAtMTsKKworCWZ1enp5X2ZpbmRfbWF0Y2hpbmdfbGluZXNfcmVjdXJzZShzdGFydF9hLCBzdGFydF9iLAorCQkJCQkgIGxlbmd0aF9hLCBsZW5ndGhfYiwKKwkJCQkJICBmaW5nZXJwcmludHNfYSArIHN0YXJ0X2EsCisJCQkJCSAgZmluZ2VycHJpbnRzX2IgKyBzdGFydF9iLAorCQkJCQkgIHNpbWlsYXJpdGllcywKKwkJCQkJICBjZXJ0YWludGllcywKKwkJCQkJICBzZWNvbmRfYmVzdF9yZXN1bHQsCisJCQkJCSAgcmVzdWx0LAorCQkJCQkgIG1heF9zZWFyY2hfZGlzdGFuY2VfYSwKKwkJCQkJICBtYXhfc2VhcmNoX2Rpc3RhbmNlX2IsCisJCQkJCSAgJm1hcF9saW5lX251bWJlcl9pbl9iX3RvX2EpOworCisJZnJlZShzaW1pbGFyaXRpZXMpOworCWZyZWUoY2VydGFpbnRpZXMpOworCWZyZWUoc2Vjb25kX2Jlc3RfcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfb3JpZ2luX2ZpbmdlcnByaW50cyhzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvKQoreworCWludCAqbGluZV9zdGFydHM7CisKKwlpZiAoby0+ZmluZ2VycHJpbnRzKQorCQlyZXR1cm47CisJby0+bnVtX2xpbmVzID0gZmluZF9saW5lX3N0YXJ0cygmbGluZV9zdGFydHMsIG8tPmZpbGUucHRyLAorCQkJCQlvLT5maWxlLnNpemUpOworCW8tPmZpbmdlcnByaW50cyA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBmaW5nZXJwcmludCksIG8tPm51bV9saW5lcyk7CisJZ2V0X2xpbmVfZmluZ2VycHJpbnRzKG8tPmZpbmdlcnByaW50cywgby0+ZmlsZS5wdHIsIGxpbmVfc3RhcnRzLAorCQkJICAgICAgMCwgby0+bnVtX2xpbmVzKTsKKwlmcmVlKGxpbmVfc3RhcnRzKTsKK30KKworc3RhdGljIHZvaWQgZHJvcF9vcmlnaW5fZmluZ2VycHJpbnRzKHN0cnVjdCBibGFtZV9vcmlnaW4gKm8pCit7CisJaWYgKG8tPmZpbmdlcnByaW50cykgeworCQlmcmVlX2xpbmVfZmluZ2VycHJpbnRzKG8tPmZpbmdlcnByaW50cywgby0+bnVtX2xpbmVzKTsKKwkJby0+bnVtX2xpbmVzID0gMDsKKwkJRlJFRV9BTkRfTlVMTChvLT5maW5nZXJwcmludHMpOworCX0KK30KKworLyoKKyAqIEdpdmVuIGFuIG9yaWdpbiwgcHJlcGFyZSBtbWZpbGVfdCBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBieSB0aGUKKyAqIGRpZmYgbWFjaGluZXJ5CisgKi8KK3N0YXRpYyB2b2lkIGZpbGxfb3JpZ2luX2Jsb2Ioc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvLCBtbWZpbGVfdCAqZmlsZSwKKwkJCSAgICAgaW50ICpudW1fcmVhZF9ibG9iLCBpbnQgZmlsbF9maW5nZXJwcmludHMpCit7CisJaWYgKCFvLT5maWxlLnB0cikgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgZmlsZV9zaXplOworCisJCSgqbnVtX3JlYWRfYmxvYikrKzsKKwkJaWYgKG9wdC0+ZmxhZ3MuYWxsb3dfdGV4dGNvbnYgJiYKKwkJICAgIHRleHRjb252X29iamVjdChvcHQtPnJlcG8sIG8tPnBhdGgsIG8tPm1vZGUsCisJCQkJICAgICZvLT5ibG9iX29pZCwgMSwgJmZpbGUtPnB0ciwgJmZpbGVfc2l6ZSkpCisJCQk7CisJCWVsc2UKKwkJCWZpbGUtPnB0ciA9IHJlYWRfb2JqZWN0X2ZpbGUoJm8tPmJsb2Jfb2lkLCAmdHlwZSwKKwkJCQkJCSAgICAgJmZpbGVfc2l6ZSk7CisJCWZpbGUtPnNpemUgPSBmaWxlX3NpemU7CisKKwkJaWYgKCFmaWxlLT5wdHIpCisJCQlkaWUoIkNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiLAorCQkJICAgIG9pZF90b19oZXgoJm8tPmJsb2Jfb2lkKSwKKwkJCSAgICBvLT5wYXRoKTsKKwkJby0+ZmlsZSA9ICpmaWxlOworCX0KKwllbHNlCisJCSpmaWxlID0gby0+ZmlsZTsKKwlpZiAoZmlsbF9maW5nZXJwcmludHMpCisJCWZpbGxfb3JpZ2luX2ZpbmdlcnByaW50cyhvKTsKK30KKworc3RhdGljIHZvaWQgZHJvcF9vcmlnaW5fYmxvYihzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvKQoreworCUZSRUVfQU5EX05VTEwoby0+ZmlsZS5wdHIpOworCWRyb3Bfb3JpZ2luX2ZpbmdlcnByaW50cyhvKTsKK30KKworLyoKKyAqIEFueSBtZXJnZSBvZiBibGFtZXMgaGFwcGVucyBvbiBsaXN0cyBvZiBibGFtZXMgdGhhdCBhcnJpdmVkIHZpYQorICogZGlmZmVyZW50IHBhcmVudHMgaW4gYSBzaW5nbGUgc3VzcGVjdC4gIEluIHRoaXMgY2FzZSwgd2Ugd2FudCB0bworICogc29ydCBhY2NvcmRpbmcgdG8gdGhlIHN1c3BlY3QgbGluZSBudW1iZXJzIGFzIG9wcG9zZWQgdG8gdGhlIGZpbmFsCisgKiBpbWFnZSBsaW5lIG51bWJlcnMuICBUaGUgZnVuY3Rpb24gYm9keSBpcyBzb21ld2hhdCBsb25naXNoIGJlY2F1c2UKKyAqIGl0IGF2b2lkcyB1bm5lY2Vzc2FyeSB3cml0ZXMuCisgKi8KKworc3RhdGljIHN0cnVjdCBibGFtZV9lbnRyeSAqYmxhbWVfbWVyZ2Uoc3RydWN0IGJsYW1lX2VudHJ5ICpsaXN0MSwKKwkJCQkgICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICpsaXN0MikKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnAxID0gbGlzdDEsICpwMiA9IGxpc3QyLAorCQkqKnRhaWwgPSAmbGlzdDE7CisKKwlpZiAoIXAxKQorCQlyZXR1cm4gcDI7CisJaWYgKCFwMikKKwkJcmV0dXJuIHAxOworCisJaWYgKHAxLT5zX2xubyA8PSBwMi0+c19sbm8pIHsKKwkJZG8geworCQkJdGFpbCA9ICZwMS0+bmV4dDsKKwkJCWlmICgocDEgPSAqdGFpbCkgPT0gTlVMTCkgeworCQkJCSp0YWlsID0gcDI7CisJCQkJcmV0dXJuIGxpc3QxOworCQkJfQorCQl9IHdoaWxlIChwMS0+c19sbm8gPD0gcDItPnNfbG5vKTsKKwl9CisJZm9yICg7OykgeworCQkqdGFpbCA9IHAyOworCQlkbyB7CisJCQl0YWlsID0gJnAyLT5uZXh0OworCQkJaWYgKChwMiA9ICp0YWlsKSA9PSBOVUxMKSAgeworCQkJCSp0YWlsID0gcDE7CisJCQkJcmV0dXJuIGxpc3QxOworCQkJfQorCQl9IHdoaWxlIChwMS0+c19sbm8gPiBwMi0+c19sbm8pOworCQkqdGFpbCA9IHAxOworCQlkbyB7CisJCQl0YWlsID0gJnAxLT5uZXh0OworCQkJaWYgKChwMSA9ICp0YWlsKSA9PSBOVUxMKSB7CisJCQkJKnRhaWwgPSBwMjsKKwkJCQlyZXR1cm4gbGlzdDE7CisJCQl9CisJCX0gd2hpbGUgKHAxLT5zX2xubyA8PSBwMi0+c19sbm8pOworCX0KK30KKworc3RhdGljIHZvaWQgKmdldF9uZXh0X2JsYW1lKGNvbnN0IHZvaWQgKnApCit7CisJcmV0dXJuICgoc3RydWN0IGJsYW1lX2VudHJ5ICopcCktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9uZXh0X2JsYW1lKHZvaWQgKnAxLCB2b2lkICpwMikKK3sKKwkoKHN0cnVjdCBibGFtZV9lbnRyeSAqKXAxKS0+bmV4dCA9IHAyOworfQorCisvKgorICogRmluYWwgaW1hZ2UgbGluZSBudW1iZXJzIGFyZSBhbGwgZGlmZmVyZW50LCBzbyB3ZSBkb24ndCBuZWVkIGEKKyAqIHRocmVlLXdheSBjb21wYXJpc29uIGhlcmUuCisgKi8KKworc3RhdGljIGludCBjb21wYXJlX2JsYW1lX2ZpbmFsKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgYmxhbWVfZW50cnkgKilwMSktPmxubyA+ICgoc3RydWN0IGJsYW1lX2VudHJ5ICopcDIpLT5sbm8KKwkJPyAxIDogLTE7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9ibGFtZV9zdXNwZWN0KGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKwljb25zdCBzdHJ1Y3QgYmxhbWVfZW50cnkgKnMxID0gcDEsICpzMiA9IHAyOworCS8qCisJICogdG8gYWxsb3cgZm9yIGNvbGxhdGluZyBzdXNwZWN0cywgd2Ugc29ydCBhY2NvcmRpbmcgdG8gdGhlCisJICogcmVzcGVjdGl2ZSBwb2ludGVyIHZhbHVlIGFzIHRoZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaW9uLgorCSAqIFRoZSBhY3R1YWwgcmVsYXRpb24gaXMgcHJldHR5IHVuaW1wb3J0YW50IGFzIGxvbmcgYXMgaXQKKwkgKiBlc3RhYmxpc2hlcyBhIHRvdGFsIG9yZGVyLiAgQ29tcGFyaW5nIGFzIGludGVnZXJzIGdpdmVzIHVzCisJICogdGhhdC4KKwkgKi8KKwlpZiAoczEtPnN1c3BlY3QgIT0gczItPnN1c3BlY3QpCisJCXJldHVybiAoaW50cHRyX3QpczEtPnN1c3BlY3QgPiAoaW50cHRyX3QpczItPnN1c3BlY3QgPyAxIDogLTE7CisJaWYgKHMxLT5zX2xubyA9PSBzMi0+c19sbm8pCisJCXJldHVybiAwOworCXJldHVybiBzMS0+c19sbm8gPiBzMi0+c19sbm8gPyAxIDogLTE7Cit9CisKK3ZvaWQgYmxhbWVfc29ydF9maW5hbChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IpCit7CisJc2ItPmVudCA9IGxsaXN0X21lcmdlc29ydChzYi0+ZW50LCBnZXRfbmV4dF9ibGFtZSwgc2V0X25leHRfYmxhbWUsCisJCQkJICBjb21wYXJlX2JsYW1lX2ZpbmFsKTsKK30KKworc3RhdGljIGludCBjb21wYXJlX2NvbW1pdHNfYnlfcmV2ZXJzZV9jb21taXRfZGF0ZShjb25zdCB2b2lkICphLAorCQkJCQkJICBjb25zdCB2b2lkICpiLAorCQkJCQkJICB2b2lkICpjKQoreworCXJldHVybiAtY29tcGFyZV9jb21taXRzX2J5X2NvbW1pdF9kYXRlKGEsIGIsIGMpOworfQorCisvKgorICogRm9yIGRlYnVnZ2luZyAtLSBvcmlnaW4gaXMgcmVmY291bnRlZCwgYW5kIHRoaXMgYXNzZXJ0cyB0aGF0CisgKiB3ZSBkbyBub3QgdW5kZXJmbG93LgorICovCitzdGF0aWMgdm9pZCBzYW5pdHlfY2hlY2tfcmVmY250KHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYikKK3sKKwlpbnQgYmFhID0gMDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKworCWZvciAoZW50ID0gc2ItPmVudDsgZW50OyBlbnQgPSBlbnQtPm5leHQpIHsKKwkJLyogTm9ib2R5IHNob3VsZCBoYXZlIHplcm8gb3IgbmVnYXRpdmUgcmVmY250ICovCisJCWlmIChlbnQtPnN1c3BlY3QtPnJlZmNudCA8PSAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGluICVzIGhhcyBuZWdhdGl2ZSByZWZjbnQgJWRcbiIsCisJCQkJZW50LT5zdXNwZWN0LT5wYXRoLAorCQkJCW9pZF90b19oZXgoJmVudC0+c3VzcGVjdC0+Y29tbWl0LT5vYmplY3Qub2lkKSwKKwkJCQllbnQtPnN1c3BlY3QtPnJlZmNudCk7CisJCQliYWEgPSAxOworCQl9CisJfQorCWlmIChiYWEpCisJCXNiLT5vbl9zYW5pdHlfZmFpbChzYiwgYmFhKTsKK30KKworLyoKKyAqIElmIHR3byBibGFtZSBlbnRyaWVzIHRoYXQgYXJlIG5leHQgdG8gZWFjaCBvdGhlciBjYW1lIGZyb20KKyAqIGNvbnRpZ3VvdXMgbGluZXMgaW4gdGhlIHNhbWUgb3JpZ2luIChpLmUuIDxjb21taXQsIHBhdGg+IHBhaXIpLAorICogbWVyZ2UgdGhlbSB0b2dldGhlci4KKyAqLwordm9pZCBibGFtZV9jb2FsZXNjZShzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsICpuZXh0OworCisJZm9yIChlbnQgPSBzYi0+ZW50OyBlbnQgJiYgKG5leHQgPSBlbnQtPm5leHQpOyBlbnQgPSBuZXh0KSB7CisJCWlmIChlbnQtPnN1c3BlY3QgPT0gbmV4dC0+c3VzcGVjdCAmJgorCQkgICAgZW50LT5zX2xubyArIGVudC0+bnVtX2xpbmVzID09IG5leHQtPnNfbG5vICYmCisJCSAgICBlbnQtPmlnbm9yZWQgPT0gbmV4dC0+aWdub3JlZCAmJgorCQkgICAgZW50LT51bmJsYW1hYmxlID09IG5leHQtPnVuYmxhbWFibGUpIHsKKwkJCWVudC0+bnVtX2xpbmVzICs9IG5leHQtPm51bV9saW5lczsKKwkJCWVudC0+bmV4dCA9IG5leHQtPm5leHQ7CisJCQlibGFtZV9vcmlnaW5fZGVjcmVmKG5leHQtPnN1c3BlY3QpOworCQkJZnJlZShuZXh0KTsKKwkJCWVudC0+c2NvcmUgPSAwOworCQkJbmV4dCA9IGVudDsgLyogYWdhaW4gKi8KKwkJfQorCX0KKworCWlmIChzYi0+ZGVidWcpIC8qIHNhbml0eSAqLworCQlzYW5pdHlfY2hlY2tfcmVmY250KHNiKTsKK30KKworLyoKKyAqIE1lcmdlIHRoZSBnaXZlbiBzb3J0ZWQgbGlzdCBvZiBibGFtZXMgaW50byBhIHByZWV4aXN0aW5nIG9yaWdpbi4KKyAqIElmIHRoZXJlIHdlcmUgbm8gcHJldmlvdXMgYmxhbWVzIHRvIHRoYXQgY29tbWl0LCBpdCBpcyBlbnRlcmVkIGludG8KKyAqIHRoZSBjb21taXQgcHJpb3JpdHkgcXVldWUgb2YgdGhlIHNjb3JlIGJvYXJkLgorICovCisKK3N0YXRpYyB2b2lkIHF1ZXVlX2JsYW1lcyhzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBvcmlnaW4sCisJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICpzb3J0ZWQpCit7CisJaWYgKHBvcmlnaW4tPnN1c3BlY3RzKQorCQlwb3JpZ2luLT5zdXNwZWN0cyA9IGJsYW1lX21lcmdlKHBvcmlnaW4tPnN1c3BlY3RzLCBzb3J0ZWQpOworCWVsc2UgeworCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvOworCQlmb3IgKG8gPSBnZXRfYmxhbWVfc3VzcGVjdHMocG9yaWdpbi0+Y29tbWl0KTsgbzsgbyA9IG8tPm5leHQpIHsKKwkJCWlmIChvLT5zdXNwZWN0cykgeworCQkJCXBvcmlnaW4tPnN1c3BlY3RzID0gc29ydGVkOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlwb3JpZ2luLT5zdXNwZWN0cyA9IHNvcnRlZDsKKwkJcHJpb19xdWV1ZV9wdXQoJnNiLT5jb21taXRzLCBwb3JpZ2luLT5jb21taXQpOworCX0KK30KKworLyoKKyAqIEZpbGwgdGhlIGJsb2Jfc2hhMSBmaWVsZCBvZiBhbiBvcmlnaW4gaWYgaXQgaGFzbid0LCBzbyB0aGF0IGxhdGVyCisgKiBjYWxsIHRvIGZpbGxfb3JpZ2luX2Jsb2IoKSBjYW4gdXNlIGl0IHRvIGxvY2F0ZSB0aGUgZGF0YS4gIGJsb2Jfc2hhMQorICogZm9yIGFuIG9yaWdpbiBpcyBhbHNvIHVzZWQgdG8gcGFzcyB0aGUgYmxhbWUgZm9yIHRoZSBlbnRpcmUgZmlsZSB0bworICogdGhlIHBhcmVudCB0byBkZXRlY3QgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCdzIGJsb2IgaXMgaWRlbnRpY2FsIHRvCisgKiB0aGF0IG9mIGl0cyBwYXJlbnQncy4KKyAqCisgKiBUaGlzIGFsc28gZmlsbHMgb3JpZ2luLT5tb2RlIGZvciBjb3JyZXNwb25kaW5nIHRyZWUgcGF0aC4KKyAqLworc3RhdGljIGludCBmaWxsX2Jsb2Jfc2hhMV9hbmRfbW9kZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvcmlnaW4pCit7CisJaWYgKCFpc19udWxsX29pZCgmb3JpZ2luLT5ibG9iX29pZCkpCisJCXJldHVybiAwOworCWlmIChnZXRfdHJlZV9lbnRyeShyLCAmb3JpZ2luLT5jb21taXQtPm9iamVjdC5vaWQsIG9yaWdpbi0+cGF0aCwgJm9yaWdpbi0+YmxvYl9vaWQsICZvcmlnaW4tPm1vZGUpKQorCQlnb3RvIGVycm9yX291dDsKKwlpZiAob2lkX29iamVjdF9pbmZvKHIsICZvcmlnaW4tPmJsb2Jfb2lkLCBOVUxMKSAhPSBPQkpfQkxPQikKKwkJZ290byBlcnJvcl9vdXQ7CisJcmV0dXJuIDA7CisgZXJyb3Jfb3V0OgorCW9pZGNscigmb3JpZ2luLT5ibG9iX29pZCk7CisJb3JpZ2luLT5tb2RlID0gU19JRklOVkFMSUQ7CisJcmV0dXJuIC0xOworfQorCisvKgorICogV2UgaGF2ZSBhbiBvcmlnaW4gLS0gY2hlY2sgaWYgdGhlIHNhbWUgcGF0aCBleGlzdHMgaW4gdGhlCisgKiBwYXJlbnQgYW5kIHJldHVybiBhbiBvcmlnaW4gc3RydWN0dXJlIHRvIHJlcHJlc2VudCBpdC4KKyAqLworc3RhdGljIHN0cnVjdCBibGFtZV9vcmlnaW4gKmZpbmRfb3JpZ2luKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsCisJCQkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKm9yaWdpbikKK3sKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwb3JpZ2luOworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRzOworCWNvbnN0IGNoYXIgKnBhdGhzWzJdOworCisJLyogRmlyc3QgY2hlY2sgYW55IGV4aXN0aW5nIG9yaWdpbnMgKi8KKwlmb3IgKHBvcmlnaW4gPSBnZXRfYmxhbWVfc3VzcGVjdHMocGFyZW50KTsgcG9yaWdpbjsgcG9yaWdpbiA9IHBvcmlnaW4tPm5leHQpCisJCWlmICghc3RyY21wKHBvcmlnaW4tPnBhdGgsIG9yaWdpbi0+cGF0aCkpIHsKKwkJCS8qCisJCQkgKiBUaGUgc2FtZSBwYXRoIGJldHdlZW4gb3JpZ2luIGFuZCBpdHMgcGFyZW50CisJCQkgKiB3aXRob3V0IHJlbmFtaW5nIC0tIHRoZSBtb3N0IGNvbW1vbiBjYXNlLgorCQkJICovCisJCQlyZXR1cm4gYmxhbWVfb3JpZ2luX2luY3JlZiAocG9yaWdpbik7CisJCX0KKworCS8qIFNlZSBpZiB0aGUgb3JpZ2luLT5wYXRoIGlzIGRpZmZlcmVudCBiZXR3ZWVuIHBhcmVudAorCSAqIGFuZCBvcmlnaW4gZmlyc3QuICBNb3N0IG9mIHRoZSB0aW1lIHRoZXkgYXJlIHRoZQorCSAqIHNhbWUgYW5kIGRpZmYtdHJlZSBpcyBmYWlybHkgZWZmaWNpZW50IGFib3V0IHRoaXMuCisJICovCisJcmVwb19kaWZmX3NldHVwKHIsICZkaWZmX29wdHMpOworCWRpZmZfb3B0cy5mbGFncy5yZWN1cnNpdmUgPSAxOworCWRpZmZfb3B0cy5kZXRlY3RfcmVuYW1lID0gMDsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlwYXRoc1swXSA9IG9yaWdpbi0+cGF0aDsKKwlwYXRoc1sxXSA9IE5VTEw7CisKKwlwYXJzZV9wYXRoc3BlYygmZGlmZl9vcHRzLnBhdGhzcGVjLAorCQkgICAgICAgUEFUSFNQRUNfQUxMX01BR0lDICYgflBBVEhTUEVDX0xJVEVSQUwsCisJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMX1BBVEgsICIiLCBwYXRocyk7CisJZGlmZl9zZXR1cF9kb25lKCZkaWZmX29wdHMpOworCisJaWYgKGlzX251bGxfb2lkKCZvcmlnaW4tPmNvbW1pdC0+b2JqZWN0Lm9pZCkpCisJCWRvX2RpZmZfY2FjaGUoZ2V0X2NvbW1pdF90cmVlX29pZChwYXJlbnQpLCAmZGlmZl9vcHRzKTsKKwllbHNlCisJCWRpZmZfdHJlZV9vaWQoZ2V0X2NvbW1pdF90cmVlX29pZChwYXJlbnQpLAorCQkJICAgICAgZ2V0X2NvbW1pdF90cmVlX29pZChvcmlnaW4tPmNvbW1pdCksCisJCQkgICAgICAiIiwgJmRpZmZfb3B0cyk7CisJZGlmZmNvcmVfc3RkKCZkaWZmX29wdHMpOworCisJaWYgKCFkaWZmX3F1ZXVlZF9kaWZmLm5yKSB7CisJCS8qIFRoZSBwYXRoIGlzIHRoZSBzYW1lIGFzIHBhcmVudCAqLworCQlwb3JpZ2luID0gZ2V0X29yaWdpbihwYXJlbnQsIG9yaWdpbi0+cGF0aCk7CisJCW9pZGNweSgmcG9yaWdpbi0+YmxvYl9vaWQsICZvcmlnaW4tPmJsb2Jfb2lkKTsKKwkJcG9yaWdpbi0+bW9kZSA9IG9yaWdpbi0+bW9kZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBTaW5jZSBvcmlnaW4tPnBhdGggaXMgYSBwYXRoc3BlYywgaWYgdGhlIHBhcmVudAorCQkgKiBjb21taXQgaGFkIGl0IGFzIGEgZGlyZWN0b3J5LCB3ZSB3aWxsIHNlZSBhIHdob2xlCisJCSAqIGJ1bmNoIG9mIGRlbGV0aW9uIG9mIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgdGhhdCB3ZQorCQkgKiBkbyBub3QgY2FyZSBhYm91dC4KKwkJICovCisJCWludCBpOworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IE5VTEw7CisJCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisJCQlwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJCW5hbWUgPSBwLT5vbmUtPnBhdGggPyBwLT5vbmUtPnBhdGggOiBwLT50d28tPnBhdGg7CisJCQlpZiAoIXN0cmNtcChuYW1lLCBvcmlnaW4tPnBhdGgpKQorCQkJCWJyZWFrOworCQl9CisJCWlmICghcCkKKwkJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gYmxhbWU6OmZpbmRfb3JpZ2luIik7CisJCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJCWRlZmF1bHQ6CisJCQlkaWUoImludGVybmFsIGVycm9yIGluIGJsYW1lOjpmaW5kX29yaWdpbiAoJWMpIiwKKwkJCSAgICBwLT5zdGF0dXMpOworCQljYXNlICdNJzoKKwkJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHBhcmVudCwgb3JpZ2luLT5wYXRoKTsKKwkJCW9pZGNweSgmcG9yaWdpbi0+YmxvYl9vaWQsICZwLT5vbmUtPm9pZCk7CisJCQlwb3JpZ2luLT5tb2RlID0gcC0+b25lLT5tb2RlOworCQkJYnJlYWs7CisJCWNhc2UgJ0EnOgorCQljYXNlICdUJzoKKwkJCS8qIERpZCBub3QgZXhpc3QgaW4gcGFyZW50LCBvciB0eXBlIGNoYW5nZWQgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCWRpZmZfZmx1c2goJmRpZmZfb3B0cyk7CisJY2xlYXJfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CisJcmV0dXJuIHBvcmlnaW47Cit9CisKKy8qCisgKiBXZSBoYXZlIGFuIG9yaWdpbiAtLSBmaW5kIHRoZSBwYXRoIHRoYXQgY29ycmVzcG9uZHMgdG8gaXQgaW4gaXRzCisgKiBwYXJlbnQgYW5kIHJldHVybiBhbiBvcmlnaW4gc3RydWN0dXJlIHRvIHJlcHJlc2VudCBpdC4KKyAqLworc3RhdGljIHN0cnVjdCBibGFtZV9vcmlnaW4gKmZpbmRfcmVuYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsCisJCQkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKm9yaWdpbikKK3sKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwb3JpZ2luID0gTlVMTDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0czsKKwlpbnQgaTsKKworCXJlcG9fZGlmZl9zZXR1cChyLCAmZGlmZl9vcHRzKTsKKwlkaWZmX29wdHMuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlkaWZmX29wdHMuZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX29wdHMuc2luZ2xlX2ZvbGxvdyA9IG9yaWdpbi0+cGF0aDsKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0cyk7CisKKwlpZiAoaXNfbnVsbF9vaWQoJm9yaWdpbi0+Y29tbWl0LT5vYmplY3Qub2lkKSkKKwkJZG9fZGlmZl9jYWNoZShnZXRfY29tbWl0X3RyZWVfb2lkKHBhcmVudCksICZkaWZmX29wdHMpOworCWVsc2UKKwkJZGlmZl90cmVlX29pZChnZXRfY29tbWl0X3RyZWVfb2lkKHBhcmVudCksCisJCQkgICAgICBnZXRfY29tbWl0X3RyZWVfb2lkKG9yaWdpbi0+Y29tbWl0KSwKKwkJCSAgICAgICIiLCAmZGlmZl9vcHRzKTsKKwlkaWZmY29yZV9zdGQoJmRpZmZfb3B0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJaWYgKChwLT5zdGF0dXMgPT0gJ1InIHx8IHAtPnN0YXR1cyA9PSAnQycpICYmCisJCSAgICAhc3RyY21wKHAtPnR3by0+cGF0aCwgb3JpZ2luLT5wYXRoKSkgeworCQkJcG9yaWdpbiA9IGdldF9vcmlnaW4ocGFyZW50LCBwLT5vbmUtPnBhdGgpOworCQkJb2lkY3B5KCZwb3JpZ2luLT5ibG9iX29pZCwgJnAtPm9uZS0+b2lkKTsKKwkJCXBvcmlnaW4tPm1vZGUgPSBwLT5vbmUtPm1vZGU7CisJCQlicmVhazsKKwkJfQorCX0KKwlkaWZmX2ZsdXNoKCZkaWZmX29wdHMpOworCWNsZWFyX3BhdGhzcGVjKCZkaWZmX29wdHMucGF0aHNwZWMpOworCXJldHVybiBwb3JpZ2luOworfQorCisvKgorICogQXBwZW5kIGEgbmV3IGJsYW1lIGVudHJ5IHRvIGEgZ2l2ZW4gb3V0cHV0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBhZGRfYmxhbWVfZW50cnkoc3RydWN0IGJsYW1lX2VudHJ5ICoqKnF1ZXVlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBibGFtZV9lbnRyeSAqc3JjKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqZSA9IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJbWVtY3B5KGUsIHNyYywgc2l6ZW9mKCplKSk7CisJYmxhbWVfb3JpZ2luX2luY3JlZihlLT5zdXNwZWN0KTsKKworCWUtPm5leHQgPSAqKnF1ZXVlOworCSoqcXVldWUgPSBlOworCSpxdWV1ZSA9ICZlLT5uZXh0OworfQorCisvKgorICogc3JjIHR5cGljYWxseSBpcyBvbi1zdGFjazsgd2Ugd2FudCB0byBjb3B5IHRoZSBpbmZvcm1hdGlvbiBpbiBpdCB0bworICogYSBtYWxsb2NlZCBibGFtZV9lbnRyeSB0aGF0IGdldHMgYWRkZWQgdG8gdGhlIGdpdmVuIHF1ZXVlLiAgVGhlCisgKiBvcmlnaW4gb2YgZHN0IGxvc2VzIGEgcmVmY250LgorICovCitzdGF0aWMgdm9pZCBkdXBfZW50cnkoc3RydWN0IGJsYW1lX2VudHJ5ICoqKnF1ZXVlLAorCQkgICAgICBzdHJ1Y3QgYmxhbWVfZW50cnkgKmRzdCwgc3RydWN0IGJsYW1lX2VudHJ5ICpzcmMpCit7CisJYmxhbWVfb3JpZ2luX2luY3JlZihzcmMtPnN1c3BlY3QpOworCWJsYW1lX29yaWdpbl9kZWNyZWYoZHN0LT5zdXNwZWN0KTsKKwltZW1jcHkoZHN0LCBzcmMsIHNpemVvZigqc3JjKSk7CisJZHN0LT5uZXh0ID0gKipxdWV1ZTsKKwkqKnF1ZXVlID0gZHN0OworCSpxdWV1ZSA9ICZkc3QtPm5leHQ7Cit9CisKK2NvbnN0IGNoYXIgKmJsYW1lX250aF9saW5lKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgbG9uZyBsbm8pCit7CisJcmV0dXJuIHNiLT5maW5hbF9idWYgKyBzYi0+bGluZW5vW2xub107Cit9CisKKy8qCisgKiBJdCBpcyBrbm93biB0aGF0IGxpbmVzIGJldHdlZW4gdGxubyB0byBzYW1lIGNhbWUgZnJvbSBwYXJlbnQsIGFuZCBlCisgKiBoYXMgYW4gb3ZlcmxhcCB3aXRoIHRoYXQgcmFuZ2UuICBpdCBhbHNvIGlzIGtub3duIHRoYXQgcGFyZW50J3MKKyAqIGxpbmUgcGxubyBjb3JyZXNwb25kcyB0byBlJ3MgbGluZSB0bG5vLgorICoKKyAqICAgICAgICAgICAgICAgIDwtLS0tIGUgLS0tLS0+CisgKiAgICAgICAgICAgICAgICAgICA8LS0tLS0tPgorICogICAgICAgICAgICAgICAgICAgPC0tLS0tLS0tLS0tLT4KKyAqICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0+CisgKiAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tLS0tLS0tPgorICoKKyAqIFNwbGl0IGUgaW50byBwb3RlbnRpYWxseSB0aHJlZSBwYXJ0czsgYmVmb3JlIHRoaXMgY2h1bmssIHRoZSBjaHVuaworICogdG8gYmUgYmxhbWVkIGZvciB0aGUgcGFyZW50LCBhbmQgYWZ0ZXIgdGhhdCBwb3J0aW9uLgorICovCitzdGF0aWMgdm9pZCBzcGxpdF9vdmVybGFwKHN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQsCisJCQkgIHN0cnVjdCBibGFtZV9lbnRyeSAqZSwKKwkJCSAgaW50IHRsbm8sIGludCBwbG5vLCBpbnQgc2FtZSwKKwkJCSAgc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50KQoreworCWludCBjaHVua19lbmRfbG5vOworCWludCBpOworCW1lbXNldChzcGxpdCwgMCwgc2l6ZW9mKHN0cnVjdCBibGFtZV9lbnRyeSBbM10pKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc3BsaXRbaV0uaWdub3JlZCA9IGUtPmlnbm9yZWQ7CisJCXNwbGl0W2ldLnVuYmxhbWFibGUgPSBlLT51bmJsYW1hYmxlOworCX0KKworCWlmIChlLT5zX2xubyA8IHRsbm8pIHsKKwkJLyogdGhlcmUgaXMgYSBwcmUtY2h1bmsgcGFydCBub3QgYmxhbWVkIG9uIHBhcmVudCAqLworCQlzcGxpdFswXS5zdXNwZWN0ID0gYmxhbWVfb3JpZ2luX2luY3JlZihlLT5zdXNwZWN0KTsKKwkJc3BsaXRbMF0ubG5vID0gZS0+bG5vOworCQlzcGxpdFswXS5zX2xubyA9IGUtPnNfbG5vOworCQlzcGxpdFswXS5udW1fbGluZXMgPSB0bG5vIC0gZS0+c19sbm87CisJCXNwbGl0WzFdLmxubyA9IGUtPmxubyArIHRsbm8gLSBlLT5zX2xubzsKKwkJc3BsaXRbMV0uc19sbm8gPSBwbG5vOworCX0KKwllbHNlIHsKKwkJc3BsaXRbMV0ubG5vID0gZS0+bG5vOworCQlzcGxpdFsxXS5zX2xubyA9IHBsbm8gKyAoZS0+c19sbm8gLSB0bG5vKTsKKwl9CisKKwlpZiAoc2FtZSA8IGUtPnNfbG5vICsgZS0+bnVtX2xpbmVzKSB7CisJCS8qIHRoZXJlIGlzIGEgcG9zdC1jaHVuayBwYXJ0IG5vdCBibGFtZWQgb24gcGFyZW50ICovCisJCXNwbGl0WzJdLnN1c3BlY3QgPSBibGFtZV9vcmlnaW5faW5jcmVmKGUtPnN1c3BlY3QpOworCQlzcGxpdFsyXS5sbm8gPSBlLT5sbm8gKyAoc2FtZSAtIGUtPnNfbG5vKTsKKwkJc3BsaXRbMl0uc19sbm8gPSBlLT5zX2xubyArIChzYW1lIC0gZS0+c19sbm8pOworCQlzcGxpdFsyXS5udW1fbGluZXMgPSBlLT5zX2xubyArIGUtPm51bV9saW5lcyAtIHNhbWU7CisJCWNodW5rX2VuZF9sbm8gPSBzcGxpdFsyXS5sbm87CisJfQorCWVsc2UKKwkJY2h1bmtfZW5kX2xubyA9IGUtPmxubyArIGUtPm51bV9saW5lczsKKwlzcGxpdFsxXS5udW1fbGluZXMgPSBjaHVua19lbmRfbG5vIC0gc3BsaXRbMV0ubG5vOworCisJLyoKKwkgKiBpZiBpdCB0dXJucyBvdXQgdGhlcmUgaXMgbm90aGluZyB0byBibGFtZSB0aGUgcGFyZW50IGZvciwKKwkgKiBmb3JnZXQgYWJvdXQgdGhlIHNwbGl0dGluZy4gICFzcGxpdFsxXS5zdXNwZWN0IHNpZ25hbHMgdGhpcy4KKwkgKi8KKwlpZiAoc3BsaXRbMV0ubnVtX2xpbmVzIDwgMSkKKwkJcmV0dXJuOworCXNwbGl0WzFdLnN1c3BlY3QgPSBibGFtZV9vcmlnaW5faW5jcmVmKHBhcmVudCk7Cit9CisKKy8qCisgKiBzcGxpdF9vdmVybGFwKCkgZGl2aWRlZCBhbiBleGlzdGluZyBibGFtZSBlIGludG8gdXAgdG8gdGhyZWUgcGFydHMKKyAqIGluIHNwbGl0LiAgQW55IGFzc2lnbmVkIGJsYW1lIGlzIG1vdmVkIHRvIHF1ZXVlIHRvCisgKiByZWZsZWN0IHRoZSBzcGxpdC4KKyAqLworc3RhdGljIHZvaWQgc3BsaXRfYmxhbWUoc3RydWN0IGJsYW1lX2VudHJ5ICoqKmJsYW1lZCwKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqKip1bmJsYW1lZCwKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQsCisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKmUpCit7CisJaWYgKHNwbGl0WzBdLnN1c3BlY3QgJiYgc3BsaXRbMl0uc3VzcGVjdCkgeworCQkvKiBUaGUgZmlyc3QgcGFydCAocmV1c2Ugc3RvcmFnZSBmb3IgdGhlIGV4aXN0aW5nIGVudHJ5IGUpICovCisJCWR1cF9lbnRyeSh1bmJsYW1lZCwgZSwgJnNwbGl0WzBdKTsKKworCQkvKiBUaGUgbGFzdCBwYXJ0IC0tIG1lICovCisJCWFkZF9ibGFtZV9lbnRyeSh1bmJsYW1lZCwgJnNwbGl0WzJdKTsKKworCQkvKiAuLi4gYW5kIHRoZSBtaWRkbGUgcGFydCAtLSBwYXJlbnQgKi8KKwkJYWRkX2JsYW1lX2VudHJ5KGJsYW1lZCwgJnNwbGl0WzFdKTsKKwl9CisJZWxzZSBpZiAoIXNwbGl0WzBdLnN1c3BlY3QgJiYgIXNwbGl0WzJdLnN1c3BlY3QpCisJCS8qCisJCSAqIFRoZSBwYXJlbnQgY292ZXJzIHRoZSBlbnRpcmUgYXJlYTsgcmV1c2Ugc3RvcmFnZSBmb3IKKwkJICogZSBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBwYXJlbnQuCisJCSAqLworCQlkdXBfZW50cnkoYmxhbWVkLCBlLCAmc3BsaXRbMV0pOworCWVsc2UgaWYgKHNwbGl0WzBdLnN1c3BlY3QpIHsKKwkJLyogbWUgYW5kIHRoZW4gcGFyZW50ICovCisJCWR1cF9lbnRyeSh1bmJsYW1lZCwgZSwgJnNwbGl0WzBdKTsKKwkJYWRkX2JsYW1lX2VudHJ5KGJsYW1lZCwgJnNwbGl0WzFdKTsKKwl9CisJZWxzZSB7CisJCS8qIHBhcmVudCBhbmQgdGhlbiBtZSAqLworCQlkdXBfZW50cnkoYmxhbWVkLCBlLCAmc3BsaXRbMV0pOworCQlhZGRfYmxhbWVfZW50cnkodW5ibGFtZWQsICZzcGxpdFsyXSk7CisJfQorfQorCisvKgorICogQWZ0ZXIgc3BsaXR0aW5nIHRoZSBibGFtZSwgdGhlIG9yaWdpbnMgdXNlZCBieSB0aGUKKyAqIG9uLXN0YWNrIGJsYW1lX2VudHJ5IHNob3VsZCBsb3NlIG9uZSByZWZjbnQgZWFjaC4KKyAqLworc3RhdGljIHZvaWQgZGVjcmVmX3NwbGl0KHN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlibGFtZV9vcmlnaW5fZGVjcmVmKHNwbGl0W2ldLnN1c3BlY3QpOworfQorCisvKgorICogcmV2ZXJzZV9ibGFtZSByZXZlcnNlcyB0aGUgbGlzdCBnaXZlbiBpbiBoZWFkLCBhcHBlbmRpbmcgdGFpbC4KKyAqIFRoYXQgYWxsb3dzIHVzIHRvIGJ1aWxkIGxpc3RzIGluIHJldmVyc2Ugb3JkZXIsIHRoZW4gcmV2ZXJzZSB0aGVtCisgKiBhZnRlcndhcmRzLiAgVGhpcyBjYW4gYmUgZmFzdGVyIHRoYW4gYnVpbGRpbmcgdGhlIGxpc3QgaW4gcHJvcGVyCisgKiBvcmRlciByaWdodCBhd2F5LiAgVGhlIHJlYXNvbiBpcyB0aGF0IGJ1aWxkaW5nIGluIHByb3BlciBvcmRlcgorICogcmVxdWlyZXMgd3JpdGluZyBhIGxpbmsgaW4gdGhlIF9wcmV2aW91c18gZWxlbWVudCwgd2hpbGUgYnVpbGRpbmcKKyAqIGluIHJldmVyc2Ugb3JkZXIganVzdCByZXF1aXJlcyBwbGFjaW5nIHRoZSBsaXN0IGhlYWQgaW50byB0aGUKKyAqIF9jdXJyZW50XyBlbGVtZW50LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgYmxhbWVfZW50cnkgKnJldmVyc2VfYmxhbWUoc3RydWN0IGJsYW1lX2VudHJ5ICpoZWFkLAorCQkJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICp0YWlsKQoreworCXdoaWxlIChoZWFkKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV4dCA9IGhlYWQtPm5leHQ7CisJCWhlYWQtPm5leHQgPSB0YWlsOworCQl0YWlsID0gaGVhZDsKKwkJaGVhZCA9IG5leHQ7CisJfQorCXJldHVybiB0YWlsOworfQorCisvKgorICogU3BsaXRzIGEgYmxhbWUgZW50cnkgaW50byB0d28gZW50cmllcyBhdCAnbGVuJyBsaW5lcy4gIFRoZSBvcmlnaW5hbCAnZScKKyAqIGNvbnNpc3RzIG9mIGxlbiBsaW5lcywgaS5lLiBbZS0+bG5vLCBlLT5sbm8gKyBsZW4pLCBhbmQgdGhlIHNlY29uZCBwYXJ0LAorICogd2hpY2ggaXMgcmV0dXJuZWQsIGNvbnNpc3RzIG9mIHRoZSByZW1haW5kZXI6IFtlLT5sbm8gKyBsZW4sIGUtPmxubyArCisgKiBlLT5udW1fbGluZXMpLiAgVGhlIGNhbGxlciBuZWVkcyB0byBzb3J0IG91dCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGZvciB0aGUKKyAqIG5ldyBlbnRyeSdzIHN1c3BlY3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0X2JsYW1lX2F0KHN0cnVjdCBibGFtZV9lbnRyeSAqZSwgaW50IGxlbiwKKwkJCQkJICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpuZXdfc3VzcGVjdCkKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKm4gPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkpKTsKKworCW4tPnN1c3BlY3QgPSBuZXdfc3VzcGVjdDsKKwluLT5pZ25vcmVkID0gZS0+aWdub3JlZDsKKwluLT51bmJsYW1hYmxlID0gZS0+dW5ibGFtYWJsZTsKKwluLT5sbm8gPSBlLT5sbm8gKyBsZW47CisJbi0+c19sbm8gPSBlLT5zX2xubyArIGxlbjsKKwluLT5udW1fbGluZXMgPSBlLT5udW1fbGluZXMgLSBsZW47CisJZS0+bnVtX2xpbmVzID0gbGVuOworCWUtPnNjb3JlID0gMDsKKwlyZXR1cm4gbjsKK30KKworc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciB7CisJaW50IGlzX3BhcmVudDsKKwlpbnQgc19sbm87Cit9OworCitzdGF0aWMgaW50IGFyZV9saW5lc19hZGphY2VudChzdHJ1Y3QgYmxhbWVfbGluZV90cmFja2VyICpmaXJzdCwKKwkJCSAgICAgIHN0cnVjdCBibGFtZV9saW5lX3RyYWNrZXIgKnNlY29uZCkKK3sKKwlyZXR1cm4gZmlyc3QtPmlzX3BhcmVudCA9PSBzZWNvbmQtPmlzX3BhcmVudCAmJgorCSAgICAgICBmaXJzdC0+c19sbm8gKyAxID09IHNlY29uZC0+c19sbm87Cit9CisKK3N0YXRpYyBpbnQgc2Nhbl9wYXJlbnRfcmFuZ2Uoc3RydWN0IGZpbmdlcnByaW50ICpwX2ZwcywKKwkJCSAgICAgc3RydWN0IGZpbmdlcnByaW50ICp0X2ZwcywgaW50IHRfaWR4LAorCQkJICAgICBpbnQgZnJvbSwgaW50IG5yX2xpbmVzKQoreworCWludCBzaW0sIHBfaWR4OworCSNkZWZpbmUgRklOR0VSUFJJTlRfRklMRV9USFJFU0hPTEQJMTAKKwlpbnQgYmVzdF9zaW1fdmFsID0gRklOR0VSUFJJTlRfRklMRV9USFJFU0hPTEQ7CisJaW50IGJlc3Rfc2ltX2lkeCA9IC0xOworCisJZm9yIChwX2lkeCA9IGZyb207IHBfaWR4IDwgZnJvbSArIG5yX2xpbmVzOyBwX2lkeCsrKSB7CisJCXNpbSA9IGZpbmdlcnByaW50X3NpbWlsYXJpdHkoJnRfZnBzW3RfaWR4XSwgJnBfZnBzW3BfaWR4XSk7CisJCWlmIChzaW0gPCBiZXN0X3NpbV92YWwpCisJCQljb250aW51ZTsKKwkJLyogQnJlYWsgdGllcyB3aXRoIHRoZSBjbG9zZXN0LXRvLXRhcmdldCBsaW5lIG51bWJlciAqLworCQlpZiAoc2ltID09IGJlc3Rfc2ltX3ZhbCAmJiBiZXN0X3NpbV9pZHggIT0gLTEgJiYKKwkJICAgIGFicyhiZXN0X3NpbV9pZHggLSB0X2lkeCkgPCBhYnMocF9pZHggLSB0X2lkeCkpCisJCQljb250aW51ZTsKKwkJYmVzdF9zaW1fdmFsID0gc2ltOworCQliZXN0X3NpbV9pZHggPSBwX2lkeDsKKwl9CisJcmV0dXJuIGJlc3Rfc2ltX2lkeDsKK30KKworLyoKKyAqIFRoZSBmaXJzdCBwYXNzIGNoZWNrcyB0aGUgYmxhbWUgZW50cnkgKGZyb20gdGhlIHRhcmdldCkgYWdhaW5zdCB0aGUgcGFyZW50J3MKKyAqIGRpZmYgY2h1bmsuICBJZiB0aGF0IGZhaWxzIGZvciBhIGxpbmUsIHRoZSBzZWNvbmQgcGFzcyB0cmllcyB0byBtYXRjaCB0aGF0CisgKiBsaW5lIHRvIGFueSBwYXJ0IG9mIHBhcmVudCBmaWxlLiAgVGhhdCBjYXRjaGVzIGNhc2VzIHdoZXJlIGEgY2hhbmdlIHdhcworICogYnJva2VuIGludG8gdHdvIGNodW5rcyBieSAnY29udGV4dC4nCisgKi8KK3N0YXRpYyB2b2lkIGd1ZXNzX2xpbmVfYmxhbWVzKHN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCwKKwkJCSAgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKnRhcmdldCwKKwkJCSAgICAgIGludCB0bG5vLCBpbnQgb2Zmc2V0LCBpbnQgc2FtZSwgaW50IHBhcmVudF9sZW4sCisJCQkgICAgICBzdHJ1Y3QgYmxhbWVfbGluZV90cmFja2VyICpsaW5lX2JsYW1lcykKK3sKKwlpbnQgaSwgYmVzdF9pZHgsIHRhcmdldF9pZHg7CisJaW50IHBhcmVudF9zbG5vID0gdGxubyArIG9mZnNldDsKKwlpbnQgKmZ1enp5X21hdGNoZXM7CisKKwlmdXp6eV9tYXRjaGVzID0gZnV6enlfZmluZF9tYXRjaGluZ19saW5lcyhwYXJlbnQsIHRhcmdldCwKKwkJCQkJCSAgdGxubywgcGFyZW50X3Nsbm8sIHNhbWUsCisJCQkJCQkgIHBhcmVudF9sZW4pOworCWZvciAoaSA9IDA7IGkgPCBzYW1lIC0gdGxubzsgaSsrKSB7CisJCXRhcmdldF9pZHggPSB0bG5vICsgaTsKKwkJaWYgKGZ1enp5X21hdGNoZXMgJiYgZnV6enlfbWF0Y2hlc1tpXSA+PSAwKSB7CisJCQliZXN0X2lkeCA9IGZ1enp5X21hdGNoZXNbaV07CisJCX0gZWxzZSB7CisJCQliZXN0X2lkeCA9IHNjYW5fcGFyZW50X3JhbmdlKHBhcmVudC0+ZmluZ2VycHJpbnRzLAorCQkJCQkJICAgICB0YXJnZXQtPmZpbmdlcnByaW50cywKKwkJCQkJCSAgICAgdGFyZ2V0X2lkeCwgMCwKKwkJCQkJCSAgICAgcGFyZW50LT5udW1fbGluZXMpOworCQl9CisJCWlmIChiZXN0X2lkeCA+PSAwKSB7CisJCQlsaW5lX2JsYW1lc1tpXS5pc19wYXJlbnQgPSAxOworCQkJbGluZV9ibGFtZXNbaV0uc19sbm8gPSBiZXN0X2lkeDsKKwkJfSBlbHNlIHsKKwkJCWxpbmVfYmxhbWVzW2ldLmlzX3BhcmVudCA9IDA7CisJCQlsaW5lX2JsYW1lc1tpXS5zX2xubyA9IHRhcmdldF9pZHg7CisJCX0KKwl9CisJZnJlZShmdXp6eV9tYXRjaGVzKTsKK30KKworLyoKKyAqIFRoaXMgZGVjaWRlcyB3aGljaCBwYXJ0cyBvZiBhIGJsYW1lIGVudHJ5IGdvIHRvIHRoZSBwYXJlbnQgKGFkZGVkIHRvIHRoZQorICogaWdub3JlZHAgbGlzdCkgYW5kIHdoaWNoIHN0YXkgd2l0aCB0aGUgdGFyZ2V0IChhZGRlZCB0byB0aGUgZGlmZnAgbGlzdCkuICBUaGUKKyAqIGFjdHVhbCBkZWNpc2lvbiB3YXMgbWFkZSBpbiBhIHNlcGFyYXRlIGhldXJpc3RpYyBmdW5jdGlvbiwgYW5kIHRob3NlIGFuc3dlcnMKKyAqIGZvciB0aGUgbGluZXMgaW4gJ2UnIGFyZSBpbiBsaW5lX2JsYW1lcy4gIFRoaXMgY29uc3VtZXMgZSwgZXNzZW50aWFsbHkKKyAqIHB1dHRpbmcgaXQgb24gYSBsaXN0LgorICoKKyAqIE5vdGUgdGhhdCB0aGUgYmxhbWUgZW50cmllcyBvbiB0aGUgaWdub3JlZHAgbGlzdCBhcmUgbm90IG5lY2Vzc2FyaWx5IHNvcnRlZAorICogd2l0aCByZXNwZWN0IHRvIHRoZSBwYXJlbnQncyBsaW5lIG51bWJlcnMgeWV0LgorICovCitzdGF0aWMgdm9pZCBpZ25vcmVfYmxhbWVfZW50cnkoc3RydWN0IGJsYW1lX2VudHJ5ICplLAorCQkJICAgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCwKKwkJCSAgICAgICBzdHJ1Y3QgYmxhbWVfZW50cnkgKipkaWZmcCwKKwkJCSAgICAgICBzdHJ1Y3QgYmxhbWVfZW50cnkgKippZ25vcmVkcCwKKwkJCSAgICAgICBzdHJ1Y3QgYmxhbWVfbGluZV90cmFja2VyICpsaW5lX2JsYW1lcykKK3sKKwlpbnQgZW50cnlfbGVuLCBucl9saW5lcywgaTsKKworCS8qCisJICogV2UgY2FydmUgbmV3IGVudHJpZXMgb2ZmIHRoZSBmcm9udCBvZiBlLiAgRWFjaCBlbnRyeSBjb21lcyBmcm9tIGEKKwkgKiBjb250aWd1b3VzIGNodW5rIG9mIGxpbmVzOiBhZGphY2VudCBsaW5lcyBmcm9tIHRoZSBzYW1lIG9yaWdpbgorCSAqIChlaXRoZXIgdGhlIHBhcmVudCBvciB0aGUgdGFyZ2V0KS4KKwkgKi8KKwllbnRyeV9sZW4gPSAxOworCW5yX2xpbmVzID0gZS0+bnVtX2xpbmVzOwkvKiBlIGNoYW5nZXMgaW4gdGhlIGxvb3AgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfbGluZXM7IGkrKykgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBOVUxMOworCisJCS8qCisJCSAqIFdlIGFyZSBvZnRlbiBhZGphY2VudCB0byB0aGUgbmV4dCBsaW5lIC0gb25seSBzcGxpdCB0aGUgYmxhbWUKKwkJICogZW50cnkgd2hlbiB3ZSBoYXZlIHRvLgorCQkgKi8KKwkJaWYgKGkgKyAxIDwgbnJfbGluZXMpIHsKKwkJCWlmIChhcmVfbGluZXNfYWRqYWNlbnQoJmxpbmVfYmxhbWVzW2ldLAorCQkJCQkgICAgICAgJmxpbmVfYmxhbWVzW2kgKyAxXSkpIHsKKwkJCQllbnRyeV9sZW4rKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW5leHQgPSBzcGxpdF9ibGFtZV9hdChlLCBlbnRyeV9sZW4sCisJCQkJCSAgICAgIGJsYW1lX29yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCkpOworCQl9CisJCWlmIChsaW5lX2JsYW1lc1tpXS5pc19wYXJlbnQpIHsKKwkJCWUtPmlnbm9yZWQgPSAxOworCQkJYmxhbWVfb3JpZ2luX2RlY3JlZihlLT5zdXNwZWN0KTsKKwkJCWUtPnN1c3BlY3QgPSBibGFtZV9vcmlnaW5faW5jcmVmKHBhcmVudCk7CisJCQllLT5zX2xubyA9IGxpbmVfYmxhbWVzW2kgLSBlbnRyeV9sZW4gKyAxXS5zX2xubzsKKwkJCWUtPm5leHQgPSAqaWdub3JlZHA7CisJCQkqaWdub3JlZHAgPSBlOworCQl9IGVsc2UgeworCQkJZS0+dW5ibGFtYWJsZSA9IDE7CisJCQkvKiBlLT5zX2xubyBpcyBhbHJlYWR5IGluIHRoZSB0YXJnZXQncyBhZGRyZXNzIHNwYWNlLiAqLworCQkJZS0+bmV4dCA9ICpkaWZmcDsKKwkJCSpkaWZmcCA9IGU7CisJCX0KKwkJYXNzZXJ0KGUtPm51bV9saW5lcyA9PSBlbnRyeV9sZW4pOworCQllID0gbmV4dDsKKwkJZW50cnlfbGVuID0gMTsKKwl9CisJYXNzZXJ0KCFlKTsKK30KKworLyoKKyAqIFByb2Nlc3Mgb25lIGh1bmsgZnJvbSB0aGUgcGF0Y2ggYmV0d2VlbiB0aGUgY3VycmVudCBzdXNwZWN0IGZvcgorICogYmxhbWVfZW50cnkgZSBhbmQgaXRzIHBhcmVudC4gIFRoaXMgZmlyc3QgYmxhbWVzIGFueSB1bmZpbmlzaGVkCisgKiBlbnRyaWVzIGJlZm9yZSB0aGUgY2h1bmsgKHdoaWNoIGlzIHdoZXJlIHRhcmdldCBhbmQgcGFyZW50IHN0YXJ0CisgKiBkaWZmZXJpbmcpIG9uIHRoZSBwYXJlbnQsIGFuZCB0aGVuIHNwbGl0cyBibGFtZSBlbnRyaWVzIGF0IHRoZQorICogc3RhcnQgYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGRpZmZlcmVuY2UgcmVnaW9uLiAgU2luY2UgdXNlIG9mIC1NIGFuZAorICogLUMgb3B0aW9ucyBtYXkgbGVhZCB0byBvdmVybGFwcGluZy9kdXBsaWNhdGUgc291cmNlIGxpbmUgbnVtYmVyCisgKiByYW5nZXMsIGFsbCB3ZSBjYW4gcmVseSBvbiBmcm9tIHNvcnRpbmcvbWVyZ2luZyBpcyB0aGUgb3JkZXIgb2YgdGhlCisgKiBmaXJzdCBzdXNwZWN0IGxpbmUgbnVtYmVyLgorICoKKyAqIHRsbm86IGxpbmUgbnVtYmVyIGluIHRoZSB0YXJnZXQgd2hlcmUgdGhpcyBjaHVuayBiZWdpbnMKKyAqIHNhbWU6IGxpbmUgbnVtYmVyIGluIHRoZSB0YXJnZXQgd2hlcmUgdGhpcyBjaHVuayBlbmRzCisgKiBvZmZzZXQ6IGFkZCB0byB0bG5vIHRvIGdldCB0aGUgY2h1bmsgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIHBhcmVudAorICogcGFyZW50X2xlbjogbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBwYXJlbnQgY2h1bmsKKyAqLworc3RhdGljIHZvaWQgYmxhbWVfY2h1bmsoc3RydWN0IGJsYW1lX2VudHJ5ICoqKmRzdHEsIHN0cnVjdCBibGFtZV9lbnRyeSAqKipzcmNxLAorCQkJaW50IHRsbm8sIGludCBvZmZzZXQsIGludCBzYW1lLCBpbnQgcGFyZW50X2xlbiwKKwkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCwKKwkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnRhcmdldCwgaW50IGlnbm9yZV9kaWZmcykKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmUgPSAqKnNyY3E7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpzYW1lcCA9IE5VTEwsICpkaWZmcCA9IE5VTEwsICppZ25vcmVkcCA9IE5VTEw7CisJc3RydWN0IGJsYW1lX2xpbmVfdHJhY2tlciAqbGluZV9ibGFtZXMgPSBOVUxMOworCisJd2hpbGUgKGUgJiYgZS0+c19sbm8gPCB0bG5vKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV4dCA9IGUtPm5leHQ7CisJCS8qCisJCSAqIGN1cnJlbnQgcmVjb3JkIHN0YXJ0cyBiZWZvcmUgZGlmZmVyaW5nIHBvcnRpb24uICBJZgorCQkgKiBpdCByZWFjaGVzIGludG8gaXQsIHdlIG5lZWQgdG8gc3BsaXQgaXQgdXAgYW5kCisJCSAqIGV4YW1pbmUgdGhlIHNlY29uZCBwYXJ0IHNlcGFyYXRlbHkuCisJCSAqLworCQlpZiAoZS0+c19sbm8gKyBlLT5udW1fbGluZXMgPiB0bG5vKSB7CisJCQkvKiBNb3ZlIHNlY29uZCBoYWxmIHRvIGEgbmV3IHJlY29yZCAqLworCQkJc3RydWN0IGJsYW1lX2VudHJ5ICpuOworCisJCQluID0gc3BsaXRfYmxhbWVfYXQoZSwgdGxubyAtIGUtPnNfbG5vLCBlLT5zdXNwZWN0KTsKKwkJCS8qIFB1c2ggbmV3IHJlY29yZCB0byBkaWZmcCAqLworCQkJbi0+bmV4dCA9IGRpZmZwOworCQkJZGlmZnAgPSBuOworCQl9IGVsc2UKKwkJCWJsYW1lX29yaWdpbl9kZWNyZWYoZS0+c3VzcGVjdCk7CisJCS8qIFBhc3MgYmxhbWUgZm9yIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBkaWZmZXJpbmcKKwkJICogY2h1bmsgdG8gdGhlIHBhcmVudCAqLworCQllLT5zdXNwZWN0ID0gYmxhbWVfb3JpZ2luX2luY3JlZihwYXJlbnQpOworCQllLT5zX2xubyArPSBvZmZzZXQ7CisJCWUtPm5leHQgPSBzYW1lcDsKKwkJc2FtZXAgPSBlOworCQllID0gbmV4dDsKKwl9CisJLyoKKwkgKiBBcyB3ZSBkb24ndCBrbm93IGhvdyBtdWNoIG9mIGEgY29tbW9uIHN0cmV0Y2ggYWZ0ZXIgdGhpcworCSAqIGRpZmYgd2lsbCBvY2N1ciwgdGhlIGN1cnJlbnRseSBibGFtZWQgcGFydHMgYXJlIGFsbCB0aGF0IHdlCisJICogY2FuIGFzc2lnbiB0byB0aGUgcGFyZW50IGZvciBub3cuCisJICovCisKKwlpZiAoc2FtZXApIHsKKwkJKipkc3RxID0gcmV2ZXJzZV9ibGFtZShzYW1lcCwgKipkc3RxKTsKKwkJKmRzdHEgPSAmc2FtZXAtPm5leHQ7CisJfQorCS8qCisJICogUHJlcGVuZCB0aGUgc3BsaXQgb2ZmIHBvcnRpb25zOiBldmVyeXRoaW5nIGFmdGVyIGUgc3RhcnRzCisJICogYWZ0ZXIgdGhlIGJsYW1lYWJsZSBwb3J0aW9uLgorCSAqLworCWUgPSByZXZlcnNlX2JsYW1lKGRpZmZwLCBlKTsKKworCS8qCisJICogTm93IHJldGFpbiByZWNvcmRzIG9uIHRoZSB0YXJnZXQgd2hpbGUgcGFydHMgYXJlIGRpZmZlcmVudAorCSAqIGZyb20gdGhlIHBhcmVudC4KKwkgKi8KKwlzYW1lcCA9IE5VTEw7CisJZGlmZnAgPSBOVUxMOworCisJaWYgKGlnbm9yZV9kaWZmcyAmJiBzYW1lIC0gdGxubyA+IDApIHsKKwkJbGluZV9ibGFtZXMgPSB4Y2FsbG9jKHNpemVvZihzdHJ1Y3QgYmxhbWVfbGluZV90cmFja2VyKSwKKwkJCQkgICAgICBzYW1lIC0gdGxubyk7CisJCWd1ZXNzX2xpbmVfYmxhbWVzKHBhcmVudCwgdGFyZ2V0LCB0bG5vLCBvZmZzZXQsIHNhbWUsCisJCQkJICBwYXJlbnRfbGVuLCBsaW5lX2JsYW1lcyk7CisJfQorCisJd2hpbGUgKGUgJiYgZS0+c19sbm8gPCBzYW1lKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV4dCA9IGUtPm5leHQ7CisKKwkJLyoKKwkJICogSWYgY3VycmVudCByZWNvcmQgZXh0ZW5kcyBpbnRvIHNhbWVuZXNzLCBuZWVkIHRvIHNwbGl0LgorCQkgKi8KKwkJaWYgKGUtPnNfbG5vICsgZS0+bnVtX2xpbmVzID4gc2FtZSkgeworCQkJLyoKKwkJCSAqIE1vdmUgc2Vjb25kIGhhbGYgdG8gYSBuZXcgcmVjb3JkIHRvIGJlCisJCQkgKiBwcm9jZXNzZWQgYnkgbGF0ZXIgY2h1bmtzCisJCQkgKi8KKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqbjsKKworCQkJbiA9IHNwbGl0X2JsYW1lX2F0KGUsIHNhbWUgLSBlLT5zX2xubywKKwkJCQkJICAgYmxhbWVfb3JpZ2luX2luY3JlZihlLT5zdXNwZWN0KSk7CisJCQkvKiBQdXNoIG5ldyByZWNvcmQgdG8gc2FtZXAgKi8KKwkJCW4tPm5leHQgPSBzYW1lcDsKKwkJCXNhbWVwID0gbjsKKwkJfQorCQlpZiAoaWdub3JlX2RpZmZzKSB7CisJCQlpZ25vcmVfYmxhbWVfZW50cnkoZSwgcGFyZW50LCAmZGlmZnAsICZpZ25vcmVkcCwKKwkJCQkJICAgbGluZV9ibGFtZXMgKyBlLT5zX2xubyAtIHRsbm8pOworCQl9IGVsc2UgeworCQkJZS0+bmV4dCA9IGRpZmZwOworCQkJZGlmZnAgPSBlOworCQl9CisJCWUgPSBuZXh0OworCX0KKwlmcmVlKGxpbmVfYmxhbWVzKTsKKwlpZiAoaWdub3JlZHApIHsKKwkJLyoKKwkJICogTm90ZSBpZ25vcmVkcCBpcyBub3Qgc29ydGVkIHlldCwgYW5kIHRodXMgbmVpdGhlciBpcyBkc3RxLgorCQkgKiBUaGF0IGxpc3QgbXVzdCBiZSBzb3J0ZWQgYmVmb3JlIHdlIHF1ZXVlX2JsYW1lcygpLiAgV2UgZGVmZXIKKwkJICogc29ydGluZyB1bnRpbCBhZnRlciBhbGwgZGlmZiBodW5rcyBhcmUgcHJvY2Vzc2VkLCBzbyB0aGF0CisJCSAqIGd1ZXNzX2xpbmVfYmxhbWVzKCkgY2FuIHBpY2sgKmFueSogbGluZSBpbiB0aGUgcGFyZW50LiAgVGhlCisJCSAqIHNsaWdodCBkcmF3YmFjayBpcyB0aGF0IHdlIGVuZCB1cCBzb3J0aW5nIGFsbCBibGFtZSBlbnRyaWVzCisJCSAqIHBhc3NlZCB0byB0aGUgcGFyZW50LCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgdW5yZWxhdGVkIHRvCisJCSAqIGNoYW5nZXMgbWFkZSBieSB0aGUgaWdub3JlZCBjb21taXQuCisJCSAqLworCQkqKmRzdHEgPSByZXZlcnNlX2JsYW1lKGlnbm9yZWRwLCAqKmRzdHEpOworCQkqZHN0cSA9ICZpZ25vcmVkcC0+bmV4dDsKKwl9CisJKipzcmNxID0gcmV2ZXJzZV9ibGFtZShkaWZmcCwgcmV2ZXJzZV9ibGFtZShzYW1lcCwgZSkpOworCS8qIE1vdmUgYWNyb3NzIGVsZW1lbnRzIHRoYXQgYXJlIGluIHRoZSB1bmJsYW1hYmxlIHBvcnRpb24gKi8KKwlpZiAoZGlmZnApCisJCSpzcmNxID0gJmRpZmZwLT5uZXh0OworfQorCitzdHJ1Y3QgYmxhbWVfY2h1bmtfY2JfZGF0YSB7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50OworCXN0cnVjdCBibGFtZV9vcmlnaW4gKnRhcmdldDsKKwlsb25nIG9mZnNldDsKKwlpbnQgaWdub3JlX2RpZmZzOworCXN0cnVjdCBibGFtZV9lbnRyeSAqKmRzdHE7CisJc3RydWN0IGJsYW1lX2VudHJ5ICoqc3JjcTsKK307CisKKy8qIGRpZmYgY2h1bmtzIGFyZSBmcm9tIHBhcmVudCB0byB0YXJnZXQgKi8KK3N0YXRpYyBpbnQgYmxhbWVfY2h1bmtfY2IobG9uZyBzdGFydF9hLCBsb25nIGNvdW50X2EsCisJCQkgIGxvbmcgc3RhcnRfYiwgbG9uZyBjb3VudF9iLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBibGFtZV9jaHVua19jYl9kYXRhICpkID0gZGF0YTsKKwlpZiAoc3RhcnRfYSAtIHN0YXJ0X2IgIT0gZC0+b2Zmc2V0KQorCQlkaWUoImludGVybmFsIGVycm9yIGluIGJsYW1lOjpibGFtZV9jaHVua19jYiIpOworCWJsYW1lX2NodW5rKCZkLT5kc3RxLCAmZC0+c3JjcSwgc3RhcnRfYiwgc3RhcnRfYSAtIHN0YXJ0X2IsCisJCSAgICBzdGFydF9iICsgY291bnRfYiwgY291bnRfYSwgZC0+cGFyZW50LCBkLT50YXJnZXQsCisJCSAgICBkLT5pZ25vcmVfZGlmZnMpOworCWQtPm9mZnNldCA9IHN0YXJ0X2EgKyBjb3VudF9hIC0gKHN0YXJ0X2IgKyBjb3VudF9iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIGFyZSBsb29raW5nIGF0IHRoZSBvcmlnaW4gJ3RhcmdldCcgYW5kIGFpbWluZyB0byBwYXNzIGJsYW1lCisgKiBmb3IgdGhlIGxpbmVzIGl0IGlzIHN1c3BlY3RlZCB0byBpdHMgcGFyZW50LiAgUnVuIGRpZmYgdG8gZmluZAorICogd2hpY2ggbGluZXMgY2FtZSBmcm9tIHBhcmVudCBhbmQgcGFzcyBibGFtZSBmb3IgdGhlbS4KKyAqLworc3RhdGljIHZvaWQgcGFzc19ibGFtZV90b19wYXJlbnQoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLAorCQkJCSBzdHJ1Y3QgYmxhbWVfb3JpZ2luICp0YXJnZXQsCisJCQkJIHN0cnVjdCBibGFtZV9vcmlnaW4gKnBhcmVudCwgaW50IGlnbm9yZV9kaWZmcykKK3sKKwltbWZpbGVfdCBmaWxlX3AsIGZpbGVfbzsKKwlzdHJ1Y3QgYmxhbWVfY2h1bmtfY2JfZGF0YSBkOworCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV3ZGVzdCA9IE5VTEw7CisKKwlpZiAoIXRhcmdldC0+c3VzcGVjdHMpCisJCXJldHVybjsgLyogbm90aGluZyByZW1haW5zIGZvciB0aGlzIHRhcmdldCAqLworCisJZC5wYXJlbnQgPSBwYXJlbnQ7CisJZC50YXJnZXQgPSB0YXJnZXQ7CisJZC5vZmZzZXQgPSAwOworCWQuaWdub3JlX2RpZmZzID0gaWdub3JlX2RpZmZzOworCWQuZHN0cSA9ICZuZXdkZXN0OyBkLnNyY3EgPSAmdGFyZ2V0LT5zdXNwZWN0czsKKworCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBwYXJlbnQsICZmaWxlX3AsCisJCQkgJnNiLT5udW1fcmVhZF9ibG9iLCBpZ25vcmVfZGlmZnMpOworCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCB0YXJnZXQsICZmaWxlX28sCisJCQkgJnNiLT5udW1fcmVhZF9ibG9iLCBpZ25vcmVfZGlmZnMpOworCXNiLT5udW1fZ2V0X3BhdGNoKys7CisKKwlpZiAoZGlmZl9odW5rcygmZmlsZV9wLCAmZmlsZV9vLCBibGFtZV9jaHVua19jYiwgJmQsIHNiLT54ZGxfb3B0cykpCisJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgKCVzIC0+ICVzKSIsCisJCSAgICBvaWRfdG9faGV4KCZwYXJlbnQtPmNvbW1pdC0+b2JqZWN0Lm9pZCksCisJCSAgICBvaWRfdG9faGV4KCZ0YXJnZXQtPmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCS8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0aGUgcGFyZW50ICovCisJYmxhbWVfY2h1bmsoJmQuZHN0cSwgJmQuc3JjcSwgSU5UX01BWCwgZC5vZmZzZXQsIElOVF9NQVgsIDAsCisJCSAgICBwYXJlbnQsIHRhcmdldCwgMCk7CisJKmQuZHN0cSA9IE5VTEw7CisJaWYgKGlnbm9yZV9kaWZmcykKKwkJbmV3ZGVzdCA9IGxsaXN0X21lcmdlc29ydChuZXdkZXN0LCBnZXRfbmV4dF9ibGFtZSwKKwkJCQkJICBzZXRfbmV4dF9ibGFtZSwKKwkJCQkJICBjb21wYXJlX2JsYW1lX3N1c3BlY3QpOworCXF1ZXVlX2JsYW1lcyhzYiwgcGFyZW50LCBuZXdkZXN0KTsKKworCXJldHVybjsKK30KKworLyoKKyAqIFRoZSBsaW5lcyBpbiBibGFtZV9lbnRyeSBhZnRlciBzcGxpdHRpbmcgYmxhbWVzIG1hbnkgdGltZXMgY2FuIGJlY29tZQorICogdmVyeSBzbWFsbCBhbmQgdHJpdmlhbCwgYW5kIGF0IHNvbWUgcG9pbnQgaXQgYmVjb21lcyBwb2ludGxlc3MgdG8KKyAqIGJsYW1lIHRoZSBwYXJlbnRzLiAgRS5nLiAiXHRcdH1cblx0fVxuXG4iIGFwcGVhcnMgZXZlcnl3aGVyZSBpbiBhbnkKKyAqIG9yZGluYXJ5IEMgcHJvZ3JhbSwgYW5kIGl0IGlzIG5vdCB3b3J0aCB0byBzYXkgaXQgd2FzIGNvcGllZCBmcm9tCisgKiB0b3RhbGx5IHVucmVsYXRlZCBmaWxlIGluIHRoZSBwYXJlbnQuCisgKgorICogQ29tcHV0ZSBob3cgdHJpdmlhbCB0aGUgbGluZXMgaW4gdGhlIGJsYW1lX2VudHJ5IGFyZS4KKyAqLwordW5zaWduZWQgYmxhbWVfZW50cnlfc2NvcmUoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmUpCit7CisJdW5zaWduZWQgc2NvcmU7CisJY29uc3QgY2hhciAqY3AsICplcDsKKworCWlmIChlLT5zY29yZSkKKwkJcmV0dXJuIGUtPnNjb3JlOworCisJc2NvcmUgPSAxOworCWNwID0gYmxhbWVfbnRoX2xpbmUoc2IsIGUtPmxubyk7CisJZXAgPSBibGFtZV9udGhfbGluZShzYiwgZS0+bG5vICsgZS0+bnVtX2xpbmVzKTsKKwl3aGlsZSAoY3AgPCBlcCkgeworCQl1bnNpZ25lZCBjaCA9ICooKHVuc2lnbmVkIGNoYXIgKiljcCk7CisJCWlmIChpc2FsbnVtKGNoKSkKKwkJCXNjb3JlKys7CisJCWNwKys7CisJfQorCWUtPnNjb3JlID0gc2NvcmU7CisJcmV0dXJuIHNjb3JlOworfQorCisvKgorICogYmVzdF9zb19mYXJbXSBhbmQgcG90ZW50aWFsW10gYXJlIGJvdGggYSBzcGxpdCBvZiBhbiBleGlzdGluZyBibGFtZV9lbnRyeQorICogdGhhdCBwYXNzZXMgYmxhbWUgdG8gdGhlIHBhcmVudC4gIE1haW50YWluIGJlc3Rfc29fZmFyIHRoZSBiZXN0IHNwbGl0IHNvCisgKiBmYXIsIGJ5IGNvbXBhcmluZyBwb3RlbnRpYWwgYW5kIGJlc3Rfc29fZmFyIGFuZCBjb3B5aW5nIHBvdGVudGlhbCBpbnRvCisgKiBic3Rfc29fZmFyIGFzIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQgY29weV9zcGxpdF9pZl9iZXR0ZXIoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLAorCQkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKmJlc3Rfc29fZmFyLAorCQkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKnBvdGVudGlhbCkKK3sKKwlpbnQgaTsKKworCWlmICghcG90ZW50aWFsWzFdLnN1c3BlY3QpCisJCXJldHVybjsKKwlpZiAoYmVzdF9zb19mYXJbMV0uc3VzcGVjdCkgeworCQlpZiAoYmxhbWVfZW50cnlfc2NvcmUoc2IsICZwb3RlbnRpYWxbMV0pIDwKKwkJICAgIGJsYW1lX2VudHJ5X3Njb3JlKHNiLCAmYmVzdF9zb19mYXJbMV0pKQorCQkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWJsYW1lX29yaWdpbl9pbmNyZWYocG90ZW50aWFsW2ldLnN1c3BlY3QpOworCWRlY3JlZl9zcGxpdChiZXN0X3NvX2Zhcik7CisJbWVtY3B5KGJlc3Rfc29fZmFyLCBwb3RlbnRpYWwsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnlbM10pKTsKK30KKworLyoKKyAqIFdlIGFyZSBsb29raW5nIGF0IGEgcGFydCBvZiB0aGUgZmluYWwgaW1hZ2UgcmVwcmVzZW50ZWQgYnkKKyAqIGVudCAodGxubyBhbmQgc2FtZSBhcmUgb2Zmc2V0IGJ5IGVudC0+c19sbm8pLgorICogdGxubyBpcyB3aGVyZSB3ZSBhcmUgbG9va2luZyBhdCBpbiB0aGUgZmluYWwgaW1hZ2UuCisgKiB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHNhbWUgbWF0Y2ggcHJlaW1hZ2UuCisgKiBwbG5vIGlzIHdoZXJlIHdlIGFyZSBsb29raW5nIGF0IGluIHRoZSBwcmVpbWFnZS4KKyAqCisgKiA8LS0tLS0tLS0tLS0tLS0gZmluYWwgaW1hZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KKyAqICAgICAgIDwtLS0tLS1lbnQtLS0tLS0+CisgKiAgICAgICAgIF50bG5vIF5zYW1lCisgKiAgICA8LS0tLS0tLS0tcHJlaW1hZ2UtLS0tLT4KKyAqICAgICAgICAgXnBsbm8KKyAqCisgKiBBbGwgbGluZSBudW1iZXJzIGFyZSAwLWJhc2VkLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfc3BsaXQoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLAorCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LAorCQkJIGludCB0bG5vLCBpbnQgcGxubywgaW50IHNhbWUsCisJCQkgc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50LAorCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQpCit7CisJaWYgKGVudC0+bnVtX2xpbmVzIDw9IHRsbm8pCisJCXJldHVybjsKKwlpZiAodGxubyA8IHNhbWUpIHsKKwkJc3RydWN0IGJsYW1lX2VudHJ5IHBvdGVudGlhbFszXTsKKwkJdGxubyArPSBlbnQtPnNfbG5vOworCQlzYW1lICs9IGVudC0+c19sbm87CisJCXNwbGl0X292ZXJsYXAocG90ZW50aWFsLCBlbnQsIHRsbm8sIHBsbm8sIHNhbWUsIHBhcmVudCk7CisJCWNvcHlfc3BsaXRfaWZfYmV0dGVyKHNiLCBzcGxpdCwgcG90ZW50aWFsKTsKKwkJZGVjcmVmX3NwbGl0KHBvdGVudGlhbCk7CisJfQorfQorCitzdHJ1Y3QgaGFuZGxlX3NwbGl0X2NiX2RhdGEgeworCXN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYjsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwYXJlbnQ7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdDsKKwlsb25nIHBsbm87CisJbG9uZyB0bG5vOworfTsKKworc3RhdGljIGludCBoYW5kbGVfc3BsaXRfY2IobG9uZyBzdGFydF9hLCBsb25nIGNvdW50X2EsCisJCQkgICBsb25nIHN0YXJ0X2IsIGxvbmcgY291bnRfYiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaGFuZGxlX3NwbGl0X2NiX2RhdGEgKmQgPSBkYXRhOworCWhhbmRsZV9zcGxpdChkLT5zYiwgZC0+ZW50LCBkLT50bG5vLCBkLT5wbG5vLCBzdGFydF9iLCBkLT5wYXJlbnQsCisJCSAgICAgZC0+c3BsaXQpOworCWQtPnBsbm8gPSBzdGFydF9hICsgY291bnRfYTsKKwlkLT50bG5vID0gc3RhcnRfYiArIGNvdW50X2I7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBsaW5lcyBmcm9tIHBhcmVudCB0aGF0IGFyZSB0aGUgc2FtZSBhcyBlbnQgc28gdGhhdAorICogd2UgY2FuIHBhc3MgYmxhbWVzIHRvIGl0LiAgZmlsZV9wIGhhcyB0aGUgYmxvYiBjb250ZW50cyBmb3IKKyAqIHRoZSBwYXJlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGZpbmRfY29weV9pbl9ibG9iKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCSAgICAgIHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LAorCQkJICAgICAgc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50LAorCQkJICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdCwKKwkJCSAgICAgIG1tZmlsZV90ICpmaWxlX3ApCit7CisJY29uc3QgY2hhciAqY3A7CisJbW1maWxlX3QgZmlsZV9vOworCXN0cnVjdCBoYW5kbGVfc3BsaXRfY2JfZGF0YSBkOworCisJbWVtc2V0KCZkLCAwLCBzaXplb2YoZCkpOworCWQuc2IgPSBzYjsgZC5lbnQgPSBlbnQ7IGQucGFyZW50ID0gcGFyZW50OyBkLnNwbGl0ID0gc3BsaXQ7CisJLyoKKwkgKiBQcmVwYXJlIG1tZmlsZSB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIGxpbmVzIGluIGVudC4KKwkgKi8KKwljcCA9IGJsYW1lX250aF9saW5lKHNiLCBlbnQtPmxubyk7CisJZmlsZV9vLnB0ciA9IChjaGFyICopIGNwOworCWZpbGVfby5zaXplID0gYmxhbWVfbnRoX2xpbmUoc2IsIGVudC0+bG5vICsgZW50LT5udW1fbGluZXMpIC0gY3A7CisKKwkvKgorCSAqIGZpbGVfbyBpcyBhIHBhcnQgb2YgZmluYWwgaW1hZ2Ugd2UgYXJlIGFubm90YXRpbmcuCisJICogZmlsZV9wIHBhcnRpYWxseSBtYXkgbWF0Y2ggdGhhdCBpbWFnZS4KKwkgKi8KKwltZW1zZXQoc3BsaXQsIDAsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkgWzNdKSk7CisJaWYgKGRpZmZfaHVua3MoZmlsZV9wLCAmZmlsZV9vLCBoYW5kbGVfc3BsaXRfY2IsICZkLCBzYi0+eGRsX29wdHMpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmICglcykiLAorCQkgICAgb2lkX3RvX2hleCgmcGFyZW50LT5jb21taXQtPm9iamVjdC5vaWQpKTsKKwkvKiByZW1haW5kZXIsIGlmIGFueSwgYWxsIG1hdGNoIHRoZSBwcmVpbWFnZSAqLworCWhhbmRsZV9zcGxpdChzYiwgZW50LCBkLnRsbm8sIGQucGxubywgZW50LT5udW1fbGluZXMsIHBhcmVudCwgc3BsaXQpOworfQorCisvKiBNb3ZlIGFsbCBibGFtZSBlbnRyaWVzIGZyb20gbGlzdCAqc291cmNlIHRoYXQgaGF2ZSBhIHNjb3JlIHNtYWxsZXIKKyAqIHRoYW4gc2NvcmVfbWluIHRvIHRoZSBmcm9udCBvZiBsaXN0ICpzbWFsbC4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBsaW5rIHBvaW50aW5nIHRvIHRoZSBvbGQgaGVhZCBvZiB0aGUgc21hbGwgbGlzdC4KKyAqLworCitzdGF0aWMgc3RydWN0IGJsYW1lX2VudHJ5ICoqZmlsdGVyX3NtYWxsKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqKnNtYWxsLAorCQkJCQkgc3RydWN0IGJsYW1lX2VudHJ5ICoqc291cmNlLAorCQkJCQkgdW5zaWduZWQgc2NvcmVfbWluKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqcCA9ICpzb3VyY2U7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpvbGRzbWFsbCA9ICpzbWFsbDsKKwl3aGlsZSAocCkgeworCQlpZiAoYmxhbWVfZW50cnlfc2NvcmUoc2IsIHApIDw9IHNjb3JlX21pbikgeworCQkJKnNtYWxsID0gcDsKKwkJCXNtYWxsID0gJnAtPm5leHQ7CisJCQlwID0gKnNtYWxsOworCQl9IGVsc2UgeworCQkJKnNvdXJjZSA9IHA7CisJCQlzb3VyY2UgPSAmcC0+bmV4dDsKKwkJCXAgPSAqc291cmNlOworCQl9CisJfQorCSpzbWFsbCA9IG9sZHNtYWxsOworCSpzb3VyY2UgPSBOVUxMOworCXJldHVybiBzbWFsbDsKK30KKworLyoKKyAqIFNlZSBpZiBsaW5lcyBjdXJyZW50bHkgdGFyZ2V0IGlzIHN1c3BlY3RlZCBmb3IgY2FuIGJlIGF0dHJpYnV0ZWQgdG8KKyAqIHBhcmVudC4KKyAqLworc3RhdGljIHZvaWQgZmluZF9tb3ZlX2luX3BhcmVudChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsCisJCQkJc3RydWN0IGJsYW1lX2VudHJ5ICoqKmJsYW1lZCwKKwkJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKip0b29zbWFsbCwKKwkJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICp0YXJnZXQsCisJCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqcGFyZW50KQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqZSwgc3BsaXRbM107CisJc3RydWN0IGJsYW1lX2VudHJ5ICp1bmJsYW1lZCA9IHRhcmdldC0+c3VzcGVjdHM7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpsZWZ0b3ZlciA9IE5VTEw7CisJbW1maWxlX3QgZmlsZV9wOworCisJaWYgKCF1bmJsYW1lZCkKKwkJcmV0dXJuOyAvKiBub3RoaW5nIHJlbWFpbnMgZm9yIHRoaXMgdGFyZ2V0ICovCisKKwlmaWxsX29yaWdpbl9ibG9iKCZzYi0+cmV2cy0+ZGlmZm9wdCwgcGFyZW50LCAmZmlsZV9wLAorCQkJICZzYi0+bnVtX3JlYWRfYmxvYiwgMCk7CisJaWYgKCFmaWxlX3AucHRyKQorCQlyZXR1cm47CisKKwkvKiBBdCBlYWNoIGl0ZXJhdGlvbiwgdW5ibGFtZWQgaGFzIGEgTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2YKKwkgKiBlbnRyaWVzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gdGVzdGVkIGZvciBibGFtZS4gIGxlZnRvdmVyCisJICogY29udGFpbnMgdGhlIHJldmVyc2VkIGxpc3Qgb2YgZW50cmllcyB0aGF0IGhhdmUgYmVlbiB0ZXN0ZWQKKwkgKiB3aXRob3V0IGJlaW5nIGFzc2lnbmFibGUgdG8gdGhlIHBhcmVudC4KKwkgKi8KKwlkbyB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqKnVuYmxhbWVkdGFpbCA9ICZ1bmJsYW1lZDsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXh0OworCQlmb3IgKGUgPSB1bmJsYW1lZDsgZTsgZSA9IG5leHQpIHsKKwkJCW5leHQgPSBlLT5uZXh0OworCQkJZmluZF9jb3B5X2luX2Jsb2Ioc2IsIGUsIHBhcmVudCwgc3BsaXQsICZmaWxlX3ApOworCQkJaWYgKHNwbGl0WzFdLnN1c3BlY3QgJiYKKwkJCSAgICBzYi0+bW92ZV9zY29yZSA8IGJsYW1lX2VudHJ5X3Njb3JlKHNiLCAmc3BsaXRbMV0pKSB7CisJCQkJc3BsaXRfYmxhbWUoYmxhbWVkLCAmdW5ibGFtZWR0YWlsLCBzcGxpdCwgZSk7CisJCQl9IGVsc2UgeworCQkJCWUtPm5leHQgPSBsZWZ0b3ZlcjsKKwkJCQlsZWZ0b3ZlciA9IGU7CisJCQl9CisJCQlkZWNyZWZfc3BsaXQoc3BsaXQpOworCQl9CisJCSp1bmJsYW1lZHRhaWwgPSBOVUxMOworCQl0b29zbWFsbCA9IGZpbHRlcl9zbWFsbChzYiwgdG9vc21hbGwsICZ1bmJsYW1lZCwgc2ItPm1vdmVfc2NvcmUpOworCX0gd2hpbGUgKHVuYmxhbWVkKTsKKwl0YXJnZXQtPnN1c3BlY3RzID0gcmV2ZXJzZV9ibGFtZShsZWZ0b3ZlciwgTlVMTCk7Cit9CisKK3N0cnVjdCBibGFtZV9saXN0IHsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgc3BsaXRbM107Cit9OworCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoZSB0YXJnZXQgaXMgc3VzcGVjdGVkIGZvciwKKyAqIGFuZCBwcmVwYXJlIGEgbGlzdCBvZiBlbnRyeSBhbmQgdGhlIGJlc3Qgc3BsaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmxhbWVfbGlzdCAqc2V0dXBfYmxhbWVfbGlzdChzdHJ1Y3QgYmxhbWVfZW50cnkgKnVuYmxhbWVkLAorCQkJCQkgICBpbnQgKm51bV9lbnRzX3ApCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplOworCWludCBudW1fZW50cywgaTsKKwlzdHJ1Y3QgYmxhbWVfbGlzdCAqYmxhbWVfbGlzdCA9IE5VTEw7CisKKwlmb3IgKGUgPSB1bmJsYW1lZCwgbnVtX2VudHMgPSAwOyBlOyBlID0gZS0+bmV4dCkKKwkJbnVtX2VudHMrKzsKKwlpZiAobnVtX2VudHMpIHsKKwkJYmxhbWVfbGlzdCA9IHhjYWxsb2MobnVtX2VudHMsIHNpemVvZihzdHJ1Y3QgYmxhbWVfbGlzdCkpOworCQlmb3IgKGUgPSB1bmJsYW1lZCwgaSA9IDA7IGU7IGUgPSBlLT5uZXh0KQorCQkJYmxhbWVfbGlzdFtpKytdLmVudCA9IGU7CisJfQorCSpudW1fZW50c19wID0gbnVtX2VudHM7CisJcmV0dXJuIGJsYW1lX2xpc3Q7Cit9CisKKy8qCisgKiBGb3IgbGluZXMgdGFyZ2V0IGlzIHN1c3BlY3RlZCBmb3IsIHNlZSBpZiB3ZSBjYW4gZmluZCBjb2RlIG1vdmVtZW50CisgKiBhY3Jvc3MgZmlsZSBib3VuZGFyeSBmcm9tIHRoZSBwYXJlbnQgY29tbWl0LiAgcG9yaWdpbiBpcyB0aGUgcGF0aAorICogaW4gdGhlIHBhcmVudCB3ZSBhbHJlYWR5IHRyaWVkLgorICovCitzdGF0aWMgdm9pZCBmaW5kX2NvcHlfaW5fcGFyZW50KHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKioqYmxhbWVkLAorCQkJCXN0cnVjdCBibGFtZV9lbnRyeSAqKnRvb3NtYWxsLAorCQkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnRhcmdldCwKKwkJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsCisJCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqcG9yaWdpbiwKKwkJCQlpbnQgb3B0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRzOworCWludCBpLCBqOworCXN0cnVjdCBibGFtZV9saXN0ICpibGFtZV9saXN0OworCWludCBudW1fZW50czsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnVuYmxhbWVkID0gdGFyZ2V0LT5zdXNwZWN0czsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmxlZnRvdmVyID0gTlVMTDsKKworCWlmICghdW5ibGFtZWQpCisJCXJldHVybjsgLyogbm90aGluZyByZW1haW5zIGZvciB0aGlzIHRhcmdldCAqLworCisJcmVwb19kaWZmX3NldHVwKHNiLT5yZXBvLCAmZGlmZl9vcHRzKTsKKwlkaWZmX29wdHMuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKworCWRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRzKTsKKworCS8qIFRyeSAiZmluZCBjb3BpZXMgaGFyZGVyIiBvbiBuZXcgcGF0aCBpZiByZXF1ZXN0ZWQ7CisJICogd2UgZG8gbm90IHdhbnQgdG8gdXNlIGRpZmZjb3JlX3JlbmFtZSgpIGFjdHVhbGx5IHRvCisJICogbWF0Y2ggdGhpbmdzIHVwOyBmaW5kX2NvcGllc19oYXJkZXIgaXMgc2V0IG9ubHkgdG8KKwkgKiBmb3JjZSBkaWZmX3RyZWVfb2lkKCkgdG8gZmVlZCBhbGwgZmlsZXBhaXJzIHRvIGRpZmZfcXVldWUsCisJICogYW5kIHRoaXMgY29kZSBuZWVkcyB0byBiZSBhZnRlciBkaWZmX3NldHVwX2RvbmUoKSwgd2hpY2gKKwkgKiB1c3VhbGx5IG1ha2VzIGZpbmQtY29waWVzLWhhcmRlciBpbXBseSBjb3B5IGRldGVjdGlvbi4KKwkgKi8KKwlpZiAoKG9wdCAmIFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVNUKQorCSAgICB8fCAoKG9wdCAmIFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVIpCisJCSYmICghcG9yaWdpbiB8fCBzdHJjbXAodGFyZ2V0LT5wYXRoLCBwb3JpZ2luLT5wYXRoKSkpKQorCQlkaWZmX29wdHMuZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyID0gMTsKKworCWlmIChpc19udWxsX29pZCgmdGFyZ2V0LT5jb21taXQtPm9iamVjdC5vaWQpKQorCQlkb19kaWZmX2NhY2hlKGdldF9jb21taXRfdHJlZV9vaWQocGFyZW50KSwgJmRpZmZfb3B0cyk7CisJZWxzZQorCQlkaWZmX3RyZWVfb2lkKGdldF9jb21taXRfdHJlZV9vaWQocGFyZW50KSwKKwkJCSAgICAgIGdldF9jb21taXRfdHJlZV9vaWQodGFyZ2V0LT5jb21taXQpLAorCQkJICAgICAgIiIsICZkaWZmX29wdHMpOworCisJaWYgKCFkaWZmX29wdHMuZmxhZ3MuZmluZF9jb3BpZXNfaGFyZGVyKQorCQlkaWZmY29yZV9zdGQoJmRpZmZfb3B0cyk7CisKKwlkbyB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqKnVuYmxhbWVkdGFpbCA9ICZ1bmJsYW1lZDsKKwkJYmxhbWVfbGlzdCA9IHNldHVwX2JsYW1lX2xpc3QodW5ibGFtZWQsICZudW1fZW50cyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldOworCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqbm9yaWdpbjsKKwkJCW1tZmlsZV90IGZpbGVfcDsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSBwb3RlbnRpYWxbM107CisKKwkJCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkpCisJCQkJY29udGludWU7IC8qIGRvZXMgbm90IGV4aXN0IGluIHBhcmVudCAqLworCQkJaWYgKFNfSVNHSVRMSU5LKHAtPm9uZS0+bW9kZSkpCisJCQkJY29udGludWU7IC8qIGlnbm9yZSBnaXQgbGlua3MgKi8KKwkJCWlmIChwb3JpZ2luICYmICFzdHJjbXAocC0+b25lLT5wYXRoLCBwb3JpZ2luLT5wYXRoKSkKKwkJCQkvKiBmaW5kX21vdmUgYWxyZWFkeSBkZWFsdCB3aXRoIHRoaXMgcGF0aCAqLworCQkJCWNvbnRpbnVlOworCisJCQlub3JpZ2luID0gZ2V0X29yaWdpbihwYXJlbnQsIHAtPm9uZS0+cGF0aCk7CisJCQlvaWRjcHkoJm5vcmlnaW4tPmJsb2Jfb2lkLCAmcC0+b25lLT5vaWQpOworCQkJbm9yaWdpbi0+bW9kZSA9IHAtPm9uZS0+bW9kZTsKKwkJCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBub3JpZ2luLCAmZmlsZV9wLAorCQkJCQkgJnNiLT5udW1fcmVhZF9ibG9iLCAwKTsKKwkJCWlmICghZmlsZV9wLnB0cikKKwkJCQljb250aW51ZTsKKworCQkJZm9yIChqID0gMDsgaiA8IG51bV9lbnRzOyBqKyspIHsKKwkJCQlmaW5kX2NvcHlfaW5fYmxvYihzYiwgYmxhbWVfbGlzdFtqXS5lbnQsCisJCQkJCQkgIG5vcmlnaW4sIHBvdGVudGlhbCwgJmZpbGVfcCk7CisJCQkJY29weV9zcGxpdF9pZl9iZXR0ZXIoc2IsIGJsYW1lX2xpc3Rbal0uc3BsaXQsCisJCQkJCQkgICAgIHBvdGVudGlhbCk7CisJCQkJZGVjcmVmX3NwbGl0KHBvdGVudGlhbCk7CisJCQl9CisJCQlibGFtZV9vcmlnaW5fZGVjcmVmKG5vcmlnaW4pOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IG51bV9lbnRzOyBqKyspIHsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQgPSBibGFtZV9saXN0W2pdLnNwbGl0OworCQkJaWYgKHNwbGl0WzFdLnN1c3BlY3QgJiYKKwkJCSAgICBzYi0+Y29weV9zY29yZSA8IGJsYW1lX2VudHJ5X3Njb3JlKHNiLCAmc3BsaXRbMV0pKSB7CisJCQkJc3BsaXRfYmxhbWUoYmxhbWVkLCAmdW5ibGFtZWR0YWlsLCBzcGxpdCwKKwkJCQkJICAgIGJsYW1lX2xpc3Rbal0uZW50KTsKKwkJCX0gZWxzZSB7CisJCQkJYmxhbWVfbGlzdFtqXS5lbnQtPm5leHQgPSBsZWZ0b3ZlcjsKKwkJCQlsZWZ0b3ZlciA9IGJsYW1lX2xpc3Rbal0uZW50OworCQkJfQorCQkJZGVjcmVmX3NwbGl0KHNwbGl0KTsKKwkJfQorCQlmcmVlKGJsYW1lX2xpc3QpOworCQkqdW5ibGFtZWR0YWlsID0gTlVMTDsKKwkJdG9vc21hbGwgPSBmaWx0ZXJfc21hbGwoc2IsIHRvb3NtYWxsLCAmdW5ibGFtZWQsIHNiLT5jb3B5X3Njb3JlKTsKKwl9IHdoaWxlICh1bmJsYW1lZCk7CisJdGFyZ2V0LT5zdXNwZWN0cyA9IHJldmVyc2VfYmxhbWUobGVmdG92ZXIsIE5VTEwpOworCWRpZmZfZmx1c2goJmRpZmZfb3B0cyk7CisJY2xlYXJfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7Cit9CisKKy8qCisgKiBUaGUgYmxvYnMgb2Ygb3JpZ2luIGFuZCBwb3JpZ2luIGV4YWN0bHkgbWF0Y2gsIHNvIGV2ZXJ5dGhpbmcKKyAqIG9yaWdpbiBpcyBzdXNwZWN0ZWQgZm9yIGNhbiBiZSBibGFtZWQgb24gdGhlIHBhcmVudC4KKyAqLworc3RhdGljIHZvaWQgcGFzc193aG9sZV9ibGFtZShzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsCisJCQkgICAgIHN0cnVjdCBibGFtZV9vcmlnaW4gKm9yaWdpbiwgc3RydWN0IGJsYW1lX29yaWdpbiAqcG9yaWdpbikKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmUsICpzdXNwZWN0czsKKworCWlmICghcG9yaWdpbi0+ZmlsZS5wdHIgJiYgb3JpZ2luLT5maWxlLnB0cikgeworCQkvKiBTdGVhbCBpdHMgZmlsZSAqLworCQlwb3JpZ2luLT5maWxlID0gb3JpZ2luLT5maWxlOworCQlvcmlnaW4tPmZpbGUucHRyID0gTlVMTDsKKwl9CisJc3VzcGVjdHMgPSBvcmlnaW4tPnN1c3BlY3RzOworCW9yaWdpbi0+c3VzcGVjdHMgPSBOVUxMOworCWZvciAoZSA9IHN1c3BlY3RzOyBlOyBlID0gZS0+bmV4dCkgeworCQlibGFtZV9vcmlnaW5faW5jcmVmKHBvcmlnaW4pOworCQlibGFtZV9vcmlnaW5fZGVjcmVmKGUtPnN1c3BlY3QpOworCQllLT5zdXNwZWN0ID0gcG9yaWdpbjsKKwl9CisJcXVldWVfYmxhbWVzKHNiLCBwb3JpZ2luLCBzdXNwZWN0cyk7Cit9CisKKy8qCisgKiBXZSBwYXNzIGJsYW1lIGZyb20gdGhlIGN1cnJlbnQgY29tbWl0IHRvIGl0cyBwYXJlbnRzLiAgV2Uga2VlcCBzYXlpbmcKKyAqICJwYXJlbnQiIChhbmQgInBvcmlnaW4iKSwgYnV0IHdoYXQgd2UgbWVhbiBpcyB0byBmaW5kIHNjYXBlZ29hdCB0bworICogZXhvbmVyYXRlIG91cnNlbHZlcy4KKyAqLworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqZmlyc3Rfc2NhcGVnb2F0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQlpbnQgcmV2ZXJzZSkKK3sKKwlpZiAoIXJldmVyc2UpIHsKKwkJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5ICYmCisJCSAgICBjb21taXQtPnBhcmVudHMgJiYKKwkJICAgIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQkJZnJlZV9jb21taXRfbGlzdChjb21taXQtPnBhcmVudHMtPm5leHQpOworCQkJY29tbWl0LT5wYXJlbnRzLT5uZXh0ID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gY29tbWl0LT5wYXJlbnRzOworCX0KKwlyZXR1cm4gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOworfQorCitzdGF0aWMgaW50IG51bV9zY2FwZWdvYXRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgcmV2ZXJzZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmwgPSBmaXJzdF9zY2FwZWdvYXQocmV2cywgY29tbWl0LCByZXZlcnNlKTsKKwlyZXR1cm4gY29tbWl0X2xpc3RfY291bnQobCk7Cit9CisKKy8qIERpc3RyaWJ1dGUgY29sbGVjdGVkIHVuc29ydGVkIGJsYW1lcyB0byB0aGUgcmVzcGVjdGVkIHNvcnRlZCBsaXN0cworICogaW4gdGhlIHZhcmlvdXMgb3JpZ2lucy4KKyAqLworc3RhdGljIHZvaWQgZGlzdHJpYnV0ZV9ibGFtZShzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9lbnRyeSAqYmxhbWVkKQoreworCWJsYW1lZCA9IGxsaXN0X21lcmdlc29ydChibGFtZWQsIGdldF9uZXh0X2JsYW1lLCBzZXRfbmV4dF9ibGFtZSwKKwkJCQkgY29tcGFyZV9ibGFtZV9zdXNwZWN0KTsKKwl3aGlsZSAoYmxhbWVkKQorCXsKKwkJc3RydWN0IGJsYW1lX29yaWdpbiAqcG9yaWdpbiA9IGJsYW1lZC0+c3VzcGVjdDsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICpzdXNwZWN0cyA9IE5VTEw7CisJCWRvIHsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV4dCA9IGJsYW1lZC0+bmV4dDsKKwkJCWJsYW1lZC0+bmV4dCA9IHN1c3BlY3RzOworCQkJc3VzcGVjdHMgPSBibGFtZWQ7CisJCQlibGFtZWQgPSBuZXh0OworCQl9IHdoaWxlIChibGFtZWQgJiYgYmxhbWVkLT5zdXNwZWN0ID09IHBvcmlnaW4pOworCQlzdXNwZWN0cyA9IHJldmVyc2VfYmxhbWUoc3VzcGVjdHMsIE5VTEwpOworCQlxdWV1ZV9ibGFtZXMoc2IsIHBvcmlnaW4sIHN1c3BlY3RzKTsKKwl9Cit9CisKKyNkZWZpbmUgTUFYU0cgMTYKKworc3RhdGljIHZvaWQgcGFzc19ibGFtZShzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9vcmlnaW4gKm9yaWdpbiwgaW50IG9wdCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBzYi0+cmV2czsKKwlpbnQgaSwgcGFzcywgbnVtX3NnOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IG9yaWdpbi0+Y29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqc2c7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqc2dfYnVmW01BWFNHXTsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwb3JpZ2luLCAqKnNnX29yaWdpbiA9IHNnX2J1ZjsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnRvb3NtYWxsID0gTlVMTDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmJsYW1lcywgKipibGFtZXRhaWwgPSAmYmxhbWVzOworCisJbnVtX3NnID0gbnVtX3NjYXBlZ29hdHMocmV2cywgY29tbWl0LCBzYi0+cmV2ZXJzZSk7CisJaWYgKCFudW1fc2cpCisJCWdvdG8gZmluaXNoOworCWVsc2UgaWYgKG51bV9zZyA8IEFSUkFZX1NJWkUoc2dfYnVmKSkKKwkJbWVtc2V0KHNnX2J1ZiwgMCwgc2l6ZW9mKHNnX2J1ZikpOworCWVsc2UKKwkJc2dfb3JpZ2luID0geGNhbGxvYyhudW1fc2csIHNpemVvZigqc2dfb3JpZ2luKSk7CisKKwkvKgorCSAqIFRoZSBmaXJzdCBwYXNzIGxvb2tzIGZvciB1bnJlbmFtZWQgcGF0aCB0byBvcHRpbWl6ZSBmb3IKKwkgKiBjb21tb24gY2FzZXMsIHRoZW4gd2UgbG9vayBmb3IgcmVuYW1lcyBpbiB0aGUgc2Vjb25kIHBhc3MuCisJICovCisJZm9yIChwYXNzID0gMDsgcGFzcyA8IDIgLSBzYi0+bm9fd2hvbGVfZmlsZV9yZW5hbWU7IHBhc3MrKykgeworCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICooKmZpbmQpKHN0cnVjdCByZXBvc2l0b3J5ICosIHN0cnVjdCBjb21taXQgKiwgc3RydWN0IGJsYW1lX29yaWdpbiAqKTsKKwkJZmluZCA9IHBhc3MgPyBmaW5kX3JlbmFtZSA6IGZpbmRfb3JpZ2luOworCisJCWZvciAoaSA9IDAsIHNnID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCwgc2ItPnJldmVyc2UpOworCQkgICAgIGkgPCBudW1fc2cgJiYgc2c7CisJCSAgICAgc2cgPSBzZy0+bmV4dCwgaSsrKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gc2ctPml0ZW07CisJCQlpbnQgaiwgc2FtZTsKKworCQkJaWYgKHNnX29yaWdpbltpXSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwYXJzZV9jb21taXQocCkpCisJCQkJY29udGludWU7CisJCQlwb3JpZ2luID0gZmluZChzYi0+cmVwbywgcCwgb3JpZ2luKTsKKwkJCWlmICghcG9yaWdpbikKKwkJCQljb250aW51ZTsKKwkJCWlmIChvaWRlcSgmcG9yaWdpbi0+YmxvYl9vaWQsICZvcmlnaW4tPmJsb2Jfb2lkKSkgeworCQkJCXBhc3Nfd2hvbGVfYmxhbWUoc2IsIG9yaWdpbiwgcG9yaWdpbik7CisJCQkJYmxhbWVfb3JpZ2luX2RlY3JlZihwb3JpZ2luKTsKKwkJCQlnb3RvIGZpbmlzaDsKKwkJCX0KKwkJCWZvciAoaiA9IHNhbWUgPSAwOyBqIDwgaTsgaisrKQorCQkJCWlmIChzZ19vcmlnaW5bal0gJiYKKwkJCQkgICAgb2lkZXEoJnNnX29yaWdpbltqXS0+YmxvYl9vaWQsICZwb3JpZ2luLT5ibG9iX29pZCkpIHsKKwkJCQkJc2FtZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmICghc2FtZSkKKwkJCQlzZ19vcmlnaW5baV0gPSBwb3JpZ2luOworCQkJZWxzZQorCQkJCWJsYW1lX29yaWdpbl9kZWNyZWYocG9yaWdpbik7CisJCX0KKwl9CisKKwlzYi0+bnVtX2NvbW1pdHMrKzsKKwlmb3IgKGkgPSAwLCBzZyA9IGZpcnN0X3NjYXBlZ29hdChyZXZzLCBjb21taXQsIHNiLT5yZXZlcnNlKTsKKwkgICAgIGkgPCBudW1fc2cgJiYgc2c7CisJICAgICBzZyA9IHNnLT5uZXh0LCBpKyspIHsKKwkJc3RydWN0IGJsYW1lX29yaWdpbiAqcG9yaWdpbiA9IHNnX29yaWdpbltpXTsKKwkJaWYgKCFwb3JpZ2luKQorCQkJY29udGludWU7CisJCWlmICghb3JpZ2luLT5wcmV2aW91cykgeworCQkJYmxhbWVfb3JpZ2luX2luY3JlZihwb3JpZ2luKTsKKwkJCW9yaWdpbi0+cHJldmlvdXMgPSBwb3JpZ2luOworCQl9CisJCXBhc3NfYmxhbWVfdG9fcGFyZW50KHNiLCBvcmlnaW4sIHBvcmlnaW4sIDApOworCQlpZiAoIW9yaWdpbi0+c3VzcGVjdHMpCisJCQlnb3RvIGZpbmlzaDsKKwl9CisKKwkvKgorCSAqIFBhc3MgcmVtYWluaW5nIHN1c3BlY3RzIGZvciBpZ25vcmVkIGNvbW1pdHMgdG8gdGhlaXIgcGFyZW50cy4KKwkgKi8KKwlpZiAob2lkc2V0X2NvbnRhaW5zKCZzYi0+aWdub3JlX2xpc3QsICZjb21taXQtPm9iamVjdC5vaWQpKSB7CisJCWZvciAoaSA9IDAsIHNnID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCwgc2ItPnJldmVyc2UpOworCQkgICAgIGkgPCBudW1fc2cgJiYgc2c7CisJCSAgICAgc2cgPSBzZy0+bmV4dCwgaSsrKSB7CisJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwb3JpZ2luID0gc2dfb3JpZ2luW2ldOworCisJCQlpZiAoIXBvcmlnaW4pCisJCQkJY29udGludWU7CisJCQlwYXNzX2JsYW1lX3RvX3BhcmVudChzYiwgb3JpZ2luLCBwb3JpZ2luLCAxKTsKKwkJCS8qCisJCQkgKiBQcmVlbXB0aXZlbHkgZHJvcCBwb3JpZ2luIHNvIHdlIGNhbiByZWZyZXNoIHRoZQorCQkJICogZmluZ2VycHJpbnRzIGlmIHdlIHVzZSB0aGUgcGFyZW50IGFnYWluLCB3aGljaCBjYW4KKwkJCSAqIG9jY3VyIGlmIHlvdSBpZ25vcmUgYmFjay10by1iYWNrIGNvbW1pdHMuCisJCQkgKi8KKwkJCWRyb3Bfb3JpZ2luX2Jsb2IocG9yaWdpbik7CisJCQlpZiAoIW9yaWdpbi0+c3VzcGVjdHMpCisJCQkJZ290byBmaW5pc2g7CisJCX0KKwl9CisKKwkvKgorCSAqIE9wdGlvbmFsbHkgZmluZCBtb3ZlcyBpbiBwYXJlbnRzJyBmaWxlcy4KKwkgKi8KKwlpZiAob3B0ICYgUElDS0FYRV9CTEFNRV9NT1ZFKSB7CisJCWZpbHRlcl9zbWFsbChzYiwgJnRvb3NtYWxsLCAmb3JpZ2luLT5zdXNwZWN0cywgc2ItPm1vdmVfc2NvcmUpOworCQlpZiAob3JpZ2luLT5zdXNwZWN0cykgeworCQkJZm9yIChpID0gMCwgc2cgPSBmaXJzdF9zY2FwZWdvYXQocmV2cywgY29tbWl0LCBzYi0+cmV2ZXJzZSk7CisJCQkgICAgIGkgPCBudW1fc2cgJiYgc2c7CisJCQkgICAgIHNnID0gc2ctPm5leHQsIGkrKykgeworCQkJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnBvcmlnaW4gPSBzZ19vcmlnaW5baV07CisJCQkJaWYgKCFwb3JpZ2luKQorCQkJCQljb250aW51ZTsKKwkJCQlmaW5kX21vdmVfaW5fcGFyZW50KHNiLCAmYmxhbWV0YWlsLCAmdG9vc21hbGwsIG9yaWdpbiwgcG9yaWdpbik7CisJCQkJaWYgKCFvcmlnaW4tPnN1c3BlY3RzKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogT3B0aW9uYWxseSBmaW5kIGNvcGllcyBmcm9tIHBhcmVudHMnIGZpbGVzLgorCSAqLworCWlmIChvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFkpIHsKKwkJaWYgKHNiLT5jb3B5X3Njb3JlID4gc2ItPm1vdmVfc2NvcmUpCisJCQlmaWx0ZXJfc21hbGwoc2IsICZ0b29zbWFsbCwgJm9yaWdpbi0+c3VzcGVjdHMsIHNiLT5jb3B5X3Njb3JlKTsKKwkJZWxzZSBpZiAoc2ItPmNvcHlfc2NvcmUgPCBzYi0+bW92ZV9zY29yZSkgeworCQkJb3JpZ2luLT5zdXNwZWN0cyA9IGJsYW1lX21lcmdlKG9yaWdpbi0+c3VzcGVjdHMsIHRvb3NtYWxsKTsKKwkJCXRvb3NtYWxsID0gTlVMTDsKKwkJCWZpbHRlcl9zbWFsbChzYiwgJnRvb3NtYWxsLCAmb3JpZ2luLT5zdXNwZWN0cywgc2ItPmNvcHlfc2NvcmUpOworCQl9CisJCWlmICghb3JpZ2luLT5zdXNwZWN0cykKKwkJCWdvdG8gZmluaXNoOworCisJCWZvciAoaSA9IDAsIHNnID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCwgc2ItPnJldmVyc2UpOworCQkgICAgIGkgPCBudW1fc2cgJiYgc2c7CisJCSAgICAgc2cgPSBzZy0+bmV4dCwgaSsrKSB7CisJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpwb3JpZ2luID0gc2dfb3JpZ2luW2ldOworCQkJZmluZF9jb3B5X2luX3BhcmVudChzYiwgJmJsYW1ldGFpbCwgJnRvb3NtYWxsLAorCQkJCQkgICAgb3JpZ2luLCBzZy0+aXRlbSwgcG9yaWdpbiwgb3B0KTsKKwkJCWlmICghb3JpZ2luLT5zdXNwZWN0cykKKwkJCQlnb3RvIGZpbmlzaDsKKwkJfQorCX0KKworZmluaXNoOgorCSpibGFtZXRhaWwgPSBOVUxMOworCWRpc3RyaWJ1dGVfYmxhbWUoc2IsIGJsYW1lcyk7CisJLyoKKwkgKiBwcmVwZW5kIHRvb3NtYWxsIHRvIG9yaWdpbi0+c3VzcGVjdHMKKwkgKgorCSAqIFRoZXJlIGlzIG5vIHBvaW50IGluIHNvcnRpbmc6IHRoaXMgZW5kcyB1cCBvbiBhIGJpZworCSAqIHVuc29ydGVkIGxpc3QgaW4gdGhlIGNhbGxlciBhbnl3YXkuCisJICovCisJaWYgKHRvb3NtYWxsKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqKnRhaWwgPSAmdG9vc21hbGw7CisJCXdoaWxlICgqdGFpbCkKKwkJCXRhaWwgPSAmKCp0YWlsKS0+bmV4dDsKKwkJKnRhaWwgPSBvcmlnaW4tPnN1c3BlY3RzOworCQlvcmlnaW4tPnN1c3BlY3RzID0gdG9vc21hbGw7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fc2c7IGkrKykgeworCQlpZiAoc2dfb3JpZ2luW2ldKSB7CisJCQlpZiAoIXNnX29yaWdpbltpXS0+c3VzcGVjdHMpCisJCQkJZHJvcF9vcmlnaW5fYmxvYihzZ19vcmlnaW5baV0pOworCQkJYmxhbWVfb3JpZ2luX2RlY3JlZihzZ19vcmlnaW5baV0pOworCQl9CisJfQorCWRyb3Bfb3JpZ2luX2Jsb2Iob3JpZ2luKTsKKwlpZiAoc2dfYnVmICE9IHNnX29yaWdpbikKKwkJZnJlZShzZ19vcmlnaW4pOworfQorCisvKgorICogVGhlIG1haW4gbG9vcCAtLSB3aGlsZSB3ZSBoYXZlIGJsb2JzIHdpdGggbGluZXMgd2hvc2UgdHJ1ZSBvcmlnaW4KKyAqIGlzIHN0aWxsIHVua25vd24sIHBpY2sgb25lIGJsb2IsIGFuZCBhbGxvdyBpdHMgbGluZXMgdG8gcGFzcyBibGFtZXMKKyAqIHRvIGl0cyBwYXJlbnRzLiAqLwordm9pZCBhc3NpZ25fYmxhbWUoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBpbnQgb3B0KQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IHNiLT5yZXZzOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHByaW9fcXVldWVfZ2V0KCZzYi0+Y29tbWl0cyk7CisKKwl3aGlsZSAoY29tbWl0KSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqZW50OworCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0ID0gZ2V0X2JsYW1lX3N1c3BlY3RzKGNvbW1pdCk7CisKKwkJLyogZmluZCBvbmUgc3VzcGVjdCB0byBicmVhayBkb3duICovCisJCXdoaWxlIChzdXNwZWN0ICYmICFzdXNwZWN0LT5zdXNwZWN0cykKKwkJCXN1c3BlY3QgPSBzdXNwZWN0LT5uZXh0OworCisJCWlmICghc3VzcGVjdCkgeworCQkJY29tbWl0ID0gcHJpb19xdWV1ZV9nZXQoJnNiLT5jb21taXRzKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXNzZXJ0KGNvbW1pdCA9PSBzdXNwZWN0LT5jb21taXQpOworCisJCS8qCisJCSAqIFdlIHdpbGwgdXNlIHRoaXMgc3VzcGVjdCBsYXRlciBpbiB0aGUgbG9vcCwKKwkJICogc28gaG9sZCBvbnRvIGl0IGluIHRoZSBtZWFudGltZS4KKwkJICovCisJCWJsYW1lX29yaWdpbl9pbmNyZWYoc3VzcGVjdCk7CisJCXBhcnNlX2NvbW1pdChjb21taXQpOworCQlpZiAoc2ItPnJldmVyc2UgfHwKKwkJICAgICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgJiYKKwkJICAgICAhKHJldnMtPm1heF9hZ2UgIT0gLTEgJiYgY29tbWl0LT5kYXRlIDwgcmV2cy0+bWF4X2FnZSkpKQorCQkJcGFzc19ibGFtZShzYiwgc3VzcGVjdCwgb3B0KTsKKwkJZWxzZSB7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJaWYgKGNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJCQltYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjb21taXQpOworCQl9CisJCS8qIHRyZWF0IHJvb3QgY29tbWl0IGFzIGJvdW5kYXJ5ICovCisJCWlmICghY29tbWl0LT5wYXJlbnRzICYmICFzYi0+c2hvd19yb290KQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKworCQkvKiBUYWtlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgcmVtYWluaW5nIGVudHJpZXMgKi8KKwkJZW50ID0gc3VzcGVjdC0+c3VzcGVjdHM7CisJCWlmIChlbnQpIHsKKwkJCXN1c3BlY3QtPmd1aWx0eSA9IDE7CisJCQlmb3IgKDs7KSB7CisJCQkJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXh0ID0gZW50LT5uZXh0OworCQkJCWlmIChzYi0+Zm91bmRfZ3VpbHR5X2VudHJ5KQorCQkJCQlzYi0+Zm91bmRfZ3VpbHR5X2VudHJ5KGVudCwgc2ItPmZvdW5kX2d1aWx0eV9lbnRyeV9kYXRhKTsKKwkJCQlpZiAobmV4dCkgeworCQkJCQllbnQgPSBuZXh0OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZW50LT5uZXh0ID0gc2ItPmVudDsKKwkJCQlzYi0+ZW50ID0gc3VzcGVjdC0+c3VzcGVjdHM7CisJCQkJc3VzcGVjdC0+c3VzcGVjdHMgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWJsYW1lX29yaWdpbl9kZWNyZWYoc3VzcGVjdCk7CisKKwkJaWYgKHNiLT5kZWJ1ZykgLyogc2FuaXR5ICovCisJCQlzYW5pdHlfY2hlY2tfcmVmY250KHNiKTsKKwl9Cit9CisKKy8qCisgKiBUbyBhbGxvdyBxdWljayBhY2Nlc3MgdG8gdGhlIGNvbnRlbnRzIG9mIG50aCBsaW5lIGluIHRoZQorICogZmluYWwgaW1hZ2UsIHByZXBhcmUgYW4gaW5kZXggaW4gdGhlIHNjb3JlYm9hcmQuCisgKi8KK3N0YXRpYyBpbnQgcHJlcGFyZV9saW5lcyhzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IpCit7CisJc2ItPm51bV9saW5lcyA9IGZpbmRfbGluZV9zdGFydHMoJnNiLT5saW5lbm8sIHNiLT5maW5hbF9idWYsCisJCQkJCSBzYi0+ZmluYWxfYnVmX3NpemUpOworCXJldHVybiBzYi0+bnVtX2xpbmVzOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZmluZF9zaW5nbGVfZmluYWwoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQljb25zdCBjaGFyICoqbmFtZV9wKQoreworCWludCBpOworCXN0cnVjdCBjb21taXQgKmZvdW5kID0gTlVMTDsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLml0ZW07CisJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQlvYmogPSBkZXJlZl90YWcocmV2cy0+cmVwbywgb2JqLCBOVUxMLCAwKTsKKwkJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJZGllKCJOb24gY29tbWl0ICVzPyIsIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lKTsKKwkJaWYgKGZvdW5kKQorCQkJZGllKCJNb3JlIHRoYW4gb25lIGNvbW1pdCB0byBkaWcgZnJvbSAlcyBhbmQgJXM/IiwKKwkJCSAgICByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSwgbmFtZSk7CisJCWZvdW5kID0gKHN0cnVjdCBjb21taXQgKilvYmo7CisJCW5hbWUgPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZTsKKwl9CisJaWYgKG5hbWVfcCkKKwkJKm5hbWVfcCA9IHhzdHJkdXBfb3JfbnVsbChuYW1lKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpkd2ltX3JldmVyc2VfaW5pdGlhbChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgIGNvbnN0IGNoYXIgKipuYW1lX3ApCit7CisJLyoKKwkgKiBEV0lNICJnaXQgYmxhbWUgLS1yZXZlcnNlIE9ORSAtLSBQQVRIIiBhcworCSAqICJnaXQgYmxhbWUgLS1yZXZlcnNlIE9ORS4uSEVBRCAtLSBQQVRIIiBidXQgb25seSBkbyBzbworCSAqIHdoZW4gaXQgbWFrZXMgc2Vuc2UuCisJICovCisJc3RydWN0IG9iamVjdCAqb2JqOworCXN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0OworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisKKwlpZiAocmV2cy0+cGVuZGluZy5uciAhPSAxKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIElzIHRoYXQgc29sZSByZXYgYSBjb21taXR0aXNoPyAqLworCW9iaiA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1swXS5pdGVtOworCW9iaiA9IGRlcmVmX3RhZyhyZXZzLT5yZXBvLCBvYmosIE5VTEwsIDApOworCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBEbyB3ZSBoYXZlIEhFQUQ/ICovCisJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCAmaGVhZF9vaWQsIE5VTEwpKQorCQlyZXR1cm4gTlVMTDsKKwloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZXZzLT5yZXBvLAorCQkJCQkJICAgICAmaGVhZF9vaWQsIDEpOworCWlmICghaGVhZF9jb21taXQpCisJCXJldHVybiBOVUxMOworCisJLyogVHVybiAiT05FIiBpbnRvICJPTkUuLkhFQUQiIHRoZW4gKi8KKwlvYmotPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsICZoZWFkX2NvbW1pdC0+b2JqZWN0LCAiSEVBRCIpOworCisJaWYgKG5hbWVfcCkKKwkJKm5hbWVfcCA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1swXS5uYW1lOworCXJldHVybiAoc3RydWN0IGNvbW1pdCAqKW9iajsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmZpbmRfc2luZ2xlX2luaXRpYWwoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgIGNvbnN0IGNoYXIgKipuYW1lX3ApCit7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdCAqZm91bmQgPSBOVUxMOworCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCisJLyoKKwkgKiBUaGVyZSBtdXN0IGJlIG9uZSBhbmQgb25seSBvbmUgbmVnYXRpdmUgY29tbWl0LCBhbmQgaXQgbXVzdCBiZQorCSAqIHRoZSBib3VuZGFyeS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQlpZiAoIShvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQljb250aW51ZTsKKwkJb2JqID0gZGVyZWZfdGFnKHJldnMtPnJlcG8sIG9iaiwgTlVMTCwgMCk7CisJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCWRpZSgiTm9uIGNvbW1pdCAlcz8iLCByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSk7CisJCWlmIChmb3VuZCkKKwkJCWRpZSgiTW9yZSB0aGFuIG9uZSBjb21taXQgdG8gZGlnIHVwIGZyb20sICVzIGFuZCAlcz8iLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lLCBuYW1lKTsKKwkJZm91bmQgPSAoc3RydWN0IGNvbW1pdCAqKSBvYmo7CisJCW5hbWUgPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZTsKKwl9CisKKwlpZiAoIW5hbWUpCisJCWZvdW5kID0gZHdpbV9yZXZlcnNlX2luaXRpYWwocmV2cywgJm5hbWUpOworCWlmICghbmFtZSkKKwkJZGllKCJObyBjb21taXQgdG8gZGlnIHVwIGZyb20/Iik7CisKKwlpZiAobmFtZV9wKQorCQkqbmFtZV9wID0geHN0cmR1cChuYW1lKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3ZvaWQgaW5pdF9zY29yZWJvYXJkKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYikKK3sKKwltZW1zZXQoc2IsIDAsIHNpemVvZihzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCkpOworCXNiLT5tb3ZlX3Njb3JlID0gQkxBTUVfREVGQVVMVF9NT1ZFX1NDT1JFOworCXNiLT5jb3B5X3Njb3JlID0gQkxBTUVfREVGQVVMVF9DT1BZX1NDT1JFOworfQorCit2b2lkIHNldHVwX3Njb3JlYm9hcmQoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLAorCQkgICAgICBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgICBzdHJ1Y3QgYmxhbWVfb3JpZ2luICoqb3JpZykKK3sKKwljb25zdCBjaGFyICpmaW5hbF9jb21taXRfbmFtZSA9IE5VTEw7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqbzsKKwlzdHJ1Y3QgY29tbWl0ICpmaW5hbF9jb21taXQgPSBOVUxMOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWluaXRfYmxhbWVfc3VzcGVjdHMoJmJsYW1lX3N1c3BlY3RzKTsKKworCWlmIChzYi0+cmV2ZXJzZSAmJiBzYi0+Y29udGVudHNfZnJvbSkKKwkJZGllKF8oIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iKSk7CisKKwlpZiAoIXNiLT5yZXBvKQorCQlCVUcoInJlcG8gaXMgTlVMTCIpOworCisJaWYgKCFzYi0+cmV2ZXJzZSkgeworCQlzYi0+ZmluYWwgPSBmaW5kX3NpbmdsZV9maW5hbChzYi0+cmV2cywgJmZpbmFsX2NvbW1pdF9uYW1lKTsKKwkJc2ItPmNvbW1pdHMuY29tcGFyZSA9IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZTsKKwl9IGVsc2UgeworCQlzYi0+ZmluYWwgPSBmaW5kX3NpbmdsZV9pbml0aWFsKHNiLT5yZXZzLCAmZmluYWxfY29tbWl0X25hbWUpOworCQlzYi0+Y29tbWl0cy5jb21wYXJlID0gY29tcGFyZV9jb21taXRzX2J5X3JldmVyc2VfY29tbWl0X2RhdGU7CisJfQorCisJaWYgKHNiLT5maW5hbCAmJiBzYi0+Y29udGVudHNfZnJvbSkKKwkJZGllKF8oImNhbm5vdCB1c2UgLS1jb250ZW50cyB3aXRoIGZpbmFsIGNvbW1pdCBvYmplY3QgbmFtZSIpKTsKKworCWlmIChzYi0+cmV2ZXJzZSAmJiBzYi0+cmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCXNiLT5yZXZzLT5jaGlsZHJlbi5uYW1lID0gTlVMTDsKKworCWlmICghc2ItPmZpbmFsKSB7CisJCS8qCisJCSAqICItLW5vdCBBIEIgLS0gcGF0aCIgd2l0aG91dCBhbnl0aGluZyBwb3NpdGl2ZTsKKwkJICogZG8gbm90IGRlZmF1bHQgdG8gSEVBRCwgYnV0IHVzZSB0aGUgd29ya2luZyB0cmVlCisJCSAqIG9yICItLWNvbnRlbnRzIi4KKwkJICovCisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlzYi0+ZmluYWwgPSBmYWtlX3dvcmtpbmdfdHJlZV9jb21taXQoc2ItPnJlcG8sCisJCQkJCQkgICAgICZzYi0+cmV2cy0+ZGlmZm9wdCwKKwkJCQkJCSAgICAgcGF0aCwgc2ItPmNvbnRlbnRzX2Zyb20pOworCQlhZGRfcGVuZGluZ19vYmplY3Qoc2ItPnJldnMsICYoc2ItPmZpbmFsLT5vYmplY3QpLCAiOiIpOworCX0KKworCWlmIChzYi0+cmV2ZXJzZSAmJiBzYi0+cmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpIHsKKwkJZmluYWxfY29tbWl0ID0gZmluZF9zaW5nbGVfZmluYWwoc2ItPnJldnMsIE5VTEwpOworCQlpZiAoIWZpbmFsX2NvbW1pdCkKKwkJCWRpZShfKCItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiKSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGJvdHRvbSwgdGhpcyB3aWxsIG1hcmsgdGhlIGFuY2VzdG9ycyBvZiB0aGUKKwkgKiBib3R0b20gY29tbWl0cyB3ZSB3b3VsZCByZWFjaCB3aGlsZSB0cmF2ZXJzaW5nIGFzCisJICogdW5pbnRlcmVzdGluZy4KKwkgKi8KKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHNiLT5yZXZzKSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJaWYgKHNiLT5yZXZlcnNlICYmIHNiLT5yZXZzLT5maXJzdF9wYXJlbnRfb25seSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gZmluYWxfY29tbWl0OworCisJCXNiLT5yZXZzLT5jaGlsZHJlbi5uYW1lID0gImNoaWxkcmVuIjsKKwkJd2hpbGUgKGMtPnBhcmVudHMgJiYKKwkJICAgICAgICFvaWRlcSgmYy0+b2JqZWN0Lm9pZCwgJnNiLT5maW5hbC0+b2JqZWN0Lm9pZCkpIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsKSk7CisKKwkJCWwtPml0ZW0gPSBjOworCQkJaWYgKGFkZF9kZWNvcmF0aW9uKCZzYi0+cmV2cy0+Y2hpbGRyZW4sCisJCQkJCSAgICZjLT5wYXJlbnRzLT5pdGVtLT5vYmplY3QsIGwpKQorCQkJCUJVRygibm90IHVuaXF1ZSBpdGVtIGluIGZpcnN0LXBhcmVudCBjaGFpbiIpOworCQkJYyA9IGMtPnBhcmVudHMtPml0ZW07CisJCX0KKworCQlpZiAoIW9pZGVxKCZjLT5vYmplY3Qub2lkLCAmc2ItPmZpbmFsLT5vYmplY3Qub2lkKSkKKwkJCWRpZShfKCItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iKSk7CisJfQorCisJaWYgKGlzX251bGxfb2lkKCZzYi0+ZmluYWwtPm9iamVjdC5vaWQpKSB7CisJCW8gPSBnZXRfYmxhbWVfc3VzcGVjdHMoc2ItPmZpbmFsKTsKKwkJc2ItPmZpbmFsX2J1ZiA9IHhtZW1kdXB6KG8tPmZpbGUucHRyLCBvLT5maWxlLnNpemUpOworCQlzYi0+ZmluYWxfYnVmX3NpemUgPSBvLT5maWxlLnNpemU7CisJfQorCWVsc2UgeworCQlvID0gZ2V0X29yaWdpbihzYi0+ZmluYWwsIHBhdGgpOworCQlpZiAoZmlsbF9ibG9iX3NoYTFfYW5kX21vZGUoc2ItPnJlcG8sIG8pKQorCQkJZGllKF8oIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIpLCBwYXRoLCBmaW5hbF9jb21taXRfbmFtZSk7CisKKwkJaWYgKHNiLT5yZXZzLT5kaWZmb3B0LmZsYWdzLmFsbG93X3RleHRjb252ICYmCisJCSAgICB0ZXh0Y29udl9vYmplY3Qoc2ItPnJlcG8sIHBhdGgsIG8tPm1vZGUsICZvLT5ibG9iX29pZCwgMSwgKGNoYXIgKiopICZzYi0+ZmluYWxfYnVmLAorCQkJCSAgICAmc2ItPmZpbmFsX2J1Zl9zaXplKSkKKwkJCTsKKwkJZWxzZQorCQkJc2ItPmZpbmFsX2J1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUoJm8tPmJsb2Jfb2lkLCAmdHlwZSwKKwkJCQkJCQkgJnNiLT5maW5hbF9idWZfc2l6ZSk7CisKKwkJaWYgKCFzYi0+ZmluYWxfYnVmKQorCQkJZGllKF8oImNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiKSwKKwkJCSAgICBvaWRfdG9faGV4KCZvLT5ibG9iX29pZCksCisJCQkgICAgcGF0aCk7CisJfQorCXNiLT5udW1fcmVhZF9ibG9iKys7CisJcHJlcGFyZV9saW5lcyhzYik7CisKKwlpZiAob3JpZykKKwkJKm9yaWcgPSBvOworCisJZnJlZSgoY2hhciAqKWZpbmFsX2NvbW1pdF9uYW1lKTsKK30KKworCisKK3N0cnVjdCBibGFtZV9lbnRyeSAqYmxhbWVfZW50cnlfcHJlcGVuZChzdHJ1Y3QgYmxhbWVfZW50cnkgKmhlYWQsCisJCQkJCWxvbmcgc3RhcnQsIGxvbmcgZW5kLAorCQkJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpvKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV3X2hlYWQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkpKTsKKwluZXdfaGVhZC0+bG5vID0gc3RhcnQ7CisJbmV3X2hlYWQtPm51bV9saW5lcyA9IGVuZCAtIHN0YXJ0OworCW5ld19oZWFkLT5zdXNwZWN0ID0gbzsKKwluZXdfaGVhZC0+c19sbm8gPSBzdGFydDsKKwluZXdfaGVhZC0+bmV4dCA9IGhlYWQ7CisJYmxhbWVfb3JpZ2luX2luY3JlZihvKTsKKwlyZXR1cm4gbmV3X2hlYWQ7Cit9CmRpZmYgLS1naXQgYS9ibGFtZS5oIGIvYmxhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODliMTgxCi0tLSAvZGV2L251bGwKKysrIGIvYmxhbWUuaApAQCAtMCwwICsxLDE5MCBAQAorI2lmbmRlZiBCTEFNRV9ICisjZGVmaW5lIEJMQU1FX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJwcmlvLXF1ZXVlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorCisjZGVmaW5lIFBJQ0tBWEVfQkxBTUVfTU9WRQkJMDEKKyNkZWZpbmUgUElDS0FYRV9CTEFNRV9DT1BZCQkwMgorI2RlZmluZSBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVSCTA0CisjZGVmaW5lIFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVNUCTAxMAorCisjZGVmaW5lIEJMQU1FX0RFRkFVTFRfTU9WRV9TQ09SRQkyMAorI2RlZmluZSBCTEFNRV9ERUZBVUxUX0NPUFlfU0NPUkUJNDAKKworc3RydWN0IGZpbmdlcnByaW50OworCisvKgorICogT25lIGJsb2IgaW4gYSBjb21taXQgdGhhdCBpcyBiZWluZyBzdXNwZWN0ZWQKKyAqLworc3RydWN0IGJsYW1lX29yaWdpbiB7CisJaW50IHJlZmNudDsKKwkvKiBSZWNvcmQgcHJlY2VkaW5nIGJsYW1lIHJlY29yZCBmb3IgdGhpcyBibG9iICovCisJc3RydWN0IGJsYW1lX29yaWdpbiAqcHJldmlvdXM7CisJLyogb3JpZ2lucyBhcmUgcHV0IGluIGEgbGlzdCBsaW5rZWQgdmlhIGBuZXh0JyBoYW5naW5nIG9mZiB0aGUKKwkgKiBjb3JyZXNwb25kaW5nIGNvbW1pdCdzIHV0aWwgZmllbGQgaW4gb3JkZXIgdG8gbWFrZSBmaW5kaW5nCisJICogdGhlbSBmYXN0LiAgVGhlIHByZXNlbmNlIGluIHRoaXMgY2hhaW4gZG9lcyBub3QgY291bnQKKwkgKiB0b3dhcmRzIHRoZSBvcmlnaW4ncyByZWZlcmVuY2UgY291bnQuICBJdCBpcyB0ZW1wdGluZyB0bworCSAqIGxldCBpdCBjb3VudCBhcyBsb25nIGFzIHRoZSBjb21taXQgaXMgcGVuZGluZyBleGFtaW5hdGlvbiwKKwkgKiBidXQgZXZlbiB1bmRlciBjaXJjdW1zdGFuY2VzIHdoZXJlIHRoZSBjb21taXQgd2lsbCBiZQorCSAqIHByZXNlbnQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHByaW9yaXR5IHF1ZXVlIG9mIHVuZXhhbWluZWQKKwkgKiBjb21taXRzLCBwcm9jZXNzaW5nIHRoZSBmaXJzdCBpbnN0YW5jZSB3aWxsIG5vdCBsZWF2ZSBhbnkKKwkgKiB3b3JrIHJlcXVpcmluZyB0aGUgb3JpZ2luIGRhdGEgZm9yIHRoZSBzZWNvbmQgaW5zdGFuY2UuICBBbgorCSAqIGludGVyc3BlcnNlZCBjb21taXQgY2hhbmdpbmcgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCisJICogcHJlZXhpc3Rpbmcgd2l0aCBhIGRpZmZlcmVudCBhbmNlc3RyeSBhbmQgd2l0aCB0aGUgc2FtZQorCSAqIGNvbW1pdCBkYXRlIGluIG9yZGVyIHRvIHdlZGdlIGl0c2VsZiBiZXR3ZWVuIHR3byBpbnN0YW5jZXMKKwkgKiBvZiB0aGUgc2FtZSBjb21taXQgaW4gdGhlIHByaW9yaXR5IHF1ZXVlIF9hbmRfIHByb2R1Y2UKKwkgKiBibGFtZSBlbnRyaWVzIHJlbGV2YW50IGZvciBpdC4gIFdoaWxlIHdlIGRvbid0IHdhbnQgdG8gbGV0CisJICogdXMgZ2V0IHRyaXBwZWQgdXAgYnkgdGhpcyBjYXNlLCBpdCBjZXJ0YWlubHkgZG9lcyBub3Qgc2VlbQorCSAqIHdvcnRoIG9wdGltaXppbmcgZm9yLgorCSAqLworCXN0cnVjdCBibGFtZV9vcmlnaW4gKm5leHQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCS8qIGBzdXNwZWN0cycgY29udGFpbnMgYmxhbWUgZW50cmllcyB0aGF0IG1heSBiZSBhdHRyaWJ1dGVkIHRvCisJICogdGhpcyBvcmlnaW4ncyBjb21taXQgb3IgdG8gcGFyZW50IGNvbW1pdHMuICBXaGVuIGEgY29tbWl0CisJICogaXMgYmVpbmcgcHJvY2Vzc2VkLCBhbGwgc3VzcGVjdHMgd2lsbCBiZSBtb3ZlZCwgZWl0aGVyIGJ5CisJICogYXNzaWduaW5nIHRoZW0gdG8gYW4gb3JpZ2luIGluIGEgZGlmZmVyZW50IGNvbW1pdCwgb3IgYnkKKwkgKiBzaGlwcGluZyB0aGVtIHRvIHRoZSBzY29yZWJvYXJkJ3MgZW50IGxpc3QgYmVjYXVzZSB0aGV5CisJICogY2Fubm90IGJlIGF0dHJpYnV0ZWQgdG8gYSBkaWZmZXJlbnQgY29tbWl0LgorCSAqLworCXN0cnVjdCBibGFtZV9lbnRyeSAqc3VzcGVjdHM7CisJbW1maWxlX3QgZmlsZTsKKwlpbnQgbnVtX2xpbmVzOworCXN0cnVjdCBmaW5nZXJwcmludCAqZmluZ2VycHJpbnRzOworCXN0cnVjdCBvYmplY3RfaWQgYmxvYl9vaWQ7CisJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwkvKiBndWlsdHkgZ2V0cyBzZXQgd2hlbiBzaGlwcGluZyBhbnkgc3VzcGVjdHMgdG8gdGhlIGZpbmFsCisJICogYmxhbWUgbGlzdCBpbnN0ZWFkIG9mIG90aGVyIGNvbW1pdHMKKwkgKi8KKwljaGFyIGd1aWx0eTsKKwljaGFyIHBhdGhbRkxFWF9BUlJBWV07Cit9OworCisvKgorICogRWFjaCBncm91cCBvZiBsaW5lcyBpcyBkZXNjcmliZWQgYnkgYSBibGFtZV9lbnRyeTsgaXQgY2FuIGJlIHNwbGl0CisgKiBhcyB3ZSBwYXNzIGJsYW1lIHRvIHRoZSBwYXJlbnRzLiAgVGhleSBhcmUgYXJyYW5nZWQgaW4gbGlua2VkIGxpc3RzCisgKiBrZXB0IGFzIGBzdXNwZWN0cycgb2Ygc29tZSB1bnByb2Nlc3NlZCBvcmlnaW4sIG9yIGVudGVyZWQgKHdoZW4gdGhlCisgKiBibGFtZSBvcmlnaW4gaGFzIGJlZW4gZmluYWxpemVkKSBpbnRvIHRoZSBzY29yZWJvYXJkIHN0cnVjdHVyZS4KKyAqIFdoaWxlIHRoZSBzY29yZWJvYXJkIHN0cnVjdHVyZSBpcyBvbmx5IHNvcnRlZCBhdCB0aGUgZW5kIG9mCisgKiBwcm9jZXNzaW5nIChhY2NvcmRpbmcgdG8gZmluYWwgaW1hZ2UgbGluZSBudW1iZXIpLCB0aGUgbGlzdHMKKyAqIGF0dGFjaGVkIHRvIGFuIG9yaWdpbiBhcmUgc29ydGVkIGJ5IHRoZSB0YXJnZXQgbGluZSBudW1iZXIuCisgKi8KK3N0cnVjdCBibGFtZV9lbnRyeSB7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXh0OworCisJLyogdGhlIGZpcnN0IGxpbmUgb2YgdGhpcyBncm91cCBpbiB0aGUgZmluYWwgaW1hZ2U7CisJICogaW50ZXJuYWxseSBhbGwgbGluZSBudW1iZXJzIGFyZSAwIGJhc2VkLgorCSAqLworCWludCBsbm87CisKKwkvKiBob3cgbWFueSBsaW5lcyB0aGlzIGdyb3VwIGhhcyAqLworCWludCBudW1fbGluZXM7CisKKwkvKiB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCB0aGlzIGdyb3VwIGludG8gdGhlIGZpbmFsIGltYWdlICovCisJc3RydWN0IGJsYW1lX29yaWdpbiAqc3VzcGVjdDsKKworCS8qIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZmlyc3QgbGluZSBvZiB0aGlzIGdyb3VwIGluIHRoZQorCSAqIHN1c3BlY3QncyBmaWxlOyBpbnRlcm5hbGx5IGFsbCBsaW5lIG51bWJlcnMgYXJlIDAgYmFzZWQuCisJICovCisJaW50IHNfbG5vOworCisJLyogaG93IHNpZ25pZmljYW50IHRoaXMgZW50cnkgaXMgLS0gY2FjaGVkIHRvIGF2b2lkCisJICogc2Nhbm5pbmcgdGhlIGxpbmVzIG92ZXIgYW5kIG92ZXIuCisJICovCisJdW5zaWduZWQgc2NvcmU7CisJaW50IGlnbm9yZWQ7CisJaW50IHVuYmxhbWFibGU7Cit9OworCisvKgorICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJsYW1lIGFzc2lnbm1lbnQuCisgKi8KK3N0cnVjdCBibGFtZV9zY29yZWJvYXJkIHsKKwkvKiB0aGUgZmluYWwgY29tbWl0IChpLmUuIHdoZXJlIHdlIHN0YXJ0ZWQgZGlnZ2luZyBmcm9tKSAqLworCXN0cnVjdCBjb21taXQgKmZpbmFsOworCS8qIFByaW9yaXR5IHF1ZXVlIGZvciBjb21taXRzIHdpdGggdW5hc3NpZ25lZCBibGFtZSByZWNvcmRzICovCisJc3RydWN0IHByaW9fcXVldWUgY29tbWl0czsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJY29uc3QgY2hhciAqcGF0aDsKKworCS8qCisJICogVGhlIGNvbnRlbnRzIGluIHRoZSBmaW5hbCBpbWFnZS4KKwkgKiBVc2VkIGJ5IG1hbnkgZnVuY3Rpb25zIHRvIG9idGFpbiBjb250ZW50cyBvZiB0aGUgbnRoIGxpbmUsCisJICogaW5kZXhlZCB3aXRoIHNjb3JlYm9hcmQubGluZW5vW2JsYW1lX2VudHJ5Lmxub10uCisJICovCisJY29uc3QgY2hhciAqZmluYWxfYnVmOworCXVuc2lnbmVkIGxvbmcgZmluYWxfYnVmX3NpemU7CisKKwkvKiBsaW5rZWQgbGlzdCBvZiBibGFtZXMgKi8KKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKworCXN0cnVjdCBvaWRzZXQgaWdub3JlX2xpc3Q7CisKKwkvKiBsb29rLXVwIGEgbGluZSBpbiB0aGUgZmluYWwgYnVmZmVyICovCisJaW50IG51bV9saW5lczsKKwlpbnQgKmxpbmVubzsKKworCS8qIHN0YXRzICovCisJaW50IG51bV9yZWFkX2Jsb2I7CisJaW50IG51bV9nZXRfcGF0Y2g7CisJaW50IG51bV9jb21taXRzOworCisJLyoKKwkgKiBibGFtZSBmb3IgYSBibGFtZV9lbnRyeSB3aXRoIHNjb3JlIGxvd2VyIHRoYW4gdGhlc2UgdGhyZXNob2xkcworCSAqIGlzIG5vdCBwYXNzZWQgdG8gdGhlIHBhcmVudCB1c2luZyBtb3ZlL2NvcHkgbG9naWMuCisJICovCisJdW5zaWduZWQgbW92ZV9zY29yZTsKKwl1bnNpZ25lZCBjb3B5X3Njb3JlOworCisJLyogdXNlIHRoaXMgZmlsZSdzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSAqLworCWNvbnN0IGNoYXIgKmNvbnRlbnRzX2Zyb207CisKKwkvKiBmbGFncyAqLworCWludCByZXZlcnNlOworCWludCBzaG93X3Jvb3Q7CisJaW50IHhkbF9vcHRzOworCWludCBub193aG9sZV9maWxlX3JlbmFtZTsKKwlpbnQgZGVidWc7CisKKwkvKiBjYWxsYmFja3MgKi8KKwl2b2lkKCpvbl9zYW5pdHlfZmFpbCkoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKiwgaW50KTsKKwl2b2lkKCpmb3VuZF9ndWlsdHlfZW50cnkpKHN0cnVjdCBibGFtZV9lbnRyeSAqLCB2b2lkICopOworCisJdm9pZCAqZm91bmRfZ3VpbHR5X2VudHJ5X2RhdGE7Cit9OworCisvKgorICogT3JpZ2luIGlzIHJlZmNvdW50ZWQgYW5kIHVzdWFsbHkgd2Uga2VlcCB0aGUgYmxvYiBjb250ZW50cyB0byBiZQorICogcmV1c2VkLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBibGFtZV9vcmlnaW4gKmJsYW1lX29yaWdpbl9pbmNyZWYoc3RydWN0IGJsYW1lX29yaWdpbiAqbykKK3sKKwlpZiAobykKKwkJby0+cmVmY250Kys7CisJcmV0dXJuIG87Cit9Cit2b2lkIGJsYW1lX29yaWdpbl9kZWNyZWYoc3RydWN0IGJsYW1lX29yaWdpbiAqbyk7CisKK3ZvaWQgYmxhbWVfY29hbGVzY2Uoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiKTsKK3ZvaWQgYmxhbWVfc29ydF9maW5hbChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IpOwordW5zaWduZWQgYmxhbWVfZW50cnlfc2NvcmUoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmUpOwordm9pZCBhc3NpZ25fYmxhbWUoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBpbnQgb3B0KTsKK2NvbnN0IGNoYXIgKmJsYW1lX250aF9saW5lKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgbG9uZyBsbm8pOworCit2b2lkIGluaXRfc2NvcmVib2FyZChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IpOwordm9pZCBzZXR1cF9zY29yZWJvYXJkKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwKKwkJICAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgc3RydWN0IGJsYW1lX29yaWdpbiAqKm9yaWcpOworCitzdHJ1Y3QgYmxhbWVfZW50cnkgKmJsYW1lX2VudHJ5X3ByZXBlbmQoc3RydWN0IGJsYW1lX2VudHJ5ICpoZWFkLAorCQkJCQlsb25nIHN0YXJ0LCBsb25nIGVuZCwKKwkJCQkJc3RydWN0IGJsYW1lX29yaWdpbiAqbyk7CisKK3N0cnVjdCBibGFtZV9vcmlnaW4gKmdldF9ibGFtZV9zdXNwZWN0cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCisjZW5kaWYgLyogQkxBTUVfSCAqLwpkaWZmIC0tZ2l0IGEvYmxvYi5jIGIvYmxvYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjlhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9iLmMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorCitjb25zdCBjaGFyICpibG9iX3R5cGUgPSAiYmxvYiI7CisKK3N0cnVjdCBibG9iICpsb29rdXBfYmxvYihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qociwgb2lkKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qociwgb2lkLCBhbGxvY19ibG9iX25vZGUocikpOworCXJldHVybiBvYmplY3RfYXNfdHlwZShyLCBvYmosIE9CSl9CTE9CLCAwKTsKK30KKworaW50IHBhcnNlX2Jsb2JfYnVmZmVyKHN0cnVjdCBibG9iICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Jsb2IuaCBiL2Jsb2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjY0ODcyCi0tLSAvZGV2L251bGwKKysrIGIvYmxvYi5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgQkxPQl9ICisjZGVmaW5lIEJMT0JfSAorCisjaW5jbHVkZSAib2JqZWN0LmgiCisKK2V4dGVybiBjb25zdCBjaGFyICpibG9iX3R5cGU7CisKK3N0cnVjdCBibG9iIHsKKwlzdHJ1Y3Qgb2JqZWN0IG9iamVjdDsKK307CisKK3N0cnVjdCBibG9iICpsb29rdXBfYmxvYihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworaW50IHBhcnNlX2Jsb2JfYnVmZmVyKHN0cnVjdCBibG9iICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qKgorICogQmxvYnMgZG8gbm90IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFuZCBkbyBub3QgaGF2ZQorICogc3RydWN0dXJlZCBkYXRhIHRoYXQgbmVlZHMgcGFyc2luZy4gSG93ZXZlciwgY29kZSBtYXkgdXNlIHRoZQorICogInBhcnNlZCIgYml0IGluIHRoZSBzdHJ1Y3Qgb2JqZWN0IGZvciBhIGJsb2IgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAqIGl0cyBjb250ZW50IGhhcyBiZWVuIGZvdW5kIHRvIGFjdHVhbGx5IGJlIGF2YWlsYWJsZSwgc28KKyAqIHBhcnNlX2Jsb2JfYnVmZmVyKCkgaXMgdXNlZCAoYnkgb2JqZWN0LmMpIHRvIGZsYWcgdGhhdCB0aGUgb2JqZWN0CisgKiBoYXMgYmVlbiByZWFkIHN1Y2Nlc3NmdWxseSBmcm9tIHRoZSBkYXRhYmFzZS4KKyAqKi8KKworI2VuZGlmIC8qIEJMT0JfSCAqLwpkaWZmIC0tZ2l0IGEvYmxvY2stc2hhMS9zaGExLmMgYi9ibG9jay1zaGExL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmIxMjVjCi0tLSAvZGV2L251bGwKKysrIGIvYmxvY2stc2hhMS9zaGExLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBTSEExIHJvdXRpbmUgb3B0aW1pemVkIHRvIGRvIHdvcmQgYWNjZXNzZXMgcmF0aGVyIHRoYW4gYnl0ZSBhY2Nlc3NlcywKKyAqIGFuZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb3BpZXMgaW50byB0aGUgY29udGV4dCBhcnJheS4KKyAqCisgKiBUaGlzIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gdGhlIE1vemlsbGEgU0hBMSBpbXBsZW1lbnRhdGlvbiwgYWx0aG91Z2gKKyAqIG5vbmUgb2YgdGhlIG9yaWdpbmFsIE1vemlsbGEgY29kZSByZW1haW5zLgorICovCisKKy8qIHRoaXMgaXMgb25seSB0byBnZXQgZGVmaW5pdGlvbnMgZm9yIG1lbWNweSgpLCBudG9obCgpIGFuZCBodG9ubCgpICovCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKyNpbmNsdWRlICJzaGExLmgiCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKworLyoKKyAqIEZvcmNlIHVzYWdlIG9mIHJvbCBvciByb3IgYnkgc2VsZWN0aW5nIHRoZSBvbmUgd2l0aCB0aGUgc21hbGxlciBjb25zdGFudC4KKyAqIEl0IF9jYW5fIGdlbmVyYXRlIHNsaWdodGx5IHNtYWxsZXIgY29kZSAoYSBjb25zdGFudCBvZiAxIGlzIHNwZWNpYWwpLCBidXQKKyAqIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSBpdCdzIHBvc3NpYmx5IGZhc3RlciBvbiBhbnkgdWFyY2ggdGhhdCBkb2VzIGEKKyAqIHJvdGF0ZSB3aXRoIGEgbG9vcC4KKyAqLworCisjZGVmaW5lIFNIQV9BU00ob3AsIHgsIG4pICh7IHVuc2lnbmVkIGludCBfX3JlczsgX19hc21fXyhvcCAiICUxLCUwIjoiPXIiIChfX3Jlcyk6ImkiIChuKSwgIjAiICh4KSk7IF9fcmVzOyB9KQorI2RlZmluZSBTSEFfUk9MKHgsbikJU0hBX0FTTSgicm9sIiwgeCwgbikKKyNkZWZpbmUgU0hBX1JPUih4LG4pCVNIQV9BU00oInJvciIsIHgsIG4pCisKKyNlbHNlCisKKyNkZWZpbmUgU0hBX1JPVChYLGwscikJKCgoWCkgPDwgKGwpKSB8ICgoWCkgPj4gKHIpKSkKKyNkZWZpbmUgU0hBX1JPTChYLG4pCVNIQV9ST1QoWCxuLDMyLShuKSkKKyNkZWZpbmUgU0hBX1JPUihYLG4pCVNIQV9ST1QoWCwzMi0obiksbikKKworI2VuZGlmCisKKy8qCisgKiBJZiB5b3UgaGF2ZSAzMiByZWdpc3RlcnMgb3IgbW9yZSwgdGhlIGNvbXBpbGVyIGNhbiAoYW5kIHNob3VsZCkKKyAqIHRyeSB0byBjaGFuZ2UgdGhlIGFycmF5W10gYWNjZXNzZXMgaW50byByZWdpc3RlcnMuIEhvd2V2ZXIsIG9uCisgKiBtYWNoaW5lcyB3aXRoIGxlc3MgdGhhbiB+MjUgcmVnaXN0ZXJzLCB0aGF0IHdvbid0IHJlYWxseSB3b3JrLAorICogYW5kIGF0IGxlYXN0IGdjYyB3aWxsIG1ha2UgYW4gdW5ob2x5IG1lc3Mgb2YgaXQuCisgKgorICogU28gdG8gYXZvaWQgdGhhdCBtZXNzIHdoaWNoIGp1c3Qgc2xvd3MgdGhpbmdzIGRvd24sIHdlIGZvcmNlCisgKiB0aGUgc3RvcmVzIHRvIG1lbW9yeSB0byBhY3R1YWxseSBoYXBwZW4gKHdlIG1pZ2h0IGJlIGJldHRlciBvZmYKKyAqIHdpdGggYSAnVyh0KT0odmFsKTthc20oIiI6IittIiAoVyh0KSknIHRoZXJlIGluc3RlYWQsIGFzCisgKiBzdWdnZXN0ZWQgYnkgQXJ0dXIgU2thd2luYSAtIHRoYXQgd2lsbCBhbHNvIG1ha2UgZ2NjIHVuYWJsZSB0bworICogdHJ5IHRvIGRvIHRoZSBzaWxseSAib3B0aW1pemUgYXdheSBsb2FkcyIgcGFydCBiZWNhdXNlIGl0IHdvbid0CisgKiBzZWUgd2hhdCB0aGUgdmFsdWUgd2lsbCBiZSkuCisgKgorICogQmVuIEhlcnJlbnNjaG1pZHQgcmVwb3J0cyB0aGF0IG9uIFBQQywgdGhlIEMgdmVyc2lvbiBjb21lcyBjbG9zZQorICogdG8gdGhlIG9wdGltaXplZCBhc20gd2l0aCB0aGlzIChpZSBvbiBQUEMgeW91IGRvbid0IHdhbnQgdGhhdAorICogJ3ZvbGF0aWxlJywgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgcmVnaXN0ZXJzKS4KKyAqCisgKiBPbiBBUk0gd2UgZ2V0IHRoZSBiZXN0IGNvZGUgZ2VuZXJhdGlvbiBieSBmb3JjaW5nIGEgZnVsbCBtZW1vcnkgYmFycmllcgorICogYmV0d2VlbiBlYWNoIFNIQV9ST1VORCwgb3RoZXJ3aXNlIGdjYyBoYXBwaWx5IGdldCB3aWxkIHdpdGggc3BpbGxpbmcgYW5kCisgKiB0aGUgc3RhY2sgZnJhbWUgc2l6ZSBzaW1wbHkgZXhwbG9kZSBhbmQgcGVyZm9ybWFuY2UgZ29lcyBkb3duIHRoZSBkcmFpbi4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorICAjZGVmaW5lIHNldFcoeCwgdmFsKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikmVyh4KSA9ICh2YWwpKQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX2FybV9fKQorICAjZGVmaW5lIHNldFcoeCwgdmFsKSBkbyB7IFcoeCkgPSAodmFsKTsgX19hc21fXygiIjo6OiJtZW1vcnkiKTsgfSB3aGlsZSAoMCkKKyNlbHNlCisgICNkZWZpbmUgc2V0Vyh4LCB2YWwpIChXKHgpID0gKHZhbCkpCisjZW5kaWYKKworLyogVGhpcyAicm9sbHMiIG92ZXIgdGhlIDUxMi1iaXQgYXJyYXkgKi8KKyNkZWZpbmUgVyh4KSAoYXJyYXlbKHgpJjE1XSkKKworLyoKKyAqIFdoZXJlIGRvIHdlIGdldCB0aGUgc291cmNlIGZyb20/IFRoZSBmaXJzdCAxNiBpdGVyYXRpb25zIGdldCBpdCBmcm9tCisgKiB0aGUgaW5wdXQgZGF0YSwgdGhlIG5leHQgbWl4IGl0IGZyb20gdGhlIDUxMi1iaXQgYXJyYXkuCisgKi8KKyNkZWZpbmUgU0hBX1NSQyh0KSBnZXRfYmUzMigodW5zaWduZWQgY2hhciAqKSBibG9jayArICh0KSo0KQorI2RlZmluZSBTSEFfTUlYKHQpIFNIQV9ST0woVygodCkrMTMpIF4gVygodCkrOCkgXiBXKCh0KSsyKSBeIFcodCksIDEpOworCisjZGVmaW5lIFNIQV9ST1VORCh0LCBpbnB1dCwgZm4sIGNvbnN0YW50LCBBLCBCLCBDLCBELCBFKSBkbyB7IFwKKwl1bnNpZ25lZCBpbnQgVEVNUCA9IGlucHV0KHQpOyBzZXRXKHQsIFRFTVApOyBcCisJRSArPSBURU1QICsgU0hBX1JPTChBLDUpICsgKGZuKSArIChjb25zdGFudCk7IFwKKwlCID0gU0hBX1JPUihCLCAyKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBUXzBfMTUodCwgQSwgQiwgQywgRCwgRSkgIFNIQV9ST1VORCh0LCBTSEFfU1JDLCAoKChDXkQpJkIpXkQpICwgMHg1YTgyNzk5OSwgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfMTZfMTkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsICgoKENeRCkmQileRCkgLCAweDVhODI3OTk5LCBBLCBCLCBDLCBELCBFICkKKyNkZWZpbmUgVF8yMF8zOSh0LCBBLCBCLCBDLCBELCBFKSBTSEFfUk9VTkQodCwgU0hBX01JWCwgKEJeQ15EKSAsIDB4NmVkOWViYTEsIEEsIEIsIEMsIEQsIEUgKQorI2RlZmluZSBUXzQwXzU5KHQsIEEsIEIsIEMsIEQsIEUpIFNIQV9ST1VORCh0LCBTSEFfTUlYLCAoKEImQykrKEQmKEJeQykpKSAsIDB4OGYxYmJjZGMsIEEsIEIsIEMsIEQsIEUgKQorI2RlZmluZSBUXzYwXzc5KHQsIEEsIEIsIEMsIEQsIEUpIFNIQV9ST1VORCh0LCBTSEFfTUlYLCAoQl5DXkQpICwgIDB4Y2E2MmMxZDYsIEEsIEIsIEMsIEQsIEUgKQorCitzdGF0aWMgdm9pZCBibGtfU0hBMV9CbG9jayhibGtfU0hBX0NUWCAqY3R4LCBjb25zdCB2b2lkICpibG9jaykKK3sKKwl1bnNpZ25lZCBpbnQgQSxCLEMsRCxFOworCXVuc2lnbmVkIGludCBhcnJheVsxNl07CisKKwlBID0gY3R4LT5IWzBdOworCUIgPSBjdHgtPkhbMV07CisJQyA9IGN0eC0+SFsyXTsKKwlEID0gY3R4LT5IWzNdOworCUUgPSBjdHgtPkhbNF07CisKKwkvKiBSb3VuZCAxIC0gaXRlcmF0aW9ucyAwLTE2IHRha2UgdGhlaXIgaW5wdXQgZnJvbSAnYmxvY2snICovCisJVF8wXzE1KCAwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzBfMTUoIDEsIEUsIEEsIEIsIEMsIEQpOworCVRfMF8xNSggMiwgRCwgRSwgQSwgQiwgQyk7CisJVF8wXzE1KCAzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzBfMTUoIDQsIEIsIEMsIEQsIEUsIEEpOworCVRfMF8xNSggNSwgQSwgQiwgQywgRCwgRSk7CisJVF8wXzE1KCA2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzBfMTUoIDcsIEQsIEUsIEEsIEIsIEMpOworCVRfMF8xNSggOCwgQywgRCwgRSwgQSwgQik7CisJVF8wXzE1KCA5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzBfMTUoMTAsIEEsIEIsIEMsIEQsIEUpOworCVRfMF8xNSgxMSwgRSwgQSwgQiwgQywgRCk7CisJVF8wXzE1KDEyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzBfMTUoMTMsIEMsIEQsIEUsIEEsIEIpOworCVRfMF8xNSgxNCwgQiwgQywgRCwgRSwgQSk7CisJVF8wXzE1KDE1LCBBLCBCLCBDLCBELCBFKTsKKworCS8qIFJvdW5kIDEgLSB0YWlsLiBJbnB1dCBmcm9tIDUxMi1iaXQgbWl4aW5nIGFycmF5ICovCisJVF8xNl8xOSgxNiwgRSwgQSwgQiwgQywgRCk7CisJVF8xNl8xOSgxNywgRCwgRSwgQSwgQiwgQyk7CisJVF8xNl8xOSgxOCwgQywgRCwgRSwgQSwgQik7CisJVF8xNl8xOSgxOSwgQiwgQywgRCwgRSwgQSk7CisKKwkvKiBSb3VuZCAyICovCisJVF8yMF8zOSgyMCwgQSwgQiwgQywgRCwgRSk7CisJVF8yMF8zOSgyMSwgRSwgQSwgQiwgQywgRCk7CisJVF8yMF8zOSgyMiwgRCwgRSwgQSwgQiwgQyk7CisJVF8yMF8zOSgyMywgQywgRCwgRSwgQSwgQik7CisJVF8yMF8zOSgyNCwgQiwgQywgRCwgRSwgQSk7CisJVF8yMF8zOSgyNSwgQSwgQiwgQywgRCwgRSk7CisJVF8yMF8zOSgyNiwgRSwgQSwgQiwgQywgRCk7CisJVF8yMF8zOSgyNywgRCwgRSwgQSwgQiwgQyk7CisJVF8yMF8zOSgyOCwgQywgRCwgRSwgQSwgQik7CisJVF8yMF8zOSgyOSwgQiwgQywgRCwgRSwgQSk7CisJVF8yMF8zOSgzMCwgQSwgQiwgQywgRCwgRSk7CisJVF8yMF8zOSgzMSwgRSwgQSwgQiwgQywgRCk7CisJVF8yMF8zOSgzMiwgRCwgRSwgQSwgQiwgQyk7CisJVF8yMF8zOSgzMywgQywgRCwgRSwgQSwgQik7CisJVF8yMF8zOSgzNCwgQiwgQywgRCwgRSwgQSk7CisJVF8yMF8zOSgzNSwgQSwgQiwgQywgRCwgRSk7CisJVF8yMF8zOSgzNiwgRSwgQSwgQiwgQywgRCk7CisJVF8yMF8zOSgzNywgRCwgRSwgQSwgQiwgQyk7CisJVF8yMF8zOSgzOCwgQywgRCwgRSwgQSwgQik7CisJVF8yMF8zOSgzOSwgQiwgQywgRCwgRSwgQSk7CisKKwkvKiBSb3VuZCAzICovCisJVF80MF81OSg0MCwgQSwgQiwgQywgRCwgRSk7CisJVF80MF81OSg0MSwgRSwgQSwgQiwgQywgRCk7CisJVF80MF81OSg0MiwgRCwgRSwgQSwgQiwgQyk7CisJVF80MF81OSg0MywgQywgRCwgRSwgQSwgQik7CisJVF80MF81OSg0NCwgQiwgQywgRCwgRSwgQSk7CisJVF80MF81OSg0NSwgQSwgQiwgQywgRCwgRSk7CisJVF80MF81OSg0NiwgRSwgQSwgQiwgQywgRCk7CisJVF80MF81OSg0NywgRCwgRSwgQSwgQiwgQyk7CisJVF80MF81OSg0OCwgQywgRCwgRSwgQSwgQik7CisJVF80MF81OSg0OSwgQiwgQywgRCwgRSwgQSk7CisJVF80MF81OSg1MCwgQSwgQiwgQywgRCwgRSk7CisJVF80MF81OSg1MSwgRSwgQSwgQiwgQywgRCk7CisJVF80MF81OSg1MiwgRCwgRSwgQSwgQiwgQyk7CisJVF80MF81OSg1MywgQywgRCwgRSwgQSwgQik7CisJVF80MF81OSg1NCwgQiwgQywgRCwgRSwgQSk7CisJVF80MF81OSg1NSwgQSwgQiwgQywgRCwgRSk7CisJVF80MF81OSg1NiwgRSwgQSwgQiwgQywgRCk7CisJVF80MF81OSg1NywgRCwgRSwgQSwgQiwgQyk7CisJVF80MF81OSg1OCwgQywgRCwgRSwgQSwgQik7CisJVF80MF81OSg1OSwgQiwgQywgRCwgRSwgQSk7CisKKwkvKiBSb3VuZCA0ICovCisJVF82MF83OSg2MCwgQSwgQiwgQywgRCwgRSk7CisJVF82MF83OSg2MSwgRSwgQSwgQiwgQywgRCk7CisJVF82MF83OSg2MiwgRCwgRSwgQSwgQiwgQyk7CisJVF82MF83OSg2MywgQywgRCwgRSwgQSwgQik7CisJVF82MF83OSg2NCwgQiwgQywgRCwgRSwgQSk7CisJVF82MF83OSg2NSwgQSwgQiwgQywgRCwgRSk7CisJVF82MF83OSg2NiwgRSwgQSwgQiwgQywgRCk7CisJVF82MF83OSg2NywgRCwgRSwgQSwgQiwgQyk7CisJVF82MF83OSg2OCwgQywgRCwgRSwgQSwgQik7CisJVF82MF83OSg2OSwgQiwgQywgRCwgRSwgQSk7CisJVF82MF83OSg3MCwgQSwgQiwgQywgRCwgRSk7CisJVF82MF83OSg3MSwgRSwgQSwgQiwgQywgRCk7CisJVF82MF83OSg3MiwgRCwgRSwgQSwgQiwgQyk7CisJVF82MF83OSg3MywgQywgRCwgRSwgQSwgQik7CisJVF82MF83OSg3NCwgQiwgQywgRCwgRSwgQSk7CisJVF82MF83OSg3NSwgQSwgQiwgQywgRCwgRSk7CisJVF82MF83OSg3NiwgRSwgQSwgQiwgQywgRCk7CisJVF82MF83OSg3NywgRCwgRSwgQSwgQiwgQyk7CisJVF82MF83OSg3OCwgQywgRCwgRSwgQSwgQik7CisJVF82MF83OSg3OSwgQiwgQywgRCwgRSwgQSk7CisKKwljdHgtPkhbMF0gKz0gQTsKKwljdHgtPkhbMV0gKz0gQjsKKwljdHgtPkhbMl0gKz0gQzsKKwljdHgtPkhbM10gKz0gRDsKKwljdHgtPkhbNF0gKz0gRTsKK30KKwordm9pZCBibGtfU0hBMV9Jbml0KGJsa19TSEFfQ1RYICpjdHgpCit7CisJY3R4LT5zaXplID0gMDsKKworCS8qIEluaXRpYWxpemUgSCB3aXRoIHRoZSBtYWdpYyBjb25zdGFudHMgKHNlZSBGSVBTMTgwIGZvciBjb25zdGFudHMpICovCisJY3R4LT5IWzBdID0gMHg2NzQ1MjMwMTsKKwljdHgtPkhbMV0gPSAweGVmY2RhYjg5OworCWN0eC0+SFsyXSA9IDB4OThiYWRjZmU7CisJY3R4LT5IWzNdID0gMHgxMDMyNTQ3NjsKKwljdHgtPkhbNF0gPSAweGMzZDJlMWYwOworfQorCit2b2lkIGJsa19TSEExX1VwZGF0ZShibGtfU0hBX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuVyA9IGN0eC0+c2l6ZSAmIDYzOworCisJY3R4LT5zaXplICs9IGxlbjsKKworCS8qIFJlYWQgdGhlIGRhdGEgaW50byBXIGFuZCBwcm9jZXNzIGJsb2NrcyBhcyB0aGV5IGdldCBmdWxsICovCisJaWYgKGxlblcpIHsKKwkJdW5zaWduZWQgaW50IGxlZnQgPSA2NCAtIGxlblc7CisJCWlmIChsZW4gPCBsZWZ0KQorCQkJbGVmdCA9IGxlbjsKKwkJbWVtY3B5KGxlblcgKyAoY2hhciAqKWN0eC0+VywgZGF0YSwgbGVmdCk7CisJCWxlblcgPSAobGVuVyArIGxlZnQpICYgNjM7CisJCWxlbiAtPSBsZWZ0OworCQlkYXRhID0gKChjb25zdCBjaGFyICopZGF0YSArIGxlZnQpOworCQlpZiAobGVuVykKKwkJCXJldHVybjsKKwkJYmxrX1NIQTFfQmxvY2soY3R4LCBjdHgtPlcpOworCX0KKwl3aGlsZSAobGVuID49IDY0KSB7CisJCWJsa19TSEExX0Jsb2NrKGN0eCwgZGF0YSk7CisJCWRhdGEgPSAoKGNvbnN0IGNoYXIgKilkYXRhICsgNjQpOworCQlsZW4gLT0gNjQ7CisJfQorCWlmIChsZW4pCisJCW1lbWNweShjdHgtPlcsIGRhdGEsIGxlbik7Cit9CisKK3ZvaWQgYmxrX1NIQTFfRmluYWwodW5zaWduZWQgY2hhciBoYXNob3V0WzIwXSwgYmxrX1NIQV9DVFggKmN0eCkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWRbNjRdID0geyAweDgwIH07CisJdW5zaWduZWQgaW50IHBhZGxlblsyXTsKKwlpbnQgaTsKKworCS8qIFBhZCB3aXRoIGEgYmluYXJ5IDEgKGllIDB4ODApLCB0aGVuIHplcm9lcywgdGhlbiBsZW5ndGggKi8KKwlwYWRsZW5bMF0gPSBodG9ubCgodWludDMyX3QpKGN0eC0+c2l6ZSA+PiAyOSkpOworCXBhZGxlblsxXSA9IGh0b25sKCh1aW50MzJfdCkoY3R4LT5zaXplIDw8IDMpKTsKKworCWkgPSBjdHgtPnNpemUgJiA2MzsKKwlibGtfU0hBMV9VcGRhdGUoY3R4LCBwYWQsIDEgKyAoNjMgJiAoNTUgLSBpKSkpOworCWJsa19TSEExX1VwZGF0ZShjdHgsIHBhZGxlbiwgOCk7CisKKwkvKiBPdXRwdXQgaGFzaCAqLworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCXB1dF9iZTMyKGhhc2hvdXQgKyBpICogNCwgY3R4LT5IW2ldKTsKK30KZGlmZiAtLWdpdCBhL2Jsb2NrLXNoYTEvc2hhMS5oIGIvYmxvY2stc2hhMS9zaGExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmNjc0NwotLS0gL2Rldi9udWxsCisrKyBiL2Jsb2NrLXNoYTEvc2hhMS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBTSEExIHJvdXRpbmUgb3B0aW1pemVkIHRvIGRvIHdvcmQgYWNjZXNzZXMgcmF0aGVyIHRoYW4gYnl0ZSBhY2Nlc3NlcywKKyAqIGFuZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb3BpZXMgaW50byB0aGUgY29udGV4dCBhcnJheS4KKyAqCisgKiBUaGlzIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gdGhlIE1vemlsbGEgU0hBMSBpbXBsZW1lbnRhdGlvbiwgYWx0aG91Z2gKKyAqIG5vbmUgb2YgdGhlIG9yaWdpbmFsIE1vemlsbGEgY29kZSByZW1haW5zLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgSFs1XTsKKwl1bnNpZ25lZCBpbnQgV1sxNl07Cit9IGJsa19TSEFfQ1RYOworCit2b2lkIGJsa19TSEExX0luaXQoYmxrX1NIQV9DVFggKmN0eCk7Cit2b2lkIGJsa19TSEExX1VwZGF0ZShibGtfU0hBX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhSW4sIHVuc2lnbmVkIGxvbmcgbGVuKTsKK3ZvaWQgYmxrX1NIQTFfRmluYWwodW5zaWduZWQgY2hhciBoYXNob3V0WzIwXSwgYmxrX1NIQV9DVFggKmN0eCk7CisKKyNkZWZpbmUgcGxhdGZvcm1fU0hBX0NUWAlibGtfU0hBX0NUWAorI2RlZmluZSBwbGF0Zm9ybV9TSEExX0luaXQJYmxrX1NIQTFfSW5pdAorI2RlZmluZSBwbGF0Zm9ybV9TSEExX1VwZGF0ZQlibGtfU0hBMV9VcGRhdGUKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMV9GaW5hbAlibGtfU0hBMV9GaW5hbApkaWZmIC0tZ2l0IGEvYnJhbmNoLmMgYi9icmFuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzk0OTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYnJhbmNoLmMKQEAgLTAsMCArMSwzOTMgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworc3RydWN0IHRyYWNraW5nIHsKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHNwZWM7CisJY2hhciAqc3JjOworCWNvbnN0IGNoYXIgKnJlbW90ZTsKKwlpbnQgbWF0Y2hlczsKK307CisKK3N0YXRpYyBpbnQgZmluZF90cmFja2VkX2JyYW5jaChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHRyYWNraW5nICp0cmFja2luZyA9IHByaXY7CisKKwlpZiAoIXJlbW90ZV9maW5kX3RyYWNraW5nKHJlbW90ZSwgJnRyYWNraW5nLT5zcGVjKSkgeworCQlpZiAoKyt0cmFja2luZy0+bWF0Y2hlcyA9PSAxKSB7CisJCQl0cmFja2luZy0+c3JjID0gdHJhY2tpbmctPnNwZWMuc3JjOworCQkJdHJhY2tpbmctPnJlbW90ZSA9IHJlbW90ZS0+bmFtZTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUodHJhY2tpbmctPnNwZWMuc3JjKTsKKwkJCUZSRUVfQU5EX05VTEwodHJhY2tpbmctPnNyYyk7CisJCX0KKwkJdHJhY2tpbmctPnNwZWMuc3JjID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG91bGRfc2V0dXBfcmViYXNlKGNvbnN0IGNoYXIgKm9yaWdpbikKK3sKKwlzd2l0Y2ggKGF1dG9yZWJhc2UpIHsKKwljYXNlIEFVVE9SRUJBU0VfTkVWRVI6CisJCXJldHVybiAwOworCWNhc2UgQVVUT1JFQkFTRV9MT0NBTDoKKwkJcmV0dXJuIG9yaWdpbiA9PSBOVUxMOworCWNhc2UgQVVUT1JFQkFTRV9SRU1PVEU6CisJCXJldHVybiBvcmlnaW4gIT0gTlVMTDsKKwljYXNlIEFVVE9SRUJBU0VfQUxXQVlTOgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHRyYWNraW5nX2FkdmljZVtdID0KK05fKCJcbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIik7CisKK2ludCBpbnN0YWxsX2JyYW5jaF9jb25maWcoaW50IGZsYWcsIGNvbnN0IGNoYXIgKmxvY2FsLCBjb25zdCBjaGFyICpvcmlnaW4sIGNvbnN0IGNoYXIgKnJlbW90ZSkKK3sKKwljb25zdCBjaGFyICpzaG9ydG5hbWUgPSBOVUxMOworCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlYmFzaW5nID0gc2hvdWxkX3NldHVwX3JlYmFzZShvcmlnaW4pOworCisJaWYgKHNraXBfcHJlZml4KHJlbW90ZSwgInJlZnMvaGVhZHMvIiwgJnNob3J0bmFtZSkKKwkgICAgJiYgIXN0cmNtcChsb2NhbCwgc2hvcnRuYW1lKQorCSAgICAmJiAhb3JpZ2luKSB7CisJCXdhcm5pbmcoXygiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIiksCisJCQlsb2NhbCk7CisJCXJldHVybiAwOworCX0KKworCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMucmVtb3RlIiwgbG9jYWwpOworCWlmIChnaXRfY29uZmlnX3NldF9nZW50bHkoa2V5LmJ1Ziwgb3JpZ2luID8gb3JpZ2luIDogIi4iKSA8IDApCisJCWdvdG8gb3V0X2VycjsKKworCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwlzdHJidWZfYWRkZigma2V5LCAiYnJhbmNoLiVzLm1lcmdlIiwgbG9jYWwpOworCWlmIChnaXRfY29uZmlnX3NldF9nZW50bHkoa2V5LmJ1ZiwgcmVtb3RlKSA8IDApCisJCWdvdG8gb3V0X2VycjsKKworCWlmIChyZWJhc2luZykgeworCQlzdHJidWZfcmVzZXQoJmtleSk7CisJCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMucmViYXNlIiwgbG9jYWwpOworCQlpZiAoZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KGtleS5idWYsICJ0cnVlIikgPCAwKQorCQkJZ290byBvdXRfZXJyOworCX0KKwlzdHJidWZfcmVsZWFzZSgma2V5KTsKKworCWlmIChmbGFnICYgQlJBTkNIX0NPTkZJR19WRVJCT1NFKSB7CisJCWlmIChzaG9ydG5hbWUpIHsKKwkJCWlmIChvcmlnaW4pCisJCQkJcHJpbnRmX2xuKHJlYmFzaW5nID8KKwkJCQkJICBfKCJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iKSA6CisJCQkJCSAgXygiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIiksCisJCQkJCSAgbG9jYWwsIHNob3J0bmFtZSwgb3JpZ2luKTsKKwkJCWVsc2UKKwkJCQlwcmludGZfbG4ocmViYXNpbmcgPworCQkJCQkgIF8oIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iKSA6CisJCQkJCSAgXygiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIpLAorCQkJCQkgIGxvY2FsLCBzaG9ydG5hbWUpOworCQl9IGVsc2UgeworCQkJaWYgKG9yaWdpbikKKwkJCQlwcmludGZfbG4ocmViYXNpbmcgPworCQkJCQkgIF8oIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIikgOgorCQkJCQkgIF8oIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIiksCisJCQkJCSAgbG9jYWwsIHJlbW90ZSk7CisJCQllbHNlCisJCQkJcHJpbnRmX2xuKHJlYmFzaW5nID8KKwkJCQkJICBfKCJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIikgOgorCQkJCQkgIF8oIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iKSwKKwkJCQkJICBsb2NhbCwgcmVtb3RlKTsKKwkJfQorCX0KKworCXJldHVybiAwOworCitvdXRfZXJyOgorCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCWVycm9yKF8oIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIpKTsKKworCWFkdmlzZShfKHRyYWNraW5nX2FkdmljZSksCisJICAgICAgIG9yaWdpbiA/IG9yaWdpbiA6ICIiLAorCSAgICAgICBvcmlnaW4gPyAiLyIgOiAiIiwKKwkgICAgICAgc2hvcnRuYW1lID8gc2hvcnRuYW1lIDogcmVtb3RlKTsKKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gbmV3X3JlZiBpcyBicmFuY2hlZCBvZmYgb2Ygb3JpZ19yZWYsIGFuZCB0cmllcworICogdG8gaW5mZXIgdGhlIHNldHRpbmdzIGZvciBicmFuY2guPG5ld19yZWY+LntyZW1vdGUsbWVyZ2V9IGZyb20gdGhlCisgKiBjb25maWcuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX3RyYWNraW5nKGNvbnN0IGNoYXIgKm5ld19yZWYsIGNvbnN0IGNoYXIgKm9yaWdfcmVmLAorCQkJICAgZW51bSBicmFuY2hfdHJhY2sgdHJhY2ssIGludCBxdWlldCkKK3sKKwlzdHJ1Y3QgdHJhY2tpbmcgdHJhY2tpbmc7CisJaW50IGNvbmZpZ19mbGFncyA9IHF1aWV0ID8gMCA6IEJSQU5DSF9DT05GSUdfVkVSQk9TRTsKKworCW1lbXNldCgmdHJhY2tpbmcsIDAsIHNpemVvZih0cmFja2luZykpOworCXRyYWNraW5nLnNwZWMuZHN0ID0gKGNoYXIgKilvcmlnX3JlZjsKKwlpZiAoZm9yX2VhY2hfcmVtb3RlKGZpbmRfdHJhY2tlZF9icmFuY2gsICZ0cmFja2luZykpCisJCXJldHVybjsKKworCWlmICghdHJhY2tpbmcubWF0Y2hlcykKKwkJc3dpdGNoICh0cmFjaykgeworCQljYXNlIEJSQU5DSF9UUkFDS19BTFdBWVM6CisJCWNhc2UgQlJBTkNIX1RSQUNLX0VYUExJQ0lUOgorCQljYXNlIEJSQU5DSF9UUkFDS19PVkVSUklERToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCQl9CisKKwlpZiAodHJhY2tpbmcubWF0Y2hlcyA+IDEpCisJCWRpZShfKCJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIiksCisJCSAgICBvcmlnX3JlZik7CisKKwlpZiAoaW5zdGFsbF9icmFuY2hfY29uZmlnKGNvbmZpZ19mbGFncywgbmV3X3JlZiwgdHJhY2tpbmcucmVtb3RlLAorCQkJICAgICAgdHJhY2tpbmcuc3JjID8gdHJhY2tpbmcuc3JjIDogb3JpZ19yZWYpIDwgMCkKKwkJZXhpdCgtMSk7CisKKwlmcmVlKHRyYWNraW5nLnNyYyk7Cit9CisKK2ludCByZWFkX2JyYW5jaF9kZXNjKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqYnJhbmNoX25hbWUpCit7CisJY2hhciAqdiA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm5hbWUsICJicmFuY2guJXMuZGVzY3JpcHRpb24iLCBicmFuY2hfbmFtZSk7CisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZyhuYW1lLmJ1ZiwgJnYpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfYWRkc3RyKGJ1Ziwgdik7CisJZnJlZSh2KTsKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBpZiAnbmFtZScgY2FuIGJlIGEgdmFsaWQgbmFtZSBmb3IgYSBicmFuY2g7IGRpZSBvdGhlcndpc2UuCisgKiBSZXR1cm4gMSBpZiB0aGUgbmFtZWQgYnJhbmNoIGFscmVhZHkgZXhpc3RzOyByZXR1cm4gMCBvdGhlcndpc2UuCisgKiBGaWxsIHJlZiB3aXRoIHRoZSBmdWxsIHJlZm5hbWUgZm9yIHRoZSBicmFuY2guCisgKi8KK2ludCB2YWxpZGF0ZV9icmFuY2huYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnJlZikKK3sKKwlpZiAoc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYocmVmLCBuYW1lKSkKKwkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIiksIG5hbWUpOworCisJcmV0dXJuIHJlZl9leGlzdHMocmVmLT5idWYpOworfQorCisvKgorICogQ2hlY2sgaWYgYSBicmFuY2ggJ25hbWUnIGNhbiBiZSBjcmVhdGVkIGFzIGEgbmV3IGJyYW5jaDsgZGllIG90aGVyd2lzZS4KKyAqICdmb3JjZScgY2FuIGJlIHVzZWQgd2hlbiBpdCBpcyBPSyBmb3IgdGhlIG5hbWVkIGJyYW5jaCBhbHJlYWR5IGV4aXN0cy4KKyAqIFJldHVybiAxIGlmIHRoZSBuYW1lZCBicmFuY2ggYWxyZWFkeSBleGlzdHM7IHJldHVybiAwIG90aGVyd2lzZS4KKyAqIEZpbGwgcmVmIHdpdGggdGhlIGZ1bGwgcmVmbmFtZSBmb3IgdGhlIGJyYW5jaC4KKyAqLworaW50IHZhbGlkYXRlX25ld19icmFuY2huYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnJlZiwgaW50IGZvcmNlKQoreworCWNvbnN0IGNoYXIgKmhlYWQ7CisKKwlpZiAoIXZhbGlkYXRlX2JyYW5jaG5hbWUobmFtZSwgcmVmKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWZvcmNlKQorCQlkaWUoXygiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iKSwKKwkJICAgIHJlZi0+YnVmICsgc3RybGVuKCJyZWZzL2hlYWRzLyIpKTsKKworCWhlYWQgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeSgpICYmIGhlYWQgJiYgIXN0cmNtcChoZWFkLCByZWYtPmJ1ZikpCisJCWRpZShfKCJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja190cmFja2luZ19icmFuY2goc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCWNoYXIgKnRyYWNraW5nX2JyYW5jaCA9IGNiX2RhdGE7CisJc3RydWN0IHJlZnNwZWNfaXRlbSBxdWVyeTsKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWNfaXRlbSkpOworCXF1ZXJ5LmRzdCA9IHRyYWNraW5nX2JyYW5jaDsKKwlyZXR1cm4gIXJlbW90ZV9maW5kX3RyYWNraW5nKHJlbW90ZSwgJnF1ZXJ5KTsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoKGNoYXIgKnJlZikKK3sKKwlyZXR1cm4gIWZvcl9lYWNoX3JlbW90ZShjaGVja190cmFja2luZ19icmFuY2gsIHJlZik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHVwc3RyZWFtX25vdF9icmFuY2hbXSA9CitOXygiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iKTsKK3N0YXRpYyBjb25zdCBjaGFyIHVwc3RyZWFtX21pc3NpbmdbXSA9CitOXygidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIpOworc3RhdGljIGNvbnN0IGNoYXIgdXBzdHJlYW1fYWR2aWNlW10gPQorTl8oIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIik7CisKK3ZvaWQgY3JlYXRlX2JyYW5jaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3RhcnRfbmFtZSwKKwkJICAgaW50IGZvcmNlLCBpbnQgY2xvYmJlcl9oZWFkX29rLCBpbnQgcmVmbG9nLAorCQkgICBpbnQgcXVpZXQsIGVudW0gYnJhbmNoX3RyYWNrIHRyYWNrKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICpyZWFsX3JlZjsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZiA9IFNUUkJVRl9JTklUOworCWludCBmb3JjaW5nID0gMDsKKwlpbnQgZG9udF9jaGFuZ2VfcmVmID0gMDsKKwlpbnQgZXhwbGljaXRfdHJhY2tpbmcgPSAwOworCisJaWYgKHRyYWNrID09IEJSQU5DSF9UUkFDS19FWFBMSUNJVCB8fCB0cmFjayA9PSBCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUpCisJCWV4cGxpY2l0X3RyYWNraW5nID0gMTsKKworCWlmICgodHJhY2sgPT0gQlJBTkNIX1RSQUNLX09WRVJSSURFIHx8IGNsb2JiZXJfaGVhZF9vaykKKwkgICAgPyB2YWxpZGF0ZV9icmFuY2huYW1lKG5hbWUsICZyZWYpCisJICAgIDogdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUobmFtZSwgJnJlZiwgZm9yY2UpKSB7CisJCWlmICghZm9yY2UpCisJCQlkb250X2NoYW5nZV9yZWYgPSAxOworCQllbHNlCisJCQlmb3JjaW5nID0gMTsKKwl9CisKKwlyZWFsX3JlZiA9IE5VTEw7CisJaWYgKGdldF9vaWRfbWIoc3RhcnRfbmFtZSwgJm9pZCkpIHsKKwkJaWYgKGV4cGxpY2l0X3RyYWNraW5nKSB7CisJCQlpZiAoYWR2aWNlX3NldF91cHN0cmVhbV9mYWlsdXJlKSB7CisJCQkJZXJyb3IoXyh1cHN0cmVhbV9taXNzaW5nKSwgc3RhcnRfbmFtZSk7CisJCQkJYWR2aXNlKF8odXBzdHJlYW1fYWR2aWNlKSk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWRpZShfKHVwc3RyZWFtX21pc3NpbmcpLCBzdGFydF9uYW1lKTsKKwkJfQorCQlkaWUoXygiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIiksIHN0YXJ0X25hbWUpOworCX0KKworCXN3aXRjaCAoZHdpbV9yZWYoc3RhcnRfbmFtZSwgc3RybGVuKHN0YXJ0X25hbWUpLCAmb2lkLCAmcmVhbF9yZWYpKSB7CisJY2FzZSAwOgorCQkvKiBOb3QgYnJhbmNoaW5nIGZyb20gYW55IGV4aXN0aW5nIGJyYW5jaCAqLworCQlpZiAoZXhwbGljaXRfdHJhY2tpbmcpCisJCQlkaWUoXyh1cHN0cmVhbV9ub3RfYnJhbmNoKSwgc3RhcnRfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogVW5pcXVlIGNvbXBsZXRpb24gLS0gZ29vZCwgb25seSBpZiBpdCBpcyBhIHJlYWwgYnJhbmNoICovCisJCWlmICghc3RhcnRzX3dpdGgocmVhbF9yZWYsICJyZWZzL2hlYWRzLyIpICYmCisJCSAgICB2YWxpZGF0ZV9yZW1vdGVfdHJhY2tpbmdfYnJhbmNoKHJlYWxfcmVmKSkgeworCQkJaWYgKGV4cGxpY2l0X3RyYWNraW5nKQorCQkJCWRpZShfKHVwc3RyZWFtX25vdF9icmFuY2gpLCBzdGFydF9uYW1lKTsKKwkJCWVsc2UKKwkJCQlyZWFsX3JlZiA9IE5VTEw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKF8oIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iKSwgc3RhcnRfbmFtZSk7CisJCWJyZWFrOworCX0KKworCWlmICgoY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UociwgJm9pZCkpID09IE5VTEwpCisJCWRpZShfKCJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIiksIHN0YXJ0X25hbWUpOworCW9pZGNweSgmb2lkLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCWlmIChyZWZsb2cpCisJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBMT0dfUkVGU19OT1JNQUw7CisKKwlpZiAoIWRvbnRfY2hhbmdlX3JlZikgeworCQlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwkJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwkJY2hhciAqbXNnOworCisJCWlmIChmb3JjaW5nKQorCQkJbXNnID0geHN0cmZtdCgiYnJhbmNoOiBSZXNldCB0byAlcyIsIHN0YXJ0X25hbWUpOworCQllbHNlCisJCQltc2cgPSB4c3RyZm10KCJicmFuY2g6IENyZWF0ZWQgZnJvbSAlcyIsIHN0YXJ0X25hbWUpOworCisJCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCQlpZiAoIXRyYW5zYWN0aW9uIHx8CisJCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWYuYnVmLAorCQkJCQkgICAmb2lkLCBmb3JjaW5nID8gTlVMTCA6ICZudWxsX29pZCwKKwkJCQkJICAgMCwgbXNnLCAmZXJyKSB8fAorCQkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCWZyZWUobXNnKTsKKwl9CisKKwlpZiAocmVhbF9yZWYgJiYgdHJhY2spCisJCXNldHVwX3RyYWNraW5nKHJlZi5idWYgKyAxMSwgcmVhbF9yZWYsIHRyYWNrLCBxdWlldCk7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKwlmcmVlKHJlYWxfcmVmKTsKK30KKwordm9pZCByZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHIpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfcnIocikpOworCXVubGluayhnaXRfcGF0aF9tZXJnZV9tc2cocikpOworCXVubGluayhnaXRfcGF0aF9tZXJnZV9tb2RlKHIpKTsKK30KKwordm9pZCByZW1vdmVfYnJhbmNoX3N0YXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBpbnQgdmVyYm9zZSkKK3sKKwlzZXF1ZW5jZXJfcG9zdF9jb21taXRfY2xlYW51cChyLCB2ZXJib3NlKTsKKwl1bmxpbmsoZ2l0X3BhdGhfc3F1YXNoX21zZyhyKSk7CisJcmVtb3ZlX21lcmdlX2JyYW5jaF9zdGF0ZShyKTsKK30KKwordm9pZCBkaWVfaWZfY2hlY2tlZF9vdXQoY29uc3QgY2hhciAqYnJhbmNoLCBpbnQgaWdub3JlX2N1cnJlbnRfd29ya3RyZWUpCit7CisJY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dDsKKworCXd0ID0gZmluZF9zaGFyZWRfc3ltcmVmKCJIRUFEIiwgYnJhbmNoKTsKKwlpZiAoIXd0IHx8IChpZ25vcmVfY3VycmVudF93b3JrdHJlZSAmJiB3dC0+aXNfY3VycmVudCkpCisJCXJldHVybjsKKwlza2lwX3ByZWZpeChicmFuY2gsICJyZWZzL2hlYWRzLyIsICZicmFuY2gpOworCWRpZShfKCInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIpLAorCSAgICBicmFuY2gsIHd0LT5wYXRoKTsKK30KKworaW50IHJlcGxhY2VfZWFjaF93b3JrdHJlZV9oZWFkX3N5bXJlZihjb25zdCBjaGFyICpvbGRyZWYsIGNvbnN0IGNoYXIgKm5ld3JlZiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzID0gZ2V0X3dvcmt0cmVlcygwKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHdvcmt0cmVlc1tpXTsgaSsrKSB7CisJCXN0cnVjdCByZWZfc3RvcmUgKnJlZnM7CisKKwkJaWYgKHdvcmt0cmVlc1tpXS0+aXNfZGV0YWNoZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF3b3JrdHJlZXNbaV0tPmhlYWRfcmVmKQorCQkJY29udGludWU7CisJCWlmIChzdHJjbXAob2xkcmVmLCB3b3JrdHJlZXNbaV0tPmhlYWRfcmVmKSkKKwkJCWNvbnRpbnVlOworCisJCXJlZnMgPSBnZXRfd29ya3RyZWVfcmVmX3N0b3JlKHdvcmt0cmVlc1tpXSk7CisJCWlmIChyZWZzX2NyZWF0ZV9zeW1yZWYocmVmcywgIkhFQUQiLCBuZXdyZWYsIGxvZ21zZykpCisJCQlyZXQgPSBlcnJvcihfKCJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIpLAorCQkJCSAgICB3b3JrdHJlZXNbaV0tPnBhdGgpOworCX0KKworCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2JyYW5jaC5oIGIvYnJhbmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwYmU2MQotLS0gL2Rldi9udWxsCisrKyBiL2JyYW5jaC5oCkBAIC0wLDAgKzEsMTAzIEBACisjaWZuZGVmIEJSQU5DSF9ICisjZGVmaW5lIEJSQU5DSF9ICisKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHN0cmJ1ZjsKKworZW51bSBicmFuY2hfdHJhY2sgeworCUJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCA9IC0xLAorCUJSQU5DSF9UUkFDS19ORVZFUiA9IDAsCisJQlJBTkNIX1RSQUNLX1JFTU9URSwKKwlCUkFOQ0hfVFJBQ0tfQUxXQVlTLAorCUJSQU5DSF9UUkFDS19FWFBMSUNJVCwKKwlCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUKK307CisKK2V4dGVybiBlbnVtIGJyYW5jaF90cmFjayBnaXRfYnJhbmNoX3RyYWNrOworCisvKiBGdW5jdGlvbnMgZm9yIGFjdGluZyBvbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYnJhbmNoZXMuICovCisKKy8qCisgKiBDcmVhdGVzIGEgbmV3IGJyYW5jaCwgd2hlcmU6CisgKgorICogICAtIHIgaXMgdGhlIHJlcG9zaXRvcnkgdG8gYWRkIGEgYnJhbmNoIHRvCisgKgorICogICAtIG5hbWUgaXMgdGhlIG5ldyBicmFuY2ggbmFtZQorICoKKyAqICAgLSBzdGFydF9uYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBleGlzdGluZyBicmFuY2ggdGhhdCB0aGUgbmV3IGJyYW5jaCBzaG91bGQKKyAqICAgICBzdGFydCBmcm9tCisgKgorICogICAtIGZvcmNlIGVuYWJsZXMgb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgKG5vbi1oZWFkKSBicmFuY2gKKyAqCisgKiAgIC0gY2xvYmJlcl9oZWFkX29rIGFsbG93cyB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IChoZW5jZSBleGlzdGluZykKKyAqICAgICBicmFuY2ggdG8gYmUgb3ZlcndyaXR0ZW47IHdpdGhvdXQgJ2ZvcmNlJywgaXQgaGFzIG5vIGVmZmVjdC4KKyAqCisgKiAgIC0gcmVmbG9nIGNyZWF0ZXMgYSByZWZsb2cgZm9yIHRoZSBicmFuY2gKKyAqCisgKiAgIC0gcXVpZXQgc3VwcHJlc3NlcyB0cmFja2luZyBpbmZvcm1hdGlvbgorICoKKyAqICAgLSB0cmFjayBjYXVzZXMgdGhlIG5ldyBicmFuY2ggdG8gYmUgY29uZmlndXJlZCB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaAorICogICAgIHRoYXQgc3RhcnRfbmFtZSBpcyBhIHRyYWNraW5nIGJyYW5jaCBmb3IgKGlmIGFueSkuCisgKgorICovCit2b2lkIGNyZWF0ZV9icmFuY2goc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN0YXJ0X25hbWUsCisJCSAgIGludCBmb3JjZSwgaW50IGNsb2JiZXJfaGVhZF9vaywKKwkJICAgaW50IHJlZmxvZywgaW50IHF1aWV0LCBlbnVtIGJyYW5jaF90cmFjayB0cmFjayk7CisKKy8qCisgKiBDaGVjayBpZiAnbmFtZScgY2FuIGJlIGEgdmFsaWQgbmFtZSBmb3IgYSBicmFuY2g7IGRpZSBvdGhlcndpc2UuCisgKiBSZXR1cm4gMSBpZiB0aGUgbmFtZWQgYnJhbmNoIGFscmVhZHkgZXhpc3RzOyByZXR1cm4gMCBvdGhlcndpc2UuCisgKiBGaWxsIHJlZiB3aXRoIHRoZSBmdWxsIHJlZm5hbWUgZm9yIHRoZSBicmFuY2guCisgKi8KK2ludCB2YWxpZGF0ZV9icmFuY2huYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnJlZik7CisKKy8qCisgKiBDaGVjayBpZiBhIGJyYW5jaCAnbmFtZScgY2FuIGJlIGNyZWF0ZWQgYXMgYSBuZXcgYnJhbmNoOyBkaWUgb3RoZXJ3aXNlLgorICogJ2ZvcmNlJyBjYW4gYmUgdXNlZCB3aGVuIGl0IGlzIE9LIGZvciB0aGUgbmFtZWQgYnJhbmNoIGFscmVhZHkgZXhpc3RzLgorICogUmV0dXJuIDEgaWYgdGhlIG5hbWVkIGJyYW5jaCBhbHJlYWR5IGV4aXN0czsgcmV0dXJuIDAgb3RoZXJ3aXNlLgorICogRmlsbCByZWYgd2l0aCB0aGUgZnVsbCByZWZuYW1lIGZvciB0aGUgYnJhbmNoLgorICovCitpbnQgdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqcmVmLCBpbnQgZm9yY2UpOworCisvKgorICogUmVtb3ZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZXJnZSBzdGF0ZSBvbiB0aGUgY3VycmVudAorICogYnJhbmNoLiAoRS5nLiwgTUVSR0VfSEVBRCkKKyAqLwordm9pZCByZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKKworLyoKKyAqIFJlbW92ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2Ygd29ya2luZyBvbiB0aGUgY3VycmVudAorICogYnJhbmNoLiAoRS5nLiwgTUVSR0VfSEVBRCkKKyAqLwordm9pZCByZW1vdmVfYnJhbmNoX3N0YXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBpbnQgdmVyYm9zZSk7CisKKy8qCisgKiBDb25maWd1cmUgbG9jYWwgYnJhbmNoICJsb2NhbCIgYXMgZG93bnN0cmVhbSB0byBicmFuY2ggInJlbW90ZSIKKyAqIGZyb20gcmVtb3RlICJvcmlnaW4iLiAgVXNlZCBieSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KKyNkZWZpbmUgQlJBTkNIX0NPTkZJR19WRVJCT1NFIDAxCitpbnQgaW5zdGFsbF9icmFuY2hfY29uZmlnKGludCBmbGFnLCBjb25zdCBjaGFyICpsb2NhbCwgY29uc3QgY2hhciAqb3JpZ2luLCBjb25zdCBjaGFyICpyZW1vdGUpOworCisvKgorICogUmVhZCBicmFuY2ggZGVzY3JpcHRpb24KKyAqLworaW50IHJlYWRfYnJhbmNoX2Rlc2Moc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpicmFuY2hfbmFtZSk7CisKKy8qCisgKiBDaGVjayBpZiBhIGJyYW5jaCBpcyBjaGVja2VkIG91dCBpbiB0aGUgbWFpbiB3b3JrdHJlZSBvciBhbnkgbGlua2VkCisgKiB3b3JrdHJlZSBhbmQgZGllICh3aXRoIGEgbWVzc2FnZSBkZXNjcmliaW5nIGl0cyBjaGVja291dCBsb2NhdGlvbikgaWYKKyAqIGl0IGlzLgorICovCit2b2lkIGRpZV9pZl9jaGVja2VkX291dChjb25zdCBjaGFyICpicmFuY2gsIGludCBpZ25vcmVfY3VycmVudF93b3JrdHJlZSk7CisKKy8qCisgKiBVcGRhdGUgYWxsIHBlci13b3JrdHJlZSBIRUFEcyBwb2ludGluZyBhdCB0aGUgb2xkIHJlZiB0byBwb2ludCB0aGUgbmV3IHJlZi4KKyAqIFRoaXMgd2lsbCBiZSB1c2VkIHdoZW4gcmVuYW1pbmcgYSBicmFuY2guIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBub24temVybworICogb3RoZXJ3aXNlLgorICovCitpbnQgcmVwbGFjZV9lYWNoX3dvcmt0cmVlX2hlYWRfc3ltcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmxvZ21zZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi5oIGIvYnVpbHRpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjVhODAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluLmgKQEAgLTAsMCArMSwyNTcgQEAKKyNpZm5kZWYgQlVJTFRJTl9ICisjZGVmaW5lIEJVSUxUSU5fSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKworLyoKKyAqIGJ1aWx0aW4gQVBJCisgKiA9PT09PT09PT09PQorICoKKyAqIEFkZGluZyBhIG5ldyBidWlsdC1pbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlcmUgYXJlIDQgdGhpbmdzIHRvIGRvIHRvIGFkZCBhIGJ1aWx0LWluIGNvbW1hbmQgaW1wbGVtZW50YXRpb24gdG8KKyAqIEdpdDoKKyAqCisgKiAuIERlZmluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ1aWx0LWluIGNvbW1hbmQgYGZvb2Agd2l0aAorICogICBzaWduYXR1cmU6CisgKgorICoJaW50IGNtZF9mb28oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworICoKKyAqIC4gQWRkIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIHRvIGBidWlsdGluLmhgLgorICoKKyAqIC4gQWRkIHRoZSBjb21tYW5kIHRvIHRoZSBgY29tbWFuZHNbXWAgdGFibGUgZGVmaW5lZCBpbiBgZ2l0LmNgLgorICogICBUaGUgZW50cnkgc2hvdWxkIGxvb2sgbGlrZToKKyAqCisgKgl7ICJmb28iLCBjbWRfZm9vLCA8b3B0aW9ucz4gfSwKKyAqCisgKiB3aGVyZSBvcHRpb25zIGlzIHRoZSBiaXR3aXNlLW9yIG9mOgorICoKKyAqIGBSVU5fU0VUVVBgOgorICoJSWYgdGhlcmUgaXMgbm90IGEgR2l0IGRpcmVjdG9yeSB0byB3b3JrIG9uLCBhYm9ydC4gIElmIHRoZXJlCisgKglpcyBhIHdvcmsgdHJlZSwgY2hkaXIgdG8gdGhlIHRvcCBvZiBpdCBpZiB0aGUgY29tbWFuZCB3YXMKKyAqCWludm9rZWQgaW4gYSBzdWJkaXJlY3RvcnkuICBJZiB0aGVyZSBpcyBubyB3b3JrIHRyZWUsIG5vCisgKgljaGRpcigpIGlzIGRvbmUuCisgKgorICogYFJVTl9TRVRVUF9HRU5UTFlgOgorICoJSWYgdGhlcmUgaXMgYSBHaXQgZGlyZWN0b3J5LCBjaGRpciBhcyBwZXIgUlVOX1NFVFVQLCBvdGhlcndpc2UsCisgKglkb24ndCBjaGRpciBhbnl3aGVyZS4KKyAqCisgKiBgVVNFX1BBR0VSYDoKKyAqCisgKglJZiB0aGUgc3RhbmRhcmQgb3V0cHV0IGlzIGNvbm5lY3RlZCB0byBhIHR0eSwgc3Bhd24gYSBwYWdlciBhbmQKKyAqCWZlZWQgb3VyIG91dHB1dCB0byBpdC4KKyAqCisgKiBgTkVFRF9XT1JLX1RSRUVgOgorICoKKyAqCU1ha2Ugc3VyZSB0aGVyZSBpcyBhIHdvcmsgdHJlZSwgaS5lLiB0aGUgY29tbWFuZCBjYW5ub3QgYWN0CisgKglvbiBiYXJlIHJlcG9zaXRvcmllcy4KKyAqCVRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIGBSVU5fU0VUVVBgIGlzIGFsc28gc2V0LgorICoKKyAqIGBTVVBQT1JUX1NVUEVSX1BSRUZJWGA6CisgKgorICoJVGhlIGJ1aWx0LWluIHN1cHBvcnRzIGAtLXN1cGVyLXByZWZpeGAuCisgKgorICogYERFTEFZX1BBR0VSX0NPTkZJR2A6CisgKgorICoJSWYgUlVOX1NFVFVQIG9yIFJVTl9TRVRVUF9HRU5UTFkgaXMgc2V0LCBnaXQuYyBub3JtYWxseSBoYW5kbGVzCisgKgl0aGUgYHBhZ2VyLjxjbWQ+YC1jb25maWd1cmF0aW9uLiBJZiB0aGlzIGZsYWcgaXMgdXNlZCwgZ2l0LmMKKyAqCXdpbGwgc2tpcCB0aGF0IHN0ZXAsIGluc3RlYWQgYWxsb3dpbmcgdGhlIGJ1aWx0LWluIHRvIG1ha2UgYQorICoJbW9yZSBpbmZvcm1lZCBkZWNpc2lvbiwgZS5nLiwgYnkgaWdub3JpbmcgYHBhZ2VyLjxjbWQ+YCBmb3IKKyAqCWNlcnRhaW4gc3ViY29tbWFuZHMuCisgKgorICogLiBBZGQgYGJ1aWx0aW4vZm9vLm9gIHRvIGBCVUlMVElOX09CSlNgIGluIGBNYWtlZmlsZWAuCisgKgorICogQWRkaXRpb25hbGx5LCBpZiBgZm9vYCBpcyBhIG5ldyBjb21tYW5kLCB0aGVyZSBhcmUgNCBtb3JlIHRoaW5ncyB0byBkbzoKKyAqCisgKiAuIEFkZCB0ZXN0cyB0byBgdC9gIGRpcmVjdG9yeS4KKyAqCisgKiAuIFdyaXRlIGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vZ2l0LWZvby50eHRgLgorICoKKyAqIC4gQWRkIGFuIGVudHJ5IGZvciBgZ2l0LWZvb2AgdG8gYGNvbW1hbmQtbGlzdC50eHRgLgorICoKKyAqIC4gQWRkIGFuIGVudHJ5IGZvciBgL2dpdC1mb29gIHRvIGAuZ2l0aWdub3JlYC4KKyAqCisgKgorICogSG93IGEgYnVpbHQtaW4gaXMgY2FsbGVkCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gYGNtZF9mb28oKWAgdGFrZXMgdGhyZWUgcGFyYW1ldGVycywgYGFyZ2NgLCBgYXJndiwKKyAqIGFuZCBgcHJlZml4YC4gIFRoZSBmaXJzdCB0d28gYXJlIHNpbWlsYXIgdG8gd2hhdCBgbWFpbigpYCBvZiBhCisgKiBzdGFuZGFsb25lIGNvbW1hbmQgd291bGQgYmUgY2FsbGVkIHdpdGguCisgKgorICogV2hlbiBgUlVOX1NFVFVQYCBpcyBzcGVjaWZpZWQgaW4gdGhlIGBjb21tYW5kc1tdYCB0YWJsZSwgYW5kIHdoZW4geW91CisgKiB3ZXJlIHN0YXJ0ZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgd29yayB0cmVlLCBgY21kX2ZvbygpYCBpcyBjYWxsZWQKKyAqIGFmdGVyIGNoZGlyKDIpIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmsgdHJlZSwgYW5kIGBwcmVmaXhgIGdldHMgdGhlIHBhdGgKKyAqIHRvIHRoZSBzdWJkaXJlY3RvcnkgdGhlIGNvbW1hbmQgc3RhcnRlZCBmcm9tLiAgVGhpcyBhbGxvd3MgeW91IHRvCisgKiBjb252ZXJ0IGEgdXNlci1zdXBwbGllZCBwYXRobmFtZSAodHlwaWNhbGx5IHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5KQorICogdG8gYSBwYXRobmFtZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSB3b3JrIHRyZWUuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBmcm9tIGBjbWRfZm9vKClgIGJlY29tZXMgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZQorICogY29tbWFuZC4KKyAqLworCisjZGVmaW5lIERFRkFVTFRfTUVSR0VfTE9HX0xFTiAyMAorCitleHRlcm4gY29uc3QgY2hhciBnaXRfdXNhZ2Vfc3RyaW5nW107CitleHRlcm4gY29uc3QgY2hhciBnaXRfbW9yZV9pbmZvX3N0cmluZ1tdOworCisjZGVmaW5lIFBSVU5FX1BBQ0tFRF9EUllfUlVOIDAxCisjZGVmaW5lIFBSVU5FX1BBQ0tFRF9WRVJCT1NFIDAyCisKK3ZvaWQgcHJ1bmVfcGFja2VkX29iamVjdHMoaW50KTsKKworc3RydWN0IGZtdF9tZXJnZV9tc2dfb3B0cyB7CisJdW5zaWduZWQgYWRkX3RpdGxlOjEsCisJCWNyZWRpdF9wZW9wbGU6MTsKKwlpbnQgc2hvcnRsb2dfbGVuOworfTsKKworaW50IGZtdF9tZXJnZV9tc2coc3RydWN0IHN0cmJ1ZiAqaW4sIHN0cnVjdCBzdHJidWYgKm91dCwKKwkJICBzdHJ1Y3QgZm10X21lcmdlX21zZ19vcHRzICopOworCisvKioKKyAqIElmIGEgYnVpbHQtaW4gaGFzIERFTEFZX1BBR0VSX0NPTkZJRyBzZXQsIHRoZSBidWlsdC1pbiBzaG91bGQgY2FsbCB0aGlzIGVhcmx5CisgKiB3aGVuIGl0IHdpc2hlcyB0byByZXNwZWN0IHRoZSBgcGFnZXIuZm9vYC1jb25maWcuIFRoZSBgY21kYCBpcyB0aGUgbmFtZSBvZgorICogdGhlIGJ1aWx0LWluLCBlLmcuLCAiZm9vIi4gSWYgYSBwYWdpbmctY2hvaWNlIGhhcyBhbHJlYWR5IGJlZW4gc2V0dXAsIHRoaXMKKyAqIGRvZXMgbm90aGluZy4gVGhlIGRlZmF1bHQgaW4gYGRlZmAgc2hvdWxkIGJlIDAgZm9yICJwYWdlciBvZmYiLCAxIGZvciAicGFnZXIKKyAqIG9uIiBvciAtMSBmb3IgInB1bnQiLgorICoKKyAqIFlvdSBzaG91bGQgbW9zdCBsaWtlbHkgdXNlIGEgZGVmYXVsdCBvZiAwIG9yIDEuICJQdW50IiAoLTEpIGNvdWxkIGJlIHVzZWZ1bAorICogdG8gYmUgYWJsZSB0byBmYWxsIGJhY2sgdG8gc29tZSBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkgbmFtZS4KKyAqLwordm9pZCBzZXR1cF9hdXRvX3BhZ2VyKGNvbnN0IGNoYXIgKmNtZCwgaW50IGRlZik7CisKK2ludCBpc19idWlsdGluKGNvbnN0IGNoYXIgKnMpOworCitpbnQgY21kX2FkZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2FtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9hcHBseShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9iaXNlY3RfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2JsYW1lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfYnJhbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfYnVuZGxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY2F0X2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jaGVja291dChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2NoZWNrb3V0X2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY2hlY2tfYXR0cihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2NoZWNrX2lnbm9yZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2NoZWNrX21haWxtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jaGVja19yZWZfZm9ybWF0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY2hlcnJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY2hlcnJ5X3BpY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jbG9uZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2NsZWFuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY29sdW1uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY29tbWl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY29tbWl0X2dyYXBoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY29tbWl0X3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9jb3VudF9vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfY3JlZGVudGlhbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2Rlc2NyaWJlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZGlmZl9maWxlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2RpZmZfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZGlmZl90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZGlmZnRvb2woaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9lbnZfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2Zhc3RfZXhwb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZmV0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9mZXRjaF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZm10X21lcmdlX21zZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2Zvcl9lYWNoX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2Zvcm1hdF9wYXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2ZzY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9nYyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2dldF90YXJfY29tbWl0X2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfZ3JlcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2hhc2hfb2JqZWN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2luZGV4X3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9pbml0X2RiKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfaW50ZXJwcmV0X3RyYWlsZXJzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbG9nX3JlZmxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2xzX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbHNfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX2xzX3JlbW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX21haWxpbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbWFpbHNwbGl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbWVyZ2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9tZXJnZV9iYXNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbWVyZ2VfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9tZXJnZV9vdXJzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbWVyZ2VfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX21lcmdlX3JlY3Vyc2l2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX21lcmdlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9ta3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX21rdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX211bHRpX3BhY2tfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9tdihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX25hbWVfcmV2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfbm90ZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9wYWNrX29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9wYWNrX3JlZHVuZGFudChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3BhdGNoX2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcHJ1bmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9wcnVuZV9wYWNrZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9wdWxsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcHVzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3JhbmdlX2RpZmYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZWFkX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZWJhc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9yZWJhc2VfX2ludGVyYWN0aXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVjZWl2ZV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVmbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVtb3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVtb3RlX2V4dChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3JlbW90ZV9mZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3JlcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3JlcmVyZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Jlc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVzdG9yZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Jldl9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmV2X3BhcnNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmV2ZXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcm0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9zZW5kX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9zaG9ydGxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Nob3coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9zaG93X2JyYW5jaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Nob3dfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9zcGFyc2VfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9zdGF0dXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3N0cmlwc3BhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF9zdWJtb2R1bGVfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3N3aXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3N5bWJvbGljX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Rhcl90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdW5wYWNrX2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF91bnBhY2tfb2JqZWN0cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3VwZGF0ZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3VwZGF0ZV9yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF91cGRhdGVfc2VydmVyX2luZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF91cGxvYWRfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3VwbG9hZF9hcmNoaXZlX3dyaXRlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3VwbG9hZF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdmFyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfdmVyaWZ5X2NvbW1pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3ZlcmlmeV90YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfd2hhdGNoYW5nZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF93b3JrdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3dyaXRlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGNtZF92ZXJpZnlfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgY21kX3Nob3dfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcGFja19yZWZzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2ludCBjbWRfcmVwbGFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hZGQuYyBiL2J1aWx0aW4vYWRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhMDg4MQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYWRkLmMKQEAgLTAsMCArMSw2MTcgQEAKKy8qCisgKiAiZ2l0IGFkZCIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExpbnVzIFRvcnZhbGRzCisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1bGstY2hlY2tpbi5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJhZGQtaW50ZXJhY3RpdmUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2FkZF91c2FnZVtdID0geworCU5fKCJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIpLAorCU5VTEwKK307CitzdGF0aWMgaW50IHBhdGNoX2ludGVyYWN0aXZlLCBhZGRfaW50ZXJhY3RpdmUsIGVkaXRfaW50ZXJhY3RpdmU7CitzdGF0aWMgaW50IHRha2Vfd29ya3RyZWVfY2hhbmdlczsKK3N0YXRpYyBpbnQgYWRkX3Jlbm9ybWFsaXplOworc3RhdGljIGludCBwYXRoc3BlY19maWxlX251bDsKK3N0YXRpYyBjb25zdCBjaGFyICpwYXRoc3BlY19mcm9tX2ZpbGU7CitzdGF0aWMgaW50IGxlZ2FjeV9zdGFzaF9wOyAvKiBzdXBwb3J0IGZvciB0aGUgc2NyaXB0ZWQgYGdpdCBzdGFzaGAgKi8KKworc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhIHsKKwlpbnQgZmxhZ3M7CisJaW50IGFkZF9lcnJvcnM7Cit9OworCitzdGF0aWMgdm9pZCBjaG1vZF9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBjaGFyIGZsaXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKworCQlpZiAocGF0aHNwZWMgJiYgIWNlX3BhdGhfbWF0Y2goJnRoZV9pbmRleCwgY2UsIHBhdGhzcGVjLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjaG1vZF9jYWNoZV9lbnRyeShjZSwgZmxpcCkgPCAwKQorCQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3QgY2htb2QgJWN4ICclcydcbiIsIGZsaXAsIGNlLT5uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZml4X3VubWVyZ2VkX3N0YXR1cyhzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKKwkJCSAgICAgICBzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgKmRhdGEpCit7CisJaWYgKHAtPnN0YXR1cyAhPSBESUZGX1NUQVRVU19VTk1FUkdFRCkKKwkJcmV0dXJuIHAtPnN0YXR1czsKKwlpZiAoIShkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9JR05PUkVfUkVNT1ZBTCkgJiYgIXAtPnR3by0+bW9kZSkKKwkJLyoKKwkJICogVGhpcyBpcyBub3QgYW4gZXhwbGljaXQgYWRkIHJlcXVlc3QsIGFuZCB0aGUKKwkJICogcGF0aCBpcyBtaXNzaW5nIGZyb20gdGhlIHdvcmtpbmcgdHJlZSAoZGVsZXRlZCkKKwkJICovCisJCXJldHVybiBESUZGX1NUQVRVU19ERUxFVEVEOworCWVsc2UKKwkJLyoKKwkJICogRWl0aGVyIGFuIGV4cGxpY2l0IGFkZCByZXF1ZXN0LCBvciBwYXRoIGV4aXN0cworCQkgKiBpbiB0aGUgd29ya2luZyB0cmVlLiAgQW4gYXR0ZW1wdCB0byBleHBsaWNpdGx5CisJCSAqIGFkZCBhIHBhdGggdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd29ya2luZyB0cmVlCisJCSAqIHdpbGwgYmUgY2F1Z2h0IGFzIGFuIGVycm9yIGJ5IHRoZSBjYWxsZXIgaW1tZWRpYXRlbHkuCisJCSAqLworCQlyZXR1cm4gRElGRl9TVEFUVVNfTU9ESUZJRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jYWxsYmFjayhzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCB2b2lkICpjYmRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhICpkYXRhID0gY2JkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IHAtPm9uZS0+cGF0aDsKKwkJc3dpdGNoIChmaXhfdW5tZXJnZWRfc3RhdHVzKHAsIGRhdGEpKSB7CisJCWRlZmF1bHQ6CisJCQlkaWUoXygidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIpLCBwLT5zdGF0dXMpOworCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJCWlmIChhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCBwYXRoLAlkYXRhLT5mbGFncykpIHsKKwkJCQlpZiAoIShkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9JR05PUkVfRVJST1JTKSkKKwkJCQkJZGllKF8oInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIpKTsKKwkJCQlkYXRhLT5hZGRfZXJyb3JzKys7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQkJaWYgKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMKQorCQkJCWJyZWFrOworCQkJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBBRERfQ0FDSEVfUFJFVEVORCkpCisJCQkJcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleCgmdGhlX2luZGV4LCBwYXRoKTsKKwkJCWlmIChkYXRhLT5mbGFncyAmIChBRERfQ0FDSEVfUFJFVEVORHxBRERfQ0FDSEVfVkVSQk9TRSkpCisJCQkJcHJpbnRmKF8oInJlbW92ZSAnJXMnXG4iKSwgcGF0aCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworaW50IGFkZF9maWxlc190b19jYWNoZShjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhIGRhdGE7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLmZsYWdzID0gZmxhZ3M7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBwcmVmaXgpOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBOVUxMKTsKKwlpZiAocGF0aHNwZWMpCisJCWNvcHlfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhLCBwYXRoc3BlYyk7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX0NBTExCQUNLOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHVwZGF0ZV9jYWxsYmFjazsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZkYXRhOworCXJldi5kaWZmb3B0LmZsYWdzLm92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWcgPSAxOworCXJldi5tYXhfY291bnQgPSAwOyAvKiBkbyBub3QgY29tcGFyZSB1bm1lcmdlZCBwYXRocyB3aXRoIHN0YWdlICMyICovCisJcnVuX2RpZmZfZmlsZXMoJnJldiwgRElGRl9SQUNZX0lTX01PRElGSUVEKTsKKwljbGVhcl9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEpOworCXJldHVybiAhIWRhdGEuYWRkX2Vycm9yczsKK30KKworc3RhdGljIGludCByZW5vcm1hbGl6ZV90cmFja2VkX2ZpbGVzKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGludCBmbGFncykKK3sKKwlpbnQgaSwgcmV0dmFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCisJCWlmIChjZV9zdGFnZShjZSkpCisJCQljb250aW51ZTsgLyogZG8gbm90IHRvdWNoIHVubWVyZ2VkIHBhdGhzICovCisJCWlmICghU19JU1JFRyhjZS0+Y2VfbW9kZSkgJiYgIVNfSVNMTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7IC8qIGRvIG5vdCB0b3VjaCBub24gYmxvYnMgKi8KKwkJaWYgKHBhdGhzcGVjICYmICFjZV9wYXRoX21hdGNoKCZ0aGVfaW5kZXgsIGNlLCBwYXRoc3BlYywgTlVMTCkpCisJCQljb250aW51ZTsKKwkJcmV0dmFsIHw9IGFkZF9maWxlX3RvX2NhY2hlKGNlLT5uYW1lLCBmbGFncyB8IEFERF9DQUNIRV9SRU5PUk1BTElaRSk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNoYXIgKnBydW5lX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBpbnQgcHJlZml4KQoreworCWNoYXIgKnNlZW47CisJaW50IGk7CisJc3RydWN0IGRpcl9lbnRyeSAqKnNyYywgKipkc3Q7CisKKwlzZWVuID0geGNhbGxvYyhwYXRoc3BlYy0+bnIsIDEpOworCisJc3JjID0gZHN0ID0gZGlyLT5lbnRyaWVzOworCWkgPSBkaXItPm5yOworCXdoaWxlICgtLWkgPj0gMCkgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnRyeSA9ICpzcmMrKzsKKwkJaWYgKGRpcl9wYXRoX21hdGNoKCZ0aGVfaW5kZXgsIGVudHJ5LCBwYXRoc3BlYywgcHJlZml4LCBzZWVuKSkKKwkJCSpkc3QrKyA9IGVudHJ5OworCX0KKwlkaXItPm5yID0gZHN0IC0gZGlyLT5lbnRyaWVzOworCWFkZF9wYXRoc3BlY19tYXRjaGVzX2FnYWluc3RfaW5kZXgocGF0aHNwZWMsICZ0aGVfaW5kZXgsIHNlZW4pOworCXJldHVybiBzZWVuOworfQorCitzdGF0aWMgdm9pZCByZWZyZXNoKGludCB2ZXJib3NlLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWNoYXIgKnNlZW47CisJaW50IGk7CisKKwlzZWVuID0geGNhbGxvYyhwYXRoc3BlYy0+bnIsIDEpOworCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgdmVyYm9zZSA/IFJFRlJFU0hfSU5fUE9SQ0VMQUlOIDogUkVGUkVTSF9RVUlFVCwKKwkJICAgICAgcGF0aHNwZWMsIHNlZW4sIF8oIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IikpOworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy0+bnI7IGkrKykgeworCQlpZiAoIXNlZW5baV0pCisJCQlkaWUoXygicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIpLAorCQkJICAgIHBhdGhzcGVjLT5pdGVtc1tpXS5tYXRjaCk7CisJfQorCWZyZWUoc2Vlbik7Cit9CisKK2ludCBydW5fYWRkX2ludGVyYWN0aXZlKGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25zdCBjaGFyICpwYXRjaF9tb2RlLAorCQkJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlpbnQgc3RhdHVzLCBpOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IHVzZV9idWlsdGluX2FkZF9pID0KKwkJZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9BRERfSV9VU0VfQlVJTFRJTiIsIC0xKTsKKworCWlmICh1c2VfYnVpbHRpbl9hZGRfaSA8IDApCisJCWdpdF9jb25maWdfZ2V0X2Jvb2woImFkZC5pbnRlcmFjdGl2ZS51c2VidWlsdGluIiwKKwkJCQkgICAgJnVzZV9idWlsdGluX2FkZF9pKTsKKworCWlmICh1c2VfYnVpbHRpbl9hZGRfaSA9PSAxKSB7CisJCWVudW0gYWRkX3BfbW9kZSBtb2RlOworCisJCWlmICghcGF0Y2hfbW9kZSkKKwkJCXJldHVybiAhIXJ1bl9hZGRfaSh0aGVfcmVwb3NpdG9yeSwgcGF0aHNwZWMpOworCisJCWlmICghc3RyY21wKHBhdGNoX21vZGUsICItLXBhdGNoIikpCisJCQltb2RlID0gQUREX1BfQUREOworCQllbHNlIGlmICghc3RyY21wKHBhdGNoX21vZGUsICItLXBhdGNoPXN0YXNoIikpCisJCQltb2RlID0gQUREX1BfU1RBU0g7CisJCWVsc2UgaWYgKCFzdHJjbXAocGF0Y2hfbW9kZSwgIi0tcGF0Y2g9cmVzZXQiKSkKKwkJCW1vZGUgPSBBRERfUF9SRVNFVDsKKwkJZWxzZSBpZiAoIXN0cmNtcChwYXRjaF9tb2RlLCAiLS1wYXRjaD1jaGVja291dCIpKQorCQkJbW9kZSA9IEFERF9QX0NIRUNLT1VUOworCQllbHNlIGlmICghc3RyY21wKHBhdGNoX21vZGUsICItLXBhdGNoPXdvcmt0cmVlIikpCisJCQltb2RlID0gQUREX1BfV09SS1RSRUU7CisJCWVsc2UKKwkJCWRpZSgiJyVzJyBub3Qgc3VwcG9ydGVkIiwgcGF0Y2hfbW9kZSk7CisKKwkJcmV0dXJuICEhcnVuX2FkZF9wKHRoZV9yZXBvc2l0b3J5LCBtb2RlLCByZXZpc2lvbiwgcGF0aHNwZWMpOworCX0KKworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgImFkZC0taW50ZXJhY3RpdmUiKTsKKwlpZiAocGF0Y2hfbW9kZSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBwYXRjaF9tb2RlKTsKKwlpZiAocmV2aXNpb24pCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgcmV2aXNpb24pOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgIi0tIik7CisJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLT5ucjsgaSsrKQorCQkvKiBwYXNzIG9yaWdpbmFsIHBhdGhzcGVjLCB0byBiZSByZS1wYXJzZWQgKi8KKwkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBwYXRoc3BlYy0+aXRlbXNbaV0ub3JpZ2luYWwpOworCisJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndi5hcmd2LCBSVU5fR0lUX0NNRCk7CisJYXJndl9hcnJheV9jbGVhcigmYXJndik7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGludGVyYWN0aXZlX2FkZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHBhdGNoKQoreworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwKKwkJICAgICAgIFBBVEhTUEVDX1NZTUxJTktfTEVBRElOR19QQVRIIHwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZJWF9PUklHSU4sCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJcmV0dXJuIHJ1bl9hZGRfaW50ZXJhY3RpdmUoTlVMTCwKKwkJCQkgICBwYXRjaCA/ICItLXBhdGNoIiA6IE5VTEwsCisJCQkJICAgJnBhdGhzcGVjKTsKK30KKworc3RhdGljIGludCBlZGl0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgKmZpbGUgPSBnaXRfcGF0aGR1cCgiQUREX0VESVQucGF0Y2giKTsKKwljb25zdCBjaGFyICphcHBseV9hcmd2W10gPSB7ICJhcHBseSIsICItLXJlY291bnQiLCAiLS1jYWNoZWQiLAorCQlOVUxMLCBOVUxMIH07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlpbnQgb3V0OworCXN0cnVjdCBzdGF0IHN0OworCisJYXBwbHlfYXJndlszXSA9IGZpbGU7CisKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIpKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisJcmV2LmRpZmZvcHQuY29udGV4dCA9IDc7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKKwlyZXYuZGlmZm9wdC51c2VfY29sb3IgPSAwOworCXJldi5kaWZmb3B0LmZsYWdzLmlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzID0gMTsKKwlvdXQgPSBvcGVuKGZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMsIDA2NjYpOworCWlmIChvdXQgPCAwKQorCQlkaWUoXygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iKSwgZmlsZSk7CisJcmV2LmRpZmZvcHQuZmlsZSA9IHhmZG9wZW4ob3V0LCAidyIpOworCXJldi5kaWZmb3B0LmNsb3NlX2ZpbGUgPSAxOworCWlmIChydW5fZGlmZl9maWxlcygmcmV2LCAwKSkKKwkJZGllKF8oIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIpKTsKKworCWlmIChsYXVuY2hfZWRpdG9yKGZpbGUsIE5VTEwsIE5VTEwpKQorCQlkaWUoXygiZWRpdGluZyBwYXRjaCBmYWlsZWQiKSk7CisKKwlpZiAoc3RhdChmaWxlLCAmc3QpKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHN0YXQgJyVzJyIpLCBmaWxlKTsKKwlpZiAoIXN0LnN0X3NpemUpCisJCWRpZShfKCJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iKSk7CisKKwljaGlsZC5naXRfY21kID0gMTsKKwljaGlsZC5hcmd2ID0gYXBwbHlfYXJndjsKKwlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkKKwkJZGllKF8oIkNvdWxkIG5vdCBhcHBseSAnJXMnIiksIGZpbGUpOworCisJdW5saW5rKGZpbGUpOworCWZyZWUoZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGlnbm9yZV9lcnJvcltdID0KK05fKCJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iKTsKKworc3RhdGljIGludCB2ZXJib3NlLCBzaG93X29ubHksIGlnbm9yZWRfdG9vLCByZWZyZXNoX29ubHk7CitzdGF0aWMgaW50IGlnbm9yZV9hZGRfZXJyb3JzLCBpbnRlbnRfdG9fYWRkLCBpZ25vcmVfbWlzc2luZzsKK3N0YXRpYyBpbnQgd2Fybl9vbl9lbWJlZGRlZF9yZXBvID0gMTsKKworI2RlZmluZSBBRERSRU1PVkVfREVGQVVMVCAxCitzdGF0aWMgaW50IGFkZHJlbW92ZSA9IEFERFJFTU9WRV9ERUZBVUxUOworc3RhdGljIGludCBhZGRyZW1vdmVfZXhwbGljaXQgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KKworc3RhdGljIGNoYXIgKmNobW9kX2FyZzsKKworc3RhdGljIGludCBpZ25vcmVfcmVtb3ZhbF9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCS8qIGlmIHdlIGFyZSB0b2xkIHRvIGlnbm9yZSwgd2UgYXJlIG5vdCBhZGRpbmcgcmVtb3ZhbHMgKi8KKwkqKGludCAqKW9wdC0+dmFsdWUgPSAhdW5zZXQgPyAwIDogMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9hZGRfb3B0aW9uc1tdID0geworCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZHJ5IHJ1biIpKSwKKwlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlIikpLAorCU9QVF9HUk9VUCgiIiksCisJT1BUX0JPT0woJ2knLCAiaW50ZXJhY3RpdmUiLCAmYWRkX2ludGVyYWN0aXZlLCBOXygiaW50ZXJhY3RpdmUgcGlja2luZyIpKSwKKwlPUFRfQk9PTCgncCcsICJwYXRjaCIsICZwYXRjaF9pbnRlcmFjdGl2ZSwgTl8oInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IikpLAorCU9QVF9CT09MKCdlJywgImVkaXQiLCAmZWRpdF9pbnRlcmFjdGl2ZSwgTl8oImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIpKSwKKwlPUFRfX0ZPUkNFKCZpZ25vcmVkX3RvbywgTl8oImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIpLCAwKSwKKwlPUFRfQk9PTCgndScsICJ1cGRhdGUiLCAmdGFrZV93b3JrdHJlZV9jaGFuZ2VzLCBOXygidXBkYXRlIHRyYWNrZWQgZmlsZXMiKSksCisJT1BUX0JPT0woMCwgInJlbm9ybWFsaXplIiwgJmFkZF9yZW5vcm1hbGl6ZSwgTl8oInJlbm9ybWFsaXplIEVPTCBvZiB0cmFja2VkIGZpbGVzIChpbXBsaWVzIC11KSIpKSwKKwlPUFRfQk9PTCgnTicsICJpbnRlbnQtdG8tYWRkIiwgJmludGVudF90b19hZGQsIE5fKCJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiKSksCisJT1BUX0JPT0woJ0EnLCAiYWxsIiwgJmFkZHJlbW92ZV9leHBsaWNpdCwgTl8oImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIpKSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImlnbm9yZS1yZW1vdmFsIiwgJmFkZHJlbW92ZV9leHBsaWNpdCwKKwkgIE5VTEwgLyogdGFrZXMgbm8gYXJndW1lbnRzICovLAorCSAgTl8oImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIiksCisJICBQQVJTRV9PUFRfTk9BUkcsIGlnbm9yZV9yZW1vdmFsX2NiIH0sCisJT1BUX0JPT0woIDAgLCAicmVmcmVzaCIsICZyZWZyZXNoX29ubHksIE5fKCJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiKSksCisJT1BUX0JPT0woIDAgLCAiaWdub3JlLWVycm9ycyIsICZpZ25vcmVfYWRkX2Vycm9ycywgTl8oImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiKSksCisJT1BUX0JPT0woIDAgLCAiaWdub3JlLW1pc3NpbmciLCAmaWdub3JlX21pc3NpbmcsIE5fKCJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iKSksCisJT1BUX1NUUklORygwLCAiY2htb2QiLCAmY2htb2RfYXJnLCAiKCt8LSl4IiwKKwkJICAgTl8oIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIikpLAorCU9QVF9ISURERU5fQk9PTCgwLCAid2Fybi1lbWJlZGRlZC1yZXBvIiwgJndhcm5fb25fZW1iZWRkZWRfcmVwbywKKwkJCU5fKCJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiKSksCisJT1BUX0hJRERFTl9CT09MKDAsICJsZWdhY3ktc3Rhc2gtcCIsICZsZWdhY3lfc3Rhc2hfcCwKKwkJCU5fKCJiYWNrZW5kIGZvciBgZ2l0IHN0YXNoIC1wYCIpKSwKKwlPUFRfUEFUSFNQRUNfRlJPTV9GSUxFKCZwYXRoc3BlY19mcm9tX2ZpbGUpLAorCU9QVF9QQVRIU1BFQ19GSUxFX05VTCgmcGF0aHNwZWNfZmlsZV9udWwpLAorCU9QVF9FTkQoKSwKK307CisKK3N0YXRpYyBpbnQgYWRkX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJhZGQuaWdub3JlZXJyb3JzIikgfHwKKwkgICAgIXN0cmNtcCh2YXIsICJhZGQuaWdub3JlLWVycm9ycyIpKSB7CisJCWlnbm9yZV9hZGRfZXJyb3JzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZW1iZWRkZWRfYWR2aWNlW10gPSBOXygKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiCWdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiCWdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX2VtYmVkZGVkX3JlcG8oY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCWlmICghd2Fybl9vbl9lbWJlZGRlZF9yZXBvKQorCQlyZXR1cm47CisJaWYgKCFlbmRzX3dpdGgocGF0aCwgIi8iKSkKKwkJcmV0dXJuOworCisJLyogRHJvcCB0cmFpbGluZyBzbGFzaCBmb3IgYWVzdGhldGljcyAqLworCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsIHBhdGgpOworCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJm5hbWUsICIvIik7CisKKwl3YXJuaW5nKF8oImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiKSwgbmFtZS5idWYpOworCWlmIChhZHZpY2VfYWRkX2VtYmVkZGVkX3JlcG8pIHsKKwkJYWR2aXNlKGVtYmVkZGVkX2FkdmljZSwgbmFtZS5idWYsIG5hbWUuYnVmKTsKKwkJLyogdGhlcmUgbWF5IGJlIG11bHRpcGxlIGVudHJpZXM7IGFkdmlzZSBvbmx5IG9uY2UgKi8KKwkJYWR2aWNlX2FkZF9lbWJlZGRlZF9yZXBvID0gMDsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2ZpbGVzKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGludCBmbGFncykKK3sKKwlpbnQgaSwgZXhpdF9zdGF0dXMgPSAwOworCisJaWYgKGRpci0+aWdub3JlZF9ucikgeworCQlmcHJpbnRmKHN0ZGVyciwgXyhpZ25vcmVfZXJyb3IpKTsKKwkJZm9yIChpID0gMDsgaSA8IGRpci0+aWdub3JlZF9ucjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZGlyLT5pZ25vcmVkW2ldLT5uYW1lKTsKKwkJaWYgKGFkdmljZV9hZGRfaWdub3JlZF9maWxlKQorCQkJYWR2aXNlKF8oIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCisJCQkJIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisJCQkJIlwiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2VcIiIpKTsKKwkJZXhpdF9zdGF0dXMgPSAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKKwkJaWYgKGFkZF9maWxlX3RvX2luZGV4KCZ0aGVfaW5kZXgsIGRpci0+ZW50cmllc1tpXS0+bmFtZSwgZmxhZ3MpKSB7CisJCQlpZiAoIWlnbm9yZV9hZGRfZXJyb3JzKQorCQkJCWRpZShfKCJhZGRpbmcgZmlsZXMgZmFpbGVkIikpOworCQkJZXhpdF9zdGF0dXMgPSAxOworCQl9IGVsc2UgeworCQkJY2hlY2tfZW1iZWRkZWRfcmVwbyhkaXItPmVudHJpZXNbaV0tPm5hbWUpOworCQl9CisJfQorCXJldHVybiBleGl0X3N0YXR1czsKK30KKworaW50IGNtZF9hZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGV4aXRfc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCWludCBmbGFnczsKKwlpbnQgYWRkX25ld19maWxlczsKKwlpbnQgcmVxdWlyZV9wYXRoc3BlYzsKKwljaGFyICpzZWVuID0gTlVMTDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKworCWdpdF9jb25maWcoYWRkX2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fYWRkX29wdGlvbnMsCisJCQkgIGJ1aWx0aW5fYWRkX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJaWYgKHBhdGNoX2ludGVyYWN0aXZlKQorCQlhZGRfaW50ZXJhY3RpdmUgPSAxOworCWlmIChhZGRfaW50ZXJhY3RpdmUpIHsKKwkJaWYgKHBhdGhzcGVjX2Zyb21fZmlsZSkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giKSk7CisJCWV4aXQoaW50ZXJhY3RpdmVfYWRkKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4LCBwYXRjaF9pbnRlcmFjdGl2ZSkpOworCX0KKwlpZiAobGVnYWN5X3N0YXNoX3ApIHsKKwkJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCisJCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJCVBBVEhTUEVDX1BSRUZFUl9GVUxMIHwKKwkJCVBBVEhTUEVDX1NZTUxJTktfTEVBRElOR19QQVRIIHwKKwkJCVBBVEhTUEVDX1BSRUZJWF9PUklHSU4sCisJCQlwcmVmaXgsIGFyZ3YpOworCisJCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKE5VTEwsICItLXBhdGNoPXN0YXNoIiwgJnBhdGhzcGVjKTsKKwl9CisKKwlpZiAoZWRpdF9pbnRlcmFjdGl2ZSkgeworCQlpZiAocGF0aHNwZWNfZnJvbV9maWxlKQorCQkJZGllKF8oIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIpKTsKKwkJcmV0dXJuKGVkaXRfcGF0Y2goYXJnYywgYXJndiwgcHJlZml4KSk7CisJfQorCWFyZ2MtLTsKKwlhcmd2Kys7CisKKwlpZiAoMCA8PSBhZGRyZW1vdmVfZXhwbGljaXQpCisJCWFkZHJlbW92ZSA9IGFkZHJlbW92ZV9leHBsaWNpdDsKKwllbHNlIGlmICh0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgQUREUkVNT1ZFX0RFRkFVTFQpCisJCWFkZHJlbW92ZSA9IDA7IC8qICItdSIgd2FzIGdpdmVuIGJ1dCBub3QgIi1BIiAqLworCisJaWYgKGFkZHJlbW92ZSAmJiB0YWtlX3dvcmt0cmVlX2NoYW5nZXMpCisJCWRpZShfKCItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIpKTsKKworCWlmICghc2hvd19vbmx5ICYmIGlnbm9yZV9taXNzaW5nKQorCQlkaWUoXygiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIpKTsKKworCWlmIChjaG1vZF9hcmcgJiYgKChjaG1vZF9hcmdbMF0gIT0gJy0nICYmIGNobW9kX2FyZ1swXSAhPSAnKycpIHx8CisJCQkgIGNobW9kX2FyZ1sxXSAhPSAneCcgfHwgY2htb2RfYXJnWzJdKSkKKwkJZGllKF8oIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIpLCBjaG1vZF9hcmcpOworCisJYWRkX25ld19maWxlcyA9ICF0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgIXJlZnJlc2hfb25seSAmJiAhYWRkX3Jlbm9ybWFsaXplOworCXJlcXVpcmVfcGF0aHNwZWMgPSAhKHRha2Vfd29ya3RyZWVfY2hhbmdlcyB8fCAoMCA8IGFkZHJlbW92ZV9leHBsaWNpdCkpOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCisJLyoKKwkgKiBDaGVjayB0aGUgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiIGJsb2NrCisJICogYmVsb3cgYmVmb3JlIGVuYWJsaW5nIG5ldyBtYWdpYy4KKwkgKi8KKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIFBBVEhTUEVDX0FUVFIsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8CisJCSAgICAgICBQQVRIU1BFQ19TWU1MSU5LX0xFQURJTkdfUEFUSCwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlpZiAocGF0aHNwZWNfZnJvbV9maWxlKSB7CisJCWlmIChwYXRoc3BlYy5ucikKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcGF0aHNwZWMsIFBBVEhTUEVDX0FUVFIsCisJCQkJICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwKKwkJCQkgICAgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEgsCisJCQkJICAgIHByZWZpeCwgcGF0aHNwZWNfZnJvbV9maWxlLCBwYXRoc3BlY19maWxlX251bCk7CisJfSBlbHNlIGlmIChwYXRoc3BlY19maWxlX251bCkgeworCQlkaWUoXygiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIpKTsKKwl9CisKKwlpZiAocmVxdWlyZV9wYXRoc3BlYyAmJiBwYXRoc3BlYy5uciA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIpKTsKKwkJaWYgKGFkdmljZV9hZGRfZW1wdHlfcGF0aHNwZWMpCisJCQlhZHZpc2UoIF8oIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorCQkJCSJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorCQkJCSJcImdpdCBjb25maWcgYWR2aWNlLmFkZEVtcHR5UGF0aHNwZWMgZmFsc2VcIiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCF0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgYWRkcmVtb3ZlX2V4cGxpY2l0IDwgMCAmJiBwYXRoc3BlYy5ucikKKwkJLyogVHVybiAiZ2l0IGFkZCBwYXRoc3BlYy4uLiIgdG8gImdpdCBhZGQgLUEgcGF0aHNwZWMuLi4iICovCisJCWFkZHJlbW92ZSA9IDE7CisKKwlmbGFncyA9ICgodmVyYm9zZSA/IEFERF9DQUNIRV9WRVJCT1NFIDogMCkgfAorCQkgKHNob3dfb25seSA/IEFERF9DQUNIRV9QUkVURU5EIDogMCkgfAorCQkgKGludGVudF90b19hZGQgPyBBRERfQ0FDSEVfSU5URU5UIDogMCkgfAorCQkgKGlnbm9yZV9hZGRfZXJyb3JzID8gQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMgOiAwKSB8CisJCSAoIShhZGRyZW1vdmUgfHwgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQorCQkgID8gQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMIDogMCkpOworCisJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmcGF0aHNwZWMpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWRpZV9pbl91bnBvcHVsYXRlZF9zdWJtb2R1bGUoJnRoZV9pbmRleCwgcHJlZml4KTsKKwlkaWVfcGF0aF9pbnNpZGVfc3VibW9kdWxlKCZ0aGVfaW5kZXgsICZwYXRoc3BlYyk7CisKKwlpZiAoYWRkX25ld19maWxlcykgeworCQlpbnQgYmFzZWxlbjsKKworCQkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgZ2l0IHBvcmNlbGFpbiBleGNsdWRlcyAqLworCQltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCQlpZiAoIWlnbm9yZWRfdG9vKSB7CisJCQlkaXIuZmxhZ3MgfD0gRElSX0NPTExFQ1RfSUdOT1JFRDsKKwkJCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCQl9CisKKwkJLyogVGhpcyBwaWNrcyB1cCB0aGUgcGF0aHMgdGhhdCBhcmUgbm90IHRyYWNrZWQgKi8KKwkJYmFzZWxlbiA9IGZpbGxfZGlyZWN0b3J5KCZkaXIsICZ0aGVfaW5kZXgsICZwYXRoc3BlYyk7CisJCWlmIChwYXRoc3BlYy5ucikKKwkJCXNlZW4gPSBwcnVuZV9kaXJlY3RvcnkoJmRpciwgJnBhdGhzcGVjLCBiYXNlbGVuKTsKKwl9CisKKwlpZiAocmVmcmVzaF9vbmx5KSB7CisJCXJlZnJlc2godmVyYm9zZSwgJnBhdGhzcGVjKTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJaWYgKHBhdGhzcGVjLm5yKSB7CisJCWludCBpOworCisJCWlmICghc2VlbikKKwkJCXNlZW4gPSBmaW5kX3BhdGhzcGVjc19tYXRjaGluZ19hZ2FpbnN0X2luZGV4KCZwYXRoc3BlYywgJnRoZV9pbmRleCk7CisKKwkJLyoKKwkJICogZmlsZV9leGlzdHMoKSBhc3N1bWVzIGV4YWN0IG1hdGNoCisJCSAqLworCQlHVUFSRF9QQVRIU1BFQygmcGF0aHNwZWMsCisJCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCQkgICAgICAgUEFUSFNQRUNfTElURVJBTCB8CisJCQkgICAgICAgUEFUSFNQRUNfR0xPQiB8CisJCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkJICAgICAgIFBBVEhTUEVDX0VYQ0xVREUpOworCisJCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpwYXRoID0gcGF0aHNwZWMuaXRlbXNbaV0ubWF0Y2g7CisJCQlpZiAocGF0aHNwZWMuaXRlbXNbaV0ubWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFzZWVuW2ldICYmIHBhdGhbMF0gJiYKKwkJCSAgICAoKHBhdGhzcGVjLml0ZW1zW2ldLm1hZ2ljICYKKwkJCSAgICAgIChQQVRIU1BFQ19HTE9CIHwgUEFUSFNQRUNfSUNBU0UpKSB8fAorCQkJICAgICAhZmlsZV9leGlzdHMocGF0aCkpKSB7CisJCQkJaWYgKGlnbm9yZV9taXNzaW5nKSB7CisJCQkJCWludCBkdHlwZSA9IERUX1VOS05PV047CisJCQkJCWlmIChpc19leGNsdWRlZCgmZGlyLCAmdGhlX2luZGV4LCBwYXRoLCAmZHR5cGUpKQorCQkJCQkJZGlyX2FkZF9pZ25vcmVkKCZkaXIsICZ0aGVfaW5kZXgsCisJCQkJCQkJCXBhdGgsIHBhdGhzcGVjLml0ZW1zW2ldLmxlbik7CisJCQkJfSBlbHNlCisJCQkJCWRpZShfKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiksCisJCQkJCSAgICBwYXRoc3BlYy5pdGVtc1tpXS5vcmlnaW5hbCk7CisJCQl9CisJCX0KKwkJZnJlZShzZWVuKTsKKwl9CisKKwlwbHVnX2J1bGtfY2hlY2tpbigpOworCisJaWYgKGFkZF9yZW5vcm1hbGl6ZSkKKwkJZXhpdF9zdGF0dXMgfD0gcmVub3JtYWxpemVfdHJhY2tlZF9maWxlcygmcGF0aHNwZWMsIGZsYWdzKTsKKwllbHNlCisJCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlc190b19jYWNoZShwcmVmaXgsICZwYXRoc3BlYywgZmxhZ3MpOworCisJaWYgKGFkZF9uZXdfZmlsZXMpCisJCWV4aXRfc3RhdHVzIHw9IGFkZF9maWxlcygmZGlyLCBmbGFncyk7CisKKwlpZiAoY2htb2RfYXJnICYmIHBhdGhzcGVjLm5yKQorCQljaG1vZF9wYXRoc3BlYygmcGF0aHNwZWMsIGNobW9kX2FyZ1swXSk7CisJdW5wbHVnX2J1bGtfY2hlY2tpbigpOworCitmaW5pc2g6CisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLAorCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKQorCQlkaWUoXygiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJVU5MRUFLKHBhdGhzcGVjKTsKKwlVTkxFQUsoZGlyKTsKKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2FtLmMgYi9idWlsdGluL2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkZmQ5MwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYW0uYwpAQCAtMCwwICsxLDI0MTggQEAKKy8qCisgKiBCdWlsdGluICJnaXQgYW0iCisgKgorICogQmFzZWQgb24gZ2l0LWFtLnNoIGJ5IEp1bmlvIEMgSGFtYW5vLgorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisjaW5jbHVkZSAibWFpbGluZm8uaCIKKyNpbmNsdWRlICJhcHBseS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKKy8qKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCBsaW5lIG9mIG1zZy4KKyAqLworc3RhdGljIGludCBsaW5lbGVuKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlyZXR1cm4gc3RyY2hybnVsKG1zZywgJ1xuJykgLSBtc2c7Cit9CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlmIGBzdHJgIGNvbnNpc3RzIG9mIG9ubHkgd2hpdGVzcGFjZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHN0cl9pc3NwYWNlKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlmb3IgKDsgKnN0cjsgc3RyKyspCisJCWlmICghaXNzcGFjZSgqc3RyKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK2VudW0gcGF0Y2hfZm9ybWF0IHsKKwlQQVRDSF9GT1JNQVRfVU5LTk9XTiA9IDAsCisJUEFUQ0hfRk9STUFUX01CT1gsCisJUEFUQ0hfRk9STUFUX1NUR0lULAorCVBBVENIX0ZPUk1BVF9TVEdJVF9TRVJJRVMsCisJUEFUQ0hfRk9STUFUX0hHLAorCVBBVENIX0ZPUk1BVF9NQk9YUkQKK307CisKK2VudW0ga2VlcF90eXBlIHsKKwlLRUVQX0ZBTFNFID0gMCwKKwlLRUVQX1RSVUUsICAgICAgLyogcGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyAqLworCUtFRVBfTk9OX1BBVENIICAvKiBwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvICovCit9OworCitlbnVtIHNjaXNzb3JzX3R5cGUgeworCVNDSVNTT1JTX1VOU0VUID0gLTEsCisJU0NJU1NPUlNfRkFMU0UgPSAwLCAgLyogcGFzcyAtLW5vLXNjaXNzb3JzIHRvIGdpdC1tYWlsaW5mbyAqLworCVNDSVNTT1JTX1RSVUUgICAgICAgIC8qIHBhc3MgLS1zY2lzc29ycyB0byBnaXQtbWFpbGluZm8gKi8KK307CisKK2VudW0gc2lnbm9mZl90eXBlIHsKKwlTSUdOT0ZGX0ZBTFNFID0gMCwKKwlTSUdOT0ZGX1RSVUUgPSAxLAorCVNJR05PRkZfRVhQTElDSVQgLyogLS1zaWdub2ZmIHdhcyBzZXQgb24gdGhlIGNvbW1hbmQtbGluZSAqLworfTsKKworZW51bSBzaG93X3BhdGNoX3R5cGUgeworCVNIT1dfUEFUQ0hfUkFXID0gMCwKKwlTSE9XX1BBVENIX0RJRkYgPSAxLAorfTsKKworc3RydWN0IGFtX3N0YXRlIHsKKwkvKiBzdGF0ZSBkaXJlY3RvcnkgcGF0aCAqLworCWNoYXIgKmRpcjsKKworCS8qIGN1cnJlbnQgYW5kIGxhc3QgcGF0Y2ggbnVtYmVycywgMS1pbmRleGVkICovCisJaW50IGN1cjsKKwlpbnQgbGFzdDsKKworCS8qIGNvbW1pdCBtZXRhZGF0YSBhbmQgbWVzc2FnZSAqLworCWNoYXIgKmF1dGhvcl9uYW1lOworCWNoYXIgKmF1dGhvcl9lbWFpbDsKKwljaGFyICphdXRob3JfZGF0ZTsKKwljaGFyICptc2c7CisJc2l6ZV90IG1zZ19sZW47CisKKwkvKiB3aGVuIC0tcmViYXNpbmcsIHJlY29yZHMgdGhlIG9yaWdpbmFsIGNvbW1pdCB0aGUgcGF0Y2ggY2FtZSBmcm9tICovCisJc3RydWN0IG9iamVjdF9pZCBvcmlnX2NvbW1pdDsKKworCS8qIG51bWJlciBvZiBkaWdpdHMgaW4gcGF0Y2ggZmlsZW5hbWUgKi8KKwlpbnQgcHJlYzsKKworCS8qIHZhcmlvdXMgb3BlcmF0aW5nIG1vZGVzIGFuZCBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLworCWludCBpbnRlcmFjdGl2ZTsKKwlpbnQgdGhyZWV3YXk7CisJaW50IHF1aWV0OworCWludCBzaWdub2ZmOyAvKiBlbnVtIHNpZ25vZmZfdHlwZSAqLworCWludCB1dGY4OworCWludCBrZWVwOyAvKiBlbnVtIGtlZXBfdHlwZSAqLworCWludCBtZXNzYWdlX2lkOworCWludCBzY2lzc29yczsgLyogZW51bSBzY2lzc29yc190eXBlICovCisJc3RydWN0IGFyZ3ZfYXJyYXkgZ2l0X2FwcGx5X29wdHM7CisJY29uc3QgY2hhciAqcmVzb2x2ZW1zZzsKKwlpbnQgY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGU7CisJaW50IGlnbm9yZV9kYXRlOworCWludCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTsKKwljb25zdCBjaGFyICpzaWduX2NvbW1pdDsKKwlpbnQgcmViYXNpbmc7Cit9OworCisvKioKKyAqIEluaXRpYWxpemVzIGFtX3N0YXRlIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCBhbV9zdGF0ZV9pbml0KHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJaW50IGdwZ3NpZ247CisKKwltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKworCXN0YXRlLT5kaXIgPSBnaXRfcGF0aGR1cCgicmViYXNlLWFwcGx5Iik7CisKKwlzdGF0ZS0+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/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIpKTsKKwkJaWYgKCFmZ2V0cyhyZXBseSwgc2l6ZW9mKHJlcGx5KSwgc3RkaW4pKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBmcm9tIHN0ZGluOyBhYm9ydGluZyIpOworCisJCWlmICgqcmVwbHkgPT0gJ3knIHx8ICpyZXBseSA9PSAnWScpIHsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKCpyZXBseSA9PSAnYScgfHwgKnJlcGx5ID09ICdBJykgeworCQkJc3RhdGUtPmludGVyYWN0aXZlID0gMDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKCpyZXBseSA9PSAnbicgfHwgKnJlcGx5ID09ICdOJykgeworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAoKnJlcGx5ID09ICdlJyB8fCAqcmVwbHkgPT0gJ0UnKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoIWxhdW5jaF9lZGl0b3IoYW1fcGF0aChzdGF0ZSwgImZpbmFsLWNvbW1pdCIpLCAmbXNnLCBOVUxMKSkgeworCQkJCWZyZWUoc3RhdGUtPm1zZyk7CisJCQkJc3RhdGUtPm1zZyA9IHN0cmJ1Zl9kZXRhY2goJm1zZywgJnN0YXRlLT5tc2dfbGVuKTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCQl9IGVsc2UgaWYgKCpyZXBseSA9PSAndicgfHwgKnJlcGx5ID09ICdWJykgeworCQkJY29uc3QgY2hhciAqcGFnZXIgPSBnaXRfcGFnZXIoMSk7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQkJaWYgKCFwYWdlcikKKwkJCQlwYWdlciA9ICJjYXQiOworCQkJcHJlcGFyZV9wYWdlcl9hcmdzKCZjcCwgcGFnZXIpOworCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSk7CisJCQlydW5fY29tbWFuZCgmY3ApOworCQl9CisJfQorfQorCisvKioKKyAqIEFwcGxpZXMgYWxsIHF1ZXVlZCBtYWlsLgorICoKKyAqIElmIGByZXN1bWVgIGlzIHRydWUsIHdlIGFyZSAicmVzdW1pbmciLiBUaGUgIm1zZyIgYW5kIGF1dGhvcnNoaXAgZmllbGRzLCBhcworICogd2VsbCBhcyB0aGUgc3RhdGUgZGlyZWN0b3J5J3MgInBhdGNoIiBmaWxlIGlzIHVzZWQgYXMtaXMgZm9yIGFwcGx5aW5nIHRoZQorICogcGF0Y2ggYW5kIGNvbW1pdHRpbmcgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGFtX3J1bihzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBpbnQgcmVzdW1lKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZfZ2NfYXV0b1tdID0geyJnYyIsICItLWF1dG8iLCBOVUxMfTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwl1bmxpbmsoYW1fcGF0aChzdGF0ZSwgImRpcnR5aW5kZXgiKSk7CisKKwlpZiAocmVmcmVzaF9hbmRfd3JpdGVfY2FjaGUoUkVGUkVTSF9RVUlFVCwgMCwgMCkgPCAwKQorCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiKSk7CisKKwlpZiAocmVwb19pbmRleF9oYXNfY2hhbmdlcyh0aGVfcmVwb3NpdG9yeSwgTlVMTCwgJnNiKSkgeworCQl3cml0ZV9zdGF0ZV9ib29sKHN0YXRlLCAiZGlydHlpbmRleCIsIDEpOworCQlkaWUoXygiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIiksIHNiLmJ1Zik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCXdoaWxlIChzdGF0ZS0+Y3VyIDw9IHN0YXRlLT5sYXN0KSB7CisJCWNvbnN0IGNoYXIgKm1haWwgPSBhbV9wYXRoKHN0YXRlLCBtc2dudW0oc3RhdGUpKTsKKwkJaW50IGFwcGx5X3N0YXR1czsKKworCQlyZXNldF9pZGVudF9kYXRlKCk7CisKKwkJaWYgKCFmaWxlX2V4aXN0cyhtYWlsKSkKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAocmVzdW1lKSB7CisJCQl2YWxpZGF0ZV9yZXN1bWVfc3RhdGUoc3RhdGUpOworCQl9IGVsc2UgeworCQkJaW50IHNraXA7CisKKwkJCWlmIChzdGF0ZS0+cmViYXNpbmcpCisJCQkJc2tpcCA9IHBhcnNlX21haWxfcmViYXNlKHN0YXRlLCBtYWlsKTsKKwkJCWVsc2UKKwkJCQlza2lwID0gcGFyc2VfbWFpbChzdGF0ZSwgbWFpbCk7CisKKwkJCWlmIChza2lwKQorCQkJCWdvdG8gbmV4dDsgLyogbWFpbCBzaG91bGQgYmUgc2tpcHBlZCAqLworCisJCQlpZiAoc3RhdGUtPnNpZ25vZmYpCisJCQkJYW1fYXBwZW5kX3NpZ25vZmYoc3RhdGUpOworCisJCQl3cml0ZV9hdXRob3Jfc2NyaXB0KHN0YXRlKTsKKwkJCXdyaXRlX2NvbW1pdF9tc2coc3RhdGUpOworCQl9CisKKwkJaWYgKHN0YXRlLT5pbnRlcmFjdGl2ZSAmJiBkb19pbnRlcmFjdGl2ZShzdGF0ZSkpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKHJ1bl9hcHBseXBhdGNoX21zZ19ob29rKHN0YXRlKSkKKwkJCWV4aXQoMSk7CisKKwkJc2F5KHN0YXRlLCBzdGRvdXQsIF8oIkFwcGx5aW5nOiAlLipzIiksIGxpbmVsZW4oc3RhdGUtPm1zZyksIHN0YXRlLT5tc2cpOworCisJCWFwcGx5X3N0YXR1cyA9IHJ1bl9hcHBseShzdGF0ZSwgTlVMTCk7CisKKwkJaWYgKGFwcGx5X3N0YXR1cyAmJiBzdGF0ZS0+dGhyZWV3YXkpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQkJc3RyYnVmX2FkZHN0cigmc2IsIGFtX3BhdGgoc3RhdGUsICJwYXRjaC1tZXJnZS1pbmRleCIpKTsKKwkJCWFwcGx5X3N0YXR1cyA9IGZhbGxfYmFja190aHJlZXdheShzdGF0ZSwgc2IuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkJCS8qCisJCQkgKiBBcHBseWluZyB0aGUgcGF0Y2ggdG8gYW4gZWFybGllciB0cmVlIGFuZCBtZXJnaW5nCisJCQkgKiB0aGUgcmVzdWx0IG1heSBoYXZlIHByb2R1Y2VkIHRoZSBzYW1lIHRyZWUgYXMgb3Vycy4KKwkJCSAqLworCQkJaWYgKCFhcHBseV9zdGF0dXMgJiYKKwkJCSAgICAhcmVwb19pbmRleF9oYXNfY2hhbmdlcyh0aGVfcmVwb3NpdG9yeSwgTlVMTCwgTlVMTCkpIHsKKwkJCQlzYXkoc3RhdGUsIHN0ZG91dCwgXygiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIikpOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJfQorCisJCWlmIChhcHBseV9zdGF0dXMpIHsKKwkJCXByaW50Zl9sbihfKCJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIpLCBtc2dudW0oc3RhdGUpLAorCQkJCWxpbmVsZW4oc3RhdGUtPm1zZyksIHN0YXRlLT5tc2cpOworCisJCQlpZiAoYWR2aWNlX2Ftd29ya2RpcikKKwkJCQlhZHZpc2UoXygiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giKSk7CisKKwkJCWRpZV91c2VyX3Jlc29sdmUoc3RhdGUpOworCQl9CisKKwkJZG9fY29tbWl0KHN0YXRlKTsKKworbmV4dDoKKwkJYW1fbmV4dChzdGF0ZSk7CisKKwkJaWYgKHJlc3VtZSkKKwkJCWFtX2xvYWQoc3RhdGUpOworCQlyZXN1bWUgPSAwOworCX0KKworCWlmICghaXNfZW1wdHlfb3JfbWlzc2luZ19maWxlKGFtX3BhdGgoc3RhdGUsICJyZXdyaXR0ZW4iKSkpIHsKKwkJYXNzZXJ0KHN0YXRlLT5yZWJhc2luZyk7CisJCWNvcHlfbm90ZXNfZm9yX3JlYmFzZShzdGF0ZSk7CisJCXJ1bl9wb3N0X3Jld3JpdGVfaG9vayhzdGF0ZSk7CisJfQorCisJLyoKKwkgKiBJbiByZWJhc2luZyBtb2RlLCBpdCdzIHVwIHRvIHRoZSBjYWxsZXIgdG8gdGFrZSBjYXJlIG9mCisJICogaG91c2VrZWVwaW5nLgorCSAqLworCWlmICghc3RhdGUtPnJlYmFzaW5nKSB7CisJCWFtX2Rlc3Ryb3koc3RhdGUpOworCQljbG9zZV9vYmplY3Rfc3RvcmUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMpOworCQlydW5fY29tbWFuZF92X29wdChhcmd2X2djX2F1dG8sIFJVTl9HSVRfQ01EKTsKKwl9Cit9CisKKy8qKgorICogUmVzdW1lIHRoZSBjdXJyZW50IGFtIHNlc3Npb24gYWZ0ZXIgcGF0Y2ggYXBwbGljYXRpb24gZmFpbHVyZS4gVGhlIHVzZXIgZGlkCisgKiBhbGwgdGhlIGhhcmQgd29yaywgYW5kIHdlIGRvIG5vdCBoYXZlIHRvIGRvIGFueSBwYXRjaCBhcHBsaWNhdGlvbi4gSnVzdAorICogdHJ1c3QgYW5kIGNvbW1pdCB3aGF0IHRoZSB1c2VyIGhhcyBpbiB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4KKyAqLworc3RhdGljIHZvaWQgYW1fcmVzb2x2ZShzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXZhbGlkYXRlX3Jlc3VtZV9zdGF0ZShzdGF0ZSk7CisKKwlzYXkoc3RhdGUsIHN0ZG91dCwgXygiQXBwbHlpbmc6ICUuKnMiKSwgbGluZWxlbihzdGF0ZS0+bXNnKSwgc3RhdGUtPm1zZyk7CisKKwlpZiAoIXJlcG9faW5kZXhfaGFzX2NoYW5nZXModGhlX3JlcG9zaXRvcnksIE5VTEwsIE5VTEwpKSB7CisJCXByaW50Zl9sbihfKCJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKwkJCSJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKwkJCSJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIpKTsKKwkJZGllX3VzZXJfcmVzb2x2ZShzdGF0ZSk7CisJfQorCisJaWYgKHVubWVyZ2VkX2NhY2hlKCkpIHsKKwkJcHJpbnRmX2xuKF8oIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisJCQkiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyBzdWNoLlxuIgorCQkJIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iKSk7CisJCWRpZV91c2VyX3Jlc29sdmUoc3RhdGUpOworCX0KKworCWlmIChzdGF0ZS0+aW50ZXJhY3RpdmUpIHsKKwkJd3JpdGVfaW5kZXhfcGF0Y2goc3RhdGUpOworCQlpZiAoZG9faW50ZXJhY3RpdmUoc3RhdGUpKQorCQkJZ290byBuZXh0OworCX0KKworCXJlcG9fcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCAwKTsKKworCWRvX2NvbW1pdChzdGF0ZSk7CisKK25leHQ6CisJYW1fbmV4dChzdGF0ZSk7CisJYW1fbG9hZChzdGF0ZSk7CisJYW1fcnVuKHN0YXRlLCAwKTsKK30KKworLyoqCisgKiBQZXJmb3JtcyBhIGNoZWNrb3V0IGZhc3QtZm9yd2FyZCBmcm9tIGBoZWFkYCB0byBgcmVtb3RlYC4gSWYgYHJlc2V0YCBpcworICogdHJ1ZSwgYW55IHVubWVyZ2VkIGVudHJpZXMgd2lsbCBiZSBkaXNjYXJkZWQuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbgorICogZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBmYXN0X2ZvcndhcmRfdG8oc3RydWN0IHRyZWUgKmhlYWQsIHN0cnVjdCB0cmVlICpyZW1vdGUsIGludCByZXNldCkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbMl07CisKKwlpZiAocGFyc2VfdHJlZShoZWFkKSB8fCBwYXJzZV90cmVlKHJlbW90ZSkpCisJCXJldHVybiAtMTsKKworCWhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIExPQ0tfRElFX09OX0VSUk9SKTsKKworCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IDE7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLnVwZGF0ZSA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5yZXNldCA9IHJlc2V0OworCW9wdHMuZm4gPSB0d293YXlfbWVyZ2U7CisJaW5pdF90cmVlX2Rlc2MoJnRbMF0sIGhlYWQtPmJ1ZmZlciwgaGVhZC0+c2l6ZSk7CisJaW5pdF90cmVlX2Rlc2MoJnRbMV0sIHJlbW90ZS0+YnVmZmVyLCByZW1vdGUtPnNpemUpOworCisJaWYgKHVucGFja190cmVlcygyLCB0LCAmb3B0cykpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrX2ZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBNZXJnZXMgYSB0cmVlIGludG8gdGhlIGluZGV4LiBUaGUgaW5kZXgncyBzdGF0IGluZm8gd2lsbCB0YWtlIHByZWNlZGVuY2UKKyAqIG92ZXIgdGhlIG1lcmdlZCB0cmVlJ3MuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG1lcmdlX3RyZWUoc3RydWN0IHRyZWUgKnRyZWUpCit7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGUgPSBMT0NLX0lOSVQ7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0WzFdOworCisJaWYgKHBhcnNlX3RyZWUodHJlZSkpCisJCXJldHVybiAtMTsKKworCWhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIExPQ0tfRElFX09OX0VSUk9SKTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJaW5pdF90cmVlX2Rlc2MoJnRbMF0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwlpZiAodW5wYWNrX3RyZWVzKDEsIHQsICZvcHRzKSkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIENsZWFuIHRoZSBpbmRleCB3aXRob3V0IHRvdWNoaW5nIGVudHJpZXMgdGhhdCBhcmUgbm90IG1vZGlmaWVkIGJldHdlZW4KKyAqIGBoZWFkYCBhbmQgYHJlbW90ZWAuCisgKi8KK3N0YXRpYyBpbnQgY2xlYW5faW5kZXgoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGVhZCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcmVtb3RlKQoreworCXN0cnVjdCB0cmVlICpoZWFkX3RyZWUsICpyZW1vdGVfdHJlZSwgKmluZGV4X3RyZWU7CisJc3RydWN0IG9iamVjdF9pZCBpbmRleDsKKworCWhlYWRfdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoaGVhZCk7CisJaWYgKCFoZWFkX3RyZWUpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIiksIG9pZF90b19oZXgoaGVhZCkpOworCisJcmVtb3RlX3RyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHJlbW90ZSk7CisJaWYgKCFyZW1vdGVfdHJlZSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iKSwgb2lkX3RvX2hleChyZW1vdGUpKTsKKworCXJlYWRfY2FjaGVfdW5tZXJnZWQoKTsKKworCWlmIChmYXN0X2ZvcndhcmRfdG8oaGVhZF90cmVlLCBoZWFkX3RyZWUsIDEpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAod3JpdGVfY2FjaGVfYXNfdHJlZSgmaW5kZXgsIDAsIE5VTEwpKQorCQlyZXR1cm4gLTE7CisKKwlpbmRleF90cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCgmaW5kZXgpOworCWlmICghaW5kZXhfdHJlZSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iKSwgb2lkX3RvX2hleCgmaW5kZXgpKTsKKworCWlmIChmYXN0X2ZvcndhcmRfdG8oaW5kZXhfdHJlZSwgcmVtb3RlX3RyZWUsIDApKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobWVyZ2VfdHJlZShyZW1vdGVfdHJlZSkpCisJCXJldHVybiAtMTsKKworCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmVzZXRzIHJlcmVyZSdzIG1lcmdlIHJlc29sdXRpb24gbWV0YWRhdGEuCisgKi8KK3N0YXRpYyB2b2lkIGFtX3JlcmVyZV9jbGVhcih2b2lkKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZV9yciA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXJlcmVyZV9jbGVhcih0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbWVyZ2VfcnIsIDEpOworfQorCisvKioKKyAqIFJlc3VtZSB0aGUgY3VycmVudCBhbSBzZXNzaW9uIGJ5IHNraXBwaW5nIHRoZSBjdXJyZW50IHBhdGNoLgorICovCitzdGF0aWMgdm9pZCBhbV9za2lwKHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkOworCisJYW1fcmVyZXJlX2NsZWFyKCk7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZoZWFkKSkKKwkJb2lkY3B5KCZoZWFkLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKKworCWlmIChjbGVhbl9pbmRleCgmaGVhZCwgJmhlYWQpKQorCQlkaWUoXygiZmFpbGVkIHRvIGNsZWFuIGluZGV4IikpOworCisJaWYgKHN0YXRlLT5yZWJhc2luZykgeworCQlGSUxFICpmcCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAicmV3cml0dGVuIiksICJhIik7CisKKwkJYXNzZXJ0KCFpc19udWxsX29pZCgmc3RhdGUtPm9yaWdfY29tbWl0KSk7CisJCWZwcmludGYoZnAsICIlcyAiLCBvaWRfdG9faGV4KCZzdGF0ZS0+b3JpZ19jb21taXQpKTsKKwkJZnByaW50ZihmcCwgIiVzXG4iLCBvaWRfdG9faGV4KCZoZWFkKSk7CisJCWZjbG9zZShmcCk7CisJfQorCisJYW1fbmV4dChzdGF0ZSk7CisJYW1fbG9hZChzdGF0ZSk7CisJYW1fcnVuKHN0YXRlLCAwKTsKK30KKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgc2FmZSB0byByZXNldCBIRUFEIHRvIHRoZSBPUklHX0hFQUQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBJdCBpcyBub3Qgc2FmZSB0byByZXNldCBIRUFEIHdoZW46CisgKiAxLiBnaXQtYW0gcHJldmlvdXNseSBmYWlsZWQgYmVjYXVzZSB0aGUgaW5kZXggd2FzIGRpcnR5LgorICogMi4gSEVBRCBoYXMgbW92ZWQgc2luY2UgZ2l0LWFtIHByZXZpb3VzbHkgZmFpbGVkLgorICovCitzdGF0aWMgaW50IHNhZmVfdG9fYWJvcnQoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBhYm9ydF9zYWZldHksIGhlYWQ7CisKKwlpZiAoZmlsZV9leGlzdHMoYW1fcGF0aChzdGF0ZSwgImRpcnR5aW5kZXgiKSkpCisJCXJldHVybiAwOworCisJaWYgKHJlYWRfc3RhdGVfZmlsZSgmc2IsIHN0YXRlLCAiYWJvcnQtc2FmZXR5IiwgMSkgPiAwKSB7CisJCWlmIChnZXRfb2lkX2hleChzYi5idWYsICZhYm9ydF9zYWZldHkpKQorCQkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSAlcyIpLCBhbV9wYXRoKHN0YXRlLCAiYWJvcnQtc2FmZXR5IikpOworCX0gZWxzZQorCQlvaWRjbHIoJmFib3J0X3NhZmV0eSk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCWlmIChnZXRfb2lkKCJIRUFEIiwgJmhlYWQpKQorCQlvaWRjbHIoJmhlYWQpOworCisJaWYgKG9pZGVxKCZoZWFkLCAmYWJvcnRfc2FmZXR5KSkKKwkJcmV0dXJuIDE7CisKKwl3YXJuaW5nKF8oIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisJCSJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEFib3J0cyB0aGUgY3VycmVudCBhbSBzZXNzaW9uIGlmIGl0IGlzIHNhZmUgdG8gZG8gc28uCisgKi8KK3N0YXRpYyB2b2lkIGFtX2Fib3J0KHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG9iamVjdF9pZCBjdXJyX2hlYWQsIG9yaWdfaGVhZDsKKwlpbnQgaGFzX2N1cnJfaGVhZCwgaGFzX29yaWdfaGVhZDsKKwljaGFyICpjdXJyX2JyYW5jaDsKKworCWlmICghc2FmZV90b19hYm9ydChzdGF0ZSkpIHsKKwkJYW1fZGVzdHJveShzdGF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlhbV9yZXJlcmVfY2xlYXIoKTsKKworCWN1cnJfYnJhbmNoID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCAmY3Vycl9oZWFkLCBOVUxMKTsKKwloYXNfY3Vycl9oZWFkID0gY3Vycl9icmFuY2ggJiYgIWlzX251bGxfb2lkKCZjdXJyX2hlYWQpOworCWlmICghaGFzX2N1cnJfaGVhZCkKKwkJb2lkY3B5KCZjdXJyX2hlYWQsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCisJaGFzX29yaWdfaGVhZCA9ICFnZXRfb2lkKCJPUklHX0hFQUQiLCAmb3JpZ19oZWFkKTsKKwlpZiAoIWhhc19vcmlnX2hlYWQpCisJCW9pZGNweSgmb3JpZ19oZWFkLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKKworCWNsZWFuX2luZGV4KCZjdXJyX2hlYWQsICZvcmlnX2hlYWQpOworCisJaWYgKGhhc19vcmlnX2hlYWQpCisJCXVwZGF0ZV9yZWYoImFtIC0tYWJvcnQiLCAiSEVBRCIsICZvcmlnX2hlYWQsCisJCQkgICBoYXNfY3Vycl9oZWFkID8gJmN1cnJfaGVhZCA6IE5VTEwsIDAsCisJCQkgICBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwllbHNlIGlmIChjdXJyX2JyYW5jaCkKKwkJZGVsZXRlX3JlZihOVUxMLCBjdXJyX2JyYW5jaCwgTlVMTCwgUkVGX05PX0RFUkVGKTsKKworCWZyZWUoY3Vycl9icmFuY2gpOworCWFtX2Rlc3Ryb3koc3RhdGUpOworfQorCitzdGF0aWMgaW50IHNob3dfcGF0Y2goc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgZW51bSBzaG93X3BhdGNoX3R5cGUgc3ViX21vZGUpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnBhdGNoX3BhdGg7CisJaW50IGxlbjsKKworCWlmICghaXNfbnVsbF9vaWQoJnN0YXRlLT5vcmlnX2NvbW1pdCkpIHsKKwkJY29uc3QgY2hhciAqYXZbNF0gPSB7ICJzaG93IiwgTlVMTCwgIi0tIiwgTlVMTCB9OworCQljaGFyICpuZXdfb2lkX3N0cjsKKwkJaW50IHJldDsKKworCQlhdlsxXSA9IG5ld19vaWRfc3RyID0geHN0cmR1cChvaWRfdG9faGV4KCZzdGF0ZS0+b3JpZ19jb21taXQpKTsKKwkJcmV0ID0gcnVuX2NvbW1hbmRfdl9vcHQoYXYsIFJVTl9HSVRfQ01EKTsKKwkJZnJlZShuZXdfb2lkX3N0cik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3dpdGNoIChzdWJfbW9kZSkgeworCWNhc2UgU0hPV19QQVRDSF9SQVc6CisJCXBhdGNoX3BhdGggPSBhbV9wYXRoKHN0YXRlLCBtc2dudW0oc3RhdGUpKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1BBVENIX0RJRkY6CisJCXBhdGNoX3BhdGggPSBhbV9wYXRoKHN0YXRlLCAicGF0Y2giKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJpbnZhbGlkIG1vZGUgZm9yIC0tc2hvdy1jdXJyZW50LXBhdGNoIik7CisJfQorCisJbGVuID0gc3RyYnVmX3JlYWRfZmlsZSgmc2IsIHBhdGNoX3BhdGgsIDApOworCWlmIChsZW4gPCAwKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHJlYWQgJyVzJyIpLCBwYXRjaF9wYXRoKTsKKworCXNldHVwX3BhZ2VyKCk7CisJd3JpdGVfaW5fZnVsbCgxLCBzYi5idWYsIHNiLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwYXJzZV9vcHRpb25zKCkgY2FsbGJhY2sgdGhhdCB2YWxpZGF0ZXMgYW5kIHNldHMgb3B0LT52YWx1ZSB0byB0aGUKKyAqIFBBVENIX0ZPUk1BVF8qIGVudW0gdmFsdWUgY29ycmVzcG9uZGluZyB0byBgYXJnYC4KKyAqLworc3RhdGljIGludCBwYXJzZV9vcHRfcGF0Y2hmb3JtYXQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKm9wdF92YWx1ZSA9IG9wdC0+dmFsdWU7CisKKwlpZiAodW5zZXQpCisJCSpvcHRfdmFsdWUgPSBQQVRDSF9GT1JNQVRfVU5LTk9XTjsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIm1ib3giKSkKKwkJKm9wdF92YWx1ZSA9IFBBVENIX0ZPUk1BVF9NQk9YOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAic3RnaXQiKSkKKwkJKm9wdF92YWx1ZSA9IFBBVENIX0ZPUk1BVF9TVEdJVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInN0Z2l0LXNlcmllcyIpKQorCQkqb3B0X3ZhbHVlID0gUEFUQ0hfRk9STUFUX1NUR0lUX1NFUklFUzsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImhnIikpCisJCSpvcHRfdmFsdWUgPSBQQVRDSF9GT1JNQVRfSEc7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJtYm94cmQiKSkKKwkJKm9wdF92YWx1ZSA9IFBBVENIX0ZPUk1BVF9NQk9YUkQ7CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF9wYXRjaGZvcm1hdCBpbiBnaXQtY29tcGxldGlvbi5iYXNoCisJICogd2hlbiB5b3UgYWRkIG5ldyBvcHRpb25zCisJICovCisJZWxzZQorCQlyZXR1cm4gZXJyb3IoXygiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIiksIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK2VudW0gcmVzdW1lX3R5cGUgeworCVJFU1VNRV9GQUxTRSA9IDAsCisJUkVTVU1FX0FQUExZLAorCVJFU1VNRV9SRVNPTFZFRCwKKwlSRVNVTUVfU0tJUCwKKwlSRVNVTUVfQUJPUlQsCisJUkVTVU1FX1FVSVQsCisJUkVTVU1FX1NIT1dfUEFUQ0gKK307CisKK3N0cnVjdCByZXN1bWVfbW9kZSB7CisJZW51bSByZXN1bWVfdHlwZSBtb2RlOworCWVudW0gc2hvd19wYXRjaF90eXBlIHN1Yl9tb2RlOworfTsKKworc3RhdGljIGludCBwYXJzZV9vcHRfc2hvd19jdXJyZW50X3BhdGNoKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpvcHRfdmFsdWUgPSBvcHQtPnZhbHVlOworCXN0cnVjdCByZXN1bWVfbW9kZSAqcmVzdW1lID0gY29udGFpbmVyX29mKG9wdF92YWx1ZSwgc3RydWN0IHJlc3VtZV9tb2RlLCBtb2RlKTsKKworCS8qCisJICogUGxlYXNlIHVwZGF0ZSAkX19naXRfc2hvd2N1cnJlbnRwYXRjaCBpbiBnaXQtY29tcGxldGlvbi5iYXNoCisJICogd2hlbiB5b3UgYWRkIG5ldyBvcHRpb25zCisJICovCisJY29uc3QgY2hhciAqdmFsaWRfbW9kZXNbXSA9IHsKKwkJW1NIT1dfUEFUQ0hfRElGRl0gPSAiZGlmZiIsCisJCVtTSE9XX1BBVENIX1JBV10gPSAicmF3IgorCX07CisJaW50IG5ld192YWx1ZSA9IFNIT1dfUEFUQ0hfUkFXOworCisJaWYgKGFyZykgeworCQlmb3IgKG5ld192YWx1ZSA9IDA7IG5ld192YWx1ZSA8IEFSUkFZX1NJWkUodmFsaWRfbW9kZXMpOyBuZXdfdmFsdWUrKykgeworCQkJaWYgKCFzdHJjbXAoYXJnLCB2YWxpZF9tb2Rlc1tuZXdfdmFsdWVdKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAobmV3X3ZhbHVlID49IEFSUkFZX1NJWkUodmFsaWRfbW9kZXMpKQorCQkJcmV0dXJuIGVycm9yKF8oIkludmFsaWQgdmFsdWUgZm9yIC0tc2hvdy1jdXJyZW50LXBhdGNoOiAlcyIpLCBhcmcpOworCX0KKworCWlmIChyZXN1bWUtPm1vZGUgPT0gUkVTVU1FX1NIT1dfUEFUQ0ggJiYgbmV3X3ZhbHVlICE9IHJlc3VtZS0+c3ViX21vZGUpCisJCXJldHVybiBlcnJvcihfKCItLXNob3ctY3VycmVudC1wYXRjaD0lcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAiCisJCQkgICAgICAgIi0tc2hvdy1jdXJyZW50LXBhdGNoPSVzIiksCisJCQkgICAgIGFyZywgdmFsaWRfbW9kZXNbcmVzdW1lLT5zdWJfbW9kZV0pOworCisJcmVzdW1lLT5tb2RlID0gUkVTVU1FX1NIT1dfUEFUQ0g7CisJcmVzdW1lLT5zdWJfbW9kZSA9IG5ld192YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfYW1fY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyhrLCB2LCBOVUxMKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBOVUxMKTsKK30KKworaW50IGNtZF9hbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgYW1fc3RhdGUgc3RhdGU7CisJaW50IGJpbmFyeSA9IC0xOworCWludCBrZWVwX2NyID0gLTE7CisJaW50IHBhdGNoX2Zvcm1hdCA9IFBBVENIX0ZPUk1BVF9VTktOT1dOOworCXN0cnVjdCByZXN1bWVfbW9kZSByZXN1bWUgPSB7IC5tb2RlID0gUkVTVU1FX0ZBTFNFIH07CisJaW50IGluX3Byb2dyZXNzOworCWludCByZXQgPSAwOworCisJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlW10gPSB7CisJCU5fKCJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIpLAorCQlOXygiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiKSwKKwkJTlVMTAorCX07CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ2knLCAiaW50ZXJhY3RpdmUiLCAmc3RhdGUuaW50ZXJhY3RpdmUsCisJCQlOXygicnVuIGludGVyYWN0aXZlbHkiKSksCisJCU9QVF9ISURERU5fQk9PTCgnYicsICJiaW5hcnkiLCAmYmluYXJ5LAorCQkJTl8oImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIikpLAorCQlPUFRfQk9PTCgnMycsICIzd2F5IiwgJnN0YXRlLnRocmVld2F5LAorCQkJTl8oImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIikpLAorCQlPUFRfX1FVSUVUKCZzdGF0ZS5xdWlldCwgTl8oImJlIHF1aWV0IikpLAorCQlPUFRfU0VUX0lOVCgncycsICJzaWdub2ZmIiwgJnN0YXRlLnNpZ25vZmYsCisJCQlOXygiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIpLAorCQkJU0lHTk9GRl9FWFBMSUNJVCksCisJCU9QVF9CT09MKCd1JywgInV0ZjgiLCAmc3RhdGUudXRmOCwKKwkJCU5fKCJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIpKSwKKwkJT1BUX1NFVF9JTlQoJ2snLCAia2VlcCIsICZzdGF0ZS5rZWVwLAorCQkJTl8oInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iKSwgS0VFUF9UUlVFKSwKKwkJT1BUX1NFVF9JTlQoMCwgImtlZXAtbm9uLXBhdGNoIiwgJnN0YXRlLmtlZXAsCisJCQlOXygicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIpLCBLRUVQX05PTl9QQVRDSCksCisJCU9QVF9CT09MKCdtJywgIm1lc3NhZ2UtaWQiLCAmc3RhdGUubWVzc2FnZV9pZCwKKwkJCU5fKCJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIikpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJrZWVwLWNyIiwgJmtlZXBfY3IsCisJCQlOXygicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIpLAorCQkJMSwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAibm8ta2VlcC1jciIsICZrZWVwX2NyLAorCQkJTl8oImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIiksCisJCQkwLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQk9PTCgnYycsICJzY2lzc29ycyIsICZzdGF0ZS5zY2lzc29ycywKKwkJCU5fKCJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiKSksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJ3aGl0ZXNwYWNlIiwgJnN0YXRlLmdpdF9hcHBseV9vcHRzLCBOXygiYWN0aW9uIiksCisJCQlOXygicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIpLAorCQkJMCksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJpZ25vcmUtc3BhY2UtY2hhbmdlIiwgJnN0YXRlLmdpdF9hcHBseV9vcHRzLCBOVUxMLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJpZ25vcmUtd2hpdGVzcGFjZSIsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTlVMTCwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQlQQVJTRV9PUFRfTk9BUkcpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiZGlyZWN0b3J5IiwgJnN0YXRlLmdpdF9hcHBseV9vcHRzLCBOXygicm9vdCIpLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCTApLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiZXhjbHVkZSIsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTl8oInBhdGgiKSwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQkwKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImluY2x1ZGUiLCAmc3RhdGUuZ2l0X2FwcGx5X29wdHMsIE5fKCJwYXRoIiksCisJCQlOXygicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIpLAorCQkJMCksCisJCU9QVF9QQVNTVEhSVV9BUkdWKCdDJywgTlVMTCwgJnN0YXRlLmdpdF9hcHBseV9vcHRzLCBOXygibiIpLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCTApLAorCQlPUFRfUEFTU1RIUlVfQVJHVigncCcsIE5VTEwsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTl8oIm51bSIpLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCTApLAorCQlPUFRfQ0FMTEJBQ0soMCwgInBhdGNoLWZvcm1hdCIsICZwYXRjaF9mb3JtYXQsIE5fKCJmb3JtYXQiKSwKKwkJCU5fKCJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iKSwKKwkJCXBhcnNlX29wdF9wYXRjaGZvcm1hdCksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJyZWplY3QiLCAmc3RhdGUuZ2l0X2FwcGx5X29wdHMsIE5VTEwsCisJCQlOXygicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIpLAorCQkJUEFSU0VfT1BUX05PQVJHKSwKKwkJT1BUX1NUUklORygwLCAicmVzb2x2ZW1zZyIsICZzdGF0ZS5yZXNvbHZlbXNnLCBOVUxMLAorCQkJTl8oIm92ZXJyaWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXRjaCBmYWlsdXJlIG9jY3VycyIpKSwKKwkJT1BUX0NNRE1PREUoMCwgImNvbnRpbnVlIiwgJnJlc3VtZS5tb2RlLAorCQkJTl8oImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiKSwKKwkJCVJFU1VNRV9SRVNPTFZFRCksCisJCU9QVF9DTURNT0RFKCdyJywgInJlc29sdmVkIiwgJnJlc3VtZS5tb2RlLAorCQkJTl8oInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIiksCisJCQlSRVNVTUVfUkVTT0xWRUQpLAorCQlPUFRfQ01ETU9ERSgwLCAic2tpcCIsICZyZXN1bWUubW9kZSwKKwkJCU5fKCJza2lwIHRoZSBjdXJyZW50IHBhdGNoIiksCisJCQlSRVNVTUVfU0tJUCksCisJCU9QVF9DTURNT0RFKDAsICJhYm9ydCIsICZyZXN1bWUubW9kZSwKKwkJCU5fKCJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIiksCisJCQlSRVNVTUVfQUJPUlQpLAorCQlPUFRfQ01ETU9ERSgwLCAicXVpdCIsICZyZXN1bWUubW9kZSwKKwkJCU5fKCJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIiksCisJCQlSRVNVTUVfUVVJVCksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAic2hvdy1jdXJyZW50LXBhdGNoIiwgJnJlc3VtZS5tb2RlLAorCQkgICIoZGlmZnxyYXcpIiwKKwkJICBOXygic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZCIpLAorCQkgIFBBUlNFX09QVF9DTURNT0RFIHwgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAsCisJCSAgcGFyc2Vfb3B0X3Nob3dfY3VycmVudF9wYXRjaCwgUkVTVU1FX1NIT1dfUEFUQ0ggfSwKKwkJT1BUX0JPT0woMCwgImNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIiwKKwkJCSZzdGF0ZS5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSwKKwkJCU5fKCJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiKSksCisJCU9QVF9CT09MKDAsICJpZ25vcmUtZGF0ZSIsICZzdGF0ZS5pZ25vcmVfZGF0ZSwKKwkJCU5fKCJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIikpLAorCQlPUFRfUkVSRVJFX0FVVE9VUERBVEUoJnN0YXRlLmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAnUycsICJncGctc2lnbiIsICZzdGF0ZS5zaWduX2NvbW1pdCwgTl8oImtleS1pZCIpLAorCQkgIE5fKCJHUEctc2lnbiBjb21taXRzIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCQlPUFRfSElEREVOX0JPT0woMCwgInJlYmFzaW5nIiwgJnN0YXRlLnJlYmFzaW5nLAorCQkJTl8oIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2UsIG9wdGlvbnMpOworCisJZ2l0X2NvbmZpZyhnaXRfYW1fY29uZmlnLCBOVUxMKTsKKworCWFtX3N0YXRlX2luaXQoJnN0YXRlKTsKKworCWluX3Byb2dyZXNzID0gYW1faW5fcHJvZ3Jlc3MoJnN0YXRlKTsKKwlpZiAoaW5fcHJvZ3Jlc3MpCisJCWFtX2xvYWQoJnN0YXRlKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJaWYgKGJpbmFyeSA+PSAwKQorCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorCQkJCSJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIikpOworCisJLyogRW5zdXJlIGEgdmFsaWQgY29tbWl0dGVyIGlkZW50IGNhbiBiZSBjb25zdHJ1Y3RlZCAqLworCWdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9TVFJJQ1QpOworCisJaWYgKHJlcG9fcmVhZF9pbmRleF9wcmVsb2FkKHRoZV9yZXBvc2l0b3J5LCBOVUxMLCAwKSA8IDApCisJCWRpZShfKCJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiKSk7CisKKwlpZiAoaW5fcHJvZ3Jlc3MpIHsKKwkJLyoKKwkJICogQ2F0Y2ggdXNlciBlcnJvciB0byBmZWVkIHVzIHBhdGNoZXMgd2hlbiB0aGVyZSBpcyBhIHNlc3Npb24KKwkJICogaW4gcHJvZ3Jlc3M6CisJCSAqCisJCSAqIDEuIG1ib3ggcGF0aChzKSBhcmUgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQtbGluZS4KKwkJICogMi4gc3RkaW4gaXMgbm90IGEgdHR5OiB0aGUgdXNlciBpcyB0cnlpbmcgdG8gZmVlZCB1cyBhIHBhdGNoCisJCSAqICAgIGZyb20gc3RhbmRhcmQgaW5wdXQuIFRoaXMgaXMgc29tZXdoYXQgdW5yZWxpYWJsZSAtLSBzdGRpbgorCQkgKiAgICBjb3VsZCBiZSAvZGV2L251bGwgZm9yIGV4YW1wbGUgYW5kIHRoZSBjYWxsZXIgZGlkIG5vdAorCQkgKiAgICBpbnRlbmQgdG8gZmVlZCB1cyBhIHBhdGNoIGJ1dCB3YW50ZWQgdG8gY29udGludWUKKwkJICogICAgdW5hdHRlbmRlZC4KKwkJICovCisJCWlmIChhcmdjIHx8IChyZXN1bWUubW9kZSA9PSBSRVNVTUVfRkFMU0UgJiYgIWlzYXR0eSgwKSkpCisJCQlkaWUoXygicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIiksCisJCQkJc3RhdGUuZGlyKTsKKworCQlpZiAocmVzdW1lLm1vZGUgPT0gUkVTVU1FX0ZBTFNFKQorCQkJcmVzdW1lLm1vZGUgPSBSRVNVTUVfQVBQTFk7CisKKwkJaWYgKHN0YXRlLnNpZ25vZmYgPT0gU0lHTk9GRl9FWFBMSUNJVCkKKwkJCWFtX2FwcGVuZF9zaWdub2ZmKCZzdGF0ZSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgcGF0aHMgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCWludCBpOworCisJCS8qCisJCSAqIEhhbmRsZSBzdHJheSBzdGF0ZSBkaXJlY3RvcnkgaW4gdGhlIGluZGVwZW5kZW50LXJ1biBjYXNlLiBJbgorCQkgKiB0aGUgLS1yZWJhc2luZyBjYXNlLCBpdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIHRha2UgY2FyZSBvZgorCQkgKiBzdHJheSBkaXJlY3Rvcmllcy4KKwkJICovCisJCWlmIChmaWxlX2V4aXN0cyhzdGF0ZS5kaXIpICYmICFzdGF0ZS5yZWJhc2luZykgeworCQkJaWYgKHJlc3VtZS5tb2RlID09IFJFU1VNRV9BQk9SVCB8fCByZXN1bWUubW9kZSA9PSBSRVNVTUVfUVVJVCkgeworCQkJCWFtX2Rlc3Ryb3koJnN0YXRlKTsKKwkJCQlhbV9zdGF0ZV9yZWxlYXNlKCZzdGF0ZSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWRpZShfKCJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisJCQkJIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIpLAorCQkJCXN0YXRlLmRpcik7CisJCX0KKworCQlpZiAocmVzdW1lLm1vZGUpCisJCQlkaWUoXygiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCQlpZiAoaXNfYWJzb2x1dGVfcGF0aChhcmd2W2ldKSB8fCAhcHJlZml4KQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmcGF0aHMsIGFyZ3ZbaV0pOworCQkJZWxzZQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmcGF0aHMsIG1rcGF0aCgiJXMvJXMiLCBwcmVmaXgsIGFyZ3ZbaV0pKTsKKwkJfQorCisJCWlmIChzdGF0ZS5pbnRlcmFjdGl2ZSAmJiAhcGF0aHMuYXJnYykKKwkJCWRpZShfKCJpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIHBhdGNoZXMgb24gdGhlIGNvbW1hbmQgbGluZSIpKTsKKworCQlhbV9zZXR1cCgmc3RhdGUsIHBhdGNoX2Zvcm1hdCwgcGF0aHMuYXJndiwga2VlcF9jcik7CisKKwkJYXJndl9hcnJheV9jbGVhcigmcGF0aHMpOworCX0KKworCXN3aXRjaCAocmVzdW1lLm1vZGUpIHsKKwljYXNlIFJFU1VNRV9GQUxTRToKKwkJYW1fcnVuKCZzdGF0ZSwgMCk7CisJCWJyZWFrOworCWNhc2UgUkVTVU1FX0FQUExZOgorCQlhbV9ydW4oJnN0YXRlLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBSRVNVTUVfUkVTT0xWRUQ6CisJCWFtX3Jlc29sdmUoJnN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBSRVNVTUVfU0tJUDoKKwkJYW1fc2tpcCgmc3RhdGUpOworCQlicmVhazsKKwljYXNlIFJFU1VNRV9BQk9SVDoKKwkJYW1fYWJvcnQoJnN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBSRVNVTUVfUVVJVDoKKwkJYW1fcmVyZXJlX2NsZWFyKCk7CisJCWFtX2Rlc3Ryb3koJnN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBSRVNVTUVfU0hPV19QQVRDSDoKKwkJcmV0ID0gc2hvd19wYXRjaCgmc3RhdGUsIHJlc3VtZS5zdWJfbW9kZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygiaW52YWxpZCByZXN1bWUgdmFsdWUiKTsKKwl9CisKKwlhbV9zdGF0ZV9yZWxlYXNlKCZzdGF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hbm5vdGF0ZS5jIGIvYnVpbHRpbi9hbm5vdGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNDEzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Fubm90YXRlLmMKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqICJnaXQgYW5ub3RhdGUiIGJ1aWx0aW4gYWxpYXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUnlhbiBBbmRlcnNvbgorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCWludCBpOworCisJYXJndl9hcnJheV9wdXNobCgmYXJncywgImFubm90YXRlIiwgIi1jIiwgTlVMTCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgYXJndltpXSk7CisJfQorCisJcmV0dXJuIGNtZF9ibGFtZShhcmdzLmFyZ2MsIGFyZ3MuYXJndiwgcHJlZml4KTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYXBwbHkuYyBiL2J1aWx0aW4vYXBwbHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjA5OWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hcHBseS5jCkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJhcHBseS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFwcGx5X3VzYWdlW10gPSB7CisJTl8oImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iKSwKKwlOVUxMCit9OworCitpbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBmb3JjZV9hcHBseSA9IDA7CisJaW50IG9wdGlvbnMgPSAwOworCWludCByZXQ7CisJc3RydWN0IGFwcGx5X3N0YXRlIHN0YXRlOworCisJaWYgKGluaXRfYXBwbHlfc3RhdGUoJnN0YXRlLCB0aGVfcmVwb3NpdG9yeSwgcHJlZml4KSkKKwkJZXhpdCgxMjgpOworCisJYXJnYyA9IGFwcGx5X3BhcnNlX29wdGlvbnMoYXJnYywgYXJndiwKKwkJCQkgICAmc3RhdGUsICZmb3JjZV9hcHBseSwgJm9wdGlvbnMsCisJCQkJICAgYXBwbHlfdXNhZ2UpOworCisJaWYgKGNoZWNrX2FwcGx5X3N0YXRlKCZzdGF0ZSwgZm9yY2VfYXBwbHkpKQorCQlleGl0KDEyOCk7CisKKwlyZXQgPSBhcHBseV9hbGxfcGF0Y2hlcygmc3RhdGUsIGFyZ2MsIGFyZ3YsIG9wdGlvbnMpOworCisJY2xlYXJfYXBwbHlfc3RhdGUoJnN0YXRlKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2FyY2hpdmUuYyBiL2J1aWx0aW4vYXJjaGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDExNjYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2FyY2hpdmUuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBGcmFuY2sgQnVpLUh1dQorICogQ29weXJpZ2h0IChjKSAyMDA2IFJlbmUgU2NoYXJmZQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9vdXRwdXRfZmlsZShjb25zdCBjaGFyICpvdXRwdXRfZmlsZSkKK3sKKwlpbnQgb3V0cHV0X2ZkID0gb3BlbihvdXRwdXRfZmlsZSwgT19DUkVBVCB8IE9fV1JPTkxZIHwgT19UUlVOQywgMDY2Nik7CisJaWYgKG91dHB1dF9mZCA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIiksIG91dHB1dF9maWxlKTsKKwlpZiAob3V0cHV0X2ZkICE9IDEpIHsKKwkJaWYgKGR1cDIob3V0cHV0X2ZkLCAxKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIpKTsKKwkJZWxzZQorCQkJY2xvc2Uob3V0cHV0X2ZkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnVuX3JlbW90ZV9hcmNoaXZlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVtb3RlLCBjb25zdCBjaGFyICpleGVjLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWVfaGludCkKK3sKKwlpbnQgZmRbMl0sIGksIHJ2OworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKwlzdHJ1Y3QgcmVtb3RlICpfcmVtb3RlOworCXN0cnVjdCBwYWNrZXRfcmVhZGVyIHJlYWRlcjsKKworCV9yZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZSk7CisJaWYgKCFfcmVtb3RlLT51cmxbMF0pCisJCWRpZShfKCJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIikpOworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQoX3JlbW90ZSwgX3JlbW90ZS0+dXJsWzBdKTsKKwl0cmFuc3BvcnRfY29ubmVjdCh0cmFuc3BvcnQsICJnaXQtdXBsb2FkLWFyY2hpdmUiLCBleGVjLCBmZCk7CisKKwkvKgorCSAqIEluamVjdCBhIGZha2UgLS1mb3JtYXQgZmllbGQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKwkgKiBhcmd1bWVudHMsIHdpdGggdGhlIGZvcm1hdCBpbmZlcnJlZCBmcm9tIG91ciBvdXRwdXQKKwkgKiBmaWxlbmFtZS4gVGhpcyB3YXkgZXhwbGljaXQgLS1mb3JtYXQgb3B0aW9ucyBjYW4gb3ZlcnJpZGUKKwkgKiBpdC4KKwkgKi8KKwlpZiAobmFtZV9oaW50KSB7CisJCWNvbnN0IGNoYXIgKmZvcm1hdCA9IGFyY2hpdmVfZm9ybWF0X2Zyb21fZmlsZW5hbWUobmFtZV9oaW50KTsKKwkJaWYgKGZvcm1hdCkKKwkJCXBhY2tldF93cml0ZV9mbXQoZmRbMV0sICJhcmd1bWVudCAtLWZvcm1hdD0lc1xuIiwgZm9ybWF0KTsKKwl9CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKwkJcGFja2V0X3dyaXRlX2ZtdChmZFsxXSwgImFyZ3VtZW50ICVzXG4iLCBhcmd2W2ldKTsKKwlwYWNrZXRfZmx1c2goZmRbMV0pOworCisJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIGZkWzBdLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwlpZiAocGFja2V0X3JlYWRlcl9yZWFkKCZyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX05PUk1BTCkKKwkJZGllKF8oImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiKSk7CisJaWYgKHN0cmNtcChyZWFkZXIubGluZSwgIkFDSyIpKSB7CisJCWlmIChzdGFydHNfd2l0aChyZWFkZXIubGluZSwgIk5BQ0sgIikpCisJCQlkaWUoXygiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiKSwgcmVhZGVyLmxpbmUgKyA1KTsKKwkJZGllKF8oImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIpKTsKKwl9CisKKwlpZiAocGFja2V0X3JlYWRlcl9yZWFkKCZyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX0ZMVVNIKQorCQlkaWUoXygiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giKSk7CisKKwkvKiBOb3csIHN0YXJ0IHJlYWRpbmcgZnJvbSBmZFswXSBhbmQgc3BpdCBpdCBvdXQgdG8gc3Rkb3V0ICovCisJcnYgPSByZWN2X3NpZGViYW5kKCJhcmNoaXZlIiwgZmRbMF0sIDEpOworCXJ2IHw9IHRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisKKwlyZXR1cm4gISFydjsKK30KKworI2RlZmluZSBQQVJTRV9PUFRfS0VFUF9BTEwgKCBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCB8IAlcCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwIHwgCVwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiB8CVwKKwkJCSAgICAgUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFAJKQorCitpbnQgY21kX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqZXhlYyA9ICJnaXQtdXBsb2FkLWFyY2hpdmUiOworCWNvbnN0IGNoYXIgKm91dHB1dCA9IE5VTEw7CisJY29uc3QgY2hhciAqcmVtb3RlID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIGxvY2FsX29wdHNbXSA9IHsKKwkJT1BUX0ZJTEVOQU1FKCdvJywgIm91dHB1dCIsICZvdXRwdXQsCisJCQkgICAgIE5fKCJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiKSksCisJCU9QVF9TVFJJTkcoMCwgInJlbW90ZSIsICZyZW1vdGUsIE5fKCJyZXBvIiksCisJCQlOXygicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iKSksCisJCU9QVF9TVFJJTkcoMCwgImV4ZWMiLCAmZXhlYywgTl8oImNvbW1hbmQiKSwKKwkJCU5fKCJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGxvY2FsX29wdHMsIE5VTEwsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FMTCk7CisKKwlpbml0X2FyY2hpdmVycygpOworCisJaWYgKG91dHB1dCkKKwkJY3JlYXRlX291dHB1dF9maWxlKG91dHB1dCk7CisKKwlpZiAocmVtb3RlKQorCQlyZXR1cm4gcnVuX3JlbW90ZV9hcmNoaXZlcihhcmdjLCBhcmd2LCByZW1vdGUsIGV4ZWMsIG91dHB1dCk7CisKKwlzZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTEJGLCBCVUZTSVopOworCisJcmV0dXJuIHdyaXRlX2FyY2hpdmUoYXJnYywgYXJndiwgcHJlZml4LCB0aGVfcmVwb3NpdG9yeSwgb3V0cHV0LCAwKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYyBiL2J1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWM0MGI1Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jCkBAIC0wLDAgKzEsNzI2IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImJpc2VjdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwcm9tcHQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9iaXNlY3RfdGVybXMsICJCSVNFQ1RfVEVSTVMiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X2V4cGVjdGVkX3JldiwgIkJJU0VDVF9FWFBFQ1RFRF9SRVYiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X2FuY2VzdG9yc19vaywgIkJJU0VDVF9BTkNFU1RPUlNfT0siKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X3N0YXJ0LCAiQklTRUNUX1NUQVJUIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9oZWFkLCAiQklTRUNUX0hFQUQiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X2xvZywgIkJJU0VDVF9MT0ciKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfaGVhZF9uYW1lLCAiaGVhZC1uYW1lIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9uYW1lcywgIkJJU0VDVF9OQU1FUyIpCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIiksCisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iKSwKKwlOXygiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIiksCisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIiksCisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IiksCisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IiksCisJTl8oImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxnb29kX3Rlcm0+IDxiYWRfdGVybT4gWzx0ZXJtPl0iKSwKKwlOXygiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS10ZXJtLW5ld10iKSwKKwlOXygiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfT08dGVybT5dIgorCQkJCQkgICAgICJbLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXSIpLAorCU5VTEwKK307CisKK3N0cnVjdCBiaXNlY3RfdGVybXMgeworCWNoYXIgKnRlcm1fZ29vZDsKKwljaGFyICp0ZXJtX2JhZDsKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfdGVybXMoc3RydWN0IGJpc2VjdF90ZXJtcyAqdGVybXMpCit7CisJRlJFRV9BTkRfTlVMTCh0ZXJtcy0+dGVybV9nb29kKTsKKwlGUkVFX0FORF9OVUxMKHRlcm1zLT50ZXJtX2JhZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90ZXJtcyhzdHJ1Y3QgYmlzZWN0X3Rlcm1zICp0ZXJtcywgY29uc3QgY2hhciAqYmFkLAorCQkgICAgICBjb25zdCBjaGFyICpnb29kKQoreworCWZyZWUoKHZvaWQgKil0ZXJtcy0+dGVybV9nb29kKTsKKwl0ZXJtcy0+dGVybV9nb29kID0geHN0cmR1cChnb29kKTsKKwlmcmVlKCh2b2lkICopdGVybXMtPnRlcm1fYmFkKTsKKwl0ZXJtcy0+dGVybV9iYWQgPSB4c3RyZHVwKGJhZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHZvY2FiX2JhZFtdID0gImJhZHxuZXciOworc3RhdGljIGNvbnN0IGNoYXIgdm9jYWJfZ29vZFtdID0gImdvb2R8b2xkIjsKKworLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlIHN0cmluZyBgdGVybWAgYmVsb25ncyB0byB0aGUgc2V0IG9mIHN0cmluZ3MKKyAqIGluY2x1ZGVkIGluIHRoZSB2YXJpYWJsZSBhcmd1bWVudHMuCisgKi8KK0xBU1RfQVJHX01VU1RfQkVfTlVMTAorc3RhdGljIGludCBvbmVfb2YoY29uc3QgY2hhciAqdGVybSwgLi4uKQoreworCWludCByZXMgPSAwOworCXZhX2xpc3QgbWF0Y2hlczsKKwljb25zdCBjaGFyICptYXRjaDsKKworCXZhX3N0YXJ0KG1hdGNoZXMsIHRlcm0pOworCXdoaWxlICghcmVzICYmIChtYXRjaCA9IHZhX2FyZyhtYXRjaGVzLCBjb25zdCBjaGFyICopKSkKKwkJcmVzID0gIXN0cmNtcCh0ZXJtLCBtYXRjaCk7CisJdmFfZW5kKG1hdGNoZXMpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBjaGVja190ZXJtX2Zvcm1hdChjb25zdCBjaGFyICp0ZXJtLCBjb25zdCBjaGFyICpvcmlnX3Rlcm0pCit7CisJaW50IHJlczsKKwljaGFyICpuZXdfdGVybSA9IHhzdHJmbXQoInJlZnMvYmlzZWN0LyVzIiwgdGVybSk7CisKKwlyZXMgPSBjaGVja19yZWZuYW1lX2Zvcm1hdChuZXdfdGVybSwgMCk7CisJZnJlZShuZXdfdGVybSk7CisKKwlpZiAocmVzKQorCQlyZXR1cm4gZXJyb3IoXygiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIiksIHRlcm0pOworCisJaWYgKG9uZV9vZih0ZXJtLCAiaGVscCIsICJzdGFydCIsICJza2lwIiwgIm5leHQiLCAicmVzZXQiLAorCQkJInZpc3VhbGl6ZSIsICJ2aWV3IiwgInJlcGxheSIsICJsb2ciLCAicnVuIiwgInRlcm1zIiwgTlVMTCkpCisJCXJldHVybiBlcnJvcihfKCJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIpLCB0ZXJtKTsKKworCS8qCisJICogSW4gdGhlb3J5LCBub3RoaW5nIHByZXZlbnRzIHN3YXBwaW5nIGNvbXBsZXRlbHkgZ29vZCBhbmQgYmFkLAorCSAqIGJ1dCB0aGlzIHNpdHVhdGlvbiBjb3VsZCBiZSBjb25mdXNpbmcgYW5kIGhhc24ndCBiZWVuIHRlc3RlZAorCSAqIGVub3VnaC4gRm9yYmlkIGl0IGZvciBub3cuCisJICovCisKKwlpZiAoKHN0cmNtcChvcmlnX3Rlcm0sICJiYWQiKSAmJiBvbmVfb2YodGVybSwgImJhZCIsICJuZXciLCBOVUxMKSkgfHwKKwkJIChzdHJjbXAob3JpZ190ZXJtLCAiZ29vZCIpICYmIG9uZV9vZih0ZXJtLCAiZ29vZCIsICJvbGQiLCBOVUxMKSkpCisJCXJldHVybiBlcnJvcihfKCJjYW4ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHRlcm0gJyVzJyIpLCB0ZXJtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX3Rlcm1zKGNvbnN0IGNoYXIgKmJhZCwgY29uc3QgY2hhciAqZ29vZCkKK3sKKwlGSUxFICpmcCA9IE5VTEw7CisJaW50IHJlczsKKworCWlmICghc3RyY21wKGJhZCwgZ29vZCkpCisJCXJldHVybiBlcnJvcihfKCJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiKSk7CisKKwlpZiAoY2hlY2tfdGVybV9mb3JtYXQoYmFkLCAiYmFkIikgfHwgY2hlY2tfdGVybV9mb3JtYXQoZ29vZCwgImdvb2QiKSkKKwkJcmV0dXJuIC0xOworCisJZnAgPSBmb3BlbihnaXRfcGF0aF9iaXNlY3RfdGVybXMoKSwgInciKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIikpOworCisJcmVzID0gZnByaW50ZihmcCwgIiVzXG4lc1xuIiwgYmFkLCBnb29kKTsKKwlyZXMgfD0gZmNsb3NlKGZwKTsKKwlyZXR1cm4gKHJlcyA8IDApID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IGlzX2V4cGVjdGVkX3Jldihjb25zdCBjaGFyICpleHBlY3RlZF9oZXgpCit7CisJc3RydWN0IHN0cmJ1ZiBhY3R1YWxfaGV4ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlcyA9IDA7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmFjdHVhbF9oZXgsIGdpdF9wYXRoX2Jpc2VjdF9leHBlY3RlZF9yZXYoKSwgMCkgPj0gNDApIHsKKwkJc3RyYnVmX3RyaW0oJmFjdHVhbF9oZXgpOworCQlyZXMgPSAhc3RyY21wKGFjdHVhbF9oZXguYnVmLCBleHBlY3RlZF9oZXgpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYWN0dWFsX2hleCk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZXhwZWN0ZWRfcmV2cyhjb25zdCBjaGFyICoqcmV2cywgaW50IHJldl9ucikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZXZfbnI7IGkrKykgeworCQlpZiAoIWlzX2V4cGVjdGVkX3JldihyZXZzW2ldKSkgeworCQkJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfYmlzZWN0X2FuY2VzdG9yc19vaygpKTsKKwkJCXVubGlua19vcl93YXJuKGdpdF9wYXRoX2Jpc2VjdF9leHBlY3RlZF9yZXYoKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgYmlzZWN0X3Jlc2V0KGNvbnN0IGNoYXIgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaCA9IFNUUkJVRl9JTklUOworCisJaWYgKCFjb21taXQpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJyYW5jaCwgZ2l0X3BhdGhfYmlzZWN0X3N0YXJ0KCksIDApIDwgMSkgeworCQkJcHJpbnRmKF8oIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIikpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc3RyYnVmX3J0cmltKCZicmFuY2gpOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCWlmIChnZXRfb2lkX2NvbW1pdChjb21taXQsICZvaWQpKQorCQkJcmV0dXJuIGVycm9yKF8oIiclcycgaXMgbm90IGEgdmFsaWQgY29tbWl0IiksIGNvbW1pdCk7CisJCXN0cmJ1Zl9hZGRzdHIoJmJyYW5jaCwgY29tbWl0KTsKKwl9CisKKwlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX2Jpc2VjdF9oZWFkKCkpKSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkJYXJndl9hcnJheV9wdXNobCgmYXJndiwgImNoZWNrb3V0IiwgYnJhbmNoLmJ1ZiwgIi0tIiwgTlVMTCk7CisJCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2LmFyZ3YsIFJVTl9HSVRfQ01EKSkgeworCQkJZXJyb3IoXygiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCIKKwkJCQkiIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IgorCQkJCSIgcmVzZXQgPGNvbW1pdD4nLiIpLCBicmFuY2guYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZicmFuY2gpOworCQkJYXJndl9hcnJheV9jbGVhcigmYXJndik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYXJndl9hcnJheV9jbGVhcigmYXJndik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJyYW5jaCk7CisJcmV0dXJuIGJpc2VjdF9jbGVhbl9zdGF0ZSgpOworfQorCitzdGF0aWMgdm9pZCBsb2dfY29tbWl0KEZJTEUgKmZwLCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKnN0YXRlLAorCQkgICAgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcCA9IHswfTsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdF9tc2cgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpsYWJlbCA9IHhzdHJmbXQoZm10LCBzdGF0ZSk7CisKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJXMiLCAmY29tbWl0X21zZywgJnBwKTsKKworCWZwcmludGYoZnAsICIjICVzOiBbJXNdICVzXG4iLCBsYWJlbCwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSwKKwkJY29tbWl0X21zZy5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmNvbW1pdF9tc2cpOworCWZyZWUobGFiZWwpOworfQorCitzdGF0aWMgaW50IGJpc2VjdF93cml0ZShjb25zdCBjaGFyICpzdGF0ZSwgY29uc3QgY2hhciAqcmV2LAorCQkJY29uc3Qgc3RydWN0IGJpc2VjdF90ZXJtcyAqdGVybXMsIGludCBub2xvZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHRhZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlGSUxFICpmcCA9IE5VTEw7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoIXN0cmNtcChzdGF0ZSwgdGVybXMtPnRlcm1fYmFkKSkgeworCQlzdHJidWZfYWRkZigmdGFnLCAicmVmcy9iaXNlY3QvJXMiLCBzdGF0ZSk7CisJfSBlbHNlIGlmIChvbmVfb2Yoc3RhdGUsIHRlcm1zLT50ZXJtX2dvb2QsICJza2lwIiwgTlVMTCkpIHsKKwkJc3RyYnVmX2FkZGYoJnRhZywgInJlZnMvYmlzZWN0LyVzLSVzIiwgc3RhdGUsIHJldik7CisJfSBlbHNlIHsKKwkJcmVzID0gZXJyb3IoXygiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJXMiKSwgc3RhdGUpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlpZiAoZ2V0X29pZChyZXYsICZvaWQpKSB7CisJCXJlcyA9IGVycm9yKF8oImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIpLCByZXYpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlpZiAodXBkYXRlX3JlZihOVUxMLCB0YWcuYnVmLCAmb2lkLCBOVUxMLCAwLAorCQkgICAgICAgVVBEQVRFX1JFRlNfTVNHX09OX0VSUikpIHsKKwkJcmVzID0gLTE7CisJCWdvdG8gZmluaXNoOworCX0KKworCWZwID0gZm9wZW4oZ2l0X3BhdGhfYmlzZWN0X2xvZygpLCAiYSIpOworCWlmICghZnApIHsKKwkJcmVzID0gZXJyb3JfZXJybm8oXygiY291bGRuJ3Qgb3BlbiB0aGUgZmlsZSAnJXMnIiksIGdpdF9wYXRoX2Jpc2VjdF9sb2coKSk7CisJCWdvdG8gZmluaXNoOworCX0KKworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlsb2dfY29tbWl0KGZwLCAiJXMiLCBzdGF0ZSwgY29tbWl0KTsKKworCWlmICghbm9sb2cpCisJCWZwcmludGYoZnAsICJnaXQgYmlzZWN0ICVzICVzXG4iLCBzdGF0ZSwgcmV2KTsKKworZmluaXNoOgorCWlmIChmcCkKKwkJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmdGFnKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FuZF9zZXRfdGVybXMoc3RydWN0IGJpc2VjdF90ZXJtcyAqdGVybXMsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpbnQgaGFzX3Rlcm1fZmlsZSA9ICFpc19lbXB0eV9vcl9taXNzaW5nX2ZpbGUoZ2l0X3BhdGhfYmlzZWN0X3Rlcm1zKCkpOworCisJaWYgKG9uZV9vZihjbWQsICJza2lwIiwgInN0YXJ0IiwgInRlcm1zIiwgTlVMTCkpCisJCXJldHVybiAwOworCisJaWYgKGhhc190ZXJtX2ZpbGUgJiYgc3RyY21wKGNtZCwgdGVybXMtPnRlcm1fYmFkKSAmJgorCSAgICBzdHJjbXAoY21kLCB0ZXJtcy0+dGVybV9nb29kKSkKKwkJcmV0dXJuIGVycm9yKF8oIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICIKKwkJCQkiJXMvJXMgYmlzZWN0IiksIHRlcm1zLT50ZXJtX2JhZCwKKwkJCQl0ZXJtcy0+dGVybV9nb29kKTsKKworCWlmICghaGFzX3Rlcm1fZmlsZSkgeworCQlpZiAob25lX29mKGNtZCwgImJhZCIsICJnb29kIiwgTlVMTCkpIHsKKwkJCXNldF90ZXJtcyh0ZXJtcywgImJhZCIsICJnb29kIik7CisJCQlyZXR1cm4gd3JpdGVfdGVybXModGVybXMtPnRlcm1fYmFkLCB0ZXJtcy0+dGVybV9nb29kKTsKKwkJfQorCQlpZiAob25lX29mKGNtZCwgIm5ldyIsICJvbGQiLCBOVUxMKSkgeworCQkJc2V0X3Rlcm1zKHRlcm1zLCAibmV3IiwgIm9sZCIpOworCQkJcmV0dXJuIHdyaXRlX3Rlcm1zKHRlcm1zLT50ZXJtX2JhZCwgdGVybXMtPnRlcm1fZ29vZCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXJrX2dvb2QoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWludCAqbV9nb29kID0gKGludCAqKWNiX2RhdGE7CisJKm1fZ29vZCA9IDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIG5lZWRfYmFkX2FuZF9nb29kX3JldmlzaW9uX3dhcm5pbmdbXSA9CisJTl8oIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKwkgICAiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIpOworCitzdGF0aWMgY29uc3QgY2hhciBuZWVkX2Jpc2VjdF9zdGFydF93YXJuaW5nW10gPQorCU5fKCJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKwkgICAiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisJICAgIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iKTsKKworc3RhdGljIGludCBkZWNpZGVfbmV4dChjb25zdCBzdHJ1Y3QgYmlzZWN0X3Rlcm1zICp0ZXJtcywKKwkJICAgICAgIGNvbnN0IGNoYXIgKmN1cnJlbnRfdGVybSwgaW50IG1pc3NpbmdfZ29vZCwKKwkJICAgICAgIGludCBtaXNzaW5nX2JhZCkKK3sKKwlpZiAoIW1pc3NpbmdfZ29vZCAmJiAhbWlzc2luZ19iYWQpCisJCXJldHVybiAwOworCWlmICghY3VycmVudF90ZXJtKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobWlzc2luZ19nb29kICYmICFtaXNzaW5nX2JhZCAmJgorCSAgICAhc3RyY21wKGN1cnJlbnRfdGVybSwgdGVybXMtPnRlcm1fZ29vZCkpIHsKKwkJY2hhciAqeWVzbm87CisJCS8qCisJCSAqIGhhdmUgYmFkIChvciBuZXcpIGJ1dCBub3QgZ29vZCAob3Igb2xkKS4gV2UgY291bGQgYmlzZWN0CisJCSAqIGFsdGhvdWdoIHRoaXMgaXMgbGVzcyBvcHRpbXVtLgorCQkgKi8KKwkJd2FybmluZyhfKCJiaXNlY3Rpbmcgb25seSB3aXRoIGEgJXMgY29tbWl0IiksIHRlcm1zLT50ZXJtX2JhZCk7CisJCWlmICghaXNhdHR5KDApKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisJCSAqIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKwkJICogYXQgdGhpcyBwb2ludC4KKwkJICovCisJCXllc25vID0gZ2l0X3Byb21wdChfKCJBcmUgeW91IHN1cmUgW1kvbl0/ICIpLCBQUk9NUFRfRUNITyk7CisJCWlmIChzdGFydHNfd2l0aCh5ZXNubywgIk4iKSB8fCBzdGFydHNfd2l0aCh5ZXNubywgIm4iKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFpc19lbXB0eV9vcl9taXNzaW5nX2ZpbGUoZ2l0X3BhdGhfYmlzZWN0X3N0YXJ0KCkpKQorCQlyZXR1cm4gZXJyb3IoXyhuZWVkX2JhZF9hbmRfZ29vZF9yZXZpc2lvbl93YXJuaW5nKSwKKwkJCSAgICAgdm9jYWJfYmFkLCB2b2NhYl9nb29kLCB2b2NhYl9iYWQsIHZvY2FiX2dvb2QpOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKF8obmVlZF9iaXNlY3Rfc3RhcnRfd2FybmluZyksCisJCQkgICAgIHZvY2FiX2dvb2QsIHZvY2FiX2JhZCwgdm9jYWJfZ29vZCwgdm9jYWJfYmFkKTsKK30KKworc3RhdGljIGludCBiaXNlY3RfbmV4dF9jaGVjayhjb25zdCBzdHJ1Y3QgYmlzZWN0X3Rlcm1zICp0ZXJtcywKKwkJCSAgICAgY29uc3QgY2hhciAqY3VycmVudF90ZXJtKQoreworCWludCBtaXNzaW5nX2dvb2QgPSAxLCBtaXNzaW5nX2JhZCA9IDE7CisJY2hhciAqYmFkX3JlZiA9IHhzdHJmbXQoInJlZnMvYmlzZWN0LyVzIiwgdGVybXMtPnRlcm1fYmFkKTsKKwljaGFyICpnb29kX2dsb2IgPSB4c3RyZm10KCIlcy0qIiwgdGVybXMtPnRlcm1fZ29vZCk7CisKKwlpZiAocmVmX2V4aXN0cyhiYWRfcmVmKSkKKwkJbWlzc2luZ19iYWQgPSAwOworCisJZm9yX2VhY2hfZ2xvYl9yZWZfaW4obWFya19nb29kLCBnb29kX2dsb2IsICJyZWZzL2Jpc2VjdC8iLAorCQkJICAgICAodm9pZCAqKSAmbWlzc2luZ19nb29kKTsKKworCWZyZWUoZ29vZF9nbG9iKTsKKwlmcmVlKGJhZF9yZWYpOworCisJcmV0dXJuIGRlY2lkZV9uZXh0KHRlcm1zLCBjdXJyZW50X3Rlcm0sIG1pc3NpbmdfZ29vZCwgbWlzc2luZ19iYWQpOworfQorCitzdGF0aWMgaW50IGdldF90ZXJtcyhzdHJ1Y3QgYmlzZWN0X3Rlcm1zICp0ZXJtcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHN0ciA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwID0gTlVMTDsKKwlpbnQgcmVzID0gMDsKKworCWZwID0gZm9wZW4oZ2l0X3BhdGhfYmlzZWN0X3Rlcm1zKCksICJyIik7CisJaWYgKCFmcCkgeworCQlyZXMgPSAtMTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJZnJlZV90ZXJtcyh0ZXJtcyk7CisJc3RyYnVmX2dldGxpbmVfbGYoJnN0ciwgZnApOworCXRlcm1zLT50ZXJtX2JhZCA9IHN0cmJ1Zl9kZXRhY2goJnN0ciwgTlVMTCk7CisJc3RyYnVmX2dldGxpbmVfbGYoJnN0ciwgZnApOworCXRlcm1zLT50ZXJtX2dvb2QgPSBzdHJidWZfZGV0YWNoKCZzdHIsIE5VTEwpOworCitmaW5pc2g6CisJaWYgKGZwKQorCQlmY2xvc2UoZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzdHIpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgYmlzZWN0X3Rlcm1zKHN0cnVjdCBiaXNlY3RfdGVybXMgKnRlcm1zLCBjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKGdldF90ZXJtcyh0ZXJtcykpCisJCXJldHVybiBlcnJvcihfKCJubyB0ZXJtcyBkZWZpbmVkIikpOworCisJaWYgKG9wdGlvbiA9PSBOVUxMKSB7CisJCXByaW50ZihfKCJZb3VyIGN1cnJlbnQgdGVybXMgYXJlICVzIGZvciB0aGUgb2xkIHN0YXRlXG4iCisJCQkgImFuZCAlcyBmb3IgdGhlIG5ldyBzdGF0ZS5cbiIpLAorCQkgICAgICAgdGVybXMtPnRlcm1fZ29vZCwgdGVybXMtPnRlcm1fYmFkKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChvbmVfb2Yob3B0aW9uLCAiLS10ZXJtLWdvb2QiLCAiLS10ZXJtLW9sZCIsIE5VTEwpKQorCQlwcmludGYoIiVzXG4iLCB0ZXJtcy0+dGVybV9nb29kKTsKKwllbHNlIGlmIChvbmVfb2Yob3B0aW9uLCAiLS10ZXJtLWJhZCIsICItLXRlcm0tbmV3IiwgTlVMTCkpCisJCXByaW50ZigiJXNcbiIsIHRlcm1zLT50ZXJtX2JhZCk7CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorCQkJICAgICAgICJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6ICIKKwkJCSAgICAgICAiLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgIgorCQkJICAgICAgICItLXRlcm0tYmFkfC0tdGVybS1uZXcuIiksIG9wdGlvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiaXNlY3RfYXBwZW5kX2xvZ19xdW90ZWQoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IHJlcyA9IDA7CisJRklMRSAqZnAgPSBmb3BlbihnaXRfcGF0aF9iaXNlY3RfbG9nKCksICJhIik7CisJc3RydWN0IHN0cmJ1ZiBvcmlnX2FyZ3MgPSBTVFJCVUZfSU5JVDsKKworCWlmICghZnApCisJCXJldHVybiAtMTsKKworCWlmIChmcHJpbnRmKGZwLCAiZ2l0IGJpc2VjdCBzdGFydCIpIDwgMSkgeworCQlyZXMgPSAtMTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJc3FfcXVvdGVfYXJndigmb3JpZ19hcmdzLCBhcmd2KTsKKwlpZiAoZnByaW50ZihmcCwgIiVzXG4iLCBvcmlnX2FyZ3MuYnVmKSA8IDEpCisJCXJlcyA9IC0xOworCitmaW5pc2g6CisJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmb3JpZ19hcmdzKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGJpc2VjdF9zdGFydChzdHJ1Y3QgYmlzZWN0X3Rlcm1zICp0ZXJtcywgaW50IG5vX2NoZWNrb3V0LAorCQkJY29uc3QgY2hhciAqKmFyZ3YsIGludCBhcmdjKQoreworCWludCBpLCBoYXNfZG91YmxlX2Rhc2ggPSAwLCBtdXN0X3dyaXRlX3Rlcm1zID0gMCwgYmFkX3NlZW4gPSAwOworCWludCBmbGFncywgcGF0aHNwZWNfcG9zLCByZXMgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZXZzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHN0YXRlcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJidWYgc3RhcnRfaGVhZCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYmlzZWN0X25hbWVzID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpoZWFkOworCisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeSgpKQorCQlub19jaGVja291dCA9IDE7CisKKwkvKgorCSAqIENoZWNrIGZvciBvbmUgYmFkIGFuZCB0aGVuIHNvbWUgZ29vZCByZXZpc2lvbnMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7CisJCQloYXNfZG91YmxlX2Rhc2ggPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tY2hlY2tvdXQiKSkgeworCQkJbm9fY2hlY2tvdXQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10ZXJtLWdvb2QiKSB8fAorCQkJICFzdHJjbXAoYXJnLCAiLS10ZXJtLW9sZCIpKSB7CisJCQltdXN0X3dyaXRlX3Rlcm1zID0gMTsKKwkJCWZyZWUoKHZvaWQgKikgdGVybXMtPnRlcm1fZ29vZCk7CisJCQl0ZXJtcy0+dGVybV9nb29kID0geHN0cmR1cChhcmd2WysraV0pOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tdGVybS1nb29kPSIsICZhcmcpIHx8CisJCQkgICBza2lwX3ByZWZpeChhcmcsICItLXRlcm0tb2xkPSIsICZhcmcpKSB7CisJCQltdXN0X3dyaXRlX3Rlcm1zID0gMTsKKwkJCWZyZWUoKHZvaWQgKikgdGVybXMtPnRlcm1fZ29vZCk7CisJCQl0ZXJtcy0+dGVybV9nb29kID0geHN0cmR1cChhcmcpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS10ZXJtLWJhZCIpIHx8CisJCQkgIXN0cmNtcChhcmcsICItLXRlcm0tbmV3IikpIHsKKwkJCW11c3Rfd3JpdGVfdGVybXMgPSAxOworCQkJZnJlZSgodm9pZCAqKSB0ZXJtcy0+dGVybV9iYWQpOworCQkJdGVybXMtPnRlcm1fYmFkID0geHN0cmR1cChhcmd2WysraV0pOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tdGVybS1iYWQ9IiwgJmFyZykgfHwKKwkJCSAgIHNraXBfcHJlZml4KGFyZywgIi0tdGVybS1uZXc9IiwgJmFyZykpIHsKKwkJCW11c3Rfd3JpdGVfdGVybXMgPSAxOworCQkJZnJlZSgodm9pZCAqKSB0ZXJtcy0+dGVybV9iYWQpOworCQkJdGVybXMtPnRlcm1fYmFkID0geHN0cmR1cChhcmcpOworCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tIikgJiYKKwkJCSAhb25lX29mKGFyZywgIi0tdGVybS1nb29kIiwgIi0tdGVybS1iYWQiLCBOVUxMKSkgeworCQkJcmV0dXJuIGVycm9yKF8oInVucmVjb2duaXplZCBvcHRpb246ICclcyciKSwgYXJnKTsKKwkJfSBlbHNlIHsKKwkJCWNoYXIgKmNvbW1pdF9pZCA9IHhzdHJmbXQoIiVzXntjb21taXR9IiwgYXJnKTsKKwkJCWlmIChnZXRfb2lkKGNvbW1pdF9pZCwgJm9pZCkgJiYgaGFzX2RvdWJsZV9kYXNoKQorCQkJCWRpZShfKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkICIKKwkJCQkgICAgICAicmV2aXNpb24iKSwgYXJnKTsKKworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZXZzLCBvaWRfdG9faGV4KCZvaWQpKTsKKwkJCWZyZWUoY29tbWl0X2lkKTsKKwkJfQorCX0KKwlwYXRoc3BlY19wb3MgPSBpOworCisJLyoKKwkgKiBUaGUgdXNlciByYW4gImdpdCBiaXNlY3Qgc3RhcnQgPHNoYTE+IDxzaGExPiIsIGhlbmNlIGRpZCBub3QKKwkgKiBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIHRlcm1zLCBidXQgd2UgYXJlIGFscmVhZHkgc3RhcnRpbmcgdG8KKwkgKiBzZXQgcmVmZXJlbmNlcyBuYW1lZCB3aXRoIHRoZSBkZWZhdWx0IHRlcm1zLCBhbmQgd29uJ3QgYmUgYWJsZQorCSAqIHRvIGNoYW5nZSBhZnRlcndhcmRzLgorCSAqLworCWlmIChyZXZzLm5yKQorCQltdXN0X3dyaXRlX3Rlcm1zID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy5ucjsgaSsrKSB7CisJCWlmIChiYWRfc2VlbikgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMsIHRlcm1zLT50ZXJtX2dvb2QpOworCQl9IGVsc2UgeworCQkJYmFkX3NlZW4gPSAxOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMsIHRlcm1zLT50ZXJtX2JhZCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFZlcmlmeSBIRUFECisJICovCisJaGVhZCA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsICZoZWFkX29pZCwgJmZsYWdzKTsKKwlpZiAoIWhlYWQpCisJCWlmIChnZXRfb2lkKCJIRUFEIiwgJmhlYWRfb2lkKSkKKwkJCXJldHVybiBlcnJvcihfKCJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiKSk7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFyZSBiaXNlY3RpbmcKKwkgKi8KKwlpZiAoIWlzX2VtcHR5X29yX21pc3NpbmdfZmlsZShnaXRfcGF0aF9iaXNlY3Rfc3RhcnQoKSkpIHsKKwkJLyogUmVzZXQgdG8gdGhlIHJldiBmcm9tIHdoZXJlIHdlIHN0YXJ0ZWQgKi8KKwkJc3RyYnVmX3JlYWRfZmlsZSgmc3RhcnRfaGVhZCwgZ2l0X3BhdGhfYmlzZWN0X3N0YXJ0KCksIDApOworCQlzdHJidWZfdHJpbSgmc3RhcnRfaGVhZCk7CisJCWlmICghbm9fY2hlY2tvdXQpIHsKKwkJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJjaGVja291dCIsIHN0YXJ0X2hlYWQuYnVmLAorCQkJCQkgIi0tIiwgTlVMTCk7CisJCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndi5hcmd2LCBSVU5fR0lUX0NNRCkpIHsKKwkJCQlyZXMgPSBlcnJvcihfKCJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIgorCQkJCQkJICIgVHJ5ICdnaXQgYmlzZWN0IHN0YXJ0ICIKKwkJCQkJCSAiPHZhbGlkLWJyYW5jaD4nLiIpLAorCQkJCQkgICAgICAgc3RhcnRfaGVhZC5idWYpOworCQkJCWdvdG8gZmluaXNoOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogR2V0IHRoZSByZXYgZnJvbSB3aGVyZSB3ZSBzdGFydC4gKi8KKwkJaWYgKCFnZXRfb2lkKGhlYWQsICZoZWFkX29pZCkgJiYKKwkJICAgICFzdGFydHNfd2l0aChoZWFkLCAicmVmcy9oZWFkcy8iKSkgeworCQkJc3RyYnVmX3Jlc2V0KCZzdGFydF9oZWFkKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnN0YXJ0X2hlYWQsIG9pZF90b19oZXgoJmhlYWRfb2lkKSk7CisJCX0gZWxzZSBpZiAoIWdldF9vaWQoaGVhZCwgJmhlYWRfb2lkKSAmJgorCQkJICAgc2tpcF9wcmVmaXgoaGVhZCwgInJlZnMvaGVhZHMvIiwgJmhlYWQpKSB7CisJCQkvKgorCQkJICogVGhpcyBlcnJvciBtZXNzYWdlIHNob3VsZCBvbmx5IGJlIHRyaWdnZXJlZCBieQorCQkJICogY29naXRvIHVzYWdlLCBhbmQgY29naXRvIHVzZXJzIHNob3VsZCB1bmRlcnN0YW5kCisJCQkgKiBpdCByZWxhdGVzIHRvIGNnLXNlZWsuCisJCQkgKi8KKwkJCWlmICghaXNfZW1wdHlfb3JfbWlzc2luZ19maWxlKGdpdF9wYXRoX2hlYWRfbmFtZSgpKSkKKwkJCQlyZXR1cm4gZXJyb3IoXygid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIpKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnN0YXJ0X2hlYWQsIGhlYWQpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGVycm9yKF8oImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiKSk7CisJCX0KKwl9CisKKwkvKgorCSAqIEdldCByaWQgb2YgYW55IG9sZCBiaXNlY3Qgc3RhdGUuCisJICovCisJaWYgKGJpc2VjdF9jbGVhbl9zdGF0ZSgpKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIEluIGNhc2Ugb2YgbWlzdGFrZW4gcmV2cyBvciBjaGVja291dCBlcnJvciwgb3Igc2lnbmFscyByZWNlaXZlZCwKKwkgKiAiYmlzZWN0X2F1dG9fbmV4dCIgYmVsb3cgbWF5IGV4aXQgb3IgbWlzYmVoYXZlLgorCSAqIFdlIGhhdmUgdG8gdHJhcCB0aGlzIHRvIGJlIGFibGUgdG8gY2xlYW4gdXAgdXNpbmcKKwkgKiAiYmlzZWN0X2NsZWFuX3N0YXRlIi4KKwkgKi8KKworCS8qCisJICogV3JpdGUgbmV3IHN0YXJ0IHN0YXRlCisJICovCisJd3JpdGVfZmlsZShnaXRfcGF0aF9iaXNlY3Rfc3RhcnQoKSwgIiVzXG4iLCBzdGFydF9oZWFkLmJ1Zik7CisKKwlpZiAobm9fY2hlY2tvdXQpIHsKKwkJaWYgKGdldF9vaWQoc3RhcnRfaGVhZC5idWYsICZvaWQpIDwgMCkgeworCQkJcmVzID0gZXJyb3IoXygiaW52YWxpZCByZWY6ICclcyciKSwgc3RhcnRfaGVhZC5idWYpOworCQkJZ290byBmaW5pc2g7CisJCX0KKwkJaWYgKHVwZGF0ZV9yZWYoTlVMTCwgIkJJU0VDVF9IRUFEIiwgJm9pZCwgTlVMTCwgMCwKKwkJCSAgICAgICBVUERBVEVfUkVGU19NU0dfT05fRVJSKSkgeworCQkJcmVzID0gLTE7CisJCQlnb3RvIGZpbmlzaDsKKwkJfQorCX0KKworCWlmIChwYXRoc3BlY19wb3MgPCBhcmdjIC0gMSkKKwkJc3FfcXVvdGVfYXJndigmYmlzZWN0X25hbWVzLCBhcmd2ICsgcGF0aHNwZWNfcG9zKTsKKwl3cml0ZV9maWxlKGdpdF9wYXRoX2Jpc2VjdF9uYW1lcygpLCAiJXNcbiIsIGJpc2VjdF9uYW1lcy5idWYpOworCisJZm9yIChpID0gMDsgaSA8IHN0YXRlcy5ucjsgaSsrKQorCQlpZiAoYmlzZWN0X3dyaXRlKHN0YXRlcy5pdGVtc1tpXS5zdHJpbmcsCisJCQkJIHJldnMuaXRlbXNbaV0uc3RyaW5nLCB0ZXJtcywgMSkpIHsKKwkJCXJlcyA9IC0xOworCQkJZ290byBmaW5pc2g7CisJCX0KKworCWlmIChtdXN0X3dyaXRlX3Rlcm1zICYmIHdyaXRlX3Rlcm1zKHRlcm1zLT50ZXJtX2JhZCwKKwkJCQkJICAgIHRlcm1zLT50ZXJtX2dvb2QpKSB7CisJCXJlcyA9IC0xOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlyZXMgPSBiaXNlY3RfYXBwZW5kX2xvZ19xdW90ZWQoYXJndik7CisJaWYgKHJlcykKKwkJcmVzID0gLTE7CisKK2ZpbmlzaDoKKwlzdHJpbmdfbGlzdF9jbGVhcigmcmV2cywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcywgMCk7CisJc3RyYnVmX3JlbGVhc2UoJnN0YXJ0X2hlYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZiaXNlY3RfbmFtZXMpOworCXJldHVybiByZXM7Cit9CisKK2ludCBjbWRfYmlzZWN0X19oZWxwZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZW51bSB7CisJCU5FWFRfQUxMID0gMSwKKwkJV1JJVEVfVEVSTVMsCisJCUJJU0VDVF9DTEVBTl9TVEFURSwKKwkJQ0hFQ0tfRVhQRUNURURfUkVWUywKKwkJQklTRUNUX1JFU0VULAorCQlCSVNFQ1RfV1JJVEUsCisJCUNIRUNLX0FORF9TRVRfVEVSTVMsCisJCUJJU0VDVF9ORVhUX0NIRUNLLAorCQlCSVNFQ1RfVEVSTVMsCisJCUJJU0VDVF9TVEFSVAorCX0gY21kbW9kZSA9IDA7CisJaW50IG5vX2NoZWNrb3V0ID0gMCwgcmVzID0gMCwgbm9sb2cgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQ01ETU9ERSgwLCAibmV4dC1hbGwiLCAmY21kbW9kZSwKKwkJCSBOXygicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIpLCBORVhUX0FMTCksCisJCU9QVF9DTURNT0RFKDAsICJ3cml0ZS10ZXJtcyIsICZjbWRtb2RlLAorCQkJIE5fKCJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiKSwgV1JJVEVfVEVSTVMpLAorCQlPUFRfQ01ETU9ERSgwLCAiYmlzZWN0LWNsZWFuLXN0YXRlIiwgJmNtZG1vZGUsCisJCQkgTl8oImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIpLCBCSVNFQ1RfQ0xFQU5fU1RBVEUpLAorCQlPUFRfQ01ETU9ERSgwLCAiY2hlY2stZXhwZWN0ZWQtcmV2cyIsICZjbWRtb2RlLAorCQkJIE5fKCJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIpLCBDSEVDS19FWFBFQ1RFRF9SRVZTKSwKKwkJT1BUX0NNRE1PREUoMCwgImJpc2VjdC1yZXNldCIsICZjbWRtb2RlLAorCQkJIE5fKCJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIiksIEJJU0VDVF9SRVNFVCksCisJCU9QVF9DTURNT0RFKDAsICJiaXNlY3Qtd3JpdGUiLCAmY21kbW9kZSwKKwkJCSBOXygid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIpLCBCSVNFQ1RfV1JJVEUpLAorCQlPUFRfQ01ETU9ERSgwLCAiY2hlY2stYW5kLXNldC10ZXJtcyIsICZjbWRtb2RlLAorCQkJIE5fKCJjaGVjayBhbmQgc2V0IHRlcm1zIGluIGEgYmlzZWN0aW9uIHN0YXRlIiksIENIRUNLX0FORF9TRVRfVEVSTVMpLAorCQlPUFRfQ01ETU9ERSgwLCAiYmlzZWN0LW5leHQtY2hlY2siLCAmY21kbW9kZSwKKwkJCSBOXygiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIpLCBCSVNFQ1RfTkVYVF9DSEVDSyksCisJCU9QVF9DTURNT0RFKDAsICJiaXNlY3QtdGVybXMiLCAmY21kbW9kZSwKKwkJCSBOXygicHJpbnQgb3V0IHRoZSBiaXNlY3QgdGVybXMiKSwgQklTRUNUX1RFUk1TKSwKKwkJT1BUX0NNRE1PREUoMCwgImJpc2VjdC1zdGFydCIsICZjbWRtb2RlLAorCQkJIE5fKCJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iKSwgQklTRUNUX1NUQVJUKSwKKwkJT1BUX0JPT0woMCwgIm5vLWNoZWNrb3V0IiwgJm5vX2NoZWNrb3V0LAorCQkJIE5fKCJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IikpLAorCQlPUFRfQk9PTCgwLCAibm8tbG9nIiwgJm5vbG9nLAorCQkJIE5fKCJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3QgYmlzZWN0X3Rlcm1zIHRlcm1zID0geyAudGVybV9nb29kID0gTlVMTCwgLnRlcm1fYmFkID0gTlVMTCB9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfYmlzZWN0X2hlbHBlcl91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfCBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKTsKKworCWlmICghY21kbW9kZSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9iaXNlY3RfaGVscGVyX3VzYWdlLCBvcHRpb25zKTsKKworCXN3aXRjaCAoY21kbW9kZSkgeworCWNhc2UgTkVYVF9BTEw6CisJCXJlcyA9IGJpc2VjdF9uZXh0X2FsbCh0aGVfcmVwb3NpdG9yeSwgcHJlZml4LCBub19jaGVja291dCk7CisJCWJyZWFrOworCWNhc2UgV1JJVEVfVEVSTVM6CisJCWlmIChhcmdjICE9IDIpCisJCQlyZXR1cm4gZXJyb3IoXygiLS13cml0ZS10ZXJtcyByZXF1aXJlcyB0d28gYXJndW1lbnRzIikpOworCQlyZXR1cm4gd3JpdGVfdGVybXMoYXJndlswXSwgYXJndlsxXSk7CisJY2FzZSBCSVNFQ1RfQ0xFQU5fU1RBVEU6CisJCWlmIChhcmdjICE9IDApCisJCQlyZXR1cm4gZXJyb3IoXygiLS1iaXNlY3QtY2xlYW4tc3RhdGUgcmVxdWlyZXMgbm8gYXJndW1lbnRzIikpOworCQlyZXR1cm4gYmlzZWN0X2NsZWFuX3N0YXRlKCk7CisJY2FzZSBDSEVDS19FWFBFQ1RFRF9SRVZTOgorCQljaGVja19leHBlY3RlZF9yZXZzKGFyZ3YsIGFyZ2MpOworCQlyZXR1cm4gMDsKKwljYXNlIEJJU0VDVF9SRVNFVDoKKwkJaWYgKGFyZ2MgPiAxKQorCQkJcmV0dXJuIGVycm9yKF8oIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIpKTsKKwkJcmV0dXJuICEhYmlzZWN0X3Jlc2V0KGFyZ2MgPyBhcmd2WzBdIDogTlVMTCk7CisJY2FzZSBCSVNFQ1RfV1JJVEU6CisJCWlmIChhcmdjICE9IDQgJiYgYXJnYyAhPSA1KQorCQkJcmV0dXJuIGVycm9yKF8oIi0tYmlzZWN0LXdyaXRlIHJlcXVpcmVzIGVpdGhlciA0IG9yIDUgYXJndW1lbnRzIikpOworCQlzZXRfdGVybXMoJnRlcm1zLCBhcmd2WzNdLCBhcmd2WzJdKTsKKwkJcmVzID0gYmlzZWN0X3dyaXRlKGFyZ3ZbMF0sIGFyZ3ZbMV0sICZ0ZXJtcywgbm9sb2cpOworCQlicmVhazsKKwljYXNlIENIRUNLX0FORF9TRVRfVEVSTVM6CisJCWlmIChhcmdjICE9IDMpCisJCQlyZXR1cm4gZXJyb3IoXygiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIikpOworCQlzZXRfdGVybXMoJnRlcm1zLCBhcmd2WzJdLCBhcmd2WzFdKTsKKwkJcmVzID0gY2hlY2tfYW5kX3NldF90ZXJtcygmdGVybXMsIGFyZ3ZbMF0pOworCQlicmVhazsKKwljYXNlIEJJU0VDVF9ORVhUX0NIRUNLOgorCQlpZiAoYXJnYyAhPSAyICYmIGFyZ2MgIT0gMykKKwkJCXJldHVybiBlcnJvcihfKCItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiKSk7CisJCXNldF90ZXJtcygmdGVybXMsIGFyZ3ZbMV0sIGFyZ3ZbMF0pOworCQlyZXMgPSBiaXNlY3RfbmV4dF9jaGVjaygmdGVybXMsIGFyZ2MgPT0gMyA/IGFyZ3ZbMl0gOiBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBCSVNFQ1RfVEVSTVM6CisJCWlmIChhcmdjID4gMSkKKwkJCXJldHVybiBlcnJvcihfKCItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiKSk7CisJCXJlcyA9IGJpc2VjdF90ZXJtcygmdGVybXMsIGFyZ2MgPT0gMSA/IGFyZ3ZbMF0gOiBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBCSVNFQ1RfU1RBUlQ6CisJCXNldF90ZXJtcygmdGVybXMsICJiYWQiLCAiZ29vZCIpOworCQlyZXMgPSBiaXNlY3Rfc3RhcnQoJnRlcm1zLCBub19jaGVja291dCwgYXJndiwgYXJnYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBlcnJvcigiQlVHOiB1bmtub3duIHN1YmNvbW1hbmQgJyVkJyIsIGNtZG1vZGUpOworCX0KKwlmcmVlX3Rlcm1zKCZ0ZXJtcyk7CisKKwkvKgorCSAqIEhhbmRsZSBlYXJseSBzdWNjZXNzCisJICogRnJvbSBjaGVja19tZXJnZV9iYXNlcyA+IGNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQgPiBiaXNlY3RfbmV4dF9hbGwKKwkgKi8KKwlpZiAocmVzID09IEJJU0VDVF9JTlRFUk5BTF9TVUNDRVNTX01FUkdFX0JBU0UpCisJCXJlcyA9IEJJU0VDVF9PSzsKKworCXJldHVybiBhYnMocmVzKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYmxhbWUuYyBiL2J1aWx0aW4vYmxhbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjFjZWNkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ibGFtZS5jCkBAIC0wLDAgKzEsMTE2OCBAQAorLyoKKyAqIEJsYW1lCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDE0IGJ5IGl0cyBhdXRob3JzCisgKiBTZWUgQ09QWUlORyBmb3IgbGljZW5zaW5nIGNvbmRpdGlvbnMKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm1haWxtYXAuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicHJpby1xdWV1ZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgImxpbmUtcmFuZ2UuaCIKKyNpbmNsdWRlICJsaW5lLWxvZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiYmxhbWUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKK3N0YXRpYyBjaGFyIGJsYW1lX3VzYWdlW10gPSBOXygiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+Iik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpibGFtZV9vcHRfdXNhZ2VbXSA9IHsKKwlibGFtZV91c2FnZSwKKwkiIiwKKwlOXygiPHJldi1vcHRzPiBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGxvbmdlc3RfZmlsZTsKK3N0YXRpYyBpbnQgbG9uZ2VzdF9hdXRob3I7CitzdGF0aWMgaW50IG1heF9vcmlnX2RpZ2l0czsKK3N0YXRpYyBpbnQgbWF4X2RpZ2l0czsKK3N0YXRpYyBpbnQgbWF4X3Njb3JlX2RpZ2l0czsKK3N0YXRpYyBpbnQgc2hvd19yb290Oworc3RhdGljIGludCByZXZlcnNlOworc3RhdGljIGludCBibGFua19ib3VuZGFyeTsKK3N0YXRpYyBpbnQgaW5jcmVtZW50YWw7CitzdGF0aWMgaW50IHhkbF9vcHRzOworc3RhdGljIGludCBhYmJyZXYgPSAtMTsKK3N0YXRpYyBpbnQgbm9fd2hvbGVfZmlsZV9yZW5hbWU7CitzdGF0aWMgaW50IHNob3dfcHJvZ3Jlc3M7CitzdGF0aWMgY2hhciByZXBlYXRlZF9tZXRhX2NvbG9yW0NPTE9SX01BWExFTl07CitzdGF0aWMgaW50IGNvbG9yaW5nX21vZGU7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGlnbm9yZV9yZXZzX2ZpbGVfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IG1hcmtfdW5ibGFtYWJsZV9saW5lczsKK3N0YXRpYyBpbnQgbWFya19pZ25vcmVkX2xpbmVzOworCitzdGF0aWMgc3RydWN0IGRhdGVfbW9kZSBibGFtZV9kYXRlX21vZGUgPSB7IERBVEVfSVNPODYwMSB9Oworc3RhdGljIHNpemVfdCBibGFtZV9kYXRlX3dpZHRoOworCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG1haWxtYXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisjaWZuZGVmIERFQlVHX0JMQU1FCisjZGVmaW5lIERFQlVHX0JMQU1FIDAKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgYmxhbWVfbW92ZV9zY29yZTsKK3N0YXRpYyB1bnNpZ25lZCBibGFtZV9jb3B5X3Njb3JlOworCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBNRVRBSU5GT19TSE9XTgkJKDF1PDwxMikKKyNkZWZpbmUgTU9SRV9USEFOX09ORV9QQVRICSgxdTw8MTMpCisKK3N0cnVjdCBwcm9ncmVzc19pbmZvIHsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCWludCBibGFtZWRfbGluZXM7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqbnRoX2xpbmVfY2Iodm9pZCAqZGF0YSwgbG9uZyBsbm8pCit7CisJcmV0dXJuIGJsYW1lX250aF9saW5lKChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqKWRhdGEsIGxubyk7Cit9CisKKy8qCisgKiBJbmZvcm1hdGlvbiBvbiBjb21taXRzLCB1c2VkIGZvciBvdXRwdXQuCisgKi8KK3N0cnVjdCBjb21taXRfaW5mbyB7CisJc3RydWN0IHN0cmJ1ZiBhdXRob3I7CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfbWFpbDsKKwl0aW1lc3RhbXBfdCBhdXRob3JfdGltZTsKKwlzdHJ1Y3Qgc3RyYnVmIGF1dGhvcl90ejsKKworCS8qIGZpbGxlZCBvbmx5IHdoZW4gYXNrZWQgZm9yIGRldGFpbHMgKi8KKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcl9tYWlsOworCXRpbWVzdGFtcF90IGNvbW1pdHRlcl90aW1lOworCXN0cnVjdCBzdHJidWYgY29tbWl0dGVyX3R6OworCisJc3RydWN0IHN0cmJ1ZiBzdW1tYXJ5OworfTsKKworLyoKKyAqIFBhcnNlIGF1dGhvci9jb21taXR0ZXIgbGluZSBpbiB0aGUgY29tbWl0IG9iamVjdCBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgZ2V0X2FjX2xpbmUoY29uc3QgY2hhciAqaW5idWYsIGNvbnN0IGNoYXIgKndoYXQsCisJc3RydWN0IHN0cmJ1ZiAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqbWFpbCwKKwl0aW1lc3RhbXBfdCAqdGltZSwgc3RydWN0IHN0cmJ1ZiAqdHopCit7CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCXNpemVfdCBsZW4sIG1haWxsZW4sIG5hbWVsZW47CisJY2hhciAqdG1wLCAqZW5kcDsKKwljb25zdCBjaGFyICpuYW1lYnVmLCAqbWFpbGJ1ZjsKKworCXRtcCA9IHN0cnN0cihpbmJ1Ziwgd2hhdCk7CisJaWYgKCF0bXApCisJCWdvdG8gZXJyb3Jfb3V0OworCXRtcCArPSBzdHJsZW4od2hhdCk7CisJZW5kcCA9IHN0cmNocih0bXAsICdcbicpOworCWlmICghZW5kcCkKKwkJbGVuID0gc3RybGVuKHRtcCk7CisJZWxzZQorCQlsZW4gPSBlbmRwIC0gdG1wOworCisJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCB0bXAsIGxlbikpIHsKKwllcnJvcl9vdXQ6CisJCS8qIFVnaCAqLworCQl0bXAgPSAiKHVua25vd24pIjsKKwkJc3RyYnVmX2FkZHN0cihuYW1lLCB0bXApOworCQlzdHJidWZfYWRkc3RyKG1haWwsIHRtcCk7CisJCXN0cmJ1Zl9hZGRzdHIodHosIHRtcCk7CisJCSp0aW1lID0gMDsKKwkJcmV0dXJuOworCX0KKworCW5hbWVsZW4gPSBpZGVudC5uYW1lX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW47CisJbmFtZWJ1ZiA9IGlkZW50Lm5hbWVfYmVnaW47CisKKwltYWlsbGVuID0gaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luOworCW1haWxidWYgPSBpZGVudC5tYWlsX2JlZ2luOworCisJaWYgKGlkZW50LmRhdGVfYmVnaW4gJiYgaWRlbnQuZGF0ZV9lbmQpCisJCSp0aW1lID0gc3RydG91bChpZGVudC5kYXRlX2JlZ2luLCBOVUxMLCAxMCk7CisJZWxzZQorCQkqdGltZSA9IDA7CisKKwlpZiAoaWRlbnQudHpfYmVnaW4gJiYgaWRlbnQudHpfZW5kKQorCQlzdHJidWZfYWRkKHR6LCBpZGVudC50el9iZWdpbiwgaWRlbnQudHpfZW5kIC0gaWRlbnQudHpfYmVnaW4pOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cih0eiwgIih1bmtub3duKSIpOworCisJLyoKKwkgKiBOb3csIGNvbnZlcnQgYm90aCBuYW1lIGFuZCBlLW1haWwgdXNpbmcgbWFpbG1hcAorCSAqLworCW1hcF91c2VyKCZtYWlsbWFwLCAmbWFpbGJ1ZiwgJm1haWxsZW4sCisJCSAmbmFtZWJ1ZiwgJm5hbWVsZW4pOworCisJc3RyYnVmX2FkZGYobWFpbCwgIjwlLipzPiIsIChpbnQpbWFpbGxlbiwgbWFpbGJ1Zik7CisJc3RyYnVmX2FkZChuYW1lLCBuYW1lYnVmLCBuYW1lbGVuKTsKK30KKworc3RhdGljIHZvaWQgY29tbWl0X2luZm9faW5pdChzdHJ1Y3QgY29tbWl0X2luZm8gKmNpKQoreworCisJc3RyYnVmX2luaXQoJmNpLT5hdXRob3IsIDApOworCXN0cmJ1Zl9pbml0KCZjaS0+YXV0aG9yX21haWwsIDApOworCXN0cmJ1Zl9pbml0KCZjaS0+YXV0aG9yX3R6LCAwKTsKKwlzdHJidWZfaW5pdCgmY2ktPmNvbW1pdHRlciwgMCk7CisJc3RyYnVmX2luaXQoJmNpLT5jb21taXR0ZXJfbWFpbCwgMCk7CisJc3RyYnVmX2luaXQoJmNpLT5jb21taXR0ZXJfdHosIDApOworCXN0cmJ1Zl9pbml0KCZjaS0+c3VtbWFyeSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF9pbmZvX2Rlc3Ryb3koc3RydWN0IGNvbW1pdF9pbmZvICpjaSkKK3sKKworCXN0cmJ1Zl9yZWxlYXNlKCZjaS0+YXV0aG9yKTsKKwlzdHJidWZfcmVsZWFzZSgmY2ktPmF1dGhvcl9tYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmY2ktPmF1dGhvcl90eik7CisJc3RyYnVmX3JlbGVhc2UoJmNpLT5jb21taXR0ZXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZjaS0+Y29tbWl0dGVyX21haWwpOworCXN0cmJ1Zl9yZWxlYXNlKCZjaS0+Y29tbWl0dGVyX3R6KTsKKwlzdHJidWZfcmVsZWFzZSgmY2ktPnN1bW1hcnkpOworfQorCitzdGF0aWMgdm9pZCBnZXRfY29tbWl0X2luZm8oc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgIHN0cnVjdCBjb21taXRfaW5mbyAqcmV0LAorCQkJICAgIGludCBkZXRhaWxlZCkKK3sKKwlpbnQgbGVuOworCWNvbnN0IGNoYXIgKnN1YmplY3QsICplbmNvZGluZzsKKwljb25zdCBjaGFyICptZXNzYWdlOworCisJY29tbWl0X2luZm9faW5pdChyZXQpOworCisJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCW1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CisJZ2V0X2FjX2xpbmUobWVzc2FnZSwgIlxuYXV0aG9yICIsCisJCSAgICAmcmV0LT5hdXRob3IsICZyZXQtPmF1dGhvcl9tYWlsLAorCQkgICAgJnJldC0+YXV0aG9yX3RpbWUsICZyZXQtPmF1dGhvcl90eik7CisKKwlpZiAoIWRldGFpbGVkKSB7CisJCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtZXNzYWdlKTsKKwkJcmV0dXJuOworCX0KKworCWdldF9hY19saW5lKG1lc3NhZ2UsICJcbmNvbW1pdHRlciAiLAorCQkgICAgJnJldC0+Y29tbWl0dGVyLCAmcmV0LT5jb21taXR0ZXJfbWFpbCwKKwkJICAgICZyZXQtPmNvbW1pdHRlcl90aW1lLCAmcmV0LT5jb21taXR0ZXJfdHopOworCisJbGVuID0gZmluZF9jb21taXRfc3ViamVjdChtZXNzYWdlLCAmc3ViamVjdCk7CisJaWYgKGxlbikKKwkJc3RyYnVmX2FkZCgmcmV0LT5zdW1tYXJ5LCBzdWJqZWN0LCBsZW4pOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoJnJldC0+c3VtbWFyeSwgIiglcykiLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtZXNzYWdlKTsKK30KKworLyoKKyAqIFdyaXRlIG91dCBhbnkgc3VzcGVjdCBpbmZvcm1hdGlvbiB3aGljaCBkZXBlbmRzIG9uIHRoZSBwYXRoLiBUaGlzIG11c3QgYmUKKyAqIGhhbmRsZWQgc2VwYXJhdGVseSBmcm9tIGVtaXRfb25lX3N1c3BlY3RfZGV0YWlsKCksIGJlY2F1c2UgYSBnaXZlbiBjb21taXQKKyAqIG1heSBoYXZlIGNoYW5nZXMgaW4gbXVsdGlwbGUgcGF0aHMuIFNvIHRoaXMgbmVlZHMgdG8gYXBwZWFyIGVhY2ggdGltZQorICogd2UgbWVudGlvbiBhIG5ldyBncm91cC4KKyAqCisgKiBUbyBhbGxvdyBMRiBhbmQgb3RoZXIgbm9ucG9ydGFibGUgY2hhcmFjdGVycyBpbiBwYXRobmFtZXMsCisgKiB0aGV5IGFyZSBjLXN0eWxlIHF1b3RlZCBhcyBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX2ZpbGVuYW1lX2luZm8oc3RydWN0IGJsYW1lX29yaWdpbiAqc3VzcGVjdCkKK3sKKwlpZiAoc3VzcGVjdC0+cHJldmlvdXMpIHsKKwkJc3RydWN0IGJsYW1lX29yaWdpbiAqcHJldiA9IHN1c3BlY3QtPnByZXZpb3VzOworCQlwcmludGYoInByZXZpb3VzICVzICIsIG9pZF90b19oZXgoJnByZXYtPmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQl3cml0ZV9uYW1lX3F1b3RlZChwcmV2LT5wYXRoLCBzdGRvdXQsICdcbicpOworCX0KKwlwcmludGYoImZpbGVuYW1lICIpOworCXdyaXRlX25hbWVfcXVvdGVkKHN1c3BlY3QtPnBhdGgsIHN0ZG91dCwgJ1xuJyk7Cit9CisKKy8qCisgKiBQb3JjZWxhaW4vSW5jcmVtZW50YWwgZm9ybWF0IHdhbnRzIHRvIHNob3cgYSBsb3Qgb2YgZGV0YWlscyBwZXIKKyAqIGNvbW1pdC4gIEluc3RlYWQgb2YgcmVwZWF0aW5nIHRoaXMgZXZlcnkgbGluZSwgZW1pdCBpdCBvbmx5IG9uY2UsCisgKiB0aGUgZmlyc3QgdGltZSBlYWNoIGNvbW1pdCBhcHBlYXJzIGluIHRoZSBvdXRwdXQgKHVubGVzcyB0aGUKKyAqIHVzZXIgaGFzIHNwZWNpZmljYWxseSBhc2tlZCBmb3IgdXMgdG8gcmVwZWF0KS4KKyAqLworc3RhdGljIGludCBlbWl0X29uZV9zdXNwZWN0X2RldGFpbChzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0LCBpbnQgcmVwZWF0KQoreworCXN0cnVjdCBjb21taXRfaW5mbyBjaTsKKworCWlmICghcmVwZWF0ICYmIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIE1FVEFJTkZPX1NIT1dOKSkKKwkJcmV0dXJuIDA7CisKKwlzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyB8PSBNRVRBSU5GT19TSE9XTjsKKwlnZXRfY29tbWl0X2luZm8oc3VzcGVjdC0+Y29tbWl0LCAmY2ksIDEpOworCXByaW50ZigiYXV0aG9yICVzXG4iLCBjaS5hdXRob3IuYnVmKTsKKwlwcmludGYoImF1dGhvci1tYWlsICVzXG4iLCBjaS5hdXRob3JfbWFpbC5idWYpOworCXByaW50ZigiYXV0aG9yLXRpbWUgJSJQUkl0aW1lIlxuIiwgY2kuYXV0aG9yX3RpbWUpOworCXByaW50ZigiYXV0aG9yLXR6ICVzXG4iLCBjaS5hdXRob3JfdHouYnVmKTsKKwlwcmludGYoImNvbW1pdHRlciAlc1xuIiwgY2kuY29tbWl0dGVyLmJ1Zik7CisJcHJpbnRmKCJjb21taXR0ZXItbWFpbCAlc1xuIiwgY2kuY29tbWl0dGVyX21haWwuYnVmKTsKKwlwcmludGYoImNvbW1pdHRlci10aW1lICUiUFJJdGltZSJcbiIsIGNpLmNvbW1pdHRlcl90aW1lKTsKKwlwcmludGYoImNvbW1pdHRlci10eiAlc1xuIiwgY2kuY29tbWl0dGVyX3R6LmJ1Zik7CisJcHJpbnRmKCJzdW1tYXJ5ICVzXG4iLCBjaS5zdW1tYXJ5LmJ1Zik7CisJaWYgKHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJcHJpbnRmKCJib3VuZGFyeVxuIik7CisKKwljb21taXRfaW5mb19kZXN0cm95KCZjaSk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoZSBibGFtZV9lbnRyeSBpcyBmb3VuZCB0byBiZSBndWlsdHkgZm9yIHRoZSByYW5nZS4KKyAqIFNob3cgaXQgaW4gaW5jcmVtZW50YWwgb3V0cHV0LgorICovCitzdGF0aWMgdm9pZCBmb3VuZF9ndWlsdHlfZW50cnkoc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHByb2dyZXNzX2luZm8gKnBpID0gKHN0cnVjdCBwcm9ncmVzc19pbmZvICopZGF0YTsKKworCWlmIChpbmNyZW1lbnRhbCkgeworCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0ID0gZW50LT5zdXNwZWN0OworCisJCXByaW50ZigiJXMgJWQgJWQgJWRcbiIsCisJCSAgICAgICBvaWRfdG9faGV4KCZzdXNwZWN0LT5jb21taXQtPm9iamVjdC5vaWQpLAorCQkgICAgICAgZW50LT5zX2xubyArIDEsIGVudC0+bG5vICsgMSwgZW50LT5udW1fbGluZXMpOworCQllbWl0X29uZV9zdXNwZWN0X2RldGFpbChzdXNwZWN0LCAwKTsKKwkJd3JpdGVfZmlsZW5hbWVfaW5mbyhzdXNwZWN0KTsKKwkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCX0KKwlwaS0+YmxhbWVkX2xpbmVzICs9IGVudC0+bnVtX2xpbmVzOworCWRpc3BsYXlfcHJvZ3Jlc3MocGktPnByb2dyZXNzLCBwaS0+YmxhbWVkX2xpbmVzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF90aW1lKHRpbWVzdGFtcF90IHRpbWUsIGNvbnN0IGNoYXIgKnR6X3N0ciwKKwkJCSAgICAgICBpbnQgc2hvd19yYXdfdGltZSkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB0aW1lX2J1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZ0aW1lX2J1Zik7CisJaWYgKHNob3dfcmF3X3RpbWUpIHsKKwkJc3RyYnVmX2FkZGYoJnRpbWVfYnVmLCAiJSJQUkl0aW1lIiAlcyIsIHRpbWUsIHR6X3N0cik7CisJfQorCWVsc2UgeworCQljb25zdCBjaGFyICp0aW1lX3N0cjsKKwkJc2l6ZV90IHRpbWVfd2lkdGg7CisJCWludCB0ejsKKwkJdHogPSBhdG9pKHR6X3N0cik7CisJCXRpbWVfc3RyID0gc2hvd19kYXRlKHRpbWUsIHR6LCAmYmxhbWVfZGF0ZV9tb2RlKTsKKwkJc3RyYnVmX2FkZHN0cigmdGltZV9idWYsIHRpbWVfc3RyKTsKKwkJLyoKKwkJICogQWRkIHNwYWNlIHBhZGRpbmdzIHRvIHRpbWVfYnVmIHRvIGRpc3BsYXkgYSBmaXhlZCB3aWR0aAorCQkgKiBzdHJpbmcsIGFuZCB1c2UgdGltZV93aWR0aCBmb3IgZGlzcGxheSB3aWR0aCBjYWxpYnJhdGlvbi4KKwkJICovCisJCWZvciAodGltZV93aWR0aCA9IHV0Zjhfc3Ryd2lkdGgodGltZV9zdHIpOworCQkgICAgIHRpbWVfd2lkdGggPCBibGFtZV9kYXRlX3dpZHRoOworCQkgICAgIHRpbWVfd2lkdGgrKykKKwkJCXN0cmJ1Zl9hZGRjaCgmdGltZV9idWYsICcgJyk7CisJfQorCXJldHVybiB0aW1lX2J1Zi5idWY7Cit9CisKKyNkZWZpbmUgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVCAgICAgICgxVTw8MCkKKyNkZWZpbmUgT1VUUFVUX0xPTkdfT0JKRUNUX05BTUUgICAgICgxVTw8MSkKKyNkZWZpbmUgT1VUUFVUX1JBV19USU1FU1RBTVAgICAgICAgICgxVTw8MikKKyNkZWZpbmUgT1VUUFVUX1BPUkNFTEFJTiAgICAgICAgICAgICgxVTw8MykKKyNkZWZpbmUgT1VUUFVUX1NIT1dfTkFNRSAgICAgICAgICAgICgxVTw8NCkKKyNkZWZpbmUgT1VUUFVUX1NIT1dfTlVNQkVSICAgICAgICAgICgxVTw8NSkKKyNkZWZpbmUgT1VUUFVUX1NIT1dfU0NPUkUgICAgICAgICAgICgxVTw8NikKKyNkZWZpbmUgT1VUUFVUX05PX0FVVEhPUiAgICAgICAgICAgICgxVTw8NykKKyNkZWZpbmUgT1VUUFVUX1NIT1dfRU1BSUwgICAgICAgICAgICgxVTw8OCkKKyNkZWZpbmUgT1VUUFVUX0xJTkVfUE9SQ0VMQUlOICAgICAgICgxVTw8OSkKKyNkZWZpbmUgT1VUUFVUX0NPTE9SX0xJTkUgICAgICAgICAgICgxVTw8MTApCisjZGVmaW5lIE9VVFBVVF9TSE9XX0FHRV9XSVRIX0NPTE9SICAoMVU8PDExKQorCitzdGF0aWMgdm9pZCBlbWl0X3BvcmNlbGFpbl9kZXRhaWxzKHN0cnVjdCBibGFtZV9vcmlnaW4gKnN1c3BlY3QsIGludCByZXBlYXQpCit7CisJaWYgKGVtaXRfb25lX3N1c3BlY3RfZGV0YWlsKHN1c3BlY3QsIHJlcGVhdCkgfHwKKwkgICAgKHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgTU9SRV9USEFOX09ORV9QQVRIKSkKKwkJd3JpdGVfZmlsZW5hbWVfaW5mbyhzdXNwZWN0KTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9wb3JjZWxhaW4oc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwKKwkJCSAgIGludCBvcHQpCit7CisJaW50IHJlcGVhdCA9IG9wdCAmIE9VVFBVVF9MSU5FX1BPUkNFTEFJTjsKKwlpbnQgY250OworCWNvbnN0IGNoYXIgKmNwOworCXN0cnVjdCBibGFtZV9vcmlnaW4gKnN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7CisJY2hhciBoZXhbR0lUX01BWF9IRVhTWiArIDFdOworCisJb2lkX3RvX2hleF9yKGhleCwgJnN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJcHJpbnRmKCIlcyAlZCAlZCAlZFxuIiwKKwkgICAgICAgaGV4LAorCSAgICAgICBlbnQtPnNfbG5vICsgMSwKKwkgICAgICAgZW50LT5sbm8gKyAxLAorCSAgICAgICBlbnQtPm51bV9saW5lcyk7CisJZW1pdF9wb3JjZWxhaW5fZGV0YWlscyhzdXNwZWN0LCByZXBlYXQpOworCisJY3AgPSBibGFtZV9udGhfbGluZShzYiwgZW50LT5sbm8pOworCWZvciAoY250ID0gMDsgY250IDwgZW50LT5udW1fbGluZXM7IGNudCsrKSB7CisJCWNoYXIgY2g7CisJCWlmIChjbnQpIHsKKwkJCXByaW50ZigiJXMgJWQgJWRcbiIsIGhleCwKKwkJCSAgICAgICBlbnQtPnNfbG5vICsgMSArIGNudCwKKwkJCSAgICAgICBlbnQtPmxubyArIDEgKyBjbnQpOworCQkJaWYgKHJlcGVhdCkKKwkJCQllbWl0X3BvcmNlbGFpbl9kZXRhaWxzKHN1c3BlY3QsIDEpOworCQl9CisJCXB1dGNoYXIoJ1x0Jyk7CisJCWRvIHsKKwkJCWNoID0gKmNwKys7CisJCQlwdXRjaGFyKGNoKTsKKwkJfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJgorCQkJIGNwIDwgc2ItPmZpbmFsX2J1ZiArIHNiLT5maW5hbF9idWZfc2l6ZSk7CisJfQorCisJaWYgKHNiLT5maW5hbF9idWZfc2l6ZSAmJiBjcFstMV0gIT0gJ1xuJykKKwkJcHV0Y2hhcignXG4nKTsKK30KKworc3RhdGljIHN0cnVjdCBjb2xvcl9maWVsZCB7CisJdGltZXN0YW1wX3QgaG9wOworCWNoYXIgY29sW0NPTE9SX01BWExFTl07Cit9ICpjb2xvcmZpZWxkOworc3RhdGljIGludCBjb2xvcmZpZWxkX25yLCBjb2xvcmZpZWxkX2FsbG9jOworCitzdGF0aWMgdm9pZCBwYXJzZV9jb2xvcl9maWVsZHMoY29uc3QgY2hhciAqcykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWVudW0geyBFWFBFQ1RfREFURSwgRVhQRUNUX0NPTE9SIH0gbmV4dCA9IEVYUEVDVF9DT0xPUjsKKworCWNvbG9yZmllbGRfbnIgPSAwOworCisJLyogSWRlYWxseSB0aGlzIHdvdWxkIGJlIHN0cmlwcGVkIGFuZCBzcGxpdCBhdCB0aGUgc2FtZSB0aW1lPyAqLworCXN0cmluZ19saXN0X3NwbGl0KCZsLCBzLCAnLCcsIC0xKTsKKwlBTExPQ19HUk9XKGNvbG9yZmllbGQsIGNvbG9yZmllbGRfbnIgKyAxLCBjb2xvcmZpZWxkX2FsbG9jKTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmwpIHsKKwkJc3dpdGNoIChuZXh0KSB7CisJCWNhc2UgRVhQRUNUX0RBVEU6CisJCQljb2xvcmZpZWxkW2NvbG9yZmllbGRfbnJdLmhvcCA9IGFwcHJveGlkYXRlKGl0ZW0tPnN0cmluZyk7CisJCQluZXh0ID0gRVhQRUNUX0NPTE9SOworCQkJY29sb3JmaWVsZF9ucisrOworCQkJQUxMT0NfR1JPVyhjb2xvcmZpZWxkLCBjb2xvcmZpZWxkX25yICsgMSwgY29sb3JmaWVsZF9hbGxvYyk7CisJCQlicmVhazsKKwkJY2FzZSBFWFBFQ1RfQ09MT1I6CisJCQlpZiAoY29sb3JfcGFyc2UoaXRlbS0+c3RyaW5nLCBjb2xvcmZpZWxkW2NvbG9yZmllbGRfbnJdLmNvbCkpCisJCQkJZGllKF8oImV4cGVjdGluZyBhIGNvbG9yOiAlcyIpLCBpdGVtLT5zdHJpbmcpOworCQkJbmV4dCA9IEVYUEVDVF9EQVRFOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobmV4dCA9PSBFWFBFQ1RfQ09MT1IpCisJCWRpZShfKCJtdXN0IGVuZCB3aXRoIGEgY29sb3IiKSk7CisKKwljb2xvcmZpZWxkW2NvbG9yZmllbGRfbnJdLmhvcCA9IFRJTUVfTUFYOworCXN0cmluZ19saXN0X2NsZWFyKCZsLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZGVmYXVsdF9jb2xvcl9ieV9hZ2Uodm9pZCkKK3sKKwlwYXJzZV9jb2xvcl9maWVsZHMoImJsdWUsMTIgbW9udGggYWdvLHdoaXRlLDEgbW9udGggYWdvLHJlZCIpOworfQorCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVfbGluZV9oZWF0KHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LCBjb25zdCBjaGFyICoqZGVzdF9jb2xvcikKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGNvbW1pdF9pbmZvIGNpOworCWdldF9jb21taXRfaW5mbyhlbnQtPnN1c3BlY3QtPmNvbW1pdCwgJmNpLCAxKTsKKworCXdoaWxlIChpIDwgY29sb3JmaWVsZF9uciAmJiBjaS5hdXRob3JfdGltZSA+IGNvbG9yZmllbGRbaV0uaG9wKQorCQlpKys7CisKKwkqZGVzdF9jb2xvciA9IGNvbG9yZmllbGRbaV0uY29sOworfQorCitzdGF0aWMgdm9pZCBlbWl0X290aGVyKHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsIGludCBvcHQpCit7CisJaW50IGNudDsKKwljb25zdCBjaGFyICpjcDsKKwlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0ID0gZW50LT5zdXNwZWN0OworCXN0cnVjdCBjb21taXRfaW5mbyBjaTsKKwljaGFyIGhleFtHSVRfTUFYX0hFWFNaICsgMV07CisJaW50IHNob3dfcmF3X3RpbWUgPSAhIShvcHQgJiBPVVRQVVRfUkFXX1RJTUVTVEFNUCk7CisJY29uc3QgY2hhciAqZGVmYXVsdF9jb2xvciA9IE5VTEwsICpjb2xvciA9IE5VTEwsICpyZXNldCA9IE5VTEw7CisKKwlnZXRfY29tbWl0X2luZm8oc3VzcGVjdC0+Y29tbWl0LCAmY2ksIDEpOworCW9pZF90b19oZXhfcihoZXgsICZzdXNwZWN0LT5jb21taXQtPm9iamVjdC5vaWQpOworCisJY3AgPSBibGFtZV9udGhfbGluZShzYiwgZW50LT5sbm8pOworCisJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX0FHRV9XSVRIX0NPTE9SKSB7CisJCWRldGVybWluZV9saW5lX2hlYXQoZW50LCAmZGVmYXVsdF9jb2xvcik7CisJCWNvbG9yID0gZGVmYXVsdF9jb2xvcjsKKwkJcmVzZXQgPSBHSVRfQ09MT1JfUkVTRVQ7CisJfQorCisJZm9yIChjbnQgPSAwOyBjbnQgPCBlbnQtPm51bV9saW5lczsgY250KyspIHsKKwkJY2hhciBjaDsKKwkJaW50IGxlbmd0aCA9IChvcHQgJiBPVVRQVVRfTE9OR19PQkpFQ1RfTkFNRSkgPyB0aGVfaGFzaF9hbGdvLT5oZXhzeiA6IGFiYnJldjsKKworCQlpZiAob3B0ICYgT1VUUFVUX0NPTE9SX0xJTkUpIHsKKwkJCWlmIChjbnQgPiAwKSB7CisJCQkJY29sb3IgPSByZXBlYXRlZF9tZXRhX2NvbG9yOworCQkJCXJlc2V0ID0gR0lUX0NPTE9SX1JFU0VUOworCQkJfSBlbHNlICB7CisJCQkJY29sb3IgPSBkZWZhdWx0X2NvbG9yID8gZGVmYXVsdF9jb2xvciA6IE5VTEw7CisJCQkJcmVzZXQgPSBkZWZhdWx0X2NvbG9yID8gR0lUX0NPTE9SX1JFU0VUIDogTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAoY29sb3IpCisJCQlmcHV0cyhjb2xvciwgc3Rkb3V0KTsKKworCQlpZiAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQlpZiAoYmxhbmtfYm91bmRhcnkpCisJCQkJbWVtc2V0KGhleCwgJyAnLCBsZW5ndGgpOworCQkJZWxzZSBpZiAoIShvcHQgJiBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUKSkgeworCQkJCWxlbmd0aC0tOworCQkJCXB1dGNoYXIoJ14nKTsKKwkJCX0KKwkJfQorCisJCWlmIChtYXJrX3VuYmxhbWFibGVfbGluZXMgJiYgZW50LT51bmJsYW1hYmxlKSB7CisJCQlsZW5ndGgtLTsKKwkJCXB1dGNoYXIoJyonKTsKKwkJfQorCQlpZiAobWFya19pZ25vcmVkX2xpbmVzICYmIGVudC0+aWdub3JlZCkgeworCQkJbGVuZ3RoLS07CisJCQlwdXRjaGFyKCc/Jyk7CisJCX0KKwkJcHJpbnRmKCIlLipzIiwgbGVuZ3RoLCBoZXgpOworCQlpZiAob3B0ICYgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVCkgeworCQkJY29uc3QgY2hhciAqbmFtZTsKKwkJCWlmIChvcHQgJiBPVVRQVVRfU0hPV19FTUFJTCkKKwkJCQluYW1lID0gY2kuYXV0aG9yX21haWwuYnVmOworCQkJZWxzZQorCQkJCW5hbWUgPSBjaS5hdXRob3IuYnVmOworCQkJcHJpbnRmKCJcdCglMTBzXHQlMTBzXHQlZCkiLCBuYW1lLAorCQkJICAgICAgIGZvcm1hdF90aW1lKGNpLmF1dGhvcl90aW1lLCBjaS5hdXRob3JfdHouYnVmLAorCQkJCQkgICBzaG93X3Jhd190aW1lKSwKKwkJCSAgICAgICBlbnQtPmxubyArIDEgKyBjbnQpOworCQl9IGVsc2UgeworCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX1NDT1JFKQorCQkJCXByaW50ZigiICUqZCAlMDJkIiwKKwkJCQkgICAgICAgbWF4X3Njb3JlX2RpZ2l0cywgZW50LT5zY29yZSwKKwkJCQkgICAgICAgZW50LT5zdXNwZWN0LT5yZWZjbnQpOworCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX05BTUUpCisJCQkJcHJpbnRmKCIgJS0qLipzIiwgbG9uZ2VzdF9maWxlLCBsb25nZXN0X2ZpbGUsCisJCQkJICAgICAgIHN1c3BlY3QtPnBhdGgpOworCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX05VTUJFUikKKwkJCQlwcmludGYoIiAlKmQiLCBtYXhfb3JpZ19kaWdpdHMsCisJCQkJICAgICAgIGVudC0+c19sbm8gKyAxICsgY250KTsKKworCQkJaWYgKCEob3B0ICYgT1VUUFVUX05PX0FVVEhPUikpIHsKKwkJCQljb25zdCBjaGFyICpuYW1lOworCQkJCWludCBwYWQ7CisJCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX0VNQUlMKQorCQkJCQluYW1lID0gY2kuYXV0aG9yX21haWwuYnVmOworCQkJCWVsc2UKKwkJCQkJbmFtZSA9IGNpLmF1dGhvci5idWY7CisJCQkJcGFkID0gbG9uZ2VzdF9hdXRob3IgLSB1dGY4X3N0cndpZHRoKG5hbWUpOworCQkJCXByaW50ZigiICglcyUqcyAlMTBzIiwKKwkJCQkgICAgICAgbmFtZSwgcGFkLCAiIiwKKwkJCQkgICAgICAgZm9ybWF0X3RpbWUoY2kuYXV0aG9yX3RpbWUsCisJCQkJCQkgICBjaS5hdXRob3JfdHouYnVmLAorCQkJCQkJICAgc2hvd19yYXdfdGltZSkpOworCQkJfQorCQkJcHJpbnRmKCIgJSpkKSAiLAorCQkJICAgICAgIG1heF9kaWdpdHMsIGVudC0+bG5vICsgMSArIGNudCk7CisJCX0KKwkJaWYgKHJlc2V0KQorCQkJZnB1dHMocmVzZXQsIHN0ZG91dCk7CisJCWRvIHsKKwkJCWNoID0gKmNwKys7CisJCQlwdXRjaGFyKGNoKTsKKwkJfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJgorCQkJIGNwIDwgc2ItPmZpbmFsX2J1ZiArIHNiLT5maW5hbF9idWZfc2l6ZSk7CisJfQorCisJaWYgKHNiLT5maW5hbF9idWZfc2l6ZSAmJiBjcFstMV0gIT0gJ1xuJykKKwkJcHV0Y2hhcignXG4nKTsKKworCWNvbW1pdF9pbmZvX2Rlc3Ryb3koJmNpKTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0KHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgaW50IG9wdGlvbikKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKworCWlmIChvcHRpb24gJiBPVVRQVVRfUE9SQ0VMQUlOKSB7CisJCWZvciAoZW50ID0gc2ItPmVudDsgZW50OyBlbnQgPSBlbnQtPm5leHQpIHsKKwkJCWludCBjb3VudCA9IDA7CisJCQlzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0OworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZW50LT5zdXNwZWN0LT5jb21taXQ7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNT1JFX1RIQU5fT05FX1BBVEgpCisJCQkJY29udGludWU7CisJCQlmb3IgKHN1c3BlY3QgPSBnZXRfYmxhbWVfc3VzcGVjdHMoY29tbWl0KTsgc3VzcGVjdDsgc3VzcGVjdCA9IHN1c3BlY3QtPm5leHQpIHsKKwkJCQlpZiAoc3VzcGVjdC0+Z3VpbHR5ICYmIGNvdW50KyspIHsKKwkJCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gTU9SRV9USEFOX09ORV9QQVRIOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCWlmIChvcHRpb24gJiBPVVRQVVRfUE9SQ0VMQUlOKQorCQkJZW1pdF9wb3JjZWxhaW4oc2IsIGVudCwgb3B0aW9uKTsKKwkJZWxzZSB7CisJCQllbWl0X290aGVyKHNiLCBlbnQsIG9wdGlvbik7CisJCX0KKwl9Cit9CisKKy8qCisgKiBBZGQgcGhvbnkgZ3JhZnRzIGZvciB1c2Ugd2l0aCAtUzsgdGhpcyBpcyBwcmltYXJpbHkgdG8KKyAqIHN1cHBvcnQgZ2l0J3MgY3Zzc2VydmVyIHRoYXQgd2FudHMgdG8gZ2l2ZSBhIGxpbmVhciBoaXN0b3J5CisgKiB0byBpdHMgY2xpZW50cy4KKyAqLworc3RhdGljIGludCByZWFkX2FuY2VzdHJ5KGNvbnN0IGNoYXIgKmdyYWZ0X2ZpbGUpCit7CisJRklMRSAqZnAgPSBmb3Blbl9vcl93YXJuKGdyYWZ0X2ZpbGUsICJyIik7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAoIWZwKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIGZwLCAnXG4nKSkgeworCQkvKiBUaGUgZm9ybWF0IGlzIGp1c3QgIkNvbW1pdCBQYXJlbnQxIFBhcmVudDIgLi4uXG4iICovCisJCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0ID0gcmVhZF9ncmFmdF9saW5lKCZidWYpOworCQlpZiAoZ3JhZnQpCisJCQlyZWdpc3Rlcl9jb21taXRfZ3JhZnQodGhlX3JlcG9zaXRvcnksIGdyYWZ0LCAwKTsKKwl9CisJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGRhdGVfYXV0b19hYmJyZXYoaW50IGF1dG9fYWJicmV2LCBzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0KQoreworCWNvbnN0IGNoYXIgKnVuaXEgPSBmaW5kX3VuaXF1ZV9hYmJyZXYoJnN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQkJICAgICAgYXV0b19hYmJyZXYpOworCWludCBsZW4gPSBzdHJsZW4odW5pcSk7CisJaWYgKGF1dG9fYWJicmV2IDwgbGVuKQorCQlyZXR1cm4gbGVuOworCXJldHVybiBhdXRvX2FiYnJldjsKK30KKworLyoKKyAqIEhvdyBtYW55IGNvbHVtbnMgZG8gd2UgbmVlZCB0byBzaG93IGxpbmUgbnVtYmVycywgYXV0aG9ycywKKyAqIGFuZCBmaWxlbmFtZXM/CisgKi8KK3N0YXRpYyB2b2lkIGZpbmRfYWxpZ25tZW50KHN0cnVjdCBibGFtZV9zY29yZWJvYXJkICpzYiwgaW50ICpvcHRpb24pCit7CisJaW50IGxvbmdlc3Rfc3JjX2xpbmVzID0gMDsKKwlpbnQgbG9uZ2VzdF9kc3RfbGluZXMgPSAwOworCXVuc2lnbmVkIGxhcmdlc3Rfc2NvcmUgPSAwOworCXN0cnVjdCBibGFtZV9lbnRyeSAqZTsKKwlpbnQgY29tcHV0ZV9hdXRvX2FiYnJldiA9IChhYmJyZXYgPCAwKTsKKwlpbnQgYXV0b19hYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKworCWZvciAoZSA9IHNiLT5lbnQ7IGU7IGUgPSBlLT5uZXh0KSB7CisJCXN0cnVjdCBibGFtZV9vcmlnaW4gKnN1c3BlY3QgPSBlLT5zdXNwZWN0OworCQlpbnQgbnVtOworCisJCWlmIChjb21wdXRlX2F1dG9fYWJicmV2KQorCQkJYXV0b19hYmJyZXYgPSB1cGRhdGVfYXV0b19hYmJyZXYoYXV0b19hYmJyZXYsIHN1c3BlY3QpOworCQlpZiAoc3RyY21wKHN1c3BlY3QtPnBhdGgsIHNiLT5wYXRoKSkKKwkJCSpvcHRpb24gfD0gT1VUUFVUX1NIT1dfTkFNRTsKKwkJbnVtID0gc3RybGVuKHN1c3BlY3QtPnBhdGgpOworCQlpZiAobG9uZ2VzdF9maWxlIDwgbnVtKQorCQkJbG9uZ2VzdF9maWxlID0gbnVtOworCQlpZiAoIShzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIE1FVEFJTkZPX1NIT1dOKSkgeworCQkJc3RydWN0IGNvbW1pdF9pbmZvIGNpOworCQkJc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gTUVUQUlORk9fU0hPV047CisJCQlnZXRfY29tbWl0X2luZm8oc3VzcGVjdC0+Y29tbWl0LCAmY2ksIDEpOworCQkJaWYgKCpvcHRpb24gJiBPVVRQVVRfU0hPV19FTUFJTCkKKwkJCQludW0gPSB1dGY4X3N0cndpZHRoKGNpLmF1dGhvcl9tYWlsLmJ1Zik7CisJCQllbHNlCisJCQkJbnVtID0gdXRmOF9zdHJ3aWR0aChjaS5hdXRob3IuYnVmKTsKKwkJCWlmIChsb25nZXN0X2F1dGhvciA8IG51bSkKKwkJCQlsb25nZXN0X2F1dGhvciA9IG51bTsKKwkJCWNvbW1pdF9pbmZvX2Rlc3Ryb3koJmNpKTsKKwkJfQorCQludW0gPSBlLT5zX2xubyArIGUtPm51bV9saW5lczsKKwkJaWYgKGxvbmdlc3Rfc3JjX2xpbmVzIDwgbnVtKQorCQkJbG9uZ2VzdF9zcmNfbGluZXMgPSBudW07CisJCW51bSA9IGUtPmxubyArIGUtPm51bV9saW5lczsKKwkJaWYgKGxvbmdlc3RfZHN0X2xpbmVzIDwgbnVtKQorCQkJbG9uZ2VzdF9kc3RfbGluZXMgPSBudW07CisJCWlmIChsYXJnZXN0X3Njb3JlIDwgYmxhbWVfZW50cnlfc2NvcmUoc2IsIGUpKQorCQkJbGFyZ2VzdF9zY29yZSA9IGJsYW1lX2VudHJ5X3Njb3JlKHNiLCBlKTsKKwl9CisJbWF4X29yaWdfZGlnaXRzID0gZGVjaW1hbF93aWR0aChsb25nZXN0X3NyY19saW5lcyk7CisJbWF4X2RpZ2l0cyA9IGRlY2ltYWxfd2lkdGgobG9uZ2VzdF9kc3RfbGluZXMpOworCW1heF9zY29yZV9kaWdpdHMgPSBkZWNpbWFsX3dpZHRoKGxhcmdlc3Rfc2NvcmUpOworCisJaWYgKGNvbXB1dGVfYXV0b19hYmJyZXYpCisJCS8qIG9uZSBtb3JlIGFiYnJldiBsZW5ndGggaXMgbmVlZGVkIGZvciB0aGUgYm91bmRhcnkgY29tbWl0ICovCisJCWFiYnJldiA9IGF1dG9fYWJicmV2ICsgMTsKK30KKworc3RhdGljIHZvaWQgc2FuaXR5X2NoZWNrX29uX2ZhaWwoc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgKnNiLCBpbnQgYmFhKQoreworCWludCBvcHQgPSBPVVRQVVRfU0hPV19TQ09SRSB8IE9VVFBVVF9TSE9XX05VTUJFUiB8IE9VVFBVVF9TSE9XX05BTUU7CisJZmluZF9hbGlnbm1lbnQoc2IsICZvcHQpOworCW91dHB1dChzYiwgb3B0KTsKKwlkaWUoIkJhYSAlZCEiLCBiYWEpOworfQorCitzdGF0aWMgdW5zaWduZWQgcGFyc2Vfc2NvcmUoY29uc3QgY2hhciAqYXJnKQoreworCWNoYXIgKmVuZDsKKwl1bnNpZ25lZCBsb25nIHNjb3JlID0gc3RydG91bChhcmcsICZlbmQsIDEwKTsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNjb3JlOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWRkX3ByZWZpeChjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwLCBwYXRoKTsKK30KKworc3RhdGljIGludCBnaXRfYmxhbWVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImJsYW1lLnNob3dyb290IikpIHsKKwkJc2hvd19yb290ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuYmxhbmtib3VuZGFyeSIpKSB7CisJCWJsYW5rX2JvdW5kYXJ5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuc2hvd2VtYWlsIikpIHsKKwkJaW50ICpvdXRwdXRfb3B0aW9uID0gY2I7CisJCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQkqb3V0cHV0X29wdGlvbiB8PSBPVVRQVVRfU0hPV19FTUFJTDsKKwkJZWxzZQorCQkJKm91dHB1dF9vcHRpb24gJj0gfk9VVFBVVF9TSE9XX0VNQUlMOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuZGF0ZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcGFyc2VfZGF0ZV9mb3JtYXQodmFsdWUsICZibGFtZV9kYXRlX21vZGUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuaWdub3JlcmV2c2ZpbGUiKSkgeworCQljb25zdCBjaGFyICpzdHI7CisJCWludCByZXQ7CisKKwkJcmV0ID0gZ2l0X2NvbmZpZ19wYXRobmFtZSgmc3RyLCB2YXIsIHZhbHVlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXN0cmluZ19saXN0X2luc2VydCgmaWdub3JlX3JldnNfZmlsZV9saXN0LCBzdHIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUubWFya3VuYmxhbWFibGVsaW5lcyIpKSB7CisJCW1hcmtfdW5ibGFtYWJsZV9saW5lcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImJsYW1lLm1hcmtpZ25vcmVkbGluZXMiKSkgeworCQltYXJrX2lnbm9yZWRfbGluZXMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ibGFtZS5yZXBlYXRlZGxpbmVzIikpIHsKKwkJaWYgKGNvbG9yX3BhcnNlX21lbSh2YWx1ZSwgc3RybGVuKHZhbHVlKSwgcmVwZWF0ZWRfbWV0YV9jb2xvcikpCisJCQl3YXJuaW5nKF8oImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIiksCisJCQkJdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuYmxhbWUuaGlnaGxpZ2h0cmVjZW50IikpIHsKKwkJcGFyc2VfY29sb3JfZmllbGRzKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuY29sb3JpbmciKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInJlcGVhdGVkTGluZXMiKSkgeworCQkJY29sb3JpbmdfbW9kZSB8PSBPVVRQVVRfQ09MT1JfTElORTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHZhbHVlLCAiaGlnaGxpZ2h0UmVjZW50IikpIHsKKwkJCWNvbG9yaW5nX21vZGUgfD0gT1VUUFVUX1NIT1dfQUdFX1dJVEhfQ09MT1I7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm5vbmUiKSkgeworCQkJY29sb3JpbmdfbW9kZSAmPSB+KE9VVFBVVF9DT0xPUl9MSU5FIHwKKwkJCQkJICAgIE9VVFBVVF9TSE9XX0FHRV9XSVRIX0NPTE9SKTsKKwkJfSBlbHNlIHsKKwkJCXdhcm5pbmcoXygiaW52YWxpZCB2YWx1ZSBmb3IgYmxhbWUuY29sb3JpbmciKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmIChnaXRfZGlmZl9oZXVyaXN0aWNfY29uZmlnKHZhciwgdmFsdWUsIGNiKSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAodXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgYmxhbWVfY29weV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb24sIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqb3B0ID0gb3B0aW9uLT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCS8qCisJICogLUMgZW5hYmxlcyBjb3B5IGZyb20gcmVtb3ZlZCBmaWxlczsKKwkgKiAtQyAtQyBlbmFibGVzIGNvcHkgZnJvbSBleGlzdGluZyBmaWxlcywgYnV0IG9ubHkKKwkgKiAgICAgICB3aGVuIGJsYW1pbmcgYSBuZXcgZmlsZTsKKwkgKiAtQyAtQyAtQyBlbmFibGVzIGNvcHkgZnJvbSBleGlzdGluZyBmaWxlcyBmb3IKKwkgKiAgICAgICAgICBldmVyeWJvZHkKKwkgKi8KKwlpZiAoKm9wdCAmIFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVIpCisJCSpvcHQgfD0gUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFU1Q7CisJaWYgKCpvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFkpCisJCSpvcHQgfD0gUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUjsKKwkqb3B0IHw9IFBJQ0tBWEVfQkxBTUVfQ09QWSB8IFBJQ0tBWEVfQkxBTUVfTU9WRTsKKworCWlmIChhcmcpCisJCWJsYW1lX2NvcHlfc2NvcmUgPSBwYXJzZV9zY29yZShhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsYW1lX21vdmVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKm9wdCA9IG9wdGlvbi0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwkqb3B0IHw9IFBJQ0tBWEVfQkxBTUVfTU9WRTsKKworCWlmIChhcmcpCisJCWJsYW1lX21vdmVfc2NvcmUgPSBwYXJzZV9zY29yZShhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX2FfcmV2KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoZ2V0X29pZChuYW1lLCAmb2lkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIE9CSl9OT05FIDwgb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCAmb2lkLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgYnVpbGRfaWdub3JlbGlzdChzdHJ1Y3QgYmxhbWVfc2NvcmVib2FyZCAqc2IsCisJCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqaWdub3JlX3JldnNfZmlsZV9saXN0LAorCQkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmlnbm9yZV9yZXZfbGlzdCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCW9pZHNldF9pbml0KCZzYi0+aWdub3JlX2xpc3QsIDApOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaSwgaWdub3JlX3JldnNfZmlsZV9saXN0KSB7CisJCWlmICghc3RyY21wKGktPnN0cmluZywgIiIpKQorCQkJb2lkc2V0X2NsZWFyKCZzYi0+aWdub3JlX2xpc3QpOworCQllbHNlCisJCQlvaWRzZXRfcGFyc2VfZmlsZSgmc2ItPmlnbm9yZV9saXN0LCBpLT5zdHJpbmcpOworCX0KKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGksIGlnbm9yZV9yZXZfbGlzdCkgeworCQlpZiAoZ2V0X29pZF9jb21taXR0aXNoKGktPnN0cmluZywgJm9pZCkpCisJCQlkaWUoXygiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIiksIGktPnN0cmluZyk7CisJCW9pZHNldF9pbnNlcnQoJnNiLT5pZ25vcmVfbGlzdCwgJm9pZCk7CisJfQorfQorCitpbnQgY21kX2JsYW1lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWNvbnN0IGNoYXIgKnBhdGg7CisJc3RydWN0IGJsYW1lX3Njb3JlYm9hcmQgc2I7CisJc3RydWN0IGJsYW1lX29yaWdpbiAqbzsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCA9IE5VTEw7CisJbG9uZyBkYXNoZGFzaF9wb3MsIGxubzsKKwlzdHJ1Y3QgcHJvZ3Jlc3NfaW5mbyBwaSA9IHsgTlVMTCwgMCB9OworCisJc3RydWN0IHN0cmluZ19saXN0IHJhbmdlX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBpZ25vcmVfcmV2X2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCBvdXRwdXRfb3B0aW9uID0gMCwgb3B0ID0gMDsKKwlpbnQgc2hvd19zdGF0cyA9IDA7CisJY29uc3QgY2hhciAqcmV2c19maWxlID0gTlVMTDsKKwljb25zdCBjaGFyICpjb250ZW50c19mcm9tID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgImluY3JlbWVudGFsIiwgJmluY3JlbWVudGFsLCBOXygiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIpKSwKKwkJT1BUX0JPT0woJ2InLCBOVUxMLCAmYmxhbmtfYm91bmRhcnksIE5fKCJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIikpLAorCQlPUFRfQk9PTCgwLCAicm9vdCIsICZzaG93X3Jvb3QsIE5fKCJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiKSksCisJCU9QVF9CT09MKDAsICJzaG93LXN0YXRzIiwgJnNob3dfc3RhdHMsIE5fKCJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIikpLAorCQlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmc2hvd19wcm9ncmVzcywgTl8oIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0JJVCgwLCAic2NvcmUtZGVidWciLCAmb3V0cHV0X29wdGlvbiwgTl8oIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIiksIE9VVFBVVF9TSE9XX1NDT1JFKSwKKwkJT1BUX0JJVCgnZicsICJzaG93LW5hbWUiLCAmb3V0cHV0X29wdGlvbiwgTl8oIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIiksIE9VVFBVVF9TSE9XX05BTUUpLAorCQlPUFRfQklUKCduJywgInNob3ctbnVtYmVyIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiKSwgT1VUUFVUX1NIT1dfTlVNQkVSKSwKKwkJT1BUX0JJVCgncCcsICJwb3JjZWxhaW4iLCAmb3V0cHV0X29wdGlvbiwgTl8oIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iKSwgT1VUUFVUX1BPUkNFTEFJTiksCisJCU9QVF9CSVQoMCwgImxpbmUtcG9yY2VsYWluIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iKSwgT1VUUFVUX1BPUkNFTEFJTnxPVVRQVVRfTElORV9QT1JDRUxBSU4pLAorCQlPUFRfQklUKCdjJywgTlVMTCwgJm91dHB1dF9vcHRpb24sIE5fKCJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9BTk5PVEFURV9DT01QQVQpLAorCQlPUFRfQklUKCd0JywgTlVMTCwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiKSwgT1VUUFVUX1JBV19USU1FU1RBTVApLAorCQlPUFRfQklUKCdsJywgTlVMTCwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiKSwgT1VUUFVUX0xPTkdfT0JKRUNUX05BTUUpLAorCQlPUFRfQklUKCdzJywgTlVMTCwgJm91dHB1dF9vcHRpb24sIE5fKCJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9OT19BVVRIT1IpLAorCQlPUFRfQklUKCdlJywgInNob3ctZW1haWwiLCAmb3V0cHV0X29wdGlvbiwgTl8oIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIpLCBPVVRQVVRfU0hPV19FTUFJTCksCisJCU9QVF9CSVQoJ3cnLCBOVUxMLCAmeGRsX29wdHMsIE5fKCJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIpLCBYREZfSUdOT1JFX1dISVRFU1BBQ0UpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImlnbm9yZS1yZXYiLCAmaWdub3JlX3Jldl9saXN0LCBOXygicmV2IiksIE5fKCJJZ25vcmUgPHJldj4gd2hlbiBibGFtaW5nIikpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImlnbm9yZS1yZXZzLWZpbGUiLCAmaWdub3JlX3JldnNfZmlsZV9saXN0LCBOXygiZmlsZSIpLCBOXygiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIpKSwKKwkJT1BUX0JJVCgwLCAiY29sb3ItbGluZXMiLCAmb3V0cHV0X29wdGlvbiwgTl8oImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiKSwgT1VUUFVUX0NPTE9SX0xJTkUpLAorCQlPUFRfQklUKDAsICJjb2xvci1ieS1hZ2UiLCAmb3V0cHV0X29wdGlvbiwgTl8oImNvbG9yIGxpbmVzIGJ5IGFnZSIpLCBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUiksCisJCU9QVF9CSVQoMCwgIm1pbmltYWwiLCAmeGRsX29wdHMsIE5fKCJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giKSwgWERGX05FRURfTUlOSU1BTCksCisJCU9QVF9TVFJJTkcoJ1MnLCBOVUxMLCAmcmV2c19maWxlLCBOXygiZmlsZSIpLCBOXygiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IikpLAorCQlPUFRfU1RSSU5HKDAsICJjb250ZW50cyIsICZjb250ZW50c19mcm9tLCBOXygiZmlsZSIpLCBOXygiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdDJywgTlVMTCwgJm9wdCwgTl8oInNjb3JlIiksIE5fKCJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIiksIFBBUlNFX09QVF9PUFRBUkcsIGJsYW1lX2NvcHlfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdNJywgTlVMTCwgJm9wdCwgTl8oInNjb3JlIiksIE5fKCJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIiksIFBBUlNFX09QVF9PUFRBUkcsIGJsYW1lX21vdmVfY2FsbGJhY2sgfSwKKwkJT1BUX1NUUklOR19MSVNUKCdMJywgTlVMTCwgJnJhbmdlX2xpc3QsIE5fKCJuLG0iKSwgTl8oIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIikpLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX0VORCgpCisJfTsKKworCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OworCWludCBjbWRfaXNfYW5ub3RhdGUgPSAhc3RyY21wKGFyZ3ZbMF0sICJhbm5vdGF0ZSIpOworCXN0cnVjdCByYW5nZV9zZXQgcmFuZ2VzOworCXVuc2lnbmVkIGludCByYW5nZV9pOworCWxvbmcgYW5jaG9yOworCWNvbnN0IGludCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJc2V0dXBfZGVmYXVsdF9jb2xvcl9ieV9hZ2UoKTsKKwlnaXRfY29uZmlnKGdpdF9ibGFtZV9jb25maWcsICZvdXRwdXRfb3B0aW9uKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgTlVMTCk7CisJcmV2cy5kYXRlX21vZGUgPSBibGFtZV9kYXRlX21vZGU7CisJcmV2cy5kaWZmb3B0LmZsYWdzLmFsbG93X3RleHRjb252ID0gMTsKKwlyZXZzLmRpZmZvcHQuZmxhZ3MuZm9sbG93X3JlbmFtZXMgPSAxOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlkYXNoZGFzaF9wb3MgPSAwOworCXNob3dfcHJvZ3Jlc3MgPSAtMTsKKworCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCWZvciAoOzspIHsKKwkJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgYmxhbWVfb3B0X3VzYWdlKSkgeworCQljYXNlIFBBUlNFX09QVF9IRUxQOgorCQljYXNlIFBBUlNFX09QVF9FUlJPUjoKKwkJCWV4aXQoMTI5KTsKKwkJY2FzZSBQQVJTRV9PUFRfQ09NUExFVEU6CisJCQlleGl0KDApOworCQljYXNlIFBBUlNFX09QVF9ET05FOgorCQkJaWYgKGN0eC5hcmd2WzBdKQorCQkJCWRhc2hkYXNoX3BvcyA9IGN0eC5jcGlkeDsKKwkJCWdvdG8gcGFyc2VfZG9uZTsKKwkJfQorCisJCWlmICghc3RyY21wKGN0eC5hcmd2WzBdLCAiLS1yZXZlcnNlIikpIHsKKwkJCWN0eC5hcmd2WzBdID0gIi0tY2hpbGRyZW4iOworCQkJcmV2ZXJzZSA9IDE7CisJCX0KKwkJcGFyc2VfcmV2aXNpb25fb3B0KCZyZXZzLCAmY3R4LCBvcHRpb25zLCBibGFtZV9vcHRfdXNhZ2UpOworCX0KK3BhcnNlX2RvbmU6CisJbm9fd2hvbGVfZmlsZV9yZW5hbWUgPSAhcmV2cy5kaWZmb3B0LmZsYWdzLmZvbGxvd19yZW5hbWVzOworCXhkbF9vcHRzIHw9IHJldnMuZGlmZm9wdC54ZGxfb3B0cyAmIFhERl9JTkRFTlRfSEVVUklTVElDOworCXJldnMuZGlmZm9wdC5mbGFncy5mb2xsb3dfcmVuYW1lcyA9IDA7CisJYXJnYyA9IHBhcnNlX29wdGlvbnNfZW5kKCZjdHgpOworCisJaWYgKGluY3JlbWVudGFsIHx8IChvdXRwdXRfb3B0aW9uICYgT1VUUFVUX1BPUkNFTEFJTikpIHsKKwkJaWYgKHNob3dfcHJvZ3Jlc3MgPiAwKQorCQkJZGllKF8oIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiKSk7CisJCXNob3dfcHJvZ3Jlc3MgPSAwOworCX0gZWxzZSBpZiAoc2hvd19wcm9ncmVzcyA8IDApCisJCXNob3dfcHJvZ3Jlc3MgPSBpc2F0dHkoMik7CisKKwlpZiAoMCA8IGFiYnJldiAmJiBhYmJyZXYgPCBoZXhzeikKKwkJLyogb25lIG1vcmUgYWJicmV2IGxlbmd0aCBpcyBuZWVkZWQgZm9yIHRoZSBib3VuZGFyeSBjb21taXQgKi8KKwkJYWJicmV2Kys7CisJZWxzZSBpZiAoIWFiYnJldikKKwkJYWJicmV2ID0gaGV4c3o7CisKKwlpZiAocmV2c19maWxlICYmIHJlYWRfYW5jZXN0cnkocmV2c19maWxlKSkKKwkJZGllX2Vycm5vKCJyZWFkaW5nIGdyYWZ0IGZpbGUgJyVzJyBmYWlsZWQiLCByZXZzX2ZpbGUpOworCisJaWYgKGNtZF9pc19hbm5vdGF0ZSkgeworCQlvdXRwdXRfb3B0aW9uIHw9IE9VVFBVVF9BTk5PVEFURV9DT01QQVQ7CisJCWJsYW1lX2RhdGVfbW9kZS50eXBlID0gREFURV9JU084NjAxOworCX0gZWxzZSB7CisJCWJsYW1lX2RhdGVfbW9kZSA9IHJldnMuZGF0ZV9tb2RlOworCX0KKworCS8qIFRoZSBtYXhpbXVtIHdpZHRoIHVzZWQgdG8gc2hvdyB0aGUgZGF0ZXMgKi8KKwlzd2l0Y2ggKGJsYW1lX2RhdGVfbW9kZS50eXBlKSB7CisJY2FzZSBEQVRFX1JGQzI4MjI6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIlRodSwgMTkgT2N0IDIwMDYgMTY6MDA6MDQgLTA3MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX0lTTzg2MDFfU1RSSUNUOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5VDE2OjAwOjA0LTA3OjAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9JU084NjAxOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5IDE2OjAwOjA0IC0wNzAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9SQVc6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjExNjEyOTg4MDQgLTA3MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX1VOSVg6CisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIjExNjEyOTg4MDQiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX1NIT1JUOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIyMDA2LTEwLTE5Iik7CisJCWJyZWFrOworCWNhc2UgREFURV9SRUxBVElWRToKKwkJLyoKKwkJICogVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKwkJICogbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorCQkgKiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorCQkgKiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorCQkgKiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorCQkgKiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorCQkgKiBjb2x1bW5zLgorCQkgKi8KKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHV0Zjhfc3Ryd2lkdGgoXygiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIpKSArIDE7IC8qIGFkZCB0aGUgbnVsbCAqLworCQlicmVhazsKKwljYXNlIERBVEVfSFVNQU46CisJCS8qIElmIHRoZSB5ZWFyIGlzIHNob3duLCBubyB0aW1lIGlzIHNob3duICovCisJCWJsYW1lX2RhdGVfd2lkdGggPSBzaXplb2YoIlRodSBPY3QgMTkgMTY6MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX05PUk1BTDoKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHNpemVvZigiVGh1IE9jdCAxOSAxNjowMDowNCAyMDA2IC0wNzAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9TVFJGVElNRToKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHN0cmxlbihzaG93X2RhdGUoMCwgMCwgJmJsYW1lX2RhdGVfbW9kZSkpICsgMTsgLyogYWRkIHRoZSBudWxsICovCisJCWJyZWFrOworCX0KKwlibGFtZV9kYXRlX3dpZHRoIC09IDE7IC8qIHN0cmlwIHRoZSBudWxsICovCisKKwlpZiAocmV2cy5kaWZmb3B0LmZsYWdzLmZpbmRfY29waWVzX2hhcmRlcikKKwkJb3B0IHw9IChQSUNLQVhFX0JMQU1FX0NPUFkgfCBQSUNLQVhFX0JMQU1FX01PVkUgfAorCQkJUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUik7CisKKwkvKgorCSAqIFdlIGhhdmUgY29sbGVjdGVkIG9wdGlvbnMgdW5rbm93biB0byB1cyBpbiBhcmd2WzEuLnVua10KKwkgKiB3aGljaCBhcmUgdG8gYmUgcGFzc2VkIHRvIHJldmlzaW9uIG1hY2hpbmVyeSBpZiB3ZSBhcmUKKwkgKiBnb2luZyB0byBkbyB0aGUgImJvdHRvbSIgcHJvY2Vzc2luZy4KKwkgKgorCSAqIFRoZSByZW1haW5pbmcgYXJlOgorCSAqCisJICogKDEpIGlmIGRhc2hkYXNoX3BvcyAhPSAwLCBpdCBpcyBlaXRoZXIKKwkgKiAgICAgImJsYW1lIFtyZXZpc2lvbnNdIC0tIDxwYXRoPiIgb3IKKwkgKiAgICAgImJsYW1lIC0tIDxwYXRoPiA8cmV2PiIKKwkgKgorCSAqICgyKSBvdGhlcndpc2UsIGl0IGlzIG9uZSBvZiB0aGUgdHdvOgorCSAqICAgICAiYmxhbWUgW3JldmlzaW9uc10gPHBhdGg+IgorCSAqICAgICAiYmxhbWUgPHBhdGg+IDxyZXY+IgorCSAqCisJICogTm90ZSB0aGF0IHdlIG11c3Qgc3RyaXAgb3V0IDxwYXRoPiBmcm9tIHRoZSBhcmd1bWVudHM6IHdlIGRvIG5vdAorCSAqIHdhbnQgdGhlIHBhdGggcHJ1bmluZyBidXQgd2UgbWF5IHdhbnQgImJvdHRvbSIgcHJvY2Vzc2luZy4KKwkgKi8KKwlpZiAoZGFzaGRhc2hfcG9zKSB7CisJCXN3aXRjaCAoYXJnYyAtIGRhc2hkYXNoX3BvcyAtIDEpIHsKKwkJY2FzZSAyOiAvKiAoMWIpICovCisJCQlpZiAoYXJnYyAhPSA0KQorCQkJCXVzYWdlX3dpdGhfb3B0aW9ucyhibGFtZV9vcHRfdXNhZ2UsIG9wdGlvbnMpOworCQkJLyogcmVvcmRlciBmb3IgdGhlIG5ldyB3YXk6IDxyZXY+IC0tIDxwYXRoPiAqLworCQkJYXJndlsxXSA9IGFyZ3ZbM107CisJCQlhcmd2WzNdID0gYXJndlsyXTsKKwkJCWFyZ3ZbMl0gPSAiLS0iOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAxOiAvKiAoMWEpICovCisJCQlwYXRoID0gYWRkX3ByZWZpeChwcmVmaXgsIGFyZ3ZbLS1hcmdjXSk7CisJCQlhcmd2W2FyZ2NdID0gTlVMTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJsYW1lX29wdF91c2FnZSwgb3B0aW9ucyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYXJnYyA8IDIpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoYmxhbWVfb3B0X3VzYWdlLCBvcHRpb25zKTsKKwkJaWYgKGFyZ2MgPT0gMyAmJiBpc19hX3Jldihhcmd2W2FyZ2MgLSAxXSkpIHsgLyogKDJiKSAqLworCQkJcGF0aCA9IGFkZF9wcmVmaXgocHJlZml4LCBhcmd2WzFdKTsKKwkJCWFyZ3ZbMV0gPSBhcmd2WzJdOworCQl9IGVsc2UgewkvKiAoMmEpICovCisJCQlpZiAoYXJnYyA9PSAyICYmIGlzX2FfcmV2KGFyZ3ZbMV0pICYmICFnZXRfZ2l0X3dvcmtfdHJlZSgpKQorCQkJCWRpZSgibWlzc2luZyA8cGF0aD4gdG8gYmxhbWUiKTsKKwkJCXBhdGggPSBhZGRfcHJlZml4KHByZWZpeCwgYXJndlthcmdjIC0gMV0pOworCQl9CisJCWFyZ3ZbYXJnYyAtIDFdID0gIi0tIjsKKwl9CisKKwlyZXZzLmRpc2FibGVfc3RkaW4gPSAxOworCXNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2cywgTlVMTCk7CisJaWYgKCFyZXZzLnBlbmRpbmcubnIgJiYgaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwkJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQ7CisJCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisKKwkJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkmaGVhZF9vaWQsIE5VTEwpIHx8CisJCSAgICAhKGhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHJldnMucmVwbywKKwkJCQkJCQkgICAgICZoZWFkX29pZCwgMSkpKQorCQkJZGllKCJubyBzdWNoIHJlZjogSEVBRCIpOworCisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgJmhlYWRfY29tbWl0LT5vYmplY3QsICJIRUFEIik7CisJfQorCisJaW5pdF9zY29yZWJvYXJkKCZzYik7CisJc2IucmV2cyA9ICZyZXZzOworCXNiLmNvbnRlbnRzX2Zyb20gPSBjb250ZW50c19mcm9tOworCXNiLnJldmVyc2UgPSByZXZlcnNlOworCXNiLnJlcG8gPSB0aGVfcmVwb3NpdG9yeTsKKwlidWlsZF9pZ25vcmVsaXN0KCZzYiwgJmlnbm9yZV9yZXZzX2ZpbGVfbGlzdCwgJmlnbm9yZV9yZXZfbGlzdCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmlnbm9yZV9yZXZzX2ZpbGVfbGlzdCwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmlnbm9yZV9yZXZfbGlzdCwgMCk7CisJc2V0dXBfc2NvcmVib2FyZCgmc2IsIHBhdGgsICZvKTsKKwlsbm8gPSBzYi5udW1fbGluZXM7CisKKwlpZiAobG5vICYmICFyYW5nZV9saXN0Lm5yKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJhbmdlX2xpc3QsICIxIik7CisKKwlhbmNob3IgPSAxOworCXJhbmdlX3NldF9pbml0KCZyYW5nZXMsIHJhbmdlX2xpc3QubnIpOworCWZvciAocmFuZ2VfaSA9IDA7IHJhbmdlX2kgPCByYW5nZV9saXN0Lm5yOyArK3JhbmdlX2kpIHsKKwkJbG9uZyBib3R0b20sIHRvcDsKKwkJaWYgKHBhcnNlX3JhbmdlX2FyZyhyYW5nZV9saXN0Lml0ZW1zW3JhbmdlX2ldLnN0cmluZywKKwkJCQkgICAgbnRoX2xpbmVfY2IsICZzYiwgbG5vLCBhbmNob3IsCisJCQkJICAgICZib3R0b20sICZ0b3AsIHNiLnBhdGgsCisJCQkJICAgIHRoZV9yZXBvc2l0b3J5LT5pbmRleCkpCisJCQl1c2FnZShibGFtZV91c2FnZSk7CisJCWlmICgoIWxubyAmJiAodG9wIHx8IGJvdHRvbSkpIHx8IGxubyA8IGJvdHRvbSkKKwkJCWRpZShRXygiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIsCisJCQkgICAgICAgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIiwKKwkJCSAgICAgICBsbm8pLCBwYXRoLCBsbm8pOworCQlpZiAoYm90dG9tIDwgMSkKKwkJCWJvdHRvbSA9IDE7CisJCWlmICh0b3AgPCAxIHx8IGxubyA8IHRvcCkKKwkJCXRvcCA9IGxubzsKKwkJYm90dG9tLS07CisJCXJhbmdlX3NldF9hcHBlbmRfdW5zYWZlKCZyYW5nZXMsIGJvdHRvbSwgdG9wKTsKKwkJYW5jaG9yID0gdG9wICsgMTsKKwl9CisJc29ydF9hbmRfbWVyZ2VfcmFuZ2Vfc2V0KCZyYW5nZXMpOworCisJZm9yIChyYW5nZV9pID0gcmFuZ2VzLm5yOyByYW5nZV9pID4gMDsgLS1yYW5nZV9pKSB7CisJCWNvbnN0IHN0cnVjdCByYW5nZSAqciA9ICZyYW5nZXMucmFuZ2VzW3JhbmdlX2kgLSAxXTsKKwkJZW50ID0gYmxhbWVfZW50cnlfcHJlcGVuZChlbnQsIHItPnN0YXJ0LCByLT5lbmQsIG8pOworCX0KKworCW8tPnN1c3BlY3RzID0gZW50OworCXByaW9fcXVldWVfcHV0KCZzYi5jb21taXRzLCBvLT5jb21taXQpOworCisJYmxhbWVfb3JpZ2luX2RlY3JlZihvKTsKKworCXJhbmdlX3NldF9yZWxlYXNlKCZyYW5nZXMpOworCXN0cmluZ19saXN0X2NsZWFyKCZyYW5nZV9saXN0LCAwKTsKKworCXNiLmVudCA9IE5VTEw7CisJc2IucGF0aCA9IHBhdGg7CisKKwlpZiAoYmxhbWVfbW92ZV9zY29yZSkKKwkJc2IubW92ZV9zY29yZSA9IGJsYW1lX21vdmVfc2NvcmU7CisJaWYgKGJsYW1lX2NvcHlfc2NvcmUpCisJCXNiLmNvcHlfc2NvcmUgPSBibGFtZV9jb3B5X3Njb3JlOworCisJc2IuZGVidWcgPSBERUJVR19CTEFNRTsKKwlzYi5vbl9zYW5pdHlfZmFpbCA9ICZzYW5pdHlfY2hlY2tfb25fZmFpbDsKKworCXNiLnNob3dfcm9vdCA9IHNob3dfcm9vdDsKKwlzYi54ZGxfb3B0cyA9IHhkbF9vcHRzOworCXNiLm5vX3dob2xlX2ZpbGVfcmVuYW1lID0gbm9fd2hvbGVfZmlsZV9yZW5hbWU7CisKKwlyZWFkX21haWxtYXAoJm1haWxtYXAsIE5VTEwpOworCisJc2IuZm91bmRfZ3VpbHR5X2VudHJ5ID0gJmZvdW5kX2d1aWx0eV9lbnRyeTsKKwlzYi5mb3VuZF9ndWlsdHlfZW50cnlfZGF0YSA9ICZwaTsKKwlpZiAoc2hvd19wcm9ncmVzcykKKwkJcGkucHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKF8oIkJsYW1pbmcgbGluZXMiKSwgc2IubnVtX2xpbmVzKTsKKworCWFzc2lnbl9ibGFtZSgmc2IsIG9wdCk7CisKKwlzdG9wX3Byb2dyZXNzKCZwaS5wcm9ncmVzcyk7CisKKwlpZiAoIWluY3JlbWVudGFsKQorCQlzZXR1cF9wYWdlcigpOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlibGFtZV9zb3J0X2ZpbmFsKCZzYik7CisKKwlibGFtZV9jb2FsZXNjZSgmc2IpOworCisJaWYgKCEob3V0cHV0X29wdGlvbiAmIChPVVRQVVRfQ09MT1JfTElORSB8IE9VVFBVVF9TSE9XX0FHRV9XSVRIX0NPTE9SKSkpCisJCW91dHB1dF9vcHRpb24gfD0gY29sb3JpbmdfbW9kZTsKKworCWlmICghKG91dHB1dF9vcHRpb24gJiBPVVRQVVRfUE9SQ0VMQUlOKSkgeworCQlmaW5kX2FsaWdubWVudCgmc2IsICZvdXRwdXRfb3B0aW9uKTsKKwkJaWYgKCEqcmVwZWF0ZWRfbWV0YV9jb2xvciAmJgorCQkgICAgKG91dHB1dF9vcHRpb24gJiBPVVRQVVRfQ09MT1JfTElORSkpCisJCQl4c25wcmludGYocmVwZWF0ZWRfbWV0YV9jb2xvciwKKwkJCQkgIHNpemVvZihyZXBlYXRlZF9tZXRhX2NvbG9yKSwKKwkJCQkgICIlcyIsIEdJVF9DT0xPUl9DWUFOKTsKKwl9CisJaWYgKG91dHB1dF9vcHRpb24gJiBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUKQorCQlvdXRwdXRfb3B0aW9uICY9IH4oT1VUUFVUX0NPTE9SX0xJTkUgfCBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUik7CisKKwlvdXRwdXQoJnNiLCBvdXRwdXRfb3B0aW9uKTsKKwlmcmVlKCh2b2lkICopc2IuZmluYWxfYnVmKTsKKwlmb3IgKGVudCA9IHNiLmVudDsgZW50OyApIHsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICplID0gZW50LT5uZXh0OworCQlmcmVlKGVudCk7CisJCWVudCA9IGU7CisJfQorCisJaWYgKHNob3dfc3RhdHMpIHsKKwkJcHJpbnRmKCJudW0gcmVhZCBibG9iOiAlZFxuIiwgc2IubnVtX3JlYWRfYmxvYik7CisJCXByaW50ZigibnVtIGdldCBwYXRjaDogJWRcbiIsIHNiLm51bV9nZXRfcGF0Y2gpOworCQlwcmludGYoIm51bSBjb21taXRzOiAlZFxuIiwgc2IubnVtX2NvbW1pdHMpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYnJhbmNoLmMgYi9idWlsdGluL2JyYW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Mjk3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2JyYW5jaC5jCkBAIC0wLDAgKzEsODU1IEBACisvKgorICogQnVpbHRpbiAiZ2l0IGJyYW5jaCIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KKyAqIEJhc2VkIG9uIGdpdC1icmFuY2guc2ggYnkgSnVuaW8gQyBIYW1hbm8uCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJyZWYtZmlsdGVyLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9icmFuY2hfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIiksCisJTl8oImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIiksCisJTl8oImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIpLAorCU5fKCJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iKSwKKwlOXygiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IiksCisJTl8oImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iKSwKKwlOXygiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpoZWFkOworc3RhdGljIHN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisKK3N0YXRpYyBpbnQgYnJhbmNoX3VzZV9jb2xvciA9IC0xOworc3RhdGljIGNoYXIgYnJhbmNoX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX1JFU0VULAorCUdJVF9DT0xPUl9OT1JNQUwsICAgICAgIC8qIFBMQUlOICovCisJR0lUX0NPTE9SX1JFRCwgICAgICAgICAgLyogUkVNT1RFICovCisJR0lUX0NPTE9SX05PUk1BTCwgICAgICAgLyogTE9DQUwgKi8KKwlHSVRfQ09MT1JfR1JFRU4sICAgICAgICAvKiBDVVJSRU5UICovCisJR0lUX0NPTE9SX0JMVUUsICAgICAgICAgLyogVVBTVFJFQU0gKi8KKwlHSVRfQ09MT1JfQ1lBTiwgICAgICAgICAvKiBXT1JLVFJFRSAqLworfTsKK2VudW0gY29sb3JfYnJhbmNoIHsKKwlCUkFOQ0hfQ09MT1JfUkVTRVQgPSAwLAorCUJSQU5DSF9DT0xPUl9QTEFJTiA9IDEsCisJQlJBTkNIX0NPTE9SX1JFTU9URSA9IDIsCisJQlJBTkNIX0NPTE9SX0xPQ0FMID0gMywKKwlCUkFOQ0hfQ09MT1JfQ1VSUkVOVCA9IDQsCisJQlJBTkNIX0NPTE9SX1VQU1RSRUFNID0gNSwKKwlCUkFOQ0hfQ09MT1JfV09SS1RSRUUgPSA2Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29sb3JfYnJhbmNoX3Nsb3RzW10gPSB7CisJW0JSQU5DSF9DT0xPUl9SRVNFVF0JPSAicmVzZXQiLAorCVtCUkFOQ0hfQ09MT1JfUExBSU5dCT0gInBsYWluIiwKKwlbQlJBTkNIX0NPTE9SX1JFTU9URV0JPSAicmVtb3RlIiwKKwlbQlJBTkNIX0NPTE9SX0xPQ0FMXQk9ICJsb2NhbCIsCisJW0JSQU5DSF9DT0xPUl9DVVJSRU5UXQk9ICJjdXJyZW50IiwKKwlbQlJBTkNIX0NPTE9SX1VQU1RSRUFNXSA9ICJ1cHN0cmVhbSIsCisJW0JSQU5DSF9DT0xPUl9XT1JLVFJFRV0gPSAid29ya3RyZWUiLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvdXRwdXQgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3B0czsKKworZGVmaW5lX2xpc3RfY29uZmlnX2FycmF5KGNvbG9yX2JyYW5jaF9zbG90cyk7CisKK3N0YXRpYyBpbnQgZ2l0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCXN0cnVjdCByZWZfc29ydGluZyAqKnNvcnRpbmdfdGFpbCA9IChzdHJ1Y3QgcmVmX3NvcnRpbmcgKiopY2I7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJicmFuY2guc29ydCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcGFyc2VfcmVmX3NvcnRpbmcoc29ydGluZ190YWlsLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJjb2x1bW4uIikpCisJCXJldHVybiBnaXRfY29sdW1uX2NvbmZpZyh2YXIsIHZhbHVlLCAiYnJhbmNoIiwgJmNvbG9wdHMpOworCWlmICghc3RyY21wKHZhciwgImNvbG9yLmJyYW5jaCIpKSB7CisJCWJyYW5jaF91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChza2lwX3ByZWZpeCh2YXIsICJjb2xvci5icmFuY2guIiwgJnNsb3RfbmFtZSkpIHsKKwkJaW50IHNsb3QgPSBMT09LVVBfQ09ORklHKGNvbG9yX2JyYW5jaF9zbG90cywgc2xvdF9uYW1lKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGNvbG9yX3BhcnNlKHZhbHVlLCBicmFuY2hfY29sb3JzW3Nsb3RdKTsKKwl9CisJcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpicmFuY2hfZ2V0X2NvbG9yKGVudW0gY29sb3JfYnJhbmNoIGl4KQoreworCWlmICh3YW50X2NvbG9yKGJyYW5jaF91c2VfY29sb3IpKQorCQlyZXR1cm4gYnJhbmNoX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgaW50IGJyYW5jaF9tZXJnZWQoaW50IGtpbmQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGNvbW1pdCAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpoZWFkX3JldikKK3sKKwkvKgorCSAqIFRoaXMgY2hlY2tzIHdoZXRoZXIgdGhlIG1lcmdlIGJhc2VzIG9mIGJyYW5jaCBhbmQgSEVBRCAob3IKKwkgKiB0aGUgb3RoZXIgYnJhbmNoIHRoaXMgYnJhbmNoIGJ1aWxkcyB1cG9uKSBjb250YWlucyB0aGUKKwkgKiBicmFuY2gsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGJyYW5jaCBoYXMgYWxyZWFkeSBiZWVuIG1lcmdlZAorCSAqIHNhZmVseSB0byBIRUFEIChvciB0aGUgb3RoZXIgYnJhbmNoKS4KKwkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpyZWZlcmVuY2VfcmV2ID0gTlVMTDsKKwljb25zdCBjaGFyICpyZWZlcmVuY2VfbmFtZSA9IE5VTEw7CisJdm9pZCAqcmVmZXJlbmNlX25hbWVfdG9fZnJlZSA9IE5VTEw7CisJaW50IG1lcmdlZDsKKworCWlmIChraW5kID09IEZJTFRFUl9SRUZTX0JSQU5DSEVTKSB7CisJCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQobmFtZSk7CisJCWNvbnN0IGNoYXIgKnVwc3RyZWFtID0gYnJhbmNoX2dldF91cHN0cmVhbShicmFuY2gsIE5VTEwpOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQlpZiAodXBzdHJlYW0gJiYKKwkJICAgIChyZWZlcmVuY2VfbmFtZSA9IHJlZmVyZW5jZV9uYW1lX3RvX2ZyZWUgPQorCQkgICAgIHJlc29sdmVfcmVmZHVwKHVwc3RyZWFtLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCSAgICAmb2lkLCBOVUxMKSkgIT0gTlVMTCkKKwkJCXJlZmVyZW5jZV9yZXYgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkJJm9pZCk7CisJfQorCWlmICghcmVmZXJlbmNlX3JldikKKwkJcmVmZXJlbmNlX3JldiA9IGhlYWRfcmV2OworCisJbWVyZ2VkID0gaW5fbWVyZ2VfYmFzZXMocmV2LCByZWZlcmVuY2VfcmV2KTsKKworCS8qCisJICogQWZ0ZXIgdGhlIHNhZmV0eSB2YWx2ZSBpcyBmdWxseSByZWRlZmluZWQgdG8gImNoZWNrIHdpdGgKKwkgKiB1cHN0cmVhbSwgaWYgYW55LCBvdGhlcndpc2Ugd2l0aCBIRUFEIiwgd2Ugc2hvdWxkIGp1c3QKKwkgKiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgaW5fbWVyZ2VfYmFzZXMoKSBhYm92ZSB3aXRob3V0CisJICogYW55IG9mIHRoZSBmb2xsb3dpbmcgY29kZSwgYnV0IGR1cmluZyB0aGUgdHJhbnNpdGlvbiBwZXJpb2QsCisJICogYSBnZW50bGUgcmVtaW5kZXIgaXMgaW4gb3JkZXIuCisJICovCisJaWYgKChoZWFkX3JldiAhPSByZWZlcmVuY2VfcmV2KSAmJgorCSAgICBpbl9tZXJnZV9iYXNlcyhyZXYsIGhlYWRfcmV2KSAhPSBtZXJnZWQpIHsKKwkJaWYgKG1lcmdlZCkKKwkJCXdhcm5pbmcoXygiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKwkJCQkiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIiksCisJCQkJbmFtZSwgcmVmZXJlbmNlX25hbWUpOworCQllbHNlCisJCQl3YXJuaW5nKF8oIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisJCQkJIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIpLAorCQkJCW5hbWUsIHJlZmVyZW5jZV9uYW1lKTsKKwl9CisJZnJlZShyZWZlcmVuY2VfbmFtZV90b19mcmVlKTsKKwlyZXR1cm4gbWVyZ2VkOworfQorCitzdGF0aWMgaW50IGNoZWNrX2JyYW5jaF9jb21taXQoY29uc3QgY2hhciAqYnJhbmNobmFtZSwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBjb21taXQgKmhlYWRfcmV2LAorCQkJICAgICAgIGludCBraW5kcywgaW50IGZvcmNlKQoreworCXN0cnVjdCBjb21taXQgKnJldiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghcmV2KSB7CisJCWVycm9yKF8oIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIpLCByZWZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIWZvcmNlICYmICFicmFuY2hfbWVyZ2VkKGtpbmRzLCBicmFuY2huYW1lLCByZXYsIGhlYWRfcmV2KSkgeworCQllcnJvcihfKCJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKwkJICAgICAgIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsICIKKwkJICAgICAgInJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIiksIGJyYW5jaG5hbWUsIGJyYW5jaG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfYnJhbmNoX2NvbmZpZyhjb25zdCBjaGFyICpicmFuY2huYW1lKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcyIsIGJyYW5jaG5hbWUpOworCWlmIChnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGJ1Zi5idWYsIE5VTEwpIDwgMCkKKwkJd2FybmluZyhfKCJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIikpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9icmFuY2hlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGludCBmb3JjZSwgaW50IGtpbmRzLAorCQkJICAgaW50IHF1aWV0KQoreworCXN0cnVjdCBjb21taXQgKmhlYWRfcmV2ID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyICpuYW1lID0gTlVMTDsKKwljb25zdCBjaGFyICpmbXQ7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisJaW50IHJlbW90ZV9icmFuY2ggPSAwOworCXN0cnVjdCBzdHJidWYgYm5hbWUgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBhbGxvd2VkX2ludGVycHJldDsKKworCXN3aXRjaCAoa2luZHMpIHsKKwljYXNlIEZJTFRFUl9SRUZTX1JFTU9URVM6CisJCWZtdCA9ICJyZWZzL3JlbW90ZXMvJXMiOworCQkvKiBGb3Igc3Vic2VxdWVudCBVSSBtZXNzYWdlcyAqLworCQlyZW1vdGVfYnJhbmNoID0gMTsKKwkJYWxsb3dlZF9pbnRlcnByZXQgPSBJTlRFUlBSRVRfQlJBTkNIX1JFTU9URTsKKworCQlmb3JjZSA9IDE7CisJCWJyZWFrOworCWNhc2UgRklMVEVSX1JFRlNfQlJBTkNIRVM6CisJCWZtdCA9ICJyZWZzL2hlYWRzLyVzIjsKKwkJYWxsb3dlZF9pbnRlcnByZXQgPSBJTlRFUlBSRVRfQlJBTkNIX0xPQ0FMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoXygiY2Fubm90IHVzZSAtYSB3aXRoIC1kIikpOworCX0KKworCWlmICghZm9yY2UpIHsKKwkJaGVhZF9yZXYgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJmhlYWRfb2lkKTsKKwkJaWYgKCFoZWFkX3JldikKKwkJCWRpZShfKCJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiKSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyssIHN0cmJ1Zl9yZXNldCgmYm5hbWUpKSB7CisJCWNoYXIgKnRhcmdldCA9IE5VTEw7CisJCWludCBmbGFncyA9IDA7CisKKwkJc3RyYnVmX2JyYW5jaG5hbWUoJmJuYW1lLCBhcmd2W2ldLCBhbGxvd2VkX2ludGVycHJldCk7CisJCWZyZWUobmFtZSk7CisJCW5hbWUgPSBta3BhdGhkdXAoZm10LCBibmFtZS5idWYpOworCisJCWlmIChraW5kcyA9PSBGSUxURVJfUkVGU19CUkFOQ0hFUykgeworCQkJY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCA9CisJCQkJZmluZF9zaGFyZWRfc3ltcmVmKCJIRUFEIiwgbmFtZSk7CisJCQlpZiAod3QpIHsKKwkJCQllcnJvcihfKCJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnICIKKwkJCQkJImNoZWNrZWQgb3V0IGF0ICclcyciKSwKKwkJCQkgICAgICBibmFtZS5idWYsIHd0LT5wYXRoKTsKKwkJCQlyZXQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJdGFyZ2V0ID0gcmVzb2x2ZV9yZWZkdXAobmFtZSwKKwkJCQkJUkVTT0xWRV9SRUZfUkVBRElORworCQkJCQl8IFJFU09MVkVfUkVGX05PX1JFQ1VSU0UKKwkJCQkJfCBSRVNPTFZFX1JFRl9BTExPV19CQURfTkFNRSwKKwkJCQkJJm9pZCwgJmZsYWdzKTsKKwkJaWYgKCF0YXJnZXQpIHsKKwkJCWVycm9yKHJlbW90ZV9icmFuY2gKKwkJCSAgICAgID8gXygicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iKQorCQkJICAgICAgOiBfKCJicmFuY2ggJyVzJyBub3QgZm91bmQuIiksIGJuYW1lLmJ1Zik7CisJCQlyZXQgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIShmbGFncyAmIChSRUZfSVNTWU1SRUZ8UkVGX0lTQlJPS0VOKSkgJiYKKwkJICAgIGNoZWNrX2JyYW5jaF9jb21taXQoYm5hbWUuYnVmLCBuYW1lLCAmb2lkLCBoZWFkX3Jldiwga2luZHMsCisJCQkJCWZvcmNlKSkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCWlmIChkZWxldGVfcmVmKE5VTEwsIG5hbWUsIGlzX251bGxfb2lkKCZvaWQpID8gTlVMTCA6ICZvaWQsCisJCQkgICAgICAgUkVGX05PX0RFUkVGKSkgeworCQkJZXJyb3IocmVtb3RlX2JyYW5jaAorCQkJICAgICAgPyBfKCJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciKQorCQkJICAgICAgOiBfKCJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIpLAorCQkJICAgICAgYm5hbWUuYnVmKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIG5leHQ7CisJCX0KKwkJaWYgKCFxdWlldCkgeworCQkJcHJpbnRmKHJlbW90ZV9icmFuY2gKKwkJCSAgICAgICA/IF8oIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIpCisJCQkgICAgICAgOiBfKCJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIpLAorCQkJICAgICAgIGJuYW1lLmJ1ZiwKKwkJCSAgICAgICAoZmxhZ3MgJiBSRUZfSVNCUk9LRU4pID8gImJyb2tlbiIKKwkJCSAgICAgICA6IChmbGFncyAmIFJFRl9JU1NZTVJFRikgPyB0YXJnZXQKKwkJCSAgICAgICA6IGZpbmRfdW5pcXVlX2FiYnJldigmb2lkLCBERUZBVUxUX0FCQlJFVikpOworCQl9CisJCWRlbGV0ZV9icmFuY2hfY29uZmlnKGJuYW1lLmJ1Zik7CisKKwluZXh0OgorCQlmcmVlKHRhcmdldCk7CisJfQorCisJZnJlZShuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmYm5hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjYWxjX21heHdpZHRoKHN0cnVjdCByZWZfYXJyYXkgKnJlZnMsIGludCByZW1vdGVfYm9udXMpCit7CisJaW50IGksIG1heCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHJlZnMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl9hcnJheV9pdGVtICppdCA9IHJlZnMtPml0ZW1zW2ldOworCQljb25zdCBjaGFyICpkZXNjID0gaXQtPnJlZm5hbWU7CisJCWludCB3OworCisJCXNraXBfcHJlZml4KGl0LT5yZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmZGVzYyk7CisJCXNraXBfcHJlZml4KGl0LT5yZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIsICZkZXNjKTsKKwkJaWYgKGl0LT5raW5kID09IEZJTFRFUl9SRUZTX0RFVEFDSEVEX0hFQUQpIHsKKwkJCWNoYXIgKmhlYWRfZGVzYyA9IGdldF9oZWFkX2Rlc2NyaXB0aW9uKCk7CisJCQl3ID0gdXRmOF9zdHJ3aWR0aChoZWFkX2Rlc2MpOworCQkJZnJlZShoZWFkX2Rlc2MpOworCQl9IGVsc2UKKwkJCXcgPSB1dGY4X3N0cndpZHRoKGRlc2MpOworCisJCWlmIChpdC0+a2luZCA9PSBGSUxURVJfUkVGU19SRU1PVEVTKQorCQkJdyArPSByZW1vdGVfYm9udXM7CisJCWlmICh3ID4gbWF4KQorCQkJbWF4ID0gdzsKKwl9CisJcmV0dXJuIG1heDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnF1b3RlX2xpdGVyYWxfZm9yX2Zvcm1hdChjb25zdCBjaGFyICpzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXdoaWxlICgqcykgeworCQljb25zdCBjaGFyICplcCA9IHN0cmNocm51bChzLCAnJScpOworCQlpZiAocyA8IGVwKQorCQkJc3RyYnVmX2FkZCgmYnVmLCBzLCBlcCAtIHMpOworCQlpZiAoKmVwID09ICclJykgeworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiJSUiKTsKKwkJCXMgPSBlcCArIDE7CisJCX0gZWxzZSB7CisJCQlzID0gZXA7CisJCX0KKwl9CisJcmV0dXJuIGJ1Zi5idWY7Cit9CisKK3N0YXRpYyBjaGFyICpidWlsZF9mb3JtYXQoc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgaW50IG1heHdpZHRoLCBjb25zdCBjaGFyICpyZW1vdGVfcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgZm10ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBsb2NhbCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmVtb3RlID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmbG9jYWwsICIlJShpZiklJShIRUFEKSUlKHRoZW4pKiAlcyUlKGVsc2UpJSUoaWYpJSUod29ya3RyZWVwYXRoKSUlKHRoZW4pKyAlcyUlKGVsc2UpICAlcyUlKGVuZCklJShlbmQpIiwKKwkJCWJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX0NVUlJFTlQpLAorCQkJYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfV09SS1RSRUUpLAorCQkJYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfTE9DQUwpKTsKKwlzdHJidWZfYWRkZigmcmVtb3RlLCAiICAlcyIsCisJCSAgICBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRU1PVEUpKTsKKworCWlmIChmaWx0ZXItPnZlcmJvc2UpIHsKKwkJc3RydWN0IHN0cmJ1ZiBvYm5hbWUgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoZmlsdGVyLT5hYmJyZXYgPCAwKQorCQkJc3RyYnVmX2FkZGYoJm9ibmFtZSwgIiUlKG9iamVjdG5hbWU6c2hvcnQpIik7CisJCWVsc2UgaWYgKCFmaWx0ZXItPmFiYnJldikKKwkJCXN0cmJ1Zl9hZGRmKCZvYm5hbWUsICIlJShvYmplY3RuYW1lKSIpOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmb2JuYW1lLCAiJSUob2JqZWN0bmFtZTpzaG9ydD0lZCkiLCBmaWx0ZXItPmFiYnJldik7CisKKwkJc3RyYnVmX2FkZGYoJmxvY2FsLCAiJSUoYWxpZ246JWQsbGVmdCklJShyZWZuYW1lOmxzdHJpcD0yKSUlKGVuZCkiLCBtYXh3aWR0aCk7CisJCXN0cmJ1Zl9hZGRzdHIoJmxvY2FsLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCQlzdHJidWZfYWRkZigmbG9jYWwsICIgJXMgIiwgb2JuYW1lLmJ1Zik7CisKKwkJaWYgKGZpbHRlci0+dmVyYm9zZSA+IDEpCisJCXsKKwkJCXN0cmJ1Zl9hZGRmKCZsb2NhbCwgIiUlKGlmOm5vdGVxdWFscz0qKSUlKEhFQUQpJSUodGhlbiklJShpZiklJSh3b3JrdHJlZXBhdGgpJSUodGhlbikoJXMlJSh3b3JrdHJlZXBhdGgpJXMpICUlKGVuZCklJShlbmQpIiwKKwkJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfV09SS1RSRUUpLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCQkJc3RyYnVmX2FkZGYoJmxvY2FsLCAiJSUoaWYpJSUodXBzdHJlYW0pJSUodGhlbilbJXMlJSh1cHN0cmVhbTpzaG9ydCklcyUlKGlmKSUlKHVwc3RyZWFtOnRyYWNrKSIKKwkJCQkgICAgIiUlKHRoZW4pOiAlJSh1cHN0cmVhbTp0cmFjayxub2JyYWNrZXQpJSUoZW5kKV0gJSUoZW5kKSUlKGNvbnRlbnRzOnN1YmplY3QpIiwKKwkJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfVVBTVFJFQU0pLCBicmFuY2hfZ2V0X2NvbG9yKEJSQU5DSF9DT0xPUl9SRVNFVCkpOworCQl9CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZsb2NhbCwgIiUlKGlmKSUlKHVwc3RyZWFtOnRyYWNrKSUlKHRoZW4pJSUodXBzdHJlYW06dHJhY2spICUlKGVuZCklJShjb250ZW50czpzdWJqZWN0KSIpOworCisJCXN0cmJ1Zl9hZGRmKCZyZW1vdGUsICIlJShhbGlnbjolZCxsZWZ0KSVzJSUocmVmbmFtZTpsc3RyaXA9MiklJShlbmQpJXMiCisJCQkgICAgIiUlKGlmKSUlKHN5bXJlZiklJSh0aGVuKSAtPiAlJShzeW1yZWY6c2hvcnQpIgorCQkJICAgICIlJShlbHNlKSAlcyAlJShjb250ZW50czpzdWJqZWN0KSUlKGVuZCkiLAorCQkJICAgIG1heHdpZHRoLCBxdW90ZV9saXRlcmFsX2Zvcl9mb3JtYXQocmVtb3RlX3ByZWZpeCksCisJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfUkVTRVQpLCBvYm5hbWUuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm9ibmFtZSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoJmxvY2FsLCAiJSUocmVmbmFtZTpsc3RyaXA9MiklcyUlKGlmKSUlKHN5bXJlZiklJSh0aGVuKSAtPiAlJShzeW1yZWY6c2hvcnQpJSUoZW5kKSIsCisJCQkgICAgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfUkVTRVQpKTsKKwkJc3RyYnVmX2FkZGYoJnJlbW90ZSwgIiVzJSUocmVmbmFtZTpsc3RyaXA9MiklcyUlKGlmKSUlKHN5bXJlZiklJSh0aGVuKSAtPiAlJShzeW1yZWY6c2hvcnQpJSUoZW5kKSIsCisJCQkgICAgcXVvdGVfbGl0ZXJhbF9mb3JfZm9ybWF0KHJlbW90ZV9wcmVmaXgpLAorCQkJICAgIGJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX1JFU0VUKSk7CisJfQorCisJc3RyYnVmX2FkZGYoJmZtdCwgIiUlKGlmOm5vdGVxdWFscz1yZWZzL3JlbW90ZXMpJSUocmVmbmFtZTpyc3RyaXA9LTIpJSUodGhlbiklcyUlKGVsc2UpJXMlJShlbmQpIiwgbG9jYWwuYnVmLCByZW1vdGUuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZsb2NhbCk7CisJc3RyYnVmX3JlbGVhc2UoJnJlbW90ZSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmZtdCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlZl9saXN0KHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZywgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVmX2FycmF5IGFycmF5OworCWludCBtYXh3aWR0aCA9IDA7CisJY29uc3QgY2hhciAqcmVtb3RlX3ByZWZpeCA9ICIiOworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgbGlzdGluZyBtb3JlIHRoYW4ganVzdCByZW1vdGUgYnJhbmNoZXMsCisJICogdGhlbiByZW1vdGUgYnJhbmNoZXMgd2lsbCBoYXZlIGEgInJlbW90ZXMvIiBwcmVmaXguCisJICogV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIGluIHRoZSB3aWR0aC4KKwkgKi8KKwlpZiAoZmlsdGVyLT5raW5kICE9IEZJTFRFUl9SRUZTX1JFTU9URVMpCisJCXJlbW90ZV9wcmVmaXggPSAicmVtb3Rlcy8iOworCisJbWVtc2V0KCZhcnJheSwgMCwgc2l6ZW9mKGFycmF5KSk7CisKKwlmaWx0ZXJfcmVmcygmYXJyYXksIGZpbHRlciwgZmlsdGVyLT5raW5kIHwgRklMVEVSX1JFRlNfSU5DTFVERV9CUk9LRU4pOworCisJaWYgKGZpbHRlci0+dmVyYm9zZSkKKwkJbWF4d2lkdGggPSBjYWxjX21heHdpZHRoKCZhcnJheSwgc3RybGVuKHJlbW90ZV9wcmVmaXgpKTsKKworCWlmICghZm9ybWF0LT5mb3JtYXQpCisJCWZvcm1hdC0+Zm9ybWF0ID0gdG9fZnJlZSA9IGJ1aWxkX2Zvcm1hdChmaWx0ZXIsIG1heHdpZHRoLCByZW1vdGVfcHJlZml4KTsKKwlmb3JtYXQtPnVzZV9jb2xvciA9IGJyYW5jaF91c2VfY29sb3I7CisKKwlpZiAodmVyaWZ5X3JlZl9mb3JtYXQoZm9ybWF0KSkKKwkJZGllKF8oInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIikpOworCisJcmVmX2FycmF5X3NvcnQoc29ydGluZywgJmFycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCWlmIChmb3JtYXRfcmVmX2FycmF5X2l0ZW0oYXJyYXkuaXRlbXNbaV0sIGZvcm1hdCwgJm91dCwgJmVycikpCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJCWlmIChjb2x1bW5fYWN0aXZlKGNvbG9wdHMpKSB7CisJCQlhc3NlcnQoIWZpbHRlci0+dmVyYm9zZSAmJiAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIik7CisJCQkgLyogZm9ybWF0IHRvIGEgc3RyaW5nX2xpc3QgdG8gbGV0IHByaW50X2NvbHVtbnMoKSBkbyBpdHMgam9iICovCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm91dHB1dCwgb3V0LmJ1Zik7CisJCX0gZWxzZSB7CisJCQlmd3JpdGUob3V0LmJ1ZiwgMSwgb3V0Lmxlbiwgc3Rkb3V0KTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCX0KKworCXJlZl9hcnJheV9jbGVhcigmYXJyYXkpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2N1cnJlbnRfYnJhbmNoX25hbWUodm9pZCkKK3sKKwlpbnQgZmxhZ3M7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsICZmbGFncyk7CisJY29uc3QgY2hhciAqc2hvcnRuYW1lOworCWlmICghcmVmbmFtZSkKKwkJZGllKF8oImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiKSk7CisJZWxzZSBpZiAoIShmbGFncyAmIFJFRl9JU1NZTVJFRikpCisJCXJldHVybjsKKwllbHNlIGlmIChza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmc2hvcnRuYW1lKSkKKwkJcHV0cyhzaG9ydG5hbWUpOworCWVsc2UKKwkJZGllKF8oIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIpLCByZWZuYW1lKTsKK30KKworc3RhdGljIHZvaWQgcmVqZWN0X3JlYmFzZV9vcl9iaXNlY3RfYnJhbmNoKGNvbnN0IGNoYXIgKnRhcmdldCkKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCWludCBpOworCisJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJc3RydWN0IHdvcmt0cmVlICp3dCA9IHdvcmt0cmVlc1tpXTsKKworCQlpZiAoIXd0LT5pc19kZXRhY2hlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc193b3JrdHJlZV9iZWluZ19yZWJhc2VkKHd0LCB0YXJnZXQpKQorCQkJZGllKF8oIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIiksCisJCQkgICAgdGFyZ2V0LCB3dC0+cGF0aCk7CisKKwkJaWYgKGlzX3dvcmt0cmVlX2JlaW5nX2Jpc2VjdGVkKHd0LCB0YXJnZXQpKQorCQkJZGllKF8oIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIpLAorCQkJICAgIHRhcmdldCwgd3QtPnBhdGgpOworCX0KKworCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfb3JfcmVuYW1lX2JyYW5jaChjb25zdCBjaGFyICpvbGRuYW1lLCBjb25zdCBjaGFyICpuZXduYW1lLCBpbnQgY29weSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBzdHJidWYgb2xkcmVmID0gU1RSQlVGX0lOSVQsIG5ld3JlZiA9IFNUUkJVRl9JTklULCBsb2dtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIG9sZHNlY3Rpb24gPSBTVFJCVUZfSU5JVCwgbmV3c2VjdGlvbiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmludGVycHJldGVkX29sZG5hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmludGVycHJldGVkX25ld25hbWUgPSBOVUxMOworCWludCByZWNvdmVyeSA9IDA7CisKKwlpZiAoIW9sZG5hbWUpIHsKKwkJaWYgKGNvcHkpCisJCQlkaWUoXygiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIikpOworCQllbHNlCisJCQlkaWUoXygiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iKSk7CisJfQorCisJaWYgKHN0cmJ1Zl9jaGVja19icmFuY2hfcmVmKCZvbGRyZWYsIG9sZG5hbWUpKSB7CisJCS8qCisJCSAqIEJhZCBuYW1lIC0tLSB0aGlzIGNvdWxkIGJlIGFuIGF0dGVtcHQgdG8gcmVuYW1lIGEKKwkJICogcmVmIHRoYXQgd2UgdXNlZCB0byBhbGxvdyB0byBiZSBjcmVhdGVkIGJ5IGFjY2lkZW50LgorCQkgKi8KKwkJaWYgKHJlZl9leGlzdHMob2xkcmVmLmJ1ZikpCisJCQlyZWNvdmVyeSA9IDE7CisJCWVsc2UKKwkJCWRpZShfKCJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIiksIG9sZG5hbWUpOworCX0KKworCS8qCisJICogQSBjb21tYW5kIGxpa2UgImdpdCBicmFuY2ggLU0gY3VycmVudGJyYW5jaCBjdXJyZW50YnJhbmNoIiBjYW5ub3QKKwkgKiBjYXVzZSB0aGUgd29ya3RyZWUgdG8gYmVjb21lIGluY29uc2lzdGVudCB3aXRoIEhFQUQsIHNvIGFsbG93IGl0LgorCSAqLworCWlmICghc3RyY21wKG9sZG5hbWUsIG5ld25hbWUpKQorCQl2YWxpZGF0ZV9icmFuY2huYW1lKG5ld25hbWUsICZuZXdyZWYpOworCWVsc2UKKwkJdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUobmV3bmFtZSwgJm5ld3JlZiwgZm9yY2UpOworCisJcmVqZWN0X3JlYmFzZV9vcl9iaXNlY3RfYnJhbmNoKG9sZHJlZi5idWYpOworCisJaWYgKCFza2lwX3ByZWZpeChvbGRyZWYuYnVmLCAicmVmcy9oZWFkcy8iLCAmaW50ZXJwcmV0ZWRfb2xkbmFtZSkgfHwKKwkgICAgIXNraXBfcHJlZml4KG5ld3JlZi5idWYsICJyZWZzL2hlYWRzLyIsICZpbnRlcnByZXRlZF9uZXduYW1lKSkgeworCQlCVUcoImV4cGVjdGVkIHByZWZpeCBtaXNzaW5nIGZvciByZWZzIik7CisJfQorCisJaWYgKGNvcHkpCisJCXN0cmJ1Zl9hZGRmKCZsb2dtc2csICJCcmFuY2g6IGNvcGllZCAlcyB0byAlcyIsCisJCQkgICAgb2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1Zik7CisJZWxzZQorCQlzdHJidWZfYWRkZigmbG9nbXNnLCAiQnJhbmNoOiByZW5hbWVkICVzIHRvICVzIiwKKwkJCSAgICBvbGRyZWYuYnVmLCBuZXdyZWYuYnVmKTsKKworCWlmICghY29weSAmJiByZW5hbWVfcmVmKG9sZHJlZi5idWYsIG5ld3JlZi5idWYsIGxvZ21zZy5idWYpKQorCQlkaWUoXygiQnJhbmNoIHJlbmFtZSBmYWlsZWQiKSk7CisJaWYgKGNvcHkgJiYgY29weV9leGlzdGluZ19yZWYob2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1ZiwgbG9nbXNnLmJ1ZikpCisJCWRpZShfKCJCcmFuY2ggY29weSBmYWlsZWQiKSk7CisKKwlpZiAocmVjb3ZlcnkpIHsKKwkJaWYgKGNvcHkpCisJCQl3YXJuaW5nKF8oIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciKSwKKwkJCQlpbnRlcnByZXRlZF9vbGRuYW1lKTsKKwkJZWxzZQorCQkJd2FybmluZyhfKCJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIpLAorCQkJCWludGVycHJldGVkX29sZG5hbWUpOworCX0KKworCWlmICghY29weSAmJgorCSAgICByZXBsYWNlX2VhY2hfd29ya3RyZWVfaGVhZF9zeW1yZWYob2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1ZiwgbG9nbXNnLmJ1ZikpCisJCWRpZShfKCJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIiksIG5ld25hbWUpOworCisJc3RyYnVmX3JlbGVhc2UoJmxvZ21zZyk7CisKKwlzdHJidWZfYWRkZigmb2xkc2VjdGlvbiwgImJyYW5jaC4lcyIsIGludGVycHJldGVkX29sZG5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZvbGRyZWYpOworCXN0cmJ1Zl9hZGRmKCZuZXdzZWN0aW9uLCAiYnJhbmNoLiVzIiwgaW50ZXJwcmV0ZWRfbmV3bmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJm5ld3JlZik7CisJaWYgKCFjb3B5ICYmIGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24ob2xkc2VjdGlvbi5idWYsIG5ld3NlY3Rpb24uYnVmKSA8IDApCisJCWRpZShfKCJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiKSk7CisJaWYgKGNvcHkgJiYgc3RyY21wKG9sZG5hbWUsIG5ld25hbWUpICYmIGdpdF9jb25maWdfY29weV9zZWN0aW9uKG9sZHNlY3Rpb24uYnVmLCBuZXdzZWN0aW9uLmJ1ZikgPCAwKQorCQlkaWUoXygiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiKSk7CisJc3RyYnVmX3JlbGVhc2UoJm9sZHNlY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdzZWN0aW9uKTsKK30KKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZWRpdF9kZXNjcmlwdGlvbiwgIkVESVRfREVTQ1JJUFRJT04iKQorCitzdGF0aWMgaW50IGVkaXRfYnJhbmNoX2Rlc2NyaXB0aW9uKGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwlyZWFkX2JyYW5jaF9kZXNjKCZidWYsIGJyYW5jaF9uYW1lKTsKKwlpZiAoIWJ1Zi5sZW4gfHwgYnVmLmJ1ZltidWYubGVuLTFdICE9ICdcbicpCisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwlzdHJidWZfY29tbWVudGVkX2FkZGYoJmJ1ZiwKKwkJICAgIF8oIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorCQkgICAgICAiICAlc1xuIgorCQkgICAgICAiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iKSwKKwkJICAgIGJyYW5jaF9uYW1lLCBjb21tZW50X2xpbmVfY2hhcik7CisJd3JpdGVfZmlsZV9idWYoZWRpdF9kZXNjcmlwdGlvbigpLCBidWYuYnVmLCBidWYubGVuKTsKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJaWYgKGxhdW5jaF9lZGl0b3IoZWRpdF9kZXNjcmlwdGlvbigpLCAmYnVmLCBOVUxMKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfc3RyaXBzcGFjZSgmYnVmLCAxKTsKKworCXN0cmJ1Zl9hZGRmKCZuYW1lLCAiYnJhbmNoLiVzLmRlc2NyaXB0aW9uIiwgYnJhbmNoX25hbWUpOworCWdpdF9jb25maWdfc2V0KG5hbWUuYnVmLCBidWYubGVuID8gYnVmLmJ1ZiA6IE5VTEwpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX2JyYW5jaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZGVsZXRlID0gMCwgcmVuYW1lID0gMCwgY29weSA9IDAsIGZvcmNlID0gMCwgbGlzdCA9IDA7CisJaW50IHNob3dfY3VycmVudCA9IDA7CisJaW50IHJlZmxvZyA9IDAsIGVkaXRfZGVzY3JpcHRpb24gPSAwOworCWludCBxdWlldCA9IDAsIHVuc2V0X3Vwc3RyZWFtID0gMDsKKwljb25zdCBjaGFyICpuZXdfdXBzdHJlYW0gPSBOVUxMOworCWVudW0gYnJhbmNoX3RyYWNrIHRyYWNrOworCXN0cnVjdCByZWZfZmlsdGVyIGZpbHRlcjsKKwlpbnQgaWNhc2UgPSAwOworCXN0YXRpYyBzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcgPSBOVUxMLCAqKnNvcnRpbmdfdGFpbCA9ICZzb3J0aW5nOworCXN0cnVjdCByZWZfZm9ybWF0IGZvcm1hdCA9IFJFRl9GT1JNQVRfSU5JVDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfR1JPVVAoTl8oIkdlbmVyaWMgb3B0aW9ucyIpKSwKKwkJT1BUX19WRVJCT1NFKCZmaWx0ZXIudmVyYm9zZSwKKwkJCU5fKCJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIpKSwKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIikpLAorCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmdHJhY2ssIE5fKCJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIpLAorCQkJQlJBTkNIX1RSQUNLX0VYUExJQ0lUKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAic2V0LXVwc3RyZWFtIiwgJnRyYWNrLCBOXygiZG8gbm90IHVzZSIpLAorCQkJQlJBTkNIX1RSQUNLX09WRVJSSURFLCBQQVJTRV9PUFRfSElEREVOKSwKKwkJT1BUX1NUUklORygndScsICJzZXQtdXBzdHJlYW0tdG8iLCAmbmV3X3Vwc3RyZWFtLCBOXygidXBzdHJlYW0iKSwgTl8oImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIpKSwKKwkJT1BUX0JPT0woMCwgInVuc2V0LXVwc3RyZWFtIiwgJnVuc2V0X3Vwc3RyZWFtLCBOXygidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iKSksCisJCU9QVF9fQ09MT1IoJmJyYW5jaF91c2VfY29sb3IsIE5fKCJ1c2UgY29sb3JlZCBvdXRwdXQiKSksCisJCU9QVF9TRVRfSU5UKCdyJywgInJlbW90ZXMiLCAgICAgJmZpbHRlci5raW5kLCBOXygiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIpLAorCQkJRklMVEVSX1JFRlNfUkVNT1RFUyksCisJCU9QVF9DT05UQUlOUygmZmlsdGVyLndpdGhfY29tbWl0LCBOXygicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX05PX0NPTlRBSU5TKCZmaWx0ZXIubm9fY29tbWl0LCBOXygicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX1dJVEgoJmZpbHRlci53aXRoX2NvbW1pdCwgTl8oInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiKSksCisJCU9QVF9XSVRIT1VUKCZmaWx0ZXIubm9fY29tbWl0LCBOXygicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX19BQkJSRVYoJmZpbHRlci5hYmJyZXYpLAorCisJCU9QVF9HUk9VUChOXygiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIpKSwKKwkJT1BUX1NFVF9JTlQoJ2EnLCAiYWxsIiwgJmZpbHRlci5raW5kLCBOXygibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiKSwKKwkJCUZJTFRFUl9SRUZTX1JFTU9URVMgfCBGSUxURVJfUkVGU19CUkFOQ0hFUyksCisJCU9QVF9CSVQoJ2QnLCAiZGVsZXRlIiwgJmRlbGV0ZSwgTl8oImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIiksIDEpLAorCQlPUFRfQklUKCdEJywgTlVMTCwgJmRlbGV0ZSwgTl8oImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiKSwgMiksCisJCU9QVF9CSVQoJ20nLCAibW92ZSIsICZyZW5hbWUsIE5fKCJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIpLCAxKSwKKwkJT1BUX0JJVCgnTScsIE5VTEwsICZyZW5hbWUsIE5fKCJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIiksIDIpLAorCQlPUFRfQklUKCdjJywgImNvcHkiLCAmY29weSwgTl8oImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciKSwgMSksCisJCU9QVF9CSVQoJ0MnLCBOVUxMLCAmY29weSwgTl8oImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIpLCAyKSwKKwkJT1BUX0JPT0woJ2wnLCAibGlzdCIsICZsaXN0LCBOXygibGlzdCBicmFuY2ggbmFtZXMiKSksCisJCU9QVF9CT09MKDAsICJzaG93LWN1cnJlbnQiLCAmc2hvd19jdXJyZW50LCBOXygic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIikpLAorCQlPUFRfQk9PTCgwLCAiY3JlYXRlLXJlZmxvZyIsICZyZWZsb2csIE5fKCJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIpKSwKKwkJT1BUX0JPT0woMCwgImVkaXQtZGVzY3JpcHRpb24iLCAmZWRpdF9kZXNjcmlwdGlvbiwKKwkJCSBOXygiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIpLCBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIikpLAorCQlPUFRfTk9fTUVSR0VEKCZmaWx0ZXIsIE5fKCJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiKSksCisJCU9QVF9DT0xVTU4oMCwgImNvbHVtbiIsICZjb2xvcHRzLCBOXygibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIikpLAorCQlPUFRfUkVGX1NPUlQoc29ydGluZ190YWlsKSwKKwkJeworCQkJT1BUSU9OX0NBTExCQUNLLCAwLCAicG9pbnRzLWF0IiwgJmZpbHRlci5wb2ludHNfYXQsIE5fKCJvYmplY3QiKSwKKwkJCU5fKCJwcmludCBvbmx5IGJyYW5jaGVzIG9mIHRoZSBvYmplY3QiKSwgMCwgcGFyc2Vfb3B0X29iamVjdF9uYW1lCisJCX0sCisJCU9QVF9CT09MKCdpJywgImlnbm9yZS1jYXNlIiwgJmljYXNlLCBOXygic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIikpLAorCQlPUFRfU1RSSU5HKCAgMCAsICJmb3JtYXQiLCAmZm9ybWF0LmZvcm1hdCwgTl8oImZvcm1hdCIpLCBOXygiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlzZXR1cF9yZWZfZmlsdGVyX3BvcmNlbGFpbl9tc2coKTsKKworCW1lbXNldCgmZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CisJZmlsdGVyLmtpbmQgPSBGSUxURVJfUkVGU19CUkFOQ0hFUzsKKwlmaWx0ZXIuYWJicmV2ID0gLTE7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2JyYW5jaF91c2FnZSwgb3B0aW9ucyk7CisKKwlnaXRfY29uZmlnKGdpdF9icmFuY2hfY29uZmlnLCBzb3J0aW5nX3RhaWwpOworCisJdHJhY2sgPSBnaXRfYnJhbmNoX3RyYWNrOworCisJaGVhZCA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgMCwgJmhlYWRfb2lkLCBOVUxMKTsKKwlpZiAoIWhlYWQpCisJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIpKTsKKwlpZiAoIXN0cmNtcChoZWFkLCAiSEVBRCIpKQorCQlmaWx0ZXIuZGV0YWNoZWQgPSAxOworCWVsc2UgaWYgKCFza2lwX3ByZWZpeChoZWFkLCAicmVmcy9oZWFkcy8iLCAmaGVhZCkpCisJCWRpZShfKCJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIpKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgYnVpbHRpbl9icmFuY2hfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKCFkZWxldGUgJiYgIXJlbmFtZSAmJiAhY29weSAmJiAhZWRpdF9kZXNjcmlwdGlvbiAmJiAhbmV3X3Vwc3RyZWFtICYmCisJICAgICFzaG93X2N1cnJlbnQgJiYgIXVuc2V0X3Vwc3RyZWFtICYmIGFyZ2MgPT0gMCkKKwkJbGlzdCA9IDE7CisKKwlpZiAoZmlsdGVyLndpdGhfY29tbWl0IHx8IGZpbHRlci5tZXJnZSAhPSBSRUZfRklMVEVSX01FUkdFRF9OT05FIHx8IGZpbHRlci5wb2ludHNfYXQubnIgfHwKKwkgICAgZmlsdGVyLm5vX2NvbW1pdCkKKwkJbGlzdCA9IDE7CisKKwlpZiAoISFkZWxldGUgKyAhIXJlbmFtZSArICEhY29weSArICEhbmV3X3Vwc3RyZWFtICsgISFzaG93X2N1cnJlbnQgKworCSAgICBsaXN0ICsgdW5zZXRfdXBzdHJlYW0gPiAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9icmFuY2hfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKGZpbHRlci5hYmJyZXYgPT0gLTEpCisJCWZpbHRlci5hYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKwlmaWx0ZXIuaWdub3JlX2Nhc2UgPSBpY2FzZTsKKworCWZpbmFsaXplX2NvbG9wdHMoJmNvbG9wdHMsIC0xKTsKKwlpZiAoZmlsdGVyLnZlcmJvc2UpIHsKKwkJaWYgKGV4cGxpY2l0bHlfZW5hYmxlX2NvbHVtbihjb2xvcHRzKSkKKwkJCWRpZShfKCItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiKSk7CisJCWNvbG9wdHMgPSAwOworCX0KKworCWlmIChmb3JjZSkgeworCQlkZWxldGUgKj0gMjsKKwkJcmVuYW1lICo9IDI7CisJCWNvcHkgKj0gMjsKKwl9CisKKwlpZiAobGlzdCkKKwkJc2V0dXBfYXV0b19wYWdlcigiYnJhbmNoIiwgMSk7CisKKwlpZiAoZGVsZXRlKSB7CisJCWlmICghYXJnYykKKwkJCWRpZShfKCJicmFuY2ggbmFtZSByZXF1aXJlZCIpKTsKKwkJcmV0dXJuIGRlbGV0ZV9icmFuY2hlcyhhcmdjLCBhcmd2LCBkZWxldGUgPiAxLCBmaWx0ZXIua2luZCwgcXVpZXQpOworCX0gZWxzZSBpZiAoc2hvd19jdXJyZW50KSB7CisJCXByaW50X2N1cnJlbnRfYnJhbmNoX25hbWUoKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChsaXN0KSB7CisJCS8qICBnaXQgYnJhbmNoIC0tbG9jYWwgYWxzbyBzaG93cyBIRUFEIHdoZW4gaXQgaXMgZGV0YWNoZWQgKi8KKwkJaWYgKChmaWx0ZXIua2luZCAmIEZJTFRFUl9SRUZTX0JSQU5DSEVTKSAmJiBmaWx0ZXIuZGV0YWNoZWQpCisJCQlmaWx0ZXIua2luZCB8PSBGSUxURVJfUkVGU19ERVRBQ0hFRF9IRUFEOworCQlmaWx0ZXIubmFtZV9wYXR0ZXJucyA9IGFyZ3Y7CisJCS8qCisJCSAqIElmIG5vIHNvcnRpbmcgcGFyYW1ldGVyIGlzIGdpdmVuIHRoZW4gd2UgZGVmYXVsdCB0byBzb3J0aW5nCisJCSAqIGJ5ICdyZWZuYW1lJy4gVGhpcyB3b3VsZCBnaXZlIHVzIGFuIGFscGhhYmV0aWNhbGx5IHNvcnRlZAorCQkgKiBhcnJheSB3aXRoIHRoZSAnSEVBRCcgcmVmIGF0IHRoZSBiZWdpbm5pbmcgZm9sbG93ZWQgYnkKKwkJICogbG9jYWwgYnJhbmNoZXMgJ3JlZnMvaGVhZHMvLi4uJyBhbmQgZmluYWxseSByZW1vdGUtdHJhY2tpbmcKKwkJICogYnJhbmNoZXMgJ3JlZnMvcmVtb3Rlcy8uLi4nLgorCQkgKi8KKwkJaWYgKCFzb3J0aW5nKQorCQkJc29ydGluZyA9IHJlZl9kZWZhdWx0X3NvcnRpbmcoKTsKKwkJc29ydGluZy0+aWdub3JlX2Nhc2UgPSBpY2FzZTsKKwkJcHJpbnRfcmVmX2xpc3QoJmZpbHRlciwgc29ydGluZywgJmZvcm1hdCk7CisJCXByaW50X2NvbHVtbnMoJm91dHB1dCwgY29sb3B0cywgTlVMTCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZvdXRwdXQsIDApOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGVkaXRfZGVzY3JpcHRpb24pIHsKKwkJY29uc3QgY2hhciAqYnJhbmNoX25hbWU7CisJCXN0cnVjdCBzdHJidWYgYnJhbmNoX3JlZiA9IFNUUkJVRl9JTklUOworCisJCWlmICghYXJnYykgeworCQkJaWYgKGZpbHRlci5kZXRhY2hlZCkKKwkJCQlkaWUoXygiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIpKTsKKwkJCWJyYW5jaF9uYW1lID0gaGVhZDsKKwkJfSBlbHNlIGlmIChhcmdjID09IDEpCisJCQlicmFuY2hfbmFtZSA9IGFyZ3ZbMF07CisJCWVsc2UKKwkJCWRpZShfKCJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIpKTsKKworCQlzdHJidWZfYWRkZigmYnJhbmNoX3JlZiwgInJlZnMvaGVhZHMvJXMiLCBicmFuY2hfbmFtZSk7CisJCWlmICghcmVmX2V4aXN0cyhicmFuY2hfcmVmLmJ1ZikpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZicmFuY2hfcmVmKTsKKworCQkJaWYgKCFhcmdjKQorCQkJCXJldHVybiBlcnJvcihfKCJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIpLAorCQkJCQkgICAgIGJyYW5jaF9uYW1lKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZXJyb3IoXygiTm8gYnJhbmNoIG5hbWVkICclcycuIiksCisJCQkJCSAgICAgYnJhbmNoX25hbWUpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZicmFuY2hfcmVmKTsKKworCQlpZiAoZWRpdF9icmFuY2hfZGVzY3JpcHRpb24oYnJhbmNoX25hbWUpKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChjb3B5KSB7CisJCWlmICghYXJnYykKKwkJCWRpZShfKCJicmFuY2ggbmFtZSByZXF1aXJlZCIpKTsKKwkJZWxzZSBpZiAoYXJnYyA9PSAxKQorCQkJY29weV9vcl9yZW5hbWVfYnJhbmNoKGhlYWQsIGFyZ3ZbMF0sIDEsIGNvcHkgPiAxKTsKKwkJZWxzZSBpZiAoYXJnYyA9PSAyKQorCQkJY29weV9vcl9yZW5hbWVfYnJhbmNoKGFyZ3ZbMF0sIGFyZ3ZbMV0sIDEsIGNvcHkgPiAxKTsKKwkJZWxzZQorCQkJZGllKF8oInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIikpOworCX0gZWxzZSBpZiAocmVuYW1lKSB7CisJCWlmICghYXJnYykKKwkJCWRpZShfKCJicmFuY2ggbmFtZSByZXF1aXJlZCIpKTsKKwkJZWxzZSBpZiAoYXJnYyA9PSAxKQorCQkJY29weV9vcl9yZW5hbWVfYnJhbmNoKGhlYWQsIGFyZ3ZbMF0sIDAsIHJlbmFtZSA+IDEpOworCQllbHNlIGlmIChhcmdjID09IDIpCisJCQljb3B5X29yX3JlbmFtZV9icmFuY2goYXJndlswXSwgYXJndlsxXSwgMCwgcmVuYW1lID4gMSk7CisJCWVsc2UKKwkJCWRpZShfKCJ0b28gbWFueSBhcmd1bWVudHMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIpKTsKKwl9IGVsc2UgaWYgKG5ld191cHN0cmVhbSkgeworCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KGFyZ3ZbMF0pOworCisJCWlmIChhcmdjID4gMSkKKwkJCWRpZShfKCJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIpKTsKKworCQlpZiAoIWJyYW5jaCkgeworCQkJaWYgKCFhcmdjIHx8ICFzdHJjbXAoYXJndlswXSwgIkhFQUQiKSkKKwkJCQlkaWUoXygiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gIgorCQkJCSAgICAgICJpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIpLAorCQkJCSAgICBuZXdfdXBzdHJlYW0pOworCQkJZGllKF8oIm5vIHN1Y2ggYnJhbmNoICclcyciKSwgYXJndlswXSk7CisJCX0KKworCQlpZiAoIXJlZl9leGlzdHMoYnJhbmNoLT5yZWZuYW1lKSkKKwkJCWRpZShfKCJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIpLCBicmFuY2gtPm5hbWUpOworCisJCS8qCisJCSAqIGNyZWF0ZV9icmFuY2ggdGFrZXMgY2FyZSBvZiBzZXR0aW5nIHVwIHRoZSB0cmFja2luZworCQkgKiBpbmZvIGFuZCBtYWtpbmcgc3VyZSBuZXdfdXBzdHJlYW0gaXMgY29ycmVjdAorCQkgKi8KKwkJY3JlYXRlX2JyYW5jaCh0aGVfcmVwb3NpdG9yeSwgYnJhbmNoLT5uYW1lLCBuZXdfdXBzdHJlYW0sCisJCQkgICAgICAwLCAwLCAwLCBxdWlldCwgQlJBTkNIX1RSQUNLX09WRVJSSURFKTsKKwl9IGVsc2UgaWYgKHVuc2V0X3Vwc3RyZWFtKSB7CisJCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQoYXJndlswXSk7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGFyZ2MgPiAxKQorCQkJZGllKF8oInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIpKTsKKworCQlpZiAoIWJyYW5jaCkgeworCQkJaWYgKCFhcmdjIHx8ICFzdHJjbXAoYXJndlswXSwgIkhFQUQiKSkKKwkJCQlkaWUoXygiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiAiCisJCQkJICAgICAgIml0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIikpOworCQkJZGllKF8oIm5vIHN1Y2ggYnJhbmNoICclcyciKSwgYXJndlswXSk7CisJCX0KKworCQlpZiAoIWJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKGJyYW5jaCkpCisJCQlkaWUoXygiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIiksIGJyYW5jaC0+bmFtZSk7CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcy5yZW1vdGUiLCBicmFuY2gtPm5hbWUpOworCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihidWYuYnVmLCBOVUxMLCBOVUxMLCAxKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAiYnJhbmNoLiVzLm1lcmdlIiwgYnJhbmNoLT5uYW1lKTsKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgTlVMTCwgTlVMTCwgMSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0gZWxzZSBpZiAoYXJnYyA+IDAgJiYgYXJnYyA8PSAyKSB7CisJCWlmIChmaWx0ZXIua2luZCAhPSBGSUxURVJfUkVGU19CUkFOQ0hFUykKKwkJCWRpZShfKCJUaGUgLWEsIGFuZCAtciwgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IHRha2UgYSBicmFuY2ggbmFtZS5cbiIKKwkJCQkgICJEaWQgeW91IG1lYW4gdG8gdXNlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIpKTsKKworCQlpZiAodHJhY2sgPT0gQlJBTkNIX1RSQUNLX09WRVJSSURFKQorCQkJZGllKF8oInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAnLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIikpOworCisJCWNyZWF0ZV9icmFuY2godGhlX3JlcG9zaXRvcnksCisJCQkgICAgICBhcmd2WzBdLCAoYXJnYyA9PSAyKSA/IGFyZ3ZbMV0gOiBoZWFkLAorCQkJICAgICAgZm9yY2UsIDAsIHJlZmxvZywgcXVpZXQsIHRyYWNrKTsKKworCX0gZWxzZQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9icmFuY2hfdXNhZ2UsIG9wdGlvbnMpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2J1bmRsZS5jIGIvYnVpbHRpbi9idW5kbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQ5ZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9idW5kbGUuYwpAQCAtMCwwICsxLDE5NCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVuZGxlLmgiCisKKy8qCisgKiBCYXNpYyBoYW5kbGVyIGZvciBidW5kbGUgZmlsZXMgdG8gY29ubmVjdCByZXBvc2l0b3JpZXMgdmlhIHNuZWFrZXJuZXQuCisgKiBJbnZvY2F0aW9uIG11c3QgaW5jbHVkZSBhY3Rpb24uCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBjcmVhdGUgYSBidW5kbGUgb3IgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBhbiBleGlzdGluZworICogYnVuZGxlIHN1cHBvcnRpbmcgImZldGNoIiwgInB1bGwiLCBhbmQgImxzLXJlbW90ZSIuCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV91c2FnZVtdID0geworICBOXygiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iKSwKKyAgTl8oImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIpLAorICBOXygiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIpLAorICBOXygiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV9jcmVhdGVfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IiksCisgIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9idW5kbGVfdmVyaWZ5X3VzYWdlW10gPSB7CisgIE5fKCJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV9saXN0X2hlYWRzX3VzYWdlW10gPSB7CisgIE5fKCJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIiksCisgIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9idW5kbGVfdW5idW5kbGVfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIiksCisgIE5VTEwKK307CisKK3N0YXRpYyBpbnQgdmVyYm9zZTsKKworc3RhdGljIGludCBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoaW50IGFyZ2MsCisJCWNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBjaGFyKiBwcmVmaXgsCisJCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLAorCQljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSwKKwkJY29uc3QgY2hhciAqKmJ1bmRsZV9maWxlKSB7CisJaW50IG5ld2FyZ2M7CisJbmV3YXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2VzdHIsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCWlmIChhcmdjIDwgMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlc3RyLCBvcHRpb25zKTsKKwkqYnVuZGxlX2ZpbGUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmd2WzBdKTsKKwlyZXR1cm4gbmV3YXJnYzsKK30KKworc3RhdGljIGludCBjbWRfYnVuZGxlX2NyZWF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworCWludCBhbGxfcHJvZ3Jlc3NfaW1wbGllZCA9IDA7CisJaW50IHByb2dyZXNzID0gaXNhdHR5KFNUREVSUl9GSUxFTk8pOworCXN0cnVjdCBhcmd2X2FycmF5IHBhY2tfb3B0czsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfU0VUX0lOVCgncScsICJxdWlldCIsICZwcm9ncmVzcywKKwkJCSAgICBOXygiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiKSwgMCksCisJCU9QVF9TRVRfSU5UKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywKKwkJCSAgICBOXygic2hvdyBwcm9ncmVzcyBtZXRlciIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgImFsbC1wcm9ncmVzcyIsICZwcm9ncmVzcywKKwkJCSAgICBOXygic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiKSwgMiksCisJCU9QVF9CT09MKDAsICJhbGwtcHJvZ3Jlc3MtaW1wbGllZCIsCisJCQkgJmFsbF9wcm9ncmVzc19pbXBsaWVkLAorCQkJIE5fKCJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iKSksCisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciogYnVuZGxlX2ZpbGU7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19jbWRfYnVuZGxlKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCWJ1aWx0aW5fYnVuZGxlX2NyZWF0ZV91c2FnZSwgb3B0aW9ucywgJmJ1bmRsZV9maWxlKTsKKwkvKiBidW5kbGUgaW50ZXJuYWxzIHVzZSBhcmd2WzFdIGFzIGZ1cnRoZXIgcGFyYW1ldGVycyAqLworCisJYXJndl9hcnJheV9pbml0KCZwYWNrX29wdHMpOworCWlmIChwcm9ncmVzcyA9PSAwKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb3B0cywgIi0tcXVpZXQiKTsKKwllbHNlIGlmIChwcm9ncmVzcyA9PSAxKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb3B0cywgIi0tcHJvZ3Jlc3MiKTsKKwllbHNlIGlmIChwcm9ncmVzcyA9PSAyKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb3B0cywgIi0tYWxsLXByb2dyZXNzIik7CisJaWYgKHByb2dyZXNzICYmIGFsbF9wcm9ncmVzc19pbXBsaWVkKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb3B0cywgIi0tYWxsLXByb2dyZXNzLWltcGxpZWQiKTsKKworCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCWRpZShfKCJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIikpOworCXJldHVybiAhIWNyZWF0ZV9idW5kbGUodGhlX3JlcG9zaXRvcnksIGJ1bmRsZV9maWxlLCBhcmdjLCBhcmd2LCAmcGFja19vcHRzKTsKK30KKworc3RhdGljIGludCBjbWRfYnVuZGxlX3ZlcmlmeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKKwlpbnQgYnVuZGxlX2ZkID0gLTE7CisJaW50IHF1aWV0ID0gMDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgncScsICJxdWlldCIsICZxdWlldCwKKwkJCSAgICBOXygiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiKSksCisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciogYnVuZGxlX2ZpbGU7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19jbWRfYnVuZGxlKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCWJ1aWx0aW5fYnVuZGxlX3ZlcmlmeV91c2FnZSwgb3B0aW9ucywgJmJ1bmRsZV9maWxlKTsKKwkvKiBidW5kbGUgaW50ZXJuYWxzIHVzZSBhcmd2WzFdIGFzIGZ1cnRoZXIgcGFyYW1ldGVycyAqLworCisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwlpZiAoKGJ1bmRsZV9mZCA9IHJlYWRfYnVuZGxlX2hlYWRlcihidW5kbGVfZmlsZSwgJmhlYWRlcikpIDwgMCkKKwkJcmV0dXJuIDE7CisJY2xvc2UoYnVuZGxlX2ZkKTsKKwlpZiAodmVyaWZ5X2J1bmRsZSh0aGVfcmVwb3NpdG9yeSwgJmhlYWRlciwgIXF1aWV0KSkKKwkJcmV0dXJuIDE7CisJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIG9rYXlcbiIpLCBidW5kbGVfZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kX2J1bmRsZV9saXN0X2hlYWRzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworCWludCBidW5kbGVfZmQgPSAtMTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIqIGJ1bmRsZV9maWxlOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnNfY21kX2J1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQlidWlsdGluX2J1bmRsZV9saXN0X2hlYWRzX3VzYWdlLCBvcHRpb25zLCAmYnVuZGxlX2ZpbGUpOworCS8qIGJ1bmRsZSBpbnRlcm5hbHMgdXNlIGFyZ3ZbMV0gYXMgZnVydGhlciBwYXJhbWV0ZXJzICovCisKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCWlmICgoYnVuZGxlX2ZkID0gcmVhZF9idW5kbGVfaGVhZGVyKGJ1bmRsZV9maWxlLCAmaGVhZGVyKSkgPCAwKQorCQlyZXR1cm4gMTsKKwljbG9zZShidW5kbGVfZmQpOworCXJldHVybiAhIWxpc3RfYnVuZGxlX3JlZnMoJmhlYWRlciwgYXJnYywgYXJndik7Cit9CisKK3N0YXRpYyBpbnQgY21kX2J1bmRsZV91bmJ1bmRsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKKwlpbnQgYnVuZGxlX2ZkID0gLTE7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyKiBidW5kbGVfZmlsZTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoYXJnYywgYXJndiwgcHJlZml4LAorCQkJYnVpbHRpbl9idW5kbGVfdW5idW5kbGVfdXNhZ2UsIG9wdGlvbnMsICZidW5kbGVfZmlsZSk7CisJLyogYnVuZGxlIGludGVybmFscyB1c2UgYXJndlsxXSBhcyBmdXJ0aGVyIHBhcmFtZXRlcnMgKi8KKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJaWYgKChidW5kbGVfZmQgPSByZWFkX2J1bmRsZV9oZWFkZXIoYnVuZGxlX2ZpbGUsICZoZWFkZXIpKSA8IDApCisJCXJldHVybiAxOworCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCWRpZShfKCJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iKSk7CisJcmV0dXJuICEhdW5idW5kbGUodGhlX3JlcG9zaXRvcnksICZoZWFkZXIsIGJ1bmRsZV9mZCwgMCkgfHwKKwkJbGlzdF9idW5kbGVfcmVmcygmaGVhZGVyLCBhcmdjLCBhcmd2KTsKK30KKworaW50IGNtZF9idW5kbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiKSksCisJCU9QVF9FTkQoKQorCX07CisJaW50IHJlc3VsdDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgYnVpbHRpbl9idW5kbGVfdXNhZ2UsCisJCVBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJidW5kbGUiKTsKKworCWlmIChhcmdjIDwgMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fYnVuZGxlX3VzYWdlLCBvcHRpb25zKTsKKworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImNyZWF0ZSIpKQorCQlyZXN1bHQgPSBjbWRfYnVuZGxlX2NyZWF0ZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInZlcmlmeSIpKQorCQlyZXN1bHQgPSBjbWRfYnVuZGxlX3ZlcmlmeShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImxpc3QtaGVhZHMiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV9saXN0X2hlYWRzKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidW5idW5kbGUiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV91bmJ1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgeworCQllcnJvcihfKCJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9idW5kbGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlyZXR1cm4gcmVzdWx0ID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NhdC1maWxlLmMgYi9idWlsdGluL2NhdC1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyZjlmYwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2F0LWZpbGUuYwpAQCAtMCwwICsxLDcxOCBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorCitzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyB7CisJaW50IGVuYWJsZWQ7CisJaW50IGZvbGxvd19zeW1saW5rczsKKwlpbnQgcHJpbnRfY29udGVudHM7CisJaW50IGJ1ZmZlcl9vdXRwdXQ7CisJaW50IGFsbF9vYmplY3RzOworCWludCB1bm9yZGVyZWQ7CisJaW50IGNtZG1vZGU7IC8qIG1heSBiZSAndycgb3IgJ2MnIGZvciAtLWZpbHRlcnMgb3IgLS10ZXh0Y29udiAqLworCWNvbnN0IGNoYXIgKmZvcm1hdDsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JjZV9wYXRoOworCitzdGF0aWMgaW50IGZpbHRlcl9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgY2hhciAqKmJ1ZiwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwkqYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCBzaXplKTsKKwlpZiAoISpidWYpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIpLAorCQkJICAgICBvaWRfdG9faGV4KG9pZCksIHBhdGgpOworCWlmICgodHlwZSA9PSBPQkpfQkxPQikgJiYgU19JU1JFRyhtb2RlKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHN0cmJ1ZiA9IFNUUkJVRl9JTklUOworCQlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUoJnRoZV9pbmRleCwgcGF0aCwgKmJ1ZiwgKnNpemUsICZzdHJidWYpKSB7CisJCQlmcmVlKCpidWYpOworCQkJKnNpemUgPSBzdHJidWYubGVuOworCQkJKmJ1ZiA9IHN0cmJ1Zl9kZXRhY2goJnN0cmJ1ZiwgTlVMTCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHJlYW1fYmxvYihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaWYgKHN0cmVhbV9ibG9iX3RvX2ZkKDEsIG9pZCwgTlVMTCwgMCkpCisJCWRpZSgidW5hYmxlIHRvIHN0cmVhbSAlcyB0byBzdGRvdXQiLCBvaWRfdG9faGV4KG9pZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhdF9vbmVfZmlsZShpbnQgb3B0LCBjb25zdCBjaGFyICpleHBfdHlwZSwgY29uc3QgY2hhciAqb2JqX25hbWUsCisJCQlpbnQgdW5rbm93bl90eXBlKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYmpfY29udGV4dDsKKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2kgPSBPQkpFQ1RfSU5GT19JTklUOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBmbGFncyA9IE9CSkVDVF9JTkZPX0xPT0tVUF9SRVBMQUNFOworCWNvbnN0IGNoYXIgKnBhdGggPSBmb3JjZV9wYXRoOworCisJaWYgKHVua25vd25fdHlwZSkKKwkJZmxhZ3MgfD0gT0JKRUNUX0lORk9fQUxMT1dfVU5LTk9XTl9UWVBFOworCisJaWYgKGdldF9vaWRfd2l0aF9jb250ZXh0KHRoZV9yZXBvc2l0b3J5LCBvYmpfbmFtZSwKKwkJCQkgR0VUX09JRF9SRUNPUkRfUEFUSCwKKwkJCQkgJm9pZCwgJm9ial9jb250ZXh0KSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIG9ial9uYW1lKTsKKworCWlmICghcGF0aCkKKwkJcGF0aCA9IG9ial9jb250ZXh0LnBhdGg7CisJaWYgKG9ial9jb250ZXh0Lm1vZGUgPT0gU19JRklOVkFMSUQpCisJCW9ial9jb250ZXh0Lm1vZGUgPSAwMTAwNjQ0OworCisJYnVmID0gTlVMTDsKKwlzd2l0Y2ggKG9wdCkgeworCWNhc2UgJ3QnOgorCQlvaS50eXBlX25hbWUgPSAmc2I7CisJCWlmIChvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQodGhlX3JlcG9zaXRvcnksICZvaWQsICZvaSwgZmxhZ3MpIDwgMCkKKwkJCWRpZSgiZ2l0IGNhdC1maWxlOiBjb3VsZCBub3QgZ2V0IG9iamVjdCBpbmZvIik7CisJCWlmIChzYi5sZW4pIHsKKwkJCXByaW50ZigiJXNcbiIsIHNiLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlICdzJzoKKwkJb2kuc2l6ZXAgPSAmc2l6ZTsKKwkJaWYgKG9pZF9vYmplY3RfaW5mb19leHRlbmRlZCh0aGVfcmVwb3NpdG9yeSwgJm9pZCwgJm9pLCBmbGFncykgPCAwKQorCQkJZGllKCJnaXQgY2F0LWZpbGU6IGNvdWxkIG5vdCBnZXQgb2JqZWN0IGluZm8iKTsKKwkJcHJpbnRmKCIlIlBSSXVNQVgiXG4iLCAodWludG1heF90KXNpemUpOworCQlyZXR1cm4gMDsKKworCWNhc2UgJ2UnOgorCQlyZXR1cm4gIWhhc19vYmplY3RfZmlsZSgmb2lkKTsKKworCWNhc2UgJ3cnOgorCQlpZiAoIXBhdGgpCisJCQlkaWUoImdpdCBjYXQtZmlsZSAtLWZpbHRlcnMgJXM6IDxvYmplY3Q+IG11c3QgYmUgIgorCQkJICAgICI8c2hhMTpwYXRoPiIsIG9ial9uYW1lKTsKKworCQlpZiAoZmlsdGVyX29iamVjdChwYXRoLCBvYmpfY29udGV4dC5tb2RlLAorCQkJCSAgJm9pZCwgJmJ1ZiwgJnNpemUpKQorCQkJcmV0dXJuIC0xOworCQlicmVhazsKKworCWNhc2UgJ2MnOgorCQlpZiAoIXBhdGgpCisJCQlkaWUoImdpdCBjYXQtZmlsZSAtLXRleHRjb252ICVzOiA8b2JqZWN0PiBtdXN0IGJlIDxzaGExOnBhdGg+IiwKKwkJCSAgICBvYmpfbmFtZSk7CisKKwkJaWYgKHRleHRjb252X29iamVjdCh0aGVfcmVwb3NpdG9yeSwgcGF0aCwgb2JqX2NvbnRleHQubW9kZSwKKwkJCQkgICAgJm9pZCwgMSwgJmJ1ZiwgJnNpemUpKQorCQkJYnJlYWs7CisJCS8qIGVsc2UgZmFsbHRocm91Z2ggKi8KKworCWNhc2UgJ3AnOgorCQl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCAmb2lkLCBOVUxMKTsKKwkJaWYgKHR5cGUgPCAwKQorCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIG9ial9uYW1lKTsKKworCQkvKiBjdXN0b20gcHJldHR5LXByaW50IGhlcmUgKi8KKwkJaWYgKHR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJCWNvbnN0IGNoYXIgKmxzX2FyZ3NbM10gPSB7IE5VTEwgfTsKKwkJCWxzX2FyZ3NbMF0gPSAgImxzLXRyZWUiOworCQkJbHNfYXJnc1sxXSA9ICBvYmpfbmFtZTsKKwkJCXJldHVybiBjbWRfbHNfdHJlZSgyLCBsc19hcmdzLCBOVUxMKTsKKwkJfQorCisJCWlmICh0eXBlID09IE9CSl9CTE9CKQorCQkJcmV0dXJuIHN0cmVhbV9ibG9iKCZvaWQpOworCQlidWYgPSByZWFkX29iamVjdF9maWxlKCZvaWQsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghYnVmKQorCQkJZGllKCJDYW5ub3QgcmVhZCBvYmplY3QgJXMiLCBvYmpfbmFtZSk7CisKKwkJLyogb3RoZXJ3aXNlIGp1c3Qgc3BpdCBvdXQgdGhlIGRhdGEgKi8KKwkJYnJlYWs7CisKKwljYXNlIDA6CisJCWlmICh0eXBlX2Zyb21fc3RyaW5nKGV4cF90eXBlKSA9PSBPQkpfQkxPQikgeworCQkJc3RydWN0IG9iamVjdF9pZCBibG9iX29pZDsKKwkJCWlmIChvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvaWQsIE5VTEwpID09IE9CSl9UQUcpIHsKKwkJCQljaGFyICpidWZmZXIgPSByZWFkX29iamVjdF9maWxlKCZvaWQsICZ0eXBlLAorCQkJCQkJCQkmc2l6ZSk7CisJCQkJY29uc3QgY2hhciAqdGFyZ2V0OworCQkJCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAib2JqZWN0ICIsICZ0YXJnZXQpIHx8CisJCQkJICAgIGdldF9vaWRfaGV4KHRhcmdldCwgJmJsb2Jfb2lkKSkKKwkJCQkJZGllKCIlcyBub3QgYSB2YWxpZCB0YWciLCBvaWRfdG9faGV4KCZvaWQpKTsKKwkJCQlmcmVlKGJ1ZmZlcik7CisJCQl9IGVsc2UKKwkJCQlvaWRjcHkoJmJsb2Jfb2lkLCAmb2lkKTsKKworCQkJaWYgKG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJmJsb2Jfb2lkLCBOVUxMKSA9PSBPQkpfQkxPQikKKwkJCQlyZXR1cm4gc3RyZWFtX2Jsb2IoJmJsb2Jfb2lkKTsKKwkJCS8qCisJCQkgKiB3ZSBhdHRlbXB0ZWQgdG8gZGVyZWZlcmVuY2UgYSB0YWcgdG8gYSBibG9iCisJCQkgKiBhbmQgZmFpbGVkOyB0aGVyZSBtYXkgYmUgbmV3IGRlcmVmZXJlbmNlCisJCQkgKiBtZWNoYW5pc21zIHRoaXMgY29kZSBpcyBub3QgYXdhcmUgb2YuCisJCQkgKiBmYWxsLWJhY2sgdG8gdGhlIHVzdWFsIGNhc2UuCisJCQkgKi8KKwkJfQorCQlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAmb2lkLCBleHBfdHlwZSwgJnNpemUsIE5VTEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRpZSgiZ2l0IGNhdC1maWxlOiB1bmtub3duIG9wdGlvbjogJXMiLCBleHBfdHlwZSk7CisJfQorCisJaWYgKCFidWYpCisJCWRpZSgiZ2l0IGNhdC1maWxlICVzOiBiYWQgZmlsZSIsIG9ial9uYW1lKTsKKworCXdyaXRlX29yX2RpZSgxLCBidWYsIHNpemUpOworCWZyZWUoYnVmKTsKKwlmcmVlKG9ial9jb250ZXh0LnBhdGgpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZXhwYW5kX2RhdGEgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJb2ZmX3QgZGlza19zaXplOworCWNvbnN0IGNoYXIgKnJlc3Q7CisJc3RydWN0IG9iamVjdF9pZCBkZWx0YV9iYXNlX29pZDsKKworCS8qCisJICogSWYgbWFya19xdWVyeSBpcyB0cnVlLCB3ZSBkbyBub3QgZXhwYW5kIGFueXRoaW5nLCBidXQgcmF0aGVyCisJICoganVzdCBtYXJrIHRoZSBvYmplY3RfaW5mbyB3aXRoIGl0ZW1zIHdlIHdpc2ggdG8gcXVlcnkuCisJICovCisJaW50IG1hcmtfcXVlcnk7CisKKwkvKgorCSAqIFdoZXRoZXIgdG8gc3BsaXQgdGhlIGlucHV0IG9uIHdoaXRlc3BhY2UgYmVmb3JlIGZlZWRpbmcgaXQgdG8KKwkgKiBnZXRfc2hhMTsgdGhpcyBpcyBkZWNpZGVkIGR1cmluZyB0aGUgbWFya19xdWVyeSBwaGFzZSBiYXNlZCBvbgorCSAqIHdoZXRoZXIgd2UgaGF2ZSBhICUocmVzdCkgdG9rZW4gaW4gb3VyIGZvcm1hdC4KKwkgKi8KKwlpbnQgc3BsaXRfb25fd2hpdGVzcGFjZTsKKworCS8qCisJICogQWZ0ZXIgYSBtYXJrX3F1ZXJ5IHJ1biwgdGhpcyBvYmplY3RfaW5mbyBpcyBzZXQgdXAgdG8gYmUKKwkgKiBwYXNzZWQgdG8gb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkLiBJdCB3aWxsIHBvaW50IHRvIHRoZSBkYXRhCisJICogZWxlbWVudHMgYWJvdmUsIHNvIHlvdSBjYW4gcmV0cmlldmUgdGhlIHJlc3BvbnNlIGZyb20gdGhlcmUuCisJICovCisJc3RydWN0IG9iamVjdF9pbmZvIGluZm87CisKKwkvKgorCSAqIFRoaXMgZmxhZyB3aWxsIGJlIHRydWUgaWYgdGhlIHJlcXVlc3RlZCBiYXRjaCBmb3JtYXQgYW5kIG9wdGlvbnMKKwkgKiBkb24ndCByZXF1aXJlIHVzIHRvIGNhbGwgb2lkX29iamVjdF9pbmZvLCB3aGljaCBjYW4gdGhlbiBiZQorCSAqIG9wdGltaXplZCBvdXQuCisJICovCisJdW5zaWduZWQgc2tpcF9vYmplY3RfaW5mbyA6IDE7Cit9OworCitzdGF0aWMgaW50IGlzX2F0b20oY29uc3QgY2hhciAqYXRvbSwgY29uc3QgY2hhciAqcywgaW50IHNsZW4pCit7CisJaW50IGFsZW4gPSBzdHJsZW4oYXRvbSk7CisJcmV0dXJuIGFsZW4gPT0gc2xlbiAmJiAhbWVtY21wKGF0b20sIHMsIGFsZW4pOworfQorCitzdGF0aWMgdm9pZCBleHBhbmRfYXRvbShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqYXRvbSwgaW50IGxlbiwKKwkJCXZvaWQgKnZkYXRhKQoreworCXN0cnVjdCBleHBhbmRfZGF0YSAqZGF0YSA9IHZkYXRhOworCisJaWYgKGlzX2F0b20oIm9iamVjdG5hbWUiLCBhdG9tLCBsZW4pKSB7CisJCWlmICghZGF0YS0+bWFya19xdWVyeSkKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIG9pZF90b19oZXgoJmRhdGEtPm9pZCkpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgib2JqZWN0dHlwZSIsIGF0b20sIGxlbikpIHsKKwkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCisJCQlkYXRhLT5pbmZvLnR5cGVwID0gJmRhdGEtPnR5cGU7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIHR5cGVfbmFtZShkYXRhLT50eXBlKSk7CisJfSBlbHNlIGlmIChpc19hdG9tKCJvYmplY3RzaXplIiwgYXRvbSwgbGVuKSkgeworCQlpZiAoZGF0YS0+bWFya19xdWVyeSkKKwkJCWRhdGEtPmluZm8uc2l6ZXAgPSAmZGF0YS0+c2l6ZTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoc2IsICIlIlBSSXVNQVggLCAodWludG1heF90KWRhdGEtPnNpemUpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgib2JqZWN0c2l6ZTpkaXNrIiwgYXRvbSwgbGVuKSkgeworCQlpZiAoZGF0YS0+bWFya19xdWVyeSkKKwkJCWRhdGEtPmluZm8uZGlza19zaXplcCA9ICZkYXRhLT5kaXNrX3NpemU7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiJSJQUkl1TUFYLCAodWludG1heF90KWRhdGEtPmRpc2tfc2l6ZSk7CisJfSBlbHNlIGlmIChpc19hdG9tKCJyZXN0IiwgYXRvbSwgbGVuKSkgeworCQlpZiAoZGF0YS0+bWFya19xdWVyeSkKKwkJCWRhdGEtPnNwbGl0X29uX3doaXRlc3BhY2UgPSAxOworCQllbHNlIGlmIChkYXRhLT5yZXN0KQorCQkJc3RyYnVmX2FkZHN0cihzYiwgZGF0YS0+cmVzdCk7CisJfSBlbHNlIGlmIChpc19hdG9tKCJkZWx0YWJhc2UiLCBhdG9tLCBsZW4pKSB7CisJCWlmIChkYXRhLT5tYXJrX3F1ZXJ5KQorCQkJZGF0YS0+aW5mby5kZWx0YV9iYXNlX29pZCA9ICZkYXRhLT5kZWx0YV9iYXNlX29pZDsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cihzYiwKKwkJCQkgICAgICBvaWRfdG9faGV4KCZkYXRhLT5kZWx0YV9iYXNlX29pZCkpOworCX0gZWxzZQorCQlkaWUoInVua25vd24gZm9ybWF0IGVsZW1lbnQ6ICUuKnMiLCBsZW4sIGF0b20pOworfQorCitzdGF0aWMgc2l6ZV90IGV4cGFuZF9mb3JtYXQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnN0YXJ0LCB2b2lkICpkYXRhKQoreworCWNvbnN0IGNoYXIgKmVuZDsKKworCWlmICgqc3RhcnQgIT0gJygnKQorCQlyZXR1cm4gMDsKKwllbmQgPSBzdHJjaHIoc3RhcnQgKyAxLCAnKScpOworCWlmICghZW5kKQorCQlkaWUoImZvcm1hdCBlbGVtZW50ICclcycgZG9lcyBub3QgZW5kIGluICcpJyIsIHN0YXJ0KTsKKworCWV4cGFuZF9hdG9tKHNiLCBzdGFydCArIDEsIGVuZCAtIHN0YXJ0IC0gMSwgZGF0YSk7CisKKwlyZXR1cm4gZW5kIC0gc3RhcnQgKyAxOworfQorCitzdGF0aWMgdm9pZCBiYXRjaF93cml0ZShzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyAqb3B0LCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCWlmIChvcHQtPmJ1ZmZlcl9vdXRwdXQpIHsKKwkJaWYgKGZ3cml0ZShkYXRhLCAxLCBsZW4sIHN0ZG91dCkgIT0gbGVuKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgdG8gc3Rkb3V0Iik7CisJfSBlbHNlCisJCXdyaXRlX29yX2RpZSgxLCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBwcmludF9vYmplY3Rfb3JfZGllKHN0cnVjdCBiYXRjaF9vcHRpb25zICpvcHQsIHN0cnVjdCBleHBhbmRfZGF0YSAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSAmZGF0YS0+b2lkOworCisJYXNzZXJ0KGRhdGEtPmluZm8udHlwZXApOworCisJaWYgKGRhdGEtPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJaWYgKG9wdC0+YnVmZmVyX291dHB1dCkKKwkJCWZmbHVzaChzdGRvdXQpOworCQlpZiAob3B0LT5jbWRtb2RlKSB7CisJCQljaGFyICpjb250ZW50czsKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQkJaWYgKCFkYXRhLT5yZXN0KQorCQkJCWRpZSgibWlzc2luZyBwYXRoIGZvciAnJXMnIiwgb2lkX3RvX2hleChvaWQpKTsKKworCQkJaWYgKG9wdC0+Y21kbW9kZSA9PSAndycpIHsKKwkJCQlpZiAoZmlsdGVyX29iamVjdChkYXRhLT5yZXN0LCAwMTAwNjQ0LCBvaWQsCisJCQkJCQkgICZjb250ZW50cywgJnNpemUpKQorCQkJCQlkaWUoImNvdWxkIG5vdCBjb252ZXJ0ICclcycgJXMiLAorCQkJCQkgICAgb2lkX3RvX2hleChvaWQpLCBkYXRhLT5yZXN0KTsKKwkJCX0gZWxzZSBpZiAob3B0LT5jbWRtb2RlID09ICdjJykgeworCQkJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJCQlpZiAoIXRleHRjb252X29iamVjdCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAgICAgZGF0YS0+cmVzdCwgMDEwMDY0NCwgb2lkLAorCQkJCQkJICAgICAxLCAmY29udGVudHMsICZzaXplKSkKKwkJCQkJY29udGVudHMgPSByZWFkX29iamVjdF9maWxlKG9pZCwKKwkJCQkJCQkJICAgICZ0eXBlLAorCQkJCQkJCQkgICAgJnNpemUpOworCQkJCWlmICghY29udGVudHMpCisJCQkJCWRpZSgiY291bGQgbm90IGNvbnZlcnQgJyVzJyAlcyIsCisJCQkJCSAgICBvaWRfdG9faGV4KG9pZCksIGRhdGEtPnJlc3QpOworCQkJfSBlbHNlCisJCQkJQlVHKCJpbnZhbGlkIGNtZG1vZGU6ICVjIiwgb3B0LT5jbWRtb2RlKTsKKwkJCWJhdGNoX3dyaXRlKG9wdCwgY29udGVudHMsIHNpemUpOworCQkJZnJlZShjb250ZW50cyk7CisJCX0gZWxzZSB7CisJCQlzdHJlYW1fYmxvYihvaWQpOworCQl9CisJfQorCWVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJdm9pZCAqY29udGVudHM7CisKKwkJY29udGVudHMgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFjb250ZW50cykKKwkJCWRpZSgib2JqZWN0ICVzIGRpc2FwcGVhcmVkIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJaWYgKHR5cGUgIT0gZGF0YS0+dHlwZSkKKwkJCWRpZSgib2JqZWN0ICVzIGNoYW5nZWQgdHlwZSE/Iiwgb2lkX3RvX2hleChvaWQpKTsKKwkJaWYgKGRhdGEtPmluZm8uc2l6ZXAgJiYgc2l6ZSAhPSBkYXRhLT5zaXplKQorCQkJZGllKCJvYmplY3QgJXMgY2hhbmdlZCBzaXplIT8iLCBvaWRfdG9faGV4KG9pZCkpOworCisJCWJhdGNoX3dyaXRlKG9wdCwgY29udGVudHMsIHNpemUpOworCQlmcmVlKGNvbnRlbnRzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJhdGNoX29iamVjdF93cml0ZShjb25zdCBjaGFyICpvYmpfbmFtZSwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpzY3JhdGNoLAorCQkJICAgICAgIHN0cnVjdCBiYXRjaF9vcHRpb25zICpvcHQsCisJCQkgICAgICAgc3RydWN0IGV4cGFuZF9kYXRhICpkYXRhKQoreworCWlmICghZGF0YS0+c2tpcF9vYmplY3RfaW5mbyAmJgorCSAgICBvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQodGhlX3JlcG9zaXRvcnksICZkYXRhLT5vaWQsICZkYXRhLT5pbmZvLAorCQkJCSAgICAgT0JKRUNUX0lORk9fTE9PS1VQX1JFUExBQ0UpIDwgMCkgeworCQlwcmludGYoIiVzIG1pc3NpbmdcbiIsCisJCSAgICAgICBvYmpfbmFtZSA/IG9ial9uYW1lIDogb2lkX3RvX2hleCgmZGF0YS0+b2lkKSk7CisJCWZmbHVzaChzdGRvdXQpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX3Jlc2V0KHNjcmF0Y2gpOworCXN0cmJ1Zl9leHBhbmQoc2NyYXRjaCwgb3B0LT5mb3JtYXQsIGV4cGFuZF9mb3JtYXQsIGRhdGEpOworCXN0cmJ1Zl9hZGRjaChzY3JhdGNoLCAnXG4nKTsKKwliYXRjaF93cml0ZShvcHQsIHNjcmF0Y2gtPmJ1Ziwgc2NyYXRjaC0+bGVuKTsKKworCWlmIChvcHQtPnByaW50X2NvbnRlbnRzKSB7CisJCXByaW50X29iamVjdF9vcl9kaWUob3B0LCBkYXRhKTsKKwkJYmF0Y2hfd3JpdGUob3B0LCAiXG4iLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJhdGNoX29uZV9vYmplY3QoY29uc3QgY2hhciAqb2JqX25hbWUsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKnNjcmF0Y2gsCisJCQkgICAgIHN0cnVjdCBiYXRjaF9vcHRpb25zICpvcHQsCisJCQkgICAgIHN0cnVjdCBleHBhbmRfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgY3R4OworCWludCBmbGFncyA9IG9wdC0+Zm9sbG93X3N5bWxpbmtzID8gR0VUX09JRF9GT0xMT1dfU1lNTElOS1MgOiAwOworCWVudW0gZ2V0X29pZF9yZXN1bHQgcmVzdWx0OworCisJcmVzdWx0ID0gZ2V0X29pZF93aXRoX2NvbnRleHQodGhlX3JlcG9zaXRvcnksIG9ial9uYW1lLAorCQkJCSAgICAgIGZsYWdzLCAmZGF0YS0+b2lkLCAmY3R4KTsKKwlpZiAocmVzdWx0ICE9IEZPVU5EKSB7CisJCXN3aXRjaCAocmVzdWx0KSB7CisJCWNhc2UgTUlTU0lOR19PQkpFQ1Q6CisJCQlwcmludGYoIiVzIG1pc3NpbmdcbiIsIG9ial9uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIFNIT1JUX05BTUVfQU1CSUdVT1VTOgorCQkJcHJpbnRmKCIlcyBhbWJpZ3VvdXNcbiIsIG9ial9uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIERBTkdMSU5HX1NZTUxJTks6CisJCQlwcmludGYoImRhbmdsaW5nICUiUFJJdU1BWCJcbiVzXG4iLAorCQkJICAgICAgICh1aW50bWF4X3Qpc3RybGVuKG9ial9uYW1lKSwgb2JqX25hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgU1lNTElOS19MT09QOgorCQkJcHJpbnRmKCJsb29wICUiUFJJdU1BWCJcbiVzXG4iLAorCQkJICAgICAgICh1aW50bWF4X3Qpc3RybGVuKG9ial9uYW1lKSwgb2JqX25hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgTk9UX0RJUjoKKwkJCXByaW50Zigibm90ZGlyICUiUFJJdU1BWCJcbiVzXG4iLAorCQkJICAgICAgICh1aW50bWF4X3Qpc3RybGVuKG9ial9uYW1lKSwgb2JqX25hbWUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoInVua25vd24gZ2V0X3NoYTFfd2l0aF9jb250ZXh0IHJlc3VsdCAlZFxuIiwKKwkJCSAgICAgICByZXN1bHQpOworCQkJYnJlYWs7CisJCX0KKwkJZmZsdXNoKHN0ZG91dCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY3R4Lm1vZGUgPT0gMCkgeworCQlwcmludGYoInN5bWxpbmsgJSJQUkl1TUFYIlxuJXNcbiIsCisJCSAgICAgICAodWludG1heF90KWN0eC5zeW1saW5rX3BhdGgubGVuLAorCQkgICAgICAgY3R4LnN5bWxpbmtfcGF0aC5idWYpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmV0dXJuOworCX0KKworCWJhdGNoX29iamVjdF93cml0ZShvYmpfbmFtZSwgc2NyYXRjaCwgb3B0LCBkYXRhKTsKK30KKworc3RydWN0IG9iamVjdF9jYl9kYXRhIHsKKwlzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyAqb3B0OworCXN0cnVjdCBleHBhbmRfZGF0YSAqZXhwYW5kOworCXN0cnVjdCBvaWRzZXQgKnNlZW47CisJc3RydWN0IHN0cmJ1ZiAqc2NyYXRjaDsKK307CisKK3N0YXRpYyBpbnQgYmF0Y2hfb2JqZWN0X2NiKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqdmRhdGEpCit7CisJc3RydWN0IG9iamVjdF9jYl9kYXRhICpkYXRhID0gdmRhdGE7CisJb2lkY3B5KCZkYXRhLT5leHBhbmQtPm9pZCwgb2lkKTsKKwliYXRjaF9vYmplY3Rfd3JpdGUoTlVMTCwgZGF0YS0+c2NyYXRjaCwgZGF0YS0+b3B0LCBkYXRhLT5leHBhbmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxlY3RfbG9vc2Vfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQljb25zdCBjaGFyICpwYXRoLAorCQkJCXZvaWQgKmRhdGEpCit7CisJb2lkX2FycmF5X2FwcGVuZChkYXRhLCBvaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxlY3RfcGFja2VkX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrLAorCQkJCSB1aW50MzJfdCBwb3MsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJb2lkX2FycmF5X2FwcGVuZChkYXRhLCBvaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJhdGNoX3Vub3JkZXJlZF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICp2ZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NiX2RhdGEgKmRhdGEgPSB2ZGF0YTsKKworCWlmIChvaWRzZXRfaW5zZXJ0KGRhdGEtPnNlZW4sIG9pZCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJhdGNoX29iamVjdF9jYihvaWQsIGRhdGEpOworfQorCitzdGF0aWMgaW50IGJhdGNoX3Vub3JkZXJlZF9sb29zZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGJhdGNoX3Vub3JkZXJlZF9vYmplY3Qob2lkLCBkYXRhKTsKK30KKworc3RhdGljIGludCBiYXRjaF91bm9yZGVyZWRfcGFja2VkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrLAorCQkJCSAgdWludDMyX3QgcG9zLAorCQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gYmF0Y2hfdW5vcmRlcmVkX29iamVjdChvaWQsIGRhdGEpOworfQorCitzdGF0aWMgaW50IGJhdGNoX29iamVjdHMoc3RydWN0IGJhdGNoX29wdGlvbnMgKm9wdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGlucHV0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBvdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgZXhwYW5kX2RhdGEgZGF0YTsKKwlpbnQgc2F2ZV93YXJuaW5nOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFvcHQtPmZvcm1hdCkKKwkJb3B0LT5mb3JtYXQgPSAiJShvYmplY3RuYW1lKSAlKG9iamVjdHR5cGUpICUob2JqZWN0c2l6ZSkiOworCisJLyoKKwkgKiBFeHBhbmQgb25jZSB3aXRoIG91ciBzcGVjaWFsIG1hcmtfcXVlcnkgZmxhZywgd2hpY2ggd2lsbCBwcmltZSB0aGUKKwkgKiBvYmplY3RfaW5mbyB0byBiZSBoYW5kZWQgdG8gb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkIGZvciBlYWNoCisJICogb2JqZWN0LgorCSAqLworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLm1hcmtfcXVlcnkgPSAxOworCXN0cmJ1Zl9leHBhbmQoJm91dHB1dCwgb3B0LT5mb3JtYXQsIGV4cGFuZF9mb3JtYXQsICZkYXRhKTsKKwlkYXRhLm1hcmtfcXVlcnkgPSAwOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXRwdXQpOworCWlmIChvcHQtPmNtZG1vZGUpCisJCWRhdGEuc3BsaXRfb25fd2hpdGVzcGFjZSA9IDE7CisKKwlpZiAob3B0LT5hbGxfb2JqZWN0cykgeworCQlzdHJ1Y3Qgb2JqZWN0X2luZm8gZW1wdHkgPSBPQkpFQ1RfSU5GT19JTklUOworCQlpZiAoIW1lbWNtcCgmZGF0YS5pbmZvLCAmZW1wdHksIHNpemVvZihlbXB0eSkpKQorCQkJZGF0YS5za2lwX29iamVjdF9pbmZvID0gMTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBwcmludGluZyBvdXQgdGhlIG9iamVjdCwgdGhlbiBhbHdheXMgZmlsbCBpbiB0aGUgdHlwZSwKKwkgKiBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIHN0cmVhbS4KKwkgKi8KKwlpZiAob3B0LT5wcmludF9jb250ZW50cykKKwkJZGF0YS5pbmZvLnR5cGVwID0gJmRhdGEudHlwZTsKKworCWlmIChvcHQtPmFsbF9vYmplY3RzKSB7CisJCXN0cnVjdCBvYmplY3RfY2JfZGF0YSBjYjsKKworCQlpZiAoaGFzX3Byb21pc29yX3JlbW90ZSgpKQorCQkJd2FybmluZygiVGhpcyByZXBvc2l0b3J5IHVzZXMgcHJvbWlzb3IgcmVtb3Rlcy4gU29tZSBvYmplY3RzIG1heSBub3QgYmUgbG9hZGVkLiIpOworCisJCWNiLm9wdCA9IG9wdDsKKwkJY2IuZXhwYW5kID0gJmRhdGE7CisJCWNiLnNjcmF0Y2ggPSAmb3V0cHV0OworCisJCWlmIChvcHQtPnVub3JkZXJlZCkgeworCQkJc3RydWN0IG9pZHNldCBzZWVuID0gT0lEU0VUX0lOSVQ7CisKKwkJCWNiLnNlZW4gPSAmc2VlbjsKKworCQkJZm9yX2VhY2hfbG9vc2Vfb2JqZWN0KGJhdGNoX3Vub3JkZXJlZF9sb29zZSwgJmNiLCAwKTsKKwkJCWZvcl9lYWNoX3BhY2tlZF9vYmplY3QoYmF0Y2hfdW5vcmRlcmVkX3BhY2tlZCwgJmNiLAorCQkJCQkgICAgICAgRk9SX0VBQ0hfT0JKRUNUX1BBQ0tfT1JERVIpOworCisJCQlvaWRzZXRfY2xlYXIoJnNlZW4pOworCQl9IGVsc2UgeworCQkJc3RydWN0IG9pZF9hcnJheSBzYSA9IE9JRF9BUlJBWV9JTklUOworCisJCQlmb3JfZWFjaF9sb29zZV9vYmplY3QoY29sbGVjdF9sb29zZV9vYmplY3QsICZzYSwgMCk7CisJCQlmb3JfZWFjaF9wYWNrZWRfb2JqZWN0KGNvbGxlY3RfcGFja2VkX29iamVjdCwgJnNhLCAwKTsKKworCQkJb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmc2EsIGJhdGNoX29iamVjdF9jYiwgJmNiKTsKKworCQkJb2lkX2FycmF5X2NsZWFyKCZzYSk7CisJCX0KKworCQlzdHJidWZfcmVsZWFzZSgmb3V0cHV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXZSBhcmUgZ29pbmcgdG8gY2FsbCBnZXRfc2hhMSBvbiBhIHBvdGVudGlhbGx5IHZlcnkgbGFyZ2UgbnVtYmVyIG9mCisJICogb2JqZWN0cy4gSW4gbW9zdCBsYXJnZSBjYXNlcywgdGhlc2Ugd2lsbCBiZSBhY3R1YWwgb2JqZWN0IHNoYTFzLiBUaGUKKwkgKiBjb3N0IHRvIGRvdWJsZS1jaGVjayB0aGF0IGVhY2ggb25lIGlzIG5vdCBhbHNvIGEgcmVmIChqdXN0IHNvIHdlIGNhbgorCSAqIHdhcm4pIGVuZHMgdXAgZHdhcmZpbmcgdGhlIGFjdHVhbCBjb3N0IG9mIHRoZSBvYmplY3QgbG9va3VwcworCSAqIHRoZW1zZWx2ZXMuIFdlIGNhbiB3b3JrIGFyb3VuZCBpdCBieSBqdXN0IHR1cm5pbmcgb2ZmIHRoZSB3YXJuaW5nLgorCSAqLworCXNhdmVfd2FybmluZyA9IHdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5OworCXdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5ID0gMDsKKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmaW5wdXQsIHN0ZGluKSAhPSBFT0YpIHsKKwkJaWYgKGRhdGEuc3BsaXRfb25fd2hpdGVzcGFjZSkgeworCQkJLyoKKwkJCSAqIFNwbGl0IGF0IGZpcnN0IHdoaXRlc3BhY2UsIHR5aW5nIG9mZiB0aGUgYmVnaW5uaW5nCisJCQkgKiBvZiB0aGUgc3RyaW5nIGFuZCBzYXZpbmcgdGhlIHJlbWFpbmRlciAob3IgTlVMTCkgaW4KKwkJCSAqIGRhdGEucmVzdC4KKwkJCSAqLworCQkJY2hhciAqcCA9IHN0cnBicmsoaW5wdXQuYnVmLCAiIFx0Iik7CisJCQlpZiAocCkgeworCQkJCXdoaWxlICgqcCAmJiBzdHJjaHIoIiBcdCIsICpwKSkKKwkJCQkJKnArKyA9ICdcMCc7CisJCQl9CisJCQlkYXRhLnJlc3QgPSBwOworCQl9CisKKwkJYmF0Y2hfb25lX29iamVjdChpbnB1dC5idWYsICZvdXRwdXQsIG9wdCwgJmRhdGEpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZpbnB1dCk7CisJc3RyYnVmX3JlbGVhc2UoJm91dHB1dCk7CisJd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHkgPSBzYXZlX3dhcm5pbmc7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjYXRfZmlsZV91c2FnZVtdID0geworCU5fKCJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtcCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIpLAorCU5fKCJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS1maWx0ZXJzXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgZ2l0X2NhdF9maWxlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAodXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgYmF0Y2hfb3B0aW9uX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgY29uc3QgY2hhciAqYXJnLAorCQkJCSBpbnQgdW5zZXQpCit7CisJc3RydWN0IGJhdGNoX29wdGlvbnMgKmJvID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCWlmIChiby0+ZW5hYmxlZCkgeworCQlyZXR1cm4gZXJyb3IoXygib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiKSk7CisJfQorCisJYm8tPmVuYWJsZWQgPSAxOworCWJvLT5wcmludF9jb250ZW50cyA9ICFzdHJjbXAob3B0LT5sb25nX25hbWUsICJiYXRjaCIpOworCWJvLT5mb3JtYXQgPSBhcmc7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9jYXRfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgb3B0ID0gMDsKKwljb25zdCBjaGFyICpleHBfdHlwZSA9IE5VTEwsICpvYmpfbmFtZSA9IE5VTEw7CisJc3RydWN0IGJhdGNoX29wdGlvbnMgYmF0Y2ggPSB7MH07CisJaW50IHVua25vd25fdHlwZSA9IDA7CisKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0dST1VQKE5fKCI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciKSksCisJCU9QVF9DTURNT0RFKCd0JywgTlVMTCwgJm9wdCwgTl8oInNob3cgb2JqZWN0IHR5cGUiKSwgJ3QnKSwKKwkJT1BUX0NNRE1PREUoJ3MnLCBOVUxMLCAmb3B0LCBOXygic2hvdyBvYmplY3Qgc2l6ZSIpLCAncycpLAorCQlPUFRfQ01ETU9ERSgnZScsIE5VTEwsICZvcHQsCisJCQkgICAgTl8oImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIpLCAnZScpLAorCQlPUFRfQ01ETU9ERSgncCcsIE5VTEwsICZvcHQsIE5fKCJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIpLCAncCcpLAorCQlPUFRfQ01ETU9ERSgwLCAidGV4dGNvbnYiLCAmb3B0LAorCQkJICAgIE5fKCJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIpLCAnYycpLAorCQlPUFRfQ01ETU9ERSgwLCAiZmlsdGVycyIsICZvcHQsCisJCQkgICAgTl8oImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiKSwgJ3cnKSwKKwkJT1BUX1NUUklORygwLCAicGF0aCIsICZmb3JjZV9wYXRoLCBOXygiYmxvYiIpLAorCQkJICAgTl8oInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIikpLAorCQlPUFRfQk9PTCgwLCAiYWxsb3ctdW5rbm93bi10eXBlIiwgJnVua25vd25fdHlwZSwKKwkJCSAgTl8oImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woMCwgImJ1ZmZlciIsICZiYXRjaC5idWZmZXJfb3V0cHV0LCBOXygiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImJhdGNoIiwgJmJhdGNoLCAiZm9ybWF0IiwKKwkJCU5fKCJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQliYXRjaF9vcHRpb25fY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJiYXRjaC1jaGVjayIsICZiYXRjaCwgImZvcm1hdCIsCisJCQlOXygic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IiksCisJCQlQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJYmF0Y2hfb3B0aW9uX2NhbGxiYWNrIH0sCisJCU9QVF9CT09MKDAsICJmb2xsb3ctc3ltbGlua3MiLCAmYmF0Y2guZm9sbG93X3N5bWxpbmtzLAorCQkJIE5fKCJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiKSksCisJCU9QVF9CT09MKDAsICJiYXRjaC1hbGwtb2JqZWN0cyIsICZiYXRjaC5hbGxfb2JqZWN0cywKKwkJCSBOXygic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIpKSwKKwkJT1BUX0JPT0woMCwgInVub3JkZXJlZCIsICZiYXRjaC51bm9yZGVyZWQsCisJCQkgTl8oImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2NhdF9maWxlX2NvbmZpZywgTlVMTCk7CisKKwliYXRjaC5idWZmZXJfb3V0cHV0ID0gLTE7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBjYXRfZmlsZV91c2FnZSwgMCk7CisKKwlpZiAob3B0KSB7CisJCWlmIChiYXRjaC5lbmFibGVkICYmIChvcHQgPT0gJ2MnIHx8IG9wdCA9PSAndycpKQorCQkJYmF0Y2guY21kbW9kZSA9IG9wdDsKKwkJZWxzZSBpZiAoYXJnYyA9PSAxKQorCQkJb2JqX25hbWUgPSBhcmd2WzBdOworCQllbHNlCisJCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlpZiAoIW9wdCAmJiAhYmF0Y2guZW5hYmxlZCkgeworCQlpZiAoYXJnYyA9PSAyKSB7CisJCQlleHBfdHlwZSA9IGFyZ3ZbMF07CisJCQlvYmpfbmFtZSA9IGFyZ3ZbMV07CisJCX0gZWxzZQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJaWYgKGJhdGNoLmVuYWJsZWQpIHsKKwkJaWYgKGJhdGNoLmNtZG1vZGUgIT0gb3B0IHx8IGFyZ2MpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCQlpZiAoYmF0Y2guY21kbW9kZSAmJiBiYXRjaC5hbGxfb2JqZWN0cykKKwkJCWRpZSgiLS1iYXRjaC1hbGwtb2JqZWN0cyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAiCisJCQkgICAgIi0tdGV4dGNvbnYgbm9yIHdpdGggLS1maWx0ZXJzIik7CisJfQorCisJaWYgKChiYXRjaC5mb2xsb3dfc3ltbGlua3MgfHwgYmF0Y2guYWxsX29iamVjdHMpICYmICFiYXRjaC5lbmFibGVkKSB7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGZvcmNlX3BhdGggJiYgb3B0ICE9ICdjJyAmJiBvcHQgIT0gJ3cnKSB7CisJCWVycm9yKCItLXBhdGg9PHBhdGg+IG5lZWRzIC0tdGV4dGNvbnYgb3IgLS1maWx0ZXJzIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGZvcmNlX3BhdGggJiYgYmF0Y2guZW5hYmxlZCkgeworCQllcnJvcigiLS1wYXRoPTxwYXRoPiBpbmNvbXBhdGlibGUgd2l0aCAtLWJhdGNoIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGJhdGNoLmJ1ZmZlcl9vdXRwdXQgPCAwKQorCQliYXRjaC5idWZmZXJfb3V0cHV0ID0gYmF0Y2guYWxsX29iamVjdHM7CisKKwlpZiAoYmF0Y2guZW5hYmxlZCkKKwkJcmV0dXJuIGJhdGNoX29iamVjdHMoJmJhdGNoKTsKKworCWlmICh1bmtub3duX3R5cGUgJiYgb3B0ICE9ICd0JyAmJiBvcHQgIT0gJ3MnKQorCQlkaWUoImdpdCBjYXQtZmlsZSAtLWFsbG93LXVua25vd24tdHlwZTogdXNlIHdpdGggLXMgb3IgLXQiKTsKKwlyZXR1cm4gY2F0X29uZV9maWxlKG9wdCwgZXhwX3R5cGUsIG9ial9uYW1lLCB1bmtub3duX3R5cGUpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jaGVjay1hdHRyLmMgYi9idWlsdGluL2NoZWNrLWF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDgzMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVjay1hdHRyLmMKQEAgLTAsMCArMSwxODkgQEAKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGludCBhbGxfYXR0cnM7CitzdGF0aWMgaW50IGNhY2hlZF9hdHRyczsKK3N0YXRpYyBpbnQgc3RkaW5fcGF0aHM7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNoZWNrX2F0dHJfdXNhZ2VbXSA9IHsKK05fKCJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIiksCitOXygiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIpLAorTlVMTAorfTsKKworc3RhdGljIGludCBudWxfdGVybV9saW5lOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBjaGVja19hdHRyX29wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTCgnYScsICJhbGwiLCAmYWxsX2F0dHJzLCBOXygicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIikpLAorCU9QVF9CT09MKDAsICAiY2FjaGVkIiwgJmNhY2hlZF9hdHRycywgTl8oInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IikpLAorCU9QVF9CT09MKDAgLCAic3RkaW4iLCAmc3RkaW5fcGF0aHMsIE5fKCJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIpKSwKKwlPUFRfQk9PTCgneicsIE5VTEwsICZudWxfdGVybV9saW5lLAorCQkgTl8oInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgb3V0cHV0X2F0dHIoc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrLCBjb25zdCBjaGFyICpmaWxlKQoreworCWludCBqOworCWludCBjbnQgPSBjaGVjay0+bnI7CisKKwlmb3IgKGogPSAwOyBqIDwgY250OyBqKyspIHsKKwkJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+aXRlbXNbal0udmFsdWU7CisKKwkJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCQl2YWx1ZSA9ICJzZXQiOworCQllbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkKKwkJCXZhbHVlID0gInVuc2V0IjsKKwkJZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpCisJCQl2YWx1ZSA9ICJ1bnNwZWNpZmllZCI7CisKKwkJaWYgKG51bF90ZXJtX2xpbmUpIHsKKwkJCXByaW50ZigiJXMlYyIgLyogcGF0aCAqLworCQkJICAgICAgICIlcyVjIiAvKiBhdHRybmFtZSAqLworCQkJICAgICAgICIlcyVjIiAvKiBhdHRydmFsdWUgKi8sCisJCQkgICAgICAgZmlsZSwgMCwKKwkJCSAgICAgICBnaXRfYXR0cl9uYW1lKGNoZWNrLT5pdGVtc1tqXS5hdHRyKSwgMCwgdmFsdWUsIDApOworCQl9IGVsc2UgeworCQkJcXVvdGVfY19zdHlsZShmaWxlLCBOVUxMLCBzdGRvdXQsIDApOworCQkJcHJpbnRmKCI6ICVzOiAlc1xuIiwKKwkJCSAgICAgICBnaXRfYXR0cl9uYW1lKGNoZWNrLT5pdGVtc1tqXS5hdHRyKSwgdmFsdWUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19hdHRyKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICAgIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjaywKKwkJICAgICAgIGludCBjb2xsZWN0X2FsbCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJY2hhciAqZnVsbF9wYXRoID0KKwkJcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDAsIGZpbGUpOworCisJaWYgKGNvbGxlY3RfYWxsKSB7CisJCWdpdF9hbGxfYXR0cnMoJnRoZV9pbmRleCwgZnVsbF9wYXRoLCBjaGVjayk7CisJfSBlbHNlIHsKKwkJZ2l0X2NoZWNrX2F0dHIoJnRoZV9pbmRleCwgZnVsbF9wYXRoLCBjaGVjayk7CisJfQorCW91dHB1dF9hdHRyKGNoZWNrLCBmaWxlKTsKKworCWZyZWUoZnVsbF9wYXRoKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfYXR0cl9zdGRpbl9wYXRocyhjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICAgc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrLAorCQkJCSAgIGludCBjb2xsZWN0X2FsbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdW5xdW90ZWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfZ2V0bGluZV9mbiBnZXRsaW5lX2ZuOworCisJZ2V0bGluZV9mbiA9IG51bF90ZXJtX2xpbmUgPyBzdHJidWZfZ2V0bGluZV9udWwgOiBzdHJidWZfZ2V0bGluZV9sZjsKKwl3aGlsZSAoZ2V0bGluZV9mbigmYnVmLCBzdGRpbikgIT0gRU9GKSB7CisJCWlmICghbnVsX3Rlcm1fbGluZSAmJiBidWYuYnVmWzBdID09ICciJykgeworCQkJc3RyYnVmX3Jlc2V0KCZ1bnF1b3RlZCk7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1bnF1b3RlZCwgYnVmLmJ1ZiwgTlVMTCkpCisJCQkJZGllKCJsaW5lIGlzIGJhZGx5IHF1b3RlZCIpOworCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJnVucXVvdGVkKTsKKwkJfQorCQljaGVja19hdHRyKHByZWZpeCwgY2hlY2ssIGNvbGxlY3RfYWxsLCBidWYuYnVmKTsKKwkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgImF0dHJpYnV0ZSB0byBzdGRvdXQiKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnVucXVvdGVkKTsKK30KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZXJyb3Jfd2l0aF91c2FnZShjb25zdCBjaGFyICptc2cpCit7CisJZXJyb3IoIiVzIiwgbXNnKTsKKwl1c2FnZV93aXRoX29wdGlvbnMoY2hlY2tfYXR0cl91c2FnZSwgY2hlY2tfYXR0cl9vcHRpb25zKTsKK30KKworaW50IGNtZF9jaGVja19hdHRyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKwlpbnQgY250LCBpLCBkb3VibGVkYXNoLCBmaWxlaTsKKworCWlmICghaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBjaGVja19hdHRyX29wdGlvbnMsCisJCQkgICAgIGNoZWNrX2F0dHJfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKSB7CisJCWRpZSgiaW52YWxpZCBjYWNoZSIpOworCX0KKworCWlmIChjYWNoZWRfYXR0cnMpCisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfSU5ERVgpOworCisJZG91YmxlZGFzaCA9IC0xOworCWZvciAoaSA9IDA7IGRvdWJsZWRhc2ggPCAwICYmIGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpCisJCQlkb3VibGVkYXNoID0gaTsKKwl9CisKKwkvKiBQcm9jZXNzIC0tYWxsIGFuZC9vciBhdHRyaWJ1dGUgYXJndW1lbnRzOiAqLworCWlmIChhbGxfYXR0cnMpIHsKKwkJaWYgKGRvdWJsZWRhc2ggPj0gMSkKKwkJCWVycm9yX3dpdGhfdXNhZ2UoIkF0dHJpYnV0ZXMgYW5kIC0tYWxsIGJvdGggc3BlY2lmaWVkIik7CisKKwkJY250ID0gMDsKKwkJZmlsZWkgPSBkb3VibGVkYXNoICsgMTsKKwl9IGVsc2UgaWYgKGRvdWJsZWRhc2ggPT0gMCkgeworCQllcnJvcl93aXRoX3VzYWdlKCJObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIik7CisJfSBlbHNlIGlmIChkb3VibGVkYXNoIDwgMCkgeworCQlpZiAoIWFyZ2MpCisJCQllcnJvcl93aXRoX3VzYWdlKCJObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIik7CisKKwkJaWYgKHN0ZGluX3BhdGhzKSB7CisJCQkvKiBUcmVhdCBhbGwgYXJndW1lbnRzIGFzIGF0dHJpYnV0ZSBuYW1lcy4gKi8KKwkJCWNudCA9IGFyZ2M7CisJCQlmaWxlaSA9IGFyZ2M7CisJCX0gZWxzZSB7CisJCQkvKiBUcmVhdCBleGFjdGx5IG9uZSBhcmd1bWVudCBhcyBhbiBhdHRyaWJ1dGUgbmFtZS4gKi8KKwkJCWNudCA9IDE7CisJCQlmaWxlaSA9IDE7CisJCX0KKwl9IGVsc2UgeworCQljbnQgPSBkb3VibGVkYXNoOworCQlmaWxlaSA9IGRvdWJsZWRhc2ggKyAxOworCX0KKworCS8qIENoZWNrIGZpbGUgYXJndW1lbnQocyk6ICovCisJaWYgKHN0ZGluX3BhdGhzKSB7CisJCWlmIChmaWxlaSA8IGFyZ2MpCisJCQllcnJvcl93aXRoX3VzYWdlKCJDYW4ndCBzcGVjaWZ5IGZpbGVzIHdpdGggLS1zdGRpbiIpOworCX0gZWxzZSB7CisJCWlmIChmaWxlaSA+PSBhcmdjKQorCQkJZXJyb3Jfd2l0aF91c2FnZSgiTm8gZmlsZSBzcGVjaWZpZWQiKTsKKwl9CisKKwljaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKKwlpZiAoIWFsbF9hdHRycykgeworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCBnaXRfYXR0ciAqYSA9IGdpdF9hdHRyKGFyZ3ZbaV0pOworCisJCQlpZiAoIWEpCisJCQkJcmV0dXJuIGVycm9yKCIlczogbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiLAorCQkJCQkgICAgIGFyZ3ZbaV0pOworCQkJYXR0cl9jaGVja19hcHBlbmQoY2hlY2ssIGEpOworCQl9CisJfQorCisJaWYgKHN0ZGluX3BhdGhzKQorCQljaGVja19hdHRyX3N0ZGluX3BhdGhzKHByZWZpeCwgY2hlY2ssIGFsbF9hdHRycyk7CisJZWxzZSB7CisJCWZvciAoaSA9IGZpbGVpOyBpIDwgYXJnYzsgaSsrKQorCQkJY2hlY2tfYXR0cihwcmVmaXgsIGNoZWNrLCBhbGxfYXR0cnMsIGFyZ3ZbaV0pOworCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAiYXR0cmlidXRlIHRvIHN0ZG91dCIpOworCX0KKworCWF0dHJfY2hlY2tfZnJlZShjaGVjayk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrLWlnbm9yZS5jIGIvYnVpbHRpbi9jaGVjay1pZ25vcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTVkMGFlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVjay1pZ25vcmUuYwpAQCAtMCwwICsxLDE5NiBAQAorI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGludCBxdWlldCwgdmVyYm9zZSwgc3RkaW5fcGF0aHMsIHNob3dfbm9uX21hdGNoaW5nLCBub19pbmRleDsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlY2tfaWdub3JlX3VzYWdlW10gPSB7CisiZ2l0IGNoZWNrLWlnbm9yZSBbPG9wdGlvbnM+XSA8cGF0aG5hbWU+Li4uIiwKKyJnaXQgY2hlY2staWdub3JlIFs8b3B0aW9ucz5dIC0tc3RkaW4iLAorTlVMTAorfTsKKworc3RhdGljIGludCBudWxfdGVybV9saW5lOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBjaGVja19pZ25vcmVfb3B0aW9uc1tdID0geworCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJT1BUX0dST1VQKCIiKSwKKwlPUFRfQk9PTCgwLCAic3RkaW4iLCAmc3RkaW5fcGF0aHMsCisJCSBOXygicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iKSksCisJT1BUX0JPT0woJ3onLCBOVUxMLCAmbnVsX3Rlcm1fbGluZSwKKwkJIE5fKCJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIpKSwKKwlPUFRfQk9PTCgnbicsICJub24tbWF0Y2hpbmciLCAmc2hvd19ub25fbWF0Y2hpbmcsCisJCSBOXygic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiKSksCisJT1BUX0JPT0woMCwgIm5vLWluZGV4IiwgJm5vX2luZGV4LAorCQkgTl8oImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgb3V0cHV0X3BhdHRlcm4oY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHBhdGhfcGF0dGVybiAqcGF0dGVybikKK3sKKwljaGFyICpiYW5nICA9IChwYXR0ZXJuICYmIHBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKSAgPyAiISIgOiAiIjsKKwljaGFyICpzbGFzaCA9IChwYXR0ZXJuICYmIHBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX01VU1RCRURJUikgPyAiLyIgOiAiIjsKKwlpZiAoIW51bF90ZXJtX2xpbmUpIHsKKwkJaWYgKCF2ZXJib3NlKSB7CisJCQl3cml0ZV9uYW1lX3F1b3RlZChwYXRoLCBzdGRvdXQsICdcbicpOworCQl9IGVsc2UgeworCQkJaWYgKHBhdHRlcm4pIHsKKwkJCQlxdW90ZV9jX3N0eWxlKHBhdHRlcm4tPnBsLT5zcmMsIE5VTEwsIHN0ZG91dCwgMCk7CisJCQkJcHJpbnRmKCI6JWQ6JXMlcyVzXHQiLAorCQkJCSAgICAgICBwYXR0ZXJuLT5zcmNwb3MsCisJCQkJICAgICAgIGJhbmcsIHBhdHRlcm4tPnBhdHRlcm4sIHNsYXNoKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXByaW50ZigiOjpcdCIpOworCQkJfQorCQkJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCQkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghdmVyYm9zZSkgeworCQkJcHJpbnRmKCIlcyVjIiwgcGF0aCwgJ1wwJyk7CisJCX0gZWxzZSB7CisJCQlpZiAocGF0dGVybikKKwkJCQlwcmludGYoIiVzJWMlZCVjJXMlcyVzJWMlcyVjIiwKKwkJCQkgICAgICAgcGF0dGVybi0+cGwtPnNyYywgJ1wwJywKKwkJCQkgICAgICAgcGF0dGVybi0+c3JjcG9zLCAnXDAnLAorCQkJCSAgICAgICBiYW5nLCBwYXR0ZXJuLT5wYXR0ZXJuLCBzbGFzaCwgJ1wwJywKKwkJCQkgICAgICAgcGF0aCwgJ1wwJyk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIlYyVjJWMlcyVjIiwgJ1wwJywgJ1wwJywgJ1wwJywgcGF0aCwgJ1wwJyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaWdub3JlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQljb25zdCBjaGFyICpwcmVmaXgsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpmdWxsX3BhdGg7CisJY2hhciAqc2VlbjsKKwlpbnQgbnVtX2lnbm9yZWQgPSAwLCBpOworCXN0cnVjdCBwYXRoX3BhdHRlcm4gKnBhdHRlcm47CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCisJaWYgKCFhcmdjKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgIm5vIHBhdGhzcGVjIGdpdmVuLlxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogY2hlY2staWdub3JlIGp1c3QgbmVlZHMgcGF0aHMuIE1hZ2ljIGJleW9uZCA6LyBpcyByZWFsbHkKKwkgKiBpcnJlbGV2YW50LgorCSAqLworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywKKwkJICAgICAgIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19GUk9NVE9QLAorCQkgICAgICAgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEggfAorCQkgICAgICAgUEFUSFNQRUNfS0VFUF9PUkRFUiwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlkaWVfcGF0aF9pbnNpZGVfc3VibW9kdWxlKCZ0aGVfaW5kZXgsICZwYXRoc3BlYyk7CisKKwkvKgorCSAqIGxvb2sgZm9yIHBhdGhzcGVjcyBtYXRjaGluZyBlbnRyaWVzIGluIHRoZSBpbmRleCwgc2luY2UgdGhlc2UKKwkgKiBzaG91bGQgbm90IGJlIGlnbm9yZWQsIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorCSAqICdnaXQgc3RhdHVzJywgJ2dpdCBhZGQnIGV0Yy4KKwkgKi8KKwlzZWVuID0gZmluZF9wYXRoc3BlY3NfbWF0Y2hpbmdfYWdhaW5zdF9pbmRleCgmcGF0aHNwZWMsICZ0aGVfaW5kZXgpOworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy5ucjsgaSsrKSB7CisJCWZ1bGxfcGF0aCA9IHBhdGhzcGVjLml0ZW1zW2ldLm1hdGNoOworCQlwYXR0ZXJuID0gTlVMTDsKKwkJaWYgKCFzZWVuW2ldKSB7CisJCQlpbnQgZHR5cGUgPSBEVF9VTktOT1dOOworCQkJcGF0dGVybiA9IGxhc3RfbWF0Y2hpbmdfcGF0dGVybihkaXIsICZ0aGVfaW5kZXgsCisJCQkJCQkJZnVsbF9wYXRoLCAmZHR5cGUpOworCQkJaWYgKCF2ZXJib3NlICYmIHBhdHRlcm4gJiYKKwkJCSAgICBwYXR0ZXJuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19ORUdBVElWRSkKKwkJCQlwYXR0ZXJuID0gTlVMTDsKKwkJfQorCQlpZiAoIXF1aWV0ICYmIChwYXR0ZXJuIHx8IHNob3dfbm9uX21hdGNoaW5nKSkKKwkJCW91dHB1dF9wYXR0ZXJuKHBhdGhzcGVjLml0ZW1zW2ldLm9yaWdpbmFsLCBwYXR0ZXJuKTsKKwkJaWYgKHBhdHRlcm4pCisJCQludW1faWdub3JlZCsrOworCX0KKwlmcmVlKHNlZW4pOworCisJcmV0dXJuIG51bV9pZ25vcmVkOworfQorCitzdGF0aWMgaW50IGNoZWNrX2lnbm9yZV9zdGRpbl9wYXRocyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aHNwZWNbMl0gPSB7IE5VTEwsIE5VTEwgfTsKKwlzdHJidWZfZ2V0bGluZV9mbiBnZXRsaW5lX2ZuOworCWludCBudW1faWdub3JlZCA9IDA7CisKKwlnZXRsaW5lX2ZuID0gbnVsX3Rlcm1fbGluZSA/IHN0cmJ1Zl9nZXRsaW5lX251bCA6IHN0cmJ1Zl9nZXRsaW5lX2xmOworCXdoaWxlIChnZXRsaW5lX2ZuKCZidWYsIHN0ZGluKSAhPSBFT0YpIHsKKwkJaWYgKCFudWxfdGVybV9saW5lICYmIGJ1Zi5idWZbMF0gPT0gJyInKSB7CisJCQlzdHJidWZfcmVzZXQoJnVucXVvdGVkKTsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVucXVvdGVkLCBidWYuYnVmLCBOVUxMKSkKKwkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQlzdHJidWZfc3dhcCgmYnVmLCAmdW5xdW90ZWQpOworCQl9CisJCXBhdGhzcGVjWzBdID0gYnVmLmJ1ZjsKKwkJbnVtX2lnbm9yZWQgKz0gY2hlY2tfaWdub3JlKGRpciwgcHJlZml4LAorCQkJCQkgICAgMSwgKGNvbnN0IGNoYXIgKiopcGF0aHNwZWMpOworCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAiY2hlY2staWdub3JlIHRvIHN0ZG91dCIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdW5xdW90ZWQpOworCXJldHVybiBudW1faWdub3JlZDsKK30KKworaW50IGNtZF9jaGVja19pZ25vcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG51bV9pZ25vcmVkOworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgY2hlY2tfaWdub3JlX29wdGlvbnMsCisJCQkgICAgIGNoZWNrX2lnbm9yZV91c2FnZSwgMCk7CisKKwlpZiAoc3RkaW5fcGF0aHMpIHsKKwkJaWYgKGFyZ2MgPiAwKQorCQkJZGllKF8oImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iKSk7CisJfSBlbHNlIHsKKwkJaWYgKG51bF90ZXJtX2xpbmUpCisJCQlkaWUoXygiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iKSk7CisJCWlmIChhcmdjID09IDApCisJCQlkaWUoXygibm8gcGF0aCBzcGVjaWZpZWQiKSk7CisJfQorCWlmIChxdWlldCkgeworCQlpZiAoYXJnYyA+IDEpCisJCQlkaWUoXygiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiKSk7CisJCWlmICh2ZXJib3NlKQorCQkJZGllKF8oImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIikpOworCX0KKwlpZiAoc2hvd19ub25fbWF0Y2hpbmcgJiYgIXZlcmJvc2UpCisJCWRpZShfKCItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIikpOworCisJLyogcmVhZF9jYWNoZSgpIGlzIG9ubHkgbmVjZXNzYXJ5IHNvIHdlIGNhbiB3YXRjaCBvdXQgZm9yIHN1Ym1vZHVsZXMuICovCisJaWYgKCFub19pbmRleCAmJiByZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKworCWlmIChzdGRpbl9wYXRocykgeworCQludW1faWdub3JlZCA9IGNoZWNrX2lnbm9yZV9zdGRpbl9wYXRocygmZGlyLCBwcmVmaXgpOworCX0gZWxzZSB7CisJCW51bV9pZ25vcmVkID0gY2hlY2tfaWdub3JlKCZkaXIsIHByZWZpeCwgYXJnYywgYXJndik7CisJCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJpZ25vcmUgdG8gc3Rkb3V0Iik7CisJfQorCisJY2xlYXJfZGlyZWN0b3J5KCZkaXIpOworCisJcmV0dXJuICFudW1faWdub3JlZDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2stbWFpbG1hcC5jIGIvYnVpbHRpbi9jaGVjay1tYWlsbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjZTE0NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2hlY2stbWFpbG1hcC5jCkBAIC0wLDAgKzEsNjcgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdGF0aWMgaW50IHVzZV9zdGRpbjsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlY2tfbWFpbG1hcF91c2FnZVtdID0geworTl8oImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIpLAorTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gY2hlY2tfbWFpbG1hcF9vcHRpb25zW10gPSB7CisJT1BUX0JPT0woMCwgInN0ZGluIiwgJnVzZV9zdGRpbiwgTl8oImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgY2hlY2tfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1haWxtYXAsIGNvbnN0IGNoYXIgKmNvbnRhY3QpCit7CisJY29uc3QgY2hhciAqbmFtZSwgKm1haWw7CisJc2l6ZV90IG5hbWVsZW4sIG1haWxsZW47CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCBjb250YWN0LCBzdHJsZW4oY29udGFjdCkpKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIiksIGNvbnRhY3QpOworCisJbmFtZSA9IGlkZW50Lm5hbWVfYmVnaW47CisJbmFtZWxlbiA9IGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbjsKKwltYWlsID0gaWRlbnQubWFpbF9iZWdpbjsKKwltYWlsbGVuID0gaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luOworCisJbWFwX3VzZXIobWFpbG1hcCwgJm1haWwsICZtYWlsbGVuLCAmbmFtZSwgJm5hbWVsZW4pOworCisJaWYgKG5hbWVsZW4pCisJCXByaW50ZigiJS4qcyAiLCAoaW50KW5hbWVsZW4sIG5hbWUpOworCXByaW50ZigiPCUuKnM+XG4iLCAoaW50KW1haWxsZW4sIG1haWwpOworfQorCitpbnQgY21kX2NoZWNrX21haWxtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IG1haWxtYXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgY2hlY2tfbWFpbG1hcF9vcHRpb25zLAorCQkJICAgICBjaGVja19tYWlsbWFwX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA9PSAwICYmICF1c2Vfc3RkaW4pCisJCWRpZShfKCJubyBjb250YWN0cyBzcGVjaWZpZWQiKSk7CisKKwlyZWFkX21haWxtYXAoJm1haWxtYXAsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7ICsraSkKKwkJY2hlY2tfbWFpbG1hcCgmbWFpbG1hcCwgYXJndltpXSk7CisJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCisJaWYgKHVzZV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJmJ1Ziwgc3RkaW4pICE9IEVPRikgeworCQkJY2hlY2tfbWFpbG1hcCgmbWFpbG1hcCwgYnVmLmJ1Zik7CisJCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJY2xlYXJfbWFpbG1hcCgmbWFpbG1hcCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrLXJlZi1mb3JtYXQuYyBiL2J1aWx0aW4vY2hlY2stcmVmLWZvcm1hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjdkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NoZWNrLXJlZi1mb3JtYXQuYwpAQCAtMCwwICsxLDkxIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9jaGVja19yZWZfZm9ybWF0X3VzYWdlW10gPQorImdpdCBjaGVjay1yZWYtZm9ybWF0IFstLW5vcm1hbGl6ZV0gWzxvcHRpb25zPl0gPHJlZm5hbWU+XG4iCisiICAgb3I6IGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIDxicmFuY2huYW1lLXNob3J0aGFuZD4iOworCisvKgorICogUmV0dXJuIGEgY29weSBvZiByZWZuYW1lIGJ1dCB3aXRoIGxlYWRpbmcgc2xhc2hlcyByZW1vdmVkIGFuZCBydW5zCisgKiBvZiBhZGphY2VudCBzbGFzaGVzIHJlcGxhY2VkIHdpdGggc2luZ2xlIHNsYXNoZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIG5vcm1hbGl6ZV9wYXRoX2NvcHkoKSwgYnV0IHN0cmlwcGVkIGRvd24KKyAqIHRvIG1lZXQgY2hlY2tfcmVmX2Zvcm1hdCdzIHNpbXBsZXIgbmVlZHMuCisgKi8KK3N0YXRpYyBjaGFyICpjb2xsYXBzZV9zbGFzaGVzKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJY2hhciAqcmV0ID0geG1hbGxvY3ooc3RybGVuKHJlZm5hbWUpKTsKKwljaGFyIGNoOworCWNoYXIgcHJldiA9ICcvJzsKKwljaGFyICpjcCA9IHJldDsKKworCXdoaWxlICgoY2ggPSAqcmVmbmFtZSsrKSAhPSAnXDAnKSB7CisJCWlmIChwcmV2ID09ICcvJyAmJiBjaCA9PSBwcmV2KQorCQkJY29udGludWU7CisKKwkJKmNwKysgPSBjaDsKKwkJcHJldiA9IGNoOworCX0KKwkqY3AgPSAnXDAnOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVmX2Zvcm1hdF9icmFuY2goY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBub25naXQ7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKwlpZiAoc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJnNiLCBhcmcpIHx8CisJICAgICFza2lwX3ByZWZpeChzYi5idWYsICJyZWZzL2hlYWRzLyIsICZuYW1lKSkKKwkJZGllKCInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lIiwgYXJnKTsKKwlwcmludGYoIiVzXG4iLCBuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitpbnQgY21kX2NoZWNrX3JlZl9mb3JtYXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJaW50IG5vcm1hbGl6ZSA9IDA7CisJaW50IGZsYWdzID0gMDsKKwljb25zdCBjaGFyICpyZWZuYW1lOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShidWlsdGluX2NoZWNrX3JlZl9mb3JtYXRfdXNhZ2UpOworCisJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWJyYW5jaCIpKQorCQlyZXR1cm4gY2hlY2tfcmVmX2Zvcm1hdF9icmFuY2goYXJndlsyXSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYyAmJiBhcmd2W2ldWzBdID09ICctJzsgaSsrKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vcm1hbGl6ZSIpIHx8ICFzdHJjbXAoYXJndltpXSwgIi0tcHJpbnQiKSkKKwkJCW5vcm1hbGl6ZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tYWxsb3ctb25lbGV2ZWwiKSkKKwkJCWZsYWdzIHw9IFJFRk5BTUVfQUxMT1dfT05FTEVWRUw7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm8tYWxsb3ctb25lbGV2ZWwiKSkKKwkJCWZsYWdzICY9IH5SRUZOQU1FX0FMTE9XX09ORUxFVkVMOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLXJlZnNwZWMtcGF0dGVybiIpKQorCQkJZmxhZ3MgfD0gUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk47CisJCWVsc2UKKwkJCXVzYWdlKGJ1aWx0aW5fY2hlY2tfcmVmX2Zvcm1hdF91c2FnZSk7CisJfQorCWlmICghIChpID09IGFyZ2MgLSAxKSkKKwkJdXNhZ2UoYnVpbHRpbl9jaGVja19yZWZfZm9ybWF0X3VzYWdlKTsKKworCXJlZm5hbWUgPSBhcmd2W2ldOworCWlmIChub3JtYWxpemUpCisJCXJlZm5hbWUgPSBjb2xsYXBzZV9zbGFzaGVzKHJlZm5hbWUpOworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyZWZuYW1lLCBmbGFncykpCisJCXJldHVybiAxOworCWlmIChub3JtYWxpemUpCisJCXByaW50ZigiJXNcbiIsIHJlZm5hbWUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrb3V0LWluZGV4LmMgYi9idWlsdGluL2NoZWNrb3V0LWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMWNjMgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2hlY2tvdXQtaW5kZXguYwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENoZWNrLW91dCBmaWxlcyBmcm9tIHRoZSAiY3VycmVudCBjYWNoZSBkaXJlY3RvcnkiCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IExpbnVzIFRvcnZhbGRzCisgKgorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKKyNkZWZpbmUgQ0hFQ0tPVVRfQUxMIDQKK3N0YXRpYyBpbnQgbnVsX3Rlcm1fbGluZTsKK3N0YXRpYyBpbnQgY2hlY2tvdXRfc3RhZ2U7IC8qIGRlZmF1bHQgdG8gY2hlY2tvdXQgc3RhZ2UwICovCitzdGF0aWMgaW50IHRvX3RlbXBmaWxlOworc3RhdGljIGNoYXIgdG9wYXRoWzRdW1RFTVBPUkFSWV9GSUxFTkFNRV9MRU5HVEggKyAxXTsKKworc3RhdGljIHN0cnVjdCBjaGVja291dCBzdGF0ZSA9IENIRUNLT1VUX0lOSVQ7CisKK3N0YXRpYyB2b2lkIHdyaXRlX3RlbXBmaWxlX3JlY29yZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisKKwlpZiAoQ0hFQ0tPVVRfQUxMID09IGNoZWNrb3V0X3N0YWdlKSB7CisJCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJCWlmIChpID4gMSkKKwkJCQlwdXRjaGFyKCcgJyk7CisJCQlpZiAodG9wYXRoW2ldWzBdKQorCQkJCWZwdXRzKHRvcGF0aFtpXSwgc3Rkb3V0KTsKKwkJCWVsc2UKKwkJCQlwdXRjaGFyKCcuJyk7CisJCX0KKwl9IGVsc2UKKwkJZnB1dHModG9wYXRoW2NoZWNrb3V0X3N0YWdlXSwgc3Rkb3V0KTsKKworCXB1dGNoYXIoJ1x0Jyk7CisJd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUobmFtZSwgcHJlZml4LCBzdGRvdXQsCisJCQkJICAgbnVsX3Rlcm1fbGluZSA/ICdcMCcgOiAnXG4nKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdG9wYXRoW2ldWzBdID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfZmlsZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKG5hbWUsIG5hbWVsZW4pOworCWludCBoYXNfc2FtZV9uYW1lID0gMDsKKwlpbnQgZGlkX2NoZWNrb3V0ID0gMDsKKwlpbnQgZXJycyA9IDA7CisKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcyAtIDE7CisKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpICE9IG5hbWVsZW4gfHwKKwkJICAgIG1lbWNtcChjZS0+bmFtZSwgbmFtZSwgbmFtZWxlbikpCisJCQlicmVhazsKKwkJaGFzX3NhbWVfbmFtZSA9IDE7CisJCXBvcysrOworCQlpZiAoY2Vfc3RhZ2UoY2UpICE9IGNoZWNrb3V0X3N0YWdlCisJCSAgICAmJiAoQ0hFQ0tPVVRfQUxMICE9IGNoZWNrb3V0X3N0YWdlIHx8ICFjZV9zdGFnZShjZSkpKQorCQkJY29udGludWU7CisJCWRpZF9jaGVja291dCA9IDE7CisJCWlmIChjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLAorCQkJCSAgIHRvX3RlbXBmaWxlID8gdG9wYXRoW2NlX3N0YWdlKGNlKV0gOiBOVUxMLAorCQkJCSAgIE5VTEwpIDwgMCkKKwkJCWVycnMrKzsKKwl9CisKKwlpZiAoZGlkX2NoZWNrb3V0KSB7CisJCWlmICh0b190ZW1wZmlsZSkKKwkJCXdyaXRlX3RlbXBmaWxlX3JlY29yZChuYW1lLCBwcmVmaXgpOworCQlyZXR1cm4gZXJycyA+IDAgPyAtMSA6IDA7CisJfQorCisJaWYgKCFzdGF0ZS5xdWlldCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImdpdCBjaGVja291dC1pbmRleDogJXMgIiwgbmFtZSk7CisJCWlmICghaGFzX3NhbWVfbmFtZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiaXMgbm90IGluIHRoZSBjYWNoZSIpOworCQllbHNlIGlmIChjaGVja291dF9zdGFnZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiZG9lcyBub3QgZXhpc3QgYXQgc3RhZ2UgJWQiLAorCQkJCWNoZWNrb3V0X3N0YWdlKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICJpcyB1bm1lcmdlZCIpOworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrb3V0X2FsbChjb25zdCBjaGFyICpwcmVmaXgsIGludCBwcmVmaXhfbGVuZ3RoKQoreworCWludCBpLCBlcnJzID0gMDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmxhc3RfY2UgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9uciA7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlpZiAoY2Vfc3RhZ2UoY2UpICE9IGNoZWNrb3V0X3N0YWdlCisJCSAgICAmJiAoQ0hFQ0tPVVRfQUxMICE9IGNoZWNrb3V0X3N0YWdlIHx8ICFjZV9zdGFnZShjZSkpKQorCQkJY29udGludWU7CisJCWlmIChwcmVmaXggJiYgKnByZWZpeCAmJgorCQkgICAgKGNlX25hbWVsZW4oY2UpIDw9IHByZWZpeF9sZW5ndGggfHwKKwkJICAgICBtZW1jbXAocHJlZml4LCBjZS0+bmFtZSwgcHJlZml4X2xlbmd0aCkpKQorCQkJY29udGludWU7CisJCWlmIChsYXN0X2NlICYmIHRvX3RlbXBmaWxlKSB7CisJCQlpZiAoY2VfbmFtZWxlbihsYXN0X2NlKSAhPSBjZV9uYW1lbGVuKGNlKQorCQkJICAgIHx8IG1lbWNtcChsYXN0X2NlLT5uYW1lLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpKQorCQkJCXdyaXRlX3RlbXBmaWxlX3JlY29yZChsYXN0X2NlLT5uYW1lLCBwcmVmaXgpOworCQl9CisJCWlmIChjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLAorCQkJCSAgIHRvX3RlbXBmaWxlID8gdG9wYXRoW2NlX3N0YWdlKGNlKV0gOiBOVUxMLAorCQkJCSAgIE5VTEwpIDwgMCkKKwkJCWVycnMrKzsKKwkJbGFzdF9jZSA9IGNlOworCX0KKwlpZiAobGFzdF9jZSAmJiB0b190ZW1wZmlsZSkKKwkJd3JpdGVfdGVtcGZpbGVfcmVjb3JkKGxhc3RfY2UtPm5hbWUsIHByZWZpeCk7CisJaWYgKGVycnMpCisJCS8qIHdlIGhhdmUgYWxyZWFkeSBkb25lIG91ciBlcnJvciByZXBvcnRpbmcuCisJCSAqIGV4aXQgd2l0aCB0aGUgc2FtZSBjb2RlIGFzIGRpZSgpLgorCQkgKi8KKwkJZXhpdCgxMjgpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9zdGFnZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAoIXN0cmNtcChhcmcsICJhbGwiKSkgeworCQl0b190ZW1wZmlsZSA9IDE7CisJCWNoZWNrb3V0X3N0YWdlID0gQ0hFQ0tPVVRfQUxMOworCX0gZWxzZSB7CisJCWludCBjaCA9IGFyZ1swXTsKKwkJaWYgKCcxJyA8PSBjaCAmJiBjaCA8PSAnMycpCisJCQljaGVja291dF9zdGFnZSA9IGFyZ1swXSAtICcwJzsKKwkJZWxzZQorCQkJZGllKF8oInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIikpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9jaGVja291dF9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlpbnQgYWxsID0gMDsKKwlpbnQgcmVhZF9mcm9tX3N0ZGluID0gMDsKKwlpbnQgcHJlZml4X2xlbmd0aDsKKwlpbnQgZm9yY2UgPSAwLCBxdWlldCA9IDAsIG5vdF9uZXcgPSAwOworCWludCBpbmRleF9vcHQgPSAwOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdhJywgImFsbCIsICZhbGwsCisJCQlOXygiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIiksIDApLAorCQlPUFRfX1FVSUVUKCZxdWlldCwKKwkJCU5fKCJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IikpLAorCQlPUFRfQk9PTCgnbicsICJuby1jcmVhdGUiLCAmbm90X25ldywKKwkJCU5fKCJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiKSksCisJCU9QVF9CT09MKCd1JywgImluZGV4IiwgJmluZGV4X29wdCwKKwkJCSBOXygidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiKSksCisJCU9QVF9CT09MKCd6JywgTlVMTCwgJm51bF90ZXJtX2xpbmUsCisJCQlOXygicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiKSksCisJCU9QVF9CT09MKDAsICJzdGRpbiIsICZyZWFkX2Zyb21fc3RkaW4sCisJCQlOXygicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IikpLAorCQlPUFRfQk9PTCgwLCAidGVtcCIsICZ0b190ZW1wZmlsZSwKKwkJCU5fKCJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiKSksCisJCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZzdGF0ZS5iYXNlX2RpciwgTl8oInN0cmluZyIpLAorCQkJTl8oIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAic3RhZ2UiLCBOVUxMLCAiKDF8MnwzfGFsbCkiLAorCQkJTl8oImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIiksCisJCQlQQVJTRV9PUFRfTk9ORUcsIG9wdGlvbl9wYXJzZV9zdGFnZSB9LAorCQlPUFRfRU5EKCkKKwl9OworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jaGVja291dF9pbmRleF91c2FnZSwKKwkJCQkgICBidWlsdGluX2NoZWNrb3V0X2luZGV4X29wdGlvbnMpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlwcmVmaXhfbGVuZ3RoID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApIHsKKwkJZGllKCJpbnZhbGlkIGNhY2hlIik7CisJfQorCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2NoZWNrb3V0X2luZGV4X29wdGlvbnMsCisJCQlidWlsdGluX2NoZWNrb3V0X2luZGV4X3VzYWdlLCAwKTsKKwlzdGF0ZS5pc3RhdGUgPSAmdGhlX2luZGV4OworCXN0YXRlLmZvcmNlID0gZm9yY2U7CisJc3RhdGUucXVpZXQgPSBxdWlldDsKKwlzdGF0ZS5ub3RfbmV3ID0gbm90X25ldzsKKworCWlmICghc3RhdGUuYmFzZV9kaXIpCisJCXN0YXRlLmJhc2VfZGlyID0gIiI7CisJc3RhdGUuYmFzZV9kaXJfbGVuID0gc3RybGVuKHN0YXRlLmJhc2VfZGlyKTsKKworCS8qCisJICogd2hlbiAtLXByZWZpeCBpcyBzcGVjaWZpZWQgd2UgZG8gbm90IHdhbnQgdG8gdXBkYXRlIGNhY2hlLgorCSAqLworCWlmIChpbmRleF9vcHQgJiYgIXN0YXRlLmJhc2VfZGlyX2xlbiAmJiAhdG9fdGVtcGZpbGUpIHsKKwkJc3RhdGUucmVmcmVzaF9jYWNoZSA9IDE7CisJCXN0YXRlLmlzdGF0ZSA9ICZ0aGVfaW5kZXg7CisJCWhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIExPQ0tfRElFX09OX0VSUk9SKTsKKwl9CisKKwkvKiBDaGVjayBvdXQgbmFtZWQgZmlsZXMgZmlyc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWNoYXIgKnA7CisKKwkJaWYgKGFsbCkKKwkJCWRpZSgiZ2l0IGNoZWNrb3V0LWluZGV4OiBkb24ndCBtaXggJy0tYWxsJyBhbmQgZXhwbGljaXQgZmlsZW5hbWVzIik7CisJCWlmIChyZWFkX2Zyb21fc3RkaW4pCisJCQlkaWUoImdpdCBjaGVja291dC1pbmRleDogZG9uJ3QgbWl4ICctLXN0ZGluJyBhbmQgZXhwbGljaXQgZmlsZW5hbWVzIik7CisJCXAgPSBwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeF9sZW5ndGgsIGFyZyk7CisJCWNoZWNrb3V0X2ZpbGUocCwgcHJlZml4KTsKKwkJZnJlZShwKTsKKwl9CisKKwlpZiAocmVhZF9mcm9tX3N0ZGluKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgdW5xdW90ZWQgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2dldGxpbmVfZm4gZ2V0bGluZV9mbjsKKworCQlpZiAoYWxsKQorCQkJZGllKCJnaXQgY2hlY2tvdXQtaW5kZXg6IGRvbid0IG1peCAnLS1hbGwnIGFuZCAnLS1zdGRpbiciKTsKKworCQlnZXRsaW5lX2ZuID0gbnVsX3Rlcm1fbGluZSA/IHN0cmJ1Zl9nZXRsaW5lX251bCA6IHN0cmJ1Zl9nZXRsaW5lX2xmOworCQl3aGlsZSAoZ2V0bGluZV9mbigmYnVmLCBzdGRpbikgIT0gRU9GKSB7CisJCQljaGFyICpwOworCQkJaWYgKCFudWxfdGVybV9saW5lICYmIGJ1Zi5idWZbMF0gPT0gJyInKSB7CisJCQkJc3RyYnVmX3Jlc2V0KCZ1bnF1b3RlZCk7CisJCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmdW5xdW90ZWQsIGJ1Zi5idWYsIE5VTEwpKQorCQkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJnVucXVvdGVkKTsKKwkJCX0KKwkJCXAgPSBwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeF9sZW5ndGgsIGJ1Zi5idWYpOworCQkJY2hlY2tvdXRfZmlsZShwLCBwcmVmaXgpOworCQkJZnJlZShwKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmdW5xdW90ZWQpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisKKwlpZiAoYWxsKQorCQljaGVja291dF9hbGwocHJlZml4LCBwcmVmaXhfbGVuZ3RoKTsKKworCWlmIChpc19sb2NrX2ZpbGVfbG9ja2VkKCZsb2NrX2ZpbGUpICYmCisJICAgIHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZSgiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrb3V0LmMgYi9idWlsdGluL2NoZWNrb3V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3NzM4MQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2hlY2tvdXQuYwpAQCAtMCwwICsxLDE4NDIgQEAKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJhZHZpY2UuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgImNoZWNrb3V0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNoZWNrb3V0X3VzYWdlW10gPSB7CisJTl8oImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIpLAorCU5fKCJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iKSwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzd2l0Y2hfYnJhbmNoX3VzYWdlW10gPSB7CisJTl8oImdpdCBzd2l0Y2ggWzxvcHRpb25zPl0gWzxicmFuY2g+XSIpLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlc3RvcmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iKSwKKwlOVUxMLAorfTsKKworc3RydWN0IGNoZWNrb3V0X29wdHMgeworCWludCBwYXRjaF9tb2RlOworCWludCBxdWlldDsKKwlpbnQgbWVyZ2U7CisJaW50IGZvcmNlOworCWludCBmb3JjZV9kZXRhY2g7CisJaW50IGltcGxpY2l0X2RldGFjaDsKKwlpbnQgd3JpdGVvdXRfc3RhZ2U7CisJaW50IG92ZXJ3cml0ZV9pZ25vcmU7CisJaW50IGlnbm9yZV9za2lwd29ya3RyZWU7CisJaW50IGlnbm9yZV9vdGhlcl93b3JrdHJlZXM7CisJaW50IHNob3dfcHJvZ3Jlc3M7CisJaW50IGNvdW50X2NoZWNrb3V0X3BhdGhzOworCWludCBvdmVybGF5X21vZGU7CisJaW50IGR3aW1fbmV3X2xvY2FsX2JyYW5jaDsKKwlpbnQgZGlzY2FyZF9jaGFuZ2VzOworCWludCBhY2NlcHRfcmVmOworCWludCBhY2NlcHRfcGF0aHNwZWM7CisJaW50IHN3aXRjaF9icmFuY2hfZG9pbmdfbm90aGluZ19pc19vazsKKwlpbnQgb25seV9tZXJnZV9vbl9zd2l0Y2hpbmdfYnJhbmNoZXM7CisJaW50IGNhbl9zd2l0Y2hfd2hlbl9pbl9wcm9ncmVzczsKKwlpbnQgb3JwaGFuX2Zyb21fZW1wdHlfdHJlZTsKKwlpbnQgZW1wdHlfcGF0aHNwZWNfb2s7CisJaW50IGNoZWNrb3V0X2luZGV4OworCWludCBjaGVja291dF93b3JrdHJlZTsKKwljb25zdCBjaGFyICppZ25vcmVfdW5tZXJnZWRfb3B0OworCWludCBpZ25vcmVfdW5tZXJnZWQ7CisJaW50IHBhdGhzcGVjX2ZpbGVfbnVsOworCWNvbnN0IGNoYXIgKnBhdGhzcGVjX2Zyb21fZmlsZTsKKworCWNvbnN0IGNoYXIgKm5ld19icmFuY2g7CisJY29uc3QgY2hhciAqbmV3X2JyYW5jaF9mb3JjZTsKKwljb25zdCBjaGFyICpuZXdfb3JwaGFuX2JyYW5jaDsKKwlpbnQgbmV3X2JyYW5jaF9sb2c7CisJZW51bSBicmFuY2hfdHJhY2sgdHJhY2s7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmX29wdGlvbnM7CisJY2hhciAqY29uZmxpY3Rfc3R5bGU7CisKKwlpbnQgYnJhbmNoX2V4aXN0czsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCWNvbnN0IGNoYXIgKmZyb21fdHJlZWlzaDsKKwlzdHJ1Y3QgdHJlZSAqc291cmNlX3RyZWU7Cit9OworCitzdGF0aWMgaW50IHBvc3RfY2hlY2tvdXRfaG9vayhzdHJ1Y3QgY29tbWl0ICpvbGRfY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICpuZXdfY29tbWl0LAorCQkJICAgICAgaW50IGNoYW5nZWQpCit7CisJcmV0dXJuIHJ1bl9ob29rX2xlKE5VTEwsICJwb3N0LWNoZWNrb3V0IiwKKwkJCSAgIG9pZF90b19oZXgob2xkX2NvbW1pdCA/ICZvbGRfY29tbWl0LT5vYmplY3Qub2lkIDogJm51bGxfb2lkKSwKKwkJCSAgIG9pZF90b19oZXgobmV3X2NvbW1pdCA/ICZuZXdfY29tbWl0LT5vYmplY3Qub2lkIDogJm51bGxfb2lkKSwKKwkJCSAgIGNoYW5nZWQgPyAiMSIgOiAiMCIsIE5VTEwpOworCS8qICJuZXdfY29tbWl0IiBjYW4gYmUgTlVMTCB3aGVuIGNoZWNraW5nIG91dCBmcm9tIHRoZSBpbmRleCBiZWZvcmUKKwkgICBhIGNvbW1pdCBleGlzdHMuICovCisKK30KKworc3RhdGljIGludCB1cGRhdGVfc29tZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBwb3M7CisKKwlpZiAoU19JU0RJUihtb2RlKSkKKwkJcmV0dXJuIFJFQURfVFJFRV9SRUNVUlNJVkU7CisKKwlsZW4gPSBiYXNlLT5sZW4gKyBzdHJsZW4ocGF0aG5hbWUpOworCWNlID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeSgmdGhlX2luZGV4LCBsZW4pOworCW9pZGNweSgmY2UtPm9pZCwgb2lkKTsKKwltZW1jcHkoY2UtPm5hbWUsIGJhc2UtPmJ1ZiwgYmFzZS0+bGVuKTsKKwltZW1jcHkoY2UtPm5hbWUgKyBiYXNlLT5sZW4sIHBhdGhuYW1lLCBsZW4gLSBiYXNlLT5sZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncygwKSB8IENFX1VQREFURTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCisJLyoKKwkgKiBJZiB0aGUgZW50cnkgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgaW5kZXgsIHdlIGNhbiBsZWF2ZSB0aGUgb2xkCisJICogZW50cnkgaW4gcGxhY2UuIFdoZXRoZXIgaXQgaXMgVVBUT0RBVEUgb3Igbm90LCBjaGVja291dF9lbnRyeSB3aWxsCisJICogZG8gdGhlIHJpZ2h0IHRoaW5nLgorCSAqLworCXBvcyA9IGNhY2hlX25hbWVfcG9zKGNlLT5uYW1lLCBjZS0+Y2VfbmFtZWxlbik7CisJaWYgKHBvcyA+PSAwKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChjZS0+Y2VfbW9kZSA9PSBvbGQtPmNlX21vZGUgJiYKKwkJICAgICFjZV9pbnRlbnRfdG9fYWRkKG9sZCkgJiYKKwkJICAgIG9pZGVxKCZjZS0+b2lkLCAmb2xkLT5vaWQpKSB7CisJCQlvbGQtPmNlX2ZsYWdzIHw9IENFX1VQREFURTsKKwkJCWRpc2NhcmRfY2FjaGVfZW50cnkoY2UpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlhZGRfY2FjaGVfZW50cnkoY2UsIEFERF9DQUNIRV9PS19UT19BREQgfCBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF90cmVlX3NvbWUoc3RydWN0IHRyZWUgKnRyZWUsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJcmVhZF90cmVlX3JlY3Vyc2l2ZSh0aGVfcmVwb3NpdG9yeSwgdHJlZSwgIiIsIDAsIDAsCisJCQkgICAgcGF0aHNwZWMsIHVwZGF0ZV9zb21lLCBOVUxMKTsKKworCS8qIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUgZ2l2ZW4gdHJlZSdzIGluZm8KKwkgKiBmb3IgYWxsIGFyZ3MsIGV4cGFuZGluZyB3aWxkY2FyZHMsIGFuZCBleGl0CisJICogd2l0aCBhbnkgbm9uLXplcm8gcmV0dXJuIGNvZGUuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2tpcF9zYW1lX25hbWUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcykKK3sKKwl3aGlsZSAoKytwb3MgPCBhY3RpdmVfbnIgJiYKKwkgICAgICAgIXN0cmNtcChhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSwgY2UtPm5hbWUpKQorCQk7IC8qIHNraXAgKi8KKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N0YWdlKGludCBzdGFnZSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcywKKwkJICAgICAgIGludCBvdmVybGF5X21vZGUpCit7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9uciAmJgorCSAgICAgICAhc3RyY21wKGFjdGl2ZV9jYWNoZVtwb3NdLT5uYW1lLCBjZS0+bmFtZSkpIHsKKwkJaWYgKGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtwb3NdKSA9PSBzdGFnZSkKKwkJCXJldHVybiAwOworCQlwb3MrKzsKKwl9CisJaWYgKCFvdmVybGF5X21vZGUpCisJCXJldHVybiAwOworCWlmIChzdGFnZSA9PSAyKQorCQlyZXR1cm4gZXJyb3IoXygicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iKSwgY2UtPm5hbWUpOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iKSwgY2UtPm5hbWUpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N0YWdlcyh1bnNpZ25lZCBzdGFnZXMsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MpCit7CisJdW5zaWduZWQgc2VlbiA9IDA7CisJY29uc3QgY2hhciAqbmFtZSA9IGNlLT5uYW1lOworCisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoc3RyY21wKG5hbWUsIGNlLT5uYW1lKSkKKwkJCWJyZWFrOworCQlzZWVuIHw9ICgxIDw8IGNlX3N0YWdlKGNlKSk7CisJCXBvcysrOworCX0KKwlpZiAoKHN0YWdlcyAmIHNlZW4pICE9IHN0YWdlcykKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiKSwKKwkJCSAgICAgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfc3RhZ2UoaW50IHN0YWdlLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zLAorCQkJICBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgKm5yX2NoZWNrb3V0cywKKwkJCSAgaW50IG92ZXJsYXlfbW9kZSkKK3sKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yICYmCisJICAgICAgICFzdHJjbXAoYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUsIGNlLT5uYW1lKSkgeworCQlpZiAoY2Vfc3RhZ2UoYWN0aXZlX2NhY2hlW3Bvc10pID09IHN0YWdlKQorCQkJcmV0dXJuIGNoZWNrb3V0X2VudHJ5KGFjdGl2ZV9jYWNoZVtwb3NdLCBzdGF0ZSwKKwkJCQkJICAgICAgTlVMTCwgbnJfY2hlY2tvdXRzKTsKKwkJcG9zKys7CisJfQorCWlmICghb3ZlcmxheV9tb2RlKSB7CisJCXVubGlua19lbnRyeShjZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc3RhZ2UgPT0gMikKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIiksIGNlLT5uYW1lKTsKKwllbHNlCisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIiksIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCBjaGVja291dF9tZXJnZWQoaW50IHBvcywgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50ICpucl9jaGVja291dHMpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCWNvbnN0IGNoYXIgKnBhdGggPSBjZS0+bmFtZTsKKwltbWZpbGVfdCBhbmNlc3Rvciwgb3VycywgdGhlaXJzOworCWludCBzdGF0dXM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJbW1idWZmZXJfdCByZXN1bHRfYnVmOworCXN0cnVjdCBvYmplY3RfaWQgdGhyZWV3YXlbM107CisJdW5zaWduZWQgbW9kZSA9IDA7CisKKwltZW1zZXQodGhyZWV3YXksIDAsIHNpemVvZih0aHJlZXdheSkpOworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJaW50IHN0YWdlOworCQlzdGFnZSA9IGNlX3N0YWdlKGNlKTsKKwkJaWYgKCFzdGFnZSB8fCBzdHJjbXAocGF0aCwgY2UtPm5hbWUpKQorCQkJYnJlYWs7CisJCW9pZGNweSgmdGhyZWV3YXlbc3RhZ2UgLSAxXSwgJmNlLT5vaWQpOworCQlpZiAoc3RhZ2UgPT0gMikKKwkJCW1vZGUgPSBjcmVhdGVfY2VfbW9kZShjZS0+Y2VfbW9kZSk7CisJCXBvcysrOworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCX0KKwlpZiAoaXNfbnVsbF9vaWQoJnRocmVld2F5WzFdKSB8fCBpc19udWxsX29pZCgmdGhyZWV3YXlbMl0pKQorCQlyZXR1cm4gZXJyb3IoXygicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIiksIHBhdGgpOworCisJcmVhZF9tbWJsb2IoJmFuY2VzdG9yLCAmdGhyZWV3YXlbMF0pOworCXJlYWRfbW1ibG9iKCZvdXJzLCAmdGhyZWV3YXlbMV0pOworCXJlYWRfbW1ibG9iKCZ0aGVpcnMsICZ0aHJlZXdheVsyXSk7CisKKwkvKgorCSAqIE5FRURTV09SSzogcmUtY3JlYXRlIGNvbmZsaWN0cyBmcm9tIG1lcmdlcyB3aXRoCisJICogbWVyZ2UucmVub3JtYWxpemUgc2V0LCB0b28KKwkgKi8KKwlzdGF0dXMgPSBsbF9tZXJnZSgmcmVzdWx0X2J1ZiwgcGF0aCwgJmFuY2VzdG9yLCAiYmFzZSIsCisJCQkgICZvdXJzLCAib3VycyIsICZ0aGVpcnMsICJ0aGVpcnMiLAorCQkJICBzdGF0ZS0+aXN0YXRlLCBOVUxMKTsKKwlmcmVlKGFuY2VzdG9yLnB0cik7CisJZnJlZShvdXJzLnB0cik7CisJZnJlZSh0aGVpcnMucHRyKTsKKwlpZiAoc3RhdHVzIDwgMCB8fCAhcmVzdWx0X2J1Zi5wdHIpIHsKKwkJZnJlZShyZXN1bHRfYnVmLnB0cik7CisJCXJldHVybiBlcnJvcihfKCJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIpLCBwYXRoKTsKKwl9CisKKwkvKgorCSAqIE5FRURTV09SSzoKKwkgKiBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHJlYXNvbiB0byB3cml0ZSB0aGlzIGFzIGEgYmxvYiBvYmplY3QKKwkgKiBhbmQgY3JlYXRlIGEgcGhvbnkgY2FjaGUgZW50cnkuICBUaGlzIGhhY2sgaXMgcHJpbWFyaWx5IHRvIGdldAorCSAqIHRvIHRoZSB3cml0ZV9lbnRyeSgpIG1hY2hpbmVyeSB0aGF0IG1hc3NhZ2VzIHRoZSBjb250ZW50cyB0bworCSAqIHdvcmstdHJlZSBmb3JtYXQgYW5kIHdyaXRlcyBvdXQgd2hpY2ggb25seSBhbGxvd3MgaXQgZm9yIGEKKwkgKiBjYWNoZSBlbnRyeS4gIFRoZSBjb2RlIGluIHdyaXRlX2VudHJ5KCkgbmVlZHMgdG8gYmUgcmVmYWN0b3JlZAorCSAqIHRvIGFsbG93IHVzIHRvIGZlZWQgYSA8YnVmZmVyLCBzaXplLCBtb2RlPiBpbnN0ZWFkIG9mIGEgY2FjaGUKKwkgKiBlbnRyeS4gIFN1Y2ggYSByZWZhY3RvcmluZyB3b3VsZCBoZWxwIG1lcmdlX3JlY3Vyc2l2ZSBhcyB3ZWxsCisJICogKGl0IGFsc28gd3JpdGVzIHRoZSBtZXJnZSByZXN1bHQgdG8gdGhlIG9iamVjdCBkYXRhYmFzZSBldmVuCisJICogd2hlbiBpdCBtYXkgY29udGFpbiBjb25mbGljdHMpLgorCSAqLworCWlmICh3cml0ZV9vYmplY3RfZmlsZShyZXN1bHRfYnVmLnB0ciwgcmVzdWx0X2J1Zi5zaXplLCBibG9iX3R5cGUsICZvaWQpKQorCQlkaWUoXygiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciKSwgcGF0aCk7CisJZnJlZShyZXN1bHRfYnVmLnB0cik7CisJY2UgPSBtYWtlX3RyYW5zaWVudF9jYWNoZV9lbnRyeShtb2RlLCAmb2lkLCBwYXRoLCAyKTsKKwlpZiAoIWNlKQorCQlkaWUoXygibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIpLCBwYXRoKTsKKwlzdGF0dXMgPSBjaGVja291dF9lbnRyeShjZSwgc3RhdGUsIE5VTEwsIG5yX2NoZWNrb3V0cyk7CisJZGlzY2FyZF9jYWNoZV9lbnRyeShjZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgbWFya19jZV9mb3JfY2hlY2tvdXRfb3ZlcmxheShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCQkgY2hhciAqcHNfbWF0Y2hlZCwKKwkJCQkJIGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzKQoreworCWNlLT5jZV9mbGFncyAmPSB+Q0VfTUFUQ0hFRDsKKwlpZiAoIW9wdHMtPmlnbm9yZV9za2lwd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCXJldHVybjsKKwlpZiAob3B0cy0+c291cmNlX3RyZWUgJiYgIShjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpKQorCQkvKgorCQkgKiAiZ2l0IGNoZWNrb3V0IHRyZWUtaXNoIC0tIHBhdGgiLCBidXQgdGhpcyBlbnRyeQorCQkgKiBpcyBpbiB0aGUgb3JpZ2luYWwgaW5kZXggYnV0IGlzIG5vdCBpbiB0cmVlLWlzaAorCQkgKiBvciBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0aHNwZWM7IGl0IHdpbGwgbm90IGJlCisJCSAqIGNoZWNrZWQgb3V0IHRvIHRoZSB3b3JraW5nIHRyZWUuICBXZSB3aWxsIG5vdCBkbworCQkgKiBhbnl0aGluZyB0byB0aGlzIGVudHJ5IGF0IGFsbC4KKwkJICovCisJCXJldHVybjsKKwkvKgorCSAqIEVpdGhlciB0aGlzIGVudHJ5IGNhbWUgZnJvbSB0aGUgdHJlZS1pc2ggd2UgYXJlCisJICogY2hlY2tpbmcgdGhlIHBhdGhzIG91dCBvZiwgb3Igd2UgYXJlIGNoZWNraW5nIG91dAorCSAqIG9mIHRoZSBpbmRleC4KKwkgKgorCSAqIElmIGl0IGNvbWVzIGZyb20gdGhlIHRyZWUtaXNoLCB3ZSBhbHJlYWR5IGtub3cgaXQKKwkgKiBtYXRjaGVzIHRoZSBwYXRoc3BlYyBhbmQgY291bGQganVzdCBzdGFtcAorCSAqIENFX01BVENIRUQgdG8gaXQgZnJvbSB1cGRhdGVfc29tZSgpLiBCdXQgd2Ugc3RpbGwKKwkgKiBuZWVkIHBzX21hdGNoZWQgYW5kIHJlYWRfdHJlZV9yZWN1cnNpdmUgKGFuZAorCSAqIGV2ZW50dWFsbHkgdHJlZV9lbnRyeV9pbnRlcmVzdGluZykgY2Fubm90IGZpbGwKKwkgKiBwc19tYXRjaGVkIHlldC4gT25jZSBpdCBjYW4sIHdlIGNhbiBhdm9pZCBjYWxsaW5nCisJICogbWF0Y2hfcGF0aHNwZWMoKSBmb3IgX2FsbF8gZW50cmllcyB3aGVuCisJICogb3B0cy0+c291cmNlX3RyZWUgIT0gTlVMTC4KKwkgKi8KKwlpZiAoY2VfcGF0aF9tYXRjaCgmdGhlX2luZGV4LCBjZSwgJm9wdHMtPnBhdGhzcGVjLCBwc19tYXRjaGVkKSkKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX01BVENIRUQ7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY2VfZm9yX2NoZWNrb3V0X25vX292ZXJsYXkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJICAgIGNoYXIgKnBzX21hdGNoZWQsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cykKK3sKKwljZS0+Y2VfZmxhZ3MgJj0gfkNFX01BVENIRUQ7CisJaWYgKCFvcHRzLT5pZ25vcmVfc2tpcHdvcmt0cmVlICYmIGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQlyZXR1cm47CisJaWYgKGNlX3BhdGhfbWF0Y2goJnRoZV9pbmRleCwgY2UsICZvcHRzLT5wYXRoc3BlYywgcHNfbWF0Y2hlZCkpIHsKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX01BVENIRUQ7CisJCWlmIChvcHRzLT5zb3VyY2VfdHJlZSAmJiAhKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkpCisJCQkvKgorCQkJICogSW4gb3ZlcmxheSBtb2RlLCBidXQgdGhlIHBhdGggaXMgbm90IGluCisJCQkgKiB0cmVlLWlzaCwgd2hpY2ggbWVhbnMgd2Ugc2hvdWxkIHJlbW92ZSBpdAorCQkJICogZnJvbSB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUuCisJCQkgKi8KKwkJCWNlLT5jZV9mbGFncyB8PSBDRV9SRU1PVkUgfCBDRV9XVF9SRU1PVkU7CisJfQorfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X3dvcmt0cmVlKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzKQoreworCXN0cnVjdCBjaGVja291dCBzdGF0ZSA9IENIRUNLT1VUX0lOSVQ7CisJaW50IG5yX2NoZWNrb3V0cyA9IDAsIG5yX3VubWVyZ2VkID0gMDsKKwlpbnQgZXJycyA9IDA7CisJaW50IHBvczsKKworCXN0YXRlLmZvcmNlID0gMTsKKwlzdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwlzdGF0ZS5pc3RhdGUgPSAmdGhlX2luZGV4OworCisJZW5hYmxlX2RlbGF5ZWRfY2hlY2tvdXQoJnN0YXRlKTsKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRCkgeworCQkJaWYgKCFjZV9zdGFnZShjZSkpIHsKKwkJCQllcnJzIHw9IGNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUsCisJCQkJCQkgICAgICAgTlVMTCwgJm5yX2NoZWNrb3V0cyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAob3B0cy0+d3JpdGVvdXRfc3RhZ2UpCisJCQkJZXJycyB8PSBjaGVja291dF9zdGFnZShvcHRzLT53cml0ZW91dF9zdGFnZSwKKwkJCQkJCSAgICAgICBjZSwgcG9zLAorCQkJCQkJICAgICAgICZzdGF0ZSwKKwkJCQkJCSAgICAgICAmbnJfY2hlY2tvdXRzLCBvcHRzLT5vdmVybGF5X21vZGUpOworCQkJZWxzZSBpZiAob3B0cy0+bWVyZ2UpCisJCQkJZXJycyB8PSBjaGVja291dF9tZXJnZWQocG9zLCAmc3RhdGUsCisJCQkJCQkJJm5yX3VubWVyZ2VkKTsKKwkJCXBvcyA9IHNraXBfc2FtZV9uYW1lKGNlLCBwb3MpIC0gMTsKKwkJfQorCX0KKwlyZW1vdmVfbWFya2VkX2NhY2hlX2VudHJpZXMoJnRoZV9pbmRleCwgMSk7CisJcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKCk7CisJZXJycyB8PSBmaW5pc2hfZGVsYXllZF9jaGVja291dCgmc3RhdGUsICZucl9jaGVja291dHMpOworCisJaWYgKG9wdHMtPmNvdW50X2NoZWNrb3V0X3BhdGhzKSB7CisJCWlmIChucl91bm1lcmdlZCkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBRXygiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0IiwKKwkJCQkJICAgICAgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiLAorCQkJCQkgICAgICBucl91bm1lcmdlZCksCisJCQkJICAgbnJfdW5tZXJnZWQpOworCQlpZiAob3B0cy0+c291cmNlX3RyZWUpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgUV8oIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIiwKKwkJCQkJICAgICAgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIsCisJCQkJCSAgICAgIG5yX2NoZWNrb3V0cyksCisJCQkJICAgbnJfY2hlY2tvdXRzLAorCQkJCSAgIGZpbmRfdW5pcXVlX2FiYnJldigmb3B0cy0+c291cmNlX3RyZWUtPm9iamVjdC5vaWQsCisJCQkJCQkgICAgICBERUZBVUxUX0FCQlJFVikpOworCQllbHNlIGlmICghbnJfdW5tZXJnZWQgfHwgbnJfY2hlY2tvdXRzKQorCQkJZnByaW50Zl9sbihzdGRlcnIsIFFfKCJVcGRhdGVkICVkIHBhdGggZnJvbSB0aGUgaW5kZXgiLAorCQkJCQkgICAgICAiVXBkYXRlZCAlZCBwYXRocyBmcm9tIHRoZSBpbmRleCIsCisJCQkJCSAgICAgIG5yX2NoZWNrb3V0cyksCisJCQkJICAgbnJfY2hlY2tvdXRzKTsKKwl9CisKKwlyZXR1cm4gZXJyczsKK30KKworc3RhdGljIGludCBjaGVja291dF9wYXRocyhjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCSAgY29uc3QgY2hhciAqcmV2aXNpb24pCit7CisJaW50IHBvczsKKwlzdGF0aWMgY2hhciAqcHNfbWF0Y2hlZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJldjsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkOworCWludCBlcnJzID0gMDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlpbnQgY2hlY2tvdXRfaW5kZXg7CisKKwl0cmFjZTJfY21kX21vZGUob3B0cy0+cGF0Y2hfbW9kZSA/ICJwYXRjaCIgOiAicGF0aCIpOworCisJaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIpLCAiLS10cmFjayIpOworCisJaWYgKG9wdHMtPm5ld19icmFuY2hfbG9nKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksICItbCIpOworCisJaWYgKG9wdHMtPmlnbm9yZV91bm1lcmdlZCAmJiBvcHRzLT5wYXRjaF9tb2RlKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksCisJCSAgICBvcHRzLT5pZ25vcmVfdW5tZXJnZWRfb3B0KTsKKworCWlmIChvcHRzLT5mb3JjZV9kZXRhY2gpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiKSwgIi0tZGV0YWNoIik7CisKKwlpZiAob3B0cy0+bWVyZ2UgJiYgb3B0cy0+cGF0Y2hfbW9kZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIpLCAiLS1tZXJnZSIsICItLXBhdGNoIik7CisKKwlpZiAob3B0cy0+aWdub3JlX3VubWVyZ2VkICYmIG9wdHMtPm1lcmdlKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiksCisJCSAgICBvcHRzLT5pZ25vcmVfdW5tZXJnZWRfb3B0LCAiLW0iKTsKKworCWlmIChvcHRzLT5uZXdfYnJhbmNoKQorCQlkaWUoXygiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIiksCisJCSAgICBvcHRzLT5uZXdfYnJhbmNoKTsKKworCWlmICghb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgJiYgIW9wdHMtPmNoZWNrb3V0X2luZGV4KQorCQlkaWUoXygibmVpdGhlciAnJXMnIG9yICclcycgaXMgc3BlY2lmaWVkIiksCisJCSAgICAiLS1zdGFnZWQiLCAiLS13b3JrdHJlZSIpOworCisJaWYgKCFvcHRzLT5jaGVja291dF93b3JrdHJlZSAmJiAhb3B0cy0+ZnJvbV90cmVlaXNoKQorCQlkaWUoXygiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiKSwKKwkJICAgICItLXdvcmt0cmVlIiwgIi0tc291cmNlIik7CisKKwlpZiAob3B0cy0+Y2hlY2tvdXRfaW5kZXggJiYgIW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlICYmCisJICAgIG9wdHMtPndyaXRlb3V0X3N0YWdlKQorCQlkaWUoXygiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwKKwkJICAgICItLW91cnMiLCAiLS10aGVpcnMiLCAiLS1zdGFnZWQiKTsKKworCWlmIChvcHRzLT5jaGVja291dF9pbmRleCAmJiAhb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgJiYKKwkgICAgb3B0cy0+bWVyZ2UpCisJCWRpZShfKCInJXMnIG9yICclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIpLAorCQkgICAgIi0tbWVyZ2UiLCAiLS1jb25mbGljdCIsICItLXN0YWdlZCIpOworCisJaWYgKG9wdHMtPnBhdGNoX21vZGUpIHsKKwkJY29uc3QgY2hhciAqcGF0Y2hfbW9kZTsKKworCQlpZiAob3B0cy0+Y2hlY2tvdXRfaW5kZXggJiYgb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUpCisJCQlwYXRjaF9tb2RlID0gIi0tcGF0Y2g9Y2hlY2tvdXQiOworCQllbHNlIGlmIChvcHRzLT5jaGVja291dF9pbmRleCAmJiAhb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUpCisJCQlwYXRjaF9tb2RlID0gIi0tcGF0Y2g9cmVzZXQiOworCQllbHNlIGlmICghb3B0cy0+Y2hlY2tvdXRfaW5kZXggJiYgb3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUpCisJCQlwYXRjaF9tb2RlID0gIi0tcGF0Y2g9d29ya3RyZWUiOworCQllbHNlCisJCQlCVUcoImVpdGhlciBmbGFnIG11c3QgaGF2ZSBiZWVuIHNldCwgd29ya3RyZWU9JWQsIGluZGV4PSVkIiwKKwkJCSAgICBvcHRzLT5jaGVja291dF93b3JrdHJlZSwgb3B0cy0+Y2hlY2tvdXRfaW5kZXgpOworCQlyZXR1cm4gcnVuX2FkZF9pbnRlcmFjdGl2ZShyZXZpc2lvbiwgcGF0Y2hfbW9kZSwgJm9wdHMtPnBhdGhzcGVjKTsKKwl9CisKKwlyZXBvX2hvbGRfbG9ja2VkX2luZGV4KHRoZV9yZXBvc2l0b3J5LCAmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmb3B0cy0+cGF0aHNwZWMpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWlmIChvcHRzLT5zb3VyY2VfdHJlZSkKKwkJcmVhZF90cmVlX3NvbWUob3B0cy0+c291cmNlX3RyZWUsICZvcHRzLT5wYXRoc3BlYyk7CisKKwlwc19tYXRjaGVkID0geGNhbGxvYyhvcHRzLT5wYXRoc3BlYy5uciwgMSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbGwgcGF0aHNwZWNzIHBhcnRpY2lwYXRlZCBpbiBsb2NhdGluZyB0aGUgcGF0aHMKKwkgKiB0byBiZSBjaGVja2VkIG91dC4KKwkgKi8KKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspCisJCWlmIChvcHRzLT5vdmVybGF5X21vZGUpCisJCQltYXJrX2NlX2Zvcl9jaGVja291dF9vdmVybGF5KGFjdGl2ZV9jYWNoZVtwb3NdLAorCQkJCQkJICAgICBwc19tYXRjaGVkLAorCQkJCQkJICAgICBvcHRzKTsKKwkJZWxzZQorCQkJbWFya19jZV9mb3JfY2hlY2tvdXRfbm9fb3ZlcmxheShhY3RpdmVfY2FjaGVbcG9zXSwKKwkJCQkJCQlwc19tYXRjaGVkLAorCQkJCQkJCW9wdHMpOworCisJaWYgKHJlcG9ydF9wYXRoX2Vycm9yKHBzX21hdGNoZWQsICZvcHRzLT5wYXRoc3BlYykpIHsKKwkJZnJlZShwc19tYXRjaGVkKTsKKwkJcmV0dXJuIDE7CisJfQorCWZyZWUocHNfbWF0Y2hlZCk7CisKKwkvKiAiY2hlY2tvdXQgLW0gcGF0aCIgdG8gcmVjcmVhdGUgY29uZmxpY3RlZCBzdGF0ZSAqLworCWlmIChvcHRzLT5tZXJnZSkKKwkJdW5tZXJnZV9tYXJrZWRfaW5kZXgoJnRoZV9pbmRleCk7CisKKwkvKiBBbnkgdW5tZXJnZWQgcGF0aHM/ICovCisJZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX01BVENIRUQpIHsKKwkJCWlmICghY2Vfc3RhZ2UoY2UpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG9wdHMtPmlnbm9yZV91bm1lcmdlZCkgeworCQkJCWlmICghb3B0cy0+cXVpZXQpCisJCQkJCXdhcm5pbmcoXygicGF0aCAnJXMnIGlzIHVubWVyZ2VkIiksIGNlLT5uYW1lKTsKKwkJCX0gZWxzZSBpZiAob3B0cy0+d3JpdGVvdXRfc3RhZ2UpIHsKKwkJCQllcnJzIHw9IGNoZWNrX3N0YWdlKG9wdHMtPndyaXRlb3V0X3N0YWdlLCBjZSwgcG9zLCBvcHRzLT5vdmVybGF5X21vZGUpOworCQkJfSBlbHNlIGlmIChvcHRzLT5tZXJnZSkgeworCQkJCWVycnMgfD0gY2hlY2tfc3RhZ2VzKCgxPDwyKSB8ICgxPDwzKSwgY2UsIHBvcyk7CisJCQl9IGVsc2UgeworCQkJCWVycnMgPSAxOworCQkJCWVycm9yKF8oInBhdGggJyVzJyBpcyB1bm1lcmdlZCIpLCBjZS0+bmFtZSk7CisJCQl9CisJCQlwb3MgPSBza2lwX3NhbWVfbmFtZShjZSwgcG9zKSAtIDE7CisJCX0KKwl9CisJaWYgKGVycnMpCisJCXJldHVybiAxOworCisJLyogTm93IHdlIGFyZSBjb21taXR0ZWQgdG8gY2hlY2sgdGhlbSBvdXQgKi8KKwlpZiAob3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUpCisJCWVycnMgfD0gY2hlY2tvdXRfd29ya3RyZWUob3B0cyk7CisJZWxzZQorCQlyZW1vdmVfbWFya2VkX2NhY2hlX2VudHJpZXMoJnRoZV9pbmRleCwgMSk7CisKKwkvKgorCSAqIEFsbG93IHVwZGF0aW5nIHRoZSBpbmRleCB3aGVuIGNoZWNraW5nIG91dCBmcm9tIHRoZSBpbmRleC4KKwkgKiBUaGlzIGlzIHRvIHNhdmUgbmV3IHN0YXQgaW5mby4KKwkgKi8KKwlpZiAob3B0cy0+Y2hlY2tvdXRfd29ya3RyZWUgJiYgIW9wdHMtPmNoZWNrb3V0X2luZGV4ICYmICFvcHRzLT5zb3VyY2VfdHJlZSkKKwkJY2hlY2tvdXRfaW5kZXggPSAxOworCWVsc2UKKwkJY2hlY2tvdXRfaW5kZXggPSBvcHRzLT5jaGVja291dF9pbmRleDsKKworCWlmIChjaGVja291dF9pbmRleCkgeworCQlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTkVFRFNXT1JLOiBpZiAtLXdvcmt0cmVlIGlzIG5vdCBzcGVjaWZpZWQsIHdlCisJCSAqIHNob3VsZCBzYXZlIHN0YXQgaW5mbyBvZiBjaGVja2VkIG91dCBmaWxlcyBpbiB0aGUKKwkJICogaW5kZXggdG8gYXZvaWQgdGhlIG5leHQgKHBvdGVudGlhbGx5IGNvc3RseSkKKwkJICogcmVmcmVzaC4gQnV0IGl0J3MgYSBiaXQgdHJpY2tlciB0byBkby4uLgorCQkgKi8KKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrX2ZpbGUpOworCX0KKworCXJlYWRfcmVmX2Z1bGwoIkhFQUQiLCAwLCAmcmV2LCBOVUxMKTsKKwloZWFkID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCAmcmV2LCAxKTsKKworCWVycnMgfD0gcG9zdF9jaGVja291dF9ob29rKGhlYWQsIGhlYWQsIDApOworCXJldHVybiBlcnJzOworfQorCitzdGF0aWMgdm9pZCBzaG93X2xvY2FsX2NoYW5nZXMoc3RydWN0IG9iamVjdCAqaGVhZCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJLyogSSB0aGluayB3ZSB3YW50IGZ1bGwgcGF0aHMsIGV2ZW4gaWYgd2UncmUgaW4gYSBzdWJkaXJlY3RvcnkuICovCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQuZmxhZ3MgPSBvcHRzLT5mbGFnczsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05BTUVfU1RBVFVTOworCWRpZmZfc2V0dXBfZG9uZSgmcmV2LmRpZmZvcHQpOworCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2LCBoZWFkLCBOVUxMKTsKKwlydW5fZGlmZl9pbmRleCgmcmV2LCAwKTsKK30KKworc3RhdGljIHZvaWQgZGVzY3JpYmVfZGV0YWNoZWRfaGVhZChjb25zdCBjaGFyICptc2csIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXBhcnNlX2NvbW1pdChjb21taXQpKQorCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsICZzYik7CisJaWYgKHByaW50X3NoYTFfZWxsaXBzaXMoKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzICVzLi4uICVzXG4iLCBtc2csCisJCQlmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpLCBzYi5idWYpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMgJXMgJXNcbiIsIG1zZywKKwkJCWZpbmRfdW5pcXVlX2FiYnJldigmY29tbWl0LT5vYmplY3Qub2lkLCBERUZBVUxUX0FCQlJFViksIHNiLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm8sCisJCSAgICAgIGludCB3b3JrdHJlZSwgaW50ICp3cml0ZW91dF9lcnJvcikKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRyZWVfZGVzYzsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gLTE7CisJb3B0cy51cGRhdGUgPSB3b3JrdHJlZTsKKwlvcHRzLnNraXBfdW5tZXJnZWQgPSAhd29ya3RyZWU7CisJb3B0cy5yZXNldCA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwlvcHRzLnZlcmJvc2VfdXBkYXRlID0gby0+c2hvd19wcm9ncmVzczsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnRyZWVfZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwlzd2l0Y2ggKHVucGFja190cmVlcygxLCAmdHJlZV9kZXNjLCAmb3B0cykpIHsKKwljYXNlIC0yOgorCQkqd3JpdGVvdXRfZXJyb3IgPSAxOworCQkvKgorCQkgKiBXZSByZXR1cm4gMCBuZXZlcnRoZWxlc3MsIGFzIHRoZSBpbmRleCBpcyBhbGwgcmlnaHQKKwkJICogYW5kIG1vcmUgaW1wb3J0YW50bHkgd2UgaGF2ZSBtYWRlIGJlc3QgZWZmb3J0cyB0bworCQkgKiB1cGRhdGUgcGF0aHMgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHdlIGNhbm5vdCByZXZlcnQKKwkJICogdGhlbS4KKwkJICovCisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSAwOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTI4OworCX0KK30KKworc3RydWN0IGJyYW5jaF9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOyAvKiBUaGUgc2hvcnQgbmFtZSB1c2VkICovCisJY29uc3QgY2hhciAqcGF0aDsgLyogVGhlIGZ1bGwgbmFtZSBvZiBhIHJlYWwgYnJhbmNoICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OyAvKiBUaGUgbmFtZWQgY29tbWl0ICovCisJLyoKKwkgKiBpZiBub3QgbnVsbCB0aGUgYnJhbmNoIGlzIGRldGFjaGVkIGJlY2F1c2UgaXQncyBhbHJlYWR5CisJICogY2hlY2tlZCBvdXQgaW4gdGhpcyBjaGVja291dAorCSAqLworCWNoYXIgKmNoZWNrb3V0OworfTsKKworc3RhdGljIHZvaWQgc2V0dXBfYnJhbmNoX3BhdGgoc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2gpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9icmFuY2huYW1lKCZidWYsIGJyYW5jaC0+bmFtZSwgSU5URVJQUkVUX0JSQU5DSF9MT0NBTCk7CisJaWYgKHN0cmNtcChidWYuYnVmLCBicmFuY2gtPm5hbWUpKQorCQlicmFuY2gtPm5hbWUgPSB4c3RyZHVwKGJ1Zi5idWYpOworCXN0cmJ1Zl9zcGxpY2UoJmJ1ZiwgMCwgMCwgInJlZnMvaGVhZHMvIiwgMTEpOworCWJyYW5jaC0+cGF0aCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2Vfd29ya2luZ190cmVlKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJICAgICAgc3RydWN0IGJyYW5jaF9pbmZvICpvbGRfYnJhbmNoX2luZm8sCisJCQkgICAgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ld19icmFuY2hfaW5mbywKKwkJCSAgICAgIGludCAqd3JpdGVvdXRfZXJyb3IpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3QgdHJlZSAqbmV3X3RyZWU7CisKKwlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKKwlpZiAob3B0cy0+bmV3X29ycGhhbl9icmFuY2ggJiYgb3B0cy0+b3JwaGFuX2Zyb21fZW1wdHlfdHJlZSkgeworCQlpZiAobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpCisJCQlCVUcoIidzd2l0Y2ggLS1vcnBoYW4nIHNob3VsZCBuZXZlciBhY2NlcHQgYSBjb21taXQgYXMgc3RhcnRpbmcgcG9pbnQiKTsKKwkJbmV3X3RyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCX0gZWxzZQorCQluZXdfdHJlZSA9IGdldF9jb21taXRfdHJlZShuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCk7CisJaWYgKG9wdHMtPmRpc2NhcmRfY2hhbmdlcykgeworCQlyZXQgPSByZXNldF90cmVlKG5ld190cmVlLCBvcHRzLCAxLCB3cml0ZW91dF9lcnJvcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXN0cnVjdCB0cmVlX2Rlc2MgdHJlZXNbMl07CisJCXN0cnVjdCB0cmVlICp0cmVlOworCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgdG9wdHM7CisKKwkJbWVtc2V0KCZ0b3B0cywgMCwgc2l6ZW9mKHRvcHRzKSk7CisJCXRvcHRzLmhlYWRfaWR4ID0gLTE7CisJCXRvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJCXRvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwkJc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigmdG9wdHMsICJjaGVja291dCIpOworCisJCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisKKwkJaWYgKHVubWVyZ2VkX2NhY2hlKCkpIHsKKwkJCWVycm9yKF8oInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IikpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiAyLXdheSBtZXJnZSB0byB0aGUgbmV3IGJyYW5jaCAqLworCQl0b3B0cy5pbml0aWFsX2NoZWNrb3V0ID0gaXNfY2FjaGVfdW5ib3JuKCk7CisJCXRvcHRzLnVwZGF0ZSA9IDE7CisJCXRvcHRzLm1lcmdlID0gMTsKKwkJdG9wdHMucXVpZXQgPSBvcHRzLT5tZXJnZSAmJiBvbGRfYnJhbmNoX2luZm8tPmNvbW1pdDsKKwkJdG9wdHMudmVyYm9zZV91cGRhdGUgPSBvcHRzLT5zaG93X3Byb2dyZXNzOworCQl0b3B0cy5mbiA9IHR3b3dheV9tZXJnZTsKKwkJaWYgKG9wdHMtPm92ZXJ3cml0ZV9pZ25vcmUpIHsKKwkJCXRvcHRzLmRpciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp0b3B0cy5kaXIpKTsKKwkJCXRvcHRzLmRpci0+ZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRDsKKwkJCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKHRvcHRzLmRpcik7CisJCX0KKwkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3Qob2xkX2JyYW5jaF9pbmZvLT5jb21taXQgPworCQkJCQkgICAmb2xkX2JyYW5jaF9pbmZvLT5jb21taXQtPm9iamVjdC5vaWQgOgorCQkJCQkgICB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKKwkJaW5pdF90cmVlX2Rlc2MoJnRyZWVzWzBdLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCQlwYXJzZV90cmVlKG5ld190cmVlKTsKKwkJdHJlZSA9IG5ld190cmVlOworCQlpbml0X3RyZWVfZGVzYygmdHJlZXNbMV0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwkJcmV0ID0gdW5wYWNrX3RyZWVzKDIsIHRyZWVzLCAmdG9wdHMpOworCQljbGVhcl91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZ0b3B0cyk7CisJCWlmIChyZXQgPT0gLTEpIHsKKwkJCS8qCisJCQkgKiBVbnBhY2sgY291bGRuJ3QgZG8gYSB0cml2aWFsIG1lcmdlOyBlaXRoZXIKKwkJCSAqIGdpdmUgdXAgb3IgZG8gYSByZWFsIG1lcmdlLCBkZXBlbmRpbmcgb24KKwkJCSAqIHdoZXRoZXIgdGhlIG1lcmdlIGZsYWcgd2FzIHVzZWQuCisJCQkgKi8KKwkJCXN0cnVjdCB0cmVlICp3b3JrOworCQkJc3RydWN0IHRyZWUgKm9sZF90cmVlOworCQkJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cnVjdCBzdHJidWYgb2xkX2NvbW1pdF9zaG9ydG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCQkJaWYgKCFvcHRzLT5tZXJnZSkKKwkJCQlyZXR1cm4gMTsKKworCQkJLyoKKwkJCSAqIFdpdGhvdXQgb2xkX2JyYW5jaF9pbmZvLT5jb21taXQsIHRoZSBiZWxvdyBpcyB0aGUgc2FtZSBhcworCQkJICogdGhlIHR3by10cmVlIHVucGFjayB3ZSBhbHJlYWR5IHRyaWVkIGFuZCBmYWlsZWQuCisJCQkgKi8KKwkJCWlmICghb2xkX2JyYW5jaF9pbmZvLT5jb21taXQpCisJCQkJcmV0dXJuIDE7CisJCQlvbGRfdHJlZSA9IGdldF9jb21taXRfdHJlZShvbGRfYnJhbmNoX2luZm8tPmNvbW1pdCk7CisKKwkJCWlmIChyZXBvX2luZGV4X2hhc19jaGFuZ2VzKHRoZV9yZXBvc2l0b3J5LCBvbGRfdHJlZSwgJnNiKSkKKwkJCQlkaWUoXygiY2Fubm90IGNvbnRpbnVlIHdpdGggc3RhZ2VkIGNoYW5nZXMgaW4gIgorCQkJCSAgICAgICJ0aGUgZm9sbG93aW5nIGZpbGVzOlxuJXMiKSwgc2IuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkJCS8qIERvIG1vcmUgcmVhbCBtZXJnZSAqLworCisJCQkvKgorCQkJICogV2UgdXBkYXRlIHRoZSBpbmRleCBmdWxseSwgdGhlbiB3cml0ZSB0aGUKKwkJCSAqIHRyZWUgZnJvbSB0aGUgaW5kZXgsIHRoZW4gbWVyZ2UgdGhlIG5ldworCQkJICogYnJhbmNoIHdpdGggdGhlIGN1cnJlbnQgdHJlZSwgd2l0aCB0aGUgb2xkCisJCQkgKiBicmFuY2ggYXMgdGhlIGJhc2UuIFRoZW4gd2UgcmVzZXQgdGhlIGluZGV4CisJCQkgKiAoYnV0IG5vdCB0aGUgd29ya2luZyB0cmVlKSB0byB0aGUgbmV3CisJCQkgKiBicmFuY2gsIGxlYXZpbmcgdGhlIHdvcmtpbmcgdHJlZSBhcyB0aGUKKwkJCSAqIG1lcmdlZCB2ZXJzaW9uLCBidXQgc2tpcHBpbmcgdW5tZXJnZWQKKwkJCSAqIGVudHJpZXMgaW4gdGhlIGluZGV4LgorCQkJICovCisKKwkJCWFkZF9maWxlc190b19jYWNoZShOVUxMLCBOVUxMLCAwKTsKKwkJCS8qCisJCQkgKiBORUVEU1dPUks6IGNhcnJ5aW5nIG92ZXIgbG9jYWwgY2hhbmdlcworCQkJICogd2hlbiBicmFuY2hlcyBoYXZlIGRpZmZlcmVudCBlbmQtb2YtbGluZQorCQkJICogbm9ybWFsaXphdGlvbiAob3IgY2xlYW4rc211ZGdlIHJ1bGVzKSBpcworCQkJICogYSBwYWluOyBwbHVtYiBpbiBhbiBvcHRpb24gdG8gc2V0CisJCQkgKiBvLnJlbm9ybWFsaXplPworCQkJICovCisJCQlpbml0X21lcmdlX29wdGlvbnMoJm8sIHRoZV9yZXBvc2l0b3J5KTsKKwkJCW8udmVyYm9zaXR5ID0gMDsKKwkJCXdvcmsgPSB3cml0ZV9pbl9jb3JlX2luZGV4X2FzX3RyZWUodGhlX3JlcG9zaXRvcnkpOworCisJCQlyZXQgPSByZXNldF90cmVlKG5ld190cmVlLAorCQkJCQkgb3B0cywgMSwKKwkJCQkJIHdyaXRlb3V0X2Vycm9yKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCW8uYW5jZXN0b3IgPSBvbGRfYnJhbmNoX2luZm8tPm5hbWU7CisJCQlpZiAob2xkX2JyYW5jaF9pbmZvLT5uYW1lID09IE5VTEwpIHsKKwkJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJm9sZF9jb21taXRfc2hvcnRuYW1lLAorCQkJCQkJCSAmb2xkX2JyYW5jaF9pbmZvLT5jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCQkJIERFRkFVTFRfQUJCUkVWKTsKKwkJCQlvLmFuY2VzdG9yID0gb2xkX2NvbW1pdF9zaG9ydG5hbWUuYnVmOworCQkJfQorCQkJby5icmFuY2gxID0gbmV3X2JyYW5jaF9pbmZvLT5uYW1lOworCQkJby5icmFuY2gyID0gImxvY2FsIjsKKwkJCXJldCA9IG1lcmdlX3RyZWVzKCZvLAorCQkJCQkgIG5ld190cmVlLAorCQkJCQkgIHdvcmssCisJCQkJCSAgb2xkX3RyZWUpOworCQkJaWYgKHJldCA8IDApCisJCQkJZXhpdCgxMjgpOworCQkJcmV0ID0gcmVzZXRfdHJlZShuZXdfdHJlZSwKKwkJCQkJIG9wdHMsIDAsCisJCQkJCSB3cml0ZW91dF9lcnJvcik7CisJCQlzdHJidWZfcmVsZWFzZSgmby5vYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZvbGRfY29tbWl0X3Nob3J0bmFtZSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAoIWFjdGl2ZV9jYWNoZV90cmVlKQorCQlhY3RpdmVfY2FjaGVfdHJlZSA9IGNhY2hlX3RyZWUoKTsKKworCWlmICghY2FjaGVfdHJlZV9mdWxseV92YWxpZChhY3RpdmVfY2FjaGVfdHJlZSkpCisJCWNhY2hlX3RyZWVfdXBkYXRlKCZ0aGVfaW5kZXgsIFdSSVRFX1RSRUVfU0lMRU5UIHwgV1JJVEVfVFJFRV9SRVBBSVIpOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlpZiAoIW9wdHMtPmRpc2NhcmRfY2hhbmdlcyAmJiAhb3B0cy0+cXVpZXQgJiYgbmV3X2JyYW5jaF9pbmZvLT5jb21taXQpCisJCXNob3dfbG9jYWxfY2hhbmdlcygmbmV3X2JyYW5jaF9pbmZvLT5jb21taXQtPm9iamVjdCwgJm9wdHMtPmRpZmZfb3B0aW9ucyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X3RyYWNraW5nKHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3X2JyYW5jaF9pbmZvKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KG5ld19icmFuY2hfaW5mby0+bmFtZSk7CisKKwlpZiAoIWZvcm1hdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJnNiLCBBSEVBRF9CRUhJTkRfRlVMTCkpCisJCXJldHVybjsKKwlmcHV0cyhzYi5idWYsIHN0ZG91dCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3JlZnNfZm9yX3N3aXRjaChjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCQkgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm9sZF9icmFuY2hfaW5mbywKKwkJCQkgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ld19icmFuY2hfaW5mbykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm9sZF9kZXNjLCAqcmVmbG9nX21zZzsKKwlpZiAob3B0cy0+bmV3X2JyYW5jaCkgeworCQlpZiAob3B0cy0+bmV3X29ycGhhbl9icmFuY2gpIHsKKwkJCWNoYXIgKnJlZm5hbWU7CisKKwkJCXJlZm5hbWUgPSBta3BhdGhkdXAoInJlZnMvaGVhZHMvJXMiLCBvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCk7CisJCQlpZiAob3B0cy0+bmV3X2JyYW5jaF9sb2cgJiYKKwkJCSAgICAhc2hvdWxkX2F1dG9jcmVhdGVfcmVmbG9nKHJlZm5hbWUpKSB7CisJCQkJaW50IHJldDsKKwkJCQlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJCQkJcmV0ID0gc2FmZV9jcmVhdGVfcmVmbG9nKHJlZm5hbWUsIDEsICZlcnIpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIiksCisJCQkJCQlvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCwgZXJyLmJ1Zik7CisJCQkJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQkJCQlmcmVlKHJlZm5hbWUpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQkJfQorCQkJZnJlZShyZWZuYW1lKTsKKwkJfQorCQllbHNlCisJCQljcmVhdGVfYnJhbmNoKHRoZV9yZXBvc2l0b3J5LAorCQkJCSAgICAgIG9wdHMtPm5ld19icmFuY2gsIG5ld19icmFuY2hfaW5mby0+bmFtZSwKKwkJCQkgICAgICBvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlID8gMSA6IDAsCisJCQkJICAgICAgb3B0cy0+bmV3X2JyYW5jaF9mb3JjZSA/IDEgOiAwLAorCQkJCSAgICAgIG9wdHMtPm5ld19icmFuY2hfbG9nLAorCQkJCSAgICAgIG9wdHMtPnF1aWV0LAorCQkJCSAgICAgIG9wdHMtPnRyYWNrKTsKKwkJbmV3X2JyYW5jaF9pbmZvLT5uYW1lID0gb3B0cy0+bmV3X2JyYW5jaDsKKwkJc2V0dXBfYnJhbmNoX3BhdGgobmV3X2JyYW5jaF9pbmZvKTsKKwl9CisKKwlvbGRfZGVzYyA9IG9sZF9icmFuY2hfaW5mby0+bmFtZTsKKwlpZiAoIW9sZF9kZXNjICYmIG9sZF9icmFuY2hfaW5mby0+Y29tbWl0KQorCQlvbGRfZGVzYyA9IG9pZF90b19oZXgoJm9sZF9icmFuY2hfaW5mby0+Y29tbWl0LT5vYmplY3Qub2lkKTsKKworCXJlZmxvZ19tc2cgPSBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIik7CisJaWYgKCFyZWZsb2dfbXNnKQorCQlzdHJidWZfYWRkZigmbXNnLCAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tICVzIHRvICVzIiwKKwkJCW9sZF9kZXNjID8gb2xkX2Rlc2MgOiAiKGludmFsaWQpIiwgbmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKwllbHNlCisJCXN0cmJ1Zl9pbnNlcnRzdHIoJm1zZywgMCwgcmVmbG9nX21zZyk7CisKKwlpZiAoIXN0cmNtcChuZXdfYnJhbmNoX2luZm8tPm5hbWUsICJIRUFEIikgJiYgIW5ld19icmFuY2hfaW5mby0+cGF0aCAmJiAhb3B0cy0+Zm9yY2VfZGV0YWNoKSB7CisJCS8qIE5vdGhpbmcgdG8gZG8uICovCisJfSBlbHNlIGlmIChvcHRzLT5mb3JjZV9kZXRhY2ggfHwgIW5ld19icmFuY2hfaW5mby0+cGF0aCkgewkvKiBObyBsb25nZXIgb24gYW55IGJyYW5jaC4gKi8KKwkJdXBkYXRlX3JlZihtc2cuYnVmLCAiSEVBRCIsICZuZXdfYnJhbmNoX2luZm8tPmNvbW1pdC0+b2JqZWN0Lm9pZCwgTlVMTCwKKwkJCSAgIFJFRl9OT19ERVJFRiwgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJCWlmICghb3B0cy0+cXVpZXQpIHsKKwkJCWlmIChvbGRfYnJhbmNoX2luZm8tPnBhdGggJiYKKwkJCSAgICBhZHZpY2VfZGV0YWNoZWRfaGVhZCAmJiAhb3B0cy0+Zm9yY2VfZGV0YWNoKQorCQkJCWRldGFjaF9hZHZpY2UobmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKwkJCWRlc2NyaWJlX2RldGFjaGVkX2hlYWQoXygiSEVBRCBpcyBub3cgYXQiKSwgbmV3X2JyYW5jaF9pbmZvLT5jb21taXQpOworCQl9CisJfSBlbHNlIGlmIChuZXdfYnJhbmNoX2luZm8tPnBhdGgpIHsJLyogU3dpdGNoIGJyYW5jaGVzLiAqLworCQlpZiAoY3JlYXRlX3N5bXJlZigiSEVBRCIsIG5ld19icmFuY2hfaW5mby0+cGF0aCwgbXNnLmJ1ZikgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byB1cGRhdGUgSEVBRCIpKTsKKwkJaWYgKCFvcHRzLT5xdWlldCkgeworCQkJaWYgKG9sZF9icmFuY2hfaW5mby0+cGF0aCAmJiAhc3RyY21wKG5ld19icmFuY2hfaW5mby0+cGF0aCwgb2xkX2JyYW5jaF9pbmZvLT5wYXRoKSkgeworCQkJCWlmIChvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiUmVzZXQgYnJhbmNoICclcydcbiIpLAorCQkJCQkJbmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKwkJCQllbHNlCisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJBbHJlYWR5IG9uICclcydcbiIpLAorCQkJCQkJbmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKwkJCX0gZWxzZSBpZiAob3B0cy0+bmV3X2JyYW5jaCkgeworCQkJCWlmIChvcHRzLT5icmFuY2hfZXhpc3RzKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iKSwgbmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKwkJCQllbHNlCisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIiksIG5ld19icmFuY2hfaW5mby0+bmFtZSk7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIiksCisJCQkJCW5ld19icmFuY2hfaW5mby0+bmFtZSk7CisJCQl9CisJCX0KKwkJaWYgKG9sZF9icmFuY2hfaW5mby0+cGF0aCAmJiBvbGRfYnJhbmNoX2luZm8tPm5hbWUpIHsKKwkJCWlmICghcmVmX2V4aXN0cyhvbGRfYnJhbmNoX2luZm8tPnBhdGgpICYmIHJlZmxvZ19leGlzdHMob2xkX2JyYW5jaF9pbmZvLT5wYXRoKSkKKwkJCQlkZWxldGVfcmVmbG9nKG9sZF9icmFuY2hfaW5mby0+cGF0aCk7CisJCX0KKwl9CisJcmVtb3ZlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSwgIW9wdHMtPnF1aWV0KTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwlpZiAoIW9wdHMtPnF1aWV0ICYmCisJICAgIChuZXdfYnJhbmNoX2luZm8tPnBhdGggfHwgKCFvcHRzLT5mb3JjZV9kZXRhY2ggJiYgIXN0cmNtcChuZXdfYnJhbmNoX2luZm8tPm5hbWUsICJIRUFEIikpKSkKKwkJcmVwb3J0X3RyYWNraW5nKG5ld19icmFuY2hfaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BlbmRpbmdfdW5pbnRlcmVzdGluZ19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlhZGRfcGVuZGluZ19vaWQoY2JfZGF0YSwgcmVmbmFtZSwgb2lkLCBVTklOVEVSRVNUSU5HKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVzY3JpYmVfb25lX29ycGhhbihzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cmJ1Zl9hZGRzdHIoc2IsICIgICIpOworCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihzYiwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpOworCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwlpZiAoIXBhcnNlX2NvbW1pdChjb21taXQpKQorCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsIHNiKTsKKwlzdHJidWZfYWRkY2goc2IsICdcbicpOworfQorCisjZGVmaW5lIE9SUEhBTl9DVVRPRkYgNAorc3RhdGljIHZvaWQgc3VnZ2VzdF9yZWF0dGFjaChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjLCAqbGFzdCA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBsb3N0ID0gMDsKKwl3aGlsZSAoKGMgPSBnZXRfcmV2aXNpb24ocmV2cykpICE9IE5VTEwpIHsKKwkJaWYgKGxvc3QgPCBPUlBIQU5fQ1VUT0ZGKQorCQkJZGVzY3JpYmVfb25lX29ycGhhbigmc2IsIGMpOworCQlsYXN0ID0gYzsKKwkJbG9zdCsrOworCX0KKwlpZiAoT1JQSEFOX0NVVE9GRiA8IGxvc3QpIHsKKwkJaW50IG1vcmUgPSBsb3N0IC0gT1JQSEFOX0NVVE9GRjsKKwkJaWYgKG1vcmUgPT0gMSkKKwkJCWRlc2NyaWJlX29uZV9vcnBoYW4oJnNiLCBsYXN0KTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoJnNiLCBfKCIgLi4uIGFuZCAlZCBtb3JlLlxuIiksIG1vcmUpOworCX0KKworCWZwcmludGYoc3RkZXJyLAorCQlRXygKKwkJLyogVGhlIHNpbmd1bGFyIHZlcnNpb24gKi8KKwkJIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCAiCisJCSJub3QgY29ubmVjdGVkIHRvXG4iCisJCSJhbnkgb2YgeW91ciBicmFuY2hlczpcblxuIgorCQkiJXNcbiIsCisJCS8qIFRoZSBwbHVyYWwgdmVyc2lvbiAqLworCQkiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCAiCisJCSJub3QgY29ubmVjdGVkIHRvXG4iCisJCSJhbnkgb2YgeW91ciBicmFuY2hlczpcblxuIgorCQkiJXNcbiIsCisJCS8qIEdpdmUgbmdldHRleHQoKSB0aGUgY291bnQgKi8KKwkJbG9zdCksCisJCWxvc3QsCisJCXNiLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCWlmIChhZHZpY2VfZGV0YWNoZWRfaGVhZCkKKwkJZnByaW50ZihzdGRlcnIsCisJCQlRXygKKwkJCS8qIFRoZSBzaW5ndWxhciB2ZXJzaW9uICovCisJCQkiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsICIKKwkJCSJ0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxudG8gZG8gc28gd2l0aDpcblxuIgorCQkJIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG5cbiIsCisJCQkvKiBUaGUgcGx1cmFsIHZlcnNpb24gKi8KKwkJCSJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCAiCisJCQkidGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbnRvIGRvIHNvIHdpdGg6XG5cbiIKKwkJCSIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuXG4iLAorCQkJLyogR2l2ZSBuZ2V0dGV4dCgpIHRoZSBjb3VudCAqLworCQkJbG9zdCksCisJCQlmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpKTsKK30KKworLyoKKyAqIFdlIGFyZSBhYm91dCB0byBsZWF2ZSBjb21taXQgdGhhdCB3YXMgYXQgdGhlIHRpcCBvZiBhIGRldGFjaGVkCisgKiBIRUFELiAgSWYgaXQgaXMgbm90IHJlYWNoYWJsZSBmcm9tIGFueSByZWYsIHRoaXMgaXMgdGhlIGxhc3QgY2hhbmNlCisgKiBmb3IgdGhlIHVzZXIgdG8gZG8gc28gd2l0aG91dCByZXNvcnRpbmcgdG8gcmVmbG9nLgorICovCitzdGF0aWMgdm9pZCBvcnBoYW5lZF9jb21taXRfd2FybmluZyhzdHJ1Y3QgY29tbWl0ICpvbGRfY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICpuZXdfY29tbWl0KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9ICZvbGRfY29tbWl0LT5vYmplY3Q7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgTlVMTCk7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXZzLCBOVUxMKTsKKworCW9iamVjdC0+ZmxhZ3MgJj0gflVOSU5URVJFU1RJTkc7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCBvYmplY3QsIG9pZF90b19oZXgoJm9iamVjdC0+b2lkKSk7CisKKwlmb3JfZWFjaF9yZWYoYWRkX3BlbmRpbmdfdW5pbnRlcmVzdGluZ19yZWYsICZyZXZzKTsKKwlpZiAobmV3X2NvbW1pdCkKKwkJYWRkX3BlbmRpbmdfb2lkKCZyZXZzLCAiSEVBRCIsCisJCQkJJm5ld19jb21taXQtPm9iamVjdC5vaWQsCisJCQkJVU5JTlRFUkVTVElORyk7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKF8oImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiKSk7CisJaWYgKCEob2xkX2NvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCXN1Z2dlc3RfcmVhdHRhY2gob2xkX2NvbW1pdCwgJnJldnMpOworCWVsc2UKKwkJZGVzY3JpYmVfZGV0YWNoZWRfaGVhZChfKCJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIpLCBvbGRfY29tbWl0KTsKKworCS8qIENsZWFuIHVwIG9iamVjdHMgdXNlZCwgYXMgdGhleSB3aWxsIGJlIHJldXNlZC4gKi8KKwljbGVhcl9jb21taXRfbWFya3NfYWxsKEFMTF9SRVZfRkxBR1MpOworfQorCitzdGF0aWMgaW50IHN3aXRjaF9icmFuY2hlcyhjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3X2JyYW5jaF9pbmZvKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBicmFuY2hfaW5mbyBvbGRfYnJhbmNoX2luZm87CisJdm9pZCAqcGF0aF90b19mcmVlOworCXN0cnVjdCBvYmplY3RfaWQgcmV2OworCWludCBmbGFnLCB3cml0ZW91dF9lcnJvciA9IDA7CisJaW50IGRvX21lcmdlID0gMTsKKworCXRyYWNlMl9jbWRfbW9kZSgiYnJhbmNoIik7CisKKwltZW1zZXQoJm9sZF9icmFuY2hfaW5mbywgMCwgc2l6ZW9mKG9sZF9icmFuY2hfaW5mbykpOworCW9sZF9icmFuY2hfaW5mby5wYXRoID0gcGF0aF90b19mcmVlID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCAmcmV2LCAmZmxhZyk7CisJaWYgKG9sZF9icmFuY2hfaW5mby5wYXRoKQorCQlvbGRfYnJhbmNoX2luZm8uY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCAmcmV2LCAxKTsKKwlpZiAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSkKKwkJb2xkX2JyYW5jaF9pbmZvLnBhdGggPSBOVUxMOworCisJaWYgKG9sZF9icmFuY2hfaW5mby5wYXRoKQorCQlza2lwX3ByZWZpeChvbGRfYnJhbmNoX2luZm8ucGF0aCwgInJlZnMvaGVhZHMvIiwgJm9sZF9icmFuY2hfaW5mby5uYW1lKTsKKworCWlmIChvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCAmJiBvcHRzLT5vcnBoYW5fZnJvbV9lbXB0eV90cmVlKSB7CisJCWlmIChuZXdfYnJhbmNoX2luZm8tPm5hbWUpCisJCQlCVUcoIidzd2l0Y2ggLS1vcnBoYW4nIHNob3VsZCBuZXZlciBhY2NlcHQgYSBjb21taXQgYXMgc3RhcnRpbmcgcG9pbnQiKTsKKwkJbmV3X2JyYW5jaF9pbmZvLT5jb21taXQgPSBOVUxMOworCQluZXdfYnJhbmNoX2luZm8tPm5hbWUgPSAiKGVtcHR5KSI7CisJCWRvX21lcmdlID0gMTsKKwl9CisKKwlpZiAoIW5ld19icmFuY2hfaW5mby0+bmFtZSkgeworCQluZXdfYnJhbmNoX2luZm8tPm5hbWUgPSAiSEVBRCI7CisJCW5ld19icmFuY2hfaW5mby0+Y29tbWl0ID0gb2xkX2JyYW5jaF9pbmZvLmNvbW1pdDsKKwkJaWYgKCFuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCkKKwkJCWRpZShfKCJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIikpOworCQlwYXJzZV9jb21taXRfb3JfZGllKG5ld19icmFuY2hfaW5mby0+Y29tbWl0KTsKKworCQlpZiAob3B0cy0+b25seV9tZXJnZV9vbl9zd2l0Y2hpbmdfYnJhbmNoZXMpCisJCQlkb19tZXJnZSA9IDA7CisJfQorCisJaWYgKGRvX21lcmdlKSB7CisJCXJldCA9IG1lcmdlX3dvcmtpbmdfdHJlZShvcHRzLCAmb2xkX2JyYW5jaF9pbmZvLCBuZXdfYnJhbmNoX2luZm8sICZ3cml0ZW91dF9lcnJvcik7CisJCWlmIChyZXQpIHsKKwkJCWZyZWUocGF0aF90b19mcmVlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAoIW9wdHMtPnF1aWV0ICYmICFvbGRfYnJhbmNoX2luZm8ucGF0aCAmJiBvbGRfYnJhbmNoX2luZm8uY29tbWl0ICYmIG5ld19icmFuY2hfaW5mby0+Y29tbWl0ICE9IG9sZF9icmFuY2hfaW5mby5jb21taXQpCisJCW9ycGhhbmVkX2NvbW1pdF93YXJuaW5nKG9sZF9icmFuY2hfaW5mby5jb21taXQsIG5ld19icmFuY2hfaW5mby0+Y29tbWl0KTsKKworCXVwZGF0ZV9yZWZzX2Zvcl9zd2l0Y2gob3B0cywgJm9sZF9icmFuY2hfaW5mbywgbmV3X2JyYW5jaF9pbmZvKTsKKworCXJldCA9IHBvc3RfY2hlY2tvdXRfaG9vayhvbGRfYnJhbmNoX2luZm8uY29tbWl0LCBuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCwgMSk7CisJZnJlZShwYXRoX3RvX2ZyZWUpOworCXJldHVybiByZXQgfHwgd3JpdGVvdXRfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2NoZWNrb3V0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmlnbm9yZXN1Ym1vZHVsZXMiKSkgeworCQlzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cyA9IGNiOworCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKCZvcHRzLT5kaWZmX29wdGlvbnMsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0YXJ0c193aXRoKHZhciwgInN1Ym1vZHVsZS4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X3N1Ym1vZHVsZV9jb25maWcodmFyLCB2YWx1ZSwgTlVMTCk7CisKKwlyZXR1cm4gZ2l0X3htZXJnZV9jb25maWcodmFyLCB2YWx1ZSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX25ld19icmFuY2hfaW5mb19hbmRfc291cmNlX3RyZWUoCisJc3RydWN0IGJyYW5jaF9pbmZvICpuZXdfYnJhbmNoX2luZm8sCisJc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsCisJc3RydWN0IG9iamVjdF9pZCAqcmV2LAorCWNvbnN0IGNoYXIgKmFyZykKK3sKKwlzdHJ1Y3QgdHJlZSAqKnNvdXJjZV90cmVlID0gJm9wdHMtPnNvdXJjZV90cmVlOworCXN0cnVjdCBvYmplY3RfaWQgYnJhbmNoX3JldjsKKworCW5ld19icmFuY2hfaW5mby0+bmFtZSA9IGFyZzsKKwlzZXR1cF9icmFuY2hfcGF0aChuZXdfYnJhbmNoX2luZm8pOworCisJaWYgKCFjaGVja19yZWZuYW1lX2Zvcm1hdChuZXdfYnJhbmNoX2luZm8tPnBhdGgsIDApICYmCisJICAgICFyZWFkX3JlZihuZXdfYnJhbmNoX2luZm8tPnBhdGgsICZicmFuY2hfcmV2KSkKKwkJb2lkY3B5KHJldiwgJmJyYW5jaF9yZXYpOworCWVsc2UKKwkJbmV3X2JyYW5jaF9pbmZvLT5wYXRoID0gTlVMTDsgLyogbm90IGFuIGV4aXN0aW5nIGJyYW5jaCAqLworCisJbmV3X2JyYW5jaF9pbmZvLT5jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksIHJldiwgMSk7CisJaWYgKCFuZXdfYnJhbmNoX2luZm8tPmNvbW1pdCkgeworCQkvKiBub3QgYSBjb21taXQgKi8KKwkJKnNvdXJjZV90cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChyZXYpOworCX0gZWxzZSB7CisJCXBhcnNlX2NvbW1pdF9vcl9kaWUobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpOworCQkqc291cmNlX3RyZWUgPSBnZXRfY29tbWl0X3RyZWUobmV3X2JyYW5jaF9pbmZvLT5jb21taXQpOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX3JlbW90ZV9icmFuY2goY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXYsCisJCQkJICAgICAgIGludCBjb3VsZF9iZV9jaGVja291dF9wYXRocykKK3sKKwlpbnQgbnVtX21hdGNoZXMgPSAwOworCWNvbnN0IGNoYXIgKnJlbW90ZSA9IHVuaXF1ZV90cmFja2luZ19uYW1lKGFyZywgcmV2LCAmbnVtX21hdGNoZXMpOworCisJaWYgKHJlbW90ZSAmJiBjb3VsZF9iZV9jaGVja291dF9wYXRocykgeworCQlkaWUoXygiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisJCQkiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIiksCisJCSAgICBhcmcpOworCX0KKworCWlmICghcmVtb3RlICYmIG51bV9tYXRjaGVzID4gMSkgeworCSAgICBpZiAoYWR2aWNlX2NoZWNrb3V0X2FtYmlndW91c19yZW1vdGVfYnJhbmNoX25hbWUpIHsKKwkJICAgIGFkdmlzZShfKCJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKwkJCSAgICAgInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKwkJCSAgICAgIlxuIgorCQkJICAgICAiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKwkJCSAgICAgIlxuIgorCQkJICAgICAiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKwkJCSAgICAgIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorCQkJICAgICAiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIikpOworCSAgICB9CisKKwkgICAgZGllKF8oIiclcycgbWF0Y2hlZCBtdWx0aXBsZSAoJWQpIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyIpLAorCQlhcmcsIG51bV9tYXRjaGVzKTsKKwl9CisKKwlyZXR1cm4gcmVtb3RlOworfQorCitzdGF0aWMgaW50IHBhcnNlX2JyYW5jaG5hbWVfYXJnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCQlpbnQgZHdpbV9uZXdfbG9jYWxfYnJhbmNoX29rLAorCQkJCXN0cnVjdCBicmFuY2hfaW5mbyAqbmV3X2JyYW5jaF9pbmZvLAorCQkJCXN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJCXN0cnVjdCBvYmplY3RfaWQgKnJldikKK3sKKwljb25zdCBjaGFyICoqbmV3X2JyYW5jaCA9ICZvcHRzLT5uZXdfYnJhbmNoOworCWludCBhcmdjb3VudCA9IDA7CisJY29uc3QgY2hhciAqYXJnOworCWludCBkYXNoX2Rhc2hfcG9zOworCWludCBoYXNfZGFzaF9kYXNoID0gMDsKKwlpbnQgaTsKKworCS8qCisJICogY2FzZSAxOiBnaXQgY2hlY2tvdXQgPHJlZj4gLS0gWzxwYXRocz5dCisJICoKKwkgKiAgIDxyZWY+IG11c3QgYmUgYSB2YWxpZCB0cmVlLCBldmVyeXRoaW5nIGFmdGVyIHRoZSAnLS0nIG11c3QgYmUKKwkgKiAgIGEgcGF0aC4KKwkgKgorCSAqIGNhc2UgMjogZ2l0IGNoZWNrb3V0IC0tIFs8cGF0aHM+XQorCSAqCisJICogICBldmVyeXRoaW5nIGFmdGVyIHRoZSAnLS0nIG11c3QgYmUgcGF0aHMuCisJICoKKwkgKiBjYXNlIDM6IGdpdCBjaGVja291dCA8c29tZXRoaW5nPiBbLS1dCisJICoKKwkgKiAgIChhKSBJZiA8c29tZXRoaW5nPiBpcyBhIGNvbW1pdCwgdGhhdCBpcyB0bworCSAqICAgICAgIHN3aXRjaCB0byB0aGUgYnJhbmNoIG9yIGRldGFjaCBIRUFEIGF0IGl0LiAgQXMgYSBzcGVjaWFsIGNhc2UsCisJICogICAgICAgaWYgPHNvbWV0aGluZz4gaXMgQS4uLkIgKG1pc3NpbmcgQSBvciBCIG1lYW5zIEhFQUQgYnV0IHlvdSBjYW4KKwkgKiAgICAgICBvbWl0IGF0IG1vc3Qgb25lIHNpZGUpLCBhbmQgaWYgdGhlcmUgaXMgYSB1bmlxdWUgbWVyZ2UgYmFzZQorCSAqICAgICAgIGJldHdlZW4gQSBhbmQgQiwgQS4uLkIgbmFtZXMgdGhhdCBtZXJnZSBiYXNlLgorCSAqCisJICogICAoYikgSWYgPHNvbWV0aGluZz4gaXMgX25vdF8gYSBjb21taXQsIGVpdGhlciAiLS0iIGlzIHByZXNlbnQKKwkgKiAgICAgICBvciA8c29tZXRoaW5nPiBpcyBub3QgYSBwYXRoLCBubyAtdCBvciAtYiB3YXMgZ2l2ZW4sIGFuZAorCSAqICAgICAgIGFuZCB0aGVyZSBpcyBhIHRyYWNraW5nIGJyYW5jaCB3aG9zZSBuYW1lIGlzIDxzb21ldGhpbmc+CisJICogICAgICAgaW4gb25lIGFuZCBvbmx5IG9uZSByZW1vdGUgKG9yIGlmIHRoZSBicmFuY2ggZXhpc3RzIG9uIHRoZQorCSAqICAgICAgIHJlbW90ZSBuYW1lZCBpbiBjaGVja291dC5kZWZhdWx0UmVtb3RlKSwgdGhlbiB0aGlzIGlzIGEKKwkgKiAgICAgICBzaG9ydC1oYW5kIHRvIGZvcmsgbG9jYWwgPHNvbWV0aGluZz4gZnJvbSB0aGF0CisJICogICAgICAgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4KKwkgKgorCSAqICAgKGMpIE90aGVyd2lzZSwgaWYgIi0tIiBpcyBwcmVzZW50LCB0cmVhdCBpdCBsaWtlIGNhc2UgKDEpLgorCSAqCisJICogICAoZCkgT3RoZXJ3aXNlIDoKKwkgKiAgICAgICAtIGlmIGl0J3MgYSByZWZlcmVuY2UsIHRyZWF0IGl0IGxpa2UgY2FzZSAoMSkKKwkgKiAgICAgICAtIGVsc2UgaWYgaXQncyBhIHBhdGgsIHRyZWF0IGl0IGxpa2UgY2FzZSAoMikKKwkgKiAgICAgICAtIGVsc2U6IGZhaWwuCisJICoKKwkgKiBjYXNlIDQ6IGdpdCBjaGVja291dCA8c29tZXRoaW5nPiA8cGF0aHM+CisJICoKKwkgKiAgIFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IG5vdCBiZSBhbWJpZ3VvdXMuCisJICogICAtIElmIGl0J3MgKm9ubHkqIGEgcmVmZXJlbmNlLCB0cmVhdCBpdCBsaWtlIGNhc2UgKDEpLgorCSAqICAgLSBJZiBpdCdzIG9ubHkgYSBwYXRoLCB0cmVhdCBpdCBsaWtlIGNhc2UgKDIpLgorCSAqICAgLSBlbHNlOiBmYWlsLgorCSAqCisJICovCisJaWYgKCFhcmdjKQorCQlyZXR1cm4gMDsKKworCWlmICghb3B0cy0+YWNjZXB0X3BhdGhzcGVjKSB7CisJCWlmIChhcmdjID4gMSkKKwkJCWRpZShfKCJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiKSk7CisJCWhhc19kYXNoX2Rhc2ggPSAxOyAvKiBoZWxwcyBkaXNhbWJpZ3VhdGUgKi8KKwl9CisKKwlhcmcgPSBhcmd2WzBdOworCWRhc2hfZGFzaF9wb3MgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmIChvcHRzLT5hY2NlcHRfcGF0aHNwZWMgJiYgIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgeworCQkJZGFzaF9kYXNoX3BvcyA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZGFzaF9kYXNoX3BvcyA9PSAwKQorCQlyZXR1cm4gMTsgLyogY2FzZSAoMikgKi8KKwllbHNlIGlmIChkYXNoX2Rhc2hfcG9zID09IDEpCisJCWhhc19kYXNoX2Rhc2ggPSAxOyAvKiBjYXNlICgzKSBvciAoMSkgKi8KKwllbHNlIGlmIChkYXNoX2Rhc2hfcG9zID49IDIpCisJCWRpZShfKCJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIpLCBkYXNoX2Rhc2hfcG9zKTsKKwlvcHRzLT5jb3VudF9jaGVja291dF9wYXRocyA9ICFvcHRzLT5xdWlldCAmJiAhaGFzX2Rhc2hfZGFzaDsKKworCWlmICghc3RyY21wKGFyZywgIi0iKSkKKwkJYXJnID0gIkB7LTF9IjsKKworCWlmIChnZXRfb2lkX21iKGFyZywgcmV2KSkgeworCQkvKgorCQkgKiBFaXRoZXIgY2FzZSAoMykgb3IgKDQpLCB3aXRoIDxzb21ldGhpbmc+IG5vdCBiZWluZworCQkgKiBhIGNvbW1pdCwgb3IgYW4gYXR0ZW1wdCB0byB1c2UgY2FzZSAoMSkgd2l0aCBhbgorCQkgKiBpbnZhbGlkIHJlZi4KKwkJICoKKwkJICogSXQncyBsaWtlbHkgYW4gZXJyb3IsIGJ1dCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmCisJCSAqIHdlIHNob3VsZCBhdXRvLWNyZWF0ZSB0aGUgYnJhbmNoLCBjYXNlICgzKS4oYikuCisJCSAqLworCQlpbnQgcmVjb3Zlcl93aXRoX2R3aW0gPSBkd2ltX25ld19sb2NhbF9icmFuY2hfb2s7CisKKwkJaW50IGNvdWxkX2JlX2NoZWNrb3V0X3BhdGhzID0gIWhhc19kYXNoX2Rhc2ggJiYKKwkJCWNoZWNrX2ZpbGVuYW1lKG9wdHMtPnByZWZpeCwgYXJnKTsKKworCQlpZiAoIWhhc19kYXNoX2Rhc2ggJiYgIW5vX3dpbGRjYXJkKGFyZykpCisJCQlyZWNvdmVyX3dpdGhfZHdpbSA9IDA7CisKKwkJLyoKKwkJICogQWNjZXB0ICJnaXQgY2hlY2tvdXQgZm9vIiwgImdpdCBjaGVja291dCBmb28gLS0iCisJCSAqIGFuZCAiZ2l0IHN3aXRjaCBmb28iIGFzIGNhbmRpZGF0ZXMgZm9yIGR3aW0uCisJCSAqLworCQlpZiAoIShhcmdjID09IDEgJiYgIWhhc19kYXNoX2Rhc2gpICYmCisJCSAgICAhKGFyZ2MgPT0gMiAmJiBoYXNfZGFzaF9kYXNoKSAmJgorCQkgICAgb3B0cy0+YWNjZXB0X3BhdGhzcGVjKQorCQkJcmVjb3Zlcl93aXRoX2R3aW0gPSAwOworCisJCWlmIChyZWNvdmVyX3dpdGhfZHdpbSkgeworCQkJY29uc3QgY2hhciAqcmVtb3RlID0gcGFyc2VfcmVtb3RlX2JyYW5jaChhcmcsIHJldiwKKwkJCQkJCQkJIGNvdWxkX2JlX2NoZWNrb3V0X3BhdGhzKTsKKwkJCWlmIChyZW1vdGUpIHsKKwkJCQkqbmV3X2JyYW5jaCA9IGFyZzsKKwkJCQlhcmcgPSByZW1vdGU7CisJCQkJLyogRFdJTW1lZCB0byBjcmVhdGUgbG9jYWwgYnJhbmNoLCBjYXNlICgzKS4oYikgKi8KKwkJCX0gZWxzZSB7CisJCQkJcmVjb3Zlcl93aXRoX2R3aW0gPSAwOworCQkJfQorCQl9CisKKwkJaWYgKCFyZWNvdmVyX3dpdGhfZHdpbSkgeworCQkJaWYgKGhhc19kYXNoX2Rhc2gpCisJCQkJZGllKF8oImludmFsaWQgcmVmZXJlbmNlOiAlcyIpLCBhcmcpOworCQkJcmV0dXJuIGFyZ2NvdW50OworCQl9CisJfQorCisJLyogd2UgY2FuJ3QgZW5kIHVwIGJlaW5nIGluICgyKSBhbnltb3JlLCBlYXQgdGhlIGFyZ3VtZW50ICovCisJYXJnY291bnQrKzsKKwlhcmd2Kys7CisJYXJnYy0tOworCisJc2V0dXBfbmV3X2JyYW5jaF9pbmZvX2FuZF9zb3VyY2VfdHJlZShuZXdfYnJhbmNoX2luZm8sIG9wdHMsIHJldiwgYXJnKTsKKworCWlmICghb3B0cy0+c291cmNlX3RyZWUpICAgICAgICAgICAgICAgICAgIC8qIGNhc2UgKDEpOiB3YW50IGEgdHJlZSAqLworCQlkaWUoXygicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIiksIGFyZyk7CisKKwlpZiAoIWhhc19kYXNoX2Rhc2gpIHsJLyogY2FzZSAoMykuKGQpIC0+ICgxKSAqLworCQkvKgorCQkgKiBEbyBub3QgY29tcGxhaW4gdGhlIG1vc3QgY29tbW9uIGNhc2UKKwkJICoJZ2l0IGNoZWNrb3V0IGJyYW5jaAorCQkgKiBldmVuIGlmIHRoZXJlIGhhcHBlbiB0byBiZSBhIGZpbGUgY2FsbGVkICdicmFuY2gnOworCQkgKiBpdCB3b3VsZCBiZSBleHRyZW1lbHkgYW5ub3lpbmcuCisJCSAqLworCQlpZiAoYXJnYykKKwkJCXZlcmlmeV9ub25fZmlsZW5hbWUob3B0cy0+cHJlZml4LCBhcmcpOworCX0gZWxzZSBpZiAob3B0cy0+YWNjZXB0X3BhdGhzcGVjKSB7CisJCWFyZ2NvdW50Kys7CisJCWFyZ3YrKzsKKwkJYXJnYy0tOworCX0KKworCXJldHVybiBhcmdjb3VudDsKK30KKworc3RhdGljIGludCBzd2l0Y2hfdW5ib3JuX3RvX25ld19icmFuY2goY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaF9yZWYgPSBTVFJCVUZfSU5JVDsKKworCXRyYWNlMl9jbWRfbW9kZSgidW5ib3JuIik7CisKKwlpZiAoIW9wdHMtPm5ld19icmFuY2gpCisJCWRpZShfKCJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIikpOworCXN0cmJ1Zl9hZGRmKCZicmFuY2hfcmVmLCAicmVmcy9oZWFkcy8lcyIsIG9wdHMtPm5ld19icmFuY2gpOworCXN0YXR1cyA9IGNyZWF0ZV9zeW1yZWYoIkhFQUQiLCBicmFuY2hfcmVmLmJ1ZiwgImNoZWNrb3V0IC1iIik7CisJc3RyYnVmX3JlbGVhc2UoJmJyYW5jaF9yZWYpOworCWlmICghb3B0cy0+cXVpZXQpCisJCWZwcmludGYoc3RkZXJyLCBfKCJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIiksCisJCQlvcHRzLT5uZXdfYnJhbmNoKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBkaWVfZXhwZWN0aW5nX2FfYnJhbmNoKGNvbnN0IHN0cnVjdCBicmFuY2hfaW5mbyAqYnJhbmNoX2luZm8pCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciAqdG9fZnJlZTsKKworCWlmIChkd2ltX3JlZihicmFuY2hfaW5mby0+bmFtZSwgc3RybGVuKGJyYW5jaF9pbmZvLT5uYW1lKSwgJm9pZCwgJnRvX2ZyZWUpID09IDEpIHsKKwkJY29uc3QgY2hhciAqcmVmID0gdG9fZnJlZTsKKworCQlpZiAoc2tpcF9wcmVmaXgocmVmLCAicmVmcy90YWdzLyIsICZyZWYpKQorCQkJZGllKF8oImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgdGFnICclcyciKSwgcmVmKTsKKwkJaWYgKHNraXBfcHJlZml4KHJlZiwgInJlZnMvcmVtb3Rlcy8iLCAmcmVmKSkKKwkJCWRpZShfKCJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHJlbW90ZSBicmFuY2ggJyVzJyIpLCByZWYpOworCQlkaWUoXygiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCAnJXMnIiksIHJlZik7CisJfQorCWlmIChicmFuY2hfaW5mby0+Y29tbWl0KQorCQlkaWUoXygiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIpLCBicmFuY2hfaW5mby0+bmFtZSk7CisJLyoKKwkgKiBUaGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGhhcHBlbiBiZWNhdXNlIHdlIGFscmVhZHkgZGllKCkgb24KKwkgKiBub24tY29tbWl0LCBidXQganVzdCBpbiBjYXNlLgorCSAqLworCWRpZShfKCJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciKSwgYnJhbmNoX2luZm8tPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBkaWVfaWZfc29tZV9vcGVyYXRpb25faW5fcHJvZ3Jlc3Modm9pZCkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlIHN0YXRlOworCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisJd3Rfc3RhdHVzX2dldF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSwgJnN0YXRlLCAwKTsKKworCWlmIChzdGF0ZS5tZXJnZV9pbl9wcm9ncmVzcykKKwkJZGllKF8oImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKwkJICAgICAgIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiICIKKwkJICAgICAgIm9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIpKTsKKwlpZiAoc3RhdGUuYW1faW5fcHJvZ3Jlc3MpCisJCWRpZShfKCJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKwkJICAgICAgIkNvbnNpZGVyIFwiZ2l0IGFtIC0tcXVpdFwiICIKKwkJICAgICAgIm9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIpKTsKKwlpZiAoc3RhdGUucmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzIHx8IHN0YXRlLnJlYmFzZV9pbl9wcm9ncmVzcykKKwkJZGllKF8oImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJlYmFzaW5nXG4iCisJCSAgICAgICJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgIgorCQkgICAgICAib3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIikpOworCWlmIChzdGF0ZS5jaGVycnlfcGlja19pbl9wcm9ncmVzcykKKwkJZGllKF8oImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisJCSAgICAgICJDb25zaWRlciBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiAiCisJCSAgICAgICJvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iKSk7CisJaWYgKHN0YXRlLnJldmVydF9pbl9wcm9ncmVzcykKKwkJZGllKF8oImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorCQkgICAgICAiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiICIKKwkJICAgICAgIm9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIpKTsKKwlpZiAoc3RhdGUuYmlzZWN0X2luX3Byb2dyZXNzKQorCQl3YXJuaW5nKF8oInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciKSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfYnJhbmNoKHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJICAgc3RydWN0IGJyYW5jaF9pbmZvICpuZXdfYnJhbmNoX2luZm8pCit7CisJaWYgKG9wdHMtPnBhdGhzcGVjLm5yKQorCQlkaWUoXygicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiKSk7CisKKwlpZiAob3B0cy0+cGF0Y2hfbW9kZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiKSwKKwkJICAgICItLXBhdGNoIik7CisKKwlpZiAob3B0cy0+b3ZlcmxheV9tb2RlICE9IC0xKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIpLAorCQkgICAgIi0tW25vXS1vdmVybGF5Iik7CisKKwlpZiAob3B0cy0+d3JpdGVvdXRfc3RhZ2UpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIiksCisJCSAgICAiLS1vdXJzLy0tdGhlaXJzIik7CisKKwlpZiAob3B0cy0+Zm9yY2UgJiYgb3B0cy0+bWVyZ2UpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLWYiLCAiLW0iKTsKKworCWlmIChvcHRzLT5kaXNjYXJkX2NoYW5nZXMgJiYgb3B0cy0+bWVyZ2UpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLS1kaXNjYXJkLWNoYW5nZXMiLCAiLS1tZXJnZSIpOworCisJaWYgKG9wdHMtPmZvcmNlX2RldGFjaCAmJiBvcHRzLT5uZXdfYnJhbmNoKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciKSwKKwkJICAgICItLWRldGFjaCIsICItYi8tQi8tLW9ycGhhbiIpOworCisJaWYgKG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoKSB7CisJCWlmIChvcHRzLT50cmFjayAhPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQpCisJCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciKSwgIi0tb3JwaGFuIiwgIi10Iik7CisJCWlmIChvcHRzLT5vcnBoYW5fZnJvbV9lbXB0eV90cmVlICYmIG5ld19icmFuY2hfaW5mby0+bmFtZSkKKwkJCWRpZShfKCInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iKSwgIi0tb3JwaGFuIik7CisJfSBlbHNlIGlmIChvcHRzLT5mb3JjZV9kZXRhY2gpIHsKKwkJaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKKwkJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLS1kZXRhY2giLCAiLXQiKTsKKwl9IGVsc2UgaWYgKG9wdHMtPnRyYWNrID09IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKKwkJb3B0cy0+dHJhY2sgPSBnaXRfYnJhbmNoX3RyYWNrOworCisJaWYgKG5ld19icmFuY2hfaW5mby0+bmFtZSAmJiAhbmV3X2JyYW5jaF9pbmZvLT5jb21taXQpCisJCWRpZShfKCJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIpLAorCQkgICAgbmV3X2JyYW5jaF9pbmZvLT5uYW1lKTsKKworCWlmICghb3B0cy0+c3dpdGNoX2JyYW5jaF9kb2luZ19ub3RoaW5nX2lzX29rICYmCisJICAgICFuZXdfYnJhbmNoX2luZm8tPm5hbWUgJiYKKwkgICAgIW9wdHMtPm5ld19icmFuY2ggJiYKKwkgICAgIW9wdHMtPmZvcmNlX2RldGFjaCkKKwkJZGllKF8oIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIpKTsKKworCWlmICghb3B0cy0+aW1wbGljaXRfZGV0YWNoICYmCisJICAgICFvcHRzLT5mb3JjZV9kZXRhY2ggJiYKKwkgICAgIW9wdHMtPm5ld19icmFuY2ggJiYKKwkgICAgIW9wdHMtPm5ld19icmFuY2hfZm9yY2UgJiYKKwkgICAgbmV3X2JyYW5jaF9pbmZvLT5uYW1lICYmCisJICAgICFuZXdfYnJhbmNoX2luZm8tPnBhdGgpCisJCWRpZV9leHBlY3RpbmdfYV9icmFuY2gobmV3X2JyYW5jaF9pbmZvKTsKKworCWlmICghb3B0cy0+Y2FuX3N3aXRjaF93aGVuX2luX3Byb2dyZXNzKQorCQlkaWVfaWZfc29tZV9vcGVyYXRpb25faW5fcHJvZ3Jlc3MoKTsKKworCWlmIChuZXdfYnJhbmNoX2luZm8tPnBhdGggJiYgIW9wdHMtPmZvcmNlX2RldGFjaCAmJiAhb3B0cy0+bmV3X2JyYW5jaCAmJgorCSAgICAhb3B0cy0+aWdub3JlX290aGVyX3dvcmt0cmVlcykgeworCQlpbnQgZmxhZzsKKwkJY2hhciAqaGVhZF9yZWYgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsIE5VTEwsICZmbGFnKTsKKwkJaWYgKGhlYWRfcmVmICYmCisJCSAgICAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSB8fCBzdHJjbXAoaGVhZF9yZWYsIG5ld19icmFuY2hfaW5mby0+cGF0aCkpKQorCQkJZGllX2lmX2NoZWNrZWRfb3V0KG5ld19icmFuY2hfaW5mby0+cGF0aCwgMSk7CisJCWZyZWUoaGVhZF9yZWYpOworCX0KKworCWlmICghbmV3X2JyYW5jaF9pbmZvLT5jb21taXQgJiYgb3B0cy0+bmV3X2JyYW5jaCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHJldjsKKwkJaW50IGZsYWc7CisKKwkJaWYgKCFyZWFkX3JlZl9mdWxsKCJIRUFEIiwgMCwgJnJldiwgJmZsYWcpICYmCisJCSAgICAoZmxhZyAmIFJFRl9JU1NZTVJFRikgJiYgaXNfbnVsbF9vaWQoJnJldikpCisJCQlyZXR1cm4gc3dpdGNoX3VuYm9ybl90b19uZXdfYnJhbmNoKG9wdHMpOworCX0KKwlyZXR1cm4gc3dpdGNoX2JyYW5jaGVzKG9wdHMsIG5ld19icmFuY2hfaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uICphZGRfY29tbW9uX29wdGlvbnMoc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsCisJCQkJCSBzdHJ1Y3Qgb3B0aW9uICpwcmV2b3B0cykKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmb3B0cy0+cXVpZXQsIE5fKCJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgTlVMTCwKKwkJCSAgICAiY2hlY2tvdXQiLCAiY29udHJvbCByZWN1cnNpdmUgdXBkYXRpbmcgb2Ygc3VibW9kdWxlcyIsCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRywgb3B0aW9uX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlc193b3JrdHJlZV91cGRhdGVyIH0sCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZvcHRzLT5zaG93X3Byb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQlPUFRfQk9PTCgnbScsICJtZXJnZSIsICZvcHRzLT5tZXJnZSwgTl8oInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIikpLAorCQlPUFRfU1RSSU5HKDAsICJjb25mbGljdCIsICZvcHRzLT5jb25mbGljdF9zdHlsZSwgTl8oInN0eWxlIiksCisJCQkgICBOXygiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3Qgb3B0aW9uICpuZXdvcHRzID0gcGFyc2Vfb3B0aW9uc19jb25jYXQocHJldm9wdHMsIG9wdGlvbnMpOworCWZyZWUocHJldm9wdHMpOworCXJldHVybiBuZXdvcHRzOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiAqYWRkX2NvbW1vbl9zd2l0Y2hfYnJhbmNoX29wdGlvbnMoCisJc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMsIHN0cnVjdCBvcHRpb24gKnByZXZvcHRzKQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnZCcsICJkZXRhY2giLCAmb3B0cy0+Zm9yY2VfZGV0YWNoLCBOXygiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IikpLAorCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmb3B0cy0+dHJhY2ssIE5fKCJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIpLAorCQkJQlJBTkNIX1RSQUNLX0VYUExJQ0lUKSwKKwkJT1BUX19GT1JDRSgmb3B0cy0+Zm9yY2UsIE5fKCJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIpLAorCQkJICAgUEFSU0VfT1BUX05PQ09NUExFVEUpLAorCQlPUFRfU1RSSU5HKDAsICJvcnBoYW4iLCAmb3B0cy0+bmV3X29ycGhhbl9icmFuY2gsIE5fKCJuZXctYnJhbmNoIiksIE5fKCJuZXcgdW5wYXJlbnRlZCBicmFuY2giKSksCisJCU9QVF9CT09MX0YoMCwgIm92ZXJ3cml0ZS1pZ25vcmUiLCAmb3B0cy0+b3ZlcndyaXRlX2lnbm9yZSwKKwkJCSAgIE5fKCJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiKSwKKwkJCSAgIFBBUlNFX09QVF9OT0NPTVBMRVRFKSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1vdGhlci13b3JrdHJlZXMiLCAmb3B0cy0+aWdub3JlX290aGVyX3dvcmt0cmVlcywKKwkJCSBOXygiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIikpLAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCBvcHRpb24gKm5ld29wdHMgPSBwYXJzZV9vcHRpb25zX2NvbmNhdChwcmV2b3B0cywgb3B0aW9ucyk7CisJZnJlZShwcmV2b3B0cyk7CisJcmV0dXJuIG5ld29wdHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uICphZGRfY2hlY2tvdXRfcGF0aF9vcHRpb25zKHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJCQkJc3RydWN0IG9wdGlvbiAqcHJldm9wdHMpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TRVRfSU5UX0YoJzInLCAib3VycyIsICZvcHRzLT53cml0ZW91dF9zdGFnZSwKKwkJCSAgICAgIE5fKCJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiKSwKKwkJCSAgICAgIDIsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9TRVRfSU5UX0YoJzMnLCAidGhlaXJzIiwgJm9wdHMtPndyaXRlb3V0X3N0YWdlLAorCQkJICAgICAgTl8oImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIiksCisJCQkgICAgICAzLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfQk9PTCgncCcsICJwYXRjaCIsICZvcHRzLT5wYXRjaF9tb2RlLCBOXygic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiKSksCisJCU9QVF9CT09MKDAsICJpZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzIiwgJm9wdHMtPmlnbm9yZV9za2lwd29ya3RyZWUsCisJCQkgTl8oImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIpKSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmb3B0cy0+cGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZvcHRzLT5wYXRoc3BlY19maWxlX251bCksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IG9wdGlvbiAqbmV3b3B0cyA9IHBhcnNlX29wdGlvbnNfY29uY2F0KHByZXZvcHRzLCBvcHRpb25zKTsKKwlmcmVlKHByZXZvcHRzKTsKKwlyZXR1cm4gbmV3b3B0czsKK30KKworc3RhdGljIGludCBjaGVja291dF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkJIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdKQoreworCXN0cnVjdCBicmFuY2hfaW5mbyBuZXdfYnJhbmNoX2luZm87CisJaW50IHBhcnNlb3B0X2ZsYWdzID0gMDsKKworCW1lbXNldCgmbmV3X2JyYW5jaF9pbmZvLCAwLCBzaXplb2YobmV3X2JyYW5jaF9pbmZvKSk7CisJb3B0cy0+b3ZlcndyaXRlX2lnbm9yZSA9IDE7CisJb3B0cy0+cHJlZml4ID0gcHJlZml4OworCW9wdHMtPnNob3dfcHJvZ3Jlc3MgPSAtMTsKKworCWdpdF9jb25maWcoZ2l0X2NoZWNrb3V0X2NvbmZpZywgb3B0cyk7CisKKwlvcHRzLT50cmFjayA9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRDsKKworCWlmICghb3B0cy0+YWNjZXB0X3BhdGhzcGVjICYmICFvcHRzLT5hY2NlcHRfcmVmKQorCQlCVUcoIm1ha2UgdXAgeW91ciBtaW5kLCB5b3UgbmVlZCB0byB0YWtlIF9zb21ldGhpbmdfIik7CisJaWYgKG9wdHMtPmFjY2VwdF9wYXRoc3BlYyAmJiBvcHRzLT5hY2NlcHRfcmVmKQorCQlwYXJzZW9wdF9mbGFncyA9IFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICB1c2FnZXN0ciwgcGFyc2VvcHRfZmxhZ3MpOworCisJaWYgKG9wdHMtPnNob3dfcHJvZ3Jlc3MgPCAwKSB7CisJCWlmIChvcHRzLT5xdWlldCkKKwkJCW9wdHMtPnNob3dfcHJvZ3Jlc3MgPSAwOworCQllbHNlCisJCQlvcHRzLT5zaG93X3Byb2dyZXNzID0gaXNhdHR5KDIpOworCX0KKworCWlmIChvcHRzLT5jb25mbGljdF9zdHlsZSkgeworCQlvcHRzLT5tZXJnZSA9IDE7IC8qIGltcGxpZWQgKi8KKwkJZ2l0X3htZXJnZV9jb25maWcoIm1lcmdlLmNvbmZsaWN0c3R5bGUiLCBvcHRzLT5jb25mbGljdF9zdHlsZSwgTlVMTCk7CisJfQorCWlmIChvcHRzLT5mb3JjZSkgeworCQlvcHRzLT5kaXNjYXJkX2NoYW5nZXMgPSAxOworCQlvcHRzLT5pZ25vcmVfdW5tZXJnZWRfb3B0ID0gIi0tZm9yY2UiOworCQlvcHRzLT5pZ25vcmVfdW5tZXJnZWQgPSAxOworCX0KKworCWlmICgoISFvcHRzLT5uZXdfYnJhbmNoICsgISFvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlICsgISFvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCkgPiAxKQorCQlkaWUoXygiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIikpOworCisJaWYgKG9wdHMtPm92ZXJsYXlfbW9kZSA9PSAxICYmIG9wdHMtPnBhdGNoX21vZGUpCisJCWRpZShfKCItcCBhbmQgLS1vdmVybGF5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisKKwlpZiAob3B0cy0+Y2hlY2tvdXRfaW5kZXggPj0gMCB8fCBvcHRzLT5jaGVja291dF93b3JrdHJlZSA+PSAwKSB7CisJCWlmIChvcHRzLT5jaGVja291dF9pbmRleCA8IDApCisJCQlvcHRzLT5jaGVja291dF9pbmRleCA9IDA7CisJCWlmIChvcHRzLT5jaGVja291dF93b3JrdHJlZSA8IDApCisJCQlvcHRzLT5jaGVja291dF93b3JrdHJlZSA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4IDwgMCkKKwkJCW9wdHMtPmNoZWNrb3V0X2luZGV4ID0gLW9wdHMtPmNoZWNrb3V0X2luZGV4IC0gMTsKKwkJaWYgKG9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlIDwgMCkKKwkJCW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlID0gLW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlIC0gMTsKKwl9CisJaWYgKG9wdHMtPmNoZWNrb3V0X2luZGV4IDwgMCB8fCBvcHRzLT5jaGVja291dF93b3JrdHJlZSA8IDApCisJCUJVRygidGhlc2UgZmxhZ3Mgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBieSBub3ciKTsKKwkvKgorCSAqIGNvbnZlbmllbnQgc2hvcnRjdXQ6ICJnaXQgcmVzdG9yZSAtLXN0YWdlZCIgZXF1YWxzCisJICogImdpdCByZXN0b3JlIC0tc3RhZ2VkIC0tc291cmNlIEhFQUQiCisJICovCisJaWYgKCFvcHRzLT5mcm9tX3RyZWVpc2ggJiYgb3B0cy0+Y2hlY2tvdXRfaW5kZXggJiYgIW9wdHMtPmNoZWNrb3V0X3dvcmt0cmVlKQorCQlvcHRzLT5mcm9tX3RyZWVpc2ggPSAiSEVBRCI7CisKKwkvKgorCSAqIEZyb20gaGVyZSBvbiwgbmV3X2JyYW5jaCB3aWxsIGNvbnRhaW4gdGhlIGJyYW5jaCB0byBiZSBjaGVja2VkIG91dCwKKwkgKiBhbmQgbmV3X2JyYW5jaF9mb3JjZSBhbmQgbmV3X29ycGhhbl9icmFuY2ggd2lsbCB0ZWxsIHVzIHdoaWNoIG9uZSBvZgorCSAqIC1iLy1CLy0tb3JwaGFuIGlzIGJlaW5nIHVzZWQuCisJICovCisJaWYgKG9wdHMtPm5ld19icmFuY2hfZm9yY2UpCisJCW9wdHMtPm5ld19icmFuY2ggPSBvcHRzLT5uZXdfYnJhbmNoX2ZvcmNlOworCisJaWYgKG9wdHMtPm5ld19vcnBoYW5fYnJhbmNoKQorCQlvcHRzLT5uZXdfYnJhbmNoID0gb3B0cy0+bmV3X29ycGhhbl9icmFuY2g7CisKKwkvKiAtLXRyYWNrIHdpdGhvdXQgLWIvLUIvLS1vcnBoYW4gc2hvdWxkIERXSU0gKi8KKwlpZiAob3B0cy0+dHJhY2sgIT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEICYmICFvcHRzLT5uZXdfYnJhbmNoKSB7CisJCWNvbnN0IGNoYXIgKmFyZ3YwID0gYXJndlswXTsKKwkJaWYgKCFhcmdjIHx8ICFzdHJjbXAoYXJndjAsICItLSIpKQorCQkJZGllKF8oIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIpKTsKKwkJc2tpcF9wcmVmaXgoYXJndjAsICJyZWZzLyIsICZhcmd2MCk7CisJCXNraXBfcHJlZml4KGFyZ3YwLCAicmVtb3Rlcy8iLCAmYXJndjApOworCQlhcmd2MCA9IHN0cmNocihhcmd2MCwgJy8nKTsKKwkJaWYgKCFhcmd2MCB8fCAhYXJndjBbMV0pCisJCQlkaWUoXygibWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIikpOworCQlvcHRzLT5uZXdfYnJhbmNoID0gYXJndjAgKyAxOworCX0KKworCS8qCisJICogRXh0cmFjdCBicmFuY2ggbmFtZSBmcm9tIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIHNvCisJICogYWxsIHRoYXQgaXMgbGVmdCBpcyBwYXRoc3BlY3MuCisJICoKKwkgKiBIYW5kbGUKKwkgKgorCSAqICAxKSBnaXQgY2hlY2tvdXQgPHRyZWU+IC0tIFs8cGF0aHM+XQorCSAqICAyKSBnaXQgY2hlY2tvdXQgLS0gWzxwYXRocz5dCisJICogIDMpIGdpdCBjaGVja291dCA8c29tZXRoaW5nPiBbPHBhdGhzPl0KKwkgKgorCSAqIGluY2x1ZGluZyAibGFzdCBicmFuY2giIHN5bnRheCBhbmQgRFdJTS1lcnkgZm9yIG5hbWVzIG9mCisJICogcmVtb3RlIGJyYW5jaGVzLCBlcnJvcmluZyBvdXQgZm9yIGludmFsaWQgb3IgYW1iaWd1b3VzIGNhc2VzLgorCSAqLworCWlmIChhcmdjICYmIG9wdHMtPmFjY2VwdF9yZWYpIHsKKwkJc3RydWN0IG9iamVjdF9pZCByZXY7CisJCWludCBkd2ltX29rID0KKwkJCSFvcHRzLT5wYXRjaF9tb2RlICYmCisJCQlvcHRzLT5kd2ltX25ld19sb2NhbF9icmFuY2ggJiYKKwkJCW9wdHMtPnRyYWNrID09IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCAmJgorCQkJIW9wdHMtPm5ld19icmFuY2g7CisJCWludCBuID0gcGFyc2VfYnJhbmNobmFtZV9hcmcoYXJnYywgYXJndiwgZHdpbV9vaywKKwkJCQkJICAgICAmbmV3X2JyYW5jaF9pbmZvLCBvcHRzLCAmcmV2KTsKKwkJYXJndiArPSBuOworCQlhcmdjIC09IG47CisJfSBlbHNlIGlmICghb3B0cy0+YWNjZXB0X3JlZiAmJiBvcHRzLT5mcm9tX3RyZWVpc2gpIHsKKwkJc3RydWN0IG9iamVjdF9pZCByZXY7CisKKwkJaWYgKGdldF9vaWRfbWIob3B0cy0+ZnJvbV90cmVlaXNoLCAmcmV2KSkKKwkJCWRpZShfKCJjb3VsZCBub3QgcmVzb2x2ZSAlcyIpLCBvcHRzLT5mcm9tX3RyZWVpc2gpOworCisJCXNldHVwX25ld19icmFuY2hfaW5mb19hbmRfc291cmNlX3RyZWUoJm5ld19icmFuY2hfaW5mbywKKwkJCQkJCSAgICAgIG9wdHMsICZyZXYsCisJCQkJCQkgICAgICBvcHRzLT5mcm9tX3RyZWVpc2gpOworCisJCWlmICghb3B0cy0+c291cmNlX3RyZWUpCisJCQlkaWUoXygicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIiksIG9wdHMtPmZyb21fdHJlZWlzaCk7CisJfQorCisJaWYgKGFyZ2MpIHsKKwkJcGFyc2VfcGF0aHNwZWMoJm9wdHMtPnBhdGhzcGVjLCAwLAorCQkJICAgICAgIG9wdHMtPnBhdGNoX21vZGUgPyBQQVRIU1BFQ19QUkVGSVhfT1JJR0lOIDogMCwKKwkJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJCWlmICghb3B0cy0+cGF0aHNwZWMubnIpCisJCQlkaWUoXygiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iKSk7CisKKwkJLyoKKwkJICogVHJ5IHRvIGdpdmUgbW9yZSBoZWxwZnVsIHN1Z2dlc3Rpb24uCisJCSAqIG5ld19icmFuY2ggJiYgYXJnYyA+IDEgd2lsbCBiZSBjYXVnaHQgbGF0ZXIuCisJCSAqLworCQlpZiAob3B0cy0+bmV3X2JyYW5jaCAmJiBhcmdjID09IDEpCisJCQlkaWUoXygiJyVzJyBpcyBub3QgYSBjb21taXQgYW5kIGEgYnJhbmNoICclcycgY2Fubm90IGJlIGNyZWF0ZWQgZnJvbSBpdCIpLAorCQkJCWFyZ3ZbMF0sIG9wdHMtPm5ld19icmFuY2gpOworCisJCWlmIChvcHRzLT5mb3JjZV9kZXRhY2gpCisJCQlkaWUoXygiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIiksCisJCQkgICAgYXJndlswXSk7CisJfQorCisJaWYgKG9wdHMtPnBhdGhzcGVjX2Zyb21fZmlsZSkgeworCQlpZiAob3B0cy0+cGF0aHNwZWMubnIpCisJCQlkaWUoXygiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIikpOworCisJCWlmIChvcHRzLT5mb3JjZV9kZXRhY2gpCisJCQlkaWUoXygiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giKSk7CisKKwkJaWYgKG9wdHMtPnBhdGNoX21vZGUpCisJCQlkaWUoXygiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIpKTsKKworCQlwYXJzZV9wYXRoc3BlY19maWxlKCZvcHRzLT5wYXRoc3BlYywgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgcHJlZml4LCBvcHRzLT5wYXRoc3BlY19mcm9tX2ZpbGUsIG9wdHMtPnBhdGhzcGVjX2ZpbGVfbnVsKTsKKwl9IGVsc2UgaWYgKG9wdHMtPnBhdGhzcGVjX2ZpbGVfbnVsKSB7CisJCWRpZShfKCItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIikpOworCX0KKworCWlmIChvcHRzLT5wYXRoc3BlYy5ucikgeworCQlpZiAoMSA8ICEhb3B0cy0+d3JpdGVvdXRfc3RhZ2UgKyAhIW9wdHMtPmZvcmNlICsgISFvcHRzLT5tZXJnZSkKKwkJCWRpZShfKCJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKwkJCSAgICAgICJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIpKTsKKwl9IGVsc2UgeworCQlpZiAob3B0cy0+YWNjZXB0X3BhdGhzcGVjICYmICFvcHRzLT5lbXB0eV9wYXRoc3BlY19vayAmJgorCQkgICAgIW9wdHMtPnBhdGNoX21vZGUpCS8qIHBhdGNoIG1vZGUgaXMgc3BlY2lhbCAqLworCQkJZGllKF8oInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIikpOworCX0KKworCWlmIChvcHRzLT5uZXdfYnJhbmNoKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKG9wdHMtPm5ld19icmFuY2hfZm9yY2UpCisJCQlvcHRzLT5icmFuY2hfZXhpc3RzID0gdmFsaWRhdGVfYnJhbmNobmFtZShvcHRzLT5uZXdfYnJhbmNoLCAmYnVmKTsKKwkJZWxzZQorCQkJb3B0cy0+YnJhbmNoX2V4aXN0cyA9CisJCQkJdmFsaWRhdGVfbmV3X2JyYW5jaG5hbWUob3B0cy0+bmV3X2JyYW5jaCwgJmJ1ZiwgMCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKworCVVOTEVBSyhvcHRzKTsKKwlpZiAob3B0cy0+cGF0Y2hfbW9kZSB8fCBvcHRzLT5wYXRoc3BlYy5ucikKKwkJcmV0dXJuIGNoZWNrb3V0X3BhdGhzKG9wdHMsIG5ld19icmFuY2hfaW5mby5uYW1lKTsKKwllbHNlCisJCXJldHVybiBjaGVja291dF9icmFuY2gob3B0cywgJm5ld19icmFuY2hfaW5mbyk7Cit9CisKK2ludCBjbWRfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoZWNrb3V0X29wdHMgb3B0czsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zOworCXN0cnVjdCBvcHRpb24gY2hlY2tvdXRfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCdiJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIikpLAorCQlPUFRfU1RSSU5HKCdCJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaF9mb3JjZSwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giKSksCisJCU9QVF9CT09MKCdsJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaF9sb2csIE5fKCJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIikpLAorCQlPUFRfQk9PTCgwLCAiZ3Vlc3MiLCAmb3B0cy5kd2ltX25ld19sb2NhbF9icmFuY2gsCisJCQkgTl8oInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIpKSwKKwkJT1BUX0JPT0woMCwgIm92ZXJsYXkiLCAmb3B0cy5vdmVybGF5X21vZGUsIE5fKCJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuZHdpbV9uZXdfbG9jYWxfYnJhbmNoID0gMTsKKwlvcHRzLnN3aXRjaF9icmFuY2hfZG9pbmdfbm90aGluZ19pc19vayA9IDE7CisJb3B0cy5vbmx5X21lcmdlX29uX3N3aXRjaGluZ19icmFuY2hlcyA9IDA7CisJb3B0cy5hY2NlcHRfcmVmID0gMTsKKwlvcHRzLmFjY2VwdF9wYXRoc3BlYyA9IDE7CisJb3B0cy5pbXBsaWNpdF9kZXRhY2ggPSAxOworCW9wdHMuY2FuX3N3aXRjaF93aGVuX2luX3Byb2dyZXNzID0gMTsKKwlvcHRzLm9ycGhhbl9mcm9tX2VtcHR5X3RyZWUgPSAwOworCW9wdHMuZW1wdHlfcGF0aHNwZWNfb2sgPSAxOworCW9wdHMub3ZlcmxheV9tb2RlID0gLTE7CisJb3B0cy5jaGVja291dF9pbmRleCA9IC0yOyAgICAvKiBkZWZhdWx0IG9uICovCisJb3B0cy5jaGVja291dF93b3JrdHJlZSA9IC0yOyAvKiBkZWZhdWx0IG9uICovCisKKwlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgIi1iIikpIHsKKwkJLyoKKwkJICogVXNlciByYW4gJ2dpdCBjaGVja291dCAtYiA8YnJhbmNoPicgYW5kIGV4cGVjdHMKKwkJICogdGhlIHNhbWUgYmVoYXZpb3IgYXMgJ2dpdCBzd2l0Y2ggLWMgPGJyYW5jaD4nLgorCQkgKi8KKwkJb3B0cy5zd2l0Y2hfYnJhbmNoX2RvaW5nX25vdGhpbmdfaXNfb2sgPSAwOworCQlvcHRzLm9ubHlfbWVyZ2Vfb25fc3dpdGNoaW5nX2JyYW5jaGVzID0gMTsKKwl9CisKKwlvcHRpb25zID0gcGFyc2Vfb3B0aW9uc19kdXAoY2hlY2tvdXRfb3B0aW9ucyk7CisJb3B0aW9ucyA9IGFkZF9jb21tb25fb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisJb3B0aW9ucyA9IGFkZF9jb21tb25fc3dpdGNoX2JyYW5jaF9vcHRpb25zKCZvcHRzLCBvcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NoZWNrb3V0X3BhdGhfb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisKKwlyZXQgPSBjaGVja291dF9tYWluKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJm9wdHMsCisJCQkgICAgb3B0aW9ucywgY2hlY2tvdXRfdXNhZ2UpOworCUZSRUVfQU5EX05VTEwob3B0aW9ucyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9zd2l0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoZWNrb3V0X29wdHMgb3B0czsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIHN3aXRjaF9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoJ2MnLCAiY3JlYXRlIiwgJm9wdHMubmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaCIpKSwKKwkJT1BUX1NUUklORygnQycsICJmb3JjZS1jcmVhdGUiLCAmb3B0cy5uZXdfYnJhbmNoX2ZvcmNlLCBOXygiYnJhbmNoIiksCisJCQkgICBOXygiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giKSksCisJCU9QVF9CT09MKDAsICJndWVzcyIsICZvcHRzLmR3aW1fbmV3X2xvY2FsX2JyYW5jaCwKKwkJCSBOXygic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIikpLAorCQlPUFRfQk9PTCgwLCAiZGlzY2FyZC1jaGFuZ2VzIiwgJm9wdHMuZGlzY2FyZF9jaGFuZ2VzLAorCQkJIE5fKCJ0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMiKSksCisJCU9QVF9FTkQoKQorCX07CisJaW50IHJldDsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmR3aW1fbmV3X2xvY2FsX2JyYW5jaCA9IDE7CisJb3B0cy5hY2NlcHRfcmVmID0gMTsKKwlvcHRzLmFjY2VwdF9wYXRoc3BlYyA9IDA7CisJb3B0cy5zd2l0Y2hfYnJhbmNoX2RvaW5nX25vdGhpbmdfaXNfb2sgPSAwOworCW9wdHMub25seV9tZXJnZV9vbl9zd2l0Y2hpbmdfYnJhbmNoZXMgPSAxOworCW9wdHMuaW1wbGljaXRfZGV0YWNoID0gMDsKKwlvcHRzLmNhbl9zd2l0Y2hfd2hlbl9pbl9wcm9ncmVzcyA9IDA7CisJb3B0cy5vcnBoYW5fZnJvbV9lbXB0eV90cmVlID0gMTsKKwlvcHRzLm92ZXJsYXlfbW9kZSA9IC0xOworCisJb3B0aW9ucyA9IHBhcnNlX29wdGlvbnNfZHVwKHN3aXRjaF9vcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NvbW1vbl9vcHRpb25zKCZvcHRzLCBvcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NvbW1vbl9zd2l0Y2hfYnJhbmNoX29wdGlvbnMoJm9wdHMsIG9wdGlvbnMpOworCisJcmV0ID0gY2hlY2tvdXRfbWFpbihhcmdjLCBhcmd2LCBwcmVmaXgsICZvcHRzLAorCQkJICAgIG9wdGlvbnMsIHN3aXRjaF9icmFuY2hfdXNhZ2UpOworCUZSRUVfQU5EX05VTEwob3B0aW9ucyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9yZXN0b3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjaGVja291dF9vcHRzIG9wdHM7CisJc3RydWN0IG9wdGlvbiAqb3B0aW9uczsKKwlzdHJ1Y3Qgb3B0aW9uIHJlc3RvcmVfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCdzJywgInNvdXJjZSIsICZvcHRzLmZyb21fdHJlZWlzaCwgIjx0cmVlLWlzaD4iLAorCQkJICAgTl8oIndoaWNoIHRyZWUtaXNoIHRvIGNoZWNrb3V0IGZyb20iKSksCisJCU9QVF9CT09MKCdTJywgInN0YWdlZCIsICZvcHRzLmNoZWNrb3V0X2luZGV4LAorCQkJICAgTl8oInJlc3RvcmUgdGhlIGluZGV4IikpLAorCQlPUFRfQk9PTCgnVycsICJ3b3JrdHJlZSIsICZvcHRzLmNoZWNrb3V0X3dvcmt0cmVlLAorCQkJICAgTl8oInJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSAoZGVmYXVsdCkiKSksCisJCU9QVF9CT09MKDAsICJpZ25vcmUtdW5tZXJnZWQiLCAmb3B0cy5pZ25vcmVfdW5tZXJnZWQsCisJCQkgTl8oImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIikpLAorCQlPUFRfQk9PTCgwLCAib3ZlcmxheSIsICZvcHRzLm92ZXJsYXlfbW9kZSwgTl8oInVzZSBvdmVybGF5IG1vZGUiKSksCisJCU9QVF9FTkQoKQorCX07CisJaW50IHJldDsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmFjY2VwdF9yZWYgPSAwOworCW9wdHMuYWNjZXB0X3BhdGhzcGVjID0gMTsKKwlvcHRzLmVtcHR5X3BhdGhzcGVjX29rID0gMDsKKwlvcHRzLm92ZXJsYXlfbW9kZSA9IDA7CisJb3B0cy5jaGVja291dF9pbmRleCA9IC0xOyAgICAvKiBkZWZhdWx0IG9mZiAqLworCW9wdHMuY2hlY2tvdXRfd29ya3RyZWUgPSAtMjsgLyogZGVmYXVsdCBvbiAqLworCW9wdHMuaWdub3JlX3VubWVyZ2VkX29wdCA9ICItLWlnbm9yZS11bm1lcmdlZCI7CisKKwlvcHRpb25zID0gcGFyc2Vfb3B0aW9uc19kdXAocmVzdG9yZV9vcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NvbW1vbl9vcHRpb25zKCZvcHRzLCBvcHRpb25zKTsKKwlvcHRpb25zID0gYWRkX2NoZWNrb3V0X3BhdGhfb3B0aW9ucygmb3B0cywgb3B0aW9ucyk7CisKKwlyZXQgPSBjaGVja291dF9tYWluKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJm9wdHMsCisJCQkgICAgb3B0aW9ucywgcmVzdG9yZV91c2FnZSk7CisJRlJFRV9BTkRfTlVMTChvcHRpb25zKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbGVhbi5jIGIvYnVpbHRpbi9jbGVhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYmYwODcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NsZWFuLmMKQEAgLTAsMCArMSwxMDYyIEBACisvKgorICogImdpdCBjbGVhbiIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIEJvaHJlcgorICoKKyAqIEJhc2VkIG9uIGdpdC1jbGVhbi5zaCBieSBQYXZlbCBSb3NraW4KKyAqLworCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisKK3N0YXRpYyBpbnQgZm9yY2UgPSAtMTsgLyogdW5zZXQgKi8KK3N0YXRpYyBpbnQgaW50ZXJhY3RpdmU7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGRlbF9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsdGluX2NsZWFuX3VzYWdlW10gPSB7CisJTl8oImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICptc2dfcmVtb3ZlID0gTl8oIlJlbW92aW5nICVzXG4iKTsKK3N0YXRpYyBjb25zdCBjaGFyICptc2dfd291bGRfcmVtb3ZlID0gTl8oIldvdWxkIHJlbW92ZSAlc1xuIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3NraXBfZ2l0X2RpciA9IE5fKCJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iKTsKK3N0YXRpYyBjb25zdCBjaGFyICptc2dfd291bGRfc2tpcF9naXRfZGlyID0gTl8oIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCA9IE5fKCJmYWlsZWQgdG8gcmVtb3ZlICVzIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dhcm5fbHN0YXRfZmFpbGVkID0gTl8oImNvdWxkIG5vdCBsc3RhdCAlc1xuIik7CisKK2VudW0gY29sb3JfY2xlYW4geworCUNMRUFOX0NPTE9SX1JFU0VUID0gMCwKKwlDTEVBTl9DT0xPUl9QTEFJTiA9IDEsCisJQ0xFQU5fQ09MT1JfUFJPTVBUID0gMiwKKwlDTEVBTl9DT0xPUl9IRUFERVIgPSAzLAorCUNMRUFOX0NPTE9SX0hFTFAgPSA0LAorCUNMRUFOX0NPTE9SX0VSUk9SID0gNQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbG9yX2ludGVyYWN0aXZlX3Nsb3RzW10gPSB7CisJW0NMRUFOX0NPTE9SX0VSUk9SXSAgPSAiZXJyb3IiLAorCVtDTEVBTl9DT0xPUl9IRUFERVJdID0gImhlYWRlciIsCisJW0NMRUFOX0NPTE9SX0hFTFBdICAgPSAiaGVscCIsCisJW0NMRUFOX0NPTE9SX1BMQUlOXSAgPSAicGxhaW4iLAorCVtDTEVBTl9DT0xPUl9QUk9NUFRdID0gInByb21wdCIsCisJW0NMRUFOX0NPTE9SX1JFU0VUXSAgPSAicmVzZXQiLAorfTsKKworc3RhdGljIGludCBjbGVhbl91c2VfY29sb3IgPSAtMTsKK3N0YXRpYyBjaGFyIGNsZWFuX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJW0NMRUFOX0NPTE9SX0VSUk9SXSA9IEdJVF9DT0xPUl9CT0xEX1JFRCwKKwlbQ0xFQU5fQ09MT1JfSEVBREVSXSA9IEdJVF9DT0xPUl9CT0xELAorCVtDTEVBTl9DT0xPUl9IRUxQXSA9IEdJVF9DT0xPUl9CT0xEX1JFRCwKKwlbQ0xFQU5fQ09MT1JfUExBSU5dID0gR0lUX0NPTE9SX05PUk1BTCwKKwlbQ0xFQU5fQ09MT1JfUFJPTVBUXSA9IEdJVF9DT0xPUl9CT0xEX0JMVUUsCisJW0NMRUFOX0NPTE9SX1JFU0VUXSA9IEdJVF9DT0xPUl9SRVNFVCwKK307CisKKyNkZWZpbmUgTUVOVV9PUFRTX1NJTkdMRVRPTgkJMDEKKyNkZWZpbmUgTUVOVV9PUFRTX0lNTUVESUFURQkJMDIKKyNkZWZpbmUgTUVOVV9PUFRTX0xJU1RfT05MWQkJMDQKKworc3RydWN0IG1lbnVfb3B0cyB7CisJY29uc3QgY2hhciAqaGVhZGVyOworCWNvbnN0IGNoYXIgKnByb21wdDsKKwlpbnQgZmxhZ3M7Cit9OworCisjZGVmaW5lIE1FTlVfUkVUVVJOX05PX0xPT1AJCTEwCisKK3N0cnVjdCBtZW51X2l0ZW0geworCWNoYXIgaG90a2V5OworCWNvbnN0IGNoYXIgKnRpdGxlOworCWludCBzZWxlY3RlZDsKKwlpbnQgKCpmbikodm9pZCk7Cit9OworCitlbnVtIG1lbnVfc3R1ZmZfdHlwZSB7CisJTUVOVV9TVFVGRl9UWVBFX1NUUklOR19MSVNUID0gMSwKKwlNRU5VX1NUVUZGX1RZUEVfTUVOVV9JVEVNCit9OworCitzdHJ1Y3QgbWVudV9zdHVmZiB7CisJZW51bSBtZW51X3N0dWZmX3R5cGUgdHlwZTsKKwlpbnQgbnI7CisJdm9pZCAqc3R1ZmY7Cit9OworCitkZWZpbmVfbGlzdF9jb25maWdfYXJyYXkoY29sb3JfaW50ZXJhY3RpdmVfc2xvdHMpOworCitzdGF0aWMgaW50IGdpdF9jbGVhbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgImNvbHVtbi4iKSkKKwkJcmV0dXJuIGdpdF9jb2x1bW5fY29uZmlnKHZhciwgdmFsdWUsICJjbGVhbiIsICZjb2xvcHRzKTsKKworCS8qIGhvbm9ycyB0aGUgY29sb3IuaW50ZXJhY3RpdmUqIGNvbmZpZyB2YXJpYWJsZXMgd2hpY2ggYWxzbworCSAgIGFwcGxpZWQgaW4gZ2l0LWFkZC0taW50ZXJhY3RpdmUgYW5kIGdpdC1zdGFzaCAqLworCWlmICghc3RyY21wKHZhciwgImNvbG9yLmludGVyYWN0aXZlIikpIHsKKwkJY2xlYW5fdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiY29sb3IuaW50ZXJhY3RpdmUuIiwgJnNsb3RfbmFtZSkpIHsKKwkJaW50IHNsb3QgPSBMT09LVVBfQ09ORklHKGNvbG9yX2ludGVyYWN0aXZlX3Nsb3RzLCBzbG90X25hbWUpOworCQlpZiAoc2xvdCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyZXR1cm4gY29sb3JfcGFyc2UodmFsdWUsIGNsZWFuX2NvbG9yc1tzbG90XSk7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY2xlYW4ucmVxdWlyZWZvcmNlIikpIHsKKwkJZm9yY2UgPSAhZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBpbnNwZWN0IHRoZSBjb2xvci51aSBjb25maWcgdmFyaWFibGUgYW5kIG90aGVycyAqLworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2xlYW5fZ2V0X2NvbG9yKGVudW0gY29sb3JfY2xlYW4gaXgpCit7CisJaWYgKHdhbnRfY29sb3IoY2xlYW5fdXNlX2NvbG9yKSkKKwkJcmV0dXJuIGNsZWFuX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9wcmludF9jb2xvcihlbnVtIGNvbG9yX2NsZWFuIGl4KQoreworCXByaW50ZigiJXMiLCBjbGVhbl9nZXRfY29sb3IoaXgpKTsKK30KKworc3RhdGljIGludCBleGNsdWRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpleGNsdWRlX2xpc3QgPSBvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoZXhjbHVkZV9saXN0LCBhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9kaXJzKHN0cnVjdCBzdHJidWYgKnBhdGgsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGZvcmNlX2ZsYWcsCisJCWludCBkcnlfcnVuLCBpbnQgcXVpZXQsIGludCAqZGlyX2dvbmUpCit7CisJRElSICpkaXI7CisJc3RydWN0IHN0cmJ1ZiBxdW90ZWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgZGlyZW50ICplOworCWludCByZXMgPSAwLCByZXQgPSAwLCBnb25lID0gMSwgb3JpZ2luYWxfbGVuID0gcGF0aC0+bGVuLCBsZW47CisJc3RydWN0IHN0cmluZ19saXN0IGRlbHMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCSpkaXJfZ29uZSA9IDE7CisKKwlpZiAoKGZvcmNlX2ZsYWcgJiBSRU1PVkVfRElSX0tFRVBfTkVTVEVEX0dJVCkgJiYKKwkgICAgaXNfbm9uYmFyZV9yZXBvc2l0b3J5X2RpcihwYXRoKSkgeworCQlpZiAoIXF1aWV0KSB7CisJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCXByaW50ZihkcnlfcnVuID8gIF8obXNnX3dvdWxkX3NraXBfZ2l0X2RpcikgOiBfKG1zZ19za2lwX2dpdF9kaXIpLAorCQkJCQlxdW90ZWQuYnVmKTsKKwkJfQorCisJCSpkaXJfZ29uZSA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWRpciA9IG9wZW5kaXIocGF0aC0+YnVmKTsKKwlpZiAoIWRpcikgeworCQkvKiBhbiBlbXB0eSBkaXIgY291bGQgYmUgcmVtb3ZlZCBldmVuIGlmIGl0IGlzIHVucmVhZGJsZSAqLworCQlyZXMgPSBkcnlfcnVuID8gMCA6IHJtZGlyKHBhdGgtPmJ1Zik7CisJCWlmIChyZXMpIHsKKwkJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHByZWZpeCwgJnF1b3RlZCk7CisJCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQkJd2FybmluZ19lcnJubyhfKG1zZ193YXJuX3JlbW92ZV9mYWlsZWQpLCBxdW90ZWQuYnVmKTsKKwkJCSpkaXJfZ29uZSA9IDA7CisJCX0KKwkJcmV0ID0gcmVzOworCQlnb3RvIG91dDsKKwl9CisKKwlzdHJidWZfY29tcGxldGUocGF0aCwgJy8nKTsKKworCWxlbiA9IHBhdGgtPmxlbjsKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKHBhdGgsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgZS0+ZF9uYW1lKTsKKwkJaWYgKGxzdGF0KHBhdGgtPmJ1ZiwgJnN0KSkKKwkJCXdhcm5pbmdfZXJybm8oXyhtc2dfd2Fybl9sc3RhdF9mYWlsZWQpLCBwYXRoLT5idWYpOworCQllbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQlpZiAocmVtb3ZlX2RpcnMocGF0aCwgcHJlZml4LCBmb3JjZV9mbGFnLCBkcnlfcnVuLCBxdWlldCwgJmdvbmUpKQorCQkJCXJldCA9IDE7CisJCQlpZiAoZ29uZSkgeworCQkJCXF1b3RlX3BhdGhfcmVsYXRpdmUocGF0aC0+YnVmLCBwcmVmaXgsICZxdW90ZWQpOworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVscywgcXVvdGVkLmJ1Zik7CisJCQl9IGVsc2UKKwkJCQkqZGlyX2dvbmUgPSAwOworCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlyZXMgPSBkcnlfcnVuID8gMCA6IHVubGluayhwYXRoLT5idWYpOworCQkJaWYgKCFyZXMpIHsKKwkJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRlbHMsIHF1b3RlZC5idWYpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQkJCXdhcm5pbmdfZXJybm8oXyhtc2dfd2Fybl9yZW1vdmVfZmFpbGVkKSwgcXVvdGVkLmJ1Zik7CisJCQkJKmRpcl9nb25lID0gMDsKKwkJCQlyZXQgPSAxOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBwYXRoIHRvbyBsb25nLCBzdGF0IGZhaWxzLCBvciBub24tZGlyZWN0b3J5IHN0aWxsIGV4aXN0cyAqLworCQkqZGlyX2dvbmUgPSAwOworCQlyZXQgPSAxOworCQlicmVhazsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgb3JpZ2luYWxfbGVuKTsKKworCWlmICgqZGlyX2dvbmUpIHsKKwkJcmVzID0gZHJ5X3J1biA/IDAgOiBybWRpcihwYXRoLT5idWYpOworCQlpZiAoIXJlcykKKwkJCSpkaXJfZ29uZSA9IDE7CisJCWVsc2UgeworCQkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCWVycm5vID0gc2F2ZWRfZXJybm87CisJCQl3YXJuaW5nX2Vycm5vKF8obXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCksIHF1b3RlZC5idWYpOworCQkJKmRpcl9nb25lID0gMDsKKwkJCXJldCA9IDE7CisJCX0KKwl9CisKKwlpZiAoISpkaXJfZ29uZSAmJiAhcXVpZXQpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBkZWxzLm5yOyBpKyspCisJCQlwcmludGYoZHJ5X3J1biA/ICBfKG1zZ193b3VsZF9yZW1vdmUpIDogXyhtc2dfcmVtb3ZlKSwgZGVscy5pdGVtc1tpXS5zdHJpbmcpOworCX0KK291dDoKKwlzdHJidWZfcmVsZWFzZSgmcXVvdGVkKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZGVscywgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHJldHR5X3ByaW50X2RlbHModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcW5hbWU7CisJc3RydWN0IGNvbHVtbl9vcHRpb25zIGNvcHRzOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJcW5hbWUgPSBxdW90ZV9wYXRoX3JlbGF0aXZlKGl0ZW0tPnN0cmluZywgTlVMTCwgJmJ1Zik7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgcW5hbWUpOworCX0KKworCS8qCisJICogYWx3YXlzIGVuYWJsZSBjb2x1bW4gZGlzcGxheSwgd2Ugb25seSBjb25zdWx0IGNvbHVtbi4qCisJICogYWJvdXQgbGF5b3V0IHN0cmF0ZWd5IGFuZCBzdHVmZgorCSAqLworCWNvbG9wdHMgPSAoY29sb3B0cyAmIH5DT0xfRU5BQkxFX01BU0spIHwgQ09MX0VOQUJMRUQ7CisJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJY29wdHMuaW5kZW50ID0gIiAgIjsKKwljb3B0cy5wYWRkaW5nID0gMjsKKwlwcmludF9jb2x1bW5zKCZsaXN0LCBjb2xvcHRzLCAmY29wdHMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKK30KKworc3RhdGljIHZvaWQgcHJldHR5X3ByaW50X21lbnVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWVudV9saXN0KQoreworCXVuc2lnbmVkIGludCBsb2NhbF9jb2xvcHRzID0gMDsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisKKwlsb2NhbF9jb2xvcHRzID0gQ09MX0VOQUJMRUQgfCBDT0xfUk9XOworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLmluZGVudCA9ICIgICI7CisJY29wdHMucGFkZGluZyA9IDI7CisJcHJpbnRfY29sdW1ucyhtZW51X2xpc3QsIGxvY2FsX2NvbG9wdHMsICZjb3B0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHByb21wdF9oZWxwX2NtZChpbnQgc2luZ2xldG9uKQoreworCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX0hFTFApOworCXByaW50ZihzaW5nbGV0b24gPworCQkgIF8oIlByb21wdCBoZWxwOlxuIgorCQkgICAgIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisJCSAgICAiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKwkJICAgICIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIikgOgorCQkgIF8oIlByb21wdCBoZWxwOlxuIgorCQkgICAgIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorCQkgICAgIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorCQkgICAgIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisJCSAgICAiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKwkJICAgICItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisJCSAgICAiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKwkJICAgICIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iKSk7CisJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworfQorCisvKgorICogZGlzcGxheSBtZW51IHN0dWZmIHdpdGggbnVtYmVyIHByZWZpeCBhbmQgaG90a2V5IGhpZ2hsaWdodAorICovCitzdGF0aWMgdm9pZCBwcmludF9oaWdobGlnaHRfbWVudV9zdHVmZihzdHJ1Y3QgbWVudV9zdHVmZiAqc3R1ZmYsIGludCAqKmNob3NlbikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVudV9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmJ1ZiBtZW51ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG1lbnVfaXRlbSAqbWVudV9pdGVtOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9pdGVtOworCWludCBpOworCisJc3dpdGNoIChzdHVmZi0+dHlwZSkgeworCWRlZmF1bHQ6CisJCWRpZSgiQmFkIHR5cGUgb2YgbWVudV9zdHVmZiB3aGVuIHByaW50IG1lbnUiKTsKKwljYXNlIE1FTlVfU1RVRkZfVFlQRV9NRU5VX0lURU06CisJCW1lbnVfaXRlbSA9IChzdHJ1Y3QgbWVudV9pdGVtICopc3R1ZmYtPnN0dWZmOworCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yOyBpKyssIG1lbnVfaXRlbSsrKSB7CisJCQljb25zdCBjaGFyICpwOworCQkJaW50IGhpZ2hsaWdodGVkID0gMDsKKworCQkJcCA9IG1lbnVfaXRlbS0+dGl0bGU7CisJCQlpZiAoKCpjaG9zZW4pW2ldIDwgMCkKKwkJCQkoKmNob3NlbilbaV0gPSBtZW51X2l0ZW0tPnNlbGVjdGVkID8gMSA6IDA7CisJCQlzdHJidWZfYWRkZigmbWVudSwgIiVzJTJkOiAiLCAoKmNob3NlbilbaV0gPyAiKiIgOiAiICIsIGkrMSk7CisJCQlmb3IgKDsgKnA7IHArKykgeworCQkJCWlmICghaGlnaGxpZ2h0ZWQgJiYgKnAgPT0gbWVudV9pdGVtLT5ob3RrZXkpIHsKKwkJCQkJc3RyYnVmX2FkZHN0cigmbWVudSwgY2xlYW5fZ2V0X2NvbG9yKENMRUFOX0NPTE9SX1BST01QVCkpOworCQkJCQlzdHJidWZfYWRkY2goJm1lbnUsICpwKTsKKwkJCQkJc3RyYnVmX2FkZHN0cigmbWVudSwgY2xlYW5fZ2V0X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKSk7CisJCQkJCWhpZ2hsaWdodGVkID0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHJidWZfYWRkY2goJm1lbnUsICpwKTsKKwkJCQl9CisJCQl9CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm1lbnVfbGlzdCwgbWVudS5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZtZW51KTsKKwkJfQorCQlicmVhazsKKwljYXNlIE1FTlVfU1RVRkZfVFlQRV9TVFJJTkdfTElTVDoKKwkJaSA9IDA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oc3RyaW5nX2xpc3RfaXRlbSwgKHN0cnVjdCBzdHJpbmdfbGlzdCAqKXN0dWZmLT5zdHVmZikgeworCQkJaWYgKCgqY2hvc2VuKVtpXSA8IDApCisJCQkJKCpjaG9zZW4pW2ldID0gMDsKKwkJCXN0cmJ1Zl9hZGRmKCZtZW51LCAiJXMlMmQ6ICVzIiwKKwkJCQkgICAgKCpjaG9zZW4pW2ldID8gIioiIDogIiAiLCBpKzEsIHN0cmluZ19saXN0X2l0ZW0tPnN0cmluZyk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm1lbnVfbGlzdCwgbWVudS5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZtZW51KTsKKwkJCWkrKzsKKwkJfQorCQlicmVhazsKKwl9CisKKwlwcmV0dHlfcHJpbnRfbWVudXMoJm1lbnVfbGlzdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmbWVudSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm1lbnVfbGlzdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZmluZF91bmlxdWUoY29uc3QgY2hhciAqY2hvaWNlLCBzdHJ1Y3QgbWVudV9zdHVmZiAqbWVudV9zdHVmZikKK3sKKwlzdHJ1Y3QgbWVudV9pdGVtICptZW51X2l0ZW07CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2l0ZW07CisJaW50IGksIGxlbiwgZm91bmQgPSAwOworCisJbGVuID0gc3RybGVuKGNob2ljZSk7CisJc3dpdGNoIChtZW51X3N0dWZmLT50eXBlKSB7CisJZGVmYXVsdDoKKwkJZGllKCJCYWQgdHlwZSBvZiBtZW51X3N0dWZmIHdoZW4gcGFyc2UgY2hvaWNlIik7CisJY2FzZSBNRU5VX1NUVUZGX1RZUEVfTUVOVV9JVEVNOgorCisJCW1lbnVfaXRlbSA9IChzdHJ1Y3QgbWVudV9pdGVtICopbWVudV9zdHVmZi0+c3R1ZmY7CisJCWZvciAoaSA9IDA7IGkgPCBtZW51X3N0dWZmLT5ucjsgaSsrLCBtZW51X2l0ZW0rKykgeworCQkJaWYgKGxlbiA9PSAxICYmICpjaG9pY2UgPT0gbWVudV9pdGVtLT5ob3RrZXkpIHsKKwkJCQlmb3VuZCA9IGkgKyAxOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKCFzdHJuY2FzZWNtcChjaG9pY2UsIG1lbnVfaXRlbS0+dGl0bGUsIGxlbikpIHsKKwkJCQlpZiAoZm91bmQpIHsKKwkJCQkJaWYgKGxlbiA9PSAxKSB7CisJCQkJCQkvKiBjb250aW51ZSBmb3IgaG90a2V5IG1hdGNoaW5nICovCisJCQkJCQlmb3VuZCA9IC0xOworCQkJCQl9IGVsc2UgeworCQkJCQkJZm91bmQgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlmb3VuZCA9IGkgKyAxOworCQkJCX0KKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIE1FTlVfU1RVRkZfVFlQRV9TVFJJTkdfTElTVDoKKwkJc3RyaW5nX2xpc3RfaXRlbSA9ICgoc3RydWN0IHN0cmluZ19saXN0ICopbWVudV9zdHVmZi0+c3R1ZmYpLT5pdGVtczsKKwkJZm9yIChpID0gMDsgaSA8IG1lbnVfc3R1ZmYtPm5yOyBpKyssIHN0cmluZ19saXN0X2l0ZW0rKykgeworCQkJaWYgKCFzdHJuY2FzZWNtcChjaG9pY2UsIHN0cmluZ19saXN0X2l0ZW0tPnN0cmluZywgbGVuKSkgeworCQkJCWlmIChmb3VuZCkgeworCQkJCQlmb3VuZCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlmb3VuZCA9IGkgKyAxOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKKworLyoKKyAqIFBhcnNlIHVzZXIgaW5wdXQsIGFuZCByZXR1cm4gY2hvaWNlKHMpIGZvciBtZW51IChtZW51X3N0dWZmKS4KKyAqCisgKiBJbnB1dAorICogICAgIChmb3Igc2luZ2xlIGNob2ljZSkKKyAqICAgICAgICAgMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW0KKyAqICAgICAgICAgZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIG1lbnUgdGl0bGUKKyAqICAgICAgICAgICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmcKKyAqCisgKiAgICAgKGZvciBtdWx0aXBsZSBjaG9pY2UpCisgKiAgICAgICAgIDEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbQorICogICAgICAgICAzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMKKyAqICAgICAgICAgMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXMKKyAqICAgICAgICAgZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIG1lbnUgdGl0bGUKKyAqICAgICAgICAgLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcworICogICAgICAgICAqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtcworICogICAgICAgICAgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nCisgKgorICogVGhlIHBhcnNlIHJlc3VsdCB3aWxsIGJlIHNhdmVkIGluIGFycmF5ICoqY2hvc2VuLCBhbmQKKyAqIHJldHVybiBudW1iZXIgb2YgdG90YWwgc2VsZWN0aW9ucy4KKyAqLworc3RhdGljIGludCBwYXJzZV9jaG9pY2Uoc3RydWN0IG1lbnVfc3R1ZmYgKm1lbnVfc3R1ZmYsCisJCQlpbnQgaXNfc2luZ2xlLAorCQkJc3RydWN0IHN0cmJ1ZiBpbnB1dCwKKwkJCWludCAqKmNob3NlbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmICoqY2hvaWNlX2xpc3QsICoqcHRyOworCWludCBuciA9IDA7CisJaW50IGk7CisKKwlpZiAoaXNfc2luZ2xlKSB7CisJCWNob2ljZV9saXN0ID0gc3RyYnVmX3NwbGl0X21heCgmaW5wdXQsICdcbicsIDApOworCX0gZWxzZSB7CisJCWNoYXIgKnAgPSBpbnB1dC5idWY7CisJCWRvIHsKKwkJCWlmICgqcCA9PSAnLCcpCisJCQkJKnAgPSAnICc7CisJCX0gd2hpbGUgKCpwKyspOworCQljaG9pY2VfbGlzdCA9IHN0cmJ1Zl9zcGxpdF9tYXgoJmlucHV0LCAnICcsIDApOworCX0KKworCWZvciAocHRyID0gY2hvaWNlX2xpc3Q7ICpwdHI7IHB0cisrKSB7CisJCWNoYXIgKnA7CisJCWludCBjaG9vc2UgPSAxOworCQlpbnQgYm90dG9tID0gMCwgdG9wID0gMDsKKwkJaW50IGlzX3JhbmdlLCBpc19udW1iZXI7CisKKwkJc3RyYnVmX3RyaW0oKnB0cik7CisJCWlmICghKCpwdHIpLT5sZW4pCisJCQljb250aW51ZTsKKworCQkvKiBJbnB1dCB0aGF0IGJlZ2lucyB3aXRoICctJzsgdW5jaG9vc2UgKi8KKwkJaWYgKCooKnB0ciktPmJ1ZiA9PSAnLScpIHsKKwkJCWNob29zZSA9IDA7CisJCQlzdHJidWZfcmVtb3ZlKCgqcHRyKSwgMCwgMSk7CisJCX0KKworCQlpc19yYW5nZSA9IDA7CisJCWlzX251bWJlciA9IDE7CisJCWZvciAocCA9ICgqcHRyKS0+YnVmOyAqcDsgcCsrKSB7CisJCQlpZiAoJy0nID09ICpwKSB7CisJCQkJaWYgKCFpc19yYW5nZSkgeworCQkJCQlpc19yYW5nZSA9IDE7CisJCQkJCWlzX251bWJlciA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaXNfbnVtYmVyID0gMDsKKwkJCQkJaXNfcmFuZ2UgPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKCFpc2RpZ2l0KCpwKSkgeworCQkJCWlzX251bWJlciA9IDA7CisJCQkJaXNfcmFuZ2UgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGlzX251bWJlcikgeworCQkJYm90dG9tID0gYXRvaSgoKnB0ciktPmJ1Zik7CisJCQl0b3AgPSBib3R0b207CisJCX0gZWxzZSBpZiAoaXNfcmFuZ2UpIHsKKwkJCWJvdHRvbSA9IGF0b2koKCpwdHIpLT5idWYpOworCQkJLyogYSByYW5nZSBjYW4gYmUgc3BlY2lmaWVkIGxpa2UgNS03IG9yIDUtICovCisJCQlpZiAoISooc3RyY2hyKCgqcHRyKS0+YnVmLCAnLScpICsgMSkpCisJCQkJdG9wID0gbWVudV9zdHVmZi0+bnI7CisJCQllbHNlCisJCQkJdG9wID0gYXRvaShzdHJjaHIoKCpwdHIpLT5idWYsICctJykgKyAxKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKCgqcHRyKS0+YnVmLCAiKiIpKSB7CisJCQlib3R0b20gPSAxOworCQkJdG9wID0gbWVudV9zdHVmZi0+bnI7CisJCX0gZWxzZSB7CisJCQlib3R0b20gPSBmaW5kX3VuaXF1ZSgoKnB0ciktPmJ1ZiwgbWVudV9zdHVmZik7CisJCQl0b3AgPSBib3R0b207CisJCX0KKworCQlpZiAodG9wIDw9IDAgfHwgYm90dG9tIDw9IDAgfHwgdG9wID4gbWVudV9zdHVmZi0+bnIgfHwgYm90dG9tID4gdG9wIHx8CisJCSAgICAoaXNfc2luZ2xlICYmIGJvdHRvbSAhPSB0b3ApKSB7CisJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9FUlJPUik7CisJCQlwcmludGYoXygiSHVoICglcyk/XG4iKSwgKCpwdHIpLT5idWYpOworCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGkgPSBib3R0b207IGkgPD0gdG9wOyBpKyspCisJCQkoKmNob3NlbilbaS0xXSA9IGNob29zZTsKKwl9CisKKwlzdHJidWZfbGlzdF9mcmVlKGNob2ljZV9saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBtZW51X3N0dWZmLT5ucjsgaSsrKQorCQluciArPSAoKmNob3NlbilbaV07CisJcmV0dXJuIG5yOworfQorCisvKgorICogSW1wbGVtZW50IGEgZ2l0LWFkZC1pbnRlcmFjdGl2ZSBjb21wYXRpYmxlIFVJLCB3aGljaCBpcyBib3Jyb3dlZAorICogZnJvbSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCisgKiAgIC0gUmV0dXJuIGFuIGFycmF5IG9mIGludGVnZXJzCisgKiAgIC0gLCBhbmQgaXQgaXMgdXAgdG8geW91IHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkuCisgKiAgIC0gVGhlIGFycmF5IGVuZHMgd2l0aCBFT0YuCisgKiAgIC0gSWYgdXNlciBwcmVzc2VkIENUUkwtRCAoaS5lLiBFT0YpLCBubyBzZWxlY3Rpb24gcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgKmxpc3RfYW5kX2Nob29zZShzdHJ1Y3QgbWVudV9vcHRzICpvcHRzLCBzdHJ1Y3QgbWVudV9zdHVmZiAqc3R1ZmYpCit7CisJc3RydWN0IHN0cmJ1ZiBjaG9pY2UgPSBTVFJCVUZfSU5JVDsKKwlpbnQgKmNob3NlbiwgKnJlc3VsdDsKKwlpbnQgbnIgPSAwOworCWludCBlb2YgPSAwOworCWludCBpOworCisJQUxMT0NfQVJSQVkoY2hvc2VuLCBzdHVmZi0+bnIpOworCS8qIHNldCBjaG9zZW4gYXMgdW5pbml0aWFsaXplZCAqLworCWZvciAoaSA9IDA7IGkgPCBzdHVmZi0+bnI7IGkrKykKKwkJY2hvc2VuW2ldID0gLTE7CisKKwlmb3IgKDs7KSB7CisJCWlmIChvcHRzLT5oZWFkZXIpIHsKKwkJCXByaW50Zl9sbigiJXMlcyVzIiwKKwkJCQkgIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9IRUFERVIpLAorCQkJCSAgXyhvcHRzLT5oZWFkZXIpLAorCQkJCSAgY2xlYW5fZ2V0X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKSk7CisJCX0KKworCQkvKiBjaG9zZW4gd2lsbCBiZSBpbml0aWFsaXplZCBieSBwcmludF9oaWdobGlnaHRfbWVudV9zdHVmZiAqLworCQlwcmludF9oaWdobGlnaHRfbWVudV9zdHVmZihzdHVmZiwgJmNob3Nlbik7CisKKwkJaWYgKG9wdHMtPmZsYWdzICYgTUVOVV9PUFRTX0xJU1RfT05MWSkKKwkJCWJyZWFrOworCisJCWlmIChvcHRzLT5wcm9tcHQpIHsKKwkJCXByaW50ZigiJXMlcyVzJXMiLAorCQkJICAgICAgIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9QUk9NUFQpLAorCQkJICAgICAgIF8ob3B0cy0+cHJvbXB0KSwKKwkJCSAgICAgICBvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19TSU5HTEVUT04gPyAiPiAiIDogIj4+ICIsCisJCQkgICAgICAgY2xlYW5fZ2V0X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKSk7CisJCX0KKworCQlpZiAoc3RyYnVmX2dldGxpbmVfbGYoJmNob2ljZSwgc3RkaW4pICE9IEVPRikgeworCQkJc3RyYnVmX3RyaW0oJmNob2ljZSk7CisJCX0gZWxzZSB7CisJCQllb2YgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBoZWxwIGZvciBwcm9tcHQgKi8KKwkJaWYgKCFzdHJjbXAoY2hvaWNlLmJ1ZiwgIj8iKSkgeworCQkJcHJvbXB0X2hlbHBfY21kKG9wdHMtPmZsYWdzICYgTUVOVV9PUFRTX1NJTkdMRVRPTik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGZvciBhIG11bHRpcGxlLWNob2ljZSBtZW51LCBwcmVzcyBFTlRFUiAoZW1wdHkpIHdpbGwgcmV0dXJuIGJhY2sgKi8KKwkJaWYgKCEob3B0cy0+ZmxhZ3MgJiBNRU5VX09QVFNfU0lOR0xFVE9OKSAmJiAhY2hvaWNlLmxlbikKKwkJCWJyZWFrOworCisJCW5yID0gcGFyc2VfY2hvaWNlKHN0dWZmLAorCQkJCSAgb3B0cy0+ZmxhZ3MgJiBNRU5VX09QVFNfU0lOR0xFVE9OLAorCQkJCSAgY2hvaWNlLAorCQkJCSAgJmNob3Nlbik7CisKKwkJaWYgKG9wdHMtPmZsYWdzICYgTUVOVV9PUFRTX1NJTkdMRVRPTikgeworCQkJaWYgKG5yKQorCQkJCWJyZWFrOworCQl9IGVsc2UgaWYgKG9wdHMtPmZsYWdzICYgTUVOVV9PUFRTX0lNTUVESUFURSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZW9mKSB7CisJCXJlc3VsdCA9IHhtYWxsb2Moc2l6ZW9mKGludCkpOworCQkqcmVzdWx0ID0gRU9GOworCX0gZWxzZSB7CisJCWludCBqID0gMDsKKworCQkvKgorCQkgKiByZWNhbGN1bGF0ZSBuciwgaWYgcmV0dXJuIGJhY2sgZnJvbSBtZW51IGRpcmVjdGx5IHdpdGgKKwkJICogZGVmYXVsdCBzZWxlY3Rpb25zLgorCQkgKi8KKwkJaWYgKCFucikgeworCQkJZm9yIChpID0gMDsgaSA8IHN0dWZmLT5ucjsgaSsrKQorCQkJCW5yICs9IGNob3NlbltpXTsKKwkJfQorCisJCXJlc3VsdCA9IHhjYWxsb2Moc3RfYWRkKG5yLCAxKSwgc2l6ZW9mKGludCkpOworCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yICYmIGogPCBucjsgaSsrKSB7CisJCQlpZiAoY2hvc2VuW2ldKQorCQkJCXJlc3VsdFtqKytdID0gaTsKKwkJfQorCQlyZXN1bHRbal0gPSBFT0Y7CisJfQorCisJZnJlZShjaG9zZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZjaG9pY2UpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgY2xlYW5fY21kKHZvaWQpCit7CisJcmV0dXJuIE1FTlVfUkVUVVJOX05PX0xPT1A7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX2J5X3BhdHRlcm5zX2NtZCh2b2lkKQoreworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbmZpcm0gPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmICoqaWdub3JlX2xpc3Q7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGw7CisJaW50IGNoYW5nZWQgPSAtMSwgaTsKKworCWZvciAoOzspIHsKKwkJaWYgKCFkZWxfbGlzdC5ucikKKwkJCWJyZWFrOworCisJCWlmIChjaGFuZ2VkKQorCQkJcHJldHR5X3ByaW50X2RlbHMoKTsKKworCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9QUk9NUFQpOworCQlwcmludGYoXygiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIikpOworCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCk7CisJCWlmIChzdHJidWZfZ2V0bGluZV9sZigmY29uZmlybSwgc3RkaW4pICE9IEVPRikKKwkJCXN0cmJ1Zl90cmltKCZjb25maXJtKTsKKwkJZWxzZQorCQkJcHV0Y2hhcignXG4nKTsKKworCQkvKiBxdWl0IGZpbHRlcl9ieV9wYXR0ZXJuIG1vZGUgaWYgcHJlc3MgRU5URVIgb3IgQ3RybC1EICovCisJCWlmICghY29uZmlybS5sZW4pCisJCQlicmVhazsKKworCQltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCQlwbCA9IGFkZF9wYXR0ZXJuX2xpc3QoJmRpciwgRVhDX0NNREwsICJtYW51YWwgZXhjbHVkZSIpOworCQlpZ25vcmVfbGlzdCA9IHN0cmJ1Zl9zcGxpdF9tYXgoJmNvbmZpcm0sICcgJywgMCk7CisKKwkJZm9yIChpID0gMDsgaWdub3JlX2xpc3RbaV07IGkrKykgeworCQkJc3RyYnVmX3RyaW0oaWdub3JlX2xpc3RbaV0pOworCQkJaWYgKCFpZ25vcmVfbGlzdFtpXS0+bGVuKQorCQkJCWNvbnRpbnVlOworCisJCQlhZGRfcGF0dGVybihpZ25vcmVfbGlzdFtpXS0+YnVmLCAiIiwgMCwgcGwsIC0oaSsxKSk7CisJCX0KKworCQljaGFuZ2VkID0gMDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJCWludCBkdHlwZSA9IERUX1VOS05PV047CisKKwkJCWlmIChpc19leGNsdWRlZCgmZGlyLCAmdGhlX2luZGV4LCBpdGVtLT5zdHJpbmcsICZkdHlwZSkpIHsKKwkJCQkqaXRlbS0+c3RyaW5nID0gJ1wwJzsKKwkJCQljaGFuZ2VkKys7CisJCQl9CisJCX0KKworCQlpZiAoY2hhbmdlZCkgeworCQkJc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zKCZkZWxfbGlzdCwgMCk7CisJCX0gZWxzZSB7CisJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9FUlJPUik7CisJCQlwcmludGZfbG4oXygiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiKSwgY29uZmlybS5idWYpOworCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworCQl9CisKKwkJc3RyYnVmX2xpc3RfZnJlZShpZ25vcmVfbGlzdCk7CisJCWNsZWFyX2RpcmVjdG9yeSgmZGlyKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmY29uZmlybSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X2J5X251bWJlcnNfY21kKHZvaWQpCit7CisJc3RydWN0IG1lbnVfb3B0cyBtZW51X29wdHM7CisJc3RydWN0IG1lbnVfc3R1ZmYgbWVudV9zdHVmZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbXM7CisJaW50ICpjaG9zZW47CisJaW50IGksIGo7CisKKwltZW51X29wdHMuaGVhZGVyID0gTlVMTDsKKwltZW51X29wdHMucHJvbXB0ID0gTl8oIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiKTsKKwltZW51X29wdHMuZmxhZ3MgPSAwOworCisJbWVudV9zdHVmZi50eXBlID0gTUVOVV9TVFVGRl9UWVBFX1NUUklOR19MSVNUOworCW1lbnVfc3R1ZmYuc3R1ZmYgPSAmZGVsX2xpc3Q7CisJbWVudV9zdHVmZi5uciA9IGRlbF9saXN0Lm5yOworCisJY2hvc2VuID0gbGlzdF9hbmRfY2hvb3NlKCZtZW51X29wdHMsICZtZW51X3N0dWZmKTsKKwlpdGVtcyA9IGRlbF9saXN0Lml0ZW1zOworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgZGVsX2xpc3QubnI7IGkrKykgeworCQlpZiAoaSA8IGNob3NlbltqXSkgeworCQkJKihpdGVtc1tpXS5zdHJpbmcpID0gJ1wwJzsKKwkJfSBlbHNlIGlmIChpID09IGNob3NlbltqXSkgeworCQkJLyogZGVsZXRlIHNlbGVjdGVkIGl0ZW0gKi8KKwkJCWorKzsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogZW5kIG9mIGNob3NlbiAoY2hvc2VuW2pdID09IEVPRiksIHdvbid0IGRlbGV0ZSAqLworCQkJKihpdGVtc1tpXS5zdHJpbmcpID0gJ1wwJzsKKwkJfQorCX0KKworCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmZGVsX2xpc3QsIDApOworCisJZnJlZShjaG9zZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFza19lYWNoX2NtZCh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgY29uZmlybSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29uc3QgY2hhciAqcW5hbWU7CisJaW50IGNoYW5nZWQgPSAwLCBlb2YgPSAwOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJLyogQ3RybC1EIHNob3VsZCBzdG9wIHJlbW92aW5nIGZpbGVzICovCisJCWlmICghZW9mKSB7CisJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKKwkJCS8qIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcyAqLworCQkJcHJpbnRmKF8oIlJlbW92ZSAlcyBbeS9OXT8gIiksIHFuYW1lKTsKKwkJCWlmIChzdHJidWZfZ2V0bGluZV9sZigmY29uZmlybSwgc3RkaW4pICE9IEVPRikgeworCQkJCXN0cmJ1Zl90cmltKCZjb25maXJtKTsKKwkJCX0gZWxzZSB7CisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCQllb2YgPSAxOworCQkJfQorCQl9CisJCWlmICghY29uZmlybS5sZW4gfHwgc3RybmNhc2VjbXAoY29uZmlybS5idWYsICJ5ZXMiLCBjb25maXJtLmxlbikpIHsKKwkJCSppdGVtLT5zdHJpbmcgPSAnXDAnOworCQkJY2hhbmdlZCsrOworCQl9CisJfQorCisJaWYgKGNoYW5nZWQpCisJCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmZGVsX2xpc3QsIDApOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmNvbmZpcm0pOworCXJldHVybiBNRU5VX1JFVFVSTl9OT19MT09QOworfQorCitzdGF0aWMgaW50IHF1aXRfY21kKHZvaWQpCit7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRlbF9saXN0LCAwKTsKKwlwcmludGYoXygiQnllLlxuIikpOworCXJldHVybiBNRU5VX1JFVFVSTl9OT19MT09QOworfQorCitzdGF0aWMgaW50IGhlbHBfY21kKHZvaWQpCit7CisJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfSEVMUCk7CisJcHJpbnRmX2xuKF8oCisJCSAgICAiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisJCSAgICAiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorCQkgICAgInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisJCSAgICAiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisJCSAgICAicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKwkJICAgICJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKwkJICAgICI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKKwkJICAgKSk7CisJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbnRlcmFjdGl2ZV9tYWluX2xvb3Aodm9pZCkKK3sKKwl3aGlsZSAoZGVsX2xpc3QubnIpIHsKKwkJc3RydWN0IG1lbnVfb3B0cyBtZW51X29wdHM7CisJCXN0cnVjdCBtZW51X3N0dWZmIG1lbnVfc3R1ZmY7CisJCXN0cnVjdCBtZW51X2l0ZW0gbWVudXNbXSA9IHsKKwkJCXsnYycsICJjbGVhbiIsCQkJMCwgY2xlYW5fY21kfSwKKwkJCXsnZicsICJmaWx0ZXIgYnkgcGF0dGVybiIsCTAsIGZpbHRlcl9ieV9wYXR0ZXJuc19jbWR9LAorCQkJeydzJywgInNlbGVjdCBieSBudW1iZXJzIiwJMCwgc2VsZWN0X2J5X251bWJlcnNfY21kfSwKKwkJCXsnYScsICJhc2sgZWFjaCIsCQkwLCBhc2tfZWFjaF9jbWR9LAorCQkJeydxJywgInF1aXQiLAkJCTAsIHF1aXRfY21kfSwKKwkJCXsnaCcsICJoZWxwIiwJCQkwLCBoZWxwX2NtZH0sCisJCX07CisJCWludCAqY2hvc2VuOworCisJCW1lbnVfb3B0cy5oZWFkZXIgPSBOXygiKioqIENvbW1hbmRzICoqKiIpOworCQltZW51X29wdHMucHJvbXB0ID0gTl8oIldoYXQgbm93Iik7CisJCW1lbnVfb3B0cy5mbGFncyA9IE1FTlVfT1BUU19TSU5HTEVUT047CisKKwkJbWVudV9zdHVmZi50eXBlID0gTUVOVV9TVFVGRl9UWVBFX01FTlVfSVRFTTsKKwkJbWVudV9zdHVmZi5zdHVmZiA9IG1lbnVzOworCQltZW51X3N0dWZmLm5yID0gc2l6ZW9mKG1lbnVzKSAvIHNpemVvZihzdHJ1Y3QgbWVudV9pdGVtKTsKKworCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9IRUFERVIpOworCQlwcmludGZfbG4oUV8oIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IiwKKwkJCSAgICAgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIsCisJCQkgICAgIGRlbF9saXN0Lm5yKSk7CisJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKKworCQlwcmV0dHlfcHJpbnRfZGVscygpOworCisJCWNob3NlbiA9IGxpc3RfYW5kX2Nob29zZSgmbWVudV9vcHRzLCAmbWVudV9zdHVmZik7CisKKwkJaWYgKCpjaG9zZW4gIT0gRU9GKSB7CisJCQlpbnQgcmV0OworCQkJcmV0ID0gbWVudXNbKmNob3Nlbl0uZm4oKTsKKwkJCWlmIChyZXQgIT0gTUVOVV9SRVRVUk5fTk9fTE9PUCkgeworCQkJCUZSRUVfQU5EX05VTEwoY2hvc2VuKTsKKwkJCQlpZiAoIWRlbF9saXN0Lm5yKSB7CisJCQkJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX0VSUk9SKTsKKwkJCQkJcHJpbnRmX2xuKF8oIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIikpOworCQkJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXF1aXRfY21kKCk7CisJCX0KKworCQlGUkVFX0FORF9OVUxMKGNob3Nlbik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY29ycmVjdF91bnRyYWNrZWRfZW50cmllcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQoreworCWludCBzcmMsIGRzdCwgaWduOworCisJZm9yIChzcmMgPSBkc3QgPSBpZ24gPSAwOyBzcmMgPCBkaXItPm5yOyBzcmMrKykgeworCQkvKiBza2lwIHBhdGhzIGluIGlnbm9yZWRbXSB0aGF0IGNhbm5vdCBiZSBpbnNpZGUgZW50cmllc1tzcmNdICovCisJCXdoaWxlIChpZ24gPCBkaXItPmlnbm9yZWRfbnIgJiYKKwkJICAgICAgIDAgPD0gY21wX2Rpcl9lbnRyeSgmZGlyLT5lbnRyaWVzW3NyY10sICZkaXItPmlnbm9yZWRbaWduXSkpCisJCQlpZ24rKzsKKworCQlpZiAoaWduIDwgZGlyLT5pZ25vcmVkX25yICYmCisJCSAgICBjaGVja19kaXJfZW50cnlfY29udGFpbnMoZGlyLT5lbnRyaWVzW3NyY10sIGRpci0+aWdub3JlZFtpZ25dKSkgeworCQkJLyogZW50cmllc1tzcmNdIGNvbnRhaW5zIGFuIGlnbm9yZWQgcGF0aCwgc28gd2UgZHJvcCBpdCAqLworCQkJZnJlZShkaXItPmVudHJpZXNbc3JjXSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXItPmVudHJpZXNbc3JjKytdOworCisJCQkvKiBlbnRyaWVzW3NyY10gZG9lcyBub3QgY29udGFpbiBhbiBpZ25vcmVkIHBhdGgsIHNvIHdlIGtlZXAgaXQgKi8KKwkJCWRpci0+ZW50cmllc1tkc3QrK10gPSBlbnQ7CisKKwkJCS8qIHRoZW4gZGlzY2FyZCBwYXRocyBpbiBlbnRyaWVzW10gY29udGFpbmVkIGluc2lkZSBlbnRyaWVzW3NyY10gKi8KKwkJCXdoaWxlIChzcmMgPCBkaXItPm5yICYmCisJCQkgICAgICAgY2hlY2tfZGlyX2VudHJ5X2NvbnRhaW5zKGVudCwgZGlyLT5lbnRyaWVzW3NyY10pKQorCQkJCWZyZWUoZGlyLT5lbnRyaWVzW3NyYysrXSk7CisKKwkJCS8qIGNvbXBlbnNhdGUgZm9yIHRoZSBvdXRlciBsb29wJ3MgbG9vcCBjb250cm9sICovCisJCQlzcmMtLTsKKwkJfQorCX0KKwlkaXItPm5yID0gZHN0OworfQorCitpbnQgY21kX2NsZWFuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCByZXM7CisJaW50IGRyeV9ydW4gPSAwLCByZW1vdmVfZGlyZWN0b3JpZXMgPSAwLCBxdWlldCA9IDAsIGlnbm9yZWQgPSAwOworCWludCBpZ25vcmVkX29ubHkgPSAwLCBjb25maWdfc2V0ID0gMCwgZXJyb3JzID0gMCwgZ29uZSA9IDE7CisJaW50IHJtX2ZsYWdzID0gUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQ7CisJc3RydWN0IHN0cmJ1ZiBhYnNfcGF0aCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhjbHVkZV9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwljb25zdCBjaGFyICpxbmFtZTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIpKSwKKwkJT1BUX19EUllfUlVOKCZkcnlfcnVuLCBOXygiZHJ5IHJ1biIpKSwKKwkJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJmb3JjZSIpLCBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9CT09MKCdpJywgImludGVyYWN0aXZlIiwgJmludGVyYWN0aXZlLCBOXygiaW50ZXJhY3RpdmUgY2xlYW5pbmciKSksCisJCU9QVF9CT09MKCdkJywgTlVMTCwgJnJlbW92ZV9kaXJlY3RvcmllcywKKwkJCQlOXygicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2UnLCAiZXhjbHVkZSIsICZleGNsdWRlX2xpc3QsIE5fKCJwYXR0ZXJuIiksCisJCSAgTl8oImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIiksIFBBUlNFX09QVF9OT05FRywgZXhjbHVkZV9jYiB9LAorCQlPUFRfQk9PTCgneCcsIE5VTEwsICZpZ25vcmVkLCBOXygicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIpKSwKKwkJT1BUX0JPT0woJ1gnLCBOVUxMLCAmaWdub3JlZF9vbmx5LAorCQkJCU5fKCJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfY2xlYW5fY29uZmlnLCBOVUxMKTsKKwlpZiAoZm9yY2UgPCAwKQorCQlmb3JjZSA9IDA7CisJZWxzZQorCQljb25maWdfc2V0ID0gMTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgYnVpbHRpbl9jbGVhbl91c2FnZSwKKwkJCSAgICAgMCk7CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCWlmIChpZ25vcmVkX29ubHkpCisJCWRpci5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOworCisJaWYgKGlnbm9yZWQgJiYgaWdub3JlZF9vbmx5KQorCQlkaWUoXygiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIikpOworCisJaWYgKCFpbnRlcmFjdGl2ZSAmJiAhZHJ5X3J1biAmJiAhZm9yY2UpIHsKKwkJaWYgKGNvbmZpZ19zZXQpCisJCQlkaWUoXygiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisJCQkJICAicmVmdXNpbmcgdG8gY2xlYW4iKSk7CisJCWVsc2UKKwkJCWRpZShfKCJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsiCisJCQkJICAiIHJlZnVzaW5nIHRvIGNsZWFuIikpOworCX0KKworCWlmIChmb3JjZSA+IDEpCisJCXJtX2ZsYWdzID0gMDsKKwllbHNlCisJCWRpci5mbGFncyB8PSBESVJfU0tJUF9ORVNURURfR0lUOworCisJZGlyLmZsYWdzIHw9IERJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTOworCisJaWYgKGFyZ2MpIHsKKwkJLyoKKwkJICogUmVtYWluaW5nIGFyZ3MgaW1wbGllcyBwYXRoc3BlY3Mgc3BlY2lmaWVkLCBhbmQgd2Ugc2hvdWxkCisJCSAqIHJlY3Vyc2Ugd2l0aGluIHRob3NlLgorCQkgKi8KKwkJcmVtb3ZlX2RpcmVjdG9yaWVzID0gMTsKKwl9CisKKwlpZiAocmVtb3ZlX2RpcmVjdG9yaWVzKQorCQlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRF9UT08gfCBESVJfS0VFUF9VTlRSQUNLRURfQ09OVEVOVFM7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWlmICghaWdub3JlZCkKKwkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisKKwlwbCA9IGFkZF9wYXR0ZXJuX2xpc3QoJmRpciwgRVhDX0NNREwsICItLWV4Y2x1ZGUgb3B0aW9uIik7CisJZm9yIChpID0gMDsgaSA8IGV4Y2x1ZGVfbGlzdC5ucjsgaSsrKQorCQlhZGRfcGF0dGVybihleGNsdWRlX2xpc3QuaXRlbXNbaV0uc3RyaW5nLCAiIiwgMCwgcGwsIC0oaSsxKSk7CisKKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dELAorCQkgICAgICAgcHJlZml4LCBhcmd2KTsKKworCWZpbGxfZGlyZWN0b3J5KCZkaXIsICZ0aGVfaW5kZXgsICZwYXRoc3BlYyk7CisJY29ycmVjdF91bnRyYWNrZWRfZW50cmllcygmZGlyKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKwkJaW50IG1hdGNoZXMgPSAwOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJY29uc3QgY2hhciAqcmVsOworCisJCWlmICghY2FjaGVfbmFtZV9pc19vdGhlcihlbnQtPm5hbWUsIGVudC0+bGVuKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXRoc3BlYy5ucikKKwkJCW1hdGNoZXMgPSBkaXJfcGF0aF9tYXRjaCgmdGhlX2luZGV4LCBlbnQsICZwYXRoc3BlYywgMCwgTlVMTCk7CisKKwkJaWYgKHBhdGhzcGVjLm5yICYmICFtYXRjaGVzKQorCQkJY29udGludWU7CisKKwkJaWYgKGxzdGF0KGVudC0+bmFtZSwgJnN0KSkKKwkJCWRpZV9lcnJubygiQ2Fubm90IGxzdGF0ICclcyciLCBlbnQtPm5hbWUpOworCisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpICYmICFyZW1vdmVfZGlyZWN0b3JpZXMgJiYKKwkJICAgIG1hdGNoZXMgIT0gTUFUQ0hFRF9FWEFDVExZKQorCQkJY29udGludWU7CisKKwkJcmVsID0gcmVsYXRpdmVfcGF0aChlbnQtPm5hbWUsIHByZWZpeCwgJmJ1Zik7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVsX2xpc3QsIHJlbCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRpci5ucjsgaSsrKQorCQlmcmVlKGRpci5lbnRyaWVzW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXIuaWdub3JlZF9ucjsgaSsrKQorCQlmcmVlKGRpci5pZ25vcmVkW2ldKTsKKworCWlmIChpbnRlcmFjdGl2ZSAmJiBkZWxfbGlzdC5uciA+IDApCisJCWludGVyYWN0aXZlX21haW5fbG9vcCgpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJc3RyYnVmX3Jlc2V0KCZhYnNfcGF0aCk7CisJCWlmIChwcmVmaXgpCisJCQlzdHJidWZfYWRkc3RyKCZhYnNfcGF0aCwgcHJlZml4KTsKKworCQlzdHJidWZfYWRkc3RyKCZhYnNfcGF0aCwgaXRlbS0+c3RyaW5nKTsKKworCQkvKgorCQkgKiB3ZSBtaWdodCBoYXZlIHJlbW92ZWQgdGhpcyBhcyBwYXJ0IG9mIGVhcmxpZXIKKwkJICogcmVjdXJzaXZlIGRpcmVjdG9yeSByZW1vdmFsLCBzbyBsc3RhdCgpIGhlcmUgY291bGQKKwkJICogZmFpbCB3aXRoIEVOT0VOVC4KKwkJICovCisJCWlmIChsc3RhdChhYnNfcGF0aC5idWYsICZzdCkpCisJCQljb250aW51ZTsKKworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJaWYgKHJlbW92ZV9kaXJzKCZhYnNfcGF0aCwgcHJlZml4LCBybV9mbGFncywgZHJ5X3J1biwgcXVpZXQsICZnb25lKSkKKwkJCQllcnJvcnMrKzsKKwkJCWlmIChnb25lICYmICFxdWlldCkgeworCQkJCXFuYW1lID0gcXVvdGVfcGF0aF9yZWxhdGl2ZShpdGVtLT5zdHJpbmcsIE5VTEwsICZidWYpOworCQkJCXByaW50ZihkcnlfcnVuID8gXyhtc2dfd291bGRfcmVtb3ZlKSA6IF8obXNnX3JlbW92ZSksIHFuYW1lKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJlcyA9IGRyeV9ydW4gPyAwIDogdW5saW5rKGFic19wYXRoLmJ1Zik7CisJCQlpZiAocmVzKSB7CisJCQkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCQkJcW5hbWUgPSBxdW90ZV9wYXRoX3JlbGF0aXZlKGl0ZW0tPnN0cmluZywgTlVMTCwgJmJ1Zik7CisJCQkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJCQl3YXJuaW5nX2Vycm5vKF8obXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCksIHFuYW1lKTsKKwkJCQllcnJvcnMrKzsKKwkJCX0gZWxzZSBpZiAoIXF1aWV0KSB7CisJCQkJcW5hbWUgPSBxdW90ZV9wYXRoX3JlbGF0aXZlKGl0ZW0tPnN0cmluZywgTlVMTCwgJmJ1Zik7CisJCQkJcHJpbnRmKGRyeV9ydW4gPyBfKG1zZ193b3VsZF9yZW1vdmUpIDogXyhtc2dfcmVtb3ZlKSwgcW5hbWUpOworCQkJfQorCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmFic19wYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZGVsX2xpc3QsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZleGNsdWRlX2xpc3QsIDApOworCXJldHVybiAoZXJyb3JzICE9IDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbG9uZS5jIGIvYnVpbHRpbi9jbG9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZDI2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Nsb25lLmMKQEAgLTAsMCArMSwxMzA5IEBACisvKgorICogQnVpbHRpbiAiZ2l0IGNsb25lIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPiwKKyAqCQkgMjAwOCBEYW5pZWwgQmFya2Fsb3cgPGJhcmthbG93QGlhYmVydm9uLm9yZz4KKyAqIEJhc2VkIG9uIGdpdC1jb21taXQuc2ggYnkgSnVuaW8gQyBIYW1hbm8gYW5kIExpbnVzIFRvcnZhbGRzCisgKgorICogQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LgorICovCisKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJmZXRjaC1wYWNrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiZGlyLWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiY29ubmVjdGVkLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKworLyoKKyAqIE92ZXJhbGwgRklYTUVzOgorICogIC0gcmVzcGVjdCBEQl9FTlZJUk9OTUVOVCBmb3IgLmdpdC9vYmplY3RzLgorICoKKyAqIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICogIC0gZHJvcHBpbmcgdXNlLXNlcGFyYXRlLXJlbW90ZSBhbmQgbm8tc2VwYXJhdGUtcmVtb3RlIGNvbXBhdGliaWxpdHkKKyAqCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jbG9uZV91c2FnZVtdID0geworCU5fKCJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgb3B0aW9uX25vX2NoZWNrb3V0LCBvcHRpb25fYmFyZSwgb3B0aW9uX21pcnJvciwgb3B0aW9uX3NpbmdsZV9icmFuY2ggPSAtMTsKK3N0YXRpYyBpbnQgb3B0aW9uX2xvY2FsID0gLTEsIG9wdGlvbl9ub19oYXJkbGlua3MsIG9wdGlvbl9zaGFyZWQ7CitzdGF0aWMgaW50IG9wdGlvbl9ub190YWdzOworc3RhdGljIGludCBvcHRpb25fc2hhbGxvd19zdWJtb2R1bGVzOworc3RhdGljIGludCBkZWVwZW47CitzdGF0aWMgY2hhciAqb3B0aW9uX3RlbXBsYXRlLCAqb3B0aW9uX2RlcHRoLCAqb3B0aW9uX3NpbmNlOworc3RhdGljIGNoYXIgKm9wdGlvbl9vcmlnaW4gPSBOVUxMOworc3RhdGljIGNoYXIgKm9wdGlvbl9icmFuY2ggPSBOVUxMOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvcHRpb25fbm90ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBjb25zdCBjaGFyICpyZWFsX2dpdF9kaXI7CitzdGF0aWMgY2hhciAqb3B0aW9uX3VwbG9hZF9wYWNrID0gImdpdC11cGxvYWQtcGFjayI7CitzdGF0aWMgaW50IG9wdGlvbl92ZXJib3NpdHk7CitzdGF0aWMgaW50IG9wdGlvbl9wcm9ncmVzcyA9IC0xOworc3RhdGljIGludCBvcHRpb25fc3BhcnNlX2NoZWNrb3V0Oworc3RhdGljIGVudW0gdHJhbnNwb3J0X2ZhbWlseSBmYW1pbHk7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG9wdGlvbl9jb25maWcgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvcHRpb25fcmVxdWlyZWRfcmVmZXJlbmNlID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3B0aW9uX29wdGlvbmFsX3JlZmVyZW5jZSA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IG9wdGlvbl9kaXNzb2NpYXRlOworc3RhdGljIGludCBtYXhfam9icyA9IC0xOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvcHRpb25fcmVjdXJzZV9zdWJtb2R1bGVzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBzZXJ2ZXJfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IG9wdGlvbl9yZW1vdGVfc3VibW9kdWxlczsKKworc3RhdGljIGludCByZWN1cnNlX3N1Ym1vZHVsZXNfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXN0cmluZ19saXN0X2NsZWFyKChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKilvcHQtPnZhbHVlLCAwKTsKKwllbHNlIGlmIChhcmcpCisJCXN0cmluZ19saXN0X2FwcGVuZCgoc3RydWN0IHN0cmluZ19saXN0ICopb3B0LT52YWx1ZSwgYXJnKTsKKwllbHNlCisJCXN0cmluZ19saXN0X2FwcGVuZCgoc3RydWN0IHN0cmluZ19saXN0ICopb3B0LT52YWx1ZSwKKwkJCQkgICAoY29uc3QgY2hhciAqKW9wdC0+ZGVmdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2Nsb25lX29wdGlvbnNbXSA9IHsKKwlPUFRfX1ZFUkJPU0lUWSgmb3B0aW9uX3ZlcmJvc2l0eSksCisJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJm9wdGlvbl9wcm9ncmVzcywKKwkJIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJT1BUX0JPT0woJ24nLCAibm8tY2hlY2tvdXQiLCAmb3B0aW9uX25vX2NoZWNrb3V0LAorCQkgTl8oImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IikpLAorCU9QVF9CT09MKDAsICJiYXJlIiwgJm9wdGlvbl9iYXJlLCBOXygiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IikpLAorCU9QVF9ISURERU5fQk9PTCgwLCAibmFrZWQiLCAmb3B0aW9uX2JhcmUsCisJCQlOXygiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IikpLAorCU9QVF9CT09MKDAsICJtaXJyb3IiLCAmb3B0aW9uX21pcnJvciwKKwkJIE5fKCJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIpKSwKKwlPUFRfQk9PTCgnbCcsICJsb2NhbCIsICZvcHRpb25fbG9jYWwsCisJCU5fKCJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIpKSwKKwlPUFRfQk9PTCgwLCAibm8taGFyZGxpbmtzIiwgJm9wdGlvbl9ub19oYXJkbGlua3MsCisJCSAgICBOXygiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiKSksCisJT1BUX0JPT0woJ3MnLCAic2hhcmVkIiwgJm9wdGlvbl9zaGFyZWQsCisJCSAgICBOXygic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiKSksCisJT1BUX0FMSUFTKDAsICJyZWN1cnNpdmUiLCAicmVjdXJzZS1zdWJtb2R1bGVzIiksCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZWN1cnNlLXN1Ym1vZHVsZXMiLCAmb3B0aW9uX3JlY3Vyc2Vfc3VibW9kdWxlcywKKwkgIE5fKCJwYXRoc3BlYyIpLCBOXygiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIpLAorCSAgUEFSU0VfT1BUX09QVEFSRywgcmVjdXJzZV9zdWJtb2R1bGVzX2NiLCAoaW50cHRyX3QpIi4iIH0sCisJT1BUX0lOVEVHRVIoJ2onLCAiam9icyIsICZtYXhfam9icywKKwkJICAgIE5fKCJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiKSksCisJT1BUX1NUUklORygwLCAidGVtcGxhdGUiLCAmb3B0aW9uX3RlbXBsYXRlLCBOXygidGVtcGxhdGUtZGlyZWN0b3J5IiksCisJCSAgIE5fKCJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIikpLAorCU9QVF9TVFJJTkdfTElTVCgwLCAicmVmZXJlbmNlIiwgJm9wdGlvbl9yZXF1aXJlZF9yZWZlcmVuY2UsIE5fKCJyZXBvIiksCisJCQlOXygicmVmZXJlbmNlIHJlcG9zaXRvcnkiKSksCisJT1BUX1NUUklOR19MSVNUKDAsICJyZWZlcmVuY2UtaWYtYWJsZSIsICZvcHRpb25fb3B0aW9uYWxfcmVmZXJlbmNlLAorCQkJTl8oInJlcG8iKSwgTl8oInJlZmVyZW5jZSByZXBvc2l0b3J5IikpLAorCU9QVF9CT09MKDAsICJkaXNzb2NpYXRlIiwgJm9wdGlvbl9kaXNzb2NpYXRlLAorCQkgTl8oInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciKSksCisJT1BUX1NUUklORygnbycsICJvcmlnaW4iLCAmb3B0aW9uX29yaWdpbiwgTl8oIm5hbWUiKSwKKwkJICAgTl8oInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIpKSwKKwlPUFRfU1RSSU5HKCdiJywgImJyYW5jaCIsICZvcHRpb25fYnJhbmNoLCBOXygiYnJhbmNoIiksCisJCSAgIE5fKCJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIikpLAorCU9QVF9TVFJJTkcoJ3UnLCAidXBsb2FkLXBhY2siLCAmb3B0aW9uX3VwbG9hZF9wYWNrLCBOXygicGF0aCIpLAorCQkgICBOXygicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIpKSwKKwlPUFRfU1RSSU5HKDAsICJkZXB0aCIsICZvcHRpb25fZGVwdGgsIE5fKCJkZXB0aCIpLAorCQkgICAgTl8oImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIpKSwKKwlPUFRfU1RSSU5HKDAsICJzaGFsbG93LXNpbmNlIiwgJm9wdGlvbl9zaW5jZSwgTl8oInRpbWUiKSwKKwkJICAgIE5fKCJjcmVhdGUgYSBzaGFsbG93IGNsb25lIHNpbmNlIGEgc3BlY2lmaWMgdGltZSIpKSwKKwlPUFRfU1RSSU5HX0xJU1QoMCwgInNoYWxsb3ctZXhjbHVkZSIsICZvcHRpb25fbm90LCBOXygicmV2aXNpb24iKSwKKwkJCU5fKCJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IikpLAorCU9QVF9CT09MKDAsICJzaW5nbGUtYnJhbmNoIiwgJm9wdGlvbl9zaW5nbGVfYnJhbmNoLAorCQkgICAgTl8oImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIpKSwKKwlPUFRfQk9PTCgwLCAibm8tdGFncyIsICZvcHRpb25fbm9fdGFncywKKwkJIE5fKCJkb24ndCBjbG9uZSBhbnkgdGFncywgYW5kIG1ha2UgbGF0ZXIgZmV0Y2hlcyBub3QgdG8gZm9sbG93IHRoZW0iKSksCisJT1BUX0JPT0woMCwgInNoYWxsb3ctc3VibW9kdWxlcyIsICZvcHRpb25fc2hhbGxvd19zdWJtb2R1bGVzLAorCQkgICAgTl8oImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciKSksCisJT1BUX1NUUklORygwLCAic2VwYXJhdGUtZ2l0LWRpciIsICZyZWFsX2dpdF9kaXIsIE5fKCJnaXRkaXIiKSwKKwkJICAgTl8oInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiKSksCisJT1BUX1NUUklOR19MSVNUKCdjJywgImNvbmZpZyIsICZvcHRpb25fY29uZmlnLCBOXygia2V5PXZhbHVlIiksCisJCQlOXygic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IikpLAorCU9QVF9TVFJJTkdfTElTVCgwLCAic2VydmVyLW9wdGlvbiIsICZzZXJ2ZXJfb3B0aW9ucywKKwkJCU5fKCJzZXJ2ZXItc3BlY2lmaWMiKSwgTl8oIm9wdGlvbiB0byB0cmFuc21pdCIpKSwKKwlPUFRfU0VUX0lOVCgnNCcsICJpcHY0IiwgJmZhbWlseSwgTl8oInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IiksCisJCQlUUkFOU1BPUlRfRkFNSUxZX0lQVjQpLAorCU9QVF9TRVRfSU5UKCc2JywgImlwdjYiLCAmZmFtaWx5LCBOXygidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiKSwKKwkJCVRSQU5TUE9SVF9GQU1JTFlfSVBWNiksCisJT1BUX1BBUlNFX0xJU1RfT0JKRUNUU19GSUxURVIoJmZpbHRlcl9vcHRpb25zKSwKKwlPUFRfQk9PTCgwLCAicmVtb3RlLXN1Ym1vZHVsZXMiLCAmb3B0aW9uX3JlbW90ZV9zdWJtb2R1bGVzLAorCQkgICAgTl8oImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIikpLAorCU9QVF9CT09MKDAsICJzcGFyc2UiLCAmb3B0aW9uX3NwYXJzZV9jaGVja291dCwKKwkJICAgIE5fKCJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZXBvX3BhdGhfMShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgKmlzX2J1bmRsZSkKK3sKKwlzdGF0aWMgY2hhciAqc3VmZml4W10gPSB7ICIvLmdpdCIsICIiLCAiLmdpdC8uZ2l0IiwgIi5naXQiIH07CisJc3RhdGljIGNoYXIgKmJ1bmRsZV9zdWZmaXhbXSA9IHsgIi5idW5kbGUiLCAiIiB9OworCXNpemVfdCBiYXNlbGVuID0gcGF0aC0+bGVuOworCXN0cnVjdCBzdGF0IHN0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VmZml4KTsgaSsrKSB7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgc3VmZml4W2ldKTsKKwkJaWYgKHN0YXQocGF0aC0+YnVmLCAmc3QpKQorCQkJY29udGludWU7CisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpICYmIGlzX2dpdF9kaXJlY3RvcnkocGF0aC0+YnVmKSkgeworCQkJKmlzX2J1bmRsZSA9IDA7CisJCQlyZXR1cm4gcGF0aC0+YnVmOworCQl9IGVsc2UgaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkgJiYgc3Quc3Rfc2l6ZSA+IDgpIHsKKwkJCS8qIElzIGl0IGEgImdpdGZpbGUiPyAqLworCQkJY2hhciBzaWduYXR1cmVbOF07CisJCQljb25zdCBjaGFyICpkc3Q7CisJCQlpbnQgbGVuLCBmZCA9IG9wZW4ocGF0aC0+YnVmLCBPX1JET05MWSk7CisJCQlpZiAoZmQgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJbGVuID0gcmVhZF9pbl9mdWxsKGZkLCBzaWduYXR1cmUsIDgpOworCQkJY2xvc2UoZmQpOworCQkJaWYgKGxlbiAhPSA4IHx8IHN0cm5jbXAoc2lnbmF0dXJlLCAiZ2l0ZGlyOiAiLCA4KSkKKwkJCQljb250aW51ZTsKKwkJCWRzdCA9IHJlYWRfZ2l0ZmlsZShwYXRoLT5idWYpOworCQkJaWYgKGRzdCkgeworCQkJCSppc19idW5kbGUgPSAwOworCQkJCXJldHVybiBkc3Q7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidW5kbGVfc3VmZml4KTsgaSsrKSB7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgYnVuZGxlX3N1ZmZpeFtpXSk7CisJCWlmICghc3RhdChwYXRoLT5idWYsICZzdCkgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQkJKmlzX2J1bmRsZSA9IDE7CisJCQlyZXR1cm4gcGF0aC0+YnVmOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfcmVwb19wYXRoKGNvbnN0IGNoYXIgKnJlcG8sIGludCAqaXNfYnVuZGxlKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnJhdzsKKwljaGFyICpjYW5vbjsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHJlcG8pOworCXJhdyA9IGdldF9yZXBvX3BhdGhfMSgmcGF0aCwgaXNfYnVuZGxlKTsKKwljYW5vbiA9IHJhdyA/IGFic29sdXRlX3BhdGhkdXAocmF3KSA6IE5VTEw7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXJldHVybiBjYW5vbjsKK30KKworc3RhdGljIGNoYXIgKmd1ZXNzX2Rpcl9uYW1lKGNvbnN0IGNoYXIgKnJlcG8sIGludCBpc19idW5kbGUsIGludCBpc19iYXJlKQoreworCWNvbnN0IGNoYXIgKmVuZCA9IHJlcG8gKyBzdHJsZW4ocmVwbyksICpzdGFydCwgKnB0cjsKKwlzaXplX3QgbGVuOworCWNoYXIgKmRpcjsKKworCS8qCisJICogU2tpcCBzY2hlbWUuCisJICovCisJc3RhcnQgPSBzdHJzdHIocmVwbywgIjovLyIpOworCWlmIChzdGFydCA9PSBOVUxMKQorCQlzdGFydCA9IHJlcG87CisJZWxzZQorCQlzdGFydCArPSAzOworCisJLyoKKwkgKiBTa2lwIGF1dGhlbnRpY2F0aW9uIGRhdGEuIFRoZSBzdHJpcHBpbmcgZG9lcyBoYXBwZW4KKwkgKiBncmVlZGlseSwgc3VjaCB0aGF0IHdlIHN0cmlwIHVwIHRvIHRoZSBsYXN0ICdAJyBpbnNpZGUKKwkgKiB0aGUgaG9zdCBwYXJ0LgorCSAqLworCWZvciAocHRyID0gc3RhcnQ7IHB0ciA8IGVuZCAmJiAhaXNfZGlyX3NlcCgqcHRyKTsgcHRyKyspIHsKKwkJaWYgKCpwdHIgPT0gJ0AnKQorCQkJc3RhcnQgPSBwdHIgKyAxOworCX0KKworCS8qCisJICogU3RyaXAgdHJhaWxpbmcgc3BhY2VzLCBzbGFzaGVzIGFuZCAvLmdpdAorCSAqLworCXdoaWxlIChzdGFydCA8IGVuZCAmJiAoaXNfZGlyX3NlcChlbmRbLTFdKSB8fCBpc3NwYWNlKGVuZFstMV0pKSkKKwkJZW5kLS07CisJaWYgKGVuZCAtIHN0YXJ0ID4gNSAmJiBpc19kaXJfc2VwKGVuZFstNV0pICYmCisJICAgICFzdHJuY21wKGVuZCAtIDQsICIuZ2l0IiwgNCkpIHsKKwkJZW5kIC09IDU7CisJCXdoaWxlIChzdGFydCA8IGVuZCAmJiBpc19kaXJfc2VwKGVuZFstMV0pKQorCQkJZW5kLS07CisJfQorCisJLyoKKwkgKiBTdHJpcCB0cmFpbGluZyBwb3J0IG51bWJlciBpZiB3ZSd2ZSBnb3Qgb25seSBhCisJICogaG9zdG5hbWUgKHRoYXQgaXMsIHRoZXJlIGlzIG5vIGRpciBzZXBhcmF0b3IgYnV0IGEKKwkgKiBjb2xvbikuIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgc3VjaCB0aGF0IHdlIGRvIG5vdAorCSAqIHN0cmlwIFVSSSdzIGxpa2UgJy9mb28vYmFyOjIyMjIuZ2l0Jywgd2hpY2ggc2hvdWxkCisJICogcmVzdWx0IGluIGEgZGlyICcyMjIyJyBiZWluZyBndWVzc2VkIGR1ZSB0byBiYWNrd2FyZHMKKwkgKiBjb21wYXRpYmlsaXR5LgorCSAqLworCWlmIChtZW1jaHIoc3RhcnQsICcvJywgZW5kIC0gc3RhcnQpID09IE5VTEwKKwkgICAgJiYgbWVtY2hyKHN0YXJ0LCAnOicsIGVuZCAtIHN0YXJ0KSAhPSBOVUxMKSB7CisJCXB0ciA9IGVuZDsKKwkJd2hpbGUgKHN0YXJ0IDwgcHRyICYmIGlzZGlnaXQocHRyWy0xXSkgJiYgcHRyWy0xXSAhPSAnOicpCisJCQlwdHItLTsKKwkJaWYgKHN0YXJ0IDwgcHRyICYmIHB0clstMV0gPT0gJzonKQorCQkJZW5kID0gcHRyIC0gMTsKKwl9CisKKwkvKgorCSAqIEZpbmQgbGFzdCBjb21wb25lbnQuIFRvIHJlbWFpbiBiYWNrd2FyZHMgY29tcGF0aWJsZSB3ZQorCSAqIGFsc28gcmVnYXJkIGNvbG9ucyBhcyBwYXRoIHNlcGFyYXRvcnMsIHN1Y2ggdGhhdAorCSAqIGNsb25pbmcgYSByZXBvc2l0b3J5ICdmb286YmFyLmdpdCcgd291bGQgcmVzdWx0IGluIGEKKwkgKiBkaXJlY3RvcnkgJ2JhcicgYmVpbmcgZ3Vlc3NlZC4KKwkgKi8KKwlwdHIgPSBlbmQ7CisJd2hpbGUgKHN0YXJ0IDwgcHRyICYmICFpc19kaXJfc2VwKHB0clstMV0pICYmIHB0clstMV0gIT0gJzonKQorCQlwdHItLTsKKwlzdGFydCA9IHB0cjsKKworCS8qCisJICogU3RyaXAgLntidW5kbGUsZ2l0fS4KKwkgKi8KKwlsZW4gPSBlbmQgLSBzdGFydDsKKwlzdHJpcF9zdWZmaXhfbWVtKHN0YXJ0LCAmbGVuLCBpc19idW5kbGUgPyAiLmJ1bmRsZSIgOiAiLmdpdCIpOworCisJaWYgKCFsZW4gfHwgKGxlbiA9PSAxICYmICpzdGFydCA9PSAnLycpKQorCQlkaWUoXygiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKwkJICAgICAgIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiKSk7CisKKwlpZiAoaXNfYmFyZSkKKwkJZGlyID0geHN0cmZtdCgiJS4qcy5naXQiLCAoaW50KWxlbiwgc3RhcnQpOworCWVsc2UKKwkJZGlyID0geHN0cm5kdXAoc3RhcnQsIGxlbik7CisJLyoKKwkgKiBSZXBsYWNlIHNlcXVlbmNlcyBvZiAnY29udHJvbCcgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZQorCSAqIHdpdGggb25lIGFzY2lpIHNwYWNlLCByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzLgorCSAqLworCWlmICgqZGlyKSB7CisJCWNoYXIgKm91dCA9IGRpcjsKKwkJaW50IHByZXZfc3BhY2UgPSAxIC8qIHN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLzsKKwkJZm9yIChlbmQgPSBkaXI7ICplbmQ7ICsrZW5kKSB7CisJCQljaGFyIGNoID0gKmVuZDsKKwkJCWlmICgodW5zaWduZWQgY2hhciljaCA8ICdceDIwJykKKwkJCQljaCA9ICdceDIwJzsKKwkJCWlmIChpc3NwYWNlKGNoKSkgeworCQkJCWlmIChwcmV2X3NwYWNlKQorCQkJCQljb250aW51ZTsKKwkJCQlwcmV2X3NwYWNlID0gMTsKKwkJCX0gZWxzZQorCQkJCXByZXZfc3BhY2UgPSAwOworCQkJKm91dCsrID0gY2g7CisJCX0KKwkJKm91dCA9ICdcMCc7CisJCWlmIChvdXQgPiBkaXIgJiYgcHJldl9zcGFjZSkKKwkJCW91dFstMV0gPSAnXDAnOworCX0KKwlyZXR1cm4gZGlyOworfQorCitzdGF0aWMgdm9pZCBzdHJpcF90cmFpbGluZ19zbGFzaGVzKGNoYXIgKmRpcikKK3sKKwljaGFyICplbmQgPSBkaXIgKyBzdHJsZW4oZGlyKTsKKworCXdoaWxlIChkaXIgPCBlbmQgLSAxICYmIGlzX2Rpcl9zZXAoZW5kWy0xXSkpCisJCWVuZC0tOworCSplbmQgPSAnXDAnOworfQorCitzdGF0aWMgaW50IGFkZF9vbmVfcmVmZXJlbmNlKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJaW50ICpyZXF1aXJlZCA9IGNiX2RhdGE7CisJY2hhciAqcmVmX2dpdCA9IGNvbXB1dGVfYWx0ZXJuYXRlX3BhdGgoaXRlbS0+c3RyaW5nLCAmZXJyKTsKKworCWlmICghcmVmX2dpdCkgeworCQlpZiAoKnJlcXVpcmVkKQorCQkJZGllKCIlcyIsIGVyci5idWYpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIpLAorCQkJCWl0ZW0tPnN0cmluZywgZXJyLmJ1Zik7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmc2IsICIlcy9vYmplY3RzIiwgcmVmX2dpdCk7CisJCWFkZF90b19hbHRlcm5hdGVzX2ZpbGUoc2IuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlmcmVlKHJlZl9naXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yZWZlcmVuY2Uodm9pZCkKK3sKKwlpbnQgcmVxdWlyZWQgPSAxOworCWZvcl9lYWNoX3N0cmluZ19saXN0KCZvcHRpb25fcmVxdWlyZWRfcmVmZXJlbmNlLAorCQkJICAgICBhZGRfb25lX3JlZmVyZW5jZSwgJnJlcXVpcmVkKTsKKwlyZXF1aXJlZCA9IDA7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJm9wdGlvbl9vcHRpb25hbF9yZWZlcmVuY2UsCisJCQkgICAgIGFkZF9vbmVfcmVmZXJlbmNlLCAmcmVxdWlyZWQpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2FsdGVybmF0ZXMoc3RydWN0IHN0cmJ1ZiAqc3JjLCBjb25zdCBjaGFyICpzcmNfcmVwbykKK3sKKwkvKgorCSAqIFJlYWQgZnJvbSB0aGUgc291cmNlIG9iamVjdHMvaW5mby9hbHRlcm5hdGVzIGZpbGUKKwkgKiBhbmQgY29weSB0aGUgZW50cmllcyB0byBjb3JyZXNwb25kaW5nIGZpbGUgaW4gdGhlCisJICogZGVzdGluYXRpb24gcmVwb3NpdG9yeSB3aXRoIGFkZF90b19hbHRlcm5hdGVzX2ZpbGUoKS4KKwkgKiBCb3RoIHNyYyBhbmQgZHN0IGhhdmUgIiRwYXRoL29iamVjdHMvaW5mby9hbHRlcm5hdGVzIi4KKwkgKgorCSAqIEluc3RlYWQgb2YgY29weWluZyBiaXQtZm9yLWJpdCBmcm9tIHRoZSBvcmlnaW5hbCwKKwkgKiB3ZSBuZWVkIHRvIGFwcGVuZCB0byBleGlzdGluZyBvbmUgc28gdGhhdCB0aGUgYWxyZWFkeQorCSAqIGNyZWF0ZWQgZW50cnkgdmlhICJjbG9uZSAtcyIgaXMgbm90IGxvc3QsIGFuZCBhbHNvCisJICogdG8gdHVybiBlbnRyaWVzIHdpdGggcGF0aHMgcmVsYXRpdmUgdG8gdGhlIG9yaWdpbmFsCisJICogYWJzb2x1dGUsIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbiB0aGUgbmV3IHJlcG9zaXRvcnkuCisJICovCisJRklMRSAqaW4gPSB4Zm9wZW4oc3JjLT5idWYsICJyIik7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIGluKSAhPSBFT0YpIHsKKwkJY2hhciAqYWJzX3BhdGg7CisJCWlmICghbGluZS5sZW4gfHwgbGluZS5idWZbMF0gPT0gJyMnKQorCQkJY29udGludWU7CisJCWlmIChpc19hYnNvbHV0ZV9wYXRoKGxpbmUuYnVmKSkgeworCQkJYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShsaW5lLmJ1Zik7CisJCQljb250aW51ZTsKKwkJfQorCQlhYnNfcGF0aCA9IG1rcGF0aGR1cCgiJXMvb2JqZWN0cy8lcyIsIHNyY19yZXBvLCBsaW5lLmJ1Zik7CisJCWlmICghbm9ybWFsaXplX3BhdGhfY29weShhYnNfcGF0aCwgYWJzX3BhdGgpKQorCQkJYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShhYnNfcGF0aCk7CisJCWVsc2UKKwkJCXdhcm5pbmcoInNraXBwaW5nIGludmFsaWQgcmVsYXRpdmUgYWx0ZXJuYXRlOiAlcy8lcyIsCisJCQkJc3JjX3JlcG8sIGxpbmUuYnVmKTsKKwkJZnJlZShhYnNfcGF0aCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoaW4pOworfQorCitzdGF0aWMgdm9pZCBta2Rpcl9pZl9taXNzaW5nKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghbWtkaXIocGF0aG5hbWUsIG1vZGUpKQorCQlyZXR1cm47CisKKwlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIpLCBwYXRobmFtZSk7CisJZWxzZSBpZiAoc3RhdChwYXRobmFtZSwgJnN0KSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGF0ICclcyciKSwgcGF0aG5hbWUpOworCWVsc2UgaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpKQorCQlkaWUoXygiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiKSwgcGF0aG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X29yX2xpbmtfZGlyZWN0b3J5KHN0cnVjdCBzdHJidWYgKnNyYywgc3RydWN0IHN0cmJ1ZiAqZGVzdCwKKwkJCQkgICBjb25zdCBjaGFyICpzcmNfcmVwbykKK3sKKwlpbnQgc3JjX2xlbiwgZGVzdF9sZW47CisJc3RydWN0IGRpcl9pdGVyYXRvciAqaXRlcjsKKwlpbnQgaXRlcl9zdGF0dXM7CisJdW5zaWduZWQgaW50IGZsYWdzOworCisJbWtkaXJfaWZfbWlzc2luZyhkZXN0LT5idWYsIDA3NzcpOworCisJZmxhZ3MgPSBESVJfSVRFUkFUT1JfUEVEQU5USUMgfCBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTOworCWl0ZXIgPSBkaXJfaXRlcmF0b3JfYmVnaW4oc3JjLT5idWYsIGZsYWdzKTsKKworCWlmICghaXRlcikKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGFydCBpdGVyYXRvciBvdmVyICclcyciKSwgc3JjLT5idWYpOworCisJc3RyYnVmX2FkZGNoKHNyYywgJy8nKTsKKwlzcmNfbGVuID0gc3JjLT5sZW47CisJc3RyYnVmX2FkZGNoKGRlc3QsICcvJyk7CisJZGVzdF9sZW4gPSBkZXN0LT5sZW47CisKKwl3aGlsZSAoKGl0ZXJfc3RhdHVzID0gZGlyX2l0ZXJhdG9yX2FkdmFuY2UoaXRlcikpID09IElURVJfT0spIHsKKwkJc3RyYnVmX3NldGxlbihzcmMsIHNyY19sZW4pOworCQlzdHJidWZfYWRkc3RyKHNyYywgaXRlci0+cmVsYXRpdmVfcGF0aCk7CisJCXN0cmJ1Zl9zZXRsZW4oZGVzdCwgZGVzdF9sZW4pOworCQlzdHJidWZfYWRkc3RyKGRlc3QsIGl0ZXItPnJlbGF0aXZlX3BhdGgpOworCisJCWlmIChTX0lTRElSKGl0ZXItPnN0LnN0X21vZGUpKSB7CisJCQlta2Rpcl9pZl9taXNzaW5nKGRlc3QtPmJ1ZiwgMDc3Nyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZpbGVzIHRoYXQgY2Fubm90IGJlIGNvcGllZCBiaXQtZm9yLWJpdC4uLiAqLworCQlpZiAoIWZzcGF0aGNtcChpdGVyLT5yZWxhdGl2ZV9wYXRoLCAiaW5mby9hbHRlcm5hdGVzIikpIHsKKwkJCWNvcHlfYWx0ZXJuYXRlcyhzcmMsIHNyY19yZXBvKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHVubGluayhkZXN0LT5idWYpICYmIGVycm5vICE9IEVOT0VOVCkKKwkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gdW5saW5rICclcyciKSwgZGVzdC0+YnVmKTsKKwkJaWYgKCFvcHRpb25fbm9faGFyZGxpbmtzKSB7CisJCQlpZiAoIWxpbmsocmVhbF9wYXRoKHNyYy0+YnVmKSwgZGVzdC0+YnVmKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvcHRpb25fbG9jYWwgPiAwKQorCQkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIpLCBkZXN0LT5idWYpOworCQkJb3B0aW9uX25vX2hhcmRsaW5rcyA9IDE7CisJCX0KKwkJaWYgKGNvcHlfZmlsZV93aXRoX3RpbWUoZGVzdC0+YnVmLCBzcmMtPmJ1ZiwgMDY2NikpCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIiksIGRlc3QtPmJ1Zik7CisJfQorCisJaWYgKGl0ZXJfc3RhdHVzICE9IElURVJfRE9ORSkgeworCQlzdHJidWZfc2V0bGVuKHNyYywgc3JjX2xlbik7CisJCWRpZShfKCJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciKSwgc3JjLT5idWYpOworCX0KK30KKworc3RhdGljIHZvaWQgY2xvbmVfbG9jYWwoY29uc3QgY2hhciAqc3JjX3JlcG8sIGNvbnN0IGNoYXIgKmRlc3RfcmVwbykKK3sKKwlpZiAob3B0aW9uX3NoYXJlZCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGFsdCA9IFNUUkJVRl9JTklUOworCQlnZXRfY29tbW9uX2RpcigmYWx0LCBzcmNfcmVwbyk7CisJCXN0cmJ1Zl9hZGRzdHIoJmFsdCwgIi9vYmplY3RzIik7CisJCWFkZF90b19hbHRlcm5hdGVzX2ZpbGUoYWx0LmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZhbHQpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgc3JjID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgZGVzdCA9IFNUUkJVRl9JTklUOworCQlnZXRfY29tbW9uX2Rpcigmc3JjLCBzcmNfcmVwbyk7CisJCWdldF9jb21tb25fZGlyKCZkZXN0LCBkZXN0X3JlcG8pOworCQlzdHJidWZfYWRkc3RyKCZzcmMsICIvb2JqZWN0cyIpOworCQlzdHJidWZfYWRkc3RyKCZkZXN0LCAiL29iamVjdHMiKTsKKwkJY29weV9vcl9saW5rX2RpcmVjdG9yeSgmc3JjLCAmZGVzdCwgc3JjX3JlcG8pOworCQlzdHJidWZfcmVsZWFzZSgmc3JjKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmRlc3QpOworCX0KKworCWlmICgwIDw9IG9wdGlvbl92ZXJib3NpdHkpCisJCWZwcmludGYoc3RkZXJyLCBfKCJkb25lLlxuIikpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqanVua193b3JrX3RyZWU7CitzdGF0aWMgaW50IGp1bmtfd29ya190cmVlX2ZsYWdzOworc3RhdGljIGNvbnN0IGNoYXIgKmp1bmtfZ2l0X2RpcjsKK3N0YXRpYyBpbnQganVua19naXRfZGlyX2ZsYWdzOworc3RhdGljIGVudW0geworCUpVTktfTEVBVkVfTk9ORSwKKwlKVU5LX0xFQVZFX1JFUE8sCisJSlVOS19MRUFWRV9BTEwKK30ganVua19tb2RlID0gSlVOS19MRUFWRV9OT05FOworCitzdGF0aWMgY29uc3QgY2hhciBqdW5rX2xlYXZlX3JlcG9fbXNnW10gPQorTl8oIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyAgICJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyAgICJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIpOworCitzdGF0aWMgdm9pZCByZW1vdmVfanVuayh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXN3aXRjaCAoanVua19tb2RlKSB7CisJY2FzZSBKVU5LX0xFQVZFX1JFUE86CisJCXdhcm5pbmcoIiVzIiwgXyhqdW5rX2xlYXZlX3JlcG9fbXNnKSk7CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCWNhc2UgSlVOS19MRUFWRV9BTEw6CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQkvKiBwcm9jZWVkIHRvIHJlbW92YWwgKi8KKwkJYnJlYWs7CisJfQorCisJaWYgKGp1bmtfZ2l0X2RpcikgeworCQlzdHJidWZfYWRkc3RyKCZzYiwganVua19naXRfZGlyKTsKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2IsIGp1bmtfZ2l0X2Rpcl9mbGFncyk7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCX0KKwlpZiAoanVua193b3JrX3RyZWUpIHsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGp1bmtfd29ya190cmVlKTsKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2IsIGp1bmtfd29ya190cmVlX2ZsYWdzKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2p1bmtfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwlyZW1vdmVfanVuaygpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZmluZF9yZW1vdGVfYnJhbmNoKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsIGNvbnN0IGNoYXIgKmJyYW5jaCkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHN0cmJ1ZiBoZWFkID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZHN0cigmaGVhZCwgInJlZnMvaGVhZHMvIik7CisJc3RyYnVmX2FkZHN0cigmaGVhZCwgYnJhbmNoKTsKKwlyZWYgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsIGhlYWQuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmaGVhZCk7CisKKwlpZiAocmVmKQorCQlyZXR1cm4gcmVmOworCisJc3RyYnVmX2FkZHN0cigmaGVhZCwgInJlZnMvdGFncy8iKTsKKwlzdHJidWZfYWRkc3RyKCZoZWFkLCBicmFuY2gpOworCXJlZiA9IGZpbmRfcmVmX2J5X25hbWUocmVmcywgaGVhZC5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkKTsKKworCXJldHVybiByZWY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICp3YW50ZWRfcGVlcl9yZWZzKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCXN0cnVjdCByZWZzcGVjICpyZWZzcGVjKQoreworCXN0cnVjdCByZWYgKmhlYWQgPSBjb3B5X3JlZihmaW5kX3JlZl9ieV9uYW1lKHJlZnMsICJIRUFEIikpOworCXN0cnVjdCByZWYgKmxvY2FsX3JlZnMgPSBoZWFkOworCXN0cnVjdCByZWYgKip0YWlsID0gaGVhZCA/ICZoZWFkLT5uZXh0IDogJmxvY2FsX3JlZnM7CisKKwlpZiAob3B0aW9uX3NpbmdsZV9icmFuY2gpIHsKKwkJc3RydWN0IHJlZiAqcmVtb3RlX2hlYWQgPSBOVUxMOworCisJCWlmICghb3B0aW9uX2JyYW5jaCkKKwkJCXJlbW90ZV9oZWFkID0gZ3Vlc3NfcmVtb3RlX2hlYWQoaGVhZCwgcmVmcywgMCk7CisJCWVsc2UgeworCQkJbG9jYWxfcmVmcyA9IE5VTEw7CisJCQl0YWlsID0gJmxvY2FsX3JlZnM7CisJCQlyZW1vdGVfaGVhZCA9IGNvcHlfcmVmKGZpbmRfcmVtb3RlX2JyYW5jaChyZWZzLCBvcHRpb25fYnJhbmNoKSk7CisJCX0KKworCQlpZiAoIXJlbW90ZV9oZWFkICYmIG9wdGlvbl9icmFuY2gpCisJCQl3YXJuaW5nKF8oIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIiksCisJCQkJb3B0aW9uX2JyYW5jaCk7CisJCWVsc2UgeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmVmc3BlYy0+bnI7IGkrKykKKwkJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9oZWFkLCAmcmVmc3BlYy0+aXRlbXNbaV0sCisJCQkJCSAgICAgICZ0YWlsLCAwKTsKKworCQkJLyogaWYgLS1icmFuY2g9dGFnLCBwdWxsIHRoZSByZXF1ZXN0ZWQgdGFnIGV4cGxpY2l0bHkgKi8KKwkJCWdldF9mZXRjaF9tYXAocmVtb3RlX2hlYWQsIHRhZ19yZWZzcGVjLCAmdGFpbCwgMCk7CisJCX0KKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHJlZnNwZWMtPm5yOyBpKyspCisJCQlnZXRfZmV0Y2hfbWFwKHJlZnMsICZyZWZzcGVjLT5pdGVtc1tpXSwgJnRhaWwsIDApOworCX0KKworCWlmICghb3B0aW9uX21pcnJvciAmJiAhb3B0aW9uX3NpbmdsZV9icmFuY2ggJiYgIW9wdGlvbl9ub190YWdzKQorCQlnZXRfZmV0Y2hfbWFwKHJlZnMsIHRhZ19yZWZzcGVjLCAmdGFpbCwgMCk7CisKKwlyZXR1cm4gbG9jYWxfcmVmczsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmVtb3RlX3JlZnMoY29uc3Qgc3RydWN0IHJlZiAqbG9jYWxfcmVmcykKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyOworCisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJdCA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXQpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCWZvciAociA9IGxvY2FsX3JlZnM7IHI7IHIgPSByLT5uZXh0KSB7CisJCWlmICghci0+cGVlcl9yZWYpCisJCQljb250aW51ZTsKKwkJaWYgKHJlZl90cmFuc2FjdGlvbl9jcmVhdGUodCwgci0+cGVlcl9yZWYtPm5hbWUsICZyLT5vbGRfb2lkLAorCQkJCQkgICAwLCBOVUxMLCAmZXJyKSkKKwkJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKwl9CisKKwlpZiAoaW5pdGlhbF9yZWZfdHJhbnNhY3Rpb25fY29tbWl0KHQsICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0KTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZm9sbG93dGFncyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLCBjb25zdCBjaGFyICptc2cpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCWZvciAocmVmID0gcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKCFzdGFydHNfd2l0aChyZWYtPm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCQljb250aW51ZTsKKwkJaWYgKGVuZHNfd2l0aChyZWYtPm5hbWUsICJee30iKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWhhc19vYmplY3RfZmlsZSgmcmVmLT5vbGRfb2lkKSkKKwkJCWNvbnRpbnVlOworCQl1cGRhdGVfcmVmKG1zZywgcmVmLT5uYW1lLCAmcmVmLT5vbGRfb2lkLCBOVUxMLCAwLAorCQkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJfQorfQorCitzdGF0aWMgaW50IGl0ZXJhdGVfcmVmX21hcCh2b2lkICpjYl9kYXRhLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHJlZiAqKnJtID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmICpyZWYgPSAqcm07CisKKwkvKgorCSAqIFNraXAgYW55dGhpbmcgbWlzc2luZyBhIHBlZXJfcmVmLCB3aGljaCB3ZSBhcmUgbm90CisJICogYWN0dWFsbHkgZ29pbmcgdG8gd3JpdGUgYSByZWYgZm9yLgorCSAqLworCXdoaWxlIChyZWYgJiYgIXJlZi0+cGVlcl9yZWYpCisJCXJlZiA9IHJlZi0+bmV4dDsKKwkvKiBSZXR1cm5pbmcgLTEgbm90ZXMgImVuZCBvZiBsaXN0IiB0byB0aGUgY2FsbGVyLiAqLworCWlmICghcmVmKQorCQlyZXR1cm4gLTE7CisKKwlvaWRjcHkob2lkLCAmcmVmLT5vbGRfb2lkKTsKKwkqcm0gPSByZWYtPm5leHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZW1vdGVfcmVmcyhjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKm1hcHBlZF9yZWZzLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9oZWFkX3BvaW50c19hdCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpicmFuY2hfdG9wLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgICAgICBzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgICAgaW50IGNoZWNrX2Nvbm5lY3Rpdml0eSwKKwkJCSAgICAgICBpbnQgY2hlY2tfcmVmc19hcmVfcHJvbWlzb3Jfb2JqZWN0c19vbmx5KQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJtID0gbWFwcGVkX3JlZnM7CisKKwlpZiAoY2hlY2tfY29ubmVjdGl2aXR5KSB7CisJCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKKworCQlvcHQudHJhbnNwb3J0ID0gdHJhbnNwb3J0OworCQlvcHQucHJvZ3Jlc3MgPSB0cmFuc3BvcnQtPnByb2dyZXNzOworCQlvcHQuY2hlY2tfcmVmc19hcmVfcHJvbWlzb3Jfb2JqZWN0c19vbmx5ID0KKwkJCSEhY2hlY2tfcmVmc19hcmVfcHJvbWlzb3Jfb2JqZWN0c19vbmx5OworCisJCWlmIChjaGVja19jb25uZWN0ZWQoaXRlcmF0ZV9yZWZfbWFwLCAmcm0sICZvcHQpKQorCQkJZGllKF8oInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIikpOworCX0KKworCWlmIChyZWZzKSB7CisJCXdyaXRlX3JlbW90ZV9yZWZzKG1hcHBlZF9yZWZzKTsKKwkJaWYgKG9wdGlvbl9zaW5nbGVfYnJhbmNoICYmICFvcHRpb25fbm9fdGFncykKKwkJCXdyaXRlX2ZvbGxvd3RhZ3MocmVmcywgbXNnKTsKKwl9CisKKwlpZiAocmVtb3RlX2hlYWRfcG9pbnRzX2F0ICYmICFvcHRpb25fYmFyZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRfcmVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRzdHIoJmhlYWRfcmVmLCBicmFuY2hfdG9wKTsKKwkJc3RyYnVmX2FkZHN0cigmaGVhZF9yZWYsICJIRUFEIik7CisJCWlmIChjcmVhdGVfc3ltcmVmKGhlYWRfcmVmLmJ1ZiwKKwkJCQkgIHJlbW90ZV9oZWFkX3BvaW50c19hdC0+cGVlcl9yZWYtPm5hbWUsCisJCQkJICBtc2cpIDwgMCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gdXBkYXRlICVzIiksIGhlYWRfcmVmLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX3JlZik7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfaGVhZChjb25zdCBzdHJ1Y3QgcmVmICpvdXIsIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZSwKKwkJCWNvbnN0IGNoYXIgKm1zZykKK3sKKwljb25zdCBjaGFyICpoZWFkOworCWlmIChvdXIgJiYgc2tpcF9wcmVmaXgob3VyLT5uYW1lLCAicmVmcy9oZWFkcy8iLCAmaGVhZCkpIHsKKwkJLyogTG9jYWwgZGVmYXVsdCBicmFuY2ggbGluayAqLworCQlpZiAoY3JlYXRlX3N5bXJlZigiSEVBRCIsIG91ci0+bmFtZSwgTlVMTCkgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byB1cGRhdGUgSEVBRCIpKTsKKwkJaWYgKCFvcHRpb25fYmFyZSkgeworCQkJdXBkYXRlX3JlZihtc2csICJIRUFEIiwgJm91ci0+b2xkX29pZCwgTlVMTCwgMCwKKwkJCQkgICBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZygwLCBoZWFkLCBvcHRpb25fb3JpZ2luLCBvdXItPm5hbWUpOworCQl9CisJfSBlbHNlIGlmIChvdXIpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgICZvdXItPm9sZF9vaWQpOworCQkvKiAtLWJyYW5jaCBzcGVjaWZpZXMgYSBub24tYnJhbmNoIChpLmUuIHRhZ3MpLCBkZXRhY2ggSEVBRCAqLworCQl1cGRhdGVfcmVmKG1zZywgIkhFQUQiLCAmYy0+b2JqZWN0Lm9pZCwgTlVMTCwgUkVGX05PX0RFUkVGLAorCQkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJfSBlbHNlIGlmIChyZW1vdGUpIHsKKwkJLyoKKwkJICogV2Uga25vdyByZW1vdGUgSEVBRCBwb2ludHMgdG8gYSBub24tYnJhbmNoLCBvcgorCQkgKiBIRUFEIHBvaW50cyB0byBhIGJyYW5jaCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBvbmUuCisJCSAqIERldGFjaCBIRUFEIGluIGFsbCB0aGVzZSBjYXNlcy4KKwkJICovCisJCXVwZGF0ZV9yZWYobXNnLCAiSEVBRCIsICZyZW1vdGUtPm9sZF9vaWQsIE5VTEwsIFJFRl9OT19ERVJFRiwKKwkJCSAgIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCX0KK30KKworc3RhdGljIGludCBnaXRfc3BhcnNlX2NoZWNrb3V0X2luaXQoY29uc3QgY2hhciAqcmVwbykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXN1bHQgPSAwOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICItQyIsIHJlcG8sICJzcGFyc2UtY2hlY2tvdXQiLCAiaW5pdCIsIE5VTEwpOworCisJLyoKKwkgKiBXZSBtdXN0IGFwcGx5IHRoZSBzZXR0aW5nIGluIHRoZSBjdXJyZW50IHByb2Nlc3MKKwkgKiBmb3IgdGhlIGxhdGVyIGNoZWNrb3V0IHRvIHVzZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUuCisJICovCisJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSAxOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YuYXJndiwgUlVOX0dJVF9DTUQpKSB7CisJCWVycm9yKF8oImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIpKTsKKwkJcmVzdWx0ID0gMTsKKwl9CisKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0KGludCBzdWJtb2R1bGVfcHJvZ3Jlc3MpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciAqaGVhZDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHQ7CisJaW50IGVyciA9IDA7CisKKwlpZiAob3B0aW9uX25vX2NoZWNrb3V0KQorCQlyZXR1cm4gMDsKKworCWhlYWQgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsICZvaWQsIE5VTEwpOworCWlmICghaGVhZCkgeworCQl3YXJuaW5nKF8oInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsICIKKwkJCSAgInVuYWJsZSB0byBjaGVja291dC5cbiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGhlYWQsICJIRUFEIikpIHsKKwkJaWYgKGFkdmljZV9kZXRhY2hlZF9oZWFkKQorCQkJZGV0YWNoX2FkdmljZShvaWRfdG9faGV4KCZvaWQpKTsKKwl9IGVsc2UgeworCQlpZiAoIXN0YXJ0c193aXRoKGhlYWQsICJyZWZzL2hlYWRzLyIpKQorCQkJZGllKF8oIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIikpOworCX0KKwlmcmVlKGhlYWQpOworCisJLyogV2UgbmVlZCB0byBiZSBpbiB0aGUgbmV3IHdvcmsgdHJlZSBmb3IgdGhlIGNoZWNrb3V0ICovCisJc2V0dXBfd29ya190cmVlKCk7CisKKwlob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZiBvcHRzKTsKKwlvcHRzLnVwZGF0ZSA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5jbG9uZSA9IDE7CisJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwlvcHRzLnZlcmJvc2VfdXBkYXRlID0gKG9wdGlvbl92ZXJib3NpdHkgPj0gMCk7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJaWYgKHVucGFja190cmVlcygxLCAmdCwgJm9wdHMpIDwgMCkKKwkJZGllKF8oInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiKSk7CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKworCWVyciB8PSBydW5faG9va19sZShOVUxMLCAicG9zdC1jaGVja291dCIsIG9pZF90b19oZXgoJm51bGxfb2lkKSwKKwkJCSAgIG9pZF90b19oZXgoJm9pZCksICIxIiwgTlVMTCk7CisKKwlpZiAoIWVyciAmJiAob3B0aW9uX3JlY3Vyc2Vfc3VibW9kdWxlcy5uciA+IDApKSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJzdWJtb2R1bGUiLCAidXBkYXRlIiwgIi0tcmVxdWlyZS1pbml0IiwgIi0tcmVjdXJzaXZlIiwgTlVMTCk7CisKKwkJaWYgKG9wdGlvbl9zaGFsbG93X3N1Ym1vZHVsZXMgPT0gMSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tZGVwdGg9MSIpOworCisJCWlmIChtYXhfam9icyAhPSAtMSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3MsICItLWpvYnM9JWQiLCBtYXhfam9icyk7CisKKwkJaWYgKHN1Ym1vZHVsZV9wcm9ncmVzcykKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tcHJvZ3Jlc3MiKTsKKworCQlpZiAob3B0aW9uX3ZlcmJvc2l0eSA8IDApCisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXF1aWV0Iik7CisKKwkJaWYgKG9wdGlvbl9yZW1vdGVfc3VibW9kdWxlcykgeworCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1yZW1vdGUiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tbm8tZmV0Y2giKTsKKwkJfQorCisJCWlmIChvcHRpb25fc2luZ2xlX2JyYW5jaCA+PSAwKQorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRpb25fc2luZ2xlX2JyYW5jaCA/CisJCQkJCSAgICAgICAiLS1zaW5nbGUtYnJhbmNoIiA6CisJCQkJCSAgICAgICAiLS1uby1zaW5nbGUtYnJhbmNoIik7CisKKwkJZXJyID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJncy5hcmd2LCBSVU5fR0lUX0NNRCk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfb25lX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9nZW50bHkoa2V5LAorCQkJCQkgICAgICB2YWx1ZSA/IHZhbHVlIDogInRydWUiLAorCQkJCQkgICAgICBDT05GSUdfUkVHRVhfTk9ORSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbmZpZyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbmZpZykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPm5yOyBpKyspIHsKKwkJaWYgKGdpdF9jb25maWdfcGFyc2VfcGFyYW1ldGVyKGNvbmZpZy0+aXRlbXNbaV0uc3RyaW5nLAorCQkJCQkgICAgICAgd3JpdGVfb25lX2NvbmZpZywgTlVMTCkgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIikpOworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmVmc3BlY19jb25maWcoY29uc3QgY2hhciAqc3JjX3JlZl9wcmVmaXgsCisJCWNvbnN0IHN0cnVjdCByZWYgKm91cl9oZWFkX3BvaW50c19hdCwKKwkJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX2hlYWRfcG9pbnRzX2F0LAorCQlzdHJ1Y3Qgc3RyYnVmICpicmFuY2hfdG9wKQoreworCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB2YWx1ZSA9IFNUUkJVRl9JTklUOworCisJaWYgKG9wdGlvbl9taXJyb3IgfHwgIW9wdGlvbl9iYXJlKSB7CisJCWlmIChvcHRpb25fc2luZ2xlX2JyYW5jaCAmJiAhb3B0aW9uX21pcnJvcikgeworCQkJaWYgKG9wdGlvbl9icmFuY2gpIHsKKwkJCQlpZiAoc3RhcnRzX3dpdGgob3VyX2hlYWRfcG9pbnRzX2F0LT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXM6JXMiLCBvdXJfaGVhZF9wb2ludHNfYXQtPm5hbWUsCisJCQkJCQlvdXJfaGVhZF9wb2ludHNfYXQtPm5hbWUpOworCQkJCWVsc2UKKwkJCQkJc3RyYnVmX2FkZGYoJnZhbHVlLCAiKyVzOiVzJXMiLCBvdXJfaGVhZF9wb2ludHNfYXQtPm5hbWUsCisJCQkJCQlicmFuY2hfdG9wLT5idWYsIG9wdGlvbl9icmFuY2gpOworCQkJfSBlbHNlIGlmIChyZW1vdGVfaGVhZF9wb2ludHNfYXQpIHsKKwkJCQljb25zdCBjaGFyICpoZWFkID0gcmVtb3RlX2hlYWRfcG9pbnRzX2F0LT5uYW1lOworCQkJCWlmICghc2tpcF9wcmVmaXgoaGVhZCwgInJlZnMvaGVhZHMvIiwgJmhlYWQpKQorCQkJCQlCVUcoInJlbW90ZSBIRUFEIHBvaW50cyBhdCBub24taGVhZD8iKTsKKworCQkJCXN0cmJ1Zl9hZGRmKCZ2YWx1ZSwgIislczolcyVzIiwgcmVtb3RlX2hlYWRfcG9pbnRzX2F0LT5uYW1lLAorCQkJCQkJYnJhbmNoX3RvcC0+YnVmLCBoZWFkKTsKKwkJCX0KKwkJCS8qCisJCQkgKiBvdGhlcndpc2UsIHRoZSBuZXh0ICJnaXQgZmV0Y2giIHdpbGwKKwkJCSAqIHNpbXBseSBmZXRjaCBmcm9tIEhFQUQgd2l0aG91dCB1cGRhdGluZworCQkJICogYW55IHJlbW90ZS10cmFja2luZyBicmFuY2gsIHdoaWNoIGlzIHdoYXQKKwkJCSAqIHdlIHdhbnQuCisJCQkgKi8KKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRmKCZ2YWx1ZSwgIislcyo6JXMqIiwgc3JjX3JlZl9wcmVmaXgsIGJyYW5jaF90b3AtPmJ1Zik7CisJCX0KKwkJLyogQ29uZmlndXJlIHRoZSByZW1vdGUgKi8KKwkJaWYgKHZhbHVlLmxlbikgeworCQkJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy5mZXRjaCIsIG9wdGlvbl9vcmlnaW4pOworCQkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoa2V5LmJ1ZiwgdmFsdWUuYnVmLCAiXiQiLCAwKTsKKwkJCXN0cmJ1Zl9yZXNldCgma2V5KTsKKworCQkJaWYgKG9wdGlvbl9taXJyb3IpIHsKKwkJCQlzdHJidWZfYWRkZigma2V5LCAicmVtb3RlLiVzLm1pcnJvciIsIG9wdGlvbl9vcmlnaW4pOworCQkJCWdpdF9jb25maWdfc2V0KGtleS5idWYsICJ0cnVlIik7CisJCQkJc3RyYnVmX3Jlc2V0KCZrZXkpOworCQkJfQorCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmtleSk7CisJc3RyYnVmX3JlbGVhc2UoJnZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgZGlzc29jaWF0ZV9mcm9tX3JlZmVyZW5jZXModm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciogYXJndltdID0geyAicmVwYWNrIiwgIi1hIiwgIi1kIiwgTlVMTCB9OworCWNoYXIgKmFsdGVybmF0ZXMgPSBnaXRfcGF0aGR1cCgib2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiKTsKKworCWlmICghYWNjZXNzKGFsdGVybmF0ZXMsIEZfT0spKSB7CisJCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fR0lUX0NNRHxSVU5fQ09NTUFORF9OT19TVERJTikpCisJCQlkaWUoXygiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIpKTsKKwkJaWYgKHVubGluayhhbHRlcm5hdGVzKSAmJiBlcnJubyAhPSBFTk9FTlQpCisJCQlkaWVfZXJybm8oXygiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIikpOworCX0KKwlmcmVlKGFsdGVybmF0ZXMpOworfQorCitzdGF0aWMgaW50IHBhdGhfZXhpc3RzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0YXQgc2I7CisJcmV0dXJuICFzdGF0KHBhdGgsICZzYik7Cit9CisKK2ludCBjbWRfY2xvbmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGlzX2J1bmRsZSA9IDAsIGlzX2xvY2FsOworCWNvbnN0IGNoYXIgKnJlcG9fbmFtZSwgKnJlcG8sICp3b3JrX3RyZWUsICpnaXRfZGlyOworCWNoYXIgKnBhdGgsICpkaXI7CisJaW50IGRlc3RfZXhpc3RzOworCWNvbnN0IHN0cnVjdCByZWYgKnJlZnMsICpyZW1vdGVfaGVhZDsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfaGVhZF9wb2ludHNfYXQ7CisJY29uc3Qgc3RydWN0IHJlZiAqb3VyX2hlYWRfcG9pbnRzX2F0OworCXN0cnVjdCByZWYgKm1hcHBlZF9yZWZzOworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgc3RyYnVmIGtleSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZGVmYXVsdF9yZWZzcGVjID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBicmFuY2hfdG9wID0gU1RSQlVGX0lOSVQsIHJlZmxvZ19tc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnNyY19yZWZfcHJlZml4ID0gInJlZnMvaGVhZHMvIjsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJaW50IGVyciA9IDAsIGNvbXBsZXRlX3JlZnNfYmVmb3JlX2ZldGNoID0gMTsKKwlpbnQgc3VibW9kdWxlX3Byb2dyZXNzOworCisJc3RydWN0IGFyZ3ZfYXJyYXkgcmVmX3ByZWZpeGVzID0gQVJHVl9BUlJBWV9JTklUOworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJjbG9uZSIpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9jbG9uZV9vcHRpb25zLAorCQkJICAgICBidWlsdGluX2Nsb25lX3VzYWdlLCAwKTsKKworCWlmIChhcmdjID4gMikKKwkJdXNhZ2VfbXNnX29wdChfKCJUb28gbWFueSBhcmd1bWVudHMuIiksCisJCQlidWlsdGluX2Nsb25lX3VzYWdlLCBidWlsdGluX2Nsb25lX29wdGlvbnMpOworCisJaWYgKGFyZ2MgPT0gMCkKKwkJdXNhZ2VfbXNnX29wdChfKCJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iKSwKKwkJCWJ1aWx0aW5fY2xvbmVfdXNhZ2UsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucyk7CisKKwlpZiAob3B0aW9uX2RlcHRoIHx8IG9wdGlvbl9zaW5jZSB8fCBvcHRpb25fbm90Lm5yKQorCQlkZWVwZW4gPSAxOworCWlmIChvcHRpb25fc2luZ2xlX2JyYW5jaCA9PSAtMSkKKwkJb3B0aW9uX3NpbmdsZV9icmFuY2ggPSBkZWVwZW4gPyAxIDogMDsKKworCWlmIChvcHRpb25fbWlycm9yKQorCQlvcHRpb25fYmFyZSA9IDE7CisKKwlpZiAob3B0aW9uX2JhcmUpIHsKKwkJaWYgKG9wdGlvbl9vcmlnaW4pCisJCQlkaWUoXygiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIiksCisJCQkgICAgb3B0aW9uX29yaWdpbik7CisJCWlmIChyZWFsX2dpdF9kaXIpCisJCQlkaWUoXygiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iKSk7CisJCW9wdGlvbl9ub19jaGVja291dCA9IDE7CisJfQorCisJaWYgKCFvcHRpb25fb3JpZ2luKQorCQlvcHRpb25fb3JpZ2luID0gIm9yaWdpbiI7CisKKwlyZXBvX25hbWUgPSBhcmd2WzBdOworCisJcGF0aCA9IGdldF9yZXBvX3BhdGgocmVwb19uYW1lLCAmaXNfYnVuZGxlKTsKKwlpZiAocGF0aCkKKwkJcmVwbyA9IGFic29sdXRlX3BhdGhkdXAocmVwb19uYW1lKTsKKwllbHNlIGlmICghc3RyY2hyKHJlcG9fbmFtZSwgJzonKSkKKwkJZGllKF8oInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIpLCByZXBvX25hbWUpOworCWVsc2UKKwkJcmVwbyA9IHJlcG9fbmFtZTsKKworCS8qIG5vIG5lZWQgdG8gYmUgc3RyaWN0LCB0cmFuc3BvcnRfc2V0X29wdGlvbigpIHdpbGwgdmFsaWRhdGUgaXQgYWdhaW4gKi8KKwlpZiAob3B0aW9uX2RlcHRoICYmIGF0b2kob3B0aW9uX2RlcHRoKSA8IDEpCisJCWRpZShfKCJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiKSwgb3B0aW9uX2RlcHRoKTsKKworCWlmIChhcmdjID09IDIpCisJCWRpciA9IHhzdHJkdXAoYXJndlsxXSk7CisJZWxzZQorCQlkaXIgPSBndWVzc19kaXJfbmFtZShyZXBvX25hbWUsIGlzX2J1bmRsZSwgb3B0aW9uX2JhcmUpOworCXN0cmlwX3RyYWlsaW5nX3NsYXNoZXMoZGlyKTsKKworCWRlc3RfZXhpc3RzID0gcGF0aF9leGlzdHMoZGlyKTsKKwlpZiAoZGVzdF9leGlzdHMgJiYgIWlzX2VtcHR5X2RpcihkaXIpKQorCQlkaWUoXygiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgIgorCQkJImFuIGVtcHR5IGRpcmVjdG9yeS4iKSwgZGlyKTsKKworCXN0cmJ1Zl9hZGRmKCZyZWZsb2dfbXNnLCAiY2xvbmU6IGZyb20gJXMiLCByZXBvKTsKKworCWlmIChvcHRpb25fYmFyZSkKKwkJd29ya190cmVlID0gTlVMTDsKKwllbHNlIHsKKwkJd29ya190cmVlID0gZ2V0ZW52KCJHSVRfV09SS19UUkVFIik7CisJCWlmICh3b3JrX3RyZWUgJiYgcGF0aF9leGlzdHMod29ya190cmVlKSkKKwkJCWRpZShfKCJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iKSwgd29ya190cmVlKTsKKwl9CisKKwlpZiAob3B0aW9uX2JhcmUgfHwgd29ya190cmVlKQorCQlnaXRfZGlyID0geHN0cmR1cChkaXIpOworCWVsc2UgeworCQl3b3JrX3RyZWUgPSBkaXI7CisJCWdpdF9kaXIgPSBta3BhdGhkdXAoIiVzLy5naXQiLCBkaXIpOworCX0KKworCWF0ZXhpdChyZW1vdmVfanVuayk7CisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX2p1bmtfb25fc2lnbmFsKTsKKworCWlmICghb3B0aW9uX2JhcmUpIHsKKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3Qod29ya190cmVlKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciKSwKKwkJCQkgIHdvcmtfdHJlZSk7CisJCWlmIChkZXN0X2V4aXN0cykKKwkJCWp1bmtfd29ya190cmVlX2ZsYWdzIHw9IFJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTDsKKwkJZWxzZSBpZiAobWtkaXIod29ya190cmVlLCAwNzc3KSkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIpLAorCQkJCSAgd29ya190cmVlKTsKKwkJanVua193b3JrX3RyZWUgPSB3b3JrX3RyZWU7CisJCXNldF9naXRfd29ya190cmVlKHdvcmtfdHJlZSk7CisJfQorCisJaWYgKHJlYWxfZ2l0X2RpcikgeworCQlpZiAocGF0aF9leGlzdHMocmVhbF9naXRfZGlyKSkKKwkJCWp1bmtfZ2l0X2Rpcl9mbGFncyB8PSBSRU1PVkVfRElSX0tFRVBfVE9QTEVWRUw7CisJCWp1bmtfZ2l0X2RpciA9IHJlYWxfZ2l0X2RpcjsKKwl9IGVsc2UgeworCQlpZiAoZGVzdF9leGlzdHMpCisJCQlqdW5rX2dpdF9kaXJfZmxhZ3MgfD0gUkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMOworCQlqdW5rX2dpdF9kaXIgPSBnaXRfZGlyOworCX0KKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChnaXRfZGlyKSA8IDApCisJCWRpZShfKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIpLCBnaXRfZGlyKTsKKworCWlmICgwIDw9IG9wdGlvbl92ZXJib3NpdHkpIHsKKwkJaWYgKG9wdGlvbl9iYXJlKQorCQkJZnByaW50ZihzdGRlcnIsIF8oIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIiksIGRpcik7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJDbG9uaW5nIGludG8gJyVzJy4uLlxuIiksIGRpcik7CisJfQorCisJaWYgKG9wdGlvbl9yZWN1cnNlX3N1Ym1vZHVsZXMubnIgPiAwKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJLyogcmVtb3ZlIGR1cGxpY2F0ZXMgKi8KKwkJc3RyaW5nX2xpc3Rfc29ydCgmb3B0aW9uX3JlY3Vyc2Vfc3VibW9kdWxlcyk7CisJCXN0cmluZ19saXN0X3JlbW92ZV9kdXBsaWNhdGVzKCZvcHRpb25fcmVjdXJzZV9zdWJtb2R1bGVzLCAwKTsKKworCQkvKgorCQkgKiBORUVEU1dPUks6IEluIGEgbXVsdGktd29ya2luZy10cmVlIHdvcmxkLCB0aGlzIG5lZWRzIHRvIGJlCisJCSAqIHNldCBpbiB0aGUgcGVyLXdvcmt0cmVlIGNvbmZpZy4KKwkJICovCisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJm9wdGlvbl9yZWN1cnNlX3N1Ym1vZHVsZXMpIHsKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgInN1Ym1vZHVsZS5hY3RpdmU9JXMiLAorCQkJCSAgICBpdGVtLT5zdHJpbmcpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZvcHRpb25fY29uZmlnLAorCQkJCQkgICBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCkpOworCQl9CisKKwkJaWYgKG9wdGlvbl9yZXF1aXJlZF9yZWZlcmVuY2UubnIgJiYKKwkJICAgIG9wdGlvbl9vcHRpb25hbF9yZWZlcmVuY2UubnIpCisJCQlkaWUoXygiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCAiCisJCQkgICAgICAiYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtYWJsZSIpKTsKKwkJZWxzZSBpZiAob3B0aW9uX3JlcXVpcmVkX3JlZmVyZW5jZS5ucikgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZvcHRpb25fY29uZmlnLAorCQkJCSJzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb249c3VwZXJwcm9qZWN0Iik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm9wdGlvbl9jb25maWcsCisJCQkJInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5PWRpZSIpOworCQl9IGVsc2UgaWYgKG9wdGlvbl9vcHRpb25hbF9yZWZlcmVuY2UubnIpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3B0aW9uX2NvbmZpZywKKwkJCQkic3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uPXN1cGVycHJvamVjdCIpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZvcHRpb25fY29uZmlnLAorCQkJCSJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneT1pbmZvIik7CisJCX0KKwl9CisKKwlpbml0X2RiKGdpdF9kaXIsIHJlYWxfZ2l0X2Rpciwgb3B0aW9uX3RlbXBsYXRlLCBJTklUX0RCX1FVSUVUKTsKKworCWlmIChyZWFsX2dpdF9kaXIpCisJCWdpdF9kaXIgPSByZWFsX2dpdF9kaXI7CisKKwl3cml0ZV9jb25maWcoJm9wdGlvbl9jb25maWcpOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJaWYgKG9wdGlvbl9iYXJlKSB7CisJCWlmIChvcHRpb25fbWlycm9yKQorCQkJc3JjX3JlZl9wcmVmaXggPSAicmVmcy8iOworCQlzdHJidWZfYWRkc3RyKCZicmFuY2hfdG9wLCBzcmNfcmVmX3ByZWZpeCk7CisKKwkJZ2l0X2NvbmZpZ19zZXQoImNvcmUuYmFyZSIsICJ0cnVlIik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoJmJyYW5jaF90b3AsICJyZWZzL3JlbW90ZXMvJXMvIiwgb3B0aW9uX29yaWdpbik7CisJfQorCisJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy51cmwiLCBvcHRpb25fb3JpZ2luKTsKKwlnaXRfY29uZmlnX3NldChrZXkuYnVmLCByZXBvKTsKKwlzdHJidWZfcmVzZXQoJmtleSk7CisKKwlpZiAob3B0aW9uX25vX3RhZ3MpIHsKKwkJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy50YWdPcHQiLCBvcHRpb25fb3JpZ2luKTsKKwkJZ2l0X2NvbmZpZ19zZXQoa2V5LmJ1ZiwgIi0tbm8tdGFncyIpOworCQlzdHJidWZfcmVzZXQoJmtleSk7CisJfQorCisJaWYgKG9wdGlvbl9yZXF1aXJlZF9yZWZlcmVuY2UubnIgfHwgb3B0aW9uX29wdGlvbmFsX3JlZmVyZW5jZS5ucikKKwkJc2V0dXBfcmVmZXJlbmNlKCk7CisKKwlpZiAob3B0aW9uX3NwYXJzZV9jaGVja291dCAmJiBnaXRfc3BhcnNlX2NoZWNrb3V0X2luaXQoZGlyKSkKKwkJcmV0dXJuIDE7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KG9wdGlvbl9vcmlnaW4pOworCisJc3RyYnVmX2FkZGYoJmRlZmF1bHRfcmVmc3BlYywgIislcyo6JXMqIiwgc3JjX3JlZl9wcmVmaXgsCisJCSAgICBicmFuY2hfdG9wLmJ1Zik7CisJcmVmc3BlY19hcHBlbmQoJnJlbW90ZS0+ZmV0Y2gsIGRlZmF1bHRfcmVmc3BlYy5idWYpOworCisJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChyZW1vdGUsIHJlbW90ZS0+dXJsWzBdKTsKKwl0cmFuc3BvcnRfc2V0X3ZlcmJvc2l0eSh0cmFuc3BvcnQsIG9wdGlvbl92ZXJib3NpdHksIG9wdGlvbl9wcm9ncmVzcyk7CisJdHJhbnNwb3J0LT5mYW1pbHkgPSBmYW1pbHk7CisKKwlwYXRoID0gZ2V0X3JlcG9fcGF0aChyZW1vdGUtPnVybFswXSwgJmlzX2J1bmRsZSk7CisJaXNfbG9jYWwgPSBvcHRpb25fbG9jYWwgIT0gMCAmJiBwYXRoICYmICFpc19idW5kbGU7CisJaWYgKGlzX2xvY2FsKSB7CisJCWlmIChvcHRpb25fZGVwdGgpCisJCQl3YXJuaW5nKF8oIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIikpOworCQlpZiAob3B0aW9uX3NpbmNlKQorCQkJd2FybmluZyhfKCItLXNoYWxsb3ctc2luY2UgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIikpOworCQlpZiAob3B0aW9uX25vdC5ucikKKwkJCXdhcm5pbmcoXygiLS1zaGFsbG93LWV4Y2x1ZGUgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIikpOworCQlpZiAoZmlsdGVyX29wdGlvbnMuY2hvaWNlKQorCQkJd2FybmluZyhfKCItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iKSk7CisJCWlmICghYWNjZXNzKG1rcGF0aCgiJXMvc2hhbGxvdyIsIHBhdGgpLCBGX09LKSkgeworCQkJaWYgKG9wdGlvbl9sb2NhbCA+IDApCisJCQkJd2FybmluZyhfKCJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIikpOworCQkJaXNfbG9jYWwgPSAwOworCQl9CisJfQorCWlmIChvcHRpb25fbG9jYWwgPiAwICYmICFpc19sb2NhbCkKKwkJd2FybmluZyhfKCItLWxvY2FsIGlzIGlnbm9yZWQiKSk7CisJdHJhbnNwb3J0LT5jbG9uaW5nID0gMTsKKworCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0tFRVAsICJ5ZXMiKTsKKworCWlmIChvcHRpb25fZGVwdGgpCisJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0RFUFRILAorCQkJCSAgICAgb3B0aW9uX2RlcHRoKTsKKwlpZiAob3B0aW9uX3NpbmNlKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9ERUVQRU5fU0lOQ0UsCisJCQkJICAgICBvcHRpb25fc2luY2UpOworCWlmIChvcHRpb25fbm90Lm5yKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9ERUVQRU5fTk9ULAorCQkJCSAgICAgKGNvbnN0IGNoYXIgKikmb3B0aW9uX25vdCk7CisJaWYgKG9wdGlvbl9zaW5nbGVfYnJhbmNoKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GT0xMT1dUQUdTLCAiMSIpOworCisJaWYgKG9wdGlvbl91cGxvYWRfcGFjaykKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVVBMT0FEUEFDSywKKwkJCQkgICAgIG9wdGlvbl91cGxvYWRfcGFjayk7CisKKwlpZiAoc2VydmVyX29wdGlvbnMubnIpCisJCXRyYW5zcG9ydC0+c2VydmVyX29wdGlvbnMgPSAmc2VydmVyX29wdGlvbnM7CisKKwlpZiAoZmlsdGVyX29wdGlvbnMuY2hvaWNlKSB7CisJCWNvbnN0IGNoYXIgKnNwZWMgPQorCQkJZXhwYW5kX2xpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYygmZmlsdGVyX29wdGlvbnMpOworCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9MSVNUX09CSkVDVFNfRklMVEVSLAorCQkJCSAgICAgc3BlYyk7CisJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZST01fUFJPTUlTT1IsICIxIik7CisJfQorCisJaWYgKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyAmJiAhZGVlcGVuICYmICFmaWx0ZXJfb3B0aW9ucy5jaG9pY2UpCisJCXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9IDE7CisKKworCWFyZ3ZfYXJyYXlfcHVzaCgmcmVmX3ByZWZpeGVzLCAiSEVBRCIpOworCXJlZnNwZWNfcmVmX3ByZWZpeGVzKCZyZW1vdGUtPmZldGNoLCAmcmVmX3ByZWZpeGVzKTsKKwlpZiAob3B0aW9uX2JyYW5jaCkKKwkJZXhwYW5kX3JlZl9wcmVmaXgoJnJlZl9wcmVmaXhlcywgb3B0aW9uX2JyYW5jaCk7CisJaWYgKCFvcHRpb25fbm9fdGFncykKKwkJYXJndl9hcnJheV9wdXNoKCZyZWZfcHJlZml4ZXMsICJyZWZzL3RhZ3MvIik7CisKKwlyZWZzID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQsICZyZWZfcHJlZml4ZXMpOworCisJaWYgKHJlZnMpIHsKKwkJbWFwcGVkX3JlZnMgPSB3YW50ZWRfcGVlcl9yZWZzKHJlZnMsICZyZW1vdGUtPmZldGNoKTsKKwkJLyoKKwkJICogdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcygpIG1heSByZXR1cm4gcmVmcyB3aXRoIG51bGwgc2hhLTEKKwkJICogaW4gbWFwcGVkX3JlZnMgKHNlZSBzdHJ1Y3QgdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0CisJCSAqIGNvbW1lbnQpLiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCBmZXRjaCBpdCBlYXJseSBiZWNhdXNlCisJCSAqIHJlbW90ZV9oZWFkIGNvZGUgYmVsb3cgcmVsaWVzIG9uIGl0LgorCQkgKgorCQkgKiBmb3Igbm9ybWFsIGNsb25lcywgdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcygpIHNob3VsZAorCQkgKiByZXR1cm4gcmVsaWFibGUgcmVmIHNldCwgd2UgY2FuIGRlbGF5IGNsb25pbmcgdW50aWwgYWZ0ZXIKKwkJICogcmVtb3RlIEhFQUQgY2hlY2suCisJCSAqLworCQlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJaWYgKGlzX251bGxfb2lkKCZyZWYtPm9sZF9vaWQpKSB7CisJCQkJY29tcGxldGVfcmVmc19iZWZvcmVfZmV0Y2ggPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCWlmICghaXNfbG9jYWwgJiYgIWNvbXBsZXRlX3JlZnNfYmVmb3JlX2ZldGNoKQorCQkJdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCBtYXBwZWRfcmVmcyk7CisKKwkJcmVtb3RlX2hlYWQgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsICJIRUFEIik7CisJCXJlbW90ZV9oZWFkX3BvaW50c19hdCA9CisJCQlndWVzc19yZW1vdGVfaGVhZChyZW1vdGVfaGVhZCwgbWFwcGVkX3JlZnMsIDApOworCisJCWlmIChvcHRpb25fYnJhbmNoKSB7CisJCQlvdXJfaGVhZF9wb2ludHNfYXQgPQorCQkJCWZpbmRfcmVtb3RlX2JyYW5jaChtYXBwZWRfcmVmcywgb3B0aW9uX2JyYW5jaCk7CisKKwkJCWlmICghb3VyX2hlYWRfcG9pbnRzX2F0KQorCQkJCWRpZShfKCJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIpLAorCQkJCSAgICBvcHRpb25fYnJhbmNoLCBvcHRpb25fb3JpZ2luKTsKKwkJfQorCQllbHNlCisJCQlvdXJfaGVhZF9wb2ludHNfYXQgPSByZW1vdGVfaGVhZF9wb2ludHNfYXQ7CisJfQorCWVsc2UgeworCQlpZiAob3B0aW9uX2JyYW5jaCkKKwkJCWRpZShfKCJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIpLAorCQkJCQlvcHRpb25fYnJhbmNoLCBvcHRpb25fb3JpZ2luKTsKKworCQl3YXJuaW5nKF8oIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iKSk7CisJCW1hcHBlZF9yZWZzID0gTlVMTDsKKwkJb3VyX2hlYWRfcG9pbnRzX2F0ID0gTlVMTDsKKwkJcmVtb3RlX2hlYWRfcG9pbnRzX2F0ID0gTlVMTDsKKwkJcmVtb3RlX2hlYWQgPSBOVUxMOworCQlvcHRpb25fbm9fY2hlY2tvdXQgPSAxOworCQlpZiAoIW9wdGlvbl9iYXJlKQorCQkJaW5zdGFsbF9icmFuY2hfY29uZmlnKDAsICJtYXN0ZXIiLCBvcHRpb25fb3JpZ2luLAorCQkJCQkgICAgICAicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKwl9CisKKwl3cml0ZV9yZWZzcGVjX2NvbmZpZyhzcmNfcmVmX3ByZWZpeCwgb3VyX2hlYWRfcG9pbnRzX2F0LAorCQkJcmVtb3RlX2hlYWRfcG9pbnRzX2F0LCAmYnJhbmNoX3RvcCk7CisKKwlpZiAoZmlsdGVyX29wdGlvbnMuY2hvaWNlKQorCQlwYXJ0aWFsX2Nsb25lX3JlZ2lzdGVyKG9wdGlvbl9vcmlnaW4sICZmaWx0ZXJfb3B0aW9ucyk7CisKKwlpZiAoaXNfbG9jYWwpCisJCWNsb25lX2xvY2FsKHBhdGgsIGdpdF9kaXIpOworCWVsc2UgaWYgKHJlZnMgJiYgY29tcGxldGVfcmVmc19iZWZvcmVfZmV0Y2gpCisJCXRyYW5zcG9ydF9mZXRjaF9yZWZzKHRyYW5zcG9ydCwgbWFwcGVkX3JlZnMpOworCisJdXBkYXRlX3JlbW90ZV9yZWZzKHJlZnMsIG1hcHBlZF9yZWZzLCByZW1vdGVfaGVhZF9wb2ludHNfYXQsCisJCQkgICBicmFuY2hfdG9wLmJ1ZiwgcmVmbG9nX21zZy5idWYsIHRyYW5zcG9ydCwKKwkJCSAgICFpc19sb2NhbCwgZmlsdGVyX29wdGlvbnMuY2hvaWNlKTsKKworCXVwZGF0ZV9oZWFkKG91cl9oZWFkX3BvaW50c19hdCwgcmVtb3RlX2hlYWQsIHJlZmxvZ19tc2cuYnVmKTsKKworCS8qCisJICogV2Ugd2FudCB0byBzaG93IHByb2dyZXNzIGZvciByZWN1cnNpdmUgc3VibW9kdWxlIGNsb25lcyBpZmYKKwkgKiB3ZSBkaWQgc28gZm9yIHRoZSBtYWluIGNsb25lLiBCdXQgb25seSB0aGUgdHJhbnNwb3J0IGtub3dzCisJICogdGhlIGZpbmFsIGRlY2lzaW9uIGZvciB0aGlzIGZsYWcsIHNvIHdlIG5lZWQgdG8gcmVzY3VlIHRoZSB2YWx1ZQorCSAqIGJlZm9yZSB3ZSBmcmVlIHRoZSB0cmFuc3BvcnQuCisJICovCisJc3VibW9kdWxlX3Byb2dyZXNzID0gdHJhbnNwb3J0LT5wcm9ncmVzczsKKworCXRyYW5zcG9ydF91bmxvY2tfcGFjayh0cmFuc3BvcnQpOworCXRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisKKwlpZiAob3B0aW9uX2Rpc3NvY2lhdGUpIHsKKwkJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKwkJZGlzc29jaWF0ZV9mcm9tX3JlZmVyZW5jZXMoKTsKKwl9CisKKwlqdW5rX21vZGUgPSBKVU5LX0xFQVZFX1JFUE87CisJZXJyID0gY2hlY2tvdXQoc3VibW9kdWxlX3Byb2dyZXNzKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZsb2dfbXNnKTsKKwlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3RvcCk7CisJc3RyYnVmX3JlbGVhc2UoJmtleSk7CisJc3RyYnVmX3JlbGVhc2UoJmRlZmF1bHRfcmVmc3BlYyk7CisJanVua19tb2RlID0gSlVOS19MRUFWRV9BTEw7CisKKwlhcmd2X2FycmF5X2NsZWFyKCZyZWZfcHJlZml4ZXMpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NvbHVtbi5jIGIvYnVpbHRpbi9jb2x1bW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODE1ZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb2x1bW4uYwpAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jb2x1bW5fdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CisKK3N0YXRpYyBpbnQgY29sdW1uX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlyZXR1cm4gZ2l0X2NvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgY2IsICZjb2xvcHRzKTsKK30KKworaW50IGNtZF9jb2x1bW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNvbHVtbl9vcHRpb25zIGNvcHRzOworCWNvbnN0IGNoYXIgKmNvbW1hbmQgPSBOVUxMLCAqcmVhbF9jb21tYW5kID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAiY29tbWFuZCIsICZyZWFsX2NvbW1hbmQsIE5fKCJuYW1lIiksIE5fKCJsb29rdXAgY29uZmlnIHZhcnMiKSksCisJCU9QVF9DT0xVTU4oMCwgIm1vZGUiLCAmY29sb3B0cywgTl8oImxheW91dCB0byB1c2UiKSksCisJCU9QVF9JTlRFR0VSKDAsICJyYXctbW9kZSIsICZjb2xvcHRzLCBOXygibGF5b3V0IHRvIHVzZSIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgIndpZHRoIiwgJmNvcHRzLndpZHRoLCBOXygiTWF4aW11bSB3aWR0aCIpKSwKKwkJT1BUX1NUUklORygwLCAiaW5kZW50IiwgJmNvcHRzLmluZGVudCwgTl8oInN0cmluZyIpLCBOXygiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgIm5sIiwgJmNvcHRzLm5sLCBOXygiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiKSksCisJCU9QVF9JTlRFR0VSKDAsICJwYWRkaW5nIiwgJmNvcHRzLnBhZGRpbmcsIE5fKCJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCS8qIFRoaXMgb25lIGlzIHNwZWNpYWwgYW5kIG11c3QgYmUgdGhlIGZpcnN0IG9uZSAqLworCWlmIChhcmdjID4gMSAmJiBzdGFydHNfd2l0aChhcmd2WzFdLCAiLS1jb21tYW5kPSIpKSB7CisJCWNvbW1hbmQgPSBhcmd2WzFdICsgMTA7CisJCWdpdF9jb25maWcoY29sdW1uX2NvbmZpZywgKHZvaWQgKiljb21tYW5kKTsKKwl9IGVsc2UKKwkJZ2l0X2NvbmZpZyhjb2x1bW5fY29uZmlnLCBOVUxMKTsKKworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLnBhZGRpbmcgPSAxOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgYnVpbHRpbl9jb2x1bW5fdXNhZ2UsIDApOworCWlmIChhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb2x1bW5fdXNhZ2UsIG9wdGlvbnMpOworCWlmIChyZWFsX2NvbW1hbmQgfHwgY29tbWFuZCkgeworCQlpZiAoIXJlYWxfY29tbWFuZCB8fCAhY29tbWFuZCB8fCBzdHJjbXAocmVhbF9jb21tYW5kLCBjb21tYW5kKSkKKwkJCWRpZShfKCItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiKSk7CisJfQorCWZpbmFsaXplX2NvbG9wdHMoJmNvbG9wdHMsIC0xKTsKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lKCZzYiwgc3RkaW4pKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3QsIHNiLmJ1Zik7CisKKwlwcmludF9jb2x1bW5zKCZsaXN0LCBjb2xvcHRzLCAmY29wdHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jb21taXQtZ3JhcGguYyBiL2J1aWx0aW4vY29tbWl0LWdyYXBoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3MGIzMwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY29tbWl0LWdyYXBoLmMKQEAgLTAsMCArMSwyMzYgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X2dyYXBoX3VzYWdlW10gPSB7CisJTl8oImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIiksCisJTl8oImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2NvbW1pdF9ncmFwaF92ZXJpZnlfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X2dyYXBoX3dyaXRlX3VzYWdlW10gPSB7CisJTl8oImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IiksCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBvcHRzX2NvbW1pdF9ncmFwaCB7CisJY29uc3QgY2hhciAqb2JqX2RpcjsKKwlpbnQgcmVhY2hhYmxlOworCWludCBzdGRpbl9wYWNrczsKKwlpbnQgc3RkaW5fY29tbWl0czsKKwlpbnQgYXBwZW5kOworCWludCBzcGxpdDsKKwlpbnQgc2hhbGxvdzsKKwlpbnQgcHJvZ3Jlc3M7Cit9IG9wdHM7CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqZmluZF9vZGIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSBjb25zdCBjaGFyICpvYmpfZGlyKQoreworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisJY2hhciAqb2JqX2Rpcl9yZWFsID0gcmVhbF9wYXRoZHVwKG9ial9kaXIsIDEpOworCisJcHJlcGFyZV9hbHRfb2RiKHIpOworCWZvciAob2RiID0gci0+b2JqZWN0cy0+b2RiOyBvZGI7IG9kYiA9IG9kYi0+bmV4dCkgeworCQlpZiAoIXN0cmNtcChvYmpfZGlyX3JlYWwsIHJlYWxfcGF0aChvZGItPnBhdGgpKSkKKwkJCWJyZWFrOworCX0KKworCWZyZWUob2JqX2Rpcl9yZWFsKTsKKworCWlmICghb2RiKQorCQlkaWUoXygiY291bGQgbm90IGZpbmQgb2JqZWN0IGRpcmVjdG9yeSBtYXRjaGluZyAlcyIpLCBvYmpfZGlyKTsKKwlyZXR1cm4gb2RiOworfQorCitzdGF0aWMgaW50IGdyYXBoX3ZlcmlmeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqZ3JhcGggPSBOVUxMOworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIgPSBOVUxMOworCWNoYXIgKmdyYXBoX25hbWU7CisJaW50IG9wZW5fb2s7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCWludCBmbGFncyA9IDA7CisKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbW1pdF9ncmFwaF92ZXJpZnlfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqX2RpciwKKwkJCSAgIE5fKCJkaXIiKSwKKwkJCSAgIE5fKCJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiKSksCisJCU9QVF9CT09MKDAsICJzaGFsbG93IiwgJm9wdHMuc2hhbGxvdywKKwkJCSBOXygiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIikpLAorCQlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmb3B0cy5wcm9ncmVzcywgTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwl0cmFjZTJfY21kX21vZGUoInZlcmlmeSIpOworCisJb3B0cy5wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLAorCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF92ZXJpZnlfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9jb21taXRfZ3JhcGhfdmVyaWZ5X3VzYWdlLCAwKTsKKworCWlmICghb3B0cy5vYmpfZGlyKQorCQlvcHRzLm9ial9kaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCWlmIChvcHRzLnNoYWxsb3cpCisJCWZsYWdzIHw9IENPTU1JVF9HUkFQSF9WRVJJRllfU0hBTExPVzsKKwlpZiAob3B0cy5wcm9ncmVzcykKKwkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX1BST0dSRVNTOworCisJb2RiID0gZmluZF9vZGIodGhlX3JlcG9zaXRvcnksIG9wdHMub2JqX2Rpcik7CisJZ3JhcGhfbmFtZSA9IGdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUob2RiKTsKKwlvcGVuX29rID0gb3Blbl9jb21taXRfZ3JhcGgoZ3JhcGhfbmFtZSwgJmZkLCAmc3QpOworCWlmICghb3Blbl9vayAmJiBlcnJubyAhPSBFTk9FTlQpCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIpLCBncmFwaF9uYW1lKTsKKworCUZSRUVfQU5EX05VTEwoZ3JhcGhfbmFtZSk7CisKKwlpZiAob3Blbl9vaykKKwkJZ3JhcGggPSBsb2FkX2NvbW1pdF9ncmFwaF9vbmVfZmRfc3QoZmQsICZzdCwgb2RiKTsKKwllbHNlCisJCWdyYXBoID0gcmVhZF9jb21taXRfZ3JhcGhfb25lKHRoZV9yZXBvc2l0b3J5LCBvZGIpOworCisJLyogUmV0dXJuIGZhaWx1cmUgaWYgb3Blbl9vayBwcmVkaWN0ZWQgc3VjY2VzcyAqLworCWlmICghZ3JhcGgpCisJCXJldHVybiAhIW9wZW5fb2s7CisKKwlVTkxFQUsoZ3JhcGgpOworCXJldHVybiB2ZXJpZnlfY29tbWl0X2dyYXBoKHRoZV9yZXBvc2l0b3J5LCBncmFwaCwgZmxhZ3MpOworfQorCitleHRlcm4gaW50IHJlYWRfcmVwbGFjZV9yZWZzOworc3RhdGljIHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyBzcGxpdF9vcHRzOworCitzdGF0aWMgaW50IGdyYXBoX3dyaXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tfaW5kZXhlcyA9IE5VTEw7CisJc3RydWN0IHN0cmluZ19saXN0ICpjb21taXRfaGV4ID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGluZXM7CisJaW50IHJlc3VsdCA9IDA7CisJZW51bSBjb21taXRfZ3JhcGhfd3JpdGVfZmxhZ3MgZmxhZ3MgPSAwOworCisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9jb21taXRfZ3JhcGhfd3JpdGVfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqX2RpciwKKwkJCU5fKCJkaXIiKSwKKwkJCU5fKCJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiKSksCisJCU9QVF9CT09MKDAsICJyZWFjaGFibGUiLCAmb3B0cy5yZWFjaGFibGUsCisJCQlOXygic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIpKSwKKwkJT1BUX0JPT0woMCwgInN0ZGluLXBhY2tzIiwgJm9wdHMuc3RkaW5fcGFja3MsCisJCQlOXygic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIikpLAorCQlPUFRfQk9PTCgwLCAic3RkaW4tY29tbWl0cyIsICZvcHRzLnN0ZGluX2NvbW1pdHMsCisJCQlOXygic3RhcnQgd2FsayBhdCBjb21taXRzIGxpc3RlZCBieSBzdGRpbiIpKSwKKwkJT1BUX0JPT0woMCwgImFwcGVuZCIsICZvcHRzLmFwcGVuZCwKKwkJCU5fKCJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIikpLAorCQlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmb3B0cy5wcm9ncmVzcywgTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0JPT0woMCwgInNwbGl0IiwgJm9wdHMuc3BsaXQsCisJCQlOXygiYWxsb3cgd3JpdGluZyBhbiBpbmNyZW1lbnRhbCBjb21taXQtZ3JhcGggZmlsZSIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgIm1heC1jb21taXRzIiwgJnNwbGl0X29wdHMubWF4X2NvbW1pdHMsCisJCQlOXygibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInNpemUtbXVsdGlwbGUiLCAmc3BsaXRfb3B0cy5zaXplX211bHRpcGxlLAorCQkJTl8oIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIikpLAorCQlPUFRfRVhQSVJZX0RBVEUoMCwgImV4cGlyZS10aW1lIiwgJnNwbGl0X29wdHMuZXhwaXJlX3RpbWUsCisJCQlOXygibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlvcHRzLnByb2dyZXNzID0gaXNhdHR5KDIpOworCXNwbGl0X29wdHMuc2l6ZV9tdWx0aXBsZSA9IDI7CisJc3BsaXRfb3B0cy5tYXhfY29tbWl0cyA9IDA7CisJc3BsaXRfb3B0cy5leHBpcmVfdGltZSA9IDA7CisKKwl0cmFjZTJfY21kX21vZGUoIndyaXRlIik7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLAorCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF93cml0ZV9vcHRpb25zLAorCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF93cml0ZV91c2FnZSwgMCk7CisKKwlpZiAob3B0cy5yZWFjaGFibGUgKyBvcHRzLnN0ZGluX3BhY2tzICsgb3B0cy5zdGRpbl9jb21taXRzID4gMSkKKwkJZGllKF8oInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIikpOworCWlmICghb3B0cy5vYmpfZGlyKQorCQlvcHRzLm9ial9kaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCWlmIChvcHRzLmFwcGVuZCkKKwkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX0FQUEVORDsKKwlpZiAob3B0cy5zcGxpdCkKKwkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX1NQTElUOworCWlmIChvcHRzLnByb2dyZXNzKQorCQlmbGFncyB8PSBDT01NSVRfR1JBUEhfV1JJVEVfUFJPR1JFU1M7CisKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisJb2RiID0gZmluZF9vZGIodGhlX3JlcG9zaXRvcnksIG9wdHMub2JqX2Rpcik7CisKKwlpZiAob3B0cy5yZWFjaGFibGUpIHsKKwkJaWYgKHdyaXRlX2NvbW1pdF9ncmFwaF9yZWFjaGFibGUob2RiLCBmbGFncywgJnNwbGl0X29wdHMpKQorCQkJcmV0dXJuIDE7CisJCXJldHVybiAwOworCX0KKworCXN0cmluZ19saXN0X2luaXQoJmxpbmVzLCAwKTsKKwlpZiAob3B0cy5zdGRpbl9wYWNrcyB8fCBvcHRzLnN0ZGluX2NvbW1pdHMpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4pICE9IEVPRikKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmbGluZXMsIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCisJCWlmIChvcHRzLnN0ZGluX3BhY2tzKQorCQkJcGFja19pbmRleGVzID0gJmxpbmVzOworCQlpZiAob3B0cy5zdGRpbl9jb21taXRzKSB7CisJCQljb21taXRfaGV4ID0gJmxpbmVzOworCQkJZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX0NIRUNLX09JRFM7CisJCX0KKworCQlVTkxFQUsoYnVmKTsKKwl9CisKKwlpZiAod3JpdGVfY29tbWl0X2dyYXBoKG9kYiwKKwkJCSAgICAgICBwYWNrX2luZGV4ZXMsCisJCQkgICAgICAgY29tbWl0X2hleCwKKwkJCSAgICAgICBmbGFncywKKwkJCSAgICAgICAmc3BsaXRfb3B0cykpCisJCXJlc3VsdCA9IDE7CisKKwlVTkxFQUsobGluZXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBjbWRfY29tbWl0X2dyYXBoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fY29tbWl0X2dyYXBoX29wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAib2JqZWN0LWRpciIsICZvcHRzLm9ial9kaXIsCisJCQlOXygiZGlyIiksCisJCQlOXygiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29tbWl0X2dyYXBoX3VzYWdlLAorCQkJCSAgIGJ1aWx0aW5fY29tbWl0X2dyYXBoX29wdGlvbnMpOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9jb21taXRfZ3JhcGhfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9jb21taXRfZ3JhcGhfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKworCWlmIChhcmdjID4gMCkgeworCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAidmVyaWZ5IikpCisJCQlyZXR1cm4gZ3JhcGhfdmVyaWZ5KGFyZ2MsIGFyZ3YpOworCQlpZiAoIXN0cmNtcChhcmd2WzBdLCAid3JpdGUiKSkKKwkJCXJldHVybiBncmFwaF93cml0ZShhcmdjLCBhcmd2KTsKKwl9CisKKwl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb21taXRfZ3JhcGhfdXNhZ2UsCisJCQkgICBidWlsdGluX2NvbW1pdF9ncmFwaF9vcHRpb25zKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LXRyZWUuYyBiL2J1aWx0aW4vY29tbWl0LXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY2ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb21taXQtdHJlZS5jCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb21taXRfdHJlZV91c2FnZVtdID0geworCU5fKCJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSAiCisJCSJbKC1GIDxmaWxlPikuLi5dIDx0cmVlPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzaWduX2NvbW1pdDsKKworc3RhdGljIHZvaWQgbmV3X3BhcmVudChzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsIHN0cnVjdCBjb21taXRfbGlzdCAqKnBhcmVudHNfcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSAmcGFyZW50LT5vYmplY3Qub2lkOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlmb3IgKHBhcmVudHMgPSAqcGFyZW50c19wOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQlpZiAocGFyZW50cy0+aXRlbSA9PSBwYXJlbnQpIHsKKwkJCWVycm9yKF8oImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIpLCBvaWRfdG9faGV4KG9pZCkpOworCQkJcmV0dXJuOworCQl9CisJCXBhcmVudHNfcCA9ICZwYXJlbnRzLT5uZXh0OworCX0KKwljb21taXRfbGlzdF9pbnNlcnQocGFyZW50LCBwYXJlbnRzX3ApOworfQorCitzdGF0aWMgaW50IGNvbW1pdF90cmVlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzID0gZ2l0X2dwZ19jb25maWcodmFyLCB2YWx1ZSwgTlVMTCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBwYXJzZV9wYXJlbnRfYXJnX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcGFyZW50cyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FR19OT0FSRyh1bnNldCwgYXJnKTsKKworCWlmIChnZXRfb2lkX2NvbW1pdChhcmcsICZvaWQpKQorCQlkaWUoXygibm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiKSwgYXJnKTsKKworCWFzc2VydF9vaWRfdHlwZSgmb2lkLCBPQkpfQ09NTUlUKTsKKwluZXdfcGFyZW50KGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksICZvaWQpLCBwYXJlbnRzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9tZXNzYWdlX2FyZ19jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FR19OT0FSRyh1bnNldCwgYXJnKTsKKworCWlmIChidWYtPmxlbikKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJc3RyYnVmX2FkZHN0cihidWYsIGFyZyk7CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUoYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZpbGVfYXJnX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50IGZkOworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FR19OT0FSRyh1bnNldCwgYXJnKTsKKworCWlmIChidWYtPmxlbikKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJaWYgKCFzdHJjbXAoYXJnLCAiLSIpKQorCQlmZCA9IDA7CisJZWxzZSB7CisJCWZkID0gb3BlbihhcmcsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciKSwgYXJnKTsKKwl9CisJaWYgKHN0cmJ1Zl9yZWFkKGJ1ZiwgZmQsIDApIDwgMCkKKwkJZGllX2Vycm5vKF8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIpLCBhcmcpOworCWlmIChmZCAmJiBjbG9zZShmZCkpCisJCWRpZV9lcnJubyhfKCJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBjbG9zZSAnJXMnIiksIGFyZyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9jb21taXRfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgdHJlZV9vaWQ7CisJc3RydWN0IG9iamVjdF9pZCBjb21taXRfb2lkOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAncCcsIE5VTEwsICZwYXJlbnRzLCBOXygicGFyZW50IiksCisJCQlOXygiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9wYXJlbnRfYXJnX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnbScsIE5VTEwsICZidWZmZXIsIE5fKCJtZXNzYWdlIiksCisJCQlOXygiY29tbWl0IG1lc3NhZ2UiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfbWVzc2FnZV9hcmdfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdGJywgTlVMTCwgJmJ1ZmZlciwgTl8oImZpbGUiKSwKKwkJCU5fKCJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfZmlsZV9hcmdfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fU1RSSU5HLCAnUycsICJncGctc2lnbiIsICZzaWduX2NvbW1pdCwgTl8oImtleS1pZCIpLAorCQkJTl8oIkdQRyBzaWduIGNvbW1pdCIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpICIiIH0sCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGNvbW1pdF90cmVlX2NvbmZpZywgTlVMTCk7CisKKwlpZiAoYXJnYyA8IDIgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNvbW1pdF90cmVlX3VzYWdlLCBvcHRpb25zKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgY29tbWl0X3RyZWVfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MgIT0gMSkKKwkJZGllKF8oIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIikpOworCisJaWYgKGdldF9vaWRfdHJlZShhcmd2WzBdLCAmdHJlZV9vaWQpKQorCQlkaWUoXygibm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiKSwgYXJndlswXSk7CisKKwlpZiAoIWJ1ZmZlci5sZW4pIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkKCZidWZmZXIsIDAsIDApIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIikpOworCX0KKworCWlmIChjb21taXRfdHJlZShidWZmZXIuYnVmLCBidWZmZXIubGVuLCAmdHJlZV9vaWQsIHBhcmVudHMsICZjb21taXRfb2lkLAorCQkJTlVMTCwgc2lnbl9jb21taXQpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZjb21taXRfb2lkKSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NvbW1pdC5jIGIvYnVpbHRpbi9jb21taXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmEzM2EzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb21taXQuYwpAQCAtMCwwICsxLDE3MTkgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgY29tbWl0IgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPgorICogQmFzZWQgb24gZ2l0LWNvbW1pdC5zaCBieSBKdW5pbyBDIEhhbWFubyBhbmQgTGludXMgVG9ydmFsZHMKKyAqLworCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorI2luY2x1ZGUgImhlbHAuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2NvbW1pdF91c2FnZVtdID0geworCU5fKCJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9zdGF0dXNfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9hbWVuZF9hZHZpY2VbXSA9CitOXygiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZW1wdHlfY2hlcnJ5X3BpY2tfYWR2aWNlW10gPQorTl8oIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZW1wdHlfY2hlcnJ5X3BpY2tfYWR2aWNlX3NpbmdsZVtdID0KK05fKCJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZW1wdHlfY2hlcnJ5X3BpY2tfYWR2aWNlX211bHRpW10gPQorTl8oImFuZCB0aGVuIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyJ0byByZXN1bWUgY2hlcnJ5LXBpY2tpbmcgdGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb2xvcl9zdGF0dXNfc2xvdHNbXSA9IHsKKwlbV1RfU1RBVFVTX0hFQURFUl0JICA9ICJoZWFkZXIiLAorCVtXVF9TVEFUVVNfVVBEQVRFRF0JICA9ICJ1cGRhdGVkIiwKKwlbV1RfU1RBVFVTX0NIQU5HRURdCSAgPSAiY2hhbmdlZCIsCisJW1dUX1NUQVRVU19VTlRSQUNLRURdCSAgPSAidW50cmFja2VkIiwKKwlbV1RfU1RBVFVTX05PQlJBTkNIXQkgID0gIm5vQnJhbmNoIiwKKwlbV1RfU1RBVFVTX1VOTUVSR0VEXQkgID0gInVubWVyZ2VkIiwKKwlbV1RfU1RBVFVTX0xPQ0FMX0JSQU5DSF0gID0gImxvY2FsQnJhbmNoIiwKKwlbV1RfU1RBVFVTX1JFTU9URV9CUkFOQ0hdID0gInJlbW90ZUJyYW5jaCIsCisJW1dUX1NUQVRVU19PTkJSQU5DSF0JICA9ICJicmFuY2giLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnVzZV9tZXNzYWdlX2J1ZmZlcjsKK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2s7IC8qIHJlYWwgaW5kZXggKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGZhbHNlX2xvY2s7IC8qIHVzZWQgb25seSBmb3IgcGFydGlhbCBjb21taXRzICovCitzdGF0aWMgZW51bSB7CisJQ09NTUlUX0FTX0lTID0gMSwKKwlDT01NSVRfTk9STUFMLAorCUNPTU1JVF9QQVJUSUFMCit9IGNvbW1pdF9zdHlsZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmxvZ2ZpbGUsICpmb3JjZV9hdXRob3I7CitzdGF0aWMgY29uc3QgY2hhciAqdGVtcGxhdGVfZmlsZTsKKy8qCisgKiBUaGUgX21lc3NhZ2UgdmFyaWFibGVzIGFyZSBjb21taXQgbmFtZXMgZnJvbSB3aGljaCB0byB0YWtlCisgKiB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kL29yIGF1dGhvcnNoaXAuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICphdXRob3JfbWVzc2FnZSwgKmF1dGhvcl9tZXNzYWdlX2J1ZmZlcjsKK3N0YXRpYyBjaGFyICplZGl0X21lc3NhZ2UsICp1c2VfbWVzc2FnZTsKK3N0YXRpYyBjaGFyICpmaXh1cF9tZXNzYWdlLCAqc3F1YXNoX21lc3NhZ2U7CitzdGF0aWMgaW50IGFsbCwgYWxzbywgaW50ZXJhY3RpdmUsIHBhdGNoX2ludGVyYWN0aXZlLCBvbmx5LCBhbWVuZCwgc2lnbm9mZjsKK3N0YXRpYyBpbnQgZWRpdF9mbGFnID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCitzdGF0aWMgaW50IHF1aWV0LCB2ZXJib3NlLCBub192ZXJpZnksIGFsbG93X2VtcHR5LCBkcnlfcnVuLCByZW5ld19hdXRob3JzaGlwOworc3RhdGljIGludCBjb25maWdfY29tbWl0X3ZlcmJvc2UgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KK3N0YXRpYyBpbnQgbm9fcG9zdF9yZXdyaXRlLCBhbGxvd19lbXB0eV9tZXNzYWdlLCBwYXRoc3BlY19maWxlX251bDsKK3N0YXRpYyBjaGFyICp1bnRyYWNrZWRfZmlsZXNfYXJnLCAqZm9yY2VfZGF0ZSwgKmlnbm9yZV9zdWJtb2R1bGVfYXJnLCAqaWdub3JlZF9hcmc7CitzdGF0aWMgY2hhciAqc2lnbl9jb21taXQsICpwYXRoc3BlY19mcm9tX2ZpbGU7CisKKy8qCisgKiBUaGUgZGVmYXVsdCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgd2lsbCByZW1vdmUgdGhlIGxpbmVzCisgKiBiZWdpbm5pbmcgd2l0aCAjIChzaGVsbCBjb21tZW50cykgYW5kIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgKiB3aGl0ZXNwYWNlcyAoZW1wdHkgbGluZXMgb3IgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2VzKQorICogaWYgZWRpdG9yIGlzIHVzZWQsIGFuZCBvbmx5IHRoZSB3aGl0ZXNwYWNlcyBpZiB0aGUgbWVzc2FnZQorICogaXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkuCisgKi8KK3N0YXRpYyBlbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXBfbW9kZTsKK3N0YXRpYyBjb25zdCBjaGFyICpjbGVhbnVwX2FyZzsKKworc3RhdGljIGVudW0gY29tbWl0X3doZW5jZSB3aGVuY2U7CitzdGF0aWMgaW50IHNlcXVlbmNlcl9pbl91c2U7CitzdGF0aWMgaW50IHVzZV9lZGl0b3IgPSAxLCBpbmNsdWRlX3N0YXR1cyA9IDE7CitzdGF0aWMgaW50IGhhdmVfb3B0aW9uX207CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBtZXNzYWdlID0gU1RSQlVGX0lOSVQ7CisKK3N0YXRpYyBlbnVtIHd0X3N0YXR1c19mb3JtYXQgc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfVU5TUEVDSUZJRUQ7CisKK3N0YXRpYyBpbnQgb3B0X3BhcnNlX3BvcmNlbGFpbihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWVudW0gd3Rfc3RhdHVzX2Zvcm1hdCAqdmFsdWUgPSAoZW51bSB3dF9zdGF0dXNfZm9ybWF0ICopb3B0LT52YWx1ZTsKKwlpZiAodW5zZXQpCisJCSp2YWx1ZSA9IFNUQVRVU19GT1JNQVRfTk9ORTsKKwllbHNlIGlmICghYXJnKQorCQkqdmFsdWUgPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInYxIikgfHwgIXN0cmNtcChhcmcsICIxIikpCisJCSp2YWx1ZSA9IFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAidjIiKSB8fCAhc3RyY21wKGFyZywgIjIiKSkKKwkJKnZhbHVlID0gU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU5fVjI7CisJZWxzZQorCQlkaWUoInVuc3VwcG9ydGVkIHBvcmNlbGFpbiB2ZXJzaW9uICclcyciLCBhcmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0X3BhcnNlX20oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBvcHQtPnZhbHVlOworCWlmICh1bnNldCkgeworCQloYXZlX29wdGlvbl9tID0gMDsKKwkJc3RyYnVmX3NldGxlbihidWYsIDApOworCX0gZWxzZSB7CisJCWhhdmVfb3B0aW9uX20gPSAxOworCQlpZiAoYnVmLT5sZW4pCisJCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsIGFyZyk7CisJCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKGJ1Zik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdF9wYXJzZV9yZW5hbWVfc2NvcmUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwljb25zdCBjaGFyICoqdmFsdWUgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKGFyZyAhPSBOVUxMICYmICphcmcgPT0gJz0nKQorCQlhcmcgPSBhcmcgKyAxOworCisJKnZhbHVlID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVfd2hlbmNlKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkKKwkJd2hlbmNlID0gRlJPTV9NRVJHRTsKKwllbHNlIGlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHRoZV9yZXBvc2l0b3J5KSkpIHsKKwkJd2hlbmNlID0gRlJPTV9DSEVSUllfUElDSzsKKwkJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX3NlcV9kaXIoKSkpCisJCQlzZXF1ZW5jZXJfaW5fdXNlID0gMTsKKwl9CisJZWxzZQorCQl3aGVuY2UgPSBGUk9NX0NPTU1JVDsKKwlpZiAocykKKwkJcy0+d2hlbmNlID0gd2hlbmNlOworfQorCitzdGF0aWMgdm9pZCBzdGF0dXNfaW5pdF9jb25maWcoc3RydWN0IHd0X3N0YXR1cyAqcywgY29uZmlnX2ZuX3QgZm4pCit7CisJd3Rfc3RhdHVzX3ByZXBhcmUodGhlX3JlcG9zaXRvcnksIHMpOworCWluaXRfZGlmZl91aV9kZWZhdWx0cygpOworCWdpdF9jb25maWcoZm4sIHMpOworCWRldGVybWluZV93aGVuY2Uocyk7CisJcy0+aGludHMgPSBhZHZpY2Vfc3RhdHVzX2hpbnRzOyAvKiBtdXN0IGNvbWUgYWZ0ZXIgZ2l0X2NvbmZpZygpICovCit9CisKK3N0YXRpYyB2b2lkIHJvbGxiYWNrX2luZGV4X2ZpbGVzKHZvaWQpCit7CisJc3dpdGNoIChjb21taXRfc3R5bGUpIHsKKwljYXNlIENPTU1JVF9BU19JUzoKKwkJYnJlYWs7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwljYXNlIENPTU1JVF9OT1JNQUw6CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7CisJCWJyZWFrOworCWNhc2UgQ09NTUlUX1BBUlRJQUw6CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmZmFsc2VfbG9jayk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBjb21taXRfaW5kZXhfZmlsZXModm9pZCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY29tbWl0X3N0eWxlKSB7CisJY2FzZSBDT01NSVRfQVNfSVM6CisJCWJyZWFrOyAvKiBub3RoaW5nIHRvIGRvICovCisJY2FzZSBDT01NSVRfTk9STUFMOgorCQllcnIgPSBjb21taXRfbG9ja19maWxlKCZpbmRleF9sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBDT01NSVRfUEFSVElBTDoKKwkJZXJyID0gY29tbWl0X2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmZmFsc2VfbG9jayk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBUYWtlIGEgdW5pb24gb2YgcGF0aHMgaW4gdGhlIGluZGV4IGFuZCB0aGUgbmFtZWQgdHJlZSAodHlwaWNhbGx5LCAiSEVBRCIpLAorICogYW5kIHJldHVybiB0aGUgcGF0aHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybiBpbiBsaXN0LgorICovCitzdGF0aWMgaW50IGxpc3RfcGF0aHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICp3aXRoX3RyZWUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0dGVybikKK3sKKwlpbnQgaSwgcmV0OworCWNoYXIgKm07CisKKwlpZiAoIXBhdHRlcm4tPm5yKQorCQlyZXR1cm4gMDsKKworCW0gPSB4Y2FsbG9jKDEsIHBhdHRlcm4tPm5yKTsKKworCWlmICh3aXRoX3RyZWUpIHsKKwkJY2hhciAqbWF4X3ByZWZpeCA9IGNvbW1vbl9wcmVmaXgocGF0dGVybik7CisJCW92ZXJsYXlfdHJlZV9vbl9pbmRleCgmdGhlX2luZGV4LCB3aXRoX3RyZWUsIG1heF9wcmVmaXgpOworCQlmcmVlKG1heF9wcmVmaXgpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKQorCQkJY29udGludWU7CisJCWlmICghY2VfcGF0aF9tYXRjaCgmdGhlX2luZGV4LCBjZSwgcGF0dGVybiwgbSkpCisJCQljb250aW51ZTsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChsaXN0LCBjZS0+bmFtZSk7CisJCWlmIChjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJCWl0ZW0tPnV0aWwgPSBpdGVtOyAvKiBiZXR0ZXIgYSB2YWxpZCBwb2ludGVyIHRoYW4gYSBmYWtlIG9uZSAqLworCX0KKworCXJldCA9IHJlcG9ydF9wYXRoX2Vycm9yKG0sIHBhdHRlcm4pOworCWZyZWUobSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlbW92ZV9maWxlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwID0gJihsaXN0LT5pdGVtc1tpXSk7CisKKwkJLyogcC0+dXRpbCBpcyBza2lwLXdvcmt0cmVlICovCisJCWlmIChwLT51dGlsKQorCQkJY29udGludWU7CisKKwkJaWYgKCFsc3RhdChwLT5zdHJpbmcsICZzdCkpIHsKKwkJCWlmIChhZGRfdG9fY2FjaGUocC0+c3RyaW5nLCAmc3QsIDApKQorCQkJCWRpZShfKCJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiKSk7CisJCX0gZWxzZQorCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwLT5zdHJpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2Jhc2VfaW5kZXgoY29uc3Qgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkKQoreworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCB0cmVlX2Rlc2MgdDsKKworCWlmICghY3VycmVudF9oZWFkKSB7CisJCWRpc2NhcmRfY2FjaGUoKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLmluZGV4X29ubHkgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwlvcHRzLmZuID0gb25ld2F5X21lcmdlOworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZjdXJyZW50X2hlYWQtPm9iamVjdC5vaWQpOworCWlmICghdHJlZSkKKwkJZGllKF8oImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIpKTsKKwlwYXJzZV90cmVlKHRyZWUpOworCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCWlmICh1bnBhY2tfdHJlZXMoMSwgJnQsICZvcHRzKSkKKwkJZXhpdCgxMjgpOyAvKiBXZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIHRoZSBlcnJvciwgZmluaXNoIGR5aW5nICovCit9CisKK3N0YXRpYyB2b2lkIHJlZnJlc2hfY2FjaGVfb3JfZGllKGludCByZWZyZXNoX2ZsYWdzKQoreworCS8qCisJICogcmVmcmVzaF9mbGFncyBjb250YWlucyBSRUZSRVNIX1FVSUVULCBzbyB0aGUgb25seSBlcnJvcnMKKwkgKiBhcmUgZm9yIHVubWVyZ2VkIGVudHJpZXMuCisJICovCisJaWYgKHJlZnJlc2hfY2FjaGUocmVmcmVzaF9mbGFncyB8IFJFRlJFU0hfSU5fUE9SQ0VMQUlOKSkKKwkJZGllX3Jlc29sdmVfY29uZmxpY3QoImNvbW1pdCIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHJlcGFyZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgY29uc3Qgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkLCBpbnQgaXNfc3RhdHVzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBwYXJ0aWFsID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCWludCByZWZyZXNoX2ZsYWdzID0gUkVGUkVTSF9RVUlFVDsKKwljb25zdCBjaGFyICpyZXQ7CisKKwlpZiAoaXNfc3RhdHVzKQorCQlyZWZyZXNoX2ZsYWdzIHw9IFJFRlJFU0hfVU5NRVJHRUQ7CisJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCAwLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwsCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJaWYgKHBhdGhzcGVjX2Zyb21fZmlsZSkgeworCQlpZiAoaW50ZXJhY3RpdmUpCisJCQlkaWUoXygiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIikpOworCisJCWlmIChhbGwpCisJCQlkaWUoXygiLS1wYXRoc3BlYy1mcm9tLWZpbGUgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCisJCWlmIChwYXRoc3BlYy5ucikKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcGF0aHNwZWMsIDAsCisJCQkJICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMLAorCQkJCSAgICBwcmVmaXgsIHBhdGhzcGVjX2Zyb21fZmlsZSwgcGF0aHNwZWNfZmlsZV9udWwpOworCX0gZWxzZSBpZiAocGF0aHNwZWNfZmlsZV9udWwpIHsKKwkJZGllKF8oIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiKSk7CisJfQorCisJaWYgKCFwYXRoc3BlYy5uciAmJiAoYWxzbyB8fCAob25seSAmJiAhYW1lbmQgJiYgIWFsbG93X2VtcHR5KSkpCisJCWRpZShfKCJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iKSk7CisKKwlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKCZwYXRoc3BlYykgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJaWYgKGludGVyYWN0aXZlKSB7CisJCWNoYXIgKm9sZF9pbmRleF9lbnYgPSBOVUxMLCAqb2xkX3JlcG9faW5kZXhfZmlsZTsKKwkJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKworCQlyZWZyZXNoX2NhY2hlX29yX2RpZShyZWZyZXNoX2ZsYWdzKTsKKworCQlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZpbmRleF9sb2NrLCAwKSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIpKTsKKworCQlvbGRfcmVwb19pbmRleF9maWxlID0gdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGU7CisJCXRoZV9yZXBvc2l0b3J5LT5pbmRleF9maWxlID0KKwkJCShjaGFyICopZ2V0X2xvY2tfZmlsZV9wYXRoKCZpbmRleF9sb2NrKTsKKwkJb2xkX2luZGV4X2VudiA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoSU5ERVhfRU5WSVJPTk1FTlQpKTsKKwkJc2V0ZW52KElOREVYX0VOVklST05NRU5ULCB0aGVfcmVwb3NpdG9yeS0+aW5kZXhfZmlsZSwgMSk7CisKKwkJaWYgKGludGVyYWN0aXZlX2FkZChhcmdjLCBhcmd2LCBwcmVmaXgsIHBhdGNoX2ludGVyYWN0aXZlKSAhPSAwKQorCQkJZGllKF8oImludGVyYWN0aXZlIGFkZCBmYWlsZWQiKSk7CisKKwkJdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGUgPSBvbGRfcmVwb19pbmRleF9maWxlOworCQlpZiAob2xkX2luZGV4X2VudiAmJiAqb2xkX2luZGV4X2VudikKKwkJCXNldGVudihJTkRFWF9FTlZJUk9OTUVOVCwgb2xkX2luZGV4X2VudiwgMSk7CisJCWVsc2UKKwkJCXVuc2V0ZW52KElOREVYX0VOVklST05NRU5UKTsKKwkJRlJFRV9BTkRfTlVMTChvbGRfaW5kZXhfZW52KTsKKworCQlkaXNjYXJkX2NhY2hlKCk7CisJCXJlYWRfY2FjaGVfZnJvbShnZXRfbG9ja19maWxlX3BhdGgoJmluZGV4X2xvY2spKTsKKwkJaWYgKHVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoV1JJVEVfVFJFRV9TSUxFTlQpID09IDApIHsKKwkJCWlmIChyZW9wZW5fbG9ja19maWxlKCZpbmRleF9sb2NrKSA8IDApCisJCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIikpOworCQkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgMCkpCisJCQkJZGllKF8oInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IikpOworCQl9IGVsc2UKKwkJCXdhcm5pbmcoXygiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiKSk7CisKKwkJY29tbWl0X3N0eWxlID0gQ09NTUlUX05PUk1BTDsKKwkJcmV0ID0gZ2V0X2xvY2tfZmlsZV9wYXRoKCZpbmRleF9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBOb24gcGFydGlhbCwgbm9uIGFzLWlzIGNvbW1pdC4KKwkgKgorCSAqICgxKSBnZXQgdGhlIHJlYWwgaW5kZXg7CisJICogKDIpIHVwZGF0ZSB0aGVfaW5kZXggYXMgbmVjZXNzYXJ5OworCSAqICgzKSB3cml0ZSB0aGVfaW5kZXggb3V0IHRvIHRoZSByZWFsIGluZGV4IChzdGlsbCBsb2NrZWQpOworCSAqICg0KSByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxvY2tlZCBpbmRleCBmaWxlLgorCSAqCisJICogVGhlIGNhbGxlciBzaG91bGQgcnVuIGhvb2tzIG9uIHRoZSBsb2NrZWQgcmVhbCBpbmRleCwgYW5kCisJICogKEEpIGlmIGFsbCBnb2VzIHdlbGwsIGNvbW1pdCB0aGUgcmVhbCBpbmRleDsKKwkgKiAoQikgb24gZmFpbHVyZSwgcm9sbGJhY2sgdGhlIHJlYWwgaW5kZXguCisJICovCisJaWYgKGFsbCB8fCAoYWxzbyAmJiBwYXRoc3BlYy5ucikpIHsKKwkJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJYWRkX2ZpbGVzX3RvX2NhY2hlKGFsc28gPyBwcmVmaXggOiBOVUxMLCAmcGF0aHNwZWMsIDApOworCQlyZWZyZXNoX2NhY2hlX29yX2RpZShyZWZyZXNoX2ZsYWdzKTsKKwkJdXBkYXRlX21haW5fY2FjaGVfdHJlZShXUklURV9UUkVFX1NJTEVOVCk7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssIDApKQorCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIpKTsKKwkJY29tbWl0X3N0eWxlID0gQ09NTUlUX05PUk1BTDsKKwkJcmV0ID0gZ2V0X2xvY2tfZmlsZV9wYXRoKCZpbmRleF9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBBcy1pcyBjb21taXQuCisJICoKKwkgKiAoMSkgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSByZWFsIGluZGV4IGZpbGUuCisJICoKKwkgKiBUaGUgY2FsbGVyIHNob3VsZCBydW4gaG9va3Mgb24gdGhlIHJlYWwgaW5kZXgsCisJICogYW5kIGNyZWF0ZSBjb21taXQgZnJvbSB0aGVfaW5kZXguCisJICogV2Ugc3RpbGwgbmVlZCB0byByZWZyZXNoIHRoZSBpbmRleCBoZXJlLgorCSAqLworCWlmICghb25seSAmJiAhcGF0aHNwZWMubnIpIHsKKwkJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJcmVmcmVzaF9jYWNoZV9vcl9kaWUocmVmcmVzaF9mbGFncyk7CisJCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZAorCQkgICAgfHwgIWNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoYWN0aXZlX2NhY2hlX3RyZWUpKQorCQkJdXBkYXRlX21haW5fY2FjaGVfdHJlZShXUklURV9UUkVFX1NJTEVOVCk7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssCisJCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKQorCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIpKTsKKwkJY29tbWl0X3N0eWxlID0gQ09NTUlUX0FTX0lTOworCQlyZXQgPSBnZXRfaW5kZXhfZmlsZSgpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEEgcGFydGlhbCBjb21taXQuCisJICoKKwkgKiAoMCkgZmluZCB0aGUgc2V0IG9mIGFmZmVjdGVkIHBhdGhzOworCSAqICgxKSBnZXQgbG9jayBvbiB0aGUgcmVhbCBpbmRleCBmaWxlOworCSAqICgyKSB1cGRhdGUgdGhlX2luZGV4IHdpdGggdGhlIGdpdmVuIHBhdGhzOworCSAqICgzKSB3cml0ZSB0aGVfaW5kZXggb3V0IHRvIHRoZSByZWFsIGluZGV4IChzdGlsbCBsb2NrZWQpOworCSAqICg0KSBnZXQgbG9jayBvbiB0aGUgZmFsc2UgaW5kZXggZmlsZTsKKwkgKiAoNSkgcmVzZXQgdGhlX2luZGV4IGZyb20gSEVBRDsKKwkgKiAoNikgdXBkYXRlIHRoZV9pbmRleCB0aGUgc2FtZSB3YXkgYXMgKDIpOworCSAqICg3KSB3cml0ZSB0aGVfaW5kZXggb3V0IHRvIHRoZSBmYWxzZSBpbmRleCBmaWxlOworCSAqICg4KSByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGZhbHNlIGluZGV4IGZpbGUgKHN0aWxsIGxvY2tlZCk7CisJICoKKwkgKiBUaGUgY2FsbGVyIHNob3VsZCBydW4gaG9va3Mgb24gdGhlIGxvY2tlZCBmYWxzZSBpbmRleCwgYW5kCisJICogY3JlYXRlIGNvbW1pdCBmcm9tIGl0LiAgVGhlbgorCSAqIChBKSBpZiBhbGwgZ29lcyB3ZWxsLCBjb21taXQgdGhlIHJlYWwgaW5kZXg7CisJICogKEIpIG9uIGZhaWx1cmUsIHJvbGxiYWNrIHRoZSByZWFsIGluZGV4OworCSAqIEluIGVpdGhlciBjYXNlLCByb2xsYmFjayB0aGUgZmFsc2UgaW5kZXguCisJICovCisJY29tbWl0X3N0eWxlID0gQ09NTUlUX1BBUlRJQUw7CisKKwlpZiAod2hlbmNlICE9IEZST01fQ09NTUlUKSB7CisJCWlmICh3aGVuY2UgPT0gRlJPTV9NRVJHRSkKKwkJCWRpZShfKCJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iKSk7CisJCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLKQorCQkJZGllKF8oImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIpKTsKKwl9CisKKwlpZiAobGlzdF9wYXRocygmcGFydGlhbCwgIWN1cnJlbnRfaGVhZCA/IE5VTEwgOiAiSEVBRCIsICZwYXRoc3BlYykpCisJCWV4aXQoMSk7CisKKwlkaXNjYXJkX2NhY2hlKCk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiKSk7CisKKwlob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgTE9DS19ESUVfT05fRVJST1IpOworCWFkZF9yZW1vdmVfZmlsZXMoJnBhcnRpYWwpOworCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisJdXBkYXRlX21haW5fY2FjaGVfdHJlZShXUklURV9UUkVFX1NJTEVOVCk7CisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgMCkpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiKSk7CisKKwlob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZmYWxzZV9sb2NrLAorCQkJCSAgZ2l0X3BhdGgoIm5leHQtaW5kZXgtJSJQUkl1TUFYLAorCQkJCQkgICAodWludG1heF90KSBnZXRwaWQoKSksCisJCQkJICBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwljcmVhdGVfYmFzZV9pbmRleChjdXJyZW50X2hlYWQpOworCWFkZF9yZW1vdmVfZmlsZXMoJnBhcnRpYWwpOworCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZmYWxzZV9sb2NrLCAwKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIpKTsKKworCWRpc2NhcmRfY2FjaGUoKTsKKwlyZXQgPSBnZXRfbG9ja19maWxlX3BhdGgoJmZhbHNlX2xvY2spOworCXJlYWRfY2FjaGVfZnJvbShyZXQpOworb3V0OgorCXN0cmluZ19saXN0X2NsZWFyKCZwYXJ0aWFsLCAwKTsKKwljbGVhcl9wYXRoc3BlYygmcGF0aHNwZWMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3N0YXR1cyhGSUxFICpmcCwgY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbm93YXJuLAorCQkgICAgICBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKHMtPnJlbGF0aXZlX3BhdGhzKQorCQlzLT5wcmVmaXggPSBwcmVmaXg7CisKKwlpZiAoYW1lbmQpIHsKKwkJcy0+YW1lbmQgPSAxOworCQlzLT5yZWZlcmVuY2UgPSAiSEVBRF4xIjsKKwl9CisJcy0+dmVyYm9zZSA9IHZlcmJvc2U7CisJcy0+aW5kZXhfZmlsZSA9IGluZGV4X2ZpbGU7CisJcy0+ZnAgPSBmcDsKKwlzLT5ub3dhcm4gPSBub3dhcm47CisJcy0+aXNfaW5pdGlhbCA9IGdldF9vaWQocy0+cmVmZXJlbmNlLCAmb2lkKSA/IDEgOiAwOworCWlmICghcy0+aXNfaW5pdGlhbCkKKwkJb2lkY3B5KCZzLT5vaWRfY29tbWl0LCAmb2lkKTsKKwlzLT5zdGF0dXNfZm9ybWF0ID0gc3RhdHVzX2Zvcm1hdDsKKwlzLT5pZ25vcmVfc3VibW9kdWxlX2FyZyA9IGlnbm9yZV9zdWJtb2R1bGVfYXJnOworCisJd3Rfc3RhdHVzX2NvbGxlY3Qocyk7CisJd3Rfc3RhdHVzX3ByaW50KHMpOworCXd0X3N0YXR1c19jb2xsZWN0X2ZyZWVfYnVmZmVycyhzKTsKKworCXJldHVybiBzLT5jb21taXR0YWJsZTsKK30KKworc3RhdGljIGludCBpc19hX21lcmdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCkKK3sKKwlyZXR1cm4gISEoY3VycmVudF9oZWFkLT5wYXJlbnRzICYmIGN1cnJlbnRfaGVhZC0+cGFyZW50cy0+bmV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9zcGxpdF9pZGVudChzdHJ1Y3QgaWRlbnRfc3BsaXQgKmlkLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaWYgKHNwbGl0X2lkZW50X2xpbmUoaWQsIGJ1Zi0+YnVmLCBidWYtPmxlbikgfHwgIWlkLT5kYXRlX2JlZ2luKQorCQlCVUcoInVuYWJsZSB0byBwYXJzZSBvdXIgb3duIGlkZW50OiAlcyIsIGJ1Zi0+YnVmKTsKK30KKworc3RhdGljIHZvaWQgZXhwb3J0X29uZShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmUsIGludCBoYWNrKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaWYgKGhhY2spCisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCBoYWNrKTsKKwlzdHJidWZfYWRkKCZidWYsIHMsIGUgLSBzKTsKKwlzZXRlbnYodmFyLCBidWYuYnVmLCAxKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGludCBwYXJzZV9mb3JjZV9kYXRlKGNvbnN0IGNoYXIgKmluLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJc3RyYnVmX2FkZGNoKG91dCwgJ0AnKTsKKworCWlmIChwYXJzZV9kYXRlKGluLCBvdXQpIDwgMCkgeworCQlpbnQgZXJyb3JzID0gMDsKKwkJdW5zaWduZWQgbG9uZyB0ID0gYXBwcm94aWRhdGVfY2FyZWZ1bChpbiwgJmVycm9ycyk7CisJCWlmIChlcnJvcnMpCisJCQlyZXR1cm4gLTE7CisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVsdSIsIHQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfaWRlbnRfdmFyKGNoYXIgKipidWYsIGNoYXIgKnZhbCkKK3sKKwlmcmVlKCpidWYpOworCSpidWYgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGRldGVybWluZV9hdXRob3JfaW5mbyhzdHJ1Y3Qgc3RyYnVmICphdXRob3JfaWRlbnQpCit7CisJY2hhciAqbmFtZSwgKmVtYWlsLCAqZGF0ZTsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgYXV0aG9yOworCisJbmFtZSA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpKTsKKwllbWFpbCA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoIkdJVF9BVVRIT1JfRU1BSUwiKSk7CisJZGF0ZSA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoIkdJVF9BVVRIT1JfREFURSIpKTsKKworCWlmIChhdXRob3JfbWVzc2FnZSkgeworCQlzdHJ1Y3QgaWRlbnRfc3BsaXQgaWRlbnQ7CisJCXNpemVfdCBsZW47CisJCWNvbnN0IGNoYXIgKmE7CisKKwkJYSA9IGZpbmRfY29tbWl0X2hlYWRlcihhdXRob3JfbWVzc2FnZV9idWZmZXIsICJhdXRob3IiLCAmbGVuKTsKKwkJaWYgKCFhKQorCQkJZGllKF8oImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiKSwgYXV0aG9yX21lc3NhZ2UpOworCQlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGEsIGxlbikgPCAwKQorCQkJZGllKF8oImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiKSwgYXV0aG9yX21lc3NhZ2UpOworCisJCXNldF9pZGVudF92YXIoJm5hbWUsIHhtZW1kdXB6KGlkZW50Lm5hbWVfYmVnaW4sIGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbikpOworCQlzZXRfaWRlbnRfdmFyKCZlbWFpbCwgeG1lbWR1cHooaWRlbnQubWFpbF9iZWdpbiwgaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luKSk7CisKKwkJaWYgKGlkZW50LmRhdGVfYmVnaW4pIHsKKwkJCXN0cnVjdCBzdHJidWYgZGF0ZV9idWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRjaCgmZGF0ZV9idWYsICdAJyk7CisJCQlzdHJidWZfYWRkKCZkYXRlX2J1ZiwgaWRlbnQuZGF0ZV9iZWdpbiwgaWRlbnQuZGF0ZV9lbmQgLSBpZGVudC5kYXRlX2JlZ2luKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmZGF0ZV9idWYsICcgJyk7CisJCQlzdHJidWZfYWRkKCZkYXRlX2J1ZiwgaWRlbnQudHpfYmVnaW4sIGlkZW50LnR6X2VuZCAtIGlkZW50LnR6X2JlZ2luKTsKKwkJCXNldF9pZGVudF92YXIoJmRhdGUsIHN0cmJ1Zl9kZXRhY2goJmRhdGVfYnVmLCBOVUxMKSk7CisJCX0KKwl9CisKKwlpZiAoZm9yY2VfYXV0aG9yKSB7CisJCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKworCQlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGZvcmNlX2F1dGhvciwgc3RybGVuKGZvcmNlX2F1dGhvcikpIDwgMCkKKwkJCWRpZShfKCJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIikpOworCQlzZXRfaWRlbnRfdmFyKCZuYW1lLCB4bWVtZHVweihpZGVudC5uYW1lX2JlZ2luLCBpZGVudC5uYW1lX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW4pKTsKKwkJc2V0X2lkZW50X3ZhcigmZW1haWwsIHhtZW1kdXB6KGlkZW50Lm1haWxfYmVnaW4sIGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubWFpbF9iZWdpbikpOworCX0KKworCWlmIChmb3JjZV9kYXRlKSB7CisJCXN0cnVjdCBzdHJidWYgZGF0ZV9idWYgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKHBhcnNlX2ZvcmNlX2RhdGUoZm9yY2VfZGF0ZSwgJmRhdGVfYnVmKSkKKwkJCWRpZShfKCJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIpLCBmb3JjZV9kYXRlKTsKKwkJc2V0X2lkZW50X3ZhcigmZGF0ZSwgc3RyYnVmX2RldGFjaCgmZGF0ZV9idWYsIE5VTEwpKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKGF1dGhvcl9pZGVudCwgZm10X2lkZW50KG5hbWUsIGVtYWlsLCBXQU5UX0FVVEhPUl9JREVOVCwgZGF0ZSwKKwkJCQlJREVOVF9TVFJJQ1QpKTsKKwlhc3NlcnRfc3BsaXRfaWRlbnQoJmF1dGhvciwgYXV0aG9yX2lkZW50KTsKKwlleHBvcnRfb25lKCJHSVRfQVVUSE9SX05BTUUiLCBhdXRob3IubmFtZV9iZWdpbiwgYXV0aG9yLm5hbWVfZW5kLCAwKTsKKwlleHBvcnRfb25lKCJHSVRfQVVUSE9SX0VNQUlMIiwgYXV0aG9yLm1haWxfYmVnaW4sIGF1dGhvci5tYWlsX2VuZCwgMCk7CisJZXhwb3J0X29uZSgiR0lUX0FVVEhPUl9EQVRFIiwgYXV0aG9yLmRhdGVfYmVnaW4sIGF1dGhvci50el9lbmQsICdAJyk7CisJZnJlZShuYW1lKTsKKwlmcmVlKGVtYWlsKTsKKwlmcmVlKGRhdGUpOworfQorCitzdGF0aWMgaW50IGF1dGhvcl9kYXRlX2lzX2ludGVyZXN0aW5nKHZvaWQpCit7CisJcmV0dXJuIGF1dGhvcl9tZXNzYWdlIHx8IGZvcmNlX2RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdF9jb21tZW50X2xpbmVfY2hhcihjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwljaGFyIGNhbmRpZGF0ZXNbXSA9ICIjO0AhJCVeJnw6IjsKKwljaGFyICpjYW5kaWRhdGU7CisJY29uc3QgY2hhciAqcDsKKworCWNvbW1lbnRfbGluZV9jaGFyID0gY2FuZGlkYXRlc1swXTsKKwlpZiAoIW1lbWNocihzYi0+YnVmLCBjb21tZW50X2xpbmVfY2hhciwgc2ItPmxlbikpCisJCXJldHVybjsKKworCXAgPSBzYi0+YnVmOworCWNhbmRpZGF0ZSA9IHN0cmNocihjYW5kaWRhdGVzLCAqcCk7CisJaWYgKGNhbmRpZGF0ZSkKKwkJKmNhbmRpZGF0ZSA9ICcgJzsKKwlmb3IgKHAgPSBzYi0+YnVmOyAqcDsgcCsrKSB7CisJCWlmICgocFswXSA9PSAnXG4nIHx8IHBbMF0gPT0gJ1xyJykgJiYgcFsxXSkgeworCQkJY2FuZGlkYXRlID0gc3RyY2hyKGNhbmRpZGF0ZXMsIHBbMV0pOworCQkJaWYgKGNhbmRpZGF0ZSkKKwkJCQkqY2FuZGlkYXRlID0gJyAnOworCQl9CisJfQorCisJZm9yIChwID0gY2FuZGlkYXRlczsgKnAgPT0gJyAnOyBwKyspCisJCTsKKwlpZiAoISpwKQorCQlkaWUoXygidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKwkJICAgICAgImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIikpOworCWNvbW1lbnRfbGluZV9jaGFyID0gKnA7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV90b19jb21taXQoY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBzdHJ1Y3QgY29tbWl0ICpjdXJyZW50X2hlYWQsCisJCQkgICAgIHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmF1dGhvcl9pZGVudCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCXN0cnVjdCBzdHJidWYgY29tbWl0dGVyX2lkZW50ID0gU1RSQlVGX0lOSVQ7CisJaW50IGNvbW1pdHRhYmxlOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpob29rX2FyZzEgPSBOVUxMOworCWNvbnN0IGNoYXIgKmhvb2tfYXJnMiA9IE5VTEw7CisJaW50IGNsZWFuX21lc3NhZ2VfY29udGVudHMgPSAoY2xlYW51cF9tb2RlICE9IENPTU1JVF9NU0dfQ0xFQU5VUF9OT05FKTsKKwlpbnQgb2xkX2Rpc3BsYXlfY29tbWVudF9wcmVmaXg7CisJaW50IG1lcmdlX2NvbnRhaW5zX3NjaXNzb3JzID0gMDsKKworCS8qIFRoaXMgY2hlY2tzIGFuZCBiYXJmcyBpZiBhdXRob3IgaXMgYmFkbHkgc3BlY2lmaWVkICovCisJZGV0ZXJtaW5lX2F1dGhvcl9pbmZvKGF1dGhvcl9pZGVudCk7CisKKwlpZiAoIW5vX3ZlcmlmeSAmJiBydW5fY29tbWl0X2hvb2sodXNlX2VkaXRvciwgaW5kZXhfZmlsZSwgInByZS1jb21taXQiLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3F1YXNoX21lc3NhZ2UpIHsKKwkJLyoKKwkJICogSW5zZXJ0IHRoZSBwcm9wZXIgc3ViamVjdCBsaW5lIGJlZm9yZSBvdGhlciBjb21taXQKKwkJICogbWVzc2FnZSBvcHRpb25zIGFkZCB0aGVpciBjb250ZW50LgorCQkgKi8KKwkJaWYgKHVzZV9tZXNzYWdlICYmICFzdHJjbXAodXNlX21lc3NhZ2UsIHNxdWFzaF9tZXNzYWdlKSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAic3F1YXNoISAiKTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQkJc3RydWN0IGNvbW1pdCAqYzsKKwkJCWMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lKHNxdWFzaF9tZXNzYWdlKTsKKwkJCWlmICghYykKKwkJCQlkaWUoXygiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiKSwgc3F1YXNoX21lc3NhZ2UpOworCQkJY3R4Lm91dHB1dF9lbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoYywgInNxdWFzaCEgJXNcblxuIiwgJnNiLAorCQkJCQkgICAgICAmY3R4KTsKKwkJfQorCX0KKworCWlmIChoYXZlX29wdGlvbl9tICYmICFmaXh1cF9tZXNzYWdlKSB7CisJCXN0cmJ1Zl9hZGRidWYoJnNiLCAmbWVzc2FnZSk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKGxvZ2ZpbGUgJiYgIXN0cmNtcChsb2dmaWxlLCAiLSIpKSB7CisJCWlmIChpc2F0dHkoMCkpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIpKTsKKwkJaWYgKHN0cmJ1Zl9yZWFkKCZzYiwgMCwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IikpOworCQlob29rX2FyZzEgPSAibWVzc2FnZSI7CisJfSBlbHNlIGlmIChsb2dmaWxlKSB7CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgbG9nZmlsZSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciKSwKKwkJCQkgIGxvZ2ZpbGUpOworCQlob29rX2FyZzEgPSAibWVzc2FnZSI7CisJfSBlbHNlIGlmICh1c2VfbWVzc2FnZSkgeworCQljaGFyICpidWZmZXI7CisJCWJ1ZmZlciA9IHN0cnN0cih1c2VfbWVzc2FnZV9idWZmZXIsICJcblxuIik7CisJCWlmIChidWZmZXIpCisJCQlzdHJidWZfYWRkc3RyKCZzYiwgc2tpcF9ibGFua19saW5lcyhidWZmZXIgKyAyKSk7CisJCWhvb2tfYXJnMSA9ICJjb21taXQiOworCQlob29rX2FyZzIgPSB1c2VfbWVzc2FnZTsKKwl9IGVsc2UgaWYgKGZpeHVwX21lc3NhZ2UpIHsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lKGZpeHVwX21lc3NhZ2UpOworCQlpZiAoIWNvbW1pdCkKKwkJCWRpZShfKCJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIpLCBmaXh1cF9tZXNzYWdlKTsKKwkJY3R4Lm91dHB1dF9lbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICJmaXh1cCEgJXNcblxuIiwKKwkJCQkgICAgICAmc2IsICZjdHgpOworCQlpZiAoaGF2ZV9vcHRpb25fbSkKKwkJCXN0cmJ1Zl9hZGRidWYoJnNiLCAmbWVzc2FnZSk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKCFzdGF0KGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSksICZzdGF0YnVmKSkgeworCQlzaXplX3QgbWVyZ2VfbXNnX3N0YXJ0OworCisJCS8qCisJCSAqIHByZXBlbmQgU1FVQVNIX01TRyBoZXJlIGlmIGl0IGV4aXN0cyBhbmQgYQorCQkgKiAibWVyZ2UgLS1zcXVhc2giIHdhcyBvcmlnaW5hbGx5IHBlcmZvcm1lZAorCQkgKi8KKwkJaWYgKCFzdGF0KGdpdF9wYXRoX3NxdWFzaF9tc2codGhlX3JlcG9zaXRvcnkpLCAmc3RhdGJ1ZikpIHsKKwkJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGhfc3F1YXNoX21zZyh0aGVfcmVwb3NpdG9yeSksIDApIDwgMCkKKwkJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIpKTsKKwkJCWhvb2tfYXJnMSA9ICJzcXVhc2giOworCQl9IGVsc2UKKwkJCWhvb2tfYXJnMSA9ICJtZXJnZSI7CisKKwkJbWVyZ2VfbXNnX3N0YXJ0ID0gc2IubGVuOworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoX21lcmdlX21zZyh0aGVfcmVwb3NpdG9yeSksIDApIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciKSk7CisKKwkJaWYgKGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMgJiYKKwkJICAgIHd0X3N0YXR1c19sb2NhdGVfZW5kKHNiLmJ1ZiArIG1lcmdlX21zZ19zdGFydCwKKwkJCQkJIHNiLmxlbiAtIG1lcmdlX21zZ19zdGFydCkgPAorCQkJCXNiLmxlbiAtIG1lcmdlX21zZ19zdGFydCkKKwkJCW1lcmdlX2NvbnRhaW5zX3NjaXNzb3JzID0gMTsKKwl9IGVsc2UgaWYgKCFzdGF0KGdpdF9wYXRoX3NxdWFzaF9tc2codGhlX3JlcG9zaXRvcnkpLCAmc3RhdGJ1ZikpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aF9zcXVhc2hfbXNnKHRoZV9yZXBvc2l0b3J5KSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciKSk7CisJCWhvb2tfYXJnMSA9ICJzcXVhc2giOworCX0gZWxzZSBpZiAodGVtcGxhdGVfZmlsZSkgeworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIHRlbXBsYXRlX2ZpbGUsIDApIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIHRlbXBsYXRlX2ZpbGUpOworCQlob29rX2FyZzEgPSAidGVtcGxhdGUiOworCQljbGVhbl9tZXNzYWdlX2NvbnRlbnRzID0gMDsKKwl9CisKKwkvKgorCSAqIFRoZSByZW1haW5pbmcgY2FzZXMgZG9uJ3QgbW9kaWZ5IHRoZSB0ZW1wbGF0ZSBtZXNzYWdlLCBidXQKKwkgKiBqdXN0IHNldCB0aGUgYXJndW1lbnQocykgdG8gdGhlIHByZXBhcmUtY29tbWl0LW1zZyBob29rLgorCSAqLworCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX01FUkdFKQorCQlob29rX2FyZzEgPSAibWVyZ2UiOworCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLKSB7CisJCWhvb2tfYXJnMSA9ICJjb21taXQiOworCQlob29rX2FyZzIgPSAiQ0hFUlJZX1BJQ0tfSEVBRCI7CisJfQorCisJaWYgKHNxdWFzaF9tZXNzYWdlKSB7CisJCS8qCisJCSAqIElmIHNxdWFzaF9jb21taXQgd2FzIHVzZWQgZm9yIHRoZSBjb21taXQgc3ViamVjdCwKKwkJICogdGhlbiB3ZSdyZSBwb3NzaWJseSBoaWphY2tpbmcgb3RoZXIgY29tbWl0IGxvZyBvcHRpb25zLgorCQkgKiBSZXNldCB0aGUgaG9vayBhcmdzIHRvIHRlbGwgdGhlIHJlYWwgc3RvcnkuCisJCSAqLworCQlob29rX2FyZzEgPSAibWVzc2FnZSI7CisJCWhvb2tfYXJnMiA9ICIiOworCX0KKworCXMtPmZwID0gZm9wZW5fZm9yX3dyaXRpbmcoZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSk7CisJaWYgKHMtPmZwID09IE5VTEwpCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIiksIGdpdF9wYXRoX2NvbW1pdF9lZGl0bXNnKCkpOworCisJLyogSWdub3JlIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeDogd2UgZG8gbmVlZCBjb21tZW50cyBpbiBDT01NSVRfRURJVE1TRy4gKi8KKwlvbGRfZGlzcGxheV9jb21tZW50X3ByZWZpeCA9IHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXg7CisJcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCA9IDE7CisKKwkvKgorCSAqIE1vc3QgaGludHMgYXJlIGNvdW50ZXItcHJvZHVjdGl2ZSB3aGVuIHRoZSBjb21taXQgaGFzCisJICogYWxyZWFkeSBzdGFydGVkLgorCSAqLworCXMtPmhpbnRzID0gMDsKKworCWlmIChjbGVhbl9tZXNzYWdlX2NvbnRlbnRzKQorCQlzdHJidWZfc3RyaXBzcGFjZSgmc2IsIDApOworCisJaWYgKHNpZ25vZmYpCisJCWFwcGVuZF9zaWdub2ZmKCZzYiwgaWdub3JlX25vbl90cmFpbGVyKHNiLmJ1Ziwgc2IubGVuKSwgMCk7CisKKwlpZiAoZndyaXRlKHNiLmJ1ZiwgMSwgc2IubGVuLCBzLT5mcCkgPCBzYi5sZW4pCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIikpOworCisJaWYgKGF1dG9fY29tbWVudF9saW5lX2NoYXIpCisJCWFkanVzdF9jb21tZW50X2xpbmVfY2hhcigmc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkvKiBUaGlzIGNoZWNrcyBpZiBjb21taXR0ZXIgaWRlbnQgaXMgZXhwbGljaXRseSBnaXZlbiAqLworCXN0cmJ1Zl9hZGRzdHIoJmNvbW1pdHRlcl9pZGVudCwgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCkpOworCWlmICh1c2VfZWRpdG9yICYmIGluY2x1ZGVfc3RhdHVzKSB7CisJCWludCBpZGVudF9zaG93biA9IDA7CisJCWludCBzYXZlZF9jb2xvcl9zZXR0aW5nOworCQlzdHJ1Y3QgaWRlbnRfc3BsaXQgY2ksIGFpOworCisJCWlmICh3aGVuY2UgIT0gRlJPTV9DT01NSVQpIHsKKwkJCWlmIChjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX1NDSVNTT1JTICYmCisJCQkJIW1lcmdlX2NvbnRhaW5zX3NjaXNzb3JzKQorCQkJCXd0X3N0YXR1c19hZGRfY3V0X2xpbmUocy0+ZnApOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJICAgIHdoZW5jZSA9PSBGUk9NX01FUkdFCisJCQkJPyBfKCJcbiIKKwkJCQkJIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisJCQkJCSJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisJCQkJCSIJJXNcbiIKKwkJCQkJImFuZCB0cnkgYWdhaW4uXG4iKQorCQkJCTogXygiXG4iCisJCQkJCSJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorCQkJCQkiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorCQkJCQkiCSVzXG4iCisJCQkJCSJhbmQgdHJ5IGFnYWluLlxuIiksCisJCQkJd2hlbmNlID09IEZST01fTUVSR0UgPworCQkJCQlnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSA6CisJCQkJCWdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQodGhlX3JlcG9zaXRvcnkpKTsKKwkJfQorCisJCWZwcmludGYocy0+ZnAsICJcbiIpOworCQlpZiAoY2xlYW51cF9tb2RlID09IENPTU1JVF9NU0dfQ0xFQU5VUF9BTEwpCisJCQlzdGF0dXNfcHJpbnRmKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiIKKwkJCQkgICIgTGluZXMgc3RhcnRpbmdcbndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSIKKwkJCQkgICIgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIpLCBjb21tZW50X2xpbmVfY2hhcik7CisJCWVsc2UgaWYgKGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMpIHsKKwkJCWlmICh3aGVuY2UgPT0gRlJPTV9DT01NSVQgJiYgIW1lcmdlX2NvbnRhaW5zX3NjaXNzb3JzKQorCQkJCXd0X3N0YXR1c19hZGRfY3V0X2xpbmUocy0+ZnApOworCQl9IGVsc2UgLyogQ09NTUlUX01TR19DTEVBTlVQX1NQQUNFLCB0aGF0IGlzLiAqLworCQkJc3RhdHVzX3ByaW50ZihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCV8oIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4iCisJCQkJICAiIExpbmVzIHN0YXJ0aW5nXG4iCisJCQkJICAid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSIKKwkJCQkgICIgeW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisJCQkJICAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIpLCBjb21tZW50X2xpbmVfY2hhcik7CisKKwkJLyoKKwkJICogVGhlc2Ugc2hvdWxkIG5ldmVyIGZhaWwgYmVjYXVzZSB0aGV5IGNvbWUgZnJvbSBvdXIgb3duCisJCSAqIGZtdF9pZGVudC4gVGhleSBtYXkgZmFpbCB0aGUgc2FuZV9pZGVudCB0ZXN0LCBidXQgd2Uga25vdworCQkgKiB0aGF0IHRoZSBuYW1lIGFuZCBtYWlsIHBvaW50ZXJzIHdpbGwgYXQgbGVhc3QgYmUgdmFsaWQsCisJCSAqIHdoaWNoIGlzIGVub3VnaCBmb3Igb3VyIHRlc3RzIGFuZCBwcmludGluZyBoZXJlLgorCQkgKi8KKwkJYXNzZXJ0X3NwbGl0X2lkZW50KCZhaSwgYXV0aG9yX2lkZW50KTsKKwkJYXNzZXJ0X3NwbGl0X2lkZW50KCZjaSwgJmNvbW1pdHRlcl9pZGVudCk7CisKKwkJaWYgKGlkZW50X2NtcCgmYWksICZjaSkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiJXMiCisJCQkJIkF1dGhvcjogICAgJS4qcyA8JS4qcz4iKSwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiXG4iLAorCQkJCShpbnQpKGFpLm5hbWVfZW5kIC0gYWkubmFtZV9iZWdpbiksIGFpLm5hbWVfYmVnaW4sCisJCQkJKGludCkoYWkubWFpbF9lbmQgLSBhaS5tYWlsX2JlZ2luKSwgYWkubWFpbF9iZWdpbik7CisKKwkJaWYgKGF1dGhvcl9kYXRlX2lzX2ludGVyZXN0aW5nKCkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiJXMiCisJCQkJIkRhdGU6ICAgICAgJXMiKSwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiXG4iLAorCQkJCXNob3dfaWRlbnRfZGF0ZSgmYWksIERBVEVfTU9ERShOT1JNQUwpKSk7CisKKwkJaWYgKCFjb21taXR0ZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKCkpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJXygiJXMiCisJCQkJIkNvbW1pdHRlcjogJS4qcyA8JS4qcz4iKSwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiXG4iLAorCQkJCShpbnQpKGNpLm5hbWVfZW5kIC0gY2kubmFtZV9iZWdpbiksIGNpLm5hbWVfYmVnaW4sCisJCQkJKGludCkoY2kubWFpbF9lbmQgLSBjaS5tYWlsX2JlZ2luKSwgY2kubWFpbF9iZWdpbik7CisKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLCAiJXMiLCAiIik7IC8qIEFkZCBuZXcgbGluZSBmb3IgY2xhcml0eSAqLworCisJCXNhdmVkX2NvbG9yX3NldHRpbmcgPSBzLT51c2VfY29sb3I7CisJCXMtPnVzZV9jb2xvciA9IDA7CisJCWNvbW1pdHRhYmxlID0gcnVuX3N0YXR1cyhzLT5mcCwgaW5kZXhfZmlsZSwgcHJlZml4LCAxLCBzKTsKKwkJcy0+dXNlX2NvbG9yID0gc2F2ZWRfY29sb3Jfc2V0dGluZzsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnMtPmNoYW5nZSwgMSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWNvbnN0IGNoYXIgKnBhcmVudCA9ICJIRUFEIjsKKworCQlpZiAoIWFjdGl2ZV9uciAmJiByZWFkX2NhY2hlKCkgPCAwKQorCQkJZGllKF8oIkNhbm5vdCByZWFkIGluZGV4IikpOworCisJCWlmIChhbWVuZCkKKwkJCXBhcmVudCA9ICJIRUFEXjEiOworCisJCWlmIChnZXRfb2lkKHBhcmVudCwgJm9pZCkpIHsKKwkJCWludCBpLCBpdGFfbnIgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspCisJCQkJaWYgKGNlX2ludGVudF90b19hZGQoYWN0aXZlX2NhY2hlW2ldKSkKKwkJCQkJaXRhX25yKys7CisJCQljb21taXR0YWJsZSA9IGFjdGl2ZV9uciAtIGl0YV9uciA+IDA7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVW5sZXNzIHRoZSB1c2VyIGRpZCBleHBsaWNpdGx5IHJlcXVlc3QgYSBzdWJtb2R1bGUKKwkJCSAqIGlnbm9yZSBtb2RlIGJ5IHBhc3NpbmcgYSBjb21tYW5kIGxpbmUgb3B0aW9uIHdlIGRvCisJCQkgKiBub3QgaWdub3JlIGFueSBjaGFuZ2VkIHN1Ym1vZHVsZSBTSEEtMXMgd2hlbgorCQkJICogY29tcGFyaW5nIGluZGV4IGFuZCBwYXJlbnQsIG5vIG1hdHRlciB3aGF0IGlzCisJCQkgKiBjb25maWd1cmVkLiBPdGhlcndpc2Ugd2Ugd29uJ3QgY29tbWl0IGFueQorCQkJICogc3VibW9kdWxlcyB3aGljaCB3ZXJlIG1hbnVhbGx5IHN0YWdlZCwgd2hpY2ggd291bGQKKwkJCSAqIGJlIHJlYWxseSBjb25mdXNpbmcuCisJCQkgKi8KKwkJCXN0cnVjdCBkaWZmX2ZsYWdzIGZsYWdzID0gRElGRl9GTEFHU19JTklUOworCQkJZmxhZ3Mub3ZlcnJpZGVfc3VibW9kdWxlX2NvbmZpZyA9IDE7CisJCQlpZiAoaWdub3JlX3N1Ym1vZHVsZV9hcmcgJiYKKwkJCSAgICAhc3RyY21wKGlnbm9yZV9zdWJtb2R1bGVfYXJnLCAiYWxsIikpCisJCQkJZmxhZ3MuaWdub3JlX3N1Ym1vZHVsZXMgPSAxOworCQkJY29tbWl0dGFibGUgPSBpbmRleF9kaWZmZXJzX2Zyb20odGhlX3JlcG9zaXRvcnksCisJCQkJCQkJIHBhcmVudCwgJmZsYWdzLCAxKTsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmY29tbWl0dGVyX2lkZW50KTsKKworCWZjbG9zZShzLT5mcCk7CisKKwkvKgorCSAqIFJlamVjdCBhbiBhdHRlbXB0IHRvIHJlY29yZCBhIG5vbi1tZXJnZSBlbXB0eSBjb21taXQgd2l0aG91dAorCSAqIGV4cGxpY2l0IC0tYWxsb3ctZW1wdHkuIEluIHRoZSBjaGVycnktcGljayBjYXNlLCBpdCBtYXkgYmUKKwkgKiBlbXB0eSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbiwgd2hpY2ggdGhlIHVzZXIgc2hvdWxkIG9rYXkuCisJICovCisJaWYgKCFjb21taXR0YWJsZSAmJiB3aGVuY2UgIT0gRlJPTV9NRVJHRSAmJiAhYWxsb3dfZW1wdHkgJiYKKwkgICAgIShhbWVuZCAmJiBpc19hX21lcmdlKGN1cnJlbnRfaGVhZCkpKSB7CisJCXMtPmhpbnRzID0gYWR2aWNlX3N0YXR1c19oaW50czsKKwkJcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCA9IG9sZF9kaXNwbGF5X2NvbW1lbnRfcHJlZml4OworCQlydW5fc3RhdHVzKHN0ZG91dCwgaW5kZXhfZmlsZSwgcHJlZml4LCAwLCBzKTsKKwkJaWYgKGFtZW5kKQorCQkJZnB1dHMoXyhlbXB0eV9hbWVuZF9hZHZpY2UpLCBzdGRlcnIpOworCQllbHNlIGlmICh3aGVuY2UgPT0gRlJPTV9DSEVSUllfUElDSykgeworCQkJZnB1dHMoXyhlbXB0eV9jaGVycnlfcGlja19hZHZpY2UpLCBzdGRlcnIpOworCQkJaWYgKCFzZXF1ZW5jZXJfaW5fdXNlKQorCQkJCWZwdXRzKF8oZW1wdHlfY2hlcnJ5X3BpY2tfYWR2aWNlX3NpbmdsZSksIHN0ZGVycik7CisJCQllbHNlCisJCQkJZnB1dHMoXyhlbXB0eV9jaGVycnlfcGlja19hZHZpY2VfbXVsdGkpLCBzdGRlcnIpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmICghbm9fdmVyaWZ5ICYmIGZpbmRfaG9vaygicHJlLWNvbW1pdCIpKSB7CisJCS8qCisJCSAqIFJlLXJlYWQgdGhlIGluZGV4IGFzIHByZS1jb21taXQgaG9vayBjb3VsZCBoYXZlIHVwZGF0ZWQgaXQsCisJCSAqIGFuZCB3cml0ZSBpdCBvdXQgYXMgYSB0cmVlLiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3ZSBpbnZva2UKKwkJICogdGhlIGVkaXRvciBhbmQgYWZ0ZXIgd2UgaW52b2tlIHJ1bl9zdGF0dXMgYWJvdmUuCisJCSAqLworCQlkaXNjYXJkX2NhY2hlKCk7CisJfQorCXJlYWRfY2FjaGVfZnJvbShpbmRleF9maWxlKTsKKworCWlmICh1cGRhdGVfbWFpbl9jYWNoZV90cmVlKDApKSB7CisJCWVycm9yKF8oIkVycm9yIGJ1aWxkaW5nIHRyZWVzIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocnVuX2NvbW1pdF9ob29rKHVzZV9lZGl0b3IsIGluZGV4X2ZpbGUsICJwcmVwYXJlLWNvbW1pdC1tc2ciLAorCQkJICAgIGdpdF9wYXRoX2NvbW1pdF9lZGl0bXNnKCksIGhvb2tfYXJnMSwgaG9va19hcmcyLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodXNlX2VkaXRvcikgeworCQlzdHJ1Y3QgYXJndl9hcnJheSBlbnYgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkJYXJndl9hcnJheV9wdXNoZigmZW52LCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBpbmRleF9maWxlKTsKKwkJaWYgKGxhdW5jaF9lZGl0b3IoZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSwgTlVMTCwgZW52LmFyZ3YpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJYXJndl9hcnJheV9jbGVhcigmZW52KTsKKwl9CisKKwlpZiAoIW5vX3ZlcmlmeSAmJgorCSAgICBydW5fY29tbWl0X2hvb2sodXNlX2VkaXRvciwgaW5kZXhfZmlsZSwgImNvbW1pdC1tc2ciLCBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpLCBOVUxMKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfYXV0aG9yX2J5X25pY2tuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IG1haWxtYXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNvbnN0IGNoYXIgKmF2WzIwXTsKKwlpbnQgYWMgPSAwOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIE5VTEwpOworCXN0cmJ1Zl9hZGRmKCZidWYsICItLWF1dGhvcj0lcyIsIG5hbWUpOworCWF2WysrYWNdID0gIi0tYWxsIjsKKwlhdlsrK2FjXSA9ICItaSI7CisJYXZbKythY10gPSBidWYuYnVmOworCWF2WysrYWNdID0gTlVMTDsKKwlzZXR1cF9yZXZpc2lvbnMoYWMsIGF2LCAmcmV2cywgTlVMTCk7CisJcmV2cy5tYWlsbWFwID0gJm1haWxtYXA7CisJcmVhZF9tYWlsbWFwKHJldnMubWFpbG1hcCwgTlVMTCk7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCWNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cyk7CisJaWYgKGNvbW1pdCkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQljdHguZGF0ZV9tb2RlLnR5cGUgPSBEQVRFX05PUk1BTDsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlYU4gPCVhRT4iLCAmYnVmLCAmY3R4KTsKKwkJY2xlYXJfbWFpbG1hcCgmbWFpbG1hcCk7CisJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0KKwlkaWUoXygiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIiksIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfaWdub3JlZF9hcmcoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpZiAoIWlnbm9yZWRfYXJnKQorCQk7IC8qIGRlZmF1bHQgYWxyZWFkeSBpbml0aWFsaXplZCAqLworCWVsc2UgaWYgKCFzdHJjbXAoaWdub3JlZF9hcmcsICJ0cmFkaXRpb25hbCIpKQorCQlzLT5zaG93X2lnbm9yZWRfbW9kZSA9IFNIT1dfVFJBRElUSU9OQUxfSUdOT1JFRDsKKwllbHNlIGlmICghc3RyY21wKGlnbm9yZWRfYXJnLCAibm8iKSkKKwkJcy0+c2hvd19pZ25vcmVkX21vZGUgPSBTSE9XX05PX0lHTk9SRUQ7CisJZWxzZSBpZiAoIXN0cmNtcChpZ25vcmVkX2FyZywgIm1hdGNoaW5nIikpCisJCXMtPnNob3dfaWdub3JlZF9tb2RlID0gU0hPV19NQVRDSElOR19JR05PUkVEOworCWVsc2UKKwkJZGllKF8oIkludmFsaWQgaWdub3JlZCBtb2RlICclcyciKSwgaWdub3JlZF9hcmcpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdW50cmFja2VkX2ZpbGVzX2FyZyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWlmICghdW50cmFja2VkX2ZpbGVzX2FyZykKKwkJOyAvKiBkZWZhdWx0IGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJubyIpKQorCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9fVU5UUkFDS0VEX0ZJTEVTOworCWVsc2UgaWYgKCFzdHJjbXAodW50cmFja2VkX2ZpbGVzX2FyZywgIm5vcm1hbCIpKQorCQlzLT5zaG93X3VudHJhY2tlZF9maWxlcyA9IFNIT1dfTk9STUFMX1VOVFJBQ0tFRF9GSUxFUzsKKwllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJhbGwiKSkKKwkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX0FMTF9VTlRSQUNLRURfRklMRVM7CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF91bnRyYWNrZWRfZmlsZV9tb2RlcyBpbgorCSAqIGdpdC1jb21wbGV0aW9uLmJhc2ggd2hlbiB5b3UgYWRkIG5ldyBvcHRpb25zCisJICovCisJZWxzZQorCQlkaWUoXygiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIiksIHVudHJhY2tlZF9maWxlc19hcmcpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVhZF9jb21taXRfbWVzc2FnZShjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKm91dF9lbmM7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShuYW1lKTsKKwlpZiAoIWNvbW1pdCkKKwkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIiksIG5hbWUpOworCW91dF9lbmMgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCXJldHVybiBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBvdXRfZW5jKTsKK30KKworLyoKKyAqIEVudW1lcmF0ZSB3aGF0IG5lZWRzIHRvIGJlIHByb3BhZ2F0ZWQgd2hlbiAtLXBvcmNlbGFpbgorICogaXMgbm90IGluIGVmZmVjdCBoZXJlLgorICovCitzdGF0aWMgc3RydWN0IHN0YXR1c19kZWZlcnJlZF9jb25maWcgeworCWVudW0gd3Rfc3RhdHVzX2Zvcm1hdCBzdGF0dXNfZm9ybWF0OworCWludCBzaG93X2JyYW5jaDsKKwllbnVtIGFoZWFkX2JlaGluZF9mbGFncyBhaGVhZF9iZWhpbmQ7Cit9IHN0YXR1c19kZWZlcnJlZF9jb25maWcgPSB7CisJU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRCwKKwktMSwgLyogdW5zcGVjaWZpZWQgKi8KKwlBSEVBRF9CRUhJTkRfVU5TUEVDSUZJRUQsCit9OworCitzdGF0aWMgdm9pZCBmaW5hbGl6ZV9kZWZlcnJlZF9jb25maWcoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgdXNlX2RlZmVycmVkX2NvbmZpZyA9IChzdGF0dXNfZm9ybWF0ICE9IFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOICYmCisJCQkJICAgc3RhdHVzX2Zvcm1hdCAhPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTl9WMiAmJgorCQkJCSAgICFzLT5udWxsX3Rlcm1pbmF0aW9uKTsKKworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCWlmIChzdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfTk9ORSB8fAorCQkgICAgc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX1VOU1BFQ0lGSUVEKQorCQkJc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOOworCQllbHNlIGlmIChzdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfTE9ORykKKwkJCWRpZShfKCItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiKSk7CisJfQorCisJaWYgKHVzZV9kZWZlcnJlZF9jb25maWcgJiYgc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX1VOU1BFQ0lGSUVEKQorCQlzdGF0dXNfZm9ybWF0ID0gc3RhdHVzX2RlZmVycmVkX2NvbmZpZy5zdGF0dXNfZm9ybWF0OworCWlmIChzdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfVU5TUEVDSUZJRUQpCisJCXN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX05PTkU7CisKKwlpZiAodXNlX2RlZmVycmVkX2NvbmZpZyAmJiBzLT5zaG93X2JyYW5jaCA8IDApCisJCXMtPnNob3dfYnJhbmNoID0gc3RhdHVzX2RlZmVycmVkX2NvbmZpZy5zaG93X2JyYW5jaDsKKwlpZiAocy0+c2hvd19icmFuY2ggPCAwKQorCQlzLT5zaG93X2JyYW5jaCA9IDA7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIGRpZCBub3QgZ2l2ZSBhICItLVtub10tYWhlYWQtYmVoaW5kIiBjb21tYW5kCisJICogbGluZSBhcmd1bWVudCAqQU5EKiB3ZSB3aWxsIHByaW50IGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0CisJICogKHNob3J0LCBsb25nIGV0Yy4pIHRoZW4gd2UgaW5oZXJpdCBmcm9tIHRoZSBzdGF0dXMuYWhlYWRiZWhpbmQKKwkgKiBjb25maWcgc2V0dGluZy4gIEluIGFsbCBvdGhlciBjYXNlcyAoYW5kIHBvcmNlbGFpbiBWWzEyXSBmb3JtYXRzCisJICogaW4gcGFydGljdWxhciksIHdlIGluaGVyaXQgX0ZVTEwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCSAqLworCWlmICh1c2VfZGVmZXJyZWRfY29uZmlnICYmCisJICAgIHMtPmFoZWFkX2JlaGluZF9mbGFncyA9PSBBSEVBRF9CRUhJTkRfVU5TUEVDSUZJRUQpCisJCXMtPmFoZWFkX2JlaGluZF9mbGFncyA9IHN0YXR1c19kZWZlcnJlZF9jb25maWcuYWhlYWRfYmVoaW5kOworCisJaWYgKHMtPmFoZWFkX2JlaGluZF9mbGFncyA9PSBBSEVBRF9CRUhJTkRfVU5TUEVDSUZJRUQpCisJCXMtPmFoZWFkX2JlaGluZF9mbGFncyA9IEFIRUFEX0JFSElORF9GVUxMOworfQorCitzdGF0aWMgaW50IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10sCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKKwkJCQkgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICAgICAgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkLAorCQkJCSAgICAgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGYgPSAwOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CisJZmluYWxpemVfZGVmZXJyZWRfY29uZmlnKHMpOworCisJaWYgKGZvcmNlX2F1dGhvciAmJiAhc3RyY2hyKGZvcmNlX2F1dGhvciwgJz4nKSkKKwkJZm9yY2VfYXV0aG9yID0gZmluZF9hdXRob3JfYnlfbmlja25hbWUoZm9yY2VfYXV0aG9yKTsKKworCWlmIChmb3JjZV9hdXRob3IgJiYgcmVuZXdfYXV0aG9yc2hpcCkKKwkJZGllKF8oIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiKSk7CisKKwlpZiAobG9nZmlsZSB8fCBoYXZlX29wdGlvbl9tIHx8IHVzZV9tZXNzYWdlIHx8IGZpeHVwX21lc3NhZ2UpCisJCXVzZV9lZGl0b3IgPSAwOworCWlmICgwIDw9IGVkaXRfZmxhZykKKwkJdXNlX2VkaXRvciA9IGVkaXRfZmxhZzsKKworCS8qIFNhbml0eSBjaGVjayBvcHRpb25zICovCisJaWYgKGFtZW5kICYmICFjdXJyZW50X2hlYWQpCisJCWRpZShfKCJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIpKTsKKwlpZiAoYW1lbmQgJiYgd2hlbmNlICE9IEZST01fQ09NTUlUKSB7CisJCWlmICh3aGVuY2UgPT0gRlJPTV9NRVJHRSkKKwkJCWRpZShfKCJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIikpOworCQllbHNlIGlmICh3aGVuY2UgPT0gRlJPTV9DSEVSUllfUElDSykKKwkJCWRpZShfKCJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIikpOworCX0KKwlpZiAoZml4dXBfbWVzc2FnZSAmJiBzcXVhc2hfbWVzc2FnZSkKKwkJZGllKF8oIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKSk7CisJaWYgKHVzZV9tZXNzYWdlKQorCQlmKys7CisJaWYgKGVkaXRfbWVzc2FnZSkKKwkJZisrOworCWlmIChmaXh1cF9tZXNzYWdlKQorCQlmKys7CisJaWYgKGxvZ2ZpbGUpCisJCWYrKzsKKwlpZiAoZiA+IDEpCisJCWRpZShfKCJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIpKTsKKwlpZiAoaGF2ZV9vcHRpb25fbSAmJiAoZWRpdF9tZXNzYWdlIHx8IHVzZV9tZXNzYWdlIHx8IGxvZ2ZpbGUpKQorCQlkaWUoKF8oIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iKSkpOworCWlmIChmIHx8IGhhdmVfb3B0aW9uX20pCisJCXRlbXBsYXRlX2ZpbGUgPSBOVUxMOworCWlmIChlZGl0X21lc3NhZ2UpCisJCXVzZV9tZXNzYWdlID0gZWRpdF9tZXNzYWdlOworCWlmIChhbWVuZCAmJiAhdXNlX21lc3NhZ2UgJiYgIWZpeHVwX21lc3NhZ2UpCisJCXVzZV9tZXNzYWdlID0gIkhFQUQiOworCWlmICghdXNlX21lc3NhZ2UgJiYgd2hlbmNlICE9IEZST01fQ0hFUlJZX1BJQ0sgJiYgcmVuZXdfYXV0aG9yc2hpcCkKKwkJZGllKF8oIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iKSk7CisJaWYgKHVzZV9tZXNzYWdlKSB7CisJCXVzZV9tZXNzYWdlX2J1ZmZlciA9IHJlYWRfY29tbWl0X21lc3NhZ2UodXNlX21lc3NhZ2UpOworCQlpZiAoIXJlbmV3X2F1dGhvcnNoaXApIHsKKwkJCWF1dGhvcl9tZXNzYWdlID0gdXNlX21lc3NhZ2U7CisJCQlhdXRob3JfbWVzc2FnZV9idWZmZXIgPSB1c2VfbWVzc2FnZV9idWZmZXI7CisJCX0KKwl9CisJaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLICYmICFyZW5ld19hdXRob3JzaGlwKSB7CisJCWF1dGhvcl9tZXNzYWdlID0gIkNIRVJSWV9QSUNLX0hFQUQiOworCQlhdXRob3JfbWVzc2FnZV9idWZmZXIgPSByZWFkX2NvbW1pdF9tZXNzYWdlKGF1dGhvcl9tZXNzYWdlKTsKKwl9CisKKwlpZiAocGF0Y2hfaW50ZXJhY3RpdmUpCisJCWludGVyYWN0aXZlID0gMTsKKworCWlmIChhbHNvICsgb25seSArIGFsbCArIGludGVyYWN0aXZlID4gMSkKKwkJZGllKF8oIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIpKTsKKwljbGVhbnVwX21vZGUgPSBnZXRfY2xlYW51cF9tb2RlKGNsZWFudXBfYXJnLCB1c2VfZWRpdG9yKTsKKworCWhhbmRsZV91bnRyYWNrZWRfZmlsZXNfYXJnKHMpOworCisJaWYgKGFsbCAmJiBhcmdjID4gMCkKKwkJZGllKF8oInBhdGhzICclcyAuLi4nIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIpLAorCQkgICAgYXJndlswXSk7CisKKwlpZiAoc3RhdHVzX2Zvcm1hdCAhPSBTVEFUVVNfRk9STUFUX05PTkUpCisJCWRyeV9ydW4gPSAxOworCisJcmV0dXJuIGFyZ2M7Cit9CisKK3N0YXRpYyBpbnQgZHJ5X3J1bl9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIGNvbnN0IHN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCwgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgY29tbWl0dGFibGU7CisJY29uc3QgY2hhciAqaW5kZXhfZmlsZTsKKworCWluZGV4X2ZpbGUgPSBwcmVwYXJlX2luZGV4KGFyZ2MsIGFyZ3YsIHByZWZpeCwgY3VycmVudF9oZWFkLCAxKTsKKwljb21taXR0YWJsZSA9IHJ1bl9zdGF0dXMoc3Rkb3V0LCBpbmRleF9maWxlLCBwcmVmaXgsIDAsIHMpOworCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisKKwlyZXR1cm4gY29tbWl0dGFibGUgPyAwIDogMTsKK30KKworZGVmaW5lX2xpc3RfY29uZmlnX2FycmF5X2V4dHJhKGNvbG9yX3N0YXR1c19zbG90cywgeyJhZGRlZCJ9KTsKKworc3RhdGljIGludCBwYXJzZV9zdGF0dXNfc2xvdChjb25zdCBjaGFyICpzbG90KQoreworCWlmICghc3RyY2FzZWNtcChzbG90LCAiYWRkZWQiKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19VUERBVEVEOworCisJcmV0dXJuIExPT0tVUF9DT05GSUcoY29sb3Jfc3RhdHVzX3Nsb3RzLCBzbG90KTsKK30KKworc3RhdGljIGludCBnaXRfc3RhdHVzX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gY2I7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCisJaWYgKHN0YXJ0c193aXRoKGssICJjb2x1bW4uIikpCisJCXJldHVybiBnaXRfY29sdW1uX2NvbmZpZyhrLCB2LCAic3RhdHVzIiwgJnMtPmNvbG9wdHMpOworCWlmICghc3RyY21wKGssICJzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSIpKSB7CisJCWludCBpc19ib29sOworCQlzLT5zdWJtb2R1bGVfc3VtbWFyeSA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoaywgdiwgJmlzX2Jvb2wpOworCQlpZiAoaXNfYm9vbCAmJiBzLT5zdWJtb2R1bGVfc3VtbWFyeSkKKwkJCXMtPnN1Ym1vZHVsZV9zdW1tYXJ5ID0gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAic3RhdHVzLnNob3J0IikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbChrLCB2KSkKKwkJCXN0YXR1c19kZWZlcnJlZF9jb25maWcuc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfU0hPUlQ7CisJCWVsc2UKKwkJCXN0YXR1c19kZWZlcnJlZF9jb25maWcuc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfTk9ORTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuYnJhbmNoIikpIHsKKwkJc3RhdHVzX2RlZmVycmVkX2NvbmZpZy5zaG93X2JyYW5jaCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuYWhlYWRiZWhpbmQiKSkgeworCQlzdGF0dXNfZGVmZXJyZWRfY29uZmlnLmFoZWFkX2JlaGluZCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuc2hvd3N0YXNoIikpIHsKKwkJcy0+c2hvd19zdGFzaCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuY29sb3IiKSB8fCAhc3RyY21wKGssICJjb2xvci5zdGF0dXMiKSkgeworCQlzLT51c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuZGlzcGxheWNvbW1lbnRwcmVmaXgiKSkgeworCQlzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4ID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHNraXBfcHJlZml4KGssICJzdGF0dXMuY29sb3IuIiwgJnNsb3RfbmFtZSkgfHwKKwkgICAgc2tpcF9wcmVmaXgoaywgImNvbG9yLnN0YXR1cy4iLCAmc2xvdF9uYW1lKSkgeworCQlpbnQgc2xvdCA9IHBhcnNlX3N0YXR1c19zbG90KHNsb3RfbmFtZSk7CisJCWlmIChzbG90IDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAoIXYpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2woayk7CisJCXJldHVybiBjb2xvcl9wYXJzZSh2LCBzLT5jb2xvcl9wYWxldHRlW3Nsb3RdKTsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5yZWxhdGl2ZXBhdGhzIikpIHsKKwkJcy0+cmVsYXRpdmVfcGF0aHMgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAic3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyIpKSB7CisJCWlmICghdikKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2LCAibm8iKSkKKwkJCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19OT19VTlRSQUNLRURfRklMRVM7CisJCWVsc2UgaWYgKCFzdHJjbXAodiwgIm5vcm1hbCIpKQorCQkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PUk1BTF9VTlRSQUNLRURfRklMRVM7CisJCWVsc2UgaWYgKCFzdHJjbXAodiwgImFsbCIpKQorCQkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX0FMTF9VTlRSQUNLRURfRklMRVM7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcihfKCJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciKSwgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAiZGlmZi5yZW5hbWVsaW1pdCIpKSB7CisJCWlmIChzLT5yZW5hbWVfbGltaXQgPT0gLTEpCisJCQlzLT5yZW5hbWVfbGltaXQgPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMucmVuYW1lbGltaXQiKSkgeworCQlzLT5yZW5hbWVfbGltaXQgPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJkaWZmLnJlbmFtZXMiKSkgeworCQlpZiAocy0+ZGV0ZWN0X3JlbmFtZSA9PSAtMSkKKwkJCXMtPmRldGVjdF9yZW5hbWUgPSBnaXRfY29uZmlnX3JlbmFtZShrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMucmVuYW1lcyIpKSB7CisJCXMtPmRldGVjdF9yZW5hbWUgPSBnaXRfY29uZmlnX3JlbmFtZShrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBnaXRfZGlmZl91aV9jb25maWcoaywgdiwgTlVMTCk7Cit9CisKK2ludCBjbWRfc3RhdHVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBpbnQgbm9fcmVuYW1lcyA9IC0xOworCXN0YXRpYyBjb25zdCBjaGFyICpyZW5hbWVfc2NvcmVfYXJnID0gKGNvbnN0IGNoYXIgKiktMTsKKwlzdGF0aWMgc3RydWN0IHd0X3N0YXR1cyBzOworCXVuc2lnbmVkIGludCBwcm9ncmVzc19mbGFnID0gMDsKKwlpbnQgZmQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9zdGF0dXNfb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlIikpLAorCQlPUFRfU0VUX0lOVCgncycsICJzaG9ydCIsICZzdGF0dXNfZm9ybWF0LAorCQkJICAgIE5fKCJzaG93IHN0YXR1cyBjb25jaXNlbHkiKSwgU1RBVFVTX0ZPUk1BVF9TSE9SVCksCisJCU9QVF9CT09MKCdiJywgImJyYW5jaCIsICZzLnNob3dfYnJhbmNoLAorCQkJIE5fKCJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIpKSwKKwkJT1BUX0JPT0woMCwgInNob3ctc3Rhc2giLCAmcy5zaG93X3N0YXNoLAorCQkJIE5fKCJzaG93IHN0YXNoIGluZm9ybWF0aW9uIikpLAorCQlPUFRfQk9PTCgwLCAiYWhlYWQtYmVoaW5kIiwgJnMuYWhlYWRfYmVoaW5kX2ZsYWdzLAorCQkJIE5fKCJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJwb3JjZWxhaW4iLCAmc3RhdHVzX2Zvcm1hdCwKKwkJICBOXygidmVyc2lvbiIpLCBOXygibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRfcGFyc2VfcG9yY2VsYWluIH0sCisJCU9QVF9TRVRfSU5UKDAsICJsb25nIiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIpLAorCQkJICAgIFNUQVRVU19GT1JNQVRfTE9ORyksCisJCU9QVF9CT09MKCd6JywgIm51bGwiLCAmcy5udWxsX3Rlcm1pbmF0aW9uLAorCQkJIE5fKCJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAndScsICJ1bnRyYWNrZWQtZmlsZXMiLCAmdW50cmFja2VkX2ZpbGVzX2FyZywKKwkJICBOXygibW9kZSIpLAorCQkgIE5fKCJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAiaWdub3JlZCIsICZpZ25vcmVkX2FyZywKKwkJICBOXygibW9kZSIpLAorCQkgIE5fKCJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogdHJhZGl0aW9uYWwpIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSJ0cmFkaXRpb25hbCIgfSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAiaWdub3JlLXN1Ym1vZHVsZXMiLCAmaWdub3JlX3N1Ym1vZHVsZV9hcmcsIE5fKCJ3aGVuIiksCisJCSAgTl8oImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gKERlZmF1bHQ6IGFsbCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJT1BUX0NPTFVNTigwLCAiY29sdW1uIiwgJnMuY29sb3B0cywgTl8oImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiKSksCisJCU9QVF9CT09MKDAsICJuby1yZW5hbWVzIiwgJm5vX3JlbmFtZXMsIE5fKCJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnTScsICJmaW5kLXJlbmFtZXMiLCAmcmVuYW1lX3Njb3JlX2FyZywKKwkJICBOXygibiIpLCBOXygiZGV0ZWN0IHJlbmFtZXMsIG9wdGlvbmFsbHkgc2V0IHNpbWlsYXJpdHkgaW5kZXgiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBvcHRfcGFyc2VfcmVuYW1lX3Njb3JlIH0sCisJCU9QVF9FTkQoKSwKKwl9OworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9zdGF0dXNfdXNhZ2UsIGJ1aWx0aW5fc3RhdHVzX29wdGlvbnMpOworCisJc3RhdHVzX2luaXRfY29uZmlnKCZzLCBnaXRfc3RhdHVzX2NvbmZpZyk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LAorCQkJICAgICBidWlsdGluX3N0YXR1c19vcHRpb25zLAorCQkJICAgICBidWlsdGluX3N0YXR1c191c2FnZSwgMCk7CisJZmluYWxpemVfY29sb3B0cygmcy5jb2xvcHRzLCAtMSk7CisJZmluYWxpemVfZGVmZXJyZWRfY29uZmlnKCZzKTsKKworCWhhbmRsZV91bnRyYWNrZWRfZmlsZXNfYXJnKCZzKTsKKwloYW5kbGVfaWdub3JlZF9hcmcoJnMpOworCisJaWYgKHMuc2hvd19pZ25vcmVkX21vZGUgPT0gU0hPV19NQVRDSElOR19JR05PUkVEICYmCisJICAgIHMuc2hvd191bnRyYWNrZWRfZmlsZXMgPT0gU0hPV19OT19VTlRSQUNLRURfRklMRVMpCisJCWRpZShfKCJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIikpOworCisJcGFyc2VfcGF0aHNwZWMoJnMucGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlpZiAoc3RhdHVzX2Zvcm1hdCAhPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTiAmJgorCSAgICBzdGF0dXNfZm9ybWF0ICE9IFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOX1YyKQorCQlwcm9ncmVzc19mbGFnID0gUkVGUkVTSF9QUk9HUkVTUzsKKwlyZXBvX3JlYWRfaW5kZXgodGhlX3JlcG9zaXRvcnkpOworCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwKKwkJICAgICAgUkVGUkVTSF9RVUlFVHxSRUZSRVNIX1VOTUVSR0VEfHByb2dyZXNzX2ZsYWcsCisJCSAgICAgICZzLnBhdGhzcGVjLCBOVUxMLCBOVUxMKTsKKworCWlmICh1c2Vfb3B0aW9uYWxfbG9ja3MoKSkKKwkJZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgMCk7CisJZWxzZQorCQlmZCA9IC0xOworCisJcy5pc19pbml0aWFsID0gZ2V0X29pZChzLnJlZmVyZW5jZSwgJm9pZCkgPyAxIDogMDsKKwlpZiAoIXMuaXNfaW5pdGlhbCkKKwkJb2lkY3B5KCZzLm9pZF9jb21taXQsICZvaWQpOworCisJcy5pZ25vcmVfc3VibW9kdWxlX2FyZyA9IGlnbm9yZV9zdWJtb2R1bGVfYXJnOworCXMuc3RhdHVzX2Zvcm1hdCA9IHN0YXR1c19mb3JtYXQ7CisJcy52ZXJib3NlID0gdmVyYm9zZTsKKwlpZiAobm9fcmVuYW1lcyAhPSAtMSkKKwkJcy5kZXRlY3RfcmVuYW1lID0gIW5vX3JlbmFtZXM7CisJaWYgKChpbnRwdHJfdClyZW5hbWVfc2NvcmVfYXJnICE9IC0xKSB7CisJCWlmIChzLmRldGVjdF9yZW5hbWUgPCBESUZGX0RFVEVDVF9SRU5BTUUpCisJCQlzLmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7CisJCWlmIChyZW5hbWVfc2NvcmVfYXJnKQorCQkJcy5yZW5hbWVfc2NvcmUgPSBwYXJzZV9yZW5hbWVfc2NvcmUoJnJlbmFtZV9zY29yZV9hcmcpOworCX0KKworCXd0X3N0YXR1c19jb2xsZWN0KCZzKTsKKworCWlmICgwIDw9IGZkKQorCQlyZXBvX3VwZGF0ZV9pbmRleF9pZl9hYmxlKHRoZV9yZXBvc2l0b3J5LCAmaW5kZXhfbG9jayk7CisKKwlpZiAocy5yZWxhdGl2ZV9wYXRocykKKwkJcy5wcmVmaXggPSBwcmVmaXg7CisKKwl3dF9zdGF0dXNfcHJpbnQoJnMpOworCXd0X3N0YXR1c19jb2xsZWN0X2ZyZWVfYnVmZmVycygmcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfY29tbWl0X2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gY2I7CisJaW50IHN0YXR1czsKKworCWlmICghc3RyY21wKGssICJjb21taXQudGVtcGxhdGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJnRlbXBsYXRlX2ZpbGUsIGssIHYpOworCWlmICghc3RyY21wKGssICJjb21taXQuc3RhdHVzIikpIHsKKwkJaW5jbHVkZV9zdGF0dXMgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAiY29tbWl0LmNsZWFudXAiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjbGVhbnVwX2FyZywgaywgdik7CisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC5ncGdzaWduIikpIHsKKwkJc2lnbl9jb21taXQgPSBnaXRfY29uZmlnX2Jvb2woaywgdikgPyAiIiA6IE5VTEw7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAiY29tbWl0LnZlcmJvc2UiKSkgeworCQlpbnQgaXNfYm9vbDsKKwkJY29uZmlnX2NvbW1pdF92ZXJib3NlID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrLCB2LCAmaXNfYm9vbCk7CisJCXJldHVybiAwOworCX0KKworCXN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKGssIHYsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGdpdF9zdGF0dXNfY29uZmlnKGssIHYsIHMpOworfQorCitpbnQgY21kX2NvbW1pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICphcmd2X2djX2F1dG9bXSA9IHsiZ2MiLCAiLS1hdXRvIiwgTlVMTH07CisJc3RhdGljIHN0cnVjdCB3dF9zdGF0dXMgczsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbW1pdF9vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIpKSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIikpLAorCisJCU9QVF9HUk9VUChOXygiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIpKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmbG9nZmlsZSwgTl8oInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiKSksCisJCU9QVF9TVFJJTkcoMCwgImF1dGhvciIsICZmb3JjZV9hdXRob3IsIE5fKCJhdXRob3IiKSwgTl8oIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IikpLAorCQlPUFRfU1RSSU5HKDAsICJkYXRlIiwgJmZvcmNlX2RhdGUsIE5fKCJkYXRlIiksIE5fKCJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiKSksCisJCU9QVF9DQUxMQkFDSygnbScsICJtZXNzYWdlIiwgJm1lc3NhZ2UsIE5fKCJtZXNzYWdlIiksIE5fKCJjb21taXQgbWVzc2FnZSIpLCBvcHRfcGFyc2VfbSksCisJCU9QVF9TVFJJTkcoJ2MnLCAicmVlZGl0LW1lc3NhZ2UiLCAmZWRpdF9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygnQycsICJyZXVzZS1tZXNzYWdlIiwgJnVzZV9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygwLCAiZml4dXAiLCAmZml4dXBfbWVzc2FnZSwgTl8oImNvbW1pdCIpLCBOXygidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygwLCAic3F1YXNoIiwgJnNxdWFzaF9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgInJlc2V0LWF1dGhvciIsICZyZW5ld19hdXRob3JzaGlwLCBOXygidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIpKSwKKwkJT1BUX0JPT0woJ3MnLCAic2lnbm9mZiIsICZzaWdub2ZmLCBOXygiYWRkIFNpZ25lZC1vZmYtYnk6IikpLAorCQlPUFRfRklMRU5BTUUoJ3QnLCAidGVtcGxhdGUiLCAmdGVtcGxhdGVfZmlsZSwgTl8oInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIpKSwKKwkJT1BUX0JPT0woJ2UnLCAiZWRpdCIsICZlZGl0X2ZsYWcsIE5fKCJmb3JjZSBlZGl0IG9mIGNvbW1pdCIpKSwKKwkJT1BUX0NMRUFOVVAoJmNsZWFudXBfYXJnKSwKKwkJT1BUX0JPT0woMCwgInN0YXR1cyIsICZpbmNsdWRlX3N0YXR1cywgTl8oImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIikpLAorCQl7IE9QVElPTl9TVFJJTkcsICdTJywgImdwZy1zaWduIiwgJnNpZ25fY29tbWl0LCBOXygia2V5LWlkIiksCisJCSAgTl8oIkdQRyBzaWduIGNvbW1pdCIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpICIiIH0sCisJCS8qIGVuZCBjb21taXQgbWVzc2FnZSBvcHRpb25zICovCisKKwkJT1BUX0dST1VQKE5fKCJDb21taXQgY29udGVudHMgb3B0aW9ucyIpKSwKKwkJT1BUX0JPT0woJ2EnLCAiYWxsIiwgJmFsbCwgTl8oImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIpKSwKKwkJT1BUX0JPT0woJ2knLCAiaW5jbHVkZSIsICZhbHNvLCBOXygiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IikpLAorCQlPUFRfQk9PTCgwLCAiaW50ZXJhY3RpdmUiLCAmaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIpKSwKKwkJT1BUX0JPT0woJ3AnLCAicGF0Y2giLCAmcGF0Y2hfaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIikpLAorCQlPUFRfQk9PTCgnbycsICJvbmx5IiwgJm9ubHksIE5fKCJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiKSksCisJCU9QVF9CT09MKCduJywgIm5vLXZlcmlmeSIsICZub192ZXJpZnksIE5fKCJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIpKSwKKwkJT1BUX0JPT0woMCwgImRyeS1ydW4iLCAmZHJ5X3J1biwgTl8oInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiKSksCisJCU9QVF9TRVRfSU5UKDAsICJzaG9ydCIsICZzdGF0dXNfZm9ybWF0LCBOXygic2hvdyBzdGF0dXMgY29uY2lzZWx5IiksCisJCQkgICAgU1RBVFVTX0ZPUk1BVF9TSE9SVCksCisJCU9QVF9CT09MKDAsICJicmFuY2giLCAmcy5zaG93X2JyYW5jaCwgTl8oInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIikpLAorCQlPUFRfQk9PTCgwLCAiYWhlYWQtYmVoaW5kIiwgJnMuYWhlYWRfYmVoaW5kX2ZsYWdzLAorCQkJIE5fKCJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgInBvcmNlbGFpbiIsICZzdGF0dXNfZm9ybWF0LAorCQkJICAgIE5fKCJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIpLCBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTiksCisJCU9QVF9TRVRfSU5UKDAsICJsb25nIiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIpLAorCQkJICAgIFNUQVRVU19GT1JNQVRfTE9ORyksCisJCU9QVF9CT09MKCd6JywgIm51bGwiLCAmcy5udWxsX3Rlcm1pbmF0aW9uLAorCQkJIE5fKCJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIpKSwKKwkJT1BUX0JPT0woMCwgImFtZW5kIiwgJmFtZW5kLCBOXygiYW1lbmQgcHJldmlvdXMgY29tbWl0IikpLAorCQlPUFRfQk9PTCgwLCAibm8tcG9zdC1yZXdyaXRlIiwgJm5vX3Bvc3RfcmV3cml0ZSwgTl8oImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAndScsICJ1bnRyYWNrZWQtZmlsZXMiLCAmdW50cmFja2VkX2ZpbGVzX2FyZywgTl8oIm1vZGUiKSwgTl8oInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIpLCBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZwYXRoc3BlY19maWxlX251bCksCisJCS8qIGVuZCBjb21taXQgY29udGVudHMgb3B0aW9ucyAqLworCisJCU9QVF9ISURERU5fQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmYWxsb3dfZW1wdHksCisJCQkJTl8oIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiKSksCisJCU9QVF9ISURERU5fQk9PTCgwLCAiYWxsb3ctZW1wdHktbWVzc2FnZSIsICZhbGxvd19lbXB0eV9tZXNzYWdlLAorCQkJCU5fKCJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIikpLAorCisJCU9QVF9FTkQoKQorCX07CisKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICppbmRleF9maWxlLCAqcmVmbG9nX21zZzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbW1pdF91c2FnZSwgYnVpbHRpbl9jb21taXRfb3B0aW9ucyk7CisKKwlzdGF0dXNfaW5pdF9jb25maWcoJnMsIGdpdF9jb21taXRfY29uZmlnKTsKKwlzLmNvbW1pdF90ZW1wbGF0ZSA9IDE7CisJc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfTk9ORTsgLyogSWdub3JlIHN0YXR1cy5zaG9ydCAqLworCXMuY29sb3B0cyA9IDA7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZvaWQpKQorCQljdXJyZW50X2hlYWQgPSBOVUxMOworCWVsc2UgeworCQljdXJyZW50X2hlYWQgPSBsb29rdXBfY29tbWl0X29yX2RpZSgmb2lkLCAiSEVBRCIpOworCQlpZiAocGFyc2VfY29tbWl0KGN1cnJlbnRfaGVhZCkpCisJCQlkaWUoXygiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IikpOworCX0KKwl2ZXJib3NlID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCisJYXJnYyA9IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMsCisJCQkJCSAgYnVpbHRpbl9jb21taXRfdXNhZ2UsCisJCQkJCSAgcHJlZml4LCBjdXJyZW50X2hlYWQsICZzKTsKKwlpZiAodmVyYm9zZSA9PSAtMSkKKwkJdmVyYm9zZSA9IChjb25maWdfY29tbWl0X3ZlcmJvc2UgPCAwKSA/IDAgOiBjb25maWdfY29tbWl0X3ZlcmJvc2U7CisKKwlpZiAoZHJ5X3J1bikKKwkJcmV0dXJuIGRyeV9ydW5fY29tbWl0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgY3VycmVudF9oZWFkLCAmcyk7CisJaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4LCBjdXJyZW50X2hlYWQsIDApOworCisJLyogU2V0IHVwIGV2ZXJ5dGhpbmcgZm9yIHdyaXRpbmcgdGhlIGNvbW1pdCBvYmplY3QuICBUaGlzIGluY2x1ZGVzCisJICAgcnVubmluZyBob29rcywgd3JpdGluZyB0aGUgdHJlZXMsIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB1c2VyLiAgKi8KKwlpZiAoIXByZXBhcmVfdG9fY29tbWl0KGluZGV4X2ZpbGUsIHByZWZpeCwKKwkJCSAgICAgICBjdXJyZW50X2hlYWQsICZzLCAmYXV0aG9yX2lkZW50KSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgcGFyZW50cyAqLworCXJlZmxvZ19tc2cgPSBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIik7CisJaWYgKCFjdXJyZW50X2hlYWQpIHsKKwkJaWYgKCFyZWZsb2dfbXNnKQorCQkJcmVmbG9nX21zZyA9ICJjb21taXQgKGluaXRpYWwpIjsKKwl9IGVsc2UgaWYgKGFtZW5kKSB7CisJCWlmICghcmVmbG9nX21zZykKKwkJCXJlZmxvZ19tc2cgPSAiY29tbWl0IChhbWVuZCkiOworCQlwYXJlbnRzID0gY29weV9jb21taXRfbGlzdChjdXJyZW50X2hlYWQtPnBhcmVudHMpOworCX0gZWxzZSBpZiAod2hlbmNlID09IEZST01fTUVSR0UpIHsKKwkJc3RydWN0IHN0cmJ1ZiBtID0gU1RSQlVGX0lOSVQ7CisJCUZJTEUgKmZwOworCQlpbnQgYWxsb3dfZmFzdF9mb3J3YXJkID0gMTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0ciA9ICZwYXJlbnRzOworCisJCWlmICghcmVmbG9nX21zZykKKwkJCXJlZmxvZ19tc2cgPSAiY29tbWl0IChtZXJnZSkiOworCQlwcHRyID0gY29tbWl0X2xpc3RfYXBwZW5kKGN1cnJlbnRfaGVhZCwgcHB0cik7CisJCWZwID0geGZvcGVuKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpLCAiciIpOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJm0sIGZwKSAhPSBFT0YpIHsKKwkJCXN0cnVjdCBjb21taXQgKnBhcmVudDsKKworCQkJcGFyZW50ID0gZ2V0X21lcmdlX3BhcmVudChtLmJ1Zik7CisJCQlpZiAoIXBhcmVudCkKKwkJCQlkaWUoXygiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIpLCBtLmJ1Zik7CisJCQlwcHRyID0gY29tbWl0X2xpc3RfYXBwZW5kKHBhcmVudCwgcHB0cik7CisJCX0KKwkJZmNsb3NlKGZwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm0pOworCQlpZiAoIXN0YXQoZ2l0X3BhdGhfbWVyZ2VfbW9kZSh0aGVfcmVwb3NpdG9yeSksICZzdGF0YnVmKSkgeworCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aF9tZXJnZV9tb2RlKHRoZV9yZXBvc2l0b3J5KSwgMCkgPCAwKQorCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIikpOworCQkJaWYgKCFzdHJjbXAoc2IuYnVmLCAibm8tZmYiKSkKKwkJCQlhbGxvd19mYXN0X2ZvcndhcmQgPSAwOworCQl9CisJCWlmIChhbGxvd19mYXN0X2ZvcndhcmQpCisJCQlyZWR1Y2VfaGVhZHNfcmVwbGFjZSgmcGFyZW50cyk7CisJfSBlbHNlIHsKKwkJaWYgKCFyZWZsb2dfbXNnKQorCQkJcmVmbG9nX21zZyA9ICh3aGVuY2UgPT0gRlJPTV9DSEVSUllfUElDSykKKwkJCQkJPyAiY29tbWl0IChjaGVycnktcGljaykiCisJCQkJCTogImNvbW1pdCI7CisJCWNvbW1pdF9saXN0X2luc2VydChjdXJyZW50X2hlYWQsICZwYXJlbnRzKTsKKwl9CisKKwkvKiBGaW5hbGx5LCBnZXQgdGhlIGNvbW1pdCBtZXNzYWdlICovCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpLCAwKSA8IDApIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWRpZShfKCJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiKSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwl9CisKKwljbGVhbnVwX21lc3NhZ2UoJnNiLCBjbGVhbnVwX21vZGUsIHZlcmJvc2UpOworCisJaWYgKG1lc3NhZ2VfaXNfZW1wdHkoJnNiLCBjbGVhbnVwX21vZGUpICYmICFhbGxvd19lbXB0eV9tZXNzYWdlKSB7CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWZwcmludGYoc3RkZXJyLCBfKCJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIikpOworCQlleGl0KDEpOworCX0KKwlpZiAodGVtcGxhdGVfdW50b3VjaGVkKCZzYiwgdGVtcGxhdGVfZmlsZSwgY2xlYW51cF9tb2RlKSAmJiAhYWxsb3dfZW1wdHlfbWVzc2FnZSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlmcHJpbnRmKHN0ZGVyciwgXygiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIikpOworCQlleGl0KDEpOworCX0KKworCWlmIChhbWVuZCkgeworCQljb25zdCBjaGFyICpleGNsdWRlX2dwZ3NpZ1syXSA9IHsgImdwZ3NpZyIsIE5VTEwgfTsKKwkJZXh0cmEgPSByZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJzKGN1cnJlbnRfaGVhZCwgZXhjbHVkZV9ncGdzaWcpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICoqdGFpbCA9ICZleHRyYTsKKwkJYXBwZW5kX21lcmdlX3RhZ19oZWFkZXJzKHBhcmVudHMsICZ0YWlsKTsKKwl9CisKKwlpZiAoY29tbWl0X3RyZWVfZXh0ZW5kZWQoc2IuYnVmLCBzYi5sZW4sICZhY3RpdmVfY2FjaGVfdHJlZS0+b2lkLAorCQkJCSBwYXJlbnRzLCAmb2lkLCBhdXRob3JfaWRlbnQuYnVmLCBzaWduX2NvbW1pdCwKKwkJCQkgZXh0cmEpKSB7CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWRpZShfKCJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIpKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmF1dGhvcl9pZGVudCk7CisJZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhleHRyYSk7CisKKwlpZiAodXBkYXRlX2hlYWRfd2l0aF9yZWZsb2coY3VycmVudF9oZWFkLCAmb2lkLCByZWZsb2dfbXNnLCAmc2IsCisJCQkJICAgICZlcnIpKSB7CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKwl9CisKKwlzZXF1ZW5jZXJfcG9zdF9jb21taXRfY2xlYW51cCh0aGVfcmVwb3NpdG9yeSwgMCk7CisJdW5saW5rKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfbXNnKHRoZV9yZXBvc2l0b3J5KSk7CisJdW5saW5rKGdpdF9wYXRoX21lcmdlX21vZGUodGhlX3JlcG9zaXRvcnkpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfc3F1YXNoX21zZyh0aGVfcmVwb3NpdG9yeSkpOworCisJaWYgKGNvbW1pdF9pbmRleF9maWxlcygpKQorCQlkaWUoXygicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisJCSAgICAgICJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorCQkgICAgICAibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgdG8gcmVjb3Zlci4iKSk7CisKKwlpZiAoZ2l0X2Vudl9ib29sKEdJVF9URVNUX0NPTU1JVF9HUkFQSCwgMCkgJiYKKwkgICAgd3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZSh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cy0+b2RiLCAwLCBOVUxMKSkKKwkJcmV0dXJuIDE7CisKKwlyZXBvX3JlcmVyZSh0aGVfcmVwb3NpdG9yeSwgMCk7CisJcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLCBSVU5fR0lUX0NNRCk7CisJcnVuX2NvbW1pdF9ob29rKHVzZV9lZGl0b3IsIGdldF9pbmRleF9maWxlKCksICJwb3N0LWNvbW1pdCIsIE5VTEwpOworCWlmIChhbWVuZCAmJiAhbm9fcG9zdF9yZXdyaXRlKSB7CisJCWNvbW1pdF9wb3N0X3Jld3JpdGUodGhlX3JlcG9zaXRvcnksIGN1cnJlbnRfaGVhZCwgJm9pZCk7CisJfQorCWlmICghcXVpZXQpIHsKKwkJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKworCQlpZiAoIWN1cnJlbnRfaGVhZCkKKwkJCWZsYWdzIHw9IFNVTU1BUllfSU5JVElBTF9DT01NSVQ7CisJCWlmIChhdXRob3JfZGF0ZV9pc19pbnRlcmVzdGluZygpKQorCQkJZmxhZ3MgfD0gU1VNTUFSWV9TSE9XX0FVVEhPUl9EQVRFOworCQlwcmludF9jb21taXRfc3VtbWFyeSh0aGVfcmVwb3NpdG9yeSwgcHJlZml4LAorCQkJCSAgICAgJm9pZCwgZmxhZ3MpOworCX0KKworCVVOTEVBSyhlcnIpOworCVVOTEVBSyhzYik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NvbmZpZy5jIGIvYnVpbHRpbi9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTRhZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb25maWcuYwpAQCAtMCwwICsxLDg5OCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInVybG1hdGNoLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnVpbHRpbl9jb25maWdfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjaGFyICprZXk7CitzdGF0aWMgcmVnZXhfdCAqa2V5X3JlZ2V4cDsKK3N0YXRpYyByZWdleF90ICpyZWdleHA7CitzdGF0aWMgaW50IHNob3dfa2V5czsKK3N0YXRpYyBpbnQgb21pdF92YWx1ZXM7CitzdGF0aWMgaW50IHVzZV9rZXlfcmVnZXhwOworc3RhdGljIGludCBkb19hbGw7CitzdGF0aWMgaW50IGRvX25vdF9tYXRjaDsKK3N0YXRpYyBjaGFyIGRlbGltID0gJz0nOworc3RhdGljIGNoYXIga2V5X2RlbGltID0gJyAnOworc3RhdGljIGNoYXIgdGVybSA9ICdcbic7CisKK3N0YXRpYyBpbnQgdXNlX2dsb2JhbF9jb25maWcsIHVzZV9zeXN0ZW1fY29uZmlnLCB1c2VfbG9jYWxfY29uZmlnOworc3RhdGljIGludCB1c2Vfd29ya3RyZWVfY29uZmlnOworc3RhdGljIHN0cnVjdCBnaXRfY29uZmlnX3NvdXJjZSBnaXZlbl9jb25maWdfc291cmNlOworc3RhdGljIGludCBhY3Rpb25zLCB0eXBlOworc3RhdGljIGNoYXIgKmRlZmF1bHRfdmFsdWU7CitzdGF0aWMgaW50IGVuZF9udWw7CitzdGF0aWMgaW50IHJlc3BlY3RfaW5jbHVkZXNfb3B0ID0gLTE7CitzdGF0aWMgc3RydWN0IGNvbmZpZ19vcHRpb25zIGNvbmZpZ19vcHRpb25zOworc3RhdGljIGludCBzaG93X29yaWdpbjsKK3N0YXRpYyBpbnQgc2hvd19zY29wZTsKKworI2RlZmluZSBBQ1RJT05fR0VUICgxPDwwKQorI2RlZmluZSBBQ1RJT05fR0VUX0FMTCAoMTw8MSkKKyNkZWZpbmUgQUNUSU9OX0dFVF9SRUdFWFAgKDE8PDIpCisjZGVmaW5lIEFDVElPTl9SRVBMQUNFX0FMTCAoMTw8MykKKyNkZWZpbmUgQUNUSU9OX0FERCAoMTw8NCkKKyNkZWZpbmUgQUNUSU9OX1VOU0VUICgxPDw1KQorI2RlZmluZSBBQ1RJT05fVU5TRVRfQUxMICgxPDw2KQorI2RlZmluZSBBQ1RJT05fUkVOQU1FX1NFQ1RJT04gKDE8PDcpCisjZGVmaW5lIEFDVElPTl9SRU1PVkVfU0VDVElPTiAoMTw8OCkKKyNkZWZpbmUgQUNUSU9OX0xJU1QgKDE8PDkpCisjZGVmaW5lIEFDVElPTl9FRElUICgxPDwxMCkKKyNkZWZpbmUgQUNUSU9OX1NFVCAoMTw8MTEpCisjZGVmaW5lIEFDVElPTl9TRVRfQUxMICgxPDwxMikKKyNkZWZpbmUgQUNUSU9OX0dFVF9DT0xPUiAoMTw8MTMpCisjZGVmaW5lIEFDVElPTl9HRVRfQ09MT1JCT09MICgxPDwxNCkKKyNkZWZpbmUgQUNUSU9OX0dFVF9VUkxNQVRDSCAoMTw8MTUpCisKKy8qCisgKiBUaGUgYWN0aW9ucyAiQUNUSU9OX0xJU1QgfCBBQ1RJT05fR0VUXyoiIHdoaWNoIG1heSBwcm9kdWNlIG1vcmUgdGhhbgorICogb25lIGxpbmUgb2Ygb3V0cHV0IGFuZCB3aGljaCBzaG91bGQgdGhlcmVmb3JlIGJlIHBhZ2VkLgorICovCisjZGVmaW5lIFBBR0lOR19BQ1RJT05TIChBQ1RJT05fTElTVCB8IEFDVElPTl9HRVRfQUxMIHwgXAorCQkJQUNUSU9OX0dFVF9SRUdFWFAgfCBBQ1RJT05fR0VUX1VSTE1BVENIKQorCisjZGVmaW5lIFRZUEVfQk9PTAkJMQorI2RlZmluZSBUWVBFX0lOVAkJMgorI2RlZmluZSBUWVBFX0JPT0xfT1JfSU5UCTMKKyNkZWZpbmUgVFlQRV9QQVRICQk0CisjZGVmaW5lIFRZUEVfRVhQSVJZX0RBVEUJNQorI2RlZmluZSBUWVBFX0NPTE9SCQk2CisKKyNkZWZpbmUgT1BUX0NBTExCQUNLX1ZBTFVFKHMsIGwsIHYsIGgsIGkpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgTlVMTCwgKGgpLCBQQVJTRV9PUFRfTk9BUkcgfCBcCisJUEFSU0VfT1BUX05PTkVHLCBvcHRpb25fcGFyc2VfdHlwZSwgKGkpIH0KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgdXNhZ2VfYnVpbHRpbl9jb25maWcodm9pZCk7CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3R5cGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgIGludCB1bnNldCkKK3sKKwlpbnQgbmV3X3R5cGUsICp0b190eXBlOworCisJaWYgKHVuc2V0KSB7CisJCSooKGludCAqKSBvcHQtPnZhbHVlKSA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogVG8gc3VwcG9ydCAnLS08dHlwZT4nIHN0eWxlIGZsYWdzLCBiZWdpbiB3aXRoIG5ld190eXBlIGVxdWFsIHRvCisJICogb3B0LT5kZWZ2YWwuCisJICovCisJbmV3X3R5cGUgPSBvcHQtPmRlZnZhbDsKKwlpZiAoIW5ld190eXBlKSB7CisJCWlmICghc3RyY21wKGFyZywgImJvb2wiKSkKKwkJCW5ld190eXBlID0gVFlQRV9CT09MOworCQllbHNlIGlmICghc3RyY21wKGFyZywgImludCIpKQorCQkJbmV3X3R5cGUgPSBUWVBFX0lOVDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJib29sLW9yLWludCIpKQorCQkJbmV3X3R5cGUgPSBUWVBFX0JPT0xfT1JfSU5UOworCQllbHNlIGlmICghc3RyY21wKGFyZywgInBhdGgiKSkKKwkJCW5ld190eXBlID0gVFlQRV9QQVRIOworCQllbHNlIGlmICghc3RyY21wKGFyZywgImV4cGlyeS1kYXRlIikpCisJCQluZXdfdHlwZSA9IFRZUEVfRVhQSVJZX0RBVEU7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiY29sb3IiKSkKKwkJCW5ld190eXBlID0gVFlQRV9DT0xPUjsKKwkJZWxzZQorCQkJZGllKF8oInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIiksIGFyZyk7CisJfQorCisJdG9fdHlwZSA9IG9wdC0+dmFsdWU7CisJaWYgKCp0b190eXBlICYmICp0b190eXBlICE9IG5ld190eXBlKSB7CisJCS8qCisJCSAqIENvbXBsYWluIHdoZW4gdGhlcmUgaXMgYSBuZXcgdHlwZSBub3QgZXF1YWwgdG8gdGhlIG9sZCB0eXBlLgorCQkgKiBUaGlzIGFsbG93cyBmb3IgY29tYmluYXRpb25zIGxpa2UgJy0taW50IC0tdHlwZT1pbnQnIGFuZAorCQkgKiAnLS10eXBlPWludCAtLXR5cGU9aW50JywgYnV0IGRpc2FsbG93cyBvbmVzIGxpa2UgJy0tdHlwZT1ib29sCisJCSAqIC0taW50JyBhbmQgJy0tdHlwZT1ib29sCisJCSAqIC0tdHlwZT1pbnQnLgorCQkgKi8KKwkJZXJyb3IoXygib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiKSk7CisJCXVzYWdlX2J1aWx0aW5fY29uZmlnKCk7CisJfQorCSp0b190eXBlID0gbmV3X3R5cGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9jb25maWdfb3B0aW9uc1tdID0geworCU9QVF9HUk9VUChOXygiQ29uZmlnIGZpbGUgbG9jYXRpb24iKSksCisJT1BUX0JPT0woMCwgImdsb2JhbCIsICZ1c2VfZ2xvYmFsX2NvbmZpZywgTl8oInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiKSksCisJT1BUX0JPT0woMCwgInN5c3RlbSIsICZ1c2Vfc3lzdGVtX2NvbmZpZywgTl8oInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiKSksCisJT1BUX0JPT0woMCwgImxvY2FsIiwgJnVzZV9sb2NhbF9jb25maWcsIE5fKCJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIpKSwKKwlPUFRfQk9PTCgwLCAid29ya3RyZWUiLCAmdXNlX3dvcmt0cmVlX2NvbmZpZywgTl8oInVzZSBwZXItd29ya3RyZWUgY29uZmlnIGZpbGUiKSksCisJT1BUX1NUUklORygnZicsICJmaWxlIiwgJmdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSwgTl8oImZpbGUiKSwgTl8oInVzZSBnaXZlbiBjb25maWcgZmlsZSIpKSwKKwlPUFRfU1RSSU5HKDAsICJibG9iIiwgJmdpdmVuX2NvbmZpZ19zb3VyY2UuYmxvYiwgTl8oImJsb2ItaWQiKSwgTl8oInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiKSksCisJT1BUX0dST1VQKE5fKCJBY3Rpb24iKSksCisJT1BUX0JJVCgwLCAiZ2V0IiwgJmFjdGlvbnMsIE5fKCJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIpLCBBQ1RJT05fR0VUKSwKKwlPUFRfQklUKDAsICJnZXQtYWxsIiwgJmFjdGlvbnMsIE5fKCJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX0dFVF9BTEwpLAorCU9QVF9CSVQoMCwgImdldC1yZWdleHAiLCAmYWN0aW9ucywgTl8oImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIiksIEFDVElPTl9HRVRfUkVHRVhQKSwKKwlPUFRfQklUKDAsICJnZXQtdXJsbWF0Y2giLCAmYWN0aW9ucywgTl8oImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiKSwgQUNUSU9OX0dFVF9VUkxNQVRDSCksCisJT1BUX0JJVCgwLCAicmVwbGFjZS1hbGwiLCAmYWN0aW9ucywgTl8oInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIiksIEFDVElPTl9SRVBMQUNFX0FMTCksCisJT1BUX0JJVCgwLCAiYWRkIiwgJmFjdGlvbnMsIE5fKCJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiKSwgQUNUSU9OX0FERCksCisJT1BUX0JJVCgwLCAidW5zZXQiLCAmYWN0aW9ucywgTl8oInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX1VOU0VUKSwKKwlPUFRfQklUKDAsICJ1bnNldC1hbGwiLCAmYWN0aW9ucywgTl8oInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIiksIEFDVElPTl9VTlNFVF9BTEwpLAorCU9QVF9CSVQoMCwgInJlbmFtZS1zZWN0aW9uIiwgJmFjdGlvbnMsIE5fKCJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiKSwgQUNUSU9OX1JFTkFNRV9TRUNUSU9OKSwKKwlPUFRfQklUKDAsICJyZW1vdmUtc2VjdGlvbiIsICZhY3Rpb25zLCBOXygicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIpLCBBQ1RJT05fUkVNT1ZFX1NFQ1RJT04pLAorCU9QVF9CSVQoJ2wnLCAibGlzdCIsICZhY3Rpb25zLCBOXygibGlzdCBhbGwiKSwgQUNUSU9OX0xJU1QpLAorCU9QVF9CSVQoJ2UnLCAiZWRpdCIsICZhY3Rpb25zLCBOXygib3BlbiBhbiBlZGl0b3IiKSwgQUNUSU9OX0VESVQpLAorCU9QVF9CSVQoMCwgImdldC1jb2xvciIsICZhY3Rpb25zLCBOXygiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogc2xvdCBbZGVmYXVsdF0iKSwgQUNUSU9OX0dFVF9DT0xPUiksCisJT1BUX0JJVCgwLCAiZ2V0LWNvbG9yYm9vbCIsICZhY3Rpb25zLCBOXygiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iKSwgQUNUSU9OX0dFVF9DT0xPUkJPT0wpLAorCU9QVF9HUk9VUChOXygiVHlwZSIpKSwKKwlPUFRfQ0FMTEJBQ0soJ3QnLCAidHlwZSIsICZ0eXBlLCAiIiwgTl8oInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIpLCBvcHRpb25fcGFyc2VfdHlwZSksCisJT1BUX0NBTExCQUNLX1ZBTFVFKDAsICJib29sIiwgJnR5cGUsIE5fKCJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiKSwgVFlQRV9CT09MKSwKKwlPUFRfQ0FMTEJBQ0tfVkFMVUUoMCwgImludCIsICZ0eXBlLCBOXygidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiKSwgVFlQRV9JTlQpLAorCU9QVF9DQUxMQkFDS19WQUxVRSgwLCAiYm9vbC1vci1pbnQiLCAmdHlwZSwgTl8oInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIpLCBUWVBFX0JPT0xfT1JfSU5UKSwKKwlPUFRfQ0FMTEJBQ0tfVkFMVUUoMCwgInBhdGgiLCAmdHlwZSwgTl8oInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiKSwgVFlQRV9QQVRIKSwKKwlPUFRfQ0FMTEJBQ0tfVkFMVUUoMCwgImV4cGlyeS1kYXRlIiwgJnR5cGUsIE5fKCJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIpLCBUWVBFX0VYUElSWV9EQVRFKSwKKwlPUFRfR1JPVVAoTl8oIk90aGVyIikpLAorCU9QVF9CT09MKCd6JywgIm51bGwiLCAmZW5kX251bCwgTl8oInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIpKSwKKwlPUFRfQk9PTCgwLCAibmFtZS1vbmx5IiwgJm9taXRfdmFsdWVzLCBOXygic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IikpLAorCU9QVF9CT09MKDAsICJpbmNsdWRlcyIsICZyZXNwZWN0X2luY2x1ZGVzX29wdCwgTl8oInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIpKSwKKwlPUFRfQk9PTCgwLCAic2hvdy1vcmlnaW4iLCAmc2hvd19vcmlnaW4sIE5fKCJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIikpLAorCU9QVF9CT09MKDAsICJzaG93LXNjb3BlIiwgJnNob3dfc2NvcGUsIE5fKCJzaG93IHNjb3BlIG9mIGNvbmZpZyAod29ya3RyZWUsIGxvY2FsLCBnbG9iYWwsIHN5c3RlbSwgY29tbWFuZCkiKSksCisJT1BUX1NUUklORygwLCAiZGVmYXVsdCIsICZkZWZhdWx0X3ZhbHVlLCBOXygidmFsdWUiKSwgTl8oIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIpKSwKKwlPUFRfRU5EKCksCit9OworCitzdGF0aWMgTk9SRVRVUk4gdm9pZCB1c2FnZV9idWlsdGluX2NvbmZpZyh2b2lkKQoreworCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2FyZ2MoaW50IGFyZ2MsIGludCBtaW4sIGludCBtYXgpCit7CisJaWYgKGFyZ2MgPj0gbWluICYmIGFyZ2MgPD0gbWF4KQorCQlyZXR1cm47CisJaWYgKG1pbiA9PSBtYXgpCisJCWVycm9yKF8oIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSAlZCIpLCBtaW4pOworCWVsc2UKKwkJZXJyb3IoXygid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiKSwKKwkJICAgICAgbWluLCBtYXgpOworCXVzYWdlX2J1aWx0aW5fY29uZmlnKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY29uZmlnX29yaWdpbihzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY29uc3QgY2hhciB0ZXJtID0gZW5kX251bCA/ICdcMCcgOiAnXHQnOworCisJc3RyYnVmX2FkZHN0cihidWYsIGN1cnJlbnRfY29uZmlnX29yaWdpbl90eXBlKCkpOworCXN0cmJ1Zl9hZGRjaChidWYsICc6Jyk7CisJaWYgKGVuZF9udWwpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBjdXJyZW50X2NvbmZpZ19uYW1lKCkpOworCWVsc2UKKwkJcXVvdGVfY19zdHlsZShjdXJyZW50X2NvbmZpZ19uYW1lKCksIGJ1ZiwgTlVMTCwgMCk7CisJc3RyYnVmX2FkZGNoKGJ1ZiwgdGVybSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY29uZmlnX3Njb3BlKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljb25zdCBjaGFyIHRlcm0gPSBlbmRfbnVsID8gJ1wwJyA6ICdcdCc7CisJY29uc3QgY2hhciAqc2NvcGUgPSBjb25maWdfc2NvcGVfbmFtZShjdXJyZW50X2NvbmZpZ19zY29wZSgpKTsKKworCXN0cmJ1Zl9hZGRzdHIoYnVmLCBOXyhzY29wZSkpOworCXN0cmJ1Zl9hZGRjaChidWYsIHRlcm0pOworfQorCitzdGF0aWMgaW50IHNob3dfYWxsX2NvbmZpZyhjb25zdCBjaGFyICprZXlfLCBjb25zdCBjaGFyICp2YWx1ZV8sIHZvaWQgKmNiKQoreworCWlmIChzaG93X29yaWdpbiB8fCBzaG93X3Njb3BlKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWlmIChzaG93X3Njb3BlKQorCQkJc2hvd19jb25maWdfc2NvcGUoJmJ1Zik7CisJCWlmIChzaG93X29yaWdpbikKKwkJCXNob3dfY29uZmlnX29yaWdpbigmYnVmKTsKKwkJLyogVXNlIGZ3cml0ZSBhcyAiYnVmIiBjYW4gY29udGFpbiBcMCdzIGlmICJlbmRfbnVsbCIgaXMgc2V0LiAqLworCQlmd3JpdGUoYnVmLmJ1ZiwgMSwgYnVmLmxlbiwgc3Rkb3V0KTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCWlmICghb21pdF92YWx1ZXMgJiYgdmFsdWVfKQorCQlwcmludGYoIiVzJWMlcyVjIiwga2V5XywgZGVsaW0sIHZhbHVlXywgdGVybSk7CisJZWxzZQorCQlwcmludGYoIiVzJWMiLCBrZXlfLCB0ZXJtKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN0cmJ1Zl9saXN0IHsKKwlzdHJ1Y3Qgc3RyYnVmICppdGVtczsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworfTsKKworc3RhdGljIGludCBmb3JtYXRfY29uZmlnKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqa2V5XywgY29uc3QgY2hhciAqdmFsdWVfKQoreworCWlmIChzaG93X3Njb3BlKQorCQlzaG93X2NvbmZpZ19zY29wZShidWYpOworCWlmIChzaG93X29yaWdpbikKKwkJc2hvd19jb25maWdfb3JpZ2luKGJ1Zik7CisJaWYgKHNob3dfa2V5cykKKwkJc3RyYnVmX2FkZHN0cihidWYsIGtleV8pOworCWlmICghb21pdF92YWx1ZXMpIHsKKwkJaWYgKHNob3dfa2V5cykKKwkJCXN0cmJ1Zl9hZGRjaChidWYsIGtleV9kZWxpbSk7CisKKwkJaWYgKHR5cGUgPT0gVFlQRV9JTlQpCisJCQlzdHJidWZfYWRkZihidWYsICIlIlBSSWQ2NCwKKwkJCQkgICAgZ2l0X2NvbmZpZ19pbnQ2NChrZXlfLCB2YWx1ZV8gPyB2YWx1ZV8gOiAiIikpOworCQllbHNlIGlmICh0eXBlID09IFRZUEVfQk9PTCkKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBnaXRfY29uZmlnX2Jvb2woa2V5XywgdmFsdWVfKSA/CisJCQkJICAgICAgInRydWUiIDogImZhbHNlIik7CisJCWVsc2UgaWYgKHR5cGUgPT0gVFlQRV9CT09MX09SX0lOVCkgeworCQkJaW50IGlzX2Jvb2wsIHY7CisJCQl2ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXlfLCB2YWx1ZV8sICZpc19ib29sKTsKKwkJCWlmIChpc19ib29sKQorCQkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCB2ID8gInRydWUiIDogImZhbHNlIik7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZGYoYnVmLCAiJWQiLCB2KTsKKwkJfSBlbHNlIGlmICh0eXBlID09IFRZUEVfUEFUSCkgeworCQkJY29uc3QgY2hhciAqdjsKKwkJCWlmIChnaXRfY29uZmlnX3BhdGhuYW1lKCZ2LCBrZXlfLCB2YWx1ZV8pIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlzdHJidWZfYWRkc3RyKGJ1Ziwgdik7CisJCQlmcmVlKChjaGFyICopdik7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBUWVBFX0VYUElSWV9EQVRFKSB7CisJCQl0aW1lc3RhbXBfdCB0OworCQkJaWYgKGdpdF9jb25maWdfZXhwaXJ5X2RhdGUoJnQsIGtleV8sIHZhbHVlXykgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUiUFJJdGltZSwgdCk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBUWVBFX0NPTE9SKSB7CisJCQljaGFyIHZbQ09MT1JfTUFYTEVOXTsKKwkJCWlmIChnaXRfY29uZmlnX2NvbG9yKHYsIGtleV8sIHZhbHVlXykgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCB2KTsKKwkJfSBlbHNlIGlmICh2YWx1ZV8pIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCB2YWx1ZV8pOworCQl9IGVsc2UgeworCQkJLyogSnVzdCBzaG93IHRoZSBrZXkgbmFtZTsgYmFjayBvdXQgZGVsaW1pdGVyICovCisJCQlpZiAoc2hvd19rZXlzKQorCQkJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBidWYtPmxlbiAtIDEpOworCQl9CisJfQorCXN0cmJ1Zl9hZGRjaChidWYsIHRlcm0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxlY3RfY29uZmlnKGNvbnN0IGNoYXIgKmtleV8sIGNvbnN0IGNoYXIgKnZhbHVlXywgdm9pZCAqY2IpCit7CisJc3RydWN0IHN0cmJ1Zl9saXN0ICp2YWx1ZXMgPSBjYjsKKworCWlmICghdXNlX2tleV9yZWdleHAgJiYgc3RyY21wKGtleV8sIGtleSkpCisJCXJldHVybiAwOworCWlmICh1c2Vfa2V5X3JlZ2V4cCAmJiByZWdleGVjKGtleV9yZWdleHAsIGtleV8sIDAsIE5VTEwsIDApKQorCQlyZXR1cm4gMDsKKwlpZiAocmVnZXhwICE9IE5VTEwgJiYKKwkgICAgKGRvX25vdF9tYXRjaCBeICEhcmVnZXhlYyhyZWdleHAsICh2YWx1ZV8/dmFsdWVfOiIiKSwgMCwgTlVMTCwgMCkpKQorCQlyZXR1cm4gMDsKKworCUFMTE9DX0dST1codmFsdWVzLT5pdGVtcywgdmFsdWVzLT5uciArIDEsIHZhbHVlcy0+YWxsb2MpOworCXN0cmJ1Zl9pbml0KCZ2YWx1ZXMtPml0ZW1zW3ZhbHVlcy0+bnJdLCAwKTsKKworCXJldHVybiBmb3JtYXRfY29uZmlnKCZ2YWx1ZXMtPml0ZW1zW3ZhbHVlcy0+bnIrK10sIGtleV8sIHZhbHVlXyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3ZhbHVlKGNvbnN0IGNoYXIgKmtleV8sIGNvbnN0IGNoYXIgKnJlZ2V4XykKK3sKKwlpbnQgcmV0ID0gQ09ORklHX0dFTkVSSUNfRVJST1I7CisJc3RydWN0IHN0cmJ1Zl9saXN0IHZhbHVlcyA9IHtOVUxMfTsKKwlpbnQgaTsKKworCWlmICh1c2Vfa2V5X3JlZ2V4cCkgeworCQljaGFyICp0bDsKKworCQkvKgorCQkgKiBORUVEU1dPUks6IHRoaXMgbmFpdmUgcGF0dGVybiBsb3dlcmNhc2luZyBvYnZpb3VzbHkgZG9lcyBub3QKKwkJICogd29yayBmb3IgbW9yZSBjb21wbGV4IHBhdHRlcm5zIGxpa2UgIl5bXi5dKkZvby4qYmFyIi4KKwkJICogUGVyaGFwcyB3ZSBzaG91bGQgZGVwcmVjYXRlIHRoaXMgYWx0b2dldGhlciBzb21lZGF5LgorCQkgKi8KKworCQlrZXkgPSB4c3RyZHVwKGtleV8pOworCQlmb3IgKHRsID0ga2V5ICsgc3RybGVuKGtleSkgLSAxOworCQkgICAgIHRsID49IGtleSAmJiAqdGwgIT0gJy4nOworCQkgICAgIHRsLS0pCisJCQkqdGwgPSB0b2xvd2VyKCp0bCk7CisJCWZvciAodGwgPSBrZXk7ICp0bCAmJiAqdGwgIT0gJy4nOyB0bCsrKQorCQkJKnRsID0gdG9sb3dlcigqdGwpOworCisJCWtleV9yZWdleHAgPSAocmVnZXhfdCopeG1hbGxvYyhzaXplb2YocmVnZXhfdCkpOworCQlpZiAocmVnY29tcChrZXlfcmVnZXhwLCBrZXksIFJFR19FWFRFTkRFRCkpIHsKKwkJCWVycm9yKF8oImludmFsaWQga2V5IHBhdHRlcm46ICVzIiksIGtleV8pOworCQkJRlJFRV9BTkRfTlVMTChrZXlfcmVnZXhwKTsKKwkJCXJldCA9IENPTkZJR19JTlZBTElEX1BBVFRFUk47CisJCQlnb3RvIGZyZWVfc3RyaW5nczsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChnaXRfY29uZmlnX3BhcnNlX2tleShrZXlfLCAma2V5LCBOVUxMKSkgeworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfS0VZOworCQkJZ290byBmcmVlX3N0cmluZ3M7CisJCX0KKwl9CisKKwlpZiAocmVnZXhfKSB7CisJCWlmIChyZWdleF9bMF0gPT0gJyEnKSB7CisJCQlkb19ub3RfbWF0Y2ggPSAxOworCQkJcmVnZXhfKys7CisJCX0KKworCQlyZWdleHAgPSAocmVnZXhfdCopeG1hbGxvYyhzaXplb2YocmVnZXhfdCkpOworCQlpZiAocmVnY29tcChyZWdleHAsIHJlZ2V4XywgUkVHX0VYVEVOREVEKSkgeworCQkJZXJyb3IoXygiaW52YWxpZCBwYXR0ZXJuOiAlcyIpLCByZWdleF8pOworCQkJRlJFRV9BTkRfTlVMTChyZWdleHApOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfUEFUVEVSTjsKKwkJCWdvdG8gZnJlZV9zdHJpbmdzOworCQl9CisJfQorCisJY29uZmlnX3dpdGhfb3B0aW9ucyhjb2xsZWN0X2NvbmZpZywgJnZhbHVlcywKKwkJCSAgICAmZ2l2ZW5fY29uZmlnX3NvdXJjZSwgJmNvbmZpZ19vcHRpb25zKTsKKworCWlmICghdmFsdWVzLm5yICYmIGRlZmF1bHRfdmFsdWUpIHsKKwkJc3RydWN0IHN0cmJ1ZiAqaXRlbTsKKwkJQUxMT0NfR1JPVyh2YWx1ZXMuaXRlbXMsIHZhbHVlcy5uciArIDEsIHZhbHVlcy5hbGxvYyk7CisJCWl0ZW0gPSAmdmFsdWVzLml0ZW1zW3ZhbHVlcy5ucisrXTsKKwkJc3RyYnVmX2luaXQoaXRlbSwgMCk7CisJCWlmIChmb3JtYXRfY29uZmlnKGl0ZW0sIGtleV8sIGRlZmF1bHRfdmFsdWUpIDwgMCkKKwkJCWRpZShfKCJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIpLAorCQkJCWRlZmF1bHRfdmFsdWUpOworCX0KKworCXJldCA9ICF2YWx1ZXMubnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmJ1ZiAqYnVmID0gdmFsdWVzLml0ZW1zICsgaTsKKwkJaWYgKGRvX2FsbCB8fCBpID09IHZhbHVlcy5uciAtIDEpCisJCQlmd3JpdGUoYnVmLT5idWYsIDEsIGJ1Zi0+bGVuLCBzdGRvdXQpOworCQlzdHJidWZfcmVsZWFzZShidWYpOworCX0KKwlmcmVlKHZhbHVlcy5pdGVtcyk7CisKK2ZyZWVfc3RyaW5nczoKKwlmcmVlKGtleSk7CisJaWYgKGtleV9yZWdleHApIHsKKwkJcmVnZnJlZShrZXlfcmVnZXhwKTsKKwkJZnJlZShrZXlfcmVnZXhwKTsKKwl9CisJaWYgKHJlZ2V4cCkgeworCQlyZWdmcmVlKHJlZ2V4cCk7CisJCWZyZWUocmVnZXhwKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqbm9ybWFsaXplX3ZhbHVlKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodHlwZSA9PSAwIHx8IHR5cGUgPT0gVFlQRV9QQVRIIHx8IHR5cGUgPT0gVFlQRV9FWFBJUllfREFURSkKKwkJLyoKKwkJICogV2UgZG9uJ3QgZG8gbm9ybWFsaXphdGlvbiBmb3IgVFlQRV9QQVRIIGhlcmU6IElmCisJCSAqIHRoZSBwYXRoIGlzIGxpa2Ugfi9mb29iYXIvLCB3ZSBwcmVmZXIgdG8gc3RvcmUKKwkJICogIn4vZm9vYmFyLyIgaW4gdGhlIGNvbmZpZyBmaWxlLCBhbmQgdG8gZXhwYW5kIHRoZSB+CisJCSAqIHdoZW4gcmV0cmlldmluZyB0aGUgdmFsdWUuCisJCSAqIEFsc28gZG9uJ3QgZG8gbm9ybWFsaXphdGlvbiBmb3IgZXhwaXJ5IGRhdGVzLgorCQkgKi8KKwkJcmV0dXJuIHhzdHJkdXAodmFsdWUpOworCWlmICh0eXBlID09IFRZUEVfSU5UKQorCQlyZXR1cm4geHN0cmZtdCgiJSJQUklkNjQsIGdpdF9jb25maWdfaW50NjQoa2V5LCB2YWx1ZSkpOworCWlmICh0eXBlID09IFRZUEVfQk9PTCkKKwkJcmV0dXJuIHhzdHJkdXAoZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpID8gICJ0cnVlIiA6ICJmYWxzZSIpOworCWlmICh0eXBlID09IFRZUEVfQk9PTF9PUl9JTlQpIHsKKwkJaW50IGlzX2Jvb2wsIHY7CisJCXYgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZpc19ib29sKTsKKwkJaWYgKCFpc19ib29sKQorCQkJcmV0dXJuIHhzdHJmbXQoIiVkIiwgdik7CisJCWVsc2UKKwkJCXJldHVybiB4c3RyZHVwKHYgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwl9CisJaWYgKHR5cGUgPT0gVFlQRV9DT0xPUikgeworCQljaGFyIHZbQ09MT1JfTUFYTEVOXTsKKwkJaWYgKGdpdF9jb25maWdfY29sb3Iodiwga2V5LCB2YWx1ZSkpCisJCQlkaWUoXygiY2Fubm90IHBhcnNlIGNvbG9yICclcyciKSwgdmFsdWUpOworCisJCS8qCisJCSAqIFRoZSBjb250ZW50cyBvZiBgdmAgbm93IGNvbnRhaW4gYW4gQU5TSSBlc2NhcGUKKwkJICogc2VxdWVuY2UsIG5vdCBzdWl0YWJsZSBmb3IgaW5jbHVkaW5nIHdpdGhpbiBhCisJCSAqIGNvbmZpZ3VyYXRpb24gZmlsZS4gVHJlYXQgdGhlIGFib3ZlIGFzIGEKKwkJICogInNhbml0eS1jaGVjayIsIGFuZCByZXR1cm4gdGhlIGdpdmVuIHZhbHVlLCB3aGljaCB3ZQorCQkgKiBrbm93IGlzIHJlcHJlc2VudGFibGUgYXMgdmFsaWQgY29sb3IgY29kZS4KKwkJICovCisJCXJldHVybiB4c3RyZHVwKHZhbHVlKTsKKwl9CisKKwlCVUcoImNhbm5vdCBub3JtYWxpemUgdHlwZSAlZCIsIHR5cGUpOworfQorCitzdGF0aWMgaW50IGdldF9jb2xvcl9mb3VuZDsKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfY29sb3Jfc2xvdDsKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfY29sb3Jib29sX3Nsb3Q7CitzdGF0aWMgY2hhciBwYXJzZWRfY29sb3JbQ09MT1JfTUFYTEVOXTsKKworc3RhdGljIGludCBnaXRfZ2V0X2NvbG9yX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsIGdldF9jb2xvcl9zbG90KSkgeworCQlpZiAoIXZhbHVlKQorCQkJY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJaWYgKGNvbG9yX3BhcnNlKHZhbHVlLCBwYXJzZWRfY29sb3IpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJZ2V0X2NvbG9yX2ZvdW5kID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9jb2xvcihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKmRlZl9jb2xvcikKK3sKKwlnZXRfY29sb3Jfc2xvdCA9IHZhcjsKKwlnZXRfY29sb3JfZm91bmQgPSAwOworCXBhcnNlZF9jb2xvclswXSA9ICdcMCc7CisJY29uZmlnX3dpdGhfb3B0aW9ucyhnaXRfZ2V0X2NvbG9yX2NvbmZpZywgTlVMTCwKKwkJCSAgICAmZ2l2ZW5fY29uZmlnX3NvdXJjZSwgJmNvbmZpZ19vcHRpb25zKTsKKworCWlmICghZ2V0X2NvbG9yX2ZvdW5kICYmIGRlZl9jb2xvcikgeworCQlpZiAoY29sb3JfcGFyc2UoZGVmX2NvbG9yLCBwYXJzZWRfY29sb3IpIDwgMCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIpKTsKKwl9CisKKwlmcHV0cyhwYXJzZWRfY29sb3IsIHN0ZG91dCk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NvbG9yYm9vbF9mb3VuZDsKK3N0YXRpYyBpbnQgZ2V0X2RpZmZfY29sb3JfZm91bmQ7CitzdGF0aWMgaW50IGdldF9jb2xvcl91aV9mb3VuZDsKK3N0YXRpYyBpbnQgZ2l0X2dldF9jb2xvcmJvb2xfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCXZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgZ2V0X2NvbG9yYm9vbF9zbG90KSkKKwkJZ2V0X2NvbG9yYm9vbF9mb3VuZCA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5jb2xvciIpKQorCQlnZXRfZGlmZl9jb2xvcl9mb3VuZCA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAodmFyLCAiY29sb3IudWkiKSkKKwkJZ2V0X2NvbG9yX3VpX2ZvdW5kID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NvbG9yYm9vbChjb25zdCBjaGFyICp2YXIsIGludCBwcmludCkKK3sKKwlnZXRfY29sb3Jib29sX3Nsb3QgPSB2YXI7CisJZ2V0X2NvbG9yYm9vbF9mb3VuZCA9IC0xOworCWdldF9kaWZmX2NvbG9yX2ZvdW5kID0gLTE7CisJZ2V0X2NvbG9yX3VpX2ZvdW5kID0gLTE7CisJY29uZmlnX3dpdGhfb3B0aW9ucyhnaXRfZ2V0X2NvbG9yYm9vbF9jb25maWcsIE5VTEwsCisJCQkgICAgJmdpdmVuX2NvbmZpZ19zb3VyY2UsICZjb25maWdfb3B0aW9ucyk7CisKKwlpZiAoZ2V0X2NvbG9yYm9vbF9mb3VuZCA8IDApIHsKKwkJaWYgKCFzdHJjbXAoZ2V0X2NvbG9yYm9vbF9zbG90LCAiY29sb3IuZGlmZiIpKQorCQkJZ2V0X2NvbG9yYm9vbF9mb3VuZCA9IGdldF9kaWZmX2NvbG9yX2ZvdW5kOworCQlpZiAoZ2V0X2NvbG9yYm9vbF9mb3VuZCA8IDApCisJCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gZ2V0X2NvbG9yX3VpX2ZvdW5kOworCX0KKworCWlmIChnZXRfY29sb3Jib29sX2ZvdW5kIDwgMCkKKwkJLyogZGVmYXVsdCB2YWx1ZSBpZiBub25lIGZvdW5kIGluIGNvbmZpZyAqLworCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gR0lUX0NPTE9SX0FVVE87CisKKwlnZXRfY29sb3Jib29sX2ZvdW5kID0gd2FudF9jb2xvcihnZXRfY29sb3Jib29sX2ZvdW5kKTsKKworCWlmIChwcmludCkgeworCQlwcmludGYoIiVzXG4iLCBnZXRfY29sb3Jib29sX2ZvdW5kID8gInRydWUiIDogImZhbHNlIik7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gZ2V0X2NvbG9yYm9vbF9mb3VuZCA/IDAgOiAxOworfQorCitzdGF0aWMgdm9pZCBjaGVja193cml0ZSh2b2lkKQoreworCWlmICghZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlICYmICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJZGllKF8oIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiKSk7CisKKwlpZiAoZ2l2ZW5fY29uZmlnX3NvdXJjZS51c2Vfc3RkaW4pCisJCWRpZShfKCJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiKSk7CisKKwlpZiAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5ibG9iKQorCQlkaWUoXygid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIpKTsKK30KKworc3RydWN0IHVybG1hdGNoX2N1cnJlbnRfY2FuZGlkYXRlX3ZhbHVlIHsKKwljaGFyIHZhbHVlX2lzX251bGw7CisJc3RydWN0IHN0cmJ1ZiB2YWx1ZTsKK307CisKK3N0YXRpYyBpbnQgdXJsbWF0Y2hfY29sbGVjdF9mbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnZhbHVlcyA9IGNiOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHZhbHVlcywgdmFyKTsKKwlzdHJ1Y3QgdXJsbWF0Y2hfY3VycmVudF9jYW5kaWRhdGVfdmFsdWUgKm1hdGNoZWQgPSBpdGVtLT51dGlsOworCisJaWYgKCFtYXRjaGVkKSB7CisJCW1hdGNoZWQgPSB4bWFsbG9jKHNpemVvZigqbWF0Y2hlZCkpOworCQlzdHJidWZfaW5pdCgmbWF0Y2hlZC0+dmFsdWUsIDApOworCQlpdGVtLT51dGlsID0gbWF0Y2hlZDsKKwl9IGVsc2UgeworCQlzdHJidWZfcmVzZXQoJm1hdGNoZWQtPnZhbHVlKTsKKwl9CisKKwlpZiAodmFsdWUpIHsKKwkJc3RyYnVmX2FkZHN0cigmbWF0Y2hlZC0+dmFsdWUsIHZhbHVlKTsKKwkJbWF0Y2hlZC0+dmFsdWVfaXNfbnVsbCA9IDA7CisJfSBlbHNlIHsKKwkJbWF0Y2hlZC0+dmFsdWVfaXNfbnVsbCA9IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF91cmxtYXRjaChjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwlpbnQgcmV0OworCWNoYXIgKnNlY3Rpb25fdGFpbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgdXJsbWF0Y2hfY29uZmlnIGNvbmZpZyA9IHsgU1RSSU5HX0xJU1RfSU5JVF9EVVAgfTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdmFsdWVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwljb25maWcuY29sbGVjdF9mbiA9IHVybG1hdGNoX2NvbGxlY3RfZm47CisJY29uZmlnLmNhc2NhZGVfZm4gPSBOVUxMOworCWNvbmZpZy5jYiA9ICZ2YWx1ZXM7CisKKwlpZiAoIXVybF9ub3JtYWxpemUodXJsLCAmY29uZmlnLnVybCkpCisJCWRpZSgiJXMiLCBjb25maWcudXJsLmVycik7CisKKwljb25maWcuc2VjdGlvbiA9IHhzdHJkdXBfdG9sb3dlcih2YXIpOworCXNlY3Rpb25fdGFpbCA9IHN0cmNocihjb25maWcuc2VjdGlvbiwgJy4nKTsKKwlpZiAoc2VjdGlvbl90YWlsKSB7CisJCSpzZWN0aW9uX3RhaWwgPSAnXDAnOworCQljb25maWcua2V5ID0gc2VjdGlvbl90YWlsICsgMTsKKwkJc2hvd19rZXlzID0gMDsKKwl9IGVsc2UgeworCQljb25maWcua2V5ID0gTlVMTDsKKwkJc2hvd19rZXlzID0gMTsKKwl9CisKKwljb25maWdfd2l0aF9vcHRpb25zKHVybG1hdGNoX2NvbmZpZ19lbnRyeSwgJmNvbmZpZywKKwkJCSAgICAmZ2l2ZW5fY29uZmlnX3NvdXJjZSwgJmNvbmZpZ19vcHRpb25zKTsKKworCXJldCA9ICF2YWx1ZXMubnI7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZ2YWx1ZXMpIHsKKwkJc3RydWN0IHVybG1hdGNoX2N1cnJlbnRfY2FuZGlkYXRlX3ZhbHVlICptYXRjaGVkID0gaXRlbS0+dXRpbDsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQlmb3JtYXRfY29uZmlnKCZidWYsIGl0ZW0tPnN0cmluZywKKwkJCSAgICAgIG1hdGNoZWQtPnZhbHVlX2lzX251bGwgPyBOVUxMIDogbWF0Y2hlZC0+dmFsdWUuYnVmKTsKKwkJZndyaXRlKGJ1Zi5idWYsIDEsIGJ1Zi5sZW4sIHN0ZG91dCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZtYXRjaGVkLT52YWx1ZSk7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZjb25maWcudmFycywgMSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnZhbHVlcywgMSk7CisJZnJlZShjb25maWcudXJsLnVybCk7CisKKwlmcmVlKCh2b2lkICopY29uZmlnLnNlY3Rpb24pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpkZWZhdWx0X3VzZXJfY29uZmlnKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigmYnVmLAorCQkgICAgXygiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKwkJICAgICAgIlt1c2VyXVxuIgorCQkgICAgICAiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorCQkgICAgICAiIwluYW1lID0gJXNcbiIKKwkJICAgICAgIiMJZW1haWwgPSAlc1xuIiksCisJCSAgICBpZGVudF9kZWZhdWx0X25hbWUoKSwKKwkJICAgIGlkZW50X2RlZmF1bHRfZW1haWwoKSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK2ludCBjbWRfY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBub25naXQgPSAhc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnk7CisJY2hhciAqdmFsdWU7CisKKwlnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPSB4c3RyZHVwX29yX251bGwoZ2V0ZW52KENPTkZJR19FTlZJUk9OTUVOVCkpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2NvbmZpZ19vcHRpb25zLAorCQkJICAgICBidWlsdGluX2NvbmZpZ191c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAodXNlX2dsb2JhbF9jb25maWcgKyB1c2Vfc3lzdGVtX2NvbmZpZyArIHVzZV9sb2NhbF9jb25maWcgKworCSAgICB1c2Vfd29ya3RyZWVfY29uZmlnICsKKwkgICAgISFnaXZlbl9jb25maWdfc291cmNlLmZpbGUgKyAhIWdpdmVuX2NvbmZpZ19zb3VyY2UuYmxvYiA+IDEpIHsKKwkJZXJyb3IoXygib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lIikpOworCQl1c2FnZV9idWlsdGluX2NvbmZpZygpOworCX0KKworCWlmICh1c2VfbG9jYWxfY29uZmlnICYmIG5vbmdpdCkKKwkJZGllKF8oIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIpKTsKKworCWlmIChnaXZlbl9jb25maWdfc291cmNlLmJsb2IgJiYgbm9uZ2l0KQorCQlkaWUoXygiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiKSk7CisKKwlpZiAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlICYmCisJCQkhc3RyY21wKGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSwgIi0iKSkgeworCQlnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPSBOVUxMOworCQlnaXZlbl9jb25maWdfc291cmNlLnVzZV9zdGRpbiA9IDE7CisJCWdpdmVuX2NvbmZpZ19zb3VyY2Uuc2NvcGUgPSBDT05GSUdfU0NPUEVfQ09NTUFORDsKKwl9CisKKwlpZiAodXNlX2dsb2JhbF9jb25maWcpIHsKKwkJY2hhciAqdXNlcl9jb25maWcgPSBleHBhbmRfdXNlcl9wYXRoKCJ+Ly5naXRjb25maWciLCAwKTsKKwkJY2hhciAqeGRnX2NvbmZpZyA9IHhkZ19jb25maWdfaG9tZSgiY29uZmlnIik7CisKKwkJaWYgKCF1c2VyX2NvbmZpZykKKwkJCS8qCisJCQkgKiBJdCBpcyB1bmtub3duIGlmIEhPTUUvLmdpdGNvbmZpZyBleGlzdHMsIHNvCisJCQkgKiB3ZSBkbyBub3Qga25vdyBpZiB3ZSBzaG91bGQgd3JpdGUgdG8gWERHCisJCQkgKiBsb2NhdGlvbjsgZXJyb3Igb3V0IGV2ZW4gaWYgWERHX0NPTkZJR19IT01FCisJCQkgKiBpcyBzZXQgYW5kIHBvaW50cyBhdCBhIHNhbmUgbG9jYXRpb24uCisJCQkgKi8KKwkJCWRpZShfKCIkSE9NRSBub3Qgc2V0IikpOworCisJCWdpdmVuX2NvbmZpZ19zb3VyY2Uuc2NvcGUgPSBDT05GSUdfU0NPUEVfR0xPQkFMOworCisJCWlmIChhY2Nlc3Nfb3Jfd2Fybih1c2VyX2NvbmZpZywgUl9PSywgMCkgJiYKKwkJICAgIHhkZ19jb25maWcgJiYgIWFjY2Vzc19vcl93YXJuKHhkZ19jb25maWcsIFJfT0ssIDApKSB7CisJCQlnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPSB4ZGdfY29uZmlnOworCQkJZnJlZSh1c2VyX2NvbmZpZyk7CisJCX0gZWxzZSB7CisJCQlnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPSB1c2VyX2NvbmZpZzsKKwkJCWZyZWUoeGRnX2NvbmZpZyk7CisJCX0KKwl9CisJZWxzZSBpZiAodXNlX3N5c3RlbV9jb25maWcpIHsKKwkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlID0gZ2l0X2V0Y19naXRjb25maWcoKTsKKwkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5zY29wZSA9IENPTkZJR19TQ09QRV9TWVNURU07CisJfSBlbHNlIGlmICh1c2VfbG9jYWxfY29uZmlnKSB7CisJCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IGdpdF9wYXRoZHVwKCJjb25maWciKTsKKwkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5zY29wZSA9IENPTkZJR19TQ09QRV9MT0NBTDsKKwl9IGVsc2UgaWYgKHVzZV93b3JrdHJlZV9jb25maWcpIHsKKwkJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzID0gZ2V0X3dvcmt0cmVlcygwKTsKKwkJaWYgKHJlcG9zaXRvcnlfZm9ybWF0X3dvcmt0cmVlX2NvbmZpZykKKwkJCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IGdpdF9wYXRoZHVwKCJjb25maWcud29ya3RyZWUiKTsKKwkJZWxzZSBpZiAod29ya3RyZWVzWzBdICYmIHdvcmt0cmVlc1sxXSkKKwkJCWRpZShfKCItLXdvcmt0cmVlIGNhbm5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgIgorCQkJICAgICAgIndvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKwkJCSAgICAgICJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gIgorCQkJICAgICAgIlBsZWFzZSByZWFkIFwiQ09ORklHVVJBVElPTiBGSUxFXCJcbiIKKwkJCSAgICAgICJzZWN0aW9uIGluIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmb3IgZGV0YWlscyIpKTsKKwkJZWxzZQorCQkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlID0gZ2l0X3BhdGhkdXAoImNvbmZpZyIpOworCQlnaXZlbl9jb25maWdfc291cmNlLnNjb3BlID0gQ09ORklHX1NDT1BFX0xPQ0FMOworCQlmcmVlX3dvcmt0cmVlcyh3b3JrdHJlZXMpOworCX0gZWxzZSBpZiAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlKSB7CisJCWlmICghaXNfYWJzb2x1dGVfcGF0aChnaXZlbl9jb25maWdfc291cmNlLmZpbGUpICYmIHByZWZpeCkKKwkJCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9CisJCQkJcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlKTsKKwkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5zY29wZSA9IENPTkZJR19TQ09QRV9DT01NQU5EOworCX0gZWxzZSBpZiAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5ibG9iKSB7CisJCWdpdmVuX2NvbmZpZ19zb3VyY2Uuc2NvcGUgPSBDT05GSUdfU0NPUEVfQ09NTUFORDsKKwl9CisKKworCWlmIChyZXNwZWN0X2luY2x1ZGVzX29wdCA9PSAtMSkKKwkJY29uZmlnX29wdGlvbnMucmVzcGVjdF9pbmNsdWRlcyA9ICFnaXZlbl9jb25maWdfc291cmNlLmZpbGU7CisJZWxzZQorCQljb25maWdfb3B0aW9ucy5yZXNwZWN0X2luY2x1ZGVzID0gcmVzcGVjdF9pbmNsdWRlc19vcHQ7CisJaWYgKCFub25naXQpIHsKKwkJY29uZmlnX29wdGlvbnMuY29tbW9uZGlyID0gZ2V0X2dpdF9jb21tb25fZGlyKCk7CisJCWNvbmZpZ19vcHRpb25zLmdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpOworCX0KKworCWlmIChlbmRfbnVsKSB7CisJCXRlcm0gPSAnXDAnOworCQlkZWxpbSA9ICdcbic7CisJCWtleV9kZWxpbSA9ICdcbic7CisJfQorCisJaWYgKChhY3Rpb25zICYgKEFDVElPTl9HRVRfQ09MT1J8QUNUSU9OX0dFVF9DT0xPUkJPT0wpKSAmJiB0eXBlKSB7CisJCWVycm9yKF8oIi0tZ2V0LWNvbG9yIGFuZCB2YXJpYWJsZSB0eXBlIGFyZSBpbmNvaGVyZW50IikpOworCQl1c2FnZV9idWlsdGluX2NvbmZpZygpOworCX0KKworCWlmIChIQVNfTVVMVElfQklUUyhhY3Rpb25zKSkgeworCQllcnJvcihfKCJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIikpOworCQl1c2FnZV9idWlsdGluX2NvbmZpZygpOworCX0KKwlpZiAoYWN0aW9ucyA9PSAwKQorCQlzd2l0Y2ggKGFyZ2MpIHsKKwkJY2FzZSAxOiBhY3Rpb25zID0gQUNUSU9OX0dFVDsgYnJlYWs7CisJCWNhc2UgMjogYWN0aW9ucyA9IEFDVElPTl9TRVQ7IGJyZWFrOworCQljYXNlIDM6IGFjdGlvbnMgPSBBQ1RJT05fU0VUX0FMTDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZV9idWlsdGluX2NvbmZpZygpOworCQl9CisJaWYgKG9taXRfdmFsdWVzICYmCisJICAgICEoYWN0aW9ucyA9PSBBQ1RJT05fTElTVCB8fCBhY3Rpb25zID09IEFDVElPTl9HRVRfUkVHRVhQKSkgeworCQllcnJvcihfKCItLW5hbWUtb25seSBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1saXN0IG9yIC0tZ2V0LXJlZ2V4cCIpKTsKKwkJdXNhZ2VfYnVpbHRpbl9jb25maWcoKTsKKwl9CisKKwlpZiAoc2hvd19vcmlnaW4gJiYgIShhY3Rpb25zICYKKwkJKEFDVElPTl9HRVR8QUNUSU9OX0dFVF9BTEx8QUNUSU9OX0dFVF9SRUdFWFB8QUNUSU9OX0xJU1QpKSkgeworCQllcnJvcihfKCItLXNob3ctb3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCwgLS1nZXQtYWxsLCAiCisJCQkiLS1nZXQtcmVnZXhwLCBhbmQgLS1saXN0IikpOworCQl1c2FnZV9idWlsdGluX2NvbmZpZygpOworCX0KKworCWlmIChkZWZhdWx0X3ZhbHVlICYmICEoYWN0aW9ucyAmIEFDVElPTl9HRVQpKSB7CisJCWVycm9yKF8oIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiKSk7CisJCXVzYWdlX2J1aWx0aW5fY29uZmlnKCk7CisJfQorCisJaWYgKGFjdGlvbnMgJiBQQUdJTkdfQUNUSU9OUykKKwkJc2V0dXBfYXV0b19wYWdlcigiY29uZmlnIiwgMSk7CisKKwlpZiAoYWN0aW9ucyA9PSBBQ1RJT05fTElTVCkgeworCQljaGVja19hcmdjKGFyZ2MsIDAsIDApOworCQlpZiAoY29uZmlnX3dpdGhfb3B0aW9ucyhzaG93X2FsbF9jb25maWcsIE5VTEwsCisJCQkJCSZnaXZlbl9jb25maWdfc291cmNlLAorCQkJCQkmY29uZmlnX29wdGlvbnMpIDwgMCkgeworCQkJaWYgKGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSkKKwkJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIpLAorCQkJCQkgIGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSk7CisJCQllbHNlCisJCQkJZGllKF8oImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiKSk7CisJCX0KKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fRURJVCkgeworCQljaGFyICpjb25maWdfZmlsZTsKKworCQljaGVja19hcmdjKGFyZ2MsIDAsIDApOworCQlpZiAoIWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSAmJiBub25naXQpCisJCQlkaWUoXygibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIpKTsKKwkJaWYgKGdpdmVuX2NvbmZpZ19zb3VyY2UudXNlX3N0ZGluKQorCQkJZGllKF8oImVkaXRpbmcgc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIpKTsKKwkJaWYgKGdpdmVuX2NvbmZpZ19zb3VyY2UuYmxvYikKKwkJCWRpZShfKCJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiKSk7CisJCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwkJY29uZmlnX2ZpbGUgPSBnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPworCQkJCXhzdHJkdXAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlKSA6CisJCQkJZ2l0X3BhdGhkdXAoImNvbmZpZyIpOworCQlpZiAodXNlX2dsb2JhbF9jb25maWcpIHsKKwkJCWludCBmZCA9IG9wZW4oY29uZmlnX2ZpbGUsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSwgMDY2Nik7CisJCQlpZiAoZmQgPj0gMCkgeworCQkJCWNoYXIgKmNvbnRlbnQgPSBkZWZhdWx0X3VzZXJfY29uZmlnKCk7CisJCQkJd3JpdGVfc3RyX2luX2Z1bGwoZmQsIGNvbnRlbnQpOworCQkJCWZyZWUoY29udGVudCk7CisJCQkJY2xvc2UoZmQpOworCQkJfQorCQkJZWxzZSBpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIpLCBjb25maWdfZmlsZSk7CisJCX0KKwkJbGF1bmNoX2VkaXRvcihjb25maWdfZmlsZSwgTlVMTCwgTlVMTCk7CisJCWZyZWUoY29uZmlnX2ZpbGUpOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9TRVQpIHsKKwkJaW50IHJldDsKKwkJY2hlY2tfd3JpdGUoKTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAyKTsKKwkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJCVVOTEVBSyh2YWx1ZSk7CisJCXJldCA9IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSwgYXJndlswXSwgdmFsdWUpOworCQlpZiAocmV0ID09IENPTkZJR19OT1RISU5HX1NFVCkKKwkJCWVycm9yKF8oImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKwkJCSIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iKSwgYXJndlswXSk7CisJCXJldHVybiByZXQ7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1NFVF9BTEwpIHsKKwkJY2hlY2tfd3JpdGUoKTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAzKTsKKwkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJCVVOTEVBSyh2YWx1ZSk7CisJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJICAgICAgYXJndlswXSwgdmFsdWUsIGFyZ3ZbMl0sIDApOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9BREQpIHsKKwkJY2hlY2tfd3JpdGUoKTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAyKTsKKwkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJCVVOTEVBSyh2YWx1ZSk7CisJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJICAgICAgYXJndlswXSwgdmFsdWUsCisJCQkJCQkJICAgICAgQ09ORklHX1JFR0VYX05PTkUsIDApOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9SRVBMQUNFX0FMTCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDIsIDMpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJVU5MRUFLKHZhbHVlKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSwKKwkJCQkJCQkgICAgICBhcmd2WzBdLCB2YWx1ZSwgYXJndlsyXSwgMSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVCkgeworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlyZXR1cm4gZ2V0X3ZhbHVlKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9HRVRfQUxMKSB7CisJCWRvX2FsbCA9IDE7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9SRUdFWFApIHsKKwkJc2hvd19rZXlzID0gMTsKKwkJdXNlX2tleV9yZWdleHAgPSAxOworCQlkb19hbGwgPSAxOworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlyZXR1cm4gZ2V0X3ZhbHVlKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9HRVRfVVJMTUFUQ0gpIHsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAyKTsKKwkJcmV0dXJuIGdldF91cmxtYXRjaChhcmd2WzBdLCBhcmd2WzFdKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fVU5TRVQpIHsKKwkJY2hlY2tfd3JpdGUoKTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAyKTsKKwkJaWYgKGFyZ2MgPT0gMikKKwkJCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJCSAgICAgIGFyZ3ZbMF0sIE5VTEwsIGFyZ3ZbMV0sIDApOworCQllbHNlCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJCSAgICAgYXJndlswXSwgTlVMTCk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1VOU0VUX0FMTCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZV9nZW50bHkoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJCSAgICAgIGFyZ3ZbMF0sIE5VTEwsIGFyZ3ZbMV0sIDEpOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9SRU5BTUVfU0VDVElPTikgeworCQlpbnQgcmV0OworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDIsIDIpOworCQlyZXQgPSBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJCWFyZ3ZbMF0sIGFyZ3ZbMV0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWlmIChyZXQgPT0gMCkKKwkJCWRpZShfKCJubyBzdWNoIHNlY3Rpb246ICVzIiksIGFyZ3ZbMF0pOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9SRU1PVkVfU0VDVElPTikgeworCQlpbnQgcmV0OworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDEsIDEpOworCQlyZXQgPSBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJCWFyZ3ZbMF0sIE5VTEwpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWlmIChyZXQgPT0gMCkKKwkJCWRpZShfKCJubyBzdWNoIHNlY3Rpb246ICVzIiksIGFyZ3ZbMF0pOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9HRVRfQ09MT1IpIHsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAyKTsKKwkJZ2V0X2NvbG9yKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9HRVRfQ09MT1JCT09MKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCWlmIChhcmdjID09IDIpCisJCQljb2xvcl9zdGRvdXRfaXNfdHR5ID0gZ2l0X2NvbmZpZ19ib29sKCJjb21tYW5kIGxpbmUiLCBhcmd2WzFdKTsKKwkJcmV0dXJuIGdldF9jb2xvcmJvb2woYXJndlswXSwgYXJnYyA9PSAyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY291bnQtb2JqZWN0cy5jIGIvYnVpbHRpbi9jb3VudC1vYmplY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhZTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY291bnQtb2JqZWN0cy5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGNvdW50LW9iamVjdHMiLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2FyYmFnZTsKK3N0YXRpYyBvZmZfdCBzaXplX2dhcmJhZ2U7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb29zZSwgcGFja2VkLCBwYWNrZWRfbG9vc2U7CitzdGF0aWMgb2ZmX3QgbG9vc2Vfc2l6ZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJpdHNfdG9fbXNnKHVuc2lnbmVkIHNlZW5fYml0cykKK3sKKwlzd2l0Y2ggKHNlZW5fYml0cykgeworCWNhc2UgMDoKKwkJcmV0dXJuICJubyBjb3JyZXNwb25kaW5nIC5pZHggb3IgLnBhY2siOworCWNhc2UgUEFDS0RJUl9GSUxFX0dBUkJBR0U6CisJCXJldHVybiAiZ2FyYmFnZSBmb3VuZCI7CisJY2FzZSBQQUNLRElSX0ZJTEVfUEFDSzoKKwkJcmV0dXJuICJubyBjb3JyZXNwb25kaW5nIC5pZHgiOworCWNhc2UgUEFDS0RJUl9GSUxFX0lEWDoKKwkJcmV0dXJuICJubyBjb3JyZXNwb25kaW5nIC5wYWNrIjsKKwljYXNlIFBBQ0tESVJfRklMRV9QQUNLfFBBQ0tESVJfRklMRV9JRFg6CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWFsX3JlcG9ydF9nYXJiYWdlKHVuc2lnbmVkIHNlZW5fYml0cywgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBjaGFyICpkZXNjID0gYml0c190b19tc2coc2Vlbl9iaXRzKTsKKworCWlmICghZGVzYykKKwkJcmV0dXJuOworCisJaWYgKCFzdGF0KHBhdGgsICZzdCkpCisJCXNpemVfZ2FyYmFnZSArPSBzdC5zdF9zaXplOworCXdhcm5pbmcoIiVzOiAlcyIsIGRlc2MsIHBhdGgpOworCWdhcmJhZ2UrKzsKK30KKworc3RhdGljIHZvaWQgbG9vc2VfZ2FyYmFnZShjb25zdCBjaGFyICpwYXRoKQoreworCWlmICh2ZXJib3NlKQorCQlyZXBvcnRfZ2FyYmFnZShQQUNLRElSX0ZJTEVfR0FSQkFHRSwgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfbG9vc2UoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGxzdGF0KHBhdGgsICZzdCkgfHwgIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCWxvb3NlX2dhcmJhZ2UocGF0aCk7CisJZWxzZSB7CisJCWxvb3NlX3NpemUgKz0gb25fZGlza19ieXRlcyhzdCk7CisJCWxvb3NlKys7CisJCWlmICh2ZXJib3NlICYmIGhhc19vYmplY3RfcGFjayhvaWQpKQorCQkJcGFja2VkX2xvb3NlKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvdW50X2NydWZ0KGNvbnN0IGNoYXIgKmJhc2VuYW1lLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCWxvb3NlX2dhcmJhZ2UocGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpbnRfYWx0ZXJuYXRlKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIsIHZvaWQgKmRhdGEpCit7CisJcHJpbnRmKCJhbHRlcm5hdGU6ICIpOworCXF1b3RlX2Nfc3R5bGUob2RiLT5wYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCXB1dGNoYXIoJ1xuJyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgY291bnRfb2JqZWN0c191c2FnZVtdID0geworCU5fKCJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIiksCisJTlVMTAorfTsKKworaW50IGNtZF9jb3VudF9vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBodW1hbl9yZWFkYWJsZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9CT09MKCdIJywgImh1bWFuLXJlYWRhYmxlIiwgJmh1bWFuX3JlYWRhYmxlLAorCQkJIE5fKCJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBjb3VudF9vYmplY3RzX3VzYWdlLCAwKTsKKwkvKiB3ZSBkbyBub3QgdGFrZSBhcmd1bWVudHMgb3RoZXIgdGhhbiBmbGFncyBmb3Igbm93ICovCisJaWYgKGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjb3VudF9vYmplY3RzX3VzYWdlLCBvcHRzKTsKKwlpZiAodmVyYm9zZSkgeworCQlyZXBvcnRfZ2FyYmFnZSA9IHJlYWxfcmVwb3J0X2dhcmJhZ2U7CisJCXJlcG9ydF9saW5rZWRfY2hlY2tvdXRfZ2FyYmFnZSgpOworCX0KKworCWZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGdldF9vYmplY3RfZGlyZWN0b3J5KCksCisJCQkJICAgICAgY291bnRfbG9vc2UsIGNvdW50X2NydWZ0LCBOVUxMLCBOVUxMKTsKKworCWlmICh2ZXJib3NlKSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCQl1bnNpZ25lZCBsb25nIG51bV9wYWNrID0gMDsKKwkJb2ZmX3Qgc2l6ZV9wYWNrID0gMDsKKwkJc3RydWN0IHN0cmJ1ZiBsb29zZV9idWYgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBwYWNrX2J1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIGdhcmJhZ2VfYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJZm9yIChwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlpZiAoIXAtPnBhY2tfbG9jYWwpCisJCQkJY29udGludWU7CisJCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQkJCWNvbnRpbnVlOworCQkJcGFja2VkICs9IHAtPm51bV9vYmplY3RzOworCQkJc2l6ZV9wYWNrICs9IHAtPnBhY2tfc2l6ZSArIHAtPmluZGV4X3NpemU7CisJCQludW1fcGFjaysrOworCQl9CisKKwkJaWYgKGh1bWFuX3JlYWRhYmxlKSB7CisJCQlzdHJidWZfaHVtYW5pc2VfYnl0ZXMoJmxvb3NlX2J1ZiwgbG9vc2Vfc2l6ZSk7CisJCQlzdHJidWZfaHVtYW5pc2VfYnl0ZXMoJnBhY2tfYnVmLCBzaXplX3BhY2spOworCQkJc3RyYnVmX2h1bWFuaXNlX2J5dGVzKCZnYXJiYWdlX2J1Ziwgc2l6ZV9nYXJiYWdlKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRmKCZsb29zZV9idWYsICIlbHUiLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykobG9vc2Vfc2l6ZSAvIDEwMjQpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZwYWNrX2J1ZiwgIiVsdSIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKShzaXplX3BhY2sgLyAxMDI0KSk7CisJCQlzdHJidWZfYWRkZigmZ2FyYmFnZV9idWYsICIlbHUiLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykoc2l6ZV9nYXJiYWdlIC8gMTAyNCkpOworCQl9CisKKwkJcHJpbnRmKCJjb3VudDogJWx1XG4iLCBsb29zZSk7CisJCXByaW50Zigic2l6ZTogJXNcbiIsIGxvb3NlX2J1Zi5idWYpOworCQlwcmludGYoImluLXBhY2s6ICVsdVxuIiwgcGFja2VkKTsKKwkJcHJpbnRmKCJwYWNrczogJWx1XG4iLCBudW1fcGFjayk7CisJCXByaW50Zigic2l6ZS1wYWNrOiAlc1xuIiwgcGFja19idWYuYnVmKTsKKwkJcHJpbnRmKCJwcnVuZS1wYWNrYWJsZTogJWx1XG4iLCBwYWNrZWRfbG9vc2UpOworCQlwcmludGYoImdhcmJhZ2U6ICVsdVxuIiwgZ2FyYmFnZSk7CisJCXByaW50Zigic2l6ZS1nYXJiYWdlOiAlc1xuIiwgZ2FyYmFnZV9idWYuYnVmKTsKKwkJZm9yZWFjaF9hbHRfb2RiKHByaW50X2FsdGVybmF0ZSwgTlVMTCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZsb29zZV9idWYpOworCQlzdHJidWZfcmVsZWFzZSgmcGFja19idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZ2FyYmFnZV9idWYpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWlmIChodW1hbl9yZWFkYWJsZSkKKwkJCXN0cmJ1Zl9odW1hbmlzZV9ieXRlcygmYnVmLCBsb29zZV9zaXplKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVsdSBraWxvYnl0ZXMiLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykobG9vc2Vfc2l6ZSAvIDEwMjQpKTsKKwkJcHJpbnRmKCIlbHUgb2JqZWN0cywgJXNcbiIsIGxvb3NlLCBidWYuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jcmVkZW50aWFsLmMgYi9idWlsdGluL2NyZWRlbnRpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzlhY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jcmVkZW50aWFsLmMKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHVzYWdlX21zZ1tdID0KKwkiZ2l0IGNyZWRlbnRpYWwgW2ZpbGx8YXBwcm92ZXxyZWplY3RdIjsKKworaW50IGNtZF9jcmVkZW50aWFsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKm9wOworCXN0cnVjdCBjcmVkZW50aWFsIGMgPSBDUkVERU5USUFMX0lOSVQ7CisKKwlpZiAoYXJnYyAhPSAyIHx8ICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKHVzYWdlX21zZyk7CisJb3AgPSBhcmd2WzFdOworCisJaWYgKGNyZWRlbnRpYWxfcmVhZCgmYywgc3RkaW4pIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBjcmVkZW50aWFsIGZyb20gc3RkaW4iKTsKKworCWlmICghc3RyY21wKG9wLCAiZmlsbCIpKSB7CisJCWNyZWRlbnRpYWxfZmlsbCgmYyk7CisJCWNyZWRlbnRpYWxfd3JpdGUoJmMsIHN0ZG91dCk7CisJfSBlbHNlIGlmICghc3RyY21wKG9wLCAiYXBwcm92ZSIpKSB7CisJCWNyZWRlbnRpYWxfYXBwcm92ZSgmYyk7CisJfSBlbHNlIGlmICghc3RyY21wKG9wLCAicmVqZWN0IikpIHsKKwkJY3JlZGVudGlhbF9yZWplY3QoJmMpOworCX0gZWxzZSB7CisJCXVzYWdlKHVzYWdlX21zZyk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9kZXNjcmliZS5jIGIvYnVpbHRpbi9kZXNjcmliZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMGY0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Rlc2NyaWJlLmMKQEAgLTAsMCArMSw2NzggQEAKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKworI2RlZmluZSBNQVhfVEFHUwkoRkxBR19CSVRTIC0gMSkKKworZGVmaW5lX2NvbW1pdF9zbGFiKGNvbW1pdF9uYW1lcywgc3RydWN0IGNvbW1pdF9uYW1lICopOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRlc2NyaWJlX3VzYWdlW10gPSB7CisJTl8oImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIpLAorCU5fKCJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgZGVidWc7CS8qIERpc3BsYXkgbG90cyBvZiB2ZXJib3NlIGluZm8gKi8KK3N0YXRpYyBpbnQgYWxsOwkvKiBBbnkgdmFsaWQgcmVmIGNhbiBiZSB1c2VkICovCitzdGF0aWMgaW50IHRhZ3M7CS8qIEFsbG93IGxpZ2h0d2VpZ2h0IHRhZ3MgKi8KK3N0YXRpYyBpbnQgbG9uZ2Zvcm1hdDsKK3N0YXRpYyBpbnQgZmlyc3RfcGFyZW50Oworc3RhdGljIGludCBhYmJyZXYgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KK3N0YXRpYyBpbnQgbWF4X2NhbmRpZGF0ZXMgPSAxMDsKK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCBuYW1lczsKK3N0YXRpYyBpbnQgaGF2ZV91dGlsOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBwYXR0ZXJucyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGV4Y2x1ZGVfcGF0dGVybnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIGludCBhbHdheXM7CitzdGF0aWMgY29uc3QgY2hhciAqc3VmZml4LCAqZGlydHksICpicm9rZW47CitzdGF0aWMgc3RydWN0IGNvbW1pdF9uYW1lcyBjb21taXRfbmFtZXM7CisKKy8qIGRpZmYtaW5kZXggY29tbWFuZCBhcmd1bWVudHMgdG8gY2hlY2sgaWYgd29ya2luZyB0cmVlIGlzIGRpcnR5LiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfaW5kZXhfYXJnc1tdID0geworCSJkaWZmLWluZGV4IiwgIi0tcXVpZXQiLCAiSEVBRCIsICItLSIsIE5VTEwKK307CisKK3N0cnVjdCBjb21taXRfbmFtZSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnk7CisJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisJc3RydWN0IHRhZyAqdGFnOworCXVuc2lnbmVkIHByaW86MjsgLyogYW5ub3RhdGVkIHRhZyA9IDIsIHRhZyA9IDEsIGhlYWQgPSAwICovCisJdW5zaWduZWQgbmFtZV9jaGVja2VkOjE7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciAqcGF0aDsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcmlvX25hbWVzW10gPSB7CisJTl8oImhlYWQiKSwgTl8oImxpZ2h0d2VpZ2h0IiksIE5fKCJhbm5vdGF0ZWQiKSwKK307CisKK3N0YXRpYyBpbnQgY29tbWl0X25hbWVfbmVxKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgIGNvbnN0IHZvaWQgKnBlZWxlZCkKK3sKKwljb25zdCBzdHJ1Y3QgY29tbWl0X25hbWUgKmNuMSwgKmNuMjsKKworCWNuMSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgY29tbWl0X25hbWUsIGVudHJ5KTsKKwljbjIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgY29tbWl0X25hbWUsIGVudHJ5KTsKKworCXJldHVybiAhb2lkZXEoJmNuMS0+cGVlbGVkLCBwZWVsZWQgPyBwZWVsZWQgOiAmY24yLT5wZWVsZWQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjb21taXRfbmFtZSAqZmluZF9jb21taXRfbmFtZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCit7CisJcmV0dXJuIGhhc2htYXBfZ2V0X2VudHJ5X2Zyb21faGFzaCgmbmFtZXMsIG9pZGhhc2gocGVlbGVkKSwgcGVlbGVkLAorCQkJCQkJc3RydWN0IGNvbW1pdF9uYW1lLCBlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgcmVwbGFjZV9uYW1lKHN0cnVjdCBjb21taXRfbmFtZSAqZSwKKwkJCSAgICAgICBpbnQgcHJpbywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgc3RydWN0IHRhZyAqKnRhZykKK3sKKwlpZiAoIWUgfHwgZS0+cHJpbyA8IHByaW8pCisJCXJldHVybiAxOworCisJaWYgKGUtPnByaW8gPT0gMiAmJiBwcmlvID09IDIpIHsKKwkJLyogTXVsdGlwbGUgYW5ub3RhdGVkIHRhZ3MgcG9pbnQgdG8gdGhlIHNhbWUgY29tbWl0LgorCQkgKiBTZWxlY3Qgb25lIHRvIGtlZXAgYmFzZWQgdXBvbiB0aGVpciB0YWdnZXIgZGF0ZS4KKwkJICovCisJCXN0cnVjdCB0YWcgKnQ7CisKKwkJaWYgKCFlLT50YWcpIHsKKwkJCXQgPSBsb29rdXBfdGFnKHRoZV9yZXBvc2l0b3J5LCAmZS0+b2lkKTsKKwkJCWlmICghdCB8fCBwYXJzZV90YWcodCkpCisJCQkJcmV0dXJuIDE7CisJCQllLT50YWcgPSB0OworCQl9CisKKwkJdCA9IGxvb2t1cF90YWcodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJCWlmICghdCB8fCBwYXJzZV90YWcodCkpCisJCQlyZXR1cm4gMDsKKwkJKnRhZyA9IHQ7CisKKwkJaWYgKGUtPnRhZy0+ZGF0ZSA8IHQtPmRhdGUpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3RvX2tub3duX25hbWVzKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkLAorCQkJICAgICAgIGludCBwcmlvLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKmUgPSBmaW5kX2NvbW1pdF9uYW1lKHBlZWxlZCk7CisJc3RydWN0IHRhZyAqdGFnID0gTlVMTDsKKwlpZiAocmVwbGFjZV9uYW1lKGUsIHByaW8sIG9pZCwgJnRhZykpIHsKKwkJaWYgKCFlKSB7CisJCQllID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9uYW1lKSk7CisJCQlvaWRjcHkoJmUtPnBlZWxlZCwgcGVlbGVkKTsKKwkJCWhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50cnksIG9pZGhhc2gocGVlbGVkKSk7CisJCQloYXNobWFwX2FkZCgmbmFtZXMsICZlLT5lbnRyeSk7CisJCQllLT5wYXRoID0gTlVMTDsKKwkJfQorCQllLT50YWcgPSB0YWc7CisJCWUtPnByaW8gPSBwcmlvOworCQllLT5uYW1lX2NoZWNrZWQgPSAwOworCQlvaWRjcHkoJmUtPm9pZCwgb2lkKTsKKwkJZnJlZShlLT5wYXRoKTsKKwkJZS0+cGF0aCA9IHhzdHJkdXAocGF0aCk7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9uYW1lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IGlzX3RhZyA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisJaW50IGlzX2Fubm90YXRlZCwgcHJpbzsKKwljb25zdCBjaGFyICpwYXRoX3RvX21hdGNoID0gTlVMTDsKKworCWlmIChza2lwX3ByZWZpeChwYXRoLCAicmVmcy90YWdzLyIsICZwYXRoX3RvX21hdGNoKSkgeworCQlpc190YWcgPSAxOworCX0gZWxzZSBpZiAoYWxsKSB7CisJCWlmICgoZXhjbHVkZV9wYXR0ZXJucy5uciB8fCBwYXR0ZXJucy5ucikgJiYKKwkJICAgICFza2lwX3ByZWZpeChwYXRoLCAicmVmcy9oZWFkcy8iLCAmcGF0aF90b19tYXRjaCkgJiYKKwkJICAgICFza2lwX3ByZWZpeChwYXRoLCAicmVmcy9yZW1vdGVzLyIsICZwYXRoX3RvX21hdGNoKSkgeworCQkJLyogT25seSBhY2NlcHQgcmVmZXJlbmNlIG9mIGtub3duIHR5cGUgaWYgdGhlcmUgYXJlIG1hdGNoL2V4Y2x1ZGUgcGF0dGVybnMgKi8KKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJLyogUmVqZWN0IGFueXRoaW5nIG91dHNpZGUgcmVmcy90YWdzLyB1bmxlc3MgLS1hbGwgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBnaXZlbiBleGNsdWRlIHBhdHRlcm5zLCBmaXJzdCBleGNsdWRlIGFueSB0YWcgd2hpY2ggbWF0Y2gKKwkgKiBhbnkgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybi4KKwkgKi8KKwlpZiAoZXhjbHVkZV9wYXR0ZXJucy5ucikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZleGNsdWRlX3BhdHRlcm5zKSB7CisJCQlpZiAoIXdpbGRtYXRjaChpdGVtLT5zdHJpbmcsIHBhdGhfdG9fbWF0Y2gsIDApKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBnaXZlbiBwYXR0ZXJucywgYWNjZXB0IG9ubHkgdGFncyB3aGljaCBtYXRjaCBhdCBsZWFzdCBvbmUKKwkgKiBwYXR0ZXJuLgorCSAqLworCWlmIChwYXR0ZXJucy5ucikgeworCQlpbnQgZm91bmQgPSAwOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZwYXR0ZXJucykgeworCQkJaWYgKCF3aWxkbWF0Y2goaXRlbS0+c3RyaW5nLCBwYXRoX3RvX21hdGNoLCAwKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJcyBpdCBhbm5vdGF0ZWQ/ICovCisJaWYgKCFwZWVsX3JlZihwYXRoLCAmcGVlbGVkKSkgeworCQlpc19hbm5vdGF0ZWQgPSAhb2lkZXEob2lkLCAmcGVlbGVkKTsKKwl9IGVsc2UgeworCQlvaWRjcHkoJnBlZWxlZCwgb2lkKTsKKwkJaXNfYW5ub3RhdGVkID0gMDsKKwl9CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIHdlIG9ubHkgdXNlIGFubm90YXRlZCB0YWdzLCBidXQgd2l0aCAtLXRhZ3MKKwkgKiB3ZSBmYWxsIGJhY2sgdG8gbGlnaHR3ZWlnaHQgb25lcyAoZXZlbiB3aXRob3V0IC0tdGFncywKKwkgKiB3ZSBzdGlsbCByZW1lbWJlciBsaWdodHdlaWdodCBvbmVzLCBvbmx5IHRvIGdpdmUgaGludHMKKwkgKiBpbiBhbiBlcnJvciBtZXNzYWdlKS4gIC0tYWxsIGFsbG93cyBhbnkgcmVmcyB0byBiZSB1c2VkLgorCSAqLworCWlmIChpc19hbm5vdGF0ZWQpCisJCXByaW8gPSAyOworCWVsc2UgaWYgKGlzX3RhZykKKwkJcHJpbyA9IDE7CisJZWxzZQorCQlwcmlvID0gMDsKKworCWFkZF90b19rbm93bl9uYW1lcyhhbGwgPyBwYXRoICsgNSA6IHBhdGggKyAxMCwgJnBlZWxlZCwgcHJpbywgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBvc3NpYmxlX3RhZyB7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuYW1lOworCWludCBkZXB0aDsKKwlpbnQgZm91bmRfb3JkZXI7CisJdW5zaWduZWQgZmxhZ193aXRoaW47Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfcHQoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBwb3NzaWJsZV90YWcgKmEgPSAoc3RydWN0IHBvc3NpYmxlX3RhZyAqKWFfOworCXN0cnVjdCBwb3NzaWJsZV90YWcgKmIgPSAoc3RydWN0IHBvc3NpYmxlX3RhZyAqKWJfOworCWlmIChhLT5kZXB0aCAhPSBiLT5kZXB0aCkKKwkJcmV0dXJuIGEtPmRlcHRoIC0gYi0+ZGVwdGg7CisJaWYgKGEtPmZvdW5kX29yZGVyICE9IGItPmZvdW5kX29yZGVyKQorCQlyZXR1cm4gYS0+Zm91bmRfb3JkZXIgLSBiLT5mb3VuZF9vcmRlcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluaXNoX2RlcHRoX2NvbXB1dGF0aW9uKAorCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QsCisJc3RydWN0IHBvc3NpYmxlX3RhZyAqYmVzdCkKK3sKKwl1bnNpZ25lZCBsb25nIHNlZW5fY29tbWl0cyA9IDA7CisJd2hpbGUgKCpsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBwb3BfY29tbWl0KGxpc3QpOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBjLT5wYXJlbnRzOworCQlzZWVuX2NvbW1pdHMrKzsKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIGJlc3QtPmZsYWdfd2l0aGluKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmEgPSAqbGlzdDsKKwkJCXdoaWxlIChhKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqaSA9IGEtPml0ZW07CisJCQkJaWYgKCEoaS0+b2JqZWN0LmZsYWdzICYgYmVzdC0+ZmxhZ193aXRoaW4pKQorCQkJCQlicmVhazsKKwkJCQlhID0gYS0+bmV4dDsKKwkJCX0KKwkJCWlmICghYSkKKwkJCQlicmVhazsKKwkJfSBlbHNlCisJCQliZXN0LT5kZXB0aCsrOworCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlwYXJzZV9jb21taXQocCk7CisJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkKKwkJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShwLCBsaXN0KTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBjLT5vYmplY3QuZmxhZ3M7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJfQorCX0KKwlyZXR1cm4gc2Vlbl9jb21taXRzOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbmFtZShzdHJ1Y3QgY29tbWl0X25hbWUgKm4sIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlpZiAobi0+cHJpbyA9PSAyICYmICFuLT50YWcpIHsKKwkJbi0+dGFnID0gbG9va3VwX3RhZyh0aGVfcmVwb3NpdG9yeSwgJm4tPm9pZCk7CisJCWlmICghbi0+dGFnIHx8IHBhcnNlX3RhZyhuLT50YWcpKQorCQkJZGllKF8oImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIpLCBuLT5wYXRoKTsKKwl9CisJaWYgKG4tPnRhZyAmJiAhbi0+bmFtZV9jaGVja2VkKSB7CisJCWlmICghbi0+dGFnLT50YWcpCisJCQlkaWUoXygiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIpLCBuLT5wYXRoKTsKKwkJaWYgKHN0cmNtcChuLT50YWctPnRhZywgYWxsID8gbi0+cGF0aCArIDUgOiBuLT5wYXRoKSkKKwkJCXdhcm5pbmcoXygidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIpLCBuLT50YWctPnRhZywgbi0+cGF0aCk7CisJCW4tPm5hbWVfY2hlY2tlZCA9IDE7CisJfQorCisJaWYgKG4tPnRhZykgeworCQlpZiAoYWxsKQorCQkJc3RyYnVmX2FkZHN0cihkc3QsICJ0YWdzLyIpOworCQlzdHJidWZfYWRkc3RyKGRzdCwgbi0+dGFnLT50YWcpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoZHN0LCBuLT5wYXRoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdWZmaXgoaW50IGRlcHRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlzdHJidWZfYWRkZihkc3QsICItJWQtZyVzIiwgZGVwdGgsIGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIGFiYnJldikpOworfQorCitzdGF0aWMgdm9pZCBkZXNjcmliZV9jb21taXQoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpkc3QpCit7CisJc3RydWN0IGNvbW1pdCAqY21pdCwgKmdhdmVfdXBfb24gPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CisJc3RydWN0IHBvc3NpYmxlX3RhZyBhbGxfbWF0Y2hlc1tNQVhfVEFHU107CisJdW5zaWduZWQgaW50IG1hdGNoX2NudCA9IDAsIGFubm90YXRlZF9jbnQgPSAwLCBjdXJfbWF0Y2g7CisJdW5zaWduZWQgbG9uZyBzZWVuX2NvbW1pdHMgPSAwOworCXVuc2lnbmVkIGludCB1bmFubm90YXRlZF9jbnQgPSAwOworCisJY21pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCisJbiA9IGZpbmRfY29tbWl0X25hbWUoJmNtaXQtPm9iamVjdC5vaWQpOworCWlmIChuICYmICh0YWdzIHx8IGFsbCB8fCBuLT5wcmlvID09IDIpKSB7CisJCS8qCisJCSAqIEV4YWN0IG1hdGNoIHRvIGFuIGV4aXN0aW5nIHJlZi4KKwkJICovCisJCWFwcGVuZF9uYW1lKG4sIGRzdCk7CisJCWlmIChsb25nZm9ybWF0KQorCQkJYXBwZW5kX3N1ZmZpeCgwLCBuLT50YWcgPyBnZXRfdGFnZ2VkX29pZChuLT50YWcpIDogb2lkLCBkc3QpOworCQlpZiAoc3VmZml4KQorCQkJc3RyYnVmX2FkZHN0cihkc3QsIHN1ZmZpeCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIW1heF9jYW5kaWRhdGVzKQorCQlkaWUoXygibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIiksIG9pZF90b19oZXgoJmNtaXQtPm9iamVjdC5vaWQpKTsKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCBfKCJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIikpOworCisJaWYgKCFoYXZlX3V0aWwpIHsKKwkJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCQlzdHJ1Y3QgY29tbWl0ICpjOworCQlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CisKKwkJaW5pdF9jb21taXRfbmFtZXMoJmNvbW1pdF9uYW1lcyk7CisJCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJm5hbWVzLCAmaXRlciwgbiwKKwkJCQkJZW50cnkgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJCWMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgJm4tPnBlZWxlZCwgMSk7CisJCQlpZiAoYykKKwkJCQkqY29tbWl0X25hbWVzX2F0KCZjb21taXRfbmFtZXMsIGMpID0gbjsKKwkJfQorCQloYXZlX3V0aWwgPSAxOworCX0KKworCWxpc3QgPSBOVUxMOworCWNtaXQtPm9iamVjdC5mbGFncyA9IFNFRU47CisJY29tbWl0X2xpc3RfaW5zZXJ0KGNtaXQsICZsaXN0KTsKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcG9wX2NvbW1pdCgmbGlzdCk7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCXN0cnVjdCBjb21taXRfbmFtZSAqKnNsb3Q7CisKKwkJc2Vlbl9jb21taXRzKys7CisJCXNsb3QgPSBjb21taXRfbmFtZXNfcGVlaygmY29tbWl0X25hbWVzLCBjKTsKKwkJbiA9IHNsb3QgPyAqc2xvdCA6IE5VTEw7CisJCWlmIChuKSB7CisJCQlpZiAoIXRhZ3MgJiYgIWFsbCAmJiBuLT5wcmlvIDwgMikgeworCQkJCXVuYW5ub3RhdGVkX2NudCsrOworCQkJfSBlbHNlIGlmIChtYXRjaF9jbnQgPCBtYXhfY2FuZGlkYXRlcykgeworCQkJCXN0cnVjdCBwb3NzaWJsZV90YWcgKnQgPSAmYWxsX21hdGNoZXNbbWF0Y2hfY250KytdOworCQkJCXQtPm5hbWUgPSBuOworCQkJCXQtPmRlcHRoID0gc2Vlbl9jb21taXRzIC0gMTsKKwkJCQl0LT5mbGFnX3dpdGhpbiA9IDF1IDw8IG1hdGNoX2NudDsKKwkJCQl0LT5mb3VuZF9vcmRlciA9IG1hdGNoX2NudDsKKwkJCQljLT5vYmplY3QuZmxhZ3MgfD0gdC0+ZmxhZ193aXRoaW47CisJCQkJaWYgKG4tPnByaW8gPT0gMikKKwkJCQkJYW5ub3RhdGVkX2NudCsrOworCQkJfQorCQkJZWxzZSB7CisJCQkJZ2F2ZV91cF9vbiA9IGM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZm9yIChjdXJfbWF0Y2ggPSAwOyBjdXJfbWF0Y2ggPCBtYXRjaF9jbnQ7IGN1cl9tYXRjaCsrKSB7CisJCQlzdHJ1Y3QgcG9zc2libGVfdGFnICp0ID0gJmFsbF9tYXRjaGVzW2N1cl9tYXRjaF07CisJCQlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiB0LT5mbGFnX3dpdGhpbikpCisJCQkJdC0+ZGVwdGgrKzsKKwkJfQorCQkvKiBTdG9wIGlmIGxhc3QgcmVtYWluaW5nIHBhdGggYWxyZWFkeSBjb3ZlcmVkIGJ5IGJlc3QgY2FuZGlkYXRlKHMpICovCisJCWlmIChhbm5vdGF0ZWRfY250ICYmICFsaXN0KSB7CisJCQlpbnQgYmVzdF9kZXB0aCA9IElOVF9NQVg7CisJCQl1bnNpZ25lZCBiZXN0X3dpdGhpbiA9IDA7CisJCQlmb3IgKGN1cl9tYXRjaCA9IDA7IGN1cl9tYXRjaCA8IG1hdGNoX2NudDsgY3VyX21hdGNoKyspIHsKKwkJCQlzdHJ1Y3QgcG9zc2libGVfdGFnICp0ID0gJmFsbF9tYXRjaGVzW2N1cl9tYXRjaF07CisJCQkJaWYgKHQtPmRlcHRoIDwgYmVzdF9kZXB0aCkgeworCQkJCQliZXN0X2RlcHRoID0gdC0+ZGVwdGg7CisJCQkJCWJlc3Rfd2l0aGluID0gdC0+ZmxhZ193aXRoaW47CisJCQkJfSBlbHNlIGlmICh0LT5kZXB0aCA9PSBiZXN0X2RlcHRoKSB7CisJCQkJCWJlc3Rfd2l0aGluIHw9IHQtPmZsYWdfd2l0aGluOworCQkJCX0KKwkJCX0KKwkJCWlmICgoYy0+b2JqZWN0LmZsYWdzICYgYmVzdF93aXRoaW4pID09IGJlc3Rfd2l0aGluKSB7CisJCQkJaWYgKGRlYnVnKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iKSwKKwkJCQkJCW9pZF90b19oZXgoJmMtPm9iamVjdC5vaWQpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlwYXJzZV9jb21taXQocCk7CisJCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkKKwkJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShwLCAmbGlzdCk7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gYy0+b2JqZWN0LmZsYWdzOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisKKwkJCWlmIChmaXJzdF9wYXJlbnQpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIW1hdGNoX2NudCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpjbWl0X29pZCA9ICZjbWl0LT5vYmplY3Qub2lkOworCQlpZiAoYWx3YXlzKSB7CisJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoZHN0LCBjbWl0X29pZCwgYWJicmV2KTsKKwkJCWlmIChzdWZmaXgpCisJCQkJc3RyYnVmX2FkZHN0cihkc3QsIHN1ZmZpeCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHVuYW5ub3RhdGVkX2NudCkKKwkJCWRpZShfKCJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKwkJCSAgICAiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIpLAorCQkJICAgIG9pZF90b19oZXgoY21pdF9vaWQpKTsKKwkJZWxzZQorCQkJZGllKF8oIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisJCQkgICAgIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iKSwKKwkJCSAgICBvaWRfdG9faGV4KGNtaXRfb2lkKSk7CisJfQorCisJUVNPUlQoYWxsX21hdGNoZXMsIG1hdGNoX2NudCwgY29tcGFyZV9wdCk7CisKKwlpZiAoZ2F2ZV91cF9vbikgeworCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShnYXZlX3VwX29uLCAmbGlzdCk7CisJCXNlZW5fY29tbWl0cy0tOworCX0KKwlzZWVuX2NvbW1pdHMgKz0gZmluaXNoX2RlcHRoX2NvbXB1dGF0aW9uKCZsaXN0LCAmYWxsX21hdGNoZXNbMF0pOworCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CisKKwlpZiAoZGVidWcpIHsKKwkJc3RhdGljIGludCBsYWJlbF93aWR0aCA9IC0xOworCQlpZiAobGFiZWxfd2lkdGggPCAwKSB7CisJCQlpbnQgaSwgdzsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaW9fbmFtZXMpOyBpKyspIHsKKwkJCQl3ID0gc3RybGVuKF8ocHJpb19uYW1lc1tpXSkpOworCQkJCWlmIChsYWJlbF93aWR0aCA8IHcpCisJCQkJCWxhYmVsX3dpZHRoID0gdzsKKwkJCX0KKwkJfQorCQlmb3IgKGN1cl9tYXRjaCA9IDA7IGN1cl9tYXRjaCA8IG1hdGNoX2NudDsgY3VyX21hdGNoKyspIHsKKwkJCXN0cnVjdCBwb3NzaWJsZV90YWcgKnQgPSAmYWxsX21hdGNoZXNbY3VyX21hdGNoXTsKKwkJCWZwcmludGYoc3RkZXJyLCAiICUtKnMgJThkICVzXG4iLAorCQkJCWxhYmVsX3dpZHRoLCBfKHByaW9fbmFtZXNbdC0+bmFtZS0+cHJpb10pLAorCQkJCXQtPmRlcHRoLCB0LT5uYW1lLT5wYXRoKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgXygidHJhdmVyc2VkICVsdSBjb21taXRzXG4iKSwgc2Vlbl9jb21taXRzKTsKKwkJaWYgKGdhdmVfdXBfb24pIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKwkJCQkiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIpLAorCQkJCW1heF9jYW5kaWRhdGVzLCBtYXhfY2FuZGlkYXRlcywKKwkJCQlvaWRfdG9faGV4KCZnYXZlX3VwX29uLT5vYmplY3Qub2lkKSk7CisJCX0KKwl9CisKKwlhcHBlbmRfbmFtZShhbGxfbWF0Y2hlc1swXS5uYW1lLCBkc3QpOworCWlmIChhYmJyZXYpCisJCWFwcGVuZF9zdWZmaXgoYWxsX21hdGNoZXNbMF0uZGVwdGgsICZjbWl0LT5vYmplY3Qub2lkLCBkc3QpOworCWlmIChzdWZmaXgpCisJCXN0cmJ1Zl9hZGRzdHIoZHN0LCBzdWZmaXgpOworfQorCitzdHJ1Y3QgcHJvY2Vzc19jb21taXRfZGF0YSB7CisJc3RydWN0IG9iamVjdF9pZCBjdXJyZW50X2NvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGxvb2tpbmdfZm9yOworCXN0cnVjdCBzdHJidWYgKmRzdDsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7Cit9OworCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHByb2Nlc3NfY29tbWl0X2RhdGEgKnBjZCA9IGRhdGE7CisJcGNkLT5jdXJyZW50X2NvbW1pdCA9IGNvbW1pdC0+b2JqZWN0Lm9pZDsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2NvbW1pdF9kYXRhICpwY2QgPSBkYXRhOworCisJaWYgKG9pZGVxKCZwY2QtPmxvb2tpbmdfZm9yLCAmb2JqLT5vaWQpICYmICFwY2QtPmRzdC0+bGVuKSB7CisJCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKKwkJZGVzY3JpYmVfY29tbWl0KCZwY2QtPmN1cnJlbnRfY29tbWl0LCBwY2QtPmRzdCk7CisJCXN0cmJ1Zl9hZGRmKHBjZC0+ZHN0LCAiOiVzIiwgcGF0aCk7CisJCWZyZWVfY29tbWl0X2xpc3QocGNkLT5yZXZzLT5jb21taXRzKTsKKwkJcGNkLT5yZXZzLT5jb21taXRzID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlc2NyaWJlX2Jsb2Ioc3RydWN0IG9iamVjdF9pZCBvaWQsIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBwcm9jZXNzX2NvbW1pdF9kYXRhIHBjZCA9IHsgbnVsbF9vaWQsIG9pZCwgZHN0LCAmcmV2c307CisKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAiaW50ZXJuYWw6IFRoZSBmaXJzdCBhcmcgaXMgbm90IHBhcnNlZCIsCisJCSItLW9iamVjdHMiLCAiLS1pbi1jb21taXQtb3JkZXIiLCAiLS1yZXZlcnNlIiwgIkhFQUQiLAorCQlOVUxMKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXZzLCBOVUxMKTsKKwlpZiAoc2V0dXBfcmV2aXNpb25zKGFyZ3MuYXJnYywgYXJncy5hcmd2LCAmcmV2cywgTlVMTCkgPiAxKQorCQlCVUcoInNldHVwX3JldmlzaW9ucyBjb3VsZCBub3QgaGFuZGxlIGFsbCBhcmdzPyIpOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKworCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBwcm9jZXNzX2NvbW1pdCwgcHJvY2Vzc19vYmplY3QsICZwY2QpOworCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKK30KKworc3RhdGljIHZvaWQgZGVzY3JpYmUoY29uc3QgY2hhciAqYXJnLCBpbnQgbGFzdF9vbmUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdCAqY21pdDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCBfKCJkZXNjcmliZSAlc1xuIiksIGFyZyk7CisKKwlpZiAoZ2V0X29pZChhcmcsICZvaWQpKQorCQlkaWUoXygiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiKSwgYXJnKTsKKwljbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCAmb2lkLCAxKTsKKworCWlmIChjbWl0KQorCQlkZXNjcmliZV9jb21taXQoJm9pZCwgJnNiKTsKKwllbHNlIGlmIChvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvaWQsIE5VTEwpID09IE9CSl9CTE9CKQorCQlkZXNjcmliZV9ibG9iKG9pZCwgJnNiKTsKKwllbHNlCisJCWRpZShfKCIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIiksIGFyZyk7CisKKwlwdXRzKHNiLmJ1Zik7CisKKwlpZiAoIWxhc3Rfb25lKQorCQljbGVhcl9jb21taXRfbWFya3MoY21pdCwgLTEpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworaW50IGNtZF9kZXNjcmliZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgY29udGFpbnMgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAiY29udGFpbnMiLCAgICZjb250YWlucywgTl8oImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiKSksCisJCU9QVF9CT09MKDAsICJkZWJ1ZyIsICAgICAgJmRlYnVnLCBOXygiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIpKSwKKwkJT1BUX0JPT0woMCwgImFsbCIsICAgICAgICAmYWxsLCBOXygidXNlIGFueSByZWYiKSksCisJCU9QVF9CT09MKDAsICJ0YWdzIiwgICAgICAgJnRhZ3MsIE5fKCJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIpKSwKKwkJT1BUX0JPT0woMCwgImxvbmciLCAgICAgICAmbG9uZ2Zvcm1hdCwgTl8oImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiKSksCisJCU9QVF9CT09MKDAsICJmaXJzdC1wYXJlbnQiLCAmZmlyc3RfcGFyZW50LCBOXygib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IikpLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX1NFVF9JTlQoMCwgImV4YWN0LW1hdGNoIiwgJm1heF9jYW5kaWRhdGVzLAorCQkJICAgIE5fKCJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIiksIDApLAorCQlPUFRfSU5URUdFUigwLCAiY2FuZGlkYXRlcyIsICZtYXhfY2FuZGlkYXRlcywKKwkJCSAgICBOXygiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIpKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJtYXRjaCIsICZwYXR0ZXJucywgTl8oInBhdHRlcm4iKSwKKwkJCSAgIE5fKCJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IikpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImV4Y2x1ZGUiLCAmZXhjbHVkZV9wYXR0ZXJucywgTl8oInBhdHRlcm4iKSwKKwkJCSAgIE5fKCJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iKSksCisJCU9QVF9CT09MKDAsICJhbHdheXMiLCAgICAgICAgJmFsd2F5cywKKwkJCU5fKCJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siKSksCisJCXtPUFRJT05fU1RSSU5HLCAwLCAiZGlydHkiLCAgJmRpcnR5LCBOXygibWFyayIpLAorCQkJTl8oImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiLWRpcnR5In0sCisJCXtPUFRJT05fU1RSSU5HLCAwLCAiYnJva2VuIiwgICZicm9rZW4sIE5fKCJtYXJrIiksCisJCQlOXygiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkgIi1icm9rZW4ifSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBkZXNjcmliZV91c2FnZSwgMCk7CisJaWYgKGFiYnJldiA8IDApCisJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCisJaWYgKG1heF9jYW5kaWRhdGVzIDwgMCkKKwkJbWF4X2NhbmRpZGF0ZXMgPSAwOworCWVsc2UgaWYgKG1heF9jYW5kaWRhdGVzID4gTUFYX1RBR1MpCisJCW1heF9jYW5kaWRhdGVzID0gTUFYX1RBR1M7CisKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCisJaWYgKGxvbmdmb3JtYXQgJiYgYWJicmV2ID09IDApCisJCWRpZShfKCItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIpKTsKKworCWlmIChjb250YWlucykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJnczsKKworCQlhcmd2X2FycmF5X2luaXQoJmFyZ3MpOworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAibmFtZS1yZXYiLAorCQkJCSAiLS1wZWVsLXRhZyIsICItLW5hbWUtb25seSIsICItLW5vLXVuZGVmaW5lZCIsCisJCQkJIE5VTEwpOworCQlpZiAoYWx3YXlzKQorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1hbHdheXMiKTsKKwkJaWYgKCFhbGwpIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tdGFncyIpOworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmcGF0dGVybnMpCisJCQkJYXJndl9hcnJheV9wdXNoZigmYXJncywgIi0tcmVmcz1yZWZzL3RhZ3MvJXMiLCBpdGVtLT5zdHJpbmcpOworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZXhjbHVkZV9wYXR0ZXJucykKKwkJCQlhcmd2X2FycmF5X3B1c2hmKCZhcmdzLCAiLS1leGNsdWRlPXJlZnMvdGFncy8lcyIsIGl0ZW0tPnN0cmluZyk7CisJCX0KKwkJaWYgKGFyZ2MpCisJCQlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBhcmd2KTsKKwkJZWxzZQorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiSEVBRCIpOworCQlyZXR1cm4gY21kX25hbWVfcmV2KGFyZ3MuYXJnYywgYXJncy5hcmd2LCBwcmVmaXgpOworCX0KKworCWhhc2htYXBfaW5pdCgmbmFtZXMsIGNvbW1pdF9uYW1lX25lcSwgTlVMTCwgMCk7CisJZm9yX2VhY2hfcmF3cmVmKGdldF9uYW1lLCBOVUxMKTsKKwlpZiAoIWhhc2htYXBfZ2V0X3NpemUoJm5hbWVzKSAmJiAhYWx3YXlzKQorCQlkaWUoXygiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iKSk7CisKKwlpZiAoYXJnYyA9PSAwKSB7CisJCWlmIChicm9rZW4pIHsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQkJYXJndl9hcnJheV9wdXNodigmY3AuYXJncywgZGlmZl9pbmRleF9hcmdzKTsKKwkJCWNwLmdpdF9jbWQgPSAxOworCQkJY3Aubm9fc3RkaW4gPSAxOworCQkJY3Aubm9fc3Rkb3V0ID0gMTsKKworCQkJaWYgKCFkaXJ0eSkKKwkJCQlkaXJ0eSA9ICItZGlydHkiOworCisJCQlzd2l0Y2ggKHJ1bl9jb21tYW5kKCZjcCkpIHsKKwkJCWNhc2UgMDoKKwkJCQlzdWZmaXggPSBOVUxMOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXN1ZmZpeCA9IGRpcnR5OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBkaWZmLWluZGV4IGFib3J0ZWQgYWJub3JtYWxseSAqLworCQkJCXN1ZmZpeCA9IGJyb2tlbjsKKwkJCX0KKwkJfSBlbHNlIGlmIChkaXJ0eSkgeworCQkJc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrID0gTE9DS19JTklUOworCQkJc3RydWN0IHJldl9pbmZvIHJldnM7CisJCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCQkJaW50IGZkLCByZXN1bHQ7CisKKwkJCXNldHVwX3dvcmtfdHJlZSgpOworCQkJcmVhZF9jYWNoZSgpOworCQkJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCBSRUZSRVNIX1FVSUVUfFJFRlJFU0hfVU5NRVJHRUQsCisJCQkJICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQlmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAwKTsKKwkJCWlmICgwIDw9IGZkKQorCQkJCXJlcG9fdXBkYXRlX2luZGV4X2lmX2FibGUodGhlX3JlcG9zaXRvcnksICZpbmRleF9sb2NrKTsKKworCQkJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIHByZWZpeCk7CisJCQlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBkaWZmX2luZGV4X2FyZ3MpOworCQkJaWYgKHNldHVwX3JldmlzaW9ucyhhcmdzLmFyZ2MsIGFyZ3MuYXJndiwgJnJldnMsIE5VTEwpICE9IDEpCisJCQkJQlVHKCJtYWxmb3JtZWQgaW50ZXJuYWwgZGlmZi1pbmRleCBjb21tYW5kIGxpbmUiKTsKKwkJCXJlc3VsdCA9IHJ1bl9kaWZmX2luZGV4KCZyZXZzLCAwKTsKKworCQkJaWYgKCFkaWZmX3Jlc3VsdF9jb2RlKCZyZXZzLmRpZmZvcHQsIHJlc3VsdCkpCisJCQkJc3VmZml4ID0gTlVMTDsKKwkJCWVsc2UKKwkJCQlzdWZmaXggPSBkaXJ0eTsKKwkJfQorCQlkZXNjcmliZSgiSEVBRCIsIDEpOworCX0gZWxzZSBpZiAoZGlydHkpIHsKKwkJZGllKF8oIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIikpOworCX0gZWxzZSBpZiAoYnJva2VuKSB7CisJCWRpZShfKCItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiKSk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKGFyZ2MtLSA+IDApCisJCQlkZXNjcmliZSgqYXJndisrLCBhcmdjID09IDApOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi1maWxlcy5jIGIvYnVpbHRpbi9kaWZmLWZpbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhZTQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGlmZi1maWxlcy5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBkaWZmX2ZpbGVzX3VzYWdlW10gPQorImdpdCBkaWZmLWZpbGVzIFstcV0gWy0wIHwgLTEgfCAtMiB8IC0zIHwgLWMgfCAtLWNjXSBbPGNvbW1vbi1kaWZmLW9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK0NPTU1PTl9ESUZGX09QVElPTlNfSEVMUDsKKworaW50IGNtZF9kaWZmX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBvcHRpb25zID0gMDsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoZGlmZl9maWxlc191c2FnZSk7CisKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKwlyZXYuYWJicmV2ID0gMDsKKwlwcmVjb21wb3NlX2FyZ3YoYXJnYywgYXJndik7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1iYXNlIikpCisJCQlyZXYubWF4X2NvdW50ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1vdXJzIikpCisJCQlyZXYubWF4X2NvdW50ID0gMjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS10aGVpcnMiKSkKKwkJCXJldi5tYXhfY291bnQgPSAzOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItcSIpKQorCQkJb3B0aW9ucyB8PSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEOworCQllbHNlCisJCQl1c2FnZShkaWZmX2ZpbGVzX3VzYWdlKTsKKwkJYXJndisrOyBhcmdjLS07CisJfQorCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZXJlIGFyZSBOTyByZXZpc2lvbiAoaS5lLiBwZW5kaW5nIG9iamVjdCkgcGFyYW1ldGVyLAorCSAqIHJldi5tYXhfY291bnQgaXMgcmVhc29uYWJsZSAoMCA8PSBuIDw9IDMpLCBhbmQKKwkgKiB0aGVyZSBpcyBubyBvdGhlciByZXZpc2lvbiBmaWx0ZXJpbmcgcGFyYW1ldGVycy4KKwkgKi8KKwlpZiAocmV2LnBlbmRpbmcubnIgfHwKKwkgICAgcmV2Lm1pbl9hZ2UgIT0gLTEgfHwgcmV2Lm1heF9hZ2UgIT0gLTEgfHwKKwkgICAgMyA8IHJldi5tYXhfY291bnQpCisJCXVzYWdlKGRpZmZfZmlsZXNfdXNhZ2UpOworCisJLyoKKwkgKiAiZGlmZi1maWxlcyAtLWJhc2UgLXAiIHNob3VsZCBub3QgY29tYmluZSBtZXJnZXMgYmVjYXVzZSBpdAorCSAqIHdhcyBub3QgYXNrZWQgdG8uICAiZGlmZi1maWxlcyAtYyAtcCIgc2hvdWxkIG5vdCBkZW5zaWZ5CisJICogKHRoZSB1c2VyIHNob3VsZCBhc2sgd2l0aCAiZGlmZi1maWxlcyAtLWNjIiBleHBsaWNpdGx5KS4KKwkgKi8KKwlpZiAocmV2Lm1heF9jb3VudCA9PSAtMSAmJiAhcmV2LmNvbWJpbmVfbWVyZ2VzICYmCisJICAgIChyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpKQorCQlyZXYuY29tYmluZV9tZXJnZXMgPSByZXYuZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKKworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJnJldi5kaWZmb3B0LnBhdGhzcGVjKSA8IDApIHsKKwkJcGVycm9yKCJyZWFkX2NhY2hlX3ByZWxvYWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXN1bHQgPSBydW5fZGlmZl9maWxlcygmcmV2LCBvcHRpb25zKTsKKwlyZXR1cm4gZGlmZl9yZXN1bHRfY29kZSgmcmV2LmRpZmZvcHQsIHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2RpZmYtaW5kZXguYyBiL2J1aWx0aW4vZGlmZi1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWM2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2RpZmYtaW5kZXguYwpAQCAtMCwwICsxLDYyIEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZGlmZl9jYWNoZV91c2FnZVtdID0KKyJnaXQgZGlmZi1pbmRleCBbLW1dIFstLWNhY2hlZF0gIgorIls8Y29tbW9uLWRpZmYtb3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCitDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CisKK2ludCBjbWRfZGlmZl9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWludCBjYWNoZWQgPSAwOworCWludCBpOworCWludCByZXN1bHQ7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGRpZmZfY2FjaGVfdXNhZ2UpOworCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisJcmV2LmFiYnJldiA9IDA7CisJcHJlY29tcG9zZV9hcmd2KGFyZ2MsIGFyZ3YpOworCisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1jYWNoZWQiKSkKKwkJCWNhY2hlZCA9IDE7CisJCWVsc2UKKwkJCXVzYWdlKGRpZmZfY2FjaGVfdXNhZ2UpOworCX0KKwlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBvbmUgcmV2aXNpb24gKGkuZS4gcGVuZGluZyBvYmplY3QpLAorCSAqIGFuZCB0aGVyZSBpcyBubyByZXZpc2lvbiBmaWx0ZXJpbmcgcGFyYW1ldGVycy4KKwkgKi8KKwlpZiAocmV2LnBlbmRpbmcubnIgIT0gMSB8fAorCSAgICByZXYubWF4X2NvdW50ICE9IC0xIHx8IHJldi5taW5fYWdlICE9IC0xIHx8IHJldi5tYXhfYWdlICE9IC0xKQorCQl1c2FnZShkaWZmX2NhY2hlX3VzYWdlKTsKKwlpZiAoIWNhY2hlZCkgeworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmcmV2LmRpZmZvcHQucGF0aHNwZWMpIDwgMCkgeworCQkJcGVycm9yKCJyZWFkX2NhY2hlX3ByZWxvYWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSBpZiAocmVhZF9jYWNoZSgpIDwgMCkgeworCQlwZXJyb3IoInJlYWRfY2FjaGUiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXN1bHQgPSBydW5fZGlmZl9pbmRleCgmcmV2LCBjYWNoZWQpOworCVVOTEVBSyhyZXYpOworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgcmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi10cmVlLmMgYi9idWlsdGluL2RpZmYtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWVhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2RpZmYtdHJlZS5jCkBAIC0wLDAgKzEsMTk2IEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmV2X2luZm8gbG9nX3RyZWVfb3B0OworCitzdGF0aWMgaW50IGRpZmZfdHJlZV9jb21taXRfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBsb2dfdHJlZV9jb21taXQoJmxvZ190cmVlX29wdCwgY29tbWl0KTsKK30KKworLyogRGlmZiBvbmUgb3IgbW9yZSBjb21taXRzLiAqLworc3RhdGljIGludCBzdGRpbl9kaWZmX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnApCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0ciA9IE5VTEw7CisKKwkvKiBHcmFmdCB0aGUgZmFrZSBwYXJlbnRzIGxvY2FsbHkgdG8gdGhlIGNvbW1pdCAqLworCXdoaWxlIChpc3NwYWNlKCpwKyspICYmICFwYXJzZV9vaWRfaGV4KHAsICZvaWQsICZwKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJaWYgKCFwcHRyKSB7CisJCQkvKiBGcmVlIHRoZSByZWFsIHBhcmVudCBsaXN0ICovCisJCQlmcmVlX2NvbW1pdF9saXN0KGNvbW1pdC0+cGFyZW50cyk7CisJCQljb21taXQtPnBhcmVudHMgPSBOVUxMOworCQkJcHB0ciA9ICYoY29tbWl0LT5wYXJlbnRzKTsKKwkJfQorCQlpZiAocGFyZW50KSB7CisJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsIHBwdHIpLT5uZXh0OworCQl9CisJfQorCXJldHVybiBsb2dfdHJlZV9jb21taXQoJmxvZ190cmVlX29wdCwgY29tbWl0KTsKK30KKworLyogRGlmZiB0d28gdHJlZXMuICovCitzdGF0aWMgaW50IHN0ZGluX2RpZmZfdHJlZXMoc3RydWN0IHRyZWUgKnRyZWUxLCBjb25zdCBjaGFyICpwKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCB0cmVlICp0cmVlMjsKKwlpZiAoIWlzc3BhY2UoKnArKykgfHwgcGFyc2Vfb2lkX2hleChwLCAmb2lkLCAmcCkgfHwgKnApCisJCXJldHVybiBlcnJvcigiTmVlZCBleGFjdGx5IHR3byB0cmVlcywgc2VwYXJhdGVkIGJ5IGEgc3BhY2UiKTsKKwl0cmVlMiA9IGxvb2t1cF90cmVlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAoIXRyZWUyIHx8IHBhcnNlX3RyZWUodHJlZTIpKQorCQlyZXR1cm4gLTE7CisJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleCgmdHJlZTEtPm9iamVjdC5vaWQpLAorCQkJICBvaWRfdG9faGV4KCZ0cmVlMi0+b2JqZWN0Lm9pZCkpOworCWRpZmZfdHJlZV9vaWQoJnRyZWUxLT5vYmplY3Qub2lkLCAmdHJlZTItPm9iamVjdC5vaWQsCisJCSAgICAgICIiLCAmbG9nX3RyZWVfb3B0LmRpZmZvcHQpOworCWxvZ190cmVlX2RpZmZfZmx1c2goJmxvZ190cmVlX29wdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl90cmVlX3N0ZGluKGNoYXIgKmxpbmUpCit7CisJaW50IGxlbiA9IHN0cmxlbihsaW5lKTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJY29uc3QgY2hhciAqcDsKKworCWlmICghbGVuIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCXJldHVybiAtMTsKKwlsaW5lW2xlbi0xXSA9IDA7CisJaWYgKHBhcnNlX29pZF9oZXgobGluZSwgJm9pZCwgJnApKQorCQlyZXR1cm4gLTE7CisJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC0xOworCWlmIChvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIHN0ZGluX2RpZmZfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopb2JqLCBwKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKQorCQlyZXR1cm4gc3RkaW5fZGlmZl90cmVlcygoc3RydWN0IHRyZWUgKilvYmosIHApOworCWVycm9yKCJPYmplY3QgJXMgaXMgYSAlcywgbm90IGEgY29tbWl0IG9yIHRyZWUiLAorCSAgICAgIG9pZF90b19oZXgoJm9pZCksIHR5cGVfbmFtZShvYmotPnR5cGUpKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGRpZmZfdHJlZV91c2FnZVtdID0KKyJnaXQgZGlmZi10cmVlIFstLXN0ZGluXSBbLW1dIFstYyB8IC0tY2NdIFstc10gWy12XSBbLS1wcmV0dHldIFstdF0gWy1yXSBbLS1yb290XSAiCisiWzxjb21tb24tZGlmZi1vcHRpb25zPl0gPHRyZWUtaXNoPiBbPHRyZWUtaXNoPl0gWzxwYXRoPi4uLl1cbiIKKyIgIC1yICAgICAgICAgICAgZGlmZiByZWN1cnNpdmVseVxuIgorIiAgLWMgICAgICAgICAgICBzaG93IGNvbWJpbmVkIGRpZmYgZm9yIG1lcmdlIGNvbW1pdHNcbiIKKyIgIC0tY2MgICAgICAgICAgc2hvdyBjb21iaW5lZCBkaWZmIGZvciBtZXJnZSBjb21taXRzIHJlbW92aW5nIHVuaW50ZXJlc3RpbmcgaHVua3NcbiIKKyIgIC0tY29tYmluZWQtYWxsLXBhdGhzXG4iCisiICAgICAgICAgICAgICAgIHNob3cgbmFtZSBvZiBmaWxlIGluIGFsbCBwYXJlbnRzIGZvciBjb21iaW5lZCBkaWZmc1xuIgorIiAgLS1yb290ICAgICAgICBpbmNsdWRlIHRoZSBpbml0aWFsIGNvbW1pdCBhcyBkaWZmIGFnYWluc3QgL2Rldi9udWxsXG4iCitDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CisKK3N0YXRpYyB2b2lkIGRpZmZfdHJlZV90d2Vha19yZXYoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKm9wdCkKK3sKKwlpZiAoIXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0KSB7CisJCWlmIChyZXYtPmRlbnNlX2NvbWJpbmVkX21lcmdlcykKKwkJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJCWVsc2UKKwkJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUkFXOworCX0KK30KKworaW50IGNtZF9kaWZmX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY2hhciBsaW5lWzEwMDBdOworCXN0cnVjdCBvYmplY3QgKnRyZWUxLCAqdHJlZTI7CisJc3RhdGljIHN0cnVjdCByZXZfaW5mbyAqb3B0ID0gJmxvZ190cmVlX29wdDsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHNfcl9vcHQ7CisJaW50IHJlYWRfc3RkaW4gPSAwOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShkaWZmX3RyZWVfdXNhZ2UpOworCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksIG9wdCwgcHJlZml4KTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKwlvcHQtPmFiYnJldiA9IDA7CisJb3B0LT5kaWZmID0gMTsKKwlvcHQtPmRpc2FibGVfc3RkaW4gPSAxOworCW1lbXNldCgmc19yX29wdCwgMCwgc2l6ZW9mKHNfcl9vcHQpKTsKKwlzX3Jfb3B0LnR3ZWFrID0gZGlmZl90cmVlX3R3ZWFrX3JldjsKKworCXByZWNvbXBvc2VfYXJndihhcmdjLCBhcmd2KTsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIG9wdCwgJnNfcl9vcHQpOworCisJd2hpbGUgKC0tYXJnYyA+IDApIHsKKwkJY29uc3QgY2hhciAqYXJnID0gKisrYXJndjsKKworCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKKwkJCXJlYWRfc3RkaW4gPSAxOworCQkJY29udGludWU7CisJCX0KKwkJdXNhZ2UoZGlmZl90cmVlX3VzYWdlKTsKKwl9CisKKwkvKgorCSAqIE5PVEUhICBXZSBleHBlY3QgImEuLmIiIHRvIGV4cGFuZCB0byAiXmEgYiIgYnV0IGl0IGlzCisJICogcGVyZmVjdGx5IHZhbGlkIGZvciByZXZpc2lvbiByYW5nZSBwYXJzZXIgdG8geWllbGQgImIgXmEiLAorCSAqIHdoaWNoIG1lYW5zIHRoZSBzYW1lIHRoaW5nLiBJZiB3ZSBnZXQgdGhlIGxhdHRlciwgaS5lLiB0aGUKKwkgKiBzZWNvbmQgb25lIGlzIG1hcmtlZCBVTklOVEVSRVNUSU5HLCB3ZSByZWNvdmVyIHRoZSBvcmlnaW5hbAorCSAqIG9yZGVyIHRoZSB1c2VyIGdhdmUsIGkuZS4gImEuLmIiLCBieSBzd2FwcGluZyB0aGUgdHJlZXMuCisJICovCisJc3dpdGNoIChvcHQtPnBlbmRpbmcubnIpIHsKKwljYXNlIDA6CisJCWlmICghcmVhZF9zdGRpbikKKwkJCXVzYWdlKGRpZmZfdHJlZV91c2FnZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdHJlZTEgPSBvcHQtPnBlbmRpbmcub2JqZWN0c1swXS5pdGVtOworCQlkaWZmX3RyZWVfY29tbWl0X29pZCgmdHJlZTEtPm9pZCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdHJlZTEgPSBvcHQtPnBlbmRpbmcub2JqZWN0c1swXS5pdGVtOworCQl0cmVlMiA9IG9wdC0+cGVuZGluZy5vYmplY3RzWzFdLml0ZW07CisJCWlmICh0cmVlMi0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQlTV0FQKHRyZWUyLCB0cmVlMSk7CisJCX0KKwkJZGlmZl90cmVlX29pZCgmdHJlZTEtPm9pZCwgJnRyZWUyLT5vaWQsICIiLCAmb3B0LT5kaWZmb3B0KTsKKwkJbG9nX3RyZWVfZGlmZl9mbHVzaChvcHQpOworCQlicmVhazsKKwl9CisKKwlpZiAocmVhZF9zdGRpbikgeworCQlpbnQgc2F2ZWRfbnJsID0gMDsKKwkJaW50IHNhdmVkX2RjY3RjID0gMDsKKworCQlpZiAob3B0LT5kaWZmb3B0LmRldGVjdF9yZW5hbWUpIHsKKwkJCWlmICghdGhlX2luZGV4LmNhY2hlKQorCQkJCXJlcG9fcmVhZF9pbmRleCh0aGVfcmVwb3NpdG9yeSk7CisJCQlvcHQtPmRpZmZvcHQuc2V0dXAgfD0gRElGRl9TRVRVUF9VU0VfU0laRV9DQUNIRTsKKwkJfQorCQl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCQlpZiAoZ2V0X29pZF9oZXgobGluZSwgJm9pZCkpIHsKKwkJCQlmcHV0cyhsaW5lLCBzdGRvdXQpOworCQkJCWZmbHVzaChzdGRvdXQpOworCQkJfQorCQkJZWxzZSB7CisJCQkJZGlmZl90cmVlX3N0ZGluKGxpbmUpOworCQkJCWlmIChzYXZlZF9ucmwgPCBvcHQtPmRpZmZvcHQubmVlZGVkX3JlbmFtZV9saW1pdCkKKwkJCQkJc2F2ZWRfbnJsID0gb3B0LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQ7CisJCQkJaWYgKG9wdC0+ZGlmZm9wdC5kZWdyYWRlZF9jY190b19jKQorCQkJCQlzYXZlZF9kY2N0YyA9IDE7CisJCQl9CisJCX0KKwkJb3B0LT5kaWZmb3B0LmRlZ3JhZGVkX2NjX3RvX2MgPSBzYXZlZF9kY2N0YzsKKwkJb3B0LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQgPSBzYXZlZF9ucmw7CisJfQorCisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJm9wdC0+ZGlmZm9wdCwgMCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2RpZmYuYyBiL2J1aWx0aW4vZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYWM4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2RpZmYuYwpAQCAtMCwwICsxLDQ2NSBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBkaWZmIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisKKyNkZWZpbmUgRElGRl9OT19JTkRFWF9FWFBMSUNJVCAxCisjZGVmaW5lIERJRkZfTk9fSU5ERVhfSU1QTElDSVQgMgorCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2RpZmZfdXNhZ2VbXSA9CisiZ2l0IGRpZmYgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iOworCitzdGF0aWMgY29uc3QgY2hhciAqYmxvYl9wYXRoKHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudHJ5KQoreworCXJldHVybiBlbnRyeS0+cGF0aCA/IGVudHJ5LT5wYXRoIDogZW50cnktPm5hbWU7Cit9CisKK3N0YXRpYyB2b2lkIHN0dWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsCisJCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJCSBpbnQgb2xkX29pZF92YWxpZCwKKwkJCSBpbnQgbmV3X29pZF92YWxpZCwKKwkJCSBjb25zdCBjaGFyICpvbGRfcGF0aCwKKwkJCSBjb25zdCBjaGFyICpuZXdfcGF0aCkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOworCisJaWYgKCFpc19udWxsX29pZChvbGRfb2lkKSAmJiAhaXNfbnVsbF9vaWQobmV3X29pZCkgJiYKKwkgICAgb2lkZXEob2xkX29pZCwgbmV3X29pZCkgJiYgKG9sZF9tb2RlID09IG5ld19tb2RlKSkKKwkJcmV0dXJuOworCisJaWYgKG9wdC0+ZmxhZ3MucmV2ZXJzZV9kaWZmKSB7CisJCVNXQVAob2xkX21vZGUsIG5ld19tb2RlKTsKKwkJU1dBUChvbGRfb2lkLCBuZXdfb2lkKTsKKwkJU1dBUChvbGRfcGF0aCwgbmV3X3BhdGgpOworCX0KKworCWlmIChvcHQtPnByZWZpeCAmJgorCSAgICAoc3RybmNtcChvbGRfcGF0aCwgb3B0LT5wcmVmaXgsIG9wdC0+cHJlZml4X2xlbmd0aCkgfHwKKwkgICAgIHN0cm5jbXAobmV3X3BhdGgsIG9wdC0+cHJlZml4LCBvcHQtPnByZWZpeF9sZW5ndGgpKSkKKwkJcmV0dXJuOworCisJb25lID0gYWxsb2NfZmlsZXNwZWMob2xkX3BhdGgpOworCXR3byA9IGFsbG9jX2ZpbGVzcGVjKG5ld19wYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKG9uZSwgb2xkX29pZCwgb2xkX29pZF92YWxpZCwgb2xkX21vZGUpOworCWZpbGxfZmlsZXNwZWModHdvLCBuZXdfb2lkLCBuZXdfb2lkX3ZhbGlkLCBuZXdfbW9kZSk7CisKKwlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvbmUsIHR3byk7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX2JfZihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgIHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKipibG9iKQoreworCS8qIEJsb2IgdnMgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlKi8KKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBjaGFyICpwYXRoOworCisJaWYgKGFyZ2MgPiAxKQorCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCisJR1VBUkRfUEFUSFNQRUMoJnJldnMtPnBydW5lX2RhdGEsIFBBVEhTUEVDX0ZST01UT1AgfCBQQVRIU1BFQ19MSVRFUkFMKTsKKwlwYXRoID0gcmV2cy0+cHJ1bmVfZGF0YS5pdGVtc1swXS5tYXRjaDsKKworCWlmIChsc3RhdChwYXRoLCAmc3QpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN0YXQgJyVzJyIpLCBwYXRoKTsKKwlpZiAoIShTX0lTUkVHKHN0LnN0X21vZGUpIHx8IFNfSVNMTksoc3Quc3RfbW9kZSkpKQorCQlkaWUoXygiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiKSwgcGF0aCk7CisKKwlkaWZmX3NldF9tbmVtb25pY19wcmVmaXgoJnJldnMtPmRpZmZvcHQsICJvLyIsICJ3LyIpOworCisJaWYgKGJsb2JbMF0tPm1vZGUgPT0gU19JRklOVkFMSUQpCisJCWJsb2JbMF0tPm1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOworCisJc3R1ZmZfY2hhbmdlKCZyZXZzLT5kaWZmb3B0LAorCQkgICAgIGJsb2JbMF0tPm1vZGUsIGNhbm9uX21vZGUoc3Quc3RfbW9kZSksCisJCSAgICAgJmJsb2JbMF0tPml0ZW0tPm9pZCwgJm51bGxfb2lkLAorCQkgICAgIDEsIDAsCisJCSAgICAgYmxvYlswXS0+cGF0aCA/IGJsb2JbMF0tPnBhdGggOiBwYXRoLAorCQkgICAgIHBhdGgpOworCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZl9mbHVzaCgmcmV2cy0+ZGlmZm9wdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX2Jsb2JzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICAgIHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKipibG9iKQoreworCWNvbnN0IHVuc2lnbmVkIG1vZGUgPSBjYW5vbl9tb2RlKFNfSUZSRUcgfCAwNjQ0KTsKKworCWlmIChhcmdjID4gMSkKKwkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKworCWlmIChibG9iWzBdLT5tb2RlID09IFNfSUZJTlZBTElEKQorCQlibG9iWzBdLT5tb2RlID0gbW9kZTsKKworCWlmIChibG9iWzFdLT5tb2RlID09IFNfSUZJTlZBTElEKQorCQlibG9iWzFdLT5tb2RlID0gbW9kZTsKKworCXN0dWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwKKwkJICAgICBibG9iWzBdLT5tb2RlLCBibG9iWzFdLT5tb2RlLAorCQkgICAgICZibG9iWzBdLT5pdGVtLT5vaWQsICZibG9iWzFdLT5pdGVtLT5vaWQsCisJCSAgICAgMSwgMSwKKwkJICAgICBibG9iX3BhdGgoYmxvYlswXSksIGJsb2JfcGF0aChibG9iWzFdKSk7CisJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKKwlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidWlsdGluX2RpZmZfaW5kZXgoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBjYWNoZWQgPSAwOworCXdoaWxlICgxIDwgYXJnYykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2WzFdOworCQlpZiAoIXN0cmNtcChhcmcsICItLWNhY2hlZCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1zdGFnZWQiKSkKKwkJCWNhY2hlZCA9IDE7CisJCWVsc2UKKwkJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJCWFyZ3YrKzsgYXJnYy0tOworCX0KKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBvbmUgcmV2aXNpb24gKGkuZS4gcGVuZGluZyBvYmplY3QpLAorCSAqIGFuZCB0aGVyZSBpcyBubyByZXZpc2lvbiBmaWx0ZXJpbmcgcGFyYW1ldGVycy4KKwkgKi8KKwlpZiAocmV2cy0+cGVuZGluZy5uciAhPSAxIHx8CisJICAgIHJldnMtPm1heF9jb3VudCAhPSAtMSB8fCByZXZzLT5taW5fYWdlICE9IC0xIHx8CisJICAgIHJldnMtPm1heF9hZ2UgIT0gLTEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJaWYgKCFjYWNoZWQpIHsKKwkJc2V0dXBfd29ya190cmVlKCk7CisJCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJnJldnMtPmRpZmZvcHQucGF0aHNwZWMpIDwgMCkgeworCQkJcGVycm9yKCJyZWFkX2NhY2hlX3ByZWxvYWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSBpZiAocmVhZF9jYWNoZSgpIDwgMCkgeworCQlwZXJyb3IoInJlYWRfY2FjaGUiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gcnVuX2RpZmZfaW5kZXgocmV2cywgY2FjaGVkKTsKK30KKworc3RhdGljIGludCBidWlsdGluX2RpZmZfdHJlZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICAgc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50MCwKKwkJCSAgICAgc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50MSkKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICoob2lkWzJdKTsKKwlpbnQgc3dhcCA9IDA7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisKKwkvKgorCSAqIFdlIHNhdyB0d28gdHJlZXMsIGVudDAgYW5kIGVudDEuICBJZiBlbnQxIGlzIHVuaW50ZXJlc3RpbmcsCisJICogc3dhcCB0aGVtLgorCSAqLworCWlmIChlbnQxLT5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXN3YXAgPSAxOworCW9pZFtzd2FwXSA9ICZlbnQwLT5pdGVtLT5vaWQ7CisJb2lkWzEgLSBzd2FwXSA9ICZlbnQxLT5pdGVtLT5vaWQ7CisJZGlmZl90cmVlX29pZChvaWRbMF0sIG9pZFsxXSwgIiIsICZyZXZzLT5kaWZmb3B0KTsKKwlsb2dfdHJlZV9kaWZmX2ZsdXNoKHJldnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl9jb21iaW5lZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCQkgc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50LAorCQkJCSBpbnQgZW50cykKK3sKKwlzdHJ1Y3Qgb2lkX2FycmF5IHBhcmVudHMgPSBPSURfQVJSQVlfSU5JVDsKKwlpbnQgaTsKKworCWlmIChhcmdjID4gMSkKKwkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKworCWlmICghcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzICYmICFyZXZzLT5jb21iaW5lX21lcmdlcykKKwkJcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gcmV2cy0+Y29tYmluZV9tZXJnZXMgPSAxOworCWZvciAoaSA9IDE7IGkgPCBlbnRzOyBpKyspCisJCW9pZF9hcnJheV9hcHBlbmQoJnBhcmVudHMsICZlbnRbaV0uaXRlbS0+b2lkKTsKKwlkaWZmX3RyZWVfY29tYmluZWQoJmVudFswXS5pdGVtLT5vaWQsICZwYXJlbnRzLAorCQkJICAgcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzLCByZXZzKTsKKwlvaWRfYXJyYXlfY2xlYXIoJnBhcmVudHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWZyZXNoX2luZGV4X3F1aWV0bHkodm9pZCkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlpbnQgZmQ7CisKKwlmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDApOworCWlmIChmZCA8IDApCisJCXJldHVybjsKKwlkaXNjYXJkX2NhY2hlKCk7CisJcmVhZF9jYWNoZSgpOworCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVHxSRUZSRVNIX1VOTUVSR0VEKTsKKwlyZXBvX3VwZGF0ZV9pbmRleF9pZl9hYmxlKHRoZV9yZXBvc2l0b3J5LCAmbG9ja19maWxlKTsKK30KKworc3RhdGljIGludCBidWlsdGluX2RpZmZfZmlsZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IG9wdGlvbnMgPSAwOworCisJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLWJhc2UiKSkKKwkJCXJldnMtPm1heF9jb3VudCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tb3VycyIpKQorCQkJcmV2cy0+bWF4X2NvdW50ID0gMjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS10aGVpcnMiKSkKKwkJCXJldnMtPm1heF9jb3VudCA9IDM7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1xIikpCisJCQlvcHRpb25zIHw9IERJRkZfU0lMRU5UX09OX1JFTU9WRUQ7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBvcHRpb246ICVzIiksIGFyZ3ZbMV0pOworCQlhcmd2Kys7IGFyZ2MtLTsKKwl9CisKKwkvKgorCSAqICJkaWZmIC0tYmFzZSIgc2hvdWxkIG5vdCBjb21iaW5lIG1lcmdlcyBiZWNhdXNlIGl0IHdhcyBub3QKKwkgKiBhc2tlZCB0by4gICJkaWZmIC1jIiBzaG91bGQgbm90IGRlbnNpZnkgKGlmIHRoZSB1c2VyIHdhbnRzCisJICogZGVuc2Ugb25lLCAtLWNjIGNhbiBiZSBleHBsaWNpdGx5IGFza2VkIGZvciwgb3IganVzdCByZWx5CisJICogb24gdGhlIGRlZmF1bHQpLgorCSAqLworCWlmIChyZXZzLT5tYXhfY291bnQgPT0gLTEgJiYgIXJldnMtPmNvbWJpbmVfbWVyZ2VzICYmCisJICAgIChyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkpCisJCXJldnMtPmNvbWJpbmVfbWVyZ2VzID0gcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKKworCXNldHVwX3dvcmtfdHJlZSgpOworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJnJldnMtPmRpZmZvcHQucGF0aHNwZWMpIDwgMCkgeworCQlwZXJyb3IoInJlYWRfY2FjaGVfcHJlbG9hZCIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBydW5fZGlmZl9maWxlcyhyZXZzLCBvcHRpb25zKTsKK30KKworaW50IGNtZF9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IG9iamVjdF9hcnJheSBlbnQgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlpbnQgYmxvYnMgPSAwLCBwYXRocyA9IDA7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqYmxvYlsyXTsKKwlpbnQgbm9uZ2l0ID0gMCwgbm9faW5kZXggPSAwOworCWludCByZXN1bHQgPSAwOworCisJLyoKKwkgKiBXZSBjb3VsZCBnZXQgTiB0cmVlLWlzaCBpbiB0aGUgcmV2LnBlbmRpbmdfb2JqZWN0cyBsaXN0LgorCSAqIEFsc28gdGhlcmUgY291bGQgYmUgTSBibG9icyB0aGVyZSwgYW5kIFAgcGF0aHNwZWNzLgorCSAqCisJICogTj0wLCBNPTA6CisJICoJY2FjaGUgdnMgZmlsZXMgKGRpZmYtZmlsZXMpCisJICogTj0wLCBNPTI6CisJICogICAgICBjb21wYXJlIHR3byByYW5kb20gYmxvYnMuICBQIG11c3QgYmUgemVyby4KKwkgKiBOPTAsIE09MSwgUD0xOgorCSAqCWNvbXBhcmUgYSBibG9iIHdpdGggYSB3b3JraW5nIHRyZWUgZmlsZS4KKwkgKgorCSAqIE49MSwgTT0wOgorCSAqICAgICAgdHJlZSB2cyBjYWNoZSAoZGlmZi1pbmRleCAtLWNhY2hlZCkKKwkgKgorCSAqIE49MiwgTT0wOgorCSAqICAgICAgdHJlZSB2cyB0cmVlIChkaWZmLXRyZWUpCisJICoKKwkgKiBOPTAsIE09MCwgUD0yOgorCSAqICAgICAgY29tcGFyZSB0d28gZmlsZXN5c3RlbSBlbnRpdGllcyAoYWthIC0tbm8taW5kZXgpLgorCSAqCisJICogT3RoZXIgY2FzZXMgYXJlIGVycm9ycy4KKwkgKi8KKworCS8qIFdlcmUgd2UgYXNrZWQgdG8gZG8gLS1uby1pbmRleCBleHBsaWNpdGx5PyAqLworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vLWluZGV4IikpCisJCQlub19pbmRleCA9IERJRkZfTk9fSU5ERVhfRVhQTElDSVQ7CisJCWlmIChhcmd2W2ldWzBdICE9ICctJykKKwkJCWJyZWFrOworCX0KKworCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCisJaWYgKCFub19pbmRleCkgeworCQkvKgorCQkgKiBUcmVhdCBnaXQgZGlmZiB3aXRoIGF0IGxlYXN0IG9uZSBwYXRoIG91dHNpZGUgb2YgdGhlCisJCSAqIHJlcG8gdGhlIHNhbWUgYXMgaWYgdGhlIGNvbW1hbmQgd291bGQgaGF2ZSBiZWVuIGV4ZWN1dGVkCisJCSAqIG91dHNpZGUgb2YgYSBnaXQgcmVwb3NpdG9yeS4gIEluIHRoaXMgY2FzZSBpdCBiZWhhdmVzCisJCSAqIHRoZSBzYW1lIHdheSBhcyAiZ2l0IGRpZmYgLS1uby1pbmRleCA8YT4gPGI+Iiwgd2hpY2ggYWN0cworCQkgKiBhcyBhIGNvbG91cmZ1bCAiZGlmZiIgcmVwbGFjZW1lbnQuCisJCSAqLworCQlpZiAobm9uZ2l0IHx8ICgoYXJnYyA9PSBpICsgMikgJiYKKwkJCSAgICAgICAoIXBhdGhfaW5zaWRlX3JlcG8ocHJlZml4LCBhcmd2W2ldKSB8fAorCQkJCSFwYXRoX2luc2lkZV9yZXBvKHByZWZpeCwgYXJndltpICsgMV0pKSkpCisJCQlub19pbmRleCA9IERJRkZfTk9fSU5ERVhfSU1QTElDSVQ7CisJfQorCisJaW5pdF9kaWZmX3VpX2RlZmF1bHRzKCk7CisJZ2l0X2NvbmZpZyhnaXRfZGlmZl91aV9jb25maWcsIE5VTEwpOworCXByZWNvbXBvc2VfYXJndihhcmdjLCBhcmd2KTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisKKwkvKiBTZXQgdXAgZGVmYXVsdHMgdGhhdCB3aWxsIGFwcGx5IHRvIGJvdGggbm8taW5kZXggYW5kIHJlZ3VsYXIgZGlmZnMuICovCisJcmV2LmRpZmZvcHQuc3RhdF93aWR0aCA9IC0xOworCXJldi5kaWZmb3B0LnN0YXRfZ3JhcGhfd2lkdGggPSAtMTsKKwlyZXYuZGlmZm9wdC5mbGFncy5hbGxvd19leHRlcm5hbCA9IDE7CisJcmV2LmRpZmZvcHQuZmxhZ3MuYWxsb3dfdGV4dGNvbnYgPSAxOworCisJLyogSWYgdGhpcyBpcyBhIG5vLWluZGV4IGRpZmYsIGp1c3QgcnVuIGl0IGFuZCBleGl0IHRoZXJlLiAqLworCWlmIChub19pbmRleCkKKwkJZXhpdChkaWZmX25vX2luZGV4KCZyZXYsIG5vX2luZGV4ID09IERJRkZfTk9fSU5ERVhfSU1QTElDSVQsCisJCQkJICAgYXJnYywgYXJndikpOworCisKKwkvKgorCSAqIE90aGVyd2lzZSwgd2UgYXJlIGRvaW5nIHRoZSB1c3VhbCAiZ2l0IiBkaWZmOyBzZXQgdXAgYW55CisJICogZnVydGhlciBkZWZhdWx0cyB0aGF0IGFwcGx5IHRvIHJlZ3VsYXIgZGlmZnMuCisJICovCisJcmV2LmRpZmZvcHQuc2tpcF9zdGF0X3VubWF0Y2ggPSAhIWRpZmZfYXV0b19yZWZyZXNoX2luZGV4OworCisJLyoKKwkgKiBEZWZhdWx0IHRvIGludGVudC10by1hZGQgZW50cmllcyBpbnZpc2libGUgaW4gdGhlCisJICogaW5kZXguIFRoaXMgbWFrZXMgdGhlbSBzaG93IHVwIGFzIG5ldyBmaWxlcyBpbiBkaWZmLWZpbGVzCisJICogYW5kIG5vdCBhdCBhbGwgaW4gZGlmZi1jYWNoZWQuCisJICovCisJcmV2LmRpZmZvcHQuaXRhX2ludmlzaWJsZV9pbl9pbmRleCA9IDE7CisKKwlpZiAobm9uZ2l0KQorCQlkaWUoXygiTm90IGEgZ2l0IHJlcG9zaXRvcnkiKSk7CisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpIHsKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCQlkaWZmX3NldHVwX2RvbmUoJnJldi5kaWZmb3B0KTsKKwl9CisKKwlyZXYuZGlmZm9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCisJc2V0dXBfZGlmZl9wYWdlcigmcmV2LmRpZmZvcHQpOworCisJLyoKKwkgKiBEbyB3ZSBoYXZlIC0tY2FjaGVkIGFuZCBub3QgaGF2ZSBhIHBlbmRpbmcgb2JqZWN0LCB0aGVuCisJICogZGVmYXVsdCB0byBIRUFEIGJ5IGhhbmQuICBFZWsuCisJICovCisJaWYgKCFyZXYucGVuZGluZy5ucikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJCWlmICghc3RyY21wKGFyZywgIi0tIikpCisJCQkJYnJlYWs7CisJCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tY2FjaGVkIikgfHwKKwkJCQkgIXN0cmNtcChhcmcsICItLXN0YWdlZCIpKSB7CisJCQkJYWRkX2hlYWRfdG9fcGVuZGluZygmcmV2KTsKKwkJCQlpZiAoIXJldi5wZW5kaW5nLm5yKSB7CisJCQkJCXN0cnVjdCB0cmVlICp0cmVlOworCQkJCQl0cmVlID0gbG9va3VwX3RyZWUodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgdGhlX3JlcG9zaXRvcnktPmhhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisJCQkJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2LCAmdHJlZS0+b2JqZWN0LCAiSEVBRCIpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCByZXYucGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudHJ5ID0gJnJldi5wZW5kaW5nLm9iamVjdHNbaV07CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IGVudHJ5LT5pdGVtOworCQljb25zdCBjaGFyICpuYW1lID0gZW50cnktPm5hbWU7CisJCWludCBmbGFncyA9IChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORyk7CisJCWlmICghb2JqLT5wYXJzZWQpCisJCQlvYmogPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvYmotPm9pZCk7CisJCW9iaiA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwgb2JqLCBOVUxMLCAwKTsKKwkJaWYgKCFvYmopCisJCQlkaWUoXygiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iKSwgbmFtZSk7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCW9iaiA9ICZnZXRfY29tbWl0X3RyZWUoKChzdHJ1Y3QgY29tbWl0ICopb2JqKSktPm9iamVjdDsKKworCQlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCQlvYmotPmZsYWdzIHw9IGZsYWdzOworCQkJYWRkX29iamVjdF9hcnJheShvYmosIG5hbWUsICZlbnQpOworCQl9IGVsc2UgaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJaWYgKDIgPD0gYmxvYnMpCisJCQkJZGllKF8oIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciKSwgbmFtZSk7CisJCQlibG9iW2Jsb2JzXSA9IGVudHJ5OworCQkJYmxvYnMrKzsKKworCQl9IGVsc2UgeworCQkJZGllKF8oInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iKSwgbmFtZSk7CisJCX0KKwl9CisJaWYgKHJldi5wcnVuZV9kYXRhLm5yKQorCQlwYXRocyArPSByZXYucHJ1bmVfZGF0YS5ucjsKKworCS8qCisJICogTm93LCBkbyB0aGUgYXJndW1lbnRzIGxvb2sgcmVhc29uYWJsZT8KKwkgKi8KKwlpZiAoIWVudC5ucikgeworCQlzd2l0Y2ggKGJsb2JzKSB7CisJCWNhc2UgMDoKKwkJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9maWxlcygmcmV2LCBhcmdjLCBhcmd2KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpZiAocGF0aHMgIT0gMSkKKwkJCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCQkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX2JfZigmcmV2LCBhcmdjLCBhcmd2LCBibG9iKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAocGF0aHMpCisJCQkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKwkJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9ibG9icygmcmV2LCBhcmdjLCBhcmd2LCBibG9iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKwkJfQorCX0KKwllbHNlIGlmIChibG9icykKKwkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKwllbHNlIGlmIChlbnQubnIgPT0gMSkKKwkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX2luZGV4KCZyZXYsIGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKGVudC5uciA9PSAyKQorCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfdHJlZSgmcmV2LCBhcmdjLCBhcmd2LAorCQkJCQkgICAmZW50Lm9iamVjdHNbMF0sICZlbnQub2JqZWN0c1sxXSk7CisJZWxzZSBpZiAoZW50Lm9iamVjdHNbMF0uaXRlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCS8qCisJCSAqIGRpZmYgQS4uLkIgd2hlcmUgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG1lcmdlIGJhc2UKKwkJICogYmV0d2VlbiBBIGFuZCBCLiAgV2UgaGF2ZSBlbnQub2JqZWN0c1swXSA9PQorCQkgKiBtZXJnZS1iYXNlLCBlbnQub2JqZWN0c1tlbnRzLTJdID09IEEsIGFuZAorCQkgKiBlbnQub2JqZWN0c1tlbnRzLTFdID09IEIuICBTaG93IGRpZmYgYmV0d2VlbiB0aGUKKwkJICogYmFzZSBhbmQgQi4gIE5vdGUgdGhhdCB3ZSBwaWNrIG9uZSBtZXJnZSBiYXNlIGF0CisJCSAqIHJhbmRvbSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZS4KKwkJICovCisJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl90cmVlKCZyZXYsIGFyZ2MsIGFyZ3YsCisJCQkJCSAgICZlbnQub2JqZWN0c1swXSwKKwkJCQkJICAgJmVudC5vYmplY3RzW2VudC5uci0xXSk7CisJfSBlbHNlCisJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl9jb21iaW5lZCgmcmV2LCBhcmdjLCBhcmd2LAorCQkJCQkgICAgICAgZW50Lm9iamVjdHMsIGVudC5ucik7CisJcmVzdWx0ID0gZGlmZl9yZXN1bHRfY29kZSgmcmV2LmRpZmZvcHQsIHJlc3VsdCk7CisJaWYgKDEgPCByZXYuZGlmZm9wdC5za2lwX3N0YXRfdW5tYXRjaCkKKwkJcmVmcmVzaF9pbmRleF9xdWlldGx5KCk7CisJVU5MRUFLKHJldik7CisJVU5MRUFLKGVudCk7CisJVU5MRUFLKGJsb2IpOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2RpZmZ0b29sLmMgYi9idWlsdGluL2RpZmZ0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4MGU2OAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGlmZnRvb2wuYwpAQCAtMCwwICsxLDc3MiBAQAorLyoKKyAqICJnaXQgZGlmZnRvb2wiIGJ1aWx0aW4gY29tbWFuZAorICoKKyAqIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgR0lUX0VYVEVSTkFMX0RJRkYtY29tcGF0aWJsZQorICogZ2l0LWRpZmZ0b29sLS1oZWxwZXIgc2NyaXB0LgorICoKKyAqIFRoaXMgc2NyaXB0IGV4cG9ydHMgR0lUX0VYVEVSTkFMX0RJRkYgYW5kIEdJVF9QQUdFUiBmb3IgdXNlIGJ5IGdpdC4KKyAqIFRoZSBHSVRfRElGRiogdmFyaWFibGVzIGFyZSBleHBvcnRlZCBmb3IgdXNlIGJ5IGdpdC1kaWZmdG9vbC0taGVscGVyLgorICoKKyAqIEFueSBhcmd1bWVudHMgdGhhdCBhcmUgdW5rbm93biB0byB0aGlzIHNjcmlwdCBhcmUgZm9yd2FyZGVkIHRvICdnaXQgZGlmZicuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEpvaGFubmVzIFNjaGluZGVsaW4KKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworc3RhdGljIGludCB0cnVzdF9leGl0X2NvZGU7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsdGluX2RpZmZ0b29sX3VzYWdlW10gPSB7CisJTl8oImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgZGlmZnRvb2xfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImRpZmZ0b29sLnRydXN0ZXhpdGNvZGUiKSkgeworCQl0cnVzdF9leGl0X2NvZGUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IHByaW50X3Rvb2xfaGVscCh2b2lkKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgIm1lcmdldG9vbCIsICItLXRvb2wtaGVscD1kaWZmIiwgTlVMTCB9OworCXJldHVybiBydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fR0lUX0NNRCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaW5kZXhfaW5mbyhjaGFyICpwLCBpbnQgKm1vZGUxLCBpbnQgKm1vZGUyLAorCQkJICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZDEsIHN0cnVjdCBvYmplY3RfaWQgKm9pZDIsCisJCQkgICAgY2hhciAqc3RhdHVzKQoreworCWlmICgqcCAhPSAnOicpCisJCXJldHVybiBlcnJvcigiZXhwZWN0ZWQgJzonLCBnb3QgJyVjJyIsICpwKTsKKwkqbW9kZTEgPSAoaW50KXN0cnRvbChwICsgMSwgJnAsIDgpOworCWlmICgqcCAhPSAnICcpCisJCXJldHVybiBlcnJvcigiZXhwZWN0ZWQgJyAnLCBnb3QgJyVjJyIsICpwKTsKKwkqbW9kZTIgPSAoaW50KXN0cnRvbChwICsgMSwgJnAsIDgpOworCWlmICgqcCAhPSAnICcpCisJCXJldHVybiBlcnJvcigiZXhwZWN0ZWQgJyAnLCBnb3QgJyVjJyIsICpwKTsKKwlpZiAocGFyc2Vfb2lkX2hleCgrK3AsIG9pZDEsIChjb25zdCBjaGFyICoqKSZwKSkKKwkJcmV0dXJuIGVycm9yKCJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCAnJXMnIiwgcCk7CisJaWYgKCpwICE9ICcgJykKKwkJcmV0dXJuIGVycm9yKCJleHBlY3RlZCAnICcsIGdvdCAnJWMnIiwgKnApOworCWlmIChwYXJzZV9vaWRfaGV4KCsrcCwgb2lkMiwgKGNvbnN0IGNoYXIgKiopJnApKQorCQlyZXR1cm4gZXJyb3IoImV4cGVjdGVkIG9iamVjdCBJRCwgZ290ICclcyciLCBwKTsKKwlpZiAoKnAgIT0gJyAnKQorCQlyZXR1cm4gZXJyb3IoImV4cGVjdGVkICcgJywgZ290ICclYyciLCAqcCk7CisJKnN0YXR1cyA9ICorK3A7CisJaWYgKCEqc3RhdHVzKQorCQlyZXR1cm4gZXJyb3IoIm1pc3Npbmcgc3RhdHVzIik7CisJaWYgKHBbMV0gJiYgIWlzZGlnaXQocFsxXSkpCisJCXJldHVybiBlcnJvcigidW5leHBlY3RlZCB0cmFpbGVyOiAnJXMnIiwgcCArIDEpOworCXJldHVybiAwOworfQorCisvKgorICogUmVtb3ZlIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tICR3b3JrZGlyCisgKiBiZWZvcmUgc3RhcnRpbmcgdG8gYXZvaWQgZG91YmxlIHNsYXNoZXMgaW4gc3ltbGluayB0YXJnZXRzLgorICovCitzdGF0aWMgdm9pZCBhZGRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpidWYsIHNpemVfdCBiYXNlX2xlbiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJidWZfc2V0bGVuKGJ1ZiwgYmFzZV9sZW4pOworCWlmIChidWYtPmxlbiAmJiBidWYtPmJ1ZltidWYtPmxlbiAtIDFdICE9ICcvJykKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy8nKTsKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgcGF0aCk7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBjYW4gc2ltcGx5IHJldXNlIHRoZSBmaWxlIGluIHRoZSB3b3JrdHJlZS4KKyAqLworc3RhdGljIGludCB1c2Vfd3RfZmlsZShjb25zdCBjaGFyICp3b3JrZGlyLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IHVzZSA9IDA7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIHdvcmtkaXIpOworCWFkZF9wYXRoKCZidWYsIGJ1Zi5sZW4sIG5hbWUpOworCisJaWYgKCFsc3RhdChidWYuYnVmLCAmc3QpICYmICFTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgd3Rfb2lkOworCQlpbnQgZmQgPSBvcGVuKGJ1Zi5idWYsIE9fUkRPTkxZKTsKKworCQlpZiAoZmQgPj0gMCAmJgorCQkgICAgIWluZGV4X2ZkKCZ0aGVfaW5kZXgsICZ3dF9vaWQsIGZkLCAmc3QsIE9CSl9CTE9CLCBuYW1lLCAwKSkgeworCQkJaWYgKGlzX251bGxfb2lkKG9pZCkpIHsKKwkJCQlvaWRjcHkob2lkLCAmd3Rfb2lkKTsKKwkJCQl1c2UgPSAxOworCQkJfSBlbHNlIGlmIChvaWRlcShvaWQsICZ3dF9vaWQpKQorCQkJCXVzZSA9IDE7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiB1c2U7Cit9CisKK3N0cnVjdCB3b3JraW5nX3RyZWVfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudHJ5OworCWNoYXIgcGF0aFtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgd29ya2luZ190cmVlX2VudHJ5X2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkJICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkJICBjb25zdCB2b2lkICp1bnVzZWRfa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3Qgd29ya2luZ190cmVlX2VudHJ5ICphLCAqYjsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IHdvcmtpbmdfdHJlZV9lbnRyeSwgZW50cnkpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3Qgd29ya2luZ190cmVlX2VudHJ5LCBlbnRyeSk7CisKKwlyZXR1cm4gc3RyY21wKGEtPnBhdGgsIGItPnBhdGgpOworfQorCisvKgorICogVGhlIGBsZWZ0YCBhbmQgYHJpZ2h0YCBlbnRyaWVzIGhvbGQgcGF0aHMgZm9yIHRoZSBzeW1saW5rcyBoYXNobWFwLAorICogYW5kIGEgU0hBLTEgc3Vycm91bmRlZCBieSBicmllZiB0ZXh0IGZvciBzdWJtb2R1bGVzLgorICovCitzdHJ1Y3QgcGFpcl9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnk7CisJY2hhciBsZWZ0W1BBVEhfTUFYXSwgcmlnaHRbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgcGF0aFtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgcGFpcl9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkgICAgY29uc3Qgdm9pZCAqdW51c2VkX2tleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHBhaXJfZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgcGFpcl9lbnRyeSwgZW50cnkpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgcGFpcl9lbnRyeSwgZW50cnkpOworCisJcmV0dXJuIHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2xlZnRfb3JfcmlnaHQoc3RydWN0IGhhc2htYXAgKm1hcCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmNvbnRlbnQsIGludCBpc19yaWdodCkKK3sKKwlzdHJ1Y3QgcGFpcl9lbnRyeSAqZSwgKmV4aXN0aW5nOworCisJRkxFWF9BTExPQ19TVFIoZSwgcGF0aCwgcGF0aCk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnRyeSwgc3RyaGFzaChwYXRoKSk7CisJZXhpc3RpbmcgPSBoYXNobWFwX2dldF9lbnRyeShtYXAsIGUsIGVudHJ5LCBOVUxMKTsKKwlpZiAoZXhpc3RpbmcpIHsKKwkJZnJlZShlKTsKKwkJZSA9IGV4aXN0aW5nOworCX0gZWxzZSB7CisJCWUtPmxlZnRbMF0gPSBlLT5yaWdodFswXSA9ICdcMCc7CisJCWhhc2htYXBfYWRkKG1hcCwgJmUtPmVudHJ5KTsKKwl9CisJc3RybGNweShpc19yaWdodCA/IGUtPnJpZ2h0IDogZS0+bGVmdCwgY29udGVudCwgUEFUSF9NQVgpOworfQorCitzdHJ1Y3QgcGF0aF9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnk7CisJY2hhciBwYXRoW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGludCBwYXRoX2VudHJ5X2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICBjb25zdCB2b2lkICprZXkpCit7CisJY29uc3Qgc3RydWN0IHBhdGhfZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgcGF0aF9lbnRyeSwgZW50cnkpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgcGF0aF9lbnRyeSwgZW50cnkpOworCisJcmV0dXJuIHN0cmNtcChhLT5wYXRoLCBrZXkgPyBrZXkgOiBiLT5wYXRoKTsKK30KKworc3RhdGljIHZvaWQgY2hhbmdlZF9maWxlcyhzdHJ1Y3QgaGFzaG1hcCAqcmVzdWx0LCBjb25zdCBjaGFyICppbmRleF9wYXRoLAorCQkJICBjb25zdCBjaGFyICp3b3JrZGlyKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHVwZGF0ZV9pbmRleCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBkaWZmX2ZpbGVzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgaW5kZXhfZW52ID0gU1RSQlVGX0lOSVQsIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmdpdF9kaXIgPSBhYnNvbHV0ZV9wYXRoKGdldF9naXRfZGlyKCkpLCAqZW52W10gPSB7CisJCU5VTEwsIE5VTEwKKwl9OworCUZJTEUgKmZwOworCisJc3RyYnVmX2FkZGYoJmluZGV4X2VudiwgIkdJVF9JTkRFWF9GSUxFPSVzIiwgaW5kZXhfcGF0aCk7CisJZW52WzBdID0gaW5kZXhfZW52LmJ1ZjsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJnVwZGF0ZV9pbmRleC5hcmdzLAorCQkJICItLWdpdC1kaXIiLCBnaXRfZGlyLCAiLS13b3JrLXRyZWUiLCB3b3JrZGlyLAorCQkJICJ1cGRhdGUtaW5kZXgiLCAiLS1yZWFsbHktcmVmcmVzaCIsICItcSIsCisJCQkgIi0tdW5tZXJnZWQiLCBOVUxMKTsKKwl1cGRhdGVfaW5kZXgubm9fc3RkaW4gPSAxOworCXVwZGF0ZV9pbmRleC5ub19zdGRvdXQgPSAxOworCXVwZGF0ZV9pbmRleC5ub19zdGRlcnIgPSAxOworCXVwZGF0ZV9pbmRleC5naXRfY21kID0gMTsKKwl1cGRhdGVfaW5kZXgudXNlX3NoZWxsID0gMDsKKwl1cGRhdGVfaW5kZXguY2xlYW5fb25fZXhpdCA9IDE7CisJdXBkYXRlX2luZGV4LmRpciA9IHdvcmtkaXI7CisJdXBkYXRlX2luZGV4LmVudiA9IGVudjsKKwkvKiBJZ25vcmUgYW55IGVycm9ycyBvZiB1cGRhdGUtaW5kZXggKi8KKwlydW5fY29tbWFuZCgmdXBkYXRlX2luZGV4KTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmRpZmZfZmlsZXMuYXJncywKKwkJCSAiLS1naXQtZGlyIiwgZ2l0X2RpciwgIi0td29yay10cmVlIiwgd29ya2RpciwKKwkJCSAiZGlmZi1maWxlcyIsICItLW5hbWUtb25seSIsICIteiIsIE5VTEwpOworCWRpZmZfZmlsZXMubm9fc3RkaW4gPSAxOworCWRpZmZfZmlsZXMuZ2l0X2NtZCA9IDE7CisJZGlmZl9maWxlcy51c2Vfc2hlbGwgPSAwOworCWRpZmZfZmlsZXMuY2xlYW5fb25fZXhpdCA9IDE7CisJZGlmZl9maWxlcy5vdXQgPSAtMTsKKwlkaWZmX2ZpbGVzLmRpciA9IHdvcmtkaXI7CisJZGlmZl9maWxlcy5lbnYgPSBlbnY7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmRpZmZfZmlsZXMpKQorCQlkaWUoImNvdWxkIG5vdCBvYnRhaW4gcmF3IGRpZmYiKTsKKwlmcCA9IHhmZG9wZW4oZGlmZl9maWxlcy5vdXQsICJyIik7CisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZV9udWwoJmJ1ZiwgZnApKSB7CisJCXN0cnVjdCBwYXRoX2VudHJ5ICplbnRyeTsKKwkJRkxFWF9BTExPQ19TVFIoZW50cnksIHBhdGgsIGJ1Zi5idWYpOworCQloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnRyeSwgc3RyaGFzaChidWYuYnVmKSk7CisJCWhhc2htYXBfYWRkKHJlc3VsdCwgJmVudHJ5LT5lbnRyeSk7CisJfQorCWZjbG9zZShmcCk7CisJaWYgKGZpbmlzaF9jb21tYW5kKCZkaWZmX2ZpbGVzKSkKKwkJZGllKCJkaWZmLWZpbGVzIGRpZCBub3QgZXhpdCBwcm9wZXJseSIpOworCXN0cmJ1Zl9yZWxlYXNlKCZpbmRleF9lbnYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBleGl0X2NsZWFudXAoY29uc3QgY2hhciAqdG1wZGlyLCBpbnQgZXhpdF9jb2RlKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZHN0cigmYnVmLCB0bXBkaXIpOworCXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJmJ1ZiwgMCk7CisJaWYgKGV4aXRfY29kZSkKKwkJd2FybmluZyhfKCJmYWlsZWQ6ICVkIiksIGV4aXRfY29kZSk7CisJZXhpdChleGl0X2NvZGUpOworfQorCitzdGF0aWMgaW50IGVuc3VyZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGNoYXIgKnBhdGgpCit7CisJc3dpdGNoIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHBhdGgpKSB7CisJCWNhc2UgU0NMRF9PSzoKKwkJY2FzZSBTQ0xEX0VYSVNUUzoKKwkJCXJldHVybiAwOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyAiCisJCQkJICAgICAgICJvZiAnJXMnIiksIHBhdGgpOworCX0KK30KKworLyoKKyAqIFVuY29uZGl0aW9uYWwgd3JpdGluZyBvZiBhIHBsYWluIHJlZ3VsYXIgZmlsZSBpcyB3aGF0CisgKiAiZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYiIHdhbnRzIHRvIGRvIGZvciBzeW1saW5rcy4gIFdlIGFyZSBwcmVwYXJpbmcgdHdvCisgKiB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgdG8gYmUgZmVkIHRvIGEgR2l0LXVuYXdhcmUgdG9vbCB0aGF0IGtub3dzIGhvdyB0bworICogc2hvdyBhIGRpZmYgb2YgdHdvIGRpcmVjdG9yaWVzIChlLmcuICJkaWZmIC1yIEEgQiIpLgorICoKKyAqIEJlY2F1c2UgdGhlIHRvb2wgaXMgR2l0LXVuYXdhcmUsIGlmIGEgc3ltYm9saWMgbGluayBhcHBlYXJzIGluIGVpdGhlciBvZgorICogdGhlc2UgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLCBpdCB3aWxsIHRyeSB0byBkZXJlZmVyZW5jZSBhbmQgc2hvdyB0aGUKKyAqIGRpZmZlcmVuY2Ugb2YgdGhlIHRhcmdldCBvZiB0aGUgc3ltYm9saWMgbGluaywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudCwKKyAqIGFzIHRoZSBnb2FsIG9mIHRoZSBkaXItZGlmZiBtb2RlIGlzIHRvIHByb2R1Y2UgYW4gb3V0cHV0IHRoYXQgaXMgbG9naWNhbGx5CisgKiBlcXVpdmFsZW50IHRvIHdoYXQgImdpdCBkaWZmIiBwcm9kdWNlcy4KKyAqCisgKiBNb3N0IGltcG9ydGFudGx5LCB3ZSB3YW50IHRvIGdldCB0ZXh0dWFsIGNvbXBhcmlzb24gb2YgdGhlIHJlc3VsdCBvZiB0aGUKKyAqIHJlYWRsaW5rKDIpLiAgZ2V0X3N5bWxpbmsoKSBwcm92aWRlcyB0aGF0LS0taXQgcmV0dXJucyB0aGUgY29udGVudHMgb2YKKyAqIHRoZSBzeW1saW5rIHRoYXQgZ2V0cyB3cml0dGVuIHRvIGEgcmVndWxhciBmaWxlIHRvIGZvcmNlIHRoZSBleHRlcm5hbCB0b29sCisgKiB0byBjb21wYXJlIHRoZSByZWFkbGluaygyKSByZXN1bHQgYXMgdGV4dCwgZXZlbiBvbiBhIGZpbGVzeXN0ZW0gdGhhdCBpcworICogY2FwYWJsZSBvZiBkb2luZyBhIHN5bWJvbGljIGxpbmsuCisgKi8KK3N0YXRpYyBjaGFyICpnZXRfc3ltbGluayhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqZGF0YTsKKwlpZiAoaXNfbnVsbF9vaWQob2lkKSkgeworCQkvKiBUaGUgc3ltbGluayBpcyB1bmtub3duIHRvIEdpdCBzbyByZWFkIGZyb20gdGhlIGZpbGVzeXN0ZW0gKi8KKwkJc3RydWN0IHN0cmJ1ZiBsaW5rID0gU1RSQlVGX0lOSVQ7CisJCWlmIChoYXNfc3ltbGlua3MpIHsKKwkJCWlmIChzdHJidWZfcmVhZGxpbmsoJmxpbmssIHBhdGgsIHN0cmxlbihwYXRoKSkpCisJCQkJZGllKF8oImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiKSwgcGF0aCk7CisJCX0gZWxzZSBpZiAoc3RyYnVmX3JlYWRfZmlsZSgmbGluaywgcGF0aCwgMTI4KSkKKwkJCWRpZShfKCJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiKSwgcGF0aCk7CisKKwkJZGF0YSA9IHN0cmJ1Zl9kZXRhY2goJmxpbmssIE5VTEwpOworCX0gZWxzZSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlkYXRhID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghZGF0YSkKKwkJCWRpZShfKCJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiKSwKKwkJCQlvaWRfdG9faGV4KG9pZCksIHBhdGgpOworCX0KKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X3BhdGgodW5zaWduZWQgbW9kZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlpbnQgcmV0OworCisJY2UgPSBtYWtlX3RyYW5zaWVudF9jYWNoZV9lbnRyeShtb2RlLCBvaWQsIHBhdGgsIDApOworCXJldCA9IGNoZWNrb3V0X2VudHJ5KGNlLCBzdGF0ZSwgTlVMTCwgTlVMTCk7CisKKwlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ1bl9kaXJfZGlmZihjb25zdCBjaGFyICpleHRjbWQsIGludCBzeW1saW5rcywgY29uc3QgY2hhciAqcHJlZml4LAorCQkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNoYXIgdG1wZGlyW1BBVEhfTUFYXTsKKwlzdHJ1Y3Qgc3RyYnVmIGluZm8gPSBTVFJCVUZfSU5JVCwgbHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJwYXRoID0gU1RSQlVGX0lOSVQsIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbGRpciA9IFNUUkJVRl9JTklULCByZGlyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB3dGRpciA9IFNUUkJVRl9JTklUOworCWNoYXIgKmxiYXNlX2RpciwgKnJiYXNlX2RpcjsKKwlzaXplX3QgbGRpcl9sZW4sIHJkaXJfbGVuLCB3dGRpcl9sZW47CisJY29uc3QgY2hhciAqd29ya2RpciwgKnRtcDsKKwlpbnQgcmV0ID0gMCwgaTsKKwlGSUxFICpmcDsKKwlzdHJ1Y3QgaGFzaG1hcCB3b3JraW5nX3RyZWVfZHVwcywgc3VibW9kdWxlcywgc3ltbGlua3MyOworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgcGFpcl9lbnRyeSAqZW50cnk7CisJc3RydWN0IGluZGV4X3N0YXRlIHd0aW5kZXg7CisJc3RydWN0IGNoZWNrb3V0IGxzdGF0ZSwgcnN0YXRlOworCWludCByYywgZmxhZ3MgPSBSVU5fR0lUX0NNRCwgZXJyID0gMDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICpoZWxwZXJfYXJndltdID0geyAiZGlmZnRvb2wtLWhlbHBlciIsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3QgaGFzaG1hcCB3dF9tb2RpZmllZCwgdG1wX21vZGlmaWVkOworCWludCBpbmRpY2VzX2xvYWRlZCA9IDA7CisKKwl3b3JrZGlyID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKworCS8qIFNldHVwIHRlbXAgZGlyZWN0b3JpZXMgKi8KKwl0bXAgPSBnZXRlbnYoIlRNUERJUiIpOworCXhzbnByaW50Zih0bXBkaXIsIHNpemVvZih0bXBkaXIpLCAiJXMvZ2l0LWRpZmZ0b29sLlhYWFhYWCIsIHRtcCA/IHRtcCA6ICIvdG1wIik7CisJaWYgKCFta2R0ZW1wKHRtcGRpcikpCisJCXJldHVybiBlcnJvcigiY291bGQgbm90IGNyZWF0ZSAnJXMnIiwgdG1wZGlyKTsKKwlzdHJidWZfYWRkZigmbGRpciwgIiVzL2xlZnQvIiwgdG1wZGlyKTsKKwlzdHJidWZfYWRkZigmcmRpciwgIiVzL3JpZ2h0LyIsIHRtcGRpcik7CisJc3RyYnVmX2FkZHN0cigmd3RkaXIsIHdvcmtkaXIpOworCWlmICghd3RkaXIubGVuIHx8ICFpc19kaXJfc2VwKHd0ZGlyLmJ1Zlt3dGRpci5sZW4gLSAxXSkpCisJCXN0cmJ1Zl9hZGRjaCgmd3RkaXIsICcvJyk7CisJbWtkaXIobGRpci5idWYsIDA3MDApOworCW1rZGlyKHJkaXIuYnVmLCAwNzAwKTsKKworCW1lbXNldCgmd3RpbmRleCwgMCwgc2l6ZW9mKHd0aW5kZXgpKTsKKworCW1lbXNldCgmbHN0YXRlLCAwLCBzaXplb2YobHN0YXRlKSk7CisJbHN0YXRlLmJhc2VfZGlyID0gbGJhc2VfZGlyID0geHN0cmR1cChsZGlyLmJ1Zik7CisJbHN0YXRlLmJhc2VfZGlyX2xlbiA9IGxkaXIubGVuOworCWxzdGF0ZS5mb3JjZSA9IDE7CisJbWVtc2V0KCZyc3RhdGUsIDAsIHNpemVvZihyc3RhdGUpKTsKKwlyc3RhdGUuYmFzZV9kaXIgPSByYmFzZV9kaXIgPSB4c3RyZHVwKHJkaXIuYnVmKTsKKwlyc3RhdGUuYmFzZV9kaXJfbGVuID0gcmRpci5sZW47CisJcnN0YXRlLmZvcmNlID0gMTsKKworCWxkaXJfbGVuID0gbGRpci5sZW47CisJcmRpcl9sZW4gPSByZGlyLmxlbjsKKwl3dGRpcl9sZW4gPSB3dGRpci5sZW47CisKKwloYXNobWFwX2luaXQoJndvcmtpbmdfdHJlZV9kdXBzLCB3b3JraW5nX3RyZWVfZW50cnlfY21wLCBOVUxMLCAwKTsKKwloYXNobWFwX2luaXQoJnN1Ym1vZHVsZXMsIHBhaXJfY21wLCBOVUxMLCAwKTsKKwloYXNobWFwX2luaXQoJnN5bWxpbmtzMiwgcGFpcl9jbXAsIE5VTEwsIDApOworCisJY2hpbGQubm9fc3RkaW4gPSAxOworCWNoaWxkLmdpdF9jbWQgPSAxOworCWNoaWxkLnVzZV9zaGVsbCA9IDA7CisJY2hpbGQuY2xlYW5fb25fZXhpdCA9IDE7CisJY2hpbGQuZGlyID0gcHJlZml4OworCWNoaWxkLm91dCA9IC0xOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNoaWxkLmFyZ3MsICJkaWZmIiwgIi0tcmF3IiwgIi0tbm8tYWJicmV2IiwgIi16IiwKKwkJCSBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsIGFyZ3ZbaV0pOworCWlmIChzdGFydF9jb21tYW5kKCZjaGlsZCkpCisJCWRpZSgiY291bGQgbm90IG9idGFpbiByYXcgZGlmZiIpOworCWZwID0geGZkb3BlbihjaGlsZC5vdXQsICJyIik7CisKKwkvKiBCdWlsZCBpbmRleCBpbmZvIGZvciBsZWZ0IGFuZCByaWdodCBzaWRlcyBvZiB0aGUgZGlmZiAqLworCWkgPSAwOworCXdoaWxlICghc3RyYnVmX2dldGxpbmVfbnVsKCZpbmZvLCBmcCkpIHsKKwkJaW50IGxtb2RlLCBybW9kZTsKKwkJc3RydWN0IG9iamVjdF9pZCBsb2lkLCByb2lkOworCQljaGFyIHN0YXR1czsKKwkJY29uc3QgY2hhciAqc3JjX3BhdGgsICpkc3RfcGF0aDsKKworCQlpZiAoc3RhcnRzX3dpdGgoaW5mby5idWYsICI6OiIpKQorCQkJZGllKE5fKCJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgIgorCQkJICAgICAgICJub3Qgc3VwcG9ydGVkIGluXG4iCisJCQkgICAgICAgImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iKSk7CisKKwkJaWYgKHBhcnNlX2luZGV4X2luZm8oaW5mby5idWYsICZsbW9kZSwgJnJtb2RlLCAmbG9pZCwgJnJvaWQsCisJCQkJICAgICAmc3RhdHVzKSkKKwkJCWJyZWFrOworCQlpZiAoc3RyYnVmX2dldGxpbmVfbnVsKCZscGF0aCwgZnApKQorCQkJYnJlYWs7CisJCXNyY19wYXRoID0gbHBhdGguYnVmOworCisJCWkrKzsKKwkJaWYgKHN0YXR1cyAhPSAnQycgJiYgc3RhdHVzICE9ICdSJykgeworCQkJZHN0X3BhdGggPSBzcmNfcGF0aDsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHJidWZfZ2V0bGluZV9udWwoJnJwYXRoLCBmcCkpCisJCQkJYnJlYWs7CisJCQlkc3RfcGF0aCA9IHJwYXRoLmJ1ZjsKKwkJfQorCisJCWlmIChTX0lTR0lUTElOSyhsbW9kZSkgfHwgU19JU0dJVExJTksocm1vZGUpKSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiU3VicHJvamVjdCBjb21taXQgJXMiLAorCQkJCSAgICBvaWRfdG9faGV4KCZsb2lkKSk7CisJCQlhZGRfbGVmdF9vcl9yaWdodCgmc3VibW9kdWxlcywgc3JjX3BhdGgsIGJ1Zi5idWYsIDApOworCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlN1YnByb2plY3QgY29tbWl0ICVzIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmcm9pZCkpOworCQkJaWYgKG9pZGVxKCZsb2lkLCAmcm9pZCkpCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiLWRpcnR5Iik7CisJCQlhZGRfbGVmdF9vcl9yaWdodCgmc3VibW9kdWxlcywgZHN0X3BhdGgsIGJ1Zi5idWYsIDEpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoU19JU0xOSyhsbW9kZSkpIHsKKwkJCWNoYXIgKmNvbnRlbnQgPSBnZXRfc3ltbGluaygmbG9pZCwgc3JjX3BhdGgpOworCQkJYWRkX2xlZnRfb3JfcmlnaHQoJnN5bWxpbmtzMiwgc3JjX3BhdGgsIGNvbnRlbnQsIDApOworCQkJZnJlZShjb250ZW50KTsKKwkJfQorCisJCWlmIChTX0lTTE5LKHJtb2RlKSkgeworCQkJY2hhciAqY29udGVudCA9IGdldF9zeW1saW5rKCZyb2lkLCBkc3RfcGF0aCk7CisJCQlhZGRfbGVmdF9vcl9yaWdodCgmc3ltbGlua3MyLCBkc3RfcGF0aCwgY29udGVudCwgMSk7CisJCQlmcmVlKGNvbnRlbnQpOworCQl9CisKKwkJaWYgKGxtb2RlICYmIHN0YXR1cyAhPSAnQycpIHsKKwkJCWlmIChjaGVja291dF9wYXRoKGxtb2RlLCAmbG9pZCwgc3JjX3BhdGgsICZsc3RhdGUpKSB7CisJCQkJcmV0ID0gZXJyb3IoImNvdWxkIG5vdCB3cml0ZSAnJXMnIiwgc3JjX3BhdGgpOworCQkJCWdvdG8gZmluaXNoOworCQkJfQorCQl9CisKKwkJaWYgKHJtb2RlICYmICFTX0lTTE5LKHJtb2RlKSkgeworCQkJc3RydWN0IHdvcmtpbmdfdHJlZV9lbnRyeSAqZW50cnk7CisKKwkJCS8qIEF2b2lkIGR1cGxpY2F0ZSB3b3JraW5nX3RyZWUgZW50cmllcyAqLworCQkJRkxFWF9BTExPQ19TVFIoZW50cnksIHBhdGgsIGRzdF9wYXRoKTsKKwkJCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudHJ5LCBzdHJoYXNoKGRzdF9wYXRoKSk7CisJCQlpZiAoaGFzaG1hcF9nZXQoJndvcmtpbmdfdHJlZV9kdXBzLCAmZW50cnktPmVudHJ5LAorCQkJCQlOVUxMKSkgeworCQkJCWZyZWUoZW50cnkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaGFzaG1hcF9hZGQoJndvcmtpbmdfdHJlZV9kdXBzLCAmZW50cnktPmVudHJ5KTsKKworCQkJaWYgKCF1c2Vfd3RfZmlsZSh3b3JrZGlyLCBkc3RfcGF0aCwgJnJvaWQpKSB7CisJCQkJaWYgKGNoZWNrb3V0X3BhdGgocm1vZGUsICZyb2lkLCBkc3RfcGF0aCwKKwkJCQkJCSAgJnJzdGF0ZSkpIHsKKwkJCQkJcmV0ID0gZXJyb3IoImNvdWxkIG5vdCB3cml0ZSAnJXMnIiwKKwkJCQkJCSAgICBkc3RfcGF0aCk7CisJCQkJCWdvdG8gZmluaXNoOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoIWlzX251bGxfb2lkKCZyb2lkKSkgeworCQkJCS8qCisJCQkJICogQ2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlIG5lZWQgc3BlY2lhbAorCQkJCSAqIHRyZWF0bWVudCBzaW5jZSB0aGV5IGFyZSBub3QgcGFydCBvZiB0aGUKKwkJCQkgKiBpbmRleC4KKwkJCQkgKi8KKwkJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlMiA9CisJCQkJCW1ha2VfY2FjaGVfZW50cnkoJnd0aW5kZXgsIHJtb2RlLCAmcm9pZCwKKwkJCQkJCQkgZHN0X3BhdGgsIDAsIDApOworCisJCQkJYWRkX2luZGV4X2VudHJ5KCZ3dGluZGV4LCBjZTIsCisJCQkJCQlBRERfQ0FDSEVfSlVTVF9BUFBFTkQpOworCisJCQkJYWRkX3BhdGgoJnJkaXIsIHJkaXJfbGVuLCBkc3RfcGF0aCk7CisJCQkJaWYgKGVuc3VyZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHJkaXIuYnVmKSkgeworCQkJCQlyZXQgPSBlcnJvcigiY291bGQgbm90IGNyZWF0ZSAiCisJCQkJCQkgICAgImRpcmVjdG9yeSBmb3IgJyVzJyIsCisJCQkJCQkgICAgZHN0X3BhdGgpOworCQkJCQlnb3RvIGZpbmlzaDsKKwkJCQl9CisJCQkJYWRkX3BhdGgoJnd0ZGlyLCB3dGRpcl9sZW4sIGRzdF9wYXRoKTsKKwkJCQlpZiAoc3ltbGlua3MpIHsKKwkJCQkJaWYgKHN5bWxpbmsod3RkaXIuYnVmLCByZGlyLmJ1ZikpIHsKKwkJCQkJCXJldCA9IGVycm9yX2Vycm5vKCJjb3VsZCBub3Qgc3ltbGluayAnJXMnIHRvICclcyciLCB3dGRpci5idWYsIHJkaXIuYnVmKTsKKwkJCQkJCWdvdG8gZmluaXNoOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IHN0YXQgc3Q7CisJCQkJCWlmIChzdGF0KHd0ZGlyLmJ1ZiwgJnN0KSkKKwkJCQkJCXN0LnN0X21vZGUgPSAwNjQ0OworCQkJCQlpZiAoY29weV9maWxlKHJkaXIuYnVmLCB3dGRpci5idWYsCisJCQkJCQkgICAgICBzdC5zdF9tb2RlKSkgeworCQkJCQkJcmV0ID0gZXJyb3IoImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIsIHd0ZGlyLmJ1ZiwgcmRpci5idWYpOworCQkJCQkJZ290byBmaW5pc2g7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlmY2xvc2UoZnApOworCWZwID0gTlVMTDsKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNoaWxkKSkgeworCQlyZXQgPSBlcnJvcigiZXJyb3Igb2NjdXJyZWQgcnVubmluZyBkaWZmIC0tcmF3Iik7CisJCWdvdG8gZmluaXNoOworCX0KKworCWlmICghaSkKKwkJZ290byBmaW5pc2g7CisKKwkvKgorCSAqIENoYW5nZXMgdG8gc3VibW9kdWxlcyByZXF1aXJlIHNwZWNpYWwgdHJlYXRtZW50LlRoaXMgbG9vcCB3cml0ZXMgYQorCSAqIHRlbXBvcmFyeSBmaWxlIHRvIGJvdGggdGhlIGxlZnQgYW5kIHJpZ2h0IGRpcmVjdG9yaWVzIHRvIHNob3cgdGhlCisJICogY2hhbmdlIGluIHRoZSByZWNvcmRlZCBTSEExIGZvciB0aGUgc3VibW9kdWxlLgorCSAqLworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJnN1Ym1vZHVsZXMsICZpdGVyLCBlbnRyeSwKKwkJCQllbnRyeSAvKiBtZW1iZXIgbmFtZSAqLykgeworCQlpZiAoKmVudHJ5LT5sZWZ0KSB7CisJCQlhZGRfcGF0aCgmbGRpciwgbGRpcl9sZW4sIGVudHJ5LT5wYXRoKTsKKwkJCWVuc3VyZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGxkaXIuYnVmKTsKKwkJCXdyaXRlX2ZpbGUobGRpci5idWYsICIlcyIsIGVudHJ5LT5sZWZ0KTsKKwkJfQorCQlpZiAoKmVudHJ5LT5yaWdodCkgeworCQkJYWRkX3BhdGgoJnJkaXIsIHJkaXJfbGVuLCBlbnRyeS0+cGF0aCk7CisJCQllbnN1cmVfbGVhZGluZ19kaXJlY3RvcmllcyhyZGlyLmJ1Zik7CisJCQl3cml0ZV9maWxlKHJkaXIuYnVmLCAiJXMiLCBlbnRyeS0+cmlnaHQpOworCQl9CisJfQorCisJLyoKKwkgKiBTeW1ib2xpYyBsaW5rcyByZXF1aXJlIHNwZWNpYWwgdHJlYXRtZW50LlRoZSBzdGFuZGFyZCAiZ2l0IGRpZmYiCisJICogc2hvd3Mgb25seSB0aGUgbGluayBpdHNlbGYsIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIGxpbmsgdGFyZ2V0LgorCSAqIFRoaXMgbG9vcCByZXBsaWNhdGVzIHRoYXQgYmVoYXZpb3IuCisJICovCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmc3ltbGlua3MyLCAmaXRlciwgZW50cnksCisJCQkJZW50cnkgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJaWYgKCplbnRyeS0+bGVmdCkgeworCQkJYWRkX3BhdGgoJmxkaXIsIGxkaXJfbGVuLCBlbnRyeS0+cGF0aCk7CisJCQllbnN1cmVfbGVhZGluZ19kaXJlY3RvcmllcyhsZGlyLmJ1Zik7CisJCQl3cml0ZV9maWxlKGxkaXIuYnVmLCAiJXMiLCBlbnRyeS0+bGVmdCk7CisJCX0KKwkJaWYgKCplbnRyeS0+cmlnaHQpIHsKKwkJCWFkZF9wYXRoKCZyZGlyLCByZGlyX2xlbiwgZW50cnktPnBhdGgpOworCQkJZW5zdXJlX2xlYWRpbmdfZGlyZWN0b3JpZXMocmRpci5idWYpOworCQkJd3JpdGVfZmlsZShyZGlyLmJ1ZiwgIiVzIiwgZW50cnktPnJpZ2h0KTsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJc3RyYnVmX3NldGxlbigmbGRpciwgbGRpcl9sZW4pOworCWhlbHBlcl9hcmd2WzFdID0gbGRpci5idWY7CisJc3RyYnVmX3NldGxlbigmcmRpciwgcmRpcl9sZW4pOworCWhlbHBlcl9hcmd2WzJdID0gcmRpci5idWY7CisKKwlpZiAoZXh0Y21kKSB7CisJCWhlbHBlcl9hcmd2WzBdID0gZXh0Y21kOworCQlmbGFncyA9IDA7CisJfSBlbHNlCisJCXNldGVudigiR0lUX0RJRkZUT09MX0RJUkRJRkYiLCAidHJ1ZSIsIDEpOworCXJjID0gcnVuX2NvbW1hbmRfdl9vcHQoaGVscGVyX2FyZ3YsIGZsYWdzKTsKKworCS8qCisJICogSWYgdGhlIGRpZmYgaW5jbHVkZXMgd29ya2luZyBjb3B5IGZpbGVzIGFuZCB0aG9zZQorCSAqIGZpbGVzIHdlcmUgbW9kaWZpZWQgZHVyaW5nIHRoZSBkaWZmLCB0aGVuIHRoZSBjaGFuZ2VzCisJICogc2hvdWxkIGJlIGNvcGllZCBiYWNrIHRvIHRoZSB3b3JraW5nIHRyZWUuCisJICogRG8gbm90IGNvcHkgYmFjayBmaWxlcyB3aGVuIHN5bWxpbmtzIGFyZSB1c2VkIGFuZCB0aGUKKwkgKiBleHRlcm5hbCB0b29sIGRpZCBub3QgcmVwbGFjZSB0aGUgb3JpZ2luYWwgbGluayB3aXRoIGEgZmlsZS4KKwkgKgorCSAqIFRoZXNlIGhhc2hlcyBhcmUgbG9hZGVkIGxhemlseSBzaW5jZSB0aGV5IGFyZW4ndCBuZWVkZWQKKwkgKiBpbiB0aGUgY29tbW9uIGNhc2Ugb2YgLS1zeW1saW5rcyBhbmQgdGhlIGRpZmZ0b29sIHVwZGF0aW5nCisJICogZmlsZXMgdGhyb3VnaCB0aGUgc3ltbGluay4KKwkgKi8KKwloYXNobWFwX2luaXQoJnd0X21vZGlmaWVkLCBwYXRoX2VudHJ5X2NtcCwgTlVMTCwgd3RpbmRleC5jYWNoZV9ucik7CisJaGFzaG1hcF9pbml0KCZ0bXBfbW9kaWZpZWQsIHBhdGhfZW50cnlfY21wLCBOVUxMLCB3dGluZGV4LmNhY2hlX25yKTsKKworCWZvciAoaSA9IDA7IGkgPCB3dGluZGV4LmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGhhc2htYXBfZW50cnkgZHVtbXk7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB3dGluZGV4LmNhY2hlW2ldLT5uYW1lOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlhZGRfcGF0aCgmcmRpciwgcmRpcl9sZW4sIG5hbWUpOworCQlpZiAobHN0YXQocmRpci5idWYsICZzdCkpCisJCQljb250aW51ZTsKKworCQlpZiAoKHN5bWxpbmtzICYmIFNfSVNMTksoc3Quc3RfbW9kZSkpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFpbmRpY2VzX2xvYWRlZCkgeworCQkJc3RydWN0IGxvY2tfZmlsZSBsb2NrID0gTE9DS19JTklUOworCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzL3d0aW5kZXgiLCB0bXBkaXIpOworCQkJaWYgKGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxvY2ssIGJ1Zi5idWYsIDApIDwgMCB8fAorCQkJICAgIHdyaXRlX2xvY2tlZF9pbmRleCgmd3RpbmRleCwgJmxvY2ssIENPTU1JVF9MT0NLKSkgeworCQkJCXJldCA9IGVycm9yKCJjb3VsZCBub3Qgd3JpdGUgJXMiLCBidWYuYnVmKTsKKwkJCQlnb3RvIGZpbmlzaDsKKwkJCX0KKwkJCWNoYW5nZWRfZmlsZXMoJnd0X21vZGlmaWVkLCBidWYuYnVmLCB3b3JrZGlyKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJnJkaXIsIHJkaXJfbGVuKTsKKwkJCWNoYW5nZWRfZmlsZXMoJnRtcF9tb2RpZmllZCwgYnVmLmJ1ZiwgcmRpci5idWYpOworCQkJYWRkX3BhdGgoJnJkaXIsIHJkaXJfbGVuLCBuYW1lKTsKKwkJCWluZGljZXNfbG9hZGVkID0gMTsKKwkJfQorCisJCWhhc2htYXBfZW50cnlfaW5pdCgmZHVtbXksIHN0cmhhc2gobmFtZSkpOworCQlpZiAoaGFzaG1hcF9nZXQoJnRtcF9tb2RpZmllZCwgJmR1bW15LCBuYW1lKSkgeworCQkJYWRkX3BhdGgoJnd0ZGlyLCB3dGRpcl9sZW4sIG5hbWUpOworCQkJaWYgKGhhc2htYXBfZ2V0KCZ3dF9tb2RpZmllZCwgJmR1bW15LCBuYW1lKSkgeworCQkJCXdhcm5pbmcoXygiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iKSwKKwkJCQkJd3RkaXIuYnVmLCByZGlyLmJ1Zik7CisJCQkJd2FybmluZyhfKCJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIpKTsKKwkJCQl3YXJuaW5nKCIlcyIsICIiKTsKKwkJCQllcnIgPSAxOworCQkJfSBlbHNlIGlmICh1bmxpbmsod3RkaXIuYnVmKSB8fAorCQkJCSAgIGNvcHlfZmlsZSh3dGRpci5idWYsIHJkaXIuYnVmLCBzdC5zdF9tb2RlKSkKKwkJCQl3YXJuaW5nX2Vycm5vKF8oImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIpLAorCQkJCQkgICAgICByZGlyLmJ1Ziwgd3RkaXIuYnVmKTsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJd2FybmluZyhfKCJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iKSwgdG1wZGlyKTsKKwkJd2FybmluZyhfKCJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIpKTsKKwkJZXhpdCgxKTsKKwl9IGVsc2UKKwkJZXhpdF9jbGVhbnVwKHRtcGRpciwgcmMpOworCitmaW5pc2g6CisJaWYgKGZwKQorCQlmY2xvc2UoZnApOworCisJZnJlZShsYmFzZV9kaXIpOworCWZyZWUocmJhc2VfZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmbGRpcik7CisJc3RyYnVmX3JlbGVhc2UoJnJkaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZ3dGRpcik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ1bl9maWxlX2RpZmYoaW50IHByb21wdCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCWNvbnN0IGNoYXIgKmVudltdID0geworCQkiR0lUX1BBR0VSPSIsICJHSVRfRVhURVJOQUxfRElGRj1naXQtZGlmZnRvb2wtLWhlbHBlciIsIE5VTEwsCisJCU5VTEwKKwl9OworCWludCByZXQgPSAwLCBpOworCisJaWYgKHByb21wdCA+IDApCisJCWVudlsyXSA9ICJHSVRfRElGRlRPT0xfUFJPTVBUPXRydWUiOworCWVsc2UgaWYgKCFwcm9tcHQpCisJCWVudlsyXSA9ICJHSVRfRElGRlRPT0xfTk9fUFJPTVBUPXRydWUiOworCisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICJkaWZmIik7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBhcmd2W2ldKTsKKwlyZXQgPSBydW5fY29tbWFuZF92X29wdF9jZF9lbnYoYXJncy5hcmd2LCBSVU5fR0lUX0NNRCwgcHJlZml4LCBlbnYpOworCWV4aXQocmV0KTsKK30KKworaW50IGNtZF9kaWZmdG9vbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgdXNlX2d1aV90b29sID0gMCwgZGlyX2RpZmYgPSAwLCBwcm9tcHQgPSAtMSwgc3ltbGlua3MgPSAwLAorCSAgICB0b29sX2hlbHAgPSAwLCBub19pbmRleCA9IDA7CisJc3RhdGljIGNoYXIgKmRpZmZ0b29sX2NtZCA9IE5VTEwsICpleHRjbWQgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9kaWZmdG9vbF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdnJywgImd1aSIsICZ1c2VfZ3VpX3Rvb2wsCisJCQkgTl8oInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIikpLAorCQlPUFRfQk9PTCgnZCcsICJkaXItZGlmZiIsICZkaXJfZGlmZiwKKwkJCSBOXygicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiKSksCisJCU9QVF9TRVRfSU5UX0YoJ3knLCAibm8tcHJvbXB0IiwgJnByb21wdCwKKwkJCU5fKCJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiKSwKKwkJCTAsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9TRVRfSU5UX0YoMCwgInByb21wdCIsICZwcm9tcHQsIE5VTEwsCisJCQkxLCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfSElEREVOKSwKKwkJT1BUX0JPT0woMCwgInN5bWxpbmtzIiwgJnN5bWxpbmtzLAorCQkJIE5fKCJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIpKSwKKwkJT1BUX1NUUklORygndCcsICJ0b29sIiwgJmRpZmZ0b29sX2NtZCwgTl8oInRvb2wiKSwKKwkJCSAgIE5fKCJ1c2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wiKSksCisJCU9QVF9CT09MKDAsICJ0b29sLWhlbHAiLCAmdG9vbF9oZWxwLAorCQkJIE5fKCJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggIgorCQkJICAgICJgLS10b29sYCIpKSwKKwkJT1BUX0JPT0woMCwgInRydXN0LWV4aXQtY29kZSIsICZ0cnVzdF9leGl0X2NvZGUsCisJCQkgTl8oIm1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuIGludm9rZWQgZGlmZiAiCisJCQkgICAgInRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCBjb2RlIikpLAorCQlPUFRfU1RSSU5HKCd4JywgImV4dGNtZCIsICZleHRjbWQsIE5fKCJjb21tYW5kIiksCisJCQkgICBOXygic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIikpLAorCQlPUFRfQVJHVU1FTlQoIm5vLWluZGV4IiwgJm5vX2luZGV4LCBOXygicGFzc2VkIHRvIGBkaWZmYCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZGlmZnRvb2xfY29uZmlnLCBOVUxMKTsKKwlzeW1saW5rcyA9IGhhc19zeW1saW5rczsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9kaWZmdG9vbF9vcHRpb25zLAorCQkJICAgICBidWlsdGluX2RpZmZ0b29sX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9VTktOT1dOIHwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCisJaWYgKHRvb2xfaGVscCkKKwkJcmV0dXJuIHByaW50X3Rvb2xfaGVscCgpOworCisJaWYgKCFub19pbmRleCAmJiAhc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCWRpZShfKCJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IikpOworCisJaWYgKCFub19pbmRleCl7CisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgYWJzb2x1dGVfcGF0aChnZXRfZ2l0X2RpcigpKSwgMSk7CisJCXNldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5ULCBhYnNvbHV0ZV9wYXRoKGdldF9naXRfd29ya190cmVlKCkpLCAxKTsKKwl9IGVsc2UgaWYgKGRpcl9kaWZmKQorCQlkaWUoXygiLS1kaXItZGlmZiBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLWluZGV4IikpOworCisJaWYgKHVzZV9ndWlfdG9vbCArICEhZGlmZnRvb2xfY21kICsgISFleHRjbWQgPiAxKQorCQlkaWUoXygiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpKTsKKworCWlmICh1c2VfZ3VpX3Rvb2wpCisJCXNldGVudigiR0lUX01FUkdFVE9PTF9HVUkiLCAidHJ1ZSIsIDEpOworCWVsc2UgaWYgKGRpZmZ0b29sX2NtZCkgeworCQlpZiAoKmRpZmZ0b29sX2NtZCkKKwkJCXNldGVudigiR0lUX0RJRkZfVE9PTCIsIGRpZmZ0b29sX2NtZCwgMSk7CisJCWVsc2UKKwkJCWRpZShfKCJubyA8dG9vbD4gZ2l2ZW4gZm9yIC0tdG9vbD08dG9vbD4iKSk7CisJfQorCisJaWYgKGV4dGNtZCkgeworCQlpZiAoKmV4dGNtZCkKKwkJCXNldGVudigiR0lUX0RJRkZUT09MX0VYVENNRCIsIGV4dGNtZCwgMSk7CisJCWVsc2UKKwkJCWRpZShfKCJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iKSk7CisJfQorCisJc2V0ZW52KCJHSVRfRElGRlRPT0xfVFJVU1RfRVhJVF9DT0RFIiwKKwkgICAgICAgdHJ1c3RfZXhpdF9jb2RlID8gInRydWUiIDogImZhbHNlIiwgMSk7CisKKwkvKgorCSAqIEluIGRpcmVjdG9yeSBkaWZmIG1vZGUsICdnaXQtZGlmZnRvb2wtLWhlbHBlcicgaXMgY2FsbGVkIG9uY2UKKwkgKiB0byBjb21wYXJlIHRoZSBhIC8gYiBkaXJlY3Rvcmllcy4gSW4gZmlsZSBkaWZmIG1vZGUsICdnaXQgZGlmZicKKwkgKiB3aWxsIGludm9rZSBhIHNlcGFyYXRlIGluc3RhbmNlIG9mICdnaXQtZGlmZnRvb2wtLWhlbHBlcicgZm9yCisJICogZWFjaCBmaWxlIHRoYXQgY2hhbmdlZC4KKwkgKi8KKwlpZiAoZGlyX2RpZmYpCisJCXJldHVybiBydW5fZGlyX2RpZmYoZXh0Y21kLCBzeW1saW5rcywgcHJlZml4LCBhcmdjLCBhcmd2KTsKKwlyZXR1cm4gcnVuX2ZpbGVfZGlmZihwcm9tcHQsIHByZWZpeCwgYXJnYywgYXJndik7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2Vudi0taGVscGVyLmMgYi9idWlsdGluL2Vudi0taGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjMjE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZW52LS1oZWxwZXIuYwpAQCAtMCwwICsxLDk1IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBlbnZfX2hlbHBlcl91c2FnZVtdID0geworCU5fKCJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IiksCisJTlVMTAorfTsKKworc3RhdGljIGVudW0geworCUVOVl9IRUxQRVJfVFlQRV9CT09MID0gMSwKKwlFTlZfSEVMUEVSX1RZUEVfVUxPTkcKK30gY21kbW9kZSA9IDA7CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3R5cGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgIGludCB1bnNldCkKK3sKKwlpZiAoIXN0cmNtcChhcmcsICJib29sIikpCisJCWNtZG1vZGUgPSBFTlZfSEVMUEVSX1RZUEVfQk9PTDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInVsb25nIikpCisJCWNtZG1vZGUgPSBFTlZfSEVMUEVSX1RZUEVfVUxPTkc7CisJZWxzZQorCQlkaWUoXygidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiKSwgYXJnKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX2Vudl9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBleGl0X2NvZGUgPSAwOworCWNvbnN0IGNoYXIgKmVudl92YXJpYWJsZSA9IE5VTEw7CisJY29uc3QgY2hhciAqZW52X2RlZmF1bHQgPSBOVUxMOworCWludCByZXQ7CisJaW50IHJldF9pbnQsIGRlZmF1bHRfaW50OworCXVuc2lnbmVkIGxvbmcgcmV0X3Vsb25nLCBkZWZhdWx0X3Vsb25nOworCXN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCQlPUFRfQ0FMTEJBQ0tfRigwLCAidHlwZSIsICZjbWRtb2RlLCBOXygidHlwZSIpLAorCQkJICAgICAgIE5fKCJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJICAgICAgIG9wdGlvbl9wYXJzZV90eXBlKSwKKwkJT1BUX1NUUklORygwLCAiZGVmYXVsdCIsICZlbnZfZGVmYXVsdCwgTl8oInZhbHVlIiksCisJCQkgICBOXygiZGVmYXVsdCBmb3IgZ2l0X2Vudl8qKC4uLikgdG8gZmFsbCBiYWNrIG9uIikpLAorCQlPUFRfQk9PTCgwLCAiZXhpdC1jb2RlIiwgJmV4aXRfY29kZSwKKwkJCSBOXygiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgZW52X19oZWxwZXJfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX1VOS05PV04pOworCWlmIChlbnZfZGVmYXVsdCAmJiAhKmVudl9kZWZhdWx0KQorCQl1c2FnZV93aXRoX29wdGlvbnMoZW52X19oZWxwZXJfdXNhZ2UsIG9wdHMpOworCWlmICghY21kbW9kZSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGVudl9faGVscGVyX3VzYWdlLCBvcHRzKTsKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZW52X19oZWxwZXJfdXNhZ2UsIG9wdHMpOworCWVudl92YXJpYWJsZSA9IGFyZ3ZbMF07CisKKwlzd2l0Y2ggKGNtZG1vZGUpIHsKKwljYXNlIEVOVl9IRUxQRVJfVFlQRV9CT09MOgorCQlpZiAoZW52X2RlZmF1bHQpIHsKKwkJCWRlZmF1bHRfaW50ID0gZ2l0X3BhcnNlX21heWJlX2Jvb2woZW52X2RlZmF1bHQpOworCQkJaWYgKGRlZmF1bHRfaW50ID09IC0xKSB7CisJCQkJZXJyb3IoXygib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHdpdGggYC0tdHlwZT1ib29sYCwgbm90IGAlc2AiKSwKKwkJCQkgICAgICBlbnZfZGVmYXVsdCk7CisJCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGVudl9faGVscGVyX3VzYWdlLCBvcHRzKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRlZmF1bHRfaW50ID0gMDsKKwkJfQorCQlyZXRfaW50ID0gZ2l0X2Vudl9ib29sKGVudl92YXJpYWJsZSwgZGVmYXVsdF9pbnQpOworCQlpZiAoIWV4aXRfY29kZSkKKwkJCXB1dHMocmV0X2ludCA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQlyZXQgPSByZXRfaW50OworCQlicmVhazsKKwljYXNlIEVOVl9IRUxQRVJfVFlQRV9VTE9ORzoKKwkJaWYgKGVudl9kZWZhdWx0KSB7CisJCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhlbnZfZGVmYXVsdCwgJmRlZmF1bHRfdWxvbmcpKSB7CisJCQkJZXJyb3IoXygib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCVzYCIpLAorCQkJCSAgICAgIGVudl9kZWZhdWx0KTsKKwkJCQl1c2FnZV93aXRoX29wdGlvbnMoZW52X19oZWxwZXJfdXNhZ2UsIG9wdHMpOworCQkJfQorCQl9IGVsc2UgeworCQkJZGVmYXVsdF91bG9uZyA9IDA7CisJCX0KKwkJcmV0X3Vsb25nID0gZ2l0X2Vudl91bG9uZyhlbnZfdmFyaWFibGUsIGRlZmF1bHRfdWxvbmcpOworCQlpZiAoIWV4aXRfY29kZSkKKwkJCXByaW50ZigiJWx1XG4iLCByZXRfdWxvbmcpOworCQlyZXQgPSByZXRfdWxvbmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygidW5rbm93biA8dHlwZT4gdmFsdWUiKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuICFyZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2Zhc3QtZXhwb3J0LmMgYi9idWlsdGluL2Zhc3QtZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU4NjgxNgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZmFzdC1leHBvcnQuYwpAQCAtMCwwICsxLDEyNjAgQEAKKy8qCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorICovCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmZhc3RfZXhwb3J0X3VzYWdlW10gPSB7CisJTl8oImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHByb2dyZXNzOworc3RhdGljIGVudW0geyBTSUdORURfVEFHX0FCT1JULCBWRVJCQVRJTSwgV0FSTiwgV0FSTl9TVFJJUCwgU1RSSVAgfSBzaWduZWRfdGFnX21vZGUgPSBTSUdORURfVEFHX0FCT1JUOworc3RhdGljIGVudW0geyBUQUdfRklMVEVSSU5HX0FCT1JULCBEUk9QLCBSRVdSSVRFIH0gdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBUQUdfRklMVEVSSU5HX0FCT1JUOworc3RhdGljIGVudW0geyBSRUVOQ09ERV9BQk9SVCwgUkVFTkNPREVfWUVTLCBSRUVOQ09ERV9OTyB9IHJlZW5jb2RlX21vZGUgPSBSRUVOQ09ERV9BQk9SVDsKK3N0YXRpYyBpbnQgZmFrZV9taXNzaW5nX3RhZ2dlcjsKK3N0YXRpYyBpbnQgdXNlX2RvbmVfZmVhdHVyZTsKK3N0YXRpYyBpbnQgbm9fZGF0YTsKK3N0YXRpYyBpbnQgZnVsbF90cmVlOworc3RhdGljIGludCByZWZlcmVuY2VfZXhjbHVkZWRfY29tbWl0czsKK3N0YXRpYyBpbnQgc2hvd19vcmlnaW5hbF9pZHM7CitzdGF0aWMgaW50IG1hcmtfdGFnczsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHRhZ19yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK3N0YXRpYyBzdHJ1Y3QgcmVmc3BlYyByZWZzcGVjcyA9IFJFRlNQRUNfSU5JVF9GRVRDSDsKK3N0YXRpYyBpbnQgYW5vbnltaXplOworc3RhdGljIHN0cnVjdCByZXZpc2lvbl9zb3VyY2VzIHJldmlzaW9uX3NvdXJjZXM7CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X3NpZ25lZF90YWdfbW9kZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQgfHwgIXN0cmNtcChhcmcsICJhYm9ydCIpKQorCQlzaWduZWRfdGFnX21vZGUgPSBTSUdORURfVEFHX0FCT1JUOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAidmVyYmF0aW0iKSB8fCAhc3RyY21wKGFyZywgImlnbm9yZSIpKQorCQlzaWduZWRfdGFnX21vZGUgPSBWRVJCQVRJTTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIndhcm4iKSkKKwkJc2lnbmVkX3RhZ19tb2RlID0gV0FSTjsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIndhcm4tc3RyaXAiKSkKKwkJc2lnbmVkX3RhZ19tb2RlID0gV0FSTl9TVFJJUDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInN0cmlwIikpCisJCXNpZ25lZF90YWdfbW9kZSA9IFNUUklQOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKCJVbmtub3duIHNpZ25lZC10YWdzIG1vZGU6ICVzIiwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9vcHRfdGFnX29mX2ZpbHRlcmVkX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCB8fCAhc3RyY21wKGFyZywgImFib3J0IikpCisJCXRhZ19vZl9maWx0ZXJlZF9tb2RlID0gVEFHX0ZJTFRFUklOR19BQk9SVDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImRyb3AiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBEUk9QOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAicmV3cml0ZSIpKQorCQl0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IFJFV1JJVEU7CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoIlVua25vd24gdGFnLW9mLWZpbHRlcmVkIG1vZGU6ICVzIiwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9vcHRfcmVlbmNvZGVfbW9kZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KSB7CisJCXJlZW5jb2RlX21vZGUgPSBSRUVOQ09ERV9BQk9SVDsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChnaXRfcGFyc2VfbWF5YmVfYm9vbChhcmcpKSB7CisJY2FzZSAwOgorCQlyZWVuY29kZV9tb2RlID0gUkVFTkNPREVfTk87CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmVlbmNvZGVfbW9kZSA9IFJFRU5DT0RFX1lFUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCFzdHJjYXNlY21wKGFyZywgImFib3J0IikpCisJCQlyZWVuY29kZV9tb2RlID0gUkVFTkNPREVfQUJPUlQ7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcigiVW5rbm93biByZWVuY29kaW5nIG1vZGU6ICVzIiwgYXJnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZWNvcmF0aW9uIGlkbnVtczsKK3N0YXRpYyB1aW50MzJfdCBsYXN0X2lkbnVtOworCitzdGF0aWMgaW50IGhhc191bnNob3duX3BhcmVudChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwlmb3IgKHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpCisJCWlmICghKHBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU0hPV04pICYmCisJCSAgICAhKHBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGFub255bWl6ZWRfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGhhc2g7CisJY29uc3QgY2hhciAqb3JpZzsKKwlzaXplX3Qgb3JpZ19sZW47CisJY29uc3QgY2hhciAqYW5vbjsKKwlzaXplX3QgYW5vbl9sZW47Cit9OworCitzdGF0aWMgaW50IGFub255bWl6ZWRfZW50cnlfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJCWNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBhbm9ueW1pemVkX2VudHJ5ICphLCAqYjsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IGFub255bWl6ZWRfZW50cnksIGhhc2gpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgYW5vbnltaXplZF9lbnRyeSwgaGFzaCk7CisKKwlyZXR1cm4gYS0+b3JpZ19sZW4gIT0gYi0+b3JpZ19sZW4gfHwKKwkJbWVtY21wKGEtPm9yaWcsIGItPm9yaWcsIGEtPm9yaWdfbGVuKTsKK30KKworLyoKKyAqIEJhc2ljYWxseSBrZWVwIGEgY2FjaGUgb2YgWC0+WSBzbyB0aGF0IHdlIGNhbiByZXBlYXRlZGx5IHJlcGxhY2UKKyAqIHRoZSBzYW1lIGFub255bWl6ZWQgc3RyaW5nIHdpdGggYW5vdGhlci4gVGhlIGFjdHVhbCBnZW5lcmF0aW9uCisgKiBpcyBmYXJtZWQgb3V0IHRvIHRoZSBnZW5lcmF0ZSBmdW5jdGlvbi4KKyAqLworc3RhdGljIGNvbnN0IHZvaWQgKmFub255bWl6ZV9tZW0oc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCQkgdm9pZCAqKCpnZW5lcmF0ZSkoY29uc3Qgdm9pZCAqLCBzaXplX3QgKiksCisJCQkJIGNvbnN0IHZvaWQgKm9yaWcsIHNpemVfdCAqbGVuKQoreworCXN0cnVjdCBhbm9ueW1pemVkX2VudHJ5IGtleSwgKnJldDsKKworCWlmICghbWFwLT5jbXBmbikKKwkJaGFzaG1hcF9pbml0KG1hcCwgYW5vbnltaXplZF9lbnRyeV9jbXAsIE5VTEwsIDApOworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZrZXkuaGFzaCwgbWVtaGFzaChvcmlnLCAqbGVuKSk7CisJa2V5Lm9yaWcgPSBvcmlnOworCWtleS5vcmlnX2xlbiA9ICpsZW47CisJcmV0ID0gaGFzaG1hcF9nZXRfZW50cnkobWFwLCAma2V5LCBoYXNoLCBOVUxMKTsKKworCWlmICghcmV0KSB7CisJCXJldCA9IHhtYWxsb2Moc2l6ZW9mKCpyZXQpKTsKKwkJaGFzaG1hcF9lbnRyeV9pbml0KCZyZXQtPmhhc2gsIGtleS5oYXNoLmhhc2gpOworCQlyZXQtPm9yaWcgPSB4c3RyZHVwKG9yaWcpOworCQlyZXQtPm9yaWdfbGVuID0gKmxlbjsKKwkJcmV0LT5hbm9uID0gZ2VuZXJhdGUob3JpZywgbGVuKTsKKwkJcmV0LT5hbm9uX2xlbiA9ICpsZW47CisJCWhhc2htYXBfcHV0KG1hcCwgJnJldC0+aGFzaCk7CisJfQorCisJKmxlbiA9IHJldC0+YW5vbl9sZW47CisJcmV0dXJuIHJldC0+YW5vbjsKK30KKworLyoKKyAqIFdlIGFub255bWl6ZSBlYWNoIGNvbXBvbmVudCBvZiBhIHBhdGggaW5kaXZpZHVhbGx5LAorICogc28gdGhhdCBwYXRocyBhL2IgYW5kIGEvYyB3aWxsIHNoYXJlIGEgY29tbW9uIHJvb3QuCisgKiBUaGUgcGF0aHMgYXJlIGNhY2hlZCB2aWEgYW5vbnltaXplX21lbSBzbyB0aGF0IHJlcGVhdGVkCisgKiBsb29rdXBzIGZvciAiYSIgd2lsbCB5aWVsZCB0aGUgc2FtZSB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgYW5vbnltaXplX3BhdGgoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCSAgIHZvaWQgKigqZ2VuZXJhdGUpKGNvbnN0IHZvaWQgKiwgc2l6ZV90ICopKQoreworCXdoaWxlICgqcGF0aCkgeworCQljb25zdCBjaGFyICplbmRfb2ZfY29tcG9uZW50ID0gc3RyY2hybnVsKHBhdGgsICcvJyk7CisJCXNpemVfdCBsZW4gPSBlbmRfb2ZfY29tcG9uZW50IC0gcGF0aDsKKwkJY29uc3QgY2hhciAqYyA9IGFub255bWl6ZV9tZW0obWFwLCBnZW5lcmF0ZSwgcGF0aCwgJmxlbik7CisJCXN0cmJ1Zl9hZGQob3V0LCBjLCBsZW4pOworCQlwYXRoID0gZW5kX29mX2NvbXBvbmVudDsKKwkJaWYgKCpwYXRoKQorCQkJc3RyYnVmX2FkZGNoKG91dCwgKnBhdGgrKyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm1hcmtfdG9fcHRyKHVpbnQzMl90IG1hcmspCit7CisJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdCltYXJrOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHB0cl90b19tYXJrKHZvaWQgKiBtYXJrKQoreworCXJldHVybiAodWludDMyX3QpKHVpbnRwdHJfdCltYXJrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCB1aW50MzJfdCBtYXJrKQoreworCWFkZF9kZWNvcmF0aW9uKCZpZG51bXMsIG9iamVjdCwgbWFya190b19wdHIobWFyaykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19uZXh0X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QpCit7CisJbWFya19vYmplY3Qob2JqZWN0LCArK2xhc3RfaWRudW0pOworfQorCitzdGF0aWMgaW50IGdldF9vYmplY3RfbWFyayhzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QpCit7CisJdm9pZCAqZGVjb3JhdGlvbiA9IGxvb2t1cF9kZWNvcmF0aW9uKCZpZG51bXMsIG9iamVjdCk7CisJaWYgKCFkZWNvcmF0aW9uKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcHRyX3RvX21hcmsoZGVjb3JhdGlvbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpyZXdyaXRlX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpwKQoreworCWZvciAoOzspIHsKKwkJaWYgKHAtPnBhcmVudHMgJiYgcC0+cGFyZW50cy0+bmV4dCkKKwkJCWJyZWFrOworCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWJyZWFrOworCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQlicmVhazsKKwkJaWYgKCFwLT5wYXJlbnRzKQorCQkJcmV0dXJuIE5VTEw7CisJCXAgPSBwLT5wYXJlbnRzLT5pdGVtOworCX0KKwlyZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgc2hvd19wcm9ncmVzcyh2b2lkKQoreworCXN0YXRpYyBpbnQgY291bnRlciA9IDA7CisJaWYgKCFwcm9ncmVzcykKKwkJcmV0dXJuOworCWlmICgoKytjb3VudGVyICUgcHJvZ3Jlc3MpID09IDApCisJCXByaW50ZigicHJvZ3Jlc3MgJWQgb2JqZWN0c1xuIiwgY291bnRlcik7Cit9CisKKy8qCisgKiBJZGVhbGx5IHdlIHdvdWxkIHdhbnQgc29tZSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgYmxvYiBkYXRhIGhlcmUKKyAqIHRoYXQgaXMgdW5yZXZlcnNpYmxlLCBidXQgd291bGQgc3RpbGwgYmUgdGhlIHNhbWUgc2l6ZSBhbmQgaGF2ZQorICogdGhlIHNhbWUgZGF0YSByZWxhdGlvbnNoaXAgdG8gb3RoZXIgYmxvYnMgKHNvIHRoYXQgd2UgZ2V0IHRoZSBzYW1lCisgKiBkZWx0YSBhbmQgcGFja2luZyBiZWhhdmlvciBhcyB0aGUgb3JpZ2luYWwpLiBCdXQgdGhlIGZpcnN0IGFuZCBsYXN0CisgKiByZXF1aXJlbWVudHMgdGhlcmUgYXJlIHByb2JhYmx5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgc28gbGV0J3MgdGFrZQorICogdGhlIGVhc3kgd2F5IG91dCBmb3Igbm93LCBhbmQganVzdCBnZW5lcmF0ZSBhcmJpdHJhcnkgY29udGVudC4KKyAqCisgKiBUaGVyZSdzIG5vIG5lZWQgdG8gY2FjaGUgdGhpcyByZXN1bHQgd2l0aCBhbm9ueW1pemVfbWVtLCBzaW5jZQorICogd2UgYWxyZWFkeSBoYW5kbGUgYmxvYiBjb250ZW50IGNhY2hpbmcgd2l0aCBtYXJrcy4KKyAqLworc3RhdGljIGNoYXIgKmFub255bWl6ZV9ibG9iKHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJc3RhdGljIGludCBjb3VudGVyOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm91dCwgImFub255bW91cyBibG9iICVkIiwgY291bnRlcisrKTsKKwkqc2l6ZSA9IG91dC5sZW47CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm91dCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cG9ydF9ibG9iKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJaW50IGVhdGVuOworCisJaWYgKG5vX2RhdGEpCisJCXJldHVybjsKKworCWlmIChpc19udWxsX29pZChvaWQpKQorCQlyZXR1cm47CisKKwlvYmplY3QgPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmIChvYmplY3QgJiYgb2JqZWN0LT5mbGFncyAmIFNIT1dOKQorCQlyZXR1cm47CisKKwlpZiAoYW5vbnltaXplKSB7CisJCWJ1ZiA9IGFub255bWl6ZV9ibG9iKCZzaXplKTsKKwkJb2JqZWN0ID0gKHN0cnVjdCBvYmplY3QgKilsb29rdXBfYmxvYih0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwkJZWF0ZW4gPSAwOworCX0gZWxzZSB7CisJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZikKKwkJCWRpZSgiY291bGQgbm90IHJlYWQgYmxvYiAlcyIsIG9pZF90b19oZXgob2lkKSk7CisJCWlmIChjaGVja19vYmplY3Rfc2lnbmF0dXJlKHRoZV9yZXBvc2l0b3J5LCBvaWQsIGJ1Ziwgc2l6ZSwKKwkJCQkJICAgdHlwZV9uYW1lKHR5cGUpKSA8IDApCisJCQlkaWUoIm9pZCBtaXNtYXRjaCBpbiBibG9iICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgb2lkLCB0eXBlLAorCQkJCQkgICAgIHNpemUsIGJ1ZiwgJmVhdGVuKTsKKwl9CisKKwlpZiAoIW9iamVjdCkKKwkJZGllKCJDb3VsZCBub3QgcmVhZCBibG9iICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKworCW1hcmtfbmV4dF9vYmplY3Qob2JqZWN0KTsKKworCXByaW50ZigiYmxvYlxubWFyayA6JSJQUkl1MzIiXG4iLCBsYXN0X2lkbnVtKTsKKwlpZiAoc2hvd19vcmlnaW5hbF9pZHMpCisJCXByaW50Zigib3JpZ2luYWwtb2lkICVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KXNpemUpOworCWlmIChzaXplICYmIGZ3cml0ZShidWYsIHNpemUsIDEsIHN0ZG91dCkgIT0gMSkKKwkJZGllX2Vycm5vKCJjb3VsZCBub3Qgd3JpdGUgYmxvYiAnJXMnIiwgb2lkX3RvX2hleChvaWQpKTsKKwlwcmludGYoIlxuIik7CisKKwlzaG93X3Byb2dyZXNzKCk7CisKKwlvYmplY3QtPmZsYWdzIHw9IFNIT1dOOworCWlmICghZWF0ZW4pCisJCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCBkZXB0aF9maXJzdChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmEgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKilhXyk7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmIgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKiliXyk7CisJY29uc3QgY2hhciAqbmFtZV9hLCAqbmFtZV9iOworCWludCBsZW5fYSwgbGVuX2IsIGxlbjsKKwlpbnQgY21wOworCisJbmFtZV9hID0gYS0+b25lID8gYS0+b25lLT5wYXRoIDogYS0+dHdvLT5wYXRoOworCW5hbWVfYiA9IGItPm9uZSA/IGItPm9uZS0+cGF0aCA6IGItPnR3by0+cGF0aDsKKworCWxlbl9hID0gc3RybGVuKG5hbWVfYSk7CisJbGVuX2IgPSBzdHJsZW4obmFtZV9iKTsKKwlsZW4gPSAobGVuX2EgPCBsZW5fYikgPyBsZW5fYSA6IGxlbl9iOworCisJLyogc3RyY21wIHdpbGwgc29ydCAnZCcgYmVmb3JlICdkL2UnLCB3ZSB3YW50ICdkL2UnIGJlZm9yZSAnZCcgKi8KKwljbXAgPSBtZW1jbXAobmFtZV9hLCBuYW1lX2IsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwljbXAgPSBsZW5fYiAtIGxlbl9hOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJLyoKKwkgKiBNb3ZlICdSJ2VuYW1lIGVudHJpZXMgbGFzdCBzbyB0aGF0IGFsbCByZWZlcmVuY2VzIG9mIHRoZSBmaWxlCisJICogYXBwZWFyIGluIHRoZSBvdXRwdXQgYmVmb3JlIGl0IGlzIHJlbmFtZWQgKGUuZy4sIHdoZW4gYSBmaWxlCisJICogd2FzIGNvcGllZCBhbmQgcmVuYW1lZCBpbiB0aGUgc2FtZSBjb21taXQpLgorCSAqLworCXJldHVybiAoYS0+c3RhdHVzID09ICdSJykgLSAoYi0+c3RhdHVzID09ICdSJyk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3BhdGhfMShjb25zdCBjaGFyICpwYXRoKQoreworCWludCBuZWVkX3F1b3RlID0gcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBOVUxMLCAwKTsKKwlpZiAobmVlZF9xdW90ZSkKKwkJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCWVsc2UgaWYgKHN0cmNocihwYXRoLCAnICcpKQorCQlwcmludGYoIlwiJXNcIiIsIHBhdGgpOworCWVsc2UKKwkJcHJpbnRmKCIlcyIsIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCAqYW5vbnltaXplX3BhdGhfY29tcG9uZW50KGNvbnN0IHZvaWQgKnBhdGgsIHNpemVfdCAqbGVuKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZvdXQsICJwYXRoJWQiLCBjb3VudGVyKyspOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZvdXQsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIWFub255bWl6ZSkKKwkJcHJpbnRfcGF0aF8xKHBhdGgpOworCWVsc2UgeworCQlzdGF0aWMgc3RydWN0IGhhc2htYXAgcGF0aHM7CisJCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGFub24gPSBTVFJCVUZfSU5JVDsKKworCQlhbm9ueW1pemVfcGF0aCgmYW5vbiwgcGF0aCwgJnBhdGhzLCBhbm9ueW1pemVfcGF0aF9jb21wb25lbnQpOworCQlwcmludF9wYXRoXzEoYW5vbi5idWYpOworCQlzdHJidWZfcmVzZXQoJmFub24pOworCX0KK30KKworc3RhdGljIHZvaWQgKmdlbmVyYXRlX2Zha2Vfb2lkKGNvbnN0IHZvaWQgKm9sZCwgc2l6ZV90ICpsZW4pCit7CisJc3RhdGljIHVpbnQzMl90IGNvdW50ZXIgPSAxOyAvKiBhdm9pZCBudWxsIG9pZCAqLworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCXVuc2lnbmVkIGNoYXIgKm91dCA9IHhjYWxsb2MoaGFzaHN6LCAxKTsKKwlwdXRfYmUzMihvdXQgKyBoYXNoc3ogLSA0LCBjb3VudGVyKyspOworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICphbm9ueW1pemVfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IGhhc2htYXAgb2JqczsKKwlzaXplX3QgbGVuID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJcmV0dXJuIGFub255bWl6ZV9tZW0oJm9ianMsIGdlbmVyYXRlX2Zha2Vfb2lkLCBvaWQsICZsZW4pOworfQorCitzdGF0aWMgdm9pZCBzaG93X2ZpbGVtb2RpZnkoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0ICpjaGFuZ2VkID0gZGF0YTsKKworCS8qCisJICogSGFuZGxlIGZpbGVzIGJlbG93IGEgZGlyZWN0b3J5IGZpcnN0LCBpbiBjYXNlIHRoZXkgYXJlIGFsbCBkZWxldGVkCisJICogYW5kIHRoZSBkaXJlY3RvcnkgY2hhbmdlcyB0byBhIGZpbGUgb3Igc3ltbGluay4KKwkgKi8KKwlRU09SVChxLT5xdWV1ZSwgcS0+bnIsIGRlcHRoX2ZpcnN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvc3BlYyA9IHEtPnF1ZXVlW2ldLT5vbmU7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjID0gcS0+cXVldWVbaV0tPnR3bzsKKworCQlzd2l0Y2ggKHEtPnF1ZXVlW2ldLT5zdGF0dXMpIHsKKwkJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQkJcHJpbnRmKCJEICIpOworCQkJcHJpbnRfcGF0aChzcGVjLT5wYXRoKTsKKwkJCXN0cmluZ19saXN0X2luc2VydChjaGFuZ2VkLCBzcGVjLT5wYXRoKTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlicmVhazsKKworCQljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQkJLyoKKwkJCSAqIElmIGEgY2hhbmdlIGluIHRoZSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gb3NwZWMtPnBhdGgKKwkJCSAqIGhhcyBiZWVuIG9ic2VydmVkLCB3ZSBjYW5ub3QgdHJ1c3QgaXRzIGNvbnRlbnRzCisJCQkgKiBiZWNhdXNlIHRoZSBkaWZmIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIHByaW9yCisJCQkgKiBjb250ZW50cywgbm90IHRoZSBjdXJyZW50IGNvbnRlbnRzLiAgU28sIGRlY2xhcmUgYQorCQkJICogY29weSBvciByZW5hbWUgb25seSBpZiB0aGVyZSB3YXMgbm8gY2hhbmdlIG9ic2VydmVkLgorCQkJICovCisJCQlpZiAoIXN0cmluZ19saXN0X2hhc19zdHJpbmcoY2hhbmdlZCwgb3NwZWMtPnBhdGgpKSB7CisJCQkJcHJpbnRmKCIlYyAiLCBxLT5xdWV1ZVtpXS0+c3RhdHVzKTsKKwkJCQlwcmludF9wYXRoKG9zcGVjLT5wYXRoKTsKKwkJCQlwdXRjaGFyKCcgJyk7CisJCQkJcHJpbnRfcGF0aChzcGVjLT5wYXRoKTsKKwkJCQlzdHJpbmdfbGlzdF9pbnNlcnQoY2hhbmdlZCwgc3BlYy0+cGF0aCk7CisJCQkJcHV0Y2hhcignXG4nKTsKKworCQkJCWlmIChvaWRlcSgmb3NwZWMtPm9pZCwgJnNwZWMtPm9pZCkgJiYKKwkJCQkgICAgb3NwZWMtPm1vZGUgPT0gc3BlYy0+bW9kZSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCisJCWNhc2UgRElGRl9TVEFUVVNfVFlQRV9DSEFOR0VEOgorCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX0FEREVEOgorCQkJLyoKKwkJCSAqIExpbmtzIHJlZmVyIHRvIG9iamVjdHMgaW4gYW5vdGhlciByZXBvc2l0b3JpZXM7CisJCQkgKiBvdXRwdXQgdGhlIFNIQS0xIHZlcmJhdGltLgorCQkJICovCisJCQlpZiAobm9fZGF0YSB8fCBTX0lTR0lUTElOSyhzcGVjLT5tb2RlKSkKKwkJCQlwcmludGYoIk0gJTA2byAlcyAiLCBzcGVjLT5tb2RlLAorCQkJCSAgICAgICBvaWRfdG9faGV4KGFub255bWl6ZSA/CisJCQkJCQkgIGFub255bWl6ZV9vaWQoJnNwZWMtPm9pZCkgOgorCQkJCQkJICAmc3BlYy0+b2lkKSk7CisJCQllbHNlIHsKKwkJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCQkgICAgICAmc3BlYy0+b2lkKTsKKwkJCQlwcmludGYoIk0gJTA2byA6JWQgIiwgc3BlYy0+bW9kZSwKKwkJCQkgICAgICAgZ2V0X29iamVjdF9tYXJrKG9iamVjdCkpOworCQkJfQorCQkJcHJpbnRfcGF0aChzcGVjLT5wYXRoKTsKKwkJCXN0cmluZ19saXN0X2luc2VydChjaGFuZ2VkLCBzcGVjLT5wYXRoKTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGllKCJVbmV4cGVjdGVkIGNvbXBhcmlzb24gc3RhdHVzICclYycgZm9yICVzLCAlcyIsCisJCQkJcS0+cXVldWVbaV0tPnN0YXR1cywKKwkJCQlvc3BlYy0+cGF0aCA/IG9zcGVjLT5wYXRoIDogIm5vbmUiLAorCQkJCXNwZWMtPnBhdGggPyBzcGVjLT5wYXRoIDogIm5vbmUiKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZW5jb2RpbmcoY29uc3QgY2hhciAqYmVnaW4sIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwljb25zdCBjaGFyICpuZWVkbGUgPSAiXG5lbmNvZGluZyAiOworCWNoYXIgKmJvbCwgKmVvbDsKKworCWJvbCA9IG1lbW1lbShiZWdpbiwgZW5kID8gZW5kIC0gYmVnaW4gOiBzdHJsZW4oYmVnaW4pLAorCQkgICAgIG5lZWRsZSwgc3RybGVuKG5lZWRsZSkpOworCWlmICghYm9sKQorCQlyZXR1cm4gTlVMTDsKKwlib2wgKz0gc3RybGVuKG5lZWRsZSk7CisJZW9sID0gc3RyY2hybnVsKGJvbCwgJ1xuJyk7CisJKmVvbCA9ICdcMCc7CisJcmV0dXJuIGJvbDsKK30KKworc3RhdGljIHZvaWQgKmFub255bWl6ZV9yZWZfY29tcG9uZW50KGNvbnN0IHZvaWQgKm9sZCwgc2l6ZV90ICpsZW4pCit7CisJc3RhdGljIGludCBjb3VudGVyOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm91dCwgInJlZiVkIiwgY291bnRlcisrKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmb3V0LCBsZW4pOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYW5vbnltaXplX3JlZm5hbWUoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwkvKgorCSAqIElmIGFueSBvZiB0aGVzZSBwcmVmaXhlcyBpcyBmb3VuZCwgd2Ugd2lsbCBsZWF2ZSBpdCBpbnRhY3QKKwkgKiBzbyB0aGF0IHRhZ3MgcmVtYWluIHRhZ3MgYW5kIHNvIGZvcnRoLgorCSAqLworCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXhlc1tdID0geworCQkicmVmcy9oZWFkcy8iLAorCQkicmVmcy90YWdzLyIsCisJCSJyZWZzL3JlbW90ZXMvIiwKKwkJInJlZnMvIgorCX07CisJc3RhdGljIHN0cnVjdCBoYXNobWFwIHJlZnM7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYW5vbiA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJLyoKKwkgKiBXZSBhbHNvIGxlYXZlICJtYXN0ZXIiIGFzIGEgc3BlY2lhbCBjYXNlLCBzaW5jZSBpdCBkb2VzIG5vdCByZXZlYWwKKwkgKiBhbnl0aGluZyBpbnRlcmVzdGluZy4KKwkgKi8KKwlpZiAoIXN0cmNtcChyZWZuYW1lLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSkKKwkJcmV0dXJuIHJlZm5hbWU7CisKKwlzdHJidWZfcmVzZXQoJmFub24pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWZpeGVzKTsgaSsrKSB7CisJCWlmIChza2lwX3ByZWZpeChyZWZuYW1lLCBwcmVmaXhlc1tpXSwgJnJlZm5hbWUpKSB7CisJCQlzdHJidWZfYWRkc3RyKCZhbm9uLCBwcmVmaXhlc1tpXSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWFub255bWl6ZV9wYXRoKCZhbm9uLCByZWZuYW1lLCAmcmVmcywgYW5vbnltaXplX3JlZl9jb21wb25lbnQpOworCXJldHVybiBhbm9uLmJ1ZjsKK30KKworLyoKKyAqIFdlIGRvIG5vdCBldmVuIGJvdGhlciB0byBjYWNoZSBjb21taXQgbWVzc2FnZXMsIGFzIHRoZXkgYXJlIHVubGlrZWx5CisgKiB0byBiZSByZXBlYXRlZCB2ZXJiYXRpbSwgYW5kIGl0IGlzIG5vdCB0aGF0IGludGVyZXN0aW5nIHdoZW4gdGhleSBhcmUuCisgKi8KK3N0YXRpYyBjaGFyICphbm9ueW1pemVfY29tbWl0X21lc3NhZ2UoY29uc3QgY2hhciAqb2xkKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlyZXR1cm4geHN0cmZtdCgic3ViamVjdCAlZFxuXG5ib2R5XG4iLCBjb3VudGVyKyspOworfQorCitzdGF0aWMgc3RydWN0IGhhc2htYXAgaWRlbnRzOworc3RhdGljIHZvaWQgKmFub255bWl6ZV9pZGVudChjb25zdCB2b2lkICpvbGQsIHNpemVfdCAqbGVuKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZvdXQsICJVc2VyICVkIDx1c2VyJWRAZXhhbXBsZS5jb20+IiwgY291bnRlciwgY291bnRlcik7CisJY291bnRlcisrOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZvdXQsIGxlbik7Cit9CisKKy8qCisgKiBPdXIgc3RyYXRlZ3kgaGVyZSBpcyB0byBhbm9ueW1pemUgdGhlIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMsCisgKiBidXQga2VlcCB0aW1lc3RhbXBzIGludGFjdCwgYXMgdGhleSBpbmZsdWVuY2UgdGhpbmdzIGxpa2UgdHJhdmVyc2FsCisgKiBvcmRlciAoYW5kIGJ5IHRoZW1zZWx2ZXMgc2hvdWxkIG5vdCBiZSB0b28gcmV2ZWFsaW5nKS4KKyAqLworc3RhdGljIHZvaWQgYW5vbnltaXplX2lkZW50X2xpbmUoY29uc3QgY2hhciAqKmJlZywgY29uc3QgY2hhciAqKmVuZCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZmZXJzW10gPSB7IFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCB9OworCXN0YXRpYyB1bnNpZ25lZCB3aGljaF9idWZmZXI7CisKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQ7CisJc3RydWN0IGlkZW50X3NwbGl0IHNwbGl0OworCWNvbnN0IGNoYXIgKmVuZF9vZl9oZWFkZXI7CisKKwlvdXQgPSAmYnVmZmVyc1t3aGljaF9idWZmZXIrK107CisJd2hpY2hfYnVmZmVyICU9IEFSUkFZX1NJWkUoYnVmZmVycyk7CisJc3RyYnVmX3Jlc2V0KG91dCk7CisKKwkvKiBza2lwICJjb21taXR0ZXIiLCAiYXV0aG9yIiwgInRhZ2dlciIsIGV0YyAqLworCWVuZF9vZl9oZWFkZXIgPSBzdHJjaHIoKmJlZywgJyAnKTsKKwlpZiAoIWVuZF9vZl9oZWFkZXIpCisJCUJVRygibWFsZm9ybWVkIGxpbmUgZmVkIHRvIGFub255bWl6ZV9pZGVudF9saW5lOiAlLipzIiwKKwkJICAgIChpbnQpKCplbmQgLSAqYmVnKSwgKmJlZyk7CisJZW5kX29mX2hlYWRlcisrOworCXN0cmJ1Zl9hZGQob3V0LCAqYmVnLCBlbmRfb2ZfaGVhZGVyIC0gKmJlZyk7CisKKwlpZiAoIXNwbGl0X2lkZW50X2xpbmUoJnNwbGl0LCBlbmRfb2ZfaGVhZGVyLCAqZW5kIC0gZW5kX29mX2hlYWRlcikgJiYKKwkgICAgc3BsaXQuZGF0ZV9iZWdpbikgeworCQljb25zdCBjaGFyICppZGVudDsKKwkJc2l6ZV90IGxlbjsKKworCQlsZW4gPSBzcGxpdC5tYWlsX2VuZCAtIHNwbGl0Lm5hbWVfYmVnaW47CisJCWlkZW50ID0gYW5vbnltaXplX21lbSgmaWRlbnRzLCBhbm9ueW1pemVfaWRlbnQsCisJCQkJICAgICAgc3BsaXQubmFtZV9iZWdpbiwgJmxlbik7CisJCXN0cmJ1Zl9hZGQob3V0LCBpZGVudCwgbGVuKTsKKwkJc3RyYnVmX2FkZGNoKG91dCwgJyAnKTsKKwkJc3RyYnVmX2FkZChvdXQsIHNwbGl0LmRhdGVfYmVnaW4sIHNwbGl0LnR6X2VuZCAtIHNwbGl0LmRhdGVfYmVnaW4pOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiTWFsZm9ybWVkIElkZW50IDxtYWxmb3JtZWRAZXhhbXBsZS5jb20+IDAgLTAwMDAiKTsKKwl9CisKKwkqYmVnID0gb3V0LT5idWY7CisJKmVuZCA9IG91dC0+YnVmICsgb3V0LT5sZW47Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgcmV2X2luZm8gKnJldiwKKwkJCSAgc3RydWN0IHN0cmluZ19saXN0ICpwYXRoc19vZl9jaGFuZ2VkX29iamVjdHMpCit7CisJaW50IHNhdmVkX291dHB1dF9mb3JtYXQgPSByZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdDsKKwljb25zdCBjaGFyICpjb21taXRfYnVmZmVyOworCWNvbnN0IGNoYXIgKmF1dGhvciwgKmF1dGhvcl9lbmQsICpjb21taXR0ZXIsICpjb21taXR0ZXJfZW5kOworCWNvbnN0IGNoYXIgKmVuY29kaW5nLCAqbWVzc2FnZTsKKwljaGFyICpyZWVuY29kZWQgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwljb25zdCBjaGFyICpyZWZuYW1lOworCWludCBpOworCisJcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKworCXBhcnNlX2NvbW1pdF9vcl9kaWUoY29tbWl0KTsKKwljb21taXRfYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKTsKKwlhdXRob3IgPSBzdHJzdHIoY29tbWl0X2J1ZmZlciwgIlxuYXV0aG9yICIpOworCWlmICghYXV0aG9yKQorCQlkaWUoImNvdWxkIG5vdCBmaW5kIGF1dGhvciBpbiBjb21taXQgJXMiLAorCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJYXV0aG9yKys7CisJYXV0aG9yX2VuZCA9IHN0cmNocm51bChhdXRob3IsICdcbicpOworCWNvbW1pdHRlciA9IHN0cnN0cihhdXRob3JfZW5kLCAiXG5jb21taXR0ZXIgIik7CisJaWYgKCFjb21taXR0ZXIpCisJCWRpZSgiY291bGQgbm90IGZpbmQgY29tbWl0dGVyIGluIGNvbW1pdCAlcyIsCisJCSAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwljb21taXR0ZXIrKzsKKwljb21taXR0ZXJfZW5kID0gc3RyY2hybnVsKGNvbW1pdHRlciwgJ1xuJyk7CisJbWVzc2FnZSA9IHN0cnN0cihjb21taXR0ZXJfZW5kLCAiXG5cbiIpOworCWVuY29kaW5nID0gZmluZF9lbmNvZGluZyhjb21taXR0ZXJfZW5kLCBtZXNzYWdlKTsKKwlpZiAobWVzc2FnZSkKKwkJbWVzc2FnZSArPSAyOworCisJaWYgKGNvbW1pdC0+cGFyZW50cyAmJgorCSAgICAoZ2V0X29iamVjdF9tYXJrKCZjb21taXQtPnBhcmVudHMtPml0ZW0tPm9iamVjdCkgIT0gMCB8fAorCSAgICAgcmVmZXJlbmNlX2V4Y2x1ZGVkX2NvbW1pdHMpICYmCisJICAgICFmdWxsX3RyZWUpIHsKKwkJcGFyc2VfY29tbWl0X29yX2RpZShjb21taXQtPnBhcmVudHMtPml0ZW0pOworCQlkaWZmX3RyZWVfb2lkKGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0LT5wYXJlbnRzLT5pdGVtKSwKKwkJCSAgICAgIGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0KSwgIiIsICZyZXYtPmRpZmZvcHQpOworCX0KKwllbHNlCisJCWRpZmZfcm9vdF90cmVlX29pZChnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCksCisJCQkJICAgIiIsICZyZXYtPmRpZmZvcHQpOworCisJLyogRXhwb3J0IHRoZSByZWZlcmVuY2VkIGJsb2JzLCBhbmQgcmVtZW1iZXIgdGhlIG1hcmtzLiAqLworCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspCisJCWlmICghU19JU0dJVExJTksoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+dHdvLT5tb2RlKSkKKwkJCWV4cG9ydF9ibG9iKCZkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldLT50d28tPm9pZCk7CisKKwlyZWZuYW1lID0gKnJldmlzaW9uX3NvdXJjZXNfYXQoJnJldmlzaW9uX3NvdXJjZXMsIGNvbW1pdCk7CisJLyoKKwkgKiBGSVhNRTogc3RyaW5nX2xpc3RfcmVtb3ZlKCkgYmVsb3cgZm9yIGVhY2ggcmVmIGlzIG92ZXJhbGwKKwkgKiBPKE5eMikuICBDb21wYXJlZCB0byBhIGhpc3Rvcnkgd2FsayBhbmQgZGlmZmluZyB0cmVlcywgdGhpcyBpcworCSAqIGp1c3QgbG9zdCBpbiB0aGUgbm9pc2UgaW4gcHJhY3RpY2UuICBIb3dldmVyLCB0aGVvcmV0aWNhbGx5IGEKKwkgKiByZXBvIG1heSBoYXZlIGVub3VnaCByZWZzIGZvciB0aGlzIHRvIGJlY29tZSBzbG93LgorCSAqLworCXN0cmluZ19saXN0X3JlbW92ZSgmZXh0cmFfcmVmcywgcmVmbmFtZSwgMCk7CisJaWYgKGFub255bWl6ZSkgeworCQlyZWZuYW1lID0gYW5vbnltaXplX3JlZm5hbWUocmVmbmFtZSk7CisJCWFub255bWl6ZV9pZGVudF9saW5lKCZjb21taXR0ZXIsICZjb21taXR0ZXJfZW5kKTsKKwkJYW5vbnltaXplX2lkZW50X2xpbmUoJmF1dGhvciwgJmF1dGhvcl9lbmQpOworCX0KKworCW1hcmtfbmV4dF9vYmplY3QoJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAoYW5vbnltaXplKSB7CisJCXJlZW5jb2RlZCA9IGFub255bWl6ZV9jb21taXRfbWVzc2FnZShtZXNzYWdlKTsKKwl9IGVsc2UgaWYgKGVuY29kaW5nKSB7CisJCXN3aXRjaChyZWVuY29kZV9tb2RlKSB7CisJCWNhc2UgUkVFTkNPREVfWUVTOgorCQkJcmVlbmNvZGVkID0gcmVlbmNvZGVfc3RyaW5nKG1lc3NhZ2UsICJVVEYtOCIsIGVuY29kaW5nKTsKKwkJCWJyZWFrOworCQljYXNlIFJFRU5DT0RFX05POgorCQkJYnJlYWs7CisJCWNhc2UgUkVFTkNPREVfQUJPUlQ6CisJCQlkaWUoIkVuY291bnRlcmVkIGNvbW1pdC1zcGVjaWZpYyBlbmNvZGluZyAlcyBpbiBjb21taXQgIgorCQkJICAgICIlczsgdXNlIC0tcmVlbmNvZGU9W3llc3xub10gdG8gaGFuZGxlIGl0IiwKKwkJCSAgICBlbmNvZGluZywgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCX0KKwl9CisJaWYgKCFjb21taXQtPnBhcmVudHMpCisJCXByaW50ZigicmVzZXQgJXNcbiIsIHJlZm5hbWUpOworCXByaW50ZigiY29tbWl0ICVzXG5tYXJrIDolIlBSSXUzMiJcbiIsIHJlZm5hbWUsIGxhc3RfaWRudW0pOworCWlmIChzaG93X29yaWdpbmFsX2lkcykKKwkJcHJpbnRmKCJvcmlnaW5hbC1vaWQgJXNcbiIsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCXByaW50ZigiJS4qc1xuJS4qc1xuIiwKKwkgICAgICAgKGludCkoYXV0aG9yX2VuZCAtIGF1dGhvciksIGF1dGhvciwKKwkgICAgICAgKGludCkoY29tbWl0dGVyX2VuZCAtIGNvbW1pdHRlciksIGNvbW1pdHRlcik7CisJaWYgKCFyZWVuY29kZWQgJiYgZW5jb2RpbmcpCisJCXByaW50ZigiZW5jb2RpbmcgJXNcbiIsIGVuY29kaW5nKTsKKwlwcmludGYoImRhdGEgJXVcbiVzIiwKKwkgICAgICAgKHVuc2lnbmVkKShyZWVuY29kZWQKKwkJCSAgPyBzdHJsZW4ocmVlbmNvZGVkKSA6IG1lc3NhZ2UKKwkJCSAgPyBzdHJsZW4obWVzc2FnZSkgOiAwKSwKKwkgICAgICAgcmVlbmNvZGVkID8gcmVlbmNvZGVkIDogbWVzc2FnZSA/IG1lc3NhZ2UgOiAiIik7CisJZnJlZShyZWVuY29kZWQpOworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBjb21taXRfYnVmZmVyKTsKKworCWZvciAoaSA9IDAsIHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZwLT5pdGVtLT5vYmplY3Q7CisJCWludCBtYXJrID0gZ2V0X29iamVjdF9tYXJrKG9iaik7CisKKwkJaWYgKCFtYXJrICYmICFyZWZlcmVuY2VfZXhjbHVkZWRfY29tbWl0cykKKwkJCWNvbnRpbnVlOworCQlpZiAoaSA9PSAwKQorCQkJcHJpbnRmKCJmcm9tICIpOworCQllbHNlCisJCQlwcmludGYoIm1lcmdlICIpOworCQlpZiAobWFyaykKKwkJCXByaW50ZigiOiVkXG4iLCBtYXJrKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleChhbm9ueW1pemUgPworCQkJCQkJICBhbm9ueW1pemVfb2lkKCZvYmotPm9pZCkgOgorCQkJCQkJICAmb2JqLT5vaWQpKTsKKwkJaSsrOworCX0KKworCWlmIChmdWxsX3RyZWUpCisJCXByaW50ZigiZGVsZXRlYWxsXG4iKTsKKwlsb2dfdHJlZV9kaWZmX2ZsdXNoKHJldik7CisJc3RyaW5nX2xpc3RfY2xlYXIocGF0aHNfb2ZfY2hhbmdlZF9vYmplY3RzLCAwKTsKKwlyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IHNhdmVkX291dHB1dF9mb3JtYXQ7CisKKwlwcmludGYoIlxuIik7CisKKwlzaG93X3Byb2dyZXNzKCk7Cit9CisKK3N0YXRpYyB2b2lkICphbm9ueW1pemVfdGFnKGNvbnN0IHZvaWQgKm9sZCwgc2l6ZV90ICpsZW4pCit7CisJc3RhdGljIGludCBjb3VudGVyOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm91dCwgInRhZyBtZXNzYWdlICVkIiwgY291bnRlcisrKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmb3V0LCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdGFpbChzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpjb21taXRzLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhdGhzX29mX2NoYW5nZWRfb2JqZWN0cykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJd2hpbGUgKGNvbW1pdHMtPm5yKSB7CisJCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0X2FycmF5X3BvcChjb21taXRzKTsKKwkJaWYgKGhhc191bnNob3duX3BhcmVudChjb21taXQpKSB7CisJCQkvKiBRdWV1ZSBhZ2FpbiwgdG8gYmUgaGFuZGxlZCBsYXRlciAqLworCQkJYWRkX29iamVjdF9hcnJheSgmY29tbWl0LT5vYmplY3QsIE5VTEwsIGNvbW1pdHMpOworCQkJcmV0dXJuOworCQl9CisJCWhhbmRsZV9jb21taXQoY29tbWl0LCByZXZzLCBwYXRoc19vZl9jaGFuZ2VkX29iamVjdHMpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3RhZyhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgdGFnICp0YWcpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWY7CisJY29uc3QgY2hhciAqdGFnZ2VyLCAqdGFnZ2VyX2VuZCwgKm1lc3NhZ2U7CisJc2l6ZV90IG1lc3NhZ2Vfc2l6ZSA9IDA7CisJc3RydWN0IG9iamVjdCAqdGFnZ2VkOworCWludCB0YWdnZWRfbWFyazsKKwlzdHJ1Y3QgY29tbWl0ICpwOworCisJLyogVHJlZXMgaGF2ZSBubyBpZGVudGlmaWVyIGluIGZhc3QtZXhwb3J0IG91dHB1dCwgdGh1cyB3ZSBoYXZlIG5vIHdheQorCSAqIHRvIG91dHB1dCB0YWdzIG9mIHRyZWVzLCB0YWdzIG9mIHRhZ3Mgb2YgdHJlZXMsIGV0Yy4gIFNpbXBseSBvbWl0CisJICogc3VjaCB0YWdzLgorCSAqLworCXRhZ2dlZCA9IHRhZy0+dGFnZ2VkOworCXdoaWxlICh0YWdnZWQtPnR5cGUgPT0gT0JKX1RBRykgeworCQl0YWdnZWQgPSAoKHN0cnVjdCB0YWcgKil0YWdnZWQpLT50YWdnZWQ7CisJfQorCWlmICh0YWdnZWQtPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJd2FybmluZygiT21pdHRpbmcgdGFnICVzLFxuc2luY2UgdGFncyBvZiB0cmVlcyAob3IgdGFncyBvZiB0YWdzIG9mIHRyZWVzLCBldGMuKSBhcmUgbm90IHN1cHBvcnRlZC4iLAorCQkJb2lkX3RvX2hleCgmdGFnLT5vYmplY3Qub2lkKSk7CisJCXJldHVybjsKKwl9CisKKwlidWYgPSByZWFkX29iamVjdF9maWxlKCZ0YWctPm9iamVjdC5vaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCWRpZSgiY291bGQgbm90IHJlYWQgdGFnICVzIiwgb2lkX3RvX2hleCgmdGFnLT5vYmplY3Qub2lkKSk7CisJbWVzc2FnZSA9IG1lbW1lbShidWYsIHNpemUsICJcblxuIiwgMik7CisJaWYgKG1lc3NhZ2UpIHsKKwkJbWVzc2FnZSArPSAyOworCQltZXNzYWdlX3NpemUgPSBzdHJsZW4obWVzc2FnZSk7CisJfQorCXRhZ2dlciA9IG1lbW1lbShidWYsIG1lc3NhZ2UgPyBtZXNzYWdlIC0gYnVmIDogc2l6ZSwgIlxudGFnZ2VyICIsIDgpOworCWlmICghdGFnZ2VyKSB7CisJCWlmIChmYWtlX21pc3NpbmdfdGFnZ2VyKQorCQkJdGFnZ2VyID0gInRhZ2dlciBVbnNwZWNpZmllZCBUYWdnZXIgIgorCQkJCSI8dW5zcGVjaWZpZWQtdGFnZ2VyPiAwICswMDAwIjsKKwkJZWxzZQorCQkJdGFnZ2VyID0gIiI7CisJCXRhZ2dlcl9lbmQgPSB0YWdnZXIgKyBzdHJsZW4odGFnZ2VyKTsKKwl9IGVsc2UgeworCQl0YWdnZXIrKzsKKwkJdGFnZ2VyX2VuZCA9IHN0cmNocm51bCh0YWdnZXIsICdcbicpOworCQlpZiAoYW5vbnltaXplKQorCQkJYW5vbnltaXplX2lkZW50X2xpbmUoJnRhZ2dlciwgJnRhZ2dlcl9lbmQpOworCX0KKworCWlmIChhbm9ueW1pemUpIHsKKwkJbmFtZSA9IGFub255bWl6ZV9yZWZuYW1lKG5hbWUpOworCQlpZiAobWVzc2FnZSkgeworCQkJc3RhdGljIHN0cnVjdCBoYXNobWFwIHRhZ3M7CisJCQltZXNzYWdlID0gYW5vbnltaXplX21lbSgmdGFncywgYW5vbnltaXplX3RhZywKKwkJCQkJCW1lc3NhZ2UsICZtZXNzYWdlX3NpemUpOworCQl9CisJfQorCisJLyogaGFuZGxlIHNpZ25lZCB0YWdzICovCisJaWYgKG1lc3NhZ2UpIHsKKwkJY29uc3QgY2hhciAqc2lnbmF0dXJlID0gc3Ryc3RyKG1lc3NhZ2UsCisJCQkJCSAgICAgICAiXG4tLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxuIik7CisJCWlmIChzaWduYXR1cmUpCisJCQlzd2l0Y2goc2lnbmVkX3RhZ19tb2RlKSB7CisJCQljYXNlIFNJR05FRF9UQUdfQUJPUlQ6CisJCQkJZGllKCJlbmNvdW50ZXJlZCBzaWduZWQgdGFnICVzOyB1c2UgIgorCQkJCSAgICAiLS1zaWduZWQtdGFncz08bW9kZT4gdG8gaGFuZGxlIGl0IiwKKwkJCQkgICAgb2lkX3RvX2hleCgmdGFnLT5vYmplY3Qub2lkKSk7CisJCQljYXNlIFdBUk46CisJCQkJd2FybmluZygiZXhwb3J0aW5nIHNpZ25lZCB0YWcgJXMiLAorCQkJCQlvaWRfdG9faGV4KCZ0YWctPm9iamVjdC5vaWQpKTsKKwkJCQkvKiBmYWxsdGhydSAqLworCQkJY2FzZSBWRVJCQVRJTToKKwkJCQlicmVhazsKKwkJCWNhc2UgV0FSTl9TVFJJUDoKKwkJCQl3YXJuaW5nKCJzdHJpcHBpbmcgc2lnbmF0dXJlIGZyb20gdGFnICVzIiwKKwkJCQkJb2lkX3RvX2hleCgmdGFnLT5vYmplY3Qub2lkKSk7CisJCQkJLyogZmFsbHRocnUgKi8KKwkJCWNhc2UgU1RSSVA6CisJCQkJbWVzc2FnZV9zaXplID0gc2lnbmF0dXJlICsgMSAtIG1lc3NhZ2U7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJLyogaGFuZGxlIHRhZy0+dGFnZ2VkIGhhdmluZyBiZWVuIGZpbHRlcmVkIG91dCBkdWUgdG8gcGF0aHMgc3BlY2lmaWVkICovCisJdGFnZ2VkID0gdGFnLT50YWdnZWQ7CisJdGFnZ2VkX21hcmsgPSBnZXRfb2JqZWN0X21hcmsodGFnZ2VkKTsKKwlpZiAoIXRhZ2dlZF9tYXJrKSB7CisJCXN3aXRjaCh0YWdfb2ZfZmlsdGVyZWRfbW9kZSkgeworCQljYXNlIFRBR19GSUxURVJJTkdfQUJPUlQ6CisJCQlkaWUoInRhZyAlcyB0YWdzIHVuZXhwb3J0ZWQgb2JqZWN0OyB1c2UgIgorCQkJICAgICItLXRhZy1vZi1maWx0ZXJlZC1vYmplY3Q9PG1vZGU+IHRvIGhhbmRsZSBpdCIsCisJCQkgICAgb2lkX3RvX2hleCgmdGFnLT5vYmplY3Qub2lkKSk7CisJCWNhc2UgRFJPUDoKKwkJCS8qIElnbm9yZSB0aGlzIHRhZyBhbHRvZ2V0aGVyICovCisJCQlmcmVlKGJ1Zik7CisJCQlyZXR1cm47CisJCWNhc2UgUkVXUklURToKKwkJCWlmICh0YWdnZWQtPnR5cGUgPT0gT0JKX1RBRyAmJiAhbWFya190YWdzKSB7CisJCQkJZGllKF8oIkVycm9yOiBDYW5ub3QgZXhwb3J0IG5lc3RlZCB0YWdzIHVubGVzcyAtLW1hcmstdGFncyBpcyBzcGVjaWZpZWQuIikpOworCQkJfSBlbHNlIGlmICh0YWdnZWQtPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQkJCXAgPSByZXdyaXRlX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKXRhZ2dlZCk7CisJCQkJaWYgKCFwKSB7CisJCQkJCXByaW50ZigicmVzZXQgJXNcbmZyb20gJXNcblxuIiwKKwkJCQkJICAgICAgIG5hbWUsIG9pZF90b19oZXgoJm51bGxfb2lkKSk7CisJCQkJCWZyZWUoYnVmKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQl0YWdnZWRfbWFyayA9IGdldF9vYmplY3RfbWFyaygmcC0+b2JqZWN0KTsKKwkJCX0gZWxzZSB7CisJCQkJLyogdGFnZ2VkLT50eXBlIGlzIGVpdGhlciBPQkpfQkxPQiBvciBPQkpfVEFHICovCisJCQkJdGFnZ2VkX21hcmsgPSBnZXRfb2JqZWN0X21hcmsodGFnZ2VkKTsKKwkJCX0KKwkJfQorCX0KKworCWlmICh0YWdnZWQtPnR5cGUgPT0gT0JKX1RBRykgeworCQlwcmludGYoInJlc2V0ICVzXG5mcm9tICVzXG5cbiIsCisJCSAgICAgICBuYW1lLCBvaWRfdG9faGV4KCZudWxsX29pZCkpOworCX0KKwlza2lwX3ByZWZpeChuYW1lLCAicmVmcy90YWdzLyIsICZuYW1lKTsKKwlwcmludGYoInRhZyAlc1xuIiwgbmFtZSk7CisJaWYgKG1hcmtfdGFncykgeworCQltYXJrX25leHRfb2JqZWN0KCZ0YWctPm9iamVjdCk7CisJCXByaW50ZigibWFyayA6JSJQUkl1MzIiXG4iLCBsYXN0X2lkbnVtKTsKKwl9CisJaWYgKHRhZ2dlZF9tYXJrKQorCQlwcmludGYoImZyb20gOiVkXG4iLCB0YWdnZWRfbWFyayk7CisJZWxzZQorCQlwcmludGYoImZyb20gJXNcbiIsIG9pZF90b19oZXgoJnRhZ2dlZC0+b2lkKSk7CisKKwlpZiAoc2hvd19vcmlnaW5hbF9pZHMpCisJCXByaW50Zigib3JpZ2luYWwtb2lkICVzXG4iLCBvaWRfdG9faGV4KCZ0YWctPm9iamVjdC5vaWQpKTsKKwlwcmludGYoIiUuKnMlc2RhdGEgJWRcbiUuKnNcbiIsCisJICAgICAgIChpbnQpKHRhZ2dlcl9lbmQgLSB0YWdnZXIpLCB0YWdnZXIsCisJICAgICAgIHRhZ2dlciA9PSB0YWdnZXJfZW5kID8gIiIgOiAiXG4iLAorCSAgICAgICAoaW50KW1lc3NhZ2Vfc2l6ZSwgKGludCltZXNzYWdlX3NpemUsIG1lc3NhZ2UgPyBtZXNzYWdlIDogIiIpOworCWZyZWUoYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9jb21taXQoc3RydWN0IHJldl9jbWRsaW5lX2VudHJ5ICplLCBjaGFyICpmdWxsX25hbWUpCit7CisJc3dpdGNoIChlLT5pdGVtLT50eXBlKSB7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlyZXR1cm4gKHN0cnVjdCBjb21taXQgKillLT5pdGVtOworCWNhc2UgT0JKX1RBRzogeworCQlzdHJ1Y3QgdGFnICp0YWcgPSAoc3RydWN0IHRhZyAqKWUtPml0ZW07CisKKwkJLyogaGFuZGxlIG5lc3RlZCB0YWdzICovCisJCXdoaWxlICh0YWcgJiYgdGFnLT5vYmplY3QudHlwZSA9PSBPQkpfVEFHKSB7CisJCQlwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZ0YWctPm9iamVjdC5vaWQpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZ0YWdfcmVmcywgZnVsbF9uYW1lKS0+dXRpbCA9IHRhZzsKKwkJCXRhZyA9IChzdHJ1Y3QgdGFnICopdGFnLT50YWdnZWQ7CisJCX0KKwkJaWYgKCF0YWcpCisJCQlkaWUoIlRhZyAlcyBwb2ludHMgbm93aGVyZT8iLCBlLT5uYW1lKTsKKwkJcmV0dXJuIChzdHJ1Y3QgY29tbWl0ICopdGFnOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfdGFnc19hbmRfZHVwbGljYXRlcyhzdHJ1Y3QgcmV2X2NtZGxpbmVfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZXZfY21kbGluZV9lbnRyeSAqZSA9IGluZm8tPnJldiArIGk7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCWNoYXIgKmZ1bGxfbmFtZTsKKworCQlpZiAoZS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisKKwkJaWYgKGR3aW1fcmVmKGUtPm5hbWUsIHN0cmxlbihlLT5uYW1lKSwgJm9pZCwgJmZ1bGxfbmFtZSkgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChyZWZzcGVjcy5ucikgeworCQkJY2hhciAqcHJpdmF0ZTsKKwkJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcygmcmVmc3BlY3MsIGZ1bGxfbmFtZSk7CisJCQlpZiAocHJpdmF0ZSkgeworCQkJCWZyZWUoZnVsbF9uYW1lKTsKKwkJCQlmdWxsX25hbWUgPSBwcml2YXRlOworCQkJfQorCQl9CisKKwkJY29tbWl0ID0gZ2V0X2NvbW1pdChlLCBmdWxsX25hbWUpOworCQlpZiAoIWNvbW1pdCkgeworCQkJd2FybmluZygiJXM6IFVuZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgJXMsIHNraXBwaW5nLiIsCisJCQkJZS0+bmFtZSwKKwkJCQl0eXBlX25hbWUoZS0+aXRlbS0+dHlwZSkpOworCQkJY29udGludWU7CisJCX0KKworCQlzd2l0Y2goY29tbWl0LT5vYmplY3QudHlwZSkgeworCQljYXNlIE9CSl9DT01NSVQ6CisJCQlicmVhazsKKwkJY2FzZSBPQkpfQkxPQjoKKwkJCWV4cG9ydF9ibG9iKCZjb21taXQtPm9iamVjdC5vaWQpOworCQkJY29udGludWU7CisJCWRlZmF1bHQ6IC8qIE9CSl9UQUcgKG5lc3RlZCB0YWdzKSBpcyBhbHJlYWR5IGhhbmRsZWQgKi8KKwkJCXdhcm5pbmcoIlRhZyBwb2ludHMgdG8gb2JqZWN0IG9mIHVuZXhwZWN0ZWQgdHlwZSAlcywgc2tpcHBpbmcuIiwKKwkJCQl0eXBlX25hbWUoY29tbWl0LT5vYmplY3QudHlwZSkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhpcyByZWYgZ2V0cyBwcm9wZXJseSB1cGRhdGVkIGV2ZW50dWFsbHksIHdoZXRoZXIKKwkJICogdGhyb3VnaCBhIGNvbW1pdCBvciBtYW51YWxseSBhdCB0aGUgZW5kLgorCQkgKi8KKwkJaWYgKGUtPml0ZW0tPnR5cGUgIT0gT0JKX1RBRykKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfcmVmcywgZnVsbF9uYW1lKS0+dXRpbCA9IGNvbW1pdDsKKworCQlpZiAoISpyZXZpc2lvbl9zb3VyY2VzX2F0KCZyZXZpc2lvbl9zb3VyY2VzLCBjb21taXQpKQorCQkJKnJldmlzaW9uX3NvdXJjZXNfYXQoJnJldmlzaW9uX3NvdXJjZXMsIGNvbW1pdCkgPSBmdWxsX25hbWU7CisJfQorCisJc3RyaW5nX2xpc3Rfc29ydCgmZXh0cmFfcmVmcyk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJmV4dHJhX3JlZnMsIDApOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdGFnc19hbmRfZHVwbGljYXRlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4dHJhcykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSBleHRyYXMtPm5yIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGV4dHJhcy0+aXRlbXNbaV0uc3RyaW5nOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBleHRyYXMtPml0ZW1zW2ldLnV0aWw7CisJCWludCBtYXJrOworCisJCXN3aXRjaCAob2JqZWN0LT50eXBlKSB7CisJCWNhc2UgT0JKX1RBRzoKKwkJCWhhbmRsZV90YWcobmFtZSwgKHN0cnVjdCB0YWcgKilvYmplY3QpOworCQkJYnJlYWs7CisJCWNhc2UgT0JKX0NPTU1JVDoKKwkJCWlmIChhbm9ueW1pemUpCisJCQkJbmFtZSA9IGFub255bWl6ZV9yZWZuYW1lKG5hbWUpOworCQkJLyogY3JlYXRlIHJlZnMgcG9pbnRpbmcgdG8gYWxyZWFkeSBzZWVuIGNvbW1pdHMgKi8KKwkJCWNvbW1pdCA9IHJld3JpdGVfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0KTsKKwkJCWlmICghY29tbWl0KSB7CisJCQkJLyoKKwkJCQkgKiBOZWl0aGVyIHRoaXMgb2JqZWN0IG5vciBhbnkgb2YgaXRzCisJCQkJICogYW5jZXN0b3JzIHRvdWNoIGFueSByZWxldmFudCBwYXRocywgc28KKwkJCQkgKiBpdCBoYXMgYmVlbiBmaWx0ZXJlZCB0byBub3RoaW5nLiAgRGVsZXRlCisJCQkJICogaXQuCisJCQkJICovCisJCQkJcHJpbnRmKCJyZXNldCAlc1xuZnJvbSAlc1xuXG4iLAorCQkJCSAgICAgICBuYW1lLCBvaWRfdG9faGV4KCZudWxsX29pZCkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQltYXJrID0gZ2V0X29iamVjdF9tYXJrKCZjb21taXQtPm9iamVjdCk7CisJCQlpZiAoIW1hcmspIHsKKwkJCQkvKgorCQkJCSAqIEdldHRpbmcgaGVyZSBtZWFucyB3ZSBoYXZlIGEgY29tbWl0IHdoaWNoCisJCQkJICogd2FzIGV4Y2x1ZGVkIGJ5IGEgbmVnYXRpdmUgcmVmc3BlYyAoZS5nLgorCQkJCSAqIGZhc3QtZXhwb3J0IF5tYXN0ZXIgbWFzdGVyKS4gIElmIHdlIGFyZQorCQkJCSAqIHJlZmVyZW5jaW5nIGV4Y2x1ZGVkIGNvbW1pdHMsIHNldCB0aGUgcmVmCisJCQkJICogdG8gdGhlIGV4YWN0IGNvbW1pdC4gIE90aGVyd2lzZSwgdGhlIHVzZXIKKwkJCQkgKiB3YW50cyB0aGUgYnJhbmNoIGV4cG9ydGVkIGJ1dCBldmVyeSBjb21taXQKKwkJCQkgKiBpbiBpdHMgaGlzdG9yeSB0byBiZSBkZWxldGVkLCB3aGljaCBiYXNpY2FsbHkKKwkJCQkgKiBqdXN0IG1lYW5zIGRlbGV0aW9uIG9mIHRoZSByZWYuCisJCQkJICovCisJCQkJaWYgKCFyZWZlcmVuY2VfZXhjbHVkZWRfY29tbWl0cykgeworCQkJCQkvKiBkZWxldGUgdGhlIHJlZiAqLworCQkJCQlwcmludGYoInJlc2V0ICVzXG5mcm9tICVzXG5cbiIsCisJCQkJCSAgICAgICBuYW1lLCBvaWRfdG9faGV4KCZudWxsX29pZCkpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJLyogc2V0IHJlZiB0byBjb21taXQgdXNpbmcgb2lkLCBub3QgbWFyayAqLworCQkJCXByaW50ZigicmVzZXQgJXNcbmZyb20gJXNcblxuIiwgbmFtZSwKKwkJCQkgICAgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXByaW50ZigicmVzZXQgJXNcbmZyb20gOiVkXG5cbiIsIG5hbWUsIG1hcmsKKwkJCSAgICAgICApOworCQkJc2hvd19wcm9ncmVzcygpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4cG9ydF9tYXJrcyhjaGFyICpmaWxlKQoreworCXVuc2lnbmVkIGludCBpOworCXVpbnQzMl90IG1hcms7CisJc3RydWN0IGRlY29yYXRpb25fZW50cnkgKmRlY28gPSBpZG51bXMuZW50cmllczsKKwlGSUxFICpmOworCWludCBlID0gMDsKKworCWYgPSBmb3Blbl9mb3Jfd3JpdGluZyhmaWxlKTsKKwlpZiAoIWYpCisJCWRpZV9lcnJubygiVW5hYmxlIHRvIG9wZW4gbWFya3MgZmlsZSAlcyBmb3Igd3JpdGluZy4iLCBmaWxlKTsKKworCWZvciAoaSA9IDA7IGkgPCBpZG51bXMuc2l6ZTsgaSsrKSB7CisJCWlmIChkZWNvLT5iYXNlICYmIGRlY28tPmJhc2UtPnR5cGUgPT0gMSkgeworCQkJbWFyayA9IHB0cl90b19tYXJrKGRlY28tPmRlY29yYXRpb24pOworCQkJaWYgKGZwcmludGYoZiwgIjolIlBSSXUzMiIgJXNcbiIsIG1hcmssCisJCQkJb2lkX3RvX2hleCgmZGVjby0+YmFzZS0+b2lkKSkgPCAwKSB7CisJCQkgICAgZSA9IDE7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCX0KKwkJZGVjbysrOworCX0KKworCWUgfD0gZmVycm9yKGYpOworCWUgfD0gZmNsb3NlKGYpOworCWlmIChlKQorCQllcnJvcigiVW5hYmxlIHRvIHdyaXRlIG1hcmtzIGZpbGUgJXMuIiwgZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGltcG9ydF9tYXJrcyhjaGFyICppbnB1dF9maWxlLCBpbnQgY2hlY2tfZXhpc3RzKQoreworCWNoYXIgbGluZVs1MTJdOworCUZJTEUgKmY7CisJc3RydWN0IHN0YXQgc2I7CisKKwlpZiAoY2hlY2tfZXhpc3RzICYmIHN0YXQoaW5wdXRfZmlsZSwgJnNiKSkKKwkJcmV0dXJuOworCisJZiA9IHhmb3BlbihpbnB1dF9maWxlLCAiciIpOworCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisJCXVpbnQzMl90IG1hcms7CisJCWNoYXIgKmxpbmVfZW5kLCAqbWFya19lbmQ7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJCWxpbmVfZW5kID0gc3RyY2hyKGxpbmUsICdcbicpOworCQlpZiAobGluZVswXSAhPSAnOicgfHwgIWxpbmVfZW5kKQorCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKKwkJKmxpbmVfZW5kID0gJ1wwJzsKKworCQltYXJrID0gc3RydG91bWF4KGxpbmUgKyAxLCAmbWFya19lbmQsIDEwKTsKKwkJaWYgKCFtYXJrIHx8IG1hcmtfZW5kID09IGxpbmUgKyAxCisJCQl8fCAqbWFya19lbmQgIT0gJyAnIHx8IGdldF9vaWRfaGV4KG1hcmtfZW5kICsgMSwgJm9pZCkpCisJCQlkaWUoImNvcnJ1cHQgbWFyayBsaW5lOiAlcyIsIGxpbmUpOworCisJCWlmIChsYXN0X2lkbnVtIDwgbWFyaykKKwkJCWxhc3RfaWRudW0gPSBtYXJrOworCisJCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvaWQsIE5VTEwpOworCQlpZiAodHlwZSA8IDApCisJCQlkaWUoIm9iamVjdCBub3QgZm91bmQ6ICVzIiwgb2lkX3RvX2hleCgmb2lkKSk7CisKKwkJaWYgKHR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCS8qIG9ubHkgY29tbWl0cyAqLworCQkJY29udGludWU7CisKKwkJY29tbWl0ID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJCWlmICghY29tbWl0KQorCQkJZGllKCJub3QgYSBjb21taXQ/IGNhbid0IGhhcHBlbjogJXMiLCBvaWRfdG9faGV4KCZvaWQpKTsKKworCQlvYmplY3QgPSAmY29tbWl0LT5vYmplY3Q7CisKKwkJaWYgKG9iamVjdC0+ZmxhZ3MgJiBTSE9XTikKKwkJCWVycm9yKCJPYmplY3QgJXMgYWxyZWFkeSBoYXMgYSBtYXJrIiwgb2lkX3RvX2hleCgmb2lkKSk7CisKKwkJbWFya19vYmplY3Qob2JqZWN0LCBtYXJrKTsKKworCQlvYmplY3QtPmZsYWdzIHw9IFNIT1dOOworCX0KKwlmY2xvc2UoZik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9kZWxldGVzKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJlZnNwZWNzLm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZnNwZWNfaXRlbSAqcmVmc3BlYyA9ICZyZWZzcGVjcy5pdGVtc1tpXTsKKwkJaWYgKCpyZWZzcGVjLT5zcmMpCisJCQljb250aW51ZTsKKworCQlwcmludGYoInJlc2V0ICVzXG5mcm9tICVzXG5cbiIsCisJCQkJcmVmc3BlYy0+ZHN0LCBvaWRfdG9faGV4KCZudWxsX29pZCkpOworCX0KK30KKworaW50IGNtZF9mYXN0X2V4cG9ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGNvbW1pdHMgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY2hhciAqZXhwb3J0X2ZpbGVuYW1lID0gTlVMTCwKKwkgICAgICppbXBvcnRfZmlsZW5hbWUgPSBOVUxMLAorCSAgICAgKmltcG9ydF9maWxlbmFtZV9pZl9leGlzdHMgPSBOVUxMOworCXVpbnQzMl90IGxhc3RpbXBvcnRpZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmc3BlY3NfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHBhdGhzX29mX2NoYW5nZWRfb2JqZWN0cyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfSU5URUdFUigwLCAicHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiKSksCisJCU9QVF9DQUxMQkFDSygwLCAic2lnbmVkLXRhZ3MiLCAmc2lnbmVkX3RhZ19tb2RlLCBOXygibW9kZSIpLAorCQkJICAgICBOXygic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIiksCisJCQkgICAgIHBhcnNlX29wdF9zaWduZWRfdGFnX21vZGUpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInRhZy1vZi1maWx0ZXJlZC1vYmplY3QiLCAmdGFnX29mX2ZpbHRlcmVkX21vZGUsIE5fKCJtb2RlIiksCisJCQkgICAgIE5fKCJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIiksCisJCQkgICAgIHBhcnNlX29wdF90YWdfb2ZfZmlsdGVyZWRfbW9kZSksCisJCU9QVF9DQUxMQkFDSygwLCAicmVlbmNvZGUiLCAmcmVlbmNvZGVfbW9kZSwgTl8oIm1vZGUiKSwKKwkJCSAgICAgTl8oInNlbGVjdCBoYW5kbGluZyBvZiBjb21taXQgbWVzc2FnZXMgaW4gYW4gYWx0ZXJuYXRlIGVuY29kaW5nIiksCisJCQkgICAgIHBhcnNlX29wdF9yZWVuY29kZV9tb2RlKSwKKwkJT1BUX1NUUklORygwLCAiZXhwb3J0LW1hcmtzIiwgJmV4cG9ydF9maWxlbmFtZSwgTl8oImZpbGUiKSwKKwkJCSAgICAgTl8oIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIikpLAorCQlPUFRfU1RSSU5HKDAsICJpbXBvcnQtbWFya3MiLCAmaW1wb3J0X2ZpbGVuYW1lLCBOXygiZmlsZSIpLAorCQkJICAgICBOXygiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIikpLAorCQlPUFRfU1RSSU5HKDAsICJpbXBvcnQtbWFya3MtaWYtZXhpc3RzIiwKKwkJCSAgICAgJmltcG9ydF9maWxlbmFtZV9pZl9leGlzdHMsCisJCQkgICAgIE5fKCJmaWxlIiksCisJCQkgICAgIE5fKCJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUgaWYgaXQgZXhpc3RzIikpLAorCQlPUFRfQk9PTCgwLCAiZmFrZS1taXNzaW5nLXRhZ2dlciIsICZmYWtlX21pc3NpbmdfdGFnZ2VyLAorCQkJIE5fKCJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIpKSwKKwkJT1BUX0JPT0woMCwgImZ1bGwtdHJlZSIsICZmdWxsX3RyZWUsCisJCQkgTl8oIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IikpLAorCQlPUFRfQk9PTCgwLCAidXNlLWRvbmUtZmVhdHVyZSIsICZ1c2VfZG9uZV9mZWF0dXJlLAorCQkJICAgICBOXygiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iKSksCisJCU9QVF9CT09MKDAsICJuby1kYXRhIiwgJm5vX2RhdGEsIE5fKCJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAicmVmc3BlYyIsICZyZWZzcGVjc19saXN0LCBOXygicmVmc3BlYyIpLAorCQkJICAgICBOXygiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIikpLAorCQlPUFRfQk9PTCgwLCAiYW5vbnltaXplIiwgJmFub255bWl6ZSwgTl8oImFub255bWl6ZSBvdXRwdXQiKSksCisJCU9QVF9CT09MKDAsICJyZWZlcmVuY2UtZXhjbHVkZWQtcGFyZW50cyIsCisJCQkgJnJlZmVyZW5jZV9leGNsdWRlZF9jb21taXRzLCBOXygiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIikpLAorCQlPUFRfQk9PTCgwLCAic2hvdy1vcmlnaW5hbC1pZHMiLCAmc2hvd19vcmlnaW5hbF9pZHMsCisJCQkgICAgTl8oIlNob3cgb3JpZ2luYWwgb2JqZWN0IGlkcyBvZiBibG9icy9jb21taXRzIikpLAorCQlPUFRfQk9PTCgwLCAibWFyay10YWdzIiwgJm1hcmtfdGFncywKKwkJCSAgICBOXygiTGFiZWwgdGFncyB3aXRoIG1hcmsgaWRzIikpLAorCisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYXJnYyA9PSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMgKGZhc3RfZXhwb3J0X3VzYWdlLCBvcHRpb25zKTsKKworCS8qIHdlIGhhbmRsZSBlbmNvZGluZ3MgKi8KKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgcHJlZml4KTsKKwlpbml0X3JldmlzaW9uX3NvdXJjZXMoJnJldmlzaW9uX3NvdXJjZXMpOworCXJldnMudG9wb19vcmRlciA9IDE7CisJcmV2cy5zb3VyY2VzID0gJnJldmlzaW9uX3NvdXJjZXM7CisJcmV2cy5yZXdyaXRlX3BhcmVudHMgPSAxOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZmFzdF9leHBvcnRfdXNhZ2UsCisJCQlQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04pOworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpOworCWlmIChhcmdjID4gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zIChmYXN0X2V4cG9ydF91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAocmVmc3BlY3NfbGlzdC5ucikgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcmVmc3BlY3NfbGlzdC5ucjsgaSsrKQorCQkJcmVmc3BlY19hcHBlbmQoJnJlZnNwZWNzLCByZWZzcGVjc19saXN0Lml0ZW1zW2ldLnN0cmluZyk7CisKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnJlZnNwZWNzX2xpc3QsIDEpOworCX0KKworCWlmICh1c2VfZG9uZV9mZWF0dXJlKQorCQlwcmludGYoImZlYXR1cmUgZG9uZVxuIik7CisKKwlpZiAoaW1wb3J0X2ZpbGVuYW1lICYmIGltcG9ydF9maWxlbmFtZV9pZl9leGlzdHMpCisJCWRpZShfKCJDYW5ub3QgcGFzcyBib3RoIC0taW1wb3J0LW1hcmtzIGFuZCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiKSk7CisJaWYgKGltcG9ydF9maWxlbmFtZSkKKwkJaW1wb3J0X21hcmtzKGltcG9ydF9maWxlbmFtZSwgMCk7CisJZWxzZSBpZiAoaW1wb3J0X2ZpbGVuYW1lX2lmX2V4aXN0cykKKwkJaW1wb3J0X21hcmtzKGltcG9ydF9maWxlbmFtZV9pZl9leGlzdHMsIDEpOworCWxhc3RpbXBvcnRpZCA9IGxhc3RfaWRudW07CisKKwlpZiAoaW1wb3J0X2ZpbGVuYW1lICYmIHJldnMucHJ1bmVfZGF0YS5ucikKKwkJZnVsbF90cmVlID0gMTsKKworCWdldF90YWdzX2FuZF9kdXBsaWNhdGVzKCZyZXZzLmNtZGxpbmUpOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwlyZXZzLmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gc2hvd19maWxlbW9kaWZ5OworCXJldnMuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZwYXRoc19vZl9jaGFuZ2VkX29iamVjdHM7CisJcmV2cy5kaWZmb3B0LmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldnMpKSkgeworCQlpZiAoaGFzX3Vuc2hvd25fcGFyZW50KGNvbW1pdCkpIHsKKwkJCWFkZF9vYmplY3RfYXJyYXkoJmNvbW1pdC0+b2JqZWN0LCBOVUxMLCAmY29tbWl0cyk7CisJCX0KKwkJZWxzZSB7CisJCQloYW5kbGVfY29tbWl0KGNvbW1pdCwgJnJldnMsICZwYXRoc19vZl9jaGFuZ2VkX29iamVjdHMpOworCQkJaGFuZGxlX3RhaWwoJmNvbW1pdHMsICZyZXZzLCAmcGF0aHNfb2ZfY2hhbmdlZF9vYmplY3RzKTsKKwkJfQorCX0KKworCWhhbmRsZV90YWdzX2FuZF9kdXBsaWNhdGVzKCZleHRyYV9yZWZzKTsKKwloYW5kbGVfdGFnc19hbmRfZHVwbGljYXRlcygmdGFnX3JlZnMpOworCWhhbmRsZV9kZWxldGVzKCk7CisKKwlpZiAoZXhwb3J0X2ZpbGVuYW1lICYmIGxhc3RpbXBvcnRpZCAhPSBsYXN0X2lkbnVtKQorCQlleHBvcnRfbWFya3MoZXhwb3J0X2ZpbGVuYW1lKTsKKworCWlmICh1c2VfZG9uZV9mZWF0dXJlKQorCQlwcmludGYoImRvbmVcbiIpOworCisJcmVmc3BlY19jbGVhcigmcmVmc3BlY3MpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2ZldGNoLXBhY2suYyBiL2J1aWx0aW4vZmV0Y2gtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2ZldGNoLXBhY2suYwpAQCAtMCwwICsxLDI3MCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImZldGNoLXBhY2suaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGZldGNoX3BhY2tfdXNhZ2VbXSA9CisiZ2l0IGZldGNoLXBhY2sgWy0tYWxsXSBbLS1zdGRpbl0gWy0tcXVpZXQgfCAtcV0gWy0ta2VlcCB8IC1rXSBbLS10aGluXSAiCisiWy0taW5jbHVkZS10YWddIFstLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+XSBbLS1kZXB0aD08bj5dICIKKyJbLS1uby1wcm9ncmVzc10gWy0tZGlhZy11cmxdIFstdl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWZzPi4uLl0iOworCitzdGF0aWMgdm9pZCBhZGRfc291Z2h0X2VudHJ5KHN0cnVjdCByZWYgKioqc291Z2h0LCBpbnQgKm5yLCBpbnQgKmFsbG9jLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpwOworCisJaWYgKCFwYXJzZV9vaWRfaGV4KG5hbWUsICZvaWQsICZwKSkgeworCQlpZiAoKnAgPT0gJyAnKSB7CisJCQkvKiA8b2lkPiA8cmVmPiwgZmluZCByZWZuYW1lICovCisJCQluYW1lID0gcCArIDE7CisJCX0gZWxzZSBpZiAoKnAgPT0gJ1wwJykgeworCQkJOyAvKiA8b2lkPiwgbGVhdmUgb2lkIGFzIG5hbWUgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIDxyZWY+LCBjbGVhciBjcnVmdCBmcm9tIG9pZCAqLworCQkJb2lkY2xyKCZvaWQpOworCQl9CisJfSBlbHNlIHsKKwkJLyogPHJlZj4sIGNsZWFyIGNydWZ0IGZyb20gZ2V0X29pZF9oZXggKi8KKwkJb2lkY2xyKCZvaWQpOworCX0KKworCXJlZiA9IGFsbG9jX3JlZihuYW1lKTsKKwlvaWRjcHkoJnJlZi0+b2xkX29pZCwgJm9pZCk7CisJKCpucikrKzsKKwlBTExPQ19HUk9XKCpzb3VnaHQsICpuciwgKmFsbG9jKTsKKwkoKnNvdWdodClbKm5yIC0gMV0gPSByZWY7Cit9CisKK2ludCBjbWRfZmV0Y2hfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCByZWYgKnJlZiA9IE5VTEw7CisJY29uc3QgY2hhciAqZGVzdCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnNvdWdodCA9IE5VTEw7CisJaW50IG5yX3NvdWdodCA9IDAsIGFsbG9jX3NvdWdodCA9IDA7CisJaW50IGZkWzJdOworCWNoYXIgKnBhY2tfbG9ja2ZpbGUgPSBOVUxMOworCWNoYXIgKipwYWNrX2xvY2tmaWxlX3B0ciA9IE5VTEw7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisJc3RydWN0IGZldGNoX3BhY2tfYXJncyBhcmdzOworCXN0cnVjdCBvaWRfYXJyYXkgc2hhbGxvdyA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZWVwZW5fbm90ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOworCWVudW0gcHJvdG9jb2xfdmVyc2lvbiB2ZXJzaW9uOworCisJZmV0Y2hfaWZfbWlzc2luZyA9IDA7CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoImZldGNoLXBhY2siKTsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLnVwbG9hZHBhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjICYmICphcmd2W2ldID09ICctJzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tdXBsb2FkLXBhY2s9IiwgJmFyZykpIHsKKwkJCWFyZ3MudXBsb2FkcGFjayA9IGFyZzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWV4ZWM9IiwgJmFyZykpIHsKKwkJCWFyZ3MudXBsb2FkcGFjayA9IGFyZzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLXF1aWV0IiwgYXJnKSB8fCAhc3RyY21wKCItcSIsIGFyZykpIHsKKwkJCWFyZ3MucXVpZXQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0ta2VlcCIsIGFyZykgfHwgIXN0cmNtcCgiLWsiLCBhcmcpKSB7CisJCQlhcmdzLmxvY2tfcGFjayA9IGFyZ3Mua2VlcF9wYWNrOworCQkJYXJncy5rZWVwX3BhY2sgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tdGhpbiIsIGFyZykpIHsKKwkJCWFyZ3MudXNlX3RoaW5fcGFjayA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1pbmNsdWRlLXRhZyIsIGFyZykpIHsKKwkJCWFyZ3MuaW5jbHVkZV90YWcgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tYWxsIiwgYXJnKSkgeworCQkJYXJncy5mZXRjaF9hbGwgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tc3RkaW4iLCBhcmcpKSB7CisJCQlhcmdzLnN0ZGluX3JlZnMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tZGlhZy11cmwiLCBhcmcpKSB7CisJCQlhcmdzLmRpYWdfdXJsID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItdiIsIGFyZykpIHsKKwkJCWFyZ3MudmVyYm9zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1kZXB0aD0iLCAmYXJnKSkgeworCQkJYXJncy5kZXB0aCA9IHN0cnRvbChhcmcsIE5VTEwsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tc2hhbGxvdy1zaW5jZT0iLCAmYXJnKSkgeworCQkJYXJncy5kZWVwZW5fc2luY2UgPSB4c3RyZHVwKGFyZyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1zaGFsbG93LWV4Y2x1ZGU9IiwgJmFyZykpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVlcGVuX25vdCwgYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tZGVlcGVuLXJlbGF0aXZlIikpIHsKKwkJCWFyZ3MuZGVlcGVuX3JlbGF0aXZlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLW5vLXByb2dyZXNzIiwgYXJnKSkgeworCQkJYXJncy5ub19wcm9ncmVzcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1zdGF0ZWxlc3MtcnBjIiwgYXJnKSkgeworCQkJYXJncy5zdGF0ZWxlc3NfcnBjID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWxvY2stcGFjayIsIGFyZykpIHsKKwkJCWFyZ3MubG9ja19wYWNrID0gMTsKKwkJCXBhY2tfbG9ja2ZpbGVfcHRyID0gJnBhY2tfbG9ja2ZpbGU7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkIiwgYXJnKSkgeworCQkJYXJncy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWNsb25pbmciLCBhcmcpKSB7CisJCQlhcmdzLmNsb25pbmcgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tdXBkYXRlLXNoYWxsb3ciLCBhcmcpKSB7CisJCQlhcmdzLnVwZGF0ZV9zaGFsbG93ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWZyb20tcHJvbWlzb3IiLCBhcmcpKSB7CisJCQlhcmdzLmZyb21fcHJvbWlzb3IgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tbm8tZGVwZW5kZW50cyIsIGFyZykpIHsKKwkJCWFyZ3Mubm9fZGVwZW5kZW50cyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAoIi0tIiBDTF9BUkdfX0ZJTFRFUiAiPSIpLCAmYXJnKSkgeworCQkJcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigmYXJncy5maWx0ZXJfb3B0aW9ucywgYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgKCItLW5vLSIgQ0xfQVJHX19GSUxURVIpKSkgeworCQkJbGlzdF9vYmplY3RzX2ZpbHRlcl9zZXRfbm9fZmlsdGVyKCZhcmdzLmZpbHRlcl9vcHRpb25zKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXVzYWdlKGZldGNoX3BhY2tfdXNhZ2UpOworCX0KKwlpZiAoZGVlcGVuX25vdC5ucikKKwkJYXJncy5kZWVwZW5fbm90ID0gJmRlZXBlbl9ub3Q7CisKKwlpZiAoaSA8IGFyZ2MpCisJCWRlc3QgPSBhcmd2W2krK107CisJZWxzZQorCQl1c2FnZShmZXRjaF9wYWNrX3VzYWdlKTsKKworCS8qCisJICogQ29weSByZWZzIGZyb20gY21kbGluZSB0byBncm93YWJsZSBsaXN0LCB0aGVuIGFwcGVuZCBhbnkKKwkgKiByZWZzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0OgorCSAqLworCWZvciAoOyBpIDwgYXJnYzsgaSsrKQorCQlhZGRfc291Z2h0X2VudHJ5KCZzb3VnaHQsICZucl9zb3VnaHQsICZhbGxvY19zb3VnaHQsIGFyZ3ZbaV0pOworCWlmIChhcmdzLnN0ZGluX3JlZnMpIHsKKwkJaWYgKGFyZ3Muc3RhdGVsZXNzX3JwYykgeworCQkJLyogaW4gc3RhdGVsZXNzIFJQQyBtb2RlIHdlIHVzZSBwa3QtbGluZSB0byByZWFkCisJCQkgKiBmcm9tIHN0ZGluLCB1bnRpbCB3ZSBnZXQgYSBmbHVzaCBwYWNrZXQKKwkJCSAqLworCQkJZm9yICg7OykgeworCQkJCWNoYXIgKmxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKDAsIE5VTEwpOworCQkJCWlmICghbGluZSkKKwkJCQkJYnJlYWs7CisJCQkJYWRkX3NvdWdodF9lbnRyeSgmc291Z2h0LCAmbnJfc291Z2h0LCAgJmFsbG9jX3NvdWdodCwgbGluZSk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvKiByZWFkIGZyb20gc3RkaW4gb25lIHJlZiBwZXIgbGluZSwgdW50aWwgRU9GICovCisJCQlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwkJCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgc3RkaW4pICE9IEVPRikKKwkJCQlhZGRfc291Z2h0X2VudHJ5KCZzb3VnaHQsICZucl9zb3VnaHQsICZhbGxvY19zb3VnaHQsIGxpbmUuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJfQorCX0KKworCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpIHsKKwkJY29ubiA9IE5VTEw7CisJCWZkWzBdID0gMDsKKwkJZmRbMV0gPSAxOworCX0gZWxzZSB7CisJCWludCBmbGFncyA9IGFyZ3MudmVyYm9zZSA/IENPTk5FQ1RfVkVSQk9TRSA6IDA7CisJCWlmIChhcmdzLmRpYWdfdXJsKQorCQkJZmxhZ3MgfD0gQ09OTkVDVF9ESUFHX1VSTDsKKwkJY29ubiA9IGdpdF9jb25uZWN0KGZkLCBkZXN0LCBhcmdzLnVwbG9hZHBhY2ssCisJCQkJICAgZmxhZ3MpOworCQlpZiAoIWNvbm4pCisJCQlyZXR1cm4gYXJncy5kaWFnX3VybCA/IDAgOiAxOworCX0KKworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCBmZFswXSwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUgfAorCQkJICAgUEFDS0VUX1JFQURfR0VOVExFX09OX0VPRiB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwl2ZXJzaW9uID0gZGlzY292ZXJfdmVyc2lvbigmcmVhZGVyKTsKKwlzd2l0Y2ggKHZlcnNpb24pIHsKKwljYXNlIHByb3RvY29sX3YyOgorCQlnZXRfcmVtb3RlX3JlZnMoZmRbMV0sICZyZWFkZXIsICZyZWYsIDAsIE5VTEwsIE5VTEwpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YxOgorCWNhc2UgcHJvdG9jb2xfdjA6CisJCWdldF9yZW1vdGVfaGVhZHMoJnJlYWRlciwgJnJlZiwgMCwgTlVMTCwgJnNoYWxsb3cpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3Vua25vd25fdmVyc2lvbjoKKwkJQlVHKCJ1bmtub3duIHByb3RvY29sIHZlcnNpb24iKTsKKwl9CisKKwlyZWYgPSBmZXRjaF9wYWNrKCZhcmdzLCBmZCwgcmVmLCBzb3VnaHQsIG5yX3NvdWdodCwKKwkJCSAmc2hhbGxvdywgcGFja19sb2NrZmlsZV9wdHIsIHZlcnNpb24pOworCWlmIChwYWNrX2xvY2tmaWxlKSB7CisJCXByaW50ZigibG9jayAlc1xuIiwgcGFja19sb2NrZmlsZSk7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKwlpZiAoYXJncy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkICYmCisJICAgIGFyZ3Muc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCkgeworCQlwcmludGYoImNvbm5lY3Rpdml0eS1va1xuIik7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKwljbG9zZShmZFswXSk7CisJY2xvc2UoZmRbMV0pOworCWlmIChmaW5pc2hfY29ubmVjdChjb25uKSkKKwkJcmV0dXJuIDE7CisKKwlyZXQgPSAhcmVmOworCisJLyoKKwkgKiBJZiB0aGUgaGVhZHMgdG8gcHVsbCB3ZXJlIGdpdmVuLCB3ZSBzaG91bGQgaGF2ZSBjb25zdW1lZAorCSAqIGFsbCBvZiB0aGVtIGJ5IG1hdGNoaW5nIHRoZSByZW1vdGUuICBPdGhlcndpc2UsICdnaXQgZmV0Y2gKKwkgKiByZW1vdGUgbm8tc3VjaC1yZWYnIHdvdWxkIHNpbGVudGx5IHN1Y2NlZWQgd2l0aG91dCBpc3N1aW5nCisJICogYW4gZXJyb3IuCisJICovCisJcmV0IHw9IHJlcG9ydF91bm1hdGNoZWRfcmVmcyhzb3VnaHQsIG5yX3NvdWdodCk7CisKKwl3aGlsZSAocmVmKSB7CisJCXByaW50ZigiJXMgJXNcbiIsCisJCSAgICAgICBvaWRfdG9faGV4KCZyZWYtPm9sZF9vaWQpLCByZWYtPm5hbWUpOworCQlyZWYgPSByZWYtPm5leHQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZmV0Y2guYyBiL2J1aWx0aW4vZmV0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjZiYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9mZXRjaC5jCkBAIC0wLDAgKzEsMTg5OCBAQAorLyoKKyAqICJnaXQgZmV0Y2giCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImNvbm5lY3RlZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKworI2RlZmluZSBGT1JDRURfVVBEQVRFU19ERUxBWV9XQVJOSU5HX0lOX01TICgxMCAqIDEwMDApCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9mZXRjaF91c2FnZVtdID0geworCU5fKCJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iKSwKKwlOXygiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iKSwKKwlOXygiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iKSwKKwlOXygiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworZW51bSB7CisJVEFHU19VTlNFVCA9IDAsCisJVEFHU19ERUZBVUxUID0gMSwKKwlUQUdTX1NFVCA9IDIKK307CisKK3N0YXRpYyBpbnQgZmV0Y2hfcHJ1bmVfY29uZmlnID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCitzdGF0aWMgaW50IGZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMgPSAxOworc3RhdGljIHVpbnQ2NF90IGZvcmNlZF91cGRhdGVzX21zID0gMDsKK3N0YXRpYyBpbnQgcHJ1bmUgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KKyNkZWZpbmUgUFJVTkVfQllfREVGQVVMVCAwIC8qIGRvIHdlIHBydW5lIGJ5IGRlZmF1bHQ/ICovCisKK3N0YXRpYyBpbnQgZmV0Y2hfcHJ1bmVfdGFnc19jb25maWcgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KK3N0YXRpYyBpbnQgcHJ1bmVfdGFncyA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworI2RlZmluZSBQUlVORV9UQUdTX0JZX0RFRkFVTFQgMCAvKiBkbyB3ZSBwcnVuZSB0YWdzIGJ5IGRlZmF1bHQ/ICovCisKK3N0YXRpYyBpbnQgYWxsLCBhcHBlbmQsIGRyeV9ydW4sIGZvcmNlLCBrZWVwLCBtdWx0aXBsZSwgdXBkYXRlX2hlYWRfb2s7CitzdGF0aWMgaW50IHZlcmJvc2l0eSwgZGVlcGVuX3JlbGF0aXZlLCBzZXRfdXBzdHJlYW07CitzdGF0aWMgaW50IHByb2dyZXNzID0gLTE7CitzdGF0aWMgaW50IGVuYWJsZV9hdXRvX2djID0gMTsKK3N0YXRpYyBpbnQgdGFncyA9IFRBR1NfREVGQVVMVCwgdW5zaGFsbG93LCB1cGRhdGVfc2hhbGxvdywgZGVlcGVuOworc3RhdGljIGludCBtYXhfam9icyA9IC0xLCBzdWJtb2R1bGVfZmV0Y2hfam9ic19jb25maWcgPSAtMTsKK3N0YXRpYyBpbnQgZmV0Y2hfcGFyYWxsZWxfY29uZmlnID0gMTsKK3N0YXRpYyBlbnVtIHRyYW5zcG9ydF9mYW1pbHkgZmFtaWx5Oworc3RhdGljIGNvbnN0IGNoYXIgKmRlcHRoOworc3RhdGljIGNvbnN0IGNoYXIgKmRlZXBlbl9zaW5jZTsKK3N0YXRpYyBjb25zdCBjaGFyICp1cGxvYWRfcGFjazsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZGVlcGVuX25vdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBkZWZhdWx0X3JsYSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCB0cmFuc3BvcnQgKmd0cmFuc3BvcnQ7CitzdGF0aWMgc3RydWN0IHRyYW5zcG9ydCAqZ3NlY29uZGFyeTsKK3N0YXRpYyBjb25zdCBjaGFyICpzdWJtb2R1bGVfcHJlZml4ID0gIiI7CitzdGF0aWMgaW50IHJlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19ERUZBVUxUOworc3RhdGljIGludCByZWN1cnNlX3N1Ym1vZHVsZXNfZGVmYXVsdCA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQ7CitzdGF0aWMgaW50IHNob3duX3VybCA9IDA7CitzdGF0aWMgc3RydWN0IHJlZnNwZWMgcmVmbWFwID0gUkVGU1BFQ19JTklUX0ZFVENIOworc3RhdGljIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgZmlsdGVyX29wdGlvbnM7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHNlcnZlcl9vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG5lZ290aWF0aW9uX3RpcCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgaW50IGZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCA9IC0xOworCitzdGF0aWMgaW50IGdpdF9mZXRjaF9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAoaywgImZldGNoLnBydW5lIikpIHsKKwkJZmV0Y2hfcHJ1bmVfY29uZmlnID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcChrLCAiZmV0Y2gucHJ1bmV0YWdzIikpIHsKKwkJZmV0Y2hfcHJ1bmVfdGFnc19jb25maWcgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKGssICJmZXRjaC5zaG93Zm9yY2VkdXBkYXRlcyIpKSB7CisJCWZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKGssICJzdWJtb2R1bGUucmVjdXJzZSIpKSB7CisJCWludCByID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpID8KKwkJCVJFQ1VSU0VfU1VCTU9EVUxFU19PTiA6IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IHI7CisJfQorCisJaWYgKCFzdHJjbXAoaywgInN1Ym1vZHVsZS5mZXRjaGpvYnMiKSkgeworCQlzdWJtb2R1bGVfZmV0Y2hfam9ic19jb25maWcgPSBwYXJzZV9zdWJtb2R1bGVfZmV0Y2hqb2JzKGssIHYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoaywgImZldGNoLnJlY3Vyc2VzdWJtb2R1bGVzIikpIHsKKwkJcmVjdXJzZV9zdWJtb2R1bGVzID0gcGFyc2VfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZyhrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoaywgImZldGNoLnBhcmFsbGVsIikpIHsKKwkJZmV0Y2hfcGFyYWxsZWxfY29uZmlnID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChmZXRjaF9wYXJhbGxlbF9jb25maWcgPCAwKQorCQkJZGllKF8oImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmVmbWFwX2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCS8qCisJICogImdpdCBmZXRjaCAtLXJlZm1hcD0nJyBvcmlnaW4gZm9vIgorCSAqIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIGNvbW1hbmQgbm90IHRvIHN0b3JlIGFueXdoZXJlCisJICovCisJcmVmc3BlY19hcHBlbmQoJnJlZm1hcCwgYXJnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2ZldGNoX29wdGlvbnNbXSA9IHsKKwlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwlPUFRfQk9PTCgwLCAiYWxsIiwgJmFsbCwKKwkJIE5fKCJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIikpLAorCU9QVF9CT09MKDAsICJzZXQtdXBzdHJlYW0iLCAmc2V0X3Vwc3RyZWFtLAorCQkgTl8oInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvZmV0Y2giKSksCisJT1BUX0JPT0woJ2EnLCAiYXBwZW5kIiwgJmFwcGVuZCwKKwkJIE5fKCJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciKSksCisJT1BUX1NUUklORygwLCAidXBsb2FkLXBhY2siLCAmdXBsb2FkX3BhY2ssIE5fKCJwYXRoIiksCisJCSAgIE5fKCJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiKSksCisJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIiksIDApLAorCU9QVF9CT09MKCdtJywgIm11bHRpcGxlIiwgJm11bHRpcGxlLAorCQkgTl8oImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIpKSwKKwlPUFRfU0VUX0lOVCgndCcsICJ0YWdzIiwgJnRhZ3MsCisJCSAgICBOXygiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIpLCBUQUdTX1NFVCksCisJT1BUX1NFVF9JTlQoJ24nLCBOVUxMLCAmdGFncywKKwkJICAgIE5fKCJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiKSwgVEFHU19VTlNFVCksCisJT1BUX0lOVEVHRVIoJ2onLCAiam9icyIsICZtYXhfam9icywKKwkJICAgIE5fKCJudW1iZXIgb2Ygc3VibW9kdWxlcyBmZXRjaGVkIGluIHBhcmFsbGVsIikpLAorCU9QVF9CT09MKCdwJywgInBydW5lIiwgJnBydW5lLAorCQkgTl8oInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIikpLAorCU9QVF9CT09MKCdQJywgInBydW5lLXRhZ3MiLCAmcHJ1bmVfdGFncywKKwkJIE5fKCJwcnVuZSBsb2NhbCB0YWdzIG5vIGxvbmdlciBvbiByZW1vdGUgYW5kIGNsb2JiZXIgY2hhbmdlZCB0YWdzIikpLAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgJnJlY3Vyc2Vfc3VibW9kdWxlcywgTl8oIm9uLWRlbWFuZCIpLAorCQkgICAgTl8oImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiKSwKKwkJICAgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9mZXRjaF9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMgfSwKKwlPUFRfQk9PTCgwLCAiZHJ5LXJ1biIsICZkcnlfcnVuLAorCQkgTl8oImRyeSBydW4iKSksCisJT1BUX0JPT0woJ2snLCAia2VlcCIsICZrZWVwLCBOXygia2VlcCBkb3dubG9hZGVkIHBhY2siKSksCisJT1BUX0JPT0woJ3UnLCAidXBkYXRlLWhlYWQtb2siLCAmdXBkYXRlX2hlYWRfb2ssCisJCSAgICBOXygiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiKSksCisJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCU9QVF9TVFJJTkcoMCwgImRlcHRoIiwgJmRlcHRoLCBOXygiZGVwdGgiKSwKKwkJICAgTl8oImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiKSksCisJT1BUX1NUUklORygwLCAic2hhbGxvdy1zaW5jZSIsICZkZWVwZW5fc2luY2UsIE5fKCJ0aW1lIiksCisJCSAgIE5fKCJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIpKSwKKwlPUFRfU1RSSU5HX0xJU1QoMCwgInNoYWxsb3ctZXhjbHVkZSIsICZkZWVwZW5fbm90LCBOXygicmV2aXNpb24iKSwKKwkJCU5fKCJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IikpLAorCU9QVF9JTlRFR0VSKDAsICJkZWVwZW4iLCAmZGVlcGVuX3JlbGF0aXZlLAorCQkgICAgTl8oImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiKSksCisJT1BUX1NFVF9JTlRfRigwLCAidW5zaGFsbG93IiwgJnVuc2hhbGxvdywKKwkJICAgICAgTl8oImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IiksCisJCSAgICAgIDEsIFBBUlNFX09QVF9OT05FRyksCisJeyBPUFRJT05fU1RSSU5HLCAwLCAic3VibW9kdWxlLXByZWZpeCIsICZzdWJtb2R1bGVfcHJlZml4LCBOXygiZGlyIiksCisJCSAgIE5fKCJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IiksIFBBUlNFX09QVF9ISURERU4gfSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgInJlY3Vyc2Utc3VibW9kdWxlcy1kZWZhdWx0IiwKKwkJICAgJnJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0LCBOXygib24tZGVtYW5kIiksCisJCSAgIE5fKCJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAiCisJCSAgICAgICIobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgZmlsZXMpIiksCisJCSAgIFBBUlNFX09QVF9ISURERU4sIG9wdGlvbl9mZXRjaF9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMgfSwKKwlPUFRfQk9PTCgwLCAidXBkYXRlLXNoYWxsb3ciLCAmdXBkYXRlX3NoYWxsb3csCisJCSBOXygiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IikpLAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmVmbWFwIiwgTlVMTCwgTl8oInJlZm1hcCIpLAorCSAgTl8oInNwZWNpZnkgZmV0Y2ggcmVmbWFwIiksIFBBUlNFX09QVF9OT05FRywgcGFyc2VfcmVmbWFwX2FyZyB9LAorCU9QVF9TVFJJTkdfTElTVCgnbycsICJzZXJ2ZXItb3B0aW9uIiwgJnNlcnZlcl9vcHRpb25zLCBOXygic2VydmVyLXNwZWNpZmljIiksIE5fKCJvcHRpb24gdG8gdHJhbnNtaXQiKSksCisJT1BUX1NFVF9JTlQoJzQnLCAiaXB2NCIsICZmYW1pbHksIE5fKCJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIpLAorCQkJVFJBTlNQT1JUX0ZBTUlMWV9JUFY0KSwKKwlPUFRfU0VUX0lOVCgnNicsICJpcHY2IiwgJmZhbWlseSwgTl8oInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IiksCisJCQlUUkFOU1BPUlRfRkFNSUxZX0lQVjYpLAorCU9QVF9TVFJJTkdfTElTVCgwLCAibmVnb3RpYXRpb24tdGlwIiwgJm5lZ290aWF0aW9uX3RpcCwgTl8oInJldmlzaW9uIiksCisJCQlOXygicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiKSksCisJT1BUX1BBUlNFX0xJU1RfT0JKRUNUU19GSUxURVIoJmZpbHRlcl9vcHRpb25zKSwKKwlPUFRfQk9PTCgwLCAiYXV0by1nYyIsICZlbmFibGVfYXV0b19nYywKKwkJIE5fKCJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciKSksCisJT1BUX0JPT0woMCwgInNob3ctZm9yY2VkLXVwZGF0ZXMiLCAmZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcywKKwkJIE5fKCJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiKSksCisJT1BUX0JPT0woMCwgIndyaXRlLWNvbW1pdC1ncmFwaCIsICZmZXRjaF93cml0ZV9jb21taXRfZ3JhcGgsCisJCSBOXygid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIpKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyB2b2lkIHVubG9ja19wYWNrKHZvaWQpCit7CisJaWYgKGd0cmFuc3BvcnQpCisJCXRyYW5zcG9ydF91bmxvY2tfcGFjayhndHJhbnNwb3J0KTsKKwlpZiAoZ3NlY29uZGFyeSkKKwkJdHJhbnNwb3J0X3VubG9ja19wYWNrKGdzZWNvbmRhcnkpOworfQorCitzdGF0aWMgdm9pZCB1bmxvY2tfcGFja19vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXVubG9ja19wYWNrKCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tZXJnZV9jb25maWcoc3RydWN0IHJlZiAqKmhlYWQsCisJCQkgICBjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJICAgICAgICAgICBzdHJ1Y3QgYnJhbmNoICpicmFuY2gsCisJCSAgICAgICAgICAgc3RydWN0IHJlZiAqKip0YWlsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGJyYW5jaC0+bWVyZ2VfbnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmICpybSwgKipvbGRfdGFpbCA9ICp0YWlsOworCQlzdHJ1Y3QgcmVmc3BlY19pdGVtIHJlZnNwZWM7CisKKwkJZm9yIChybSA9ICpoZWFkOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQkJaWYgKGJyYW5jaF9tZXJnZV9tYXRjaGVzKGJyYW5jaCwgaSwgcm0tPm5hbWUpKSB7CisJCQkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9NRVJHRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAocm0pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBOb3QgZmV0Y2hlZCB0byBhIHJlbW90ZS10cmFja2luZyBicmFuY2g/ICBXZSBuZWVkIHRvIGZldGNoCisJCSAqIGl0IGFueXdheSB0byBhbGxvdyB0aGlzIGJyYW5jaCdzICJicmFuY2guJG5hbWUubWVyZ2UiCisJCSAqIHRvIGJlIGhvbm9yZWQgYnkgJ2dpdCBwdWxsJywgYnV0IHdlIGRvIG5vdCBoYXZlIHRvCisJCSAqIGZhaWwgaWYgYnJhbmNoLiRuYW1lLm1lcmdlIGlzIG1pc2NvbmZpZ3VyZWQgdG8gcG9pbnQKKwkJICogYXQgYSBub25leGlzdGluZyBicmFuY2guICBJZiB3ZSB3ZXJlIGluZGVlZCBjYWxsZWQgYnkKKwkJICogJ2dpdCBwdWxsJywgaXQgd2lsbCBub3RpY2UgdGhlIG1pc2NvbmZpZ3VyYXRpb24gYmVjYXVzZQorCQkgKiB0aGVyZSBpcyBubyBlbnRyeSBpbiB0aGUgcmVzdWx0aW5nIEZFVENIX0hFQUQgbWFya2VkCisJCSAqIGZvciBtZXJnaW5nLgorCQkgKi8KKwkJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCQlyZWZzcGVjLnNyYyA9IGJyYW5jaC0+bWVyZ2VbaV0tPnNyYzsKKwkJZ2V0X2ZldGNoX21hcChyZW1vdGVfcmVmcywgJnJlZnNwZWMsIHRhaWwsIDEpOworCQlmb3IgKHJtID0gKm9sZF90YWlsOyBybTsgcm0gPSBybS0+bmV4dCkKKwkJCXJtLT5mZXRjaF9oZWFkX3N0YXR1cyA9IEZFVENIX0hFQURfTUVSR0U7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfZmV0Y2hfb2lkc2V0KHN0cnVjdCByZWYgKipoZWFkLCBzdHJ1Y3Qgb2lkc2V0ICpvdXQpCit7CisJc3RydWN0IHJlZiAqcm0gPSAqaGVhZDsKKwl3aGlsZSAocm0pIHsKKwkJb2lkc2V0X2luc2VydChvdXQsICZybS0+b2xkX29pZCk7CisJCXJtID0gcm0tPm5leHQ7CisJfQorfQorCitzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGlnbm9yZTsKKwljaGFyIHJlZm5hbWVbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgaW50IHJlZm5hbWVfaGFzaF9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqaGFzaG1hcF9jbXBfZm5fZGF0YSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJCSAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCQkgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHJlZm5hbWVfaGFzaF9lbnRyeSAqZTEsICplMjsKKworCWUxID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnksIGVudCk7CisJZTIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5LCBlbnQpOworCXJldHVybiBzdHJjbXAoZTEtPnJlZm5hbWUsIGtleWRhdGEgPyBrZXlkYXRhIDogZTItPnJlZm5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IHJlZm5hbWVfaGFzaF9lbnRyeSAqcmVmbmFtZV9oYXNoX2FkZChzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5ICplbnQ7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihyZWZuYW1lKTsKKworCUZMRVhfQUxMT0NfTUVNKGVudCwgcmVmbmFtZSwgcmVmbmFtZSwgbGVuKTsKKwloYXNobWFwX2VudHJ5X2luaXQoJmVudC0+ZW50LCBzdHJoYXNoKHJlZm5hbWUpKTsKKwlvaWRjcHkoJmVudC0+b2lkLCBvaWQpOworCWhhc2htYXBfYWRkKG1hcCwgJmVudC0+ZW50KTsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgaW50IGFkZF9vbmVfcmVmbmFtZShjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgaW50IGZsYWcsIHZvaWQgKmNiZGF0YSkKK3sKKwlzdHJ1Y3QgaGFzaG1hcCAqcmVmbmFtZV9tYXAgPSBjYmRhdGE7CisKKwkodm9pZCkgcmVmbmFtZV9oYXNoX2FkZChyZWZuYW1lX21hcCwgcmVmbmFtZSwgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVmbmFtZV9oYXNoX2luaXQoc3RydWN0IGhhc2htYXAgKm1hcCkKK3sKKwloYXNobWFwX2luaXQobWFwLCByZWZuYW1lX2hhc2hfZW50cnlfY21wLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCByZWZuYW1lX2hhc2hfZXhpc3RzKHN0cnVjdCBoYXNobWFwICptYXAsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJcmV0dXJuICEhaGFzaG1hcF9nZXRfZnJvbV9oYXNoKG1hcCwgc3RyaGFzaChyZWZuYW1lKSwgcmVmbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2l0ZW0oc3RydWN0IHJlZm5hbWVfaGFzaF9lbnRyeSAqaXRlbSkKK3sKKwlpdGVtLT5pZ25vcmUgPSAxOworfQorCitzdGF0aWMgdm9pZCBmaW5kX25vbl9sb2NhbF90YWdzKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkJc3RydWN0IHJlZiAqKmhlYWQsCisJCQkJc3RydWN0IHJlZiAqKip0YWlsKQoreworCXN0cnVjdCBoYXNobWFwIGV4aXN0aW5nX3JlZnM7CisJc3RydWN0IGhhc2htYXAgcmVtb3RlX3JlZnM7CisJc3RydWN0IG9pZHNldCBmZXRjaF9vaWRzID0gT0lEU0VUX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IHJlbW90ZV9yZWZzX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpyZW1vdGVfcmVmX2l0ZW07CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnkgKml0ZW0gPSBOVUxMOworCWNvbnN0IGludCBxdWlja19mbGFncyA9IE9CSkVDVF9JTkZPX1FVSUNLIHwgT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1Q7CisKKwlyZWZuYW1lX2hhc2hfaW5pdCgmZXhpc3RpbmdfcmVmcyk7CisJcmVmbmFtZV9oYXNoX2luaXQoJnJlbW90ZV9yZWZzKTsKKwljcmVhdGVfZmV0Y2hfb2lkc2V0KGhlYWQsICZmZXRjaF9vaWRzKTsKKworCWZvcl9lYWNoX3JlZihhZGRfb25lX3JlZm5hbWUsICZleGlzdGluZ19yZWZzKTsKKwlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhlIHBlZWxlZCByZWYgYWx3YXlzIGZvbGxvd3MgdGhlIG1hdGNoaW5nIGJhc2UKKwkJICogcmVmLCBzbyBpZiB3ZSBzZWUgYSBwZWVsZWQgcmVmIHRoYXQgd2UgZG9uJ3Qgd2FudAorCQkgKiB0byBmZXRjaCB0aGVuIHdlIGNhbiBtYXJrIHRoZSByZWYgZW50cnkgaW4gdGhlIGxpc3QKKwkJICogYXMgb25lIHRvIGlnbm9yZSBieSBzZXR0aW5nIHV0aWwgdG8gTlVMTC4KKwkJICovCisJCWlmIChlbmRzX3dpdGgocmVmLT5uYW1lLCAiXnt9IikpIHsKKwkJCWlmIChpdGVtICYmCisJCQkgICAgIWhhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKCZyZWYtPm9sZF9vaWQsIHF1aWNrX2ZsYWdzKSAmJgorCQkJICAgICFvaWRzZXRfY29udGFpbnMoJmZldGNoX29pZHMsICZyZWYtPm9sZF9vaWQpICYmCisJCQkgICAgIWhhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKCZpdGVtLT5vaWQsIHF1aWNrX2ZsYWdzKSAmJgorCQkJICAgICFvaWRzZXRfY29udGFpbnMoJmZldGNoX29pZHMsICZpdGVtLT5vaWQpKQorCQkJCWNsZWFyX2l0ZW0oaXRlbSk7CisJCQlpdGVtID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogSWYgaXRlbSBpcyBub24tTlVMTCBoZXJlLCB0aGVuIHdlIHByZXZpb3VzbHkgc2F3IGEKKwkJICogcmVmIG5vdCBmb2xsb3dlZCBieSBhIHBlZWxlZCByZWZlcmVuY2UsIHNvIHdlIG5lZWQKKwkJICogdG8gY2hlY2sgaWYgaXQgaXMgYSBsaWdodHdlaWdodCB0YWcgdGhhdCB3ZSB3YW50IHRvCisJCSAqIGZldGNoLgorCQkgKi8KKwkJaWYgKGl0ZW0gJiYKKwkJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncygmaXRlbS0+b2lkLCBxdWlja19mbGFncykgJiYKKwkJICAgICFvaWRzZXRfY29udGFpbnMoJmZldGNoX29pZHMsICZpdGVtLT5vaWQpKQorCQkJY2xlYXJfaXRlbShpdGVtKTsKKworCQlpdGVtID0gTlVMTDsKKworCQkvKiBza2lwIGR1cGxpY2F0ZXMgYW5kIHJlZnMgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgKi8KKwkJaWYgKHJlZm5hbWVfaGFzaF9leGlzdHMoJnJlbW90ZV9yZWZzLCByZWYtPm5hbWUpIHx8CisJCSAgICByZWZuYW1lX2hhc2hfZXhpc3RzKCZleGlzdGluZ19yZWZzLCByZWYtPm5hbWUpKQorCQkJY29udGludWU7CisKKwkJaXRlbSA9IHJlZm5hbWVfaGFzaF9hZGQoJnJlbW90ZV9yZWZzLCByZWYtPm5hbWUsICZyZWYtPm9sZF9vaWQpOworCQlzdHJpbmdfbGlzdF9pbnNlcnQoJnJlbW90ZV9yZWZzX2xpc3QsIHJlZi0+bmFtZSk7CisJfQorCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZleGlzdGluZ19yZWZzLCBzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5LCBlbnQpOworCisJLyoKKwkgKiBXZSBtYXkgaGF2ZSBhIGZpbmFsIGxpZ2h0d2VpZ2h0IHRhZyB0aGF0IG5lZWRzIHRvIGJlCisJICogY2hlY2tlZCB0byBzZWUgaWYgaXQgbmVlZHMgZmV0Y2hpbmcuCisJICovCisJaWYgKGl0ZW0gJiYKKwkgICAgIWhhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKCZpdGVtLT5vaWQsIHF1aWNrX2ZsYWdzKSAmJgorCSAgICAhb2lkc2V0X2NvbnRhaW5zKCZmZXRjaF9vaWRzLCAmaXRlbS0+b2lkKSkKKwkJY2xlYXJfaXRlbShpdGVtKTsKKworCS8qCisJICogRm9yIGFsbCB0aGUgdGFncyBpbiB0aGUgcmVtb3RlX3JlZnNfbGlzdCwKKwkgKiBhZGQgdGhlbSB0byB0aGUgbGlzdCBvZiByZWZzIHRvIGJlIGZldGNoZWQKKwkgKi8KKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKHJlbW90ZV9yZWZfaXRlbSwgJnJlbW90ZV9yZWZzX2xpc3QpIHsKKwkJY29uc3QgY2hhciAqcmVmbmFtZSA9IHJlbW90ZV9yZWZfaXRlbS0+c3RyaW5nOworCQlzdHJ1Y3QgcmVmICpybTsKKwkJdW5zaWduZWQgaW50IGhhc2ggPSBzdHJoYXNoKHJlZm5hbWUpOworCisJCWl0ZW0gPSBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2goJnJlbW90ZV9yZWZzLCBoYXNoLCByZWZuYW1lLAorCQkJCQlzdHJ1Y3QgcmVmbmFtZV9oYXNoX2VudHJ5LCBlbnQpOworCQlpZiAoIWl0ZW0pCisJCQlCVUcoInVuc2VlbiByZW1vdGUgcmVmPyIpOworCisJCS8qIFVubGVzcyB3ZSBoYXZlIGFscmVhZHkgZGVjaWRlZCB0byBpZ25vcmUgdGhpcyBpdGVtLi4uICovCisJCWlmIChpdGVtLT5pZ25vcmUpCisJCQljb250aW51ZTsKKworCQlybSA9IGFsbG9jX3JlZihpdGVtLT5yZWZuYW1lKTsKKwkJcm0tPnBlZXJfcmVmID0gYWxsb2NfcmVmKGl0ZW0tPnJlZm5hbWUpOworCQlvaWRjcHkoJnJtLT5vbGRfb2lkLCAmaXRlbS0+b2lkKTsKKwkJKip0YWlsID0gcm07CisJCSp0YWlsID0gJnJtLT5uZXh0OworCX0KKwloYXNobWFwX2ZyZWVfZW50cmllcygmcmVtb3RlX3JlZnMsIHN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnksIGVudCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnJlbW90ZV9yZWZzX2xpc3QsIDApOworCW9pZHNldF9jbGVhcigmZmV0Y2hfb2lkcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmX21hcChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJCQkgICAgICAgc3RydWN0IHJlZnNwZWMgKnJzLAorCQkJICAgICAgIGludCB0YWdzLCBpbnQgKmF1dG90YWdzKQoreworCWludCBpOworCXN0cnVjdCByZWYgKnJtOworCXN0cnVjdCByZWYgKnJlZl9tYXAgPSBOVUxMOworCXN0cnVjdCByZWYgKip0YWlsID0gJnJlZl9tYXA7CisKKwkvKiBvcHBvcnR1bmlzdGljYWxseS11cGRhdGVkIHJlZmVyZW5jZXM6ICovCisJc3RydWN0IHJlZiAqb3JlZnMgPSBOVUxMLCAqKm9yZWZfdGFpbCA9ICZvcmVmczsKKworCXN0cnVjdCBoYXNobWFwIGV4aXN0aW5nX3JlZnM7CisKKwlpZiAocnMtPm5yKSB7CisJCXN0cnVjdCByZWZzcGVjICpmZXRjaF9yZWZzcGVjOworCisJCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykgeworCQkJZ2V0X2ZldGNoX21hcChyZW1vdGVfcmVmcywgJnJzLT5pdGVtc1tpXSwgJnRhaWwsIDApOworCQkJaWYgKHJzLT5pdGVtc1tpXS5kc3QgJiYgcnMtPml0ZW1zW2ldLmRzdFswXSkKKwkJCQkqYXV0b3RhZ3MgPSAxOworCQl9CisJCS8qIE1lcmdlIGV2ZXJ5dGhpbmcgb24gdGhlIGNvbW1hbmQgbGluZSAoYnV0IG5vdCAtLXRhZ3MpICovCisJCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkKKwkJCXJtLT5mZXRjaF9oZWFkX3N0YXR1cyA9IEZFVENIX0hFQURfTUVSR0U7CisKKwkJLyoKKwkJICogRm9yIGFueSByZWZzIHRoYXQgd2UgaGFwcGVuIHRvIGJlIGZldGNoaW5nIHZpYQorCQkgKiBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCB0aGUgZGVzdGluYXRpb24gcmVmIG1pZ2h0CisJCSAqIGhhdmUgYmVlbiBtaXNzaW5nIG9yIGhhdmUgYmVlbiBkaWZmZXJlbnQgdGhhbiB0aGUKKwkJICogcmVtb3RlLXRyYWNraW5nIHJlZiB0aGF0IHdvdWxkIGJlIGRlcml2ZWQgZnJvbSB0aGUKKwkJICogY29uZmlndXJlZCByZWZzcGVjLiAgSW4gdGhlc2UgY2FzZXMsIHdlIHdhbnQgdG8KKwkJICogdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gdXBkYXRlIHRoZWlyIGNvbmZpZ3VyZWQKKwkJICogcmVtb3RlLXRyYWNraW5nIHJlZmVyZW5jZS4gIEhvd2V2ZXIsIHdlIGRvIG5vdCB3YW50CisJCSAqIHRvIG1lbnRpb24gdGhlc2UgZW50cmllcyBpbiBGRVRDSF9IRUFEIGF0IGFsbCwgYXMKKwkJICogdGhleSB3b3VsZCBzaW1wbHkgYmUgZHVwbGljYXRlcyBvZiBleGlzdGluZworCQkgKiBlbnRyaWVzLCBzbyB3ZSBzZXQgdGhlbSBGRVRDSF9IRUFEX0lHTk9SRSBiZWxvdy4KKwkJICoKKwkJICogV2UgY29tcHV0ZSB0aGVzZSBlbnRyaWVzIG5vdywgYmFzZWQgb25seSBvbiB0aGUKKwkJICogcmVmc3BlY3Mgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBCdXQgd2UgYWRkCisJCSAqIHRoZW0gdG8gdGhlIGxpc3QgZm9sbG93aW5nIHRoZSByZWZzcGVjcyByZXN1bHRpbmcKKwkJICogZnJvbSB0aGUgdGFncyBvcHRpb24gc28gdGhhdCBvbmUgb2YgdGhlIGxhdHRlciwKKwkJICogd2hpY2ggaGFzIEZFVENIX0hFQURfTk9UX0ZPUl9NRVJHRSwgaXMgbm90IHJlbW92ZWQKKwkJICogYnkgcmVmX3JlbW92ZV9kdXBsaWNhdGVzKCkgaW4gZmF2b3Igb2Ygb25lIG9mIHRoZXNlCisJCSAqIG9wcG9ydHVuaXN0aWMgZW50cmllcyB3aXRoIEZFVENIX0hFQURfSUdOT1JFLgorCQkgKi8KKwkJaWYgKHJlZm1hcC5ucikKKwkJCWZldGNoX3JlZnNwZWMgPSAmcmVmbWFwOworCQllbHNlCisJCQlmZXRjaF9yZWZzcGVjID0gJnJlbW90ZS0+ZmV0Y2g7CisKKwkJZm9yIChpID0gMDsgaSA8IGZldGNoX3JlZnNwZWMtPm5yOyBpKyspCisJCQlnZXRfZmV0Y2hfbWFwKHJlZl9tYXAsICZmZXRjaF9yZWZzcGVjLT5pdGVtc1tpXSwgJm9yZWZfdGFpbCwgMSk7CisJfSBlbHNlIGlmIChyZWZtYXAubnIpIHsKKwkJZGllKCItLXJlZm1hcCBvcHRpb24gaXMgb25seSBtZWFuaW5nZnVsIHdpdGggY29tbWFuZC1saW5lIHJlZnNwZWMocykuIik7CisJfSBlbHNlIHsKKwkJLyogVXNlIHRoZSBkZWZhdWx0cyAqLworCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCQlpbnQgaGFzX21lcmdlID0gYnJhbmNoX2hhc19tZXJnZV9jb25maWcoYnJhbmNoKTsKKwkJaWYgKHJlbW90ZSAmJgorCQkgICAgKHJlbW90ZS0+ZmV0Y2gubnIgfHwKKwkJICAgICAvKiBOb3RlOiBoYXNfbWVyZ2UgaW1wbGllcyBub24tTlVMTCBicmFuY2gtPnJlbW90ZV9uYW1lICovCisJCSAgICAgKGhhc19tZXJnZSAmJiAhc3RyY21wKGJyYW5jaC0+cmVtb3RlX25hbWUsIHJlbW90ZS0+bmFtZSkpKSkgeworCQkJZm9yIChpID0gMDsgaSA8IHJlbW90ZS0+ZmV0Y2gubnI7IGkrKykgeworCQkJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZyZW1vdGUtPmZldGNoLml0ZW1zW2ldLCAmdGFpbCwgMCk7CisJCQkJaWYgKHJlbW90ZS0+ZmV0Y2guaXRlbXNbaV0uZHN0ICYmCisJCQkJICAgIHJlbW90ZS0+ZmV0Y2guaXRlbXNbaV0uZHN0WzBdKQorCQkJCQkqYXV0b3RhZ3MgPSAxOworCQkJCWlmICghaSAmJiAhaGFzX21lcmdlICYmIHJlZl9tYXAgJiYKKwkJCQkgICAgIXJlbW90ZS0+ZmV0Y2guaXRlbXNbMF0ucGF0dGVybikKKwkJCQkJcmVmX21hcC0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOworCQkJfQorCQkJLyoKKwkJCSAqIGlmIHRoZSByZW1vdGUgd2UncmUgZmV0Y2hpbmcgZnJvbSBpcyB0aGUgc2FtZQorCQkJICogYXMgZ2l2ZW4gaW4gYnJhbmNoLjxuYW1lPi5yZW1vdGUsIHdlIGFkZCB0aGUKKwkJCSAqIHJlZiBnaXZlbiBpbiBicmFuY2guPG5hbWU+Lm1lcmdlLCB0b28uCisJCQkgKgorCQkJICogTm90ZTogaGFzX21lcmdlIGltcGxpZXMgbm9uLU5VTEwgYnJhbmNoLT5yZW1vdGVfbmFtZQorCQkJICovCisJCQlpZiAoaGFzX21lcmdlICYmCisJCQkgICAgIXN0cmNtcChicmFuY2gtPnJlbW90ZV9uYW1lLCByZW1vdGUtPm5hbWUpKQorCQkJCWFkZF9tZXJnZV9jb25maWcoJnJlZl9tYXAsIHJlbW90ZV9yZWZzLCBicmFuY2gsICZ0YWlsKTsKKwkJfSBlbHNlIHsKKwkJCXJlZl9tYXAgPSBnZXRfcmVtb3RlX3JlZihyZW1vdGVfcmVmcywgIkhFQUQiKTsKKwkJCWlmICghcmVmX21hcCkKKwkJCQlkaWUoXygiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiKSk7CisJCQlyZWZfbWFwLT5mZXRjaF9oZWFkX3N0YXR1cyA9IEZFVENIX0hFQURfTUVSR0U7CisJCQl0YWlsID0gJnJlZl9tYXAtPm5leHQ7CisJCX0KKwl9CisKKwlpZiAodGFncyA9PSBUQUdTX1NFVCkKKwkJLyogYWxzbyBmZXRjaCBhbGwgdGFncyAqLworCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCB0YWdfcmVmc3BlYywgJnRhaWwsIDApOworCWVsc2UgaWYgKHRhZ3MgPT0gVEFHU19ERUZBVUxUICYmICphdXRvdGFncykKKwkJZmluZF9ub25fbG9jYWxfdGFncyhyZW1vdGVfcmVmcywgJnJlZl9tYXAsICZ0YWlsKTsKKworCS8qIE5vdyBhcHBlbmQgYW55IHJlZnMgdG8gYmUgdXBkYXRlZCBvcHBvcnR1bmlzdGljYWxseTogKi8KKwkqdGFpbCA9IG9yZWZzOworCWZvciAocm0gPSBvcmVmczsgcm07IHJtID0gcm0tPm5leHQpIHsKKwkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9JR05PUkU7CisJCXRhaWwgPSAmcm0tPm5leHQ7CisJfQorCisJcmVmX21hcCA9IHJlZl9yZW1vdmVfZHVwbGljYXRlcyhyZWZfbWFwKTsKKworCXJlZm5hbWVfaGFzaF9pbml0KCZleGlzdGluZ19yZWZzKTsKKwlmb3JfZWFjaF9yZWYoYWRkX29uZV9yZWZuYW1lLCAmZXhpc3RpbmdfcmVmcyk7CisKKwlmb3IgKHJtID0gcmVmX21hcDsgcm07IHJtID0gcm0tPm5leHQpIHsKKwkJaWYgKHJtLT5wZWVyX3JlZikgeworCQkJY29uc3QgY2hhciAqcmVmbmFtZSA9IHJtLT5wZWVyX3JlZi0+bmFtZTsKKwkJCXN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnkgKnBlZXJfaXRlbTsKKwkJCXVuc2lnbmVkIGludCBoYXNoID0gc3RyaGFzaChyZWZuYW1lKTsKKworCQkJcGVlcl9pdGVtID0gaGFzaG1hcF9nZXRfZW50cnlfZnJvbV9oYXNoKCZleGlzdGluZ19yZWZzLAorCQkJCQkJaGFzaCwgcmVmbmFtZSwKKwkJCQkJCXN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnksIGVudCk7CisJCQlpZiAocGVlcl9pdGVtKSB7CisJCQkJc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCA9ICZwZWVyX2l0ZW0tPm9pZDsKKwkJCQlvaWRjcHkoJnJtLT5wZWVyX3JlZi0+b2xkX29pZCwgb2xkX29pZCk7CisJCQl9CisJCX0KKwl9CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJmV4aXN0aW5nX3JlZnMsIHN0cnVjdCByZWZuYW1lX2hhc2hfZW50cnksIGVudCk7CisKKwlyZXR1cm4gcmVmX21hcDsKK30KKworI2RlZmluZSBTVE9SRV9SRUZfRVJST1JfT1RIRVIgMQorI2RlZmluZSBTVE9SRV9SRUZfRVJST1JfREZfQ09ORkxJQ1QgMgorCitzdGF0aWMgaW50IHNfdXBkYXRlX3JlZihjb25zdCBjaGFyICphY3Rpb24sCisJCQlzdHJ1Y3QgcmVmICpyZWYsCisJCQlpbnQgY2hlY2tfb2xkKQoreworCWNoYXIgKm1zZzsKKwljaGFyICpybGEgPSBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIik7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0LCBkZl9jb25mbGljdCA9IDA7CisKKwlpZiAoZHJ5X3J1bikKKwkJcmV0dXJuIDA7CisJaWYgKCFybGEpCisJCXJsYSA9IGRlZmF1bHRfcmxhLmJ1ZjsKKwltc2cgPSB4c3RyZm10KCIlczogJXMiLCBybGEsIGFjdGlvbik7CisKKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZi0+bmFtZSwKKwkJCQkgICAmcmVmLT5uZXdfb2lkLAorCQkJCSAgIGNoZWNrX29sZCA/ICZyZWYtPm9sZF9vaWQgOiBOVUxMLAorCQkJCSAgIDAsIG1zZywgJmVycikpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpOworCWlmIChyZXQpIHsKKwkJZGZfY29uZmxpY3QgPSAocmV0ID09IFRSQU5TQUNUSU9OX05BTUVfQ09ORkxJQ1QpOworCQlnb3RvIGZhaWw7CisJfQorCisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCWZyZWUobXNnKTsKKwlyZXR1cm4gMDsKK2ZhaWw6CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCWVycm9yKCIlcyIsIGVyci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCWZyZWUobXNnKTsKKwlyZXR1cm4gZGZfY29uZmxpY3QgPyBTVE9SRV9SRUZfRVJST1JfREZfQ09ORkxJQ1QKKwkJCSAgIDogU1RPUkVfUkVGX0VSUk9SX09USEVSOworfQorCitzdGF0aWMgaW50IHJlZmNvbF93aWR0aCA9IDEwOworc3RhdGljIGludCBjb21wYWN0X2Zvcm1hdDsKKworc3RhdGljIHZvaWQgYWRqdXN0X3JlZmNvbF93aWR0aChjb25zdCBzdHJ1Y3QgcmVmICpyZWYpCit7CisJaW50IG1heCwgcmxlbiwgbGxlbiwgbGVuOworCisJLyogdXB0b2RhdGUgbGluZXMgYXJlIG9ubHkgc2hvd24gb24gaGlnaCB2ZXJib3NpdHkgbGV2ZWwgKi8KKwlpZiAoIXZlcmJvc2l0eSAmJiBvaWRlcSgmcmVmLT5wZWVyX3JlZi0+b2xkX29pZCwgJnJlZi0+b2xkX29pZCkpCisJCXJldHVybjsKKworCW1heCAgICA9IHRlcm1fY29sdW1ucygpOworCXJsZW4gICA9IHV0Zjhfc3Ryd2lkdGgocHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpKTsKKworCWxsZW4gICA9IHV0Zjhfc3Ryd2lkdGgocHJldHRpZnlfcmVmbmFtZShyZWYtPnBlZXJfcmVmLT5uYW1lKSk7CisKKwkvKgorCSAqIHJvdWdoIGVzdGltYXRpb24gdG8gc2VlIGlmIHRoZSBvdXRwdXQgbGluZSBpcyB0b28gbG9uZyBhbmQKKwkgKiBzaG91bGQgbm90IGJlIGNvdW50ZWQgKHdlIGNhbid0IGRvIHByZWNpc2UgY2FsY3VsYXRpb24KKwkgKiBhbnl3YXkgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGlmIHRoZSBlcnJvciBleHBsYW5hdGlvbiBwYXJ0CisJICogd2lsbCBiZSBwcmludGVkIGluIHVwZGF0ZV9sb2NhbF9yZWYpCisJICovCisJaWYgKGNvbXBhY3RfZm9ybWF0KSB7CisJCWxsZW4gPSAwOworCQltYXggPSBtYXggKiAyIC8gMzsKKwl9CisJbGVuID0gMjEgLyogZmxhZyBhbmQgc3VtbWFyeSAqLyArIHJsZW4gKyA0IC8qIC0+ICovICsgbGxlbjsKKwlpZiAobGVuID49IG1heCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBOb3QgcHJlY2lzZSBjYWxjdWxhdGlvbiBmb3IgY29tcGFjdCBtb2RlIGJlY2F1c2UgJyonIGNhbgorCSAqIGFwcGVhciBvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgJy0+JyBhbmQgc2hyaW5rIHRoZSBjb2x1bW4KKwkgKiBiYWNrLgorCSAqLworCWlmIChyZWZjb2xfd2lkdGggPCBybGVuKQorCQlyZWZjb2xfd2lkdGggPSBybGVuOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2Zvcm1hdF9kaXNwbGF5KHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJc3RydWN0IHJlZiAqcm07CisJY29uc3QgY2hhciAqZm9ybWF0ID0gImZ1bGwiOworCisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJmZXRjaC5vdXRwdXQiLCAmZm9ybWF0KTsKKwlpZiAoIXN0cmNhc2VjbXAoZm9ybWF0LCAiZnVsbCIpKQorCQljb21wYWN0X2Zvcm1hdCA9IDA7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoZm9ybWF0LCAiY29tcGFjdCIpKQorCQljb21wYWN0X2Zvcm1hdCA9IDE7CisJZWxzZQorCQlkaWUoXygiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIpLAorCQkgICAgZm9ybWF0KTsKKworCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkgeworCQlpZiAocm0tPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1JFSkVDVF9TSEFMTE9XIHx8CisJCSAgICAhcm0tPnBlZXJfcmVmIHx8CisJCSAgICAhc3RyY21wKHJtLT5uYW1lLCAiSEVBRCIpKQorCQkJY29udGludWU7CisKKwkJYWRqdXN0X3JlZmNvbF93aWR0aChybSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9yZW1vdGVfdG9fbG9jYWwoc3RydWN0IHN0cmJ1ZiAqZGlzcGxheSwKKwkJCQkgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqbG9jYWwpCit7CisJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiUtKnMgLT4gJXMiLCByZWZjb2xfd2lkdGgsIHJlbW90ZSwgbG9jYWwpOworfQorCitzdGF0aWMgaW50IGZpbmRfYW5kX3JlcGxhY2Uoc3RydWN0IHN0cmJ1ZiAqaGF5c3RhY2ssCisJCQkgICAgY29uc3QgY2hhciAqbmVlZGxlLAorCQkJICAgIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyKQoreworCWNvbnN0IGNoYXIgKnAgPSBOVUxMOworCWludCBwbGVuLCBubGVuOworCisJbmxlbiA9IHN0cmxlbihuZWVkbGUpOworCWlmIChlbmRzX3dpdGgoaGF5c3RhY2stPmJ1ZiwgbmVlZGxlKSkKKwkJcCA9IGhheXN0YWNrLT5idWYgKyBoYXlzdGFjay0+bGVuIC0gbmxlbjsKKwllbHNlCisJCXAgPSBzdHJzdHIoaGF5c3RhY2stPmJ1ZiwgbmVlZGxlKTsKKwlpZiAoIXApCisJCXJldHVybiAwOworCisJaWYgKHAgPiBoYXlzdGFjay0+YnVmICYmIHBbLTFdICE9ICcvJykKKwkJcmV0dXJuIDA7CisKKwlwbGVuID0gc3RybGVuKHApOworCWlmIChwbGVuID4gbmxlbiAmJiBwW25sZW5dICE9ICcvJykKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfc3BsaWNlKGhheXN0YWNrLCBwIC0gaGF5c3RhY2stPmJ1ZiwgbmxlbiwKKwkJICAgICAgcGxhY2Vob2xkZXIsIHN0cmxlbihwbGFjZWhvbGRlcikpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwcmludF9jb21wYWN0KHN0cnVjdCBzdHJidWYgKmRpc3BsYXksCisJCQkgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqbG9jYWwpCit7CisJc3RydWN0IHN0cmJ1ZiByID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBsID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXN0cmNtcChyZW1vdGUsIGxvY2FsKSkgeworCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiJS0qcyAtPiAqIiwgcmVmY29sX3dpZHRoLCByZW1vdGUpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2FkZHN0cigmciwgcmVtb3RlKTsKKwlzdHJidWZfYWRkc3RyKCZsLCBsb2NhbCk7CisKKwlpZiAoIWZpbmRfYW5kX3JlcGxhY2UoJnIsIGxvY2FsLCAiKiIpKQorCQlmaW5kX2FuZF9yZXBsYWNlKCZsLCByZW1vdGUsICIqIik7CisJcHJpbnRfcmVtb3RlX3RvX2xvY2FsKGRpc3BsYXksIHIuYnVmLCBsLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmcik7CisJc3RyYnVmX3JlbGVhc2UoJmwpOworfQorCitzdGF0aWMgdm9pZCBmb3JtYXRfZGlzcGxheShzdHJ1Y3Qgc3RyYnVmICpkaXNwbGF5LCBjaGFyIGNvZGUsCisJCQkgICBjb25zdCBjaGFyICpzdW1tYXJ5LCBjb25zdCBjaGFyICplcnJvciwKKwkJCSAgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqbG9jYWwsCisJCQkgICBpbnQgc3VtbWFyeV93aWR0aCkKK3sKKwlpbnQgd2lkdGggPSAoc3VtbWFyeV93aWR0aCArIHN0cmxlbihzdW1tYXJ5KSAtIGdldHRleHRfd2lkdGgoc3VtbWFyeSkpOworCisJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgIiwgY29kZSwgd2lkdGgsIHN1bW1hcnkpOworCWlmICghY29tcGFjdF9mb3JtYXQpCisJCXByaW50X3JlbW90ZV90b19sb2NhbChkaXNwbGF5LCByZW1vdGUsIGxvY2FsKTsKKwllbHNlCisJCXByaW50X2NvbXBhY3QoZGlzcGxheSwgcmVtb3RlLCBsb2NhbCk7CisJaWYgKGVycm9yKQorCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiICAoJXMpIiwgZXJyb3IpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9sb2NhbF9yZWYoc3RydWN0IHJlZiAqcmVmLAorCQkJICAgIGNvbnN0IGNoYXIgKnJlbW90ZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmRpc3BsYXksCisJCQkgICAgaW50IHN1bW1hcnlfd2lkdGgpCit7CisJc3RydWN0IGNvbW1pdCAqY3VycmVudCA9IE5VTEwsICp1cGRhdGVkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3QgYnJhbmNoICpjdXJyZW50X2JyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7CisJY29uc3QgY2hhciAqcHJldHR5X3JlZiA9IHByZXR0aWZ5X3JlZm5hbWUocmVmLT5uYW1lKTsKKwlpbnQgZmFzdF9mb3J3YXJkID0gMDsKKworCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZyZWYtPm5ld19vaWQsIE5VTEwpOworCWlmICh0eXBlIDwgMCkKKwkJZGllKF8oIm9iamVjdCAlcyBub3QgZm91bmQiKSwgb2lkX3RvX2hleCgmcmVmLT5uZXdfb2lkKSk7CisKKwlpZiAob2lkZXEoJnJlZi0+b2xkX29pZCwgJnJlZi0+bmV3X29pZCkpIHsKKwkJaWYgKHZlcmJvc2l0eSA+IDApCisJCQlmb3JtYXRfZGlzcGxheShkaXNwbGF5LCAnPScsIF8oIlt1cCB0byBkYXRlXSIpLCBOVUxMLAorCQkJCSAgICAgICByZW1vdGUsIHByZXR0eV9yZWYsIHN1bW1hcnlfd2lkdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY3VycmVudF9icmFuY2ggJiYKKwkgICAgIXN0cmNtcChyZWYtPm5hbWUsIGN1cnJlbnRfYnJhbmNoLT5uYW1lKSAmJgorCSAgICAhKHVwZGF0ZV9oZWFkX29rIHx8IGlzX2JhcmVfcmVwb3NpdG9yeSgpKSAmJgorCSAgICAhaXNfbnVsbF9vaWQoJnJlZi0+b2xkX29pZCkpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB0aGUgaGVhZCwgYW5kIGl0J3Mgbm90IG9rYXkgdG8gdXBkYXRlCisJCSAqIHRoZSBoZWFkLCBhbmQgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgaGVhZCBpc24ndCBlbXB0eS4uLgorCQkgKi8KKwkJZm9ybWF0X2Rpc3BsYXkoZGlzcGxheSwgJyEnLCBfKCJbcmVqZWN0ZWRdIiksCisJCQkgICAgICAgXygiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giKSwKKwkJCSAgICAgICByZW1vdGUsIHByZXR0eV9yZWYsIHN1bW1hcnlfd2lkdGgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIWlzX251bGxfb2lkKCZyZWYtPm9sZF9vaWQpICYmCisJICAgIHN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSkgeworCQlpZiAoZm9yY2UgfHwgcmVmLT5mb3JjZSkgeworCQkJaW50IHI7CisJCQlyID0gc191cGRhdGVfcmVmKCJ1cGRhdGluZyB0YWciLCByZWYsIDApOworCQkJZm9ybWF0X2Rpc3BsYXkoZGlzcGxheSwgciA/ICchJyA6ICd0JywgXygiW3RhZyB1cGRhdGVdIiksCisJCQkJICAgICAgIHIgPyBfKCJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIpIDogTlVMTCwKKwkJCQkgICAgICAgcmVtb3RlLCBwcmV0dHlfcmVmLCBzdW1tYXJ5X3dpZHRoKTsKKwkJCXJldHVybiByOworCQl9IGVsc2UgeworCQkJZm9ybWF0X2Rpc3BsYXkoZGlzcGxheSwgJyEnLCBfKCJbcmVqZWN0ZWRdIiksIF8oIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIiksCisJCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZiwgc3VtbWFyeV93aWR0aCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWN1cnJlbnQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgJnJlZi0+b2xkX29pZCwgMSk7CisJdXBkYXRlZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAmcmVmLT5uZXdfb2lkLCAxKTsKKwlpZiAoIWN1cnJlbnQgfHwgIXVwZGF0ZWQpIHsKKwkJY29uc3QgY2hhciAqbXNnOworCQljb25zdCBjaGFyICp3aGF0OworCQlpbnQgcjsKKwkJLyoKKwkJICogTmljZWx5IGRlc2NyaWJlIHRoZSBuZXcgcmVmIHdlJ3JlIGZldGNoaW5nLgorCQkgKiBCYXNlIHRoaXMgb24gdGhlIHJlbW90ZSdzIHJlZiBuYW1lLCBhcyBpdCdzCisJCSAqIG1vcmUgbGlrZWx5IHRvIGZvbGxvdyBhIHN0YW5kYXJkIGxheW91dC4KKwkJICovCisJCWNvbnN0IGNoYXIgKm5hbWUgPSByZW1vdGVfcmVmID8gcmVtb3RlX3JlZi0+bmFtZSA6ICIiOworCQlpZiAoc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvdGFncy8iKSkgeworCQkJbXNnID0gInN0b3JpbmcgdGFnIjsKKwkJCXdoYXQgPSBfKCJbbmV3IHRhZ10iKTsKKwkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChuYW1lLCAicmVmcy9oZWFkcy8iKSkgeworCQkJbXNnID0gInN0b3JpbmcgaGVhZCI7CisJCQl3aGF0ID0gXygiW25ldyBicmFuY2hdIik7CisJCX0gZWxzZSB7CisJCQltc2cgPSAic3RvcmluZyByZWYiOworCQkJd2hhdCA9IF8oIltuZXcgcmVmXSIpOworCQl9CisKKwkJciA9IHNfdXBkYXRlX3JlZihtc2csIHJlZiwgMCk7CisJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksIHIgPyAnIScgOiAnKicsIHdoYXQsCisJCQkgICAgICAgciA/IF8oInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIikgOiBOVUxMLAorCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZiwgc3VtbWFyeV93aWR0aCk7CisJCXJldHVybiByOworCX0KKworCWlmIChmZXRjaF9zaG93X2ZvcmNlZF91cGRhdGVzKSB7CisJCXVpbnQ2NF90IHRfYmVmb3JlID0gZ2V0bmFub3RpbWUoKTsKKwkJZmFzdF9mb3J3YXJkID0gaW5fbWVyZ2VfYmFzZXMoY3VycmVudCwgdXBkYXRlZCk7CisJCWZvcmNlZF91cGRhdGVzX21zICs9IChnZXRuYW5vdGltZSgpIC0gdF9iZWZvcmUpIC8gMTAwMDAwMDsKKwl9IGVsc2UgeworCQlmYXN0X2ZvcndhcmQgPSAxOworCX0KKworCWlmIChmYXN0X2ZvcndhcmQpIHsKKwkJc3RydWN0IHN0cmJ1ZiBxdWlja3JlZiA9IFNUUkJVRl9JTklUOworCQlpbnQgcjsKKworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnF1aWNrcmVmLCAmY3VycmVudC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpOworCQlzdHJidWZfYWRkc3RyKCZxdWlja3JlZiwgIi4uIik7CisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldigmcXVpY2tyZWYsICZyZWYtPm5ld19vaWQsIERFRkFVTFRfQUJCUkVWKTsKKwkJciA9IHNfdXBkYXRlX3JlZigiZmFzdC1mb3J3YXJkIiwgcmVmLCAxKTsKKwkJZm9ybWF0X2Rpc3BsYXkoZGlzcGxheSwgciA/ICchJyA6ICcgJywgcXVpY2tyZWYuYnVmLAorCQkJICAgICAgIHIgPyBfKCJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIpIDogTlVMTCwKKwkJCSAgICAgICByZW1vdGUsIHByZXR0eV9yZWYsIHN1bW1hcnlfd2lkdGgpOworCQlzdHJidWZfcmVsZWFzZSgmcXVpY2tyZWYpOworCQlyZXR1cm4gcjsKKwl9IGVsc2UgaWYgKGZvcmNlIHx8IHJlZi0+Zm9yY2UpIHsKKwkJc3RydWN0IHN0cmJ1ZiBxdWlja3JlZiA9IFNUUkJVRl9JTklUOworCQlpbnQgcjsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZxdWlja3JlZiwgJmN1cnJlbnQtPm9iamVjdC5vaWQsIERFRkFVTFRfQUJCUkVWKTsKKwkJc3RyYnVmX2FkZHN0cigmcXVpY2tyZWYsICIuLi4iKTsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZxdWlja3JlZiwgJnJlZi0+bmV3X29pZCwgREVGQVVMVF9BQkJSRVYpOworCQlyID0gc191cGRhdGVfcmVmKCJmb3JjZWQtdXBkYXRlIiwgcmVmLCAxKTsKKwkJZm9ybWF0X2Rpc3BsYXkoZGlzcGxheSwgciA/ICchJyA6ICcrJywgcXVpY2tyZWYuYnVmLAorCQkJICAgICAgIHIgPyBfKCJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIpIDogXygiZm9yY2VkIHVwZGF0ZSIpLAorCQkJICAgICAgIHJlbW90ZSwgcHJldHR5X3JlZiwgc3VtbWFyeV93aWR0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZxdWlja3JlZik7CisJCXJldHVybiByOworCX0gZWxzZSB7CisJCWZvcm1hdF9kaXNwbGF5KGRpc3BsYXksICchJywgXygiW3JlamVjdGVkXSIpLCBfKCJub24tZmFzdC1mb3J3YXJkIiksCisJCQkgICAgICAgcmVtb3RlLCBwcmV0dHlfcmVmLCBzdW1tYXJ5X3dpZHRoKTsKKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgaW50IGl0ZXJhdGVfcmVmX21hcCh2b2lkICpjYl9kYXRhLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHJlZiAqKnJtID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmICpyZWYgPSAqcm07CisKKwl3aGlsZSAocmVmICYmIHJlZi0+c3RhdHVzID09IFJFRl9TVEFUVVNfUkVKRUNUX1NIQUxMT1cpCisJCXJlZiA9IHJlZi0+bmV4dDsKKwlpZiAoIXJlZikKKwkJcmV0dXJuIC0xOyAvKiBlbmQgb2YgdGhlIGxpc3QgKi8KKwkqcm0gPSByZWYtPm5leHQ7CisJb2lkY3B5KG9pZCwgJnJlZi0+b2xkX29pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHdhcm5fc2hvd19mb3JjZWRfdXBkYXRlc1tdID0KK05fKCJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyAgICJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyAgICJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iKTsKK3N0YXRpYyBjb25zdCBjaGFyIHdhcm5fdGltZV9zaG93X2ZvcmNlZF91cGRhdGVzW10gPQorTl8oIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNoZWNrIGZvcmNlZCB1cGRhdGVzLiBZb3UgY2FuIHVzZVxuIgorICAgIictLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZSdcbiIKKyAgICIgdG8gYXZvaWQgdGhpcyBjaGVjay5cbiIpOworCitzdGF0aWMgaW50IHN0b3JlX3VwZGF0ZWRfcmVmcyhjb25zdCBjaGFyICpyYXdfdXJsLCBjb25zdCBjaGFyICpyZW1vdGVfbmFtZSwKKwkJCSAgICAgIGludCBjb25uZWN0aXZpdHlfY2hlY2tlZCwgc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlGSUxFICpmcDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IHVybF9sZW4sIGksIHJjID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIG5vdGUgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp3aGF0LCAqa2luZDsKKwlzdHJ1Y3QgcmVmICpybTsKKwljaGFyICp1cmw7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBkcnlfcnVuID8gIi9kZXYvbnVsbCIgOiBnaXRfcGF0aF9mZXRjaF9oZWFkKHRoZV9yZXBvc2l0b3J5KTsKKwlpbnQgd2FudF9zdGF0dXM7CisJaW50IHN1bW1hcnlfd2lkdGggPSB0cmFuc3BvcnRfc3VtbWFyeV93aWR0aChyZWZfbWFwKTsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJhIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNhbm5vdCBvcGVuICVzIiksIGZpbGVuYW1lKTsKKworCWlmIChyYXdfdXJsKQorCQl1cmwgPSB0cmFuc3BvcnRfYW5vbnltaXplX3VybChyYXdfdXJsKTsKKwllbHNlCisJCXVybCA9IHhzdHJkdXAoImZvcmVpZ24iKTsKKworCWlmICghY29ubmVjdGl2aXR5X2NoZWNrZWQpIHsKKwkJc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zIG9wdCA9IENIRUNLX0NPTk5FQ1RFRF9JTklUOworCisJCWlmIChmaWx0ZXJfb3B0aW9ucy5jaG9pY2UpCisJCQkvKgorCQkJICogU2luY2UgYSBmaWx0ZXIgaXMgc3BlY2lmaWVkLCBvYmplY3RzIGluZGlyZWN0bHkKKwkJCSAqIHJlZmVyZW5jZWQgYnkgcmVmcyBhcmUgYWxsb3dlZCB0byBiZSBhYnNlbnQuCisJCQkgKi8KKwkJCW9wdC5jaGVja19yZWZzX2FyZV9wcm9taXNvcl9vYmplY3RzX29ubHkgPSAxOworCisJCXJtID0gcmVmX21hcDsKKwkJaWYgKGNoZWNrX2Nvbm5lY3RlZChpdGVyYXRlX3JlZl9tYXAsICZybSwgJm9wdCkpIHsKKwkJCXJjID0gZXJyb3IoXygiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIiksIHVybCk7CisJCQlnb3RvIGFib3J0OworCQl9CisJfQorCisJcHJlcGFyZV9mb3JtYXRfZGlzcGxheShyZWZfbWFwKTsKKworCS8qCisJICogV2UgZG8gYSBwYXNzIGZvciBlYWNoIGZldGNoX2hlYWRfc3RhdHVzIHR5cGUgaW4gdGhlaXIgZW51bSBvcmRlciwgc28KKwkgKiBtZXJnZWQgZW50cmllcyBhcmUgd3JpdHRlbiBiZWZvcmUgbm90LWZvci1tZXJnZS4gVGhhdCBsZXRzIHJlYWRlcnMKKwkgKiB1c2UgRkVUQ0hfSEVBRCBhcyBhIHJlZm5hbWUgdG8gcmVmZXIgdG8gdGhlIHJlZiB0byBiZSBtZXJnZWQuCisJICovCisJZm9yICh3YW50X3N0YXR1cyA9IEZFVENIX0hFQURfTUVSR0U7CisJICAgICB3YW50X3N0YXR1cyA8PSBGRVRDSF9IRUFEX0lHTk9SRTsKKwkgICAgIHdhbnRfc3RhdHVzKyspIHsKKwkJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCQlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOworCQkJY29uc3QgY2hhciAqbWVyZ2Vfc3RhdHVzX21hcmtlciA9ICIiOworCisJCQlpZiAocm0tPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1JFSkVDVF9TSEFMTE9XKSB7CisJCQkJaWYgKHdhbnRfc3RhdHVzID09IEZFVENIX0hFQURfTUVSR0UpCisJCQkJCXdhcm5pbmcoXygicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIpLAorCQkJCQkJcm0tPnBlZXJfcmVmID8gcm0tPnBlZXJfcmVmLT5uYW1lIDogcm0tPm5hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJCSZybS0+b2xkX29pZCwKKwkJCQkJCQkJMSk7CisJCQlpZiAoIWNvbW1pdCkKKwkJCQlybS0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX05PVF9GT1JfTUVSR0U7CisKKwkJCWlmIChybS0+ZmV0Y2hfaGVhZF9zdGF0dXMgIT0gd2FudF9zdGF0dXMpCisJCQkJY29udGludWU7CisKKwkJCWlmIChybS0+cGVlcl9yZWYpIHsKKwkJCQlyZWYgPSBhbGxvY19yZWYocm0tPnBlZXJfcmVmLT5uYW1lKTsKKwkJCQlvaWRjcHkoJnJlZi0+b2xkX29pZCwgJnJtLT5wZWVyX3JlZi0+b2xkX29pZCk7CisJCQkJb2lkY3B5KCZyZWYtPm5ld19vaWQsICZybS0+b2xkX29pZCk7CisJCQkJcmVmLT5mb3JjZSA9IHJtLT5wZWVyX3JlZi0+Zm9yY2U7CisJCQl9CisKKwkJCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRikKKwkJCQljaGVja19mb3JfbmV3X3N1Ym1vZHVsZV9jb21taXRzKCZybS0+b2xkX29pZCk7CisKKwkJCWlmICghc3RyY21wKHJtLT5uYW1lLCAiSEVBRCIpKSB7CisJCQkJa2luZCA9ICIiOworCQkJCXdoYXQgPSAiIjsKKwkJCX0KKwkJCWVsc2UgaWYgKHNraXBfcHJlZml4KHJtLT5uYW1lLCAicmVmcy9oZWFkcy8iLCAmd2hhdCkpCisJCQkJa2luZCA9ICJicmFuY2giOworCQkJZWxzZSBpZiAoc2tpcF9wcmVmaXgocm0tPm5hbWUsICJyZWZzL3RhZ3MvIiwgJndoYXQpKQorCQkJCWtpbmQgPSAidGFnIjsKKwkJCWVsc2UgaWYgKHNraXBfcHJlZml4KHJtLT5uYW1lLCAicmVmcy9yZW1vdGVzLyIsICZ3aGF0KSkKKwkJCQlraW5kID0gInJlbW90ZS10cmFja2luZyBicmFuY2giOworCQkJZWxzZSB7CisJCQkJa2luZCA9ICIiOworCQkJCXdoYXQgPSBybS0+bmFtZTsKKwkJCX0KKworCQkJdXJsX2xlbiA9IHN0cmxlbih1cmwpOworCQkJZm9yIChpID0gdXJsX2xlbiAtIDE7IHVybFtpXSA9PSAnLycgJiYgMCA8PSBpOyBpLS0pCisJCQkJOworCQkJdXJsX2xlbiA9IGkgKyAxOworCQkJaWYgKDQgPCBpICYmICFzdHJuY21wKCIuZ2l0IiwgdXJsICsgaSAtIDMsIDQpKQorCQkJCXVybF9sZW4gPSBpIC0gMzsKKworCQkJc3RyYnVmX3Jlc2V0KCZub3RlKTsKKwkJCWlmICgqd2hhdCkgeworCQkJCWlmICgqa2luZCkKKwkJCQkJc3RyYnVmX2FkZGYoJm5vdGUsICIlcyAiLCBraW5kKTsKKwkJCQlzdHJidWZfYWRkZigmbm90ZSwgIiclcycgb2YgIiwgd2hhdCk7CisJCQl9CisJCQlzd2l0Y2ggKHJtLT5mZXRjaF9oZWFkX3N0YXR1cykgeworCQkJY2FzZSBGRVRDSF9IRUFEX05PVF9GT1JfTUVSR0U6CisJCQkJbWVyZ2Vfc3RhdHVzX21hcmtlciA9ICJub3QtZm9yLW1lcmdlIjsKKwkJCQkvKiBmYWxsLXRocm91Z2ggKi8KKwkJCWNhc2UgRkVUQ0hfSEVBRF9NRVJHRToKKwkJCQlmcHJpbnRmKGZwLCAiJXNcdCVzXHQlcyIsCisJCQkJCW9pZF90b19oZXgoJnJtLT5vbGRfb2lkKSwKKwkJCQkJbWVyZ2Vfc3RhdHVzX21hcmtlciwKKwkJCQkJbm90ZS5idWYpOworCQkJCWZvciAoaSA9IDA7IGkgPCB1cmxfbGVuOyArK2kpCisJCQkJCWlmICgnXG4nID09IHVybFtpXSkKKwkJCQkJCWZwdXRzKCJcXG4iLCBmcCk7CisJCQkJCWVsc2UKKwkJCQkJCWZwdXRjKHVybFtpXSwgZnApOworCQkJCWZwdXRjKCdcbicsIGZwKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogZG8gbm90IHdyaXRlIGFueXRoaW5nIHRvIEZFVENIX0hFQUQgKi8KKwkJCQlicmVhazsKKwkJCX0KKworCQkJc3RyYnVmX3Jlc2V0KCZub3RlKTsKKwkJCWlmIChyZWYpIHsKKwkJCQlyYyB8PSB1cGRhdGVfbG9jYWxfcmVmKHJlZiwgd2hhdCwgcm0sICZub3RlLAorCQkJCQkJICAgICAgIHN1bW1hcnlfd2lkdGgpOworCQkJCWZyZWUocmVmKTsKKwkJCX0gZWxzZQorCQkJCWZvcm1hdF9kaXNwbGF5KCZub3RlLCAnKicsCisJCQkJCSAgICAgICAqa2luZCA/IGtpbmQgOiAiYnJhbmNoIiwgTlVMTCwKKwkJCQkJICAgICAgICp3aGF0ID8gd2hhdCA6ICJIRUFEIiwKKwkJCQkJICAgICAgICJGRVRDSF9IRUFEIiwgc3VtbWFyeV93aWR0aCk7CisJCQlpZiAobm90ZS5sZW4pIHsKKwkJCQlpZiAodmVyYm9zaXR5ID49IDAgJiYgIXNob3duX3VybCkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiRnJvbSAlLipzXG4iKSwKKwkJCQkJCQl1cmxfbGVuLCB1cmwpOworCQkJCQlzaG93bl91cmwgPSAxOworCQkJCX0KKwkJCQlpZiAodmVyYm9zaXR5ID49IDApCisJCQkJCWZwcmludGYoc3RkZXJyLCAiICVzXG4iLCBub3RlLmJ1Zik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAocmMgJiBTVE9SRV9SRUZfRVJST1JfREZfQ09ORkxJQ1QpCisJCWVycm9yKF8oInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKwkJICAgICAgIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nICIKKwkJICAgICAgImJyYW5jaGVzIiksIHJlbW90ZV9uYW1lKTsKKworCWlmIChhZHZpY2VfZmV0Y2hfc2hvd19mb3JjZWRfdXBkYXRlcykgeworCQlpZiAoIWZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMpIHsKKwkJCXdhcm5pbmcoXyh3YXJuX3Nob3dfZm9yY2VkX3VwZGF0ZXMpKTsKKwkJfSBlbHNlIGlmIChmb3JjZWRfdXBkYXRlc19tcyA+IEZPUkNFRF9VUERBVEVTX0RFTEFZX1dBUk5JTkdfSU5fTVMpIHsKKwkJCXdhcm5pbmcoXyh3YXJuX3RpbWVfc2hvd19mb3JjZWRfdXBkYXRlcyksCisJCQkJZm9yY2VkX3VwZGF0ZXNfbXMgLyAxMDAwLjApOworCQl9CisJfQorCisgYWJvcnQ6CisJc3RyYnVmX3JlbGVhc2UoJm5vdGUpOworCWZyZWUodXJsKTsKKwlmY2xvc2UoZnApOworCXJldHVybiByYzsKK30KKworLyoKKyAqIFdlIHdvdWxkIHdhbnQgdG8gYnlwYXNzIHRoZSBvYmplY3QgdHJhbnNmZXIgYWx0b2dldGhlciBpZgorICogZXZlcnl0aGluZyB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYWxyZWFkeSBleGlzdHMgYW5kIGlzIGNvbm5lY3RlZAorICogbG9jYWxseS4KKyAqLworc3RhdGljIGludCBjaGVja19leGlzdF9hbmRfY29ubmVjdGVkKHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJc3RydWN0IHJlZiAqcm0gPSByZWZfbWFwOworCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKKwlzdHJ1Y3QgcmVmICpyOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZGVlcGVuaW5nIGEgc2hhbGxvdyBjbG9uZSB3ZSBhbHJlYWR5IGhhdmUgdGhlc2UKKwkgKiBvYmplY3RzIHJlYWNoYWJsZS4gIFJ1bm5pbmcgcmV2LWxpc3QgaGVyZSB3aWxsIHJldHVybiB3aXRoCisJICogYSBnb29kICgwKSBleGl0IHN0YXR1cyBhbmQgd2UnbGwgYnlwYXNzIHRoZSBmZXRjaCB0aGF0IHdlCisJICogcmVhbGx5IG5lZWQgdG8gcGVyZm9ybS4gIENsYWltaW5nIGZhaWx1cmUgbm93IHdpbGwgZW5zdXJlCisJICogd2UgcGVyZm9ybSB0aGUgbmV0d29yayBleGNoYW5nZSB0byBkZWVwZW4gb3VyIGhpc3RvcnkuCisJICovCisJaWYgKGRlZXBlbikKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBjaGVja19jb25uZWN0ZWQoKSBhbGxvd3Mgb2JqZWN0cyB0byBtZXJlbHkgYmUgcHJvbWlzZWQsIGJ1dAorCSAqIHdlIG5lZWQgYWxsIGRpcmVjdCB0YXJnZXRzIHRvIGV4aXN0LgorCSAqLworCWZvciAociA9IHJtOyByOyByID0gci0+bmV4dCkgeworCQlpZiAoIWhhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKCZyLT5vbGRfb2lkLAorCQkJCQkJT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QpKQorCQkJcmV0dXJuIC0xOworCX0KKworCW9wdC5xdWlldCA9IDE7CisJcmV0dXJuIGNoZWNrX2Nvbm5lY3RlZChpdGVyYXRlX3JlZl9tYXAsICZybSwgJm9wdCk7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJaW50IHJldCA9IGNoZWNrX2V4aXN0X2FuZF9jb25uZWN0ZWQocmVmX21hcCk7CisJaWYgKHJldCkgeworCQl0cmFjZTJfcmVnaW9uX2VudGVyKCJmZXRjaCIsICJmZXRjaF9yZWZzIiwgdGhlX3JlcG9zaXRvcnkpOworCQlyZXQgPSB0cmFuc3BvcnRfZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIHJlZl9tYXApOworCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJmZXRjaCIsICJmZXRjaF9yZWZzIiwgdGhlX3JlcG9zaXRvcnkpOworCX0KKwlpZiAoIXJldCkKKwkJLyoKKwkJICogS2VlcCB0aGUgbmV3IHBhY2sncyAiLmtlZXAiIGZpbGUgYXJvdW5kIHRvIGFsbG93IHRoZSBjYWxsZXIKKwkJICogdGltZSB0byB1cGRhdGUgcmVmcyB0byByZWZlcmVuY2UgdGhlIG5ldyBvYmplY3RzLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJdHJhbnNwb3J0X3VubG9ja19wYWNrKHRyYW5zcG9ydCk7CisJcmV0dXJuIHJldDsKK30KKworLyogVXBkYXRlIGxvY2FsIHJlZnMgYmFzZWQgb24gdGhlIHJlZiB2YWx1ZXMgZmV0Y2hlZCBmcm9tIGEgcmVtb3RlICovCitzdGF0aWMgaW50IGNvbnN1bWVfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJaW50IGNvbm5lY3Rpdml0eV9jaGVja2VkID0gdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zCisJCT8gdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5jb25uZWN0aXZpdHlfY2hlY2tlZCA6IDA7CisJaW50IHJldDsKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJmZXRjaCIsICJjb25zdW1lX3JlZnMiLCB0aGVfcmVwb3NpdG9yeSk7CisJcmV0ID0gc3RvcmVfdXBkYXRlZF9yZWZzKHRyYW5zcG9ydC0+dXJsLAorCQkJCSB0cmFuc3BvcnQtPnJlbW90ZS0+bmFtZSwKKwkJCQkgY29ubmVjdGl2aXR5X2NoZWNrZWQsCisJCQkJIHJlZl9tYXApOworCXRyYW5zcG9ydF91bmxvY2tfcGFjayh0cmFuc3BvcnQpOworCXRyYWNlMl9yZWdpb25fbGVhdmUoImZldGNoIiwgImNvbnN1bWVfcmVmcyIsIHRoZV9yZXBvc2l0b3J5KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBydW5lX3JlZnMoc3RydWN0IHJlZnNwZWMgKnJzLCBzdHJ1Y3QgcmVmICpyZWZfbWFwLAorCQkgICAgICBjb25zdCBjaGFyICpyYXdfdXJsKQoreworCWludCB1cmxfbGVuLCBpLCByZXN1bHQgPSAwOworCXN0cnVjdCByZWYgKnJlZiwgKnN0YWxlX3JlZnMgPSBnZXRfc3RhbGVfaGVhZHMocnMsIHJlZl9tYXApOworCWNoYXIgKnVybDsKKwlpbnQgc3VtbWFyeV93aWR0aCA9IHRyYW5zcG9ydF9zdW1tYXJ5X3dpZHRoKHN0YWxlX3JlZnMpOworCWNvbnN0IGNoYXIgKmRhbmdsaW5nX21zZyA9IGRyeV9ydW4KKwkJPyBfKCIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIikKKwkJOiBfKCIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiKTsKKworCWlmIChyYXdfdXJsKQorCQl1cmwgPSB0cmFuc3BvcnRfYW5vbnltaXplX3VybChyYXdfdXJsKTsKKwllbHNlCisJCXVybCA9IHhzdHJkdXAoImZvcmVpZ24iKTsKKworCXVybF9sZW4gPSBzdHJsZW4odXJsKTsKKwlmb3IgKGkgPSB1cmxfbGVuIC0gMTsgdXJsW2ldID09ICcvJyAmJiAwIDw9IGk7IGktLSkKKwkJOworCisJdXJsX2xlbiA9IGkgKyAxOworCWlmICg0IDwgaSAmJiAhc3RybmNtcCgiLmdpdCIsIHVybCArIGkgLSAzLCA0KSkKKwkJdXJsX2xlbiA9IGkgLSAzOworCisJaWYgKCFkcnlfcnVuKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZuYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKKwkJZm9yIChyZWYgPSBzdGFsZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmbmFtZXMsIHJlZi0+bmFtZSk7CisKKwkJcmVzdWx0ID0gZGVsZXRlX3JlZnMoImZldGNoOiBwcnVuZSIsICZyZWZuYW1lcywgMCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZyZWZuYW1lcywgMCk7CisJfQorCisJaWYgKHZlcmJvc2l0eSA+PSAwKSB7CisJCWZvciAocmVmID0gc3RhbGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJCWlmICghc2hvd25fdXJsKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkZyb20gJS4qc1xuIiksIHVybF9sZW4sIHVybCk7CisJCQkJc2hvd25fdXJsID0gMTsKKwkJCX0KKwkJCWZvcm1hdF9kaXNwbGF5KCZzYiwgJy0nLCBfKCJbZGVsZXRlZF0iKSwgTlVMTCwKKwkJCQkgICAgICAgXygiKG5vbmUpIiksIHByZXR0aWZ5X3JlZm5hbWUocmVmLT5uYW1lKSwKKwkJCQkgICAgICAgc3VtbWFyeV93aWR0aCk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlc1xuIixzYi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJCXdhcm5fZGFuZ2xpbmdfc3ltcmVmKHN0ZGVyciwgZGFuZ2xpbmdfbXNnLCByZWYtPm5hbWUpOworCQl9CisJfQorCisJZnJlZSh1cmwpOworCWZyZWVfcmVmcyhzdGFsZV9yZWZzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBjaGVja19ub3RfY3VycmVudF9icmFuY2goc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpjdXJyZW50X2JyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7CisKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5KCkgfHwgIWN1cnJlbnRfYnJhbmNoKQorCQlyZXR1cm47CisKKwlmb3IgKDsgcmVmX21hcDsgcmVmX21hcCA9IHJlZl9tYXAtPm5leHQpCisJCWlmIChyZWZfbWFwLT5wZWVyX3JlZiAmJiAhc3RyY21wKGN1cnJlbnRfYnJhbmNoLT5yZWZuYW1lLAorCQkJCQlyZWZfbWFwLT5wZWVyX3JlZi0+bmFtZSkpCisJCQlkaWUoXygiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyAiCisJCQkgICAgIm9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiKSwgY3VycmVudF9icmFuY2gtPnJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IHRydW5jYXRlX2ZldGNoX2hlYWQodm9pZCkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX2ZldGNoX2hlYWQodGhlX3JlcG9zaXRvcnkpOworCUZJTEUgKmZwID0gZm9wZW5fZm9yX3dyaXRpbmcoZmlsZW5hbWUpOworCisJaWYgKCFmcCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNhbm5vdCBvcGVuICVzIiksIGZpbGVuYW1lKTsKKwlmY2xvc2UoZnApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfb3B0aW9uKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IHIgPSB0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIG5hbWUsIHZhbHVlKTsKKwlpZiAociA8IDApCisJCWRpZShfKCJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIiksCisJCSAgICBuYW1lLCB2YWx1ZSwgdHJhbnNwb3J0LT51cmwpOworCWlmIChyID4gMCkKKwkJd2FybmluZyhfKCJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iKSwKKwkJCW5hbWUsIHRyYW5zcG9ydC0+dXJsKTsKK30KKworCitzdGF0aWMgaW50IGFkZF9vaWQoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsCisJCSAgIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9pZF9hcnJheSAqb2lkcyA9IGNiX2RhdGE7CisKKwlvaWRfYXJyYXlfYXBwZW5kKG9pZHMsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9uZWdvdGlhdGlvbl90aXBzKHN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgKnNtYXJ0X29wdGlvbnMpCit7CisJc3RydWN0IG9pZF9hcnJheSAqb2lkcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvaWRzKSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVnb3RpYXRpb25fdGlwLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcyA9IG5lZ290aWF0aW9uX3RpcC5pdGVtc1tpXS5zdHJpbmc7CisJCWludCBvbGRfbnI7CisJCWlmICghaGFzX2dsb2Jfc3BlY2lhbHMocykpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJaWYgKGdldF9vaWQocywgJm9pZCkpCisJCQkJZGllKCIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiLCBzKTsKKwkJCW9pZF9hcnJheV9hcHBlbmQob2lkcywgJm9pZCk7CisJCQljb250aW51ZTsKKwkJfQorCQlvbGRfbnIgPSBvaWRzLT5ucjsKKwkJZm9yX2VhY2hfZ2xvYl9yZWYoYWRkX29pZCwgcywgb2lkcyk7CisJCWlmIChvbGRfbnIgPT0gb2lkcy0+bnIpCisJCQl3YXJuaW5nKCJJZ25vcmluZyAtLW5lZ290aWF0aW9uLXRpcD0lcyBiZWNhdXNlIGl0IGRvZXMgbm90IG1hdGNoIGFueSByZWZzIiwKKwkJCQlzKTsKKwl9CisJc21hcnRfb3B0aW9ucy0+bmVnb3RpYXRpb25fdGlwcyA9IG9pZHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNwb3J0ICpwcmVwYXJlX3RyYW5zcG9ydChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGludCBkZWVwZW4pCit7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCisJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChyZW1vdGUsIE5VTEwpOworCXRyYW5zcG9ydF9zZXRfdmVyYm9zaXR5KHRyYW5zcG9ydCwgdmVyYm9zaXR5LCBwcm9ncmVzcyk7CisJdHJhbnNwb3J0LT5mYW1pbHkgPSBmYW1pbHk7CisJaWYgKHVwbG9hZF9wYWNrKQorCQlzZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1VQTE9BRFBBQ0ssIHVwbG9hZF9wYWNrKTsKKwlpZiAoa2VlcCkKKwkJc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9LRUVQLCAieWVzIik7CisJaWYgKGRlcHRoKQorCQlzZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0RFUFRILCBkZXB0aCk7CisJaWYgKGRlZXBlbiAmJiBkZWVwZW5fc2luY2UpCisJCXNldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVFUEVOX1NJTkNFLCBkZWVwZW5fc2luY2UpOworCWlmIChkZWVwZW4gJiYgZGVlcGVuX25vdC5ucikKKwkJc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9ERUVQRU5fTk9ULAorCQkJICAgKGNvbnN0IGNoYXIgKikmZGVlcGVuX25vdCk7CisJaWYgKGRlZXBlbl9yZWxhdGl2ZSkKKwkJc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9ERUVQRU5fUkVMQVRJVkUsICJ5ZXMiKTsKKwlpZiAodXBkYXRlX3NoYWxsb3cpCisJCXNldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVVBEQVRFX1NIQUxMT1csICJ5ZXMiKTsKKwlpZiAoZmlsdGVyX29wdGlvbnMuY2hvaWNlKSB7CisJCWNvbnN0IGNoYXIgKnNwZWMgPQorCQkJZXhwYW5kX2xpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYygmZmlsdGVyX29wdGlvbnMpOworCQlzZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0xJU1RfT0JKRUNUU19GSUxURVIsIHNwZWMpOworCQlzZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZST01fUFJPTUlTT1IsICIxIik7CisJfQorCWlmIChuZWdvdGlhdGlvbl90aXAubnIpIHsKKwkJaWYgKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucykKKwkJCWFkZF9uZWdvdGlhdGlvbl90aXBzKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyk7CisJCWVsc2UKKwkJCXdhcm5pbmcoIklnbm9yaW5nIC0tbmVnb3RpYXRpb24tdGlwIGJlY2F1c2UgdGhlIHByb3RvY29sIGRvZXMgbm90IHN1cHBvcnQgaXQuIik7CisJfQorCXJldHVybiB0cmFuc3BvcnQ7Cit9CisKK3N0YXRpYyB2b2lkIGJhY2tmaWxsX3RhZ3Moc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZfbWFwKQoreworCWludCBjYW5ub3RfcmV1c2U7CisKKwkvKgorCSAqIE9uY2Ugd2UgaGF2ZSBzZXQgVFJBTlNfT1BUX0RFRVBFTl9TSU5DRSwgd2UgY2FuJ3QgdW5zZXQgaXQKKwkgKiB3aGVuIHJlbW90ZSBoZWxwZXIgaXMgdXNlZCAoc2V0dGluZyBpdCB0byBhbiBlbXB0eSBzdHJpbmcKKwkgKiBpcyBub3QgdW5zZXR0aW5nKS4gV2UgY291bGQgZXh0ZW5kIHRoZSByZW1vdGUgaGVscGVyCisJICogcHJvdG9jb2wgZm9yIHRoYXQsIGJ1dCBmb3Igbm93LCBqdXN0IGZvcmNlIGEgbmV3IGNvbm5lY3Rpb24KKwkgKiB3aXRob3V0IGRlZXBlbi1zaW5jZS4gU2ltaWxhciBzdG9yeSBmb3IgZGVlcGVuLW5vdC4KKwkgKi8KKwljYW5ub3RfcmV1c2UgPSB0cmFuc3BvcnQtPmNhbm5vdF9yZXVzZSB8fAorCQlkZWVwZW5fc2luY2UgfHwgZGVlcGVuX25vdC5ucjsKKwlpZiAoY2Fubm90X3JldXNlKSB7CisJCWdzZWNvbmRhcnkgPSBwcmVwYXJlX3RyYW5zcG9ydCh0cmFuc3BvcnQtPnJlbW90ZSwgMCk7CisJCXRyYW5zcG9ydCA9IGdzZWNvbmRhcnk7CisJfQorCisJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfRk9MTE9XVEFHUywgTlVMTCk7CisJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVQVEgsICIwIik7CisJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVFUEVOX1JFTEFUSVZFLCBOVUxMKTsKKwlpZiAoIWZldGNoX3JlZnModHJhbnNwb3J0LCByZWZfbWFwKSkKKwkJY29uc3VtZV9yZWZzKHRyYW5zcG9ydCwgcmVmX21hcCk7CisKKwlpZiAoZ3NlY29uZGFyeSkgeworCQl0cmFuc3BvcnRfZGlzY29ubmVjdChnc2Vjb25kYXJ5KTsKKwkJZ3NlY29uZGFyeSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGRvX2ZldGNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJICAgIHN0cnVjdCByZWZzcGVjICpycykKK3sKKwlzdHJ1Y3QgcmVmICpyZWZfbWFwOworCWludCBhdXRvdGFncyA9ICh0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hfdGFncyA9PSAxKTsKKwlpbnQgcmV0Y29kZSA9IDA7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcmVmX3ByZWZpeGVzID0gQVJHVl9BUlJBWV9JTklUOworCWludCBtdXN0X2xpc3RfcmVmcyA9IDE7CisKKwlpZiAodGFncyA9PSBUQUdTX0RFRkFVTFQpIHsKKwkJaWYgKHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaF90YWdzID09IDIpCisJCQl0YWdzID0gVEFHU19TRVQ7CisJCWlmICh0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hfdGFncyA9PSAtMSkKKwkJCXRhZ3MgPSBUQUdTX1VOU0VUOworCX0KKworCS8qIGlmIG5vdCBhcHBlbmRpbmcsIHRydW5jYXRlIEZFVENIX0hFQUQgKi8KKwlpZiAoIWFwcGVuZCAmJiAhZHJ5X3J1bikgeworCQlyZXRjb2RlID0gdHJ1bmNhdGVfZmV0Y2hfaGVhZCgpOworCQlpZiAocmV0Y29kZSkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAocnMtPm5yKSB7CisJCWludCBpOworCisJCXJlZnNwZWNfcmVmX3ByZWZpeGVzKHJzLCAmcmVmX3ByZWZpeGVzKTsKKworCQkvKgorCQkgKiBXZSBjYW4gYXZvaWQgbGlzdGluZyByZWZzIGlmIGFsbCBvZiB0aGVtIGFyZSBleGFjdAorCQkgKiBPSURzCisJCSAqLworCQltdXN0X2xpc3RfcmVmcyA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykgeworCQkJaWYgKCFycy0+aXRlbXNbaV0uZXhhY3Rfc2hhMSkgeworCQkJCW11c3RfbGlzdF9yZWZzID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAodHJhbnNwb3J0LT5yZW1vdGUgJiYgdHJhbnNwb3J0LT5yZW1vdGUtPmZldGNoLm5yKQorCQlyZWZzcGVjX3JlZl9wcmVmaXhlcygmdHJhbnNwb3J0LT5yZW1vdGUtPmZldGNoLCAmcmVmX3ByZWZpeGVzKTsKKworCWlmICh0YWdzID09IFRBR1NfU0VUIHx8IHRhZ3MgPT0gVEFHU19ERUZBVUxUKSB7CisJCW11c3RfbGlzdF9yZWZzID0gMTsKKwkJaWYgKHJlZl9wcmVmaXhlcy5hcmdjKQorCQkJYXJndl9hcnJheV9wdXNoKCZyZWZfcHJlZml4ZXMsICJyZWZzL3RhZ3MvIik7CisJfQorCisJaWYgKG11c3RfbGlzdF9yZWZzKSB7CisJCXRyYWNlMl9yZWdpb25fZW50ZXIoImZldGNoIiwgInJlbW90ZV9yZWZzIiwgdGhlX3JlcG9zaXRvcnkpOworCQlyZW1vdGVfcmVmcyA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0LCAmcmVmX3ByZWZpeGVzKTsKKwkJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2giLCAicmVtb3RlX3JlZnMiLCB0aGVfcmVwb3NpdG9yeSk7CisJfSBlbHNlCisJCXJlbW90ZV9yZWZzID0gTlVMTDsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJnJlZl9wcmVmaXhlcyk7CisKKwlyZWZfbWFwID0gZ2V0X3JlZl9tYXAodHJhbnNwb3J0LT5yZW1vdGUsIHJlbW90ZV9yZWZzLCBycywKKwkJCSAgICAgIHRhZ3MsICZhdXRvdGFncyk7CisJaWYgKCF1cGRhdGVfaGVhZF9vaykKKwkJY2hlY2tfbm90X2N1cnJlbnRfYnJhbmNoKHJlZl9tYXApOworCisJaWYgKHRhZ3MgPT0gVEFHU19ERUZBVUxUICYmIGF1dG90YWdzKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GT0xMT1dUQUdTLCAiMSIpOworCWlmIChwcnVuZSkgeworCQkvKgorCQkgKiBXZSBvbmx5IHBydW5lIGJhc2VkIG9uIHJlZnNwZWNzIHNwZWNpZmllZAorCQkgKiBleHBsaWNpdGx5ICh2aWEgY29tbWFuZCBsaW5lIG9yIGNvbmZpZ3VyYXRpb24pOyB3ZQorCQkgKiBkb24ndCBjYXJlIHdoZXRoZXIgLS10YWdzIHdhcyBzcGVjaWZpZWQuCisJCSAqLworCQlpZiAocnMtPm5yKSB7CisJCQlwcnVuZV9yZWZzKHJzLCByZWZfbWFwLCB0cmFuc3BvcnQtPnVybCk7CisJCX0gZWxzZSB7CisJCQlwcnVuZV9yZWZzKCZ0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2gsCisJCQkJICAgcmVmX21hcCwKKwkJCQkgICB0cmFuc3BvcnQtPnVybCk7CisJCX0KKwl9CisJaWYgKGZldGNoX3JlZnModHJhbnNwb3J0LCByZWZfbWFwKSB8fCBjb25zdW1lX3JlZnModHJhbnNwb3J0LCByZWZfbWFwKSkgeworCQlmcmVlX3JlZnMocmVmX21hcCk7CisJCXJldGNvZGUgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKHNldF91cHN0cmVhbSkgeworCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KCJIRUFEIik7CisJCXN0cnVjdCByZWYgKnJtOworCQlzdHJ1Y3QgcmVmICpzb3VyY2VfcmVmID0gTlVMTDsKKworCQkvKgorCQkgKiBXZSdyZSBzZXR0aW5nIHRoZSB1cHN0cmVhbSBjb25maWd1cmF0aW9uIGZvciB0aGUKKwkJICogY3VycmVudCBicmFuY2guIFRoZSByZWxldmFudCB1cHN0cmVhbSBpcyB0aGUKKwkJICogZmV0Y2hlZCBicmFuY2ggdGhhdCBpcyBtZWFudCB0byBiZSBtZXJnZWQgd2l0aCB0aGUKKwkJICogY3VycmVudCBvbmUsIGkuZS4gdGhlIG9uZSBmZXRjaGVkIHRvIEZFVENIX0hFQUQuCisJCSAqCisJCSAqIFdoZW4gdGhlcmUgYXJlIHNldmVyYWwgc3VjaCBicmFuY2hlcywgY29uc2lkZXIgdGhlCisJCSAqIHJlcXVlc3QgYW1iaWd1b3VzIGFuZCBlcnIgb24gdGhlIHNhZmUgc2lkZSBieSBkb2luZworCQkgKiBub3RoaW5nIGFuZCBqdXN0IGVtaXQgYSB3YXJuaW5nLgorCQkgKi8KKwkJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCQlpZiAoIXJtLT5wZWVyX3JlZikgeworCQkJCWlmIChzb3VyY2VfcmVmKSB7CisJCQkJCXdhcm5pbmcoXygibXVsdGlwbGUgYnJhbmNoZXMgZGV0ZWN0ZWQsIGluY29tcGF0aWJsZSB3aXRoIC0tc2V0LXVwc3RyZWFtIikpOworCQkJCQlnb3RvIHNraXA7CisJCQkJfSBlbHNlIHsKKwkJCQkJc291cmNlX3JlZiA9IHJtOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoc291cmNlX3JlZikgeworCQkJaWYgKCFzdHJjbXAoc291cmNlX3JlZi0+bmFtZSwgIkhFQUQiKSB8fAorCQkJICAgIHN0YXJ0c193aXRoKHNvdXJjZV9yZWYtPm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQkJCWluc3RhbGxfYnJhbmNoX2NvbmZpZygwLAorCQkJCQkJICAgICAgYnJhbmNoLT5uYW1lLAorCQkJCQkJICAgICAgdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUsCisJCQkJCQkgICAgICBzb3VyY2VfcmVmLT5uYW1lKTsKKwkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNvdXJjZV9yZWYtPm5hbWUsICJyZWZzL3JlbW90ZXMvIikpCisJCQkJd2FybmluZyhfKCJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIpKTsKKwkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNvdXJjZV9yZWYtPm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCQkJd2FybmluZyhfKCJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgdGFnIikpOworCQkJZWxzZQorCQkJCXdhcm5pbmcoXygidW5rbm93biBicmFuY2ggdHlwZSIpKTsKKwkJfSBlbHNlIHsKKwkJCXdhcm5pbmcoXygibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKwkJCQkieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIpKTsKKwkJfQorCX0KKyBza2lwOgorCWZyZWVfcmVmcyhyZWZfbWFwKTsKKworCS8qIGlmIG5laXRoZXIgLS1uby10YWdzIG5vciAtLXRhZ3Mgd2FzIHNwZWNpZmllZCwgZG8gYXV0b21hdGVkIHRhZworCSAqIGZvbGxvd2luZyAuLi4gKi8KKwlpZiAodGFncyA9PSBUQUdTX0RFRkFVTFQgJiYgYXV0b3RhZ3MpIHsKKwkJc3RydWN0IHJlZiAqKnRhaWwgPSAmcmVmX21hcDsKKwkJcmVmX21hcCA9IE5VTEw7CisJCWZpbmRfbm9uX2xvY2FsX3RhZ3MocmVtb3RlX3JlZnMsICZyZWZfbWFwLCAmdGFpbCk7CisJCWlmIChyZWZfbWFwKQorCQkJYmFja2ZpbGxfdGFncyh0cmFuc3BvcnQsIHJlZl9tYXApOworCQlmcmVlX3JlZnMocmVmX21hcCk7CisJfQorCisgY2xlYW51cDoKKwlyZXR1cm4gcmV0Y29kZTsKK30KKworc3RhdGljIGludCBnZXRfb25lX3JlbW90ZV9mb3JfZmV0Y2goc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCA9IHByaXY7CisJaWYgKCFyZW1vdGUtPnNraXBfZGVmYXVsdF91cGRhdGUpCisJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCByZW1vdGUtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVtb3RlX2dyb3VwX2RhdGEgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0OworfTsKKworc3RhdGljIGludCBnZXRfcmVtb3RlX2dyb3VwKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHJlbW90ZV9ncm91cF9kYXRhICpnID0gcHJpdjsKKworCWlmIChza2lwX3ByZWZpeChrZXksICJyZW1vdGVzLiIsICZrZXkpICYmICFzdHJjbXAoa2V5LCBnLT5uYW1lKSkgeworCQkvKiBzcGxpdCBsaXN0IGJ5IHdoaXRlIHNwYWNlICovCisJCXdoaWxlICgqdmFsdWUpIHsKKwkJCXNpemVfdCB3b3JkbGVuID0gc3RyY3Nwbih2YWx1ZSwgIiBcdFxuIik7CisKKwkJCWlmICh3b3JkbGVuID49IDEpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKGctPmxpc3QsCisJCQkJCQkgICB4c3RybmR1cCh2YWx1ZSwgd29yZGxlbikpOworCQkJdmFsdWUgKz0gd29yZGxlbiArICh2YWx1ZVt3b3JkbGVuXSAhPSAnXDAnKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9yZW1vdGVfb3JfZ3JvdXAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBwcmV2X25yID0gbGlzdC0+bnI7CisJc3RydWN0IHJlbW90ZV9ncm91cF9kYXRhIGc7CisJZy5uYW1lID0gbmFtZTsgZy5saXN0ID0gbGlzdDsKKworCWdpdF9jb25maWcoZ2V0X3JlbW90ZV9ncm91cCwgJmcpOworCWlmIChsaXN0LT5uciA9PSBwcmV2X25yKSB7CisJCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHJlbW90ZV9nZXQobmFtZSk7CisJCWlmICghcmVtb3RlX2lzX2NvbmZpZ3VyZWQocmVtb3RlLCAwKSkKKwkJCXJldHVybiAwOworCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcmVtb3RlLT5uYW1lKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9vcHRpb25zX3RvX2FyZ3Yoc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3YpCit7CisJaWYgKGRyeV9ydW4pCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1kcnktcnVuIik7CisJaWYgKHBydW5lICE9IC0xKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgcHJ1bmUgPyAiLS1wcnVuZSIgOiAiLS1uby1wcnVuZSIpOworCWlmIChwcnVuZV90YWdzICE9IC0xKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgcHJ1bmVfdGFncyA/ICItLXBydW5lLXRhZ3MiIDogIi0tbm8tcHJ1bmUtdGFncyIpOworCWlmICh1cGRhdGVfaGVhZF9vaykKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLXVwZGF0ZS1oZWFkLW9rIik7CisJaWYgKGZvcmNlKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi0tZm9yY2UiKTsKKwlpZiAoa2VlcCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLWtlZXAiKTsKKwlpZiAocmVjdXJzZV9zdWJtb2R1bGVzID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTikKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLXJlY3Vyc2Utc3VibW9kdWxlcyIpOworCWVsc2UgaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCIpOworCWlmICh0YWdzID09IFRBR1NfU0VUKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi0tdGFncyIpOworCWVsc2UgaWYgKHRhZ3MgPT0gVEFHU19VTlNFVCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLW5vLXRhZ3MiKTsKKwlpZiAodmVyYm9zaXR5ID49IDIpCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLXYiKTsKKwlpZiAodmVyYm9zaXR5ID49IDEpCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLXYiKTsKKwllbHNlIGlmICh2ZXJib3NpdHkgPCAwKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi1xIik7CisKK30KKworLyogRmV0Y2ggbXVsdGlwbGUgcmVtb3RlcyBpbiBwYXJhbGxlbCAqLworCitzdHJ1Y3QgcGFyYWxsZWxfZmV0Y2hfc3RhdGUgeworCWNvbnN0IGNoYXIgKiphcmd2OworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVtb3RlczsKKwlpbnQgbmV4dCwgcmVzdWx0OworfTsKKworc3RhdGljIGludCBmZXRjaF9uZXh0X3JlbW90ZShzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY3AsIHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCSAgICAgdm9pZCAqY2IsIHZvaWQgKip0YXNrX2NiKQoreworCXN0cnVjdCBwYXJhbGxlbF9mZXRjaF9zdGF0ZSAqc3RhdGUgPSBjYjsKKwljaGFyICpyZW1vdGU7CisKKwlpZiAoc3RhdGUtPm5leHQgPCAwIHx8IHN0YXRlLT5uZXh0ID49IHN0YXRlLT5yZW1vdGVzLT5ucikKKwkJcmV0dXJuIDA7CisKKwlyZW1vdGUgPSBzdGF0ZS0+cmVtb3Rlcy0+aXRlbXNbc3RhdGUtPm5leHQrK10uc3RyaW5nOworCSp0YXNrX2NiID0gcmVtb3RlOworCisJYXJndl9hcnJheV9wdXNodigmY3AtPmFyZ3MsIHN0YXRlLT5hcmd2KTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCByZW1vdGUpOworCWNwLT5naXRfY21kID0gMTsKKworCWlmICh2ZXJib3NpdHkgPj0gMCkKKwkJcHJpbnRmKF8oIkZldGNoaW5nICVzXG4iKSwgcmVtb3RlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGZldGNoX2ZhaWxlZF90b19zdGFydChzdHJ1Y3Qgc3RyYnVmICpvdXQsIHZvaWQgKmNiLCB2b2lkICp0YXNrX2NiKQoreworCXN0cnVjdCBwYXJhbGxlbF9mZXRjaF9zdGF0ZSAqc3RhdGUgPSBjYjsKKwljb25zdCBjaGFyICpyZW1vdGUgPSB0YXNrX2NiOworCisJc3RhdGUtPnJlc3VsdCA9IGVycm9yKF8oIkNvdWxkIG5vdCBmZXRjaCAlcyIpLCByZW1vdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfZmluaXNoZWQoaW50IHJlc3VsdCwgc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJICB2b2lkICpjYiwgdm9pZCAqdGFza19jYikKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZmV0Y2hfc3RhdGUgKnN0YXRlID0gY2I7CisJY29uc3QgY2hhciAqcmVtb3RlID0gdGFza19jYjsKKworCWlmIChyZXN1bHQpIHsKKwkJc3RyYnVmX2FkZGYob3V0LCBfKCJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIpLAorCQkJICAgIHJlbW90ZSwgcmVzdWx0KTsKKwkJc3RhdGUtPnJlc3VsdCA9IC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZldGNoX211bHRpcGxlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IG1heF9jaGlsZHJlbikKK3sKKwlpbnQgaSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCisJaWYgKCFhcHBlbmQgJiYgIWRyeV9ydW4pIHsKKwkJaW50IGVycmNvZGUgPSB0cnVuY2F0ZV9mZXRjaF9oZWFkKCk7CisJCWlmIChlcnJjb2RlKQorCQkJcmV0dXJuIGVycmNvZGU7CisJfQorCisJYXJndl9hcnJheV9wdXNobCgmYXJndiwgImZldGNoIiwgIi0tYXBwZW5kIiwgIi0tbm8tYXV0by1nYyIsCisJCQkiLS1uby13cml0ZS1jb21taXQtZ3JhcGgiLCBOVUxMKTsKKwlhZGRfb3B0aW9uc190b19hcmd2KCZhcmd2KTsKKworCWlmIChtYXhfY2hpbGRyZW4gIT0gMSAmJiBsaXN0LT5uciAhPSAxKSB7CisJCXN0cnVjdCBwYXJhbGxlbF9mZXRjaF9zdGF0ZSBzdGF0ZSA9IHsgYXJndi5hcmd2LCBsaXN0LCAwLCAwIH07CisKKwkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS1lbmQtb2Ytb3B0aW9ucyIpOworCQlyZXN1bHQgPSBydW5fcHJvY2Vzc2VzX3BhcmFsbGVsX3RyMihtYXhfY2hpbGRyZW4sCisJCQkJCQkgICAgJmZldGNoX25leHRfcmVtb3RlLAorCQkJCQkJICAgICZmZXRjaF9mYWlsZWRfdG9fc3RhcnQsCisJCQkJCQkgICAgJmZldGNoX2ZpbmlzaGVkLAorCQkJCQkJICAgICZzdGF0ZSwKKwkJCQkJCSAgICAiZmV0Y2giLCAicGFyYWxsZWwvZmV0Y2giKTsKKworCQlpZiAoIXJlc3VsdCkKKwkJCXJlc3VsdCA9IHN0YXRlLnJlc3VsdDsKKwl9IGVsc2UKKwkJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBsaXN0LT5pdGVtc1tpXS5zdHJpbmc7CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIG5hbWUpOworCQkJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQkJCXByaW50ZihfKCJGZXRjaGluZyAlc1xuIiksIG5hbWUpOworCQkJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YuYXJndiwgUlVOX0dJVF9DTUQpKSB7CisJCQkJZXJyb3IoXygiQ291bGQgbm90IGZldGNoICVzIiksIG5hbWUpOworCQkJCXJlc3VsdCA9IDE7CisJCQl9CisJCQlhcmd2X2FycmF5X3BvcCgmYXJndik7CisJCX0KKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCXJldHVybiAhIXJlc3VsdDsKK30KKworLyoKKyAqIEZldGNoaW5nIGZyb20gdGhlIHByb21pc29yIHJlbW90ZSBzaG91bGQgdXNlIHRoZSBnaXZlbiBmaWx0ZXItc3BlYworICogb3IgaW5oZXJpdCB0aGUgZGVmYXVsdCBmaWx0ZXItc3BlYyBmcm9tIHRoZSBjb25maWcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmZXRjaF9vbmVfc2V0dXBfcGFydGlhbChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCit7CisJLyoKKwkgKiBFeHBsaWNpdCAtLW5vLWZpbHRlciBhcmd1bWVudCBvdmVycmlkZXMgZXZlcnl0aGluZywgcmVnYXJkbGVzcworCSAqIG9mIGFueSBwcmlvciBwYXJ0aWFsIGNsb25lcyBhbmQgZmV0Y2hlcy4KKwkgKi8KKwlpZiAoZmlsdGVyX29wdGlvbnMubm9fZmlsdGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIG5vIHByaW9yIHBhcnRpYWwgY2xvbmUvZmV0Y2ggYW5kIHRoZSBjdXJyZW50IGZldGNoIERJRCBOT1QKKwkgKiByZXF1ZXN0IGEgcGFydGlhbC1mZXRjaCwgZG8gYSBub3JtYWwgZmV0Y2guCisJICovCisJaWYgKCFoYXNfcHJvbWlzb3JfcmVtb3RlKCkgJiYgIWZpbHRlcl9vcHRpb25zLmNob2ljZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgcGFydGlhbC1mZXRjaCByZXF1ZXN0LCB3ZSBlbmFibGUgcGFydGlhbCBvbgorCSAqIHRoaXMgcmVwbyBpZiBub3QgYWxyZWFkeSBlbmFibGVkIGFuZCByZW1lbWJlciB0aGUgZ2l2ZW4KKwkgKiBmaWx0ZXItc3BlYyBhcyB0aGUgZGVmYXVsdCBmb3Igc3Vic2VxdWVudCBmZXRjaGVzIHRvIHRoaXMKKwkgKiByZW1vdGUuCisJICovCisJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSkgeworCQlwYXJ0aWFsX2Nsb25lX3JlZ2lzdGVyKHJlbW90ZS0+bmFtZSwgJmZpbHRlcl9vcHRpb25zKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogRG8gYSBwYXJ0aWFsLWZldGNoIGZyb20gdGhlIHByb21pc29yIHJlbW90ZSB1c2luZyBlaXRoZXIgdGhlCisJICogZXhwbGljaXRseSBnaXZlbiBmaWx0ZXItc3BlYyBvciBpbmhlcml0IHRoZSBmaWx0ZXItc3BlYyBmcm9tCisJICogdGhlIGNvbmZpZy4KKwkgKi8KKwlpZiAoIWZpbHRlcl9vcHRpb25zLmNob2ljZSkKKwkJcGFydGlhbF9jbG9uZV9nZXRfZGVmYXVsdF9maWx0ZXJfc3BlYygmZmlsdGVyX29wdGlvbnMsIHJlbW90ZS0+bmFtZSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGZldGNoX29uZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgaW50IHBydW5lX3RhZ3Nfb2spCit7CisJc3RydWN0IHJlZnNwZWMgcnMgPSBSRUZTUEVDX0lOSVRfRkVUQ0g7CisJaW50IGk7CisJaW50IGV4aXRfY29kZTsKKwlpbnQgbWF5YmVfcHJ1bmVfdGFnczsKKwlpbnQgcmVtb3RlX3ZpYV9jb25maWcgPSByZW1vdGVfaXNfY29uZmlndXJlZChyZW1vdGUsIDApOworCisJaWYgKCFyZW1vdGUpCisJCWRpZShfKCJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKwkJICAgICJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIikpOworCisJZ3RyYW5zcG9ydCA9IHByZXBhcmVfdHJhbnNwb3J0KHJlbW90ZSwgMSk7CisKKwlpZiAocHJ1bmUgPCAwKSB7CisJCS8qIG5vIGNvbW1hbmQgbGluZSByZXF1ZXN0ICovCisJCWlmICgwIDw9IHJlbW90ZS0+cHJ1bmUpCisJCQlwcnVuZSA9IHJlbW90ZS0+cHJ1bmU7CisJCWVsc2UgaWYgKDAgPD0gZmV0Y2hfcHJ1bmVfY29uZmlnKQorCQkJcHJ1bmUgPSBmZXRjaF9wcnVuZV9jb25maWc7CisJCWVsc2UKKwkJCXBydW5lID0gUFJVTkVfQllfREVGQVVMVDsKKwl9CisKKwlpZiAocHJ1bmVfdGFncyA8IDApIHsKKwkJLyogbm8gY29tbWFuZCBsaW5lIHJlcXVlc3QgKi8KKwkJaWYgKDAgPD0gcmVtb3RlLT5wcnVuZV90YWdzKQorCQkJcHJ1bmVfdGFncyA9IHJlbW90ZS0+cHJ1bmVfdGFnczsKKwkJZWxzZSBpZiAoMCA8PSBmZXRjaF9wcnVuZV90YWdzX2NvbmZpZykKKwkJCXBydW5lX3RhZ3MgPSBmZXRjaF9wcnVuZV90YWdzX2NvbmZpZzsKKwkJZWxzZQorCQkJcHJ1bmVfdGFncyA9IFBSVU5FX1RBR1NfQllfREVGQVVMVDsKKwl9CisKKwltYXliZV9wcnVuZV90YWdzID0gcHJ1bmVfdGFnc19vayAmJiBwcnVuZV90YWdzOworCWlmIChtYXliZV9wcnVuZV90YWdzICYmIHJlbW90ZV92aWFfY29uZmlnKQorCQlyZWZzcGVjX2FwcGVuZCgmcmVtb3RlLT5mZXRjaCwgVEFHX1JFRlNQRUMpOworCisJaWYgKG1heWJlX3BydW5lX3RhZ3MgJiYgKGFyZ2MgfHwgIXJlbW90ZV92aWFfY29uZmlnKSkKKwkJcmVmc3BlY19hcHBlbmQoJnJzLCBUQUdfUkVGU1BFQyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICJ0YWciKSkgeworCQkJY2hhciAqdGFnOworCQkJaSsrOworCQkJaWYgKGkgPj0gYXJnYykKKwkJCQlkaWUoXygiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIpKTsKKworCQkJdGFnID0geHN0cmZtdCgicmVmcy90YWdzLyVzOnJlZnMvdGFncy8lcyIsCisJCQkJICAgICAgYXJndltpXSwgYXJndltpXSk7CisJCQlyZWZzcGVjX2FwcGVuZCgmcnMsIHRhZyk7CisJCQlmcmVlKHRhZyk7CisJCX0gZWxzZSB7CisJCQlyZWZzcGVjX2FwcGVuZCgmcnMsIGFyZ3ZbaV0pOworCQl9CisJfQorCisJaWYgKHNlcnZlcl9vcHRpb25zLm5yKQorCQlndHJhbnNwb3J0LT5zZXJ2ZXJfb3B0aW9ucyA9ICZzZXJ2ZXJfb3B0aW9uczsKKworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHVubG9ja19wYWNrX29uX3NpZ25hbCk7CisJYXRleGl0KHVubG9ja19wYWNrKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCWV4aXRfY29kZSA9IGRvX2ZldGNoKGd0cmFuc3BvcnQsICZycyk7CisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCXJlZnNwZWNfY2xlYXIoJnJzKTsKKwl0cmFuc3BvcnRfZGlzY29ubmVjdChndHJhbnNwb3J0KTsKKwlndHJhbnNwb3J0ID0gTlVMTDsKKwlyZXR1cm4gZXhpdF9jb2RlOworfQorCitpbnQgY21kX2ZldGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gTlVMTDsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgcHJ1bmVfdGFnc19vayA9IDE7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndl9nY19hdXRvID0gQVJHVl9BUlJBWV9JTklUOworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJmZXRjaCIpOworCisJLyogUmVjb3JkIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZSByZWZsb2cgKi8KKwlzdHJidWZfYWRkc3RyKCZkZWZhdWx0X3JsYSwgImZldGNoIik7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKwkJc3RyYnVmX2FkZGYoJmRlZmF1bHRfcmxhLCAiICVzIiwgYXJndltpXSk7CisKKwlmZXRjaF9jb25maWdfZnJvbV9naXRtb2R1bGVzKCZzdWJtb2R1bGVfZmV0Y2hfam9ic19jb25maWcsCisJCQkJICAgICAmcmVjdXJzZV9zdWJtb2R1bGVzKTsKKwlnaXRfY29uZmlnKGdpdF9mZXRjaF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LAorCQkJICAgICBidWlsdGluX2ZldGNoX29wdGlvbnMsIGJ1aWx0aW5fZmV0Y2hfdXNhZ2UsIDApOworCisJaWYgKGRlZXBlbl9yZWxhdGl2ZSkgeworCQlpZiAoZGVlcGVuX3JlbGF0aXZlIDwgMCkKKwkJCWRpZShfKCJOZWdhdGl2ZSBkZXB0aCBpbiAtLWRlZXBlbiBpcyBub3Qgc3VwcG9ydGVkIikpOworCQlpZiAoZGVwdGgpCisJCQlkaWUoXygiLS1kZWVwZW4gYW5kIC0tZGVwdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIpKTsKKwkJZGVwdGggPSB4c3RyZm10KCIlZCIsIGRlZXBlbl9yZWxhdGl2ZSk7CisJfQorCWlmICh1bnNoYWxsb3cpIHsKKwkJaWYgKGRlcHRoKQorCQkJZGllKF8oIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIikpOworCQllbHNlIGlmICghaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSkKKwkJCWRpZShfKCItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKwkJZWxzZQorCQkJZGVwdGggPSB4c3RyZm10KCIlZCIsIElORklOSVRFX0RFUFRIKTsKKwl9CisKKwkvKiBubyBuZWVkIHRvIGJlIHN0cmljdCwgdHJhbnNwb3J0X3NldF9vcHRpb24oKSB3aWxsIHZhbGlkYXRlIGl0IGFnYWluICovCisJaWYgKGRlcHRoICYmIGF0b2koZGVwdGgpIDwgMSkKKwkJZGllKF8oImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIpLCBkZXB0aCk7CisJaWYgKGRlcHRoIHx8IGRlZXBlbl9zaW5jZSB8fCBkZWVwZW5fbm90Lm5yKQorCQlkZWVwZW4gPSAxOworCisJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSAmJiAhaGFzX3Byb21pc29yX3JlbW90ZSgpKQorCQlkaWUoIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBleHRlbnNpb25zLnBhcnRpYWxDbG9uZSBpcyBzZXQiKTsKKworCWlmIChhbGwpIHsKKwkJaWYgKGFyZ2MgPT0gMSkKKwkJCWRpZShfKCJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIpKTsKKwkJZWxzZSBpZiAoYXJnYyA+IDEpCisJCQlkaWUoXygiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIikpOworCQkodm9pZCkgZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfcmVtb3RlX2Zvcl9mZXRjaCwgJmxpc3QpOworCX0gZWxzZSBpZiAoYXJnYyA9PSAwKSB7CisJCS8qIE5vIGFyZ3VtZW50cyAtLSB1c2UgZGVmYXVsdCByZW1vdGUgKi8KKwkJcmVtb3RlID0gcmVtb3RlX2dldChOVUxMKTsKKwl9IGVsc2UgaWYgKG11bHRpcGxlKSB7CisJCS8qIEFsbCBhcmd1bWVudHMgYXJlIGFzc3VtZWQgdG8gYmUgcmVtb3RlcyBvciBncm91cHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmICghYWRkX3JlbW90ZV9vcl9ncm91cChhcmd2W2ldLCAmbGlzdCkpCisJCQkJZGllKF8oIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiKSwgYXJndltpXSk7CisJfSBlbHNlIHsKKwkJLyogU2luZ2xlIHJlbW90ZSBvciBncm91cCAqLworCQkodm9pZCkgYWRkX3JlbW90ZV9vcl9ncm91cChhcmd2WzBdLCAmbGlzdCk7CisJCWlmIChsaXN0Lm5yID4gMSkgeworCQkJLyogTW9yZSB0aGFuIG9uZSByZW1vdGUgKi8KKwkJCWlmIChhcmdjID4gMSkKKwkJCQlkaWUoXygiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCQl9IGVsc2UgeworCQkJLyogWmVybyBvciBvbmUgcmVtb3RlcyAqLworCQkJcmVtb3RlID0gcmVtb3RlX2dldChhcmd2WzBdKTsKKwkJCXBydW5lX3RhZ3Nfb2sgPSAoYXJnYyA9PSAxKTsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJfQorCX0KKworCWlmIChyZW1vdGUpIHsKKwkJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSB8fCBoYXNfcHJvbWlzb3JfcmVtb3RlKCkpCisJCQlmZXRjaF9vbmVfc2V0dXBfcGFydGlhbChyZW1vdGUpOworCQlyZXN1bHQgPSBmZXRjaF9vbmUocmVtb3RlLCBhcmdjLCBhcmd2LCBwcnVuZV90YWdzX29rKTsKKwl9IGVsc2UgeworCQlpbnQgbWF4X2NoaWxkcmVuID0gbWF4X2pvYnM7CisKKwkJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSkKKwkJCWRpZShfKCItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSAiCisJCQkgICAgICAiY29uZmlndXJlZCBpbiBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSIpKTsKKworCQlpZiAobWF4X2NoaWxkcmVuIDwgMCkKKwkJCW1heF9jaGlsZHJlbiA9IGZldGNoX3BhcmFsbGVsX2NvbmZpZzsKKworCQkvKiBUT0RPIHNob3VsZCB0aGlzIGFsc28gZGllIGlmIHdlIGhhdmUgYSBwcmV2aW91cyBwYXJ0aWFsLWNsb25lPyAqLworCQlyZXN1bHQgPSBmZXRjaF9tdWx0aXBsZSgmbGlzdCwgbWF4X2NoaWxkcmVuKTsKKwl9CisKKwlpZiAoIXJlc3VsdCAmJiAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkYpKSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IG9wdGlvbnMgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCWludCBtYXhfY2hpbGRyZW4gPSBtYXhfam9iczsKKworCQlpZiAobWF4X2NoaWxkcmVuIDwgMCkKKwkJCW1heF9jaGlsZHJlbiA9IHN1Ym1vZHVsZV9mZXRjaF9qb2JzX2NvbmZpZzsKKwkJaWYgKG1heF9jaGlsZHJlbiA8IDApCisJCQltYXhfY2hpbGRyZW4gPSBmZXRjaF9wYXJhbGxlbF9jb25maWc7CisKKwkJYWRkX29wdGlvbnNfdG9fYXJndigmb3B0aW9ucyk7CisJCXJlc3VsdCA9IGZldGNoX3BvcHVsYXRlZF9zdWJtb2R1bGVzKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICAgICZvcHRpb25zLAorCQkJCQkJICAgIHN1Ym1vZHVsZV9wcmVmaXgsCisJCQkJCQkgICAgcmVjdXJzZV9zdWJtb2R1bGVzLAorCQkJCQkJICAgIHJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0LAorCQkJCQkJICAgIHZlcmJvc2l0eSA8IDAsCisJCQkJCQkgICAgbWF4X2NoaWxkcmVuKTsKKwkJYXJndl9hcnJheV9jbGVhcigmb3B0aW9ucyk7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCisJcHJlcGFyZV9yZXBvX3NldHRpbmdzKHRoZV9yZXBvc2l0b3J5KTsKKwlpZiAoZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoID4gMCB8fAorCSAgICAoZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoIDwgMCAmJgorCSAgICAgdGhlX3JlcG9zaXRvcnktPnNldHRpbmdzLmZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCkpIHsKKwkJaW50IGNvbW1pdF9ncmFwaF9mbGFncyA9IENPTU1JVF9HUkFQSF9XUklURV9TUExJVDsKKworCQlpZiAocHJvZ3Jlc3MpCisJCQljb21taXRfZ3JhcGhfZmxhZ3MgfD0gQ09NTUlUX0dSQVBIX1dSSVRFX1BST0dSRVNTOworCisJCXdyaXRlX2NvbW1pdF9ncmFwaF9yZWFjaGFibGUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPm9kYiwKKwkJCQkJICAgICBjb21taXRfZ3JhcGhfZmxhZ3MsCisJCQkJCSAgICAgTlVMTCk7CisJfQorCisJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKworCWlmIChlbmFibGVfYXV0b19nYykgeworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmd2X2djX2F1dG8sICJnYyIsICItLWF1dG8iLCBOVUxMKTsKKwkJaWYgKHZlcmJvc2l0eSA8IDApCisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3ZfZ2NfYXV0bywgIi0tcXVpZXQiKTsKKwkJcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLmFyZ3YsIFJVTl9HSVRfQ01EKTsKKwkJYXJndl9hcnJheV9jbGVhcigmYXJndl9nY19hdXRvKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMgYi9idWlsdGluL2ZtdC1tZXJnZS1tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzZmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMKQEAgLTAsMCArMSw3MTggQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJmbXQtbWVyZ2UtbXNnLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbXRfbWVyZ2VfbXNnX3VzYWdlW10gPSB7CisJTl8oImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHVzZV9icmFuY2hfZGVzYzsKKworaW50IGZtdF9tZXJnZV9tc2dfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKGtleSwgIm1lcmdlLmxvZyIpIHx8ICFzdHJjbXAoa2V5LCAibWVyZ2Uuc3VtbWFyeSIpKSB7CisJCWludCBpc19ib29sOworCQltZXJnZV9sb2dfY29uZmlnID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmaXNfYm9vbCk7CisJCWlmICghaXNfYm9vbCAmJiBtZXJnZV9sb2dfY29uZmlnIDwgMCkKKwkJCXJldHVybiBlcnJvcigiJXM6IG5lZ2F0aXZlIGxlbmd0aCAlcyIsIGtleSwgdmFsdWUpOworCQlpZiAoaXNfYm9vbCAmJiBtZXJnZV9sb2dfY29uZmlnKQorCQkJbWVyZ2VfbG9nX2NvbmZpZyA9IERFRkFVTFRfTUVSR0VfTE9HX0xFTjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAibWVyZ2UuYnJhbmNoZGVzYyIpKSB7CisJCXVzZV9icmFuY2hfZGVzYyA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGtleSwgdmFsdWUsIGNiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIG1lcmdlIGRhdGEgcGVyIHJlcG9zaXRvcnkgd2hlcmUgdGhlIG1lcmdlZCB0aXBzIGNhbWUgZnJvbSAqLworc3RydWN0IHNyY19kYXRhIHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoLCB0YWcsIHJfYnJhbmNoLCBnZW5lcmljOworCWludCBoZWFkX3N0YXR1czsKK307CisKK3N0cnVjdCBvcmlnaW5fZGF0YSB7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJdW5zaWduZWQgaXNfbG9jYWxfYnJhbmNoOjE7Cit9OworCitzdGF0aWMgdm9pZCBpbml0X3NyY19kYXRhKHN0cnVjdCBzcmNfZGF0YSAqZGF0YSkKK3sKKwlkYXRhLT5icmFuY2guc3RyZHVwX3N0cmluZ3MgPSAxOworCWRhdGEtPnRhZy5zdHJkdXBfc3RyaW5ncyA9IDE7CisJZGF0YS0+cl9icmFuY2guc3RyZHVwX3N0cmluZ3MgPSAxOworCWRhdGEtPmdlbmVyaWMuc3RyZHVwX3N0cmluZ3MgPSAxOworfQorCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IHNyY3MgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3JpZ2lucyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCitzdHJ1Y3QgbWVyZ2VfcGFyZW50cyB7CisJaW50IGFsbG9jLCBucjsKKwlzdHJ1Y3QgbWVyZ2VfcGFyZW50IHsKKwkJc3RydWN0IG9iamVjdF9pZCBnaXZlbjsKKwkJc3RydWN0IG9iamVjdF9pZCBjb21taXQ7CisJCXVuc2lnbmVkIGNoYXIgdXNlZDsKKwl9ICppdGVtOworfTsKKworLyoKKyAqIEkga25vdywgSSBrbm93LCB0aGlzIGlzIGluZWZmaWNpZW50LCBidXQgeW91IHdvbid0IGJlIHB1bGxpbmcgYW5kIG1lcmdpbmcKKyAqIGh1bmRyZWRzIG9mIGhlYWRzIGF0IGEgdGltZSBhbnl3YXkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfcGFyZW50ICpmaW5kX21lcmdlX3BhcmVudChzdHJ1Y3QgbWVyZ2VfcGFyZW50cyAqdGFibGUsCisJCQkJCSAgICAgIHN0cnVjdCBvYmplY3RfaWQgKmdpdmVuLAorCQkJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5ucjsgaSsrKSB7CisJCWlmIChnaXZlbiAmJiAhb2lkZXEoJnRhYmxlLT5pdGVtW2ldLmdpdmVuLCBnaXZlbikpCisJCQljb250aW51ZTsKKwkJaWYgKGNvbW1pdCAmJiAhb2lkZXEoJnRhYmxlLT5pdGVtW2ldLmNvbW1pdCwgY29tbWl0KSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gJnRhYmxlLT5pdGVtW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYWRkX21lcmdlX3BhcmVudChzdHJ1Y3QgbWVyZ2VfcGFyZW50cyAqdGFibGUsCisJCQkgICAgIHN0cnVjdCBvYmplY3RfaWQgKmdpdmVuLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXQpCit7CisJaWYgKHRhYmxlLT5uciAmJiBmaW5kX21lcmdlX3BhcmVudCh0YWJsZSwgZ2l2ZW4sIGNvbW1pdCkpCisJCXJldHVybjsKKwlBTExPQ19HUk9XKHRhYmxlLT5pdGVtLCB0YWJsZS0+bnIgKyAxLCB0YWJsZS0+YWxsb2MpOworCW9pZGNweSgmdGFibGUtPml0ZW1bdGFibGUtPm5yXS5naXZlbiwgZ2l2ZW4pOworCW9pZGNweSgmdGFibGUtPml0ZW1bdGFibGUtPm5yXS5jb21taXQsIGNvbW1pdCk7CisJdGFibGUtPml0ZW1bdGFibGUtPm5yXS51c2VkID0gMDsKKwl0YWJsZS0+bnIrKzsKK30KKworc3RhdGljIGludCBoYW5kbGVfbGluZShjaGFyICpsaW5lLCBzdHJ1Y3QgbWVyZ2VfcGFyZW50cyAqbWVyZ2VfcGFyZW50cykKK3sKKwlpbnQgaSwgbGVuID0gc3RybGVuKGxpbmUpOworCXN0cnVjdCBvcmlnaW5fZGF0YSAqb3JpZ2luX2RhdGE7CisJY2hhciAqc3JjOworCWNvbnN0IGNoYXIgKm9yaWdpbiwgKnRhZ19uYW1lOworCXN0cnVjdCBzcmNfZGF0YSAqc3JjX2RhdGE7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IHB1bGxpbmdfaGVhZCA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWlmIChsZW4gPCBoZXhzeiArIDMgfHwgbGluZVtoZXhzel0gIT0gJ1x0JykKKwkJcmV0dXJuIDE7CisKKwlpZiAoc3RhcnRzX3dpdGgobGluZSArIGhleHN6ICsgMSwgIm5vdC1mb3ItbWVyZ2UiKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGluZVtoZXhzeiArIDFdICE9ICdcdCcpCisJCXJldHVybiAyOworCisJaSA9IGdldF9vaWRfaGV4KGxpbmUsICZvaWQpOworCWlmIChpKQorCQlyZXR1cm4gMzsKKworCWlmICghZmluZF9tZXJnZV9wYXJlbnQobWVyZ2VfcGFyZW50cywgJm9pZCwgTlVMTCkpCisJCXJldHVybiAwOyAvKiBzdWJzdW1lZCBieSBvdGhlciBwYXJlbnRzICovCisKKwlvcmlnaW5fZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvcmlnaW5fZGF0YSkpOworCW9pZGNweSgmb3JpZ2luX2RhdGEtPm9pZCwgJm9pZCk7CisKKwlpZiAobGluZVtsZW4gLSAxXSA9PSAnXG4nKQorCQlsaW5lW2xlbiAtIDFdID0gMDsKKwlsaW5lICs9IGhleHN6ICsgMjsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgbGluZSBwb2ludHMgYXQgdGhlIGJlZ2lubmluZyBvZiBjb21tZW50IGUuZy4KKwkgKiAiYnJhbmNoICdmcm90eicgb2YgZ2l0Oi8vdGhhdC9yZXBvc2l0b3J5LmdpdCIuCisJICogRmluZCB0aGUgcmVwb3NpdG9yeSBuYW1lIGFuZCBwb2ludCBpdCB3aXRoIHNyYy4KKwkgKi8KKwlzcmMgPSBzdHJzdHIobGluZSwgIiBvZiAiKTsKKwlpZiAoc3JjKSB7CisJCSpzcmMgPSAwOworCQlzcmMgKz0gNDsKKwkJcHVsbGluZ19oZWFkID0gMDsKKwl9IGVsc2UgeworCQlzcmMgPSBsaW5lOworCQlwdWxsaW5nX2hlYWQgPSAxOworCX0KKworCWl0ZW0gPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJnNyY3MsIHNyYyk7CisJaWYgKCFpdGVtKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY3MsIHNyYyk7CisJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3JjX2RhdGEpKTsKKwkJaW5pdF9zcmNfZGF0YShpdGVtLT51dGlsKTsKKwl9CisJc3JjX2RhdGEgPSBpdGVtLT51dGlsOworCisJaWYgKHB1bGxpbmdfaGVhZCkgeworCQlvcmlnaW4gPSBzcmM7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAxOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgobGluZSwgImJyYW5jaCAiLCAmb3JpZ2luKSkgeworCQlvcmlnaW5fZGF0YS0+aXNfbG9jYWxfYnJhbmNoID0gMTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+YnJhbmNoLCBvcmlnaW4pOworCQlzcmNfZGF0YS0+aGVhZF9zdGF0dXMgfD0gMjsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGxpbmUsICJ0YWcgIiwgJnRhZ19uYW1lKSkgeworCQlvcmlnaW4gPSBsaW5lOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY19kYXRhLT50YWcsIHRhZ19uYW1lKTsKKwkJc3JjX2RhdGEtPmhlYWRfc3RhdHVzIHw9IDI7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChsaW5lLCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAiLCAmb3JpZ2luKSkgeworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY19kYXRhLT5yX2JyYW5jaCwgb3JpZ2luKTsKKwkJc3JjX2RhdGEtPmhlYWRfc3RhdHVzIHw9IDI7CisJfSBlbHNlIHsKKwkJb3JpZ2luID0gc3JjOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY19kYXRhLT5nZW5lcmljLCBsaW5lKTsKKwkJc3JjX2RhdGEtPmhlYWRfc3RhdHVzIHw9IDI7CisJfQorCisJaWYgKCFzdHJjbXAoIi4iLCBzcmMpIHx8ICFzdHJjbXAoc3JjLCBvcmlnaW4pKSB7CisJCWludCBsZW4gPSBzdHJsZW4ob3JpZ2luKTsKKwkJaWYgKG9yaWdpblswXSA9PSAnXCcnICYmIG9yaWdpbltsZW4gLSAxXSA9PSAnXCcnKQorCQkJb3JpZ2luID0geG1lbWR1cHoob3JpZ2luICsgMSwgbGVuIC0gMik7CisJfSBlbHNlCisJCW9yaWdpbiA9IHhzdHJmbXQoIiVzIG9mICVzIiwgb3JpZ2luLCBzcmMpOworCWlmIChzdHJjbXAoIi4iLCBzcmMpKQorCQlvcmlnaW5fZGF0YS0+aXNfbG9jYWxfYnJhbmNoID0gMDsKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJm9yaWdpbnMsIG9yaWdpbiktPnV0aWwgPSBvcmlnaW5fZGF0YTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfam9pbmVkKGNvbnN0IGNoYXIgKnNpbmd1bGFyLCBjb25zdCBjaGFyICpwbHVyYWwsCisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWlmIChsaXN0LT5uciA9PSAwKQorCQlyZXR1cm47CisJaWYgKGxpc3QtPm5yID09IDEpIHsKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMlcyIsIHNpbmd1bGFyLCBsaXN0LT5pdGVtc1swXS5zdHJpbmcpOworCX0gZWxzZSB7CisJCWludCBpOworCQlzdHJidWZfYWRkc3RyKG91dCwgcGx1cmFsKTsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yIC0gMTsgaSsrKQorCQkJc3RyYnVmX2FkZGYob3V0LCAiJXMlcyIsIGkgPiAwID8gIiwgIiA6ICIiLAorCQkJCSAgICBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQlzdHJidWZfYWRkZihvdXQsICIgYW5kICVzIiwgbGlzdC0+aXRlbXNbbGlzdC0+bnIgLSAxXS5zdHJpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQgYWRkX2JyYW5jaF9kZXNjKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2MgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcmVhZF9icmFuY2hfZGVzYygmZGVzYywgbmFtZSkpIHsKKwkJY29uc3QgY2hhciAqYnAgPSBkZXNjLmJ1ZjsKKwkJd2hpbGUgKCpicCkgeworCQkJY29uc3QgY2hhciAqZXAgPSBzdHJjaHJudWwoYnAsICdcbicpOworCQkJaWYgKCplcCkKKwkJCQllcCsrOworCQkJc3RyYnVmX2FkZGYob3V0LCAiICA6ICUuKnMiLCAoaW50KShlcCAtIGJwKSwgYnApOworCQkJYnAgPSBlcDsKKwkJfQorCQlzdHJidWZfY29tcGxldGVfbGluZShvdXQpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZGVzYyk7Cit9CisKKyNkZWZpbmUgdXRpbF9hc19pbnRlZ3JhbChlbGVtKSAoKGludHB0cl90KSgoZWxlbSktPnV0aWwpKQorCitzdGF0aWMgdm9pZCByZWNvcmRfcGVyc29uX2Zyb21fYnVmKGludCB3aGljaCwgc3RydWN0IHN0cmluZ19saXN0ICpwZW9wbGUsCisJCQkJICAgY29uc3QgY2hhciAqYnVmZmVyKQoreworCWNoYXIgKm5hbWVfYnVmLCAqbmFtZSwgKm5hbWVfZW5kOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICplbGVtOworCWNvbnN0IGNoYXIgKmZpZWxkOworCisJZmllbGQgPSAod2hpY2ggPT0gJ2EnKSA/ICJcbmF1dGhvciAiIDogIlxuY29tbWl0dGVyICI7CisJbmFtZSA9IHN0cnN0cihidWZmZXIsIGZpZWxkKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybjsKKwluYW1lICs9IHN0cmxlbihmaWVsZCk7CisJbmFtZV9lbmQgPSBzdHJjaHJudWwobmFtZSwgJzwnKTsKKwlpZiAoKm5hbWVfZW5kKQorCQluYW1lX2VuZC0tOworCXdoaWxlIChpc3NwYWNlKCpuYW1lX2VuZCkgJiYgbmFtZSA8PSBuYW1lX2VuZCkKKwkJbmFtZV9lbmQtLTsKKwlpZiAobmFtZV9lbmQgPCBuYW1lKQorCQlyZXR1cm47CisJbmFtZV9idWYgPSB4bWVtZHVweihuYW1lLCBuYW1lX2VuZCAtIG5hbWUgKyAxKTsKKworCWVsZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAocGVvcGxlLCBuYW1lX2J1Zik7CisJaWYgKCFlbGVtKSB7CisJCWVsZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQocGVvcGxlLCBuYW1lX2J1Zik7CisJCWVsZW0tPnV0aWwgPSAodm9pZCAqKTA7CisJfQorCWVsZW0tPnV0aWwgPSAodm9pZCopKHV0aWxfYXNfaW50ZWdyYWwoZWxlbSkgKyAxKTsKKwlmcmVlKG5hbWVfYnVmKTsKK30KKworCitzdGF0aWMgdm9pZCByZWNvcmRfcGVyc29uKGludCB3aGljaCwgc3RydWN0IHN0cmluZ19saXN0ICpwZW9wbGUsCisJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCBjaGFyICpidWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpOworCXJlY29yZF9wZXJzb25fZnJvbV9idWYod2hpY2gsIHBlb3BsZSwgYnVmZmVyKTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgYnVmZmVyKTsKK30KKworc3RhdGljIGludCBjbXBfc3RyaW5nX2xpc3RfdXRpbF9hc19pbnRlZ3JhbChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmEgPSBhXywgKmIgPSBiXzsKKwlyZXR1cm4gdXRpbF9hc19pbnRlZ3JhbChiKSAtIHV0aWxfYXNfaW50ZWdyYWwoYSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW9wbGVfY291bnQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBlb3BsZSkKK3sKKwlpZiAocGVvcGxlLT5uciA9PSAxKQorCQlzdHJidWZfYWRkc3RyKG91dCwgcGVvcGxlLT5pdGVtc1swXS5zdHJpbmcpOworCWVsc2UgaWYgKHBlb3BsZS0+bnIgPT0gMikKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMgKCVkKSBhbmQgJXMgKCVkKSIsCisJCQkgICAgcGVvcGxlLT5pdGVtc1swXS5zdHJpbmcsCisJCQkgICAgKGludCl1dGlsX2FzX2ludGVncmFsKCZwZW9wbGUtPml0ZW1zWzBdKSwKKwkJCSAgICBwZW9wbGUtPml0ZW1zWzFdLnN0cmluZywKKwkJCSAgICAoaW50KXV0aWxfYXNfaW50ZWdyYWwoJnBlb3BsZS0+aXRlbXNbMV0pKTsKKwllbHNlIGlmIChwZW9wbGUtPm5yKQorCQlzdHJidWZfYWRkZihvdXQsICIlcyAoJWQpIGFuZCBvdGhlcnMiLAorCQkJICAgIHBlb3BsZS0+aXRlbXNbMF0uc3RyaW5nLAorCQkJICAgIChpbnQpdXRpbF9hc19pbnRlZ3JhbCgmcGVvcGxlLT5pdGVtc1swXSkpOworfQorCitzdGF0aWMgdm9pZCBjcmVkaXRfcGVvcGxlKHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCSAgc3RydWN0IHN0cmluZ19saXN0ICp0aGVtLAorCQkJICBpbnQga2luZCkKK3sKKwljb25zdCBjaGFyICpsYWJlbDsKKwljb25zdCBjaGFyICptZTsKKworCWlmIChraW5kID09ICdhJykgeworCQlsYWJlbCA9ICJCeSI7CisJCW1lID0gZ2l0X2F1dGhvcl9pbmZvKElERU5UX05PX0RBVEUpOworCX0gZWxzZSB7CisJCWxhYmVsID0gIlZpYSI7CisJCW1lID0gZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX05PX0RBVEUpOworCX0KKworCWlmICghdGhlbS0+bnIgfHwKKwkgICAgKHRoZW0tPm5yID09IDEgJiYKKwkgICAgIG1lICYmCisJICAgICBza2lwX3ByZWZpeChtZSwgdGhlbS0+aXRlbXMtPnN0cmluZywgJm1lKSAmJgorCSAgICAgc3RhcnRzX3dpdGgobWUsICIgPCIpKSkKKwkJcmV0dXJuOworCXN0cmJ1Zl9hZGRmKG91dCwgIlxuJWMgJXMgIiwgY29tbWVudF9saW5lX2NoYXIsIGxhYmVsKTsKKwlhZGRfcGVvcGxlX2NvdW50KG91dCwgdGhlbSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW9wbGVfaW5mbyhzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICphdXRob3JzLAorCQkJICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqY29tbWl0dGVycykKK3sKKwlRU09SVChhdXRob3JzLT5pdGVtcywgYXV0aG9ycy0+bnIsCisJICAgICAgY21wX3N0cmluZ19saXN0X3V0aWxfYXNfaW50ZWdyYWwpOworCVFTT1JUKGNvbW1pdHRlcnMtPml0ZW1zLCBjb21taXR0ZXJzLT5uciwKKwkgICAgICBjbXBfc3RyaW5nX2xpc3RfdXRpbF9hc19pbnRlZ3JhbCk7CisKKwljcmVkaXRfcGVvcGxlKG91dCwgYXV0aG9ycywgJ2EnKTsKKwljcmVkaXRfcGVvcGxlKG91dCwgY29tbWl0dGVycywgJ2MnKTsKK30KKworc3RhdGljIHZvaWQgc2hvcnRsb2coY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICBzdHJ1Y3Qgb3JpZ2luX2RhdGEgKm9yaWdpbl9kYXRhLAorCQkgICAgIHN0cnVjdCBjb21taXQgKmhlYWQsCisJCSAgICAgc3RydWN0IHJldl9pbmZvICpyZXYsCisJCSAgICAgc3RydWN0IGZtdF9tZXJnZV9tc2dfb3B0cyAqb3B0cywKKwkJICAgICBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJaW50IGksIGNvdW50ID0gMDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IG9iamVjdCAqYnJhbmNoOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzdWJqZWN0cyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBhdXRob3JzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IGNvbW1pdHRlcnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlpbnQgZmxhZ3MgPSBVTklOVEVSRVNUSU5HIHwgVFJFRVNBTUUgfCBTRUVOIHwgU0hPV04gfCBBRERFRDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJm9yaWdpbl9kYXRhLT5vaWQ7CisJaW50IGxpbWl0ID0gb3B0cy0+c2hvcnRsb2dfbGVuOworCisJYnJhbmNoID0gZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LCBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCksCisJCQkgICBvaWRfdG9faGV4KG9pZCksCisJCQkgICB0aGVfaGFzaF9hbGdvLT5oZXhzeik7CisJaWYgKCFicmFuY2ggfHwgYnJhbmNoLT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybjsKKworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCByZXYsIE5VTEwpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXYsIGJyYW5jaCwgbmFtZSk7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgJmhlYWQtPm9iamVjdCwgIl5IRUFEIik7CisJaGVhZC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXYpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkgIT0gTlVMTCkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCisJCWlmIChjb21taXQtPnBhcmVudHMgJiYgY29tbWl0LT5wYXJlbnRzLT5uZXh0KSB7CisJCQkvKiBkbyBub3QgbGlzdCBhIG1lcmdlIGJ1dCBjb3VudCBjb21taXR0ZXIgKi8KKwkJCWlmIChvcHRzLT5jcmVkaXRfcGVvcGxlKQorCQkJCXJlY29yZF9wZXJzb24oJ2MnLCAmY29tbWl0dGVycywgY29tbWl0KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghY291bnQgJiYgb3B0cy0+Y3JlZGl0X3Blb3BsZSkKKwkJCS8qIHRoZSAndGlwJyBjb21taXR0ZXIgKi8KKwkJCXJlY29yZF9wZXJzb24oJ2MnLCAmY29tbWl0dGVycywgY29tbWl0KTsKKwkJaWYgKG9wdHMtPmNyZWRpdF9wZW9wbGUpCisJCQlyZWNvcmRfcGVyc29uKCdhJywgJmF1dGhvcnMsIGNvbW1pdCk7CisJCWNvdW50Kys7CisJCWlmIChzdWJqZWN0cy5uciA+IGxpbWl0KQorCQkJY29udGludWU7CisKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiVzIiwgJnNiLCAmY3R4KTsKKwkJc3RyYnVmX2x0cmltKCZzYik7CisKKwkJaWYgKCFzYi5sZW4pCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN1YmplY3RzLAorCQkJCQkgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKCZzdWJqZWN0cywKKwkJCQkJCSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCkpOworCX0KKworCWlmIChvcHRzLT5jcmVkaXRfcGVvcGxlKQorCQlhZGRfcGVvcGxlX2luZm8ob3V0LCAmYXV0aG9ycywgJmNvbW1pdHRlcnMpOworCWlmIChjb3VudCA+IGxpbWl0KQorCQlzdHJidWZfYWRkZihvdXQsICJcbiogJXM6ICglZCBjb21taXRzKVxuIiwgbmFtZSwgY291bnQpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYob3V0LCAiXG4qICVzOlxuIiwgbmFtZSk7CisKKwlpZiAob3JpZ2luX2RhdGEtPmlzX2xvY2FsX2JyYW5jaCAmJiB1c2VfYnJhbmNoX2Rlc2MpCisJCWFkZF9icmFuY2hfZGVzYyhvdXQsIG5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IHN1YmplY3RzLm5yOyBpKyspCisJCWlmIChpID49IGxpbWl0KQorCQkJc3RyYnVmX2FkZHN0cihvdXQsICIgIC4uLlxuIik7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiAgJXNcbiIsIHN1YmplY3RzLml0ZW1zW2ldLnN0cmluZyk7CisKKwljbGVhcl9jb21taXRfbWFya3MoKHN0cnVjdCBjb21taXQgKilicmFuY2gsIGZsYWdzKTsKKwljbGVhcl9jb21taXRfbWFya3MoaGVhZCwgZmxhZ3MpOworCWZyZWVfY29tbWl0X2xpc3QocmV2LT5jb21taXRzKTsKKwlyZXYtPmNvbW1pdHMgPSBOVUxMOworCXJldi0+cGVuZGluZy5uciA9IDA7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmYXV0aG9ycywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmNvbW1pdHRlcnMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdWJqZWN0cywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGZtdF9tZXJnZV9tc2dfdGl0bGUoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCWNvbnN0IGNoYXIgKmN1cnJlbnRfYnJhbmNoKQoreworCWludCBpID0gMDsKKwljaGFyICpzZXAgPSAiIjsKKworCXN0cmJ1Zl9hZGRzdHIob3V0LCAiTWVyZ2UgIik7CisJZm9yIChpID0gMDsgaSA8IHNyY3MubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3JjX2RhdGEgKnNyY19kYXRhID0gc3Jjcy5pdGVtc1tpXS51dGlsOworCQljb25zdCBjaGFyICpzdWJzZXAgPSAiIjsKKworCQlzdHJidWZfYWRkc3RyKG91dCwgc2VwKTsKKwkJc2VwID0gIjsgIjsKKworCQlpZiAoc3JjX2RhdGEtPmhlYWRfc3RhdHVzID09IDEpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzcmNzLml0ZW1zW2ldLnN0cmluZyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3JjX2RhdGEtPmhlYWRfc3RhdHVzID09IDMpIHsKKwkJCXN1YnNlcCA9ICIsICI7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgIkhFQUQiKTsKKwkJfQorCQlpZiAoc3JjX2RhdGEtPmJyYW5jaC5ucikgeworCQkJc3RyYnVmX2FkZHN0cihvdXQsIHN1YnNlcCk7CisJCQlzdWJzZXAgPSAiLCAiOworCQkJcHJpbnRfam9pbmVkKCJicmFuY2ggIiwgImJyYW5jaGVzICIsICZzcmNfZGF0YS0+YnJhbmNoLAorCQkJCQlvdXQpOworCQl9CisJCWlmIChzcmNfZGF0YS0+cl9icmFuY2gubnIpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzdWJzZXApOworCQkJc3Vic2VwID0gIiwgIjsKKwkJCXByaW50X2pvaW5lZCgicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAiLCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzICIsCisJCQkJCSZzcmNfZGF0YS0+cl9icmFuY2gsIG91dCk7CisJCX0KKwkJaWYgKHNyY19kYXRhLT50YWcubnIpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzdWJzZXApOworCQkJc3Vic2VwID0gIiwgIjsKKwkJCXByaW50X2pvaW5lZCgidGFnICIsICJ0YWdzICIsICZzcmNfZGF0YS0+dGFnLCBvdXQpOworCQl9CisJCWlmIChzcmNfZGF0YS0+Z2VuZXJpYy5ucikgeworCQkJc3RyYnVmX2FkZHN0cihvdXQsIHN1YnNlcCk7CisJCQlwcmludF9qb2luZWQoImNvbW1pdCAiLCAiY29tbWl0cyAiLCAmc3JjX2RhdGEtPmdlbmVyaWMsCisJCQkJCW91dCk7CisJCX0KKwkJaWYgKHN0cmNtcCgiLiIsIHNyY3MuaXRlbXNbaV0uc3RyaW5nKSkKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiBvZiAlcyIsIHNyY3MuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwlpZiAoIXN0cmNtcCgibWFzdGVyIiwgY3VycmVudF9icmFuY2gpKQorCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKG91dCwgIiBpbnRvICVzXG4iLCBjdXJyZW50X2JyYW5jaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZtdF90YWdfc2lnbmF0dXJlKHN0cnVjdCBzdHJidWYgKnRhZ2J1ZiwKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKnNpZywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWNvbnN0IGNoYXIgKnRhZ19ib2R5ID0gc3Ryc3RyKGJ1ZiwgIlxuXG4iKTsKKwlpZiAodGFnX2JvZHkpIHsKKwkJdGFnX2JvZHkgKz0gMjsKKwkJc3RyYnVmX2FkZCh0YWdidWYsIHRhZ19ib2R5LCBidWYgKyBsZW4gLSB0YWdfYm9keSk7CisJfQorCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKHRhZ2J1Zik7CisJaWYgKHNpZy0+bGVuKSB7CisJCXN0cmJ1Zl9hZGRjaCh0YWdidWYsICdcbicpOworCQlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcyh0YWdidWYsIHNpZy0+YnVmLCBzaWctPmxlbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbXRfbWVyZ2VfbXNnX3NpZ3Moc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWludCBpLCB0YWdfbnVtYmVyID0gMCwgZmlyc3RfdGFnID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHRhZ2J1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yIChpID0gMDsgaSA8IG9yaWdpbnMubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBvcmlnaW5zLml0ZW1zW2ldLnV0aWw7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplLCBsZW47CisJCWNoYXIgKmJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCQlzdHJ1Y3Qgc3RyYnVmIHNpZyA9IFNUUkJVRl9JTklUOworCisJCWlmICghYnVmIHx8IHR5cGUgIT0gT0JKX1RBRykKKwkJCWdvdG8gbmV4dDsKKwkJbGVuID0gcGFyc2Vfc2lnbmF0dXJlKGJ1Ziwgc2l6ZSk7CisKKwkJaWYgKHNpemUgPT0gbGVuKQorCQkJOyAvKiBtZXJlbHkgYW5ub3RhdGVkICovCisJCWVsc2UgaWYgKHZlcmlmeV9zaWduZWRfYnVmZmVyKGJ1ZiwgbGVuLCBidWYgKyBsZW4sIHNpemUgLSBsZW4sICZzaWcsIE5VTEwpKSB7CisJCQlpZiAoIXNpZy5sZW4pCisJCQkJc3RyYnVmX2FkZHN0cigmc2lnLCAiZ3BnIHZlcmlmaWNhdGlvbiBmYWlsZWQuXG4iKTsKKwkJfQorCisJCWlmICghdGFnX251bWJlcisrKSB7CisJCQlmbXRfdGFnX3NpZ25hdHVyZSgmdGFnYnVmLCAmc2lnLCBidWYsIGxlbik7CisJCQlmaXJzdF90YWcgPSBpOworCQl9IGVsc2UgeworCQkJaWYgKHRhZ19udW1iZXIgPT0gMikgeworCQkJCXN0cnVjdCBzdHJidWYgdGFnbGluZSA9IFNUUkJVRl9JTklUOworCQkJCXN0cmJ1Zl9hZGRjaCgmdGFnbGluZSwgJ1xuJyk7CisJCQkJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoJnRhZ2xpbmUsCisJCQkJCQlvcmlnaW5zLml0ZW1zW2ZpcnN0X3RhZ10uc3RyaW5nLAorCQkJCQkJc3RybGVuKG9yaWdpbnMuaXRlbXNbZmlyc3RfdGFnXS5zdHJpbmcpKTsKKwkJCQlzdHJidWZfaW5zZXJ0KCZ0YWdidWYsIDAsIHRhZ2xpbmUuYnVmLAorCQkJCQkgICAgICB0YWdsaW5lLmxlbik7CisJCQkJc3RyYnVmX3JlbGVhc2UoJnRhZ2xpbmUpOworCQkJfQorCQkJc3RyYnVmX2FkZGNoKCZ0YWdidWYsICdcbicpOworCQkJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoJnRhZ2J1ZiwKKwkJCQkJb3JpZ2lucy5pdGVtc1tpXS5zdHJpbmcsCisJCQkJCXN0cmxlbihvcmlnaW5zLml0ZW1zW2ldLnN0cmluZykpOworCQkJZm10X3RhZ19zaWduYXR1cmUoJnRhZ2J1ZiwgJnNpZywgYnVmLCBsZW4pOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzaWcpOworCW5leHQ6CisJCWZyZWUoYnVmKTsKKwl9CisJaWYgKHRhZ2J1Zi5sZW4pIHsKKwkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJCXN0cmJ1Zl9hZGRidWYob3V0LCAmdGFnYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnRhZ2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfbWVyZ2VfcGFyZW50cyhzdHJ1Y3QgbWVyZ2VfcGFyZW50cyAqcmVzdWx0LAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKmluLCBzdHJ1Y3Qgb2JqZWN0X2lkICpoZWFkKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdDsKKwlpbnQgcG9zID0gMCwgaSwgajsKKworCXBhcmVudHMgPSBOVUxMOworCXdoaWxlIChwb3MgPCBpbi0+bGVuKSB7CisJCWludCBsZW47CisJCWNoYXIgKnAgPSBpbi0+YnVmICsgcG9zOworCQljaGFyICpuZXdsaW5lID0gc3RyY2hyKHAsICdcbicpOworCQljb25zdCBjaGFyICpxOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50OworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwkJbGVuID0gbmV3bGluZSA/IG5ld2xpbmUgLSBwIDogc3RybGVuKHApOworCQlwb3MgKz0gbGVuICsgISFuZXdsaW5lOworCisJCWlmIChwYXJzZV9vaWRfaGV4KHAsICZvaWQsICZxKSB8fAorCQkgICAgcVswXSAhPSAnXHQnIHx8CisJCSAgICBxWzFdICE9ICdcdCcpCisJCQljb250aW51ZTsgLyogc2tpcCBub3QtZm9yLW1lcmdlICovCisJCS8qCisJCSAqIERvIG5vdCB1c2UgZ2V0X21lcmdlX3BhcmVudCgpIGhlcmU7IHdlIGRvIG5vdCBoYXZlCisJCSAqICJuYW1lIiBoZXJlIGFuZCB3ZSBkbyBub3Qgd2FudCB0byBjb250YW1pbmF0ZSBpdHMKKwkJICogdXRpbCBmaWVsZCB5ZXQuCisJCSAqLworCQlvYmogPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpOworCQlwYXJlbnQgPSAoc3RydWN0IGNvbW1pdCAqKXBlZWxfdG9fdHlwZShOVUxMLCAwLCBvYmosIE9CSl9DT01NSVQpOworCQlpZiAoIXBhcmVudCkKKwkJCWNvbnRpbnVlOworCQljb21taXRfbGlzdF9pbnNlcnQocGFyZW50LCAmcGFyZW50cyk7CisJCWFkZF9tZXJnZV9wYXJlbnQocmVzdWx0LCAmb2JqLT5vaWQsICZwYXJlbnQtPm9iamVjdC5vaWQpOworCX0KKwloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksIGhlYWQpOworCWlmIChoZWFkX2NvbW1pdCkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCAmcGFyZW50cyk7CisJcmVkdWNlX2hlYWRzX3JlcGxhY2UoJnBhcmVudHMpOworCisJd2hpbGUgKHBhcmVudHMpIHsKKwkJc3RydWN0IGNvbW1pdCAqY21pdCA9IHBvcF9jb21taXQoJnBhcmVudHMpOworCQlmb3IgKGkgPSAwOyBpIDwgcmVzdWx0LT5ucjsgaSsrKQorCQkJaWYgKG9pZGVxKCZyZXN1bHQtPml0ZW1baV0uY29tbWl0LCAmY21pdC0+b2JqZWN0Lm9pZCkpCisJCQkJcmVzdWx0LT5pdGVtW2ldLnVzZWQgPSAxOworCX0KKworCWZvciAoaSA9IGogPSAwOyBpIDwgcmVzdWx0LT5ucjsgaSsrKSB7CisJCWlmIChyZXN1bHQtPml0ZW1baV0udXNlZCkgeworCQkJaWYgKGkgIT0gaikKKwkJCQlyZXN1bHQtPml0ZW1bal0gPSByZXN1bHQtPml0ZW1baV07CisJCQlqKys7CisJCX0KKwl9CisJcmVzdWx0LT5uciA9IGo7Cit9CisKK2ludCBmbXRfbWVyZ2VfbXNnKHN0cnVjdCBzdHJidWYgKmluLCBzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCSAgc3RydWN0IGZtdF9tZXJnZV9tc2dfb3B0cyAqb3B0cykKK3sKKwlpbnQgaSA9IDAsIHBvcyA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKwljb25zdCBjaGFyICpjdXJyZW50X2JyYW5jaDsKKwl2b2lkICpjdXJyZW50X2JyYW5jaF90b19mcmVlOworCXN0cnVjdCBtZXJnZV9wYXJlbnRzIG1lcmdlX3BhcmVudHM7CisKKwltZW1zZXQoJm1lcmdlX3BhcmVudHMsIDAsIHNpemVvZihtZXJnZV9wYXJlbnRzKSk7CisKKwkvKiBnZXQgY3VycmVudCBicmFuY2ggKi8KKwljdXJyZW50X2JyYW5jaCA9IGN1cnJlbnRfYnJhbmNoX3RvX2ZyZWUgPQorCQlyZXNvbHZlX3JlZmR1cCgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsICZoZWFkX29pZCwgTlVMTCk7CisJaWYgKCFjdXJyZW50X2JyYW5jaCkKKwkJZGllKCJObyBjdXJyZW50IGJyYW5jaCIpOworCWlmIChzdGFydHNfd2l0aChjdXJyZW50X2JyYW5jaCwgInJlZnMvaGVhZHMvIikpCisJCWN1cnJlbnRfYnJhbmNoICs9IDExOworCisJZmluZF9tZXJnZV9wYXJlbnRzKCZtZXJnZV9wYXJlbnRzLCBpbiwgJmhlYWRfb2lkKTsKKworCS8qIGdldCBhIGxpbmUgKi8KKwl3aGlsZSAocG9zIDwgaW4tPmxlbikgeworCQlpbnQgbGVuOworCQljaGFyICpuZXdsaW5lLCAqcCA9IGluLT5idWYgKyBwb3M7CisKKwkJbmV3bGluZSA9IHN0cmNocihwLCAnXG4nKTsKKwkJbGVuID0gbmV3bGluZSA/IG5ld2xpbmUgLSBwIDogc3RybGVuKHApOworCQlwb3MgKz0gbGVuICsgISFuZXdsaW5lOworCQlpKys7CisJCXBbbGVuXSA9IDA7CisJCWlmIChoYW5kbGVfbGluZShwLCAmbWVyZ2VfcGFyZW50cykpCisJCQlkaWUoImVycm9yIGluIGxpbmUgJWQ6ICUuKnMiLCBpLCBsZW4sIHApOworCX0KKworCWlmIChvcHRzLT5hZGRfdGl0bGUgJiYgc3Jjcy5ucikKKwkJZm10X21lcmdlX21zZ190aXRsZShvdXQsIGN1cnJlbnRfYnJhbmNoKTsKKworCWlmIChvcmlnaW5zLm5yKQorCQlmbXRfbWVyZ2VfbXNnX3NpZ3Mob3V0KTsKKworCWlmIChvcHRzLT5zaG9ydGxvZ19sZW4pIHsKKwkJc3RydWN0IGNvbW1pdCAqaGVhZDsKKwkJc3RydWN0IHJldl9pbmZvIHJldjsKKworCQloZWFkID0gbG9va3VwX2NvbW1pdF9vcl9kaWUoJmhlYWRfb2lkLCAiSEVBRCIpOworCQlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBOVUxMKTsKKwkJcmV2LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9PTkVMSU5FOworCQlyZXYuaWdub3JlX21lcmdlcyA9IDE7CisJCXJldi5saW1pdGVkID0gMTsKKworCQlzdHJidWZfY29tcGxldGVfbGluZShvdXQpOworCisJCWZvciAoaSA9IDA7IGkgPCBvcmlnaW5zLm5yOyBpKyspCisJCQlzaG9ydGxvZyhvcmlnaW5zLml0ZW1zW2ldLnN0cmluZywKKwkJCQkgb3JpZ2lucy5pdGVtc1tpXS51dGlsLAorCQkJCSBoZWFkLCAmcmV2LCBvcHRzLCBvdXQpOworCX0KKworCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKG91dCk7CisJZnJlZShjdXJyZW50X2JyYW5jaF90b19mcmVlKTsKKwlmcmVlKG1lcmdlX3BhcmVudHMuaXRlbSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfZm10X21lcmdlX21zZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICppbnBhdGggPSBOVUxMOworCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWludCBzaG9ydGxvZ19sZW4gPSAtMTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fSU5URUdFUiwgMCwgImxvZyIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJCSAgTl8oInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIERFRkFVTFRfTUVSR0VfTE9HX0xFTiB9LAorCQl7IE9QVElPTl9JTlRFR0VSLCAwLCAic3VtbWFyeSIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJCSAgTl8oImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwKKwkJICBERUZBVUxUX01FUkdFX0xPR19MRU4gfSwKKwkJT1BUX1NUUklORygnbScsICJtZXNzYWdlIiwgJm1lc3NhZ2UsIE5fKCJ0ZXh0IiksCisJCQlOXygidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIikpLAorCQlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZpbnBhdGgsIE5fKCJmaWxlIHRvIHJlYWQgZnJvbSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCUZJTEUgKmluID0gc3RkaW47CisJc3RydWN0IHN0cmJ1ZiBpbnB1dCA9IFNUUkJVRl9JTklULCBvdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCXN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgb3B0czsKKworCWdpdF9jb25maWcoZm10X21lcmdlX21zZ19jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZm10X21lcmdlX21zZ191c2FnZSwKKwkJCSAgICAgMCk7CisJaWYgKGFyZ2MgPiAwKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZm10X21lcmdlX21zZ191c2FnZSwgb3B0aW9ucyk7CisJaWYgKHNob3J0bG9nX2xlbiA8IDApCisJCXNob3J0bG9nX2xlbiA9IChtZXJnZV9sb2dfY29uZmlnID4gMCkgPyBtZXJnZV9sb2dfY29uZmlnIDogMDsKKworCWlmIChpbnBhdGggJiYgc3RyY21wKGlucGF0aCwgIi0iKSkgeworCQlpbiA9IGZvcGVuKGlucGF0aCwgInIiKTsKKwkJaWYgKCFpbikKKwkJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gJyVzJyIsIGlucGF0aCk7CisJfQorCisJaWYgKHN0cmJ1Zl9yZWFkKCZpbnB1dCwgZmlsZW5vKGluKSwgMCkgPCAwKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUiKTsKKworCWlmIChtZXNzYWdlKQorCQlzdHJidWZfYWRkc3RyKCZvdXRwdXQsIG1lc3NhZ2UpOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuYWRkX3RpdGxlID0gIW1lc3NhZ2U7CisJb3B0cy5jcmVkaXRfcGVvcGxlID0gMTsKKwlvcHRzLnNob3J0bG9nX2xlbiA9IHNob3J0bG9nX2xlbjsKKworCXJldCA9IGZtdF9tZXJnZV9tc2coJmlucHV0LCAmb3V0cHV0LCAmb3B0cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl3cml0ZV9pbl9mdWxsKFNURE9VVF9GSUxFTk8sIG91dHB1dC5idWYsIG91dHB1dC5sZW4pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mb3ItZWFjaC1yZWYuYyBiL2J1aWx0aW4vZm9yLWVhY2gtcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1MTUzZQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZm9yLWVhY2gtcmVmLmMKQEAgLTAsMCArMSw4NyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVmLWZpbHRlci5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGZvcl9lYWNoX3JlZl91c2FnZVtdID0geworCU5fKCJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIiksCisJTl8oImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIpLAorCU5fKCJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iKSwKKwlOXygiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfZm9yX2VhY2hfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZyA9IE5VTEwsICoqc29ydGluZ190YWlsID0gJnNvcnRpbmc7CisJaW50IG1heGNvdW50ID0gMCwgaWNhc2UgPSAwOworCXN0cnVjdCByZWZfYXJyYXkgYXJyYXk7CisJc3RydWN0IHJlZl9maWx0ZXIgZmlsdGVyOworCXN0cnVjdCByZWZfZm9ybWF0IGZvcm1hdCA9IFJFRl9GT1JNQVRfSU5JVDsKKworCXN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCQlPUFRfQklUKCdzJywgInNoZWxsIiwgJmZvcm1hdC5xdW90ZV9zdHlsZSwKKwkJCU5fKCJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIpLCBRVU9URV9TSEVMTCksCisJCU9QVF9CSVQoJ3AnLCAicGVybCIsICAmZm9ybWF0LnF1b3RlX3N0eWxlLAorCQkJTl8oInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIpLCBRVU9URV9QRVJMKSwKKwkJT1BUX0JJVCgwICwgInB5dGhvbiIsICZmb3JtYXQucXVvdGVfc3R5bGUsCisJCQlOXygicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iKSwgUVVPVEVfUFlUSE9OKSwKKwkJT1BUX0JJVCgwICwgInRjbCIsICAmZm9ybWF0LnF1b3RlX3N0eWxlLAorCQkJTl8oInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIiksIFFVT1RFX1RDTCksCisKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0lOVEVHRVIoIDAgLCAiY291bnQiLCAmbWF4Y291bnQsIE5fKCJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIpKSwKKwkJT1BUX1NUUklORyggIDAgLCAiZm9ybWF0IiwgJmZvcm1hdC5mb3JtYXQsIE5fKCJmb3JtYXQiKSwgTl8oImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiKSksCisJCU9QVF9fQ09MT1IoJmZvcm1hdC51c2VfY29sb3IsIE5fKCJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiKSksCisJCU9QVF9SRUZfU09SVChzb3J0aW5nX3RhaWwpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInBvaW50cy1hdCIsICZmaWx0ZXIucG9pbnRzX2F0LAorCQkJICAgICBOXygib2JqZWN0IiksIE5fKCJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiKSwKKwkJCSAgICAgcGFyc2Vfb3B0X29iamVjdF9uYW1lKSwKKwkJT1BUX01FUkdFRCgmZmlsdGVyLCBOXygicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIpKSwKKwkJT1BUX05PX01FUkdFRCgmZmlsdGVyLCBOXygicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiKSksCisJCU9QVF9DT05UQUlOUygmZmlsdGVyLndpdGhfY29tbWl0LCBOXygicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX05PX0NPTlRBSU5TKCZmaWx0ZXIubm9fY29tbWl0LCBOXygicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1jYXNlIiwgJmljYXNlLCBOXygic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCW1lbXNldCgmYXJyYXksIDAsIHNpemVvZihhcnJheSkpOworCW1lbXNldCgmZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CisKKwlmb3JtYXQuZm9ybWF0ID0gIiUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKVx0JShyZWZuYW1lKSI7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgZm9yX2VhY2hfcmVmX3VzYWdlLCAwKTsKKwlpZiAobWF4Y291bnQgPCAwKSB7CisJCWVycm9yKCJpbnZhbGlkIC0tY291bnQgYXJndW1lbnQ6IGAlZCciLCBtYXhjb3VudCk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhmb3JfZWFjaF9yZWZfdXNhZ2UsIG9wdHMpOworCX0KKwlpZiAoSEFTX01VTFRJX0JJVFMoZm9ybWF0LnF1b3RlX3N0eWxlKSkgeworCQllcnJvcigibW9yZSB0aGFuIG9uZSBxdW90aW5nIHN0eWxlPyIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZm9yX2VhY2hfcmVmX3VzYWdlLCBvcHRzKTsKKwl9CisJaWYgKHZlcmlmeV9yZWZfZm9ybWF0KCZmb3JtYXQpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZm9yX2VhY2hfcmVmX3VzYWdlLCBvcHRzKTsKKworCWlmICghc29ydGluZykKKwkJc29ydGluZyA9IHJlZl9kZWZhdWx0X3NvcnRpbmcoKTsKKwlzb3J0aW5nLT5pZ25vcmVfY2FzZSA9IGljYXNlOworCWZpbHRlci5pZ25vcmVfY2FzZSA9IGljYXNlOworCisJZmlsdGVyLm5hbWVfcGF0dGVybnMgPSBhcmd2OworCWZpbHRlci5tYXRjaF9hc19wYXRoID0gMTsKKwlmaWx0ZXJfcmVmcygmYXJyYXksICZmaWx0ZXIsIEZJTFRFUl9SRUZTX0FMTCB8IEZJTFRFUl9SRUZTX0lOQ0xVREVfQlJPS0VOKTsKKwlyZWZfYXJyYXlfc29ydChzb3J0aW5nLCAmYXJyYXkpOworCisJaWYgKCFtYXhjb3VudCB8fCBhcnJheS5uciA8IG1heGNvdW50KQorCQltYXhjb3VudCA9IGFycmF5Lm5yOworCWZvciAoaSA9IDA7IGkgPCBtYXhjb3VudDsgaSsrKQorCQlzaG93X3JlZl9hcnJheV9pdGVtKGFycmF5Lml0ZW1zW2ldLCAmZm9ybWF0KTsKKwlyZWZfYXJyYXlfY2xlYXIoJmFycmF5KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZnNjay5jIGIvYnVpbHRpbi9mc2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxMzc5NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZnNjay5jCkBAIC0wLDAgKzEsOTYwIEBACisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJmc2NrLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworI2RlZmluZSBSRUFDSEFCTEUgMHgwMDAxCisjZGVmaW5lIFNFRU4gICAgICAweDAwMDIKKyNkZWZpbmUgSEFTX09CSiAgIDB4MDAwNAorLyogVGhpcyBmbGFnIGlzIHNldCBpZiBzb21ldGhpbmcgcG9pbnRzIHRvIHRoaXMgb2JqZWN0LiAqLworI2RlZmluZSBVU0VEICAgICAgMHgwMDA4CisKK3N0YXRpYyBpbnQgc2hvd19yb290Oworc3RhdGljIGludCBzaG93X3RhZ3M7CitzdGF0aWMgaW50IHNob3dfdW5yZWFjaGFibGU7CitzdGF0aWMgaW50IGluY2x1ZGVfcmVmbG9ncyA9IDE7CitzdGF0aWMgaW50IGNoZWNrX2Z1bGwgPSAxOworc3RhdGljIGludCBjb25uZWN0aXZpdHlfb25seTsKK3N0YXRpYyBpbnQgY2hlY2tfc3RyaWN0Oworc3RhdGljIGludCBrZWVwX2NhY2hlX29iamVjdHM7CitzdGF0aWMgc3RydWN0IGZzY2tfb3B0aW9ucyBmc2NrX3dhbGtfb3B0aW9ucyA9IEZTQ0tfT1BUSU9OU19ERUZBVUxUOworc3RhdGljIHN0cnVjdCBmc2NrX29wdGlvbnMgZnNja19vYmpfb3B0aW9ucyA9IEZTQ0tfT1BUSU9OU19ERUZBVUxUOworc3RhdGljIGludCBlcnJvcnNfZm91bmQ7CitzdGF0aWMgaW50IHdyaXRlX2xvc3RfYW5kX2ZvdW5kOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBzaG93X3Byb2dyZXNzID0gLTE7CitzdGF0aWMgaW50IHNob3dfZGFuZ2xpbmcgPSAxOworc3RhdGljIGludCBuYW1lX29iamVjdHM7CisjZGVmaW5lIEVSUk9SX09CSkVDVCAwMQorI2RlZmluZSBFUlJPUl9SRUFDSEFCTEUgMDIKKyNkZWZpbmUgRVJST1JfUEFDSyAwNAorI2RlZmluZSBFUlJPUl9SRUZTIDAxMAorI2RlZmluZSBFUlJPUl9DT01NSVRfR1JBUEggMDIwCisKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBmc2NrX2Rlc2NyaWJlX29iamVjdCgmZnNja193YWxrX29wdGlvbnMsIG9pZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcmludGFibGVfdHlwZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJY29uc3QgY2hhciAqcmV0OworCisJaWYgKHR5cGUgPT0gT0JKX05PTkUpCisJCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9pZCwgTlVMTCk7CisKKwlyZXQgPSB0eXBlX25hbWUodHlwZSk7CisJaWYgKCFyZXQpCisJCXJldCA9IF8oInVua25vd24iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZnNja19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHN0cmNtcCh2YXIsICJmc2NrLnNraXBsaXN0IikgPT0gMCkgeworCQljb25zdCBjaGFyICpwYXRoOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGdpdF9jb25maWdfcGF0aG5hbWUoJnBhdGgsIHZhciwgdmFsdWUpKQorCQkJcmV0dXJuIDE7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgInNraXBsaXN0PSVzIiwgcGF0aCk7CisJCWZyZWUoKGNoYXIgKilwYXRoKTsKKwkJZnNja19zZXRfbXNnX3R5cGVzKCZmc2NrX29ial9vcHRpb25zLCBzYi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiZnNjay4iLCAmdmFyKSkgeworCQlmc2NrX3NldF9tc2dfdHlwZSgmZnNja19vYmpfb3B0aW9ucywgdmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IG9iamVycm9yKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqZXJyKQoreworCWVycm9yc19mb3VuZCB8PSBFUlJPUl9PQkpFQ1Q7CisJLyogVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPiAqLworCWZwcmludGZfbG4oc3RkZXJyLCBfKCJlcnJvciBpbiAlcyAlczogJXMiKSwKKwkJICAgcHJpbnRhYmxlX3R5cGUoJm9iai0+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+c2V0dGluZ3MuZ2Nfd3JpdGVfY29tbWl0X2dyYXBoID09IDEpCisJCXdyaXRlX2NvbW1pdF9ncmFwaF9yZWFjaGFibGUodGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPm9kYiwKKwkJCQkJICAgICAhcXVpZXQgJiYgIWRhZW1vbml6ZWQgPyBDT01NSVRfR1JBUEhfV1JJVEVfUFJPR1JFU1MgOiAwLAorCQkJCQkgICAgIE5VTEwpOworCisJaWYgKGF1dG9fZ2MgJiYgdG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQorCQl3YXJuaW5nKF8oIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyAiCisJCQkicnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIpKTsKKworCWlmICghZGFlbW9uaXplZCkKKwkJdW5saW5rKGdpdF9wYXRoKCJnYy5sb2ciKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZ2V0LXRhci1jb21taXQtaWQuYyBiL2J1aWx0aW4vZ2V0LXRhci1jb21taXQtaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTFhZjkyCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9nZXQtdGFyLWNvbW1pdC1pZC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgUmVuZSBTY2hhcmZlCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhci5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2dldF90YXJfY29tbWl0X2lkX3VzYWdlW10gPQorImdpdCBnZXQtdGFyLWNvbW1pdC1pZCI7CisKKy8qIHVzdGFyIGhlYWRlciArIGV4dGVuZGVkIGdsb2JhbCBoZWFkZXIgY29udGVudCAqLworI2RlZmluZSBSRUNPUkRTSVpFCSg1MTIpCisjZGVmaW5lIEhFQURFUlNJWkUgKDIgKiBSRUNPUkRTSVpFKQorCitpbnQgY21kX2dldF90YXJfY29tbWl0X2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgYnVmZmVyW0hFQURFUlNJWkVdOworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgKmhlYWRlciA9IChzdHJ1Y3QgdXN0YXJfaGVhZGVyICopYnVmZmVyOworCWNoYXIgKmNvbnRlbnQgPSBidWZmZXIgKyBSRUNPUkRTSVpFOworCWNvbnN0IGNoYXIgKmNvbW1lbnQ7CisJc3NpemVfdCBuOworCWxvbmcgbGVuOworCWNoYXIgKmVuZDsKKworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlKGJ1aWx0aW5fZ2V0X3Rhcl9jb21taXRfaWRfdXNhZ2UpOworCisJbiA9IHJlYWRfaW5fZnVsbCgwLCBidWZmZXIsIEhFQURFUlNJWkUpOworCWlmIChuIDwgMCkKKwkJZGllX2Vycm5vKCJnaXQgZ2V0LXRhci1jb21taXQtaWQ6IHJlYWQgZXJyb3IiKTsKKwlpZiAobiAhPSBIRUFERVJTSVpFKQorCQlkaWVfZXJybm8oImdpdCBnZXQtdGFyLWNvbW1pdC1pZDogRU9GIGJlZm9yZSByZWFkaW5nIHRhciBoZWFkZXIiKTsKKwlpZiAoaGVhZGVyLT50eXBlZmxhZ1swXSAhPSAnZycpCisJCXJldHVybiAxOworCisJbGVuID0gc3RydG9sKGNvbnRlbnQsICZlbmQsIDEwKTsKKwlpZiAoZXJybm8gPT0gRVJBTkdFIHx8IGVuZCA9PSBjb250ZW50IHx8IGxlbiA8IDApCisJCXJldHVybiAxOworCWlmICghc2tpcF9wcmVmaXgoZW5kLCAiIGNvbW1lbnQ9IiwgJmNvbW1lbnQpKQorCQlyZXR1cm4gMTsKKwlsZW4gLT0gY29tbWVudCAtIGNvbnRlbnQ7CisJaWYgKGxlbiA8IDEgfHwgIShsZW4gJSAyKSB8fAorCSAgICBoYXNoX2FsZ29fYnlfbGVuZ3RoKChsZW4gLSAxKSAvIDIpID09IEdJVF9IQVNIX1VOS05PV04pCisJCXJldHVybiAxOworCisJaWYgKHdyaXRlX2luX2Z1bGwoMSwgY29tbWVudCwgbGVuKSA8IDApCisJCWRpZV9lcnJubygiZ2l0IGdldC10YXItY29tbWl0LWlkOiB3cml0ZSBlcnJvciIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2dyZXAuYyBiL2J1aWx0aW4vZ3JlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTI2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2dyZXAuYwpAQCAtMCwwICsxLDExNTQgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgZ3JlcCIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgImdyZXAuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZ3JlcF91c2FnZVtdID0geworCU5fKCJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHJlY3Vyc2Vfc3VibW9kdWxlczsKKworc3RhdGljIGludCBudW1fdGhyZWFkczsKKworc3RhdGljIHB0aHJlYWRfdCAqdGhyZWFkczsKKworLyogV2UgdXNlIG9uZSBwcm9kdWNlciB0aHJlYWQgYW5kIFRIUkVBRFMgY29uc3VtZXIKKyAqIHRocmVhZHMuIFRoZSBwcm9kdWNlciBhZGRzIHN0cnVjdCB3b3JrX2l0ZW1zIHRvICd0b2RvJyBhbmQgdGhlCisgKiBjb25zdW1lcnMgcGljayB3b3JrIGl0ZW1zIGZyb20gdGhlIHNhbWUgYXJyYXkuCisgKi8KK3N0cnVjdCB3b3JrX2l0ZW0geworCXN0cnVjdCBncmVwX3NvdXJjZSBzb3VyY2U7CisJY2hhciBkb25lOworCXN0cnVjdCBzdHJidWYgb3V0OworfTsKKworLyogSW4gdGhlIHJhbmdlIFt0b2RvX2RvbmUsIHRvZG9fc3RhcnQpIGluICd0b2RvJyB3ZSBoYXZlIHdvcmtfaXRlbXMKKyAqIHRoYXQgaGF2ZSBiZWVuIG9yIGFyZSBwcm9jZXNzZWQgYnkgYSBjb25zdW1lciB0aHJlYWQuIFdlIGhhdmVuJ3QKKyAqIHdyaXR0ZW4gdGhlIHJlc3VsdCBmb3IgdGhlc2UgdG8gc3Rkb3V0IHlldC4KKyAqCisgKiBUaGUgd29ya19pdGVtcyBpbiBbdG9kb19zdGFydCwgdG9kb19lbmQpIGFyZSB3YWl0aW5nIHRvIGJlIHBpY2tlZAorICogdXAgYnkgYSBjb25zdW1lciB0aHJlYWQuCisgKgorICogVGhlIHJhbmdlcyBhcmUgbW9kdWxvIFRPRE9fU0laRS4KKyAqLworI2RlZmluZSBUT0RPX1NJWkUgMTI4CitzdGF0aWMgc3RydWN0IHdvcmtfaXRlbSB0b2RvW1RPRE9fU0laRV07CitzdGF0aWMgaW50IHRvZG9fc3RhcnQ7CitzdGF0aWMgaW50IHRvZG9fZW5kOworc3RhdGljIGludCB0b2RvX2RvbmU7CisKKy8qIEhhcyBhbGwgd29yayBpdGVtcyBiZWVuIGFkZGVkPyAqLworc3RhdGljIGludCBhbGxfd29ya19hZGRlZDsKKworLyogVGhpcyBsb2NrIHByb3RlY3RzIGFsbCB0aGUgdmFyaWFibGVzIGFib3ZlLiAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBncmVwX211dGV4OworCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JlcF9sb2NrKHZvaWQpCit7CisJcHRocmVhZF9tdXRleF9sb2NrKCZncmVwX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXBfdW5sb2NrKHZvaWQpCit7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmdyZXBfbXV0ZXgpOworfQorCisvKiBTaWduYWxsZWQgd2hlbiBhIG5ldyB3b3JrX2l0ZW0gaXMgYWRkZWQgdG8gdG9kby4gKi8KK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kX2FkZDsKKworLyogU2lnbmFsbGVkIHdoZW4gdGhlIHJlc3VsdCBmcm9tIG9uZSB3b3JrX2l0ZW0gaXMgd3JpdHRlbiB0bworICogc3Rkb3V0LgorICovCitzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZF93cml0ZTsKKworLyogU2lnbmFsbGVkIHdoZW4gd2UgYXJlIGZpbmlzaGVkIHdpdGggZXZlcnl0aGluZy4gKi8KK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kX3Jlc3VsdDsKKworc3RhdGljIGludCBza2lwX2ZpcnN0X2xpbmU7CisKK3N0YXRpYyB2b2lkIGFkZF93b3JrKHN0cnVjdCBncmVwX29wdCAqb3B0LCBzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCWlmIChvcHQtPmJpbmFyeSAhPSBHUkVQX0JJTkFSWV9URVhUKQorCQlncmVwX3NvdXJjZV9sb2FkX2RyaXZlcihncywgb3B0LT5yZXBvLT5pbmRleCk7CisKKwlncmVwX2xvY2soKTsKKworCXdoaWxlICgodG9kb19lbmQrMSkgJSBBUlJBWV9TSVpFKHRvZG8pID09IHRvZG9fZG9uZSkgeworCQlwdGhyZWFkX2NvbmRfd2FpdCgmY29uZF93cml0ZSwgJmdyZXBfbXV0ZXgpOworCX0KKworCXRvZG9bdG9kb19lbmRdLnNvdXJjZSA9ICpnczsKKwl0b2RvW3RvZG9fZW5kXS5kb25lID0gMDsKKwlzdHJidWZfcmVzZXQoJnRvZG9bdG9kb19lbmRdLm91dCk7CisJdG9kb19lbmQgPSAodG9kb19lbmQgKyAxKSAlIEFSUkFZX1NJWkUodG9kbyk7CisKKwlwdGhyZWFkX2NvbmRfc2lnbmFsKCZjb25kX2FkZCk7CisJZ3JlcF91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCB3b3JrX2l0ZW0gKmdldF93b3JrKHZvaWQpCit7CisJc3RydWN0IHdvcmtfaXRlbSAqcmV0OworCisJZ3JlcF9sb2NrKCk7CisJd2hpbGUgKHRvZG9fc3RhcnQgPT0gdG9kb19lbmQgJiYgIWFsbF93b3JrX2FkZGVkKSB7CisJCXB0aHJlYWRfY29uZF93YWl0KCZjb25kX2FkZCwgJmdyZXBfbXV0ZXgpOworCX0KKworCWlmICh0b2RvX3N0YXJ0ID09IHRvZG9fZW5kICYmIGFsbF93b3JrX2FkZGVkKSB7CisJCXJldCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcmV0ID0gJnRvZG9bdG9kb19zdGFydF07CisJCXRvZG9fc3RhcnQgPSAodG9kb19zdGFydCArIDEpICUgQVJSQVlfU0laRSh0b2RvKTsKKwl9CisJZ3JlcF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3b3JrX2RvbmUoc3RydWN0IHdvcmtfaXRlbSAqdykKK3sKKwlpbnQgb2xkX2RvbmU7CisKKwlncmVwX2xvY2soKTsKKwl3LT5kb25lID0gMTsKKwlvbGRfZG9uZSA9IHRvZG9fZG9uZTsKKwlmb3IoOyB0b2RvW3RvZG9fZG9uZV0uZG9uZSAmJiB0b2RvX2RvbmUgIT0gdG9kb19zdGFydDsKKwkgICAgdG9kb19kb25lID0gKHRvZG9fZG9uZSsxKSAlIEFSUkFZX1NJWkUodG9kbykpIHsKKwkJdyA9ICZ0b2RvW3RvZG9fZG9uZV07CisJCWlmICh3LT5vdXQubGVuKSB7CisJCQljb25zdCBjaGFyICpwID0gdy0+b3V0LmJ1ZjsKKwkJCXNpemVfdCBsZW4gPSB3LT5vdXQubGVuOworCisJCQkvKiBTa2lwIHRoZSBsZWFkaW5nIGh1bmsgbWFyayBvZiB0aGUgZmlyc3QgZmlsZS4gKi8KKwkJCWlmIChza2lwX2ZpcnN0X2xpbmUpIHsKKwkJCQl3aGlsZSAobGVuKSB7CisJCQkJCWxlbi0tOworCQkJCQlpZiAoKnArKyA9PSAnXG4nKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNraXBfZmlyc3RfbGluZSA9IDA7CisJCQl9CisKKwkJCXdyaXRlX29yX2RpZSgxLCBwLCBsZW4pOworCQl9CisJCWdyZXBfc291cmNlX2NsZWFyKCZ3LT5zb3VyY2UpOworCX0KKworCWlmIChvbGRfZG9uZSAhPSB0b2RvX2RvbmUpCisJCXB0aHJlYWRfY29uZF9zaWduYWwoJmNvbmRfd3JpdGUpOworCisJaWYgKGFsbF93b3JrX2FkZGVkICYmIHRvZG9fZG9uZSA9PSB0b2RvX2VuZCkKKwkJcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZF9yZXN1bHQpOworCisJZ3JlcF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgKnJ1bih2b2lkICphcmcpCit7CisJaW50IGhpdCA9IDA7CisJc3RydWN0IGdyZXBfb3B0ICpvcHQgPSBhcmc7CisKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3Qgd29ya19pdGVtICp3ID0gZ2V0X3dvcmsoKTsKKwkJaWYgKCF3KQorCQkJYnJlYWs7CisKKwkJb3B0LT5vdXRwdXRfcHJpdiA9IHc7CisJCWhpdCB8PSBncmVwX3NvdXJjZShvcHQsICZ3LT5zb3VyY2UpOworCQlncmVwX3NvdXJjZV9jbGVhcl9kYXRhKCZ3LT5zb3VyY2UpOworCQl3b3JrX2RvbmUodyk7CisJfQorCWZyZWVfZ3JlcF9wYXR0ZXJucyhhcmcpOworCWZyZWUoYXJnKTsKKworCXJldHVybiAodm9pZCopIChpbnRwdHJfdCkgaGl0OworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfb3V0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB3b3JrX2l0ZW0gKncgPSBvcHQtPm91dHB1dF9wcml2OworCXN0cmJ1Zl9hZGQoJnctPm91dCwgYnVmLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfdGhyZWFkcyhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlpbnQgaTsKKworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmZ3JlcF9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZncmVwX2F0dHJfbXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfY29uZF9pbml0KCZjb25kX2FkZCwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJmNvbmRfd3JpdGUsIE5VTEwpOworCXB0aHJlYWRfY29uZF9pbml0KCZjb25kX3Jlc3VsdCwgTlVMTCk7CisJZ3JlcF91c2VfbG9ja3MgPSAxOworCWVuYWJsZV9vYmpfcmVhZF9sb2NrKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0b2RvKTsgaSsrKSB7CisJCXN0cmJ1Zl9pbml0KCZ0b2RvW2ldLm91dCwgMCk7CisJfQorCisJdGhyZWFkcyA9IHhjYWxsb2MobnVtX3RocmVhZHMsIHNpemVvZigqdGhyZWFkcykpOworCWZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkczsgaSsrKSB7CisJCWludCBlcnI7CisJCXN0cnVjdCBncmVwX29wdCAqbyA9IGdyZXBfb3B0X2R1cChvcHQpOworCQlvLT5vdXRwdXQgPSBzdHJidWZfb3V0OworCQlpZiAoaSkKKwkJCW8tPmRlYnVnID0gMDsKKwkJY29tcGlsZV9ncmVwX3BhdHRlcm5zKG8pOworCQllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgcnVuLCBvKTsKKworCQlpZiAoZXJyKQorCQkJZGllKF8oImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIpLAorCQkJICAgIHN0cmVycm9yKGVycikpOworCX0KK30KKworc3RhdGljIGludCB3YWl0X2FsbCh2b2lkKQoreworCWludCBoaXQgPSAwOworCWludCBpOworCisJaWYgKCFIQVZFX1RIUkVBRFMpCisJCUJVRygiTmV2ZXIgY2FsbCB0aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3UgaGF2ZSBzdGFydGVkIHRocmVhZHMiKTsKKworCWdyZXBfbG9jaygpOworCWFsbF93b3JrX2FkZGVkID0gMTsKKworCS8qIFdhaXQgdW50aWwgYWxsIHdvcmsgaXMgZG9uZS4gKi8KKwl3aGlsZSAodG9kb19kb25lICE9IHRvZG9fZW5kKQorCQlwdGhyZWFkX2NvbmRfd2FpdCgmY29uZF9yZXN1bHQsICZncmVwX211dGV4KTsKKworCS8qIFdha2UgdXAgYWxsIHRoZSBjb25zdW1lciB0aHJlYWRzIHNvIHRoZXkgY2FuIHNlZSB0aGF0IHRoZXJlCisJICogaXMgbm8gbW9yZSB3b3JrIHRvIGRvLgorCSAqLworCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJmNvbmRfYWRkKTsKKwlncmVwX3VubG9jaygpOworCisJZm9yIChpID0gMDsgaSA8IG51bV90aHJlYWRzOyBpKyspIHsKKwkJdm9pZCAqaDsKKwkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sICZoKTsKKwkJaGl0IHw9IChpbnQpIChpbnRwdHJfdCkgaDsKKwl9CisKKwlmcmVlKHRocmVhZHMpOworCisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZncmVwX211dGV4KTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmdyZXBfYXR0cl9tdXRleCk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbmRfYWRkKTsKKwlwdGhyZWFkX2NvbmRfZGVzdHJveSgmY29uZF93cml0ZSk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbmRfcmVzdWx0KTsKKwlncmVwX3VzZV9sb2NrcyA9IDA7CisJZGlzYWJsZV9vYmpfcmVhZF9sb2NrKCk7CisKKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IGdyZXBfY21kX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3QgPSBncmVwX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJaWYgKGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlzdCA9IC0xOworCisJaWYgKCFzdHJjbXAodmFyLCAiZ3JlcC50aHJlYWRzIikpIHsKKwkJbnVtX3RocmVhZHMgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKG51bV90aHJlYWRzIDwgMCkKKwkJCWRpZShfKCJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIpLAorCQkJICAgIG51bV90aHJlYWRzLCB2YXIpOworCQllbHNlIGlmICghSEFWRV9USFJFQURTICYmIG51bV90aHJlYWRzID4gMSkgeworCQkJLyoKKwkJCSAqIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorCQkJICogdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorCQkJICogZ3JlcC50aHJlYWRzCisJCQkgKi8KKwkJCXdhcm5pbmcoXygibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIpLCB2YXIpOworCQkJbnVtX3RocmVhZHMgPSAxOworCQl9CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAic3VibW9kdWxlLnJlY3Vyc2UiKSkKKwkJcmVjdXJzZV9zdWJtb2R1bGVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCisJcmV0dXJuIHN0OworfQorCitzdGF0aWMgaW50IGdyZXBfb2lkKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCB0cmVlX25hbWVfbGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGdyZXBfc291cmNlIGdzOworCisJaWYgKG9wdC0+cmVsYXRpdmUgJiYgb3B0LT5wcmVmaXhfbGVuZ3RoKSB7CisJCXF1b3RlX3BhdGhfcmVsYXRpdmUoZmlsZW5hbWUgKyB0cmVlX25hbWVfbGVuLCBvcHQtPnByZWZpeCwgJnBhdGhidWYpOworCQlzdHJidWZfaW5zZXJ0KCZwYXRoYnVmLCAwLCBmaWxlbmFtZSwgdHJlZV9uYW1lX2xlbik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cigmcGF0aGJ1ZiwgZmlsZW5hbWUpOworCX0KKworCWdyZXBfc291cmNlX2luaXQoJmdzLCBHUkVQX1NPVVJDRV9PSUQsIHBhdGhidWYuYnVmLCBwYXRoLCBvaWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoYnVmKTsKKworCWlmIChudW1fdGhyZWFkcyA+IDEpIHsKKwkJLyoKKwkJICogYWRkX3dvcmsoKSBjb3BpZXMgZ3MgYW5kIHRodXMgYXNzdW1lcyBvd25lcnNoaXAgb2YKKwkJICogaXRzIGZpZWxkcywgc28gZG8gbm90IGNhbGwgZ3JlcF9zb3VyY2VfY2xlYXIoKQorCQkgKi8KKwkJYWRkX3dvcmsob3B0LCAmZ3MpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpbnQgaGl0OworCisJCWhpdCA9IGdyZXBfc291cmNlKG9wdCwgJmdzKTsKKworCQlncmVwX3NvdXJjZV9jbGVhcigmZ3MpOworCQlyZXR1cm4gaGl0OworCX0KK30KKworc3RhdGljIGludCBncmVwX2ZpbGUoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGdyZXBfc291cmNlIGdzOworCisJaWYgKG9wdC0+cmVsYXRpdmUgJiYgb3B0LT5wcmVmaXhfbGVuZ3RoKQorCQlxdW90ZV9wYXRoX3JlbGF0aXZlKGZpbGVuYW1lLCBvcHQtPnByZWZpeCwgJmJ1Zik7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKCZidWYsIGZpbGVuYW1lKTsKKworCWdyZXBfc291cmNlX2luaXQoJmdzLCBHUkVQX1NPVVJDRV9GSUxFLCBidWYuYnVmLCBmaWxlbmFtZSwgZmlsZW5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJaWYgKG51bV90aHJlYWRzID4gMSkgeworCQkvKgorCQkgKiBhZGRfd29yaygpIGNvcGllcyBncyBhbmQgdGh1cyBhc3N1bWVzIG93bmVyc2hpcCBvZgorCQkgKiBpdHMgZmllbGRzLCBzbyBkbyBub3QgY2FsbCBncmVwX3NvdXJjZV9jbGVhcigpCisJCSAqLworCQlhZGRfd29yayhvcHQsICZncyk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWludCBoaXQ7CisKKwkJaGl0ID0gZ3JlcF9zb3VyY2Uob3B0LCAmZ3MpOworCisJCWdyZXBfc291cmNlX2NsZWFyKCZncyk7CisJCXJldHVybiBoaXQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfcGF0aChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhdGhfbGlzdCA9IG9wdC0+b3V0cHV0X3ByaXY7CisKKwlpZiAobGVuID09IDEgJiYgKihjb25zdCBjaGFyICopZGF0YSA9PSAnXDAnKQorCQlyZXR1cm47CisJc3RyaW5nX2xpc3RfYXBwZW5kKHBhdGhfbGlzdCwgeHN0cm5kdXAoZGF0YSwgbGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9wYWdlcihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcGF0aF9saXN0ID0gb3B0LT5vdXRwdXRfcHJpdjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgaSwgc3RhdHVzOworCisJZm9yIChpID0gMDsgaSA8IHBhdGhfbGlzdC0+bnI7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCBwYXRoX2xpc3QtPml0ZW1zW2ldLnN0cmluZyk7CisJY2hpbGQuZGlyID0gcHJlZml4OworCWNoaWxkLnVzZV9zaGVsbCA9IDE7CisKKwlzdGF0dXMgPSBydW5fY29tbWFuZCgmY2hpbGQpOworCWlmIChzdGF0dXMpCisJCWV4aXQoc3RhdHVzKTsKK30KKworc3RhdGljIGludCBncmVwX2NhY2hlKHN0cnVjdCBncmVwX29wdCAqb3B0LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBpbnQgY2FjaGVkKTsKK3N0YXRpYyBpbnQgZ3JlcF90cmVlKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICAgIHN0cnVjdCB0cmVlX2Rlc2MgKnRyZWUsIHN0cnVjdCBzdHJidWYgKmJhc2UsIGludCB0bl9sZW4sCisJCSAgICAgaW50IGNoZWNrX2F0dHIpOworCitzdGF0aWMgaW50IGdyZXBfc3VibW9kdWxlKHN0cnVjdCBncmVwX29wdCAqb3B0LAorCQkJICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgY2FjaGVkKQoreworCXN0cnVjdCByZXBvc2l0b3J5IHN1YnJlcG87CisJc3RydWN0IHJlcG9zaXRvcnkgKnN1cGVycHJvamVjdCA9IG9wdC0+cmVwbzsKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CisJc3RydWN0IGdyZXBfb3B0IHN1Ym9wdDsKKwlpbnQgaGl0OworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aChzdXBlcnByb2plY3QsICZudWxsX29pZCwgcGF0aCk7CisKKwlpZiAoIWlzX3N1Ym1vZHVsZV9hY3RpdmUoc3VwZXJwcm9qZWN0LCBwYXRoKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVwb19zdWJtb2R1bGVfaW5pdCgmc3VicmVwbywgc3VwZXJwcm9qZWN0LCBzdWIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogTkVFRFNXT1JLOiByZXBvX3JlYWRfZ2l0bW9kdWxlcygpIG1pZ2h0IGNhbGwKKwkgKiBhZGRfdG9fYWx0ZXJuYXRlc19tZW1vcnkoKSB2aWEgY29uZmlnX2Zyb21fZ2l0bW9kdWxlcygpLiBUaGlzCisJICogb3BlcmF0aW9uIGNhdXNlcyBhIHJhY2UgY29uZGl0aW9uIHdpdGggY29uY3VycmVudCBvYmplY3QgcmVhZGluZ3MKKwkgKiBwZXJmb3JtZWQgYnkgdGhlIHdvcmtlciB0aHJlYWRzLiBUaGF0J3Mgd2h5IHdlIG5lZWQgb2JqX3JlYWRfbG9jaygpCisJICogaGVyZS4gSXQgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gYWRkIHRoZQorCSAqIHN1YnJlcG8ncyBvZGJzIHRvIHRoZSBpbi1tZW1vcnkgYWx0ZXJuYXRlcyBsaXN0LgorCSAqLworCW9ial9yZWFkX2xvY2soKTsKKwlyZXBvX3JlYWRfZ2l0bW9kdWxlcygmc3VicmVwbywgMCk7CisKKwkvKgorCSAqIE5FRURTV09SSzogVGhpcyBhZGRzIHRoZSBzdWJtb2R1bGUncyBvYmplY3QgZGlyZWN0b3J5IHRvIHRoZSBsaXN0IG9mCisJICogYWx0ZXJuYXRlcyBmb3IgdGhlIHNpbmdsZSBpbi1tZW1vcnkgb2JqZWN0IHN0b3JlLiAgVGhpcyBoYXMgc29tZSBiYWQKKwkgKiBjb25zZXF1ZW5jZXMgZm9yIG1lbW9yeSAocHJvY2Vzc2VkIG9iamVjdHMgd2lsbCBuZXZlciBiZSBmcmVlZCkgYW5kCisJICogcGVyZm9ybWFuY2UgKHRoaXMgaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YgcGFjayBmaWxlcyBnaXQgaGFzIHRvIHBheQorCSAqIGF0dGVudGlvbiB0bywgdG8gdGhlIHN1bSBvZiB0aGUgbnVtYmVyIG9mIHBhY2sgZmlsZXMgaW4gYWxsIHRoZQorCSAqIHJlcG9zaXRvcmllcyBwcm9jZXNzZWQgc28gZmFyKS4gIFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGUgb2JqZWN0CisJICogc3RvcmUgaXMgbm8gbG9uZ2VyIGdsb2JhbCBhbmQgaW5zdGVhZCBpcyBhIG1lbWJlciBvZiB0aGUgcmVwb3NpdG9yeQorCSAqIG9iamVjdC4KKwkgKi8KKwlhZGRfdG9fYWx0ZXJuYXRlc19tZW1vcnkoc3VicmVwby5vYmplY3RzLT5vZGItPnBhdGgpOworCW9ial9yZWFkX3VubG9jaygpOworCisJbWVtY3B5KCZzdWJvcHQsIG9wdCwgc2l6ZW9mKHN1Ym9wdCkpOworCXN1Ym9wdC5yZXBvID0gJnN1YnJlcG87CisKKwlpZiAob2lkKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKwkJc3RydWN0IHRyZWVfZGVzYyB0cmVlOworCQl2b2lkICpkYXRhOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCXN0cnVjdCBzdHJidWYgYmFzZSA9IFNUUkJVRl9JTklUOworCisJCW9ial9yZWFkX2xvY2soKTsKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X29yX2RpZShvaWQsIG9pZF90b19oZXgob2lkKSk7CisJCW9ial9yZWFkX3VubG9jaygpOworCQlkYXRhID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoJnN1YnJlcG8sCisJCQkJCQkgICZvYmplY3QtPm9pZCwgdHJlZV90eXBlLAorCQkJCQkJICAmc2l6ZSwgTlVMTCk7CisJCWlmICghZGF0YSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiKSwgb2lkX3RvX2hleCgmb2JqZWN0LT5vaWQpKTsKKworCQlzdHJidWZfYWRkc3RyKCZiYXNlLCBmaWxlbmFtZSk7CisJCXN0cmJ1Zl9hZGRjaCgmYmFzZSwgJy8nKTsKKworCQlpbml0X3RyZWVfZGVzYygmdHJlZSwgZGF0YSwgc2l6ZSk7CisJCWhpdCA9IGdyZXBfdHJlZSgmc3Vib3B0LCBwYXRoc3BlYywgJnRyZWUsICZiYXNlLCBiYXNlLmxlbiwKKwkJCQlvYmplY3QtPnR5cGUgPT0gT0JKX0NPTU1JVCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZiYXNlKTsKKwkJZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQloaXQgPSBncmVwX2NhY2hlKCZzdWJvcHQsIHBhdGhzcGVjLCBjYWNoZWQpOworCX0KKworCXJlcG9fY2xlYXIoJnN1YnJlcG8pOworCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9jYWNoZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgaW50IGNhY2hlZCkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyA9IG9wdC0+cmVwbzsKKwlpbnQgaGl0ID0gMDsKKwlpbnQgbnI7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IG5hbWVfYmFzZV9sZW4gPSAwOworCWlmIChyZXBvLT5zdWJtb2R1bGVfcHJlZml4KSB7CisJCW5hbWVfYmFzZV9sZW4gPSBzdHJsZW4ocmVwby0+c3VibW9kdWxlX3ByZWZpeCk7CisJCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsIHJlcG8tPnN1Ym1vZHVsZV9wcmVmaXgpOworCX0KKworCWlmIChyZXBvX3JlYWRfaW5kZXgocmVwbykgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJZm9yIChuciA9IDA7IG5yIDwgcmVwby0+aW5kZXgtPmNhY2hlX25yOyBucisrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSByZXBvLT5pbmRleC0+Y2FjaGVbbnJdOworCQlzdHJidWZfc2V0bGVuKCZuYW1lLCBuYW1lX2Jhc2VfbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmbmFtZSwgY2UtPm5hbWUpOworCisJCWlmIChTX0lTUkVHKGNlLT5jZV9tb2RlKSAmJgorCQkgICAgbWF0Y2hfcGF0aHNwZWMocmVwby0+aW5kZXgsIHBhdGhzcGVjLCBuYW1lLmJ1ZiwgbmFtZS5sZW4sIDAsIE5VTEwsCisJCQkJICAgU19JU0RJUihjZS0+Y2VfbW9kZSkgfHwKKwkJCQkgICBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpKSB7CisJCQkvKgorCQkJICogSWYgQ0VfVkFMSUQgaXMgb24sIHdlIGFzc3VtZSB3b3JrdHJlZSBmaWxlIGFuZCBpdHMKKwkJCSAqIGNhY2hlIGVudHJ5IGFyZSBpZGVudGljYWwsIGV2ZW4gaWYgd29ya3RyZWUgZmlsZSBoYXMKKwkJCSAqIGJlZW4gbW9kaWZpZWQsIHNvIHVzZSBjYWNoZSB2ZXJzaW9uIGluc3RlYWQKKwkJCSAqLworCQkJaWYgKGNhY2hlZCB8fCAoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpIHx8CisJCQkgICAgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJCQlpZiAoY2Vfc3RhZ2UoY2UpIHx8IGNlX2ludGVudF90b19hZGQoY2UpKQorCQkJCQljb250aW51ZTsKKwkJCQloaXQgfD0gZ3JlcF9vaWQob3B0LCAmY2UtPm9pZCwgbmFtZS5idWYsCisJCQkJCQkgMCwgbmFtZS5idWYpOworCQkJfSBlbHNlIHsKKwkJCQloaXQgfD0gZ3JlcF9maWxlKG9wdCwgbmFtZS5idWYpOworCQkJfQorCQl9IGVsc2UgaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKKwkJCSAgIHN1Ym1vZHVsZV9wYXRoX21hdGNoKHJlcG8tPmluZGV4LCBwYXRoc3BlYywgbmFtZS5idWYsIE5VTEwpKSB7CisJCQloaXQgfD0gZ3JlcF9zdWJtb2R1bGUob3B0LCBwYXRoc3BlYywgTlVMTCwgY2UtPm5hbWUsCisJCQkJCSAgICAgIGNlLT5uYW1lLCBjYWNoZWQpOworCQl9IGVsc2UgeworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQlkbyB7CisJCQkJbnIrKzsKKwkJCX0gd2hpbGUgKG5yIDwgcmVwby0+aW5kZXgtPmNhY2hlX25yICYmCisJCQkJICFzdHJjbXAoY2UtPm5hbWUsIHJlcG8tPmluZGV4LT5jYWNoZVtucl0tPm5hbWUpKTsKKwkJCW5yLS07IC8qIGNvbXBlbnNhdGUgZm9yIGxvb3AgY29udHJvbCAqLworCQl9CisJCWlmIChoaXQgJiYgb3B0LT5zdGF0dXNfb25seSkKKwkJCWJyZWFrOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IGdyZXBfdHJlZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgICBzdHJ1Y3QgdHJlZV9kZXNjICp0cmVlLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBpbnQgdG5fbGVuLAorCQkgICAgIGludCBjaGVja19hdHRyKQoreworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvID0gb3B0LT5yZXBvOworCWludCBoaXQgPSAwOworCWVudW0gaW50ZXJlc3RpbmcgbWF0Y2ggPSBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IG9sZF9iYXNlbGVuID0gYmFzZS0+bGVuOworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBuYW1lX2Jhc2VfbGVuID0gMDsKKwlpZiAocmVwby0+c3VibW9kdWxlX3ByZWZpeCkgeworCQlzdHJidWZfYWRkc3RyKCZuYW1lLCByZXBvLT5zdWJtb2R1bGVfcHJlZml4KTsKKwkJbmFtZV9iYXNlX2xlbiA9IG5hbWUubGVuOworCX0KKworCXdoaWxlICh0cmVlX2VudHJ5KHRyZWUsICZlbnRyeSkpIHsKKwkJaW50IHRlX2xlbiA9IHRyZWVfZW50cnlfbGVuKCZlbnRyeSk7CisKKwkJaWYgKG1hdGNoICE9IGFsbF9lbnRyaWVzX2ludGVyZXN0aW5nKSB7CisJCQlzdHJidWZfYWRkc3RyKCZuYW1lLCBiYXNlLT5idWYgKyB0bl9sZW4pOworCQkJbWF0Y2ggPSB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKHJlcG8tPmluZGV4LAorCQkJCQkJICAgICAgICZlbnRyeSwgJm5hbWUsCisJCQkJCQkgICAgICAgMCwgcGF0aHNwZWMpOworCQkJc3RyYnVmX3NldGxlbigmbmFtZSwgbmFtZV9iYXNlX2xlbik7CisKKwkJCWlmIChtYXRjaCA9PSBhbGxfZW50cmllc19ub3RfaW50ZXJlc3RpbmcpCisJCQkJYnJlYWs7CisJCQlpZiAobWF0Y2ggPT0gZW50cnlfbm90X2ludGVyZXN0aW5nKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX2FkZChiYXNlLCBlbnRyeS5wYXRoLCB0ZV9sZW4pOworCisJCWlmIChTX0lTUkVHKGVudHJ5Lm1vZGUpKSB7CisJCQloaXQgfD0gZ3JlcF9vaWQob3B0LCAmZW50cnkub2lkLCBiYXNlLT5idWYsIHRuX2xlbiwKKwkJCQkJIGNoZWNrX2F0dHIgPyBiYXNlLT5idWYgKyB0bl9sZW4gOiBOVUxMKTsKKwkJfSBlbHNlIGlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKSB7CisJCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCQlzdHJ1Y3QgdHJlZV9kZXNjIHN1YjsKKwkJCXZvaWQgKmRhdGE7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisKKwkJCWRhdGEgPSByZWFkX29iamVjdF9maWxlKCZlbnRyeS5vaWQsICZ0eXBlLCAmc2l6ZSk7CisJCQlpZiAoIWRhdGEpCisJCQkJZGllKF8oInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIpLAorCQkJCSAgICBvaWRfdG9faGV4KCZlbnRyeS5vaWQpKTsKKworCQkJc3RyYnVmX2FkZGNoKGJhc2UsICcvJyk7CisJCQlpbml0X3RyZWVfZGVzYygmc3ViLCBkYXRhLCBzaXplKTsKKwkJCWhpdCB8PSBncmVwX3RyZWUob3B0LCBwYXRoc3BlYywgJnN1YiwgYmFzZSwgdG5fbGVuLAorCQkJCQkgY2hlY2tfYXR0cik7CisJCQlmcmVlKGRhdGEpOworCQl9IGVsc2UgaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyAmJiBTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkgeworCQkJaGl0IHw9IGdyZXBfc3VibW9kdWxlKG9wdCwgcGF0aHNwZWMsICZlbnRyeS5vaWQsCisJCQkJCSAgICAgIGJhc2UtPmJ1ZiwgYmFzZS0+YnVmICsgdG5fbGVuLAorCQkJCQkgICAgICAxKTsgLyogaWdub3JlZCAqLworCQl9CisKKwkJc3RyYnVmX3NldGxlbihiYXNlLCBvbGRfYmFzZWxlbik7CisKKwkJaWYgKGhpdCAmJiBvcHQtPnN0YXR1c19vbmx5KQorCQkJYnJlYWs7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJm5hbWUpOworCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9vYmplY3Qoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikKKwkJcmV0dXJuIGdyZXBfb2lkKG9wdCwgJm9iai0+b2lkLCBuYW1lLCAwLCBwYXRoKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQgfHwgb2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXN0cnVjdCB0cmVlX2Rlc2MgdHJlZTsKKwkJdm9pZCAqZGF0YTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlzdHJ1Y3Qgc3RyYnVmIGJhc2U7CisJCWludCBoaXQsIGxlbjsKKworCQlkYXRhID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uob3B0LT5yZXBvLAorCQkJCQkJICAmb2JqLT5vaWQsIHRyZWVfdHlwZSwKKwkJCQkJCSAgJnNpemUsIE5VTEwpOworCQlpZiAoIWRhdGEpCisJCQlkaWUoXygidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIiksIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisKKwkJbGVuID0gbmFtZSA/IHN0cmxlbihuYW1lKSA6IDA7CisJCXN0cmJ1Zl9pbml0KCZiYXNlLCBQQVRIX01BWCArIGxlbiArIDEpOworCQlpZiAobGVuKSB7CisJCQlzdHJidWZfYWRkKCZiYXNlLCBuYW1lLCBsZW4pOworCQkJc3RyYnVmX2FkZGNoKCZiYXNlLCAnOicpOworCQl9CisJCWluaXRfdHJlZV9kZXNjKCZ0cmVlLCBkYXRhLCBzaXplKTsKKwkJaGl0ID0gZ3JlcF90cmVlKG9wdCwgcGF0aHNwZWMsICZ0cmVlLCAmYmFzZSwgYmFzZS5sZW4sCisJCQkJb2JqLT50eXBlID09IE9CSl9DT01NSVQpOworCQlzdHJidWZfcmVsZWFzZSgmYmFzZSk7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiBoaXQ7CisJfQorCWRpZShfKCJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIiksIHR5cGVfbmFtZShvYmotPnR5cGUpKTsKK30KKworc3RhdGljIGludCBncmVwX29iamVjdHMoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpsaXN0KQoreworCXVuc2lnbmVkIGludCBpOworCWludCBoaXQgPSAwOworCWNvbnN0IHVuc2lnbmVkIGludCBuciA9IGxpc3QtPm5yOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqcmVhbF9vYmo7CisKKwkJb2JqX3JlYWRfbG9jaygpOworCQlyZWFsX29iaiA9IGRlcmVmX3RhZyhvcHQtPnJlcG8sIGxpc3QtPm9iamVjdHNbaV0uaXRlbSwKKwkJCQkgICAgIE5VTEwsIDApOworCQlvYmpfcmVhZF91bmxvY2soKTsKKworCQkvKiBsb2FkIHRoZSBnaXRtb2R1bGVzIGZpbGUgZm9yIHRoaXMgcmV2ICovCisJCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMpIHsKKwkJCXN1Ym1vZHVsZV9mcmVlKG9wdC0+cmVwbyk7CisJCQlvYmpfcmVhZF9sb2NrKCk7CisJCQlnaXRtb2R1bGVzX2NvbmZpZ19vaWQoJnJlYWxfb2JqLT5vaWQpOworCQkJb2JqX3JlYWRfdW5sb2NrKCk7CisJCX0KKwkJaWYgKGdyZXBfb2JqZWN0KG9wdCwgcGF0aHNwZWMsIHJlYWxfb2JqLCBsaXN0LT5vYmplY3RzW2ldLm5hbWUsCisJCQkJbGlzdC0+b2JqZWN0c1tpXS5wYXRoKSkgeworCQkJaGl0ID0gMTsKKwkJCWlmIChvcHQtPnN0YXR1c19vbmx5KQorCQkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9kaXJlY3Rvcnkoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgIGludCBleGNfc3RkLCBpbnQgdXNlX2luZGV4KQoreworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKwlpbnQgaSwgaGl0ID0gMDsKKworCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CisJaWYgKCF1c2VfaW5kZXgpCisJCWRpci5mbGFncyB8PSBESVJfTk9fR0lUTElOS1M7CisJaWYgKGV4Y19zdGQpCisJCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCisJZmlsbF9kaXJlY3RvcnkoJmRpciwgb3B0LT5yZXBvLT5pbmRleCwgcGF0aHNwZWMpOworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlpZiAoIWRpcl9wYXRoX21hdGNoKG9wdC0+cmVwby0+aW5kZXgsIGRpci5lbnRyaWVzW2ldLCBwYXRoc3BlYywgMCwgTlVMTCkpCisJCQljb250aW51ZTsKKwkJaGl0IHw9IGdyZXBfZmlsZShvcHQsIGRpci5lbnRyaWVzW2ldLT5uYW1lKTsKKwkJaWYgKGhpdCAmJiBvcHQtPnN0YXR1c19vbmx5KQorCQkJYnJlYWs7CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgY29udGV4dF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJaW50IHZhbHVlOworCWNvbnN0IGNoYXIgKmVuZHA7CisKKwlpZiAodW5zZXQpIHsKKwkJZ3JlcF9vcHQtPnByZV9jb250ZXh0ID0gZ3JlcF9vcHQtPnBvc3RfY29udGV4dCA9IDA7CisJCXJldHVybiAwOworCX0KKwl2YWx1ZSA9IHN0cnRvbChhcmcsIChjaGFyICoqKSZlbmRwLCAxMCk7CisJaWYgKCplbmRwKSB7CisJCXJldHVybiBlcnJvcihfKCJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIiksCisJCQkgICAgIG9wdC0+c2hvcnRfbmFtZSk7CisJfQorCWdyZXBfb3B0LT5wcmVfY29udGV4dCA9IGdyZXBfb3B0LT5wb3N0X2NvbnRleHQgPSB2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJaW50IGZyb21fc3RkaW47CisJRklMRSAqcGF0dGVybnM7CisJaW50IGxubyA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJZnJvbV9zdGRpbiA9ICFzdHJjbXAoYXJnLCAiLSIpOworCXBhdHRlcm5zID0gZnJvbV9zdGRpbiA/IHN0ZGluIDogZm9wZW4oYXJnLCAiciIpOworCWlmICghcGF0dGVybnMpCisJCWRpZV9lcnJubyhfKCJjYW5ub3Qgb3BlbiAnJXMnIiksIGFyZyk7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgcGF0dGVybnMpID09IDApIHsKKwkJLyogaWdub3JlIGVtcHR5IGxpbmUgbGlrZSBncmVwIGRvZXMgKi8KKwkJaWYgKHNiLmxlbiA9PSAwKQorCQkJY29udGludWU7CisKKwkJYXBwZW5kX2dyZXBfcGF0KGdyZXBfb3B0LCBzYi5idWYsIHNiLmxlbiwgYXJnLCArK2xubywKKwkJCQlHUkVQX1BBVFRFUk4pOworCX0KKwlpZiAoIWZyb21fc3RkaW4pCisJCWZjbG9zZShwYXR0ZXJucyk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBub3RfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiLS1ub3QiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9OT1QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFuZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICItLWFuZCIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX0FORCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICIoIiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfT1BFTl9QQVJFTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2VfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKGdyZXBfb3B0LCAiKSIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX0NMT1NFX1BBUkVOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXR0ZXJuX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKmdyZXBfb3B0ID0gb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgYXJnLCAiLWUgb3B0aW9uIiwgMCwgR1JFUF9QQVRURVJOKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9ncmVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBoaXQgPSAwOworCWludCBjYWNoZWQgPSAwLCB1bnRyYWNrZWQgPSAwLCBvcHRfZXhjbHVkZSA9IC0xOworCWludCBzZWVuX2Rhc2hkYXNoID0gMDsKKwlpbnQgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkX19pZ25vcmVkOworCWNvbnN0IGNoYXIgKnNob3dfaW5fcGFnZXIgPSBOVUxMLCAqZGVmYXVsdF9wYWdlciA9ICJkdW1teSI7CisJc3RydWN0IGdyZXBfb3B0IG9wdDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGxpc3QgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IHN0cmluZ19saXN0IHBhdGhfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IGk7CisJaW50IGR1bW15OworCWludCB1c2VfaW5kZXggPSAxOworCWludCBwYXR0ZXJuX3R5cGVfYXJnID0gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQ7CisJaW50IGFsbG93X3JldnM7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgImNhY2hlZCIsICZjYWNoZWQsCisJCQlOXygic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIpKSwKKwkJT1BUX05FR0JJVCgwLCAibm8taW5kZXgiLCAmdXNlX2luZGV4LAorCQkJIE5fKCJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIpLCAxKSwKKwkJT1BUX0JPT0woMCwgInVudHJhY2tlZCIsICZ1bnRyYWNrZWQsCisJCQlOXygic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIikpLAorCQlPUFRfU0VUX0lOVCgwLCAiZXhjbHVkZS1zdGFuZGFyZCIsICZvcHRfZXhjbHVkZSwKKwkJCSAgICBOXygiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIiksIDEpLAorCQlPUFRfQk9PTCgwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgJnJlY3Vyc2Vfc3VibW9kdWxlcywKKwkJCSBOXygicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIikpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTCgndicsICJpbnZlcnQtbWF0Y2giLCAmb3B0LmludmVydCwKKwkJCU5fKCJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIpKSwKKwkJT1BUX0JPT0woJ2knLCAiaWdub3JlLWNhc2UiLCAmb3B0Lmlnbm9yZV9jYXNlLAorCQkJTl8oImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciKSksCisJCU9QVF9CT09MKCd3JywgIndvcmQtcmVnZXhwIiwgJm9wdC53b3JkX3JlZ2V4cCwKKwkJCU5fKCJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIpKSwKKwkJT1BUX1NFVF9JTlQoJ2EnLCAidGV4dCIsICZvcHQuYmluYXJ5LAorCQkJTl8oInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiKSwgR1JFUF9CSU5BUllfVEVYVCksCisJCU9QVF9TRVRfSU5UKCdJJywgTlVMTCwgJm9wdC5iaW5hcnksCisJCQlOXygiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIiksCisJCQlHUkVQX0JJTkFSWV9OT01BVENIKSwKKwkJT1BUX0JPT0woMCwgInRleHRjb252IiwgJm9wdC5hbGxvd190ZXh0Y29udiwKKwkJCSBOXygicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIikpLAorCQlPUFRfU0VUX0lOVCgncicsICJyZWN1cnNpdmUiLCAmb3B0Lm1heF9kZXB0aCwKKwkJCSAgICBOXygic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIpLCAtMSksCisJCXsgT1BUSU9OX0lOVEVHRVIsIDAsICJtYXgtZGVwdGgiLCAmb3B0Lm1heF9kZXB0aCwgTl8oImRlcHRoIiksCisJCQlOXygiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIiksIFBBUlNFX09QVF9OT05FRywKKwkJCU5VTEwsIDEgfSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX1NFVF9JTlQoJ0UnLCAiZXh0ZW5kZWQtcmVnZXhwIiwgJnBhdHRlcm5fdHlwZV9hcmcsCisJCQkgICAgTl8oInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIiksCisJCQkgICAgR1JFUF9QQVRURVJOX1RZUEVfRVJFKSwKKwkJT1BUX1NFVF9JTlQoJ0cnLCAiYmFzaWMtcmVnZXhwIiwgJnBhdHRlcm5fdHlwZV9hcmcsCisJCQkgICAgTl8oInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIpLAorCQkJICAgIEdSRVBfUEFUVEVSTl9UWVBFX0JSRSksCisJCU9QVF9TRVRfSU5UKCdGJywgImZpeGVkLXN0cmluZ3MiLCAmcGF0dGVybl90eXBlX2FyZywKKwkJCSAgICBOXygiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiKSwKKwkJCSAgICBHUkVQX1BBVFRFUk5fVFlQRV9GSVhFRCksCisJCU9QVF9TRVRfSU5UKCdQJywgInBlcmwtcmVnZXhwIiwgJnBhdHRlcm5fdHlwZV9hcmcsCisJCQkgICAgTl8oInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIpLAorCQkJICAgIEdSRVBfUEFUVEVSTl9UWVBFX1BDUkUpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTCgnbicsICJsaW5lLW51bWJlciIsICZvcHQubGluZW51bSwgTl8oInNob3cgbGluZSBudW1iZXJzIikpLAorCQlPUFRfQk9PTCgwLCAiY29sdW1uIiwgJm9wdC5jb2x1bW5udW0sIE5fKCJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giKSksCisJCU9QVF9ORUdCSVQoJ2gnLCBOVUxMLCAmb3B0LnBhdGhuYW1lLCBOXygiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiKSwgMSksCisJCU9QVF9CSVQoJ0gnLCBOVUxMLCAmb3B0LnBhdGhuYW1lLCBOXygic2hvdyBmaWxlbmFtZXMiKSwgMSksCisJCU9QVF9ORUdCSVQoMCwgImZ1bGwtbmFtZSIsICZvcHQucmVsYXRpdmUsCisJCQlOXygic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIpLCAxKSwKKwkJT1BUX0JPT0woJ2wnLCAiZmlsZXMtd2l0aC1tYXRjaGVzIiwgJm9wdC5uYW1lX29ubHksCisJCQlOXygic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIikpLAorCQlPUFRfQk9PTCgwLCAibmFtZS1vbmx5IiwgJm9wdC5uYW1lX29ubHksCisJCQlOXygic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiKSksCisJCU9QVF9CT09MKCdMJywgImZpbGVzLXdpdGhvdXQtbWF0Y2giLAorCQkJJm9wdC51bm1hdGNoX25hbWVfb25seSwKKwkJCU5fKCJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giKSksCisJCU9QVF9CT09MX0YoJ3onLCAibnVsbCIsICZvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSwKKwkJCSAgIE5fKCJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIiksCisJCQkgICBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9CT09MKCdvJywgIm9ubHktbWF0Y2hpbmciLCAmb3B0Lm9ubHlfbWF0Y2hpbmcsCisJCQlOXygic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIpKSwKKwkJT1BUX0JPT0woJ2MnLCAiY291bnQiLCAmb3B0LmNvdW50LAorCQkJTl8oInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiKSksCisJCU9QVF9fQ09MT1IoJm9wdC5jb2xvciwgTl8oImhpZ2hsaWdodCBtYXRjaGVzIikpLAorCQlPUFRfQk9PTCgwLCAiYnJlYWsiLCAmb3B0LmZpbGVfYnJlYWssCisJCQlOXygicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiKSksCisJCU9QVF9CT09MKDAsICJoZWFkaW5nIiwgJm9wdC5oZWFkaW5nLAorCQkJTl8oInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiKSksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9DQUxMQkFDSygnQycsICJjb250ZXh0IiwgJm9wdCwgTl8oIm4iKSwKKwkJCU5fKCJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIpLAorCQkJY29udGV4dF9jYWxsYmFjayksCisJCU9QVF9JTlRFR0VSKCdCJywgImJlZm9yZS1jb250ZXh0IiwgJm9wdC5wcmVfY29udGV4dCwKKwkJCU5fKCJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIikpLAorCQlPUFRfSU5URUdFUignQScsICJhZnRlci1jb250ZXh0IiwgJm9wdC5wb3N0X2NvbnRleHQsCisJCQlOXygic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIikpLAorCQlPUFRfSU5URUdFUigwLCAidGhyZWFkcyIsICZudW1fdGhyZWFkcywKKwkJCU5fKCJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIikpLAorCQlPUFRfTlVNQkVSX0NBTExCQUNLKCZvcHQsIE5fKCJzaG9ydGN1dCBmb3IgLUMgTlVNIiksCisJCQljb250ZXh0X2NhbGxiYWNrKSwKKwkJT1BUX0JPT0woJ3AnLCAic2hvdy1mdW5jdGlvbiIsICZvcHQuZnVuY25hbWUsCisJCQlOXygic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIpKSwKKwkJT1BUX0JPT0woJ1cnLCAiZnVuY3Rpb24tY29udGV4dCIsICZvcHQuZnVuY2JvZHksCisJCQlOXygic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iKSksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9DQUxMQkFDSygnZicsIE5VTEwsICZvcHQsIE5fKCJmaWxlIiksCisJCQlOXygicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiKSwgZmlsZV9jYWxsYmFjayksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnZScsIE5VTEwsICZvcHQsIE5fKCJwYXR0ZXJuIiksCisJCQlOXygibWF0Y2ggPHBhdHRlcm4+IiksIFBBUlNFX09QVF9OT05FRywgcGF0dGVybl9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImFuZCIsICZvcHQsIE5VTEwsCisJCSAgTl8oImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiKSwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIGFuZF9jYWxsYmFjayB9LAorCQlPUFRfQk9PTCgwLCAib3IiLCAmZHVtbXksICIiKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJub3QiLCAmb3B0LCBOVUxMLCAiIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIG5vdF9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJygnLCBOVUxMLCAmb3B0LCBOVUxMLCAiIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9EQVNILAorCQkgIG9wZW5fY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICcpJywgTlVMTCwgJm9wdCwgTlVMTCwgIiIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCwKKwkJICBjbG9zZV9jYWxsYmFjayB9LAorCQlPUFRfX1FVSUVUKCZvcHQuc3RhdHVzX29ubHksCisJCQkgICBOXygiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiKSksCisJCU9QVF9CT09MKDAsICJhbGwtbWF0Y2giLCAmb3B0LmFsbF9tYXRjaCwKKwkJCU5fKCJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIikpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJkZWJ1ZyIsICZvcHQuZGVidWcsCisJCQkgICAgICBOXygic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iKSwKKwkJCSAgICAgIDEsIFBBUlNFX09QVF9ISURERU4pLAorCQlPUFRfR1JPVVAoIiIpLAorCQl7IE9QVElPTl9TVFJJTkcsICdPJywgIm9wZW4tZmlsZXMtaW4tcGFnZXIiLCAmc2hvd19pbl9wYWdlciwKKwkJCU5fKCJwYWdlciIpLCBOXygic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTk9DT01QTEVURSwKKwkJCU5VTEwsIChpbnRwdHJfdClkZWZhdWx0X3BhZ2VyIH0sCisJCU9QVF9CT09MX0YoMCwgImV4dC1ncmVwIiwgJmV4dGVybmFsX2dyZXBfYWxsb3dlZF9faWdub3JlZCwKKwkJCSAgIE5fKCJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiKSwKKwkJCSAgIFBBUlNFX09QVF9OT0NPTVBMRVRFKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWluaXRfZ3JlcF9kZWZhdWx0cyh0aGVfcmVwb3NpdG9yeSk7CisJZ2l0X2NvbmZpZyhncmVwX2NtZF9jb25maWcsIE5VTEwpOworCWdyZXBfaW5pdCgmb3B0LCB0aGVfcmVwb3NpdG9yeSwgcHJlZml4KTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8gLS0gdGhlbiB0aGUgcGF0aHMgbXVzdCBleGlzdCBpbiB0aGUgd29ya2luZworCSAqIHRyZWUuICBJZiB0aGVyZSBpcyBubyBleHBsaWNpdCBwYXR0ZXJuIHNwZWNpZmllZCB3aXRoIC1lIG9yCisJICogLWYsIHdlIHRha2UgdGhlIGZpcnN0IHVucmVjb2duaXplZCBub24gb3B0aW9uIHRvIGJlIHRoZQorCSAqIHBhdHRlcm4sIGJ1dCB0aGVuIHdoYXQgZm9sbG93cyBpdCBtdXN0IGJlIHplcm8gb3IgbW9yZQorCSAqIHZhbGlkIHJlZnMgdXAgdG8gdGhlIC0tIChpZiBleGlzdHMpLCBhbmQgdGhlbiBleGlzdGluZworCSAqIHBhdGhzLiAgSWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgcGF0dGVybiwgdGhlbiB0aGUgZmlyc3QKKwkgKiB1bnJlY29nbml6ZWQgbm9uIG9wdGlvbiBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWZzIGxpc3QKKwkgKiB0aGF0IGNvbnRpbnVlcyB1cCB0byB0aGUgLS0gKGlmIGV4aXN0cyksIGFuZCB0aGVuIHBhdGhzLgorCSAqLworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ3JlcF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUocGF0dGVybl90eXBlX2FyZywgJm9wdCk7CisKKwlpZiAodXNlX2luZGV4ICYmICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkgeworCQlpbnQgZmFsbGJhY2sgPSAwOworCQlnaXRfY29uZmlnX2dldF9ib29sKCJncmVwLmZhbGxiYWNrdG9ub2luZGV4IiwgJmZhbGxiYWNrKTsKKwkJaWYgKGZhbGxiYWNrKQorCQkJdXNlX2luZGV4ID0gMDsKKwkJZWxzZQorCQkJLyogZGllIHRoZSBzYW1lIHdheSBhcyBpZiB3ZSBkaWQgaXQgYXQgdGhlIGJlZ2lubmluZyAqLworCQkJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCX0KKwkvKiBJZ25vcmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgaWYgLS1uby1pbmRleCBpcyBnaXZlbiBvciBpbXBsaWVkICovCisJaWYgKCF1c2VfaW5kZXgpCisJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IDA7CisKKwkvKgorCSAqIHNraXAgYSAtLSBzZXBhcmF0b3I7IHdlIGtub3cgaXQgY2Fubm90IGJlCisJICogc2VwYXJhdGluZyByZXZpc2lvbnMgZnJvbSBwYXRobmFtZXMgaWYKKwkgKiB3ZSBoYXZlbid0IGV2ZW4gaGFkIGFueSBwYXR0ZXJucyB5ZXQKKwkgKi8KKwlpZiAoYXJnYyA+IDAgJiYgIW9wdC5wYXR0ZXJuX2xpc3QgJiYgIXN0cmNtcChhcmd2WzBdLCAiLS0iKSkgeworCQlhcmd2Kys7CisJCWFyZ2MtLTsKKwl9CisKKwkvKiBGaXJzdCB1bnJlY29nbml6ZWQgbm9uLW9wdGlvbiB0b2tlbiAqLworCWlmIChhcmdjID4gMCAmJiAhb3B0LnBhdHRlcm5fbGlzdCkgeworCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZ3ZbMF0sICJjb21tYW5kIGxpbmUiLCAwLAorCQkJCSAgICBHUkVQX1BBVFRFUk4pOworCQlhcmd2Kys7CisJCWFyZ2MtLTsKKwl9CisKKwlpZiAoc2hvd19pbl9wYWdlciA9PSBkZWZhdWx0X3BhZ2VyKQorCQlzaG93X2luX3BhZ2VyID0gZ2l0X3BhZ2VyKDEpOworCWlmIChzaG93X2luX3BhZ2VyKSB7CisJCW9wdC5jb2xvciA9IDA7CisJCW9wdC5uYW1lX29ubHkgPSAxOworCQlvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSA9IDE7CisJCW9wdC5vdXRwdXRfcHJpdiA9ICZwYXRoX2xpc3Q7CisJCW9wdC5vdXRwdXQgPSBhcHBlbmRfcGF0aDsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZwYXRoX2xpc3QsIHNob3dfaW5fcGFnZXIpOworCX0KKworCWlmICghb3B0LnBhdHRlcm5fbGlzdCkKKwkJZGllKF8oIm5vIHBhdHRlcm4gZ2l2ZW4iKSk7CisKKwkvKiAtLW9ubHktbWF0Y2hpbmcgaGFzIG5vIGVmZmVjdCB3aXRoIC0taW52ZXJ0LiAqLworCWlmIChvcHQuaW52ZXJ0KQorCQlvcHQub25seV9tYXRjaGluZyA9IDA7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gZmluZCAiLS0iIGluIGEgc2VwYXJhdGUgcGFzcywgYmVjYXVzZSBpdHMgcHJlc2VuY2UKKwkgKiBpbmZsdWVuY2VzIGhvdyB3ZSB3aWxsIHBhcnNlIGFyZ3VtZW50cyB0aGF0IGNvbWUgYmVmb3JlIGl0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpIHsKKwkJCXNlZW5fZGFzaGRhc2ggPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIFJlc29sdmUgYW55IHJldiBhcmd1bWVudHMuIElmIHdlIGhhdmUgYSBkYXNoZGFzaCwgdGhlbiBldmVyeXRoaW5nIHVwCisJICogdG8gaXQgbXVzdCByZXNvbHZlIGFzIGEgcmV2LiBJZiBub3QsIHRoZW4gd2Ugc3RvcCBhdCB0aGUgZmlyc3QKKwkgKiBub24tcmV2IGFuZCBhc3N1bWUgZXZlcnl0aGluZyBlbHNlIGlzIGEgcGF0aC4KKwkgKi8KKwlhbGxvd19yZXZzID0gdXNlX2luZGV4ICYmICF1bnRyYWNrZWQ7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IG9iamVjdF9jb250ZXh0IG9jOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWFsbG93X3JldnMpIHsKKwkJCWlmIChzZWVuX2Rhc2hkYXNoKQorCQkJCWRpZShfKCItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGdldF9vaWRfd2l0aF9jb250ZXh0KHRoZV9yZXBvc2l0b3J5LCBhcmcsCisJCQkJCSBHRVRfT0lEX1JFQ09SRF9QQVRILAorCQkJCQkgJm9pZCwgJm9jKSkgeworCQkJaWYgKHNlZW5fZGFzaGRhc2gpCisJCQkJZGllKF8oInVuYWJsZSB0byByZXNvbHZlIHJldmlzaW9uOiAlcyIpLCBhcmcpOworCQkJYnJlYWs7CisJCX0KKworCQlvYmplY3QgPSBwYXJzZV9vYmplY3Rfb3JfZGllKCZvaWQsIGFyZyk7CisJCWlmICghc2Vlbl9kYXNoZGFzaCkKKwkJCXZlcmlmeV9ub25fZmlsZW5hbWUocHJlZml4LCBhcmcpOworCQlhZGRfb2JqZWN0X2FycmF5X3dpdGhfcGF0aChvYmplY3QsIGFyZywgJmxpc3QsIG9jLm1vZGUsIG9jLnBhdGgpOworCQlmcmVlKG9jLnBhdGgpOworCX0KKworCS8qCisJICogQW55dGhpbmcgbGVmdCBvdmVyIGlzIHByZXN1bWVkIHRvIGJlIGEgcGF0aC4gQnV0IGluIHRoZSBub24tZGFzaGRhc2gKKwkgKiAiZG8gd2hhdCBJIG1lYW4iIGNhc2UsIHdlIHZlcmlmeSBhbmQgY29tcGxhaW4gd2hlbiB0aGF0IGlzbid0IHRydWUuCisJICovCisJaWYgKCFzZWVuX2Rhc2hkYXNoKSB7CisJCWludCBqOworCQlmb3IgKGogPSBpOyBqIDwgYXJnYzsgaisrKQorCQkJdmVyaWZ5X2ZpbGVuYW1lKHByZWZpeCwgYXJndltqXSwgaiA9PSBpICYmIGFsbG93X3JldnMpOworCX0KKworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QgfAorCQkgICAgICAgKG9wdC5tYXhfZGVwdGggIT0gLTEgPyBQQVRIU1BFQ19NQVhERVBUSF9WQUxJRCA6IDApLAorCQkgICAgICAgcHJlZml4LCBhcmd2ICsgaSk7CisJcGF0aHNwZWMubWF4X2RlcHRoID0gb3B0Lm1heF9kZXB0aDsKKwlwYXRoc3BlYy5yZWN1cnNpdmUgPSAxOworCXBhdGhzcGVjLnJlY3Vyc2Vfc3VibW9kdWxlcyA9ICEhcmVjdXJzZV9zdWJtb2R1bGVzOworCisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyAmJiB1bnRyYWNrZWQpCisJCWRpZShfKCItLXVudHJhY2tlZCBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiKSk7CisKKwlpZiAoc2hvd19pbl9wYWdlcikgeworCQlpZiAobnVtX3RocmVhZHMgPiAxKQorCQkJd2FybmluZyhfKCJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIikpOworCQludW1fdGhyZWFkcyA9IDE7CisJfSBlbHNlIGlmICghSEFWRV9USFJFQURTICYmIG51bV90aHJlYWRzID4gMSkgeworCQl3YXJuaW5nKF8oIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIikpOworCQludW1fdGhyZWFkcyA9IDE7CisJfSBlbHNlIGlmIChudW1fdGhyZWFkcyA8IDApCisJCWRpZShfKCJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIiksIG51bV90aHJlYWRzKTsKKwllbHNlIGlmIChudW1fdGhyZWFkcyA9PSAwKQorCQludW1fdGhyZWFkcyA9IEhBVkVfVEhSRUFEUyA/IG9ubGluZV9jcHVzKCkgOiAxOworCisJaWYgKG51bV90aHJlYWRzID4gMSkgeworCQlpZiAoIUhBVkVfVEhSRUFEUykKKwkJCUJVRygiU29tZWJvZHkgZ290IG51bV90aHJlYWRzIGNhbGN1bGF0aW9uIHdyb25nISIpOworCQlpZiAoIShvcHQubmFtZV9vbmx5IHx8IG9wdC51bm1hdGNoX25hbWVfb25seSB8fCBvcHQuY291bnQpCisJCSAgICAmJiAob3B0LnByZV9jb250ZXh0IHx8IG9wdC5wb3N0X2NvbnRleHQgfHwKKwkJCW9wdC5maWxlX2JyZWFrIHx8IG9wdC5mdW5jYm9keSkpCisJCQlza2lwX2ZpcnN0X2xpbmUgPSAxOworCisJCS8qCisJCSAqIFByZS1yZWFkIGdpdG1vZHVsZXMgKGlmIG5vdCByZWFkIGFscmVhZHkpIGFuZCBmb3JjZSBlYWdlcgorCQkgKiBpbml0aWFsaXphdGlvbiBvZiBwYWNrZWRfZ2l0IHRvIHByZXZlbnQgcmFjeSBsYXp5CisJCSAqIHJlYWRpbmcvaW5pdGlhbGl6YXRpb24gb25jZSB3b3JrZXIgdGhyZWFkcyBhcmUgc3RhcnRlZC4KKwkJICovCisJCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMpCisJCQlyZXBvX3JlYWRfZ2l0bW9kdWxlcyh0aGVfcmVwb3NpdG9yeSwgMSk7CisJCWlmIChzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJCSh2b2lkKWdldF9wYWNrZWRfZ2l0KHRoZV9yZXBvc2l0b3J5KTsKKworCQlzdGFydF90aHJlYWRzKCZvcHQpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBjb21waWxlZCBwYXR0ZXJucyBvbiB0aGUgbWFpbiBwYXRoIGFyZSBvbmx5CisJCSAqIHVzZWQgd2hlbiBub3QgdXNpbmcgdGhyZWFkaW5nLiBPdGhlcndpc2UKKwkJICogc3RhcnRfdGhyZWFkcygpIGFib3ZlIGNhbGxzIGNvbXBpbGVfZ3JlcF9wYXR0ZXJucygpCisJCSAqIGZvciBlYWNoIHRocmVhZC4KKwkJICovCisJCWNvbXBpbGVfZ3JlcF9wYXR0ZXJucygmb3B0KTsKKwl9CisKKwlpZiAoc2hvd19pbl9wYWdlciAmJiAoY2FjaGVkIHx8IGxpc3QubnIpKQorCQlkaWUoXygiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIikpOworCisJaWYgKHNob3dfaW5fcGFnZXIgJiYgb3B0LnBhdHRlcm5fbGlzdCAmJiAhb3B0LnBhdHRlcm5fbGlzdC0+bmV4dCkgeworCQljb25zdCBjaGFyICpwYWdlciA9IHBhdGhfbGlzdC5pdGVtc1swXS5zdHJpbmc7CisJCWludCBsZW4gPSBzdHJsZW4ocGFnZXIpOworCisJCWlmIChsZW4gPiA0ICYmIGlzX2Rpcl9zZXAocGFnZXJbbGVuIC0gNV0pKQorCQkJcGFnZXIgKz0gbGVuIC0gNDsKKworCQlpZiAob3B0Lmlnbm9yZV9jYXNlICYmICFzdHJjbXAoImxlc3MiLCBwYWdlcikpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnBhdGhfbGlzdCwgIi1JIik7CisKKwkJaWYgKCFzdHJjbXAoImxlc3MiLCBwYWdlcikgfHwgIXN0cmNtcCgidmkiLCBwYWdlcikpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiKy8lcyVzIiwKKwkJCQkJc3RyY21wKCJsZXNzIiwgcGFnZXIpID8gIiIgOiAiKiIsCisJCQkJCW9wdC5wYXR0ZXJuX2xpc3QtPnBhdHRlcm4pOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZwYXRoX2xpc3QsCisJCQkJCSAgIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCQl9CisJfQorCisJaWYgKCFzaG93X2luX3BhZ2VyICYmICFvcHQuc3RhdHVzX29ubHkpCisJCXNldHVwX3BhZ2VyKCk7CisKKwlpZiAoIXVzZV9pbmRleCAmJiAodW50cmFja2VkIHx8IGNhY2hlZCkpCisJCWRpZShfKCItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiKSk7CisKKwlpZiAoIXVzZV9pbmRleCB8fCB1bnRyYWNrZWQpIHsKKwkJaW50IHVzZV9leGNsdWRlID0gKG9wdF9leGNsdWRlIDwgMCkgPyB1c2VfaW5kZXggOiAhIW9wdF9leGNsdWRlOworCQloaXQgPSBncmVwX2RpcmVjdG9yeSgmb3B0LCAmcGF0aHNwZWMsIHVzZV9leGNsdWRlLCB1c2VfaW5kZXgpOworCX0gZWxzZSBpZiAoMCA8PSBvcHRfZXhjbHVkZSkgeworCQlkaWUoXygiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiKSk7CisJfSBlbHNlIGlmICghbGlzdC5ucikgeworCQlpZiAoIWNhY2hlZCkKKwkJCXNldHVwX3dvcmtfdHJlZSgpOworCisJCWhpdCA9IGdyZXBfY2FjaGUoJm9wdCwgJnBhdGhzcGVjLCBjYWNoZWQpOworCX0gZWxzZSB7CisJCWlmIChjYWNoZWQpCisJCQlkaWUoXygiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIikpOworCisJCWhpdCA9IGdyZXBfb2JqZWN0cygmb3B0LCAmcGF0aHNwZWMsICZsaXN0KTsKKwl9CisKKwlpZiAobnVtX3RocmVhZHMgPiAxKQorCQloaXQgfD0gd2FpdF9hbGwoKTsKKwlpZiAoaGl0ICYmIHNob3dfaW5fcGFnZXIpCisJCXJ1bl9wYWdlcigmb3B0LCBwcmVmaXgpOworCWNsZWFyX3BhdGhzcGVjKCZwYXRoc3BlYyk7CisJZnJlZV9ncmVwX3BhdHRlcm5zKCZvcHQpOworCWdyZXBfZGVzdHJveSgpOworCXJldHVybiAhaGl0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9oYXNoLW9iamVjdC5jIGIvYnVpbHRpbi9oYXNoLW9iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGVmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2hhc2gtb2JqZWN0LmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKiBDb3B5cmlnaHQgKEMpIEp1bmlvIEMgSGFtYW5vLCAyMDA1CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisKKy8qCisgKiBUaGlzIGlzIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBhbmQgYXMgc3VjaCBpdAorICogbmVlZHMgdG8gYnlwYXNzIHRoZSBkYXRhIGNvbnZlcnNpb24gcGVyZm9ybWVkIGJ5LCBhbmQgdGhlIHR5cGUKKyAqIGxpbWl0YXRpb24gaW1wb3NlZCBieSwgaW5kZXhfZmQoKSBhbmQgaXRzIGNhbGxlZXMuCisgKi8KK3N0YXRpYyBpbnQgaGFzaF9saXRlcmFsbHkoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmQsIGNvbnN0IGNoYXIgKnR5cGUsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCBmZCwgNDA5NikgPCAwKQorCQlyZXQgPSAtMTsKKwllbHNlCisJCXJldCA9IGhhc2hfb2JqZWN0X2ZpbGVfbGl0ZXJhbGx5KGJ1Zi5idWYsIGJ1Zi5sZW4sIHR5cGUsIG9pZCwKKwkJCQkJCSBmbGFncyk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaGFzaF9mZChpbnQgZmQsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzLAorCQkgICAgaW50IGxpdGVyYWxseSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWlmIChmc3RhdChmZCwgJnN0KSA8IDAgfHwKKwkgICAgKGxpdGVyYWxseQorCSAgICAgPyBoYXNoX2xpdGVyYWxseSgmb2lkLCBmZCwgdHlwZSwgZmxhZ3MpCisJICAgICA6IGluZGV4X2ZkKHRoZV9yZXBvc2l0b3J5LT5pbmRleCwgJm9pZCwgZmQsICZzdCwKKwkJCXR5cGVfZnJvbV9zdHJpbmcodHlwZSksIHBhdGgsIGZsYWdzKSkpCisJCWRpZSgoZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVCkKKwkJICAgID8gIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCisJCSAgICA6ICJVbmFibGUgdG8gaGFzaCAlcyIsIHBhdGgpOworCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoJm9pZCkpOworCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJoYXNoIHRvIHN0ZG91dCIpOworfQorCitzdGF0aWMgdm9pZCBoYXNoX29iamVjdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICp2cGF0aCwKKwkJCXVuc2lnbmVkIGZsYWdzLCBpbnQgbGl0ZXJhbGx5KQoreworCWludCBmZDsKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubygiQ2Fubm90IG9wZW4gJyVzJyIsIHBhdGgpOworCWhhc2hfZmQoZmQsIHR5cGUsIHZwYXRoLCBmbGFncywgbGl0ZXJhbGx5KTsKK30KKworc3RhdGljIHZvaWQgaGFzaF9zdGRpbl9wYXRocyhjb25zdCBjaGFyICp0eXBlLCBpbnQgbm9fZmlsdGVycywgdW5zaWduZWQgZmxhZ3MsCisJCQkgICAgIGludCBsaXRlcmFsbHkpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4pICE9IEVPRikgeworCQlpZiAoYnVmLmJ1ZlswXSA9PSAnIicpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmdW5xdW90ZWQpOworCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmdW5xdW90ZWQsIGJ1Zi5idWYsIE5VTEwpKQorCQkJCWRpZSgibGluZSBpcyBiYWRseSBxdW90ZWQiKTsKKwkJCXN0cmJ1Zl9zd2FwKCZidWYsICZ1bnF1b3RlZCk7CisJCX0KKwkJaGFzaF9vYmplY3QoYnVmLmJ1ZiwgdHlwZSwgbm9fZmlsdGVycyA/IE5VTEwgOiBidWYuYnVmLCBmbGFncywKKwkJCSAgICBsaXRlcmFsbHkpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdW5xdW90ZWQpOworfQorCitpbnQgY21kX2hhc2hfb2JqZWN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGFzaF9vYmplY3RfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gWy0tXSA8ZmlsZT4uLi4iKSwKKwkJTl8oImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIpLAorCQlOVUxMCisJfTsKKwljb25zdCBjaGFyICp0eXBlID0gYmxvYl90eXBlOworCWludCBoYXNoc3RkaW4gPSAwOworCWludCBzdGRpbl9wYXRocyA9IDA7CisJaW50IG5vX2ZpbHRlcnMgPSAwOworCWludCBsaXRlcmFsbHkgPSAwOworCWludCBub25naXQgPSAwOworCXVuc2lnbmVkIGZsYWdzID0gSEFTSF9GT1JNQVRfQ0hFQ0s7CisJY29uc3QgY2hhciAqdnBhdGggPSBOVUxMOworCWNvbnN0IHN0cnVjdCBvcHRpb24gaGFzaF9vYmplY3Rfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCd0JywgTlVMTCwgJnR5cGUsIE5fKCJ0eXBlIiksIE5fKCJvYmplY3QgdHlwZSIpKSwKKwkJT1BUX0JJVCgndycsIE5VTEwsICZmbGFncywgTl8oIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIiksCisJCQlIQVNIX1dSSVRFX09CSkVDVCksCisJCU9QVF9DT1VOVFVQKCAwICwgInN0ZGluIiwgJmhhc2hzdGRpbiwgTl8oInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIikpLAorCQlPUFRfQk9PTCggMCAsICJzdGRpbi1wYXRocyIsICZzdGRpbl9wYXRocywgTl8oInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIikpLAorCQlPUFRfQk9PTCggMCAsICJuby1maWx0ZXJzIiwgJm5vX2ZpbHRlcnMsIE5fKCJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIpKSwKKwkJT1BUX0JPT0woIDAsICJsaXRlcmFsbHkiLCAmbGl0ZXJhbGx5LCBOXygianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IikpLAorCQlPUFRfU1RSSU5HKCAwICwgInBhdGgiLCAmdnBhdGgsIE5fKCJmaWxlIiksIE5fKCJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlpbnQgaTsKKwljb25zdCBjaGFyICplcnJzdHIgPSBOVUxMOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBoYXNoX29iamVjdF9vcHRpb25zLAorCQkJICAgICBoYXNoX29iamVjdF91c2FnZSwgMCk7CisKKwlpZiAoZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVCkKKwkJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWVsc2UKKwkJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CisKKwlpZiAodnBhdGggJiYgcHJlZml4KQorCQl2cGF0aCA9IHhzdHJkdXAocHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgdnBhdGgpKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWlmIChzdGRpbl9wYXRocykgeworCQlpZiAoaGFzaHN0ZGluKQorCQkJZXJyc3RyID0gIkNhbid0IHVzZSAtLXN0ZGluLXBhdGhzIHdpdGggLS1zdGRpbiI7CisJCWVsc2UgaWYgKGFyZ2MpCisJCQllcnJzdHIgPSAiQ2FuJ3Qgc3BlY2lmeSBmaWxlcyB3aXRoIC0tc3RkaW4tcGF0aHMiOworCQllbHNlIGlmICh2cGF0aCkKKwkJCWVycnN0ciA9ICJDYW4ndCB1c2UgLS1zdGRpbi1wYXRocyB3aXRoIC0tcGF0aCI7CisJfQorCWVsc2UgeworCQlpZiAoaGFzaHN0ZGluID4gMSkKKwkJCWVycnN0ciA9ICJNdWx0aXBsZSAtLXN0ZGluIGFyZ3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZCI7CisJCWlmICh2cGF0aCAmJiBub19maWx0ZXJzKQorCQkJZXJyc3RyID0gIkNhbid0IHVzZSAtLXBhdGggd2l0aCAtLW5vLWZpbHRlcnMiOworCX0KKworCWlmIChlcnJzdHIpIHsKKwkJZXJyb3IoIiVzIiwgZXJyc3RyKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGhhc2hfb2JqZWN0X3VzYWdlLCBoYXNoX29iamVjdF9vcHRpb25zKTsKKwl9CisKKwlpZiAoaGFzaHN0ZGluKQorCQloYXNoX2ZkKDAsIHR5cGUsIHZwYXRoLCBmbGFncywgbGl0ZXJhbGx5KTsKKworCWZvciAoaSA9IDAgOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCisJCWlmIChwcmVmaXgpCisJCQlhcmcgPSB0b19mcmVlID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgYXJnKTsKKwkJaGFzaF9vYmplY3QoYXJnLCB0eXBlLCBub19maWx0ZXJzID8gTlVMTCA6IHZwYXRoID8gdnBhdGggOiBhcmcsCisJCQkgICAgZmxhZ3MsIGxpdGVyYWxseSk7CisJCWZyZWUodG9fZnJlZSk7CisJfQorCisJaWYgKHN0ZGluX3BhdGhzKQorCQloYXNoX3N0ZGluX3BhdGhzKHR5cGUsIG5vX2ZpbHRlcnMsIGZsYWdzLCBsaXRlcmFsbHkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2hlbHAuYyBiL2J1aWx0aW4vaGVscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NTkwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2hlbHAuYwpAQCAtMCwwICsxLDUzNyBAQAorLyoKKyAqIEJ1aWx0aW4gaGVscCBjb21tYW5kCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgImhlbHAuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorCisjaWZuZGVmIERFRkFVTFRfSEVMUF9GT1JNQVQKKyNkZWZpbmUgREVGQVVMVF9IRUxQX0ZPUk1BVCAibWFuIgorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgbWFuX3ZpZXdlcl9saXN0IHsKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9saXN0ICpuZXh0OworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK30gKm1hbl92aWV3ZXJfbGlzdDsKKworc3RhdGljIHN0cnVjdCBtYW5fdmlld2VyX2luZm9fbGlzdCB7CisJc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0ICpuZXh0OworCWNvbnN0IGNoYXIgKmluZm87CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqbWFuX3ZpZXdlcl9pbmZvX2xpc3Q7CisKK2VudW0gaGVscF9mb3JtYXQgeworCUhFTFBfRk9STUFUX05PTkUsCisJSEVMUF9GT1JNQVRfTUFOLAorCUhFTFBfRk9STUFUX0lORk8sCisJSEVMUF9GT1JNQVRfV0VCCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaHRtbF9wYXRoOworCitzdGF0aWMgaW50IHNob3dfYWxsID0gMDsKK3N0YXRpYyBpbnQgc2hvd19ndWlkZXMgPSAwOworc3RhdGljIGludCBzaG93X2NvbmZpZzsKK3N0YXRpYyBpbnQgdmVyYm9zZSA9IDE7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CitzdGF0aWMgZW51bSBoZWxwX2Zvcm1hdCBoZWxwX2Zvcm1hdCA9IEhFTFBfRk9STUFUX05PTkU7CitzdGF0aWMgaW50IGV4Y2x1ZGVfZ3VpZGVzOworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9oZWxwX29wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTCgnYScsICJhbGwiLCAmc2hvd19hbGwsIE5fKCJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIikpLAorCU9QVF9ISURERU5fQk9PTCgwLCAiZXhjbHVkZS1ndWlkZXMiLCAmZXhjbHVkZV9ndWlkZXMsIE5fKCJleGNsdWRlIGd1aWRlcyIpKSwKKwlPUFRfQk9PTCgnZycsICJndWlkZXMiLCAmc2hvd19ndWlkZXMsIE5fKCJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiKSksCisJT1BUX0JPT0woJ2MnLCAiY29uZmlnIiwgJnNob3dfY29uZmlnLCBOXygicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiKSksCisJT1BUX1NFVF9JTlRfRigwLCAiY29uZmlnLWZvci1jb21wbGV0aW9uIiwgJnNob3dfY29uZmlnLCAiIiwgMiwgUEFSU0VfT1BUX0hJRERFTiksCisJT1BUX1NFVF9JTlQoJ20nLCAibWFuIiwgJmhlbHBfZm9ybWF0LCBOXygic2hvdyBtYW4gcGFnZSIpLCBIRUxQX0ZPUk1BVF9NQU4pLAorCU9QVF9TRVRfSU5UKCd3JywgIndlYiIsICZoZWxwX2Zvcm1hdCwgTl8oInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIiksCisJCQlIRUxQX0ZPUk1BVF9XRUIpLAorCU9QVF9TRVRfSU5UKCdpJywgImluZm8iLCAmaGVscF9mb3JtYXQsIE5fKCJzaG93IGluZm8gcGFnZSIpLAorCQkJSEVMUF9GT1JNQVRfSU5GTyksCisJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIpKSwKKwlPUFRfRU5EKCksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5faGVscF91c2FnZVtdID0geworCU5fKCJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGVudW0gaGVscF9mb3JtYXQgcGFyc2VfaGVscF9mb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCWlmICghc3RyY21wKGZvcm1hdCwgIm1hbiIpKQorCQlyZXR1cm4gSEVMUF9GT1JNQVRfTUFOOworCWlmICghc3RyY21wKGZvcm1hdCwgImluZm8iKSkKKwkJcmV0dXJuIEhFTFBfRk9STUFUX0lORk87CisJaWYgKCFzdHJjbXAoZm9ybWF0LCAid2ViIikgfHwgIXN0cmNtcChmb3JtYXQsICJodG1sIikpCisJCXJldHVybiBIRUxQX0ZPUk1BVF9XRUI7CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlIF9naXRfY29uZmlnKCkgaW4gZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdQorCSAqIGFkZCBuZXcgaGVscCBmb3JtYXRzLgorCSAqLworCWRpZShfKCJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIpLCBmb3JtYXQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X21hbl92aWV3ZXJfaW5mbyhjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBtYW5fdmlld2VyX2luZm9fbGlzdCAqdmlld2VyOworCisJZm9yICh2aWV3ZXIgPSBtYW5fdmlld2VyX2luZm9fbGlzdDsgdmlld2VyOyB2aWV3ZXIgPSB2aWV3ZXItPm5leHQpCisJeworCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdmlld2VyLT5uYW1lKSkKKwkJCXJldHVybiB2aWV3ZXItPmluZm87CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24odm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGVjX3Byb2Nlc3MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndl9lY1tdID0geyAiZW1hY3NjbGllbnQiLCAiLS12ZXJzaW9uIiwgTlVMTCB9OworCWludCB2ZXJzaW9uOworCisJLyogZW1hY3NjbGllbnQgcHJpbnRzIGl0cyB2ZXJzaW9uIG51bWJlciBvbiBzdGRlcnIgKi8KKwllY19wcm9jZXNzLmFyZ3YgPSBhcmd2X2VjOworCWVjX3Byb2Nlc3MuZXJyID0gLTE7CisJZWNfcHJvY2Vzcy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmZWNfcHJvY2VzcykpCisJCXJldHVybiBlcnJvcihfKCJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIikpOworCisJc3RyYnVmX3JlYWQoJmJ1ZmZlciwgZWNfcHJvY2Vzcy5lcnIsIDIwKTsKKwljbG9zZShlY19wcm9jZXNzLmVycik7CisKKwkvKgorCSAqIERvbid0IGJvdGhlciBjaGVja2luZyByZXR1cm4gdmFsdWUsIGJlY2F1c2UgImVtYWNzY2xpZW50IC0tdmVyc2lvbiIKKwkgKiBzZWVtcyB0byBhbHdheXMgZXhpdHMgd2l0aCBjb2RlIDEuCisJICovCisJZmluaXNoX2NvbW1hbmQoJmVjX3Byb2Nlc3MpOworCisJaWYgKCFzdGFydHNfd2l0aChidWZmZXIuYnVmLCAiZW1hY3NjbGllbnQiKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKF8oIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIpKTsKKwl9CisKKwlzdHJidWZfcmVtb3ZlKCZidWZmZXIsIDAsIHN0cmxlbigiZW1hY3NjbGllbnQiKSk7CisJdmVyc2lvbiA9IGF0b2koYnVmZmVyLmJ1Zik7CisKKwlpZiAodmVyc2lvbiA8IDIyKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCQlyZXR1cm4gZXJyb3IoXygiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIpLAorCQkJdmVyc2lvbik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfd29tYW5fZW1hY3MoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwlpZiAoIWNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24oKSkgeworCQkvKiBUaGlzIHdvcmtzIG9ubHkgd2l0aCBlbWFjc2NsaWVudCB2ZXJzaW9uID49IDIyLiAqLworCQlzdHJ1Y3Qgc3RyYnVmIG1hbl9wYWdlID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKCFwYXRoKQorCQkJcGF0aCA9ICJlbWFjc2NsaWVudCI7CisJCXN0cmJ1Zl9hZGRmKCZtYW5fcGFnZSwgIih3b21hbiBcIiVzXCIpIiwgcGFnZSk7CisJCWV4ZWNscChwYXRoLCAiZW1hY3NjbGllbnQiLCAiLWUiLCBtYW5fcGFnZS5idWYsIChjaGFyICopTlVMTCk7CisJCXdhcm5pbmdfZXJybm8oXygiZmFpbGVkIHRvIGV4ZWMgJyVzJyIpLCBwYXRoKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm1hbl9wYWdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2tvbnF1ZXJvcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYWdlKQoreworCWNvbnN0IGNoYXIgKmRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKKwlpZiAoZGlzcGxheSAmJiAqZGlzcGxheSkgeworCQlzdHJ1Y3Qgc3RyYnVmIG1hbl9wYWdlID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gImtmbWNsaWVudCI7CisKKwkJLyogSXQncyBzaW1wbGVyIHRvIGxhdW5jaCBrb25xdWVyb3IgdXNpbmcga2ZtY2xpZW50LiAqLworCQlpZiAocGF0aCkgeworCQkJc2l6ZV90IGxlbjsKKwkJCWlmIChzdHJpcF9zdWZmaXgocGF0aCwgIi9rb25xdWVyb3IiLCAmbGVuKSkKKwkJCQlwYXRoID0geHN0cmZtdCgiJS4qcy9rZm1jbGllbnQiLCAoaW50KWxlbiwgcGF0aCk7CisJCQlmaWxlbmFtZSA9IGJhc2VuYW1lKChjaGFyICopcGF0aCk7CisJCX0gZWxzZQorCQkJcGF0aCA9ICJrZm1jbGllbnQiOworCQlzdHJidWZfYWRkZigmbWFuX3BhZ2UsICJtYW46JXMoMSkiLCBwYWdlKTsKKwkJZXhlY2xwKHBhdGgsIGZpbGVuYW1lLCAibmV3VGFiIiwgbWFuX3BhZ2UuYnVmLCAoY2hhciAqKU5VTEwpOworCQl3YXJuaW5nX2Vycm5vKF8oImZhaWxlZCB0byBleGVjICclcyciKSwgcGF0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtYW5fcGFnZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleGVjX21hbl9tYW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwlpZiAoIXBhdGgpCisJCXBhdGggPSAibWFuIjsKKwlleGVjbHAocGF0aCwgIm1hbiIsIHBhZ2UsIChjaGFyICopTlVMTCk7CisJd2FybmluZ19lcnJubyhfKCJmYWlsZWQgdG8gZXhlYyAnJXMnIiksIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBleGVjX21hbl9jbWQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpwYWdlKQoreworCXN0cnVjdCBzdHJidWYgc2hlbGxfY21kID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJnNoZWxsX2NtZCwgIiVzICVzIiwgY21kLCBwYWdlKTsKKwlleGVjbChTSEVMTF9QQVRILCBTSEVMTF9QQVRILCAiLWMiLCBzaGVsbF9jbWQuYnVmLCAoY2hhciAqKU5VTEwpOworCXdhcm5pbmcoXygiZmFpbGVkIHRvIGV4ZWMgJyVzJyIpLCBjbWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzaGVsbF9jbWQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWFuX3ZpZXdlcihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKipwID0gJm1hbl92aWV3ZXJfbGlzdDsKKworCXdoaWxlICgqcCkKKwkJcCA9ICYoKCpwKS0+bmV4dCk7CisJRkxFWF9BTExPQ19TVFIoKnAsIG5hbWUsIG5hbWUpOworfQorCitzdGF0aWMgaW50IHN1cHBvcnRlZF9tYW5fdmlld2VyKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuICghc3RybmNhc2VjbXAoIm1hbiIsIG5hbWUsIGxlbikgfHwKKwkJIXN0cm5jYXNlY21wKCJ3b21hbiIsIG5hbWUsIGxlbikgfHwKKwkJIXN0cm5jYXNlY21wKCJrb25xdWVyb3IiLCBuYW1lLCBsZW4pKTsKK30KKworc3RhdGljIHZvaWQgZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHNpemVfdCBsZW4sCisJCQkJICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0ICpuZXdfbWFuX3ZpZXdlcjsKKwlGTEVYX0FMTE9DX01FTShuZXdfbWFuX3ZpZXdlciwgbmFtZSwgbmFtZSwgbGVuKTsKKwluZXdfbWFuX3ZpZXdlci0+aW5mbyA9IHhzdHJkdXAodmFsdWUpOworCW5ld19tYW5fdmlld2VyLT5uZXh0ID0gbWFuX3ZpZXdlcl9pbmZvX2xpc3Q7CisJbWFuX3ZpZXdlcl9pbmZvX2xpc3QgPSBuZXdfbWFuX3ZpZXdlcjsKK30KKworc3RhdGljIGludCBhZGRfbWFuX3ZpZXdlcl9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoc3VwcG9ydGVkX21hbl92aWV3ZXIobmFtZSwgbGVuKSkKKwkJZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhuYW1lLCBsZW4sIHZhbHVlKTsKKwllbHNlCisJCXdhcm5pbmcoXygiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKwkJCSAgIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIiksCisJCQluYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX2NtZChjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmIChzdXBwb3J0ZWRfbWFuX3ZpZXdlcihuYW1lLCBsZW4pKQorCQl3YXJuaW5nKF8oIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisJCQkgICJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iKSwKKwkJCW5hbWUpOworCWVsc2UKKwkJZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhuYW1lLCBsZW4sIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX2luZm8oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICpuYW1lLCAqc3Via2V5OworCWludCBuYW1lbGVuOworCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAibWFuIiwgJm5hbWUsICZuYW1lbGVuLCAmc3Via2V5KSA8IDAgfHwgIW5hbWUpCisJCXJldHVybiAwOworCisJaWYgKCFzdHJjbXAoc3Via2V5LCAicGF0aCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGFkZF9tYW5fdmlld2VyX3BhdGgobmFtZSwgbmFtZWxlbiwgdmFsdWUpOworCX0KKwlpZiAoIXN0cmNtcChzdWJrZXksICJjbWQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXJldHVybiBhZGRfbWFuX3ZpZXdlcl9jbWQobmFtZSwgbmFtZWxlbiwgdmFsdWUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9oZWxwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAiY29sdW1uLiIpKQorCQlyZXR1cm4gZ2l0X2NvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgImhlbHAiLCAmY29sb3B0cyk7CisJaWYgKCFzdHJjbXAodmFyLCAiaGVscC5mb3JtYXQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWhlbHBfZm9ybWF0ID0gcGFyc2VfaGVscF9mb3JtYXQodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiaGVscC5odG1scGF0aCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJaHRtbF9wYXRoID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJtYW4udmlld2VyIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlhZGRfbWFuX3ZpZXdlcih2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAibWFuLiIpKQorCQlyZXR1cm4gYWRkX21hbl92aWV3ZXJfaW5mbyh2YXIsIHZhbHVlKTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgc3RydWN0IGNtZG5hbWVzIG1haW5fY21kcywgb3RoZXJfY21kczsKKworc3RhdGljIGludCBpc19naXRfY29tbWFuZChjb25zdCBjaGFyICpzKQoreworCWlmIChpc19idWlsdGluKHMpKQorCQlyZXR1cm4gMTsKKworCWxvYWRfY29tbWFuZF9saXN0KCJnaXQtIiwgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCXJldHVybiBpc19pbl9jbWRsaXN0KCZtYWluX2NtZHMsIHMpIHx8CisJCWlzX2luX2NtZGxpc3QoJm90aGVyX2NtZHMsIHMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY21kX3RvX3BhZ2UoY29uc3QgY2hhciAqZ2l0X2NtZCkKK3sKKwlpZiAoIWdpdF9jbWQpCisJCXJldHVybiAiZ2l0IjsKKwllbHNlIGlmIChzdGFydHNfd2l0aChnaXRfY21kLCAiZ2l0IikpCisJCXJldHVybiBnaXRfY21kOworCWVsc2UgaWYgKGlzX2dpdF9jb21tYW5kKGdpdF9jbWQpKQorCQlyZXR1cm4geHN0cmZtdCgiZ2l0LSVzIiwgZ2l0X2NtZCk7CisJZWxzZQorCQlyZXR1cm4geHN0cmZtdCgiZ2l0JXMiLCBnaXRfY21kKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfbWFuX3BhdGgodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5ld19wYXRoID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb2xkX3BhdGggPSBnZXRlbnYoIk1BTlBBVEgiKTsKKwljaGFyICpnaXRfbWFuX3BhdGggPSBzeXN0ZW1fcGF0aChHSVRfTUFOX1BBVEgpOworCisJLyogV2Ugc2hvdWxkIGFsd2F5cyBwdXQgJzonIGFmdGVyIG91ciBwYXRoLiBJZiB0aGVyZSBpcyBubworCSAqIG9sZF9wYXRoLCB0aGUgJzonIGF0IHRoZSBlbmQgd2lsbCBsZXQgJ21hbicgdG8gdHJ5CisJICogc3lzdGVtLXdpZGUgcGF0aHMgYWZ0ZXIgb3VycyB0byBmaW5kIHRoZSBtYW51YWwgcGFnZS4gSWYKKwkgKiB0aGVyZSBpcyBvbGRfcGF0aCwgd2UgbmVlZCAnOicgYXMgZGVsaW1pdGVyLiAqLworCXN0cmJ1Zl9hZGRzdHIoJm5ld19wYXRoLCBnaXRfbWFuX3BhdGgpOworCXN0cmJ1Zl9hZGRjaCgmbmV3X3BhdGgsICc6Jyk7CisJaWYgKG9sZF9wYXRoKQorCQlzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgb2xkX3BhdGgpOworCisJZnJlZShnaXRfbWFuX3BhdGgpOworCXNldGVudigiTUFOUEFUSCIsIG5ld19wYXRoLmJ1ZiwgMSk7CisKKwlzdHJidWZfcmVsZWFzZSgmbmV3X3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBleGVjX3ZpZXdlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYWdlKQoreworCWNvbnN0IGNoYXIgKmluZm8gPSBnZXRfbWFuX3ZpZXdlcl9pbmZvKG5hbWUpOworCisJaWYgKCFzdHJjYXNlY21wKG5hbWUsICJtYW4iKSkKKwkJZXhlY19tYW5fbWFuKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKG5hbWUsICJ3b21hbiIpKQorCQlleGVjX3dvbWFuX2VtYWNzKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKG5hbWUsICJrb25xdWVyb3IiKSkKKwkJZXhlY19tYW5fa29ucXVlcm9yKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKGluZm8pCisJCWV4ZWNfbWFuX2NtZChpbmZvLCBwYWdlKTsKKwllbHNlCisJCXdhcm5pbmcoXygiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIpLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19tYW5fcGFnZShjb25zdCBjaGFyICpnaXRfY21kKQoreworCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKnZpZXdlcjsKKwljb25zdCBjaGFyICpwYWdlID0gY21kX3RvX3BhZ2UoZ2l0X2NtZCk7CisJY29uc3QgY2hhciAqZmFsbGJhY2sgPSBnZXRlbnYoIkdJVF9NQU5fVklFV0VSIik7CisKKwlzZXR1cF9tYW5fcGF0aCgpOworCWZvciAodmlld2VyID0gbWFuX3ZpZXdlcl9saXN0OyB2aWV3ZXI7IHZpZXdlciA9IHZpZXdlci0+bmV4dCkKKwl7CisJCWV4ZWNfdmlld2VyKHZpZXdlci0+bmFtZSwgcGFnZSk7IC8qIHdpbGwgcmV0dXJuIHdoZW4gdW5hYmxlICovCisJfQorCWlmIChmYWxsYmFjaykKKwkJZXhlY192aWV3ZXIoZmFsbGJhY2ssIHBhZ2UpOworCWV4ZWNfdmlld2VyKCJtYW4iLCBwYWdlKTsKKwlkaWUoXygibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IikpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2luZm9fcGFnZShjb25zdCBjaGFyICpnaXRfY21kKQoreworCWNvbnN0IGNoYXIgKnBhZ2UgPSBjbWRfdG9fcGFnZShnaXRfY21kKTsKKwlzZXRlbnYoIklORk9QQVRIIiwgc3lzdGVtX3BhdGgoR0lUX0lORk9fUEFUSCksIDEpOworCWV4ZWNscCgiaW5mbyIsICJpbmZvIiwgImdpdG1hbiIsIHBhZ2UsIChjaGFyICopTlVMTCk7CisJZGllKF8oIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9odG1sX3BhZ2VfcGF0aChzdHJ1Y3Qgc3RyYnVmICpwYWdlX3BhdGgsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisKKwlpZiAoIWh0bWxfcGF0aCkKKwkJaHRtbF9wYXRoID0gdG9fZnJlZSA9IHN5c3RlbV9wYXRoKEdJVF9IVE1MX1BBVEgpOworCisJLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgZ2l0IGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LiAqLworCWlmICghc3Ryc3RyKGh0bWxfcGF0aCwgIjovLyIpKSB7CisJCWlmIChzdGF0KG1rcGF0aCgiJXMvZ2l0Lmh0bWwiLCBodG1sX3BhdGgpLCAmc3QpCisJCSAgICB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJCWRpZSgiJyVzJzogbm90IGEgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIiwgaHRtbF9wYXRoKTsKKwl9CisKKwlzdHJidWZfaW5pdChwYWdlX3BhdGgsIDApOworCXN0cmJ1Zl9hZGRmKHBhZ2VfcGF0aCwgIiVzLyVzLmh0bWwiLCBodG1sX3BhdGgsIHBhZ2UpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIG9wZW5faHRtbChjb25zdCBjaGFyICpwYXRoKQoreworCWV4ZWNsX2dpdF9jbWQoIndlYi0tYnJvd3NlIiwgIi1jIiwgImhlbHAuYnJvd3NlciIsIHBhdGgsIChjaGFyICopTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfaHRtbF9wYWdlKGNvbnN0IGNoYXIgKmdpdF9jbWQpCit7CisJY29uc3QgY2hhciAqcGFnZSA9IGNtZF90b19wYWdlKGdpdF9jbWQpOworCXN0cnVjdCBzdHJidWYgcGFnZV9wYXRoOyAvKiBpdCBsZWFrcyBidXQgd2UgZXhlYyBiZWxsb3cgKi8KKworCWdldF9odG1sX3BhZ2VfcGF0aCgmcGFnZV9wYXRoLCBwYWdlKTsKKworCW9wZW5faHRtbChwYWdlX3BhdGguYnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNoZWNrX2dpdF9jbWQoY29uc3QgY2hhciogY21kKQoreworCWNoYXIgKmFsaWFzOworCisJaWYgKGlzX2dpdF9jb21tYW5kKGNtZCkpCisJCXJldHVybiBjbWQ7CisKKwlhbGlhcyA9IGFsaWFzX2xvb2t1cChjbWQpOworCWlmIChhbGlhcykgeworCQljb25zdCBjaGFyICoqYXJndjsKKwkJaW50IGNvdW50OworCisJCS8qCisJCSAqIGhhbmRsZV9idWlsdGluKCkgaW4gZ2l0LmMgcmV3cml0ZXMgImdpdCBjbWQgLS1oZWxwIgorCQkgKiB0byAiZ2l0IGhlbHAgLS1leGNsdWRlLWd1aWRlcyBjbWQiLCBzbyB3ZSBjYW4gdXNlCisJCSAqIGV4Y2x1ZGVfZ3VpZGVzIHRvIGRpc3Rpbmd1aXNoICJnaXQgY21kIC0taGVscCIgZnJvbQorCQkgKiAiZ2l0IGhlbHAgY21kIi4gSW4gdGhlIGxhdHRlciBjYXNlLCBvciBpZiBjbWQgaXMgYW4KKwkJICogYWxpYXMgZm9yIGEgc2hlbGwgY29tbWFuZCwganVzdCBwcmludCB0aGUgYWxpYXMKKwkJICogZGVmaW5pdGlvbi4KKwkJICovCisJCWlmICghZXhjbHVkZV9ndWlkZXMgfHwgYWxpYXNbMF0gPT0gJyEnKSB7CisJCQlwcmludGZfbG4oXygiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciKSwgY21kLCBhbGlhcyk7CisJCQlmcmVlKGFsaWFzKTsKKwkJCWV4aXQoMCk7CisJCX0KKwkJLyoKKwkJICogT3RoZXJ3aXNlLCB3ZSBwcmV0ZW5kIHRoYXQgdGhlIGNvbW1hbmQgd2FzICJnaXQKKwkJICogd29yZDAgLS1oZWxwIi4gV2UgdXNlIHNwbGl0X2NtZGxpbmUoKSB0byBnZXQgdGhlCisJCSAqIGZpcnN0IHdvcmQgb2YgdGhlIGFsaWFzLCB0byBlbnN1cmUgdGhhdCB3ZSB1c2UgdGhlCisJCSAqIHNhbWUgcnVsZXMgYXMgd2hlbiB0aGUgYWxpYXMgaXMgYWN0dWFsbHkKKwkJICogdXNlZC4gc3BsaXRfY21kbGluZSgpIG1vZGlmaWVzIGFsaWFzIGluLXBsYWNlLgorCQkgKi8KKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIiksIGNtZCwgYWxpYXMpOworCQljb3VudCA9IHNwbGl0X2NtZGxpbmUoYWxpYXMsICZhcmd2KTsKKwkJaWYgKGNvdW50IDwgMCkKKwkJCWRpZShfKCJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIpLCBjbWQsCisJCQkgICAgc3BsaXRfY21kbGluZV9zdHJlcnJvcihjb3VudCkpOworCQlmcmVlKGFyZ3YpOworCQlVTkxFQUsoYWxpYXMpOworCQlyZXR1cm4gYWxpYXM7CisJfQorCisJaWYgKGV4Y2x1ZGVfZ3VpZGVzKQorCQlyZXR1cm4gaGVscF91bmtub3duX2NtZChjbWQpOworCisJcmV0dXJuIGNtZDsKK30KKworaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBub25naXQ7CisJZW51bSBoZWxwX2Zvcm1hdCBwYXJzZWRfaGVscF9mb3JtYXQ7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5faGVscF9vcHRpb25zLAorCQkJYnVpbHRpbl9oZWxwX3VzYWdlLCAwKTsKKwlwYXJzZWRfaGVscF9mb3JtYXQgPSBoZWxwX2Zvcm1hdDsKKworCWlmIChzaG93X2FsbCkgeworCQlnaXRfY29uZmlnKGdpdF9oZWxwX2NvbmZpZywgTlVMTCk7CisJCWlmICh2ZXJib3NlKSB7CisJCQlzZXR1cF9wYWdlcigpOworCQkJbGlzdF9hbGxfY21kc19oZWxwKCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwcmludGYoXygidXNhZ2U6ICVzJXMiKSwgXyhnaXRfdXNhZ2Vfc3RyaW5nKSwgIlxuXG4iKTsKKwkJbG9hZF9jb21tYW5kX2xpc3QoImdpdC0iLCAmbWFpbl9jbWRzLCAmb3RoZXJfY21kcyk7CisJCWxpc3RfY29tbWFuZHMoY29sb3B0cywgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCX0KKworCWlmIChzaG93X2NvbmZpZykgeworCQlpbnQgZm9yX2h1bWFuID0gc2hvd19jb25maWcgPT0gMTsKKworCQlpZiAoIWZvcl9odW1hbikgeworCQkJbGlzdF9jb25maWdfaGVscChmb3JfaHVtYW4pOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2V0dXBfcGFnZXIoKTsKKwkJbGlzdF9jb25maWdfaGVscChmb3JfaHVtYW4pOworCQlwcmludGYoIlxuJXNcbiIsIF8oIidnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGluZm9ybWF0aW9uIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2hvd19ndWlkZXMpCisJCWxpc3RfY29tbW9uX2d1aWRlc19oZWxwKCk7CisKKwlpZiAoc2hvd19hbGwgfHwgc2hvd19ndWlkZXMpIHsKKwkJcHJpbnRmKCIlc1xuIiwgXyhnaXRfbW9yZV9pbmZvX3N0cmluZykpOworCQkvKgorCQkqIFdlJ3JlIGRvbmUuIElnbm9yZSBhbnkgcmVtYWluaW5nIGFyZ3MKKwkJKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFhcmd2WzBdKSB7CisJCXByaW50ZihfKCJ1c2FnZTogJXMlcyIpLCBfKGdpdF91c2FnZV9zdHJpbmcpLCAiXG5cbiIpOworCQlsaXN0X2NvbW1vbl9jbWRzX2hlbHAoKTsKKwkJcHJpbnRmKCJcbiVzXG4iLCBfKGdpdF9tb3JlX2luZm9fc3RyaW5nKSk7CisJCXJldHVybiAwOworCX0KKworCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCWdpdF9jb25maWcoZ2l0X2hlbHBfY29uZmlnLCBOVUxMKTsKKworCWlmIChwYXJzZWRfaGVscF9mb3JtYXQgIT0gSEVMUF9GT1JNQVRfTk9ORSkKKwkJaGVscF9mb3JtYXQgPSBwYXJzZWRfaGVscF9mb3JtYXQ7CisJaWYgKGhlbHBfZm9ybWF0ID09IEhFTFBfRk9STUFUX05PTkUpCisJCWhlbHBfZm9ybWF0ID0gcGFyc2VfaGVscF9mb3JtYXQoREVGQVVMVF9IRUxQX0ZPUk1BVCk7CisKKwlhcmd2WzBdID0gY2hlY2tfZ2l0X2NtZChhcmd2WzBdKTsKKworCXN3aXRjaCAoaGVscF9mb3JtYXQpIHsKKwljYXNlIEhFTFBfRk9STUFUX05PTkU6CisJY2FzZSBIRUxQX0ZPUk1BVF9NQU46CisJCXNob3dfbWFuX3BhZ2UoYXJndlswXSk7CisJCWJyZWFrOworCWNhc2UgSEVMUF9GT1JNQVRfSU5GTzoKKwkJc2hvd19pbmZvX3BhZ2UoYXJndlswXSk7CisJCWJyZWFrOworCWNhc2UgSEVMUF9GT1JNQVRfV0VCOgorCQlzaG93X2h0bWxfcGFnZShhcmd2WzBdKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2luZGV4LXBhY2suYyBiL2J1aWx0aW4vaW5kZXgtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjdkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2luZGV4LXBhY2suYwpAQCAtMCwwICsxLDE4NTMgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImZzY2suaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicHJvbWlzb3ItcmVtb3RlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGluZGV4X3BhY2tfdXNhZ2VbXSA9CisiZ2l0IGluZGV4LXBhY2sgWy12XSBbLW8gPGluZGV4LWZpbGU+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+b2lkLAorCQkJCQkJICAgICAgTlVMTCwKKwkJCQkJCSAgICAgIE9CSkVDVF9JTkZPX0ZPUl9QUkVGRVRDSCkpCisJCQkJY29udGludWU7CisJCQlvaWRfYXJyYXlfYXBwZW5kKCZ0b19mZXRjaCwgJmQtPm9pZCk7CisJCX0KKwkJaWYgKHRvX2ZldGNoLm5yKQorCQkJcHJvbWlzb3JfcmVtb3RlX2dldF9kaXJlY3QodGhlX3JlcG9zaXRvcnksCisJCQkJCQkgICB0b19mZXRjaC5vaWQsIHRvX2ZldGNoLm5yKTsKKwkJb2lkX2FycmF5X2NsZWFyKCZ0b19mZXRjaCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yX3JlZl9kZWx0YXM7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2RlbHRhX2VudHJ5ICpkID0gc29ydGVkX2J5X3Bvc1tpXTsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlX29iaiA9IGFsbG9jX2Jhc2VfZGF0YSgpOworCisJCWlmIChvYmplY3RzW2QtPm9ial9ub10ucmVhbF90eXBlICE9IE9CSl9SRUZfREVMVEEpCisJCQljb250aW51ZTsKKwkJYmFzZV9vYmotPmRhdGEgPSByZWFkX29iamVjdF9maWxlKCZkLT5vaWQsICZ0eXBlLAorCQkJCQkJICAmYmFzZV9vYmotPnNpemUpOworCQlpZiAoIWJhc2Vfb2JqLT5kYXRhKQorCQkJY29udGludWU7CisKKwkJaWYgKGNoZWNrX29iamVjdF9zaWduYXR1cmUodGhlX3JlcG9zaXRvcnksICZkLT5vaWQsCisJCQkJCSAgIGJhc2Vfb2JqLT5kYXRhLCBiYXNlX29iai0+c2l6ZSwKKwkJCQkJICAgdHlwZV9uYW1lKHR5cGUpKSkKKwkJCWRpZShfKCJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIpLCBvaWRfdG9faGV4KCZkLT5vaWQpKTsKKwkJYmFzZV9vYmotPm9iaiA9IGFwcGVuZF9vYmpfdG9fcGFjayhmLCBkLT5vaWQuaGFzaCwKKwkJCQkJYmFzZV9vYmotPmRhdGEsIGJhc2Vfb2JqLT5zaXplLCB0eXBlKTsKKwkJZmluZF91bnJlc29sdmVkX2RlbHRhcyhiYXNlX29iaik7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIG5yX3Jlc29sdmVkX2RlbHRhcyk7CisJfQorCWZyZWUoc29ydGVkX2J5X3Bvcyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZXJpdmVfZmlsZW5hbWUoY29uc3QgY2hhciAqcGFja19uYW1lLCBjb25zdCBjaGFyICpzdWZmaXgsCisJCQkJICAgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXNpemVfdCBsZW47CisJaWYgKCFzdHJpcF9zdWZmaXgocGFja19uYW1lLCAiLnBhY2siLCAmbGVuKSkKKwkJZGllKF8oInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIiksCisJCSAgICBwYWNrX25hbWUpOworCXN0cmJ1Zl9hZGQoYnVmLCBwYWNrX25hbWUsIGxlbik7CisJc3RyYnVmX2FkZGNoKGJ1ZiwgJy4nKTsKKwlzdHJidWZfYWRkc3RyKGJ1Ziwgc3VmZml4KTsKKwlyZXR1cm4gYnVmLT5idWY7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3NwZWNpYWxfZmlsZShjb25zdCBjaGFyICpzdWZmaXgsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgICAgICBjb25zdCBjaGFyICpwYWNrX25hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsCisJCQkgICAgICAgY29uc3QgY2hhciAqKnJlcG9ydCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWVfYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJaW50IGZkOworCWludCBtc2dfbGVuID0gc3RybGVuKG1zZyk7CisKKwlpZiAocGFja19uYW1lKQorCQlmaWxlbmFtZSA9IGRlcml2ZV9maWxlbmFtZShwYWNrX25hbWUsIHN1ZmZpeCwgJm5hbWVfYnVmKTsKKwllbHNlCisJCWZpbGVuYW1lID0gb2RiX3BhY2tfbmFtZSgmbmFtZV9idWYsIGhhc2gsIHN1ZmZpeCk7CisKKwlmZCA9IG9kYl9wYWNrX2tlZXAoZmlsZW5hbWUpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVFWElTVCkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIiksCisJCQkJICBzdWZmaXgsIGZpbGVuYW1lKTsKKwl9IGVsc2UgeworCQlpZiAobXNnX2xlbiA+IDApIHsKKwkJCXdyaXRlX29yX2RpZShmZCwgbXNnLCBtc2dfbGVuKTsKKwkJCXdyaXRlX29yX2RpZShmZCwgIlxuIiwgMSk7CisJCX0KKwkJaWYgKGNsb3NlKGZkKSAhPSAwKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIpLAorCQkJCSAgc3VmZml4LCBmaWxlbmFtZSk7CisJCWlmIChyZXBvcnQpCisJCQkqcmVwb3J0ID0gc3VmZml4OworCX0KKwlzdHJidWZfcmVsZWFzZSgmbmFtZV9idWYpOworfQorCitzdGF0aWMgdm9pZCBmaW5hbChjb25zdCBjaGFyICpmaW5hbF9wYWNrX25hbWUsIGNvbnN0IGNoYXIgKmN1cnJfcGFja19uYW1lLAorCQkgIGNvbnN0IGNoYXIgKmZpbmFsX2luZGV4X25hbWUsIGNvbnN0IGNoYXIgKmN1cnJfaW5kZXhfbmFtZSwKKwkJICBjb25zdCBjaGFyICprZWVwX21zZywgY29uc3QgY2hhciAqcHJvbWlzb3JfbXNnLAorCQkgIHVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJY29uc3QgY2hhciAqcmVwb3J0ID0gInBhY2siOworCXN0cnVjdCBzdHJidWYgcGFja19uYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBpbmRleF9uYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IGVycjsKKworCWlmICghZnJvbV9zdGRpbikgeworCQljbG9zZShpbnB1dF9mZCk7CisJfSBlbHNlIHsKKwkJZnN5bmNfb3JfZGllKG91dHB1dF9mZCwgY3Vycl9wYWNrX25hbWUpOworCQllcnIgPSBjbG9zZShvdXRwdXRfZmQpOworCQlpZiAoZXJyKQorCQkJZGllX2Vycm5vKF8oImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIikpOworCX0KKworCWlmIChrZWVwX21zZykKKwkJd3JpdGVfc3BlY2lhbF9maWxlKCJrZWVwIiwga2VlcF9tc2csIGZpbmFsX3BhY2tfbmFtZSwgaGFzaCwKKwkJCQkgICAmcmVwb3J0KTsKKwlpZiAocHJvbWlzb3JfbXNnKQorCQl3cml0ZV9zcGVjaWFsX2ZpbGUoInByb21pc29yIiwgcHJvbWlzb3JfbXNnLCBmaW5hbF9wYWNrX25hbWUsCisJCQkJICAgaGFzaCwgTlVMTCk7CisKKwlpZiAoZmluYWxfcGFja19uYW1lICE9IGN1cnJfcGFja19uYW1lKSB7CisJCWlmICghZmluYWxfcGFja19uYW1lKQorCQkJZmluYWxfcGFja19uYW1lID0gb2RiX3BhY2tfbmFtZSgmcGFja19uYW1lLCBoYXNoLCAicGFjayIpOworCQlpZiAoZmluYWxpemVfb2JqZWN0X2ZpbGUoY3Vycl9wYWNrX25hbWUsIGZpbmFsX3BhY2tfbmFtZSkpCisJCQlkaWUoXygiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIpKTsKKwl9IGVsc2UgaWYgKGZyb21fc3RkaW4pCisJCWNobW9kKGZpbmFsX3BhY2tfbmFtZSwgMDQ0NCk7CisKKwlpZiAoZmluYWxfaW5kZXhfbmFtZSAhPSBjdXJyX2luZGV4X25hbWUpIHsKKwkJaWYgKCFmaW5hbF9pbmRleF9uYW1lKQorCQkJZmluYWxfaW5kZXhfbmFtZSA9IG9kYl9wYWNrX25hbWUoJmluZGV4X25hbWUsIGhhc2gsICJpZHgiKTsKKwkJaWYgKGZpbmFsaXplX29iamVjdF9maWxlKGN1cnJfaW5kZXhfbmFtZSwgZmluYWxfaW5kZXhfbmFtZSkpCisJCQlkaWUoXygiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiKSk7CisJfSBlbHNlCisJCWNobW9kKGZpbmFsX2luZGV4X25hbWUsIDA0NDQpOworCisJaWYgKGRvX2ZzY2tfb2JqZWN0KSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCQlwID0gYWRkX3BhY2tlZF9naXQoZmluYWxfaW5kZXhfbmFtZSwgc3RybGVuKGZpbmFsX2luZGV4X25hbWUpLCAwKTsKKwkJaWYgKHApCisJCQlpbnN0YWxsX3BhY2tlZF9naXQodGhlX3JlcG9zaXRvcnksIHApOworCX0KKworCWlmICghZnJvbV9zdGRpbikgeworCQlwcmludGYoIiVzXG4iLCBoYXNoX3RvX2hleChoYXNoKSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkZigmYnVmLCAiJXNcdCVzXG4iLCByZXBvcnQsIGhhc2hfdG9faGV4KGhhc2gpKTsKKwkJd3JpdGVfb3JfZGllKDEsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCQkvKgorCQkgKiBMZXQncyBqdXN0IG1pbWljIGdpdC11bnBhY2stb2JqZWN0cyBoZXJlIGFuZCB3cml0ZQorCQkgKiB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBpbnB1dCBidWZmZXIgdG8gc3Rkb3V0LgorCQkgKi8KKwkJd2hpbGUgKGlucHV0X2xlbikgeworCQkJZXJyID0geHdyaXRlKDEsIGlucHV0X2J1ZmZlciArIGlucHV0X29mZnNldCwgaW5wdXRfbGVuKTsKKwkJCWlmIChlcnIgPD0gMCkKKwkJCQlicmVhazsKKwkJCWlucHV0X2xlbiAtPSBlcnI7CisJCQlpbnB1dF9vZmZzZXQgKz0gZXJyOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmluZGV4X25hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYWNrX25hbWUpOworfQorCitzdGF0aWMgaW50IGdpdF9pbmRleF9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpvcHRzID0gY2I7CisKKwlpZiAoIXN0cmNtcChrLCAicGFjay5pbmRleHZlcnNpb24iKSkgeworCQlvcHRzLT52ZXJzaW9uID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChvcHRzLT52ZXJzaW9uID4gMikKKwkJCWRpZShfKCJiYWQgcGFjay5pbmRleHZlcnNpb249JSJQUkl1MzIpLCBvcHRzLT52ZXJzaW9uKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLnRocmVhZHMiKSkgeworCQlucl90aHJlYWRzID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChucl90aHJlYWRzIDwgMCkKKwkJCWRpZShfKCJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIiksCisJCQkgICAgbnJfdGhyZWFkcyk7CisJCWlmICghSEFWRV9USFJFQURTICYmIG5yX3RocmVhZHMgIT0gMSkgeworCQkJd2FybmluZyhfKCJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIiksIGspOworCQkJbnJfdGhyZWFkcyA9IDE7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdiwgY2IpOworfQorCitzdGF0aWMgaW50IGNtcF91aW50MzIoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXVpbnQzMl90IGEgPSAqKCh1aW50MzJfdCAqKWFfKTsKKwl1aW50MzJfdCBiID0gKigodWludDMyX3QgKiliXyk7CisKKwlyZXR1cm4gKGEgPCBiKSA/IC0xIDogKGEgIT0gYik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfdjJfYW5vbWFsb3VzX29mZnNldHMoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkJICAgICAgc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqb3B0cykKK3sKKwljb25zdCB1aW50MzJfdCAqaWR4MSwgKmlkeDI7CisJdWludDMyX3QgaTsKKwljb25zdCB1aW50MzJfdCBoYXNod29yZHMgPSB0aGVfaGFzaF9hbGdvLT5yYXdzeiAvIHNpemVvZih1aW50MzJfdCk7CisKKwkvKiBUaGUgYWRkcmVzcyBvZiB0aGUgNC1ieXRlIG9mZnNldCB0YWJsZSAqLworCWlkeDEgPSAoKChjb25zdCB1aW50MzJfdCAqKXAtPmluZGV4X2RhdGEpCisJCSsgMiAvKiA4LWJ5dGUgaGVhZGVyICovCisJCSsgMjU2IC8qIGZhbiBvdXQgKi8KKwkJKyBoYXNod29yZHMgKiBwLT5udW1fb2JqZWN0cyAvKiBvYmplY3QgSUQgdGFibGUgKi8KKwkJKyBwLT5udW1fb2JqZWN0cyAvKiBDUkMzMiB0YWJsZSAqLworCQkpOworCisJLyogVGhlIGFkZHJlc3Mgb2YgdGhlIDgtYnl0ZSBvZmZzZXQgdGFibGUgKi8KKwlpZHgyID0gaWR4MSArIHAtPm51bV9vYmplY3RzOworCisJZm9yIChpID0gMDsgaSA8IHAtPm51bV9vYmplY3RzOyBpKyspIHsKKwkJdWludDMyX3Qgb2ZmID0gbnRvaGwoaWR4MVtpXSk7CisJCWlmICghKG9mZiAmIDB4ODAwMDAwMDApKQorCQkJY29udGludWU7CisJCW9mZiA9IG9mZiAmIDB4N2ZmZmZmZmY7CisJCWNoZWNrX3BhY2tfaW5kZXhfcHRyKHAsICZpZHgyW29mZiAqIDJdKTsKKwkJaWYgKGlkeDJbb2ZmICogMl0pCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogVGhlIHJlYWwgb2Zmc2V0IGlzIG50b2hsKGlkeDJbb2ZmICogMl0pIGluIGhpZ2ggNAorCQkgKiBvY3RldHMsIGFuZCBudG9obChpZHgyW29mZiAqIDIgKyAxXSkgaW4gbG93IDQKKwkJICogb2N0ZXRzLiAgQnV0IGlkeDJbb2ZmICogMl0gaXMgWmVybyEhIQorCQkgKi8KKwkJQUxMT0NfR1JPVyhvcHRzLT5hbm9tYWx5LCBvcHRzLT5hbm9tYWx5X25yICsgMSwgb3B0cy0+YW5vbWFseV9hbGxvYyk7CisJCW9wdHMtPmFub21hbHlbb3B0cy0+YW5vbWFseV9ucisrXSA9IG50b2hsKGlkeDJbb2ZmICogMiArIDFdKTsKKwl9CisKKwlRU09SVChvcHRzLT5hbm9tYWx5LCBvcHRzLT5hbm9tYWx5X25yLCBjbXBfdWludDMyKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9pZHhfb3B0aW9uKHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMsIGNvbnN0IGNoYXIgKnBhY2tfbmFtZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGFkZF9wYWNrZWRfZ2l0KHBhY2tfbmFtZSwgc3RybGVuKHBhY2tfbmFtZSksIDEpOworCisJaWYgKCFwKQorCQlkaWUoXygiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciKSwgcGFja19uYW1lKTsKKwlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQlkaWUoXygiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIpLCBwYWNrX25hbWUpOworCisJLyogUmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBleGlzdGluZyBpZHggZmlsZSAqLworCW9wdHMtPnZlcnNpb24gPSBwLT5pbmRleF92ZXJzaW9uOworCisJaWYgKG9wdHMtPnZlcnNpb24gPT0gMikKKwkJcmVhZF92Ml9hbm9tYWxvdXNfb2Zmc2V0cyhwLCBvcHRzKTsKKworCS8qCisJICogR2V0IHJpZCBvZiB0aGUgaWR4IGZpbGUgYXMgd2UgZG8gbm90IG5lZWQgaXQgYW55bW9yZS4KKwkgKiBORUVEU1dPUks6IGV4dHJhY3QgdGhpcyBiaXQgZnJvbSBmcmVlX3BhY2tfYnlfbmFtZSgpIGluCisJICogc2hhMS1maWxlLmMsIHBlcmhhcHM/ICBJdCBzaG91bGRuJ3QgbWF0dGVyIHZlcnkgbXVjaCBhcyB3ZQorCSAqIGtub3cgd2UgaGF2ZW4ndCBpbnN0YWxsZWQgdGhpcyBwYWNrIChoZW5jZSB3ZSBuZXZlciBoYXZlCisJICogcmVhZCBhbnl0aGluZyBmcm9tIGl0KS4KKwkgKi8KKwljbG9zZV9wYWNrX2luZGV4KHApOworCWZyZWUocCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFja19pbmZvKGludCBzdGF0X29ubHkpCit7CisJaW50IGksIGJhc2VvYmplY3RzID0gbnJfb2JqZWN0cyAtIG5yX3JlZl9kZWx0YXMgLSBucl9vZnNfZGVsdGFzOworCXVuc2lnbmVkIGxvbmcgKmNoYWluX2hpc3RvZ3JhbSA9IE5VTEw7CisKKwlpZiAoZGVlcGVzdF9kZWx0YSkKKwkJY2hhaW5faGlzdG9ncmFtID0geGNhbGxvYyhkZWVwZXN0X2RlbHRhLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tpXTsKKworCQlpZiAoaXNfZGVsdGFfdHlwZShvYmotPnR5cGUpKQorCQkJY2hhaW5faGlzdG9ncmFtW29ial9zdGF0W2ldLmRlbHRhX2RlcHRoIC0gMV0rKzsKKwkJaWYgKHN0YXRfb25seSkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoIiVzICUtNnMgJSJQUkl1TUFYIiAlIlBSSXVNQVgiICUiUFJJdU1BWCwKKwkJICAgICAgIG9pZF90b19oZXgoJm9iai0+aWR4Lm9pZCksCisJCSAgICAgICB0eXBlX25hbWUob2JqLT5yZWFsX3R5cGUpLCAodWludG1heF90KW9iai0+c2l6ZSwKKwkJICAgICAgICh1aW50bWF4X3QpKG9ialsxXS5pZHgub2Zmc2V0IC0gb2JqLT5pZHgub2Zmc2V0KSwKKwkJICAgICAgICh1aW50bWF4X3Qpb2JqLT5pZHgub2Zmc2V0KTsKKwkJaWYgKGlzX2RlbHRhX3R5cGUob2JqLT50eXBlKSkgeworCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqYm9iaiA9ICZvYmplY3RzW29ial9zdGF0W2ldLmJhc2Vfb2JqZWN0X25vXTsKKwkJCXByaW50ZigiICV1ICVzIiwgb2JqX3N0YXRbaV0uZGVsdGFfZGVwdGgsCisJCQkgICAgICAgb2lkX3RvX2hleCgmYm9iai0+aWR4Lm9pZCkpOworCQl9CisJCXB1dGNoYXIoJ1xuJyk7CisJfQorCisJaWYgKGJhc2VvYmplY3RzKQorCQlwcmludGZfbG4oUV8oIm5vbiBkZWx0YTogJWQgb2JqZWN0IiwKKwkJCSAgICAgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIsCisJCQkgICAgIGJhc2VvYmplY3RzKSwKKwkJCSAgYmFzZW9iamVjdHMpOworCWZvciAoaSA9IDA7IGkgPCBkZWVwZXN0X2RlbHRhOyBpKyspIHsKKwkJaWYgKCFjaGFpbl9oaXN0b2dyYW1baV0pCisJCQljb250aW51ZTsKKwkJcHJpbnRmX2xuKFFfKCJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIsCisJCQkgICAgICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiLAorCQkJICAgICBjaGFpbl9oaXN0b2dyYW1baV0pLAorCQkJICBpICsgMSwKKwkJCSAgY2hhaW5faGlzdG9ncmFtW2ldKTsKKwl9Cit9CisKK2ludCBjbWRfaW5kZXhfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgZml4X3RoaW5fcGFjayA9IDAsIHZlcmlmeSA9IDAsIHN0YXRfb25seSA9IDA7CisJY29uc3QgY2hhciAqY3Vycl9pbmRleDsKKwljb25zdCBjaGFyICppbmRleF9uYW1lID0gTlVMTCwgKnBhY2tfbmFtZSA9IE5VTEw7CisJY29uc3QgY2hhciAqa2VlcF9tc2cgPSBOVUxMOworCWNvbnN0IGNoYXIgKnByb21pc29yX21zZyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBpbmRleF9uYW1lX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmlkeF9vYmplY3RzOworCXN0cnVjdCBwYWNrX2lkeF9vcHRpb24gb3B0czsKKwl1bnNpZ25lZCBjaGFyIHBhY2tfaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwl1bnNpZ25lZCBmb3JlaWduX25yID0gMTsJLyogemVybyBpcyBhICJnb29kIiB2YWx1ZSwgYXNzdW1lIGJhZCAqLworCWludCByZXBvcnRfZW5kX29mX2lucHV0ID0gMDsKKworCS8qCisJICogaW5kZXgtcGFjayBuZXZlciBuZWVkcyB0byBmZXRjaCBtaXNzaW5nIG9iamVjdHMgZXhjZXB0IHdoZW4KKwkgKiBSRUZfREVMVEEgYmFzZXMgYXJlIG1pc3NpbmcgKHdoaWNoIGFyZSBleHBsaWNpdGx5IGhhbmRsZWQpLiBJdCBvbmx5CisJICogYWNjZXNzZXMgdGhlIHJlcG8gdG8gZG8gaGFzaCBjb2xsaXNpb24gY2hlY2tzIGFuZCB0byBjaGVjayB3aGljaAorCSAqIFJFRl9ERUxUQSBiYXNlcyBuZWVkIHRvIGJlIGZldGNoZWQuCisJICovCisJZmV0Y2hfaWZfbWlzc2luZyA9IDA7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCisJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOworCWZzY2tfb3B0aW9ucy53YWxrID0gbWFya19saW5rOworCisJcmVzZXRfcGFja19pZHhfb3B0aW9uKCZvcHRzKTsKKwlnaXRfY29uZmlnKGdpdF9pbmRleF9wYWNrX2NvbmZpZywgJm9wdHMpOworCWlmIChwcmVmaXggJiYgY2hkaXIocHJlZml4KSkKKwkJZGllKF8oIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIikpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICgqYXJnID09ICctJykgeworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGRpbiIpKSB7CisJCQkJZnJvbV9zdGRpbiA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1maXgtdGhpbiIpKSB7CisJCQkJZml4X3RoaW5fcGFjayA9IDE7CisJCQl9IGVsc2UgaWYgKHNraXBfdG9fb3B0aW9uYWxfYXJnKGFyZywgIi0tc3RyaWN0IiwgJmFyZykpIHsKKwkJCQlzdHJpY3QgPSAxOworCQkJCWRvX2ZzY2tfb2JqZWN0ID0gMTsKKwkJCQlmc2NrX3NldF9tc2dfdHlwZXMoJmZzY2tfb3B0aW9ucywgYXJnKTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQiKSkgeworCQkJCXN0cmljdCA9IDE7CisJCQkJY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1mc2NrLW9iamVjdHMiKSkgeworCQkJCWRvX2ZzY2tfb2JqZWN0ID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeSIpKSB7CisJCQkJdmVyaWZ5ID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeS1zdGF0IikpIHsKKwkJCQl2ZXJpZnkgPSAxOworCQkJCXNob3dfc3RhdCA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJpZnktc3RhdC1vbmx5IikpIHsKKwkJCQl2ZXJpZnkgPSAxOworCQkJCXNob3dfc3RhdCA9IDE7CisJCQkJc3RhdF9vbmx5ID0gMTsKKwkJCX0gZWxzZSBpZiAoc2tpcF90b19vcHRpb25hbF9hcmcoYXJnLCAiLS1rZWVwIiwgJmtlZXBfbXNnKSkgeworCQkJCTsgLyogbm90aGluZyB0byBkbyAqLworCQkJfSBlbHNlIGlmIChza2lwX3RvX29wdGlvbmFsX2FyZyhhcmcsICItLXByb21pc29yIiwgJnByb21pc29yX21zZykpIHsKKwkJCQk7IC8qIGFscmVhZHkgcGFyc2VkICovCisJCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tdGhyZWFkcz0iKSkgeworCQkJCWNoYXIgKmVuZDsKKwkJCQlucl90aHJlYWRzID0gc3RydG91bChhcmcrMTAsICZlbmQsIDApOworCQkJCWlmICghYXJnWzEwXSB8fCAqZW5kIHx8IG5yX3RocmVhZHMgPCAwKQorCQkJCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKwkJCQlpZiAoIUhBVkVfVEhSRUFEUyAmJiBucl90aHJlYWRzICE9IDEpIHsKKwkJCQkJd2FybmluZyhfKCJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIiksIGFyZyk7CisJCQkJCW5yX3RocmVhZHMgPSAxOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1wYWNrX2hlYWRlcj0iKSkgeworCQkJCXN0cnVjdCBwYWNrX2hlYWRlciAqaGRyOworCQkJCWNoYXIgKmM7CisKKwkJCQloZHIgPSAoc3RydWN0IHBhY2tfaGVhZGVyICopaW5wdXRfYnVmZmVyOworCQkJCWhkci0+aGRyX3NpZ25hdHVyZSA9IGh0b25sKFBBQ0tfU0lHTkFUVVJFKTsKKwkJCQloZHItPmhkcl92ZXJzaW9uID0gaHRvbmwoc3RydG91bChhcmcgKyAxNCwgJmMsIDEwKSk7CisJCQkJaWYgKCpjICE9ICcsJykKKwkJCQkJZGllKF8oImJhZCAlcyIpLCBhcmcpOworCQkJCWhkci0+aGRyX2VudHJpZXMgPSBodG9ubChzdHJ0b3VsKGMgKyAxLCAmYywgMTApKTsKKwkJCQlpZiAoKmMpCisJCQkJCWRpZShfKCJiYWQgJXMiKSwgYXJnKTsKKwkJCQlpbnB1dF9sZW4gPSBzaXplb2YoKmhkcik7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXYiKSkgeworCQkJCXZlcmJvc2UgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1yZXNvbHZpbmctcHJvZ3Jlc3MiKSkgeworCQkJCXNob3dfcmVzb2x2aW5nX3Byb2dyZXNzID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlcG9ydC1lbmQtb2YtaW5wdXQiKSkgeworCQkJCXJlcG9ydF9lbmRfb2ZfaW5wdXQgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi1vIikpIHsKKwkJCQlpZiAoaW5kZXhfbmFtZSB8fCAoaSsxKSA+PSBhcmdjKQorCQkJCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKwkJCQlpbmRleF9uYW1lID0gYXJndlsrK2ldOworCQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLWluZGV4LXZlcnNpb249IikpIHsKKwkJCQljaGFyICpjOworCQkJCW9wdHMudmVyc2lvbiA9IHN0cnRvdWwoYXJnICsgMTYsICZjLCAxMCk7CisJCQkJaWYgKG9wdHMudmVyc2lvbiA+IDIpCisJCQkJCWRpZShfKCJiYWQgJXMiKSwgYXJnKTsKKwkJCQlpZiAoKmMgPT0gJywnKQorCQkJCQlvcHRzLm9mZjMyX2xpbWl0ID0gc3RydG91bChjKzEsICZjLCAwKTsKKwkJCQlpZiAoKmMgfHwgb3B0cy5vZmYzMl9saW1pdCAmIDB4ODAwMDAwMDApCisJCQkJCWRpZShfKCJiYWQgJXMiKSwgYXJnKTsKKwkJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1tYXgtaW5wdXQtc2l6ZT0iLCAmYXJnKSkgeworCQkJCW1heF9pbnB1dF9zaXplID0gc3RydG91bWF4KGFyZywgTlVMTCwgMTApOworCQkJfSBlbHNlCisJCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwYWNrX25hbWUpCisJCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKwkJcGFja19uYW1lID0gYXJnOworCX0KKworCWlmICghcGFja19uYW1lICYmICFmcm9tX3N0ZGluKQorCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKwlpZiAoZml4X3RoaW5fcGFjayAmJiAhZnJvbV9zdGRpbikKKwkJZGllKF8oIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIikpOworCWlmIChmcm9tX3N0ZGluICYmICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJZGllKF8oIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIpKTsKKwlpZiAoIWluZGV4X25hbWUgJiYgcGFja19uYW1lKQorCQlpbmRleF9uYW1lID0gZGVyaXZlX2ZpbGVuYW1lKHBhY2tfbmFtZSwgImlkeCIsICZpbmRleF9uYW1lX2J1Zik7CisKKwlpZiAodmVyaWZ5KSB7CisJCWlmICghaW5kZXhfbmFtZSkKKwkJCWRpZShfKCItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iKSk7CisJCXJlYWRfaWR4X29wdGlvbigmb3B0cywgaW5kZXhfbmFtZSk7CisJCW9wdHMuZmxhZ3MgfD0gV1JJVEVfSURYX1ZFUklGWSB8IFdSSVRFX0lEWF9TVFJJQ1Q7CisJfQorCWlmIChzdHJpY3QpCisJCW9wdHMuZmxhZ3MgfD0gV1JJVEVfSURYX1NUUklDVDsKKworCWlmIChIQVZFX1RIUkVBRFMgJiYgIW5yX3RocmVhZHMpIHsKKwkJbnJfdGhyZWFkcyA9IG9ubGluZV9jcHVzKCk7CisJCS8qIEFuIGV4cGVyaW1lbnQgc2hvd2VkIHRoYXQgbW9yZSB0aHJlYWRzIGRvZXMgbm90IG1lYW4gZmFzdGVyICovCisJCWlmIChucl90aHJlYWRzID4gMykKKwkJCW5yX3RocmVhZHMgPSAzOworCX0KKworCWN1cnJfcGFjayA9IG9wZW5fcGFja19maWxlKHBhY2tfbmFtZSk7CisJcGFyc2VfcGFja19oZWFkZXIoKTsKKwlvYmplY3RzID0geGNhbGxvYyhzdF9hZGQobnJfb2JqZWN0cywgMSksIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5KSk7CisJaWYgKHNob3dfc3RhdCkKKwkJb2JqX3N0YXQgPSB4Y2FsbG9jKHN0X2FkZChucl9vYmplY3RzLCAxKSwgc2l6ZW9mKHN0cnVjdCBvYmplY3Rfc3RhdCkpOworCW9mc19kZWx0YXMgPSB4Y2FsbG9jKG5yX29iamVjdHMsIHNpemVvZihzdHJ1Y3Qgb2ZzX2RlbHRhX2VudHJ5KSk7CisJcGFyc2VfcGFja19vYmplY3RzKHBhY2tfaGFzaCk7CisJaWYgKHJlcG9ydF9lbmRfb2ZfaW5wdXQpCisJCXdyaXRlX2luX2Z1bGwoMiwgIlwwIiwgMSk7CisJcmVzb2x2ZV9kZWx0YXMoKTsKKwljb25jbHVkZV9wYWNrKGZpeF90aGluX3BhY2ssIGN1cnJfcGFjaywgcGFja19oYXNoKTsKKwlmcmVlKG9mc19kZWx0YXMpOworCWZyZWUocmVmX2RlbHRhcyk7CisJaWYgKHN0cmljdCkKKwkJZm9yZWlnbl9uciA9IGNoZWNrX29iamVjdHMoKTsKKworCWlmIChzaG93X3N0YXQpCisJCXNob3dfcGFja19pbmZvKHN0YXRfb25seSk7CisKKwlBTExPQ19BUlJBWShpZHhfb2JqZWN0cywgbnJfb2JqZWN0cyk7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykKKwkJaWR4X29iamVjdHNbaV0gPSAmb2JqZWN0c1tpXS5pZHg7CisJY3Vycl9pbmRleCA9IHdyaXRlX2lkeF9maWxlKGluZGV4X25hbWUsIGlkeF9vYmplY3RzLCBucl9vYmplY3RzLCAmb3B0cywgcGFja19oYXNoKTsKKwlmcmVlKGlkeF9vYmplY3RzKTsKKworCWlmICghdmVyaWZ5KQorCQlmaW5hbChwYWNrX25hbWUsIGN1cnJfcGFjaywKKwkJICAgICAgaW5kZXhfbmFtZSwgY3Vycl9pbmRleCwKKwkJICAgICAga2VlcF9tc2csIHByb21pc29yX21zZywKKwkJICAgICAgcGFja19oYXNoKTsKKwllbHNlCisJCWNsb3NlKGlucHV0X2ZkKTsKKworCWlmIChkb19mc2NrX29iamVjdCAmJiBmc2NrX2ZpbmlzaCgmZnNja19vcHRpb25zKSkKKwkJZGllKF8oImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIikpOworCisJZnJlZShvYmplY3RzKTsKKwlzdHJidWZfcmVsZWFzZSgmaW5kZXhfbmFtZV9idWYpOworCWlmIChwYWNrX25hbWUgPT0gTlVMTCkKKwkJZnJlZSgodm9pZCAqKSBjdXJyX3BhY2spOworCWlmIChpbmRleF9uYW1lID09IE5VTEwpCisJCWZyZWUoKHZvaWQgKikgY3Vycl9pbmRleCk7CisKKwkvKgorCSAqIExldCB0aGUgY2FsbGVyIGtub3cgdGhpcyBwYWNrIGlzIG5vdCBzZWxmIGNvbnRhaW5lZAorCSAqLworCWlmIChjaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkICYmIGZvcmVpZ25fbnIpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2luaXQtZGIuYyBiL2J1aWx0aW4vaW5pdC1kYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NGVjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2luaXQtZGIuYwpAQCAtMCwwICsxLDYwMSBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworI2lmbmRlZiBERUZBVUxUX0dJVF9URU1QTEFURV9ESVIKKyNkZWZpbmUgREVGQVVMVF9HSVRfVEVNUExBVEVfRElSICIvdXNyL3NoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcyIKKyNlbmRpZgorCisjaWZkZWYgTk9fVFJVU1RBQkxFX0ZJTEVNT0RFCisjZGVmaW5lIFRFU1RfRklMRU1PREUgMAorI2Vsc2UKKyNkZWZpbmUgVEVTVF9GSUxFTU9ERSAxCisjZW5kaWYKKworc3RhdGljIGludCBpbml0X2lzX2JhcmVfcmVwb3NpdG9yeSA9IDA7CitzdGF0aWMgaW50IGluaXRfc2hhcmVkX3JlcG9zaXRvcnkgPSAtMTsKK3N0YXRpYyBjb25zdCBjaGFyICppbml0X2RiX3RlbXBsYXRlX2RpcjsKKworc3RhdGljIHZvaWQgY29weV90ZW1wbGF0ZXNfMShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICp0ZW1wbGF0ZV9wYXRoLAorCQkJICAgICBESVIgKmRpcikKK3sKKwlzaXplX3QgcGF0aF9iYXNlbGVuID0gcGF0aC0+bGVuOworCXNpemVfdCB0ZW1wbGF0ZV9iYXNlbGVuID0gdGVtcGxhdGVfcGF0aC0+bGVuOworCXN0cnVjdCBkaXJlbnQgKmRlOworCisJLyogTm90ZTogaWYgIi5naXQvaG9va3MiIGZpbGUgZXhpc3RzIGluIHRoZSByZXBvc2l0b3J5IGJlaW5nCisJICogcmUtaW5pdGlhbGl6ZWQsIC9ldGMvY29yZS1naXQvdGVtcGxhdGVzL2hvb2tzL3VwZGF0ZSB3b3VsZAorCSAqIGNhdXNlICJnaXQgaW5pdCIgdG8gZmFpbCBoZXJlLiAgSSB0aGluayB0aGlzIGlzIHNhbmUgYnV0CisJICogaXQgbWVhbnMgdGhhdCB0aGUgc2V0IG9mIHRlbXBsYXRlcyB3ZSBzaGlwIGJ5IGRlZmF1bHQsIGFsb25nCisJICogd2l0aCB0aGUgd2F5IHRoZSBuYW1lc3BhY2UgdW5kZXIgLmdpdC8gaXMgb3JnYW5pemVkLCBzaG91bGQKKwkgKiBiZSByZWFsbHkgY2FyZWZ1bGx5IGNob3Nlbi4KKwkgKi8KKwlzYWZlX2NyZWF0ZV9kaXIocGF0aC0+YnVmLCAxKTsKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0IHN0X2dpdCwgc3RfdGVtcGxhdGU7CisJCWludCBleGlzdHMgPSAwOworCisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgcGF0aF9iYXNlbGVuKTsKKwkJc3RyYnVmX3NldGxlbih0ZW1wbGF0ZV9wYXRoLCB0ZW1wbGF0ZV9iYXNlbGVuKTsKKworCQlpZiAoZGUtPmRfbmFtZVswXSA9PSAnLicpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZHN0cihwYXRoLCBkZS0+ZF9uYW1lKTsKKwkJc3RyYnVmX2FkZHN0cih0ZW1wbGF0ZV9wYXRoLCBkZS0+ZF9uYW1lKTsKKwkJaWYgKGxzdGF0KHBhdGgtPmJ1ZiwgJnN0X2dpdCkpIHsKKwkJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBzdGF0ICclcyciKSwgcGF0aC0+YnVmKTsKKwkJfQorCQllbHNlCisJCQlleGlzdHMgPSAxOworCisJCWlmIChsc3RhdCh0ZW1wbGF0ZV9wYXRoLT5idWYsICZzdF90ZW1wbGF0ZSkpCisJCQlkaWVfZXJybm8oXygiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIpLCB0ZW1wbGF0ZV9wYXRoLT5idWYpOworCisJCWlmIChTX0lTRElSKHN0X3RlbXBsYXRlLnN0X21vZGUpKSB7CisJCQlESVIgKnN1YmRpciA9IG9wZW5kaXIodGVtcGxhdGVfcGF0aC0+YnVmKTsKKwkJCWlmICghc3ViZGlyKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3Qgb3BlbmRpciAnJXMnIiksIHRlbXBsYXRlX3BhdGgtPmJ1Zik7CisJCQlzdHJidWZfYWRkY2gocGF0aCwgJy8nKTsKKwkJCXN0cmJ1Zl9hZGRjaCh0ZW1wbGF0ZV9wYXRoLCAnLycpOworCQkJY29weV90ZW1wbGF0ZXNfMShwYXRoLCB0ZW1wbGF0ZV9wYXRoLCBzdWJkaXIpOworCQkJY2xvc2VkaXIoc3ViZGlyKTsKKwkJfQorCQllbHNlIGlmIChleGlzdHMpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoU19JU0xOSyhzdF90ZW1wbGF0ZS5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBsbmsgPSBTVFJCVUZfSU5JVDsKKwkJCWlmIChzdHJidWZfcmVhZGxpbmsoJmxuaywgdGVtcGxhdGVfcGF0aC0+YnVmLAorCQkJCQkgICAgc3RfdGVtcGxhdGUuc3Rfc2l6ZSkgPCAwKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgcmVhZGxpbmsgJyVzJyIpLCB0ZW1wbGF0ZV9wYXRoLT5idWYpOworCQkJaWYgKHN5bWxpbmsobG5rLmJ1ZiwgcGF0aC0+YnVmKSkKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIiksCisJCQkJCSAgbG5rLmJ1ZiwgcGF0aC0+YnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZsbmspOworCQl9CisJCWVsc2UgaWYgKFNfSVNSRUcoc3RfdGVtcGxhdGUuc3RfbW9kZSkpIHsKKwkJCWlmIChjb3B5X2ZpbGUocGF0aC0+YnVmLCB0ZW1wbGF0ZV9wYXRoLT5idWYsIHN0X3RlbXBsYXRlLnN0X21vZGUpKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29weSAnJXMnIHRvICclcyciKSwKKwkJCQkJICB0ZW1wbGF0ZV9wYXRoLT5idWYsIHBhdGgtPmJ1Zik7CisJCX0KKwkJZWxzZQorCQkJZXJyb3IoXygiaWdub3JpbmcgdGVtcGxhdGUgJXMiKSwgdGVtcGxhdGVfcGF0aC0+YnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfdGVtcGxhdGVzKGNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHRlbXBsYXRlX3BhdGggPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgdGVtcGxhdGVfbGVuOworCXN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCB0ZW1wbGF0ZV9mb3JtYXQgPSBSRVBPU0lUT1JZX0ZPUk1BVF9JTklUOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJRElSICpkaXI7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisKKwlpZiAoIXRlbXBsYXRlX2RpcikKKwkJdGVtcGxhdGVfZGlyID0gZ2V0ZW52KFRFTVBMQVRFX0RJUl9FTlZJUk9OTUVOVCk7CisJaWYgKCF0ZW1wbGF0ZV9kaXIpCisJCXRlbXBsYXRlX2RpciA9IGluaXRfZGJfdGVtcGxhdGVfZGlyOworCWlmICghdGVtcGxhdGVfZGlyKQorCQl0ZW1wbGF0ZV9kaXIgPSB0b19mcmVlID0gc3lzdGVtX3BhdGgoREVGQVVMVF9HSVRfVEVNUExBVEVfRElSKTsKKwlpZiAoIXRlbXBsYXRlX2RpclswXSkgeworCQlmcmVlKHRvX2ZyZWUpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2FkZHN0cigmdGVtcGxhdGVfcGF0aCwgdGVtcGxhdGVfZGlyKTsKKwlzdHJidWZfY29tcGxldGUoJnRlbXBsYXRlX3BhdGgsICcvJyk7CisJdGVtcGxhdGVfbGVuID0gdGVtcGxhdGVfcGF0aC5sZW47CisKKwlkaXIgPSBvcGVuZGlyKHRlbXBsYXRlX3BhdGguYnVmKTsKKwlpZiAoIWRpcikgeworCQl3YXJuaW5nKF8oInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiKSwgdGVtcGxhdGVfZGlyKTsKKwkJZ290byBmcmVlX3JldHVybjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB0ZW1wbGF0ZSBpcyBmcm9tIHRoZSBjb3JyZWN0IHZpbnRhZ2UgKi8KKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZV9wYXRoLCAiY29uZmlnIik7CisJcmVhZF9yZXBvc2l0b3J5X2Zvcm1hdCgmdGVtcGxhdGVfZm9ybWF0LCB0ZW1wbGF0ZV9wYXRoLmJ1Zik7CisJc3RyYnVmX3NldGxlbigmdGVtcGxhdGVfcGF0aCwgdGVtcGxhdGVfbGVuKTsKKworCS8qCisJICogTm8gbWVudGlvbiBvZiB2ZXJzaW9uIGF0IGFsbCBpcyBPSywgYnV0IGFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlCisJICogdmVyaWZpZWQuCisJICovCisJaWYgKHRlbXBsYXRlX2Zvcm1hdC52ZXJzaW9uID49IDAgJiYKKwkgICAgdmVyaWZ5X3JlcG9zaXRvcnlfZm9ybWF0KCZ0ZW1wbGF0ZV9mb3JtYXQsICZlcnIpIDwgMCkgeworCQl3YXJuaW5nKF8oIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIiksCisJCQkgIHRlbXBsYXRlX2RpciwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlnb3RvIGNsb3NlX2ZyZWVfcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGdldF9naXRfY29tbW9uX2RpcigpKTsKKwlzdHJidWZfY29tcGxldGUoJnBhdGgsICcvJyk7CisJY29weV90ZW1wbGF0ZXNfMSgmcGF0aCwgJnRlbXBsYXRlX3BhdGgsIGRpcik7CitjbG9zZV9mcmVlX3JldHVybjoKKwljbG9zZWRpcihkaXIpOworZnJlZV9yZXR1cm46CisJZnJlZSh0b19mcmVlKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJnRlbXBsYXRlX3BhdGgpOworCWNsZWFyX3JlcG9zaXRvcnlfZm9ybWF0KCZ0ZW1wbGF0ZV9mb3JtYXQpOworfQorCitzdGF0aWMgaW50IGdpdF9pbml0X2RiX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcChrLCAiaW5pdC50ZW1wbGF0ZWRpciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmaW5pdF9kYl90ZW1wbGF0ZV9kaXIsIGssIHYpOworCisJaWYgKHN0YXJ0c193aXRoKGssICJjb3JlLiIpKQorCQlyZXR1cm4gcGxhdGZvcm1fY29yZV9jb25maWcoaywgdiwgY2IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJZiB0aGUgZ2l0X2RpciBpcyBub3QgZGlyZWN0bHkgaW5zaWRlIHRoZSB3b3JraW5nIHRyZWUsIHRoZW4gZ2l0IHdpbGwgbm90CisgKiBmaW5kIGl0IGJ5IGRlZmF1bHQsIGFuZCB3ZSBuZWVkIHRvIHNldCB0aGUgd29ya3RyZWUgZXhwbGljaXRseS4KKyAqLworc3RhdGljIGludCBuZWVkc193b3JrX3RyZWVfY29uZmlnKGNvbnN0IGNoYXIgKmdpdF9kaXIsIGNvbnN0IGNoYXIgKndvcmtfdHJlZSkKK3sKKwlpZiAoIXN0cmNtcCh3b3JrX3RyZWUsICIvIikgJiYgIXN0cmNtcChnaXRfZGlyLCAiLy5naXQiKSkKKwkJcmV0dXJuIDA7CisJaWYgKHNraXBfcHJlZml4KGdpdF9kaXIsIHdvcmtfdHJlZSwgJmdpdF9kaXIpICYmCisJICAgICFzdHJjbXAoZ2l0X2RpciwgIi8uZ2l0IikpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9kZWZhdWx0X2ZpbGVzKGNvbnN0IGNoYXIgKnRlbXBsYXRlX3BhdGgsCisJCQkJY29uc3QgY2hhciAqb3JpZ2luYWxfZ2l0X2RpcikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpwYXRoOworCWNoYXIgcmVwb192ZXJzaW9uX3N0cmluZ1sxMF07CisJY2hhciBqdW5rWzJdOworCWludCByZWluaXQ7CisJaW50IGZpbGVtb2RlOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBKdXN0IGxvb2sgZm9yIGBpbml0LnRlbXBsYXRlZGlyYCAqLworCWluaXRfZGJfdGVtcGxhdGVfZGlyID0gTlVMTDsgLyogcmUtc2V0IGluIGNhc2UgaXQgd2FzIHNldCBiZWZvcmUgKi8KKwlnaXRfY29uZmlnKGdpdF9pbml0X2RiX2NvbmZpZywgTlVMTCk7CisKKwkvKgorCSAqIEZpcnN0IGNvcHkgdGhlIHRlbXBsYXRlcyAtLSB3ZSBtaWdodCBoYXZlIHRoZSBkZWZhdWx0CisJICogY29uZmlnIGZpbGUgdGhlcmUsIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgd2FudCB0byByZWFkCisJICogZnJvbSBpdCBhZnRlciBpbnN0YWxsaW5nLgorCSAqCisJICogQmVmb3JlIHJlYWRpbmcgdGhhdCBjb25maWcsIHdlIGFsc28gbmVlZCB0byBjbGVhciBvdXQgYW55IGNhY2hlZAorCSAqIHZhbHVlcyAoc2luY2Ugd2UndmUganVzdCBwb3RlbnRpYWxseSBjaGFuZ2VkIHdoYXQncyBhdmFpbGFibGUgb24KKwkgKiBkaXNrKS4KKwkgKi8KKwljb3B5X3RlbXBsYXRlcyh0ZW1wbGF0ZV9wYXRoKTsKKwlnaXRfY29uZmlnX2NsZWFyKCk7CisJcmVzZXRfc2hhcmVkX3JlcG9zaXRvcnkoKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwkvKgorCSAqIFdlIG11c3QgbWFrZSBzdXJlIGNvbW1hbmQtbGluZSBvcHRpb25zIGNvbnRpbnVlIHRvIG92ZXJyaWRlIGFueQorCSAqIHZhbHVlcyB3ZSBtaWdodCBoYXZlIGp1c3QgcmUtcmVhZCBmcm9tIHRoZSBjb25maWcuCisJICovCisJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IGluaXRfaXNfYmFyZV9yZXBvc2l0b3J5OworCWlmIChpbml0X3NoYXJlZF9yZXBvc2l0b3J5ICE9IC0xKQorCQlzZXRfc2hhcmVkX3JlcG9zaXRvcnkoaW5pdF9zaGFyZWRfcmVwb3NpdG9yeSk7CisKKwkvKgorCSAqIFdlIHdvdWxkIGhhdmUgY3JlYXRlZCB0aGUgYWJvdmUgdW5kZXIgdXNlcidzIHVtYXNrIC0tIHVuZGVyCisJICogc2hhcmVkLXJlcG9zaXRvcnkgc2V0dGluZ3MsIHdlIHdvdWxkIG5lZWQgdG8gZml4IHRoZW0gdXAuCisJICovCisJaWYgKGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpKSB7CisJCWFkanVzdF9zaGFyZWRfcGVybShnZXRfZ2l0X2RpcigpKTsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gY3JlYXRlIGEgInJlZnMiIGRpciBpbiBhbnkgY2FzZSBzbyB0aGF0IG9sZGVyCisJICogdmVyc2lvbnMgb2YgZ2l0IGNhbiB0ZWxsIHRoYXQgdGhpcyBpcyBhIHJlcG9zaXRvcnkuCisJICovCisJc2FmZV9jcmVhdGVfZGlyKGdpdF9wYXRoKCJyZWZzIiksIDEpOworCWFkanVzdF9zaGFyZWRfcGVybShnaXRfcGF0aCgicmVmcyIpKTsKKworCWlmIChyZWZzX2luaXRfZGIoJmVycikpCisJCWRpZSgiZmFpbGVkIHRvIHNldCB1cCByZWZzIGRiOiAlcyIsIGVyci5idWYpOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIGRlZmF1bHQgc3ltbGluayBmcm9tICIuZ2l0L0hFQUQiIHRvIHRoZSAibWFzdGVyIgorCSAqIGJyYW5jaCwgaWYgaXQgZG9lcyBub3QgZXhpc3QgeWV0LgorCSAqLworCXBhdGggPSBnaXRfcGF0aF9idWYoJmJ1ZiwgIkhFQUQiKTsKKwlyZWluaXQgPSAoIWFjY2VzcyhwYXRoLCBSX09LKQorCQkgIHx8IHJlYWRsaW5rKHBhdGgsIGp1bmssIHNpemVvZihqdW5rKS0xKSAhPSAtMSk7CisJaWYgKCFyZWluaXQpIHsKKwkJaWYgKGNyZWF0ZV9zeW1yZWYoIkhFQUQiLCAicmVmcy9oZWFkcy9tYXN0ZXIiLCBOVUxMKSA8IDApCisJCQlleGl0KDEpOworCX0KKworCS8qIFRoaXMgZm9yY2VzIGNyZWF0aW9uIG9mIG5ldyBjb25maWcgZmlsZSAqLworCXhzbnByaW50ZihyZXBvX3ZlcnNpb25fc3RyaW5nLCBzaXplb2YocmVwb192ZXJzaW9uX3N0cmluZyksCisJCSAgIiVkIiwgR0lUX1JFUE9fVkVSU0lPTik7CisJZ2l0X2NvbmZpZ19zZXQoImNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24iLCByZXBvX3ZlcnNpb25fc3RyaW5nKTsKKworCS8qIENoZWNrIGZpbGVtb2RlIHRydXN0YWJpbGl0eSAqLworCXBhdGggPSBnaXRfcGF0aF9idWYoJmJ1ZiwgImNvbmZpZyIpOworCWZpbGVtb2RlID0gVEVTVF9GSUxFTU9ERTsKKwlpZiAoVEVTVF9GSUxFTU9ERSAmJiAhbHN0YXQocGF0aCwgJnN0MSkpIHsKKwkJc3RydWN0IHN0YXQgc3QyOworCQlmaWxlbW9kZSA9ICghY2htb2QocGF0aCwgc3QxLnN0X21vZGUgXiBTX0lYVVNSKSAmJgorCQkJCSFsc3RhdChwYXRoLCAmc3QyKSAmJgorCQkJCXN0MS5zdF9tb2RlICE9IHN0Mi5zdF9tb2RlICYmCisJCQkJIWNobW9kKHBhdGgsIHN0MS5zdF9tb2RlKSk7CisJCWlmIChmaWxlbW9kZSAmJiAhcmVpbml0ICYmIChzdDEuc3RfbW9kZSAmIFNfSVhVU1IpKQorCQkJZmlsZW1vZGUgPSAwOworCX0KKwlnaXRfY29uZmlnX3NldCgiY29yZS5maWxlbW9kZSIsIGZpbGVtb2RlID8gInRydWUiIDogImZhbHNlIik7CisKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCWdpdF9jb25maWdfc2V0KCJjb3JlLmJhcmUiLCAidHJ1ZSIpOworCWVsc2UgeworCQljb25zdCBjaGFyICp3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCQlnaXRfY29uZmlnX3NldCgiY29yZS5iYXJlIiwgImZhbHNlIik7CisJCS8qIGFsbG93IHRlbXBsYXRlIGNvbmZpZyBmaWxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0ICovCisJCWlmIChsb2dfYWxsX3JlZl91cGRhdGVzID09IExPR19SRUZTX1VOU0VUKQorCQkJZ2l0X2NvbmZpZ19zZXQoImNvcmUubG9nYWxscmVmdXBkYXRlcyIsICJ0cnVlIik7CisJCWlmIChuZWVkc193b3JrX3RyZWVfY29uZmlnKG9yaWdpbmFsX2dpdF9kaXIsIHdvcmtfdHJlZSkpCisJCQlnaXRfY29uZmlnX3NldCgiY29yZS53b3JrdHJlZSIsIHdvcmtfdHJlZSk7CisJfQorCisJaWYgKCFyZWluaXQpIHsKKwkJLyogQ2hlY2sgaWYgc3ltbGluayBpcyBzdXBwb3J0ZWQgaW4gdGhlIHdvcmsgdHJlZSAqLworCQlwYXRoID0gZ2l0X3BhdGhfYnVmKCZidWYsICJ0WFhYWFhYIik7CisJCWlmICghY2xvc2UoeG1rc3RlbXAocGF0aCkpICYmCisJCSAgICAhdW5saW5rKHBhdGgpICYmCisJCSAgICAhc3ltbGluaygidGVzdGluZyIsIHBhdGgpICYmCisJCSAgICAhbHN0YXQocGF0aCwgJnN0MSkgJiYKKwkJICAgIFNfSVNMTksoc3QxLnN0X21vZGUpKQorCQkJdW5saW5rKHBhdGgpOyAvKiBnb29kICovCisJCWVsc2UKKwkJCWdpdF9jb25maWdfc2V0KCJjb3JlLnN5bWxpbmtzIiwgImZhbHNlIik7CisKKwkJLyogQ2hlY2sgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgY2FzZS1pbnNlbnNpdGl2ZSAqLworCQlwYXRoID0gZ2l0X3BhdGhfYnVmKCZidWYsICJDb05mSWciKTsKKwkJaWYgKCFhY2Nlc3MocGF0aCwgRl9PSykpCisJCQlnaXRfY29uZmlnX3NldCgiY29yZS5pZ25vcmVjYXNlIiwgInRydWUiKTsKKwkJcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbigpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZWluaXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9vYmplY3RfZGlyZWN0b3J5KHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGJhc2VsZW47CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwliYXNlbGVuID0gcGF0aC5sZW47CisKKwlzYWZlX2NyZWF0ZV9kaXIocGF0aC5idWYsIDEpOworCisJc3RyYnVmX3NldGxlbigmcGF0aCwgYmFzZWxlbik7CisJc3RyYnVmX2FkZHN0cigmcGF0aCwgIi9wYWNrIik7CisJc2FmZV9jcmVhdGVfZGlyKHBhdGguYnVmLCAxKTsKKworCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGJhc2VsZW4pOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvaW5mbyIpOworCXNhZmVfY3JlYXRlX2RpcihwYXRoLmJ1ZiwgMSk7CisKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcGFyYXRlX2dpdF9kaXIoY29uc3QgY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqZ2l0X2xpbmspCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXN0YXQoZ2l0X2xpbmssICZzdCkpIHsKKwkJY29uc3QgY2hhciAqc3JjOworCisJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJc3JjID0gcmVhZF9naXRmaWxlKGdpdF9saW5rKTsKKwkJZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCXNyYyA9IGdpdF9saW5rOworCQllbHNlCisJCQlkaWUoXygidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiKSwgKGludClzdC5zdF9tb2RlKTsKKworCQlpZiAocmVuYW1lKHNyYywgZ2l0X2RpcikpCisJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiKSwgc3JjLCBnaXRfZGlyKTsKKwl9CisKKwl3cml0ZV9maWxlKGdpdF9saW5rLCAiZ2l0ZGlyOiAlcyIsIGdpdF9kaXIpOworfQorCitpbnQgaW5pdF9kYihjb25zdCBjaGFyICpnaXRfZGlyLCBjb25zdCBjaGFyICpyZWFsX2dpdF9kaXIsCisJICAgIGNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCByZWluaXQ7CisJaW50IGV4aXN0X29rID0gZmxhZ3MgJiBJTklUX0RCX0VYSVNUX09LOworCWNoYXIgKm9yaWdpbmFsX2dpdF9kaXIgPSByZWFsX3BhdGhkdXAoZ2l0X2RpciwgMSk7CisKKwlpZiAocmVhbF9naXRfZGlyKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCWlmICghZXhpc3Rfb2sgJiYgIXN0YXQoZ2l0X2RpciwgJnN0KSkKKwkJCWRpZShfKCIlcyBhbHJlYWR5IGV4aXN0cyIpLCBnaXRfZGlyKTsKKworCQlpZiAoIWV4aXN0X29rICYmICFzdGF0KHJlYWxfZ2l0X2RpciwgJnN0KSkKKwkJCWRpZShfKCIlcyBhbHJlYWR5IGV4aXN0cyIpLCByZWFsX2dpdF9kaXIpOworCisJCXNldF9naXRfZGlyKHJlYWxfcGF0aChyZWFsX2dpdF9kaXIpKTsKKwkJZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CisJCXNlcGFyYXRlX2dpdF9kaXIoZ2l0X2Rpciwgb3JpZ2luYWxfZ2l0X2Rpcik7CisJfQorCWVsc2UgeworCQlzZXRfZ2l0X2RpcihyZWFsX3BhdGgoZ2l0X2RpcikpOworCQlnaXRfZGlyID0gZ2V0X2dpdF9kaXIoKTsKKwl9CisJc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkgPSAxOworCisJLyogSnVzdCBsb29rIGZvciBgY29yZS5oaWRlZG90ZmlsZXNgICovCisJZ2l0X2NvbmZpZyhnaXRfaW5pdF9kYl9jb25maWcsIE5VTEwpOworCisJc2FmZV9jcmVhdGVfZGlyKGdpdF9kaXIsIDApOworCisJaW5pdF9pc19iYXJlX3JlcG9zaXRvcnkgPSBpc19iYXJlX3JlcG9zaXRvcnkoKTsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVwb3NpdG9yeSB2ZXJzaW9uIGlzIHJpZ2h0LgorCSAqIE5vdGUgdGhhdCBhIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeSBkb2VzIG5vdCBoYXZlCisJICogY29uZmlnIGZpbGUsIHNvIHRoaXMgd2lsbCBub3QgZmFpbC4gIFdoYXQgd2UgYXJlIGNhdGNoaW5nCisJICogaXMgYW4gYXR0ZW1wdCB0byByZWluaXRpYWxpemUgbmV3IHJlcG9zaXRvcnkgd2l0aCBhbiBvbGQgdG9vbC4KKwkgKi8KKwljaGVja19yZXBvc2l0b3J5X2Zvcm1hdCgpOworCisJcmVpbml0ID0gY3JlYXRlX2RlZmF1bHRfZmlsZXModGVtcGxhdGVfZGlyLCBvcmlnaW5hbF9naXRfZGlyKTsKKworCWNyZWF0ZV9vYmplY3RfZGlyZWN0b3J5KCk7CisKKwlpZiAoZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkpIHsKKwkJY2hhciBidWZbMTBdOworCQkvKiBXZSBkbyBub3Qgc3BlbGwgImdyb3VwIiBhbmQgc3VjaCwgc28gdGhhdAorCQkgKiB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgcmVhZCBieSBvbGRlciB2ZXJzaW9uCisJCSAqIG9mIGdpdC4gTm90ZSwgd2UgdXNlIG9jdGFsIG51bWJlcnMgZm9yIG5ldyBzaGFyZSBtb2RlcywKKwkJICogYW5kIGNvbXBhdGliaWxpdHkgdmFsdWVzIGZvciBQRVJNX0dST1VQIGFuZAorCQkgKiBQRVJNX0VWRVJZQk9EWS4KKwkJICovCisJCWlmIChnZXRfc2hhcmVkX3JlcG9zaXRvcnkoKSA8IDApCisJCQkvKiBmb3JjZSB0byB0aGUgbW9kZSB2YWx1ZSAqLworCQkJeHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIwJW8iLCAtZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkpOworCQllbHNlIGlmIChnZXRfc2hhcmVkX3JlcG9zaXRvcnkoKSA9PSBQRVJNX0dST1VQKQorCQkJeHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIE9MRF9QRVJNX0dST1VQKTsKKwkJZWxzZSBpZiAoZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkgPT0gUEVSTV9FVkVSWUJPRFkpCisJCQl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgT0xEX1BFUk1fRVZFUllCT0RZKTsKKwkJZWxzZQorCQkJQlVHKCJpbnZhbGlkIHZhbHVlIGZvciBzaGFyZWRfcmVwb3NpdG9yeSIpOworCQlnaXRfY29uZmlnX3NldCgiY29yZS5zaGFyZWRyZXBvc2l0b3J5IiwgYnVmKTsKKwkJZ2l0X2NvbmZpZ19zZXQoInJlY2VpdmUuZGVueU5vbkZhc3Rmb3J3YXJkcyIsICJ0cnVlIik7CisJfQorCisJaWYgKCEoZmxhZ3MgJiBJTklUX0RCX1FVSUVUKSkgeworCQlpbnQgbGVuID0gc3RybGVuKGdpdF9kaXIpOworCisJCWlmIChyZWluaXQpCisJCQlwcmludGYoZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkKKwkJCSAgICAgICA/IF8oIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIpCisJCQkgICAgICAgOiBfKCJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIpLAorCQkJICAgICAgIGdpdF9kaXIsIGxlbiAmJiBnaXRfZGlyW2xlbi0xXSAhPSAnLycgPyAiLyIgOiAiIik7CisJCWVsc2UKKwkJCXByaW50ZihnZXRfc2hhcmVkX3JlcG9zaXRvcnkoKQorCQkJICAgICAgID8gXygiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIpCisJCQkgICAgICAgOiBfKCJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iKSwKKwkJCSAgICAgICBnaXRfZGlyLCBsZW4gJiYgZ2l0X2RpcltsZW4tMV0gIT0gJy8nID8gIi8iIDogIiIpOworCX0KKworCWZyZWUob3JpZ2luYWxfZ2l0X2Rpcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Vlc3NfcmVwb3NpdG9yeV90eXBlKGNvbnN0IGNoYXIgKmdpdF9kaXIpCit7CisJY29uc3QgY2hhciAqc2xhc2g7CisJY2hhciAqY3dkOworCWludCBjd2RfaXNfZ2l0X2RpcjsKKworCS8qCisJICogIkdJVF9ESVI9LiBnaXQgaW5pdCIgaXMgYWx3YXlzIGJhcmUuCisJICogIkdJVF9ESVI9YHB3ZGAgZ2l0IGluaXQiIHRvby4KKwkgKi8KKwlpZiAoIXN0cmNtcCgiLiIsIGdpdF9kaXIpKQorCQlyZXR1cm4gMTsKKwljd2QgPSB4Z2V0Y3dkKCk7CisJY3dkX2lzX2dpdF9kaXIgPSAhc3RyY21wKGdpdF9kaXIsIGN3ZCk7CisJZnJlZShjd2QpOworCWlmIChjd2RfaXNfZ2l0X2RpcikKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiAiR0lUX0RJUj0uZ2l0IG9yIEdJVF9ESVI9c29tZXRoaW5nLy5naXQgaXMgdXN1YWxseSBub3QuCisJICovCisJaWYgKCFzdHJjbXAoZ2l0X2RpciwgIi5naXQiKSkKKwkJcmV0dXJuIDA7CisJc2xhc2ggPSBzdHJyY2hyKGdpdF9kaXIsICcvJyk7CisJaWYgKHNsYXNoICYmICFzdHJjbXAoc2xhc2gsICIvLmdpdCIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogT3RoZXJ3aXNlIGl0IGlzIG9mdGVuIGJhcmUuICBBdCB0aGlzIHBvaW50CisJICogd2UgYXJlIGp1c3QgZ3Vlc3NpbmcuCisJICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2hhcmVkX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCSooKGludCAqKSBvcHQtPnZhbHVlKSA9IChhcmcpID8gZ2l0X2NvbmZpZ19wZXJtKCJhcmciLCBhcmcpIDogUEVSTV9HUk9VUDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGluaXRfZGJfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iKSwKKwlOVUxMCit9OworCisvKgorICogSWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gc2hhcmUgdGhlIERCIGFyZWEgd2l0aCBhbnkgbnVtYmVyIG9mIGJyYW5jaGVzLgorICogVGhhdCBoYXMgYWR2YW50YWdlczogeW91IGNhbiBzYXZlIHNwYWNlIGJ5IHNoYXJpbmcgYWxsIHRoZSBTSEExIG9iamVjdHMuCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbWlnaHQganVzdCBtYWtlIGxvb2t1cCBzbG93ZXIgYW5kIG1lc3NpZXIuIFlvdQorICogYmUgdGhlIGp1ZGdlLiAgVGhlIGRlZmF1bHQgY2FzZSBpcyB0byBoYXZlIG9uZSBEQiBwZXIgbWFuYWdlZCBkaXJlY3RvcnkuCisgKi8KK2ludCBjbWRfaW5pdF9kYihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpnaXRfZGlyOworCWNvbnN0IGNoYXIgKnJlYWxfZ2l0X2RpciA9IE5VTEw7CisJY29uc3QgY2hhciAqd29ya190cmVlOworCWNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciA9IE5VTEw7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGluaXRfZGJfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJ0ZW1wbGF0ZSIsICZ0ZW1wbGF0ZV9kaXIsIE5fKCJ0ZW1wbGF0ZS1kaXJlY3RvcnkiKSwKKwkJCQlOXygiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgImJhcmUiLCAmaXNfYmFyZV9yZXBvc2l0b3J5X2NmZywKKwkJCQlOXygiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IiksIDEpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInNoYXJlZCIsICZpbml0X3NoYXJlZF9yZXBvc2l0b3J5LAorCQkJTl8oInBlcm1pc3Npb25zIiksCisJCQlOXygic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIiksCisJCQlQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBzaGFyZWRfY2FsbGJhY2ssIDB9LAorCQlPUFRfQklUKCdxJywgInF1aWV0IiwgJmZsYWdzLCBOXygiYmUgcXVpZXQiKSwgSU5JVF9EQl9RVUlFVCksCisJCU9QVF9TVFJJTkcoMCwgInNlcGFyYXRlLWdpdC1kaXIiLCAmcmVhbF9naXRfZGlyLCBOXygiZ2l0ZGlyIiksCisJCQkgICBOXygic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgaW5pdF9kYl9vcHRpb25zLCBpbml0X2RiX3VzYWdlLCAwKTsKKworCWlmIChyZWFsX2dpdF9kaXIgJiYgIWlzX2Fic29sdXRlX3BhdGgocmVhbF9naXRfZGlyKSkKKwkJcmVhbF9naXRfZGlyID0gcmVhbF9wYXRoZHVwKHJlYWxfZ2l0X2RpciwgMSk7CisKKwlpZiAodGVtcGxhdGVfZGlyICYmICp0ZW1wbGF0ZV9kaXIgJiYgIWlzX2Fic29sdXRlX3BhdGgodGVtcGxhdGVfZGlyKSkKKwkJdGVtcGxhdGVfZGlyID0gYWJzb2x1dGVfcGF0aGR1cCh0ZW1wbGF0ZV9kaXIpOworCisJaWYgKGFyZ2MgPT0gMSkgeworCQlpbnQgbWtkaXJfdHJpZWQgPSAwOworCXJldHJ5OgorCQlpZiAoY2hkaXIoYXJndlswXSkgPCAwKSB7CisJCQlpZiAoIW1rZGlyX3RyaWVkKSB7CisJCQkJaW50IHNhdmVkOworCQkJCS8qCisJCQkJICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlbid0IHJlYWQgYW55IGNvbmZpZ3VyYXRpb24sCisJCQkJICogYW5kIHdlIGtub3cgc2hhcmVkX3JlcG9zaXRvcnkgc2hvdWxkIGFsd2F5cyBiZSAwOworCQkJCSAqIGJ1dCBqdXN0IGluIGNhc2Ugd2UgcGxheSBzYWZlLgorCQkJCSAqLworCQkJCXNhdmVkID0gZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCk7CisJCQkJc2V0X3NoYXJlZF9yZXBvc2l0b3J5KDApOworCQkJCXN3aXRjaCAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChhcmd2WzBdKSkgeworCQkJCWNhc2UgU0NMRF9PSzoKKwkJCQljYXNlIFNDTERfUEVSTVM6CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU0NMRF9FWElTVFM6CisJCQkJCWVycm5vID0gRUVYSVNUOworCQkJCQkvKiBmYWxsdGhydSAqLworCQkJCWRlZmF1bHQ6CisJCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgbWtkaXIgJXMiKSwgYXJndlswXSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzZXRfc2hhcmVkX3JlcG9zaXRvcnkoc2F2ZWQpOworCQkJCWlmIChta2Rpcihhcmd2WzBdLCAwNzc3KSA8IDApCisJCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgbWtkaXIgJXMiKSwgYXJndlswXSk7CisJCQkJbWtkaXJfdHJpZWQgPSAxOworCQkJCWdvdG8gcmV0cnk7CisJCQl9CisJCQlkaWVfZXJybm8oXygiY2Fubm90IGNoZGlyIHRvICVzIiksIGFyZ3ZbMF0pOworCQl9CisJfSBlbHNlIGlmICgwIDwgYXJnYykgeworCQl1c2FnZShpbml0X2RiX3VzYWdlWzBdKTsKKwl9CisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPT0gMSkgeworCQljaGFyICpjd2QgPSB4Z2V0Y3dkKCk7CisJCXNldGVudihHSVRfRElSX0VOVklST05NRU5ULCBjd2QsIGFyZ2MgPiAwKTsKKwkJZnJlZShjd2QpOworCX0KKworCWlmIChpbml0X3NoYXJlZF9yZXBvc2l0b3J5ICE9IC0xKQorCQlzZXRfc2hhcmVkX3JlcG9zaXRvcnkoaW5pdF9zaGFyZWRfcmVwb3NpdG9yeSk7CisKKwkvKgorCSAqIEdJVF9XT1JLX1RSRUUgbWFrZXMgc2Vuc2Ugb25seSBpbiBjb25qdW5jdGlvbiB3aXRoIEdJVF9ESVIKKwkgKiB3aXRob3V0IC0tYmFyZS4gIENhdGNoIHRoZSBlcnJvciBlYXJseS4KKwkgKi8KKwlnaXRfZGlyID0geHN0cmR1cF9vcl9udWxsKGdldGVudihHSVRfRElSX0VOVklST05NRU5UKSk7CisJd29ya190cmVlID0geHN0cmR1cF9vcl9udWxsKGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKSk7CisJaWYgKCghZ2l0X2RpciB8fCBpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID09IDEpICYmIHdvcmtfdHJlZSkKKwkJZGllKF8oIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCAiCisJCQkgICJzcGVjaWZ5aW5nICVzIChvciAtLWdpdC1kaXI9PGRpcmVjdG9yeT4pIiksCisJCSAgICBHSVRfV09SS19UUkVFX0VOVklST05NRU5ULAorCQkgICAgR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgZGVmYXVsdCAuZ2l0IGRpcmVjdG9yeSBjb250ZW50cworCSAqLworCWlmICghZ2l0X2RpcikKKwkJZ2l0X2RpciA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKKworCWlmIChpc19iYXJlX3JlcG9zaXRvcnlfY2ZnIDwgMCkKKwkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IGd1ZXNzX3JlcG9zaXRvcnlfdHlwZShnaXRfZGlyKTsKKworCWlmICghaXNfYmFyZV9yZXBvc2l0b3J5X2NmZykgeworCQljb25zdCBjaGFyICpnaXRfZGlyX3BhcmVudCA9IHN0cnJjaHIoZ2l0X2RpciwgJy8nKTsKKwkJaWYgKGdpdF9kaXJfcGFyZW50KSB7CisJCQljaGFyICpyZWwgPSB4c3RybmR1cChnaXRfZGlyLCBnaXRfZGlyX3BhcmVudCAtIGdpdF9kaXIpOworCQkJZ2l0X3dvcmtfdHJlZV9jZmcgPSByZWFsX3BhdGhkdXAocmVsLCAxKTsKKwkJCWZyZWUocmVsKTsKKwkJfQorCQlpZiAoIWdpdF93b3JrX3RyZWVfY2ZnKQorCQkJZ2l0X3dvcmtfdHJlZV9jZmcgPSB4Z2V0Y3dkKCk7CisJCWlmICh3b3JrX3RyZWUpCisJCQlzZXRfZ2l0X3dvcmtfdHJlZSh3b3JrX3RyZWUpOworCQllbHNlCisJCQlzZXRfZ2l0X3dvcmtfdHJlZShnaXRfd29ya190cmVlX2NmZyk7CisJCWlmIChhY2Nlc3MoZ2V0X2dpdF93b3JrX3RyZWUoKSwgWF9PSykpCisJCQlkaWVfZXJybm8gKF8oIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciKSwKKwkJCQkgICBnZXRfZ2l0X3dvcmtfdHJlZSgpKTsKKwl9CisJZWxzZSB7CisJCWlmICh3b3JrX3RyZWUpCisJCQlzZXRfZ2l0X3dvcmtfdHJlZSh3b3JrX3RyZWUpOworCX0KKworCVVOTEVBSyhyZWFsX2dpdF9kaXIpOworCVVOTEVBSyhnaXRfZGlyKTsKKwlVTkxFQUsod29ya190cmVlKTsKKworCWZsYWdzIHw9IElOSVRfREJfRVhJU1RfT0s7CisJcmV0dXJuIGluaXRfZGIoZ2l0X2RpciwgcmVhbF9naXRfZGlyLCB0ZW1wbGF0ZV9kaXIsIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmMgYi9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMDFkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGludGVycHJldC10cmFpbGVycyIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIDIwMTQgQ2hyaXN0aWFuIENvdWRlciA8Y2hyaXNjb29sQHR1eGZhbWlseS5vcmc+CisgKgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ0cmFpbGVyLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X2ludGVycHJldF90cmFpbGVyc191c2FnZVtdID0geworCU5fKCJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBlbnVtIHRyYWlsZXJfd2hlcmUgd2hlcmU7CitzdGF0aWMgZW51bSB0cmFpbGVyX2lmX2V4aXN0cyBpZl9leGlzdHM7CitzdGF0aWMgZW51bSB0cmFpbGVyX2lmX21pc3NpbmcgaWZfbWlzc2luZzsKKworc3RhdGljIGludCBvcHRpb25fcGFyc2Vfd2hlcmUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIHRyYWlsZXJfc2V0X3doZXJlKCZ3aGVyZSwgYXJnKTsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfaWZfZXhpc3RzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiB0cmFpbGVyX3NldF9pZl9leGlzdHMoJmlmX2V4aXN0cywgYXJnKTsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfaWZfbWlzc2luZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIHRyYWlsZXJfc2V0X2lmX21pc3NpbmcoJmlmX21pc3NpbmcsIGFyZyk7Cit9CisKK3N0YXRpYyB2b2lkIG5ld190cmFpbGVyc19jbGVhcihzdHJ1Y3QgbGlzdF9oZWFkICp0cmFpbGVycykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CisJc3RydWN0IG5ld190cmFpbGVyX2l0ZW0gKml0ZW07CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsIHRyYWlsZXJzKSB7CisJCWl0ZW0gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG5ld190cmFpbGVyX2l0ZW0sIGxpc3QpOworCQlsaXN0X2RlbChwb3MpOworCQlmcmVlKGl0ZW0pOworCX0KK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfdHJhaWxlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdHJhaWxlcnMgPSBvcHQtPnZhbHVlOworCXN0cnVjdCBuZXdfdHJhaWxlcl9pdGVtICppdGVtOworCisJaWYgKHVuc2V0KSB7CisJCW5ld190cmFpbGVyc19jbGVhcih0cmFpbGVycyk7CisJCXJldHVybiAwOworCX0KKworCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisKKwlpdGVtID0geG1hbGxvYyhzaXplb2YoKml0ZW0pKTsKKwlpdGVtLT50ZXh0ID0gYXJnOworCWl0ZW0tPndoZXJlID0gd2hlcmU7CisJaXRlbS0+aWZfZXhpc3RzID0gaWZfZXhpc3RzOworCWl0ZW0tPmlmX21pc3NpbmcgPSBpZl9taXNzaW5nOworCWxpc3RfYWRkX3RhaWwoJml0ZW0tPmxpc3QsIHRyYWlsZXJzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9vcHRfcGFyc2UoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICBpbnQgdW5zZXQpCit7CisJc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zICp2ID0gb3B0LT52YWx1ZTsKKwl2LT5vbmx5X3RyYWlsZXJzID0gMTsKKwl2LT5vbmx5X2lucHV0ID0gMTsKKwl2LT51bmZvbGQgPSAxOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCXJldHVybiAwOworfQorCitpbnQgY21kX2ludGVycHJldF90cmFpbGVycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc190cmFpbGVyX29wdGlvbnMgb3B0cyA9IFBST0NFU1NfVFJBSUxFUl9PUFRJT05TX0lOSVQ7CisJTElTVF9IRUFEKHRyYWlsZXJzKTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAiaW4tcGxhY2UiLCAmb3B0cy5pbl9wbGFjZSwgTl8oImVkaXQgZmlsZXMgaW4gcGxhY2UiKSksCisJCU9QVF9CT09MKDAsICJ0cmltLWVtcHR5IiwgJm9wdHMudHJpbV9lbXB0eSwgTl8oInRyaW0gZW1wdHkgdHJhaWxlcnMiKSksCisKKwkJT1BUX0NBTExCQUNLKDAsICJ3aGVyZSIsIE5VTEwsIE5fKCJhY3Rpb24iKSwKKwkJCSAgICAgTl8oIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIpLCBvcHRpb25fcGFyc2Vfd2hlcmUpLAorCQlPUFRfQ0FMTEJBQ0soMCwgImlmLWV4aXN0cyIsIE5VTEwsIE5fKCJhY3Rpb24iKSwKKwkJCSAgICAgTl8oImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIiksIG9wdGlvbl9wYXJzZV9pZl9leGlzdHMpLAorCQlPUFRfQ0FMTEJBQ0soMCwgImlmLW1pc3NpbmciLCBOVUxMLCBOXygiYWN0aW9uIiksCisJCQkgICAgIE5fKCJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIiksIG9wdGlvbl9wYXJzZV9pZl9taXNzaW5nKSwKKworCQlPUFRfQk9PTCgwLCAib25seS10cmFpbGVycyIsICZvcHRzLm9ubHlfdHJhaWxlcnMsIE5fKCJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiKSksCisJCU9QVF9CT09MKDAsICJvbmx5LWlucHV0IiwgJm9wdHMub25seV9pbnB1dCwgTl8oImRvIG5vdCBhcHBseSBjb25maWcgcnVsZXMiKSksCisJCU9QVF9CT09MKDAsICJ1bmZvbGQiLCAmb3B0cy51bmZvbGQsIE5fKCJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJwYXJzZSIsICZvcHRzLCBOVUxMLCBOXygic2V0IHBhcnNpbmcgb3B0aW9ucyIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBwYXJzZV9vcHRfcGFyc2UgfSwKKwkJT1BUX0JPT0woMCwgIm5vLWRpdmlkZXIiLCAmb3B0cy5ub19kaXZpZGVyLCBOXygiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiKSksCisJCU9QVF9DQUxMQkFDSygwLCAidHJhaWxlciIsICZ0cmFpbGVycywgTl8oInRyYWlsZXIiKSwKKwkJCQlOXygidHJhaWxlcihzKSB0byBhZGQiKSwgb3B0aW9uX3BhcnNlX3RyYWlsZXIpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfaW50ZXJwcmV0X3RyYWlsZXJzX3VzYWdlLCAwKTsKKworCWlmIChvcHRzLm9ubHlfaW5wdXQgJiYgIWxpc3RfZW1wdHkoJnRyYWlsZXJzKSkKKwkJdXNhZ2VfbXNnX29wdCgKKwkJCV8oIi0tdHJhaWxlciB3aXRoIC0tb25seS1pbnB1dCBkb2VzIG5vdCBtYWtlIHNlbnNlIiksCisJCQlnaXRfaW50ZXJwcmV0X3RyYWlsZXJzX3VzYWdlLAorCQkJb3B0aW9ucyk7CisKKwlpZiAoYXJnYykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJCXByb2Nlc3NfdHJhaWxlcnMoYXJndltpXSwgJm9wdHMsICZ0cmFpbGVycyk7CisJfSBlbHNlIHsKKwkJaWYgKG9wdHMuaW5fcGxhY2UpCisJCQlkaWUoXygibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIpKTsKKwkJcHJvY2Vzc190cmFpbGVycyhOVUxMLCAmb3B0cywgJnRyYWlsZXJzKTsKKwl9CisKKwluZXdfdHJhaWxlcnNfY2xlYXIoJnRyYWlsZXJzKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9sb2cuYyBiL2J1aWx0aW4vbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhNGE2MQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbG9nLmMKQEAgLTAsMCArMSwyMjMyIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGxvZyIgYW5kIHJlbGF0ZWQgY29tbWFuZHMgKHNob3csIHdoYXRjaGFuZ2VkKQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNiBMaW51cyBUb3J2YWxkcworICoJCSAyMDA2IEp1bmlvIEhhbWFubworICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCisjaW5jbHVkZSAicGF0Y2gtaWRzLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzaG9ydGxvZy5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImxpbmUtbG9nLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIm1haWxtYXAuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJpbnRlcmRpZmYuaCIKKyNpbmNsdWRlICJyYW5nZS1kaWZmLmgiCisKKyNkZWZpbmUgTUFJTF9ERUZBVUxUX1dSQVAgNzIKKyNkZWZpbmUgQ09WRVJfRlJPTV9BVVRPX01BWF9TVUJKRUNUX0xFTiAxMDAKKworLyogU2V0IGEgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IGZvciBnaXQgbG9nICgibG9nLmRhdGUiIGNvbmZpZyB2YXJpYWJsZSkgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2RhdGVfbW9kZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9hYmJyZXZfY29tbWl0Oworc3RhdGljIGludCBkZWZhdWx0X3Nob3dfcm9vdCA9IDE7CitzdGF0aWMgaW50IGRlZmF1bHRfZm9sbG93Oworc3RhdGljIGludCBkZWZhdWx0X3Nob3dfc2lnbmF0dXJlOworc3RhdGljIGludCBkZWNvcmF0aW9uX3N0eWxlOworc3RhdGljIGludCBkZWNvcmF0aW9uX2dpdmVuOworc3RhdGljIGludCB1c2VfbWFpbG1hcF9jb25maWcgPSAxOworc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeCA9ICJQQVRDSCI7CitzdGF0aWMgY29uc3QgY2hhciAqZm10X3ByZXR0eTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2xvZ191c2FnZVtdID0geworCU5fKCJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIiksCisJTl8oImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIiksCisJTlVMTAorfTsKKworc3RydWN0IGxpbmVfb3B0X2NhbGxiYWNrX2RhdGEgeworCXN0cnVjdCByZXZfaW5mbyAqcmV2OworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYXJnczsKK307CisKK3N0YXRpYyBpbnQgc2Vzc2lvbl9pc19pbnRlcmFjdGl2ZSh2b2lkKQoreworCXJldHVybiBpc2F0dHkoMSkgfHwgcGFnZXJfaW5fdXNlKCk7Cit9CisKK3N0YXRpYyBpbnQgYXV0b19kZWNvcmF0aW9uX3N0eWxlKHZvaWQpCit7CisJcmV0dXJuIHNlc3Npb25faXNfaW50ZXJhY3RpdmUoKSA/IERFQ09SQVRFX1NIT1JUX1JFRlMgOiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2RlY29yYXRpb25fc3R5bGUoY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3dpdGNoIChnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSkpIHsKKwljYXNlIDE6CisJCXJldHVybiBERUNPUkFURV9TSE9SVF9SRUZTOworCWNhc2UgMDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmICghc3RyY21wKHZhbHVlLCAiZnVsbCIpKQorCQlyZXR1cm4gREVDT1JBVEVfRlVMTF9SRUZTOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJzaG9ydCIpKQorCQlyZXR1cm4gREVDT1JBVEVfU0hPUlRfUkVGUzsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiYXV0byIpKQorCQlyZXR1cm4gYXV0b19kZWNvcmF0aW9uX3N0eWxlKCk7CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlIF9naXRfbG9nKCkgaW4gZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdQorCSAqIGFkZCBuZXcgZGVjb3JhdGlvbiBzdHlsZXMuCisJICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGRlY29yYXRlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlkZWNvcmF0aW9uX3N0eWxlID0gMDsKKwllbHNlIGlmIChhcmcpCisJCWRlY29yYXRpb25fc3R5bGUgPSBwYXJzZV9kZWNvcmF0aW9uX3N0eWxlKGFyZyk7CisJZWxzZQorCQlkZWNvcmF0aW9uX3N0eWxlID0gREVDT1JBVEVfU0hPUlRfUkVGUzsKKworCWlmIChkZWNvcmF0aW9uX3N0eWxlIDwgMCkKKwkJZGllKF8oImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIiksIGFyZyk7CisKKwlkZWNvcmF0aW9uX2dpdmVuID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ19saW5lX3JhbmdlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbiwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGxpbmVfb3B0X2NhbGxiYWNrX2RhdGEgKmRhdGEgPSBvcHRpb24tPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKworCWRhdGEtPnJldi0+bGluZV9sZXZlbF90cmF2ZXJzZSA9IDE7CisJc3RyaW5nX2xpc3RfYXBwZW5kKCZkYXRhLT5hcmdzLCBhcmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfbG9nX2RlZmF1bHRzKHZvaWQpCit7CisJaW5pdF9ncmVwX2RlZmF1bHRzKHRoZV9yZXBvc2l0b3J5KTsKKwlpbml0X2RpZmZfdWlfZGVmYXVsdHMoKTsKKworCWRlY29yYXRpb25fc3R5bGUgPSBhdXRvX2RlY29yYXRpb25fc3R5bGUoKTsKK30KKworc3RhdGljIHZvaWQgY21kX2xvZ19pbml0X2RlZmF1bHRzKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWlmIChmbXRfcHJldHR5KQorCQlnZXRfY29tbWl0X2Zvcm1hdChmbXRfcHJldHR5LCByZXYpOworCWlmIChkZWZhdWx0X2ZvbGxvdykKKwkJcmV2LT5kaWZmb3B0LmZsYWdzLmRlZmF1bHRfZm9sbG93X3JlbmFtZXMgPSAxOworCXJldi0+dmVyYm9zZV9oZWFkZXIgPSAxOworCXJldi0+ZGlmZm9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCXJldi0+ZGlmZm9wdC5zdGF0X3dpZHRoID0gLTE7IC8qIHVzZSBmdWxsIHRlcm1pbmFsIHdpZHRoICovCisJcmV2LT5kaWZmb3B0LnN0YXRfZ3JhcGhfd2lkdGggPSAtMTsgLyogcmVzcGVjdCBzdGF0R3JhcGhXaWR0aCBjb25maWcgKi8KKwlyZXYtPmFiYnJldl9jb21taXQgPSBkZWZhdWx0X2FiYnJldl9jb21taXQ7CisJcmV2LT5zaG93X3Jvb3RfZGlmZiA9IGRlZmF1bHRfc2hvd19yb290OworCXJldi0+c3ViamVjdF9wcmVmaXggPSBmbXRfcGF0Y2hfc3ViamVjdF9wcmVmaXg7CisJcmV2LT5zaG93X3NpZ25hdHVyZSA9IGRlZmF1bHRfc2hvd19zaWduYXR1cmU7CisJcmV2LT5kaWZmb3B0LmZsYWdzLmFsbG93X3RleHRjb252ID0gMTsKKworCWlmIChkZWZhdWx0X2RhdGVfbW9kZSkKKwkJcGFyc2VfZGF0ZV9mb3JtYXQoZGVmYXVsdF9kYXRlX21vZGUsICZyZXYtPmRhdGVfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNtZF9sb2dfaW5pdF9maW5pc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKm9wdCkKK3sKKwlzdHJ1Y3QgdXNlcmZvcm1hdF93YW50IHc7CisJaW50IHF1aWV0ID0gMCwgc291cmNlID0gMCwgbWFpbG1hcDsKKwlzdGF0aWMgc3RydWN0IGxpbmVfb3B0X2NhbGxiYWNrX2RhdGEgbGluZV9jYiA9IHtOVUxMLCBOVUxMLCBTVFJJTkdfTElTVF9JTklUX0RVUH07CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBkZWNvcmF0ZV9yZWZzX2V4Y2x1ZGUgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZGVjb3JhdGVfcmVmc19pbmNsdWRlID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3QgZGVjb3JhdGlvbl9maWx0ZXIgZGVjb3JhdGlvbl9maWx0ZXIgPSB7JmRlY29yYXRlX3JlZnNfaW5jbHVkZSwKKwkJCQkJCSAgICAgICZkZWNvcmF0ZV9yZWZzX2V4Y2x1ZGV9OworCXN0YXRpYyBzdHJ1Y3QgcmV2aXNpb25fc291cmNlcyByZXZpc2lvbl9zb3VyY2VzOworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsdGluX2xvZ19vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3MgZGlmZiBvdXRwdXQiKSksCisJCU9QVF9CT09MKDAsICJzb3VyY2UiLCAmc291cmNlLCBOXygic2hvdyBzb3VyY2UiKSksCisJCU9QVF9CT09MKDAsICJ1c2UtbWFpbG1hcCIsICZtYWlsbWFwLCBOXygiVXNlIG1haWwgbWFwIGZpbGUiKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAiZGVjb3JhdGUtcmVmcyIsICZkZWNvcmF0ZV9yZWZzX2luY2x1ZGUsCisJCQkJTl8oInBhdHRlcm4iKSwgTl8oIm9ubHkgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIpKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJkZWNvcmF0ZS1yZWZzLWV4Y2x1ZGUiLCAmZGVjb3JhdGVfcmVmc19leGNsdWRlLAorCQkJCU5fKCJwYXR0ZXJuIiksIE5fKCJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJkZWNvcmF0ZSIsIE5VTEwsIE5VTEwsIE5fKCJkZWNvcmF0ZSBvcHRpb25zIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgZGVjb3JhdGVfY2FsbGJhY2t9LAorCQlPUFRfQ0FMTEJBQ0soJ0wnLCBOVUxMLCAmbGluZV9jYiwgIm4sbTpmaWxlIiwKKwkJCSAgICAgTl8oIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIiksCisJCQkgICAgIGxvZ19saW5lX3JhbmdlX2NhbGxiYWNrKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWxpbmVfY2IucmV2ID0gcmV2OworCWxpbmVfY2IucHJlZml4ID0gcHJlZml4OworCisJbWFpbG1hcCA9IHVzZV9tYWlsbWFwX2NvbmZpZzsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fbG9nX29wdGlvbnMsIGJ1aWx0aW5fbG9nX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisKKwlpZiAocXVpZXQpCisJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIHJldiwgb3B0KTsKKworCS8qIEFueSBhcmd1bWVudHMgYXQgdGhpcyBwb2ludCBhcmUgbm90IHJlY29nbml6ZWQgKi8KKwlpZiAoYXJnYyA+IDEpCisJCWRpZShfKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiksIGFyZ3ZbMV0pOworCisJbWVtc2V0KCZ3LCAwLCBzaXplb2YodykpOworCXVzZXJmb3JtYXRfZmluZF9yZXF1aXJlbWVudHMoTlVMTCwgJncpOworCisJaWYgKCFyZXYtPnNob3dfbm90ZXNfZ2l2ZW4gJiYgKCFyZXYtPnByZXR0eV9naXZlbiB8fCB3Lm5vdGVzKSkKKwkJcmV2LT5zaG93X25vdGVzID0gMTsKKwlpZiAocmV2LT5zaG93X25vdGVzKQorCQlsb2FkX2Rpc3BsYXlfbm90ZXMoJnJldi0+bm90ZXNfb3B0KTsKKworCWlmICgocmV2LT5kaWZmb3B0LnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9LSU5EU19NQVNLKSB8fAorCSAgICByZXYtPmRpZmZvcHQuZmlsdGVyIHx8IHJldi0+ZGlmZm9wdC5mbGFncy5mb2xsb3dfcmVuYW1lcykKKwkJcmV2LT5hbHdheXNfc2hvd19oZWFkZXIgPSAwOworCisJaWYgKHNvdXJjZSB8fCB3LnNvdXJjZSkgeworCQlpbml0X3JldmlzaW9uX3NvdXJjZXMoJnJldmlzaW9uX3NvdXJjZXMpOworCQlyZXYtPnNvdXJjZXMgPSAmcmV2aXNpb25fc291cmNlczsKKwl9CisKKwlpZiAobWFpbG1hcCkgeworCQlyZXYtPm1haWxtYXAgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3QpKTsKKwkJcmVhZF9tYWlsbWFwKHJldi0+bWFpbG1hcCwgTlVMTCk7CisJfQorCisJaWYgKHJldi0+cHJldHR5X2dpdmVuICYmIHJldi0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9SQVcpIHsKKwkJLyoKKwkJICogImxvZyAtLXByZXR0eT1yYXciIGlzIHNwZWNpYWw7IGlnbm9yZSBVSSBvcmllbnRlZAorCQkgKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzdWNoIGFzIGRlY29yYXRpb24uCisJCSAqLworCQlpZiAoIWRlY29yYXRpb25fZ2l2ZW4pCisJCQlkZWNvcmF0aW9uX3N0eWxlID0gMDsKKwkJaWYgKCFyZXYtPmFiYnJldl9jb21taXRfZ2l2ZW4pCisJCQlyZXYtPmFiYnJldl9jb21taXQgPSAwOworCX0KKworCWlmIChkZWNvcmF0aW9uX3N0eWxlKSB7CisJCXJldi0+c2hvd19kZWNvcmF0aW9ucyA9IDE7CisJCWxvYWRfcmVmX2RlY29yYXRpb25zKCZkZWNvcmF0aW9uX2ZpbHRlciwgZGVjb3JhdGlvbl9zdHlsZSk7CisJfQorCisJaWYgKHJldi0+bGluZV9sZXZlbF90cmF2ZXJzZSkKKwkJbGluZV9sb2dfaW5pdChyZXYsIGxpbmVfY2IucHJlZml4LCAmbGluZV9jYi5hcmdzKTsKKworCXNldHVwX3BhZ2VyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNtZF9sb2dfaW5pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCWNtZF9sb2dfaW5pdF9kZWZhdWx0cyhyZXYpOworCWNtZF9sb2dfaW5pdF9maW5pc2goYXJnYywgYXJndiwgcHJlZml4LCByZXYsIG9wdCk7Cit9CisKKy8qCisgKiBUaGlzIGdpdmVzIGEgcm91Z2ggZXN0aW1hdGUgZm9yIGhvdyBtYW55IGNvbW1pdHMgd2UKKyAqIHdpbGwgcHJpbnQgb3V0IGluIHRoZSBsaXN0LgorICovCitzdGF0aWMgaW50IGVzdGltYXRlX2NvbW1pdF9jb3VudChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJaW50IG4gPSAwOworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJdW5zaWduZWQgaW50IGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAoIShmbGFncyAmIChUUkVFU0FNRSB8IFVOSU5URVJFU1RJTkcpKSkKKwkJCW4rKzsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZWFybHlfaGVhZGVyKHN0cnVjdCByZXZfaW5mbyAqcmV2LCBjb25zdCBjaGFyICpzdGFnZSwgaW50IG5yKQoreworCWlmIChyZXYtPnNob3duX29uZSkgeworCQlyZXYtPnNob3duX29uZSA9IDA7CisJCWlmIChyZXYtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKKwkJCXB1dGNoYXIocmV2LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOworCX0KKwlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCBfKCJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iKSwgbnIsIHN0YWdlKTsKK30KKworc3RhdGljIHN0cnVjdCBpdGltZXJ2YWwgZWFybHlfb3V0cHV0X3RpbWVyOworCitzdGF0aWMgdm9pZCBsb2dfc2hvd19lYXJseShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaSA9IHJldnMtPmVhcmx5X291dHB1dCwgY2xvc2VfZmlsZSA9IHJldnMtPmRpZmZvcHQuY2xvc2VfZmlsZTsKKwlpbnQgc2hvd19oZWFkZXIgPSAxOworCisJcmV2cy0+ZGlmZm9wdC5jbG9zZV9maWxlID0gMDsKKwlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZsaXN0LCByZXZzLT5zb3J0X29yZGVyKTsKKwl3aGlsZSAobGlzdCAmJiBpKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCXN3aXRjaCAoc2ltcGxpZnlfY29tbWl0KHJldnMsIGNvbW1pdCkpIHsKKwkJY2FzZSBjb21taXRfc2hvdzoKKwkJCWlmIChzaG93X2hlYWRlcikgeworCQkJCWludCBuID0gZXN0aW1hdGVfY29tbWl0X2NvdW50KGxpc3QpOworCQkJCXNob3dfZWFybHlfaGVhZGVyKHJldnMsICJpbmNvbXBsZXRlIiwgbik7CisJCQkJc2hvd19oZWFkZXIgPSAwOworCQkJfQorCQkJbG9nX3RyZWVfY29tbWl0KHJldnMsIGNvbW1pdCk7CisJCQlpLS07CisJCQlicmVhazsKKwkJY2FzZSBjb21taXRfaWdub3JlOgorCQkJYnJlYWs7CisJCWNhc2UgY29tbWl0X2Vycm9yOgorCQkJaWYgKGNsb3NlX2ZpbGUpCisJCQkJZmNsb3NlKHJldnMtPmRpZmZvcHQuZmlsZSk7CisJCQlyZXR1cm47CisJCX0KKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCisJLyogRGlkIHdlIGFscmVhZHkgZ2V0IGVub3VnaCBjb21taXRzIGZvciB0aGUgZWFybHkgb3V0cHV0PyAqLworCWlmICghaSkgeworCQlpZiAoY2xvc2VfZmlsZSkKKwkJCWZjbG9zZShyZXZzLT5kaWZmb3B0LmZpbGUpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiAuLmlmIG5vLCB0aGVuIHJlcGVhdCBpdCB0d2ljZSBhIHNlY29uZCB1bnRpbCB3ZQorCSAqIGRvLgorCSAqCisJICogTk9URSEgV2UgZG9uJ3QgdXNlICJpdF9pbnRlcnZhbCIsIGJlY2F1c2UgaWYgdGhlCisJICogcmVhZGVyIGlzbid0IGxpc3RlbmluZywgd2Ugd2FudCBvdXIgb3V0cHV0IHRvIGJlCisJICogdGhyb3R0bGVkIGJ5IHRoZSB3cml0aW5nLCBhbmQgbm90IGhhdmUgdGhlIHRpbWVyCisJICogdHJpZ2dlciBldmVyeSBzZWNvbmQgZXZlbiBpZiB3ZSdyZSBibG9ja2VkIG9uIGEKKwkgKiByZWFkZXIhCisJICovCisJZWFybHlfb3V0cHV0X3RpbWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7CisJZWFybHlfb3V0cHV0X3RpbWVyLml0X3ZhbHVlLnR2X3VzZWMgPSA1MDAwMDA7CisJc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmZWFybHlfb3V0cHV0X3RpbWVyLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZWFybHlfb3V0cHV0KGludCBzaWduYWwpCit7CisJc2hvd19lYXJseV9vdXRwdXQgPSBsb2dfc2hvd19lYXJseTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZWFybHlfb3V0cHV0KHZvaWQpCit7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKKworCS8qCisJICogU2V0IHVwIHRoZSBzaWduYWwgaGFuZGxlciwgbWluaW1hbGx5IGludHJ1c2l2ZWx5OgorCSAqIHdlIG9ubHkgc2V0IGEgc2luZ2xlIHZvbGF0aWxlIGludGVnZXIgd29yZCAobm90CisJICogdXNpbmcgc2lnYXRvbWljX3QgLSB0cnlpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkKKwkgKiBzeXN0ZW0gZGVwZW5kZW5jaWVzIGFuZCBoZWFkZXJzKSwgYW5kIHVzaW5nCisJICogU0FfUkVTVEFSVC4KKwkgKi8KKwltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKKwlzYS5zYV9oYW5kbGVyID0gZWFybHlfb3V0cHV0OworCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKwlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisJc2lnYWN0aW9uKFNJR0FMUk0sICZzYSwgTlVMTCk7CisKKwkvKgorCSAqIElmIHdlIGNhbiBnZXQgdGhlIHdob2xlIG91dHB1dCBpbiBsZXNzIHRoYW4gYQorCSAqIHRlbnRoIG9mIGEgc2Vjb25kLCBkb24ndCBldmVuIGJvdGhlciBkb2luZyB0aGUKKwkgKiBlYXJseS1vdXRwdXQgdGhpbmcuLgorCSAqCisJICogVGhpcyBpcyBhIG9uZS10aW1lLW9ubHkgdHJpZ2dlci4KKwkgKi8KKwllYXJseV9vdXRwdXRfdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKKwllYXJseV9vdXRwdXRfdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IDEwMDAwMDsKKwlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZlYXJseV9vdXRwdXRfdGltZXIsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfZWFybHlfb3V0cHV0KHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWludCBuID0gZXN0aW1hdGVfY29tbWl0X2NvdW50KHJldi0+Y29tbWl0cyk7CisJc2lnbmFsKFNJR0FMUk0sIFNJR19JR04pOworCXNob3dfZWFybHlfaGVhZGVyKHJldiwgImRvbmUiLCBuKTsKK30KKworc3RhdGljIGludCBjbWRfbG9nX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCBzYXZlZF9ucmwgPSAwOworCWludCBzYXZlZF9kY2N0YyA9IDAsIGNsb3NlX2ZpbGUgPSByZXYtPmRpZmZvcHQuY2xvc2VfZmlsZTsKKworCWlmIChyZXYtPmVhcmx5X291dHB1dCkKKwkJc2V0dXBfZWFybHlfb3V0cHV0KCk7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCWlmIChyZXYtPmVhcmx5X291dHB1dCkKKwkJZmluaXNoX2Vhcmx5X291dHB1dChyZXYpOworCisJLyoKKwkgKiBGb3IgLS1jaGVjayBhbmQgLS1leGl0LWNvZGUsIHRoZSBleGl0IGNvZGUgaXMgYmFzZWQgb24gQ0hFQ0tfRkFJTEVECisJICogYW5kIEhBU19DSEFOR0VTIGJlaW5nIGFjY3VtdWxhdGVkIGluIHJldi0+ZGlmZm9wdCwgc28gYmUgY2FyZWZ1bCB0bworCSAqIHJldGFpbiB0aGF0IHN0YXRlIGluZm9ybWF0aW9uIGlmIHJlcGxhY2luZyByZXYtPmRpZmZvcHQgaW4gdGhpcyBsb29wCisJICovCisJcmV2LT5kaWZmb3B0LmNsb3NlX2ZpbGUgPSAwOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldikpICE9IE5VTEwpIHsKKwkJaWYgKCFsb2dfdHJlZV9jb21taXQocmV2LCBjb21taXQpICYmIHJldi0+bWF4X2NvdW50ID49IDApCisJCQkvKgorCQkJICogV2UgZGVjcmVtZW50ZWQgbWF4X2NvdW50IGluIGdldF9yZXZpc2lvbiwKKwkJCSAqIGJ1dCB3ZSBkaWRuJ3QgYWN0dWFsbHkgc2hvdyB0aGUgY29tbWl0LgorCQkJICovCisJCQlyZXYtPm1heF9jb3VudCsrOworCQlpZiAoIXJldi0+cmVmbG9nX2luZm8pIHsKKwkJCS8qCisJCQkgKiBXZSBtYXkgc2hvdyBhIGdpdmVuIGNvbW1pdCBtdWx0aXBsZSB0aW1lcyB3aGVuCisJCQkgKiB3YWxraW5nIHRoZSByZWZsb2dzLgorCQkJICovCisJCQlmcmVlX2NvbW1pdF9idWZmZXIodGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLAorCQkJCQkgICBjb21taXQpOworCQkJZnJlZV9jb21taXRfbGlzdChjb21taXQtPnBhcmVudHMpOworCQkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwkJfQorCQlpZiAoc2F2ZWRfbnJsIDwgcmV2LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQpCisJCQlzYXZlZF9ucmwgPSByZXYtPmRpZmZvcHQubmVlZGVkX3JlbmFtZV9saW1pdDsKKwkJaWYgKHJldi0+ZGlmZm9wdC5kZWdyYWRlZF9jY190b19jKQorCQkJc2F2ZWRfZGNjdGMgPSAxOworCX0KKwlyZXYtPmRpZmZvcHQuZGVncmFkZWRfY2NfdG9fYyA9IHNhdmVkX2RjY3RjOworCXJldi0+ZGlmZm9wdC5uZWVkZWRfcmVuYW1lX2xpbWl0ID0gc2F2ZWRfbnJsOworCWlmIChjbG9zZV9maWxlKQorCQlmY2xvc2UocmV2LT5kaWZmb3B0LmZpbGUpOworCisJaWYgKHJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfQ0hFQ0tESUZGICYmCisJICAgIHJldi0+ZGlmZm9wdC5mbGFncy5jaGVja19mYWlsZWQpIHsKKwkJcmV0dXJuIDAyOworCX0KKwlyZXR1cm4gZGlmZl9yZXN1bHRfY29kZSgmcmV2LT5kaWZmb3B0LCAwKTsKK30KKworc3RhdGljIGludCBnaXRfbG9nX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICpzbG90X25hbWU7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQucHJldHR5IikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZm10X3ByZXR0eSwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnN1YmplY3RwcmVmaXgiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZmbXRfcGF0Y2hfc3ViamVjdF9wcmVmaXgsIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKHZhciwgImxvZy5hYmJyZXZjb21taXQiKSkgeworCQlkZWZhdWx0X2FiYnJldl9jb21taXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cuZGF0ZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRlZmF1bHRfZGF0ZV9tb2RlLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cuZGVjb3JhdGUiKSkgeworCQlkZWNvcmF0aW9uX3N0eWxlID0gcGFyc2VfZGVjb3JhdGlvbl9zdHlsZSh2YWx1ZSk7CisJCWlmIChkZWNvcmF0aW9uX3N0eWxlIDwgMCkKKwkJCWRlY29yYXRpb25fc3R5bGUgPSAwOyAvKiBtYXliZSB3YXJuPyAqLworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAibG9nLnNob3dyb290IikpIHsKKwkJZGVmYXVsdF9zaG93X3Jvb3QgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cuZm9sbG93IikpIHsKKwkJZGVmYXVsdF9mb2xsb3cgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiY29sb3IuZGVjb3JhdGUuIiwgJnNsb3RfbmFtZSkpCisJCXJldHVybiBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9jb25maWcodmFyLCBzbG90X25hbWUsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cubWFpbG1hcCIpKSB7CisJCXVzZV9tYWlsbWFwX2NvbmZpZyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImxvZy5zaG93c2lnbmF0dXJlIikpIHsKKwkJZGVmYXVsdF9zaG93X3NpZ25hdHVyZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGdyZXBfY29uZmlnKHZhciwgdmFsdWUsIGNiKSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoZ2l0X2dwZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBnaXRfZGlmZl91aV9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX3doYXRjaGFuZ2VkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisKKwlpbml0X2xvZ19kZWZhdWx0cygpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKwlyZXYuZGlmZiA9IDE7CisJcmV2LnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9ICJIRUFEIjsKKwlvcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOworCWNtZF9sb2dfaW5pdChhcmdjLCBhcmd2LCBwcmVmaXgsICZyZXYsICZvcHQpOworCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKwlyZXR1cm4gY21kX2xvZ193YWxrKCZyZXYpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3RhZ2dlcihjb25zdCBjaGFyICpidWYsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBwID0gezB9OworCisJcHAuZm10ID0gcmV2LT5jb21taXRfZm9ybWF0OworCXBwLmRhdGVfbW9kZSA9IHJldi0+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+YnVmOworfQorCitzdGF0aWMgdm9pZCBpbmZlcl9yYW5nZV9kaWZmX3JhbmdlcyhzdHJ1Y3Qgc3RyYnVmICpyMSwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqcjIsCisJCQkJICAgIGNvbnN0IGNoYXIgKnByZXYsCisJCQkJICAgIHN0cnVjdCBjb21taXQgKm9yaWdpbiwKKwkJCQkgICAgc3RydWN0IGNvbW1pdCAqaGVhZCkKK3sKKwljb25zdCBjaGFyICpoZWFkX29pZCA9IG9pZF90b19oZXgoJmhlYWQtPm9iamVjdC5vaWQpOworCisJaWYgKCFzdHJzdHIocHJldiwgIi4uIikpIHsKKwkJc3RyYnVmX2FkZGYocjEsICIlcy4uJXMiLCBoZWFkX29pZCwgcHJldik7CisJCXN0cmJ1Zl9hZGRmKHIyLCAiJXMuLiVzIiwgcHJldiwgaGVhZF9vaWQpOworCX0gZWxzZSBpZiAoIW9yaWdpbikgeworCQlkaWUoXygiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIikpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIocjEsIHByZXYpOworCQlzdHJidWZfYWRkZihyMiwgIiVzLi4lcyIsCisJCQkgICAgb2lkX3RvX2hleCgmb3JpZ2luLT5vYmplY3Qub2lkKSwgaGVhZF9vaWQpOworCX0KK30KKworaW50IGNtZF9mb3JtYXRfcGF0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXQgKipsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgc19yX29wdDsKKwlpbnQgbnIgPSAwLCB0b3RhbCwgaTsKKwlpbnQgdXNlX3N0ZG91dCA9IDA7CisJaW50IHN0YXJ0X251bWJlciA9IC0xOworCWludCBqdXN0X251bWJlcnMgPSAwOworCWludCBpZ25vcmVfaWZfaW5fdXBzdHJlYW0gPSAwOworCWludCBjb3Zlcl9sZXR0ZXIgPSAtMTsKKwlpbnQgYm91bmRhcnlfY291bnQgPSAwOworCWludCBub19iaW5hcnlfZGlmZiA9IDA7CisJaW50IHplcm9fY29tbWl0ID0gMDsKKwlzdHJ1Y3QgY29tbWl0ICpvcmlnaW4gPSBOVUxMOworCWNvbnN0IGNoYXIgKmluX3JlcGx5X3RvID0gTlVMTDsKKwlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCB1c2VfcGF0Y2hfZm9ybWF0ID0gMDsKKwlpbnQgcXVpZXQgPSAwOworCWludCByZXJvbGxfY291bnQgPSAtMTsKKwljaGFyICpjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX2FyZyA9IE5VTEw7CisJY2hhciAqYnJhbmNoX25hbWUgPSBOVUxMOworCWNoYXIgKmJhc2VfY29tbWl0ID0gTlVMTDsKKwlzdHJ1Y3QgYmFzZV90cmVlX2luZm8gYmFzZXM7CisJaW50IHNob3dfcHJvZ3Jlc3MgPSAwOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCXN0cnVjdCBvaWRfYXJyYXkgaWRpZmZfcHJldiA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJidWYgaWRpZmZfdGl0bGUgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyZGlmZl9wcmV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIHJkaWZmMSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmRpZmYyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiByZGlmZl90aXRsZSA9IFNUUkJVRl9JTklUOworCWludCBjcmVhdGlvbl9mYWN0b3IgPSAtMTsKKworCWNvbnN0IHN0cnVjdCBvcHRpb24gYnVpbHRpbl9mb3JtYXRfcGF0Y2hfb3B0aW9uc1tdID0geworCQl7IE9QVElPTl9DQUxMQkFDSywgJ24nLCAibnVtYmVyZWQiLCAmbnVtYmVyZWQsIE5VTEwsCisJCQkgICAgTl8oInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giKSwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcsIG51bWJlcmVkX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnTicsICJuby1udW1iZXJlZCIsICZudW1iZXJlZCwgTlVMTCwKKwkJCSAgICBOXygidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiKSwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIG5vX251bWJlcmVkX2NhbGxiYWNrIH0sCisJCU9QVF9CT09MKCdzJywgInNpZ25vZmYiLCAmZG9fc2lnbm9mZiwgTl8oImFkZCBTaWduZWQtb2ZmLWJ5OiIpKSwKKwkJT1BUX0JPT0woMCwgInN0ZG91dCIsICZ1c2Vfc3Rkb3V0LAorCQkJICAgIE5fKCJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIpKSwKKwkJT1BUX0JPT0woMCwgImNvdmVyLWxldHRlciIsICZjb3Zlcl9sZXR0ZXIsCisJCQkgICAgTl8oImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIikpLAorCQlPUFRfQk9PTCgwLCAibnVtYmVyZWQtZmlsZXMiLCAmanVzdF9udW1iZXJzLAorCQkJICAgIE5fKCJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiKSksCisJCU9QVF9TVFJJTkcoMCwgInN1ZmZpeCIsICZmbXRfcGF0Y2hfc3VmZml4LCBOXygic2Z4IiksCisJCQkgICAgTl8oInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIikpLAorCQlPUFRfSU5URUdFUigwLCAic3RhcnQtbnVtYmVyIiwgJnN0YXJ0X251bWJlciwKKwkJCSAgICBOXygic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIpKSwKKwkJT1BUX0lOVEVHRVIoJ3YnLCAicmVyb2xsLWNvdW50IiwgJnJlcm9sbF9jb3VudCwKKwkJCSAgICBOXygibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInJmYyIsICZyZXYsIE5VTEwsCisJCQkgICAgTl8oIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iKSwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIHJmY19jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uIiwgJmNvdmVyX2Zyb21fZGVzY3JpcHRpb25fYXJnLAorCQkJICAgIE5fKCJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uLW1vZGUiKSwKKwkJCSAgICBOXygiZ2VuZXJhdGUgcGFydHMgb2YgYSBjb3ZlciBsZXR0ZXIgYmFzZWQgb24gYSBicmFuY2gncyBkZXNjcmlwdGlvbiIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJzdWJqZWN0LXByZWZpeCIsICZyZXYsIE5fKCJwcmVmaXgiKSwKKwkJCSAgICBOXygiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIiksCisJCQkgICAgUEFSU0VfT1BUX05PTkVHLCBzdWJqZWN0X3ByZWZpeF9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ28nLCAib3V0cHV0LWRpcmVjdG9yeSIsICZvdXRwdXRfZGlyZWN0b3J5LAorCQkJICAgIE5fKCJkaXIiKSwgTl8oInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIpLAorCQkJICAgIFBBUlNFX09QVF9OT05FRywgb3V0cHV0X2RpcmVjdG9yeV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2snLCAia2VlcC1zdWJqZWN0IiwgJnJldiwgTlVMTCwKKwkJCSAgICBOXygiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iKSwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIGtlZXBfY2FsbGJhY2sgfSwKKwkJT1BUX0JPT0woMCwgIm5vLWJpbmFyeSIsICZub19iaW5hcnlfZGlmZiwKKwkJCSBOXygiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIpKSwKKwkJT1BUX0JPT0woMCwgInplcm8tY29tbWl0IiwgJnplcm9fY29tbWl0LAorCQkJIE5fKCJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIpKSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1pZi1pbi11cHN0cmVhbSIsICZpZ25vcmVfaWZfaW5fdXBzdHJlYW0sCisJCQkgTl8oImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIpKSwKKwkJT1BUX1NFVF9JTlRfRigncCcsICJuby1zdGF0IiwgJnVzZV9wYXRjaF9mb3JtYXQsCisJCQkgICAgICBOXygic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfR1JPVVAoTl8oIk1lc3NhZ2luZyIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJhZGQtaGVhZGVyIiwgTlVMTCwgTl8oImhlYWRlciIpLAorCQkJICAgIE5fKCJhZGQgZW1haWwgaGVhZGVyIiksIDAsIGhlYWRlcl9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInRvIiwgTlVMTCwgTl8oImVtYWlsIiksIE5fKCJhZGQgVG86IGhlYWRlciIpLAorCQkJICAgIDAsIHRvX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiY2MiLCBOVUxMLCBOXygiZW1haWwiKSwgTl8oImFkZCBDYzogaGVhZGVyIiksCisJCQkgICAgMCwgY2NfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJmcm9tIiwgJmZyb20sIE5fKCJpZGVudCIpLAorCQkJICAgIE5fKCJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIiksCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRywgZnJvbV9jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJpbi1yZXBseS10byIsICZpbl9yZXBseV90bywgTl8oIm1lc3NhZ2UtaWQiKSwKKwkJCSAgICBOXygibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImF0dGFjaCIsICZyZXYsIE5fKCJib3VuZGFyeSIpLAorCQkJICAgIE5fKCJhdHRhY2ggdGhlIHBhdGNoIiksIFBBUlNFX09QVF9PUFRBUkcsCisJCQkgICAgYXR0YWNoX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaW5saW5lIiwgJnJldiwgTl8oImJvdW5kYXJ5IiksCisJCQkgICAgTl8oImlubGluZSB0aGUgcGF0Y2giKSwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJICAgIGlubGluZV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInRocmVhZCIsICZ0aHJlYWQsIE5fKCJzdHlsZSIpLAorCQkJICAgIE5fKCJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIpLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIHRocmVhZF9jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJzaWduYXR1cmUiLCAmc2lnbmF0dXJlLCBOXygic2lnbmF0dXJlIiksCisJCQkgICAgTl8oImFkZCBhIHNpZ25hdHVyZSIpKSwKKwkJT1BUX1NUUklORygwLCAiYmFzZSIsICZiYXNlX2NvbW1pdCwgTl8oImJhc2UtY29tbWl0IiksCisJCQkgICBOXygiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIpKSwKKwkJT1BUX0ZJTEVOQU1FKDAsICJzaWduYXR1cmUtZmlsZSIsICZzaWduYXR1cmVfZmlsZSwKKwkJCQlOXygiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIikpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZzaG93X3Byb2dyZXNzLAorCQkJIE5fKCJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIpKSwKKwkJT1BUX0NBTExCQUNLKDAsICJpbnRlcmRpZmYiLCAmaWRpZmZfcHJldiwgTl8oInJldiIpLAorCQkJICAgICBOXygic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIpLAorCQkJICAgICBwYXJzZV9vcHRfb2JqZWN0X25hbWUpLAorCQlPUFRfU1RSSU5HKDAsICJyYW5nZS1kaWZmIiwgJnJkaWZmX3ByZXYsIE5fKCJyZWZzcGVjIiksCisJCQkgICBOXygic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giKSksCisJCU9QVF9JTlRFR0VSKDAsICJjcmVhdGlvbi1mYWN0b3IiLCAmY3JlYXRpb25fZmFjdG9yLAorCQkJICAgIE5fKCJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZXh0cmFfaGRyLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlleHRyYV90by5zdHJkdXBfc3RyaW5ncyA9IDE7CisJZXh0cmFfY2Muc3RyZHVwX3N0cmluZ3MgPSAxOworCWluaXRfbG9nX2RlZmF1bHRzKCk7CisJaW5pdF9kaXNwbGF5X25vdGVzKCZub3Rlc19vcHQpOworCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcsIE5VTEwpOworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisJcmV2LnNob3dfbm90ZXMgPSBzaG93X25vdGVzOworCW1lbWNweSgmcmV2Lm5vdGVzX29wdCwgJm5vdGVzX29wdCwgc2l6ZW9mKG5vdGVzX29wdCkpOworCXJldi5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfRU1BSUw7CisJcmV2LmV4cGFuZF90YWJzX2luX2xvZ19kZWZhdWx0ID0gMDsKKwlyZXYudmVyYm9zZV9oZWFkZXIgPSAxOworCXJldi5kaWZmID0gMTsKKwlyZXYubWF4X3BhcmVudHMgPSAxOworCXJldi5kaWZmb3B0LmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJcmV2LnN1YmplY3RfcHJlZml4ID0gZm10X3BhdGNoX3N1YmplY3RfcHJlZml4OworCW1lbXNldCgmc19yX29wdCwgMCwgc2l6ZW9mKHNfcl9vcHQpKTsKKwlzX3Jfb3B0LmRlZiA9ICJIRUFEIjsKKwlzX3Jfb3B0LnJldmFyZ19vcHQgPSBSRVZBUkdfQ09NTUlUVElTSDsKKworCWlmIChiYXNlX2F1dG8pCisJCWJhc2VfY29tbWl0ID0gImF1dG8iOworCisJaWYgKGRlZmF1bHRfYXR0YWNoKSB7CisJCXJldi5taW1lX2JvdW5kYXJ5ID0gZGVmYXVsdF9hdHRhY2g7CisJCXJldi5ub19pbmxpbmUgPSAxOworCX0KKworCS8qCisJICogUGFyc2UgdGhlIGFyZ3VtZW50cyBiZWZvcmUgc2V0dXBfcmV2aXNpb25zKCksIG9yIHNvbWV0aGluZworCSAqIGxpa2UgImdpdCBmb3JtYXQtcGF0Y2ggLW8gYTEyMyBIRUFEXi4uIiBtYXkgZmFpbDsgYTEyMyBpcworCSAqIHBvc3NpYmx5IGEgdmFsaWQgU0hBMS4KKwkgKi8KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9hcmcpCisJCWNvdmVyX2Zyb21fZGVzY3JpcHRpb25fbW9kZSA9IHBhcnNlX2NvdmVyX2Zyb21fZGVzY3JpcHRpb24oY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9hcmcpOworCisJaWYgKDAgPCByZXJvbGxfY291bnQpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZzcHJlZml4LCAiJXMgdiVkIiwKKwkJCSAgICByZXYuc3ViamVjdF9wcmVmaXgsIHJlcm9sbF9jb3VudCk7CisJCXJldi5yZXJvbGxfY291bnQgPSByZXJvbGxfY291bnQ7CisJCXJldi5zdWJqZWN0X3ByZWZpeCA9IHN0cmJ1Zl9kZXRhY2goJnNwcmVmaXgsIE5VTEwpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBleHRyYV9oZHIubnI7IGkrKykgeworCQlzdHJidWZfYWRkc3RyKCZidWYsIGV4dHJhX2hkci5pdGVtc1tpXS5zdHJpbmcpOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJfQorCisJaWYgKGV4dHJhX3RvLm5yKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICJUbzogIik7CisJZm9yIChpID0gMDsgaSA8IGV4dHJhX3RvLm5yOyBpKyspIHsKKwkJaWYgKGkpCisJCQlzdHJidWZfYWRkc3RyKCZidWYsICIgICAgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0cmFfdG8uaXRlbXNbaV0uc3RyaW5nKTsKKwkJaWYgKGkgKyAxIDwgZXh0cmFfdG8ubnIpCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJywnKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCX0KKworCWlmIChleHRyYV9jYy5ucikKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiQ2M6ICIpOworCWZvciAoaSA9IDA7IGkgPCBleHRyYV9jYy5ucjsgaSsrKSB7CisJCWlmIChpKQorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiICAgICIpOworCQlzdHJidWZfYWRkc3RyKCZidWYsIGV4dHJhX2NjLml0ZW1zW2ldLnN0cmluZyk7CisJCWlmIChpICsgMSA8IGV4dHJhX2NjLm5yKQorCQkJc3RyYnVmX2FkZGNoKCZidWYsICcsJyk7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwl9CisKKwlyZXYuZXh0cmFfaGVhZGVycyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlpZiAoZnJvbSkgeworCQlpZiAoc3BsaXRfaWRlbnRfbGluZSgmcmV2LmZyb21faWRlbnQsIGZyb20sIHN0cmxlbihmcm9tKSkpCisJCQlkaWUoXygiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIpLCBmcm9tKTsKKwl9CisKKwlpZiAoc3RhcnRfbnVtYmVyIDwgMCkKKwkJc3RhcnRfbnVtYmVyID0gMTsKKworCS8qCisJICogSWYgbnVtYmVyZWQgaXMgc2V0IHNvbGVseSBkdWUgdG8gZm9ybWF0Lm51bWJlcmVkIGluIGNvbmZpZywKKwkgKiBhbmQgaXQgd291bGQgY29uZmxpY3Qgd2l0aCAtLWtlZXAtc3ViamVjdCAoLWspIGZyb20gdGhlCisJICogY29tbWFuZCBsaW5lLCByZXNldCAibnVtYmVyZWQiLgorCSAqLworCWlmIChudW1iZXJlZCAmJiBrZWVwX3N1YmplY3QgJiYgIW51bWJlcmVkX2NtZGxpbmVfb3B0KQorCQludW1iZXJlZCA9IDA7CisKKwlpZiAobnVtYmVyZWQgJiYga2VlcF9zdWJqZWN0KQorCQlkaWUoXygiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisJaWYgKGtlZXBfc3ViamVjdCAmJiBzdWJqZWN0X3ByZWZpeCkKKwkJZGllKF8oIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisJcmV2LnByZXNlcnZlX3N1YmplY3QgPSBrZWVwX3N1YmplY3Q7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsICZzX3Jfb3B0KTsKKwlpZiAoYXJnYyA+IDEpCisJCWRpZShfKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiksIGFyZ3ZbMV0pOworCisJaWYgKHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OQU1FKQorCQlkaWUoXygiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKwlpZiAocmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05BTUVfU1RBVFVTKQorCQlkaWUoXygiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCWlmIChyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfQ0hFQ0tESUZGKQorCQlkaWUoXygiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCisJaWYgKCF1c2VfcGF0Y2hfZm9ybWF0ICYmCisJCSghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8fAorCQkgcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9PSBESUZGX0ZPUk1BVF9QQVRDSCkpCisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8IERJRkZfRk9STUFUX1NVTU1BUlk7CisJaWYgKCFyZXYuZGlmZm9wdC5zdGF0X3dpZHRoKQorCQlyZXYuZGlmZm9wdC5zdGF0X3dpZHRoID0gTUFJTF9ERUZBVUxUX1dSQVA7CisKKwkvKiBBbHdheXMgZ2VuZXJhdGUgYSBwYXRjaCAqLworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUEFUQ0g7CisKKwlyZXYuemVyb19jb21taXQgPSB6ZXJvX2NvbW1pdDsKKworCWlmICghcmV2LmRpZmZvcHQuZmxhZ3MudGV4dCAmJiAhbm9fYmluYXJ5X2RpZmYpCisJCXJldi5kaWZmb3B0LmZsYWdzLmJpbmFyeSA9IDE7CisKKwlpZiAocmV2LnNob3dfbm90ZXMpCisJCWxvYWRfZGlzcGxheV9ub3RlcygmcmV2Lm5vdGVzX29wdCk7CisKKwlpZiAoIW91dHB1dF9kaXJlY3RvcnkgJiYgIXVzZV9zdGRvdXQpCisJCW91dHB1dF9kaXJlY3RvcnkgPSBjb25maWdfb3V0cHV0X2RpcmVjdG9yeTsKKworCWlmICghdXNlX3N0ZG91dCkKKwkJb3V0cHV0X2RpcmVjdG9yeSA9IHNldF9vdXRkaXIocHJlZml4LCBvdXRwdXRfZGlyZWN0b3J5KTsKKwllbHNlCisJCXNldHVwX3BhZ2VyKCk7CisKKwlpZiAob3V0cHV0X2RpcmVjdG9yeSkgeworCQlpbnQgc2F2ZWQ7CisJCWlmIChyZXYuZGlmZm9wdC51c2VfY29sb3IgIT0gR0lUX0NPTE9SX0FMV0FZUykKKwkJCXJldi5kaWZmb3B0LnVzZV9jb2xvciA9IEdJVF9DT0xPUl9ORVZFUjsKKwkJaWYgKHVzZV9zdGRvdXQpCisJCQlkaWUoXygic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iKSk7CisJCS8qCisJCSAqIFdlIGNvbnNpZGVyIDxvdXRkaXI+IGFzICdvdXRzaWRlIG9mIGdpdGRpcicsIHRoZXJlZm9yZSBhdm9pZAorCQkgKiBhcHBseWluZyBhZGp1c3Rfc2hhcmVkX3Blcm0gaW4gcy1jLWwtZC4KKwkJICovCisJCXNhdmVkID0gZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCk7CisJCXNldF9zaGFyZWRfcmVwb3NpdG9yeSgwKTsKKwkJc3dpdGNoIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KG91dHB1dF9kaXJlY3RvcnkpKSB7CisJCWNhc2UgU0NMRF9PSzoKKwkJY2FzZSBTQ0xEX0VYSVNUUzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyAiCisJCQkgICAgICAib2YgJyVzJyIpLCBvdXRwdXRfZGlyZWN0b3J5KTsKKwkJfQorCQlzZXRfc2hhcmVkX3JlcG9zaXRvcnkoc2F2ZWQpOworCQlpZiAobWtkaXIob3V0cHV0X2RpcmVjdG9yeSwgMDc3NykgPCAwICYmIGVycm5vICE9IEVFWElTVCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiksCisJCQkJICBvdXRwdXRfZGlyZWN0b3J5KTsKKwl9CisKKwlpZiAocmV2LnBlbmRpbmcubnIgPT0gMSkgeworCQlpbnQgY2hlY2tfaGVhZCA9IDA7CisKKwkJaWYgKHJldi5tYXhfY291bnQgPCAwICYmICFyZXYuc2hvd19yb290X2RpZmYpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRyYWRpdGlvbmFsIGJlaGF2aW91ciBvZiAiZ2l0IGZvcm1hdC1wYXRjaAorCQkJICogb3JpZ2luIiB0aGF0IHByZXBhcmVzIHdoYXQgdGhlIG9yaWdpbiBzaWRlIHN0aWxsCisJCQkgKiBkb2VzIG5vdCBoYXZlLgorCQkJICovCisJCQlyZXYucGVuZGluZy5vYmplY3RzWzBdLml0ZW0tPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQlhZGRfaGVhZF90b19wZW5kaW5nKCZyZXYpOworCQkJY2hlY2tfaGVhZCA9IDE7CisJCX0KKwkJLyoKKwkJICogT3RoZXJ3aXNlLCBpdCBpcyAiZm9ybWF0LXBhdGNoIC0yMiBIRUFEIiwgYW5kL29yCisJCSAqICJmb3JtYXQtcGF0Y2ggLS1yb290IEhFQUQiLiAgVGhlIHVzZXIgd2FudHMKKwkJICogZ2V0X3JldmlzaW9uKCkgdG8gZG8gdGhlIHVzdWFsIHRyYXZlcnNhbC4KKwkJICovCisKKwkJaWYgKCFzdHJjbXAocmV2LnBlbmRpbmcub2JqZWN0c1swXS5uYW1lLCAiSEVBRCIpKQorCQkJY2hlY2tfaGVhZCA9IDE7CisKKwkJaWYgKGNoZWNrX2hlYWQpIHsKKwkJCWNvbnN0IGNoYXIgKnJlZiwgKnY7CisJCQlyZWYgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkJIE5VTEwsIE5VTEwpOworCQkJaWYgKHJlZiAmJiBza2lwX3ByZWZpeChyZWYsICJyZWZzL2hlYWRzLyIsICZ2KSkKKwkJCQlicmFuY2hfbmFtZSA9IHhzdHJkdXAodik7CisJCQllbHNlCisJCQkJYnJhbmNoX25hbWUgPSB4c3RyZHVwKCIiKTsgLyogbm8gYnJhbmNoICovCisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGNhbm5vdCBtb3ZlIHRoaXMgYW55d2hlcmUgZWFybGllciBiZWNhdXNlIHdlIGRvIHdhbnQgdG8KKwkgKiBrbm93IGlmIC0tcm9vdCB3YXMgZ2l2ZW4gZXhwbGljaXRseSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisJICovCisJcmV2LnNob3dfcm9vdF9kaWZmID0gMTsKKworCWlmIChpZ25vcmVfaWZfaW5fdXBzdHJlYW0pIHsKKwkJLyogRG9uJ3Qgc2F5IGFueXRoaW5nIGlmIGhlYWQgYW5kIHVwc3RyZWFtIGFyZSB0aGUgc2FtZS4gKi8KKwkJaWYgKHJldi5wZW5kaW5nLm5yID09IDIpIHsKKwkJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm8gPSByZXYucGVuZGluZy5vYmplY3RzOworCQkJaWYgKG9pZGVxKCZvWzBdLml0ZW0tPm9pZCwgJm9bMV0uaXRlbS0+b2lkKSkKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwkJZ2V0X3BhdGNoX2lkcygmcmV2LCAmaWRzKTsKKwl9CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisJcmV2LmJvdW5kYXJ5ID0gMTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2KSkgIT0gTlVMTCkgeworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkgeworCQkJYm91bmRhcnlfY291bnQrKzsKKwkJCW9yaWdpbiA9IChib3VuZGFyeV9jb3VudCA9PSAxKSA/IGNvbW1pdCA6IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpZ25vcmVfaWZfaW5fdXBzdHJlYW0gJiYgaGFzX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpKQorCQkJY29udGludWU7CisKKwkJbnIrKzsKKwkJUkVBTExPQ19BUlJBWShsaXN0LCBucik7CisJCWxpc3RbbnIgLSAxXSA9IGNvbW1pdDsKKwl9CisJaWYgKG5yID09IDApCisJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwkJZ290byBkb25lOworCXRvdGFsID0gbnI7CisJaWYgKGNvdmVyX2xldHRlciA9PSAtMSkgeworCQlpZiAoY29uZmlnX2NvdmVyX2xldHRlciA9PSBDT1ZFUl9BVVRPKQorCQkJY292ZXJfbGV0dGVyID0gKHRvdGFsID4gMSk7CisJCWVsc2UKKwkJCWNvdmVyX2xldHRlciA9IChjb25maWdfY292ZXJfbGV0dGVyID09IENPVkVSX09OKTsKKwl9CisJaWYgKCFrZWVwX3N1YmplY3QgJiYgYXV0b19udW1iZXIgJiYgKHRvdGFsID4gMSB8fCBjb3Zlcl9sZXR0ZXIpKQorCQludW1iZXJlZCA9IDE7CisJaWYgKG51bWJlcmVkKQorCQlyZXYudG90YWwgPSB0b3RhbCArIHN0YXJ0X251bWJlciAtIDE7CisKKwlpZiAoaWRpZmZfcHJldi5ucikgeworCQlpZiAoIWNvdmVyX2xldHRlciAmJiB0b3RhbCAhPSAxKQorCQkJZGllKF8oIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIpKTsKKwkJcmV2LmlkaWZmX29pZDEgPSAmaWRpZmZfcHJldi5vaWRbaWRpZmZfcHJldi5uciAtIDFdOworCQlyZXYuaWRpZmZfb2lkMiA9IGdldF9jb21taXRfdHJlZV9vaWQobGlzdFswXSk7CisJCXJldi5pZGlmZl90aXRsZSA9IGRpZmZfdGl0bGUoJmlkaWZmX3RpdGxlLCByZXJvbGxfY291bnQsCisJCQkJCSAgICAgXygiSW50ZXJkaWZmOiIpLAorCQkJCQkgICAgIF8oIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiKSk7CisJfQorCisJaWYgKGNyZWF0aW9uX2ZhY3RvciA8IDApCisJCWNyZWF0aW9uX2ZhY3RvciA9IFJBTkdFX0RJRkZfQ1JFQVRJT05fRkFDVE9SX0RFRkFVTFQ7CisJZWxzZSBpZiAoIXJkaWZmX3ByZXYpCisJCWRpZShfKCItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiKSk7CisKKwlpZiAocmRpZmZfcHJldikgeworCQlpZiAoIWNvdmVyX2xldHRlciAmJiB0b3RhbCAhPSAxKQorCQkJZGllKF8oIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giKSk7CisKKwkJaW5mZXJfcmFuZ2VfZGlmZl9yYW5nZXMoJnJkaWZmMSwgJnJkaWZmMiwgcmRpZmZfcHJldiwKKwkJCQkJb3JpZ2luLCBsaXN0WzBdKTsKKwkJcmV2LnJkaWZmMSA9IHJkaWZmMS5idWY7CisJCXJldi5yZGlmZjIgPSByZGlmZjIuYnVmOworCQlyZXYuY3JlYXRpb25fZmFjdG9yID0gY3JlYXRpb25fZmFjdG9yOworCQlyZXYucmRpZmZfdGl0bGUgPSBkaWZmX3RpdGxlKCZyZGlmZl90aXRsZSwgcmVyb2xsX2NvdW50LAorCQkJCQkgICAgIF8oIlJhbmdlLWRpZmY6IiksCisJCQkJCSAgICAgXygiUmFuZ2UtZGlmZiBhZ2FpbnN0IHYlZDoiKSk7CisJfQorCisJaWYgKCFzaWduYXR1cmUpIHsKKwkJOyAvKiAtLW5vLXNpZ25hdHVyZSBpbmhpYml0cyBhbGwgc2lnbmF0dXJlcyAqLworCX0gZWxzZSBpZiAoc2lnbmF0dXJlICYmIHNpZ25hdHVyZSAhPSBnaXRfdmVyc2lvbl9zdHJpbmcpIHsKKwkJOyAvKiBub24tZGVmYXVsdCBzaWduYXR1cmUgYWxyZWFkeSBzZXQgKi8KKwl9IGVsc2UgaWYgKHNpZ25hdHVyZV9maWxlKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1Ziwgc2lnbmF0dXJlX2ZpbGUsIDEyOCkgPCAwKQorCQkJZGllX2Vycm5vKF8oInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciKSwgc2lnbmF0dXJlX2ZpbGUpOworCQlzaWduYXR1cmUgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0KKworCW1lbXNldCgmYmFzZXMsIDAsIHNpemVvZihiYXNlcykpOworCWlmIChiYXNlX2NvbW1pdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpiYXNlID0gZ2V0X2Jhc2VfY29tbWl0KGJhc2VfY29tbWl0LCBsaXN0LCBucik7CisJCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKKwkJY2xlYXJfb2JqZWN0X2ZsYWdzKFVOSU5URVJFU1RJTkcpOworCQlwcmVwYXJlX2Jhc2VzKCZiYXNlcywgYmFzZSwgbGlzdCwgbnIpOworCX0KKworCWlmIChpbl9yZXBseV90byB8fCB0aHJlYWQgfHwgY292ZXJfbGV0dGVyKQorCQlyZXYucmVmX21lc3NhZ2VfaWRzID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisJaWYgKGluX3JlcGx5X3RvKSB7CisJCWNvbnN0IGNoYXIgKm1zZ2lkID0gY2xlYW5fbWVzc2FnZV9pZChpbl9yZXBseV90byk7CisJCXN0cmluZ19saXN0X2FwcGVuZChyZXYucmVmX21lc3NhZ2VfaWRzLCBtc2dpZCk7CisJfQorCXJldi5udW1iZXJlZF9maWxlcyA9IGp1c3RfbnVtYmVyczsKKwlyZXYucGF0Y2hfc3VmZml4ID0gZm10X3BhdGNoX3N1ZmZpeDsKKwlpZiAoY292ZXJfbGV0dGVyKSB7CisJCWlmICh0aHJlYWQpCisJCQlnZW5fbWVzc2FnZV9pZCgmcmV2LCAiY292ZXIiKTsKKwkJbWFrZV9jb3Zlcl9sZXR0ZXIoJnJldiwgdXNlX3N0ZG91dCwKKwkJCQkgIG9yaWdpbiwgbnIsIGxpc3QsIGJyYW5jaF9uYW1lLCBxdWlldCk7CisJCXByaW50X2Jhc2VzKCZiYXNlcywgcmV2LmRpZmZvcHQuZmlsZSk7CisJCXByaW50X3NpZ25hdHVyZShyZXYuZGlmZm9wdC5maWxlKTsKKwkJdG90YWwrKzsKKwkJc3RhcnRfbnVtYmVyLS07CisJCS8qIGludGVyZGlmZi9yYW5nZS1kaWZmIGluIGNvdmVyLWxldHRlcjsgb21pdCBmcm9tIHBhdGNoZXMgKi8KKwkJcmV2LmlkaWZmX29pZDEgPSBOVUxMOworCQlyZXYucmRpZmYxID0gTlVMTDsKKwl9CisJcmV2LmFkZF9zaWdub2ZmID0gZG9fc2lnbm9mZjsKKworCWlmIChzaG93X3Byb2dyZXNzKQorCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiR2VuZXJhdGluZyBwYXRjaGVzIiksIHRvdGFsKTsKKwl3aGlsZSAoMCA8PSAtLW5yKSB7CisJCWludCBzaG93bjsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgdG90YWwgLSBucik7CisJCWNvbW1pdCA9IGxpc3RbbnJdOworCQlyZXYubnIgPSB0b3RhbCAtIG5yICsgKHN0YXJ0X251bWJlciAtIDEpOworCQkvKiBNYWtlIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWFpbHMgcmVwbGllcyB0byB0aGUgZmlyc3QgKi8KKwkJaWYgKHRocmVhZCkgeworCQkJLyogSGF2ZSB3ZSBhbHJlYWR5IGhhZCBhIG1lc3NhZ2UgSUQ/ICovCisJCQlpZiAocmV2Lm1lc3NhZ2VfaWQpIHsKKwkJCQkvKgorCQkJCSAqIEZvciBkZWVwIHRocmVhZGluZzogbWFrZSBldmVyeSBtYWlsCisJCQkJICogYSByZXBseSB0byB0aGUgcHJldmlvdXMgb25lLCBubworCQkJCSAqIG1hdHRlciB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIHNldC4KKwkJCQkgKgorCQkJCSAqIEZvciBzaGFsbG93IHRocmVhZGluZzoKKwkJCQkgKgorCQkJCSAqIFdpdGhvdXQgLS1jb3Zlci1sZXR0ZXIgYW5kCisJCQkJICogLS1pbi1yZXBseS10bywgbWFrZSBldmVyeSBtYWlsIGEKKwkJCQkgKiByZXBseSB0byB0aGUgb25lIGJlZm9yZS4KKwkJCQkgKgorCQkJCSAqIFdpdGggLS1pbi1yZXBseS10byBidXQgbm8KKwkJCQkgKiAtLWNvdmVyLWxldHRlciwgbWFrZSBldmVyeSBtYWlsIGEKKwkJCQkgKiByZXBseSB0byB0aGUgPHJlcGx5LXRvPi4KKwkJCQkgKgorCQkJCSAqIFdpdGggLS1jb3Zlci1sZXR0ZXIsIG1ha2UgZXZlcnkKKwkJCQkgKiBtYWlsIGJ1dCB0aGUgY292ZXIgbGV0dGVyIGEgcmVwbHkKKwkJCQkgKiB0byB0aGUgY292ZXIgbGV0dGVyLiAgVGhlIGNvdmVyCisJCQkJICogbGV0dGVyIGlzIGEgcmVwbHkgdG8gdGhlCisJCQkJICogLS1pbi1yZXBseS10bywgaWYgc3BlY2lmaWVkLgorCQkJCSAqLworCQkJCWlmICh0aHJlYWQgPT0gVEhSRUFEX1NIQUxMT1cKKwkJCQkgICAgJiYgcmV2LnJlZl9tZXNzYWdlX2lkcy0+bnIgPiAwCisJCQkJICAgICYmICghY292ZXJfbGV0dGVyIHx8IHJldi5uciA+IDEpKQorCQkJCQlmcmVlKHJldi5tZXNzYWdlX2lkKTsKKwkJCQllbHNlCisJCQkJCXN0cmluZ19saXN0X2FwcGVuZChyZXYucmVmX21lc3NhZ2VfaWRzLAorCQkJCQkJCSAgIHJldi5tZXNzYWdlX2lkKTsKKwkJCX0KKwkJCWdlbl9tZXNzYWdlX2lkKCZyZXYsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQl9CisKKwkJaWYgKCF1c2Vfc3Rkb3V0ICYmCisJCSAgICBvcGVuX25leHRfZmlsZShyZXYubnVtYmVyZWRfZmlsZXMgPyBOVUxMIDogY29tbWl0LCBOVUxMLCAmcmV2LCBxdWlldCkpCisJCQlkaWUoXygiZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiKSk7CisJCXNob3duID0gbG9nX3RyZWVfY29tbWl0KCZyZXYsIGNvbW1pdCk7CisJCWZyZWVfY29tbWl0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeS0+cGFyc2VkX29iamVjdHMsCisJCQkJICAgY29tbWl0KTsKKworCQkvKiBXZSBwdXQgb25lIGV4dHJhIGJsYW5rIGxpbmUgYmV0d2VlbiBmb3JtYXR0ZWQKKwkJICogcGF0Y2hlcyBhbmQgdGhpcyBmbGFnIGlzIHVzZWQgYnkgbG9nLXRyZWUgY29kZQorCQkgKiB0byBzZWUgaWYgaXQgbmVlZHMgdG8gZW1pdCBhIExGIGJlZm9yZSBzaG93aW5nCisJCSAqIHRoZSBsb2c7IHdoZW4gdXNpbmcgb25lIGZpbGUgcGVyIHBhdGNoLCB3ZSBkbworCQkgKiBub3Qgd2FudCB0aGUgZXh0cmEgYmxhbmsgbGluZS4KKwkJICovCisJCWlmICghdXNlX3N0ZG91dCkKKwkJCXJldi5zaG93bl9vbmUgPSAwOworCQlpZiAoc2hvd24pIHsKKwkJCXByaW50X2Jhc2VzKCZiYXNlcywgcmV2LmRpZmZvcHQuZmlsZSk7CisJCQlpZiAocmV2Lm1pbWVfYm91bmRhcnkpCisJCQkJZnByaW50ZihyZXYuZGlmZm9wdC5maWxlLCAiXG4tLSVzJXMtLVxuXG5cbiIsCisJCQkJICAgICAgIG1pbWVfYm91bmRhcnlfbGVhZGVyLAorCQkJCSAgICAgICByZXYubWltZV9ib3VuZGFyeSk7CisJCQllbHNlCisJCQkJcHJpbnRfc2lnbmF0dXJlKHJldi5kaWZmb3B0LmZpbGUpOworCQl9CisJCWlmICghdXNlX3N0ZG91dCkKKwkJCWZjbG9zZShyZXYuZGlmZm9wdC5maWxlKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCWZyZWUobGlzdCk7CisJZnJlZShicmFuY2hfbmFtZSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX3RvLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfY2MsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9oZHIsIDApOworCWlmIChpZ25vcmVfaWZfaW5fdXBzdHJlYW0pCisJCWZyZWVfcGF0Y2hfaWRzKCZpZHMpOworCitkb25lOgorCW9pZF9hcnJheV9jbGVhcigmaWRpZmZfcHJldik7CisJc3RyYnVmX3JlbGVhc2UoJmlkaWZmX3RpdGxlKTsKKwlzdHJidWZfcmVsZWFzZSgmcmRpZmYxKTsKKwlzdHJidWZfcmVsZWFzZSgmcmRpZmYyKTsKKwlzdHJidWZfcmVsZWFzZSgmcmRpZmZfdGl0bGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9wZW5kaW5nX2NvbW1pdChjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGZsYWdzKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWlmIChnZXRfb2lkKGFyZywgJm9pZCkgPT0gMCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkJJm9pZCk7CisJCWlmIChjb21taXQpIHsKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IGZsYWdzOworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsICZjb21taXQtPm9iamVjdCwgYXJnKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGVycnlfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgdm9pZCBwcmludF9jb21taXQoY2hhciBzaWduLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCB2ZXJib3NlLAorCQkJIGludCBhYmJyZXYsIEZJTEUgKmZpbGUpCit7CisJaWYgKCF2ZXJib3NlKSB7CisJCWZwcmludGYoZmlsZSwgIiVjICVzXG4iLCBzaWduLAorCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KCZjb21taXQtPm9iamVjdC5vaWQsIGFiYnJldikpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJmJ1Zik7CisJCWZwcmludGYoZmlsZSwgIiVjICVzICVzXG4iLCBzaWduLAorCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KCZjb21taXQtPm9iamVjdC5vaWQsIGFiYnJldiksCisJCSAgICAgICBidWYuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorfQorCitpbnQgY21kX2NoZXJyeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgYnJhbmNoICpjdXJyZW50X2JyYW5jaDsKKwljb25zdCBjaGFyICp1cHN0cmVhbTsKKwljb25zdCBjaGFyICpoZWFkID0gIkhFQUQiOworCWNvbnN0IGNoYXIgKmxpbWl0ID0gTlVMTDsKKwlpbnQgdmVyYm9zZSA9IDAsIGFiYnJldiA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGNoZXJyeV91c2FnZSwgMCk7CisKKwlzd2l0Y2ggKGFyZ2MpIHsKKwljYXNlIDM6CisJCWxpbWl0ID0gYXJndlsyXTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIDI6CisJCWhlYWQgPSBhcmd2WzFdOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMToKKwkJdXBzdHJlYW0gPSBhcmd2WzBdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljdXJyZW50X2JyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7CisJCXVwc3RyZWFtID0gYnJhbmNoX2dldF91cHN0cmVhbShjdXJyZW50X2JyYW5jaCwgTlVMTCk7CisJCWlmICghdXBzdHJlYW0pIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQiCisJCQkJCSIgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIgorCQkJCQkiIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIpKTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhjaGVycnlfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisJfQorCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIHByZWZpeCk7CisJcmV2cy5tYXhfcGFyZW50cyA9IDE7CisKKwlpZiAoYWRkX3BlbmRpbmdfY29tbWl0KGhlYWQsICZyZXZzLCAwKSkKKwkJZGllKF8oInVua25vd24gY29tbWl0ICVzIiksIGhlYWQpOworCWlmIChhZGRfcGVuZGluZ19jb21taXQodXBzdHJlYW0sICZyZXZzLCBVTklOVEVSRVNUSU5HKSkKKwkJZGllKF8oInVua25vd24gY29tbWl0ICVzIiksIHVwc3RyZWFtKTsKKworCS8qIERvbid0IHNheSBhbnl0aGluZyBpZiBoZWFkIGFuZCB1cHN0cmVhbSBhcmUgdGhlIHNhbWUuICovCisJaWYgKHJldnMucGVuZGluZy5uciA9PSAyKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm8gPSByZXZzLnBlbmRpbmcub2JqZWN0czsKKwkJaWYgKG9pZGVxKCZvWzBdLml0ZW0tPm9pZCwgJm9bMV0uaXRlbS0+b2lkKSkKKwkJCXJldHVybiAwOworCX0KKworCWdldF9wYXRjaF9pZHMoJnJldnMsICZpZHMpOworCisJaWYgKGxpbWl0ICYmIGFkZF9wZW5kaW5nX2NvbW1pdChsaW1pdCwgJnJldnMsIFVOSU5URVJFU1RJTkcpKQorCQlkaWUoXygidW5rbm93biBjb21taXQgJXMiKSwgbGltaXQpOworCisJLyogcmV2ZXJzZSB0aGUgbGlzdCBvZiBjb21taXRzICovCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cykpICE9IE5VTEwpIHsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJmxpc3QpOworCX0KKworCXdoaWxlIChsaXN0KSB7CisJCWNoYXIgc2lnbiA9ICcrJzsKKworCQljb21taXQgPSBsaXN0LT5pdGVtOworCQlpZiAoaGFzX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpKQorCQkJc2lnbiA9ICctJzsKKwkJcHJpbnRfY29tbWl0KHNpZ24sIGNvbW1pdCwgdmVyYm9zZSwgYWJicmV2LCByZXZzLmRpZmZvcHQuZmlsZSk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKworCWZyZWVfcGF0Y2hfaWRzKCZpZHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9scy1maWxlcy5jIGIvYnVpbHRpbi9scy1maWxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjlhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xzLWZpbGVzLmMKQEAgLTAsMCArMSw2OTIgQEAKKy8qCisgKiBUaGlzIG1lcmdlcyB0aGUgZmlsZSBsaXN0aW5nIGluIHRoZSBkaXJlY3RvcnkgY2FjaGUgaW5kZXgKKyAqIHdpdGggdGhlIGFjdHVhbCB3b3JraW5nIGRpcmVjdG9yeSBsaXN0LCBhbmQgc2hvd3MgZGlmZmVyZW50CisgKiBjb21iaW5hdGlvbnMgb2YgdGhlIHR3by4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKworc3RhdGljIGludCBhYmJyZXY7CitzdGF0aWMgaW50IHNob3dfZGVsZXRlZDsKK3N0YXRpYyBpbnQgc2hvd19jYWNoZWQ7CitzdGF0aWMgaW50IHNob3dfb3RoZXJzOworc3RhdGljIGludCBzaG93X3N0YWdlOworc3RhdGljIGludCBzaG93X3VubWVyZ2VkOworc3RhdGljIGludCBzaG93X3Jlc29sdmVfdW5kbzsKK3N0YXRpYyBpbnQgc2hvd19tb2RpZmllZDsKK3N0YXRpYyBpbnQgc2hvd19raWxsZWQ7CitzdGF0aWMgaW50IHNob3dfdmFsaWRfYml0Oworc3RhdGljIGludCBzaG93X2ZzbW9uaXRvcl9iaXQ7CitzdGF0aWMgaW50IGxpbmVfdGVybWluYXRvciA9ICdcbic7CitzdGF0aWMgaW50IGRlYnVnX21vZGU7CitzdGF0aWMgaW50IHNob3dfZW9sOworc3RhdGljIGludCByZWN1cnNlX3N1Ym1vZHVsZXM7CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcmVmaXg7CitzdGF0aWMgaW50IG1heF9wcmVmaXhfbGVuOworc3RhdGljIGludCBwcmVmaXhfbGVuOworc3RhdGljIHN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKK3N0YXRpYyBpbnQgZXJyb3JfdW5tYXRjaDsKK3N0YXRpYyBjaGFyICpwc19tYXRjaGVkOworc3RhdGljIGNvbnN0IGNoYXIgKndpdGhfdHJlZTsKK3N0YXRpYyBpbnQgZXhjX2dpdmVuOworc3RhdGljIGludCBleGNsdWRlX2FyZ3M7CisKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfY2FjaGVkID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqdGFnX3VubWVyZ2VkID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqdGFnX3JlbW92ZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfb3RoZXIgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfa2lsbGVkID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqdGFnX21vZGlmaWVkID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqdGFnX3NraXBfd29ya3RyZWUgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfcmVzb2x2ZV91bmRvID0gIiI7CisKK3N0YXRpYyB2b2lkIHdyaXRlX2VvbGluZm8oY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKHNob3dfZW9sKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQljb25zdCBjaGFyICppX3R4dCA9ICIiOworCQljb25zdCBjaGFyICp3X3R4dCA9ICIiOworCQljb25zdCBjaGFyICphX3R4dCA9IGdldF9jb252ZXJ0X2F0dHJfYXNjaWkoaXN0YXRlLCBwYXRoKTsKKwkJaWYgKGNlICYmIFNfSVNSRUcoY2UtPmNlX21vZGUpKQorCQkJaV90eHQgPSBnZXRfY2FjaGVkX2NvbnZlcnRfc3RhdHNfYXNjaWkoaXN0YXRlLAorCQkJCQkJCSAgICAgICBjZS0+bmFtZSk7CisJCWlmICghbHN0YXQocGF0aCwgJnN0KSAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJd190eHQgPSBnZXRfd3RfY29udmVydF9zdGF0c19hc2NpaShwYXRoKTsKKwkJcHJpbnRmKCJpLyUtNXMgdy8lLTVzIGF0dHIvJS0xN3NcdCIsIGlfdHh0LCB3X3R4dCwgYV90eHQpOworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCS8qCisJICogV2l0aCAiLS1mdWxsLW5hbWUiLCBwcmVmaXhfbGVuPTA7IHRoaXMgY2FsbGVyIG5lZWRzIHRvIHBhc3MKKwkgKiBhbiBlbXB0eSBzdHJpbmcgaW4gdGhhdCBjYXNlIChhIE5VTEwgaXMgZ29vZCBmb3IgIiIpLgorCSAqLworCXdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKG5hbWUsIHByZWZpeF9sZW4gPyBwcmVmaXggOiBOVUxMLAorCQkJCSAgIHN0ZG91dCwgbGluZV90ZXJtaW5hdG9yKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF90YWcoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqdGFnKQoreworCXN0YXRpYyBjaGFyIGFsdHRhZ1s0XTsKKworCWlmICh0YWcgJiYgKnRhZyAmJiAoKHNob3dfdmFsaWRfYml0ICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpIHx8CisJCShzaG93X2ZzbW9uaXRvcl9iaXQgJiYgKGNlLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkpKSkgeworCQltZW1jcHkoYWx0dGFnLCB0YWcsIDMpOworCisJCWlmIChpc2FscGhhKHRhZ1swXSkpIHsKKwkJCWFsdHRhZ1swXSA9IHRvbG93ZXIodGFnWzBdKTsKKwkJfSBlbHNlIGlmICh0YWdbMF0gPT0gJz8nKSB7CisJCQlhbHR0YWdbMF0gPSAnISc7CisJCX0gZWxzZSB7CisJCQlhbHR0YWdbMF0gPSAndic7CisJCQlhbHR0YWdbMV0gPSB0YWdbMF07CisJCQlhbHR0YWdbMl0gPSAnICc7CisJCQlhbHR0YWdbM10gPSAwOworCQl9CisKKwkJdGFnID0gYWx0dGFnOworCX0KKworCXJldHVybiB0YWc7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2RlYnVnKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaWYgKGRlYnVnX21vZGUpIHsKKwkJY29uc3Qgc3RydWN0IHN0YXRfZGF0YSAqc2QgPSAmY2UtPmNlX3N0YXRfZGF0YTsKKworCQlwcmludGYoIiAgY3RpbWU6ICV1OiV1XG4iLCBzZC0+c2RfY3RpbWUuc2VjLCBzZC0+c2RfY3RpbWUubnNlYyk7CisJCXByaW50ZigiICBtdGltZTogJXU6JXVcbiIsIHNkLT5zZF9tdGltZS5zZWMsIHNkLT5zZF9tdGltZS5uc2VjKTsKKwkJcHJpbnRmKCIgIGRldjogJXVcdGlubzogJXVcbiIsIHNkLT5zZF9kZXYsIHNkLT5zZF9pbm8pOworCQlwcmludGYoIiAgdWlkOiAldVx0Z2lkOiAldVxuIiwgc2QtPnNkX3VpZCwgc2QtPnNkX2dpZCk7CisJCXByaW50ZigiICBzaXplOiAldVx0ZmxhZ3M6ICV4XG4iLCBzZC0+c2Rfc2l6ZSwgY2UtPmNlX2ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZGlyX2VudHJ5KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgZGlyX2VudHJ5ICplbnQpCit7CisJaW50IGxlbiA9IG1heF9wcmVmaXhfbGVuOworCisJaWYgKGxlbiA+IGVudC0+bGVuKQorCQlkaWUoImdpdCBscy1maWxlczogaW50ZXJuYWwgZXJyb3IgLSBkaXJlY3RvcnkgZW50cnkgbm90IHN1cGVyc2V0IG9mIHByZWZpeCIpOworCisJaWYgKCFkaXJfcGF0aF9tYXRjaChpc3RhdGUsIGVudCwgJnBhdGhzcGVjLCBsZW4sIHBzX21hdGNoZWQpKQorCQlyZXR1cm47CisKKwlmcHV0cyh0YWcsIHN0ZG91dCk7CisJd3JpdGVfZW9saW5mbyhpc3RhdGUsIE5VTEwsIGVudC0+bmFtZSk7CisJd3JpdGVfbmFtZShlbnQtPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X290aGVyX2ZpbGVzKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRpci0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXItPmVudHJpZXNbaV07CisJCWlmICghaW5kZXhfbmFtZV9pc19vdGhlcihpc3RhdGUsIGVudC0+bmFtZSwgZW50LT5sZW4pKQorCQkJY29udGludWU7CisJCXNob3dfZGlyX2VudHJ5KGlzdGF0ZSwgdGFnX290aGVyLCBlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19raWxsZWRfZmlsZXMoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLT5lbnRyaWVzW2ldOworCQljaGFyICpjcCwgKnNwOworCQlpbnQgcG9zLCBsZW4sIGtpbGxlZCA9IDA7CisKKwkJZm9yIChjcCA9IGVudC0+bmFtZTsgY3AgLSBlbnQtPm5hbWUgPCBlbnQtPmxlbjsgY3AgPSBzcCArIDEpIHsKKwkJCXNwID0gc3RyY2hyKGNwLCAnLycpOworCQkJaWYgKCFzcCkgeworCQkJCS8qIElmIGVudC0+bmFtZSBpcyBwcmVmaXggb2YgYW4gZW50cnkgaW4gdGhlCisJCQkJICogY2FjaGUsIGl0IHdpbGwgYmUga2lsbGVkLgorCQkJCSAqLworCQkJCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgZW50LT5uYW1lLCBlbnQtPmxlbik7CisJCQkJaWYgKDAgPD0gcG9zKQorCQkJCQlCVUcoImtpbGxlZC1maWxlICUuKnMgbm90IGZvdW5kIiwKKwkJCQkJCWVudC0+bGVuLCBlbnQtPm5hbWUpOworCQkJCXBvcyA9IC1wb3MgLSAxOworCQkJCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yICYmCisJCQkJICAgICAgIGNlX3N0YWdlKGlzdGF0ZS0+Y2FjaGVbcG9zXSkpCisJCQkJCXBvcysrOyAvKiBza2lwIHVubWVyZ2VkICovCisJCQkJaWYgKGlzdGF0ZS0+Y2FjaGVfbnIgPD0gcG9zKQorCQkJCQlicmVhazsKKwkJCQkvKiBwb3MgcG9pbnRzIGF0IGEgbmFtZSBpbW1lZGlhdGVseSBhZnRlcgorCQkJCSAqIGVudC0+bmFtZSBpbiB0aGUgY2FjaGUuICBEb2VzIGl0IGV4cGVjdAorCQkJCSAqIGVudC0+bmFtZSB0byBiZSBhIGRpcmVjdG9yeT8KKwkJCQkgKi8KKwkJCQlsZW4gPSBjZV9uYW1lbGVuKGlzdGF0ZS0+Y2FjaGVbcG9zXSk7CisJCQkJaWYgKChlbnQtPmxlbiA8IGxlbikgJiYKKwkJCQkgICAgIXN0cm5jbXAoaXN0YXRlLT5jYWNoZVtwb3NdLT5uYW1lLAorCQkJCQkgICAgIGVudC0+bmFtZSwgZW50LT5sZW4pICYmCisJCQkJICAgIGlzdGF0ZS0+Y2FjaGVbcG9zXS0+bmFtZVtlbnQtPmxlbl0gPT0gJy8nKQorCQkJCQlraWxsZWQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKDAgPD0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBlbnQtPm5hbWUsIHNwIC0gZW50LT5uYW1lKSkgeworCQkJCS8qIElmIGFueSBvZiB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBpbgorCQkJCSAqIGVudC0+bmFtZSBpcyByZWdpc3RlcmVkIGluIHRoZSBjYWNoZSwKKwkJCQkgKiBlbnQtPm5hbWUgd2lsbCBiZSBraWxsZWQuCisJCQkJICovCisJCQkJa2lsbGVkID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoa2lsbGVkKQorCQkJc2hvd19kaXJfZW50cnkoaXN0YXRlLCB0YWdfa2lsbGVkLCBkaXItPmVudHJpZXNbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcik7CisKK3N0YXRpYyB2b2lkIHNob3dfc3VibW9kdWxlKHN0cnVjdCByZXBvc2l0b3J5ICpzdXBlcnByb2plY3QsCisJCQkgICBzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCByZXBvc2l0b3J5IHN1YnJlcG87CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aChzdXBlcnByb2plY3QsCisJCQkJCQkJICAmbnVsbF9vaWQsIHBhdGgpOworCisJaWYgKHJlcG9fc3VibW9kdWxlX2luaXQoJnN1YnJlcG8sIHN1cGVycHJvamVjdCwgc3ViKSkKKwkJcmV0dXJuOworCisJaWYgKHJlcG9fcmVhZF9pbmRleCgmc3VicmVwbykgPCAwKQorCQlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOworCisJc2hvd19maWxlcygmc3VicmVwbywgZGlyKTsKKworCXJlcG9fY2xlYXIoJnN1YnJlcG8pOworfQorCitzdGF0aWMgdm9pZCBzaG93X2NlKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqZnVsbG5hbWUsCisJCSAgICBjb25zdCBjaGFyICp0YWcpCit7CisJaWYgKG1heF9wcmVmaXhfbGVuID4gc3RybGVuKGZ1bGxuYW1lKSkKKwkJZGllKCJnaXQgbHMtZmlsZXM6IGludGVybmFsIGVycm9yIC0gY2FjaGUgZW50cnkgbm90IHN1cGVyc2V0IG9mIHByZWZpeCIpOworCisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKKwkgICAgaXNfc3VibW9kdWxlX2FjdGl2ZShyZXBvLCBjZS0+bmFtZSkpIHsKKwkJc2hvd19zdWJtb2R1bGUocmVwbywgZGlyLCBjZS0+bmFtZSk7CisJfSBlbHNlIGlmIChtYXRjaF9wYXRoc3BlYyhyZXBvLT5pbmRleCwgJnBhdGhzcGVjLCBmdWxsbmFtZSwgc3RybGVuKGZ1bGxuYW1lKSwKKwkJCQkgIG1heF9wcmVmaXhfbGVuLCBwc19tYXRjaGVkLAorCQkJCSAgU19JU0RJUihjZS0+Y2VfbW9kZSkgfHwKKwkJCQkgIFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkpIHsKKwkJdGFnID0gZ2V0X3RhZyhjZSwgdGFnKTsKKworCQlpZiAoIXNob3dfc3RhZ2UpIHsKKwkJCWZwdXRzKHRhZywgc3Rkb3V0KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiJXMlMDZvICVzICVkXHQiLAorCQkJICAgICAgIHRhZywKKwkJCSAgICAgICBjZS0+Y2VfbW9kZSwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJmNlLT5vaWQsIGFiYnJldiksCisJCQkgICAgICAgY2Vfc3RhZ2UoY2UpKTsKKwkJfQorCQl3cml0ZV9lb2xpbmZvKHJlcG8tPmluZGV4LCBjZSwgZnVsbG5hbWUpOworCQl3cml0ZV9uYW1lKGZ1bGxuYW1lKTsKKwkJcHJpbnRfZGVidWcoY2UpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19ydV9pbmZvKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKCFpc3RhdGUtPnJlc29sdmVfdW5kbykKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBpc3RhdGUtPnJlc29sdmVfdW5kbykgeworCQljb25zdCBjaGFyICpwYXRoID0gaXRlbS0+c3RyaW5nOworCQlzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8gKnVpID0gaXRlbS0+dXRpbDsKKwkJaW50IGksIGxlbjsKKworCQlsZW4gPSBzdHJsZW4ocGF0aCk7CisJCWlmIChsZW4gPCBtYXhfcHJlZml4X2xlbikKKwkJCWNvbnRpbnVlOyAvKiBvdXRzaWRlIG9mIHRoZSBwcmVmaXggKi8KKwkJaWYgKCFtYXRjaF9wYXRoc3BlYyhpc3RhdGUsICZwYXRoc3BlYywgcGF0aCwgbGVuLAorCQkJCSAgICBtYXhfcHJlZml4X2xlbiwgcHNfbWF0Y2hlZCwgMCkpCisJCQljb250aW51ZTsgLyogdW5pbnRlcmVzdGVkICovCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmICghdWktPm1vZGVbaV0pCisJCQkJY29udGludWU7CisJCQlwcmludGYoIiVzJTA2byAlcyAlZFx0IiwgdGFnX3Jlc29sdmVfdW5kbywgdWktPm1vZGVbaV0sCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KCZ1aS0+b2lkW2ldLCBhYmJyZXYpLAorCQkJICAgICAgIGkgKyAxKTsKKwkJCXdyaXRlX25hbWUocGF0aCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY2VfZXhjbHVkZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgICAgICBjb25zdCBjaGFyICpmdWxsbmFtZSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpbnQgZHR5cGUgPSBjZV90b19kdHlwZShjZSk7CisJcmV0dXJuIGlzX2V4Y2x1ZGVkKGRpciwgaXN0YXRlLCBmdWxsbmFtZSwgJmR0eXBlKTsKK30KKworc3RhdGljIHZvaWQgY29uc3RydWN0X2Z1bGxuYW1lKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlzdHJidWZfcmVzZXQob3V0KTsKKwlpZiAocmVwby0+c3VibW9kdWxlX3ByZWZpeCkKKwkJc3RyYnVmX2FkZHN0cihvdXQsIHJlcG8tPnN1Ym1vZHVsZV9wcmVmaXgpOworCXN0cmJ1Zl9hZGRzdHIob3V0LCBjZS0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZmlsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmJ1ZiBmdWxsbmFtZSA9IFNUUkJVRl9JTklUOworCisJLyogRm9yIGNhY2hlZC9kZWxldGVkIGZpbGVzIHdlIGRvbid0IG5lZWQgdG8gZXZlbiBkbyB0aGUgcmVhZGRpciAqLworCWlmIChzaG93X290aGVycyB8fCBzaG93X2tpbGxlZCkgeworCQlpZiAoIXNob3dfb3RoZXJzKQorCQkJZGlyLT5mbGFncyB8PSBESVJfQ09MTEVDVF9LSUxMRURfT05MWTsKKwkJZmlsbF9kaXJlY3RvcnkoZGlyLCByZXBvLT5pbmRleCwgJnBhdGhzcGVjKTsKKwkJaWYgKHNob3dfb3RoZXJzKQorCQkJc2hvd19vdGhlcl9maWxlcyhyZXBvLT5pbmRleCwgZGlyKTsKKwkJaWYgKHNob3dfa2lsbGVkKQorCQkJc2hvd19raWxsZWRfZmlsZXMocmVwby0+aW5kZXgsIGRpcik7CisJfQorCWlmIChzaG93X2NhY2hlZCB8fCBzaG93X3N0YWdlKSB7CisJCWZvciAoaSA9IDA7IGkgPCByZXBvLT5pbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHJlcG8tPmluZGV4LT5jYWNoZVtpXTsKKworCQkJY29uc3RydWN0X2Z1bGxuYW1lKCZmdWxsbmFtZSwgcmVwbywgY2UpOworCisJCQlpZiAoKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSAmJgorCQkJICAgICFjZV9leGNsdWRlZChkaXIsIHJlcG8tPmluZGV4LCBmdWxsbmFtZS5idWYsIGNlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzaG93X3VubWVyZ2VkICYmICFjZV9zdGFnZShjZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKQorCQkJCWNvbnRpbnVlOworCQkJc2hvd19jZShyZXBvLCBkaXIsIGNlLCBmdWxsbmFtZS5idWYsCisJCQkJY2Vfc3RhZ2UoY2UpID8gdGFnX3VubWVyZ2VkIDoKKwkJCQkoY2Vfc2tpcF93b3JrdHJlZShjZSkgPyB0YWdfc2tpcF93b3JrdHJlZSA6CisJCQkJIHRhZ19jYWNoZWQpKTsKKwkJfQorCX0KKwlpZiAoc2hvd19kZWxldGVkIHx8IHNob3dfbW9kaWZpZWQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHJlcG8tPmluZGV4LT5jYWNoZV9ucjsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gcmVwby0+aW5kZXgtPmNhY2hlW2ldOworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlpbnQgZXJyOworCisJCQljb25zdHJ1Y3RfZnVsbG5hbWUoJmZ1bGxuYW1lLCByZXBvLCBjZSk7CisKKwkJCWlmICgoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpICYmCisJCQkgICAgIWNlX2V4Y2x1ZGVkKGRpciwgcmVwby0+aW5kZXgsIGZ1bGxuYW1lLmJ1ZiwgY2UpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IGxzdGF0KGZ1bGxuYW1lLmJ1ZiwgJnN0KTsKKwkJCWlmIChzaG93X2RlbGV0ZWQgJiYgZXJyKQorCQkJCXNob3dfY2UocmVwbywgZGlyLCBjZSwgZnVsbG5hbWUuYnVmLCB0YWdfcmVtb3ZlZCk7CisJCQlpZiAoc2hvd19tb2RpZmllZCAmJiBpZV9tb2RpZmllZChyZXBvLT5pbmRleCwgY2UsICZzdCwgMCkpCisJCQkJc2hvd19jZShyZXBvLCBkaXIsIGNlLCBmdWxsbmFtZS5idWYsIHRhZ19tb2RpZmllZCk7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmZnVsbG5hbWUpOworfQorCisvKgorICogUHJ1bmUgdGhlIGluZGV4IHRvIG9ubHkgY29udGFpbiBzdHVmZiBzdGFydGluZyB3aXRoICJwcmVmaXgiCisgKi8KK3N0YXRpYyB2b2lkIHBydW5lX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJY29uc3QgY2hhciAqcHJlZml4LCBzaXplX3QgcHJlZml4bGVuKQoreworCWludCBwb3M7CisJdW5zaWduZWQgaW50IGZpcnN0LCBsYXN0OworCisJaWYgKCFwcmVmaXggfHwgIWlzdGF0ZS0+Y2FjaGVfbnIpCisJCXJldHVybjsKKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIHByZWZpeCwgcHJlZml4bGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcy0xOworCWZpcnN0ID0gcG9zOworCWxhc3QgPSBpc3RhdGUtPmNhY2hlX25yOworCXdoaWxlIChsYXN0ID4gZmlyc3QpIHsKKwkJaW50IG5leHQgPSBmaXJzdCArICgobGFzdCAtIGZpcnN0KSA+PiAxKTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbbmV4dF07CisJCWlmICghc3RybmNtcChjZS0+bmFtZSwgcHJlZml4LCBwcmVmaXhsZW4pKSB7CisJCQlmaXJzdCA9IG5leHQrMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWxhc3QgPSBuZXh0OworCX0KKwlNT1ZFX0FSUkFZKGlzdGF0ZS0+Y2FjaGUsIGlzdGF0ZS0+Y2FjaGUgKyBwb3MsIGxhc3QgLSBwb3MpOworCWlzdGF0ZS0+Y2FjaGVfbnIgPSBsYXN0IC0gcG9zOworfQorCitzdGF0aWMgaW50IGdldF9jb21tb25fcHJlZml4X2xlbihjb25zdCBjaGFyICpjb21tb25fcHJlZml4KQoreworCWludCBjb21tb25fcHJlZml4X2xlbjsKKworCWlmICghY29tbW9uX3ByZWZpeCkKKwkJcmV0dXJuIDA7CisKKwljb21tb25fcHJlZml4X2xlbiA9IHN0cmxlbihjb21tb25fcHJlZml4KTsKKworCS8qCisJICogSWYgdGhlIHByZWZpeCBoYXMgYSB0cmFpbGluZyBzbGFzaCwgc3RyaXAgaXQgc28gdGhhdCBzdWJtb2R1bGVzIHdvbnQKKwkgKiBiZSBwcnVuZWQgZnJvbSB0aGUgaW5kZXguCisJICovCisJaWYgKGNvbW1vbl9wcmVmaXhbY29tbW9uX3ByZWZpeF9sZW4gLSAxXSA9PSAnLycpCisJCWNvbW1vbl9wcmVmaXhfbGVuLS07CisKKwlyZXR1cm4gY29tbW9uX3ByZWZpeF9sZW47Cit9CisKKy8qCisgKiBSZWFkIHRoZSB0cmVlIHNwZWNpZmllZCB3aXRoIC0td2l0aC10cmVlIG9wdGlvbgorICogKHR5cGljYWxseSwgSEVBRCkgaW50byBzdGFnZSAjMSBhbmQgdGhlbgorICogc3F1YXNoIHRoZW0gZG93biB0byBzdGFnZSAjMC4gIFRoaXMgaXMgdXNlZCBmb3IKKyAqIC0tZXJyb3ItdW5tYXRjaCB0byBsaXN0IGFuZCBjaGVjayB0aGUgcGF0aCBwYXR0ZXJucworICogdGhhdCB3ZXJlIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIFdlIGFyZSBub3QKKyAqIGdvaW5nIHRvIHdyaXRlIHRoaXMgaW5kZXggb3V0LgorICovCit2b2lkIG92ZXJsYXlfdHJlZV9vbl9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKnRyZWVfbmFtZSwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmxhc3Rfc3RhZ2UwID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChnZXRfb2lkKHRyZWVfbmFtZSwgJm9pZCkpCisJCWRpZSgidHJlZS1pc2ggJXMgbm90IGZvdW5kLiIsIHRyZWVfbmFtZSk7CisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJm9pZCk7CisJaWYgKCF0cmVlKQorCQlkaWUoImJhZCB0cmVlLWlzaCAlcyIsIHRyZWVfbmFtZSk7CisKKwkvKiBIb2lzdCB0aGUgdW5tZXJnZWQgZW50cmllcyB1cCB0byBzdGFnZSAjMyB0byBtYWtlIHJvb20gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoIWNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOworCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfU1RBR0VNQVNLOworCX0KKworCWlmIChwcmVmaXgpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKihtYXRjaGJ1ZlsxXSk7CisJCW1hdGNoYnVmWzBdID0gTlVMTDsKKwkJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCBQQVRIU1BFQ19BTExfTUFHSUMsCisJCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0NXRCwgcHJlZml4LCBtYXRjaGJ1Zik7CisJfSBlbHNlCisJCW1lbXNldCgmcGF0aHNwZWMsIDAsIHNpemVvZihwYXRoc3BlYykpOworCWlmIChyZWFkX3RyZWUodGhlX3JlcG9zaXRvcnksIHRyZWUsIDEsICZwYXRoc3BlYywgaXN0YXRlKSkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCB0cmVlIGVudHJpZXMgJXMiLCB0cmVlX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJc3dpdGNoIChjZV9zdGFnZShjZSkpIHsKKwkJY2FzZSAwOgorCQkJbGFzdF9zdGFnZTAgPSBjZTsKKwkJCS8qIGZhbGx0aHJ1ICovCisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJY2FzZSAxOgorCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzIHN0YWdlICMwIGVudHJ5IGZvciB0aGlzLCB3ZSBkbyBub3QKKwkJCSAqIG5lZWQgdG8gc2hvdyBpdC4gIFdlIHVzZSBDRV9VUERBVEUgYml0IHRvIG1hcmsKKwkJCSAqIHN1Y2ggYW4gZW50cnkuCisJCQkgKi8KKwkJCWlmIChsYXN0X3N0YWdlMCAmJgorCQkJICAgICFzdHJjbXAobGFzdF9zdGFnZTAtPm5hbWUsIGNlLT5uYW1lKSkKKwkJCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFOworCQl9CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxzX2ZpbGVzX3VzYWdlW10gPSB7CisJTl8oImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2V4Y2x1ZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqZXhjbHVkZV9saXN0ID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCWV4Y19naXZlbiA9IDE7CisJc3RyaW5nX2xpc3RfYXBwZW5kKGV4Y2x1ZGVfbGlzdCwgYXJnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9leGNsdWRlX2Zyb20oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlleGNfZ2l2ZW4gPSAxOworCWFkZF9wYXR0ZXJuc19mcm9tX2ZpbGUoZGlyLCBhcmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2V4Y2x1ZGVfc3RhbmRhcmQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKworCWV4Y19naXZlbiA9IDE7CisJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoZGlyKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX2xzX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqY21kX3ByZWZpeCkKK3sKKwlpbnQgcmVxdWlyZV93b3JrX3RyZWUgPSAwLCBzaG93X3RhZyA9IDAsIGk7CisJY29uc3QgY2hhciAqbWF4X3ByZWZpeDsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGw7CisJc3RydWN0IHN0cmluZ19saXN0IGV4Y2x1ZGVfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnNbXSA9IHsKKwkJLyogVGhpbmsgdHdpY2UgYmVmb3JlIGFkZGluZyAiLS1udWwiIHN5bm9ueW0gdG8gdGhpcyAqLworCQlPUFRfU0VUX0lOVCgneicsIE5VTEwsICZsaW5lX3Rlcm1pbmF0b3IsCisJCQlOXygicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiKSwgJ1wwJyksCisJCU9QVF9CT09MKCd0JywgTlVMTCwgJnNob3dfdGFnLAorCQkJTl8oImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiKSksCisJCU9QVF9CT09MKCd2JywgTlVMTCwgJnNob3dfdmFsaWRfYml0LAorCQkJTl8oInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIikpLAorCQlPUFRfQk9PTCgnZicsIE5VTEwsICZzaG93X2ZzbW9uaXRvcl9iaXQsCisJCQlOXygidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIpKSwKKwkJT1BUX0JPT0woJ2MnLCAiY2FjaGVkIiwgJnNob3dfY2FjaGVkLAorCQkJTl8oInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIikpLAorCQlPUFRfQk9PTCgnZCcsICJkZWxldGVkIiwgJnNob3dfZGVsZXRlZCwKKwkJCU5fKCJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIpKSwKKwkJT1BUX0JPT0woJ20nLCAibW9kaWZpZWQiLCAmc2hvd19tb2RpZmllZCwKKwkJCU5fKCJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSksCisJCU9QVF9CT09MKCdvJywgIm90aGVycyIsICZzaG93X290aGVycywKKwkJCU5fKCJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiKSksCisJCU9QVF9CSVQoJ2knLCAiaWdub3JlZCIsICZkaXIuZmxhZ3MsCisJCQlOXygic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSwKKwkJCURJUl9TSE9XX0lHTk9SRUQpLAorCQlPUFRfQk9PTCgncycsICJzdGFnZSIsICZzaG93X3N0YWdlLAorCQkJTl8oInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IikpLAorCQlPUFRfQk9PTCgnaycsICJraWxsZWQiLCAmc2hvd19raWxsZWQsCisJCQlOXygic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIpKSwKKwkJT1BUX0JJVCgwLCAiZGlyZWN0b3J5IiwgJmRpci5mbGFncywKKwkJCU5fKCJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiKSwKKwkJCURJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTKSwKKwkJT1BUX0JPT0woMCwgImVvbCIsICZzaG93X2VvbCwgTl8oInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIikpLAorCQlPUFRfTkVHQklUKDAsICJlbXB0eS1kaXJlY3RvcnkiLCAmZGlyLmZsYWdzLAorCQkJTl8oImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiKSwKKwkJCURJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTKSwKKwkJT1BUX0JPT0woJ3UnLCAidW5tZXJnZWQiLCAmc2hvd191bm1lcmdlZCwKKwkJCU5fKCJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSksCisJCU9QVF9CT09MKDAsICJyZXNvbHZlLXVuZG8iLCAmc2hvd19yZXNvbHZlX3VuZG8sCisJCQkgICAgTl8oInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3gnLCAiZXhjbHVkZSIsICZleGNsdWRlX2xpc3QsIE5fKCJwYXR0ZXJuIiksCisJCQlOXygic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIiksCisJCQlQQVJTRV9PUFRfTk9ORUcsIG9wdGlvbl9wYXJzZV9leGNsdWRlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnWCcsICJleGNsdWRlLWZyb20iLCAmZGlyLCBOXygiZmlsZSIpLAorCQkJTl8oImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iKSwKKwkJCVBBUlNFX09QVF9OT05FRywgb3B0aW9uX3BhcnNlX2V4Y2x1ZGVfZnJvbSB9LAorCQlPUFRfU1RSSU5HKDAsICJleGNsdWRlLXBlci1kaXJlY3RvcnkiLCAmZGlyLmV4Y2x1ZGVfcGVyX2RpciwgTl8oImZpbGUiKSwKKwkJCU5fKCJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJleGNsdWRlLXN0YW5kYXJkIiwgJmRpciwgTlVMTCwKKwkJCU5fKCJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlvcHRpb25fcGFyc2VfZXhjbHVkZV9zdGFuZGFyZCB9LAorCQlPUFRfU0VUX0lOVF9GKDAsICJmdWxsLW5hbWUiLCAmcHJlZml4X2xlbiwKKwkJCSAgICAgIE5fKCJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIpLAorCQkJICAgICAgMCwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0JPT0woMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsICZyZWN1cnNlX3N1Ym1vZHVsZXMsCisJCQlOXygicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiKSksCisJCU9QVF9CT09MKDAsICJlcnJvci11bm1hdGNoIiwgJmVycm9yX3VubWF0Y2gsCisJCQlOXygiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIikpLAorCQlPUFRfU1RSSU5HKDAsICJ3aXRoLXRyZWUiLCAmd2l0aF90cmVlLCBOXygidHJlZS1pc2giKSwKKwkJCU5fKCJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IikpLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX0JPT0woMCwgImRlYnVnIiwgJmRlYnVnX21vZGUsIE5fKCJzaG93IGRlYnVnZ2luZyBkYXRhIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMobHNfZmlsZXNfdXNhZ2UsIGJ1aWx0aW5fbHNfZmlsZXNfb3B0aW9ucyk7CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCXByZWZpeCA9IGNtZF9wcmVmaXg7CisJaWYgKHByZWZpeCkKKwkJcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWlmIChyZXBvX3JlYWRfaW5kZXgodGhlX3JlcG9zaXRvcnkpIDwgMCkKKwkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9sc19maWxlc19vcHRpb25zLAorCQkJbHNfZmlsZXNfdXNhZ2UsIDApOworCXBsID0gYWRkX3BhdHRlcm5fbGlzdCgmZGlyLCBFWENfQ01ETCwgIi0tZXhjbHVkZSBvcHRpb24iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXhjbHVkZV9saXN0Lm5yOyBpKyspIHsKKwkJYWRkX3BhdHRlcm4oZXhjbHVkZV9saXN0Lml0ZW1zW2ldLnN0cmluZywgIiIsIDAsIHBsLCAtLWV4Y2x1ZGVfYXJncyk7CisJfQorCWlmIChzaG93X3RhZyB8fCBzaG93X3ZhbGlkX2JpdCB8fCBzaG93X2ZzbW9uaXRvcl9iaXQpIHsKKwkJdGFnX2NhY2hlZCA9ICJIICI7CisJCXRhZ191bm1lcmdlZCA9ICJNICI7CisJCXRhZ19yZW1vdmVkID0gIlIgIjsKKwkJdGFnX21vZGlmaWVkID0gIkMgIjsKKwkJdGFnX290aGVyID0gIj8gIjsKKwkJdGFnX2tpbGxlZCA9ICJLICI7CisJCXRhZ19za2lwX3dvcmt0cmVlID0gIlMgIjsKKwkJdGFnX3Jlc29sdmVfdW5kbyA9ICJVICI7CisJfQorCWlmIChzaG93X21vZGlmaWVkIHx8IHNob3dfb3RoZXJzIHx8IHNob3dfZGVsZXRlZCB8fCAoZGlyLmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkgfHwgc2hvd19raWxsZWQpCisJCXJlcXVpcmVfd29ya190cmVlID0gMTsKKwlpZiAoc2hvd191bm1lcmdlZCkKKwkJLyoKKwkJICogVGhlcmUncyBubyBwb2ludCBpbiBzaG93aW5nIHVubWVyZ2VkIHVubGVzcworCQkgKiB5b3UgYWxzbyBzaG93IHRoZSBzdGFnZSBpbmZvcm1hdGlvbi4KKwkJICovCisJCXNob3dfc3RhZ2UgPSAxOworCWlmIChkaXIuZXhjbHVkZV9wZXJfZGlyKQorCQlleGNfZ2l2ZW4gPSAxOworCisJaWYgKHJlcXVpcmVfd29ya190cmVlICYmICFpc19pbnNpZGVfd29ya190cmVlKCkpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyAmJgorCSAgICAoc2hvd19zdGFnZSB8fCBzaG93X2RlbGV0ZWQgfHwgc2hvd19vdGhlcnMgfHwgc2hvd191bm1lcmdlZCB8fAorCSAgICAgc2hvd19raWxsZWQgfHwgc2hvd19tb2RpZmllZCB8fCBzaG93X3Jlc29sdmVfdW5kbyB8fCB3aXRoX3RyZWUpKQorCQlkaWUoImxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHVuc3VwcG9ydGVkIG1vZGUiKTsKKworCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgJiYgZXJyb3JfdW5tYXRjaCkKKwkJZGllKCJscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyBkb2VzIG5vdCBzdXBwb3J0ICIKKwkJICAgICItLWVycm9yLXVubWF0Y2giKTsKKworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QsCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJLyoKKwkgKiBGaW5kIGNvbW1vbiBwcmVmaXggZm9yIGFsbCBwYXRoc3BlYydzCisJICogVGhpcyBpcyB1c2VkIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdoaWNoIHVuZm9ydHVuYXRlbHkgY2Fubm90CisJICogYmUgZG9uZSB3aGVuIHJlY3Vyc2luZyBpbnRvIHN1Ym1vZHVsZXMgYmVjYXVzZSB3aGVuIGEgcGF0aHNwZWMgaXMKKwkgKiBnaXZlbiB3aGljaCBzcGFucyByZXBvc2l0b3J5IGJvdW5kYXJpZXMgeW91IGNhbid0IHNpbXBseSByZW1vdmUgdGhlCisJICogc3VibW9kdWxlIGVudHJ5IGJlY2F1c2UgdGhlIHBhdGhzcGVjIG1heSBtYXRjaCBzb21ldGhpbmcgaW5zaWRlIHRoZQorCSAqIHN1Ym1vZHVsZS4KKwkgKi8KKwlpZiAocmVjdXJzZV9zdWJtb2R1bGVzKQorCQltYXhfcHJlZml4ID0gTlVMTDsKKwllbHNlCisJCW1heF9wcmVmaXggPSBjb21tb25fcHJlZml4KCZwYXRoc3BlYyk7CisJbWF4X3ByZWZpeF9sZW4gPSBnZXRfY29tbW9uX3ByZWZpeF9sZW4obWF4X3ByZWZpeCk7CisKKwlwcnVuZV9pbmRleCh0aGVfcmVwb3NpdG9yeS0+aW5kZXgsIG1heF9wcmVmaXgsIG1heF9wcmVmaXhfbGVuKTsKKworCS8qIFRyZWF0IHVubWF0Y2hpbmcgcGF0aHNwZWMgZWxlbWVudHMgYXMgZXJyb3JzICovCisJaWYgKHBhdGhzcGVjLm5yICYmIGVycm9yX3VubWF0Y2gpCisJCXBzX21hdGNoZWQgPSB4Y2FsbG9jKHBhdGhzcGVjLm5yLCAxKTsKKworCWlmICgoZGlyLmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkgJiYgIWV4Y19naXZlbikKKwkJZGllKCJscy1maWxlcyAtLWlnbm9yZWQgbmVlZHMgc29tZSBleGNsdWRlIHBhdHRlcm4iKTsKKworCS8qIFdpdGggbm8gZmxhZ3MsIHdlIGRlZmF1bHQgdG8gc2hvd2luZyB0aGUgY2FjaGVkIGZpbGVzICovCisJaWYgKCEoc2hvd19zdGFnZSB8fCBzaG93X2RlbGV0ZWQgfHwgc2hvd19vdGhlcnMgfHwgc2hvd191bm1lcmdlZCB8fAorCSAgICAgIHNob3dfa2lsbGVkIHx8IHNob3dfbW9kaWZpZWQgfHwgc2hvd19yZXNvbHZlX3VuZG8pKQorCQlzaG93X2NhY2hlZCA9IDE7CisKKwlpZiAod2l0aF90cmVlKSB7CisJCS8qCisJCSAqIEJhc2ljIHNhbml0eSBjaGVjazsgc2hvdy1zdGFnZXMgYW5kIHNob3ctdW5tZXJnZWQKKwkJICogd291bGQgbm90IG1ha2UgYW55IHNlbnNlIHdpdGggdGhpcyBvcHRpb24uCisJCSAqLworCQlpZiAoc2hvd19zdGFnZSB8fCBzaG93X3VubWVyZ2VkKQorCQkJZGllKCJscy1maWxlcyAtLXdpdGgtdHJlZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtcyBvciAtdSIpOworCQlvdmVybGF5X3RyZWVfb25faW5kZXgodGhlX3JlcG9zaXRvcnktPmluZGV4LCB3aXRoX3RyZWUsIG1heF9wcmVmaXgpOworCX0KKworCXNob3dfZmlsZXModGhlX3JlcG9zaXRvcnksICZkaXIpOworCisJaWYgKHNob3dfcmVzb2x2ZV91bmRvKQorCQlzaG93X3J1X2luZm8odGhlX3JlcG9zaXRvcnktPmluZGV4KTsKKworCWlmIChwc19tYXRjaGVkKSB7CisJCWludCBiYWQ7CisJCWJhZCA9IHJlcG9ydF9wYXRoX2Vycm9yKHBzX21hdGNoZWQsICZwYXRoc3BlYyk7CisJCWlmIChiYWQpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz9cbiIpOworCisJCXJldHVybiBiYWQgPyAxIDogMDsKKwl9CisKKwlVTkxFQUsoZGlyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbHMtcmVtb3RlLmMgYi9idWlsdGluL2xzLXJlbW90ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZjUxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xzLXJlbW90ZS5jCkBAIC0wLDAgKzEsMTUyIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicmVmLWZpbHRlci5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsc19yZW1vdGVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorCSAgICIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisJICAgIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXV0iKSwKKwlOVUxMCit9OworCisvKgorICogSXMgdGhlcmUgb25lIGFtb25nIHRoZSBsaXN0IG9mIHBhdHRlcm5zIHRoYXQgbWF0Y2ggdGhlIHRhaWwgcGFydAorICogb2YgdGhlIHBhdGg/CisgKi8KK3N0YXRpYyBpbnQgdGFpbF9tYXRjaChjb25zdCBjaGFyICoqcGF0dGVybiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICpwOworCWNoYXIgKnBhdGhidWY7CisKKwlpZiAoIXBhdHRlcm4pCisJCXJldHVybiAxOyAvKiBubyByZXN0cmljdGlvbiAqLworCisJcGF0aGJ1ZiA9IHhzdHJmbXQoIi8lcyIsIHBhdGgpOworCXdoaWxlICgocCA9ICoocGF0dGVybisrKSkgIT0gTlVMTCkgeworCQlpZiAoIXdpbGRtYXRjaChwLCBwYXRoYnVmLCAwKSkgeworCQkJZnJlZShwYXRoYnVmKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCWZyZWUocGF0aGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbHNfcmVtb3RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKmRlc3QgPSBOVUxMOworCXVuc2lnbmVkIGZsYWdzID0gMDsKKwlpbnQgZ2V0X3VybCA9IDA7CisJaW50IHF1aWV0ID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgc2hvd19zeW1yZWZfdGFyZ2V0ID0gMDsKKwljb25zdCBjaGFyICp1cGxvYWRwYWNrID0gTlVMTDsKKwljb25zdCBjaGFyICoqcGF0dGVybiA9IE5VTEw7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcmVmX3ByZWZpeGVzID0gQVJHVl9BUlJBWV9JTklUOworCWludCBpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzZXJ2ZXJfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHJlZl9hcnJheSByZWZfYXJyYXk7CisJc3RhdGljIHN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZyA9IE5VTEwsICoqc29ydGluZ190YWlsID0gJnNvcnRpbmc7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIpKSwKKwkJT1BUX1NUUklORygwLCAidXBsb2FkLXBhY2siLCAmdXBsb2FkcGFjaywgTl8oImV4ZWMiKSwKKwkJCSAgIE5fKCJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiKSksCisJCXsgT1BUSU9OX1NUUklORywgMCwgImV4ZWMiLCAmdXBsb2FkcGFjaywgTl8oImV4ZWMiKSwKKwkJCSAgIE5fKCJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiKSwKKwkJCSAgIFBBUlNFX09QVF9ISURERU4gfSwKKwkJT1BUX0JJVCgndCcsICJ0YWdzIiwgJmZsYWdzLCBOXygibGltaXQgdG8gdGFncyIpLCBSRUZfVEFHUyksCisJCU9QVF9CSVQoJ2gnLCAiaGVhZHMiLCAmZmxhZ3MsIE5fKCJsaW1pdCB0byBoZWFkcyIpLCBSRUZfSEVBRFMpLAorCQlPUFRfQklUKDAsICJyZWZzIiwgJmZsYWdzLCBOXygiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiKSwgUkVGX05PUk1BTCksCisJCU9QVF9CT09MKDAsICJnZXQtdXJsIiwgJmdldF91cmwsCisJCQkgTl8oInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IikpLAorCQlPUFRfUkVGX1NPUlQoc29ydGluZ190YWlsKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAiZXhpdC1jb2RlIiwgJnN0YXR1cywKKwkJCSAgICAgIE5fKCJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiKSwKKwkJCSAgICAgIDIsIFBBUlNFX09QVF9OT0NPTVBMRVRFKSwKKwkJT1BUX0JPT0woMCwgInN5bXJlZiIsICZzaG93X3N5bXJlZl90YXJnZXQsCisJCQkgTl8oInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IikpLAorCQlPUFRfU1RSSU5HX0xJU1QoJ28nLCAic2VydmVyLW9wdGlvbiIsICZzZXJ2ZXJfb3B0aW9ucywgTl8oInNlcnZlci1zcGVjaWZpYyIpLCBOXygib3B0aW9uIHRvIHRyYW5zbWl0IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJbWVtc2V0KCZyZWZfYXJyYXksIDAsIHNpemVvZihyZWZfYXJyYXkpKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbHNfcmVtb3RlX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlkZXN0ID0gYXJndlswXTsKKworCWlmIChhcmdjID4gMSkgeworCQlpbnQgaTsKKwkJcGF0dGVybiA9IHhjYWxsb2MoYXJnYywgc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCQlwYXR0ZXJuW2kgLSAxXSA9IHhzdHJmbXQoIiovJXMiLCBhcmd2W2ldKTsKKwkJfQorCX0KKworCWlmIChmbGFncyAmIFJFRl9UQUdTKQorCQlhcmd2X2FycmF5X3B1c2goJnJlZl9wcmVmaXhlcywgInJlZnMvdGFncy8iKTsKKwlpZiAoZmxhZ3MgJiBSRUZfSEVBRFMpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmVmX3ByZWZpeGVzLCAicmVmcy9oZWFkcy8iKTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQoZGVzdCk7CisJaWYgKCFyZW1vdGUpIHsKKwkJaWYgKGRlc3QpCisJCQlkaWUoImJhZCByZXBvc2l0b3J5ICclcyciLCBkZXN0KTsKKwkJZGllKCJObyByZW1vdGUgY29uZmlndXJlZCB0byBsaXN0IHJlZnMgZnJvbS4iKTsKKwl9CisJaWYgKCFyZW1vdGUtPnVybF9ucikKKwkJZGllKCJyZW1vdGUgJXMgaGFzIG5vIGNvbmZpZ3VyZWQgVVJMIiwgZGVzdCk7CisKKwlpZiAoZ2V0X3VybCkgeworCQlwcmludGYoIiVzXG4iLCAqcmVtb3RlLT51cmwpOworCQlVTkxFQUsoc29ydGluZyk7CisJCXJldHVybiAwOworCX0KKworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCBOVUxMKTsKKwlpZiAodXBsb2FkcGFjayAhPSBOVUxMKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9VUExPQURQQUNLLCB1cGxvYWRwYWNrKTsKKwlpZiAoc2VydmVyX29wdGlvbnMubnIpCisJCXRyYW5zcG9ydC0+c2VydmVyX29wdGlvbnMgPSAmc2VydmVyX29wdGlvbnM7CisKKwlyZWYgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCwgJnJlZl9wcmVmaXhlcyk7CisJaWYgKHRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCkpIHsKKwkJVU5MRUFLKHNvcnRpbmcpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIWRlc3QgJiYgIXF1aWV0KQorCQlmcHJpbnRmKHN0ZGVyciwgIkZyb20gJXNcbiIsICpyZW1vdGUtPnVybCk7CisJZm9yICggOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKml0ZW07CisJCWlmICghY2hlY2tfcmVmX3R5cGUocmVmLCBmbGFncykpCisJCQljb250aW51ZTsKKwkJaWYgKCF0YWlsX21hdGNoKHBhdHRlcm4sIHJlZi0+bmFtZSkpCisJCQljb250aW51ZTsKKwkJaXRlbSA9IHJlZl9hcnJheV9wdXNoKCZyZWZfYXJyYXksIHJlZi0+bmFtZSwgJnJlZi0+b2xkX29pZCk7CisJCWl0ZW0tPnN5bXJlZiA9IHhzdHJkdXBfb3JfbnVsbChyZWYtPnN5bXJlZik7CisJfQorCisJaWYgKHNvcnRpbmcpCisJCXJlZl9hcnJheV9zb3J0KHNvcnRpbmcsICZyZWZfYXJyYXkpOworCisJZm9yIChpID0gMDsgaSA8IHJlZl9hcnJheS5ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCByZWZfYXJyYXlfaXRlbSAqcmVmID0gcmVmX2FycmF5Lml0ZW1zW2ldOworCQlpZiAoc2hvd19zeW1yZWZfdGFyZ2V0ICYmIHJlZi0+c3ltcmVmKQorCQkJcHJpbnRmKCJyZWY6ICVzXHQlc1xuIiwgcmVmLT5zeW1yZWYsIHJlZi0+cmVmbmFtZSk7CisJCXByaW50ZigiJXNcdCVzXG4iLCBvaWRfdG9faGV4KCZyZWYtPm9iamVjdG5hbWUpLCByZWYtPnJlZm5hbWUpOworCQlzdGF0dXMgPSAwOyAvKiB3ZSBmb3VuZCBzb21ldGhpbmcgKi8KKwl9CisKKwlVTkxFQUsoc29ydGluZyk7CisJcmVmX2FycmF5X2NsZWFyKCZyZWZfYXJyYXkpOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2xzLXRyZWUuYyBiL2J1aWx0aW4vbHMtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYWQzZjIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xzLXRyZWUuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKworc3RhdGljIGludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKyNkZWZpbmUgTFNfUkVDVVJTSVZFIDEKKyNkZWZpbmUgTFNfVFJFRV9PTkxZIDIKKyNkZWZpbmUgTFNfU0hPV19UUkVFUyA0CisjZGVmaW5lIExTX05BTUVfT05MWSA4CisjZGVmaW5lIExTX1NIT1dfU0laRSAxNgorc3RhdGljIGludCBhYmJyZXY7CitzdGF0aWMgaW50IGxzX29wdGlvbnM7CitzdGF0aWMgc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworc3RhdGljIGludCBjaG9tcF9wcmVmaXg7CitzdGF0aWMgY29uc3QgY2hhciAqbHNfdHJlZV9wcmVmaXg7CisKK3N0YXRpYyBjb25zdCAgY2hhciAqIGNvbnN0IGxzX3RyZWVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgc2hvd19yZWN1cnNpdmUoY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCWludCBpOworCisJaWYgKGxzX29wdGlvbnMgJiBMU19SRUNVUlNJVkUpCisJCXJldHVybiAxOworCisJaWYgKCFwYXRoc3BlYy5ucikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMubnI7IGkrKykgeworCQljb25zdCBjaGFyICpzcGVjID0gcGF0aHNwZWMuaXRlbXNbaV0ubWF0Y2g7CisJCWludCBsZW4sIHNwZWNsZW47CisKKwkJaWYgKHN0cm5jbXAoYmFzZSwgc3BlYywgYmFzZWxlbikpCisJCQljb250aW51ZTsKKwkJbGVuID0gc3RybGVuKHBhdGhuYW1lKTsKKwkJc3BlYyArPSBiYXNlbGVuOworCQlzcGVjbGVuID0gc3RybGVuKHNwZWMpOworCQlpZiAoc3BlY2xlbiA8PSBsZW4pCisJCQljb250aW51ZTsKKwkJaWYgKHNwZWNbbGVuXSAmJiBzcGVjW2xlbl0gIT0gJy8nKQorCQkJY29udGludWU7CisJCWlmIChtZW1jbXAocGF0aG5hbWUsIHNwZWMsIGxlbikpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfdHJlZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGJhc2VsZW47CisJY29uc3QgY2hhciAqdHlwZSA9IGJsb2JfdHlwZTsKKworCWlmIChTX0lTR0lUTElOSyhtb2RlKSkgeworCQkvKgorCQkgKiBNYXliZSB3ZSB3YW50IHRvIGhhdmUgc29tZSByZWN1cnNpdmUgdmVyc2lvbiBoZXJlPworCQkgKgorCQkgKiBTb21ldGhpbmcgc2ltaWxhciB0byB0aGlzIGluY29tcGxldGUgZXhhbXBsZToKKwkJICoKKwkJaWYgKHNob3dfc3VicHJvamVjdHMoYmFzZSwgYmFzZWxlbiwgcGF0aG5hbWUpKQorCQkJcmV0dmFsID0gUkVBRF9UUkVFX1JFQ1VSU0lWRTsKKwkJICoKKwkJICovCisJCXR5cGUgPSBjb21taXRfdHlwZTsKKwl9IGVsc2UgaWYgKFNfSVNESVIobW9kZSkpIHsKKwkJaWYgKHNob3dfcmVjdXJzaXZlKGJhc2UtPmJ1ZiwgYmFzZS0+bGVuLCBwYXRobmFtZSkpIHsKKwkJCXJldHZhbCA9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJCQlpZiAoIShsc19vcHRpb25zICYgTFNfU0hPV19UUkVFUykpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQl0eXBlID0gdHJlZV90eXBlOworCX0KKwllbHNlIGlmIChsc19vcHRpb25zICYgTFNfVFJFRV9PTkxZKQorCQlyZXR1cm4gMDsKKworCWlmICghKGxzX29wdGlvbnMgJiBMU19OQU1FX09OTFkpKSB7CisJCWlmIChsc19vcHRpb25zICYgTFNfU0hPV19TSVpFKSB7CisJCQljaGFyIHNpemVfdGV4dFsyNF07CisJCQlpZiAoIXN0cmNtcCh0eXBlLCBibG9iX3R5cGUpKSB7CisJCQkJdW5zaWduZWQgbG9uZyBzaXplOworCQkJCWlmIChvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9pZCwgJnNpemUpID09IE9CSl9CQUQpCisJCQkJCXhzbnByaW50ZihzaXplX3RleHQsIHNpemVvZihzaXplX3RleHQpLAorCQkJCQkJICAiQkFEIik7CisJCQkJZWxzZQorCQkJCQl4c25wcmludGYoc2l6ZV90ZXh0LCBzaXplb2Yoc2l6ZV90ZXh0KSwKKwkJCQkJCSAgIiUiUFJJdU1BWCwgKHVpbnRtYXhfdClzaXplKTsKKwkJCX0gZWxzZQorCQkJCXhzbnByaW50ZihzaXplX3RleHQsIHNpemVvZihzaXplX3RleHQpLCAiLSIpOworCQkJcHJpbnRmKCIlMDZvICVzICVzICU3c1x0IiwgbW9kZSwgdHlwZSwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYob2lkLCBhYmJyZXYpLAorCQkJICAgICAgIHNpemVfdGV4dCk7CisJCX0gZWxzZQorCQkJcHJpbnRmKCIlMDZvICVzICVzXHQiLCBtb2RlLCB0eXBlLAorCQkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIGFiYnJldikpOworCX0KKwliYXNlbGVuID0gYmFzZS0+bGVuOworCXN0cmJ1Zl9hZGRzdHIoYmFzZSwgcGF0aG5hbWUpOworCXdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKGJhc2UtPmJ1ZiwKKwkJCQkgICBjaG9tcF9wcmVmaXggPyBsc190cmVlX3ByZWZpeCA6IE5VTEwsCisJCQkJICAgc3Rkb3V0LCBsaW5lX3Rlcm1pbmF0aW9uKTsKKwlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2VsZW4pOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBjbWRfbHNfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlpbnQgaSwgZnVsbF90cmVlID0gMDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGxzX3RyZWVfb3B0aW9uc1tdID0geworCQlPUFRfQklUKCdkJywgTlVMTCwgJmxzX29wdGlvbnMsIE5fKCJvbmx5IHNob3cgdHJlZXMiKSwKKwkJCUxTX1RSRUVfT05MWSksCisJCU9QVF9CSVQoJ3InLCBOVUxMLCAmbHNfb3B0aW9ucywgTl8oInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIpLAorCQkJTFNfUkVDVVJTSVZFKSwKKwkJT1BUX0JJVCgndCcsIE5VTEwsICZsc19vcHRpb25zLCBOXygic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIpLAorCQkJTFNfU0hPV19UUkVFUyksCisJCU9QVF9TRVRfSU5UKCd6JywgTlVMTCwgJmxpbmVfdGVybWluYXRpb24sCisJCQkgICAgTl8oInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiKSwgMCksCisJCU9QVF9CSVQoJ2wnLCAibG9uZyIsICZsc19vcHRpb25zLCBOXygiaW5jbHVkZSBvYmplY3Qgc2l6ZSIpLAorCQkJTFNfU0hPV19TSVpFKSwKKwkJT1BUX0JJVCgwLCAibmFtZS1vbmx5IiwgJmxzX29wdGlvbnMsIE5fKCJsaXN0IG9ubHkgZmlsZW5hbWVzIiksCisJCQlMU19OQU1FX09OTFkpLAorCQlPUFRfQklUKDAsICJuYW1lLXN0YXR1cyIsICZsc19vcHRpb25zLCBOXygibGlzdCBvbmx5IGZpbGVuYW1lcyIpLAorCQkJTFNfTkFNRV9PTkxZKSwKKwkJT1BUX1NFVF9JTlQoMCwgImZ1bGwtbmFtZSIsICZjaG9tcF9wcmVmaXgsCisJCQkgICAgTl8oInVzZSBmdWxsIHBhdGggbmFtZXMiKSwgMCksCisJCU9QVF9CT09MKDAsICJmdWxsLXRyZWUiLCAmZnVsbF90cmVlLAorCQkJIE5fKCJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAiCisJCQkgICAgIihpbXBsaWVzIC0tZnVsbC1uYW1lKSIpKSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJbHNfdHJlZV9wcmVmaXggPSBwcmVmaXg7CisJaWYgKHByZWZpeCAmJiAqcHJlZml4KQorCQljaG9tcF9wcmVmaXggPSBzdHJsZW4ocHJlZml4KTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbHNfdHJlZV9vcHRpb25zLAorCQkJICAgICBsc190cmVlX3VzYWdlLCAwKTsKKwlpZiAoZnVsbF90cmVlKSB7CisJCWxzX3RyZWVfcHJlZml4ID0gcHJlZml4ID0gTlVMTDsKKwkJY2hvbXBfcHJlZml4ID0gMDsKKwl9CisJLyogLWQgLXIgc2hvdWxkIGltcGx5IC10LCBidXQgLWQgYnkgaXRzZWxmIHNob3VsZCBub3QgaGF2ZSB0by4gKi8KKwlpZiAoIChMU19UUkVFX09OTFl8TFNfUkVDVVJTSVZFKSA9PQorCSAgICAoKExTX1RSRUVfT05MWXxMU19SRUNVUlNJVkUpICYgbHNfb3B0aW9ucykpCisJCWxzX29wdGlvbnMgfD0gTFNfU0hPV19UUkVFUzsKKworCWlmIChhcmdjIDwgMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxzX3RyZWVfdXNhZ2UsIGxzX3RyZWVfb3B0aW9ucyk7CisJaWYgKGdldF9vaWQoYXJndlswXSwgJm9pZCkpCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzBdKTsKKworCS8qCisJICogc2hvd19yZWN1cnNpdmUoKSByb2xscyBpdHMgb3duIG1hdGNoaW5nIGNvZGUgYW5kIGlzCisJICogZ2VuZXJhbGx5IGlnbm9yYW50IG9mICdzdHJ1Y3QgcGF0aHNwZWMnLiBUaGUgbWFnaWMgbWFzaworCSAqIGNhbm5vdCBiZSBsaWZ0ZWQgdW50aWwgaXQgaXMgY29udmVydGVkIHRvIHVzZQorCSAqIG1hdGNoX3BhdGhzcGVjKCkgb3IgdHJlZV9lbnRyeV9pbnRlcmVzdGluZygpCisJICovCisJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCBQQVRIU1BFQ19BTExfTUFHSUMgJgorCQkJCSAgfihQQVRIU1BFQ19GUk9NVE9QIHwgUEFUSFNQRUNfTElURVJBTCksCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dELAorCQkgICAgICAgcHJlZml4LCBhcmd2ICsgMSk7CisJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLm5yOyBpKyspCisJCXBhdGhzcGVjLml0ZW1zW2ldLm5vd2lsZGNhcmRfbGVuID0gcGF0aHNwZWMuaXRlbXNbaV0ubGVuOworCXBhdGhzcGVjLmhhc193aWxkY2FyZCA9IDA7CisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJm9pZCk7CisJaWYgKCF0cmVlKQorCQlkaWUoIm5vdCBhIHRyZWUgb2JqZWN0Iik7CisJcmV0dXJuICEhcmVhZF90cmVlX3JlY3Vyc2l2ZSh0aGVfcmVwb3NpdG9yeSwgdHJlZSwgIiIsIDAsIDAsCisJCQkJICAgICAmcGF0aHNwZWMsIHNob3dfdHJlZSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21haWxpbmZvLmMgYi9idWlsdGluL21haWxpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiNjY3YQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWFpbGluZm8uYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogQW5vdGhlciBzdHVwaWQgcHJvZ3JhbSwgdGhpcyBvbmUgcGFyc2luZyB0aGUgaGVhZGVycyBvZiBhbgorICogZW1haWwgdG8gZmlndXJlIG91dCBhdXRob3JzaGlwIGFuZCBzdWJqZWN0CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibWFpbGluZm8uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgbWFpbGluZm9fdXNhZ2VbXSA9CisJImdpdCBtYWlsaW5mbyBbLWsgfCAtYl0gWy1tIHwgLS1tZXNzYWdlLWlkXSBbLXUgfCAtLWVuY29kaW5nPTxlbmNvZGluZz4gfCAtbl0gWy0tc2Npc3NvcnMgfCAtLW5vLXNjaXNzb3JzXSA8bXNnPiA8cGF0Y2g+IDwgbWFpbCA+aW5mbyI7CisKK2ludCBjbWRfbWFpbGluZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqZGVmX2NoYXJzZXQ7CisJc3RydWN0IG1haWxpbmZvIG1pOworCWludCBzdGF0dXM7CisJY2hhciAqbXNnZmlsZSwgKnBhdGNoZmlsZTsKKworCXNldHVwX21haWxpbmZvKCZtaSk7CisKKwlkZWZfY2hhcnNldCA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJbWkubWV0YWluZm9fY2hhcnNldCA9IGRlZl9jaGFyc2V0OworCisJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItayIpKQorCQkJbWkua2VlcF9zdWJqZWN0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLWIiKSkKKwkJCW1pLmtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3QgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItbSIpIHx8ICFzdHJjbXAoYXJndlsxXSwgIi0tbWVzc2FnZS1pZCIpKQorCQkJbWkuYWRkX21lc3NhZ2VfaWQgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItdSIpKQorCQkJbWkubWV0YWluZm9fY2hhcnNldCA9IGRlZl9jaGFyc2V0OworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItbiIpKQorCQkJbWkubWV0YWluZm9fY2hhcnNldCA9IE5VTEw7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZ3ZbMV0sICItLWVuY29kaW5nPSIpKQorCQkJbWkubWV0YWluZm9fY2hhcnNldCA9IGFyZ3ZbMV0gKyAxMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1zY2lzc29ycyIpKQorCQkJbWkudXNlX3NjaXNzb3JzID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1zY2lzc29ycyIpKQorCQkJbWkudXNlX3NjaXNzb3JzID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1pbmJvZHktaGVhZGVycyIpKQorCQkJbWkudXNlX2luYm9keV9oZWFkZXJzID0gMDsKKwkJZWxzZQorCQkJdXNhZ2UobWFpbGluZm9fdXNhZ2UpOworCQlhcmdjLS07IGFyZ3YrKzsKKwl9CisKKwlpZiAoYXJnYyAhPSAzKQorCQl1c2FnZShtYWlsaW5mb191c2FnZSk7CisKKwltaS5pbnB1dCA9IHN0ZGluOworCW1pLm91dHB1dCA9IHN0ZG91dDsKKworCW1zZ2ZpbGUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmd2WzFdKTsKKwlwYXRjaGZpbGUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmd2WzJdKTsKKworCXN0YXR1cyA9ICEhbWFpbGluZm8oJm1pLCBtc2dmaWxlLCBwYXRjaGZpbGUpOworCWNsZWFyX21haWxpbmZvKCZtaSk7CisKKwlmcmVlKG1zZ2ZpbGUpOworCWZyZWUocGF0Y2hmaWxlKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tYWlsc3BsaXQuYyBiL2J1aWx0aW4vbWFpbHNwbGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0NDAwYgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWFpbHNwbGl0LmMKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBUb3RhbGx5IGJyYWluZGFtYWdlZCBtYm94IHNwbGl0dGVyIHByb2dyYW0uCisgKgorICogSXQganVzdCBzcGxpdHMgYSBtYm94IGludG8gYSBsaXN0IG9mIGZpbGVzOiAiMDAwMSIgIjAwMDIiIC4uCisgKiBzbyB5b3UgY2FuIHByb2Nlc3MgdGhlbSBmdXJ0aGVyIGZyb20gdGhlcmUuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdGF0aWMgY29uc3QgY2hhciBnaXRfbWFpbHNwbGl0X3VzYWdlW10gPQorImdpdCBtYWlsc3BsaXQgWy1kPHByZWM+XSBbLWY8bj5dIFstYl0gWy0ta2VlcC1jcl0gLW88ZGlyZWN0b3J5PiBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXSI7CisKK3N0YXRpYyBpbnQgaXNfZnJvbV9saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqY29sb247CisKKwlpZiAobGVuIDwgMjAgfHwgbWVtY21wKCJGcm9tICIsIGxpbmUsIDUpKQorCQlyZXR1cm4gMDsKKworCWNvbG9uID0gbGluZSArIGxlbiAtIDI7CisJbGluZSArPSA1OworCWZvciAoOzspIHsKKwkJaWYgKGNvbG9uIDwgbGluZSkKKwkJCXJldHVybiAwOworCQlpZiAoKi0tY29sb24gPT0gJzonKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFpc2RpZ2l0KGNvbG9uWy00XSkgfHwKKwkgICAgIWlzZGlnaXQoY29sb25bLTJdKSB8fAorCSAgICAhaXNkaWdpdChjb2xvblstMV0pIHx8CisJICAgICFpc2RpZ2l0KGNvbG9uWyAxXSkgfHwKKwkgICAgIWlzZGlnaXQoY29sb25bIDJdKSkKKwkJcmV0dXJuIDA7CisKKwkvKiB5ZWFyICovCisJaWYgKHN0cnRvbChjb2xvbiszLCBOVUxMLCAxMCkgPD0gOTApCisJCXJldHVybiAwOworCisJLyogT2ssIGNsb3NlIGVub3VnaCAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBpbnQga2VlcF9jcjsKK3N0YXRpYyBpbnQgbWJveHJkOworCitzdGF0aWMgaW50IGlzX2d0ZnJvbShjb25zdCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc2l6ZV90IG1pbiA9IHN0cmxlbigiPkZyb20gIik7CisJc2l6ZV90IG5ndDsKKworCWlmIChidWYtPmxlbiA8IG1pbikKKwkJcmV0dXJuIDA7CisKKwluZ3QgPSBzdHJzcG4oYnVmLT5idWYsICI+Iik7CisJcmV0dXJuIG5ndCAmJiBzdGFydHNfd2l0aChidWYtPmJ1ZiArIG5ndCwgIkZyb20gIik7Cit9CisKKy8qIENhbGxlZCB3aXRoIHRoZSBmaXJzdCBsaW5lIChwb3RlbnRpYWxseSBwYXJ0aWFsKQorICogYWxyZWFkeSBpbiBidWZbXSAtLSBub3JtYWxseSB0aGF0IHNob3VsZCBiZWdpbiB3aXRoCisgKiB0aGUgVW5peCAiRnJvbSAiIGxpbmUuICBXcml0ZSBpdCBpbnRvIHRoZSBzcGVjaWZpZWQKKyAqIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQgc3BsaXRfb25lKEZJTEUgKm1ib3gsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBhbGxvd19iYXJlKQoreworCUZJTEUgKm91dHB1dDsKKwlpbnQgZmQ7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IGlzX2JhcmUgPSAhaXNfZnJvbV9saW5lKGJ1Zi5idWYsIGJ1Zi5sZW4pOworCisJaWYgKGlzX2JhcmUgJiYgIWFsbG93X2JhcmUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJjb3JydXB0IG1haWxib3hcbiIpOworCQlleGl0KDEpOworCX0KKwlmZCA9IG9wZW4obmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIG91dHB1dCBmaWxlICclcyciLCBuYW1lKTsKKwlvdXRwdXQgPSB4ZmRvcGVuKGZkLCAidyIpOworCisJLyogQ29weSBpdCBvdXQsIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGgKKwkgKiAiRnJvbSAiIGFuZCBoYXZpbmcgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIGRhdGUgZm9ybWF0LgorCSAqLworCWZvciAoOzspIHsKKwkJaWYgKCFrZWVwX2NyICYmIGJ1Zi5sZW4gPiAxICYmIGJ1Zi5idWZbYnVmLmxlbi0xXSA9PSAnXG4nICYmCisJCQlidWYuYnVmW2J1Zi5sZW4tMl0gPT0gJ1xyJykgeworCQkJc3RyYnVmX3NldGxlbigmYnVmLCBidWYubGVuLTIpOworCQkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCQl9CisKKwkJaWYgKG1ib3hyZCAmJiBpc19ndGZyb20oJmJ1ZikpCisJCQlzdHJidWZfcmVtb3ZlKCZidWYsIDAsIDEpOworCisJCWlmIChmd3JpdGUoYnVmLmJ1ZiwgMSwgYnVmLmxlbiwgb3V0cHV0KSAhPSBidWYubGVuKQorCQkJZGllX2Vycm5vKCJjYW5ub3Qgd3JpdGUgb3V0cHV0Iik7CisKKwkJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgbWJveCwgJ1xuJykpIHsKKwkJCWlmIChmZW9mKG1ib3gpKSB7CisJCQkJc3RhdHVzID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgbWJveCIpOworCQl9CisJCWlmICghaXNfYmFyZSAmJiBpc19mcm9tX2xpbmUoYnVmLmJ1ZiwgYnVmLmxlbikpCisJCQlicmVhazsgLyogZG9uZSB3aXRoIG9uZSBtZXNzYWdlICovCisJfQorCWZjbG9zZShvdXRwdXQpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcG9wdWxhdGVfbWFpbGRpcl9saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZW50OworCWNoYXIgKm5hbWUgPSBOVUxMOworCWNoYXIgKnN1YnNbXSA9IHsgImN1ciIsICJuZXciLCBOVUxMIH07CisJY2hhciAqKnN1YjsKKwlpbnQgcmV0ID0gLTE7CisKKwlmb3IgKHN1YiA9IHN1YnM7ICpzdWI7ICsrc3ViKSB7CisJCWZyZWUobmFtZSk7CisJCW5hbWUgPSB4c3RyZm10KCIlcy8lcyIsIHBhdGgsICpzdWIpOworCQlpZiAoKGRpciA9IG9wZW5kaXIobmFtZSkpID09IE5VTEwpIHsKKwkJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQkJY29udGludWU7CisJCQllcnJvcl9lcnJubygiY2Fubm90IG9wZW5kaXIgJXMiLCBuYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCQlpZiAoZGVudC0+ZF9uYW1lWzBdID09ICcuJykKKwkJCQljb250aW51ZTsKKwkJCWZyZWUobmFtZSk7CisJCQluYW1lID0geHN0cmZtdCgiJXMvJXMiLCAqc3ViLCBkZW50LT5kX25hbWUpOworCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGxpc3QsIG5hbWUpOworCQl9CisKKwkJY2xvc2VkaXIoZGlyKTsKKwl9CisKKwlyZXQgPSAwOworCitvdXQ6CisJZnJlZShuYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1haWxkaXJfZmlsZW5hbWVfY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJd2hpbGUgKCphICYmICpiKSB7CisJCWlmIChpc2RpZ2l0KCphKSAmJiBpc2RpZ2l0KCpiKSkgeworCQkJbG9uZyBpbnQgbmEsIG5iOworCQkJbmEgPSBzdHJ0b2woYSwgKGNoYXIgKiopJmEsIDEwKTsKKwkJCW5iID0gc3RydG9sKGIsIChjaGFyICoqKSZiLCAxMCk7CisJCQlpZiAobmEgIT0gbmIpCisJCQkJcmV0dXJuIG5hIC0gbmI7CisJCQkvKiBzdHJ0b2wgYWR2YW5jZWQgb3VyIHBvaW50ZXJzICovCisJCX0KKwkJZWxzZSB7CisJCQlpZiAoKmEgIT0gKmIpCisJCQkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSphIC0gKHVuc2lnbmVkIGNoYXIpKmI7CisJCQlhKys7CisJCQliKys7CisJCX0KKwl9CisJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSphIC0gKHVuc2lnbmVkIGNoYXIpKmI7Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfbWFpbGRpcihjb25zdCBjaGFyICptYWlsZGlyLCBjb25zdCBjaGFyICpkaXIsCisJaW50IG5yX3ByZWMsIGludCBza2lwKQoreworCWNoYXIgKmZpbGUgPSBOVUxMOworCUZJTEUgKmYgPSBOVUxMOworCWludCByZXQgPSAtMTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJbGlzdC5jbXAgPSBtYWlsZGlyX2ZpbGVuYW1lX2NtcDsKKworCWlmIChwb3B1bGF0ZV9tYWlsZGlyX2xpc3QoJmxpc3QsIG1haWxkaXIpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKSB7CisJCWNoYXIgKm5hbWU7CisKKwkJZnJlZShmaWxlKTsKKwkJZmlsZSA9IHhzdHJmbXQoIiVzLyVzIiwgbWFpbGRpciwgbGlzdC5pdGVtc1tpXS5zdHJpbmcpOworCisJCWYgPSBmb3BlbihmaWxlLCAiciIpOworCQlpZiAoIWYpIHsKKwkJCWVycm9yX2Vycm5vKCJjYW5ub3Qgb3BlbiBtYWlsICVzIiwgZmlsZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIGYsICdcbicpKSB7CisJCQllcnJvcl9lcnJubygiY2Fubm90IHJlYWQgbWFpbCAlcyIsIGZpbGUpOworCQkJZ290byBvdXQ7CisJCX0KKworCQluYW1lID0geHN0cmZtdCgiJXMvJTAqZCIsIGRpciwgbnJfcHJlYywgKytza2lwKTsKKwkJc3BsaXRfb25lKGYsIG5hbWUsIDEpOworCQlmcmVlKG5hbWUpOworCisJCWZjbG9zZShmKTsKKwkJZiA9IE5VTEw7CisJfQorCisJcmV0ID0gc2tpcDsKK291dDoKKwlpZiAoZikKKwkJZmNsb3NlKGYpOworCWZyZWUoZmlsZSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfbWJveChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpkaXIsIGludCBhbGxvd19iYXJlLAorCQkgICAgICBpbnQgbnJfcHJlYywgaW50IHNraXApCit7CisJaW50IHJldCA9IC0xOworCWludCBwZWVrOworCisJRklMRSAqZiA9ICFzdHJjbXAoZmlsZSwgIi0iKSA/IHN0ZGluIDogZm9wZW4oZmlsZSwgInIiKTsKKwlpbnQgZmlsZV9kb25lID0gMDsKKworCWlmICghZikgeworCQllcnJvcl9lcnJubygiY2Fubm90IG9wZW4gbWJveCAlcyIsIGZpbGUpOworCQlnb3RvIG91dDsKKwl9CisKKwlkbyB7CisJCXBlZWsgPSBmZ2V0YyhmKTsKKwkJaWYgKHBlZWsgPT0gRU9GKSB7CisJCQlpZiAoZiA9PSBzdGRpbikKKwkJCQkvKiBlbXB0eSBzdGRpbiBpcyBPSyAqLworCQkJCXJldCA9IHNraXA7CisJCQllbHNlIHsKKwkJCQlmY2xvc2UoZik7CisJCQkJZXJyb3IoXygiZW1wdHkgbWJveDogJyVzJyIpLCBmaWxlKTsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJfSB3aGlsZSAoaXNzcGFjZShwZWVrKSk7CisJdW5nZXRjKHBlZWssIGYpOworCisJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgZiwgJ1xuJykpIHsKKwkJLyogZW1wdHkgc3RkaW4gaXMgT0sgKi8KKwkJaWYgKGYgIT0gc3RkaW4pIHsKKwkJCWVycm9yKCJjYW5ub3QgcmVhZCBtYm94ICVzIiwgZmlsZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlmaWxlX2RvbmUgPSAxOworCX0KKworCXdoaWxlICghZmlsZV9kb25lKSB7CisJCWNoYXIgKm5hbWUgPSB4c3RyZm10KCIlcy8lMCpkIiwgZGlyLCBucl9wcmVjLCArK3NraXApOworCQlmaWxlX2RvbmUgPSBzcGxpdF9vbmUoZiwgbmFtZSwgYWxsb3dfYmFyZSk7CisJCWZyZWUobmFtZSk7CisJfQorCisJaWYgKGYgIT0gc3RkaW4pCisJCWZjbG9zZShmKTsKKworCXJldCA9IHNraXA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9tYWlsc3BsaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5yID0gMCwgbnJfcHJlYyA9IDQsIG51bSA9IDA7CisJaW50IGFsbG93X2JhcmUgPSAwOworCWNvbnN0IGNoYXIgKmRpciA9IE5VTEw7CisJY29uc3QgY2hhciAqKmFyZ3A7CisJc3RhdGljIGNvbnN0IGNoYXIgKnN0ZGluX29ubHlbXSA9IHsgIi0iLCBOVUxMIH07CisKKwlmb3IgKGFyZ3AgPSBhcmd2KzE7ICphcmdwOyBhcmdwKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gKmFyZ3A7CisKKwkJaWYgKGFyZ1swXSAhPSAnLScpCisJCQlicmVhazsKKwkJLyogZG8gZmxhZ3MgaGVyZSAqLworCQlpZiAoIGFyZ1sxXSA9PSAnZCcgKSB7CisJCQlucl9wcmVjID0gc3RydG9sKGFyZysyLCBOVUxMLCAxMCk7CisJCQlpZiAobnJfcHJlYyA8IDMgfHwgMTAgPD0gbnJfcHJlYykKKwkJCQl1c2FnZShnaXRfbWFpbHNwbGl0X3VzYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJ2YnICkgeworCQkJbnIgPSBzdHJ0b2woYXJnKzIsIE5VTEwsIDEwKTsKKwkJfSBlbHNlIGlmICggYXJnWzFdID09ICdoJyApIHsKKwkJCXVzYWdlKGdpdF9tYWlsc3BsaXRfdXNhZ2UpOworCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJ2InICYmICFhcmdbMl0gKSB7CisJCQlhbGxvd19iYXJlID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0ta2VlcC1jciIpKSB7CisJCQlrZWVwX2NyID0gMTsKKwkJfSBlbHNlIGlmICggYXJnWzFdID09ICdvJyAmJiBhcmdbMl0gKSB7CisJCQlkaXIgPSBhcmcrMjsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbWJveHJkIikpIHsKKwkJCW1ib3hyZCA9IDE7CisJCX0gZWxzZSBpZiAoIGFyZ1sxXSA9PSAnLScgJiYgIWFyZ1syXSApIHsKKwkJCWFyZ3ArKzsJLyogLS0gbWFya3MgZW5kIG9mIG9wdGlvbnMgKi8KKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJZGllKCJ1bmtub3duIG9wdGlvbjogJXMiLCBhcmcpOworCQl9CisJfQorCisJaWYgKCAhZGlyICkgeworCQkvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogaWYgbm8gLW8gc3BlY2lmaWVkLCBhY2NlcHQKKwkJICAgPG1ib3g+IDxkaXI+IG9yIGp1c3QgPGRpcj4gKi8KKwkJc3dpdGNoIChhcmdjIC0gKGFyZ3AtYXJndikpIHsKKwkJY2FzZSAxOgorCQkJZGlyID0gYXJncFswXTsKKwkJCWFyZ3AgPSBzdGRpbl9vbmx5OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXN0ZGluX29ubHlbMF0gPSBhcmdwWzBdOworCQkJZGlyID0gYXJncFsxXTsKKwkJCWFyZ3AgPSBzdGRpbl9vbmx5OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZShnaXRfbWFpbHNwbGl0X3VzYWdlKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE5ldyB1c2FnZTogaWYgbm8gbW9yZSBhcmd1bWVudCwgcGFyc2Ugc3RkaW4gKi8KKwkJaWYgKCAhKmFyZ3AgKQorCQkJYXJncCA9IHN0ZGluX29ubHk7CisJfQorCisJd2hpbGUgKCphcmdwKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9ICphcmdwKys7CisJCXN0cnVjdCBzdGF0IGFyZ3N0YXQ7CisJCWludCByZXQgPSAwOworCisJCWlmIChhcmdbMF0gPT0gJy0nICYmIGFyZ1sxXSA9PSAwKSB7CisJCQlyZXQgPSBzcGxpdF9tYm94KGFyZywgZGlyLCBhbGxvd19iYXJlLCBucl9wcmVjLCBucik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWVycm9yKCJjYW5ub3Qgc3BsaXQgcGF0Y2hlcyBmcm9tIHN0ZGluIik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQludW0gKz0gKHJldCAtIG5yKTsKKwkJCW5yID0gcmV0OworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc3RhdChhcmcsICZhcmdzdGF0KSA9PSAtMSkgeworCQkJZXJyb3JfZXJybm8oImNhbm5vdCBzdGF0ICVzIiwgYXJnKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKFNfSVNESVIoYXJnc3RhdC5zdF9tb2RlKSkKKwkJCXJldCA9IHNwbGl0X21haWxkaXIoYXJnLCBkaXIsIG5yX3ByZWMsIG5yKTsKKwkJZWxzZQorCQkJcmV0ID0gc3BsaXRfbWJveChhcmcsIGRpciwgYWxsb3dfYmFyZSwgbnJfcHJlYywgbnIpOworCisJCWlmIChyZXQgPCAwKSB7CisJCQllcnJvcigiY2Fubm90IHNwbGl0IHBhdGNoZXMgZnJvbSAlcyIsIGFyZyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQludW0gKz0gKHJldCAtIG5yKTsKKwkJbnIgPSByZXQ7CisJfQorCisJcHJpbnRmKCIlZFxuIiwgbnVtKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1iYXNlLmMgYi9idWlsdGluL21lcmdlLWJhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2Y4ZGExCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tZXJnZS1iYXNlLmMKQEAgLTAsMCArMSwxOTggQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworc3RhdGljIGludCBzaG93X21lcmdlX2Jhc2Uoc3RydWN0IGNvbW1pdCAqKnJldiwgaW50IHJldl9uciwgaW50IHNob3dfYWxsKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0LCAqcjsKKworCXJlc3VsdCA9IGdldF9tZXJnZV9iYXNlc19tYW55X2RpcnR5KHJldlswXSwgcmV2X25yIC0gMSwgcmV2ICsgMSk7CisKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKHIgPSByZXN1bHQ7IHI7IHIgPSByLT5uZXh0KSB7CisJCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoJnItPml0ZW0tPm9iamVjdC5vaWQpKTsKKwkJaWYgKCFzaG93X2FsbCkKKwkJCWJyZWFrOworCX0KKworCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtZXJnZV9iYXNlX3VzYWdlW10gPSB7CisJTl8oImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIpLAorCU5fKCJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIiksCisJTl8oImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iKSwKKwlOXygiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIpLAorCU5fKCJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfY29tbWl0X3JlZmVyZW5jZShjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IG9iamVjdF9pZCByZXZrZXk7CisJc3RydWN0IGNvbW1pdCAqcjsKKworCWlmIChnZXRfb2lkKGFyZywgJnJldmtleSkpCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmcpOworCXIgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJnJldmtleSk7CisJaWYgKCFyKQorCQlkaWUoIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIiwgYXJnKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9pbmRlcGVuZGVudChpbnQgY291bnQsIGNvbnN0IGNoYXIgKiphcmdzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcmV2cyA9IE5VTEwsICpyZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgaS0tKQorCQljb21taXRfbGlzdF9pbnNlcnQoZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJnc1tpXSksICZyZXZzKTsKKworCXJlZHVjZV9oZWFkc19yZXBsYWNlKCZyZXZzKTsKKworCWlmICghcmV2cykKKwkJcmV0dXJuIDE7CisKKwlmb3IgKHJldiA9IHJldnM7IHJldjsgcmV2ID0gcmV2LT5uZXh0KQorCQlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZyZXYtPml0ZW0tPm9iamVjdC5vaWQpKTsKKworCWZyZWVfY29tbWl0X2xpc3QocmV2cyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX29jdG9wdXMoaW50IGNvdW50LCBjb25zdCBjaGFyICoqYXJncywgaW50IHNob3dfYWxsKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcmV2cyA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQsICpyZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgaS0tKQorCQljb21taXRfbGlzdF9pbnNlcnQoZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJnc1tpXSksICZyZXZzKTsKKworCXJlc3VsdCA9IGdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKHJldnMpOworCWZyZWVfY29tbWl0X2xpc3QocmV2cyk7CisJcmVkdWNlX2hlYWRzX3JlcGxhY2UoJnJlc3VsdCk7CisKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKHJldiA9IHJlc3VsdDsgcmV2OyByZXYgPSByZXYtPm5leHQpIHsKKwkJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmcmV2LT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCWlmICghc2hvd19hbGwpCisJCQlicmVhazsKKwl9CisKKwlmcmVlX2NvbW1pdF9saXN0KHJlc3VsdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2lzX2FuY2VzdG9yKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY29tbWl0ICpvbmUsICp0d287CisKKwlpZiAoYXJnYyAhPSAyKQorCQlkaWUoIi0taXMtYW5jZXN0b3IgdGFrZXMgZXhhY3RseSB0d28gY29tbWl0cyIpOworCW9uZSA9IGdldF9jb21taXRfcmVmZXJlbmNlKGFyZ3ZbMF0pOworCXR3byA9IGdldF9jb21taXRfcmVmZXJlbmNlKGFyZ3ZbMV0pOworCWlmIChpbl9tZXJnZV9iYXNlcyhvbmUsIHR3bykpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2ZvcmtfcG9pbnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgKnJlZm5hbWU7CisJc3RydWN0IGNvbW1pdCAqZGVyaXZlZCwgKmZvcmtfcG9pbnQ7CisJY29uc3QgY2hhciAqY29tbWl0bmFtZTsKKworCXN3aXRjaCAoZHdpbV9yZWYoYXJndlswXSwgc3RybGVuKGFyZ3ZbMF0pLCAmb2lkLCAmcmVmbmFtZSkpIHsKKwljYXNlIDA6CisJCWRpZSgiTm8gc3VjaCByZWY6ICclcyciLCBhcmd2WzBdKTsKKwljYXNlIDE6CisJCWJyZWFrOyAvKiBnb29kICovCisJZGVmYXVsdDoKKwkJZGllKCJBbWJpZ3VvdXMgcmVmbmFtZTogJyVzJyIsIGFyZ3ZbMF0pOworCX0KKworCWNvbW1pdG5hbWUgPSAoYXJnYyA9PSAyKSA/IGFyZ3ZbMV0gOiAiSEVBRCI7CisJaWYgKGdldF9vaWQoY29tbWl0bmFtZSwgJm9pZCkpCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciLCBjb21taXRuYW1lKTsKKworCWRlcml2ZWQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisKKwlmb3JrX3BvaW50ID0gZ2V0X2ZvcmtfcG9pbnQocmVmbmFtZSwgZGVyaXZlZCk7CisKKwlpZiAoIWZvcmtfcG9pbnQpCisJCXJldHVybiAxOworCisJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmZm9ya19wb2ludC0+b2JqZWN0Lm9pZCkpOworCXJldHVybiAwOworfQorCitpbnQgY21kX21lcmdlX2Jhc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNvbW1pdCAqKnJldjsKKwlpbnQgcmV2X25yID0gMDsKKwlpbnQgc2hvd19hbGwgPSAwOworCWludCBjbWRtb2RlID0gMDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnYScsICJhbGwiLCAmc2hvd19hbGwsIE5fKCJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiKSksCisJCU9QVF9DTURNT0RFKDAsICJvY3RvcHVzIiwgJmNtZG1vZGUsCisJCQkgICAgTl8oImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIpLCAnbycpLAorCQlPUFRfQ01ETU9ERSgwLCAiaW5kZXBlbmRlbnQiLCAmY21kbW9kZSwKKwkJCSAgICBOXygibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiKSwgJ3InKSwKKwkJT1BUX0NNRE1PREUoMCwgImlzLWFuY2VzdG9yIiwgJmNtZG1vZGUsCisJCQkgICAgTl8oImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIpLCAnYScpLAorCQlPUFRfQ01ETU9ERSgwLCAiZm9yay1wb2ludCIsICZjbWRtb2RlLAorCQkJICAgIE5fKCJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIpLCAnZicpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbWVyZ2VfYmFzZV91c2FnZSwgMCk7CisKKwlpZiAoY21kbW9kZSA9PSAnYScpIHsKKwkJaWYgKGFyZ2MgPCAyKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKG1lcmdlX2Jhc2VfdXNhZ2UsIG9wdGlvbnMpOworCQlpZiAoc2hvd19hbGwpCisJCQlkaWUoIi0taXMtYW5jZXN0b3IgY2Fubm90IGJlIHVzZWQgd2l0aCAtLWFsbCIpOworCQlyZXR1cm4gaGFuZGxlX2lzX2FuY2VzdG9yKGFyZ2MsIGFyZ3YpOworCX0KKworCWlmIChjbWRtb2RlID09ICdyJyAmJiBzaG93X2FsbCkKKwkJZGllKCItLWluZGVwZW5kZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggLS1hbGwiKTsKKworCWlmIChjbWRtb2RlID09ICdvJykKKwkJcmV0dXJuIGhhbmRsZV9vY3RvcHVzKGFyZ2MsIGFyZ3YsIHNob3dfYWxsKTsKKworCWlmIChjbWRtb2RlID09ICdyJykKKwkJcmV0dXJuIGhhbmRsZV9pbmRlcGVuZGVudChhcmdjLCBhcmd2KTsKKworCWlmIChjbWRtb2RlID09ICdmJykgeworCQlpZiAoYXJnYyA8IDEgfHwgMiA8IGFyZ2MpCisJCQl1c2FnZV93aXRoX29wdGlvbnMobWVyZ2VfYmFzZV91c2FnZSwgb3B0aW9ucyk7CisJCXJldHVybiBoYW5kbGVfZm9ya19wb2ludChhcmdjLCBhcmd2KTsKKwl9CisKKwlpZiAoYXJnYyA8IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhtZXJnZV9iYXNlX3VzYWdlLCBvcHRpb25zKTsKKworCUFMTE9DX0FSUkFZKHJldiwgYXJnYyk7CisJd2hpbGUgKGFyZ2MtLSA+IDApCisJCXJldltyZXZfbnIrK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZSgqYXJndisrKTsKKwlyZXR1cm4gc2hvd19tZXJnZV9iYXNlKHJldiwgcmV2X25yLCBzaG93X2FsbCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21lcmdlLWZpbGUuYyBiL2J1aWx0aW4vbWVyZ2UtZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTJmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLWZpbGUuYwpAQCAtMCwwICsxLDExOCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVyZ2VfZmlsZV91c2FnZVtdID0geworCU5fKCJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gPG9yaWctZmlsZT4gPGZpbGUyPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgbGFiZWxfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdGF0aWMgaW50IGxhYmVsX2NvdW50ID0gMDsKKwljb25zdCBjaGFyICoqbmFtZXMgPSAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKGxhYmVsX2NvdW50ID49IDMpCisJCXJldHVybiBlcnJvcigidG9vIG1hbnkgbGFiZWxzIG9uIHRoZSBjb21tYW5kIGxpbmUiKTsKKwluYW1lc1tsYWJlbF9jb3VudCsrXSA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9tZXJnZV9maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKm5hbWVzWzNdID0geyBOVUxMLCBOVUxMLCBOVUxMIH07CisJbW1maWxlX3QgbW1mc1szXTsKKwltbWJ1ZmZlcl90IHJlc3VsdCA9IHtOVUxMLCAwfTsKKwl4bXBhcmFtX3QgeG1wID0ge3swfX07CisJaW50IHJldCA9IDAsIGkgPSAwLCB0b19zdGRvdXQgPSAwOworCWludCBxdWlldCA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdwJywgInN0ZG91dCIsICZ0b19zdGRvdXQsIE5fKCJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IikpLAorCQlPUFRfU0VUX0lOVCgwLCAiZGlmZjMiLCAmeG1wLnN0eWxlLCBOXygidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiKSwgWERMX01FUkdFX0RJRkYzKSwKKwkJT1BUX1NFVF9JTlQoMCwgIm91cnMiLCAmeG1wLmZhdm9yLCBOXygiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIiksCisJCQkgICAgWERMX01FUkdFX0ZBVk9SX09VUlMpLAorCQlPUFRfU0VUX0lOVCgwLCAidGhlaXJzIiwgJnhtcC5mYXZvciwgTl8oImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIiksCisJCQkgICAgWERMX01FUkdFX0ZBVk9SX1RIRUlSUyksCisJCU9QVF9TRVRfSU5UKDAsICJ1bmlvbiIsICZ4bXAuZmF2b3IsIE5fKCJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIiksCisJCQkgICAgWERMX01FUkdFX0ZBVk9SX1VOSU9OKSwKKwkJT1BUX0lOVEVHRVIoMCwgIm1hcmtlci1zaXplIiwgJnhtcC5tYXJrZXJfc2l6ZSwKKwkJCSAgICBOXygiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiKSksCisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIikpLAorCQlPUFRfQ0FMTEJBQ0soJ0wnLCBOVUxMLCBuYW1lcywgTl8oIm5hbWUiKSwKKwkJCSAgICAgTl8oInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIpLCAmbGFiZWxfY2IpLAorCQlPUFRfRU5EKCksCisJfTsKKworCXhtcC5sZXZlbCA9IFhETF9NRVJHRV9aRUFMT1VTX0FMTlVNOworCXhtcC5zdHlsZSA9IDA7CisJeG1wLmZhdm9yID0gMDsKKworCWlmIChzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkgeworCQkvKiBSZWFkIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKi8KKwkJZ2l0X2NvbmZpZyhnaXRfeG1lcmdlX2NvbmZpZywgTlVMTCk7CisJCWlmICgwIDw9IGdpdF94bWVyZ2Vfc3R5bGUpCisJCQl4bXAuc3R5bGUgPSBnaXRfeG1lcmdlX3N0eWxlOworCX0KKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbWVyZ2VfZmlsZV91c2FnZSwgMCk7CisJaWYgKGFyZ2MgIT0gMykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKG1lcmdlX2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCWlmIChxdWlldCkgeworCQlpZiAoIWZyZW9wZW4oIi9kZXYvbnVsbCIsICJ3Iiwgc3RkZXJyKSkKKwkJCXJldHVybiBlcnJvcl9lcnJubygiZmFpbGVkIHRvIHJlZGlyZWN0IHN0ZGVyciB0byAvZGV2L251bGwiKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWNoYXIgKmZuYW1lOworCQlpbnQgcmV0OworCisJCWlmICghbmFtZXNbaV0pCisJCQluYW1lc1tpXSA9IGFyZ3ZbaV07CisKKwkJZm5hbWUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmd2W2ldKTsKKwkJcmV0ID0gcmVhZF9tbWZpbGUobW1mcyArIGksIGZuYW1lKTsKKwkJZnJlZShmbmFtZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKG1tZnNbaV0uc2l6ZSA+IE1BWF9YRElGRl9TSVpFIHx8CisJCSAgICBidWZmZXJfaXNfYmluYXJ5KG1tZnNbaV0ucHRyLCBtbWZzW2ldLnNpemUpKQorCQkJcmV0dXJuIGVycm9yKCJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzOiAlcyIsCisJCQkJCWFyZ3ZbaV0pOworCX0KKworCXhtcC5hbmNlc3RvciA9IG5hbWVzWzFdOworCXhtcC5maWxlMSA9IG5hbWVzWzBdOworCXhtcC5maWxlMiA9IG5hbWVzWzJdOworCXJldCA9IHhkbF9tZXJnZShtbWZzICsgMSwgbW1mcyArIDAsIG1tZnMgKyAyLCAmeG1wLCAmcmVzdWx0KTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWZyZWUobW1mc1tpXS5wdHIpOworCisJaWYgKHJldCA+PSAwKSB7CisJCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gYXJndlswXTsKKwkJY2hhciAqZnBhdGggPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmd2WzBdKTsKKwkJRklMRSAqZiA9IHRvX3N0ZG91dCA/IHN0ZG91dCA6IGZvcGVuKGZwYXRoLCAid2IiKTsKKworCQlpZiAoIWYpCisJCQlyZXQgPSBlcnJvcl9lcnJubygiQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmciLAorCQkJCQkgIGZpbGVuYW1lKTsKKwkJZWxzZSBpZiAocmVzdWx0LnNpemUgJiYKKwkJCSBmd3JpdGUocmVzdWx0LnB0ciwgcmVzdWx0LnNpemUsIDEsIGYpICE9IDEpCisJCQlyZXQgPSBlcnJvcl9lcnJubygiQ291bGQgbm90IHdyaXRlIHRvICVzIiwgZmlsZW5hbWUpOworCQllbHNlIGlmIChmY2xvc2UoZikpCisJCQlyZXQgPSBlcnJvcl9lcnJubygiQ291bGQgbm90IGNsb3NlICVzIiwgZmlsZW5hbWUpOworCQlmcmVlKHJlc3VsdC5wdHIpOworCQlmcmVlKGZwYXRoKTsKKwl9CisKKwlpZiAocmV0ID4gMTI3KQorCQlyZXQgPSAxMjc7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1pbmRleC5jIGIvYnVpbHRpbi9tZXJnZS1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLWluZGV4LmMKQEAgLTAsMCArMSwxMTEgQEAKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqcGdtOworc3RhdGljIGludCBvbmVfc2hvdCwgcXVpZXQ7CitzdGF0aWMgaW50IGVycjsKKworc3RhdGljIGludCBtZXJnZV9lbnRyeShpbnQgcG9zLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBmb3VuZDsKKwljb25zdCBjaGFyICphcmd1bWVudHNbXSA9IHsgcGdtLCAiIiwgIiIsICIiLCBwYXRoLCAiIiwgIiIsICIiLCBOVUxMIH07CisJY2hhciBoZXhidWZbNF1bR0lUX01BWF9IRVhTWiArIDFdOworCWNoYXIgb3duYnVmWzRdWzYwXTsKKworCWlmIChwb3MgPj0gYWN0aXZlX25yKQorCQlkaWUoImdpdCBtZXJnZS1pbmRleDogJXMgbm90IGluIHRoZSBjYWNoZSIsIHBhdGgpOworCWZvdW5kID0gMDsKKwlkbyB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCisJCWlmIChzdHJjbXAoY2UtPm5hbWUsIHBhdGgpKQorCQkJYnJlYWs7CisJCWZvdW5kKys7CisJCW9pZF90b19oZXhfcihoZXhidWZbc3RhZ2VdLCAmY2UtPm9pZCk7CisJCXhzbnByaW50Zihvd25idWZbc3RhZ2VdLCBzaXplb2Yob3duYnVmW3N0YWdlXSksICIlbyIsIGNlLT5jZV9tb2RlKTsKKwkJYXJndW1lbnRzW3N0YWdlXSA9IGhleGJ1ZltzdGFnZV07CisJCWFyZ3VtZW50c1tzdGFnZSArIDRdID0gb3duYnVmW3N0YWdlXTsKKwl9IHdoaWxlICgrK3BvcyA8IGFjdGl2ZV9ucik7CisJaWYgKCFmb3VuZCkKKwkJZGllKCJnaXQgbWVyZ2UtaW5kZXg6ICVzIG5vdCBpbiB0aGUgY2FjaGUiLCBwYXRoKTsKKworCWlmIChydW5fY29tbWFuZF92X29wdChhcmd1bWVudHMsIDApKSB7CisJCWlmIChvbmVfc2hvdCkKKwkJCWVycisrOworCQllbHNlIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZGllKCJtZXJnZSBwcm9ncmFtIGZhaWxlZCIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX29uZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIHN0cmxlbihwYXRoKSk7CisKKwkvKgorCSAqIElmIGl0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBjYWNoZSBhcyBzdGFnZTAsIGl0J3MKKwkgKiBhbHJlYWR5IG1lcmdlZCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byBkby4KKwkgKi8KKwlpZiAocG9zIDwgMCkKKwkJbWVyZ2VfZW50cnkoLXBvcy0xLCBwYXRoKTsKK30KKworc3RhdGljIHZvaWQgbWVyZ2VfYWxsKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmICghY2Vfc3RhZ2UoY2UpKQorCQkJY29udGludWU7CisJCWkgKz0gbWVyZ2VfZW50cnkoaSwgY2UtPm5hbWUpLTE7CisJfQorfQorCitpbnQgY21kX21lcmdlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBmb3JjZV9maWxlID0gMDsKKworCS8qIFdpdGhvdXQgdGhpcyB3ZSBjYW5ub3QgcmVseSBvbiB3YWl0cGlkKCkgdG8gdGVsbAorCSAqIHdoYXQgaGFwcGVuZWQgdG8gb3VyIGNoaWxkcmVuLgorCSAqLworCXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKKworCWlmIChhcmdjIDwgMykKKwkJdXNhZ2UoImdpdCBtZXJnZS1pbmRleCBbLW9dIFstcV0gPG1lcmdlLXByb2dyYW0+ICgtYSB8IFstLV0gWzxmaWxlbmFtZT4uLi5dKSIpOworCisJcmVhZF9jYWNoZSgpOworCisJaSA9IDE7CisJaWYgKCFzdHJjbXAoYXJndltpXSwgIi1vIikpIHsKKwkJb25lX3Nob3QgPSAxOworCQlpKys7CisJfQorCWlmICghc3RyY21wKGFyZ3ZbaV0sICItcSIpKSB7CisJCXF1aWV0ID0gMTsKKwkJaSsrOworCX0KKwlwZ20gPSBhcmd2W2krK107CisJZm9yICg7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCFmb3JjZV9maWxlICYmICphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQkJZm9yY2VfZmlsZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItYSIpKSB7CisJCQkJbWVyZ2VfYWxsKCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlkaWUoImdpdCBtZXJnZS1pbmRleDogdW5rbm93biBvcHRpb24gJXMiLCBhcmcpOworCQl9CisJCW1lcmdlX29uZV9wYXRoKGFyZyk7CisJfQorCWlmIChlcnIgJiYgIXF1aWV0KQorCQlkaWUoIm1lcmdlIHByb2dyYW0gZmFpbGVkIik7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2Utb3Vycy5jIGIvYnVpbHRpbi9tZXJnZS1vdXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5NDUwNwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2Utb3Vycy5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBnaXQtbWVyZ2Utb3Vycy5zaCBhcyBidWlsdGluCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFRob21hcyBIYXJuaW5nIEpyCisgKiBPcmlnaW5hbDoKKyAqIE9yaWdpbmFsIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworICoKKyAqIFByZXRlbmQgd2UgcmVzb2x2ZWQgdGhlIGhlYWRzLCBidXQgZGVjbGFyZSBvdXIgdHJlZSB0cnVtcHMgZXZlcnlib2R5IGVsc2UuCisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJkaWZmLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGJ1aWx0aW5fbWVyZ2Vfb3Vyc191c2FnZVtdID0KKwkiZ2l0IG1lcmdlLW91cnMgPGJhc2U+Li4uIC0tIEhFQUQgPHJlbW90ZT4uLi4iOworCitpbnQgY21kX21lcmdlX291cnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShidWlsdGluX21lcmdlX291cnNfdXNhZ2UpOworCisJLyoKKwkgKiBUaGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgaW5kZXggYmVjb21lcyB0aGUgdHJlZSB3ZQorCSAqIGNvbW1pdC4gIFRoZSBpbmRleCBtdXN0IG1hdGNoIEhFQUQsIG9yIHRoaXMgbWVyZ2UgY2Fubm90IGdvCisJICogdGhyb3VnaC4KKwkgKi8KKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllX2Vycm5vKCJyZWFkX2NhY2hlIGZhaWxlZCIpOworCWlmIChpbmRleF9kaWZmZXJzX2Zyb20odGhlX3JlcG9zaXRvcnksICJIRUFEIiwgTlVMTCwgMCkpCisJCWV4aXQoMik7CisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmMgYi9idWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YmZkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jCkBAIC0wLDAgKzEsOTIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9tZXJnZV9yZWN1cnNpdmVfdXNhZ2VbXSA9CisJImdpdCAlcyA8YmFzZT4uLi4gLS0gPGhlYWQ+IDxyZW1vdGU+IC4uLiI7CisKK3N0YXRpYyBjaGFyICpiZXR0ZXJfYnJhbmNoX25hbWUoY29uc3QgY2hhciAqYnJhbmNoKQoreworCXN0YXRpYyBjaGFyIGdpdGhlYWRfZW52WzggKyBHSVRfTUFYX0hFWFNaICsgMV07CisJY2hhciAqbmFtZTsKKworCWlmIChzdHJsZW4oYnJhbmNoKSAhPSB0aGVfaGFzaF9hbGdvLT5oZXhzeikKKwkJcmV0dXJuIHhzdHJkdXAoYnJhbmNoKTsKKwl4c25wcmludGYoZ2l0aGVhZF9lbnYsIHNpemVvZihnaXRoZWFkX2VudiksICJHSVRIRUFEXyVzIiwgYnJhbmNoKTsKKwluYW1lID0gZ2V0ZW52KGdpdGhlYWRfZW52KTsKKwlyZXR1cm4geHN0cmR1cChuYW1lID8gbmFtZSA6IGJyYW5jaCk7Cit9CisKK2ludCBjbWRfbWVyZ2VfcmVjdXJzaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJhc2VzWzIxXTsKKwl1bnNpZ25lZCBiYXNlc19jb3VudCA9IDA7CisJaW50IGksIGZhaWxlZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGgxLCBoMjsKKwlzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyBvOworCWNoYXIgKmJldHRlcjEsICpiZXR0ZXIyOworCXN0cnVjdCBjb21taXQgKnJlc3VsdDsKKworCWluaXRfbWVyZ2Vfb3B0aW9ucygmbywgdGhlX3JlcG9zaXRvcnkpOworCWlmIChhcmd2WzBdICYmIGVuZHNfd2l0aChhcmd2WzBdLCAiLXN1YnRyZWUiKSkKKwkJby5zdWJ0cmVlX3NoaWZ0ID0gIiI7CisKKwlpZiAoYXJnYyA8IDQpCisJCXVzYWdlZihidWlsdGluX21lcmdlX3JlY3Vyc2l2ZV91c2FnZSwgYXJndlswXSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tIikpIHsKKwkJCWlmICghYXJnWzJdKQorCQkJCWJyZWFrOworCQkJaWYgKHBhcnNlX21lcmdlX29wdCgmbywgYXJnICsgMikpCisJCQkJZGllKF8oInVua25vd24gb3B0aW9uICVzIiksIGFyZyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYmFzZXNfY291bnQgPCBBUlJBWV9TSVpFKGJhc2VzKS0xKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2lkKSk7CisJCQlpZiAoZ2V0X29pZChhcmd2W2ldLCBvaWQpKQorCQkJCWRpZShfKCJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciKSwgYXJndltpXSk7CisJCQliYXNlc1tiYXNlc19jb3VudCsrXSA9IG9pZDsKKwkJfQorCQllbHNlCisJCQl3YXJuaW5nKFFfKCJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiAiCisJCQkJICAgIklnbm9yaW5nICVzLiIsCisJCQkJICAgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiAiCisJCQkJICAgIklnbm9yaW5nICVzLiIsCisJCQkJICAgIChpbnQpQVJSQVlfU0laRShiYXNlcyktMSksCisJCQkJKGludClBUlJBWV9TSVpFKGJhc2VzKS0xLCBhcmd2W2ldKTsKKwl9CisJaWYgKGFyZ2MgLSBpICE9IDMpIC8qICItLSIgIjxoZWFkPiIgIjxyZW1vdGU+IiAqLworCQlkaWUoXygibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIpKTsKKworCWlmIChyZXBvX3JlYWRfaW5kZXhfdW5tZXJnZWQodGhlX3JlcG9zaXRvcnkpKQorCQlkaWVfcmVzb2x2ZV9jb25mbGljdCgibWVyZ2UiKTsKKworCW8uYnJhbmNoMSA9IGFyZ3ZbKytpXTsKKwlvLmJyYW5jaDIgPSBhcmd2WysraV07CisKKwlpZiAoZ2V0X29pZChvLmJyYW5jaDEsICZoMSkpCisJCWRpZShfKCJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIpLCBvLmJyYW5jaDEpOworCWlmIChnZXRfb2lkKG8uYnJhbmNoMiwgJmgyKSkKKwkJZGllKF8oImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIiksIG8uYnJhbmNoMik7CisKKwlvLmJyYW5jaDEgPSBiZXR0ZXIxID0gYmV0dGVyX2JyYW5jaF9uYW1lKG8uYnJhbmNoMSk7CisJby5icmFuY2gyID0gYmV0dGVyMiA9IGJldHRlcl9icmFuY2hfbmFtZShvLmJyYW5jaDIpOworCisJaWYgKG8udmVyYm9zaXR5ID49IDMpCisJCXByaW50ZihfKCJNZXJnaW5nICVzIHdpdGggJXNcbiIpLCBvLmJyYW5jaDEsIG8uYnJhbmNoMik7CisKKwlmYWlsZWQgPSBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYygmbywgJmgxLCAmaDIsIGJhc2VzX2NvdW50LCBiYXNlcywgJnJlc3VsdCk7CisKKwlmcmVlKGJldHRlcjEpOworCWZyZWUoYmV0dGVyMik7CisKKwlpZiAoZmFpbGVkIDwgMCkKKwkJcmV0dXJuIDEyODsgLyogZGllKCkgZXJyb3IgY29kZSAqLworCXJldHVybiBmYWlsZWQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21lcmdlLXRyZWUuYyBiL2J1aWx0aW4vbWVyZ2UtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjcxNGEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLXRyZWUuYwpAQCAtMCwwICsxLDM5MCBAQAorI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJtZXJnZS1ibG9icy5oIgorCitzdGF0aWMgY29uc3QgY2hhciBtZXJnZV90cmVlX3VzYWdlW10gPSAiZ2l0IG1lcmdlLXRyZWUgPGJhc2UtdHJlZT4gPGJyYW5jaDE+IDxicmFuY2gyPiI7CisKK3N0cnVjdCBtZXJnZV9saXN0IHsKKwlzdHJ1Y3QgbWVyZ2VfbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgbWVyZ2VfbGlzdCAqbGluazsJLyogb3RoZXIgc3RhZ2VzIGZvciB0aGlzIG9iamVjdCAqLworCisJdW5zaWduZWQgaW50IHN0YWdlIDogMjsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBibG9iICpibG9iOworfTsKKworc3RhdGljIHN0cnVjdCBtZXJnZV9saXN0ICptZXJnZV9yZXN1bHQsICoqbWVyZ2VfcmVzdWx0X2VuZCA9ICZtZXJnZV9yZXN1bHQ7CisKK3N0YXRpYyB2b2lkIGFkZF9tZXJnZV9lbnRyeShzdHJ1Y3QgbWVyZ2VfbGlzdCAqZW50cnkpCit7CisJKm1lcmdlX3Jlc3VsdF9lbmQgPSBlbnRyeTsKKwltZXJnZV9yZXN1bHRfZW5kID0gJmVudHJ5LT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBtZXJnZV90cmVlcyhzdHJ1Y3QgdHJlZV9kZXNjIHRbM10sIGNvbnN0IGNoYXIgKmJhc2UpOworCitzdGF0aWMgY29uc3QgY2hhciAqZXhwbGFuYXRpb24oc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5KQoreworCXN3aXRjaCAoZW50cnktPnN0YWdlKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gIm1lcmdlZCI7CisJY2FzZSAzOgorCQlyZXR1cm4gImFkZGVkIGluIHJlbW90ZSI7CisJY2FzZSAyOgorCQlpZiAoZW50cnktPmxpbmspCisJCQlyZXR1cm4gImFkZGVkIGluIGJvdGgiOworCQlyZXR1cm4gImFkZGVkIGluIGxvY2FsIjsKKwl9CisKKwkvKiBFeGlzdGVkIGluIGJhc2UgKi8KKwllbnRyeSA9IGVudHJ5LT5saW5rOworCWlmICghZW50cnkpCisJCXJldHVybiAicmVtb3ZlZCBpbiBib3RoIjsKKworCWlmIChlbnRyeS0+bGluaykKKwkJcmV0dXJuICJjaGFuZ2VkIGluIGJvdGgiOworCisJaWYgKGVudHJ5LT5zdGFnZSA9PSAzKQorCQlyZXR1cm4gInJlbW92ZWQgaW4gbG9jYWwiOworCXJldHVybiAicmVtb3ZlZCBpbiByZW1vdGUiOworfQorCitzdGF0aWMgdm9pZCAqcmVzdWx0KHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IGJsb2IgKmJhc2UsICpvdXIsICp0aGVpcjsKKwljb25zdCBjaGFyICpwYXRoID0gZW50cnktPnBhdGg7CisKKwlpZiAoIWVudHJ5LT5zdGFnZSkKKwkJcmV0dXJuIHJlYWRfb2JqZWN0X2ZpbGUoJmVudHJ5LT5ibG9iLT5vYmplY3Qub2lkLCAmdHlwZSwgc2l6ZSk7CisJYmFzZSA9IE5VTEw7CisJaWYgKGVudHJ5LT5zdGFnZSA9PSAxKSB7CisJCWJhc2UgPSBlbnRyeS0+YmxvYjsKKwkJZW50cnkgPSBlbnRyeS0+bGluazsKKwl9CisJb3VyID0gTlVMTDsKKwlpZiAoZW50cnkgJiYgZW50cnktPnN0YWdlID09IDIpIHsKKwkJb3VyID0gZW50cnktPmJsb2I7CisJCWVudHJ5ID0gZW50cnktPmxpbms7CisJfQorCXRoZWlyID0gTlVMTDsKKwlpZiAoZW50cnkpCisJCXRoZWlyID0gZW50cnktPmJsb2I7CisJcmV0dXJuIG1lcmdlX2Jsb2JzKHRoZV9yZXBvc2l0b3J5LT5pbmRleCwgcGF0aCwKKwkJCSAgIGJhc2UsIG91ciwgdGhlaXIsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCAqb3JpZ2luKHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJd2hpbGUgKGVudHJ5KSB7CisJCWlmIChlbnRyeS0+c3RhZ2UgPT0gMikKKwkJCXJldHVybiByZWFkX29iamVjdF9maWxlKCZlbnRyeS0+YmxvYi0+b2JqZWN0Lm9pZCwKKwkJCQkJCSZ0eXBlLCBzaXplKTsKKwkJZW50cnkgPSBlbnRyeS0+bGluazsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19vdXRmKHZvaWQgKnByaXZfLCBtbWJ1ZmZlcl90ICptYiwgaW50IG5idWYpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5idWY7IGkrKykKKwkJcHJpbnRmKCIlLipzIiwgKGludCkgbWJbaV0uc2l6ZSwgbWJbaV0ucHRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19kaWZmKHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJbW1maWxlX3Qgc3JjLCBkc3Q7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwl4cHAuZmxhZ3MgPSAwOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCXhlY2ZnLmN0eGxlbiA9IDM7CisJZWNiLm91dF9odW5rID0gTlVMTDsKKwllY2Iub3V0X2xpbmUgPSBzaG93X291dGY7CisJZWNiLnByaXYgPSBOVUxMOworCisJc3JjLnB0ciA9IG9yaWdpbihlbnRyeSwgJnNpemUpOworCWlmICghc3JjLnB0cikKKwkJc2l6ZSA9IDA7CisJc3JjLnNpemUgPSBzaXplOworCWRzdC5wdHIgPSByZXN1bHQoZW50cnksICZzaXplKTsKKwlpZiAoIWRzdC5wdHIpCisJCXNpemUgPSAwOworCWRzdC5zaXplID0gc2l6ZTsKKwlpZiAoeGRpX2RpZmYoJnNyYywgJmRzdCwgJnhwcCwgJnhlY2ZnLCAmZWNiKSkKKwkJZGllKCJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiIpOworCWZyZWUoc3JjLnB0cik7CisJZnJlZShkc3QucHRyKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yZXN1bHRfbGlzdChzdHJ1Y3QgbWVyZ2VfbGlzdCAqZW50cnkpCit7CisJcHJpbnRmKCIlc1xuIiwgZXhwbGFuYXRpb24oZW50cnkpKTsKKwlkbyB7CisJCXN0cnVjdCBtZXJnZV9saXN0ICpsaW5rID0gZW50cnktPmxpbms7CisJCXN0YXRpYyBjb25zdCBjaGFyICpkZXNjWzRdID0geyAicmVzdWx0IiwgImJhc2UiLCAib3VyIiwgInRoZWlyIiB9OworCQlwcmludGYoIiAgJS02cyAlbyAlcyAlc1xuIiwgZGVzY1tlbnRyeS0+c3RhZ2VdLCBlbnRyeS0+bW9kZSwgb2lkX3RvX2hleCgmZW50cnktPmJsb2ItPm9iamVjdC5vaWQpLCBlbnRyeS0+cGF0aCk7CisJCWVudHJ5ID0gbGluazsKKwl9IHdoaWxlIChlbnRyeSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcmVzdWx0KHZvaWQpCit7CisJc3RydWN0IG1lcmdlX2xpc3QgKndhbGs7CisKKwl3YWxrID0gbWVyZ2VfcmVzdWx0OworCXdoaWxlICh3YWxrKSB7CisJCXNob3dfcmVzdWx0X2xpc3Qod2Fsayk7CisJCXNob3dfZGlmZih3YWxrKTsKKwkJd2FsayA9IHdhbGstPm5leHQ7CisJfQorfQorCisvKiBBbiBlbXB0eSBlbnRyeSBuZXZlciBjb21wYXJlcyBzYW1lLCBub3QgZXZlbiB0byBhbm90aGVyIGVtcHR5IGVudHJ5ICovCitzdGF0aWMgaW50IHNhbWVfZW50cnkoc3RydWN0IG5hbWVfZW50cnkgKmEsIHN0cnVjdCBuYW1lX2VudHJ5ICpiKQoreworCXJldHVybgkhaXNfbnVsbF9vaWQoJmEtPm9pZCkgJiYKKwkJIWlzX251bGxfb2lkKCZiLT5vaWQpICYmCisJCW9pZGVxKCZhLT5vaWQsICZiLT5vaWQpICYmCisJCWEtPm1vZGUgPT0gYi0+bW9kZTsKK30KKworc3RhdGljIGludCBib3RoX2VtcHR5KHN0cnVjdCBuYW1lX2VudHJ5ICphLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYikKK3sKKwlyZXR1cm4gaXNfbnVsbF9vaWQoJmEtPm9pZCkgJiYgaXNfbnVsbF9vaWQoJmItPm9pZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfbGlzdCAqY3JlYXRlX2VudHJ5KHVuc2lnbmVkIHN0YWdlLCB1bnNpZ25lZCBtb2RlLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IG1lcmdlX2xpc3QgKnJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKKworCXJlcy0+c3RhZ2UgPSBzdGFnZTsKKwlyZXMtPnBhdGggPSBwYXRoOworCXJlcy0+bW9kZSA9IG1vZGU7CisJcmVzLT5ibG9iID0gbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGNoYXIgKnRyYXZlcnNlX3BhdGgoY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpuKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX21ha2VfdHJhdmVyc2VfcGF0aCgmYnVmLCBpbmZvLCBuLT5wYXRoLCBuLT5wYXRobGVuKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcmVzb2x2ZShjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgc3RydWN0IG5hbWVfZW50cnkgKm91cnMsIHN0cnVjdCBuYW1lX2VudHJ5ICpyZXN1bHQpCit7CisJc3RydWN0IG1lcmdlX2xpc3QgKm9yaWcsICpmaW5hbDsKKwljb25zdCBjaGFyICpwYXRoOworCisJLyogSWYgaXQncyBhbHJlYWR5IG91cnMsIGRvbid0IGJvdGhlciBzaG93aW5nIGl0ICovCisJaWYgKCFvdXJzKQorCQlyZXR1cm47CisKKwlwYXRoID0gdHJhdmVyc2VfcGF0aChpbmZvLCByZXN1bHQpOworCW9yaWcgPSBjcmVhdGVfZW50cnkoMiwgb3Vycy0+bW9kZSwgJm91cnMtPm9pZCwgcGF0aCk7CisJZmluYWwgPSBjcmVhdGVfZW50cnkoMCwgcmVzdWx0LT5tb2RlLCAmcmVzdWx0LT5vaWQsIHBhdGgpOworCisJZmluYWwtPmxpbmsgPSBvcmlnOworCisJYWRkX21lcmdlX2VudHJ5KGZpbmFsKTsKK30KKworc3RhdGljIHZvaWQgdW5yZXNvbHZlZF9kaXJlY3RvcnkoY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBuYW1lX2VudHJ5IG5bM10pCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKwljaGFyICpuZXdiYXNlOworCXN0cnVjdCBuYW1lX2VudHJ5ICpwOworCXN0cnVjdCB0cmVlX2Rlc2MgdFszXTsKKwl2b2lkICpidWYwLCAqYnVmMSwgKmJ1ZjI7CisKKwlmb3IgKHAgPSBuOyBwIDwgbiArIDM7IHArKykgeworCQlpZiAocC0+bW9kZSAmJiBTX0lTRElSKHAtPm1vZGUpKQorCQkJYnJlYWs7CisJfQorCWlmIChuICsgMyA8PSBwKQorCQlyZXR1cm47IC8qIHRoZXJlIGlzIG5vIHRyZWUgaGVyZSAqLworCisJbmV3YmFzZSA9IHRyYXZlcnNlX3BhdGgoaW5mbywgcCk7CisKKyNkZWZpbmUgRU5UUllfT0lEKGUpICgoKGUpLT5tb2RlICYmIFNfSVNESVIoKGUpLT5tb2RlKSkgPyAmKGUpLT5vaWQgOiBOVUxMKQorCWJ1ZjAgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcihyLCB0ICsgMCwgRU5UUllfT0lEKG4gKyAwKSk7CisJYnVmMSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHIsIHQgKyAxLCBFTlRSWV9PSUQobiArIDEpKTsKKwlidWYyID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IociwgdCArIDIsIEVOVFJZX09JRChuICsgMikpOworI3VuZGVmIEVOVFJZX09JRAorCisJbWVyZ2VfdHJlZXModCwgbmV3YmFzZSk7CisKKwlmcmVlKGJ1ZjApOworCWZyZWUoYnVmMSk7CisJZnJlZShidWYyKTsKKwlmcmVlKG5ld2Jhc2UpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfbGlzdCAqbGlua19lbnRyeSh1bnNpZ25lZCBzdGFnZSwgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIHN0cnVjdCBuYW1lX2VudHJ5ICpuLCBzdHJ1Y3QgbWVyZ2VfbGlzdCAqZW50cnkpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwlzdHJ1Y3QgbWVyZ2VfbGlzdCAqbGluazsKKworCWlmICghbi0+bW9kZSkKKwkJcmV0dXJuIGVudHJ5OworCWlmIChlbnRyeSkKKwkJcGF0aCA9IGVudHJ5LT5wYXRoOworCWVsc2UKKwkJcGF0aCA9IHRyYXZlcnNlX3BhdGgoaW5mbywgbik7CisJbGluayA9IGNyZWF0ZV9lbnRyeShzdGFnZSwgbi0+bW9kZSwgJm4tPm9pZCwgcGF0aCk7CisJbGluay0+bGluayA9IGVudHJ5OworCXJldHVybiBsaW5rOworfQorCitzdGF0aWMgdm9pZCB1bnJlc29sdmVkKGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBzdHJ1Y3QgbmFtZV9lbnRyeSBuWzNdKQoreworCXN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSA9IE5VTEw7CisJaW50IGk7CisJdW5zaWduZWQgZGlybWFzayA9IDAsIG1hc2sgPSAwOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQltYXNrIHw9ICgxIDw8IGkpOworCQkvKgorCQkgKiBUcmVhdCBtaXNzaW5nIGVudHJpZXMgYXMgZGlyZWN0b3JpZXMgc28gdGhhdCB3ZSByZXR1cm4KKwkJICogYWZ0ZXIgdW5yZXNvbHZlZF9kaXJlY3RvcnkgaGFzIGhhbmRsZWQgdGhpcy4KKwkJICovCisJCWlmICghbltpXS5tb2RlIHx8IFNfSVNESVIobltpXS5tb2RlKSkKKwkJCWRpcm1hc2sgfD0gKDEgPDwgaSk7CisJfQorCisJdW5yZXNvbHZlZF9kaXJlY3RvcnkoaW5mbywgbik7CisKKwlpZiAoZGlybWFzayA9PSBtYXNrKQorCQlyZXR1cm47CisKKwlpZiAoblsyXS5tb2RlICYmICFTX0lTRElSKG5bMl0ubW9kZSkpCisJCWVudHJ5ID0gbGlua19lbnRyeSgzLCBpbmZvLCBuICsgMiwgZW50cnkpOworCWlmIChuWzFdLm1vZGUgJiYgIVNfSVNESVIoblsxXS5tb2RlKSkKKwkJZW50cnkgPSBsaW5rX2VudHJ5KDIsIGluZm8sIG4gKyAxLCBlbnRyeSk7CisJaWYgKG5bMF0ubW9kZSAmJiAhU19JU0RJUihuWzBdLm1vZGUpKQorCQllbnRyeSA9IGxpbmtfZW50cnkoMSwgaW5mbywgbiArIDAsIGVudHJ5KTsKKworCWFkZF9tZXJnZV9lbnRyeShlbnRyeSk7Cit9CisKKy8qCisgKiBNZXJnZSB0d28gdHJlZXMgdG9nZXRoZXIgKHRbMV0gYW5kIHRbMl0pLCB1c2luZyBhIGNvbW1vbiBiYXNlICh0WzBdKQorICogYXMgdGhlIG9yaWdpbi4KKyAqCisgKiBUaGlzIHdhbGtzIHRoZSAoc29ydGVkKSB0cmVlcyBpbiBsb2NrLXN0ZXAsIGNoZWNraW5nIGV2ZXJ5IHBvc3NpYmxlCisgKiBuYW1lLiBOb3RlIHRoYXQgZGlyZWN0b3JpZXMgYXV0b21hdGljYWxseSBzb3J0IGRpZmZlcmVudGx5IGZyb20gb3RoZXIKKyAqIGZpbGVzIChzZWUgImJhc2VfbmFtZV9jb21wYXJlIiksIHNvIHlvdSdsbCBuZXZlciBzZWUgZmlsZS9kaXJlY3RvcnkKKyAqIGNvbmZsaWN0cywgYmVjYXVzZSB0aGV5IHdvbid0IGV2ZXIgY29tcGFyZSB0aGUgc2FtZS4KKyAqCisgKiBJT1csIGlmIGEgZGlyZWN0b3J5IGNoYW5nZXMgdG8gYSBmaWxlbmFtZSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlCisgKiBzZWVuIGFzIHRoZSBkaXJlY3RvcnkgZ29pbmcgYXdheSwgYW5kIHRoZSBmaWxlbmFtZSBiZWluZyBjcmVhdGVkLgorICoKKyAqIFRoaW5rIG9mIHRoaXMgYXMgYSB0aHJlZS13YXkgZGlmZi4KKyAqCisgKiBUaGUgb3V0cHV0IHdpbGwgYmUgZWl0aGVyOgorICogIC0gc3VjY2Vzc2Z1bCBtZXJnZQorICoJICIwIG1vZGUgc2hhMSBmaWxlbmFtZSIKKyAqICAgIE5PVEUgTk9URSBOT1RFISBGSVhNRSEgV2UgcmVhbGx5IHJlYWxseSBuZWVkIHRvIHdhbGsgdGhlIGluZGV4CisgKiAgICBpbiBwYXJhbGxlbCB3aXRoIHRoaXMgdG9vIQorICoKKyAqICAtIGNvbmZsaWN0OgorICoJIjEgbW9kZSBzaGExIGZpbGVuYW1lIgorICoJIjIgbW9kZSBzaGExIGZpbGVuYW1lIgorICoJIjMgbW9kZSBzaGExIGZpbGVuYW1lIgorICogICAgd2hlcmUgbm90IGFsbCBvZiB0aGUgMS8yLzMgbGluZXMgbWF5IGV4aXN0LCBvZiBjb3Vyc2UuCisgKgorICogVGhlIHN1Y2Nlc3NmdWwgbWVyZ2UgcnVsZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgdGhyZWUtd2F5IG1lcmdlCisgKiBpbiBnaXQtcmVhZC10cmVlLgorICovCitzdGF0aWMgaW50IHRocmVld2F5X2NhbGxiYWNrKGludCBuLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwkvKiBTYW1lIGluIGJvdGg/ICovCisJaWYgKHNhbWVfZW50cnkoZW50cnkrMSwgZW50cnkrMikgfHwgYm90aF9lbXB0eShlbnRyeSsxLCBlbnRyeSsyKSkgeworCQkvKiBNb2RpZmllZCwgYWRkZWQgb3IgcmVtb3ZlZCBpZGVudGljYWxseSAqLworCQlyZXNvbHZlKGluZm8sIE5VTEwsIGVudHJ5KzEpOworCQlyZXR1cm4gbWFzazsKKwl9CisKKwlpZiAoc2FtZV9lbnRyeShlbnRyeSswLCBlbnRyeSsxKSkgeworCQlpZiAoIWlzX251bGxfb2lkKCZlbnRyeVsyXS5vaWQpICYmICFTX0lTRElSKGVudHJ5WzJdLm1vZGUpKSB7CisJCQkvKiBXZSBkaWQgbm90IHRvdWNoLCB0aGV5IG1vZGlmaWVkIC0tIHRha2UgdGhlaXJzICovCisJCQlyZXNvbHZlKGluZm8sIGVudHJ5KzEsIGVudHJ5KzIpOworCQkJcmV0dXJuIG1hc2s7CisJCX0KKwkJLyoKKwkJICogSWYgd2UgZGlkIG5vdCB0b3VjaCBhIGRpcmVjdG9yeSBidXQgdGhleSBtYWRlIGl0CisJCSAqIGludG8gYSBmaWxlLCB3ZSBmYWxsIHRocm91Z2ggYW5kIHVucmVzb2x2ZWQoKQorCQkgKiByZWN1cnNlcyBkb3duLiAgTGlrZXdpc2UgZm9yIHRoZSBvcHBvc2l0ZSBjYXNlLgorCQkgKi8KKwl9CisKKwlpZiAoc2FtZV9lbnRyeShlbnRyeSswLCBlbnRyeSsyKSB8fCBib3RoX2VtcHR5KGVudHJ5KzAsIGVudHJ5KzIpKSB7CisJCS8qIFdlIGFkZGVkLCBtb2RpZmllZCBvciByZW1vdmVkLCB0aGV5IGRpZCBub3QgdG91Y2ggLS0gdGFrZSBvdXJzICovCisJCXJlc29sdmUoaW5mbywgTlVMTCwgZW50cnkrMSk7CisJCXJldHVybiBtYXNrOworCX0KKworCXVucmVzb2x2ZWQoaW5mbywgZW50cnkpOworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgdm9pZCBtZXJnZV90cmVlcyhzdHJ1Y3QgdHJlZV9kZXNjIHRbM10sIGNvbnN0IGNoYXIgKmJhc2UpCit7CisJc3RydWN0IHRyYXZlcnNlX2luZm8gaW5mbzsKKworCXNldHVwX3RyYXZlcnNlX2luZm8oJmluZm8sIGJhc2UpOworCWluZm8uZm4gPSB0aHJlZXdheV9jYWxsYmFjazsKKwl0cmF2ZXJzZV90cmVlcygmdGhlX2luZGV4LCAzLCB0LCAmaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkICpnZXRfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAorCQkJCSBjb25zdCBjaGFyICpyZXYpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJdm9pZCAqYnVmOworCisJaWYgKHJlcG9fZ2V0X29pZChyLCByZXYsICZvaWQpKQorCQlkaWUoInVua25vd24gcmV2ICVzIiwgcmV2KTsKKwlidWYgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcihyLCBkZXNjLCAmb2lkKTsKKwlpZiAoIWJ1ZikKKwkJZGllKCIlcyBpcyBub3QgYSB0cmVlIiwgcmV2KTsKKwlyZXR1cm4gYnVmOworfQorCitpbnQgY21kX21lcmdlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbM107CisJdm9pZCAqYnVmMSwgKmJ1ZjIsICpidWYzOworCisJaWYgKGFyZ2MgIT0gNCkKKwkJdXNhZ2UobWVyZ2VfdHJlZV91c2FnZSk7CisKKwlidWYxID0gZ2V0X3RyZWVfZGVzY3JpcHRvcihyLCB0KzAsIGFyZ3ZbMV0pOworCWJ1ZjIgPSBnZXRfdHJlZV9kZXNjcmlwdG9yKHIsIHQrMSwgYXJndlsyXSk7CisJYnVmMyA9IGdldF90cmVlX2Rlc2NyaXB0b3IociwgdCsyLCBhcmd2WzNdKTsKKwltZXJnZV90cmVlcyh0LCAiIik7CisJZnJlZShidWYxKTsKKwlmcmVlKGJ1ZjIpOworCWZyZWUoYnVmMyk7CisKKwlzaG93X3Jlc3VsdCgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS5jIGIvYnVpbHRpbi9tZXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjdkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLmMKQEAgLTAsMCArMSwxNjkwIEBACisvKgorICogQnVpbHRpbiAiZ2l0IG1lcmdlIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBNaWtsb3MgVmFqbmEgPHZtaWtsb3NAZnJ1Z2Fsd2FyZS5vcmc+CisgKgorICogQmFzZWQgb24gZ2l0LW1lcmdlLnNoIGJ5IEp1bmlvIEMgSGFtYW5vLgorICovCisKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgImhlbHAuaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJmbXQtbWVyZ2UtbXNnLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNlcXVlbmNlci5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorCisjZGVmaW5lIERFRkFVTFRfVFdPSEVBRCAoMTw8MCkKKyNkZWZpbmUgREVGQVVMVF9PQ1RPUFVTICgxPDwxKQorI2RlZmluZSBOT19GQVNUX0ZPUldBUkQgKDE8PDIpCisjZGVmaW5lIE5PX1RSSVZJQUwgICAgICAoMTw8MykKKworc3RydWN0IHN0cmF0ZWd5IHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGF0dHI7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fbWVyZ2VfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iKSwKKwlOXygiZ2l0IG1lcmdlIC0tYWJvcnQiKSwKKwlOXygiZ2l0IG1lcmdlIC0tY29udGludWUiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dfZGlmZnN0YXQgPSAxLCBzaG9ydGxvZ19sZW4gPSAtMSwgc3F1YXNoOworc3RhdGljIGludCBvcHRpb25fY29tbWl0ID0gLTE7CitzdGF0aWMgaW50IG9wdGlvbl9lZGl0ID0gLTE7CitzdGF0aWMgaW50IGFsbG93X3RyaXZpYWwgPSAxLCBoYXZlX21lc3NhZ2UsIHZlcmlmeV9zaWduYXR1cmVzOworc3RhdGljIGludCBjaGVja190cnVzdF9sZXZlbCA9IDE7CitzdGF0aWMgaW50IG92ZXJ3cml0ZV9pZ25vcmUgPSAxOworc3RhdGljIHN0cnVjdCBzdHJidWYgbWVyZ2VfbXNnID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmF0ZWd5ICoqdXNlX3N0cmF0ZWdpZXM7CitzdGF0aWMgc2l6ZV90IHVzZV9zdHJhdGVnaWVzX25yLCB1c2Vfc3RyYXRlZ2llc19hbGxvYzsKK3N0YXRpYyBjb25zdCBjaGFyICoqeG9wdHM7CitzdGF0aWMgc2l6ZV90IHhvcHRzX25yLCB4b3B0c19hbGxvYzsKK3N0YXRpYyBjb25zdCBjaGFyICpicmFuY2g7CitzdGF0aWMgY2hhciAqYnJhbmNoX21lcmdlb3B0aW9uczsKK3N0YXRpYyBpbnQgb3B0aW9uX3Jlbm9ybWFsaXplOworc3RhdGljIGludCB2ZXJib3NpdHk7CitzdGF0aWMgaW50IGFsbG93X3JlcmVyZV9hdXRvOworc3RhdGljIGludCBhYm9ydF9jdXJyZW50X21lcmdlOworc3RhdGljIGludCBxdWl0X2N1cnJlbnRfbWVyZ2U7CitzdGF0aWMgaW50IGNvbnRpbnVlX2N1cnJlbnRfbWVyZ2U7CitzdGF0aWMgaW50IGFsbG93X3VucmVsYXRlZF9oaXN0b3JpZXM7CitzdGF0aWMgaW50IHNob3dfcHJvZ3Jlc3MgPSAtMTsKK3N0YXRpYyBpbnQgZGVmYXVsdF90b191cHN0cmVhbSA9IDE7CitzdGF0aWMgaW50IHNpZ25vZmY7CitzdGF0aWMgY29uc3QgY2hhciAqc2lnbl9jb21taXQ7CitzdGF0aWMgaW50IG5vX3ZlcmlmeTsKKworc3RhdGljIHN0cnVjdCBzdHJhdGVneSBhbGxfc3RyYXRlZ3lbXSA9IHsKKwl7ICJyZWN1cnNpdmUiLCAgREVGQVVMVF9UV09IRUFEIHwgTk9fVFJJVklBTCB9LAorCXsgIm9jdG9wdXMiLCAgICBERUZBVUxUX09DVE9QVVMgfSwKKwl7ICJyZXNvbHZlIiwgICAgMCB9LAorCXsgIm91cnMiLCAgICAgICBOT19GQVNUX0ZPUldBUkQgfCBOT19UUklWSUFMIH0sCisJeyAic3VidHJlZSIsICAgIE5PX0ZBU1RfRk9SV0FSRCB8IE5PX1RSSVZJQUwgfSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpwdWxsX3R3b2hlYWQsICpwdWxsX29jdG9wdXM7CisKK2VudW0gZmZfdHlwZSB7CisJRkZfTk8sCisJRkZfQUxMT1csCisJRkZfT05MWQorfTsKKworc3RhdGljIGVudW0gZmZfdHlwZSBmYXN0X2ZvcndhcmQgPSBGRl9BTExPVzsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFudXBfYXJnOworc3RhdGljIGVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgY2xlYW51cF9tb2RlOworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9tZXNzYWdlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBvcHQtPnZhbHVlOworCisJaWYgKHVuc2V0KQorCQlzdHJidWZfc2V0bGVuKGJ1ZiwgMCk7CisJZWxzZSBpZiAoYXJnKSB7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzJXMiLCBidWYtPmxlbiA/ICJcblxuIiA6ICIiLCBhcmcpOworCQloYXZlX21lc3NhZ2UgPSAxOworCX0gZWxzZQorCQlyZXR1cm4gZXJyb3IoXygic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBwYXJzZV9vcHRfcmVzdWx0IG9wdGlvbl9yZWFkX21lc3NhZ2Uoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCQkJIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkJCSBjb25zdCBjaGFyICphcmdfbm90X3VzZWQsCisJCQkJCQkgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IG9wdC0+dmFsdWU7CisJY29uc3QgY2hhciAqYXJnOworCisJQlVHX09OX09QVF9BUkcoYXJnX25vdF91c2VkKTsKKwlpZiAodW5zZXQpCisJCUJVRygiLUYgY2Fubm90IGJlIG5lZ2F0ZWQiKTsKKworCWlmIChjdHgtPm9wdCkgeworCQlhcmcgPSBjdHgtPm9wdDsKKwkJY3R4LT5vcHQgPSBOVUxMOworCX0gZWxzZSBpZiAoY3R4LT5hcmdjID4gMSkgeworCQljdHgtPmFyZ2MtLTsKKwkJYXJnID0gKisrY3R4LT5hcmd2OworCX0gZWxzZQorCQlyZXR1cm4gZXJyb3IoXygib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIpLCBvcHQtPmxvbmdfbmFtZSk7CisKKwlpZiAoYnVmLT5sZW4pCisJCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCWlmIChjdHgtPnByZWZpeCAmJiAhaXNfYWJzb2x1dGVfcGF0aChhcmcpKQorCQlhcmcgPSBwcmVmaXhfZmlsZW5hbWUoY3R4LT5wcmVmaXgsIGFyZyk7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoYnVmLCBhcmcsIDApIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIpLCBhcmcpOworCWhhdmVfbWVzc2FnZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzdHJhdGVneSAqZ2V0X3N0cmF0ZWd5KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmF0ZWd5ICpyZXQ7CisJc3RhdGljIHN0cnVjdCBjbWRuYW1lcyBtYWluX2NtZHMsIG90aGVyX2NtZHM7CisJc3RhdGljIGludCBsb2FkZWQ7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsX3N0cmF0ZWd5KTsgaSsrKQorCQlpZiAoIXN0cmNtcChuYW1lLCBhbGxfc3RyYXRlZ3lbaV0ubmFtZSkpCisJCQlyZXR1cm4gJmFsbF9zdHJhdGVneVtpXTsKKworCWlmICghbG9hZGVkKSB7CisJCXN0cnVjdCBjbWRuYW1lcyBub3Rfc3RyYXRlZ2llczsKKwkJbG9hZGVkID0gMTsKKworCQltZW1zZXQoJm5vdF9zdHJhdGVnaWVzLCAwLCBzaXplb2Yoc3RydWN0IGNtZG5hbWVzKSk7CisJCWxvYWRfY29tbWFuZF9saXN0KCJnaXQtbWVyZ2UtIiwgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCQlmb3IgKGkgPSAwOyBpIDwgbWFpbl9jbWRzLmNudDsgaSsrKSB7CisJCQlpbnQgaiwgZm91bmQgPSAwOworCQkJc3RydWN0IGNtZG5hbWUgKmVudCA9IG1haW5fY21kcy5uYW1lc1tpXTsKKwkJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFsbF9zdHJhdGVneSk7IGorKykKKwkJCQlpZiAoIXN0cm5jbXAoZW50LT5uYW1lLCBhbGxfc3RyYXRlZ3lbal0ubmFtZSwgZW50LT5sZW4pCisJCQkJCQkmJiAhYWxsX3N0cmF0ZWd5W2pdLm5hbWVbZW50LT5sZW5dKQorCQkJCQlmb3VuZCA9IDE7CisJCQlpZiAoIWZvdW5kKQorCQkJCWFkZF9jbWRuYW1lKCZub3Rfc3RyYXRlZ2llcywgZW50LT5uYW1lLCBlbnQtPmxlbik7CisJCX0KKwkJZXhjbHVkZV9jbWRzKCZtYWluX2NtZHMsICZub3Rfc3RyYXRlZ2llcyk7CisJfQorCWlmICghaXNfaW5fY21kbGlzdCgmbWFpbl9jbWRzLCBuYW1lKSAmJiAhaXNfaW5fY21kbGlzdCgmb3RoZXJfY21kcywgbmFtZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iKSwgbmFtZSk7CisJCWZwcmludGYoc3RkZXJyLCBfKCJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IikpOworCQlmb3IgKGkgPSAwOyBpIDwgbWFpbl9jbWRzLmNudDsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICIgJXMiLCBtYWluX2NtZHMubmFtZXNbaV0tPm5hbWUpOworCQlmcHJpbnRmKHN0ZGVyciwgIi5cbiIpOworCQlpZiAob3RoZXJfY21kcy5jbnQpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIpKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBvdGhlcl9jbWRzLmNudDsgaSsrKQorCQkJCWZwcmludGYoc3RkZXJyLCAiICVzIiwgb3RoZXJfY21kcy5uYW1lc1tpXS0+bmFtZSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIi5cbiIpOworCQl9CisJCWV4aXQoMSk7CisJfQorCisJcmV0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmF0ZWd5KSk7CisJcmV0LT5uYW1lID0geHN0cmR1cChuYW1lKTsKKwlyZXQtPmF0dHIgPSBOT19UUklWSUFMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJhdGVneShzdHJ1Y3Qgc3RyYXRlZ3kgKnMpCit7CisJQUxMT0NfR1JPVyh1c2Vfc3RyYXRlZ2llcywgdXNlX3N0cmF0ZWdpZXNfbnIgKyAxLCB1c2Vfc3RyYXRlZ2llc19hbGxvYyk7CisJdXNlX3N0cmF0ZWdpZXNbdXNlX3N0cmF0ZWdpZXNfbnIrK10gPSBzOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9zdHJhdGVneShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXJldHVybiAwOworCisJYXBwZW5kX3N0cmF0ZWd5KGdldF9zdHJhdGVneShuYW1lKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3goY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXJldHVybiAwOworCisJQUxMT0NfR1JPVyh4b3B0cywgeG9wdHNfbnIgKyAxLCB4b3B0c19hbGxvYyk7CisJeG9wdHNbeG9wdHNfbnIrK10gPSB4c3RyZHVwKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX24oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCXNob3dfZGlmZnN0YXQgPSB1bnNldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9tZXJnZV9vcHRpb25zW10gPSB7CisJeyBPUFRJT05fQ0FMTEJBQ0ssICduJywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTl8oImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiKSwKKwkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfbiB9LAorCU9QVF9CT09MKDAsICJzdGF0IiwgJnNob3dfZGlmZnN0YXQsCisJCU5fKCJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiKSksCisJT1BUX0JPT0woMCwgInN1bW1hcnkiLCAmc2hvd19kaWZmc3RhdCwgTl8oIihzeW5vbnltIHRvIC0tc3RhdCkiKSksCisJeyBPUFRJT05fSU5URUdFUiwgMCwgImxvZyIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJICBOXygiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIiksCisJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCBERUZBVUxUX01FUkdFX0xPR19MRU4gfSwKKwlPUFRfQk9PTCgwLCAic3F1YXNoIiwgJnNxdWFzaCwKKwkJTl8oImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIikpLAorCU9QVF9CT09MKDAsICJjb21taXQiLCAmb3B0aW9uX2NvbW1pdCwKKwkJTl8oInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIpKSwKKwlPUFRfQk9PTCgnZScsICJlZGl0IiwgJm9wdGlvbl9lZGl0LAorCQlOXygiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIikpLAorCU9QVF9DTEVBTlVQKCZjbGVhbnVwX2FyZyksCisJT1BUX1NFVF9JTlQoMCwgImZmIiwgJmZhc3RfZm9yd2FyZCwgTl8oImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiKSwgRkZfQUxMT1cpLAorCU9QVF9TRVRfSU5UX0YoMCwgImZmLW9ubHkiLCAmZmFzdF9mb3J3YXJkLAorCQkgICAgICBOXygiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIpLAorCQkgICAgICBGRl9PTkxZLCBQQVJTRV9PUFRfTk9ORUcpLAorCU9QVF9SRVJFUkVfQVVUT1VQREFURSgmYWxsb3dfcmVyZXJlX2F1dG8pLAorCU9QVF9CT09MKDAsICJ2ZXJpZnktc2lnbmF0dXJlcyIsICZ2ZXJpZnlfc2lnbmF0dXJlcywKKwkJTl8oInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIpKSwKKwlPUFRfQ0FMTEJBQ0soJ3MnLCAic3RyYXRlZ3kiLCAmdXNlX3N0cmF0ZWdpZXMsIE5fKCJzdHJhdGVneSIpLAorCQlOXygibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIiksIG9wdGlvbl9wYXJzZV9zdHJhdGVneSksCisJT1BUX0NBTExCQUNLKCdYJywgInN0cmF0ZWd5LW9wdGlvbiIsICZ4b3B0cywgTl8oIm9wdGlvbj12YWx1ZSIpLAorCQlOXygib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIpLCBvcHRpb25fcGFyc2VfeCksCisJT1BUX0NBTExCQUNLKCdtJywgIm1lc3NhZ2UiLCAmbWVyZ2VfbXNnLCBOXygibWVzc2FnZSIpLAorCQlOXygibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIiksCisJCW9wdGlvbl9wYXJzZV9tZXNzYWdlKSwKKwl7IE9QVElPTl9MT1dMRVZFTF9DQUxMQkFDSywgJ0YnLCAiZmlsZSIsICZtZXJnZV9tc2csIE5fKCJwYXRoIiksCisJCU5fKCJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIiksIFBBUlNFX09QVF9OT05FRywKKwkJTlVMTCwgMCwgb3B0aW9uX3JlYWRfbWVzc2FnZSB9LAorCU9QVF9fVkVSQk9TSVRZKCZ2ZXJib3NpdHkpLAorCU9QVF9CT09MKDAsICJhYm9ydCIsICZhYm9ydF9jdXJyZW50X21lcmdlLAorCQlOXygiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiKSksCisJT1BUX0JPT0woMCwgInF1aXQiLCAmcXVpdF9jdXJyZW50X21lcmdlLAorCQlOXygiLS1hYm9ydCBidXQgbGVhdmUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhbG9uZSIpKSwKKwlPUFRfQk9PTCgwLCAiY29udGludWUiLCAmY29udGludWVfY3VycmVudF9tZXJnZSwKKwkJTl8oImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIikpLAorCU9QVF9CT09MKDAsICJhbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIiwgJmFsbG93X3VucmVsYXRlZF9oaXN0b3JpZXMsCisJCSBOXygiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIikpLAorCU9QVF9TRVRfSU5UKDAsICJwcm9ncmVzcyIsICZzaG93X3Byb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIiksIDEpLAorCXsgT1BUSU9OX1NUUklORywgJ1MnLCAiZ3BnLXNpZ24iLCAmc2lnbl9jb21taXQsIE5fKCJrZXktaWQiKSwKKwkgIE5fKCJHUEcgc2lnbiBjb21taXQiKSwgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCU9QVF9CT09MKDAsICJvdmVyd3JpdGUtaWdub3JlIiwgJm92ZXJ3cml0ZV9pZ25vcmUsIE5fKCJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiKSksCisJT1BUX0JPT0woMCwgInNpZ25vZmYiLCAmc2lnbm9mZiwgTl8oImFkZCBTaWduZWQtb2ZmLWJ5OiIpKSwKKwlPUFRfQk9PTCgwLCAibm8tdmVyaWZ5IiwgJm5vX3ZlcmlmeSwgTl8oImJ5cGFzcyBwcmUtbWVyZ2UtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGludCBzYXZlX3N0YXRlKHN0cnVjdCBvYmplY3RfaWQgKnN0YXNoKQoreworCWludCBsZW47CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7InN0YXNoIiwgImNyZWF0ZSIsIE5VTEx9OworCWludCByYyA9IC0xOworCisJY3AuYXJndiA9IGFyZ3Y7CisJY3Aub3V0ID0gLTE7CisJY3AuZ2l0X2NtZCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQlkaWUoXygiY291bGQgbm90IHJ1biBzdGFzaC4iKSk7CisJbGVuID0gc3RyYnVmX3JlYWQoJmJ1ZmZlciwgY3Aub3V0LCAxMDI0KTsKKwljbG9zZShjcC5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjcCkgfHwgbGVuIDwgMCkKKwkJZGllKF8oInN0YXNoIGZhaWxlZCIpKTsKKwllbHNlIGlmICghbGVuKQkJLyogbm8gY2hhbmdlcyAqLworCQlnb3RvIG91dDsKKwlzdHJidWZfc2V0bGVuKCZidWZmZXIsIGJ1ZmZlci5sZW4tMSk7CisJaWYgKGdldF9vaWQoYnVmZmVyLmJ1Ziwgc3Rhc2gpKQorCQlkaWUoXygibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIpLCBidWZmZXIuYnVmKTsKKwlyYyA9IDA7CitvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCByZWFkX2VtcHR5KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IHZlcmJvc2UpCit7CisJaW50IGkgPSAwOworCWNvbnN0IGNoYXIgKmFyZ3NbN107CisKKwlhcmdzW2krK10gPSAicmVhZC10cmVlIjsKKwlpZiAodmVyYm9zZSkKKwkJYXJnc1tpKytdID0gIi12IjsKKwlhcmdzW2krK10gPSAiLW0iOworCWFyZ3NbaSsrXSA9ICItdSI7CisJYXJnc1tpKytdID0gZW1wdHlfdHJlZV9vaWRfaGV4KCk7CisJYXJnc1tpKytdID0gb2lkX3RvX2hleChvaWQpOworCWFyZ3NbaV0gPSBOVUxMOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MsIFJVTl9HSVRfQ01EKSkKKwkJZGllKF8oInJlYWQtdHJlZSBmYWlsZWQiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2hhcmQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgaSA9IDA7CisJY29uc3QgY2hhciAqYXJnc1s2XTsKKworCWFyZ3NbaSsrXSA9ICJyZWFkLXRyZWUiOworCWlmICh2ZXJib3NlKQorCQlhcmdzW2krK10gPSAiLXYiOworCWFyZ3NbaSsrXSA9ICItLXJlc2V0IjsKKwlhcmdzW2krK10gPSAiLXUiOworCWFyZ3NbaSsrXSA9IG9pZF90b19oZXgob2lkKTsKKwlhcmdzW2ldID0gTlVMTDsKKworCWlmIChydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fR0lUX0NNRCkpCisJCWRpZShfKCJyZWFkLXRyZWUgZmFpbGVkIikpOworfQorCitzdGF0aWMgdm9pZCByZXN0b3JlX3N0YXRlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmhlYWQsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnN0YXNoKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphcmdzW10gPSB7ICJzdGFzaCIsICJhcHBseSIsIE5VTEwsIE5VTEwgfTsKKworCWlmIChpc19udWxsX29pZChzdGFzaCkpCisJCXJldHVybjsKKworCXJlc2V0X2hhcmQoaGVhZCwgMSk7CisKKwlhcmdzWzJdID0gb2lkX3RvX2hleChzdGFzaCk7CisKKwkvKgorCSAqIEl0IGlzIE9LIHRvIGlnbm9yZSBlcnJvciBoZXJlLCBmb3IgZXhhbXBsZSB3aGVuIHRoZXJlIHdhcworCSAqIG5vdGhpbmcgdG8gcmVzdG9yZS4KKwkgKi8KKwlydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fR0lUX0NNRCk7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7Cit9CisKKy8qIFRoaXMgaXMgY2FsbGVkIHdoZW4gbm8gbWVyZ2Ugd2FzIG5lY2Vzc2FyeS4gKi8KK3N0YXRpYyB2b2lkIGZpbmlzaF91cF90b19kYXRlKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpZiAodmVyYm9zaXR5ID49IDApCisJCXByaW50ZigiJXMlc1xuIiwgc3F1YXNoID8gXygiIChub3RoaW5nIHRvIHNxdWFzaCkiKSA6ICIiLCBtc2cpOworCXJlbW92ZV9tZXJnZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnkpOworfQorCitzdGF0aWMgdm9pZCBzcXVhc2hfbWVzc2FnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjb21taXRfbGlzdCAqajsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCisJcHJpbnRmKF8oIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIpKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIE5VTEwpOworCXJldi5pZ25vcmVfbWVyZ2VzID0gMTsKKwlyZXYuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX01FRElVTTsKKworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsICZjb21taXQtPm9iamVjdCwgTlVMTCk7CisKKwlmb3IgKGogPSByZW1vdGVoZWFkczsgajsgaiA9IGotPm5leHQpCisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2LCAmai0+aXRlbS0+b2JqZWN0LCBOVUxMKTsKKworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBOVUxMKTsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwljdHguYWJicmV2ID0gcmV2LmFiYnJldjsKKwljdHguZGF0ZV9tb2RlID0gcmV2LmRhdGVfbW9kZTsKKwljdHguZm10ID0gcmV2LmNvbW1pdF9mb3JtYXQ7CisKKwlzdHJidWZfYWRkc3RyKCZvdXQsICJTcXVhc2hlZCBjb21taXQgb2YgdGhlIGZvbGxvd2luZzpcbiIpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXYpKSAhPSBOVUxMKSB7CisJCXN0cmJ1Zl9hZGRjaCgmb3V0LCAnXG4nKTsKKwkJc3RyYnVmX2FkZGYoJm91dCwgImNvbW1pdCAlc1xuIiwKKwkJCW9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQlwcmV0dHlfcHJpbnRfY29tbWl0KCZjdHgsIGNvbW1pdCwgJm91dCk7CisJfQorCXdyaXRlX2ZpbGVfYnVmKGdpdF9wYXRoX3NxdWFzaF9tc2codGhlX3JlcG9zaXRvcnkpLCBvdXQuYnVmLCBvdXQubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoKHN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0LAorCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLAorCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfaGVhZCwgY29uc3QgY2hhciAqbXNnKQoreworCXN0cnVjdCBzdHJidWYgcmVmbG9nX21lc3NhZ2UgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpoZWFkID0gJmhlYWRfY29tbWl0LT5vYmplY3Qub2lkOworCisJaWYgKCFtc2cpCisJCXN0cmJ1Zl9hZGRzdHIoJnJlZmxvZ19tZXNzYWdlLCBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIikpOworCWVsc2UgeworCQlpZiAodmVyYm9zaXR5ID49IDApCisJCQlwcmludGYoIiVzXG4iLCBtc2cpOworCQlzdHJidWZfYWRkZigmcmVmbG9nX21lc3NhZ2UsICIlczogJXMiLAorCQkJZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpLCBtc2cpOworCX0KKwlpZiAoc3F1YXNoKSB7CisJCXNxdWFzaF9tZXNzYWdlKGhlYWRfY29tbWl0LCByZW1vdGVoZWFkcyk7CisJfSBlbHNlIHsKKwkJaWYgKHZlcmJvc2l0eSA+PSAwICYmICFtZXJnZV9tc2cubGVuKQorCQkJcHJpbnRmKF8oIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIpKTsKKwkJZWxzZSB7CisJCQljb25zdCBjaGFyICphcmd2X2djX2F1dG9bXSA9IHsgImdjIiwgIi0tYXV0byIsIE5VTEwgfTsKKwkJCXVwZGF0ZV9yZWYocmVmbG9nX21lc3NhZ2UuYnVmLCAiSEVBRCIsIG5ld19oZWFkLCBoZWFkLAorCQkJCSAgIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCQkJLyoKKwkJCSAqIFdlIGlnbm9yZSBlcnJvcnMgaW4gJ2djIC0tYXV0bycsIHNpbmNlIHRoZQorCQkJICogdXNlciBzaG91bGQgc2VlIHRoZW0uCisJCQkgKi8KKwkJCWNsb3NlX29iamVjdF9zdG9yZSh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cyk7CisJCQlydW5fY29tbWFuZF92X29wdChhcmd2X2djX2F1dG8sIFJVTl9HSVRfQ01EKTsKKwkJfQorCX0KKwlpZiAobmV3X2hlYWQgJiYgc2hvd19kaWZmc3RhdCkgeworCQlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdHM7CisJCXJlcG9fZGlmZl9zZXR1cCh0aGVfcmVwb3NpdG9yeSwgJm9wdHMpOworCQlvcHRzLnN0YXRfd2lkdGggPSAtMTsgLyogdXNlIGZ1bGwgdGVybWluYWwgd2lkdGggKi8KKwkJb3B0cy5zdGF0X2dyYXBoX3dpZHRoID0gLTE7IC8qIHJlc3BlY3Qgc3RhdEdyYXBoV2lkdGggY29uZmlnICovCisJCW9wdHMub3V0cHV0X2Zvcm1hdCB8PQorCQkJRElGRl9GT1JNQVRfU1VNTUFSWSB8IERJRkZfRk9STUFUX0RJRkZTVEFUOworCQlvcHRzLmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7CisJCWRpZmZfc2V0dXBfZG9uZSgmb3B0cyk7CisJCWRpZmZfdHJlZV9vaWQoaGVhZCwgbmV3X2hlYWQsICIiLCAmb3B0cyk7CisJCWRpZmZjb3JlX3N0ZCgmb3B0cyk7CisJCWRpZmZfZmx1c2goJm9wdHMpOworCX0KKworCS8qIFJ1biBhIHBvc3QtbWVyZ2UgaG9vayAqLworCXJ1bl9ob29rX2xlKE5VTEwsICJwb3N0LW1lcmdlIiwgc3F1YXNoID8gIjEiIDogIjAiLCBOVUxMKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZsb2dfbWVzc2FnZSk7Cit9CisKKy8qIEdldCB0aGUgbmFtZSBmb3IgdGhlIG1lcmdlIGNvbW1pdCdzIG1lc3NhZ2UuICovCitzdGF0aWMgdm9pZCBtZXJnZV9uYW1lKGNvbnN0IGNoYXIgKnJlbW90ZSwgc3RydWN0IHN0cmJ1ZiAqbXNnKQoreworCXN0cnVjdCBjb21taXQgKnJlbW90ZV9oZWFkOworCXN0cnVjdCBvYmplY3RfaWQgYnJhbmNoX2hlYWQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJuYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICpkZXNjOworCWNvbnN0IGNoYXIgKnB0cjsKKwljaGFyICpmb3VuZF9yZWY7CisJaW50IGxlbiwgZWFybHk7CisKKwlzdHJidWZfYnJhbmNobmFtZSgmYm5hbWUsIHJlbW90ZSwgMCk7CisJcmVtb3RlID0gYm5hbWUuYnVmOworCisJb2lkY2xyKCZicmFuY2hfaGVhZCk7CisJcmVtb3RlX2hlYWQgPSBnZXRfbWVyZ2VfcGFyZW50KHJlbW90ZSk7CisJaWYgKCFyZW1vdGVfaGVhZCkKKwkJZGllKF8oIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiKSwgcmVtb3RlKTsKKworCWlmIChkd2ltX3JlZihyZW1vdGUsIHN0cmxlbihyZW1vdGUpLCAmYnJhbmNoX2hlYWQsICZmb3VuZF9yZWYpID4gMCkgeworCQlpZiAoc3RhcnRzX3dpdGgoZm91bmRfcmVmLCAicmVmcy9oZWFkcy8iKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0YnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCWlmIChzdGFydHNfd2l0aChmb3VuZF9yZWYsICJyZWZzL3RhZ3MvIikpIHsKKwkJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdHRhZyAnJXMnIG9mIC5cbiIsCisJCQkJICAgIG9pZF90b19oZXgoJmJyYW5jaF9oZWFkKSwgcmVtb3RlKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAoc3RhcnRzX3dpdGgoZm91bmRfcmVmLCAicmVmcy9yZW1vdGVzLyIpKSB7CisJCQlzdHJidWZfYWRkZihtc2csICIlc1x0XHRyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCisJLyogU2VlIGlmIHJlbW90ZSBtYXRjaGVzIDxuYW1lPl5eXi4uIG9yIDxuYW1lPn48bnVtYmVyPiAqLworCWZvciAobGVuID0gMCwgcHRyID0gcmVtb3RlICsgc3RybGVuKHJlbW90ZSk7CisJICAgICByZW1vdGUgPCBwdHIgJiYgcHRyWy0xXSA9PSAnXic7CisJICAgICBwdHItLSkKKwkJbGVuKys7CisJaWYgKGxlbikKKwkJZWFybHkgPSAxOworCWVsc2UgeworCQllYXJseSA9IDA7CisJCXB0ciA9IHN0cnJjaHIocmVtb3RlLCAnficpOworCQlpZiAocHRyKSB7CisJCQlpbnQgc2Vlbl9ub256ZXJvID0gMDsKKworCQkJbGVuKys7IC8qIGNvdW50IH4gKi8KKwkJCXdoaWxlICgqKytwdHIgJiYgaXNkaWdpdCgqcHRyKSkgeworCQkJCXNlZW5fbm9uemVybyB8PSAoKnB0ciAhPSAnMCcpOworCQkJCWxlbisrOworCQkJfQorCQkJaWYgKCpwdHIpCisJCQkJbGVuID0gMDsgLyogbm90IC4uLn48bnVtYmVyPiAqLworCQkJZWxzZSBpZiAoc2Vlbl9ub256ZXJvKQorCQkJCWVhcmx5ID0gMTsKKwkJCWVsc2UgaWYgKGxlbiA9PSAxKQorCQkJCWVhcmx5ID0gMTsgLyogIm5hbWV+IiBpcyAibmFtZX4xIiEgKi8KKwkJfQorCX0KKwlpZiAobGVuKSB7CisJCXN0cnVjdCBzdHJidWYgdHJ1bmFtZSA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmdHJ1bmFtZSwgInJlZnMvaGVhZHMvJXMiLCByZW1vdGUpOworCQlzdHJidWZfc2V0bGVuKCZ0cnVuYW1lLCB0cnVuYW1lLmxlbiAtIGxlbik7CisJCWlmIChyZWZfZXhpc3RzKHRydW5hbWUuYnVmKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLAorCQkJCSAgICAiJXNcdFx0YnJhbmNoICclcyclcyBvZiAuXG4iLAorCQkJCSAgICBvaWRfdG9faGV4KCZyZW1vdGVfaGVhZC0+b2JqZWN0Lm9pZCksCisJCQkJICAgIHRydW5hbWUuYnVmICsgMTEsCisJCQkJICAgIChlYXJseSA/ICIgKGVhcmx5IHBhcnQpIiA6ICIiKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmdHJ1bmFtZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnRydW5hbWUpOworCX0KKworCWRlc2MgPSBtZXJnZV9yZW1vdGVfdXRpbChyZW1vdGVfaGVhZCk7CisJaWYgKGRlc2MgJiYgZGVzYy0+b2JqICYmIGRlc2MtPm9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdCVzICclcydcbiIsCisJCQkgICAgb2lkX3RvX2hleCgmZGVzYy0+b2JqLT5vaWQpLAorCQkJICAgIHR5cGVfbmFtZShkZXNjLT5vYmotPnR5cGUpLAorCQkJICAgIHJlbW90ZSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzdHJidWZfYWRkZihtc2csICIlc1x0XHRjb21taXQgJyVzJ1xuIiwKKwkJb2lkX3RvX2hleCgmcmVtb3RlX2hlYWQtPm9iamVjdC5vaWQpLCByZW1vdGUpOworY2xlYW51cDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9icmFuY2hfbWVyZ2Vfb3B0aW9ucyhjaGFyICpibW8pCit7CisJY29uc3QgY2hhciAqKmFyZ3Y7CisJaW50IGFyZ2M7CisKKwlpZiAoIWJtbykKKwkJcmV0dXJuOworCWFyZ2MgPSBzcGxpdF9jbWRsaW5lKGJtbywgJmFyZ3YpOworCWlmIChhcmdjIDwgMCkKKwkJZGllKF8oIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiKSwgYnJhbmNoLAorCQkgICAgXyhzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGFyZ2MpKSk7CisJUkVBTExPQ19BUlJBWShhcmd2LCBhcmdjICsgMik7CisJTU9WRV9BUlJBWShhcmd2ICsgMSwgYXJndiwgYXJnYyArIDEpOworCWFyZ2MrKzsKKwlhcmd2WzBdID0gImJyYW5jaC4qLm1lcmdlb3B0aW9ucyI7CisJcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBidWlsdGluX21lcmdlX29wdGlvbnMsCisJCSAgICAgIGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsIDApOworCWZyZWUoYXJndik7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X21lcmdlX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGJyYW5jaCAmJiBzdGFydHNfd2l0aChrLCAiYnJhbmNoLiIpICYmCisJCXN0YXJ0c193aXRoKGsgKyA3LCBicmFuY2gpICYmCisJCSFzdHJjbXAoayArIDcgKyBzdHJsZW4oYnJhbmNoKSwgIi5tZXJnZW9wdGlvbnMiKSkgeworCQlmcmVlKGJyYW5jaF9tZXJnZW9wdGlvbnMpOworCQlicmFuY2hfbWVyZ2VvcHRpb25zID0geHN0cmR1cCh2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoaywgIm1lcmdlLmRpZmZzdGF0IikgfHwgIXN0cmNtcChrLCAibWVyZ2Uuc3RhdCIpKQorCQlzaG93X2RpZmZzdGF0ID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCWVsc2UgaWYgKCFzdHJjbXAoaywgIm1lcmdlLnZlcmlmeXNpZ25hdHVyZXMiKSkKKwkJdmVyaWZ5X3NpZ25hdHVyZXMgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJZWxzZSBpZiAoIXN0cmNtcChrLCAicHVsbC50d29oZWFkIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmcHVsbF90d29oZWFkLCBrLCB2KTsKKwllbHNlIGlmICghc3RyY21wKGssICJwdWxsLm9jdG9wdXMiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZwdWxsX29jdG9wdXMsIGssIHYpOworCWVsc2UgaWYgKCFzdHJjbXAoaywgImNvbW1pdC5jbGVhbnVwIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY2xlYW51cF9hcmcsIGssIHYpOworCWVsc2UgaWYgKCFzdHJjbXAoaywgIm1lcmdlLnJlbm9ybWFsaXplIikpCisJCW9wdGlvbl9yZW5vcm1hbGl6ZSA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwllbHNlIGlmICghc3RyY21wKGssICJtZXJnZS5mZiIpKSB7CisJCWludCBib29sdmFsID0gZ2l0X3BhcnNlX21heWJlX2Jvb2wodik7CisJCWlmICgwIDw9IGJvb2x2YWwpIHsKKwkJCWZhc3RfZm9yd2FyZCA9IGJvb2x2YWwgPyBGRl9BTExPVyA6IEZGX05POworCQl9IGVsc2UgaWYgKHYgJiYgIXN0cmNtcCh2LCAib25seSIpKSB7CisJCQlmYXN0X2ZvcndhcmQgPSBGRl9PTkxZOworCQl9IC8qIGRvIG5vdCBiYXJmIG9uIHZhbHVlcyBmcm9tIGZ1dHVyZSB2ZXJzaW9ucyBvZiBnaXQgKi8KKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJtZXJnZS5kZWZhdWx0dG91cHN0cmVhbSIpKSB7CisJCWRlZmF1bHRfdG9fdXBzdHJlYW0gPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChrLCAiY29tbWl0LmdwZ3NpZ24iKSkgeworCQlzaWduX2NvbW1pdCA9IGdpdF9jb25maWdfYm9vbChrLCB2KSA/ICIiIDogTlVMTDsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJncGcubWludHJ1c3RsZXZlbCIpKSB7CisJCWNoZWNrX3RydXN0X2xldmVsID0gMDsKKwl9CisKKwlzdGF0dXMgPSBmbXRfbWVyZ2VfbXNnX2NvbmZpZyhrLCB2LCBjYik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyhrLCB2LCBOVUxMKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBnaXRfZGlmZl91aV9jb25maWcoaywgdiwgY2IpOworfQorCitzdGF0aWMgaW50IHJlYWRfdHJlZV90cml2aWFsKHN0cnVjdCBvYmplY3RfaWQgKmNvbW1vbiwgc3RydWN0IG9iamVjdF9pZCAqaGVhZCwKKwkJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqb25lKQoreworCWludCBpLCBucl90cmVlcyA9IDA7CisJc3RydWN0IHRyZWUgKnRyZWVzW01BWF9VTlBBQ0tfVFJFRVNdOworCXN0cnVjdCB0cmVlX2Rlc2MgdFtNQVhfVU5QQUNLX1RSRUVTXTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMjsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMudXBkYXRlID0gMTsKKwlvcHRzLnZlcmJvc2VfdXBkYXRlID0gMTsKKwlvcHRzLnRyaXZpYWxfbWVyZ2VzX29ubHkgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCXRyZWVzW25yX3RyZWVzXSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoY29tbW9uKTsKKwlpZiAoIXRyZWVzW25yX3RyZWVzKytdKQorCQlyZXR1cm4gLTE7CisJdHJlZXNbbnJfdHJlZXNdID0gcGFyc2VfdHJlZV9pbmRpcmVjdChoZWFkKTsKKwlpZiAoIXRyZWVzW25yX3RyZWVzKytdKQorCQlyZXR1cm4gLTE7CisJdHJlZXNbbnJfdHJlZXNdID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvbmUpOworCWlmICghdHJlZXNbbnJfdHJlZXMrK10pCisJCXJldHVybiAtMTsKKwlvcHRzLmZuID0gdGhyZWV3YXlfbWVyZ2U7CisJY2FjaGVfdHJlZV9mcmVlKCZhY3RpdmVfY2FjaGVfdHJlZSk7CisJZm9yIChpID0gMDsgaSA8IG5yX3RyZWVzOyBpKyspIHsKKwkJcGFyc2VfdHJlZSh0cmVlc1tpXSk7CisJCWluaXRfdHJlZV9kZXNjKHQraSwgdHJlZXNbaV0tPmJ1ZmZlciwgdHJlZXNbaV0tPnNpemUpOworCX0KKwlpZiAodW5wYWNrX3RyZWVzKG5yX3RyZWVzLCB0LCAmb3B0cykpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdHJlZV90cml2aWFsKHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpZiAod3JpdGVfY2FjaGVfYXNfdHJlZShvaWQsIDAsIE5VTEwpKQorCQlkaWUoXygiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIpKTsKK30KKworc3RhdGljIGludCB0cnlfbWVyZ2Vfc3RyYXRlZ3koY29uc3QgY2hhciAqc3RyYXRlZ3ksIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uLAorCQkJICAgICAgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcywKKwkJCSAgICAgIHN0cnVjdCBjb21taXQgKmhlYWQpCit7CisJY29uc3QgY2hhciAqaGVhZF9hcmcgPSAiSEVBRCI7CisKKwlpZiAocmVmcmVzaF9hbmRfd3JpdGVfY2FjaGUoUkVGUkVTSF9RVUlFVCwgU0tJUF9JRl9VTkNIQU5HRUQsIDApIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iKSk7CisKKwlpZiAoIXN0cmNtcChzdHJhdGVneSwgInJlY3Vyc2l2ZSIpIHx8ICFzdHJjbXAoc3RyYXRlZ3ksICJzdWJ0cmVlIikpIHsKKwkJc3RydWN0IGxvY2tfZmlsZSBsb2NrID0gTE9DS19JTklUOworCQlpbnQgY2xlYW4sIHg7CisJCXN0cnVjdCBjb21taXQgKnJlc3VsdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpyZXZlcnNlZCA9IE5VTEw7CisJCXN0cnVjdCBtZXJnZV9vcHRpb25zIG87CisJCXN0cnVjdCBjb21taXRfbGlzdCAqajsKKworCQlpZiAocmVtb3RlaGVhZHMtPm5leHQpIHsKKwkJCWVycm9yKF8oIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iKSk7CisJCQlyZXR1cm4gMjsKKwkJfQorCisJCWluaXRfbWVyZ2Vfb3B0aW9ucygmbywgdGhlX3JlcG9zaXRvcnkpOworCQlpZiAoIXN0cmNtcChzdHJhdGVneSwgInN1YnRyZWUiKSkKKwkJCW8uc3VidHJlZV9zaGlmdCA9ICIiOworCisJCW8ucmVub3JtYWxpemUgPSBvcHRpb25fcmVub3JtYWxpemU7CisJCW8uc2hvd19yZW5hbWVfcHJvZ3Jlc3MgPQorCQkJc2hvd19wcm9ncmVzcyA9PSAtMSA/IGlzYXR0eSgyKSA6IHNob3dfcHJvZ3Jlc3M7CisKKwkJZm9yICh4ID0gMDsgeCA8IHhvcHRzX25yOyB4KyspCisJCQlpZiAocGFyc2VfbWVyZ2Vfb3B0KCZvLCB4b3B0c1t4XSkpCisJCQkJZGllKF8oIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiKSwgeG9wdHNbeF0pOworCisJCW8uYnJhbmNoMSA9IGhlYWRfYXJnOworCQlvLmJyYW5jaDIgPSBtZXJnZV9yZW1vdGVfdXRpbChyZW1vdGVoZWFkcy0+aXRlbSktPm5hbWU7CisKKwkJZm9yIChqID0gY29tbW9uOyBqOyBqID0gai0+bmV4dCkKKwkJCWNvbW1pdF9saXN0X2luc2VydChqLT5pdGVtLCAmcmV2ZXJzZWQpOworCisJCWhvbGRfbG9ja2VkX2luZGV4KCZsb2NrLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJCWNsZWFuID0gbWVyZ2VfcmVjdXJzaXZlKCZvLCBoZWFkLAorCQkJCXJlbW90ZWhlYWRzLT5pdGVtLCByZXZlcnNlZCwgJnJlc3VsdCk7CisJCWlmIChjbGVhbiA8IDApCisJCQlleGl0KDEyOCk7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2ssCisJCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKQorCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSAlcyIpLCBnZXRfaW5kZXhfZmlsZSgpKTsKKwkJcmV0dXJuIGNsZWFuID8gMCA6IDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHRyeV9tZXJnZV9jb21tYW5kKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkgc3RyYXRlZ3ksIHhvcHRzX25yLCB4b3B0cywKKwkJCQkJIGNvbW1vbiwgaGVhZF9hcmcsIHJlbW90ZWhlYWRzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvdW50X2RpZmZfZmlsZXMoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJaW50ICpjb3VudCA9IGRhdGE7CisKKwkoKmNvdW50KSArPSBxLT5ucjsKK30KKworc3RhdGljIGludCBjb3VudF91bm1lcmdlZF9lbnRyaWVzKHZvaWQpCit7CisJaW50IGksIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspCisJCWlmIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbaV0pKQorCQkJcmV0Kys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRfc3RyYXRlZ2llcyhjb25zdCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIGF0dHIpCit7CisJaW50IGk7CisKKwlpZiAoc3RyaW5nKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJpbmdfbGlzdF9zcGxpdCgmbGlzdCwgc3RyaW5nLCAnICcsIC0xKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmbGlzdCkKKwkJCWFwcGVuZF9zdHJhdGVneShnZXRfc3RyYXRlZ3koaXRlbS0+c3RyaW5nKSk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxfc3RyYXRlZ3kpOyBpKyspCisJCWlmIChhbGxfc3RyYXRlZ3lbaV0uYXR0ciAmIGF0dHIpCisJCQlhcHBlbmRfc3RyYXRlZ3koJmFsbF9zdHJhdGVneVtpXSk7CisKK30KKworc3RhdGljIHZvaWQgcmVhZF9tZXJnZV9tc2coc3RydWN0IHN0cmJ1ZiAqbXNnKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGhfbWVyZ2VfbXNnKHRoZV9yZXBvc2l0b3J5KTsKKwlzdHJidWZfcmVzZXQobXNnKTsKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZShtc2csIGZpbGVuYW1lLCAwKSA8IDApCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciKSwgZmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9tZXJnZV9zdGF0ZShzdHJ1Y3QgY29tbWl0X2xpc3QgKik7CitzdGF0aWMgdm9pZCBhYm9ydF9jb21taXQoc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcywgY29uc3QgY2hhciAqZXJyX21zZykKK3sKKwlpZiAoZXJyX21zZykKKwkJZXJyb3IoIiVzIiwgZXJyX21zZyk7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIpKTsKKwl3cml0ZV9tZXJnZV9zdGF0ZShyZW1vdGVoZWFkcyk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbWVyZ2VfZWRpdG9yX2NvbW1lbnRbXSA9CitOXygiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisgICAiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorICAgIlxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIHNjaXNzb3JzX2VkaXRvcl9jb21tZW50W10gPQorTl8oIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbm9fc2Npc3NvcnNfZWRpdG9yX2NvbW1lbnRbXSA9CitOXygiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisgICAidGhlIGNvbW1pdC5cbiIpOworCitzdGF0aWMgdm9pZCB3cml0ZV9tZXJnZV9oZWFkcyhzdHJ1Y3QgY29tbWl0X2xpc3QgKik7CitzdGF0aWMgdm9pZCBwcmVwYXJlX3RvX2NvbW1pdChzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQoreworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqaW5kZXhfZmlsZSA9IGdldF9pbmRleF9maWxlKCk7CisKKwlpZiAoIW5vX3ZlcmlmeSAmJiBydW5fY29tbWl0X2hvb2soMCA8IG9wdGlvbl9lZGl0LCBpbmRleF9maWxlLCAicHJlLW1lcmdlLWNvbW1pdCIsIE5VTEwpKQorCQlhYm9ydF9jb21taXQocmVtb3RlaGVhZHMsIE5VTEwpOworCS8qCisJICogUmUtcmVhZCB0aGUgaW5kZXggYXMgcHJlLW1lcmdlLWNvbW1pdCBob29rIGNvdWxkIGhhdmUgdXBkYXRlZCBpdCwKKwkgKiBhbmQgd3JpdGUgaXQgb3V0IGFzIGEgdHJlZS4gIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2UgaW52b2tlCisJICogdGhlIGVkaXRvciBhbmQgYWZ0ZXIgd2UgaW52b2tlIHJ1bl9zdGF0dXMgYWJvdmUuCisJICovCisJaWYgKGZpbmRfaG9vaygicHJlLW1lcmdlLWNvbW1pdCIpKQorCQlkaXNjYXJkX2NhY2hlKCk7CisJcmVhZF9jYWNoZV9mcm9tKGluZGV4X2ZpbGUpOworCXN0cmJ1Zl9hZGRidWYoJm1zZywgJm1lcmdlX21zZyk7CisJaWYgKHNxdWFzaCkKKwkJQlVHKCJ0aGUgY29udHJvbCBtdXN0IG5vdCByZWFjaCBoZXJlIHVuZGVyIC0tc3F1YXNoIik7CisJaWYgKDAgPCBvcHRpb25fZWRpdCkgeworCQlzdHJidWZfYWRkY2goJm1zZywgJ1xuJyk7CisJCWlmIChjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX1NDSVNTT1JTKSB7CisJCQl3dF9zdGF0dXNfYXBwZW5kX2N1dF9saW5lKCZtc2cpOworCQkJc3RyYnVmX2NvbW1lbnRlZF9hZGRmKCZtc2csICJcbiIpOworCQl9CisJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmbXNnLCBfKG1lcmdlX2VkaXRvcl9jb21tZW50KSk7CisJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmbXNnLCBfKGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMgPworCQkJc2Npc3NvcnNfZWRpdG9yX2NvbW1lbnQgOgorCQkJbm9fc2Npc3NvcnNfZWRpdG9yX2NvbW1lbnQpLCBjb21tZW50X2xpbmVfY2hhcik7CisJfQorCWlmIChzaWdub2ZmKQorCQlhcHBlbmRfc2lnbm9mZigmbXNnLCBpZ25vcmVfbm9uX3RyYWlsZXIobXNnLmJ1ZiwgbXNnLmxlbiksIDApOworCXdyaXRlX21lcmdlX2hlYWRzKHJlbW90ZWhlYWRzKTsKKwl3cml0ZV9maWxlX2J1ZihnaXRfcGF0aF9tZXJnZV9tc2codGhlX3JlcG9zaXRvcnkpLCBtc2cuYnVmLCBtc2cubGVuKTsKKwlpZiAocnVuX2NvbW1pdF9ob29rKDAgPCBvcHRpb25fZWRpdCwgZ2V0X2luZGV4X2ZpbGUoKSwgInByZXBhcmUtY29tbWl0LW1zZyIsCisJCQkgICAgZ2l0X3BhdGhfbWVyZ2VfbXNnKHRoZV9yZXBvc2l0b3J5KSwgIm1lcmdlIiwgTlVMTCkpCisJCWFib3J0X2NvbW1pdChyZW1vdGVoZWFkcywgTlVMTCk7CisJaWYgKDAgPCBvcHRpb25fZWRpdCkgeworCQlpZiAobGF1bmNoX2VkaXRvcihnaXRfcGF0aF9tZXJnZV9tc2codGhlX3JlcG9zaXRvcnkpLCBOVUxMLCBOVUxMKSkKKwkJCWFib3J0X2NvbW1pdChyZW1vdGVoZWFkcywgTlVMTCk7CisJfQorCisJaWYgKCFub192ZXJpZnkgJiYgcnVuX2NvbW1pdF9ob29rKDAgPCBvcHRpb25fZWRpdCwgZ2V0X2luZGV4X2ZpbGUoKSwKKwkJCQkJICAiY29tbWl0LW1zZyIsCisJCQkJCSAgZ2l0X3BhdGhfbWVyZ2VfbXNnKHRoZV9yZXBvc2l0b3J5KSwgTlVMTCkpCisJCWFib3J0X2NvbW1pdChyZW1vdGVoZWFkcywgTlVMTCk7CisKKwlyZWFkX21lcmdlX21zZygmbXNnKTsKKwljbGVhbnVwX21lc3NhZ2UoJm1zZywgY2xlYW51cF9tb2RlLCAwKTsKKwlpZiAoIW1zZy5sZW4pCisJCWFib3J0X2NvbW1pdChyZW1vdGVoZWFkcywgXygiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIikpOworCXN0cmJ1Zl9yZWxlYXNlKCZtZXJnZV9tc2cpOworCXN0cmJ1Zl9hZGRidWYoJm1lcmdlX21zZywgJm1zZyk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfdHJpdmlhbChzdHJ1Y3QgY29tbWl0ICpoZWFkLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQoreworCXN0cnVjdCBvYmplY3RfaWQgcmVzdWx0X3RyZWUsIHJlc3VsdF9jb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLCAqKnBwdHIgPSAmcGFyZW50czsKKworCWlmIChyZWZyZXNoX2FuZF93cml0ZV9jYWNoZShSRUZSRVNIX1FVSUVULCBTS0lQX0lGX1VOQ0hBTkdFRCwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIpKTsKKworCXdyaXRlX3RyZWVfdHJpdmlhbCgmcmVzdWx0X3RyZWUpOworCXByaW50ZihfKCJXb25kZXJmdWwuXG4iKSk7CisJcHB0ciA9IGNvbW1pdF9saXN0X2FwcGVuZChoZWFkLCBwcHRyKTsKKwlwcHRyID0gY29tbWl0X2xpc3RfYXBwZW5kKHJlbW90ZWhlYWRzLT5pdGVtLCBwcHRyKTsKKwlwcmVwYXJlX3RvX2NvbW1pdChyZW1vdGVoZWFkcyk7CisJaWYgKGNvbW1pdF90cmVlKG1lcmdlX21zZy5idWYsIG1lcmdlX21zZy5sZW4sICZyZXN1bHRfdHJlZSwgcGFyZW50cywKKwkJCSZyZXN1bHRfY29tbWl0LCBOVUxMLCBzaWduX2NvbW1pdCkpCisJCWRpZShfKCJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIpKTsKKwlmaW5pc2goaGVhZCwgcmVtb3RlaGVhZHMsICZyZXN1bHRfY29tbWl0LCAiSW4taW5kZXggbWVyZ2UiKTsKKwlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaW5pc2hfYXV0b21lcmdlKHN0cnVjdCBjb21taXQgKmhlYWQsCisJCQkgICAgaW50IGhlYWRfc3Vic3VtZWQsCisJCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb24sCisJCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcywKKwkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHRfdHJlZSwKKwkJCSAgICBjb25zdCBjaGFyICp3dF9zdHJhdGVneSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCByZXN1bHRfY29tbWl0OworCisJd3JpdGVfdHJlZV90cml2aWFsKHJlc3VsdF90cmVlKTsKKwlmcmVlX2NvbW1pdF9saXN0KGNvbW1vbik7CisJcGFyZW50cyA9IHJlbW90ZWhlYWRzOworCWlmICghaGVhZF9zdWJzdW1lZCB8fCBmYXN0X2ZvcndhcmQgPT0gRkZfTk8pCisJCWNvbW1pdF9saXN0X2luc2VydChoZWFkLCAmcGFyZW50cyk7CisJcHJlcGFyZV90b19jb21taXQocmVtb3RlaGVhZHMpOworCWlmIChjb21taXRfdHJlZShtZXJnZV9tc2cuYnVmLCBtZXJnZV9tc2cubGVuLCByZXN1bHRfdHJlZSwgcGFyZW50cywKKwkJCSZyZXN1bHRfY29tbWl0LCBOVUxMLCBzaWduX2NvbW1pdCkpCisJCWRpZShfKCJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIpKTsKKwlzdHJidWZfYWRkZigmYnVmLCAiTWVyZ2UgbWFkZSBieSB0aGUgJyVzJyBzdHJhdGVneS4iLCB3dF9zdHJhdGVneSk7CisJZmluaXNoKGhlYWQsIHJlbW90ZWhlYWRzLCAmcmVzdWx0X2NvbW1pdCwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmVtb3ZlX21lcmdlX2JyYW5jaF9zdGF0ZSh0aGVfcmVwb3NpdG9yeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VnZ2VzdF9jb25mbGljdHModm9pZCkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlGSUxFICpmcDsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCisJZmlsZW5hbWUgPSBnaXRfcGF0aF9tZXJnZV9tc2codGhlX3JlcG9zaXRvcnkpOworCWZwID0geGZvcGVuKGZpbGVuYW1lLCAiYSIpOworCisJLyoKKwkgKiBXZSBjYW4ndCB1c2UgY2xlYW51cF9tb2RlIGJlY2F1c2UgaWYgd2UncmUgbm90IHVzaW5nIHRoZSBlZGl0b3IsCisJICogZ2V0X2NsZWFudXBfbW9kZSB3aWxsIHJldHVybiBDT01NSVRfTVNHX0NMRUFOVVBfU1BBQ0UgaW5zdGVhZCwgZXZlbgorCSAqIHRob3VnaCB0aGUgbWVzc2FnZSBpcyBtZWFudCB0byBiZSBwcm9jZXNzZWQgbGF0ZXIgYnkgZ2l0LWNvbW1pdC4KKwkgKiBUaHVzLCB3ZSB3aWxsIGdldCB0aGUgY2xlYW51cCBtb2RlIHdoaWNoIGlzIHJldHVybmVkIHdoZW4gd2UgX2FyZV8KKwkgKiB1c2luZyBhbiBlZGl0b3IuCisJICovCisJYXBwZW5kX2NvbmZsaWN0c19oaW50KCZ0aGVfaW5kZXgsICZtc2didWYsCisJCQkgICAgICBnZXRfY2xlYW51cF9tb2RlKGNsZWFudXBfYXJnLCAxKSk7CisJZnB1dHMobXNnYnVmLmJ1ZiwgZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworCWZjbG9zZShmcCk7CisJcmVwb19yZXJlcmUodGhlX3JlcG9zaXRvcnksIGFsbG93X3JlcmVyZV9hdXRvKTsKKwlwcmludGYoXygiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgIgorCQkJImZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iKSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXZhbHVhdGVfcmVzdWx0KHZvaWQpCit7CisJaW50IGNudCA9IDA7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKworCS8qIENoZWNrIGhvdyBtYW55IGZpbGVzIGRpZmZlci4gKi8KKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCAiIik7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0KKwkJRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gY291bnRfZGlmZl9maWxlczsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZjbnQ7CisJcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7CisKKwkvKgorCSAqIENoZWNrIGhvdyBtYW55IHVubWVyZ2VkIGVudHJpZXMgYXJlCisJICogdGhlcmUuCisJICovCisJY250ICs9IGNvdW50X3VubWVyZ2VkX2VudHJpZXMoKTsKKworCXJldHVybiBjbnQ7Cit9CisKKy8qCisgKiBQcmV0ZW5kIGFzIGlmIHRoZSB1c2VyIHRvbGQgdXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVtb3RlLXRyYWNraW5nCisgKiBicmFuY2ggd2UgaGF2ZSBmb3IgdGhlIHVwc3RyZWFtIG9mIHRoZSBjdXJyZW50IGJyYW5jaAorICovCitzdGF0aWMgaW50IHNldHVwX3dpdGhfdXBzdHJlYW0oY29uc3QgY2hhciAqKiphcmd2KQoreworCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7CisJaW50IGk7CisJY29uc3QgY2hhciAqKmFyZ3M7CisKKwlpZiAoIWJyYW5jaCkKKwkJZGllKF8oIk5vIGN1cnJlbnQgYnJhbmNoLiIpKTsKKwlpZiAoIWJyYW5jaC0+cmVtb3RlX25hbWUpCisJCWRpZShfKCJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iKSk7CisJaWYgKCFicmFuY2gtPm1lcmdlX25yKQorCQlkaWUoXygiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIikpOworCisJYXJncyA9IHhjYWxsb2Moc3RfYWRkKGJyYW5jaC0+bWVyZ2VfbnIsIDEpLCBzaXplb2YoY2hhciAqKSk7CisJZm9yIChpID0gMDsgaSA8IGJyYW5jaC0+bWVyZ2VfbnI7IGkrKykgeworCQlpZiAoIWJyYW5jaC0+bWVyZ2VbaV0tPmRzdCkKKwkJCWRpZShfKCJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIiksCisJCQkgICAgYnJhbmNoLT5tZXJnZVtpXS0+c3JjLCBicmFuY2gtPnJlbW90ZV9uYW1lKTsKKwkJYXJnc1tpXSA9IGJyYW5jaC0+bWVyZ2VbaV0tPmRzdDsKKwl9CisJYXJnc1tpXSA9IE5VTEw7CisJKmFyZ3YgPSBhcmdzOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9tZXJnZV9oZWFkcyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqajsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yIChqID0gcmVtb3RlaGVhZHM7IGo7IGogPSBqLT5uZXh0KSB7CisJCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IGotPml0ZW07CisJCXN0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyAqZGVzYzsKKworCQlkZXNjID0gbWVyZ2VfcmVtb3RlX3V0aWwoYyk7CisJCWlmIChkZXNjICYmIGRlc2MtPm9iaikgeworCQkJb2lkID0gJmRlc2MtPm9iai0+b2lkOworCQl9IGVsc2UgeworCQkJb2lkID0gJmMtPm9iamVjdC5vaWQ7CisJCX0KKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCX0KKwl3cml0ZV9maWxlX2J1ZihnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSwgYnVmLmJ1ZiwgYnVmLmxlbik7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJaWYgKGZhc3RfZm9yd2FyZCA9PSBGRl9OTykKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAibm8tZmYiKTsKKwl3cml0ZV9maWxlX2J1ZihnaXRfcGF0aF9tZXJnZV9tb2RlKHRoZV9yZXBvc2l0b3J5KSwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX21lcmdlX3N0YXRlKHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMpCit7CisJd3JpdGVfbWVyZ2VfaGVhZHMocmVtb3RlaGVhZHMpOworCXN0cmJ1Zl9hZGRjaCgmbWVyZ2VfbXNnLCAnXG4nKTsKKwl3cml0ZV9maWxlX2J1ZihnaXRfcGF0aF9tZXJnZV9tc2codGhlX3JlcG9zaXRvcnkpLCBtZXJnZV9tc2cuYnVmLAorCQkgICAgICAgbWVyZ2VfbXNnLmxlbik7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9lZGl0X29wdGlvbih2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyIG5hbWVbXSA9ICJHSVRfTUVSR0VfQVVUT0VESVQiOworCWNvbnN0IGNoYXIgKmUgPSBnZXRlbnYobmFtZSk7CisJc3RydWN0IHN0YXQgc3Rfc3RkaW4sIHN0X3N0ZG91dDsKKworCWlmIChoYXZlX21lc3NhZ2UpCisJCS8qIGFuIGV4cGxpY2l0IC1tIG1zZyB3aXRob3V0IC0tW25vLV1lZGl0ICovCisJCXJldHVybiAwOworCisJaWYgKGUpIHsKKwkJaW50IHYgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbChlKTsKKwkJaWYgKHYgPCAwKQorCQkJZGllKF8oIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciKSwgZSwgbmFtZSk7CisJCXJldHVybiB2OworCX0KKworCS8qIFVzZSBlZGl0b3IgaWYgc3RkaW4gYW5kIHN0ZG91dCBhcmUgdGhlIHNhbWUgYW5kIGlzIGEgdHR5ICovCisJcmV0dXJuICghZnN0YXQoMCwgJnN0X3N0ZGluKSAmJgorCQkhZnN0YXQoMSwgJnN0X3N0ZG91dCkgJiYKKwkJaXNhdHR5KDApICYmIGlzYXR0eSgxKSAmJgorCQlzdF9zdGRpbi5zdF9kZXYgPT0gc3Rfc3Rkb3V0LnN0X2RldiAmJgorCQlzdF9zdGRpbi5zdF9pbm8gPT0gc3Rfc3Rkb3V0LnN0X2lubyAmJgorCQlzdF9zdGRpbi5zdF9tb2RlID09IHN0X3N0ZG91dC5zdF9tb2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqcmVkdWNlX3BhcmVudHMoc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQsCisJCQkJCSAgaW50ICpoZWFkX3N1YnN1bWVkLAorCQkJCQkgIHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLCAqKnJlbW90ZXM7CisKKwkvKgorCSAqIElzIHRoZSBjdXJyZW50IEhFQUQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBjb21taXQgYmVpbmcKKwkgKiBtZXJnZWQ/ICBJZiBzbyB3ZSBkbyBub3Qgd2FudCB0byByZWNvcmQgaXQgYXMgYSBwYXJlbnQgb2YKKwkgKiB0aGUgcmVzdWx0aW5nIG1lcmdlLCB1bmxlc3MgLS1uby1mZiBpcyBnaXZlbi4gIFdlIHdpbGwgZmxpcAorCSAqIHRoaXMgdmFyaWFibGUgdG8gMCB3aGVuIHdlIGZpbmQgSEVBRCBhbW9uZyB0aGUgaW5kZXBlbmRlbnQKKwkgKiB0aXBzIGJlaW5nIG1lcmdlZC4KKwkgKi8KKwkqaGVhZF9zdWJzdW1lZCA9IDE7CisKKwkvKiBGaW5kIHdoYXQgcGFyZW50cyB0byByZWNvcmQgYnkgY2hlY2tpbmcgaW5kZXBlbmRlbnQgb25lcy4gKi8KKwlwYXJlbnRzID0gcmVkdWNlX2hlYWRzKHJlbW90ZWhlYWRzKTsKKwlmcmVlX2NvbW1pdF9saXN0KHJlbW90ZWhlYWRzKTsKKworCXJlbW90ZWhlYWRzID0gTlVMTDsKKwlyZW1vdGVzID0gJnJlbW90ZWhlYWRzOworCXdoaWxlIChwYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBvcF9jb21taXQoJnBhcmVudHMpOworCQlpZiAoY29tbWl0ID09IGhlYWRfY29tbWl0KQorCQkJKmhlYWRfc3Vic3VtZWQgPSAwOworCQllbHNlCisJCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHJlbW90ZXMpLT5uZXh0OworCX0KKwlyZXR1cm4gcmVtb3RlaGVhZHM7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfbWVyZ2VfbWVzc2FnZShzdHJ1Y3Qgc3RyYnVmICptZXJnZV9uYW1lcywgc3RydWN0IHN0cmJ1ZiAqbWVyZ2VfbXNnKQoreworCXN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgb3B0czsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmFkZF90aXRsZSA9ICFoYXZlX21lc3NhZ2U7CisJb3B0cy5zaG9ydGxvZ19sZW4gPSBzaG9ydGxvZ19sZW47CisJb3B0cy5jcmVkaXRfcGVvcGxlID0gKDAgPCBvcHRpb25fZWRpdCk7CisKKwlmbXRfbWVyZ2VfbXNnKG1lcmdlX25hbWVzLCBtZXJnZV9tc2csICZvcHRzKTsKKwlpZiAobWVyZ2VfbXNnLT5sZW4pCisJCXN0cmJ1Zl9zZXRsZW4obWVyZ2VfbXNnLCBtZXJnZV9tc2ctPmxlbiAtIDEpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmV0Y2hfaGVhZChzdHJ1Y3QgY29tbWl0X2xpc3QgKipyZW1vdGVzLCBzdHJ1Y3Qgc3RyYnVmICptZXJnZV9uYW1lcykKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlpbnQgZmQsIHBvcywgbnBvczsKKwlzdHJ1Y3Qgc3RyYnVmIGZldGNoX2hlYWRfZmlsZSA9IFNUUkJVRl9JTklUOworCWNvbnN0IHVuc2lnbmVkIGhleHN6ID0gdGhlX2hhc2hfYWxnby0+aGV4c3o7CisKKwlpZiAoIW1lcmdlX25hbWVzKQorCQltZXJnZV9uYW1lcyA9ICZmZXRjaF9oZWFkX2ZpbGU7CisKKwlmaWxlbmFtZSA9IGdpdF9wYXRoX2ZldGNoX2hlYWQodGhlX3JlcG9zaXRvcnkpOworCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiksIGZpbGVuYW1lKTsKKworCWlmIChzdHJidWZfcmVhZChtZXJnZV9uYW1lcywgZmQsIDApIDwgMCkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkICclcyciKSwgZmlsZW5hbWUpOworCWlmIChjbG9zZShmZCkgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNsb3NlICclcyciKSwgZmlsZW5hbWUpOworCisJZm9yIChwb3MgPSAwOyBwb3MgPCBtZXJnZV9uYW1lcy0+bGVuOyBwb3MgPSBucG9zKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljaGFyICpwdHI7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCQlwdHIgPSBzdHJjaHIobWVyZ2VfbmFtZXMtPmJ1ZiArIHBvcywgJ1xuJyk7CisJCWlmIChwdHIpCisJCQlucG9zID0gcHRyIC0gbWVyZ2VfbmFtZXMtPmJ1ZiArIDE7CisJCWVsc2UKKwkJCW5wb3MgPSBtZXJnZV9uYW1lcy0+bGVuOworCisJCWlmIChucG9zIC0gcG9zIDwgaGV4c3ogKyAyIHx8CisJCSAgICBnZXRfb2lkX2hleChtZXJnZV9uYW1lcy0+YnVmICsgcG9zLCAmb2lkKSkKKwkJCWNvbW1pdCA9IE5VTEw7IC8qIGJhZCAqLworCQllbHNlIGlmIChtZW1jbXAobWVyZ2VfbmFtZXMtPmJ1ZiArIHBvcyArIGhleHN6LCAiXHRcdCIsIDIpKQorCQkJY29udGludWU7IC8qIG5vdC1mb3ItbWVyZ2UgKi8KKwkJZWxzZSB7CisJCQljaGFyIHNhdmVkID0gbWVyZ2VfbmFtZXMtPmJ1Zltwb3MgKyBoZXhzel07CisJCQltZXJnZV9uYW1lcy0+YnVmW3BvcyArIGhleHN6XSA9ICdcMCc7CisJCQljb21taXQgPSBnZXRfbWVyZ2VfcGFyZW50KG1lcmdlX25hbWVzLT5idWYgKyBwb3MpOworCQkJbWVyZ2VfbmFtZXMtPmJ1Zltwb3MgKyBoZXhzel0gPSBzYXZlZDsKKwkJfQorCQlpZiAoIWNvbW1pdCkgeworCQkJaWYgKHB0cikKKwkJCQkqcHRyID0gJ1wwJzsKKwkJCWRpZShfKCJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiKSwKKwkJCSAgICBmaWxlbmFtZSwgbWVyZ2VfbmFtZXMtPmJ1ZiArIHBvcyk7CisJCX0KKwkJcmVtb3RlcyA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCByZW1vdGVzKS0+bmV4dDsKKwl9CisKKwlpZiAobWVyZ2VfbmFtZXMgPT0gJmZldGNoX2hlYWRfZmlsZSkKKwkJc3RyYnVmX3JlbGVhc2UoJmZldGNoX2hlYWRfZmlsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbGxlY3RfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCwKKwkJCQkJICAgaW50ICpoZWFkX3N1YnN1bWVkLAorCQkJCQkgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkJCSAgIHN0cnVjdCBzdHJidWYgKm1lcmdlX21zZykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipyZW1vdGVzID0gJnJlbW90ZWhlYWRzOworCXN0cnVjdCBzdHJidWYgbWVyZ2VfbmFtZXMgPSBTVFJCVUZfSU5JVCwgKmF1dG9nZW4gPSBOVUxMOworCisJaWYgKG1lcmdlX21zZyAmJiAoIWhhdmVfbWVzc2FnZSB8fCBzaG9ydGxvZ19sZW4pKQorCQlhdXRvZ2VuID0gJm1lcmdlX25hbWVzOworCisJaWYgKGhlYWRfY29tbWl0KQorCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChoZWFkX2NvbW1pdCwgcmVtb3RlcyktPm5leHQ7CisKKwlpZiAoYXJnYyA9PSAxICYmICFzdHJjbXAoYXJndlswXSwgIkZFVENIX0hFQUQiKSkgeworCQloYW5kbGVfZmV0Y2hfaGVhZChyZW1vdGVzLCBhdXRvZ2VuKTsKKwkJcmVtb3RlaGVhZHMgPSByZWR1Y2VfcGFyZW50cyhoZWFkX2NvbW1pdCwgaGVhZF9zdWJzdW1lZCwgcmVtb3RlaGVhZHMpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGdldF9tZXJnZV9wYXJlbnQoYXJndltpXSk7CisJCQlpZiAoIWNvbW1pdCkKKwkJCQloZWxwX3Vua25vd25fcmVmKGFyZ3ZbaV0sICJtZXJnZSIsCisJCQkJCQkgXygibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiKSk7CisJCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHJlbW90ZXMpLT5uZXh0OworCQl9CisJCXJlbW90ZWhlYWRzID0gcmVkdWNlX3BhcmVudHMoaGVhZF9jb21taXQsIGhlYWRfc3Vic3VtZWQsIHJlbW90ZWhlYWRzKTsKKwkJaWYgKGF1dG9nZW4pIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwkJCWZvciAocCA9IHJlbW90ZWhlYWRzOyBwOyBwID0gcC0+bmV4dCkKKwkJCQltZXJnZV9uYW1lKG1lcmdlX3JlbW90ZV91dGlsKHAtPml0ZW0pLT5uYW1lLCBhdXRvZ2VuKTsKKwkJfQorCX0KKworCWlmIChhdXRvZ2VuKSB7CisJCXByZXBhcmVfbWVyZ2VfbWVzc2FnZShhdXRvZ2VuLCBtZXJnZV9tc2cpOworCQlzdHJidWZfcmVsZWFzZShhdXRvZ2VuKTsKKwl9CisKKwlyZXR1cm4gcmVtb3RlaGVhZHM7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2luZ19hX3Rocm93YXdheV90YWcoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNoYXIgKnRhZ19yZWY7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGlzX3Rocm93YXdheV90YWcgPSAwOworCisJLyogQXJlIHdlIG1lcmdpbmcgYSB0YWc/ICovCisJaWYgKCFtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpIHx8CisJICAgICFtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5vYmogfHwKKwkgICAgbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KS0+b2JqLT50eXBlICE9IE9CSl9UQUcpCisJCXJldHVybiBpc190aHJvd2F3YXlfdGFnOworCisJLyoKKwkgKiBOb3cgd2Uga25vdyB3ZSBhcmUgbWVyZ2luZyBhIHRhZyBvYmplY3QuICBBcmUgd2UgZG93bnN0cmVhbQorCSAqIGFuZCBmb2xsb3dpbmcgdGhlIHRhZ3MgZnJvbSB1cHN0cmVhbT8gIElmIHNvLCB3ZSBtdXN0IGhhdmUKKwkgKiB0aGUgdGFnIG9iamVjdCBwb2ludGVkIGF0IGJ5ICJyZWZzL3RhZ3MvJFQiIHdoZXJlICRUIGlzIHRoZQorCSAqIHRhZ25hbWUgcmVjb3JkZWQgaW4gdGhlIHRhZyBvYmplY3QuICBXZSB3YW50IHRvIGFsbG93IHN1Y2gKKwkgKiBhICJqdXN0IHRvIGNhdGNoIHVwIiBtZXJnZSB0byBmYXN0LWZvcndhcmQuCisJICoKKwkgKiBPdGhlcndpc2UsIHdlIGFyZSBwbGF5aW5nIGFuIGludGVncmF0b3IncyByb2xlLCBtYWtpbmcgYQorCSAqIG1lcmdlIHdpdGggYSB0aHJvdy1hd2F5IHRhZyBmcm9tIGEgY29udHJpYnV0b3Igd2l0aAorCSAqIHNvbWV0aGluZyBsaWtlICJnaXQgcHVsbCAkY29udHJpYnV0b3IgJHNpZ25lZF90YWciLgorCSAqIFdlIHdhbnQgdG8gZm9yYmlkIHN1Y2ggYSBtZXJnZSBmcm9tIGZhc3QtZm9yd2FyZGluZworCSAqIGJ5IGRlZmF1bHQ7IG90aGVyd2lzZSB3ZSB3b3VsZCBub3Qga2VlcCB0aGUgc2lnbmF0dXJlCisJICogYW55d2hlcmUuCisJICovCisJdGFnX3JlZiA9IHhzdHJmbXQoInJlZnMvdGFncy8lcyIsCisJCQkgICgoc3RydWN0IHRhZyAqKW1lcmdlX3JlbW90ZV91dGlsKGNvbW1pdCktPm9iaiktPnRhZyk7CisJaWYgKCFyZWFkX3JlZih0YWdfcmVmLCAmb2lkKSAmJgorCSAgICBvaWRlcSgmb2lkLCAmbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KS0+b2JqLT5vaWQpKQorCQlpc190aHJvd2F3YXlfdGFnID0gMDsKKwllbHNlCisJCWlzX3Rocm93YXdheV90YWcgPSAxOworCWZyZWUodGFnX3JlZik7CisJcmV0dXJuIGlzX3Rocm93YXdheV90YWc7Cit9CisKK2ludCBjbWRfbWVyZ2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9iamVjdF9pZCByZXN1bHRfdHJlZSwgc3Rhc2gsIGhlYWRfb2lkOworCXN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGksIHJldCA9IDAsIGhlYWRfc3Vic3VtZWQ7CisJaW50IGJlc3RfY250ID0gLTEsIG1lcmdlX3dhc19vayA9IDAsIGF1dG9tZXJnZV93YXNfb2sgPSAwOworCXN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uID0gTlVMTDsKKwljb25zdCBjaGFyICpiZXN0X3N0cmF0ZWd5ID0gTlVMTCwgKnd0X3N0cmF0ZWd5ID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLCAqcDsKKwl2b2lkICpicmFuY2hfdG9fZnJlZTsKKwlpbnQgb3JpZ19hcmdjID0gYXJnYzsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsIGJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucyk7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFyZSBfbm90XyBvbiBhIGRldGFjaGVkIEhFQUQsIGkuZS4gaWYgdGhlcmUgaXMgYQorCSAqIGN1cnJlbnQgYnJhbmNoLgorCSAqLworCWJyYW5jaCA9IGJyYW5jaF90b19mcmVlID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCAmaGVhZF9vaWQsIE5VTEwpOworCWlmIChicmFuY2gpCisJCXNraXBfcHJlZml4KGJyYW5jaCwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaCk7CisKKwlpbml0X2RpZmZfdWlfZGVmYXVsdHMoKTsKKwlnaXRfY29uZmlnKGdpdF9tZXJnZV9jb25maWcsIE5VTEwpOworCisJaWYgKCFicmFuY2ggfHwgaXNfbnVsbF9vaWQoJmhlYWRfb2lkKSkKKwkJaGVhZF9jb21taXQgPSBOVUxMOworCWVsc2UKKwkJaGVhZF9jb21taXQgPSBsb29rdXBfY29tbWl0X29yX2RpZSgmaGVhZF9vaWQsICJIRUFEIik7CisKKwlpZiAoYnJhbmNoX21lcmdlb3B0aW9ucykKKwkJcGFyc2VfYnJhbmNoX21lcmdlX29wdGlvbnMoYnJhbmNoX21lcmdlb3B0aW9ucyk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX21lcmdlX29wdGlvbnMsCisJCQlidWlsdGluX21lcmdlX3VzYWdlLCAwKTsKKwlpZiAoc2hvcnRsb2dfbGVuIDwgMCkKKwkJc2hvcnRsb2dfbGVuID0gKG1lcmdlX2xvZ19jb25maWcgPiAwKSA/IG1lcmdlX2xvZ19jb25maWcgOiAwOworCisJaWYgKHZlcmJvc2l0eSA8IDAgJiYgc2hvd19wcm9ncmVzcyA9PSAtMSkKKwkJc2hvd19wcm9ncmVzcyA9IDA7CisKKwlpZiAoYWJvcnRfY3VycmVudF9tZXJnZSkgeworCQlpbnQgbmFyZ2MgPSAyOworCQljb25zdCBjaGFyICpuYXJndltdID0geyJyZXNldCIsICItLW1lcmdlIiwgTlVMTH07CisKKwkJaWYgKG9yaWdfYXJnYyAhPSAyKQorCQkJdXNhZ2VfbXNnX29wdChfKCItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIiksCisJCQkgICAgICBidWlsdGluX21lcmdlX3VzYWdlLCBidWlsdGluX21lcmdlX29wdGlvbnMpOworCisJCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGhfbWVyZ2VfaGVhZCh0aGVfcmVwb3NpdG9yeSkpKQorCQkJZGllKF8oIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIpKTsKKworCQkvKiBJbnZva2UgJ2dpdCByZXNldCAtLW1lcmdlJyAqLworCQlyZXQgPSBjbWRfcmVzZXQobmFyZ2MsIG5hcmd2LCBwcmVmaXgpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHF1aXRfY3VycmVudF9tZXJnZSkgeworCQlpZiAob3JpZ19hcmdjICE9IDIpCisJCQl1c2FnZV9tc2dfb3B0KF8oIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIpLAorCQkJCSAgICAgIGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsCisJCQkJICAgICAgYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCQlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChjb250aW51ZV9jdXJyZW50X21lcmdlKSB7CisJCWludCBuYXJnYyA9IDE7CisJCWNvbnN0IGNoYXIgKm5hcmd2W10gPSB7ImNvbW1pdCIsIE5VTEx9OworCisJCWlmIChvcmlnX2FyZ2MgIT0gMikKKwkJCXVzYWdlX21zZ19vcHQoXygiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIpLAorCQkJICAgICAgYnVpbHRpbl9tZXJnZV91c2FnZSwgYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCQlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkKKwkJCWRpZShfKCJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iKSk7CisKKwkJLyogSW52b2tlICdnaXQgY29tbWl0JyAqLworCQlyZXQgPSBjbWRfY29tbWl0KG5hcmdjLCBuYXJndiwgcHJlZml4KTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkpCisJCWRpZV9yZXNvbHZlX2NvbmZsaWN0KCJtZXJnZSIpOworCisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkgeworCQkvKgorCQkgKiBUaGVyZSBpcyBubyB1bm1lcmdlZCBlbnRyeSwgZG9uJ3QgYWR2aXNlICdnaXQKKwkJICogYWRkL3JtIDxmaWxlPicsIGp1c3QgJ2dpdCBjb21taXQnLgorCQkgKi8KKwkJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorCQkJCSAgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIpKTsKKwkJZWxzZQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIpKTsKKwl9CisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkgeworCQlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpCisJCQlkaWUoXygiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisJCQkgICAgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIpKTsKKwkJZWxzZQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIpKTsKKwl9CisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CisKKwlpZiAob3B0aW9uX2VkaXQgPCAwKQorCQlvcHRpb25fZWRpdCA9IGRlZmF1bHRfZWRpdF9vcHRpb24oKTsKKworCWNsZWFudXBfbW9kZSA9IGdldF9jbGVhbnVwX21vZGUoY2xlYW51cF9hcmcsIDAgPCBvcHRpb25fZWRpdCk7CisKKwlpZiAodmVyYm9zaXR5IDwgMCkKKwkJc2hvd19kaWZmc3RhdCA9IDA7CisKKwlpZiAoc3F1YXNoKSB7CisJCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfTk8pCisJCQlkaWUoXygiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iKSk7CisJCWlmIChvcHRpb25fY29tbWl0ID4gMCkKKwkJCWRpZShfKCJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iKSk7CisJCS8qCisJCSAqIHNxdWFzaCBjYW4gbm93IHNpbGVudGx5IGRpc2FibGUgb3B0aW9uX2NvbW1pdCAtIHRoaXMgaXMgbm90CisJCSAqIGEgcHJvYmxlbSBhcyBpdCBpcyBvbmx5IG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQsIG5vdCBhIHVzZXIKKwkJICogc3VwcGxpZWQgb3B0aW9uLgorCQkgKi8KKwkJb3B0aW9uX2NvbW1pdCA9IDA7CisJfQorCisJaWYgKG9wdGlvbl9jb21taXQgPCAwKQorCQlvcHRpb25fY29tbWl0ID0gMTsKKworCWlmICghYXJnYykgeworCQlpZiAoZGVmYXVsdF90b191cHN0cmVhbSkKKwkJCWFyZ2MgPSBzZXR1cF93aXRoX3Vwc3RyZWFtKCZhcmd2KTsKKwkJZWxzZQorCQkJZGllKF8oIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIikpOworCX0gZWxzZSBpZiAoYXJnYyA9PSAxICYmICFzdHJjbXAoYXJndlswXSwgIi0iKSkgeworCQlhcmd2WzBdID0gIkB7LTF9IjsKKwl9CisKKwlpZiAoIWFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX21lcmdlX3VzYWdlLAorCQkJYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCWlmICghaGVhZF9jb21taXQpIHsKKwkJLyoKKwkJICogSWYgdGhlIG1lcmdlZCBoZWFkIGlzIGEgdmFsaWQgb25lIHRoZXJlIGlzIG5vIHJlYXNvbgorCQkgKiB0byBmb3JiaWQgImdpdCBtZXJnZSIgaW50byBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybi4KKwkJICogV2UgZG8gdGhlIHNhbWUgZm9yICJnaXQgcHVsbCIuCisJCSAqLworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpyZW1vdGVfaGVhZF9vaWQ7CisJCWlmIChzcXVhc2gpCisJCQlkaWUoXygiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiKSk7CisJCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfTk8pCisJCQlkaWUoXygiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvICIKKwkJCSAgICAiYW4gZW1wdHkgaGVhZCIpKTsKKwkJcmVtb3RlaGVhZHMgPSBjb2xsZWN0X3BhcmVudHMoaGVhZF9jb21taXQsICZoZWFkX3N1YnN1bWVkLAorCQkJCQkgICAgICBhcmdjLCBhcmd2LCBOVUxMKTsKKwkJaWYgKCFyZW1vdGVoZWFkcykKKwkJCWRpZShfKCIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIiksIGFyZ3ZbMF0pOworCQlpZiAocmVtb3RlaGVhZHMtPm5leHQpCisJCQlkaWUoXygiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIpKTsKKworCQlpZiAodmVyaWZ5X3NpZ25hdHVyZXMpCisJCQl2ZXJpZnlfbWVyZ2Vfc2lnbmF0dXJlKHJlbW90ZWhlYWRzLT5pdGVtLCB2ZXJib3NpdHksCisJCQkJCSAgICAgICBjaGVja190cnVzdF9sZXZlbCk7CisKKwkJcmVtb3RlX2hlYWRfb2lkID0gJnJlbW90ZWhlYWRzLT5pdGVtLT5vYmplY3Qub2lkOworCQlyZWFkX2VtcHR5KHJlbW90ZV9oZWFkX29pZCwgMCk7CisJCXVwZGF0ZV9yZWYoImluaXRpYWwgcHVsbCIsICJIRUFEIiwgcmVtb3RlX2hlYWRfb2lkLCBOVUxMLCAwLAorCQkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIEFsbCB0aGUgcmVzdCBhcmUgdGhlIGNvbW1pdHMgYmVpbmcgbWVyZ2VkOyBwcmVwYXJlCisJICogdGhlIHN0YW5kYXJkIG1lcmdlIHN1bW1hcnkgbWVzc2FnZSB0byBiZSBhcHBlbmRlZAorCSAqIHRvIHRoZSBnaXZlbiBtZXNzYWdlLgorCSAqLworCXJlbW90ZWhlYWRzID0gY29sbGVjdF9wYXJlbnRzKGhlYWRfY29tbWl0LCAmaGVhZF9zdWJzdW1lZCwKKwkJCQkgICAgICBhcmdjLCBhcmd2LCAmbWVyZ2VfbXNnKTsKKworCWlmICghaGVhZF9jb21taXQgfHwgIWFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX21lcmdlX3VzYWdlLAorCQkJYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCWlmICh2ZXJpZnlfc2lnbmF0dXJlcykgeworCQlmb3IgKHAgPSByZW1vdGVoZWFkczsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCXZlcmlmeV9tZXJnZV9zaWduYXR1cmUocC0+aXRlbSwgdmVyYm9zaXR5LAorCQkJCQkgICAgICAgY2hlY2tfdHJ1c3RfbGV2ZWwpOworCQl9CisJfQorCisJc3RyYnVmX2FkZHN0cigmYnVmLCAibWVyZ2UiKTsKKwlmb3IgKHAgPSByZW1vdGVoZWFkczsgcDsgcCA9IHAtPm5leHQpCisJCXN0cmJ1Zl9hZGRmKCZidWYsICIgJXMiLCBtZXJnZV9yZW1vdGVfdXRpbChwLT5pdGVtKS0+bmFtZSk7CisJc2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIsIGJ1Zi5idWYsIDApOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKworCWZvciAocCA9IHJlbW90ZWhlYWRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQlzdHJidWZfYWRkZigmYnVmLCAiR0lUSEVBRF8lcyIsCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCXNldGVudihidWYuYnVmLCBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5uYW1lLCAxKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpZiAoZmFzdF9mb3J3YXJkICE9IEZGX09OTFkgJiYgbWVyZ2luZ19hX3Rocm93YXdheV90YWcoY29tbWl0KSkKKwkJCWZhc3RfZm9yd2FyZCA9IEZGX05POworCX0KKworCWlmICghdXNlX3N0cmF0ZWdpZXMpIHsKKwkJaWYgKCFyZW1vdGVoZWFkcykKKwkJCTsgLyogYWxyZWFkeSB1cC10by1kYXRlICovCisJCWVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCkKKwkJCWFkZF9zdHJhdGVnaWVzKHB1bGxfdHdvaGVhZCwgREVGQVVMVF9UV09IRUFEKTsKKwkJZWxzZQorCQkJYWRkX3N0cmF0ZWdpZXMocHVsbF9vY3RvcHVzLCBERUZBVUxUX09DVE9QVVMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1c2Vfc3RyYXRlZ2llc19ucjsgaSsrKSB7CisJCWlmICh1c2Vfc3RyYXRlZ2llc1tpXS0+YXR0ciAmIE5PX0ZBU1RfRk9SV0FSRCkKKwkJCWZhc3RfZm9yd2FyZCA9IEZGX05POworCQlpZiAodXNlX3N0cmF0ZWdpZXNbaV0tPmF0dHIgJiBOT19UUklWSUFMKQorCQkJYWxsb3dfdHJpdmlhbCA9IDA7CisJfQorCisJaWYgKCFyZW1vdGVoZWFkcykKKwkJOyAvKiBhbHJlYWR5IHVwLXRvLWRhdGUgKi8KKwllbHNlIGlmICghcmVtb3RlaGVhZHMtPm5leHQpCisJCWNvbW1vbiA9IGdldF9tZXJnZV9iYXNlcyhoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMtPml0ZW0pOworCWVsc2UgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSByZW1vdGVoZWFkczsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCAmbGlzdCk7CisJCWNvbW1vbiA9IGdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKGxpc3QpOworCQlmcmVlKGxpc3QpOworCX0KKworCXVwZGF0ZV9yZWYoInVwZGF0aW5nIE9SSUdfSEVBRCIsICJPUklHX0hFQUQiLAorCQkgICAmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsIE5VTEwsIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCisJaWYgKHJlbW90ZWhlYWRzICYmICFjb21tb24pIHsKKwkJLyogTm8gY29tbW9uIGFuY2VzdG9ycyBmb3VuZC4gKi8KKwkJaWYgKCFhbGxvd191bnJlbGF0ZWRfaGlzdG9yaWVzKQorCQkJZGllKF8oInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiKSk7CisJCS8qIG90aGVyd2lzZSwgd2UgbmVlZCBhIHJlYWwgbWVyZ2UuICovCisJfSBlbHNlIGlmICghcmVtb3RlaGVhZHMgfHwKKwkJICghcmVtb3RlaGVhZHMtPm5leHQgJiYgIWNvbW1vbi0+bmV4dCAmJgorCQkgIGNvbW1vbi0+aXRlbSA9PSByZW1vdGVoZWFkcy0+aXRlbSkpIHsKKwkJLyoKKwkJICogSWYgaGVhZCBjYW4gcmVhY2ggYWxsIHRoZSBtZXJnZSB0aGVuIHdlIGFyZSB1cCB0byBkYXRlLgorCQkgKiBidXQgZmlyc3QgdGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YgbWVyZ2luZyBvbmUgcmVtb3RlLgorCQkgKi8KKwkJZmluaXNoX3VwX3RvX2RhdGUoXygiQWxyZWFkeSB1cCB0byBkYXRlLiIpKTsKKwkJZ290byBkb25lOworCX0gZWxzZSBpZiAoZmFzdF9mb3J3YXJkICE9IEZGX05PICYmICFyZW1vdGVoZWFkcy0+bmV4dCAmJgorCQkJIWNvbW1vbi0+bmV4dCAmJgorCQkJb2lkZXEoJmNvbW1vbi0+aXRlbS0+b2JqZWN0Lm9pZCwgJmhlYWRfY29tbWl0LT5vYmplY3Qub2lkKSkgeworCQkvKiBBZ2FpbiB0aGUgbW9zdCBjb21tb24gY2FzZSBvZiBtZXJnaW5nIG9uZSByZW1vdGUuICovCisJCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCQlpZiAodmVyYm9zaXR5ID49IDApIHsKKwkJCXByaW50ZihfKCJVcGRhdGluZyAlcy4uJXNcbiIpLAorCQkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldigmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCQkgIERFRkFVTFRfQUJCUkVWKSwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJnJlbW90ZWhlYWRzLT5pdGVtLT5vYmplY3Qub2lkLAorCQkJCQkJICBERUZBVUxUX0FCQlJFVikpOworCQl9CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZywgIkZhc3QtZm9yd2FyZCIpOworCQlpZiAoaGF2ZV9tZXNzYWdlKQorCQkJc3RyYnVmX2FkZHN0cigmbXNnLAorCQkJCSIgKG5vIGNvbW1pdCBjcmVhdGVkOyAtbSBvcHRpb24gaWdub3JlZCkiKTsKKwkJY29tbWl0ID0gcmVtb3RlaGVhZHMtPml0ZW07CisJCWlmICghY29tbWl0KSB7CisJCQlyZXQgPSAxOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKGNoZWNrb3V0X2Zhc3RfZm9yd2FyZCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJICAmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCSAgJmNvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQkJICBvdmVyd3JpdGVfaWdub3JlKSkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZpbmlzaChoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMsICZjb21taXQtPm9iamVjdC5vaWQsIG1zZy5idWYpOworCQlyZW1vdmVfbWVyZ2VfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5KTsKKwkJZ290byBkb25lOworCX0gZWxzZSBpZiAoIXJlbW90ZWhlYWRzLT5uZXh0ICYmIGNvbW1vbi0+bmV4dCkKKwkJOworCQkvKgorCQkgKiBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMgYW5kIG5vdCBmYXN0LWZvcndhcmQuICBOZWVkCisJCSAqIGEgcmVhbCBtZXJnZS4KKwkJICovCisJZWxzZSBpZiAoIXJlbW90ZWhlYWRzLT5uZXh0ICYmICFjb21tb24tPm5leHQgJiYgb3B0aW9uX2NvbW1pdCkgeworCQkvKgorCQkgKiBXZSBhcmUgbm90IGRvaW5nIG9jdG9wdXMsIG5vdCBmYXN0LWZvcndhcmQsIGFuZCBoYXZlCisJCSAqIG9ubHkgb25lIGNvbW1vbi4KKwkJICovCisJCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisJCWlmIChhbGxvd190cml2aWFsICYmIGZhc3RfZm9yd2FyZCAhPSBGRl9PTkxZKSB7CisJCQkvKiBTZWUgaWYgaXQgaXMgcmVhbGx5IHRyaXZpYWwuICovCisJCQlnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfU1RSSUNUKTsKKwkJCXByaW50ZihfKCJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIpKTsKKwkJCWlmICghcmVhZF90cmVlX3RyaXZpYWwoJmNvbW1vbi0+aXRlbS0+b2JqZWN0Lm9pZCwKKwkJCQkJICAgICAgICZoZWFkX2NvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQkJICAgICAgICZyZW1vdGVoZWFkcy0+aXRlbS0+b2JqZWN0Lm9pZCkpIHsKKwkJCQlyZXQgPSBtZXJnZV90cml2aWFsKGhlYWRfY29tbWl0LCByZW1vdGVoZWFkcyk7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcHJpbnRmKF8oIk5vcGUuXG4iKSk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBBbiBvY3RvcHVzLiAgSWYgd2UgY2FuIHJlYWNoIGFsbCB0aGUgcmVtb3RlIHdlIGFyZSB1cAorCQkgKiB0byBkYXRlLgorCQkgKi8KKwkJaW50IHVwX3RvX2RhdGUgPSAxOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CisKKwkJZm9yIChqID0gcmVtb3RlaGVhZHM7IGo7IGogPSBqLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbl9vbmU7CisKKwkJCS8qCisJCQkgKiBIZXJlIHdlICpoYXZlKiB0byBjYWxjdWxhdGUgdGhlIGluZGl2aWR1YWwKKwkJCSAqIG1lcmdlX2Jhc2VzIGFnYWluLCBvdGhlcndpc2UgImdpdCBtZXJnZSBIRUFEXgorCQkJICogSEVBRF5eIiB3b3VsZCBiZSBtaXNzZWQuCisJCQkgKi8KKwkJCWNvbW1vbl9vbmUgPSBnZXRfbWVyZ2VfYmFzZXMoaGVhZF9jb21taXQsIGotPml0ZW0pOworCQkJaWYgKCFvaWRlcSgmY29tbW9uX29uZS0+aXRlbS0+b2JqZWN0Lm9pZCwgJmotPml0ZW0tPm9iamVjdC5vaWQpKSB7CisJCQkJdXBfdG9fZGF0ZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHVwX3RvX2RhdGUpIHsKKwkJCWZpbmlzaF91cF90b19kYXRlKF8oIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIikpOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJaWYgKGZhc3RfZm9yd2FyZCA9PSBGRl9PTkxZKQorCQlkaWUoXygiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIikpOworCisJLyogV2UgYXJlIGdvaW5nIHRvIG1ha2UgYSBuZXcgY29tbWl0LiAqLworCWdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9TVFJJQ1QpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIGEgcmVhbCBtZXJnZS4gIE5vIG1hdHRlciB3aGF0IHN0cmF0ZWd5CisJICogd2UgdXNlLCBpdCB3b3VsZCBvcGVyYXRlIG9uIHRoZSBpbmRleCwgcG9zc2libHkgYWZmZWN0aW5nIHRoZQorCSAqIHdvcmtpbmcgdHJlZSwgYW5kIHdoZW4gcmVzb2x2ZWQgY2xlYW5seSwgaGF2ZSB0aGUgZGVzaXJlZAorCSAqIHRyZWUgaW4gdGhlIGluZGV4IC0tIHRoaXMgbWVhbnMgdGhhdCB0aGUgaW5kZXggbXVzdCBiZSBpbgorCSAqIHN5bmMgd2l0aCB0aGUgaGVhZCBjb21taXQuICBUaGUgc3RyYXRlZ2llcyBhcmUgcmVzcG9uc2libGUKKwkgKiB0byBlbnN1cmUgdGhpcy4KKwkgKi8KKwlpZiAodXNlX3N0cmF0ZWdpZXNfbnIgPT0gMSB8fAorCSAgICAvKgorCSAgICAgKiBTdGFzaCBhd2F5IHRoZSBsb2NhbCBjaGFuZ2VzIHNvIHRoYXQgd2UgY2FuIHRyeSBtb3JlIHRoYW4gb25lLgorCSAgICAgKi8KKwkgICAgc2F2ZV9zdGF0ZSgmc3Rhc2gpKQorCQlvaWRjbHIoJnN0YXNoKTsKKworCWZvciAoaSA9IDA7ICFtZXJnZV93YXNfb2sgJiYgaSA8IHVzZV9zdHJhdGVnaWVzX25yOyBpKyspIHsKKwkJaW50IHJldCwgY250OworCQlpZiAoaSkgeworCQkJcHJpbnRmKF8oIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIikpOworCQkJcmVzdG9yZV9zdGF0ZSgmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsICZzdGFzaCk7CisJCX0KKwkJaWYgKHVzZV9zdHJhdGVnaWVzX25yICE9IDEpCisJCQlwcmludGYoXygiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iKSwKKwkJCQl1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSk7CisJCS8qCisJCSAqIFJlbWVtYmVyIHdoaWNoIHN0cmF0ZWd5IGxlZnQgdGhlIHN0YXRlIGluIHRoZSB3b3JraW5nCisJCSAqIHRyZWUuCisJCSAqLworCQl3dF9zdHJhdGVneSA9IHVzZV9zdHJhdGVnaWVzW2ldLT5uYW1lOworCisJCXJldCA9IHRyeV9tZXJnZV9zdHJhdGVneSh1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSwKKwkJCQkJIGNvbW1vbiwgcmVtb3RlaGVhZHMsCisJCQkJCSBoZWFkX2NvbW1pdCk7CisJCS8qCisJCSAqIFRoZSBiYWNrZW5kIGV4aXRzIHdpdGggMSB3aGVuIGNvbmZsaWN0cyBhcmUKKwkJICogbGVmdCB0byBiZSByZXNvbHZlZCwgd2l0aCAyIHdoZW4gaXQgZG9lcyBub3QKKwkJICogaGFuZGxlIHRoZSBnaXZlbiBtZXJnZSBhdCBhbGwuCisJCSAqLworCQlpZiAocmV0IDwgMikgeworCQkJaWYgKCFyZXQpIHsKKwkJCQlpZiAob3B0aW9uX2NvbW1pdCkgeworCQkJCQkvKiBBdXRvbWVyZ2Ugc3VjY2VlZGVkLiAqLworCQkJCQlhdXRvbWVyZ2Vfd2FzX29rID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1lcmdlX3dhc19vayA9IDE7CisJCQl9CisJCQljbnQgPSBldmFsdWF0ZV9yZXN1bHQoKTsKKwkJCWlmIChiZXN0X2NudCA8PSAwIHx8IGNudCA8PSBiZXN0X2NudCkgeworCQkJCWJlc3Rfc3RyYXRlZ3kgPSB1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZTsKKwkJCQliZXN0X2NudCA9IGNudDsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBhIHJlc3VsdGluZyB0cmVlLCB0aGF0IG1lYW5zIHRoZSBzdHJhdGVneSBtb2R1bGUKKwkgKiBhdXRvIHJlc29sdmVkIHRoZSBtZXJnZSBjbGVhbmx5LgorCSAqLworCWlmIChhdXRvbWVyZ2Vfd2FzX29rKSB7CisJCXJldCA9IGZpbmlzaF9hdXRvbWVyZ2UoaGVhZF9jb21taXQsIGhlYWRfc3Vic3VtZWQsCisJCQkJICAgICAgIGNvbW1vbiwgcmVtb3RlaGVhZHMsCisJCQkJICAgICAgICZyZXN1bHRfdHJlZSwgd3Rfc3RyYXRlZ3kpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBQaWNrIHRoZSByZXN1bHQgZnJvbSB0aGUgYmVzdCBzdHJhdGVneSBhbmQgaGF2ZSB0aGUgdXNlciBmaXgKKwkgKiBpdCB1cC4KKwkgKi8KKwlpZiAoIWJlc3Rfc3RyYXRlZ3kpIHsKKwkJcmVzdG9yZV9zdGF0ZSgmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsICZzdGFzaCk7CisJCWlmICh1c2Vfc3RyYXRlZ2llc19uciA+IDEpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIpKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsIF8oIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIiksCisJCQkJdXNlX3N0cmF0ZWdpZXNbMF0tPm5hbWUpOworCQlyZXQgPSAyOworCQlnb3RvIGRvbmU7CisJfSBlbHNlIGlmIChiZXN0X3N0cmF0ZWd5ID09IHd0X3N0cmF0ZWd5KQorCQk7IC8qIFdlIGFscmVhZHkgaGF2ZSBpdHMgcmVzdWx0IGluIHRoZSB3b3JraW5nIHRyZWUuICovCisJZWxzZSB7CisJCXByaW50ZihfKCJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIpKTsKKwkJcmVzdG9yZV9zdGF0ZSgmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsICZzdGFzaCk7CisJCXByaW50ZihfKCJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIpLAorCQkJYmVzdF9zdHJhdGVneSk7CisJCXRyeV9tZXJnZV9zdHJhdGVneShiZXN0X3N0cmF0ZWd5LCBjb21tb24sIHJlbW90ZWhlYWRzLAorCQkJCSAgIGhlYWRfY29tbWl0KTsKKwl9CisKKwlpZiAoc3F1YXNoKQorCQlmaW5pc2goaGVhZF9jb21taXQsIHJlbW90ZWhlYWRzLCBOVUxMLCBOVUxMKTsKKwllbHNlCisJCXdyaXRlX21lcmdlX3N0YXRlKHJlbW90ZWhlYWRzKTsKKworCWlmIChtZXJnZV93YXNfb2spCisJCWZwcmludGYoc3RkZXJyLCBfKCJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyAiCisJCQkic3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIpKTsKKwllbHNlCisJCXJldCA9IHN1Z2dlc3RfY29uZmxpY3RzKCk7CisKK2RvbmU6CisJZnJlZShicmFuY2hfdG9fZnJlZSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWt0YWcuYyBiL2J1aWx0aW4vbWt0YWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgyZDNhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ta3RhZy5jCkBAIC0wLDAgKzEsMTc5IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJlcGxhY2Utb2JqZWN0LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKKy8qCisgKiBBIHNpZ25hdHVyZSBmaWxlIGhhcyBhIHZlcnkgc2ltcGxlIGZpeGVkIGZvcm1hdDogZm91ciBsaW5lcworICogb2YgIm9iamVjdCA8c2hhMT4iICsgInR5cGUgPHR5cGVuYW1lPiIgKyAidGFnIDx0YWduYW1lPiIgKworICogInRhZ2dlciA8Y29tbWl0dGVyPiIsIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSwgYSBmcmVlLWZvcm0gdGFnCisgKiBtZXNzYWdlIGFuZCBhIHNpZ25hdHVyZSBibG9jayB0aGF0IGdpdCBpdHNlbGYgZG9lc24ndCBjYXJlIGFib3V0LAorICogYnV0IHRoYXQgY2FuIGJlIHZlcmlmaWVkIHdpdGggZ3BnIG9yIHNpbWlsYXIuCisgKgorICogVGhlIGZpcnN0IGZvdXIgbGluZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXQgbGVhc3QgODMgYnl0ZXM6CisgKiAib2JqZWN0IDxzaGExPlxuIiBpcyA0OCBieXRlcywgInR5cGUgdGFnXG4iIGF0IDkgYnl0ZXMgaXMgdGhlCisgKiBzaG9ydGVzdCBwb3NzaWJsZSB0eXBlLWxpbmUsICJ0YWcgLlxuIiBhdCA2IGJ5dGVzIGlzIHRoZSBzaG9ydGVzdAorICogc2luZ2xlLWNoYXJhY3Rlci10YWcgbGluZSwgYW5kICJ0YWdnZXIgLiA8PiAwICswMDAwXG4iIGF0IDIwIGJ5dGVzIGlzCisgKiB0aGUgc2hvcnRlc3QgcG9zc2libGUgdGFnZ2VyLWxpbmUuCisgKi8KKworLyoKKyAqIFdlIHJlZnVzZSB0byB0YWcgc29tZXRoaW5nIHdlIGNhbid0IHZlcmlmeS4gSnVzdCBiZWNhdXNlLgorICovCitzdGF0aWMgaW50IHZlcmlmeV9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpleHBlY3RlZF90eXBlKQoreworCWludCByZXQgPSAtMTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmJ1ZmZlciA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJlcGwgPSBsb29rdXBfcmVwbGFjZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisKKwlpZiAoYnVmZmVyKSB7CisJCWlmICh0eXBlID09IHR5cGVfZnJvbV9zdHJpbmcoZXhwZWN0ZWRfdHlwZSkpIHsKKwkJCXJldCA9IGNoZWNrX29iamVjdF9zaWduYXR1cmUodGhlX3JlcG9zaXRvcnksIHJlcGwsCisJCQkJCQkgICAgIGJ1ZmZlciwgc2l6ZSwKKwkJCQkJCSAgICAgZXhwZWN0ZWRfdHlwZSk7CisJCX0KKwkJZnJlZShidWZmZXIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZlcmlmeV90YWcoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IHR5cGVsZW47CisJY2hhciB0eXBlWzIwXTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpvYmplY3QsICp0eXBlX2xpbmUsICp0YWdfbGluZSwgKnRhZ2dlcl9saW5lLCAqbGIsICpyYiwgKnA7CisJc2l6ZV90IGxlbjsKKworCWlmIChzaXplIDwgODQpCisJCXJldHVybiBlcnJvcigid2FubmEgZm9vbCBtZSA/IHlvdSBvYnZpb3VzbHkgZ290IHRoZSBzaXplIHdyb25nICEiKTsKKworCWJ1ZmZlcltzaXplXSA9IDA7CisKKwkvKiBWZXJpZnkgb2JqZWN0IGxpbmUgKi8KKwlvYmplY3QgPSBidWZmZXI7CisJaWYgKG1lbWNtcChvYmplY3QsICJvYmplY3QgIiwgNykpCisJCXJldHVybiBlcnJvcigiY2hhciVkOiBkb2VzIG5vdCBzdGFydCB3aXRoIFwib2JqZWN0IFwiIiwgMCk7CisKKwlpZiAocGFyc2Vfb2lkX2hleChvYmplY3QgKyA3LCAmb2lkLCAmcCkpCisJCXJldHVybiBlcnJvcigiY2hhciVkOiBjb3VsZCBub3QgZ2V0IFNIQTEgaGFzaCIsIDcpOworCisJLyogVmVyaWZ5IHR5cGUgbGluZSAqLworCXR5cGVfbGluZSA9IHAgKyAxOworCWlmIChtZW1jbXAodHlwZV9saW5lIC0gMSwgIlxudHlwZSAiLCA2KSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJWQ6IGNvdWxkIG5vdCBmaW5kIFwiXFxudHlwZSBcIiIsIDQ3KTsKKworCS8qIFZlcmlmeSB0YWctbGluZSAqLworCXRhZ19saW5lID0gc3RyY2hyKHR5cGVfbGluZSwgJ1xuJyk7CisJaWYgKCF0YWdfbGluZSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogY291bGQgbm90IGZpbmQgbmV4dCBcIlxcblwiIiwKKwkJCQkodWludG1heF90KSAodHlwZV9saW5lIC0gYnVmZmVyKSk7CisJdGFnX2xpbmUrKzsKKwlpZiAobWVtY21wKHRhZ19saW5lLCAidGFnICIsIDQpIHx8IHRhZ19saW5lWzRdID09ICdcbicpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG5vIFwidGFnIFwiIGZvdW5kIiwKKwkJCQkodWludG1heF90KSAodGFnX2xpbmUgLSBidWZmZXIpKTsKKworCS8qIEdldCB0aGUgYWN0dWFsIHR5cGUgKi8KKwl0eXBlbGVuID0gdGFnX2xpbmUgLSB0eXBlX2xpbmUgLSBzdHJsZW4oInR5cGUgXG4iKTsKKwlpZiAodHlwZWxlbiA+PSBzaXplb2YodHlwZSkpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IHR5cGUgdG9vIGxvbmciLAorCQkJCSh1aW50bWF4X3QpICh0eXBlX2xpbmUrNSAtIGJ1ZmZlcikpOworCisJbWVtY3B5KHR5cGUsIHR5cGVfbGluZSs1LCB0eXBlbGVuKTsKKwl0eXBlW3R5cGVsZW5dID0gMDsKKworCS8qIFZlcmlmeSB0aGF0IHRoZSBvYmplY3QgbWF0Y2hlcyAqLworCWlmICh2ZXJpZnlfb2JqZWN0KCZvaWQsIHR5cGUpKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlZDogY291bGQgbm90IHZlcmlmeSBvYmplY3QgJXMiLCA3LCBvaWRfdG9faGV4KCZvaWQpKTsKKworCS8qIFZlcmlmeSB0aGUgdGFnLW5hbWU6IHdlIGRvbid0IGFsbG93IGNvbnRyb2wgY2hhcmFjdGVycyBvciBzcGFjZXMgaW4gaXQgKi8KKwl0YWdfbGluZSArPSA0OworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKnRhZ19saW5lKys7CisJCWlmIChjID09ICdcbicpCisJCQlicmVhazsKKwkJaWYgKGMgPiAnICcpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogY291bGQgbm90IHZlcmlmeSB0YWcgbmFtZSIsCisJCQkJKHVpbnRtYXhfdCkgKHRhZ19saW5lIC0gYnVmZmVyKSk7CisJfQorCisJLyogVmVyaWZ5IHRoZSB0YWdnZXIgbGluZSAqLworCXRhZ2dlcl9saW5lID0gdGFnX2xpbmU7CisKKwlpZiAobWVtY21wKHRhZ2dlcl9saW5lLCAidGFnZ2VyICIsIDcpKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBjb3VsZCBub3QgZmluZCBcInRhZ2dlciBcIiIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKworCS8qCisJICogQ2hlY2sgZm9yIGNvcnJlY3QgZm9ybSBmb3IgbmFtZSBhbmQgZW1haWwKKwkgKiBpLmUuICIgPCIgZm9sbG93ZWQgYnkgIj4gIiBvbiBfdGhpc18gbGluZQorCSAqIE5vIGFuZ2xlIGJyYWNrZXRzIHdpdGhpbiB0aGUgbmFtZSBvciBlbWFpbCBhZGRyZXNzIGZpZWxkcy4KKwkgKiBObyBzcGFjZXMgd2l0aGluIHRoZSBlbWFpbCBhZGRyZXNzIGZpZWxkLgorCSAqLworCXRhZ2dlcl9saW5lICs9IDc7CisJaWYgKCEobGIgPSBzdHJzdHIodGFnZ2VyX2xpbmUsICIgPCIpKSB8fCAhKHJiID0gc3Ryc3RyKGxiKzIsICI+ICIpKSB8fAorCQlzdHJwYnJrKHRhZ2dlcl9saW5lLCAiPD5cbiIpICE9IGxiKzEgfHwKKwkJc3RycGJyayhsYisyLCAiPjxcbiAiKSAhPSByYikKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogbWFsZm9ybWVkIHRhZ2dlciBmaWVsZCIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKworCS8qIENoZWNrIGZvciBhdXRob3IgbmFtZSwgYXQgbGVhc3Qgb25lIGNoYXJhY3Rlciwgc3BhY2UgaXMgYWNjZXB0YWJsZSAqLworCWlmIChsYiA9PSB0YWdnZXJfbGluZSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogbWlzc2luZyB0YWdnZXIgbmFtZSIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKworCS8qIHRpbWVzdGFtcCwgMSBvciBtb3JlIGRpZ2l0cyBmb2xsb3dlZCBieSBzcGFjZSAqLworCXRhZ2dlcl9saW5lID0gcmIgKyAyOworCWlmICghKGxlbiA9IHN0cnNwbih0YWdnZXJfbGluZSwgIjAxMjM0NTY3ODkiKSkpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG1pc3NpbmcgdGFnIHRpbWVzdGFtcCIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKwl0YWdnZXJfbGluZSArPSBsZW47CisJaWYgKCp0YWdnZXJfbGluZSAhPSAnICcpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG1hbGZvcm1lZCB0YWcgdGltZXN0YW1wIiwKKwkJCSh1aW50bWF4X3QpICh0YWdnZXJfbGluZSAtIGJ1ZmZlcikpOworCXRhZ2dlcl9saW5lKys7CisKKwkvKiB0aW1lem9uZSwgNSBkaWdpdHMgWystXWhobW0sIG1heC4gMTQwMCAqLworCWlmICghKCh0YWdnZXJfbGluZVswXSA9PSAnKycgfHwgdGFnZ2VyX2xpbmVbMF0gPT0gJy0nKSAmJgorCSAgICAgIHN0cnNwbih0YWdnZXJfbGluZSsxLCAiMDEyMzQ1Njc4OSIpID09IDQgJiYKKwkgICAgICB0YWdnZXJfbGluZVs1XSA9PSAnXG4nICYmIGF0b2kodGFnZ2VyX2xpbmUrMSkgPD0gMTQwMCkpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG1hbGZvcm1lZCB0YWcgdGltZXpvbmUiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisJdGFnZ2VyX2xpbmUgKz0gNjsKKworCS8qIFZlcmlmeSB0aGUgYmxhbmsgbGluZSBzZXBhcmF0aW5nIHRoZSBoZWFkZXIgZnJvbSB0aGUgYm9keSAqLworCWlmICgqdGFnZ2VyX2xpbmUgIT0gJ1xuJykKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogdHJhaWxpbmcgZ2FyYmFnZSBpbiB0YWcgaGVhZGVyIiwKKwkJCSh1aW50bWF4X3QpICh0YWdnZXJfbGluZSAtIGJ1ZmZlcikpOworCisJLyogVGhlIGFjdHVhbCBzdHVmZiBhZnRlcndhcmRzIHdlIGRvbid0IGNhcmUgYWJvdXQuLiAqLworCXJldHVybiAwOworfQorCitpbnQgY21kX21rdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCByZXN1bHQ7CisKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZSgiZ2l0IG1rdGFnIik7CisKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgNDA5NikgPCAwKSB7CisJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIpOworCX0KKworCS8qIFZlcmlmeSBpdCBmb3Igc29tZSBiYXNpYyBzYW5pdHk6IGl0IG5lZWRzIHRvIHN0YXJ0IHdpdGgKKwkgICAib2JqZWN0IDxzaGExPlxudHlwZVxudGFnZ2VyICIgKi8KKwlpZiAodmVyaWZ5X3RhZyhidWYuYnVmLCBidWYubGVuKSA8IDApCisJCWRpZSgiaW52YWxpZCB0YWcgc2lnbmF0dXJlIGZpbGUiKTsKKworCWlmICh3cml0ZV9vYmplY3RfZmlsZShidWYuYnVmLCBidWYubGVuLCB0YWdfdHlwZSwgJnJlc3VsdCkgPCAwKQorCQlkaWUoInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmcmVzdWx0KSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21rdHJlZS5jIGIvYnVpbHRpbi9ta3RyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTE5OTFiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ta3RyZWUuYwpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIEdJVCAtIHRoZSBzdHVwaWQgY29udGVudCB0cmFja2VyCisgKgorICogQ29weXJpZ2h0IChjKSBKdW5pbyBDIEhhbWFubywgMjAwNiwgMjAwOQorICovCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RhdGljIHN0cnVjdCB0cmVlZW50IHsKKwl1bnNpZ25lZCBtb2RlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBsZW47CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqKmVudHJpZXM7CitzdGF0aWMgaW50IGFsbG9jLCB1c2VkOworCitzdGF0aWMgdm9pZCBhcHBlbmRfdG9fdHJlZSh1bnNpZ25lZCBtb2RlLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHRyZWVlbnQgKmVudDsKKwlzaXplX3QgbGVuID0gc3RybGVuKHBhdGgpOworCWlmIChzdHJjaHIocGF0aCwgJy8nKSkKKwkJZGllKCJwYXRoICVzIGNvbnRhaW5zIHNsYXNoIiwgcGF0aCk7CisKKwlGTEVYX0FMTE9DX01FTShlbnQsIG5hbWUsIHBhdGgsIGxlbik7CisJZW50LT5tb2RlID0gbW9kZTsKKwllbnQtPmxlbiA9IGxlbjsKKwlvaWRjcHkoJmVudC0+b2lkLCBvaWQpOworCisJQUxMT0NfR1JPVyhlbnRyaWVzLCB1c2VkICsgMSwgYWxsb2MpOworCWVudHJpZXNbdXNlZCsrXSA9IGVudDsKK30KKworc3RhdGljIGludCBlbnRfY29tcGFyZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHRyZWVlbnQgKmEgPSAqKHN0cnVjdCB0cmVlZW50ICoqKWFfOworCXN0cnVjdCB0cmVlZW50ICpiID0gKihzdHJ1Y3QgdHJlZWVudCAqKiliXzsKKwlyZXR1cm4gYmFzZV9uYW1lX2NvbXBhcmUoYS0+bmFtZSwgYS0+bGVuLCBhLT5tb2RlLAorCQkJCSBiLT5uYW1lLCBiLT5sZW4sIGItPm1vZGUpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV90cmVlKHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgaTsKKworCVFTT1JUKGVudHJpZXMsIHVzZWQsIGVudF9jb21wYXJlKTsKKwlmb3IgKHNpemUgPSBpID0gMDsgaSA8IHVzZWQ7IGkrKykKKwkJc2l6ZSArPSAzMiArIGVudHJpZXNbaV0tPmxlbjsKKworCXN0cmJ1Zl9pbml0KCZidWYsIHNpemUpOworCWZvciAoaSA9IDA7IGkgPCB1c2VkOyBpKyspIHsKKwkJc3RydWN0IHRyZWVlbnQgKmVudCA9IGVudHJpZXNbaV07CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlbyAlcyVjIiwgZW50LT5tb2RlLCBlbnQtPm5hbWUsICdcMCcpOworCQlzdHJidWZfYWRkKCZidWYsIGVudC0+b2lkLmhhc2gsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwl9CisKKwl3cml0ZV9vYmplY3RfZmlsZShidWYuYnVmLCBidWYubGVuLCB0cmVlX3R5cGUsIG9pZCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpta3RyZWVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyB2b2lkIG1rdHJlZV9saW5lKGNoYXIgKmJ1ZiwgaW50IG51bF90ZXJtX2xpbmUsIGludCBhbGxvd19taXNzaW5nKQoreworCWNoYXIgKnB0ciwgKm50cjsKKwljb25zdCBjaGFyICpwOworCXVuc2lnbmVkIG1vZGU7CisJZW51bSBvYmplY3RfdHlwZSBtb2RlX3R5cGU7IC8qIG9iamVjdCB0eXBlIGRlcml2ZWQgZnJvbSBtb2RlICovCisJZW51bSBvYmplY3RfdHlwZSBvYmpfdHlwZTsgLyogb2JqZWN0IHR5cGUgZGVyaXZlZCBmcm9tIHNoYSAqLworCWNoYXIgKnBhdGgsICp0b19mcmVlID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCXB0ciA9IGJ1ZjsKKwkvKgorCSAqIFJlYWQgbm9uLXJlY3Vyc2l2ZSBscy10cmVlIG91dHB1dCBmb3JtYXQ6CisJICogICAgIG1vZGUgU1AgdHlwZSBTUCBzaGExIFRBQiBuYW1lCisJICovCisJbW9kZSA9IHN0cnRvdWwocHRyLCAmbnRyLCA4KTsKKwlpZiAocHRyID09IG50ciB8fCAhbnRyIHx8ICpudHIgIT0gJyAnKQorCQlkaWUoImlucHV0IGZvcm1hdCBlcnJvcjogJXMiLCBidWYpOworCXB0ciA9IG50ciArIDE7IC8qIHR5cGUgKi8KKwludHIgPSBzdHJjaHIocHRyLCAnICcpOworCWlmICghbnRyIHx8IHBhcnNlX29pZF9oZXgobnRyICsgMSwgJm9pZCwgJnApIHx8CisJICAgICpwICE9ICdcdCcpCisJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIGJ1Zik7CisKKwkvKiBJdCBpcyBwZXJmZWN0bHkgbm9ybWFsIGlmIHdlIGRvIG5vdCBoYXZlIGEgY29tbWl0IGZyb20gYSBzdWJtb2R1bGUgKi8KKwlpZiAoU19JU0dJVExJTksobW9kZSkpCisJCWFsbG93X21pc3NpbmcgPSAxOworCisKKwkqbnRyKysgPSAwOyAvKiBub3cgYXQgdGhlIGJlZ2lubmluZyBvZiBTSEExICovCisKKwlwYXRoID0gKGNoYXIgKilwICsgMTsgIC8qIGF0IHRoZSBiZWdpbm5pbmcgb2YgbmFtZSAqLworCWlmICghbnVsX3Rlcm1fbGluZSAmJiBwYXRoWzBdID09ICciJykgeworCQlzdHJ1Y3Qgc3RyYnVmIHBfdXEgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKHVucXVvdGVfY19zdHlsZSgmcF91cSwgcGF0aCwgTlVMTCkpCisJCQlkaWUoImludmFsaWQgcXVvdGluZyIpOworCQlwYXRoID0gdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goJnBfdXEsIE5VTEwpOworCX0KKworCS8qCisJICogT2JqZWN0IHR5cGUgaXMgcmVkdW5kYW50bHkgZGVyaXZhYmxlIHRocmVlIHdheXMuCisJICogVGhlc2Ugc2hvdWxkIGFsbCBhZ3JlZS4KKwkgKi8KKwltb2RlX3R5cGUgPSBvYmplY3RfdHlwZShtb2RlKTsKKwlpZiAobW9kZV90eXBlICE9IHR5cGVfZnJvbV9zdHJpbmcocHRyKSkgeworCQlkaWUoImVudHJ5ICclcycgb2JqZWN0IHR5cGUgKCVzKSBkb2Vzbid0IG1hdGNoIG1vZGUgdHlwZSAoJXMpIiwKKwkJCXBhdGgsIHB0ciwgdHlwZV9uYW1lKG1vZGVfdHlwZSkpOworCX0KKworCS8qIENoZWNrIHRoZSB0eXBlIG9mIG9iamVjdCBpZGVudGlmaWVkIGJ5IHNoYTEgKi8KKwlvYmpfdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJm9pZCwgTlVMTCk7CisJaWYgKG9ial90eXBlIDwgMCkgeworCQlpZiAoYWxsb3dfbWlzc2luZykgeworCQkJOyAvKiBubyBwcm9ibGVtIC0gbWlzc2luZyBvYmplY3RzIGFyZSBwcmVzdW1lZCB0byBiZSBvZiB0aGUgcmlnaHQgdHlwZSAqLworCQl9IGVsc2UgeworCQkJZGllKCJlbnRyeSAnJXMnIG9iamVjdCAlcyBpcyB1bmF2YWlsYWJsZSIsIHBhdGgsIG9pZF90b19oZXgoJm9pZCkpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG9ial90eXBlICE9IG1vZGVfdHlwZSkgeworCQkJLyoKKwkJCSAqIFRoZSBvYmplY3QgZXhpc3RzIGJ1dCBpcyBvZiB0aGUgd3JvbmcgdHlwZS4KKwkJCSAqIFRoaXMgaXMgYSBwcm9ibGVtIHJlZ2FyZGxlc3Mgb2YgYWxsb3dfbWlzc2luZworCQkJICogYmVjYXVzZSB0aGUgbmV3IHRyZWUgZW50cnkgd2lsbCBuZXZlciBiZSBjb3JyZWN0LgorCQkJICovCisJCQlkaWUoImVudHJ5ICclcycgb2JqZWN0ICVzIGlzIGEgJXMgYnV0IHNwZWNpZmllZCB0eXBlIHdhcyAoJXMpIiwKKwkJCQlwYXRoLCBvaWRfdG9faGV4KCZvaWQpLCB0eXBlX25hbWUob2JqX3R5cGUpLCB0eXBlX25hbWUobW9kZV90eXBlKSk7CisJCX0KKwl9CisKKwlhcHBlbmRfdG9fdHJlZShtb2RlLCAmb2lkLCBwYXRoKTsKKwlmcmVlKHRvX2ZyZWUpOworfQorCitpbnQgY21kX21rdHJlZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgbnVsX3Rlcm1fbGluZSA9IDA7CisJaW50IGFsbG93X21pc3NpbmcgPSAwOworCWludCBpc19iYXRjaF9tb2RlID0gMDsKKwlpbnQgZ290X2VvZiA9IDA7CisJc3RyYnVmX2dldGxpbmVfZm4gZ2V0bGluZV9mbjsKKworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uW10gPSB7CisJCU9QVF9CT09MKCd6JywgTlVMTCwgJm51bF90ZXJtX2xpbmUsIE5fKCJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIpKSwKKwkJT1BUX1NFVF9JTlQoIDAgLCAibWlzc2luZyIsICZhbGxvd19taXNzaW5nLCBOXygiYWxsb3cgbWlzc2luZyBvYmplY3RzIiksIDEpLAorCQlPUFRfU0VUX0lOVCggMCAsICJiYXRjaCIsICZpc19iYXRjaF9tb2RlLCBOXygiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIiksIDEpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBvcHRpb24sIG1rdHJlZV91c2FnZSwgMCk7CisJZ2V0bGluZV9mbiA9IG51bF90ZXJtX2xpbmUgPyBzdHJidWZfZ2V0bGluZV9udWwgOiBzdHJidWZfZ2V0bGluZV9sZjsKKworCXdoaWxlICghZ290X2VvZikgeworCQl3aGlsZSAoMSkgeworCQkJaWYgKGdldGxpbmVfZm4oJnNiLCBzdGRpbikgPT0gRU9GKSB7CisJCQkJZ290X2VvZiA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc2IuYnVmWzBdID09ICdcMCcpIHsKKwkJCQkvKiBlbXB0eSBsaW5lcyBkZW5vdGUgdHJlZSBib3VuZGFyaWVzIGluIGJhdGNoIG1vZGUgKi8KKwkJCQlpZiAoaXNfYmF0Y2hfbW9kZSkKKwkJCQkJYnJlYWs7CisJCQkJZGllKCJpbnB1dCBmb3JtYXQgZXJyb3I6IChibGFuayBsaW5lIG9ubHkgdmFsaWQgaW4gYmF0Y2ggbW9kZSkiKTsKKwkJCX0KKwkJCW1rdHJlZV9saW5lKHNiLmJ1ZiwgbnVsX3Rlcm1fbGluZSwgYWxsb3dfbWlzc2luZyk7CisJCX0KKwkJaWYgKGlzX2JhdGNoX21vZGUgJiYgZ290X2VvZiAmJiB1c2VkIDwgMSkgeworCQkJLyoKKwkJCSAqIEV4ZWN1dGlvbiBnZXRzIGhlcmUgaWYgdGhlIGxhc3QgdHJlZSBlbnRyeSBpcyB0ZXJtaW5hdGVkIHdpdGggYQorCQkJICogbmV3LWxpbmUuICBUaGUgZmluYWwgbmV3LWxpbmUgaGFzIGJlZW4gbWFkZSBvcHRpb25hbCB0byBiZQorCQkJICogY29uc2lzdGVudCB3aXRoIHRoZSBvcmlnaW5hbCBub24tYmF0Y2ggYmVoYXZpb3VyIG9mIG1rdHJlZS4KKwkJCSAqLworCQkJOyAvKiBza2lwIGNyZWF0aW5nIGFuIGVtcHR5IHRyZWUgKi8KKwkJfSBlbHNlIHsKKwkJCXdyaXRlX3RyZWUoJm9pZCk7CisJCQlwdXRzKG9pZF90b19oZXgoJm9pZCkpOworCQkJZmZsdXNoKHN0ZG91dCk7CisJCX0KKwkJdXNlZD0wOyAvKiByZXNldCB0cmVlIGVudHJ5IGJ1ZmZlciBmb3IgcmUtdXNlIGluIGJhdGNoIG1vZGUgKi8KKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmMgYi9idWlsdGluL211bHRpLXBhY2staW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmY4OGNkCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmMKQEAgLTAsMCArMSw3MCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJtaWR4LmgiCisjaW5jbHVkZSAidHJhY2UyLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X3VzYWdlW10gPSB7CisJTl8oImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLXNpemU9PHNpemU+KSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0c19tdWx0aV9wYWNrX2luZGV4IHsKKwljb25zdCBjaGFyICpvYmplY3RfZGlyOworCXVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZTsKKwlpbnQgcHJvZ3Jlc3M7Cit9IG9wdHM7CisKK2ludCBjbWRfbXVsdGlfcGFja19pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkgY29uc3QgY2hhciAqcHJlZml4KQoreworCXVuc2lnbmVkIGZsYWdzID0gMDsKKworCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF9vcHRpb25zW10gPSB7CisJCU9QVF9GSUxFTkFNRSgwLCAib2JqZWN0LWRpciIsICZvcHRzLm9iamVjdF9kaXIsCisJCSAgTl8oIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZvcHRzLnByb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQlPUFRfTUFHTklUVURFKDAsICJiYXRjaC1zaXplIiwgJm9wdHMuYmF0Y2hfc2l6ZSwKKwkJICBOXygiZHVyaW5nIHJlcGFjaywgY29sbGVjdCBwYWNrLWZpbGVzIG9mIHNtYWxsZXIgc2l6ZSBpbnRvIGEgYmF0Y2ggdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGlzIHNpemUiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJb3B0cy5wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF9vcHRpb25zLAorCQkJICAgICBidWlsdGluX211bHRpX3BhY2tfaW5kZXhfdXNhZ2UsIDApOworCisJaWYgKCFvcHRzLm9iamVjdF9kaXIpCisJCW9wdHMub2JqZWN0X2RpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJaWYgKG9wdHMucHJvZ3Jlc3MpCisJCWZsYWdzIHw9IE1JRFhfUFJPR1JFU1M7CisKKwlpZiAoYXJnYyA9PSAwKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X3VzYWdlLAorCQkJCSAgIGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF9vcHRpb25zKTsKKworCWlmIChhcmdjID4gMSkgeworCQlkaWUoXygidG9vIG1hbnkgYXJndW1lbnRzIikpOworCQlyZXR1cm4gMTsKKwl9CisKKwl0cmFjZTJfY21kX21vZGUoYXJndlswXSk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVwYWNrIikpCisJCXJldHVybiBtaWR4X3JlcGFjayh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLAorCQkJKHNpemVfdClvcHRzLmJhdGNoX3NpemUsIGZsYWdzKTsKKwlpZiAob3B0cy5iYXRjaF9zaXplKQorCQlkaWUoXygiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIikpOworCisJaWYgKCFzdHJjbXAoYXJndlswXSwgIndyaXRlIikpCisJCXJldHVybiB3cml0ZV9taWR4X2ZpbGUob3B0cy5vYmplY3RfZGlyLCBmbGFncyk7CisJaWYgKCFzdHJjbXAoYXJndlswXSwgInZlcmlmeSIpKQorCQlyZXR1cm4gdmVyaWZ5X21pZHhfZmlsZSh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCBmbGFncyk7CisJaWYgKCFzdHJjbXAoYXJndlswXSwgImV4cGlyZSIpKQorCQlyZXR1cm4gZXhwaXJlX21pZHhfcGFja3ModGhlX3JlcG9zaXRvcnksIG9wdHMub2JqZWN0X2RpciwgZmxhZ3MpOworCisJZGllKF8oInVucmVjb2duaXplZCBzdWJjb21tYW5kOiAlcyIpLCBhcmd2WzBdKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbXYuYyBiL2J1aWx0aW4vbXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTE1YmE3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tdi5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogImdpdCBtdiIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEpvaGFubmVzIFNjaGluZGVsaW4KKyAqLworI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9tdl91c2FnZVtdID0geworCU5fKCJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIpLAorCU5VTEwKK307CisKKyNkZWZpbmUgRFVQX0JBU0VOQU1FIDEKKyNkZWZpbmUgS0VFUF9UUkFJTElOR19TTEFTSCAyCisKK3N0YXRpYyBjb25zdCBjaGFyICoqaW50ZXJuYWxfcHJlZml4X3BhdGhzcGVjKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJICAgICBjb25zdCBjaGFyICoqcGF0aHNwZWMsCisJCQkJCSAgICAgaW50IGNvdW50LCB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICoqcmVzdWx0OworCWludCBwcmVmaXhsZW4gPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7CisJQUxMT0NfQVJSQVkocmVzdWx0LCBjb3VudCArIDEpOworCisJLyogQ3JlYXRlIGFuIGludGVybWVkaWF0ZSBjb3B5IG9mIHRoZSBwYXRoc3BlYyBiYXNlZCBvbiB0aGUgZmxhZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpbnQgbGVuZ3RoID0gc3RybGVuKHBhdGhzcGVjW2ldKTsKKwkJaW50IHRvX2NvcHkgPSBsZW5ndGg7CisJCWNoYXIgKml0OworCQl3aGlsZSAoIShmbGFncyAmIEtFRVBfVFJBSUxJTkdfU0xBU0gpICYmCisJCSAgICAgICB0b19jb3B5ID4gMCAmJiBpc19kaXJfc2VwKHBhdGhzcGVjW2ldW3RvX2NvcHkgLSAxXSkpCisJCQl0b19jb3B5LS07CisKKwkJaXQgPSB4bWVtZHVweihwYXRoc3BlY1tpXSwgdG9fY29weSk7CisJCWlmIChmbGFncyAmIERVUF9CQVNFTkFNRSkgeworCQkJcmVzdWx0W2ldID0geHN0cmR1cChiYXNlbmFtZShpdCkpOworCQkJZnJlZShpdCk7CisJCX0gZWxzZSB7CisJCQlyZXN1bHRbaV0gPSBpdDsKKwkJfQorCX0KKwlyZXN1bHRbY291bnRdID0gTlVMTDsKKworCS8qIFByZWZpeCB0aGUgcGF0aHNwZWMgYW5kIGZyZWUgdGhlIG9sZCBpbnRlcm1lZGlhdGUgc3RyaW5ncyAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm1hdGNoID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhsZW4sIHJlc3VsdFtpXSk7CisJCWZyZWUoKGNoYXIgKikgcmVzdWx0W2ldKTsKKwkJcmVzdWx0W2ldID0gbWF0Y2g7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFkZF9zbGFzaChjb25zdCBjaGFyICpwYXRoKQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKHBhdGhbbGVuIC0gMV0gIT0gJy8nKSB7CisJCWNoYXIgKndpdGhfc2xhc2ggPSB4bWFsbG9jKHN0X2FkZChsZW4sIDIpKTsKKwkJbWVtY3B5KHdpdGhfc2xhc2gsIHBhdGgsIGxlbik7CisJCXdpdGhfc2xhc2hbbGVuKytdID0gJy8nOworCQl3aXRoX3NsYXNoW2xlbl0gPSAwOworCQlyZXR1cm4gd2l0aF9zbGFzaDsKKwl9CisJcmV0dXJuIHBhdGg7Cit9CisKKyNkZWZpbmUgU1VCTU9EVUxFX1dJVEhfR0lURElSICgoY29uc3QgY2hhciAqKTEpCisKK3N0YXRpYyB2b2lkIHByZXBhcmVfbW92ZV9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3JjLCBpbnQgZmlyc3QsCisJCQkJICAgY29uc3QgY2hhciAqKnN1Ym1vZHVsZV9naXRmaWxlKQoreworCXN0cnVjdCBzdHJidWYgc3VibW9kdWxlX2RvdGdpdCA9IFNUUkJVRl9JTklUOworCWlmICghU19JU0dJVExJTksoYWN0aXZlX2NhY2hlW2ZpcnN0XS0+Y2VfbW9kZSkpCisJCWRpZShfKCJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iKSwgc3JjKTsKKwlpZiAoIWlzX3N0YWdpbmdfZ2l0bW9kdWxlc19vaygmdGhlX2luZGV4KSkKKwkJZGllKF8oIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIikpOworCXN0cmJ1Zl9hZGRmKCZzdWJtb2R1bGVfZG90Z2l0LCAiJXMvLmdpdCIsIHNyYyk7CisJKnN1Ym1vZHVsZV9naXRmaWxlID0gcmVhZF9naXRmaWxlKHN1Ym1vZHVsZV9kb3RnaXQuYnVmKTsKKwlpZiAoKnN1Ym1vZHVsZV9naXRmaWxlKQorCQkqc3VibW9kdWxlX2dpdGZpbGUgPSB4c3RyZHVwKCpzdWJtb2R1bGVfZ2l0ZmlsZSk7CisJZWxzZQorCQkqc3VibW9kdWxlX2dpdGZpbGUgPSBTVUJNT0RVTEVfV0lUSF9HSVRESVI7CisJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9kb3RnaXQpOworfQorCitzdGF0aWMgaW50IGluZGV4X3JhbmdlX29mX3NhbWVfZGlyKGNvbnN0IGNoYXIgKnNyYywgaW50IGxlbmd0aCwKKwkJCQkgICBpbnQgKmZpcnN0X3AsIGludCAqbGFzdF9wKQoreworCWNvbnN0IGNoYXIgKnNyY193X3NsYXNoID0gYWRkX3NsYXNoKHNyYyk7CisJaW50IGZpcnN0LCBsYXN0LCBsZW5fd19zbGFzaCA9IGxlbmd0aCArIDE7CisKKwlmaXJzdCA9IGNhY2hlX25hbWVfcG9zKHNyY193X3NsYXNoLCBsZW5fd19zbGFzaCk7CisJaWYgKGZpcnN0ID49IDApCisJCWRpZShfKCIlLipzIGlzIGluIGluZGV4IiksIGxlbl93X3NsYXNoLCBzcmNfd19zbGFzaCk7CisKKwlmaXJzdCA9IC0xIC0gZmlyc3Q7CisJZm9yIChsYXN0ID0gZmlyc3Q7IGxhc3QgPCBhY3RpdmVfbnI7IGxhc3QrKykgeworCQljb25zdCBjaGFyICpwYXRoID0gYWN0aXZlX2NhY2hlW2xhc3RdLT5uYW1lOworCQlpZiAoc3RybmNtcChwYXRoLCBzcmNfd19zbGFzaCwgbGVuX3dfc2xhc2gpKQorCQkJYnJlYWs7CisJfQorCWlmIChzcmNfd19zbGFzaCAhPSBzcmMpCisJCWZyZWUoKGNoYXIgKilzcmNfd19zbGFzaCk7CisJKmZpcnN0X3AgPSBmaXJzdDsKKwkqbGFzdF9wID0gbGFzdDsKKwlyZXR1cm4gbGFzdCAtIGZpcnN0OworfQorCitpbnQgY21kX212KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBmbGFncywgZ2l0bW9kdWxlc19tb2RpZmllZCA9IDA7CisJaW50IHZlcmJvc2UgPSAwLCBzaG93X29ubHkgPSAwLCBmb3JjZSA9IDAsIGlnbm9yZV9lcnJvcnMgPSAwOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9tdl9vcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZHJ5IHJ1biIpKSwKKwkJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiKSwKKwkJCSAgIFBBUlNFX09QVF9OT0NPTVBMRVRFKSwKKwkJT1BUX0JPT0woJ2snLCBOVUxMLCAmaWdub3JlX2Vycm9ycywgTl8oInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIikpLAorCQlPUFRfRU5EKCksCisJfTsKKwljb25zdCBjaGFyICoqc291cmNlLCAqKmRlc3RpbmF0aW9uLCAqKmRlc3RfcGF0aCwgKipzdWJtb2R1bGVfZ2l0ZmlsZTsKKwllbnVtIHVwZGF0ZV9tb2RlIHsgQk9USCA9IDAsIFdPUktJTkdfRElSRUNUT1JZLCBJTkRFWCB9ICptb2RlczsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3JjX2Zvcl9kc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX212X29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fbXZfdXNhZ2UsIDApOworCWlmICgtLWFyZ2MgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tdl91c2FnZSwgYnVpbHRpbl9tdl9vcHRpb25zKTsKKworCWhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIExPQ0tfRElFX09OX0VSUk9SKTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCXNvdXJjZSA9IGludGVybmFsX3ByZWZpeF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YsIGFyZ2MsIDApOworCW1vZGVzID0geGNhbGxvYyhhcmdjLCBzaXplb2YoZW51bSB1cGRhdGVfbW9kZSkpOworCS8qCisJICogS2VlcCB0cmFpbGluZyBzbGFzaCwgbmVlZGVkIHRvIGxldAorCSAqICJnaXQgbXYgZmlsZSBuby1zdWNoLWRpci8iIGVycm9yIG91dCwgZXhjZXB0IGluIHRoZSBjYXNlCisJICogImdpdCBtdiBkaXJlY3Rvcnkgbm8tc3VjaC1kaXIvIi4KKwkgKi8KKwlmbGFncyA9IEtFRVBfVFJBSUxJTkdfU0xBU0g7CisJaWYgKGFyZ2MgPT0gMSAmJiBpc19kaXJlY3RvcnkoYXJndlswXSkgJiYgIWlzX2RpcmVjdG9yeShhcmd2WzFdKSkKKwkJZmxhZ3MgPSAwOworCWRlc3RfcGF0aCA9IGludGVybmFsX3ByZWZpeF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YgKyBhcmdjLCAxLCBmbGFncyk7CisJc3VibW9kdWxlX2dpdGZpbGUgPSB4Y2FsbG9jKGFyZ2MsIHNpemVvZihjaGFyICopKTsKKworCWlmIChkZXN0X3BhdGhbMF1bMF0gPT0gJ1wwJykKKwkJLyogc3BlY2lhbCBjYXNlOiAiLiIgd2FzIG5vcm1hbGl6ZWQgdG8gIiIgKi8KKwkJZGVzdGluYXRpb24gPSBpbnRlcm5hbF9wcmVmaXhfcGF0aHNwZWMoZGVzdF9wYXRoWzBdLCBhcmd2LCBhcmdjLCBEVVBfQkFTRU5BTUUpOworCWVsc2UgaWYgKCFsc3RhdChkZXN0X3BhdGhbMF0sICZzdCkgJiYKKwkJCVNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJZGVzdF9wYXRoWzBdID0gYWRkX3NsYXNoKGRlc3RfcGF0aFswXSk7CisJCWRlc3RpbmF0aW9uID0gaW50ZXJuYWxfcHJlZml4X3BhdGhzcGVjKGRlc3RfcGF0aFswXSwgYXJndiwgYXJnYywgRFVQX0JBU0VOQU1FKTsKKwl9IGVsc2UgeworCQlpZiAoYXJnYyAhPSAxKQorCQkJZGllKF8oImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IiksIGRlc3RfcGF0aFswXSk7CisJCWRlc3RpbmF0aW9uID0gZGVzdF9wYXRoOworCX0KKworCS8qIENoZWNraW5nICovCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICpzcmMgPSBzb3VyY2VbaV0sICpkc3QgPSBkZXN0aW5hdGlvbltpXTsKKwkJaW50IGxlbmd0aCwgc3JjX2lzX2RpcjsKKwkJY29uc3QgY2hhciAqYmFkID0gTlVMTDsKKworCQlpZiAoc2hvd19vbmx5KQorCQkJcHJpbnRmKF8oIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIpLCBzcmMsIGRzdCk7CisKKwkJbGVuZ3RoID0gc3RybGVuKHNyYyk7CisJCWlmIChsc3RhdChzcmMsICZzdCkgPCAwKQorCQkJYmFkID0gXygiYmFkIHNvdXJjZSIpOworCQllbHNlIGlmICghc3RybmNtcChzcmMsIGRzdCwgbGVuZ3RoKSAmJgorCQkJCShkc3RbbGVuZ3RoXSA9PSAwIHx8IGRzdFtsZW5ndGhdID09ICcvJykpIHsKKwkJCWJhZCA9IF8oImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiKTsKKwkJfSBlbHNlIGlmICgoc3JjX2lzX2RpciA9IFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJJiYgbHN0YXQoZHN0LCAmc3QpID09IDApCisJCQliYWQgPSBfKCJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIik7CisJCWVsc2UgaWYgKHNyY19pc19kaXIpIHsKKwkJCWludCBmaXJzdCA9IGNhY2hlX25hbWVfcG9zKHNyYywgbGVuZ3RoKSwgbGFzdDsKKworCQkJaWYgKGZpcnN0ID49IDApCisJCQkJcHJlcGFyZV9tb3ZlX3N1Ym1vZHVsZShzcmMsIGZpcnN0LAorCQkJCQkJICAgICAgIHN1Ym1vZHVsZV9naXRmaWxlICsgaSk7CisJCQllbHNlIGlmIChpbmRleF9yYW5nZV9vZl9zYW1lX2RpcihzcmMsIGxlbmd0aCwKKwkJCQkJCQkgJmZpcnN0LCAmbGFzdCkgPCAxKQorCQkJCWJhZCA9IF8oInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiKTsKKwkJCWVsc2UgeyAvKiBsYXN0IC0gZmlyc3QgPj0gMSAqLworCQkJCWludCBqLCBkc3RfbGVuLCBuOworCisJCQkJbW9kZXNbaV0gPSBXT1JLSU5HX0RJUkVDVE9SWTsKKwkJCQluID0gYXJnYyArIGxhc3QgLSBmaXJzdDsKKwkJCQlSRUFMTE9DX0FSUkFZKHNvdXJjZSwgbik7CisJCQkJUkVBTExPQ19BUlJBWShkZXN0aW5hdGlvbiwgbik7CisJCQkJUkVBTExPQ19BUlJBWShtb2Rlcywgbik7CisJCQkJUkVBTExPQ19BUlJBWShzdWJtb2R1bGVfZ2l0ZmlsZSwgbik7CisKKwkJCQlkc3QgPSBhZGRfc2xhc2goZHN0KTsKKwkJCQlkc3RfbGVuID0gc3RybGVuKGRzdCk7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbGFzdCAtIGZpcnN0OyBqKyspIHsKKwkJCQkJY29uc3QgY2hhciAqcGF0aCA9IGFjdGl2ZV9jYWNoZVtmaXJzdCArIGpdLT5uYW1lOworCQkJCQlzb3VyY2VbYXJnYyArIGpdID0gcGF0aDsKKwkJCQkJZGVzdGluYXRpb25bYXJnYyArIGpdID0KKwkJCQkJCXByZWZpeF9wYXRoKGRzdCwgZHN0X2xlbiwgcGF0aCArIGxlbmd0aCArIDEpOworCQkJCQltb2Rlc1thcmdjICsgal0gPSBJTkRFWDsKKwkJCQkJc3VibW9kdWxlX2dpdGZpbGVbYXJnYyArIGpdID0gTlVMTDsKKwkJCQl9CisJCQkJYXJnYyArPSBsYXN0IC0gZmlyc3Q7CisJCQl9CisJCX0gZWxzZSBpZiAoY2FjaGVfbmFtZV9wb3Moc3JjLCBsZW5ndGgpIDwgMCkKKwkJCWJhZCA9IF8oIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiKTsKKwkJZWxzZSBpZiAobHN0YXQoZHN0LCAmc3QpID09IDAgJiYKKwkJCSAoIWlnbm9yZV9jYXNlIHx8IHN0cmNhc2VjbXAoc3JjLCBkc3QpKSkgeworCQkJYmFkID0gXygiZGVzdGluYXRpb24gZXhpc3RzIik7CisJCQlpZiAoZm9yY2UpIHsKKwkJCQkvKgorCQkJCSAqIG9ubHkgZmlsZXMgY2FuIG92ZXJ3cml0ZSBlYWNoIG90aGVyOgorCQkJCSAqIGNoZWNrIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbgorCQkJCSAqLworCQkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpIHx8IFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKwkJCQkJaWYgKHZlcmJvc2UpCisJCQkJCQl3YXJuaW5nKF8oIm92ZXJ3cml0aW5nICclcyciKSwgZHN0KTsKKwkJCQkJYmFkID0gTlVMTDsKKwkJCQl9IGVsc2UKKwkJCQkJYmFkID0gXygiQ2Fubm90IG92ZXJ3cml0ZSIpOworCQkJfQorCQl9IGVsc2UgaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnNyY19mb3JfZHN0LCBkc3QpKQorCQkJYmFkID0gXygibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0Iik7CisJCWVsc2UgaWYgKGlzX2Rpcl9zZXAoZHN0W3N0cmxlbihkc3QpIC0gMV0pKQorCQkJYmFkID0gXygiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0Iik7CisJCWVsc2UKKwkJCXN0cmluZ19saXN0X2luc2VydCgmc3JjX2Zvcl9kc3QsIGRzdCk7CisKKwkJaWYgKCFiYWQpCisJCQljb250aW51ZTsKKwkJaWYgKCFpZ25vcmVfZXJyb3JzKQorCQkJZGllKF8oIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIiksCisJCQkgICAgIGJhZCwgc3JjLCBkc3QpOworCQlpZiAoLS1hcmdjID4gMCkgeworCQkJaW50IG4gPSBhcmdjIC0gaTsKKwkJCW1lbW1vdmUoc291cmNlICsgaSwgc291cmNlICsgaSArIDEsCisJCQkJbiAqIHNpemVvZihjaGFyICopKTsKKwkJCW1lbW1vdmUoZGVzdGluYXRpb24gKyBpLCBkZXN0aW5hdGlvbiArIGkgKyAxLAorCQkJCW4gKiBzaXplb2YoY2hhciAqKSk7CisJCQltZW1tb3ZlKG1vZGVzICsgaSwgbW9kZXMgKyBpICsgMSwKKwkJCQluICogc2l6ZW9mKGVudW0gdXBkYXRlX21vZGUpKTsKKwkJCW1lbW1vdmUoc3VibW9kdWxlX2dpdGZpbGUgKyBpLCBzdWJtb2R1bGVfZ2l0ZmlsZSArIGkgKyAxLAorCQkJCW4gKiBzaXplb2YoY2hhciAqKSk7CisJCQlpLS07CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnNyYyA9IHNvdXJjZVtpXSwgKmRzdCA9IGRlc3RpbmF0aW9uW2ldOworCQllbnVtIHVwZGF0ZV9tb2RlIG1vZGUgPSBtb2Rlc1tpXTsKKwkJaW50IHBvczsKKwkJaWYgKHNob3dfb25seSB8fCB2ZXJib3NlKQorCQkJcHJpbnRmKF8oIlJlbmFtaW5nICVzIHRvICVzXG4iKSwgc3JjLCBkc3QpOworCQlpZiAoc2hvd19vbmx5KQorCQkJY29udGludWU7CisJCWlmIChtb2RlICE9IElOREVYICYmIHJlbmFtZShzcmMsIGRzdCkgPCAwKSB7CisJCQlpZiAoaWdub3JlX2Vycm9ycykKKwkJCQljb250aW51ZTsKKwkJCWRpZV9lcnJubyhfKCJyZW5hbWluZyAnJXMnIGZhaWxlZCIpLCBzcmMpOworCQl9CisJCWlmIChzdWJtb2R1bGVfZ2l0ZmlsZVtpXSkgeworCQkJaWYgKCF1cGRhdGVfcGF0aF9pbl9naXRtb2R1bGVzKHNyYywgZHN0KSkKKwkJCQlnaXRtb2R1bGVzX21vZGlmaWVkID0gMTsKKwkJCWlmIChzdWJtb2R1bGVfZ2l0ZmlsZVtpXSAhPSBTVUJNT0RVTEVfV0lUSF9HSVRESVIpCisJCQkJY29ubmVjdF93b3JrX3RyZWVfYW5kX2dpdF9kaXIoZHN0LAorCQkJCQkJCSAgICAgIHN1Ym1vZHVsZV9naXRmaWxlW2ldLAorCQkJCQkJCSAgICAgIDEpOworCQl9CisKKwkJaWYgKG1vZGUgPT0gV09SS0lOR19ESVJFQ1RPUlkpCisJCQljb250aW51ZTsKKworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhzcmMsIHN0cmxlbihzcmMpKTsKKwkJYXNzZXJ0KHBvcyA+PSAwKTsKKwkJcmVuYW1lX2NhY2hlX2VudHJ5X2F0KHBvcywgZHN0KTsKKwl9CisKKwlpZiAoZ2l0bW9kdWxlc19tb2RpZmllZCkKKwkJc3RhZ2VfdXBkYXRlZF9naXRtb2R1bGVzKCZ0aGVfaW5kZXgpOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLAorCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKQorCQlkaWUoXygiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL25hbWUtcmV2LmMgYi9idWlsdGluL25hbWUtcmV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkY2QyNQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbmFtZS1yZXYuYwpAQCAtMCwwICsxLDYzNiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgImNvbW1pdC1zbGFiLmgiCisKKy8qCisgKiBPbmUgZGF5LiAgU2VlIHRoZSAnbmFtZSBhIHJldiBzaG9ydGx5IGFmdGVyIGVwb2NoJyB0ZXN0IGluIHQ2MTIwIHdoZW4KKyAqIGNoYW5naW5nIHRoaXMgdmFsdWUKKyAqLworI2RlZmluZSBDVVRPRkZfREFURV9TTE9QIDg2NDAwCisKK3N0cnVjdCByZXZfbmFtZSB7CisJY2hhciAqdGlwX25hbWU7CisJdGltZXN0YW1wX3QgdGFnZ2VyZGF0ZTsKKwlpbnQgZ2VuZXJhdGlvbjsKKwlpbnQgZGlzdGFuY2U7CisJaW50IGZyb21fdGFnOworfTsKKworZGVmaW5lX2NvbW1pdF9zbGFiKGNvbW1pdF9yZXZfbmFtZSwgc3RydWN0IHJldl9uYW1lKTsKKworc3RhdGljIHRpbWVzdGFtcF90IGN1dG9mZiA9IFRJTUVfTUFYOworc3RhdGljIHN0cnVjdCBjb21taXRfcmV2X25hbWUgcmV2X25hbWVzOworCisvKiBIb3cgbWFueSBnZW5lcmF0aW9ucyBhcmUgbWF4aW1hbGx5IHByZWZlcnJlZCBvdmVyIF9vbmVfIG1lcmdlIHRyYXZlcnNhbD8gKi8KKyNkZWZpbmUgTUVSR0VfVFJBVkVSU0FMX1dFSUdIVCA2NTUzNQorCitzdGF0aWMgaW50IGlzX3ZhbGlkX3Jldl9uYW1lKGNvbnN0IHN0cnVjdCByZXZfbmFtZSAqbmFtZSkKK3sKKwlyZXR1cm4gbmFtZSAmJiAobmFtZS0+Z2VuZXJhdGlvbiB8fCBuYW1lLT50aXBfbmFtZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmV2X25hbWUgKmdldF9jb21taXRfcmV2X25hbWUoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCByZXZfbmFtZSAqbmFtZSA9IGNvbW1pdF9yZXZfbmFtZV9wZWVrKCZyZXZfbmFtZXMsIGNvbW1pdCk7CisKKwlyZXR1cm4gaXNfdmFsaWRfcmV2X25hbWUobmFtZSkgPyBuYW1lIDogTlVMTDsKK30KKworc3RhdGljIGludCBpc19iZXR0ZXJfbmFtZShzdHJ1Y3QgcmV2X25hbWUgKm5hbWUsCisJCQkgIHRpbWVzdGFtcF90IHRhZ2dlcmRhdGUsCisJCQkgIGludCBkaXN0YW5jZSwKKwkJCSAgaW50IGZyb21fdGFnKQoreworCS8qCisJICogV2hlbiBjb21wYXJpbmcgbmFtZXMgYmFzZWQgb24gdGFncywgcHJlZmVyIG5hbWVzCisJICogYmFzZWQgb24gdGhlIG9sZGVyIHRhZywgZXZlbiBpZiBpdCBpcyBmYXJ0aGVyIGF3YXkuCisJICovCisJaWYgKGZyb21fdGFnICYmIG5hbWUtPmZyb21fdGFnKQorCQlyZXR1cm4gKG5hbWUtPnRhZ2dlcmRhdGUgPiB0YWdnZXJkYXRlIHx8CisJCQkobmFtZS0+dGFnZ2VyZGF0ZSA9PSB0YWdnZXJkYXRlICYmCisJCQkgbmFtZS0+ZGlzdGFuY2UgPiBkaXN0YW5jZSkpOworCisJLyoKKwkgKiBXZSBrbm93IHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgYSBub24tdGFnIGF0IHRoaXMgcG9pbnQuCisJICogZmF2b3IgYSB0YWcgb3ZlciBhIG5vbi10YWcuCisJICovCisJaWYgKG5hbWUtPmZyb21fdGFnICE9IGZyb21fdGFnKQorCQlyZXR1cm4gZnJvbV90YWc7CisKKwkvKgorCSAqIFdlIGFyZSBub3cgbG9va2luZyBhdCB0d28gbm9uLXRhZ3MuICBUaWVicmVhayB0byBmYXZvcgorCSAqIHNob3J0ZXIgaG9wcy4KKwkgKi8KKwlpZiAobmFtZS0+ZGlzdGFuY2UgIT0gZGlzdGFuY2UpCisJCXJldHVybiBuYW1lLT5kaXN0YW5jZSA+IGRpc3RhbmNlOworCisJLyogLi4uIG9yIHRpZWJyZWFrIHRvIGZhdm9yIG9sZGVyIGRhdGUgKi8KKwlpZiAobmFtZS0+dGFnZ2VyZGF0ZSAhPSB0YWdnZXJkYXRlKQorCQlyZXR1cm4gbmFtZS0+dGFnZ2VyZGF0ZSA+IHRhZ2dlcmRhdGU7CisKKwkvKiBrZWVwIHRoZSBjdXJyZW50IG9uZSBpZiB3ZSBjYW5ub3QgZGVjaWRlICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmV2X25hbWUgKmNyZWF0ZV9vcl91cGRhdGVfbmFtZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCSAgICAgIHRpbWVzdGFtcF90IHRhZ2dlcmRhdGUsCisJCQkJCSAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgZGlzdGFuY2UsCisJCQkJCSAgICAgIGludCBmcm9tX3RhZykKK3sKKwlzdHJ1Y3QgcmV2X25hbWUgKm5hbWUgPSBjb21taXRfcmV2X25hbWVfYXQoJnJldl9uYW1lcywgY29tbWl0KTsKKworCWlmIChpc192YWxpZF9yZXZfbmFtZShuYW1lKSkgeworCQlpZiAoIWlzX2JldHRlcl9uYW1lKG5hbWUsIHRhZ2dlcmRhdGUsIGRpc3RhbmNlLCBmcm9tX3RhZykpCisJCQlyZXR1cm4gTlVMTDsKKworCQkvKgorCQkgKiBUaGlzIHN0cmluZyBtaWdodCBzdGlsbCBiZSBzaGFyZWQgd2l0aCBhbmNlc3RvcnMKKwkJICogKGdlbmVyYXRpb24gPiAwKS4gIFdlIGNhbiByZWxlYXNlIGl0IGhlcmUgcmVnYXJkbGVzcywKKwkJICogYmVjYXVzZSB0aGUgbmV3IG5hbWUgdGhhdCBoYXMganVzdCB3b24gd2lsbCBiZSBiZXR0ZXIKKwkJICogZm9yIHRoZW0gYXMgd2VsbCwgc28gbmFtZV9yZXYoKSB3aWxsIHJlcGxhY2UgdGhlc2UKKwkJICogc3RhbGUgcG9pbnRlcnMgd2hlbiBpdCBwcm9jZXNzZXMgdGhlIHBhcmVudHMuCisJCSAqLworCQlpZiAoIW5hbWUtPmdlbmVyYXRpb24pCisJCQlmcmVlKG5hbWUtPnRpcF9uYW1lKTsKKwl9CisKKwluYW1lLT50YWdnZXJkYXRlID0gdGFnZ2VyZGF0ZTsKKwluYW1lLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKwluYW1lLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCW5hbWUtPmZyb21fdGFnID0gZnJvbV90YWc7CisKKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGNoYXIgKmdldF9wYXJlbnRfbmFtZShjb25zdCBzdHJ1Y3QgcmV2X25hbWUgKm5hbWUsIGludCBwYXJlbnRfbnVtYmVyKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgbGVuOworCisJc3RyaXBfc3VmZml4KG5hbWUtPnRpcF9uYW1lLCAiXjAiLCAmbGVuKTsKKwlpZiAobmFtZS0+Z2VuZXJhdGlvbiA+IDApIHsKKwkJc3RyYnVmX2dyb3coJnNiLCBsZW4gKworCQkJICAgIDEgKyBkZWNpbWFsX3dpZHRoKG5hbWUtPmdlbmVyYXRpb24pICsKKwkJCSAgICAxICsgZGVjaW1hbF93aWR0aChwYXJlbnRfbnVtYmVyKSk7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiUuKnN+JWReJWQiLCAoaW50KWxlbiwgbmFtZS0+dGlwX25hbWUsCisJCQkgICAgbmFtZS0+Z2VuZXJhdGlvbiwgcGFyZW50X251bWJlcik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2dyb3coJnNiLCBsZW4gKworCQkJICAgIDEgKyBkZWNpbWFsX3dpZHRoKHBhcmVudF9udW1iZXIpKTsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiJS4qc14lZCIsIChpbnQpbGVuLCBuYW1lLT50aXBfbmFtZSwKKwkJCSAgICBwYXJlbnRfbnVtYmVyKTsKKwl9CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgbmFtZV9yZXYoc3RydWN0IGNvbW1pdCAqc3RhcnRfY29tbWl0LAorCQljb25zdCBjaGFyICp0aXBfbmFtZSwgdGltZXN0YW1wX3QgdGFnZ2VyZGF0ZSwKKwkJaW50IGZyb21fdGFnLCBpbnQgZGVyZWYpCit7CisJc3RydWN0IHByaW9fcXVldWUgcXVldWU7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXQgKipwYXJlbnRzX3RvX3F1ZXVlID0gTlVMTDsKKwlzaXplX3QgcGFyZW50c190b19xdWV1ZV9uciwgcGFyZW50c190b19xdWV1ZV9hbGxvYyA9IDA7CisJc3RydWN0IHJldl9uYW1lICpzdGFydF9uYW1lOworCisJcGFyc2VfY29tbWl0KHN0YXJ0X2NvbW1pdCk7CisJaWYgKHN0YXJ0X2NvbW1pdC0+ZGF0ZSA8IGN1dG9mZikKKwkJcmV0dXJuOworCisJc3RhcnRfbmFtZSA9IGNyZWF0ZV9vcl91cGRhdGVfbmFtZShzdGFydF9jb21taXQsIHRhZ2dlcmRhdGUsIDAsIDAsCisJCQkJCSAgIGZyb21fdGFnKTsKKwlpZiAoIXN0YXJ0X25hbWUpCisJCXJldHVybjsKKwlpZiAoZGVyZWYpCisJCXN0YXJ0X25hbWUtPnRpcF9uYW1lID0geHN0cmZtdCgiJXNeMCIsIHRpcF9uYW1lKTsKKwllbHNlCisJCXN0YXJ0X25hbWUtPnRpcF9uYW1lID0geHN0cmR1cCh0aXBfbmFtZSk7CisKKwltZW1zZXQoJnF1ZXVlLCAwLCBzaXplb2YocXVldWUpKTsgLyogVXNlIHRoZSBwcmlvX3F1ZXVlIGFzIExJRk8gKi8KKwlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIHN0YXJ0X2NvbW1pdCk7CisKKwl3aGlsZSAoKGNvbW1pdCA9IHByaW9fcXVldWVfZ2V0KCZxdWV1ZSkpKSB7CisJCXN0cnVjdCByZXZfbmFtZSAqbmFtZSA9IGdldF9jb21taXRfcmV2X25hbWUoY29tbWl0KTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQlpbnQgcGFyZW50X251bWJlciA9IDE7CisKKwkJcGFyZW50c190b19xdWV1ZV9uciA9IDA7CisKKwkJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQkJCXBhcmVudHM7CisJCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQsIHBhcmVudF9udW1iZXIrKykgeworCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJCXN0cnVjdCByZXZfbmFtZSAqcGFyZW50X25hbWU7CisJCQlpbnQgZ2VuZXJhdGlvbiwgZGlzdGFuY2U7CisKKwkJCXBhcnNlX2NvbW1pdChwYXJlbnQpOworCQkJaWYgKHBhcmVudC0+ZGF0ZSA8IGN1dG9mZikKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHBhcmVudF9udW1iZXIgPiAxKSB7CisJCQkJZ2VuZXJhdGlvbiA9IDA7CisJCQkJZGlzdGFuY2UgPSBuYW1lLT5kaXN0YW5jZSArIE1FUkdFX1RSQVZFUlNBTF9XRUlHSFQ7CisJCQl9IGVsc2UgeworCQkJCWdlbmVyYXRpb24gPSBuYW1lLT5nZW5lcmF0aW9uICsgMTsKKwkJCQlkaXN0YW5jZSA9IG5hbWUtPmRpc3RhbmNlICsgMTsKKwkJCX0KKworCQkJcGFyZW50X25hbWUgPSBjcmVhdGVfb3JfdXBkYXRlX25hbWUocGFyZW50LCB0YWdnZXJkYXRlLAorCQkJCQkJCSAgICBnZW5lcmF0aW9uLAorCQkJCQkJCSAgICBkaXN0YW5jZSwgZnJvbV90YWcpOworCQkJaWYgKHBhcmVudF9uYW1lKSB7CisJCQkJaWYgKHBhcmVudF9udW1iZXIgPiAxKQorCQkJCQlwYXJlbnRfbmFtZS0+dGlwX25hbWUgPQorCQkJCQkJZ2V0X3BhcmVudF9uYW1lKG5hbWUsCisJCQkJCQkJCXBhcmVudF9udW1iZXIpOworCQkJCWVsc2UKKwkJCQkJcGFyZW50X25hbWUtPnRpcF9uYW1lID0gbmFtZS0+dGlwX25hbWU7CisJCQkJQUxMT0NfR1JPVyhwYXJlbnRzX3RvX3F1ZXVlLAorCQkJCQkgICBwYXJlbnRzX3RvX3F1ZXVlX25yICsgMSwKKwkJCQkJICAgcGFyZW50c190b19xdWV1ZV9hbGxvYyk7CisJCQkJcGFyZW50c190b19xdWV1ZVtwYXJlbnRzX3RvX3F1ZXVlX25yXSA9IHBhcmVudDsKKwkJCQlwYXJlbnRzX3RvX3F1ZXVlX25yKys7CisJCQl9CisJCX0KKworCQkvKiBUaGUgZmlyc3QgcGFyZW50IG11c3QgY29tZSBvdXQgZmlyc3QgZnJvbSB0aGUgcHJpb19xdWV1ZSAqLworCQl3aGlsZSAocGFyZW50c190b19xdWV1ZV9ucikKKwkJCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwKKwkJCQkgICAgICAgcGFyZW50c190b19xdWV1ZVstLXBhcmVudHNfdG9fcXVldWVfbnJdKTsKKwl9CisKKwljbGVhcl9wcmlvX3F1ZXVlKCZxdWV1ZSk7CisJZnJlZShwYXJlbnRzX3RvX3F1ZXVlKTsKK30KKworc3RhdGljIGludCBzdWJwYXRoX21hdGNoZXMoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZmlsdGVyKQoreworCWNvbnN0IGNoYXIgKnN1YnBhdGggPSBwYXRoOworCisJd2hpbGUgKHN1YnBhdGgpIHsKKwkJaWYgKCF3aWxkbWF0Y2goZmlsdGVyLCBzdWJwYXRoLCAwKSkKKwkJCXJldHVybiBzdWJwYXRoIC0gcGF0aDsKKwkJc3VicGF0aCA9IHN0cmNocihzdWJwYXRoLCAnLycpOworCQlpZiAoc3VicGF0aCkKKwkJCXN1YnBhdGgrKzsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbmFtZV9yZWZfYWJicmV2KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBzaG9ydGVuX3VuYW1iaWd1b3VzKQoreworCWlmIChzaG9ydGVuX3VuYW1iaWd1b3VzKQorCQlyZWZuYW1lID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYocmVmbmFtZSwgMCk7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgocmVmbmFtZSwgInJlZnMvaGVhZHMvIiwgJnJlZm5hbWUpKQorCQk7IC8qIHJlZm5hbWUgYWxyZWFkeSBhZHZhbmNlZCAqLworCWVsc2UKKwkJc2tpcF9wcmVmaXgocmVmbmFtZSwgInJlZnMvIiwgJnJlZm5hbWUpOworCXJldHVybiByZWZuYW1lOworfQorCitzdHJ1Y3QgbmFtZV9yZWZfZGF0YSB7CisJaW50IHRhZ3Nfb25seTsKKwlpbnQgbmFtZV9vbmx5OworCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZfZmlsdGVyczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhjbHVkZV9maWx0ZXJzOworfTsKKworc3RhdGljIHN0cnVjdCB0aXBfdGFibGUgeworCXN0cnVjdCB0aXBfdGFibGVfZW50cnkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY29uc3QgY2hhciAqcmVmbmFtZTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQl0aW1lc3RhbXBfdCB0YWdnZXJkYXRlOworCQl1bnNpZ25lZCBpbnQgZnJvbV90YWc6MTsKKwkJdW5zaWduZWQgaW50IGRlcmVmOjE7CisJfSAqdGFibGU7CisJaW50IG5yOworCWludCBhbGxvYzsKKwlpbnQgc29ydGVkOworfSB0aXBfdGFibGU7CisKK3N0YXRpYyB2b2lkIGFkZF90b190aXBfdGFibGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgICBpbnQgc2hvcnRlbl91bmFtYmlndW91cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgICB0aW1lc3RhbXBfdCB0YWdnZXJkYXRlLCBpbnQgZnJvbV90YWcsIGludCBkZXJlZikKK3sKKwlyZWZuYW1lID0gbmFtZV9yZWZfYWJicmV2KHJlZm5hbWUsIHNob3J0ZW5fdW5hbWJpZ3VvdXMpOworCisJQUxMT0NfR1JPVyh0aXBfdGFibGUudGFibGUsIHRpcF90YWJsZS5uciArIDEsIHRpcF90YWJsZS5hbGxvYyk7CisJb2lkY3B5KCZ0aXBfdGFibGUudGFibGVbdGlwX3RhYmxlLm5yXS5vaWQsIG9pZCk7CisJdGlwX3RhYmxlLnRhYmxlW3RpcF90YWJsZS5ucl0ucmVmbmFtZSA9IHhzdHJkdXAocmVmbmFtZSk7CisJdGlwX3RhYmxlLnRhYmxlW3RpcF90YWJsZS5ucl0uY29tbWl0ID0gY29tbWl0OworCXRpcF90YWJsZS50YWJsZVt0aXBfdGFibGUubnJdLnRhZ2dlcmRhdGUgPSB0YWdnZXJkYXRlOworCXRpcF90YWJsZS50YWJsZVt0aXBfdGFibGUubnJdLmZyb21fdGFnID0gZnJvbV90YWc7CisJdGlwX3RhYmxlLnRhYmxlW3RpcF90YWJsZS5ucl0uZGVyZWYgPSBkZXJlZjsKKwl0aXBfdGFibGUubnIrKzsKKwl0aXBfdGFibGUuc29ydGVkID0gMDsKK30KKworc3RhdGljIGludCB0aXBjbXAoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCB0aXBfdGFibGVfZW50cnkgKmEgPSBhXywgKmIgPSBiXzsKKwlyZXR1cm4gb2lkY21wKCZhLT5vaWQsICZiLT5vaWQpOworfQorCitzdGF0aWMgaW50IGNtcF9ieV90YWdfYW5kX2FnZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHRpcF90YWJsZV9lbnRyeSAqYSA9IGFfLCAqYiA9IGJfOworCWludCBjbXA7CisKKwkvKiBQcmVmZXIgdGFncy4gKi8KKwljbXAgPSBiLT5mcm9tX3RhZyAtIGEtPmZyb21fdGFnOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwkvKiBPbGRlciBpcyBiZXR0ZXIuICovCisJaWYgKGEtPnRhZ2dlcmRhdGUgPCBiLT50YWdnZXJkYXRlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGEtPnRhZ2dlcmRhdGUgIT0gYi0+dGFnZ2VyZGF0ZTsKK30KKworc3RhdGljIGludCBuYW1lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCXN0cnVjdCBuYW1lX3JlZl9kYXRhICpkYXRhID0gY2JfZGF0YTsKKwlpbnQgY2FuX2FiYnJldmlhdGVfb3V0cHV0ID0gZGF0YS0+dGFnc19vbmx5ICYmIGRhdGEtPm5hbWVfb25seTsKKwlpbnQgZGVyZWYgPSAwOworCWludCBmcm9tX3RhZyA9IDA7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gTlVMTDsKKwl0aW1lc3RhbXBfdCB0YWdnZXJkYXRlID0gVElNRV9NQVg7CisKKwlpZiAoZGF0YS0+dGFnc19vbmx5ICYmICFzdGFydHNfd2l0aChwYXRoLCAicmVmcy90YWdzLyIpKQorCQlyZXR1cm4gMDsKKworCWlmIChkYXRhLT5leGNsdWRlX2ZpbHRlcnMubnIpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGF0YS0+ZXhjbHVkZV9maWx0ZXJzKSB7CisJCQlpZiAoc3VicGF0aF9tYXRjaGVzKHBhdGgsIGl0ZW0tPnN0cmluZykgPj0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmIChkYXRhLT5yZWZfZmlsdGVycy5ucikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJaW50IG1hdGNoZWQgPSAwOworCisJCS8qIFNlZSBpZiBhbnkgb2YgdGhlIHBhdHRlcm5zIG1hdGNoLiAqLworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZkYXRhLT5yZWZfZmlsdGVycykgeworCQkJLyoKKwkJCSAqIENoZWNrIGFsbCBwYXR0ZXJucyBldmVuIGFmdGVyIGZpbmRpbmcgYSBtYXRjaCwgc28KKwkJCSAqIHRoYXQgd2UgY2FuIHNlZSBpZiBhIG1hdGNoIHdpdGggYSBzdWJwYXRoIGV4aXN0cy4KKwkJCSAqIFdoZW4gYSB1c2VyIGFza2VkIGZvciAncmVmcy90YWdzL3YqJyBhbmQgJ3YxLionLAorCQkJICogYm90aCBvZiB3aGljaCBtYXRjaCwgdGhlIHVzZXIgaXMgc2hvd2luZyBoZXIKKwkJCSAqIHdpbGxpbmduZXNzIHRvIGFjY2VwdCBhIHNob3J0ZW5lZCBvdXRwdXQgYnkgaGF2aW5nCisJCQkgKiB0aGUgJ3YxLionIGluIHRoZSBhY2NlcHRhYmxlIHJlZm5hbWVzLCBzbyB3ZQorCQkJICogc2hvdWxkbid0IHN0b3Agd2hlbiBzZWVpbmcgJ3JlZnMvdGFncy92MS40JyBtYXRjaGVzCisJCQkgKiAncmVmcy90YWdzL3YqJy4gIFdlIHNob3VsZCBzaG93IGl0IGFzICd2MS40Jy4KKwkJCSAqLworCQkJc3dpdGNoIChzdWJwYXRoX21hdGNoZXMocGF0aCwgaXRlbS0+c3RyaW5nKSkgeworCQkJY2FzZSAtMTogLyogZGlkIG5vdCBtYXRjaCAqLworCQkJCWJyZWFrOworCQkJY2FzZSAwOiAvKiBtYXRjaGVkIGZ1bGx5ICovCisJCQkJbWF0Y2hlZCA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OiAvKiBtYXRjaGVkIHN1YnBhdGggKi8KKwkJCQltYXRjaGVkID0gMTsKKwkJCQljYW5fYWJicmV2aWF0ZV9vdXRwdXQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogSWYgbm9uZSBvZiB0aGUgcGF0dGVybnMgbWF0Y2hlZCwgc3RvcCBub3cgKi8KKwkJaWYgKCFtYXRjaGVkKQorCQkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cnVjdCB0YWcgKnQgPSAoc3RydWN0IHRhZyAqKSBvOworCQlpZiAoIXQtPnRhZ2dlZCkKKwkJCWJyZWFrOyAvKiBicm9rZW4gcmVwb3NpdG9yeSAqLworCQlvID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmdC0+dGFnZ2VkLT5vaWQpOworCQlkZXJlZiA9IDE7CisJCXRhZ2dlcmRhdGUgPSB0LT5kYXRlOworCX0KKwlpZiAobyAmJiBvLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOworCQlmcm9tX3RhZyA9IHN0YXJ0c193aXRoKHBhdGgsICJyZWZzL3RhZ3MvIik7CisJCWlmICh0YWdnZXJkYXRlID09IFRJTUVfTUFYKQorCQkJdGFnZ2VyZGF0ZSA9IGNvbW1pdC0+ZGF0ZTsKKwl9CisKKwlhZGRfdG9fdGlwX3RhYmxlKG9pZCwgcGF0aCwgY2FuX2FiYnJldmlhdGVfb3V0cHV0LCBjb21taXQsIHRhZ2dlcmRhdGUsCisJCQkgZnJvbV90YWcsIGRlcmVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmFtZV90aXBzKHZvaWQpCit7CisJaW50IGk7CisKKwkvKgorCSAqIFRyeSB0byBzZXQgYmV0dGVyIG5hbWVzIGZpcnN0LCBzbyB0aGF0IHdvcnNlIG9uZXMgc3ByZWFkCisJICogbGVzcy4KKwkgKi8KKwlRU09SVCh0aXBfdGFibGUudGFibGUsIHRpcF90YWJsZS5uciwgY21wX2J5X3RhZ19hbmRfYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgdGlwX3RhYmxlLm5yOyBpKyspIHsKKwkJc3RydWN0IHRpcF90YWJsZV9lbnRyeSAqZSA9ICZ0aXBfdGFibGUudGFibGVbaV07CisJCWlmIChlLT5jb21taXQpIHsKKwkJCW5hbWVfcmV2KGUtPmNvbW1pdCwgZS0+cmVmbmFtZSwgZS0+dGFnZ2VyZGF0ZSwKKwkJCQkgZS0+ZnJvbV90YWcsIGUtPmRlcmVmKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm50aF90aXBfdGFibGVfZW50KHNpemVfdCBpeCwgdm9pZCAqdGFibGVfKQoreworCXN0cnVjdCB0aXBfdGFibGVfZW50cnkgKnRhYmxlID0gdGFibGVfOworCXJldHVybiB0YWJsZVtpeF0ub2lkLmhhc2g7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfZXhhY3RfcmVmX21hdGNoKGNvbnN0IHN0cnVjdCBvYmplY3QgKm8pCit7CisJaW50IGZvdW5kOworCisJaWYgKCF0aXBfdGFibGUudGFibGUgfHwgIXRpcF90YWJsZS5ucikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXRpcF90YWJsZS5zb3J0ZWQpIHsKKwkJUVNPUlQodGlwX3RhYmxlLnRhYmxlLCB0aXBfdGFibGUubnIsIHRpcGNtcCk7CisJCXRpcF90YWJsZS5zb3J0ZWQgPSAxOworCX0KKworCWZvdW5kID0gc2hhMV9wb3Moby0+b2lkLmhhc2gsIHRpcF90YWJsZS50YWJsZSwgdGlwX3RhYmxlLm5yLAorCQkJIG50aF90aXBfdGFibGVfZW50KTsKKwlpZiAoMCA8PSBmb3VuZCkKKwkJcmV0dXJuIHRpcF90YWJsZS50YWJsZVtmb3VuZF0ucmVmbmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogbWF5IHJldHVybiBhIGNvbnN0YW50IHN0cmluZyBvciB1c2UgImJ1ZiIgYXMgc2NyYXRjaCBzcGFjZSAqLworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZXZfbmFtZShjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RydWN0IHJldl9uYW1lICpuOworCWNvbnN0IHN0cnVjdCBjb21taXQgKmM7CisKKwlpZiAoby0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gZ2V0X2V4YWN0X3JlZl9tYXRjaChvKTsKKwljID0gKGNvbnN0IHN0cnVjdCBjb21taXQgKikgbzsKKwluID0gZ2V0X2NvbW1pdF9yZXZfbmFtZShjKTsKKwlpZiAoIW4pCisJCXJldHVybiBOVUxMOworCisJaWYgKCFuLT5nZW5lcmF0aW9uKQorCQlyZXR1cm4gbi0+dGlwX25hbWU7CisJZWxzZSB7CisJCXN0cmJ1Zl9yZXNldChidWYpOworCQlzdHJidWZfYWRkc3RyKGJ1Ziwgbi0+dGlwX25hbWUpOworCQlzdHJidWZfc3RyaXBfc3VmZml4KGJ1ZiwgIl4wIik7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIn4lZCIsIG4tPmdlbmVyYXRpb24pOworCQlyZXR1cm4gYnVmLT5idWY7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X25hbWUoY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqLAorCQkgICAgICBjb25zdCBjaGFyICpjYWxsZXJfbmFtZSwKKwkJICAgICAgaW50IGFsd2F5cywgaW50IGFsbG93X3VuZGVmaW5lZCwgaW50IG5hbWVfb25seSkKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZvYmotPm9pZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFuYW1lX29ubHkpCisJCXByaW50ZigiJXMgIiwgY2FsbGVyX25hbWUgPyBjYWxsZXJfbmFtZSA6IG9pZF90b19oZXgob2lkKSk7CisJbmFtZSA9IGdldF9yZXZfbmFtZShvYmosICZidWYpOworCWlmIChuYW1lKQorCQlwcmludGYoIiVzXG4iLCBuYW1lKTsKKwllbHNlIGlmIChhbGxvd191bmRlZmluZWQpCisJCXByaW50ZigidW5kZWZpbmVkXG4iKTsKKwllbHNlIGlmIChhbHdheXMpCisJCXByaW50ZigiJXNcbiIsIGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIERFRkFVTFRfQUJCUkVWKSk7CisJZWxzZQorCQlkaWUoImNhbm5vdCBkZXNjcmliZSAnJXMnIiwgb2lkX3RvX2hleChvaWQpKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBuYW1lX3Jldl91c2FnZVtdID0geworCU5fKCJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iKSwKKwlOXygiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIiksCisJTl8oImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIiksCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgbmFtZV9yZXZfbGluZShjaGFyICpwLCBzdHJ1Y3QgbmFtZV9yZWZfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBjb3VudGVyID0gMDsKKwljaGFyICpwX3N0YXJ0OworCWNvbnN0IHVuc2lnbmVkIGhleHN6ID0gdGhlX2hhc2hfYWxnby0+aGV4c3o7CisKKwlmb3IgKHBfc3RhcnQgPSBwOyAqcDsgcCsrKSB7CisjZGVmaW5lIGlzaGV4KHgpIChpc2RpZ2l0KCh4KSkgfHwgKCh4KSA+PSAnYScgJiYgKHgpIDw9ICdmJykpCisJCWlmICghaXNoZXgoKnApKQorCQkJY291bnRlciA9IDA7CisJCWVsc2UgaWYgKCsrY291bnRlciA9PSBoZXhzeiAmJgorCQkJICFpc2hleCgqKHArMSkpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCQkJY2hhciBjID0gKihwKzEpOworCQkJaW50IHBfbGVuID0gcCAtIHBfc3RhcnQgKyAxOworCisJCQljb3VudGVyID0gMDsKKworCQkJKihwKzEpID0gMDsKKwkJCWlmICghZ2V0X29pZChwIC0gKGhleHN6IC0gMSksICZvaWQpKSB7CisJCQkJc3RydWN0IG9iamVjdCAqbyA9CisJCQkJCWxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpOworCQkJCWlmIChvKQorCQkJCQluYW1lID0gZ2V0X3Jldl9uYW1lKG8sICZidWYpOworCQkJfQorCQkJKihwKzEpID0gYzsKKworCQkJaWYgKCFuYW1lKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoZGF0YS0+bmFtZV9vbmx5KQorCQkJCXByaW50ZigiJS4qcyVzIiwgcF9sZW4gLSBoZXhzeiwgcF9zdGFydCwgbmFtZSk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIlLipzICglcykiLCBwX2xlbiwgcF9zdGFydCwgbmFtZSk7CisJCQlwX3N0YXJ0ID0gcCArIDE7CisJCX0KKwl9CisKKwkvKiBmbHVzaCAqLworCWlmIChwX3N0YXJ0ICE9IHApCisJCWZ3cml0ZShwX3N0YXJ0LCBwIC0gcF9zdGFydCwgMSwgc3Rkb3V0KTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitpbnQgY21kX25hbWVfcmV2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvYmplY3RfYXJyYXkgcmV2cyA9IE9CSkVDVF9BUlJBWV9JTklUOworCWludCBhbGwgPSAwLCB0cmFuc2Zvcm1fc3RkaW4gPSAwLCBhbGxvd191bmRlZmluZWQgPSAxLCBhbHdheXMgPSAwLCBwZWVsX3RhZyA9IDA7CisJc3RydWN0IG5hbWVfcmVmX2RhdGEgZGF0YSA9IHsgMCwgMCwgU1RSSU5HX0xJU1RfSU5JVF9OT0RVUCwgU1RSSU5HX0xJU1RfSU5JVF9OT0RVUCB9OworCXN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCQlPUFRfQk9PTCgwLCAibmFtZS1vbmx5IiwgJmRhdGEubmFtZV9vbmx5LCBOXygicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIikpLAorCQlPUFRfQk9PTCgwLCAidGFncyIsICZkYXRhLnRhZ3Nfb25seSwgTl8oIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIpKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJyZWZzIiwgJmRhdGEucmVmX2ZpbHRlcnMsIE5fKCJwYXR0ZXJuIiksCisJCQkJICAgTl8oIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IikpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImV4Y2x1ZGUiLCAmZGF0YS5leGNsdWRlX2ZpbHRlcnMsIE5fKCJwYXR0ZXJuIiksCisJCQkJICAgTl8oImlnbm9yZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIpKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0JPT0woMCwgImFsbCIsICZhbGwsIE5fKCJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIikpLAorCQlPUFRfQk9PTCgwLCAic3RkaW4iLCAmdHJhbnNmb3JtX3N0ZGluLCBOXygicmVhZCBmcm9tIHN0ZGluIikpLAorCQlPUFRfQk9PTCgwLCAidW5kZWZpbmVkIiwgJmFsbG93X3VuZGVmaW5lZCwgTl8oImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIpKSwKKwkJT1BUX0JPT0woMCwgImFsd2F5cyIsICAgICAmYWx3YXlzLAorCQkJICAgTl8oInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIpKSwKKwkJeworCQkJLyogQSBIaWRkZW4gT1BUX0JPT0wgKi8KKwkJCU9QVElPTl9TRVRfSU5ULCAwLCAicGVlbC10YWciLCAmcGVlbF90YWcsIE5VTEwsCisJCQlOXygiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4sIE5VTEwsIDEsCisJCX0sCisJCU9QVF9FTkQoKSwKKwl9OworCisJaW5pdF9jb21taXRfcmV2X25hbWUoJnJldl9uYW1lcyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgbmFtZV9yZXZfdXNhZ2UsIDApOworCWlmIChhbGwgKyB0cmFuc2Zvcm1fc3RkaW4gKyAhIWFyZ2MgPiAxKSB7CisJCWVycm9yKCJTcGVjaWZ5IGVpdGhlciBhIGxpc3QsIG9yIC0tYWxsLCBub3QgYm90aCEiKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKG5hbWVfcmV2X3VzYWdlLCBvcHRzKTsKKwl9CisJaWYgKGFsbCB8fCB0cmFuc2Zvcm1fc3RkaW4pCisJCWN1dG9mZiA9IDA7CisKKwlmb3IgKDsgYXJnYzsgYXJnYy0tLCBhcmd2KyspIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCWlmIChnZXRfb2lkKCphcmd2LCAmb2lkKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IHNoYTEgZm9yICVzLiBTa2lwcGluZy5cbiIsCisJCQkJCSphcmd2KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tbWl0ID0gTlVMTDsKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJaWYgKG9iamVjdCkgeworCQkJc3RydWN0IG9iamVjdCAqcGVlbGVkID0gZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgb2JqZWN0LCAqYXJndiwgMCk7CisJCQlpZiAocGVlbGVkICYmIHBlZWxlZC0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQkJCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopcGVlbGVkOworCQl9CisKKwkJaWYgKCFvYmplY3QpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGdldCBvYmplY3QgZm9yICVzLiBTa2lwcGluZy5cbiIsCisJCQkJCSphcmd2KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNvbW1pdCkgeworCQkJaWYgKGN1dG9mZiA+IGNvbW1pdC0+ZGF0ZSkKKwkJCQljdXRvZmYgPSBjb21taXQtPmRhdGU7CisJCX0KKworCQlpZiAocGVlbF90YWcpIHsKKwkJCWlmICghY29tbWl0KSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IGNvbW1pdCBmb3IgJXMuIFNraXBwaW5nLlxuIiwKKwkJCQkJKmFyZ3YpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJb2JqZWN0ID0gKHN0cnVjdCBvYmplY3QgKiljb21taXQ7CisJCX0KKwkJYWRkX29iamVjdF9hcnJheShvYmplY3QsICphcmd2LCAmcmV2cyk7CisJfQorCisJaWYgKGN1dG9mZikgeworCQkvKiBjaGVjayBmb3IgdW5kZWZsb3cgKi8KKwkJaWYgKGN1dG9mZiA+IFRJTUVfTUlOICsgQ1VUT0ZGX0RBVEVfU0xPUCkKKwkJCWN1dG9mZiA9IGN1dG9mZiAtIENVVE9GRl9EQVRFX1NMT1A7CisJCWVsc2UKKwkJCWN1dG9mZiA9IFRJTUVfTUlOOworCX0KKwlmb3JfZWFjaF9yZWYobmFtZV9yZWYsICZkYXRhKTsKKwluYW1lX3RpcHMoKTsKKworCWlmICh0cmFuc2Zvcm1fc3RkaW4pIHsKKwkJY2hhciBidWZmZXJbMjA0OF07CisKKwkJd2hpbGUgKCFmZW9mKHN0ZGluKSkgeworCQkJY2hhciAqcCA9IGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKTsKKwkJCWlmICghcCkKKwkJCQlicmVhazsKKwkJCW5hbWVfcmV2X2xpbmUocCwgJmRhdGEpOworCQl9CisJfSBlbHNlIGlmIChhbGwpIHsKKwkJaW50IGksIG1heDsKKworCQltYXggPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOworCQlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiA9IGdldF9pbmRleGVkX29iamVjdChpKTsKKwkJCWlmICghb2JqIHx8IG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJCWNvbnRpbnVlOworCQkJc2hvd19uYW1lKG9iaiwgTlVMTCwKKwkJCQkgIGFsd2F5cywgYWxsb3dfdW5kZWZpbmVkLCBkYXRhLm5hbWVfb25seSk7CisJCX0KKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHJldnMubnI7IGkrKykKKwkJCXNob3dfbmFtZShyZXZzLm9iamVjdHNbaV0uaXRlbSwgcmV2cy5vYmplY3RzW2ldLm5hbWUsCisJCQkJICBhbHdheXMsIGFsbG93X3VuZGVmaW5lZCwgZGF0YS5uYW1lX29ubHkpOworCX0KKworCVVOTEVBSyhyZXZzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbm90ZXMuYyBiL2J1aWx0aW4vbm90ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWU0NjhlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ub3Rlcy5jCkBAIC0wLDAgKzEsMTAzOSBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBub3RlcyIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSm9oYW4gSGVybGFuZCA8am9oYW5AaGVybGFuZC5uZXQ+CisgKgorICogQmFzZWQgb24gZ2l0LW5vdGVzLnNoIGJ5IEpvaGFubmVzIFNjaGluZGVsaW4sCisgKiBhbmQgYnVpbHRpbi90YWcuYyBieSBLcmlzdGlhbiBIw7hnc2JlcmcgYW5kIENhcmxvcyBSaWNhLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAicHJldHR5LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJub3Rlcy1tZXJnZS5oIgorI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IiksCisJTl8oImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iKSwKKwlOXygiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfbGlzdF91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19hZGRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfY29weV91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IiksCisJTl8oImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfYXBwZW5kX3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX2VkaXRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX3Nob3dfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX21lcmdlX3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIpLAorCU5fKCJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iKSwKKwlOXygiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19yZW1vdmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfcHJ1bmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfZ2V0X3JlZl91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgZ2V0LXJlZiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIG5vdGVfdGVtcGxhdGVbXSA9CisJTl8oIldyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDoiKTsKKworc3RydWN0IG5vdGVfZGF0YSB7CisJaW50IGdpdmVuOworCWludCB1c2VfZWRpdG9yOworCWNoYXIgKmVkaXRfcGF0aDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfbm90ZV9kYXRhKHN0cnVjdCBub3RlX2RhdGEgKmQpCit7CisJaWYgKGQtPmVkaXRfcGF0aCkgeworCQl1bmxpbmtfb3Jfd2FybihkLT5lZGl0X3BhdGgpOworCQlmcmVlKGQtPmVkaXRfcGF0aCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZkLT5idWYpOworfQorCitzdGF0aWMgaW50IGxpc3RfZWFjaF9ub3RlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGVfb2lkLCBjaGFyICpub3RlX3BhdGgsCisJCXZvaWQgKmNiX2RhdGEpCit7CisJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleChub3RlX29pZCksIG9pZF90b19oZXgob2JqZWN0X29pZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb3B5X29ial90b19mZChpbnQgZmQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWlmIChidWYpIHsKKwkJaWYgKHNpemUpCisJCQl3cml0ZV9vcl9kaWUoZmQsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbW1lbnRlZF9vYmplY3QoaW50IGZkLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3QpCit7CisJY29uc3QgY2hhciAqc2hvd19hcmdzWzVdID0KKwkJeyJzaG93IiwgIi0tc3RhdCIsICItLW5vLW5vdGVzIiwgb2lkX3RvX2hleChvYmplY3QpLCBOVUxMfTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBzaG93ID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBjYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBJbnZva2UgImdpdCBzaG93IC0tc3RhdCAtLW5vLW5vdGVzICRvYmplY3QiICovCisJc2hvdy5hcmd2ID0gc2hvd19hcmdzOworCXNob3cubm9fc3RkaW4gPSAxOworCXNob3cub3V0ID0gLTE7CisJc2hvdy5lcnIgPSAwOworCXNob3cuZ2l0X2NtZCA9IDE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJnNob3cpKQorCQlkaWUoXygidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciKSwKKwkJICAgIG9pZF90b19oZXgob2JqZWN0KSk7CisKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1Ziwgc2hvdy5vdXQsIDApIDwgMCkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiKSk7CisJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoJmNidWYsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCXdyaXRlX29yX2RpZShmZCwgY2J1Zi5idWYsIGNidWYubGVuKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmc2hvdykpCisJCWRpZShfKCJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciKSwKKwkJICAgIG9pZF90b19oZXgob2JqZWN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfbm90ZV9kYXRhKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdCwgc3RydWN0IG5vdGVfZGF0YSAqZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX25vdGUpCit7CisJaWYgKGQtPnVzZV9lZGl0b3IgfHwgIWQtPmdpdmVuKSB7CisJCWludCBmZDsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQkvKiB3cml0ZSB0aGUgdGVtcGxhdGUgbWVzc2FnZSBiZWZvcmUgZWRpdGluZzogKi8KKwkJZC0+ZWRpdF9wYXRoID0gZ2l0X3BhdGhkdXAoIk5PVEVTX0VESVRNU0ciKTsKKwkJZmQgPSBvcGVuKGQtPmVkaXRfcGF0aCwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisJCWlmIChmZCA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciKSwgZC0+ZWRpdF9wYXRoKTsKKworCQlpZiAoZC0+Z2l2ZW4pCisJCQl3cml0ZV9vcl9kaWUoZmQsIGQtPmJ1Zi5idWYsIGQtPmJ1Zi5sZW4pOworCQllbHNlIGlmIChvbGRfbm90ZSkKKwkJCWNvcHlfb2JqX3RvX2ZkKGZkLCBvbGRfbm90ZSk7CisKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCQlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcygmYnVmLCAiXG4iLCBzdHJsZW4oIlxuIikpOworCQlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcygmYnVmLCBfKG5vdGVfdGVtcGxhdGUpLCBzdHJsZW4oXyhub3RlX3RlbXBsYXRlKSkpOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJCXdyaXRlX29yX2RpZShmZCwgYnVmLmJ1ZiwgYnVmLmxlbik7CisKKwkJd3JpdGVfY29tbWVudGVkX29iamVjdChmZCwgb2JqZWN0KTsKKworCQljbG9zZShmZCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlzdHJidWZfcmVzZXQoJmQtPmJ1Zik7CisKKwkJaWYgKGxhdW5jaF9lZGl0b3IoZC0+ZWRpdF9wYXRoLCAmZC0+YnVmLCBOVUxMKSkgeworCQkJZGllKF8oInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIpKTsKKwkJfQorCQlzdHJidWZfc3RyaXBzcGFjZSgmZC0+YnVmLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX25vdGVfZGF0YShzdHJ1Y3Qgbm90ZV9kYXRhICpkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaWYgKHdyaXRlX29iamVjdF9maWxlKGQtPmJ1Zi5idWYsIGQtPmJ1Zi5sZW4sIGJsb2JfdHlwZSwgb2lkKSkgeworCQllcnJvcihfKCJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiKSk7CisJCWlmIChkLT5lZGl0X3BhdGgpCisJCQllcnJvcihfKCJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIpLAorCQkJCWQtPmVkaXRfcGF0aCk7CisJCWV4aXQoMTI4KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbXNnX2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBub3RlX2RhdGEgKmQgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJc3RyYnVmX2dyb3coJmQtPmJ1Ziwgc3RybGVuKGFyZykgKyAyKTsKKwlpZiAoZC0+YnVmLmxlbikKKwkJc3RyYnVmX2FkZGNoKCZkLT5idWYsICdcbicpOworCXN0cmJ1Zl9hZGRzdHIoJmQtPmJ1ZiwgYXJnKTsKKwlzdHJidWZfc3RyaXBzcGFjZSgmZC0+YnVmLCAwKTsKKworCWQtPmdpdmVuID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9maWxlX2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBub3RlX2RhdGEgKmQgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKGQtPmJ1Zi5sZW4pCisJCXN0cmJ1Zl9hZGRjaCgmZC0+YnVmLCAnXG4nKTsKKwlpZiAoIXN0cmNtcChhcmcsICItIikpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkKCZkLT5idWYsIDAsIDEwMjQpIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgcmVhZCAnJXMnIiksIGFyZyk7CisJfSBlbHNlIGlmIChzdHJidWZfcmVhZF9maWxlKCZkLT5idWYsIGFyZywgMTAyNCkgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIiksIGFyZyk7CisJc3RyYnVmX3N0cmlwc3BhY2UoJmQtPmJ1ZiwgMCk7CisKKwlkLT5naXZlbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmV1c2VfYXJnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG5vdGVfZGF0YSAqZCA9IG9wdC0+dmFsdWU7CisJY2hhciAqYnVmOworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCWlmIChkLT5idWYubGVuKQorCQlzdHJidWZfYWRkY2goJmQtPmJ1ZiwgJ1xuJyk7CisKKwlpZiAoZ2V0X29pZChhcmcsICZvYmplY3QpKQorCQlkaWUoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgYXJnKTsKKwlpZiAoIShidWYgPSByZWFkX29iamVjdF9maWxlKCZvYmplY3QsICZ0eXBlLCAmbGVuKSkpCisJCWRpZShfKCJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iKSwgYXJnKTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKGJ1Zik7CisJCWRpZShfKCJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iKSwgYXJnKTsKKwl9CisJc3RyYnVmX2FkZCgmZC0+YnVmLCBidWYsIGxlbik7CisJZnJlZShidWYpOworCisJZC0+Z2l2ZW4gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3JlZWRpdF9hcmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgbm90ZV9kYXRhICpkID0gb3B0LT52YWx1ZTsKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJZC0+dXNlX2VkaXRvciA9IDE7CisJcmV0dXJuIHBhcnNlX3JldXNlX2FyZyhvcHQsIGFyZywgdW5zZXQpOworfQorCitzdGF0aWMgaW50IG5vdGVzX2NvcHlfZnJvbV9zdGRpbihpbnQgZm9yY2UsIGNvbnN0IGNoYXIgKnJld3JpdGVfY21kKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjID0gTlVMTDsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJY29uc3QgY2hhciAqbXNnID0gIk5vdGVzIGFkZGVkIGJ5ICdnaXQgbm90ZXMgY29weSciOworCisJaWYgKHJld3JpdGVfY21kKSB7CisJCWMgPSBpbml0X2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUocmV3cml0ZV9jbWQpOworCQlpZiAoIWMpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpbml0X25vdGVzKE5VTEwsIE5VTEwsIE5VTEwsIE5PVEVTX0lOSVRfV1JJVEFCTEUpOworCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwl9CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJmJ1Ziwgc3RkaW4pICE9IEVPRikgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIGZyb21fb2JqLCB0b19vYmo7CisJCXN0cnVjdCBzdHJidWYgKipzcGxpdDsKKwkJaW50IGVycjsKKworCQlzcGxpdCA9IHN0cmJ1Zl9zcGxpdCgmYnVmLCAnICcpOworCQlpZiAoIXNwbGl0WzBdIHx8ICFzcGxpdFsxXSkKKwkJCWRpZShfKCJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iKSwgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9ydHJpbShzcGxpdFswXSk7CisJCXN0cmJ1Zl9ydHJpbShzcGxpdFsxXSk7CisJCWlmIChnZXRfb2lkKHNwbGl0WzBdLT5idWYsICZmcm9tX29iaikpCisJCQlkaWUoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgc3BsaXRbMF0tPmJ1Zik7CisJCWlmIChnZXRfb2lkKHNwbGl0WzFdLT5idWYsICZ0b19vYmopKQorCQkJZGllKF8oImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIHNwbGl0WzFdLT5idWYpOworCisJCWlmIChyZXdyaXRlX2NtZCkKKwkJCWVyciA9IGNvcHlfbm90ZV9mb3JfcmV3cml0ZShjLCAmZnJvbV9vYmosICZ0b19vYmopOworCQllbHNlCisJCQllcnIgPSBjb3B5X25vdGUodCwgJmZyb21fb2JqLCAmdG9fb2JqLCBmb3JjZSwKKwkJCQkJY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpOworCisJCWlmIChlcnIpIHsKKwkJCWVycm9yKF8oImZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIiksCisJCQkgICAgICBzcGxpdFswXS0+YnVmLCBzcGxpdFsxXS0+YnVmKTsKKwkJCXJldCA9IDE7CisJCX0KKworCQlzdHJidWZfbGlzdF9mcmVlKHNwbGl0KTsKKwl9CisKKwlpZiAoIXJld3JpdGVfY21kKSB7CisJCWNvbW1pdF9ub3Rlcyh0aGVfcmVwb3NpdG9yeSwgdCwgbXNnKTsKKwkJZnJlZV9ub3Rlcyh0KTsKKwl9IGVsc2UgeworCQlmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZSh0aGVfcmVwb3NpdG9yeSwgYywgbXNnKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBub3Rlc190cmVlICppbml0X25vdGVzX2NoZWNrKGNvbnN0IGNoYXIgKnN1YmNvbW1hbmQsCisJCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwljb25zdCBjaGFyICpyZWY7CisJaW5pdF9ub3RlcyhOVUxMLCBOVUxMLCBOVUxMLCBmbGFncyk7CisJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisKKwlyZWYgPSAoZmxhZ3MgJiBOT1RFU19JTklUX1dSSVRBQkxFKSA/IHQtPnVwZGF0ZV9yZWYgOiB0LT5yZWY7CisJaWYgKCFzdGFydHNfd2l0aChyZWYsICJyZWZzL25vdGVzLyIpKQorCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKwkJICogbm90ZXMgY29tbWFuZDogJ2FkZCcsICdtZXJnZScsICdyZW1vdmUnLCBldGMuCisJCSAqLworCQlkaWUoXygicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIiksCisJCSAgICBzdWJjb21tYW5kLCByZWYpOworCXJldHVybiB0OworfQorCitzdGF0aWMgaW50IGxpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJc3RydWN0IG9iamVjdF9pZCBvYmplY3Q7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbm90ZTsKKwlpbnQgcmV0dmFsID0gLTE7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYXJnYykKKwkJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJCSAgICAgZ2l0X25vdGVzX2xpc3RfdXNhZ2UsIDApOworCisJaWYgKDEgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbGlzdF91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJdCA9IGluaXRfbm90ZXNfY2hlY2soImxpc3QiLCAwKTsKKwlpZiAoYXJnYykgeworCQlpZiAoZ2V0X29pZChhcmd2WzBdLCAmb2JqZWN0KSkKKwkJCWRpZShfKCJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBhcmd2WzBdKTsKKwkJbm90ZSA9IGdldF9ub3RlKHQsICZvYmplY3QpOworCQlpZiAobm90ZSkgeworCQkJcHV0cyhvaWRfdG9faGV4KG5vdGUpKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZQorCQkJcmV0dmFsID0gZXJyb3IoXygibm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIpLAorCQkJCSAgICAgICBvaWRfdG9faGV4KCZvYmplY3QpKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0gZm9yX2VhY2hfbm90ZSh0LCAwLCBsaXN0X2VhY2hfbm90ZSwgTlVMTCk7CisKKwlmcmVlX25vdGVzKHQpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX2VkaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworCitzdGF0aWMgaW50IGFkZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZm9yY2UgPSAwLCBhbGxvd19lbXB0eSA9IDA7CisJY29uc3QgY2hhciAqb2JqZWN0X3JlZjsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdCwgbmV3X25vdGU7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbm90ZTsKKwlzdHJ1Y3Qgbm90ZV9kYXRhIGQgPSB7IDAsIDAsIE5VTEwsIFNUUkJVRl9JTklUIH07CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAnbScsICJtZXNzYWdlIiwgJmQsIE5fKCJtZXNzYWdlIiksCisJCQlOXygibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9tc2dfYXJnfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdGJywgImZpbGUiLCAmZCwgTl8oImZpbGUiKSwKKwkJCU5fKCJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9maWxlX2FyZ30sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnYycsICJyZWVkaXQtbWVzc2FnZSIsICZkLCBOXygib2JqZWN0IiksCisJCQlOXygicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IiksIFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX3JlZWRpdF9hcmd9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ0MnLCAicmV1c2UtbWVzc2FnZSIsICZkLCBOXygib2JqZWN0IiksCisJCQlOXygicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IiksIFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX3JldXNlX2FyZ30sCisJCU9QVF9CT09MKDAsICJhbGxvdy1lbXB0eSIsICZhbGxvd19lbXB0eSwKKwkJCU5fKCJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygicmVwbGFjZSBleGlzdGluZyBub3RlcyIpLCBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9ub3Rlc19hZGRfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWlmICgyIDwgYXJnYykgeworCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX2FkZF91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJb2JqZWN0X3JlZiA9IGFyZ2MgPiAxID8gYXJndlsxXSA6ICJIRUFEIjsKKworCWlmIChnZXRfb2lkKG9iamVjdF9yZWYsICZvYmplY3QpKQorCQlkaWUoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgb2JqZWN0X3JlZik7CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygiYWRkIiwgTk9URVNfSU5JVF9XUklUQUJMRSk7CisJbm90ZSA9IGdldF9ub3RlKHQsICZvYmplY3QpOworCisJaWYgKG5vdGUpIHsKKwkJaWYgKCFmb3JjZSkgeworCQkJZnJlZV9ub3Rlcyh0KTsKKwkJCWlmIChkLmdpdmVuKSB7CisJCQkJZnJlZV9ub3RlX2RhdGEoJmQpOworCQkJCXJldHVybiBlcnJvcihfKCJDYW5ub3QgYWRkIG5vdGVzLiAiCisJCQkJCSJGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiAiCisJCQkJCSJVc2UgJy1mJyB0byBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMiKSwKKwkJCQkJb2lkX3RvX2hleCgmb2JqZWN0KSk7CisJCQl9CisJCQkvKgorCQkJICogUmVkaXJlY3QgdG8gImVkaXQiIHN1YmNvbW1hbmQuCisJCQkgKgorCQkJICogV2Ugb25seSBlbmQgdXAgaGVyZSBpZiBub25lIG9mIC1tLy1GLy1jLy1DIG9yIC1mIGFyZQorCQkJICogZ2l2ZW4uIFRoZSBvcmlnaW5hbCBhcmdzIGFyZSB0aGVyZWZvcmUgc3RpbGwgaW4KKwkJCSAqIGFyZ3ZbMC0xXS4KKwkJCSAqLworCQkJYXJndlswXSA9ICJlZGl0IjsKKwkJCXJldHVybiBhcHBlbmRfZWRpdChhcmdjLCBhcmd2LCBwcmVmaXgpOworCQl9CisJCWZwcmludGYoc3RkZXJyLCBfKCJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iKSwKKwkJCW9pZF90b19oZXgoJm9iamVjdCkpOworCX0KKworCXByZXBhcmVfbm90ZV9kYXRhKCZvYmplY3QsICZkLCBub3RlKTsKKwlpZiAoZC5idWYubGVuIHx8IGFsbG93X2VtcHR5KSB7CisJCXdyaXRlX25vdGVfZGF0YSgmZCwgJm5ld19ub3RlKTsKKwkJaWYgKGFkZF9ub3RlKHQsICZvYmplY3QsICZuZXdfbm90ZSwgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpKQorCQkJQlVHKCJjb21iaW5lX25vdGVzX292ZXJ3cml0ZSBmYWlsZWQiKTsKKwkJY29tbWl0X25vdGVzKHRoZV9yZXBvc2l0b3J5LCB0LAorCQkJICAgICAiTm90ZXMgYWRkZWQgYnkgJ2dpdCBub3RlcyBhZGQnIik7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIiksCisJCQlvaWRfdG9faGV4KCZvYmplY3QpKTsKKwkJcmVtb3ZlX25vdGUodCwgb2JqZWN0Lmhhc2gpOworCQljb21taXRfbm90ZXModGhlX3JlcG9zaXRvcnksIHQsCisJCQkgICAgICJOb3RlcyByZW1vdmVkIGJ5ICdnaXQgbm90ZXMgYWRkJyIpOworCX0KKworCWZyZWVfbm90ZV9kYXRhKCZkKTsKKwlmcmVlX25vdGVzKHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcHkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHJldHZhbCA9IDAsIGZvcmNlID0gMCwgZnJvbV9zdGRpbiA9IDA7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZnJvbV9ub3RlLCAqbm90ZTsKKwljb25zdCBjaGFyICpvYmplY3RfcmVmOworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0LCBmcm9tX29iajsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwljb25zdCBjaGFyICpyZXdyaXRlX2NtZCA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygicmVwbGFjZSBleGlzdGluZyBub3RlcyIpLCBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9CT09MKDAsICJzdGRpbiIsICZmcm9tX3N0ZGluLCBOXygicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iKSksCisJCU9QVF9TVFJJTkcoMCwgImZvci1yZXdyaXRlIiwgJnJld3JpdGVfY21kLCBOXygiY29tbWFuZCIpLAorCQkJICAgTl8oImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzICIKKwkJCSAgICAgICItLXN0ZGluKSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X25vdGVzX2NvcHlfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGZyb21fc3RkaW4gfHwgcmV3cml0ZV9jbWQpIHsKKwkJaWYgKGFyZ2MpIHsKKwkJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX2NvcHlfdXNhZ2UsIG9wdGlvbnMpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIG5vdGVzX2NvcHlfZnJvbV9zdGRpbihmb3JjZSwgcmV3cml0ZV9jbWQpOworCQl9CisJfQorCisJaWYgKGFyZ2MgPCAxKSB7CisJCWVycm9yKF8oInRvbyBmZXcgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19jb3B5X3VzYWdlLCBvcHRpb25zKTsKKwl9CisJaWYgKDIgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfY29weV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGdldF9vaWQoYXJndlswXSwgJmZyb21fb2JqKSkKKwkJZGllKF8oImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIGFyZ3ZbMF0pOworCisJb2JqZWN0X3JlZiA9IDEgPCBhcmdjID8gYXJndlsxXSA6ICJIRUFEIjsKKworCWlmIChnZXRfb2lkKG9iamVjdF9yZWYsICZvYmplY3QpKQorCQlkaWUoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgb2JqZWN0X3JlZik7CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygiY29weSIsIE5PVEVTX0lOSVRfV1JJVEFCTEUpOworCW5vdGUgPSBnZXRfbm90ZSh0LCAmb2JqZWN0KTsKKworCWlmIChub3RlKSB7CisJCWlmICghZm9yY2UpIHsKKwkJCXJldHZhbCA9IGVycm9yKF8oIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyAiCisJCQkJICAgICAgICJub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byAiCisJCQkJICAgICAgICJvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMiKSwKKwkJCQkgICAgICAgb2lkX3RvX2hleCgmb2JqZWN0KSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgXygiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIiksCisJCQlvaWRfdG9faGV4KCZvYmplY3QpKTsKKwl9CisKKwlmcm9tX25vdGUgPSBnZXRfbm90ZSh0LCAmZnJvbV9vYmopOworCWlmICghZnJvbV9ub3RlKSB7CisJCXJldHZhbCA9IGVycm9yKF8oIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90ICIKKwkJCSAgICAgICAiY29weS4iKSwgb2lkX3RvX2hleCgmZnJvbV9vYmopKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGFkZF9ub3RlKHQsICZvYmplY3QsIGZyb21fbm90ZSwgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpKQorCQlCVUcoImNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlIGZhaWxlZCIpOworCWNvbW1pdF9ub3Rlcyh0aGVfcmVwb3NpdG9yeSwgdCwKKwkJICAgICAiTm90ZXMgYWRkZWQgYnkgJ2dpdCBub3RlcyBjb3B5JyIpOworb3V0OgorCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhcHBlbmRfZWRpdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgYWxsb3dfZW1wdHkgPSAwOworCWNvbnN0IGNoYXIgKm9iamVjdF9yZWY7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJc3RydWN0IG9iamVjdF9pZCBvYmplY3QsIG5ld19ub3RlOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGU7CisJY2hhciAqbG9nbXNnOworCWNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2U7CisJc3RydWN0IG5vdGVfZGF0YSBkID0geyAwLCAwLCBOVUxMLCBTVFJCVUZfSU5JVCB9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQl7IE9QVElPTl9DQUxMQkFDSywgJ20nLCAibWVzc2FnZSIsICZkLCBOXygibWVzc2FnZSIpLAorCQkJTl8oIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfbXNnX2FyZ30sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnRicsICJmaWxlIiwgJmQsIE5fKCJmaWxlIiksCisJCQlOXygibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfZmlsZV9hcmd9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2MnLCAicmVlZGl0LW1lc3NhZ2UiLCAmZCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9yZWVkaXRfYXJnfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdDJywgInJldXNlLW1lc3NhZ2UiLCAmZCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9yZXVzZV9hcmd9LAorCQlPUFRfQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmYWxsb3dfZW1wdHksCisJCQlOXygiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCBlZGl0ID0gIXN0cmNtcChhcmd2WzBdLCAiZWRpdCIpOworCisJdXNhZ2UgPSBlZGl0ID8gZ2l0X25vdGVzX2VkaXRfdXNhZ2UgOiBnaXRfbm90ZXNfYXBwZW5kX3VzYWdlOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWlmICgyIDwgYXJnYykgeworCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOworCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWlmIChkLmdpdmVuICYmIGVkaXQpCisJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCAiCisJCQkiZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKwkJCSJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIikpOworCisJb2JqZWN0X3JlZiA9IDEgPCBhcmdjID8gYXJndlsxXSA6ICJIRUFEIjsKKworCWlmIChnZXRfb2lkKG9iamVjdF9yZWYsICZvYmplY3QpKQorCQlkaWUoXygiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgb2JqZWN0X3JlZik7CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjayhhcmd2WzBdLCBOT1RFU19JTklUX1dSSVRBQkxFKTsKKwlub3RlID0gZ2V0X25vdGUodCwgJm9iamVjdCk7CisKKwlwcmVwYXJlX25vdGVfZGF0YSgmb2JqZWN0LCAmZCwgZWRpdCAmJiBub3RlID8gbm90ZSA6IE5VTEwpOworCisJaWYgKG5vdGUgJiYgIWVkaXQpIHsKKwkJLyogQXBwZW5kIGJ1ZiB0byBwcmV2aW91cyBub3RlIGNvbnRlbnRzICovCisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQljaGFyICpwcmV2X2J1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUobm90ZSwgJnR5cGUsICZzaXplKTsKKworCQlzdHJidWZfZ3JvdygmZC5idWYsIHNpemUgKyAxKTsKKwkJaWYgKGQuYnVmLmxlbiAmJiBwcmV2X2J1ZiAmJiBzaXplKQorCQkJc3RyYnVmX2luc2VydHN0cigmZC5idWYsIDAsICJcbiIpOworCQlpZiAocHJldl9idWYgJiYgc2l6ZSkKKwkJCXN0cmJ1Zl9pbnNlcnQoJmQuYnVmLCAwLCBwcmV2X2J1Ziwgc2l6ZSk7CisJCWZyZWUocHJldl9idWYpOworCX0KKworCWlmIChkLmJ1Zi5sZW4gfHwgYWxsb3dfZW1wdHkpIHsKKwkJd3JpdGVfbm90ZV9kYXRhKCZkLCAmbmV3X25vdGUpOworCQlpZiAoYWRkX25vdGUodCwgJm9iamVjdCwgJm5ld19ub3RlLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSkpCisJCQlCVUcoImNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlIGZhaWxlZCIpOworCQlsb2dtc2cgPSB4c3RyZm10KCJOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzICVzJyIsIGFyZ3ZbMF0pOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIpLAorCQkJb2lkX3RvX2hleCgmb2JqZWN0KSk7CisJCXJlbW92ZV9ub3RlKHQsIG9iamVjdC5oYXNoKTsKKwkJbG9nbXNnID0geHN0cmZtdCgiTm90ZXMgcmVtb3ZlZCBieSAnZ2l0IG5vdGVzICVzJyIsIGFyZ3ZbMF0pOworCX0KKwljb21taXRfbm90ZXModGhlX3JlcG9zaXRvcnksIHQsIGxvZ21zZyk7CisKKwlmcmVlKGxvZ21zZyk7CisJZnJlZV9ub3RlX2RhdGEoJmQpOworCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpvYmplY3RfcmVmOworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0OworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGU7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X25vdGVzX3Nob3dfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKDEgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfc2hvd191c2FnZSwgb3B0aW9ucyk7CisJfQorCisJb2JqZWN0X3JlZiA9IGFyZ2MgPyBhcmd2WzBdIDogIkhFQUQiOworCisJaWYgKGdldF9vaWQob2JqZWN0X3JlZiwgJm9iamVjdCkpCisJCWRpZShfKCJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBvYmplY3RfcmVmKTsKKworCXQgPSBpbml0X25vdGVzX2NoZWNrKCJzaG93IiwgMCk7CisJbm90ZSA9IGdldF9ub3RlKHQsICZvYmplY3QpOworCisJaWYgKCFub3RlKQorCQlyZXR2YWwgPSBlcnJvcihfKCJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIiksCisJCQkgICAgICAgb2lkX3RvX2hleCgmb2JqZWN0KSk7CisJZWxzZSB7CisJCWNvbnN0IGNoYXIgKnNob3dfYXJnc1szXSA9IHsic2hvdyIsIG9pZF90b19oZXgobm90ZSksIE5VTEx9OworCQlyZXR2YWwgPSBleGVjdl9naXRfY21kKHNob3dfYXJncyk7CisJfQorCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBtZXJnZV9hYm9ydChzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogUmVtb3ZlIC5naXQvTk9URVNfTUVSR0VfUEFSVElBTCBhbmQgLmdpdC9OT1RFU19NRVJHRV9SRUYsIGFuZCBjYWxsCisJICogbm90ZXNfbWVyZ2VfYWJvcnQoKSB0byByZW1vdmUgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4KKwkgKi8KKworCWlmIChkZWxldGVfcmVmKE5VTEwsICJOT1RFU19NRVJHRV9QQVJUSUFMIiwgTlVMTCwgMCkpCisJCXJldCArPSBlcnJvcihfKCJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIikpOworCWlmIChkZWxldGVfcmVmKE5VTEwsICJOT1RFU19NRVJHRV9SRUYiLCBOVUxMLCBSRUZfTk9fREVSRUYpKQorCQlyZXQgKz0gZXJyb3IoXygiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIikpOworCWlmIChub3Rlc19tZXJnZV9hYm9ydChvKSkKKwkJcmV0ICs9IGVycm9yKF8oImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZXJnZV9jb21taXQoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8pCit7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZCwgcGFyZW50X29pZDsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlzdHJ1Y3QgY29tbWl0ICpwYXJ0aWFsOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcmV0dHlfY3R4OworCXZvaWQgKmxvY2FsX3JlZl90b19mcmVlOworCWludCByZXQ7CisKKwkvKgorCSAqIFJlYWQgcGFydGlhbCBtZXJnZSByZXN1bHQgZnJvbSAuZ2l0L05PVEVTX01FUkdFX1BBUlRJQUwsCisJICogYW5kIHRhcmdldCBub3RlcyByZWYgZnJvbSAuZ2l0L05PVEVTX01FUkdFX1JFRi4KKwkgKi8KKworCWlmIChnZXRfb2lkKCJOT1RFU19NRVJHRV9QQVJUSUFMIiwgJm9pZCkpCisJCWRpZShfKCJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIpKTsKKwllbHNlIGlmICghKHBhcnRpYWwgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpKQorCQlkaWUoXygiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iKSk7CisJZWxzZSBpZiAocGFyc2VfY29tbWl0KHBhcnRpYWwpKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIikpOworCisJaWYgKHBhcnRpYWwtPnBhcmVudHMpCisJCW9pZGNweSgmcGFyZW50X29pZCwgJnBhcnRpYWwtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQpOworCWVsc2UKKwkJb2lkY2xyKCZwYXJlbnRfb2lkKTsKKworCXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfdHJlZSkpOworCWluaXRfbm90ZXModCwgIk5PVEVTX01FUkdFX1BBUlRJQUwiLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSwgMCk7CisKKwlvLT5sb2NhbF9yZWYgPSBsb2NhbF9yZWZfdG9fZnJlZSA9CisJCXJlc29sdmVfcmVmZHVwKCJOT1RFU19NRVJHRV9SRUYiLCAwLCAmb2lkLCBOVUxMKTsKKwlpZiAoIW8tPmxvY2FsX3JlZikKKwkJZGllKF8oImZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIpKTsKKworCWlmIChub3Rlc19tZXJnZV9jb21taXQobywgdCwgcGFydGlhbCwgJm9pZCkpCisJCWRpZShfKCJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiKSk7CisKKwkvKiBSZXVzZSBleGlzdGluZyBjb21taXQgbWVzc2FnZSBpbiByZWZsb2cgbWVzc2FnZSAqLworCW1lbXNldCgmcHJldHR5X2N0eCwgMCwgc2l6ZW9mKHByZXR0eV9jdHgpKTsKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UocGFydGlhbCwgIiVzIiwgJm1zZywgJnByZXR0eV9jdHgpOworCXN0cmJ1Zl90cmltKCZtc2cpOworCXN0cmJ1Zl9pbnNlcnRzdHIoJm1zZywgMCwgIm5vdGVzOiAiKTsKKwl1cGRhdGVfcmVmKG1zZy5idWYsIG8tPmxvY2FsX3JlZiwgJm9pZCwKKwkJICAgaXNfbnVsbF9vaWQoJnBhcmVudF9vaWQpID8gTlVMTCA6ICZwYXJlbnRfb2lkLAorCQkgICAwLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKworCWZyZWVfbm90ZXModCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJcmV0ID0gbWVyZ2VfYWJvcnQobyk7CisJZnJlZShsb2NhbF9yZWZfdG9fZnJlZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnaXRfY29uZmlnX2dldF9ub3Rlc19zdHJhdGVneShjb25zdCBjaGFyICprZXksCisJCQkJCSBlbnVtIG5vdGVzX21lcmdlX3N0cmF0ZWd5ICpzdHJhdGVneSkKK3sKKwljaGFyICp2YWx1ZTsKKworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoa2V5LCAmdmFsdWUpKQorCQlyZXR1cm4gMTsKKwlpZiAocGFyc2Vfbm90ZXNfbWVyZ2Vfc3RyYXRlZ3kodmFsdWUsIHN0cmF0ZWd5KSkKKwkJZ2l0X2RpZV9jb25maWcoa2V5LCBfKCJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIiksIHZhbHVlKTsKKworCWZyZWUodmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lcmdlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgcmVtb3RlX3JlZiA9IFNUUkJVRl9JTklULCBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJlc3VsdF9vaWQ7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgbzsKKwlpbnQgZG9fbWVyZ2UgPSAwLCBkb19jb21taXQgPSAwLCBkb19hYm9ydCA9IDA7CisJaW50IHZlcmJvc2l0eSA9IDAsIHJlc3VsdDsKKwljb25zdCBjaGFyICpzdHJhdGVneSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9HUk9VUChOXygiR2VuZXJhbCBvcHRpb25zIikpLAorCQlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwkJT1BUX0dST1VQKE5fKCJNZXJnZSBvcHRpb25zIikpLAorCQlPUFRfU1RSSU5HKCdzJywgInN0cmF0ZWd5IiwgJnN0cmF0ZWd5LCBOXygic3RyYXRlZ3kiKSwKKwkJCSAgIE5fKCJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgIgorCQkJICAgICAgIihtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiKSksCisJCU9QVF9HUk9VUChOXygiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIpKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAiY29tbWl0IiwgJmRvX2NvbW1pdCwKKwkJCSAgICAgIE5fKCJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfR1JPVVAoTl8oIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iKSksCisJCU9QVF9TRVRfSU5UX0YoMCwgImFib3J0IiwgJmRvX2Fib3J0LAorCQkJICAgICAgTl8oImFib3J0IG5vdGVzIG1lcmdlIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIDApOworCisJaWYgKHN0cmF0ZWd5IHx8IGRvX2NvbW1pdCArIGRvX2Fib3J0ID09IDApCisJCWRvX21lcmdlID0gMTsKKwlpZiAoZG9fbWVyZ2UgKyBkb19jb21taXQgKyBkb19hYm9ydCAhPSAxKSB7CisJCWVycm9yKF8oImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGRvX21lcmdlICYmIGFyZ2MgIT0gMSkgeworCQllcnJvcihfKCJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIG9wdGlvbnMpOworCX0gZWxzZSBpZiAoIWRvX21lcmdlICYmIGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaW5pdF9ub3Rlc19tZXJnZV9vcHRpb25zKHRoZV9yZXBvc2l0b3J5LCAmbyk7CisJby52ZXJib3NpdHkgPSB2ZXJib3NpdHkgKyBOT1RFU19NRVJHRV9WRVJCT1NJVFlfREVGQVVMVDsKKworCWlmIChkb19hYm9ydCkKKwkJcmV0dXJuIG1lcmdlX2Fib3J0KCZvKTsKKwlpZiAoZG9fY29tbWl0KQorCQlyZXR1cm4gbWVyZ2VfY29tbWl0KCZvKTsKKworCW8ubG9jYWxfcmVmID0gZGVmYXVsdF9ub3Rlc19yZWYoKTsKKwlzdHJidWZfYWRkc3RyKCZyZW1vdGVfcmVmLCBhcmd2WzBdKTsKKwlleHBhbmRfbG9vc2Vfbm90ZXNfcmVmKCZyZW1vdGVfcmVmKTsKKwlvLnJlbW90ZV9yZWYgPSByZW1vdGVfcmVmLmJ1ZjsKKworCXQgPSBpbml0X25vdGVzX2NoZWNrKCJtZXJnZSIsIE5PVEVTX0lOSVRfV1JJVEFCTEUpOworCisJaWYgKHN0cmF0ZWd5KSB7CisJCWlmIChwYXJzZV9ub3Rlc19tZXJnZV9zdHJhdGVneShzdHJhdGVneSwgJm8uc3RyYXRlZ3kpKSB7CisJCQllcnJvcihfKCJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIiksIHN0cmF0ZWd5KTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBtZXJnZV9rZXkgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqc2hvcnRfcmVmID0gTlVMTDsKKworCQlpZiAoIXNraXBfcHJlZml4KG8ubG9jYWxfcmVmLCAicmVmcy9ub3Rlcy8iLCAmc2hvcnRfcmVmKSkKKwkJCUJVRygibG9jYWwgcmVmICVzIGlzIG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8iLAorCQkJICAgIG8ubG9jYWxfcmVmKTsKKworCQlzdHJidWZfYWRkZigmbWVyZ2Vfa2V5LCAibm90ZXMuJXMubWVyZ2VTdHJhdGVneSIsIHNob3J0X3JlZik7CisKKwkJaWYgKGdpdF9jb25maWdfZ2V0X25vdGVzX3N0cmF0ZWd5KG1lcmdlX2tleS5idWYsICZvLnN0cmF0ZWd5KSkKKwkJCWdpdF9jb25maWdfZ2V0X25vdGVzX3N0cmF0ZWd5KCJub3Rlcy5tZXJnZVN0cmF0ZWd5IiwgJm8uc3RyYXRlZ3kpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZtZXJnZV9rZXkpOworCX0KKworCXN0cmJ1Zl9hZGRmKCZtc2csICJub3RlczogTWVyZ2VkIG5vdGVzIGZyb20gJXMgaW50byAlcyIsCisJCSAgICByZW1vdGVfcmVmLmJ1ZiwgZGVmYXVsdF9ub3Rlc19yZWYoKSk7CisJc3RyYnVmX2FkZCgmKG8uY29tbWl0X21zZyksIG1zZy5idWYgKyA3LCBtc2cubGVuIC0gNyk7IC8qIHNraXAgIm5vdGVzOiAiICovCisKKwlyZXN1bHQgPSBub3Rlc19tZXJnZSgmbywgdCwgJnJlc3VsdF9vaWQpOworCisJaWYgKHJlc3VsdCA+PSAwKSAvKiBNZXJnZSByZXN1bHRlZCAodHJpdmlhbGx5KSBpbiByZXN1bHRfb2lkICovCisJCS8qIFVwZGF0ZSBkZWZhdWx0IG5vdGVzIHJlZiB3aXRoIG5ldyBjb21taXQgKi8KKwkJdXBkYXRlX3JlZihtc2cuYnVmLCBkZWZhdWx0X25vdGVzX3JlZigpLCAmcmVzdWx0X29pZCwgTlVMTCwgMCwKKwkJCSAgIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCWVsc2UgeyAvKiBNZXJnZSBoYXMgdW5yZXNvbHZlZCBjb25mbGljdHMgKi8KKwkJY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dDsKKwkJLyogVXBkYXRlIC5naXQvTk9URVNfTUVSR0VfUEFSVElBTCB3aXRoIHBhcnRpYWwgbWVyZ2UgcmVzdWx0ICovCisJCXVwZGF0ZV9yZWYobXNnLmJ1ZiwgIk5PVEVTX01FUkdFX1BBUlRJQUwiLCAmcmVzdWx0X29pZCwgTlVMTCwKKwkJCSAgIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCQkvKiBTdG9yZSByZWYtdG8tYmUtdXBkYXRlZCBpbnRvIC5naXQvTk9URVNfTUVSR0VfUkVGICovCisJCXd0ID0gZmluZF9zaGFyZWRfc3ltcmVmKCJOT1RFU19NRVJHRV9SRUYiLCBkZWZhdWx0X25vdGVzX3JlZigpKTsKKwkJaWYgKHd0KQorCQkJZGllKF8oImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIiksCisJCQkgICAgZGVmYXVsdF9ub3Rlc19yZWYoKSwgd3QtPnBhdGgpOworCQlpZiAoY3JlYXRlX3N5bXJlZigiTk9URVNfTUVSR0VfUkVGIiwgZGVmYXVsdF9ub3Rlc19yZWYoKSwgTlVMTCkpCisJCQlkaWUoXygiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIpLAorCQkJICAgIGRlZmF1bHRfbm90ZXNfcmVmKCkpOworCQlmcHJpbnRmKHN0ZGVyciwgXygiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyAiCisJCQkJICAiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsICIKKwkJCQkgICJvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnLlxuIiksCisJCQlnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworCX0KKworCWZyZWVfbm90ZXModCk7CisJc3RyYnVmX3JlbGVhc2UoJnJlbW90ZV9yZWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCXJldHVybiByZXN1bHQgPCAwOyAvKiByZXR1cm4gbm9uLXplcm8gb24gY29uZmxpY3RzICovCit9CisKKyNkZWZpbmUgSUdOT1JFX01JU1NJTkcgMQorCitzdGF0aWMgaW50IHJlbW92ZV9vbmVfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgZmxhZykKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWlmIChnZXRfb2lkKG5hbWUsICZvaWQpKQorCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgbmFtZSk7CisJc3RhdHVzID0gcmVtb3ZlX25vdGUodCwgb2lkLmhhc2gpOworCWlmIChzdGF0dXMpCisJCWZwcmludGYoc3RkZXJyLCBfKCJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIpLCBuYW1lKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCBfKCJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIpLCBuYW1lKTsKKwlyZXR1cm4gKGZsYWcgJiBJR05PUkVfTUlTU0lORykgPyAwIDogc3RhdHVzOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9jbWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJdW5zaWduZWQgZmxhZyA9IDA7CisJaW50IGZyb21fc3RkaW4gPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQklUKDAsICJpZ25vcmUtbWlzc2luZyIsICZmbGFnLAorCQkJTl8oImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIpLAorCQkJSUdOT1JFX01JU1NJTkcpLAorCQlPUFRfQk9PTCgwLCAic3RkaW4iLCAmZnJvbV9zdGRpbiwKKwkJCSAgICBOXygicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiKSksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJaW50IHJldHZhbCA9IDA7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9ub3Rlc19yZW1vdmVfdXNhZ2UsIDApOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soInJlbW92ZSIsIE5PVEVTX0lOSVRfV1JJVEFCTEUpOworCisJaWYgKCFhcmdjICYmICFmcm9tX3N0ZGluKSB7CisJCXJldHZhbCA9IHJlbW92ZV9vbmVfbm90ZSh0LCAiSEVBRCIsIGZsYWcpOworCX0gZWxzZSB7CisJCXdoaWxlICgqYXJndikgeworCQkJcmV0dmFsIHw9IHJlbW92ZV9vbmVfbm90ZSh0LCAqYXJndiwgZmxhZyk7CisJCQlhcmd2Kys7CisJCX0KKwl9CisJaWYgKGZyb21fc3RkaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQl3aGlsZSAoc3RyYnVmX2dldHdob2xlbGluZSgmc2IsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJCXN0cmJ1Zl9ydHJpbSgmc2IpOworCQkJcmV0dmFsIHw9IHJlbW92ZV9vbmVfbm90ZSh0LCBzYi5idWYsIGZsYWcpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCWlmICghcmV0dmFsKQorCQljb21taXRfbm90ZXModGhlX3JlcG9zaXRvcnksIHQsCisJCQkgICAgICJOb3RlcyByZW1vdmVkIGJ5ICdnaXQgbm90ZXMgcmVtb3ZlJyIpOworCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBwcnVuZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlpbnQgc2hvd19vbmx5ID0gMCwgdmVyYm9zZSA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IikpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJyZXBvcnQgcHJ1bmVkIG5vdGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfbm90ZXNfcHJ1bmVfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19wcnVuZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJdCA9IGluaXRfbm90ZXNfY2hlY2soInBydW5lIiwgTk9URVNfSU5JVF9XUklUQUJMRSk7CisKKwlwcnVuZV9ub3Rlcyh0LCAodmVyYm9zZSA/IE5PVEVTX1BSVU5FX1ZFUkJPU0UgOiAwKSB8CisJCShzaG93X29ubHkgPyBOT1RFU19QUlVORV9WRVJCT1NFfE5PVEVTX1BSVU5FX0RSWVJVTiA6IDApICk7CisJaWYgKCFzaG93X29ubHkpCisJCWNvbW1pdF9ub3Rlcyh0aGVfcmVwb3NpdG9yeSwgdCwKKwkJCSAgICAgIk5vdGVzIHJlbW92ZWQgYnkgJ2dpdCBub3RlcyBwcnVuZSciKTsKKwlmcmVlX25vdGVzKHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7IE9QVF9FTkQoKSB9OworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X25vdGVzX2dldF9yZWZfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19nZXRfcmVmX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlwdXRzKGRlZmF1bHRfbm90ZXNfcmVmKCkpOworCXJldHVybiAwOworfQorCitpbnQgY21kX25vdGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCByZXN1bHQ7CisJY29uc3QgY2hhciAqb3ZlcnJpZGVfbm90ZXNfcmVmID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAicmVmIiwgJm92ZXJyaWRlX25vdGVzX3JlZiwgTl8oIm5vdGVzLXJlZiIpLAorCQkJICAgTl8oInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X25vdGVzX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmIChvdmVycmlkZV9ub3Rlc19yZWYpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkc3RyKCZzYiwgb3ZlcnJpZGVfbm90ZXNfcmVmKTsKKwkJZXhwYW5kX25vdGVzX3JlZigmc2IpOworCQlzZXRlbnYoIkdJVF9OT1RFU19SRUYiLCBzYi5idWYsIDEpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KKworCWlmIChhcmdjIDwgMSB8fCAhc3RyY21wKGFyZ3ZbMF0sICJsaXN0IikpCisJCXJlc3VsdCA9IGxpc3QoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSkKKwkJcmVzdWx0ID0gYWRkKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiY29weSIpKQorCQlyZXN1bHQgPSBjb3B5KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiYXBwZW5kIikgfHwgIXN0cmNtcChhcmd2WzBdLCAiZWRpdCIpKQorCQlyZXN1bHQgPSBhcHBlbmRfZWRpdChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNob3ciKSkKKwkJcmVzdWx0ID0gc2hvdyhhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgIm1lcmdlIikpCisJCXJlc3VsdCA9IG1lcmdlKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVtb3ZlIikpCisJCXJlc3VsdCA9IHJlbW92ZV9jbWQoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJwcnVuZSIpKQorCQlyZXN1bHQgPSBwcnVuZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImdldC1yZWYiKSkKKwkJcmVzdWx0ID0gZ2V0X3JlZihhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgeworCQlyZXN1bHQgPSBlcnJvcihfKCJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0ID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi9wYWNrLW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmFhNmVlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wYWNrLW9iamVjdHMuYwpAQCAtMCwwICsxLDM2NjMgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKyNpbmNsdWRlICJwYWNrLWJpdG1hcC5oIgorI2luY2x1ZGUgImRlbHRhLWlzbGFuZHMuaCIKKyNpbmNsdWRlICJyZWFjaGFibGUuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgIm1pZHguaCIKKyNpbmNsdWRlICJ0cmFjZTIuaCIKKworI2RlZmluZSBJTl9QQUNLKG9iaikgb2VfaW5fcGFjaygmdG9fcGFjaywgb2JqKQorI2RlZmluZSBTSVpFKG9iaikgb2Vfc2l6ZSgmdG9fcGFjaywgb2JqKQorI2RlZmluZSBTRVRfU0laRShvYmosc2l6ZSkgb2Vfc2V0X3NpemUoJnRvX3BhY2ssIG9iaiwgc2l6ZSkKKyNkZWZpbmUgREVMVEFfU0laRShvYmopIG9lX2RlbHRhX3NpemUoJnRvX3BhY2ssIG9iaikKKyNkZWZpbmUgREVMVEEob2JqKSBvZV9kZWx0YSgmdG9fcGFjaywgb2JqKQorI2RlZmluZSBERUxUQV9DSElMRChvYmopIG9lX2RlbHRhX2NoaWxkKCZ0b19wYWNrLCBvYmopCisjZGVmaW5lIERFTFRBX1NJQkxJTkcob2JqKSBvZV9kZWx0YV9zaWJsaW5nKCZ0b19wYWNrLCBvYmopCisjZGVmaW5lIFNFVF9ERUxUQShvYmosIHZhbCkgb2Vfc2V0X2RlbHRhKCZ0b19wYWNrLCBvYmosIHZhbCkKKyNkZWZpbmUgU0VUX0RFTFRBX0VYVChvYmosIG9pZCkgb2Vfc2V0X2RlbHRhX2V4dCgmdG9fcGFjaywgb2JqLCBvaWQpCisjZGVmaW5lIFNFVF9ERUxUQV9TSVpFKG9iaiwgdmFsKSBvZV9zZXRfZGVsdGFfc2l6ZSgmdG9fcGFjaywgb2JqLCB2YWwpCisjZGVmaW5lIFNFVF9ERUxUQV9DSElMRChvYmosIHZhbCkgb2Vfc2V0X2RlbHRhX2NoaWxkKCZ0b19wYWNrLCBvYmosIHZhbCkKKyNkZWZpbmUgU0VUX0RFTFRBX1NJQkxJTkcob2JqLCB2YWwpIG9lX3NldF9kZWx0YV9zaWJsaW5nKCZ0b19wYWNrLCBvYmosIHZhbCkKKworc3RhdGljIGNvbnN0IGNoYXIgKnBhY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+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+cmV2aW5kZXhbcG9zXS5vZmZzZXQ7CisJbmV4dCA9IHJldXNlX3BhY2tmaWxlLT5yZXZpbmRleFtwb3MgKyAxXS5vZmZzZXQ7CisKKwlyZWNvcmRfcmV1c2VkX29iamVjdChvZmZzZXQsIG9mZnNldCAtIGhhc2hmaWxlX3RvdGFsKG91dCkpOworCisJY3VyID0gb2Zmc2V0OworCXR5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihyZXVzZV9wYWNrZmlsZSwgd19jdXJzLCAmY3VyLCAmc2l6ZSk7CisJYXNzZXJ0KHR5cGUgPj0gMCk7CisKKwlpZiAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CisJCW9mZl90IGJhc2Vfb2Zmc2V0OworCQlvZmZfdCBmaXh1cDsKKworCQl1bnNpZ25lZCBjaGFyIGhlYWRlcltNQVhfUEFDS19PQkpFQ1RfSEVBREVSXTsKKwkJdW5zaWduZWQgbGVuOworCisJCWJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocmV1c2VfcGFja2ZpbGUsIHdfY3VycywgJmN1ciwgdHlwZSwgb2Zmc2V0KTsKKwkJYXNzZXJ0KGJhc2Vfb2Zmc2V0ICE9IDApOworCisJCS8qIENvbnZlcnQgdG8gUkVGX0RFTFRBIGlmIHdlIG11c3QuLi4gKi8KKwkJaWYgKCFhbGxvd19vZnNfZGVsdGEpIHsKKwkJCWludCBiYXNlX3BvcyA9IGZpbmRfcmV2aW5kZXhfcG9zaXRpb24ocmV1c2VfcGFja2ZpbGUsIGJhc2Vfb2Zmc2V0KTsKKwkJCXN0cnVjdCBvYmplY3RfaWQgYmFzZV9vaWQ7CisKKwkJCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZiYXNlX29pZCwgcmV1c2VfcGFja2ZpbGUsCisJCQkJCSAgICAgcmV1c2VfcGFja2ZpbGUtPnJldmluZGV4W2Jhc2VfcG9zXS5ucik7CisKKwkJCWxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIoaGVhZGVyLCBzaXplb2YoaGVhZGVyKSwKKwkJCQkJCQkgICBPQkpfUkVGX0RFTFRBLCBzaXplKTsKKwkJCWhhc2h3cml0ZShvdXQsIGhlYWRlciwgbGVuKTsKKwkJCWhhc2h3cml0ZShvdXQsIGJhc2Vfb2lkLmhhc2gsIDIwKTsKKwkJCWNvcHlfcGFja19kYXRhKG91dCwgcmV1c2VfcGFja2ZpbGUsIHdfY3VycywgY3VyLCBuZXh0IC0gY3VyKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIE90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCB0byByZXdyaXRlIHRoZSBvZmZzZXQuLi4gKi8KKwkJZml4dXAgPSBmaW5kX3JldXNlZF9vZmZzZXQob2Zmc2V0KSAtCisJCQlmaW5kX3JldXNlZF9vZmZzZXQoYmFzZV9vZmZzZXQpOworCQlpZiAoZml4dXApIHsKKwkJCXVuc2lnbmVkIGNoYXIgb2ZzX2hlYWRlclsxMF07CisJCQl1bnNpZ25lZCBpLCBvZnNfbGVuOworCQkJb2ZmX3Qgb2ZzID0gb2Zmc2V0IC0gYmFzZV9vZmZzZXQgLSBmaXh1cDsKKworCQkJbGVuID0gZW5jb2RlX2luX3BhY2tfb2JqZWN0X2hlYWRlcihoZWFkZXIsIHNpemVvZihoZWFkZXIpLAorCQkJCQkJCSAgIE9CSl9PRlNfREVMVEEsIHNpemUpOworCisJCQlpID0gc2l6ZW9mKG9mc19oZWFkZXIpIC0gMTsKKwkJCW9mc19oZWFkZXJbaV0gPSBvZnMgJiAxMjc7CisJCQl3aGlsZSAob2ZzID4+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+bnIpIHsKKwkJCXAtPnBhY2tfa2VlcF9pbl9jb3JlID0gMTsKKwkJCWlnbm9yZV9wYWNrZWRfa2VlcF9pbl9jb3JlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9pbmRleF92ZXJzaW9uKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwljaGFyICpjOworCWNvbnN0IGNoYXIgKnZhbCA9IGFyZzsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCXBhY2tfaWR4X29wdHMudmVyc2lvbiA9IHN0cnRvdWwodmFsLCAmYywgMTApOworCWlmIChwYWNrX2lkeF9vcHRzLnZlcnNpb24gPiAyKQorCQlkaWUoXygidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIpLCB2YWwpOworCWlmICgqYyA9PSAnLCcgJiYgY1sxXSkKKwkJcGFja19pZHhfb3B0cy5vZmYzMl9saW1pdCA9IHN0cnRvdWwoYysxLCAmYywgMCk7CisJaWYgKCpjIHx8IHBhY2tfaWR4X29wdHMub2ZmMzJfbGltaXQgJiAweDgwMDAwMDAwKQorCQlkaWUoXygiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIpLCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV91bnBhY2tfdW5yZWFjaGFibGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpIHsKKwkJdW5wYWNrX3VucmVhY2hhYmxlID0gMDsKKwkJdW5wYWNrX3VucmVhY2hhYmxlX2V4cGlyYXRpb24gPSAwOworCX0KKwllbHNlIHsKKwkJdW5wYWNrX3VucmVhY2hhYmxlID0gMTsKKwkJaWYgKGFyZykKKwkJCXVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uID0gYXBwcm94aWRhdGUoYXJnKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfcGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCB1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAwOworCWludCBzaGFsbG93ID0gMDsKKwlpbnQgYWxsX3Byb2dyZXNzX2ltcGxpZWQgPSAwOworCXN0cnVjdCBhcmd2X2FycmF5IHJwID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXZfbGlzdF91bnBhY2tlZCA9IDAsIHJldl9saXN0X2FsbCA9IDAsIHJldl9saXN0X3JlZmxvZyA9IDA7CisJaW50IHJldl9saXN0X2luZGV4ID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qga2VlcF9wYWNrX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBvcHRpb24gcGFja19vYmplY3RzX29wdGlvbnNbXSA9IHsKKwkJT1BUX1NFVF9JTlQoJ3EnLCAicXVpZXQiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIiksIDApLAorCQlPUFRfU0VUX0lOVCgwLCAicHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oInNob3cgcHJvZ3Jlc3MgbWV0ZXIiKSwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJhbGwtcHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCisJCQkgICAgTl8oInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIiksIDIpLAorCQlPUFRfQk9PTCgwLCAiYWxsLXByb2dyZXNzLWltcGxpZWQiLAorCQkJICZhbGxfcHJvZ3Jlc3NfaW1wbGllZCwKKwkJCSBOXygic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImluZGV4LXZlcnNpb24iLCBOVUxMLCBOXygiPHZlcnNpb24+Wyw8b2Zmc2V0Pl0iKSwKKwkJICBOXygid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIpLAorCQkgIFBBUlNFX09QVF9OT05FRywgb3B0aW9uX3BhcnNlX2luZGV4X3ZlcnNpb24gfSwKKwkJT1BUX01BR05JVFVERSgwLCAibWF4LXBhY2stc2l6ZSIsICZwYWNrX3NpemVfbGltaXQsCisJCQkgICAgICBOXygibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIpKSwKKwkJT1BUX0JPT0woMCwgImxvY2FsIiwgJmxvY2FsLAorCQkJIE5fKCJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiKSksCisJCU9QVF9CT09MKDAsICJpbmNyZW1lbnRhbCIsICZpbmNyZW1lbnRhbCwKKwkJCSBOXygiaWdub3JlIHBhY2tlZCBvYmplY3RzIikpLAorCQlPUFRfSU5URUdFUigwLCAid2luZG93IiwgJndpbmRvdywKKwkJCSAgICBOXygibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIpKSwKKwkJT1BUX01BR05JVFVERSgwLCAid2luZG93LW1lbW9yeSIsICZ3aW5kb3dfbWVtb3J5X2xpbWl0LAorCQkJICAgICAgTl8oImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiKSksCisJCU9QVF9JTlRFR0VSKDAsICJkZXB0aCIsICZkZXB0aCwKKwkJCSAgICBOXygibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siKSksCisJCU9QVF9CT09MKDAsICJyZXVzZS1kZWx0YSIsICZyZXVzZV9kZWx0YSwKKwkJCSBOXygicmV1c2UgZXhpc3RpbmcgZGVsdGFzIikpLAorCQlPUFRfQk9PTCgwLCAicmV1c2Utb2JqZWN0IiwgJnJldXNlX29iamVjdCwKKwkJCSBOXygicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woMCwgImRlbHRhLWJhc2Utb2Zmc2V0IiwgJmFsbG93X29mc19kZWx0YSwKKwkJCSBOXygidXNlIE9GU19ERUxUQSBvYmplY3RzIikpLAorCQlPUFRfSU5URUdFUigwLCAidGhyZWFkcyIsICZkZWx0YV9zZWFyY2hfdGhyZWFkcywKKwkJCSAgICBOXygidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIpKSwKKwkJT1BUX0JPT0woMCwgIm5vbi1lbXB0eSIsICZub25fZW1wdHksCisJCQkgTl8oImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiKSksCisJCU9QVF9CT09MKDAsICJyZXZzIiwgJnVzZV9pbnRlcm5hbF9yZXZfbGlzdCwKKwkJCSBOXygicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIpKSwKKwkJT1BUX1NFVF9JTlRfRigwLCAidW5wYWNrZWQiLCAmcmV2X2xpc3RfdW5wYWNrZWQsCisJCQkgICAgICBOXygibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiKSwKKwkJCSAgICAgIDEsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9TRVRfSU5UX0YoMCwgImFsbCIsICZyZXZfbGlzdF9hbGwsCisJCQkgICAgICBOXygiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiKSwKKwkJCSAgICAgIDEsIFBBUlNFX09QVF9OT05FRyksCisJCU9QVF9TRVRfSU5UX0YoMCwgInJlZmxvZyIsICZyZXZfbGlzdF9yZWZsb2csCisJCQkgICAgICBOXygiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIiksCisJCQkgICAgICAxLCBQQVJTRV9PUFRfTk9ORUcpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJpbmRleGVkLW9iamVjdHMiLCAmcmV2X2xpc3RfaW5kZXgsCisJCQkgICAgICBOXygiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIpLAorCQkJICAgICAgMSwgUEFSU0VfT1BUX05PTkVHKSwKKwkJT1BUX0JPT0woMCwgInN0ZG91dCIsICZwYWNrX3RvX3N0ZG91dCwKKwkJCSBOXygib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IikpLAorCQlPUFRfQk9PTCgwLCAiaW5jbHVkZS10YWciLCAmaW5jbHVkZV90YWcsCisJCQkgTl8oImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIpKSwKKwkJT1BUX0JPT0woMCwgImtlZXAtdW5yZWFjaGFibGUiLCAma2VlcF91bnJlYWNoYWJsZSwKKwkJCSBOXygia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIikpLAorCQlPUFRfQk9PTCgwLCAicGFjay1sb29zZS11bnJlYWNoYWJsZSIsICZwYWNrX2xvb3NlX3VucmVhY2hhYmxlLAorCQkJIE5fKCJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAidW5wYWNrLXVucmVhY2hhYmxlIiwgTlVMTCwgTl8oInRpbWUiKSwKKwkJICBOXygidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fcGFyc2VfdW5wYWNrX3VucmVhY2hhYmxlIH0sCisJCU9QVF9CT09MKDAsICJzcGFyc2UiLCAmc3BhcnNlLAorCQkJIE5fKCJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIikpLAorCQlPUFRfQk9PTCgwLCAidGhpbiIsICZ0aGluLAorCQkJIE5fKCJjcmVhdGUgdGhpbiBwYWNrcyIpKSwKKwkJT1BUX0JPT0woMCwgInNoYWxsb3ciLCAmc2hhbGxvdywKKwkJCSBOXygiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiKSksCisJCU9QVF9CT09MKDAsICJob25vci1wYWNrLWtlZXAiLCAmaWdub3JlX3BhY2tlZF9rZWVwX29uX2Rpc2ssCisJCQkgTl8oImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAia2VlcC1wYWNrIiwgJmtlZXBfcGFja19saXN0LCBOXygibmFtZSIpLAorCQkJCU5fKCJpZ25vcmUgdGhpcyBwYWNrIikpLAorCQlPUFRfSU5URUdFUigwLCAiY29tcHJlc3Npb24iLCAmcGFja19jb21wcmVzc2lvbl9sZXZlbCwKKwkJCSAgICBOXygicGFjayBjb21wcmVzc2lvbiBsZXZlbCIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgImtlZXAtdHJ1ZS1wYXJlbnRzIiwgJmdyYWZ0c19yZXBsYWNlX3BhcmVudHMsCisJCQkgICAgTl8oImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIiksIDApLAorCQlPUFRfQk9PTCgwLCAidXNlLWJpdG1hcC1pbmRleCIsICZ1c2VfYml0bWFwX2luZGV4LAorCQkJIE5fKCJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiKSksCisJCU9QVF9TRVRfSU5UKDAsICJ3cml0ZS1iaXRtYXAtaW5kZXgiLCAmd3JpdGVfYml0bWFwX2luZGV4LAorCQkJICAgIE5fKCJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IiksCisJCQkgICAgV1JJVEVfQklUTUFQX1RSVUUpLAorCQlPUFRfU0VUX0lOVF9GKDAsICJ3cml0ZS1iaXRtYXAtaW5kZXgtcXVpZXQiLAorCQkJICAgICAgJndyaXRlX2JpdG1hcF9pbmRleCwKKwkJCSAgICAgIE5fKCJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIpLAorCQkJICAgICAgV1JJVEVfQklUTUFQX1FVSUVULCBQQVJTRV9PUFRfSElEREVOKSwKKwkJT1BUX1BBUlNFX0xJU1RfT0JKRUNUU19GSUxURVIoJmZpbHRlcl9vcHRpb25zKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJtaXNzaW5nIiwgTlVMTCwgTl8oImFjdGlvbiIpLAorCQkgIE5fKCJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIiksIFBBUlNFX09QVF9OT05FRywKKwkJICBvcHRpb25fcGFyc2VfbWlzc2luZ19hY3Rpb24gfSwKKwkJT1BUX0JPT0woMCwgImV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIsICZleGNsdWRlX3Byb21pc29yX29iamVjdHMsCisJCQkgTl8oImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIikpLAorCQlPUFRfQk9PTCgwLCAiZGVsdGEtaXNsYW5kcyIsICZ1c2VfZGVsdGFfaXNsYW5kcywKKwkJCSBOXygicmVzcGVjdCBpc2xhbmRzIGR1cmluZyBkZWx0YSBjb21wcmVzc2lvbiIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlpZiAoREZTX05VTV9TVEFURVMgPiAoMSA8PCBPRV9ERlNfU1RBVEVfQklUUykpCisJCUJVRygidG9vIG1hbnkgZGZzIHN0YXRlcywgaW5jcmVhc2UgT0VfREZTX1NUQVRFX0JJVFMiKTsKKworCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKworCXNwYXJzZSA9IGdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfUEFDS19TUEFSU0UiLCAwKTsKKwlwcmVwYXJlX3JlcG9fc2V0dGluZ3ModGhlX3JlcG9zaXRvcnkpOworCWlmICghc3BhcnNlICYmIHRoZV9yZXBvc2l0b3J5LT5zZXR0aW5ncy5wYWNrX3VzZV9zcGFyc2UgIT0gLTEpCisJCXNwYXJzZSA9IHRoZV9yZXBvc2l0b3J5LT5zZXR0aW5ncy5wYWNrX3VzZV9zcGFyc2U7CisKKwlyZXNldF9wYWNrX2lkeF9vcHRpb24oJnBhY2tfaWR4X29wdHMpOworCWdpdF9jb25maWcoZ2l0X3BhY2tfY29uZmlnLCBOVUxMKTsKKworCXByb2dyZXNzID0gaXNhdHR5KDIpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcGFja19vYmplY3RzX29wdGlvbnMsCisJCQkgICAgIHBhY2tfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MpIHsKKwkJYmFzZV9uYW1lID0gYXJndlswXTsKKwkJYXJnYy0tOworCX0KKwlpZiAocGFja190b19zdGRvdXQgIT0gIWJhc2VfbmFtZSB8fCBhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMocGFja191c2FnZSwgcGFja19vYmplY3RzX29wdGlvbnMpOworCisJaWYgKGRlcHRoID49ICgxIDw8IE9FX0RFUFRIX0JJVFMpKSB7CisJCXdhcm5pbmcoXygiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiKSwKKwkJCWRlcHRoLCAoMSA8PCBPRV9ERVBUSF9CSVRTKSAtIDEpOworCQlkZXB0aCA9ICgxIDw8IE9FX0RFUFRIX0JJVFMpIC0gMTsKKwl9CisJaWYgKGNhY2hlX21heF9zbWFsbF9kZWx0YV9zaXplID49ICgxVSA8PCBPRV9aX0RFTFRBX0JJVFMpKSB7CisJCXdhcm5pbmcoXygicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiKSwKKwkJCSgxVSA8PCBPRV9aX0RFTFRBX0JJVFMpIC0gMSk7CisJCWNhY2hlX21heF9zbWFsbF9kZWx0YV9zaXplID0gKDFVIDw8IE9FX1pfREVMVEFfQklUUykgLSAxOworCX0KKworCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICJwYWNrLW9iamVjdHMiKTsKKwlpZiAodGhpbikgeworCQl1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJnJwLCBzaGFsbG93CisJCQkJPyAiLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSIKKwkJCQk6ICItLW9iamVjdHMtZWRnZSIpOworCX0gZWxzZQorCQlhcmd2X2FycmF5X3B1c2goJnJwLCAiLS1vYmplY3RzIik7CisKKwlpZiAocmV2X2xpc3RfYWxsKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICItLWFsbCIpOworCX0KKwlpZiAocmV2X2xpc3RfcmVmbG9nKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICItLXJlZmxvZyIpOworCX0KKwlpZiAocmV2X2xpc3RfaW5kZXgpIHsKKwkJdXNlX2ludGVybmFsX3Jldl9saXN0ID0gMTsKKwkJYXJndl9hcnJheV9wdXNoKCZycCwgIi0taW5kZXhlZC1vYmplY3RzIik7CisJfQorCWlmIChyZXZfbGlzdF91bnBhY2tlZCkgeworCQl1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJnJwLCAiLS11bnBhY2tlZCIpOworCX0KKworCWlmIChleGNsdWRlX3Byb21pc29yX29iamVjdHMpIHsKKwkJdXNlX2ludGVybmFsX3Jldl9saXN0ID0gMTsKKwkJZmV0Y2hfaWZfbWlzc2luZyA9IDA7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIpOworCX0KKwlpZiAodW5wYWNrX3VucmVhY2hhYmxlIHx8IGtlZXBfdW5yZWFjaGFibGUgfHwgcGFja19sb29zZV91bnJlYWNoYWJsZSkKKwkJdXNlX2ludGVybmFsX3Jldl9saXN0ID0gMTsKKworCWlmICghcmV1c2Vfb2JqZWN0KQorCQlyZXVzZV9kZWx0YSA9IDA7CisJaWYgKHBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPT0gLTEpCisJCXBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJZWxzZSBpZiAocGFja19jb21wcmVzc2lvbl9sZXZlbCA8IDAgfHwgcGFja19jb21wcmVzc2lvbl9sZXZlbCA+IFpfQkVTVF9DT01QUkVTU0lPTikKKwkJZGllKF8oImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIiksIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCisJaWYgKCFkZWx0YV9zZWFyY2hfdGhyZWFkcykJLyogLS10aHJlYWRzPTAgbWVhbnMgYXV0b2RldGVjdCAqLworCQlkZWx0YV9zZWFyY2hfdGhyZWFkcyA9IG9ubGluZV9jcHVzKCk7CisKKwlpZiAoIUhBVkVfVEhSRUFEUyAmJiBkZWx0YV9zZWFyY2hfdGhyZWFkcyAhPSAxKQorCQl3YXJuaW5nKF8oIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIikpOworCWlmICghcGFja190b19zdGRvdXQgJiYgIXBhY2tfc2l6ZV9saW1pdCkKKwkJcGFja19zaXplX2xpbWl0ID0gcGFja19zaXplX2xpbWl0X2NmZzsKKwlpZiAocGFja190b19zdGRvdXQgJiYgcGFja19zaXplX2xpbWl0KQorCQlkaWUoXygiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIiKSk7CisJaWYgKHBhY2tfc2l6ZV9saW1pdCAmJiBwYWNrX3NpemVfbGltaXQgPCAxMDI0KjEwMjQpIHsKKwkJd2FybmluZyhfKCJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIpKTsKKwkJcGFja19zaXplX2xpbWl0ID0gMTAyNCoxMDI0OworCX0KKworCWlmICghcGFja190b19zdGRvdXQgJiYgdGhpbikKKwkJZGllKF8oIi0tdGhpbiBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhbiBpbmRleGFibGUgcGFjayIpKTsKKworCWlmIChrZWVwX3VucmVhY2hhYmxlICYmIHVucGFja191bnJlYWNoYWJsZSkKKwkJZGllKF8oIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIpKTsKKwlpZiAoIXJldl9saXN0X2FsbCB8fCAhcmV2X2xpc3RfcmVmbG9nIHx8ICFyZXZfbGlzdF9pbmRleCkKKwkJdW5wYWNrX3VucmVhY2hhYmxlX2V4cGlyYXRpb24gPSAwOworCisJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSkgeworCQlpZiAoIXBhY2tfdG9fc3Rkb3V0KQorCQkJZGllKF8oImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIpKTsKKwl9CisKKwkvKgorCSAqICJzb2Z0IiByZWFzb25zIG5vdCB0byB1c2UgYml0bWFwcyAtIGZvciBvbi1kaXNrIHJlcGFjayBieSBkZWZhdWx0IHdlIHdhbnQKKwkgKgorCSAqIC0gdG8gcHJvZHVjZSBnb29kIHBhY2sgKHdpdGggYml0bWFwIGluZGV4IG5vdC15ZXQtcGFja2VkIG9iamVjdHMgYXJlCisJICogICBwYWNrZWQgaW4gc3Vib3B0aW1hbCBvcmRlcikuCisJICoKKwkgKiAtIHRvIHVzZSBtb3JlIHJvYnVzdCBwYWNrLWdlbmVyYXRpb24gY29kZXBhdGggKGF2b2lkaW5nIHBvc3NpYmxlCisJICogICBidWdzIGluIGJpdG1hcCBjb2RlIGFuZCBwb3NzaWJsZSBiaXRtYXAgaW5kZXggY29ycnVwdGlvbikuCisJICovCisJaWYgKCFwYWNrX3RvX3N0ZG91dCkKKwkJdXNlX2JpdG1hcF9pbmRleF9kZWZhdWx0ID0gMDsKKworCWlmICh1c2VfYml0bWFwX2luZGV4IDwgMCkKKwkJdXNlX2JpdG1hcF9pbmRleCA9IHVzZV9iaXRtYXBfaW5kZXhfZGVmYXVsdDsKKworCS8qICJoYXJkIiByZWFzb25zIG5vdCB0byB1c2UgYml0bWFwczsgdGhlc2UganVzdCB3b24ndCB3b3JrIGF0IGFsbCAqLworCWlmICghdXNlX2ludGVybmFsX3Jldl9saXN0IHx8ICghcGFja190b19zdGRvdXQgJiYgd3JpdGVfYml0bWFwX2luZGV4KSB8fCBpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKQorCQl1c2VfYml0bWFwX2luZGV4ID0gMDsKKworCWlmIChwYWNrX3RvX3N0ZG91dCB8fCAhcmV2X2xpc3RfYWxsKQorCQl3cml0ZV9iaXRtYXBfaW5kZXggPSAwOworCisJaWYgKHVzZV9kZWx0YV9pc2xhbmRzKQorCQlhcmd2X2FycmF5X3B1c2goJnJwLCAiLS10b3BvLW9yZGVyIik7CisKKwlpZiAocHJvZ3Jlc3MgJiYgYWxsX3Byb2dyZXNzX2ltcGxpZWQpCisJCXByb2dyZXNzID0gMjsKKworCWFkZF9leHRyYV9rZXB0X3BhY2tzKCZrZWVwX3BhY2tfbGlzdCk7CisJaWYgKGlnbm9yZV9wYWNrZWRfa2VlcF9vbl9kaXNrKSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCQlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsgcDsgcCA9IHAtPm5leHQpCisJCQlpZiAocC0+cGFja19sb2NhbCAmJiBwLT5wYWNrX2tlZXApCisJCQkJYnJlYWs7CisJCWlmICghcCkgLyogbm8ga2VlcC1hYmxlIHBhY2tzIGZvdW5kICovCisJCQlpZ25vcmVfcGFja2VkX2tlZXBfb25fZGlzayA9IDA7CisJfQorCWlmIChsb2NhbCkgeworCQkvKgorCQkgKiB1bmxpa2UgaWdub3JlX3BhY2tlZF9rZWVwX29uX2Rpc2sgYWJvdmUsIHdlIGRvIG5vdAorCQkgKiB3YW50IHRvIHVuc2V0ICJsb2NhbCIgYmFzZWQgb24gbG9va2luZyBhdCBwYWNrcywgYXMKKwkJICogaXQgYWxzbyBjb3ZlcnMgbm9uLWxvY2FsIG9iamVjdHMKKwkJICovCisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCQlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCWlmICghcC0+cGFja19sb2NhbCkgeworCQkJCWhhdmVfbm9uX2xvY2FsX3BhY2tzID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXRyYWNlMl9yZWdpb25fZW50ZXIoInBhY2stb2JqZWN0cyIsICJlbnVtZXJhdGUtb2JqZWN0cyIsCisJCQkgICAgdGhlX3JlcG9zaXRvcnkpOworCXByZXBhcmVfcGFja2luZ19kYXRhKHRoZV9yZXBvc2l0b3J5LCAmdG9fcGFjayk7CisKKwlpZiAocHJvZ3Jlc3MpCisJCXByb2dyZXNzX3N0YXRlID0gc3RhcnRfcHJvZ3Jlc3MoXygiRW51bWVyYXRpbmcgb2JqZWN0cyIpLCAwKTsKKwlpZiAoIXVzZV9pbnRlcm5hbF9yZXZfbGlzdCkKKwkJcmVhZF9vYmplY3RfbGlzdF9mcm9tX3N0ZGluKCk7CisJZWxzZSB7CisJCWdldF9vYmplY3RfbGlzdChycC5hcmdjLCBycC5hcmd2KTsKKwkJYXJndl9hcnJheV9jbGVhcigmcnApOworCX0KKwljbGVhbnVwX3ByZWZlcnJlZF9iYXNlKCk7CisJaWYgKGluY2x1ZGVfdGFnICYmIG5yX3Jlc3VsdCkKKwkJZm9yX2VhY2hfcmVmKGFkZF9yZWZfdGFnLCBOVUxMKTsKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgicGFjay1vYmplY3RzIiwgImVudW1lcmF0ZS1vYmplY3RzIiwKKwkJCSAgICB0aGVfcmVwb3NpdG9yeSk7CisKKwlpZiAobm9uX2VtcHR5ICYmICFucl9yZXN1bHQpCisJCXJldHVybiAwOworCWlmIChucl9yZXN1bHQpIHsKKwkJdHJhY2UyX3JlZ2lvbl9lbnRlcigicGFjay1vYmplY3RzIiwgInByZXBhcmUtcGFjayIsCisJCQkJICAgIHRoZV9yZXBvc2l0b3J5KTsKKwkJcHJlcGFyZV9wYWNrKHdpbmRvdywgZGVwdGgpOworCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJwYWNrLW9iamVjdHMiLCAicHJlcGFyZS1wYWNrIiwKKwkJCQkgICAgdGhlX3JlcG9zaXRvcnkpOworCX0KKworCXRyYWNlMl9yZWdpb25fZW50ZXIoInBhY2stb2JqZWN0cyIsICJ3cml0ZS1wYWNrLWZpbGUiLCB0aGVfcmVwb3NpdG9yeSk7CisJd3JpdGVfcGFja19maWxlKCk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgicGFjay1vYmplY3RzIiwgIndyaXRlLXBhY2stZmlsZSIsIHRoZV9yZXBvc2l0b3J5KTsKKworCWlmIChwcm9ncmVzcykKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBfKCJUb3RhbCAlIlBSSXUzMiIgKGRlbHRhICUiUFJJdTMyIiksIgorCQkJICAgICAiIHJldXNlZCAlIlBSSXUzMiIgKGRlbHRhICUiUFJJdTMyIiksIgorCQkJICAgICAiIHBhY2stcmV1c2VkICUiUFJJdTMyKSwKKwkJCSAgIHdyaXR0ZW4sIHdyaXR0ZW5fZGVsdGEsIHJldXNlZCwgcmV1c2VkX2RlbHRhLAorCQkJICAgcmV1c2VfcGFja2ZpbGVfb2JqZWN0cyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stcmVkdW5kYW50LmMgYi9idWlsdGluL3BhY2stcmVkdW5kYW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4ZTM0MAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcGFjay1yZWR1bmRhbnQuYwpAQCAtMCwwICsxLDY1MyBAQAorLyoKKyoKKyogQ29weXJpZ2h0IDIwMDUsIEx1a2FzIFNhbmRzdHJvbSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CisqCisqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLgorKgorKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworI2RlZmluZSBCTEtTSVpFIDUxMgorCitzdGF0aWMgY29uc3QgY2hhciBwYWNrX3JlZHVuZGFudF91c2FnZVtdID0KKyJnaXQgcGFjay1yZWR1bmRhbnQgWy0tdmVyYm9zZV0gWy0tYWx0LW9kYl0gKC0tYWxsIHwgPGZpbGVuYW1lLnBhY2s+Li4uKSI7CisKK3N0YXRpYyBpbnQgbG9hZF9hbGxfcGFja3MsIHZlcmJvc2UsIGFsdF9vZGI7CisKK3N0cnVjdCBsbGlzdF9pdGVtIHsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqbmV4dDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7Cit9Oworc3RhdGljIHN0cnVjdCBsbGlzdCB7CisJc3RydWN0IGxsaXN0X2l0ZW0gKmZyb250OworCXN0cnVjdCBsbGlzdF9pdGVtICpiYWNrOworCXNpemVfdCBzaXplOworfSAqYWxsX29iamVjdHM7IC8qIGFsbCBvYmplY3RzIHdoaWNoIG11c3QgYmUgcHJlc2VudCBpbiBsb2NhbCBwYWNrZmlsZXMgKi8KKworc3RhdGljIHN0cnVjdCBwYWNrX2xpc3QgeworCXN0cnVjdCBwYWNrX2xpc3QgKm5leHQ7CisJc3RydWN0IHBhY2tlZF9naXQgKnBhY2s7CisJc3RydWN0IGxsaXN0ICp1bmlxdWVfb2JqZWN0czsKKwlzdHJ1Y3QgbGxpc3QgKnJlbWFpbmluZ19vYmplY3RzOworCXNpemVfdCBhbGxfb2JqZWN0c19zaXplOworfSAqbG9jYWxfcGFja3MgPSBOVUxMLCAqYWx0b2RiX3BhY2tzID0gTlVMTDsKKworc3RhdGljIHN0cnVjdCBsbGlzdF9pdGVtICpmcmVlX25vZGVzOworCitzdGF0aWMgaW5saW5lIHZvaWQgbGxpc3RfaXRlbV9wdXQoc3RydWN0IGxsaXN0X2l0ZW0gKml0ZW0pCit7CisJaXRlbS0+bmV4dCA9IGZyZWVfbm9kZXM7CisJZnJlZV9ub2RlcyA9IGl0ZW07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2l0ZW0gKmxsaXN0X2l0ZW1fZ2V0KHZvaWQpCit7CisJc3RydWN0IGxsaXN0X2l0ZW0gKm5ld19pdGVtOworCWlmICggZnJlZV9ub2RlcyApIHsKKwkJbmV3X2l0ZW0gPSBmcmVlX25vZGVzOworCQlmcmVlX25vZGVzID0gZnJlZV9ub2Rlcy0+bmV4dDsKKwl9IGVsc2UgeworCQlpbnQgaSA9IDE7CisJCUFMTE9DX0FSUkFZKG5ld19pdGVtLCBCTEtTSVpFKTsKKwkJZm9yICg7IGkgPCBCTEtTSVpFOyBpKyspCisJCQlsbGlzdF9pdGVtX3B1dCgmbmV3X2l0ZW1baV0pOworCX0KKwlyZXR1cm4gbmV3X2l0ZW07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGlzdF9pbml0KHN0cnVjdCBsbGlzdCAqKmxpc3QpCit7CisJKmxpc3QgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgbGxpc3QpKTsKKwkoKmxpc3QpLT5mcm9udCA9ICgqbGlzdCktPmJhY2sgPSBOVUxMOworCSgqbGlzdCktPnNpemUgPSAwOworfQorCitzdGF0aWMgc3RydWN0IGxsaXN0ICogbGxpc3RfY29weShzdHJ1Y3QgbGxpc3QgKmxpc3QpCit7CisJc3RydWN0IGxsaXN0ICpyZXQ7CisJc3RydWN0IGxsaXN0X2l0ZW0gKm5ld19pdGVtLCAqb2xkX2l0ZW0sICpwcmV2OworCisJbGxpc3RfaW5pdCgmcmV0KTsKKworCWlmICgocmV0LT5zaXplID0gbGlzdC0+c2l6ZSkgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCW5ld19pdGVtID0gcmV0LT5mcm9udCA9IGxsaXN0X2l0ZW1fZ2V0KCk7CisJbmV3X2l0ZW0tPm9pZCA9IGxpc3QtPmZyb250LT5vaWQ7CisKKwlvbGRfaXRlbSA9IGxpc3QtPmZyb250LT5uZXh0OworCXdoaWxlIChvbGRfaXRlbSkgeworCQlwcmV2ID0gbmV3X2l0ZW07CisJCW5ld19pdGVtID0gbGxpc3RfaXRlbV9nZXQoKTsKKwkJcHJldi0+bmV4dCA9IG5ld19pdGVtOworCQluZXdfaXRlbS0+b2lkID0gb2xkX2l0ZW0tPm9pZDsKKwkJb2xkX2l0ZW0gPSBvbGRfaXRlbS0+bmV4dDsKKwl9CisJbmV3X2l0ZW0tPm5leHQgPSBOVUxMOworCXJldC0+YmFjayA9IG5ld19pdGVtOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaXRlbSAqbGxpc3RfaW5zZXJ0KHN0cnVjdCBsbGlzdCAqbGlzdCwKKwkJCQkJICAgICAgc3RydWN0IGxsaXN0X2l0ZW0gKmFmdGVyLAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGxsaXN0X2l0ZW0gKm5ld19pdGVtID0gbGxpc3RfaXRlbV9nZXQoKTsKKwluZXdfaXRlbS0+b2lkID0gb2lkOworCW5ld19pdGVtLT5uZXh0ID0gTlVMTDsKKworCWlmIChhZnRlciAhPSBOVUxMKSB7CisJCW5ld19pdGVtLT5uZXh0ID0gYWZ0ZXItPm5leHQ7CisJCWFmdGVyLT5uZXh0ID0gbmV3X2l0ZW07CisJCWlmIChhZnRlciA9PSBsaXN0LT5iYWNrKQorCQkJbGlzdC0+YmFjayA9IG5ld19pdGVtOworCX0gZWxzZSB7LyogaW5zZXJ0IGluIGZyb250ICovCisJCWlmIChsaXN0LT5zaXplID09IDApCisJCQlsaXN0LT5iYWNrID0gbmV3X2l0ZW07CisJCWVsc2UKKwkJCW5ld19pdGVtLT5uZXh0ID0gbGlzdC0+ZnJvbnQ7CisJCWxpc3QtPmZyb250ID0gbmV3X2l0ZW07CisJfQorCWxpc3QtPnNpemUrKzsKKwlyZXR1cm4gbmV3X2l0ZW07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2l0ZW0gKmxsaXN0X2luc2VydF9iYWNrKHN0cnVjdCBsbGlzdCAqbGlzdCwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gbGxpc3RfaW5zZXJ0KGxpc3QsIGxpc3QtPmJhY2ssIG9pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2l0ZW0gKmxsaXN0X2luc2VydF9zb3J0ZWRfdW5pcXVlKHN0cnVjdCBsbGlzdCAqbGlzdCwKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IGxsaXN0X2l0ZW0gKmhpbnQpCit7CisJc3RydWN0IGxsaXN0X2l0ZW0gKnByZXYgPSBOVUxMLCAqbDsKKworCWwgPSAoaGludCA9PSBOVUxMKSA/IGxpc3QtPmZyb250IDogaGludDsKKwl3aGlsZSAobCkgeworCQlpbnQgY21wID0gb2lkY21wKGwtPm9pZCwgb2lkKTsKKwkJaWYgKGNtcCA+IDApIHsgLyogd2UgaW5zZXJ0IGJlZm9yZSB0aGlzIGVudHJ5ICovCisJCQlyZXR1cm4gbGxpc3RfaW5zZXJ0KGxpc3QsIHByZXYsIG9pZCk7CisJCX0KKwkJaWYgKCFjbXApIHsgLyogYWxyZWFkeSBleGlzdHMgKi8KKwkJCXJldHVybiBsOworCQl9CisJCXByZXYgPSBsOworCQlsID0gbC0+bmV4dDsKKwl9CisJLyogaW5zZXJ0IGF0IHRoZSBlbmQgKi8KKwlyZXR1cm4gbGxpc3RfaW5zZXJ0X2JhY2sobGlzdCwgb2lkKTsKK30KKworLyogcmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gaXRlbSBpbiBmcm9udCBvZiBzaGExICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9pdGVtICogbGxpc3Rfc29ydGVkX3JlbW92ZShzdHJ1Y3QgbGxpc3QgKmxpc3QsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IGxsaXN0X2l0ZW0gKmhpbnQpCit7CisJc3RydWN0IGxsaXN0X2l0ZW0gKnByZXYsICpsOworCityZWRvX2Zyb21fc3RhcnQ6CisJbCA9IChoaW50ID09IE5VTEwpID8gbGlzdC0+ZnJvbnQgOiBoaW50OworCXByZXYgPSBOVUxMOworCXdoaWxlIChsKSB7CisJCWNvbnN0IGludCBjbXAgPSBvaWRjbXAobC0+b2lkLCBvaWQpOworCQlpZiAoY21wID4gMCkgLyogbm90IGluIGxpc3QsIHNpbmNlIHNvcnRlZCAqLworCQkJcmV0dXJuIHByZXY7CisJCWlmICghY21wKSB7IC8qIGZvdW5kICovCisJCQlpZiAocHJldiA9PSBOVUxMKSB7CisJCQkJaWYgKGhpbnQgIT0gTlVMTCAmJiBoaW50ICE9IGxpc3QtPmZyb250KSB7CisJCQkJCS8qIHdlIGRvbid0IGtub3cgdGhlIHByZXZpb3VzIGVsZW1lbnQgKi8KKwkJCQkJaGludCA9IE5VTEw7CisJCQkJCWdvdG8gcmVkb19mcm9tX3N0YXJ0OworCQkJCX0KKwkJCQlsaXN0LT5mcm9udCA9IGwtPm5leHQ7CisJCQl9IGVsc2UKKwkJCQlwcmV2LT5uZXh0ID0gbC0+bmV4dDsKKwkJCWlmIChsID09IGxpc3QtPmJhY2spCisJCQkJbGlzdC0+YmFjayA9IHByZXY7CisJCQlsbGlzdF9pdGVtX3B1dChsKTsKKwkJCWxpc3QtPnNpemUtLTsKKwkJCXJldHVybiBwcmV2OworCQl9CisJCXByZXYgPSBsOworCQlsID0gbC0+bmV4dDsKKwl9CisJcmV0dXJuIHByZXY7Cit9CisKKy8qIGNvbXB1dGVzIEFcQiAqLworc3RhdGljIHZvaWQgbGxpc3Rfc29ydGVkX2RpZmZlcmVuY2VfaW5wbGFjZShzdHJ1Y3QgbGxpc3QgKkEsCisJCQkJICAgICBzdHJ1Y3QgbGxpc3QgKkIpCit7CisJc3RydWN0IGxsaXN0X2l0ZW0gKmhpbnQsICpiOworCisJaGludCA9IE5VTEw7CisJYiA9IEItPmZyb250OworCisJd2hpbGUgKGIpIHsKKwkJaGludCA9IGxsaXN0X3NvcnRlZF9yZW1vdmUoQSwgYi0+b2lkLCBoaW50KTsKKwkJYiA9IGItPm5leHQ7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWNrX2xpc3QgKiBwYWNrX2xpc3RfaW5zZXJ0KHN0cnVjdCBwYWNrX2xpc3QgKipwbCwKKwkJCQkJICAgc3RydWN0IHBhY2tfbGlzdCAqZW50cnkpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWNrX2xpc3QpKTsKKwltZW1jcHkocCwgZW50cnksIHNpemVvZihzdHJ1Y3QgcGFja19saXN0KSk7CisJcC0+bmV4dCA9ICpwbDsKKwkqcGwgPSBwOworCXJldHVybiBwOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBwYWNrX2xpc3Rfc2l6ZShzdHJ1Y3QgcGFja19saXN0ICpwbCkKK3sKKwlzaXplX3QgcmV0ID0gMDsKKwl3aGlsZSAocGwpIHsKKwkJcmV0Kys7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFja19saXN0ICogcGFja19saXN0X2RpZmZlcmVuY2UoY29uc3Qgc3RydWN0IHBhY2tfbGlzdCAqQSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwYWNrX2xpc3QgKkIpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcmV0OworCWNvbnN0IHN0cnVjdCBwYWNrX2xpc3QgKnBsOworCisJaWYgKEEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwbCA9IEI7CisJd2hpbGUgKHBsICE9IE5VTEwpIHsKKwkJaWYgKEEtPnBhY2sgPT0gcGwtPnBhY2spCisJCQlyZXR1cm4gcGFja19saXN0X2RpZmZlcmVuY2UoQS0+bmV4dCwgQik7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWNrX2xpc3QpKTsKKwltZW1jcHkocmV0LCBBLCBzaXplb2Yoc3RydWN0IHBhY2tfbGlzdCkpOworCXJldC0+bmV4dCA9IHBhY2tfbGlzdF9kaWZmZXJlbmNlKEEtPm5leHQsIEIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNtcF90d29fcGFja3Moc3RydWN0IHBhY2tfbGlzdCAqcDEsIHN0cnVjdCBwYWNrX2xpc3QgKnAyKQoreworCXVuc2lnbmVkIGxvbmcgcDFfb2ZmID0gMCwgcDJfb2ZmID0gMCwgcDFfc3RlcCwgcDJfc3RlcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwMV9iYXNlLCAqcDJfYmFzZTsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqcDFfaGludCA9IE5VTEwsICpwMl9oaW50ID0gTlVMTDsKKwljb25zdCB1bnNpZ25lZCBpbnQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisKKwlpZiAoIXAxLT51bmlxdWVfb2JqZWN0cykKKwkJcDEtPnVuaXF1ZV9vYmplY3RzID0gbGxpc3RfY29weShwMS0+cmVtYWluaW5nX29iamVjdHMpOworCWlmICghcDItPnVuaXF1ZV9vYmplY3RzKQorCQlwMi0+dW5pcXVlX29iamVjdHMgPSBsbGlzdF9jb3B5KHAyLT5yZW1haW5pbmdfb2JqZWN0cyk7CisKKwlwMV9iYXNlID0gcDEtPnBhY2stPmluZGV4X2RhdGE7CisJcDJfYmFzZSA9IHAyLT5wYWNrLT5pbmRleF9kYXRhOworCXAxX2Jhc2UgKz0gMjU2ICogNCArICgocDEtPnBhY2stPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlwMl9iYXNlICs9IDI1NiAqIDQgKyAoKHAyLT5wYWNrLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogOCk7CisJcDFfc3RlcCA9IGhhc2hzeiArICgocDEtPnBhY2stPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiAwKTsKKwlwMl9zdGVwID0gaGFzaHN6ICsgKChwMi0+cGFjay0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDApOworCisJd2hpbGUgKHAxX29mZiA8IHAxLT5wYWNrLT5udW1fb2JqZWN0cyAqIHAxX3N0ZXAgJiYKKwkgICAgICAgcDJfb2ZmIDwgcDItPnBhY2stPm51bV9vYmplY3RzICogcDJfc3RlcCkKKwl7CisJCWNvbnN0IGludCBjbXAgPSBoYXNoY21wKHAxX2Jhc2UgKyBwMV9vZmYsIHAyX2Jhc2UgKyBwMl9vZmYpOworCQkvKiBjbXAgfiBwMSAtIHAyICovCisJCWlmIChjbXAgPT0gMCkgeworCQkJcDFfaGludCA9IGxsaXN0X3NvcnRlZF9yZW1vdmUocDEtPnVuaXF1ZV9vYmplY3RzLAorCQkJCQkoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKShwMV9iYXNlICsgcDFfb2ZmKSwKKwkJCQkJcDFfaGludCk7CisJCQlwMl9oaW50ID0gbGxpc3Rfc29ydGVkX3JlbW92ZShwMi0+dW5pcXVlX29iamVjdHMsCisJCQkJCShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopKHAxX2Jhc2UgKyBwMV9vZmYpLAorCQkJCQlwMl9oaW50KTsKKwkJCXAxX29mZiArPSBwMV9zdGVwOworCQkJcDJfb2ZmICs9IHAyX3N0ZXA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY21wIDwgMCkgeyAvKiBwMSBoYXMgdGhlIG9iamVjdCwgcDIgZG9lc24ndCAqLworCQkJcDFfb2ZmICs9IHAxX3N0ZXA7CisJCX0gZWxzZSB7IC8qIHAyIGhhcyB0aGUgb2JqZWN0LCBwMSBkb2Vzbid0ICovCisJCQlwMl9vZmYgKz0gcDJfc3RlcDsKKwkJfQorCX0KK30KKworc3RhdGljIHNpemVfdCBzaXplb2ZfdW5pb24oc3RydWN0IHBhY2tlZF9naXQgKnAxLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcDIpCit7CisJc2l6ZV90IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBwMV9vZmYgPSAwLCBwMl9vZmYgPSAwLCBwMV9zdGVwLCBwMl9zdGVwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxX2Jhc2UsICpwMl9iYXNlOworCWNvbnN0IHVuc2lnbmVkIGludCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKworCXAxX2Jhc2UgPSBwMS0+aW5kZXhfZGF0YTsKKwlwMl9iYXNlID0gcDItPmluZGV4X2RhdGE7CisJcDFfYmFzZSArPSAyNTYgKiA0ICsgKChwMS0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXAyX2Jhc2UgKz0gMjU2ICogNCArICgocDItPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlwMV9zdGVwID0gaGFzaHN6ICsgKChwMS0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDApOworCXAyX3N0ZXAgPSBoYXNoc3ogKyAoKHAyLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogMCk7CisKKwl3aGlsZSAocDFfb2ZmIDwgcDEtPm51bV9vYmplY3RzICogcDFfc3RlcCAmJgorCSAgICAgICBwMl9vZmYgPCBwMi0+bnVtX29iamVjdHMgKiBwMl9zdGVwKQorCXsKKwkJaW50IGNtcCA9IGhhc2hjbXAocDFfYmFzZSArIHAxX29mZiwgcDJfYmFzZSArIHAyX29mZik7CisJCS8qIGNtcCB+IHAxIC0gcDIgKi8KKwkJaWYgKGNtcCA9PSAwKSB7CisJCQlyZXQrKzsKKwkJCXAxX29mZiArPSBwMV9zdGVwOworCQkJcDJfb2ZmICs9IHAyX3N0ZXA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY21wIDwgMCkgeyAvKiBwMSBoYXMgdGhlIG9iamVjdCwgcDIgZG9lc24ndCAqLworCQkJcDFfb2ZmICs9IHAxX3N0ZXA7CisJCX0gZWxzZSB7IC8qIHAyIGhhcyB0aGUgb2JqZWN0LCBwMSBkb2Vzbid0ICovCisJCQlwMl9vZmYgKz0gcDJfc3RlcDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBhbm90aGVyIE8obl4yKSBmdW5jdGlvbiAuLi4gKi8KK3N0YXRpYyBzaXplX3QgZ2V0X3BhY2tfcmVkdW5kYW5jeShzdHJ1Y3QgcGFja19saXN0ICpwbCkKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpzdWJzZXQ7CisJc2l6ZV90IHJldCA9IDA7CisKKwlpZiAocGwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKHN1YnNldCA9IHBsLT5uZXh0KSkgeworCQl3aGlsZSAoc3Vic2V0KSB7CisJCQlyZXQgKz0gc2l6ZW9mX3VuaW9uKHBsLT5wYWNrLCBzdWJzZXQtPnBhY2spOworCQkJc3Vic2V0ID0gc3Vic2V0LT5uZXh0OworCQl9CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgb2ZmX3QgcGFja19zZXRfYnl0ZWNvdW50KHN0cnVjdCBwYWNrX2xpc3QgKnBsKQoreworCW9mZl90IHJldCA9IDA7CisJd2hpbGUgKHBsKSB7CisJCXJldCArPSBwbC0+cGFjay0+cGFja19zaXplOworCQlyZXQgKz0gcGwtPnBhY2stPmluZGV4X3NpemU7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21wX3JlbWFpbmluZ19vYmplY3RzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcGxfYSA9ICooKHN0cnVjdCBwYWNrX2xpc3QgKiopYSk7CisJc3RydWN0IHBhY2tfbGlzdCAqcGxfYiA9ICooKHN0cnVjdCBwYWNrX2xpc3QgKiopYik7CisKKwlpZiAocGxfYS0+cmVtYWluaW5nX29iamVjdHMtPnNpemUgPT0gcGxfYi0+cmVtYWluaW5nX29iamVjdHMtPnNpemUpIHsKKwkJLyogaGF2ZSB0aGUgc2FtZSByZW1haW5pbmdfb2JqZWN0cywgYmlnIHBhY2sgZmlyc3QgKi8KKwkJaWYgKHBsX2EtPmFsbF9vYmplY3RzX3NpemUgPT0gcGxfYi0+YWxsX29iamVjdHNfc2l6ZSkKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChwbF9hLT5hbGxfb2JqZWN0c19zaXplIDwgcGxfYi0+YWxsX29iamVjdHNfc2l6ZSkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChwbF9hLT5yZW1haW5pbmdfb2JqZWN0cy0+c2l6ZSA8IHBsX2ItPnJlbWFpbmluZ19vYmplY3RzLT5zaXplKSB7CisJCS8qIHNvcnQgYnkgcmVtYWluaW5nIG9iamVjdHMsIG1vcmUgb2JqZWN0cyBmaXJzdCAqLworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLTE7CisJfQorfQorCisvKiBTb3J0IHBhY2tfbGlzdCwgZ3JlYXRlciBzaXplIG9mIHJlbWFpbmluZ19vYmplY3RzIGZpcnN0ICovCitzdGF0aWMgdm9pZCBzb3J0X3BhY2tfbGlzdChzdHJ1Y3QgcGFja19saXN0ICoqcGwpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqKmFyeSwgKnA7CisJaW50IGk7CisJc2l6ZV90IG4gPSBwYWNrX2xpc3Rfc2l6ZSgqcGwpOworCisJaWYgKG4gPCAyKQorCQlyZXR1cm47CisKKwkvKiBwcmVwYXJlIGFuIGFycmF5IG9mIHBhY2tlZF9saXN0IGZvciBlYXNpZXIgc29ydGluZyAqLworCWFyeSA9IHhjYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBwYWNrX2xpc3QgKikpOworCWZvciAobiA9IDAsIHAgPSAqcGw7IHA7IHAgPSBwLT5uZXh0KQorCQlhcnlbbisrXSA9IHA7CisKKwlRU09SVChhcnksIG4sIGNtcF9yZW1haW5pbmdfb2JqZWN0cyk7CisKKwkvKiBsaW5rIHRoZW0gYmFjayBhZ2FpbiAqLworCWZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQorCQlhcnlbaV0tPm5leHQgPSBhcnlbaSArIDFdOworCWFyeVtuIC0gMV0tPm5leHQgPSBOVUxMOworCSpwbCA9IGFyeVswXTsKKworCWZyZWUoYXJ5KTsKK30KKworCitzdGF0aWMgdm9pZCBtaW5pbWl6ZShzdHJ1Y3QgcGFja19saXN0ICoqbWluKQoreworCXN0cnVjdCBwYWNrX2xpc3QgKnBsLCAqdW5pcXVlID0gTlVMTCwgKm5vbl91bmlxdWUgPSBOVUxMOworCXN0cnVjdCBsbGlzdCAqbWlzc2luZywgKnVuaXF1ZV9wYWNrX29iamVjdHM7CisKKwlwbCA9IGxvY2FsX3BhY2tzOworCXdoaWxlIChwbCkgeworCQlpZiAocGwtPnVuaXF1ZV9vYmplY3RzLT5zaXplKQorCQkJcGFja19saXN0X2luc2VydCgmdW5pcXVlLCBwbCk7CisJCWVsc2UKKwkJCXBhY2tfbGlzdF9pbnNlcnQoJm5vbl91bmlxdWUsIHBsKTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisJLyogZmluZCBvdXQgd2hpY2ggb2JqZWN0cyBhcmUgbWlzc2luZyBmcm9tIHRoZSBzZXQgb2YgdW5pcXVlIHBhY2tzICovCisJbWlzc2luZyA9IGxsaXN0X2NvcHkoYWxsX29iamVjdHMpOworCXBsID0gdW5pcXVlOworCXdoaWxlIChwbCkgeworCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKG1pc3NpbmcsIHBsLT5yZW1haW5pbmdfb2JqZWN0cyk7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCisJKm1pbiA9IHVuaXF1ZTsKKworCS8qIHJldHVybiBpZiB0aGVyZSBhcmUgbm8gb2JqZWN0cyBtaXNzaW5nIGZyb20gdGhlIHVuaXF1ZSBzZXQgKi8KKwlpZiAobWlzc2luZy0+c2l6ZSA9PSAwKSB7CisJCWZyZWUobWlzc2luZyk7CisJCXJldHVybjsKKwl9CisKKwl1bmlxdWVfcGFja19vYmplY3RzID0gbGxpc3RfY29weShhbGxfb2JqZWN0cyk7CisJbGxpc3Rfc29ydGVkX2RpZmZlcmVuY2VfaW5wbGFjZSh1bmlxdWVfcGFja19vYmplY3RzLCBtaXNzaW5nKTsKKworCS8qIHJlbW92ZSB1bmlxdWUgcGFjayBvYmplY3RzIGZyb20gdGhlIG5vbl91bmlxdWUgcGFja3MgKi8KKwlwbCA9IG5vbl91bmlxdWU7CisJd2hpbGUgKHBsKSB7CisJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UocGwtPnJlbWFpbmluZ19vYmplY3RzLCB1bmlxdWVfcGFja19vYmplY3RzKTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisKKwl3aGlsZSAobm9uX3VuaXF1ZSkgeworCQkvKiBzb3J0IHRoZSBub25fdW5pcXVlIHBhY2tzLCBncmVhdGVyIHNpemUgb2YgcmVtYWluaW5nX29iamVjdHMgZmlyc3QgKi8KKwkJc29ydF9wYWNrX2xpc3QoJm5vbl91bmlxdWUpOworCQlpZiAobm9uX3VuaXF1ZS0+cmVtYWluaW5nX29iamVjdHMtPnNpemUgPT0gMCkKKwkJCWJyZWFrOworCisJCXBhY2tfbGlzdF9pbnNlcnQobWluLCBub25fdW5pcXVlKTsKKworCQlmb3IgKHBsID0gbm9uX3VuaXF1ZS0+bmV4dDsgcGwgJiYgcGwtPnJlbWFpbmluZ19vYmplY3RzLT5zaXplID4gMDsgIHBsID0gcGwtPm5leHQpCisJCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKHBsLT5yZW1haW5pbmdfb2JqZWN0cywgbm9uX3VuaXF1ZS0+cmVtYWluaW5nX29iamVjdHMpOworCisJCW5vbl91bmlxdWUgPSBub25fdW5pcXVlLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgbG9hZF9hbGxfb2JqZWN0cyh2b2lkKQoreworCXN0cnVjdCBwYWNrX2xpc3QgKnBsID0gbG9jYWxfcGFja3M7CisJc3RydWN0IGxsaXN0X2l0ZW0gKmhpbnQsICpsOworCisJbGxpc3RfaW5pdCgmYWxsX29iamVjdHMpOworCisJd2hpbGUgKHBsKSB7CisJCWhpbnQgPSBOVUxMOworCQlsID0gcGwtPnJlbWFpbmluZ19vYmplY3RzLT5mcm9udDsKKwkJd2hpbGUgKGwpIHsKKwkJCWhpbnQgPSBsbGlzdF9pbnNlcnRfc29ydGVkX3VuaXF1ZShhbGxfb2JqZWN0cywKKwkJCQkJCQkgIGwtPm9pZCwgaGludCk7CisJCQlsID0gbC0+bmV4dDsKKwkJfQorCQlwbCA9IHBsLT5uZXh0OworCX0KKwkvKiByZW1vdmUgb2JqZWN0cyBwcmVzZW50IGluIHJlbW90ZSBwYWNrcyAqLworCXBsID0gYWx0b2RiX3BhY2tzOworCXdoaWxlIChwbCkgeworCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGFsbF9vYmplY3RzLCBwbC0+cmVtYWluaW5nX29iamVjdHMpOworCQlwbCA9IHBsLT5uZXh0OworCX0KK30KKworLyogdGhpcyBzY2FsZXMgbGlrZSBPKG5eMikgKi8KK3N0YXRpYyB2b2lkIGNtcF9sb2NhbF9wYWNrcyh2b2lkKQoreworCXN0cnVjdCBwYWNrX2xpc3QgKnN1YnNldCwgKnBsID0gbG9jYWxfcGFja3M7CisKKwl3aGlsZSAoKHN1YnNldCA9IHBsKSkgeworCQl3aGlsZSAoKHN1YnNldCA9IHN1YnNldC0+bmV4dCkpCisJCQljbXBfdHdvX3BhY2tzKHBsLCBzdWJzZXQpOworCQlwbCA9IHBsLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgc2Nhbl9hbHRfb2RiX3BhY2tzKHZvaWQpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqbG9jYWwsICphbHQ7CisKKwlhbHQgPSBhbHRvZGJfcGFja3M7CisJd2hpbGUgKGFsdCkgeworCQlsb2NhbCA9IGxvY2FsX3BhY2tzOworCQl3aGlsZSAobG9jYWwpIHsKKwkJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UobG9jYWwtPnJlbWFpbmluZ19vYmplY3RzLAorCQkJCQkJCWFsdC0+cmVtYWluaW5nX29iamVjdHMpOworCQkJbG9jYWwgPSBsb2NhbC0+bmV4dDsKKwkJfQorCQlhbHQgPSBhbHQtPm5leHQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBhY2tfbGlzdCAqIGFkZF9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXN0cnVjdCBwYWNrX2xpc3QgbDsKKwl1bnNpZ25lZCBsb25nIG9mZiA9IDAsIHN0ZXA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZTsKKworCWlmICghcC0+cGFja19sb2NhbCAmJiAhKGFsdF9vZGIgfHwgdmVyYm9zZSkpCisJCXJldHVybiBOVUxMOworCisJbC5wYWNrID0gcDsKKwlsbGlzdF9pbml0KCZsLnJlbWFpbmluZ19vYmplY3RzKTsKKworCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCXJldHVybiBOVUxMOworCisJYmFzZSA9IHAtPmluZGV4X2RhdGE7CisJYmFzZSArPSAyNTYgKiA0ICsgKChwLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogOCk7CisJc3RlcCA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6ICsgKChwLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogMCk7CisJd2hpbGUgKG9mZiA8IHAtPm51bV9vYmplY3RzICogc3RlcCkgeworCQlsbGlzdF9pbnNlcnRfYmFjayhsLnJlbWFpbmluZ19vYmplY3RzLCAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKShiYXNlICsgb2ZmKSk7CisJCW9mZiArPSBzdGVwOworCX0KKwlsLmFsbF9vYmplY3RzX3NpemUgPSBsLnJlbWFpbmluZ19vYmplY3RzLT5zaXplOworCWwudW5pcXVlX29iamVjdHMgPSBOVUxMOworCWlmIChwLT5wYWNrX2xvY2FsKQorCQlyZXR1cm4gcGFja19saXN0X2luc2VydCgmbG9jYWxfcGFja3MsICZsKTsKKwllbHNlCisJCXJldHVybiBwYWNrX2xpc3RfaW5zZXJ0KCZhbHRvZGJfcGFja3MsICZsKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWNrX2xpc3QgKiBhZGRfcGFja19maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7CisKKwlpZiAoc3RybGVuKGZpbGVuYW1lKSA8IDQwKQorCQlkaWUoIkJhZCBwYWNrIGZpbGVuYW1lOiAlcyIsIGZpbGVuYW1lKTsKKworCXdoaWxlIChwKSB7CisJCWlmIChzdHJzdHIocC0+cGFja19uYW1lLCBmaWxlbmFtZSkpCisJCQlyZXR1cm4gYWRkX3BhY2socCk7CisJCXAgPSBwLT5uZXh0OworCX0KKwlkaWUoIkZpbGVuYW1lICVzIG5vdCBmb3VuZCBpbiBwYWNrZWRfZ2l0IiwgZmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2FsbCh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7CisKKwl3aGlsZSAocCkgeworCQlhZGRfcGFjayhwKTsKKwkJcCA9IHAtPm5leHQ7CisJfQorfQorCitpbnQgY21kX3BhY2tfcmVkdW5kYW50KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCBwYWNrX2xpc3QgKm1pbiA9IE5VTEwsICpyZWQsICpwbDsKKwlzdHJ1Y3QgbGxpc3QgKmlnbm9yZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CisJY2hhciBidWZbR0lUX01BWF9IRVhTWiArIDJdOyAvKiBoZXggaGFzaCArIFxuICsgXDAgKi8KKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UocGFja19yZWR1bmRhbnRfdXNhZ2UpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQlsb2FkX2FsbF9wYWNrcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmJvc2UiKSkgeworCQkJdmVyYm9zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWFsdC1vZGIiKSkgeworCQkJYWx0X29kYiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKmFyZyA9PSAnLScpCisJCQl1c2FnZShwYWNrX3JlZHVuZGFudF91c2FnZSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWlmIChsb2FkX2FsbF9wYWNrcykKKwkJbG9hZF9hbGwoKTsKKwllbHNlCisJCXdoaWxlICgqKGFyZ3YgKyBpKSAhPSBOVUxMKQorCQkJYWRkX3BhY2tfZmlsZSgqKGFyZ3YgKyBpKyspKTsKKworCWlmIChsb2NhbF9wYWNrcyA9PSBOVUxMKQorCQlkaWUoIlplcm8gcGFja3MgZm91bmQhIik7CisKKwlsb2FkX2FsbF9vYmplY3RzKCk7CisKKwlpZiAoYWx0X29kYikKKwkJc2Nhbl9hbHRfb2RiX3BhY2tzKCk7CisKKwkvKiBpZ25vcmUgb2JqZWN0cyBnaXZlbiBvbiBzdGRpbiAqLworCWxsaXN0X2luaXQoJmlnbm9yZSk7CisJaWYgKCFpc2F0dHkoMCkpIHsKKwkJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworCQkJb2lkID0geG1hbGxvYyhzaXplb2YoKm9pZCkpOworCQkJaWYgKGdldF9vaWRfaGV4KGJ1Ziwgb2lkKSkKKwkJCQlkaWUoIkJhZCBvYmplY3QgSUQgb24gc3RkaW46ICVzIiwgYnVmKTsKKwkJCWxsaXN0X2luc2VydF9zb3J0ZWRfdW5pcXVlKGlnbm9yZSwgb2lkLCBOVUxMKTsKKwkJfQorCX0KKwlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGFsbF9vYmplY3RzLCBpZ25vcmUpOworCXBsID0gbG9jYWxfcGFja3M7CisJd2hpbGUgKHBsKSB7CisJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UocGwtPnJlbWFpbmluZ19vYmplY3RzLCBpZ25vcmUpOworCQlwbCA9IHBsLT5uZXh0OworCX0KKworCWNtcF9sb2NhbF9wYWNrcygpOworCisJbWluaW1pemUoJm1pbik7CisKKwlpZiAodmVyYm9zZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlRoZXJlIGFyZSAlbHUgcGFja3MgYXZhaWxhYmxlIGluIGFsdC1vZGJzLlxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKXBhY2tfbGlzdF9zaXplKGFsdG9kYl9wYWNrcykpOworCQlmcHJpbnRmKHN0ZGVyciwgIlRoZSBzbWFsbGVzdCAoYnl0ZXdpc2UpIHNldCBvZiBwYWNrcyBpczpcbiIpOworCQlwbCA9IG1pbjsKKwkJd2hpbGUgKHBsKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcbiIsIHBsLT5wYWNrLT5wYWNrX25hbWUpOworCQkJcGwgPSBwbC0+bmV4dDsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgImNvbnRhaW5pbmcgJWx1IGR1cGxpY2F0ZSBvYmplY3RzICIKKwkJCQkid2l0aCBhIHRvdGFsIHNpemUgb2YgJWx1a2IuXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpZ2V0X3BhY2tfcmVkdW5kYW5jeShtaW4pLAorCQkJKHVuc2lnbmVkIGxvbmcpcGFja19zZXRfYnl0ZWNvdW50KG1pbikvMTAyNCk7CisJCWZwcmludGYoc3RkZXJyLCAiQSB0b3RhbCBvZiAlbHUgdW5pcXVlIG9iamVjdHMgd2VyZSBjb25zaWRlcmVkLlxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKWFsbF9vYmplY3RzLT5zaXplKTsKKwkJZnByaW50ZihzdGRlcnIsICJSZWR1bmRhbnQgcGFja3MgKHdpdGggaW5kZXhlcyk6XG4iKTsKKwl9CisJcGwgPSByZWQgPSBwYWNrX2xpc3RfZGlmZmVyZW5jZShsb2NhbF9wYWNrcywgbWluKTsKKwl3aGlsZSAocGwpIHsKKwkJcHJpbnRmKCIlc1xuJXNcbiIsCisJCSAgICAgICBzaGExX3BhY2tfaW5kZXhfbmFtZShwbC0+cGFjay0+aGFzaCksCisJCSAgICAgICBwbC0+cGFjay0+cGFja19uYW1lKTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiJWx1TUIgb2YgcmVkdW5kYW50IHBhY2tzIGluIHRvdGFsLlxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKXBhY2tfc2V0X2J5dGVjb3VudChyZWQpLygxMDI0KjEwMjQpKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wYWNrLXJlZnMuYyBiL2J1aWx0aW4vcGFjay1yZWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiZDVjMwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcGFjay1yZWZzLmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBwYWNrX3JlZnNfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfcGFja19yZWZzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IFBBQ0tfUkVGU19QUlVORTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0JJVCgwLCAiYWxsIiwgICAmZmxhZ3MsIE5fKCJwYWNrIGV2ZXJ5dGhpbmciKSwgUEFDS19SRUZTX0FMTCksCisJCU9QVF9CSVQoMCwgInBydW5lIiwgJmZsYWdzLCBOXygicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiKSwgUEFDS19SRUZTX1BSVU5FKSwKKwkJT1BUX0VORCgpLAorCX07CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWlmIChwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgcGFja19yZWZzX3VzYWdlLCAwKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHBhY2tfcmVmc191c2FnZSwgb3B0cyk7CisJcmV0dXJuIHJlZnNfcGFja19yZWZzKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGF0Y2gtaWQuYyBiL2J1aWx0aW4vcGF0Y2gtaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJmZmZmCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wYXRjaC1pZC5jCkBAIC0wLDAgKzEsMTgwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorCitzdGF0aWMgdm9pZCBmbHVzaF9jdXJyZW50X2lkKGludCBwYXRjaGxlbiwgc3RydWN0IG9iamVjdF9pZCAqaWQsIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCkKK3sKKwlpZiAocGF0Y2hsZW4pCisJCXByaW50ZigiJXMgJXNcbiIsIG9pZF90b19oZXgocmVzdWx0KSwgb2lkX3RvX2hleChpZCkpOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9zcGFjZShjaGFyICpsaW5lKQoreworCWNoYXIgKnNyYyA9IGxpbmU7CisJY2hhciAqZHN0ID0gbGluZTsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwl3aGlsZSAoKGMgPSAqc3JjKyspICE9ICdcMCcpIHsKKwkJaWYgKCFpc3NwYWNlKGMpKQorCQkJKmRzdCsrID0gYzsKKwl9CisJcmV0dXJuIGRzdCAtIGxpbmU7Cit9CisKK3N0YXRpYyBpbnQgc2Nhbl9odW5rX2hlYWRlcihjb25zdCBjaGFyICpwLCBpbnQgKnBfYmVmb3JlLCBpbnQgKnBfYWZ0ZXIpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisJY29uc3QgY2hhciAqcSwgKnI7CisJaW50IG47CisKKwlxID0gcCArIDQ7CisJbiA9IHN0cnNwbihxLCBkaWdpdHMpOworCWlmIChxW25dID09ICcsJykgeworCQlxICs9IG4gKyAxOworCQluID0gc3Ryc3BuKHEsIGRpZ2l0cyk7CisJfQorCWlmIChuID09IDAgfHwgcVtuXSAhPSAnICcgfHwgcVtuKzFdICE9ICcrJykKKwkJcmV0dXJuIDA7CisKKwlyID0gcSArIG4gKyAyOworCW4gPSBzdHJzcG4ociwgZGlnaXRzKTsKKwlpZiAocltuXSA9PSAnLCcpIHsKKwkJciArPSBuICsgMTsKKwkJbiA9IHN0cnNwbihyLCBkaWdpdHMpOworCX0KKwlpZiAobiA9PSAwKQorCQlyZXR1cm4gMDsKKworCSpwX2JlZm9yZSA9IGF0b2kocSk7CisJKnBfYWZ0ZXIgPSBhdG9pKHIpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdldF9vbmVfcGF0Y2hpZChzdHJ1Y3Qgb2JqZWN0X2lkICpuZXh0X29pZCwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqbGluZV9idWYsIGludCBzdGFibGUpCit7CisJaW50IHBhdGNobGVuID0gMCwgZm91bmRfbmV4dCA9IDA7CisJaW50IGJlZm9yZSA9IC0xLCBhZnRlciA9IC0xOworCWdpdF9oYXNoX2N0eCBjdHg7CisKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjdHgpOworCW9pZGNscihyZXN1bHQpOworCisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUobGluZV9idWYsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJY2hhciAqbGluZSA9IGxpbmVfYnVmLT5idWY7CisJCWNvbnN0IGNoYXIgKnAgPSBsaW5lOworCQlpbnQgbGVuOworCisJCWlmICghc2tpcF9wcmVmaXgobGluZSwgImRpZmYtdHJlZSAiLCAmcCkgJiYKKwkJICAgICFza2lwX3ByZWZpeChsaW5lLCAiY29tbWl0ICIsICZwKSAmJgorCQkgICAgIXNraXBfcHJlZml4KGxpbmUsICJGcm9tICIsICZwKSAmJgorCQkgICAgc3RhcnRzX3dpdGgobGluZSwgIlxcICIpICYmIDEyIDwgc3RybGVuKGxpbmUpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFnZXRfb2lkX2hleChwLCBuZXh0X29pZCkpIHsKKwkJCWZvdW5kX25leHQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBJZ25vcmUgY29tbWl0IGNvbW1lbnRzICovCisJCWlmICghcGF0Y2hsZW4gJiYgIXN0YXJ0c193aXRoKGxpbmUsICJkaWZmICIpKQorCQkJY29udGludWU7CisKKwkJLyogUGFyc2luZyBkaWZmIGhlYWRlcj8gICovCisJCWlmIChiZWZvcmUgPT0gLTEpIHsKKwkJCWlmIChzdGFydHNfd2l0aChsaW5lLCAiaW5kZXggIikpCisJCQkJY29udGludWU7CisJCQllbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLCAiLS0tICIpKQorCQkJCWJlZm9yZSA9IGFmdGVyID0gMTsKKwkJCWVsc2UgaWYgKCFpc2FscGhhKGxpbmVbMF0pKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogTG9va2luZyBmb3IgYSB2YWxpZCBodW5rIGhlYWRlcj8gICovCisJCWlmIChiZWZvcmUgPT0gMCAmJiBhZnRlciA9PSAwKSB7CisJCQlpZiAoc3RhcnRzX3dpdGgobGluZSwgIkBAIC0iKSkgeworCQkJCS8qIFBhcnNlIG5leHQgaHVuaywgYnV0IGlnbm9yZSBsaW5lIG51bWJlcnMuICAqLworCQkJCXNjYW5faHVua19oZWFkZXIobGluZSwgJmJlZm9yZSwgJmFmdGVyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogU3BsaXQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0Y2guICAqLworCQkJaWYgKCFzdGFydHNfd2l0aChsaW5lLCAiZGlmZiAiKSkKKwkJCQlicmVhazsKKworCQkJLyogRWxzZSB3ZSdyZSBwYXJzaW5nIGFub3RoZXIgaGVhZGVyLiAgKi8KKwkJCWlmIChzdGFibGUpCisJCQkJZmx1c2hfb25lX2h1bmsocmVzdWx0LCAmY3R4KTsKKwkJCWJlZm9yZSA9IGFmdGVyID0gLTE7CisJCX0KKworCQkvKiBJZiB3ZSBnZXQgaGVyZSwgd2UncmUgaW5zaWRlIGEgaHVuay4gICovCisJCWlmIChsaW5lWzBdID09ICctJyB8fCBsaW5lWzBdID09ICcgJykKKwkJCWJlZm9yZS0tOworCQlpZiAobGluZVswXSA9PSAnKycgfHwgbGluZVswXSA9PSAnICcpCisJCQlhZnRlci0tOworCisJCS8qIENvbXB1dGUgdGhlIHNoYSB3aXRob3V0IHdoaXRlc3BhY2UgKi8KKwkJbGVuID0gcmVtb3ZlX3NwYWNlKGxpbmUpOworCQlwYXRjaGxlbiArPSBsZW47CisJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBsaW5lLCBsZW4pOworCX0KKworCWlmICghZm91bmRfbmV4dCkKKwkJb2lkY2xyKG5leHRfb2lkKTsKKworCWZsdXNoX29uZV9odW5rKHJlc3VsdCwgJmN0eCk7CisKKwlyZXR1cm4gcGF0Y2hsZW47Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlX2lkX2xpc3QoaW50IHN0YWJsZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZCwgbiwgcmVzdWx0OworCWludCBwYXRjaGxlbjsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmVfYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlvaWRjbHIoJm9pZCk7CisJd2hpbGUgKCFmZW9mKHN0ZGluKSkgeworCQlwYXRjaGxlbiA9IGdldF9vbmVfcGF0Y2hpZCgmbiwgJnJlc3VsdCwgJmxpbmVfYnVmLCBzdGFibGUpOworCQlmbHVzaF9jdXJyZW50X2lkKHBhdGNobGVuLCAmb2lkLCAmcmVzdWx0KTsKKwkJb2lkY3B5KCZvaWQsICZuKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmxpbmVfYnVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgcGF0Y2hfaWRfdXNhZ2VbXSA9ICJnaXQgcGF0Y2gtaWQgWy0tc3RhYmxlIHwgLS11bnN0YWJsZV0iOworCitzdGF0aWMgaW50IGdpdF9wYXRjaF9pZF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaW50ICpzdGFibGUgPSBjYjsKKworCWlmICghc3RyY21wKHZhciwgInBhdGNoaWQuc3RhYmxlIikpIHsKKwkJKnN0YWJsZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK2ludCBjbWRfcGF0Y2hfaWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHN0YWJsZSA9IC0xOworCisJZ2l0X2NvbmZpZyhnaXRfcGF0Y2hfaWRfY29uZmlnLCAmc3RhYmxlKTsKKworCS8qIElmIG5vdGhpbmcgaXMgc2V0LCBkZWZhdWx0IHRvIHVuc3RhYmxlLiAqLworCWlmIChzdGFibGUgPCAwKQorCQlzdGFibGUgPSAwOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLXN0YWJsZSIpKQorCQlzdGFibGUgPSAxOworCWVsc2UgaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLXVuc3RhYmxlIikpCisJCXN0YWJsZSA9IDA7CisJZWxzZSBpZiAoYXJnYyAhPSAxKQorCQl1c2FnZShwYXRjaF9pZF91c2FnZSk7CisKKwlnZW5lcmF0ZV9pZF9saXN0KHN0YWJsZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3BydW5lLXBhY2tlZC5jIGIvYnVpbHRpbi9wcnVuZS1wYWNrZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGM1ZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wcnVuZS1wYWNrZWQuYwpAQCAtMCwwICsxLDczIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcnVuZV9wYWNrZWRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIiksCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisKK3N0YXRpYyBpbnQgcHJ1bmVfc3ViZGlyKHVuc2lnbmVkIGludCBuciwgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKm9wdHMgPSBkYXRhOworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIG5yICsgMSk7CisJaWYgKCEoKm9wdHMgJiBQUlVORV9QQUNLRURfRFJZX1JVTikpCisJCXJtZGlyKHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBydW5lX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKm9wdHMgPSBkYXRhOworCisJaWYgKCFoYXNfb2JqZWN0X3BhY2sob2lkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKm9wdHMgJiBQUlVORV9QQUNLRURfRFJZX1JVTikKKwkJcHJpbnRmKCJybSAtZiAlc1xuIiwgcGF0aCk7CisJZWxzZQorCQl1bmxpbmtfb3Jfd2FybihwYXRoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwcnVuZV9wYWNrZWRfb2JqZWN0cyhpbnQgb3B0cykKK3sKKwlpZiAob3B0cyAmIFBSVU5FX1BBQ0tFRF9WRVJCT1NFKQorCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiKSwgMjU2KTsKKworCWZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGdldF9vYmplY3RfZGlyZWN0b3J5KCksCisJCQkJICAgICAgcHJ1bmVfb2JqZWN0LCBOVUxMLCBwcnVuZV9zdWJkaXIsICZvcHRzKTsKKworCS8qIEVuc3VyZSB3ZSBzaG93IDEwMCUgYmVmb3JlIGZpbmlzaGluZyBwcm9ncmVzcyAqLworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIDI1Nik7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworfQorCitpbnQgY21kX3BydW5lX3BhY2tlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgb3B0cyA9IGlzYXR0eSgyKSA/IFBSVU5FX1BBQ0tFRF9WRVJCT1NFIDogMDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHBydW5lX3BhY2tlZF9vcHRpb25zW10gPSB7CisJCU9QVF9CSVQoJ24nLCAiZHJ5LXJ1biIsICZvcHRzLCBOXygiZHJ5IHJ1biIpLAorCQkJUFJVTkVfUEFDS0VEX0RSWV9SVU4pLAorCQlPUFRfTkVHQklUKCdxJywgInF1aWV0IiwgJm9wdHMsIE5fKCJiZSBxdWlldCIpLAorCQkJICAgUFJVTkVfUEFDS0VEX1ZFUkJPU0UpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBwcnVuZV9wYWNrZWRfb3B0aW9ucywKKwkJCSAgICAgcHJ1bmVfcGFja2VkX3VzYWdlLCAwKTsKKworCWlmIChhcmdjID4gMCkKKwkJdXNhZ2VfbXNnX29wdChfKCJ0b28gbWFueSBhcmd1bWVudHMiKSwKKwkJCSAgICAgIHBydW5lX3BhY2tlZF91c2FnZSwKKwkJCSAgICAgIHBydW5lX3BhY2tlZF9vcHRpb25zKTsKKworCXBydW5lX3BhY2tlZF9vYmplY3RzKG9wdHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wcnVuZS5jIGIvYnVpbHRpbi9wcnVuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzY4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3BydW5lLmMKQEAgLTAsMCArMSwxODcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZWFjaGFibGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcnVuZV91c2FnZVtdID0geworCU5fKCJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIiksCisJTlVMTAorfTsKK3N0YXRpYyBpbnQgc2hvd19vbmx5Oworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIHRpbWVzdGFtcF90IGV4cGlyZTsKK3N0YXRpYyBpbnQgc2hvd19wcm9ncmVzcyA9IC0xOworCitzdGF0aWMgaW50IHBydW5lX3RtcF9maWxlKGNvbnN0IGNoYXIgKmZ1bGxwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWlmIChsc3RhdChmdWxscGF0aCwgJnN0KSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgc3RhdCAnJXMnIiwgZnVsbHBhdGgpOworCWlmIChzdC5zdF9tdGltZSA+IGV4cGlyZSkKKwkJcmV0dXJuIDA7CisJaWYgKHNob3dfb25seSB8fCB2ZXJib3NlKQorCQlwcmludGYoIlJlbW92aW5nIHN0YWxlIHRlbXBvcmFyeSBmaWxlICVzXG4iLCBmdWxscGF0aCk7CisJaWYgKCFzaG93X29ubHkpCisJCXVubGlua19vcl93YXJuKGZ1bGxwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVyZm9ybV9yZWFjaGFiaWxpdHlfdHJhdmVyc2FsKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCisJaWYgKGluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwlpZiAoc2hvd19wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKF8oIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIpLCAwKTsKKwltYXJrX3JlYWNoYWJsZV9vYmplY3RzKHJldnMsIDEsIGV4cGlyZSwgcHJvZ3Jlc3MpOworCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwlpbml0aWFsaXplZCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgaXNfb2JqZWN0X3JlYWNoYWJsZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCXBlcmZvcm1fcmVhY2hhYmlsaXR5X3RyYXZlcnNhbChyZXZzKTsKKworCW9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJcmV0dXJuIG9iaiAmJiAob2JqLT5mbGFncyAmIFNFRU4pOworfQorCitzdGF0aWMgaW50IHBydW5lX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLAorCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBkYXRhOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGlzX29iamVjdF9yZWFjaGFibGUob2lkLCByZXZzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobHN0YXQoZnVsbHBhdGgsICZzdCkpIHsKKwkJLyogcmVwb3J0IGVycm9ycywgYnV0IGRvIG5vdCBzdG9wIHBydW5pbmcgKi8KKwkJZXJyb3IoIkNvdWxkIG5vdCBzdGF0ICclcyciLCBmdWxscGF0aCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc3Quc3RfbXRpbWUgPiBleHBpcmUpCisJCXJldHVybiAwOworCWlmIChzaG93X29ubHkgfHwgdmVyYm9zZSkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9pZCwKKwkJCQkJCQlOVUxMKTsKKwkJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleChvaWQpLAorCQkgICAgICAgKHR5cGUgPiAwKSA/IHR5cGVfbmFtZSh0eXBlKSA6ICJ1bmtub3duIik7CisJfQorCWlmICghc2hvd19vbmx5KQorCQl1bmxpbmtfb3Jfd2FybihmdWxscGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfY3J1ZnQoY29uc3QgY2hhciAqYmFzZW5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmRhdGEpCit7CisJaWYgKHN0YXJ0c193aXRoKGJhc2VuYW1lLCAidG1wX29ial8iKSkKKwkJcHJ1bmVfdG1wX2ZpbGUocGF0aCk7CisJZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgImJhZCBzaGExIGZpbGU6ICVzXG4iLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcnVuZV9zdWJkaXIodW5zaWduZWQgaW50IG5yLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCWlmICghc2hvd19vbmx5KQorCQlybWRpcihwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyaXRlIGVycm9ycyAocGFydGljdWxhcmx5IG91dCBvZiBzcGFjZSkgY2FuIHJlc3VsdCBpbgorICogZmFpbGVkIHRlbXBvcmFyeSBwYWNrcyAoYW5kIG1vcmUgcmFyZWx5IGluZGV4ZXMgYW5kIG90aGVyCisgKiBmaWxlcyBiZWdpbm5pbmcgd2l0aCAidG1wXyIpIGFjY3VtdWxhdGluZyBpbiB0aGUgb2JqZWN0CisgKiBhbmQgdGhlIHBhY2sgZGlyZWN0b3JpZXMuCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKworCWRpciA9IG9wZW5kaXIocGF0aCk7CisJaWYgKCFkaXIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gb3BlbiBkaXJlY3RvcnkgJXNcbiIsIHBhdGgpOworCQlyZXR1cm47CisJfQorCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpCisJCWlmIChzdGFydHNfd2l0aChkZS0+ZF9uYW1lLCAidG1wXyIpKQorCQkJcHJ1bmVfdG1wX2ZpbGUobWtwYXRoKCIlcy8lcyIsIHBhdGgsIGRlLT5kX25hbWUpKTsKKwljbG9zZWRpcihkaXIpOworfQorCitpbnQgY21kX3BydW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWludCBleGNsdWRlX3Byb21pc29yX29iamVjdHMgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0RSWV9SVU4oJnNob3dfb25seSwgTl8oImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIpKSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygicmVwb3J0IHBydW5lZCBvYmplY3RzIikpLAorCQlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmc2hvd19wcm9ncmVzcywgTl8oInNob3cgcHJvZ3Jlc3MiKSksCisJCU9QVF9FWFBJUllfREFURSgwLCAiZXhwaXJlIiwgJmV4cGlyZSwKKwkJCQlOXygiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iKSksCisJCU9QVF9CT09MKDAsICJleGNsdWRlLXByb21pc29yLW9iamVjdHMiLCAmZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzLAorCQkJIE5fKCJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwljaGFyICpzOworCisJZXhwaXJlID0gVElNRV9NQVg7CisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisJcmVmX3BhcmFub2lhID0gMTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgcHJlZml4KTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgcHJ1bmVfdXNhZ2UsIDApOworCisJaWYgKHJlcG9zaXRvcnlfZm9ybWF0X3ByZWNpb3VzX29iamVjdHMpCisJCWRpZShfKCJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iKSk7CisKKwl3aGlsZSAoYXJnYy0tKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljb25zdCBjaGFyICpuYW1lID0gKmFyZ3YrKzsKKworCQlpZiAoIWdldF9vaWQobmFtZSwgJm9pZCkpIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHBhcnNlX29iamVjdF9vcl9kaWUoJm9pZCwKKwkJCQkJCQkJICAgIG5hbWUpOworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCBvYmplY3QsICIiKTsKKwkJfQorCQllbHNlCisJCQlkaWUoInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiLCBuYW1lKTsKKwl9CisKKwlpZiAoc2hvd19wcm9ncmVzcyA9PSAtMSkKKwkJc2hvd19wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwlpZiAoZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzKSB7CisJCWZldGNoX2lmX21pc3NpbmcgPSAwOworCQlyZXZzLmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cyA9IDE7CisJfQorCisJZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgcHJ1bmVfb2JqZWN0LAorCQkJCSAgICAgIHBydW5lX2NydWZ0LCBwcnVuZV9zdWJkaXIsICZyZXZzKTsKKworCXBydW5lX3BhY2tlZF9vYmplY3RzKHNob3dfb25seSA/IFBSVU5FX1BBQ0tFRF9EUllfUlVOIDogMCk7CisJcmVtb3ZlX3RlbXBvcmFyeV9maWxlcyhnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlzID0gbWtwYXRoZHVwKCIlcy9wYWNrIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJcmVtb3ZlX3RlbXBvcmFyeV9maWxlcyhzKTsKKwlmcmVlKHMpOworCisJaWYgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpIHsKKwkJcGVyZm9ybV9yZWFjaGFiaWxpdHlfdHJhdmVyc2FsKCZyZXZzKTsKKwkJcHJ1bmVfc2hhbGxvdyhzaG93X29ubHkgPyBQUlVORV9TSE9XX09OTFkgOiAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHVsbC5jIGIvYnVpbHRpbi9wdWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2MjRkMQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcHVsbC5jCkBAIC0wLDAgKzEsMTAxMiBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBwdWxsIgorICoKKyAqIEJhc2VkIG9uIGdpdC1wdWxsLnNoIGJ5IEp1bmlvIEMgSGFtYW5vCisgKgorICogRmV0Y2ggb25lIG9yIG1vcmUgcmVtb3RlIHJlZnMgYW5kIG1lcmdlIGl0L3RoZW0gaW50byB0aGUgY3VycmVudCBIRUFELgorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZWJhc2UuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInRlbXBmaWxlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKworLyoqCisgKiBQYXJzZXMgdGhlIHZhbHVlIG9mIC0tcmViYXNlLiBJZiB2YWx1ZSBpcyBhIGZhbHNlIHZhbHVlLCByZXR1cm5zCisgKiBSRUJBU0VfRkFMU0UuIElmIHZhbHVlIGlzIGEgdHJ1ZSB2YWx1ZSwgcmV0dXJucyBSRUJBU0VfVFJVRS4gSWYgdmFsdWUgaXMKKyAqICJtZXJnZXMiLCByZXR1cm5zIFJFQkFTRV9NRVJHRVMuIElmIHZhbHVlIGlzICJwcmVzZXJ2ZSIsIHJldHVybnMKKyAqIFJFQkFTRV9QUkVTRVJWRS4gSWYgdmFsdWUgaXMgYSBpbnZhbGlkIHZhbHVlLCBkaWVzIHdpdGggYSBmYXRhbCBlcnJvciBpZgorICogZmF0YWwgaXMgdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybnMgUkVCQVNFX0lOVkFMSUQuCisgKi8KK3N0YXRpYyBlbnVtIHJlYmFzZV90eXBlIHBhcnNlX2NvbmZpZ19yZWJhc2UoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJaW50IGZhdGFsKQoreworCWVudW0gcmViYXNlX3R5cGUgdiA9IHJlYmFzZV9wYXJzZV92YWx1ZSh2YWx1ZSk7CisJaWYgKHYgIT0gUkVCQVNFX0lOVkFMSUQpCisJCXJldHVybiB2OworCisJaWYgKGZhdGFsKQorCQlkaWUoXygiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIiksIGtleSwgdmFsdWUpOworCWVsc2UKKwkJZXJyb3IoXygiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIiksIGtleSwgdmFsdWUpOworCisJcmV0dXJuIFJFQkFTRV9JTlZBTElEOworfQorCisvKioKKyAqIENhbGxiYWNrIGZvciAtLXJlYmFzZSwgd2hpY2ggcGFyc2VzIGFyZyB3aXRoIHBhcnNlX2NvbmZpZ19yZWJhc2UoKS4KKyAqLworc3RhdGljIGludCBwYXJzZV9vcHRfcmViYXNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJZW51bSByZWJhc2VfdHlwZSAqdmFsdWUgPSBvcHQtPnZhbHVlOworCisJaWYgKGFyZykKKwkJKnZhbHVlID0gcGFyc2VfY29uZmlnX3JlYmFzZSgiLS1yZWJhc2UiLCBhcmcsIDApOworCWVsc2UKKwkJKnZhbHVlID0gdW5zZXQgPyBSRUJBU0VfRkFMU0UgOiBSRUJBU0VfVFJVRTsKKwlyZXR1cm4gKnZhbHVlID09IFJFQkFTRV9JTlZBTElEID8gLTEgOiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHB1bGxfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iKSwKKwlOVUxMCit9OworCisvKiBTaGFyZWQgb3B0aW9ucyAqLworc3RhdGljIGludCBvcHRfdmVyYm9zaXR5Oworc3RhdGljIGNoYXIgKm9wdF9wcm9ncmVzczsKK3N0YXRpYyBpbnQgcmVjdXJzZV9zdWJtb2R1bGVzID0gUkVDVVJTRV9TVUJNT0RVTEVTX0RFRkFVTFQ7CisKKy8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1tZXJnZSBvciBnaXQtcmViYXNlICovCitzdGF0aWMgZW51bSByZWJhc2VfdHlwZSBvcHRfcmViYXNlID0gLTE7CitzdGF0aWMgY2hhciAqb3B0X2RpZmZzdGF0Oworc3RhdGljIGNoYXIgKm9wdF9sb2c7CitzdGF0aWMgY2hhciAqb3B0X3NpZ25vZmY7CitzdGF0aWMgY2hhciAqb3B0X3NxdWFzaDsKK3N0YXRpYyBjaGFyICpvcHRfY29tbWl0Oworc3RhdGljIGNoYXIgKm9wdF9lZGl0Oworc3RhdGljIGNoYXIgKmNsZWFudXBfYXJnOworc3RhdGljIGNoYXIgKm9wdF9mZjsKK3N0YXRpYyBjaGFyICpvcHRfdmVyaWZ5X3NpZ25hdHVyZXM7CitzdGF0aWMgaW50IG9wdF9hdXRvc3Rhc2ggPSAtMTsKK3N0YXRpYyBpbnQgY29uZmlnX2F1dG9zdGFzaDsKK3N0YXRpYyBpbnQgY2hlY2tfdHJ1c3RfbGV2ZWwgPSAxOworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IG9wdF9zdHJhdGVnaWVzID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IG9wdF9zdHJhdGVneV9vcHRzID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIGNoYXIgKm9wdF9ncGdfc2lnbjsKK3N0YXRpYyBpbnQgb3B0X2FsbG93X3VucmVsYXRlZF9oaXN0b3JpZXM7CisKKy8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1mZXRjaCAqLworc3RhdGljIGNoYXIgKm9wdF9hbGw7CitzdGF0aWMgY2hhciAqb3B0X2FwcGVuZDsKK3N0YXRpYyBjaGFyICpvcHRfdXBsb2FkX3BhY2s7CitzdGF0aWMgaW50IG9wdF9mb3JjZTsKK3N0YXRpYyBjaGFyICpvcHRfdGFnczsKK3N0YXRpYyBjaGFyICpvcHRfcHJ1bmU7CitzdGF0aWMgY2hhciAqbWF4X2NoaWxkcmVuOworc3RhdGljIGludCBvcHRfZHJ5X3J1bjsKK3N0YXRpYyBjaGFyICpvcHRfa2VlcDsKK3N0YXRpYyBjaGFyICpvcHRfZGVwdGg7CitzdGF0aWMgY2hhciAqb3B0X3Vuc2hhbGxvdzsKK3N0YXRpYyBjaGFyICpvcHRfdXBkYXRlX3NoYWxsb3c7CitzdGF0aWMgY2hhciAqb3B0X3JlZm1hcDsKK3N0YXRpYyBjaGFyICpvcHRfaXB2NDsKK3N0YXRpYyBjaGFyICpvcHRfaXB2NjsKK3N0YXRpYyBpbnQgb3B0X3Nob3dfZm9yY2VkX3VwZGF0ZXMgPSAtMTsKK3N0YXRpYyBjaGFyICpzZXRfdXBzdHJlYW07CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHB1bGxfb3B0aW9uc1tdID0geworCS8qIFNoYXJlZCBvcHRpb25zICovCisJT1BUX19WRVJCT1NJVFkoJm9wdF92ZXJib3NpdHkpLAorCU9QVF9QQVNTVEhSVSgwLCAicHJvZ3Jlc3MiLCAmb3B0X3Byb2dyZXNzLCBOVUxMLAorCQlOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZWN1cnNlLXN1Ym1vZHVsZXMiLAorCQkgICAmcmVjdXJzZV9zdWJtb2R1bGVzLCBOXygib24tZGVtYW5kIiksCisJCSAgIE5fKCJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIpLAorCQkgICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fZmV0Y2hfcGFyc2VfcmVjdXJzZV9zdWJtb2R1bGVzIH0sCisKKwkvKiBPcHRpb25zIHBhc3NlZCB0byBnaXQtbWVyZ2Ugb3IgZ2l0LXJlYmFzZSAqLworCU9QVF9HUk9VUChOXygiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciKSksCisJeyBPUFRJT05fQ0FMTEJBQ0ssICdyJywgInJlYmFzZSIsICZvcHRfcmViYXNlLAorCSAgIihmYWxzZXx0cnVlfG1lcmdlc3xwcmVzZXJ2ZXxpbnRlcmFjdGl2ZSkiLAorCSAgTl8oImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIpLAorCSAgUEFSU0VfT1BUX09QVEFSRywgcGFyc2Vfb3B0X3JlYmFzZSB9LAorCU9QVF9QQVNTVEhSVSgnbicsIE5VTEwsICZvcHRfZGlmZnN0YXQsIE5VTEwsCisJCU5fKCJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIiksCisJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyksCisJT1BUX1BBU1NUSFJVKDAsICJzdGF0IiwgJm9wdF9kaWZmc3RhdCwgTlVMTCwKKwkJTl8oInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAic3VtbWFyeSIsICZvcHRfZGlmZnN0YXQsIE5VTEwsCisJCU5fKCIoc3lub255bSB0byAtLXN0YXQpIiksCisJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4pLAorCU9QVF9QQVNTVEhSVSgwLCAibG9nIiwgJm9wdF9sb2csIE5fKCJuIiksCisJCU5fKCJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiKSwKKwkJUEFSU0VfT1BUX09QVEFSRyksCisJT1BUX1BBU1NUSFJVKDAsICJzaWdub2ZmIiwgJm9wdF9zaWdub2ZmLCBOVUxMLAorCQlOXygiYWRkIFNpZ25lZC1vZmYtYnk6IiksCisJCVBBUlNFX09QVF9PUFRBUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAic3F1YXNoIiwgJm9wdF9zcXVhc2gsIE5VTEwsCisJCU5fKCJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAiY29tbWl0IiwgJm9wdF9jb21taXQsIE5VTEwsCisJCU5fKCJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoMCwgImVkaXQiLCAmb3B0X2VkaXQsIE5VTEwsCisJCU5fKCJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfQ0xFQU5VUCgmY2xlYW51cF9hcmcpLAorCU9QVF9QQVNTVEhSVSgwLCAiZmYiLCAmb3B0X2ZmLCBOVUxMLAorCQlOXygiYWxsb3cgZmFzdC1mb3J3YXJkIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKDAsICJmZi1vbmx5IiwgJm9wdF9mZiwgTlVMTCwKKwkJTl8oImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiKSwKKwkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHKSwKKwlPUFRfUEFTU1RIUlUoMCwgInZlcmlmeS1zaWduYXR1cmVzIiwgJm9wdF92ZXJpZnlfc2lnbmF0dXJlcywgTlVMTCwKKwkJTl8oInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9CT09MKDAsICJhdXRvc3Rhc2giLCAmb3B0X2F1dG9zdGFzaCwKKwkJTl8oImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIgcmViYXNlIikpLAorCU9QVF9QQVNTVEhSVV9BUkdWKCdzJywgInN0cmF0ZWd5IiwgJm9wdF9zdHJhdGVnaWVzLCBOXygic3RyYXRlZ3kiKSwKKwkJTl8oIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIpLAorCQkwKSwKKwlPUFRfUEFTU1RIUlVfQVJHVignWCcsICJzdHJhdGVneS1vcHRpb24iLCAmb3B0X3N0cmF0ZWd5X29wdHMsCisJCU5fKCJvcHRpb249dmFsdWUiKSwKKwkJTl8oIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiKSwKKwkJMCksCisJT1BUX1BBU1NUSFJVKCdTJywgImdwZy1zaWduIiwgJm9wdF9ncGdfc2lnbiwgTl8oImtleS1pZCIpLAorCQlOXygiR1BHIHNpZ24gY29tbWl0IiksCisJCVBBUlNFX09QVF9PUFRBUkcpLAorCU9QVF9TRVRfSU5UKDAsICJhbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIiwKKwkJICAgICZvcHRfYWxsb3dfdW5yZWxhdGVkX2hpc3RvcmllcywKKwkJICAgIE5fKCJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiKSwgMSksCisKKwkvKiBPcHRpb25zIHBhc3NlZCB0byBnaXQtZmV0Y2ggKi8KKwlPUFRfR1JPVVAoTl8oIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIpKSwKKwlPUFRfUEFTU1RIUlUoMCwgImFsbCIsICZvcHRfYWxsLCBOVUxMLAorCQlOXygiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgnYScsICJhcHBlbmQiLCAmb3B0X2FwcGVuZCwgTlVMTCwKKwkJTl8oImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAidXBsb2FkLXBhY2siLCAmb3B0X3VwbG9hZF9wYWNrLCBOXygicGF0aCIpLAorCQlOXygicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIiksCisJCTApLAorCU9QVF9fRk9SQ0UoJm9wdF9mb3JjZSwgTl8oImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giKSwgMCksCisJT1BUX1BBU1NUSFJVKCd0JywgInRhZ3MiLCAmb3B0X3RhZ3MsIE5VTEwsCisJCU5fKCJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKCdwJywgInBydW5lIiwgJm9wdF9wcnVuZSwgTlVMTCwKKwkJTl8oInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKCdqJywgImpvYnMiLCAmbWF4X2NoaWxkcmVuLCBOXygibiIpLAorCQlOXygibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIiksCisJCVBBUlNFX09QVF9PUFRBUkcpLAorCU9QVF9CT09MKDAsICJkcnktcnVuIiwgJm9wdF9kcnlfcnVuLAorCQlOXygiZHJ5IHJ1biIpKSwKKwlPUFRfUEFTU1RIUlUoJ2snLCAia2VlcCIsICZvcHRfa2VlcCwgTlVMTCwKKwkJTl8oImtlZXAgZG93bmxvYWRlZCBwYWNrIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKDAsICJkZXB0aCIsICZvcHRfZGVwdGgsIE5fKCJkZXB0aCIpLAorCQlOXygiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIpLAorCQkwKSwKKwlPUFRfUEFTU1RIUlUoMCwgInVuc2hhbGxvdyIsICZvcHRfdW5zaGFsbG93LCBOVUxMLAorCQlOXygiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiKSwKKwkJUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoMCwgInVwZGF0ZS1zaGFsbG93IiwgJm9wdF91cGRhdGVfc2hhbGxvdywgTlVMTCwKKwkJTl8oImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAicmVmbWFwIiwgJm9wdF9yZWZtYXAsIE5fKCJyZWZtYXAiKSwKKwkJTl8oInNwZWNpZnkgZmV0Y2ggcmVmbWFwIiksCisJCVBBUlNFX09QVF9OT05FRyksCisJT1BUX1BBU1NUSFJVKCc0JywgICJpcHY0IiwgJm9wdF9pcHY0LCBOVUxMLAorCQlOXygidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoJzYnLCAgImlwdjYiLCAmb3B0X2lwdjYsIE5VTEwsCisJCU5fKCJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9CT09MKDAsICJzaG93LWZvcmNlZC11cGRhdGVzIiwgJm9wdF9zaG93X2ZvcmNlZF91cGRhdGVzLAorCQkgTl8oImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIpKSwKKwlPUFRfUEFTU1RIUlUoMCwgInNldC11cHN0cmVhbSIsICZzZXRfdXBzdHJlYW0sIE5VTEwsCisJCU5fKCJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisKKwlPUFRfRU5EKCkKK307CisKKy8qKgorICogUHVzaGVzICItcSIgb3IgIi12IiBzd2l0Y2hlcyBpbnRvIGFyciB0byBtYXRjaCB0aGUgb3B0X3ZlcmJvc2l0eSBsZXZlbC4KKyAqLworc3RhdGljIHZvaWQgYXJndl9wdXNoX3ZlcmJvc2l0eShzdHJ1Y3QgYXJndl9hcnJheSAqYXJyKQoreworCWludCB2ZXJib3NpdHk7CisKKwlmb3IgKHZlcmJvc2l0eSA9IG9wdF92ZXJib3NpdHk7IHZlcmJvc2l0eSA+IDA7IHZlcmJvc2l0eS0tKQorCQlhcmd2X2FycmF5X3B1c2goYXJyLCAiLXYiKTsKKworCWZvciAodmVyYm9zaXR5ID0gb3B0X3ZlcmJvc2l0eTsgdmVyYm9zaXR5IDwgMDsgdmVyYm9zaXR5KyspCisJCWFyZ3ZfYXJyYXlfcHVzaChhcnIsICItcSIpOworfQorCisvKioKKyAqIFB1c2hlcyAiLWYiIHN3aXRjaGVzIGludG8gYXJyIHRvIG1hdGNoIHRoZSBvcHRfZm9yY2UgbGV2ZWwuCisgKi8KK3N0YXRpYyB2b2lkIGFyZ3ZfcHVzaF9mb3JjZShzdHJ1Y3QgYXJndl9hcnJheSAqYXJyKQoreworCWludCBmb3JjZSA9IG9wdF9mb3JjZTsKKwl3aGlsZSAoZm9yY2UtLSA+IDApCisJCWFyZ3ZfYXJyYXlfcHVzaChhcnIsICItZiIpOworfQorCisvKioKKyAqIFNldHMgdGhlIEdJVF9SRUZMT0dfQUNUSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFyZ3YKKyAqLworc3RhdGljIHZvaWQgc2V0X3JlZmxvZ19tZXNzYWdlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoaSkKKwkJCXN0cmJ1Zl9hZGRjaCgmbXNnLCAnICcpOworCQlzdHJidWZfYWRkc3RyKCZtc2csIGFyZ3ZbaV0pOworCX0KKworCXNldGVudigiR0lUX1JFRkxPR19BQ1RJT04iLCBtc2cuYnVmLCAwKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworfQorCisvKioKKyAqIElmIHB1bGwuZmYgaXMgdW5zZXQsIHJldHVybnMgTlVMTC4gSWYgcHVsbC5mZiBpcyAidHJ1ZSIsIHJldHVybnMgIi0tZmYiLiBJZgorICogcHVsbC5mZiBpcyAiZmFsc2UiLCByZXR1cm5zICItLW5vLWZmIi4gSWYgcHVsbC5mZiBpcyAib25seSIsIHJldHVybnMKKyAqICItLWZmLW9ubHkiLiBPdGhlcndpc2UsIGlmIHB1bGwuZmYgaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUsIGRpZSB3aXRoIGFuCisgKiBlcnJvci4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZpZ19nZXRfZmYodm9pZCkKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWlmIChnaXRfY29uZmlnX2dldF92YWx1ZSgicHVsbC5mZiIsICZ2YWx1ZSkpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSkpIHsKKwljYXNlIDA6CisJCXJldHVybiAiLS1uby1mZiI7CisJY2FzZSAxOgorCQlyZXR1cm4gIi0tZmYiOworCX0KKworCWlmICghc3RyY21wKHZhbHVlLCAib25seSIpKQorCQlyZXR1cm4gIi0tZmYtb25seSI7CisKKwlkaWUoXygiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiKSwgdmFsdWUpOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGRlZmF1bHQgY29uZmlndXJlZCB2YWx1ZSBmb3IgLS1yZWJhc2UuIEl0IGZpcnN0IGxvb2tzIGZvciB0aGUKKyAqIHZhbHVlIG9mICJicmFuY2guJGN1cnJfYnJhbmNoLnJlYmFzZSIsIHdoZXJlICRjdXJyX2JyYW5jaCBpcyB0aGUgY3VycmVudAorICogYnJhbmNoLCBhbmQgaWYgSEVBRCBpcyBkZXRhY2hlZCBvciB0aGUgY29uZmlndXJhdGlvbiBrZXkgZG9lcyBub3QgZXhpc3QsCisgKiBsb29rcyBmb3IgdGhlIHZhbHVlIG9mICJwdWxsLnJlYmFzZSIuIElmIGJvdGggY29uZmlndXJhdGlvbiBrZXlzIGRvIG5vdAorICogZXhpc3QsIHJldHVybnMgUkVCQVNFX0ZBTFNFLgorICovCitzdGF0aWMgZW51bSByZWJhc2VfdHlwZSBjb25maWdfZ2V0X3JlYmFzZSh2b2lkKQoreworCXN0cnVjdCBicmFuY2ggKmN1cnJfYnJhbmNoID0gYnJhbmNoX2dldCgiSEVBRCIpOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKGN1cnJfYnJhbmNoKSB7CisJCWNoYXIgKmtleSA9IHhzdHJmbXQoImJyYW5jaC4lcy5yZWJhc2UiLCBjdXJyX2JyYW5jaC0+bmFtZSk7CisKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZShrZXksICZ2YWx1ZSkpIHsKKwkJCWVudW0gcmViYXNlX3R5cGUgcmV0ID0gcGFyc2VfY29uZmlnX3JlYmFzZShrZXksIHZhbHVlLCAxKTsKKwkJCWZyZWUoa2V5KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlmcmVlKGtleSk7CisJfQorCisJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgicHVsbC5yZWJhc2UiLCAmdmFsdWUpKQorCQlyZXR1cm4gcGFyc2VfY29uZmlnX3JlYmFzZSgicHVsbC5yZWJhc2UiLCB2YWx1ZSwgMSk7CisKKwlyZXR1cm4gUkVCQVNFX0ZBTFNFOworfQorCisvKioKKyAqIFJlYWQgY29uZmlnIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGludCBnaXRfcHVsbF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1czsKKworCWlmICghc3RyY21wKHZhciwgInJlYmFzZS5hdXRvc3Rhc2giKSkgeworCQljb25maWdfYXV0b3N0YXNoID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmFyLCAic3VibW9kdWxlLnJlY3Vyc2UiKSkgeworCQlyZWN1cnNlX3N1Ym1vZHVsZXMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkgPworCQkJUkVDVVJTRV9TVUJNT0RVTEVTX09OIDogUkVDVVJTRV9TVUJNT0RVTEVTX09GRjsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKHZhciwgImdwZy5taW50cnVzdGxldmVsIikpIHsKKwkJY2hlY2tfdHJ1c3RfbGV2ZWwgPSAwOworCX0KKworCXN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKKy8qKgorICogQXBwZW5kcyBtZXJnZSBjYW5kaWRhdGVzIGZyb20gRkVUQ0hfSEVBRCB0aGF0IGFyZSBub3QgbWFya2VkIG5vdC1mb3ItbWVyZ2UKKyAqIGludG8gbWVyZ2VfaGVhZHMuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9tZXJnZV9oZWFkcyhzdHJ1Y3Qgb2lkX2FycmF5ICptZXJnZV9oZWFkcykKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX2ZldGNoX2hlYWQodGhlX3JlcG9zaXRvcnkpOworCUZJTEUgKmZwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWZwID0geGZvcGVuKGZpbGVuYW1lLCAiciIpOworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmc2IsIGZwKSAhPSBFT0YpIHsKKwkJY29uc3QgY2hhciAqcDsKKwkJaWYgKHBhcnNlX29pZF9oZXgoc2IuYnVmLCAmb2lkLCAmcCkpCisJCQljb250aW51ZTsgIC8qIGludmFsaWQgbGluZTogZG9lcyBub3Qgc3RhcnQgd2l0aCBvYmplY3QgSUQgKi8KKwkJaWYgKHN0YXJ0c193aXRoKHAsICJcdG5vdC1mb3ItbWVyZ2VcdCIpKQorCQkJY29udGludWU7ICAvKiByZWYgaXMgbm90LWZvci1tZXJnZSAqLworCQlvaWRfYXJyYXlfYXBwZW5kKG1lcmdlX2hlYWRzLCAmb2lkKTsKKwl9CisJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisvKioKKyAqIFVzZWQgYnkgZGllX25vX21lcmdlX2NhbmRpZGF0ZXMoKSBhcyBhIGZvcl9lYWNoX3JlbW90ZSgpIGNhbGxiYWNrIHRvCisgKiByZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGlmIHRoZSByZXBvc2l0b3J5IG9ubHkgaGFzIG9uZSByZW1vdGUuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X29ubHlfcmVtb3RlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwljb25zdCBjaGFyICoqcmVtb3RlX25hbWUgPSBjYl9kYXRhOworCisJaWYgKCpyZW1vdGVfbmFtZSkKKwkJcmV0dXJuIC0xOworCisJKnJlbW90ZV9uYW1lID0gcmVtb3RlLT5uYW1lOworCXJldHVybiAwOworfQorCisvKioKKyAqIERpZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcmVhc29uIGZvciB3aHkgdGhlcmUgYXJlIG5vIG1lcmdlIGNhbmRpZGF0ZXM6CisgKgorICogMS4gV2UgZmV0Y2hlZCBmcm9tIGEgc3BlY2lmaWMgcmVtb3RlLCBhbmQgYSByZWZzcGVjIHdhcyBnaXZlbiwgYnV0IGl0IGVuZGVkCisgKiAgICB1cCBub3QgZmV0Y2hpbmcgYW55dGhpbmcuIFRoaXMgaXMgdXN1YWxseSBiZWNhdXNlIHRoZSB1c2VyIHByb3ZpZGVkIGEKKyAqICAgIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vIG1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuCisgKgorICogMi4gV2UgZmV0Y2hlZCBmcm9tIGEgbm9uLWRlZmF1bHQgcmVtb3RlLCBidXQgZGlkbid0IHNwZWNpZnkgYSBicmFuY2ggdG8KKyAqICAgIG1lcmdlLiBXZSBjYW4ndCB1c2UgdGhlIGNvbmZpZ3VyZWQgb25lIGJlY2F1c2UgaXQgYXBwbGllcyB0byB0aGUgZGVmYXVsdAorICogICAgcmVtb3RlLCB0aHVzIHRoZSB1c2VyIG11c3Qgc3BlY2lmeSB0aGUgYnJhbmNoZXMgdG8gbWVyZ2UuCisgKgorICogMy4gV2UgZmV0Y2hlZCBmcm9tIHRoZSBicmFuY2gncyBvciByZXBvJ3MgZGVmYXVsdCByZW1vdGUsIGJ1dDoKKyAqCisgKiAgICBhLiBXZSBhcmUgbm90IG9uIGEgYnJhbmNoLCBzbyB0aGVyZSB3aWxsIG5ldmVyIGJlIGEgY29uZmlndXJlZCBicmFuY2ggdG8KKyAqICAgICAgIG1lcmdlIHdpdGguCisgKgorICogICAgYi4gV2UgYXJlIG9uIGEgYnJhbmNoLCBidXQgdGhlcmUgaXMgbm8gY29uZmlndXJlZCBicmFuY2ggdG8gbWVyZ2Ugd2l0aC4KKyAqCisgKiA0LiBXZSBmZXRjaGVkIGZyb20gdGhlIGJyYW5jaCdzIG9yIHJlcG8ncyBkZWZhdWx0IHJlbW90ZSwgYnV0IHRoZSBjb25maWd1cmVkCisgKiAgICBicmFuY2ggdG8gbWVyZ2UgZGlkbid0IGdldCBmZXRjaGVkLiAoRWl0aGVyIGl0IGRvZXNuJ3QgZXhpc3QsIG9yIHdhc24ndAorICogICAgcGFydCBvZiB0aGUgY29uZmlndXJlZCBmZXRjaCByZWZzcGVjLikKKyAqLworc3RhdGljIHZvaWQgTk9SRVRVUk4gZGllX25vX21lcmdlX2NhbmRpZGF0ZXMoY29uc3QgY2hhciAqcmVwbywgY29uc3QgY2hhciAqKnJlZnNwZWNzKQoreworCXN0cnVjdCBicmFuY2ggKmN1cnJfYnJhbmNoID0gYnJhbmNoX2dldCgiSEVBRCIpOworCWNvbnN0IGNoYXIgKnJlbW90ZSA9IGN1cnJfYnJhbmNoID8gY3Vycl9icmFuY2gtPnJlbW90ZV9uYW1lIDogTlVMTDsKKworCWlmICgqcmVmc3BlY3MpIHsKKwkJaWYgKG9wdF9yZWJhc2UpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iKSk7CisJCWVsc2UKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIikpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorCQkJCQkibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iKSk7CisJfSBlbHNlIGlmIChyZXBvICYmIGN1cnJfYnJhbmNoICYmICghcmVtb3RlIHx8IHN0cmNtcChyZXBvLCByZW1vdGUpKSkgeworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKwkJCSJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorCQkJImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIiksCisJCQlyZXBvKTsKKwl9IGVsc2UgaWYgKCFjdXJyX2JyYW5jaCkgeworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIpKTsKKwkJaWYgKG9wdF9yZWJhc2UpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIpKTsKKwkJZWxzZQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIpKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iKSk7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsICIgICAgZ2l0IHB1bGwgJXMgJXMiLCBfKCI8cmVtb3RlPiIpLCBfKCI8YnJhbmNoPiIpKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCX0gZWxzZSBpZiAoIWN1cnJfYnJhbmNoLT5tZXJnZV9ucikgeworCQljb25zdCBjaGFyICpyZW1vdGVfbmFtZSA9IE5VTEw7CisKKwkJaWYgKGZvcl9lYWNoX3JlbW90ZShnZXRfb25seV9yZW1vdGUsICZyZW1vdGVfbmFtZSkgfHwgIXJlbW90ZV9uYW1lKQorCQkJcmVtb3RlX25hbWUgPSBfKCI8cmVtb3RlPiIpOworCisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIpKTsKKwkJaWYgKG9wdF9yZWJhc2UpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIpKTsKKwkJZWxzZQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIpKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iKSk7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsICIgICAgZ2l0IHB1bGwgJXMgJXMiLCBfKCI8cmVtb3RlPiIpLCBfKCI8YnJhbmNoPiIpKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IikpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWZwcmludGZfbG4oc3RkZXJyLCAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvJXMgJXNcbiIsCisJCQkJcmVtb3RlX25hbWUsIF8oIjxicmFuY2g+IiksIGN1cnJfYnJhbmNoLT5uYW1lKTsKKwl9IGVsc2UKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKwkJCSJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iKSwKKwkJCSpjdXJyX2JyYW5jaC0+bWVyZ2VfbmFtZSk7CisJZXhpdCgxKTsKK30KKworLyoqCisgKiBQYXJzZXMgYXJndiBpbnRvIFs8cmVwbz4gWzxyZWZzcGVjcz4uLi5dXSwgcmV0dXJuaW5nIHRoZWlyIHZhbHVlcyBpbiBgcmVwb2AKKyAqIGFzIGEgc3RyaW5nIGFuZCBgcmVmc3BlY3NgIGFzIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MuIElmIGByZXBvYAorICogaXMgbm90IHByb3ZpZGVkIGluIGFyZ3YsIGl0IGlzIHNldCB0byBOVUxMLgorICovCitzdGF0aWMgdm9pZCBwYXJzZV9yZXBvX3JlZnNwZWNzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqKnJlcG8sCisJCWNvbnN0IGNoYXIgKioqcmVmc3BlY3MpCit7CisJaWYgKGFyZ2MgPiAwKSB7CisJCSpyZXBvID0gKmFyZ3YrKzsKKwkJYXJnYy0tOworCX0gZWxzZQorCQkqcmVwbyA9IE5VTEw7CisJKnJlZnNwZWNzID0gYXJndjsKK30KKworLyoqCisgKiBSdW5zIGdpdC1mZXRjaCwgcmV0dXJuaW5nIGl0cyBleGl0IHN0YXR1cy4gYHJlcG9gIGFuZCBgcmVmc3BlY3NgIGFyZSB0aGUKKyAqIHJlcG9zaXRvcnkgYW5kIHJlZnNwZWNzIHRvIGZldGNoLCBvciBOVUxMIGlmIHRoZXkgYXJlIG5vdCBwcm92aWRlZC4KKyAqLworc3RhdGljIGludCBydW5fZmV0Y2goY29uc3QgY2hhciAqcmVwbywgY29uc3QgY2hhciAqKnJlZnNwZWNzKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IHJldDsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJmZXRjaCIsICItLXVwZGF0ZS1oZWFkLW9rIiwgTlVMTCk7CisKKwkvKiBTaGFyZWQgb3B0aW9ucyAqLworCWFyZ3ZfcHVzaF92ZXJib3NpdHkoJmFyZ3MpOworCWlmIChvcHRfcHJvZ3Jlc3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3Byb2dyZXNzKTsKKworCS8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1mZXRjaCAqLworCWlmIChvcHRfYWxsKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9hbGwpOworCWlmIChvcHRfYXBwZW5kKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9hcHBlbmQpOworCWlmIChvcHRfdXBsb2FkX3BhY2spCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3VwbG9hZF9wYWNrKTsKKwlhcmd2X3B1c2hfZm9yY2UoJmFyZ3MpOworCWlmIChvcHRfdGFncykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfdGFncyk7CisJaWYgKG9wdF9wcnVuZSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfcHJ1bmUpOworCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX0RFRkFVTFQpCisJCXN3aXRjaCAocmVjdXJzZV9zdWJtb2R1bGVzKSB7CisJCWNhc2UgUkVDVVJTRV9TVUJNT0RVTEVTX09OOgorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24iKTsKKwkJCWJyZWFrOworCQljYXNlIFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY6CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXJlY3Vyc2Utc3VibW9kdWxlcz1ubyIpOworCQkJYnJlYWs7CisJCWNhc2UgUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORDoKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoInN1Ym1vZHVsZSByZWN1cnNpb24gb3B0aW9uIG5vdCB1bmRlcnN0b29kIik7CisJCX0KKwlpZiAobWF4X2NoaWxkcmVuKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG1heF9jaGlsZHJlbik7CisJaWYgKG9wdF9kcnlfcnVuKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLWRyeS1ydW4iKTsKKwlpZiAob3B0X2tlZXApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2tlZXApOworCWlmIChvcHRfZGVwdGgpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2RlcHRoKTsKKwlpZiAob3B0X3Vuc2hhbGxvdykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfdW5zaGFsbG93KTsKKwlpZiAob3B0X3VwZGF0ZV9zaGFsbG93KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF91cGRhdGVfc2hhbGxvdyk7CisJaWYgKG9wdF9yZWZtYXApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3JlZm1hcCk7CisJaWYgKG9wdF9pcHY0KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9pcHY0KTsKKwlpZiAob3B0X2lwdjYpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2lwdjYpOworCWlmIChvcHRfc2hvd19mb3JjZWRfdXBkYXRlcyA+IDApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tc2hvdy1mb3JjZWQtdXBkYXRlcyIpOworCWVsc2UgaWYgKG9wdF9zaG93X2ZvcmNlZF91cGRhdGVzID09IDApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcyIpOworCWlmIChzZXRfdXBzdHJlYW0pCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgc2V0X3Vwc3RyZWFtKTsKKworCWlmIChyZXBvKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgcmVwbyk7CisJCWFyZ3ZfYXJyYXlfcHVzaHYoJmFyZ3MsIHJlZnNwZWNzKTsKKwl9IGVsc2UgaWYgKCpyZWZzcGVjcykKKwkJQlVHKCJyZWZzcGVjcyB3aXRob3V0IHJlcG8/Iik7CisJcmV0ID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJncy5hcmd2LCBSVU5fR0lUX0NNRCk7CisJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiAiUHVsbHMgaW50byB2b2lkIiBieSBicmFuY2hpbmcgb2ZmIG1lcmdlX2hlYWQuCisgKi8KK3N0YXRpYyBpbnQgcHVsbF9pbnRvX3ZvaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWVyZ2VfaGVhZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY3Vycl9oZWFkKQoreworCWlmIChvcHRfdmVyaWZ5X3NpZ25hdHVyZXMpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksIG1lcmdlX2hlYWQpOworCQlpZiAoIWNvbW1pdCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIpLAorCQkJICAgIG9pZF90b19oZXgobWVyZ2VfaGVhZCkpOworCisJCXZlcmlmeV9tZXJnZV9zaWduYXR1cmUoY29tbWl0LCBvcHRfdmVyYm9zaXR5LAorCQkJCSAgICAgICBjaGVja190cnVzdF9sZXZlbCk7CisJfQorCisJLyoKKwkgKiBUd28td2F5IG1lcmdlOiB3ZSB0cmVhdCB0aGUgaW5kZXggYXMgYmFzZWQgb24gYW4gZW1wdHkgdHJlZSwKKwkgKiBhbmQgdHJ5IHRvIGZhc3QtZm9yd2FyZCB0byBIRUFELiBUaGlzIGVuc3VyZXMgd2Ugd2lsbCBub3QgbG9zZQorCSAqIGluZGV4L3dvcmt0cmVlIGNoYW5nZXMgdGhhdCB0aGUgdXNlciBhbHJlYWR5IG1hZGUgb24gdGhlIHVuYm9ybgorCSAqIGJyYW5jaC4KKwkgKi8KKwlpZiAoY2hlY2tvdXRfZmFzdF9mb3J3YXJkKHRoZV9yZXBvc2l0b3J5LAorCQkJCSAgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSwKKwkJCQkgIG1lcmdlX2hlYWQsIDApKQorCQlyZXR1cm4gMTsKKworCWlmICh1cGRhdGVfcmVmKCJpbml0aWFsIHB1bGwiLCAiSEVBRCIsIG1lcmdlX2hlYWQsIGN1cnJfaGVhZCwgMCwgVVBEQVRFX1JFRlNfRElFX09OX0VSUikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmViYXNlX3N1Ym1vZHVsZXModm9pZCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWNwLmdpdF9jbWQgPSAxOworCWNwLm5vX3N0ZGluID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAic3VibW9kdWxlIiwgInVwZGF0ZSIsCisJCQkJICAgIi0tcmVjdXJzaXZlIiwgIi0tcmViYXNlIiwgTlVMTCk7CisJYXJndl9wdXNoX3ZlcmJvc2l0eSgmY3AuYXJncyk7CisKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNwKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfc3VibW9kdWxlcyh2b2lkKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY3AuZ2l0X2NtZCA9IDE7CisJY3Aubm9fc3RkaW4gPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJzdWJtb2R1bGUiLCAidXBkYXRlIiwKKwkJCQkgICAiLS1yZWN1cnNpdmUiLCAiLS1jaGVja291dCIsIE5VTEwpOworCWFyZ3ZfcHVzaF92ZXJib3NpdHkoJmNwLmFyZ3MpOworCisJcmV0dXJuIHJ1bl9jb21tYW5kKCZjcCk7Cit9CisKKy8qKgorICogUnVucyBnaXQtbWVyZ2UsIHJldHVybmluZyBpdHMgZXhpdCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgcnVuX21lcmdlKHZvaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCisJYXJndl9hcnJheV9wdXNobCgmYXJncywgIm1lcmdlIiwgTlVMTCk7CisKKwkvKiBTaGFyZWQgb3B0aW9ucyAqLworCWFyZ3ZfcHVzaF92ZXJib3NpdHkoJmFyZ3MpOworCWlmIChvcHRfcHJvZ3Jlc3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3Byb2dyZXNzKTsKKworCS8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1tZXJnZSAqLworCWlmIChvcHRfZGlmZnN0YXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2RpZmZzdGF0KTsKKwlpZiAob3B0X2xvZykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfbG9nKTsKKwlpZiAob3B0X3NpZ25vZmYpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3NpZ25vZmYpOworCWlmIChvcHRfc3F1YXNoKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9zcXVhc2gpOworCWlmIChvcHRfY29tbWl0KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9jb21taXQpOworCWlmIChvcHRfZWRpdCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfZWRpdCk7CisJaWYgKGNsZWFudXBfYXJnKQorCQlhcmd2X2FycmF5X3B1c2hmKCZhcmdzLCAiLS1jbGVhbnVwPSVzIiwgY2xlYW51cF9hcmcpOworCWlmIChvcHRfZmYpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2ZmKTsKKwlpZiAob3B0X3ZlcmlmeV9zaWduYXR1cmVzKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF92ZXJpZnlfc2lnbmF0dXJlcyk7CisJYXJndl9hcnJheV9wdXNodigmYXJncywgb3B0X3N0cmF0ZWdpZXMuYXJndik7CisJYXJndl9hcnJheV9wdXNodigmYXJncywgb3B0X3N0cmF0ZWd5X29wdHMuYXJndik7CisJaWYgKG9wdF9ncGdfc2lnbikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfZ3BnX3NpZ24pOworCWlmIChvcHRfYWxsb3dfdW5yZWxhdGVkX2hpc3RvcmllcyA+IDApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyIpOworCisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiRkVUQ0hfSEVBRCIpOworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogUmV0dXJucyByZW1vdGUncyB1cHN0cmVhbSBicmFuY2ggZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4gSWYgcmVtb3RlIGlzIE5VTEwsCisgKiB0aGUgY3VycmVudCBicmFuY2gncyBjb25maWd1cmVkIGRlZmF1bHQgcmVtb3RlIGlzIHVzZWQuIFJldHVybnMgTlVMTCBpZgorICogYHJlbW90ZWAgZG9lcyBub3QgbmFtZSBhIHZhbGlkIHJlbW90ZSwgSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCwKKyAqIHJlbW90ZSBpcyBub3QgdGhlIGJyYW5jaCdzIGNvbmZpZ3VyZWQgcmVtb3RlIG9yIHRoZSBicmFuY2ggZG9lcyBub3QgaGF2ZSBhbnkKKyAqIGNvbmZpZ3VyZWQgdXBzdHJlYW0gYnJhbmNoLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Vwc3RyZWFtX2JyYW5jaChjb25zdCBjaGFyICpyZW1vdGUpCit7CisJc3RydWN0IHJlbW90ZSAqcm07CisJc3RydWN0IGJyYW5jaCAqY3Vycl9icmFuY2g7CisJY29uc3QgY2hhciAqY3Vycl9icmFuY2hfcmVtb3RlOworCisJcm0gPSByZW1vdGVfZ2V0KHJlbW90ZSk7CisJaWYgKCFybSkKKwkJcmV0dXJuIE5VTEw7CisKKwljdXJyX2JyYW5jaCA9IGJyYW5jaF9nZXQoIkhFQUQiKTsKKwlpZiAoIWN1cnJfYnJhbmNoKQorCQlyZXR1cm4gTlVMTDsKKworCWN1cnJfYnJhbmNoX3JlbW90ZSA9IHJlbW90ZV9mb3JfYnJhbmNoKGN1cnJfYnJhbmNoLCBOVUxMKTsKKwlhc3NlcnQoY3Vycl9icmFuY2hfcmVtb3RlKTsKKworCWlmIChzdHJjbXAoY3Vycl9icmFuY2hfcmVtb3RlLCBybS0+bmFtZSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGJyYW5jaF9nZXRfdXBzdHJlYW0oY3Vycl9icmFuY2gsIE5VTEwpOworfQorCisvKioKKyAqIERlcml2ZXMgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2ggZnJvbSB0aGUgcmVtb3RlIGFuZCByZWZzcGVjLgorICoKKyAqIEZJWE1FOiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoZSBkZWZhdWx0IG1hcHBpbmcgb2YKKyAqIHJlZnMvaGVhZHMvPGJyYW5jaF9uYW1lPiB0byByZWZzL3JlbW90ZXMvPHJlbW90ZV9uYW1lPi88YnJhbmNoX25hbWU+LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3RyYWNraW5nX2JyYW5jaChjb25zdCBjaGFyICpyZW1vdGUsIGNvbnN0IGNoYXIgKnJlZnNwZWMpCit7CisJc3RydWN0IHJlZnNwZWNfaXRlbSBzcGVjOworCWNvbnN0IGNoYXIgKnNwZWNfc3JjOworCWNvbnN0IGNoYXIgKm1lcmdlX2JyYW5jaDsKKworCXJlZnNwZWNfaXRlbV9pbml0X29yX2RpZSgmc3BlYywgcmVmc3BlYywgUkVGU1BFQ19GRVRDSCk7CisJc3BlY19zcmMgPSBzcGVjLnNyYzsKKwlpZiAoISpzcGVjX3NyYyB8fCAhc3RyY21wKHNwZWNfc3JjLCAiSEVBRCIpKQorCQlzcGVjX3NyYyA9ICJIRUFEIjsKKwllbHNlIGlmIChza2lwX3ByZWZpeChzcGVjX3NyYywgImhlYWRzLyIsICZzcGVjX3NyYykpCisJCTsKKwllbHNlIGlmIChza2lwX3ByZWZpeChzcGVjX3NyYywgInJlZnMvaGVhZHMvIiwgJnNwZWNfc3JjKSkKKwkJOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNwZWNfc3JjLCAicmVmcy8iKSB8fAorCQlzdGFydHNfd2l0aChzcGVjX3NyYywgInRhZ3MvIikgfHwKKwkJc3RhcnRzX3dpdGgoc3BlY19zcmMsICJyZW1vdGVzLyIpKQorCQlzcGVjX3NyYyA9ICIiOworCisJaWYgKCpzcGVjX3NyYykgeworCQlpZiAoIXN0cmNtcChyZW1vdGUsICIuIikpCisJCQltZXJnZV9icmFuY2ggPSBta3BhdGgoInJlZnMvaGVhZHMvJXMiLCBzcGVjX3NyYyk7CisJCWVsc2UKKwkJCW1lcmdlX2JyYW5jaCA9IG1rcGF0aCgicmVmcy9yZW1vdGVzLyVzLyVzIiwgcmVtb3RlLCBzcGVjX3NyYyk7CisJfSBlbHNlCisJCW1lcmdlX2JyYW5jaCA9IE5VTEw7CisKKwlyZWZzcGVjX2l0ZW1fY2xlYXIoJnNwZWMpOworCXJldHVybiBtZXJnZV9icmFuY2g7Cit9CisKKy8qKgorICogR2l2ZW4gdGhlIHJlcG8gYW5kIHJlZnNwZWNzLCBzZXRzIGZvcmtfcG9pbnQgdG8gdGhlIHBvaW50IGF0IHdoaWNoIHRoZQorICogY3VycmVudCBicmFuY2ggZm9ya2VkIGZyb20gaXRzIHJlbW90ZS10cmFja2luZyBicmFuY2guIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBnZXRfcmViYXNlX2ZvcmtfcG9pbnQoc3RydWN0IG9iamVjdF9pZCAqZm9ya19wb2ludCwgY29uc3QgY2hhciAqcmVwbywKKwkJY29uc3QgY2hhciAqcmVmc3BlYykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBicmFuY2ggKmN1cnJfYnJhbmNoOworCWNvbnN0IGNoYXIgKnJlbW90ZV9icmFuY2g7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJY3Vycl9icmFuY2ggPSBicmFuY2hfZ2V0KCJIRUFEIik7CisJaWYgKCFjdXJyX2JyYW5jaCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlZnNwZWMpCisJCXJlbW90ZV9icmFuY2ggPSBnZXRfdHJhY2tpbmdfYnJhbmNoKHJlcG8sIHJlZnNwZWMpOworCWVsc2UKKwkJcmVtb3RlX2JyYW5jaCA9IGdldF91cHN0cmVhbV9icmFuY2gocmVwbyk7CisKKwlpZiAoIXJlbW90ZV9icmFuY2gpCisJCXJldHVybiAtMTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJtZXJnZS1iYXNlIiwgIi0tZm9yay1wb2ludCIsCisJCQlyZW1vdGVfYnJhbmNoLCBjdXJyX2JyYW5jaC0+bmFtZSwgTlVMTCk7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLm5vX3N0ZGVyciA9IDE7CisJY3AuZ2l0X2NtZCA9IDE7CisKKwlyZXQgPSBjYXB0dXJlX2NvbW1hbmQoJmNwLCAmc2IsIEdJVF9NQVhfSEVYU1opOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cDsKKworCXJldCA9IGdldF9vaWRfaGV4KHNiLmJ1ZiwgZm9ya19wb2ludCk7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwOworCitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldCA/IC0xIDogMDsKK30KKworLyoqCisgKiBTZXRzIG1lcmdlX2Jhc2UgdG8gdGhlIG9jdG9wdXMgbWVyZ2UgYmFzZSBvZiBjdXJyX2hlYWQsIG1lcmdlX2hlYWQgYW5kCisgKiBmb3JrX3BvaW50LiBSZXR1cm5zIDAgaWYgYSBtZXJnZSBiYXNlIGlzIGZvdW5kLCAxIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBnZXRfb2N0b3B1c19tZXJnZV9iYXNlKHN0cnVjdCBvYmplY3RfaWQgKm1lcmdlX2Jhc2UsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmN1cnJfaGVhZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWVyZ2VfaGVhZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZm9ya19wb2ludCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldnMgPSBOVUxMLCAqcmVzdWx0OworCisJY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBjdXJyX2hlYWQpLAorCQkJICAgJnJldnMpOworCWNvbW1pdF9saXN0X2luc2VydChsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgbWVyZ2VfaGVhZCksCisJCQkgICAmcmV2cyk7CisJaWYgKCFpc19udWxsX29pZChmb3JrX3BvaW50KSkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBmb3JrX3BvaW50KSwKKwkJCQkgICAmcmV2cyk7CisKKwlyZXN1bHQgPSBnZXRfb2N0b3B1c19tZXJnZV9iYXNlcyhyZXZzKTsKKwlmcmVlX2NvbW1pdF9saXN0KHJldnMpOworCXJlZHVjZV9oZWFkc19yZXBsYWNlKCZyZXN1bHQpOworCisJaWYgKCFyZXN1bHQpCisJCXJldHVybiAxOworCisJb2lkY3B5KG1lcmdlX2Jhc2UsICZyZXN1bHQtPml0ZW0tPm9iamVjdC5vaWQpOworCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHaXZlbiB0aGUgY3VycmVudCBIRUFEIG9pZCwgdGhlIG1lcmdlIGhlYWQgcmV0dXJuZWQgZnJvbSBnaXQtZmV0Y2ggYW5kIHRoZQorICogZm9yayBwb2ludCBjYWxjdWxhdGVkIGJ5IGdldF9yZWJhc2VfZm9ya19wb2ludCgpLCBydW5zIGdpdC1yZWJhc2Ugd2l0aCB0aGUKKyAqIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBpdHMgZXhpdCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgcnVuX3JlYmFzZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJyX2hlYWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm1lcmdlX2hlYWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmZvcmtfcG9pbnQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9jdF9tZXJnZV9iYXNlOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlpZiAoIWdldF9vY3RvcHVzX21lcmdlX2Jhc2UoJm9jdF9tZXJnZV9iYXNlLCBjdXJyX2hlYWQsIG1lcmdlX2hlYWQsIGZvcmtfcG9pbnQpKQorCQlpZiAoIWlzX251bGxfb2lkKGZvcmtfcG9pbnQpICYmIG9pZGVxKCZvY3RfbWVyZ2VfYmFzZSwgZm9ya19wb2ludCkpCisJCQlmb3JrX3BvaW50ID0gTlVMTDsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgInJlYmFzZSIpOworCisJLyogU2hhcmVkIG9wdGlvbnMgKi8KKwlhcmd2X3B1c2hfdmVyYm9zaXR5KCZhcmdzKTsKKworCS8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1yZWJhc2UgKi8KKwlpZiAob3B0X3JlYmFzZSA9PSBSRUJBU0VfTUVSR0VTKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXJlYmFzZS1tZXJnZXMiKTsKKwllbHNlIGlmIChvcHRfcmViYXNlID09IFJFQkFTRV9QUkVTRVJWRSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1wcmVzZXJ2ZS1tZXJnZXMiKTsKKwllbHNlIGlmIChvcHRfcmViYXNlID09IFJFQkFTRV9JTlRFUkFDVElWRSkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1pbnRlcmFjdGl2ZSIpOworCWlmIChvcHRfZGlmZnN0YXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2RpZmZzdGF0KTsKKwlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBvcHRfc3RyYXRlZ2llcy5hcmd2KTsKKwlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBvcHRfc3RyYXRlZ3lfb3B0cy5hcmd2KTsKKwlpZiAob3B0X2dwZ19zaWduKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9ncGdfc2lnbik7CisJaWYgKG9wdF9hdXRvc3Rhc2ggPT0gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1uby1hdXRvc3Rhc2giKTsKKwllbHNlIGlmIChvcHRfYXV0b3N0YXNoID09IDEpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tYXV0b3N0YXNoIik7CisJaWYgKG9wdF92ZXJpZnlfc2lnbmF0dXJlcyAmJgorCSAgICAhc3RyY21wKG9wdF92ZXJpZnlfc2lnbmF0dXJlcywgIi0tdmVyaWZ5LXNpZ25hdHVyZXMiKSkKKwkJd2FybmluZyhfKCJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiKSk7CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLW9udG8iKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9pZF90b19oZXgobWVyZ2VfaGVhZCkpOworCisJaWYgKGZvcmtfcG9pbnQgJiYgIWlzX251bGxfb2lkKGZvcmtfcG9pbnQpKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9pZF90b19oZXgoZm9ya19wb2ludCkpOworCWVsc2UKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvaWRfdG9faGV4KG1lcmdlX2hlYWQpKTsKKworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjbWRfcHVsbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpyZXBvLCAqKnJlZnNwZWNzOworCXN0cnVjdCBvaWRfYXJyYXkgbWVyZ2VfaGVhZHMgPSBPSURfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9yaWdfaGVhZCwgY3Vycl9oZWFkOworCXN0cnVjdCBvYmplY3RfaWQgcmViYXNlX2ZvcmtfcG9pbnQ7CisJaW50IGF1dG9zdGFzaDsKKworCWlmICghZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpKQorCQlzZXRfcmVmbG9nX21lc3NhZ2UoYXJnYywgYXJndik7CisKKwlnaXRfY29uZmlnKGdpdF9wdWxsX2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHB1bGxfb3B0aW9ucywgcHVsbF91c2FnZSwgMCk7CisKKwlpZiAoY2xlYW51cF9hcmcpCisJCS8qCisJCSAqIHRoaXMgb25seSBjaGVja3MgdGhlIHZhbGlkaXR5IG9mIGNsZWFudXBfYXJnOyB3ZSBkb24ndCBuZWVkCisJCSAqIGEgdmFsaWQgdmFsdWUgZm9yIHVzZV9lZGl0b3IKKwkJICovCisJCWdldF9jbGVhbnVwX21vZGUoY2xlYW51cF9hcmcsIDApOworCisJcGFyc2VfcmVwb19yZWZzcGVjcyhhcmdjLCBhcmd2LCAmcmVwbywgJnJlZnNwZWNzKTsKKworCWlmICghb3B0X2ZmKQorCQlvcHRfZmYgPSB4c3RyZHVwX29yX251bGwoY29uZmlnX2dldF9mZigpKTsKKworCWlmIChvcHRfcmViYXNlIDwgMCkKKwkJb3B0X3JlYmFzZSA9IGNvbmZpZ19nZXRfcmViYXNlKCk7CisKKwlpZiAocmVhZF9jYWNoZV91bm1lcmdlZCgpKQorCQlkaWVfcmVzb2x2ZV9jb25mbGljdCgicHVsbCIpOworCisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX21lcmdlX2hlYWQodGhlX3JlcG9zaXRvcnkpKSkKKwkJZGllX2NvbmNsdWRlX21lcmdlKCk7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZvcmlnX2hlYWQpKQorCQlvaWRjbHIoJm9yaWdfaGVhZCk7CisKKwlpZiAoIW9wdF9yZWJhc2UgJiYgb3B0X2F1dG9zdGFzaCAhPSAtMSkKKwkJZGllKF8oIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iKSk7CisKKwlhdXRvc3Rhc2ggPSBjb25maWdfYXV0b3N0YXNoOworCWlmIChvcHRfcmViYXNlKSB7CisJCWlmIChvcHRfYXV0b3N0YXNoICE9IC0xKQorCQkJYXV0b3N0YXNoID0gb3B0X2F1dG9zdGFzaDsKKworCQlpZiAoaXNfbnVsbF9vaWQoJm9yaWdfaGVhZCkgJiYgIWlzX2NhY2hlX3VuYm9ybigpKQorCQkJZGllKF8oIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iKSk7CisKKwkJaWYgKCFhdXRvc3Rhc2gpCisJCQlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQlOXygicHVsbCB3aXRoIHJlYmFzZSIpLAorCQkJCV8oInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iKSwgMSwgMCk7CisKKwkJaWYgKGdldF9yZWJhc2VfZm9ya19wb2ludCgmcmViYXNlX2ZvcmtfcG9pbnQsIHJlcG8sICpyZWZzcGVjcykpCisJCQlvaWRjbHIoJnJlYmFzZV9mb3JrX3BvaW50KTsKKwl9CisKKwlpZiAocnVuX2ZldGNoKHJlcG8sIHJlZnNwZWNzKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAob3B0X2RyeV9ydW4pCisJCXJldHVybiAwOworCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmY3Vycl9oZWFkKSkKKwkJb2lkY2xyKCZjdXJyX2hlYWQpOworCisJaWYgKCFpc19udWxsX29pZCgmb3JpZ19oZWFkKSAmJiAhaXNfbnVsbF9vaWQoJmN1cnJfaGVhZCkgJiYKKwkJCSFvaWRlcSgmb3JpZ19oZWFkLCAmY3Vycl9oZWFkKSkgeworCQkvKgorCQkgKiBUaGUgZmV0Y2ggaW52b2x2ZWQgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoLgorCQkgKgorCQkgKiBUaGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggZmlsZSBhcmUgc3RpbGwgYmFzZWQgb24KKwkJICogb3JpZ19oZWFkIGNvbW1pdCwgYnV0IHdlIGFyZSBtZXJnaW5nIGludG8gY3Vycl9oZWFkLgorCQkgKiBVcGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCBjdXJyX2hlYWQuCisJCSAqLworCisJCXdhcm5pbmcoXygiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKwkJCSJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorCQkJImNvbW1pdCAlcy4iKSwgb2lkX3RvX2hleCgmb3JpZ19oZWFkKSk7CisKKwkJaWYgKGNoZWNrb3V0X2Zhc3RfZm9yd2FyZCh0aGVfcmVwb3NpdG9yeSwgJm9yaWdfaGVhZCwKKwkJCQkJICAmY3Vycl9oZWFkLCAwKSkKKwkJCWRpZShfKCJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorCQkJCSJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisJCQkJIiQgZ2l0IGRpZmYgJXNcbiIKKwkJCQkib3V0cHV0LCBydW5cbiIKKwkJCQkiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisJCQkJInRvIHJlY292ZXIuIiksIG9pZF90b19oZXgoJm9yaWdfaGVhZCkpOworCX0KKworCWdldF9tZXJnZV9oZWFkcygmbWVyZ2VfaGVhZHMpOworCisJaWYgKCFtZXJnZV9oZWFkcy5ucikKKwkJZGllX25vX21lcmdlX2NhbmRpZGF0ZXMocmVwbywgcmVmc3BlY3MpOworCisJaWYgKGlzX251bGxfb2lkKCZvcmlnX2hlYWQpKSB7CisJCWlmIChtZXJnZV9oZWFkcy5uciA+IDEpCisJCQlkaWUoXygiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iKSk7CisJCXJldHVybiBwdWxsX2ludG9fdm9pZChtZXJnZV9oZWFkcy5vaWQsICZjdXJyX2hlYWQpOworCX0KKwlpZiAob3B0X3JlYmFzZSAmJiBtZXJnZV9oZWFkcy5uciA+IDEpCisJCWRpZShfKCJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIikpOworCisJaWYgKG9wdF9yZWJhc2UpIHsKKwkJaW50IHJldCA9IDA7CisJCWlmICgocmVjdXJzZV9zdWJtb2R1bGVzID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTiB8fAorCQkgICAgIHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EKSAmJgorCQkgICAgc3VibW9kdWxlX3RvdWNoZXNfaW5fcmFuZ2UodGhlX3JlcG9zaXRvcnksICZyZWJhc2VfZm9ya19wb2ludCwgJmN1cnJfaGVhZCkpCisJCQlkaWUoXygiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiKSk7CisJCWlmICghYXV0b3N0YXNoKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCQkJc3RydWN0IGNvbW1pdCAqbWVyZ2VfaGVhZCwgKmhlYWQ7CisKKwkJCWhlYWQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAgICAgICAmb3JpZ19oZWFkKTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChoZWFkLCAmbGlzdCk7CisJCQltZXJnZV9oZWFkID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgICAmbWVyZ2VfaGVhZHMub2lkWzBdKTsKKwkJCWlmIChpc19kZXNjZW5kYW50X29mKG1lcmdlX2hlYWQsIGxpc3QpKSB7CisJCQkJLyogd2UgY2FuIGZhc3QtZm9yd2FyZCB0aGlzIHdpdGhvdXQgaW52b2tpbmcgcmViYXNlICovCisJCQkJb3B0X2ZmID0gIi0tZmYtb25seSI7CisJCQkJcmV0ID0gcnVuX21lcmdlKCk7CisJCQl9CisJCX0KKwkJcmV0ID0gcnVuX3JlYmFzZSgmY3Vycl9oZWFkLCBtZXJnZV9oZWFkcy5vaWQsICZyZWJhc2VfZm9ya19wb2ludCk7CisKKwkJaWYgKCFyZXQgJiYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT04gfHwKKwkJCSAgICAgcmVjdXJzZV9zdWJtb2R1bGVzID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQpKQorCQkJcmV0ID0gcmViYXNlX3N1Ym1vZHVsZXMoKTsKKworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCWludCByZXQgPSBydW5fbWVyZ2UoKTsKKwkJaWYgKCFyZXQgJiYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT04gfHwKKwkJCSAgICAgcmVjdXJzZV9zdWJtb2R1bGVzID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQpKQorCQkJcmV0ID0gdXBkYXRlX3N1Ym1vZHVsZXMoKTsKKwkJcmV0dXJuIHJldDsKKwl9Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3B1c2guYyBiL2J1aWx0aW4vcHVzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYmYwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3B1c2guYwpAQCAtMCwwICsxLDY1MiBAQAorLyoKKyAqICJnaXQgcHVzaCIKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInNlbmQtcGFjay5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHVzaF91c2FnZVtdID0geworCU5fKCJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIpLAorCU5VTEwsCit9OworCitzdGF0aWMgaW50IHB1c2hfdXNlX2NvbG9yID0gLTE7CitzdGF0aWMgY2hhciBwdXNoX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX1JFU0VULAorCUdJVF9DT0xPUl9SRUQsCS8qIEVSUk9SICovCit9OworCitlbnVtIGNvbG9yX3B1c2ggeworCVBVU0hfQ09MT1JfUkVTRVQgPSAwLAorCVBVU0hfQ09MT1JfRVJST1IgPSAxCit9OworCitzdGF0aWMgaW50IHBhcnNlX3B1c2hfY29sb3Jfc2xvdChjb25zdCBjaGFyICpzbG90KQoreworCWlmICghc3RyY2FzZWNtcChzbG90LCAicmVzZXQiKSkKKwkJcmV0dXJuIFBVU0hfQ09MT1JfUkVTRVQ7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJlcnJvciIpKQorCQlyZXR1cm4gUFVTSF9DT0xPUl9FUlJPUjsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwdXNoX2dldF9jb2xvcihlbnVtIGNvbG9yX3B1c2ggaXgpCit7CisJaWYgKHdhbnRfY29sb3Jfc3RkZXJyKHB1c2hfdXNlX2NvbG9yKSkKKwkJcmV0dXJuIHB1c2hfY29sb3JzW2l4XTsKKwlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBpbnQgdGhpbiA9IDE7CitzdGF0aWMgaW50IGRlbGV0ZXJlZnM7CitzdGF0aWMgY29uc3QgY2hhciAqcmVjZWl2ZXBhY2s7CitzdGF0aWMgaW50IHZlcmJvc2l0eTsKK3N0YXRpYyBpbnQgcHJvZ3Jlc3MgPSAtMTsKK3N0YXRpYyBpbnQgcmVjdXJzZV9zdWJtb2R1bGVzID0gUkVDVVJTRV9TVUJNT0RVTEVTX0RFRkFVTFQ7CitzdGF0aWMgZW51bSB0cmFuc3BvcnRfZmFtaWx5IGZhbWlseTsKKworc3RhdGljIHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gY2FzOworCitzdGF0aWMgc3RydWN0IHJlZnNwZWMgcnMgPSBSRUZTUEVDX0lOSVRfUFVTSDsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBwdXNoX29wdGlvbnNfY29uZmlnID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKK3N0YXRpYyBjb25zdCBjaGFyICptYXBfcmVmc3BlYyhjb25zdCBjaGFyICpyZWYsCisJCQkgICAgICAgc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzKQoreworCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCXN0cnVjdCByZWYgKm1hdGNoZWQgPSBOVUxMOworCisJLyogRG9lcyAicmVmIiB1bmlxdWVseSBuYW1lIG91ciByZWY/ICovCisJaWYgKGNvdW50X3JlZnNwZWNfbWF0Y2gocmVmLCBsb2NhbF9yZWZzLCAmbWF0Y2hlZCkgIT0gMSkKKwkJcmV0dXJuIHJlZjsKKworCWlmIChyZW1vdGUtPnB1c2gubnIpIHsKKwkJc3RydWN0IHJlZnNwZWNfaXRlbSBxdWVyeTsKKwkJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHN0cnVjdCByZWZzcGVjX2l0ZW0pKTsKKwkJcXVlcnkuc3JjID0gbWF0Y2hlZC0+bmFtZTsKKwkJaWYgKCFxdWVyeV9yZWZzcGVjcygmcmVtb3RlLT5wdXNoLCAmcXVlcnkpICYmIHF1ZXJ5LmRzdCkgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyVzOiVzIiwKKwkJCQkgICAgcXVlcnkuZm9yY2UgPyAiKyIgOiAiIiwKKwkJCQkgICAgcXVlcnkuc3JjLCBxdWVyeS5kc3QpOworCQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJCX0KKwl9CisKKwlpZiAocHVzaF9kZWZhdWx0ID09IFBVU0hfREVGQVVMVF9VUFNUUkVBTSAmJgorCSAgICBza2lwX3ByZWZpeChtYXRjaGVkLT5uYW1lLCAicmVmcy9oZWFkcy8iLCAmYnJhbmNoX25hbWUpKSB7CisJCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQoYnJhbmNoX25hbWUpOworCQlpZiAoYnJhbmNoLT5tZXJnZV9uciA9PSAxICYmIGJyYW5jaC0+bWVyZ2VbMF0tPnNyYykgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlczolcyIsCisJCQkJICAgIHJlZiwgYnJhbmNoLT5tZXJnZVswXS0+c3JjKTsKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCQl9CisJfQorCisJcmV0dXJuIHJlZjsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZnNwZWNzKGNvbnN0IGNoYXIgKipyZWZzLCBpbnQgbnIsIGNvbnN0IGNoYXIgKnJlcG8pCit7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnJlZiA9IHJlZnNbaV07CisJCWlmICghc3RyY21wKCJ0YWciLCByZWYpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHRhZ3JlZiA9IFNUUkJVRl9JTklUOworCQkJaWYgKG5yIDw9ICsraSkKKwkJCQlkaWUoXygidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IikpOworCQkJcmVmID0gcmVmc1tpXTsKKwkJCWlmIChkZWxldGVyZWZzKQorCQkJCXN0cmJ1Zl9hZGRmKCZ0YWdyZWYsICI6cmVmcy90YWdzLyVzIiwgcmVmKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkZigmdGFncmVmLCAicmVmcy90YWdzLyVzIiwgcmVmKTsKKwkJCXJlZiA9IHN0cmJ1Zl9kZXRhY2goJnRhZ3JlZiwgTlVMTCk7CisJCX0gZWxzZSBpZiAoZGVsZXRlcmVmcykgeworCQkJc3RydWN0IHN0cmJ1ZiBkZWxyZWYgPSBTVFJCVUZfSU5JVDsKKwkJCWlmIChzdHJjaHIocmVmLCAnOicpKQorCQkJCWRpZShfKCItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZkZWxyZWYsICI6JXMiLCByZWYpOworCQkJcmVmID0gc3RyYnVmX2RldGFjaCgmZGVscmVmLCBOVUxMKTsKKwkJfSBlbHNlIGlmICghc3RyY2hyKHJlZiwgJzonKSkgeworCQkJaWYgKCFyZW1vdGUpIHsKKwkJCQkvKiBsYXppbHkgZ3JhYiByZW1vdGUgYW5kIGxvY2FsX3JlZnMgKi8KKwkJCQlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlcG8pOworCQkJCWxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKKwkJCX0KKwkJCXJlZiA9IG1hcF9yZWZzcGVjKHJlZiwgcmVtb3RlLCBsb2NhbF9yZWZzKTsKKwkJfQorCQlyZWZzcGVjX2FwcGVuZCgmcnMsIHJlZik7CisJfQorfQorCitzdGF0aWMgaW50IHB1c2hfdXJsX29mX3JlbW90ZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKioqdXJsX3ApCit7CisJaWYgKHJlbW90ZS0+cHVzaHVybF9ucikgeworCQkqdXJsX3AgPSByZW1vdGUtPnB1c2h1cmw7CisJCXJldHVybiByZW1vdGUtPnB1c2h1cmxfbnI7CisJfQorCSp1cmxfcCA9IHJlbW90ZS0+dXJsOworCXJldHVybiByZW1vdGUtPnVybF9ucjsKK30KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX3B1c2hfc2ltcGxlKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwKKwkJCQkgICAgIHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwkvKgorCSAqIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gdXNpbmcgc2hvcnRlbl91bmFtYmlndW91c19yZWYgaGVyZSwKKwkgKiBhcyB0aGUgYW1iaWd1aXR5IHdvdWxkIGJlIG9uIHRoZSByZW1vdGUgc2lkZSwgbm90IHdoYXQKKwkgKiB3ZSBoYXZlIGxvY2FsbHkuIFBsdXMsIHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNpbXBsZQorCSAqIG1vZGUuIElmIHRoZSB1c2VyIGlzIGRvaW5nIHNvbWV0aGluZyBjcmF6eSBsaWtlIHNldHRpbmcKKwkgKiB1cHN0cmVhbSB0byBhIG5vbi1icmFuY2gsIHdlIHNob3VsZCBwcm9iYWJseSBiZSBzaG93aW5nCisJICogdGhlbSB0aGUgYmlnIHVnbHkgZnVsbHkgcXVhbGlmaWVkIHJlZi4KKwkgKi8KKwljb25zdCBjaGFyICphZHZpY2VfbWF5YmUgPSAiIjsKKwljb25zdCBjaGFyICpzaG9ydF91cHN0cmVhbSA9IGJyYW5jaC0+bWVyZ2VbMF0tPnNyYzsKKworCXNraXBfcHJlZml4KHNob3J0X3Vwc3RyZWFtLCAicmVmcy9oZWFkcy8iLCAmc2hvcnRfdXBzdHJlYW0pOworCisJLyoKKwkgKiBEb24ndCBzaG93IGFkdmljZSBmb3IgcGVvcGxlIHdobyBleHBsaWNpdGx5IHNldAorCSAqIHB1c2guZGVmYXVsdC4KKwkgKi8KKwlpZiAocHVzaF9kZWZhdWx0ID09IFBVU0hfREVGQVVMVF9VTlNQRUNJRklFRCkKKwkJYWR2aWNlX21heWJlID0gXygiXG4iCisJCQkJICJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgIgorCQkJCSAic2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iKTsKKwlkaWUoXygiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisJICAgICAgInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKwkgICAgICAib24gdGhlIHJlbW90ZSwgdXNlXG4iCisJICAgICAgIlxuIgorCSAgICAgICIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorCSAgICAgICJcbiIKKwkgICAgICAiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisJICAgICAgIlxuIgorCSAgICAgICIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorCSAgICAgICIlcyIpLAorCSAgICByZW1vdGUtPm5hbWUsIHNob3J0X3Vwc3RyZWFtLAorCSAgICByZW1vdGUtPm5hbWUsIGFkdmljZV9tYXliZSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfZGV0YWNoZWRfaGVhZF9kaWVbXSA9CisJTl8oIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKwkgICAiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorCSAgICJzdGF0ZSBub3csIHVzZVxuIgorCSAgICJcbiIKKwkgICAiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIpOworCitzdGF0aWMgdm9pZCBzZXR1cF9wdXNoX3Vwc3RyZWFtKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IGJyYW5jaCAqYnJhbmNoLAorCQkJCWludCB0cmlhbmd1bGFyLCBpbnQgc2ltcGxlKQoreworCXN0cnVjdCBzdHJidWYgcmVmc3BlYyA9IFNUUkJVRl9JTklUOworCisJaWYgKCFicmFuY2gpCisJCWRpZShfKG1lc3NhZ2VfZGV0YWNoZWRfaGVhZF9kaWUpLCByZW1vdGUtPm5hbWUpOworCWlmICghYnJhbmNoLT5tZXJnZV9uciB8fCAhYnJhbmNoLT5tZXJnZSB8fCAhYnJhbmNoLT5yZW1vdGVfbmFtZSkKKwkJZGllKF8oIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorCQkgICAgIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisJCSAgICAiXG4iCisJCSAgICAiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iKSwKKwkJICAgIGJyYW5jaC0+bmFtZSwKKwkJICAgIHJlbW90ZS0+bmFtZSwKKwkJICAgIGJyYW5jaC0+bmFtZSk7CisJaWYgKGJyYW5jaC0+bWVyZ2VfbnIgIT0gMSkKKwkJZGllKF8oIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsICIKKwkJICAgICJyZWZ1c2luZyB0byBwdXNoLiIpLCBicmFuY2gtPm5hbWUpOworCWlmICh0cmlhbmd1bGFyKQorCQlkaWUoXygiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisJCSAgICAgICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKwkJICAgICAgInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIpLAorCQkgICAgcmVtb3RlLT5uYW1lLCBicmFuY2gtPm5hbWUpOworCisJaWYgKHNpbXBsZSkgeworCQkvKiBBZGRpdGlvbmFsIHNhZmV0eSAqLworCQlpZiAoc3RyY21wKGJyYW5jaC0+cmVmbmFtZSwgYnJhbmNoLT5tZXJnZVswXS0+c3JjKSkKKwkJCWRpZV9wdXNoX3NpbXBsZShicmFuY2gsIHJlbW90ZSk7CisJfQorCisJc3RyYnVmX2FkZGYoJnJlZnNwZWMsICIlczolcyIsIGJyYW5jaC0+cmVmbmFtZSwgYnJhbmNoLT5tZXJnZVswXS0+c3JjKTsKKwlyZWZzcGVjX2FwcGVuZCgmcnMsIHJlZnNwZWMuYnVmKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcHVzaF9jdXJyZW50KHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IGJyYW5jaCAqYnJhbmNoKQoreworCXN0cnVjdCBzdHJidWYgcmVmc3BlYyA9IFNUUkJVRl9JTklUOworCisJaWYgKCFicmFuY2gpCisJCWRpZShfKG1lc3NhZ2VfZGV0YWNoZWRfaGVhZF9kaWUpLCByZW1vdGUtPm5hbWUpOworCXN0cmJ1Zl9hZGRmKCZyZWZzcGVjLCAiJXM6JXMiLCBicmFuY2gtPnJlZm5hbWUsIGJyYW5jaC0+cmVmbmFtZSk7CisJcmVmc3BlY19hcHBlbmQoJnJzLCByZWZzcGVjLmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgaXNfd29ya2Zsb3dfdHJpYW5ndWxhcihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCit7CisJc3RydWN0IHJlbW90ZSAqZmV0Y2hfcmVtb3RlID0gcmVtb3RlX2dldChOVUxMKTsKKwlyZXR1cm4gKGZldGNoX3JlbW90ZSAmJiBmZXRjaF9yZW1vdGUgIT0gcmVtb3RlKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZGVmYXVsdF9wdXNoX3JlZnNwZWNzKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCWludCB0cmlhbmd1bGFyID0gaXNfd29ya2Zsb3dfdHJpYW5ndWxhcihyZW1vdGUpOworCisJc3dpdGNoIChwdXNoX2RlZmF1bHQpIHsKKwlkZWZhdWx0OgorCWNhc2UgUFVTSF9ERUZBVUxUX01BVENISU5HOgorCQlyZWZzcGVjX2FwcGVuZCgmcnMsICI6Iik7CisJCWJyZWFrOworCisJY2FzZSBQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQ6CisJY2FzZSBQVVNIX0RFRkFVTFRfU0lNUExFOgorCQlpZiAodHJpYW5ndWxhcikKKwkJCXNldHVwX3B1c2hfY3VycmVudChyZW1vdGUsIGJyYW5jaCk7CisJCWVsc2UKKwkJCXNldHVwX3B1c2hfdXBzdHJlYW0ocmVtb3RlLCBicmFuY2gsIHRyaWFuZ3VsYXIsIDEpOworCQlicmVhazsKKworCWNhc2UgUFVTSF9ERUZBVUxUX1VQU1RSRUFNOgorCQlzZXR1cF9wdXNoX3Vwc3RyZWFtKHJlbW90ZSwgYnJhbmNoLCB0cmlhbmd1bGFyLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFBVU0hfREVGQVVMVF9DVVJSRU5UOgorCQlzZXR1cF9wdXNoX2N1cnJlbnQocmVtb3RlLCBicmFuY2gpOworCQlicmVhazsKKworCWNhc2UgUFVTSF9ERUZBVUxUX05PVEhJTkc6CisJCWRpZShfKCJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCAiCisJCSAgICAicHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2FkdmljZV9wdWxsX2JlZm9yZV9wdXNoW10gPQorCU5fKCJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisJICAgIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKwkgICAiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorCSAgICJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIpOworCitzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2FkdmljZV9jaGVja291dF9wdWxsX3B1c2hbXSA9CisJTl8oIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKwkgICAiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorCSAgICIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisJICAgIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX3JlZl9mZXRjaF9maXJzdFtdID0KKwlOXygiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisJICAgIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKwkgICAidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorCSAgICIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorCSAgICJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIpOworCitzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2FkdmljZV9yZWZfYWxyZWFkeV9leGlzdHNbXSA9CisJTl8oIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfcmVmX25lZWRzX2ZvcmNlW10gPQorCU5fKCJZb3UgY2Fubm90IHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBwb2ludHMgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKwkgICAib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisJICAgIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iKTsKKworc3RhdGljIHZvaWQgYWR2aXNlX3B1bGxfYmVmb3JlX3B1c2godm9pZCkKK3sKKwlpZiAoIWFkdmljZV9wdXNoX25vbl9mZl9jdXJyZW50IHx8ICFhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQpCisJCXJldHVybjsKKwlhZHZpc2UoXyhtZXNzYWdlX2FkdmljZV9wdWxsX2JlZm9yZV9wdXNoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkdmlzZV9jaGVja291dF9wdWxsX3B1c2godm9pZCkKK3sKKwlpZiAoIWFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZyB8fCAhYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkKQorCQlyZXR1cm47CisJYWR2aXNlKF8obWVzc2FnZV9hZHZpY2VfY2hlY2tvdXRfcHVsbF9wdXNoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkdmlzZV9yZWZfYWxyZWFkeV9leGlzdHModm9pZCkKK3sKKwlpZiAoIWFkdmljZV9wdXNoX2FscmVhZHlfZXhpc3RzIHx8ICFhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQpCisJCXJldHVybjsKKwlhZHZpc2UoXyhtZXNzYWdlX2FkdmljZV9yZWZfYWxyZWFkeV9leGlzdHMpKTsKK30KKworc3RhdGljIHZvaWQgYWR2aXNlX3JlZl9mZXRjaF9maXJzdCh2b2lkKQoreworCWlmICghYWR2aWNlX3B1c2hfZmV0Y2hfZmlyc3QgfHwgIWFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCkKKwkJcmV0dXJuOworCWFkdmlzZShfKG1lc3NhZ2VfYWR2aWNlX3JlZl9mZXRjaF9maXJzdCkpOworfQorCitzdGF0aWMgdm9pZCBhZHZpc2VfcmVmX25lZWRzX2ZvcmNlKHZvaWQpCit7CisJaWYgKCFhZHZpY2VfcHVzaF9uZWVkc19mb3JjZSB8fCAhYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkKQorCQlyZXR1cm47CisJYWR2aXNlKF8obWVzc2FnZV9hZHZpY2VfcmVmX25lZWRzX2ZvcmNlKSk7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF93aXRoX29wdGlvbnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmc3BlYyAqcnMsCisJCQkgICAgIGludCBmbGFncykKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCByZWplY3RfcmVhc29uczsKKworCXRyYW5zcG9ydF9zZXRfdmVyYm9zaXR5KHRyYW5zcG9ydCwgdmVyYm9zaXR5LCBwcm9ncmVzcyk7CisJdHJhbnNwb3J0LT5mYW1pbHkgPSBmYW1pbHk7CisKKwlpZiAocmVjZWl2ZXBhY2spCisJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwKKwkJCQkgICAgIFRSQU5TX09QVF9SRUNFSVZFUEFDSywgcmVjZWl2ZXBhY2spOworCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1RISU4sIHRoaW4gPyAieWVzIiA6IE5VTEwpOworCisJaWYgKCFpc19lbXB0eV9jYXMoJmNhcykpIHsKKwkJaWYgKCF0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMpCisJCQlkaWUoInVuZGVybHlpbmcgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgLS0lcyBvcHRpb24iLAorCQkJICAgIENBU19PUFRfTkFNRSk7CisJCXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+Y2FzID0gJmNhczsKKwl9CisKKwlpZiAodmVyYm9zaXR5ID4gMCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIlB1c2hpbmcgdG8gJXNcbiIpLCB0cmFuc3BvcnQtPnVybCk7CisJdHJhY2UyX3JlZ2lvbl9lbnRlcigicHVzaCIsICJ0cmFuc3BvcnRfcHVzaCIsIHRoZV9yZXBvc2l0b3J5KTsKKwllcnIgPSB0cmFuc3BvcnRfcHVzaCh0aGVfcmVwb3NpdG9yeSwgdHJhbnNwb3J0LAorCQkJICAgICBycywgZmxhZ3MsICZyZWplY3RfcmVhc29ucyk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgicHVzaCIsICJ0cmFuc3BvcnRfcHVzaCIsIHRoZV9yZXBvc2l0b3J5KTsKKwlpZiAoZXJyICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIHB1c2hfZ2V0X2NvbG9yKFBVU0hfQ09MT1JfRVJST1IpKTsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciKSwgdHJhbnNwb3J0LT51cmwpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgcHVzaF9nZXRfY29sb3IoUFVTSF9DT0xPUl9SRVNFVCkpOworCX0KKworCWVyciB8PSB0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCWlmICghZXJyKQorCQlyZXR1cm4gMDsKKworCWlmIChyZWplY3RfcmVhc29ucyAmIFJFSkVDVF9OT05fRkZfSEVBRCkgeworCQlhZHZpc2VfcHVsbF9iZWZvcmVfcHVzaCgpOworCX0gZWxzZSBpZiAocmVqZWN0X3JlYXNvbnMgJiBSRUpFQ1RfTk9OX0ZGX09USEVSKSB7CisJCWFkdmlzZV9jaGVja291dF9wdWxsX3B1c2goKTsKKwl9IGVsc2UgaWYgKHJlamVjdF9yZWFzb25zICYgUkVKRUNUX0FMUkVBRFlfRVhJU1RTKSB7CisJCWFkdmlzZV9yZWZfYWxyZWFkeV9leGlzdHMoKTsKKwl9IGVsc2UgaWYgKHJlamVjdF9yZWFzb25zICYgUkVKRUNUX0ZFVENIX0ZJUlNUKSB7CisJCWFkdmlzZV9yZWZfZmV0Y2hfZmlyc3QoKTsKKwl9IGVsc2UgaWYgKHJlamVjdF9yZWFzb25zICYgUkVKRUNUX05FRURTX0ZPUkNFKSB7CisJCWFkdmlzZV9yZWZfbmVlZHNfZm9yY2UoKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkb19wdXNoKGNvbnN0IGNoYXIgKnJlcG8sIGludCBmbGFncywKKwkJICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnMsCisJCSAgIHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlpbnQgaSwgZXJyczsKKwljb25zdCBjaGFyICoqdXJsOworCWludCB1cmxfbnI7CisJc3RydWN0IHJlZnNwZWMgKnB1c2hfcmVmc3BlYyA9ICZyczsKKworCWlmIChwdXNoX29wdGlvbnMtPm5yKQorCQlmbGFncyB8PSBUUkFOU1BPUlRfUFVTSF9PUFRJT05TOworCisJaWYgKCFwdXNoX3JlZnNwZWMtPm5yICYmICEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpKSB7CisJCWlmIChyZW1vdGUtPnB1c2gubnIpIHsKKwkJCXB1c2hfcmVmc3BlYyA9ICZyZW1vdGUtPnB1c2g7CisJCX0gZWxzZSBpZiAoIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikpCisJCQlzZXR1cF9kZWZhdWx0X3B1c2hfcmVmc3BlY3MocmVtb3RlKTsKKwl9CisJZXJycyA9IDA7CisJdXJsX25yID0gcHVzaF91cmxfb2ZfcmVtb3RlKHJlbW90ZSwgJnVybCk7CisJaWYgKHVybF9ucikgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJsX25yOyBpKyspIHsKKwkJCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCA9CisJCQkJdHJhbnNwb3J0X2dldChyZW1vdGUsIHVybFtpXSk7CisJCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9PUFRJT05TKQorCQkJCXRyYW5zcG9ydC0+cHVzaF9vcHRpb25zID0gcHVzaF9vcHRpb25zOworCQkJaWYgKHB1c2hfd2l0aF9vcHRpb25zKHRyYW5zcG9ydCwgcHVzaF9yZWZzcGVjLCBmbGFncykpCisJCQkJZXJycysrOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0ID0KKwkJCXRyYW5zcG9ydF9nZXQocmVtb3RlLCBOVUxMKTsKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfT1BUSU9OUykKKwkJCXRyYW5zcG9ydC0+cHVzaF9vcHRpb25zID0gcHVzaF9vcHRpb25zOworCQlpZiAocHVzaF93aXRoX29wdGlvbnModHJhbnNwb3J0LCBwdXNoX3JlZnNwZWMsIGZsYWdzKSkKKwkJCWVycnMrKzsKKwl9CisJcmV0dXJuICEhZXJyczsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfcmVjdXJzZV9zdWJtb2R1bGVzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKnJlY3Vyc2Vfc3VibW9kdWxlcyA9IG9wdC0+dmFsdWU7CisKKwlpZiAodW5zZXQpCisJCSpyZWN1cnNlX3N1Ym1vZHVsZXMgPSBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGOworCWVsc2UgaWYgKGFyZykKKwkJKnJlY3Vyc2Vfc3VibW9kdWxlcyA9IHBhcnNlX3B1c2hfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZyhvcHQtPmxvbmdfbmFtZSwgYXJnKTsKKwllbHNlCisJCWRpZSgiJXMgbWlzc2luZyBwYXJhbWV0ZXIiLCBvcHQtPmxvbmdfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3B1c2hfY2VydF9mbGFncyhpbnQgKmZsYWdzLCBpbnQgdikKK3sKKwlzd2l0Y2ggKHYpIHsKKwljYXNlIFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI6CisJCSpmbGFncyAmPSB+KFRSQU5TUE9SVF9QVVNIX0NFUlRfQUxXQVlTIHwgVFJBTlNQT1JUX1BVU0hfQ0VSVF9JRl9BU0tFRCk7CisJCWJyZWFrOworCWNhc2UgU0VORF9QQUNLX1BVU0hfQ0VSVF9BTFdBWVM6CisJCSpmbGFncyB8PSBUUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUzsKKwkJKmZsYWdzICY9IH5UUkFOU1BPUlRfUFVTSF9DRVJUX0lGX0FTS0VEOworCQlicmVhazsKKwljYXNlIFNFTkRfUEFDS19QVVNIX0NFUlRfSUZfQVNLRUQ6CisJCSpmbGFncyB8PSBUUkFOU1BPUlRfUFVTSF9DRVJUX0lGX0FTS0VEOworCQkqZmxhZ3MgJj0gflRSQU5TUE9SVF9QVVNIX0NFUlRfQUxXQVlTOworCQlicmVhazsKKwl9Cit9CisKKworc3RhdGljIGludCBnaXRfcHVzaF9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCWludCAqZmxhZ3MgPSBjYjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gZ2l0X2dwZ19jb25maWcoaywgdiwgTlVMTCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmICghc3RyY21wKGssICJwdXNoLmZvbGxvd3RhZ3MiKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKGssIHYpKQorCQkJKmZsYWdzIHw9IFRSQU5TUE9SVF9QVVNIX0ZPTExPV19UQUdTOworCQllbHNlCisJCQkqZmxhZ3MgJj0gflRSQU5TUE9SVF9QVVNIX0ZPTExPV19UQUdTOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoaywgInB1c2guZ3Bnc2lnbiIpKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCQlpZiAoIWdpdF9jb25maWdfZ2V0X3ZhbHVlKCJwdXNoLmdwZ3NpZ24iLCAmdmFsdWUpKSB7CisJCQlzd2l0Y2ggKGdpdF9wYXJzZV9tYXliZV9ib29sKHZhbHVlKSkgeworCQkJY2FzZSAwOgorCQkJCXNldF9wdXNoX2NlcnRfZmxhZ3MoZmxhZ3MsIFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVIpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXNldF9wdXNoX2NlcnRfZmxhZ3MoZmxhZ3MsIFNFTkRfUEFDS19QVVNIX0NFUlRfQUxXQVlTKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiaWYtYXNrZWQiKSkKKwkJCQkJc2V0X3B1c2hfY2VydF9mbGFncyhmbGFncywgU0VORF9QQUNLX1BVU0hfQ0VSVF9JRl9BU0tFRCk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gZXJyb3IoIkludmFsaWQgdmFsdWUgZm9yICclcyciLCBrKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChrLCAicHVzaC5yZWN1cnNlc3VibW9kdWxlcyIpKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCQlpZiAoIWdpdF9jb25maWdfZ2V0X3ZhbHVlKCJwdXNoLnJlY3Vyc2VzdWJtb2R1bGVzIiwgJnZhbHVlKSkKKwkJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IHBhcnNlX3B1c2hfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZyhrLCB2YWx1ZSk7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJzdWJtb2R1bGUucmVjdXJzZSIpKSB7CisJCWludCB2YWwgPSBnaXRfY29uZmlnX2Jvb2woaywgdikgPworCQkJUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCA6IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IHZhbDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoaywgInB1c2gucHVzaG9wdGlvbiIpKSB7CisJCWlmICghdikKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJZWxzZQorCQkJaWYgKCEqdikKKwkJCQlzdHJpbmdfbGlzdF9jbGVhcigmcHVzaF9vcHRpb25zX2NvbmZpZywgMCk7CisJCQllbHNlCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZwdXNoX29wdGlvbnNfY29uZmlnLCB2KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJjb2xvci5wdXNoIikpIHsKKwkJcHVzaF91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChrLCAiY29sb3IucHVzaC4iLCAmc2xvdF9uYW1lKSkgeworCQlpbnQgc2xvdCA9IHBhcnNlX3B1c2hfY29sb3Jfc2xvdChzbG90X25hbWUpOworCQlpZiAoc2xvdCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKCF2KQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQlyZXR1cm4gY29sb3JfcGFyc2UodiwgcHVzaF9jb2xvcnNbc2xvdF0pOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdiwgTlVMTCk7Cit9CisKK2ludCBjbWRfcHVzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZmxhZ3MgPSAwOworCWludCB0YWdzID0gMDsKKwlpbnQgcHVzaF9jZXJ0ID0gLTE7CisJaW50IHJjOworCWNvbnN0IGNoYXIgKnJlcG8gPSBOVUxMOwkvKiBkZWZhdWx0IHJlcG9zaXRvcnkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcHVzaF9vcHRpb25zX2NtZGxpbmUgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9uczsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NJVFkoJnZlcmJvc2l0eSksCisJCU9QVF9TVFJJTkcoIDAgLCAicmVwbyIsICZyZXBvLCBOXygicmVwb3NpdG9yeSIpLCBOXygicmVwb3NpdG9yeSIpKSwKKwkJT1BUX0JJVCggMCAsICJhbGwiLCAmZmxhZ3MsIE5fKCJwdXNoIGFsbCByZWZzIiksIFRSQU5TUE9SVF9QVVNIX0FMTCksCisJCU9QVF9CSVQoIDAgLCAibWlycm9yIiwgJmZsYWdzLCBOXygibWlycm9yIGFsbCByZWZzIiksCisJCQkgICAgKFRSQU5TUE9SVF9QVVNIX01JUlJPUnxUUkFOU1BPUlRfUFVTSF9GT1JDRSkpLAorCQlPUFRfQk9PTCgnZCcsICJkZWxldGUiLCAmZGVsZXRlcmVmcywgTl8oImRlbGV0ZSByZWZzIikpLAorCQlPUFRfQk9PTCggMCAsICJ0YWdzIiwgJnRhZ3MsIE5fKCJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiKSksCisJCU9QVF9CSVQoJ24nICwgImRyeS1ydW4iLCAmZmxhZ3MsIE5fKCJkcnkgcnVuIiksIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pLAorCQlPUFRfQklUKCAwLCAgInBvcmNlbGFpbiIsICZmbGFncywgTl8oIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IiksIFRSQU5TUE9SVF9QVVNIX1BPUkNFTEFJTiksCisJCU9QVF9CSVQoJ2YnLCAiZm9yY2UiLCAmZmxhZ3MsIE5fKCJmb3JjZSB1cGRhdGVzIiksIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssCisJCSAgMCwgQ0FTX09QVF9OQU1FLCAmY2FzLCBOXygiPHJlZm5hbWU+OjxleHBlY3Q+IiksCisJCSAgTl8oInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAsIHBhcnNlb3B0X3B1c2hfY2FzX29wdGlvbiB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsICZyZWN1cnNlX3N1Ym1vZHVsZXMsICIoY2hlY2t8b24tZGVtYW5kfG5vKSIsCisJCQlOXygiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIiksCisJCQlQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fcGFyc2VfcmVjdXJzZV9zdWJtb2R1bGVzIH0sCisJCU9QVF9CT09MX0YoIDAgLCAidGhpbiIsICZ0aGluLCBOXygidXNlIHRoaW4gcGFjayIpLCBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9TVFJJTkcoIDAgLCAicmVjZWl2ZS1wYWNrIiwgJnJlY2VpdmVwYWNrLCAicmVjZWl2ZS1wYWNrIiwgTl8oInJlY2VpdmUgcGFjayBwcm9ncmFtIikpLAorCQlPUFRfU1RSSU5HKCAwICwgImV4ZWMiLCAmcmVjZWl2ZXBhY2ssICJyZWNlaXZlLXBhY2siLCBOXygicmVjZWl2ZSBwYWNrIHByb2dyYW0iKSksCisJCU9QVF9CSVQoJ3UnLCAic2V0LXVwc3RyZWFtIiwgJmZsYWdzLCBOXygic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiKSwKKwkJCVRSQU5TUE9SVF9QVVNIX1NFVF9VUFNUUkVBTSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywgTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0JJVCgwLCAicHJ1bmUiLCAmZmxhZ3MsIE5fKCJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIpLAorCQkJVFJBTlNQT1JUX1BVU0hfUFJVTkUpLAorCQlPUFRfQklUKDAsICJuby12ZXJpZnkiLCAmZmxhZ3MsIE5fKCJieXBhc3MgcHJlLXB1c2ggaG9vayIpLCBUUkFOU1BPUlRfUFVTSF9OT19IT09LKSwKKwkJT1BUX0JJVCgwLCAiZm9sbG93LXRhZ3MiLCAmZmxhZ3MsIE5fKCJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiKSwKKwkJCVRSQU5TUE9SVF9QVVNIX0ZPTExPV19UQUdTKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssCisJCSAgMCwgInNpZ25lZCIsICZwdXNoX2NlcnQsICIoeWVzfG5vfGlmLWFza2VkKSIsIE5fKCJHUEcgc2lnbiB0aGUgcHVzaCIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9wdXNoX3NpZ25lZCB9LAorCQlPUFRfQklUKDAsICJhdG9taWMiLCAmZmxhZ3MsIE5fKCJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIpLCBUUkFOU1BPUlRfUFVTSF9BVE9NSUMpLAorCQlPUFRfU1RSSU5HX0xJU1QoJ28nLCAicHVzaC1vcHRpb24iLCAmcHVzaF9vcHRpb25zX2NtZGxpbmUsIE5fKCJzZXJ2ZXItc3BlY2lmaWMiKSwgTl8oIm9wdGlvbiB0byB0cmFuc21pdCIpKSwKKwkJT1BUX1NFVF9JTlQoJzQnLCAiaXB2NCIsICZmYW1pbHksIE5fKCJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIpLAorCQkJCVRSQU5TUE9SVF9GQU1JTFlfSVBWNCksCisJCU9QVF9TRVRfSU5UKCc2JywgImlwdjYiLCAmZmFtaWx5LCBOXygidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiKSwKKwkJCQlUUkFOU1BPUlRfRkFNSUxZX0lQVjYpLAorCQlPUFRfRU5EKCkKKwl9OworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJwdXNoIik7CisJZ2l0X2NvbmZpZyhnaXRfcHVzaF9jb25maWcsICZmbGFncyk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBwdXNoX3VzYWdlLCAwKTsKKwlwdXNoX29wdGlvbnMgPSAocHVzaF9vcHRpb25zX2NtZGxpbmUubnIKKwkJPyAmcHVzaF9vcHRpb25zX2NtZGxpbmUKKwkJOiAmcHVzaF9vcHRpb25zX2NvbmZpZyk7CisJc2V0X3B1c2hfY2VydF9mbGFncygmZmxhZ3MsIHB1c2hfY2VydCk7CisKKwlpZiAoZGVsZXRlcmVmcyAmJiAodGFncyB8fCAoZmxhZ3MgJiAoVFJBTlNQT1JUX1BVU0hfQUxMIHwgVFJBTlNQT1JUX1BVU0hfTUlSUk9SKSkpKQorCQlkaWUoXygiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiKSk7CisJaWYgKGRlbGV0ZXJlZnMgJiYgYXJnYyA8IDIpCisJCWRpZShfKCItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIpKTsKKworCWlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX0NIRUNLKQorCQlmbGFncyB8PSBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX0NIRUNLOworCWVsc2UgaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EKQorCQlmbGFncyB8PSBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORDsKKwllbHNlIGlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OTFkpCisJCWZsYWdzIHw9IFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05MWTsKKworCWlmICh0YWdzKQorCQlyZWZzcGVjX2FwcGVuZCgmcnMsICJyZWZzL3RhZ3MvKiIpOworCisJaWYgKGFyZ2MgPiAwKSB7CisJCXJlcG8gPSBhcmd2WzBdOworCQlzZXRfcmVmc3BlY3MoYXJndiArIDEsIGFyZ2MgLSAxLCByZXBvKTsKKwl9CisKKwlyZW1vdGUgPSBwdXNocmVtb3RlX2dldChyZXBvKTsKKwlpZiAoIXJlbW90ZSkgeworCQlpZiAocmVwbykKKwkJCWRpZShfKCJiYWQgcmVwb3NpdG9yeSAnJXMnIiksIHJlcG8pOworCQlkaWUoXygiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorCQkgICAgIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSByZXBvc2l0b3J5IHVzaW5nXG4iCisJCSAgICAiXG4iCisJCSAgICAiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorCQkgICAgIlxuIgorCQkgICAgImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisJCSAgICAiXG4iCisJCSAgICAiICAgIGdpdCBwdXNoIDxuYW1lPlxuIikpOworCX0KKworCWlmIChyZW1vdGUtPm1pcnJvcikKKwkJZmxhZ3MgfD0gKFRSQU5TUE9SVF9QVVNIX01JUlJPUnxUUkFOU1BPUlRfUFVTSF9GT1JDRSk7CisKKwlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpIHsKKwkJaWYgKHRhZ3MpCisJCQlkaWUoXygiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIikpOworCQlpZiAoYXJnYyA+PSAyKQorCQkJZGllKF8oIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiKSk7CisJfQorCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikgeworCQlpZiAodGFncykKKwkJCWRpZShfKCItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiKSk7CisJCWlmIChhcmdjID49IDIpCisJCQlkaWUoXygiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIpKTsKKwl9CisJaWYgKChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkgJiYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SKSkKKwkJZGllKF8oIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIikpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBwdXNoX29wdGlvbnMpCisJCWlmIChzdHJjaHIoaXRlbS0+c3RyaW5nLCAnXG4nKSkKKwkJCWRpZShfKCJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIikpOworCisJcmMgPSBkb19wdXNoKHJlcG8sIGZsYWdzLCBwdXNoX29wdGlvbnMsIHJlbW90ZSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnB1c2hfb3B0aW9uc19jbWRsaW5lLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmcHVzaF9vcHRpb25zX2NvbmZpZywgMCk7CisJaWYgKHJjID09IC0xKQorCQl1c2FnZV93aXRoX29wdGlvbnMocHVzaF91c2FnZSwgb3B0aW9ucyk7CisJZWxzZQorCQlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JhbmdlLWRpZmYuYyBiL2J1aWx0aW4vcmFuZ2UtZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTQ2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JhbmdlLWRpZmYuYwpAQCAtMCwwICsxLDkyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJhbmdlLWRpZmYuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JhbmdlX2RpZmZfdXNhZ2VbXSA9IHsKK05fKCJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IiksCitOXygiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IiksCitOXygiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPGJhc2U+IDxvbGQtdGlwPiA8bmV3LXRpcD4iKSwKK05VTEwKK307CisKK2ludCBjbWRfcmFuZ2VfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgY3JlYXRpb25fZmFjdG9yID0gUkFOR0VfRElGRl9DUkVBVElPTl9GQUNUT1JfREVGQVVMVDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHQgPSB7IE5VTEwgfTsKKwlzdHJ1Y3QgYXJndl9hcnJheSBvdGhlcl9hcmcgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IHNpbXBsZV9jb2xvciA9IC0xOworCXN0cnVjdCBvcHRpb24gcmFuZ2VfZGlmZl9vcHRpb25zW10gPSB7CisJCU9QVF9JTlRFR0VSKDAsICJjcmVhdGlvbi1mYWN0b3IiLCAmY3JlYXRpb25fZmFjdG9yLAorCQkJICAgIE5fKCJQZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIikpLAorCQlPUFRfQk9PTCgwLCAibm8tZHVhbC1jb2xvciIsICZzaW1wbGVfY29sb3IsCisJCQkgICAgTl8oInVzZSBzaW1wbGUgZGlmZiBjb2xvcnMiKSksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJub3RlcyIsICZvdGhlcl9hcmcsCisJCQkJICBOXygibm90ZXMiKSwgTl8oInBhc3NlZCB0byAnZ2l0IGxvZyciKSwKKwkJCQkgIFBBUlNFX09QVF9PUFRBUkcpLAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCBvcHRpb24gKm9wdGlvbnM7CisJaW50IHJlcyA9IDA7CisJc3RydWN0IHN0cmJ1ZiByYW5nZTEgPSBTVFJCVUZfSU5JVCwgcmFuZ2UyID0gU1RSQlVGX0lOSVQ7CisKKwlnaXRfY29uZmlnKGdpdF9kaWZmX3VpX2NvbmZpZywgTlVMTCk7CisKKwlyZXBvX2RpZmZfc2V0dXAodGhlX3JlcG9zaXRvcnksICZkaWZmb3B0KTsKKworCW9wdGlvbnMgPSBwYXJzZV9vcHRpb25zX2NvbmNhdChyYW5nZV9kaWZmX29wdGlvbnMsIGRpZmZvcHQucGFyc2VvcHRzKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fcmFuZ2VfZGlmZl91c2FnZSwgMCk7CisKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZvcHQpOworCisJLyogZm9yY2UgY29sb3Igd2hlbiAtLWR1YWwtY29sb3Igd2FzIHVzZWQgKi8KKwlpZiAoIXNpbXBsZV9jb2xvcikKKwkJZGlmZm9wdC51c2VfY29sb3IgPSAxOworCisJaWYgKGFyZ2MgPT0gMikgeworCQlpZiAoIXN0cnN0cihhcmd2WzBdLCAiLi4iKSkKKwkJCWRpZShfKCJubyAuLiBpbiByYW5nZTogJyVzJyIpLCBhcmd2WzBdKTsKKwkJc3RyYnVmX2FkZHN0cigmcmFuZ2UxLCBhcmd2WzBdKTsKKworCQlpZiAoIXN0cnN0cihhcmd2WzFdLCAiLi4iKSkKKwkJCWRpZShfKCJubyAuLiBpbiByYW5nZTogJyVzJyIpLCBhcmd2WzFdKTsKKwkJc3RyYnVmX2FkZHN0cigmcmFuZ2UyLCBhcmd2WzFdKTsKKwl9IGVsc2UgaWYgKGFyZ2MgPT0gMykgeworCQlzdHJidWZfYWRkZigmcmFuZ2UxLCAiJXMuLiVzIiwgYXJndlswXSwgYXJndlsxXSk7CisJCXN0cmJ1Zl9hZGRmKCZyYW5nZTIsICIlcy4uJXMiLCBhcmd2WzBdLCBhcmd2WzJdKTsKKwl9IGVsc2UgaWYgKGFyZ2MgPT0gMSkgeworCQljb25zdCBjaGFyICpiID0gc3Ryc3RyKGFyZ3ZbMF0sICIuLi4iKSwgKmEgPSBhcmd2WzBdOworCQlpbnQgYV9sZW47CisKKwkJaWYgKCFiKSB7CisJCQllcnJvcihfKCJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIpKTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JhbmdlX2RpZmZfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisKKwkJYV9sZW4gPSAoaW50KShiIC0gYSk7CisJCWlmICghYV9sZW4pIHsKKwkJCWEgPSAiSEVBRCI7CisJCQlhX2xlbiA9IHN0cmxlbihhKTsKKwkJfQorCQliICs9IDM7CisJCWlmICghKmIpCisJCQliID0gIkhFQUQiOworCQlzdHJidWZfYWRkZigmcmFuZ2UxLCAiJXMuLiUuKnMiLCBiLCBhX2xlbiwgYSk7CisJCXN0cmJ1Zl9hZGRmKCZyYW5nZTIsICIlLipzLi4lcyIsIGFfbGVuLCBhLCBiKTsKKwl9IGVsc2UgeworCQllcnJvcihfKCJuZWVkIHR3byBjb21taXQgcmFuZ2VzIikpOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yYW5nZV9kaWZmX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJRlJFRV9BTkRfTlVMTChvcHRpb25zKTsKKworCXJlcyA9IHNob3dfcmFuZ2VfZGlmZihyYW5nZTEuYnVmLCByYW5nZTIuYnVmLCBjcmVhdGlvbl9mYWN0b3IsCisJCQkgICAgICBzaW1wbGVfY29sb3IgPCAxLCAmZGlmZm9wdCwgJm90aGVyX2FyZyk7CisKKwlhcmd2X2FycmF5X2NsZWFyKCZvdGhlcl9hcmcpOworCXN0cmJ1Zl9yZWxlYXNlKCZyYW5nZTEpOworCXN0cmJ1Zl9yZWxlYXNlKCZyYW5nZTIpOworCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVhZC10cmVlLmMgYi9idWlsdGluL3JlYWQtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzQyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlYWQtdHJlZS5jCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorCitzdGF0aWMgaW50IG5yX3RyZWVzOworc3RhdGljIGludCByZWFkX2VtcHR5Oworc3RhdGljIHN0cnVjdCB0cmVlICp0cmVlc1tNQVhfVU5QQUNLX1RSRUVTXTsKKworc3RhdGljIGludCBsaXN0X3RyZWUoc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCB0cmVlICp0cmVlOworCisJaWYgKG5yX3RyZWVzID49IE1BWF9VTlBBQ0tfVFJFRVMpCisJCWRpZSgiSSBjYW5ub3QgcmVhZCBtb3JlIHRoYW4gJWQgdHJlZXMiLCBNQVhfVU5QQUNLX1RSRUVTKTsKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvaWQpOworCWlmICghdHJlZSkKKwkJcmV0dXJuIC0xOworCXRyZWVzW25yX3RyZWVzKytdID0gdHJlZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZWFkX3RyZWVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSBbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS1pbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGluZGV4X291dHB1dF9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCQkgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlzZXRfYWx0ZXJuYXRlX2luZGV4X291dHB1dChhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4Y2x1ZGVfcGVyX2RpcmVjdG9yeV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCQkgICAgaW50IHVuc2V0KQoreworCXN0cnVjdCBkaXJfc3RydWN0ICpkaXI7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRzOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJb3B0cyA9IChzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKilvcHQtPnZhbHVlOworCisJaWYgKG9wdHMtPmRpcikKKwkJZGllKCJtb3JlIHRoYW4gb25lIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5IGdpdmVuLiIpOworCisJZGlyID0geGNhbGxvYygxLCBzaXplb2YoKm9wdHMtPmRpcikpOworCWRpci0+ZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRDsKKwlkaXItPmV4Y2x1ZGVfcGVyX2RpciA9IGFyZzsKKwlvcHRzLT5kaXIgPSBkaXI7CisJLyogV2UgZG8gbm90IG5lZWQgdG8gbm9yIHdhbnQgdG8gZG8gcmVhZC1kaXJlY3RvcnkKKwkgKiBoZXJlOyB3ZSBhcmUgbWVyZWx5IGludGVyZXN0ZWQgaW4gcmV1c2luZyB0aGUKKwkgKiBwZXIgZGlyZWN0b3J5IGlnbm9yZSBzdGFjayBtZWNoYW5pc20uCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3N0YWdlKGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXByaW50ZigiJXMgIiwgbGFiZWwpOworCWlmICghY2UpCisJCXByaW50ZigiKG1pc3NpbmcpXG4iKTsKKwllbHNlIGlmIChjZSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJcHJpbnRmKCIoY29uZmxpY3QpXG4iKTsKKwllbHNlCisJCXByaW50ZigiJTA2byAjJWQgJXMgJS44c1xuIiwKKwkJICAgICAgIGNlLT5jZV9tb2RlLCBjZV9zdGFnZShjZSksIGNlLT5uYW1lLAorCQkgICAgICAgb2lkX3RvX2hleCgmY2UtPm9pZCkpOworfQorCitzdGF0aWMgaW50IGRlYnVnX21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzdGFnZXMsCisJCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IGk7CisKKwlwcmludGYoIiogJWQtd2F5IG1lcmdlXG4iLCBvLT5tZXJnZV9zaXplKTsKKwlkZWJ1Z19zdGFnZSgiaW5kZXgiLCBzdGFnZXNbMF0sIG8pOworCWZvciAoaSA9IDE7IGkgPD0gby0+bWVyZ2Vfc2l6ZTsgaSsrKSB7CisJCWNoYXIgYnVmWzI0XTsKKwkJeHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJlbnQjJWQiLCBpKTsKKwkJZGVidWdfc3RhZ2UoYnVmLCBzdGFnZXNbaV0sIG8pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfcmVhZF90cmVlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJzdWJtb2R1bGUucmVjdXJzZSIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfc3VibW9kdWxlX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF9yZWFkX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpjbWRfcHJlZml4KQoreworCWludCBpLCBzdGFnZSA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCWludCBwcmVmaXhfc2V0ID0gMDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHJlYWRfdHJlZV9vcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaW5kZXgtb3V0cHV0IiwgTlVMTCwgTl8oImZpbGUiKSwKKwkJICBOXygid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIpLAorCQkgIFBBUlNFX09QVF9OT05FRywgaW5kZXhfb3V0cHV0X2NiIH0sCisJCU9QVF9CT09MKDAsICJlbXB0eSIsICZyZWFkX2VtcHR5LAorCQkJICAgIE5fKCJvbmx5IGVtcHR5IHRoZSBpbmRleCIpKSwKKwkJT1BUX19WRVJCT1NFKCZvcHRzLnZlcmJvc2VfdXBkYXRlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0dST1VQKE5fKCJNZXJnaW5nIikpLAorCQlPUFRfQk9PTCgnbScsIE5VTEwsICZvcHRzLm1lcmdlLAorCQkJIE5fKCJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIikpLAorCQlPUFRfQk9PTCgwLCAidHJpdmlhbCIsICZvcHRzLnRyaXZpYWxfbWVyZ2VzX29ubHksCisJCQkgTl8oIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIpKSwKKwkJT1BUX0JPT0woMCwgImFnZ3Jlc3NpdmUiLCAmb3B0cy5hZ2dyZXNzaXZlLAorCQkJIE5fKCIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIikpLAorCQlPUFRfQk9PTCgwLCAicmVzZXQiLCAmb3B0cy5yZXNldCwKKwkJCSBOXygic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAicHJlZml4IiwgJm9wdHMucHJlZml4LCBOXygiPHN1YmRpcmVjdG9yeT4vIiksCisJCSAgTl8oInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIiksCisJCSAgUEFSU0VfT1BUX05PTkVHIH0sCisJCU9QVF9CT09MKCd1JywgTlVMTCwgJm9wdHMudXBkYXRlLAorCQkJIE5fKCJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImV4Y2x1ZGUtcGVyLWRpcmVjdG9yeSIsICZvcHRzLAorCQkgIE5fKCJnaXRpZ25vcmUiKSwKKwkJICBOXygiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIiksCisJCSAgUEFSU0VfT1BUX05PTkVHLCBleGNsdWRlX3Blcl9kaXJlY3RvcnlfY2IgfSwKKwkJT1BUX0JPT0woJ2knLCBOVUxMLCAmb3B0cy5pbmRleF9vbmx5LAorCQkJIE5fKCJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciKSksCisJCU9QVF9fRFJZX1JVTigmb3B0cy5kcnlfcnVuLCBOXygiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIikpLAorCQlPUFRfQk9PTCgwLCAibm8tc3BhcnNlLWNoZWNrb3V0IiwgJm9wdHMuc2tpcF9zcGFyc2VfY2hlY2tvdXQsCisJCQkgTl8oInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIpKSwKKwkJT1BUX0JPT0woMCwgImRlYnVnLXVucGFjayIsICZvcHRzLmRlYnVnX3VucGFjaywKKwkJCSBOXygiZGVidWcgdW5wYWNrLXRyZWVzIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsIE5VTEwsCisJCQkgICAgImNoZWNrb3V0IiwgImNvbnRyb2wgcmVjdXJzaXZlIHVwZGF0aW5nIG9mIHN1Ym1vZHVsZXMiLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXNfd29ya3RyZWVfdXBkYXRlciB9LAorCQlPUFRfX1FVSUVUKCZvcHRzLnF1aWV0LCBOXygic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IC0xOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwlnaXRfY29uZmlnKGdpdF9yZWFkX3RyZWVfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGNtZF9wcmVmaXgsIHJlYWRfdHJlZV9vcHRpb25zLAorCQkJICAgICByZWFkX3RyZWVfdXNhZ2UsIDApOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCisJcHJlZml4X3NldCA9IG9wdHMucHJlZml4ID8gMSA6IDA7CisJaWYgKDEgPCBvcHRzLm1lcmdlICsgb3B0cy5yZXNldCArIHByZWZpeF9zZXQpCisJCWRpZSgiV2hpY2ggb25lPyAtbSwgLS1yZXNldCwgb3IgLS1wcmVmaXg/Iik7CisKKwkvKgorCSAqIE5FRURTV09SSworCSAqCisJICogVGhlIG9sZCBpbmRleCBzaG91bGQgYmUgcmVhZCBhbnl3YXkgZXZlbiBpZiB3ZSdyZSBnb2luZyB0bworCSAqIGRlc3Ryb3kgYWxsIGluZGV4IGVudHJpZXMgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIHByZXNlcnZlCisJICogY2VydGFpbiBpbmZvcm1hdGlvbiBzdWNoIGFzIGluZGV4IHZlcnNpb24gb3Igc3BsaXQtaW5kZXgKKwkgKiBtb2RlLgorCSAqLworCisJaWYgKG9wdHMucmVzZXQgfHwgb3B0cy5tZXJnZSB8fCBvcHRzLnByZWZpeCkgeworCQlpZiAocmVhZF9jYWNoZV91bm1lcmdlZCgpICYmIChvcHRzLnByZWZpeCB8fCBvcHRzLm1lcmdlKSkKKwkJCWRpZShfKCJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIpKTsKKwkJc3RhZ2UgPSBvcHRzLm1lcmdlID0gMTsKKwl9CisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKGdldF9vaWQoYXJnLCAmb2lkKSkKKwkJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmcpOworCQlpZiAobGlzdF90cmVlKCZvaWQpIDwgMCkKKwkJCWRpZSgiZmFpbGVkIHRvIHVucGFjayB0cmVlIG9iamVjdCAlcyIsIGFyZyk7CisJCXN0YWdlKys7CisJfQorCWlmICghbnJfdHJlZXMgJiYgIXJlYWRfZW1wdHkgJiYgIW9wdHMubWVyZ2UpCisJCXdhcm5pbmcoInJlYWQtdHJlZTogZW1wdHlpbmcgdGhlIGluZGV4IHdpdGggbm8gYXJndW1lbnRzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAtLWVtcHR5Iik7CisJZWxzZSBpZiAobnJfdHJlZXMgPiAwICYmIHJlYWRfZW1wdHkpCisJCWRpZSgicGFzc2luZyB0cmVlcyBhcyBhcmd1bWVudHMgY29udHJhZGljdHMgLS1lbXB0eSIpOworCisJaWYgKDEgPCBvcHRzLmluZGV4X29ubHkgKyBvcHRzLnVwZGF0ZSkKKwkJZGllKCItdSBhbmQgLWkgYXQgdGhlIHNhbWUgdGltZSBtYWtlcyBubyBzZW5zZSIpOworCWlmICgob3B0cy51cGRhdGUgfHwgb3B0cy5pbmRleF9vbmx5KSAmJiAhb3B0cy5tZXJnZSkKKwkJZGllKCIlcyBpcyBtZWFuaW5nbGVzcyB3aXRob3V0IC1tLCAtLXJlc2V0LCBvciAtLXByZWZpeCIsCisJCSAgICBvcHRzLnVwZGF0ZSA/ICItdSIgOiAiLWkiKTsKKwlpZiAoKG9wdHMuZGlyICYmICFvcHRzLnVwZGF0ZSkpCisJCWRpZSgiLS1leGNsdWRlLXBlci1kaXJlY3RvcnkgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIC11Iik7CisJaWYgKG9wdHMubWVyZ2UgJiYgIW9wdHMuaW5kZXhfb25seSkKKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwlpZiAob3B0cy5tZXJnZSkgeworCQlzd2l0Y2ggKHN0YWdlIC0gMSkgeworCQljYXNlIDA6CisJCQlkaWUoInlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIHRyZWUgdG8gbWVyZ2UiKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlvcHRzLmZuID0gb3B0cy5wcmVmaXggPyBiaW5kX21lcmdlIDogb25ld2F5X21lcmdlOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCW9wdHMuZm4gPSB0d293YXlfbWVyZ2U7CisJCQlvcHRzLmluaXRpYWxfY2hlY2tvdXQgPSBpc19jYWNoZV91bmJvcm4oKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCWRlZmF1bHQ6CisJCQlvcHRzLmZuID0gdGhyZWV3YXlfbWVyZ2U7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzdGFnZSAtIDEgPj0gMykKKwkJCW9wdHMuaGVhZF9pZHggPSBzdGFnZSAtIDI7CisJCWVsc2UKKwkJCW9wdHMuaGVhZF9pZHggPSAxOworCX0KKworCWlmIChvcHRzLmRlYnVnX3VucGFjaykKKwkJb3B0cy5mbiA9IGRlYnVnX21lcmdlOworCisJY2FjaGVfdHJlZV9mcmVlKCZhY3RpdmVfY2FjaGVfdHJlZSk7CisJZm9yIChpID0gMDsgaSA8IG5yX3RyZWVzOyBpKyspIHsKKwkJc3RydWN0IHRyZWUgKnRyZWUgPSB0cmVlc1tpXTsKKwkJcGFyc2VfdHJlZSh0cmVlKTsKKwkJaW5pdF90cmVlX2Rlc2ModCtpLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCX0KKwlpZiAodW5wYWNrX3RyZWVzKG5yX3RyZWVzLCB0LCAmb3B0cykpCisJCXJldHVybiAxMjg7CisKKwlpZiAob3B0cy5kZWJ1Z191bnBhY2sgfHwgb3B0cy5kcnlfcnVuKQorCQlyZXR1cm4gMDsgLyogZG8gbm90IHdyaXRlIHRoZSBpbmRleCBvdXQgKi8KKworCS8qCisJICogV2hlbiByZWFkaW5nIG9ubHkgb25lIHRyZWUgKGVpdGhlciB0aGUgbW9zdCBiYXNpYyBmb3JtLAorCSAqICItbSBlbnQiIG9yICItLXJlc2V0IGVudCIgZm9ybSksIHdlIGNhbiBvYnRhaW4gYSBmdWxseQorCSAqIHZhbGlkIGNhY2hlLXRyZWUgYmVjYXVzZSB0aGUgaW5kZXggbXVzdCBtYXRjaCBleGFjdGx5CisJICogd2hhdCBjYW1lIGZyb20gdGhlIHRyZWUuCisJICovCisJaWYgKG5yX3RyZWVzID09IDEgJiYgIW9wdHMucHJlZml4KQorCQlwcmltZV9jYWNoZV90cmVlKHRoZV9yZXBvc2l0b3J5LAorCQkJCSB0aGVfcmVwb3NpdG9yeS0+aW5kZXgsCisJCQkJIHRyZWVzWzBdKTsKKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQlkaWUoInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZWJhc2UuYyBiL2J1aWx0aW4vcmViYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmNTNkNQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmViYXNlLmMKQEAgLTAsMCArMSwyMjg1IEBACisvKgorICogImdpdCByZWJhc2UiIGJ1aWx0aW4gY29tbWFuZAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBQcmF0aWsgS2Fya2kKKyAqLworCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJyZXJlcmUuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKyNpbmNsdWRlICJyZWJhc2UtaW50ZXJhY3RpdmUuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBidWlsdGluX3JlYmFzZV91c2FnZVtdID0geworCU5fKCJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dICIKKwkJIlstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdIFs8dXBzdHJlYW0+IFs8YnJhbmNoPl1dIiksCisJTl8oImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dICIKKwkJIi0tcm9vdCBbPGJyYW5jaD5dIiksCisJTl8oImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIpLAorCU5VTEwKK307CisKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHBhdGhfc3F1YXNoX29udG8sICJyZWJhc2UtbWVyZ2Uvc3F1YXNoLW9udG8iKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocGF0aF9pbnRlcmFjdGl2ZSwgInJlYmFzZS1tZXJnZS9pbnRlcmFjdGl2ZSIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhhcHBseV9kaXIsICJyZWJhc2UtYXBwbHkiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMobWVyZ2VfZGlyLCAicmViYXNlLW1lcmdlIikKKworZW51bSByZWJhc2VfdHlwZSB7CisJUkVCQVNFX1VOU1BFQ0lGSUVEID0gLTEsCisJUkVCQVNFX0FQUExZLAorCVJFQkFTRV9NRVJHRSwKKwlSRUJBU0VfUFJFU0VSVkVfTUVSR0VTCit9OworCitlbnVtIGVtcHR5X3R5cGUgeworCUVNUFRZX1VOU1BFQ0lGSUVEID0gLTEsCisJRU1QVFlfRFJPUCwKKwlFTVBUWV9LRUVQLAorCUVNUFRZX0FTSworfTsKKworc3RydWN0IHJlYmFzZV9vcHRpb25zIHsKKwllbnVtIHJlYmFzZV90eXBlIHR5cGU7CisJZW51bSBlbXB0eV90eXBlIGVtcHR5OworCWNvbnN0IGNoYXIgKmRlZmF1bHRfYmFja2VuZDsKKwljb25zdCBjaGFyICpzdGF0ZV9kaXI7CisJc3RydWN0IGNvbW1pdCAqdXBzdHJlYW07CisJY29uc3QgY2hhciAqdXBzdHJlYW1fbmFtZTsKKwljb25zdCBjaGFyICp1cHN0cmVhbV9hcmc7CisJY2hhciAqaGVhZF9uYW1lOworCXN0cnVjdCBvYmplY3RfaWQgb3JpZ19oZWFkOworCXN0cnVjdCBjb21taXQgKm9udG87CisJY29uc3QgY2hhciAqb250b19uYW1lOworCWNvbnN0IGNoYXIgKnJldmlzaW9uczsKKwljb25zdCBjaGFyICpzd2l0Y2hfdG87CisJaW50IHJvb3QsIHJvb3Rfd2l0aF9vbnRvOworCXN0cnVjdCBvYmplY3RfaWQgKnNxdWFzaF9vbnRvOworCXN0cnVjdCBjb21taXQgKnJlc3RyaWN0X3JldmlzaW9uOworCWludCBkb250X2ZpbmlzaF9yZWJhc2U7CisJZW51bSB7CisJCVJFQkFTRV9OT19RVUlFVCA9IDE8PDAsCisJCVJFQkFTRV9WRVJCT1NFID0gMTw8MSwKKwkJUkVCQVNFX0RJRkZTVEFUID0gMTw8MiwKKwkJUkVCQVNFX0ZPUkNFID0gMTw8MywKKwkJUkVCQVNFX0lOVEVSQUNUSVZFX0VYUExJQ0lUID0gMTw8NCwKKwl9IGZsYWdzOworCXN0cnVjdCBhcmd2X2FycmF5IGdpdF9hbV9vcHRzOworCWNvbnN0IGNoYXIgKmFjdGlvbjsKKwlpbnQgc2lnbm9mZjsKKwlpbnQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU7CisJaW50IGF1dG9zcXVhc2g7CisJY2hhciAqZ3BnX3NpZ25fb3B0OworCWludCBhdXRvc3Rhc2g7CisJY2hhciAqY21kOworCWludCBhbGxvd19lbXB0eV9tZXNzYWdlOworCWludCByZWJhc2VfbWVyZ2VzLCByZWJhc2VfY291c2luczsKKwljaGFyICpzdHJhdGVneSwgKnN0cmF0ZWd5X29wdHM7CisJc3RydWN0IHN0cmJ1ZiBnaXRfZm9ybWF0X3BhdGNoX29wdDsKKwlpbnQgcmVzY2hlZHVsZV9mYWlsZWRfZXhlYzsKKwlpbnQgdXNlX2xlZ2FjeV9yZWJhc2U7Cit9OworCisjZGVmaW5lIFJFQkFTRV9PUFRJT05TX0lOSVQgewkJCSAgCVwKKwkJLnR5cGUgPSBSRUJBU0VfVU5TUEVDSUZJRUQsCSAgCVwKKwkJLmVtcHR5ID0gRU1QVFlfVU5TUEVDSUZJRUQsCSAgCVwKKwkJLmRlZmF1bHRfYmFja2VuZCA9ICJtZXJnZSIsCSAgCVwKKwkJLmZsYWdzID0gUkVCQVNFX05PX1FVSUVULCAJCVwKKwkJLmdpdF9hbV9vcHRzID0gQVJHVl9BUlJBWV9JTklULAkJXAorCQkuZ2l0X2Zvcm1hdF9wYXRjaF9vcHQgPSBTVFJCVUZfSU5JVAlcCisJfQorCitzdGF0aWMgc3RydWN0IHJlcGxheV9vcHRzIGdldF9yZXBsYXlfb3B0cyhjb25zdCBzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IHJlcGxheV9vcHRzIHJlcGxheSA9IFJFUExBWV9PUFRTX0lOSVQ7CisKKwlyZXBsYXkuYWN0aW9uID0gUkVQTEFZX0lOVEVSQUNUSVZFX1JFQkFTRTsKKwlzZXF1ZW5jZXJfaW5pdF9jb25maWcoJnJlcGxheSk7CisKKwlyZXBsYXkuc2lnbm9mZiA9IG9wdHMtPnNpZ25vZmY7CisJcmVwbGF5LmFsbG93X2ZmID0gIShvcHRzLT5mbGFncyAmIFJFQkFTRV9GT1JDRSk7CisJaWYgKG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlKQorCQlyZXBsYXkuYWxsb3dfcmVyZXJlX2F1dG8gPSBvcHRzLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTsKKwlyZXBsYXkuYWxsb3dfZW1wdHkgPSAxOworCXJlcGxheS5hbGxvd19lbXB0eV9tZXNzYWdlID0gb3B0cy0+YWxsb3dfZW1wdHlfbWVzc2FnZTsKKwlyZXBsYXkuZHJvcF9yZWR1bmRhbnRfY29tbWl0cyA9IChvcHRzLT5lbXB0eSA9PSBFTVBUWV9EUk9QKTsKKwlyZXBsYXkua2VlcF9yZWR1bmRhbnRfY29tbWl0cyA9IChvcHRzLT5lbXB0eSA9PSBFTVBUWV9LRUVQKTsKKwlyZXBsYXkucXVpZXQgPSAhKG9wdHMtPmZsYWdzICYgUkVCQVNFX05PX1FVSUVUKTsKKwlyZXBsYXkudmVyYm9zZSA9IG9wdHMtPmZsYWdzICYgUkVCQVNFX1ZFUkJPU0U7CisJcmVwbGF5LnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMgPSBvcHRzLT5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjOworCXJlcGxheS5ncGdfc2lnbiA9IHhzdHJkdXBfb3JfbnVsbChvcHRzLT5ncGdfc2lnbl9vcHQpOworCXJlcGxheS5zdHJhdGVneSA9IG9wdHMtPnN0cmF0ZWd5OworCWlmIChvcHRzLT5zdHJhdGVneV9vcHRzKQorCQlwYXJzZV9zdHJhdGVneV9vcHRzKCZyZXBsYXksIG9wdHMtPnN0cmF0ZWd5X29wdHMpOworCisJaWYgKG9wdHMtPnNxdWFzaF9vbnRvKSB7CisJCW9pZGNweSgmcmVwbGF5LnNxdWFzaF9vbnRvLCBvcHRzLT5zcXVhc2hfb250byk7CisJCXJlcGxheS5oYXZlX3NxdWFzaF9vbnRvID0gMTsKKwl9CisKKwlyZXR1cm4gcmVwbGF5OworfQorCitlbnVtIGFjdGlvbiB7CisJQUNUSU9OX05PTkUgPSAwLAorCUFDVElPTl9DT05USU5VRSwKKwlBQ1RJT05fU0tJUCwKKwlBQ1RJT05fQUJPUlQsCisJQUNUSU9OX1FVSVQsCisJQUNUSU9OX0VESVRfVE9ETywKKwlBQ1RJT05fU0hPV19DVVJSRU5UX1BBVENILAorCUFDVElPTl9TSE9SVEVOX09JRFMsCisJQUNUSU9OX0VYUEFORF9PSURTLAorCUFDVElPTl9DSEVDS19UT0RPX0xJU1QsCisJQUNUSU9OX1JFQVJSQU5HRV9TUVVBU0gsCisJQUNUSU9OX0FERF9FWEVDCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqYWN0aW9uX25hbWVzW10gPSB7ICJ1bmRlZmluZWQiLAorCQkJCSAgICAgICJjb250aW51ZSIsCisJCQkJICAgICAgInNraXAiLAorCQkJCSAgICAgICJhYm9ydCIsCisJCQkJICAgICAgInF1aXQiLAorCQkJCSAgICAgICJlZGl0X3RvZG8iLAorCQkJCSAgICAgICJzaG93X2N1cnJlbnRfcGF0Y2giIH07CisKK3N0YXRpYyBpbnQgYWRkX2V4ZWNfY29tbWFuZHMoc3RydWN0IHN0cmluZ19saXN0ICpjb21tYW5kcykKK3sKKwljb25zdCBjaGFyICp0b2RvX2ZpbGUgPSByZWJhc2VfcGF0aF90b2RvKCk7CisJc3RydWN0IHRvZG9fbGlzdCB0b2RvX2xpc3QgPSBUT0RPX0xJU1RfSU5JVDsKKwlpbnQgcmVzOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnRvZG9fbGlzdC5idWYsIHRvZG9fZmlsZSwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHJlYWQgJyVzJy4iKSwgdG9kb19maWxlKTsKKworCWlmICh0b2RvX2xpc3RfcGFyc2VfaW5zbl9idWZmZXIodGhlX3JlcG9zaXRvcnksIHRvZG9fbGlzdC5idWYuYnVmLAorCQkJCQkmdG9kb19saXN0KSkgeworCQl0b2RvX2xpc3RfcmVsZWFzZSgmdG9kb19saXN0KTsKKwkJcmV0dXJuIGVycm9yKF8oInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIpLCB0b2RvX2ZpbGUpOworCX0KKworCXRvZG9fbGlzdF9hZGRfZXhlY19jb21tYW5kcygmdG9kb19saXN0LCBjb21tYW5kcyk7CisJcmVzID0gdG9kb19saXN0X3dyaXRlX3RvX2ZpbGUodGhlX3JlcG9zaXRvcnksICZ0b2RvX2xpc3QsCisJCQkJICAgICAgdG9kb19maWxlLCBOVUxMLCBOVUxMLCAtMSwgMCk7CisJdG9kb19saXN0X3JlbGVhc2UoJnRvZG9fbGlzdCk7CisKKwlpZiAocmVzKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcycuIiksIHRvZG9fZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhcnJhbmdlX3NxdWFzaF9pbl90b2RvX2ZpbGUodm9pZCkKK3sKKwljb25zdCBjaGFyICp0b2RvX2ZpbGUgPSByZWJhc2VfcGF0aF90b2RvKCk7CisJc3RydWN0IHRvZG9fbGlzdCB0b2RvX2xpc3QgPSBUT0RPX0xJU1RfSU5JVDsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZ0b2RvX2xpc3QuYnVmLCB0b2RvX2ZpbGUsIDApIDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkICclcycuIiksIHRvZG9fZmlsZSk7CisJaWYgKHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgdG9kb19saXN0LmJ1Zi5idWYsCisJCQkJCSZ0b2RvX2xpc3QpKSB7CisJCXRvZG9fbGlzdF9yZWxlYXNlKCZ0b2RvX2xpc3QpOworCQlyZXR1cm4gZXJyb3IoXygidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIiksIHRvZG9fZmlsZSk7CisJfQorCisJcmVzID0gdG9kb19saXN0X3JlYXJyYW5nZV9zcXVhc2goJnRvZG9fbGlzdCk7CisJaWYgKCFyZXMpCisJCXJlcyA9IHRvZG9fbGlzdF93cml0ZV90b19maWxlKHRoZV9yZXBvc2l0b3J5LCAmdG9kb19saXN0LAorCQkJCQkgICAgICB0b2RvX2ZpbGUsIE5VTEwsIE5VTEwsIC0xLCAwKTsKKworCXRvZG9fbGlzdF9yZWxlYXNlKCZ0b2RvX2xpc3QpOworCisJaWYgKHJlcykKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIpLCB0b2RvX2ZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyYW5zZm9ybV90b2RvX2ZpbGUodW5zaWduZWQgZmxhZ3MpCit7CisJY29uc3QgY2hhciAqdG9kb19maWxlID0gcmViYXNlX3BhdGhfdG9kbygpOworCXN0cnVjdCB0b2RvX2xpc3QgdG9kb19saXN0ID0gVE9ET19MSVNUX0lOSVQ7CisJaW50IHJlczsKKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZ0b2RvX2xpc3QuYnVmLCB0b2RvX2ZpbGUsIDApIDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkICclcycuIiksIHRvZG9fZmlsZSk7CisKKwlpZiAodG9kb19saXN0X3BhcnNlX2luc25fYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCB0b2RvX2xpc3QuYnVmLmJ1ZiwKKwkJCQkJJnRvZG9fbGlzdCkpIHsKKwkJdG9kb19saXN0X3JlbGVhc2UoJnRvZG9fbGlzdCk7CisJCXJldHVybiBlcnJvcihfKCJ1bnVzYWJsZSB0b2RvIGxpc3Q6ICclcyciKSwgdG9kb19maWxlKTsKKwl9CisKKwlyZXMgPSB0b2RvX2xpc3Rfd3JpdGVfdG9fZmlsZSh0aGVfcmVwb3NpdG9yeSwgJnRvZG9fbGlzdCwgdG9kb19maWxlLAorCQkJCSAgICAgIE5VTEwsIE5VTEwsIC0xLCBmbGFncyk7CisJdG9kb19saXN0X3JlbGVhc2UoJnRvZG9fbGlzdCk7CisKKwlpZiAocmVzKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcycuIiksIHRvZG9fZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWRpdF90b2RvX2ZpbGUodW5zaWduZWQgZmxhZ3MpCit7CisJY29uc3QgY2hhciAqdG9kb19maWxlID0gcmViYXNlX3BhdGhfdG9kbygpOworCXN0cnVjdCB0b2RvX2xpc3QgdG9kb19saXN0ID0gVE9ET19MSVNUX0lOSVQsCisJCW5ld190b2RvID0gVE9ET19MSVNUX0lOSVQ7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmdG9kb19saXN0LmJ1ZiwgdG9kb19maWxlLCAwKSA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnLiIpLCB0b2RvX2ZpbGUpOworCisJc3RyYnVmX3N0cmlwc3BhY2UoJnRvZG9fbGlzdC5idWYsIDEpOworCXJlcyA9IGVkaXRfdG9kb19saXN0KHRoZV9yZXBvc2l0b3J5LCAmdG9kb19saXN0LCAmbmV3X3RvZG8sIE5VTEwsIE5VTEwsIGZsYWdzKTsKKwlpZiAoIXJlcyAmJiB0b2RvX2xpc3Rfd3JpdGVfdG9fZmlsZSh0aGVfcmVwb3NpdG9yeSwgJm5ld190b2RvLCB0b2RvX2ZpbGUsCisJCQkJCSAgICBOVUxMLCBOVUxMLCAtMSwgZmxhZ3MgJiB+KFRPRE9fTElTVF9TSE9SVEVOX0lEUykpKQorCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIpLCB0b2RvX2ZpbGUpOworCisJdG9kb19saXN0X3JlbGVhc2UoJnRvZG9fbGlzdCk7CisJdG9kb19saXN0X3JlbGVhc2UoJm5ld190b2RvKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JldmlzaW9uX3JhbmdlcyhzdHJ1Y3QgY29tbWl0ICp1cHN0cmVhbSwgc3RydWN0IGNvbW1pdCAqb250bywKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvcmlnX2hlYWQsIGNvbnN0IGNoYXIgKipoZWFkX2hhc2gsCisJCQkgICAgICAgY2hhciAqKnJldmlzaW9ucywgY2hhciAqKnNob3J0cmV2aXNpb25zKQoreworCXN0cnVjdCBjb21taXQgKmJhc2VfcmV2ID0gdXBzdHJlYW0gPyB1cHN0cmVhbSA6IG9udG87CisJY29uc3QgY2hhciAqc2hvcnRoZWFkOworCisJKmhlYWRfaGFzaCA9IGZpbmRfdW5pcXVlX2FiYnJldihvcmlnX2hlYWQsIEdJVF9NQVhfSEVYU1opOworCSpyZXZpc2lvbnMgPSB4c3RyZm10KCIlcy4uLiVzIiwgb2lkX3RvX2hleCgmYmFzZV9yZXYtPm9iamVjdC5vaWQpLAorCQkJCQkJICAgKmhlYWRfaGFzaCk7CisKKwlzaG9ydGhlYWQgPSBmaW5kX3VuaXF1ZV9hYmJyZXYob3JpZ19oZWFkLCBERUZBVUxUX0FCQlJFVik7CisKKwlpZiAodXBzdHJlYW0pIHsKKwkJY29uc3QgY2hhciAqc2hvcnRyZXY7CisKKwkJc2hvcnRyZXYgPSBmaW5kX3VuaXF1ZV9hYmJyZXYoJmJhc2VfcmV2LT5vYmplY3Qub2lkLAorCQkJCQkgICAgICBERUZBVUxUX0FCQlJFVik7CisKKwkJKnNob3J0cmV2aXNpb25zID0geHN0cmZtdCgiJXMuLiVzIiwgc2hvcnRyZXYsIHNob3J0aGVhZCk7CisJfSBlbHNlCisJCSpzaG9ydHJldmlzaW9ucyA9IHhzdHJkdXAoc2hvcnRoZWFkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfYmFzaWNfc3RhdGUoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLCBjb25zdCBjaGFyICpoZWFkX25hbWUsCisJCQkgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkKQoreworCUZJTEUgKmludGVyYWN0aXZlOworCisJaWYgKCFpc19kaXJlY3RvcnkobWVyZ2VfZGlyKCkpICYmIG1rZGlyX2luX2dpdGRpcihtZXJnZV9kaXIoKSkpCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAlcyIpLCBtZXJnZV9kaXIoKSk7CisKKwlkZWxldGVfcmVmbG9nKCJSRUJBU0VfSEVBRCIpOworCisJaW50ZXJhY3RpdmUgPSBmb3BlbihwYXRoX2ludGVyYWN0aXZlKCksICJ3Iik7CisJaWYgKCFpbnRlcmFjdGl2ZSkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIikpOworCWZjbG9zZShpbnRlcmFjdGl2ZSk7CisKKwlyZXR1cm4gd3JpdGVfYmFzaWNfc3RhdGUob3B0cywgaGVhZF9uYW1lLCBvbnRvLCBvcmlnX2hlYWQpOworfQorCitzdGF0aWMgdm9pZCBzcGxpdF9leGVjX2NvbW1hbmRzKGNvbnN0IGNoYXIgKmNtZCwgc3RydWN0IHN0cmluZ19saXN0ICpjb21tYW5kcykKK3sKKwlpZiAoY21kICYmICpjbWQpIHsKKwkJc3RyaW5nX2xpc3Rfc3BsaXQoY29tbWFuZHMsIGNtZCwgJ1xuJywgLTEpOworCisJCS8qIHJlYmFzZS5jIGFkZHMgYSBuZXcgbGluZSB0byBjbWQgYWZ0ZXIgZXZlcnkgY29tbWFuZCwKKwkJICogc28gaGVyZSB0aGUgbGFzdCBjb21tYW5kIGlzIGFsd2F5cyBlbXB0eSAqLworCQlzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoY29tbWFuZHMsIDApOworCX0KK30KKworc3RhdGljIGludCBkb19pbnRlcmFjdGl2ZV9yZWJhc2Uoc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzLCB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0OworCWNvbnN0IGNoYXIgKmhlYWRfaGFzaCA9IE5VTEw7CisJY2hhciAqcmV2aXNpb25zID0gTlVMTCwgKnNob3J0cmV2aXNpb25zID0gTlVMTDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBtYWtlX3NjcmlwdF9hcmdzID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCB0b2RvX2xpc3QgdG9kb19saXN0ID0gVE9ET19MSVNUX0lOSVQ7CisJc3RydWN0IHJlcGxheV9vcHRzIHJlcGxheSA9IGdldF9yZXBsYXlfb3B0cyhvcHRzKTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29tbWFuZHMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWlmIChnZXRfcmV2aXNpb25fcmFuZ2VzKG9wdHMtPnVwc3RyZWFtLCBvcHRzLT5vbnRvLCAmb3B0cy0+b3JpZ19oZWFkLAorCQkJCSZoZWFkX2hhc2gsICZyZXZpc2lvbnMsICZzaG9ydHJldmlzaW9ucykpCisJCXJldHVybiAtMTsKKworCWlmIChpbml0X2Jhc2ljX3N0YXRlKCZyZXBsYXksCisJCQkgICAgIG9wdHMtPmhlYWRfbmFtZSA/IG9wdHMtPmhlYWRfbmFtZSA6ICJkZXRhY2hlZCBIRUFEIiwKKwkJCSAgICAgb3B0cy0+b250bywgaGVhZF9oYXNoKSkgeworCQlmcmVlKHJldmlzaW9ucyk7CisJCWZyZWUoc2hvcnRyZXZpc2lvbnMpOworCisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoIW9wdHMtPnVwc3RyZWFtICYmIG9wdHMtPnNxdWFzaF9vbnRvKQorCQl3cml0ZV9maWxlKHBhdGhfc3F1YXNoX29udG8oKSwgIiVzXG4iLAorCQkJICAgb2lkX3RvX2hleChvcHRzLT5zcXVhc2hfb250bykpOworCisJYXJndl9hcnJheV9wdXNobCgmbWFrZV9zY3JpcHRfYXJncywgIiIsIHJldmlzaW9ucywgTlVMTCk7CisJaWYgKG9wdHMtPnJlc3RyaWN0X3JldmlzaW9uKQorCQlhcmd2X2FycmF5X3B1c2hmKCZtYWtlX3NjcmlwdF9hcmdzLCAiXiVzIiwKKwkJCQkgb2lkX3RvX2hleCgmb3B0cy0+cmVzdHJpY3RfcmV2aXNpb24tPm9iamVjdC5vaWQpKTsKKworCXJldCA9IHNlcXVlbmNlcl9tYWtlX3NjcmlwdCh0aGVfcmVwb3NpdG9yeSwgJnRvZG9fbGlzdC5idWYsCisJCQkJICAgIG1ha2Vfc2NyaXB0X2FyZ3MuYXJnYywgbWFrZV9zY3JpcHRfYXJncy5hcmd2LAorCQkJCSAgICBmbGFncyk7CisKKwlpZiAocmV0KQorCQllcnJvcihfKCJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IikpOworCWVsc2UgeworCQlkaXNjYXJkX2NhY2hlKCk7CisJCWlmICh0b2RvX2xpc3RfcGFyc2VfaW5zbl9idWZmZXIodGhlX3JlcG9zaXRvcnksIHRvZG9fbGlzdC5idWYuYnVmLAorCQkJCQkJJnRvZG9fbGlzdCkpCisJCQlCVUcoInVudXNhYmxlIHRvZG8gbGlzdCIpOworCisJCXNwbGl0X2V4ZWNfY29tbWFuZHMob3B0cy0+Y21kLCAmY29tbWFuZHMpOworCQlyZXQgPSBjb21wbGV0ZV9hY3Rpb24odGhlX3JlcG9zaXRvcnksICZyZXBsYXksIGZsYWdzLAorCQkJc2hvcnRyZXZpc2lvbnMsIG9wdHMtPm9udG9fbmFtZSwgb3B0cy0+b250bywgaGVhZF9oYXNoLAorCQkJJmNvbW1hbmRzLCBvcHRzLT5hdXRvc3F1YXNoLCAmdG9kb19saXN0KTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmY29tbWFuZHMsIDApOworCWZyZWUocmV2aXNpb25zKTsKKwlmcmVlKHNob3J0cmV2aXNpb25zKTsKKwl0b2RvX2xpc3RfcmVsZWFzZSgmdG9kb19saXN0KTsKKwlhcmd2X2FycmF5X2NsZWFyKCZtYWtlX3NjcmlwdF9hcmdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NlcXVlbmNlcl9yZWJhc2Uoc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzLAorCQkJCSAgZW51bSBhY3Rpb24gY29tbWFuZCkKK3sKKwl1bnNpZ25lZCBmbGFncyA9IDA7CisJaW50IGFiYnJldmlhdGVfY29tbWFuZHMgPSAwLCByZXQgPSAwOworCisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgicmViYXNlLmFiYnJldmlhdGVjb21tYW5kcyIsICZhYmJyZXZpYXRlX2NvbW1hbmRzKTsKKworCWZsYWdzIHw9IGFiYnJldmlhdGVfY29tbWFuZHMgPyBUT0RPX0xJU1RfQUJCUkVWSUFURV9DTURTIDogMDsKKwlmbGFncyB8PSBvcHRzLT5yZWJhc2VfbWVyZ2VzID8gVE9ET19MSVNUX1JFQkFTRV9NRVJHRVMgOiAwOworCWZsYWdzIHw9IG9wdHMtPnJlYmFzZV9jb3VzaW5zID4gMCA/IFRPRE9fTElTVF9SRUJBU0VfQ09VU0lOUyA6IDA7CisJZmxhZ3MgfD0gb3B0cy0+cm9vdF93aXRoX29udG8gPyBUT0RPX0xJU1RfUk9PVF9XSVRIX09OVE8gOiAwOworCWZsYWdzIHw9IGNvbW1hbmQgPT0gQUNUSU9OX1NIT1JURU5fT0lEUyA/IFRPRE9fTElTVF9TSE9SVEVOX0lEUyA6IDA7CisKKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKwljYXNlIEFDVElPTl9OT05FOiB7CisJCWlmICghb3B0cy0+b250byAmJiAhb3B0cy0+dXBzdHJlYW0pCisJCQlkaWUoXygiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iKSk7CisKKwkJcmV0ID0gZG9faW50ZXJhY3RpdmVfcmViYXNlKG9wdHMsIGZsYWdzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgQUNUSU9OX1NLSVA6IHsKKwkJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlX3JyID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwkJcmVyZXJlX2NsZWFyKHRoZV9yZXBvc2l0b3J5LCAmbWVyZ2VfcnIpOworCX0KKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEFDVElPTl9DT05USU5VRTogeworCQlzdHJ1Y3QgcmVwbGF5X29wdHMgcmVwbGF5X29wdHMgPSBnZXRfcmVwbGF5X29wdHMob3B0cyk7CisKKwkJcmV0ID0gc2VxdWVuY2VyX2NvbnRpbnVlKHRoZV9yZXBvc2l0b3J5LCAmcmVwbGF5X29wdHMpOworCQlicmVhazsKKwl9CisJY2FzZSBBQ1RJT05fRURJVF9UT0RPOgorCQlyZXQgPSBlZGl0X3RvZG9fZmlsZShmbGFncyk7CisJCWJyZWFrOworCWNhc2UgQUNUSU9OX1NIT1dfQ1VSUkVOVF9QQVRDSDogeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJY21kLmdpdF9jbWQgPSAxOworCQlhcmd2X2FycmF5X3B1c2hsKCZjbWQuYXJncywgInNob3ciLCAiUkVCQVNFX0hFQUQiLCAiLS0iLCBOVUxMKTsKKwkJcmV0ID0gcnVuX2NvbW1hbmQoJmNtZCk7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgQUNUSU9OX1NIT1JURU5fT0lEUzoKKwljYXNlIEFDVElPTl9FWFBBTkRfT0lEUzoKKwkJcmV0ID0gdHJhbnNmb3JtX3RvZG9fZmlsZShmbGFncyk7CisJCWJyZWFrOworCWNhc2UgQUNUSU9OX0NIRUNLX1RPRE9fTElTVDoKKwkJcmV0ID0gY2hlY2tfdG9kb19saXN0X2Zyb21fZmlsZSh0aGVfcmVwb3NpdG9yeSk7CisJCWJyZWFrOworCWNhc2UgQUNUSU9OX1JFQVJSQU5HRV9TUVVBU0g6CisJCXJldCA9IHJlYXJyYW5nZV9zcXVhc2hfaW5fdG9kb19maWxlKCk7CisJCWJyZWFrOworCWNhc2UgQUNUSU9OX0FERF9FWEVDOiB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBjb21tYW5kcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJCXNwbGl0X2V4ZWNfY29tbWFuZHMob3B0cy0+Y21kLCAmY29tbWFuZHMpOworCQlyZXQgPSBhZGRfZXhlY19jb21tYW5kcygmY29tbWFuZHMpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmY29tbWFuZHMsIDApOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJQlVHKCJpbnZhbGlkIGNvbW1hbmQgJyVkJyIsIGNvbW1hbmQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X2tlZXBfZW1wdHkoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkJaW50IHVuc2V0KQoreworCXN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJLyoKKwkgKiBJZiB3ZSBldmVyIHdhbnQgdG8gcmVtYXAgLS1rZWVwLWVtcHR5IHRvIC0tZW1wdHk9a2VlcCwgaW5zZXJ0OgorCSAqIAlvcHRzLT5lbXB0eSA9IHVuc2V0ID8gRU1QVFlfVU5TUEVDSUZJRUQgOiBFTVBUWV9LRUVQOworCSAqLworCW9wdHMtPnR5cGUgPSBSRUJBU0VfTUVSR0U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZWJhc2VfaW50ZXJhY3RpdmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitpbnQgY21kX3JlYmFzZV9faW50ZXJhY3RpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJlYmFzZV9vcHRpb25zIG9wdHMgPSBSRUJBU0VfT1BUSU9OU19JTklUOworCXN0cnVjdCBvYmplY3RfaWQgc3F1YXNoX29udG8gPSBudWxsX29pZDsKKwllbnVtIGFjdGlvbiBjb21tYW5kID0gQUNUSU9OX05PTkU7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9ORUdCSVQoMCwgImZmIiwgJm9wdHMuZmxhZ3MsIE5fKCJhbGxvdyBmYXN0LWZvcndhcmQiKSwKKwkJCSAgIFJFQkFTRV9GT1JDRSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnaycsICJrZWVwLWVtcHR5IiwgJm9wdGlvbnMsIE5VTEwsCisJCQlOXygiKERFUFJFQ0FURUQpIGtlZXAgZW1wdHkgY29tbWl0cyIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwKKwkJCXBhcnNlX29wdF9rZWVwX2VtcHR5IH0sCisJCU9QVF9CT09MX0YoMCwgImFsbG93LWVtcHR5LW1lc3NhZ2UiLCAmb3B0cy5hbGxvd19lbXB0eV9tZXNzYWdlLAorCQkJICAgTl8oImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIpLAorCQkJICAgUEFSU0VfT1BUX0hJRERFTiksCisJCU9QVF9CT09MKDAsICJyZWJhc2UtbWVyZ2VzIiwgJm9wdHMucmViYXNlX21lcmdlcywgTl8oInJlYmFzZSBtZXJnZSBjb21taXRzIikpLAorCQlPUFRfQk9PTCgwLCAicmViYXNlLWNvdXNpbnMiLCAmb3B0cy5yZWJhc2VfY291c2lucywKKwkJCSBOXygia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiKSksCisJCU9QVF9CT09MKDAsICJhdXRvc3F1YXNoIiwgJm9wdHMuYXV0b3NxdWFzaCwKKwkJCSBOXygibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISIpKSwKKwkJT1BUX0JPT0woMCwgInNpZ25vZmYiLCAmb3B0cy5zaWdub2ZmLCBOXygic2lnbiBjb21taXRzIikpLAorCQlPUFRfQklUKCd2JywgInZlcmJvc2UiLCAmb3B0cy5mbGFncywKKwkJCU5fKCJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIiksCisJCQlSRUJBU0VfTk9fUVVJRVQgfCBSRUJBU0VfVkVSQk9TRSB8IFJFQkFTRV9ESUZGU1RBVCksCisJCU9QVF9DTURNT0RFKDAsICJjb250aW51ZSIsICZjb21tYW5kLCBOXygiY29udGludWUgcmViYXNlIiksCisJCQkgICAgQUNUSU9OX0NPTlRJTlVFKSwKKwkJT1BUX0NNRE1PREUoMCwgInNraXAiLCAmY29tbWFuZCwgTl8oInNraXAgY29tbWl0IiksIEFDVElPTl9TS0lQKSwKKwkJT1BUX0NNRE1PREUoMCwgImVkaXQtdG9kbyIsICZjb21tYW5kLCBOXygiZWRpdCB0aGUgdG9kbyBsaXN0IiksCisJCQkgICAgQUNUSU9OX0VESVRfVE9ETyksCisJCU9QVF9DTURNT0RFKDAsICJzaG93LWN1cnJlbnQtcGF0Y2giLCAmY29tbWFuZCwgTl8oInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giKSwKKwkJCSAgICBBQ1RJT05fU0hPV19DVVJSRU5UX1BBVENIKSwKKwkJT1BUX0NNRE1PREUoMCwgInNob3J0ZW4taWRzIiwgJmNvbW1hbmQsCisJCQlOXygic2hvcnRlbiBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiKSwgQUNUSU9OX1NIT1JURU5fT0lEUyksCisJCU9QVF9DTURNT0RFKDAsICJleHBhbmQtaWRzIiwgJmNvbW1hbmQsCisJCQlOXygiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIpLCBBQ1RJT05fRVhQQU5EX09JRFMpLAorCQlPUFRfQ01ETU9ERSgwLCAiY2hlY2stdG9kby1saXN0IiwgJmNvbW1hbmQsCisJCQlOXygiY2hlY2sgdGhlIHRvZG8gbGlzdCIpLCBBQ1RJT05fQ0hFQ0tfVE9ET19MSVNUKSwKKwkJT1BUX0NNRE1PREUoMCwgInJlYXJyYW5nZS1zcXVhc2giLCAmY29tbWFuZCwKKwkJCU5fKCJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIiksIEFDVElPTl9SRUFSUkFOR0VfU1FVQVNIKSwKKwkJT1BUX0NNRE1PREUoMCwgImFkZC1leGVjLWNvbW1hbmRzIiwgJmNvbW1hbmQsCisJCQlOXygiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IiksIEFDVElPTl9BRERfRVhFQyksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAib250byIsICZvcHRzLm9udG8sIE5fKCJvbnRvIiksIE5fKCJvbnRvIiksCisJCSAgUEFSU0VfT1BUX05PTkVHLCBwYXJzZV9vcHRfY29tbWl0LCAwIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmVzdHJpY3QtcmV2aXNpb24iLCAmb3B0cy5yZXN0cmljdF9yZXZpc2lvbiwKKwkJICBOXygicmVzdHJpY3QtcmV2aXNpb24iKSwgTl8oInJlc3RyaWN0IHJldmlzaW9uIiksCisJCSAgUEFSU0VfT1BUX05PTkVHLCBwYXJzZV9vcHRfY29tbWl0LCAwIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAic3F1YXNoLW9udG8iLCAmc3F1YXNoX29udG8sIE5fKCJzcXVhc2gtb250byIpLAorCQkgIE5fKCJzcXVhc2ggb250byIpLCBQQVJTRV9PUFRfTk9ORUcsIHBhcnNlX29wdF9vYmplY3RfaWQsIDAgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJ1cHN0cmVhbSIsICZvcHRzLnVwc3RyZWFtLCBOXygidXBzdHJlYW0iKSwKKwkJICBOXygidGhlIHVwc3RyZWFtIGNvbW1pdCIpLCBQQVJTRV9PUFRfTk9ORUcsIHBhcnNlX29wdF9jb21taXQsCisJCSAgMCB9LAorCQlPUFRfU1RSSU5HKDAsICJoZWFkLW5hbWUiLCAmb3B0cy5oZWFkX25hbWUsIE5fKCJoZWFkLW5hbWUiKSwgTl8oImhlYWQgbmFtZSIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAnUycsICJncGctc2lnbiIsICZvcHRzLmdwZ19zaWduX29wdCwgTl8oImtleS1pZCIpLAorCQkJTl8oIkdQRy1zaWduIGNvbW1pdHMiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkgIiIgfSwKKwkJT1BUX1NUUklORygwLCAic3RyYXRlZ3kiLCAmb3B0cy5zdHJhdGVneSwgTl8oInN0cmF0ZWd5IiksCisJCQkgICBOXygicmViYXNlIHN0cmF0ZWd5IikpLAorCQlPUFRfU1RSSU5HKDAsICJzdHJhdGVneS1vcHRzIiwgJm9wdHMuc3RyYXRlZ3lfb3B0cywgTl8oInN0cmF0ZWd5LW9wdHMiKSwKKwkJCSAgIE5fKCJzdHJhdGVneSBvcHRpb25zIikpLAorCQlPUFRfU1RSSU5HKDAsICJzd2l0Y2gtdG8iLCAmb3B0cy5zd2l0Y2hfdG8sIE5fKCJzd2l0Y2gtdG8iKSwKKwkJCSAgIE5fKCJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIpKSwKKwkJT1BUX1NUUklORygwLCAib250by1uYW1lIiwgJm9wdHMub250b19uYW1lLCBOXygib250by1uYW1lIiksIE5fKCJvbnRvIG5hbWUiKSksCisJCU9QVF9TVFJJTkcoMCwgImNtZCIsICZvcHRzLmNtZCwgTl8oImNtZCIpLCBOXygidGhlIGNvbW1hbmQgdG8gcnVuIikpLAorCQlPUFRfUkVSRVJFX0FVVE9VUERBVEUoJm9wdHMuYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUpLAorCQlPUFRfQk9PTCgwLCAicmVzY2hlZHVsZS1mYWlsZWQtZXhlYyIsICZvcHRzLnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMsCisJCQkgTl8oImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJb3B0cy5yZWJhc2VfY291c2lucyA9IC0xOworCisJaWYgKGFyZ2MgPT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmViYXNlX2ludGVyYWN0aXZlX3VzYWdlLCBvcHRpb25zKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCWJ1aWx0aW5fcmViYXNlX2ludGVyYWN0aXZlX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisKKwlpZiAoIWlzX251bGxfb2lkKCZzcXVhc2hfb250bykpCisJCW9wdHMuc3F1YXNoX29udG8gPSAmc3F1YXNoX29udG87CisKKwlpZiAob3B0cy5yZWJhc2VfY291c2lucyA+PSAwICYmICFvcHRzLnJlYmFzZV9tZXJnZXMpCisJCXdhcm5pbmcoXygiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAiCisJCQkgICItLXJlYmFzZS1tZXJnZXMiKSk7CisKKwlyZXR1cm4gISFydW5fc2VxdWVuY2VyX3JlYmFzZSgmb3B0cywgY29tbWFuZCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfbWVyZ2Uoc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzKQoreworCXJldHVybiBvcHRzLT50eXBlID09IFJFQkFTRV9NRVJHRSB8fAorCQlvcHRzLT50eXBlID09IFJFQkFTRV9QUkVTRVJWRV9NRVJHRVM7Cit9CisKK3N0YXRpYyB2b2lkIGltcGx5X21lcmdlKHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cywgY29uc3QgY2hhciAqb3B0aW9uKQoreworCXN3aXRjaCAob3B0cy0+dHlwZSkgeworCWNhc2UgUkVCQVNFX0FQUExZOgorCQlkaWUoXygiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIiksIG9wdGlvbik7CisJCWJyZWFrOworCWNhc2UgUkVCQVNFX01FUkdFOgorCWNhc2UgUkVCQVNFX1BSRVNFUlZFX01FUkdFUzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJb3B0cy0+dHlwZSA9IFJFQkFTRV9NRVJHRTsgLyogaW1wbGllZCAqLworCQlicmVhazsKKwl9Cit9CisKKy8qIFJldHVybnMgdGhlIGZpbGVuYW1lIHByZWZpeGVkIGJ5IHRoZSBzdGF0ZV9kaXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0ZV9kaXJfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc2l6ZV90IHByZWZpeF9sZW47CisKKwlpZiAoIXByZWZpeF9sZW4pIHsKKwkJc3RyYnVmX2FkZGYoJnBhdGgsICIlcy8iLCBvcHRzLT5zdGF0ZV9kaXIpOworCQlwcmVmaXhfbGVuID0gcGF0aC5sZW47CisJfQorCisJc3RyYnVmX3NldGxlbigmcGF0aCwgcHJlZml4X2xlbik7CisJc3RyYnVmX2FkZHN0cigmcGF0aCwgZmlsZW5hbWUpOworCXJldHVybiBwYXRoLmJ1ZjsKK30KKworLyogUmVhZCBvbmUgZmlsZSwgdGhlbiBzdHJpcCBsaW5lIGVuZGluZ3MgKi8KK3N0YXRpYyBpbnQgcmVhZF9vbmUoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWlmIChzdHJidWZfcmVhZF9maWxlKGJ1ZiwgcGF0aCwgMCkgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHJlYWQgJyVzJyIpLCBwYXRoKTsKKwlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIHJlYmFzZSBvcHRpb25zIGZyb20gdGhlIHN0YXRlIGRpcmVjdG9yeS4gKi8KK3N0YXRpYyBpbnQgcmVhZF9iYXNpY19zdGF0ZShzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IHN0cmJ1ZiBoZWFkX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKHJlYWRfb25lKHN0YXRlX2Rpcl9wYXRoKCJoZWFkLW5hbWUiLCBvcHRzKSwgJmhlYWRfbmFtZSkgfHwKKwkgICAgcmVhZF9vbmUoc3RhdGVfZGlyX3BhdGgoIm9udG8iLCBvcHRzKSwgJmJ1ZikpCisJCXJldHVybiAtMTsKKwlvcHRzLT5oZWFkX25hbWUgPSBzdGFydHNfd2l0aChoZWFkX25hbWUuYnVmLCAicmVmcy8iKSA/CisJCXhzdHJkdXAoaGVhZF9uYW1lLmJ1ZikgOiBOVUxMOworCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX25hbWUpOworCWlmIChnZXRfb2lkKGJ1Zi5idWYsICZvaWQpKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IGdldCAnb250byc6ICclcyciKSwgYnVmLmJ1Zik7CisJb3B0cy0+b250byA9IGxvb2t1cF9jb21taXRfb3JfZGllKCZvaWQsIGJ1Zi5idWYpOworCisJLyoKKwkgKiBXZSBhbHdheXMgd3JpdGUgdG8gb3JpZy1oZWFkLCBidXQgaW50ZXJhY3RpdmUgcmViYXNlIHVzZWQgdG8gd3JpdGUgdG8KKwkgKiBoZWFkLiBGYWxsIGJhY2sgdG8gcmVhZGluZyBmcm9tIGhlYWQgdG8gY292ZXIgZm9yIHRoZSBjYXNlIHRoYXQgdGhlCisJICogdXNlciB1cGdyYWRlZCBnaXQgd2l0aCBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS4KKwkgKi8KKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJaWYgKGZpbGVfZXhpc3RzKHN0YXRlX2Rpcl9wYXRoKCJvcmlnLWhlYWQiLCBvcHRzKSkpIHsKKwkJaWYgKHJlYWRfb25lKHN0YXRlX2Rpcl9wYXRoKCJvcmlnLWhlYWQiLCBvcHRzKSwgJmJ1ZikpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChyZWFkX29uZShzdGF0ZV9kaXJfcGF0aCgiaGVhZCIsIG9wdHMpLCAmYnVmKSkKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfb2lkKGJ1Zi5idWYsICZvcHRzLT5vcmlnX2hlYWQpKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciKSwgYnVmLmJ1Zik7CisKKwlpZiAoZmlsZV9leGlzdHMoc3RhdGVfZGlyX3BhdGgoInF1aWV0Iiwgb3B0cykpKQorCQlvcHRzLT5mbGFncyAmPSB+UkVCQVNFX05PX1FVSUVUOworCWVsc2UKKwkJb3B0cy0+ZmxhZ3MgfD0gUkVCQVNFX05PX1FVSUVUOworCisJaWYgKGZpbGVfZXhpc3RzKHN0YXRlX2Rpcl9wYXRoKCJ2ZXJib3NlIiwgb3B0cykpKQorCQlvcHRzLT5mbGFncyB8PSBSRUJBU0VfVkVSQk9TRTsKKworCWlmIChmaWxlX2V4aXN0cyhzdGF0ZV9kaXJfcGF0aCgic2lnbm9mZiIsIG9wdHMpKSkgeworCQlvcHRzLT5zaWdub2ZmID0gMTsKKwkJb3B0cy0+ZmxhZ3MgfD0gUkVCQVNFX0ZPUkNFOworCX0KKworCWlmIChmaWxlX2V4aXN0cyhzdGF0ZV9kaXJfcGF0aCgiYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiLCBvcHRzKSkpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpZiAocmVhZF9vbmUoc3RhdGVfZGlyX3BhdGgoImFsbG93X3JlcmVyZV9hdXRvdXBkYXRlIiwgb3B0cyksCisJCQkgICAgJmJ1ZikpCisJCQlyZXR1cm4gLTE7CisJCWlmICghc3RyY21wKGJ1Zi5idWYsICItLXJlcmVyZS1hdXRvdXBkYXRlIikpCisJCQlvcHRzLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSA9IFJFUkVSRV9BVVRPVVBEQVRFOworCQllbHNlIGlmICghc3RyY21wKGJ1Zi5idWYsICItLW5vLXJlcmVyZS1hdXRvdXBkYXRlIikpCisJCQlvcHRzLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSA9IFJFUkVSRV9OT0FVVE9VUERBVEU7CisJCWVsc2UKKwkJCXdhcm5pbmcoXygiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogIgorCQkJCSAgIiclcyciKSwgYnVmLmJ1Zik7CisJfQorCisJaWYgKGZpbGVfZXhpc3RzKHN0YXRlX2Rpcl9wYXRoKCJncGdfc2lnbl9vcHQiLCBvcHRzKSkpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpZiAocmVhZF9vbmUoc3RhdGVfZGlyX3BhdGgoImdwZ19zaWduX29wdCIsIG9wdHMpLAorCQkJICAgICZidWYpKQorCQkJcmV0dXJuIC0xOworCQlmcmVlKG9wdHMtPmdwZ19zaWduX29wdCk7CisJCW9wdHMtPmdwZ19zaWduX29wdCA9IHhzdHJkdXAoYnVmLmJ1Zik7CisJfQorCisJaWYgKGZpbGVfZXhpc3RzKHN0YXRlX2Rpcl9wYXRoKCJzdHJhdGVneSIsIG9wdHMpKSkgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCWlmIChyZWFkX29uZShzdGF0ZV9kaXJfcGF0aCgic3RyYXRlZ3kiLCBvcHRzKSwgJmJ1ZikpCisJCQlyZXR1cm4gLTE7CisJCWZyZWUob3B0cy0+c3RyYXRlZ3kpOworCQlvcHRzLT5zdHJhdGVneSA9IHhzdHJkdXAoYnVmLmJ1Zik7CisJfQorCisJaWYgKGZpbGVfZXhpc3RzKHN0YXRlX2Rpcl9wYXRoKCJzdHJhdGVneV9vcHRzIiwgb3B0cykpKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJaWYgKHJlYWRfb25lKHN0YXRlX2Rpcl9wYXRoKCJzdHJhdGVneV9vcHRzIiwgb3B0cyksICZidWYpKQorCQkJcmV0dXJuIC0xOworCQlmcmVlKG9wdHMtPnN0cmF0ZWd5X29wdHMpOworCQlvcHRzLT5zdHJhdGVneV9vcHRzID0geHN0cmR1cChidWYuYnVmKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYmFzZV93cml0ZV9iYXNpY19zdGF0ZShzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMpCit7CisJd3JpdGVfZmlsZShzdGF0ZV9kaXJfcGF0aCgiaGVhZC1uYW1lIiwgb3B0cyksICIlcyIsCisJCSAgIG9wdHMtPmhlYWRfbmFtZSA/IG9wdHMtPmhlYWRfbmFtZSA6ICJkZXRhY2hlZCBIRUFEIik7CisJd3JpdGVfZmlsZShzdGF0ZV9kaXJfcGF0aCgib250byIsIG9wdHMpLCAiJXMiLAorCQkgICBvcHRzLT5vbnRvID8gb2lkX3RvX2hleCgmb3B0cy0+b250by0+b2JqZWN0Lm9pZCkgOiAiIik7CisJd3JpdGVfZmlsZShzdGF0ZV9kaXJfcGF0aCgib3JpZy1oZWFkIiwgb3B0cyksICIlcyIsCisJCSAgIG9pZF90b19oZXgoJm9wdHMtPm9yaWdfaGVhZCkpOworCWlmICghKG9wdHMtPmZsYWdzICYgUkVCQVNFX05PX1FVSUVUKSkKKwkJd3JpdGVfZmlsZShzdGF0ZV9kaXJfcGF0aCgicXVpZXQiLCBvcHRzKSwgIiVzIiwgIiIpOworCWlmIChvcHRzLT5mbGFncyAmIFJFQkFTRV9WRVJCT1NFKQorCQl3cml0ZV9maWxlKHN0YXRlX2Rpcl9wYXRoKCJ2ZXJib3NlIiwgb3B0cyksICIlcyIsICIiKTsKKwlpZiAob3B0cy0+c3RyYXRlZ3kpCisJCXdyaXRlX2ZpbGUoc3RhdGVfZGlyX3BhdGgoInN0cmF0ZWd5Iiwgb3B0cyksICIlcyIsCisJCQkgICBvcHRzLT5zdHJhdGVneSk7CisJaWYgKG9wdHMtPnN0cmF0ZWd5X29wdHMpCisJCXdyaXRlX2ZpbGUoc3RhdGVfZGlyX3BhdGgoInN0cmF0ZWd5X29wdHMiLCBvcHRzKSwgIiVzIiwKKwkJCSAgIG9wdHMtPnN0cmF0ZWd5X29wdHMpOworCWlmIChvcHRzLT5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSA+IDApCisJCXdyaXRlX2ZpbGUoc3RhdGVfZGlyX3BhdGgoImFsbG93X3JlcmVyZV9hdXRvdXBkYXRlIiwgb3B0cyksCisJCQkgICAiLSVzLXJlcmVyZS1hdXRvdXBkYXRlIiwKKwkJCSAgIG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlID09IFJFUkVSRV9BVVRPVVBEQVRFID8KKwkJCQkiIiA6ICItbm8iKTsKKwlpZiAob3B0cy0+Z3BnX3NpZ25fb3B0KQorCQl3cml0ZV9maWxlKHN0YXRlX2Rpcl9wYXRoKCJncGdfc2lnbl9vcHQiLCBvcHRzKSwgIiVzIiwKKwkJCSAgIG9wdHMtPmdwZ19zaWduX29wdCk7CisJaWYgKG9wdHMtPnNpZ25vZmYpCisJCXdyaXRlX2ZpbGUoc3RhdGVfZGlyX3BhdGgoInNpZ25vZmYiLCBvcHRzKSwgIi0tc2lnbm9mZiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfYXV0b3N0YXNoKHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwljb25zdCBjaGFyICpwYXRoID0gc3RhdGVfZGlyX3BhdGgoImF1dG9zdGFzaCIsIG9wdHMpOworCXN0cnVjdCBzdHJidWYgYXV0b3N0YXNoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3Mgc3Rhc2hfYXBwbHkgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwlpZiAoIWZpbGVfZXhpc3RzKHBhdGgpKQorCQlyZXR1cm4gMDsKKworCWlmIChyZWFkX29uZShwYXRoLCAmYXV0b3N0YXNoKSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCByZWFkICclcyciKSwgcGF0aCk7CisJLyogRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgbm90IG1pc3Rha2VuIGZvciBhIG51bWJlciAqLworCXN0cmJ1Zl9hZGRzdHIoJmF1dG9zdGFzaCwgIl4wIik7CisJYXJndl9hcnJheV9wdXNobCgmc3Rhc2hfYXBwbHkuYXJncywKKwkJCSAic3Rhc2giLCAiYXBwbHkiLCBhdXRvc3Rhc2guYnVmLCBOVUxMKTsKKwlzdGFzaF9hcHBseS5naXRfY21kID0gMTsKKwlzdGFzaF9hcHBseS5ub19zdGRlcnIgPSBzdGFzaF9hcHBseS5ub19zdGRvdXQgPQorCQlzdGFzaF9hcHBseS5ub19zdGRpbiA9IDE7CisJaWYgKCFydW5fY29tbWFuZCgmc3Rhc2hfYXBwbHkpKQorCQlwcmludGYoXygiQXBwbGllZCBhdXRvc3Rhc2guXG4iKSk7CisJZWxzZSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCWludCByZXMgPSAwOworCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsCisJCQkJICJzdGFzaCIsICJzdG9yZSIsICItbSIsICJhdXRvc3Rhc2giLCAiLXEiLAorCQkJCSBhdXRvc3Rhc2guYnVmLCBOVUxMKTsKKwkJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpKQorCQkJcmVzID0gZXJyb3IoXygiQ2Fubm90IHN0b3JlICVzIiksIGF1dG9zdGFzaC5idWYpOworCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmF1dG9zdGFzaCk7CisJCWlmIChyZXMpCisJCQlyZXR1cm4gcmVzOworCisJCWZwcmludGYoc3RkZXJyLAorCQkJXygiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKwkJCSAgIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisJCQkgICJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgIgorCQkJICAiYXQgYW55IHRpbWUuXG4iKSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmF1dG9zdGFzaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmluaXNoX3JlYmFzZShzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IHN0cmJ1ZiBkaXIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphcmd2X2djX2F1dG9bXSA9IHsgImdjIiwgIi0tYXV0byIsIE5VTEwgfTsKKwlpbnQgcmV0ID0gMDsKKworCWRlbGV0ZV9yZWYoTlVMTCwgIlJFQkFTRV9IRUFEIiwgTlVMTCwgUkVGX05PX0RFUkVGKTsKKwlhcHBseV9hdXRvc3Rhc2gob3B0cyk7CisJY2xvc2Vfb2JqZWN0X3N0b3JlKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzKTsKKwkvKgorCSAqIFdlIGlnbm9yZSBlcnJvcnMgaW4gJ2djIC0tYXV0bycsIHNpbmNlIHRoZQorCSAqIHVzZXIgc2hvdWxkIHNlZSB0aGVtLgorCSAqLworCXJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3ZfZ2NfYXV0bywgUlVOX0dJVF9DTUQpOworCWlmIChvcHRzLT50eXBlID09IFJFQkFTRV9NRVJHRSkgeworCQlzdHJ1Y3QgcmVwbGF5X29wdHMgcmVwbGF5ID0gUkVQTEFZX09QVFNfSU5JVDsKKworCQlyZXBsYXkuYWN0aW9uID0gUkVQTEFZX0lOVEVSQUNUSVZFX1JFQkFTRTsKKwkJcmV0ID0gc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZSgmcmVwbGF5KTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkc3RyKCZkaXIsIG9wdHMtPnN0YXRlX2Rpcik7CisJCWlmIChyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZkaXIsIDApKQorCQkJcmV0ID0gZXJyb3IoXygiY291bGQgbm90IHJlbW92ZSAnJXMnIiksCisJCQkJICAgIG9wdHMtPnN0YXRlX2Rpcik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZkaXIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpwZWVsX2NvbW1pdHRpc2goY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoZ2V0X29pZChuYW1lLCAmb2lkKSkKKwkJcmV0dXJuIE5VTEw7CisJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlyZXR1cm4gKHN0cnVjdCBjb21taXQgKilwZWVsX3RvX3R5cGUobmFtZSwgMCwgb2JqLCBPQkpfQ09NTUlUKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3ZhcihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgInVuc2V0ICVzOyAiLCBuYW1lKTsKKwllbHNlIHsKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJXM9IiwgbmFtZSk7CisJCXNxX3F1b3RlX2J1ZihidWYsIHZhbHVlKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsICI7ICIpOworCX0KK30KKworI2RlZmluZSBHSVRfUkVGTE9HX0FDVElPTl9FTlZJUk9OTUVOVCAiR0lUX1JFRkxPR19BQ1RJT04iCisKKyNkZWZpbmUgUkVTRVRfSEVBRF9ERVRBQ0ggKDE8PDApCisjZGVmaW5lIFJFU0VUX0hFQURfSEFSRCAoMTw8MSkKKyNkZWZpbmUgUkVTRVRfSEVBRF9SVU5fUE9TVF9DSEVDS09VVF9IT09LICgxPDwyKQorI2RlZmluZSBSRVNFVF9IRUFEX1JFRlNfT05MWSAoMTw8MykKKyNkZWZpbmUgUkVTRVRfT1JJR19IRUFEICgxPDw0KQorCitzdGF0aWMgaW50IHJlc2V0X2hlYWQoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICphY3Rpb24sCisJCSAgICAgIGNvbnN0IGNoYXIgKnN3aXRjaF90b19icmFuY2gsIHVuc2lnbmVkIGZsYWdzLAorCQkgICAgICBjb25zdCBjaGFyICpyZWZsb2dfb3JpZ19oZWFkLCBjb25zdCBjaGFyICpyZWZsb2dfaGVhZCkKK3sKKwl1bnNpZ25lZCBkZXRhY2hfaGVhZCA9IGZsYWdzICYgUkVTRVRfSEVBRF9ERVRBQ0g7CisJdW5zaWduZWQgcmVzZXRfaGFyZCA9IGZsYWdzICYgUkVTRVRfSEVBRF9IQVJEOworCXVuc2lnbmVkIHJ1bl9ob29rID0gZmxhZ3MgJiBSRVNFVF9IRUFEX1JVTl9QT1NUX0NIRUNLT1VUX0hPT0s7CisJdW5zaWduZWQgcmVmc19vbmx5ID0gZmxhZ3MgJiBSRVNFVF9IRUFEX1JFRlNfT05MWTsKKwl1bnNpZ25lZCB1cGRhdGVfb3JpZ19oZWFkID0gZmxhZ3MgJiBSRVNFVF9PUklHX0hFQUQ7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2NbMl0gPSB7IHsgTlVMTCB9LCB7IE5VTEwgfSB9OworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgdW5wYWNrX3RyZWVfb3B0czsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwljb25zdCBjaGFyICpyZWZsb2dfYWN0aW9uOworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHByZWZpeF9sZW47CisJc3RydWN0IG9iamVjdF9pZCAqb3JpZyA9IE5VTEwsIG9pZF9vcmlnLAorCQkqb2xkX29yaWcgPSBOVUxMLCBvaWRfb2xkX29yaWc7CisJaW50IHJldCA9IDAsIG5yID0gMDsKKworCWlmIChzd2l0Y2hfdG9fYnJhbmNoICYmICFzdGFydHNfd2l0aChzd2l0Y2hfdG9fYnJhbmNoLCAicmVmcy8iKSkKKwkJQlVHKCJOb3QgYSBmdWxseSBxdWFsaWZpZWQgYnJhbmNoOiAnJXMnIiwgc3dpdGNoX3RvX2JyYW5jaCk7CisKKwlpZiAoIXJlZnNfb25seSAmJiBob2xkX2xvY2tlZF9pbmRleCgmbG9jaywgTE9DS19SRVBPUlRfT05fRVJST1IpIDwgMCkgeworCQlyZXQgPSAtMTsKKwkJZ290byBsZWF2ZV9yZXNldF9oZWFkOworCX0KKworCWlmICgoIW9pZCB8fCAhcmVzZXRfaGFyZCkgJiYgZ2V0X29pZCgiSEVBRCIsICZoZWFkX29pZCkpIHsKKwkJcmV0ID0gZXJyb3IoXygiY291bGQgbm90IGRldGVybWluZSBIRUFEIHJldmlzaW9uIikpOworCQlnb3RvIGxlYXZlX3Jlc2V0X2hlYWQ7CisJfQorCisJaWYgKCFvaWQpCisJCW9pZCA9ICZoZWFkX29pZDsKKworCWlmIChyZWZzX29ubHkpCisJCWdvdG8gcmVzZXRfaGVhZF9yZWZzOworCisJbWVtc2V0KCZ1bnBhY2tfdHJlZV9vcHRzLCAwLCBzaXplb2YodW5wYWNrX3RyZWVfb3B0cykpOworCXNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oJnVucGFja190cmVlX29wdHMsIGFjdGlvbik7CisJdW5wYWNrX3RyZWVfb3B0cy5oZWFkX2lkeCA9IDE7CisJdW5wYWNrX3RyZWVfb3B0cy5zcmNfaW5kZXggPSB0aGVfcmVwb3NpdG9yeS0+aW5kZXg7CisJdW5wYWNrX3RyZWVfb3B0cy5kc3RfaW5kZXggPSB0aGVfcmVwb3NpdG9yeS0+aW5kZXg7CisJdW5wYWNrX3RyZWVfb3B0cy5mbiA9IHJlc2V0X2hhcmQgPyBvbmV3YXlfbWVyZ2UgOiB0d293YXlfbWVyZ2U7CisJdW5wYWNrX3RyZWVfb3B0cy51cGRhdGUgPSAxOworCXVucGFja190cmVlX29wdHMubWVyZ2UgPSAxOworCWlmICghZGV0YWNoX2hlYWQpCisJCXVucGFja190cmVlX29wdHMucmVzZXQgPSAxOworCisJaWYgKHJlcG9fcmVhZF9pbmRleF91bm1lcmdlZCh0aGVfcmVwb3NpdG9yeSkgPCAwKSB7CisJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCByZWFkIGluZGV4IikpOworCQlnb3RvIGxlYXZlX3Jlc2V0X2hlYWQ7CisJfQorCisJaWYgKCFyZXNldF9oYXJkICYmICFmaWxsX3RyZWVfZGVzY3JpcHRvcih0aGVfcmVwb3NpdG9yeSwgJmRlc2NbbnIrK10sICZoZWFkX29pZCkpIHsKKwkJcmV0ID0gZXJyb3IoXygiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIpLAorCQkJICAgIG9pZF90b19oZXgoJmhlYWRfb2lkKSk7CisJCWdvdG8gbGVhdmVfcmVzZXRfaGVhZDsKKwl9CisKKwlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKHRoZV9yZXBvc2l0b3J5LCAmZGVzY1tucisrXSwgb2lkKSkgeworCQlyZXQgPSBlcnJvcihfKCJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIiksIG9pZF90b19oZXgob2lkKSk7CisJCWdvdG8gbGVhdmVfcmVzZXRfaGVhZDsKKwl9CisKKwlpZiAodW5wYWNrX3RyZWVzKG5yLCBkZXNjLCAmdW5wYWNrX3RyZWVfb3B0cykpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gbGVhdmVfcmVzZXRfaGVhZDsKKwl9CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvaWQpOworCXByaW1lX2NhY2hlX3RyZWUodGhlX3JlcG9zaXRvcnksIHRoZV9yZXBvc2l0b3J5LT5pbmRleCwgdHJlZSk7CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KHRoZV9yZXBvc2l0b3J5LT5pbmRleCwgJmxvY2ssIENPTU1JVF9MT0NLKSA8IDApIHsKKwkJcmV0ID0gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGluZGV4IikpOworCQlnb3RvIGxlYXZlX3Jlc2V0X2hlYWQ7CisJfQorCityZXNldF9oZWFkX3JlZnM6CisJcmVmbG9nX2FjdGlvbiA9IGdldGVudihHSVRfUkVGTE9HX0FDVElPTl9FTlZJUk9OTUVOVCk7CisJc3RyYnVmX2FkZGYoJm1zZywgIiVzOiAiLCByZWZsb2dfYWN0aW9uID8gcmVmbG9nX2FjdGlvbiA6ICJyZWJhc2UiKTsKKwlwcmVmaXhfbGVuID0gbXNnLmxlbjsKKworCWlmICh1cGRhdGVfb3JpZ19oZWFkKSB7CisJCWlmICghZ2V0X29pZCgiT1JJR19IRUFEIiwgJm9pZF9vbGRfb3JpZykpCisJCQlvbGRfb3JpZyA9ICZvaWRfb2xkX29yaWc7CisJCWlmICghZ2V0X29pZCgiSEVBRCIsICZvaWRfb3JpZykpIHsKKwkJCW9yaWcgPSAmb2lkX29yaWc7CisJCQlpZiAoIXJlZmxvZ19vcmlnX2hlYWQpIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZtc2csICJ1cGRhdGluZyBPUklHX0hFQUQiKTsKKwkJCQlyZWZsb2dfb3JpZ19oZWFkID0gbXNnLmJ1ZjsKKwkJCX0KKwkJCXVwZGF0ZV9yZWYocmVmbG9nX29yaWdfaGVhZCwgIk9SSUdfSEVBRCIsIG9yaWcsCisJCQkJICAgb2xkX29yaWcsIDAsIFVQREFURV9SRUZTX01TR19PTl9FUlIpOworCQl9IGVsc2UgaWYgKG9sZF9vcmlnKQorCQkJZGVsZXRlX3JlZihOVUxMLCAiT1JJR19IRUFEIiwgb2xkX29yaWcsIDApOworCX0KKworCWlmICghcmVmbG9nX2hlYWQpIHsKKwkJc3RyYnVmX3NldGxlbigmbXNnLCBwcmVmaXhfbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnLCAidXBkYXRpbmcgSEVBRCIpOworCQlyZWZsb2dfaGVhZCA9IG1zZy5idWY7CisJfQorCWlmICghc3dpdGNoX3RvX2JyYW5jaCkKKwkJcmV0ID0gdXBkYXRlX3JlZihyZWZsb2dfaGVhZCwgIkhFQUQiLCBvaWQsIG9yaWcsCisJCQkJIGRldGFjaF9oZWFkID8gUkVGX05PX0RFUkVGIDogMCwKKwkJCQkgVVBEQVRFX1JFRlNfTVNHX09OX0VSUik7CisJZWxzZSB7CisJCXJldCA9IHVwZGF0ZV9yZWYocmVmbG9nX2hlYWQsIHN3aXRjaF90b19icmFuY2gsIG9pZCwKKwkJCQkgTlVMTCwgMCwgVVBEQVRFX1JFRlNfTVNHX09OX0VSUik7CisJCWlmICghcmV0KQorCQkJcmV0ID0gY3JlYXRlX3N5bXJlZigiSEVBRCIsIHN3aXRjaF90b19icmFuY2gsCisJCQkJCSAgICByZWZsb2dfaGVhZCk7CisJfQorCWlmIChydW5faG9vaykKKwkJcnVuX2hvb2tfbGUoTlVMTCwgInBvc3QtY2hlY2tvdXQiLAorCQkJICAgIG9pZF90b19oZXgob3JpZyA/IG9yaWcgOiAmbnVsbF9vaWQpLAorCQkJICAgIG9pZF90b19oZXgob2lkKSwgIjEiLCBOVUxMKTsKKworbGVhdmVfcmVzZXRfaGVhZDoKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCXdoaWxlIChucikKKwkJZnJlZSgodm9pZCAqKWRlc2NbLS1ucl0uYnVmZmVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoKHN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG9yaWdfaGVhZF9yZWZsb2cgPSBTVFJCVUZfSU5JVCwgaGVhZF9yZWZsb2cgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJaWYgKCFvcHRzLT5oZWFkX25hbWUpCisJCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIG1vdmUgYmFjayB0byAqLworCisJaWYgKCFvcHRzLT5vbnRvKQorCQlCVUcoIm1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoIHdpdGhvdXQgb250byIpOworCisJc3RyYnVmX2FkZGYoJm9yaWdfaGVhZF9yZWZsb2csICJyZWJhc2UgZmluaXNoZWQ6ICVzIG9udG8gJXMiLAorCQkgICAgb3B0cy0+aGVhZF9uYW1lLCBvaWRfdG9faGV4KCZvcHRzLT5vbnRvLT5vYmplY3Qub2lkKSk7CisJc3RyYnVmX2FkZGYoJmhlYWRfcmVmbG9nLCAicmViYXNlIGZpbmlzaGVkOiByZXR1cm5pbmcgdG8gJXMiLAorCQkgICAgb3B0cy0+aGVhZF9uYW1lKTsKKwlyZXQgPSByZXNldF9oZWFkKE5VTEwsICIiLCBvcHRzLT5oZWFkX25hbWUsIFJFU0VUX0hFQURfUkVGU19PTkxZLAorCQkJIG9yaWdfaGVhZF9yZWZsb2cuYnVmLCBoZWFkX3JlZmxvZy5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJm9yaWdfaGVhZF9yZWZsb2cpOworCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX3JlZmxvZyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlc29sdmVtc2cgPQorTl8oIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biAiCisiXCJnaXQgcmViYXNlIC0tYWJvcnRcIi4iKTsKKworc3RhdGljIGludCBydW5fYW0oc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGFtID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGZvcm1hdF9wYXRjaCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJldmlzaW9ucyA9IFNUUkJVRl9JTklUOworCWludCBzdGF0dXM7CisJY2hhciAqcmViYXNlZF9wYXRjaGVzOworCisJYW0uZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiYW0iKTsKKworCWlmIChvcHRzLT5hY3Rpb24gJiYgIXN0cmNtcCgiY29udGludWUiLCBvcHRzLT5hY3Rpb24pKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgIi0tcmVzb2x2ZWQiKTsKKwkJYXJndl9hcnJheV9wdXNoZigmYW0uYXJncywgIi0tcmVzb2x2ZW1zZz0lcyIsIHJlc29sdmVtc2cpOworCQlpZiAob3B0cy0+Z3BnX3NpZ25fb3B0KQorCQkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCBvcHRzLT5ncGdfc2lnbl9vcHQpOworCQlzdGF0dXMgPSBydW5fY29tbWFuZCgmYW0pOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKworCQlyZXR1cm4gbW92ZV90b19vcmlnaW5hbF9icmFuY2gob3B0cyk7CisJfQorCWlmIChvcHRzLT5hY3Rpb24gJiYgIXN0cmNtcCgic2tpcCIsIG9wdHMtPmFjdGlvbikpIHsKKwkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1za2lwIik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFtLmFyZ3MsICItLXJlc29sdmVtc2c9JXMiLCByZXNvbHZlbXNnKTsKKwkJc3RhdHVzID0gcnVuX2NvbW1hbmQoJmFtKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJcmV0dXJuIG1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoKG9wdHMpOworCX0KKwlpZiAob3B0cy0+YWN0aW9uICYmICFzdHJjbXAoInNob3ctY3VycmVudC1wYXRjaCIsIG9wdHMtPmFjdGlvbikpIHsKKwkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1zaG93LWN1cnJlbnQtcGF0Y2giKTsKKwkJcmV0dXJuIHJ1bl9jb21tYW5kKCZhbSk7CisJfQorCisJc3RyYnVmX2FkZGYoJnJldmlzaW9ucywgIiVzLi4uJXMiLAorCQkgICAgb2lkX3RvX2hleChvcHRzLT5yb290ID8KKwkJCSAgICAgICAvKiB0aGlzIGlzIG5vdyBlcXVpdmFsZW50IHRvICFvcHRzLT51cHN0cmVhbSAqLworCQkJICAgICAgICZvcHRzLT5vbnRvLT5vYmplY3Qub2lkIDoKKwkJCSAgICAgICAmb3B0cy0+dXBzdHJlYW0tPm9iamVjdC5vaWQpLAorCQkgICAgb2lkX3RvX2hleCgmb3B0cy0+b3JpZ19oZWFkKSk7CisKKwlyZWJhc2VkX3BhdGNoZXMgPSB4c3RyZHVwKGdpdF9wYXRoKCJyZWJhc2VkLXBhdGNoZXMiKSk7CisJZm9ybWF0X3BhdGNoLm91dCA9IG9wZW4ocmViYXNlZF9wYXRjaGVzLAorCQkJCU9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOworCWlmIChmb3JtYXRfcGF0Y2gub3V0IDwgMCkgeworCQlzdGF0dXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksCisJCQkJICAgICByZWJhc2VkX3BhdGNoZXMpOworCQlmcmVlKHJlYmFzZWRfcGF0Y2hlcyk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFtLmFyZ3MpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWZvcm1hdF9wYXRjaC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZmb3JtYXRfcGF0Y2guYXJncywgImZvcm1hdC1wYXRjaCIsICItayIsICItLXN0ZG91dCIsCisJCQkgIi0tZnVsbC1pbmRleCIsICItLWNoZXJyeS1waWNrIiwgIi0tcmlnaHQtb25seSIsCisJCQkgIi0tc3JjLXByZWZpeD1hLyIsICItLWRzdC1wcmVmaXg9Yi8iLCAiLS1uby1yZW5hbWVzIiwKKwkJCSAiLS1uby1jb3Zlci1sZXR0ZXIiLCAiLS1wcmV0dHk9bWJveHJkIiwgIi0tdG9wby1vcmRlciIsCisJCQkgIi0tbm8tYmFzZSIsIE5VTEwpOworCWlmIChvcHRzLT5naXRfZm9ybWF0X3BhdGNoX29wdC5sZW4pCisJCWFyZ3ZfYXJyYXlfc3BsaXQoJmZvcm1hdF9wYXRjaC5hcmdzLAorCQkJCSBvcHRzLT5naXRfZm9ybWF0X3BhdGNoX29wdC5idWYpOworCWFyZ3ZfYXJyYXlfcHVzaCgmZm9ybWF0X3BhdGNoLmFyZ3MsIHJldmlzaW9ucy5idWYpOworCWlmIChvcHRzLT5yZXN0cmljdF9yZXZpc2lvbikKKwkJYXJndl9hcnJheV9wdXNoZigmZm9ybWF0X3BhdGNoLmFyZ3MsICJeJXMiLAorCQkJCSBvaWRfdG9faGV4KCZvcHRzLT5yZXN0cmljdF9yZXZpc2lvbi0+b2JqZWN0Lm9pZCkpOworCisJc3RhdHVzID0gcnVuX2NvbW1hbmQoJmZvcm1hdF9wYXRjaCk7CisJaWYgKHN0YXR1cykgeworCQl1bmxpbmsocmViYXNlZF9wYXRjaGVzKTsKKwkJZnJlZShyZWJhc2VkX3BhdGNoZXMpOworCQlhcmd2X2FycmF5X2NsZWFyKCZhbS5hcmdzKTsKKworCQlyZXNldF9oZWFkKCZvcHRzLT5vcmlnX2hlYWQsICJjaGVja291dCIsIG9wdHMtPmhlYWRfbmFtZSwgMCwKKwkJCSAgICJIRUFEIiwgTlVMTCk7CisJCWVycm9yKF8oIlxuZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgIgorCQkJInBhdGNoZXMgdG8gcmVwbGF5XG4iCisJCQkidGhlc2UgcmV2aXNpb25zOlxuIgorCQkJIlxuICAgICVzXG5cbiIKKwkJCSJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iKSwKKwkJICAgICAgb3B0cy0+cmV2aXNpb25zKTsKKworCQlzdHJidWZfcmVsZWFzZSgmcmV2aXNpb25zKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnJldmlzaW9ucyk7CisKKwlhbS5pbiA9IG9wZW4ocmViYXNlZF9wYXRjaGVzLCBPX1JET05MWSk7CisJaWYgKGFtLmluIDwgMCkgeworCQlzdGF0dXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiksCisJCQkJICAgICByZWJhc2VkX3BhdGNoZXMpOworCQlmcmVlKHJlYmFzZWRfcGF0Y2hlcyk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFtLmFyZ3MpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWFyZ3ZfYXJyYXlfcHVzaHYoJmFtLmFyZ3MsIG9wdHMtPmdpdF9hbV9vcHRzLmFyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgIi0tcmViYXNpbmciKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZhbS5hcmdzLCAiLS1yZXNvbHZlbXNnPSVzIiwgcmVzb2x2ZW1zZyk7CisJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1wYXRjaC1mb3JtYXQ9bWJveHJkIik7CisJaWYgKG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlID09IFJFUkVSRV9BVVRPVVBEQVRFKQorCQlhcmd2X2FycmF5X3B1c2goJmFtLmFyZ3MsICItLXJlcmVyZS1hdXRvdXBkYXRlIik7CisJZWxzZSBpZiAob3B0cy0+YWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgPT0gUkVSRVJFX05PQVVUT1VQREFURSkKKwkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSIpOworCWlmIChvcHRzLT5ncGdfc2lnbl9vcHQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYW0uYXJncywgb3B0cy0+Z3BnX3NpZ25fb3B0KTsKKwlzdGF0dXMgPSBydW5fY29tbWFuZCgmYW0pOworCXVubGluayhyZWJhc2VkX3BhdGNoZXMpOworCWZyZWUocmViYXNlZF9wYXRjaGVzKTsKKworCWlmICghc3RhdHVzKSB7CisJCXJldHVybiBtb3ZlX3RvX29yaWdpbmFsX2JyYW5jaChvcHRzKTsKKwl9CisKKwlpZiAoaXNfZGlyZWN0b3J5KG9wdHMtPnN0YXRlX2RpcikpCisJCXJlYmFzZV93cml0ZV9iYXNpY19zdGF0ZShvcHRzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NwZWNpZmljX3JlYmFzZShzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMsIGVudW0gYWN0aW9uIGFjdGlvbikKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7IE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3RyYnVmIHNjcmlwdF9zbmlwcGV0ID0gU1RSQlVGX0lOSVQsIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBzdGF0dXM7CisJY29uc3QgY2hhciAqYmFja2VuZCwgKmJhY2tlbmRfZnVuYzsKKworCWlmIChvcHRzLT50eXBlID09IFJFQkFTRV9NRVJHRSkgeworCQkvKiBSdW4gc2VxdWVuY2VyLWJhc2VkIHJlYmFzZSAqLworCQlzZXRlbnYoIkdJVF9DSEVSUllfUElDS19IRUxQIiwgcmVzb2x2ZW1zZywgMSk7CisJCWlmICghKG9wdHMtPmZsYWdzICYgUkVCQVNFX0lOVEVSQUNUSVZFX0VYUExJQ0lUKSkgeworCQkJc2V0ZW52KCJHSVRfU0VRVUVOQ0VfRURJVE9SIiwgIjoiLCAxKTsKKwkJCW9wdHMtPmF1dG9zcXVhc2ggPSAwOworCQl9CisJCWlmIChvcHRzLT5ncGdfc2lnbl9vcHQpIHsKKwkJCS8qIHJlbW92ZSB0aGUgbGVhZGluZyAiLVMiICovCisJCQljaGFyICp0bXAgPSB4c3RyZHVwKG9wdHMtPmdwZ19zaWduX29wdCArIDIpOworCQkJZnJlZShvcHRzLT5ncGdfc2lnbl9vcHQpOworCQkJb3B0cy0+Z3BnX3NpZ25fb3B0ID0gdG1wOworCQl9CisKKwkJc3RhdHVzID0gcnVuX3NlcXVlbmNlcl9yZWJhc2Uob3B0cywgYWN0aW9uKTsKKwkJZ290byBmaW5pc2hlZF9yZWJhc2U7CisJfQorCisJaWYgKG9wdHMtPnR5cGUgPT0gUkVCQVNFX0FQUExZKSB7CisJCXN0YXR1cyA9IHJ1bl9hbShvcHRzKTsKKwkJZ290byBmaW5pc2hlZF9yZWJhc2U7CisJfQorCisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJHSVRfRElSIiwgYWJzb2x1dGVfcGF0aChnZXRfZ2l0X2RpcigpKSk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJzdGF0ZV9kaXIiLCBvcHRzLT5zdGF0ZV9kaXIpOworCisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJ1cHN0cmVhbV9uYW1lIiwgb3B0cy0+dXBzdHJlYW1fbmFtZSk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJ1cHN0cmVhbSIsIG9wdHMtPnVwc3RyZWFtID8KKwkJb2lkX3RvX2hleCgmb3B0cy0+dXBzdHJlYW0tPm9iamVjdC5vaWQpIDogTlVMTCk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJoZWFkX25hbWUiLAorCQlvcHRzLT5oZWFkX25hbWUgPyBvcHRzLT5oZWFkX25hbWUgOiAiZGV0YWNoZWQgSEVBRCIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAib3JpZ19oZWFkIiwgb2lkX3RvX2hleCgmb3B0cy0+b3JpZ19oZWFkKSk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJvbnRvIiwgb3B0cy0+b250byA/CisJCW9pZF90b19oZXgoJm9wdHMtPm9udG8tPm9iamVjdC5vaWQpIDogTlVMTCk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJvbnRvX25hbWUiLCBvcHRzLT5vbnRvX25hbWUpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAicmV2aXNpb25zIiwgb3B0cy0+cmV2aXNpb25zKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgInJlc3RyaWN0X3JldmlzaW9uIiwgb3B0cy0+cmVzdHJpY3RfcmV2aXNpb24gPworCQlvaWRfdG9faGV4KCZvcHRzLT5yZXN0cmljdF9yZXZpc2lvbi0+b2JqZWN0Lm9pZCkgOiBOVUxMKTsKKwlzcV9xdW90ZV9hcmd2X3ByZXR0eSgmYnVmLCBvcHRzLT5naXRfYW1fb3B0cy5hcmd2KTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgImdpdF9hbV9vcHQiLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgInZlcmJvc2UiLAorCQlvcHRzLT5mbGFncyAmIFJFQkFTRV9WRVJCT1NFID8gInQiIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAiZGlmZnN0YXQiLAorCQlvcHRzLT5mbGFncyAmIFJFQkFTRV9ESUZGU1RBVCA/ICJ0IiA6ICIiKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgImZvcmNlX3JlYmFzZSIsCisJCW9wdHMtPmZsYWdzICYgUkVCQVNFX0ZPUkNFID8gInQiIDogIiIpOworCWlmIChvcHRzLT5zd2l0Y2hfdG8pCisJCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAic3dpdGNoX3RvIiwgb3B0cy0+c3dpdGNoX3RvKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgImFjdGlvbiIsIG9wdHMtPmFjdGlvbiA/IG9wdHMtPmFjdGlvbiA6ICIiKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgInNpZ25vZmYiLCBvcHRzLT5zaWdub2ZmID8gIi0tc2lnbm9mZiIgOiAiIik7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSIsCisJCW9wdHMtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlID8KKwkJCW9wdHMtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlID09IFJFUkVSRV9BVVRPVVBEQVRFID8KKwkJCSItLXJlcmVyZS1hdXRvdXBkYXRlIiA6ICItLW5vLXJlcmVyZS1hdXRvdXBkYXRlIiA6ICIiKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgImF1dG9zcXVhc2giLCBvcHRzLT5hdXRvc3F1YXNoID8gInQiIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAiZ3BnX3NpZ25fb3B0Iiwgb3B0cy0+Z3BnX3NpZ25fb3B0KTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgImNtZCIsIG9wdHMtPmNtZCk7CisJYWRkX3Zhcigmc2NyaXB0X3NuaXBwZXQsICJhbGxvd19lbXB0eV9tZXNzYWdlIiwKKwkJb3B0cy0+YWxsb3dfZW1wdHlfbWVzc2FnZSA/ICAiLS1hbGxvdy1lbXB0eS1tZXNzYWdlIiA6ICIiKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgInJlYmFzZV9tZXJnZXMiLAorCQlvcHRzLT5yZWJhc2VfbWVyZ2VzID8gInQiIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAicmViYXNlX2NvdXNpbnMiLAorCQlvcHRzLT5yZWJhc2VfY291c2lucyA/ICJ0IiA6ICIiKTsKKwlhZGRfdmFyKCZzY3JpcHRfc25pcHBldCwgInN0cmF0ZWd5Iiwgb3B0cy0+c3RyYXRlZ3kpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAic3RyYXRlZ3lfb3B0cyIsIG9wdHMtPnN0cmF0ZWd5X29wdHMpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAicmViYXNlX3Jvb3QiLCBvcHRzLT5yb290ID8gInQiIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAic3F1YXNoX29udG8iLAorCQlvcHRzLT5zcXVhc2hfb250byA/IG9pZF90b19oZXgob3B0cy0+c3F1YXNoX29udG8pIDogIiIpOworCWFkZF92YXIoJnNjcmlwdF9zbmlwcGV0LCAiZ2l0X2Zvcm1hdF9wYXRjaF9vcHQiLAorCQlvcHRzLT5naXRfZm9ybWF0X3BhdGNoX29wdC5idWYpOworCisJaWYgKGlzX21lcmdlKG9wdHMpICYmCisJICAgICEob3B0cy0+ZmxhZ3MgJiBSRUJBU0VfSU5URVJBQ1RJVkVfRVhQTElDSVQpKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnNjcmlwdF9zbmlwcGV0LAorCQkJICAgICAgIkdJVF9TRVFVRU5DRV9FRElUT1I9OjsgZXhwb3J0IEdJVF9TRVFVRU5DRV9FRElUT1I7ICIpOworCQlvcHRzLT5hdXRvc3F1YXNoID0gMDsKKwl9CisKKwlzd2l0Y2ggKG9wdHMtPnR5cGUpIHsKKwljYXNlIFJFQkFTRV9QUkVTRVJWRV9NRVJHRVM6CisJCWJhY2tlbmQgPSAiZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzIjsKKwkJYmFja2VuZF9mdW5jID0gImdpdF9yZWJhc2VfX3ByZXNlcnZlX21lcmdlcyI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygiVW5oYW5kbGVkIHJlYmFzZSB0eXBlICVkIiwgb3B0cy0+dHlwZSk7CisJCWJyZWFrOworCX0KKworCXN0cmJ1Zl9hZGRmKCZzY3JpcHRfc25pcHBldCwKKwkJICAgICIuIGdpdC1zaC1zZXR1cCAmJiAuICVzICYmICVzIiwgYmFja2VuZCwgYmFja2VuZF9mdW5jKTsKKwlhcmd2WzBdID0gc2NyaXB0X3NuaXBwZXQuYnVmOworCisJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX1VTSU5HX1NIRUxMKTsKK2ZpbmlzaGVkX3JlYmFzZToKKwlpZiAob3B0cy0+ZG9udF9maW5pc2hfcmViYXNlKQorCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwllbHNlIGlmIChvcHRzLT50eXBlID09IFJFQkFTRV9NRVJHRSkKKwkJOyAvKiBtZXJnZSBiYWNrZW5kIGNsZWFucyB1cCBhZnRlciBpdHNlbGYgKi8KKwllbHNlIGlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAoIWZpbGVfZXhpc3RzKHN0YXRlX2Rpcl9wYXRoKCJzdG9wcGVkLXNoYSIsIG9wdHMpKSkKKwkJCWZpbmlzaF9yZWJhc2Uob3B0cyk7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMikgeworCQlzdHJ1Y3Qgc3RyYnVmIGRpciA9IFNUUkJVRl9JTklUOworCisJCWFwcGx5X2F1dG9zdGFzaChvcHRzKTsKKwkJc3RyYnVmX2FkZHN0cigmZGlyLCBvcHRzLT5zdGF0ZV9kaXIpOworCQlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZkaXIsIDApOworCQlzdHJidWZfcmVsZWFzZSgmZGlyKTsKKwkJZGllKCJOb3RoaW5nIHRvIGRvIik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnNjcmlwdF9zbmlwcGV0KTsKKworCXJldHVybiBzdGF0dXMgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcmViYXNlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cyA9IGRhdGE7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJyZWJhc2Uuc3RhdCIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQlvcHRzLT5mbGFncyB8PSBSRUJBU0VfRElGRlNUQVQ7CisJCWVsc2UKKwkJCW9wdHMtPmZsYWdzICY9IH5SRUJBU0VfRElGRlNUQVQ7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInJlYmFzZS5hdXRvc3F1YXNoIikpIHsKKwkJb3B0cy0+YXV0b3NxdWFzaCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29tbWl0LmdwZ3NpZ24iKSkgeworCQlmcmVlKG9wdHMtPmdwZ19zaWduX29wdCk7CisJCW9wdHMtPmdwZ19zaWduX29wdCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/CisJCQl4c3RyZHVwKCItUyIpIDogTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAicmViYXNlLmF1dG9zdGFzaCIpKSB7CisJCW9wdHMtPmF1dG9zdGFzaCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAicmViYXNlLnJlc2NoZWR1bGVmYWlsZWRleGVjIikpIHsKKwkJb3B0cy0+cmVzY2hlZHVsZV9mYWlsZWRfZXhlYyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAicmViYXNlLnVzZWJ1aWx0aW4iKSkgeworCQlvcHRzLT51c2VfbGVnYWN5X3JlYmFzZSA9ICFnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInJlYmFzZS5iYWNrZW5kIikpIHsKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZvcHRzLT5kZWZhdWx0X2JhY2tlbmQsIHZhciwgdmFsdWUpOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgZGF0YSk7Cit9CisKKy8qCisgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbW1pdHMgaW4gZnJvbS4udG8gYXJlIGxpbmVhciwgaS5lLiBjb250YWluCisgKiBubyBtZXJnZSBjb21taXRzLiBUaGlzIGZ1bmN0aW9uICpleHBlY3RzKiBgZnJvbWAgdG8gYmUgYW4gYW5jZXN0b3Igb2YKKyAqIGB0b2AuCisgKi8KK3N0YXRpYyBpbnQgaXNfbGluZWFyX2hpc3Rvcnkoc3RydWN0IGNvbW1pdCAqZnJvbSwgc3RydWN0IGNvbW1pdCAqdG8pCit7CisJd2hpbGUgKHRvICYmIHRvICE9IGZyb20pIHsKKwkJcGFyc2VfY29tbWl0KHRvKTsKKwkJaWYgKCF0by0+cGFyZW50cykKKwkJCXJldHVybiAxOworCQlpZiAodG8tPnBhcmVudHMtPm5leHQpCisJCQlyZXR1cm4gMDsKKwkJdG8gPSB0by0+cGFyZW50cy0+aXRlbTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2FuX2Zhc3RfZm9yd2FyZChzdHJ1Y3QgY29tbWl0ICpvbnRvLCBzdHJ1Y3QgY29tbWl0ICp1cHN0cmVhbSwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0ICpyZXN0cmljdF9yZXZpc2lvbiwKKwkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpoZWFkX29pZCwgc3RydWN0IG9iamVjdF9pZCAqbWVyZ2VfYmFzZSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgaGVhZF9vaWQpOworCXN0cnVjdCBjb21taXRfbGlzdCAqbWVyZ2VfYmFzZXMgPSBOVUxMOworCWludCByZXMgPSAwOworCisJaWYgKCFoZWFkKQorCQlnb3RvIGRvbmU7CisKKwltZXJnZV9iYXNlcyA9IGdldF9tZXJnZV9iYXNlcyhvbnRvLCBoZWFkKTsKKwlpZiAoIW1lcmdlX2Jhc2VzIHx8IG1lcmdlX2Jhc2VzLT5uZXh0KSB7CisJCW9pZGNweShtZXJnZV9iYXNlLCAmbnVsbF9vaWQpOworCQlnb3RvIGRvbmU7CisJfQorCisJb2lkY3B5KG1lcmdlX2Jhc2UsICZtZXJnZV9iYXNlcy0+aXRlbS0+b2JqZWN0Lm9pZCk7CisJaWYgKCFvaWRlcShtZXJnZV9iYXNlLCAmb250by0+b2JqZWN0Lm9pZCkpCisJCWdvdG8gZG9uZTsKKworCWlmIChyZXN0cmljdF9yZXZpc2lvbiAmJiAhb2lkZXEoJnJlc3RyaWN0X3JldmlzaW9uLT5vYmplY3Qub2lkLCBtZXJnZV9iYXNlKSkKKwkJZ290byBkb25lOworCisJaWYgKCF1cHN0cmVhbSkKKwkJZ290byBkb25lOworCisJZnJlZV9jb21taXRfbGlzdChtZXJnZV9iYXNlcyk7CisJbWVyZ2VfYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXModXBzdHJlYW0sIGhlYWQpOworCWlmICghbWVyZ2VfYmFzZXMgfHwgbWVyZ2VfYmFzZXMtPm5leHQpCisJCWdvdG8gZG9uZTsKKworCWlmICghb2lkZXEoJm9udG8tPm9iamVjdC5vaWQsICZtZXJnZV9iYXNlcy0+aXRlbS0+b2JqZWN0Lm9pZCkpCisJCWdvdG8gZG9uZTsKKworCXJlcyA9IDE7CisKK2RvbmU6CisJZnJlZV9jb21taXRfbGlzdChtZXJnZV9iYXNlcyk7CisJcmV0dXJuIHJlcyAmJiBpc19saW5lYXJfaGlzdG9yeShvbnRvLCBoZWFkKTsKK30KKworc3RhdGljIGludCBwYXJzZV9vcHRfYW0oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlvcHRzLT50eXBlID0gUkVCQVNFX0FQUExZOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC1pIGZvbGxvd2VkIGJ5IC1tIGlzIHN0aWxsIC1pICovCitzdGF0aWMgaW50IHBhcnNlX29wdF9tZXJnZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZWJhc2Vfb3B0aW9ucyAqb3B0cyA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKworCWlmICghaXNfbWVyZ2Uob3B0cykpCisJCW9wdHMtPnR5cGUgPSBSRUJBU0VfTUVSR0U7CisKKwlyZXR1cm4gMDsKK30KKworLyogLWkgZm9sbG93ZWQgYnkgLXAgaXMgc3RpbGwgZXhwbGljaXRseSBpbnRlcmFjdGl2ZSwgYnV0IC1wIGFsb25lIGlzIG5vdCAqLworc3RhdGljIGludCBwYXJzZV9vcHRfaW50ZXJhY3RpdmUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkJIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmViYXNlX29wdGlvbnMgKm9wdHMgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlvcHRzLT50eXBlID0gUkVCQVNFX01FUkdFOworCW9wdHMtPmZsYWdzIHw9IFJFQkFTRV9JTlRFUkFDVElWRV9FWFBMSUNJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBlbXB0eV90eXBlIHBhcnNlX2VtcHR5X3ZhbHVlKGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImRyb3AiKSkKKwkJcmV0dXJuIEVNUFRZX0RST1A7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJrZWVwIikpCisJCXJldHVybiBFTVBUWV9LRUVQOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiYXNrIikpCisJCXJldHVybiBFTVBUWV9BU0s7CisKKwlkaWUoXygidW5yZWNvZ25pemVkIGVtcHR5IHR5cGUgJyVzJzsgdmFsaWQgdmFsdWVzIGFyZSBcImRyb3BcIiwgXCJrZWVwXCIsIGFuZCBcImFza1wiLiIpLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0X2VtcHR5KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRpb25zID0gb3B0LT52YWx1ZTsKKwllbnVtIGVtcHR5X3R5cGUgdmFsdWUgPSBwYXJzZV9lbXB0eV92YWx1ZShhcmcpOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJb3B0aW9ucy0+ZW1wdHkgPSB2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gZXJyb3Jfb25fbWlzc2luZ19kZWZhdWx0X3Vwc3RyZWFtKHZvaWQpCit7CisJc3RydWN0IGJyYW5jaCAqY3VycmVudF9icmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCisJcHJpbnRmKF8oIiVzXG4iCisJCSAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorCQkgIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorCQkgIlxuIgorCQkgIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKwkJICJcbiIpLAorCQljdXJyZW50X2JyYW5jaCA/IF8oIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciAiCisJCQkidGhlIGN1cnJlbnQgYnJhbmNoLiIpIDoKKwkJCV8oIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iKSk7CisKKwlpZiAoY3VycmVudF9icmFuY2gpIHsKKwkJY29uc3QgY2hhciAqcmVtb3RlID0gY3VycmVudF9icmFuY2gtPnJlbW90ZV9uYW1lOworCisJCWlmICghcmVtb3RlKQorCQkJcmVtb3RlID0gXygiPHJlbW90ZT4iKTsKKworCQlwcmludGYoXygiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzICIKKwkJCSAiYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKwkJCSAiXG4iCisJCQkgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisJCQkgIlxuIiksCisJCSAgICAgICByZW1vdGUsIGN1cnJlbnRfYnJhbmNoLT5uYW1lKTsKKwl9CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZmxvZ19hY3Rpb24oc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRpb25zKQoreworCWNvbnN0IGNoYXIgKmVudjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFpc19tZXJnZShvcHRpb25zKSkKKwkJcmV0dXJuOworCisJZW52ID0gZ2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OX0VOVklST05NRU5UKTsKKwlpZiAoZW52ICYmIHN0cmNtcCgicmViYXNlIiwgZW52KSkKKwkJcmV0dXJuOyAvKiBvbmx5IG92ZXJyaWRlIGl0IGlmIGl0IGlzICJyZWJhc2UiICovCisKKwlzdHJidWZfYWRkZigmYnVmLCAicmViYXNlICglcykiLCBvcHRpb25zLT5hY3Rpb24pOworCXNldGVudihHSVRfUkVGTE9HX0FDVElPTl9FTlZJUk9OTUVOVCwgYnVmLmJ1ZiwgMSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZXhlY19jbWQoY29uc3QgY2hhciAqY21kKQoreworCWlmIChzdHJjaHIoY21kLCAnXG4nKSkKKwkJcmV0dXJuIGVycm9yKF8oImV4ZWMgY29tbWFuZHMgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiKSk7CisKKwkvKiBEb2VzIHRoZSBjb21tYW5kIGNvbnNpc3QgcHVyZWx5IG9mIHdoaXRlc3BhY2U/ICovCisJaWYgKCFjbWRbc3Ryc3BuKGNtZCwgIiBcdFxyXGZcdiIpXSkKKwkJcmV0dXJuIGVycm9yKF8oImVtcHR5IGV4ZWMgY29tbWFuZCIpKTsKKworCXJldHVybiAwOworfQorCisKK2ludCBjbWRfcmViYXNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZWJhc2Vfb3B0aW9ucyBvcHRpb25zID0gUkVCQVNFX09QVElPTlNfSU5JVDsKKwljb25zdCBjaGFyICpicmFuY2hfbmFtZTsKKwlpbnQgcmV0LCBmbGFncywgdG90YWxfYXJnYywgaW5fcHJvZ3Jlc3MgPSAwOworCWludCBrZWVwX2Jhc2UgPSAwOworCWludCBva190b19za2lwX3ByZV9yZWJhc2UgPSAwOworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiByZXZpc2lvbnMgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgbWVyZ2VfYmFzZTsKKwllbnVtIGFjdGlvbiBhY3Rpb24gPSBBQ1RJT05fTk9ORTsKKwljb25zdCBjaGFyICpncGdfc2lnbiA9IE5VTEw7CisJc3RydWN0IHN0cmluZ19saXN0IGV4ZWMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNvbnN0IGNoYXIgKnJlYmFzZV9tZXJnZXMgPSBOVUxMOworCWludCBmb3JrX3BvaW50ID0gLTE7CisJc3RydWN0IHN0cmluZ19saXN0IHN0cmF0ZWd5X29wdGlvbnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBvYmplY3RfaWQgc3F1YXNoX29udG87CisJY2hhciAqc3F1YXNoX29udG9fbmFtZSA9IE5VTEw7CisJaW50IHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMgPSAtMTsKKwlpbnQgYWxsb3dfcHJlZW1wdGl2ZV9mZiA9IDE7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX3JlYmFzZV9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgIm9udG8iLCAmb3B0aW9ucy5vbnRvX25hbWUsCisJCQkgICBOXygicmV2aXNpb24iKSwKKwkJCSAgIE5fKCJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIpKSwKKwkJT1BUX0JPT0woMCwgImtlZXAtYmFzZSIsICZrZWVwX2Jhc2UsCisJCQkgTl8oInVzZSB0aGUgbWVyZ2UtYmFzZSBvZiB1cHN0cmVhbSBhbmQgYnJhbmNoIGFzIHRoZSBjdXJyZW50IGJhc2UiKSksCisJCU9QVF9CT09MKDAsICJuby12ZXJpZnkiLCAmb2tfdG9fc2tpcF9wcmVfcmViYXNlLAorCQkJIE5fKCJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIikpLAorCQlPUFRfTkVHQklUKCdxJywgInF1aWV0IiwgJm9wdGlvbnMuZmxhZ3MsCisJCQkgICBOXygiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IiksCisJCQkgICBSRUJBU0VfTk9fUVVJRVQgfCBSRUJBU0VfVkVSQk9TRSB8IFJFQkFTRV9ESUZGU1RBVCksCisJCU9QVF9CSVQoJ3YnLCAidmVyYm9zZSIsICZvcHRpb25zLmZsYWdzLAorCQkJTl8oImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iKSwKKwkJCVJFQkFTRV9OT19RVUlFVCB8IFJFQkFTRV9WRVJCT1NFIHwgUkVCQVNFX0RJRkZTVEFUKSwKKwkJe09QVElPTl9ORUdCSVQsICduJywgIm5vLXN0YXQiLCAmb3B0aW9ucy5mbGFncywgTlVMTCwKKwkJCU5fKCJkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iKSwKKwkJCVBBUlNFX09QVF9OT0FSRywgTlVMTCwgUkVCQVNFX0RJRkZTVEFUIH0sCisJCU9QVF9CT09MKDAsICJzaWdub2ZmIiwgJm9wdGlvbnMuc2lnbm9mZiwKKwkJCSBOXygiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIpKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImlnbm9yZS13aGl0ZXNwYWNlIiwgJm9wdGlvbnMuZ2l0X2FtX29wdHMsCisJCQkJICBOVUxMLCBOXygicGFzc2VkIHRvICdnaXQgYW0nIiksCisJCQkJICBQQVJTRV9PUFRfTk9BUkcpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUiLAorCQkJCSAgJm9wdGlvbnMuZ2l0X2FtX29wdHMsIE5VTEwsCisJCQkJICBOXygicGFzc2VkIHRvICdnaXQgYW0nIiksIFBBUlNFX09QVF9OT0FSRyksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJpZ25vcmUtZGF0ZSIsICZvcHRpb25zLmdpdF9hbV9vcHRzLCBOVUxMLAorCQkJCSAgTl8oInBhc3NlZCB0byAnZ2l0IGFtJyIpLCBQQVJTRV9PUFRfTk9BUkcpLAorCQlPUFRfUEFTU1RIUlVfQVJHVignQycsIE5VTEwsICZvcHRpb25zLmdpdF9hbV9vcHRzLCBOXygibiIpLAorCQkJCSAgTl8oInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIpLCAwKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgIndoaXRlc3BhY2UiLCAmb3B0aW9ucy5naXRfYW1fb3B0cywKKwkJCQkgIE5fKCJhY3Rpb24iKSwgTl8oInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIpLCAwKSwKKwkJT1BUX0JJVCgnZicsICJmb3JjZS1yZWJhc2UiLCAmb3B0aW9ucy5mbGFncywKKwkJCU5fKCJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiKSwKKwkJCVJFQkFTRV9GT1JDRSksCisJCU9QVF9CSVQoMCwgIm5vLWZmIiwgJm9wdGlvbnMuZmxhZ3MsCisJCQlOXygiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIiksCisJCQlSRUJBU0VfRk9SQ0UpLAorCQlPUFRfQ01ETU9ERSgwLCAiY29udGludWUiLCAmYWN0aW9uLCBOXygiY29udGludWUiKSwKKwkJCSAgICBBQ1RJT05fQ09OVElOVUUpLAorCQlPUFRfQ01ETU9ERSgwLCAic2tpcCIsICZhY3Rpb24sCisJCQkgICAgTl8oInNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUiKSwgQUNUSU9OX1NLSVApLAorCQlPUFRfQ01ETU9ERSgwLCAiYWJvcnQiLCAmYWN0aW9uLAorCQkJICAgIE5fKCJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giKSwKKwkJCSAgICBBQ1RJT05fQUJPUlQpLAorCQlPUFRfQ01ETU9ERSgwLCAicXVpdCIsICZhY3Rpb24sCisJCQkgICAgTl8oImFib3J0IGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMiKSwgQUNUSU9OX1FVSVQpLAorCQlPUFRfQ01ETU9ERSgwLCAiZWRpdC10b2RvIiwgJmFjdGlvbiwgTl8oImVkaXQgdGhlIHRvZG8gbGlzdCAiCisJCQkgICAgImR1cmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiKSwgQUNUSU9OX0VESVRfVE9ETyksCisJCU9QVF9DTURNT0RFKDAsICJzaG93LWN1cnJlbnQtcGF0Y2giLCAmYWN0aW9uLAorCQkJICAgIE5fKCJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIiksCisJCQkgICAgQUNUSU9OX1NIT1dfQ1VSUkVOVF9QQVRDSCksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiYXBwbHkiLCAmb3B0aW9ucywgTlVMTCwKKwkJCU5fKCJ1c2UgYXBwbHkgc3RyYXRlZ2llcyB0byByZWJhc2UiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX29wdF9hbSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ20nLCAibWVyZ2UiLCAmb3B0aW9ucywgTlVMTCwKKwkJCU5fKCJ1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2Vfb3B0X21lcmdlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnaScsICJpbnRlcmFjdGl2ZSIsICZvcHRpb25zLCBOVUxMLAorCQkJTl8oImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9vcHRfaW50ZXJhY3RpdmUgfSwKKwkJT1BUX1NFVF9JTlRfRigncCcsICJwcmVzZXJ2ZS1tZXJnZXMiLCAmb3B0aW9ucy50eXBlLAorCQkJICAgICAgTl8oIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgIgorCQkJCSAiaWdub3JpbmcgdGhlbSIpLAorCQkJICAgICAgUkVCQVNFX1BSRVNFUlZFX01FUkdFUywgUEFSU0VfT1BUX0hJRERFTiksCisJCU9QVF9SRVJFUkVfQVVUT1VQREFURSgmb3B0aW9ucy5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSksCisJCU9QVF9DQUxMQkFDS19GKDAsICJlbXB0eSIsICZvcHRpb25zLCAie2Ryb3Asa2VlcCxhc2t9IiwKKwkJCSAgICAgICBOXygiaG93IHRvIGhhbmRsZSBjb21taXRzIHRoYXQgYmVjb21lIGVtcHR5IiksCisJCQkgICAgICAgUEFSU0VfT1BUX05PTkVHLCBwYXJzZV9vcHRfZW1wdHkpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2snLCAia2VlcC1lbXB0eSIsICZvcHRpb25zLCBOVUxMLAorCQkJTl8oIihERVBSRUNBVEVEKSBrZWVwIGVtcHR5IGNvbW1pdHMiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4sCisJCQlwYXJzZV9vcHRfa2VlcF9lbXB0eSB9LAorCQlPUFRfQk9PTCgwLCAiYXV0b3NxdWFzaCIsICZvcHRpb25zLmF1dG9zcXVhc2gsCisJCQkgTl8oIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggIgorCQkJICAgICJzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAnUycsICJncGctc2lnbiIsICZncGdfc2lnbiwgTl8oImtleS1pZCIpLAorCQkJTl8oIkdQRy1zaWduIGNvbW1pdHMiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkgIiIgfSwKKwkJT1BUX0JPT0woMCwgImF1dG9zdGFzaCIsICZvcHRpb25zLmF1dG9zdGFzaCwKKwkJCSBOXygiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciIpKSwKKwkJT1BUX1NUUklOR19MSVNUKCd4JywgImV4ZWMiLCAmZXhlYywgTl8oImV4ZWMiKSwKKwkJCQlOXygiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlICIKKwkJCQkgICAiZWRpdGFibGUgbGlzdCIpKSwKKwkJT1BUX0JPT0xfRigwLCAiYWxsb3ctZW1wdHktbWVzc2FnZSIsCisJCQkgICAmb3B0aW9ucy5hbGxvd19lbXB0eV9tZXNzYWdlLAorCQkJICAgTl8oImFsbG93IHJlYmFzaW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIpLAorCQkJICAgUEFSU0VfT1BUX0hJRERFTiksCisJCXtPUFRJT05fU1RSSU5HLCAncicsICJyZWJhc2UtbWVyZ2VzIiwgJnJlYmFzZV9tZXJnZXMsCisJCQlOXygibW9kZSIpLAorCQkJTl8oInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSIifSwKKwkJT1BUX0JPT0woMCwgImZvcmstcG9pbnQiLCAmZm9ya19wb2ludCwKKwkJCSBOXygidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIikpLAorCQlPUFRfU1RSSU5HKCdzJywgInN0cmF0ZWd5IiwgJm9wdGlvbnMuc3RyYXRlZ3ksCisJCQkgICBOXygic3RyYXRlZ3kiKSwgTl8oInVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kiKSksCisJCU9QVF9TVFJJTkdfTElTVCgnWCcsICJzdHJhdGVneS1vcHRpb24iLCAmc3RyYXRlZ3lfb3B0aW9ucywKKwkJCQlOXygib3B0aW9uIiksCisJCQkJTl8oInBhc3MgdGhlIGFyZ3VtZW50IHRocm91Z2ggdG8gdGhlIG1lcmdlICIKKwkJCQkgICAic3RyYXRlZ3kiKSksCisJCU9QVF9CT09MKDAsICJyb290IiwgJm9wdGlvbnMucm9vdCwKKwkJCSBOXygicmViYXNlIGFsbCByZWFjaGFibGUgY29tbWl0cyB1cCB0byB0aGUgcm9vdChzKSIpKSwKKwkJT1BUX0JPT0woMCwgInJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMiLAorCQkJICZyZXNjaGVkdWxlX2ZhaWxlZF9leGVjLAorCQkJIE5fKCJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIpKSwKKwkJT1BUX0VORCgpLAorCX07CisJaW50IGk7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlYmFzZV91c2FnZSwKKwkJCQkgICBidWlsdGluX3JlYmFzZV9vcHRpb25zKTsKKworCW9wdGlvbnMuYWxsb3dfZW1wdHlfbWVzc2FnZSA9IDE7CisJZ2l0X2NvbmZpZyhyZWJhc2VfY29uZmlnLCAmb3B0aW9ucyk7CisKKwlpZiAob3B0aW9ucy51c2VfbGVnYWN5X3JlYmFzZSB8fAorCSAgICAhZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9SRUJBU0VfVVNFX0JVSUxUSU4iLCAtMSkpCisJCXdhcm5pbmcoXygidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKwkJCSAgIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIikpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9hcHBseWluZyIsIGFwcGx5X2RpcigpKTsKKwlpZihmaWxlX2V4aXN0cyhidWYuYnVmKSkKKwkJZGllKF8oIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIikpOworCisJaWYgKGlzX2RpcmVjdG9yeShhcHBseV9kaXIoKSkpIHsKKwkJb3B0aW9ucy50eXBlID0gUkVCQVNFX0FQUExZOworCQlvcHRpb25zLnN0YXRlX2RpciA9IGFwcGx5X2RpcigpOworCX0gZWxzZSBpZiAoaXNfZGlyZWN0b3J5KG1lcmdlX2RpcigpKSkgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9yZXdyaXR0ZW4iLCBtZXJnZV9kaXIoKSk7CisJCWlmIChpc19kaXJlY3RvcnkoYnVmLmJ1ZikpIHsKKwkJCW9wdGlvbnMudHlwZSA9IFJFQkFTRV9QUkVTRVJWRV9NRVJHRVM7CisJCQlvcHRpb25zLmZsYWdzIHw9IFJFQkFTRV9JTlRFUkFDVElWRV9FWFBMSUNJVDsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9pbnRlcmFjdGl2ZSIsIG1lcmdlX2RpcigpKTsKKwkJCWlmKGZpbGVfZXhpc3RzKGJ1Zi5idWYpKSB7CisJCQkJb3B0aW9ucy50eXBlID0gUkVCQVNFX01FUkdFOworCQkJCW9wdGlvbnMuZmxhZ3MgfD0gUkVCQVNFX0lOVEVSQUNUSVZFX0VYUExJQ0lUOworCQkJfSBlbHNlCisJCQkJb3B0aW9ucy50eXBlID0gUkVCQVNFX01FUkdFOworCQl9CisJCW9wdGlvbnMuc3RhdGVfZGlyID0gbWVyZ2VfZGlyKCk7CisJfQorCisJaWYgKG9wdGlvbnMudHlwZSAhPSBSRUJBU0VfVU5TUEVDSUZJRUQpCisJCWluX3Byb2dyZXNzID0gMTsKKworCXRvdGFsX2FyZ2MgPSBhcmdjOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9yZWJhc2Vfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9yZWJhc2VfdXNhZ2UsIDApOworCisJaWYgKGFjdGlvbiAhPSBBQ1RJT05fTk9ORSAmJiB0b3RhbF9hcmdjICE9IDIpIHsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmViYXNlX3VzYWdlLAorCQkJCSAgIGJ1aWx0aW5fcmViYXNlX29wdGlvbnMpOworCX0KKworCWlmIChhcmdjID4gMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmViYXNlX3VzYWdlLAorCQkJCSAgIGJ1aWx0aW5fcmViYXNlX29wdGlvbnMpOworCisJaWYgKG9wdGlvbnMudHlwZSA9PSBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTKQorCQl3YXJuaW5nKF8oImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gIgorCQkJICAiVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIpKTsKKworCWlmIChrZWVwX2Jhc2UpIHsKKwkJaWYgKG9wdGlvbnMub250b19uYW1lKQorCQkJZGllKF8oImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1vbnRvJyIpKTsKKwkJaWYgKG9wdGlvbnMucm9vdCkKKwkJCWRpZShfKCJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciKSk7CisJfQorCisJaWYgKGFjdGlvbiAhPSBBQ1RJT05fTk9ORSAmJiAhaW5fcHJvZ3Jlc3MpCisJCWRpZShfKCJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IikpOworCXNldGVudihHSVRfUkVGTE9HX0FDVElPTl9FTlZJUk9OTUVOVCwgInJlYmFzZSIsIDApOworCisJaWYgKGFjdGlvbiA9PSBBQ1RJT05fRURJVF9UT0RPICYmICFpc19tZXJnZSgmb3B0aW9ucykpCisJCWRpZShfKCJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nICIKKwkJICAgICAgImludGVyYWN0aXZlIHJlYmFzZS4iKSk7CisKKwlpZiAodHJhY2UyX2lzX2VuYWJsZWQoKSkgeworCQlpZiAoaXNfbWVyZ2UoJm9wdGlvbnMpKQorCQkJdHJhY2UyX2NtZF9tb2RlKCJpbnRlcmFjdGl2ZSIpOworCQllbHNlIGlmIChleGVjLm5yKQorCQkJdHJhY2UyX2NtZF9tb2RlKCJpbnRlcmFjdGl2ZS1leGVjIik7CisJCWVsc2UKKwkJCXRyYWNlMl9jbWRfbW9kZShhY3Rpb25fbmFtZXNbYWN0aW9uXSk7CisJfQorCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEFDVElPTl9DT05USU5VRTogeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQ7CisJCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCQlpbnQgZmQ7CisKKwkJb3B0aW9ucy5hY3Rpb24gPSAiY29udGludWUiOworCQlzZXRfcmVmbG9nX2FjdGlvbigmb3B0aW9ucyk7CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmIChnZXRfb2lkKCJIRUFEIiwgJmhlYWQpKQorCQkJZGllKF8oIkNhbm5vdCByZWFkIEhFQUQiKSk7CisKKwkJZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCAwKTsKKwkJaWYgKHJlcG9fcmVhZF9pbmRleCh0aGVfcmVwb3NpdG9yeSkgPCAwKQorCQkJZGllKF8oImNvdWxkIG5vdCByZWFkIGluZGV4IikpOworCQlyZWZyZXNoX2luZGV4KHRoZV9yZXBvc2l0b3J5LT5pbmRleCwgUkVGUkVTSF9RVUlFVCwgTlVMTCwgTlVMTCwKKwkJCSAgICAgIE5VTEwpOworCQlpZiAoMCA8PSBmZCkKKwkJCXJlcG9fdXBkYXRlX2luZGV4X2lmX2FibGUodGhlX3JlcG9zaXRvcnksICZsb2NrX2ZpbGUpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisKKwkJaWYgKGhhc191bnN0YWdlZF9jaGFuZ2VzKHRoZV9yZXBvc2l0b3J5LCAxKSkgeworCQkJcHV0cyhfKCJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKwkJCSAgICAgICAibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChyZWFkX2Jhc2ljX3N0YXRlKCZvcHRpb25zKSkKKwkJCWV4aXQoMSk7CisJCWdvdG8gcnVuX3JlYmFzZTsKKwl9CisJY2FzZSBBQ1RJT05fU0tJUDogeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVyZ2VfcnIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCQlvcHRpb25zLmFjdGlvbiA9ICJza2lwIjsKKwkJc2V0X3JlZmxvZ19hY3Rpb24oJm9wdGlvbnMpOworCisJCXJlcmVyZV9jbGVhcih0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJm1lcmdlX3JyLCAxKTsKKworCQlpZiAocmVzZXRfaGVhZChOVUxMLCAicmVzZXQiLCBOVUxMLCBSRVNFVF9IRUFEX0hBUkQsCisJCQkgICAgICAgTlVMTCwgTlVMTCkgPCAwKQorCQkJZGllKF8oImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiKSk7CisJCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOworCQlpZiAocmVhZF9iYXNpY19zdGF0ZSgmb3B0aW9ucykpCisJCQlleGl0KDEpOworCQlnb3RvIHJ1bl9yZWJhc2U7CisJfQorCWNhc2UgQUNUSU9OX0FCT1JUOiB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZV9yciA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQlvcHRpb25zLmFjdGlvbiA9ICJhYm9ydCI7CisJCXNldF9yZWZsb2dfYWN0aW9uKCZvcHRpb25zKTsKKworCQlyZXJlcmVfY2xlYXIodGhlX3JlcG9zaXRvcnksICZtZXJnZV9ycik7CisJCXN0cmluZ19saXN0X2NsZWFyKCZtZXJnZV9yciwgMSk7CisKKwkJaWYgKHJlYWRfYmFzaWNfc3RhdGUoJm9wdGlvbnMpKQorCQkJZXhpdCgxKTsKKwkJaWYgKHJlc2V0X2hlYWQoJm9wdGlvbnMub3JpZ19oZWFkLCAicmVzZXQiLAorCQkJICAgICAgIG9wdGlvbnMuaGVhZF9uYW1lLCBSRVNFVF9IRUFEX0hBUkQsCisJCQkgICAgICAgTlVMTCwgTlVMTCkgPCAwKQorCQkJZGllKF8oImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiKSwKKwkJCSAgICBvaWRfdG9faGV4KCZvcHRpb25zLm9yaWdfaGVhZCkpOworCQlyZW1vdmVfYnJhbmNoX3N0YXRlKHRoZV9yZXBvc2l0b3J5LCAwKTsKKwkJcmV0ID0gISFmaW5pc2hfcmViYXNlKCZvcHRpb25zKTsKKwkJZ290byBjbGVhbnVwOworCX0KKwljYXNlIEFDVElPTl9RVUlUOiB7CisJCWlmIChvcHRpb25zLnR5cGUgPT0gUkVCQVNFX01FUkdFKSB7CisJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgcmVwbGF5ID0gUkVQTEFZX09QVFNfSU5JVDsKKworCQkJcmVwbGF5LmFjdGlvbiA9IFJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0U7CisJCQlyZXQgPSAhIXNlcXVlbmNlcl9yZW1vdmVfc3RhdGUoJnJlcGxheSk7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkc3RyKCZidWYsIG9wdGlvbnMuc3RhdGVfZGlyKTsKKwkJCXJldCA9ICEhcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCAwKTsKKwkJCWlmIChyZXQpCisJCQkJZXJyb3IoXygiY291bGQgbm90IHJlbW92ZSAnJXMnIiksCisJCQkJICAgICAgIG9wdGlvbnMuc3RhdGVfZGlyKTsKKwkJfQorCQlnb3RvIGNsZWFudXA7CisJfQorCWNhc2UgQUNUSU9OX0VESVRfVE9ETzoKKwkJb3B0aW9ucy5hY3Rpb24gPSAiZWRpdC10b2RvIjsKKwkJb3B0aW9ucy5kb250X2ZpbmlzaF9yZWJhc2UgPSAxOworCQlnb3RvIHJ1bl9yZWJhc2U7CisJY2FzZSBBQ1RJT05fU0hPV19DVVJSRU5UX1BBVENIOgorCQlvcHRpb25zLmFjdGlvbiA9ICJzaG93LWN1cnJlbnQtcGF0Y2giOworCQlvcHRpb25zLmRvbnRfZmluaXNoX3JlYmFzZSA9IDE7CisJCWdvdG8gcnVuX3JlYmFzZTsKKwljYXNlIEFDVElPTl9OT05FOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoImFjdGlvbjogJWQiLCBhY3Rpb24pOworCX0KKworCS8qIE1ha2Ugc3VyZSBubyByZWJhc2UgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlpZiAoaW5fcHJvZ3Jlc3MpIHsKKwkJY29uc3QgY2hhciAqbGFzdF9zbGFzaCA9IHN0cnJjaHIob3B0aW9ucy5zdGF0ZV9kaXIsICcvJyk7CisJCWNvbnN0IGNoYXIgKnN0YXRlX2Rpcl9iYXNlID0KKwkJCWxhc3Rfc2xhc2ggPyBsYXN0X3NsYXNoICsgMSA6IG9wdGlvbnMuc3RhdGVfZGlyOworCQljb25zdCBjaGFyICpjbWRfbGl2ZV9yZWJhc2UgPQorCQkJImdpdCByZWJhc2UgKC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwKSI7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJtIC1mciBcIiVzXCIiLCBvcHRpb25zLnN0YXRlX2Rpcik7CisJCWRpZShfKCJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorCQkgICAgICAiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgIgorCQkgICAgICAiSWYgdGhhdCBpcyB0aGVcbiIKKwkJICAgICAgImNhc2UsIHBsZWFzZSB0cnlcblx0JXNcbiIKKwkJICAgICAgIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2Vcblx0JXNcbiIKKwkJICAgICAgImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsICIKKwkJICAgICAgImhhdmUgc29tZXRoaW5nXG4iCisJCSAgICAgICJ2YWx1YWJsZSB0aGVyZS5cbiIpLAorCQkgICAgc3RhdGVfZGlyX2Jhc2UsIGNtZF9saXZlX3JlYmFzZSwgYnVmLmJ1Zik7CisJfQorCisJaWYgKChvcHRpb25zLmZsYWdzICYgUkVCQVNFX0lOVEVSQUNUSVZFX0VYUExJQ0lUKSB8fAorCSAgICAoYWN0aW9uICE9IEFDVElPTl9OT05FKSB8fAorCSAgICAoZXhlYy5uciA+IDApIHx8CisJICAgIG9wdGlvbnMuYXV0b3NxdWFzaCkgeworCQlhbGxvd19wcmVlbXB0aXZlX2ZmID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5naXRfYW1fb3B0cy5hcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqb3B0aW9uID0gb3B0aW9ucy5naXRfYW1fb3B0cy5hcmd2W2ldLCAqcDsKKwkJaWYgKCFzdHJjbXAob3B0aW9uLCAiLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSIpIHx8CisJCSAgICAhc3RyY21wKG9wdGlvbiwgIi0taWdub3JlLWRhdGUiKSB8fAorCQkgICAgIXN0cmNtcChvcHRpb24sICItLXdoaXRlc3BhY2U9Zml4IikgfHwKKwkJICAgICFzdHJjbXAob3B0aW9uLCAiLS13aGl0ZXNwYWNlPXN0cmlwIikpCisJCQlhbGxvd19wcmVlbXB0aXZlX2ZmID0gMDsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiLUMiLCAmcCkpIHsKKwkJCXdoaWxlICgqcCkKKwkJCQlpZiAoIWlzZGlnaXQoKihwKyspKSkKKwkJCQkJZGllKF8oInN3aXRjaCBgQycgZXhwZWN0cyBhICIKKwkJCQkJICAgICAgIm51bWVyaWNhbCB2YWx1ZSIpKTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChvcHRpb24sICItLXdoaXRlc3BhY2U9IiwgJnApKSB7CisJCQlpZiAoKnAgJiYgc3RyY21wKHAsICJ3YXJuIikgJiYgc3RyY21wKHAsICJub3dhcm4iKSAmJgorCQkJICAgIHN0cmNtcChwLCAiZXJyb3IiKSAmJiBzdHJjbXAocCwgImVycm9yLWFsbCIpKQorCQkJCWRpZSgiSW52YWxpZCB3aGl0ZXNwYWNlIG9wdGlvbjogJyVzJyIsIHApOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGV4ZWMubnI7IGkrKykKKwkJaWYgKGNoZWNrX2V4ZWNfY21kKGV4ZWMuaXRlbXNbaV0uc3RyaW5nKSkKKwkJCWV4aXQoMSk7CisKKwlpZiAoIShvcHRpb25zLmZsYWdzICYgUkVCQVNFX05PX1FVSUVUKSkKKwkJYXJndl9hcnJheV9wdXNoKCZvcHRpb25zLmdpdF9hbV9vcHRzLCAiLXEiKTsKKworCWlmIChvcHRpb25zLmVtcHR5ICE9IEVNUFRZX1VOU1BFQ0lGSUVEKQorCQlpbXBseV9tZXJnZSgmb3B0aW9ucywgIi0tZW1wdHkiKTsKKworCWlmIChncGdfc2lnbikgeworCQlmcmVlKG9wdGlvbnMuZ3BnX3NpZ25fb3B0KTsKKwkJb3B0aW9ucy5ncGdfc2lnbl9vcHQgPSB4c3RyZm10KCItUyVzIiwgZ3BnX3NpZ24pOworCX0KKworCWlmIChleGVjLm5yKSB7CisJCWludCBpOworCisJCWltcGx5X21lcmdlKCZvcHRpb25zLCAiLS1leGVjIik7CisKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlmb3IgKGkgPSAwOyBpIDwgZXhlYy5ucjsgaSsrKQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgImV4ZWMgJXNcbiIsIGV4ZWMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJb3B0aW9ucy5jbWQgPSB4c3RyZHVwKGJ1Zi5idWYpOworCX0KKworCWlmIChyZWJhc2VfbWVyZ2VzKSB7CisJCWlmICghKnJlYmFzZV9tZXJnZXMpCisJCQk7IC8qIGRlZmF1bHQgbW9kZTsgZG8gbm90aGluZyAqLworCQllbHNlIGlmICghc3RyY21wKCJyZWJhc2UtY291c2lucyIsIHJlYmFzZV9tZXJnZXMpKQorCQkJb3B0aW9ucy5yZWJhc2VfY291c2lucyA9IDE7CisJCWVsc2UgaWYgKHN0cmNtcCgibm8tcmViYXNlLWNvdXNpbnMiLCByZWJhc2VfbWVyZ2VzKSkKKwkJCWRpZShfKCJVbmtub3duIG1vZGU6ICVzIiksIHJlYmFzZV9tZXJnZXMpOworCQlvcHRpb25zLnJlYmFzZV9tZXJnZXMgPSAxOworCQlpbXBseV9tZXJnZSgmb3B0aW9ucywgIi0tcmViYXNlLW1lcmdlcyIpOworCX0KKworCWlmIChzdHJhdGVneV9vcHRpb25zLm5yKSB7CisJCWludCBpOworCisJCWlmICghb3B0aW9ucy5zdHJhdGVneSkKKwkJCW9wdGlvbnMuc3RyYXRlZ3kgPSAicmVjdXJzaXZlIjsKKworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCWZvciAoaSA9IDA7IGkgPCBzdHJhdGVneV9vcHRpb25zLm5yOyBpKyspCisJCQlzdHJidWZfYWRkZigmYnVmLCAiIC0tJXMiLAorCQkJCSAgICBzdHJhdGVneV9vcHRpb25zLml0ZW1zW2ldLnN0cmluZyk7CisJCW9wdGlvbnMuc3RyYXRlZ3lfb3B0cyA9IHhzdHJkdXAoYnVmLmJ1Zik7CisJfQorCisJaWYgKG9wdGlvbnMuc3RyYXRlZ3kpIHsKKwkJb3B0aW9ucy5zdHJhdGVneSA9IHhzdHJkdXAob3B0aW9ucy5zdHJhdGVneSk7CisJCXN3aXRjaCAob3B0aW9ucy50eXBlKSB7CisJCWNhc2UgUkVCQVNFX0FQUExZOgorCQkJZGllKF8oIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIikpOworCQljYXNlIFJFQkFTRV9NRVJHRToKKwkJY2FzZSBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTOgorCQkJLyogY29tcGF0aWJsZSAqLworCQkJYnJlYWs7CisJCWNhc2UgUkVCQVNFX1VOU1BFQ0lGSUVEOgorCQkJb3B0aW9ucy50eXBlID0gUkVCQVNFX01FUkdFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoInVuaGFuZGxlZCByZWJhc2UgdHlwZSAoJWQpIiwgb3B0aW9ucy50eXBlKTsKKwkJfQorCX0KKworCWlmIChvcHRpb25zLnR5cGUgPT0gUkVCQVNFX01FUkdFKQorCQlpbXBseV9tZXJnZSgmb3B0aW9ucywgIi0tbWVyZ2UiKTsKKworCWlmIChvcHRpb25zLnJvb3QgJiYgIW9wdGlvbnMub250b19uYW1lKQorCQlpbXBseV9tZXJnZSgmb3B0aW9ucywgIi0tcm9vdCB3aXRob3V0IC0tb250byIpOworCisJaWYgKGlzYXR0eSgyKSAmJiBvcHRpb25zLmZsYWdzICYgUkVCQVNFX05PX1FVSUVUKQorCQlzdHJidWZfYWRkc3RyKCZvcHRpb25zLmdpdF9mb3JtYXRfcGF0Y2hfb3B0LCAiIC0tcHJvZ3Jlc3MiKTsKKworCWlmIChvcHRpb25zLmdpdF9hbV9vcHRzLmFyZ2MgfHwgb3B0aW9ucy50eXBlID09IFJFQkFTRV9BUFBMWSkgeworCQkvKiBhbGwgYW0gb3B0aW9ucyBleGNlcHQgLXEgYXJlIGNvbXBhdGlibGUgb25seSB3aXRoIC0tYXBwbHkgKi8KKwkJZm9yIChpID0gb3B0aW9ucy5naXRfYW1fb3B0cy5hcmdjIC0gMTsgaSA+PSAwOyBpLS0pCisJCQlpZiAoc3RyY21wKG9wdGlvbnMuZ2l0X2FtX29wdHMuYXJndltpXSwgIi1xIikpCisJCQkJYnJlYWs7CisKKwkJaWYgKGkgPj0gMCkgeworCQkJaWYgKGlzX21lcmdlKCZvcHRpb25zKSkKKwkJCQlkaWUoXygiY2Fubm90IGNvbWJpbmUgYXBwbHkgb3B0aW9ucyB3aXRoICIKKwkJCQkgICAgICAibWVyZ2Ugb3B0aW9ucyIpKTsKKwkJCWVsc2UKKwkJCQlvcHRpb25zLnR5cGUgPSBSRUJBU0VfQVBQTFk7CisJCX0KKwl9CisKKwlpZiAob3B0aW9ucy50eXBlID09IFJFQkFTRV9VTlNQRUNJRklFRCkgeworCQlpZiAoIXN0cmNtcChvcHRpb25zLmRlZmF1bHRfYmFja2VuZCwgIm1lcmdlIikpCisJCQlpbXBseV9tZXJnZSgmb3B0aW9ucywgIi0tbWVyZ2UiKTsKKwkJZWxzZSBpZiAoIXN0cmNtcChvcHRpb25zLmRlZmF1bHRfYmFja2VuZCwgImFwcGx5IikpCisJCQlvcHRpb25zLnR5cGUgPSBSRUJBU0VfQVBQTFk7CisJCWVsc2UKKwkJCWRpZShfKCJVbmtub3duIHJlYmFzZSBiYWNrZW5kOiAlcyIpLAorCQkJICAgIG9wdGlvbnMuZGVmYXVsdF9iYWNrZW5kKTsKKwl9CisKKwlzd2l0Y2ggKG9wdGlvbnMudHlwZSkgeworCWNhc2UgUkVCQVNFX01FUkdFOgorCWNhc2UgUkVCQVNFX1BSRVNFUlZFX01FUkdFUzoKKwkJb3B0aW9ucy5zdGF0ZV9kaXIgPSBtZXJnZV9kaXIoKTsKKwkJYnJlYWs7CisJY2FzZSBSRUJBU0VfQVBQTFk6CisJCW9wdGlvbnMuc3RhdGVfZGlyID0gYXBwbHlfZGlyKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygib3B0aW9ucy50eXBlIHdhcyBqdXN0IHNldCBhYm92ZTsgc2hvdWxkIGJlIHVucmVhY2hhYmxlLiIpOworCX0KKworCWlmIChvcHRpb25zLmVtcHR5ID09IEVNUFRZX1VOU1BFQ0lGSUVEKSB7CisJCWlmIChvcHRpb25zLmZsYWdzICYgUkVCQVNFX0lOVEVSQUNUSVZFX0VYUExJQ0lUKQorCQkJb3B0aW9ucy5lbXB0eSA9IEVNUFRZX0FTSzsKKwkJZWxzZSBpZiAoZXhlYy5uciA+IDApCisJCQlvcHRpb25zLmVtcHR5ID0gRU1QVFlfS0VFUDsKKwkJZWxzZQorCQkJb3B0aW9ucy5lbXB0eSA9IEVNUFRZX0RST1A7CisJfQorCWlmIChyZXNjaGVkdWxlX2ZhaWxlZF9leGVjID4gMCAmJiAhaXNfbWVyZ2UoJm9wdGlvbnMpKQorCQlkaWUoXygiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzICIKKwkJICAgICAgIi0tZXhlYyBvciAtLWludGVyYWN0aXZlIikpOworCWlmIChyZXNjaGVkdWxlX2ZhaWxlZF9leGVjID49IDApCisJCW9wdGlvbnMucmVzY2hlZHVsZV9mYWlsZWRfZXhlYyA9IHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWM7CisKKwlpZiAob3B0aW9ucy5zaWdub2ZmKSB7CisJCWlmIChvcHRpb25zLnR5cGUgPT0gUkVCQVNFX1BSRVNFUlZFX01FUkdFUykKKwkJCWRpZSgiY2Fubm90IGNvbWJpbmUgJy0tc2lnbm9mZicgd2l0aCAiCisJCQkgICAgIictLXByZXNlcnZlLW1lcmdlcyciKTsKKwkJYXJndl9hcnJheV9wdXNoKCZvcHRpb25zLmdpdF9hbV9vcHRzLCAiLS1zaWdub2ZmIik7CisJCW9wdGlvbnMuZmxhZ3MgfD0gUkVCQVNFX0ZPUkNFOworCX0KKworCWlmIChvcHRpb25zLnR5cGUgPT0gUkVCQVNFX1BSRVNFUlZFX01FUkdFUykgeworCQkvKgorCQkgKiBOb3RlOiBpbmNvbXBhdGliaWxpdHkgd2l0aCAtLXNpZ25vZmYgaGFuZGxlZCBpbiBzaWdub2ZmIGJsb2NrIGFib3ZlCisJCSAqIE5vdGU6IGluY29tcGF0aWJpbGl0eSB3aXRoIC0taW50ZXJhY3RpdmUgaXMganVzdCBhIHN0cm9uZyB3YXJuaW5nOworCQkgKiAgICAgICBnaXQtcmViYXNlLnR4dCBjYXZlYXRzIHdpdGggInVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmciCisJCSAqLworCQlpZiAob3B0aW9ucy5yZWJhc2VfbWVyZ2VzKQorCQkJZGllKF8oImNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAiCisJCQkgICAgICAiJy0tcmViYXNlLW1lcmdlcyciKSk7CisKKwkJaWYgKG9wdGlvbnMucmVzY2hlZHVsZV9mYWlsZWRfZXhlYykKKwkJCWRpZShfKCJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICIKKwkJCSAgICAgICInLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjJyIpKTsKKwl9CisKKwlpZiAoIW9wdGlvbnMucm9vdCkgeworCQlpZiAoYXJnYyA8IDEpIHsKKwkJCXN0cnVjdCBicmFuY2ggKmJyYW5jaDsKKworCQkJYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwkJCW9wdGlvbnMudXBzdHJlYW1fbmFtZSA9IGJyYW5jaF9nZXRfdXBzdHJlYW0oYnJhbmNoLAorCQkJCQkJCQkgICAgTlVMTCk7CisJCQlpZiAoIW9wdGlvbnMudXBzdHJlYW1fbmFtZSkKKwkJCQllcnJvcl9vbl9taXNzaW5nX2RlZmF1bHRfdXBzdHJlYW0oKTsKKwkJCWlmIChmb3JrX3BvaW50IDwgMCkKKwkJCQlmb3JrX3BvaW50ID0gMTsKKwkJfSBlbHNlIHsKKwkJCW9wdGlvbnMudXBzdHJlYW1fbmFtZSA9IGFyZ3ZbMF07CisJCQlhcmdjLS07CisJCQlhcmd2Kys7CisJCQlpZiAoIXN0cmNtcChvcHRpb25zLnVwc3RyZWFtX25hbWUsICItIikpCisJCQkJb3B0aW9ucy51cHN0cmVhbV9uYW1lID0gIkB7LTF9IjsKKwkJfQorCQlvcHRpb25zLnVwc3RyZWFtID0gcGVlbF9jb21taXR0aXNoKG9wdGlvbnMudXBzdHJlYW1fbmFtZSk7CisJCWlmICghb3B0aW9ucy51cHN0cmVhbSkKKwkJCWRpZShfKCJpbnZhbGlkIHVwc3RyZWFtICclcyciKSwgb3B0aW9ucy51cHN0cmVhbV9uYW1lKTsKKwkJb3B0aW9ucy51cHN0cmVhbV9hcmcgPSBvcHRpb25zLnVwc3RyZWFtX25hbWU7CisJfSBlbHNlIHsKKwkJaWYgKCFvcHRpb25zLm9udG9fbmFtZSkgeworCQkJaWYgKGNvbW1pdF90cmVlKCIiLCAwLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLCBOVUxMLAorCQkJCQkmc3F1YXNoX29udG8sIE5VTEwsIE5VTEwpIDwgMCkKKwkJCQlkaWUoXygiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiKSk7CisJCQlvcHRpb25zLnNxdWFzaF9vbnRvID0gJnNxdWFzaF9vbnRvOworCQkJb3B0aW9ucy5vbnRvX25hbWUgPSBzcXVhc2hfb250b19uYW1lID0KKwkJCQl4c3RyZHVwKG9pZF90b19oZXgoJnNxdWFzaF9vbnRvKSk7CisJCX0gZWxzZQorCQkJb3B0aW9ucy5yb290X3dpdGhfb250byA9IDE7CisKKwkJb3B0aW9ucy51cHN0cmVhbV9uYW1lID0gTlVMTDsKKwkJb3B0aW9ucy51cHN0cmVhbSA9IE5VTEw7CisJCWlmIChhcmdjID4gMSkKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlYmFzZV91c2FnZSwKKwkJCQkJICAgYnVpbHRpbl9yZWJhc2Vfb3B0aW9ucyk7CisJCW9wdGlvbnMudXBzdHJlYW1fYXJnID0gIi0tcm9vdCI7CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSBicmFuY2ggdG8gcmViYXNlIG9udG8gaXMgdmFsaWQuICovCisJaWYgKGtlZXBfYmFzZSkgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1Ziwgb3B0aW9ucy51cHN0cmVhbV9uYW1lKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiLi4uIik7CisJCW9wdGlvbnMub250b19uYW1lID0geHN0cmR1cChidWYuYnVmKTsKKwl9IGVsc2UgaWYgKCFvcHRpb25zLm9udG9fbmFtZSkKKwkJb3B0aW9ucy5vbnRvX25hbWUgPSBvcHRpb25zLnVwc3RyZWFtX25hbWU7CisJaWYgKHN0cnN0cihvcHRpb25zLm9udG9fbmFtZSwgIi4uLiIpKSB7CisJCWlmIChnZXRfb2lkX21iKG9wdGlvbnMub250b19uYW1lLCAmbWVyZ2VfYmFzZSkgPCAwKSB7CisJCQlpZiAoa2VlcF9iYXNlKQorCQkJCWRpZShfKCInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2Ugd2l0aCBicmFuY2giKSwKKwkJCQkgICAgb3B0aW9ucy51cHN0cmVhbV9uYW1lKTsKKwkJCWVsc2UKKwkJCQlkaWUoXygiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIiksCisJCQkJICAgIG9wdGlvbnMub250b19uYW1lKTsKKwkJfQorCQlvcHRpb25zLm9udG8gPSBsb29rdXBfY29tbWl0X29yX2RpZSgmbWVyZ2VfYmFzZSwKKwkJCQkJCSAgICBvcHRpb25zLm9udG9fbmFtZSk7CisJfSBlbHNlIHsKKwkJb3B0aW9ucy5vbnRvID0gcGVlbF9jb21taXR0aXNoKG9wdGlvbnMub250b19uYW1lKTsKKwkJaWYgKCFvcHRpb25zLm9udG8pCisJCQlkaWUoXygiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQgJyVzJyIpLAorCQkJCW9wdGlvbnMub250b19uYW1lKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBicmFuY2ggdG8gcmViYXNlIGlzIGdpdmVuLCB0aGF0IGlzIHRoZSBicmFuY2ggd2Ugd2lsbCByZWJhc2UKKwkgKiBicmFuY2hfbmFtZSAtLSBicmFuY2gvY29tbWl0IGJlaW5nIHJlYmFzZWQsIG9yCisJICogCQkgIEhFQUQgKGFscmVhZHkgZGV0YWNoZWQpCisJICogb3JpZ19oZWFkIC0tIGNvbW1pdCBvYmplY3QgbmFtZSBvZiB0aXAgb2YgdGhlIGJyYW5jaCBiZWZvcmUgcmViYXNpbmcKKwkgKiBoZWFkX25hbWUgLS0gcmVmcy9oZWFkcy88dGhhdC1icmFuY2g+IG9yIE5VTEwgKGRldGFjaGVkIEhFQUQpCisJICovCisJaWYgKGFyZ2MgPT0gMSkgeworCQkvKiBJcyBpdCAicmViYXNlIG90aGVyIGJyYW5jaG5hbWUiIG9yICJyZWJhc2Ugb3RoZXIgY29tbWl0Ij8gKi8KKwkJYnJhbmNoX25hbWUgPSBhcmd2WzBdOworCQlvcHRpb25zLnN3aXRjaF90byA9IGFyZ3ZbMF07CisKKwkJLyogSXMgaXQgYSBsb2NhbCBicmFuY2g/ICovCisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvaGVhZHMvJXMiLCBicmFuY2hfbmFtZSk7CisJCWlmICghcmVhZF9yZWYoYnVmLmJ1ZiwgJm9wdGlvbnMub3JpZ19oZWFkKSkgeworCQkJZGllX2lmX2NoZWNrZWRfb3V0KGJ1Zi5idWYsIDEpOworCQkJb3B0aW9ucy5oZWFkX25hbWUgPSB4c3RyZHVwKGJ1Zi5idWYpOworCQkvKiBJZiBub3QgaXMgaXQgYSB2YWxpZCByZWYgKGJyYW5jaCBvciBjb21taXQpPyAqLworCQl9IGVsc2UgaWYgKCFnZXRfb2lkKGJyYW5jaF9uYW1lLCAmb3B0aW9ucy5vcmlnX2hlYWQpKQorCQkJb3B0aW9ucy5oZWFkX25hbWUgPSBOVUxMOworCQllbHNlCisJCQlkaWUoXygiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIiksCisJCQkgICAgYnJhbmNoX25hbWUpOworCX0gZWxzZSBpZiAoYXJnYyA9PSAwKSB7CisJCS8qIERvIG5vdCBuZWVkIHRvIHN3aXRjaCBicmFuY2hlcywgd2UgYXJlIGFscmVhZHkgb24gaXQuICovCisJCW9wdGlvbnMuaGVhZF9uYW1lID0KKwkJCXhzdHJkdXBfb3JfbnVsbChyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLAorCQkJCQkgJmZsYWdzKSk7CisJCWlmICghb3B0aW9ucy5oZWFkX25hbWUpCisJCQlkaWUoXygiTm8gc3VjaCByZWY6ICVzIiksICJIRUFEIik7CisJCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikgeworCQkJaWYgKCFza2lwX3ByZWZpeChvcHRpb25zLmhlYWRfbmFtZSwKKwkJCQkJICJyZWZzL2hlYWRzLyIsICZicmFuY2hfbmFtZSkpCisJCQkJYnJhbmNoX25hbWUgPSBvcHRpb25zLmhlYWRfbmFtZTsKKworCQl9IGVsc2UgeworCQkJRlJFRV9BTkRfTlVMTChvcHRpb25zLmhlYWRfbmFtZSk7CisJCQlicmFuY2hfbmFtZSA9ICJIRUFEIjsKKwkJfQorCQlpZiAoZ2V0X29pZCgiSEVBRCIsICZvcHRpb25zLm9yaWdfaGVhZCkpCisJCQlkaWUoXygiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIikpOworCX0gZWxzZQorCQlCVUcoInVuZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWZ0IHRvIHBhcnNlIik7CisKKwlpZiAoZm9ya19wb2ludCA+IDApIHsKKwkJc3RydWN0IGNvbW1pdCAqaGVhZCA9CisJCQlsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSZvcHRpb25zLm9yaWdfaGVhZCk7CisJCW9wdGlvbnMucmVzdHJpY3RfcmV2aXNpb24gPQorCQkJZ2V0X2ZvcmtfcG9pbnQob3B0aW9ucy51cHN0cmVhbV9uYW1lLCBoZWFkKTsKKwl9CisKKwlpZiAocmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KSA8IDApCisJCWRpZShfKCJjb3VsZCBub3QgcmVhZCBpbmRleCIpKTsKKworCWlmIChvcHRpb25zLmF1dG9zdGFzaCkgeworCQlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwkJaW50IGZkOworCisJCWZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMCk7CisJCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CisJCWlmICgwIDw9IGZkKQorCQkJcmVwb191cGRhdGVfaW5kZXhfaWZfYWJsZSh0aGVfcmVwb3NpdG9yeSwgJmxvY2tfZmlsZSk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKworCQlpZiAoaGFzX3Vuc3RhZ2VkX2NoYW5nZXModGhlX3JlcG9zaXRvcnksIDEpIHx8CisJCSAgICBoYXNfdW5jb21taXR0ZWRfY2hhbmdlcyh0aGVfcmVwb3NpdG9yeSwgMSkpIHsKKwkJCWNvbnN0IGNoYXIgKmF1dG9zdGFzaCA9CisJCQkJc3RhdGVfZGlyX3BhdGgoImF1dG9zdGFzaCIsICZvcHRpb25zKTsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHN0YXNoID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJnN0YXNoLmFyZ3MsCisJCQkJCSAic3Rhc2giLCAiY3JlYXRlIiwgImF1dG9zdGFzaCIsIE5VTEwpOworCQkJc3Rhc2guZ2l0X2NtZCA9IDE7CisJCQlzdGFzaC5ub19zdGRpbiA9IDE7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlpZiAoY2FwdHVyZV9jb21tYW5kKCZzdGFzaCwgJmJ1ZiwgR0lUX01BWF9IRVhTWikpCisJCQkJZGllKF8oIkNhbm5vdCBhdXRvc3Rhc2giKSk7CisJCQlzdHJidWZfdHJpbV90cmFpbGluZ19uZXdsaW5lKCZidWYpOworCQkJaWYgKGdldF9vaWQoYnVmLmJ1ZiwgJm9pZCkpCisJCQkJZGllKF8oIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciKSwKKwkJCQkgICAgYnVmLmJ1Zik7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJmJ1ZiwgJm9pZCwgREVGQVVMVF9BQkJSRVYpOworCisJCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChhdXRvc3Rhc2gpKQorCQkJCWRpZShfKCJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIpLAorCQkJCSAgICBvcHRpb25zLnN0YXRlX2Rpcik7CisJCQl3cml0ZV9maWxlKGF1dG9zdGFzaCwgIiVzIiwgb2lkX3RvX2hleCgmb2lkKSk7CisJCQlwcmludGYoXygiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iKSwgYnVmLmJ1Zik7CisJCQlpZiAocmVzZXRfaGVhZChOVUxMLCAicmVzZXQgLS1oYXJkIiwKKwkJCQkgICAgICAgTlVMTCwgUkVTRVRfSEVBRF9IQVJELCBOVUxMLCBOVUxMKSA8IDApCisJCQkJZGllKF8oImNvdWxkIG5vdCByZXNldCAtLWhhcmQiKSk7CisKKwkJCWlmIChkaXNjYXJkX2luZGV4KHRoZV9yZXBvc2l0b3J5LT5pbmRleCkgPCAwIHx8CisJCQkJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KSA8IDApCisJCQkJZGllKF8oImNvdWxkIG5vdCByZWFkIGluZGV4IikpOworCQl9CisJfQorCisJaWYgKHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHRoZV9yZXBvc2l0b3J5LCAicmViYXNlIiwKKwkJCQkgICAgXygiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIpLCAxLCAxKSkgeworCQlyZXQgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBOb3cgd2UgYXJlIHJlYmFzaW5nIGNvbW1pdHMgdXBzdHJlYW0uLm9yaWdfaGVhZCAob3Igd2l0aCAtLXJvb3QsCisJICogZXZlcnl0aGluZyBsZWFkaW5nIHVwIHRvIG9yaWdfaGVhZCkgb24gdG9wIG9mIG9udG8uCisJICovCisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFyZSBhbHJlYWR5IGJhc2VkIG9uIG9udG8gd2l0aCBsaW5lYXIgaGlzdG9yeSwKKwkgKiBpbiB3aGljaCBjYXNlIHdlIGNvdWxkIGZhc3QtZm9yd2FyZCB3aXRob3V0IHJlcGxhY2luZyB0aGUgY29tbWl0cworCSAqIHdpdGggbmV3IGNvbW1pdHMgcmVjcmVhdGVkIGJ5IHJlcGxheWluZyB0aGVpciBjaGFuZ2VzLgorCSAqCisJICogTm90ZSB0aGF0IGNhbl9mYXN0X2ZvcndhcmQoKSBpbml0aWFsaXplcyBtZXJnZV9iYXNlLCBzbyB3ZSBoYXZlIHRvCisJICogY2FsbCBpdCBiZWZvcmUgY2hlY2tpbmcgYWxsb3dfcHJlZW1wdGl2ZV9mZi4KKwkgKi8KKwlpZiAoY2FuX2Zhc3RfZm9yd2FyZChvcHRpb25zLm9udG8sIG9wdGlvbnMudXBzdHJlYW0sIG9wdGlvbnMucmVzdHJpY3RfcmV2aXNpb24sCisJCSAgICAmb3B0aW9ucy5vcmlnX2hlYWQsICZtZXJnZV9iYXNlKSAmJgorCSAgICBhbGxvd19wcmVlbXB0aXZlX2ZmKSB7CisJCWludCBmbGFnOworCisJCWlmICghKG9wdGlvbnMuZmxhZ3MgJiBSRUJBU0VfRk9SQ0UpKSB7CisJCQkvKiBMYXppbHkgc3dpdGNoIHRvIHRoZSB0YXJnZXQgYnJhbmNoIGlmIG5lZWRlZC4uLiAqLworCQkJaWYgKG9wdGlvbnMuc3dpdGNoX3RvKSB7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlczogY2hlY2tvdXQgJXMiLAorCQkJCQkgICAgZ2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OX0VOVklST05NRU5UKSwKKwkJCQkJICAgIG9wdGlvbnMuc3dpdGNoX3RvKTsKKwkJCQlpZiAocmVzZXRfaGVhZCgmb3B0aW9ucy5vcmlnX2hlYWQsICJjaGVja291dCIsCisJCQkJCSAgICAgICBvcHRpb25zLmhlYWRfbmFtZSwKKwkJCQkJICAgICAgIFJFU0VUX0hFQURfUlVOX1BPU1RfQ0hFQ0tPVVRfSE9PSywKKwkJCQkJICAgICAgIE5VTEwsIGJ1Zi5idWYpIDwgMCkgeworCQkJCQlyZXQgPSAhIWVycm9yKF8oImNvdWxkIG5vdCBzd2l0Y2ggdG8gIgorCQkJCQkJCSIlcyIpLAorCQkJCQkJICAgICAgb3B0aW9ucy5zd2l0Y2hfdG8pOworCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJfQorCQkJfQorCisJCQlpZiAoIShvcHRpb25zLmZsYWdzICYgUkVCQVNFX05PX1FVSUVUKSkKKwkJCQk7IC8qIGJlIHF1aWV0ICovCisJCQllbHNlIGlmICghc3RyY21wKGJyYW5jaF9uYW1lLCAiSEVBRCIpICYmCisJCQkJIHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsICZmbGFnKSkKKwkJCQlwdXRzKF8oIkhFQUQgaXMgdXAgdG8gZGF0ZS4iKSk7CisJCQllbHNlCisJCQkJcHJpbnRmKF8oIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iKSwKKwkJCQkgICAgICAgYnJhbmNoX25hbWUpOworCQkJcmV0ID0gISFmaW5pc2hfcmViYXNlKCZvcHRpb25zKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfSBlbHNlIGlmICghKG9wdGlvbnMuZmxhZ3MgJiBSRUJBU0VfTk9fUVVJRVQpKQorCQkJOyAvKiBiZSBxdWlldCAqLworCQllbHNlIGlmICghc3RyY21wKGJyYW5jaF9uYW1lLCAiSEVBRCIpICYmCisJCQkgcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgMCwgTlVMTCwgJmZsYWcpKQorCQkJcHV0cyhfKCJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIikpOworCQllbHNlCisJCQlwcmludGYoXygiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlICIKKwkJCQkgImZvcmNlZC5cbiIpLCBicmFuY2hfbmFtZSk7CisJfQorCisJLyogSWYgYSBob29rIGV4aXN0cywgZ2l2ZSBpdCBhIGNoYW5jZSB0byBpbnRlcnJ1cHQqLworCWlmICghb2tfdG9fc2tpcF9wcmVfcmViYXNlICYmCisJICAgIHJ1bl9ob29rX2xlKE5VTEwsICJwcmUtcmViYXNlIiwgb3B0aW9ucy51cHN0cmVhbV9hcmcsCisJCQlhcmdjID8gYXJndlswXSA6IE5VTEwsIE5VTEwpKQorCQlkaWUoXygiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iKSk7CisKKwlpZiAob3B0aW9ucy5mbGFncyAmIFJFQkFTRV9ESUZGU1RBVCkgeworCQlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdHM7CisKKwkJaWYgKG9wdGlvbnMuZmxhZ3MgJiBSRUJBU0VfVkVSQk9TRSkgeworCQkJaWYgKGlzX251bGxfb2lkKCZtZXJnZV9iYXNlKSkKKwkJCQlwcmludGYoXygiQ2hhbmdlcyB0byAlczpcbiIpLAorCQkJCSAgICAgICBvaWRfdG9faGV4KCZvcHRpb25zLm9udG8tPm9iamVjdC5vaWQpKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoXygiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIiksCisJCQkJICAgICAgIG9pZF90b19oZXgoJm1lcmdlX2Jhc2UpLAorCQkJCSAgICAgICBvaWRfdG9faGV4KCZvcHRpb25zLm9udG8tPm9iamVjdC5vaWQpKTsKKwkJfQorCisJCS8qIFdlIHdhbnQgY29sb3IgKGlmIHNldCksIGJ1dCBubyBwYWdlciAqLworCQlkaWZmX3NldHVwKCZvcHRzKTsKKwkJb3B0cy5zdGF0X3dpZHRoID0gLTE7IC8qIHVzZSBmdWxsIHRlcm1pbmFsIHdpZHRoICovCisJCW9wdHMuc3RhdF9ncmFwaF93aWR0aCA9IC0xOyAvKiByZXNwZWN0IHN0YXRHcmFwaFdpZHRoIGNvbmZpZyAqLworCQlvcHRzLm91dHB1dF9mb3JtYXQgfD0KKwkJCURJRkZfRk9STUFUX1NVTU1BUlkgfCBESUZGX0ZPUk1BVF9ESUZGU1RBVDsKKwkJb3B0cy5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOworCQlkaWZmX3NldHVwX2RvbmUoJm9wdHMpOworCQlkaWZmX3RyZWVfb2lkKGlzX251bGxfb2lkKCZtZXJnZV9iYXNlKSA/CisJCQkgICAgICB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlIDogJm1lcmdlX2Jhc2UsCisJCQkgICAgICAmb3B0aW9ucy5vbnRvLT5vYmplY3Qub2lkLCAiIiwgJm9wdHMpOworCQlkaWZmY29yZV9zdGQoJm9wdHMpOworCQlkaWZmX2ZsdXNoKCZvcHRzKTsKKwl9CisKKwlpZiAoaXNfbWVyZ2UoJm9wdGlvbnMpKQorCQlnb3RvIHJ1bl9yZWJhc2U7CisKKwkvKiBEZXRhY2ggSEVBRCBhbmQgcmVzZXQgdGhlIHRyZWUgKi8KKwlpZiAob3B0aW9ucy5mbGFncyAmIFJFQkFTRV9OT19RVUlFVCkKKwkJcHJpbnRmKF8oIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiAiCisJCQkgIml0Li4uXG4iKSk7CisKKwlzdHJidWZfYWRkZigmbXNnLCAiJXM6IGNoZWNrb3V0ICVzIiwKKwkJICAgIGdldGVudihHSVRfUkVGTE9HX0FDVElPTl9FTlZJUk9OTUVOVCksIG9wdGlvbnMub250b19uYW1lKTsKKwlpZiAocmVzZXRfaGVhZCgmb3B0aW9ucy5vbnRvLT5vYmplY3Qub2lkLCAiY2hlY2tvdXQiLCBOVUxMLAorCQkgICAgICAgUkVTRVRfSEVBRF9ERVRBQ0ggfCBSRVNFVF9PUklHX0hFQUQgfAorCQkgICAgICAgUkVTRVRfSEVBRF9SVU5fUE9TVF9DSEVDS09VVF9IT09LLAorCQkgICAgICAgTlVMTCwgbXNnLmJ1ZikpCisJCWRpZShfKCJDb3VsZCBub3QgZGV0YWNoIEhFQUQiKSk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisKKwkvKgorCSAqIElmIHRoZSBvbnRvIGlzIGEgcHJvcGVyIGRlc2NlbmRhbnQgb2YgdGhlIHRpcCBvZiB0aGUgYnJhbmNoLCB0aGVuCisJICogd2UganVzdCBmYXN0LWZvcndhcmRlZC4KKwkgKi8KKwlzdHJidWZfcmVzZXQoJm1zZyk7CisJaWYgKG9pZGVxKCZtZXJnZV9iYXNlLCAmb3B0aW9ucy5vcmlnX2hlYWQpKSB7CisJCXByaW50ZihfKCJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIpLAorCQkJYnJhbmNoX25hbWUsIG9wdGlvbnMub250b19uYW1lKTsKKwkJc3RyYnVmX2FkZGYoJm1zZywgInJlYmFzZSBmaW5pc2hlZDogJXMgb250byAlcyIsCisJCQlvcHRpb25zLmhlYWRfbmFtZSA/IG9wdGlvbnMuaGVhZF9uYW1lIDogImRldGFjaGVkIEhFQUQiLAorCQkJb2lkX3RvX2hleCgmb3B0aW9ucy5vbnRvLT5vYmplY3Qub2lkKSk7CisJCXJlc2V0X2hlYWQoTlVMTCwgIkZhc3QtZm9yd2FyZGVkIiwgb3B0aW9ucy5oZWFkX25hbWUsCisJCQkgICBSRVNFVF9IRUFEX1JFRlNfT05MWSwgIkhFQUQiLCBtc2cuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJCXJldCA9ICEhZmluaXNoX3JlYmFzZSgmb3B0aW9ucyk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzdHJidWZfYWRkZigmcmV2aXNpb25zLCAiJXMuLiVzIiwKKwkJICAgIG9wdGlvbnMucm9vdCA/IG9pZF90b19oZXgoJm9wdGlvbnMub250by0+b2JqZWN0Lm9pZCkgOgorCQkgICAgKG9wdGlvbnMucmVzdHJpY3RfcmV2aXNpb24gPworCQkgICAgIG9pZF90b19oZXgoJm9wdGlvbnMucmVzdHJpY3RfcmV2aXNpb24tPm9iamVjdC5vaWQpIDoKKwkJICAgICBvaWRfdG9faGV4KCZvcHRpb25zLnVwc3RyZWFtLT5vYmplY3Qub2lkKSksCisJCSAgICBvaWRfdG9faGV4KCZvcHRpb25zLm9yaWdfaGVhZCkpOworCisJb3B0aW9ucy5yZXZpc2lvbnMgPSByZXZpc2lvbnMuYnVmOworCitydW5fcmViYXNlOgorCXJldCA9ICEhcnVuX3NwZWNpZmljX3JlYmFzZSgmb3B0aW9ucywgYWN0aW9uKTsKKworY2xlYW51cDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2aXNpb25zKTsKKwlmcmVlKG9wdGlvbnMuaGVhZF9uYW1lKTsKKwlmcmVlKG9wdGlvbnMuZ3BnX3NpZ25fb3B0KTsKKwlmcmVlKG9wdGlvbnMuY21kKTsKKwlmcmVlKHNxdWFzaF9vbnRvX25hbWUpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlY2VpdmUtcGFjay5jIGIvYnVpbHRpbi9yZWNlaXZlLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2MxOGJiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZWNlaXZlLXBhY2suYwpAQCAtMCwwICsxLDIwNjEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJjb25uZWN0ZWQuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImZzY2suaCIKKyNpbmNsdWRlICJ0bXAtb2JqZGlyLmgiCisjaW5jbHVkZSAib2lkc2V0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVjZWl2ZV9wYWNrX3VzYWdlW10gPSB7CisJTl8oImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IiksCisJTlVMTAorfTsKKworZW51bSBkZW55X2FjdGlvbiB7CisJREVOWV9VTkNPTkZJR1VSRUQsCisJREVOWV9JR05PUkUsCisJREVOWV9XQVJOLAorCURFTllfUkVGVVNFLAorCURFTllfVVBEQVRFX0lOU1RFQUQKK307CisKK3N0YXRpYyBpbnQgZGVueV9kZWxldGVzOworc3RhdGljIGludCBkZW55X25vbl9mYXN0X2ZvcndhcmRzOworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gZGVueV9jdXJyZW50X2JyYW5jaCA9IERFTllfVU5DT05GSUdVUkVEOworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gZGVueV9kZWxldGVfY3VycmVudCA9IERFTllfVU5DT05GSUdVUkVEOworc3RhdGljIGludCByZWNlaXZlX2ZzY2tfb2JqZWN0cyA9IC0xOworc3RhdGljIGludCB0cmFuc2Zlcl9mc2NrX29iamVjdHMgPSAtMTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGZzY2tfbXNnX3R5cGVzID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IHJlY2VpdmVfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IHRyYW5zZmVyX3VucGFja19saW1pdCA9IC0xOworc3RhdGljIGludCBhZHZlcnRpc2VfYXRvbWljX3B1c2ggPSAxOworc3RhdGljIGludCBhZHZlcnRpc2VfcHVzaF9vcHRpb25zOworc3RhdGljIGludCB1bnBhY2tfbGltaXQgPSAxMDA7CitzdGF0aWMgb2ZmX3QgbWF4X2lucHV0X3NpemU7CitzdGF0aWMgaW50IHJlcG9ydF9zdGF0dXM7CitzdGF0aWMgaW50IHVzZV9zaWRlYmFuZDsKK3N0YXRpYyBpbnQgdXNlX2F0b21pYzsKK3N0YXRpYyBpbnQgdXNlX3B1c2hfb3B0aW9uczsKK3N0YXRpYyBpbnQgcXVpZXQ7CitzdGF0aWMgaW50IHByZWZlcl9vZnNfZGVsdGEgPSAxOworc3RhdGljIGludCBhdXRvX3VwZGF0ZV9zZXJ2ZXJfaW5mbzsKK3N0YXRpYyBpbnQgYXV0b19nYyA9IDE7CitzdGF0aWMgaW50IHJlamVjdF90aGluOworc3RhdGljIGludCBzdGF0ZWxlc3NfcnBjOworc3RhdGljIGNvbnN0IGNoYXIgKnNlcnZpY2VfZGlyOworc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRfbmFtZTsKK3N0YXRpYyB2b2lkICpoZWFkX25hbWVfdG9fZnJlZTsKK3N0YXRpYyBpbnQgc2VudF9jYXBhYmlsaXRpZXM7CitzdGF0aWMgaW50IHNoYWxsb3dfdXBkYXRlOworc3RhdGljIGNvbnN0IGNoYXIgKmFsdF9zaGFsbG93X2ZpbGU7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBwdXNoX2NlcnQgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2lkIHB1c2hfY2VydF9vaWQ7CitzdGF0aWMgc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjaGVjazsKK3N0YXRpYyBjb25zdCBjaGFyICpwdXNoX2NlcnRfbm9uY2U7CitzdGF0aWMgY29uc3QgY2hhciAqY2VydF9ub25jZV9zZWVkOworCitzdGF0aWMgY29uc3QgY2hhciAqTk9OQ0VfVU5TT0xJQ0lURUQgPSAiVU5TT0xJQ0lURUQiOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX0JBRCA9ICJCQUQiOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX01JU1NJTkcgPSAiTUlTU0lORyI7CitzdGF0aWMgY29uc3QgY2hhciAqTk9OQ0VfT0sgPSAiT0siOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX1NMT1AgPSAiU0xPUCI7CitzdGF0aWMgY29uc3QgY2hhciAqbm9uY2Vfc3RhdHVzOworc3RhdGljIGxvbmcgbm9uY2Vfc3RhbXBfc2xvcDsKK3N0YXRpYyB0aW1lc3RhbXBfdCBub25jZV9zdGFtcF9zbG9wX2xpbWl0Oworc3RhdGljIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCitzdGF0aWMgZW51bSB7CisJS0VFUEFMSVZFX05FVkVSID0gMCwKKwlLRUVQQUxJVkVfQUZURVJfTlVMLAorCUtFRVBBTElWRV9BTFdBWVMKK30gdXNlX2tlZXBhbGl2ZTsKK3N0YXRpYyBpbnQga2VlcGFsaXZlX2luX3NlYyA9IDU7CisKK3N0YXRpYyBzdHJ1Y3QgdG1wX29iamRpciAqdG1wX29iamRpcjsKKworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gcGFyc2VfZGVueV9hY3Rpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAodmFsdWUpIHsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiaWdub3JlIikpCisJCQlyZXR1cm4gREVOWV9JR05PUkU7CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIndhcm4iKSkKKwkJCXJldHVybiBERU5ZX1dBUk47CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInJlZnVzZSIpKQorCQkJcmV0dXJuIERFTllfUkVGVVNFOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJ1cGRhdGVpbnN0ZWFkIikpCisJCQlyZXR1cm4gREVOWV9VUERBVEVfSU5TVEVBRDsKKwl9CisJaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJcmV0dXJuIERFTllfUkVGVVNFOworCXJldHVybiBERU5ZX0lHTk9SRTsKK30KKworc3RhdGljIGludCByZWNlaXZlX3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCBzdGF0dXMgPSBwYXJzZV9oaWRlX3JlZnNfY29uZmlnKHZhciwgdmFsdWUsICJyZWNlaXZlIik7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmRlbnlkZWxldGVzIikgPT0gMCkgeworCQlkZW55X2RlbGV0ZXMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55bm9uZmFzdGZvcndhcmRzIikgPT0gMCkgeworCQlkZW55X25vbl9mYXN0X2ZvcndhcmRzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUudW5wYWNrbGltaXQiKSA9PSAwKSB7CisJCXJlY2VpdmVfdW5wYWNrX2xpbWl0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAidHJhbnNmZXIudW5wYWNrbGltaXQiKSA9PSAwKSB7CisJCXRyYW5zZmVyX3VucGFja19saW1pdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuZnNjay5za2lwbGlzdCIpID09IDApIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKworCQlpZiAoZ2l0X2NvbmZpZ19wYXRobmFtZSgmcGF0aCwgdmFyLCB2YWx1ZSkpCisJCQlyZXR1cm4gMTsKKwkJc3RyYnVmX2FkZGYoJmZzY2tfbXNnX3R5cGVzLCAiJWNza2lwbGlzdD0lcyIsCisJCQlmc2NrX21zZ190eXBlcy5sZW4gPyAnLCcgOiAnPScsIHBhdGgpOworCQlmcmVlKChjaGFyICopcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChza2lwX3ByZWZpeCh2YXIsICJyZWNlaXZlLmZzY2suIiwgJnZhcikpIHsKKwkJaWYgKGlzX3ZhbGlkX21zZ190eXBlKHZhciwgdmFsdWUpKQorCQkJc3RyYnVmX2FkZGYoJmZzY2tfbXNnX3R5cGVzLCAiJWMlcz0lcyIsCisJCQkJZnNja19tc2dfdHlwZXMubGVuID8gJywnIDogJz0nLCB2YXIsIHZhbHVlKTsKKwkJZWxzZQorCQkJd2FybmluZygiU2tpcHBpbmcgdW5rbm93biBtc2cgaWQgJyVzJyIsIHZhcik7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5mc2Nrb2JqZWN0cyIpID09IDApIHsKKwkJcmVjZWl2ZV9mc2NrX29iamVjdHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAidHJhbnNmZXIuZnNja29iamVjdHMiKSA9PSAwKSB7CisJCXRyYW5zZmVyX2ZzY2tfb2JqZWN0cyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55Y3VycmVudGJyYW5jaCIpKSB7CisJCWRlbnlfY3VycmVudF9icmFuY2ggPSBwYXJzZV9kZW55X2FjdGlvbih2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmRlbnlkZWxldGVjdXJyZW50IikgPT0gMCkgeworCQlkZW55X2RlbGV0ZV9jdXJyZW50ID0gcGFyc2VfZGVueV9hY3Rpb24odmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCIpID09IDApIHsKKwkJcHJlZmVyX29mc19kZWx0YSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLnVwZGF0ZXNlcnZlcmluZm8iKSA9PSAwKSB7CisJCWF1dG9fdXBkYXRlX3NlcnZlcl9pbmZvID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuYXV0b2djIikgPT0gMCkgeworCQlhdXRvX2djID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuc2hhbGxvd3VwZGF0ZSIpID09IDApIHsKKwkJc2hhbGxvd191cGRhdGUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIikgPT0gMCkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjZXJ0X25vbmNlX3NlZWQsIHZhciwgdmFsdWUpOworCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmNlcnRub25jZXNsb3AiKSA9PSAwKSB7CisJCW5vbmNlX3N0YW1wX3Nsb3BfbGltaXQgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuYWR2ZXJ0aXNlYXRvbWljIikgPT0gMCkgeworCQlhZHZlcnRpc2VfYXRvbWljX3B1c2ggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5hZHZlcnRpc2VwdXNob3B0aW9ucyIpID09IDApIHsKKwkJYWR2ZXJ0aXNlX3B1c2hfb3B0aW9ucyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmtlZXBhbGl2ZSIpID09IDApIHsKKwkJa2VlcGFsaXZlX2luX3NlYyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUubWF4aW5wdXRzaXplIikgPT0gMCkgeworCQltYXhfaW5wdXRfc2l6ZSA9IGdpdF9jb25maWdfaW50NjQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaWYgKHNlbnRfY2FwYWJpbGl0aWVzKSB7CisJCXBhY2tldF93cml0ZV9mbXQoMSwgIiVzICVzXG4iLCBvaWRfdG9faGV4KG9pZCksIHBhdGgpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgY2FwID0gU1RSQlVGX0lOSVQ7CisKKwkJc3RyYnVmX2FkZHN0cigmY2FwLAorCQkJICAgICAgInJlcG9ydC1zdGF0dXMgZGVsZXRlLXJlZnMgc2lkZS1iYW5kLTY0ayBxdWlldCIpOworCQlpZiAoYWR2ZXJ0aXNlX2F0b21pY19wdXNoKQorCQkJc3RyYnVmX2FkZHN0cigmY2FwLCAiIGF0b21pYyIpOworCQlpZiAocHJlZmVyX29mc19kZWx0YSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmNhcCwgIiBvZnMtZGVsdGEiKTsKKwkJaWYgKHB1c2hfY2VydF9ub25jZSkKKwkJCXN0cmJ1Zl9hZGRmKCZjYXAsICIgcHVzaC1jZXJ0PSVzIiwgcHVzaF9jZXJ0X25vbmNlKTsKKwkJaWYgKGFkdmVydGlzZV9wdXNoX29wdGlvbnMpCisJCQlzdHJidWZfYWRkc3RyKCZjYXAsICIgcHVzaC1vcHRpb25zIik7CisJCXN0cmJ1Zl9hZGRmKCZjYXAsICIgYWdlbnQ9JXMiLCBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CisJCXBhY2tldF93cml0ZV9mbXQoMSwgIiVzICVzJWMlc1xuIiwKKwkJCSAgICAgb2lkX3RvX2hleChvaWQpLCBwYXRoLCAwLCBjYXAuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmNhcCk7CisJCXNlbnRfY2FwYWJpbGl0aWVzID0gMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hvd19yZWZfY2IoY29uc3QgY2hhciAqcGF0aF9mdWxsLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBpbnQgZmxhZywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb2lkc2V0ICpzZWVuID0gZGF0YTsKKwljb25zdCBjaGFyICpwYXRoID0gc3RyaXBfbmFtZXNwYWNlKHBhdGhfZnVsbCk7CisKKwlpZiAocmVmX2lzX2hpZGRlbihwYXRoLCBwYXRoX2Z1bGwpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQWR2ZXJ0aXNlIHJlZnMgb3V0c2lkZSBvdXIgY3VycmVudCBuYW1lc3BhY2UgYXMgIi5oYXZlIgorCSAqIHJlZnMsIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gdXNlIHRoZW0gdG8gbWluaW1pemUgZGF0YQorCSAqIHRyYW5zZmVyIGJ1dCB3aWxsIG90aGVyd2lzZSBpZ25vcmUgdGhlbS4KKwkgKi8KKwlpZiAoIXBhdGgpIHsKKwkJaWYgKG9pZHNldF9pbnNlcnQoc2Vlbiwgb2lkKSkKKwkJCXJldHVybiAwOworCQlwYXRoID0gIi5oYXZlIjsKKwl9IGVsc2UgeworCQlvaWRzZXRfaW5zZXJ0KHNlZW4sIG9pZCk7CisJfQorCXNob3dfcmVmKHBhdGgsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb25lX2FsdGVybmF0ZV9yZWYoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9pZHNldCAqc2VlbiA9IGRhdGE7CisKKwlpZiAob2lkc2V0X2luc2VydChzZWVuLCBvaWQpKQorCQlyZXR1cm47CisKKwlzaG93X3JlZigiLmhhdmUiLCBvaWQpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9oZWFkX2luZm8odm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IG9pZHNldCBzZWVuID0gT0lEU0VUX0lOSVQ7CisKKwlmb3JfZWFjaF9yZWYoc2hvd19yZWZfY2IsICZzZWVuKTsKKwlmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKHNob3dfb25lX2FsdGVybmF0ZV9yZWYsICZzZWVuKTsKKwlvaWRzZXRfY2xlYXIoJnNlZW4pOworCWlmICghc2VudF9jYXBhYmlsaXRpZXMpCisJCXNob3dfcmVmKCJjYXBhYmlsaXRpZXNee30iLCAmbnVsbF9vaWQpOworCisJYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzKDEpOworCisJLyogRU9GICovCisJcGFja2V0X2ZsdXNoKDEpOworfQorCitzdHJ1Y3QgY29tbWFuZCB7CisJc3RydWN0IGNvbW1hbmQgKm5leHQ7CisJY29uc3QgY2hhciAqZXJyb3Jfc3RyaW5nOworCXVuc2lnbmVkIGludCBza2lwX3VwZGF0ZToxLAorCQkgICAgIGRpZF9ub3RfZXhpc3Q6MTsKKwlpbnQgaW5kZXg7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgbmV3X29pZDsKKwljaGFyIHJlZl9uYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdGF0aWMgdm9pZCBycF9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitzdGF0aWMgdm9pZCBycF93YXJuaW5nKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIHZvaWQgcmVwb3J0X21lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCWludCBzejsKKwljaGFyIG1zZ1s0MDk2XTsKKworCXN6ID0geHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIlcyIsIHByZWZpeCk7CisJc3ogKz0gdnNucHJpbnRmKG1zZyArIHN6LCBzaXplb2YobXNnKSAtIHN6LCBlcnIsIHBhcmFtcyk7CisJaWYgKHN6ID4gKHNpemVvZihtc2cpIC0gMSkpCisJCXN6ID0gc2l6ZW9mKG1zZykgLSAxOworCW1zZ1tzeisrXSA9ICdcbic7CisKKwlpZiAodXNlX3NpZGViYW5kKQorCQlzZW5kX3NpZGViYW5kKDEsIDIsIG1zZywgc3osIHVzZV9zaWRlYmFuZCk7CisJZWxzZQorCQl4d3JpdGUoMiwgbXNnLCBzeik7Cit9CisKK3N0YXRpYyB2b2lkIHJwX3dhcm5pbmcoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXJlcG9ydF9tZXNzYWdlKCJ3YXJuaW5nOiAiLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3N0YXRpYyB2b2lkIHJwX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlyZXBvcnRfbWVzc2FnZSgiZXJyb3I6ICIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworc3RhdGljIGludCBjb3B5X3RvX3NpZGViYW5kKGludCBpbiwgaW50IG91dCwgdm9pZCAqYXJnKQoreworCWNoYXIgZGF0YVsxMjhdOworCWludCBrZWVwYWxpdmVfYWN0aXZlID0gMDsKKworCWlmIChrZWVwYWxpdmVfaW5fc2VjIDw9IDApCisJCXVzZV9rZWVwYWxpdmUgPSBLRUVQQUxJVkVfTkVWRVI7CisJaWYgKHVzZV9rZWVwYWxpdmUgPT0gS0VFUEFMSVZFX0FMV0FZUykKKwkJa2VlcGFsaXZlX2FjdGl2ZSA9IDE7CisKKwl3aGlsZSAoMSkgeworCQlzc2l6ZV90IHN6OworCisJCWlmIChrZWVwYWxpdmVfYWN0aXZlKSB7CisJCQlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwkJCWludCByZXQ7CisKKwkJCXBmZC5mZCA9IGluOworCQkJcGZkLmV2ZW50cyA9IFBPTExJTjsKKwkJCXJldCA9IHBvbGwoJnBmZCwgMSwgMTAwMCAqIGtlZXBhbGl2ZV9pbl9zZWMpOworCisJCQlpZiAocmV0IDwgMCkgeworCQkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQkJY29udGludWU7CisJCQkJZWxzZQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAocmV0ID09IDApIHsKKwkJCQkvKiBubyBkYXRhOyBzZW5kIGEga2VlcGFsaXZlIHBhY2tldCAqLworCQkJCXN0YXRpYyBjb25zdCBjaGFyIGJ1ZltdID0gIjAwMDVcMSI7CisJCQkJd3JpdGVfb3JfZGllKDEsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwkJCQljb250aW51ZTsKKwkJCX0gLyogZWxzZSB0aGVyZSBpcyBhY3R1YWwgZGF0YSB0byByZWFkICovCisJCX0KKworCQlzeiA9IHhyZWFkKGluLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCQlpZiAoc3ogPD0gMCkKKwkJCWJyZWFrOworCisJCWlmICh1c2Vfa2VlcGFsaXZlID09IEtFRVBBTElWRV9BRlRFUl9OVUwgJiYgIWtlZXBhbGl2ZV9hY3RpdmUpIHsKKwkJCWNvbnN0IGNoYXIgKnAgPSBtZW1jaHIoZGF0YSwgJ1wwJywgc3opOworCQkJaWYgKHApIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBOVUwgdGVsbHMgdXMgdG8gc3RhcnQgc2VuZGluZyBrZWVwYWxpdmVzLiBNYWtlCisJCQkJICogc3VyZSB3ZSBzZW5kIGFueSBvdGhlciBkYXRhIHdlIHJlYWQgYWxvbmcKKwkJCQkgKiB3aXRoIGl0LgorCQkJCSAqLworCQkJCWtlZXBhbGl2ZV9hY3RpdmUgPSAxOworCQkJCXNlbmRfc2lkZWJhbmQoMSwgMiwgZGF0YSwgcCAtIGRhdGEsIHVzZV9zaWRlYmFuZCk7CisJCQkJc2VuZF9zaWRlYmFuZCgxLCAyLCBwICsgMSwgc3ogLSAocCAtIGRhdGEgKyAxKSwgdXNlX3NpZGViYW5kKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIEVpdGhlciB3ZSdyZSBub3QgbG9va2luZyBmb3IgYSBOVUwgc2lnbmFsLCBvciB3ZSBkaWRuJ3Qgc2VlCisJCSAqIGl0IHlldDsganVzdCBwYXNzIGFsb25nIHRoZSBkYXRhLgorCQkgKi8KKwkJc2VuZF9zaWRlYmFuZCgxLCAyLCBkYXRhLCBzeiwgdXNlX3NpZGViYW5kKTsKKwl9CisJY2xvc2UoaW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBobWFjKHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJICAgICAgY29uc3QgY2hhciAqa2V5X2luLCBzaXplX3Qga2V5X2xlbiwKKwkJICAgICAgY29uc3QgY2hhciAqdGV4dCwgc2l6ZV90IHRleHRfbGVuKQoreworCXVuc2lnbmVkIGNoYXIga2V5W0dJVF9NQVhfQkxLU1pdOworCXVuc2lnbmVkIGNoYXIga19pcGFkW0dJVF9NQVhfQkxLU1pdOworCXVuc2lnbmVkIGNoYXIga19vcGFkW0dJVF9NQVhfQkxLU1pdOworCWludCBpOworCWdpdF9oYXNoX2N0eCBjdHg7CisKKwkvKiBSRkMgMjEwNCAyLiAoMSkgKi8KKwltZW1zZXQoa2V5LCAnXDAnLCBHSVRfTUFYX0JMS1NaKTsKKwlpZiAodGhlX2hhc2hfYWxnby0+Ymxrc3ogPCBrZXlfbGVuKSB7CisJCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmN0eCk7CisJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBrZXlfaW4sIGtleV9sZW4pOworCQl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihrZXksICZjdHgpOworCX0gZWxzZSB7CisJCW1lbWNweShrZXksIGtleV9pbiwga2V5X2xlbik7CisJfQorCisJLyogUkZDIDIxMDQgMi4gKDIpICYgKDUpICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihrZXkpOyBpKyspIHsKKwkJa19pcGFkW2ldID0ga2V5W2ldIF4gMHgzNjsKKwkJa19vcGFkW2ldID0ga2V5W2ldIF4gMHg1YzsKKwl9CisKKwkvKiBSRkMgMjEwNCAyLiAoMykgJiAoNCkgKi8KKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjdHgpOworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBrX2lwYWQsIHNpemVvZihrX2lwYWQpKTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmN0eCwgdGV4dCwgdGV4dF9sZW4pOworCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKG91dCwgJmN0eCk7CisKKwkvKiBSRkMgMjEwNCAyLiAoNikgJiAoNykgKi8KKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjdHgpOworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmY3R4LCBrX29wYWQsIHNpemVvZihrX29wYWQpKTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmN0eCwgb3V0LCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4ob3V0LCAmY3R4KTsKK30KKworc3RhdGljIGNoYXIgKnByZXBhcmVfcHVzaF9jZXJ0X25vbmNlKGNvbnN0IGNoYXIgKnBhdGgsIHRpbWVzdGFtcF90IHN0YW1wKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBoYXNoW0dJVF9NQVhfUkFXU1pdOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzOiUiUFJJdGltZSwgcGF0aCwgc3RhbXApOworCWhtYWMoaGFzaCwgYnVmLmJ1ZiwgYnVmLmxlbiwgY2VydF9ub25jZV9zZWVkLCBzdHJsZW4oY2VydF9ub25jZV9zZWVkKSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwkvKiBSRkMgMjEwNCA1LiBITUFDLVNIQTEtODAgKi8KKwlzdHJidWZfYWRkZigmYnVmLCAiJSJQUkl0aW1lIi0lLipzIiwgc3RhbXAsIChpbnQpdGhlX2hhc2hfYWxnby0+aGV4c3osIGhhc2hfdG9faGV4KGhhc2gpKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworLyoKKyAqIE5FRURTV09SSzogcmV1c2UgZmluZF9jb21taXRfaGVhZGVyKCkgZnJvbSBqay9jb21taXQtYXV0aG9yLXBhcnNpbmcKKyAqIGFmdGVyIGRyb3BwaW5nICJfY29tbWl0IiBmcm9tIGl0cyBuYW1lIGFuZCBwb3NzaWJseSBtb3ZpbmcgaXQgb3V0CisgKiBvZiBjb21taXQuYworICovCitzdGF0aWMgY2hhciAqZmluZF9oZWFkZXIoY29uc3QgY2hhciAqbXNnLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICprZXksCisJCQkgY29uc3QgY2hhciAqKm5leHRfbGluZSkKK3sKKwlpbnQga2V5X2xlbiA9IHN0cmxlbihrZXkpOworCWNvbnN0IGNoYXIgKmxpbmUgPSBtc2c7CisKKwl3aGlsZSAobGluZSAmJiBsaW5lIDwgbXNnICsgbGVuKSB7CisJCWNvbnN0IGNoYXIgKmVvbCA9IHN0cmNocm51bChsaW5lLCAnXG4nKTsKKworCQlpZiAoKG1zZyArIGxlbiA8PSBlb2wpIHx8IGxpbmUgPT0gZW9sKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChsaW5lICsga2V5X2xlbiA8IGVvbCAmJgorCQkgICAgIW1lbWNtcChsaW5lLCBrZXksIGtleV9sZW4pICYmIGxpbmVba2V5X2xlbl0gPT0gJyAnKSB7CisJCQlpbnQgb2Zmc2V0ID0ga2V5X2xlbiArIDE7CisJCQlpZiAobmV4dF9saW5lKQorCQkJCSpuZXh0X2xpbmUgPSAqZW9sID8gZW9sICsgMSA6IGVvbDsKKwkJCXJldHVybiB4bWVtZHVweihsaW5lICsgb2Zmc2V0LCAoZW9sIC0gbGluZSkgLSBvZmZzZXQpOworCQl9CisJCWxpbmUgPSAqZW9sID8gZW9sICsgMSA6IE5VTEw7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2hlY2tfbm9uY2UoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCWNoYXIgKm5vbmNlID0gZmluZF9oZWFkZXIoYnVmLCBsZW4sICJub25jZSIsIE5VTEwpOworCXRpbWVzdGFtcF90IHN0YW1wLCBvc3RhbXA7CisJY2hhciAqYm9obWFjLCAqZXhwZWN0ID0gTlVMTDsKKwljb25zdCBjaGFyICpyZXR2YWwgPSBOT05DRV9CQUQ7CisKKwlpZiAoIW5vbmNlKSB7CisJCXJldHZhbCA9IE5PTkNFX01JU1NJTkc7CisJCWdvdG8gbGVhdmU7CisJfSBlbHNlIGlmICghcHVzaF9jZXJ0X25vbmNlKSB7CisJCXJldHZhbCA9IE5PTkNFX1VOU09MSUNJVEVEOworCQlnb3RvIGxlYXZlOworCX0gZWxzZSBpZiAoIXN0cmNtcChwdXNoX2NlcnRfbm9uY2UsIG5vbmNlKSkgeworCQlyZXR2YWwgPSBOT05DRV9PSzsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlpZiAoIXN0YXRlbGVzc19ycGMpIHsKKwkJLyogcmV0dXJuZWQgbm9uY2UgTVVTVCBtYXRjaCB3aGF0IHdlIGdhdmUgb3V0IGVhcmxpZXIgKi8KKwkJcmV0dmFsID0gTk9OQ0VfQkFEOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qCisJICogSW4gc3RhdGVsZXNzIG1vZGUsIHdlIG1heSBiZSByZWNlaXZpbmcgYSBub25jZSBpc3N1ZWQgYnkKKwkgKiBhbm90aGVyIGluc3RhbmNlIG9mIHRoZSBzZXJ2ZXIgdGhhdCBzZXJ2aW5nIHRoZSBzYW1lCisJICogcmVwb3NpdG9yeSwgYW5kIHRoZSB0aW1lc3RhbXBzIG1heSBub3QgbWF0Y2gsIGJ1dCB0aGUKKwkgKiBub25jZS1zZWVkIGFuZCBkaXIgc2hvdWxkIG1hdGNoLCBzbyB3ZSBjYW4gcmVjb21wdXRlIGFuZAorCSAqIHJlcG9ydCB0aGUgdGltZSBzbG9wLgorCSAqCisJICogSW4gYWRkaXRpb24sIHdoZW4gYSBub25jZSBpc3N1ZWQgYnkgYW5vdGhlciBpbnN0YW5jZSBoYXMKKwkgKiB0aW1lc3RhbXAgd2l0aGluIHJlY2VpdmUuY2VydG5vbmNlc2xvcCBzZWNvbmRzLCB3ZSBwcmV0ZW5kCisJICogYXMgaWYgd2UgaXNzdWVkIHRoYXQgbm9uY2Ugd2hlbiByZXBvcnRpbmcgdG8gdGhlIGhvb2suCisJICovCisKKwkvKiBub25jZSBpcyBjb25jYXQoPHNlY29uZHMtc2luY2UtZXBvY2g+LCAiLSIsIDxobWFjPikgKi8KKwlpZiAoKm5vbmNlIDw9ICcwJyB8fCAnOScgPCAqbm9uY2UpIHsKKwkJcmV0dmFsID0gTk9OQ0VfQkFEOworCQlnb3RvIGxlYXZlOworCX0KKwlzdGFtcCA9IHBhcnNlX3RpbWVzdGFtcChub25jZSwgJmJvaG1hYywgMTApOworCWlmIChib2htYWMgPT0gbm9uY2UgfHwgYm9obWFjWzBdICE9ICctJykgeworCQlyZXR2YWwgPSBOT05DRV9CQUQ7CisJCWdvdG8gbGVhdmU7CisJfQorCisJZXhwZWN0ID0gcHJlcGFyZV9wdXNoX2NlcnRfbm9uY2Uoc2VydmljZV9kaXIsIHN0YW1wKTsKKwlpZiAoc3RyY21wKGV4cGVjdCwgbm9uY2UpKSB7CisJCS8qIE5vdCB3aGF0IHdlIHdvdWxkIGhhdmUgc2lnbmVkIGVhcmxpZXIgKi8KKwkJcmV0dmFsID0gTk9OQ0VfQkFEOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qCisJICogQnkgaG93IG1hbnkgc2Vjb25kcyBpcyB0aGlzIG5vbmNlIHN0YWxlPyAgTmVnYXRpdmUgdmFsdWUKKwkgKiB3b3VsZCBtZWFuIGl0IHdhcyBpc3N1ZWQgYnkgYW5vdGhlciBzZXJ2ZXIgd2l0aCBpdHMgY2xvY2sKKwkgKiBza2V3ZWQgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlvc3RhbXAgPSBwYXJzZV90aW1lc3RhbXAocHVzaF9jZXJ0X25vbmNlLCBOVUxMLCAxMCk7CisJbm9uY2Vfc3RhbXBfc2xvcCA9IChsb25nKW9zdGFtcCAtIChsb25nKXN0YW1wOworCisJaWYgKG5vbmNlX3N0YW1wX3Nsb3BfbGltaXQgJiYKKwkgICAgbGFicyhub25jZV9zdGFtcF9zbG9wKSA8PSBub25jZV9zdGFtcF9zbG9wX2xpbWl0KSB7CisJCS8qCisJCSAqIFByZXRlbmQgYXMgaWYgdGhlIHJlY2VpdmVkIG5vbmNlICh3aGljaCBwYXNzZXMgdGhlCisJCSAqIEhNQUMgY2hlY2ssIHNvIGl0IGlzIG5vdCBhIGZvcmdlZCBieSB0aGlyZC1wYXJ0eSkKKwkJICogaXMgd2hhdCB3ZSBpc3N1ZWQuCisJCSAqLworCQlmcmVlKCh2b2lkICopcHVzaF9jZXJ0X25vbmNlKTsKKwkJcHVzaF9jZXJ0X25vbmNlID0geHN0cmR1cChub25jZSk7CisJCXJldHZhbCA9IE5PTkNFX09LOworCX0gZWxzZSB7CisJCXJldHZhbCA9IE5PTkNFX1NMT1A7CisJfQorCitsZWF2ZToKKwlmcmVlKG5vbmNlKTsKKwlmcmVlKGV4cGVjdCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFJldHVybiAxIGlmIHRoZXJlIGlzIG5vIHB1c2hfY2VydCBvciBpZiB0aGUgcHVzaCBvcHRpb25zIGluIHB1c2hfY2VydCBhcmUKKyAqIHRoZSBzYW1lIGFzIHRob3NlIGluIHRoZSBhcmd1bWVudDsgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfY2VydF9wdXNoX29wdGlvbnMoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnMpCit7CisJY29uc3QgY2hhciAqYnVmID0gcHVzaF9jZXJ0LmJ1ZjsKKwlpbnQgbGVuID0gcHVzaF9jZXJ0LmxlbjsKKworCWNoYXIgKm9wdGlvbjsKKwljb25zdCBjaGFyICpuZXh0X2xpbmU7CisJaW50IG9wdGlvbnNfc2VlbiA9IDA7CisKKwlpbnQgcmV0dmFsID0gMTsKKworCWlmICghbGVuKQorCQlyZXR1cm4gMTsKKworCXdoaWxlICgob3B0aW9uID0gZmluZF9oZWFkZXIoYnVmLCBsZW4sICJwdXNoLW9wdGlvbiIsICZuZXh0X2xpbmUpKSkgeworCQlsZW4gLT0gKG5leHRfbGluZSAtIGJ1Zik7CisJCWJ1ZiA9IG5leHRfbGluZTsKKwkJb3B0aW9uc19zZWVuKys7CisJCWlmIChvcHRpb25zX3NlZW4gPiBwdXNoX29wdGlvbnMtPm5yCisJCSAgICB8fCBzdHJjbXAob3B0aW9uLAorCQkJICAgICAgcHVzaF9vcHRpb25zLT5pdGVtc1tvcHRpb25zX3NlZW4gLSAxXS5zdHJpbmcpKSB7CisJCQlyZXR2YWwgPSAwOworCQkJZ290byBsZWF2ZTsKKwkJfQorCQlmcmVlKG9wdGlvbik7CisJfQorCisJaWYgKG9wdGlvbnNfc2VlbiAhPSBwdXNoX29wdGlvbnMtPm5yKQorCQlyZXR2YWwgPSAwOworCitsZWF2ZToKKwlmcmVlKG9wdGlvbik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9wdXNoX2NlcnRfc2hhMShzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqcHJvYykKK3sKKwlzdGF0aWMgaW50IGFscmVhZHlfZG9uZTsKKworCWlmICghcHVzaF9jZXJ0LmxlbikKKwkJcmV0dXJuOworCisJaWYgKCFhbHJlYWR5X2RvbmUpIHsKKwkJaW50IGJvZ3MgLyogYmVnaW5uaW5nX29mX2dwZ19zaWcgKi87CisKKwkJYWxyZWFkeV9kb25lID0gMTsKKwkJaWYgKHdyaXRlX29iamVjdF9maWxlKHB1c2hfY2VydC5idWYsIHB1c2hfY2VydC5sZW4sICJibG9iIiwKKwkJCQkgICAgICAmcHVzaF9jZXJ0X29pZCkpCisJCQlvaWRjbHIoJnB1c2hfY2VydF9vaWQpOworCisJCW1lbXNldCgmc2lnY2hlY2ssICdcMCcsIHNpemVvZihzaWdjaGVjaykpOworCisJCWJvZ3MgPSBwYXJzZV9zaWduYXR1cmUocHVzaF9jZXJ0LmJ1ZiwgcHVzaF9jZXJ0Lmxlbik7CisJCWNoZWNrX3NpZ25hdHVyZShwdXNoX2NlcnQuYnVmLCBib2dzLCBwdXNoX2NlcnQuYnVmICsgYm9ncywKKwkJCQlwdXNoX2NlcnQubGVuIC0gYm9ncywgJnNpZ2NoZWNrKTsKKworCQlub25jZV9zdGF0dXMgPSBjaGVja19ub25jZShwdXNoX2NlcnQuYnVmLCBib2dzKTsKKwl9CisJaWYgKCFpc19udWxsX29pZCgmcHVzaF9jZXJ0X29pZCkpIHsKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy0+ZW52X2FycmF5LCAiR0lUX1BVU0hfQ0VSVD0lcyIsCisJCQkJIG9pZF90b19oZXgoJnB1c2hfY2VydF9vaWQpKTsKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy0+ZW52X2FycmF5LCAiR0lUX1BVU0hfQ0VSVF9TSUdORVI9JXMiLAorCQkJCSBzaWdjaGVjay5zaWduZXIgPyBzaWdjaGVjay5zaWduZXIgOiAiIik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJnByb2MtPmVudl9hcnJheSwgIkdJVF9QVVNIX0NFUlRfS0VZPSVzIiwKKwkJCQkgc2lnY2hlY2sua2V5ID8gc2lnY2hlY2sua2V5IDogIiIpOworCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksICJHSVRfUFVTSF9DRVJUX1NUQVRVUz0lYyIsCisJCQkJIHNpZ2NoZWNrLnJlc3VsdCk7CisJCWlmIChwdXNoX2NlcnRfbm9uY2UpIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnByb2MtPmVudl9hcnJheSwKKwkJCQkJICJHSVRfUFVTSF9DRVJUX05PTkNFPSVzIiwKKwkJCQkJIHB1c2hfY2VydF9ub25jZSk7CisJCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksCisJCQkJCSAiR0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVM9JXMiLAorCQkJCQkgbm9uY2Vfc3RhdHVzKTsKKwkJCWlmIChub25jZV9zdGF0dXMgPT0gTk9OQ0VfU0xPUCkKKwkJCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksCisJCQkJCQkgIkdJVF9QVVNIX0NFUlRfTk9OQ0VfU0xPUD0lbGQiLAorCQkJCQkJIG5vbmNlX3N0YW1wX3Nsb3ApOworCQl9CisJfQorfQorCitzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgeworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJaW50IHNraXBfYnJva2VuOworCXN0cnVjdCBzdHJidWYgYnVmOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zOworfTsKKwordHlwZWRlZiBpbnQgKCpmZWVkX2ZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCAqKTsKK3N0YXRpYyBpbnQgcnVuX2FuZF9mZWVkX2hvb2soY29uc3QgY2hhciAqaG9va19uYW1lLCBmZWVkX2ZuIGZlZWQsCisJCQkgICAgIHN0cnVjdCByZWNlaXZlX2hvb2tfZmVlZF9zdGF0ZSAqZmVlZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBhc3luYyBtdXhlcjsKKwljb25zdCBjaGFyICphcmd2WzJdOworCWludCBjb2RlOworCisJYXJndlswXSA9IGZpbmRfaG9vayhob29rX25hbWUpOworCWlmICghYXJndlswXSkKKwkJcmV0dXJuIDA7CisKKwlhcmd2WzFdID0gTlVMTDsKKworCXByb2MuYXJndiA9IGFyZ3Y7CisJcHJvYy5pbiA9IC0xOworCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJcHJvYy50cmFjZTJfaG9va19uYW1lID0gaG9va19uYW1lOworCisJaWYgKGZlZWRfc3RhdGUtPnB1c2hfb3B0aW9ucykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGZlZWRfc3RhdGUtPnB1c2hfb3B0aW9ucy0+bnI7IGkrKykKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnByb2MuZW52X2FycmF5LAorCQkJCSJHSVRfUFVTSF9PUFRJT05fJWQ9JXMiLCBpLAorCQkJCWZlZWRfc3RhdGUtPnB1c2hfb3B0aW9ucy0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy5lbnZfYXJyYXksICJHSVRfUFVTSF9PUFRJT05fQ09VTlQ9JWQiLAorCQkJCSBmZWVkX3N0YXRlLT5wdXNoX29wdGlvbnMtPm5yKTsKKwl9IGVsc2UKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy5lbnZfYXJyYXksICJHSVRfUFVTSF9PUFRJT05fQ09VTlQiKTsKKworCWlmICh0bXBfb2JqZGlyKQorCQlhcmd2X2FycmF5X3B1c2h2KCZwcm9jLmVudl9hcnJheSwgdG1wX29iamRpcl9lbnYodG1wX29iamRpcikpOworCisJaWYgKHVzZV9zaWRlYmFuZCkgeworCQltZW1zZXQoJm11eGVyLCAwLCBzaXplb2YobXV4ZXIpKTsKKwkJbXV4ZXIucHJvYyA9IGNvcHlfdG9fc2lkZWJhbmQ7CisJCW11eGVyLmluID0gLTE7CisJCWNvZGUgPSBzdGFydF9hc3luYygmbXV4ZXIpOworCQlpZiAoY29kZSkKKwkJCXJldHVybiBjb2RlOworCQlwcm9jLmVyciA9IG11eGVyLmluOworCX0KKworCXByZXBhcmVfcHVzaF9jZXJ0X3NoYTEoJnByb2MpOworCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnByb2MpOworCWlmIChjb2RlKSB7CisJCWlmICh1c2Vfc2lkZWJhbmQpCisJCQlmaW5pc2hfYXN5bmMoJm11eGVyKTsKKwkJcmV0dXJuIGNvZGU7CisJfQorCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKmJ1ZjsKKwkJc2l6ZV90IG47CisJCWlmIChmZWVkKGZlZWRfc3RhdGUsICZidWYsICZuKSkKKwkJCWJyZWFrOworCQlpZiAod3JpdGVfaW5fZnVsbChwcm9jLmluLCBidWYsIG4pIDwgMCkKKwkJCWJyZWFrOworCX0KKwljbG9zZShwcm9jLmluKTsKKwlpZiAodXNlX3NpZGViYW5kKQorCQlmaW5pc2hfYXN5bmMoJm11eGVyKTsKKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmcHJvYyk7Cit9CisKK3N0YXRpYyBpbnQgZmVlZF9yZWNlaXZlX2hvb2sodm9pZCAqc3RhdGVfLCBjb25zdCBjaGFyICoqYnVmcCwgc2l6ZV90ICpzaXplcCkKK3sKKwlzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgKnN0YXRlID0gc3RhdGVfOworCXN0cnVjdCBjb21tYW5kICpjbWQgPSBzdGF0ZS0+Y21kOworCisJd2hpbGUgKGNtZCAmJgorCSAgICAgICBzdGF0ZS0+c2tpcF9icm9rZW4gJiYgKGNtZC0+ZXJyb3Jfc3RyaW5nIHx8IGNtZC0+ZGlkX25vdF9leGlzdCkpCisJCWNtZCA9IGNtZC0+bmV4dDsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC0xOyAvKiBFT0YgKi8KKwlzdHJidWZfcmVzZXQoJnN0YXRlLT5idWYpOworCXN0cmJ1Zl9hZGRmKCZzdGF0ZS0+YnVmLCAiJXMgJXMgJXNcbiIsCisJCSAgICBvaWRfdG9faGV4KCZjbWQtPm9sZF9vaWQpLCBvaWRfdG9faGV4KCZjbWQtPm5ld19vaWQpLAorCQkgICAgY21kLT5yZWZfbmFtZSk7CisJc3RhdGUtPmNtZCA9IGNtZC0+bmV4dDsKKwlpZiAoYnVmcCkgeworCQkqYnVmcCA9IHN0YXRlLT5idWYuYnVmOworCQkqc2l6ZXAgPSBzdGF0ZS0+YnVmLmxlbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3JlY2VpdmVfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsCisJCQkgICAgY29uc3QgY2hhciAqaG9va19uYW1lLAorCQkJICAgIGludCBza2lwX2Jyb2tlbiwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9ucykKK3sKKwlzdHJ1Y3QgcmVjZWl2ZV9ob29rX2ZlZWRfc3RhdGUgc3RhdGU7CisJaW50IHN0YXR1czsKKworCXN0cmJ1Zl9pbml0KCZzdGF0ZS5idWYsIDApOworCXN0YXRlLmNtZCA9IGNvbW1hbmRzOworCXN0YXRlLnNraXBfYnJva2VuID0gc2tpcF9icm9rZW47CisJaWYgKGZlZWRfcmVjZWl2ZV9ob29rKCZzdGF0ZSwgTlVMTCwgTlVMTCkpCisJCXJldHVybiAwOworCXN0YXRlLmNtZCA9IGNvbW1hbmRzOworCXN0YXRlLnB1c2hfb3B0aW9ucyA9IHB1c2hfb3B0aW9uczsKKwlzdGF0dXMgPSBydW5fYW5kX2ZlZWRfaG9vayhob29rX25hbWUsIGZlZWRfcmVjZWl2ZV9ob29rLCAmc3RhdGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0ZS5idWYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3VwZGF0ZV9ob29rKHN0cnVjdCBjb21tYW5kICpjbWQpCit7CisJY29uc3QgY2hhciAqYXJndls1XTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBjb2RlOworCisJYXJndlswXSA9IGZpbmRfaG9vaygidXBkYXRlIik7CisJaWYgKCFhcmd2WzBdKQorCQlyZXR1cm4gMDsKKworCWFyZ3ZbMV0gPSBjbWQtPnJlZl9uYW1lOworCWFyZ3ZbMl0gPSBvaWRfdG9faGV4KCZjbWQtPm9sZF9vaWQpOworCWFyZ3ZbM10gPSBvaWRfdG9faGV4KCZjbWQtPm5ld19vaWQpOworCWFyZ3ZbNF0gPSBOVUxMOworCisJcHJvYy5ub19zdGRpbiA9IDE7CisJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlwcm9jLmVyciA9IHVzZV9zaWRlYmFuZCA/IC0xIDogMDsKKwlwcm9jLmFyZ3YgPSBhcmd2OworCXByb2MudHJhY2UyX2hvb2tfbmFtZSA9ICJ1cGRhdGUiOworCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnByb2MpOworCWlmIChjb2RlKQorCQlyZXR1cm4gY29kZTsKKwlpZiAodXNlX3NpZGViYW5kKQorCQljb3B5X3RvX3NpZGViYW5kKHByb2MuZXJyLCAtMSwgTlVMTCk7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZwcm9jKTsKK30KKworc3RhdGljIGNoYXIgKnJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9tc2cgPQorCU5fKCJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisJICAgImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisJICAgIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorCSAgICJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisJICAgIlxuIgorCSAgICJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKwkgICAidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKwkgICAiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisJICAgImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisJICAgIm90aGVyIHdheS5cbiIKKwkgICAiXG4iCisJICAgIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisJICAgIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIpOworCitzdGF0aWMgdm9pZCByZWZ1c2VfdW5jb25maWd1cmVkX2Rlbnkodm9pZCkKK3sKKwlycF9lcnJvcigiJXMiLCBfKHJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9tc2cpKTsKK30KKworc3RhdGljIGNoYXIgKnJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudF9tc2cgPQorCU5fKCJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisJICAgIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisJICAgIlxuIgorCSAgICJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorCSAgICInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorCSAgICJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorCSAgICJcbiIKKwkgICAiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIpOworCitzdGF0aWMgdm9pZCByZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnQodm9pZCkKK3sKKwlycF9lcnJvcigiJXMiLCBfKHJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudF9tc2cpKTsKK30KKworc3RhdGljIGludCBjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvcih2b2lkICpjYl9kYXRhLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworc3RhdGljIGludCB1cGRhdGVfc2hhbGxvd19yZWYoc3RydWN0IGNvbW1hbmQgKmNtZCwgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IGxvY2tfZmlsZSBzaGFsbG93X2xvY2sgPSBMT0NLX0lOSVQ7CisJc3RydWN0IG9pZF9hcnJheSBleHRyYSA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKKwl1aW50MzJfdCBtYXNrID0gMSA8PCAoY21kLT5pbmRleCAlIDMyKTsKKwlpbnQgaTsKKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NoYWxsb3csCisJCQkgInNoYWxsb3c6IHVwZGF0ZV9zaGFsbG93X3JlZiAlc1xuIiwgY21kLT5yZWZfbmFtZSk7CisJZm9yIChpID0gMDsgaSA8IHNpLT5zaGFsbG93LT5ucjsgaSsrKQorCQlpZiAoc2ktPnVzZWRfc2hhbGxvd1tpXSAmJgorCQkgICAgKHNpLT51c2VkX3NoYWxsb3dbaV1bY21kLT5pbmRleCAvIDMyXSAmIG1hc2spICYmCisJCSAgICAhZGVsYXllZF9yZWFjaGFiaWxpdHlfdGVzdChzaSwgaSkpCisJCQlvaWRfYXJyYXlfYXBwZW5kKCZleHRyYSwgJnNpLT5zaGFsbG93LT5vaWRbaV0pOworCisJb3B0LmVudiA9IHRtcF9vYmpkaXJfZW52KHRtcF9vYmpkaXIpOworCXNldHVwX2FsdGVybmF0ZV9zaGFsbG93KCZzaGFsbG93X2xvY2ssICZvcHQuc2hhbGxvd19maWxlLCAmZXh0cmEpOworCWlmIChjaGVja19jb25uZWN0ZWQoY29tbWFuZF9zaW5nbGV0b25faXRlcmF0b3IsIGNtZCwgJm9wdCkpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZzaGFsbG93X2xvY2spOworCQlvaWRfYXJyYXlfY2xlYXIoJmV4dHJhKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNvbW1pdF9sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygpIGZvciB0aGUgbmV4dCByZWYgZG9lcworCSAqIG5vdCBsb3NlIHRoZXNlIG5ldyByb290cy4uCisJICovCisJZm9yIChpID0gMDsgaSA8IGV4dHJhLm5yOyBpKyspCisJCXJlZ2lzdGVyX3NoYWxsb3codGhlX3JlcG9zaXRvcnksICZleHRyYS5vaWRbaV0pOworCisJc2ktPnNoYWxsb3dfcmVmW2NtZC0+aW5kZXhdID0gMDsKKwlvaWRfYXJyYXlfY2xlYXIoJmV4dHJhKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5FRURTV09SSzogd2Ugc2hvdWxkIGNvbnNvbGlkYXRlIHZhcmlvdXMgaW1wbGVtZW50aW9ucyBvZiAiYXJlIHdlCisgKiBvbiBhbiB1bmJvcm4gYnJhbmNoPyIgdGVzdCBpbnRvIG9uZSwgYW5kIG1ha2UgdGhlIHVuaWZpZWQgb25lIG1vcmUKKyAqIHJvYnVzdC4gIWdldF9zaGExKCkgYmFzZWQgY2hlY2sgdXNlZCBoZXJlIGFuZCBlbHNld2hlcmUgd291bGQgbm90CisgKiBhbGxvdyB1cyB0byB0ZWxsIGFuIHVuYm9ybiBicmFuY2ggZnJvbSBjb3JydXB0IHJlZiwgZm9yIGV4YW1wbGUuCisgKiBGb3IgdGhlIHB1cnBvc2Ugb2YgZml4aW5nICJkZXBsb3ktdG8tdXBkYXRlIGRvZXMgbm90IHdvcmsgd2hlbgorICogcHVzaGluZyBpbnRvIGFuIGVtcHR5IHJlcG9zaXRvcnkiIGlzc3VlLCB0aGlzIHNob3VsZCBzdWZmaWNlIGZvcgorICogbm93LgorICovCitzdGF0aWMgaW50IGhlYWRfaGFzX2hpc3Rvcnkodm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCXJldHVybiAhZ2V0X29pZCgiSEVBRCIsICZvaWQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHVzaF90b19kZXBsb3kodW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHN0cnVjdCBhcmd2X2FycmF5ICplbnYsCisJCQkJICBjb25zdCBjaGFyICp3b3JrX3RyZWUpCit7CisJY29uc3QgY2hhciAqdXBkYXRlX3JlZnJlc2hbXSA9IHsKKwkJInVwZGF0ZS1pbmRleCIsICItcSIsICItLWlnbm9yZS1zdWJtb2R1bGVzIiwgIi0tcmVmcmVzaCIsIE5VTEwKKwl9OworCWNvbnN0IGNoYXIgKmRpZmZfZmlsZXNbXSA9IHsKKwkJImRpZmYtZmlsZXMiLCAiLS1xdWlldCIsICItLWlnbm9yZS1zdWJtb2R1bGVzIiwgIi0tIiwgTlVMTAorCX07CisJY29uc3QgY2hhciAqZGlmZl9pbmRleFtdID0geworCQkiZGlmZi1pbmRleCIsICItLXF1aWV0IiwgIi0tY2FjaGVkIiwgIi0taWdub3JlLXN1Ym1vZHVsZXMiLAorCQlOVUxMLCAiLS0iLCBOVUxMCisJfTsKKwljb25zdCBjaGFyICpyZWFkX3RyZWVbXSA9IHsKKwkJInJlYWQtdHJlZSIsICItdSIsICItbSIsIE5VTEwsIE5VTEwKKwl9OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY2hpbGQuYXJndiA9IHVwZGF0ZV9yZWZyZXNoOworCWNoaWxkLmVudiA9IGVudi0+YXJndjsKKwljaGlsZC5kaXIgPSB3b3JrX3RyZWU7CisJY2hpbGQubm9fc3RkaW4gPSAxOworCWNoaWxkLnN0ZG91dF90b19zdGRlcnIgPSAxOworCWNoaWxkLmdpdF9jbWQgPSAxOworCWlmIChydW5fY29tbWFuZCgmY2hpbGQpKQorCQlyZXR1cm4gIlVwLXRvLWRhdGUgY2hlY2sgZmFpbGVkIjsKKworCS8qIHJ1bl9jb21tYW5kKCkgZG9lcyBub3QgY2xlYW4gdXAgY29tcGxldGVseTsgcmVpbml0aWFsaXplICovCisJY2hpbGRfcHJvY2Vzc19pbml0KCZjaGlsZCk7CisJY2hpbGQuYXJndiA9IGRpZmZfZmlsZXM7CisJY2hpbGQuZW52ID0gZW52LT5hcmd2OworCWNoaWxkLmRpciA9IHdvcmtfdHJlZTsKKwljaGlsZC5ub19zdGRpbiA9IDE7CisJY2hpbGQuc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJY2hpbGQuZ2l0X2NtZCA9IDE7CisJaWYgKHJ1bl9jb21tYW5kKCZjaGlsZCkpCisJCXJldHVybiAiV29ya2luZyBkaXJlY3RvcnkgaGFzIHVuc3RhZ2VkIGNoYW5nZXMiOworCisJLyogZGlmZi1pbmRleCB3aXRoIGVpdGhlciBIRUFEIG9yIGFuIGVtcHR5IHRyZWUgKi8KKwlkaWZmX2luZGV4WzRdID0gaGVhZF9oYXNfaGlzdG9yeSgpID8gIkhFQUQiIDogZW1wdHlfdHJlZV9vaWRfaGV4KCk7CisKKwljaGlsZF9wcm9jZXNzX2luaXQoJmNoaWxkKTsKKwljaGlsZC5hcmd2ID0gZGlmZl9pbmRleDsKKwljaGlsZC5lbnYgPSBlbnYtPmFyZ3Y7CisJY2hpbGQubm9fc3RkaW4gPSAxOworCWNoaWxkLm5vX3N0ZG91dCA9IDE7CisJY2hpbGQuc3Rkb3V0X3RvX3N0ZGVyciA9IDA7CisJY2hpbGQuZ2l0X2NtZCA9IDE7CisJaWYgKHJ1bl9jb21tYW5kKCZjaGlsZCkpCisJCXJldHVybiAiV29ya2luZyBkaXJlY3RvcnkgaGFzIHN0YWdlZCBjaGFuZ2VzIjsKKworCXJlYWRfdHJlZVszXSA9IGhhc2hfdG9faGV4KHNoYTEpOworCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY2hpbGQpOworCWNoaWxkLmFyZ3YgPSByZWFkX3RyZWU7CisJY2hpbGQuZW52ID0gZW52LT5hcmd2OworCWNoaWxkLmRpciA9IHdvcmtfdHJlZTsKKwljaGlsZC5ub19zdGRpbiA9IDE7CisJY2hpbGQubm9fc3Rkb3V0ID0gMTsKKwljaGlsZC5zdGRvdXRfdG9fc3RkZXJyID0gMDsKKwljaGlsZC5naXRfY21kID0gMTsKKwlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkKKwkJcmV0dXJuICJDb3VsZCBub3QgdXBkYXRlIHdvcmtpbmcgdHJlZSB0byBuZXcgSEVBRCI7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnB1c2hfdG9fY2hlY2tvdXRfaG9vayA9ICJwdXNoLXRvLWNoZWNrb3V0IjsKKworc3RhdGljIGNvbnN0IGNoYXIgKnB1c2hfdG9fY2hlY2tvdXQodW5zaWduZWQgY2hhciAqaGFzaCwKKwkJCQkgICAgc3RydWN0IGFyZ3ZfYXJyYXkgKmVudiwKKwkJCQkgICAgY29uc3QgY2hhciAqd29ya190cmVlKQoreworCWFyZ3ZfYXJyYXlfcHVzaGYoZW52LCAiR0lUX1dPUktfVFJFRT0lcyIsIGFic29sdXRlX3BhdGgod29ya190cmVlKSk7CisJaWYgKHJ1bl9ob29rX2xlKGVudi0+YXJndiwgcHVzaF90b19jaGVja291dF9ob29rLAorCQkJaGFzaF90b19oZXgoaGFzaCksIE5VTEwpKQorCQlyZXR1cm4gInB1c2gtdG8tY2hlY2tvdXQgaG9vayBkZWNsaW5lZCI7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVwZGF0ZV93b3JrdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKndvcmt0cmVlKQoreworCWNvbnN0IGNoYXIgKnJldHZhbCwgKndvcmtfdHJlZSwgKmdpdF9kaXIgPSBOVUxMOworCXN0cnVjdCBhcmd2X2FycmF5IGVudiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCWlmICh3b3JrdHJlZSAmJiB3b3JrdHJlZS0+cGF0aCkKKwkJd29ya190cmVlID0gd29ya3RyZWUtPnBhdGg7CisJZWxzZSBpZiAoZ2l0X3dvcmtfdHJlZV9jZmcpCisJCXdvcmtfdHJlZSA9IGdpdF93b3JrX3RyZWVfY2ZnOworCWVsc2UKKwkJd29ya190cmVlID0gIi4uIjsKKworCWlmIChpc19iYXJlX3JlcG9zaXRvcnkoKSkKKwkJcmV0dXJuICJkZW55Q3VycmVudEJyYW5jaCA9IHVwZGF0ZUluc3RlYWQgbmVlZHMgYSB3b3JrdHJlZSI7CisJaWYgKHdvcmt0cmVlKQorCQlnaXRfZGlyID0gZ2V0X3dvcmt0cmVlX2dpdF9kaXIod29ya3RyZWUpOworCWlmICghZ2l0X2RpcikKKwkJZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZlbnYsICJHSVRfRElSPSVzIiwgYWJzb2x1dGVfcGF0aChnaXRfZGlyKSk7CisKKwlpZiAoIWZpbmRfaG9vayhwdXNoX3RvX2NoZWNrb3V0X2hvb2spKQorCQlyZXR2YWwgPSBwdXNoX3RvX2RlcGxveShzaGExLCAmZW52LCB3b3JrX3RyZWUpOworCWVsc2UKKwkJcmV0dmFsID0gcHVzaF90b19jaGVja291dChzaGExLCAmZW52LCB3b3JrX3RyZWUpOworCisJYXJndl9hcnJheV9jbGVhcigmZW52KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdXBkYXRlKHN0cnVjdCBjb21tYW5kICpjbWQsIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSBjbWQtPnJlZl9uYW1lOworCXN0cnVjdCBzdHJidWYgbmFtZXNwYWNlZF9uYW1lX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjaGFyICpuYW1lc3BhY2VkX25hbWU7CisJY29uc3QgY2hhciAqcmV0OworCXN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQgPSAmY21kLT5vbGRfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQgPSAmY21kLT5uZXdfb2lkOworCWludCBkb191cGRhdGVfd29ya3RyZWUgPSAwOworCWNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd29ya3RyZWUgPSBpc19iYXJlX3JlcG9zaXRvcnkoKSA/IE5VTEwgOiBmaW5kX3NoYXJlZF9zeW1yZWYoIkhFQUQiLCBuYW1lKTsKKworCS8qIG9ubHkgcmVmcy8uLi4gYXJlIGFsbG93ZWQgKi8KKwlpZiAoIXN0YXJ0c193aXRoKG5hbWUsICJyZWZzLyIpIHx8IGNoZWNrX3JlZm5hbWVfZm9ybWF0KG5hbWUgKyA1LCAwKSkgeworCQlycF9lcnJvcigicmVmdXNpbmcgdG8gY3JlYXRlIGZ1bm55IHJlZiAnJXMnIHJlbW90ZWx5IiwgbmFtZSk7CisJCXJldHVybiAiZnVubnkgcmVmbmFtZSI7CisJfQorCisJc3RyYnVmX2FkZGYoJm5hbWVzcGFjZWRfbmFtZV9idWYsICIlcyVzIiwgZ2V0X2dpdF9uYW1lc3BhY2UoKSwgbmFtZSk7CisJZnJlZShuYW1lc3BhY2VkX25hbWUpOworCW5hbWVzcGFjZWRfbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJm5hbWVzcGFjZWRfbmFtZV9idWYsIE5VTEwpOworCisJaWYgKHdvcmt0cmVlKSB7CisJCXN3aXRjaCAoZGVueV9jdXJyZW50X2JyYW5jaCkgeworCQljYXNlIERFTllfSUdOT1JFOgorCQkJYnJlYWs7CisJCWNhc2UgREVOWV9XQVJOOgorCQkJcnBfd2FybmluZygidXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIik7CisJCQlicmVhazsKKwkJY2FzZSBERU5ZX1JFRlVTRToKKwkJY2FzZSBERU5ZX1VOQ09ORklHVVJFRDoKKwkJCXJwX2Vycm9yKCJyZWZ1c2luZyB0byB1cGRhdGUgY2hlY2tlZCBvdXQgYnJhbmNoOiAlcyIsIG5hbWUpOworCQkJaWYgKGRlbnlfY3VycmVudF9icmFuY2ggPT0gREVOWV9VTkNPTkZJR1VSRUQpCisJCQkJcmVmdXNlX3VuY29uZmlndXJlZF9kZW55KCk7CisJCQlyZXR1cm4gImJyYW5jaCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQiOworCQljYXNlIERFTllfVVBEQVRFX0lOU1RFQUQ6CisJCQkvKiBwYXNzIC0tIGxldCBvdGhlciBjaGVja3MgaW50ZXJ2ZW5lIGZpcnN0ICovCisJCQlkb191cGRhdGVfd29ya3RyZWUgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWlzX251bGxfb2lkKG5ld19vaWQpICYmICFoYXNfb2JqZWN0X2ZpbGUobmV3X29pZCkpIHsKKwkJZXJyb3IoInVucGFjayBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgJXMsICIKKwkJICAgICAgImJ1dCBJIGNhbid0IGZpbmQgaXQhIiwgb2lkX3RvX2hleChuZXdfb2lkKSk7CisJCXJldHVybiAiYmFkIHBhY2siOworCX0KKworCWlmICghaXNfbnVsbF9vaWQob2xkX29pZCkgJiYgaXNfbnVsbF9vaWQobmV3X29pZCkpIHsKKwkJaWYgKGRlbnlfZGVsZXRlcyAmJiBzdGFydHNfd2l0aChuYW1lLCAicmVmcy9oZWFkcy8iKSkgeworCQkJcnBfZXJyb3IoImRlbnlpbmcgcmVmIGRlbGV0aW9uIGZvciAlcyIsIG5hbWUpOworCQkJcmV0dXJuICJkZWxldGlvbiBwcm9oaWJpdGVkIjsKKwkJfQorCisJCWlmICh3b3JrdHJlZSB8fCAoaGVhZF9uYW1lICYmICFzdHJjbXAobmFtZXNwYWNlZF9uYW1lLCBoZWFkX25hbWUpKSkgeworCQkJc3dpdGNoIChkZW55X2RlbGV0ZV9jdXJyZW50KSB7CisJCQljYXNlIERFTllfSUdOT1JFOgorCQkJCWJyZWFrOworCQkJY2FzZSBERU5ZX1dBUk46CisJCQkJcnBfd2FybmluZygiZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIik7CisJCQkJYnJlYWs7CisJCQljYXNlIERFTllfUkVGVVNFOgorCQkJY2FzZSBERU5ZX1VOQ09ORklHVVJFRDoKKwkJCWNhc2UgREVOWV9VUERBVEVfSU5TVEVBRDoKKwkJCQlpZiAoZGVueV9kZWxldGVfY3VycmVudCA9PSBERU5ZX1VOQ09ORklHVVJFRCkKKwkJCQkJcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50KCk7CisJCQkJcnBfZXJyb3IoInJlZnVzaW5nIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBicmFuY2g6ICVzIiwgbmFtZSk7CisJCQkJcmV0dXJuICJkZWxldGlvbiBvZiB0aGUgY3VycmVudCBicmFuY2ggcHJvaGliaXRlZCI7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAiSW52YWxpZCBkZW55RGVsZXRlQ3VycmVudCBzZXR0aW5nIjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChkZW55X25vbl9mYXN0X2ZvcndhcmRzICYmICFpc19udWxsX29pZChuZXdfb2lkKSAmJgorCSAgICAhaXNfbnVsbF9vaWQob2xkX29pZCkgJiYKKwkgICAgc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvaGVhZHMvIikpIHsKKwkJc3RydWN0IG9iamVjdCAqb2xkX29iamVjdCwgKm5ld19vYmplY3Q7CisJCXN0cnVjdCBjb21taXQgKm9sZF9jb21taXQsICpuZXdfY29tbWl0OworCisJCW9sZF9vYmplY3QgPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9sZF9vaWQpOworCQluZXdfb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBuZXdfb2lkKTsKKworCQlpZiAoIW9sZF9vYmplY3QgfHwgIW5ld19vYmplY3QgfHwKKwkJICAgIG9sZF9vYmplY3QtPnR5cGUgIT0gT0JKX0NPTU1JVCB8fAorCQkgICAgbmV3X29iamVjdC0+dHlwZSAhPSBPQkpfQ09NTUlUKSB7CisJCQllcnJvcigiYmFkIHNoYTEgb2JqZWN0cyBmb3IgJXMiLCBuYW1lKTsKKwkJCXJldHVybiAiYmFkIHJlZiI7CisJCX0KKwkJb2xkX2NvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopb2xkX29iamVjdDsKKwkJbmV3X2NvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopbmV3X29iamVjdDsKKwkJaWYgKCFpbl9tZXJnZV9iYXNlcyhvbGRfY29tbWl0LCBuZXdfY29tbWl0KSkgeworCQkJcnBfZXJyb3IoImRlbnlpbmcgbm9uLWZhc3QtZm9yd2FyZCAlcyIKKwkJCQkgIiAoeW91IHNob3VsZCBwdWxsIGZpcnN0KSIsIG5hbWUpOworCQkJcmV0dXJuICJub24tZmFzdC1mb3J3YXJkIjsKKwkJfQorCX0KKwlpZiAocnVuX3VwZGF0ZV9ob29rKGNtZCkpIHsKKwkJcnBfZXJyb3IoImhvb2sgZGVjbGluZWQgdG8gdXBkYXRlICVzIiwgbmFtZSk7CisJCXJldHVybiAiaG9vayBkZWNsaW5lZCI7CisJfQorCisJaWYgKGRvX3VwZGF0ZV93b3JrdHJlZSkgeworCQlyZXQgPSB1cGRhdGVfd29ya3RyZWUobmV3X29pZC0+aGFzaCwgZmluZF9zaGFyZWRfc3ltcmVmKCJIRUFEIiwgbmFtZSkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoaXNfbnVsbF9vaWQobmV3X29pZCkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKCFwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9sZF9vaWQpKSB7CisJCQlvbGRfb2lkID0gTlVMTDsKKwkJCWlmIChyZWZfZXhpc3RzKG5hbWUpKSB7CisJCQkJcnBfd2FybmluZygiQWxsb3dpbmcgZGVsZXRpb24gb2YgY29ycnVwdCByZWYuIik7CisJCQl9IGVsc2UgeworCQkJCXJwX3dhcm5pbmcoIkRlbGV0aW5nIGEgbm9uLWV4aXN0ZW50IHJlZi4iKTsKKwkJCQljbWQtPmRpZF9ub3RfZXhpc3QgPSAxOworCQkJfQorCQl9CisJCWlmIChyZWZfdHJhbnNhY3Rpb25fZGVsZXRlKHRyYW5zYWN0aW9uLAorCQkJCQkgICBuYW1lc3BhY2VkX25hbWUsCisJCQkJCSAgIG9sZF9vaWQsCisJCQkJCSAgIDAsICJwdXNoIiwgJmVycikpIHsKKwkJCXJwX2Vycm9yKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCQlyZXR1cm4gImZhaWxlZCB0byBkZWxldGUiOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlyZXR1cm4gTlVMTDsgLyogZ29vZCAqLworCX0KKwllbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKHNoYWxsb3dfdXBkYXRlICYmIHNpLT5zaGFsbG93X3JlZltjbWQtPmluZGV4XSAmJgorCQkgICAgdXBkYXRlX3NoYWxsb3dfcmVmKGNtZCwgc2kpKQorCQkJcmV0dXJuICJzaGFsbG93IGVycm9yIjsKKworCQlpZiAocmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwKKwkJCQkJICAgbmFtZXNwYWNlZF9uYW1lLAorCQkJCQkgICBuZXdfb2lkLCBvbGRfb2lkLAorCQkJCQkgICAwLCAicHVzaCIsCisJCQkJCSAgICZlcnIpKSB7CisJCQlycF9lcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCisJCQlyZXR1cm4gImZhaWxlZCB0byB1cGRhdGUgcmVmIjsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKworCQlyZXR1cm4gTlVMTDsgLyogZ29vZCAqLworCX0KK30KKworc3RhdGljIHZvaWQgcnVuX3VwZGF0ZV9wb3N0X2hvb2soc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcHJvYyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICpob29rOworCisJaG9vayA9IGZpbmRfaG9vaygicG9zdC11cGRhdGUiKTsKKwlpZiAoIWhvb2spCisJCXJldHVybjsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmIChjbWQtPmVycm9yX3N0cmluZyB8fCBjbWQtPmRpZF9ub3RfZXhpc3QpCisJCQljb250aW51ZTsKKwkJaWYgKCFwcm9jLmFyZ3MuYXJnYykKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmcHJvYy5hcmdzLCBob29rKTsKKwkJYXJndl9hcnJheV9wdXNoKCZwcm9jLmFyZ3MsIGNtZC0+cmVmX25hbWUpOworCX0KKwlpZiAoIXByb2MuYXJncy5hcmdjKQorCQlyZXR1cm47CisKKwlwcm9jLm5vX3N0ZGluID0gMTsKKwlwcm9jLnN0ZG91dF90b19zdGRlcnIgPSAxOworCXByb2MuZXJyID0gdXNlX3NpZGViYW5kID8gLTEgOiAwOworCXByb2MudHJhY2UyX2hvb2tfbmFtZSA9ICJwb3N0LXVwZGF0ZSI7CisKKwlpZiAoIXN0YXJ0X2NvbW1hbmQoJnByb2MpKSB7CisJCWlmICh1c2Vfc2lkZWJhbmQpCisJCQljb3B5X3RvX3NpZGViYW5kKHByb2MuZXJyLCAtMSwgTlVMTCk7CisJCWZpbmlzaF9jb21tYW5kKCZwcm9jKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2FsaWFzZWRfdXBkYXRlX2ludGVybmFsKHN0cnVjdCBjb21tYW5kICpjbWQsCisJCQkJCSAgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCQkgIGNvbnN0IGNoYXIgKmRzdF9uYW1lLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgY29tbWFuZCAqZHN0X2NtZDsKKworCWlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQorCQlyZXR1cm47CisKKwlpZiAoIWRzdF9uYW1lKSB7CisJCXJwX2Vycm9yKCJyZWZ1c2luZyB1cGRhdGUgdG8gYnJva2VuIHN5bXJlZiAnJXMnIiwgY21kLT5yZWZfbmFtZSk7CisJCWNtZC0+c2tpcF91cGRhdGUgPSAxOworCQljbWQtPmVycm9yX3N0cmluZyA9ICJicm9rZW4gc3ltcmVmIjsKKwkJcmV0dXJuOworCX0KKwlkc3RfbmFtZSA9IHN0cmlwX25hbWVzcGFjZShkc3RfbmFtZSk7CisKKwlpZiAoKGl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAobGlzdCwgZHN0X25hbWUpKSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwljbWQtPnNraXBfdXBkYXRlID0gMTsKKworCWRzdF9jbWQgPSAoc3RydWN0IGNvbW1hbmQgKikgaXRlbS0+dXRpbDsKKworCWlmIChvaWRlcSgmY21kLT5vbGRfb2lkLCAmZHN0X2NtZC0+b2xkX29pZCkgJiYKKwkgICAgb2lkZXEoJmNtZC0+bmV3X29pZCwgJmRzdF9jbWQtPm5ld19vaWQpKQorCQlyZXR1cm47CisKKwlkc3RfY21kLT5za2lwX3VwZGF0ZSA9IDE7CisKKwlycF9lcnJvcigicmVmdXNpbmcgaW5jb25zaXN0ZW50IHVwZGF0ZSBiZXR3ZWVuIHN5bXJlZiAnJXMnICglcy4uJXMpIGFuZCIKKwkJICIgaXRzIHRhcmdldCAnJXMnICglcy4uJXMpIiwKKwkJIGNtZC0+cmVmX25hbWUsCisJCSBmaW5kX3VuaXF1ZV9hYmJyZXYoJmNtZC0+b2xkX29pZCwgREVGQVVMVF9BQkJSRVYpLAorCQkgZmluZF91bmlxdWVfYWJicmV2KCZjbWQtPm5ld19vaWQsIERFRkFVTFRfQUJCUkVWKSwKKwkJIGRzdF9jbWQtPnJlZl9uYW1lLAorCQkgZmluZF91bmlxdWVfYWJicmV2KCZkc3RfY21kLT5vbGRfb2lkLCBERUZBVUxUX0FCQlJFViksCisJCSBmaW5kX3VuaXF1ZV9hYmJyZXYoJmRzdF9jbWQtPm5ld19vaWQsIERFRkFVTFRfQUJCUkVWKSk7CisKKwljbWQtPmVycm9yX3N0cmluZyA9IGRzdF9jbWQtPmVycm9yX3N0cmluZyA9CisJCSJpbmNvbnNpc3RlbnQgYWxpYXNlZCB1cGRhdGUiOworfQorCitzdGF0aWMgdm9pZCBjaGVja19hbGlhc2VkX3VwZGF0ZShzdHJ1Y3QgY29tbWFuZCAqY21kLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpkc3RfbmFtZTsKKwlpbnQgZmxhZzsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcyVzIiwgZ2V0X2dpdF9uYW1lc3BhY2UoKSwgY21kLT5yZWZfbmFtZSk7CisJZHN0X25hbWUgPSByZXNvbHZlX3JlZl91bnNhZmUoYnVmLmJ1ZiwgMCwgTlVMTCwgJmZsYWcpOworCWNoZWNrX2FsaWFzZWRfdXBkYXRlX2ludGVybmFsKGNtZCwgbGlzdCwgZHN0X25hbWUsIGZsYWcpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19hbGlhc2VkX3VwZGF0ZXMoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZl9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmX2xpc3QsIGNtZC0+cmVmX25hbWUpOworCQlpdGVtLT51dGlsID0gKHZvaWQgKiljbWQ7CisJfQorCXN0cmluZ19saXN0X3NvcnQoJnJlZl9saXN0KTsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmICghY21kLT5lcnJvcl9zdHJpbmcpCisJCQljaGVja19hbGlhc2VkX3VwZGF0ZShjbWQsICZyZWZfbGlzdCk7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJnJlZl9saXN0LCAwKTsKK30KKworc3RhdGljIGludCBjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvcih2b2lkICpjYl9kYXRhLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGNvbW1hbmQgKipjbWRfbGlzdCA9IGNiX2RhdGE7CisJc3RydWN0IGNvbW1hbmQgKmNtZCA9ICpjbWRfbGlzdDsKKworCWlmICghY21kIHx8IGlzX251bGxfb2lkKCZjbWQtPm5ld19vaWQpKQorCQlyZXR1cm4gLTE7IC8qIGVuZCBvZiBsaXN0ICovCisJKmNtZF9saXN0ID0gTlVMTDsgLyogdGhpcyByZXR1cm5zIG9ubHkgb25lICovCisJb2lkY3B5KG9pZCwgJmNtZC0+bmV3X29pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jb25uZWN0aXZpdHlfZXJyb3JzKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywKKwkJCQkgICAgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCXN0cnVjdCBjb21tYW5kICpzaW5nbGV0b24gPSBjbWQ7CisJCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKKworCQlpZiAoc2hhbGxvd191cGRhdGUgJiYgc2ktPnNoYWxsb3dfcmVmW2NtZC0+aW5kZXhdKQorCQkJLyogdG8gYmUgY2hlY2tlZCBpbiB1cGRhdGVfc2hhbGxvd19yZWYoKSAqLworCQkJY29udGludWU7CisKKwkJb3B0LmVudiA9IHRtcF9vYmpkaXJfZW52KHRtcF9vYmpkaXIpOworCQlpZiAoIWNoZWNrX2Nvbm5lY3RlZChjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvciwgJnNpbmdsZXRvbiwKKwkJCQkgICAgICZvcHQpKQorCQkJY29udGludWU7CisKKwkJY21kLT5lcnJvcl9zdHJpbmcgPSAibWlzc2luZyBuZWNlc3Nhcnkgb2JqZWN0cyI7CisJfQorfQorCitzdHJ1Y3QgaXRlcmF0ZV9kYXRhIHsKKwlzdHJ1Y3QgY29tbWFuZCAqY21kczsKKwlzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaTsKK307CisKK3N0YXRpYyBpbnQgaXRlcmF0ZV9yZWNlaXZlX2NvbW1hbmRfbGlzdCh2b2lkICpjYl9kYXRhLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGl0ZXJhdGVfZGF0YSAqZGF0YSA9IGNiX2RhdGE7CisJc3RydWN0IGNvbW1hbmQgKipjbWRfbGlzdCA9ICZkYXRhLT5jbWRzOworCXN0cnVjdCBjb21tYW5kICpjbWQgPSAqY21kX2xpc3Q7CisKKwlmb3IgKDsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKHNoYWxsb3dfdXBkYXRlICYmIGRhdGEtPnNpLT5zaGFsbG93X3JlZltjbWQtPmluZGV4XSkKKwkJCS8qIHRvIGJlIGNoZWNrZWQgaW4gdXBkYXRlX3NoYWxsb3dfcmVmKCkgKi8KKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzX251bGxfb2lkKCZjbWQtPm5ld19vaWQpICYmICFjbWQtPnNraXBfdXBkYXRlKSB7CisJCQlvaWRjcHkob2lkLCAmY21kLT5uZXdfb2lkKTsKKwkJCSpjbWRfbGlzdCA9IGNtZC0+bmV4dDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCSpjbWRfbGlzdCA9IE5VTEw7CisJcmV0dXJuIC0xOyAvKiBlbmQgb2YgbGlzdCAqLworfQorCitzdGF0aWMgdm9pZCByZWplY3RfdXBkYXRlc190b19oaWRkZW4oc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzKQoreworCXN0cnVjdCBzdHJidWYgcmVmbmFtZV9mdWxsID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHByZWZpeF9sZW47CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKworCXN0cmJ1Zl9hZGRzdHIoJnJlZm5hbWVfZnVsbCwgZ2V0X2dpdF9uYW1lc3BhY2UoKSk7CisJcHJlZml4X2xlbiA9IHJlZm5hbWVfZnVsbC5sZW47CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoY21kLT5lcnJvcl9zdHJpbmcpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKCZyZWZuYW1lX2Z1bGwsIHByZWZpeF9sZW4pOworCQlzdHJidWZfYWRkc3RyKCZyZWZuYW1lX2Z1bGwsIGNtZC0+cmVmX25hbWUpOworCisJCWlmICghcmVmX2lzX2hpZGRlbihjbWQtPnJlZl9uYW1lLCByZWZuYW1lX2Z1bGwuYnVmKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfbnVsbF9vaWQoJmNtZC0+bmV3X29pZCkpCisJCQljbWQtPmVycm9yX3N0cmluZyA9ICJkZW55IGRlbGV0aW5nIGEgaGlkZGVuIHJlZiI7CisJCWVsc2UKKwkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gImRlbnkgdXBkYXRpbmcgYSBoaWRkZW4gcmVmIjsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmcmVmbmFtZV9mdWxsKTsKK30KKworc3RhdGljIGludCBzaG91bGRfcHJvY2Vzc19jbWQoc3RydWN0IGNvbW1hbmQgKmNtZCkKK3sKKwlyZXR1cm4gIWNtZC0+ZXJyb3Jfc3RyaW5nICYmICFjbWQtPnNraXBfdXBkYXRlOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2lmX3NraXBwZWRfY29ubmVjdGl2aXR5X2NoZWNrKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywKKwkJCQkJICAgICAgIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJaW50IGNoZWNrZWRfY29ubmVjdGl2aXR5ID0gMTsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmIChzaG91bGRfcHJvY2Vzc19jbWQoY21kKSAmJiBzaS0+c2hhbGxvd19yZWZbY21kLT5pbmRleF0pIHsKKwkJCWVycm9yKCJCVUc6IGNvbm5lY3Rpdml0eSBjaGVjayBoYXMgbm90IGJlZW4gcnVuIG9uIHJlZiAlcyIsCisJCQkgICAgICBjbWQtPnJlZl9uYW1lKTsKKwkJCWNoZWNrZWRfY29ubmVjdGl2aXR5ID0gMDsKKwkJfQorCX0KKwlpZiAoIWNoZWNrZWRfY29ubmVjdGl2aXR5KQorCQlCVUcoImNvbm5lY3Rpdml0eSBjaGVjayBza2lwcGVkPz8/Iik7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWN1dGVfY29tbWFuZHNfbm9uX2F0b21pYyhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsCisJCQkJCXN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmICghc2hvdWxkX3Byb2Nlc3NfY21kKGNtZCkpCisJCQljb250aW51ZTsKKworCQl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwkJaWYgKCF0cmFuc2FjdGlvbikgeworCQkJcnBfZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCQlzdHJidWZfcmVzZXQoJmVycik7CisJCQljbWQtPmVycm9yX3N0cmluZyA9ICJ0cmFuc2FjdGlvbiBmYWlsZWQgdG8gc3RhcnQiOworCQkJY29udGludWU7CisJCX0KKworCQljbWQtPmVycm9yX3N0cmluZyA9IHVwZGF0ZShjbWQsIHNpKTsKKworCQlpZiAoIWNtZC0+ZXJyb3Jfc3RyaW5nCisJCSAgICAmJiByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkgeworCQkJcnBfZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCQlzdHJidWZfcmVzZXQoJmVycik7CisJCQljbWQtPmVycm9yX3N0cmluZyA9ICJmYWlsZWQgdG8gdXBkYXRlIHJlZiI7CisJCX0KKwkJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKK30KKworc3RhdGljIHZvaWQgZXhlY3V0ZV9jb21tYW5kc19hdG9taWMoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLAorCQkJCQlzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcmVwb3J0ZWRfZXJyb3IgPSAiYXRvbWljIHB1c2ggZmFpbHVyZSI7CisKKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uKSB7CisJCXJwX2Vycm9yKCIlcyIsIGVyci5idWYpOworCQlzdHJidWZfcmVzZXQoJmVycik7CisJCXJlcG9ydGVkX2Vycm9yID0gInRyYW5zYWN0aW9uIGZhaWxlZCB0byBzdGFydCI7CisJCWdvdG8gZmFpbHVyZTsKKwl9CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoIXNob3VsZF9wcm9jZXNzX2NtZChjbWQpKQorCQkJY29udGludWU7CisKKwkJY21kLT5lcnJvcl9zdHJpbmcgPSB1cGRhdGUoY21kLCBzaSk7CisKKwkJaWYgKGNtZC0+ZXJyb3Jfc3RyaW5nKQorCQkJZ290byBmYWlsdXJlOworCX0KKworCWlmIChyZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkgeworCQlycF9lcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJcmVwb3J0ZWRfZXJyb3IgPSAiYXRvbWljIHRyYW5zYWN0aW9uIGZhaWxlZCI7CisJCWdvdG8gZmFpbHVyZTsKKwl9CisJZ290byBjbGVhbnVwOworCitmYWlsdXJlOgorCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KQorCQlpZiAoIWNtZC0+ZXJyb3Jfc3RyaW5nKQorCQkJY21kLT5lcnJvcl9zdHJpbmcgPSByZXBvcnRlZF9lcnJvcjsKKworY2xlYW51cDoKKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWN1dGVfY29tbWFuZHMoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLAorCQkJICAgICBjb25zdCBjaGFyICp1bnBhY2tlcl9lcnJvciwKKwkJCSAgICAgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2ksCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zKQoreworCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBvcHQgPSBDSEVDS19DT05ORUNURURfSU5JVDsKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCXN0cnVjdCBpdGVyYXRlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgYXN5bmMgbXV4ZXI7CisJaW50IGVycl9mZCA9IDA7CisKKwlpZiAodW5wYWNrZXJfZXJyb3IpIHsKKwkJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpCisJCQljbWQtPmVycm9yX3N0cmluZyA9ICJ1bnBhY2tlciBlcnJvciI7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXNlX3NpZGViYW5kKSB7CisJCW1lbXNldCgmbXV4ZXIsIDAsIHNpemVvZihtdXhlcikpOworCQltdXhlci5wcm9jID0gY29weV90b19zaWRlYmFuZDsKKwkJbXV4ZXIuaW4gPSAtMTsKKwkJaWYgKCFzdGFydF9hc3luYygmbXV4ZXIpKQorCQkJZXJyX2ZkID0gbXV4ZXIuaW47CisJCS8qIC4uLmVsc2UsIGNvbnRpbnVlIHdpdGhvdXQgcmVsYXlpbmcgc2lkZWJhbmQgKi8KKwl9CisKKwlkYXRhLmNtZHMgPSBjb21tYW5kczsKKwlkYXRhLnNpID0gc2k7CisJb3B0LmVycl9mZCA9IGVycl9mZDsKKwlvcHQucHJvZ3Jlc3MgPSBlcnJfZmQgJiYgIXF1aWV0OworCW9wdC5lbnYgPSB0bXBfb2JqZGlyX2Vudih0bXBfb2JqZGlyKTsKKwlpZiAoY2hlY2tfY29ubmVjdGVkKGl0ZXJhdGVfcmVjZWl2ZV9jb21tYW5kX2xpc3QsICZkYXRhLCAmb3B0KSkKKwkJc2V0X2Nvbm5lY3Rpdml0eV9lcnJvcnMoY29tbWFuZHMsIHNpKTsKKworCWlmICh1c2Vfc2lkZWJhbmQpCisJCWZpbmlzaF9hc3luYygmbXV4ZXIpOworCisJcmVqZWN0X3VwZGF0ZXNfdG9faGlkZGVuKGNvbW1hbmRzKTsKKworCWlmIChydW5fcmVjZWl2ZV9ob29rKGNvbW1hbmRzLCAicHJlLXJlY2VpdmUiLCAwLCBwdXNoX29wdGlvbnMpKSB7CisJCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCQlpZiAoIWNtZC0+ZXJyb3Jfc3RyaW5nKQorCQkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gInByZS1yZWNlaXZlIGhvb2sgZGVjbGluZWQiOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE5vdyB3ZSdsbCBzdGFydCB3cml0aW5nIG91dCByZWZzLCB3aGljaCBtZWFucyB0aGUgb2JqZWN0cyBuZWVkCisJICogdG8gYmUgaW4gdGhlaXIgZmluYWwgcG9zaXRpb25zIHNvIHRoYXQgb3RoZXIgcHJvY2Vzc2VzIGNhbiBzZWUgdGhlbS4KKwkgKi8KKwlpZiAodG1wX29iamRpcl9taWdyYXRlKHRtcF9vYmpkaXIpIDwgMCkgeworCQlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQkJaWYgKCFjbWQtPmVycm9yX3N0cmluZykKKwkJCQljbWQtPmVycm9yX3N0cmluZyA9ICJ1bmFibGUgdG8gbWlncmF0ZSBvYmplY3RzIHRvIHBlcm1hbmVudCBzdG9yYWdlIjsKKwkJfQorCQlyZXR1cm47CisJfQorCXRtcF9vYmpkaXIgPSBOVUxMOworCisJY2hlY2tfYWxpYXNlZF91cGRhdGVzKGNvbW1hbmRzKTsKKworCWZyZWUoaGVhZF9uYW1lX3RvX2ZyZWUpOworCWhlYWRfbmFtZSA9IGhlYWRfbmFtZV90b19mcmVlID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCBOVUxMLCBOVUxMKTsKKworCWlmICh1c2VfYXRvbWljKQorCQlleGVjdXRlX2NvbW1hbmRzX2F0b21pYyhjb21tYW5kcywgc2kpOworCWVsc2UKKwkJZXhlY3V0ZV9jb21tYW5kc19ub25fYXRvbWljKGNvbW1hbmRzLCBzaSk7CisKKwlpZiAoc2hhbGxvd191cGRhdGUpCisJCXdhcm5faWZfc2tpcHBlZF9jb25uZWN0aXZpdHlfY2hlY2soY29tbWFuZHMsIHNpKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21tYW5kICoqcXVldWVfY29tbWFuZChzdHJ1Y3QgY29tbWFuZCAqKnRhaWwsCisJCQkJICAgICAgY29uc3QgY2hhciAqbGluZSwKKwkJCQkgICAgICBpbnQgbGluZWxlbikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9sZF9vaWQsIG5ld19vaWQ7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwljb25zdCBjaGFyICpyZWZuYW1lOworCWludCByZWZsZW47CisJY29uc3QgY2hhciAqcDsKKworCWlmIChwYXJzZV9vaWRfaGV4KGxpbmUsICZvbGRfb2lkLCAmcCkgfHwKKwkgICAgKnArKyAhPSAnICcgfHwKKwkgICAgcGFyc2Vfb2lkX2hleChwLCAmbmV3X29pZCwgJnApIHx8CisJICAgICpwKysgIT0gJyAnKQorCQlkaWUoInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBvbGQvbmV3L3JlZiwgZ290ICclcyciLCBsaW5lKTsKKworCXJlZm5hbWUgPSBwOworCXJlZmxlbiA9IGxpbmVsZW4gLSAocCAtIGxpbmUpOworCUZMRVhfQUxMT0NfTUVNKGNtZCwgcmVmX25hbWUsIHJlZm5hbWUsIHJlZmxlbik7CisJb2lkY3B5KCZjbWQtPm9sZF9vaWQsICZvbGRfb2lkKTsKKwlvaWRjcHkoJmNtZC0+bmV3X29pZCwgJm5ld19vaWQpOworCSp0YWlsID0gY21kOworCXJldHVybiAmY21kLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9jb21tYW5kc19mcm9tX2NlcnQoc3RydWN0IGNvbW1hbmQgKip0YWlsLAorCQkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqcHVzaF9jZXJ0KQoreworCWNvbnN0IGNoYXIgKmJvYywgKmVvYzsKKworCWlmICgqdGFpbCkKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogZ290IGJvdGggcHVzaCBjZXJ0aWZpY2F0ZSBhbmQgdW5zaWduZWQgY29tbWFuZHMiKTsKKworCWJvYyA9IHN0cnN0cihwdXNoX2NlcnQtPmJ1ZiwgIlxuXG4iKTsKKwlpZiAoIWJvYykKKwkJZGllKCJtYWxmb3JtZWQgcHVzaCBjZXJ0aWZpY2F0ZSAlLipzIiwgMTAwLCBwdXNoX2NlcnQtPmJ1Zik7CisJZWxzZQorCQlib2MgKz0gMjsKKwllb2MgPSBwdXNoX2NlcnQtPmJ1ZiArIHBhcnNlX3NpZ25hdHVyZShwdXNoX2NlcnQtPmJ1ZiwgcHVzaF9jZXJ0LT5sZW4pOworCisJd2hpbGUgKGJvYyA8IGVvYykgeworCQljb25zdCBjaGFyICplb2wgPSBtZW1jaHIoYm9jLCAnXG4nLCBlb2MgLSBib2MpOworCQl0YWlsID0gcXVldWVfY29tbWFuZCh0YWlsLCBib2MsIGVvbCA/IGVvbCAtIGJvYyA6IGVvYyAtIGJvYyk7CisJCWJvYyA9IGVvbCA/IGVvbCArIDEgOiBlb2M7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNvbW1hbmQgKnJlYWRfaGVhZF9pbmZvKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIsCisJCQkJICAgICAgc3RydWN0IG9pZF9hcnJheSAqc2hhbGxvdykKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMgPSBOVUxMOworCXN0cnVjdCBjb21tYW5kICoqcCA9ICZjb21tYW5kczsKKwlmb3IgKDs7KSB7CisJCWludCBsaW5lbGVuOworCisJCWlmIChwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKSAhPSBQQUNLRVRfUkVBRF9OT1JNQUwpCisJCQlicmVhazsKKworCQlpZiAocmVhZGVyLT5wa3RsZW4gPiA4ICYmIHN0YXJ0c193aXRoKHJlYWRlci0+bGluZSwgInNoYWxsb3cgIikpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJaWYgKGdldF9vaWRfaGV4KHJlYWRlci0+bGluZSArIDgsICZvaWQpKQorCQkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLCBnb3QgJyVzJyIsCisJCQkJICAgIHJlYWRlci0+bGluZSArIDgpOworCQkJb2lkX2FycmF5X2FwcGVuZChzaGFsbG93LCAmb2lkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbGluZWxlbiA9IHN0cmxlbihyZWFkZXItPmxpbmUpOworCQlpZiAobGluZWxlbiA8IHJlYWRlci0+cGt0bGVuKSB7CisJCQljb25zdCBjaGFyICpmZWF0dXJlX2xpc3QgPSByZWFkZXItPmxpbmUgKyBsaW5lbGVuICsgMTsKKwkJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZV9saXN0LCAicmVwb3J0LXN0YXR1cyIpKQorCQkJCXJlcG9ydF9zdGF0dXMgPSAxOworCQkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlX2xpc3QsICJzaWRlLWJhbmQtNjRrIikpCisJCQkJdXNlX3NpZGViYW5kID0gTEFSR0VfUEFDS0VUX01BWDsKKwkJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZV9saXN0LCAicXVpZXQiKSkKKwkJCQlxdWlldCA9IDE7CisJCQlpZiAoYWR2ZXJ0aXNlX2F0b21pY19wdXNoCisJCQkgICAgJiYgcGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVfbGlzdCwgImF0b21pYyIpKQorCQkJCXVzZV9hdG9taWMgPSAxOworCQkJaWYgKGFkdmVydGlzZV9wdXNoX29wdGlvbnMKKwkJCSAgICAmJiBwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZV9saXN0LCAicHVzaC1vcHRpb25zIikpCisJCQkJdXNlX3B1c2hfb3B0aW9ucyA9IDE7CisJCX0KKworCQlpZiAoIXN0cmNtcChyZWFkZXItPmxpbmUsICJwdXNoLWNlcnQiKSkgeworCQkJaW50IHRydWVfZmx1c2ggPSAwOworCQkJaW50IHNhdmVkX29wdGlvbnMgPSByZWFkZXItPm9wdGlvbnM7CisJCQlyZWFkZXItPm9wdGlvbnMgJj0gflBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkU7CisKKwkJCWZvciAoOzspIHsKKwkJCQlwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKTsKKwkJCQlpZiAocmVhZGVyLT5zdGF0dXMgPT0gUEFDS0VUX1JFQURfRkxVU0gpIHsKKwkJCQkJdHJ1ZV9mbHVzaCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAocmVhZGVyLT5zdGF0dXMgIT0gUEFDS0VUX1JFQURfTk9STUFMKSB7CisJCQkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGdvdCBhbiB1bmV4cGVjdGVkIHBhY2tldCIpOworCQkJCX0KKwkJCQlpZiAoIXN0cmNtcChyZWFkZXItPmxpbmUsICJwdXNoLWNlcnQtZW5kXG4iKSkKKwkJCQkJYnJlYWs7IC8qIGVuZCBvZiBjZXJ0ICovCisJCQkJc3RyYnVmX2FkZHN0cigmcHVzaF9jZXJ0LCByZWFkZXItPmxpbmUpOworCQkJfQorCQkJcmVhZGVyLT5vcHRpb25zID0gc2F2ZWRfb3B0aW9uczsKKworCQkJaWYgKHRydWVfZmx1c2gpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCisJCXAgPSBxdWV1ZV9jb21tYW5kKHAsIHJlYWRlci0+bGluZSwgbGluZWxlbik7CisJfQorCisJaWYgKHB1c2hfY2VydC5sZW4pCisJCXF1ZXVlX2NvbW1hbmRzX2Zyb21fY2VydChwLCAmcHVzaF9jZXJ0KTsKKworCXJldHVybiBjb21tYW5kczsKK30KKworc3RhdGljIHZvaWQgcmVhZF9wdXNoX29wdGlvbnMoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwKKwkJCSAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqb3B0aW9ucykKK3sKKwl3aGlsZSAoMSkgeworCQlpZiAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgIT0gUEFDS0VUX1JFQURfTk9STUFMKQorCQkJYnJlYWs7CisKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKG9wdGlvbnMsIHJlYWRlci0+bGluZSk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfcGFja19oZWFkZXIoc3RydWN0IHBhY2tfaGVhZGVyICpoZHIpCit7CisJc3dpdGNoIChyZWFkX3BhY2tfaGVhZGVyKDAsIGhkcikpIHsKKwljYXNlIFBIX0VSUk9SX0VPRjoKKwkJcmV0dXJuICJlb2YgYmVmb3JlIHBhY2sgaGVhZGVyIHdhcyBmdWxseSByZWFkIjsKKworCWNhc2UgUEhfRVJST1JfUEFDS19TSUdOQVRVUkU6CisJCXJldHVybiAicHJvdG9jb2wgZXJyb3IgKHBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIGRldGVjdGVkKSI7CisKKwljYXNlIFBIX0VSUk9SX1BST1RPQ09MOgorCQlyZXR1cm4gInByb3RvY29sIGVycm9yIChwYWNrIHZlcnNpb24gdW5zdXBwb3J0ZWQpIjsKKworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biBlcnJvciBpbiBwYXJzZV9wYWNrX2hlYWRlciI7CisKKwljYXNlIDA6CisJCXJldHVybiBOVUxMOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhY2tfbG9ja2ZpbGU7CisKK3N0YXRpYyB2b2lkIHB1c2hfaGVhZGVyX2FyZyhzdHJ1Y3QgYXJndl9hcnJheSAqYXJncywgc3RydWN0IHBhY2tfaGVhZGVyICpoZHIpCit7CisJYXJndl9hcnJheV9wdXNoZihhcmdzLCAiLS1wYWNrX2hlYWRlcj0lIlBSSXUzMiIsJSJQUkl1MzIsCisJCQludG9obChoZHItPmhkcl92ZXJzaW9uKSwgbnRvaGwoaGRyLT5oZHJfZW50cmllcykpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5wYWNrKGludCBlcnJfZmQsIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCXN0cnVjdCBwYWNrX2hlYWRlciBoZHI7CisJY29uc3QgY2hhciAqaGRyX2VycjsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBmc2NrX29iamVjdHMgPSAocmVjZWl2ZV9mc2NrX29iamVjdHMgPj0gMAorCQkJICAgID8gcmVjZWl2ZV9mc2NrX29iamVjdHMKKwkJCSAgICA6IHRyYW5zZmVyX2ZzY2tfb2JqZWN0cyA+PSAwCisJCQkgICAgPyB0cmFuc2Zlcl9mc2NrX29iamVjdHMKKwkJCSAgICA6IDApOworCisJaGRyX2VyciA9IHBhcnNlX3BhY2tfaGVhZGVyKCZoZHIpOworCWlmIChoZHJfZXJyKSB7CisJCWlmIChlcnJfZmQgPiAwKQorCQkJY2xvc2UoZXJyX2ZkKTsKKwkJcmV0dXJuIGhkcl9lcnI7CisJfQorCisJaWYgKHNpLT5ucl9vdXJzIHx8IHNpLT5ucl90aGVpcnMpIHsKKwkJYWx0X3NoYWxsb3dfZmlsZSA9IHNldHVwX3RlbXBvcmFyeV9zaGFsbG93KHNpLT5zaGFsbG93KTsKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCAiLS1zaGFsbG93LWZpbGUiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCBhbHRfc2hhbGxvd19maWxlKTsKKwl9CisKKwl0bXBfb2JqZGlyID0gdG1wX29iamRpcl9jcmVhdGUoKTsKKwlpZiAoIXRtcF9vYmpkaXIpIHsKKwkJaWYgKGVycl9mZCA+IDApCisJCQljbG9zZShlcnJfZmQpOworCQlyZXR1cm4gInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IG9iamVjdCBkaXJlY3RvcnkiOworCX0KKwljaGlsZC5lbnYgPSB0bXBfb2JqZGlyX2Vudih0bXBfb2JqZGlyKTsKKworCS8qCisJICogTm9ybWFsbHkgd2UganVzdCBwYXNzIHRoZSB0bXBfb2JqZGlyIGVudmlyb25tZW50IHRvIHRoZSBjaGlsZAorCSAqIHByb2Nlc3NlcyB0aGF0IGRvIHRoZSBoZWF2eSBsaWZ0aW5nLCBidXQgd2UgbWF5IG5lZWQgdG8gc2VlIHRoZXNlCisJICogb2JqZWN0cyBvdXJzZWx2ZXMgdG8gc2V0IHVwIHNoYWxsb3cgaW5mb3JtYXRpb24uCisJICovCisJdG1wX29iamRpcl9hZGRfYXNfYWx0ZXJuYXRlKHRtcF9vYmpkaXIpOworCisJaWYgKG50b2hsKGhkci5oZHJfZW50cmllcykgPCB1bnBhY2tfbGltaXQpIHsKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCAidW5wYWNrLW9iamVjdHMiKTsKKwkJcHVzaF9oZWFkZXJfYXJnKCZjaGlsZC5hcmdzLCAmaGRyKTsKKwkJaWYgKHF1aWV0KQorCQkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCAiLXEiKTsKKwkJaWYgKGZzY2tfb2JqZWN0cykKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkLmFyZ3MsICItLXN0cmljdCVzIiwKKwkJCQlmc2NrX21zZ190eXBlcy5idWYpOworCQlpZiAobWF4X2lucHV0X3NpemUpCisJCQlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZC5hcmdzLCAiLS1tYXgtaW5wdXQtc2l6ZT0lIlBSSXVNQVgsCisJCQkJKHVpbnRtYXhfdCltYXhfaW5wdXRfc2l6ZSk7CisJCWNoaWxkLm5vX3N0ZG91dCA9IDE7CisJCWNoaWxkLmVyciA9IGVycl9mZDsKKwkJY2hpbGQuZ2l0X2NtZCA9IDE7CisJCXN0YXR1cyA9IHJ1bl9jb21tYW5kKCZjaGlsZCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gInVucGFjay1vYmplY3RzIGFibm9ybWFsIGV4aXQiOworCX0gZWxzZSB7CisJCWNoYXIgaG9zdG5hbWVbSE9TVF9OQU1FX01BWCArIDFdOworCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNoaWxkLmFyZ3MsICJpbmRleC1wYWNrIiwgIi0tc3RkaW4iLCBOVUxMKTsKKwkJcHVzaF9oZWFkZXJfYXJnKCZjaGlsZC5hcmdzLCAmaGRyKTsKKworCQlpZiAoeGdldGhvc3RuYW1lKGhvc3RuYW1lLCBzaXplb2YoaG9zdG5hbWUpKSkKKwkJCXhzbnByaW50Zihob3N0bmFtZSwgc2l6ZW9mKGhvc3RuYW1lKSwgImxvY2FsaG9zdCIpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZC5hcmdzLAorCQkJCSAiLS1rZWVwPXJlY2VpdmUtcGFjayAlIlBSSXVNQVgiIG9uICVzIiwKKwkJCQkgKHVpbnRtYXhfdClnZXRwaWQoKSwKKwkJCQkgaG9zdG5hbWUpOworCisJCWlmICghcXVpZXQgJiYgZXJyX2ZkKQorCQkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCAiLS1zaG93LXJlc29sdmluZy1wcm9ncmVzcyIpOworCQlpZiAodXNlX3NpZGViYW5kKQorCQkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCAiLS1yZXBvcnQtZW5kLW9mLWlucHV0Iik7CisJCWlmIChmc2NrX29iamVjdHMpCisJCQlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZC5hcmdzLCAiLS1zdHJpY3QlcyIsCisJCQkJZnNja19tc2dfdHlwZXMuYnVmKTsKKwkJaWYgKCFyZWplY3RfdGhpbikKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIi0tZml4LXRoaW4iKTsKKwkJaWYgKG1heF9pbnB1dF9zaXplKQorCQkJYXJndl9hcnJheV9wdXNoZigmY2hpbGQuYXJncywgIi0tbWF4LWlucHV0LXNpemU9JSJQUkl1TUFYLAorCQkJCSh1aW50bWF4X3QpbWF4X2lucHV0X3NpemUpOworCQljaGlsZC5vdXQgPSAtMTsKKwkJY2hpbGQuZXJyID0gZXJyX2ZkOworCQljaGlsZC5naXRfY21kID0gMTsKKwkJc3RhdHVzID0gc3RhcnRfY29tbWFuZCgmY2hpbGQpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuICJpbmRleC1wYWNrIGZvcmsgZmFpbGVkIjsKKwkJcGFja19sb2NrZmlsZSA9IGluZGV4X3BhY2tfbG9ja2ZpbGUoY2hpbGQub3V0KTsKKwkJY2xvc2UoY2hpbGQub3V0KTsKKwkJc3RhdHVzID0gZmluaXNoX2NvbW1hbmQoJmNoaWxkKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiAiaW5kZXgtcGFjayBhYm5vcm1hbCBleGl0IjsKKwkJcmVwcmVwYXJlX3BhY2tlZF9naXQodGhlX3JlcG9zaXRvcnkpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVucGFja193aXRoX3NpZGViYW5kKHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCXN0cnVjdCBhc3luYyBtdXhlcjsKKwljb25zdCBjaGFyICpyZXQ7CisKKwlpZiAoIXVzZV9zaWRlYmFuZCkKKwkJcmV0dXJuIHVucGFjaygwLCBzaSk7CisKKwl1c2Vfa2VlcGFsaXZlID0gS0VFUEFMSVZFX0FGVEVSX05VTDsKKwltZW1zZXQoJm11eGVyLCAwLCBzaXplb2YobXV4ZXIpKTsKKwltdXhlci5wcm9jID0gY29weV90b19zaWRlYmFuZDsKKwltdXhlci5pbiA9IC0xOworCWlmIChzdGFydF9hc3luYygmbXV4ZXIpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldCA9IHVucGFjayhtdXhlci5pbiwgc2kpOworCisJZmluaXNoX2FzeW5jKCZtdXhlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9zaGFsbG93X3VwZGF0ZShzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwlpbnQgaSwgaiwgaywgYml0bWFwX3NpemUgPSBESVZfUk9VTkRfVVAoc2ktPnJlZi0+bnIsIDMyKTsKKworCUFMTE9DX0FSUkFZKHNpLT51c2VkX3NoYWxsb3csIHNpLT5zaGFsbG93LT5ucik7CisJYXNzaWduX3NoYWxsb3dfY29tbWl0c190b19yZWZzKHNpLCBzaS0+dXNlZF9zaGFsbG93LCBOVUxMKTsKKworCXNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0ID0KKwkJeGNhbGxvYyhzaS0+c2hhbGxvdy0+bnIsIHNpemVvZigqc2ktPm5lZWRfcmVhY2hhYmlsaXR5X3Rlc3QpKTsKKwlzaS0+cmVhY2hhYmxlID0KKwkJeGNhbGxvYyhzaS0+c2hhbGxvdy0+bnIsIHNpemVvZigqc2ktPnJlYWNoYWJsZSkpOworCXNpLT5zaGFsbG93X3JlZiA9IHhjYWxsb2Moc2ktPnJlZi0+bnIsIHNpemVvZigqc2ktPnNoYWxsb3dfcmVmKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2ktPm5yX291cnM7IGkrKykKKwkJc2ktPm5lZWRfcmVhY2hhYmlsaXR5X3Rlc3Rbc2ktPm91cnNbaV1dID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBzaS0+c2hhbGxvdy0+bnI7IGkrKykgeworCQlpZiAoIXNpLT51c2VkX3NoYWxsb3dbaV0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGJpdG1hcF9zaXplOyBqKyspIHsKKwkJCWlmICghc2ktPnVzZWRfc2hhbGxvd1tpXVtqXSkKKwkJCQljb250aW51ZTsKKwkJCXNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0W2ldKys7CisJCQlmb3IgKGsgPSAwOyBrIDwgMzI7IGsrKykKKwkJCQlpZiAoc2ktPnVzZWRfc2hhbGxvd1tpXVtqXSAmICgxVSA8PCBrKSkKKwkJCQkJc2ktPnNoYWxsb3dfcmVmW2ogKiAzMiArIGtdKys7CisJCX0KKworCQkvKgorCQkgKiB0cnVlIGZvciB0aG9zZSBhc3NvY2lhdGVkIHdpdGggc29tZSByZWZzIGFuZCBiZWxvbmcKKwkJICogaW4gIm91cnMiIGxpc3QgYWthICJzdGVwIDcgbm90IGRvbmUgeWV0IgorCQkgKi8KKwkJc2ktPm5lZWRfcmVhY2hhYmlsaXR5X3Rlc3RbaV0gPQorCQkJc2ktPm5lZWRfcmVhY2hhYmlsaXR5X3Rlc3RbaV0gPiAxOworCX0KKworCS8qCisJICoga2VlcCBob29rcyBoYXBweSBieSBmb3JjaW5nIGEgdGVtcG9yYXJ5IHNoYWxsb3cgZmlsZSB2aWEKKwkgKiBlbnYgdmFyaWFibGUgYmVjYXVzZSB3ZSBjYW4ndCBhZGQgLS1zaGFsbG93LWZpbGUgdG8gZXZlcnkKKwkgKiBjb21tYW5kLiBjaGVja19jb25uZWN0ZWQoKSB3aWxsIGJlIGRvbmUgd2l0aAorCSAqIHRydWUgLmdpdC9zaGFsbG93IHRob3VnaC4KKwkgKi8KKwlzZXRlbnYoR0lUX1NIQUxMT1dfRklMRV9FTlZJUk9OTUVOVCwgYWx0X3NoYWxsb3dfZmlsZSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zaGFsbG93X2luZm8oc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLAorCQkJCXN0cnVjdCBzaGFsbG93X2luZm8gKnNpLAorCQkJCXN0cnVjdCBvaWRfYXJyYXkgKnJlZikKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCWludCAqcmVmX3N0YXR1czsKKwlyZW1vdmVfbm9uZXhpc3RlbnRfdGhlaXJzX3NoYWxsb3coc2kpOworCWlmICghc2ktPm5yX291cnMgJiYgIXNpLT5ucl90aGVpcnMpIHsKKwkJc2hhbGxvd191cGRhdGUgPSAwOworCQlyZXR1cm47CisJfQorCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKGlzX251bGxfb2lkKCZjbWQtPm5ld19vaWQpKQorCQkJY29udGludWU7CisJCW9pZF9hcnJheV9hcHBlbmQocmVmLCAmY21kLT5uZXdfb2lkKTsKKwkJY21kLT5pbmRleCA9IHJlZi0+bnIgLSAxOworCX0KKwlzaS0+cmVmID0gcmVmOworCisJaWYgKHNoYWxsb3dfdXBkYXRlKSB7CisJCXByZXBhcmVfc2hhbGxvd191cGRhdGUoc2kpOworCQlyZXR1cm47CisJfQorCisJQUxMT0NfQVJSQVkocmVmX3N0YXR1cywgcmVmLT5ucik7CisJYXNzaWduX3NoYWxsb3dfY29tbWl0c190b19yZWZzKHNpLCBOVUxMLCByZWZfc3RhdHVzKTsKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoaXNfbnVsbF9vaWQoJmNtZC0+bmV3X29pZCkpCisJCQljb250aW51ZTsKKwkJaWYgKHJlZl9zdGF0dXNbY21kLT5pbmRleF0pIHsKKwkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gInNoYWxsb3cgdXBkYXRlIG5vdCBhbGxvd2VkIjsKKwkJCWNtZC0+c2tpcF91cGRhdGUgPSAxOworCQl9CisJfQorCWZyZWUocmVmX3N0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydChzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsIGNvbnN0IGNoYXIgKnVucGFja19zdGF0dXMpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJcGFja2V0X2J1Zl93cml0ZSgmYnVmLCAidW5wYWNrICVzXG4iLAorCQkJIHVucGFja19zdGF0dXMgPyB1bnBhY2tfc3RhdHVzIDogIm9rIik7CisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKCFjbWQtPmVycm9yX3N0cmluZykKKwkJCXBhY2tldF9idWZfd3JpdGUoJmJ1ZiwgIm9rICVzXG4iLAorCQkJCQkgY21kLT5yZWZfbmFtZSk7CisJCWVsc2UKKwkJCXBhY2tldF9idWZfd3JpdGUoJmJ1ZiwgIm5nICVzICVzXG4iLAorCQkJCQkgY21kLT5yZWZfbmFtZSwgY21kLT5lcnJvcl9zdHJpbmcpOworCX0KKwlwYWNrZXRfYnVmX2ZsdXNoKCZidWYpOworCisJaWYgKHVzZV9zaWRlYmFuZCkKKwkJc2VuZF9zaWRlYmFuZCgxLCAxLCBidWYuYnVmLCBidWYubGVuLCB1c2Vfc2lkZWJhbmQpOworCWVsc2UKKwkJd3JpdGVfb3JfZGllKDEsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9vbmx5KHN0cnVjdCBjb21tYW5kICpjb21tYW5kcykKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmICghaXNfbnVsbF9vaWQoJmNtZC0+bmV3X29pZCkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2ludCBjbWRfcmVjZWl2ZV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBhZHZlcnRpc2VfcmVmcyA9IDA7CisJc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzOworCXN0cnVjdCBvaWRfYXJyYXkgc2hhbGxvdyA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBvaWRfYXJyYXkgcmVmID0gT0lEX0FSUkFZX0lOSVQ7CisJc3RydWN0IHNoYWxsb3dfaW5mbyBzaTsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJxdWlldCIpKSwKKwkJT1BUX0hJRERFTl9CT09MKDAsICJzdGF0ZWxlc3MtcnBjIiwgJnN0YXRlbGVzc19ycGMsIE5VTEwpLAorCQlPUFRfSElEREVOX0JPT0woMCwgImFkdmVydGlzZS1yZWZzIiwgJmFkdmVydGlzZV9yZWZzLCBOVUxMKSwKKwkJT1BUX0hJRERFTl9CT09MKDAsICJyZWplY3QtdGhpbi1wYWNrLWZvci10ZXN0aW5nIiwgJnJlamVjdF90aGluLCBOVUxMKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXBhY2tldF90cmFjZV9pZGVudGl0eSgicmVjZWl2ZS1wYWNrIik7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHJlY2VpdmVfcGFja191c2FnZSwgMCk7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlX21zZ19vcHQoXygiVG9vIG1hbnkgYXJndW1lbnRzLiIpLCByZWNlaXZlX3BhY2tfdXNhZ2UsIG9wdGlvbnMpOworCWlmIChhcmdjID09IDApCisJCXVzYWdlX21zZ19vcHQoXygiWW91IG11c3Qgc3BlY2lmeSBhIGRpcmVjdG9yeS4iKSwgcmVjZWl2ZV9wYWNrX3VzYWdlLCBvcHRpb25zKTsKKworCXNlcnZpY2VfZGlyID0gYXJndlswXTsKKworCXNldHVwX3BhdGgoKTsKKworCWlmICghZW50ZXJfcmVwbyhzZXJ2aWNlX2RpciwgMCkpCisJCWRpZSgiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBnaXQgcmVwb3NpdG9yeSIsIHNlcnZpY2VfZGlyKTsKKworCWdpdF9jb25maWcocmVjZWl2ZV9wYWNrX2NvbmZpZywgTlVMTCk7CisJaWYgKGNlcnRfbm9uY2Vfc2VlZCkKKwkJcHVzaF9jZXJ0X25vbmNlID0gcHJlcGFyZV9wdXNoX2NlcnRfbm9uY2Uoc2VydmljZV9kaXIsIHRpbWUoTlVMTCkpOworCisJaWYgKDAgPD0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0KQorCQl1bnBhY2tfbGltaXQgPSB0cmFuc2Zlcl91bnBhY2tfbGltaXQ7CisJZWxzZSBpZiAoMCA8PSByZWNlaXZlX3VucGFja19saW1pdCkKKwkJdW5wYWNrX2xpbWl0ID0gcmVjZWl2ZV91bnBhY2tfbGltaXQ7CisKKwlzd2l0Y2ggKGRldGVybWluZV9wcm90b2NvbF92ZXJzaW9uX3NlcnZlcigpKSB7CisJY2FzZSBwcm90b2NvbF92MjoKKwkJLyoKKwkJICogcHVzaCBzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LAorCQkgKiBzbyBpZ25vcmUgdGhlIHJlcXVlc3QgdG8gdXNlIHYyIGFuZCBmYWxsYmFjayB0byB1c2luZyB2MC4KKwkJICovCisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdjE6CisJCS8qCisJCSAqIHYxIGlzIGp1c3QgdGhlIG9yaWdpbmFsIHByb3RvY29sIHdpdGggYSB2ZXJzaW9uIHN0cmluZywKKwkJICogc28ganVzdCBmYWxsIHRocm91Z2ggYWZ0ZXIgd3JpdGluZyB0aGUgdmVyc2lvbiBzdHJpbmcuCisJCSAqLworCQlpZiAoYWR2ZXJ0aXNlX3JlZnMgfHwgIXN0YXRlbGVzc19ycGMpCisJCQlwYWNrZXRfd3JpdGVfZm10KDEsICJ2ZXJzaW9uIDFcbiIpOworCisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBwcm90b2NvbF92MDoKKwkJYnJlYWs7CisJY2FzZSBwcm90b2NvbF91bmtub3duX3ZlcnNpb246CisJCUJVRygidW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIik7CisJfQorCisJaWYgKGFkdmVydGlzZV9yZWZzIHx8ICFzdGF0ZWxlc3NfcnBjKSB7CisJCXdyaXRlX2hlYWRfaW5mbygpOworCX0KKwlpZiAoYWR2ZXJ0aXNlX3JlZnMpCisJCXJldHVybiAwOworCisJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIDAsIE5VTEwsIDAsCisJCQkgICBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FIHwKKwkJCSAgIFBBQ0tFVF9SRUFEX0RJRV9PTl9FUlJfUEFDS0VUKTsKKworCWlmICgoY29tbWFuZHMgPSByZWFkX2hlYWRfaW5mbygmcmVhZGVyLCAmc2hhbGxvdykpICE9IE5VTEwpIHsKKwkJY29uc3QgY2hhciAqdW5wYWNrX3N0YXR1cyA9IE5VTEw7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBwdXNoX29wdGlvbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCQlpZiAodXNlX3B1c2hfb3B0aW9ucykKKwkJCXJlYWRfcHVzaF9vcHRpb25zKCZyZWFkZXIsICZwdXNoX29wdGlvbnMpOworCQlpZiAoIWNoZWNrX2NlcnRfcHVzaF9vcHRpb25zKCZwdXNoX29wdGlvbnMpKSB7CisJCQlzdHJ1Y3QgY29tbWFuZCAqY21kOworCQkJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpCisJCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAiaW5jb25zaXN0ZW50IHB1c2ggb3B0aW9ucyI7CisJCX0KKworCQlwcmVwYXJlX3NoYWxsb3dfaW5mbygmc2ksICZzaGFsbG93KTsKKwkJaWYgKCFzaS5ucl9vdXJzICYmICFzaS5ucl90aGVpcnMpCisJCQlzaGFsbG93X3VwZGF0ZSA9IDA7CisJCWlmICghZGVsZXRlX29ubHkoY29tbWFuZHMpKSB7CisJCQl1bnBhY2tfc3RhdHVzID0gdW5wYWNrX3dpdGhfc2lkZWJhbmQoJnNpKTsKKwkJCXVwZGF0ZV9zaGFsbG93X2luZm8oY29tbWFuZHMsICZzaSwgJnJlZik7CisJCX0KKwkJdXNlX2tlZXBhbGl2ZSA9IEtFRVBBTElWRV9BTFdBWVM7CisJCWV4ZWN1dGVfY29tbWFuZHMoY29tbWFuZHMsIHVucGFja19zdGF0dXMsICZzaSwKKwkJCQkgJnB1c2hfb3B0aW9ucyk7CisJCWlmIChwYWNrX2xvY2tmaWxlKQorCQkJdW5saW5rX29yX3dhcm4ocGFja19sb2NrZmlsZSk7CisJCWlmIChyZXBvcnRfc3RhdHVzKQorCQkJcmVwb3J0KGNvbW1hbmRzLCB1bnBhY2tfc3RhdHVzKTsKKwkJcnVuX3JlY2VpdmVfaG9vayhjb21tYW5kcywgInBvc3QtcmVjZWl2ZSIsIDEsCisJCQkJICZwdXNoX29wdGlvbnMpOworCQlydW5fdXBkYXRlX3Bvc3RfaG9vayhjb21tYW5kcyk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZwdXNoX29wdGlvbnMsIDApOworCQlpZiAoYXV0b19nYykgeworCQkJY29uc3QgY2hhciAqYXJndl9nY19hdXRvW10gPSB7CisJCQkJImdjIiwgIi0tYXV0byIsICItLXF1aWV0IiwgTlVMTCwKKwkJCX07CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCQlwcm9jLm5vX3N0ZGluID0gMTsKKwkJCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJCQlwcm9jLmVyciA9IHVzZV9zaWRlYmFuZCA/IC0xIDogMDsKKwkJCXByb2MuZ2l0X2NtZCA9IDE7CisJCQlwcm9jLmFyZ3YgPSBhcmd2X2djX2F1dG87CisKKwkJCWNsb3NlX29iamVjdF9zdG9yZSh0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cyk7CisJCQlpZiAoIXN0YXJ0X2NvbW1hbmQoJnByb2MpKSB7CisJCQkJaWYgKHVzZV9zaWRlYmFuZCkKKwkJCQkJY29weV90b19zaWRlYmFuZChwcm9jLmVyciwgLTEsIE5VTEwpOworCQkJCWZpbmlzaF9jb21tYW5kKCZwcm9jKTsKKwkJCX0KKwkJfQorCQlpZiAoYXV0b191cGRhdGVfc2VydmVyX2luZm8pCisJCQl1cGRhdGVfc2VydmVyX2luZm8oMCk7CisJCWNsZWFyX3NoYWxsb3dfaW5mbygmc2kpOworCX0KKwlpZiAodXNlX3NpZGViYW5kKQorCQlwYWNrZXRfZmx1c2goMSk7CisJb2lkX2FycmF5X2NsZWFyKCZzaGFsbG93KTsKKwlvaWRfYXJyYXlfY2xlYXIoJnJlZik7CisJZnJlZSgodm9pZCAqKXB1c2hfY2VydF9ub25jZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlZmxvZy5jIGIvYnVpbHRpbi9yZWZsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRmZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZWZsb2cuYwpAQCAtMCwwICsxLDc4OSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVhY2hhYmxlLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworLyogTkVFRFNXT1JLOiBzd2l0Y2ggdG8gdXNpbmcgcGFyc2Vfb3B0aW9ucyAqLworc3RhdGljIGNvbnN0IGNoYXIgcmVmbG9nX2V4cGlyZV91c2FnZVtdID0KK05fKCJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSAiCisgICAiWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gIgorICAgIlstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dICIKKyAgICJbLS12ZXJib3NlXSBbLS1hbGxdIDxyZWZzPi4uLiIpOworc3RhdGljIGNvbnN0IGNoYXIgcmVmbG9nX2RlbGV0ZV91c2FnZVtdID0KK05fKCJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdICIKKyAgICJbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIDxyZWZzPi4uLiIpOworc3RhdGljIGNvbnN0IGNoYXIgcmVmbG9nX2V4aXN0c191c2FnZVtdID0KK05fKCJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIpOworCitzdGF0aWMgdGltZXN0YW1wX3QgZGVmYXVsdF9yZWZsb2dfZXhwaXJlOworc3RhdGljIHRpbWVzdGFtcF90IGRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZTsKKworc3RydWN0IGNtZF9yZWZsb2dfZXhwaXJlX2NiIHsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlpbnQgc3RhbGVmaXg7CisJdGltZXN0YW1wX3QgZXhwaXJlX3RvdGFsOworCXRpbWVzdGFtcF90IGV4cGlyZV91bnJlYWNoYWJsZTsKKwlpbnQgcmVjbm87Cit9OworCitzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgeworCWVudW0geworCQlVRV9OT1JNQUwsCisJCVVFX0FMV0FZUywKKwkJVUVfSEVBRAorCX0gdW5yZWFjaGFibGVfZXhwaXJlX2tpbmQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICptYXJrX2xpc3Q7CisJdW5zaWduZWQgbG9uZyBtYXJrX2xpbWl0OworCXN0cnVjdCBjbWRfcmVmbG9nX2V4cGlyZV9jYiBjbWQ7CisJc3RydWN0IGNvbW1pdCAqdGlwX2NvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRpcHM7Cit9OworCitzdHJ1Y3QgY29sbGVjdGVkX3JlZmxvZyB7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciByZWZsb2dbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgY29sbGVjdF9yZWZsb2dfY2IgeworCXN0cnVjdCBjb2xsZWN0ZWRfcmVmbG9nICoqZTsKKwlpbnQgYWxsb2M7CisJaW50IG5yOworCXN0cnVjdCB3b3JrdHJlZSAqd3Q7Cit9OworCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBJTkNPTVBMRVRFCSgxdTw8MTApCisjZGVmaW5lIFNUVURZSU5HCSgxdTw8MTEpCisjZGVmaW5lIFJFQUNIQUJMRQkoMXU8PDEyKQorCitzdGF0aWMgaW50IHRyZWVfaXNfY29tcGxldGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlpbnQgY29tcGxldGU7CisJc3RydWN0IHRyZWUgKnRyZWU7CisKKwl0cmVlID0gbG9va3VwX3RyZWUodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJaWYgKCF0cmVlKQorCQlyZXR1cm4gMDsKKwlpZiAodHJlZS0+b2JqZWN0LmZsYWdzICYgU0VFTikKKwkJcmV0dXJuIDE7CisJaWYgKHRyZWUtPm9iamVjdC5mbGFncyAmIElOQ09NUExFVEUpCisJCXJldHVybiAwOworCisJaWYgKCF0cmVlLT5idWZmZXIpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCXZvaWQgKmRhdGEgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFkYXRhKSB7CisJCQl0cmVlLT5vYmplY3QuZmxhZ3MgfD0gSU5DT01QTEVURTsKKwkJCXJldHVybiAwOworCQl9CisJCXRyZWUtPmJ1ZmZlciA9IGRhdGE7CisJCXRyZWUtPnNpemUgPSBzaXplOworCX0KKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwljb21wbGV0ZSA9IDE7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJaWYgKCFoYXNfb2JqZWN0X2ZpbGUoJmVudHJ5Lm9pZCkgfHwKKwkJICAgIChTX0lTRElSKGVudHJ5Lm1vZGUpICYmICF0cmVlX2lzX2NvbXBsZXRlKCZlbnRyeS5vaWQpKSkgeworCQkJdHJlZS0+b2JqZWN0LmZsYWdzIHw9IElOQ09NUExFVEU7CisJCQljb21wbGV0ZSA9IDA7CisJCX0KKwl9CisJZnJlZV90cmVlX2J1ZmZlcih0cmVlKTsKKworCWlmIChjb21wbGV0ZSkKKwkJdHJlZS0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJcmV0dXJuIGNvbXBsZXRlOworfQorCitzdGF0aWMgaW50IGNvbW1pdF9pc19jb21wbGV0ZShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IG9iamVjdF9hcnJheSBzdHVkeTsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGZvdW5kOworCWludCBpc19pbmNvbXBsZXRlID0gMDsKKwlpbnQgaTsKKworCS8qIGVhcmx5IHJldHVybiAqLworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCXJldHVybiAxOworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIElOQ09NUExFVEUpCisJCXJldHVybiAwOworCS8qCisJICogRmluZCBhbGwgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIGFyZSBub3QgbWFya2VkIGFzCisJICogU0VFTi4gIFRoZW4gbWFrZSBzdXJlIHRoZSB0cmVlcyBhbmQgYmxvYnMgY29udGFpbmVkIGFyZQorCSAqIGNvbXBsZXRlLiAgQWZ0ZXIgdGhhdCwgbWFyayB0aGVzZSBjb21taXRzIGFsc28gYXMgU0VFTi4KKwkgKiBJZiBzb21lIG9mIHRoZSBvYmplY3RzIHRoYXQgYXJlIG5lZWRlZCB0byBjb21wbGV0ZSB0aGlzCisJICogY29tbWl0IGFyZSBtaXNzaW5nLCBtYXJrIHRoaXMgY29tbWl0IGFzIElOQ09NUExFVEUuCisJICovCisJbWVtc2V0KCZzdHVkeSwgMCwgc2l6ZW9mKHN0dWR5KSk7CisJbWVtc2V0KCZmb3VuZCwgMCwgc2l6ZW9mKGZvdW5kKSk7CisJYWRkX29iamVjdF9hcnJheSgmY29tbWl0LT5vYmplY3QsIE5VTEwsICZzdHVkeSk7CisJYWRkX29iamVjdF9hcnJheSgmY29tbWl0LT5vYmplY3QsIE5VTEwsICZmb3VuZCk7CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gU1RVRFlJTkc7CisJd2hpbGUgKHN0dWR5Lm5yKSB7CisJCXN0cnVjdCBjb21taXQgKmM7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJCWMgPSAoc3RydWN0IGNvbW1pdCAqKW9iamVjdF9hcnJheV9wb3AoJnN0dWR5KTsKKwkJaWYgKCFjLT5vYmplY3QucGFyc2VkICYmICFwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZjLT5vYmplY3Qub2lkKSkKKwkJCWMtPm9iamVjdC5mbGFncyB8PSBJTkNPTVBMRVRFOworCisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBJTkNPTVBMRVRFKSB7CisJCQlpc19pbmNvbXBsZXRlID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKGMtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCQljb250aW51ZTsKKwkJZm9yIChwYXJlbnQgPSBjLT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKKwkJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBTVFVEWUlORykKKwkJCQljb250aW51ZTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBTVFVEWUlORzsKKwkJCWFkZF9vYmplY3RfYXJyYXkoJnAtPm9iamVjdCwgTlVMTCwgJnN0dWR5KTsKKwkJCWFkZF9vYmplY3RfYXJyYXkoJnAtPm9iamVjdCwgTlVMTCwgJmZvdW5kKTsKKwkJfQorCX0KKwlpZiAoIWlzX2luY29tcGxldGUpIHsKKwkJLyoKKwkJICogbWFrZSBzdXJlIGFsbCBjb21taXRzIGluICJmb3VuZCIgYXJyYXkgaGF2ZSBhbGwgdGhlCisJCSAqIG5lY2Vzc2FyeSBvYmplY3RzLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGZvdW5kLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBjb21taXQgKmMgPQorCQkJCShzdHJ1Y3QgY29tbWl0ICopZm91bmQub2JqZWN0c1tpXS5pdGVtOworCQkJaWYgKCF0cmVlX2lzX2NvbXBsZXRlKGdldF9jb21taXRfdHJlZV9vaWQoYykpKSB7CisJCQkJaXNfaW5jb21wbGV0ZSA9IDE7CisJCQkJYy0+b2JqZWN0LmZsYWdzIHw9IElOQ09NUExFVEU7CisJCQl9CisJCX0KKwkJaWYgKCFpc19pbmNvbXBsZXRlKSB7CisJCQkvKiBtYXJrIGFsbCBmb3VuZCBjb21taXRzIGFzIGNvbXBsZXRlLCBpb3cgU0VFTiAqLworCQkJZm9yIChpID0gMDsgaSA8IGZvdW5kLm5yOyBpKyspCisJCQkJZm91bmQub2JqZWN0c1tpXS5pdGVtLT5mbGFncyB8PSBTRUVOOworCQl9CisJfQorCS8qIGNsZWFyIGZsYWdzIGZyb20gdGhlIG9iamVjdHMgd2UgdHJhdmVyc2VkICovCisJZm9yIChpID0gMDsgaSA8IGZvdW5kLm5yOyBpKyspCisJCWZvdW5kLm9iamVjdHNbaV0uaXRlbS0+ZmxhZ3MgJj0gflNUVURZSU5HOworCWlmIChpc19pbmNvbXBsZXRlKQorCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBJTkNPTVBMRVRFOworCWVsc2UgeworCQkvKgorCQkgKiBJZiB3ZSBjb21lIGhlcmUsIHdlIGhhdmUgKDEpIHRyYXZlcnNlZCB0aGUgYW5jZXN0cnkgY2hhaW4KKwkJICogZnJvbSB0aGUgImNvbW1pdCIgdW50aWwgd2UgcmVhY2ggU0VFTiBjb21taXRzICh3aGljaCBhcmUKKwkJICoga25vd24gdG8gYmUgY29tcGxldGUpLCBhbmQgKDIpIG1hZGUgc3VyZSB0aGF0IHRoZSBjb21taXRzCisJCSAqIGVuY291bnRlcmVkIGR1cmluZyB0aGUgYWJvdmUgdHJhdmVyc2FsIHJlZmVyIHRvIHRyZWVzIHRoYXQKKwkJICogYXJlIGNvbXBsZXRlLiAgV2hpY2ggbWVhbnMgdGhhdCB3ZSBrbm93ICphbGwqIHRoZSBjb21taXRzCisJCSAqIHdlIGhhdmUgc2VlbiBkdXJpbmcgdGhpcyBwcm9jZXNzIGFyZSBjb21wbGV0ZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBmb3VuZC5ucjsgaSsrKQorCQkJZm91bmQub2JqZWN0c1tpXS5pdGVtLT5mbGFncyB8PSBTRUVOOworCX0KKwkvKiBmcmVlIG9iamVjdCBhcnJheXMgKi8KKwlvYmplY3RfYXJyYXlfY2xlYXIoJnN0dWR5KTsKKwlvYmplY3RfYXJyYXlfY2xlYXIoJmZvdW5kKTsKKwlyZXR1cm4gIWlzX2luY29tcGxldGU7Cit9CisKK3N0YXRpYyBpbnQga2VlcF9lbnRyeShzdHJ1Y3QgY29tbWl0ICoqaXQsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlpZiAoaXNfbnVsbF9vaWQob2lkKSkKKwkJcmV0dXJuIDE7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCBvaWQsIDEpOworCWlmICghY29tbWl0KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaW4gdGhpcyBjb21taXQgZXhpc3RzLgorCSAqCisJICogV2UgaGF2ZSB3YWxrZWQgYWxsIHRoZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoZSByZWZzCisJICogYW5kIGNhY2hlIGVhcmxpZXIuICBUaGUgY29tbWl0cyByZWFjaGFibGUgYnkgdGhpcyBjb21taXQKKwkgKiBtdXN0IG1lZXQgU0VFTiBjb21taXRzIC0tIGFuZCB0aGVuIHdlIHNob3VsZCBtYXJrIHRoZW0gYXMKKwkgKiBTRUVOIGFzIHdlbGwuCisJICovCisJaWYgKCFjb21taXRfaXNfY29tcGxldGUoY29tbWl0KSkKKwkJcmV0dXJuIDA7CisJKml0ID0gY29tbWl0OworCXJldHVybiAxOworfQorCisvKgorICogU3RhcnRpbmcgZnJvbSBjb21taXRzIGluIHRoZSBjYi0+bWFya19saXN0LCBtYXJrIGNvbW1pdHMgdGhhdCBhcmUKKyAqIHJlYWNoYWJsZSBmcm9tIHRoZW0uICBTdG9wIHRoZSB0cmF2ZXJzYWwgYXQgY29tbWl0cyBvbGRlciB0aGFuCisgKiB0aGUgZXhwaXJlX2xpbWl0IGFuZCBxdWV1ZSB0aGVtIGJhY2ssIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2FsbAorICogdXMgYWdhaW4gdG8gcmVzdGFydCB0aGUgdHJhdmVyc2FsIHdpdGggbG9uZ2VyIGV4cGlyZV9saW1pdC4KKyAqLworc3RhdGljIHZvaWQgbWFya19yZWFjaGFibGUoc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiICpjYikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBlbmRpbmc7CisJdGltZXN0YW1wX3QgZXhwaXJlX2xpbWl0ID0gY2ItPm1hcmtfbGltaXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsZWZ0b3ZlciA9IE5VTEw7CisKKwlmb3IgKHBlbmRpbmcgPSBjYi0+bWFya19saXN0OyBwZW5kaW5nOyBwZW5kaW5nID0gcGVuZGluZy0+bmV4dCkKKwkJcGVuZGluZy0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5SRUFDSEFCTEU7CisKKwlwZW5kaW5nID0gY2ItPm1hcmtfbGlzdDsKKwl3aGlsZSAocGVuZGluZykgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX2NvbW1pdCgmcGVuZGluZyk7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJCWNvbnRpbnVlOworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCQljb250aW51ZTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUkVBQ0hBQkxFOworCQlpZiAoY29tbWl0LT5kYXRlIDwgZXhwaXJlX2xpbWl0KSB7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmbGVmdG92ZXIpOworCQkJY29udGludWU7CisJCX0KKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUkVBQ0hBQkxFOworCQlwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCWNvbW1pdCA9IHBhcmVudC0+aXRlbTsKKwkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJCQljb250aW51ZTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZwZW5kaW5nKTsKKwkJfQorCX0KKwljYi0+bWFya19saXN0ID0gbGVmdG92ZXI7Cit9CisKK3N0YXRpYyBpbnQgdW5yZWFjaGFibGUoc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiICpjYiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJLyoKKwkgKiBXZSBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZSBjb21taXQgeWV0IC0gaWYgbm90LCBsb29rIGl0CisJICogdXAgdXNpbmcgdGhlIHN1cHBsaWVkIHNoYTEuCisJICovCisJaWYgKCFjb21taXQpIHsKKwkJaWYgKGlzX251bGxfb2lkKG9pZCkpCisJCQlyZXR1cm4gMDsKKworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksIG9pZCwKKwkJCQkJCQkxKTsKKworCQkvKiBOb3QgYSBjb21taXQgLS0ga2VlcCBpdCAqLworCQlpZiAoIWNvbW1pdCkKKwkJCXJldHVybiAwOworCX0KKworCS8qIFJlYWNoYWJsZSBmcm9tIHRoZSBjdXJyZW50IHJlZj8gIERvbid0IHBydW5lLiAqLworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2ItPm1hcmtfbGlzdCAmJiBjYi0+bWFya19saW1pdCkgeworCQljYi0+bWFya19saW1pdCA9IDA7IC8qIGRpZyBkb3duIHRvIHRoZSByb290ICovCisJCW1hcmtfcmVhY2hhYmxlKGNiKTsKKwl9CisKKwlyZXR1cm4gIShjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZmYgdGhlIHNwZWNpZmllZCByZWZsb2cgZW50cnkgc2hvdWxkIGJlIGV4cGlyZWQuCisgKi8KK3N0YXRpYyBpbnQgc2hvdWxkX2V4cGlyZV9yZWZsb2dfZW50KHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5vaWQsCisJCQkJICAgIGNvbnN0IGNoYXIgKmVtYWlsLCB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGludCB0eiwKKwkJCQkgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgKmNiID0gY2JfZGF0YTsKKwlzdHJ1Y3QgY29tbWl0ICpvbGRfY29tbWl0LCAqbmV3X2NvbW1pdDsKKworCWlmICh0aW1lc3RhbXAgPCBjYi0+Y21kLmV4cGlyZV90b3RhbCkKKwkJcmV0dXJuIDE7CisKKwlvbGRfY29tbWl0ID0gbmV3X2NvbW1pdCA9IE5VTEw7CisJaWYgKGNiLT5jbWQuc3RhbGVmaXggJiYKKwkgICAgKCFrZWVwX2VudHJ5KCZvbGRfY29tbWl0LCBvb2lkKSB8fCAha2VlcF9lbnRyeSgmbmV3X2NvbW1pdCwgbm9pZCkpKQorCQlyZXR1cm4gMTsKKworCWlmICh0aW1lc3RhbXAgPCBjYi0+Y21kLmV4cGlyZV91bnJlYWNoYWJsZSkgeworCQlpZiAoY2ItPnVucmVhY2hhYmxlX2V4cGlyZV9raW5kID09IFVFX0FMV0FZUykKKwkJCXJldHVybiAxOworCQlpZiAodW5yZWFjaGFibGUoY2IsIG9sZF9jb21taXQsIG9vaWQpIHx8IHVucmVhY2hhYmxlKGNiLCBuZXdfY29tbWl0LCBub2lkKSkKKwkJCXJldHVybiAxOworCX0KKworCWlmIChjYi0+Y21kLnJlY25vICYmIC0tKGNiLT5jbWQucmVjbm8pID09IDApCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF90aXBfdG9fbGlzdChjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QgPSBjYl9kYXRhOworCXN0cnVjdCBjb21taXQgKnRpcF9jb21taXQ7CisJaWYgKGZsYWdzICYgUkVGX0lTU1lNUkVGKQorCQlyZXR1cm4gMDsKKwl0aXBfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCBvaWQsIDEpOworCWlmICghdGlwX2NvbW1pdCkKKwkJcmV0dXJuIDA7CisJY29tbWl0X2xpc3RfaW5zZXJ0KHRpcF9jb21taXQsIGxpc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX2hlYWQoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzd2l0Y2ggKHJlZl90eXBlKHJlZm5hbWUpKSB7CisJY2FzZSBSRUZfVFlQRV9PVEhFUl9QU0VVRE9SRUY6CisJY2FzZSBSRUZfVFlQRV9NQUlOX1BTRVVET1JFRjoKKwkJaWYgKHBhcnNlX3dvcmt0cmVlX3JlZihyZWZuYW1lLCBOVUxMLCBOVUxMLCAmcmVmbmFtZSkpCisJCQlCVUcoIm5vdCBhIHdvcmt0cmVlIHJlZjogJXMiLCByZWZuYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAhc3RyY21wKHJlZm5hbWUsICJIRUFEIik7Cit9CisKK3N0YXRpYyB2b2lkIHJlZmxvZ19leHBpcnlfcHJlcGFyZShjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgKmNiID0gY2JfZGF0YTsKKworCWlmICghY2ItPmNtZC5leHBpcmVfdW5yZWFjaGFibGUgfHwgaXNfaGVhZChyZWZuYW1lKSkgeworCQljYi0+dGlwX2NvbW1pdCA9IE5VTEw7CisJCWNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9IFVFX0hFQUQ7CisJfSBlbHNlIHsKKwkJY2ItPnRpcF9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJCW9pZCwgMSk7CisJCWlmICghY2ItPnRpcF9jb21taXQpCisJCQljYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPSBVRV9BTFdBWVM7CisJCWVsc2UKKwkJCWNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9IFVFX05PUk1BTDsKKwl9CisKKwlpZiAoY2ItPmNtZC5leHBpcmVfdW5yZWFjaGFibGUgPD0gY2ItPmNtZC5leHBpcmVfdG90YWwpCisJCWNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9IFVFX0FMV0FZUzsKKworCWNiLT5tYXJrX2xpc3QgPSBOVUxMOworCWNiLT50aXBzID0gTlVMTDsKKwlpZiAoY2ItPnVucmVhY2hhYmxlX2V4cGlyZV9raW5kICE9IFVFX0FMV0FZUykgeworCQlpZiAoY2ItPnVucmVhY2hhYmxlX2V4cGlyZV9raW5kID09IFVFX0hFQUQpIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqZWxlbTsKKworCQkJZm9yX2VhY2hfcmVmKHB1c2hfdGlwX3RvX2xpc3QsICZjYi0+dGlwcyk7CisJCQlmb3IgKGVsZW0gPSBjYi0+dGlwczsgZWxlbTsgZWxlbSA9IGVsZW0tPm5leHQpCisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGVsZW0tPml0ZW0sICZjYi0+bWFya19saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWNvbW1pdF9saXN0X2luc2VydChjYi0+dGlwX2NvbW1pdCwgJmNiLT5tYXJrX2xpc3QpOworCQl9CisJCWNiLT5tYXJrX2xpbWl0ID0gY2ItPmNtZC5leHBpcmVfdG90YWw7CisJCW1hcmtfcmVhY2hhYmxlKGNiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlZmxvZ19leHBpcnlfY2xlYW51cCh2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBleHBpcmVfcmVmbG9nX3BvbGljeV9jYiAqY2IgPSBjYl9kYXRhOworCisJaWYgKGNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCAhPSBVRV9BTFdBWVMpIHsKKwkJaWYgKGNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9PSBVRV9IRUFEKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW07CisJCQlmb3IgKGVsZW0gPSBjYi0+dGlwczsgZWxlbTsgZWxlbSA9IGVsZW0tPm5leHQpCisJCQkJY2xlYXJfY29tbWl0X21hcmtzKGVsZW0tPml0ZW0sIFJFQUNIQUJMRSk7CisJCQlmcmVlX2NvbW1pdF9saXN0KGNiLT50aXBzKTsKKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2NvbW1pdF9tYXJrcyhjYi0+dGlwX2NvbW1pdCwgUkVBQ0hBQkxFKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBjb2xsZWN0X3JlZmxvZyhjb25zdCBjaGFyICpyZWYsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IHVudXNlZCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29sbGVjdGVkX3JlZmxvZyAqZTsKKwlzdHJ1Y3QgY29sbGVjdF9yZWZsb2dfY2IgKmNiID0gY2JfZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIG5ld3JlZiA9IFNUUkJVRl9JTklUOworCisJLyoKKwkgKiBBdm9pZCBjb2xsZWN0aW5nIHRoZSBzYW1lIHNoYXJlZCByZWYgbXVsdGlwbGUgdGltZXMgYmVjYXVzZQorCSAqIHRoZXkgYXJlIGF2YWlsYWJsZSB2aWEgYWxsIHdvcmt0cmVlcy4KKwkgKi8KKwlpZiAoIWNiLT53dC0+aXNfY3VycmVudCAmJiByZWZfdHlwZShyZWYpID09IFJFRl9UWVBFX05PUk1BTCkKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfd29ya3RyZWVfcmVmKGNiLT53dCwgJm5ld3JlZiwgcmVmKTsKKwlGTEVYX0FMTE9DX1NUUihlLCByZWZsb2csIG5ld3JlZi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdyZWYpOworCisJb2lkY3B5KCZlLT5vaWQsIG9pZCk7CisJQUxMT0NfR1JPVyhjYi0+ZSwgY2ItPm5yICsgMSwgY2ItPmFsbG9jKTsKKwljYi0+ZVtjYi0+bnIrK10gPSBlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnIHsKKwlzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKm5leHQ7CisJdGltZXN0YW1wX3QgZXhwaXJlX3RvdGFsOworCXRpbWVzdGFtcF90IGV4cGlyZV91bnJlYWNoYWJsZTsKKwljaGFyIHBhdHRlcm5bRkxFWF9BUlJBWV07Cit9ICpyZWZsb2dfZXhwaXJlX2NmZywgKipyZWZsb2dfZXhwaXJlX2NmZ190YWlsOworCitzdGF0aWMgc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnICpmaW5kX2NmZ19lbnQoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKmVudDsKKworCWlmICghcmVmbG9nX2V4cGlyZV9jZmdfdGFpbCkKKwkJcmVmbG9nX2V4cGlyZV9jZmdfdGFpbCA9ICZyZWZsb2dfZXhwaXJlX2NmZzsKKworCWZvciAoZW50ID0gcmVmbG9nX2V4cGlyZV9jZmc7IGVudDsgZW50ID0gZW50LT5uZXh0KQorCQlpZiAoIXN0cm5jbXAoZW50LT5wYXR0ZXJuLCBwYXR0ZXJuLCBsZW4pICYmCisJCSAgICBlbnQtPnBhdHRlcm5bbGVuXSA9PSAnXDAnKQorCQkJcmV0dXJuIGVudDsKKworCUZMRVhfQUxMT0NfTUVNKGVudCwgcGF0dGVybiwgcGF0dGVybiwgbGVuKTsKKwkqcmVmbG9nX2V4cGlyZV9jZmdfdGFpbCA9IGVudDsKKwlyZWZsb2dfZXhwaXJlX2NmZ190YWlsID0gJihlbnQtPm5leHQpOworCXJldHVybiBlbnQ7Cit9CisKKy8qIGV4cGlyeSB0aW1lciBzbG90ICovCisjZGVmaW5lIEVYUElSRV9UT1RBTCAgIDAxCisjZGVmaW5lIEVYUElSRV9VTlJFQUNIIDAyCisKK3N0YXRpYyBpbnQgcmVmbG9nX2V4cGlyZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqcGF0dGVybiwgKmtleTsKKwlpbnQgcGF0dGVybl9sZW47CisJdGltZXN0YW1wX3QgZXhwaXJlOworCWludCBzbG90OworCXN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyAqZW50OworCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAiZ2MiLCAmcGF0dGVybiwgJnBhdHRlcm5fbGVuLCAma2V5KSA8IDApCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCisJaWYgKCFzdHJjbXAoa2V5LCAicmVmbG9nZXhwaXJlIikpIHsKKwkJc2xvdCA9IEVYUElSRV9UT1RBTDsKKwkJaWYgKGdpdF9jb25maWdfZXhwaXJ5X2RhdGUoJmV4cGlyZSwgdmFyLCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInJlZmxvZ2V4cGlyZXVucmVhY2hhYmxlIikpIHsKKwkJc2xvdCA9IEVYUElSRV9VTlJFQUNIOworCQlpZiAoZ2l0X2NvbmZpZ19leHBpcnlfZGF0ZSgmZXhwaXJlLCB2YXIsIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisKKwlpZiAoIXBhdHRlcm4pIHsKKwkJc3dpdGNoIChzbG90KSB7CisJCWNhc2UgRVhQSVJFX1RPVEFMOgorCQkJZGVmYXVsdF9yZWZsb2dfZXhwaXJlID0gZXhwaXJlOworCQkJYnJlYWs7CisJCWNhc2UgRVhQSVJFX1VOUkVBQ0g6CisJCQlkZWZhdWx0X3JlZmxvZ19leHBpcmVfdW5yZWFjaGFibGUgPSBleHBpcmU7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwllbnQgPSBmaW5kX2NmZ19lbnQocGF0dGVybiwgcGF0dGVybl9sZW4pOworCWlmICghZW50KQorCQlyZXR1cm4gLTE7CisJc3dpdGNoIChzbG90KSB7CisJY2FzZSBFWFBJUkVfVE9UQUw6CisJCWVudC0+ZXhwaXJlX3RvdGFsID0gZXhwaXJlOworCQlicmVhazsKKwljYXNlIEVYUElSRV9VTlJFQUNIOgorCQllbnQtPmV4cGlyZV91bnJlYWNoYWJsZSA9IGV4cGlyZTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfcmVmbG9nX2V4cGlyeV9wYXJhbShzdHJ1Y3QgY21kX3JlZmxvZ19leHBpcmVfY2IgKmNiLCBpbnQgc2xvdCwgY29uc3QgY2hhciAqcmVmKQoreworCXN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyAqZW50OworCisJaWYgKHNsb3QgPT0gKEVYUElSRV9UT1RBTHxFWFBJUkVfVU5SRUFDSCkpCisJCXJldHVybjsgLyogYm90aCBnaXZlbiBleHBsaWNpdGx5IC0tIG5vdGhpbmcgdG8gdHdlYWsgKi8KKworCWZvciAoZW50ID0gcmVmbG9nX2V4cGlyZV9jZmc7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCWlmICghd2lsZG1hdGNoKGVudC0+cGF0dGVybiwgcmVmLCAwKSkgeworCQkJaWYgKCEoc2xvdCAmIEVYUElSRV9UT1RBTCkpCisJCQkJY2ItPmV4cGlyZV90b3RhbCA9IGVudC0+ZXhwaXJlX3RvdGFsOworCQkJaWYgKCEoc2xvdCAmIEVYUElSRV9VTlJFQUNIKSkKKwkJCQljYi0+ZXhwaXJlX3VucmVhY2hhYmxlID0gZW50LT5leHBpcmVfdW5yZWFjaGFibGU7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHVuY29uZmlndXJlZCwgbWFrZSBzdGFzaCBuZXZlciBleHBpcmUKKwkgKi8KKwlpZiAoIXN0cmNtcChyZWYsICJyZWZzL3N0YXNoIikpIHsKKwkJaWYgKCEoc2xvdCAmIEVYUElSRV9UT1RBTCkpCisJCQljYi0+ZXhwaXJlX3RvdGFsID0gMDsKKwkJaWYgKCEoc2xvdCAmIEVYUElSRV9VTlJFQUNIKSkKKwkJCWNiLT5leHBpcmVfdW5yZWFjaGFibGUgPSAwOworCQlyZXR1cm47CisJfQorCisJLyogTm90aGluZyBtYXRjaGVkIC0tIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAqLworCWlmICghKHNsb3QgJiBFWFBJUkVfVE9UQUwpKQorCQljYi0+ZXhwaXJlX3RvdGFsID0gZGVmYXVsdF9yZWZsb2dfZXhwaXJlOworCWlmICghKHNsb3QgJiBFWFBJUkVfVU5SRUFDSCkpCisJCWNiLT5leHBpcmVfdW5yZWFjaGFibGUgPSBkZWZhdWx0X3JlZmxvZ19leHBpcmVfdW5yZWFjaGFibGU7Cit9CisKK3N0YXRpYyBpbnQgY21kX3JlZmxvZ19leHBpcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiIGNiOworCXRpbWVzdGFtcF90IG5vdyA9IHRpbWUoTlVMTCk7CisJaW50IGksIHN0YXR1cywgZG9fYWxsLCBhbGxfd29ya3RyZWVzID0gMTsKKwlpbnQgZXhwbGljaXRfZXhwaXJ5ID0gMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCisJZGVmYXVsdF9yZWZsb2dfZXhwaXJlX3VucmVhY2hhYmxlID0gbm93IC0gMzAgKiAyNCAqIDM2MDA7CisJZGVmYXVsdF9yZWZsb2dfZXhwaXJlID0gbm93IC0gOTAgKiAyNCAqIDM2MDA7CisJZ2l0X2NvbmZpZyhyZWZsb2dfZXhwaXJlX2NvbmZpZywgTlVMTCk7CisKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCWRvX2FsbCA9IHN0YXR1cyA9IDA7CisJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisKKwljYi5jbWQuZXhwaXJlX3RvdGFsID0gZGVmYXVsdF9yZWZsb2dfZXhwaXJlOworCWNiLmNtZC5leHBpcmVfdW5yZWFjaGFibGUgPSBkZWZhdWx0X3JlZmxvZ19leHBpcmVfdW5yZWFjaGFibGU7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kcnktcnVuIikgfHwgIXN0cmNtcChhcmcsICItbiIpKQorCQkJZmxhZ3MgfD0gRVhQSVJFX1JFRkxPR1NfRFJZX1JVTjsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1leHBpcmU9IiwgJmFyZykpIHsKKwkJCWlmIChwYXJzZV9leHBpcnlfZGF0ZShhcmcsICZjYi5jbWQuZXhwaXJlX3RvdGFsKSkKKwkJCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiKSwgYXJnKTsKKwkJCWV4cGxpY2l0X2V4cGlyeSB8PSBFWFBJUkVfVE9UQUw7CisJCX0KKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1leHBpcmUtdW5yZWFjaGFibGU9IiwgJmFyZykpIHsKKwkJCWlmIChwYXJzZV9leHBpcnlfZGF0ZShhcmcsICZjYi5jbWQuZXhwaXJlX3VucmVhY2hhYmxlKSkKKwkJCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiKSwgYXJnKTsKKwkJCWV4cGxpY2l0X2V4cGlyeSB8PSBFWFBJUkVfVU5SRUFDSDsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3RhbGUtZml4IikpCisJCQljYi5jbWQuc3RhbGVmaXggPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmV3cml0ZSIpKQorCQkJZmxhZ3MgfD0gRVhQSVJFX1JFRkxPR1NfUkVXUklURTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXVwZGF0ZXJlZiIpKQorCQkJZmxhZ3MgfD0gRVhQSVJFX1JFRkxPR1NfVVBEQVRFX1JFRjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKQorCQkJZG9fYWxsID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNpbmdsZS13b3JrdHJlZSIpKQorCQkJYWxsX3dvcmt0cmVlcyA9IDA7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpCisJCQlmbGFncyB8PSBFWFBJUkVfUkVGTE9HU19WRVJCT1NFOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKGFyZ1swXSA9PSAnLScpCisJCQl1c2FnZShfKHJlZmxvZ19leHBpcmVfdXNhZ2UpKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBXZSBjYW4gdHJ1c3QgdGhlIGNvbW1pdHMgYW5kIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gcmVmcworCSAqIGV2ZW4gaW4gb2xkZXIgcmVwb3NpdG9yeS4gIFdlIGNhbm5vdCB0cnVzdCB3aGF0J3MgcmVhY2hhYmxlCisJICogZnJvbSByZWZsb2cgaWYgdGhlIHJlcG9zaXRvcnkgd2FzIHBydW5lZCB3aXRoIG9sZGVyIGdpdC4KKwkgKi8KKwlpZiAoY2IuY21kLnN0YWxlZml4KSB7CisJCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZjYi5jbWQucmV2cywgcHJlZml4KTsKKwkJaWYgKGZsYWdzICYgRVhQSVJFX1JFRkxPR1NfVkVSQk9TRSkKKwkJCXByaW50ZihfKCJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIikpOworCQltYXJrX3JlYWNoYWJsZV9vYmplY3RzKCZjYi5jbWQucmV2cywgMCwgMCwgTlVMTCk7CisJCWlmIChmbGFncyAmIEVYUElSRV9SRUZMT0dTX1ZFUkJPU0UpCisJCQlwdXRjaGFyKCdcbicpOworCX0KKworCWlmIChkb19hbGwpIHsKKwkJc3RydWN0IGNvbGxlY3RfcmVmbG9nX2NiIGNvbGxlY3RlZDsKKwkJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzLCAqKnA7CisJCWludCBpOworCisJCW1lbXNldCgmY29sbGVjdGVkLCAwLCBzaXplb2YoY29sbGVjdGVkKSk7CisJCXdvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJCWZvciAocCA9IHdvcmt0cmVlczsgKnA7IHArKykgeworCQkJaWYgKCFhbGxfd29ya3RyZWVzICYmICEoKnApLT5pc19jdXJyZW50KQorCQkJCWNvbnRpbnVlOworCQkJY29sbGVjdGVkLnd0ID0gKnA7CisJCQlyZWZzX2Zvcl9lYWNoX3JlZmxvZyhnZXRfd29ya3RyZWVfcmVmX3N0b3JlKCpwKSwKKwkJCQkJICAgICBjb2xsZWN0X3JlZmxvZywgJmNvbGxlY3RlZCk7CisJCX0KKwkJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKKwkJZm9yIChpID0gMDsgaSA8IGNvbGxlY3RlZC5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY29sbGVjdGVkX3JlZmxvZyAqZSA9IGNvbGxlY3RlZC5lW2ldOworCQkJc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oJmNiLmNtZCwgZXhwbGljaXRfZXhwaXJ5LCBlLT5yZWZsb2cpOworCQkJc3RhdHVzIHw9IHJlZmxvZ19leHBpcmUoZS0+cmVmbG9nLCAmZS0+b2lkLCBmbGFncywKKwkJCQkJCXJlZmxvZ19leHBpcnlfcHJlcGFyZSwKKwkJCQkJCXNob3VsZF9leHBpcmVfcmVmbG9nX2VudCwKKwkJCQkJCXJlZmxvZ19leHBpcnlfY2xlYW51cCwKKwkJCQkJCSZjYik7CisJCQlmcmVlKGUpOworCQl9CisJCWZyZWUoY29sbGVjdGVkLmUpOworCX0KKworCWZvciAoOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNoYXIgKnJlZjsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWlmICghZHdpbV9sb2coYXJndltpXSwgc3RybGVuKGFyZ3ZbaV0pLCAmb2lkLCAmcmVmKSkgeworCQkJc3RhdHVzIHw9IGVycm9yKF8oIiVzIHBvaW50cyBub3doZXJlISIpLCBhcmd2W2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNldF9yZWZsb2dfZXhwaXJ5X3BhcmFtKCZjYi5jbWQsIGV4cGxpY2l0X2V4cGlyeSwgcmVmKTsKKwkJc3RhdHVzIHw9IHJlZmxvZ19leHBpcmUocmVmLCAmb2lkLCBmbGFncywKKwkJCQkJcmVmbG9nX2V4cGlyeV9wcmVwYXJlLAorCQkJCQlzaG91bGRfZXhwaXJlX3JlZmxvZ19lbnQsCisJCQkJCXJlZmxvZ19leHBpcnlfY2xlYW51cCwKKwkJCQkJJmNiKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBjb3VudF9yZWZsb2dfZW50KHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5vaWQsCisJCWNvbnN0IGNoYXIgKmVtYWlsLCB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGludCB0eiwKKwkJY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgKmNiID0gY2JfZGF0YTsKKwlpZiAoIWNiLT5jbWQuZXhwaXJlX3RvdGFsIHx8IHRpbWVzdGFtcCA8IGNiLT5jbWQuZXhwaXJlX3RvdGFsKQorCQljYi0+Y21kLnJlY25vKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kX3JlZmxvZ19kZWxldGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiIGNiOworCWludCBpLCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisKKwltZW1zZXQoJmNiLCAwLCBzaXplb2YoY2IpKTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kcnktcnVuIikgfHwgIXN0cmNtcChhcmcsICItbiIpKQorCQkJZmxhZ3MgfD0gRVhQSVJFX1JFRkxPR1NfRFJZX1JVTjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJld3JpdGUiKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX1JFV1JJVEU7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS11cGRhdGVyZWYiKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX1VQREFURV9SRUY7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpCisJCQlmbGFncyB8PSBFWFBJUkVfUkVGTE9HU19WRVJCT1NFOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKGFyZ1swXSA9PSAnLScpCisJCQl1c2FnZShfKHJlZmxvZ19kZWxldGVfdXNhZ2UpKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFyZ2MgLSBpIDwgMSkKKwkJcmV0dXJuIGVycm9yKF8oIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIikpOworCisJZm9yICggOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnNwZWMgPSBzdHJzdHIoYXJndltpXSwgIkB7Iik7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljaGFyICplcCwgKnJlZjsKKwkJaW50IHJlY25vOworCisJCWlmICghc3BlYykgeworCQkJc3RhdHVzIHw9IGVycm9yKF8oIm5vdCBhIHJlZmxvZzogJXMiKSwgYXJndltpXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZHdpbV9sb2coYXJndltpXSwgc3BlYyAtIGFyZ3ZbaV0sICZvaWQsICZyZWYpKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoXygibm8gcmVmbG9nIGZvciAnJXMnIiksIGFyZ3ZbaV0pOworCQkJY29udGludWU7CisJCX0KKworCQlyZWNubyA9IHN0cnRvdWwoc3BlYyArIDIsICZlcCwgMTApOworCQlpZiAoKmVwID09ICd9JykgeworCQkJY2IuY21kLnJlY25vID0gLXJlY25vOworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWYsIGNvdW50X3JlZmxvZ19lbnQsICZjYik7CisJCX0gZWxzZSB7CisJCQljYi5jbWQuZXhwaXJlX3RvdGFsID0gYXBwcm94aWRhdGUoc3BlYyArIDIpOworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWYsIGNvdW50X3JlZmxvZ19lbnQsICZjYik7CisJCQljYi5jbWQuZXhwaXJlX3RvdGFsID0gMDsKKwkJfQorCisJCXN0YXR1cyB8PSByZWZsb2dfZXhwaXJlKHJlZiwgJm9pZCwgZmxhZ3MsCisJCQkJCXJlZmxvZ19leHBpcnlfcHJlcGFyZSwKKwkJCQkJc2hvdWxkX2V4cGlyZV9yZWZsb2dfZW50LAorCQkJCQlyZWZsb2dfZXhwaXJ5X2NsZWFudXAsCisJCQkJCSZjYik7CisJCWZyZWUocmVmKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBjbWRfcmVmbG9nX2V4aXN0cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgc3RhcnQgPSAwOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChhcmdbMF0gPT0gJy0nKQorCQkJdXNhZ2UoXyhyZWZsb2dfZXhpc3RzX3VzYWdlKSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCXN0YXJ0ID0gaTsKKworCWlmIChhcmdjIC0gc3RhcnQgIT0gMSkKKwkJdXNhZ2UoXyhyZWZsb2dfZXhpc3RzX3VzYWdlKSk7CisKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoYXJndltzdGFydF0sIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpKQorCQlkaWUoXygiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIpLCBhcmd2W3N0YXJ0XSk7CisJcmV0dXJuICFyZWZsb2dfZXhpc3RzKGFyZ3Zbc3RhcnRdKTsKK30KKworLyoKKyAqIG1haW4gInJlZmxvZyIKKyAqLworCitzdGF0aWMgY29uc3QgY2hhciByZWZsb2dfdXNhZ2VbXSA9CitOXygiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIpOworCitpbnQgY21kX3JlZmxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoXyhyZWZsb2dfdXNhZ2UpKTsKKworCS8qIFdpdGggbm8gY29tbWFuZCwgd2UgZGVmYXVsdCB0byBzaG93aW5nIGl0LiAqLworCWlmIChhcmdjIDwgMiB8fCAqYXJndlsxXSA9PSAnLScpCisJCXJldHVybiBjbWRfbG9nX3JlZmxvZyhhcmdjLCBhcmd2LCBwcmVmaXgpOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInNob3ciKSkKKwkJcmV0dXJuIGNtZF9sb2dfcmVmbG9nKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJleHBpcmUiKSkKKwkJcmV0dXJuIGNtZF9yZWZsb2dfZXhwaXJlKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJkZWxldGUiKSkKKwkJcmV0dXJuIGNtZF9yZWZsb2dfZGVsZXRlKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJleGlzdHMiKSkKKwkJcmV0dXJuIGNtZF9yZWZsb2dfZXhpc3RzKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKKworCXJldHVybiBjbWRfbG9nX3JlZmxvZyhhcmdjLCBhcmd2LCBwcmVmaXgpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZW1vdGUtZXh0LmMgYi9idWlsdGluL3JlbW90ZS1leHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkxMjdhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZW1vdGUtZXh0LmMKQEAgLTAsMCArMSwyMDIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciB1c2FnZV9tc2dbXSA9CisJImdpdCByZW1vdGUtZXh0IDxyZW1vdGU+IDx1cmw+IjsKKworLyoKKyAqIFVSTCBzeW50YXg6CisgKgknY29tbWFuZCBbYXJnMSBbYXJnMiBbLi4uXV1dJwlJbnZva2UgY29tbWFuZCB3aXRoIGdpdmVuIGFyZ3VtZW50cy4KKyAqCVNwZWNpYWwgY2hhcmFjdGVyczoKKyAqCSclICc6IExpdGVyYWwgc3BhY2UgaW4gYXJndW1lbnQuCisgKgknJSUnOiBMaXRlcmFsIHBlcmNlbnQgc2lnbi4KKyAqCSclUyc6IE5hbWUgb2Ygc2VydmljZSAoZ2l0LXVwbG9hZC1wYWNrL2dpdC11cGxvYWQtYXJjaGl2ZS8KKyAqCQlnaXQtcmVjZWl2ZS1wYWNrLgorICoJJyVzJzogU2FtZSBhcyBccywgYnV0IHdpdGggcG9zc2libGUgZ2l0LSBwcmVmaXggc3RyaXBwZWQuCisgKgknJUcnOiBPbmx5IGFsbG93ZWQgYXMgZmlyc3QgJ2NoYXJhY3Rlcicgb2YgYXJndW1lbnQuIERvIG5vdCBwYXNzIHRoaXMKKyAqCQlBcmd1bWVudCB0byBjb21tYW5kLCBpbnN0ZWFkIHNlbmQgdGhpcyBhcyBuYW1lIG9mIHJlcG9zaXRvcnkKKyAqCQlpbiBpbi1saW5lIGdpdDovLy1zdHlsZSByZXF1ZXN0IChhbHNvIGFjdGl2YXRlcyBzZW5kaW5nIHRoaXMKKyAqCQlzdHlsZSBvZiByZXF1ZXN0KS4KKyAqCSclVic6IE9ubHkgYWxsb3dlZCBhcyBmaXJzdCAnY2hhcmFjdGVyJyBvZiBhcmd1bWVudC4gVXNlZCBpbgorICoJCWNvbmp1bmN0aW9uIHdpdGggJyVHJzogRG8gbm90IHBhc3MgdGhpcyBhcmd1bWVudCB0byBjb21tYW5kLAorICoJCWluc3RlYWQgc2VuZCB0aGlzIGFzIHZob3N0IGluIGdpdDovLy1zdHlsZSByZXF1ZXN0IChub3RlOiBkb2VzCisgKgkJbm90IGFjdGl2YXRlIHNlbmRpbmcgZ2l0Oi8vIHN0eWxlIHJlcXVlc3QpLgorICovCisKK3N0YXRpYyBjaGFyICpnaXRfcmVxOworc3RhdGljIGNoYXIgKmdpdF9yZXFfdmhvc3Q7CisKK3N0YXRpYyBjaGFyICpzdHJpcF9lc2NhcGVzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc2VydmljZSwKKwljb25zdCBjaGFyICoqbmV4dCkKK3sKKwlzaXplX3QgcnBvcyA9IDA7CisJaW50IGVzY2FwZSA9IDA7CisJY2hhciBzcGVjaWFsID0gMDsKKwljb25zdCBjaGFyICpzZXJ2aWNlX25vcHJlZml4ID0gc2VydmljZTsKKwlzdHJ1Y3Qgc3RyYnVmIHJldCA9IFNUUkJVRl9JTklUOworCisJc2tpcF9wcmVmaXgoc2VydmljZV9ub3ByZWZpeCwgImdpdC0iLCAmc2VydmljZV9ub3ByZWZpeCk7CisKKwkvKiBQYXNzIHRoZSBzZXJ2aWNlIHRvIGNvbW1hbmQuICovCisJc2V0ZW52KCJHSVRfRVhUX1NFUlZJQ0UiLCBzZXJ2aWNlLCAxKTsKKwlzZXRlbnYoIkdJVF9FWFRfU0VSVklDRV9OT1BSRUZJWCIsIHNlcnZpY2Vfbm9wcmVmaXgsIDEpOworCisJLyogU2NhbiB0aGUgbGVuZ3RoIG9mIGFyZ3VtZW50LiAqLworCXdoaWxlIChzdHJbcnBvc10gJiYgKGVzY2FwZSB8fCBzdHJbcnBvc10gIT0gJyAnKSkgeworCQlpZiAoZXNjYXBlKSB7CisJCQlzd2l0Y2ggKHN0cltycG9zXSkgeworCQkJY2FzZSAnICc6CisJCQljYXNlICclJzoKKwkJCWNhc2UgJ3MnOgorCQkJY2FzZSAnUyc6CisJCQkJYnJlYWs7CisJCQljYXNlICdHJzoKKwkJCWNhc2UgJ1YnOgorCQkJCXNwZWNpYWwgPSBzdHJbcnBvc107CisJCQkJaWYgKHJwb3MgPT0gMSkKKwkJCQkJYnJlYWs7CisJCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJZGllKCJCYWQgcmVtb3RlLWV4dCBwbGFjZWhvbGRlciAnJSUlYycuIiwKKwkJCQkJc3RyW3Jwb3NdKTsKKwkJCX0KKwkJCWVzY2FwZSA9IDA7CisJCX0gZWxzZQorCQkJZXNjYXBlID0gKHN0cltycG9zXSA9PSAnJScpOworCQlycG9zKys7CisJfQorCWlmIChlc2NhcGUgJiYgIXN0cltycG9zXSkKKwkJZGllKCJyZW1vdGUtZXh0IGNvbW1hbmQgaGFzIGluY29tcGxldGUgcGxhY2Vob2xkZXIiKTsKKwkqbmV4dCA9IHN0ciArIHJwb3M7CisJaWYgKCoqbmV4dCA9PSAnICcpCisJCSsrKm5leHQ7CS8qIFNraXAgb3ZlciBzcGFjZSAqLworCisJLyoKKwkgKiBEbyB0aGUgYWN0dWFsIHBsYWNlaG9sZGVyIHN1YnN0aXR1dGlvbi4gVGhlIHN0cmluZyB3aWxsIGJlIHNob3J0CisJICogZW5vdWdoIG5vdCB0byBvdmVyZmxvdyBpbnRlZ2Vycy4KKwkgKi8KKwlycG9zID0gc3BlY2lhbCA/IDIgOiAwOwkJLyogU2tpcCBmaXJzdCAyIGJ5dGVzIGluIHNwZWNpYWxzLiAqLworCWVzY2FwZSA9IDA7CisJd2hpbGUgKHN0cltycG9zXSAmJiAoZXNjYXBlIHx8IHN0cltycG9zXSAhPSAnICcpKSB7CisJCWlmIChlc2NhcGUpIHsKKwkJCXN3aXRjaCAoc3RyW3Jwb3NdKSB7CisJCQljYXNlICcgJzoKKwkJCWNhc2UgJyUnOgorCQkJCXN0cmJ1Zl9hZGRjaCgmcmV0LCBzdHJbcnBvc10pOworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJc3RyYnVmX2FkZHN0cigmcmV0LCBzZXJ2aWNlX25vcHJlZml4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1MnOgorCQkJCXN0cmJ1Zl9hZGRzdHIoJnJldCwgc2VydmljZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllc2NhcGUgPSAwOworCQl9IGVsc2UKKwkJCXN3aXRjaCAoc3RyW3Jwb3NdKSB7CisJCQljYXNlICclJzoKKwkJCQllc2NhcGUgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdHJidWZfYWRkY2goJnJldCwgc3RyW3Jwb3NdKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJcnBvcysrOworCX0KKwlzd2l0Y2ggKHNwZWNpYWwpIHsKKwljYXNlICdHJzoKKwkJZ2l0X3JlcSA9IHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7CisJCXJldHVybiBOVUxMOworCWNhc2UgJ1YnOgorCQlnaXRfcmVxX3Zob3N0ID0gc3RyYnVmX2RldGFjaCgmcmV0LCBOVUxMKTsKKwkJcmV0dXJuIE5VTEw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hcmd2KHN0cnVjdCBhcmd2X2FycmF5ICpvdXQsIGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqc2VydmljZSkKK3sKKwl3aGlsZSAoKmFyZykgeworCQljaGFyICpleHBhbmRlZCA9IHN0cmlwX2VzY2FwZXMoYXJnLCBzZXJ2aWNlLCAmYXJnKTsKKwkJaWYgKGV4cGFuZGVkKQorCQkJYXJndl9hcnJheV9wdXNoKG91dCwgZXhwYW5kZWQpOworCQlmcmVlKGV4cGFuZGVkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfZ2l0X3JlcXVlc3QoaW50IHN0ZGluX2ZkLCBjb25zdCBjaGFyICpzZXJ2LCBjb25zdCBjaGFyICpyZXBvLAorCWNvbnN0IGNoYXIgKnZob3N0KQoreworCWlmICghdmhvc3QpCisJCXBhY2tldF93cml0ZV9mbXQoc3RkaW5fZmQsICIlcyAlcyVjIiwgc2VydiwgcmVwbywgMCk7CisJZWxzZQorCQlwYWNrZXRfd3JpdGVfZm10KHN0ZGluX2ZkLCAiJXMgJXMlY2hvc3Q9JXMlYyIsIHNlcnYsIHJlcG8sIDAsCisJCQkgICAgIHZob3N0LCAwKTsKK30KKworc3RhdGljIGludCBydW5fY2hpbGQoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpzZXJ2aWNlKQoreworCWludCByOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY2hpbGQuaW4gPSAtMTsKKwljaGlsZC5vdXQgPSAtMTsKKwljaGlsZC5lcnIgPSAwOworCXBhcnNlX2FyZ3YoJmNoaWxkLmFyZ3MsIGFyZywgc2VydmljZSk7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpIDwgMCkKKwkJZGllKCJDYW4ndCBydW4gc3BlY2lmaWVkIGNvbW1hbmQiKTsKKworCWlmIChnaXRfcmVxKQorCQlzZW5kX2dpdF9yZXF1ZXN0KGNoaWxkLmluLCBzZXJ2aWNlLCBnaXRfcmVxLCBnaXRfcmVxX3Zob3N0KTsKKworCXIgPSBiaWRpcmVjdGlvbmFsX3RyYW5zZmVyX2xvb3AoY2hpbGQub3V0LCBjaGlsZC5pbik7CisJaWYgKCFyKQorCQlyID0gZmluaXNoX2NvbW1hbmQoJmNoaWxkKTsKKwllbHNlCisJCWZpbmlzaF9jb21tYW5kKCZjaGlsZCk7CisJcmV0dXJuIHI7Cit9CisKKyNkZWZpbmUgTUFYQ09NTUFORCA0MDk2CisKK3N0YXRpYyBpbnQgY29tbWFuZF9sb29wKGNvbnN0IGNoYXIgKmNoaWxkKQoreworCWNoYXIgYnVmZmVyW01BWENPTU1BTkRdOworCisJd2hpbGUgKDEpIHsKKwkJc2l6ZV90IGk7CisJCWlmICghZmdldHMoYnVmZmVyLCBNQVhDT01NQU5EIC0gMSwgc3RkaW4pKSB7CisJCQlpZiAoZmVycm9yKHN0ZGluKSkKKwkJCQlkaWUoIkNvbW1hbmQgaW5wdXQgZXJyb3IiKTsKKwkJCWV4aXQoMCk7CisJCX0KKwkJLyogU3RyaXAgZW5kIG9mIGxpbmUgY2hhcmFjdGVycy4gKi8KKwkJaSA9IHN0cmxlbihidWZmZXIpOworCQl3aGlsZSAoaSA+IDAgJiYgaXNzcGFjZShidWZmZXJbaSAtIDFdKSkKKwkJCWJ1ZmZlclstLWldID0gMDsKKworCQlpZiAoIXN0cmNtcChidWZmZXIsICJjYXBhYmlsaXRpZXMiKSkgeworCQkJcHJpbnRmKCIqY29ubmVjdFxuXG4iKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZmZlciwgImNvbm5lY3QgIiwgOCkpIHsKKwkJCXByaW50ZigiXG4iKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJcmV0dXJuIHJ1bl9jaGlsZChjaGlsZCwgYnVmZmVyICsgOCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkJhZCBjb21tYW5kIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KK30KKworaW50IGNtZF9yZW1vdGVfZXh0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWlmIChhcmdjICE9IDMpCisJCXVzYWdlKHVzYWdlX21zZyk7CisKKwlyZXR1cm4gY29tbWFuZF9sb29wKGFyZ3ZbMl0pOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZW1vdGUtZmQuYyBiL2J1aWx0aW4vcmVtb3RlLWZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkZmUwNwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVtb3RlLWZkLmMKQEAgLTAsMCArMSw4MiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2VfbXNnW10gPQorCSJnaXQgcmVtb3RlLWZkIDxyZW1vdGU+IDx1cmw+IjsKKworLyoKKyAqIFVSTCBzeW50YXg6CisgKgknZmQ6Ojxpbm91dGZkPlsvPGFueXRoaW5nPl0nCQlSZWFkL3dyaXRlIHNvY2tldCBwYWlyCisgKgkJCQkJCTxpbm91dGZkPi4KKyAqCSdmZDo6PGluZmQ+LDxvdXRmZD5bLzxhbnl0aGluZz5dJwlSZWFkIHBpcGUgPGluZmQ+IGFuZCB3cml0ZQorICoJCQkJCQlwaXBlIDxvdXRmZD4uCisgKglbZm9vXSBpbmRpY2F0ZXMgJ2ZvbycgaXMgb3B0aW9uYWwuIDxhbnl0aGluZz4gaXMgYW55IHN0cmluZy4KKyAqCisgKiBUaGUgZGF0YSBvdXRwdXQgdG8gPG91dGZkPi88aW5vdXRmZD4gc2hvdWxkIGJlIHBhc3NlZCB1bm1vbGVzdGVkIHRvCisgKiBnaXQtcmVjZWl2ZS1wYWNrL2dpdC11cGxvYWQtcGFjay9naXQtdXBsb2FkLWFyY2hpdmUgYW5kIG91dHB1dCBvZgorICogZ2l0LXJlY2VpdmUtcGFjay9naXQtdXBsb2FkLXBhY2svZ2l0LXVwbG9hZC1hcmNoaXZlIHNob3VsZCBiZSBwYXNzZWQKKyAqIHVubW9sZXN0ZWQgdG8gPGluZmQ+Lzxpbm91dGZkPi4KKyAqCisgKi8KKworI2RlZmluZSBNQVhDT01NQU5EIDQwOTYKKworc3RhdGljIHZvaWQgY29tbWFuZF9sb29wKGludCBpbnB1dF9mZCwgaW50IG91dHB1dF9mZCkKK3sKKwljaGFyIGJ1ZmZlcltNQVhDT01NQU5EXTsKKworCXdoaWxlICgxKSB7CisJCXNpemVfdCBpOworCQlpZiAoIWZnZXRzKGJ1ZmZlciwgTUFYQ09NTUFORCAtIDEsIHN0ZGluKSkgeworCQkJaWYgKGZlcnJvcihzdGRpbikpCisJCQkJZGllKCJJbnB1dCBlcnJvciIpOworCQkJcmV0dXJuOworCQl9CisJCS8qIFN0cmlwIGVuZCBvZiBsaW5lIGNoYXJhY3RlcnMuICovCisJCWkgPSBzdHJsZW4oYnVmZmVyKTsKKwkJd2hpbGUgKGkgPiAwICYmIGlzc3BhY2UoYnVmZmVyW2kgLSAxXSkpCisJCQlidWZmZXJbLS1pXSA9IDA7CisKKwkJaWYgKCFzdHJjbXAoYnVmZmVyLCAiY2FwYWJpbGl0aWVzIikpIHsKKwkJCXByaW50ZigiKmNvbm5lY3RcblxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChidWZmZXIsICJjb25uZWN0ICIsIDgpKSB7CisJCQlwcmludGYoIlxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCWlmIChiaWRpcmVjdGlvbmFsX3RyYW5zZmVyX2xvb3AoaW5wdXRfZmQsCisJCQkJb3V0cHV0X2ZkKSkKKwkJCQlkaWUoIkNvcHlpbmcgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMgZmFpbGVkIik7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlkaWUoIkJhZCBjb21tYW5kOiAlcyIsIGJ1ZmZlcik7CisJCX0KKwl9Cit9CisKK2ludCBjbWRfcmVtb3RlX2ZkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpbnB1dF9mZCA9IC0xOworCWludCBvdXRwdXRfZmQgPSAtMTsKKwljaGFyICplbmQ7CisKKwlpZiAoYXJnYyAhPSAzKQorCQl1c2FnZSh1c2FnZV9tc2cpOworCisJaW5wdXRfZmQgPSAoaW50KXN0cnRvdWwoYXJndlsyXSwgJmVuZCwgMTApOworCisJaWYgKChlbmQgPT0gYXJndlsyXSkgfHwgKCplbmQgIT0gJywnICYmICplbmQgIT0gJy8nICYmICplbmQpKQorCQlkaWUoIkJhZCBVUkwgc3ludGF4Iik7CisKKwlpZiAoKmVuZCA9PSAnLycgfHwgISplbmQpIHsKKwkJb3V0cHV0X2ZkID0gaW5wdXRfZmQ7CisJfSBlbHNlIHsKKwkJY2hhciAqZW5kMjsKKwkJb3V0cHV0X2ZkID0gKGludClzdHJ0b3VsKGVuZCArIDEsICZlbmQyLCAxMCk7CisKKwkJaWYgKChlbmQyID09IGVuZCArIDEpIHx8ICgqZW5kMiAhPSAnLycgJiYgKmVuZDIpKQorCQkJZGllKCJCYWQgVVJMIHN5bnRheCIpOworCX0KKworCWNvbW1hbmRfbG9vcChpbnB1dF9mZCwgb3V0cHV0X2ZkKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVtb3RlLmMgYi9idWlsdGluL3JlbW90ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWQ0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlbW90ZS5jCkBAIC0wLDAgKzEsMTcyMiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlYmFzZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIpLAorCU5fKCJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS1taXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iKSwKKwlOXygiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iKSwKKwlOXygiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IiksCisJTl8oImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiKSwKKwlOXygiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iKSwKKwlOXygiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIpLAorCU5fKCJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iKSwKKwlOXygiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IiksCisJTl8oImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IiksCisJTl8oImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX2FkZF91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3JlbmFtZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfcm1fdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9zZXRoZWFkX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3NldGJyYW5jaGVzX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3Nob3dfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfcHJ1bmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3VwZGF0ZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfZ2V0dXJsX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfc2V0dXJsX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IiksCisJTl8oImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iKSwKKwlOVUxMCit9OworCisjZGVmaW5lIEdFVF9SRUZfU1RBVEVTICgxPDwwKQorI2RlZmluZSBHRVRfSEVBRF9OQU1FUyAoMTw8MSkKKyNkZWZpbmUgR0VUX1BVU0hfUkVGX1NUQVRFUyAoMTw8MikKKworc3RhdGljIGludCB2ZXJib3NlOworCitzdGF0aWMgaW50IGZldGNoX3JlbW90ZShjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgImZldGNoIiwgbmFtZSwgTlVMTCwgTlVMTCB9OworCWlmICh2ZXJib3NlKSB7CisJCWFyZ3ZbMV0gPSAiLXYiOworCQlhcmd2WzJdID0gbmFtZTsKKwl9CisJcHJpbnRmX2xuKF8oIlVwZGF0aW5nICVzIiksIG5hbWUpOworCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fR0lUX0NNRCkpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgZmV0Y2ggJXMiKSwgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK2VudW0geworCVRBR1NfVU5TRVQgPSAwLAorCVRBR1NfREVGQVVMVCA9IDEsCisJVEFHU19TRVQgPSAyCit9OworCisjZGVmaW5lIE1JUlJPUl9OT05FIDAKKyNkZWZpbmUgTUlSUk9SX0ZFVENIIDEKKyNkZWZpbmUgTUlSUk9SX1BVU0ggMgorI2RlZmluZSBNSVJST1JfQk9USCAoTUlSUk9SX0ZFVENIfE1JUlJPUl9QVVNIKQorCitzdGF0aWMgdm9pZCBhZGRfYnJhbmNoKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqYnJhbmNobmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnJlbW90ZW5hbWUsIGludCBtaXJyb3IsIHN0cnVjdCBzdHJidWYgKnRtcCkKK3sKKwlzdHJidWZfcmVzZXQodG1wKTsKKwlzdHJidWZfYWRkY2godG1wLCAnKycpOworCWlmIChtaXJyb3IpCisJCXN0cmJ1Zl9hZGRmKHRtcCwgInJlZnMvJXM6cmVmcy8lcyIsCisJCQkJYnJhbmNobmFtZSwgYnJhbmNobmFtZSk7CisJZWxzZQorCQlzdHJidWZfYWRkZih0bXAsICJyZWZzL2hlYWRzLyVzOnJlZnMvcmVtb3Rlcy8lcy8lcyIsCisJCQkJYnJhbmNobmFtZSwgcmVtb3RlbmFtZSwgYnJhbmNobmFtZSk7CisJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoa2V5LCB0bXAtPmJ1ZiwgIl4kIiwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIG1pcnJvcl9hZHZpY2VbXSA9CitOXygiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyAgICJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIik7CisKK3N0YXRpYyBpbnQgcGFyc2VfbWlycm9yX29wdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IG5vdCkKK3sKKwl1bnNpZ25lZCAqbWlycm9yID0gb3B0LT52YWx1ZTsKKwlpZiAobm90KQorCQkqbWlycm9yID0gTUlSUk9SX05PTkU7CisJZWxzZSBpZiAoIWFyZykgeworCQl3YXJuaW5nKCIlcyIsIF8obWlycm9yX2FkdmljZSkpOworCQkqbWlycm9yID0gTUlSUk9SX0JPVEg7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZmV0Y2giKSkKKwkJKm1pcnJvciA9IE1JUlJPUl9GRVRDSDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInB1c2giKSkKKwkJKm1pcnJvciA9IE1JUlJPUl9QVVNIOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKF8oInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIpLCBhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGZldGNoID0gMCwgZmV0Y2hfdGFncyA9IFRBR1NfREVGQVVMVDsKKwl1bnNpZ25lZCBtaXJyb3IgPSBNSVJST1JfTk9ORTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdHJhY2sgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNvbnN0IGNoYXIgKm1hc3RlciA9IE5VTEw7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIGJ1ZjIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpuYW1lLCAqdXJsOworCWludCBpOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdmJywgImZldGNoIiwgJmZldGNoLCBOXygiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgInRhZ3MiLCAmZmV0Y2hfdGFncywKKwkJCSAgICBOXygiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIpLAorCQkJICAgIFRBR1NfU0VUKSwKKwkJT1BUX1NFVF9JTlQoMCwgTlVMTCwgJmZldGNoX3RhZ3MsCisJCQkgICAgTl8oIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIpLCBUQUdTX1VOU0VUKSwKKwkJT1BUX1NUUklOR19MSVNUKCd0JywgInRyYWNrIiwgJnRyYWNrLCBOXygiYnJhbmNoIiksCisJCQkJTl8oImJyYW5jaChlcykgdG8gdHJhY2siKSksCisJCU9QVF9TVFJJTkcoJ20nLCAibWFzdGVyIiwgJm1hc3RlciwgTl8oImJyYW5jaCIpLCBOXygibWFzdGVyIGJyYW5jaCIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJtaXJyb3IiLCAmbWlycm9yLCAiKHB1c2h8ZmV0Y2gpIiwKKwkJCU5fKCJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIpLAorCQkJUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9DT01QX0FSRywgcGFyc2VfbWlycm9yX29wdCB9LAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfYWRkX3VzYWdlLAorCQkJICAgICAwKTsKKworCWlmIChhcmdjICE9IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9hZGRfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKG1pcnJvciAmJiBtYXN0ZXIpCisJCWRpZShfKCJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIikpOworCWlmIChtaXJyb3IgJiYgIShtaXJyb3IgJiBNSVJST1JfRkVUQ0gpICYmIHRyYWNrLm5yKQorCQlkaWUoXygic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIpKTsKKworCW5hbWUgPSBhcmd2WzBdOworCXVybCA9IGFyZ3ZbMV07CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KG5hbWUpOworCWlmIChyZW1vdGVfaXNfY29uZmlndXJlZChyZW1vdGUsIDEpKQorCQlkaWUoXygicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIpLCBuYW1lKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYyLCAicmVmcy9oZWFkcy90ZXN0OnJlZnMvcmVtb3Rlcy8lcy90ZXN0IiwgbmFtZSk7CisJaWYgKCF2YWxpZF9mZXRjaF9yZWZzcGVjKGJ1ZjIuYnVmKSkKKwkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiKSwgbmFtZSk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLnVybCIsIG5hbWUpOworCWdpdF9jb25maWdfc2V0KGJ1Zi5idWYsIHVybCk7CisKKwlpZiAoIW1pcnJvciB8fCBtaXJyb3IgJiBNSVJST1JfRkVUQ0gpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLmZldGNoIiwgbmFtZSk7CisJCWlmICh0cmFjay5uciA9PSAwKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZ0cmFjaywgIioiKTsKKwkJZm9yIChpID0gMDsgaSA8IHRyYWNrLm5yOyBpKyspIHsKKwkJCWFkZF9icmFuY2goYnVmLmJ1ZiwgdHJhY2suaXRlbXNbaV0uc3RyaW5nLAorCQkJCSAgIG5hbWUsIG1pcnJvciwgJmJ1ZjIpOworCQl9CisJfQorCisJaWYgKG1pcnJvciAmIE1JUlJPUl9QVVNIKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy5taXJyb3IiLCBuYW1lKTsKKwkJZ2l0X2NvbmZpZ19zZXQoYnVmLmJ1ZiwgInRydWUiKTsKKwl9CisKKwlpZiAoZmV0Y2hfdGFncyAhPSBUQUdTX0RFRkFVTFQpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLnRhZ29wdCIsIG5hbWUpOworCQlnaXRfY29uZmlnX3NldChidWYuYnVmLAorCQkJICAgICAgIGZldGNoX3RhZ3MgPT0gVEFHU19TRVQgPyAiLS10YWdzIiA6ICItLW5vLXRhZ3MiKTsKKwl9CisKKwlpZiAoZmV0Y2ggJiYgZmV0Y2hfcmVtb3RlKG5hbWUpKQorCQlyZXR1cm4gMTsKKworCWlmIChtYXN0ZXIpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9yZW1vdGVzLyVzL0hFQUQiLCBuYW1lKTsKKworCQlzdHJidWZfcmVzZXQoJmJ1ZjIpOworCQlzdHJidWZfYWRkZigmYnVmMiwgInJlZnMvcmVtb3Rlcy8lcy8lcyIsIG5hbWUsIG1hc3Rlcik7CisKKwkJaWYgKGNyZWF0ZV9zeW1yZWYoYnVmLmJ1ZiwgYnVmMi5idWYsICJyZW1vdGUgYWRkIikpCisJCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIiksIG1hc3Rlcik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZjIpOworCXN0cmluZ19saXN0X2NsZWFyKCZ0cmFjaywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGJyYW5jaF9pbmZvIHsKKwljaGFyICpyZW1vdGVfbmFtZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVyZ2U7CisJZW51bSByZWJhc2VfdHlwZSByZWJhc2U7CisJY2hhciAqcHVzaF9yZW1vdGVfbmFtZTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCitzdGF0aWMgY29uc3QgY2hhciAqYWJicmV2X3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc2tpcF9wcmVmaXgobmFtZSwgcHJlZml4LCAmbmFtZSk7CisJcmV0dXJuIG5hbWU7Cit9CisjZGVmaW5lIGFiYnJldl9icmFuY2gobmFtZSkgYWJicmV2X3JlZigobmFtZSksICJyZWZzL2hlYWRzLyIpCisKK3N0YXRpYyBpbnQgY29uZmlnX3JlYWRfYnJhbmNoZXMoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqb3JpZ19rZXkgPSBrZXk7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgYnJhbmNoX2luZm8gKmluZm87CisJZW51bSB7IFJFTU9URSwgTUVSR0UsIFJFQkFTRSwgUFVTSF9SRU1PVEUgfSB0eXBlOworCXNpemVfdCBrZXlfbGVuOworCisJaWYgKCFzdGFydHNfd2l0aChrZXksICJicmFuY2guIikpCisJCXJldHVybiAwOworCisJa2V5ICs9IHN0cmxlbigiYnJhbmNoLiIpOworCWlmIChzdHJpcF9zdWZmaXgoa2V5LCAiLnJlbW90ZSIsICZrZXlfbGVuKSkKKwkJdHlwZSA9IFJFTU9URTsKKwllbHNlIGlmIChzdHJpcF9zdWZmaXgoa2V5LCAiLm1lcmdlIiwgJmtleV9sZW4pKQorCQl0eXBlID0gTUVSR0U7CisJZWxzZSBpZiAoc3RyaXBfc3VmZml4KGtleSwgIi5yZWJhc2UiLCAma2V5X2xlbikpCisJCXR5cGUgPSBSRUJBU0U7CisJZWxzZSBpZiAoc3RyaXBfc3VmZml4KGtleSwgIi5wdXNocmVtb3RlIiwgJmtleV9sZW4pKQorCQl0eXBlID0gUFVTSF9SRU1PVEU7CisJZWxzZQorCQlyZXR1cm4gMDsKKwluYW1lID0geG1lbWR1cHooa2V5LCBrZXlfbGVuKTsKKworCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJmJyYW5jaF9saXN0LCBuYW1lKTsKKworCWlmICghaXRlbS0+dXRpbCkKKwkJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBicmFuY2hfaW5mbykpOworCWluZm8gPSBpdGVtLT51dGlsOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUkVNT1RFOgorCQlpZiAoaW5mby0+cmVtb3RlX25hbWUpCisJCQl3YXJuaW5nKF8oIm1vcmUgdGhhbiBvbmUgJXMiKSwgb3JpZ19rZXkpOworCQlpbmZvLT5yZW1vdGVfbmFtZSA9IHhzdHJkdXAodmFsdWUpOworCQlicmVhazsKKwljYXNlIE1FUkdFOiB7CisJCWNoYXIgKnNwYWNlID0gc3RyY2hyKHZhbHVlLCAnICcpOworCQl2YWx1ZSA9IGFiYnJldl9icmFuY2godmFsdWUpOworCQl3aGlsZSAoc3BhY2UpIHsKKwkJCWNoYXIgKm1lcmdlOworCQkJbWVyZ2UgPSB4c3RybmR1cCh2YWx1ZSwgc3BhY2UgLSB2YWx1ZSk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmluZm8tPm1lcmdlLCBtZXJnZSk7CisJCQl2YWx1ZSA9IGFiYnJldl9icmFuY2goc3BhY2UgKyAxKTsKKwkJCXNwYWNlID0gc3RyY2hyKHZhbHVlLCAnICcpOworCQl9CisJCXN0cmluZ19saXN0X2FwcGVuZCgmaW5mby0+bWVyZ2UsIHhzdHJkdXAodmFsdWUpKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgUkVCQVNFOgorCQkvKgorCQkgKiBDb25zaWRlciBpbnZhbGlkIHZhbHVlcyBhcyBmYWxzZSBhbmQgY2hlY2sgdGhlCisJCSAqIHRydXRoIHZhbHVlIHdpdGggPj0gUkVCQVNFX1RSVUUuCisJCSAqLworCQlpbmZvLT5yZWJhc2UgPSByZWJhc2VfcGFyc2VfdmFsdWUodmFsdWUpOworCQlicmVhazsKKwljYXNlIFBVU0hfUkVNT1RFOgorCQlpZiAoaW5mby0+cHVzaF9yZW1vdGVfbmFtZSkKKwkJCXdhcm5pbmcoXygibW9yZSB0aGFuIG9uZSAlcyIpLCBvcmlnX2tleSk7CisJCWluZm8tPnB1c2hfcmVtb3RlX25hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmV4cGVjdGVkIHR5cGU9JWQiLCB0eXBlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVhZF9icmFuY2hlcyh2b2lkKQoreworCWlmIChicmFuY2hfbGlzdC5ucikKKwkJcmV0dXJuOworCWdpdF9jb25maWcoY29uZmlnX3JlYWRfYnJhbmNoZXMsIE5VTEwpOworfQorCitzdHJ1Y3QgcmVmX3N0YXRlcyB7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCBzdHJpbmdfbGlzdCBuZXdfcmVmcywgc3RhbGUsIHRyYWNrZWQsIGhlYWRzLCBwdXNoOworCWludCBxdWVyaWVkOworfTsKKworc3RhdGljIGludCBnZXRfcmVmX3N0YXRlcyhjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgcmVmICpmZXRjaF9tYXAgPSBOVUxMLCAqKnRhaWwgPSAmZmV0Y2hfbWFwOworCXN0cnVjdCByZWYgKnJlZiwgKnN0YWxlX3JlZnM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLT5yZW1vdGUtPmZldGNoLm5yOyBpKyspCisJCWlmIChnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmc3RhdGVzLT5yZW1vdGUtPmZldGNoLml0ZW1zW2ldLCAmdGFpbCwgMSkpCisJCQlkaWUoXygiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiKSwKKwkJCQlzdGF0ZXMtPnJlbW90ZS0+ZmV0Y2gucmF3W2ldKTsKKworCXN0YXRlcy0+bmV3X3JlZnMuc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0YXRlcy0+dHJhY2tlZC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJc3RhdGVzLT5zdGFsZS5zdHJkdXBfc3RyaW5ncyA9IDE7CisJZm9yIChyZWYgPSBmZXRjaF9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghcmVmLT5wZWVyX3JlZiB8fCAhcmVmX2V4aXN0cyhyZWYtPnBlZXJfcmVmLT5uYW1lKSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5uZXdfcmVmcywgYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnRyYWNrZWQsIGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSk7CisJfQorCXN0YWxlX3JlZnMgPSBnZXRfc3RhbGVfaGVhZHMoJnN0YXRlcy0+cmVtb3RlLT5mZXRjaCwgZmV0Y2hfbWFwKTsKKwlmb3IgKHJlZiA9IHN0YWxlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5zdGFsZSwgYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpKTsKKwkJaXRlbS0+dXRpbCA9IHhzdHJkdXAocmVmLT5uYW1lKTsKKwl9CisJZnJlZV9yZWZzKHN0YWxlX3JlZnMpOworCWZyZWVfcmVmcyhmZXRjaF9tYXApOworCisJc3RyaW5nX2xpc3Rfc29ydCgmc3RhdGVzLT5uZXdfcmVmcyk7CisJc3RyaW5nX2xpc3Rfc29ydCgmc3RhdGVzLT50cmFja2VkKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZzdGF0ZXMtPnN0YWxlKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcHVzaF9pbmZvIHsKKwljaGFyICpkZXN0OworCWludCBmb3JjZWQ7CisJZW51bSB7CisJCVBVU0hfU1RBVFVTX0NSRUFURSA9IDAsCisJCVBVU0hfU1RBVFVTX0RFTEVURSwKKwkJUFVTSF9TVEFUVVNfVVBUT0RBVEUsCisJCVBVU0hfU1RBVFVTX0ZBU1RGT1JXQVJELAorCQlQVVNIX1NUQVRVU19PVVRPRkRBVEUsCisJCVBVU0hfU1RBVFVTX05PVFFVRVJJRUQKKwl9IHN0YXR1czsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3B1c2hfcmVmX3N0YXRlcyhjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzKQoreworCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHN0YXRlcy0+cmVtb3RlOworCXN0cnVjdCByZWYgKnJlZiwgKmxvY2FsX3JlZnMsICpwdXNoX21hcDsKKwlpZiAocmVtb3RlLT5taXJyb3IpCisJCXJldHVybiAwOworCisJbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOworCXB1c2hfbWFwID0gY29weV9yZWZfbGlzdChyZW1vdGVfcmVmcyk7CisKKwltYXRjaF9wdXNoX3JlZnMobG9jYWxfcmVmcywgJnB1c2hfbWFwLCAmcmVtb3RlLT5wdXNoLCBNQVRDSF9SRUZTX05PTkUpOworCisJc3RhdGVzLT5wdXNoLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlmb3IgKHJlZiA9IHB1c2hfbWFwOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RydWN0IHB1c2hfaW5mbyAqaW5mbzsKKworCQlpZiAoIXJlZi0+cGVlcl9yZWYpCisJCQljb250aW51ZTsKKwkJb2lkY3B5KCZyZWYtPm5ld19vaWQsICZyZWYtPnBlZXJfcmVmLT5uZXdfb2lkKTsKKworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnB1c2gsCisJCQkJCSAgYWJicmV2X2JyYW5jaChyZWYtPnBlZXJfcmVmLT5uYW1lKSk7CisJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcHVzaF9pbmZvKSk7CisJCWluZm8gPSBpdGVtLT51dGlsOworCQlpbmZvLT5mb3JjZWQgPSByZWYtPmZvcmNlOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChhYmJyZXZfYnJhbmNoKHJlZi0+bmFtZSkpOworCisJCWlmIChpc19udWxsX29pZCgmcmVmLT5uZXdfb2lkKSkgeworCQkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfREVMRVRFOworCQl9IGVsc2UgaWYgKG9pZGVxKCZyZWYtPm9sZF9vaWQsICZyZWYtPm5ld19vaWQpKQorCQkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfVVBUT0RBVEU7CisJCWVsc2UgaWYgKGlzX251bGxfb2lkKCZyZWYtPm9sZF9vaWQpKQorCQkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfQ1JFQVRFOworCQllbHNlIGlmIChoYXNfb2JqZWN0X2ZpbGUoJnJlZi0+b2xkX29pZCkgJiYKKwkJCSByZWZfbmV3ZXIoJnJlZi0+bmV3X29pZCwgJnJlZi0+b2xkX29pZCkpCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19GQVNURk9SV0FSRDsKKwkJZWxzZQorCQkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfT1VUT0ZEQVRFOworCX0KKwlmcmVlX3JlZnMobG9jYWxfcmVmcyk7CisJZnJlZV9yZWZzKHB1c2hfbWFwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcHVzaF9yZWZfc3RhdGVzX25vcXVlcnkoc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSBzdGF0ZXMtPnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvOworCisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlyZXR1cm4gMDsKKworCXN0YXRlcy0+cHVzaC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJaWYgKCFyZW1vdGUtPnB1c2gubnIpIHsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5wdXNoLCBfKCIobWF0Y2hpbmcpIikpOworCQlpbmZvID0gaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwdXNoX2luZm8pKTsKKwkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfTk9UUVVFUklFRDsKKwkJaW5mby0+ZGVzdCA9IHhzdHJkdXAoaXRlbS0+c3RyaW5nKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHJlbW90ZS0+cHVzaC5ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCByZWZzcGVjX2l0ZW0gKnNwZWMgPSAmcmVtb3RlLT5wdXNoLml0ZW1zW2ldOworCQlpZiAoc3BlYy0+bWF0Y2hpbmcpCisJCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnB1c2gsIF8oIihtYXRjaGluZykiKSk7CisJCWVsc2UgaWYgKHN0cmxlbihzcGVjLT5zcmMpKQorCQkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT5wdXNoLCBzcGVjLT5zcmMpOworCQllbHNlCisJCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnB1c2gsIF8oIihkZWxldGUpIikpOworCisJCWluZm8gPSBpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHB1c2hfaW5mbykpOworCQlpbmZvLT5mb3JjZWQgPSBzcGVjLT5mb3JjZTsKKwkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfTk9UUVVFUklFRDsKKwkJaW5mby0+ZGVzdCA9IHhzdHJkdXAoc3BlYy0+ZHN0ID8gc3BlYy0+ZHN0IDogaXRlbS0+c3RyaW5nKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2hlYWRfbmFtZXMoY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIHN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCit7CisJc3RydWN0IHJlZiAqcmVmLCAqbWF0Y2hlczsKKwlzdHJ1Y3QgcmVmICpmZXRjaF9tYXAgPSBOVUxMLCAqKmZldGNoX21hcF90YWlsID0gJmZldGNoX21hcDsKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHJlZnNwZWM7CisKKwlyZWZzcGVjLmZvcmNlID0gMDsKKwlyZWZzcGVjLnBhdHRlcm4gPSAxOworCXJlZnNwZWMuc3JjID0gcmVmc3BlYy5kc3QgPSAicmVmcy9oZWFkcy8qIjsKKwlzdGF0ZXMtPmhlYWRzLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmcmVmc3BlYywgJmZldGNoX21hcF90YWlsLCAwKTsKKwltYXRjaGVzID0gZ3Vlc3NfcmVtb3RlX2hlYWQoZmluZF9yZWZfYnlfbmFtZShyZW1vdGVfcmVmcywgIkhFQUQiKSwKKwkJCQkgICAgZmV0Y2hfbWFwLCAxKTsKKwlmb3IgKHJlZiA9IG1hdGNoZXM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+aGVhZHMsIGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSk7CisKKwlmcmVlX3JlZnMoZmV0Y2hfbWFwKTsKKwlmcmVlX3JlZnMobWF0Y2hlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGtub3duX3JlbW90ZSB7CisJc3RydWN0IGtub3duX3JlbW90ZSAqbmV4dDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7Cit9OworCitzdHJ1Y3Qga25vd25fcmVtb3RlcyB7CisJc3RydWN0IHJlbW90ZSAqdG9fZGVsZXRlOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKmxpc3Q7Cit9OworCitzdGF0aWMgaW50IGFkZF9rbm93bl9yZW1vdGUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBrbm93bl9yZW1vdGVzICphbGwgPSBjYl9kYXRhOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKnI7CisKKwlpZiAoIXN0cmNtcChhbGwtPnRvX2RlbGV0ZS0+bmFtZSwgcmVtb3RlLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlyID0geG1hbGxvYyhzaXplb2YoKnIpKTsKKwlyLT5yZW1vdGUgPSByZW1vdGU7CisJci0+bmV4dCA9IGFsbC0+bGlzdDsKKwlhbGwtPmxpc3QgPSByOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnJhbmNoZXNfZm9yX3JlbW90ZSB7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqYnJhbmNoZXMsICpza2lwcGVkOworCXN0cnVjdCBrbm93bl9yZW1vdGVzICprZWVwOworfTsKKworc3RhdGljIGludCBhZGRfYnJhbmNoX2Zvcl9yZW1vdmFsKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGJyYW5jaGVzX2Zvcl9yZW1vdGUgKmJyYW5jaGVzID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHJlZnNwZWM7CisJc3RydWN0IGtub3duX3JlbW90ZSAqa3I7CisKKwltZW1zZXQoJnJlZnNwZWMsIDAsIHNpemVvZihyZWZzcGVjKSk7CisJcmVmc3BlYy5kc3QgPSAoY2hhciAqKXJlZm5hbWU7CisJaWYgKHJlbW90ZV9maW5kX3RyYWNraW5nKGJyYW5jaGVzLT5yZW1vdGUsICZyZWZzcGVjKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBkb24ndCBkZWxldGUgYSBicmFuY2ggaWYgYW5vdGhlciByZW1vdGUgYWxzbyB1c2VzIGl0ICovCisJZm9yIChrciA9IGJyYW5jaGVzLT5rZWVwLT5saXN0OyBrcjsga3IgPSBrci0+bmV4dCkgeworCQltZW1zZXQoJnJlZnNwZWMsIDAsIHNpemVvZihyZWZzcGVjKSk7CisJCXJlZnNwZWMuZHN0ID0gKGNoYXIgKilyZWZuYW1lOworCQlpZiAoIXJlbW90ZV9maW5kX3RyYWNraW5nKGtyLT5yZW1vdGUsICZyZWZzcGVjKSkKKwkJCXJldHVybiAwOworCX0KKworCS8qIGRvbid0IGRlbGV0ZSBub24tcmVtb3RlLXRyYWNraW5nIHJlZnMgKi8KKwlpZiAoIXN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpIHsKKwkJLyogYWR2aXNlIHVzZXIgaG93IHRvIGRlbGV0ZSBsb2NhbCBicmFuY2hlcyAqLworCQlpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoYnJhbmNoZXMtPnNraXBwZWQsCisJCQkJCSAgIGFiYnJldl9icmFuY2gocmVmbmFtZSkpOworCQkvKiBzaWxlbnRseSBza2lwIG92ZXIgb3RoZXIgbm9uLXJlbW90ZSByZWZzICovCisJCXJldHVybiAwOworCX0KKworCXN0cmluZ19saXN0X2FwcGVuZChicmFuY2hlcy0+YnJhbmNoZXMsIHJlZm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZW5hbWVfaW5mbyB7CisJY29uc3QgY2hhciAqb2xkX25hbWU7CisJY29uc3QgY2hhciAqbmV3X25hbWU7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZW1vdGVfYnJhbmNoZXM7Cit9OworCitzdGF0aWMgaW50IHJlYWRfcmVtb3RlX2JyYW5jaGVzKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlbmFtZV9pbmZvICpyZW5hbWUgPSBjYl9kYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IGZsYWc7CisJY29uc3QgY2hhciAqc3ltcmVmOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvcmVtb3Rlcy8lcy8iLCByZW5hbWUtPm9sZF9uYW1lKTsKKwlpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgYnVmLmJ1ZikpIHsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZChyZW5hbWUtPnJlbW90ZV9icmFuY2hlcywgcmVmbmFtZSk7CisJCXN5bXJlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZShyZWZuYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkgICAgTlVMTCwgJmZsYWcpOworCQlpZiAoc3ltcmVmICYmIChmbGFnICYgUkVGX0lTU1lNUkVGKSkKKwkJCWl0ZW0tPnV0aWwgPSB4c3RyZHVwKHN5bXJlZik7CisJCWVsc2UKKwkJCWl0ZW0tPnV0aWwgPSBOVUxMOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pZ3JhdGVfZmlsZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMudXJsIiwgcmVtb3RlLT5uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT51cmxfbnI7IGkrKykKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgcmVtb3RlLT51cmxbaV0sICJeJCIsIDApOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLnB1c2giLCByZW1vdGUtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnB1c2gucmF3X25yOyBpKyspCisJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIHJlbW90ZS0+cHVzaC5yYXdbaV0sICJeJCIsIDApOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLmZldGNoIiwgcmVtb3RlLT5uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT5mZXRjaC5yYXdfbnI7IGkrKykKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgcmVtb3RlLT5mZXRjaC5yYXdbaV0sICJeJCIsIDApOworCWlmIChyZW1vdGUtPm9yaWdpbiA9PSBSRU1PVEVfUkVNT1RFUykKKwkJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGgoInJlbW90ZXMvJXMiLCByZW1vdGUtPm5hbWUpKTsKKwllbHNlIGlmIChyZW1vdGUtPm9yaWdpbiA9PSBSRU1PVEVfQlJBTkNIRVMpCisJCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCJicmFuY2hlcy8lcyIsIHJlbW90ZS0+bmFtZSkpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwdXNoX2RlZmF1bHRfaW5mbworeworCWNvbnN0IGNoYXIgKm9sZF9uYW1lOworCWVudW0gY29uZmlnX3Njb3BlIHNjb3BlOworCXN0cnVjdCBzdHJidWYgb3JpZ2luOworCWludCBsaW5lbnI7Cit9OworCitzdGF0aWMgaW50IGNvbmZpZ19yZWFkX3B1c2hfZGVmYXVsdChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLAorCXZvaWQgKmNiKQoreworCXN0cnVjdCBwdXNoX2RlZmF1bHRfaW5mbyogaW5mbyA9IGNiOworCWlmIChzdHJjbXAoa2V5LCAicmVtb3RlLnB1c2hkZWZhdWx0IikgfHwKKwkgICAgIXZhbHVlIHx8IHN0cmNtcCh2YWx1ZSwgaW5mby0+b2xkX25hbWUpKQorCQlyZXR1cm4gMDsKKworCWluZm8tPnNjb3BlID0gY3VycmVudF9jb25maWdfc2NvcGUoKTsKKwlzdHJidWZfcmVzZXQoJmluZm8tPm9yaWdpbik7CisJc3RyYnVmX2FkZHN0cigmaW5mby0+b3JpZ2luLCBjdXJyZW50X2NvbmZpZ19uYW1lKCkpOworCWluZm8tPmxpbmVuciA9IGN1cnJlbnRfY29uZmlnX2xpbmUoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcHVzaF9kZWZhdWx0KGNvbnN0IGNoYXIqIG9sZF9uYW1lLCBjb25zdCBjaGFyKiBuZXdfbmFtZSkKK3sKKwlzdHJ1Y3QgcHVzaF9kZWZhdWx0X2luZm8gcHVzaF9kZWZhdWx0ID0geworCQlvbGRfbmFtZSwgQ09ORklHX1NDT1BFX1VOS05PV04sIFNUUkJVRl9JTklULCAtMSB9OworCWdpdF9jb25maWcoY29uZmlnX3JlYWRfcHVzaF9kZWZhdWx0LCAmcHVzaF9kZWZhdWx0KTsKKwlpZiAocHVzaF9kZWZhdWx0LnNjb3BlID49IENPTkZJR19TQ09QRV9DT01NQU5EKQorCQk7IC8qIHBhc3MgKi8KKwllbHNlIGlmIChwdXNoX2RlZmF1bHQuc2NvcGUgPj0gQ09ORklHX1NDT1BFX0xPQ0FMKSB7CisJCWludCByZXN1bHQgPSBnaXRfY29uZmlnX3NldF9nZW50bHkoInJlbW90ZS5wdXNoRGVmYXVsdCIsCisJCQkJCQkgICBuZXdfbmFtZSk7CisJCWlmIChuZXdfbmFtZSAmJiByZXN1bHQgJiYgcmVzdWx0ICE9IENPTkZJR19OT1RISU5HX1NFVCkKKwkJCWRpZShfKCJjb3VsZCBub3Qgc2V0ICclcyciKSwgInJlbW90ZS5wdXNoRGVmYXVsdCIpOworCQllbHNlIGlmICghbmV3X25hbWUgJiYgcmVzdWx0ICYmIHJlc3VsdCAhPSBDT05GSUdfTk9USElOR19TRVQpCisJCQlkaWUoXygiY291bGQgbm90IHVuc2V0ICclcyciKSwgInJlbW90ZS5wdXNoRGVmYXVsdCIpOworCX0gZWxzZSBpZiAocHVzaF9kZWZhdWx0LnNjb3BlID49IENPTkZJR19TQ09QRV9TWVNURU0pIHsKKwkJLyogd2FybiAqLworCQl3YXJuaW5nKF8oIlRoZSAlcyBjb25maWd1cmF0aW9uIHJlbW90ZS5wdXNoRGVmYXVsdCBpbjpcbiIKKwkJCSAgIlx0JXM6JWRcbiIKKwkJCSAgIm5vdyBuYW1lcyB0aGUgbm9uLWV4aXN0ZW50IHJlbW90ZSAnJXMnIiksCisJCQljb25maWdfc2NvcGVfbmFtZShwdXNoX2RlZmF1bHQuc2NvcGUpLAorCQkJcHVzaF9kZWZhdWx0Lm9yaWdpbi5idWYsIHB1c2hfZGVmYXVsdC5saW5lbnIsCisJCQlvbGRfbmFtZSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgbXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCByZW1vdGUgKm9sZHJlbW90ZSwgKm5ld3JlbW90ZTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBidWYyID0gU1RSQlVGX0lOSVQsIGJ1ZjMgPSBTVFJCVUZfSU5JVCwKKwkJb2xkX3JlbW90ZV9jb250ZXh0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IHJlbW90ZV9icmFuY2hlcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCByZW5hbWVfaW5mbyByZW5hbWU7CisJaW50IGksIHJlZnNwZWNfdXBkYXRlZCA9IDA7CisKKwlpZiAoYXJnYyAhPSAzKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfcmVuYW1lX3VzYWdlLCBvcHRpb25zKTsKKworCXJlbmFtZS5vbGRfbmFtZSA9IGFyZ3ZbMV07CisJcmVuYW1lLm5ld19uYW1lID0gYXJndlsyXTsKKwlyZW5hbWUucmVtb3RlX2JyYW5jaGVzID0gJnJlbW90ZV9icmFuY2hlczsKKworCW9sZHJlbW90ZSA9IHJlbW90ZV9nZXQocmVuYW1lLm9sZF9uYW1lKTsKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKG9sZHJlbW90ZSwgMSkpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZTogJyVzJyIpLCByZW5hbWUub2xkX25hbWUpOworCisJaWYgKCFzdHJjbXAocmVuYW1lLm9sZF9uYW1lLCByZW5hbWUubmV3X25hbWUpICYmIG9sZHJlbW90ZS0+b3JpZ2luICE9IFJFTU9URV9DT05GSUcpCisJCXJldHVybiBtaWdyYXRlX2ZpbGUob2xkcmVtb3RlKTsKKworCW5ld3JlbW90ZSA9IHJlbW90ZV9nZXQocmVuYW1lLm5ld19uYW1lKTsKKwlpZiAocmVtb3RlX2lzX2NvbmZpZ3VyZWQobmV3cmVtb3RlLCAxKSkKKwkJZGllKF8oInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iKSwgcmVuYW1lLm5ld19uYW1lKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL2hlYWRzL3Rlc3Q6cmVmcy9yZW1vdGVzLyVzL3Rlc3QiLCByZW5hbWUubmV3X25hbWUpOworCWlmICghdmFsaWRfZmV0Y2hfcmVmc3BlYyhidWYuYnVmKSkKKwkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiKSwgcmVuYW1lLm5ld19uYW1lKTsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzIiwgcmVuYW1lLm9sZF9uYW1lKTsKKwlzdHJidWZfYWRkZigmYnVmMiwgInJlbW90ZS4lcyIsIHJlbmFtZS5uZXdfbmFtZSk7CisJaWYgKGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oYnVmLmJ1ZiwgYnVmMi5idWYpIDwgMSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIiksCisJCQkJYnVmLmJ1ZiwgYnVmMi5idWYpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMuZmV0Y2giLCByZW5hbWUubmV3X25hbWUpOworCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIE5VTEwsIE5VTEwsIDEpOworCXN0cmJ1Zl9hZGRmKCZvbGRfcmVtb3RlX2NvbnRleHQsICI6cmVmcy9yZW1vdGVzLyVzLyIsIHJlbmFtZS5vbGRfbmFtZSk7CisJZm9yIChpID0gMDsgaSA8IG9sZHJlbW90ZS0+ZmV0Y2gucmF3X25yOyBpKyspIHsKKwkJY2hhciAqcHRyOworCisJCXN0cmJ1Zl9yZXNldCgmYnVmMik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZjIsIG9sZHJlbW90ZS0+ZmV0Y2gucmF3W2ldKTsKKwkJcHRyID0gc3Ryc3RyKGJ1ZjIuYnVmLCBvbGRfcmVtb3RlX2NvbnRleHQuYnVmKTsKKwkJaWYgKHB0cikgeworCQkJcmVmc3BlY191cGRhdGVkID0gMTsKKwkJCXN0cmJ1Zl9zcGxpY2UoJmJ1ZjIsCisJCQkJICAgICAgcHRyLWJ1ZjIuYnVmICsgc3RybGVuKCI6cmVmcy9yZW1vdGVzLyIpLAorCQkJCSAgICAgIHN0cmxlbihyZW5hbWUub2xkX25hbWUpLCByZW5hbWUubmV3X25hbWUsCisJCQkJICAgICAgc3RybGVuKHJlbmFtZS5uZXdfbmFtZSkpOworCQl9IGVsc2UKKwkJCXdhcm5pbmcoXygiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKwkJCQkgICJcdCVzXG4iCisJCQkJICAiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iKSwKKwkJCQlidWYyLmJ1Zik7CisKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgYnVmMi5idWYsICJeJCIsIDApOworCX0KKworCXJlYWRfYnJhbmNoZXMoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnJhbmNoX2xpc3QubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IGJyYW5jaF9saXN0Lml0ZW1zICsgaTsKKwkJc3RydWN0IGJyYW5jaF9pbmZvICppbmZvID0gaXRlbS0+dXRpbDsKKwkJaWYgKGluZm8tPnJlbW90ZV9uYW1lICYmICFzdHJjbXAoaW5mby0+cmVtb3RlX25hbWUsIHJlbmFtZS5vbGRfbmFtZSkpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMucmVtb3RlIiwgaXRlbS0+c3RyaW5nKTsKKwkJCWdpdF9jb25maWdfc2V0KGJ1Zi5idWYsIHJlbmFtZS5uZXdfbmFtZSk7CisJCX0KKwkJaWYgKGluZm8tPnB1c2hfcmVtb3RlX25hbWUgJiYgIXN0cmNtcChpbmZvLT5wdXNoX3JlbW90ZV9uYW1lLCByZW5hbWUub2xkX25hbWUpKSB7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiYnJhbmNoLiVzLnB1c2hyZW1vdGUiLCBpdGVtLT5zdHJpbmcpOworCQkJZ2l0X2NvbmZpZ19zZXQoYnVmLmJ1ZiwgcmVuYW1lLm5ld19uYW1lKTsKKwkJfQorCX0KKworCWlmICghcmVmc3BlY191cGRhdGVkKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRmlyc3QgcmVtb3ZlIHN5bXJlZnMsIHRoZW4gcmVuYW1lIHRoZSByZXN0LCBmaW5hbGx5IGNyZWF0ZQorCSAqIHRoZSBuZXcgc3ltcmVmcy4KKwkgKi8KKwlmb3JfZWFjaF9yZWYocmVhZF9yZW1vdGVfYnJhbmNoZXMsICZyZW5hbWUpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGVfYnJhbmNoZXMubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHJlbW90ZV9icmFuY2hlcy5pdGVtcyArIGk7CisJCWludCBmbGFnID0gMDsKKworCQlyZWFkX3JlZl9mdWxsKGl0ZW0tPnN0cmluZywgUkVTT0xWRV9SRUZfUkVBRElORywgTlVMTCwgJmZsYWcpOworCQlpZiAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVsZXRlX3JlZihOVUxMLCBpdGVtLT5zdHJpbmcsIE5VTEwsIFJFRl9OT19ERVJFRikpCisJCQlkaWUoXygiZGVsZXRpbmcgJyVzJyBmYWlsZWQiKSwgaXRlbS0+c3RyaW5nKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHJlbW90ZV9icmFuY2hlcy5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gcmVtb3RlX2JyYW5jaGVzLml0ZW1zICsgaTsKKworCQlpZiAoaXRlbS0+dXRpbCkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgaXRlbS0+c3RyaW5nKTsKKwkJc3RyYnVmX3NwbGljZSgmYnVmLCBzdHJsZW4oInJlZnMvcmVtb3Rlcy8iKSwgc3RybGVuKHJlbmFtZS5vbGRfbmFtZSksCisJCQkJcmVuYW1lLm5ld19uYW1lLCBzdHJsZW4ocmVuYW1lLm5ld19uYW1lKSk7CisJCXN0cmJ1Zl9yZXNldCgmYnVmMik7CisJCXN0cmJ1Zl9hZGRmKCZidWYyLCAicmVtb3RlOiByZW5hbWVkICVzIHRvICVzIiwKKwkJCQlpdGVtLT5zdHJpbmcsIGJ1Zi5idWYpOworCQlpZiAocmVuYW1lX3JlZihpdGVtLT5zdHJpbmcsIGJ1Zi5idWYsIGJ1ZjIuYnVmKSkKKwkJCWRpZShfKCJyZW5hbWluZyAnJXMnIGZhaWxlZCIpLCBpdGVtLT5zdHJpbmcpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlX2JyYW5jaGVzLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSByZW1vdGVfYnJhbmNoZXMuaXRlbXMgKyBpOworCisJCWlmICghaXRlbS0+dXRpbCkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgaXRlbS0+c3RyaW5nKTsKKwkJc3RyYnVmX3NwbGljZSgmYnVmLCBzdHJsZW4oInJlZnMvcmVtb3Rlcy8iKSwgc3RybGVuKHJlbmFtZS5vbGRfbmFtZSksCisJCQkJcmVuYW1lLm5ld19uYW1lLCBzdHJsZW4ocmVuYW1lLm5ld19uYW1lKSk7CisJCXN0cmJ1Zl9yZXNldCgmYnVmMik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZjIsIGl0ZW0tPnV0aWwpOworCQlzdHJidWZfc3BsaWNlKCZidWYyLCBzdHJsZW4oInJlZnMvcmVtb3Rlcy8iKSwgc3RybGVuKHJlbmFtZS5vbGRfbmFtZSksCisJCQkJcmVuYW1lLm5ld19uYW1lLCBzdHJsZW4ocmVuYW1lLm5ld19uYW1lKSk7CisJCXN0cmJ1Zl9yZXNldCgmYnVmMyk7CisJCXN0cmJ1Zl9hZGRmKCZidWYzLCAicmVtb3RlOiByZW5hbWVkICVzIHRvICVzIiwKKwkJCQlpdGVtLT5zdHJpbmcsIGJ1Zi5idWYpOworCQlpZiAoY3JlYXRlX3N5bXJlZihidWYuYnVmLCBidWYyLmJ1ZiwgYnVmMy5idWYpKQorCQkJZGllKF8oImNyZWF0aW5nICclcycgZmFpbGVkIiksIGJ1Zi5idWYpOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVtb3RlX2JyYW5jaGVzLCAxKTsKKworCWhhbmRsZV9wdXNoX2RlZmF1bHQocmVuYW1lLm9sZF9uYW1lLCByZW5hbWUubmV3X25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBrbm93bl9yZW1vdGVzIGtub3duX3JlbW90ZXMgPSB7IE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoZXMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc2tpcHBlZCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBicmFuY2hlc19mb3JfcmVtb3RlIGNiX2RhdGE7CisJaW50IGksIHJlc3VsdDsKKworCW1lbXNldCgmY2JfZGF0YSwgMCwgc2l6ZW9mKGNiX2RhdGEpKTsKKwljYl9kYXRhLmJyYW5jaGVzID0gJmJyYW5jaGVzOworCWNiX2RhdGEuc2tpcHBlZCA9ICZza2lwcGVkOworCWNiX2RhdGEua2VlcCA9ICZrbm93bl9yZW1vdGVzOworCisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3JtX3VzYWdlLCBvcHRpb25zKTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQoYXJndlsxXSk7CisJaWYgKCFyZW1vdGVfaXNfY29uZmlndXJlZChyZW1vdGUsIDEpKQorCQlkaWUoXygiTm8gc3VjaCByZW1vdGU6ICclcyciKSwgYXJndlsxXSk7CisKKwlrbm93bl9yZW1vdGVzLnRvX2RlbGV0ZSA9IHJlbW90ZTsKKwlmb3JfZWFjaF9yZW1vdGUoYWRkX2tub3duX3JlbW90ZSwgJmtub3duX3JlbW90ZXMpOworCisJcmVhZF9icmFuY2hlcygpOworCWZvciAoaSA9IDA7IGkgPCBicmFuY2hfbGlzdC5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gYnJhbmNoX2xpc3QuaXRlbXMgKyBpOworCQlzdHJ1Y3QgYnJhbmNoX2luZm8gKmluZm8gPSBpdGVtLT51dGlsOworCQlpZiAoaW5mby0+cmVtb3RlX25hbWUgJiYgIXN0cmNtcChpbmZvLT5yZW1vdGVfbmFtZSwgcmVtb3RlLT5uYW1lKSkgeworCQkJY29uc3QgY2hhciAqa2V5c1tdID0geyAicmVtb3RlIiwgIm1lcmdlIiwgTlVMTCB9LCAqKms7CisJCQlmb3IgKGsgPSBrZXlzOyAqazsgaysrKSB7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMuJXMiLAorCQkJCQkJaXRlbS0+c3RyaW5nLCAqayk7CisJCQkJcmVzdWx0ID0gZ2l0X2NvbmZpZ19zZXRfZ2VudGx5KGJ1Zi5idWYsIE5VTEwpOworCQkJCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IENPTkZJR19OT1RISU5HX1NFVCkKKwkJCQkJZGllKF8oImNvdWxkIG5vdCB1bnNldCAnJXMnIiksIGJ1Zi5idWYpOworCQkJfQorCQl9CisJCWlmIChpbmZvLT5wdXNoX3JlbW90ZV9uYW1lICYmICFzdHJjbXAoaW5mby0+cHVzaF9yZW1vdGVfbmFtZSwgcmVtb3RlLT5uYW1lKSkgeworCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcy5wdXNocmVtb3RlIiwgaXRlbS0+c3RyaW5nKTsKKwkJCXJlc3VsdCA9IGdpdF9jb25maWdfc2V0X2dlbnRseShidWYuYnVmLCBOVUxMKTsKKwkJCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IENPTkZJR19OT1RISU5HX1NFVCkKKwkJCQlkaWUoXygiY291bGQgbm90IHVuc2V0ICclcyciKSwgYnVmLmJ1Zik7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGNhbm5vdCBqdXN0IHBhc3MgYSBmdW5jdGlvbiB0byBmb3JfZWFjaF9yZWYoKSB3aGljaCBkZWxldGVzCisJICogdGhlIGJyYW5jaGVzIG9uZSBieSBvbmUsIHNpbmNlIGZvcl9lYWNoX3JlZigpIHJlbGllcyBvbiBjYWNoZWQKKwkgKiByZWZzLCB3aGljaCBhcmUgaW52YWxpZGF0ZWQgd2hlbiBkZWxldGluZyBhIGJyYW5jaC4KKwkgKi8KKwljYl9kYXRhLnJlbW90ZSA9IHJlbW90ZTsKKwlyZXN1bHQgPSBmb3JfZWFjaF9yZWYoYWRkX2JyYW5jaF9mb3JfcmVtb3ZhbCwgJmNiX2RhdGEpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJaWYgKCFyZXN1bHQpCisJCXJlc3VsdCA9IGRlbGV0ZV9yZWZzKCJyZW1vdGU6IHJlbW92ZSIsICZicmFuY2hlcywgUkVGX05PX0RFUkVGKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmYnJhbmNoZXMsIDApOworCisJaWYgKHNraXBwZWQubnIpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBRXygiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorCQkJICAgICAgInRvIGRlbGV0ZSBpdCwgdXNlOiIsCisJCQkgICAgICAiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorCQkJICAgICAgInRvIGRlbGV0ZSB0aGVtLCB1c2U6IiwKKwkJCSAgICAgIHNraXBwZWQubnIpKTsKKwkJZm9yIChpID0gMDsgaSA8IHNraXBwZWQubnI7IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiICBnaXQgYnJhbmNoIC1kICVzXG4iLAorCQkJCXNraXBwZWQuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJnNraXBwZWQsIDApOworCisJaWYgKCFyZXN1bHQpIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcyIsIHJlbW90ZS0+bmFtZSk7CisJCWlmIChnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGJ1Zi5idWYsIE5VTEwpIDwgMSkKKwkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciKSwgYnVmLmJ1Zik7CisKKwkJaGFuZGxlX3B1c2hfZGVmYXVsdChyZW1vdGUtPm5hbWUsIE5VTEwpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3B1c2hfaW5mbyh2b2lkICp1dGlsLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJc3RydWN0IHB1c2hfaW5mbyAqaW5mbyA9IHV0aWw7CisJZnJlZShpbmZvLT5kZXN0KTsKKwlmcmVlKGluZm8pOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3JlbW90ZV9yZWZfc3RhdGVzKHN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCit7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN0YXRlcy0+bmV3X3JlZnMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZXMtPnN0YWxlLCAxKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT50cmFja2VkLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT5oZWFkcywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXJfZnVuYygmc3RhdGVzLT5wdXNoLCBjbGVhcl9wdXNoX2luZm8pOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9yZWZfdG9fdHJhY2tlZF9saXN0KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGNiX2RhdGE7CisJc3RydWN0IHJlZnNwZWNfaXRlbSByZWZzcGVjOworCisJaWYgKGZsYWdzICYgUkVGX0lTU1lNUkVGKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmcmVmc3BlYywgMCwgc2l6ZW9mKHJlZnNwZWMpKTsKKwlyZWZzcGVjLmRzdCA9IChjaGFyICopcmVmbmFtZTsKKwlpZiAoIXJlbW90ZV9maW5kX3RyYWNraW5nKHN0YXRlcy0+cmVtb3RlLCAmcmVmc3BlYykpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmc3RhdGVzLT50cmFja2VkLCBhYmJyZXZfYnJhbmNoKHJlZnNwZWMuc3JjKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcmVtb3RlX3JlZl9zdGF0ZXMoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcywKKwkJCQkgaW50IHF1ZXJ5KQoreworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmczsKKworCXN0YXRlcy0+cmVtb3RlID0gcmVtb3RlX2dldChuYW1lKTsKKwlpZiAoIXN0YXRlcy0+cmVtb3RlKQorCQlyZXR1cm4gZXJyb3IoXygiTm8gc3VjaCByZW1vdGU6ICclcyciKSwgbmFtZSk7CisKKwlyZWFkX2JyYW5jaGVzKCk7CisKKwlpZiAocXVlcnkpIHsKKwkJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChzdGF0ZXMtPnJlbW90ZSwgc3RhdGVzLT5yZW1vdGUtPnVybF9uciA+IDAgPworCQkJc3RhdGVzLT5yZW1vdGUtPnVybFswXSA6IE5VTEwpOworCQlyZW1vdGVfcmVmcyA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0LCBOVUxMKTsKKwkJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KTsKKworCQlzdGF0ZXMtPnF1ZXJpZWQgPSAxOworCQlpZiAocXVlcnkgJiBHRVRfUkVGX1NUQVRFUykKKwkJCWdldF9yZWZfc3RhdGVzKHJlbW90ZV9yZWZzLCBzdGF0ZXMpOworCQlpZiAocXVlcnkgJiBHRVRfSEVBRF9OQU1FUykKKwkJCWdldF9oZWFkX25hbWVzKHJlbW90ZV9yZWZzLCBzdGF0ZXMpOworCQlpZiAocXVlcnkgJiBHRVRfUFVTSF9SRUZfU1RBVEVTKQorCQkJZ2V0X3B1c2hfcmVmX3N0YXRlcyhyZW1vdGVfcmVmcywgc3RhdGVzKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9yZWYoYXBwZW5kX3JlZl90b190cmFja2VkX2xpc3QsIHN0YXRlcyk7CisJCXN0cmluZ19saXN0X3NvcnQoJnN0YXRlcy0+dHJhY2tlZCk7CisJCWdldF9wdXNoX3JlZl9zdGF0ZXNfbm9xdWVyeShzdGF0ZXMpOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2hvd19pbmZvIHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3Q7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlczsKKwlpbnQgd2lkdGgsIHdpZHRoMjsKKwlpbnQgYW55X3JlYmFzZTsKK307CisKK3N0YXRpYyBpbnQgYWRkX3JlbW90ZV90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CisJaW50IG4gPSBzdHJsZW4oaXRlbS0+c3RyaW5nKTsKKwlpZiAobiA+IGluZm8tPndpZHRoKQorCQlpbmZvLT53aWR0aCA9IG47CisJc3RyaW5nX2xpc3RfaW5zZXJ0KGluZm8tPmxpc3QsIGl0ZW0tPnN0cmluZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19yZW1vdGVfaW5mb19pdGVtKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaG93X2luZm8gKmluZm8gPSBjYl9kYXRhOworCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMgPSBpbmZvLT5zdGF0ZXM7CisJY29uc3QgY2hhciAqbmFtZSA9IGl0ZW0tPnN0cmluZzsKKworCWlmIChzdGF0ZXMtPnF1ZXJpZWQpIHsKKwkJY29uc3QgY2hhciAqZm10ID0gIiVzIjsKKwkJY29uc3QgY2hhciAqYXJnID0gIiI7CisJCWlmIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZzdGF0ZXMtPm5ld19yZWZzLCBuYW1lKSkgeworCQkJZm10ID0gXygiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIik7CisJCQlhcmcgPSBzdGF0ZXMtPnJlbW90ZS0+bmFtZTsKKwkJfSBlbHNlIGlmIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZzdGF0ZXMtPnRyYWNrZWQsIG5hbWUpKQorCQkJYXJnID0gXygiIHRyYWNrZWQiKTsKKwkJZWxzZSBpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3RhdGVzLT5zdGFsZSwgbmFtZSkpCisJCQlhcmcgPSBfKCIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIpOworCQllbHNlCisJCQlhcmcgPSBfKCIgPz8/Iik7CisJCXByaW50ZigiICAgICUtKnMiLCBpbmZvLT53aWR0aCwgbmFtZSk7CisJCXByaW50ZihmbXQsIGFyZyk7CisJCXByaW50ZigiXG4iKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIgICAgJXNcbiIsIG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2xvY2FsX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqYnJhbmNoX2l0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzID0gc2hvd19pbmZvLT5zdGF0ZXM7CisJc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2hfaW5mbyA9IGJyYW5jaF9pdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBuOworCisJaWYgKCFicmFuY2hfaW5mby0+bWVyZ2UubnIgfHwgIWJyYW5jaF9pbmZvLT5yZW1vdGVfbmFtZSB8fAorCSAgICBzdHJjbXAoc3RhdGVzLT5yZW1vdGUtPm5hbWUsIGJyYW5jaF9pbmZvLT5yZW1vdGVfbmFtZSkpCisJCXJldHVybiAwOworCWlmICgobiA9IHN0cmxlbihicmFuY2hfaXRlbS0+c3RyaW5nKSkgPiBzaG93X2luZm8tPndpZHRoKQorCQlzaG93X2luZm8tPndpZHRoID0gbjsKKwlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSA+PSBSRUJBU0VfVFJVRSkKKwkJc2hvd19pbmZvLT5hbnlfcmViYXNlID0gMTsKKworCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoc2hvd19pbmZvLT5saXN0LCBicmFuY2hfaXRlbS0+c3RyaW5nKTsKKwlpdGVtLT51dGlsID0gYnJhbmNoX2luZm87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X2xvY2FsX2luZm9faXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCBicmFuY2hfaW5mbyAqYnJhbmNoX2luZm8gPSBpdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbWVyZ2UgPSAmYnJhbmNoX2luZm8tPm1lcmdlOworCWludCB3aWR0aCA9IHNob3dfaW5mby0+d2lkdGggKyA0OworCWludCBpOworCisJaWYgKGJyYW5jaF9pbmZvLT5yZWJhc2UgPj0gUkVCQVNFX1RSVUUgJiYgYnJhbmNoX2luZm8tPm1lcmdlLm5yID4gMSkgeworCQllcnJvcihfKCJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giKSwKKwkJCWl0ZW0tPnN0cmluZyk7CisJCXJldHVybiAwOworCX0KKworCXByaW50ZigiICAgICUtKnMgIiwgc2hvd19pbmZvLT53aWR0aCwgaXRlbS0+c3RyaW5nKTsKKwlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSA+PSBSRUJBU0VfVFJVRSkgeworCQljb25zdCBjaGFyICptc2c7CisJCWlmIChicmFuY2hfaW5mby0+cmViYXNlID09IFJFQkFTRV9JTlRFUkFDVElWRSkKKwkJCW1zZyA9IF8oInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIpOworCQllbHNlIGlmIChicmFuY2hfaW5mby0+cmViYXNlID09IFJFQkFTRV9NRVJHRVMpCisJCQltc2cgPSBfKCJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvICIKKwkJCQkicmVtb3RlICVzIik7CisJCWVsc2UKKwkJCW1zZyA9IF8oInJlYmFzZXMgb250byByZW1vdGUgJXMiKTsKKwkJcHJpbnRmX2xuKG1zZywgbWVyZ2UtPml0ZW1zWzBdLnN0cmluZyk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2hvd19pbmZvLT5hbnlfcmViYXNlKSB7CisJCXByaW50Zl9sbihfKCIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIiksIG1lcmdlLT5pdGVtc1swXS5zdHJpbmcpOworCQl3aWR0aCsrOworCX0gZWxzZSB7CisJCXByaW50Zl9sbihfKCJtZXJnZXMgd2l0aCByZW1vdGUgJXMiKSwgbWVyZ2UtPml0ZW1zWzBdLnN0cmluZyk7CisJfQorCWZvciAoaSA9IDE7IGkgPCBtZXJnZS0+bnI7IGkrKykKKwkJcHJpbnRmKF8oIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iKSwgd2lkdGgsICIiLAorCQkgICAgICAgbWVyZ2UtPml0ZW1zW2ldLnN0cmluZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfcHVzaF90b19zaG93X2luZm8oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnB1c2hfaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCBwdXNoX2luZm8gKnB1c2hfaW5mbyA9IHB1c2hfaXRlbS0+dXRpbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgbjsKKwlpZiAoKG4gPSBzdHJsZW4ocHVzaF9pdGVtLT5zdHJpbmcpKSA+IHNob3dfaW5mby0+d2lkdGgpCisJCXNob3dfaW5mby0+d2lkdGggPSBuOworCWlmICgobiA9IHN0cmxlbihwdXNoX2luZm8tPmRlc3QpKSA+IHNob3dfaW5mby0+d2lkdGgyKQorCQlzaG93X2luZm8tPndpZHRoMiA9IG47CisJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZChzaG93X2luZm8tPmxpc3QsIHB1c2hfaXRlbS0+c3RyaW5nKTsKKwlpdGVtLT51dGlsID0gcHVzaF9pdGVtLT51dGlsOworCXJldHVybiAwOworfQorCisvKgorICogU29ydGluZyBjb21wYXJpc29uIGZvciBhIHN0cmluZyBsaXN0IHRoYXQgaGFzIHB1c2hfaW5mbworICogc3RydWN0cyBpbiBpdHMgdXRpbCBmaWVsZAorICovCitzdGF0aWMgaW50IGNtcF9zdHJpbmdfd2l0aF9wdXNoKGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqYSA9IHZhOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpiID0gdmI7CisJY29uc3Qgc3RydWN0IHB1c2hfaW5mbyAqYV9wdXNoID0gYS0+dXRpbDsKKwljb25zdCBzdHJ1Y3QgcHVzaF9pbmZvICpiX3B1c2ggPSBiLT51dGlsOworCWludCBjbXAgPSBzdHJjbXAoYS0+c3RyaW5nLCBiLT5zdHJpbmcpOworCXJldHVybiBjbXAgPyBjbXAgOiBzdHJjbXAoYV9wdXNoLT5kZXN0LCBiX3B1c2gtPmRlc3QpOworfQorCitzdGF0aWMgaW50IHNob3dfcHVzaF9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcHVzaF9pbmZvICpwdXNoX2luZm8gPSBpdGVtLT51dGlsOworCWNvbnN0IGNoYXIgKnNyYyA9IGl0ZW0tPnN0cmluZywgKnN0YXR1cyA9IE5VTEw7CisKKwlzd2l0Y2ggKHB1c2hfaW5mby0+c3RhdHVzKSB7CisJY2FzZSBQVVNIX1NUQVRVU19DUkVBVEU6CisJCXN0YXR1cyA9IF8oImNyZWF0ZSIpOworCQlicmVhazsKKwljYXNlIFBVU0hfU1RBVFVTX0RFTEVURToKKwkJc3RhdHVzID0gXygiZGVsZXRlIik7CisJCXNyYyA9IF8oIihub25lKSIpOworCQlicmVhazsKKwljYXNlIFBVU0hfU1RBVFVTX1VQVE9EQVRFOgorCQlzdGF0dXMgPSBfKCJ1cCB0byBkYXRlIik7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfRkFTVEZPUldBUkQ6CisJCXN0YXR1cyA9IF8oImZhc3QtZm9yd2FyZGFibGUiKTsKKwkJYnJlYWs7CisJY2FzZSBQVVNIX1NUQVRVU19PVVRPRkRBVEU6CisJCXN0YXR1cyA9IF8oImxvY2FsIG91dCBvZiBkYXRlIik7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfTk9UUVVFUklFRDoKKwkJYnJlYWs7CisJfQorCWlmIChzdGF0dXMpIHsKKwkJaWYgKHB1c2hfaW5mby0+Zm9yY2VkKQorCQkJcHJpbnRmX2xuKF8oIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiKSwgc2hvd19pbmZvLT53aWR0aCwgc3JjLAorCQkJICAgICAgIHNob3dfaW5mby0+d2lkdGgyLCBwdXNoX2luZm8tPmRlc3QsIHN0YXR1cyk7CisJCWVsc2UKKwkJCXByaW50Zl9sbihfKCIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIiksIHNob3dfaW5mby0+d2lkdGgsIHNyYywKKwkJCSAgICAgICBzaG93X2luZm8tPndpZHRoMiwgcHVzaF9pbmZvLT5kZXN0LCBzdGF0dXMpOworCX0gZWxzZSB7CisJCWlmIChwdXNoX2luZm8tPmZvcmNlZCkKKwkJCXByaW50Zl9sbihfKCIgICAgJS0qcyBmb3JjZXMgdG8gJXMiKSwgc2hvd19pbmZvLT53aWR0aCwgc3JjLAorCQkJICAgICAgIHB1c2hfaW5mby0+ZGVzdCk7CisJCWVsc2UKKwkJCXByaW50Zl9sbihfKCIgICAgJS0qcyBwdXNoZXMgdG8gJXMiKSwgc2hvd19pbmZvLT53aWR0aCwgc3JjLAorCQkJICAgICAgIHB1c2hfaW5mby0+ZGVzdCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9vbmVfZW50cnkoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCA9IHByaXY7CisJc3RydWN0IHN0cmJ1ZiB1cmxfYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqKnVybDsKKwlpbnQgaSwgdXJsX25yOworCisJaWYgKHJlbW90ZS0+dXJsX25yID4gMCkgeworCQlzdHJidWZfYWRkZigmdXJsX2J1ZiwgIiVzIChmZXRjaCkiLCByZW1vdGUtPnVybFswXSk7CisJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCByZW1vdGUtPm5hbWUpLT51dGlsID0KKwkJCQlzdHJidWZfZGV0YWNoKCZ1cmxfYnVmLCBOVUxMKTsKKwl9IGVsc2UKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSktPnV0aWwgPSBOVUxMOworCWlmIChyZW1vdGUtPnB1c2h1cmxfbnIpIHsKKwkJdXJsID0gcmVtb3RlLT5wdXNodXJsOworCQl1cmxfbnIgPSByZW1vdGUtPnB1c2h1cmxfbnI7CisJfSBlbHNlIHsKKwkJdXJsID0gcmVtb3RlLT51cmw7CisJCXVybF9uciA9IHJlbW90ZS0+dXJsX25yOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdXJsX25yOyBpKyspCisJeworCQlzdHJidWZfYWRkZigmdXJsX2J1ZiwgIiVzIChwdXNoKSIsIHVybFtpXSk7CisJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCByZW1vdGUtPm5hbWUpLT51dGlsID0KKwkJCQlzdHJidWZfZGV0YWNoKCZ1cmxfYnVmLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X2FsbCh2b2lkKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlpbnQgcmVzdWx0OworCisJbGlzdC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcmVzdWx0ID0gZm9yX2VhY2hfcmVtb3RlKGdldF9vbmVfZW50cnksICZsaXN0KTsKKworCWlmICghcmVzdWx0KSB7CisJCWludCBpOworCisJCXN0cmluZ19saXN0X3NvcnQoJmxpc3QpOworCQlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKSB7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IGxpc3QuaXRlbXMgKyBpOworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRmKCIlc1x0JXNcbiIsIGl0ZW0tPnN0cmluZywKKwkJCQkJaXRlbS0+dXRpbCA/IChjb25zdCBjaGFyICopaXRlbS0+dXRpbCA6ICIiKTsKKwkJCWVsc2UgeworCQkJCWlmIChpICYmICFzdHJjbXAoKGl0ZW0gLSAxKS0+c3RyaW5nLCBpdGVtLT5zdHJpbmcpKQorCQkJCQljb250aW51ZTsKKwkJCQlwcmludGYoIiVzXG4iLCBpdGVtLT5zdHJpbmcpOworCQkJfQorCQl9CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAxKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHNob3coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBub19xdWVyeSA9IDAsIHJlc3VsdCA9IDAsIHF1ZXJ5X2ZsYWcgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnbicsIE5VTEwsICZub19xdWVyeSwgTl8oImRvIG5vdCBxdWVyeSByZW1vdGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCByZWZfc3RhdGVzIHN0YXRlczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaW5mb19saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc2hvd19pbmZvIGluZm87CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9zaG93X3VzYWdlLAorCQkJICAgICAwKTsKKworCWlmIChhcmdjIDwgMSkKKwkJcmV0dXJuIHNob3dfYWxsKCk7CisKKwlpZiAoIW5vX3F1ZXJ5KQorCQlxdWVyeV9mbGFnID0gKEdFVF9SRUZfU1RBVEVTIHwgR0VUX0hFQURfTkFNRVMgfCBHRVRfUFVTSF9SRUZfU1RBVEVTKTsKKworCW1lbXNldCgmc3RhdGVzLCAwLCBzaXplb2Yoc3RhdGVzKSk7CisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCWluZm8uc3RhdGVzID0gJnN0YXRlczsKKwlpbmZvLmxpc3QgPSAmaW5mb19saXN0OworCWZvciAoOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykgeworCQlpbnQgaTsKKwkJY29uc3QgY2hhciAqKnVybDsKKwkJaW50IHVybF9ucjsKKworCQlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMoKmFyZ3YsICZzdGF0ZXMsIHF1ZXJ5X2ZsYWcpOworCisJCXByaW50Zl9sbihfKCIqIHJlbW90ZSAlcyIpLCAqYXJndik7CisJCXByaW50Zl9sbihfKCIgIEZldGNoIFVSTDogJXMiKSwgc3RhdGVzLnJlbW90ZS0+dXJsX25yID4gMCA/CisJCSAgICAgICBzdGF0ZXMucmVtb3RlLT51cmxbMF0gOiBfKCIobm8gVVJMKSIpKTsKKwkJaWYgKHN0YXRlcy5yZW1vdGUtPnB1c2h1cmxfbnIpIHsKKwkJCXVybCA9IHN0YXRlcy5yZW1vdGUtPnB1c2h1cmw7CisJCQl1cmxfbnIgPSBzdGF0ZXMucmVtb3RlLT5wdXNodXJsX25yOworCQl9IGVsc2UgeworCQkJdXJsID0gc3RhdGVzLnJlbW90ZS0+dXJsOworCQkJdXJsX25yID0gc3RhdGVzLnJlbW90ZS0+dXJsX25yOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykKKwkJCS8qCisJCQkgKiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uICc6JyBzaG91bGQgYWxpZ24KKwkJCSAqIHdpdGggdGhlIG9uZSBpbiAiIEZldGNoIFVSTDogJXMiCisJCQkgKiB0cmFuc2xhdGlvbi4KKwkJCSAqLworCQkJcHJpbnRmX2xuKF8oIiAgUHVzaCAgVVJMOiAlcyIpLCB1cmxbaV0pOworCQlpZiAoIWkpCisJCQlwcmludGZfbG4oXygiICBQdXNoICBVUkw6ICVzIiksIF8oIihubyBVUkwpIikpOworCQlpZiAobm9fcXVlcnkpCisJCQlwcmludGZfbG4oXygiICBIRUFEIGJyYW5jaDogJXMiKSwgXygiKG5vdCBxdWVyaWVkKSIpKTsKKwkJZWxzZSBpZiAoIXN0YXRlcy5oZWFkcy5ucikKKwkJCXByaW50Zl9sbihfKCIgIEhFQUQgYnJhbmNoOiAlcyIpLCBfKCIodW5rbm93bikiKSk7CisJCWVsc2UgaWYgKHN0YXRlcy5oZWFkcy5uciA9PSAxKQorCQkJcHJpbnRmX2xuKF8oIiAgSEVBRCBicmFuY2g6ICVzIiksIHN0YXRlcy5oZWFkcy5pdGVtc1swXS5zdHJpbmcpOworCQllbHNlIHsKKwkJCXByaW50ZihfKCIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIgorCQkJCSAiIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLmhlYWRzLm5yOyBpKyspCisJCQkJcHJpbnRmKCIgICAgJXNcbiIsIHN0YXRlcy5oZWFkcy5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisKKwkJLyogcmVtb3RlIGJyYW5jaCBpbmZvICovCisJCWluZm8ud2lkdGggPSAwOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmc3RhdGVzLm5ld19yZWZzLCBhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbywgJmluZm8pOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmc3RhdGVzLnRyYWNrZWQsIGFkZF9yZW1vdGVfdG9fc2hvd19pbmZvLCAmaW5mbyk7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KCZzdGF0ZXMuc3RhbGUsIGFkZF9yZW1vdGVfdG9fc2hvd19pbmZvLCAmaW5mbyk7CisJCWlmIChpbmZvLmxpc3QtPm5yKQorCQkJcHJpbnRmX2xuKFFfKCIgIFJlbW90ZSBicmFuY2g6JXMiLAorCQkJCSAgICAgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIiwKKwkJCQkgICAgIGluZm8ubGlzdC0+bnIpLAorCQkJCSAgbm9fcXVlcnkgPyBfKCIgKHN0YXR1cyBub3QgcXVlcmllZCkiKSA6ICIiKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoaW5mby5saXN0LCBzaG93X3JlbW90ZV9pbmZvX2l0ZW0sICZpbmZvKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoaW5mby5saXN0LCAwKTsKKworCQkvKiBnaXQgcHVsbCBpbmZvICovCisJCWluZm8ud2lkdGggPSAwOworCQlpbmZvLmFueV9yZWJhc2UgPSAwOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmYnJhbmNoX2xpc3QsIGFkZF9sb2NhbF90b19zaG93X2luZm8sICZpbmZvKTsKKwkJaWYgKGluZm8ubGlzdC0+bnIpCisJCQlwcmludGZfbG4oUV8oIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IiwKKwkJCQkgICAgICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IiwKKwkJCQkgICAgIGluZm8ubGlzdC0+bnIpKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoaW5mby5saXN0LCBzaG93X2xvY2FsX2luZm9faXRlbSwgJmluZm8pOworCQlzdHJpbmdfbGlzdF9jbGVhcihpbmZvLmxpc3QsIDApOworCisJCS8qIGdpdCBwdXNoIGluZm8gKi8KKwkJaWYgKHN0YXRlcy5yZW1vdGUtPm1pcnJvcikKKwkJCXByaW50Zl9sbihfKCIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIikpOworCisJCWluZm8ud2lkdGggPSBpbmZvLndpZHRoMiA9IDA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KCZzdGF0ZXMucHVzaCwgYWRkX3B1c2hfdG9fc2hvd19pbmZvLCAmaW5mbyk7CisJCVFTT1JUKGluZm8ubGlzdC0+aXRlbXMsIGluZm8ubGlzdC0+bnIsIGNtcF9zdHJpbmdfd2l0aF9wdXNoKTsKKwkJaWYgKGluZm8ubGlzdC0+bnIpCisJCQlwcmludGZfbG4oUV8oIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiLAorCQkJCSAgICAgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IiwKKwkJCQkgICAgIGluZm8ubGlzdC0+bnIpLAorCQkJCSAgbm9fcXVlcnkgPyBfKCIgKHN0YXR1cyBub3QgcXVlcmllZCkiKSA6ICIiKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoaW5mby5saXN0LCBzaG93X3B1c2hfaW5mb19pdGVtLCAmaW5mbyk7CisJCXN0cmluZ19saXN0X2NsZWFyKGluZm8ubGlzdCwgMCk7CisKKwkJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHNldF9oZWFkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgb3B0X2EgPSAwLCBvcHRfZCA9IDAsIHJlc3VsdCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgYnVmMiA9IFNUUkJVRl9JTklUOworCWNoYXIgKmhlYWRfbmFtZSA9IE5VTEw7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ2EnLCAiYXV0byIsICZvcHRfYSwKKwkJCSBOXygic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIikpLAorCQlPUFRfQk9PTCgnZCcsICJkZWxldGUiLCAmb3B0X2QsCisJCQkgTl8oImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiKSksCisJCU9QVF9FTkQoKQorCX07CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfc2V0aGVhZF91c2FnZSwKKwkJCSAgICAgMCk7CisJaWYgKGFyZ2MpCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL3JlbW90ZXMvJXMvSEVBRCIsIGFyZ3ZbMF0pOworCisJaWYgKCFvcHRfYSAmJiAhb3B0X2QgJiYgYXJnYyA9PSAyKSB7CisJCWhlYWRfbmFtZSA9IHhzdHJkdXAoYXJndlsxXSk7CisJfSBlbHNlIGlmIChvcHRfYSAmJiAhb3B0X2QgJiYgYXJnYyA9PSAxKSB7CisJCXN0cnVjdCByZWZfc3RhdGVzIHN0YXRlczsKKwkJbWVtc2V0KCZzdGF0ZXMsIDAsIHNpemVvZihzdGF0ZXMpKTsKKwkJZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKGFyZ3ZbMF0sICZzdGF0ZXMsIEdFVF9IRUFEX05BTUVTKTsKKwkJaWYgKCFzdGF0ZXMuaGVhZHMubnIpCisJCQlyZXN1bHQgfD0gZXJyb3IoXygiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIpKTsKKwkJZWxzZSBpZiAoc3RhdGVzLmhlYWRzLm5yID4gMSkgeworCQkJcmVzdWx0IHw9IGVycm9yKF8oIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiAiCisJCQkJCSAgIlBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLmhlYWRzLm5yOyBpKyspCisJCQkJZnByaW50ZihzdGRlcnIsICIgIGdpdCByZW1vdGUgc2V0LWhlYWQgJXMgJXNcbiIsCisJCQkJCWFyZ3ZbMF0sIHN0YXRlcy5oZWFkcy5pdGVtc1tpXS5zdHJpbmcpOworCQl9IGVsc2UKKwkJCWhlYWRfbmFtZSA9IHhzdHJkdXAoc3RhdGVzLmhlYWRzLml0ZW1zWzBdLnN0cmluZyk7CisJCWZyZWVfcmVtb3RlX3JlZl9zdGF0ZXMoJnN0YXRlcyk7CisJfSBlbHNlIGlmIChvcHRfZCAmJiAhb3B0X2EgJiYgYXJnYyA9PSAxKSB7CisJCWlmIChkZWxldGVfcmVmKE5VTEwsIGJ1Zi5idWYsIE5VTEwsIFJFRl9OT19ERVJFRikpCisJCQlyZXN1bHQgfD0gZXJyb3IoXygiQ291bGQgbm90IGRlbGV0ZSAlcyIpLCBidWYuYnVmKTsKKwl9IGVsc2UKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3NldGhlYWRfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKGhlYWRfbmFtZSkgeworCQlzdHJidWZfYWRkZigmYnVmMiwgInJlZnMvcmVtb3Rlcy8lcy8lcyIsIGFyZ3ZbMF0sIGhlYWRfbmFtZSk7CisJCS8qIG1ha2Ugc3VyZSBpdCdzIHZhbGlkICovCisJCWlmICghcmVmX2V4aXN0cyhidWYyLmJ1ZikpCisJCQlyZXN1bHQgfD0gZXJyb3IoXygiTm90IGEgdmFsaWQgcmVmOiAlcyIpLCBidWYyLmJ1Zik7CisJCWVsc2UgaWYgKGNyZWF0ZV9zeW1yZWYoYnVmLmJ1ZiwgYnVmMi5idWYsICJyZW1vdGUgc2V0LWhlYWQiKSkKKwkJCXJlc3VsdCB8PSBlcnJvcihfKCJDb3VsZCBub3Qgc2V0dXAgJXMiKSwgYnVmLmJ1Zik7CisJCWlmIChvcHRfYSkKKwkJCXByaW50ZigiJXMvSEVBRCBzZXQgdG8gJXNcbiIsIGFyZ3ZbMF0sIGhlYWRfbmFtZSk7CisJCWZyZWUoaGVhZF9uYW1lKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmMik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBwcnVuZV9yZW1vdGUoY29uc3QgY2hhciAqcmVtb3RlLCBpbnQgZHJ5X3J1bikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyBzdGF0ZXM7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZnNfdG9fcHJ1bmUgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWNvbnN0IGNoYXIgKmRhbmdsaW5nX21zZyA9IGRyeV9ydW4KKwkJPyBfKCIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIikKKwkJOiBfKCIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiKTsKKworCW1lbXNldCgmc3RhdGVzLCAwLCBzaXplb2Yoc3RhdGVzKSk7CisJZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKHJlbW90ZSwgJnN0YXRlcywgR0VUX1JFRl9TVEFURVMpOworCisJaWYgKCFzdGF0ZXMuc3RhbGUubnIpIHsKKwkJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRmX2xuKF8oIlBydW5pbmcgJXMiKSwgcmVtb3RlKTsKKwlwcmludGZfbG4oXygiVVJMOiAlcyIpLAorCQkgIHN0YXRlcy5yZW1vdGUtPnVybF9ucgorCQkgID8gc3RhdGVzLnJlbW90ZS0+dXJsWzBdCisJCSAgOiBfKCIobm8gVVJMKSIpKTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJnN0YXRlcy5zdGFsZSkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZWZzX3RvX3BydW5lLCBpdGVtLT51dGlsKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZyZWZzX3RvX3BydW5lKTsKKworCWlmICghZHJ5X3J1bikKKwkJcmVzdWx0IHw9IGRlbGV0ZV9yZWZzKCJyZW1vdGU6IHBydW5lIiwgJnJlZnNfdG9fcHJ1bmUsIDApOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmc3RhdGVzLnN0YWxlKSB7CisJCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSBpdGVtLT51dGlsOworCisJCWlmIChkcnlfcnVuKQorCQkJcHJpbnRmX2xuKF8oIiAqIFt3b3VsZCBwcnVuZV0gJXMiKSwKKwkJCSAgICAgICBhYmJyZXZfcmVmKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpOworCQllbHNlCisJCQlwcmludGZfbG4oXygiICogW3BydW5lZF0gJXMiKSwKKwkJCSAgICAgICBhYmJyZXZfcmVmKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpOworCX0KKworCXdhcm5fZGFuZ2xpbmdfc3ltcmVmcyhzdGRvdXQsIGRhbmdsaW5nX21zZywgJnJlZnNfdG9fcHJ1bmUpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJnJlZnNfdG9fcHJ1bmUsIDApOworCWZyZWVfcmVtb3RlX3JlZl9zdGF0ZXMoJnN0YXRlcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBwcnVuZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGRyeV9ydW4gPSAwLCByZXN1bHQgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0RSWV9SVU4oJmRyeV9ydW4sIE5fKCJkcnkgcnVuIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgYnVpbHRpbl9yZW1vdGVfcHJ1bmVfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGFyZ2MgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfcHJ1bmVfdXNhZ2UsIG9wdGlvbnMpOworCisJZm9yICg7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKQorCQlyZXN1bHQgfD0gcHJ1bmVfcmVtb3RlKCphcmd2LCBkcnlfcnVuKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9kZWZhdWx0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKnByaXYpCit7CisJaWYgKHN0cmNtcChrZXksICJyZW1vdGVzLmRlZmF1bHQiKSA9PSAwKSB7CisJCWludCAqZm91bmQgPSBwcml2OworCQkqZm91bmQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGRhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpLCBwcnVuZSA9IC0xOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgncCcsICJwcnVuZSIsICZwcnVuZSwKKwkJCSBOXygicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3QgYXJndl9hcnJheSBmZXRjaF9hcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWludCBkZWZhdWx0X2RlZmluZWQgPSAwOworCWludCByZXR2YWw7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91cGRhdGVfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmZmV0Y2hfYXJndiwgImZldGNoIik7CisKKwlpZiAocHJ1bmUgIT0gLTEpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmZmV0Y2hfYXJndiwgcHJ1bmUgPyAiLS1wcnVuZSIgOiAiLS1uby1wcnVuZSIpOworCWlmICh2ZXJib3NlKQorCQlhcmd2X2FycmF5X3B1c2goJmZldGNoX2FyZ3YsICItdiIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmZmV0Y2hfYXJndiwgIi0tbXVsdGlwbGUiKTsKKwlpZiAoYXJnYyA8IDIpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmZmV0Y2hfYXJndiwgImRlZmF1bHQiKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2goJmZldGNoX2FyZ3YsIGFyZ3ZbaV0pOworCisJaWYgKHN0cmNtcChmZXRjaF9hcmd2LmFyZ3ZbZmV0Y2hfYXJndi5hcmdjLTFdLCAiZGVmYXVsdCIpID09IDApIHsKKwkJZ2l0X2NvbmZpZyhnZXRfcmVtb3RlX2RlZmF1bHQsICZkZWZhdWx0X2RlZmluZWQpOworCQlpZiAoIWRlZmF1bHRfZGVmaW5lZCkgeworCQkJYXJndl9hcnJheV9wb3AoJmZldGNoX2FyZ3YpOworCQkJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCAiLS1hbGwiKTsKKwkJfQorCX0KKworCXJldHZhbCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGZldGNoX2FyZ3YuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmZldGNoX2FyZ3YpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2FsbF9mZXRjaF9yZWZzcGVjcyhjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2dlbnRseShrZXksIE5VTEwsIE5VTEwsIDEpOworfQorCitzdGF0aWMgdm9pZCBhZGRfYnJhbmNoZXMoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICoqYnJhbmNoZXMsCisJCQkgY29uc3QgY2hhciAqa2V5KQoreworCWNvbnN0IGNoYXIgKnJlbW90ZW5hbWUgPSByZW1vdGUtPm5hbWU7CisJaW50IG1pcnJvciA9IHJlbW90ZS0+bWlycm9yOworCXN0cnVjdCBzdHJidWYgcmVmc3BlYyA9IFNUUkJVRl9JTklUOworCisJZm9yICg7ICpicmFuY2hlczsgYnJhbmNoZXMrKykKKwkJYWRkX2JyYW5jaChrZXksICpicmFuY2hlcywgcmVtb3RlbmFtZSwgbWlycm9yLCAmcmVmc3BlYyk7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVmc3BlYyk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JlbW90ZV9icmFuY2hlcyhjb25zdCBjaGFyICpyZW1vdGVuYW1lLCBjb25zdCBjaGFyICoqYnJhbmNoZXMsCisJCQkJaW50IGFkZF9tb2RlKQoreworCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCisJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy5mZXRjaCIsIHJlbW90ZW5hbWUpOworCisJcmVtb3RlID0gcmVtb3RlX2dldChyZW1vdGVuYW1lKTsKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZSwgMSkpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZSAnJXMnIiksIHJlbW90ZW5hbWUpOworCisJaWYgKCFhZGRfbW9kZSAmJiByZW1vdmVfYWxsX2ZldGNoX3JlZnNwZWNzKGtleS5idWYpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCQlyZXR1cm4gMTsKKwl9CisJYWRkX2JyYW5jaGVzKHJlbW90ZSwgYnJhbmNoZXMsIGtleS5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmtleSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2JyYW5jaGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgYWRkX21vZGUgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnXDAnLCAiYWRkIiwgJmFkZF9tb2RlLCBOXygiYWRkIGJyYW5jaCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fcmVtb3RlX3NldGJyYW5jaGVzX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA9PSAwKSB7CisJCWVycm9yKF8oIm5vIHJlbW90ZSBzcGVjaWZpZWQiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9zZXRicmFuY2hlc191c2FnZSwgb3B0aW9ucyk7CisJfQorCWFyZ3ZbYXJnY10gPSBOVUxMOworCisJcmV0dXJuIHNldF9yZW1vdGVfYnJhbmNoZXMoYXJndlswXSwgYXJndiArIDEsIGFkZF9tb2RlKTsKK30KKworc3RhdGljIGludCBnZXRfdXJsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgcHVzaF9tb2RlID0gMCwgYWxsX21vZGUgPSAwOworCWNvbnN0IGNoYXIgKnJlbW90ZW5hbWUgPSBOVUxMOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwljb25zdCBjaGFyICoqdXJsOworCWludCB1cmxfbnI7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdcMCcsICJwdXNoIiwgJnB1c2hfbW9kZSwKKwkJCSBOXygicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiKSksCisJCU9QVF9CT09MKCdcMCcsICJhbGwiLCAmYWxsX21vZGUsCisJCQkgTl8oInJldHVybiBhbGwgVVJMcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9nZXR1cmxfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX2dldHVybF91c2FnZSwgb3B0aW9ucyk7CisKKwlyZW1vdGVuYW1lID0gYXJndlswXTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVtb3RlbmFtZSk7CisJaWYgKCFyZW1vdGVfaXNfY29uZmlndXJlZChyZW1vdGUsIDEpKQorCQlkaWUoXygiTm8gc3VjaCByZW1vdGUgJyVzJyIpLCByZW1vdGVuYW1lKTsKKworCXVybF9uciA9IDA7CisJaWYgKHB1c2hfbW9kZSkgeworCQl1cmwgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9CisJLyogZWxzZSBmZXRjaCBtb2RlICovCisKKwkvKiBVc2UgdGhlIGZldGNoIFVSTCB3aGVuIG5vIHB1c2ggVVJMcyB3ZXJlIGZvdW5kIG9yIHJlcXVlc3RlZC4gKi8KKwlpZiAoIXVybF9ucikgeworCQl1cmwgPSByZW1vdGUtPnVybDsKKwkJdXJsX25yID0gcmVtb3RlLT51cmxfbnI7CisJfQorCisJaWYgKCF1cmxfbnIpCisJCWRpZShfKCJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIiksIHJlbW90ZW5hbWUpOworCisJaWYgKGFsbF9tb2RlKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykKKwkJCXByaW50Zl9sbigiJXMiLCB1cmxbaV0pOworCX0gZWxzZSB7CisJCXByaW50Zl9sbigiJXMiLCAqdXJsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfdXJsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgcHVzaF9tb2RlID0gMCwgYWRkX21vZGUgPSAwLCBkZWxldGVfbW9kZSA9IDA7CisJaW50IG1hdGNoZXMgPSAwLCBuZWdhdGl2ZV9tYXRjaGVzID0gMDsKKwljb25zdCBjaGFyICpyZW1vdGVuYW1lID0gTlVMTDsKKwljb25zdCBjaGFyICpuZXd1cmwgPSBOVUxMOworCWNvbnN0IGNoYXIgKm9sZHVybCA9IE5VTEw7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXJlZ2V4X3Qgb2xkX3JlZ2V4OworCWNvbnN0IGNoYXIgKip1cmxzZXQ7CisJaW50IHVybHNldF9ucjsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWVfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdcMCcsICJwdXNoIiwgJnB1c2hfbW9kZSwKKwkJCSBOXygibWFuaXB1bGF0ZSBwdXNoIFVSTHMiKSksCisJCU9QVF9CT09MKCdcMCcsICJhZGQiLCAmYWRkX21vZGUsCisJCQkgTl8oImFkZCBVUkwiKSksCisJCU9QVF9CT09MKCdcMCcsICJkZWxldGUiLCAmZGVsZXRlX21vZGUsCisJCQkgICAgTl8oImRlbGV0ZSBVUkxzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3NldHVybF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJaWYgKGFkZF9tb2RlICYmIGRlbGV0ZV9tb2RlKQorCQlkaWUoXygiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIikpOworCisJaWYgKGFyZ2MgPCAzIHx8IGFyZ2MgPiA0IHx8ICgoYWRkX21vZGUgfHwgZGVsZXRlX21vZGUpICYmIGFyZ2MgIT0gMykpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9zZXR1cmxfdXNhZ2UsIG9wdGlvbnMpOworCisJcmVtb3RlbmFtZSA9IGFyZ3ZbMV07CisJbmV3dXJsID0gYXJndlsyXTsKKwlpZiAoYXJnYyA+IDMpCisJCW9sZHVybCA9IGFyZ3ZbM107CisKKwlpZiAoZGVsZXRlX21vZGUpCisJCW9sZHVybCA9IG5ld3VybDsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVtb3RlbmFtZSk7CisJaWYgKCFyZW1vdGVfaXNfY29uZmlndXJlZChyZW1vdGUsIDEpKQorCQlkaWUoXygiTm8gc3VjaCByZW1vdGUgJyVzJyIpLCByZW1vdGVuYW1lKTsKKworCWlmIChwdXNoX21vZGUpIHsKKwkJc3RyYnVmX2FkZGYoJm5hbWVfYnVmLCAicmVtb3RlLiVzLnB1c2h1cmwiLCByZW1vdGVuYW1lKTsKKwkJdXJsc2V0ID0gcmVtb3RlLT5wdXNodXJsOworCQl1cmxzZXRfbnIgPSByZW1vdGUtPnB1c2h1cmxfbnI7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoJm5hbWVfYnVmLCAicmVtb3RlLiVzLnVybCIsIHJlbW90ZW5hbWUpOworCQl1cmxzZXQgPSByZW1vdGUtPnVybDsKKwkJdXJsc2V0X25yID0gcmVtb3RlLT51cmxfbnI7CisJfQorCisJLyogU3BlY2lhbCBjYXNlcyB0aGF0IGFkZCBuZXcgZW50cnkuICovCisJaWYgKCghb2xkdXJsICYmICFkZWxldGVfbW9kZSkgfHwgYWRkX21vZGUpIHsKKwkJaWYgKGFkZF9tb2RlKQorCQkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIobmFtZV9idWYuYnVmLCBuZXd1cmwsCisJCQkJCQkgICAgICAgIl4kIiwgMCk7CisJCWVsc2UKKwkJCWdpdF9jb25maWdfc2V0KG5hbWVfYnVmLmJ1ZiwgbmV3dXJsKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogT2xkIFVSTCBzcGVjaWZpZWQuIERlbWFuZCB0aGF0IG9uZSBtYXRjaGVzLiAqLworCWlmIChyZWdjb21wKCZvbGRfcmVnZXgsIG9sZHVybCwgUkVHX0VYVEVOREVEKSkKKwkJZGllKF8oIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIpLCBvbGR1cmwpOworCisJZm9yIChpID0gMDsgaSA8IHVybHNldF9ucjsgaSsrKQorCQlpZiAoIXJlZ2V4ZWMoJm9sZF9yZWdleCwgdXJsc2V0W2ldLCAwLCBOVUxMLCAwKSkKKwkJCW1hdGNoZXMrKzsKKwkJZWxzZQorCQkJbmVnYXRpdmVfbWF0Y2hlcysrOworCWlmICghZGVsZXRlX21vZGUgJiYgIW1hdGNoZXMpCisJCWRpZShfKCJObyBzdWNoIFVSTCBmb3VuZDogJXMiKSwgb2xkdXJsKTsKKwlpZiAoZGVsZXRlX21vZGUgJiYgIW5lZ2F0aXZlX21hdGNoZXMgJiYgIXB1c2hfbW9kZSkKKwkJZGllKF8oIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIpKTsKKworCXJlZ2ZyZWUoJm9sZF9yZWdleCk7CisKKwlpZiAoIWRlbGV0ZV9tb2RlKQorCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihuYW1lX2J1Zi5idWYsIG5ld3VybCwgb2xkdXJsLCAwKTsKKwllbHNlCisJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKG5hbWVfYnVmLmJ1ZiwgTlVMTCwgb2xkdXJsLCAxKTsKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmbmFtZV9idWYpOworCXJldHVybiAwOworfQorCitpbnQgY21kX3JlbW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlpbnQgcmVzdWx0OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwkJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAoYXJnYyA8IDEpCisJCXJlc3VsdCA9IHNob3dfYWxsKCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiYWRkIikpCisJCXJlc3VsdCA9IGFkZChhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJyZW5hbWUiKSkKKwkJcmVzdWx0ID0gbXYoYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicm0iKSB8fCAhc3RyY21wKGFyZ3ZbMF0sICJyZW1vdmUiKSkKKwkJcmVzdWx0ID0gcm0oYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2V0LWhlYWQiKSkKKwkJcmVzdWx0ID0gc2V0X2hlYWQoYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2V0LWJyYW5jaGVzIikpCisJCXJlc3VsdCA9IHNldF9icmFuY2hlcyhhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJnZXQtdXJsIikpCisJCXJlc3VsdCA9IGdldF91cmwoYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2V0LXVybCIpKQorCQlyZXN1bHQgPSBzZXRfdXJsKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNob3ciKSkKKwkJcmVzdWx0ID0gc2hvdyhhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJwcnVuZSIpKQorCQlyZXN1bHQgPSBwcnVuZShhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ1cGRhdGUiKSkKKwkJcmVzdWx0ID0gdXBkYXRlKGFyZ2MsIGFyZ3YpOworCWVsc2UgeworCQllcnJvcihfKCJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCXJldHVybiByZXN1bHQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVwYWNrLmMgYi9idWlsdGluL3JlcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ODE3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlcGFjay5jCkBAIC0wLDAgKzEsNTgwIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJtaWR4LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKworc3RhdGljIGludCBkZWx0YV9iYXNlX29mZnNldCA9IDE7CitzdGF0aWMgaW50IHBhY2tfa2VwdF9vYmplY3RzID0gLTE7CitzdGF0aWMgaW50IHdyaXRlX2JpdG1hcHMgPSAtMTsKK3N0YXRpYyBpbnQgdXNlX2RlbHRhX2lzbGFuZHM7CitzdGF0aWMgY2hhciAqcGFja2RpciwgKnBhY2t0bXA7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBnaXRfcmVwYWNrX3VzYWdlW10gPSB7CisJTl8oImdpdCByZXBhY2sgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciBpbmNyZW1lbnRhbF9iaXRtYXBfY29uZmxpY3RfZXJyb3JbXSA9IE5fKAorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCispOworCisKK3N0YXRpYyBpbnQgcmVwYWNrX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJyZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IikpIHsKKwkJZGVsdGFfYmFzZV9vZmZzZXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJyZXBhY2sucGFja2tlcHRvYmplY3RzIikpIHsKKwkJcGFja19rZXB0X29iamVjdHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJyZXBhY2sud3JpdGViaXRtYXBzIikgfHwKKwkgICAgIXN0cmNtcCh2YXIsICJwYWNrLndyaXRlYml0bWFwcyIpKSB7CisJCXdyaXRlX2JpdG1hcHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJyZXBhY2sudXNlZGVsdGFpc2xhbmRzIikpIHsKKwkJdXNlX2RlbHRhX2lzbGFuZHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworLyoKKyAqIFJlbW92ZSB0ZW1wb3JhcnkgJEdJVF9PQkpFQ1RfRElSRUNUT1JZL3BhY2svLnRtcC0kJC1wYWNrLSogZmlsZXMuCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wb3JhcnlfZmlsZXModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBkaXJsZW4sIHByZWZpeGxlbjsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICplOworCisJZGlyID0gb3BlbmRpcihwYWNrZGlyKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuOworCisJLyogUG9pbnQgYXQgdGhlIHNsYXNoIGF0IHRoZSBlbmQgb2YgIi4uLi9vYmplY3RzL3BhY2svIiAqLworCWRpcmxlbiA9IHN0cmxlbihwYWNrZGlyKSArIDE7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBwYWNrdG1wKTsKKwkvKiBIb2xkIHRoZSBsZW5ndGggb2YgICIudG1wLSVkLXBhY2stIiAqLworCXByZWZpeGxlbiA9IGJ1Zi5sZW4gLSBkaXJsZW47CisKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpKSB7CisJCWlmIChzdHJuY21wKGUtPmRfbmFtZSwgYnVmLmJ1ZiArIGRpcmxlbiwgcHJlZml4bGVuKSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfc2V0bGVuKCZidWYsIGRpcmxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZS0+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+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIpLAorCU5VTEwsCit9OworCitzdGF0aWMgaW50IG91dGYodm9pZCAqZHVtbXksIG1tYnVmZmVyX3QgKnB0ciwgaW50IG5idWYpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5idWY7IGkrKykKKwkJaWYgKHdyaXRlX2luX2Z1bGwoMSwgcHRyW2ldLnB0ciwgcHRyW2ldLnNpemUpIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX3R3byhjb25zdCBjaGFyICpmaWxlMSwgY29uc3QgY2hhciAqbGFiZWwxLAorCQljb25zdCBjaGFyICpmaWxlMiwgY29uc3QgY2hhciAqbGFiZWwyKQoreworCXhwcGFyYW1fdCB4cHA7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCXhkZW1pdGNiX3QgZWNiOworCW1tZmlsZV90IG1pbnVzLCBwbHVzOworCWludCByZXQ7CisKKwlpZiAocmVhZF9tbWZpbGUoJm1pbnVzLCBmaWxlMSkgfHwgcmVhZF9tbWZpbGUoJnBsdXMsIGZpbGUyKSkKKwkJcmV0dXJuIC0xOworCisJcHJpbnRmKCItLS0gYS8lc1xuKysrIGIvJXNcbiIsIGxhYmVsMSwgbGFiZWwyKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCXhwcC5mbGFncyA9IDA7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJeGVjZmcuY3R4bGVuID0gMzsKKwllY2Iub3V0X2h1bmsgPSBOVUxMOworCWVjYi5vdXRfbGluZSA9IG91dGY7CisJcmV0ID0geGRpX2RpZmYoJm1pbnVzLCAmcGx1cywgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKKworCWZyZWUobWludXMucHRyKTsKKwlmcmVlKHBsdXMucHRyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY21kX3JlcmVyZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWVyZ2VfcnIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlpbnQgaSwgYXV0b3VwZGF0ZSA9IC0xLCBmbGFncyA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NFVF9JTlQoMCwgInJlcmVyZS1hdXRvdXBkYXRlIiwgJmF1dG91cGRhdGUsCisJCQlOXygicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiKSwgMSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCByZXJlcmVfdXNhZ2UsIDApOworCisJZ2l0X2NvbmZpZyhnaXRfeG1lcmdlX2NvbmZpZywgTlVMTCk7CisKKwlpZiAoYXV0b3VwZGF0ZSA9PSAxKQorCQlmbGFncyA9IFJFUkVSRV9BVVRPVVBEQVRFOworCWlmIChhdXRvdXBkYXRlID09IDApCisJCWZsYWdzID0gUkVSRVJFX05PQVVUT1VQREFURTsKKworCWlmIChhcmdjIDwgMSkKKwkJcmV0dXJuIHJlcG9fcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCBmbGFncyk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAiZm9yZ2V0IikpIHsKKwkJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCQlpZiAoYXJnYyA8IDIpCisJCQl3YXJuaW5nKF8oIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIikpOworCQlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsIFBBVEhTUEVDX1BSRUZFUl9DV0QsCisJCQkgICAgICAgcHJlZml4LCBhcmd2ICsgMSk7CisJCXJldHVybiByZXJlcmVfZm9yZ2V0KHRoZV9yZXBvc2l0b3J5LCAmcGF0aHNwZWMpOworCX0KKworCWlmICghc3RyY21wKGFyZ3ZbMF0sICJjbGVhciIpKSB7CisJCXJlcmVyZV9jbGVhcih0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImdjIikpCisJCXJlcmVyZV9nYyh0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzdGF0dXMiKSkgeworCQlpZiAoc2V0dXBfcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCAmbWVyZ2VfcnIsCisJCQkJIGZsYWdzIHwgUkVSRVJFX1JFQURPTkxZKSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLm5yOyBpKyspCisJCQlwcmludGYoIiVzXG4iLCBtZXJnZV9yci5pdGVtc1tpXS5zdHJpbmcpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVtYWluaW5nIikpIHsKKwkJcmVyZXJlX3JlbWFpbmluZyh0aGVfcmVwb3NpdG9yeSwgJm1lcmdlX3JyKTsKKwkJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLm5yOyBpKyspIHsKKwkJCWlmIChtZXJnZV9yci5pdGVtc1tpXS51dGlsICE9IFJFUkVSRV9SRVNPTFZFRCkKKwkJCQlwcmludGYoIiVzXG4iLCBtZXJnZV9yci5pdGVtc1tpXS5zdHJpbmcpOworCQkJZWxzZQorCQkJCS8qIHByZXBhcmUgZm9yIGxhdGVyIGNhbGwgdG8KKwkJCQkgKiBzdHJpbmdfbGlzdF9jbGVhcigpICovCisJCQkJbWVyZ2VfcnIuaXRlbXNbaV0udXRpbCA9IE5VTEw7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImRpZmYiKSkgeworCQlpZiAoc2V0dXBfcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCAmbWVyZ2VfcnIsCisJCQkJIGZsYWdzIHwgUkVSRVJFX1JFQURPTkxZKSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBtZXJnZV9yci5pdGVtc1tpXS5zdHJpbmc7CisJCQljb25zdCBzdHJ1Y3QgcmVyZXJlX2lkICppZCA9IG1lcmdlX3JyLml0ZW1zW2ldLnV0aWw7CisJCQlpZiAoZGlmZl90d28ocmVyZXJlX3BhdGgoaWQsICJwcmVpbWFnZSIpLCBwYXRoLCBwYXRoLCBwYXRoKSkKKwkJCQlkaWUoXygidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciKSwgcmVyZXJlX3BhdGgoaWQsIE5VTEwpKTsKKwkJfQorCX0gZWxzZQorCQl1c2FnZV93aXRoX29wdGlvbnMocmVyZXJlX3VzYWdlLCBvcHRpb25zKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZtZXJnZV9yciwgMSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Jlc2V0LmMgYi9idWlsdGluL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyMjhjMwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVzZXQuYwpAQCAtMCwwICsxLDQ0NCBAQAorLyoKKyAqICJnaXQgcmVzZXQiIGJ1aWx0aW4gY29tbWFuZAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDYXJsb3MgUmljYQorICoKKyAqIEJhc2VkIG9uIGdpdC1yZXNldC5zaCwgd2hpY2ggaXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgTGludXMgVG9ydmFsZHMgYW5kIEp1bmlvIEMgSGFtYW5vCisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInByZXR0eS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKworI2RlZmluZSBSRUZSRVNIX0lOREVYX0RFTEFZX1dBUk5JTkdfSU5fTVMgKDIgKiAxMDAwKQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9yZXNldF91c2FnZVtdID0geworCU5fKCJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iKSwKKwlOXygiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIpLAorCU5fKCJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iKSwKKwlOXygiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIiksCisJTlVMTAorfTsKKworZW51bSByZXNldF90eXBlIHsgTUlYRUQsIFNPRlQsIEhBUkQsIE1FUkdFLCBLRUVQLCBOT05FIH07CitzdGF0aWMgY29uc3QgY2hhciAqcmVzZXRfdHlwZV9uYW1lc1tdID0geworCU5fKCJtaXhlZCIpLCBOXygic29mdCIpLCBOXygiaGFyZCIpLCBOXygibWVyZ2UiKSwgTl8oImtlZXAiKSwgTlVMTAorfTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfbWVyZ2Uodm9pZCkKK3sKKwlyZXR1cm4gIWFjY2VzcyhnaXRfcGF0aF9tZXJnZV9oZWFkKHRoZV9yZXBvc2l0b3J5KSwgRl9PSyk7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfaW5kZXgoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgcmVzZXRfdHlwZSwgaW50IHF1aWV0KQoreworCWludCBpLCBuciA9IDA7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjWzJdOworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCWludCByZXQgPSAtMTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJb3B0cy5tZXJnZSA9IDE7CisJaWYgKCFxdWlldCkKKwkJb3B0cy52ZXJib3NlX3VwZGF0ZSA9IDE7CisJc3dpdGNoIChyZXNldF90eXBlKSB7CisJY2FzZSBLRUVQOgorCWNhc2UgTUVSR0U6CisJCW9wdHMudXBkYXRlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIQVJEOgorCQlvcHRzLnVwZGF0ZSA9IDE7CisJCS8qIGZhbGx0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJb3B0cy5yZXNldCA9IDE7CisJfQorCisJcmVhZF9jYWNoZV91bm1lcmdlZCgpOworCisJaWYgKHJlc2V0X3R5cGUgPT0gS0VFUCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCQlpZiAoZ2V0X29pZCgiSEVBRCIsICZoZWFkX29pZCkpCisJCQlyZXR1cm4gZXJyb3IoXygiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iKSk7CisJCWlmICghZmlsbF90cmVlX2Rlc2NyaXB0b3IodGhlX3JlcG9zaXRvcnksIGRlc2MgKyBuciwgJmhlYWRfb2lkKSkKKwkJCXJldHVybiBlcnJvcihfKCJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIikpOworCQlucisrOworCQlvcHRzLmZuID0gdHdvd2F5X21lcmdlOworCX0KKworCWlmICghZmlsbF90cmVlX2Rlc2NyaXB0b3IodGhlX3JlcG9zaXRvcnksIGRlc2MgKyBuciwgb2lkKSkgeworCQllcnJvcihfKCJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIpLCBvaWRfdG9faGV4KG9pZCkpOworCQlnb3RvIG91dDsKKwl9CisJbnIrKzsKKworCWlmICh1bnBhY2tfdHJlZXMobnIsIGRlc2MsICZvcHRzKSkKKwkJZ290byBvdXQ7CisKKwlpZiAocmVzZXRfdHlwZSA9PSBNSVhFRCB8fCByZXNldF90eXBlID09IEhBUkQpIHsKKwkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3Qob2lkKTsKKwkJcHJpbWVfY2FjaGVfdHJlZSh0aGVfcmVwb3NpdG9yeSwgdGhlX3JlcG9zaXRvcnktPmluZGV4LCB0cmVlKTsKKwl9CisKKwlyZXQgPSAwOworCitvdXQ6CisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCWZyZWUoKHZvaWQgKilkZXNjW2ldLmJ1ZmZlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbmV3X2hlYWRfbGluZShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXByaW50ZihfKCJIRUFEIGlzIG5vdyBhdCAlcyIpLAorCQlmaW5kX3VuaXF1ZV9hYmJyZXYoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpKTsKKworCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJmJ1Zik7CisJaWYgKGJ1Zi5sZW4gPiAwKQorCQlwcmludGYoIiAlcyIsIGJ1Zi5idWYpOworCXB1dGNoYXIoJ1xuJyk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9pbmRleF9mcm9tX2RpZmYoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJaW50IGludGVudF90b19hZGQgPSAqKGludCAqKWRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcS0+cXVldWVbaV0tPm9uZTsKKwkJaW50IGlzX21pc3NpbmcgPSAhKG9uZS0+bW9kZSAmJiAhaXNfbnVsbF9vaWQoJm9uZS0+b2lkKSk7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkJaWYgKGlzX21pc3NpbmcgJiYgIWludGVudF90b19hZGQpIHsKKwkJCXJlbW92ZV9maWxlX2Zyb21fY2FjaGUob25lLT5wYXRoKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KCZ0aGVfaW5kZXgsIG9uZS0+bW9kZSwgJm9uZS0+b2lkLCBvbmUtPnBhdGgsCisJCQkJICAgICAgMCwgMCk7CisJCWlmICghY2UpCisJCQlkaWUoXygibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIpLAorCQkJICAgIG9uZS0+cGF0aCk7CisJCWlmIChpc19taXNzaW5nKSB7CisJCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfSU5URU5UX1RPX0FERDsKKwkJCXNldF9vYmplY3RfbmFtZV9mb3JfaW50ZW50X3RvX2FkZF9lbnRyeShjZSk7CisJCX0KKwkJYWRkX2NhY2hlX2VudHJ5KGNlLCBBRERfQ0FDSEVfT0tfVE9fQUREIHwgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UpOworCX0KK30KKworc3RhdGljIGludCByZWFkX2Zyb21fdHJlZShjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJICBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwKKwkJCSAgaW50IGludGVudF90b19hZGQpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHQ7CisKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCWNvcHlfcGF0aHNwZWMoJm9wdC5wYXRoc3BlYywgcGF0aHNwZWMpOworCW9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJb3B0LmZvcm1hdF9jYWxsYmFjayA9IHVwZGF0ZV9pbmRleF9mcm9tX2RpZmY7CisJb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gJmludGVudF90b19hZGQ7CisJb3B0LmZsYWdzLm92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWcgPSAxOworCW9wdC5yZXBvID0gdGhlX3JlcG9zaXRvcnk7CisKKwlpZiAoZG9fZGlmZl9jYWNoZSh0cmVlX29pZCwgJm9wdCkpCisJCXJldHVybiAxOworCWRpZmZjb3JlX3N0ZCgmb3B0KTsKKwlkaWZmX2ZsdXNoKCZvcHQpOworCWNsZWFyX3BhdGhzcGVjKCZvcHQucGF0aHNwZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yZWZsb2dfbWVzc2FnZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqYWN0aW9uLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJldikKK3sKKwljb25zdCBjaGFyICpybGEgPSBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIik7CisKKwlzdHJidWZfcmVzZXQoc2IpOworCWlmIChybGEpCisJCXN0cmJ1Zl9hZGRmKHNiLCAiJXM6ICVzIiwgcmxhLCBhY3Rpb24pOworCWVsc2UgaWYgKHJldikKKwkJc3RyYnVmX2FkZGYoc2IsICJyZXNldDogbW92aW5nIHRvICVzIiwgcmV2KTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKHNiLCAicmVzZXQ6ICVzIiwgYWN0aW9uKTsKK30KKworc3RhdGljIHZvaWQgZGllX2lmX3VubWVyZ2VkX2NhY2hlKGludCByZXNldF90eXBlKQoreworCWlmIChpc19tZXJnZSgpIHx8IHVubWVyZ2VkX2NhY2hlKCkpCisJCWRpZShfKCJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIiksCisJCSAgICBfKHJlc2V0X3R5cGVfbmFtZXNbcmVzZXRfdHlwZV0pKTsKKworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hcmdzKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgICAgICBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICAgaW50IHBhdGNoX21vZGUsCisJCSAgICAgICBjb25zdCBjaGFyICoqcmV2X3JldCkKK3sKKwljb25zdCBjaGFyICpyZXYgPSAiSEVBRCI7CisJc3RydWN0IG9iamVjdF9pZCB1bnVzZWQ7CisJLyoKKwkgKiBQb3NzaWJsZSBhcmd1bWVudHMgYXJlOgorCSAqCisJICogZ2l0IHJlc2V0IFstb3B0c10gWzxyZXY+XQorCSAqIGdpdCByZXNldCBbLW9wdHNdIDx0cmVlPiBbPHBhdGhzPi4uLl0KKwkgKiBnaXQgcmVzZXQgWy1vcHRzXSA8dHJlZT4gLS0gWzxwYXRocz4uLi5dCisJICogZ2l0IHJlc2V0IFstb3B0c10gLS0gWzxwYXRocz4uLi5dCisJICogZ2l0IHJlc2V0IFstb3B0c10gPHBhdGhzPi4uLgorCSAqCisJICogQXQgdGhpcyBwb2ludCwgYXJndiBwb2ludHMgaW1tZWRpYXRlbHkgYWZ0ZXIgWy1vcHRzXS4KKwkgKi8KKworCWlmIChhcmd2WzBdKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICItLSIpKSB7CisJCQlhcmd2Kys7IC8qIHJlc2V0IHRvIEhFQUQsIHBvc3NpYmx5IHdpdGggcGF0aHMgKi8KKwkJfSBlbHNlIGlmIChhcmd2WzFdICYmICFzdHJjbXAoYXJndlsxXSwgIi0tIikpIHsKKwkJCXJldiA9IGFyZ3ZbMF07CisJCQlhcmd2ICs9IDI7CisJCX0KKwkJLyoKKwkJICogT3RoZXJ3aXNlLCBhcmd2WzBdIGNvdWxkIGJlIGVpdGhlciA8cmV2PiBvciA8cGF0aHM+IGFuZAorCQkgKiBoYXMgdG8gYmUgdW5hbWJpZ3VvdXMuIElmIHRoZXJlIGlzIGEgc2luZ2xlIGFyZ3VtZW50LCBpdAorCQkgKiBjYW4gbm90IGJlIGEgdHJlZQorCQkgKi8KKwkJZWxzZSBpZiAoKCFhcmd2WzFdICYmICFnZXRfb2lkX2NvbW1pdHRpc2goYXJndlswXSwgJnVudXNlZCkpIHx8CisJCQkgKGFyZ3ZbMV0gJiYgIWdldF9vaWRfdHJlZWlzaChhcmd2WzBdLCAmdW51c2VkKSkpIHsKKwkJCS8qCisJCQkgKiBPaywgYXJndlswXSBsb29rcyBsaWtlIGEgY29tbWl0L3RyZWU7IGl0IHNob3VsZCBub3QKKwkJCSAqIGJlIGEgZmlsZW5hbWUuCisJCQkgKi8KKwkJCXZlcmlmeV9ub25fZmlsZW5hbWUocHJlZml4LCBhcmd2WzBdKTsKKwkJCXJldiA9ICphcmd2Kys7CisJCX0gZWxzZSB7CisJCQkvKiBPdGhlcndpc2Ugd2UgdHJlYXQgdGhpcyBhcyBhIGZpbGVuYW1lICovCisJCQl2ZXJpZnlfZmlsZW5hbWUocHJlZml4LCBhcmd2WzBdLCAxKTsKKwkJfQorCX0KKwkqcmV2X3JldCA9IHJldjsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJcGFyc2VfcGF0aHNwZWMocGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8CisJCSAgICAgICAocGF0Y2hfbW9kZSA/IFBBVEhTUEVDX1BSRUZJWF9PUklHSU4gOiAwKSwKKwkJICAgICAgIHByZWZpeCwgYXJndik7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfcmVmcyhjb25zdCBjaGFyICpyZXYsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgdXBkYXRlX3JlZl9zdGF0dXM7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvcmlnID0gTlVMTCwgb2lkX29yaWcsCisJCSpvbGRfb3JpZyA9IE5VTEwsIG9pZF9vbGRfb3JpZzsKKworCWlmICghZ2V0X29pZCgiT1JJR19IRUFEIiwgJm9pZF9vbGRfb3JpZykpCisJCW9sZF9vcmlnID0gJm9pZF9vbGRfb3JpZzsKKwlpZiAoIWdldF9vaWQoIkhFQUQiLCAmb2lkX29yaWcpKSB7CisJCW9yaWcgPSAmb2lkX29yaWc7CisJCXNldF9yZWZsb2dfbWVzc2FnZSgmbXNnLCAidXBkYXRpbmcgT1JJR19IRUFEIiwgTlVMTCk7CisJCXVwZGF0ZV9yZWYobXNnLmJ1ZiwgIk9SSUdfSEVBRCIsIG9yaWcsIG9sZF9vcmlnLCAwLAorCQkJICAgVVBEQVRFX1JFRlNfTVNHX09OX0VSUik7CisJfSBlbHNlIGlmIChvbGRfb3JpZykKKwkJZGVsZXRlX3JlZihOVUxMLCAiT1JJR19IRUFEIiwgb2xkX29yaWcsIDApOworCXNldF9yZWZsb2dfbWVzc2FnZSgmbXNnLCAidXBkYXRpbmcgSEVBRCIsIHJldik7CisJdXBkYXRlX3JlZl9zdGF0dXMgPSB1cGRhdGVfcmVmKG1zZy5idWYsICJIRUFEIiwgb2lkLCBvcmlnLCAwLAorCQkJCSAgICAgICBVUERBVEVfUkVGU19NU0dfT05fRVJSKTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwlyZXR1cm4gdXBkYXRlX3JlZl9zdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3Jlc2V0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJzdWJtb2R1bGUucmVjdXJzZSIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfc3VibW9kdWxlX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF9yZXNldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcmVzZXRfdHlwZSA9IE5PTkUsIHVwZGF0ZV9yZWZfc3RhdHVzID0gMCwgcXVpZXQgPSAwOworCWludCBwYXRjaF9tb2RlID0gMCwgcGF0aHNwZWNfZmlsZV9udWwgPSAwLCB1bmJvcm47CisJY29uc3QgY2hhciAqcmV2LCAqcGF0aHNwZWNfZnJvbV9maWxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJaW50IGludGVudF90b19hZGQgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiKSksCisJCU9QVF9TRVRfSU5UKDAsICJtaXhlZCIsICZyZXNldF90eXBlLAorCQkJCQkJTl8oInJlc2V0IEhFQUQgYW5kIGluZGV4IiksIE1JWEVEKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNvZnQiLCAmcmVzZXRfdHlwZSwgTl8oInJlc2V0IG9ubHkgSEVBRCIpLCBTT0ZUKSwKKwkJT1BUX1NFVF9JTlQoMCwgImhhcmQiLCAmcmVzZXRfdHlwZSwKKwkJCQlOXygicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIpLCBIQVJEKSwKKwkJT1BUX1NFVF9JTlQoMCwgIm1lcmdlIiwgJnJlc2V0X3R5cGUsCisJCQkJTl8oInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiKSwgTUVSR0UpLAorCQlPUFRfU0VUX0lOVCgwLCAia2VlcCIsICZyZXNldF90eXBlLAorCQkJCU5fKCJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiKSwgS0VFUCksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgTlVMTCwKKwkJCSAgICAicmVzZXQiLCAiY29udHJvbCByZWN1cnNpdmUgdXBkYXRpbmcgb2Ygc3VibW9kdWxlcyIsCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRywgb3B0aW9uX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlc193b3JrdHJlZV91cGRhdGVyIH0sCisJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX21vZGUsIE5fKCJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIpKSwKKwkJT1BUX0JPT0woJ04nLCAiaW50ZW50LXRvLWFkZCIsICZpbnRlbnRfdG9fYWRkLAorCQkJCU5fKCJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIpKSwKKwkJT1BUX1BBVEhTUEVDX0ZST01fRklMRSgmcGF0aHNwZWNfZnJvbV9maWxlKSwKKwkJT1BUX1BBVEhTUEVDX0ZJTEVfTlVMKCZwYXRoc3BlY19maWxlX251bCksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9yZXNldF9jb25maWcsIE5VTEwpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woInJlc2V0LnF1aWV0IiwgJnF1aWV0KTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3Jlc2V0X3VzYWdlLAorCQkJCQkJUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCXBhcnNlX2FyZ3MoJnBhdGhzcGVjLCBhcmd2LCBwcmVmaXgsIHBhdGNoX21vZGUsICZyZXYpOworCisJaWYgKHBhdGhzcGVjX2Zyb21fZmlsZSkgeworCQlpZiAocGF0Y2hfbW9kZSkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIikpOworCisJCWlmIChwYXRoc3BlYy5ucikKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcGF0aHNwZWMsIDAsCisJCQkJICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMLAorCQkJCSAgICBwcmVmaXgsIHBhdGhzcGVjX2Zyb21fZmlsZSwgcGF0aHNwZWNfZmlsZV9udWwpOworCX0gZWxzZSBpZiAocGF0aHNwZWNfZmlsZV9udWwpIHsKKwkJZGllKF8oIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiKSk7CisJfQorCisJdW5ib3JuID0gIXN0cmNtcChyZXYsICJIRUFEIikgJiYgZ2V0X29pZCgiSEVBRCIsICZvaWQpOworCWlmICh1bmJvcm4pIHsKKwkJLyogcmVzZXQgb24gdW5ib3JuIGJyYW5jaDogdHJlYXQgYXMgcmVzZXQgdG8gZW1wdHkgdHJlZSAqLworCQlvaWRjcHkoJm9pZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisJfSBlbHNlIGlmICghcGF0aHNwZWMubnIgJiYgIXBhdGNoX21vZGUpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQlpZiAoZ2V0X29pZF9jb21taXR0aXNoKHJldiwgJm9pZCkpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIpLCByZXYpOworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJCWlmICghY29tbWl0KQorCQkJZGllKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iKSwgcmV2KTsKKwkJb2lkY3B5KCZvaWQsICZjb21taXQtPm9iamVjdC5vaWQpOworCX0gZWxzZSB7CisJCXN0cnVjdCB0cmVlICp0cmVlOworCQlpZiAoZ2V0X29pZF90cmVlaXNoKHJldiwgJm9pZCkpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIiksIHJldik7CisJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KCZvaWQpOworCQlpZiAoIXRyZWUpCisJCQlkaWUoXygiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIpLCByZXYpOworCQlvaWRjcHkoJm9pZCwgJnRyZWUtPm9iamVjdC5vaWQpOworCX0KKworCWlmIChwYXRjaF9tb2RlKSB7CisJCWlmIChyZXNldF90eXBlICE9IE5PTkUpCisJCQlkaWUoXygiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IikpOworCQl0cmFjZTJfY21kX21vZGUoInBhdGNoLWludGVyYWN0aXZlIik7CisJCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKHJldiwgIi0tcGF0Y2g9cmVzZXQiLCAmcGF0aHNwZWMpOworCX0KKworCS8qIGdpdCByZXNldCB0cmVlIFstLV0gcGF0aHMuLi4gY2FuIGJlIHVzZWQgdG8KKwkgKiBsb2FkIGNob3NlbiBwYXRocyBmcm9tIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHdpdGhvdXQKKwkgKiBhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZSBub3IgSEVBRC4gKi8KKwlpZiAocGF0aHNwZWMubnIpIHsKKwkJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQpCisJCQl3YXJuaW5nKF8oIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIpKTsKKwkJZWxzZSBpZiAocmVzZXRfdHlwZSAhPSBOT05FKQorCQkJZGllKF8oIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIpLAorCQkJCQlfKHJlc2V0X3R5cGVfbmFtZXNbcmVzZXRfdHlwZV0pKTsKKwl9CisJaWYgKHJlc2V0X3R5cGUgPT0gTk9ORSkKKwkJcmVzZXRfdHlwZSA9IE1JWEVEOyAvKiBieSBkZWZhdWx0ICovCisKKwlpZiAocGF0aHNwZWMubnIpCisJCXRyYWNlMl9jbWRfbW9kZSgicGF0aCIpOworCWVsc2UKKwkJdHJhY2UyX2NtZF9tb2RlKHJlc2V0X3R5cGVfbmFtZXNbcmVzZXRfdHlwZV0pOworCisJaWYgKHJlc2V0X3R5cGUgIT0gU09GVCAmJiAocmVzZXRfdHlwZSAhPSBNSVhFRCB8fCBnZXRfZ2l0X3dvcmtfdHJlZSgpKSkKKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwlpZiAocmVzZXRfdHlwZSA9PSBNSVhFRCAmJiBpc19iYXJlX3JlcG9zaXRvcnkoKSkKKwkJZGllKF8oIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IiksCisJCSAgICBfKHJlc2V0X3R5cGVfbmFtZXNbcmVzZXRfdHlwZV0pKTsKKworCWlmIChpbnRlbnRfdG9fYWRkICYmIHJlc2V0X3R5cGUgIT0gTUlYRUQpCisJCWRpZShfKCItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIpKTsKKworCS8qIFNvZnQgcmVzZXQgZG9lcyBub3QgdG91Y2ggdGhlIGluZGV4IGZpbGUgbm9yIHRoZSB3b3JraW5nIHRyZWUKKwkgKiBhdCBhbGwsIGJ1dCByZXF1aXJlcyB0aGVtIGluIGEgZ29vZCBvcmRlci4gIE90aGVyIHJlc2V0cyByZXNldAorCSAqIHRoZSBpbmRleCBmaWxlIHRvIHRoZSB0cmVlIG9iamVjdCB3ZSBhcmUgc3dpdGNoaW5nIHRvLiAqLworCWlmIChyZXNldF90eXBlID09IFNPRlQgfHwgcmVzZXRfdHlwZSA9PSBLRUVQKQorCQlkaWVfaWZfdW5tZXJnZWRfY2FjaGUocmVzZXRfdHlwZSk7CisKKwlpZiAocmVzZXRfdHlwZSAhPSBTT0ZUKSB7CisJCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwkJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQpIHsKKwkJCWludCBmbGFncyA9IHF1aWV0ID8gUkVGUkVTSF9RVUlFVCA6IFJFRlJFU0hfSU5fUE9SQ0VMQUlOOworCQkJaWYgKHJlYWRfZnJvbV90cmVlKCZwYXRoc3BlYywgJm9pZCwgaW50ZW50X3RvX2FkZCkpCisJCQkJcmV0dXJuIDE7CisJCQl0aGVfaW5kZXgudXBkYXRlZF9za2lwd29ya3RyZWUgPSAxOworCQkJaWYgKCFxdWlldCAmJiBnZXRfZ2l0X3dvcmtfdHJlZSgpKSB7CisJCQkJdWludDY0X3QgdF9iZWdpbiwgdF9kZWx0YV9pbl9tczsKKworCQkJCXRfYmVnaW4gPSBnZXRuYW5vdGltZSgpOworCQkJCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgZmxhZ3MsIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgIF8oIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IikpOworCQkJCXRfZGVsdGFfaW5fbXMgPSAoZ2V0bmFub3RpbWUoKSAtIHRfYmVnaW4pIC8gMTAwMDAwMDsKKwkJCQlpZiAoYWR2aWNlX3Jlc2V0X3F1aWV0X3dhcm5pbmcgJiYgdF9kZWx0YV9pbl9tcyA+IFJFRlJFU0hfSU5ERVhfREVMQVlfV0FSTklOR19JTl9NUykgeworCQkJCQlwcmludGYoXygiXG5JdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKwkJCQkJCSJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKwkJCQkJCSJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iKSwgdF9kZWx0YV9pbl9tcyAvIDEwMDAuMCk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaW50IGVyciA9IHJlc2V0X2luZGV4KCZvaWQsIHJlc2V0X3R5cGUsIHF1aWV0KTsKKwkJCWlmIChyZXNldF90eXBlID09IEtFRVAgJiYgIWVycikKKwkJCQllcnIgPSByZXNldF9pbmRleCgmb2lkLCBNSVhFRCwgcXVpZXQpOworCQkJaWYgKGVycikKKwkJCQlkaWUoXygiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iKSwgcmV2KTsKKwkJfQorCisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2ssIENPTU1JVF9MT0NLKSkKKwkJCWRpZShfKCJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIikpOworCX0KKworCWlmICghcGF0aHNwZWMubnIgJiYgIXVuYm9ybikgeworCQkvKiBBbnkgcmVzZXRzIHdpdGhvdXQgcGF0aHMgdXBkYXRlIEhFQUQgdG8gdGhlIGhlYWQgYmVpbmcKKwkJICogc3dpdGNoZWQgdG8sIHNhdmluZyB0aGUgcHJldmlvdXMgaGVhZCBpbiBPUklHX0hFQUQgYmVmb3JlLiAqLworCQl1cGRhdGVfcmVmX3N0YXR1cyA9IHJlc2V0X3JlZnMocmV2LCAmb2lkKTsKKworCQlpZiAocmVzZXRfdHlwZSA9PSBIQVJEICYmICF1cGRhdGVfcmVmX3N0YXR1cyAmJiAhcXVpZXQpCisJCQlwcmludF9uZXdfaGVhZF9saW5lKGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKSk7CisJfQorCWlmICghcGF0aHNwZWMubnIpCisJCXJlbW92ZV9icmFuY2hfc3RhdGUodGhlX3JlcG9zaXRvcnksIDApOworCisJcmV0dXJuIHVwZGF0ZV9yZWZfc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXYtbGlzdC5jIGIvYnVpbHRpbi9yZXYtbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MjAxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Jldi1saXN0LmMKQEAgLTAsMCArMSw2ODcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1iaXRtYXAuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJncmFwaC5oIgorI2luY2x1ZGUgImJpc2VjdC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKyNpbmNsdWRlICJvaWRzZXQuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciByZXZfbGlzdF91c2FnZVtdID0KKyJnaXQgcmV2LWxpc3QgW09QVElPTl0gPGNvbW1pdC1pZD4uLi4gWyAtLSBwYXRocy4uLiBdXG4iCisiICBsaW1pdGluZyBvdXRwdXQ6XG4iCisiICAgIC0tbWF4LWNvdW50PTxuPlxuIgorIiAgICAtLW1heC1hZ2U9PGVwb2NoPlxuIgorIiAgICAtLW1pbi1hZ2U9PGVwb2NoPlxuIgorIiAgICAtLXNwYXJzZVxuIgorIiAgICAtLW5vLW1lcmdlc1xuIgorIiAgICAtLW1pbi1wYXJlbnRzPTxuPlxuIgorIiAgICAtLW5vLW1pbi1wYXJlbnRzXG4iCisiICAgIC0tbWF4LXBhcmVudHM9PG4+XG4iCisiICAgIC0tbm8tbWF4LXBhcmVudHNcbiIKKyIgICAgLS1yZW1vdmUtZW1wdHlcbiIKKyIgICAgLS1hbGxcbiIKKyIgICAgLS1icmFuY2hlc1xuIgorIiAgICAtLXRhZ3NcbiIKKyIgICAgLS1yZW1vdGVzXG4iCisiICAgIC0tc3RkaW5cbiIKKyIgICAgLS1xdWlldFxuIgorIiAgb3JkZXJpbmcgb3V0cHV0OlxuIgorIiAgICAtLXRvcG8tb3JkZXJcbiIKKyIgICAgLS1kYXRlLW9yZGVyXG4iCisiICAgIC0tcmV2ZXJzZVxuIgorIiAgZm9ybWF0dGluZyBvdXRwdXQ6XG4iCisiICAgIC0tcGFyZW50c1xuIgorIiAgICAtLWNoaWxkcmVuXG4iCisiICAgIC0tb2JqZWN0cyB8IC0tb2JqZWN0cy1lZGdlXG4iCisiICAgIC0tdW5wYWNrZWRcbiIKKyIgICAgLS1oZWFkZXIgfCAtLXByZXR0eVxuIgorIiAgICAtLVtuby1db2JqZWN0LW5hbWVzXG4iCisiICAgIC0tYWJicmV2PTxuPiB8IC0tbm8tYWJicmV2XG4iCisiICAgIC0tYWJicmV2LWNvbW1pdFxuIgorIiAgICAtLWxlZnQtcmlnaHRcbiIKKyIgICAgLS1jb3VudFxuIgorIiAgc3BlY2lhbCBwdXJwb3NlOlxuIgorIiAgICAtLWJpc2VjdFxuIgorIiAgICAtLWJpc2VjdC12YXJzXG4iCisiICAgIC0tYmlzZWN0LWFsbCIKKzsKKworc3RhdGljIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CitzdGF0aWMgdW5zaWduZWQgcHJvZ3Jlc3NfY291bnRlcjsKKworc3RhdGljIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgZmlsdGVyX29wdGlvbnM7CitzdGF0aWMgc3RydWN0IG9pZHNldCBvbWl0dGVkX29iamVjdHM7CitzdGF0aWMgaW50IGFyZ19wcmludF9vbWl0dGVkOyAvKiBwcmludCBvYmplY3RzIG9taXR0ZWQgYnkgZmlsdGVyICovCisKK3N0YXRpYyBzdHJ1Y3Qgb2lkc2V0IG1pc3Npbmdfb2JqZWN0czsKK2VudW0gbWlzc2luZ19hY3Rpb24geworCU1BX0VSUk9SID0gMCwgICAgLyogZmFpbCBpZiBhbnkgbWlzc2luZyBvYmplY3RzIGFyZSBlbmNvdW50ZXJlZCAqLworCU1BX0FMTE9XX0FOWSwgICAgLyogc2lsZW50bHkgYWxsb3cgQUxMIG1pc3Npbmcgb2JqZWN0cyAqLworCU1BX1BSSU5ULCAgICAgICAgLyogcHJpbnQgQUxMIG1pc3Npbmcgb2JqZWN0cyBpbiBzcGVjaWFsIHNlY3Rpb24gKi8KKwlNQV9BTExPV19QUk9NSVNPUiwgLyogc2lsZW50bHkgYWxsb3cgYWxsIG1pc3NpbmcgUFJPTUlTT1Igb2JqZWN0cyAqLworfTsKK3N0YXRpYyBlbnVtIG1pc3NpbmdfYWN0aW9uIGFyZ19taXNzaW5nX2FjdGlvbjsKKworLyogZGlzcGxheSBvbmx5IHRoZSBvaWQgb2YgZWFjaCBvYmplY3QgZW5jb3VudGVyZWQgKi8KK3N0YXRpYyBpbnQgYXJnX3Nob3dfb2JqZWN0X25hbWVzID0gMTsKKworI2RlZmluZSBERUZBVUxUX09JRFNFVF9TSVpFICAgICAoMTYqMTAyNCkKKworc3RhdGljIHZvaWQgZmluaXNoX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvID0gZGF0YTsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBpbmZvLT5yZXZzOworCisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytwcm9ncmVzc19jb3VudGVyKTsKKworCWlmIChpbmZvLT5mbGFncyAmIFJFVl9MSVNUX1FVSUVUKSB7CisJCWZpbmlzaF9jb21taXQoY29tbWl0KTsKKwkJcmV0dXJuOworCX0KKworCWdyYXBoX3Nob3dfY29tbWl0KHJldnMtPmdyYXBoKTsKKworCWlmIChyZXZzLT5jb3VudCkgeworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBQQVRDSFNBTUUpCisJCQlyZXZzLT5jb3VudF9zYW1lKys7CisJCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQlyZXZzLT5jb3VudF9sZWZ0Kys7CisJCWVsc2UKKwkJCXJldnMtPmNvdW50X3JpZ2h0Kys7CisJCWZpbmlzaF9jb21taXQoY29tbWl0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpbmZvLT5zaG93X3RpbWVzdGFtcCkKKwkJcHJpbnRmKCIlIlBSSXRpbWUiICIsIGNvbW1pdC0+ZGF0ZSk7CisJaWYgKGluZm8tPmhlYWRlcl9wcmVmaXgpCisJCWZwdXRzKGluZm8tPmhlYWRlcl9wcmVmaXgsIHN0ZG91dCk7CisKKwlpZiAoIXJldnMtPmdyYXBoKQorCQlmcHV0cyhnZXRfcmV2aXNpb25fbWFyayhyZXZzLCBjb21taXQpLCBzdGRvdXQpOworCWlmIChyZXZzLT5hYmJyZXZfY29tbWl0ICYmIHJldnMtPmFiYnJldikKKwkJZnB1dHMoZmluZF91bmlxdWVfYWJicmV2KCZjb21taXQtPm9iamVjdC5vaWQsIHJldnMtPmFiYnJldiksCisJCSAgICAgIHN0ZG91dCk7CisJZWxzZQorCQlmcHV0cyhvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpLCBzdGRvdXQpOworCWlmIChyZXZzLT5wcmludF9wYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCXByaW50ZigiICVzIiwgb2lkX3RvX2hleCgmcGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZCkpOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKwl9CisJaWYgKHJldnMtPmNoaWxkcmVuLm5hbWUpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpjaGlsZHJlbjsKKworCQljaGlsZHJlbiA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT5jaGlsZHJlbiwgJmNvbW1pdC0+b2JqZWN0KTsKKwkJd2hpbGUgKGNoaWxkcmVuKSB7CisJCQlwcmludGYoIiAlcyIsIG9pZF90b19oZXgoJmNoaWxkcmVuLT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCQljaGlsZHJlbiA9IGNoaWxkcmVuLT5uZXh0OworCQl9CisJfQorCXNob3dfZGVjb3JhdGlvbnMocmV2cywgY29tbWl0KTsKKwlpZiAocmV2cy0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQlwdXRjaGFyKCcgJyk7CisJZWxzZQorCQlwdXRjaGFyKCdcbicpOworCisJaWYgKHJldnMtPnZlcmJvc2VfaGVhZGVyKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJCWN0eC5hYmJyZXYgPSByZXZzLT5hYmJyZXY7CisJCWN0eC5kYXRlX21vZGUgPSByZXZzLT5kYXRlX21vZGU7CisJCWN0eC5kYXRlX21vZGVfZXhwbGljaXQgPSByZXZzLT5kYXRlX21vZGVfZXhwbGljaXQ7CisJCWN0eC5mbXQgPSByZXZzLT5jb21taXRfZm9ybWF0OworCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwkJY3R4LmNvbG9yID0gcmV2cy0+ZGlmZm9wdC51c2VfY29sb3I7CisJCXByZXR0eV9wcmludF9jb21taXQoJmN0eCwgY29tbWl0LCAmYnVmKTsKKwkJaWYgKGJ1Zi5sZW4pIHsKKwkJCWlmIChyZXZzLT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCQkJZ3JhcGhfc2hvd19vbmVsaW5lKHJldnMtPmdyYXBoKTsKKworCQkJZ3JhcGhfc2hvd19jb21taXRfbXNnKHJldnMtPmdyYXBoLCBzdGRvdXQsICZidWYpOworCisJCQkvKgorCQkJICogQWRkIGEgbmV3bGluZSBhZnRlciB0aGUgY29tbWl0IG1lc3NhZ2UuCisJCQkgKgorCQkJICogVXN1YWxseSwgdGhpcyBuZXdsaW5lIHByb2R1Y2VzIGEgYmxhbmsKKwkJCSAqIHBhZGRpbmcgbGluZSBiZXR3ZWVuIGVudHJpZXMsIGluIHdoaWNoIGNhc2UKKwkJCSAqIHdlIG5lZWQgdG8gYWRkIGdyYXBoIHBhZGRpbmcgb24gdGhpcyBsaW5lLgorCQkJICoKKwkJCSAqIEhvd2V2ZXIsIHRoZSBjb21taXQgbWVzc2FnZSBtYXkgbm90IGVuZCBpbiBhCisJCQkgKiBuZXdsaW5lLiAgSW4gdGhpcyBjYXNlIHRoZSBuZXdsaW5lIHNpbXBseQorCQkJICogZW5kcyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZSwKKwkJCSAqIGFuZCB3ZSBkb24ndCBuZWVkIGFueSBncmFwaCBvdXRwdXQuICAoVGhpcworCQkJICogYWx3YXlzIGhhcHBlbnMgd2l0aCBDTUlUX0ZNVF9PTkVMSU5FLCBhbmQgaXQKKwkJCSAqIGhhcHBlbnMgd2l0aCBDTUlUX0ZNVF9VU0VSRk9STUFUIHdoZW4gdGhlCisJCQkgKiBmb3JtYXQgZG9lc24ndCBleHBsaWNpdGx5IGVuZCBpbiBhIG5ld2xpbmUuKQorCQkJICovCisJCQlpZiAoYnVmLmxlbiAmJiBidWYuYnVmW2J1Zi5sZW4gLSAxXSA9PSAnXG4nKQorCQkJCWdyYXBoX3Nob3dfcGFkZGluZyhyZXZzLT5ncmFwaCk7CisJCQlwdXRjaGFyKGluZm8tPmhkcl90ZXJtaW5hdGlvbik7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogSWYgdGhlIG1lc3NhZ2UgYnVmZmVyIGlzIGVtcHR5LCBqdXN0IHNob3cKKwkJCSAqIHRoZSByZXN0IG9mIHRoZSBncmFwaCBvdXRwdXQgZm9yIHRoaXMKKwkJCSAqIGNvbW1pdC4KKwkJCSAqLworCQkJaWYgKGdyYXBoX3Nob3dfcmVtYWluZGVyKHJldnMtPmdyYXBoKSkKKwkJCQlwdXRjaGFyKCdcbicpOworCQkJaWYgKHJldnMtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkKKwkJCQlwdXRjaGFyKCdcbicpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0gZWxzZSB7CisJCWlmIChncmFwaF9zaG93X3JlbWFpbmRlcihyZXZzLT5ncmFwaCkpCisJCQlwdXRjaGFyKCdcbicpOworCX0KKwltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CisJZmluaXNoX2NvbW1pdChjb21taXQpOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpZiAoY29tbWl0LT5wYXJlbnRzKSB7CisJCWZyZWVfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwl9CisJZnJlZV9jb21taXRfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cywKKwkJCSAgIGNvbW1pdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW5pc2hfb2JqZWN0X19tYShzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJLyoKKwkgKiBXaGV0aGVyIG9yIG5vdCB3ZSB0cnkgdG8gZHluYW1pY2FsbHkgZmV0Y2ggbWlzc2luZyBvYmplY3RzCisJICogZnJvbSB0aGUgc2VydmVyLCB3ZSBjdXJyZW50bHkgRE8gTk9UIGhhdmUgdGhlIG9iamVjdC4gIFdlCisJICogY2FuIGVpdGhlciBwcmludCwgYWxsb3cgKGlnbm9yZSksIG9yIGNvbmRpdGlvbmFsbHkgYWxsb3cKKwkgKiAoaWdub3JlKSB0aGVtLgorCSAqLworCXN3aXRjaCAoYXJnX21pc3NpbmdfYWN0aW9uKSB7CisJY2FzZSBNQV9FUlJPUjoKKwkJZGllKCJtaXNzaW5nICVzIG9iamVjdCAnJXMnIiwKKwkJICAgIHR5cGVfbmFtZShvYmotPnR5cGUpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCQlyZXR1cm47CisKKwljYXNlIE1BX0FMTE9XX0FOWToKKwkJcmV0dXJuOworCisJY2FzZSBNQV9QUklOVDoKKwkJb2lkc2V0X2luc2VydCgmbWlzc2luZ19vYmplY3RzLCAmb2JqLT5vaWQpOworCQlyZXR1cm47CisKKwljYXNlIE1BX0FMTE9XX1BST01JU09SOgorCQlpZiAoaXNfcHJvbWlzb3Jfb2JqZWN0KCZvYmotPm9pZCkpCisJCQlyZXR1cm47CisJCWRpZSgidW5leHBlY3RlZCBtaXNzaW5nICVzIG9iamVjdCAnJXMnIiwKKwkJICAgIHR5cGVfbmFtZShvYmotPnR5cGUpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlCVUcoInVuaGFuZGxlZCBtaXNzaW5nX2FjdGlvbiIpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgaW50IGZpbmlzaF9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvID0gY2JfZGF0YTsKKwlpZiAob2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHRoZV9yZXBvc2l0b3J5LCAmb2JqLT5vaWQsIE5VTEwsIDApIDwgMCkgeworCQlmaW5pc2hfb2JqZWN0X19tYShvYmopOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGluZm8tPnJldnMtPnZlcmlmeV9vYmplY3RzICYmICFvYmotPnBhcnNlZCAmJiBvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2JqLT5vaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJldl9saXN0X2luZm8gKmluZm8gPSBjYl9kYXRhOworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IGluZm8tPnJldnM7CisKKwlpZiAoZmluaXNoX29iamVjdChvYmosIG5hbWUsIGNiX2RhdGEpKQorCQlyZXR1cm47CisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytwcm9ncmVzc19jb3VudGVyKTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBSRVZfTElTVF9RVUlFVCkKKwkJcmV0dXJuOworCisJaWYgKHJldnMtPmNvdW50KSB7CisJCS8qCisJCSAqIFRoZSBvYmplY3QgY291bnQgaXMgYWx3YXlzIGFjY3VtdWxhdGVkIGluIHRoZSAuY291bnRfcmlnaHQKKwkJICogZmllbGQgZm9yIHRyYXZlcnNhbCB0aGF0IGlzIG5vdCBhIGxlZnQtcmlnaHQgdHJhdmVyc2FsLAorCQkgKiBhbmQgY21kX3Jldl9saXN0KCkgbWFkZSBzdXJlIHRoYXQgYSAuY291bnQgcmVxdWVzdCB0aGF0CisJCSAqIHdhbnRzIHRvIGNvdW50IG5vbi1jb21taXQgb2JqZWN0cywgd2hpY2ggaXMgaGFuZGxlZCBieQorCQkgKiB0aGUgc2hvd19vYmplY3QoKSBjYWxsYmFjaywgZG9lcyBub3QgYXNrIGZvciAubGVmdF9yaWdodC4KKwkJICovCisJCXJldnMtPmNvdW50X3JpZ2h0Kys7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXJnX3Nob3dfb2JqZWN0X25hbWVzKQorCQlzaG93X29iamVjdF93aXRoX25hbWUoc3Rkb3V0LCBvYmosIG5hbWUpOworCWVsc2UKKwkJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19lZGdlKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlwcmludGYoIi0lc1xuIiwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Zhcl9zdHIoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWwpCit7CisJcHJpbnRmKCIlcz0nJXMnXG4iLCB2YXIsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Zhcl9pbnQoY29uc3QgY2hhciAqdmFyLCBpbnQgdmFsKQoreworCXByaW50ZigiJXM9JWRcbiIsIHZhciwgdmFsKTsKK30KKworc3RhdGljIGludCBzaG93X2Jpc2VjdF92YXJzKHN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvLCBpbnQgcmVhY2hlcywgaW50IGFsbCkKK3sKKwlpbnQgY250LCBmbGFncyA9IGluZm8tPmZsYWdzOworCWNoYXIgaGV4W0dJVF9NQVhfSEVYU1ogKyAxXSA9ICIiOworCXN0cnVjdCBjb21taXRfbGlzdCAqdHJpZWQ7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gaW5mby0+cmV2czsKKworCWlmICghcmV2cy0+Y29tbWl0cykKKwkJcmV0dXJuIDE7CisKKwlyZXZzLT5jb21taXRzID0gZmlsdGVyX3NraXBwZWQocmV2cy0+Y29tbWl0cywgJnRyaWVkLAorCQkJCSAgICAgICBmbGFncyAmIEJJU0VDVF9TSE9XX0FMTCwKKwkJCQkgICAgICAgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAqIHJldnMtPmNvbW1pdHMgY2FuIHJlYWNoICJyZWFjaGVzIiBjb21taXRzIGFtb25nCisJICogImFsbCIgY29tbWl0cy4gIElmIGl0IGlzIGdvb2QsIHRoZW4gdGhlcmUgYXJlCisJICogKGFsbC1yZWFjaGVzKSBjb21taXRzIGxlZnQgdG8gYmUgYmlzZWN0ZWQuCisJICogT24gdGhlIG90aGVyIGhhbmQsIGlmIGl0IGlzIGJhZCwgdGhlbiB0aGUgc2V0CisJICogdG8gYmlzZWN0IGlzICJyZWFjaGVzIi4KKwkgKiBBIGJpc2VjdCBzZXQgb2Ygc2l6ZSBOIGhhcyAoTi0xKSBjb21taXRzIGZ1cnRoZXIKKwkgKiB0byB0ZXN0LCBhcyB3ZSBhbHJlYWR5IGtub3cgb25lIGJhZCBvbmUuCisJICovCisJY250ID0gYWxsIC0gcmVhY2hlczsKKwlpZiAoY250IDwgcmVhY2hlcykKKwkJY250ID0gcmVhY2hlczsKKworCWlmIChyZXZzLT5jb21taXRzKQorCQlvaWRfdG9faGV4X3IoaGV4LCAmcmV2cy0+Y29tbWl0cy0+aXRlbS0+b2JqZWN0Lm9pZCk7CisKKwlpZiAoZmxhZ3MgJiBCSVNFQ1RfU0hPV19BTEwpIHsKKwkJdHJhdmVyc2VfY29tbWl0X2xpc3QocmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LCBpbmZvKTsKKwkJcHJpbnRmKCItLS0tLS1cbiIpOworCX0KKworCXByaW50X3Zhcl9zdHIoImJpc2VjdF9yZXYiLCBoZXgpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9uciIsIGNudCAtIDEpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9nb29kIiwgYWxsIC0gcmVhY2hlcyAtIDEpOworCXByaW50X3Zhcl9pbnQoImJpc2VjdF9iYWQiLCByZWFjaGVzIC0gMSk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X2FsbCIsIGFsbCk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X3N0ZXBzIiwgZXN0aW1hdGVfYmlzZWN0X3N0ZXBzKGFsbCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19vYmplY3RfZmFzdCgKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCWludCBleGNsdWRlLAorCXVpbnQzMl90IG5hbWVfaGFzaCwKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqZm91bmRfcGFjaywKKwlvZmZfdCBmb3VuZF9vZmZzZXQpCit7CisJZnByaW50ZihzdGRvdXQsICIlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfbWlzc2luZ19hY3Rpb25fdmFsdWUoY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFsdWUsICJlcnJvciIpKSB7CisJCWFyZ19taXNzaW5nX2FjdGlvbiA9IE1BX0VSUk9SOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgImFsbG93LWFueSIpKSB7CisJCWFyZ19taXNzaW5nX2FjdGlvbiA9IE1BX0FMTE9XX0FOWTsKKwkJZmV0Y2hfaWZfbWlzc2luZyA9IDA7CisJCXJldHVybiAxOworCX0KKworCWlmICghc3RyY21wKHZhbHVlLCAicHJpbnQiKSkgeworCQlhcmdfbWlzc2luZ19hY3Rpb24gPSBNQV9QUklOVDsKKwkJZmV0Y2hfaWZfbWlzc2luZyA9IDA7CisJCXJldHVybiAxOworCX0KKworCWlmICghc3RyY21wKHZhbHVlLCAiYWxsb3ctcHJvbWlzb3IiKSkgeworCQlhcmdfbWlzc2luZ19hY3Rpb24gPSBNQV9BTExPV19QUk9NSVNPUjsKKwkJZmV0Y2hfaWZfbWlzc2luZyA9IDA7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRyeV9iaXRtYXBfY291bnQoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcikKK3sKKwl1aW50MzJfdCBjb21taXRfY291bnQgPSAwLAorCQkgdGFnX2NvdW50ID0gMCwKKwkJIHRyZWVfY291bnQgPSAwLAorCQkgYmxvYl9jb3VudCA9IDA7CisJaW50IG1heF9jb3VudDsKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0OworCisJLyogVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgY291bnRpbmcsIG5vdCBnZW5lcmFsIHRyYXZlcnNhbC4gKi8KKwlpZiAoIXJldnMtPmNvdW50KQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIEEgYml0bWFwIHJlc3VsdCBjYW4ndCBrbm93IGxlZnQvcmlnaHQsIGV0YywgYmVjYXVzZSB3ZSBkb24ndAorCSAqIGFjdHVhbGx5IHRyYXZlcnNlLgorCSAqLworCWlmIChyZXZzLT5sZWZ0X3JpZ2h0IHx8IHJldnMtPmNoZXJyeV9tYXJrKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIElmIHdlJ3JlIGNvdW50aW5nIHJlYWNoYWJsZSBvYmplY3RzLCB3ZSBjYW4ndCBoYW5kbGUgYSBtYXggY291bnQgb2YKKwkgKiBjb21taXRzIHRvIHRyYXZlcnNlLCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoaWNoIG9iamVjdHMgZ28gd2l0aCB3aGljaAorCSAqIGNvbW1pdC4KKwkgKi8KKwlpZiAocmV2cy0+bWF4X2NvdW50ID49IDAgJiYKKwkgICAgKHJldnMtPnRhZ19vYmplY3RzIHx8IHJldnMtPnRyZWVfb2JqZWN0cyB8fCByZXZzLT5ibG9iX29iamVjdHMpKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFRoaXMgbXVzdCBiZSBzYXZlZCBiZWZvcmUgZG9pbmcgYW55IHdhbGtpbmcsIHNpbmNlIHRoZSByZXZpc2lvbgorCSAqIG1hY2hpbmVyeSB3aWxsIGNvdW50IGl0IGRvd24gdG8gemVybyB3aGlsZSB0cmF2ZXJzaW5nLgorCSAqLworCW1heF9jb3VudCA9IHJldnMtPm1heF9jb3VudDsKKworCWJpdG1hcF9naXQgPSBwcmVwYXJlX2JpdG1hcF93YWxrKHJldnMsIGZpbHRlcik7CisJaWYgKCFiaXRtYXBfZ2l0KQorCQlyZXR1cm4gLTE7CisKKwljb3VudF9iaXRtYXBfY29tbWl0X2xpc3QoYml0bWFwX2dpdCwgJmNvbW1pdF9jb3VudCwKKwkJCQkgcmV2cy0+dHJlZV9vYmplY3RzID8gJnRyZWVfY291bnQgOiBOVUxMLAorCQkJCSByZXZzLT5ibG9iX29iamVjdHMgPyAmYmxvYl9jb3VudCA6IE5VTEwsCisJCQkJIHJldnMtPnRhZ19vYmplY3RzID8gJnRhZ19jb3VudCA6IE5VTEwpOworCWlmIChtYXhfY291bnQgPj0gMCAmJiBtYXhfY291bnQgPCBjb21taXRfY291bnQpCisJCWNvbW1pdF9jb3VudCA9IG1heF9jb3VudDsKKworCXByaW50ZigiJWRcbiIsIGNvbW1pdF9jb3VudCArIHRyZWVfY291bnQgKyBibG9iX2NvdW50ICsgdGFnX2NvdW50KTsKKwlmcmVlX2JpdG1hcF9pbmRleChiaXRtYXBfZ2l0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfYml0bWFwX3RyYXZlcnNhbChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKQoreworCXN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQ7CisKKwkvKgorCSAqIFdlIGNhbid0IHVzZSBhIGJpdG1hcCByZXN1bHQgd2l0aCBhIHRyYXZlcnNhbCBsaW1pdCwgc2luY2UgdGhlIHNldAorCSAqIG9mIGNvbW1pdHMgd2UnZCBnZXQgd291bGQgYmUgZXNzZW50aWFsbHkgcmFuZG9tLgorCSAqLworCWlmIChyZXZzLT5tYXhfY291bnQgPj0gMCkKKwkJcmV0dXJuIC0xOworCisJYml0bWFwX2dpdCA9IHByZXBhcmVfYml0bWFwX3dhbGsocmV2cywgZmlsdGVyKTsKKwlpZiAoIWJpdG1hcF9naXQpCisJCXJldHVybiAtMTsKKworCXRyYXZlcnNlX2JpdG1hcF9jb21taXRfbGlzdChiaXRtYXBfZ2l0LCByZXZzLCAmc2hvd19vYmplY3RfZmFzdCk7CisJZnJlZV9iaXRtYXBfaW5kZXgoYml0bWFwX2dpdCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfcmV2X2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IHJldl9saXN0X2luZm8gaW5mbzsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHNfcl9vcHQgPSB7CisJCS5hbGxvd19leGNsdWRlX3Byb21pc29yX29iamVjdHMgPSAxLAorCX07CisJaW50IGk7CisJaW50IGJpc2VjdF9saXN0ID0gMDsKKwlpbnQgYmlzZWN0X3Nob3dfdmFycyA9IDA7CisJaW50IGJpc2VjdF9maW5kX2FsbCA9IDA7CisJaW50IHVzZV9iaXRtYXBfaW5kZXggPSAwOworCWNvbnN0IGNoYXIgKnNob3dfcHJvZ3Jlc3MgPSBOVUxMOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShyZXZfbGlzdF91c2FnZSk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldnMsIHByZWZpeCk7CisJcmV2cy5hYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKwlyZXZzLmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9VTlNQRUNJRklFRDsKKworCS8qCisJICogU2NhbiB0aGUgYXJndW1lbnQgbGlzdCBiZWZvcmUgaW52b2tpbmcgc2V0dXBfcmV2aXNpb25zKCksIHNvIHRoYXQgd2UKKwkgKiBrbm93IGlmIGZldGNoX2lmX21pc3NpbmcgbmVlZHMgdG8gYmUgc2V0IHRvIDAuCisJICoKKwkgKiAiLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMiIGFjdHMgYXMgYSBwcmUtZmlsdGVyIG9uIG1pc3Npbmcgb2JqZWN0cworCSAqIGJ5IG5vdCBjcm9zc2luZyB0aGUgYm91bmRhcnkgZnJvbSByZWFsaXplZCBvYmplY3RzIHRvIHByb21pc29yCisJICogb2JqZWN0cy4KKwkgKgorCSAqIExldCAiLS1taXNzaW5nIiB0byBjb25kaXRpb25hbGx5IHNldCBmZXRjaF9pZl9taXNzaW5nLgorCSAqLworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMiKSkgeworCQkJZmV0Y2hfaWZfbWlzc2luZyA9IDA7CisJCQlyZXZzLmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLW1pc3Npbmc9IiwgJmFyZykpIHsKKwkJCWlmIChyZXZzLmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cykKKwkJCQlkaWUoXygiY2Fubm90IGNvbWJpbmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgYW5kIC0tbWlzc2luZyIpKTsKKwkJCWlmIChwYXJzZV9taXNzaW5nX2FjdGlvbl92YWx1ZShhcmcpKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGFyZ19taXNzaW5nX2FjdGlvbikKKwkJcmV2cy5kb19ub3RfZGllX29uX21pc3NpbmdfdHJlZSA9IDE7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCAmc19yX29wdCk7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJaW5mby5yZXZzID0gJnJldnM7CisJaWYgKHJldnMuYmlzZWN0KQorCQliaXNlY3RfbGlzdCA9IDE7CisKKwlpZiAocmV2cy5kaWZmb3B0LmZsYWdzLnF1aWNrKQorCQlpbmZvLmZsYWdzIHw9IFJFVl9MSVNUX1FVSUVUOworCWZvciAoaSA9IDEgOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWFkZXIiKSkgeworCQkJcmV2cy52ZXJib3NlX2hlYWRlciA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXRpbWVzdGFtcCIpKSB7CisJCQlpbmZvLnNob3dfdGltZXN0YW1wID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYmlzZWN0IikpIHsKKwkJCWJpc2VjdF9saXN0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYmlzZWN0LWFsbCIpKSB7CisJCQliaXNlY3RfbGlzdCA9IDE7CisJCQliaXNlY3RfZmluZF9hbGwgPSAxOworCQkJaW5mby5mbGFncyB8PSBCSVNFQ1RfU0hPV19BTEw7CisJCQlyZXZzLnNob3dfZGVjb3JhdGlvbnMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QtdmFycyIpKSB7CisJCQliaXNlY3RfbGlzdCA9IDE7CisJCQliaXNlY3Rfc2hvd192YXJzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tdXNlLWJpdG1hcC1pbmRleCIpKSB7CisJCQl1c2VfYml0bWFwX2luZGV4ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tdGVzdC1iaXRtYXAiKSkgeworCQkJdGVzdF9iaXRtYXBfd2FsaygmcmV2cyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1wcm9ncmVzcz0iLCAmYXJnKSkgeworCQkJc2hvd19wcm9ncmVzcyA9IGFyZzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHNraXBfcHJlZml4KGFyZywgKCItLSIgQ0xfQVJHX19GSUxURVIgIj0iKSwgJmFyZykpIHsKKwkJCXBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoJmZpbHRlcl9vcHRpb25zLCBhcmcpOworCQkJaWYgKGZpbHRlcl9vcHRpb25zLmNob2ljZSAmJiAhcmV2cy5ibG9iX29iamVjdHMpCisJCQkJZGllKF8oIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIikpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAoIi0tbm8tIiBDTF9BUkdfX0ZJTFRFUikpKSB7CisJCQlsaXN0X29iamVjdHNfZmlsdGVyX3NldF9ub19maWx0ZXIoJmZpbHRlcl9vcHRpb25zKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tZmlsdGVyLXByaW50LW9taXR0ZWQiKSkgeworCQkJYXJnX3ByaW50X29taXR0ZWQgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0cmNtcChhcmcsICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIpKQorCQkJY29udGludWU7IC8qIGFscmVhZHkgaGFuZGxlZCBhYm92ZSAqLworCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1taXNzaW5nPSIsICZhcmcpKQorCQkJY29udGludWU7IC8qIGFscmVhZHkgaGFuZGxlZCBhYm92ZSAqLworCisJCWlmICghc3RyY21wKGFyZywgKCItLW5vLW9iamVjdC1uYW1lcyIpKSkgeworCQkJYXJnX3Nob3dfb2JqZWN0X25hbWVzID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAoIi0tb2JqZWN0LW5hbWVzIikpKSB7CisJCQlhcmdfc2hvd19vYmplY3RfbmFtZXMgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQl1c2FnZShyZXZfbGlzdF91c2FnZSk7CisKKwl9CisJaWYgKHJldnMuY29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9VTlNQRUNJRklFRCkgeworCQkvKiBUaGUgY29tbWFuZCBsaW5lIGhhcyBhIC0tcHJldHR5ICAqLworCQlpbmZvLmhkcl90ZXJtaW5hdGlvbiA9ICdcbic7CisJCWlmIChyZXZzLmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkKKwkJCWluZm8uaGVhZGVyX3ByZWZpeCA9ICIiOworCQllbHNlCisJCQlpbmZvLmhlYWRlcl9wcmVmaXggPSAiY29tbWl0ICI7CisJfQorCWVsc2UgaWYgKHJldnMudmVyYm9zZV9oZWFkZXIpCisJCS8qIE9ubHkgLS1oZWFkZXIgd2FzIHNwZWNpZmllZCAqLworCQlyZXZzLmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9SQVc7CisKKwlpZiAoKCFyZXZzLmNvbW1pdHMgJiYgcmVmbG9nX3dhbGtfZW1wdHkocmV2cy5yZWZsb2dfaW5mbykgJiYKKwkgICAgICghKHJldnMudGFnX29iamVjdHMgfHwgcmV2cy50cmVlX29iamVjdHMgfHwgcmV2cy5ibG9iX29iamVjdHMpICYmCisJICAgICAgIXJldnMucGVuZGluZy5ucikgJiYKKwkgICAgICFyZXZzLnJldl9pbnB1dF9naXZlbiAmJiAhcmV2cy5yZWFkX2Zyb21fc3RkaW4pIHx8CisJICAgIHJldnMuZGlmZikKKwkJdXNhZ2UocmV2X2xpc3RfdXNhZ2UpOworCisJaWYgKHJldnMuc2hvd19ub3RlcykKKwkJZGllKF8oInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIpKTsKKworCWlmIChyZXZzLmNvdW50ICYmCisJICAgIChyZXZzLnRhZ19vYmplY3RzIHx8IHJldnMudHJlZV9vYmplY3RzIHx8IHJldnMuYmxvYl9vYmplY3RzKSAmJgorCSAgICAocmV2cy5sZWZ0X3JpZ2h0IHx8IHJldnMuY2hlcnJ5X21hcmspKQorCQlkaWUoXygibWFya2VkIGNvdW50aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tb2JqZWN0cyIpKTsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IChyZXZzLnZlcmJvc2VfaGVhZGVyIHx8CisJCQkgICAgICByZXZzLmdyZXBfZmlsdGVyLnBhdHRlcm5fbGlzdCB8fAorCQkJICAgICAgcmV2cy5ncmVwX2ZpbHRlci5oZWFkZXJfbGlzdCk7CisJaWYgKGJpc2VjdF9saXN0KQorCQlyZXZzLmxpbWl0ZWQgPSAxOworCisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhzaG93X3Byb2dyZXNzLCAwKTsKKworCWlmICh1c2VfYml0bWFwX2luZGV4KSB7CisJCWlmICghdHJ5X2JpdG1hcF9jb3VudCgmcmV2cywgJmZpbHRlcl9vcHRpb25zKSkKKwkJCXJldHVybiAwOworCQlpZiAoIXRyeV9iaXRtYXBfdHJhdmVyc2FsKCZyZXZzLCAmZmlsdGVyX29wdGlvbnMpKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwlpZiAocmV2cy50cmVlX29iamVjdHMpCisJCW1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZygmcmV2cywgc2hvd19lZGdlLCAwKTsKKworCWlmIChiaXNlY3RfbGlzdCkgeworCQlpbnQgcmVhY2hlcywgYWxsOworCisJCWZpbmRfYmlzZWN0aW9uKCZyZXZzLmNvbW1pdHMsICZyZWFjaGVzLCAmYWxsLCBiaXNlY3RfZmluZF9hbGwpOworCisJCWlmIChiaXNlY3Rfc2hvd192YXJzKQorCQkJcmV0dXJuIHNob3dfYmlzZWN0X3ZhcnMoJmluZm8sIHJlYWNoZXMsIGFsbCk7CisJfQorCisJaWYgKGFyZ19wcmludF9vbWl0dGVkKQorCQlvaWRzZXRfaW5pdCgmb21pdHRlZF9vYmplY3RzLCBERUZBVUxUX09JRFNFVF9TSVpFKTsKKwlpZiAoYXJnX21pc3NpbmdfYWN0aW9uID09IE1BX1BSSU5UKQorCQlvaWRzZXRfaW5pdCgmbWlzc2luZ19vYmplY3RzLCBERUZBVUxUX09JRFNFVF9TSVpFKTsKKworCXRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKAorCQkmZmlsdGVyX29wdGlvbnMsICZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsICZpbmZvLAorCQkoYXJnX3ByaW50X29taXR0ZWQgPyAmb21pdHRlZF9vYmplY3RzIDogTlVMTCkpOworCisJaWYgKGFyZ19wcmludF9vbWl0dGVkKSB7CisJCXN0cnVjdCBvaWRzZXRfaXRlciBpdGVyOworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CisJCW9pZHNldF9pdGVyX2luaXQoJm9taXR0ZWRfb2JqZWN0cywgJml0ZXIpOworCQl3aGlsZSAoKG9pZCA9IG9pZHNldF9pdGVyX25leHQoJml0ZXIpKSkKKwkJCXByaW50ZigifiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCQlvaWRzZXRfY2xlYXIoJm9taXR0ZWRfb2JqZWN0cyk7CisJfQorCWlmIChhcmdfbWlzc2luZ19hY3Rpb24gPT0gTUFfUFJJTlQpIHsKKwkJc3RydWN0IG9pZHNldF9pdGVyIGl0ZXI7CisJCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwkJb2lkc2V0X2l0ZXJfaW5pdCgmbWlzc2luZ19vYmplY3RzLCAmaXRlcik7CisJCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKQorCQkJcHJpbnRmKCI/JXNcbiIsIG9pZF90b19oZXgob2lkKSk7CisJCW9pZHNldF9jbGVhcigmbWlzc2luZ19vYmplY3RzKTsKKwl9CisKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlpZiAocmV2cy5jb3VudCkgeworCQlpZiAocmV2cy5sZWZ0X3JpZ2h0ICYmIHJldnMuY2hlcnJ5X21hcmspCisJCQlwcmludGYoIiVkXHQlZFx0JWRcbiIsIHJldnMuY291bnRfbGVmdCwgcmV2cy5jb3VudF9yaWdodCwgcmV2cy5jb3VudF9zYW1lKTsKKwkJZWxzZSBpZiAocmV2cy5sZWZ0X3JpZ2h0KQorCQkJcHJpbnRmKCIlZFx0JWRcbiIsIHJldnMuY291bnRfbGVmdCwgcmV2cy5jb3VudF9yaWdodCk7CisJCWVsc2UgaWYgKHJldnMuY2hlcnJ5X21hcmspCisJCQlwcmludGYoIiVkXHQlZFxuIiwgcmV2cy5jb3VudF9sZWZ0ICsgcmV2cy5jb3VudF9yaWdodCwgcmV2cy5jb3VudF9zYW1lKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFxuIiwgcmV2cy5jb3VudF9sZWZ0ICsgcmV2cy5jb3VudF9yaWdodCk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Jldi1wYXJzZS5jIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTAwZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwpAQCAtMCwwICsxLDk3OSBAQAorLyoKKyAqIHJldi1wYXJzZS5jCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3BsaXQtaW5kZXguaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworI2RlZmluZSBET19SRVZTCQkxCisjZGVmaW5lIERPX05PUkVWCTIKKyNkZWZpbmUgRE9fRkxBR1MJNAorI2RlZmluZSBET19OT05GTEFHUwk4CitzdGF0aWMgaW50IGZpbHRlciA9IH4wOworCitzdGF0aWMgY29uc3QgY2hhciAqZGVmOworCisjZGVmaW5lIE5PUk1BTCAwCisjZGVmaW5lIFJFVkVSU0VEIDEKK3N0YXRpYyBpbnQgc2hvd190eXBlID0gTk9STUFMOworCisjZGVmaW5lIFNIT1dfU1lNQk9MSUNfQVNJUyAxCisjZGVmaW5lIFNIT1dfU1lNQk9MSUNfRlVMTCAyCitzdGF0aWMgaW50IHN5bWJvbGljOworc3RhdGljIGludCBhYmJyZXY7CitzdGF0aWMgaW50IGFiYnJldl9yZWY7CitzdGF0aWMgaW50IGFiYnJldl9yZWZfc3RyaWN0Oworc3RhdGljIGludCBvdXRwdXRfc3E7CisKK3N0YXRpYyBpbnQgc3R1Y2tfbG9uZzsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9leGNsdWRlczsKKworLyoKKyAqIFNvbWUgYXJndW1lbnRzIGFyZSByZWxldmFudCAicmV2aXNpb24iIGFyZ3VtZW50cywKKyAqIG90aGVycyBhcmUgYWJvdXQgb3V0cHV0IGZvcm1hdCBvciBvdGhlciBkZXRhaWxzLgorICogVGhpcyBzb3J0cyBpdCBhbGwgb3V0LgorICovCitzdGF0aWMgaW50IGlzX3Jldl9hcmd1bWVudChjb25zdCBjaGFyICphcmcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnJldl9hcmdzW10gPSB7CisJCSItLWFsbCIsCisJCSItLWJpc2VjdCIsCisJCSItLWRlbnNlIiwKKwkJIi0tYnJhbmNoZXM9IiwKKwkJIi0tYnJhbmNoZXMiLAorCQkiLS1oZWFkZXIiLAorCQkiLS1pZ25vcmUtbWlzc2luZyIsCisJCSItLW1heC1hZ2U9IiwKKwkJIi0tbWF4LWNvdW50PSIsCisJCSItLW1pbi1hZ2U9IiwKKwkJIi0tbm8tbWVyZ2VzIiwKKwkJIi0tbWluLXBhcmVudHM9IiwKKwkJIi0tbm8tbWluLXBhcmVudHMiLAorCQkiLS1tYXgtcGFyZW50cz0iLAorCQkiLS1uby1tYXgtcGFyZW50cyIsCisJCSItLW9iamVjdHMiLAorCQkiLS1vYmplY3RzLWVkZ2UiLAorCQkiLS1wYXJlbnRzIiwKKwkJIi0tcHJldHR5IiwKKwkJIi0tcmVtb3Rlcz0iLAorCQkiLS1yZW1vdGVzIiwKKwkJIi0tZ2xvYj0iLAorCQkiLS1zcGFyc2UiLAorCQkiLS10YWdzPSIsCisJCSItLXRhZ3MiLAorCQkiLS10b3BvLW9yZGVyIiwKKwkJIi0tZGF0ZS1vcmRlciIsCisJCSItLXVucGFja2VkIiwKKwkJTlVMTAorCX07CisJY29uc3QgY2hhciAqKnAgPSByZXZfYXJnczsKKworCS8qIGFjY2VwdCAtPGRpZ2l0PiwgbGlrZSB0cmFkaXRpb25hbCAiaGVhZCIgKi8KKwlpZiAoKCphcmcgPT0gJy0nKSAmJiBpc2RpZ2l0KGFyZ1sxXSkpCisJCXJldHVybiAxOworCisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpzdHIgPSAqcCsrOworCQlpbnQgbGVuOworCQlpZiAoIXN0cikKKwkJCXJldHVybiAwOworCQlsZW4gPSBzdHJsZW4oc3RyKTsKKwkJaWYgKCFzdHJjbXAoYXJnLCBzdHIpIHx8CisJCSAgICAoc3RyW2xlbi0xXSA9PSAnPScgJiYgIXN0cm5jbXAoYXJnLCBzdHIsIGxlbikpKQorCQkJcmV0dXJuIDE7CisJfQorfQorCisvKiBPdXRwdXQgYXJndW1lbnQgYXMgYSBzdHJpbmcsIGVpdGhlciBTUSBvciBub3JtYWwgKi8KK3N0YXRpYyB2b2lkIHNob3coY29uc3QgY2hhciAqYXJnKQoreworCWlmIChvdXRwdXRfc3EpIHsKKwkJaW50IHNxID0gJ1wnJywgY2g7CisKKwkJcHV0Y2hhcihzcSk7CisJCXdoaWxlICgoY2ggPSAqYXJnKyspKSB7CisJCQlpZiAoY2ggPT0gc3EpCisJCQkJZnB1dHMoIidcXCciLCBzdGRvdXQpOworCQkJcHV0Y2hhcihjaCk7CisJCX0KKwkJcHV0Y2hhcihzcSk7CisJCXB1dGNoYXIoJyAnKTsKKwl9CisJZWxzZQorCQlwdXRzKGFyZyk7Cit9CisKKy8qIExpa2Ugc2hvdygpLCBidXQgd2l0aCBhIG5lZ2F0aW9uIHByZWZpeCBhY2NvcmRpbmcgdG8gdHlwZSAqLworc3RhdGljIHZvaWQgc2hvd193aXRoX3R5cGUoaW50IHR5cGUsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAodHlwZSAhPSBzaG93X3R5cGUpCisJCXB1dGNoYXIoJ14nKTsKKwlzaG93KGFyZyk7Cit9CisKKy8qIE91dHB1dCBhIHJldmlzaW9uLCBvbmx5IGlmIGZpbHRlciBhbGxvd3MgaXQgKi8KK3N0YXRpYyB2b2lkIHNob3dfcmV2KGludCB0eXBlLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCEoZmlsdGVyICYgRE9fUkVWUykpCisJCXJldHVybjsKKwlkZWYgPSBOVUxMOworCisJaWYgKChzeW1ib2xpYyB8fCBhYmJyZXZfcmVmKSAmJiBuYW1lKSB7CisJCWlmIChzeW1ib2xpYyA9PSBTSE9XX1NZTUJPTElDX0ZVTEwgfHwgYWJicmV2X3JlZikgeworCQkJc3RydWN0IG9iamVjdF9pZCBkaXNjYXJkOworCQkJY2hhciAqZnVsbDsKKworCQkJc3dpdGNoIChkd2ltX3JlZihuYW1lLCBzdHJsZW4obmFtZSksICZkaXNjYXJkLCAmZnVsbCkpIHsKKwkJCWNhc2UgMDoKKwkJCQkvKgorCQkJCSAqIE5vdCBmb3VuZCAtLSBub3QgYSByZWYuICBXZSBjb3VsZAorCQkJCSAqIGVtaXQgIm5hbWUiIGhlcmUsIGJ1dCBzeW1ib2xpYy1mdWxsCisJCQkJICogdXNlcnMgYXJlIGludGVyZXN0ZWQgaW4gZmluZGluZyB0aGUKKwkJCQkgKiByZWZzIHNwZWxsZWQgaW4gZnVsbCwgYW5kIHRoZXkgd291bGQKKwkJCQkgKiBuZWVkIHRvIGZpbHRlciBub24tcmVmcyBpZiB3ZSBkaWQgc28uCisJCQkJICovCisJCQkJYnJlYWs7CisJCQljYXNlIDE6IC8qIGhhcHB5ICovCisJCQkJaWYgKGFiYnJldl9yZWYpCisJCQkJCWZ1bGwgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihmdWxsLAorCQkJCQkJYWJicmV2X3JlZl9zdHJpY3QpOworCQkJCXNob3dfd2l0aF90eXBlKHR5cGUsIGZ1bGwpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDogLyogYW1iaWd1b3VzICovCisJCQkJZXJyb3IoInJlZm5hbWUgJyVzJyBpcyBhbWJpZ3VvdXMiLCBuYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZyZWUoZnVsbCk7CisJCX0gZWxzZSB7CisJCQlzaG93X3dpdGhfdHlwZSh0eXBlLCBuYW1lKTsKKwkJfQorCX0KKwllbHNlIGlmIChhYmJyZXYpCisJCXNob3dfd2l0aF90eXBlKHR5cGUsIGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIGFiYnJldikpOworCWVsc2UKKwkJc2hvd193aXRoX3R5cGUodHlwZSwgb2lkX3RvX2hleChvaWQpKTsKK30KKworLyogT3V0cHV0IGEgZmxhZywgb25seSBpZiBmaWx0ZXIgYWxsb3dzIGl0LiAqLworc3RhdGljIGludCBzaG93X2ZsYWcoY29uc3QgY2hhciAqYXJnKQoreworCWlmICghKGZpbHRlciAmIERPX0ZMQUdTKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZpbHRlciAmIChpc19yZXZfYXJndW1lbnQoYXJnKSA/IERPX1JFVlMgOiBET19OT1JFVikpIHsKKwkJc2hvdyhhcmcpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19kZWZhdWx0KHZvaWQpCit7CisJY29uc3QgY2hhciAqcyA9IGRlZjsKKworCWlmIChzKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCWRlZiA9IE5VTEw7CisJCWlmICghZ2V0X29pZChzLCAmb2lkKSkgeworCQkJc2hvd19yZXYoTk9STUFMLCAmb2lkLCBzKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJaWYgKHJlZl9leGNsdWRlZChyZWZfZXhjbHVkZXMsIHJlZm5hbWUpKQorCQlyZXR1cm4gMDsKKwlzaG93X3JldihOT1JNQUwsIG9pZCwgcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW50aV9yZWZlcmVuY2UoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzaG93X3JldihSRVZFUlNFRCwgb2lkLCByZWZuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X2FiYnJldihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmNiX2RhdGEpCit7CisJc2hvd19yZXYoTk9STUFMLCBvaWQsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RhdGVzdHJpbmcoY29uc3QgY2hhciAqZmxhZywgY29uc3QgY2hhciAqZGF0ZXN0cikKK3sKKwljaGFyICpidWZmZXI7CisKKwkvKiBkYXRlIGhhbmRsaW5nIHJlcXVpcmVzIGJvdGggZmxhZ3MgYW5kIHJldnMgKi8KKwlpZiAoKGZpbHRlciAmIChET19GTEFHUyB8IERPX1JFVlMpKSAhPSAoRE9fRkxBR1MgfCBET19SRVZTKSkKKwkJcmV0dXJuOworCWJ1ZmZlciA9IHhzdHJmbXQoIiVzJSJQUkl0aW1lLCBmbGFnLCBhcHByb3hpZGF0ZShkYXRlc3RyKSk7CisJc2hvdyhidWZmZXIpOworCWZyZWUoYnVmZmVyKTsKK30KKworc3RhdGljIGludCBzaG93X2ZpbGUoY29uc3QgY2hhciAqYXJnLCBpbnQgb3V0cHV0X3ByZWZpeCkKK3sKKwlzaG93X2RlZmF1bHQoKTsKKwlpZiAoKGZpbHRlciAmIChET19OT05GTEFHU3xET19OT1JFVikpID09IChET19OT05GTEFHU3xET19OT1JFVikpIHsKKwkJaWYgKG91dHB1dF9wcmVmaXgpIHsKKwkJCWNvbnN0IGNoYXIgKnByZWZpeCA9IHN0YXJ0dXBfaW5mby0+cHJlZml4OworCQkJY2hhciAqZm5hbWUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmcpOworCQkJc2hvdyhmbmFtZSk7CisJCQlmcmVlKGZuYW1lKTsKKwkJfSBlbHNlCisJCQlzaG93KGFyZyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfZGlmZmVyZW5jZShjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqZG90ZG90OworCXN0cnVjdCBvYmplY3RfaWQgc3RhcnRfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgZW5kX29pZDsKKwljb25zdCBjaGFyICplbmQ7CisJY29uc3QgY2hhciAqc3RhcnQ7CisJaW50IHN5bW1ldHJpYzsKKwlzdGF0aWMgY29uc3QgY2hhciBoZWFkX2J5X2RlZmF1bHRbXSA9ICJIRUFEIjsKKworCWlmICghKGRvdGRvdCA9IHN0cnN0cihhcmcsICIuLiIpKSkKKwkJcmV0dXJuIDA7CisJZW5kID0gZG90ZG90ICsgMjsKKwlzdGFydCA9IGFyZzsKKwlzeW1tZXRyaWMgPSAoKmVuZCA9PSAnLicpOworCisJKmRvdGRvdCA9IDA7CisJZW5kICs9IHN5bW1ldHJpYzsKKworCWlmICghKmVuZCkKKwkJZW5kID0gaGVhZF9ieV9kZWZhdWx0OworCWlmIChkb3Rkb3QgPT0gYXJnKQorCQlzdGFydCA9IGhlYWRfYnlfZGVmYXVsdDsKKworCWlmIChzdGFydCA9PSBoZWFkX2J5X2RlZmF1bHQgJiYgZW5kID09IGhlYWRfYnlfZGVmYXVsdCAmJgorCSAgICAhc3ltbWV0cmljKSB7CisJCS8qCisJCSAqIEp1c3QgIi4uIj8gIFRoYXQgaXMgbm90IGEgcmFuZ2UgYnV0IHRoZQorCQkgKiBwYXRoc3BlYyBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkuCisJCSAqLworCQkqZG90ZG90ID0gJy4nOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdldF9vaWRfY29tbWl0dGlzaChzdGFydCwgJnN0YXJ0X29pZCkgJiYgIWdldF9vaWRfY29tbWl0dGlzaChlbmQsICZlbmRfb2lkKSkgeworCQlzaG93X3JldihOT1JNQUwsICZlbmRfb2lkLCBlbmQpOworCQlzaG93X3JldihzeW1tZXRyaWMgPyBOT1JNQUwgOiBSRVZFUlNFRCwgJnN0YXJ0X29pZCwgc3RhcnQpOworCQlpZiAoc3ltbWV0cmljKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmV4Y2x1ZGU7CisJCQlzdHJ1Y3QgY29tbWl0ICphLCAqYjsKKwkJCWEgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJnN0YXJ0X29pZCk7CisJCQliID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksICZlbmRfb2lkKTsKKwkJCWlmICghYSB8fCAhYikgeworCQkJCSpkb3Rkb3QgPSAnLic7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlleGNsdWRlID0gZ2V0X21lcmdlX2Jhc2VzKGEsIGIpOworCQkJd2hpbGUgKGV4Y2x1ZGUpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3BfY29tbWl0KCZleGNsdWRlKTsKKwkJCQlzaG93X3JldihSRVZFUlNFRCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgTlVMTCk7CisJCQl9CisJCX0KKwkJKmRvdGRvdCA9ICcuJzsKKwkJcmV0dXJuIDE7CisJfQorCSpkb3Rkb3QgPSAnLic7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X3BhcmVudF9zaG9ydGhhbmRzKGNvbnN0IGNoYXIgKmFyZykKK3sKKwljaGFyICpkb3Rkb3Q7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlpbnQgcGFyZW50X251bWJlcjsKKwlpbnQgaW5jbHVkZV9yZXYgPSAwOworCWludCBpbmNsdWRlX3BhcmVudHMgPSAwOworCWludCBleGNsdWRlX3BhcmVudCA9IDA7CisKKwlpZiAoKGRvdGRvdCA9IHN0cnN0cihhcmcsICJeISIpKSkgeworCQlpbmNsdWRlX3JldiA9IDE7CisJCWlmIChkb3Rkb3RbMl0pCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKChkb3Rkb3QgPSBzdHJzdHIoYXJnLCAiXkAiKSkpIHsKKwkJaW5jbHVkZV9wYXJlbnRzID0gMTsKKwkJaWYgKGRvdGRvdFsyXSkKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAoKGRvdGRvdCA9IHN0cnN0cihhcmcsICJeLSIpKSkgeworCQlpbmNsdWRlX3JldiA9IDE7CisJCWV4Y2x1ZGVfcGFyZW50ID0gMTsKKworCQlpZiAoZG90ZG90WzJdKSB7CisJCQljaGFyICplbmQ7CisJCQlleGNsdWRlX3BhcmVudCA9IHN0cnRvdWwoZG90ZG90ICsgMiwgJmVuZCwgMTApOworCQkJaWYgKCplbmQgIT0gJ1wwJyB8fCAhZXhjbHVkZV9wYXJlbnQpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwkqZG90ZG90ID0gMDsKKwlpZiAoZ2V0X29pZF9jb21taXR0aXNoKGFyZywgJm9pZCkgfHwKKwkgICAgIShjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpKSB7CisJCSpkb3Rkb3QgPSAnXic7CisJCXJldHVybiAwOworCX0KKworCWlmIChleGNsdWRlX3BhcmVudCAmJgorCSAgICBleGNsdWRlX3BhcmVudCA+IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cykpIHsKKwkJKmRvdGRvdCA9ICdeJzsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGluY2x1ZGVfcmV2KQorCQlzaG93X3JldihOT1JNQUwsICZvaWQsIGFyZyk7CisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzLCBwYXJlbnRfbnVtYmVyID0gMTsKKwkgICAgIHBhcmVudHM7CisJICAgICBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCwgcGFyZW50X251bWJlcisrKSB7CisJCWNoYXIgKm5hbWUgPSBOVUxMOworCisJCWlmIChleGNsdWRlX3BhcmVudCAmJiBwYXJlbnRfbnVtYmVyICE9IGV4Y2x1ZGVfcGFyZW50KQorCQkJY29udGludWU7CisKKwkJaWYgKHN5bWJvbGljKQorCQkJbmFtZSA9IHhzdHJmbXQoIiVzXiVkIiwgYXJnLCBwYXJlbnRfbnVtYmVyKTsKKwkJc2hvd19yZXYoaW5jbHVkZV9wYXJlbnRzID8gTk9STUFMIDogUkVWRVJTRUQsCisJCQkgJnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQsIG5hbWUpOworCQlmcmVlKG5hbWUpOworCX0KKworCSpkb3Rkb3QgPSAnXic7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VvcHRfZHVtcChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpwYXJzZWQgPSBvLT52YWx1ZTsKKwlpZiAodW5zZXQpCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtLW5vLSVzIiwgby0+bG9uZ19uYW1lKTsKKwllbHNlIGlmIChvLT5zaG9ydF9uYW1lICYmIChvLT5sb25nX25hbWUgPT0gTlVMTCB8fCAhc3R1Y2tfbG9uZykpCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtJWMiLCBvLT5zaG9ydF9uYW1lKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtLSVzIiwgby0+bG9uZ19uYW1lKTsKKwlpZiAoYXJnKSB7CisJCWlmICghc3R1Y2tfbG9uZykKKwkJCXN0cmJ1Zl9hZGRjaChwYXJzZWQsICcgJyk7CisJCWVsc2UgaWYgKG8tPmxvbmdfbmFtZSkKKwkJCXN0cmJ1Zl9hZGRjaChwYXJzZWQsICc9Jyk7CisJCXNxX3F1b3RlX2J1ZihwYXJzZWQsIGFyZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2tpcHNwYWNlcyhjb25zdCBjaGFyICpzKQoreworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCXJldHVybiBzOworfQorCitzdGF0aWMgY2hhciAqZmluZHNwYWNlKGNvbnN0IGNoYXIgKnMpCit7CisJZm9yICg7ICpzOyBzKyspCisJCWlmIChpc3NwYWNlKCpzKSkKKwkJCXJldHVybiAoY2hhciopczsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBjbWRfcGFyc2VvcHQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIGludCBrZWVwX2Rhc2hkYXNoID0gMCwgc3RvcF9hdF9ub25fb3B0aW9uID0gMDsKKwlzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IHBhcnNlb3B0X3VzYWdlW10gPSB7CisJCU5fKCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iKSwKKwkJTlVMTAorCX07CisJc3RhdGljIHN0cnVjdCBvcHRpb24gcGFyc2VvcHRfb3B0c1tdID0geworCQlPUFRfQk9PTCgwLCAia2VlcC1kYXNoZGFzaCIsICZrZWVwX2Rhc2hkYXNoLAorCQkJCQlOXygia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIikpLAorCQlPUFRfQk9PTCgwLCAic3RvcC1hdC1ub24tb3B0aW9uIiwgJnN0b3BfYXRfbm9uX29wdGlvbiwKKwkJCQkJTl8oInN0b3AgcGFyc2luZyBhZnRlciB0aGUgIgorCQkJCQkgICAiZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIpKSwKKwkJT1BUX0JPT0woMCwgInN0dWNrLWxvbmciLCAmc3R1Y2tfbG9uZywKKwkJCQkJTl8oIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iKSksCisJCU9QVF9FTkQoKSwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ19jaGFycyA9ICIqPT8hIjsKKworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVCwgcGFyc2VkID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqKnVzYWdlID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uICpvcHRzID0gTlVMTDsKKwlpbnQgb25iID0gMCwgb3N6ID0gMCwgdW5iID0gMCwgdXN6ID0gMDsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhcnNlZCwgInNldCAtLSIpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcGFyc2VvcHRfb3B0cywgcGFyc2VvcHRfdXNhZ2UsCisJICAgICAgICAgICAgICAgICAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCWlmIChhcmdjIDwgMSB8fCBzdHJjbXAoYXJndlswXSwgIi0tIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhwYXJzZW9wdF91c2FnZSwgcGFyc2VvcHRfb3B0cyk7CisKKwkvKiBnZXQgdGhlIHVzYWdlIHVwIHRvIHRoZSBmaXJzdCBsaW5lIHdpdGggYSAtLSBvbiBpdCAqLworCWZvciAoOzspIHsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgc3RkaW4pID09IEVPRikKKwkJCWRpZSgicHJlbWF0dXJlIGVuZCBvZiBpbnB1dCIpOworCQlBTExPQ19HUk9XKHVzYWdlLCB1bmIgKyAxLCB1c3opOworCQlpZiAoIXN0cmNtcCgiLS0iLCBzYi5idWYpKSB7CisJCQlpZiAodW5iIDwgMSkKKwkJCQlkaWUoIm5vIHVzYWdlIHN0cmluZyBnaXZlbiBiZWZvcmUgdGhlIGAtLScgc2VwYXJhdG9yIik7CisJCQl1c2FnZVt1bmJdID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCXVzYWdlW3VuYisrXSA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwl9CisKKwkvKiBwYXJzZTogKDxzaG9ydD58PHNob3J0Piw8bG9uZz58PGxvbmc+KVsqPT8hXSo8YXJnaGludD4/IFNQKyA8aGVscD4gKi8KKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJnNiLCBzdGRpbikgIT0gRU9GKSB7CisJCWNvbnN0IGNoYXIgKnM7CisJCWNoYXIgKmhlbHA7CisJCXN0cnVjdCBvcHRpb24gKm87CisKKwkJaWYgKCFzYi5sZW4pCisJCQljb250aW51ZTsKKworCQlBTExPQ19HUk9XKG9wdHMsIG9uYiArIDEsIG9zeik7CisJCW1lbXNldChvcHRzICsgb25iLCAwLCBzaXplb2Yob3B0c1tvbmJdKSk7CisKKwkJbyA9ICZvcHRzW29uYisrXTsKKwkJaGVscCA9IGZpbmRzcGFjZShzYi5idWYpOworCQlpZiAoIWhlbHAgfHwgc2IuYnVmID09IGhlbHApIHsKKwkJCW8tPnR5cGUgPSBPUFRJT05fR1JPVVA7CisJCQlvLT5oZWxwID0geHN0cmR1cChza2lwc3BhY2VzKHNiLmJ1ZikpOworCQkJY29udGludWU7CisJCX0KKworCQkqaGVscCA9ICdcMCc7CisKKwkJby0+dHlwZSA9IE9QVElPTl9DQUxMQkFDSzsKKwkJby0+aGVscCA9IHhzdHJkdXAoc2tpcHNwYWNlcyhoZWxwKzEpKTsKKwkJby0+dmFsdWUgPSAmcGFyc2VkOworCQlvLT5mbGFncyA9IFBBUlNFX09QVF9OT0FSRzsKKwkJby0+Y2FsbGJhY2sgPSAmcGFyc2VvcHRfZHVtcDsKKworCQkvKiBuYW1lKHMpICovCisJCXMgPSBzdHJwYnJrKHNiLmJ1ZiwgZmxhZ19jaGFycyk7CisJCWlmIChzID09IE5VTEwpCisJCQlzID0gaGVscDsKKworCQlpZiAocyAtIHNiLmJ1ZiA9PSAxKSAvKiBzaG9ydCBvcHRpb24gb25seSAqLworCQkJby0+c2hvcnRfbmFtZSA9ICpzYi5idWY7CisJCWVsc2UgaWYgKHNiLmJ1ZlsxXSAhPSAnLCcpIC8qIGxvbmcgb3B0aW9uIG9ubHkgKi8KKwkJCW8tPmxvbmdfbmFtZSA9IHhtZW1kdXB6KHNiLmJ1ZiwgcyAtIHNiLmJ1Zik7CisJCWVsc2UgeworCQkJby0+c2hvcnRfbmFtZSA9ICpzYi5idWY7CisJCQlvLT5sb25nX25hbWUgPSB4bWVtZHVweihzYi5idWYgKyAyLCBzIC0gc2IuYnVmIC0gMik7CisJCX0KKworCQkvKiBmbGFncyAqLworCQl3aGlsZSAocyA8IGhlbHApIHsKKwkJCXN3aXRjaCAoKnMrKykgeworCQkJY2FzZSAnPSc6CisJCQkJby0+ZmxhZ3MgJj0gflBBUlNFX09QVF9OT0FSRzsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJz8nOgorCQkJCW8tPmZsYWdzICY9IH5QQVJTRV9PUFRfTk9BUkc7CisJCQkJby0+ZmxhZ3MgfD0gUEFSU0VfT1BUX09QVEFSRzsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyEnOgorCQkJCW8tPmZsYWdzIHw9IFBBUlNFX09QVF9OT05FRzsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyonOgorCQkJCW8tPmZsYWdzIHw9IFBBUlNFX09QVF9ISURERU47CisJCQkJY29udGludWU7CisJCQl9CisJCQlzLS07CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzIDwgaGVscCkKKwkJCW8tPmFyZ2ggPSB4bWVtZHVweihzLCBoZWxwIC0gcyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkvKiBwdXQgYW4gT1BUX0VORCgpICovCisJQUxMT0NfR1JPVyhvcHRzLCBvbmIgKyAxLCBvc3opOworCW1lbXNldChvcHRzICsgb25iLCAwLCBzaXplb2Yob3B0c1tvbmJdKSk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCB1c2FnZSwKKwkJCShrZWVwX2Rhc2hkYXNoID8gUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggOiAwKSB8CisJCQkoc3RvcF9hdF9ub25fb3B0aW9uID8gUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiA6IDApIHwKKwkJCVBBUlNFX09QVF9TSEVMTF9FVkFMKTsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhcnNlZCwgIiAtLSIpOworCXNxX3F1b3RlX2FyZ3YoJnBhcnNlZCwgYXJndik7CisJcHV0cyhwYXJzZWQuYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWRfc3FfcXVvdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoYXJnYykKKwkJc3FfcXVvdGVfYXJndigmYnVmLCBhcmd2KTsKKwlwcmludGYoIiVzXG4iLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWVfbm9fc2luZ2xlX3JldihpbnQgcXVpZXQpCit7CisJaWYgKHF1aWV0KQorCQlleGl0KDEpOworCWVsc2UKKwkJZGllKCJOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24iKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9yZXZfcGFyc2VfdXNhZ2VbXSA9CitOXygiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisgICAiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisgICAiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorICAgIlxuIgorICAgIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iKTsKKworLyoKKyAqIFBhcnNlICJvcHQiIG9yICJvcHQ9PHZhbHVlPiIsIHNldHRpbmcgdmFsdWUgcmVzcGVjdGl2ZWx5IHRvIGVpdGhlcgorICogTlVMTCBvciB0aGUgc3RyaW5nIGFmdGVyICI9Ii4KKyAqLworc3RhdGljIGludCBvcHRfd2l0aF92YWx1ZShjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqKnZhbHVlKQoreworCWlmIChza2lwX3ByZWZpeChhcmcsIG9wdCwgJmFyZykpIHsKKwkJaWYgKCEqYXJnKSB7CisJCQkqdmFsdWUgPSBOVUxMOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKCphcmcrKyA9PSAnPScpIHsKKwkJCSp2YWx1ZSA9IGFyZzsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVmX29wdChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaWYgKHBhdHRlcm4pCisJCWZvcl9lYWNoX2dsb2JfcmVmX2luKHNob3dfcmVmZXJlbmNlLCBwYXR0ZXJuLCBwcmVmaXgsIE5VTEwpOworCWVsc2UKKwkJZm9yX2VhY2hfcmVmX2luKHByZWZpeCwgc2hvd19yZWZlcmVuY2UsIE5VTEwpOworCWNsZWFyX3JlZl9leGNsdXNpb24oJnJlZl9leGNsdWRlcyk7Cit9CisKK2ludCBjbWRfcmV2X3BhcnNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBhc19pcyA9IDAsIHZlcmlmeSA9IDAsIHF1aWV0ID0gMCwgcmV2c19jb3VudCA9IDAsIHR5cGUgPSAwOworCWludCBkaWRfcmVwb19zZXR1cCA9IDA7CisJaW50IGhhc19kYXNoZGFzaCA9IDA7CisJaW50IG91dHB1dF9wcmVmaXggPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IHVudXNlZDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGludCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoIi0tcGFyc2VvcHQiLCBhcmd2WzFdKSkKKwkJcmV0dXJuIGNtZF9wYXJzZW9wdChhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLS1zcS1xdW90ZSIsIGFyZ3ZbMV0pKQorCQlyZXR1cm4gY21kX3NxX3F1b3RlKGFyZ2MgLSAyLCBhcmd2ICsgMik7CisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLWgiLCBhcmd2WzFdKSkKKwkJdXNhZ2UoYnVpbHRpbl9yZXZfcGFyc2VfdXNhZ2UpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgeworCQkJaGFzX2Rhc2hkYXNoID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogTm8gb3B0aW9uczsganVzdCByZXBvcnQgb24gd2hldGhlciB3ZSdyZSBpbiBhIGdpdCByZXBvIG9yIG5vdC4gKi8KKwlpZiAoYXJnYyA9PSAxKSB7CisJCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwkJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1sb2NhbC1lbnYtdmFycyIpKSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGxvY2FsX3JlcG9fZW52W2ldOyBpKyspCisJCQkJcHJpbnRmKCIlc1xuIiwgbG9jYWxfcmVwb19lbnZbaV0pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZXNvbHZlLWdpdC1kaXIiKSkgeworCQkJY29uc3QgY2hhciAqZ2l0ZGlyID0gYXJndlsrK2ldOworCQkJaWYgKCFnaXRkaXIpCisJCQkJZGllKCItLXJlc29sdmUtZ2l0LWRpciByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworCQkJZ2l0ZGlyID0gcmVzb2x2ZV9naXRkaXIoZ2l0ZGlyKTsKKwkJCWlmICghZ2l0ZGlyKQorCQkJCWRpZSgibm90IGEgZ2l0ZGlyICclcyciLCBhcmd2W2ldKTsKKwkJCXB1dHMoZ2l0ZGlyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVGhlIHJlc3Qgb2YgdGhlIG9wdGlvbnMgcmVxdWlyZSBhIGdpdCByZXBvc2l0b3J5LiAqLworCQlpZiAoIWRpZF9yZXBvX3NldHVwKSB7CisJCQlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJCQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJCQlkaWRfcmVwb19zZXR1cCA9IDE7CisJCX0KKworCQlpZiAoIXN0cmNtcChhcmcsICItLWdpdC1wYXRoIikpIHsKKwkJCWlmICghYXJndltpICsgMV0pCisJCQkJZGllKCItLWdpdC1wYXRoIHJlcXVpcmVzIGFuIGFyZ3VtZW50Iik7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQlwdXRzKHJlbGF0aXZlX3BhdGgoZ2l0X3BhdGgoIiVzIiwgYXJndltpICsgMV0pLAorCQkJCQkgICBwcmVmaXgsICZidWYpKTsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhc19pcykgeworCQkJaWYgKHNob3dfZmlsZShhcmcsIG91dHB1dF9wcmVmaXgpICYmIGFzX2lzIDwgMikKKwkJCQl2ZXJpZnlfZmlsZW5hbWUocHJlZml4LCBhcmcsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCItbiIpKSB7CisJCQlpZiAoKytpID49IGFyZ2MpCisJCQkJZGllKCItbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworCQkJaWYgKChmaWx0ZXIgJiBET19GTEFHUykgJiYgKGZpbHRlciAmIERPX1JFVlMpKSB7CisJCQkJc2hvdyhhcmcpOworCQkJCXNob3coYXJndltpXSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLW4iKSkgeworCQkJaWYgKChmaWx0ZXIgJiBET19GTEFHUykgJiYgKGZpbHRlciAmIERPX1JFVlMpKQorCQkJCXNob3coYXJnKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQkJYXNfaXMgPSAyOworCQkJCS8qIFBhc3Mgb24gdGhlICItLSIgaWYgd2Ugc2hvdyBhbnl0aGluZyBidXQgZmlsZXMuLiAqLworCQkJCWlmIChmaWx0ZXIgJiAoRE9fRkxBR1MgfCBET19SRVZTKSkKKwkJCQkJc2hvd19maWxlKGFyZywgMCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWRlZmF1bHQiKSkgeworCQkJCWRlZiA9IGFyZ3ZbKytpXTsKKwkJCQlpZiAoIWRlZikKKwkJCQkJZGllKCItLWRlZmF1bHQgcmVxdWlyZXMgYW4gYXJndW1lbnQiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcHJlZml4IikpIHsKKwkJCQlwcmVmaXggPSBhcmd2WysraV07CisJCQkJaWYgKCFwcmVmaXgpCisJCQkJCWRpZSgiLS1wcmVmaXggcmVxdWlyZXMgYW4gYXJndW1lbnQiKTsKKwkJCQlzdGFydHVwX2luZm8tPnByZWZpeCA9IHByZWZpeDsKKwkJCQlvdXRwdXRfcHJlZml4ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcmV2cy1vbmx5IikpIHsKKwkJCQlmaWx0ZXIgJj0gfkRPX05PUkVWOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1yZXZzIikpIHsKKwkJCQlmaWx0ZXIgJj0gfkRPX1JFVlM7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWZsYWdzIikpIHsKKwkJCQlmaWx0ZXIgJj0gfkRPX05PTkZMQUdTOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1mbGFncyIpKSB7CisJCQkJZmlsdGVyICY9IH5ET19GTEFHUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tdmVyaWZ5IikpIHsKKwkJCQlmaWx0ZXIgJj0gfihET19GTEFHU3xET19OT1JFVik7CisJCQkJdmVyaWZ5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcXVpZXQiKSB8fCAhc3RyY21wKGFyZywgIi1xIikpIHsKKwkJCQlxdWlldCA9IDE7CisJCQkJZmxhZ3MgfD0gR0VUX09JRF9RVUlFVExZOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG9wdF93aXRoX3ZhbHVlKGFyZywgIi0tc2hvcnQiLCAmYXJnKSkgeworCQkJCWZpbHRlciAmPSB+KERPX0ZMQUdTfERPX05PUkVWKTsKKwkJCQl2ZXJpZnkgPSAxOworCQkJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCQkJCWlmICghYXJnKQorCQkJCQljb250aW51ZTsKKwkJCQlhYmJyZXYgPSBzdHJ0b3VsKGFyZywgTlVMTCwgMTApOworCQkJCWlmIChhYmJyZXYgPCBNSU5JTVVNX0FCQlJFVikKKwkJCQkJYWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7CisJCQkJZWxzZSBpZiAoaGV4c3ogPD0gYWJicmV2KQorCQkJCQlhYmJyZXYgPSBoZXhzejsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc3EiKSkgeworCQkJCW91dHB1dF9zcSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLW5vdCIpKSB7CisJCQkJc2hvd190eXBlIF49IFJFVkVSU0VEOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zeW1ib2xpYyIpKSB7CisJCQkJc3ltYm9saWMgPSBTSE9XX1NZTUJPTElDX0FTSVM7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN5bWJvbGljLWZ1bGwtbmFtZSIpKSB7CisJCQkJc3ltYm9saWMgPSBTSE9XX1NZTUJPTElDX0ZVTEw7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAob3B0X3dpdGhfdmFsdWUoYXJnLCAiLS1hYmJyZXYtcmVmIiwgJmFyZykpIHsKKwkJCQlhYmJyZXZfcmVmID0gMTsKKwkJCQlhYmJyZXZfcmVmX3N0cmljdCA9IHdhcm5fYW1iaWd1b3VzX3JlZnM7CisJCQkJaWYgKGFyZykgeworCQkJCQlpZiAoIXN0cmNtcChhcmcsICJzdHJpY3QiKSkKKwkJCQkJCWFiYnJldl9yZWZfc3RyaWN0ID0gMTsKKwkJCQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJsb29zZSIpKQorCQkJCQkJYWJicmV2X3JlZl9zdHJpY3QgPSAwOworCQkJCQllbHNlCisJCQkJCQlkaWUoInVua25vd24gbW9kZSBmb3IgLS1hYmJyZXYtcmVmOiAlcyIsCisJCQkJCQkgICAgYXJnKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQkJZm9yX2VhY2hfcmVmKHNob3dfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tZGlzYW1iaWd1YXRlPSIsICZhcmcpKSB7CisJCQkJZm9yX2VhY2hfYWJicmV2KGFyZywgc2hvd19hYmJyZXYsIE5VTEwpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSkgeworCQkJCWZvcl9lYWNoX2Z1bGxyZWZfaW4oInJlZnMvYmlzZWN0L2JhZCIsIHNob3dfcmVmZXJlbmNlLCBOVUxMLCAwKTsKKwkJCQlmb3JfZWFjaF9mdWxscmVmX2luKCJyZWZzL2Jpc2VjdC9nb29kIiwgYW50aV9yZWZlcmVuY2UsIE5VTEwsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG9wdF93aXRoX3ZhbHVlKGFyZywgIi0tYnJhbmNoZXMiLCAmYXJnKSkgeworCQkJCWhhbmRsZV9yZWZfb3B0KGFyZywgInJlZnMvaGVhZHMvIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAob3B0X3dpdGhfdmFsdWUoYXJnLCAiLS10YWdzIiwgJmFyZykpIHsKKwkJCQloYW5kbGVfcmVmX29wdChhcmcsICJyZWZzL3RhZ3MvIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1nbG9iPSIsICZhcmcpKSB7CisJCQkJaGFuZGxlX3JlZl9vcHQoYXJnLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChvcHRfd2l0aF92YWx1ZShhcmcsICItLXJlbW90ZXMiLCAmYXJnKSkgeworCQkJCWhhbmRsZV9yZWZfb3B0KGFyZywgInJlZnMvcmVtb3Rlcy8iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWV4Y2x1ZGU9IiwgJmFyZykpIHsKKwkJCQlhZGRfcmVmX2V4Y2x1c2lvbigmcmVmX2V4Y2x1ZGVzLCBhcmcpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXRvcGxldmVsIikpIHsKKwkJCQljb25zdCBjaGFyICp3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCQkJCWlmICh3b3JrX3RyZWUpCisJCQkJCXB1dHMod29ya190cmVlKTsKKwkJCQllbHNlCisJCQkJCWRpZSgidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc2hvdy1zdXBlcnByb2plY3Qtd29ya2luZy10cmVlIikpIHsKKwkJCQljb25zdCBjaGFyICpzdXBlcnByb2plY3QgPSBnZXRfc3VwZXJwcm9qZWN0X3dvcmtpbmdfdHJlZSgpOworCQkJCWlmIChzdXBlcnByb2plY3QpCisJCQkJCXB1dHMoc3VwZXJwcm9qZWN0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc2hvdy1wcmVmaXgiKSkgeworCQkJCWlmIChwcmVmaXgpCisJCQkJCXB1dHMocHJlZml4KTsKKwkJCQllbHNlCisJCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXNob3ctY2R1cCIpKSB7CisJCQkJY29uc3QgY2hhciAqcGZ4ID0gcHJlZml4OworCQkJCWlmICghaXNfaW5zaWRlX3dvcmtfdHJlZSgpKSB7CisJCQkJCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9CisJCQkJCQlnZXRfZ2l0X3dvcmtfdHJlZSgpOworCQkJCQlpZiAod29ya190cmVlKQorCQkJCQkJcHJpbnRmKCIlc1xuIiwgd29ya190cmVlKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXdoaWxlIChwZngpIHsKKwkJCQkJcGZ4ID0gc3RyY2hyKHBmeCwgJy8nKTsKKwkJCQkJaWYgKHBmeCkgeworCQkJCQkJcGZ4Kys7CisJCQkJCQlwcmludGYoIi4uLyIpOworCQkJCQl9CisJCQkJfQorCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWdpdC1kaXIiKSB8fAorCQkJICAgICFzdHJjbXAoYXJnLCAiLS1hYnNvbHV0ZS1naXQtZGlyIikpIHsKKwkJCQljb25zdCBjaGFyICpnaXRkaXIgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJCQkJY2hhciAqY3dkOworCQkJCWludCBsZW47CisJCQkJaWYgKGFyZ1syXSA9PSAnZycpIHsJLyogLS1naXQtZGlyICovCisJCQkJCWlmIChnaXRkaXIpIHsKKwkJCQkJCXB1dHMoZ2l0ZGlyKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWlmICghcHJlZml4KSB7CisJCQkJCQlwdXRzKCIuZ2l0Iik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CQkvKiAtLWFic29sdXRlLWdpdC1kaXIgKi8KKwkJCQkJaWYgKCFnaXRkaXIgJiYgIXByZWZpeCkKKwkJCQkJCWdpdGRpciA9ICIuZ2l0IjsKKwkJCQkJaWYgKGdpdGRpcikgeworCQkJCQkJcHV0cyhyZWFsX3BhdGgoZ2l0ZGlyKSk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQljd2QgPSB4Z2V0Y3dkKCk7CisJCQkJbGVuID0gc3RybGVuKGN3ZCk7CisJCQkJcHJpbnRmKCIlcyVzLmdpdFxuIiwgY3dkLCBsZW4gJiYgY3dkW2xlbi0xXSAhPSAnLycgPyAiLyIgOiAiIik7CisJCQkJZnJlZShjd2QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1naXQtY29tbW9uLWRpciIpKSB7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJCXB1dHMocmVsYXRpdmVfcGF0aChnZXRfZ2l0X2NvbW1vbl9kaXIoKSwKKwkJCQkJCSAgIHByZWZpeCwgJmJ1ZikpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pcy1pbnNpZGUtZ2l0LWRpciIpKSB7CisJCQkJcHJpbnRmKCIlc1xuIiwgaXNfaW5zaWRlX2dpdF9kaXIoKSA/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/IG9yaWdpbmFsIDogIi4iKTsKKwkJfQorCisJCWlmICghc2Vlbl9hbnkpCisJCQlleGl0KDApOworCX0KKworCWlmICghaW5kZXhfb25seSkKKwkJc3VibW9kdWxlc19hYnNvcmJfZ2l0ZGlyX2lmX25lZWRlZCgpOworCisJLyoKKwkgKiBJZiBub3QgZm9yY2VkLCB0aGUgZmlsZSwgdGhlIGluZGV4IGFuZCB0aGUgSEVBRCAoaWYgZXhpc3RzKQorCSAqIG11c3QgbWF0Y2g7IGJ1dCB0aGUgZmlsZSBjYW4gYWxyZWFkeSBiZWVuIHJlbW92ZWQsIHNpbmNlCisJICogdGhpcyBzZXF1ZW5jZSBpcyBhIG5hdHVyYWwgIm5vdmljZSIgd2F5OgorCSAqCisJICoJcm0gRjsgZ2l0IHJtIEYKKwkgKgorCSAqIEZ1cnRoZXIsIGlmIEhFQUQgY29tbWl0IGV4aXN0cywgImRpZmYtaW5kZXggLS1jYWNoZWQiIG11c3QKKwkgKiByZXBvcnQgbm8gY2hhbmdlcyB1bmxlc3MgZm9yY2VkLgorCSAqLworCWlmICghZm9yY2UpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWlmIChnZXRfb2lkKCJIRUFEIiwgJm9pZCkpCisJCQlvaWRjbHIoJm9pZCk7CisJCWlmIChjaGVja19sb2NhbF9tb2QoJm9pZCwgaW5kZXhfb25seSkpCisJCQlleGl0KDEpOworCX0KKworCS8qCisJICogRmlyc3QgcmVtb3ZlIHRoZSBuYW1lcyBmcm9tIHRoZSBpbmRleDogd2Ugd29uJ3QgY29tbWl0CisJICogdGhlIGluZGV4IHVubGVzcyBhbGwgb2YgdGhlbSBzdWNjZWVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IGxpc3QuZW50cnlbaV0ubmFtZTsKKwkJaWYgKCFxdWlldCkKKwkJCXByaW50Zigicm0gJyVzJ1xuIiwgcGF0aCk7CisKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCQlkaWUoXygiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIiksIHBhdGgpOworCX0KKworCWlmIChzaG93X29ubHkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGVuLCB1bmxlc3Mgd2UgdXNlZCAiLS1jYWNoZWQiLCByZW1vdmUgdGhlIGZpbGVuYW1lcyBmcm9tCisJICogdGhlIHdvcmtzcGFjZS4gSWYgd2UgZmFpbCB0byByZW1vdmUgdGhlIGZpcnN0IG9uZSwgd2UKKwkgKiBhYm9ydCB0aGUgImdpdCBybSIgKGJ1dCBvbmNlIHdlJ3ZlIHN1Y2Nlc3NmdWxseSByZW1vdmVkCisJICogYW55IGZpbGUgYXQgYWxsLCB3ZSdsbCBnbyBhaGVhZCBhbmQgY29tbWl0IHRvIGl0IGFsbDoKKwkgKiBieSB0aGVuIHdlJ3ZlIGFscmVhZHkgY29tbWl0dGVkIG91cnNlbHZlcyBhbmQgY2FuJ3QgZmFpbAorCSAqIGluIHRoZSBtaWRkbGUpCisJICovCisJaWYgKCFpbmRleF9vbmx5KSB7CisJCWludCByZW1vdmVkID0gMCwgZ2l0bW9kdWxlc19tb2RpZmllZCA9IDA7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0LmVudHJ5W2ldLm5hbWU7CisJCQlpZiAobGlzdC5lbnRyeVtpXS5pc19zdWJtb2R1bGUpIHsKKwkJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBwYXRoKTsKKwkJCQlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCAwKSkKKwkJCQkJZGllKF8oImNvdWxkIG5vdCByZW1vdmUgJyVzJyIpLCBwYXRoKTsKKworCQkJCXJlbW92ZWQgPSAxOworCQkJCWlmICghcmVtb3ZlX3BhdGhfZnJvbV9naXRtb2R1bGVzKHBhdGgpKQorCQkJCQlnaXRtb2R1bGVzX21vZGlmaWVkID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcmVtb3ZlX3BhdGgocGF0aCkpIHsKKwkJCQlyZW1vdmVkID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcmVtb3ZlZCkKKwkJCQlkaWVfZXJybm8oImdpdCBybTogJyVzJyIsIHBhdGgpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlpZiAoZ2l0bW9kdWxlc19tb2RpZmllZCkKKwkJCXN0YWdlX3VwZGF0ZWRfZ2l0bW9kdWxlcygmdGhlX2luZGV4KTsKKwl9CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsCisJCQkgICAgICAgQ09NTUlUX0xPQ0sgfCBTS0lQX0lGX1VOQ0hBTkdFRCkpCisJCWRpZShfKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc2VuZC1wYWNrLmMgYi9idWlsdGluL3NlbmQtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OGViZjIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3NlbmQtcGFjay5jCkBAIC0wLDAgKzEsMzExIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2VuZC1wYWNrLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZW5kX3BhY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdICIKKwkgICJbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdICIKKwkgICJbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPHJlZj4uLi5dXG4iCisJICAiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIpLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IHNlbmRfcGFja19hcmdzIGFyZ3M7CisKK3N0YXRpYyB2b2lkIHByaW50X2hlbHBlcl9zdGF0dXMoc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJY29uc3QgY2hhciAqbXNnID0gTlVMTDsKKwkJY29uc3QgY2hhciAqcmVzOworCisJCXN3aXRjaChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJCXJlcyA9ICJlcnJvciI7CisJCQltc2cgPSAibm8gbWF0Y2giOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX09LOgorCQkJcmVzID0gIm9rIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19VUFRPREFURToKKwkJCXJlcyA9ICJvayI7CisJCQltc2cgPSAidXAgdG8gZGF0ZSI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgorCQkJcmVzID0gImVycm9yIjsKKwkJCW1zZyA9ICJub24tZmFzdCBmb3J3YXJkIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfRkVUQ0hfRklSU1Q6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gImZldGNoIGZpcnN0IjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0U6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gIm5lZWRzIGZvcmNlIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEU6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gInN0YWxlIGluZm8iOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9BTFJFQURZX0VYSVNUUzoKKwkJCXJlcyA9ICJlcnJvciI7CisJCQltc2cgPSAiYWxyZWFkeSBleGlzdHMiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURToKKwkJY2FzZSBSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1Q6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX0VYUEVDVElOR19SRVBPUlQ6CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzICVzIiwgcmVzLCByZWYtPm5hbWUpOworCQlpZiAocmVmLT5yZW1vdGVfc3RhdHVzKQorCQkJbXNnID0gcmVmLT5yZW1vdGVfc3RhdHVzOworCQlpZiAobXNnKSB7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJyAnKTsKKwkJCXF1b3RlX3R3b19jX3N0eWxlKCZidWYsICIiLCBtc2csIDApOworCQl9CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKworCQl3cml0ZV9vcl9kaWUoMSwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IHNlbmRfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJZ2l0X2dwZ19jb25maWcoaywgdiwgTlVMTCk7CisKKwlpZiAoIXN0cmNtcChrLCAicHVzaC5ncGdzaWduIikpIHsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoInB1c2guZ3Bnc2lnbiIsICZ2YWx1ZSkpIHsKKwkJCXN3aXRjaCAoZ2l0X3BhcnNlX21heWJlX2Jvb2wodmFsdWUpKSB7CisJCQljYXNlIDA6CisJCQkJYXJncy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWFyZ3MucHVzaF9jZXJ0ID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9BTFdBWVM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImlmLWFza2VkIikpCisJCQkJCWFyZ3MucHVzaF9jZXJ0ID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9JRl9BU0tFRDsKKwkJCQllbHNlCisJCQkJCXJldHVybiBlcnJvcigiSW52YWxpZCB2YWx1ZSBmb3IgJyVzJyIsIGspOworCQkJfQorCQl9CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdiwgY2IpOworfQorCitpbnQgY21kX3NlbmRfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmVmc3BlYyBycyA9IFJFRlNQRUNfSU5JVF9QVVNIOworCWNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lID0gTlVMTDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmRlc3QgPSBOVUxMOworCWludCBmZFsyXTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubjsKKwlzdHJ1Y3Qgb2lkX2FycmF5IGV4dHJhX2hhdmUgPSBPSURfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgb2lkX2FycmF5IHNoYWxsb3cgPSBPSURfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgKmxvY2FsX3JlZnM7CisJaW50IHJldDsKKwlpbnQgaGVscGVyX3N0YXR1cyA9IDA7CisJaW50IHNlbmRfYWxsID0gMDsKKwlpbnQgdmVyYm9zZSA9IDA7CisJY29uc3QgY2hhciAqcmVjZWl2ZXBhY2sgPSAiZ2l0LXJlY2VpdmUtcGFjayI7CisJdW5zaWduZWQgZHJ5X3J1biA9IDA7CisJdW5zaWduZWQgc2VuZF9taXJyb3IgPSAwOworCXVuc2lnbmVkIGZvcmNlX3VwZGF0ZSA9IDA7CisJdW5zaWduZWQgcXVpZXQgPSAwOworCWludCBwdXNoX2NlcnQgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBwdXNoX29wdGlvbnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXVuc2lnbmVkIHVzZV90aGluX3BhY2sgPSAwOworCXVuc2lnbmVkIGF0b21pYyA9IDA7CisJdW5zaWduZWQgc3RhdGVsZXNzX3JwYyA9IDA7CisJaW50IGZsYWdzOworCXVuc2lnbmVkIGludCByZWplY3RfcmVhc29uczsKKwlpbnQgcHJvZ3Jlc3MgPSAtMTsKKwlpbnQgZnJvbV9zdGRpbiA9IDA7CisJc3RydWN0IHB1c2hfY2FzX29wdGlvbiBjYXMgPSB7MH07CisJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TSVRZKCZ2ZXJib3NlKSwKKwkJT1BUX1NUUklORygwLCAicmVjZWl2ZS1wYWNrIiwgJnJlY2VpdmVwYWNrLCAicmVjZWl2ZS1wYWNrIiwgTl8oInJlY2VpdmUgcGFjayBwcm9ncmFtIikpLAorCQlPUFRfU1RSSU5HKDAsICJleGVjIiwgJnJlY2VpdmVwYWNrLCAicmVjZWl2ZS1wYWNrIiwgTl8oInJlY2VpdmUgcGFjayBwcm9ncmFtIikpLAorCQlPUFRfU1RSSU5HKDAsICJyZW1vdGUiLCAmcmVtb3RlX25hbWUsICJyZW1vdGUiLCBOXygicmVtb3RlIG5hbWUiKSksCisJCU9QVF9CT09MKDAsICJhbGwiLCAmc2VuZF9hbGwsIE5fKCJwdXNoIGFsbCByZWZzIikpLAorCQlPUFRfQk9PTCgnbicgLCAiZHJ5LXJ1biIsICZkcnlfcnVuLCBOXygiZHJ5IHJ1biIpKSwKKwkJT1BUX0JPT0woMCwgIm1pcnJvciIsICZzZW5kX21pcnJvciwgTl8oIm1pcnJvciBhbGwgcmVmcyIpKSwKKwkJT1BUX0JPT0woJ2YnLCAiZm9yY2UiLCAmZm9yY2VfdXBkYXRlLCBOXygiZm9yY2UgdXBkYXRlcyIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssCisJCSAgMCwgInNpZ25lZCIsICZwdXNoX2NlcnQsICIoeWVzfG5vfGlmLWFza2VkKSIsIE5fKCJHUEcgc2lnbiB0aGUgcHVzaCIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9wdXNoX3NpZ25lZCB9LAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgInB1c2gtb3B0aW9uIiwgJnB1c2hfb3B0aW9ucywKKwkJCQlOXygic2VydmVyLXNwZWNpZmljIiksCisJCQkJTl8oIm9wdGlvbiB0byB0cmFuc21pdCIpKSwKKwkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQlPUFRfQk9PTCgwLCAidGhpbiIsICZ1c2VfdGhpbl9wYWNrLCBOXygidXNlIHRoaW4gcGFjayIpKSwKKwkJT1BUX0JPT0woMCwgImF0b21pYyIsICZhdG9taWMsIE5fKCJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIpKSwKKwkJT1BUX0JPT0woMCwgInN0YXRlbGVzcy1ycGMiLCAmc3RhdGVsZXNzX3JwYywgTl8oInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIikpLAorCQlPUFRfQk9PTCgwLCAic3RkaW4iLCAmZnJvbV9zdGRpbiwgTl8oInJlYWQgcmVmcyBmcm9tIHN0ZGluIikpLAorCQlPUFRfQk9PTCgwLCAiaGVscGVyLXN0YXR1cyIsICZoZWxwZXJfc3RhdHVzLCBOXygicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssCisJCSAgMCwgQ0FTX09QVF9OQU1FLCAmY2FzLCBOXygiPHJlZm5hbWU+OjxleHBlY3Q+IiksCisJCSAgTl8oInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgcGFyc2VvcHRfcHVzaF9jYXNfb3B0aW9uIH0sCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKHNlbmRfcGFja19jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgc2VuZF9wYWNrX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA+IDApIHsKKwkJZGVzdCA9IGFyZ3ZbMF07CisJCXJlZnNwZWNfYXBwZW5kbigmcnMsIGFyZ3YgKyAxLCBhcmdjIC0gMSk7CisJfQorCisJaWYgKCFkZXN0KQorCQl1c2FnZV93aXRoX29wdGlvbnMoc2VuZF9wYWNrX3VzYWdlLCBvcHRpb25zKTsKKworCWFyZ3MudmVyYm9zZSA9IHZlcmJvc2U7CisJYXJncy5kcnlfcnVuID0gZHJ5X3J1bjsKKwlhcmdzLnNlbmRfbWlycm9yID0gc2VuZF9taXJyb3I7CisJYXJncy5mb3JjZV91cGRhdGUgPSBmb3JjZV91cGRhdGU7CisJYXJncy5xdWlldCA9IHF1aWV0OworCWFyZ3MucHVzaF9jZXJ0ID0gcHVzaF9jZXJ0OworCWFyZ3MucHJvZ3Jlc3MgPSBwcm9ncmVzczsKKwlhcmdzLnVzZV90aGluX3BhY2sgPSB1c2VfdGhpbl9wYWNrOworCWFyZ3MuYXRvbWljID0gYXRvbWljOworCWFyZ3Muc3RhdGVsZXNzX3JwYyA9IHN0YXRlbGVzc19ycGM7CisJYXJncy5wdXNoX29wdGlvbnMgPSBwdXNoX29wdGlvbnMubnIgPyAmcHVzaF9vcHRpb25zIDogTlVMTDsKKworCWlmIChmcm9tX3N0ZGluKSB7CisJCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpIHsKKwkJCWNvbnN0IGNoYXIgKmJ1ZjsKKwkJCXdoaWxlICgoYnVmID0gcGFja2V0X3JlYWRfbGluZSgwLCBOVUxMKSkpCisJCQkJcmVmc3BlY19hcHBlbmQoJnJzLCBidWYpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluKSAhPSBFT0YpCisJCQkJcmVmc3BlY19hcHBlbmQoJnJzLCBsaW5lLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJCX0KKwl9CisKKwkvKgorCSAqIC0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlOyBuZWl0aGVyIG1ha2VzIHNlbnNlCisJICogd2l0aCBhbnkgcmVmc3BlY3MuCisJICovCisJaWYgKChycy5uciA+IDAgJiYgKHNlbmRfYWxsIHx8IGFyZ3Muc2VuZF9taXJyb3IpKSB8fAorCSAgICAoc2VuZF9hbGwgJiYgYXJncy5zZW5kX21pcnJvcikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzZW5kX3BhY2tfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKHJlbW90ZV9uYW1lKSB7CisJCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVtb3RlX25hbWUpOworCQlpZiAoIXJlbW90ZV9oYXNfdXJsKHJlbW90ZSwgZGVzdCkpIHsKKwkJCWRpZSgiRGVzdGluYXRpb24gJXMgaXMgbm90IGEgdXJpIGZvciAlcyIsCisJCQkgICAgZGVzdCwgcmVtb3RlX25hbWUpOworCQl9CisJfQorCisJaWYgKHByb2dyZXNzID09IC0xKQorCQlwcm9ncmVzcyA9ICFhcmdzLnF1aWV0ICYmIGlzYXR0eSgyKTsKKwlhcmdzLnByb2dyZXNzID0gcHJvZ3Jlc3M7CisKKwlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCWNvbm4gPSBOVUxMOworCQlmZFswXSA9IDA7CisJCWZkWzFdID0gMTsKKwl9IGVsc2UgeworCQljb25uID0gZ2l0X2Nvbm5lY3QoZmQsIGRlc3QsIHJlY2VpdmVwYWNrLAorCQkJYXJncy52ZXJib3NlID8gQ09OTkVDVF9WRVJCT1NFIDogMCk7CisJfQorCisJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIGZkWzBdLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GIHwKKwkJCSAgIFBBQ0tFVF9SRUFEX0RJRV9PTl9FUlJfUEFDS0VUKTsKKworCXN3aXRjaCAoZGlzY292ZXJfdmVyc2lvbigmcmVhZGVyKSkgeworCWNhc2UgcHJvdG9jb2xfdjI6CisJCWRpZSgic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YxOgorCWNhc2UgcHJvdG9jb2xfdjA6CisJCWdldF9yZW1vdGVfaGVhZHMoJnJlYWRlciwgJnJlbW90ZV9yZWZzLCBSRUZfTk9STUFMLAorCQkJCSAmZXh0cmFfaGF2ZSwgJnNoYWxsb3cpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3Vua25vd25fdmVyc2lvbjoKKwkJQlVHKCJ1bmtub3duIHByb3RvY29sIHZlcnNpb24iKTsKKwl9CisKKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisKKwlmbGFncyA9IE1BVENIX1JFRlNfTk9ORTsKKworCWlmIChzZW5kX2FsbCkKKwkJZmxhZ3MgfD0gTUFUQ0hfUkVGU19BTEw7CisJaWYgKGFyZ3Muc2VuZF9taXJyb3IpCisJCWZsYWdzIHw9IE1BVENIX1JFRlNfTUlSUk9SOworCisJLyogbWF0Y2ggdGhlbSB1cCAqLworCWlmIChtYXRjaF9wdXNoX3JlZnMobG9jYWxfcmVmcywgJnJlbW90ZV9yZWZzLCAmcnMsIGZsYWdzKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFpc19lbXB0eV9jYXMoJmNhcykpCisJCWFwcGx5X3B1c2hfY2FzKCZjYXMsIHJlbW90ZSwgcmVtb3RlX3JlZnMpOworCisJc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2gocmVtb3RlX3JlZnMsIGFyZ3Muc2VuZF9taXJyb3IsCisJCWFyZ3MuZm9yY2VfdXBkYXRlKTsKKworCXJldCA9IHNlbmRfcGFjaygmYXJncywgZmQsIGNvbm4sIHJlbW90ZV9yZWZzLCAmZXh0cmFfaGF2ZSk7CisKKwlpZiAoaGVscGVyX3N0YXR1cykKKwkJcHJpbnRfaGVscGVyX3N0YXR1cyhyZW1vdGVfcmVmcyk7CisKKwljbG9zZShmZFsxXSk7CisJY2xvc2UoZmRbMF0pOworCisJcmV0IHw9IGZpbmlzaF9jb25uZWN0KGNvbm4pOworCisJaWYgKCFoZWxwZXJfc3RhdHVzKQorCQl0cmFuc3BvcnRfcHJpbnRfcHVzaF9zdGF0dXMoZGVzdCwgcmVtb3RlX3JlZnMsIGFyZ3MudmVyYm9zZSwgMCwgJnJlamVjdF9yZWFzb25zKTsKKworCWlmICghYXJncy5kcnlfcnVuICYmIHJlbW90ZSkgeworCQlzdHJ1Y3QgcmVmICpyZWY7CisJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJdHJhbnNwb3J0X3VwZGF0ZV90cmFja2luZ19yZWYocmVtb3RlLCByZWYsIGFyZ3MudmVyYm9zZSk7CisJfQorCisJaWYgKCFyZXQgJiYgIXRyYW5zcG9ydF9yZWZzX3B1c2hlZChyZW1vdGVfcmVmcykpCisJCWZwcmludGYoc3RkZXJyLCAiRXZlcnl0aGluZyB1cC10by1kYXRlXG4iKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Nob3J0bG9nLmMgYi9idWlsdGluL3Nob3J0bG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjZDQxMwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vc2hvcnRsb2cuYwpAQCAtMCwwICsxLDM3OSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgIm1haWxtYXAuaCIKKyNpbmNsdWRlICJzaG9ydGxvZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBzaG9ydGxvZ191c2FnZVtdID0geworCU5fKCJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iKSwKKwlOXygiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKKy8qCisgKiBUaGUgdXRpbCBmaWVsZCBvZiBvdXIgc3RyaW5nX2xpc3RfaXRlbXMgd2lsbCBjb250YWluIG9uZSBvZiB0d28gdGhpbmdzOgorICoKKyAqICAgLSBpZiAtLXN1bW1hcnkgaXMgbm90IGluIHVzZSwgaXQgd2lsbCBwb2ludCB0byBhIHN0cmluZyBsaXN0IG9mIHRoZQorICogICAgIG9uZWxpbmUgc3ViamVjdHMgYXNzaWduZWQgdG8gdGhpcyBhdXRob3IKKyAqCisgKiAgIC0gaWYgLS1zdW1tYXJ5IGlzIGluIHVzZSwgd2UgZG9uJ3QgbmVlZCB0aGF0IGxpc3Q7IHdlIG9ubHkgbmVlZCB0byBrbm93CisgKiAgICAgaXRzIHNpemUuIFNvIHdlIGFidXNlIHRoZSBwb2ludGVyIHNsb3QgdG8gc3RvcmUgb3VyIGludGVnZXIgY291bnRlci4KKyAqCisgKiAgVGhpcyBtYWNybyBhY2Nlc3NlcyB0aGUgbGF0dGVyLgorICovCisjZGVmaW5lIFVUSUxfVE9fSU5UKHgpICgoaW50cHRyX3QpKHgpLT51dGlsKQorCitzdGF0aWMgaW50IGNvbXBhcmVfYnlfY291bnRlcihjb25zdCB2b2lkICphMSwgY29uc3Qgdm9pZCAqYTIpCit7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmkxID0gYTEsICppMiA9IGEyOworCXJldHVybiBVVElMX1RPX0lOVChpMikgLSBVVElMX1RPX0lOVChpMSk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9ieV9saXN0KGNvbnN0IHZvaWQgKmExLCBjb25zdCB2b2lkICphMikKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaTEgPSBhMSwgKmkyID0gYTI7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsMSA9IGkxLT51dGlsLCAqbDIgPSBpMi0+dXRpbDsKKworCWlmIChsMS0+bnIgPCBsMi0+bnIpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGwxLT5uciA9PSBsMi0+bnIpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfb25lX3JlY29yZChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm9uZWxpbmUpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZsb2ctPmxpc3QsIGF1dGhvcik7CisKKwlpZiAobG9nLT5zdW1tYXJ5KQorCQlpdGVtLT51dGlsID0gKHZvaWQgKikoVVRJTF9UT19JTlQoaXRlbSkgKyAxKTsKKwllbHNlIHsKKwkJY29uc3QgY2hhciAqZG90MyA9IGxvZy0+Y29tbW9uX3JlcG9fcHJlZml4OworCQljaGFyICpidWZmZXIsICpwOworCQlzdHJ1Y3Qgc3RyYnVmIHN1YmplY3QgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqZW9sOworCisJCS8qIFNraXAgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSwgaW5jbHVkaW5nIGFueSBibGFuayBsaW5lcy4gKi8KKwkJd2hpbGUgKCpvbmVsaW5lICYmIGlzc3BhY2UoKm9uZWxpbmUpKQorCQkJb25lbGluZSsrOworCQllb2wgPSBzdHJjaHIob25lbGluZSwgJ1xuJyk7CisJCWlmICghZW9sKQorCQkJZW9sID0gb25lbGluZSArIHN0cmxlbihvbmVsaW5lKTsKKwkJaWYgKHN0YXJ0c193aXRoKG9uZWxpbmUsICJbUEFUQ0giKSkgeworCQkJY2hhciAqZW9iID0gc3RyY2hyKG9uZWxpbmUsICddJyk7CisJCQlpZiAoZW9iICYmICghZW9sIHx8IGVvYiA8IGVvbCkpCisJCQkJb25lbGluZSA9IGVvYiArIDE7CisJCX0KKwkJd2hpbGUgKCpvbmVsaW5lICYmIGlzc3BhY2UoKm9uZWxpbmUpICYmICpvbmVsaW5lICE9ICdcbicpCisJCQlvbmVsaW5lKys7CisJCWZvcm1hdF9zdWJqZWN0KCZzdWJqZWN0LCBvbmVsaW5lLCAiICIpOworCQlidWZmZXIgPSBzdHJidWZfZGV0YWNoKCZzdWJqZWN0LCBOVUxMKTsKKworCQlpZiAoZG90MykgeworCQkJaW50IGRvdDNsZW4gPSBzdHJsZW4oZG90Myk7CisJCQlpZiAoZG90M2xlbiA+IDUpIHsKKwkJCQl3aGlsZSAoKHAgPSBzdHJzdHIoYnVmZmVyLCBkb3QzKSkgIT0gTlVMTCkgeworCQkJCQlpbnQgdGFpbGxlbiA9IHN0cmxlbihwKSAtIGRvdDNsZW47CisJCQkJCW1lbWNweShwLCAiLy4uLi8iLCA1KTsKKwkJCQkJbWVtbW92ZShwICsgNSwgcCArIGRvdDNsZW4sIHRhaWxsZW4gKyAxKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoaXRlbS0+dXRpbCA9PSBOVUxMKQorCQkJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoaXRlbS0+dXRpbCwgYnVmZmVyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc3RkaW5fYXV0aG9yKHN0cnVjdCBzaG9ydGxvZyAqbG9nLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqaW4pCit7CisJY29uc3QgY2hhciAqbWFpbGJ1ZiwgKm5hbWVidWY7CisJc2l6ZV90IG5hbWVsZW4sIG1haWxsZW47CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCBpbiwgc3RybGVuKGluKSkpCisJCXJldHVybiAtMTsKKworCW5hbWVidWYgPSBpZGVudC5uYW1lX2JlZ2luOworCW1haWxidWYgPSBpZGVudC5tYWlsX2JlZ2luOworCW5hbWVsZW4gPSBpZGVudC5uYW1lX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW47CisJbWFpbGxlbiA9IGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubWFpbF9iZWdpbjsKKworCW1hcF91c2VyKCZsb2ctPm1haWxtYXAsICZtYWlsYnVmLCAmbWFpbGxlbiwgJm5hbWVidWYsICZuYW1lbGVuKTsKKwlzdHJidWZfYWRkKG91dCwgbmFtZWJ1ZiwgbmFtZWxlbik7CisJaWYgKGxvZy0+ZW1haWwpCisJCXN0cmJ1Zl9hZGRmKG91dCwgIiA8JS4qcz4iLCAoaW50KW1haWxsZW4sIG1haWxidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZnJvbV9zdGRpbihzdHJ1Y3Qgc2hvcnRsb2cgKmxvZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGF1dGhvciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbWFwcGVkX2F1dGhvciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgb25lbGluZSA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjb25zdCBjaGFyICphdXRob3JfbWF0Y2hbMl0gPSB7ICJBdXRob3I6ICIsICJhdXRob3IgIiB9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb21taXR0ZXJfbWF0Y2hbMl0gPSB7ICJDb21taXQ6ICIsICJjb21taXR0ZXIgIiB9OworCWNvbnN0IGNoYXIgKiptYXRjaDsKKworCW1hdGNoID0gbG9nLT5jb21taXR0ZXIgPyBjb21taXR0ZXJfbWF0Y2ggOiBhdXRob3JfbWF0Y2g7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZhdXRob3IsIHN0ZGluKSAhPSBFT0YpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKCFza2lwX3ByZWZpeChhdXRob3IuYnVmLCBtYXRjaFswXSwgJnYpICYmCisJCSAgICAhc2tpcF9wcmVmaXgoYXV0aG9yLmJ1ZiwgbWF0Y2hbMV0sICZ2KSkKKwkJCWNvbnRpbnVlOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJm9uZWxpbmUsIHN0ZGluKSAhPSBFT0YgJiYKKwkJICAgICAgIG9uZWxpbmUubGVuKQorCQkJOyAvKiBkaXNjYXJkIGhlYWRlcnMgKi8KKwkJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZvbmVsaW5lLCBzdGRpbikgIT0gRU9GICYmCisJCSAgICAgICAhb25lbGluZS5sZW4pCisJCQk7IC8qIGRpc2NhcmQgYmxhbmtzICovCisKKwkJc3RyYnVmX3Jlc2V0KCZtYXBwZWRfYXV0aG9yKTsKKwkJaWYgKHBhcnNlX3N0ZGluX2F1dGhvcihsb2csICZtYXBwZWRfYXV0aG9yLCB2KSA8IDApCisJCQljb250aW51ZTsKKworCQlpbnNlcnRfb25lX3JlY29yZChsb2csIG1hcHBlZF9hdXRob3IuYnVmLCBvbmVsaW5lLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhdXRob3IpOworCXN0cmJ1Zl9yZWxlYXNlKCZtYXBwZWRfYXV0aG9yKTsKKwlzdHJidWZfcmVsZWFzZSgmb25lbGluZSk7Cit9CisKK3ZvaWQgc2hvcnRsb2dfYWRkX2NvbW1pdChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBzdHJidWYgYXV0aG9yID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBvbmVsaW5lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwljb25zdCBjaGFyICpmbXQ7CisKKwljdHguZm10ID0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKKwljdHguYWJicmV2ID0gbG9nLT5hYmJyZXY7CisJY3R4LnByaW50X2VtYWlsX3N1YmplY3QgPSAxOworCWN0eC5kYXRlX21vZGUudHlwZSA9IERBVEVfTk9STUFMOworCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCisJZm10ID0gbG9nLT5jb21taXR0ZXIgPworCQkobG9nLT5lbWFpbCA/ICIlY04gPCVjRT4iIDogIiVjTiIpIDoKKwkJKGxvZy0+ZW1haWwgPyAiJWFOIDwlYUU+IiA6ICIlYU4iKTsKKworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsIGZtdCwgJmF1dGhvciwgJmN0eCk7CisJaWYgKCFsb2ctPnN1bW1hcnkpIHsKKwkJaWYgKGxvZy0+dXNlcl9mb3JtYXQpCisJCQlwcmV0dHlfcHJpbnRfY29tbWl0KCZjdHgsIGNvbW1pdCwgJm9uZWxpbmUpOworCQllbHNlCisJCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJXMiLCAmb25lbGluZSwgJmN0eCk7CisJfQorCisJaW5zZXJ0X29uZV9yZWNvcmQobG9nLCBhdXRob3IuYnVmLCBvbmVsaW5lLmxlbiA/IG9uZWxpbmUuYnVmIDogIjxub25lPiIpOworCisJc3RyYnVmX3JlbGVhc2UoJmF1dGhvcik7CisJc3RyYnVmX3JlbGVhc2UoJm9uZWxpbmUpOworfQorCitzdGF0aWMgdm9pZCBnZXRfZnJvbV9yZXYoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzaG9ydGxvZyAqbG9nKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2KSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldikpICE9IE5VTEwpCisJCXNob3J0bG9nX2FkZF9jb21taXQobG9nLCBjb21taXQpOworfQorCitzdGF0aWMgaW50IHBhcnNlX3VpbnQoY2hhciBjb25zdCAqKmFyZywgaW50IGNvbW1hLCBpbnQgZGVmdmFsKQoreworCXVuc2lnbmVkIGxvbmcgdWw7CisJaW50IHJldDsKKwljaGFyICplbmRwOworCisJdWwgPSBzdHJ0b3VsKCphcmcsICZlbmRwLCAxMCk7CisJaWYgKCplbmRwICYmICplbmRwICE9IGNvbW1hKQorCQlyZXR1cm4gLTE7CisJaWYgKHVsID4gSU5UX01BWCkKKwkJcmV0dXJuIC0xOworCXJldCA9ICphcmcgPT0gZW5kcCA/IGRlZnZhbCA6IChpbnQpdWw7CisJKmFyZyA9ICplbmRwID8gZW5kcCArIDEgOiBlbmRwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHdyYXBfYXJnX3VzYWdlW10gPSAiLXdbPHdpZHRoPlssPGluZGVudDE+Wyw8aW5kZW50Mj5dXV0iOworI2RlZmluZSBERUZBVUxUX1dSQVBMRU4gNzYKKyNkZWZpbmUgREVGQVVMVF9JTkRFTlQxIDYKKyNkZWZpbmUgREVGQVVMVF9JTkRFTlQyIDkKKworc3RhdGljIGludCBwYXJzZV93cmFwX2FyZ3MoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc2hvcnRsb2cgKmxvZyA9IG9wdC0+dmFsdWU7CisKKwlsb2ctPndyYXBfbGluZXMgPSAhdW5zZXQ7CisJaWYgKHVuc2V0KQorCQlyZXR1cm4gMDsKKwlpZiAoIWFyZykgeworCQlsb2ctPndyYXAgPSBERUZBVUxUX1dSQVBMRU47CisJCWxvZy0+aW4xID0gREVGQVVMVF9JTkRFTlQxOworCQlsb2ctPmluMiA9IERFRkFVTFRfSU5ERU5UMjsKKwkJcmV0dXJuIDA7CisJfQorCisJbG9nLT53cmFwID0gcGFyc2VfdWludCgmYXJnLCAnLCcsIERFRkFVTFRfV1JBUExFTik7CisJbG9nLT5pbjEgPSBwYXJzZV91aW50KCZhcmcsICcsJywgREVGQVVMVF9JTkRFTlQxKTsKKwlsb2ctPmluMiA9IHBhcnNlX3VpbnQoJmFyZywgJ1wwJywgREVGQVVMVF9JTkRFTlQyKTsKKwlpZiAobG9nLT53cmFwIDwgMCB8fCBsb2ctPmluMSA8IDAgfHwgbG9nLT5pbjIgPCAwKQorCQlyZXR1cm4gZXJyb3Iod3JhcF9hcmdfdXNhZ2UpOworCWlmIChsb2ctPndyYXAgJiYKKwkgICAgKChsb2ctPmluMSAmJiBsb2ctPndyYXAgPD0gbG9nLT5pbjEpIHx8CisJICAgICAobG9nLT5pbjIgJiYgbG9nLT53cmFwIDw9IGxvZy0+aW4yKSkpCisJCXJldHVybiBlcnJvcih3cmFwX2FyZ191c2FnZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2hvcnRsb2dfaW5pdChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZykKK3sKKwltZW1zZXQobG9nLCAwLCBzaXplb2YoKmxvZykpOworCisJcmVhZF9tYWlsbWFwKCZsb2ctPm1haWxtYXAsICZsb2ctPmNvbW1vbl9yZXBvX3ByZWZpeCk7CisKKwlsb2ctPmxpc3Quc3RyZHVwX3N0cmluZ3MgPSAxOworCWxvZy0+d3JhcCA9IERFRkFVTFRfV1JBUExFTjsKKwlsb2ctPmluMSA9IERFRkFVTFRfSU5ERU5UMTsKKwlsb2ctPmluMiA9IERFRkFVTFRfSU5ERU5UMjsKK30KKworaW50IGNtZF9zaG9ydGxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc2hvcnRsb2cgbG9nID0geyBTVFJJTkdfTElTVF9JTklUX05PRFVQIH07CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlpbnQgbm9uZ2l0ID0gIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5OworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdjJywgImNvbW1pdHRlciIsICZsb2cuY29tbWl0dGVyLAorCQkJIE5fKCJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIikpLAorCQlPUFRfQk9PTCgnbicsICJudW1iZXJlZCIsICZsb2cuc29ydF9ieV9udW1iZXIsCisJCQkgTl8oInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIpKSwKKwkJT1BUX0JPT0woJ3MnLCAic3VtbWFyeSIsICZsb2cuc3VtbWFyeSwKKwkJCSBOXygiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiKSksCisJCU9QVF9CT09MKCdlJywgImVtYWlsIiwgJmxvZy5lbWFpbCwKKwkJCSBOXygiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICd3JywgTlVMTCwgJmxvZywgTl8oIjx3PlssPGkxPlssPGkyPl1dIiksCisJCQlOXygiTGluZXdyYXAgb3V0cHV0IiksIFBBUlNFX09QVF9PUFRBUkcsCisJCQkmcGFyc2Vfd3JhcF9hcmdzIH0sCisJCU9QVF9FTkQoKSwKKwl9OworCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCBjdHg7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJc2hvcnRsb2dfaW5pdCgmbG9nKTsKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBwcmVmaXgpOworCXBhcnNlX29wdGlvbnNfc3RhcnQoJmN0eCwgYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJZm9yICg7OykgeworCQlzd2l0Y2ggKHBhcnNlX29wdGlvbnNfc3RlcCgmY3R4LCBvcHRpb25zLCBzaG9ydGxvZ191c2FnZSkpIHsKKwkJY2FzZSBQQVJTRV9PUFRfSEVMUDoKKwkJY2FzZSBQQVJTRV9PUFRfRVJST1I6CisJCQlleGl0KDEyOSk7CisJCWNhc2UgUEFSU0VfT1BUX0NPTVBMRVRFOgorCQkJZXhpdCgwKTsKKwkJY2FzZSBQQVJTRV9PUFRfRE9ORToKKwkJCWdvdG8gcGFyc2VfZG9uZTsKKwkJfQorCQlwYXJzZV9yZXZpc2lvbl9vcHQoJnJldiwgJmN0eCwgb3B0aW9ucywgc2hvcnRsb2dfdXNhZ2UpOworCX0KK3BhcnNlX2RvbmU6CisJYXJnYyA9IHBhcnNlX29wdGlvbnNfZW5kKCZjdHgpOworCisJaWYgKG5vbmdpdCAmJiBhcmdjID4gMSkgeworCQllcnJvcihfKCJ0b28gbWFueSBhcmd1bWVudHMgZ2l2ZW4gb3V0c2lkZSByZXBvc2l0b3J5IikpOworCQl1c2FnZV93aXRoX29wdGlvbnMoc2hvcnRsb2dfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWlmIChzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCkgIT0gMSkgeworCQllcnJvcihfKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiksIGFyZ3ZbMV0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoc2hvcnRsb2dfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWxvZy51c2VyX2Zvcm1hdCA9IHJldi5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX1VTRVJGT1JNQVQ7CisJbG9nLmFiYnJldiA9IHJldi5hYmJyZXY7CisJbG9nLmZpbGUgPSByZXYuZGlmZm9wdC5maWxlOworCisJLyogYXNzdW1lIEhFQUQgaWYgZnJvbSBhIHR0eSAqLworCWlmICghbm9uZ2l0ICYmICFyZXYucGVuZGluZy5uciAmJiBpc2F0dHkoMCkpCisJCWFkZF9oZWFkX3RvX3BlbmRpbmcoJnJldik7CisJaWYgKHJldi5wZW5kaW5nLm5yID09IDApIHsKKwkJaWYgKGlzYXR0eSgwKSkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIikpOworCQlyZWFkX2Zyb21fc3RkaW4oJmxvZyk7CisJfQorCWVsc2UKKwkJZ2V0X2Zyb21fcmV2KCZyZXYsICZsb2cpOworCisJc2hvcnRsb2dfb3V0cHV0KCZsb2cpOworCWlmIChsb2cuZmlsZSAhPSBzdGRvdXQpCisJCWZjbG9zZShsb2cuZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF93cmFwcGVkX3Nob3J0bG9nX21zZyhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzaG9ydGxvZyAqbG9nKQoreworCXN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHNiLCBzLCBsb2ctPmluMSwgbG9nLT5pbjIsIGxvZy0+d3JhcCk7CisJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKK30KKwordm9pZCBzaG9ydGxvZ19vdXRwdXQoc3RydWN0IHNob3J0bG9nICpsb2cpCit7CisJaW50IGksIGo7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJaWYgKGxvZy0+c29ydF9ieV9udW1iZXIpCisJCVFTT1JUKGxvZy0+bGlzdC5pdGVtcywgbG9nLT5saXN0Lm5yLAorCQkgICAgICBsb2ctPnN1bW1hcnkgPyBjb21wYXJlX2J5X2NvdW50ZXIgOiBjb21wYXJlX2J5X2xpc3QpOworCWZvciAoaSA9IDA7IGkgPCBsb2ctPmxpc3QubnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9ICZsb2ctPmxpc3QuaXRlbXNbaV07CisJCWlmIChsb2ctPnN1bW1hcnkpIHsKKwkJCWZwcmludGYobG9nLT5maWxlLCAiJTZkXHQlc1xuIiwKKwkJCQkoaW50KVVUSUxfVE9fSU5UKGl0ZW0pLCBpdGVtLT5zdHJpbmcpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmluZ19saXN0ICpvbmVsaW5lcyA9IGl0ZW0tPnV0aWw7CisJCQlmcHJpbnRmKGxvZy0+ZmlsZSwgIiVzICglZCk6XG4iLAorCQkJCWl0ZW0tPnN0cmluZywgb25lbGluZXMtPm5yKTsKKwkJCWZvciAoaiA9IG9uZWxpbmVzLT5uciAtIDE7IGogPj0gMDsgai0tKSB7CisJCQkJY29uc3QgY2hhciAqbXNnID0gb25lbGluZXMtPml0ZW1zW2pdLnN0cmluZzsKKworCQkJCWlmIChsb2ctPndyYXBfbGluZXMpIHsKKwkJCQkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCQkJCWFkZF93cmFwcGVkX3Nob3J0bG9nX21zZygmc2IsIG1zZywgbG9nKTsKKwkJCQkJZndyaXRlKHNiLmJ1Ziwgc2IubGVuLCAxLCBsb2ctPmZpbGUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWZwcmludGYobG9nLT5maWxlLCAiICAgICAgJXNcbiIsIG1zZyk7CisJCQl9CisJCQlwdXRjKCdcbicsIGxvZy0+ZmlsZSk7CisJCQlvbmVsaW5lcy0+c3RyZHVwX3N0cmluZ3MgPSAxOworCQkJc3RyaW5nX2xpc3RfY2xlYXIob25lbGluZXMsIDApOworCQkJZnJlZShvbmVsaW5lcyk7CisJCX0KKworCQlsb2ctPmxpc3QuaXRlbXNbaV0udXRpbCA9IE5VTEw7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlsb2ctPmxpc3Quc3RyZHVwX3N0cmluZ3MgPSAxOworCXN0cmluZ19saXN0X2NsZWFyKCZsb2ctPmxpc3QsIDEpOworCWNsZWFyX21haWxtYXAoJmxvZy0+bWFpbG1hcCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Nob3ctYnJhbmNoLmMgYi9idWlsdGluL3Nob3ctYnJhbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM5MGNiYgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vc2hvdy1icmFuY2guYwpAQCAtMCwwICsxLDk1NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicHJldHR5LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIqIHNob3dfYnJhbmNoX3VzYWdlW10gPSB7CisgICAgTl8oImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorICAgICAgICIJCVstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorICAgICAgICIJCVstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyAgICAgICAiCQlbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIiksCisgICAgTl8oImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIpLAorICAgIE5VTEwKK307CisKK3N0YXRpYyBpbnQgc2hvd2JyYW5jaF91c2VfY29sb3IgPSAtMTsKKworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IGRlZmF1bHRfYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKworLyoKKyAqIFRPRE86IGNvbnZlcnQgdGhpcyB1c2Ugb2YgY29tbWl0LT5vYmplY3QuZmxhZ3MgdG8gY29tbWl0LXNsYWIKKyAqIGluc3RlYWQgdG8gc3RvcmUgYSBwb2ludGVyIHRvIHJlZiBuYW1lIGRpcmVjdGx5LiBUaGVuIHVzZSB0aGUgc2FtZQorICogVU5JTlRFUkVTVElORyBkZWZpbml0aW9uIGZyb20gcmV2aXNpb24uaCBoZXJlLgorICovCisjZGVmaW5lIFVOSU5URVJFU1RJTkcJMDEKKworI2RlZmluZSBSRVZfU0hJRlQJIDIKKyNkZWZpbmUgTUFYX1JFVlMJKEZMQUdfQklUUyAtIFJFVl9TSElGVCkgLyogc2hvdWxkIG5vdCBleGNlZWQgYml0c19wZXJfaW50IC0gUkVWX1NISUZUICovCisKKyNkZWZpbmUgREVGQVVMVF9SRUZMT0cJNAorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NvbG9yX2NvZGUoaW50IGlkeCkKK3sKKwlpZiAod2FudF9jb2xvcihzaG93YnJhbmNoX3VzZV9jb2xvcikpCisJCXJldHVybiBjb2x1bW5fY29sb3JzX2Fuc2lbaWR4ICUgY29sdW1uX2NvbG9yc19hbnNpX21heF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NvbG9yX3Jlc2V0X2NvZGUodm9pZCkKK3sKKwlpZiAod2FudF9jb2xvcihzaG93YnJhbmNoX3VzZV9jb2xvcikpCisJCXJldHVybiBHSVRfQ09MT1JfUkVTRVQ7CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCXJldHVybiBjb21taXQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgY29tbWl0X25hbWUgeworCWNvbnN0IGNoYXIgKmhlYWRfbmFtZTsgLyogd2hpY2ggaGVhZCdzIGFuY2VzdG9yPyAqLworCWludCBnZW5lcmF0aW9uOyAvKiBob3cgbWFueSBwYXJlbnRzIGF3YXkgZnJvbSBoZWFkX25hbWUgKi8KK307CisKK2RlZmluZV9jb21taXRfc2xhYihjb21taXRfbmFtZV9zbGFiLCBzdHJ1Y3QgY29tbWl0X25hbWUgKik7CitzdGF0aWMgc3RydWN0IGNvbW1pdF9uYW1lX3NsYWIgbmFtZV9zbGFiOworCitzdGF0aWMgc3RydWN0IGNvbW1pdF9uYW1lICpjb21taXRfdG9fbmFtZShzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcmV0dXJuICpjb21taXRfbmFtZV9zbGFiX2F0KCZuYW1lX3NsYWIsIGNvbW1pdCk7Cit9CisKKworLyogTmFtZSB0aGUgY29tbWl0IGFzIG50aCBnZW5lcmF0aW9uIGFuY2VzdG9yIG9mIGhlYWRfbmFtZTsKKyAqIHdlIGNvdW50IG9ubHkgdGhlIGZpcnN0LXBhcmVudCByZWxhdGlvbnNoaXAgZm9yIG5hbWluZyBwdXJwb3Nlcy4KKyAqLworc3RhdGljIHZvaWQgbmFtZV9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpoZWFkX25hbWUsIGludCBudGgpCit7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuYW1lOworCisJbmFtZSA9ICpjb21taXRfbmFtZV9zbGFiX2F0KCZuYW1lX3NsYWIsIGNvbW1pdCk7CisJaWYgKCFuYW1lKSB7CisJCW5hbWUgPSB4bWFsbG9jKHNpemVvZigqbmFtZSkpOworCQkqY29tbWl0X25hbWVfc2xhYl9hdCgmbmFtZV9zbGFiLCBjb21taXQpID0gbmFtZTsKKwl9CisJbmFtZS0+aGVhZF9uYW1lID0gaGVhZF9uYW1lOworCW5hbWUtPmdlbmVyYXRpb24gPSBudGg7Cit9CisKKy8qIFBhcmVudCBpcyB0aGUgZmlyc3QgcGFyZW50IG9mIHRoZSBjb21taXQuICBXZSBtYXkgbmFtZSBpdAorICogYXMgKG4rMSl0aCBnZW5lcmF0aW9uIGFuY2VzdG9yIG9mIHRoZSBzYW1lIGhlYWRfbmFtZSBhcworICogY29tbWl0IGlzIG50aCBnZW5lcmF0aW9uIGFuY2VzdG9yIG9mLCBpZiB0aGF0IGdlbmVyYXRpb24KKyAqIG51bWJlciBpcyBiZXR0ZXIgdGhhbiB0aGUgbmFtZSBpdCBhbHJlYWR5IGhhcy4KKyAqLworc3RhdGljIHZvaWQgbmFtZV9wYXJlbnQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICpwYXJlbnQpCit7CisJc3RydWN0IGNvbW1pdF9uYW1lICpjb21taXRfbmFtZSA9IGNvbW1pdF90b19uYW1lKGNvbW1pdCk7CisJc3RydWN0IGNvbW1pdF9uYW1lICpwYXJlbnRfbmFtZSA9IGNvbW1pdF90b19uYW1lKHBhcmVudCk7CisJaWYgKCFjb21taXRfbmFtZSkKKwkJcmV0dXJuOworCWlmICghcGFyZW50X25hbWUgfHwKKwkgICAgY29tbWl0X25hbWUtPmdlbmVyYXRpb24gKyAxIDwgcGFyZW50X25hbWUtPmdlbmVyYXRpb24pCisJCW5hbWVfY29tbWl0KHBhcmVudCwgY29tbWl0X25hbWUtPmhlYWRfbmFtZSwKKwkJCSAgICBjb21taXRfbmFtZS0+Z2VuZXJhdGlvbiArIDEpOworfQorCitzdGF0aWMgaW50IG5hbWVfZmlyc3RfcGFyZW50X2NoYWluKHN0cnVjdCBjb21taXQgKmMpCit7CisJaW50IGkgPSAwOworCXdoaWxlIChjKSB7CisJCXN0cnVjdCBjb21taXQgKnA7CisJCWlmICghY29tbWl0X3RvX25hbWUoYykpCisJCQlicmVhazsKKwkJaWYgKCFjLT5wYXJlbnRzKQorCQkJYnJlYWs7CisJCXAgPSBjLT5wYXJlbnRzLT5pdGVtOworCQlpZiAoIWNvbW1pdF90b19uYW1lKHApKSB7CisJCQluYW1lX3BhcmVudChjLCBwKTsKKwkJCWkrKzsKKwkJfQorCQllbHNlCisJCQlicmVhazsKKwkJYyA9IHA7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBuYW1lX2NvbW1pdHMoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJIHN0cnVjdCBjb21taXQgKipyZXYsCisJCQkgY2hhciAqKnJlZl9uYW1lLAorCQkJIGludCBudW1fcmV2KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqY2w7CisJc3RydWN0IGNvbW1pdCAqYzsKKwlpbnQgaTsKKworCS8qIEZpcnN0IGdpdmUgbmFtZXMgdG8gdGhlIGdpdmVuIGhlYWRzICovCisJZm9yIChjbCA9IGxpc3Q7IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisJCWMgPSBjbC0+aXRlbTsKKwkJaWYgKGNvbW1pdF90b19uYW1lKGMpKQorCQkJY29udGludWU7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspIHsKKwkJCWlmIChyZXZbaV0gPT0gYykgeworCQkJCW5hbWVfY29tbWl0KGMsIHJlZl9uYW1lW2ldLCAwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIFRoZW4gY29tbWl0cyBvbiB0aGUgZmlyc3QgcGFyZW50IGFuY2VzdHJ5IGNoYWluICovCisJZG8geworCQlpID0gMDsKKwkJZm9yIChjbCA9IGxpc3Q7IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisJCQlpICs9IG5hbWVfZmlyc3RfcGFyZW50X2NoYWluKGNsLT5pdGVtKTsKKwkJfQorCX0gd2hpbGUgKGkpOworCisJLyogRmluYWxseSwgYW55IHVubmFtZWQgY29tbWl0cyAqLworCWRvIHsKKwkJaSA9IDA7CisJCWZvciAoY2wgPSBsaXN0OyBjbDsgY2wgPSBjbC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJc3RydWN0IGNvbW1pdF9uYW1lICpuOworCQkJaW50IG50aDsKKwkJCWMgPSBjbC0+aXRlbTsKKwkJCWlmICghY29tbWl0X3RvX25hbWUoYykpCisJCQkJY29udGludWU7CisJCQluID0gY29tbWl0X3RvX25hbWUoYyk7CisJCQlwYXJlbnRzID0gYy0+cGFyZW50czsKKwkJCW50aCA9IDA7CisJCQl3aGlsZSAocGFyZW50cykgeworCQkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOworCQkJCXN0cnVjdCBzdHJidWYgbmV3bmFtZSA9IFNUUkJVRl9JTklUOworCQkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQkJCW50aCsrOworCQkJCWlmIChjb21taXRfdG9fbmFtZShwKSkKKwkJCQkJY29udGludWU7CisJCQkJc3dpdGNoIChuLT5nZW5lcmF0aW9uKSB7CisJCQkJY2FzZSAwOgorCQkJCQlzdHJidWZfYWRkc3RyKCZuZXduYW1lLCBuLT5oZWFkX25hbWUpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDE6CisJCQkJCXN0cmJ1Zl9hZGRmKCZuZXduYW1lLCAiJXNeIiwgbi0+aGVhZF9uYW1lKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJc3RyYnVmX2FkZGYoJm5ld25hbWUsICIlc34lZCIsCisJCQkJCQkgICAgbi0+aGVhZF9uYW1lLCBuLT5nZW5lcmF0aW9uKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChudGggPT0gMSkKKwkJCQkJc3RyYnVmX2FkZGNoKCZuZXduYW1lLCAnXicpOworCQkJCWVsc2UKKwkJCQkJc3RyYnVmX2FkZGYoJm5ld25hbWUsICJeJWQiLCBudGgpOworCQkJCW5hbWVfY29tbWl0KHAsIHN0cmJ1Zl9kZXRhY2goJm5ld25hbWUsIE5VTEwpLCAwKTsKKwkJCQlpKys7CisJCQkJbmFtZV9maXJzdF9wYXJlbnRfY2hhaW4ocCk7CisJCQl9CisJCX0KKwl9IHdoaWxlIChpKTsKK30KKworc3RhdGljIGludCBtYXJrX3NlZW4oc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipzZWVuX3ApCit7CisJaWYgKCFjb21taXQtPm9iamVjdC5mbGFncykgeworCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBzZWVuX3ApOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGpvaW5fcmV2cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0X3AsCisJCSAgICAgIHN0cnVjdCBjb21taXRfbGlzdCAqKnNlZW5fcCwKKwkJICAgICAgaW50IG51bV9yZXYsIGludCBleHRyYSkKK3sKKwlpbnQgYWxsX21hc2sgPSAoKDF1IDw8IChSRVZfU0hJRlQgKyBudW1fcmV2KSkgLSAxKTsKKwlpbnQgYWxsX3JldnMgPSBhbGxfbWFzayAmIH4oKDF1IDw8IFJFVl9TSElGVCkgLSAxKTsKKworCXdoaWxlICgqbGlzdF9wKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwkJaW50IHN0aWxsX2ludGVyZXN0aW5nID0gISFpbnRlcmVzdGluZygqbGlzdF9wKTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX2NvbW1pdChsaXN0X3ApOworCQlpbnQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFncyAmIGFsbF9tYXNrOworCisJCWlmICghc3RpbGxfaW50ZXJlc3RpbmcgJiYgZXh0cmEgPD0gMCkKKwkJCWJyZWFrOworCisJCW1hcmtfc2Vlbihjb21taXQsIHNlZW5fcCk7CisJCWlmICgoZmxhZ3MgJiBhbGxfcmV2cykgPT0gYWxsX3JldnMpCisJCQlmbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCWludCB0aGlzX2ZsYWcgPSBwLT5vYmplY3QuZmxhZ3M7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCWlmICgodGhpc19mbGFnICYgZmxhZ3MpID09IGZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJcGFyc2VfY29tbWl0KHApOworCQkJaWYgKG1hcmtfc2VlbihwLCBzZWVuX3ApICYmICFzdGlsbF9pbnRlcmVzdGluZykKKwkJCQlleHRyYS0tOworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IGZsYWdzOworCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocCwgbGlzdF9wKTsKKwkJfQorCX0KKworCS8qCisJICogUG9zdHByb2Nlc3MgdG8gY29tcGxldGUgd2VsbC1wb2lzb25pbmcuCisJICoKKwkgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYWxsIHRoZSBjb21taXRzIHdlIGhhdmUgc2VlbiBpbgorCSAqIHNlZW5fcCBsaXN0LiAgTWFyayBhbnl0aGluZyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20KKwkgKiB1bmludGVyZXN0aW5nIGNvbW1pdHMgbm90IGludGVyZXN0aW5nLgorCSAqLworCWZvciAoOzspIHsKKwkJaW50IGNoYW5nZWQgPSAwOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnM7CisJCWZvciAocyA9ICpzZWVuX3A7IHM7IHMgPSBzLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjID0gcy0+aXRlbTsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCQkJaWYgKCgoYy0+b2JqZWN0LmZsYWdzICYgYWxsX3JldnMpICE9IGFsbF9yZXZzKSAmJgorCQkJICAgICEoYy0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQkJY29udGludWU7CisKKwkJCS8qIFRoZSBjdXJyZW50IGNvbW1pdCBpcyBlaXRoZXIgYSBtZXJnZSBiYXNlIG9yCisJCQkgKiBhbHJlYWR5IHVuaW50ZXJlc3Rpbmcgb25lLiAgTWFyayBpdHMgcGFyZW50cworCQkJICogYXMgdW5pbnRlcmVzdGluZyBjb21taXRzIF9vbmx5XyBpZiB0aGV5IGFyZQorCQkJICogYWxyZWFkeSBwYXJzZWQuICBObyByZWFzb24gdG8gZmluZCBuZXcgb25lcworCQkJICogaGVyZS4KKwkJCSAqLworCQkJcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCQl3aGlsZSAocGFyZW50cykgeworCQkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOworCQkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQkJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKSB7CisJCQkJCXAtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJCQljaGFuZ2VkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKCFjaGFuZ2VkKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X29uZV9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgbm9fbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHByZXR0eSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnByZXR0eV9zdHIgPSAiKHVuYXZhaWxhYmxlKSI7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuYW1lID0gY29tbWl0X3RvX25hbWUoY29tbWl0KTsKKworCWlmIChjb21taXQtPm9iamVjdC5wYXJzZWQpIHsKKwkJcHBfY29tbWl0X2Vhc3koQ01JVF9GTVRfT05FTElORSwgY29tbWl0LCAmcHJldHR5KTsKKwkJcHJldHR5X3N0ciA9IHByZXR0eS5idWY7CisJfQorCXNraXBfcHJlZml4KHByZXR0eV9zdHIsICJbUEFUQ0hdICIsICZwcmV0dHlfc3RyKTsKKworCWlmICghbm9fbmFtZSkgeworCQlpZiAobmFtZSAmJiBuYW1lLT5oZWFkX25hbWUpIHsKKwkJCXByaW50ZigiWyVzIiwgbmFtZS0+aGVhZF9uYW1lKTsKKwkJCWlmIChuYW1lLT5nZW5lcmF0aW9uKSB7CisJCQkJaWYgKG5hbWUtPmdlbmVyYXRpb24gPT0gMSkKKwkJCQkJcHJpbnRmKCJeIik7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIn4lZCIsIG5hbWUtPmdlbmVyYXRpb24pOworCQkJfQorCQkJcHJpbnRmKCJdICIpOworCQl9CisJCWVsc2UKKwkJCXByaW50ZigiWyVzXSAiLAorCQkJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldigmY29tbWl0LT5vYmplY3Qub2lkLAorCQkJCQkJICBERUZBVUxUX0FCQlJFVikpOworCX0KKwlwdXRzKHByZXR0eV9zdHIpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmV0dHkpOworfQorCitzdGF0aWMgY2hhciAqcmVmX25hbWVbTUFYX1JFVlMgKyAxXTsKK3N0YXRpYyBpbnQgcmVmX25hbWVfY250OworCitzdGF0aWMgY29uc3QgY2hhciAqZmluZF9kaWdpdF9wcmVmaXgoY29uc3QgY2hhciAqcywgaW50ICp2KQoreworCWNvbnN0IGNoYXIgKnA7CisJaW50IHZlcjsKKwljaGFyIGNoOworCisJZm9yIChwID0gcywgdmVyID0gMDsKKwkgICAgICcwJyA8PSAoY2ggPSAqcCkgJiYgY2ggPD0gJzknOworCSAgICAgcCsrKQorCQl2ZXIgPSB2ZXIgKiAxMCArIGNoIC0gJzAnOworCSp2ID0gdmVyOworCXJldHVybiBwOworfQorCisKK3N0YXRpYyBpbnQgdmVyc2lvbl9jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwl3aGlsZSAoMSkgeworCQlpbnQgdmEsIHZiOworCisJCWEgPSBmaW5kX2RpZ2l0X3ByZWZpeChhLCAmdmEpOworCQliID0gZmluZF9kaWdpdF9wcmVmaXgoYiwgJnZiKTsKKwkJaWYgKHZhICE9IHZiKQorCQkJcmV0dXJuIHZhIC0gdmI7CisKKwkJd2hpbGUgKDEpIHsKKwkJCWludCBjYSA9ICphOworCQkJaW50IGNiID0gKmI7CisJCQlpZiAoJzAnIDw9IGNhICYmIGNhIDw9ICc5JykKKwkJCQljYSA9IDA7CisJCQlpZiAoJzAnIDw9IGNiICYmIGNiIDw9ICc5JykKKwkJCQljYiA9IDA7CisJCQlpZiAoY2EgIT0gY2IpCisJCQkJcmV0dXJuIGNhIC0gY2I7CisJCQlpZiAoIWNhKQorCQkJCWJyZWFrOworCQkJYSsrOworCQkJYisrOworCQl9CisJCWlmICghKmEgJiYgISpiKQorCQkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IGNvbXBhcmVfcmVmX25hbWUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IGNoYXIgKiBjb25zdCphID0gYV8sICogY29uc3QqYiA9IGJfOworCXJldHVybiB2ZXJzaW9uX2NtcCgqYSwgKmIpOworfQorCitzdGF0aWMgdm9pZCBzb3J0X3JlZl9yYW5nZShpbnQgYm90dG9tLCBpbnQgdG9wKQoreworCVFTT1JUKHJlZl9uYW1lICsgYm90dG9tLCB0b3AgLSBib3R0b20sIGNvbXBhcmVfcmVmX25hbWUpOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICBpbnQgYWxsb3dfZHVwcykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAgICAgIG9pZCwgMSk7CisJaW50IGk7CisKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFsbG93X2R1cHMpIHsKKwkJLyogQXZvaWQgYWRkaW5nIHRoZSBzYW1lIHRoaW5nIHR3aWNlICovCisJCWZvciAoaSA9IDA7IGkgPCByZWZfbmFtZV9jbnQ7IGkrKykKKwkJCWlmICghc3RyY21wKHJlZm5hbWUsIHJlZl9uYW1lW2ldKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisJaWYgKE1BWF9SRVZTIDw9IHJlZl9uYW1lX2NudCkgeworCQl3YXJuaW5nKFFfKCJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIiwKKwkJCSAgICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIsCisJCQkgICBNQVhfUkVWUyksIHJlZm5hbWUsIE1BWF9SRVZTKTsKKwkJcmV0dXJuIDA7CisJfQorCXJlZl9uYW1lW3JlZl9uYW1lX2NudCsrXSA9IHhzdHJkdXAocmVmbmFtZSk7CisJcmVmX25hbWVbcmVmX25hbWVfY250XSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX2hlYWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3RfaWQgdG1wOworCWludCBvZnMgPSAxMTsKKwlpZiAoIXN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQlyZXR1cm4gMDsKKwkvKiBJZiBib3RoIGhlYWRzL2ZvbyBhbmQgdGFncy9mb28gZXhpc3RzLCBnZXRfc2hhMSB3b3VsZAorCSAqIGdldCBjb25mdXNlZC4KKwkgKi8KKwlpZiAoZ2V0X29pZChyZWZuYW1lICsgb2ZzLCAmdG1wKSB8fCAhb2lkZXEoJnRtcCwgb2lkKSkKKwkJb2ZzID0gNTsKKwlyZXR1cm4gYXBwZW5kX3JlZihyZWZuYW1lICsgb2ZzLCBvaWQsIDApOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9yZW1vdGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdF9pZCB0bXA7CisJaW50IG9mcyA9IDEzOworCWlmICghc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSkKKwkJcmV0dXJuIDA7CisJLyogSWYgYm90aCBoZWFkcy9mb28gYW5kIHRhZ3MvZm9vIGV4aXN0cywgZ2V0X3NoYTEgd291bGQKKwkgKiBnZXQgY29uZnVzZWQuCisJICovCisJaWYgKGdldF9vaWQocmVmbmFtZSArIG9mcywgJnRtcCkgfHwgIW9pZGVxKCZ0bXAsIG9pZCkpCisJCW9mcyA9IDU7CisJcmV0dXJuIGFwcGVuZF9yZWYocmVmbmFtZSArIG9mcywgb2lkLCAwKTsKK30KKworc3RhdGljIGludCBhcHBlbmRfdGFnX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWlmICghc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGFwcGVuZF9yZWYocmVmbmFtZSArIDUsIG9pZCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICptYXRjaF9yZWZfcGF0dGVybiA9IE5VTEw7CitzdGF0aWMgaW50IG1hdGNoX3JlZl9zbGFzaCA9IDA7CisKK3N0YXRpYyBpbnQgYXBwZW5kX21hdGNoaW5nX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJLyogd2Ugd2FudCB0byBhbGxvdyBwYXR0ZXJuIGhvbGQvPGFzdGVyaXNrPiB0byBzaG93IGFsbAorCSAqIGJyYW5jaGVzIHVuZGVyIHJlZnMvaGVhZHMvaG9sZC8sIGFuZCB2MC45OS45PyB0byBzaG93CisJICogcmVmcy90YWdzL3YwLjk5LjlhIGFuZCBmcmllbmRzLgorCSAqLworCWNvbnN0IGNoYXIgKnRhaWw7CisJaW50IHNsYXNoID0gY291bnRfc2xhc2hlcyhyZWZuYW1lKTsKKwlmb3IgKHRhaWwgPSByZWZuYW1lOyAqdGFpbCAmJiBtYXRjaF9yZWZfc2xhc2ggPCBzbGFzaDsgKQorCQlpZiAoKnRhaWwrKyA9PSAnLycpCisJCQlzbGFzaC0tOworCWlmICghKnRhaWwpCisJCXJldHVybiAwOworCWlmICh3aWxkbWF0Y2gobWF0Y2hfcmVmX3BhdHRlcm4sIHRhaWwsIDApKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCXJldHVybiBhcHBlbmRfaGVhZF9yZWYocmVmbmFtZSwgb2lkLCBmbGFnLCBjYl9kYXRhKTsKKwlpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKSkKKwkJcmV0dXJuIGFwcGVuZF90YWdfcmVmKHJlZm5hbWUsIG9pZCwgZmxhZywgY2JfZGF0YSk7CisJcmV0dXJuIGFwcGVuZF9yZWYocmVmbmFtZSwgb2lkLCAwKTsKK30KKworc3RhdGljIHZvaWQgc25hcmZfcmVmcyhpbnQgaGVhZCwgaW50IHJlbW90ZXMpCit7CisJaWYgKGhlYWQpIHsKKwkJaW50IG9yaWdfY250ID0gcmVmX25hbWVfY250OworCisJCWZvcl9lYWNoX3JlZihhcHBlbmRfaGVhZF9yZWYsIE5VTEwpOworCQlzb3J0X3JlZl9yYW5nZShvcmlnX2NudCwgcmVmX25hbWVfY250KTsKKwl9CisJaWYgKHJlbW90ZXMpIHsKKwkJaW50IG9yaWdfY250ID0gcmVmX25hbWVfY250OworCisJCWZvcl9lYWNoX3JlZihhcHBlbmRfcmVtb3RlX3JlZiwgTlVMTCk7CisJCXNvcnRfcmVmX3JhbmdlKG9yaWdfY250LCByZWZfbmFtZV9jbnQpOworCX0KK30KKworc3RhdGljIGludCByZXZfaXNfaGVhZChjb25zdCBjaGFyICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqaGVhZF9zaGExLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmICghaGVhZCB8fCAoaGVhZF9zaGExICYmIHNoYTEgJiYgIWhhc2hlcShoZWFkX3NoYTEsIHNoYTEpKSkKKwkJcmV0dXJuIDA7CisJc2tpcF9wcmVmaXgoaGVhZCwgInJlZnMvaGVhZHMvIiwgJmhlYWQpOworCWlmICghc2tpcF9wcmVmaXgobmFtZSwgInJlZnMvaGVhZHMvIiwgJm5hbWUpKQorCQlza2lwX3ByZWZpeChuYW1lLCAiaGVhZHMvIiwgJm5hbWUpOworCXJldHVybiAhc3RyY21wKGhlYWQsIG5hbWUpOworfQorCitzdGF0aWMgaW50IHNob3dfbWVyZ2VfYmFzZShzdHJ1Y3QgY29tbWl0X2xpc3QgKnNlZW4sIGludCBudW1fcmV2KQoreworCWludCBhbGxfbWFzayA9ICgoMXUgPDwgKFJFVl9TSElGVCArIG51bV9yZXYpKSAtIDEpOworCWludCBhbGxfcmV2cyA9IGFsbF9tYXNrICYgfigoMXUgPDwgUkVWX1NISUZUKSAtIDEpOworCWludCBleGl0X3N0YXR1cyA9IDE7CisKKwl3aGlsZSAoc2VlbikgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3BfY29tbWl0KCZzZWVuKTsKKwkJaW50IGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBhbGxfbWFzazsKKwkJaWYgKCEoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSAmJgorCQkgICAgKChmbGFncyAmIGFsbF9yZXZzKSA9PSBhbGxfcmV2cykpIHsKKwkJCXB1dHMob2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCQlleGl0X3N0YXR1cyA9IDA7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQl9CisJfQorCXJldHVybiBleGl0X3N0YXR1czsKK30KKworc3RhdGljIGludCBzaG93X2luZGVwZW5kZW50KHN0cnVjdCBjb21taXQgKipyZXYsCisJCQkgICAgaW50IG51bV9yZXYsCisJCQkgICAgdW5zaWduZWQgaW50ICpyZXZfbWFzaykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcmV2W2ldOworCQl1bnNpZ25lZCBpbnQgZmxhZyA9IHJldl9tYXNrW2ldOworCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyA9PSBmbGFnKQorCQkJcHV0cyhvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9vbmVfcmV2KGNvbnN0IGNoYXIgKmF2KQoreworCXN0cnVjdCBvYmplY3RfaWQgcmV2a2V5OworCWlmICghZ2V0X29pZChhdiwgJnJldmtleSkpIHsKKwkJYXBwZW5kX3JlZihhdiwgJnJldmtleSwgMCk7CisJCXJldHVybjsKKwl9CisJaWYgKHN0cnBicmsoYXYsICIqP1siKSkgeworCQkvKiBnbG9iIHN0eWxlIG1hdGNoICovCisJCWludCBzYXZlZF9tYXRjaGVzID0gcmVmX25hbWVfY250OworCisJCW1hdGNoX3JlZl9wYXR0ZXJuID0gYXY7CisJCW1hdGNoX3JlZl9zbGFzaCA9IGNvdW50X3NsYXNoZXMoYXYpOworCQlmb3JfZWFjaF9yZWYoYXBwZW5kX21hdGNoaW5nX3JlZiwgTlVMTCk7CisJCWlmIChzYXZlZF9tYXRjaGVzID09IHJlZl9uYW1lX2NudCAmJgorCQkgICAgcmVmX25hbWVfY250IDwgTUFYX1JFVlMpCisJCQllcnJvcihfKCJubyBtYXRjaGluZyByZWZzIHdpdGggJXMiKSwgYXYpOworCQlzb3J0X3JlZl9yYW5nZShzYXZlZF9tYXRjaGVzLCByZWZfbmFtZV9jbnQpOworCQlyZXR1cm47CisJfQorCWRpZSgiYmFkIHNoYTEgcmVmZXJlbmNlICVzIiwgYXYpOworfQorCitzdGF0aWMgaW50IGdpdF9zaG93X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAic2hvd2JyYW5jaC5kZWZhdWx0IikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQkvKgorCQkgKiBkZWZhdWx0X2FyZyBpcyBub3cgcGFzc2VkIHRvIHBhcnNlX29wdGlvbnMoKSwgc28gd2UgbmVlZCB0bworCQkgKiBtaW1pYyB0aGUgcmVhbCBhcmd2IGEgYml0IGJldHRlci4KKwkJICovCisJCWlmICghZGVmYXVsdF9hcmdzLmFyZ2MpCisJCQlhcmd2X2FycmF5X3B1c2goJmRlZmF1bHRfYXJncywgInNob3ctYnJhbmNoIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmZGVmYXVsdF9hcmdzLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvbG9yLnNob3dicmFuY2giKSkgeworCQlzaG93YnJhbmNoX3VzZV9jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBvbWl0X2luX2RlbnNlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdCAqKnJldiwgaW50IG4pCit7CisJLyogSWYgdGhlIGNvbW1pdCBpcyB0aXAgb2YgdGhlIG5hbWVkIGJyYW5jaGVzLCBkbyBub3QKKwkgKiBvbWl0IGl0LgorCSAqIE90aGVyd2lzZSwgaWYgaXQgaXMgYSBtZXJnZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lCisJICogdGlwLCBpdCBpcyBub3QgdGhhdCBpbnRlcmVzdGluZy4KKwkgKi8KKwlpbnQgaSwgZmxhZywgY291bnQ7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJaWYgKHJldltpXSA9PSBjb21taXQpCisJCQlyZXR1cm4gMDsKKwlmbGFnID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJZm9yIChpID0gY291bnQgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChmbGFnICYgKDF1IDw8IChpICsgUkVWX1NISUZUKSkpCisJCQljb3VudCsrOworCX0KKwlpZiAoY291bnQgPT0gMSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVmbG9nID0gMDsKKworc3RhdGljIGludCBwYXJzZV9yZWZsb2dfcGFyYW0oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCit7CisJY2hhciAqZXA7CisJY29uc3QgY2hhciAqKmJhc2UgPSAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlOworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlpZiAoIWFyZykKKwkJYXJnID0gIiI7CisJcmVmbG9nID0gc3RydG91bChhcmcsICZlcCwgMTApOworCWlmICgqZXAgPT0gJywnKQorCQkqYmFzZSA9IGVwICsgMTsKKwllbHNlIGlmICgqZXApCisJCXJldHVybiBlcnJvcigidW5yZWNvZ25pemVkIHJlZmxvZyBwYXJhbSAnJXMnIiwgYXJnKTsKKwllbHNlCisJCSpiYXNlID0gTlVMTDsKKwlpZiAocmVmbG9nIDw9IDApCisJCXJlZmxvZyA9IERFRkFVTFRfUkVGTE9HOworCXJldHVybiAwOworfQorCitpbnQgY21kX3Nob3dfYnJhbmNoKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNvbW1pdCAqcmV2W01BWF9SRVZTXSwgKmNvbW1pdDsKKwljaGFyICpyZWZsb2dfbXNnW01BWF9SRVZTXTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMLCAqc2VlbiA9IE5VTEw7CisJdW5zaWduZWQgaW50IHJldl9tYXNrW01BWF9SRVZTXTsKKwlpbnQgbnVtX3JldiwgaSwgZXh0cmEgPSAwOworCWludCBhbGxfaGVhZHMgPSAwLCBhbGxfcmVtb3RlcyA9IDA7CisJaW50IGFsbF9tYXNrLCBhbGxfcmV2czsKKwllbnVtIHJldl9zb3J0X29yZGVyIHNvcnRfb3JkZXIgPSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjsKKwljaGFyICpoZWFkOworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJaW50IG1lcmdlX2Jhc2UgPSAwOworCWludCBpbmRlcGVuZGVudCA9IDA7CisJaW50IG5vX25hbWUgPSAwOworCWludCBzaGExX25hbWUgPSAwOworCWludCBzaG93bl9tZXJnZV9wb2ludCA9IDA7CisJaW50IHdpdGhfY3VycmVudF9icmFuY2ggPSAwOworCWludCBoZWFkX2F0ID0gLTE7CisJaW50IHRvcGljcyA9IDA7CisJaW50IGRlbnNlID0gMTsKKwljb25zdCBjaGFyICpyZWZsb2dfYmFzZSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX3Nob3dfYnJhbmNoX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ2EnLCAiYWxsIiwgJmFsbF9oZWFkcywKKwkJCSBOXygic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIikpLAorCQlPUFRfQk9PTCgncicsICJyZW1vdGVzIiwgJmFsbF9yZW1vdGVzLAorCQkJIE5fKCJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIpKSwKKwkJT1BUX19DT0xPUigmc2hvd2JyYW5jaF91c2VfY29sb3IsCisJCQkgICAgTl8oImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giKSksCisJCXsgT1BUSU9OX0lOVEVHRVIsIDAsICJtb3JlIiwgJmV4dHJhLCBOXygibiIpLAorCQkJICAgIE5fKCJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIpLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkxIH0sCisJCU9QVF9TRVRfSU5UKDAsICJsaXN0IiwgJmV4dHJhLCBOXygic3lub255bSB0byBtb3JlPS0xIiksIC0xKSwKKwkJT1BUX0JPT0woMCwgIm5vLW5hbWUiLCAmbm9fbmFtZSwgTl8oInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIikpLAorCQlPUFRfQk9PTCgwLCAiY3VycmVudCIsICZ3aXRoX2N1cnJlbnRfYnJhbmNoLAorCQkJIE5fKCJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIpKSwKKwkJT1BUX0JPT0woMCwgInNoYTEtbmFtZSIsICZzaGExX25hbWUsCisJCQkgTl8oIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIpKSwKKwkJT1BUX0JPT0woMCwgIm1lcmdlLWJhc2UiLCAmbWVyZ2VfYmFzZSwKKwkJCSBOXygic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIpKSwKKwkJT1BUX0JPT0woMCwgImluZGVwZW5kZW50IiwgJmluZGVwZW5kZW50LAorCQkJICAgIE5fKCJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIikpLAorCQlPUFRfU0VUX0lOVCgwLCAidG9wby1vcmRlciIsICZzb3J0X29yZGVyLAorCQkJICAgIE5fKCJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiKSwKKwkJCSAgICBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUiksCisJCU9QVF9CT09MKDAsICJ0b3BpY3MiLCAmdG9waWNzLAorCQkJIE5fKCJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNwYXJzZSIsICZkZW5zZSwKKwkJCSAgICBOXygic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIiksIDApLAorCQlPUFRfU0VUX0lOVCgwLCAiZGF0ZS1vcmRlciIsICZzb3J0X29yZGVyLAorCQkJICAgIE5fKCJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgIgorCQkJICAgICAgICJ3aGVyZSBwb3NzaWJsZSIpLAorCQkJICAgIFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdnJywgInJlZmxvZyIsICZyZWZsb2dfYmFzZSwgTl8oIjxuPlssPGJhc2U+XSIpLAorCQkJICAgIE5fKCJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgIgorCQkJICAgICAgICJiYXNlIiksCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCSAgICBwYXJzZV9yZWZsb2dfcGFyYW0gfSwKKwkJT1BUX0VORCgpCisJfTsKKworCWluaXRfY29tbWl0X25hbWVfc2xhYigmbmFtZV9zbGFiKTsKKworCWdpdF9jb25maWcoZ2l0X3Nob3dfYnJhbmNoX2NvbmZpZywgTlVMTCk7CisKKwkvKiBJZiBub3RoaW5nIGlzIHNwZWNpZmllZCwgdHJ5IHRoZSBkZWZhdWx0IGZpcnN0ICovCisJaWYgKGFjID09IDEgJiYgZGVmYXVsdF9hcmdzLmFyZ2MpIHsKKwkJYWMgPSBkZWZhdWx0X2FyZ3MuYXJnYzsKKwkJYXYgPSBkZWZhdWx0X2FyZ3MuYXJndjsKKwl9CisKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIGJ1aWx0aW5fc2hvd19icmFuY2hfb3B0aW9ucywKKwkJCSAgIHNob3dfYnJhbmNoX3VzYWdlLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlpZiAoYWxsX2hlYWRzKQorCQlhbGxfcmVtb3RlcyA9IDE7CisKKwlpZiAoZXh0cmEgfHwgcmVmbG9nKSB7CisJCS8qICJsaXN0aW5nIiBtb2RlIGlzIGluY29tcGF0aWJsZSB3aXRoCisJCSAqIGluZGVwZW5kZW50IG5vciBtZXJnZS1iYXNlIG1vZGVzLgorCQkgKi8KKwkJaWYgKGluZGVwZW5kZW50IHx8IG1lcmdlX2Jhc2UpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoc2hvd19icmFuY2hfdXNhZ2UsCisJCQkJCSAgIGJ1aWx0aW5fc2hvd19icmFuY2hfb3B0aW9ucyk7CisJCWlmIChyZWZsb2cgJiYgKCgwIDwgZXh0cmEpIHx8IGFsbF9oZWFkcyB8fCBhbGxfcmVtb3RlcykpCisJCQkvKgorCQkJICogQXNraW5nIGZvciAtLW1vcmUgaW4gcmVmbG9nIG1vZGUgZG9lcyBub3QKKwkJCSAqIG1ha2Ugc2Vuc2UuICAtLWxpc3QgaXMgT2suCisJCQkgKgorCQkJICogQWxzbyAtLWFsbCBhbmQgLS1yZW1vdGVzIGRvIG5vdCBtYWtlIHNlbnNlIGVpdGhlci4KKwkJCSAqLworCQkJZGllKF8oIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsICIKKwkJCSAgICAgICItLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIpKTsKKwl9CisKKwkvKiBJZiBub3RoaW5nIGlzIHNwZWNpZmllZCwgc2hvdyBhbGwgYnJhbmNoZXMgYnkgZGVmYXVsdCAqLworCWlmIChhYyA8PSB0b3BpY3MgJiYgYWxsX2hlYWRzICsgYWxsX3JlbW90ZXMgPT0gMCkKKwkJYWxsX2hlYWRzID0gMTsKKworCWlmIChyZWZsb2cpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWNoYXIgKnJlZjsKKwkJaW50IGJhc2UgPSAwOworCQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCisJCWlmIChhYyA9PSAwKSB7CisJCQlzdGF0aWMgY29uc3QgY2hhciAqZmFrZV9hdlsyXTsKKworCQkJZmFrZV9hdlswXSA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwKKwkJCQkJCSAgICBSRVNPTFZFX1JFRl9SRUFESU5HLCAmb2lkLAorCQkJCQkJICAgIE5VTEwpOworCQkJZmFrZV9hdlsxXSA9IE5VTEw7CisJCQlhdiA9IGZha2VfYXY7CisJCQlhYyA9IDE7CisJCQlpZiAoISphdikKKwkJCQlkaWUoXygibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIpKTsKKwkJfQorCQlpZiAoYWMgIT0gMSkKKwkJCWRpZShfKCItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIikpOworCisJCWlmIChNQVhfUkVWUyA8IHJlZmxvZykKKwkJCWRpZShRXygib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIiwKKwkJCSAgICAgICAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iLAorCQkJICAgICAgIE1BWF9SRVZTKSwgTUFYX1JFVlMpOworCQlpZiAoIWR3aW1fcmVmKCphdiwgc3RybGVuKCphdiksICZvaWQsICZyZWYpKQorCQkJZGllKF8oIm5vIHN1Y2ggcmVmICVzIiksICphdik7CisKKwkJLyogSGFzIHRoZSBiYXNlIGJlZW4gc3BlY2lmaWVkPyAqLworCQlpZiAocmVmbG9nX2Jhc2UpIHsKKwkJCWNoYXIgKmVwOworCQkJYmFzZSA9IHN0cnRvdWwocmVmbG9nX2Jhc2UsICZlcCwgMTApOworCQkJaWYgKCplcCkgeworCQkJCS8qIEFoLCB0aGF0IGlzIGEgZGF0ZSBzcGVjLi4uICovCisJCQkJdGltZXN0YW1wX3QgYXQ7CisJCQkJYXQgPSBhcHByb3hpZGF0ZShyZWZsb2dfYmFzZSk7CisJCQkJcmVhZF9yZWZfYXQoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwKKwkJCQkJICAgIHJlZiwgZmxhZ3MsIGF0LCAtMSwgJm9pZCwgTlVMTCwKKwkJCQkJICAgIE5VTEwsIE5VTEwsICZiYXNlKTsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCByZWZsb2c7IGkrKykgeworCQkJY2hhciAqbG9nbXNnOworCQkJY2hhciAqbnRoX2Rlc2M7CisJCQljb25zdCBjaGFyICptc2c7CisJCQl0aW1lc3RhbXBfdCB0aW1lc3RhbXA7CisJCQlpbnQgdHo7CisKKwkJCWlmIChyZWFkX3JlZl9hdChnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLAorCQkJCQlyZWYsIGZsYWdzLCAwLCBiYXNlICsgaSwgJm9pZCwgJmxvZ21zZywKKwkJCQkJJnRpbWVzdGFtcCwgJnR6LCBOVUxMKSkgeworCQkJCXJlZmxvZyA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCQltc2cgPSBzdHJjaHIobG9nbXNnLCAnXHQnKTsKKwkJCWlmICghbXNnKQorCQkJCW1zZyA9ICIobm9uZSkiOworCQkJZWxzZQorCQkJCW1zZysrOworCQkJcmVmbG9nX21zZ1tpXSA9IHhzdHJmbXQoIiglcykgJXMiLAorCQkJCQkJc2hvd19kYXRlKHRpbWVzdGFtcCwgdHosCisJCQkJCQkJICBEQVRFX01PREUoUkVMQVRJVkUpKSwKKwkJCQkJCW1zZyk7CisJCQlmcmVlKGxvZ21zZyk7CisKKwkJCW50aF9kZXNjID0geHN0cmZtdCgiJXNAeyVkfSIsICphdiwgYmFzZStpKTsKKwkJCWFwcGVuZF9yZWYobnRoX2Rlc2MsICZvaWQsIDEpOworCQkJZnJlZShudGhfZGVzYyk7CisJCX0KKwkJZnJlZShyZWYpOworCX0KKwllbHNlIHsKKwkJd2hpbGUgKDAgPCBhYykgeworCQkJYXBwZW5kX29uZV9yZXYoKmF2KTsKKwkJCWFjLS07IGF2Kys7CisJCX0KKwkJaWYgKGFsbF9oZWFkcyArIGFsbF9yZW1vdGVzKQorCQkJc25hcmZfcmVmcyhhbGxfaGVhZHMsIGFsbF9yZW1vdGVzKTsKKwl9CisKKwloZWFkID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJICAgICAgJmhlYWRfb2lkLCBOVUxMKTsKKworCWlmICh3aXRoX2N1cnJlbnRfYnJhbmNoICYmIGhlYWQpIHsKKwkJaW50IGhhc19oZWFkID0gMDsKKwkJZm9yIChpID0gMDsgIWhhc19oZWFkICYmIGkgPCByZWZfbmFtZV9jbnQ7IGkrKykgeworCQkJLyogV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhZGRpbmcgdGhlIGJyYW5jaAorCQkJICogSEVBRCBwb2ludHMgYXQuCisJCQkgKi8KKwkJCWlmIChyZXZfaXNfaGVhZChoZWFkLAorCQkJCQlyZWZfbmFtZVtpXSwKKwkJCQkJaGVhZF9vaWQuaGFzaCwgTlVMTCkpCisJCQkJaGFzX2hlYWQrKzsKKwkJfQorCQlpZiAoIWhhc19oZWFkKSB7CisJCQljb25zdCBjaGFyICpuYW1lID0gaGVhZDsKKwkJCXNraXBfcHJlZml4KG5hbWUsICJyZWZzL2hlYWRzLyIsICZuYW1lKTsKKwkJCWFwcGVuZF9vbmVfcmV2KG5hbWUpOworCQl9CisJfQorCisJaWYgKCFyZWZfbmFtZV9jbnQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyByZXZzIHRvIGJlIHNob3duLlxuIik7CisJCWV4aXQoMCk7CisJfQorCisJZm9yIChudW1fcmV2ID0gMDsgcmVmX25hbWVbbnVtX3Jldl07IG51bV9yZXYrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHJldmtleTsKKwkJdW5zaWduZWQgaW50IGZsYWcgPSAxdSA8PCAobnVtX3JldiArIFJFVl9TSElGVCk7CisKKwkJaWYgKE1BWF9SRVZTIDw9IG51bV9yZXYpCisJCQlkaWUoUV8oImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iLAorCQkJICAgICAgICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIsCisJCQkgICAgICAgTUFYX1JFVlMpLCBNQVhfUkVWUyk7CisJCWlmIChnZXRfb2lkKHJlZl9uYW1lW251bV9yZXZdLCAmcmV2a2V5KSkKKwkJCWRpZShfKCInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iKSwgcmVmX25hbWVbbnVtX3Jldl0pOworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJnJldmtleSk7CisJCWlmICghY29tbWl0KQorCQkJZGllKF8oImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIiksCisJCQkgICAgcmVmX25hbWVbbnVtX3Jldl0sIG9pZF90b19oZXgoJnJldmtleSkpOworCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKwkJbWFya19zZWVuKGNvbW1pdCwgJnNlZW4pOworCisJCS8qIHJldiMwIHVzZXMgYml0IFJFVl9TSElGVCwgcmV2IzEgdXNlcyBiaXQgUkVWX1NISUZUKzEsCisJCSAqIGFuZCBzbyBvbi4gIFJFVl9TSElGVCBiaXRzIGZyb20gYml0IDAgYXJlIHVzZWQgZm9yCisJCSAqIGludGVybmFsIGJvb2trZWVwaW5nLgorCQkgKi8KKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gZmxhZzsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzID09IGZsYWcpCisJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShjb21taXQsICZsaXN0KTsKKwkJcmV2W251bV9yZXZdID0gY29tbWl0OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKQorCQlyZXZfbWFza1tpXSA9IHJldltpXS0+b2JqZWN0LmZsYWdzOworCisJaWYgKDAgPD0gZXh0cmEpCisJCWpvaW5fcmV2cygmbGlzdCwgJnNlZW4sIG51bV9yZXYsIGV4dHJhKTsKKworCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmc2Vlbik7CisKKwlpZiAobWVyZ2VfYmFzZSkKKwkJcmV0dXJuIHNob3dfbWVyZ2VfYmFzZShzZWVuLCBudW1fcmV2KTsKKworCWlmIChpbmRlcGVuZGVudCkKKwkJcmV0dXJuIHNob3dfaW5kZXBlbmRlbnQocmV2LCBudW1fcmV2LCByZXZfbWFzayk7CisKKwkvKiBTaG93IGxpc3Q7IC0tbW9yZT0tMSBtZWFucyBsaXN0LW9ubHkgKi8KKwlpZiAoMSA8IG51bV9yZXYgfHwgZXh0cmEgPCAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspIHsKKwkJCWludCBqOworCQkJaW50IGlzX2hlYWQgPSByZXZfaXNfaGVhZChoZWFkLAorCQkJCQkJICByZWZfbmFtZVtpXSwKKwkJCQkJCSAgaGVhZF9vaWQuaGFzaCwKKwkJCQkJCSAgcmV2W2ldLT5vYmplY3Qub2lkLmhhc2gpOworCQkJaWYgKGV4dHJhIDwgMCkKKwkJCQlwcmludGYoIiVjIFslc10gIiwKKwkJCQkgICAgICAgaXNfaGVhZCA/ICcqJyA6ICcgJywgcmVmX25hbWVbaV0pOworCQkJZWxzZSB7CisJCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCQkJcHV0Y2hhcignICcpOworCQkJCXByaW50ZigiJXMlYyVzIFslc10gIiwKKwkJCQkgICAgICAgZ2V0X2NvbG9yX2NvZGUoaSksCisJCQkJICAgICAgIGlzX2hlYWQgPyAnKicgOiAnIScsCisJCQkJICAgICAgIGdldF9jb2xvcl9yZXNldF9jb2RlKCksIHJlZl9uYW1lW2ldKTsKKwkJCX0KKworCQkJaWYgKCFyZWZsb2cpIHsKKwkJCQkvKiBoZWFkZXIgbGluZXMgbmV2ZXIgbmVlZCBuYW1lICovCisJCQkJc2hvd19vbmVfY29tbWl0KHJldltpXSwgMSk7CisJCQl9CisJCQllbHNlCisJCQkJcHV0cyhyZWZsb2dfbXNnW2ldKTsKKworCQkJaWYgKGlzX2hlYWQpCisJCQkJaGVhZF9hdCA9IGk7CisJCX0KKwkJaWYgKDAgPD0gZXh0cmEpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspCisJCQkJcHV0Y2hhcignLScpOworCQkJcHV0Y2hhcignXG4nKTsKKwkJfQorCX0KKwlpZiAoZXh0cmEgPCAwKQorCQlleGl0KDApOworCisJLyogU29ydCB0b3BvbG9naWNhbGx5ICovCisJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmc2Vlbiwgc29ydF9vcmRlcik7CisKKwkvKiBHaXZlIG5hbWVzIHRvIGNvbW1pdHMgKi8KKwlpZiAoIXNoYTFfbmFtZSAmJiAhbm9fbmFtZSkKKwkJbmFtZV9jb21taXRzKHNlZW4sIHJldiwgcmVmX25hbWUsIG51bV9yZXYpOworCisJYWxsX21hc2sgPSAoKDF1IDw8IChSRVZfU0hJRlQgKyBudW1fcmV2KSkgLSAxKTsKKwlhbGxfcmV2cyA9IGFsbF9tYXNrICYgfigoMXUgPDwgUkVWX1NISUZUKSAtIDEpOworCisJd2hpbGUgKHNlZW4pIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX2NvbW1pdCgmc2Vlbik7CisJCWludCB0aGlzX2ZsYWcgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKwkJaW50IGlzX21lcmdlX3BvaW50ID0gKCh0aGlzX2ZsYWcgJiBhbGxfcmV2cykgPT0gYWxsX3JldnMpOworCisJCXNob3duX21lcmdlX3BvaW50IHw9IGlzX21lcmdlX3BvaW50OworCisJCWlmICgxIDwgbnVtX3JldikgeworCQkJaW50IGlzX21lcmdlID0gISEoY29tbWl0LT5wYXJlbnRzICYmCisJCQkJCSAgY29tbWl0LT5wYXJlbnRzLT5uZXh0KTsKKwkJCWlmICh0b3BpY3MgJiYKKwkJCSAgICAhaXNfbWVyZ2VfcG9pbnQgJiYKKwkJCSAgICAodGhpc19mbGFnICYgKDF1IDw8IFJFVl9TSElGVCkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGRlbnNlICYmIGlzX21lcmdlICYmCisJCQkgICAgb21pdF9pbl9kZW5zZShjb21taXQsIHJldiwgbnVtX3JldikpCisJCQkJY29udGludWU7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKSB7CisJCQkJaW50IG1hcms7CisJCQkJaWYgKCEodGhpc19mbGFnICYgKDF1IDw8IChpICsgUkVWX1NISUZUKSkpKQorCQkJCQltYXJrID0gJyAnOworCQkJCWVsc2UgaWYgKGlzX21lcmdlKQorCQkJCQltYXJrID0gJy0nOworCQkJCWVsc2UgaWYgKGkgPT0gaGVhZF9hdCkKKwkJCQkJbWFyayA9ICcqJzsKKwkJCQllbHNlCisJCQkJCW1hcmsgPSAnKyc7CisJCQkJcHJpbnRmKCIlcyVjJXMiLAorCQkJCSAgICAgICBnZXRfY29sb3JfY29kZShpKSwKKwkJCQkgICAgICAgbWFyaywgZ2V0X2NvbG9yX3Jlc2V0X2NvZGUoKSk7CisJCQl9CisJCQlwdXRjaGFyKCcgJyk7CisJCX0KKwkJc2hvd19vbmVfY29tbWl0KGNvbW1pdCwgbm9fbmFtZSk7CisKKwkJaWYgKHNob3duX21lcmdlX3BvaW50ICYmIC0tZXh0cmEgPCAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zaG93LWluZGV4LmMgYi9idWlsdGluL3Nob3ctaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODI2ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zaG93LWluZGV4LmMKQEAgLTAsMCArMSw4NyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhY2suaCIKKworc3RhdGljIGNvbnN0IGNoYXIgc2hvd19pbmRleF91c2FnZVtdID0KKyJnaXQgc2hvdy1pbmRleCI7CisKK2ludCBjbWRfc2hvd19pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBucjsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKwlzdGF0aWMgdW5zaWduZWQgaW50IHRvcF9pbmRleFsyNTZdOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Uoc2hvd19pbmRleF91c2FnZSk7CisJaWYgKGZyZWFkKHRvcF9pbmRleCwgMiAqIDQsIDEsIHN0ZGluKSAhPSAxKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGhlYWRlciIpOworCWlmICh0b3BfaW5kZXhbMF0gPT0gaHRvbmwoUEFDS19JRFhfU0lHTkFUVVJFKSkgeworCQl2ZXJzaW9uID0gbnRvaGwodG9wX2luZGV4WzFdKTsKKwkJaWYgKHZlcnNpb24gPCAyIHx8IHZlcnNpb24gPiAyKQorCQkJZGllKCJ1bmtub3duIGluZGV4IHZlcnNpb24iKTsKKwkJaWYgKGZyZWFkKHRvcF9pbmRleCwgMjU2ICogNCwgMSwgc3RkaW4pICE9IDEpCisJCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4Iik7CisJfSBlbHNlIHsKKwkJdmVyc2lvbiA9IDE7CisJCWlmIChmcmVhZCgmdG9wX2luZGV4WzJdLCAyNTQgKiA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgaW5kZXgiKTsKKwl9CisJbnIgPSAwOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQl1bnNpZ25lZCBuID0gbnRvaGwodG9wX2luZGV4W2ldKTsKKwkJaWYgKG4gPCBucikKKwkJCWRpZSgiY29ycnVwdCBpbmRleCBmaWxlIik7CisJCW5yID0gbjsKKwl9CisJaWYgKHZlcnNpb24gPT0gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJdW5zaWduZWQgaW50IG9mZnNldCwgZW50cnlbKEdJVF9NQVhfUkFXU1ogKyA0KSAvIHNpemVvZih1bnNpZ25lZCBpbnQpXTsKKworCQkJaWYgKGZyZWFkKGVudHJ5LCA0ICsgaGFzaHN6LCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIGVudHJ5ICV1LyV1IiwgaSwgbnIpOworCQkJb2Zmc2V0ID0gbnRvaGwoZW50cnlbMF0pOworCQkJcHJpbnRmKCIldSAlc1xuIiwgb2Zmc2V0LCBoYXNoX3RvX2hleCgodm9pZCAqKShlbnRyeSsxKSkpOworCQl9CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgb2ZmNjRfbnIgPSAwOworCQlzdHJ1Y3QgeworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCQl1aW50MzJfdCBjcmM7CisJCQl1aW50MzJfdCBvZmY7CisJCX0gKmVudHJpZXM7CisJCUFMTE9DX0FSUkFZKGVudHJpZXMsIG5yKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCQlpZiAoZnJlYWQoZW50cmllc1tpXS5vaWQuaGFzaCwgaGFzaHN6LCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIHNoYTEgJXUvJXUiLCBpLCBucik7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQkJaWYgKGZyZWFkKCZlbnRyaWVzW2ldLmNyYywgNCwgMSwgc3RkaW4pICE9IDEpCisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBjcmMgJXUvJXUiLCBpLCBucik7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQkJaWYgKGZyZWFkKCZlbnRyaWVzW2ldLm9mZiwgNCwgMSwgc3RkaW4pICE9IDEpCisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAzMmIgb2Zmc2V0ICV1LyV1IiwgaSwgbnIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJdWludDY0X3Qgb2Zmc2V0OworCQkJdWludDMyX3Qgb2ZmID0gbnRvaGwoZW50cmllc1tpXS5vZmYpOworCQkJaWYgKCEob2ZmICYgMHg4MDAwMDAwMCkpIHsKKwkJCQlvZmZzZXQgPSBvZmY7CisJCQl9IGVsc2UgeworCQkJCXVpbnQzMl90IG9mZjY0WzJdOworCQkJCWlmICgob2ZmICYgMHg3ZmZmZmZmZikgIT0gb2ZmNjRfbnIpCisJCQkJCWRpZSgiaW5jb25zaXN0ZW50IDY0YiBvZmZzZXQgaW5kZXgiKTsKKwkJCQlpZiAoZnJlYWQob2ZmNjQsIDgsIDEsIHN0ZGluKSAhPSAxKQorCQkJCQlkaWUoInVuYWJsZSB0byByZWFkIDY0YiBvZmZzZXQgJXUiLCBvZmY2NF9ucik7CisJCQkJb2Zmc2V0ID0gKCgodWludDY0X3QpbnRvaGwob2ZmNjRbMF0pKSA8PCAzMikgfAorCQkJCQkJICAgICBudG9obChvZmY2NFsxXSk7CisJCQkJb2ZmNjRfbnIrKzsKKwkJCX0KKwkJCXByaW50ZigiJSIgUFJJdU1BWCAiICVzICglMDgiUFJJeDMyIilcbiIsCisJCQkgICAgICAgKHVpbnRtYXhfdCkgb2Zmc2V0LAorCQkJICAgICAgIG9pZF90b19oZXgoJmVudHJpZXNbaV0ub2lkKSwKKwkJCSAgICAgICBudG9obChlbnRyaWVzW2ldLmNyYykpOworCQl9CisJCWZyZWUoZW50cmllcyk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zaG93LXJlZi5jIGIvYnVpbHRpbi9zaG93LXJlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NTZkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Nob3ctcmVmLmMKQEAgLTAsMCArMSwyMjYgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2hvd19yZWZfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS1oYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIiksCisJTl8oImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGRlcmVmX3RhZ3MsIHNob3dfaGVhZCwgdGFnc19vbmx5LCBoZWFkc19vbmx5LCBmb3VuZF9tYXRjaCwgdmVyaWZ5LAorCSAgIHF1aWV0LCBoYXNoX29ubHksIGFiYnJldiwgZXhjbHVkZV9hcmc7CitzdGF0aWMgY29uc3QgY2hhciAqKnBhdHRlcm47CitzdGF0aWMgY29uc3QgY2hhciAqZXhjbHVkZV9leGlzdGluZ19hcmc7CisKK3N0YXRpYyB2b2lkIHNob3dfb25lKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwljb25zdCBjaGFyICpoZXg7CisJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisKKwlpZiAoIWhhc19vYmplY3RfZmlsZShvaWQpKQorCQlkaWUoImdpdCBzaG93LXJlZjogYmFkIHJlZiAlcyAoJXMpIiwgcmVmbmFtZSwKKwkJICAgIG9pZF90b19oZXgob2lkKSk7CisKKwlpZiAocXVpZXQpCisJCXJldHVybjsKKworCWhleCA9IGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIGFiYnJldik7CisJaWYgKGhhc2hfb25seSkKKwkJcHJpbnRmKCIlc1xuIiwgaGV4KTsKKwllbHNlCisJCXByaW50ZigiJXMgJXNcbiIsIGhleCwgcmVmbmFtZSk7CisKKwlpZiAoIWRlcmVmX3RhZ3MpCisJCXJldHVybjsKKworCWlmICghcGVlbF9yZWYocmVmbmFtZSwgJnBlZWxlZCkpIHsKKwkJaGV4ID0gZmluZF91bmlxdWVfYWJicmV2KCZwZWVsZWQsIGFiYnJldik7CisJCXByaW50ZigiJXMgJXNee31cbiIsIGhleCwgcmVmbmFtZSk7CisJfQorfQorCitzdGF0aWMgaW50IHNob3dfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBmbGFnLCB2b2lkICpjYmRhdGEpCit7CisJaWYgKHNob3dfaGVhZCAmJiAhc3RyY21wKHJlZm5hbWUsICJIRUFEIikpCisJCWdvdG8gbWF0Y2g7CisKKwlpZiAodGFnc19vbmx5IHx8IGhlYWRzX29ubHkpIHsKKwkJaW50IG1hdGNoOworCisJCW1hdGNoID0gaGVhZHNfb25seSAmJiBzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKTsKKwkJbWF0Y2ggfD0gdGFnc19vbmx5ICYmIHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3RhZ3MvIik7CisJCWlmICghbWF0Y2gpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKHBhdHRlcm4pIHsKKwkJaW50IHJlZmxlbiA9IHN0cmxlbihyZWZuYW1lKTsKKwkJY29uc3QgY2hhciAqKnAgPSBwYXR0ZXJuLCAqbTsKKwkJd2hpbGUgKChtID0gKnArKykgIT0gTlVMTCkgeworCQkJaW50IGxlbiA9IHN0cmxlbihtKTsKKwkJCWlmIChsZW4gPiByZWZsZW4pCisJCQkJY29udGludWU7CisJCQlpZiAobWVtY21wKG0sIHJlZm5hbWUgKyByZWZsZW4gLSBsZW4sIGxlbikpCisJCQkJY29udGludWU7CisJCQlpZiAobGVuID09IHJlZmxlbikKKwkJCQlnb3RvIG1hdGNoOworCQkJaWYgKHJlZm5hbWVbcmVmbGVuIC0gbGVuIC0gMV0gPT0gJy8nKQorCQkJCWdvdG8gbWF0Y2g7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCittYXRjaDoKKwlmb3VuZF9tYXRjaCsrOworCisJc2hvd19vbmUocmVmbmFtZSwgb2lkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9leGlzdGluZyhjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQlpbnQgZmxhZywgdm9pZCAqY2JkYXRhKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCA9IChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKiljYmRhdGE7CisJc3RyaW5nX2xpc3RfaW5zZXJ0KGxpc3QsIHJlZm5hbWUpOworCXJldHVybiAwOworfQorCisvKgorICogcmVhZCAiXig/Ojxhbnl0aGluZz5ccyk/PHJlZm5hbWU+KD86XF5ce1x9KT8kIiBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKyAqIGFuZAorICogKDEpIHN0cmlwICJee30iIGF0IHRoZSBlbmQgb2YgbGluZSBpZiBhbnk7CisgKiAoMikgaWdub3JlIGlmIG1hdGNoIGlzIHByb3ZpZGVkIGFuZCBkb2VzIG5vdCBoZWFkLW1hdGNoIHJlZm5hbWU7CisgKiAoMykgd2FybiBpZiByZWZuYW1lIGlzIG5vdCBhIHdlbGwtZm9ybWVkIHJlZm5hbWUgYW5kIHNraXA7CisgKiAoNCkgaWdub3JlIGlmIHJlZm5hbWUgaXMgYSByZWYgdGhhdCBleGlzdHMgaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnk7CisgKiAoNSkgb3RoZXJ3aXNlIG91dHB1dCB0aGUgbGluZS4KKyAqLworc3RhdGljIGludCBleGNsdWRlX2V4aXN0aW5nKGNvbnN0IGNoYXIgKm1hdGNoKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhpc3RpbmdfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWNoYXIgYnVmWzEwMjRdOworCWludCBtYXRjaGxlbiA9IG1hdGNoID8gc3RybGVuKG1hdGNoKSA6IDA7CisKKwlmb3JfZWFjaF9yZWYoYWRkX2V4aXN0aW5nLCAmZXhpc3RpbmdfcmVmcyk7CisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworCQljaGFyICpyZWY7CisJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKworCQlpZiAobGVuID4gMCAmJiBidWZbbGVuIC0gMV0gPT0gJ1xuJykKKwkJCWJ1ZlstLWxlbl0gPSAnXDAnOworCQlpZiAoMyA8PSBsZW4gJiYgIXN0cmNtcChidWYgKyBsZW4gLSAzLCAiXnt9IikpIHsKKwkJCWxlbiAtPSAzOworCQkJYnVmW2xlbl0gPSAnXDAnOworCQl9CisJCWZvciAocmVmID0gYnVmICsgbGVuOyBidWYgPCByZWY7IHJlZi0tKQorCQkJaWYgKGlzc3BhY2UocmVmWy0xXSkpCisJCQkJYnJlYWs7CisJCWlmIChtYXRjaCkgeworCQkJaW50IHJlZmxlbiA9IGJ1ZiArIGxlbiAtIHJlZjsKKwkJCWlmIChyZWZsZW4gPCBtYXRjaGxlbikKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdHJuY21wKHJlZiwgbWF0Y2gsIG1hdGNobGVuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmLCAwKSkgeworCQkJd2FybmluZygicmVmICclcycgaWdub3JlZCIsIHJlZik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmluZ19saXN0X2hhc19zdHJpbmcoJmV4aXN0aW5nX3JlZnMsIHJlZikpIHsKKwkJCXByaW50ZigiJXNcbiIsIGJ1Zik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFzaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWhhc2hfb25seSA9IDE7CisJLyogVXNlIGZ1bGwgbGVuZ3RoIFNIQTEgaWYgbm8gYXJndW1lbnQgKi8KKwlpZiAoIWFyZykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBhcnNlX29wdF9hYmJyZXZfY2Iob3B0LCBhcmcsIHVuc2V0KTsKK30KKworc3RhdGljIGludCBleGNsdWRlX2V4aXN0aW5nX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICAgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlleGNsdWRlX2FyZyA9IDE7CisJKihjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUgPSBhcmc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIHNob3dfcmVmX29wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTCgwLCAidGFncyIsICZ0YWdzX29ubHksIE5fKCJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIikpLAorCU9QVF9CT09MKDAsICJoZWFkcyIsICZoZWFkc19vbmx5LCBOXygib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIpKSwKKwlPUFRfQk9PTCgwLCAidmVyaWZ5IiwgJnZlcmlmeSwgTl8oInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgIgorCQkgICAgInJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIikpLAorCU9QVF9ISURERU5fQk9PTCgnaCcsIE5VTEwsICZzaG93X2hlYWQsCisJCQlOXygic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IikpLAorCU9QVF9CT09MKDAsICJoZWFkIiwgJnNob3dfaGVhZCwKKwkgIE5fKCJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiKSksCisJT1BUX0JPT0woJ2QnLCAiZGVyZWZlcmVuY2UiLCAmZGVyZWZfdGFncywKKwkJICAgIE5fKCJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIpKSwKKwl7IE9QVElPTl9DQUxMQkFDSywgJ3MnLCAiaGFzaCIsICZhYmJyZXYsIE5fKCJuIiksCisJICBOXygib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIiksCisJICBQQVJTRV9PUFRfT1BUQVJHLCAmaGFzaF9jYWxsYmFjayB9LAorCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCU9QVF9fUVVJRVQoJnF1aWV0LAorCQkgICBOXygiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiKSksCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJleGNsdWRlLWV4aXN0aW5nIiwgJmV4Y2x1ZGVfZXhpc3RpbmdfYXJnLAorCSAgTl8oInBhdHRlcm4iKSwgTl8oInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiKSwKKwkgIFBBUlNFX09QVF9PUFRBUkcgfCBQQVJTRV9PUFRfTk9ORUcsIGV4Y2x1ZGVfZXhpc3RpbmdfY2FsbGJhY2sgfSwKKwlPUFRfRU5EKCkKK307CisKK2ludCBjbWRfc2hvd19yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBzaG93X3JlZl9vcHRpb25zLAorCQkJICAgICBzaG93X3JlZl91c2FnZSwgMCk7CisKKwlpZiAoZXhjbHVkZV9hcmcpCisJCXJldHVybiBleGNsdWRlX2V4aXN0aW5nKGV4Y2x1ZGVfZXhpc3RpbmdfYXJnKTsKKworCXBhdHRlcm4gPSBhcmd2OworCWlmICghKnBhdHRlcm4pCisJCXBhdHRlcm4gPSBOVUxMOworCisJaWYgKHZlcmlmeSkgeworCQlpZiAoIXBhdHRlcm4pCisJCQlkaWUoIi0tdmVyaWZ5IHJlcXVpcmVzIGEgcmVmZXJlbmNlIik7CisJCXdoaWxlICgqcGF0dGVybikgeworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJCWlmICgoc3RhcnRzX3dpdGgoKnBhdHRlcm4sICJyZWZzLyIpIHx8ICFzdHJjbXAoKnBhdHRlcm4sICJIRUFEIikpICYmCisJCQkgICAgIXJlYWRfcmVmKCpwYXR0ZXJuLCAmb2lkKSkgeworCQkJCXNob3dfb25lKCpwYXR0ZXJuLCAmb2lkKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCFxdWlldCkKKwkJCQlkaWUoIiclcycgLSBub3QgYSB2YWxpZCByZWYiLCAqcGF0dGVybik7CisJCQllbHNlCisJCQkJcmV0dXJuIDE7CisJCQlwYXR0ZXJuKys7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNob3dfaGVhZCkKKwkJaGVhZF9yZWYoc2hvd19yZWYsIE5VTEwpOworCWZvcl9lYWNoX3JlZihzaG93X3JlZiwgTlVMTCk7CisJaWYgKCFmb3VuZF9tYXRjaCkgeworCQlpZiAodmVyaWZ5ICYmICFxdWlldCkKKwkJCWRpZSgiTm8gbWF0Y2giKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYyBiL2J1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwZGE0YgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmMKQEAgLTAsMCArMSw2MzEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICplbXB0eV9iYXNlID0gIiI7CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxhZGR8ZGlzYWJsZSkgPG9wdGlvbnM+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgKmdldF9zcGFyc2VfY2hlY2tvdXRfZmlsZW5hbWUodm9pZCkKK3sKKwlyZXR1cm4gZ2l0X3BhdGhkdXAoImluZm8vc3BhcnNlLWNoZWNrb3V0Iik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3BhdHRlcm5zX3RvX2ZpbGUoRklMRSAqZnAsIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBsLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBwYXRoX3BhdHRlcm4gKnAgPSBwbC0+cGF0dGVybnNbaV07CisKKwkJaWYgKHAtPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFKQorCQkJZnByaW50ZihmcCwgIiEiKTsKKworCQlmcHJpbnRmKGZwLCAiJXMiLCBwLT5wYXR0ZXJuKTsKKworCQlpZiAocC0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTVVTVEJFRElSKQorCQkJZnByaW50ZihmcCwgIi8iKTsKKworCQlmcHJpbnRmKGZwLCAiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BhcnNlX2NoZWNrb3V0X2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgcGw7CisJY2hhciAqc3BhcnNlX2ZpbGVuYW1lOworCWludCByZXM7CisKKwltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKKworCXBsLnVzZV9jb25lX3BhdHRlcm5zID0gY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZTsKKworCXNwYXJzZV9maWxlbmFtZSA9IGdldF9zcGFyc2VfY2hlY2tvdXRfZmlsZW5hbWUoKTsKKwlyZXMgPSBhZGRfcGF0dGVybnNfZnJvbV9maWxlX3RvX2xpc3Qoc3BhcnNlX2ZpbGVuYW1lLCAiIiwgMCwgJnBsLCBOVUxMKTsKKwlmcmVlKHNwYXJzZV9maWxlbmFtZSk7CisKKwlpZiAocmVzIDwgMCkgeworCQl3YXJuaW5nKF8oInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiKSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChwbC51c2VfY29uZV9wYXR0ZXJucykgeworCQlpbnQgaTsKKwkJc3RydWN0IHBhdHRlcm5fZW50cnkgKnBlOworCQlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBzbCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJnBsLnJlY3Vyc2l2ZV9oYXNobWFwLCAmaXRlciwgcGUsIGVudCkgeworCQkJLyogcGUtPnBhdHRlcm4gc3RhcnRzIHdpdGggIi8iLCBza2lwIGl0ICovCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJnNsLCBwZS0+cGF0dGVybiArIDEpOworCQl9CisKKwkJc3RyaW5nX2xpc3Rfc29ydCgmc2wpOworCisJCWZvciAoaSA9IDA7IGkgPCBzbC5ucjsgaSsrKSB7CisJCQlxdW90ZV9jX3N0eWxlKHNsLml0ZW1zW2ldLnN0cmluZywgTlVMTCwgc3Rkb3V0LCAwKTsKKwkJCXByaW50ZigiXG4iKTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCXdyaXRlX3BhdHRlcm5zX3RvX2ZpbGUoc3Rkb3V0LCAmcGwpOworCWNsZWFyX3BhdHRlcm5fbGlzdCgmcGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCB0cmVlX2Rlc2MgdDsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciA9IHRoZV9yZXBvc2l0b3J5OworCisJaWYgKHJlcG9fcmVhZF9pbmRleF91bm1lcmdlZChyKSkKKwkJZGllKF8oInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IikpOworCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmb2lkKSkKKwkJcmV0dXJuIDA7CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCgmb2lkKTsKKwlwYXJzZV90cmVlKHRyZWUpOworCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCisJbWVtc2V0KCZvLCAwLCBzaXplb2YobykpOworCW8udmVyYm9zZV91cGRhdGUgPSBpc2F0dHkoMik7CisJby5tZXJnZSA9IDE7CisJby51cGRhdGUgPSAxOworCW8uZm4gPSBvbmV3YXlfbWVyZ2U7CisJby5oZWFkX2lkeCA9IC0xOworCW8uc3JjX2luZGV4ID0gci0+aW5kZXg7CisJby5kc3RfaW5kZXggPSByLT5pbmRleDsKKwlvLnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMDsKKwlvLnBsID0gcGw7CisJby5rZWVwX3BhdHRlcm5fbGlzdCA9ICEhcGw7CisKKwlyZXNvbHZlX3VuZG9fY2xlYXJfaW5kZXgoci0+aW5kZXgpOworCXNldHVwX3dvcmtfdHJlZSgpOworCisJY2FjaGVfdHJlZV9mcmVlKCZyLT5pbmRleC0+Y2FjaGVfdHJlZSk7CisKKwlyZXBvX2hvbGRfbG9ja2VkX2luZGV4KHIsICZsb2NrX2ZpbGUsIExPQ0tfRElFX09OX0VSUk9SKTsKKworCWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKwlyZXN1bHQgPSB1bnBhY2tfdHJlZXMoMSwgJnQsICZvKTsKKworCWlmICghcmVzdWx0KSB7CisJCXByaW1lX2NhY2hlX3RyZWUociwgci0+aW5kZXgsIHRyZWUpOworCQl3cml0ZV9sb2NrZWRfaW5kZXgoci0+aW5kZXgsICZsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKTsKKwl9IGVsc2UKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrX2ZpbGUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGNoYXIgKmVzY2FwZWRfcGF0dGVybihjaGFyICpwYXR0ZXJuKQoreworCWNoYXIgKnAgPSBwYXR0ZXJuOworCXN0cnVjdCBzdHJidWYgZmluYWwgPSBTVFJCVUZfSU5JVDsKKworCXdoaWxlICgqcCkgeworCQlpZiAoaXNfZ2xvYl9zcGVjaWFsKCpwKSkKKwkJCXN0cmJ1Zl9hZGRjaCgmZmluYWwsICdcXCcpOworCisJCXN0cmJ1Zl9hZGRjaCgmZmluYWwsICpwKTsKKwkJcCsrOworCX0KKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZmaW5hbCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbmVfdG9fZmlsZShGSUxFICpmcCwgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwpCit7CisJaW50IGk7CisJc3RydWN0IHBhdHRlcm5fZW50cnkgKnBlOworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc2wgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhcmVudF9wYXR0ZXJuID0gU1RSQlVGX0lOSVQ7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZwbC0+cGFyZW50X2hhc2htYXAsICZpdGVyLCBwZSwgZW50KSB7CisJCWlmIChoYXNobWFwX2dldF9lbnRyeSgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLCBwZSwgZW50LCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghaGFzaG1hcF9jb250YWluc19wYXJlbnQoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwKKwkJCQkJICAgICBwZS0+cGF0dGVybiwKKwkJCQkJICAgICAmcGFyZW50X3BhdHRlcm4pKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzbCwgcGUtPnBhdHRlcm4pOworCX0KKworCXN0cmluZ19saXN0X3NvcnQoJnNsKTsKKwlzdHJpbmdfbGlzdF9yZW1vdmVfZHVwbGljYXRlcygmc2wsIDApOworCisJZnByaW50ZihmcCwgIi8qXG4hLyovXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBzbC5ucjsgaSsrKSB7CisJCWNoYXIgKnBhdHRlcm4gPSBlc2NhcGVkX3BhdHRlcm4oc2wuaXRlbXNbaV0uc3RyaW5nKTsKKworCQlpZiAoc3RybGVuKHBhdHRlcm4pKQorCQkJZnByaW50ZihmcCwgIiVzL1xuISVzLyovXG4iLCBwYXR0ZXJuLCBwYXR0ZXJuKTsKKwkJZnJlZShwYXR0ZXJuKTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmc2wsIDApOworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLCAmaXRlciwgcGUsIGVudCkgeworCQlpZiAoIWhhc2htYXBfY29udGFpbnNfcGFyZW50KCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsCisJCQkJCSAgICAgcGUtPnBhdHRlcm4sCisJCQkJCSAgICAgJnBhcmVudF9wYXR0ZXJuKSkKKwkJCXN0cmluZ19saXN0X2luc2VydCgmc2wsIHBlLT5wYXR0ZXJuKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmcGFyZW50X3BhdHRlcm4pOworCisJc3RyaW5nX2xpc3Rfc29ydCgmc2wpOworCXN0cmluZ19saXN0X3JlbW92ZV9kdXBsaWNhdGVzKCZzbCwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2wubnI7IGkrKykgeworCQljaGFyICpwYXR0ZXJuID0gZXNjYXBlZF9wYXR0ZXJuKHNsLml0ZW1zW2ldLnN0cmluZyk7CisJCWZwcmludGYoZnAsICIlcy9cbiIsIHBhdHRlcm4pOworCQlmcmVlKHBhdHRlcm4pOworCX0KK30KKworc3RhdGljIGludCB3cml0ZV9wYXR0ZXJuc19hbmRfdXBkYXRlKHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWNoYXIgKnNwYXJzZV9maWxlbmFtZTsKKwlGSUxFICpmcDsKKwlpbnQgZmQ7CisJc3RydWN0IGxvY2tfZmlsZSBsayA9IExPQ0tfSU5JVDsKKwlpbnQgcmVzdWx0OworCisJc3BhcnNlX2ZpbGVuYW1lID0gZ2V0X3NwYXJzZV9jaGVja291dF9maWxlbmFtZSgpOworCisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoc3BhcnNlX2ZpbGVuYW1lKSkKKwkJZGllKF8oImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciBzcGFyc2UtY2hlY2tvdXQgZmlsZSIpKTsKKworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbGssIHNwYXJzZV9maWxlbmFtZSwKKwkJCQkgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CisKKwlyZXN1bHQgPSB1cGRhdGVfd29ya2luZ19kaXJlY3RvcnkocGwpOworCWlmIChyZXN1bHQpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsayk7CisJCWZyZWUoc3BhcnNlX2ZpbGVuYW1lKTsKKwkJY2xlYXJfcGF0dGVybl9saXN0KHBsKTsKKwkJdXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KE5VTEwpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWZwID0geGZkb3BlbihmZCwgInciKTsKKworCWlmIChjb3JlX3NwYXJzZV9jaGVja291dF9jb25lKQorCQl3cml0ZV9jb25lX3RvX2ZpbGUoZnAsIHBsKTsKKwllbHNlCisJCXdyaXRlX3BhdHRlcm5zX3RvX2ZpbGUoZnAsIHBsKTsKKworCWZmbHVzaChmcCk7CisJY29tbWl0X2xvY2tfZmlsZSgmbGspOworCisJZnJlZShzcGFyc2VfZmlsZW5hbWUpOworCWNsZWFyX3BhdHRlcm5fbGlzdChwbCk7CisKKwlyZXR1cm4gMDsKK30KKworZW51bSBzcGFyc2VfY2hlY2tvdXRfbW9kZSB7CisJTU9ERV9OT19QQVRURVJOUyA9IDAsCisJTU9ERV9BTExfUEFUVEVSTlMgPSAxLAorCU1PREVfQ09ORV9QQVRURVJOUyA9IDIsCit9OworCitzdGF0aWMgaW50IHNldF9jb25maWcoZW51bSBzcGFyc2VfY2hlY2tvdXRfbW9kZSBtb2RlKQoreworCWNvbnN0IGNoYXIgKmNvbmZpZ19wYXRoOworCisJaWYgKGdpdF9jb25maWdfc2V0X2dlbnRseSgiZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyIsICJ0cnVlIikpIHsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciKSk7CisJCXJldHVybiAxOworCX0KKworCWNvbmZpZ19wYXRoID0gZ2l0X3BhdGgoImNvbmZpZy53b3JrdHJlZSIpOworCWdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KGNvbmZpZ19wYXRoLAorCQkJCSAgICAgICJjb3JlLnNwYXJzZUNoZWNrb3V0IiwKKwkJCQkgICAgICBtb2RlID8gInRydWUiIDogTlVMTCk7CisKKwlnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShjb25maWdfcGF0aCwKKwkJCQkgICAgICAiY29yZS5zcGFyc2VDaGVja291dENvbmUiLAorCQkJCSAgICAgIG1vZGUgPT0gTU9ERV9DT05FX1BBVFRFUk5TID8gInRydWUiIDogTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBidWlsdGluX3NwYXJzZV9jaGVja291dF9pbml0X3VzYWdlW10gPSB7CisJTl8oImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BhcnNlX2NoZWNrb3V0X2luaXRfb3B0cyB7CisJaW50IGNvbmVfbW9kZTsKK30gaW5pdF9vcHRzOworCitzdGF0aWMgaW50IHNwYXJzZV9jaGVja291dF9pbml0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgcGF0dGVybl9saXN0IHBsOworCWNoYXIgKnNwYXJzZV9maWxlbmFtZTsKKwlpbnQgcmVzOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBtb2RlOworCXN0cnVjdCBzdHJidWYgcGF0dGVybiA9IFNUUkJVRl9JTklUOworCisJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfaW5pdF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJjb25lIiwgJmluaXRfb3B0cy5jb25lX21vZGUsCisJCQkgTl8oImluaXRpYWxpemUgdGhlIHNwYXJzZS1jaGVja291dCBpbiBjb25lIG1vZGUiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KTsKKwlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQlOXygiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiKSwgTlVMTCwgMSwgMCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLAorCQkJICAgICBidWlsdGluX3NwYXJzZV9jaGVja291dF9pbml0X29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X2luaXRfdXNhZ2UsIDApOworCisJaWYgKGluaXRfb3B0cy5jb25lX21vZGUpIHsKKwkJbW9kZSA9IE1PREVfQ09ORV9QQVRURVJOUzsKKwkJY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZSA9IDE7CisJfSBlbHNlCisJCW1vZGUgPSBNT0RFX0FMTF9QQVRURVJOUzsKKworCWlmIChzZXRfY29uZmlnKG1vZGUpKQorCQlyZXR1cm4gMTsKKworCW1lbXNldCgmcGwsIDAsIHNpemVvZihwbCkpOworCisJc3BhcnNlX2ZpbGVuYW1lID0gZ2V0X3NwYXJzZV9jaGVja291dF9maWxlbmFtZSgpOworCXJlcyA9IGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfdG9fbGlzdChzcGFyc2VfZmlsZW5hbWUsICIiLCAwLCAmcGwsIE5VTEwpOworCisJLyogSWYgd2UgYWxyZWFkeSBoYXZlIGEgc3BhcnNlLWNoZWNrb3V0IGZpbGUsIHVzZSBpdC4gKi8KKwlpZiAocmVzID49IDApIHsKKwkJZnJlZShzcGFyc2VfZmlsZW5hbWUpOworCQljb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCA9IDE7CisJCXJldHVybiB1cGRhdGVfd29ya2luZ19kaXJlY3RvcnkoTlVMTCk7CisJfQorCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmb2lkKSkgeworCQlGSUxFICpmcDsKKworCQkvKiBhc3N1bWUgd2UgYXJlIGluIGEgZnJlc2ggcmVwbywgYnV0IHVwZGF0ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgKi8KKwkJZnAgPSB4Zm9wZW4oc3BhcnNlX2ZpbGVuYW1lLCAidyIpOworCQlpZiAoIWZwKQorCQkJZGllKF8oImZhaWxlZCB0byBvcGVuICclcyciKSwgc3BhcnNlX2ZpbGVuYW1lKTsKKworCQlmcmVlKHNwYXJzZV9maWxlbmFtZSk7CisJCWZwcmludGYoZnAsICIvKlxuIS8qL1xuIik7CisJCWZjbG9zZShmcCk7CisJCXJldHVybiAwOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnBhdHRlcm4sICIvKiIpOworCWFkZF9wYXR0ZXJuKHN0cmJ1Zl9kZXRhY2goJnBhdHRlcm4sIE5VTEwpLCBlbXB0eV9iYXNlLCAwLCAmcGwsIDApOworCXN0cmJ1Zl9hZGRzdHIoJnBhdHRlcm4sICIhLyovIik7CisJYWRkX3BhdHRlcm4oc3RyYnVmX2RldGFjaCgmcGF0dGVybiwgTlVMTCksIGVtcHR5X2Jhc2UsIDAsICZwbCwgMCk7CisKKwlyZXR1cm4gd3JpdGVfcGF0dGVybnNfYW5kX3VwZGF0ZSgmcGwpOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfcmVjdXJzaXZlX3BhdHRlcm4oc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsIHN0cnVjdCBzdHJidWYgKnBhdGgpCit7CisJc3RydWN0IHBhdHRlcm5fZW50cnkgKmUgPSB4bWFsbG9jKHNpemVvZigqZSkpOworCWUtPnBhdHRlcm5sZW4gPSBwYXRoLT5sZW47CisJZS0+cGF0dGVybiA9IHN0cmJ1Zl9kZXRhY2gocGF0aCwgTlVMTCk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnQsCisJCQkgICBpZ25vcmVfY2FzZSA/CisJCQkgICBzdHJpaGFzaChlLT5wYXR0ZXJuKSA6CisJCQkgICBzdHJoYXNoKGUtPnBhdHRlcm4pKTsKKworCWhhc2htYXBfYWRkKCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsICZlLT5lbnQpOworCisJd2hpbGUgKGUtPnBhdHRlcm5sZW4pIHsKKwkJY2hhciAqc2xhc2ggPSBzdHJyY2hyKGUtPnBhdHRlcm4sICcvJyk7CisJCWNoYXIgKm9sZHBhdHRlcm4gPSBlLT5wYXR0ZXJuOworCQlzaXplX3QgbmV3bGVuOworCisJCWlmIChzbGFzaCA9PSBlLT5wYXR0ZXJuKQorCQkJYnJlYWs7CisKKwkJbmV3bGVuID0gc2xhc2ggLSBlLT5wYXR0ZXJuOworCQllID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhdHRlcm5fZW50cnkpKTsKKwkJZS0+cGF0dGVybmxlbiA9IG5ld2xlbjsKKwkJZS0+cGF0dGVybiA9IHhzdHJuZHVwKG9sZHBhdHRlcm4sIG5ld2xlbik7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmZS0+ZW50LAorCQkJCSAgIGlnbm9yZV9jYXNlID8KKwkJCQkgICBzdHJpaGFzaChlLT5wYXR0ZXJuKSA6CisJCQkJICAgc3RyaGFzaChlLT5wYXR0ZXJuKSk7CisKKwkJaWYgKCFoYXNobWFwX2dldF9lbnRyeSgmcGwtPnBhcmVudF9oYXNobWFwLCBlLCBlbnQsIE5VTEwpKQorCQkJaGFzaG1hcF9hZGQoJnBsLT5wYXJlbnRfaGFzaG1hcCwgJmUtPmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdHJidWZfdG9fY29uZV9wYXR0ZXJuKHN0cnVjdCBzdHJidWYgKmxpbmUsIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCXN0cmJ1Zl90cmltKGxpbmUpOworCisJc3RyYnVmX3RyaW1fdHJhaWxpbmdfZGlyX3NlcChsaW5lKTsKKworCWlmIChzdHJidWZfbm9ybWFsaXplX3BhdGgobGluZSkpCisJCWRpZShfKCJjb3VsZCBub3Qgbm9ybWFsaXplIHBhdGggJXMiKSwgbGluZS0+YnVmKTsKKworCWlmICghbGluZS0+bGVuKQorCQlyZXR1cm47CisKKwlpZiAobGluZS0+YnVmWzBdICE9ICcvJykKKwkJc3RyYnVmX2luc2VydHN0cihsaW5lLCAwLCAiLyIpOworCisJaW5zZXJ0X3JlY3Vyc2l2ZV9wYXR0ZXJuKHBsLCBsaW5lKTsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBidWlsdGluX3NwYXJzZV9jaGVja291dF9zZXRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNwYXJzZS1jaGVja291dCAoc2V0fGFkZCkgKC0tc3RkaW4gfCA8cGF0dGVybnM+KSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BhcnNlX2NoZWNrb3V0X3NldF9vcHRzIHsKKwlpbnQgdXNlX3N0ZGluOworfSBzZXRfb3B0czsKKworc3RhdGljIHZvaWQgYWRkX3BhdHRlcm5zX2Zyb21faW5wdXQoc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsCisJCQkJICAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaTsKKwlpZiAoY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCQloYXNobWFwX2luaXQoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwgcGxfaGFzaG1hcF9jbXAsIE5VTEwsIDApOworCQloYXNobWFwX2luaXQoJnBsLT5wYXJlbnRfaGFzaG1hcCwgcGxfaGFzaG1hcF9jbXAsIE5VTEwsIDApOworCQlwbC0+dXNlX2NvbmVfcGF0dGVybnMgPSAxOworCisJCWlmIChzZXRfb3B0cy51c2Vfc3RkaW4pIHsKKwkJCXN0cnVjdCBzdHJidWYgdW5xdW90ZWQgPSBTVFJCVUZfSU5JVDsKKwkJCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluKSkgeworCQkJCWlmIChsaW5lLmJ1ZlswXSA9PSAnIicpIHsKKwkJCQkJc3RyYnVmX3Jlc2V0KCZ1bnF1b3RlZCk7CisJCQkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVucXVvdGVkLCBsaW5lLmJ1ZiwgTlVMTCkpCisJCQkJCQlkaWUoXygidW5hYmxlIHRvIHVucXVvdGUgQy1zdHlsZSBzdHJpbmcgJyVzJyIpLAorCQkJCQkJbGluZS5idWYpOworCisJCQkJCXN0cmJ1Zl9zd2FwKCZ1bnF1b3RlZCwgJmxpbmUpOworCQkJCX0KKworCQkJCXN0cmJ1Zl90b19jb25lX3BhdHRlcm4oJmxpbmUsIHBsKTsKKwkJCX0KKworCQkJc3RyYnVmX3JlbGVhc2UoJnVucXVvdGVkKTsKKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJCQlzdHJidWZfc2V0bGVuKCZsaW5lLCAwKTsKKwkJCQlzdHJidWZfYWRkc3RyKCZsaW5lLCBhcmd2W2ldKTsKKwkJCQlzdHJidWZfdG9fY29uZV9wYXR0ZXJuKCZsaW5lLCBwbCk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAoc2V0X29wdHMudXNlX3N0ZGluKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCQkJd2hpbGUgKCFzdHJidWZfZ2V0bGluZSgmbGluZSwgc3RkaW4pKSB7CisJCQkJc2l6ZV90IGxlbjsKKwkJCQljaGFyICpidWYgPSBzdHJidWZfZGV0YWNoKCZsaW5lLCAmbGVuKTsKKwkJCQlhZGRfcGF0dGVybihidWYsIGVtcHR5X2Jhc2UsIDAsIHBsLCAwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCQkJYWRkX3BhdHRlcm4oYXJndltpXSwgZW1wdHlfYmFzZSwgMCwgcGwsIDApOworCQl9CisJfQorfQorCitlbnVtIG1vZGlmeV90eXBlIHsKKwlSRVBMQUNFLAorCUFERCwKK307CisKK3N0YXRpYyB2b2lkIGFkZF9wYXR0ZXJuc19jb25lX21vZGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJCSAgIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHBhdHRlcm5fZW50cnkgKnBlOworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgcGF0dGVybl9saXN0IGV4aXN0aW5nOworCWNoYXIgKnNwYXJzZV9maWxlbmFtZSA9IGdldF9zcGFyc2VfY2hlY2tvdXRfZmlsZW5hbWUoKTsKKworCWFkZF9wYXR0ZXJuc19mcm9tX2lucHV0KHBsLCBhcmdjLCBhcmd2KTsKKworCW1lbXNldCgmZXhpc3RpbmcsIDAsIHNpemVvZihleGlzdGluZykpOworCWV4aXN0aW5nLnVzZV9jb25lX3BhdHRlcm5zID0gY29yZV9zcGFyc2VfY2hlY2tvdXRfY29uZTsKKworCWlmIChhZGRfcGF0dGVybnNfZnJvbV9maWxlX3RvX2xpc3Qoc3BhcnNlX2ZpbGVuYW1lLCAiIiwgMCwKKwkJCQkJICAgJmV4aXN0aW5nLCBOVUxMKSkKKwkJZGllKF8oInVuYWJsZSB0byBsb2FkIGV4aXN0aW5nIHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIpKTsKKwlmcmVlKHNwYXJzZV9maWxlbmFtZSk7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZleGlzdGluZy5yZWN1cnNpdmVfaGFzaG1hcCwgJml0ZXIsIHBlLCBlbnQpIHsKKwkJaWYgKCFoYXNobWFwX2NvbnRhaW5zX3BhcmVudCgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLAorCQkJCQlwZS0+cGF0dGVybiwgJmJ1ZmZlcikgfHwKKwkJICAgICFoYXNobWFwX2NvbnRhaW5zX3BhcmVudCgmcGwtPnBhcmVudF9oYXNobWFwLAorCQkJCQlwZS0+cGF0dGVybiwgJmJ1ZmZlcikpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmZmVyKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZmZlciwgcGUtPnBhdHRlcm4pOworCQkJaW5zZXJ0X3JlY3Vyc2l2ZV9wYXR0ZXJuKHBsLCAmYnVmZmVyKTsKKwkJfQorCX0KKworCWNsZWFyX3BhdHRlcm5fbGlzdCgmZXhpc3RpbmcpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGF0dGVybnNfbGl0ZXJhbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCQkJIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWNoYXIgKnNwYXJzZV9maWxlbmFtZSA9IGdldF9zcGFyc2VfY2hlY2tvdXRfZmlsZW5hbWUoKTsKKwlpZiAoYWRkX3BhdHRlcm5zX2Zyb21fZmlsZV90b19saXN0KHNwYXJzZV9maWxlbmFtZSwgIiIsIDAsCisJCQkJCSAgIHBsLCBOVUxMKSkKKwkJZGllKF8oInVuYWJsZSB0byBsb2FkIGV4aXN0aW5nIHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIpKTsKKwlmcmVlKHNwYXJzZV9maWxlbmFtZSk7CisJYWRkX3BhdHRlcm5zX2Zyb21faW5wdXQocGwsIGFyZ2MsIGFyZ3YpOworfQorCitzdGF0aWMgaW50IG1vZGlmeV9wYXR0ZXJuX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBlbnVtIG1vZGlmeV90eXBlIG0pCit7CisJaW50IHJlc3VsdDsKKwlpbnQgY2hhbmdlZF9jb25maWcgPSAwOworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgcGw7CisJbWVtc2V0KCZwbCwgMCwgc2l6ZW9mKHBsKSk7CisKKwlzd2l0Y2ggKG0pIHsKKwljYXNlIEFERDoKKwkJaWYgKGNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmUpCisJCQlhZGRfcGF0dGVybnNfY29uZV9tb2RlKGFyZ2MsIGFyZ3YsICZwbCk7CisJCWVsc2UKKwkJCWFkZF9wYXR0ZXJuc19saXRlcmFsKGFyZ2MsIGFyZ3YsICZwbCk7CisJCWJyZWFrOworCisJY2FzZSBSRVBMQUNFOgorCQlhZGRfcGF0dGVybnNfZnJvbV9pbnB1dCgmcGwsIGFyZ2MsIGFyZ3YpOworCQlicmVhazsKKwl9CisKKwlpZiAoIWNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0KSB7CisJCXNldF9jb25maWcoTU9ERV9BTExfUEFUVEVSTlMpOworCQljb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCA9IDE7CisJCWNoYW5nZWRfY29uZmlnID0gMTsKKwl9CisKKwlyZXN1bHQgPSB3cml0ZV9wYXR0ZXJuc19hbmRfdXBkYXRlKCZwbCk7CisKKwlpZiAocmVzdWx0ICYmIGNoYW5nZWRfY29uZmlnKQorCQlzZXRfY29uZmlnKE1PREVfTk9fUEFUVEVSTlMpOworCisJY2xlYXJfcGF0dGVybl9saXN0KCZwbCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBzcGFyc2VfY2hlY2tvdXRfc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgIGVudW0gbW9kaWZ5X3R5cGUgbSkKK3sKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX3NwYXJzZV9jaGVja291dF9zZXRfb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAic3RkaW4iLCAmc2V0X29wdHMudXNlX3N0ZGluLAorCQkJIE5fKCJyZWFkIHBhdHRlcm5zIGZyb20gc3RhbmRhcmQgaW4iKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KTsKKwlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQlOXygic2V0IHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIpLCBOVUxMLCAxLCAwKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfc2V0X29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X3NldF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTik7CisKKwlyZXR1cm4gbW9kaWZ5X3BhdHRlcm5fbGlzdChhcmdjLCBhcmd2LCBtKTsKK30KKworc3RhdGljIGludCBzcGFyc2VfY2hlY2tvdXRfZGlzYWJsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHBhdHRlcm5fbGlzdCBwbDsKKwlzdHJ1Y3Qgc3RyYnVmIG1hdGNoX2FsbCA9IFNUUkJVRl9JTklUOworCisJcmVwb19yZWFkX2luZGV4KHRoZV9yZXBvc2l0b3J5KTsKKwlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQlOXygiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiKSwgTlVMTCwgMSwgMCk7CisKKwltZW1zZXQoJnBsLCAwLCBzaXplb2YocGwpKTsKKwloYXNobWFwX2luaXQoJnBsLnJlY3Vyc2l2ZV9oYXNobWFwLCBwbF9oYXNobWFwX2NtcCwgTlVMTCwgMCk7CisJaGFzaG1hcF9pbml0KCZwbC5wYXJlbnRfaGFzaG1hcCwgcGxfaGFzaG1hcF9jbXAsIE5VTEwsIDApOworCXBsLnVzZV9jb25lX3BhdHRlcm5zID0gMDsKKwljb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCA9IDE7CisKKwlzdHJidWZfYWRkc3RyKCZtYXRjaF9hbGwsICIvKiIpOworCWFkZF9wYXR0ZXJuKHN0cmJ1Zl9kZXRhY2goJm1hdGNoX2FsbCwgTlVMTCksIGVtcHR5X2Jhc2UsIDAsICZwbCwgMCk7CisKKwlpZiAodXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5KCZwbCkpCisJCWRpZShfKCJlcnJvciB3aGlsZSByZWZyZXNoaW5nIHdvcmtpbmcgZGlyZWN0b3J5IikpOworCisJY2xlYXJfcGF0dGVybl9saXN0KCZwbCk7CisJcmV0dXJuIHNldF9jb25maWcoTU9ERV9OT19QQVRURVJOUyk7Cit9CisKK2ludCBjbWRfc3BhcnNlX2NoZWNrb3V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fc3BhcnNlX2NoZWNrb3V0X29wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpLAorCX07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3NwYXJzZV9jaGVja291dF91c2FnZSwKKwkJCQkgICBidWlsdGluX3NwYXJzZV9jaGVja291dF9vcHRpb25zKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICAgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJaWYgKGFyZ2MgPiAwKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJsaXN0IikpCisJCQlyZXR1cm4gc3BhcnNlX2NoZWNrb3V0X2xpc3QoYXJnYywgYXJndik7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJpbml0IikpCisJCQlyZXR1cm4gc3BhcnNlX2NoZWNrb3V0X2luaXQoYXJnYywgYXJndik7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJzZXQiKSkKKwkJCXJldHVybiBzcGFyc2VfY2hlY2tvdXRfc2V0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgUkVQTEFDRSk7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJhZGQiKSkKKwkJCXJldHVybiBzcGFyc2VfY2hlY2tvdXRfc2V0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgQUREKTsKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgImRpc2FibGUiKSkKKwkJCXJldHVybiBzcGFyc2VfY2hlY2tvdXRfZGlzYWJsZShhcmdjLCBhcmd2KTsKKwl9CisKKwl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9zcGFyc2VfY2hlY2tvdXRfdXNhZ2UsCisJCQkgICBidWlsdGluX3NwYXJzZV9jaGVja291dF9vcHRpb25zKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc3Rhc2guYyBiL2J1aWx0aW4vc3Rhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGFmNmNlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zdGFzaC5jCkBAIC0wLDAgKzEsMTY1MCBAQAorI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKworI2RlZmluZSBJTkNMVURFX0FMTF9GSUxFUyAyCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIiksCisJTl8oImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIpLAorCU5fKCJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIiksCisJTl8oImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iKSwKKwlOXygiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIiksCisJTl8oImdpdCBzdGFzaCBjbGVhciIpLAorCU5fKCJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisJICAgIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKwkgICAiICAgICAgICAgIFstLXBhdGhzcGVjLWZyb20tZmlsZT08ZmlsZT4gWy0tcGF0aHNwZWMtZmlsZS1udWxdXVxuIgorCSAgICIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIiksCisJTl8oImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorCSAgICIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9zdGFzaF9saXN0X3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfc3Rhc2hfc2hvd191c2FnZVtdID0geworCU5fKCJnaXQgc3Rhc2ggc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9zdGFzaF9kcm9wX3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9zdGFzaF9wb3BfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX2FwcGx5X3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX2JyYW5jaF91c2FnZVtdID0geworCU5fKCJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9zdGFzaF9jbGVhcl91c2FnZVtdID0geworCU5fKCJnaXQgc3Rhc2ggY2xlYXIiKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9zdGFzaF9zdG9yZV91c2FnZVtdID0geworCU5fKCJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3N0YXNoX3B1c2hfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorCSAgICIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisJICAgIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9zdGFzaF9zYXZlX3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorCSAgICIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmVmX3N0YXNoID0gInJlZnMvc3Rhc2giOworc3RhdGljIHN0cnVjdCBzdHJidWYgc3Rhc2hfaW5kZXhfcGF0aCA9IFNUUkJVRl9JTklUOworCisvKgorICogd19jb21taXQgaXMgc2V0IHRvIHRoZSBjb21taXQgY29udGFpbmluZyB0aGUgd29ya2luZyB0cmVlCisgKiBiX2NvbW1pdCBpcyBzZXQgdG8gdGhlIGJhc2UgY29tbWl0CisgKiBpX2NvbW1pdCBpcyBzZXQgdG8gdGhlIGNvbW1pdCBjb250YWluaW5nIHRoZSBpbmRleCB0cmVlCisgKiB1X2NvbW1pdCBpcyBzZXQgdG8gdGhlIGNvbW1pdCBjb250YWluaW5nIHRoZSB1bnRyYWNrZWQgZmlsZXMgdHJlZQorICogd190cmVlIGlzIHNldCB0byB0aGUgd29ya2luZyB0cmVlCisgKiBiX3RyZWUgaXMgc2V0IHRvIHRoZSBiYXNlIHRyZWUKKyAqIGlfdHJlZSBpcyBzZXQgdG8gdGhlIGluZGV4IHRyZWUKKyAqIHVfdHJlZSBpcyBzZXQgdG8gdGhlIHVudHJhY2tlZCBmaWxlcyB0cmVlCisgKi8KK3N0cnVjdCBzdGFzaF9pbmZvIHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHdfY29tbWl0OworCXN0cnVjdCBvYmplY3RfaWQgYl9jb21taXQ7CisJc3RydWN0IG9iamVjdF9pZCBpX2NvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHVfY29tbWl0OworCXN0cnVjdCBvYmplY3RfaWQgd190cmVlOworCXN0cnVjdCBvYmplY3RfaWQgYl90cmVlOworCXN0cnVjdCBvYmplY3RfaWQgaV90cmVlOworCXN0cnVjdCBvYmplY3RfaWQgdV90cmVlOworCXN0cnVjdCBzdHJidWYgcmV2aXNpb247CisJaW50IGlzX3N0YXNoX3JlZjsKKwlpbnQgaGFzX3U7Cit9OworCitzdGF0aWMgdm9pZCBmcmVlX3N0YXNoX2luZm8oc3RydWN0IHN0YXNoX2luZm8gKmluZm8pCit7CisJc3RyYnVmX3JlbGVhc2UoJmluZm8tPnJldmlzaW9uKTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0X3N0YXNoX2xpa2Uoc3RydWN0IHN0YXNoX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKnJldmlzaW9uKQoreworCWlmIChnZXRfb2lkZigmaW5mby0+Yl9jb21taXQsICIlc14xIiwgcmV2aXNpb24pIHx8CisJICAgIGdldF9vaWRmKCZpbmZvLT53X3RyZWUsICIlczoiLCByZXZpc2lvbikgfHwKKwkgICAgZ2V0X29pZGYoJmluZm8tPmJfdHJlZSwgIiVzXjE6IiwgcmV2aXNpb24pIHx8CisJICAgIGdldF9vaWRmKCZpbmZvLT5pX3RyZWUsICIlc14yOiIsIHJldmlzaW9uKSkKKwkJZGllKF8oIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiKSwgcmV2aXNpb24pOworfQorCitzdGF0aWMgaW50IGdldF9zdGFzaF9pbmZvKHN0cnVjdCBzdGFzaF9pbmZvICppbmZvLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IHJldDsKKwljaGFyICplbmRfb2ZfcmV2OworCWNoYXIgKmV4cGFuZGVkX3JlZjsKKwljb25zdCBjaGFyICpyZXZpc2lvbjsKKwljb25zdCBjaGFyICpjb21taXQgPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgZHVtbXk7CisJc3RydWN0IHN0cmJ1ZiBzeW1ib2xpYyA9IFNUUkJVRl9JTklUOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCWludCBpOworCQlzdHJ1Y3Qgc3RyYnVmIHJlZnNfbXNnID0gU1RSQlVGX0lOSVQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJCXN0cmJ1Zl9hZGRmKCZyZWZzX21zZywgIiAnJXMnIiwgYXJndltpXSk7CisKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiKSwKKwkJCSAgIHJlZnNfbXNnLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZyZWZzX21zZyk7CisKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChhcmdjID09IDEpCisJCWNvbW1pdCA9IGFyZ3ZbMF07CisKKwlzdHJidWZfaW5pdCgmaW5mby0+cmV2aXNpb24sIDApOworCWlmICghY29tbWl0KSB7CisJCWlmICghcmVmX2V4aXN0cyhyZWZfc3Rhc2gpKSB7CisJCQlmcmVlX3N0YXNoX2luZm8oaW5mbyk7CisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlzdHJidWZfYWRkZigmaW5mby0+cmV2aXNpb24sICIlc0B7MH0iLCByZWZfc3Rhc2gpOworCX0gZWxzZSBpZiAoc3Ryc3BuKGNvbW1pdCwgIjAxMjM0NTY3ODkiKSA9PSBzdHJsZW4oY29tbWl0KSkgeworCQlzdHJidWZfYWRkZigmaW5mby0+cmV2aXNpb24sICIlc0B7JXN9IiwgcmVmX3N0YXNoLCBjb21taXQpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmluZm8tPnJldmlzaW9uLCBjb21taXQpOworCX0KKworCXJldmlzaW9uID0gaW5mby0+cmV2aXNpb24uYnVmOworCisJaWYgKGdldF9vaWQocmV2aXNpb24sICZpbmZvLT53X2NvbW1pdCkpIHsKKwkJZXJyb3IoXygiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIiksIHJldmlzaW9uKTsKKwkJZnJlZV9zdGFzaF9pbmZvKGluZm8pOworCQlyZXR1cm4gLTE7CisJfQorCisJYXNzZXJ0X3N0YXNoX2xpa2UoaW5mbywgcmV2aXNpb24pOworCisJaW5mby0+aGFzX3UgPSAhZ2V0X29pZGYoJmluZm8tPnVfdHJlZSwgIiVzXjM6IiwgcmV2aXNpb24pOworCisJZW5kX29mX3JldiA9IHN0cmNocm51bChyZXZpc2lvbiwgJ0AnKTsKKwlzdHJidWZfYWRkKCZzeW1ib2xpYywgcmV2aXNpb24sIGVuZF9vZl9yZXYgLSByZXZpc2lvbik7CisKKwlyZXQgPSBkd2ltX3JlZihzeW1ib2xpYy5idWYsIHN5bWJvbGljLmxlbiwgJmR1bW15LCAmZXhwYW5kZWRfcmVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc3ltYm9saWMpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOiAvKiBOb3QgZm91bmQsIGJ1dCB2YWxpZCByZWYgKi8KKwkJaW5mby0+aXNfc3Rhc2hfcmVmID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpbmZvLT5pc19zdGFzaF9yZWYgPSAhc3RyY21wKGV4cGFuZGVkX3JlZiwgcmVmX3N0YXNoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogSW52YWxpZCBvciBhbWJpZ3VvdXMgKi8KKwkJZnJlZV9zdGFzaF9pbmZvKGluZm8pOworCX0KKworCWZyZWUoZXhwYW5kZWRfcmVmKTsKKwlyZXR1cm4gIShyZXQgPT0gMCB8fCByZXQgPT0gMSk7Cit9CisKK3N0YXRpYyBpbnQgZG9fY2xlYXJfc3Rhc2godm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iajsKKwlpZiAoZ2V0X29pZChyZWZfc3Rhc2gsICZvYmopKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBkZWxldGVfcmVmKE5VTEwsIHJlZl9zdGFzaCwgJm9iaiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfc3Rhc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zdGFzaF9jbGVhcl91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAoYXJnYykKKwkJcmV0dXJuIGVycm9yKF8oImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgIgorCQkJICAgICAgICJ1bmltcGxlbWVudGVkIikpOworCisJcmV0dXJuIGRvX2NsZWFyX3N0YXNoKCk7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfdHJlZShzdHJ1Y3Qgb2JqZWN0X2lkICppX3RyZWUsIGludCB1cGRhdGUsIGludCByZXNldCkKK3sKKwlpbnQgbnJfdHJlZXMgPSAxOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCB0cmVlX2Rlc2MgdFtNQVhfVU5QQUNLX1RSRUVTXTsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKworCXJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKTsKKwlpZiAocmVmcmVzaF9jYWNoZShSRUZSRVNIX1FVSUVUKSkKKwkJcmV0dXJuIC0xOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgTE9DS19ESUVfT05fRVJST1IpOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoaV90cmVlKTsKKwlpZiAocGFyc2VfdHJlZSh0cmVlKSkKKwkJcmV0dXJuIC0xOworCisJaW5pdF90cmVlX2Rlc2ModCwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5yZXNldCA9IHJlc2V0OworCW9wdHMudXBkYXRlID0gdXBkYXRlOworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisKKwlpZiAodW5wYWNrX3RyZWVzKG5yX3RyZWVzLCB0LCAmb3B0cykpCisJCXJldHVybiAtMTsKKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl90cmVlX2JpbmFyeShzdHJ1Y3Qgc3RyYnVmICpvdXQsIHN0cnVjdCBvYmplY3RfaWQgKndfY29tbWl0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKndfY29tbWl0X2hleCA9IG9pZF90b19oZXgod19jb21taXQpOworCisJLyoKKwkgKiBEaWZmLXRyZWUgd291bGQgbm90IGJlIHZlcnkgaGFyZCB0byByZXBsYWNlIHdpdGggYSBuYXRpdmUgZnVuY3Rpb24sCisJICogaG93ZXZlciBpdCBzaG91bGQgYmUgZG9uZSB0b2dldGhlciB3aXRoIGFwcGx5X2NhY2hlZC4KKwkgKi8KKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiZGlmZi10cmVlIiwgIi0tYmluYXJ5IiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIiVzXjJeLi4lc14yIiwgd19jb21taXRfaGV4LCB3X2NvbW1pdF9oZXgpOworCisJcmV0dXJuIHBpcGVfY29tbWFuZCgmY3AsIE5VTEwsIDAsIG91dCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfY2FjaGVkKHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCS8qCisJICogQXBwbHkgY3VycmVudGx5IG9ubHkgcmVhZHMgZWl0aGVyIGZyb20gc3RkaW4gb3IgYSBmaWxlLCB0aHVzCisJICogYXBwbHlfYWxsX3BhdGNoZXMgd291bGQgaGF2ZSB0byBiZSB1cGRhdGVkIHRvIG9wdGlvbmFsbHkgdGFrZSBhCisJICogYnVmZmVyLgorCSAqLworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJhcHBseSIsICItLWNhY2hlZCIsIE5VTEwpOworCXJldHVybiBwaXBlX2NvbW1hbmQoJmNwLCBvdXQtPmJ1Ziwgb3V0LT5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IHJlc2V0X2hlYWQodm9pZCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCS8qCisJICogUmVzZXQgaXMgb3ZlcmFsbCBxdWl0ZSBzaW1wbGUsIGhvd2V2ZXIgdGhlcmUgaXMgbm8gY3VycmVudCBwdWJsaWMKKwkgKiBBUEkgZm9yIHJlc2V0dGluZy4KKwkgKi8KKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJyZXNldCIpOworCisJcmV0dXJuIHJ1bl9jb21tYW5kKCZjcCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9kaWZmX3RvX2J1ZihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJCSAgICB2b2lkICpkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RyYnVmX2FkZHN0cihkYXRhLCBxLT5xdWV1ZVtpXS0+b25lLT5wYXRoKTsKKworCQkvKiBOVUwtdGVybWluYXRlOiB3aWxsIGJlIGZlZCB0byB1cGRhdGUtaW5kZXggLXogKi8KKwkJc3RyYnVmX2FkZGNoKGRhdGEsICdcMCcpOworCX0KK30KKworc3RhdGljIGludCBnZXRfbmV3bHlfc3RhZ2VkKHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IG9iamVjdF9pZCAqY190cmVlKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmNfdHJlZV9oZXggPSBvaWRfdG9faGV4KGNfdHJlZSk7CisKKwkvKgorCSAqIGRpZmYtaW5kZXggaXMgdmVyeSBzaW1pbGFyIHRvIGRpZmYtdHJlZSBhYm92ZSwgYW5kIHNob3VsZCBiZQorCSAqIGNvbnZlcnRlZCB0b2dldGhlciB3aXRoIHVwZGF0ZV9pbmRleC4KKwkgKi8KKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiZGlmZi1pbmRleCIsICItLWNhY2hlZCIsICItLW5hbWUtb25seSIsCisJCQkgIi0tZGlmZi1maWx0ZXI9QSIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgY190cmVlX2hleCk7CisJcmV0dXJuIHBpcGVfY29tbWFuZCgmY3AsIE5VTEwsIDAsIG91dCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2luZGV4KHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCS8qCisJICogVXBkYXRlLWluZGV4IGlzIHZlcnkgY29tcGxpY2F0ZWQgYW5kIG1heSBuZWVkIHRvIGhhdmUgYSBwdWJsaWMKKwkgKiBmdW5jdGlvbiBleHBvc2VkIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGZvcmtpbmcuCisJICovCisJY3AuZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInVwZGF0ZS1pbmRleCIsICItLWFkZCIsICItLXN0ZGluIiwgTlVMTCk7CisJcmV0dXJuIHBpcGVfY29tbWFuZCgmY3AsIG91dC0+YnVmLCBvdXQtPmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcmVzdG9yZV91bnRyYWNrZWQoc3RydWN0IG9iamVjdF9pZCAqdV90cmVlKQoreworCWludCByZXM7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcnVuIHJlc3RvcmUgZmlsZXMgZnJvbSBhIGdpdmVuIGluZGV4LCBidXQgd2l0aG91dAorCSAqIGFmZmVjdGluZyB0aGUgY3VycmVudCBpbmRleCwgc28gd2UgdXNlIEdJVF9JTkRFWF9GSUxFIHdpdGgKKwkgKiBydW5fY29tbWFuZCB0byBmb3JrIHByb2Nlc3NlcyB0aGF0IHdpbGwgbm90IGludGVyZmVyZS4KKwkgKi8KKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJyZWFkLXRyZWUiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG9pZF90b19oZXgodV90cmVlKSk7CisJYXJndl9hcnJheV9wdXNoZigmY3AuZW52X2FycmF5LCAiR0lUX0lOREVYX0ZJTEU9JXMiLAorCQkJIHN0YXNoX2luZGV4X3BhdGguYnVmKTsKKwlpZiAocnVuX2NvbW1hbmQoJmNwKSkgeworCQlyZW1vdmVfcGF0aChzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisKKwljaGlsZF9wcm9jZXNzX2luaXQoJmNwKTsKKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiY2hlY2tvdXQtaW5kZXgiLCAiLS1hbGwiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjcC5lbnZfYXJyYXksICJHSVRfSU5ERVhfRklMRT0lcyIsCisJCQkgc3Rhc2hfaW5kZXhfcGF0aC5idWYpOworCisJcmVzID0gcnVuX2NvbW1hbmQoJmNwKTsKKwlyZW1vdmVfcGF0aChzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBkb19hcHBseV9zdGFzaChjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdGFzaF9pbmZvICppbmZvLAorCQkJICBpbnQgaW5kZXgsIGludCBxdWlldCkKK3sKKwlpbnQgcmV0OworCWludCBoYXNfaW5kZXggPSBpbmRleDsKKwlzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyBvOworCXN0cnVjdCBvYmplY3RfaWQgY190cmVlOworCXN0cnVjdCBvYmplY3RfaWQgaW5kZXhfdHJlZTsKKwlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZXNbMV07CisKKwlyZWFkX2NhY2hlX3ByZWxvYWQoTlVMTCk7CisJaWYgKHJlZnJlc2hfYW5kX3dyaXRlX2NhY2hlKFJFRlJFU0hfUVVJRVQsIDAsIDApKQorCQlyZXR1cm4gLTE7CisKKwlpZiAod3JpdGVfY2FjaGVfYXNfdHJlZSgmY190cmVlLCAwLCBOVUxMKSkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIpKTsKKworCWlmIChpbmRleCkgeworCQlpZiAob2lkZXEoJmluZm8tPmJfdHJlZSwgJmluZm8tPmlfdHJlZSkgfHwKKwkJICAgIG9pZGVxKCZjX3RyZWUsICZpbmZvLT5pX3RyZWUpKSB7CisJCQloYXNfaW5kZXggPSAwOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKworCQkJaWYgKGRpZmZfdHJlZV9iaW5hcnkoJm91dCwgJmluZm8tPndfY29tbWl0KSkgeworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCQkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIpLAorCQkJCQkgICAgIG9pZF90b19oZXgoJmluZm8tPndfY29tbWl0KSk7CisJCQl9CisKKwkJCXJldCA9IGFwcGx5X2NhY2hlZCgmb3V0KTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gZXJyb3IoXygiY29uZmxpY3RzIGluIGluZGV4LiIKKwkJCQkJICAgICAgICJUcnkgd2l0aG91dCAtLWluZGV4LiIpKTsKKworCQkJZGlzY2FyZF9jYWNoZSgpOworCQkJcmVhZF9jYWNoZSgpOworCQkJaWYgKHdyaXRlX2NhY2hlX2FzX3RyZWUoJmluZGV4X3RyZWUsIDAsIE5VTEwpKQorCQkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIikpOworCisJCQlyZXNldF9oZWFkKCk7CisJCQlkaXNjYXJkX2NhY2hlKCk7CisJCQlyZWFkX2NhY2hlKCk7CisJCX0KKwl9CisKKwlpZiAoaW5mby0+aGFzX3UgJiYgcmVzdG9yZV91bnRyYWNrZWQoJmluZm8tPnVfdHJlZSkpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIpKTsKKworCWluaXRfbWVyZ2Vfb3B0aW9ucygmbywgdGhlX3JlcG9zaXRvcnkpOworCisJby5icmFuY2gxID0gIlVwZGF0ZWQgdXBzdHJlYW0iOworCW8uYnJhbmNoMiA9ICJTdGFzaGVkIGNoYW5nZXMiOworCisJaWYgKG9pZGVxKCZpbmZvLT5iX3RyZWUsICZjX3RyZWUpKQorCQlvLmJyYW5jaDEgPSAiVmVyc2lvbiBzdGFzaCB3YXMgYmFzZWQgb24iOworCisJaWYgKHF1aWV0KQorCQlvLnZlcmJvc2l0eSA9IDA7CisKKwlpZiAoby52ZXJib3NpdHkgPj0gMykKKwkJcHJpbnRmX2xuKF8oIk1lcmdpbmcgJXMgd2l0aCAlcyIpLCBvLmJyYW5jaDEsIG8uYnJhbmNoMik7CisKKwliYXNlc1swXSA9ICZpbmZvLT5iX3RyZWU7CisKKwlyZXQgPSBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYygmbywgJmNfdHJlZSwgJmluZm8tPndfdHJlZSwgMSwgYmFzZXMsCisJCQkJICAgICAgJnJlc3VsdCk7CisJaWYgKHJldCkgeworCQlyZXJlcmUoMCk7CisKKwkJaWYgKGluZGV4KQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIpKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChoYXNfaW5kZXgpIHsKKwkJaWYgKHJlc2V0X3RyZWUoJmluZGV4X3RyZWUsIDAsIDApKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGdldF9uZXdseV9zdGFnZWQoJm91dCwgJmNfdHJlZSkpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHJlc2V0X3RyZWUoJmNfdHJlZSwgMCwgMSkpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJcmV0ID0gdXBkYXRlX2luZGV4KCZvdXQpOworCQlzdHJidWZfcmVsZWFzZSgmb3V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKworCQkvKiByZWFkIGJhY2sgdGhlIHJlc3VsdCBvZiB1cGRhdGVfaW5kZXgoKSBiYWNrIGZyb20gdGhlIGRpc2sgKi8KKwkJZGlzY2FyZF9jYWNoZSgpOworCQlyZWFkX2NhY2hlKCk7CisJfQorCisJaWYgKCFxdWlldCkgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQkvKgorCQkgKiBTdGF0dXMgaXMgcXVpdGUgc2ltcGxlIGFuZCBjb3VsZCBiZSByZXBsYWNlZCB3aXRoIGNhbGxzIHRvCisJCSAqIHd0X3N0YXR1cyBpbiB0aGUgZnV0dXJlLCBidXQgaXQgYWRkcyBjb21wbGV4aXRpZXMgd2hpY2ggbWF5CisJCSAqIHJlcXVpcmUgbW9yZSB0ZXN0cy4KKwkJICovCisJCWNwLmdpdF9jbWQgPSAxOworCQljcC5kaXIgPSBwcmVmaXg7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmVudl9hcnJheSwgR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCI9JXMiLAorCQkJCSBhYnNvbHV0ZV9wYXRoKGdldF9naXRfd29ya190cmVlKCkpKTsKKwkJYXJndl9hcnJheV9wdXNoZigmY3AuZW52X2FycmF5LCBHSVRfRElSX0VOVklST05NRU5UIj0lcyIsCisJCQkJIGFic29sdXRlX3BhdGgoZ2V0X2dpdF9kaXIoKSkpOworCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJzdGF0dXMiKTsKKwkJcnVuX2NvbW1hbmQoJmNwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcmV0OworCWludCBxdWlldCA9IDA7CisJaW50IGluZGV4ID0gMDsKKwlzdHJ1Y3Qgc3Rhc2hfaW5mbyBpbmZvOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiKSksCisJCU9QVF9CT09MKDAsICJpbmRleCIsICZpbmRleCwKKwkJCSBOXygiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zdGFzaF9hcHBseV91c2FnZSwgMCk7CisKKwlpZiAoZ2V0X3N0YXNoX2luZm8oJmluZm8sIGFyZ2MsIGFyZ3YpKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBkb19hcHBseV9zdGFzaChwcmVmaXgsICZpbmZvLCBpbmRleCwgcXVpZXQpOworCWZyZWVfc3Rhc2hfaW5mbygmaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkb19kcm9wX3N0YXNoKHN0cnVjdCBzdGFzaF9pbmZvICppbmZvLCBpbnQgcXVpZXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF9yZWZsb2cgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkvKgorCSAqIHJlZmxvZyBkb2VzIG5vdCBwcm92aWRlIGEgc2ltcGxlIGZ1bmN0aW9uIGZvciBkZWxldGluZyByZWZzLiBPbmUgd2lsbAorCSAqIG5lZWQgdG8gYmUgYWRkZWQgdG8gYXZvaWQgaW1wbGVtZW50aW5nIHRvbyBtdWNoIHJlZmxvZyBjb2RlIGhlcmUKKwkgKi8KKworCWNwX3JlZmxvZy5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcF9yZWZsb2cuYXJncywgInJlZmxvZyIsICJkZWxldGUiLCAiLS11cGRhdGVyZWYiLAorCQkJICItLXJld3JpdGUiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwX3JlZmxvZy5hcmdzLCBpbmZvLT5yZXZpc2lvbi5idWYpOworCXJldCA9IHJ1bl9jb21tYW5kKCZjcF9yZWZsb2cpOworCWlmICghcmV0KSB7CisJCWlmICghcXVpZXQpCisJCQlwcmludGZfbG4oXygiRHJvcHBlZCAlcyAoJXMpIiksIGluZm8tPnJldmlzaW9uLmJ1ZiwKKwkJCQkgIG9pZF90b19oZXgoJmluZm8tPndfY29tbWl0KSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGVycm9yKF8oIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIpLAorCQkJICAgICBpbmZvLT5yZXZpc2lvbi5idWYpOworCX0KKworCS8qCisJICogVGhpcyBjb3VsZCBlYXNpbHkgYmUgcmVwbGFjZWQgYnkgZ2V0X29pZCwgYnV0IGN1cnJlbnRseSBpdCB3aWxsIHRocm93CisJICogYSBmYXRhbCBlcnJvciB3aGVuIGEgcmVmbG9nIGlzIGVtcHR5LCB3aGljaCB3ZSBjYW4gbm90IHJlY292ZXIgZnJvbS4KKwkgKi8KKwljcC5naXRfY21kID0gMTsKKwkvKiBFdmVuIHRob3VnaCAtLXF1aWV0IGlzIHNwZWNpZmllZCwgcmV2LXBhcnNlIHN0aWxsIG91dHB1dHMgdGhlIGhhc2ggKi8KKwljcC5ub19zdGRvdXQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJyZXYtcGFyc2UiLCAiLS12ZXJpZnkiLCAiLS1xdWlldCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICIlc0B7MH0iLCByZWZfc3Rhc2gpOworCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisKKwkvKiBkb19jbGVhcl9zdGFzaCBpZiB3ZSBqdXN0IGRyb3BwZWQgdGhlIGxhc3Qgc3Rhc2ggZW50cnkgKi8KKwlpZiAocmV0KQorCQlkb19jbGVhcl9zdGFzaCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9zdGFzaF9yZWYoc3RydWN0IHN0YXNoX2luZm8gKmluZm8pCit7CisJaWYgKCFpbmZvLT5pc19zdGFzaF9yZWYpIHsKKwkJZXJyb3IoXygiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiKSwgaW5mby0+cmV2aXNpb24uYnVmKTsKKwkJZnJlZV9zdGFzaF9pbmZvKGluZm8pOworCQlleGl0KDEpOworCX0KK30KKworc3RhdGljIGludCBkcm9wX3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCByZXQ7CisJaW50IHF1aWV0ID0gMDsKKwlzdHJ1Y3Qgc3Rhc2hfaW5mbyBpbmZvOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zdGFzaF9kcm9wX3VzYWdlLCAwKTsKKworCWlmIChnZXRfc3Rhc2hfaW5mbygmaW5mbywgYXJnYywgYXJndikpCisJCXJldHVybiAtMTsKKworCWFzc2VydF9zdGFzaF9yZWYoJmluZm8pOworCisJcmV0ID0gZG9fZHJvcF9zdGFzaCgmaW5mbywgcXVpZXQpOworCWZyZWVfc3Rhc2hfaW5mbygmaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3Bfc3Rhc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHJldDsKKwlpbnQgaW5kZXggPSAwOworCWludCBxdWlldCA9IDA7CisJc3RydWN0IHN0YXNoX2luZm8gaW5mbzsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIikpLAorCQlPUFRfQk9PTCgwLCAiaW5kZXgiLCAmaW5kZXgsCisJCQkgTl8oImF0dGVtcHQgdG8gcmVjcmVhdGUgdGhlIGluZGV4IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfc3Rhc2hfcG9wX3VzYWdlLCAwKTsKKworCWlmIChnZXRfc3Rhc2hfaW5mbygmaW5mbywgYXJnYywgYXJndikpCisJCXJldHVybiAtMTsKKworCWFzc2VydF9zdGFzaF9yZWYoJmluZm8pOworCWlmICgocmV0ID0gZG9fYXBwbHlfc3Rhc2gocHJlZml4LCAmaW5mbywgaW5kZXgsIHF1aWV0KSkpCisJCXByaW50Zl9sbihfKCJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlICIKKwkJCSAgICAieW91IG5lZWQgaXQgYWdhaW4uIikpOworCWVsc2UKKwkJcmV0ID0gZG9fZHJvcF9zdGFzaCgmaW5mbywgcXVpZXQpOworCisJZnJlZV9zdGFzaF9pbmZvKCZpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJyYW5jaF9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcmV0OworCWNvbnN0IGNoYXIgKmJyYW5jaCA9IE5VTEw7CisJc3RydWN0IHN0YXNoX2luZm8gaW5mbzsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N0YXNoX2JyYW5jaF91c2FnZSwgMCk7CisKKwlpZiAoIWFyZ2MpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWJyYW5jaCA9IGFyZ3ZbMF07CisKKwlpZiAoZ2V0X3N0YXNoX2luZm8oJmluZm8sIGFyZ2MgLSAxLCBhcmd2ICsgMSkpCisJCXJldHVybiAtMTsKKworCWNwLmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJjaGVja291dCIsICItYiIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgYnJhbmNoKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG9pZF90b19oZXgoJmluZm8uYl9jb21taXQpKTsKKwlyZXQgPSBydW5fY29tbWFuZCgmY3ApOworCWlmICghcmV0KQorCQlyZXQgPSBkb19hcHBseV9zdGFzaChwcmVmaXgsICZpbmZvLCAxLCAwKTsKKwlpZiAoIXJldCAmJiBpbmZvLmlzX3N0YXNoX3JlZikKKwkJcmV0ID0gZG9fZHJvcF9zdGFzaCgmaW5mbywgMCk7CisKKwlmcmVlX3N0YXNoX2luZm8oJmluZm8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsaXN0X3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfc3Rhc2hfbGlzdF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTik7CisKKwlpZiAoIXJlZl9leGlzdHMocmVmX3N0YXNoKSkKKwkJcmV0dXJuIDA7CisKKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAibG9nIiwgIi0tZm9ybWF0PSVnZDogJWdzIiwgIi1nIiwKKwkJCSAiLS1maXJzdC1wYXJlbnQiLCAiLW0iLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2h2KCZjcC5hcmdzLCBhcmd2KTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHJlZl9zdGFzaCk7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS0iKTsKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNwKTsKK30KKworc3RhdGljIGludCBzaG93X3N0YXQgPSAxOworc3RhdGljIGludCBzaG93X3BhdGNoOworCitzdGF0aWMgaW50IGdpdF9zdGFzaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAic3Rhc2guc2hvd3N0YXQiKSkgeworCQlzaG93X3N0YXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJzdGFzaC5zaG93cGF0Y2giKSkgeworCQlzaG93X3BhdGNoID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3Rhc2hfaW5mbyBpbmZvOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IGFyZ3ZfYXJyYXkgc3Rhc2hfYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgYXJndl9hcnJheSByZXZpc2lvbl9hcmdzID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCisJaW5pdF9kaWZmX3VpX2RlZmF1bHRzKCk7CisJZ2l0X2NvbmZpZyhnaXRfZGlmZl91aV9jb25maWcsIE5VTEwpOworCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CisKKwlhcmd2X2FycmF5X3B1c2goJnJldmlzaW9uX2FyZ3MsIGFyZ3ZbMF0pOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKGFyZ3ZbaV1bMF0gIT0gJy0nKQorCQkJYXJndl9hcnJheV9wdXNoKCZzdGFzaF9hcmdzLCBhcmd2W2ldKTsKKwkJZWxzZQorCQkJYXJndl9hcnJheV9wdXNoKCZyZXZpc2lvbl9hcmdzLCBhcmd2W2ldKTsKKwl9CisKKwlyZXQgPSBnZXRfc3Rhc2hfaW5mbygmaW5mbywgc3Rhc2hfYXJncy5hcmdjLCBzdGFzaF9hcmdzLmFyZ3YpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJnN0YXNoX2FyZ3MpOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKKworCS8qCisJICogVGhlIGNvbmZpZyBzZXR0aW5ncyBhcmUgYXBwbGllZCBvbmx5IGlmIHRoZXJlIGFyZSBub3QgcGFzc2VkCisJICogYW55IG9wdGlvbnMuCisJICovCisJaWYgKHJldmlzaW9uX2FyZ3MuYXJnYyA9PSAxKSB7CisJCWdpdF9jb25maWcoZ2l0X3N0YXNoX2NvbmZpZywgTlVMTCk7CisJCWlmIChzaG93X3N0YXQpCisJCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfRElGRlNUQVQ7CisKKwkJaWYgKHNob3dfcGF0Y2gpCisJCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIOworCisJCWlmICghc2hvd19zdGF0ICYmICFzaG93X3BhdGNoKSB7CisJCQlmcmVlX3N0YXNoX2luZm8oJmluZm8pOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKHJldmlzaW9uX2FyZ3MuYXJnYywgcmV2aXNpb25fYXJncy5hcmd2LCAmcmV2LCBOVUxMKTsKKwlpZiAoYXJnYyA+IDEpIHsKKwkJZnJlZV9zdGFzaF9pbmZvKCZpbmZvKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9zdGFzaF9zaG93X3VzYWdlLCBvcHRpb25zKTsKKwl9CisJaWYgKCFyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0KSB7CisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKKwkJZGlmZl9zZXR1cF9kb25lKCZyZXYuZGlmZm9wdCk7CisJfQorCisJcmV2LmRpZmZvcHQuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlzZXR1cF9kaWZmX3BhZ2VyKCZyZXYuZGlmZm9wdCk7CisJZGlmZl90cmVlX29pZCgmaW5mby5iX2NvbW1pdCwgJmluZm8ud19jb21taXQsICIiLCAmcmV2LmRpZmZvcHQpOworCWxvZ190cmVlX2RpZmZfZmx1c2goJnJldik7CisKKwlmcmVlX3N0YXNoX2luZm8oJmluZm8pOworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZG9fc3RvcmVfc3Rhc2goY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqd19jb21taXQsIGNvbnN0IGNoYXIgKnN0YXNoX21zZywKKwkJCSAgaW50IHF1aWV0KQoreworCWlmICghc3Rhc2hfbXNnKQorCQlzdGFzaF9tc2cgPSAiQ3JlYXRlZCB2aWEgXCJnaXQgc3Rhc2ggc3RvcmVcIi4iOworCisJaWYgKHVwZGF0ZV9yZWYoc3Rhc2hfbXNnLCByZWZfc3Rhc2gsIHdfY29tbWl0LCBOVUxMLAorCQkgICAgICAgUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0csCisJCSAgICAgICBxdWlldCA/IFVQREFURV9SRUZTX1FVSUVUX09OX0VSUiA6CisJCSAgICAgICBVUERBVEVfUkVGU19NU0dfT05fRVJSKSkgeworCQlpZiAoIXF1aWV0KSB7CisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIiksCisJCQkJICAgcmVmX3N0YXNoLCBvaWRfdG9faGV4KHdfY29tbWl0KSk7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0b3JlX3N0YXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBxdWlldCA9IDA7CisJY29uc3QgY2hhciAqc3Rhc2hfbXNnID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iajsKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgZHVtbXk7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiYmUgcXVpZXQiKSksCisJCU9QVF9TVFJJTkcoJ20nLCAibWVzc2FnZSIsICZzdGFzaF9tc2csICJtZXNzYWdlIiwKKwkJCSAgIE5fKCJzdGFzaCBtZXNzYWdlIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfc3Rhc2hfc3RvcmVfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX1VOS05PV04pOworCisJaWYgKGFyZ2MgIT0gMSkgeworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lICIKKwkJCQkJICAgICAiPGNvbW1pdD4gYXJndW1lbnQiKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZ2V0X29pZF93aXRoX2NvbnRleHQodGhlX3JlcG9zaXRvcnksCisJCQkJIGFyZ3ZbMF0sIHF1aWV0ID8gR0VUX09JRF9RVUlFVExZIDogMCwgJm9iaiwKKwkJCQkgJmR1bW15KSkgeworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIpLAorCQkJCQkgICAgIHJlZl9zdGFzaCwgYXJndlswXSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gZG9fc3RvcmVfc3Rhc2goJm9iaiwgc3Rhc2hfbXNnLCBxdWlldCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wYXRoc3BlY3Moc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3MsCisJCQkgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcy0+bnI7IGkrKykKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3MsIHBzLT5pdGVtc1tpXS5vcmlnaW5hbCk7Cit9CisKKy8qCisgKiBgdW50cmFja2VkX2ZpbGVzYCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBuYW1lcyBvZiB1bnRyYWNrZWQgZmlsZXMuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzOgorICoKKyAqID0gMCBpZiB0aGVyZSBhcmUgbm90IGFueSB1bnRyYWNrZWQgZmlsZXMKKyAqID4gMCBpZiB0aGVyZSBhcmUgdW50cmFja2VkIGZpbGVzCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3VudHJhY2tlZF9maWxlcyhjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLCBpbnQgaW5jbHVkZV91bnRyYWNrZWQsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqdW50cmFja2VkX2ZpbGVzKQoreworCWludCBpOworCWludCBtYXhfbGVuOworCWludCBmb3VuZCA9IDA7CisJY2hhciAqc2VlbjsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCWlmIChpbmNsdWRlX3VudHJhY2tlZCAhPSBJTkNMVURFX0FMTF9GSUxFUykKKwkJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisKKwlzZWVuID0geGNhbGxvYyhwcy0+bnIsIDEpOworCisJbWF4X2xlbiA9IGZpbGxfZGlyZWN0b3J5KCZkaXIsIHRoZV9yZXBvc2l0b3J5LT5pbmRleCwgcHMpOworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKwkJaWYgKGRpcl9wYXRoX21hdGNoKCZ0aGVfaW5kZXgsIGVudCwgcHMsIG1heF9sZW4sIHNlZW4pKSB7CisJCQlmb3VuZCsrOworCQkJc3RyYnVmX2FkZHN0cih1bnRyYWNrZWRfZmlsZXMsIGVudC0+bmFtZSk7CisJCQkvKiBOVUwtdGVybWluYXRlOiB3aWxsIGJlIGZlZCB0byB1cGRhdGUtaW5kZXggLXogKi8KKwkJCXN0cmJ1Zl9hZGRjaCh1bnRyYWNrZWRfZmlsZXMsICdcMCcpOworCQl9CisJCWZyZWUoZW50KTsKKwl9CisKKwlmcmVlKHNlZW4pOworCWZyZWUoZGlyLmVudHJpZXMpOworCWZyZWUoZGlyLmlnbm9yZWQpOworCWNsZWFyX2RpcmVjdG9yeSgmZGlyKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIGBjaGVja19jaGFuZ2VzX3RyYWNrZWRfZmlsZXMoKWAgY2FuIGJlOgorICoKKyAqIDwgMCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IKKyAqID0gMCBpZiB0aGVyZSBhcmUgbm8gY2hhbmdlcy4KKyAqID4gMCBpZiB0aGVyZSBhcmUgY2hhbmdlcy4KKyAqLworc3RhdGljIGludCBjaGVja19jaGFuZ2VzX3RyYWNrZWRfZmlsZXMoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IG9iamVjdF9pZCBkdW1teTsKKwlpbnQgcmV0ID0gMDsKKworCS8qIE5vIGluaXRpYWwgY29tbWl0LiAqLworCWlmIChnZXRfb2lkKCJIRUFEIiwgJmR1bW15KSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCXJldHVybiAtMTsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCWNvcHlfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhLCBwcyk7CisKKwlyZXYuZGlmZm9wdC5mbGFncy5xdWljayA9IDE7CisJcmV2LmRpZmZvcHQuZmxhZ3MuaWdub3JlX3N1Ym1vZHVsZXMgPSAxOworCXJldi5hYmJyZXYgPSAwOworCisJYWRkX2hlYWRfdG9fcGVuZGluZygmcmV2KTsKKwlkaWZmX3NldHVwX2RvbmUoJnJldi5kaWZmb3B0KTsKKworCXJlc3VsdCA9IHJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCWlmIChkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgcmVzdWx0KSkgeworCQlyZXQgPSAxOworCQlnb3RvIGRvbmU7CisJfQorCisJb2JqZWN0X2FycmF5X2NsZWFyKCZyZXYucGVuZGluZyk7CisJcmVzdWx0ID0gcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7CisJaWYgKGRpZmZfcmVzdWx0X2NvZGUoJnJldi5kaWZmb3B0LCByZXN1bHQpKSB7CisJCXJldCA9IDE7CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJY2xlYXJfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIGZ1bmN0aW9uIHdpbGwgZmlsbCBgdW50cmFja2VkX2ZpbGVzYCB3aXRoIHRoZSBuYW1lcyBvZiB1bnRyYWNrZWQgZmlsZXMKKyAqIEl0IHdpbGwgcmV0dXJuIDEgaWYgdGhlcmUgd2VyZSBhbnkgY2hhbmdlcyBhbmQgMCBpZiB0aGVyZSB3ZXJlIG5vdC4KKyAqLworc3RhdGljIGludCBjaGVja19jaGFuZ2VzKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsIGludCBpbmNsdWRlX3VudHJhY2tlZCwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICp1bnRyYWNrZWRfZmlsZXMpCit7CisJaW50IHJldCA9IDA7CisJaWYgKGNoZWNrX2NoYW5nZXNfdHJhY2tlZF9maWxlcyhwcykpCisJCXJldCA9IDE7CisKKwlpZiAoaW5jbHVkZV91bnRyYWNrZWQgJiYgZ2V0X3VudHJhY2tlZF9maWxlcyhwcywgaW5jbHVkZV91bnRyYWNrZWQsCisJCQkJCQkgICAgIHVudHJhY2tlZF9maWxlcykpCisJCXJldCA9IDE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhdmVfdW50cmFja2VkX2ZpbGVzKHN0cnVjdCBzdGFzaF9pbmZvICppbmZvLCBzdHJ1Y3Qgc3RyYnVmICptc2csCisJCQkJc3RydWN0IHN0cmJ1ZiBmaWxlcykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHVudHJhY2tlZF9tc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF91cGRfaW5kZXggPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGluZGV4X3N0YXRlIGlzdGF0ZSA9IHsgTlVMTCB9OworCisJY3BfdXBkX2luZGV4LmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwX3VwZF9pbmRleC5hcmdzLCAidXBkYXRlLWluZGV4IiwgIi16IiwgIi0tYWRkIiwKKwkJCSAiLS1yZW1vdmUiLCAiLS1zdGRpbiIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwX3VwZF9pbmRleC5lbnZfYXJyYXksICJHSVRfSU5ERVhfRklMRT0lcyIsCisJCQkgc3Rhc2hfaW5kZXhfcGF0aC5idWYpOworCisJc3RyYnVmX2FkZGYoJnVudHJhY2tlZF9tc2csICJ1bnRyYWNrZWQgZmlsZXMgb24gJXNcbiIsIG1zZy0+YnVmKTsKKwlpZiAocGlwZV9jb21tYW5kKCZjcF91cGRfaW5kZXgsIGZpbGVzLmJ1ZiwgZmlsZXMubGVuLCBOVUxMLCAwLAorCQkJIE5VTEwsIDApKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUoJmluZm8tPnVfdHJlZSwgJmlzdGF0ZSwgc3Rhc2hfaW5kZXhfcGF0aC5idWYsIDAsCisJCQkJTlVMTCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoY29tbWl0X3RyZWUodW50cmFja2VkX21zZy5idWYsIHVudHJhY2tlZF9tc2cubGVuLAorCQkJJmluZm8tPnVfdHJlZSwgTlVMTCwgJmluZm8tPnVfY29tbWl0LCBOVUxMLCBOVUxMKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworZG9uZToKKwlkaXNjYXJkX2luZGV4KCZpc3RhdGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZ1bnRyYWNrZWRfbXNnKTsKKwlyZW1vdmVfcGF0aChzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdGFzaF9wYXRjaChzdHJ1Y3Qgc3Rhc2hfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICAgIHN0cnVjdCBzdHJidWYgKm91dF9wYXRjaCwgaW50IHF1aWV0KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwX3JlYWRfdHJlZSA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF9kaWZmX3RyZWUgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGluZGV4X3N0YXRlIGlzdGF0ZSA9IHsgTlVMTCB9OworCWNoYXIgKm9sZF9pbmRleF9lbnYgPSBOVUxMLCAqb2xkX3JlcG9faW5kZXhfZmlsZTsKKworCXJlbW92ZV9wYXRoKHN0YXNoX2luZGV4X3BhdGguYnVmKTsKKworCWNwX3JlYWRfdHJlZS5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcF9yZWFkX3RyZWUuYXJncywgInJlYWQtdHJlZSIsICJIRUFEIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoZigmY3BfcmVhZF90cmVlLmVudl9hcnJheSwgIkdJVF9JTkRFWF9GSUxFPSVzIiwKKwkJCSBzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisJaWYgKHJ1bl9jb21tYW5kKCZjcF9yZWFkX3RyZWUpKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogRmluZCBvdXQgd2hhdCB0aGUgdXNlciB3YW50cy4gKi8KKwlvbGRfcmVwb19pbmRleF9maWxlID0gdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGU7CisJdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGUgPSBzdGFzaF9pbmRleF9wYXRoLmJ1ZjsKKwlvbGRfaW5kZXhfZW52ID0geHN0cmR1cF9vcl9udWxsKGdldGVudihJTkRFWF9FTlZJUk9OTUVOVCkpOworCXNldGVudihJTkRFWF9FTlZJUk9OTUVOVCwgdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGUsIDEpOworCisJcmV0ID0gcnVuX2FkZF9pbnRlcmFjdGl2ZShOVUxMLCAiLS1wYXRjaD1zdGFzaCIsIHBzKTsKKworCXRoZV9yZXBvc2l0b3J5LT5pbmRleF9maWxlID0gb2xkX3JlcG9faW5kZXhfZmlsZTsKKwlpZiAob2xkX2luZGV4X2VudiAmJiAqb2xkX2luZGV4X2VudikKKwkJc2V0ZW52KElOREVYX0VOVklST05NRU5ULCBvbGRfaW5kZXhfZW52LCAxKTsKKwllbHNlCisJCXVuc2V0ZW52KElOREVYX0VOVklST05NRU5UKTsKKwlGUkVFX0FORF9OVUxMKG9sZF9pbmRleF9lbnYpOworCisJLyogU3RhdGUgb2YgdGhlIHdvcmtpbmcgdHJlZS4gKi8KKwlpZiAod3JpdGVfaW5kZXhfYXNfdHJlZSgmaW5mby0+d190cmVlLCAmaXN0YXRlLCBzdGFzaF9pbmRleF9wYXRoLmJ1ZiwgMCwKKwkJCQlOVUxMKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWNwX2RpZmZfdHJlZS5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcF9kaWZmX3RyZWUuYXJncywgImRpZmYtdHJlZSIsICItcCIsICJIRUFEIiwKKwkJCSBvaWRfdG9faGV4KCZpbmZvLT53X3RyZWUpLCAiLS0iLCBOVUxMKTsKKwlpZiAocGlwZV9jb21tYW5kKCZjcF9kaWZmX3RyZWUsIE5VTEwsIDAsIG91dF9wYXRjaCwgMCwgTlVMTCwgMCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIW91dF9wYXRjaC0+bGVuKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiTm8gY2hhbmdlcyBzZWxlY3RlZCIpKTsKKwkJcmV0ID0gMTsKKwl9CisKK2RvbmU6CisJZGlzY2FyZF9pbmRleCgmaXN0YXRlKTsKKwlyZW1vdmVfcGF0aChzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdGFzaF93b3JraW5nX3RyZWUoc3RydWN0IHN0YXNoX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF91cGRfaW5kZXggPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBkaWZmX291dHB1dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBpbmRleF9zdGF0ZSBpc3RhdGUgPSB7IE5VTEwgfTsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCWNvcHlfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhLCBwcyk7CisKKwlzZXRfYWx0ZXJuYXRlX2luZGV4X291dHB1dChzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CisJaWYgKHJlc2V0X3RyZWUoJmluZm8tPmlfdHJlZSwgMCwgMCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisJc2V0X2FsdGVybmF0ZV9pbmRleF9vdXRwdXQoTlVMTCk7CisKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gYWRkX2RpZmZfdG9fYnVmOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gJmRpZmZfb3V0cHV0OworCisJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmcmV2LmRpZmZvcHQucGF0aHNwZWMpIDwgMCkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2LCBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZpbmZvLT5iX2NvbW1pdCksCisJCQkgICAiIik7CisJaWYgKHJ1bl9kaWZmX2luZGV4KCZyZXYsIDApKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJY3BfdXBkX2luZGV4LmdpdF9jbWQgPSAxOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwX3VwZF9pbmRleC5hcmdzLCAidXBkYXRlLWluZGV4IiwKKwkJCSAiLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIiwKKwkJCSAiLXoiLCAiLS1hZGQiLCAiLS1yZW1vdmUiLCAiLS1zdGRpbiIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwX3VwZF9pbmRleC5lbnZfYXJyYXksICJHSVRfSU5ERVhfRklMRT0lcyIsCisJCQkgc3Rhc2hfaW5kZXhfcGF0aC5idWYpOworCisJaWYgKHBpcGVfY29tbWFuZCgmY3BfdXBkX2luZGV4LCBkaWZmX291dHB1dC5idWYsIGRpZmZfb3V0cHV0LmxlbiwKKwkJCSBOVUxMLCAwLCBOVUxMLCAwKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWlmICh3cml0ZV9pbmRleF9hc190cmVlKCZpbmZvLT53X3RyZWUsICZpc3RhdGUsIHN0YXNoX2luZGV4X3BhdGguYnVmLCAwLAorCQkJCU5VTEwpKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCitkb25lOgorCWRpc2NhcmRfaW5kZXgoJmlzdGF0ZSk7CisJVU5MRUFLKHJldik7CisJb2JqZWN0X2FycmF5X2NsZWFyKCZyZXYucGVuZGluZyk7CisJY2xlYXJfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhKTsKKwlzdHJidWZfcmVsZWFzZSgmZGlmZl9vdXRwdXQpOworCXJlbW92ZV9wYXRoKHN0YXNoX2luZGV4X3BhdGguYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRvX2NyZWF0ZV9zdGFzaChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLCBzdHJ1Y3Qgc3RyYnVmICpzdGFzaF9tc2dfYnVmLAorCQkJICAgaW50IGluY2x1ZGVfdW50cmFja2VkLCBpbnQgcGF0Y2hfbW9kZSwKKwkJCSAgIHN0cnVjdCBzdGFzaF9pbmZvICppbmZvLCBzdHJ1Y3Qgc3RyYnVmICpwYXRjaCwKKwkJCSAgIGludCBxdWlldCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZmxhZ3MgPSAwOworCWludCB1bnRyYWNrZWRfY29tbWl0X29wdGlvbiA9IDA7CisJY29uc3QgY2hhciAqaGVhZF9zaG9ydF9zaGExID0gTlVMTDsKKwljb25zdCBjaGFyICpicmFuY2hfcmVmID0gTlVMTDsKKwljb25zdCBjaGFyICpicmFuY2hfbmFtZSA9ICIobm8gYnJhbmNoKSI7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdF90cmVlX2xhYmVsID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB1bnRyYWNrZWRfZmlsZXMgPSBTVFJCVUZfSU5JVDsKKworCXByZXBhcmVfZmFsbGJhY2tfaWRlbnQoImdpdCBzdGFzaCIsICJnaXRAc3Rhc2giKTsKKworCXJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKTsKKwlpZiAocmVmcmVzaF9hbmRfd3JpdGVfY2FjaGUoUkVGUkVTSF9RVUlFVCwgMCwgMCkgPCAwKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmaW5mby0+Yl9jb21taXQpKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiWW91IGRvIG5vdCBoYXZlICIKKwkJCQkJICAgICAidGhlIGluaXRpYWwgY29tbWl0IHlldCIpKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksICZpbmZvLT5iX2NvbW1pdCk7CisJfQorCisJaWYgKCFjaGVja19jaGFuZ2VzKHBzLCBpbmNsdWRlX3VudHJhY2tlZCwgJnVudHJhY2tlZF9maWxlcykpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBkb25lOworCX0KKworCWJyYW5jaF9yZWYgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCAmZmxhZ3MpOworCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKKwkJYnJhbmNoX25hbWUgPSBzdHJyY2hyKGJyYW5jaF9yZWYsICcvJykgKyAxOworCWhlYWRfc2hvcnRfc2hhMSA9IGZpbmRfdW5pcXVlX2FiYnJldigmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCSAgICAgREVGQVVMVF9BQkJSRVYpOworCXN0cmJ1Zl9hZGRmKCZtc2csICIlczogJXMgIiwgYnJhbmNoX25hbWUsIGhlYWRfc2hvcnRfc2hhMSk7CisJcHBfY29tbWl0X2Vhc3koQ01JVF9GTVRfT05FTElORSwgaGVhZF9jb21taXQsICZtc2cpOworCisJc3RyYnVmX2FkZGYoJmNvbW1pdF90cmVlX2xhYmVsLCAiaW5kZXggb24gJXNcbiIsIG1zZy5idWYpOworCWNvbW1pdF9saXN0X2luc2VydChoZWFkX2NvbW1pdCwgJnBhcmVudHMpOworCWlmICh3cml0ZV9jYWNoZV9hc190cmVlKCZpbmZvLT5pX3RyZWUsIDAsIE5VTEwpIHx8CisJICAgIGNvbW1pdF90cmVlKGNvbW1pdF90cmVlX2xhYmVsLmJ1ZiwgY29tbWl0X3RyZWVfbGFiZWwubGVuLAorCQkJJmluZm8tPmlfdHJlZSwgcGFyZW50cywgJmluZm8tPmlfY29tbWl0LCBOVUxMLCBOVUxMKSkgeworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50ICIKKwkJCQkJICAgICAiaW5kZXggc3RhdGUiKSk7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGluY2x1ZGVfdW50cmFja2VkKSB7CisJCWlmIChzYXZlX3VudHJhY2tlZF9maWxlcyhpbmZvLCAmbXNnLCB1bnRyYWNrZWRfZmlsZXMpKSB7CisJCQlpZiAoIXF1aWV0KQorCQkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDYW5ub3Qgc2F2ZSAiCisJCQkJCQkgICAgICJ0aGUgdW50cmFja2VkIGZpbGVzIikpOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJdW50cmFja2VkX2NvbW1pdF9vcHRpb24gPSAxOworCX0KKwlpZiAocGF0Y2hfbW9kZSkgeworCQlyZXQgPSBzdGFzaF9wYXRjaChpbmZvLCBwcywgcGF0Y2gsIHF1aWV0KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50ICIKKwkJCQkJCSAgICAgIndvcmt0cmVlIHN0YXRlIikpOworCQkJZ290byBkb25lOworCQl9IGVsc2UgaWYgKHJldCA+IDApIHsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChzdGFzaF93b3JraW5nX3RyZWUoaW5mbywgcHMpKSB7CisJCQlpZiAoIXF1aWV0KQorCQkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCAiCisJCQkJCQkgICAgICJ3b3JrdHJlZSBzdGF0ZSIpKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJaWYgKCFzdGFzaF9tc2dfYnVmLT5sZW4pCisJCXN0cmJ1Zl9hZGRmKHN0YXNoX21zZ19idWYsICJXSVAgb24gJXMiLCBtc2cuYnVmKTsKKwllbHNlCisJCXN0cmJ1Zl9pbnNlcnRmKHN0YXNoX21zZ19idWYsIDAsICJPbiAlczogIiwgYnJhbmNoX25hbWUpOworCisJLyoKKwkgKiBgcGFyZW50c2Agd2lsbCBiZSBlbXB0eSBhZnRlciBjYWxsaW5nIGBjb21taXRfdHJlZSgpYCwgc28gdGhlcmUgaXMKKwkgKiBubyBuZWVkIHRvIGNhbGwgYGZyZWVfY29tbWl0X2xpc3QoKWAKKwkgKi8KKwlwYXJlbnRzID0gTlVMTDsKKwlpZiAodW50cmFja2VkX2NvbW1pdF9vcHRpb24pCisJCWNvbW1pdF9saXN0X2luc2VydChsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICZpbmZvLT51X2NvbW1pdCksCisJCQkJICAgJnBhcmVudHMpOworCWNvbW1pdF9saXN0X2luc2VydChsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmaW5mby0+aV9jb21taXQpLAorCQkJICAgJnBhcmVudHMpOworCWNvbW1pdF9saXN0X2luc2VydChoZWFkX2NvbW1pdCwgJnBhcmVudHMpOworCisJaWYgKGNvbW1pdF90cmVlKHN0YXNoX21zZ19idWYtPmJ1Ziwgc3Rhc2hfbXNnX2J1Zi0+bGVuLCAmaW5mby0+d190cmVlLAorCQkJcGFyZW50cywgJmluZm8tPndfY29tbWl0LCBOVUxMLCBOVUxMKSkgeworCQlpZiAoIXF1aWV0KQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbm5vdCByZWNvcmQgIgorCQkJCQkgICAgICJ3b3JraW5nIHRyZWUgc3RhdGUiKSk7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCitkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZjb21taXRfdHJlZV9sYWJlbCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJc3RyYnVmX3JlbGVhc2UoJnVudHJhY2tlZF9maWxlcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjcmVhdGVfc3Rhc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzdGFzaF9tc2dfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0YXNoX2luZm8gaW5mbzsKKwlzdHJ1Y3QgcGF0aHNwZWMgcHM7CisKKwkvKiBTdGFydGluZyB3aXRoIGFyZ3ZbMV0sIHNpbmNlIGFyZ3ZbMF0gaXMgImNyZWF0ZSIgKi8KKwlzdHJidWZfam9pbl9hcmd2KCZzdGFzaF9tc2dfYnVmLCBhcmdjIC0gMSwgKythcmd2LCAnICcpOworCisJbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisJaWYgKCFjaGVja19jaGFuZ2VzX3RyYWNrZWRfZmlsZXMoJnBzKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkb19jcmVhdGVfc3Rhc2goJnBzLCAmc3Rhc2hfbXNnX2J1ZiwgMCwgMCwgJmluZm8sCisJCQkgICAgICBOVUxMLCAwKTsKKwlpZiAoIXJldCkKKwkJcHJpbnRmX2xuKCIlcyIsIG9pZF90b19oZXgoJmluZm8ud19jb21taXQpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzdGFzaF9tc2dfYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRvX3B1c2hfc3Rhc2goY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywgY29uc3QgY2hhciAqc3Rhc2hfbXNnLCBpbnQgcXVpZXQsCisJCQkgaW50IGtlZXBfaW5kZXgsIGludCBwYXRjaF9tb2RlLCBpbnQgaW5jbHVkZV91bnRyYWNrZWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0YXNoX2luZm8gaW5mbzsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGNoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzdGFzaF9tc2dfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB1bnRyYWNrZWRfZmlsZXMgPSBTVFJCVUZfSU5JVDsKKworCWlmIChwYXRjaF9tb2RlICYmIGtlZXBfaW5kZXggPT0gLTEpCisJCWtlZXBfaW5kZXggPSAxOworCisJaWYgKHBhdGNoX21vZGUgJiYgaW5jbHVkZV91bnRyYWNrZWQpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIgorCQkJCSAgICAgIiBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIikpOworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCXJlYWRfY2FjaGVfcHJlbG9hZChOVUxMKTsKKwlpZiAoIWluY2x1ZGVfdW50cmFja2VkICYmIHBzLT5ucikgeworCQlpbnQgaTsKKwkJY2hhciAqcHNfbWF0Y2hlZCA9IHhjYWxsb2MocHMtPm5yLCAxKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspCisJCQljZV9wYXRoX21hdGNoKCZ0aGVfaW5kZXgsIGFjdGl2ZV9jYWNoZVtpXSwgcHMsCisJCQkJICAgICAgcHNfbWF0Y2hlZCk7CisKKwkJaWYgKHJlcG9ydF9wYXRoX2Vycm9yKHBzX21hdGNoZWQsIHBzKSkgeworCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz8iKSk7CisJCQlyZXQgPSAtMTsKKwkJCWZyZWUocHNfbWF0Y2hlZCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJZnJlZShwc19tYXRjaGVkKTsKKwl9CisKKwlpZiAocmVmcmVzaF9hbmRfd3JpdGVfY2FjaGUoUkVGUkVTSF9RVUlFVCwgMCwgMCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIWNoZWNrX2NoYW5nZXMocHMsIGluY2x1ZGVfdW50cmFja2VkLCAmdW50cmFja2VkX2ZpbGVzKSkgeworCQlpZiAoIXF1aWV0KQorCQkJcHJpbnRmX2xuKF8oIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIpKTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghcmVmbG9nX2V4aXN0cyhyZWZfc3Rhc2gpICYmIGRvX2NsZWFyX3N0YXNoKCkpIHsKKwkJcmV0ID0gLTE7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giKSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoc3Rhc2hfbXNnKQorCQlzdHJidWZfYWRkc3RyKCZzdGFzaF9tc2dfYnVmLCBzdGFzaF9tc2cpOworCWlmIChkb19jcmVhdGVfc3Rhc2gocHMsICZzdGFzaF9tc2dfYnVmLCBpbmNsdWRlX3VudHJhY2tlZCwgcGF0Y2hfbW9kZSwKKwkJCSAgICAmaW5mbywgJnBhdGNoLCBxdWlldCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoZG9fc3RvcmVfc3Rhc2goJmluZm8ud19jb21taXQsIHN0YXNoX21zZ19idWYuYnVmLCAxKSkgeworCQlyZXQgPSAtMTsKKwkJaWYgKCFxdWlldCkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIXF1aWV0KQorCQlwcmludGZfbG4oXygiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIiksCisJCQkgIHN0YXNoX21zZ19idWYuYnVmKTsKKworCWlmICghcGF0Y2hfbW9kZSkgeworCQlpZiAoaW5jbHVkZV91bnRyYWNrZWQgJiYgIXBzLT5ucikgeworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJCWNwLmdpdF9jbWQgPSAxOworCQkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgImNsZWFuIiwgIi0tZm9yY2UiLAorCQkJCQkgIi0tcXVpZXQiLCAiLWQiLCBOVUxMKTsKKwkJCWlmIChpbmNsdWRlX3VudHJhY2tlZCA9PSBJTkNMVURFX0FMTF9GSUxFUykKKwkJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICIteCIpOworCQkJaWYgKHJ1bl9jb21tYW5kKCZjcCkpIHsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0KKwkJZGlzY2FyZF9jYWNoZSgpOworCQlpZiAocHMtPm5yKSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF9hZGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcF9kaWZmID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3BfYXBwbHkgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCQlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCisJCQljcF9hZGQuZ2l0X2NtZCA9IDE7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwX2FkZC5hcmdzLCAiYWRkIik7CisJCQlpZiAoIWluY2x1ZGVfdW50cmFja2VkKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3BfYWRkLmFyZ3MsICItdSIpOworCQkJaWYgKGluY2x1ZGVfdW50cmFja2VkID09IElOQ0xVREVfQUxMX0ZJTEVTKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3BfYWRkLmFyZ3MsICItLWZvcmNlIik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwX2FkZC5hcmdzLCAiLS0iKTsKKwkJCWFkZF9wYXRoc3BlY3MoJmNwX2FkZC5hcmdzLCBwcyk7CisJCQlpZiAocnVuX2NvbW1hbmQoJmNwX2FkZCkpIHsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCWNwX2RpZmYuZ2l0X2NtZCA9IDE7CisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcF9kaWZmLmFyZ3MsICJkaWZmLWluZGV4IiwgIi1wIiwKKwkJCQkJICItLWNhY2hlZCIsICItLWJpbmFyeSIsICJIRUFEIiwgIi0tIiwKKwkJCQkJIE5VTEwpOworCQkJYWRkX3BhdGhzcGVjcygmY3BfZGlmZi5hcmdzLCBwcyk7CisJCQlpZiAocGlwZV9jb21tYW5kKCZjcF9kaWZmLCBOVUxMLCAwLCAmb3V0LCAwLCBOVUxMLCAwKSkgeworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJY3BfYXBwbHkuZ2l0X2NtZCA9IDE7CisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcF9hcHBseS5hcmdzLCAiYXBwbHkiLCAiLS1pbmRleCIsCisJCQkJCSAiLVIiLCBOVUxMKTsKKwkJCWlmIChwaXBlX2NvbW1hbmQoJmNwX2FwcGx5LCBvdXQuYnVmLCBvdXQubGVuLCBOVUxMLCAwLAorCQkJCQkgTlVMTCwgMCkpIHsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJCWNwLmdpdF9jbWQgPSAxOworCQkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInJlc2V0IiwgIi0taGFyZCIsICItcSIsCisJCQkJCSAiLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMiLCBOVUxMKTsKKwkJCWlmIChydW5fY29tbWFuZCgmY3ApKSB7CisJCQkJcmV0ID0gLTE7CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisKKwkJaWYgKGtlZXBfaW5kZXggPT0gMSAmJiAhaXNfbnVsbF9vaWQoJmluZm8uaV90cmVlKSkgeworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJCWNwLmdpdF9jbWQgPSAxOworCQkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgImNoZWNrb3V0IiwgIi0tbm8tb3ZlcmxheSIsCisJCQkJCSBvaWRfdG9faGV4KCZpbmZvLmlfdHJlZSksICItLSIsIE5VTEwpOworCQkJaWYgKCFwcy0+bnIpCisJCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiOi8iKTsKKwkJCWVsc2UKKwkJCQlhZGRfcGF0aHNwZWNzKCZjcC5hcmdzLCBwcyk7CisJCQlpZiAocnVuX2NvbW1hbmQoJmNwKSkgeworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCQlnb3RvIGRvbmU7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJhcHBseSIsICItUiIsIE5VTEwpOworCisJCWlmIChwaXBlX2NvbW1hbmQoJmNwLCBwYXRjaC5idWYsIHBhdGNoLmxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNhbm5vdCByZW1vdmUgIgorCQkJCQkJICAgICAid29ya3RyZWUgY2hhbmdlcyIpKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKGtlZXBfaW5kZXggPCAxKSB7CisJCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQkJY3AuZ2l0X2NtZCA9IDE7CisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAicmVzZXQiLCAiLXEiLCAiLS0iLCBOVUxMKTsKKwkJCWFkZF9wYXRoc3BlY3MoJmNwLmFyZ3MsIHBzKTsKKwkJCWlmIChydW5fY29tbWFuZCgmY3ApKSB7CisJCQkJcmV0ID0gLTE7CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnN0YXNoX21zZ19idWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICAgaW50IHB1c2hfYXNzdW1lZCkKK3sKKwlpbnQgZm9yY2VfYXNzdW1lID0gMDsKKwlpbnQga2VlcF9pbmRleCA9IC0xOworCWludCBwYXRjaF9tb2RlID0gMDsKKwlpbnQgaW5jbHVkZV91bnRyYWNrZWQgPSAwOworCWludCBxdWlldCA9IDA7CisJaW50IHBhdGhzcGVjX2ZpbGVfbnVsID0gMDsKKwljb25zdCBjaGFyICpzdGFzaF9tc2cgPSBOVUxMOworCWNvbnN0IGNoYXIgKnBhdGhzcGVjX2Zyb21fZmlsZSA9IE5VTEw7CisJc3RydWN0IHBhdGhzcGVjIHBzOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnaycsICJrZWVwLWluZGV4IiwgJmtlZXBfaW5kZXgsCisJCQkgTl8oImtlZXAgaW5kZXgiKSksCisJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX21vZGUsCisJCQkgTl8oInN0YXNoIGluIHBhdGNoIG1vZGUiKSksCisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygicXVpZXQgbW9kZSIpKSwKKwkJT1BUX0JPT0woJ3UnLCAiaW5jbHVkZS11bnRyYWNrZWQiLCAmaW5jbHVkZV91bnRyYWNrZWQsCisJCQkgTl8oImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIikpLAorCQlPUFRfU0VUX0lOVCgnYScsICJhbGwiLCAmaW5jbHVkZV91bnRyYWNrZWQsCisJCQkgICAgTl8oImluY2x1ZGUgaWdub3JlIGZpbGVzIiksIDIpLAorCQlPUFRfU1RSSU5HKCdtJywgIm1lc3NhZ2UiLCAmc3Rhc2hfbXNnLCBOXygibWVzc2FnZSIpLAorCQkJICAgTl8oInN0YXNoIG1lc3NhZ2UiKSksCisJCU9QVF9QQVRIU1BFQ19GUk9NX0ZJTEUoJnBhdGhzcGVjX2Zyb21fZmlsZSksCisJCU9QVF9QQVRIU1BFQ19GSUxFX05VTCgmcGF0aHNwZWNfZmlsZV9udWwpLAorCQlPUFRfRU5EKCkKKwl9OworCisJaWYgKGFyZ2MpIHsKKwkJZm9yY2VfYXNzdW1lID0gIXN0cmNtcChhcmd2WzBdLCAiLXAiKTsKKwkJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJCSAgICAgZ2l0X3N0YXNoX3B1c2hfdXNhZ2UsCisJCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisJfQorCisJaWYgKGFyZ2MpIHsKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgIi0tIikpIHsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJfSBlbHNlIGlmIChwdXNoX2Fzc3VtZWQgJiYgIWZvcmNlX2Fzc3VtZSkgeworCQkJZGllKCJzdWJjb21tYW5kIHdhc24ndCBzcGVjaWZpZWQ7ICdwdXNoJyBjYW4ndCBiZSBhc3N1bWVkIGR1ZSB0byB1bmV4cGVjdGVkIHRva2VuICclcyciLAorCQkJICAgIGFyZ3ZbMF0pOworCQl9CisJfQorCisJcGFyc2VfcGF0aHNwZWMoJnBzLCAwLCBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8IFBBVEhTUEVDX1BSRUZJWF9PUklHSU4sCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJaWYgKHBhdGhzcGVjX2Zyb21fZmlsZSkgeworCQlpZiAocGF0Y2hfbW9kZSkKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIikpOworCisJCWlmIChwcy5ucikKKwkJCWRpZShfKCItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiKSk7CisKKwkJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcHMsIDAsCisJCQkJICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwgUEFUSFNQRUNfUFJFRklYX09SSUdJTiwKKwkJCQkgICAgcHJlZml4LCBwYXRoc3BlY19mcm9tX2ZpbGUsIHBhdGhzcGVjX2ZpbGVfbnVsKTsKKwl9IGVsc2UgaWYgKHBhdGhzcGVjX2ZpbGVfbnVsKSB7CisJCWRpZShfKCItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIikpOworCX0KKworCXJldHVybiBkb19wdXNoX3N0YXNoKCZwcywgc3Rhc2hfbXNnLCBxdWlldCwga2VlcF9pbmRleCwgcGF0Y2hfbW9kZSwKKwkJCSAgICAgaW5jbHVkZV91bnRyYWNrZWQpOworfQorCitzdGF0aWMgaW50IHNhdmVfc3Rhc2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGtlZXBfaW5kZXggPSAtMTsKKwlpbnQgcGF0Y2hfbW9kZSA9IDA7CisJaW50IGluY2x1ZGVfdW50cmFja2VkID0gMDsKKwlpbnQgcXVpZXQgPSAwOworCWludCByZXQgPSAwOworCWNvbnN0IGNoYXIgKnN0YXNoX21zZyA9IE5VTEw7CisJc3RydWN0IHBhdGhzcGVjIHBzOworCXN0cnVjdCBzdHJidWYgc3Rhc2hfbXNnX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnaycsICJrZWVwLWluZGV4IiwgJmtlZXBfaW5kZXgsCisJCQkgTl8oImtlZXAgaW5kZXgiKSksCisJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX21vZGUsCisJCQkgTl8oInN0YXNoIGluIHBhdGNoIG1vZGUiKSksCisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygicXVpZXQgbW9kZSIpKSwKKwkJT1BUX0JPT0woJ3UnLCAiaW5jbHVkZS11bnRyYWNrZWQiLCAmaW5jbHVkZV91bnRyYWNrZWQsCisJCQkgTl8oImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIikpLAorCQlPUFRfU0VUX0lOVCgnYScsICJhbGwiLCAmaW5jbHVkZV91bnRyYWNrZWQsCisJCQkgICAgTl8oImluY2x1ZGUgaWdub3JlIGZpbGVzIiksIDIpLAorCQlPUFRfU1RSSU5HKCdtJywgIm1lc3NhZ2UiLCAmc3Rhc2hfbXNnLCAibWVzc2FnZSIsCisJCQkgICBOXygic3Rhc2ggbWVzc2FnZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N0YXNoX3NhdmVfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKworCWlmIChhcmdjKQorCQlzdGFzaF9tc2cgPSBzdHJidWZfam9pbl9hcmd2KCZzdGFzaF9tc2dfYnVmLCBhcmdjLCBhcmd2LCAnICcpOworCisJbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisJcmV0ID0gZG9fcHVzaF9zdGFzaCgmcHMsIHN0YXNoX21zZywgcXVpZXQsIGtlZXBfaW5kZXgsCisJCQkgICAgcGF0Y2hfbW9kZSwgaW5jbHVkZV91bnRyYWNrZWQpOworCisJc3RyYnVmX3JlbGVhc2UoJnN0YXNoX21zZ19idWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXNlX2J1aWx0aW5fc3Rhc2godm9pZCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCWludCByZXQsIGVudiA9IGdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfU1RBU0hfVVNFX0JVSUxUSU4iLCAtMSk7CisKKwlpZiAoZW52ICE9IC0xKQorCQlyZXR1cm4gZW52OworCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywKKwkJCSAiY29uZmlnIiwgIi0tYm9vbCIsICJzdGFzaC51c2VidWlsdGluIiwgTlVMTCk7CisJY3AuZ2l0X2NtZCA9IDE7CisJaWYgKGNhcHR1cmVfY29tbWFuZCgmY3AsICZvdXQsIDYpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzdHJidWZfdHJpbSgmb3V0KTsKKwlyZXQgPSAhc3RyY21wKCJ0cnVlIiwgb3V0LmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9zdGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlwaWRfdCBwaWQgPSBnZXRwaWQoKTsKKwljb25zdCBjaGFyICppbmRleF9maWxlOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWlmICghdXNlX2J1aWx0aW5fc3Rhc2goKSkgeworCQljb25zdCBjaGFyICpwYXRoID0gbWtwYXRoKCIlcy9naXQtbGVnYWN5LXN0YXNoIiwKKwkJCQkJICBnaXRfZXhlY19wYXRoKCkpOworCisJCWlmIChzYW5lX2V4ZWN2cChwYXRoLCAoY2hhciAqKilhcmd2KSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGV4ZWMgJXMiKSwgcGF0aCk7CisJCWVsc2UKKwkJCUJVRygic2FuZV9leGVjdnAoKSByZXR1cm5lZD8/PyIpOworCX0KKworCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwl0cmFjZV9yZXBvX3NldHVwKHByZWZpeCk7CisJc2V0dXBfd29ya190cmVlKCk7CisKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9zdGFzaF91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiB8IFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKworCWluZGV4X2ZpbGUgPSBnZXRfaW5kZXhfZmlsZSgpOworCXN0cmJ1Zl9hZGRmKCZzdGFzaF9pbmRleF9wYXRoLCAiJXMuc3Rhc2guJSIgUFJJdU1BWCwgaW5kZXhfZmlsZSwKKwkJICAgICh1aW50bWF4X3QpcGlkKTsKKworCWlmICghYXJnYykKKwkJcmV0dXJuICEhcHVzaF9zdGFzaCgwLCBOVUxMLCBwcmVmaXgsIDApOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImFwcGx5IikpCisJCXJldHVybiAhIWFwcGx5X3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiY2xlYXIiKSkKKwkJcmV0dXJuICEhY2xlYXJfc3Rhc2goYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJkcm9wIikpCisJCXJldHVybiAhIWRyb3Bfc3Rhc2goYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJwb3AiKSkKKwkJcmV0dXJuICEhcG9wX3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiYnJhbmNoIikpCisJCXJldHVybiAhIWJyYW5jaF9zdGFzaChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImxpc3QiKSkKKwkJcmV0dXJuICEhbGlzdF9zdGFzaChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNob3ciKSkKKwkJcmV0dXJuICEhc2hvd19zdGFzaChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInN0b3JlIikpCisJCXJldHVybiAhIXN0b3JlX3N0YXNoKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiY3JlYXRlIikpCisJCXJldHVybiAhIWNyZWF0ZV9zdGFzaChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInB1c2giKSkKKwkJcmV0dXJuICEhcHVzaF9zdGFzaChhcmdjLCBhcmd2LCBwcmVmaXgsIDApOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNhdmUiKSkKKwkJcmV0dXJuICEhc2F2ZV9zdGFzaChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCphcmd2WzBdICE9ICctJykKKwkJdXNhZ2VfbXNnX29wdCh4c3RyZm10KF8oInVua25vd24gc3ViY29tbWFuZDogJXMiKSwgYXJndlswXSksCisJCQkgICAgICBnaXRfc3Rhc2hfdXNhZ2UsIG9wdGlvbnMpOworCisJLyogQXNzdW1lICdzdGFzaCBwdXNoJyAqLworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgInB1c2giKTsKKwlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBhcmd2KTsKKwlyZXR1cm4gISFwdXNoX3N0YXNoKGFyZ3MuYXJnYywgYXJncy5hcmd2LCBwcmVmaXgsIDEpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zdHJpcHNwYWNlLmMgYi9idWlsdGluL3N0cmlwc3BhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTMzZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zdHJpcHNwYWNlLmMKQEAgLTAsMCArMSw2NSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIHZvaWQgY29tbWVudF9saW5lcyhzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY2hhciAqbXNnOworCXNpemVfdCBsZW47CisKKwltc2cgPSBzdHJidWZfZGV0YWNoKGJ1ZiwgJmxlbik7CisJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoYnVmLCBtc2csIGxlbik7CisJZnJlZShtc2cpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN0cmlwc3BhY2VfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iKSwKKwlOXygiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIpLAorCU5VTEwKK307CisKK2VudW0gc3RyaXBzcGFjZV9tb2RlIHsKKwlTVFJJUF9ERUZBVUxUID0gMCwKKwlTVFJJUF9DT01NRU5UUywKKwlDT01NRU5UX0xJTkVTCit9OworCitpbnQgY21kX3N0cmlwc3BhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwllbnVtIHN0cmlwc3BhY2VfbW9kZSBtb2RlID0gU1RSSVBfREVGQVVMVDsKKwlpbnQgbm9uZ2l0OworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9DTURNT0RFKCdzJywgInN0cmlwLWNvbW1lbnRzIiwgJm1vZGUsCisJCQkgICAgTl8oInNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciIpLAorCQkJICAgIFNUUklQX0NPTU1FTlRTKSwKKwkJT1BUX0NNRE1PREUoJ2MnLCAiY29tbWVudC1saW5lcyIsICZtb2RlLAorCQkJICAgIE5fKCJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiKSwKKwkJCSAgICBDT01NRU5UX0xJTkVTKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgc3RyaXBzcGFjZV91c2FnZSwgMCk7CisJaWYgKGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdHJpcHNwYWNlX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChtb2RlID09IFNUUklQX0NPTU1FTlRTIHx8IG1vZGUgPT0gQ09NTUVOVF9MSU5FUykgeworCQlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKwkJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCX0KKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAxMDI0KSA8IDApCisJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgdGhlIGlucHV0Iik7CisKKwlpZiAobW9kZSA9PSBTVFJJUF9ERUZBVUxUIHx8IG1vZGUgPT0gU1RSSVBfQ09NTUVOVFMpCisJCXN0cmJ1Zl9zdHJpcHNwYWNlKCZidWYsIG1vZGUgPT0gU1RSSVBfQ09NTUVOVFMpOworCWVsc2UKKwkJY29tbWVudF9saW5lcygmYnVmKTsKKworCXdyaXRlX29yX2RpZSgxLCBidWYuYnVmLCBidWYubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYyBiL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmE2MDhlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jCkBAIC0wLDAgKzEsMjI5OSBAQAorI2RlZmluZSBVU0VfVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImFkdmljZS5oIgorCisjZGVmaW5lIE9QVF9RVUlFVCAoMSA8PCAwKQorI2RlZmluZSBPUFRfQ0FDSEVEICgxIDw8IDEpCisjZGVmaW5lIE9QVF9SRUNVUlNJVkUgKDEgPDwgMikKKyNkZWZpbmUgT1BUX0ZPUkNFICgxIDw8IDMpCisKK3R5cGVkZWYgdm9pZCAoKmVhY2hfc3VibW9kdWxlX2ZuKShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmxpc3RfaXRlbSwKKwkJCQkgIHZvaWQgKmNiX2RhdGEpOworCitzdGF0aWMgY2hhciAqZ2V0X2RlZmF1bHRfcmVtb3RlKHZvaWQpCit7CisJY2hhciAqZGVzdCA9IE5VTEwsICpyZXQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCBOVUxMKTsKKworCWlmICghcmVmbmFtZSkKKwkJZGllKF8oIk5vIHN1Y2ggcmVmOiAlcyIpLCAiSEVBRCIpOworCisJLyogZGV0YWNoZWQgSEVBRCAqLworCWlmICghc3RyY21wKHJlZm5hbWUsICJIRUFEIikpCisJCXJldHVybiB4c3RyZHVwKCJvcmlnaW4iKTsKKworCWlmICghc2tpcF9wcmVmaXgocmVmbmFtZSwgInJlZnMvaGVhZHMvIiwgJnJlZm5hbWUpKQorCQlkaWUoXygiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIiksIHJlZm5hbWUpOworCisJc3RyYnVmX2FkZGYoJnNiLCAiYnJhbmNoLiVzLnJlbW90ZSIsIHJlZm5hbWUpOworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoc2IuYnVmLCAmZGVzdCkpCisJCXJldCA9IHhzdHJkdXAoIm9yaWdpbiIpOworCWVsc2UKKwkJcmV0ID0gZGVzdDsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwcmludF9kZWZhdWx0X3JlbW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljaGFyICpyZW1vdGU7CisKKwlpZiAoYXJnYyAhPSAxKQorCQlkaWUoXygic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIikpOworCisJcmVtb3RlID0gZ2V0X2RlZmF1bHRfcmVtb3RlKCk7CisJaWYgKHJlbW90ZSkKKwkJcHJpbnRmKCIlc1xuIiwgcmVtb3RlKTsKKworCWZyZWUocmVtb3RlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGFydHNfd2l0aF9kb3Rfc2xhc2goY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiBzdHJbMF0gPT0gJy4nICYmIGlzX2Rpcl9zZXAoc3RyWzFdKTsKK30KKworc3RhdGljIGludCBzdGFydHNfd2l0aF9kb3RfZG90X3NsYXNoKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc3RyWzBdID09ICcuJyAmJiBzdHJbMV0gPT0gJy4nICYmIGlzX2Rpcl9zZXAoc3RyWzJdKTsKK30KKworLyoKKyAqIFJldHVybnMgMSBpZiBpdCB3YXMgdGhlIGxhc3QgY2hvcCBiZWZvcmUgJzonLgorICovCitzdGF0aWMgaW50IGNob3BfbGFzdF9kaXIoY2hhciAqKnJlbW90ZXVybCwgaW50IGlzX3JlbGF0aXZlKQoreworCWNoYXIgKnJmaW5kID0gZmluZF9sYXN0X2Rpcl9zZXAoKnJlbW90ZXVybCk7CisJaWYgKHJmaW5kKSB7CisJCSpyZmluZCA9ICdcMCc7CisJCXJldHVybiAwOworCX0KKworCXJmaW5kID0gc3RycmNocigqcmVtb3RldXJsLCAnOicpOworCWlmIChyZmluZCkgeworCQkqcmZpbmQgPSAnXDAnOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoaXNfcmVsYXRpdmUgfHwgIXN0cmNtcCgiLiIsICpyZW1vdGV1cmwpKQorCQlkaWUoXygiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIiksCisJCQkqcmVtb3RldXJsKTsKKworCWZyZWUoKnJlbW90ZXVybCk7CisJKnJlbW90ZXVybCA9IHhzdHJkdXAoIi4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBgdXJsYCBhcmd1bWVudCBpcyB0aGUgVVJMIHRoYXQgbmF2aWdhdGVzIHRvIHRoZSBzdWJtb2R1bGUgb3JpZ2luCisgKiByZXBvLiBXaGVuIHJlbGF0aXZlLCB0aGlzIFVSTCBpcyByZWxhdGl2ZSB0byB0aGUgc3VwZXJwcm9qZWN0IG9yaWdpbgorICogVVJMIHJlcG8uIFRoZSBgdXBfcGF0aGAgYXJndW1lbnQsIGlmIHNwZWNpZmllZCwgaXMgdGhlIHJlbGF0aXZlCisgKiBwYXRoIHRoYXQgbmF2aWdhdGVzIGZyb20gdGhlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWUgdG8gdGhlIHN1cGVycHJvamVjdAorICogd29ya2luZyB0cmVlLiBSZXR1cm5zIHRoZSBvcmlnaW4gVVJMIG9mIHRoZSBzdWJtb2R1bGUuCisgKgorICogUmV0dXJuIGVpdGhlciBhbiBhYnNvbHV0ZSBVUkwgb3IgZmlsZXN5c3RlbSBwYXRoIChpZiB0aGUgc3VwZXJwcm9qZWN0CisgKiBvcmlnaW4gVVJMIGlzIGFuIGFic29sdXRlIFVSTCBvciBmaWxlc3lzdGVtIHBhdGgsIHJlc3BlY3RpdmVseSkgb3IgYQorICogcmVsYXRpdmUgZmlsZSBzeXN0ZW0gcGF0aCAoaWYgdGhlIHN1cGVycHJvamVjdCBvcmlnaW4gVVJMIGlzIGEgcmVsYXRpdmUKKyAqIGZpbGUgc3lzdGVtIHBhdGgpLgorICoKKyAqIFdoZW4gdGhlIG91dHB1dCBpcyBhIHJlbGF0aXZlIGZpbGUgc3lzdGVtIHBhdGgsIHRoZSBwYXRoIGlzIGVpdGhlcgorICogcmVsYXRpdmUgdG8gdGhlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWUsIGlmIHVwX3BhdGggaXMgc3BlY2lmaWVkLCBvciB0bworICogdGhlIHN1cGVycHJvamVjdCB3b3JraW5nIHRyZWUgb3RoZXJ3aXNlLgorICoKKyAqIE5FRURTV09SSzogVGhpcyB3b3JrcyBpbmNvcnJlY3RseSBvbiB0aGUgZG9tYWluIGFuZCBwcm90b2NvbCBwYXJ0LgorICogcmVtb3RlX3VybCAgICAgIHVybCAgICAgICAgICAgICAgb3V0Y29tZSAgICAgICAgICBleHBlY3RhdGlvbgorICogaHR0cDovL2EuY29tL2IgIC4uL2MgICAgICAgICAgICAgaHR0cDovL2EuY29tL2MgICBhcyBpcworICogaHR0cDovL2EuY29tL2IvIC4uL2MgICAgICAgICAgICAgaHR0cDovL2EuY29tL2MgICBzYW1lIGFzIHByZXZpb3VzIGxpbmUsIGJ1dAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgdHJhaWxpbmcgc2xhc2ggaW4gdXJsCisgKiBodHRwOi8vYS5jb20vYiAgLi4vLi4vYyAgICAgICAgICBodHRwOi8vYyAgICAgICAgIGVycm9yIG91dAorICogaHR0cDovL2EuY29tL2IgIC4uLy4uLy4uL2MgICAgICAgaHR0cDovYyAgICAgICAgICBlcnJvciBvdXQKKyAqIGh0dHA6Ly9hLmNvbS9iICAuLi8uLi8uLi8uLi9jICAgIGh0dHA6YyAgICAgICAgICAgZXJyb3Igb3V0CisgKiBodHRwOi8vYS5jb20vYiAgLi4vLi4vLi4vLi4vLi4vYyAgICAuOmMgICAgICAgICAgIGVycm9yIG91dAorICogTkVFRFNXT1JLOiBHaXZlbiBob3cgY2hvcF9sYXN0X2RpcigpIHdvcmtzLCB0aGlzIGZ1bmN0aW9uIGlzIGJyb2tlbgorICogd2hlbiBhIGxvY2FsIHBhcnQgaGFzIGEgY29sb24gaW4gaXRzIHBhdGggY29tcG9uZW50LCB0b28uCisgKi8KK3N0YXRpYyBjaGFyICpyZWxhdGl2ZV91cmwoY29uc3QgY2hhciAqcmVtb3RlX3VybCwKKwkJCQljb25zdCBjaGFyICp1cmwsCisJCQkJY29uc3QgY2hhciAqdXBfcGF0aCkKK3sKKwlpbnQgaXNfcmVsYXRpdmUgPSAwOworCWludCBjb2xvbnNlcCA9IDA7CisJY2hhciAqb3V0OworCWNoYXIgKnJlbW90ZXVybCA9IHhzdHJkdXAocmVtb3RlX3VybCk7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBsZW4gPSBzdHJsZW4ocmVtb3RldXJsKTsKKworCWlmIChpc19kaXJfc2VwKHJlbW90ZXVybFtsZW4tMV0pKQorCQlyZW1vdGV1cmxbbGVuLTFdID0gJ1wwJzsKKworCWlmICghdXJsX2lzX2xvY2FsX25vdF9zc2gocmVtb3RldXJsKSB8fCBpc19hYnNvbHV0ZV9wYXRoKHJlbW90ZXVybCkpCisJCWlzX3JlbGF0aXZlID0gMDsKKwllbHNlIHsKKwkJaXNfcmVsYXRpdmUgPSAxOworCQkvKgorCQkgKiBQcmVwZW5kIGEgJy4vJyB0byBlbnN1cmUgYWxsIHJlbGF0aXZlCisJCSAqIHJlbW90ZXVybHMgc3RhcnQgd2l0aCAnLi8nIG9yICcuLi8nCisJCSAqLworCQlpZiAoIXN0YXJ0c193aXRoX2RvdF9zbGFzaChyZW1vdGV1cmwpICYmCisJCSAgICAhc3RhcnRzX3dpdGhfZG90X2RvdF9zbGFzaChyZW1vdGV1cmwpKSB7CisJCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgIi4vJXMiLCByZW1vdGV1cmwpOworCQkJZnJlZShyZW1vdGV1cmwpOworCQkJcmVtb3RldXJsID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCQl9CisJfQorCS8qCisJICogV2hlbiB0aGUgdXJsIHN0YXJ0cyB3aXRoICcuLi8nLCByZW1vdmUgdGhhdCBhbmQgdGhlCisJICogbGFzdCBkaXJlY3RvcnkgaW4gcmVtb3RldXJsLgorCSAqLworCXdoaWxlICh1cmwpIHsKKwkJaWYgKHN0YXJ0c193aXRoX2RvdF9kb3Rfc2xhc2godXJsKSkgeworCQkJdXJsICs9IDM7CisJCQljb2xvbnNlcCB8PSBjaG9wX2xhc3RfZGlyKCZyZW1vdGV1cmwsIGlzX3JlbGF0aXZlKTsKKwkJfSBlbHNlIGlmIChzdGFydHNfd2l0aF9kb3Rfc2xhc2godXJsKSkKKwkJCXVybCArPSAyOworCQllbHNlCisJCQlicmVhazsKKwl9CisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMlcyVzIiwgcmVtb3RldXJsLCBjb2xvbnNlcCA/ICI6IiA6ICIvIiwgdXJsKTsKKwlpZiAoZW5kc193aXRoKHVybCwgIi8iKSkKKwkJc3RyYnVmX3NldGxlbigmc2IsIHNiLmxlbiAtIDEpOworCWZyZWUocmVtb3RldXJsKTsKKworCWlmIChzdGFydHNfd2l0aF9kb3Rfc2xhc2goc2IuYnVmKSkKKwkJb3V0ID0geHN0cmR1cChzYi5idWYgKyAyKTsKKwllbHNlCisJCW91dCA9IHhzdHJkdXAoc2IuYnVmKTsKKwlzdHJidWZfcmVzZXQoJnNiKTsKKworCWlmICghdXBfcGF0aCB8fCAhaXNfcmVsYXRpdmUpCisJCXJldHVybiBvdXQ7CisKKwlzdHJidWZfYWRkZigmc2IsICIlcyVzIiwgdXBfcGF0aCwgb3V0KTsKKwlmcmVlKG91dCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKK30KKworc3RhdGljIGludCByZXNvbHZlX3JlbGF0aXZlX3VybChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljaGFyICpyZW1vdGV1cmwgPSBOVUxMOworCWNoYXIgKnJlbW90ZSA9IGdldF9kZWZhdWx0X3JlbW90ZSgpOworCWNvbnN0IGNoYXIgKnVwX3BhdGggPSBOVUxMOworCWNoYXIgKnJlczsKKwljb25zdCBjaGFyICp1cmw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJaWYgKGFyZ2MgIT0gMiAmJiBhcmdjICE9IDMpCisJCWRpZSgicmVzb2x2ZS1yZWxhdGl2ZS11cmwgb25seSBhY2NlcHRzIG9uZSBvciB0d28gYXJndW1lbnRzIik7CisKKwl1cmwgPSBhcmd2WzFdOworCXN0cmJ1Zl9hZGRmKCZzYiwgInJlbW90ZS4lcy51cmwiLCByZW1vdGUpOworCWZyZWUocmVtb3RlKTsKKworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoc2IuYnVmLCAmcmVtb3RldXJsKSkKKwkJLyogdGhlIHJlcG9zaXRvcnkgaXMgaXRzIG93biBhdXRob3JpdGF0aXZlIHVwc3RyZWFtICovCisJCXJlbW90ZXVybCA9IHhnZXRjd2QoKTsKKworCWlmIChhcmdjID09IDMpCisJCXVwX3BhdGggPSBhcmd2WzJdOworCisJcmVzID0gcmVsYXRpdmVfdXJsKHJlbW90ZXVybCwgdXJsLCB1cF9wYXRoKTsKKwlwdXRzKHJlcyk7CisJZnJlZShyZXMpOworCWZyZWUocmVtb3RldXJsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNvbHZlX3JlbGF0aXZlX3VybF90ZXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNoYXIgKnJlbW90ZXVybCwgKnJlczsKKwljb25zdCBjaGFyICp1cF9wYXRoLCAqdXJsOworCisJaWYgKGFyZ2MgIT0gNCkKKwkJZGllKCJyZXNvbHZlLXJlbGF0aXZlLXVybC10ZXN0IG9ubHkgYWNjZXB0cyB0aHJlZSBhcmd1bWVudHM6IDx1cF9wYXRoPiA8cmVtb3RldXJsPiA8dXJsPiIpOworCisJdXBfcGF0aCA9IGFyZ3ZbMV07CisJcmVtb3RldXJsID0geHN0cmR1cChhcmd2WzJdKTsKKwl1cmwgPSBhcmd2WzNdOworCisJaWYgKCFzdHJjbXAodXBfcGF0aCwgIihudWxsKSIpKQorCQl1cF9wYXRoID0gTlVMTDsKKworCXJlcyA9IHJlbGF0aXZlX3VybChyZW1vdGV1cmwsIHVybCwgdXBfcGF0aCk7CisJcHV0cyhyZXMpOworCWZyZWUocmVzKTsKKwlmcmVlKHJlbW90ZXVybCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoZSByZXN1bHQgc2hvdWxkIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICovCitzdGF0aWMgY2hhciAqZ2V0X3N1Ym1vZHVsZV9kaXNwbGF5cGF0aChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqc3VwZXJfcHJlZml4ID0gZ2V0X3N1cGVyX3ByZWZpeCgpOworCisJaWYgKHByZWZpeCAmJiBzdXBlcl9wcmVmaXgpIHsKKwkJQlVHKCJjYW5ub3QgaGF2ZSBwcmVmaXggJyVzJyBhbmQgc3VwZXJwcmVmaXggJyVzJyIsCisJCSAgICBwcmVmaXgsIHN1cGVyX3ByZWZpeCk7CisJfSBlbHNlIGlmIChwcmVmaXgpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQljaGFyICpkaXNwbGF5cGF0aCA9IHhzdHJkdXAocmVsYXRpdmVfcGF0aChwYXRoLCBwcmVmaXgsICZzYikpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gZGlzcGxheXBhdGg7CisJfSBlbHNlIGlmIChzdXBlcl9wcmVmaXgpIHsKKwkJcmV0dXJuIHhzdHJmbXQoIiVzJXMiLCBzdXBlcl9wcmVmaXgsIHBhdGgpOworCX0gZWxzZSB7CisJCXJldHVybiB4c3RyZHVwKHBhdGgpOworCX0KK30KKworc3RhdGljIGNoYXIgKmNvbXB1dGVfcmV2X25hbWUoY29uc3QgY2hhciAqc3ViX3BhdGgsIGNvbnN0IGNoYXIqIG9iamVjdF9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqKipkOworCisJc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX2JhcmVbXSA9IHsgTlVMTCB9OworCisJc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX3RhZ3NbXSA9IHsgIi0tdGFncyIsIE5VTEwgfTsKKworCXN0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9jb250YWluc1tdID0geyAiLS1jb250YWlucyIsIE5VTEwgfTsKKworCXN0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9hbGxfYWx3YXlzW10gPSB7ICItLWFsbCIsICItLWFsd2F5cyIsIE5VTEwgfTsKKworCXN0YXRpYyBjb25zdCBjaGFyICoqZGVzY3JpYmVfYXJndltdID0geyBkZXNjcmliZV9iYXJlLCBkZXNjcmliZV90YWdzLAorCQkJCQkJZGVzY3JpYmVfY29udGFpbnMsCisJCQkJCQlkZXNjcmliZV9hbGxfYWx3YXlzLCBOVUxMIH07CisKKwlmb3IgKGQgPSBkZXNjcmliZV9hcmd2OyAqZDsgZCsrKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwkJY3AuZGlyID0gc3ViX3BhdGg7CisJCWNwLmdpdF9jbWQgPSAxOworCQljcC5ub19zdGRlcnIgPSAxOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgImRlc2NyaWJlIik7CisJCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsICpkKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBvYmplY3RfaWQpOworCisJCWlmICghY2FwdHVyZV9jb21tYW5kKCZjcCwgJnNiLCAwKSkgeworCQkJc3RyYnVmX3N0cmlwX3N1ZmZpeCgmc2IsICJcbiIpOworCQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBtb2R1bGVfbGlzdCB7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICoqZW50cmllczsKKwlpbnQgYWxsb2MsIG5yOworfTsKKyNkZWZpbmUgTU9EVUxFX0xJU1RfSU5JVCB7IE5VTEwsIDAsIDAgfQorCitzdGF0aWMgaW50IG1vZHVsZV9saXN0X2NvbXB1dGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgICBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJICAgICAgIHN0cnVjdCBtb2R1bGVfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaSwgcmVzdWx0ID0gMDsKKwljaGFyICpwc19tYXRjaGVkID0gTlVMTDsKKwlwYXJzZV9wYXRoc3BlYyhwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMLAorCQkgICAgICAgcHJlZml4LCBhcmd2KTsKKworCWlmIChwYXRoc3BlYy0+bnIpCisJCXBzX21hdGNoZWQgPSB4Y2FsbG9jKHBhdGhzcGVjLT5uciwgMSk7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCisJCWlmICghbWF0Y2hfcGF0aHNwZWMoJnRoZV9pbmRleCwgcGF0aHNwZWMsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwKKwkJCQkgICAgMCwgcHNfbWF0Y2hlZCwgMSkgfHwKKwkJICAgICFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKworCQlBTExPQ19HUk9XKGxpc3QtPmVudHJpZXMsIGxpc3QtPm5yICsgMSwgbGlzdC0+YWxsb2MpOworCQlsaXN0LT5lbnRyaWVzW2xpc3QtPm5yKytdID0gY2U7CisJCXdoaWxlIChpICsgMSA8IGFjdGl2ZV9uciAmJgorCQkgICAgICAgIXN0cmNtcChjZS0+bmFtZSwgYWN0aXZlX2NhY2hlW2kgKyAxXS0+bmFtZSkpCisJCQkvKgorCQkJICogU2tpcCBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBkaWZmZXJlbnQgc3RhZ2VzCisJCQkgKiB0byBtYWtlIHN1cmUgYW4gZW50cnkgaXMgcmV0dXJuZWQgb25seSBvbmNlLgorCQkJICovCisJCQlpKys7CisJfQorCisJaWYgKHBzX21hdGNoZWQgJiYgcmVwb3J0X3BhdGhfZXJyb3IocHNfbWF0Y2hlZCwgcGF0aHNwZWMpKQorCQlyZXN1bHQgPSAtMTsKKworCWZyZWUocHNfbWF0Y2hlZCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBtb2R1bGVfbGlzdF9hY3RpdmUoc3RydWN0IG1vZHVsZV9saXN0ICpsaXN0KQoreworCWludCBpOworCXN0cnVjdCBtb2R1bGVfbGlzdCBhY3RpdmVfbW9kdWxlcyA9IE1PRFVMRV9MSVNUX0lOSVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gbGlzdC0+ZW50cmllc1tpXTsKKworCQlpZiAoIWlzX3N1Ym1vZHVsZV9hY3RpdmUodGhlX3JlcG9zaXRvcnksIGNlLT5uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCUFMTE9DX0dST1coYWN0aXZlX21vZHVsZXMuZW50cmllcywKKwkJCSAgIGFjdGl2ZV9tb2R1bGVzLm5yICsgMSwKKwkJCSAgIGFjdGl2ZV9tb2R1bGVzLmFsbG9jKTsKKwkJYWN0aXZlX21vZHVsZXMuZW50cmllc1thY3RpdmVfbW9kdWxlcy5ucisrXSA9IGNlOworCX0KKworCWZyZWUobGlzdC0+ZW50cmllcyk7CisJKmxpc3QgPSBhY3RpdmVfbW9kdWxlczsKK30KKworc3RhdGljIGNoYXIgKmdldF91cF9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZm9yIChpID0gY291bnRfc2xhc2hlcyhwYXRoKTsgaTsgaS0tKQorCQlzdHJidWZfYWRkc3RyKCZzYiwgIi4uLyIpOworCisJLyoKKwkgKiBDaGVjayBpZiAncGF0aCcgZW5kcyB3aXRoIHNsYXNoIG9yIG5vdAorCSAqIGZvciBoYXZpbmcgdGhlIHNhbWUgb3V0cHV0IGZvciBkaXIvc3ViX2RpcgorCSAqIGFuZCBkaXIvc3ViX2Rpci8KKwkgKi8KKwlpZiAoIWlzX2Rpcl9zZXAocGF0aFtzdHJsZW4ocGF0aCkgLSAxXSkpCisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiLi4vIik7CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworfQorCitzdGF0aWMgaW50IG1vZHVsZV9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgbW9kdWxlX2xpc3QgbGlzdCA9IE1PRFVMRV9MSVNUX0lOSVQ7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9saXN0X29wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAicHJlZml4IiwgJnByZWZpeCwKKwkJCSAgIE5fKCJwYXRoIiksCisJCQkgICBOXygiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWNvbnN0IGNoYXIgKmNvbnN0IGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX2xpc3Rfb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2UsIDApOworCisJaWYgKG1vZHVsZV9saXN0X2NvbXB1dGUoYXJnYywgYXJndiwgcHJlZml4LCAmcGF0aHNwZWMsICZsaXN0KSA8IDApCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gbGlzdC5lbnRyaWVzW2ldOworCisJCWlmIChjZV9zdGFnZShjZSkpCisJCQlwcmludGYoIiUwNm8gJXMgVVx0IiwgY2UtPmNlX21vZGUsIG9pZF90b19oZXgoJm51bGxfb2lkKSk7CisJCWVsc2UKKwkJCXByaW50ZigiJTA2byAlcyAlZFx0IiwgY2UtPmNlX21vZGUsCisJCQkgICAgICAgb2lkX3RvX2hleCgmY2UtPm9pZCksIGNlX3N0YWdlKGNlKSk7CisKKwkJZnByaW50ZihzdGRvdXQsICIlc1xuIiwgY2UtPm5hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZm9yX2VhY2hfbGlzdGVkX3N1Ym1vZHVsZShjb25zdCBzdHJ1Y3QgbW9kdWxlX2xpc3QgKmxpc3QsCisJCQkJICAgICAgZWFjaF9zdWJtb2R1bGVfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspCisJCWZuKGxpc3QtPmVudHJpZXNbaV0sIGNiX2RhdGEpOworfQorCitzdHJ1Y3QgY2JfZm9yZWFjaCB7CisJaW50IGFyZ2M7CisJY29uc3QgY2hhciAqKmFyZ3Y7CisJY29uc3QgY2hhciAqcHJlZml4OworCWludCBxdWlldDsKKwlpbnQgcmVjdXJzaXZlOworfTsKKyNkZWZpbmUgQ0JfRk9SRUFDSF9JTklUIHsgMCB9CisKK3N0YXRpYyB2b2lkIHJ1bmNvbW1hbmRfaW5fc3VibW9kdWxlX2NiKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqbGlzdF9pdGVtLAorCQkJCSAgICAgICB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjYl9mb3JlYWNoICppbmZvID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICpwYXRoID0gbGlzdF9pdGVtLT5uYW1lOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmNlX29pZCA9ICZsaXN0X2l0ZW0tPm9pZDsKKworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyICpkaXNwbGF5cGF0aDsKKworCWRpc3BsYXlwYXRoID0gZ2V0X3N1Ym1vZHVsZV9kaXNwbGF5cGF0aChwYXRoLCBpbmZvLT5wcmVmaXgpOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKworCWlmICghc3ViKQorCQlkaWUoXygiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIiksCisJCQlkaXNwbGF5cGF0aCk7CisKKwlpZiAoIWlzX3N1Ym1vZHVsZV9wb3B1bGF0ZWRfZ2VudGx5KHBhdGgsIE5VTEwpKQorCQlnb3RvIGNsZWFudXA7CisKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKworCS8qCisJICogRm9yIHRoZSBwdXJwb3NlIG9mIGV4ZWN1dGluZyA8Y29tbWFuZD4gaW4gdGhlIHN1Ym1vZHVsZSwKKwkgKiBzZXBhcmF0ZSBzaGVsbCBpcyB1c2VkIGZvciB0aGUgcHVycG9zZSBvZiBydW5uaW5nIHRoZQorCSAqIGNoaWxkIHByb2Nlc3MuCisJICovCisJY3AudXNlX3NoZWxsID0gMTsKKwljcC5kaXIgPSBwYXRoOworCisJLyoKKwkgKiBORUVEU1dPUks6IHRoZSBjb21tYW5kIGN1cnJlbnRseSBoYXMgYWNjZXNzIHRvIHRoZSB2YXJpYWJsZXMgJG5hbWUsCisJICogJHNtX3BhdGgsICRkaXNwbGF5cGF0aCwgJHNoYTEgYW5kICR0b3BsZXZlbCBvbmx5IHdoZW4gdGhlIGNvbW1hbmQKKwkgKiBjb250YWlucyBhIHNpbmdsZSBhcmd1bWVudC4gVGhpcyBpcyBkb25lIGZvciBtYWludGFpbmluZyBhIGZhaXRoZnVsCisJICogdHJhbnNsYXRpb24gZnJvbSBzaGVsbCBzY3JpcHQuCisJICovCisJaWYgKGluZm8tPmFyZ2MgPT0gMSkgeworCQljaGFyICp0b3BsZXZlbCA9IHhnZXRjd2QoKTsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmVudl9hcnJheSwgIm5hbWU9JXMiLCBzdWItPm5hbWUpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5lbnZfYXJyYXksICJzbV9wYXRoPSVzIiwgcGF0aCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmVudl9hcnJheSwgImRpc3BsYXlwYXRoPSVzIiwgZGlzcGxheXBhdGgpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5lbnZfYXJyYXksICJzaGExPSVzIiwKKwkJCQlvaWRfdG9faGV4KGNlX29pZCkpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5lbnZfYXJyYXksICJ0b3BsZXZlbD0lcyIsIHRvcGxldmVsKTsKKworCQkvKgorCQkgKiBTaW5jZSB0aGUgcGF0aCB2YXJpYWJsZSB3YXMgYWNjZXNzaWJsZSBmcm9tIHRoZSBzY3JpcHQKKwkJICogYmVmb3JlIHBvcnRpbmcsIGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgYWZ0ZXIgcG9ydGluZy4KKwkJICogVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJQQVRIIiBoYXMgYSB2ZXJ5IHNwZWNpYWwgcHVycG9zZQorCQkgKiBvbiB3aW5kb3dzLiBBbmQgc2luY2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZQorCQkgKiBjYXNlLWluc2Vuc2l0aXZlIGluIHdpbmRvd3MsIGl0IGludGVyZmVyZXMgd2l0aCB0aGUKKwkJICogZXhpc3RpbmcgUEFUSCB2YXJpYWJsZS4gSGVuY2UsIHRvIGF2b2lkIHRoYXQsIHdlIGV4cG9zZQorCQkgKiBwYXRoIHZpYSB0aGUgYXJncyBhcmd2X2FycmF5IGFuZCBub3QgdmlhIGVudl9hcnJheS4KKwkJICovCisJCXNxX3F1b3RlX2J1Zigmc2IsIHBhdGgpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAicGF0aD0lczsgJXMiLAorCQkJCSBzYi5idWYsIGluZm8tPmFyZ3ZbMF0pOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlmcmVlKHRvcGxldmVsKTsKKwl9IGVsc2UgeworCQlhcmd2X2FycmF5X3B1c2h2KCZjcC5hcmdzLCBpbmZvLT5hcmd2KTsKKwl9CisKKwlpZiAoIWluZm8tPnF1aWV0KQorCQlwcmludGYoXygiRW50ZXJpbmcgJyVzJ1xuIiksIGRpc3BsYXlwYXRoKTsKKworCWlmIChpbmZvLT5hcmd2WzBdICYmIHJ1bl9jb21tYW5kKCZjcCkpCisJCWRpZShfKCJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4uIiksCisJCQlkaXNwbGF5cGF0aCk7CisKKwlpZiAoaW5mby0+cmVjdXJzaXZlKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwciA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQljcHIuZ2l0X2NtZCA9IDE7CisJCWNwci5kaXIgPSBwYXRoOworCQlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3ByLmVudl9hcnJheSk7CisKKwkJYXJndl9hcnJheV9wdXNobCgmY3ByLmFyZ3MsICItLXN1cGVyLXByZWZpeCIsIE5VTEwpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcHIuYXJncywgIiVzLyIsIGRpc3BsYXlwYXRoKTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3ByLmFyZ3MsICJzdWJtb2R1bGUtLWhlbHBlciIsICJmb3JlYWNoIiwgIi0tcmVjdXJzaXZlIiwKKwkJCQlOVUxMKTsKKworCQlpZiAoaW5mby0+cXVpZXQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNwci5hcmdzLCAiLS1xdWlldCIpOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3ByLmFyZ3MsICItLSIpOworCQlhcmd2X2FycmF5X3B1c2h2KCZjcHIuYXJncywgaW5mby0+YXJndik7CisKKwkJaWYgKHJ1bl9jb21tYW5kKCZjcHIpKQorCQkJZGllKF8oInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyB3aGlsZSAiCisJCQkJInJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkIHN1Ym1vZHVsZXMgb2YgJXNcbi4iKSwKKwkJCQlkaXNwbGF5cGF0aCk7CisJfQorCitjbGVhbnVwOgorCWZyZWUoZGlzcGxheXBhdGgpOworfQorCitzdGF0aWMgaW50IG1vZHVsZV9mb3JlYWNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjYl9mb3JlYWNoIGluZm8gPSBDQl9GT1JFQUNIX0lOSVQ7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBtb2R1bGVfbGlzdCBsaXN0ID0gTU9EVUxFX0xJU1RfSU5JVDsKKworCXN0cnVjdCBvcHRpb24gbW9kdWxlX2ZvcmVhY2hfb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZpbmZvLnF1aWV0LCBOXygiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiKSksCisJCU9QVF9CT09MKDAsICJyZWN1cnNpdmUiLCAmaW5mby5yZWN1cnNpdmUsCisJCQkgTl8oIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWNvbnN0IGNoYXIgKmNvbnN0IGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX2ZvcmVhY2hfb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2UsIDApOworCisJaWYgKG1vZHVsZV9saXN0X2NvbXB1dGUoMCwgTlVMTCwgcHJlZml4LCAmcGF0aHNwZWMsICZsaXN0KSA8IDApCisJCXJldHVybiAxOworCisJaW5mby5hcmdjID0gYXJnYzsKKwlpbmZvLmFyZ3YgPSBhcmd2OworCWluZm8ucHJlZml4ID0gcHJlZml4OworCisJZm9yX2VhY2hfbGlzdGVkX3N1Ym1vZHVsZSgmbGlzdCwgcnVuY29tbWFuZF9pbl9zdWJtb2R1bGVfY2IsICZpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqY29tcHV0ZV9zdWJtb2R1bGVfY2xvbmVfdXJsKGNvbnN0IGNoYXIgKnJlbF91cmwpCit7CisJY2hhciAqcmVtb3RldXJsLCAqcmVsdXJsOworCWNoYXIgKnJlbW90ZSA9IGdldF9kZWZhdWx0X3JlbW90ZSgpOworCXN0cnVjdCBzdHJidWYgcmVtb3Rlc2IgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZyZW1vdGVzYiwgInJlbW90ZS4lcy51cmwiLCByZW1vdGUpOworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcocmVtb3Rlc2IuYnVmLCAmcmVtb3RldXJsKSkgeworCQl3YXJuaW5nKF8oImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iKSwgcmVtb3Rlc2IuYnVmKTsKKwkJcmVtb3RldXJsID0geGdldGN3ZCgpOworCX0KKwlyZWx1cmwgPSByZWxhdGl2ZV91cmwocmVtb3RldXJsLCByZWxfdXJsLCBOVUxMKTsKKworCWZyZWUocmVtb3RlKTsKKwlmcmVlKHJlbW90ZXVybCk7CisJc3RyYnVmX3JlbGVhc2UoJnJlbW90ZXNiKTsKKworCXJldHVybiByZWx1cmw7Cit9CisKK3N0cnVjdCBpbml0X2NiIHsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworI2RlZmluZSBJTklUX0NCX0lOSVQgeyBOVUxMLCAwIH0KKworc3RhdGljIHZvaWQgaW5pdF9zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqdXBkID0gTlVMTCwgKnVybCA9IE5VTEwsICpkaXNwbGF5cGF0aDsKKworCWRpc3BsYXlwYXRoID0gZ2V0X3N1Ym1vZHVsZV9kaXNwbGF5cGF0aChwYXRoLCBwcmVmaXgpOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKworCWlmICghc3ViKQorCQlkaWUoXygiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIiksCisJCQlkaXNwbGF5cGF0aCk7CisKKwkvKgorCSAqIE5FRURTV09SSzogSW4gYSBtdWx0aS13b3JraW5nLXRyZWUgd29ybGQsIHRoaXMgbmVlZHMgdG8gYmUKKwkgKiBzZXQgaW4gdGhlIHBlci13b3JrdHJlZSBjb25maWcuCisJICoKKwkgKiBTZXQgYWN0aXZlIGZsYWcgZm9yIHRoZSBzdWJtb2R1bGUgYmVpbmcgaW5pdGlhbGl6ZWQKKwkgKi8KKwlpZiAoIWlzX3N1Ym1vZHVsZV9hY3RpdmUodGhlX3JlcG9zaXRvcnksIHBhdGgpKSB7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgInN1Ym1vZHVsZS4lcy5hY3RpdmUiLCBzdWItPm5hbWUpOworCQlnaXRfY29uZmlnX3NldF9nZW50bHkoc2IuYnVmLCAidHJ1ZSIpOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwl9CisKKwkvKgorCSAqIENvcHkgdXJsIHNldHRpbmcgd2hlbiBpdCBpcyBub3Qgc2V0IHlldC4KKwkgKiBUbyBsb29rIHVwIHRoZSB1cmwgaW4gLmdpdC9jb25maWcsIHdlIG11c3Qgbm90IGZhbGwgYmFjayB0bworCSAqIC5naXRtb2R1bGVzLCBzbyBsb29rIGl0IHVwIGRpcmVjdGx5LgorCSAqLworCXN0cmJ1Zl9hZGRmKCZzYiwgInN1Ym1vZHVsZS4lcy51cmwiLCBzdWItPm5hbWUpOworCWlmIChnaXRfY29uZmlnX2dldF9zdHJpbmcoc2IuYnVmLCAmdXJsKSkgeworCQlpZiAoIXN1Yi0+dXJsKQorCQkJZGllKF8oIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIpLAorCQkJCWRpc3BsYXlwYXRoKTsKKworCQl1cmwgPSB4c3RyZHVwKHN1Yi0+dXJsKTsKKworCQkvKiBQb3NzaWJseSBhIHVybCByZWxhdGl2ZSB0byBwYXJlbnQgKi8KKwkJaWYgKHN0YXJ0c193aXRoX2RvdF9kb3Rfc2xhc2godXJsKSB8fAorCQkgICAgc3RhcnRzX3dpdGhfZG90X3NsYXNoKHVybCkpIHsKKwkJCWNoYXIgKm9sZHVybCA9IHVybDsKKwkJCXVybCA9IGNvbXB1dGVfc3VibW9kdWxlX2Nsb25lX3VybChvbGR1cmwpOworCQkJZnJlZShvbGR1cmwpOworCQl9CisKKwkJaWYgKGdpdF9jb25maWdfc2V0X2dlbnRseShzYi5idWYsIHVybCkpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIpLAorCQkJICAgIGRpc3BsYXlwYXRoKTsKKwkJaWYgKCEoZmxhZ3MgJiBPUFRfUVVJRVQpKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIpLAorCQkJCXN1Yi0+bmFtZSwgdXJsLCBkaXNwbGF5cGF0aCk7CisJfQorCXN0cmJ1Zl9yZXNldCgmc2IpOworCisJLyogQ29weSAidXBkYXRlIiBzZXR0aW5nIHdoZW4gaXQgaXMgbm90IHNldCB5ZXQgKi8KKwlzdHJidWZfYWRkZigmc2IsICJzdWJtb2R1bGUuJXMudXBkYXRlIiwgc3ViLT5uYW1lKTsKKwlpZiAoZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKHNiLmJ1ZiwgJnVwZCkgJiYKKwkgICAgc3ViLT51cGRhdGVfc3RyYXRlZ3kudHlwZSAhPSBTTV9VUERBVEVfVU5TUEVDSUZJRUQpIHsKKwkJaWYgKHN1Yi0+dXBkYXRlX3N0cmF0ZWd5LnR5cGUgPT0gU01fVVBEQVRFX0NPTU1BTkQpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIpLAorCQkJCXN1Yi0+bmFtZSk7CisJCQl1cGQgPSB4c3RyZHVwKCJub25lIik7CisJCX0gZWxzZQorCQkJdXBkID0geHN0cmR1cChzdWJtb2R1bGVfc3RyYXRlZ3lfdG9fc3RyaW5nKCZzdWItPnVwZGF0ZV9zdHJhdGVneSkpOworCisJCWlmIChnaXRfY29uZmlnX3NldF9nZW50bHkoc2IuYnVmLCB1cGQpKQorCQkJZGllKF8oIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIpLCBkaXNwbGF5cGF0aCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJZnJlZShkaXNwbGF5cGF0aCk7CisJZnJlZSh1cmwpOworCWZyZWUodXBkKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zdWJtb2R1bGVfY2IoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpsaXN0X2l0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGluaXRfY2IgKmluZm8gPSBjYl9kYXRhOworCWluaXRfc3VibW9kdWxlKGxpc3RfaXRlbS0+bmFtZSwgaW5mby0+cHJlZml4LCBpbmZvLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbW9kdWxlX2luaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGluaXRfY2IgaW5mbyA9IElOSVRfQ0JfSU5JVDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IG1vZHVsZV9saXN0IGxpc3QgPSBNT0RVTEVfTElTVF9JTklUOworCWludCBxdWlldCA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9pbml0X29wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWNvbnN0IGNoYXIgKmNvbnN0IGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPHBhdGg+XSIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX2luaXRfb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2UsIDApOworCisJaWYgKG1vZHVsZV9saXN0X2NvbXB1dGUoYXJnYywgYXJndiwgcHJlZml4LCAmcGF0aHNwZWMsICZsaXN0KSA8IDApCisJCXJldHVybiAxOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gcGF0aCBhcmdzIGFuZCBzdWJtb2R1bGUuYWN0aXZlIGlzIHNldCB0aGVuLAorCSAqIGJ5IGRlZmF1bHQsIG9ubHkgaW5pdGlhbGl6ZSAnYWN0aXZlJyBtb2R1bGVzLgorCSAqLworCWlmICghYXJnYyAmJiBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aSgic3VibW9kdWxlLmFjdGl2ZSIpKQorCQltb2R1bGVfbGlzdF9hY3RpdmUoJmxpc3QpOworCisJaW5mby5wcmVmaXggPSBwcmVmaXg7CisJaWYgKHF1aWV0KQorCQlpbmZvLmZsYWdzIHw9IE9QVF9RVUlFVDsKKworCWZvcl9lYWNoX2xpc3RlZF9zdWJtb2R1bGUoJmxpc3QsIGluaXRfc3VibW9kdWxlX2NiLCAmaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN0YXR1c19jYiB7CisJY29uc3QgY2hhciAqcHJlZml4OworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKKyNkZWZpbmUgU1RBVFVTX0NCX0lOSVQgeyBOVUxMLCAwIH0KKworc3RhdGljIHZvaWQgcHJpbnRfc3RhdHVzKHVuc2lnbmVkIGludCBmbGFncywgY2hhciBzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmRpc3BsYXlwYXRoKQoreworCWlmIChmbGFncyAmIE9QVF9RVUlFVCkKKwkJcmV0dXJuOworCisJcHJpbnRmKCIlYyVzICVzIiwgc3RhdGUsIG9pZF90b19oZXgob2lkKSwgZGlzcGxheXBhdGgpOworCisJaWYgKHN0YXRlID09ICcgJyB8fCBzdGF0ZSA9PSAnKycpIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGNvbXB1dGVfcmV2X25hbWUocGF0aCwgb2lkX3RvX2hleChvaWQpKTsKKworCQlpZiAobmFtZSkKKwkJCXByaW50ZigiICglcykiLCBuYW1lKTsKKwl9CisKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3N1Ym1vZHVsZV9oZWFkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsCisJCQkJICAgICB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3RfaWQgKm91dHB1dCA9IGNiX2RhdGE7CisJaWYgKG9pZCkKKwkJb2lkY3B5KG91dHB1dCwgb2lkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGF0dXNfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmNlX29pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNlX2ZsYWdzLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwljaGFyICpkaXNwbGF5cGF0aDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBkaWZmX2ZpbGVzX2FyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlpbnQgZGlmZl9maWxlc19yZXN1bHQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpnaXRfZGlyOworCisJaWYgKCFzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIHBhdGgpKQorCQlkaWUoXygibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIpLAorCQkgICAgICBwYXRoKTsKKworCWRpc3BsYXlwYXRoID0gZ2V0X3N1Ym1vZHVsZV9kaXNwbGF5cGF0aChwYXRoLCBwcmVmaXgpOworCisJaWYgKChDRV9TVEFHRU1BU0sgJiBjZV9mbGFncykgPj4gQ0VfU1RBR0VTSElGVCkgeworCQlwcmludF9zdGF0dXMoZmxhZ3MsICdVJywgcGF0aCwgJm51bGxfb2lkLCBkaXNwbGF5cGF0aCk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMvLmdpdCIsIHBhdGgpOworCWdpdF9kaXIgPSByZWFkX2dpdGZpbGUoYnVmLmJ1Zik7CisJaWYgKCFnaXRfZGlyKQorCQlnaXRfZGlyID0gYnVmLmJ1ZjsKKworCWlmICghaXNfc3VibW9kdWxlX2FjdGl2ZSh0aGVfcmVwb3NpdG9yeSwgcGF0aCkgfHwKKwkgICAgIWlzX2dpdF9kaXJlY3RvcnkoZ2l0X2RpcikpIHsKKwkJcHJpbnRfc3RhdHVzKGZsYWdzLCAnLScsIHBhdGgsIGNlX29pZCwgZGlzcGxheXBhdGgpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJZ290byBjbGVhbnVwOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmRpZmZfZmlsZXNfYXJncywgImRpZmYtZmlsZXMiLAorCQkJICItLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IiwgIi0tcXVpZXQiLCAiLS0iLAorCQkJIHBhdGgsIE5VTEwpOworCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOworCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgTlVMTCk7CisJcmV2LmFiYnJldiA9IDA7CisJZGlmZl9maWxlc19hcmdzLmFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoZGlmZl9maWxlc19hcmdzLmFyZ2MsCisJCQkJCSAgICAgICBkaWZmX2ZpbGVzX2FyZ3MuYXJndiwKKwkJCQkJICAgICAgICZyZXYsIE5VTEwpOworCWRpZmZfZmlsZXNfcmVzdWx0ID0gcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7CisKKwlpZiAoIWRpZmZfcmVzdWx0X2NvZGUoJnJldi5kaWZmb3B0LCBkaWZmX2ZpbGVzX3Jlc3VsdCkpIHsKKwkJcHJpbnRfc3RhdHVzKGZsYWdzLCAnICcsIHBhdGgsIGNlX29pZCwKKwkJCSAgICAgZGlzcGxheXBhdGgpOworCX0gZWxzZSBpZiAoIShmbGFncyAmIE9QVF9DQUNIRUQpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gZ2V0X3N1Ym1vZHVsZV9yZWZfc3RvcmUocGF0aCk7CisKKwkJaWYgKCFyZWZzKSB7CisJCQlwcmludF9zdGF0dXMoZmxhZ3MsICctJywgcGF0aCwgY2Vfb2lkLCBkaXNwbGF5cGF0aCk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKHJlZnNfaGVhZF9yZWYocmVmcywgaGFuZGxlX3N1Ym1vZHVsZV9oZWFkX3JlZiwgJm9pZCkpCisJCQlkaWUoXygiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSAiCisJCQkgICAgICAic3VibW9kdWxlICclcyciKSwgcGF0aCk7CisKKwkJcHJpbnRfc3RhdHVzKGZsYWdzLCAnKycsIHBhdGgsICZvaWQsIGRpc3BsYXlwYXRoKTsKKwl9IGVsc2UgeworCQlwcmludF9zdGF0dXMoZmxhZ3MsICcrJywgcGF0aCwgY2Vfb2lkLCBkaXNwbGF5cGF0aCk7CisJfQorCisJaWYgKGZsYWdzICYgT1BUX1JFQ1VSU0lWRSkgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcHIgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJY3ByLmdpdF9jbWQgPSAxOworCQljcHIuZGlyID0gcGF0aDsKKwkJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwci5lbnZfYXJyYXkpOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3ByLmFyZ3MsICItLXN1cGVyLXByZWZpeCIpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcHIuYXJncywgIiVzLyIsIGRpc3BsYXlwYXRoKTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3ByLmFyZ3MsICJzdWJtb2R1bGUtLWhlbHBlciIsICJzdGF0dXMiLAorCQkJCSAiLS1yZWN1cnNpdmUiLCBOVUxMKTsKKworCQlpZiAoZmxhZ3MgJiBPUFRfQ0FDSEVEKQorCQkJYXJndl9hcnJheV9wdXNoKCZjcHIuYXJncywgIi0tY2FjaGVkIik7CisKKwkJaWYgKGZsYWdzICYgT1BUX1FVSUVUKQorCQkJYXJndl9hcnJheV9wdXNoKCZjcHIuYXJncywgIi0tcXVpZXQiKTsKKworCQlpZiAocnVuX2NvbW1hbmQoJmNwcikpCisJCQlkaWUoXygiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIpLCBwYXRoKTsKKwl9CisKK2NsZWFudXA6CisJYXJndl9hcnJheV9jbGVhcigmZGlmZl9maWxlc19hcmdzKTsKKwlmcmVlKGRpc3BsYXlwYXRoKTsKK30KKworc3RhdGljIHZvaWQgc3RhdHVzX3N1Ym1vZHVsZV9jYihjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmxpc3RfaXRlbSwKKwkJCQl2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdGF0dXNfY2IgKmluZm8gPSBjYl9kYXRhOworCXN0YXR1c19zdWJtb2R1bGUobGlzdF9pdGVtLT5uYW1lLCAmbGlzdF9pdGVtLT5vaWQsIGxpc3RfaXRlbS0+Y2VfZmxhZ3MsCisJCQkgaW5mby0+cHJlZml4LCBpbmZvLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbW9kdWxlX3N0YXR1cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RhdHVzX2NiIGluZm8gPSBTVEFUVVNfQ0JfSU5JVDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IG1vZHVsZV9saXN0IGxpc3QgPSBNT0RVTEVfTElTVF9JTklUOworCWludCBxdWlldCA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9zdGF0dXNfb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IikpLAorCQlPUFRfQklUKDAsICJjYWNoZWQiLCAmaW5mby5mbGFncywgTl8oIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgSEVBRCIpLCBPUFRfQ0FDSEVEKSwKKwkJT1BUX0JJVCgwLCAicmVjdXJzaXZlIiwgJmluZm8uZmxhZ3MsIE5fKCJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiKSwgT1BUX1JFQ1VSU0lWRSksCisJCU9QVF9FTkQoKQorCX07CisKKwljb25zdCBjaGFyICpjb25zdCBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZVtdID0geworCQlOXygiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX3N0YXR1c19vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAobW9kdWxlX2xpc3RfY29tcHV0ZShhcmdjLCBhcmd2LCBwcmVmaXgsICZwYXRoc3BlYywgJmxpc3QpIDwgMCkKKwkJcmV0dXJuIDE7CisKKwlpbmZvLnByZWZpeCA9IHByZWZpeDsKKwlpZiAocXVpZXQpCisJCWluZm8uZmxhZ3MgfD0gT1BUX1FVSUVUOworCisJZm9yX2VhY2hfbGlzdGVkX3N1Ym1vZHVsZSgmbGlzdCwgc3RhdHVzX3N1Ym1vZHVsZV9jYiwgJmluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW9kdWxlX25hbWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UoXygiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IikpOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBhcmd2WzFdKTsKKworCWlmICghc3ViKQorCQlkaWUoXygibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIpLAorCQkgICAgYXJndlsxXSk7CisKKwlwcmludGYoIiVzXG4iLCBzdWItPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzeW5jX2NiIHsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworI2RlZmluZSBTWU5DX0NCX0lOSVQgeyBOVUxMLCAwIH0KKworc3RhdGljIHZvaWQgc3luY19zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwljaGFyICpyZW1vdGVfa2V5ID0gTlVMTDsKKwljaGFyICpzdWJfb3JpZ2luX3VybCwgKnN1cGVyX2NvbmZpZ191cmwsICpkaXNwbGF5cGF0aDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY2hhciAqc3ViX2NvbmZpZ19wYXRoID0gTlVMTDsKKworCWlmICghaXNfc3VibW9kdWxlX2FjdGl2ZSh0aGVfcmVwb3NpdG9yeSwgcGF0aCkpCisJCXJldHVybjsKKworCXN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgcGF0aCk7CisKKwlpZiAoc3ViICYmIHN1Yi0+dXJsKSB7CisJCWlmIChzdGFydHNfd2l0aF9kb3RfZG90X3NsYXNoKHN1Yi0+dXJsKSB8fAorCQkgICAgc3RhcnRzX3dpdGhfZG90X3NsYXNoKHN1Yi0+dXJsKSkgeworCQkJY2hhciAqcmVtb3RlX3VybCwgKnVwX3BhdGg7CisJCQljaGFyICpyZW1vdGUgPSBnZXRfZGVmYXVsdF9yZW1vdGUoKTsKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgInJlbW90ZS4lcy51cmwiLCByZW1vdGUpOworCisJCQlpZiAoZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKHNiLmJ1ZiwgJnJlbW90ZV91cmwpKQorCQkJCXJlbW90ZV91cmwgPSB4Z2V0Y3dkKCk7CisKKwkJCXVwX3BhdGggPSBnZXRfdXBfcGF0aChwYXRoKTsKKwkJCXN1Yl9vcmlnaW5fdXJsID0gcmVsYXRpdmVfdXJsKHJlbW90ZV91cmwsIHN1Yi0+dXJsLCB1cF9wYXRoKTsKKwkJCXN1cGVyX2NvbmZpZ191cmwgPSByZWxhdGl2ZV91cmwocmVtb3RlX3VybCwgc3ViLT51cmwsIE5VTEwpOworCisJCQlmcmVlKHJlbW90ZSk7CisJCQlmcmVlKHVwX3BhdGgpOworCQkJZnJlZShyZW1vdGVfdXJsKTsKKwkJfSBlbHNlIHsKKwkJCXN1Yl9vcmlnaW5fdXJsID0geHN0cmR1cChzdWItPnVybCk7CisJCQlzdXBlcl9jb25maWdfdXJsID0geHN0cmR1cChzdWItPnVybCk7CisJCX0KKwl9IGVsc2UgeworCQlzdWJfb3JpZ2luX3VybCA9IHhzdHJkdXAoIiIpOworCQlzdXBlcl9jb25maWdfdXJsID0geHN0cmR1cCgiIik7CisJfQorCisJZGlzcGxheXBhdGggPSBnZXRfc3VibW9kdWxlX2Rpc3BsYXlwYXRoKHBhdGgsIHByZWZpeCk7CisKKwlpZiAoIShmbGFncyAmIE9QVF9RVUlFVCkpCisJCXByaW50ZihfKCJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIpLAorCQkJIGRpc3BsYXlwYXRoKTsKKworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgInN1Ym1vZHVsZS4lcy51cmwiLCBzdWItPm5hbWUpOworCWlmIChnaXRfY29uZmlnX3NldF9nZW50bHkoc2IuYnVmLCBzdXBlcl9jb25maWdfdXJsKSkKKwkJZGllKF8oImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciKSwKKwkJICAgICAgZGlzcGxheXBhdGgpOworCisJaWYgKCFpc19zdWJtb2R1bGVfcG9wdWxhdGVkX2dlbnRseShwYXRoLCBOVUxMKSkKKwkJZ290byBjbGVhbnVwOworCisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJY3AuZ2l0X2NtZCA9IDE7CisJY3AuZGlyID0gcGF0aDsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAic3VibW9kdWxlLS1oZWxwZXIiLAorCQkJICJwcmludC1kZWZhdWx0LXJlbW90ZSIsIE5VTEwpOworCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJaWYgKGNhcHR1cmVfY29tbWFuZCgmY3AsICZzYiwgMCkpCisJCWRpZShfKCJmYWlsZWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciKSwKKwkJICAgICAgcGF0aCk7CisKKwlzdHJidWZfc3RyaXBfc3VmZml4KCZzYiwgIlxuIik7CisJcmVtb3RlX2tleSA9IHhzdHJmbXQoInJlbW90ZS4lcy51cmwiLCBzYi5idWYpOworCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3VibW9kdWxlX3RvX2dpdGRpcigmc2IsIHBhdGgpOworCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiL2NvbmZpZyIpOworCisJaWYgKGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KHNiLmJ1ZiwgcmVtb3RlX2tleSwgc3ViX29yaWdpbl91cmwpKQorCQlkaWUoXygiZmFpbGVkIHRvIHVwZGF0ZSByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIiksCisJCSAgICAgIHBhdGgpOworCisJaWYgKGZsYWdzICYgT1BUX1JFQ1VSU0lWRSkgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcHIgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJY3ByLmdpdF9jbWQgPSAxOworCQljcHIuZGlyID0gcGF0aDsKKwkJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwci5lbnZfYXJyYXkpOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3ByLmFyZ3MsICItLXN1cGVyLXByZWZpeCIpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcHIuYXJncywgIiVzLyIsIGRpc3BsYXlwYXRoKTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3ByLmFyZ3MsICJzdWJtb2R1bGUtLWhlbHBlciIsICJzeW5jIiwKKwkJCQkgIi0tcmVjdXJzaXZlIiwgTlVMTCk7CisKKwkJaWYgKGZsYWdzICYgT1BUX1FVSUVUKQorCQkJYXJndl9hcnJheV9wdXNoKCZjcHIuYXJncywgIi0tcXVpZXQiKTsKKworCQlpZiAocnVuX2NvbW1hbmQoJmNwcikpCisJCQlkaWUoXygiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIpLAorCQkJICAgICAgcGF0aCk7CisJfQorCitjbGVhbnVwOgorCWZyZWUoc3VwZXJfY29uZmlnX3VybCk7CisJZnJlZShzdWJfb3JpZ2luX3VybCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlmcmVlKHJlbW90ZV9rZXkpOworCWZyZWUoZGlzcGxheXBhdGgpOworCWZyZWUoc3ViX2NvbmZpZ19wYXRoKTsKK30KKworc3RhdGljIHZvaWQgc3luY19zdWJtb2R1bGVfY2IoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpsaXN0X2l0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN5bmNfY2IgKmluZm8gPSBjYl9kYXRhOworCXN5bmNfc3VibW9kdWxlKGxpc3RfaXRlbS0+bmFtZSwgaW5mby0+cHJlZml4LCBpbmZvLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbW9kdWxlX3N5bmMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN5bmNfY2IgaW5mbyA9IFNZTkNfQ0JfSU5JVDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IG1vZHVsZV9saXN0IGxpc3QgPSBNT0RVTEVfTElTVF9JTklUOworCWludCBxdWlldCA9IDA7CisJaW50IHJlY3Vyc2l2ZSA9IDA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9zeW5jX29wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIikpLAorCQlPUFRfQk9PTCgwLCAicmVjdXJzaXZlIiwgJnJlY3Vyc2l2ZSwKKwkJCU5fKCJSZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwljb25zdCBjaGFyICpjb25zdCBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZVtdID0geworCQlOXygiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iKSwKKwkJTlVMTAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG1vZHVsZV9zeW5jX29wdGlvbnMsCisJCQkgICAgIGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlLCAwKTsKKworCWlmIChtb2R1bGVfbGlzdF9jb21wdXRlKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnBhdGhzcGVjLCAmbGlzdCkgPCAwKQorCQlyZXR1cm4gMTsKKworCWluZm8ucHJlZml4ID0gcHJlZml4OworCWlmIChxdWlldCkKKwkJaW5mby5mbGFncyB8PSBPUFRfUVVJRVQ7CisJaWYgKHJlY3Vyc2l2ZSkKKwkJaW5mby5mbGFncyB8PSBPUFRfUkVDVVJTSVZFOworCisJZm9yX2VhY2hfbGlzdGVkX3N1Ym1vZHVsZSgmbGlzdCwgc3luY19zdWJtb2R1bGVfY2IsICZpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZGVpbml0X2NiIHsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKyNkZWZpbmUgREVJTklUX0NCX0lOSVQgeyBOVUxMLCAwIH0KKworc3RhdGljIHZvaWQgZGVpbml0X3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CisJY2hhciAqZGlzcGxheXBhdGggPSBOVUxMOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwX2NvbmZpZyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiX2NvbmZpZyA9IFNUUkJVRl9JTklUOworCWNoYXIgKnN1Yl9naXRfZGlyID0geHN0cmZtdCgiJXMvLmdpdCIsIHBhdGgpOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKworCWlmICghc3ViIHx8ICFzdWItPm5hbWUpCisJCWdvdG8gY2xlYW51cDsKKworCWRpc3BsYXlwYXRoID0gZ2V0X3N1Ym1vZHVsZV9kaXNwbGF5cGF0aChwYXRoLCBwcmVmaXgpOworCisJLyogcmVtb3ZlIHRoZSBzdWJtb2R1bGUgd29yayB0cmVlICh1bmxlc3MgdGhlIHVzZXIgYWxyZWFkeSBkaWQgaXQpICovCisJaWYgKGlzX2RpcmVjdG9yeShwYXRoKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiX3JtID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmZvcm1hdDsKKworCQkvKgorCQkgKiBwcm90ZWN0IHN1Ym1vZHVsZXMgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5CisJCSAqIE5FRURTV09SSzogaW5zdGVhZCBvZiBkeWluZywgYXV0b21hdGljYWxseSBjYWxsCisJCSAqIGFic29yYmdpdGRpcnMgYW5kIChwb3NzaWJseSkgd2Fybi4KKwkJICovCisJCWlmIChpc19kaXJlY3Rvcnkoc3ViX2dpdF9kaXIpKQorCQkJZGllKF8oIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgIgorCQkJICAgICAgImRpcmVjdG9yeSAodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCAiCisJCQkgICAgICAidG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIiksCisJCQkgICAgZGlzcGxheXBhdGgpOworCisJCWlmICghKGZsYWdzICYgT1BUX0ZPUkNFKSkgeworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3Bfcm0gPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCQljcF9ybS5naXRfY21kID0gMTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwX3JtLmFyZ3MsICJybSIsICItcW4iLAorCQkJCQkgcGF0aCwgTlVMTCk7CisKKwkJCWlmIChydW5fY29tbWFuZCgmY3Bfcm0pKQorCQkJCWRpZShfKCJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgbG9jYWwgIgorCQkJCSAgICAgICJtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkIHRoZW0iKSwKKwkJCQkgICAgICBkaXNwbGF5cGF0aCk7CisJCX0KKworCQlzdHJidWZfYWRkc3RyKCZzYl9ybSwgcGF0aCk7CisKKwkJaWYgKCFyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZzYl9ybSwgMCkpCisJCQlmb3JtYXQgPSBfKCJDbGVhcmVkIGRpcmVjdG9yeSAnJXMnXG4iKTsKKwkJZWxzZQorCQkJZm9ybWF0ID0gXygiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIpOworCisJCWlmICghKGZsYWdzICYgT1BUX1FVSUVUKSkKKwkJCXByaW50Zihmb3JtYXQsIGRpc3BsYXlwYXRoKTsKKworCQlzdWJtb2R1bGVfdW5zZXRfY29yZV93b3JrdHJlZShzdWIpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZzYl9ybSk7CisJfQorCisJaWYgKG1rZGlyKHBhdGgsIDA3NzcpKQorCQlwcmludGYoXygiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIiksCisJCSAgICAgIGRpc3BsYXlwYXRoKTsKKworCWNwX2NvbmZpZy5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcF9jb25maWcuYXJncywgImNvbmZpZyIsICItLWdldC1yZWdleHAiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjcF9jb25maWcuYXJncywgInN1Ym1vZHVsZS4lc1xcLiIsIHN1Yi0+bmFtZSk7CisKKwkvKiByZW1vdmUgdGhlIC5naXQvY29uZmlnIGVudHJpZXMgKHVubGVzcyB0aGUgdXNlciBhbHJlYWR5IGRpZCBpdCkgKi8KKwlpZiAoIWNhcHR1cmVfY29tbWFuZCgmY3BfY29uZmlnLCAmc2JfY29uZmlnLCAwKSAmJiBzYl9jb25maWcubGVuKSB7CisJCWNoYXIgKnN1Yl9rZXkgPSB4c3RyZm10KCJzdWJtb2R1bGUuJXMiLCBzdWItPm5hbWUpOworCQkvKgorCQkgKiByZW1vdmUgdGhlIHdob2xlIHNlY3Rpb24gc28gd2UgaGF2ZSBhIGNsZWFuIHN0YXRlIHdoZW4KKwkJICogdGhlIHVzZXIgbGF0ZXIgZGVjaWRlcyB0byBpbml0IHRoaXMgc3VibW9kdWxlIGFnYWluCisJCSAqLworCQlnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoTlVMTCwgc3ViX2tleSwgTlVMTCk7CisJCWlmICghKGZsYWdzICYgT1BUX1FVSUVUKSkKKwkJCXByaW50ZihfKCJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iKSwKKwkJCQkgc3ViLT5uYW1lLCBzdWItPnVybCwgZGlzcGxheXBhdGgpOworCQlmcmVlKHN1Yl9rZXkpOworCX0KKworY2xlYW51cDoKKwlmcmVlKGRpc3BsYXlwYXRoKTsKKwlmcmVlKHN1Yl9naXRfZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmc2JfY29uZmlnKTsKK30KKworc3RhdGljIHZvaWQgZGVpbml0X3N1Ym1vZHVsZV9jYihjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmxpc3RfaXRlbSwKKwkJCQl2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBkZWluaXRfY2IgKmluZm8gPSBjYl9kYXRhOworCWRlaW5pdF9zdWJtb2R1bGUobGlzdF9pdGVtLT5uYW1lLCBpbmZvLT5wcmVmaXgsIGluZm8tPmZsYWdzKTsKK30KKworc3RhdGljIGludCBtb2R1bGVfZGVpbml0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBkZWluaXRfY2IgaW5mbyA9IERFSU5JVF9DQl9JTklUOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgbW9kdWxlX2xpc3QgbGlzdCA9IE1PRFVMRV9MSVNUX0lOSVQ7CisJaW50IHF1aWV0ID0gMDsKKwlpbnQgZm9yY2UgPSAwOworCWludCBhbGwgPSAwOworCisJc3RydWN0IG9wdGlvbiBtb2R1bGVfZGVpbml0X29wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIpKSwKKwkJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIpLCAwKSwKKwkJT1BUX0JPT0woMCwgImFsbCIsICZhbGwsIE5fKCJVbnJlZ2lzdGVyIGFsbCBzdWJtb2R1bGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJY29uc3QgY2hhciAqY29uc3QgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX2RlaW5pdF9vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAoYWxsICYmIGFyZ2MpIHsKKwkJZXJyb3IoInBhdGhzcGVjIGFuZCAtLWFsbCBhcmUgaW5jb21wYXRpYmxlIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwKKwkJCQkgICBtb2R1bGVfZGVpbml0X29wdGlvbnMpOworCX0KKworCWlmICghYXJnYyAmJiAhYWxsKQorCQlkaWUoXygiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIpKTsKKworCWlmIChtb2R1bGVfbGlzdF9jb21wdXRlKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnBhdGhzcGVjLCAmbGlzdCkgPCAwKQorCQlyZXR1cm4gMTsKKworCWluZm8ucHJlZml4ID0gcHJlZml4OworCWlmIChxdWlldCkKKwkJaW5mby5mbGFncyB8PSBPUFRfUVVJRVQ7CisJaWYgKGZvcmNlKQorCQlpbmZvLmZsYWdzIHw9IE9QVF9GT1JDRTsKKworCWZvcl9lYWNoX2xpc3RlZF9zdWJtb2R1bGUoJmxpc3QsIGRlaW5pdF9zdWJtb2R1bGVfY2IsICZpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsb25lX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpnaXRkaXIsIGNvbnN0IGNoYXIgKnVybCwKKwkJCSAgIGNvbnN0IGNoYXIgKmRlcHRoLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZmVyZW5jZSwgaW50IGRpc3NvY2lhdGUsCisJCQkgICBpbnQgcXVpZXQsIGludCBwcm9ncmVzcywgaW50IHNpbmdsZV9icmFuY2gpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJjbG9uZSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tbm8tY2hlY2tvdXQiKTsKKwlpZiAocXVpZXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tcXVpZXQiKTsKKwlpZiAocHJvZ3Jlc3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tcHJvZ3Jlc3MiKTsKKwlpZiAoZGVwdGggJiYgKmRlcHRoKQorCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiLS1kZXB0aCIsIGRlcHRoLCBOVUxMKTsKKwlpZiAocmVmZXJlbmNlLT5ucikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCByZWZlcmVuY2UpCisJCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiLS1yZWZlcmVuY2UiLAorCQkJCQkgaXRlbS0+c3RyaW5nLCBOVUxMKTsKKwl9CisJaWYgKGRpc3NvY2lhdGUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tZGlzc29jaWF0ZSIpOworCWlmIChnaXRkaXIgJiYgKmdpdGRpcikKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgIi0tc2VwYXJhdGUtZ2l0LWRpciIsIGdpdGRpciwgTlVMTCk7CisJaWYgKHNpbmdsZV9icmFuY2ggPj0gMCkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBzaW5nbGVfYnJhbmNoID8KKwkJCQkJICAiLS1zaW5nbGUtYnJhbmNoIiA6CisJCQkJCSAgIi0tbm8tc2luZ2xlLWJyYW5jaCIpOworCisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS0iKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHVybCk7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBwYXRoKTsKKworCWNwLmdpdF9jbWQgPSAxOworCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCWNwLm5vX3N0ZGluID0gMTsKKworCXJldHVybiBydW5fY29tbWFuZCgmY3ApOworfQorCitzdHJ1Y3Qgc3VibW9kdWxlX2FsdGVybmF0ZV9zZXR1cCB7CisJY29uc3QgY2hhciAqc3VibW9kdWxlX25hbWU7CisJZW51bSBTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX01PREUgeworCQlTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0RJRSwKKwkJU1VCTU9EVUxFX0FMVEVSTkFURV9FUlJPUl9JTkZPLAorCQlTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0lHTk9SRQorCX0gZXJyb3JfbW9kZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZmVyZW5jZTsKK307CisjZGVmaW5lIFNVQk1PRFVMRV9BTFRFUk5BVEVfU0VUVVBfSU5JVCB7IE5VTEwsIFwKKwlTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0lHTk9SRSwgTlVMTCB9CisKK3N0YXRpYyBjb25zdCBjaGFyIGFsdGVybmF0ZV9lcnJvcl9hZHZpY2VbXSA9IE5fKAorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorKTsKKworc3RhdGljIGludCBhZGRfcG9zc2libGVfcmVmZXJlbmNlX2Zyb21fc3VwZXJwcm9qZWN0KAorCQlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLCB2b2lkICpzYXNfY2IpCit7CisJc3RydWN0IHN1Ym1vZHVsZV9hbHRlcm5hdGVfc2V0dXAgKnNhcyA9IHNhc19jYjsKKwlzaXplX3QgbGVuOworCisJLyoKKwkgKiBJZiB0aGUgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSBpcyBhbm90aGVyIHJlcG9zaXRvcnksIHRyeSB0aGUKKwkgKiBzdGFuZGFyZCBsYXlvdXQgd2l0aCAuZ2l0Lyhtb2R1bGVzLzxuYW1lPikrL29iamVjdHMKKwkgKi8KKwlpZiAoc3RyaXBfc3VmZml4KG9kYi0+cGF0aCwgIi9vYmplY3RzIiwgJmxlbikpIHsKKwkJY2hhciAqc21fYWx0ZXJuYXRlOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGQoJnNiLCBvZGItPnBhdGgsIGxlbik7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBlbmQgdGhlIG5ldyBwYXRoIHdpdGggJy8nIHRvIG1hcmsgaXQgYXMgYSBkaXIsCisJCSAqIG90aGVyd2lzZSBhIHN1Ym1vZHVsZSBuYW1lIGNvbnRhaW5pbmcgJy8nIHdpbGwgYmUgYnJva2VuCisJCSAqIGFzIHRoZSBsYXN0IHBhcnQgb2YgYSBtaXNzaW5nIHN1Ym1vZHVsZSByZWZlcmVuY2Ugd291bGQKKwkJICogYmUgdGFrZW4gYXMgYSBmaWxlIG5hbWUuCisJCSAqLworCQlzdHJidWZfYWRkZigmc2IsICIvbW9kdWxlcy8lcy8iLCBzYXMtPnN1Ym1vZHVsZV9uYW1lKTsKKworCQlzbV9hbHRlcm5hdGUgPSBjb21wdXRlX2FsdGVybmF0ZV9wYXRoKHNiLmJ1ZiwgJmVycik7CisJCWlmIChzbV9hbHRlcm5hdGUpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZChzYXMtPnJlZmVyZW5jZSwgeHN0cmR1cChzYi5idWYpKTsKKwkJCWZyZWUoc21fYWx0ZXJuYXRlKTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoc2FzLT5lcnJvcl9tb2RlKSB7CisJCQljYXNlIFNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfRElFOgorCQkJCWlmIChhZHZpY2Vfc3VibW9kdWxlX2FsdGVybmF0ZV9lcnJvcl9zdHJhdGVneV9kaWUpCisJCQkJCWFkdmlzZShfKGFsdGVybmF0ZV9lcnJvcl9hZHZpY2UpKTsKKwkJCQlkaWUoXygic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIiksCisJCQkJICAgIHNhcy0+c3VibW9kdWxlX25hbWUsIGVyci5idWYpOworCQkJY2FzZSBTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0lORk86CisJCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIpLAorCQkJCQlzYXMtPnN1Ym1vZHVsZV9uYW1lLCBlcnIuYnVmKTsKKwkJCWNhc2UgU1VCTU9EVUxFX0FMVEVSTkFURV9FUlJPUl9JR05PUkU6CisJCQkJOyAvKiBub3RoaW5nICovCisJCQl9CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9wb3NzaWJsZV9hbHRlcm5hdGVzKGNvbnN0IGNoYXIgKnNtX25hbWUsCisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmZXJlbmNlKQoreworCWNoYXIgKnNtX2FsdGVybmF0ZSA9IE5VTEwsICplcnJvcl9zdHJhdGVneSA9IE5VTEw7CisJc3RydWN0IHN1Ym1vZHVsZV9hbHRlcm5hdGVfc2V0dXAgc2FzID0gU1VCTU9EVUxFX0FMVEVSTkFURV9TRVRVUF9JTklUOworCisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24iLCAmc21fYWx0ZXJuYXRlKTsKKwlpZiAoIXNtX2FsdGVybmF0ZSkKKwkJcmV0dXJuOworCisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSIsICZlcnJvcl9zdHJhdGVneSk7CisKKwlpZiAoIWVycm9yX3N0cmF0ZWd5KQorCQllcnJvcl9zdHJhdGVneSA9IHhzdHJkdXAoImRpZSIpOworCisJc2FzLnN1Ym1vZHVsZV9uYW1lID0gc21fbmFtZTsKKwlzYXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworCWlmICghc3RyY21wKGVycm9yX3N0cmF0ZWd5LCAiZGllIikpCisJCXNhcy5lcnJvcl9tb2RlID0gU1VCTU9EVUxFX0FMVEVSTkFURV9FUlJPUl9ESUU7CisJZWxzZSBpZiAoIXN0cmNtcChlcnJvcl9zdHJhdGVneSwgImluZm8iKSkKKwkJc2FzLmVycm9yX21vZGUgPSBTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0lORk87CisJZWxzZSBpZiAoIXN0cmNtcChlcnJvcl9zdHJhdGVneSwgImlnbm9yZSIpKQorCQlzYXMuZXJyb3JfbW9kZSA9IFNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfSUdOT1JFOworCWVsc2UKKwkJZGllKF8oIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIiksIGVycm9yX3N0cmF0ZWd5KTsKKworCWlmICghc3RyY21wKHNtX2FsdGVybmF0ZSwgInN1cGVycHJvamVjdCIpKQorCQlmb3JlYWNoX2FsdF9vZGIoYWRkX3Bvc3NpYmxlX3JlZmVyZW5jZV9mcm9tX3N1cGVycHJvamVjdCwgJnNhcyk7CisJZWxzZSBpZiAoIXN0cmNtcChzbV9hbHRlcm5hdGUsICJubyIpKQorCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwllbHNlCisJCWRpZShfKCJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gaXMgbm90IHJlY29nbml6ZWQiKSwgc21fYWx0ZXJuYXRlKTsKKworCWZyZWUoc21fYWx0ZXJuYXRlKTsKKwlmcmVlKGVycm9yX3N0cmF0ZWd5KTsKK30KKworc3RhdGljIGludCBtb2R1bGVfY2xvbmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEwsICp1cmwgPSBOVUxMLCAqZGVwdGggPSBOVUxMOworCWludCBxdWlldCA9IDA7CisJaW50IHByb2dyZXNzID0gMDsKKwljaGFyICpwLCAqcGF0aCA9IE5VTEwsICpzbV9naXRkaXI7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZlcmVuY2UgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCBkaXNzb2NpYXRlID0gMCwgcmVxdWlyZV9pbml0ID0gMDsKKwljaGFyICpzbV9hbHRlcm5hdGUgPSBOVUxMLCAqZXJyb3Jfc3RyYXRlZ3kgPSBOVUxMOworCWludCBzaW5nbGVfYnJhbmNoID0gLTE7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9jbG9uZV9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZwcmVmaXgsCisJCQkgICBOXygicGF0aCIpLAorCQkJICAgTl8oImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiKSksCisJCU9QVF9TVFJJTkcoMCwgInBhdGgiLCAmcGF0aCwKKwkJCSAgIE5fKCJwYXRoIiksCisJCQkgICBOXygid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iKSksCisJCU9QVF9TVFJJTkcoMCwgIm5hbWUiLCAmbmFtZSwKKwkJCSAgIE5fKCJzdHJpbmciKSwKKwkJCSAgIE5fKCJuYW1lIG9mIHRoZSBuZXcgc3VibW9kdWxlIikpLAorCQlPUFRfU1RSSU5HKDAsICJ1cmwiLCAmdXJsLAorCQkJICAgTl8oInN0cmluZyIpLAorCQkJICAgTl8oInVybCB3aGVyZSB0byBjbG9uZSB0aGUgc3VibW9kdWxlIGZyb20iKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAicmVmZXJlbmNlIiwgJnJlZmVyZW5jZSwKKwkJCSAgIE5fKCJyZXBvIiksCisJCQkgICBOXygicmVmZXJlbmNlIHJlcG9zaXRvcnkiKSksCisJCU9QVF9CT09MKDAsICJkaXNzb2NpYXRlIiwgJmRpc3NvY2lhdGUsCisJCQkgICBOXygidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIpKSwKKwkJT1BUX1NUUklORygwLCAiZGVwdGgiLCAmZGVwdGgsCisJCQkgICBOXygic3RyaW5nIiksCisJCQkgICBOXygiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIikpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwgIlN1cHByZXNzIG91dHB1dCBmb3IgY2xvbmluZyBhIHN1Ym1vZHVsZSIpLAorCQlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCisJCQkgICBOXygiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIpKSwKKwkJT1BUX0JPT0woMCwgInJlcXVpcmUtaW5pdCIsICZyZXF1aXJlX2luaXQsCisJCQkgICBOXygiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiKSksCisJCU9QVF9CT09MKDAsICJzaW5nbGUtYnJhbmNoIiwgJnNpbmdsZV9icmFuY2gsCisJCQkgTl8oImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWNvbnN0IGNoYXIgKmNvbnN0IGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdICIKKwkJICAgIlstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSAiCisJCSAgICJbLS1zaW5nbGUtYnJhbmNoXSAiCisJCSAgICItLXVybCA8dXJsPiAtLXBhdGggPHBhdGg+IiksCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBtb2R1bGVfY2xvbmVfb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MgfHwgIXVybCB8fCAhcGF0aCB8fCAhKnBhdGgpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwKKwkJCQkgICBtb2R1bGVfY2xvbmVfb3B0aW9ucyk7CisKKwlzdHJidWZfYWRkZigmc2IsICIlcy9tb2R1bGVzLyVzIiwgZ2V0X2dpdF9kaXIoKSwgbmFtZSk7CisJc21fZ2l0ZGlyID0gYWJzb2x1dGVfcGF0aGR1cChzYi5idWYpOworCXN0cmJ1Zl9yZXNldCgmc2IpOworCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKSB7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzLyVzIiwgZ2V0X2dpdF93b3JrX3RyZWUoKSwgcGF0aCk7CisJCXBhdGggPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJfSBlbHNlCisJCXBhdGggPSB4c3RyZHVwKHBhdGgpOworCisJaWYgKHZhbGlkYXRlX3N1Ym1vZHVsZV9naXRfZGlyKHNtX2dpdGRpciwgbmFtZSkgPCAwKQorCQlkaWUoXygicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgIgorCQkJImdpdCBkaXIiKSwgc21fZ2l0ZGlyKTsKKworCWlmICghZmlsZV9leGlzdHMoc21fZ2l0ZGlyKSkgeworCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChzbV9naXRkaXIpIDwgMCkKKwkJCWRpZShfKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiksIHNtX2dpdGRpcik7CisKKwkJcHJlcGFyZV9wb3NzaWJsZV9hbHRlcm5hdGVzKG5hbWUsICZyZWZlcmVuY2UpOworCisJCWlmIChjbG9uZV9zdWJtb2R1bGUocGF0aCwgc21fZ2l0ZGlyLCB1cmwsIGRlcHRoLCAmcmVmZXJlbmNlLCBkaXNzb2NpYXRlLAorCQkJCSAgICBxdWlldCwgcHJvZ3Jlc3MsIHNpbmdsZV9icmFuY2gpKQorCQkJZGllKF8oImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIpLAorCQkJICAgIHVybCwgcGF0aCk7CisJfSBlbHNlIHsKKwkJaWYgKHJlcXVpcmVfaW5pdCAmJiAhYWNjZXNzKHBhdGgsIFhfT0spICYmICFpc19lbXB0eV9kaXIocGF0aCkpCisJCQlkaWUoXygiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIpLCBwYXRoKTsKKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QocGF0aCkgPCAwKQorCQkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwgcGF0aCk7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL2luZGV4Iiwgc21fZ2l0ZGlyKTsKKwkJdW5saW5rX29yX3dhcm4oc2IuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZzYik7CisJfQorCisJY29ubmVjdF93b3JrX3RyZWVfYW5kX2dpdF9kaXIocGF0aCwgc21fZ2l0ZGlyLCAwKTsKKworCXAgPSBnaXRfcGF0aGR1cF9zdWJtb2R1bGUocGF0aCwgImNvbmZpZyIpOworCWlmICghcCkKKwkJZGllKF8oImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIpLCBwYXRoKTsKKworCS8qIHNldHVwIGFsdGVybmF0ZUxvY2F0aW9uIGFuZCBhbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGluIHRoZSBjbG9uZWQgc3VibW9kdWxlIGlmIG5lZWRlZCAqLworCWdpdF9jb25maWdfZ2V0X3N0cmluZygic3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIiwgJnNtX2FsdGVybmF0ZSk7CisJaWYgKHNtX2FsdGVybmF0ZSkKKwkJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShwLCAic3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIiwKKwkJCQkJICAgc21fYWx0ZXJuYXRlKTsKKwlnaXRfY29uZmlnX2dldF9zdHJpbmcoInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IiwgJmVycm9yX3N0cmF0ZWd5KTsKKwlpZiAoZXJyb3Jfc3RyYXRlZ3kpCisJCWdpdF9jb25maWdfc2V0X2luX2ZpbGUocCwgInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IiwKKwkJCQkJICAgZXJyb3Jfc3RyYXRlZ3kpOworCisJZnJlZShzbV9hbHRlcm5hdGUpOworCWZyZWUoZXJyb3Jfc3RyYXRlZ3kpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlmcmVlKHNtX2dpdGRpcik7CisJZnJlZShwYXRoKTsKKwlmcmVlKHApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXRlcm1pbmVfc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCWludCBqdXN0X2Nsb25lZCwKKwkJCQkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCQljb25zdCBjaGFyICp1cGRhdGUsCisJCQkJCQlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSAqb3V0KQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgociwgJm51bGxfb2lkLCBwYXRoKTsKKwljaGFyICprZXk7CisJY29uc3QgY2hhciAqdmFsOworCisJa2V5ID0geHN0cmZtdCgic3VibW9kdWxlLiVzLnVwZGF0ZSIsIHN1Yi0+bmFtZSk7CisKKwlpZiAodXBkYXRlKSB7CisJCWlmIChwYXJzZV9zdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5KHVwZGF0ZSwgb3V0KSA8IDApCisJCQlkaWUoXygiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIiksCisJCQkJdXBkYXRlLCBwYXRoKTsKKwl9IGVsc2UgaWYgKCFyZXBvX2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KHIsIGtleSwgJnZhbCkpIHsKKwkJaWYgKHBhcnNlX3N1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kodmFsLCBvdXQpIDwgMCkKKwkJCWRpZShfKCJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIpLAorCQkJCXZhbCwgcGF0aCk7CisJfSBlbHNlIGlmIChzdWItPnVwZGF0ZV9zdHJhdGVneS50eXBlICE9IFNNX1VQREFURV9VTlNQRUNJRklFRCkgeworCQlpZiAoc3ViLT51cGRhdGVfc3RyYXRlZ3kudHlwZSA9PSBTTV9VUERBVEVfQ09NTUFORCkKKwkJCUJVRygiaG93IGRpZCB3ZSByZWFkIHVwZGF0ZSA9ICFjb21tYW5kIGZyb20gLmdpdG1vZHVsZXM/Iik7CisJCW91dC0+dHlwZSA9IHN1Yi0+dXBkYXRlX3N0cmF0ZWd5LnR5cGU7CisJCW91dC0+Y29tbWFuZCA9IHN1Yi0+dXBkYXRlX3N0cmF0ZWd5LmNvbW1hbmQ7CisJfSBlbHNlCisJCW91dC0+dHlwZSA9IFNNX1VQREFURV9DSEVDS09VVDsKKworCWlmIChqdXN0X2Nsb25lZCAmJgorCSAgICAob3V0LT50eXBlID09IFNNX1VQREFURV9NRVJHRSB8fAorCSAgICAgb3V0LT50eXBlID09IFNNX1VQREFURV9SRUJBU0UgfHwKKwkgICAgIG91dC0+dHlwZSA9PSBTTV9VUERBVEVfTk9ORSkpCisJCW91dC0+dHlwZSA9IFNNX1VQREFURV9DSEVDS09VVDsKKworCWZyZWUoa2V5KTsKK30KKworc3RhdGljIGludCBtb2R1bGVfdXBkYXRlX21vZHVsZV9tb2RlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnBhdGgsICp1cGRhdGUgPSBOVUxMOworCWludCBqdXN0X2Nsb25lZDsKKwlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSB1cGRhdGVfc3RyYXRlZ3kgPSB7IC50eXBlID0gU01fVVBEQVRFX0NIRUNLT1VUIH07CisKKwlpZiAoYXJnYyA8IDMgfHwgYXJnYyA+IDQpCisJCWRpZSgic3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLW1vZHVsZS1jbG9uZSBleHBlY3RzIDxqdXN0LWNsb25lZD4gPHBhdGg+IFs8dXBkYXRlPl0iKTsKKworCWp1c3RfY2xvbmVkID0gZ2l0X2NvbmZpZ19pbnQoImp1c3RfY2xvbmVkIiwgYXJndlsxXSk7CisJcGF0aCA9IGFyZ3ZbMl07CisKKwlpZiAoYXJnYyA9PSA0KQorCQl1cGRhdGUgPSBhcmd2WzNdOworCisJZGV0ZXJtaW5lX3N1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kodGhlX3JlcG9zaXRvcnksCisJCQkJCSAgICBqdXN0X2Nsb25lZCwgcGF0aCwgdXBkYXRlLAorCQkJCQkgICAgJnVwZGF0ZV9zdHJhdGVneSk7CisJZnB1dHMoc3VibW9kdWxlX3N0cmF0ZWd5X3RvX3N0cmluZygmdXBkYXRlX3N0cmF0ZWd5KSwgc3Rkb3V0KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdXBkYXRlX2Nsb25lX2RhdGEgeworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl1bnNpZ25lZCBqdXN0X2Nsb25lZDsKK307CisKK3N0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX2Nsb25lIHsKKwkvKiBpbmRleCBpbnRvICdsaXN0JywgdGhlIGxpc3Qgb2Ygc3VibW9kdWxlcyB0byBsb29rIGludG8gZm9yIGNsb25pbmcgKi8KKwlpbnQgY3VycmVudDsKKwlzdHJ1Y3QgbW9kdWxlX2xpc3QgbGlzdDsKKwl1bnNpZ25lZCB3YXJuX2lmX3VuaW5pdGlhbGl6ZWQgOiAxOworCisJLyogdXBkYXRlIHBhcmFtZXRlciBwYXNzZWQgdmlhIGNvbW1hbmRsaW5lICovCisJc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kgdXBkYXRlOworCisJLyogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuICovCisJaW50IHByb2dyZXNzOworCWludCBxdWlldDsKKwlpbnQgcmVjb21tZW5kX3NoYWxsb3c7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZmVyZW5jZXM7CisJaW50IGRpc3NvY2lhdGU7CisJdW5zaWduZWQgcmVxdWlyZV9pbml0OworCWNvbnN0IGNoYXIgKmRlcHRoOworCWNvbnN0IGNoYXIgKnJlY3Vyc2l2ZV9wcmVmaXg7CisJY29uc3QgY2hhciAqcHJlZml4OworCWludCBzaW5nbGVfYnJhbmNoOworCisJLyogdG8gYmUgY29uc3VtZWQgYnkgZ2l0LXN1Ym1vZHVsZS5zaCAqLworCXN0cnVjdCB1cGRhdGVfY2xvbmVfZGF0YSAqdXBkYXRlX2Nsb25lOworCWludCB1cGRhdGVfY2xvbmVfbnI7IGludCB1cGRhdGVfY2xvbmVfYWxsb2M7CisKKwkvKiBJZiB3ZSB3YW50IHRvIHN0b3AgYXMgZmFzdCBhcyBwb3NzaWJsZSBhbmQgcmV0dXJuIGFuIGVycm9yICovCisJdW5zaWduZWQgcXVpY2tzdG9wIDogMTsKKworCS8qIGZhaWxlZCBjbG9uZXMgdG8gYmUgcmV0cmllZCBhZ2FpbiAqLworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqKmZhaWxlZF9jbG9uZXM7CisJaW50IGZhaWxlZF9jbG9uZXNfbnIsIGZhaWxlZF9jbG9uZXNfYWxsb2M7CisKKwlpbnQgbWF4X2pvYnM7Cit9OworI2RlZmluZSBTVUJNT0RVTEVfVVBEQVRFX0NMT05FX0lOSVQgeyBcCisJLmxpc3QgPSBNT0RVTEVfTElTVF9JTklULCBcCisJLnVwZGF0ZSA9IFNVQk1PRFVMRV9VUERBVEVfU1RSQVRFR1lfSU5JVCwgXAorCS5yZWNvbW1lbmRfc2hhbGxvdyA9IC0xLCBcCisJLnJlZmVyZW5jZXMgPSBTVFJJTkdfTElTVF9JTklUX0RVUCwgXAorCS5zaW5nbGVfYnJhbmNoID0gLTEsIFwKKwkubWF4X2pvYnMgPSAxLCBcCit9CisKKworc3RhdGljIHZvaWQgbmV4dF9zdWJtb2R1bGVfd2Fybl9taXNzaW5nKHN0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX2Nsb25lICpzdWMsCisJCXN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqZGlzcGxheXBhdGgpCit7CisJLyoKKwkgKiBPbmx5IG1lbnRpb24gdW5pbml0aWFsaXplZCBzdWJtb2R1bGVzIHdoZW4gdGhlaXIKKwkgKiBwYXRocyBoYXZlIGJlZW4gc3BlY2lmaWVkLgorCSAqLworCWlmIChzdWMtPndhcm5faWZfdW5pbml0aWFsaXplZCkgeworCQlzdHJidWZfYWRkZihvdXQsCisJCQlfKCJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIpLAorCQkJZGlzcGxheXBhdGgpOworCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwkJc3RyYnVmX2FkZHN0cihvdXQsCisJCQlfKCJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIpKTsKKwkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJfQorfQorCisvKioKKyAqIERldGVybWluZSB3aGV0aGVyICdjZScgbmVlZHMgdG8gYmUgY2xvbmVkLiBJZiBzbywgcHJlcGFyZSB0aGUgJ2NoaWxkJyB0bworICogcnVuIHRoZSBjbG9uZS4gUmV0dXJucyAxIGlmICdjZScgbmVlZHMgdG8gYmUgY2xvbmVkLCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBwcmVwYXJlX3RvX2Nsb25lX25leHRfc3VibW9kdWxlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJCSAgIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCwKKwkJCQkJICAgc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfY2xvbmUgKnN1YywKKwkJCQkJICAgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YiA9IE5VTEw7CisJY29uc3QgY2hhciAqdXJsID0gTlVMTDsKKwljb25zdCBjaGFyICp1cGRhdGVfc3RyaW5nOworCWVudW0gc3VibW9kdWxlX3VwZGF0ZV90eXBlIHVwZGF0ZV90eXBlOworCWNoYXIgKmtleTsKKwlzdHJ1Y3Qgc3RyYnVmIGRpc3BsYXlwYXRoX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmRpc3BsYXlwYXRoID0gTlVMTDsKKwlpbnQgbmVlZHNfY2xvbmluZyA9IDA7CisJaW50IG5lZWRfZnJlZV91cmwgPSAwOworCisJaWYgKGNlX3N0YWdlKGNlKSkgeworCQlpZiAoc3VjLT5yZWN1cnNpdmVfcHJlZml4KQorCQkJc3RyYnVmX2FkZGYoJnNiLCAiJXMvJXMiLCBzdWMtPnJlY3Vyc2l2ZV9wcmVmaXgsIGNlLT5uYW1lKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cigmc2IsIGNlLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGYob3V0LCBfKCJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiKSwgc2IuYnVmKTsKKwkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIGNlLT5uYW1lKTsKKworCWlmIChzdWMtPnJlY3Vyc2l2ZV9wcmVmaXgpCisJCWRpc3BsYXlwYXRoID0gcmVsYXRpdmVfcGF0aChzdWMtPnJlY3Vyc2l2ZV9wcmVmaXgsCisJCQkJCSAgICBjZS0+bmFtZSwgJmRpc3BsYXlwYXRoX3NiKTsKKwllbHNlCisJCWRpc3BsYXlwYXRoID0gY2UtPm5hbWU7CisKKwlpZiAoIXN1YikgeworCQluZXh0X3N1Ym1vZHVsZV93YXJuX21pc3Npbmcoc3VjLCBvdXQsIGRpc3BsYXlwYXRoKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWtleSA9IHhzdHJmbXQoInN1Ym1vZHVsZS4lcy51cGRhdGUiLCBzdWItPm5hbWUpOworCWlmICghcmVwb19jb25maWdfZ2V0X3N0cmluZ19jb25zdCh0aGVfcmVwb3NpdG9yeSwga2V5LCAmdXBkYXRlX3N0cmluZykpIHsKKwkJdXBkYXRlX3R5cGUgPSBwYXJzZV9zdWJtb2R1bGVfdXBkYXRlX3R5cGUodXBkYXRlX3N0cmluZyk7CisJfSBlbHNlIHsKKwkJdXBkYXRlX3R5cGUgPSBzdWItPnVwZGF0ZV9zdHJhdGVneS50eXBlOworCX0KKwlmcmVlKGtleSk7CisKKwlpZiAoc3VjLT51cGRhdGUudHlwZSA9PSBTTV9VUERBVEVfTk9ORQorCSAgICB8fCAoc3VjLT51cGRhdGUudHlwZSA9PSBTTV9VUERBVEVfVU5TUEVDSUZJRUQKKwkJJiYgdXBkYXRlX3R5cGUgPT0gU01fVVBEQVRFX05PTkUpKSB7CisJCXN0cmJ1Zl9hZGRmKG91dCwgXygiU2tpcHBpbmcgc3VibW9kdWxlICclcyciKSwgZGlzcGxheXBhdGgpOworCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qIENoZWNrIGlmIHRoZSBzdWJtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICovCisJaWYgKCFpc19zdWJtb2R1bGVfYWN0aXZlKHRoZV9yZXBvc2l0b3J5LCBjZS0+bmFtZSkpIHsKKwkJbmV4dF9zdWJtb2R1bGVfd2Fybl9taXNzaW5nKHN1Yywgb3V0LCBkaXNwbGF5cGF0aCk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdHJidWZfYWRkZigmc2IsICJzdWJtb2R1bGUuJXMudXJsIiwgc3ViLT5uYW1lKTsKKwlpZiAocmVwb19jb25maWdfZ2V0X3N0cmluZ19jb25zdCh0aGVfcmVwb3NpdG9yeSwgc2IuYnVmLCAmdXJsKSkgeworCQlpZiAoc3RhcnRzX3dpdGhfZG90X3NsYXNoKHN1Yi0+dXJsKSB8fAorCQkgICAgc3RhcnRzX3dpdGhfZG90X2RvdF9zbGFzaChzdWItPnVybCkpIHsKKwkJCXVybCA9IGNvbXB1dGVfc3VibW9kdWxlX2Nsb25lX3VybChzdWItPnVybCk7CisJCQluZWVkX2ZyZWVfdXJsID0gMTsKKwkJfSBlbHNlCisJCQl1cmwgPSBzdWItPnVybDsKKwl9CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdHJidWZfYWRkZigmc2IsICIlcy8uZ2l0IiwgY2UtPm5hbWUpOworCW5lZWRzX2Nsb25pbmcgPSAhZmlsZV9leGlzdHMoc2IuYnVmKTsKKworCUFMTE9DX0dST1coc3VjLT51cGRhdGVfY2xvbmUsIHN1Yy0+dXBkYXRlX2Nsb25lX25yICsgMSwKKwkJICAgc3VjLT51cGRhdGVfY2xvbmVfYWxsb2MpOworCW9pZGNweSgmc3VjLT51cGRhdGVfY2xvbmVbc3VjLT51cGRhdGVfY2xvbmVfbnJdLm9pZCwgJmNlLT5vaWQpOworCXN1Yy0+dXBkYXRlX2Nsb25lW3N1Yy0+dXBkYXRlX2Nsb25lX25yXS5qdXN0X2Nsb25lZCA9IG5lZWRzX2Nsb25pbmc7CisJc3VjLT51cGRhdGVfY2xvbmVbc3VjLT51cGRhdGVfY2xvbmVfbnJdLnN1YiA9IHN1YjsKKwlzdWMtPnVwZGF0ZV9jbG9uZV9ucisrOworCisJaWYgKCFuZWVkc19jbG9uaW5nKQorCQlnb3RvIGNsZWFudXA7CisKKwljaGlsZC0+Z2l0X2NtZCA9IDE7CisJY2hpbGQtPm5vX3N0ZGluID0gMTsKKwljaGlsZC0+c3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJY2hpbGQtPmVyciA9IC0xOworCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsICJzdWJtb2R1bGUtLWhlbHBlciIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsICJjbG9uZSIpOworCWlmIChzdWMtPnByb2dyZXNzKQorCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLT5hcmdzLCAiLS1wcm9ncmVzcyIpOworCWlmIChzdWMtPnF1aWV0KQorCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLT5hcmdzLCAiLS1xdWlldCIpOworCWlmIChzdWMtPnByZWZpeCkKKwkJYXJndl9hcnJheV9wdXNobCgmY2hpbGQtPmFyZ3MsICItLXByZWZpeCIsIHN1Yy0+cHJlZml4LCBOVUxMKTsKKwlpZiAoc3VjLT5yZWNvbW1lbmRfc2hhbGxvdyAmJiBzdWItPnJlY29tbWVuZF9zaGFsbG93ID09IDEpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsICItLWRlcHRoPTEiKTsKKwlpZiAoc3VjLT5yZXF1aXJlX2luaXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsICItLXJlcXVpcmUtaW5pdCIpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNoaWxkLT5hcmdzLCAiLS1wYXRoIiwgc3ViLT5wYXRoLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC0+YXJncywgIi0tbmFtZSIsIHN1Yi0+bmFtZSwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNobCgmY2hpbGQtPmFyZ3MsICItLXVybCIsIHVybCwgTlVMTCk7CisJaWYgKHN1Yy0+cmVmZXJlbmNlcy5ucikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmc3VjLT5yZWZlcmVuY2VzKQorCQkJYXJndl9hcnJheV9wdXNobCgmY2hpbGQtPmFyZ3MsICItLXJlZmVyZW5jZSIsIGl0ZW0tPnN0cmluZywgTlVMTCk7CisJfQorCWlmIChzdWMtPmRpc3NvY2lhdGUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQtPmFyZ3MsICItLWRpc3NvY2lhdGUiKTsKKwlpZiAoc3VjLT5kZXB0aCkKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgc3VjLT5kZXB0aCk7CisJaWYgKHN1Yy0+c2luZ2xlX2JyYW5jaCA+PSAwKQorCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLT5hcmdzLCBzdWMtPnNpbmdsZV9icmFuY2ggPworCQkJCQkgICAgICAiLS1zaW5nbGUtYnJhbmNoIiA6CisJCQkJCSAgICAgICItLW5vLXNpbmdsZS1icmFuY2giKTsKKworY2xlYW51cDoKKwlzdHJidWZfcmVzZXQoJmRpc3BsYXlwYXRoX3NiKTsKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlpZiAobmVlZF9mcmVlX3VybCkKKwkJZnJlZSgodm9pZCopdXJsKTsKKworCXJldHVybiBuZWVkc19jbG9uaW5nOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9jbG9uZV9nZXRfbmV4dF90YXNrKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIsCisJCQkJICAgICAgdm9pZCAqc3VjX2NiLAorCQkJCSAgICAgIHZvaWQgKippZHhfdGFza19jYikKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSAqc3VjID0gc3VjX2NiOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IGluZGV4OworCisJZm9yICg7IHN1Yy0+Y3VycmVudCA8IHN1Yy0+bGlzdC5ucjsgc3VjLT5jdXJyZW50KyspIHsKKwkJY2UgPSBzdWMtPmxpc3QuZW50cmllc1tzdWMtPmN1cnJlbnRdOworCQlpZiAocHJlcGFyZV90b19jbG9uZV9uZXh0X3N1Ym1vZHVsZShjZSwgY2hpbGQsIHN1YywgZXJyKSkgeworCQkJaW50ICpwID0geG1hbGxvYyhzaXplb2YoKnApKTsKKwkJCSpwID0gc3VjLT5jdXJyZW50OworCQkJKmlkeF90YXNrX2NiID0gcDsKKwkJCXN1Yy0+Y3VycmVudCsrOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKgorCSAqIFRoZSBsb29wIGFib3ZlIHRyaWVkIGNsb25pbmcgZWFjaCBzdWJtb2R1bGUgb25jZSwgbm93IHRyeSB0aGUKKwkgKiBzdHJhZ2dsZXJzIGFnYWluLCB3aGljaCB3ZSBjYW4gaW1hZ2luZSBhcyBhbiBleHRlbnNpb24gb2YgdGhlCisJICogZW50cnkgbGlzdC4KKwkgKi8KKwlpbmRleCA9IHN1Yy0+Y3VycmVudCAtIHN1Yy0+bGlzdC5ucjsKKwlpZiAoaW5kZXggPCBzdWMtPmZhaWxlZF9jbG9uZXNfbnIpIHsKKwkJaW50ICpwOworCQljZSA9IHN1Yy0+ZmFpbGVkX2Nsb25lc1tpbmRleF07CisJCWlmICghcHJlcGFyZV90b19jbG9uZV9uZXh0X3N1Ym1vZHVsZShjZSwgY2hpbGQsIHN1YywgZXJyKSkgeworCQkJc3VjLT5jdXJyZW50ICsrOworCQkJc3RyYnVmX2FkZHN0cihlcnIsICJCVUc6IHN1Ym1vZHVsZSBjb25zaWRlcmVkIGZvciAiCisJCQkJCSAgICJjbG9uaW5nLCBkb2Vzbid0IG5lZWQgY2xvbmluZyAiCisJCQkJCSAgICJhbnkgbW9yZT9cbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcCA9IHhtYWxsb2Moc2l6ZW9mKCpwKSk7CisJCSpwID0gc3VjLT5jdXJyZW50OworCQkqaWR4X3Rhc2tfY2IgPSBwOworCQlzdWMtPmN1cnJlbnQgKys7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9jbG9uZV9zdGFydF9mYWlsdXJlKHN0cnVjdCBzdHJidWYgKmVyciwKKwkJCQkgICAgICB2b2lkICpzdWNfY2IsCisJCQkJICAgICAgdm9pZCAqaWR4X3Rhc2tfY2IpCit7CisJc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfY2xvbmUgKnN1YyA9IHN1Y19jYjsKKwlzdWMtPnF1aWNrc3RvcCA9IDE7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2Nsb25lX3Rhc2tfZmluaXNoZWQoaW50IHJlc3VsdCwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIsCisJCQkJICAgICAgdm9pZCAqc3VjX2NiLAorCQkJCSAgICAgIHZvaWQgKmlkeF90YXNrX2NiKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfY2xvbmUgKnN1YyA9IHN1Y19jYjsKKworCWludCAqaWR4UCA9IGlkeF90YXNrX2NiOworCWludCBpZHggPSAqaWR4UDsKKwlmcmVlKGlkeFApOworCisJaWYgKCFyZXN1bHQpCisJCXJldHVybiAwOworCisJaWYgKGlkeCA8IHN1Yy0+bGlzdC5ucikgeworCQljZSAgPSBzdWMtPmxpc3QuZW50cmllc1tpZHhdOworCQlzdHJidWZfYWRkZihlcnIsIF8oIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiKSwKKwkJCSAgICBjZS0+bmFtZSk7CisJCXN0cmJ1Zl9hZGRjaChlcnIsICdcbicpOworCQlBTExPQ19HUk9XKHN1Yy0+ZmFpbGVkX2Nsb25lcywKKwkJCSAgIHN1Yy0+ZmFpbGVkX2Nsb25lc19uciArIDEsCisJCQkgICBzdWMtPmZhaWxlZF9jbG9uZXNfYWxsb2MpOworCQlzdWMtPmZhaWxlZF9jbG9uZXNbc3VjLT5mYWlsZWRfY2xvbmVzX25yKytdID0gY2U7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWlkeCAtPSBzdWMtPmxpc3QubnI7CisJCWNlICA9IHN1Yy0+ZmFpbGVkX2Nsb25lc1tpZHhdOworCQlzdHJidWZfYWRkZihlcnIsIF8oIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIiksCisJCQkgICAgY2UtPm5hbWUpOworCQlzdHJidWZfYWRkY2goZXJyLCAnXG4nKTsKKwkJc3VjLT5xdWlja3N0b3AgPSAxOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfdXBkYXRlX2Nsb25lX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJCSAgIHZvaWQgKmNiKQoreworCWludCAqbWF4X2pvYnMgPSBjYjsKKwlpZiAoIXN0cmNtcCh2YXIsICJzdWJtb2R1bGUuZmV0Y2hqb2JzIikpCisJCSptYXhfam9icyA9IHBhcnNlX3N1Ym1vZHVsZV9mZXRjaGpvYnModmFyLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zdWJtb2R1bGUoc3RydWN0IHVwZGF0ZV9jbG9uZV9kYXRhICp1Y2QpCit7CisJZnByaW50ZihzdGRvdXQsICJkdW1teSAlcyAlZFx0JXNcbiIsCisJCW9pZF90b19oZXgoJnVjZC0+b2lkKSwKKwkJdWNkLT5qdXN0X2Nsb25lZCwKKwkJdWNkLT5zdWItPnBhdGgpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9zdWJtb2R1bGVzKHN0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX2Nsb25lICpzdWMpCit7CisJaW50IGk7CisKKwlydW5fcHJvY2Vzc2VzX3BhcmFsbGVsX3RyMihzdWMtPm1heF9qb2JzLCB1cGRhdGVfY2xvbmVfZ2V0X25leHRfdGFzaywKKwkJCQkgICB1cGRhdGVfY2xvbmVfc3RhcnRfZmFpbHVyZSwKKwkJCQkgICB1cGRhdGVfY2xvbmVfdGFza19maW5pc2hlZCwgc3VjLCAic3VibW9kdWxlIiwKKwkJCQkgICAicGFyYWxsZWwvdXBkYXRlIik7CisKKwkvKgorCSAqIFdlIHNhdmVkIHRoZSBvdXRwdXQgYW5kIHB1dCBpdCBvdXQgYWxsIGF0IG9uY2Ugbm93LgorCSAqIFRoYXQgbWVhbnM6CisJICogLSB0aGUgbGlzdGVuZXIgZG9lcyBub3QgaGF2ZSB0byBpbnRlcmxlYXZlIHRoZWlyIChjaGVja291dCkKKwkgKiAgIHdvcmsgd2l0aCBvdXIgZmV0Y2hpbmcuICBUaGUgd3JpdGVzIGludm9sdmVkIGluIGEKKwkgKiAgIGNoZWNrb3V0IGludm9sdmUgbW9yZSBzdHJhaWdodGZvcndhcmQgc2VxdWVudGlhbCBJL08uCisJICogLSB0aGUgbGlzdGVuZXIgY2FuIGF2b2lkIGRvaW5nIGFueSB3b3JrIGlmIGZldGNoaW5nIGZhaWxlZC4KKwkgKi8KKwlpZiAoc3VjLT5xdWlja3N0b3ApCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IHN1Yy0+dXBkYXRlX2Nsb25lX25yOyBpKyspCisJCXVwZGF0ZV9zdWJtb2R1bGUoJnN1Yy0+dXBkYXRlX2Nsb25lW2ldKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9jbG9uZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICp1cGRhdGUgPSBOVUxMOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9jbG9uZSBzdWMgPSBTVUJNT0RVTEVfVVBEQVRFX0NMT05FX0lOSVQ7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV91cGRhdGVfY2xvbmVfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJwcmVmaXgiLCAmcHJlZml4LAorCQkJICAgTl8oInBhdGgiKSwKKwkJCSAgIE5fKCJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX1NUUklORygwLCAicmVjdXJzaXZlLXByZWZpeCIsICZzdWMucmVjdXJzaXZlX3ByZWZpeCwKKwkJCSAgIE5fKCJwYXRoIiksCisJCQkgICBOXygicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgIgorCQkJICAgICAgInN1Ym1vZHVsZSBib3VuZGFyaWVzIikpLAorCQlPUFRfU1RSSU5HKDAsICJ1cGRhdGUiLCAmdXBkYXRlLAorCQkJICAgTl8oInN0cmluZyIpLAorCQkJICAgTl8oInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAicmVmZXJlbmNlIiwgJnN1Yy5yZWZlcmVuY2VzLCBOXygicmVwbyIpLAorCQkJICAgTl8oInJlZmVyZW5jZSByZXBvc2l0b3J5IikpLAorCQlPUFRfQk9PTCgwLCAiZGlzc29jaWF0ZSIsICZzdWMuZGlzc29jaWF0ZSwKKwkJCSAgIE5fKCJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIikpLAorCQlPUFRfU1RSSU5HKDAsICJkZXB0aCIsICZzdWMuZGVwdGgsICI8ZGVwdGg+IiwKKwkJCSAgIE5fKCJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgIgorCQkJICAgICAgInNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIikpLAorCQlPUFRfSU5URUdFUignaicsICJqb2JzIiwgJnN1Yy5tYXhfam9icywKKwkJCSAgICBOXygicGFyYWxsZWwgam9icyIpKSwKKwkJT1BUX0JPT0woMCwgInJlY29tbWVuZC1zaGFsbG93IiwgJnN1Yy5yZWNvbW1lbmRfc2hhbGxvdywKKwkJCSAgICBOXygid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIikpLAorCQlPUFRfX1FVSUVUKCZzdWMucXVpZXQsIE5fKCJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIikpLAorCQlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmc3VjLnByb2dyZXNzLAorCQkJICAgIE5fKCJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIikpLAorCQlPUFRfQk9PTCgwLCAicmVxdWlyZS1pbml0IiwgJnN1Yy5yZXF1aXJlX2luaXQsCisJCQkgICBOXygiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiKSksCisJCU9QVF9CT09MKDAsICJzaW5nbGUtYnJhbmNoIiwgJnN1Yy5zaW5nbGVfYnJhbmNoLAorCQkJIE5fKCJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giKSksCisJCU9QVF9FTkQoKQorCX07CisKKwljb25zdCBjaGFyICpjb25zdCBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZVtdID0geworCQlOXygiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIpLAorCQlOVUxMCisJfTsKKwlzdWMucHJlZml4ID0gcHJlZml4OworCisJdXBkYXRlX2Nsb25lX2NvbmZpZ19mcm9tX2dpdG1vZHVsZXMoJnN1Yy5tYXhfam9icyk7CisJZ2l0X2NvbmZpZyhnaXRfdXBkYXRlX2Nsb25lX2NvbmZpZywgJnN1Yy5tYXhfam9icyk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG1vZHVsZV91cGRhdGVfY2xvbmVfb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2UsIDApOworCisJaWYgKHVwZGF0ZSkKKwkJaWYgKHBhcnNlX3N1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kodXBkYXRlLCAmc3VjLnVwZGF0ZSkgPCAwKQorCQkJZGllKF8oImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIpKTsKKworCWlmIChtb2R1bGVfbGlzdF9jb21wdXRlKGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnBhdGhzcGVjLCAmc3VjLmxpc3QpIDwgMCkKKwkJcmV0dXJuIDE7CisKKwlpZiAocGF0aHNwZWMubnIpCisJCXN1Yy53YXJuX2lmX3VuaW5pdGlhbGl6ZWQgPSAxOworCisJcmV0dXJuIHVwZGF0ZV9zdWJtb2R1bGVzKCZzdWMpOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfcmVsYXRpdmVfcGF0aChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaWYgKGFyZ2MgIT0gMykKKwkJZGllKCJzdWJtb2R1bGUtLWhlbHBlciByZWxhdGl2ZS1wYXRoIHRha2VzIGV4YWN0bHkgMiBhcmd1bWVudHMsIGdvdCAlZCIsIGFyZ2MpOworCisJcHJpbnRmKCIlcyIsIHJlbGF0aXZlX3BhdGgoYXJndlsxXSwgYXJndlsyXSwgJnNiKSk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlbW90ZV9zdWJtb2R1bGVfYnJhbmNoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCWNvbnN0IGNoYXIgKmJyYW5jaCA9IE5VTEw7CisJY2hhciAqa2V5OworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKwlpZiAoIXN1YikKKwkJcmV0dXJuIE5VTEw7CisKKwlrZXkgPSB4c3RyZm10KCJzdWJtb2R1bGUuJXMuYnJhbmNoIiwgc3ViLT5uYW1lKTsKKwlpZiAocmVwb19jb25maWdfZ2V0X3N0cmluZ19jb25zdCh0aGVfcmVwb3NpdG9yeSwga2V5LCAmYnJhbmNoKSkKKwkJYnJhbmNoID0gc3ViLT5icmFuY2g7CisJZnJlZShrZXkpOworCisJaWYgKCFicmFuY2gpCisJCXJldHVybiAibWFzdGVyIjsKKworCWlmICghc3RyY21wKGJyYW5jaCwgIi4iKSkgeworCQljb25zdCBjaGFyICpyZWZuYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgMCwgTlVMTCwgTlVMTCk7CisKKwkJaWYgKCFyZWZuYW1lKQorCQkJZGllKF8oIk5vIHN1Y2ggcmVmOiAlcyIpLCAiSEVBRCIpOworCisJCS8qIGRldGFjaGVkIEhFQUQgKi8KKwkJaWYgKCFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKSkKKwkJCWRpZShfKCJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0ICIKKwkJCSAgICAgICJicmFuY2ggZnJvbSBzdXBlcnByb2plY3QsIGJ1dCB0aGUgc3VwZXJwcm9qZWN0ICIKKwkJCSAgICAgICJpcyBub3Qgb24gYW55IGJyYW5jaCIpLCBzdWItPm5hbWUpOworCisJCWlmICghc2tpcF9wcmVmaXgocmVmbmFtZSwgInJlZnMvaGVhZHMvIiwgJnJlZm5hbWUpKQorCQkJZGllKF8oIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIpLCByZWZuYW1lKTsKKwkJcmV0dXJuIHJlZm5hbWU7CisJfQorCisJcmV0dXJuIGJyYW5jaDsKK30KKworc3RhdGljIGludCByZXNvbHZlX3JlbW90ZV9zdWJtb2R1bGVfYnJhbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnJldDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaWYgKGFyZ2MgIT0gMikKKwkJZGllKCJzdWJtb2R1bGUtLWhlbHBlciByZW1vdGUtYnJhbmNoIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50cywgZ290ICVkIiwgYXJnYyk7CisKKwlyZXQgPSByZW1vdGVfc3VibW9kdWxlX2JyYW5jaChhcmd2WzFdKTsKKwlpZiAoIXJldCkKKwkJZGllKCJzdWJtb2R1bGUgJXMgZG9lc24ndCBleGlzdCIsIGFyZ3ZbMV0pOworCisJcHJpbnRmKCIlcyIsIHJldCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXNoX2NoZWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwljb25zdCBjaGFyICpzdXBlcnByb2plY3RfaGVhZDsKKwljaGFyICpoZWFkOworCWludCBkZXRhY2hlZF9oZWFkID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCisJaWYgKGFyZ2MgPCAzKQorCQlkaWUoInN1Ym1vZHVsZS0taGVscGVyIHB1c2gtY2hlY2sgcmVxdWlyZXMgYXQgbGVhc3QgMiBhcmd1bWVudHMiKTsKKworCS8qCisJICogc3VwZXJwcm9qZWN0J3MgcmVzb2x2ZWQgaGVhZCByZWYuCisJICogaWYgSEVBRCB0aGVuIHRoZSBzdXBlcnByb2plY3QgaXMgaW4gYSBkZXRhY2hlZCBoZWFkIHN0YXRlLCBvdGhlcndpc2UKKwkgKiBpdCB3aWxsIGJlIHRoZSByZXNvbHZlZCBoZWFkIHJlZi4KKwkgKi8KKwlzdXBlcnByb2plY3RfaGVhZCA9IGFyZ3ZbMV07CisJYXJndisrOworCWFyZ2MtLTsKKwkvKiBHZXQgdGhlIHN1Ym1vZHVsZSdzIGhlYWQgcmVmIGFuZCBkZXRlcm1pbmUgaWYgaXQgaXMgZGV0YWNoZWQgKi8KKwloZWFkID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCAmaGVhZF9vaWQsIE5VTEwpOworCWlmICghaGVhZCkKKwkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIikpOworCWlmICghc3RyY21wKGhlYWQsICJIRUFEIikpCisJCWRldGFjaGVkX2hlYWQgPSAxOworCisJLyoKKwkgKiBUaGUgcmVtb3RlIG11c3QgYmUgY29uZmlndXJlZC4KKwkgKiBUaGlzIGlzIHRvIGF2b2lkIHB1c2hpbmcgdG8gdGhlIGV4YWN0IHNhbWUgVVJMIGFzIHRoZSBwYXJlbnQuCisJICovCisJcmVtb3RlID0gcHVzaHJlbW90ZV9nZXQoYXJndlsxXSk7CisJaWYgKCFyZW1vdGUgfHwgcmVtb3RlLT5vcmlnaW4gPT0gUkVNT1RFX1VOQ09ORklHVVJFRCkKKwkJZGllKCJyZW1vdGUgJyVzJyBub3QgY29uZmlndXJlZCIsIGFyZ3ZbMV0pOworCisJLyogQ2hlY2sgdGhlIHJlZnNwZWMgKi8KKwlpZiAoYXJnYyA+IDIpIHsKKwkJaW50IGk7CisJCXN0cnVjdCByZWYgKmxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKKwkJc3RydWN0IHJlZnNwZWMgcmVmc3BlYyA9IFJFRlNQRUNfSU5JVF9QVVNIOworCisJCXJlZnNwZWNfYXBwZW5kbigmcmVmc3BlYywgYXJndiArIDIsIGFyZ2MgLSAyKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcmVmc3BlYy5ucjsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgcmVmc3BlY19pdGVtICpycyA9ICZyZWZzcGVjLml0ZW1zW2ldOworCisJCQlpZiAocnMtPnBhdHRlcm4gfHwgcnMtPm1hdGNoaW5nKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBMSFMgbXVzdCBtYXRjaCBhIHNpbmdsZSByZWYgKi8KKwkJCXN3aXRjaCAoY291bnRfcmVmc3BlY19tYXRjaChycy0+c3JjLCBsb2NhbF9yZWZzLCBOVUxMKSkgeworCQkJY2FzZSAxOgorCQkJCWJyZWFrOworCQkJY2FzZSAwOgorCQkJCS8qCisJCQkJICogSWYgTEhTIG1hdGNoZXMgJ0hFQUQnIHRoZW4gd2UgbmVlZCB0byBlbnN1cmUKKwkJCQkgKiB0aGF0IGl0IG1hdGNoZXMgdGhlIHNhbWUgbmFtZWQgYnJhbmNoCisJCQkJICogY2hlY2tlZCBvdXQgaW4gdGhlIHN1cGVycHJvamVjdC4KKwkJCQkgKi8KKwkJCQlpZiAoIXN0cmNtcChycy0+c3JjLCAiSEVBRCIpKSB7CisJCQkJCWlmICghZGV0YWNoZWRfaGVhZCAmJgorCQkJCQkgICAgIXN0cmNtcChoZWFkLCBzdXBlcnByb2plY3RfaGVhZCkpCisJCQkJCQlicmVhazsKKwkJCQkJZGllKCJIRUFEIGRvZXMgbm90IG1hdGNoIHRoZSBuYW1lZCBicmFuY2ggaW4gdGhlIHN1cGVycHJvamVjdCIpOworCQkJCX0KKwkJCQkvKiBmYWxsdGhyb3VnaCAqLworCQkJZGVmYXVsdDoKKwkJCQlkaWUoInNyYyByZWZzcGVjICclcycgbXVzdCBuYW1lIGEgcmVmIiwKKwkJCQkgICAgcnMtPnNyYyk7CisJCQl9CisJCX0KKwkJcmVmc3BlY19jbGVhcigmcmVmc3BlYyk7CisJfQorCWZyZWUoaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbnN1cmVfY29yZV93b3JrdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CisJY29uc3QgY2hhciAqcGF0aDsKKwljaGFyICpjdzsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSBzdWJyZXBvOworCisJaWYgKGFyZ2MgIT0gMikKKwkJQlVHKCJzdWJtb2R1bGUtLWhlbHBlciBlbnN1cmUtY29yZS13b3JrdHJlZSA8cGF0aD4iKTsKKworCXBhdGggPSBhcmd2WzFdOworCisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aCh0aGVfcmVwb3NpdG9yeSwgJm51bGxfb2lkLCBwYXRoKTsKKwlpZiAoIXN1YikKKwkJQlVHKCJXZSBjb3VsZCBnZXQgdGhlIHN1Ym1vZHVsZSBoYW5kbGUgYmVmb3JlPyIpOworCisJaWYgKHJlcG9fc3VibW9kdWxlX2luaXQoJnN1YnJlcG8sIHRoZV9yZXBvc2l0b3J5LCBzdWIpKQorCQlkaWUoXygiY291bGQgbm90IGdldCBhIHJlcG9zaXRvcnkgaGFuZGxlIGZvciBzdWJtb2R1bGUgJyVzJyIpLCBwYXRoKTsKKworCWlmICghcmVwb19jb25maWdfZ2V0X3N0cmluZygmc3VicmVwbywgImNvcmUud29ya3RyZWUiLCAmY3cpKSB7CisJCWNoYXIgKmNmZ19maWxlLCAqYWJzX3BhdGg7CisJCWNvbnN0IGNoYXIgKnJlbF9wYXRoOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJY2ZnX2ZpbGUgPSByZXBvX2dpdF9wYXRoKCZzdWJyZXBvLCAiY29uZmlnIik7CisKKwkJYWJzX3BhdGggPSBhYnNvbHV0ZV9wYXRoZHVwKHBhdGgpOworCQlyZWxfcGF0aCA9IHJlbGF0aXZlX3BhdGgoYWJzX3BhdGgsIHN1YnJlcG8uZ2l0ZGlyLCAmc2IpOworCisJCWdpdF9jb25maWdfc2V0X2luX2ZpbGUoY2ZnX2ZpbGUsICJjb3JlLndvcmt0cmVlIiwgcmVsX3BhdGgpOworCisJCWZyZWUoY2ZnX2ZpbGUpOworCQlmcmVlKGFic19wYXRoKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhYnNvcmJfZ2l0X2RpcnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBtb2R1bGVfbGlzdCBsaXN0ID0gTU9EVUxFX0xJU1RfSU5JVDsKKwl1bnNpZ25lZCBmbGFncyA9IEFCU09SQl9HSVRESVJfUkVDVVJTRV9TVUJNT0RVTEVTOworCisJc3RydWN0IG9wdGlvbiBlbWJlZF9naXRkaXJfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJwcmVmaXgiLCAmcHJlZml4LAorCQkJICAgTl8oInBhdGgiKSwKKwkJCSAgIE5fKCJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0JJVCgwLCAiLS1yZWN1cnNpdmUiLCAmZmxhZ3MsIE5fKCJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIpLAorCQkJQUJTT1JCX0dJVERJUl9SRUNVUlNFX1NVQk1PRFVMRVMpLAorCQlPUFRfRU5EKCkKKwl9OworCisJY29uc3QgY2hhciAqY29uc3QgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzxvcHRpb25zPl0gWzxwYXRoPi4uLl0iKSwKKwkJTlVMTAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGVtYmVkX2dpdGRpcl9vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAobW9kdWxlX2xpc3RfY29tcHV0ZShhcmdjLCBhcmd2LCBwcmVmaXgsICZwYXRoc3BlYywgJmxpc3QpIDwgMCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKQorCQlhYnNvcmJfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChsaXN0LmVudHJpZXNbaV0tPm5hbWUsIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX2FjdGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyAhPSAyKQorCQlkaWUoInN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSB0YWtlcyBleGFjdGx5IDEgYXJndW1lbnQiKTsKKworCXJldHVybiAhaXNfc3VibW9kdWxlX2FjdGl2ZSh0aGVfcmVwb3NpdG9yeSwgYXJndlsxXSk7Cit9CisKKy8qCisgKiBFeGl0IG5vbi16ZXJvIGlmIGFueSBvZiB0aGUgc3VibW9kdWxlIG5hbWVzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMKKyAqIGludmFsaWQuIElmIG5vIG5hbWVzIGFyZSBnaXZlbiwgZmlsdGVyIHN0ZGluIHRvIHByaW50IG9ubHkgdmFsaWQgbmFtZXMKKyAqICh3aGljaCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcpLgorICovCitzdGF0aWMgaW50IGNoZWNrX25hbWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaWYgKGFyZ2MgPiAxKSB7CisJCXdoaWxlICgqKythcmd2KSB7CisJCQlpZiAoY2hlY2tfc3VibW9kdWxlX25hbWUoKmFyZ3YpIDwgMCkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbikgIT0gRU9GKSB7CisJCQlpZiAoIWNoZWNrX3N1Ym1vZHVsZV9uYW1lKGJ1Zi5idWYpKQorCQkJCXByaW50ZigiJXNcbiIsIGJ1Zi5idWYpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtb2R1bGVfY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWVudW0geworCQlDSEVDS19XUklURUFCTEUgPSAxLAorCQlET19VTlNFVCA9IDIKKwl9IGNvbW1hbmQgPSAwOworCisJc3RydWN0IG9wdGlvbiBtb2R1bGVfY29uZmlnX29wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoMCwgImNoZWNrLXdyaXRlYWJsZSIsICZjb21tYW5kLAorCQkJICAgIE5fKCJjaGVjayBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIiksCisJCQkgICAgQ0hFQ0tfV1JJVEVBQkxFKSwKKwkJT1BUX0NNRE1PREUoMCwgInVuc2V0IiwgJmNvbW1hbmQsCisJCQkgICAgTl8oInVuc2V0IHRoZSBjb25maWcgaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUiKSwKKwkJCSAgICBET19VTlNFVCksCisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciAqY29uc3QgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIpLAorCQlOXygiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxuYW1lPiIpLAorCQlOXygiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX2NvbmZpZ19vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJaWYgKGFyZ2MgPT0gMSAmJiBjb21tYW5kID09IENIRUNLX1dSSVRFQUJMRSkKKwkJcmV0dXJuIGlzX3dyaXRpbmdfZ2l0bW9kdWxlc19vaygpID8gMCA6IC0xOworCisJLyogRXF1aXZhbGVudCB0byBBQ1RJT05fR0VUIGluIGJ1aWx0aW4vY29uZmlnLmMgKi8KKwlpZiAoYXJnYyA9PSAyICYmIGNvbW1hbmQgIT0gRE9fVU5TRVQpCisJCXJldHVybiBwcmludF9jb25maWdfZnJvbV9naXRtb2R1bGVzKHRoZV9yZXBvc2l0b3J5LCBhcmd2WzFdKTsKKworCS8qIEVxdWl2YWxlbnQgdG8gQUNUSU9OX1NFVCBpbiBidWlsdGluL2NvbmZpZy5jICovCisJaWYgKGFyZ2MgPT0gMyB8fCAoYXJnYyA9PSAyICYmIGNvbW1hbmQgPT0gRE9fVU5TRVQpKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gKGFyZ2MgPT0gMykgPyBhcmd2WzJdIDogTlVMTDsKKworCQlpZiAoIWlzX3dyaXRpbmdfZ2l0bW9kdWxlc19vaygpKQorCQkJZGllKF8oInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIikpOworCisJCXJldHVybiBjb25maWdfc2V0X2luX2dpdG1vZHVsZXNfZmlsZV9nZW50bHkoYXJndlsxXSwgdmFsdWUpOworCX0KKworCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgbW9kdWxlX2NvbmZpZ19vcHRpb25zKTsKK30KKworI2RlZmluZSBTVVBQT1JUX1NVUEVSX1BSRUZJWCAoMTw8MCkKKworc3RydWN0IGNtZF9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmNtZDsKKwlpbnQgKCpmbikoaW50LCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICopOworCXVuc2lnbmVkIG9wdGlvbjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0geworCXsibGlzdCIsIG1vZHVsZV9saXN0LCAwfSwKKwl7Im5hbWUiLCBtb2R1bGVfbmFtZSwgMH0sCisJeyJjbG9uZSIsIG1vZHVsZV9jbG9uZSwgMH0sCisJeyJ1cGRhdGUtbW9kdWxlLW1vZGUiLCBtb2R1bGVfdXBkYXRlX21vZHVsZV9tb2RlLCAwfSwKKwl7InVwZGF0ZS1jbG9uZSIsIHVwZGF0ZV9jbG9uZSwgMH0sCisJeyJlbnN1cmUtY29yZS13b3JrdHJlZSIsIGVuc3VyZV9jb3JlX3dvcmt0cmVlLCAwfSwKKwl7InJlbGF0aXZlLXBhdGgiLCByZXNvbHZlX3JlbGF0aXZlX3BhdGgsIDB9LAorCXsicmVzb2x2ZS1yZWxhdGl2ZS11cmwiLCByZXNvbHZlX3JlbGF0aXZlX3VybCwgMH0sCisJeyJyZXNvbHZlLXJlbGF0aXZlLXVybC10ZXN0IiwgcmVzb2x2ZV9yZWxhdGl2ZV91cmxfdGVzdCwgMH0sCisJeyJmb3JlYWNoIiwgbW9kdWxlX2ZvcmVhY2gsIFNVUFBPUlRfU1VQRVJfUFJFRklYfSwKKwl7ImluaXQiLCBtb2R1bGVfaW5pdCwgU1VQUE9SVF9TVVBFUl9QUkVGSVh9LAorCXsic3RhdHVzIiwgbW9kdWxlX3N0YXR1cywgU1VQUE9SVF9TVVBFUl9QUkVGSVh9LAorCXsicHJpbnQtZGVmYXVsdC1yZW1vdGUiLCBwcmludF9kZWZhdWx0X3JlbW90ZSwgMH0sCisJeyJzeW5jIiwgbW9kdWxlX3N5bmMsIFNVUFBPUlRfU1VQRVJfUFJFRklYfSwKKwl7ImRlaW5pdCIsIG1vZHVsZV9kZWluaXQsIDB9LAorCXsicmVtb3RlLWJyYW5jaCIsIHJlc29sdmVfcmVtb3RlX3N1Ym1vZHVsZV9icmFuY2gsIDB9LAorCXsicHVzaC1jaGVjayIsIHB1c2hfY2hlY2ssIDB9LAorCXsiYWJzb3JiLWdpdC1kaXJzIiwgYWJzb3JiX2dpdF9kaXJzLCBTVVBQT1JUX1NVUEVSX1BSRUZJWH0sCisJeyJpcy1hY3RpdmUiLCBpc19hY3RpdmUsIDB9LAorCXsiY2hlY2stbmFtZSIsIGNoZWNrX25hbWUsIDB9LAorCXsiY29uZmlnIiwgbW9kdWxlX2NvbmZpZywgMH0sCit9OworCitpbnQgY21kX3N1Ym1vZHVsZV9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCWlmIChhcmdjIDwgMiB8fCAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZSgiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIDxjb21tYW5kPiIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZHMpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgY29tbWFuZHNbaV0uY21kKSkgeworCQkJaWYgKGdldF9zdXBlcl9wcmVmaXgoKSAmJgorCQkJICAgICEoY29tbWFuZHNbaV0ub3B0aW9uICYgU1VQUE9SVF9TVVBFUl9QUkVGSVgpKQorCQkJCWRpZShfKCIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiKSwKKwkJCQkgICAgY29tbWFuZHNbaV0uY21kKTsKKwkJCXJldHVybiBjb21tYW5kc1tpXS5mbihhcmdjIC0gMSwgYXJndiArIDEsIHByZWZpeCk7CisJCX0KKwl9CisKKwlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciAiCisJICAgICAgInN1YmNvbW1hbmQiKSwgYXJndlsxXSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3N5bWJvbGljLXJlZi5jIGIvYnVpbHRpbi9zeW1ib2xpYy1yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIzN2YwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9zeW1ib2xpYy1yZWYuYwpAQCAtMCwwICsxLDc4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfc3ltYm9saWNfcmVmX3VzYWdlW10gPSB7CisJTl8oImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iKSwKKwlOXygiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgY2hlY2tfc3ltcmVmKGNvbnN0IGNoYXIgKkhFQUQsIGludCBxdWlldCwgaW50IHNob3J0ZW4sIGludCBwcmludCkKK3sKKwlpbnQgZmxhZzsKKwljb25zdCBjaGFyICpyZWZuYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKEhFQUQsIDAsIE5VTEwsICZmbGFnKTsKKworCWlmICghcmVmbmFtZSkKKwkJZGllKCJObyBzdWNoIHJlZjogJXMiLCBIRUFEKTsKKwllbHNlIGlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKSB7CisJCWlmICghcXVpZXQpCisJCQlkaWUoInJlZiAlcyBpcyBub3QgYSBzeW1ib2xpYyByZWYiLCBIRUFEKTsKKwkJZWxzZQorCQkJcmV0dXJuIDE7CisJfQorCWlmIChwcmludCkgeworCQlpZiAoc2hvcnRlbikKKwkJCXJlZm5hbWUgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihyZWZuYW1lLCAwKTsKKwkJcHV0cyhyZWZuYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfc3ltYm9saWNfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBxdWlldCA9IDAsIGRlbGV0ZSA9IDAsIHNob3J0ZW4gPSAwLCByZXQgPSAwOworCWNvbnN0IGNoYXIgKm1zZyA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LAorCQkJTl8oInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiKSksCisJCU9QVF9CT09MKCdkJywgImRlbGV0ZSIsICZkZWxldGUsIE5fKCJkZWxldGUgc3ltYm9saWMgcmVmIikpLAorCQlPUFRfQk9PTCgwLCAic2hvcnQiLCAmc2hvcnRlbiwgTl8oInNob3J0ZW4gcmVmIG91dHB1dCIpKSwKKwkJT1BUX1NUUklORygnbScsIE5VTEwsICZtc2csIE5fKCJyZWFzb24iKSwgTl8oInJlYXNvbiBvZiB0aGUgdXBkYXRlIikpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9zeW1ib2xpY19yZWZfdXNhZ2UsIDApOworCWlmIChtc2cgJiYgISptc2cpCisJCWRpZSgiUmVmdXNpbmcgdG8gcGVyZm9ybSB1cGRhdGUgd2l0aCBlbXB0eSBtZXNzYWdlIik7CisKKwlpZiAoZGVsZXRlKSB7CisJCWlmIChhcmdjICE9IDEpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X3N5bWJvbGljX3JlZl91c2FnZSwgb3B0aW9ucyk7CisJCXJldCA9IGNoZWNrX3N5bXJlZihhcmd2WzBdLCAxLCAwLCAwKTsKKwkJaWYgKHJldCkKKwkJCWRpZSgiQ2Fubm90IGRlbGV0ZSAlcywgbm90IGEgc3ltYm9saWMgcmVmIiwgYXJndlswXSk7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJIRUFEIikpCisJCQlkaWUoImRlbGV0aW5nICclcycgaXMgbm90IGFsbG93ZWQiLCBhcmd2WzBdKTsKKwkJcmV0dXJuIGRlbGV0ZV9yZWYoTlVMTCwgYXJndlswXSwgTlVMTCwgUkVGX05PX0RFUkVGKTsKKwl9CisKKwlzd2l0Y2ggKGFyZ2MpIHsKKwljYXNlIDE6CisJCXJldCA9IGNoZWNrX3N5bXJlZihhcmd2WzBdLCBxdWlldCwgc2hvcnRlbiwgMSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgIkhFQUQiKSAmJgorCQkgICAgIXN0YXJ0c193aXRoKGFyZ3ZbMV0sICJyZWZzLyIpKQorCQkJZGllKCJSZWZ1c2luZyB0byBwb2ludCBIRUFEIG91dHNpZGUgb2YgcmVmcy8iKTsKKwkJcmV0ID0gISFjcmVhdGVfc3ltcmVmKGFyZ3ZbMF0sIGFyZ3ZbMV0sIG1zZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfc3ltYm9saWNfcmVmX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdGFnLmMgYi9idWlsdGluL3RhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYTRjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3RhZy5jCkBAIC0wLDAgKzEsNTkzIEBACisvKgorICogQnVpbHRpbiAiZ2l0IHRhZyIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4sCisgKiAgICAgICAgICAgICAgICAgICAgQ2FybG9zIFJpY2EgPGphc2FtcGxlckBnbWFpbC5jb20+CisgKiBCYXNlZCBvbiBnaXQtdGFnLnNoIGFuZCBta3RhZy5jIGJ5IExpbnVzIFRvcnZhbGRzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJyZWYtZmlsdGVyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3RhZ191c2FnZVtdID0geworCU5fKCJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorCQkiXHRcdDx0YWduYW1lPiBbPGhlYWQ+XSIpLAorCU5fKCJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIpLAorCU5fKCJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tcG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorCQkiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iKSwKKwlOXygiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3B0czsKK3N0YXRpYyBpbnQgZm9yY2Vfc2lnbl9hbm5vdGF0ZTsKK3N0YXRpYyBpbnQgY29uZmlnX3NpZ25fdGFnID0gLTE7IC8qIHVuc3BlY2lmaWVkICovCisKK3N0YXRpYyBpbnQgbGlzdF90YWdzKHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZywKKwkJICAgICBzdHJ1Y3QgcmVmX2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVjdCByZWZfYXJyYXkgYXJyYXk7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisJaW50IGk7CisKKwltZW1zZXQoJmFycmF5LCAwLCBzaXplb2YoYXJyYXkpKTsKKworCWlmIChmaWx0ZXItPmxpbmVzID09IC0xKQorCQlmaWx0ZXItPmxpbmVzID0gMDsKKworCWlmICghZm9ybWF0LT5mb3JtYXQpIHsKKwkJaWYgKGZpbHRlci0+bGluZXMpIHsKKwkJCXRvX2ZyZWUgPSB4c3RyZm10KCIlcyAlJShjb250ZW50czpsaW5lcz0lZCkiLAorCQkJCQkgICIlKGFsaWduOjE1KSUocmVmbmFtZTpsc3RyaXA9MiklKGVuZCkiLAorCQkJCQkgIGZpbHRlci0+bGluZXMpOworCQkJZm9ybWF0LT5mb3JtYXQgPSB0b19mcmVlOworCQl9IGVsc2UKKwkJCWZvcm1hdC0+Zm9ybWF0ID0gIiUocmVmbmFtZTpsc3RyaXA9MikiOworCX0KKworCWlmICh2ZXJpZnlfcmVmX2Zvcm1hdChmb3JtYXQpKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciKSk7CisJZmlsdGVyLT53aXRoX2NvbW1pdF90YWdfYWxnbyA9IDE7CisJZmlsdGVyX3JlZnMoJmFycmF5LCBmaWx0ZXIsIEZJTFRFUl9SRUZTX1RBR1MpOworCXJlZl9hcnJheV9zb3J0KHNvcnRpbmcsICZhcnJheSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXkubnI7IGkrKykKKwkJc2hvd19yZWZfYXJyYXlfaXRlbShhcnJheS5pdGVtc1tpXSwgZm9ybWF0KTsKKwlyZWZfYXJyYXlfY2xlYXIoJmFycmF5KTsKKwlmcmVlKHRvX2ZyZWUpOworCisJcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgaW50ICgqZWFjaF90YWdfbmFtZV9mbikoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVmLAorCQkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3Qgdm9pZCAqY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQgZm9yX2VhY2hfdGFnX25hbWUoY29uc3QgY2hhciAqKmFyZ3YsIGVhY2hfdGFnX25hbWVfZm4gZm4sCisJCQkgICAgIGNvbnN0IHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3QgY2hhciAqKnA7CisJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaGFkX2Vycm9yID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWZvciAocCA9IGFyZ3Y7ICpwOyBwKyspIHsKKwkJc3RyYnVmX3Jlc2V0KCZyZWYpOworCQlzdHJidWZfYWRkZigmcmVmLCAicmVmcy90YWdzLyVzIiwgKnApOworCQlpZiAocmVhZF9yZWYocmVmLmJ1ZiwgJm9pZCkpIHsKKwkJCWVycm9yKF8oInRhZyAnJXMnIG5vdCBmb3VuZC4iKSwgKnApOworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmbigqcCwgcmVmLmJ1ZiwgJm9pZCwgY2JfZGF0YSkpCisJCQloYWRfZXJyb3IgPSAxOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKwlyZXR1cm4gaGFkX2Vycm9yOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV90YWcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVmLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IHZvaWQgKmNiX2RhdGEpCit7CisJaWYgKGRlbGV0ZV9yZWYoTlVMTCwgcmVmLCBvaWQsIDApKQorCQlyZXR1cm4gMTsKKwlwcmludGYoXygiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIiksIG5hbWUsCisJICAgICAgIGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIERFRkFVTFRfQUJCUkVWKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X3RhZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3Qgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgZmxhZ3M7CisJY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCA9IGNiX2RhdGE7CisJZmxhZ3MgPSBHUEdfVkVSSUZZX1ZFUkJPU0U7CisKKwlpZiAoZm9ybWF0LT5mb3JtYXQpCisJCWZsYWdzID0gR1BHX1ZFUklGWV9PTUlUX1NUQVRVUzsKKworCWlmIChncGdfdmVyaWZ5X3RhZyhvaWQsIG5hbWUsIGZsYWdzKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGZvcm1hdC0+Zm9ybWF0KQorCQlwcmV0dHlfcHJpbnRfcmVmKG5hbWUsIG9pZCwgZm9ybWF0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX3NpZ24oc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQoreworCXJldHVybiBzaWduX2J1ZmZlcihidWZmZXIsIGJ1ZmZlciwgZ2V0X3NpZ25pbmdfa2V5KCkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciB0YWdfdGVtcGxhdGVbXSA9CisJTl8oIlxuV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4gICVzXG4iCisJIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgdGFnX3RlbXBsYXRlX25vY2xlYW51cFtdID0KKwlOXygiXG5Xcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiAgJXNcbiIKKwkiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSIKKwkiIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIik7CisKK3N0YXRpYyBpbnQgZ2l0X3RhZ19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgcmVmX3NvcnRpbmcgKipzb3J0aW5nX3RhaWwgPSAoc3RydWN0IHJlZl9zb3J0aW5nICoqKWNiOworCisJaWYgKCFzdHJjbXAodmFyLCAidGFnLmdwZ3NpZ24iKSkgeworCQljb25maWdfc2lnbl90YWcgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInRhZy5zb3J0IikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlwYXJzZV9yZWZfc29ydGluZyhzb3J0aW5nX3RhaWwsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RhdHVzID0gZ2l0X2dwZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJaWYgKCFzdHJjbXAodmFyLCAidGFnLmZvcmNlc2lnbmFubm90YXRlZCIpKSB7CisJCWZvcmNlX3NpZ25fYW5ub3RhdGUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJjb2x1bW4uIikpCisJCXJldHVybiBnaXRfY29sdW1uX2NvbmZpZyh2YXIsIHZhbHVlLCAidGFnIiwgJmNvbG9wdHMpOworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV90YWdfYm9keShpbnQgZmQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZiwgKnNwOworCisJYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKwkvKiBza2lwIGhlYWRlciAqLworCXNwID0gc3Ryc3RyKGJ1ZiwgIlxuXG4iKTsKKworCWlmICghc3AgfHwgIXNpemUgfHwgdHlwZSAhPSBPQkpfVEFHKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuOworCX0KKwlzcCArPSAyOyAvKiBza2lwIHRoZSAyIExGcyAqLworCXdyaXRlX29yX2RpZShmZCwgc3AsIHBhcnNlX3NpZ25hdHVyZShzcCwgYnVmICsgc2l6ZSAtIHNwKSk7CisKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgYnVpbGRfdGFnX29iamVjdChzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBzaWduLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQpCit7CisJaWYgKHNpZ24gJiYgZG9fc2lnbihidWYpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byBzaWduIHRoZSB0YWciKSk7CisJaWYgKHdyaXRlX29iamVjdF9maWxlKGJ1Zi0+YnVmLCBidWYtPmxlbiwgdGFnX3R5cGUsIHJlc3VsdCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIikpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY3JlYXRlX3RhZ19vcHRpb25zIHsKKwl1bnNpZ25lZCBpbnQgbWVzc2FnZV9naXZlbjoxOworCXVuc2lnbmVkIGludCB1c2VfZWRpdG9yOjE7CisJdW5zaWduZWQgaW50IHNpZ247CisJZW51bSB7CisJCUNMRUFOVVBfTk9ORSwKKwkJQ0xFQU5VUF9TUEFDRSwKKwkJQ0xFQU5VUF9BTEwKKwl9IGNsZWFudXBfbW9kZTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX25lc3RlZF90YWdbXSA9CisJTl8oIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorCSAgICJhbHJlYWR5IGEgdGFnLiBJZiB5b3UgbWVhbnQgdG8gdGFnIHRoZSBvYmplY3QgdGhhdCBpdCBwb2ludHMgdG8sIHVzZTpcbiIKKwkgICAiXG4iCisJICAgIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIpOworCitzdGF0aWMgdm9pZCBjcmVhdGVfdGFnKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdCwgY29uc3QgY2hhciAqb2JqZWN0X3JlZiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnRhZywKKwkJICAgICAgIHN0cnVjdCBzdHJidWYgKmJ1Ziwgc3RydWN0IGNyZWF0ZV90YWdfb3B0aW9ucyAqb3B0LAorCQkgICAgICAgc3RydWN0IG9iamVjdF9pZCAqcHJldiwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0KQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3Qgc3RyYnVmIGhlYWRlciA9IFNUUkJVRl9JTklUOworCWNoYXIgKnBhdGggPSBOVUxMOworCisJdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgb2JqZWN0LCBOVUxMKTsKKwlpZiAodHlwZSA8PSBPQkpfTk9ORSkKKwkJZGllKF8oImJhZCBvYmplY3QgdHlwZS4iKSk7CisKKwlpZiAodHlwZSA9PSBPQkpfVEFHICYmIGFkdmljZV9uZXN0ZWRfdGFnKQorCQlhZHZpc2UoXyhtZXNzYWdlX2FkdmljZV9uZXN0ZWRfdGFnKSwgdGFnLCBvYmplY3RfcmVmKTsKKworCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsCisJCSAgICAib2JqZWN0ICVzXG4iCisJCSAgICAidHlwZSAlc1xuIgorCQkgICAgInRhZyAlc1xuIgorCQkgICAgInRhZ2dlciAlc1xuXG4iLAorCQkgICAgb2lkX3RvX2hleChvYmplY3QpLAorCQkgICAgdHlwZV9uYW1lKHR5cGUpLAorCQkgICAgdGFnLAorCQkgICAgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCkpOworCisJaWYgKCFvcHQtPm1lc3NhZ2VfZ2l2ZW4gfHwgb3B0LT51c2VfZWRpdG9yKSB7CisJCWludCBmZDsKKworCQkvKiB3cml0ZSB0aGUgdGVtcGxhdGUgbWVzc2FnZSBiZWZvcmUgZWRpdGluZzogKi8KKwkJcGF0aCA9IGdpdF9wYXRoZHVwKCJUQUdfRURJVE1TRyIpOworCQlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgMDYwMCk7CisJCWlmIChmZCA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciKSwgcGF0aCk7CisKKwkJaWYgKG9wdC0+bWVzc2FnZV9naXZlbikgeworCQkJd3JpdGVfb3JfZGllKGZkLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOworCQkJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJCX0gZWxzZSBpZiAoIWlzX251bGxfb2lkKHByZXYpKSB7CisJCQl3cml0ZV90YWdfYm9keShmZCwgcHJldik7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCQkJaWYgKG9wdC0+Y2xlYW51cF9tb2RlID09IENMRUFOVVBfQUxMKQorCQkJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmYnVmLCBfKHRhZ190ZW1wbGF0ZSksIHRhZywgY29tbWVudF9saW5lX2NoYXIpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZigmYnVmLCBfKHRhZ190ZW1wbGF0ZV9ub2NsZWFudXApLCB0YWcsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJCXdyaXRlX29yX2RpZShmZCwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJfQorCQljbG9zZShmZCk7CisKKwkJaWYgKGxhdW5jaF9lZGl0b3IocGF0aCwgYnVmLCBOVUxMKSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQlfKCJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJaWYgKG9wdC0+Y2xlYW51cF9tb2RlICE9IENMRUFOVVBfTk9ORSkKKwkJc3RyYnVmX3N0cmlwc3BhY2UoYnVmLCBvcHQtPmNsZWFudXBfbW9kZSA9PSBDTEVBTlVQX0FMTCk7CisKKwlpZiAoIW9wdC0+bWVzc2FnZV9naXZlbiAmJiAhYnVmLT5sZW4pCisJCWRpZShfKCJubyB0YWcgbWVzc2FnZT8iKSk7CisKKwlzdHJidWZfaW5zZXJ0KGJ1ZiwgMCwgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmhlYWRlcik7CisKKwlpZiAoYnVpbGRfdGFnX29iamVjdChidWYsIG9wdC0+c2lnbiwgcmVzdWx0KSA8IDApIHsKKwkJaWYgKHBhdGgpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIpLAorCQkJCXBhdGgpOworCQlleGl0KDEyOCk7CisJfQorCWlmIChwYXRoKSB7CisJCXVubGlua19vcl93YXJuKHBhdGgpOworCQlmcmVlKHBhdGgpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX3JlZmxvZ19tc2coY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IGNvbW1pdCAqYzsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBzdWJqZWN0X2xlbiA9IDA7CisJY29uc3QgY2hhciAqc3ViamVjdF9zdGFydDsKKworCWNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKwlpZiAocmxhKSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHJsYSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cihzYiwgInRhZzogdGFnZ2luZyAiKTsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCBvaWQsIERFRkFVTFRfQUJCUkVWKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKHNiLCAiICgiKTsKKwl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsIE5VTEwpOworCXN3aXRjaCAodHlwZSkgeworCWRlZmF1bHQ6CisJCXN0cmJ1Zl9hZGRzdHIoc2IsICJvYmplY3Qgb2YgdW5rbm93biB0eXBlIik7CisJCWJyZWFrOworCWNhc2UgT0JKX0NPTU1JVDoKKwkJaWYgKChidWYgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKSkgIT0gTlVMTCkgeworCQkJc3ViamVjdF9sZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KGJ1ZiwgJnN1YmplY3Rfc3RhcnQpOworCQkJc3RyYnVmX2luc2VydChzYiwgc2ItPmxlbiwgc3ViamVjdF9zdGFydCwgc3ViamVjdF9sZW4pOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgImNvbW1pdCBvYmplY3QiKTsKKwkJfQorCQlmcmVlKGJ1Zik7CisKKwkJaWYgKChjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksIG9pZCkpICE9IE5VTEwpCisJCQlzdHJidWZfYWRkZihzYiwgIiwgJXMiLCBzaG93X2RhdGUoYy0+ZGF0ZSwgMCwgREFURV9NT0RFKFNIT1JUKSkpOworCQlicmVhazsKKwljYXNlIE9CSl9UUkVFOgorCQlzdHJidWZfYWRkc3RyKHNiLCAidHJlZSBvYmplY3QiKTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQkxPQjoKKwkJc3RyYnVmX2FkZHN0cihzYiwgImJsb2Igb2JqZWN0Iik7CisJCWJyZWFrOworCWNhc2UgT0JKX1RBRzoKKwkJc3RyYnVmX2FkZHN0cihzYiwgIm90aGVyIHRhZyBvYmplY3QiKTsKKwkJYnJlYWs7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgJyknKTsKK30KKworc3RydWN0IG1zZ19hcmcgeworCWludCBnaXZlbjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKK307CisKK3N0YXRpYyBpbnQgcGFyc2VfbXNnX2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBtc2dfYXJnICptc2cgPSBvcHQtPnZhbHVlOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKwlpZiAobXNnLT5idWYubGVuKQorCQlzdHJidWZfYWRkc3RyKCYobXNnLT5idWYpLCAiXG5cbiIpOworCXN0cmJ1Zl9hZGRzdHIoJihtc2ctPmJ1ZiksIGFyZyk7CisJbXNnLT5naXZlbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyYnVmX2NoZWNrX3RhZ19yZWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKG5hbWVbMF0gPT0gJy0nKQorCQlyZXR1cm4gLTE7CisKKwlzdHJidWZfcmVzZXQoc2IpOworCXN0cmJ1Zl9hZGRmKHNiLCAicmVmcy90YWdzLyVzIiwgbmFtZSk7CisKKwlyZXR1cm4gY2hlY2tfcmVmbmFtZV9mb3JtYXQoc2ItPmJ1ZiwgMCk7Cit9CisKK2ludCBjbWRfdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZmxvZ19tc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdCwgcHJldjsKKwljb25zdCBjaGFyICpvYmplY3RfcmVmLCAqdGFnOworCXN0cnVjdCBjcmVhdGVfdGFnX29wdGlvbnMgb3B0OworCWNoYXIgKmNsZWFudXBfYXJnID0gTlVMTDsKKwlpbnQgY3JlYXRlX3JlZmxvZyA9IDA7CisJaW50IGFubm90YXRlID0gMCwgZm9yY2UgPSAwOworCWludCBjbWRtb2RlID0gMCwgY3JlYXRlX3RhZ19vYmplY3QgPSAwOworCWNvbnN0IGNoYXIgKm1zZ2ZpbGUgPSBOVUxMLCAqa2V5aWQgPSBOVUxMOworCXN0cnVjdCBtc2dfYXJnIG1zZyA9IHsgMCwgU1RSQlVGX0lOSVQgfTsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWZfZmlsdGVyIGZpbHRlcjsKKwlzdGF0aWMgc3RydWN0IHJlZl9zb3J0aW5nICpzb3J0aW5nID0gTlVMTCwgKipzb3J0aW5nX3RhaWwgPSAmc29ydGluZzsKKwlzdHJ1Y3QgcmVmX2Zvcm1hdCBmb3JtYXQgPSBSRUZfRk9STUFUX0lOSVQ7CisJaW50IGljYXNlID0gMDsKKwlpbnQgZWRpdF9mbGFnID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoJ2wnLCAibGlzdCIsICZjbWRtb2RlLCBOXygibGlzdCB0YWcgbmFtZXMiKSwgJ2wnKSwKKwkJeyBPUFRJT05fSU5URUdFUiwgJ24nLCBOVUxMLCAmZmlsdGVyLmxpbmVzLCBOXygibiIpLAorCQkJCU5fKCJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIpLAorCQkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIDEgfSwKKwkJT1BUX0NNRE1PREUoJ2QnLCAiZGVsZXRlIiwgJmNtZG1vZGUsIE5fKCJkZWxldGUgdGFncyIpLCAnZCcpLAorCQlPUFRfQ01ETU9ERSgndicsICJ2ZXJpZnkiLCAmY21kbW9kZSwgTl8oInZlcmlmeSB0YWdzIiksICd2JyksCisKKwkJT1BUX0dST1VQKE5fKCJUYWcgY3JlYXRpb24gb3B0aW9ucyIpKSwKKwkJT1BUX0JPT0woJ2EnLCAiYW5ub3RhdGUiLCAmYW5ub3RhdGUsCisJCQkJCU5fKCJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnbScsICJtZXNzYWdlIiwgJm1zZywgTl8oIm1lc3NhZ2UiKSwKKwkJICBOXygidGFnIG1lc3NhZ2UiKSwgUEFSU0VfT1BUX05PTkVHLCBwYXJzZV9tc2dfYXJnIH0sCisJCU9QVF9GSUxFTkFNRSgnRicsICJmaWxlIiwgJm1zZ2ZpbGUsIE5fKCJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIikpLAorCQlPUFRfQk9PTCgnZScsICJlZGl0IiwgJmVkaXRfZmxhZywgTl8oImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiKSksCisJCU9QVF9CT09MKCdzJywgInNpZ24iLCAmb3B0LnNpZ24sIE5fKCJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIikpLAorCQlPUFRfQ0xFQU5VUCgmY2xlYW51cF9hcmcpLAorCQlPUFRfU1RSSU5HKCd1JywgImxvY2FsLXVzZXIiLCAma2V5aWQsIE5fKCJrZXktaWQiKSwKKwkJCQkJTl8oInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIpLCAwKSwKKwkJT1BUX0JPT0woMCwgImNyZWF0ZS1yZWZsb2ciLCAmY3JlYXRlX3JlZmxvZywgTl8oImNyZWF0ZSBhIHJlZmxvZyIpKSwKKworCQlPUFRfR1JPVVAoTl8oIlRhZyBsaXN0aW5nIG9wdGlvbnMiKSksCisJCU9QVF9DT0xVTU4oMCwgImNvbHVtbiIsICZjb2xvcHRzLCBOXygic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIikpLAorCQlPUFRfQ09OVEFJTlMoJmZpbHRlci53aXRoX2NvbW1pdCwgTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX05PX0NPTlRBSU5TKCZmaWx0ZXIubm9fY29tbWl0LCBOXygicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IikpLAorCQlPUFRfV0lUSCgmZmlsdGVyLndpdGhfY29tbWl0LCBOXygicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IikpLAorCQlPUFRfV0lUSE9VVCgmZmlsdGVyLm5vX2NvbW1pdCwgTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX01FUkdFRCgmZmlsdGVyLCBOXygicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIpKSwKKwkJT1BUX05PX01FUkdFRCgmZmlsdGVyLCBOXygicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG5vdCBtZXJnZWQiKSksCisJCU9QVF9SRUZfU09SVChzb3J0aW5nX3RhaWwpLAorCQl7CisJCQlPUFRJT05fQ0FMTEJBQ0ssIDAsICJwb2ludHMtYXQiLCAmZmlsdGVyLnBvaW50c19hdCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IiksIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQsCisJCQlwYXJzZV9vcHRfb2JqZWN0X25hbWUsIChpbnRwdHJfdCkgIkhFQUQiCisJCX0sCisJCU9QVF9TVFJJTkcoICAwICwgImZvcm1hdCIsICZmb3JtYXQuZm9ybWF0LCBOXygiZm9ybWF0IiksCisJCQkgICBOXygiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIpKSwKKwkJT1BUX19DT0xPUigmZm9ybWF0LnVzZV9jb2xvciwgTl8oInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIpKSwKKwkJT1BUX0JPT0woJ2knLCAiaWdub3JlLWNhc2UiLCAmaWNhc2UsIE5fKCJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlzZXR1cF9yZWZfZmlsdGVyX3BvcmNlbGFpbl9tc2coKTsKKworCWdpdF9jb25maWcoZ2l0X3RhZ19jb25maWcsIHNvcnRpbmdfdGFpbCk7CisKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW1lbXNldCgmZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CisJZmlsdGVyLmxpbmVzID0gLTE7CisJb3B0LnNpZ24gPSAtMTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3RhZ191c2FnZSwgMCk7CisKKwlpZiAoIWNtZG1vZGUpIHsKKwkJaWYgKGFyZ2MgPT0gMCkKKwkJCWNtZG1vZGUgPSAnbCc7CisJCWVsc2UgaWYgKGZpbHRlci53aXRoX2NvbW1pdCB8fCBmaWx0ZXIubm9fY29tbWl0IHx8CisJCQkgZmlsdGVyLnBvaW50c19hdC5uciB8fCBmaWx0ZXIubWVyZ2VfY29tbWl0IHx8CisJCQkgZmlsdGVyLmxpbmVzICE9IC0xKQorCQkJY21kbW9kZSA9ICdsJzsKKwl9CisKKwlpZiAoY21kbW9kZSA9PSAnbCcpCisJCXNldHVwX2F1dG9fcGFnZXIoInRhZyIsIDEpOworCisJaWYgKG9wdC5zaWduID09IC0xKQorCQlvcHQuc2lnbiA9IGNtZG1vZGUgPyAwIDogY29uZmlnX3NpZ25fdGFnID4gMDsKKworCWlmIChrZXlpZCkgeworCQlvcHQuc2lnbiA9IDE7CisJCXNldF9zaWduaW5nX2tleShrZXlpZCk7CisJfQorCWNyZWF0ZV90YWdfb2JqZWN0ID0gKG9wdC5zaWduIHx8IGFubm90YXRlIHx8IG1zZy5naXZlbiB8fCBtc2dmaWxlKTsKKworCWlmICgoY3JlYXRlX3RhZ19vYmplY3QgfHwgZm9yY2UpICYmIChjbWRtb2RlICE9IDApKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X3RhZ191c2FnZSwgb3B0aW9ucyk7CisKKwlmaW5hbGl6ZV9jb2xvcHRzKCZjb2xvcHRzLCAtMSk7CisJaWYgKGNtZG1vZGUgPT0gJ2wnICYmIGZpbHRlci5saW5lcyAhPSAtMSkgeworCQlpZiAoZXhwbGljaXRseV9lbmFibGVfY29sdW1uKGNvbG9wdHMpKQorCQkJZGllKF8oIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIikpOworCQljb2xvcHRzID0gMDsKKwl9CisJaWYgKCFzb3J0aW5nKQorCQlzb3J0aW5nID0gcmVmX2RlZmF1bHRfc29ydGluZygpOworCXNvcnRpbmctPmlnbm9yZV9jYXNlID0gaWNhc2U7CisJZmlsdGVyLmlnbm9yZV9jYXNlID0gaWNhc2U7CisJaWYgKGNtZG1vZGUgPT0gJ2wnKSB7CisJCWludCByZXQ7CisJCWlmIChjb2x1bW5fYWN0aXZlKGNvbG9wdHMpKSB7CisJCQlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisJCQltZW1zZXQoJmNvcHRzLCAwLCBzaXplb2YoY29wdHMpKTsKKwkJCWNvcHRzLnBhZGRpbmcgPSAyOworCQkJcnVuX2NvbHVtbl9maWx0ZXIoY29sb3B0cywgJmNvcHRzKTsKKwkJfQorCQlmaWx0ZXIubmFtZV9wYXR0ZXJucyA9IGFyZ3Y7CisJCXJldCA9IGxpc3RfdGFncygmZmlsdGVyLCBzb3J0aW5nLCAmZm9ybWF0KTsKKwkJaWYgKGNvbHVtbl9hY3RpdmUoY29sb3B0cykpCisJCQlzdG9wX2NvbHVtbl9maWx0ZXIoKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGZpbHRlci5saW5lcyAhPSAtMSkKKwkJZGllKF8oIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIikpOworCWlmIChmaWx0ZXIud2l0aF9jb21taXQpCisJCWRpZShfKCItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIikpOworCWlmIChmaWx0ZXIubm9fY29tbWl0KQorCQlkaWUoXygiLS1uby1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIpKTsKKwlpZiAoZmlsdGVyLnBvaW50c19hdC5ucikKKwkJZGllKF8oIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIikpOworCWlmIChmaWx0ZXIubWVyZ2VfY29tbWl0KQorCQlkaWUoXygiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiKSk7CisJaWYgKGNtZG1vZGUgPT0gJ2QnKQorCQlyZXR1cm4gZm9yX2VhY2hfdGFnX25hbWUoYXJndiwgZGVsZXRlX3RhZywgTlVMTCk7CisJaWYgKGNtZG1vZGUgPT0gJ3YnKSB7CisJCWlmIChmb3JtYXQuZm9ybWF0ICYmIHZlcmlmeV9yZWZfZm9ybWF0KCZmb3JtYXQpKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF90YWdfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXR1cm4gZm9yX2VhY2hfdGFnX25hbWUoYXJndiwgdmVyaWZ5X3RhZywgJmZvcm1hdCk7CisJfQorCisJaWYgKG1zZy5naXZlbiB8fCBtc2dmaWxlKSB7CisJCWlmIChtc2cuZ2l2ZW4gJiYgbXNnZmlsZSkKKwkJCWRpZShfKCJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iKSk7CisJCWlmIChtc2cuZ2l2ZW4pCisJCQlzdHJidWZfYWRkYnVmKCZidWYsICYobXNnLmJ1ZikpOworCQllbHNlIHsKKwkJCWlmICghc3RyY21wKG1zZ2ZpbGUsICItIikpIHsKKwkJCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMTAyNCkgPCAwKQorCQkJCQlkaWVfZXJybm8oXygiY2Fubm90IHJlYWQgJyVzJyIpLCBtc2dmaWxlKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgbXNnZmlsZSwgMTAyNCkgPCAwKQorCQkJCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIiksCisJCQkJCQltc2dmaWxlKTsKKwkJCX0KKwkJfQorCX0KKworCXRhZyA9IGFyZ3ZbMF07CisKKwlvYmplY3RfcmVmID0gYXJnYyA9PSAyID8gYXJndlsxXSA6ICJIRUFEIjsKKwlpZiAoYXJnYyA+IDIpCisJCWRpZShfKCJ0b28gbWFueSBwYXJhbXMiKSk7CisKKwlpZiAoZ2V0X29pZChvYmplY3RfcmVmLCAmb2JqZWN0KSkKKwkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIG9iamVjdF9yZWYpOworCisJaWYgKHN0cmJ1Zl9jaGVja190YWdfcmVmKCZyZWYsIHRhZykpCisJCWRpZShfKCInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIpLCB0YWcpOworCisJaWYgKHJlYWRfcmVmKHJlZi5idWYsICZwcmV2KSkKKwkJb2lkY2xyKCZwcmV2KTsKKwllbHNlIGlmICghZm9yY2UpCisJCWRpZShfKCJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIpLCB0YWcpOworCisJb3B0Lm1lc3NhZ2VfZ2l2ZW4gPSBtc2cuZ2l2ZW4gfHwgbXNnZmlsZTsKKwlvcHQudXNlX2VkaXRvciA9IGVkaXRfZmxhZzsKKworCWlmICghY2xlYW51cF9hcmcgfHwgIXN0cmNtcChjbGVhbnVwX2FyZywgInN0cmlwIikpCisJCW9wdC5jbGVhbnVwX21vZGUgPSBDTEVBTlVQX0FMTDsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAidmVyYmF0aW0iKSkKKwkJb3B0LmNsZWFudXBfbW9kZSA9IENMRUFOVVBfTk9ORTsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAid2hpdGVzcGFjZSIpKQorCQlvcHQuY2xlYW51cF9tb2RlID0gQ0xFQU5VUF9TUEFDRTsKKwllbHNlCisJCWRpZShfKCJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIpLCBjbGVhbnVwX2FyZyk7CisKKwljcmVhdGVfcmVmbG9nX21zZygmb2JqZWN0LCAmcmVmbG9nX21zZyk7CisKKwlpZiAoY3JlYXRlX3RhZ19vYmplY3QpIHsKKwkJaWYgKGZvcmNlX3NpZ25fYW5ub3RhdGUgJiYgIWFubm90YXRlKQorCQkJb3B0LnNpZ24gPSAxOworCQljcmVhdGVfdGFnKCZvYmplY3QsIG9iamVjdF9yZWYsIHRhZywgJmJ1ZiwgJm9wdCwgJnByZXYsICZvYmplY3QpOworCX0KKworCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCWlmICghdHJhbnNhY3Rpb24gfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmLmJ1ZiwgJm9iamVjdCwgJnByZXYsCisJCQkJICAgY3JlYXRlX3JlZmxvZyA/IFJFRl9GT1JDRV9DUkVBVEVfUkVGTE9HIDogMCwKKwkJCQkgICByZWZsb2dfbXNnLmJ1ZiwgJmVycikgfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJaWYgKGZvcmNlICYmICFpc19udWxsX29pZCgmcHJldikgJiYgIW9pZGVxKCZwcmV2LCAmb2JqZWN0KSkKKwkJcHJpbnRmKF8oIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIpLCB0YWcsCisJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoJnByZXYsIERFRkFVTFRfQUJCUkVWKSk7CisKKwlVTkxFQUsoYnVmKTsKKwlVTkxFQUsocmVmKTsKKwlVTkxFQUsocmVmbG9nX21zZyk7CisJVU5MRUFLKG1zZyk7CisJVU5MRUFLKGVycik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VucGFjay1maWxlLmMgYi9idWlsdGluL3VucGFjay1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg2NTIyMgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdW5wYWNrLWZpbGUuYwpAQCAtMCwwICsxLDM4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdGF0aWMgY2hhciAqY3JlYXRlX3RlbXBfZmlsZShzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RhdGljIGNoYXIgcGF0aFs1MF07CisJdm9pZCAqYnVmOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGZkOworCisJYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYgfHwgdHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBibG9iIG9iamVjdCAlcyIsIG9pZF90b19oZXgob2lkKSk7CisKKwl4c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiLm1lcmdlX2ZpbGVfWFhYWFhYIik7CisJZmQgPSB4bWtzdGVtcChwYXRoKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBzaXplKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gcGF0aDsKK30KKworaW50IGNtZF91bnBhY2tfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWlmIChhcmdjICE9IDIgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoImdpdCB1bnBhY2stZmlsZSA8c2hhMT4iKTsKKwlpZiAoZ2V0X29pZChhcmd2WzFdLCAmb2lkKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZ3ZbMV0pOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJcHV0cyhjcmVhdGVfdGVtcF9maWxlKCZvaWQpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDRhNzVlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jCkBAIC0wLDAgKzEsNTk5IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCisjaW5jbHVkZSAiZnNjay5oIgorCitzdGF0aWMgaW50IGRyeV9ydW4sIHF1aWV0LCByZWNvdmVyLCBoYXNfZXJyb3JzLCBzdHJpY3Q7CitzdGF0aWMgY29uc3QgY2hhciB1bnBhY2tfdXNhZ2VbXSA9ICJnaXQgdW5wYWNrLW9iamVjdHMgWy1uXSBbLXFdIFstcl0gWy0tc3RyaWN0XSI7CisKKy8qIFdlIGFsd2F5cyByZWFkIGluIDRrQiBjaHVua3MuICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmZXJbNDA5Nl07CitzdGF0aWMgdW5zaWduZWQgaW50IG9mZnNldCwgbGVuOworc3RhdGljIG9mZl90IGNvbnN1bWVkX2J5dGVzOworc3RhdGljIG9mZl90IG1heF9pbnB1dF9zaXplOworc3RhdGljIGdpdF9oYXNoX2N0eCBjdHg7CitzdGF0aWMgc3RydWN0IGZzY2tfb3B0aW9ucyBmc2NrX29wdGlvbnMgPSBGU0NLX09QVElPTlNfU1RSSUNUOworc3RhdGljIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisKKy8qCisgKiBXaGVuIHJ1bm5pbmcgdW5kZXIgLS1zdHJpY3QgbW9kZSwgb2JqZWN0cyB3aG9zZSByZWFjaGFiaWxpdHkgYXJlCisgKiBzdXNwZWN0IGFyZSBrZXB0IGluIGNvcmUgd2l0aG91dCBnZXR0aW5nIHdyaXR0ZW4gaW4gdGhlIG9iamVjdAorICogc3RvcmUuCisgKi8KK3N0cnVjdCBvYmpfYnVmZmVyIHsKKwljaGFyICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworc3RhdGljIHN0cnVjdCBkZWNvcmF0aW9uIG9ial9kZWNvcmF0ZTsKKworc3RhdGljIHN0cnVjdCBvYmpfYnVmZmVyICpsb29rdXBfb2JqZWN0X2J1ZmZlcihzdHJ1Y3Qgb2JqZWN0ICpiYXNlKQoreworCXJldHVybiBsb29rdXBfZGVjb3JhdGlvbigmb2JqX2RlY29yYXRlLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgYWRkX29iamVjdF9idWZmZXIoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqOworCW9iaiA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvYmpfYnVmZmVyKSk7CisJb2JqLT5idWZmZXIgPSBidWZmZXI7CisJb2JqLT5zaXplID0gc2l6ZTsKKwlpZiAoYWRkX2RlY29yYXRpb24oJm9ial9kZWNvcmF0ZSwgb2JqZWN0LCBvYmopKQorCQlkaWUoIm9iamVjdCAlcyB0cmllZCB0byBhZGQgYnVmZmVyIHR3aWNlISIsIG9pZF90b19oZXgoJm9iamVjdC0+b2lkKSk7Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgYXQgbGVhc3QgIm1pbiIgYnl0ZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYnVmZmVyLCBhbmQKKyAqIHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCAqZmlsbChpbnQgbWluKQoreworCWlmIChtaW4gPD0gbGVuKQorCQlyZXR1cm4gYnVmZmVyICsgb2Zmc2V0OworCWlmIChtaW4gPiBzaXplb2YoYnVmZmVyKSkKKwkJZGllKCJjYW5ub3QgZmlsbCAlZCBieXRlcyIsIG1pbik7CisJaWYgKG9mZnNldCkgeworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmN0eCwgYnVmZmVyLCBvZmZzZXQpOworCQltZW1tb3ZlKGJ1ZmZlciwgYnVmZmVyICsgb2Zmc2V0LCBsZW4pOworCQlvZmZzZXQgPSAwOworCX0KKwlkbyB7CisJCXNzaXplX3QgcmV0ID0geHJlYWQoMCwgYnVmZmVyICsgbGVuLCBzaXplb2YoYnVmZmVyKSAtIGxlbik7CisJCWlmIChyZXQgPD0gMCkgeworCQkJaWYgKCFyZXQpCisJCQkJZGllKCJlYXJseSBFT0YiKTsKKwkJCWRpZV9lcnJubygicmVhZCBlcnJvciBvbiBpbnB1dCIpOworCQl9CisJCWxlbiArPSByZXQ7CisJfSB3aGlsZSAobGVuIDwgbWluKTsKKwlyZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgdm9pZCB1c2UoaW50IGJ5dGVzKQoreworCWlmIChieXRlcyA+IGxlbikKKwkJZGllKCJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIpOworCWxlbiAtPSBieXRlczsKKwlvZmZzZXQgKz0gYnl0ZXM7CisKKwkvKiBtYWtlIHN1cmUgb2ZmX3QgaXMgc3VmZmljaWVudGx5IGxhcmdlIG5vdCB0byB3cmFwICovCisJaWYgKHNpZ25lZF9hZGRfb3ZlcmZsb3dzKGNvbnN1bWVkX2J5dGVzLCBieXRlcykpCisJCWRpZSgicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIpOworCWNvbnN1bWVkX2J5dGVzICs9IGJ5dGVzOworCWlmIChtYXhfaW5wdXRfc2l6ZSAmJiBjb25zdW1lZF9ieXRlcyA+IG1heF9pbnB1dF9zaXplKQorCQlkaWUoXygicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIikpOworCWRpc3BsYXlfdGhyb3VnaHB1dChwcm9ncmVzcywgY29uc3VtZWRfYnl0ZXMpOworfQorCitzdGF0aWMgdm9pZCAqZ2V0X2RhdGEodW5zaWduZWQgbG9uZyBzaXplKQoreworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwl2b2lkICpidWYgPSB4bWFsbG9jeihzaXplKTsKKworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisKKwlzdHJlYW0ubmV4dF9vdXQgPSBidWY7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemU7CisJc3RyZWFtLm5leHRfaW4gPSBmaWxsKDEpOworCXN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKKwlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOworCisJZm9yICg7OykgeworCQlpbnQgcmV0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgMCk7CisJCXVzZShsZW4gLSBzdHJlYW0uYXZhaWxfaW4pOworCQlpZiAoc3RyZWFtLnRvdGFsX291dCA9PSBzaXplICYmIHJldCA9PSBaX1NUUkVBTV9FTkQpCisJCQlicmVhazsKKwkJaWYgKHJldCAhPSBaX09LKSB7CisJCQllcnJvcigiaW5mbGF0ZSByZXR1cm5lZCAlZCIsIHJldCk7CisJCQlGUkVFX0FORF9OVUxMKGJ1Zik7CisJCQlpZiAoIXJlY292ZXIpCisJCQkJZXhpdCgxKTsKKwkJCWhhc19lcnJvcnMgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJc3RyZWFtLm5leHRfaW4gPSBmaWxsKDEpOworCQlzdHJlYW0uYXZhaWxfaW4gPSBsZW47CisJfQorCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwlyZXR1cm4gYnVmOworfQorCitzdHJ1Y3QgZGVsdGFfaW5mbyB7CisJc3RydWN0IG9iamVjdF9pZCBiYXNlX29pZDsKKwl1bnNpZ25lZCBucjsKKwlvZmZfdCBiYXNlX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdm9pZCAqZGVsdGE7CisJc3RydWN0IGRlbHRhX2luZm8gKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IGRlbHRhX2luZm8gKmRlbHRhX2xpc3Q7CisKK3N0YXRpYyB2b2lkIGFkZF9kZWx0YV90b19saXN0KHVuc2lnbmVkIG5yLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiYXNlX29pZCwKKwkJCSAgICAgIG9mZl90IGJhc2Vfb2Zmc2V0LAorCQkJICAgICAgdm9pZCAqZGVsdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGVsdGFfaW5mbyAqaW5mbyA9IHhtYWxsb2Moc2l6ZW9mKCppbmZvKSk7CisKKwlvaWRjcHkoJmluZm8tPmJhc2Vfb2lkLCBiYXNlX29pZCk7CisJaW5mby0+YmFzZV9vZmZzZXQgPSBiYXNlX29mZnNldDsKKwlpbmZvLT5zaXplID0gc2l6ZTsKKwlpbmZvLT5kZWx0YSA9IGRlbHRhOworCWluZm8tPm5yID0gbnI7CisJaW5mby0+bmV4dCA9IGRlbHRhX2xpc3Q7CisJZGVsdGFfbGlzdCA9IGluZm87Cit9CisKK3N0cnVjdCBvYmpfaW5mbyB7CisJb2ZmX3Qgb2Zmc2V0OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBvYmplY3QgKm9iajsKK307CisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIEZMQUdfT1BFTiAoMXU8PDIwKQorI2RlZmluZSBGTEFHX1dSSVRURU4gKDF1PDwyMSkKKworc3RhdGljIHN0cnVjdCBvYmpfaW5mbyAqb2JqX2xpc3Q7CitzdGF0aWMgdW5zaWduZWQgbnJfb2JqZWN0czsKKworLyoKKyAqIENhbGxlZCBvbmx5IGZyb20gY2hlY2tfb2JqZWN0KCkgYWZ0ZXIgaXQgdmVyaWZpZWQgdGhpcyBvYmplY3QKKyAqIGlzIE9rLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9jYWNoZWRfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IG9ial9idWZmZXIgKm9ial9idWYpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAod3JpdGVfb2JqZWN0X2ZpbGUob2JqX2J1Zi0+YnVmZmVyLCBvYmpfYnVmLT5zaXplLAorCQkJICAgICAgdHlwZV9uYW1lKG9iai0+dHlwZSksICZvaWQpIDwgMCkKKwkJZGllKCJmYWlsZWQgdG8gd3JpdGUgb2JqZWN0ICVzIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKwlvYmotPmZsYWdzIHw9IEZMQUdfV1JJVFRFTjsKK30KKworLyoKKyAqIEF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgcHJvY2Vzc2luZywgd3JpdGVfcmVzdCgpIHNjYW5zIHRoZSBvYmplY3RzCisgKiB0aGF0IGhhdmUgcmVhY2hhYmlsaXR5IHJlcXVpcmVtZW50cyBhbmQgY2FsbHMgdGhpcyBmdW5jdGlvbi4KKyAqIFZlcmlmeSBpdHMgcmVhY2hhYmlsaXR5IGFuZCB2YWxpZGl0eSByZWN1cnNpdmVseSBhbmQgd3JpdGUgaXQgb3V0LgorICovCitzdGF0aWMgaW50IGNoZWNrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBvYmpfYnVmZmVyICpvYmpfYnVmOworCisJaWYgKCFvYmopCisJCXJldHVybiAxOworCisJaWYgKG9iai0+ZmxhZ3MgJiBGTEFHX1dSSVRURU4pCisJCXJldHVybiAwOworCisJaWYgKHR5cGUgIT0gT0JKX0FOWSAmJiBvYmotPnR5cGUgIT0gdHlwZSkKKwkJZGllKCJvYmplY3QgdHlwZSBtaXNtYXRjaCIpOworCisJaWYgKCEob2JqLT5mbGFncyAmIEZMQUdfT1BFTikpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlpbnQgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJm9iai0+b2lkLCAmc2l6ZSk7CisJCWlmICh0eXBlICE9IG9iai0+dHlwZSB8fCB0eXBlIDw9IDApCisJCQlkaWUoIm9iamVjdCBvZiB1bmV4cGVjdGVkIHR5cGUiKTsKKwkJb2JqLT5mbGFncyB8PSBGTEFHX1dSSVRURU47CisJCXJldHVybiAwOworCX0KKworCW9ial9idWYgPSBsb29rdXBfb2JqZWN0X2J1ZmZlcihvYmopOworCWlmICghb2JqX2J1ZikKKwkJZGllKCJXaG9vcHMhIENhbm5vdCBmaW5kIG9iamVjdCAnJXMnIiwgb2lkX3RvX2hleCgmb2JqLT5vaWQpKTsKKwlpZiAoZnNja19vYmplY3Qob2JqLCBvYmpfYnVmLT5idWZmZXIsIG9ial9idWYtPnNpemUsICZmc2NrX29wdGlvbnMpKQorCQlkaWUoImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIpOworCWZzY2tfb3B0aW9ucy53YWxrID0gY2hlY2tfb2JqZWN0OworCWlmIChmc2NrX3dhbGsob2JqLCBOVUxMLCAmZnNja19vcHRpb25zKSkKKwkJZGllKCJFcnJvciBvbiByZWFjaGFibGUgb2JqZWN0cyBvZiAlcyIsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJd3JpdGVfY2FjaGVkX29iamVjdChvYmosIG9ial9idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9yZXN0KHZvaWQpCit7CisJdW5zaWduZWQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCWlmIChvYmpfbGlzdFtpXS5vYmopCisJCQljaGVja19vYmplY3Qob2JqX2xpc3RbaV0ub2JqLCBPQkpfQU5ZLCBOVUxMLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZGVkX29iamVjdCh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qCisgKiBXcml0ZSBvdXQgbnItdGggb2JqZWN0IGZyb20gdGhlIGxpc3QsIG5vdyB3ZSBrbm93IHRoZSBjb250ZW50cworICogb2YgaXQuICBVbmRlciAtLXN0cmljdCwgdGhpcyBidWZmZXJzIHN0cnVjdHVyZWQgb2JqZWN0cyBpbi1jb3JlLAorICogdG8gYmUgY2hlY2tlZCBhdCB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9vYmplY3QodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoIXN0cmljdCkgeworCQlpZiAod3JpdGVfb2JqZWN0X2ZpbGUoYnVmLCBzaXplLCB0eXBlX25hbWUodHlwZSksCisJCQkJICAgICAgJm9ial9saXN0W25yXS5vaWQpIDwgMCkKKwkJCWRpZSgiZmFpbGVkIHRvIHdyaXRlIG9iamVjdCIpOworCQlhZGRlZF9vYmplY3QobnIsIHR5cGUsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IE5VTEw7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCXN0cnVjdCBibG9iICpibG9iOworCQlpZiAod3JpdGVfb2JqZWN0X2ZpbGUoYnVmLCBzaXplLCB0eXBlX25hbWUodHlwZSksCisJCQkJICAgICAgJm9ial9saXN0W25yXS5vaWQpIDwgMCkKKwkJCWRpZSgiZmFpbGVkIHRvIHdyaXRlIG9iamVjdCIpOworCQlhZGRlZF9vYmplY3QobnIsIHR5cGUsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKworCQlibG9iID0gbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksICZvYmpfbGlzdFtucl0ub2lkKTsKKwkJaWYgKGJsb2IpCisJCQlibG9iLT5vYmplY3QuZmxhZ3MgfD0gRkxBR19XUklUVEVOOworCQllbHNlCisJCQlkaWUoImludmFsaWQgYmxvYiBvYmplY3QiKTsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqOworCQlpbnQgZWF0ZW47CisJCWhhc2hfb2JqZWN0X2ZpbGUodGhlX2hhc2hfYWxnbywgYnVmLCBzaXplLCB0eXBlX25hbWUodHlwZSksCisJCQkJICZvYmpfbGlzdFtucl0ub2lkKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlvYmogPSBwYXJzZV9vYmplY3RfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCAmb2JqX2xpc3RbbnJdLm9pZCwKKwkJCQkJICB0eXBlLCBzaXplLCBidWYsCisJCQkJCSAgJmVhdGVuKTsKKwkJaWYgKCFvYmopCisJCQlkaWUoImludmFsaWQgJXMiLCB0eXBlX25hbWUodHlwZSkpOworCQlhZGRfb2JqZWN0X2J1ZmZlcihvYmosIGJ1Ziwgc2l6ZSk7CisJCW9iai0+ZmxhZ3MgfD0gRkxBR19PUEVOOworCQlvYmpfbGlzdFtucl0ub2JqID0gb2JqOworCX0KK30KKworc3RhdGljIHZvaWQgcmVzb2x2ZV9kZWx0YSh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICB2b2lkICpiYXNlLCB1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZSwKKwkJCSAgdm9pZCAqZGVsdGEsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSkKK3sKKwl2b2lkICpyZXN1bHQ7CisJdW5zaWduZWQgbG9uZyByZXN1bHRfc2l6ZTsKKworCXJlc3VsdCA9IHBhdGNoX2RlbHRhKGJhc2UsIGJhc2Vfc2l6ZSwKKwkJCSAgICAgZGVsdGEsIGRlbHRhX3NpemUsCisJCQkgICAgICZyZXN1bHRfc2l6ZSk7CisJaWYgKCFyZXN1bHQpCisJCWRpZSgiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIik7CisJZnJlZShkZWx0YSk7CisJd3JpdGVfb2JqZWN0KG5yLCB0eXBlLCByZXN1bHQsIHJlc3VsdF9zaXplKTsKK30KKworLyoKKyAqIFdlIG5vdyBrbm93IHRoZSBjb250ZW50cyBvZiBhbiBvYmplY3QgKHdoaWNoIGlzIG5yLXRoIGluIHRoZSBwYWNrKTsKKyAqIHJlc29sdmUgYWxsIHRoZSBkZWx0aWZpZWQgb2JqZWN0cyB0aGF0IGFyZSBiYXNlZCBvbiBpdC4KKyAqLworc3RhdGljIHZvaWQgYWRkZWRfb2JqZWN0KHVuc2lnbmVkIG5yLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBkZWx0YV9pbmZvICoqcCA9ICZkZWx0YV9saXN0OworCXN0cnVjdCBkZWx0YV9pbmZvICppbmZvOworCisJd2hpbGUgKChpbmZvID0gKnApICE9IE5VTEwpIHsKKwkJaWYgKG9pZGVxKCZpbmZvLT5iYXNlX29pZCwgJm9ial9saXN0W25yXS5vaWQpIHx8CisJCSAgICBpbmZvLT5iYXNlX29mZnNldCA9PSBvYmpfbGlzdFtucl0ub2Zmc2V0KSB7CisJCQkqcCA9IGluZm8tPm5leHQ7CisJCQlwID0gJmRlbHRhX2xpc3Q7CisJCQlyZXNvbHZlX2RlbHRhKGluZm8tPm5yLCB0eXBlLCBkYXRhLCBzaXplLAorCQkJCSAgICAgIGluZm8tPmRlbHRhLCBpbmZvLT5zaXplKTsKKwkJCWZyZWUoaW5mbyk7CisJCQljb250aW51ZTsKKwkJfQorCQlwID0gJmluZm8tPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bnBhY2tfbm9uX2RlbHRhX2VudHJ5KGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgIHVuc2lnbmVkIG5yKQoreworCXZvaWQgKmJ1ZiA9IGdldF9kYXRhKHNpemUpOworCisJaWYgKCFkcnlfcnVuICYmIGJ1ZikKKwkJd3JpdGVfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCWVsc2UKKwkJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfYWdhaW5zdF9oZWxkKHVuc2lnbmVkIG5yLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiYXNlLAorCQkJCXZvaWQgKmRlbHRhX2RhdGEsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJc3RydWN0IG9ial9idWZmZXIgKm9ial9idWZmZXI7CisJb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgYmFzZSk7CisJaWYgKCFvYmopCisJCXJldHVybiAwOworCW9ial9idWZmZXIgPSBsb29rdXBfb2JqZWN0X2J1ZmZlcihvYmopOworCWlmICghb2JqX2J1ZmZlcikKKwkJcmV0dXJuIDA7CisJcmVzb2x2ZV9kZWx0YShuciwgb2JqLT50eXBlLCBvYmpfYnVmZmVyLT5idWZmZXIsCisJCSAgICAgIG9ial9idWZmZXItPnNpemUsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB1bnBhY2tfZGVsdGFfZW50cnkoZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsCisJCQkgICAgICAgdW5zaWduZWQgbnIpCit7CisJdm9pZCAqZGVsdGFfZGF0YSwgKmJhc2U7CisJdW5zaWduZWQgbG9uZyBiYXNlX3NpemU7CisJc3RydWN0IG9iamVjdF9pZCBiYXNlX29pZDsKKworCWlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJaGFzaGNweShiYXNlX29pZC5oYXNoLCBmaWxsKHRoZV9oYXNoX2FsZ28tPnJhd3N6KSk7CisJCXVzZSh0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJCWRlbHRhX2RhdGEgPSBnZXRfZGF0YShkZWx0YV9zaXplKTsKKwkJaWYgKGRyeV9ydW4gfHwgIWRlbHRhX2RhdGEpIHsKKwkJCWZyZWUoZGVsdGFfZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGhhc19vYmplY3RfZmlsZSgmYmFzZV9vaWQpKQorCQkJOyAvKiBPayB3ZSBoYXZlIHRoaXMgb25lICovCisJCWVsc2UgaWYgKHJlc29sdmVfYWdhaW5zdF9oZWxkKG5yLCAmYmFzZV9vaWQsCisJCQkJCSAgICAgIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpKQorCQkJcmV0dXJuOyAvKiB3ZSBhcmUgZG9uZSAqLworCQllbHNlIHsKKwkJCS8qIGNhbm5vdCByZXNvbHZlIHlldCAtLS0gcXVldWUgaXQgKi8KKwkJCW9pZGNscigmb2JqX2xpc3RbbnJdLm9pZCk7CisJCQlhZGRfZGVsdGFfdG9fbGlzdChuciwgJmJhc2Vfb2lkLCAwLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIGJhc2VfZm91bmQgPSAwOworCQl1bnNpZ25lZCBjaGFyICpwYWNrLCBjOworCQlvZmZfdCBiYXNlX29mZnNldDsKKwkJdW5zaWduZWQgbG8sIG1pZCwgaGk7CisKKwkJcGFjayA9IGZpbGwoMSk7CisJCWMgPSAqcGFjazsKKwkJdXNlKDEpOworCQliYXNlX29mZnNldCA9IGMgJiAxMjc7CisJCXdoaWxlIChjICYgMTI4KSB7CisJCQliYXNlX29mZnNldCArPSAxOworCQkJaWYgKCFiYXNlX29mZnNldCB8fCBNU0IoYmFzZV9vZmZzZXQsIDcpKQorCQkJCWRpZSgib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIpOworCQkJcGFjayA9IGZpbGwoMSk7CisJCQljID0gKnBhY2s7CisJCQl1c2UoMSk7CisJCQliYXNlX29mZnNldCA9IChiYXNlX29mZnNldCA8PCA3KSArIChjICYgMTI3KTsKKwkJfQorCQliYXNlX29mZnNldCA9IG9ial9saXN0W25yXS5vZmZzZXQgLSBiYXNlX29mZnNldDsKKwkJaWYgKGJhc2Vfb2Zmc2V0IDw9IDAgfHwgYmFzZV9vZmZzZXQgPj0gb2JqX2xpc3RbbnJdLm9mZnNldCkKKwkJCWRpZSgib2Zmc2V0IHZhbHVlIG91dCBvZiBib3VuZCBmb3IgZGVsdGEgYmFzZSBvYmplY3QiKTsKKworCQlkZWx0YV9kYXRhID0gZ2V0X2RhdGEoZGVsdGFfc2l6ZSk7CisJCWlmIChkcnlfcnVuIHx8ICFkZWx0YV9kYXRhKSB7CisJCQlmcmVlKGRlbHRhX2RhdGEpOworCQkJcmV0dXJuOworCQl9CisJCWxvID0gMDsKKwkJaGkgPSBucjsKKwkJd2hpbGUgKGxvIDwgaGkpIHsKKwkJCW1pZCA9IGxvICsgKGhpIC0gbG8pIC8gMjsKKwkJCWlmIChiYXNlX29mZnNldCA8IG9ial9saXN0W21pZF0ub2Zmc2V0KSB7CisJCQkJaGkgPSBtaWQ7CisJCQl9IGVsc2UgaWYgKGJhc2Vfb2Zmc2V0ID4gb2JqX2xpc3RbbWlkXS5vZmZzZXQpIHsKKwkJCQlsbyA9IG1pZCArIDE7CisJCQl9IGVsc2UgeworCQkJCW9pZGNweSgmYmFzZV9vaWQsICZvYmpfbGlzdFttaWRdLm9pZCk7CisJCQkJYmFzZV9mb3VuZCA9ICFpc19udWxsX29pZCgmYmFzZV9vaWQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghYmFzZV9mb3VuZCkgeworCQkJLyoKKwkJCSAqIFRoZSBkZWx0YSBiYXNlIG9iamVjdCBpcyBpdHNlbGYgYSBkZWx0YSB0aGF0CisJCQkgKiBoYXMgbm90IGJlZW4gcmVzb2x2ZWQgeWV0LgorCQkJICovCisJCQlvaWRjbHIoJm9ial9saXN0W25yXS5vaWQpOworCQkJYWRkX2RlbHRhX3RvX2xpc3QobnIsICZudWxsX29pZCwgYmFzZV9vZmZzZXQsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKHJlc29sdmVfYWdhaW5zdF9oZWxkKG5yLCAmYmFzZV9vaWQsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpKQorCQlyZXR1cm47CisKKwliYXNlID0gcmVhZF9vYmplY3RfZmlsZSgmYmFzZV9vaWQsICZ0eXBlLCAmYmFzZV9zaXplKTsKKwlpZiAoIWJhc2UpIHsKKwkJZXJyb3IoImZhaWxlZCB0byByZWFkIGRlbHRhLXBhY2sgYmFzZSBvYmplY3QgJXMiLAorCQkgICAgICBvaWRfdG9faGV4KCZiYXNlX29pZCkpOworCQlpZiAoIXJlY292ZXIpCisJCQlleGl0KDEpOworCQloYXNfZXJyb3JzID0gMTsKKwkJcmV0dXJuOworCX0KKwlyZXNvbHZlX2RlbHRhKG5yLCB0eXBlLCBiYXNlLCBiYXNlX3NpemUsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOworCWZyZWUoYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVucGFja19vbmUodW5zaWduZWQgbnIpCit7CisJdW5zaWduZWQgc2hpZnQ7CisJdW5zaWduZWQgY2hhciAqcGFjazsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGM7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJb2JqX2xpc3RbbnJdLm9mZnNldCA9IGNvbnN1bWVkX2J5dGVzOworCisJcGFjayA9IGZpbGwoMSk7CisJYyA9ICpwYWNrOworCXVzZSgxKTsKKwl0eXBlID0gKGMgPj4gNCkgJiA3OworCXNpemUgPSAoYyAmIDE1KTsKKwlzaGlmdCA9IDQ7CisJd2hpbGUgKGMgJiAweDgwKSB7CisJCXBhY2sgPSBmaWxsKDEpOworCQljID0gKnBhY2s7CisJCXVzZSgxKTsKKwkJc2l6ZSArPSAoYyAmIDB4N2YpIDw8IHNoaWZ0OworCQlzaGlmdCArPSA3OworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX0NPTU1JVDoKKwljYXNlIE9CSl9UUkVFOgorCWNhc2UgT0JKX0JMT0I6CisJY2FzZSBPQkpfVEFHOgorCQl1bnBhY2tfbm9uX2RlbHRhX2VudHJ5KHR5cGUsIHNpemUsIG5yKTsKKwkJcmV0dXJuOworCWNhc2UgT0JKX1JFRl9ERUxUQToKKwljYXNlIE9CSl9PRlNfREVMVEE6CisJCXVucGFja19kZWx0YV9lbnRyeSh0eXBlLCBzaXplLCBucik7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQllcnJvcigiYmFkIG9iamVjdCB0eXBlICVkIiwgdHlwZSk7CisJCWhhc19lcnJvcnMgPSAxOworCQlpZiAocmVjb3ZlcikKKwkJCXJldHVybjsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVucGFja19hbGwodm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGFja19oZWFkZXIgKmhkciA9IGZpbGwoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOworCisJbnJfb2JqZWN0cyA9IG50b2hsKGhkci0+aGRyX2VudHJpZXMpOworCisJaWYgKG50b2hsKGhkci0+aGRyX3NpZ25hdHVyZSkgIT0gUEFDS19TSUdOQVRVUkUpCisJCWRpZSgiYmFkIHBhY2sgZmlsZSIpOworCWlmICghcGFja192ZXJzaW9uX29rKGhkci0+aGRyX3ZlcnNpb24pKQorCQlkaWUoInVua25vd24gcGFjayBmaWxlIHZlcnNpb24gJSJQUkl1MzIsCisJCQludG9obChoZHItPmhkcl92ZXJzaW9uKSk7CisJdXNlKHNpemVvZihzdHJ1Y3QgcGFja19oZWFkZXIpKTsKKworCWlmICghcXVpZXQpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoXygiVW5wYWNraW5nIG9iamVjdHMiKSwgbnJfb2JqZWN0cyk7CisJb2JqX2xpc3QgPSB4Y2FsbG9jKG5yX29iamVjdHMsIHNpemVvZigqb2JqX2xpc3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXVucGFja19vbmUoaSk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJaWYgKGRlbHRhX2xpc3QpCisJCWRpZSgidW5yZXNvbHZlZCBkZWx0YXMgbGVmdCBhZnRlciB1bnBhY2tpbmciKTsKK30KKworaW50IGNtZF91bnBhY2tfb2JqZWN0cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCXF1aWV0ID0gIWlzYXR0eSgyKTsKKworCWZvciAoaSA9IDEgOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItbiIpKSB7CisJCQkJZHJ5X3J1biA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItcSIpKSB7CisJCQkJcXVpZXQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLXIiKSkgeworCQkJCXJlY292ZXIgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdHJpY3QiKSkgeworCQkJCXN0cmljdCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1zdHJpY3Q9IiwgJmFyZykpIHsKKwkJCQlzdHJpY3QgPSAxOworCQkJCWZzY2tfc2V0X21zZ190eXBlcygmZnNja19vcHRpb25zLCBhcmcpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tcGFja19oZWFkZXI9IikpIHsKKwkJCQlzdHJ1Y3QgcGFja19oZWFkZXIgKmhkcjsKKwkJCQljaGFyICpjOworCisJCQkJaGRyID0gKHN0cnVjdCBwYWNrX2hlYWRlciAqKWJ1ZmZlcjsKKwkJCQloZHItPmhkcl9zaWduYXR1cmUgPSBodG9ubChQQUNLX1NJR05BVFVSRSk7CisJCQkJaGRyLT5oZHJfdmVyc2lvbiA9IGh0b25sKHN0cnRvdWwoYXJnICsgMTQsICZjLCAxMCkpOworCQkJCWlmICgqYyAhPSAnLCcpCisJCQkJCWRpZSgiYmFkICVzIiwgYXJnKTsKKwkJCQloZHItPmhkcl9lbnRyaWVzID0gaHRvbmwoc3RydG91bChjICsgMSwgJmMsIDEwKSk7CisJCQkJaWYgKCpjKQorCQkJCQlkaWUoImJhZCAlcyIsIGFyZyk7CisJCQkJbGVuID0gc2l6ZW9mKCpoZHIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tbWF4LWlucHV0LXNpemU9IiwgJmFyZykpIHsKKwkJCQltYXhfaW5wdXRfc2l6ZSA9IHN0cnRvdW1heChhcmcsIE5VTEwsIDEwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXVzYWdlKHVucGFja191c2FnZSk7CisJCX0KKworCQkvKiBXZSBkb24ndCB0YWtlIGFueSBub24tZmxhZyBhcmd1bWVudHMgbm93Li4gTWF5YmUgc29tZSBkYXkgKi8KKwkJdXNhZ2UodW5wYWNrX3VzYWdlKTsKKwl9CisJdGhlX2hhc2hfYWxnby0+aW5pdF9mbigmY3R4KTsKKwl1bnBhY2tfYWxsKCk7CisJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjdHgsIGJ1ZmZlciwgb2Zmc2V0KTsKKwl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihvaWQuaGFzaCwgJmN0eCk7CisJaWYgKHN0cmljdCkgeworCQl3cml0ZV9yZXN0KCk7CisJCWlmIChmc2NrX2ZpbmlzaCgmZnNja19vcHRpb25zKSkKKwkJCWRpZShfKCJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIpKTsKKwl9CisJaWYgKCFoYXNoZXEoZmlsbCh0aGVfaGFzaF9hbGdvLT5yYXdzeiksIG9pZC5oYXNoKSkKKwkJZGllKCJmaW5hbCBzaGExIGRpZCBub3QgbWF0Y2giKTsKKwl1c2UodGhlX2hhc2hfYWxnby0+cmF3c3opOworCisJLyogV3JpdGUgdGhlIGxhc3QgcGFydCBvZiB0aGUgYnVmZmVyIHRvIHN0ZG91dCAqLworCXdoaWxlIChsZW4pIHsKKwkJaW50IHJldCA9IHh3cml0ZSgxLCBidWZmZXIgKyBvZmZzZXQsIGxlbik7CisJCWlmIChyZXQgPD0gMCkKKwkJCWJyZWFrOworCQlsZW4gLT0gcmV0OworCQlvZmZzZXQgKz0gcmV0OworCX0KKworCS8qIEFsbCBkb25lICovCisJcmV0dXJuIGhhc19lcnJvcnM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTI3YjhmCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwpAQCAtMCwwICsxLDEyNDUgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInNwbGl0LWluZGV4LmgiCisjaW5jbHVkZSAiZnNtb25pdG9yLmgiCisKKy8qCisgKiBEZWZhdWx0IHRvIG5vdCBhbGxvd2luZyBjaGFuZ2VzIHRvIHRoZSBsaXN0IG9mIGZpbGVzLiBUaGUKKyAqIHRvb2wgZG9lc24ndCBhY3R1YWxseSBjYXJlLCBidXQgdGhpcyBtYWtlcyBpdCBoYXJkZXIgdG8gYWRkCisgKiBmaWxlcyB0byB0aGUgcmV2aXNpb24gY29udHJvbCBieSBtaXN0YWtlIGJ5IGRvaW5nIHNvbWV0aGluZworICogbGlrZSAiZ2l0IHVwZGF0ZS1pbmRleCAqIiBhbmQgc3VkZGVubHkgaGF2aW5nIGFsbCB0aGUgb2JqZWN0CisgKiBmaWxlcyBiZSByZXZpc2lvbiBjb250cm9sbGVkLgorICovCitzdGF0aWMgaW50IGFsbG93X2FkZDsKK3N0YXRpYyBpbnQgYWxsb3dfcmVtb3ZlOworc3RhdGljIGludCBhbGxvd19yZXBsYWNlOworc3RhdGljIGludCBpbmZvX29ubHk7CitzdGF0aWMgaW50IGZvcmNlX3JlbW92ZTsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgbWFya192YWxpZF9vbmx5Oworc3RhdGljIGludCBtYXJrX3NraXBfd29ya3RyZWVfb25seTsKK3N0YXRpYyBpbnQgbWFya19mc21vbml0b3Jfb25seTsKK3N0YXRpYyBpbnQgaWdub3JlX3NraXBfd29ya3RyZWVfZW50cmllczsKKyNkZWZpbmUgTUFSS19GTEFHIDEKKyNkZWZpbmUgVU5NQVJLX0ZMQUcgMgorc3RhdGljIHN0cnVjdCBzdHJidWYgbXRpbWVfZGlyID0gU1RSQlVGX0lOSVQ7CisKKy8qIFVudHJhY2tlZCBjYWNoZSBtb2RlICovCitlbnVtIHVjX21vZGUgeworCVVDX1VOU1BFQ0lGSUVEID0gLTEsCisJVUNfRElTQUJMRSA9IDAsCisJVUNfRU5BQkxFLAorCVVDX1RFU1QsCisJVUNfRk9SQ0UKK307CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCB2cDsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJdmFfc3RhcnQodnAsIGZtdCk7CisJdnByaW50ZihmbXQsIHZwKTsKKwlwdXRjaGFyKCdcbicpOworCXZhX2VuZCh2cCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90ZXN0X2RpcmVjdG9yeSh2b2lkKQoreworCWlmIChtdGltZV9kaXIubGVuKQorCQlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZtdGltZV9kaXIsIDApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X210aW1lX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzLyVzIiwgbXRpbWVfZGlyLmJ1ZiwgcGF0aCk7CisJcmV0dXJuIHNiLmJ1ZjsKK30KKworc3RhdGljIHZvaWQgeG1rZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcGF0aCA9IGdldF9tdGltZV9wYXRoKHBhdGgpOworCWlmIChta2RpcihwYXRoLCAwNzAwKSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIiksIHBhdGgpOworfQorCitzdGF0aWMgaW50IHhzdGF0X210aW1lX2RpcihzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaWYgKHN0YXQobXRpbWVfZGlyLmJ1Ziwgc3QpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN0YXQgJXMiKSwgbXRpbWVfZGlyLmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgZmQ7CisJcGF0aCA9IGdldF9tdGltZV9wYXRoKHBhdGgpOworCWZkID0gb3BlbihwYXRoLCBPX0NSRUFUIHwgT19SRFdSLCAwNjQ0KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIiksIHBhdGgpOworCXJldHVybiBmZDsKK30KKworc3RhdGljIHZvaWQgeHVubGluayhjb25zdCBjaGFyICpwYXRoKQoreworCXBhdGggPSBnZXRfbXRpbWVfcGF0aChwYXRoKTsKKwlpZiAodW5saW5rKHBhdGgpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIiksIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCB4cm1kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlwYXRoID0gZ2V0X210aW1lX3BhdGgocGF0aCk7CisJaWYgKHJtZGlyKHBhdGgpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiKSwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGF2b2lkX3JhY3kodm9pZCkKK3sKKwkvKgorCSAqIG5vdCB1c2UgaWYgd2UgY291bGQgdXNsZWVwKDEwKSBpZiBVU0VfTlNFQyBpcyBkZWZpbmVkLiBUaGUKKwkgKiBmaWVsZCBuc2VjIGNvdWxkIGJlIHRoZXJlLCBidXQgdGhlIE9TIGNvdWxkIGNob29zZSB0bworCSAqIGlnbm9yZSBpdD8KKwkgKi8KKwlzbGVlcCgxKTsKK30KKworc3RhdGljIGludCB0ZXN0X2lmX3VudHJhY2tlZF9jYWNoZV9pc19zdXBwb3J0ZWQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RhdF9kYXRhIGJhc2U7CisJaW50IGZkLCByZXQgPSAwOworCWNoYXIgKmN3ZDsKKworCXN0cmJ1Zl9hZGRzdHIoJm10aW1lX2RpciwgIm10aW1lLXRlc3QtWFhYWFhYIik7CisJaWYgKCFta2R0ZW1wKG10aW1lX2Rpci5idWYpKQorCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKworCWN3ZCA9IHhnZXRjd2QoKTsKKwlmcHJpbnRmKHN0ZGVyciwgXygiVGVzdGluZyBtdGltZSBpbiAnJXMnICIpLCBjd2QpOworCWZyZWUoY3dkKTsKKworCWF0ZXhpdChyZW1vdmVfdGVzdF9kaXJlY3RvcnkpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWZpbGxfc3RhdF9kYXRhKCZiYXNlLCAmc3QpOworCWZwdXRjKCcuJywgc3RkZXJyKTsKKworCWF2b2lkX3JhY3koKTsKKwlmZCA9IGNyZWF0ZV9maWxlKCJuZXdmaWxlIik7CisJeHN0YXRfbXRpbWVfZGlyKCZzdCk7CisJaWYgKCFtYXRjaF9zdGF0X2RhdGEoJmJhc2UsICZzdCkpIHsKKwkJY2xvc2UoZmQpOworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVycixfKCJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90ICIKKwkJCQkgICAgImNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIpKTsKKwkJZ290byBkb25lOworCX0KKwlmaWxsX3N0YXRfZGF0YSgmYmFzZSwgJnN0KTsKKwlmcHV0YygnLicsIHN0ZGVycik7CisKKwlhdm9pZF9yYWN5KCk7CisJeG1rZGlyKCJuZXctZGlyIik7CisJeHN0YXRfbXRpbWVfZGlyKCZzdCk7CisJaWYgKCFtYXRjaF9zdGF0X2RhdGEoJmJhc2UsICZzdCkpIHsKKwkJY2xvc2UoZmQpOworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgIgorCQkJCSAgICAgImFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisJZmlsbF9zdGF0X2RhdGEoJmJhc2UsICZzdCk7CisJZnB1dGMoJy4nLCBzdGRlcnIpOworCisJYXZvaWRfcmFjeSgpOworCXdyaXRlX29yX2RpZShmZCwgImRhdGEiLCA0KTsKKwljbG9zZShmZCk7CisJeHN0YXRfbXRpbWVfZGlyKCZzdCk7CisJaWYgKG1hdGNoX3N0YXRfZGF0YSgmYmFzZSwgJnN0KSkgeworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzICIKKwkJCQkgICAgICJhZnRlciB1cGRhdGluZyBhIGZpbGUiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisJZnB1dGMoJy4nLCBzdGRlcnIpOworCisJYXZvaWRfcmFjeSgpOworCWNsb3NlKGNyZWF0ZV9maWxlKCJuZXctZGlyL25ldyIpKTsKKwl4c3RhdF9tdGltZV9kaXIoJnN0KTsKKwlpZiAobWF0Y2hfc3RhdF9kYXRhKCZiYXNlLCAmc3QpKSB7CisJCWZwdXRjKCdcbicsIHN0ZGVycik7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgIgorCQkJCSAgICAgImFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIpKTsKKwkJZ290byBkb25lOworCX0KKwlmcHV0YygnLicsIHN0ZGVycik7CisKKwlhdm9pZF9yYWN5KCk7CisJeHVubGluaygibmV3ZmlsZSIpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWlmICghbWF0Y2hfc3RhdF9kYXRhKCZiYXNlLCAmc3QpKSB7CisJCWZwdXRjKCdcbicsIHN0ZGVycik7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90ICIKKwkJCQkgICAgICJjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIikpOworCQlnb3RvIGRvbmU7CisJfQorCWZpbGxfc3RhdF9kYXRhKCZiYXNlLCAmc3QpOworCWZwdXRjKCcuJywgc3RkZXJyKTsKKworCWF2b2lkX3JhY3koKTsKKwl4dW5saW5rKCJuZXctZGlyL25ldyIpOworCXhybWRpcigibmV3LWRpciIpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWlmICghbWF0Y2hfc3RhdF9kYXRhKCZiYXNlLCAmc3QpKSB7CisJCWZwdXRjKCdcbicsIHN0ZGVycik7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90ICIKKwkJCQkgICAgICJjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAocm1kaXIobXRpbWVfZGlyLmJ1ZikpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIpLCBtdGltZV9kaXIuYnVmKTsKKwlmcHJpbnRmX2xuKHN0ZGVyciwgXygiIE9LIikpOworCXJldCA9IDE7CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJm10aW1lX2Rpcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXJrX2NlX2ZsYWdzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFnLCBpbnQgbWFyaykKK3sKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbmFtZWxlbik7CisJaWYgKDAgPD0gcG9zKSB7CisJCW1hcmtfZnNtb25pdG9yX2ludmFsaWQoJnRoZV9pbmRleCwgYWN0aXZlX2NhY2hlW3Bvc10pOworCQlpZiAobWFyaykKKwkJCWFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9mbGFncyB8PSBmbGFnOworCQllbHNlCisJCQlhY3RpdmVfY2FjaGVbcG9zXS0+Y2VfZmxhZ3MgJj0gfmZsYWc7CisJCWFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9mbGFncyB8PSBDRV9VUERBVEVfSU5fQkFTRTsKKwkJY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoJnRoZV9pbmRleCwgcGF0aCk7CisJCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkIHw9IENFX0VOVFJZX0NIQU5HRUQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX29uZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKCFhbGxvd19yZW1vdmUpCisJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IGV4aXN0IGFuZCAtLXJlbW92ZSBub3QgcGFzc2VkIiwgcGF0aCk7CisJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCByZW1vdmUgZnJvbSB0aGUgaW5kZXgiLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSBhIHBhdGggdGhhdCBjb3VsZG4ndCBiZSBsc3RhdCdlZC4gSXQncyBlaXRoZXI6CisgKiAgLSBtaXNzaW5nIGZpbGUgKEVOT0VOVCBvciBFTk9URElSKS4gVGhhdCdzIG9rIGlmIHdlJ3JlCisgKiAgICBzdXBwb3NlZCB0byBiZSByZW1vdmluZyBpdCBhbmQgdGhlIHJlbW92YWwgYWN0dWFsbHkKKyAqICAgIHN1Y2NlZWRzLgorICogIC0gcGVybWlzc2lvbiBlcnJvci4gVGhhdCdzIG5ldmVyIG9rLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfbHN0YXRfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IGVycikKK3sKKwlpZiAoaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycikpCisJCXJldHVybiByZW1vdmVfb25lX3BhdGgocGF0aCk7CisJcmV0dXJuIGVycm9yKCJsc3RhdChcIiVzXCIpOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycikpOworfQorCitzdGF0aWMgaW50IGFkZF9vbmVfcGF0aChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCwgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0KQoreworCWludCBvcHRpb247CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCS8qIFdhcyB0aGUgb2xkIGluZGV4IGVudHJ5IGFscmVhZHkgdXAtdG8tZGF0ZT8gKi8KKwlpZiAob2xkICYmICFjZV9zdGFnZShvbGQpICYmICFjZV9tYXRjaF9zdGF0KG9sZCwgc3QsIDApKQorCQlyZXR1cm4gMDsKKworCWNlID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeSgmdGhlX2luZGV4LCBsZW4pOworCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3MoMCk7CisJY2UtPmNlX25hbWVsZW4gPSBsZW47CisJZmlsbF9zdGF0X2NhY2hlX2luZm8oJnRoZV9pbmRleCwgY2UsIHN0KTsKKwljZS0+Y2VfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KG9sZCwgc3QtPnN0X21vZGUpOworCisJaWYgKGluZGV4X3BhdGgoJnRoZV9pbmRleCwgJmNlLT5vaWQsIHBhdGgsIHN0LAorCQkgICAgICAgaW5mb19vbmx5ID8gMCA6IEhBU0hfV1JJVEVfT0JKRUNUKSkgeworCQlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlvcHRpb24gPSBhbGxvd19hZGQgPyBBRERfQ0FDSEVfT0tfVE9fQUREIDogMDsKKwlvcHRpb24gfD0gYWxsb3dfcmVwbGFjZSA/IEFERF9DQUNIRV9PS19UT19SRVBMQUNFIDogMDsKKwlpZiAoYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb24pKSB7CisJCWRpc2NhcmRfY2FjaGVfZW50cnkoY2UpOworCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgYWRkIHRvIHRoZSBpbmRleCAtIG1pc3NpbmcgLS1hZGQgb3B0aW9uPyIsIHBhdGgpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSBhIHBhdGggdGhhdCB3YXMgYSBkaXJlY3RvcnkuIEZvdXIgY2FzZXM6CisgKgorICogIC0gaXQncyBhbHJlYWR5IGEgZ2l0bGluayBpbiB0aGUgaW5kZXgsIGFuZCB3ZSBrZWVwIGl0IHRoYXQKKyAqICAgIHdheSwgYW5kIHVwZGF0ZSBpdCBpZiB3ZSBjYW4gKGlmIHdlIGNhbm5vdCBmaW5kIHRoZSBIRUFELAorICogICAgd2UncmUgZ29pbmcgdG8ga2VlcCBpdCB1bmNoYW5nZWQgaW4gdGhlIGluZGV4ISkKKyAqCisgKiAgLSBpdCdzIGEgKmZpbGUqIGluIHRoZSBpbmRleCwgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmUKKyAqICAgIHJlbW92ZWQgYXMgYSBmaWxlIGlmIHJlbW92YWwgaXMgYWxsb3dlZCwgc2luY2UgaXQgZG9lc24ndAorICogICAgZXhpc3QgYXMgc3VjaCBhbnkgbW9yZS4gSWYgcmVtb3ZhbCBpc24ndCBhbGxvd2VkLCBpdCdzCisgKiAgICBhbiBlcnJvci4KKyAqCisgKiAgICAoTk9URSEgVGhpcyBpcyBvbGQgYW5kIGFyZ3VhYmx5IGZhaXJseSBzdHJhbmdlIGJlaGF2aW91ci4KKyAqICAgIFdlIG1pZ2h0IHdhbnQgdG8gbWFrZSB0aGlzIGFuIGVycm9yIHVuY29uZGl0aW9uYWxseSwgYW5kCisgKiAgICB1c2UgIi0tZm9yY2UtcmVtb3ZlIiBpZiB5b3UgYWN0dWFsbHkgd2FudCB0byBmb3JjZSByZW1vdmFsKS4KKyAqCisgKiAgLSBpdCB1c2VkIHRvIGV4aXN0IGFzIGEgc3ViZGlyZWN0b3J5IChpZSBtdWx0aXBsZSBmaWxlcyB3aXRoCisgKiAgICB0aGlzIHBhcnRpY3VsYXIgcHJlZml4KSBpbiB0aGUgaW5kZXgsIGluIHdoaWNoIGNhc2UgaXQncyB3cm9uZworICogICAgdG8gdHJ5IHRvIHVwZGF0ZSBpdCBhcyBhIGRpcmVjdG9yeS4KKyAqCisgKiAgLSBpdCBkb2Vzbid0IGV4aXN0IGF0IGFsbCBpbiB0aGUgaW5kZXgsIGJ1dCBpdCBpcyBhIHZhbGlkCisgKiAgICBnaXQgZGlyZWN0b3J5LCBhbmQgaXQgc2hvdWxkIGJlICphZGRlZCogYXMgYSBnaXRsaW5rLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKKworCS8qIEV4YWN0IG1hdGNoOiBmaWxlIG9yIGV4aXN0aW5nIGdpdGxpbmsgKi8KKwlpZiAocG9zID49IDApIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKSB7CisKKwkJCS8qIERvIG5vdGhpbmcgdG8gdGhlIGluZGV4IGlmIHRoZXJlIGlzIG5vIEhFQUQhICovCisJCQlpZiAocmVzb2x2ZV9naXRsaW5rX3JlZihwYXRoLCAiSEVBRCIsICZvaWQpIDwgMCkKKwkJCQlyZXR1cm4gMDsKKworCQkJcmV0dXJuIGFkZF9vbmVfcGF0aChjZSwgcGF0aCwgbGVuLCBzdCk7CisJCX0KKwkJLyogU2hvdWxkIHRoaXMgYmUgYW4gdW5jb25kaXRpb25hbCBlcnJvcj8gKi8KKwkJcmV0dXJuIHJlbW92ZV9vbmVfcGF0aChwYXRoKTsKKwl9CisKKwkvKiBJbmV4YWN0IG1hdGNoOiBpcyB0aGVyZSBwZXJoYXBzIGEgc3ViZGlyZWN0b3J5IG1hdGNoPyAqLworCXBvcyA9IC1wb3MtMTsKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zKytdOworCisJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dID4gJy8nKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dIDwgJy8nKQorCQkJY29udGludWU7CisKKwkJLyogU3ViZGlyZWN0b3J5IG1hdGNoIC0gZXJyb3Igb3V0ICovCisJCXJldHVybiBlcnJvcigiJXM6IGlzIGEgZGlyZWN0b3J5IC0gYWRkIGluZGl2aWR1YWwgZmlsZXMgaW5zdGVhZCIsIHBhdGgpOworCX0KKworCS8qIE5vIG1hdGNoIC0gc2hvdWxkIHdlIGFkZCBpdCBhcyBhIGdpdGxpbms/ICovCisJaWYgKCFyZXNvbHZlX2dpdGxpbmtfcmVmKHBhdGgsICJIRUFEIiwgJm9pZCkpCisJCXJldHVybiBhZGRfb25lX3BhdGgoTlVMTCwgcGF0aCwgbGVuLCBzdCk7CisKKwkvKiBFcnJvciBvdXQuICovCisJcmV0dXJuIGVycm9yKCIlczogaXMgYSBkaXJlY3RvcnkgLSBhZGQgZmlsZXMgaW5zaWRlIGluc3RlYWQiLCBwYXRoKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0LCBpbnQgc3RhdF9lcnJubykKK3sKKwlpbnQgcG9zLCBsZW47CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHBhdGgsIGxlbikpCisJCXJldHVybiBlcnJvcigiJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiwgcGF0aCk7CisKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOworCWNlID0gcG9zIDwgMCA/IE5VTEwgOiBhY3RpdmVfY2FjaGVbcG9zXTsKKwlpZiAoY2UgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJLyoKKwkJICogd29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBpcyBhc3N1bWVkICJnb29kIgorCQkgKiBzbyB1cGRhdGluZyBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlLgorCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgcmVtb3ZpbmcgaXQgZnJvbSBpbmRleCBzaG91bGQgd29yaworCQkgKi8KKwkJaWYgKCFpZ25vcmVfc2tpcF93b3JrdHJlZV9lbnRyaWVzICYmIGFsbG93X3JlbW92ZSAmJgorCQkgICAgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCByZW1vdmUgZnJvbSB0aGUgaW5kZXgiLCBwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGdldCB0aGUgc3RhdCBpbmZvcm1hdGlvbiwgdG8gZGVjaWRlCisJICogd2hhdCB0byBkbyBhYm91dCB0aGUgcGF0aG5hbWUhCisJICovCisJaWYgKHN0YXRfZXJybm8pCisJCXJldHVybiBwcm9jZXNzX2xzdGF0X2Vycm9yKHBhdGgsIHN0YXRfZXJybm8pOworCisJaWYgKFNfSVNESVIoc3QtPnN0X21vZGUpKQorCQlyZXR1cm4gcHJvY2Vzc19kaXJlY3RvcnkocGF0aCwgbGVuLCBzdCk7CisKKwlyZXR1cm4gYWRkX29uZV9wYXRoKGNlLCBwYXRoLCBsZW4sIHN0KTsKK30KKworc3RhdGljIGludCBhZGRfY2FjaGVpbmZvKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlKQoreworCWludCBsZW4sIG9wdGlvbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKCF2ZXJpZnlfcGF0aChwYXRoLCBtb2RlKSkKKwkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHBhdGggJyVzJyIsIHBhdGgpOworCisJbGVuID0gc3RybGVuKHBhdGgpOworCWNlID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeSgmdGhlX2luZGV4LCBsZW4pOworCisJb2lkY3B5KCZjZS0+b2lkLCBvaWQpOworCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3Moc3RhZ2UpOworCWNlLT5jZV9uYW1lbGVuID0gbGVuOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJaWYgKGFzc3VtZV91bmNoYW5nZWQpCisJCWNlLT5jZV9mbGFncyB8PSBDRV9WQUxJRDsKKwlvcHRpb24gPSBhbGxvd19hZGQgPyBBRERfQ0FDSEVfT0tfVE9fQUREIDogMDsKKwlvcHRpb24gfD0gYWxsb3dfcmVwbGFjZSA/IEFERF9DQUNIRV9PS19UT19SRVBMQUNFIDogMDsKKwlpZiAoYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb24pKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgYWRkIHRvIHRoZSBpbmRleCAtIG1pc3NpbmcgLS1hZGQgb3B0aW9uPyIsCisJCQkgICAgIHBhdGgpOworCXJlcG9ydCgiYWRkICclcyciLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2htb2RfcGF0aChjaGFyIGZsaXAsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvczsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAocG9zIDwgMCkKKwkJZ290byBmYWlsOworCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJaWYgKGNobW9kX2NhY2hlX2VudHJ5KGNlLCBmbGlwKSA8IDApCisJCWdvdG8gZmFpbDsKKworCXJlcG9ydCgiY2htb2QgJWN4ICclcyciLCBmbGlwLCBwYXRoKTsKKwlyZXR1cm47CisgZmFpbDoKKwlkaWUoImdpdCB1cGRhdGUtaW5kZXg6IGNhbm5vdCBjaG1vZCAlY3ggJyVzJyIsIGZsaXAsIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfb25lKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHN0YXRfZXJybm8gPSAwOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKG1hcmtfdmFsaWRfb25seSB8fCBtYXJrX3NraXBfd29ya3RyZWVfb25seSB8fCBmb3JjZV9yZW1vdmUgfHwKKwkgICAgbWFya19mc21vbml0b3Jfb25seSkKKwkJc3Quc3RfbW9kZSA9IDA7CisJZWxzZSBpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApIHsKKwkJc3Quc3RfbW9kZSA9IDA7CisJCXN0YXRfZXJybm8gPSBlcnJubzsKKwl9IC8qIGVsc2Ugc3RhdCBpcyB2YWxpZCAqLworCisJaWYgKCF2ZXJpZnlfcGF0aChwYXRoLCBzdC5zdF9tb2RlKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklnbm9yaW5nIHBhdGggJXNcbiIsIHBhdGgpOworCQlyZXR1cm47CisJfQorCWlmIChtYXJrX3ZhbGlkX29ubHkpIHsKKwkJaWYgKG1hcmtfY2VfZmxhZ3MocGF0aCwgQ0VfVkFMSUQsIG1hcmtfdmFsaWRfb25seSA9PSBNQVJLX0ZMQUcpKQorCQkJZGllKCJVbmFibGUgdG8gbWFyayBmaWxlICVzIiwgcGF0aCk7CisJCXJldHVybjsKKwl9CisJaWYgKG1hcmtfc2tpcF93b3JrdHJlZV9vbmx5KSB7CisJCWlmIChtYXJrX2NlX2ZsYWdzKHBhdGgsIENFX1NLSVBfV09SS1RSRUUsIG1hcmtfc2tpcF93b3JrdHJlZV9vbmx5ID09IE1BUktfRkxBRykpCisJCQlkaWUoIlVuYWJsZSB0byBtYXJrIGZpbGUgJXMiLCBwYXRoKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobWFya19mc21vbml0b3Jfb25seSkgeworCQlpZiAobWFya19jZV9mbGFncyhwYXRoLCBDRV9GU01PTklUT1JfVkFMSUQsIG1hcmtfZnNtb25pdG9yX29ubHkgPT0gTUFSS19GTEFHKSkKKwkJCWRpZSgiVW5hYmxlIHRvIG1hcmsgZmlsZSAlcyIsIHBhdGgpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZvcmNlX3JlbW92ZSkgeworCQlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKKwkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHJlbW92ZSAlcyIsIHBhdGgpOworCQlyZXBvcnQoInJlbW92ZSAnJXMnIiwgcGF0aCk7CisJCXJldHVybjsKKwl9CisJaWYgKHByb2Nlc3NfcGF0aChwYXRoLCAmc3QsIHN0YXRfZXJybm8pKQorCQlkaWUoIlVuYWJsZSB0byBwcm9jZXNzIHBhdGggJXMiLCBwYXRoKTsKKwlyZXBvcnQoImFkZCAnJXMnIiwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfaW5kZXhfaW5mbyhpbnQgbnVsX3Rlcm1fbGluZSkKK3sKKwljb25zdCBpbnQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdXEgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfZ2V0bGluZV9mbiBnZXRsaW5lX2ZuOworCisJZ2V0bGluZV9mbiA9IG51bF90ZXJtX2xpbmUgPyBzdHJidWZfZ2V0bGluZV9udWwgOiBzdHJidWZfZ2V0bGluZV9sZjsKKwl3aGlsZSAoZ2V0bGluZV9mbigmYnVmLCBzdGRpbikgIT0gRU9GKSB7CisJCWNoYXIgKnB0ciwgKnRhYjsKKwkJY2hhciAqcGF0aF9uYW1lOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJdW5zaWduZWQgaW50IG1vZGU7CisJCXVuc2lnbmVkIGxvbmcgdWw7CisJCWludCBzdGFnZTsKKworCQkvKiBUaGlzIHJlYWRzIGxpbmVzIGZvcm1hdHRlZCBpbiBvbmUgb2YgdGhyZWUgZm9ybWF0czoKKwkJICoKKwkJICogKDEpIG1vZGUgICAgICAgICBTUCBzaGExICAgICAgICAgIFRBQiBwYXRoCisJCSAqIFRoZSBmaXJzdCBmb3JtYXQgaXMgd2hhdCAiZ2l0IGFwcGx5IC0taW5kZXgtaW5mbyIKKwkJICogcmVwb3J0cywgYW5kIHVzZWQgdG8gcmVjb25zdHJ1Y3QgYSBwYXJ0aWFsIHRyZWUKKwkJICogdGhhdCBpcyB1c2VkIGZvciBwaG9ueSBtZXJnZSBiYXNlIHRyZWUgd2hlbiBmYWxsaW5nCisJCSAqIGJhY2sgb24gMy13YXkgbWVyZ2UuCisJCSAqCisJCSAqICgyKSBtb2RlIFNQIHR5cGUgU1Agc2hhMSAgICAgICAgICBUQUIgcGF0aAorCQkgKiBUaGUgc2Vjb25kIGZvcm1hdCBpcyB0byBzdHVmZiAiZ2l0IGxzLXRyZWUiIG91dHB1dAorCQkgKiBpbnRvIHRoZSBpbmRleCBmaWxlLgorCQkgKgorCQkgKiAoMykgbW9kZSAgICAgICAgIFNQIHNoYTEgU1Agc3RhZ2UgVEFCIHBhdGgKKwkJICogVGhpcyBmb3JtYXQgaXMgdG8gcHV0IGhpZ2hlciBvcmRlciBzdGFnZXMgaW50byB0aGUKKwkJICogaW5kZXggZmlsZSBhbmQgbWF0Y2hlcyAiZ2l0IGxzLWZpbGVzIC0tc3RhZ2UiIG91dHB1dC4KKwkJICovCisJCWVycm5vID0gMDsKKwkJdWwgPSBzdHJ0b3VsKGJ1Zi5idWYsICZwdHIsIDgpOworCQlpZiAocHRyID09IGJ1Zi5idWYgfHwgKnB0ciAhPSAnICcKKwkJICAgIHx8IGVycm5vIHx8ICh1bnNpZ25lZCBpbnQpIHVsICE9IHVsKQorCQkJZ290byBiYWRfbGluZTsKKwkJbW9kZSA9IHVsOworCisJCXRhYiA9IHN0cmNocihwdHIsICdcdCcpOworCQlpZiAoIXRhYiB8fCB0YWIgLSBwdHIgPCBoZXhzeiArIDEpCisJCQlnb3RvIGJhZF9saW5lOworCisJCWlmICh0YWJbLTJdID09ICcgJyAmJiAnMCcgPD0gdGFiWy0xXSAmJiB0YWJbLTFdIDw9ICczJykgeworCQkJc3RhZ2UgPSB0YWJbLTFdIC0gJzAnOworCQkJcHRyID0gdGFiICsgMTsgLyogcG9pbnQgYXQgdGhlIGhlYWQgb2YgcGF0aCAqLworCQkJdGFiID0gdGFiIC0gMjsgLyogcG9pbnQgYXQgdGFpbCBvZiBzaGExICovCisJCX0KKwkJZWxzZSB7CisJCQlzdGFnZSA9IDA7CisJCQlwdHIgPSB0YWIgKyAxOyAvKiBwb2ludCBhdCB0aGUgaGVhZCBvZiBwYXRoICovCisJCX0KKworCQlpZiAoZ2V0X29pZF9oZXgodGFiIC0gaGV4c3osICZvaWQpIHx8CisJCQl0YWJbLShoZXhzeiArIDEpXSAhPSAnICcpCisJCQlnb3RvIGJhZF9saW5lOworCisJCXBhdGhfbmFtZSA9IHB0cjsKKwkJaWYgKCFudWxfdGVybV9saW5lICYmIHBhdGhfbmFtZVswXSA9PSAnIicpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmdXEpOworCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmdXEsIHBhdGhfbmFtZSwgTlVMTCkpIHsKKwkJCQlkaWUoImdpdCB1cGRhdGUtaW5kZXg6IGJhZCBxdW90aW5nIG9mIHBhdGggbmFtZSIpOworCQkJfQorCQkJcGF0aF9uYW1lID0gdXEuYnVmOworCQl9CisKKwkJaWYgKCF2ZXJpZnlfcGF0aChwYXRoX25hbWUsIG1vZGUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIklnbm9yaW5nIHBhdGggJXNcbiIsIHBhdGhfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghbW9kZSkgeworCQkJLyogbW9kZSA9PSAwIG1lYW5zIHRoZXJlIGlzIG5vIHN1Y2ggcGF0aCAtLSByZW1vdmUgKi8KKwkJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGhfbmFtZSkpCisJCQkJZGllKCJnaXQgdXBkYXRlLWluZGV4OiB1bmFibGUgdG8gcmVtb3ZlICVzIiwKKwkJCQkgICAgcHRyKTsKKwkJfQorCQllbHNlIHsKKwkJCS8qIG1vZGUgJyAnIHNoYTEgJ1x0JyBuYW1lCisJCQkgKiBwdHJbLTFdIHBvaW50cyBhdCB0YWIsCisJCQkgKiBwdHJbLTQxXSBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHNoYTEKKwkJCSAqLworCQkJcHRyWy0oaGV4c3ogKyAyKV0gPSBwdHJbLTFdID0gMDsKKwkJCWlmIChhZGRfY2FjaGVpbmZvKG1vZGUsICZvaWQsIHBhdGhfbmFtZSwgc3RhZ2UpKQorCQkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHVwZGF0ZSAlcyIsCisJCQkJICAgIHBhdGhfbmFtZSk7CisJCX0KKwkJY29udGludWU7CisKKwliYWRfbGluZToKKwkJZGllKCJtYWxmb3JtZWQgaW5kZXggaW5mbyAlcyIsIGJ1Zi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdXEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVwZGF0ZV9pbmRleF91c2FnZVtdID0geworCU5fKCJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2lkIG1lcmdlX2hlYWRfb2lkOworCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpyZWFkX29uZV9lbnQoY29uc3QgY2hhciAqd2hpY2gsCisJCQkJCXN0cnVjdCBvYmplY3RfaWQgKmVudCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJaW50IG5hbWVsZW4sIGludCBzdGFnZSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBtb2RlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAoZ2V0X3RyZWVfZW50cnkodGhlX3JlcG9zaXRvcnksIGVudCwgcGF0aCwgJm9pZCwgJm1vZGUpKSB7CisJCWlmICh3aGljaCkKKwkJCWVycm9yKCIlczogbm90IGluICVzIGJyYW5jaC4iLCBwYXRoLCB3aGljaCk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAobW9kZSA9PSBTX0lGRElSKSB7CisJCWlmICh3aGljaCkKKwkJCWVycm9yKCIlczogbm90IGEgYmxvYiBpbiAlcyBicmFuY2guIiwgcGF0aCwgd2hpY2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJY2UgPSBtYWtlX2VtcHR5X2NhY2hlX2VudHJ5KCZ0aGVfaW5kZXgsIG5hbWVsZW4pOworCisJb2lkY3B5KCZjZS0+b2lkLCAmb2lkKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pOworCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncyhzdGFnZSk7CisJY2UtPmNlX25hbWVsZW4gPSBuYW1lbGVuOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJcmV0dXJuIGNlOworfQorCitzdGF0aWMgaW50IHVucmVzb2x2ZV9vbmUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpbnQgcG9zOworCWludCByZXQgPSAwOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2VfMiA9IE5VTEwsICpjZV8zID0gTlVMTDsKKworCS8qIFNlZSBpZiB0aGVyZSBpcyBzdWNoIGVudHJ5IGluIHRoZSBpbmRleC4gKi8KKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBuYW1lbGVuKTsKKwlpZiAoMCA8PSBwb3MpIHsKKwkJLyogYWxyZWFkeSBtZXJnZWQgKi8KKwkJcG9zID0gdW5tZXJnZV9jYWNoZV9lbnRyeV9hdChwb3MpOworCQlpZiAocG9zIDwgYWN0aXZlX25yKSB7CisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCQlpZiAoY2Vfc3RhZ2UoY2UpICYmCisJCQkgICAgY2VfbmFtZWxlbihjZSkgPT0gbmFtZWxlbiAmJgorCQkJICAgICFtZW1jbXAoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pKQorCQkJCXJldHVybiAwOworCQl9CisJCS8qIG5vIHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbjsgZmFsbCBiYWNrICovCisJfSBlbHNlIHsKKwkJLyogSWYgdGhlcmUgaXNuJ3QsIGVpdGhlciBpdCBpcyB1bm1lcmdlZCwgb3IKKwkJICogcmVzb2x2ZWQgYXMgInJlbW92ZWQiIGJ5IG1pc3Rha2UuICBXZSBkbyBub3QKKwkJICogd2FudCB0byBkbyBhbnl0aGluZyBpbiB0aGUgZm9ybWVyIGNhc2UuCisJCSAqLworCQlwb3MgPSAtcG9zLTE7CisJCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBuYW1lbGVuICYmCisJCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgcGF0aCwgbmFtZWxlbikpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIiVzOiBza2lwcGluZyBzdGlsbCB1bm1lcmdlZCBwYXRoLlxuIiwKKwkJCQkJcGF0aCk7CisJCQkJZ290byBmcmVlX3JldHVybjsKKwkJCX0KKwkJfQorCX0KKworCS8qIEdyYWIgYmxvYnMgZnJvbSBnaXZlbiBwYXRoIGZyb20gSEVBRCBhbmQgTUVSR0VfSEVBRCwKKwkgKiBzdHVmZiBIRUFEIHZlcnNpb24gaW4gc3RhZ2UgIzIsCisJICogc3R1ZmYgTUVSR0VfSEVBRCB2ZXJzaW9uIGluIHN0YWdlICMzLgorCSAqLworCWNlXzIgPSByZWFkX29uZV9lbnQoIm91ciIsICZoZWFkX29pZCwgcGF0aCwgbmFtZWxlbiwgMik7CisJY2VfMyA9IHJlYWRfb25lX2VudCgidGhlaXIiLCAmbWVyZ2VfaGVhZF9vaWQsIHBhdGgsIG5hbWVsZW4sIDMpOworCisJaWYgKCFjZV8yIHx8ICFjZV8zKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGZyZWVfcmV0dXJuOworCX0KKwlpZiAob2lkZXEoJmNlXzItPm9pZCwgJmNlXzMtPm9pZCkgJiYKKwkgICAgY2VfMi0+Y2VfbW9kZSA9PSBjZV8zLT5jZV9tb2RlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IGlkZW50aWNhbCBpbiBib3RoLCBza2lwcGluZy5cbiIsCisJCQlwYXRoKTsKKwkJZ290byBmcmVlX3JldHVybjsKKwl9CisKKwlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCWlmIChhZGRfY2FjaGVfZW50cnkoY2VfMiwgQUREX0NBQ0hFX09LX1RPX0FERCkpIHsKKwkJZXJyb3IoIiVzOiBjYW5ub3QgYWRkIG91ciB2ZXJzaW9uIHRvIHRoZSBpbmRleC4iLCBwYXRoKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCWlmICghYWRkX2NhY2hlX2VudHJ5KGNlXzMsIEFERF9DQUNIRV9PS19UT19BREQpKQorCQlyZXR1cm4gMDsKKwllcnJvcigiJXM6IGNhbm5vdCBhZGQgdGhlaXIgdmVyc2lvbiB0byB0aGUgaW5kZXguIiwgcGF0aCk7CisJcmV0ID0gLTE7CisgZnJlZV9yZXR1cm46CisJZGlzY2FyZF9jYWNoZV9lbnRyeShjZV8yKTsKKwlkaXNjYXJkX2NhY2hlX2VudHJ5KGNlXzMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfaGVhZF9wb2ludGVycyh2b2lkKQoreworCWlmIChyZWFkX3JlZigiSEVBRCIsICZoZWFkX29pZCkpCisJCWRpZSgiTm8gSEVBRCAtLSBubyBpbml0aWFsIGNvbW1pdCB5ZXQ/Iik7CisJaWYgKHJlYWRfcmVmKCJNRVJHRV9IRUFEIiwgJm1lcmdlX2hlYWRfb2lkKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuXG4iKTsKKwkJZXhpdCgwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fdW5yZXNvbHZlKGludCBhYywgY29uc3QgY2hhciAqKmF2LAorCQkJY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbmd0aCkKK3sKKwlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKworCS8qIFJlYWQgSEVBRCBhbmQgTUVSR0VfSEVBRDsgaWYgTUVSR0VfSEVBRCBkb2VzIG5vdCBleGlzdCwgd2UKKwkgKiBhcmUgbm90IGRvaW5nIGEgbWVyZ2UsIHNvIGV4aXQgd2l0aCBzdWNjZXNzIHN0YXR1cy4KKwkgKi8KKwlyZWFkX2hlYWRfcG9pbnRlcnMoKTsKKworCWZvciAoaSA9IDE7IGkgPCBhYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGF2W2ldOworCQljaGFyICpwID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhcmcpOworCQllcnIgfD0gdW5yZXNvbHZlX29uZShwKTsKKwkJZnJlZShwKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkb19yZXVwZGF0ZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwkvKiBSZWFkIEhFQUQgYW5kIHJ1biB1cGRhdGUtaW5kZXggb24gcGF0aHMgdGhhdCBhcmUKKwkgKiBtZXJnZWQgYW5kIGFscmVhZHkgZGlmZmVyZW50IGJldHdlZW4gaW5kZXggYW5kIEhFQUQuCisJICovCisJaW50IHBvczsKKwlpbnQgaGFzX2hlYWQgPSAxOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QsCisJCSAgICAgICBwcmVmaXgsIGF2ICsgMSk7CisKKwlpZiAocmVhZF9yZWYoIkhFQUQiLCAmaGVhZF9vaWQpKQorCQkvKiBJZiB0aGVyZSBpcyBubyBIRUFELCB0aGF0IG1lYW5zIGl0IGlzIGFuIGluaXRpYWwKKwkJICogY29tbWl0LiAgVXBkYXRlIGV2ZXJ5dGhpbmcgaW4gdGhlIGluZGV4LgorCQkgKi8KKwkJaGFzX2hlYWQgPSAwOworIHJlZG86CisJZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBOVUxMOworCQlpbnQgc2F2ZV9ucjsKKwkJY2hhciAqcGF0aDsKKworCQlpZiAoY2Vfc3RhZ2UoY2UpIHx8ICFjZV9wYXRoX21hdGNoKCZ0aGVfaW5kZXgsIGNlLCAmcGF0aHNwZWMsIE5VTEwpKQorCQkJY29udGludWU7CisJCWlmIChoYXNfaGVhZCkKKwkJCW9sZCA9IHJlYWRfb25lX2VudChOVUxMLCAmaGVhZF9vaWQsCisJCQkJCSAgIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgMCk7CisJCWlmIChvbGQgJiYgY2UtPmNlX21vZGUgPT0gb2xkLT5jZV9tb2RlICYmCisJCSAgICBvaWRlcSgmY2UtPm9pZCwgJm9sZC0+b2lkKSkgeworCQkJZGlzY2FyZF9jYWNoZV9lbnRyeShvbGQpOworCQkJY29udGludWU7IC8qIHVuY2hhbmdlZCAqLworCQl9CisJCS8qIEJlIGNhcmVmdWwuICBUaGUgd29ya2luZyB0cmVlIG1heSBub3QgaGF2ZSB0aGUKKwkJICogcGF0aCBhbnltb3JlLCBpbiB3aGljaCBjYXNlLCB1bmRlciAnYWxsb3dfcmVtb3ZlJywKKwkJICogb3Igd29yc2UgeWV0ICdhbGxvd19yZXBsYWNlJywgYWN0aXZlX25yIG1heSBkZWNyZWFzZS4KKwkJICovCisJCXNhdmVfbnIgPSBhY3RpdmVfbnI7CisJCXBhdGggPSB4c3RyZHVwKGNlLT5uYW1lKTsKKwkJdXBkYXRlX29uZShwYXRoKTsKKwkJZnJlZShwYXRoKTsKKwkJZGlzY2FyZF9jYWNoZV9lbnRyeShvbGQpOworCQlpZiAoc2F2ZV9uciAhPSBhY3RpdmVfbnIpCisJCQlnb3RvIHJlZG87CisJfQorCWNsZWFyX3BhdGhzcGVjKCZwYXRoc3BlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZWZyZXNoX3BhcmFtcyB7CisJdW5zaWduZWQgaW50IGZsYWdzOworCWludCAqaGFzX2Vycm9yczsKK307CisKK3N0YXRpYyBpbnQgcmVmcmVzaChzdHJ1Y3QgcmVmcmVzaF9wYXJhbXMgKm8sIHVuc2lnbmVkIGludCBmbGFnKQoreworCXNldHVwX3dvcmtfdHJlZSgpOworCXJlYWRfY2FjaGUoKTsKKwkqby0+aGFzX2Vycm9ycyB8PSByZWZyZXNoX2NhY2hlKG8tPmZsYWdzIHwgZmxhZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVmcmVzaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisJcmV0dXJuIHJlZnJlc2gob3B0LT52YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhbGx5X3JlZnJlc2hfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCXJldHVybiByZWZyZXNoKG9wdC0+dmFsdWUsIFJFRlJFU0hfUkVBTExZKTsKK30KKworc3RhdGljIGludCBjaG1vZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJY2hhciAqZmxpcCA9IG9wdC0+dmFsdWU7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCWlmICgoYXJnWzBdICE9ICctJyAmJiBhcmdbMF0gIT0gJysnKSB8fCBhcmdbMV0gIT0gJ3gnIHx8IGFyZ1syXSkKKwkJcmV0dXJuIGVycm9yKCJvcHRpb24gJ2NobW9kJyBleHBlY3RzIFwiK3hcIiBvciBcIi14XCIiKTsKKwkqZmxpcCA9IGFyZ1swXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNvbHZlX3VuZG9fY2xlYXJfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCXJlc29sdmVfdW5kb19jbGVhcigpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX25ld19zdHlsZV9jYWNoZWluZm8oY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICptb2RlLAorCQkJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgICAgY29uc3QgY2hhciAqKnBhdGgpCit7CisJdW5zaWduZWQgbG9uZyB1bDsKKwljaGFyICplbmRwOworCWNvbnN0IGNoYXIgKnA7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJZXJybm8gPSAwOworCXVsID0gc3RydG91bChhcmcsICZlbmRwLCA4KTsKKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBhcmcgfHwgKmVuZHAgIT0gJywnIHx8ICh1bnNpZ25lZCBpbnQpIHVsICE9IHVsKQorCQlyZXR1cm4gLTE7IC8qIG5vdCBhIG5ldy1zdHlsZSBjYWNoZWluZm8gKi8KKwkqbW9kZSA9IHVsOworCWVuZHArKzsKKwlpZiAocGFyc2Vfb2lkX2hleChlbmRwLCBvaWQsICZwKSB8fCAqcCAhPSAnLCcpCisJCXJldHVybiAtMTsKKwkqcGF0aCA9IHAgKyAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBwYXJzZV9vcHRfcmVzdWx0IGNhY2hlaW5mb19jYWxsYmFjaygKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwljb25zdCBjaGFyICpwYXRoOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlpZiAoIXBhcnNlX25ld19zdHlsZV9jYWNoZWluZm8oY3R4LT5hcmd2WzFdLCAmbW9kZSwgJm9pZCwgJnBhdGgpKSB7CisJCWlmIChhZGRfY2FjaGVpbmZvKG1vZGUsICZvaWQsIHBhdGgsIDApKQorCQkJZGllKCJnaXQgdXBkYXRlLWluZGV4OiAtLWNhY2hlaW5mbyBjYW5ub3QgYWRkICVzIiwgcGF0aCk7CisJCWN0eC0+YXJndisrOworCQljdHgtPmFyZ2MtLTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjdHgtPmFyZ2MgPD0gMykKKwkJcmV0dXJuIGVycm9yKCJvcHRpb24gJ2NhY2hlaW5mbycgZXhwZWN0cyA8bW9kZT4sPHNoYTE+LDxwYXRoPiIpOworCWlmIChzdHJ0b3VsX3VpKCorK2N0eC0+YXJndiwgOCwgJm1vZGUpIHx8CisJICAgIGdldF9vaWRfaGV4KCorK2N0eC0+YXJndiwgJm9pZCkgfHwKKwkgICAgYWRkX2NhY2hlaW5mbyhtb2RlLCAmb2lkLCAqKytjdHgtPmFyZ3YsIDApKQorCQlkaWUoImdpdCB1cGRhdGUtaW5kZXg6IC0tY2FjaGVpbmZvIGNhbm5vdCBhZGQgJXMiLCAqY3R4LT5hcmd2KTsKKwljdHgtPmFyZ2MgLT0gMzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCBzdGRpbl9jYWNoZWluZm9fY2FsbGJhY2soCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICpudWxfdGVybV9saW5lID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKwlCVUdfT05fT1BUX0FSRyhhcmcpOworCisJaWYgKGN0eC0+YXJnYyAhPSAxKQorCQlyZXR1cm4gZXJyb3IoIm9wdGlvbiAnJXMnIG11c3QgYmUgdGhlIGxhc3QgYXJndW1lbnQiLCBvcHQtPmxvbmdfbmFtZSk7CisJYWxsb3dfYWRkID0gYWxsb3dfcmVwbGFjZSA9IGFsbG93X3JlbW92ZSA9IDE7CisJcmVhZF9pbmRleF9pbmZvKCpudWxfdGVybV9saW5lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCBzdGRpbl9jYWxsYmFjaygKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKnJlYWRfZnJvbV9zdGRpbiA9IG9wdC0+dmFsdWU7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisJQlVHX09OX09QVF9BUkcoYXJnKTsKKworCWlmIChjdHgtPmFyZ2MgIT0gMSkKKwkJcmV0dXJuIGVycm9yKCJvcHRpb24gJyVzJyBtdXN0IGJlIHRoZSBsYXN0IGFyZ3VtZW50Iiwgb3B0LT5sb25nX25hbWUpOworCSpyZWFkX2Zyb21fc3RkaW4gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBwYXJzZV9vcHRfcmVzdWx0IHVucmVzb2x2ZV9jYWxsYmFjaygKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKmhhc19lcnJvcnMgPSBvcHQtPnZhbHVlOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IHN0YXJ0dXBfaW5mby0+cHJlZml4OworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwkvKiBjb25zdW1lIHJlbWFpbmluZyBhcmd1bWVudHMuICovCisJKmhhc19lcnJvcnMgPSBkb191bnJlc29sdmUoY3R4LT5hcmdjLCBjdHgtPmFyZ3YsCisJCQkJcHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDApOworCWlmICgqaGFzX2Vycm9ycykKKwkJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAwOworCisJY3R4LT5hcmd2ICs9IGN0eC0+YXJnYyAtIDE7CisJY3R4LT5hcmdjID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCByZXVwZGF0ZV9jYWxsYmFjaygKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKmhhc19lcnJvcnMgPSBvcHQtPnZhbHVlOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IHN0YXJ0dXBfaW5mby0+cHJlZml4OworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwkvKiBjb25zdW1lIHJlbWFpbmluZyBhcmd1bWVudHMuICovCisJc2V0dXBfd29ya190cmVlKCk7CisJKmhhc19lcnJvcnMgPSBkb19yZXVwZGF0ZShjdHgtPmFyZ2MsIGN0eC0+YXJndiwgcHJlZml4KTsKKwlpZiAoKmhhc19lcnJvcnMpCisJCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkID0gMDsKKworCWN0eC0+YXJndiArPSBjdHgtPmFyZ2MgLSAxOworCWN0eC0+YXJnYyA9IDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfdXBkYXRlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBuZXdmZCwgZW50cmllcywgaGFzX2Vycm9ycyA9IDAsIG51bF90ZXJtX2xpbmUgPSAwOworCWVudW0gdWNfbW9kZSB1bnRyYWNrZWRfY2FjaGUgPSBVQ19VTlNQRUNJRklFRDsKKwlpbnQgcmVhZF9mcm9tX3N0ZGluID0gMDsKKwlpbnQgcHJlZml4X2xlbmd0aCA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwlpbnQgcHJlZmVycmVkX2luZGV4X2Zvcm1hdCA9IDA7CisJY2hhciBzZXRfZXhlY3V0YWJsZV9iaXQgPSAwOworCXN0cnVjdCByZWZyZXNoX3BhcmFtcyByZWZyZXNoX2FyZ3MgPSB7MCwgJmhhc19lcnJvcnN9OworCWludCBsb2NrX2Vycm9yID0gMDsKKwlpbnQgc3BsaXRfaW5kZXggPSAtMTsKKwlpbnQgZm9yY2Vfd3JpdGUgPSAwOworCWludCBmc21vbml0b3IgPSAtMTsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZSA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90IGN0eDsKKwlzdHJidWZfZ2V0bGluZV9mbiBnZXRsaW5lX2ZuOworCWludCBwYXJzZW9wdF9zdGF0ZSA9IFBBUlNFX09QVF9VTktOT1dOOworCXN0cnVjdCByZXBvc2l0b3J5ICpyID0gdGhlX3JlcG9zaXRvcnk7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CSVQoJ3EnLCBOVUxMLCAmcmVmcmVzaF9hcmdzLmZsYWdzLAorCQkJTl8oImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIpLAorCQkJUkVGUkVTSF9RVUlFVCksCisJCU9QVF9CSVQoMCwgImlnbm9yZS1zdWJtb2R1bGVzIiwgJnJlZnJlc2hfYXJncy5mbGFncywKKwkJCU5fKCJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIpLAorCQkJUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUyksCisJCU9QVF9TRVRfSU5UKDAsICJhZGQiLCAmYWxsb3dfYWRkLAorCQkJTl8oImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAicmVwbGFjZSIsICZhbGxvd19yZXBsYWNlLAorCQkJTl8oImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAicmVtb3ZlIiwgJmFsbG93X3JlbW92ZSwKKwkJCU5fKCJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIiksIDEpLAorCQlPUFRfQklUKDAsICJ1bm1lcmdlZCIsICZyZWZyZXNoX2FyZ3MuZmxhZ3MsCisJCQlOXygicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiKSwKKwkJCVJFRlJFU0hfVU5NRVJHRUQpLAorCQl7T1BUSU9OX0NBTExCQUNLLCAwLCAicmVmcmVzaCIsICZyZWZyZXNoX2FyZ3MsIE5VTEwsCisJCQlOXygicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlyZWZyZXNoX2NhbGxiYWNrfSwKKwkJe09QVElPTl9DQUxMQkFDSywgMCwgInJlYWxseS1yZWZyZXNoIiwgJnJlZnJlc2hfYXJncywgTlVMTCwKKwkJCU5fKCJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCXJlYWxseV9yZWZyZXNoX2NhbGxiYWNrfSwKKwkJe09QVElPTl9MT1dMRVZFTF9DQUxMQkFDSywgMCwgImNhY2hlaW5mbyIsIE5VTEwsCisJCQlOXygiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIpLAorCQkJTl8oImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgLyogZGlzYWxsb3cgLS1jYWNoZWluZm89PG1vZGU+IGZvcm0gKi8KKwkJCVBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAsCisJCQlOVUxMLCAwLAorCQkJY2FjaGVpbmZvX2NhbGxiYWNrfSwKKwkJe09QVElPTl9DQUxMQkFDSywgMCwgImNobW9kIiwgJnNldF9leGVjdXRhYmxlX2JpdCwgIigrfC0peCIsCisJCQlOXygib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiKSwKKwkJCVBBUlNFX09QVF9OT05FRywKKwkJCWNobW9kX2NhbGxiYWNrfSwKKwkJe09QVElPTl9TRVRfSU5ULCAwLCAiYXNzdW1lLXVuY2hhbmdlZCIsICZtYXJrX3ZhbGlkX29ubHksIE5VTEwsCisJCQlOXygibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIE1BUktfRkxBR30sCisJCXtPUFRJT05fU0VUX0lOVCwgMCwgIm5vLWFzc3VtZS11bmNoYW5nZWQiLCAmbWFya192YWxpZF9vbmx5LCBOVUxMLAorCQkJTl8oImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBVTk1BUktfRkxBR30sCisJCXtPUFRJT05fU0VUX0lOVCwgMCwgInNraXAtd29ya3RyZWUiLCAmbWFya19za2lwX3dvcmt0cmVlX29ubHksIE5VTEwsCisJCQlOXygibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBNQVJLX0ZMQUd9LAorCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJuby1za2lwLXdvcmt0cmVlIiwgJm1hcmtfc2tpcF93b3JrdHJlZV9vbmx5LCBOVUxMLAorCQkJTl8oImNsZWFyIHNraXAtd29ya3RyZWUgYml0IiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIFVOTUFSS19GTEFHfSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXMiLCAmaWdub3JlX3NraXBfd29ya3RyZWVfZW50cmllcywKKwkJCSBOXygiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgImluZm8tb25seSIsICZpbmZvX29ubHksCisJCQlOXygiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiKSwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJmb3JjZS1yZW1vdmUiLCAmZm9yY2VfcmVtb3ZlLAorCQkJTl8oInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiKSwgMSksCisJCU9QVF9CT09MKCd6JywgTlVMTCwgJm51bF90ZXJtX2xpbmUsCisJCQkgTl8oIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIpKSwKKwkJe09QVElPTl9MT1dMRVZFTF9DQUxMQkFDSywgMCwgInN0ZGluIiwgJnJlYWRfZnJvbV9zdGRpbiwgTlVMTCwKKwkJCU5fKCJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IiksCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsCisJCQlOVUxMLCAwLCBzdGRpbl9jYWxsYmFja30sCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssIDAsICJpbmRleC1pbmZvIiwgJm51bF90ZXJtX2xpbmUsIE5VTEwsCisJCQlOXygiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiKSwKKwkJCVBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0FSRywKKwkJCU5VTEwsIDAsIHN0ZGluX2NhY2hlaW5mb19jYWxsYmFja30sCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssIDAsICJ1bnJlc29sdmUiLCAmaGFzX2Vycm9ycywgTlVMTCwKKwkJCU5fKCJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiKSwKKwkJCVBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0FSRywKKwkJCU5VTEwsIDAsIHVucmVzb2x2ZV9jYWxsYmFja30sCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssICdnJywgImFnYWluIiwgJmhhc19lcnJvcnMsIE5VTEwsCisJCQlOXygib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiKSwKKwkJCVBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0FSRywKKwkJCU5VTEwsIDAsIHJldXBkYXRlX2NhbGxiYWNrfSwKKwkJT1BUX0JJVCgwLCAiaWdub3JlLW1pc3NpbmciLCAmcmVmcmVzaF9hcmdzLmZsYWdzLAorCQkJTl8oImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiKSwKKwkJCVJFRlJFU0hfSUdOT1JFX01JU1NJTkcpLAorCQlPUFRfU0VUX0lOVCgwLCAidmVyYm9zZSIsICZ2ZXJib3NlLAorCQkJTl8oInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIpLCAxKSwKKwkJe09QVElPTl9DQUxMQkFDSywgMCwgImNsZWFyLXJlc29sdmUtdW5kbyIsIE5VTEwsIE5VTEwsCisJCQlOXygiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywKKwkJCXJlc29sdmVfdW5kb19jbGVhcl9jYWxsYmFja30sCisJCU9QVF9JTlRFR0VSKDAsICJpbmRleC12ZXJzaW9uIiwgJnByZWZlcnJlZF9pbmRleF9mb3JtYXQsCisJCQlOXygid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiKSksCisJCU9QVF9CT09MKDAsICJzcGxpdC1pbmRleCIsICZzcGxpdF9pbmRleCwKKwkJCU5fKCJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIpKSwKKwkJT1BUX0JPT0woMCwgInVudHJhY2tlZC1jYWNoZSIsICZ1bnRyYWNrZWRfY2FjaGUsCisJCQlOXygiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIikpLAorCQlPUFRfU0VUX0lOVCgwLCAidGVzdC11bnRyYWNrZWQtY2FjaGUiLCAmdW50cmFja2VkX2NhY2hlLAorCQkJICAgIE5fKCJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIpLCBVQ19URVNUKSwKKwkJT1BUX1NFVF9JTlQoMCwgImZvcmNlLXVudHJhY2tlZC1jYWNoZSIsICZ1bnRyYWNrZWRfY2FjaGUsCisJCQkgICAgTl8oImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIiksIFVDX0ZPUkNFKSwKKwkJT1BUX1NFVF9JTlQoMCwgImZvcmNlLXdyaXRlLWluZGV4IiwgJmZvcmNlX3dyaXRlLAorCQkJTl8oIndyaXRlIG91dCB0aGUgaW5kZXggZXZlbiBpZiBpcyBub3QgZmxhZ2dlZCBhcyBjaGFuZ2VkIiksIDEpLAorCQlPUFRfQk9PTCgwLCAiZnNtb25pdG9yIiwgJmZzbW9uaXRvciwKKwkJCU5fKCJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIikpLAorCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJmc21vbml0b3ItdmFsaWQiLCAmbWFya19mc21vbml0b3Jfb25seSwgTlVMTCwKKwkJCU5fKCJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBNQVJLX0ZMQUd9LAorCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJuby1mc21vbml0b3ItdmFsaWQiLCAmbWFya19mc21vbml0b3Jfb25seSwgTlVMTCwKKwkJCU5fKCJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIFVOTUFSS19GTEFHfSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVwZGF0ZV9pbmRleF91c2FnZSwgb3B0aW9ucyk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwkvKiB3ZSB3aWxsIGRpYWdub3NlIGxhdGVyIGlmIGl0IHR1cm5zIG91dCB0aGF0IHdlIG5lZWQgdG8gdXBkYXRlIGl0ICovCisJbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCAwKTsKKwlpZiAobmV3ZmQgPCAwKQorCQlsb2NrX2Vycm9yID0gZXJybm87CisKKwllbnRyaWVzID0gcmVhZF9jYWNoZSgpOworCWlmIChlbnRyaWVzIDwgMCkKKwkJZGllKCJjYWNoZSBjb3JydXB0ZWQiKTsKKworCXRoZV9pbmRleC51cGRhdGVkX3NraXB3b3JrdHJlZSA9IDE7CisKKwkvKgorCSAqIEN1c3RvbSBjb3B5IG9mIHBhcnNlX29wdGlvbnMoKSBiZWNhdXNlIHdlIHdhbnQgdG8gaGFuZGxlCisJICogZmlsZW5hbWUgYXJndW1lbnRzIGFzIHRoZXkgY29tZS4KKwkgKi8KKwlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICBvcHRpb25zLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwl3aGlsZSAoY3R4LmFyZ2MpIHsKKwkJaWYgKHBhcnNlb3B0X3N0YXRlICE9IFBBUlNFX09QVF9ET05FKQorCQkJcGFyc2VvcHRfc3RhdGUgPSBwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywKKwkJCQkJCQkgICAgdXBkYXRlX2luZGV4X3VzYWdlKTsKKwkJaWYgKCFjdHguYXJnYykKKwkJCWJyZWFrOworCQlzd2l0Y2ggKHBhcnNlb3B0X3N0YXRlKSB7CisJCWNhc2UgUEFSU0VfT1BUX0hFTFA6CisJCWNhc2UgUEFSU0VfT1BUX0VSUk9SOgorCQkJZXhpdCgxMjkpOworCQljYXNlIFBBUlNFX09QVF9DT01QTEVURToKKwkJCWV4aXQoMCk7CisJCWNhc2UgUEFSU0VfT1BUX05PTl9PUFRJT046CisJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCXsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBjdHguYXJndlswXTsKKwkJCWNoYXIgKnA7CisKKwkJCXNldHVwX3dvcmtfdHJlZSgpOworCQkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgcGF0aCk7CisJCQl1cGRhdGVfb25lKHApOworCQkJaWYgKHNldF9leGVjdXRhYmxlX2JpdCkKKwkJCQljaG1vZF9wYXRoKHNldF9leGVjdXRhYmxlX2JpdCwgcCk7CisJCQlmcmVlKHApOworCQkJY3R4LmFyZ2MtLTsKKwkJCWN0eC5hcmd2Kys7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFBBUlNFX09QVF9VTktOT1dOOgorCQkJaWYgKGN0eC5hcmd2WzBdWzFdID09ICctJykKKwkJCQllcnJvcigidW5rbm93biBvcHRpb24gJyVzJyIsIGN0eC5hcmd2WzBdICsgMik7CisJCQllbHNlCisJCQkJZXJyb3IoInVua25vd24gc3dpdGNoICclYyciLCAqY3R4Lm9wdCk7CisJCQl1c2FnZV93aXRoX29wdGlvbnModXBkYXRlX2luZGV4X3VzYWdlLCBvcHRpb25zKTsKKwkJfQorCX0KKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19lbmQoJmN0eCk7CisKKwlnZXRsaW5lX2ZuID0gbnVsX3Rlcm1fbGluZSA/IHN0cmJ1Zl9nZXRsaW5lX251bCA6IHN0cmJ1Zl9nZXRsaW5lX2xmOworCWlmIChwcmVmZXJyZWRfaW5kZXhfZm9ybWF0KSB7CisJCWlmIChwcmVmZXJyZWRfaW5kZXhfZm9ybWF0IDwgSU5ERVhfRk9STUFUX0xCIHx8CisJCSAgICBJTkRFWF9GT1JNQVRfVUIgPCBwcmVmZXJyZWRfaW5kZXhfZm9ybWF0KQorCQkJZGllKCJpbmRleC12ZXJzaW9uICVkIG5vdCBpbiByYW5nZTogJWQuLiVkIiwKKwkJCSAgICBwcmVmZXJyZWRfaW5kZXhfZm9ybWF0LAorCQkJICAgIElOREVYX0ZPUk1BVF9MQiwgSU5ERVhfRk9STUFUX1VCKTsKKworCQlpZiAodGhlX2luZGV4LnZlcnNpb24gIT0gcHJlZmVycmVkX2luZGV4X2Zvcm1hdCkKKwkJCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkIHw9IFNPTUVUSElOR19DSEFOR0VEOworCQl0aGVfaW5kZXgudmVyc2lvbiA9IHByZWZlcnJlZF9pbmRleF9mb3JtYXQ7CisJfQorCisJaWYgKHJlYWRfZnJvbV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisKKwkJc2V0dXBfd29ya190cmVlKCk7CisJCXdoaWxlIChnZXRsaW5lX2ZuKCZidWYsIHN0ZGluKSAhPSBFT0YpIHsKKwkJCWNoYXIgKnA7CisJCQlpZiAoIW51bF90ZXJtX2xpbmUgJiYgYnVmLmJ1ZlswXSA9PSAnIicpIHsKKwkJCQlzdHJidWZfcmVzZXQoJnVucXVvdGVkKTsKKwkJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1bnF1b3RlZCwgYnVmLmJ1ZiwgTlVMTCkpCisJCQkJCWRpZSgibGluZSBpcyBiYWRseSBxdW90ZWQiKTsKKwkJCQlzdHJidWZfc3dhcCgmYnVmLCAmdW5xdW90ZWQpOworCQkJfQorCQkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYnVmLmJ1Zik7CisJCQl1cGRhdGVfb25lKHApOworCQkJaWYgKHNldF9leGVjdXRhYmxlX2JpdCkKKwkJCQljaG1vZF9wYXRoKHNldF9leGVjdXRhYmxlX2JpdCwgcCk7CisJCQlmcmVlKHApOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZ1bnF1b3RlZCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKworCWlmIChzcGxpdF9pbmRleCA+IDApIHsKKwkJaWYgKGdpdF9jb25maWdfZ2V0X3NwbGl0X2luZGV4KCkgPT0gMCkKKwkJCXdhcm5pbmcoXygiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgIgorCQkJCSAgInJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisJCQkJICAiZW5hYmxlIHNwbGl0IGluZGV4IikpOworCQlpZiAodGhlX2luZGV4LnNwbGl0X2luZGV4KQorCQkJdGhlX2luZGV4LmNhY2hlX2NoYW5nZWQgfD0gU1BMSVRfSU5ERVhfT1JERVJFRDsKKwkJZWxzZQorCQkJYWRkX3NwbGl0X2luZGV4KCZ0aGVfaW5kZXgpOworCX0gZWxzZSBpZiAoIXNwbGl0X2luZGV4KSB7CisJCWlmIChnaXRfY29uZmlnX2dldF9zcGxpdF9pbmRleCgpID09IDEpCisJCQl3YXJuaW5nKF8oImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgIgorCQkJCSAgInJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisJCQkJICAiZGlzYWJsZSBzcGxpdCBpbmRleCIpKTsKKwkJcmVtb3ZlX3NwbGl0X2luZGV4KCZ0aGVfaW5kZXgpOworCX0KKworCXByZXBhcmVfcmVwb19zZXR0aW5ncyhyKTsKKwlzd2l0Y2ggKHVudHJhY2tlZF9jYWNoZSkgeworCWNhc2UgVUNfVU5TUEVDSUZJRUQ6CisJCWJyZWFrOworCWNhc2UgVUNfRElTQUJMRToKKwkJaWYgKHItPnNldHRpbmdzLmNvcmVfdW50cmFja2VkX2NhY2hlID09IFVOVFJBQ0tFRF9DQUNIRV9XUklURSkKKwkJCXdhcm5pbmcoXygiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgIgorCQkJCSAgInJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisJCQkJICAiZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIikpOworCQlyZW1vdmVfdW50cmFja2VkX2NhY2hlKCZ0aGVfaW5kZXgpOworCQlyZXBvcnQoXygiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIikpOworCQlicmVhazsKKwljYXNlIFVDX1RFU1Q6CisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlyZXR1cm4gIXRlc3RfaWZfdW50cmFja2VkX2NhY2hlX2lzX3N1cHBvcnRlZCgpOworCWNhc2UgVUNfRU5BQkxFOgorCWNhc2UgVUNfRk9SQ0U6CisJCWlmIChyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSA9PSBVTlRSQUNLRURfQ0FDSEVfUkVNT1ZFKQorCQkJd2FybmluZyhfKCJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgIgorCQkJCSAgInJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisJCQkJICAiZW5hYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiKSk7CisJCWFkZF91bnRyYWNrZWRfY2FjaGUoJnRoZV9pbmRleCk7CisJCXJlcG9ydChfKCJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIpLCBnZXRfZ2l0X3dvcmtfdHJlZSgpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCJiYWQgdW50cmFja2VkX2NhY2hlIHZhbHVlOiAlZCIsIHVudHJhY2tlZF9jYWNoZSk7CisJfQorCisJaWYgKGZzbW9uaXRvciA+IDApIHsKKwkJaWYgKGdpdF9jb25maWdfZ2V0X2ZzbW9uaXRvcigpID09IDApCisJCQl3YXJuaW5nKF8oImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyAiCisJCQkJInNldCBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorCQkJCSJlbmFibGUgZnNtb25pdG9yIikpOworCQlhZGRfZnNtb25pdG9yKCZ0aGVfaW5kZXgpOworCQlyZXBvcnQoXygiZnNtb25pdG9yIGVuYWJsZWQiKSk7CisJfSBlbHNlIGlmICghZnNtb25pdG9yKSB7CisJCWlmIChnaXRfY29uZmlnX2dldF9mc21vbml0b3IoKSA9PSAxKQorCQkJd2FybmluZyhfKCJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7ICIKKwkJCQkicmVtb3ZlIGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisJCQkJImRpc2FibGUgZnNtb25pdG9yIikpOworCQlyZW1vdmVfZnNtb25pdG9yKCZ0aGVfaW5kZXgpOworCQlyZXBvcnQoXygiZnNtb25pdG9yIGRpc2FibGVkIikpOworCX0KKworCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCB8fCBmb3JjZV93cml0ZSkgeworCQlpZiAobmV3ZmQgPCAwKSB7CisJCQlpZiAocmVmcmVzaF9hcmdzLmZsYWdzICYgUkVGUkVTSF9RVUlFVCkKKwkJCQlleGl0KDEyOCk7CisJCQl1bmFibGVfdG9fbG9ja19kaWUoZ2V0X2luZGV4X2ZpbGUoKSwgbG9ja19lcnJvcik7CisJCX0KKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOworCX0KKworCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKworCXJldHVybiBoYXNfZXJyb3JzID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1yZWYuYyBiL2J1aWx0aW4vdXBkYXRlLXJlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOGY3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3VwZGF0ZS1yZWYuYwpAQCAtMCwwICsxLDQ0NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3VwZGF0ZV9yZWZfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIiksCisJTl8oImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iKSwKKwlOXygiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIiksCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CitzdGF0aWMgdW5zaWduZWQgaW50IHVwZGF0ZV9mbGFnczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9mbGFnczsKK3N0YXRpYyB1bnNpZ25lZCBjcmVhdGVfcmVmbG9nX2ZsYWc7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnOworCisvKgorICogUGFyc2Ugb25lIHdoaXRlc3BhY2UtIG9yIE5VTC10ZXJtaW5hdGVkLCBwb3NzaWJseSBDLXF1b3RlZCBhcmd1bWVudAorICogYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIGFyZy4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRlcm1pbmF0b3IuCisgKiBEaWUgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaG93IHRoZSBhcmd1bWVudCBpcyBDLXF1b3RlZC4gIFRoaXMKKyAqIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBpZiBub3QgLXouCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9hcmcoY29uc3QgY2hhciAqbmV4dCwgc3RydWN0IHN0cmJ1ZiAqYXJnKQoreworCWlmICgqbmV4dCA9PSAnIicpIHsKKwkJY29uc3QgY2hhciAqb3JpZyA9IG5leHQ7CisKKwkJaWYgKHVucXVvdGVfY19zdHlsZShhcmcsIG5leHQsICZuZXh0KSkKKwkJCWRpZSgiYmFkbHkgcXVvdGVkIGFyZ3VtZW50OiAlcyIsIG9yaWcpOworCQlpZiAoKm5leHQgJiYgIWlzc3BhY2UoKm5leHQpKQorCQkJZGllKCJ1bmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciBxdW90ZWQgYXJndW1lbnQ6ICVzIiwgb3JpZyk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKCpuZXh0ICYmICFpc3NwYWNlKCpuZXh0KSkKKwkJCXN0cmJ1Zl9hZGRjaChhcmcsICpuZXh0KyspOworCX0KKworCXJldHVybiBuZXh0OworfQorCisvKgorICogUGFyc2UgdGhlIHJlZmVyZW5jZSBuYW1lIGltbWVkaWF0ZWx5IGFmdGVyICJjb21tYW5kIFNQIi4gIElmIG5vdAorICogLXosIHRoZW4gaGFuZGxlIEMtcXVvdGluZy4gIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQKKyAqIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSByZWZlcmVuY2UsIG9yIE5VTEwgaWYgdGhlcmUgd2FzCisgKiBhbiBlcnJvci4gIFVwZGF0ZSAqbmV4dCB0byBwb2ludCBhdCB0aGUgY2hhcmFjdGVyIHRoYXQgdGVybWluYXRlcworICogdGhlIGFyZ3VtZW50LiAgRGllIGlmIEMtcXVvdGluZyBpcyBtYWxmb3JtZWQgb3IgdGhlIHJlZmVyZW5jZSBuYW1lCisgKiBpcyBpbnZhbGlkLgorICovCitzdGF0aWMgY2hhciAqcGFyc2VfcmVmbmFtZShzdHJ1Y3Qgc3RyYnVmICppbnB1dCwgY29uc3QgY2hhciAqKm5leHQpCit7CisJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChsaW5lX3Rlcm1pbmF0aW9uKSB7CisJCS8qIFdpdGhvdXQgLXosIHVzZSB0aGUgbmV4dCBhcmd1bWVudCAqLworCQkqbmV4dCA9IHBhcnNlX2FyZygqbmV4dCwgJnJlZik7CisJfSBlbHNlIHsKKwkJLyogV2l0aCAteiwgdXNlIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIG5leHQgTlVMICovCisJCXN0cmJ1Zl9hZGRzdHIoJnJlZiwgKm5leHQpOworCQkqbmV4dCArPSByZWYubGVuOworCX0KKworCWlmICghcmVmLmxlbikgeworCQlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZi5idWYsIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpKQorCQlkaWUoImludmFsaWQgcmVmIGZvcm1hdDogJXMiLCByZWYuYnVmKTsKKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZyZWYsIE5VTEwpOworfQorCisvKgorICogVGhlIHZhbHVlIGJlaW5nIHBhcnNlZCBpcyA8b2xkdmFsdWU+IChhcyBvcHBvc2VkIHRvIDxuZXd2YWx1ZT47IHRoZQorICogZGlmZmVyZW5jZSBhZmZlY3RzIHdoaWNoIGVycm9yIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQpOgorICovCisjZGVmaW5lIFBBUlNFX1NIQTFfT0xEIDB4MDEKKworLyoKKyAqIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYWNjZXB0IGFuIGVtcHR5IHN0cmluZyBmb3IgdXBkYXRlJ3MKKyAqIDxuZXd2YWx1ZT4gaW4gYmluYXJ5IG1vZGUgdG8gYmUgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHplcm9zLgorICovCisjZGVmaW5lIFBBUlNFX1NIQTFfQUxMT1dfRU1QVFkgMHgwMgorCisvKgorICogUGFyc2UgYW4gYXJndW1lbnQgc2VwYXJhdG9yIGZvbGxvd2VkIGJ5IHRoZSBuZXh0IGFyZ3VtZW50LCBpZiBhbnkuCisgKiBJZiB0aGVyZSBpcyBhbiBhcmd1bWVudCwgY29udmVydCBpdCB0byBhIFNIQS0xLCB3cml0ZSBpdCB0byBzaGExLAorICogc2V0ICpuZXh0IHRvIHBvaW50IGF0IHRoZSBjaGFyYWN0ZXIgdGVybWluYXRpbmcgdGhlIGFyZ3VtZW50LCBhbmQKKyAqIHJldHVybiAwLiAgSWYgdGhlcmUgaXMgbm8gYXJndW1lbnQgYXQgYWxsIChub3QgZXZlbiB0aGUgZW1wdHkKKyAqIHN0cmluZyksIHJldHVybiAxIGFuZCBsZWF2ZSAqbmV4dCB1bmNoYW5nZWQuICBJZiB0aGUgdmFsdWUgaXMKKyAqIHByb3ZpZGVkIGJ1dCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgU0hBLTEsIGRpZS4gIGZsYWdzIGNhbgorICogaW5jbHVkZSBQQVJTRV9TSEExX09MRCBhbmQvb3IgUEFSU0VfU0hBMV9BTExPV19FTVBUWS4KKyAqLworc3RhdGljIGludCBwYXJzZV9uZXh0X29pZChzdHJ1Y3Qgc3RyYnVmICppbnB1dCwgY29uc3QgY2hhciAqKm5leHQsCisJCQkgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgY29uc3QgY2hhciAqY29tbWFuZCwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgYXJnID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoKm5leHQgPT0gaW5wdXQtPmJ1ZiArIGlucHV0LT5sZW4pCisJCWdvdG8gZW9mOworCisJaWYgKGxpbmVfdGVybWluYXRpb24pIHsKKwkJLyogV2l0aG91dCAteiwgY29uc3VtZSBTUCBhbmQgdXNlIG5leHQgYXJndW1lbnQgKi8KKwkJaWYgKCEqKm5leHQgfHwgKipuZXh0ID09IGxpbmVfdGVybWluYXRpb24pCisJCQlyZXR1cm4gMTsKKwkJaWYgKCoqbmV4dCAhPSAnICcpCisJCQlkaWUoIiVzICVzOiBleHBlY3RlZCBTUCBidXQgZ290OiAlcyIsCisJCQkgICAgY29tbWFuZCwgcmVmbmFtZSwgKm5leHQpOworCQkoKm5leHQpKys7CisJCSpuZXh0ID0gcGFyc2VfYXJnKCpuZXh0LCAmYXJnKTsKKwkJaWYgKGFyZy5sZW4pIHsKKwkJCWlmIChnZXRfb2lkKGFyZy5idWYsIG9pZCkpCisJCQkJZ290byBpbnZhbGlkOworCQl9IGVsc2UgeworCQkJLyogV2l0aG91dCAteiwgYW4gZW1wdHkgdmFsdWUgbWVhbnMgYWxsIHplcm9zOiAqLworCQkJb2lkY2xyKG9pZCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBXaXRoIC16LCByZWFkIHRoZSBuZXh0IE5VTC10ZXJtaW5hdGVkIGxpbmUgKi8KKwkJaWYgKCoqbmV4dCkKKwkJCWRpZSgiJXMgJXM6IGV4cGVjdGVkIE5VTCBidXQgZ290OiAlcyIsCisJCQkgICAgY29tbWFuZCwgcmVmbmFtZSwgKm5leHQpOworCQkoKm5leHQpKys7CisJCWlmICgqbmV4dCA9PSBpbnB1dC0+YnVmICsgaW5wdXQtPmxlbikKKwkJCWdvdG8gZW9mOworCQlzdHJidWZfYWRkc3RyKCZhcmcsICpuZXh0KTsKKwkJKm5leHQgKz0gYXJnLmxlbjsKKworCQlpZiAoYXJnLmxlbikgeworCQkJaWYgKGdldF9vaWQoYXJnLmJ1Ziwgb2lkKSkKKwkJCQlnb3RvIGludmFsaWQ7CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBQQVJTRV9TSEExX0FMTE9XX0VNUFRZKSB7CisJCQkvKiBXaXRoIC16LCB0cmVhdCBhbiBlbXB0eSB2YWx1ZSBhcyBhbGwgemVyb3M6ICovCisJCQl3YXJuaW5nKCIlcyAlczogbWlzc2luZyA8bmV3dmFsdWU+LCB0cmVhdGluZyBhcyB6ZXJvIiwKKwkJCQljb21tYW5kLCByZWZuYW1lKTsKKwkJCW9pZGNscihvaWQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFdpdGggLXosIGFuIGVtcHR5IG5vbi1yZXF1aXJlZCB2YWx1ZSBtZWFucworCQkJICogdW5zcGVjaWZpZWQ6CisJCQkgKi8KKwkJCXJldCA9IDE7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYXJnKTsKKworCXJldHVybiByZXQ7CisKKyBpbnZhbGlkOgorCWRpZShmbGFncyAmIFBBUlNFX1NIQTFfT0xEID8KKwkgICAgIiVzICVzOiBpbnZhbGlkIDxvbGR2YWx1ZT46ICVzIiA6CisJICAgICIlcyAlczogaW52YWxpZCA8bmV3dmFsdWU+OiAlcyIsCisJICAgIGNvbW1hbmQsIHJlZm5hbWUsIGFyZy5idWYpOworCisgZW9mOgorCWRpZShmbGFncyAmIFBBUlNFX1NIQTFfT0xEID8KKwkgICAgIiVzICVzOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgOgorCSAgICAiJXMgJXM6IHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IHdoZW4gcmVhZGluZyA8bmV3dmFsdWU+IiwKKwkgICAgY29tbWFuZCwgcmVmbmFtZSk7Cit9CisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZml2ZSBwYXJzZV9jbWRfKigpIGZ1bmN0aW9ucyBwYXJzZSB0aGUgY29ycmVzcG9uZGluZworICogY29tbWFuZC4gIEluIGVhY2ggY2FzZSwgbmV4dCBwb2ludHMgYXQgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlCisgKiBjb21tYW5kIG5hbWUgYW5kIHRoZSBmb2xsb3dpbmcgc3BhY2UuICBUaGV5IGVhY2ggcmV0dXJuIGEgcG9pbnRlcgorICogdG8gdGhlIGNoYXJhY3RlciB0ZXJtaW5hdGluZyB0aGUgY29tbWFuZCwgYW5kIGRpZSB3aXRoIGFuCisgKiBleHBsYW5hdG9yeSBtZXNzYWdlIGlmIHRoZXJlIGFyZSBhbnkgcGFyc2luZyBwcm9ibGVtcy4gIEFsbCBvZgorICogdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBlaXRoZXIgdGV4dCBvciBiaW5hcnkgZm9ybWF0IGlucHV0LAorICogZGVwZW5kaW5nIG9uIGhvdyBsaW5lX3Rlcm1pbmF0aW9uIGlzIHNldC4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfY21kX3VwZGF0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqaW5wdXQsIGNvbnN0IGNoYXIgKm5leHQpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpyZWZuYW1lOworCXN0cnVjdCBvYmplY3RfaWQgbmV3X29pZCwgb2xkX29pZDsKKwlpbnQgaGF2ZV9vbGQ7CisKKwlyZWZuYW1lID0gcGFyc2VfcmVmbmFtZShpbnB1dCwgJm5leHQpOworCWlmICghcmVmbmFtZSkKKwkJZGllKCJ1cGRhdGU6IG1pc3NpbmcgPHJlZj4iKTsKKworCWlmIChwYXJzZV9uZXh0X29pZChpbnB1dCwgJm5leHQsICZuZXdfb2lkLCAidXBkYXRlIiwgcmVmbmFtZSwKKwkJCSAgIFBBUlNFX1NIQTFfQUxMT1dfRU1QVFkpKQorCQlkaWUoInVwZGF0ZSAlczogbWlzc2luZyA8bmV3dmFsdWU+IiwgcmVmbmFtZSk7CisKKwloYXZlX29sZCA9ICFwYXJzZV9uZXh0X29pZChpbnB1dCwgJm5leHQsICZvbGRfb2lkLCAidXBkYXRlIiwgcmVmbmFtZSwKKwkJCQkgICBQQVJTRV9TSEExX09MRCk7CisKKwlpZiAoKm5leHQgIT0gbGluZV90ZXJtaW5hdGlvbikKKwkJZGllKCJ1cGRhdGUgJXM6IGV4dHJhIGlucHV0OiAlcyIsIHJlZm5hbWUsIG5leHQpOworCisJaWYgKHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZm5hbWUsCisJCQkJICAgJm5ld19vaWQsIGhhdmVfb2xkID8gJm9sZF9vaWQgOiBOVUxMLAorCQkJCSAgIHVwZGF0ZV9mbGFncyB8IGNyZWF0ZV9yZWZsb2dfZmxhZywKKwkJCQkgICBtc2csICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwl1cGRhdGVfZmxhZ3MgPSBkZWZhdWx0X2ZsYWdzOworCWZyZWUocmVmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisKKwlyZXR1cm4gbmV4dDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2NtZF9jcmVhdGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmlucHV0LCBjb25zdCBjaGFyICpuZXh0KQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmVmbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5ld19vaWQ7CisKKwlyZWZuYW1lID0gcGFyc2VfcmVmbmFtZShpbnB1dCwgJm5leHQpOworCWlmICghcmVmbmFtZSkKKwkJZGllKCJjcmVhdGU6IG1pc3NpbmcgPHJlZj4iKTsKKworCWlmIChwYXJzZV9uZXh0X29pZChpbnB1dCwgJm5leHQsICZuZXdfb2lkLCAiY3JlYXRlIiwgcmVmbmFtZSwgMCkpCisJCWRpZSgiY3JlYXRlICVzOiBtaXNzaW5nIDxuZXd2YWx1ZT4iLCByZWZuYW1lKTsKKworCWlmIChpc19udWxsX29pZCgmbmV3X29pZCkpCisJCWRpZSgiY3JlYXRlICVzOiB6ZXJvIDxuZXd2YWx1ZT4iLCByZWZuYW1lKTsKKworCWlmICgqbmV4dCAhPSBsaW5lX3Rlcm1pbmF0aW9uKQorCQlkaWUoImNyZWF0ZSAlczogZXh0cmEgaW5wdXQ6ICVzIiwgcmVmbmFtZSwgbmV4dCk7CisKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NyZWF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwgJm5ld19vaWQsCisJCQkJICAgdXBkYXRlX2ZsYWdzIHwgY3JlYXRlX3JlZmxvZ19mbGFnLAorCQkJCSAgIG1zZywgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXVwZGF0ZV9mbGFncyA9IGRlZmF1bHRfZmxhZ3M7CisJZnJlZShyZWZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKworCXJldHVybiBuZXh0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfY21kX2RlbGV0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqaW5wdXQsIGNvbnN0IGNoYXIgKm5leHQpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpyZWZuYW1lOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKwlpbnQgaGF2ZV9vbGQ7CisKKwlyZWZuYW1lID0gcGFyc2VfcmVmbmFtZShpbnB1dCwgJm5leHQpOworCWlmICghcmVmbmFtZSkKKwkJZGllKCJkZWxldGU6IG1pc3NpbmcgPHJlZj4iKTsKKworCWlmIChwYXJzZV9uZXh0X29pZChpbnB1dCwgJm5leHQsICZvbGRfb2lkLCAiZGVsZXRlIiwgcmVmbmFtZSwKKwkJCSAgIFBBUlNFX1NIQTFfT0xEKSkgeworCQloYXZlX29sZCA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKGlzX251bGxfb2lkKCZvbGRfb2lkKSkKKwkJCWRpZSgiZGVsZXRlICVzOiB6ZXJvIDxvbGR2YWx1ZT4iLCByZWZuYW1lKTsKKwkJaGF2ZV9vbGQgPSAxOworCX0KKworCWlmICgqbmV4dCAhPSBsaW5lX3Rlcm1pbmF0aW9uKQorCQlkaWUoImRlbGV0ZSAlczogZXh0cmEgaW5wdXQ6ICVzIiwgcmVmbmFtZSwgbmV4dCk7CisKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2RlbGV0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwKKwkJCQkgICBoYXZlX29sZCA/ICZvbGRfb2lkIDogTlVMTCwKKwkJCQkgICB1cGRhdGVfZmxhZ3MsIG1zZywgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXVwZGF0ZV9mbGFncyA9IGRlZmF1bHRfZmxhZ3M7CisJZnJlZShyZWZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKworCXJldHVybiBuZXh0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfY21kX3ZlcmlmeShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqaW5wdXQsIGNvbnN0IGNoYXIgKm5leHQpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpyZWZuYW1lOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKworCXJlZm5hbWUgPSBwYXJzZV9yZWZuYW1lKGlucHV0LCAmbmV4dCk7CisJaWYgKCFyZWZuYW1lKQorCQlkaWUoInZlcmlmeTogbWlzc2luZyA8cmVmPiIpOworCisJaWYgKHBhcnNlX25leHRfb2lkKGlucHV0LCAmbmV4dCwgJm9sZF9vaWQsICJ2ZXJpZnkiLCByZWZuYW1lLAorCQkJICAgUEFSU0VfU0hBMV9PTEQpKQorCQlvaWRjbHIoJm9sZF9vaWQpOworCisJaWYgKCpuZXh0ICE9IGxpbmVfdGVybWluYXRpb24pCisJCWRpZSgidmVyaWZ5ICVzOiBleHRyYSBpbnB1dDogJXMiLCByZWZuYW1lLCBuZXh0KTsKKworCWlmIChyZWZfdHJhbnNhY3Rpb25fdmVyaWZ5KHRyYW5zYWN0aW9uLCByZWZuYW1lLCAmb2xkX29pZCwKKwkJCQkgICB1cGRhdGVfZmxhZ3MsICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwl1cGRhdGVfZmxhZ3MgPSBkZWZhdWx0X2ZsYWdzOworCWZyZWUocmVmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisKKwlyZXR1cm4gbmV4dDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2NtZF9vcHRpb24oc3RydWN0IHN0cmJ1ZiAqaW5wdXQsIGNvbnN0IGNoYXIgKm5leHQpCit7CisJY29uc3QgY2hhciAqcmVzdDsKKwlpZiAoc2tpcF9wcmVmaXgobmV4dCwgIm5vLWRlcmVmIiwgJnJlc3QpICYmICpyZXN0ID09IGxpbmVfdGVybWluYXRpb24pCisJCXVwZGF0ZV9mbGFncyB8PSBSRUZfTk9fREVSRUY7CisJZWxzZQorCQlkaWUoIm9wdGlvbiB1bmtub3duOiAlcyIsIG5leHQpOworCXJldHVybiByZXN0OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmVmc19zdGRpbihzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGlucHV0ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqbmV4dDsKKworCWlmIChzdHJidWZfcmVhZCgmaW5wdXQsIDAsIDEwMDApIDwgMCkKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIik7CisJbmV4dCA9IGlucHV0LmJ1ZjsKKwkvKiBSZWFkIGVhY2ggbGluZSBkaXNwYXRjaCBpdHMgY29tbWFuZCAqLworCXdoaWxlIChuZXh0IDwgaW5wdXQuYnVmICsgaW5wdXQubGVuKSB7CisJCWlmICgqbmV4dCA9PSBsaW5lX3Rlcm1pbmF0aW9uKQorCQkJZGllKCJlbXB0eSBjb21tYW5kIGluIGlucHV0Iik7CisJCWVsc2UgaWYgKGlzc3BhY2UoKm5leHQpKQorCQkJZGllKCJ3aGl0ZXNwYWNlIGJlZm9yZSBjb21tYW5kOiAlcyIsIG5leHQpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChuZXh0LCAidXBkYXRlICIsICZuZXh0KSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfdXBkYXRlKHRyYW5zYWN0aW9uLCAmaW5wdXQsIG5leHQpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChuZXh0LCAiY3JlYXRlICIsICZuZXh0KSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfY3JlYXRlKHRyYW5zYWN0aW9uLCAmaW5wdXQsIG5leHQpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChuZXh0LCAiZGVsZXRlICIsICZuZXh0KSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfZGVsZXRlKHRyYW5zYWN0aW9uLCAmaW5wdXQsIG5leHQpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChuZXh0LCAidmVyaWZ5ICIsICZuZXh0KSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfdmVyaWZ5KHRyYW5zYWN0aW9uLCAmaW5wdXQsIG5leHQpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChuZXh0LCAib3B0aW9uICIsICZuZXh0KSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfb3B0aW9uKCZpbnB1dCwgbmV4dCk7CisJCWVsc2UKKwkJCWRpZSgidW5rbm93biBjb21tYW5kOiAlcyIsIG5leHQpOworCisJCW5leHQrKzsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmaW5wdXQpOworfQorCitpbnQgY21kX3VwZGF0ZV9yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSwgKm9sZHZhbDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZCwgb2xkb2lkOworCWludCBkZWxldGUgPSAwLCBub19kZXJlZiA9IDAsIHJlYWRfc3RkaW4gPSAwLCBlbmRfbnVsbCA9IDA7CisJaW50IGNyZWF0ZV9yZWZsb2cgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKCAnbScsIE5VTEwsICZtc2csIE5fKCJyZWFzb24iKSwgTl8oInJlYXNvbiBvZiB0aGUgdXBkYXRlIikpLAorCQlPUFRfQk9PTCgnZCcsIE5VTEwsICZkZWxldGUsIE5fKCJkZWxldGUgdGhlIHJlZmVyZW5jZSIpKSwKKwkJT1BUX0JPT0woIDAgLCAibm8tZGVyZWYiLCAmbm9fZGVyZWYsCisJCQkJCU5fKCJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIpKSwKKwkJT1BUX0JPT0woJ3onLCBOVUxMLCAmZW5kX251bGwsIE5fKCJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIikpLAorCQlPUFRfQk9PTCggMCAsICJzdGRpbiIsICZyZWFkX3N0ZGluLCBOXygicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iKSksCisJCU9QVF9CT09MKCAwICwgImNyZWF0ZS1yZWZsb2ciLCAmY3JlYXRlX3JlZmxvZywgTl8oImNyZWF0ZSBhIHJlZmxvZyIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfdXBkYXRlX3JlZl91c2FnZSwKKwkJCSAgICAgMCk7CisJaWYgKG1zZyAmJiAhKm1zZykKKwkJZGllKCJSZWZ1c2luZyB0byBwZXJmb3JtIHVwZGF0ZSB3aXRoIGVtcHR5IG1lc3NhZ2UuIik7CisKKwljcmVhdGVfcmVmbG9nX2ZsYWcgPSBjcmVhdGVfcmVmbG9nID8gUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0cgOiAwOworCisJaWYgKG5vX2RlcmVmKSB7CisJCWRlZmF1bHRfZmxhZ3MgPSBSRUZfTk9fREVSRUY7CisJCXVwZGF0ZV9mbGFncyA9IGRlZmF1bHRfZmxhZ3M7CisJfQorCisJaWYgKHJlYWRfc3RkaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisKKwkJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJCWlmICghdHJhbnNhY3Rpb24pCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJCWlmIChkZWxldGUgfHwgYXJnYyA+IDApCisJCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X3VwZGF0ZV9yZWZfdXNhZ2UsIG9wdGlvbnMpOworCQlpZiAoZW5kX251bGwpCisJCQlsaW5lX3Rlcm1pbmF0aW9uID0gJ1wwJzsKKwkJdXBkYXRlX3JlZnNfc3RkaW4odHJhbnNhY3Rpb24pOworCQlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCXJldHVybiAwOworCX0KKworCWlmIChlbmRfbnVsbCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF91cGRhdGVfcmVmX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChkZWxldGUpIHsKKwkJaWYgKGFyZ2MgPCAxIHx8IGFyZ2MgPiAyKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF91cGRhdGVfcmVmX3VzYWdlLCBvcHRpb25zKTsKKwkJcmVmbmFtZSA9IGFyZ3ZbMF07CisJCW9sZHZhbCA9IGFyZ3ZbMV07CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisJCWlmIChhcmdjIDwgMiB8fCBhcmdjID4gMykKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdXBkYXRlX3JlZl91c2FnZSwgb3B0aW9ucyk7CisJCXJlZm5hbWUgPSBhcmd2WzBdOworCQl2YWx1ZSA9IGFyZ3ZbMV07CisJCW9sZHZhbCA9IGFyZ3ZbMl07CisJCWlmIChnZXRfb2lkKHZhbHVlLCAmb2lkKSkKKwkJCWRpZSgiJXM6IG5vdCBhIHZhbGlkIFNIQTEiLCB2YWx1ZSk7CisJfQorCisJaWYgKG9sZHZhbCkgeworCQlpZiAoISpvbGR2YWwpCisJCQkvKgorCQkJICogVGhlIGVtcHR5IHN0cmluZyBpbXBsaWVzIHRoYXQgdGhlIHJlZmVyZW5jZQorCQkJICogbXVzdCBub3QgYWxyZWFkeSBleGlzdDoKKwkJCSAqLworCQkJb2lkY2xyKCZvbGRvaWQpOworCQllbHNlIGlmIChnZXRfb2lkKG9sZHZhbCwgJm9sZG9pZCkpCisJCQlkaWUoIiVzOiBub3QgYSB2YWxpZCBvbGQgU0hBMSIsIG9sZHZhbCk7CisJfQorCisJaWYgKGRlbGV0ZSkKKwkJLyoKKwkJICogRm9yIHB1cnBvc2VzIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3ZSB0cmVhdAorCQkgKiBOVUxMX1NIQTEgYXMgImRvbid0IGNhcmUiIGhlcmU6CisJCSAqLworCQlyZXR1cm4gZGVsZXRlX3JlZihtc2csIHJlZm5hbWUsCisJCQkJICAob2xkdmFsICYmICFpc19udWxsX29pZCgmb2xkb2lkKSkgPyAmb2xkb2lkIDogTlVMTCwKKwkJCQkgIGRlZmF1bHRfZmxhZ3MpOworCWVsc2UKKwkJcmV0dXJuIHVwZGF0ZV9yZWYobXNnLCByZWZuYW1lLCAmb2lkLCBvbGR2YWwgPyAmb2xkb2lkIDogTlVMTCwKKwkJCQkgIGRlZmF1bHRfZmxhZ3MgfCBjcmVhdGVfcmVmbG9nX2ZsYWcsCisJCQkJICBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmMgYi9idWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjFhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jCkBAIC0wLDAgKzEsMjYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlW10gPSB7CisJTl8oImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIiksCisJTlVMTAorfTsKKworaW50IGNtZF91cGRhdGVfc2VydmVyX2luZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGZvcmNlID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIiksIDApLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgdXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA+IDApCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1cGRhdGVfc2VydmVyX2luZm9fdXNhZ2UsIG9wdGlvbnMpOworCisJcmV0dXJuICEhdXBkYXRlX3NlcnZlcl9pbmZvKGZvcmNlKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBsb2FkLWFyY2hpdmUuYyBiL2J1aWx0aW4vdXBsb2FkLWFyY2hpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTg4Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91cGxvYWQtYXJjaGl2ZS5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEZyYW5jayBCdWktSHV1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJhcmNoaXZlLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitzdGF0aWMgY29uc3QgY2hhciB1cGxvYWRfYXJjaGl2ZV91c2FnZVtdID0KKwkiZ2l0IHVwbG9hZC1hcmNoaXZlIDxyZXBvPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRlYWRjaGlsZFtdID0KKyJnaXQgdXBsb2FkLWFyY2hpdmU6IGFyY2hpdmVyIGRpZWQgd2l0aCBlcnJvciI7CisKKyNkZWZpbmUgTUFYX0FSR1MgKDY0KQorCitpbnQgY21kX3VwbG9hZF9hcmNoaXZlX3dyaXRlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBzZW50X2FyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJY29uc3QgY2hhciAqYXJnX2NtZCA9ICJhcmd1bWVudCAiOworCisJaWYgKGFyZ2MgIT0gMiB8fCAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZSh1cGxvYWRfYXJjaGl2ZV91c2FnZSk7CisKKwlpZiAoIWVudGVyX3JlcG8oYXJndlsxXSwgMCkpCisJCWRpZSgiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBnaXQgcmVwb3NpdG9yeSIsIGFyZ3ZbMV0pOworCisJaW5pdF9hcmNoaXZlcnMoKTsKKworCS8qIHB1dCByZWNlaXZlZCBvcHRpb25zIGluIHNlbnRfYXJndltdICovCisJYXJndl9hcnJheV9wdXNoKCZzZW50X2FyZ3YsICJnaXQtdXBsb2FkLWFyY2hpdmUiKTsKKwlmb3IgKDs7KSB7CisJCWNoYXIgKmJ1ZiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgTlVMTCk7CisJCWlmICghYnVmKQorCQkJYnJlYWs7CS8qIGdvdCBhIGZsdXNoICovCisJCWlmIChzZW50X2FyZ3YuYXJnYyA+IE1BWF9BUkdTKQorCQkJZGllKCJUb28gbWFueSBvcHRpb25zICg+JWQpIiwgTUFYX0FSR1MgLSAxKTsKKworCQlpZiAoIXN0YXJ0c193aXRoKGJ1ZiwgYXJnX2NtZCkpCisJCQlkaWUoIidhcmd1bWVudCcgdG9rZW4gb3IgZmx1c2ggZXhwZWN0ZWQiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZzZW50X2FyZ3YsIGJ1ZiArIHN0cmxlbihhcmdfY21kKSk7CisJfQorCisJLyogcGFyc2UgYWxsIG9wdGlvbnMgc2VudCBieSB0aGUgY2xpZW50ICovCisJcmV0dXJuIHdyaXRlX2FyY2hpdmUoc2VudF9hcmd2LmFyZ2MsIHNlbnRfYXJndi5hcmd2LCBwcmVmaXgsCisJCQkgICAgIHRoZV9yZXBvc2l0b3J5LCBOVUxMLCAxKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3N0YXRpYyB2b2lkIGVycm9yX2NsbnQoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IHBhcmFtczsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm10KTsKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCXNlbmRfc2lkZWJhbmQoMSwgMywgYnVmLmJ1ZiwgYnVmLmxlbiwgTEFSR0VfUEFDS0VUX01BWCk7CisJZGllKCJzZW50IGVycm9yIHRvIHRoZSBjbGllbnQ6ICVzIiwgYnVmLmJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHByb2Nlc3NfaW5wdXQoaW50IGNoaWxkX2ZkLCBpbnQgYmFuZCkKK3sKKwljaGFyIGJ1ZlsxNjM4NF07CisJc3NpemVfdCBzeiA9IHJlYWQoY2hpbGRfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChzeiA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFSU5UUikKKwkJCWVycm9yX2NsbnQoInJlYWQgZXJyb3I6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gc3o7CisJfQorCXNlbmRfc2lkZWJhbmQoMSwgYmFuZCwgYnVmLCBzeiwgTEFSR0VfUEFDS0VUX01BWCk7CisJcmV0dXJuIHN6OworfQorCitpbnQgY21kX3VwbG9hZF9hcmNoaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHdyaXRlciA9IHsgYXJndiB9OworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZSh1cGxvYWRfYXJjaGl2ZV91c2FnZSk7CisKKwkvKgorCSAqIFNldCB1cCBzaWRlYmFuZCBzdWJwcm9jZXNzLgorCSAqCisJICogV2UgKHBhcmVudCkgbW9uaXRvciBhbmQgcmVhZCBmcm9tIGNoaWxkLCBzZW5kaW5nIGl0cyBmZCMxIGFuZCBmZCMyCisJICogbXVsdGlwbGV4ZWQgb3V0IHRvIG91ciBmZCMxLiAgSWYgdGhlIGNoaWxkIGRpZXMsIHdlIHRlbGwgdGhlIG90aGVyCisJICogZW5kIG92ZXIgY2hhbm5lbCAjMy4KKwkgKi8KKwlhcmd2WzBdID0gInVwbG9hZC1hcmNoaXZlLS13cml0ZXIiOworCXdyaXRlci5vdXQgPSB3cml0ZXIuZXJyID0gLTE7CisJd3JpdGVyLmdpdF9jbWQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZ3cml0ZXIpKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiTkFDSyB1bmFibGUgdG8gc3Bhd24gc3VicHJvY2Vzc1xuIik7CisJCWRpZSgidXBsb2FkLWFyY2hpdmU6ICVzIiwgc3RyZXJyb3IoZXJyKSk7CisJfQorCisJcGFja2V0X3dyaXRlX2ZtdCgxLCAiQUNLXG4iKTsKKwlwYWNrZXRfZmx1c2goMSk7CisKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgcG9sbGZkIHBmZFsyXTsKKworCQlwZmRbMF0uZmQgPSB3cml0ZXIub3V0OworCQlwZmRbMF0uZXZlbnRzID0gUE9MTElOOworCQlwZmRbMV0uZmQgPSB3cml0ZXIuZXJyOworCQlwZmRbMV0uZXZlbnRzID0gUE9MTElOOworCQlpZiAocG9sbChwZmQsIDIsIC0xKSA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFSU5UUikgeworCQkJCWVycm9yX2Vycm5vKCJwb2xsIGZhaWxlZCByZXN1bWluZyIpOworCQkJCXNsZWVwKDEpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKHBmZFsxXS5yZXZlbnRzICYgUE9MTElOKQorCQkJLyogU3RhdHVzIHN0cmVhbSByZWFkeSAqLworCQkJaWYgKHByb2Nlc3NfaW5wdXQocGZkWzFdLmZkLCAyKSkKKwkJCQljb250aW51ZTsKKwkJaWYgKHBmZFswXS5yZXZlbnRzICYgUE9MTElOKQorCQkJLyogRGF0YSBzdHJlYW0gcmVhZHkgKi8KKwkJCWlmIChwcm9jZXNzX2lucHV0KHBmZFswXS5mZCwgMSkpCisJCQkJY29udGludWU7CisKKwkJaWYgKGZpbmlzaF9jb21tYW5kKCZ3cml0ZXIpKQorCQkJZXJyb3JfY2xudCgiJXMiLCBkZWFkY2hpbGQpOworCQlwYWNrZXRfZmx1c2goMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBsb2FkLXBhY2suYyBiL2J1aWx0aW4vdXBsb2FkLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGE4ZmEyCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91cGxvYWQtcGFjay5jCkBAIC0wLDAgKzEsNzQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAidXBsb2FkLXBhY2suaCIKKyNpbmNsdWRlICJzZXJ2ZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVwbG9hZF9wYWNrX3VzYWdlW10gPSB7CisJTl8oImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIpLAorCU5VTEwKK307CisKK2ludCBjbWRfdXBsb2FkX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqZGlyOworCWludCBzdHJpY3QgPSAwOworCXN0cnVjdCB1cGxvYWRfcGFja19vcHRpb25zIG9wdHMgPSB7IDAgfTsKKwlzdHJ1Y3Qgc2VydmVfb3B0aW9ucyBzZXJ2ZV9vcHRzID0gU0VSVkVfT1BUSU9OU19JTklUOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAic3RhdGVsZXNzLXJwYyIsICZvcHRzLnN0YXRlbGVzc19ycGMsCisJCQkgTl8oInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIpKSwKKwkJT1BUX0JPT0woMCwgImFkdmVydGlzZS1yZWZzIiwgJm9wdHMuYWR2ZXJ0aXNlX3JlZnMsCisJCQkgTl8oImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIpKSwKKwkJT1BUX0JPT0woMCwgInN0cmljdCIsICZzdHJpY3QsCisJCQkgTl8oImRvIG5vdCB0cnkgPGRpcmVjdG9yeT4vLmdpdC8gaWYgPGRpcmVjdG9yeT4gaXMgbm8gR2l0IGRpcmVjdG9yeSIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInRpbWVvdXQiLCAmb3B0cy50aW1lb3V0LAorCQkJICAgIE5fKCJpbnRlcnJ1cHQgdHJhbnNmZXIgYWZ0ZXIgPG4+IHNlY29uZHMgb2YgaW5hY3Rpdml0eSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXBhY2tldF90cmFjZV9pZGVudGl0eSgidXBsb2FkLXBhY2siKTsKKwlyZWFkX3JlcGxhY2VfcmVmcyA9IDA7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHVwbG9hZF9wYWNrX3VzYWdlLCAwKTsKKworCWlmIChhcmdjICE9IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1cGxvYWRfcGFja191c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAob3B0cy50aW1lb3V0KQorCQlvcHRzLmRhZW1vbl9tb2RlID0gMTsKKworCXNldHVwX3BhdGgoKTsKKworCWRpciA9IGFyZ3ZbMF07CisKKwlpZiAoIWVudGVyX3JlcG8oZGlyLCBzdHJpY3QpKQorCQlkaWUoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBkaXIpOworCisJc3dpdGNoIChkZXRlcm1pbmVfcHJvdG9jb2xfdmVyc2lvbl9zZXJ2ZXIoKSkgeworCWNhc2UgcHJvdG9jb2xfdjI6CisJCXNlcnZlX29wdHMuYWR2ZXJ0aXNlX2NhcGFiaWxpdGllcyA9IG9wdHMuYWR2ZXJ0aXNlX3JlZnM7CisJCXNlcnZlX29wdHMuc3RhdGVsZXNzX3JwYyA9IG9wdHMuc3RhdGVsZXNzX3JwYzsKKwkJc2VydmUoJnNlcnZlX29wdHMpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YxOgorCQkvKgorCQkgKiB2MSBpcyBqdXN0IHRoZSBvcmlnaW5hbCBwcm90b2NvbCB3aXRoIGEgdmVyc2lvbiBzdHJpbmcsCisJCSAqIHNvIGp1c3QgZmFsbCB0aHJvdWdoIGFmdGVyIHdyaXRpbmcgdGhlIHZlcnNpb24gc3RyaW5nLgorCQkgKi8KKwkJaWYgKG9wdHMuYWR2ZXJ0aXNlX3JlZnMgfHwgIW9wdHMuc3RhdGVsZXNzX3JwYykKKwkJCXBhY2tldF93cml0ZV9mbXQoMSwgInZlcnNpb24gMVxuIik7CisKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIHByb3RvY29sX3YwOgorCQl1cGxvYWRfcGFjaygmb3B0cyk7CisJCWJyZWFrOworCWNhc2UgcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uOgorCQlCVUcoInVua25vd24gcHJvdG9jb2wgdmVyc2lvbiIpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi92YXIuYyBiL2J1aWx0aW4vdmFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2ZjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdmFyLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgRXJpYyBCaWVkZXJtYW4sIDIwMDUKKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdmFyX3VzYWdlW10gPSAiZ2l0IHZhciAoLWwgfCA8dmFyaWFibGU+KSI7CisKK3N0YXRpYyBjb25zdCBjaGFyICplZGl0b3IoaW50IGZsYWcpCit7CisJY29uc3QgY2hhciAqcGdtID0gZ2l0X2VkaXRvcigpOworCisJaWYgKCFwZ20gJiYgZmxhZyAmIElERU5UX1NUUklDVCkKKwkJZGllKCJUZXJtaW5hbCBpcyBkdW1iLCBidXQgRURJVE9SIHVuc2V0Iik7CisKKwlyZXR1cm4gcGdtOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFnZXIoaW50IGZsYWcpCit7CisJY29uc3QgY2hhciAqcGdtID0gZ2l0X3BhZ2VyKDEpOworCisJaWYgKCFwZ20pCisJCXBnbSA9ICJjYXQiOworCXJldHVybiBwZ207Cit9CisKK3N0cnVjdCBnaXRfdmFyIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKigqcmVhZCkoaW50KTsKK307CitzdGF0aWMgc3RydWN0IGdpdF92YXIgZ2l0X3ZhcnNbXSA9IHsKKwl7ICJHSVRfQ09NTUlUVEVSX0lERU5UIiwgZ2l0X2NvbW1pdHRlcl9pbmZvIH0sCisJeyAiR0lUX0FVVEhPUl9JREVOVCIsICAgZ2l0X2F1dGhvcl9pbmZvIH0sCisJeyAiR0lUX0VESVRPUiIsIGVkaXRvciB9LAorCXsgIkdJVF9QQUdFUiIsIHBhZ2VyIH0sCisJeyAiIiwgTlVMTCB9LAorfTsKKworc3RhdGljIHZvaWQgbGlzdF92YXJzKHZvaWQpCit7CisJc3RydWN0IGdpdF92YXIgKnB0cjsKKwljb25zdCBjaGFyICp2YWw7CisKKwlmb3IgKHB0ciA9IGdpdF92YXJzOyBwdHItPnJlYWQ7IHB0cisrKQorCQlpZiAoKHZhbCA9IHB0ci0+cmVhZCgwKSkpCisJCQlwcmludGYoIiVzPSVzXG4iLCBwdHItPm5hbWUsIHZhbCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWFkX3Zhcihjb25zdCBjaGFyICp2YXIpCit7CisJc3RydWN0IGdpdF92YXIgKnB0cjsKKwljb25zdCBjaGFyICp2YWw7CisJdmFsID0gTlVMTDsKKwlmb3IgKHB0ciA9IGdpdF92YXJzOyBwdHItPnJlYWQ7IHB0cisrKSB7CisJCWlmIChzdHJjbXAodmFyLCBwdHItPm5hbWUpID09IDApIHsKKwkJCXZhbCA9IHB0ci0+cmVhZChJREVOVF9TVFJJQ1QpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBzaG93X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAodmFsdWUpCisJCXByaW50ZigiJXM9JXNcbiIsIHZhciwgdmFsdWUpOworCWVsc2UKKwkJcHJpbnRmKCIlc1xuIiwgdmFyKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF92YXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqdmFsID0gTlVMTDsKKwlpZiAoYXJnYyAhPSAyKQorCQl1c2FnZSh2YXJfdXNhZ2UpOworCisJaWYgKHN0cmNtcChhcmd2WzFdLCAiLWwiKSA9PSAwKSB7CisJCWdpdF9jb25maWcoc2hvd19jb25maWcsIE5VTEwpOworCQlsaXN0X3ZhcnMoKTsKKwkJcmV0dXJuIDA7CisJfQorCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwl2YWwgPSByZWFkX3Zhcihhcmd2WzFdKTsKKwlpZiAoIXZhbCkKKwkJdXNhZ2UodmFyX3VzYWdlKTsKKworCXByaW50ZigiJXNcbiIsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jIGIvYnVpbHRpbi92ZXJpZnktY29tbWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjNjlhMAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgY29tbWl0LWNvbW1pdCIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWljaGFlbCBKIEdydWJlciA8Z2l0QGRybWljaGEud2FycG1haWwubmV0PgorICoKKyAqIEJhc2VkIG9uIGdpdC12ZXJpZnktdGFnCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZlcmlmeV9jb21taXRfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iKSwKKwkJTlVMTAorfTsKKworc3RhdGljIGludCBydW5fZ3BnX3ZlcmlmeShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBzaWduYXR1cmVfY2hlY2sgc2lnbmF0dXJlX2NoZWNrOworCWludCByZXQ7CisKKwltZW1zZXQoJnNpZ25hdHVyZV9jaGVjaywgMCwgc2l6ZW9mKHNpZ25hdHVyZV9jaGVjaykpOworCisJcmV0ID0gY2hlY2tfY29tbWl0X3NpZ25hdHVyZShjb21taXQsICZzaWduYXR1cmVfY2hlY2spOworCXByaW50X3NpZ25hdHVyZV9idWZmZXIoJnNpZ25hdHVyZV9jaGVjaywgZmxhZ3MpOworCisJc2lnbmF0dXJlX2NoZWNrX2NsZWFyKCZzaWduYXR1cmVfY2hlY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2NvbW1pdChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlpZiAoZ2V0X29pZChuYW1lLCAmb2lkKSkKKwkJcmV0dXJuIGVycm9yKCJjb21taXQgJyVzJyBub3QgZm91bmQuIiwgbmFtZSk7CisKKwlvYmogPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpOworCWlmICghb2JqKQorCQlyZXR1cm4gZXJyb3IoIiVzOiB1bmFibGUgdG8gcmVhZCBmaWxlLiIsIG5hbWUpOworCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IHZlcmlmeSBhIG5vbi1jb21taXQgb2JqZWN0IG9mIHR5cGUgJXMuIiwKKwkJCQluYW1lLCB0eXBlX25hbWUob2JqLT50eXBlKSk7CisKKwlyZXR1cm4gcnVuX2dwZ192ZXJpZnkoKHN0cnVjdCBjb21taXQgKilvYmosIGZsYWdzKTsKK30KKworc3RhdGljIGludCBnaXRfdmVyaWZ5X2NvbW1pdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX3ZlcmlmeV9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGkgPSAxLCB2ZXJib3NlID0gMCwgaGFkX2Vycm9yID0gMDsKKwl1bnNpZ25lZCBmbGFncyA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiB2ZXJpZnlfY29tbWl0X29wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygicHJpbnQgY29tbWl0IGNvbnRlbnRzIikpLAorCQlPUFRfQklUKDAsICJyYXciLCAmZmxhZ3MsIE5fKCJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiKSwgR1BHX1ZFUklGWV9SQVcpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfdmVyaWZ5X2NvbW1pdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCB2ZXJpZnlfY29tbWl0X29wdGlvbnMsCisJCQkgICAgIHZlcmlmeV9jb21taXRfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKwlpZiAoYXJnYyA8PSBpKQorCQl1c2FnZV93aXRoX29wdGlvbnModmVyaWZ5X2NvbW1pdF91c2FnZSwgdmVyaWZ5X2NvbW1pdF9vcHRpb25zKTsKKworCWlmICh2ZXJib3NlKQorCQlmbGFncyB8PSBHUEdfVkVSSUZZX1ZFUkJPU0U7CisKKwkvKiBzb21ldGltZXMgdGhlIHByb2dyYW0gd2FzIHRlcm1pbmF0ZWQgYmVjYXVzZSB0aGlzIHNpZ25hbAorCSAqIHdhcyByZWNlaXZlZCBpbiB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHRoZSBncGcgaW5wdXQ6ICovCisJc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworCXdoaWxlIChpIDwgYXJnYykKKwkJaWYgKHZlcmlmeV9jb21taXQoYXJndltpKytdLCBmbGFncykpCisJCQloYWRfZXJyb3IgPSAxOworCXJldHVybiBoYWRfZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3ZlcmlmeS1wYWNrLmMgYi9idWlsdGluL3ZlcmlmeS1wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhMWE1YwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdmVyaWZ5LXBhY2suYwpAQCAtMCwwICsxLDgzIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKKyNkZWZpbmUgVkVSSUZZX1BBQ0tfVkVSQk9TRSAwMQorI2RlZmluZSBWRVJJRllfUEFDS19TVEFUX09OTFkgMDIKKworc3RhdGljIGludCB2ZXJpZnlfb25lX3BhY2soY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGluZGV4X3BhY2sgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndltdID0geyJpbmRleC1wYWNrIiwgTlVMTCwgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBzdHJidWYgYXJnID0gU1RSQlVGX0lOSVQ7CisJaW50IHZlcmJvc2UgPSBmbGFncyAmIFZFUklGWV9QQUNLX1ZFUkJPU0U7CisJaW50IHN0YXRfb25seSA9IGZsYWdzICYgVkVSSUZZX1BBQ0tfU1RBVF9PTkxZOworCWludCBlcnI7CisKKwlpZiAoc3RhdF9vbmx5KQorCQlhcmd2WzFdID0gIi0tdmVyaWZ5LXN0YXQtb25seSI7CisJZWxzZSBpZiAodmVyYm9zZSkKKwkJYXJndlsxXSA9ICItLXZlcmlmeS1zdGF0IjsKKwllbHNlCisJCWFyZ3ZbMV0gPSAiLS12ZXJpZnkiOworCisJLyoKKwkgKiBJbiBhZGRpdGlvbiB0byAiZm9vLnBhY2siIHdlIGFjY2VwdCAiZm9vLmlkeCIgYW5kICJmb28iOworCSAqIG5vcm1hbGl6ZSB0aGVzZSBmb3JtcyB0byAiZm9vLnBhY2siIGZvciAiaW5kZXgtcGFjayAtLXZlcmlmeSIuCisJICovCisJc3RyYnVmX2FkZHN0cigmYXJnLCBwYXRoKTsKKwlpZiAoc3RyYnVmX3N0cmlwX3N1ZmZpeCgmYXJnLCAiLmlkeCIpIHx8CisJICAgICFlbmRzX3dpdGgoYXJnLmJ1ZiwgIi5wYWNrIikpCisJCXN0cmJ1Zl9hZGRzdHIoJmFyZywgIi5wYWNrIik7CisJYXJndlsyXSA9IGFyZy5idWY7CisKKwlpbmRleF9wYWNrLmFyZ3YgPSBhcmd2OworCWluZGV4X3BhY2suZ2l0X2NtZCA9IDE7CisKKwllcnIgPSBydW5fY29tbWFuZCgmaW5kZXhfcGFjayk7CisKKwlpZiAodmVyYm9zZSB8fCBzdGF0X29ubHkpIHsKKwkJaWYgKGVycikKKwkJCXByaW50ZigiJXM6IGJhZFxuIiwgYXJnLmJ1Zik7CisJCWVsc2UgeworCQkJaWYgKCFzdGF0X29ubHkpCisJCQkJcHJpbnRmKCIlczogb2tcbiIsIGFyZy5idWYpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhcmcpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2ZXJpZnlfcGFja191c2FnZVtdID0geworCU5fKCJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIiksCisJTlVMTAorfTsKKworaW50IGNtZF92ZXJpZnlfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCWludCBpOworCWNvbnN0IHN0cnVjdCBvcHRpb24gdmVyaWZ5X3BhY2tfb3B0aW9uc1tdID0geworCQlPUFRfQklUKCd2JywgInZlcmJvc2UiLCAmZmxhZ3MsIE5fKCJ2ZXJib3NlIiksCisJCQlWRVJJRllfUEFDS19WRVJCT1NFKSwKKwkJT1BUX0JJVCgncycsICJzdGF0LW9ubHkiLCAmZmxhZ3MsIE5fKCJzaG93IHN0YXRpc3RpY3Mgb25seSIpLAorCQkJVkVSSUZZX1BBQ0tfU1RBVF9PTkxZKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHZlcmlmeV9wYWNrX29wdGlvbnMsCisJCQkgICAgIHZlcmlmeV9wYWNrX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh2ZXJpZnlfcGFja191c2FnZSwgdmVyaWZ5X3BhY2tfb3B0aW9ucyk7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAodmVyaWZ5X29uZV9wYWNrKGFyZ3ZbaV0sIGZsYWdzKSkKKwkJCWVyciA9IDE7CisJfQorCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdmVyaWZ5LXRhZy5jIGIvYnVpbHRpbi92ZXJpZnktdGFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1MTM2YQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdmVyaWZ5LXRhZy5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgdmVyaWZ5LXRhZyIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybG9zIFJpY2EgPGphc2FtcGxlckBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gZ2l0LXZlcmlmeS10YWcuc2gKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJyZWYtZmlsdGVyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdmVyaWZ5X3RhZ191c2FnZVtdID0geworCQlOXygiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIiksCisJCU5VTEwKK307CisKK3N0YXRpYyBpbnQgZ2l0X3ZlcmlmeV90YWdfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCBzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF92ZXJpZnlfdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpID0gMSwgdmVyYm9zZSA9IDAsIGhhZF9lcnJvciA9IDA7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCXN0cnVjdCByZWZfZm9ybWF0IGZvcm1hdCA9IFJFRl9GT1JNQVRfSU5JVDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHZlcmlmeV90YWdfb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJwcmludCB0YWcgY29udGVudHMiKSksCisJCU9QVF9CSVQoMCwgInJhdyIsICZmbGFncywgTl8oInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIpLCBHUEdfVkVSSUZZX1JBVyksCisJCU9QVF9TVFJJTkcoMCwgImZvcm1hdCIsICZmb3JtYXQuZm9ybWF0LCBOXygiZm9ybWF0IiksIE5fKCJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfdmVyaWZ5X3RhZ19jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCB2ZXJpZnlfdGFnX29wdGlvbnMsCisJCQkgICAgIHZlcmlmeV90YWdfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKwlpZiAoYXJnYyA8PSBpKQorCQl1c2FnZV93aXRoX29wdGlvbnModmVyaWZ5X3RhZ191c2FnZSwgdmVyaWZ5X3RhZ19vcHRpb25zKTsKKworCWlmICh2ZXJib3NlKQorCQlmbGFncyB8PSBHUEdfVkVSSUZZX1ZFUkJPU0U7CisKKwlpZiAoZm9ybWF0LmZvcm1hdCkgeworCQlpZiAodmVyaWZ5X3JlZl9mb3JtYXQoJmZvcm1hdCkpCisJCQl1c2FnZV93aXRoX29wdGlvbnModmVyaWZ5X3RhZ191c2FnZSwKKwkJCQkJICAgdmVyaWZ5X3RhZ19vcHRpb25zKTsKKwkJZmxhZ3MgfD0gR1BHX1ZFUklGWV9PTUlUX1NUQVRVUzsKKwl9CisKKwl3aGlsZSAoaSA8IGFyZ2MpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBhcmd2W2krK107CisKKwkJaWYgKGdldF9vaWQobmFtZSwgJm9pZCkpIHsKKwkJCWhhZF9lcnJvciA9ICEhZXJyb3IoInRhZyAnJXMnIG5vdCBmb3VuZC4iLCBuYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGdwZ192ZXJpZnlfdGFnKCZvaWQsIG5hbWUsIGZsYWdzKSkgeworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGZvcm1hdC5mb3JtYXQpCisJCQlwcmV0dHlfcHJpbnRfcmVmKG5hbWUsICZvaWQsICZmb3JtYXQpOworCX0KKwlyZXR1cm4gaGFkX2Vycm9yOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi93b3JrdHJlZS5jIGIvYnVpbHRpbi93b3JrdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZjIyODAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3dvcmt0cmVlLmMKQEAgLTAsMCArMSw5NzkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNoZWNrb3V0LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3b3JrdHJlZV91c2FnZVtdID0geworCU5fKCJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XSIpLAorCU5fKCJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIpLAorCU5fKCJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iKSwKKwlOXygiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IiksCisJTl8oImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIpLAorCU5fKCJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8b3B0aW9ucz5dIDx3b3JrdHJlZT4iKSwKKwlOXygiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iKSwKKwlOVUxMCit9OworCitzdHJ1Y3QgYWRkX29wdHMgeworCWludCBmb3JjZTsKKwlpbnQgZGV0YWNoOworCWludCBxdWlldDsKKwlpbnQgY2hlY2tvdXQ7CisJaW50IGtlZXBfbG9ja2VkOworfTsKKworc3RhdGljIGludCBzaG93X29ubHk7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IGd1ZXNzX3JlbW90ZTsKK3N0YXRpYyB0aW1lc3RhbXBfdCBleHBpcmU7CisKK3N0YXRpYyBpbnQgZ2l0X3dvcmt0cmVlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJ3b3JrdHJlZS5ndWVzc3JlbW90ZSIpKSB7CisJCWd1ZXNzX3JlbW90ZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX2dpdF9kaXIoY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlzdHJidWZfYWRkc3RyKCZzYiwgZ2l0X2NvbW1vbl9wYXRoKCJ3b3JrdHJlZXMvJXMiLCBpZCkpOworCXJldCA9IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnNiLCAwKTsKKwlpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFTk9URElSKQorCQlyZXQgPSB1bmxpbmsoc2IuYnVmKTsKKwlpZiAocmV0KQorCQllcnJvcl9lcnJubyhfKCJmYWlsZWQgdG8gZGVsZXRlICclcyciKSwgc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV93b3JrdHJlZXNfZGlyX2lmX2VtcHR5KHZvaWQpCit7CisJcm1kaXIoZ2l0X3BhdGgoIndvcmt0cmVlcyIpKTsgLyogaWdub3JlIGZhaWxlZCByZW1vdmFsICovCit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfd29ya3RyZWUoY29uc3QgY2hhciAqaWQsIHN0cnVjdCBzdHJidWYgKnJlYXNvbikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpwYXRoOworCWludCBmZDsKKwlzaXplX3QgbGVuOworCXNzaXplX3QgcmVhZF9yZXN1bHQ7CisKKwlpZiAoIWlzX2RpcmVjdG9yeShnaXRfcGF0aCgid29ya3RyZWVzLyVzIiwgaWQpKSkgeworCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IiksIGlkKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aCgid29ya3RyZWVzLyVzL2xvY2tlZCIsIGlkKSkpCisJCXJldHVybiAwOworCWlmIChzdGF0KGdpdF9wYXRoKCJ3b3JrdHJlZXMvJXMvZ2l0ZGlyIiwgaWQpLCAmc3QpKSB7CisJCXN0cmJ1Zl9hZGRmKHJlYXNvbiwgXygiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIpLCBpZCk7CisJCXJldHVybiAxOworCX0KKwlmZCA9IG9wZW4oZ2l0X3BhdGgoIndvcmt0cmVlcy8lcy9naXRkaXIiLCBpZCksIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCXN0cmJ1Zl9hZGRmKHJlYXNvbiwgXygiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIiksCisJCQkgICAgaWQsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAxOworCX0KKwlsZW4gPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCXBhdGggPSB4bWFsbG9jeihsZW4pOworCisJcmVhZF9yZXN1bHQgPSByZWFkX2luX2Z1bGwoZmQsIHBhdGgsIGxlbik7CisJaWYgKHJlYWRfcmVzdWx0IDwgMCkgeworCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIpLAorCQkJICAgIGlkLCBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShmZCk7CisJCWZyZWUocGF0aCk7CisJCXJldHVybiAxOworCX0KKwljbG9zZShmZCk7CisKKwlpZiAocmVhZF9yZXN1bHQgIT0gbGVuKSB7CisJCXN0cmJ1Zl9hZGRmKHJlYXNvbiwKKwkJCSAgICBfKCJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICUiUFJJdU1BWCIgYnl0ZXMsIHJlYWQgJSJQUkl1TUFYIikiKSwKKwkJCSAgICBpZCwgKHVpbnRtYXhfdClsZW4sICh1aW50bWF4X3QpcmVhZF9yZXN1bHQpOworCQlmcmVlKHBhdGgpOworCQlyZXR1cm4gMTsKKwl9CisJd2hpbGUgKGxlbiAmJiAocGF0aFtsZW4gLSAxXSA9PSAnXG4nIHx8IHBhdGhbbGVuIC0gMV0gPT0gJ1xyJykpCisJCWxlbi0tOworCWlmICghbGVuKSB7CisJCXN0cmJ1Zl9hZGRmKHJlYXNvbiwgXygiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIiksIGlkKTsKKwkJZnJlZShwYXRoKTsKKwkJcmV0dXJuIDE7CisJfQorCXBhdGhbbGVuXSA9ICdcMCc7CisJaWYgKCFmaWxlX2V4aXN0cyhwYXRoKSkgeworCQlmcmVlKHBhdGgpOworCQlpZiAoc3RhdChnaXRfcGF0aCgid29ya3RyZWVzLyVzL2luZGV4IiwgaWQpLCAmc3QpIHx8CisJCSAgICBzdC5zdF9tdGltZSA8PSBleHBpcmUpIHsKKwkJCXN0cmJ1Zl9hZGRmKHJlYXNvbiwgXygiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIiksIGlkKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJZnJlZShwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJ1bmVfd29ya3RyZWVzKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiByZWFzb24gPSBTVFJCVUZfSU5JVDsKKwlESVIgKmRpciA9IG9wZW5kaXIoZ2l0X3BhdGgoIndvcmt0cmVlcyIpKTsKKwlzdHJ1Y3QgZGlyZW50ICpkOworCWlmICghZGlyKQorCQlyZXR1cm47CisJd2hpbGUgKChkID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGQtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX3Jlc2V0KCZyZWFzb24pOworCQlpZiAoIXBydW5lX3dvcmt0cmVlKGQtPmRfbmFtZSwgJnJlYXNvbikpCisJCQljb250aW51ZTsKKwkJaWYgKHNob3dfb25seSB8fCB2ZXJib3NlKQorCQkJcHJpbnRmKCIlc1xuIiwgcmVhc29uLmJ1Zik7CisJCWlmIChzaG93X29ubHkpCisJCQljb250aW51ZTsKKwkJZGVsZXRlX2dpdF9kaXIoZC0+ZF9uYW1lKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlpZiAoIXNob3dfb25seSkKKwkJZGVsZXRlX3dvcmt0cmVlc19kaXJfaWZfZW1wdHkoKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVhc29uKTsKK30KKworc3RhdGljIGludCBwcnVuZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0RSWV9SVU4oJnNob3dfb25seSwgTl8oImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIpKSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIikpLAorCQlPUFRfRVhQSVJZX0RBVEUoMCwgImV4cGlyZSIsICZleHBpcmUsCisJCQkJTl8oImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZXhwaXJlID0gVElNRV9NQVg7CisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBvcHRpb25zLCB3b3JrdHJlZV91c2FnZSwgMCk7CisJaWYgKGFjKQorCQl1c2FnZV93aXRoX29wdGlvbnMod29ya3RyZWVfdXNhZ2UsIG9wdGlvbnMpOworCXBydW5lX3dvcmt0cmVlcygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqanVua193b3JrX3RyZWU7CitzdGF0aWMgY2hhciAqanVua19naXRfZGlyOworc3RhdGljIGludCBpc19qdW5rOworc3RhdGljIHBpZF90IGp1bmtfcGlkOworCitzdGF0aWMgdm9pZCByZW1vdmVfanVuayh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpZiAoIWlzX2p1bmsgfHwgZ2V0cGlkKCkgIT0ganVua19waWQpCisJCXJldHVybjsKKwlpZiAoanVua19naXRfZGlyKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBqdW5rX2dpdF9kaXIpOworCQlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZzYiwgMCk7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCX0KKwlpZiAoanVua193b3JrX3RyZWUpIHsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGp1bmtfd29ya190cmVlKTsKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2IsIDApOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfanVua19vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV9qdW5rKCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp3b3JrdHJlZV9iYXNlbmFtZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm9sZW4pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbGVuOworCisJbGVuID0gc3RybGVuKHBhdGgpOworCXdoaWxlIChsZW4gJiYgaXNfZGlyX3NlcChwYXRoW2xlbiAtIDFdKSkKKwkJbGVuLS07CisKKwlmb3IgKG5hbWUgPSBwYXRoICsgbGVuIC0gMTsgbmFtZSA+IHBhdGg7IG5hbWUtLSkKKwkJaWYgKGlzX2Rpcl9zZXAoKm5hbWUpKSB7CisJCQluYW1lKys7CisJCQlicmVhazsKKwkJfQorCisJKm9sZW4gPSBsZW47CisJcmV0dXJuIG5hbWU7Cit9CisKK3N0YXRpYyB2b2lkIHZhbGlkYXRlX3dvcmt0cmVlX2FkZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgYWRkX29wdHMgKm9wdHMpCit7CisJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzOworCXN0cnVjdCB3b3JrdHJlZSAqd3Q7CisJaW50IGxvY2tlZDsKKworCWlmIChmaWxlX2V4aXN0cyhwYXRoKSAmJiAhaXNfZW1wdHlfZGlyKHBhdGgpKQorCQlkaWUoXygiJyVzJyBhbHJlYWR5IGV4aXN0cyIpLCBwYXRoKTsKKworCXdvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoMCk7CisJd3QgPSBmaW5kX3dvcmt0cmVlX2J5X3BhdGgod29ya3RyZWVzLCBwYXRoKTsKKwlpZiAoIXd0KQorCQlnb3RvIGRvbmU7CisKKwlsb2NrZWQgPSAhIXdvcmt0cmVlX2xvY2tfcmVhc29uKHd0KTsKKwlpZiAoKCFsb2NrZWQgJiYgb3B0cy0+Zm9yY2UpIHx8IChsb2NrZWQgJiYgb3B0cy0+Zm9yY2UgPiAxKSkgeworCQlpZiAoZGVsZXRlX2dpdF9kaXIod3QtPmlkKSkKKwkJICAgIGRpZShfKCJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciKSwgcGF0aCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAobG9ja2VkKQorCQlkaWUoXygiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbnVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiKSwgcGF0aCk7CisJZWxzZQorCQlkaWUoXygiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGFscmVhZHkgcmVnaXN0ZXJlZCB3b3JrdHJlZTtcbnVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIpLCBwYXRoKTsKKworZG9uZToKKwlmcmVlX3dvcmt0cmVlcyh3b3JrdHJlZXMpOworfQorCitzdGF0aWMgaW50IGFkZF93b3JrdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJY29uc3Qgc3RydWN0IGFkZF9vcHRzICpvcHRzKQoreworCXN0cnVjdCBzdHJidWYgc2JfZ2l0ID0gU1RSQlVGX0lOSVQsIHNiX3JlcG8gPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBjaGlsZF9lbnYgPSBBUkdWX0FSUkFZX0lOSVQ7CisJdW5zaWduZWQgaW50IGNvdW50ZXIgPSAwOworCWludCBsZW4sIHJldDsKKwlzdHJ1Y3Qgc3RyYnVmIHN5bXJlZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IE5VTEw7CisJaW50IGlzX2JyYW5jaCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYl9uYW1lID0gU1RSQlVGX0lOSVQ7CisKKwl2YWxpZGF0ZV93b3JrdHJlZV9hZGQocGF0aCwgb3B0cyk7CisKKwkvKiBpcyAncmVmbmFtZScgYSBicmFuY2ggb3IgY29tbWl0PyAqLworCWlmICghb3B0cy0+ZGV0YWNoICYmICFzdHJidWZfY2hlY2tfYnJhbmNoX3JlZigmc3ltcmVmLCByZWZuYW1lKSAmJgorCSAgICByZWZfZXhpc3RzKHN5bXJlZi5idWYpKSB7CisJCWlzX2JyYW5jaCA9IDE7CisJCWlmICghb3B0cy0+Zm9yY2UpCisJCQlkaWVfaWZfY2hlY2tlZF9vdXQoc3ltcmVmLmJ1ZiwgMCk7CisJfQorCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUocmVmbmFtZSk7CisJaWYgKCFjb21taXQpCisJCWRpZShfKCJpbnZhbGlkIHJlZmVyZW5jZTogJXMiKSwgcmVmbmFtZSk7CisKKwluYW1lID0gd29ya3RyZWVfYmFzZW5hbWUocGF0aCwgJmxlbik7CisJc3RyYnVmX2FkZCgmc2IsIG5hbWUsIHBhdGggKyBsZW4gLSBuYW1lKTsKKwlzYW5pdGl6ZV9yZWZuYW1lX2NvbXBvbmVudChzYi5idWYsICZzYl9uYW1lKTsKKwlpZiAoIXNiX25hbWUubGVuKQorCQlCVUcoIkhvdyBjb21lICclcycgYmVjb21lcyBlbXB0eSBhZnRlciBzYW5pdGl6YXRpb24/Iiwgc2IuYnVmKTsKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwluYW1lID0gc2JfbmFtZS5idWY7CisJZ2l0X3BhdGhfYnVmKCZzYl9yZXBvLCAid29ya3RyZWVzLyVzIiwgbmFtZSk7CisJbGVuID0gc2JfcmVwby5sZW47CisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3Qoc2JfcmVwby5idWYpKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciKSwKKwkJCSAgc2JfcmVwby5idWYpOworCisJd2hpbGUgKG1rZGlyKHNiX3JlcG8uYnVmLCAwNzc3KSkgeworCQljb3VudGVyKys7CisJCWlmICgoZXJybm8gIT0gRUVYSVNUKSB8fCAhY291bnRlciAvKiBvdmVyZmxvdyAqLykKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIiksCisJCQkJICBzYl9yZXBvLmJ1Zik7CisJCXN0cmJ1Zl9zZXRsZW4oJnNiX3JlcG8sIGxlbik7CisJCXN0cmJ1Zl9hZGRmKCZzYl9yZXBvLCAiJWQiLCBjb3VudGVyKTsKKwl9CisJbmFtZSA9IHN0cnJjaHIoc2JfcmVwby5idWYsICcvJykgKyAxOworCisJanVua19waWQgPSBnZXRwaWQoKTsKKwlhdGV4aXQocmVtb3ZlX2p1bmspOworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlbW92ZV9qdW5rX29uX3NpZ25hbCk7CisKKwlqdW5rX2dpdF9kaXIgPSB4c3RyZHVwKHNiX3JlcG8uYnVmKTsKKwlpc19qdW5rID0gMTsKKworCS8qCisJICogbG9jayB0aGUgaW5jb21wbGV0ZSByZXBvIHNvIHBydW5lIHdvbid0IGRlbGV0ZSBpdCwgdW5sb2NrCisJICogYWZ0ZXIgdGhlIHByZXBhcmF0aW9uIGlzIG92ZXIuCisJICovCisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvbG9ja2VkIiwgc2JfcmVwby5idWYpOworCWlmICghb3B0cy0+a2VlcF9sb2NrZWQpCisJCXdyaXRlX2ZpbGUoc2IuYnVmLCAiaW5pdGlhbGl6aW5nIik7CisJZWxzZQorCQl3cml0ZV9maWxlKHNiLmJ1ZiwgImFkZGVkIHdpdGggLS1sb2NrIik7CisKKwlzdHJidWZfYWRkZigmc2JfZ2l0LCAiJXMvLmdpdCIsIHBhdGgpOworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHNiX2dpdC5idWYpKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciKSwKKwkJCSAgc2JfZ2l0LmJ1Zik7CisJanVua193b3JrX3RyZWUgPSB4c3RyZHVwKHBhdGgpOworCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvZ2l0ZGlyIiwgc2JfcmVwby5idWYpOworCXdyaXRlX2ZpbGUoc2IuYnVmLCAiJXMiLCByZWFsX3BhdGgoc2JfZ2l0LmJ1ZikpOworCXdyaXRlX2ZpbGUoc2JfZ2l0LmJ1ZiwgImdpdGRpcjogJXMvd29ya3RyZWVzLyVzIiwKKwkJICAgcmVhbF9wYXRoKGdldF9naXRfY29tbW9uX2RpcigpKSwgbmFtZSk7CisJLyoKKwkgKiBUaGlzIGlzIHRvIGtlZXAgcmVzb2x2ZV9yZWYoKSBoYXBweS4gV2UgbmVlZCBhIHZhbGlkIEhFQUQKKwkgKiBvciBpc19naXRfZGlyZWN0b3J5KCkgd2lsbCByZWplY3QgdGhlIGRpcmVjdG9yeS4gQW55IHZhbHVlIHdoaWNoCisJICogbG9va3MgbGlrZSBhbiBvYmplY3QgSUQgd2lsbCBkbyBzaW5jZSBpdCB3aWxsIGJlIGltbWVkaWF0ZWx5CisJICogcmVwbGFjZWQgYnkgdGhlIHN5bWJvbGljLXJlZiBvciB1cGRhdGUtcmVmIGludm9jYXRpb24gaW4gdGhlIG5ldworCSAqIHdvcmt0cmVlLgorCSAqLworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL0hFQUQiLCBzYl9yZXBvLmJ1Zik7CisJd3JpdGVfZmlsZShzYi5idWYsICIlcyIsIG9pZF90b19oZXgoJm51bGxfb2lkKSk7CisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvY29tbW9uZGlyIiwgc2JfcmVwby5idWYpOworCXdyaXRlX2ZpbGUoc2IuYnVmLCAiLi4vLi4iKTsKKworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkX2VudiwgIiVzPSVzIiwgR0lUX0RJUl9FTlZJUk9OTUVOVCwgc2JfZ2l0LmJ1Zik7CisJYXJndl9hcnJheV9wdXNoZigmY2hpbGRfZW52LCAiJXM9JXMiLCBHSVRfV09SS19UUkVFX0VOVklST05NRU5ULCBwYXRoKTsKKwljcC5naXRfY21kID0gMTsKKworCWlmICghaXNfYnJhbmNoKQorCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAidXBkYXRlLXJlZiIsICJIRUFEIiwKKwkJCQkgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSwgTlVMTCk7CisJZWxzZSB7CisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJzeW1ib2xpYy1yZWYiLCAiSEVBRCIsCisJCQkJIHN5bXJlZi5idWYsIE5VTEwpOworCQlpZiAob3B0cy0+cXVpZXQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLXF1aWV0Iik7CisJfQorCisJY3AuZW52ID0gY2hpbGRfZW52LmFyZ3Y7CisJcmV0ID0gcnVuX2NvbW1hbmQoJmNwKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwlpZiAob3B0cy0+Y2hlY2tvdXQpIHsKKwkJY3AuYXJndiA9IE5VTEw7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmNwLmFyZ3MpOworCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAicmVzZXQiLCAiLS1oYXJkIiwgIi0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIiwgTlVMTCk7CisJCWlmIChvcHRzLT5xdWlldCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tcXVpZXQiKTsKKwkJY3AuZW52ID0gY2hpbGRfZW52LmFyZ3Y7CisJCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGRvbmU7CisJfQorCisJaXNfanVuayA9IDA7CisJRlJFRV9BTkRfTlVMTChqdW5rX3dvcmtfdHJlZSk7CisJRlJFRV9BTkRfTlVMTChqdW5rX2dpdF9kaXIpOworCitkb25lOgorCWlmIChyZXQgfHwgIW9wdHMtPmtlZXBfbG9ja2VkKSB7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQlzdHJidWZfYWRkZigmc2IsICIlcy9sb2NrZWQiLCBzYl9yZXBvLmJ1Zik7CisJCXVubGlua19vcl93YXJuKHNiLmJ1Zik7CisJfQorCisJLyoKKwkgKiBIb29rIGZhaWx1cmUgZG9lcyBub3Qgd2FycmFudCB3b3JrdHJlZSBkZWxldGlvbiwgc28gcnVuIGhvb2sgYWZ0ZXIKKwkgKiBpc19qdW5rIGlzIGNsZWFyZWQsIGJ1dCBkbyByZXR1cm4gYXBwcm9wcmlhdGUgY29kZSB3aGVuIGhvb2sgZmFpbHMuCisJICovCisJaWYgKCFyZXQgJiYgb3B0cy0+Y2hlY2tvdXQpIHsKKwkJY29uc3QgY2hhciAqaG9vayA9IGZpbmRfaG9vaygicG9zdC1jaGVja291dCIpOworCQlpZiAoaG9vaykgeworCQkJY29uc3QgY2hhciAqZW52W10gPSB7ICJHSVRfRElSIiwgIkdJVF9XT1JLX1RSRUUiLCBOVUxMIH07CisJCQljcC5naXRfY21kID0gMDsKKwkJCWNwLm5vX3N0ZGluID0gMTsKKwkJCWNwLnN0ZG91dF90b19zdGRlcnIgPSAxOworCQkJY3AuZGlyID0gcGF0aDsKKwkJCWNwLmVudiA9IGVudjsKKwkJCWNwLmFyZ3YgPSBOVUxMOworCQkJY3AudHJhY2UyX2hvb2tfbmFtZSA9ICJwb3N0LWNoZWNrb3V0IjsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsIGFic29sdXRlX3BhdGgoaG9vayksCisJCQkJCSBvaWRfdG9faGV4KCZudWxsX29pZCksCisJCQkJCSBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpLAorCQkJCQkgIjEiLCBOVUxMKTsKKwkJCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisJCX0KKwl9CisKKwlhcmd2X2FycmF5X2NsZWFyKCZjaGlsZF9lbnYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJc3RyYnVmX3JlbGVhc2UoJnN5bXJlZik7CisJc3RyYnVmX3JlbGVhc2UoJnNiX3JlcG8pOworCXN0cmJ1Zl9yZWxlYXNlKCZzYl9naXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYl9uYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcmludF9wcmVwYXJpbmdfd29ya3RyZWVfbGluZShpbnQgZGV0YWNoLAorCQkJCQkgIGNvbnN0IGNoYXIgKmJyYW5jaCwKKwkJCQkJICBjb25zdCBjaGFyICpuZXdfYnJhbmNoLAorCQkJCQkgIGludCBmb3JjZV9uZXdfYnJhbmNoKQoreworCWlmIChmb3JjZV9uZXdfYnJhbmNoKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUobmV3X2JyYW5jaCk7CisJCWlmICghY29tbWl0KQorCQkJcHJpbnRmX2xuKF8oIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIpLCBuZXdfYnJhbmNoKTsKKwkJZWxzZQorCQkJcHJpbnRmX2xuKF8oIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIiksCisJCQkJICBuZXdfYnJhbmNoLAorCQkJCSAgZmluZF91bmlxdWVfYWJicmV2KCZjb21taXQtPm9iamVjdC5vaWQsIERFRkFVTFRfQUJCUkVWKSk7CisJfSBlbHNlIGlmIChuZXdfYnJhbmNoKSB7CisJCXByaW50Zl9sbihfKCJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiKSwgbmV3X2JyYW5jaCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBzID0gU1RSQlVGX0lOSVQ7CisJCWlmICghZGV0YWNoICYmICFzdHJidWZfY2hlY2tfYnJhbmNoX3JlZigmcywgYnJhbmNoKSAmJgorCQkgICAgcmVmX2V4aXN0cyhzLmJ1ZikpCisJCQlwcmludGZfbG4oXygiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiKSwKKwkJCQkgIGJyYW5jaCk7CisJCWVsc2UgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShicmFuY2gpOworCQkJaWYgKCFjb21taXQpCisJCQkJZGllKF8oImludmFsaWQgcmVmZXJlbmNlOiAlcyIpLCBicmFuY2gpOworCQkJcHJpbnRmX2xuKF8oIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiKSwKKwkJCQkgIGZpbmRfdW5pcXVlX2FiYnJldigmY29tbWl0LT5vYmplY3Qub2lkLCBERUZBVUxUX0FCQlJFVikpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkd2ltX2JyYW5jaChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICoqbmV3X2JyYW5jaCkKK3sKKwlpbnQgbjsKKwljb25zdCBjaGFyICpzID0gd29ya3RyZWVfYmFzZW5hbWUocGF0aCwgJm4pOworCWNvbnN0IGNoYXIgKmJyYW5jaG5hbWUgPSB4c3RybmR1cChzLCBuKTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZiA9IFNUUkJVRl9JTklUOworCisJVU5MRUFLKGJyYW5jaG5hbWUpOworCWlmICghc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJnJlZiwgYnJhbmNobmFtZSkgJiYKKwkgICAgcmVmX2V4aXN0cyhyZWYuYnVmKSkgeworCQlzdHJidWZfcmVsZWFzZSgmcmVmKTsKKwkJcmV0dXJuIGJyYW5jaG5hbWU7CisJfQorCisJKm5ld19icmFuY2ggPSBicmFuY2huYW1lOworCWlmIChndWVzc19yZW1vdGUpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWNvbnN0IGNoYXIgKnJlbW90ZSA9CisJCQl1bmlxdWVfdHJhY2tpbmdfbmFtZSgqbmV3X2JyYW5jaCwgJm9pZCwgTlVMTCk7CisJCXJldHVybiByZW1vdGU7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGFkZChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBhZGRfb3B0cyBvcHRzOworCWNvbnN0IGNoYXIgKm5ld19icmFuY2hfZm9yY2UgPSBOVUxMOworCWNoYXIgKnBhdGg7CisJY29uc3QgY2hhciAqYnJhbmNoOworCWNvbnN0IGNoYXIgKm5ld19icmFuY2ggPSBOVUxMOworCWNvbnN0IGNoYXIgKm9wdF90cmFjayA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRk9SQ0UoJm9wdHMuZm9yY2UsCisJCQkgICBOXygiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIiksCisJCQkgICBQQVJTRV9PUFRfTk9DT01QTEVURSksCisJCU9QVF9TVFJJTkcoJ2InLCBOVUxMLCAmbmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhIG5ldyBicmFuY2giKSksCisJCU9QVF9TVFJJTkcoJ0InLCBOVUxMLCAmbmV3X2JyYW5jaF9mb3JjZSwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIpKSwKKwkJT1BUX0JPT0woMCwgImRldGFjaCIsICZvcHRzLmRldGFjaCwgTl8oImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgImNoZWNrb3V0IiwgJm9wdHMuY2hlY2tvdXQsIE5fKCJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0JPT0woMCwgImxvY2siLCAmb3B0cy5rZWVwX2xvY2tlZCwgTl8oImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIikpLAorCQlPUFRfX1FVSUVUKCZvcHRzLnF1aWV0LCBOXygic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCQlPUFRfUEFTU1RIUlUoMCwgInRyYWNrIiwgJm9wdF90cmFjaywgTlVMTCwKKwkJCSAgICAgTl8oInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiKSwKKwkJCSAgICAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX09QVEFSRyksCisJCU9QVF9CT09MKDAsICJndWVzcy1yZW1vdGUiLCAmZ3Vlc3NfcmVtb3RlLAorCQkJIE5fKCJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmNoZWNrb3V0ID0gMTsKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbnMsIHdvcmt0cmVlX3VzYWdlLCAwKTsKKwlpZiAoISFvcHRzLmRldGFjaCArICEhbmV3X2JyYW5jaCArICEhbmV3X2JyYW5jaF9mb3JjZSA+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+b2lkKSk7CisJc3RyYnVmX3NldGxlbihwYXRoLCBsZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZ0cmVlX2J1Zik7Cit9CisKK3ZvaWQgY2FjaGVfdHJlZV92ZXJpZnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJaWYgKCFpc3RhdGUtPmNhY2hlX3RyZWUpCisJCXJldHVybjsKKwl2ZXJpZnlfb25lKHIsIGlzdGF0ZSwgaXN0YXRlLT5jYWNoZV90cmVlLCAmcGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworfQpkaWZmIC0tZ2l0IGEvY2FjaGUtdHJlZS5oIGIvY2FjaGUtdHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWJmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jYWNoZS10cmVlLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZiBDQUNIRV9UUkVFX0gKKyNkZWZpbmUgQ0FDSEVfVFJFRV9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKworc3RydWN0IGNhY2hlX3RyZWU7CitzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgeworCXN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlOworCWludCBjb3VudDsJCS8qIGludGVybmFsbHkgdXNlZCBieSB1cGRhdGVfb25lKCkgKi8KKwlpbnQgbmFtZWxlbjsKKwlpbnQgdXNlZDsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgY2FjaGVfdHJlZSB7CisJaW50IGVudHJ5X2NvdW50OyAvKiBuZWdhdGl2ZSBtZWFucyAiaW52YWxpZCIgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgc3VidHJlZV9ucjsKKwlpbnQgc3VidHJlZV9hbGxvYzsKKwlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKipkb3duOworfTsKKworc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWUodm9pZCk7Cit2b2lkIGNhY2hlX3RyZWVfZnJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqKik7Cit2b2lkIGNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICopOworc3RydWN0IGNhY2hlX3RyZWVfc3ViICpjYWNoZV90cmVlX3N1YihzdHJ1Y3QgY2FjaGVfdHJlZSAqLCBjb25zdCBjaGFyICopOworCit2b2lkIGNhY2hlX3RyZWVfd3JpdGUoc3RydWN0IHN0cmJ1ZiAqLCBzdHJ1Y3QgY2FjaGVfdHJlZSAqcm9vdCk7CitzdHJ1Y3QgY2FjaGVfdHJlZSAqY2FjaGVfdHJlZV9yZWFkKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworaW50IGNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoc3RydWN0IGNhY2hlX3RyZWUgKik7CitpbnQgY2FjaGVfdHJlZV91cGRhdGUoc3RydWN0IGluZGV4X3N0YXRlICosIGludCk7Cit2b2lkIGNhY2hlX3RyZWVfdmVyaWZ5KHN0cnVjdCByZXBvc2l0b3J5ICosIHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKKworLyogYml0bWFza3MgdG8gd3JpdGVfaW5kZXhfYXNfdHJlZSBmbGFncyAqLworI2RlZmluZSBXUklURV9UUkVFX01JU1NJTkdfT0sgMQorI2RlZmluZSBXUklURV9UUkVFX0lHTk9SRV9DQUNIRV9UUkVFIDIKKyNkZWZpbmUgV1JJVEVfVFJFRV9EUllfUlVOIDQKKyNkZWZpbmUgV1JJVEVfVFJFRV9TSUxFTlQgOAorI2RlZmluZSBXUklURV9UUkVFX1JFUEFJUiAxNgorCisvKiBlcnJvciByZXR1cm4gY29kZXMgKi8KKyNkZWZpbmUgV1JJVEVfVFJFRV9VTlJFQURBQkxFX0lOREVYICgtMSkKKyNkZWZpbmUgV1JJVEVfVFJFRV9VTk1FUkdFRF9JTkRFWCAoLTIpCisjZGVmaW5lIFdSSVRFX1RSRUVfUFJFRklYX0VSUk9SICgtMykKKworc3RydWN0IHRyZWUqIHdyaXRlX2luX2NvcmVfaW5kZXhfYXNfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CitpbnQgd3JpdGVfaW5kZXhfYXNfdHJlZShzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXhfc3RhdGUsIGNvbnN0IGNoYXIgKmluZGV4X3BhdGgsIGludCBmbGFncywgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgcHJpbWVfY2FjaGVfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IHRyZWUgKik7CisKK2ludCBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV90cmVlICosIHN0cnVjdCBuYW1lX2VudHJ5ICplbnQsIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKTsKKworI2lmZGVmIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKK3N0YXRpYyBpbmxpbmUgaW50IHdyaXRlX2NhY2hlX2FzX3RyZWUoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlyZXR1cm4gd3JpdGVfaW5kZXhfYXNfdHJlZShvaWQsICZ0aGVfaW5kZXgsIGdldF9pbmRleF9maWxlKCksIGZsYWdzLCBwcmVmaXgpOworfQorCitzdGF0aWMgaW5saW5lIGludCB1cGRhdGVfbWFpbl9jYWNoZV90cmVlKGludCBmbGFncykKK3sKKwlpZiAoIXRoZV9pbmRleC5jYWNoZV90cmVlKQorCQl0aGVfaW5kZXguY2FjaGVfdHJlZSA9IGNhY2hlX3RyZWUoKTsKKwlyZXR1cm4gY2FjaGVfdHJlZV91cGRhdGUoJnRoZV9pbmRleCwgZmxhZ3MpOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2FjaGUuaCBiL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjODk5YgotLS0gL2Rldi9udWxsCisrKyBiL2NhY2hlLmgKQEAgLTAsMCArMSwxOTQ5IEBACisjaWZuZGVmIENBQ0hFX0gKKyNkZWZpbmUgQ0FDSEVfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJhZHZpY2UuaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAiY29udmVydC5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2UyLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYWNrLXJldmluZGV4LmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInBhdGguaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm1lbS1wb29sLmgiCisKKyNpbmNsdWRlIDx6bGliLmg+Cit0eXBlZGVmIHN0cnVjdCBnaXRfenN0cmVhbSB7CisJel9zdHJlYW0gejsKKwl1bnNpZ25lZCBsb25nIGF2YWlsX2luOworCXVuc2lnbmVkIGxvbmcgYXZhaWxfb3V0OworCXVuc2lnbmVkIGxvbmcgdG90YWxfaW47CisJdW5zaWduZWQgbG9uZyB0b3RhbF9vdXQ7CisJdW5zaWduZWQgY2hhciAqbmV4dF9pbjsKKwl1bnNpZ25lZCBjaGFyICpuZXh0X291dDsKK30gZ2l0X3pzdHJlYW07CisKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqKTsKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdF9nemlwX29ubHkoZ2l0X3pzdHJlYW0gKik7Cit2b2lkIGdpdF9pbmZsYXRlX2VuZChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfaW5mbGF0ZShnaXRfenN0cmVhbSAqLCBpbnQgZmx1c2gpOworCit2b2lkIGdpdF9kZWZsYXRlX2luaXQoZ2l0X3pzdHJlYW0gKiwgaW50IGxldmVsKTsKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdF9nemlwKGdpdF96c3RyZWFtICosIGludCBsZXZlbCk7Cit2b2lkIGdpdF9kZWZsYXRlX2luaXRfcmF3KGdpdF96c3RyZWFtICosIGludCBsZXZlbCk7Cit2b2lkIGdpdF9kZWZsYXRlX2VuZChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfZGVmbGF0ZV9hYm9ydChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfZGVmbGF0ZV9lbmRfZ2VudGx5KGdpdF96c3RyZWFtICopOworaW50IGdpdF9kZWZsYXRlKGdpdF96c3RyZWFtICosIGludCBmbHVzaCk7Cit1bnNpZ25lZCBsb25nIGdpdF9kZWZsYXRlX2JvdW5kKGdpdF96c3RyZWFtICosIHVuc2lnbmVkIGxvbmcpOworCisjaWYgZGVmaW5lZChEVF9VTktOT1dOKSAmJiAhZGVmaW5lZChOT19EX1RZUEVfSU5fRElSRU5UKQorI2RlZmluZSBEVFlQRShkZSkJKChkZSktPmRfdHlwZSkKKyNlbHNlCisjdW5kZWYgRFRfVU5LTk9XTgorI3VuZGVmIERUX0RJUgorI3VuZGVmIERUX1JFRworI3VuZGVmIERUX0xOSworI2RlZmluZSBEVF9VTktOT1dOCTAKKyNkZWZpbmUgRFRfRElSCQkxCisjZGVmaW5lIERUX1JFRwkJMgorI2RlZmluZSBEVF9MTksJCTMKKyNkZWZpbmUgRFRZUEUoZGUpCURUX1VOS05PV04KKyNlbmRpZgorCisvKiB1bmtub3duIG1vZGUgKGltcG9zc2libGUgY29tYmluYXRpb24gU19JRklGT3xTX0lGQ0hSKSAqLworI2RlZmluZSBTX0lGSU5WQUxJRCAgICAgMDAzMDAwMAorCisvKgorICogQSAiZGlyZWN0b3J5IGxpbmsiIGlzIGEgbGluayB0byBhbm90aGVyIGdpdCBkaXJlY3RvcnkuCisgKgorICogVGhlIHZhbHVlIDAxNjAwMDAgaXMgbm90IG5vcm1hbGx5IGEgdmFsaWQgbW9kZSwgYW5kCisgKiBhbHNvIGp1c3QgaGFwcGVucyB0byBiZSBTX0lGRElSICsgU19JRkxOSworICovCisjZGVmaW5lIFNfSUZHSVRMSU5LCTAxNjAwMDAKKyNkZWZpbmUgU19JU0dJVExJTksobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZHSVRMSU5LKQorCisvKgorICogU29tZSBtb2RlIGJpdHMgYXJlIGFsc28gdXNlZCBpbnRlcm5hbGx5IGZvciBjb21wdXRhdGlvbnMuCisgKgorICogVGhleSAqbXVzdCogbm90IG92ZXJsYXAgd2l0aCBhbnkgdmFsaWQgbW9kZXMsIGFuZCB0aGV5ICptdXN0KiBub3QgYmUgZW1pdHRlZAorICogdG8gb3V0c2lkZSB3b3JsZCAtIGkuZS4gYXBwZWFyIG9uIGRpc2sgb3IgbmV0d29yay4gSW4gb3RoZXIgd29yZHMsIGl0J3MganVzdAorICogdGVtcG9yYXJ5IGZpZWxkcywgd2hpY2ggd2UgaW50ZXJuYWxseSB1c2UsIGJ1dCB0aGV5IGhhdmUgdG8gc3RheSBpbi1ob3VzZS4KKyAqCisgKiAoIHN1Y2ggYXBwcm9hY2ggaXMgdmFsaWQsIGFzIHN0YW5kYXJkIFNfSUYqIGZpdHMgaW50byAxNiBiaXRzLCBhbmQgaW4gR2l0CisgKiAgIGNvZGViYXNlIG1vZGUgaXMgYHVuc2lnbmVkIGludGAgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBhdCBsZWFzdCAzMiBiaXRzICkKKyAqLworCisvKiB1c2VkIGludGVybmFsbHkgaW4gdHJlZS1kaWZmICovCisjZGVmaW5lIFNfRElGRlRSRUVfSUZYTUlOX05FUQkweDgwMDAwMDAwCisKKworLyoKKyAqIEludGVuc2l2ZSByZXNlYXJjaCBvdmVyIHRoZSBjb3Vyc2Ugb2YgbWFueSB5ZWFycyBoYXMgc2hvd24gdGhhdAorICogcG9ydCA5NDE4IGlzIHRvdGFsbHkgdW51c2VkIGJ5IGFueXRoaW5nIGVsc2UuIE9yCisgKgorICoJWW91ciBzZWFyY2ggLSAicG9ydCA5NDE4IiAtIGRpZCBub3QgbWF0Y2ggYW55IGRvY3VtZW50cy4KKyAqCisgKiBhcyB3d3cuZ29vZ2xlLmNvbSBwdXRzIGl0LgorICoKKyAqIFRoaXMgcG9ydCBoYXMgYmVlbiBwcm9wZXJseSBhc3NpZ25lZCBmb3IgZ2l0IHVzZSBieSBJQU5BOgorICogZ2l0IChBc3NpZ25lZC05NDE4KSBbSTA2LTA1MDcyOC0wMDAxXS4KKyAqCisgKglnaXQgIDk0MTgvdGNwICAgZ2l0IHBhY2sgdHJhbnNmZXIgc2VydmljZQorICoJZ2l0ICA5NDE4L3VkcCAgIGdpdCBwYWNrIHRyYW5zZmVyIHNlcnZpY2UKKyAqCisgKiB3aXRoIExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4gYXMgdGhlIHBvaW50IG9mCisgKiBjb250YWN0LiBTZXB0ZW1iZXIgMjAwNS4KKyAqCisgKiBTZWUgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9wb3J0LW51bWJlcnMKKyAqLworI2RlZmluZSBERUZBVUxUX0dJVF9QT1JUIDk0MTgKKworLyoKKyAqIEJhc2ljIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGRpcmVjdG9yeSBjYWNoZQorICovCisKKyNkZWZpbmUgQ0FDSEVfU0lHTkFUVVJFIDB4NDQ0OTUyNDMJLyogIkRJUkMiICovCitzdHJ1Y3QgY2FjaGVfaGVhZGVyIHsKKwl1aW50MzJfdCBoZHJfc2lnbmF0dXJlOworCXVpbnQzMl90IGhkcl92ZXJzaW9uOworCXVpbnQzMl90IGhkcl9lbnRyaWVzOworfTsKKworI2RlZmluZSBJTkRFWF9GT1JNQVRfTEIgMgorI2RlZmluZSBJTkRFWF9GT1JNQVRfVUIgNAorCisvKgorICogVGhlICJjYWNoZV90aW1lIiBpcyBqdXN0IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUKKyAqIHRpbWUuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIGl0IG92ZXJmbG93cyAtIHdlIG9ubHkKKyAqIGNoZWNrIGl0IGZvciBlcXVhbGl0eSBpbiB0aGUgMzIgYml0cyB3ZSBzYXZlLgorICovCitzdHJ1Y3QgY2FjaGVfdGltZSB7CisJdWludDMyX3Qgc2VjOworCXVpbnQzMl90IG5zZWM7Cit9OworCitzdHJ1Y3Qgc3RhdF9kYXRhIHsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBzZF9jdGltZTsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBzZF9tdGltZTsKKwl1bnNpZ25lZCBpbnQgc2RfZGV2OworCXVuc2lnbmVkIGludCBzZF9pbm87CisJdW5zaWduZWQgaW50IHNkX3VpZDsKKwl1bnNpZ25lZCBpbnQgc2RfZ2lkOworCXVuc2lnbmVkIGludCBzZF9zaXplOworfTsKKworc3RydWN0IGNhY2hlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IHN0YXRfZGF0YSBjZV9zdGF0X2RhdGE7CisJdW5zaWduZWQgaW50IGNlX21vZGU7CisJdW5zaWduZWQgaW50IGNlX2ZsYWdzOworCXVuc2lnbmVkIGludCBtZW1fcG9vbF9hbGxvY2F0ZWQ7CisJdW5zaWduZWQgaW50IGNlX25hbWVsZW47CisJdW5zaWduZWQgaW50IGluZGV4OwkvKiBmb3IgbGluayBleHRlbnNpb24gKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKKyNkZWZpbmUgQ0VfU1RBR0VNQVNLICgweDMwMDApCisjZGVmaW5lIENFX0VYVEVOREVEICAoMHg0MDAwKQorI2RlZmluZSBDRV9WQUxJRCAgICAgKDB4ODAwMCkKKyNkZWZpbmUgQ0VfU1RBR0VTSElGVCAxMgorCisvKgorICogUmFuZ2UgMHhGRkZGMEZGRiBpbiBjZV9mbGFncyBpcyBkaXZpZGVkIGludG8KKyAqIHR3byBwYXJ0czogaW4tbWVtb3J5IGZsYWdzIGFuZCBvbi1kaXNrIG9uZXMuCisgKiBGbGFncyBpbiBDRV9FWFRFTkRFRF9GTEFHUyB3aWxsIGdldCBzYXZlZCBvbi1kaXNrCisgKiBpZiB5b3Ugd2FudCB0byBzYXZlIGEgbmV3IGZsYWcsIGFkZCBpdCBpbgorICogQ0VfRVhURU5ERURfRkxBR1MKKyAqCisgKiBJbi1tZW1vcnkgb25seSBmbGFncworICovCisjZGVmaW5lIENFX1VQREFURSAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBDRV9SRU1PVkUgICAgICAgICAgICAoMSA8PCAxNykKKyNkZWZpbmUgQ0VfVVBUT0RBVEUgICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIENFX0FEREVEICAgICAgICAgICAgICgxIDw8IDE5KQorCisjZGVmaW5lIENFX0hBU0hFRCAgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBDRV9GU01PTklUT1JfVkFMSUQgICAoMSA8PCAyMSkKKyNkZWZpbmUgQ0VfV1RfUkVNT1ZFICAgICAgICAgKDEgPDwgMjIpIC8qIHJlbW92ZSBpbiB3b3JrIGRpcmVjdG9yeSAqLworI2RlZmluZSBDRV9DT05GTElDVEVEICAgICAgICAoMSA8PCAyMykKKworI2RlZmluZSBDRV9VTlBBQ0tFRCAgICAgICAgICAoMSA8PCAyNCkKKyNkZWZpbmUgQ0VfTkVXX1NLSVBfV09SS1RSRUUgKDEgPDwgMjUpCisKKy8qIHVzZWQgdG8gdGVtcG9yYXJpbHkgbWFyayBwYXRocyBtYXRjaGVkIGJ5IHBhdGhzcGVjcyAqLworI2RlZmluZSBDRV9NQVRDSEVEICAgICAgICAgICAoMSA8PCAyNikKKworI2RlZmluZSBDRV9VUERBVEVfSU5fQkFTRSAgICAoMSA8PCAyNykKKyNkZWZpbmUgQ0VfU1RSSVBfTkFNRSAgICAgICAgKDEgPDwgMjgpCisKKy8qCisgKiBFeHRlbmRlZCBvbi1kaXNrIGZsYWdzCisgKi8KKyNkZWZpbmUgQ0VfSU5URU5UX1RPX0FERCAgICAgKDEgPDwgMjkpCisjZGVmaW5lIENFX1NLSVBfV09SS1RSRUUgICAgICgxIDw8IDMwKQorLyogQ0VfRVhURU5ERUQyIGlzIGZvciBmdXR1cmUgZXh0ZW5zaW9uICovCisjZGVmaW5lIENFX0VYVEVOREVEMiAgICAgICAgICgxVSA8PCAzMSkKKworI2RlZmluZSBDRV9FWFRFTkRFRF9GTEFHUyAoQ0VfSU5URU5UX1RPX0FERCB8IENFX1NLSVBfV09SS1RSRUUpCisKKy8qCisgKiBTYWZlZ3VhcmQgdG8gYXZvaWQgc2F2aW5nIHdyb25nIGZsYWdzOgorICogIC0gQ0VfRVhURU5ERUQyIHdvbid0IGdldCBzYXZlZCB1bnRpbCBpdHMgc2VtYW50aWMgaXMga25vd24KKyAqICAtIEJpdHMgaW4gMHgwMDAwRkZGRiBoYXZlIGJlZW4gc2F2ZWQgaW4gY2VfZmxhZ3MgYWxyZWFkeQorICogIC0gQml0cyBpbiAweDAwM0YwMDAwIGFyZSBjdXJyZW50bHkgaW4tbWVtb3J5IGZsYWdzCisgKi8KKyNpZiBDRV9FWFRFTkRFRF9GTEFHUyAmIDB4ODAzRkZGRkYKKyNlcnJvciAiQ0VfRVhURU5ERURfRkxBR1Mgb3V0IG9mIHJhbmdlIgorI2VuZGlmCisKKy8qIEZvcndhcmQgc3RydWN0dXJlIGRlY2xzICovCitzdHJ1Y3QgcGF0aHNwZWM7CitzdHJ1Y3QgY2hpbGRfcHJvY2VzczsKK3N0cnVjdCB0cmVlOworCisvKgorICogQ29weSB0aGUgc2hhMSBhbmQgc3RhdCBzdGF0ZSBvZiBhIGNhY2hlIGVudHJ5IGZyb20gb25lIHRvCisgKiBhbm90aGVyLiBCdXQgd2UgbmV2ZXIgY2hhbmdlIHRoZSBuYW1lLCBvciB0aGUgaGFzaCBzdGF0ZSEKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpkc3QsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjKQoreworCXVuc2lnbmVkIGludCBzdGF0ZSA9IGRzdC0+Y2VfZmxhZ3MgJiBDRV9IQVNIRUQ7CisJaW50IG1lbV9wb29sX2FsbG9jYXRlZCA9IGRzdC0+bWVtX3Bvb2xfYWxsb2NhdGVkOworCisJLyogRG9uJ3QgY29weSBoYXNoIGNoYWluIGFuZCBuYW1lICovCisJbWVtY3B5KCZkc3QtPmNlX3N0YXRfZGF0YSwgJnNyYy0+Y2Vfc3RhdF9kYXRhLAorCQkJb2Zmc2V0b2Yoc3RydWN0IGNhY2hlX2VudHJ5LCBuYW1lKSAtCisJCQlvZmZzZXRvZihzdHJ1Y3QgY2FjaGVfZW50cnksIGNlX3N0YXRfZGF0YSkpOworCisJLyogUmVzdG9yZSB0aGUgaGFzaCBzdGF0ZSAqLworCWRzdC0+Y2VfZmxhZ3MgPSAoZHN0LT5jZV9mbGFncyAmIH5DRV9IQVNIRUQpIHwgc3RhdGU7CisKKwkvKiBSZXN0b3JlIHRoZSBtZW1fcG9vbF9hbGxvY2F0ZWQgZmxhZyAqLworCWRzdC0+bWVtX3Bvb2xfYWxsb2NhdGVkID0gbWVtX3Bvb2xfYWxsb2NhdGVkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNyZWF0ZV9jZV9mbGFncyh1bnNpZ25lZCBzdGFnZSkKK3sKKwlyZXR1cm4gKHN0YWdlIDw8IENFX1NUQUdFU0hJRlQpOworfQorCisjZGVmaW5lIGNlX25hbWVsZW4oY2UpICgoY2UpLT5jZV9uYW1lbGVuKQorI2RlZmluZSBjZV9zaXplKGNlKSBjYWNoZV9lbnRyeV9zaXplKGNlX25hbWVsZW4oY2UpKQorI2RlZmluZSBjZV9zdGFnZShjZSkgKChDRV9TVEFHRU1BU0sgJiAoY2UpLT5jZV9mbGFncykgPj4gQ0VfU1RBR0VTSElGVCkKKyNkZWZpbmUgY2VfdXB0b2RhdGUoY2UpICgoY2UpLT5jZV9mbGFncyAmIENFX1VQVE9EQVRFKQorI2RlZmluZSBjZV9za2lwX3dvcmt0cmVlKGNlKSAoKGNlKS0+Y2VfZmxhZ3MgJiBDRV9TS0lQX1dPUktUUkVFKQorI2RlZmluZSBjZV9tYXJrX3VwdG9kYXRlKGNlKSAoKGNlKS0+Y2VfZmxhZ3MgfD0gQ0VfVVBUT0RBVEUpCisjZGVmaW5lIGNlX2ludGVudF90b19hZGQoY2UpICgoY2UpLT5jZV9mbGFncyAmIENFX0lOVEVOVF9UT19BREQpCisKKyNkZWZpbmUgY2VfcGVybWlzc2lvbnMobW9kZSkgKCgobW9kZSkgJiAwMTAwKSA/IDA3NTUgOiAwNjQ0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3JlYXRlX2NlX21vZGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKFNfSVNMTksobW9kZSkpCisJCXJldHVybiBTX0lGTE5LOworCWlmIChTX0lTRElSKG1vZGUpIHx8IFNfSVNHSVRMSU5LKG1vZGUpKQorCQlyZXR1cm4gU19JRkdJVExJTks7CisJcmV0dXJuIFNfSUZSRUcgfCBjZV9wZXJtaXNzaW9ucyhtb2RlKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNlX21vZGVfZnJvbV9zdGF0KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJZXh0ZXJuIGludCB0cnVzdF9leGVjdXRhYmxlX2JpdCwgaGFzX3N5bWxpbmtzOworCWlmICghaGFzX3N5bWxpbmtzICYmIFNfSVNSRUcobW9kZSkgJiYKKwkgICAgY2UgJiYgU19JU0xOSyhjZS0+Y2VfbW9kZSkpCisJCXJldHVybiBjZS0+Y2VfbW9kZTsKKwlpZiAoIXRydXN0X2V4ZWN1dGFibGVfYml0ICYmIFNfSVNSRUcobW9kZSkpIHsKKwkJaWYgKGNlICYmIFNfSVNSRUcoY2UtPmNlX21vZGUpKQorCQkJcmV0dXJuIGNlLT5jZV9tb2RlOworCQlyZXR1cm4gY3JlYXRlX2NlX21vZGUoMDY2Nik7CisJfQorCXJldHVybiBjcmVhdGVfY2VfbW9kZShtb2RlKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGNlX3RvX2R0eXBlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJdW5zaWduZWQgY2VfbW9kZSA9IG50b2hsKGNlLT5jZV9tb2RlKTsKKwlpZiAoU19JU1JFRyhjZV9tb2RlKSkKKwkJcmV0dXJuIERUX1JFRzsKKwllbHNlIGlmIChTX0lTRElSKGNlX21vZGUpIHx8IFNfSVNHSVRMSU5LKGNlX21vZGUpKQorCQlyZXR1cm4gRFRfRElSOworCWVsc2UgaWYgKFNfSVNMTksoY2VfbW9kZSkpCisJCXJldHVybiBEVF9MTks7CisJZWxzZQorCQlyZXR1cm4gRFRfVU5LTk9XTjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbm9uX21vZGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKFNfSVNSRUcobW9kZSkpCisJCXJldHVybiBTX0lGUkVHIHwgY2VfcGVybWlzc2lvbnMobW9kZSk7CisJaWYgKFNfSVNMTksobW9kZSkpCisJCXJldHVybiBTX0lGTE5LOworCWlmIChTX0lTRElSKG1vZGUpKQorCQlyZXR1cm4gU19JRkRJUjsKKwlyZXR1cm4gU19JRkdJVExJTks7Cit9CisKKyNkZWZpbmUgY2FjaGVfZW50cnlfc2l6ZShsZW4pIChvZmZzZXRvZihzdHJ1Y3QgY2FjaGVfZW50cnksbmFtZSkgKyAobGVuKSArIDEpCisKKyNkZWZpbmUgU09NRVRISU5HX0NIQU5HRUQJKDEgPDwgMCkgLyogdW5jbGFzc2lmaWVkIGNoYW5nZXMgZ28gaGVyZSAqLworI2RlZmluZSBDRV9FTlRSWV9DSEFOR0VECSgxIDw8IDEpCisjZGVmaW5lIENFX0VOVFJZX1JFTU9WRUQJKDEgPDwgMikKKyNkZWZpbmUgQ0VfRU5UUllfQURERUQJCSgxIDw8IDMpCisjZGVmaW5lIFJFU09MVkVfVU5ET19DSEFOR0VECSgxIDw8IDQpCisjZGVmaW5lIENBQ0hFX1RSRUVfQ0hBTkdFRAkoMSA8PCA1KQorI2RlZmluZSBTUExJVF9JTkRFWF9PUkRFUkVECSgxIDw8IDYpCisjZGVmaW5lIFVOVFJBQ0tFRF9DSEFOR0VECSgxIDw8IDcpCisjZGVmaW5lIEZTTU9OSVRPUl9DSEFOR0VECSgxIDw8IDgpCisKK3N0cnVjdCBzcGxpdF9pbmRleDsKK3N0cnVjdCB1bnRyYWNrZWRfY2FjaGU7CitzdHJ1Y3QgcHJvZ3Jlc3M7CisKK3N0cnVjdCBpbmRleF9zdGF0ZSB7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGU7CisJdW5zaWduZWQgaW50IHZlcnNpb247CisJdW5zaWduZWQgaW50IGNhY2hlX25yLCBjYWNoZV9hbGxvYywgY2FjaGVfY2hhbmdlZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kbzsKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqY2FjaGVfdHJlZTsKKwlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNwbGl0X2luZGV4OworCXN0cnVjdCBjYWNoZV90aW1lIHRpbWVzdGFtcDsKKwl1bnNpZ25lZCBuYW1lX2hhc2hfaW5pdGlhbGl6ZWQgOiAxLAorCQkgaW5pdGlhbGl6ZWQgOiAxLAorCQkgZHJvcF9jYWNoZV90cmVlIDogMSwKKwkJIHVwZGF0ZWRfd29ya2RpciA6IDEsCisJCSB1cGRhdGVkX3NraXB3b3JrdHJlZSA6IDEsCisJCSBmc21vbml0b3JfaGFzX3J1bl9vbmNlIDogMTsKKwlzdHJ1Y3QgaGFzaG1hcCBuYW1lX2hhc2g7CisJc3RydWN0IGhhc2htYXAgZGlyX2hhc2g7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdW50cmFja2VkOworCWNoYXIgKmZzbW9uaXRvcl9sYXN0X3VwZGF0ZTsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmZzbW9uaXRvcl9kaXJ0eTsKKwlzdHJ1Y3QgbWVtX3Bvb2wgKmNlX21lbV9wb29sOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7Cit9OworCisvKiBOYW1lIGhhc2hpbmcgKi8KK2ludCB0ZXN0X2xhenlfaW5pdF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCB0cnlfdGhyZWFkZWQpOwordm9pZCBhZGRfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKTsKK3ZvaWQgcmVtb3ZlX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSk7Cit2b2lkIGZyZWVfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKKworCisvKiBDYWNoZSBlbnRyeSBjcmVhdGlvbiBhbmQgY2xlYW51cCAqLworCisvKgorICogQ3JlYXRlIGNhY2hlX2VudHJ5IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIHNwZWNpZmllZCBpbmRleC4gQ2FsbGVyCisgKiBpcyByZXNwb25zaWJsZSBmb3IgZGlzY2FyZGluZyB0aGUgY2FjaGVfZW50cnkgd2l0aAorICogYGRpc2NhcmRfY2FjaGVfZW50cnlgLgorICovCitzdHJ1Y3QgY2FjaGVfZW50cnkgKm1ha2VfY2FjaGVfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICBpbnQgc3RhZ2UsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVmcmVzaF9vcHRpb25zKTsKKworc3RydWN0IGNhY2hlX2VudHJ5ICptYWtlX2VtcHR5X2NhY2hlX2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgICBzaXplX3QgbmFtZV9sZW4pOworCisvKgorICogQ3JlYXRlIGEgY2FjaGVfZW50cnkgdGhhdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgYWRkZWQgdG8gYW4gaW5kZXguCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRpc2NhcmRpbmcgdGhlIGNhY2hlX2VudHJ5CisgKiB3aXRoIGBkaXNjYXJkX2NhY2hlX2VudHJ5YC4KKyAqLworc3RydWN0IGNhY2hlX2VudHJ5ICptYWtlX3RyYW5zaWVudF9jYWNoZV9lbnRyeSh1bnNpZ25lZCBpbnQgbW9kZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgICAgICBpbnQgc3RhZ2UpOworCitzdHJ1Y3QgY2FjaGVfZW50cnkgKm1ha2VfZW1wdHlfdHJhbnNpZW50X2NhY2hlX2VudHJ5KHNpemVfdCBuYW1lX2xlbik7CisKKy8qCisgKiBEaXNjYXJkIGNhY2hlIGVudHJ5LgorICovCit2b2lkIGRpc2NhcmRfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSk7CisKKy8qCisgKiBDaGVjayBjb25maWd1cmF0aW9uIGlmIHdlIHNob3VsZCBwZXJmb3JtIGV4dHJhIHZhbGlkYXRpb24gb24gY2FjaGUKKyAqIGVudHJpZXMuCisgKi8KK2ludCBzaG91bGRfdmFsaWRhdGVfY2FjaGVfZW50cmllcyh2b2lkKTsKKworLyoKKyAqIER1cGxpY2F0ZSBhIGNhY2hlX2VudHJ5LiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBuZXcgZW50cnkgZnJvbSBhCisgKiBtZW1vcnlfcG9vbC4gVGFrZXMgaW50byBhY2NvdW50IGNhY2hlX2VudHJ5IGZpZWxkcyB0aGF0IGFyZSBtZWFudAorICogZm9yIG1hbmFnaW5nIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIG9mIHRoZSBjYWNoZV9lbnRyeS4KKyAqLworc3RydWN0IGNhY2hlX2VudHJ5ICpkdXBfY2FjaGVfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisvKgorICogVmFsaWRhdGUgdGhlIGNhY2hlIGVudHJpZXMgaW4gdGhlIGluZGV4LiAgVGhpcyBpcyBhbiBpbnRlcm5hbAorICogY29uc2lzdGVuY3kgY2hlY2sgdGhhdCB0aGUgY2FjaGVfZW50cnkgc3RydWN0cyBhcmUgYWxsb2NhdGVkIGZyb20KKyAqIHRoZSBleHBlY3RlZCBtZW1vcnkgcG9vbC4KKyAqLwordm9pZCB2YWxpZGF0ZV9jYWNoZV9lbnRyaWVzKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKKworI2lmZGVmIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKK2V4dGVybiBzdHJ1Y3QgaW5kZXhfc3RhdGUgdGhlX2luZGV4OworCisjZGVmaW5lIGFjdGl2ZV9jYWNoZSAodGhlX2luZGV4LmNhY2hlKQorI2RlZmluZSBhY3RpdmVfbnIgKHRoZV9pbmRleC5jYWNoZV9ucikKKyNkZWZpbmUgYWN0aXZlX2FsbG9jICh0aGVfaW5kZXguY2FjaGVfYWxsb2MpCisjZGVmaW5lIGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICh0aGVfaW5kZXguY2FjaGVfY2hhbmdlZCkKKyNkZWZpbmUgYWN0aXZlX2NhY2hlX3RyZWUgKHRoZV9pbmRleC5jYWNoZV90cmVlKQorCisjZGVmaW5lIHJlYWRfY2FjaGUoKSByZXBvX3JlYWRfaW5kZXgodGhlX3JlcG9zaXRvcnkpCisjZGVmaW5lIHJlYWRfY2FjaGVfZnJvbShwYXRoKSByZWFkX2luZGV4X2Zyb20oJnRoZV9pbmRleCwgKHBhdGgpLCAoZ2V0X2dpdF9kaXIoKSkpCisjZGVmaW5lIHJlYWRfY2FjaGVfcHJlbG9hZChwYXRoc3BlYykgcmVwb19yZWFkX2luZGV4X3ByZWxvYWQodGhlX3JlcG9zaXRvcnksIChwYXRoc3BlYyksIDApCisjZGVmaW5lIGlzX2NhY2hlX3VuYm9ybigpIGlzX2luZGV4X3VuYm9ybigmdGhlX2luZGV4KQorI2RlZmluZSByZWFkX2NhY2hlX3VubWVyZ2VkKCkgcmVwb19yZWFkX2luZGV4X3VubWVyZ2VkKHRoZV9yZXBvc2l0b3J5KQorI2RlZmluZSBkaXNjYXJkX2NhY2hlKCkgZGlzY2FyZF9pbmRleCgmdGhlX2luZGV4KQorI2RlZmluZSB1bm1lcmdlZF9jYWNoZSgpIHVubWVyZ2VkX2luZGV4KCZ0aGVfaW5kZXgpCisjZGVmaW5lIGNhY2hlX25hbWVfcG9zKG5hbWUsIG5hbWVsZW4pIGluZGV4X25hbWVfcG9zKCZ0aGVfaW5kZXgsKG5hbWUpLChuYW1lbGVuKSkKKyNkZWZpbmUgYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb24pIGFkZF9pbmRleF9lbnRyeSgmdGhlX2luZGV4LCAoY2UpLCAob3B0aW9uKSkKKyNkZWZpbmUgcmVuYW1lX2NhY2hlX2VudHJ5X2F0KHBvcywgbmV3X25hbWUpIHJlbmFtZV9pbmRleF9lbnRyeV9hdCgmdGhlX2luZGV4LCAocG9zKSwgKG5ld19uYW1lKSkKKyNkZWZpbmUgcmVtb3ZlX2NhY2hlX2VudHJ5X2F0KHBvcykgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KCZ0aGVfaW5kZXgsIChwb3MpKQorI2RlZmluZSByZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpIHJlbW92ZV9maWxlX2Zyb21faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpKQorI2RlZmluZSBhZGRfdG9fY2FjaGUocGF0aCwgc3QsIGZsYWdzKSBhZGRfdG9faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpLCAoc3QpLCAoZmxhZ3MpKQorI2RlZmluZSBhZGRfZmlsZV90b19jYWNoZShwYXRoLCBmbGFncykgYWRkX2ZpbGVfdG9faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpLCAoZmxhZ3MpKQorI2RlZmluZSBjaG1vZF9jYWNoZV9lbnRyeShjZSwgZmxpcCkgY2htb2RfaW5kZXhfZW50cnkoJnRoZV9pbmRleCwgKGNlKSwgKGZsaXApKQorI2RlZmluZSByZWZyZXNoX2NhY2hlKGZsYWdzKSByZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIChmbGFncyksIE5VTEwsIE5VTEwsIE5VTEwpCisjZGVmaW5lIHJlZnJlc2hfYW5kX3dyaXRlX2NhY2hlKHJlZnJlc2hfZmxhZ3MsIHdyaXRlX2ZsYWdzLCBnZW50bGUpIHJlcG9fcmVmcmVzaF9hbmRfd3JpdGVfaW5kZXgodGhlX3JlcG9zaXRvcnksIChyZWZyZXNoX2ZsYWdzKSwgKHdyaXRlX2ZsYWdzKSwgKGdlbnRsZSksIE5VTEwsIE5VTEwsIE5VTEwpCisjZGVmaW5lIGNlX21hdGNoX3N0YXQoY2UsIHN0LCBvcHRpb25zKSBpZV9tYXRjaF9zdGF0KCZ0aGVfaW5kZXgsIChjZSksIChzdCksIChvcHRpb25zKSkKKyNkZWZpbmUgY2VfbW9kaWZpZWQoY2UsIHN0LCBvcHRpb25zKSBpZV9tb2RpZmllZCgmdGhlX2luZGV4LCAoY2UpLCAoc3QpLCAob3B0aW9ucykpCisjZGVmaW5lIGNhY2hlX2Rpcl9leGlzdHMobmFtZSwgbmFtZWxlbikgaW5kZXhfZGlyX2V4aXN0cygmdGhlX2luZGV4LCAobmFtZSksIChuYW1lbGVuKSkKKyNkZWZpbmUgY2FjaGVfZmlsZV9leGlzdHMobmFtZSwgbmFtZWxlbiwgaWduY2FzZSkgaW5kZXhfZmlsZV9leGlzdHMoJnRoZV9pbmRleCwgKG5hbWUpLCAobmFtZWxlbiksIChpZ25jYXNlKSkKKyNkZWZpbmUgY2FjaGVfbmFtZV9pc19vdGhlcihuYW1lLCBuYW1lbGVuKSBpbmRleF9uYW1lX2lzX290aGVyKCZ0aGVfaW5kZXgsIChuYW1lKSwgKG5hbWVsZW4pKQorI2RlZmluZSByZXNvbHZlX3VuZG9fY2xlYXIoKSByZXNvbHZlX3VuZG9fY2xlYXJfaW5kZXgoJnRoZV9pbmRleCkKKyNkZWZpbmUgdW5tZXJnZV9jYWNoZV9lbnRyeV9hdChhdCkgdW5tZXJnZV9pbmRleF9lbnRyeV9hdCgmdGhlX2luZGV4LCBhdCkKKyNkZWZpbmUgdW5tZXJnZV9jYWNoZShwYXRoc3BlYykgdW5tZXJnZV9pbmRleCgmdGhlX2luZGV4LCBwYXRoc3BlYykKKyNkZWZpbmUgcmVhZF9ibG9iX2RhdGFfZnJvbV9jYWNoZShwYXRoLCBzeikgcmVhZF9ibG9iX2RhdGFfZnJvbV9pbmRleCgmdGhlX2luZGV4LCAocGF0aCksIChzeikpCisjZGVmaW5lIGhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgZmxhZ3MpIHJlcG9faG9sZF9sb2NrZWRfaW5kZXgodGhlX3JlcG9zaXRvcnksIChsb2NrX2ZpbGUpLCAoZmxhZ3MpKQorI2VuZGlmCisKKyNkZWZpbmUgVFlQRV9CSVRTIDMKKworLyoKKyAqIFZhbHVlcyBpbiB0aGlzIGVudW0gKGV4Y2VwdCB0aG9zZSBvdXRzaWRlIHRoZSAzIGJpdCByYW5nZSkgYXJlIHBhcnQKKyAqIG9mIHBhY2sgZmlsZSBmb3JtYXQuIFNlZSBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWZvcm1hdC50eHQKKyAqIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCitlbnVtIG9iamVjdF90eXBlIHsKKwlPQkpfQkFEID0gLTEsCisJT0JKX05PTkUgPSAwLAorCU9CSl9DT01NSVQgPSAxLAorCU9CSl9UUkVFID0gMiwKKwlPQkpfQkxPQiA9IDMsCisJT0JKX1RBRyA9IDQsCisJLyogNSBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworCU9CSl9PRlNfREVMVEEgPSA2LAorCU9CSl9SRUZfREVMVEEgPSA3LAorCU9CSl9BTlksCisJT0JKX01BWAorfTsKKworc3RhdGljIGlubGluZSBlbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlKHVuc2lnbmVkIGludCBtb2RlKQoreworCXJldHVybiBTX0lTRElSKG1vZGUpID8gT0JKX1RSRUUgOgorCQlTX0lTR0lUTElOSyhtb2RlKSA/IE9CSl9DT01NSVQgOgorCQlPQkpfQkxPQjsKK30KKworLyogRG91YmxlLWNoZWNrIGxvY2FsX3JlcG9fZW52IGJlbG93IGlmIHlvdSBhZGQgdG8gdGhpcyBsaXN0LiAqLworI2RlZmluZSBHSVRfRElSX0VOVklST05NRU5UICJHSVRfRElSIgorI2RlZmluZSBHSVRfQ09NTU9OX0RJUl9FTlZJUk9OTUVOVCAiR0lUX0NPTU1PTl9ESVIiCisjZGVmaW5lIEdJVF9OQU1FU1BBQ0VfRU5WSVJPTk1FTlQgIkdJVF9OQU1FU1BBQ0UiCisjZGVmaW5lIEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQgIkdJVF9XT1JLX1RSRUUiCisjZGVmaW5lIEdJVF9QUkVGSVhfRU5WSVJPTk1FTlQgIkdJVF9QUkVGSVgiCisjZGVmaW5lIEdJVF9TVVBFUl9QUkVGSVhfRU5WSVJPTk1FTlQgIkdJVF9JTlRFUk5BTF9TVVBFUl9QUkVGSVgiCisjZGVmaW5lIERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVCAiLmdpdCIKKyNkZWZpbmUgREJfRU5WSVJPTk1FTlQgIkdJVF9PQkpFQ1RfRElSRUNUT1JZIgorI2RlZmluZSBJTkRFWF9FTlZJUk9OTUVOVCAiR0lUX0lOREVYX0ZJTEUiCisjZGVmaW5lIEdSQUZUX0VOVklST05NRU5UICJHSVRfR1JBRlRfRklMRSIKKyNkZWZpbmUgR0lUX1NIQUxMT1dfRklMRV9FTlZJUk9OTUVOVCAiR0lUX1NIQUxMT1dfRklMRSIKKyNkZWZpbmUgVEVNUExBVEVfRElSX0VOVklST05NRU5UICJHSVRfVEVNUExBVEVfRElSIgorI2RlZmluZSBDT05GSUdfRU5WSVJPTk1FTlQgIkdJVF9DT05GSUciCisjZGVmaW5lIENPTkZJR19EQVRBX0VOVklST05NRU5UICJHSVRfQ09ORklHX1BBUkFNRVRFUlMiCisjZGVmaW5lIEVYRUNfUEFUSF9FTlZJUk9OTUVOVCAiR0lUX0VYRUNfUEFUSCIKKyNkZWZpbmUgQ0VJTElOR19ESVJFQ1RPUklFU19FTlZJUk9OTUVOVCAiR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMiCisjZGVmaW5lIE5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCAiR0lUX05PX1JFUExBQ0VfT0JKRUNUUyIKKyNkZWZpbmUgR0lUX1JFUExBQ0VfUkVGX0JBU0VfRU5WSVJPTk1FTlQgIkdJVF9SRVBMQUNFX1JFRl9CQVNFIgorI2RlZmluZSBHSVRBVFRSSUJVVEVTX0ZJTEUgIi5naXRhdHRyaWJ1dGVzIgorI2RlZmluZSBJTkZPQVRUUklCVVRFU19GSUxFICJpbmZvL2F0dHJpYnV0ZXMiCisjZGVmaW5lIEFUVFJJQlVURV9NQUNST19QUkVGSVggIlthdHRyXSIKKyNkZWZpbmUgR0lUTU9EVUxFU19GSUxFICIuZ2l0bW9kdWxlcyIKKyNkZWZpbmUgR0lUTU9EVUxFU19JTkRFWCAiOi5naXRtb2R1bGVzIgorI2RlZmluZSBHSVRNT0RVTEVTX0hFQUQgIkhFQUQ6LmdpdG1vZHVsZXMiCisjZGVmaW5lIEdJVF9OT1RFU19SRUZfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19SRUYiCisjZGVmaW5lIEdJVF9OT1RFU19ERUZBVUxUX1JFRiAicmVmcy9ub3Rlcy9jb21taXRzIgorI2RlZmluZSBHSVRfTk9URVNfRElTUExBWV9SRUZfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19ESVNQTEFZX1JFRiIKKyNkZWZpbmUgR0lUX05PVEVTX1JFV1JJVEVfUkVGX0VOVklST05NRU5UICJHSVRfTk9URVNfUkVXUklURV9SRUYiCisjZGVmaW5lIEdJVF9OT1RFU19SRVdSSVRFX01PREVfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19SRVdSSVRFX01PREUiCisjZGVmaW5lIEdJVF9MSVRFUkFMX1BBVEhTUEVDU19FTlZJUk9OTUVOVCAiR0lUX0xJVEVSQUxfUEFUSFNQRUNTIgorI2RlZmluZSBHSVRfR0xPQl9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQgIkdJVF9HTE9CX1BBVEhTUEVDUyIKKyNkZWZpbmUgR0lUX05PR0xPQl9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQgIkdJVF9OT0dMT0JfUEFUSFNQRUNTIgorI2RlZmluZSBHSVRfSUNBU0VfUEFUSFNQRUNTX0VOVklST05NRU5UICJHSVRfSUNBU0VfUEFUSFNQRUNTIgorI2RlZmluZSBHSVRfUVVBUkFOVElORV9FTlZJUk9OTUVOVCAiR0lUX1FVQVJBTlRJTkVfUEFUSCIKKyNkZWZpbmUgR0lUX09QVElPTkFMX0xPQ0tTX0VOVklST05NRU5UICJHSVRfT1BUSU9OQUxfTE9DS1MiCisjZGVmaW5lIEdJVF9URVhUX0RPTUFJTl9ESVJfRU5WSVJPTk1FTlQgIkdJVF9URVhURE9NQUlORElSIgorCisvKgorICogRW52aXJvbm1lbnQgdmFyaWFibGUgdXNlZCBpbiBoYW5kc2hha2luZyB0aGUgd2lyZSBwcm90b2NvbC4KKyAqIENvbnRhaW5zIGEgY29sb24gJzonIHNlcGFyYXRlZCBsaXN0IG9mIGtleXMgd2l0aCBvcHRpb25hbCB2YWx1ZXMKKyAqICdrZXlbPXZhbHVlXScuICBQcmVzZW5jZSBvZiB1bmtub3duIGtleXMgYW5kIHZhbHVlcyBtdXN0IGJlCisgKiBpZ25vcmVkLgorICovCisjZGVmaW5lIEdJVF9QUk9UT0NPTF9FTlZJUk9OTUVOVCAiR0lUX1BST1RPQ09MIgorLyogSFRUUCBoZWFkZXIgdXNlZCB0byBoYW5kc2hha2UgdGhlIHdpcmUgcHJvdG9jb2wgKi8KKyNkZWZpbmUgR0lUX1BST1RPQ09MX0hFQURFUiAiR2l0LVByb3RvY29sIgorCisvKgorICogVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBleHBlY3RlZCB0byBjb250YWluIGEgYm9vbGVhbiBpbmRpY2F0aW5nCisgKiB3aGV0aGVyIHdlIHNob3VsZCBvciBzaG91bGQgbm90IHRyZWF0OgorICoKKyAqICAgR0lUX0RJUj1mb28uZ2l0IGdpdCAuLi4KKyAqCisgKiBhcyBpZiBHSVRfV09SS19UUkVFPS4gd2FzIGdpdmVuLiBJdCdzIG5vdCBleHBlY3RlZCB0aGF0IHVzZXJzIHdpbGwgbWFrZSB1c2UKKyAqIG9mIHRoaXMsIGJ1dCB3ZSB1c2UgaXQgaW50ZXJuYWxseSB0byBjb21tdW5pY2F0ZSB0byBzdWItcHJvY2Vzc2VzIHRoYXQgd2UKKyAqIGFyZSBpbiBhIGJhcmUgcmVwby4gSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gdHJ1ZS4KKyAqLworI2RlZmluZSBHSVRfSU1QTElDSVRfV09SS19UUkVFX0VOVklST05NRU5UICJHSVRfSU1QTElDSVRfV09SS19UUkVFIgorCisvKgorICogUmVwb3NpdG9yeS1sb2NhbCBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IHRoZXNlIHdpbGwgYmUgY2xlYXJlZAorICogd2hlbiBnaXQgc3Bhd25zIGEgc3ViLXByb2Nlc3MgdGhhdCBydW5zIGluc2lkZSBhbm90aGVyIHJlcG9zaXRvcnkuCisgKiBUaGUgYXJyYXkgaXMgTlVMTC10ZXJtaW5hdGVkLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBhc3MgaW4gdGhlICJlbnYiCisgKiBwYXJhbWV0ZXIgb2YgYSBydW4tY29tbWFuZCBpbnZvY2F0aW9uLCBvciB0byBkbyBhIHNpbXBsZSB3YWxrLgorICovCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGxvY2FsX3JlcG9fZW52W107CisKK3ZvaWQgc2V0dXBfZ2l0X2Vudihjb25zdCBjaGFyICpnaXRfZGlyKTsKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZmYgd2UgaGF2ZSBhIGNvbmZpZ3VyZWQgZ2l0IHJlcG9zaXRvcnkgKGVpdGhlciB2aWEKKyAqIHNldHVwX2dpdF9kaXJlY3RvcnksIG9yIGluIHRoZSBlbnZpcm9ubWVudCB2aWEgJEdJVF9ESVIpLgorICovCitpbnQgaGF2ZV9naXRfZGlyKHZvaWQpOworCitleHRlcm4gaW50IGlzX2JhcmVfcmVwb3NpdG9yeV9jZmc7CitpbnQgaXNfYmFyZV9yZXBvc2l0b3J5KHZvaWQpOworaW50IGlzX2luc2lkZV9naXRfZGlyKHZvaWQpOworZXh0ZXJuIGNoYXIgKmdpdF93b3JrX3RyZWVfY2ZnOworaW50IGlzX2luc2lkZV93b3JrX3RyZWUodm9pZCk7Citjb25zdCBjaGFyICpnZXRfZ2l0X2Rpcih2b2lkKTsKK2NvbnN0IGNoYXIgKmdldF9naXRfY29tbW9uX2Rpcih2b2lkKTsKK2NoYXIgKmdldF9vYmplY3RfZGlyZWN0b3J5KHZvaWQpOworY2hhciAqZ2V0X2luZGV4X2ZpbGUodm9pZCk7CitjaGFyICpnZXRfZ3JhZnRfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Cit2b2lkIHNldF9naXRfZGlyKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGdldF9jb21tb25fZGlyX25vZW52KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpnaXRkaXIpOworaW50IGdldF9jb21tb25fZGlyKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpnaXRkaXIpOworY29uc3QgY2hhciAqZ2V0X2dpdF9uYW1lc3BhY2Uodm9pZCk7Citjb25zdCBjaGFyICpzdHJpcF9uYW1lc3BhY2UoY29uc3QgY2hhciAqbmFtZXNwYWNlZF9yZWYpOworY29uc3QgY2hhciAqZ2V0X3N1cGVyX3ByZWZpeCh2b2lkKTsKK2NvbnN0IGNoYXIgKmdldF9naXRfd29ya190cmVlKHZvaWQpOworCisvKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHBhdGggaXMgYSBnaXQgZGlyZWN0b3J5OyBub3RlIHRoYXQgdGhpcyBfanVzdF8KKyAqIGxvb2tzIGF0IHRoZSBkaXJlY3RvcnkgaXRzZWxmLiBJZiB5b3Ugd2FudCB0byBrbm93IHdoZXRoZXIgImZvby8uZ2l0IgorICogaXMgYSByZXBvc2l0b3J5LCB5b3UgbXVzdCBmZWVkIHRoYXQgcGF0aCwgbm90IGp1c3QgImZvbyIuCisgKi8KK2ludCBpc19naXRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIHBhdGggaXMgdGhlIHJvb3Qgb2YgYSBnaXQgcmVwb3NpdG9yeSBvcgorICogc3VibW9kdWxlLCBlbHNlIDAuIFdpbGwgbm90IHJldHVybiAxIGZvciBiYXJlIHJlcG9zaXRvcmllcyB3aXRoIHRoZQorICogZXhjZXB0aW9uIG9mIGNyZWF0aW5nIGEgYmFyZSByZXBvc2l0b3J5IGluICJmb28vLmdpdCIgYW5kIGNhbGxpbmcKKyAqIGlzX2dpdF9yZXBvc2l0b3J5KCJmb28iKS4KKyAqCisgKiBJZiB3ZSBydW4gaW50byByZWFkIGVycm9ycywgd2UgZXJyIG9uIHRoZSBzaWRlIG9mIHNheWluZyAieWVzLCBpdCBpcyIsCisgKiBhcyB3ZSB1c3VhbGx5IGNvbnNpZGVyIHN1Yi1yZXBvcyBwcmVjaW91cywgYW5kIHdvdWxkIHByZWZlciB0byBlcnIgb24gdGhlCisgKiBzaWRlIG9mIG5vdCBkaXNydXB0aW5nIG9yIGRlbGV0aW5nIHRoZW0uCisgKi8KK2ludCBpc19ub25iYXJlX3JlcG9zaXRvcnlfZGlyKHN0cnVjdCBzdHJidWYgKnBhdGgpOworCisjZGVmaW5lIFJFQURfR0lURklMRV9FUlJfU1RBVF9GQUlMRUQgMQorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX05PVF9BX0ZJTEUgMgorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX09QRU5fRkFJTEVEIDMKKyNkZWZpbmUgUkVBRF9HSVRGSUxFX0VSUl9SRUFEX0ZBSUxFRCA0CisjZGVmaW5lIFJFQURfR0lURklMRV9FUlJfSU5WQUxJRF9GT1JNQVQgNQorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX05PX1BBVEggNgorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX05PVF9BX1JFUE8gNworI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX1RPT19MQVJHRSA4Cit2b2lkIHJlYWRfZ2l0ZmlsZV9lcnJvcl9kaWUoaW50IGVycm9yX2NvZGUsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmRpcik7Citjb25zdCBjaGFyICpyZWFkX2dpdGZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKnBhdGgsIGludCAqcmV0dXJuX2Vycm9yX2NvZGUpOworI2RlZmluZSByZWFkX2dpdGZpbGUocGF0aCkgcmVhZF9naXRmaWxlX2dlbnRseSgocGF0aCksIE5VTEwpCitjb25zdCBjaGFyICpyZXNvbHZlX2dpdGRpcl9nZW50bHkoY29uc3QgY2hhciAqc3VzcGVjdCwgaW50ICpyZXR1cm5fZXJyb3JfY29kZSk7CisjZGVmaW5lIHJlc29sdmVfZ2l0ZGlyKHBhdGgpIHJlc29sdmVfZ2l0ZGlyX2dlbnRseSgocGF0aCksIE5VTEwpCisKK3ZvaWQgc2V0X2dpdF93b3JrX3RyZWUoY29uc3QgY2hhciAqdHJlZSk7CisKKyNkZWZpbmUgQUxURVJOQVRFX0RCX0VOVklST05NRU5UICJHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUyIKKwordm9pZCBzZXR1cF93b3JrX3RyZWUodm9pZCk7CisvKgorICogRmluZCB0aGUgY29tbW9uZGlyIGFuZCBnaXRkaXIgb2YgdGhlIHJlcG9zaXRvcnkgdGhhdCBjb250YWlucyB0aGUgY3VycmVudAorICogd29ya2luZyBkaXJlY3RvcnksIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9yIG90aGVyIGdsb2JhbAorICogc3RhdGUuIFRoZSByZXN1bHQgaXMgYXBwZW5kZWQgdG8gY29tbW9uZGlyIGFuZCBnaXRkaXIuICBJZiB0aGUgZGlzY292ZXJlZAorICogZ2l0ZGlyIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB3b3JrdHJlZSwgdGhlbiAnY29tbW9uZGlyJyBhbmQgJ2dpdGRpcicgd2lsbAorICogYm90aCBoYXZlIHRoZSBzYW1lIHJlc3VsdCBhcHBlbmRlZCB0byB0aGUgYnVmZmVyLiAgVGhlIHJldHVybiB2YWx1ZSBpcworICogZWl0aGVyIDAgdXBvbiBzdWNjZXNzIGFuZCBub24temVybyBpZiBubyByZXBvc2l0b3J5IHdhcyBmb3VuZC4KKyAqLworaW50IGRpc2NvdmVyX2dpdF9kaXJlY3Rvcnkoc3RydWN0IHN0cmJ1ZiAqY29tbW9uZGlyLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZ2l0ZGlyKTsKK2NvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KGludCAqKTsKK2NvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3Rvcnkodm9pZCk7CitjaGFyICpwcmVmaXhfcGF0aChjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqcHJlZml4X3BhdGhfZ2VudGx5KGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGxlbiwgaW50ICpyZW1haW5pbmcsIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogQ29uY2F0ZW5hdGUgInByZWZpeCIgKGlmIGxlbiBpcyBub24temVybykgYW5kICJwYXRoIiwgd2l0aCBubworICogY29ubmVjdGluZyBjaGFyYWN0ZXJzIChzbyAicHJlZml4IiBzaG91bGQgZW5kIHdpdGggYSAiLyIpLgorICogVW5saWtlIHByZWZpeF9wYXRoLCB0aGlzIHNob3VsZCBiZSB1c2VkIGlmIHRoZSBuYW1lZCBmaWxlIGRvZXMKKyAqIG5vdCBoYXZlIHRvIGludGVyYWN0IHdpdGggaW5kZXggZW50cnk7IGkuZS4gbmFtZSBvZiBhIHJhbmRvbSBmaWxlCisgKiBvbiB0aGUgZmlsZXN5c3RlbS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgKGV2ZW4gaWYgdGhlCisgKiBwcmVmaXggd2FzIGVtcHR5KS4KKyAqLworY2hhciAqcHJlZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqcGF0aCk7CisKK2ludCBjaGVja19maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB2ZXJpZnlfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgaW50IGRpYWdub3NlX21pc3NwZWx0X3Jldik7Cit2b2lkIHZlcmlmeV9ub25fZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBwYXRoX2luc2lkZV9yZXBvKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqcGF0aCk7CisKKyNkZWZpbmUgSU5JVF9EQl9RVUlFVCAweDAwMDEKKyNkZWZpbmUgSU5JVF9EQl9FWElTVF9PSyAweDAwMDIKKworaW50IGluaXRfZGIoY29uc3QgY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqcmVhbF9naXRfZGlyLAorCSAgICBjb25zdCBjaGFyICp0ZW1wbGF0ZV9kaXIsIHVuc2lnbmVkIGludCBmbGFncyk7CisKK3ZvaWQgc2FuaXRpemVfc3RkZmRzKHZvaWQpOworaW50IGRhZW1vbml6ZSh2b2lkKTsKKworI2RlZmluZSBhbGxvY19ucih4KSAoKCh4KSsxNikqMy8yKQorCisvKioKKyAqIER5bmFtaWNhbGx5IGdyb3dpbmcgYW4gYXJyYXkgdXNpbmcgcmVhbGxvYygpIGlzIGVycm9yIHByb25lIGFuZCBib3JpbmcuCisgKgorICogRGVmaW5lIHlvdXIgYXJyYXkgd2l0aDoKKyAqCisgKiAtIGEgcG9pbnRlciAoYGl0ZW1gKSB0aGF0IHBvaW50cyBhdCB0aGUgYXJyYXksIGluaXRpYWxpemVkIHRvIGBOVUxMYAorICogICAoYWx0aG91Z2ggcGxlYXNlIG5hbWUgdGhlIHZhcmlhYmxlIGJhc2VkIG9uIGl0cyBjb250ZW50cywgbm90IG9uIGl0cworICogICB0eXBlKTsKKyAqCisgKiAtIGFuIGludGVnZXIgdmFyaWFibGUgKGBhbGxvY2ApIHRoYXQga2VlcHMgdHJhY2sgb2YgaG93IGJpZyB0aGUgY3VycmVudAorICogICBhbGxvY2F0aW9uIGlzLCBpbml0aWFsaXplZCB0byBgMGA7CisgKgorICogLSBhbm90aGVyIGludGVnZXIgdmFyaWFibGUgKGBucmApIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgZWxlbWVudHMgdGhlCisgKiAgIGFycmF5IGN1cnJlbnRseSBoYXMsIGluaXRpYWxpemVkIHRvIGAwYC4KKyAqCisgKiBUaGVuIGJlZm9yZSBhZGRpbmcgYG5gdGggZWxlbWVudCB0byB0aGUgaXRlbSwgY2FsbCBgQUxMT0NfR1JPVyhpdGVtLCBuLAorICogYWxsb2MpYC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheSBjYW4gaG9sZCBhdCBsZWFzdCBgbmAgZWxlbWVudHMgYnkKKyAqIGNhbGxpbmcgYHJlYWxsb2MoMylgIGFuZCBhZGp1c3RpbmcgYGFsbG9jYCB2YXJpYWJsZS4KKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIHNvbWV0eXBlICppdGVtOworICogc2l6ZV90IG5yOworICogc2l6ZV90IGFsbG9jCisgKgorICogZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisgKiAJaWYgKHdlIGxpa2UgaXRlbVtpXSBhbHJlYWR5KQorICogCQlyZXR1cm47CisgKgorICogLy8gd2UgZGlkIG5vdCBsaWtlIGFueSBleGlzdGluZyBvbmUsIHNvIGFkZCBvbmUKKyAqIEFMTE9DX0dST1coaXRlbSwgbnIgKyAxLCBhbGxvYyk7CisgKiBpdGVtW25yKytdID0gdmFsdWUgeW91IGxpa2U7CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgYG5yYCB2YXJpYWJsZS4KKyAqCisgKiBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYWxsb2NhdGUgZXhwbGljaXRseQorICogdGhlbiB1c2UgdGhlIG1hY3JvIGBSRUFMTE9DX0FSUkFZKGl0ZW0sIGFsbG9jKWAgaW5zdGVhZCBvZiBgQUxMT0NfR1JPV2AuCisgKgorICogQ29uc2lkZXIgdXNpbmcgQUxMT0NfR1JPV19CWSBpbnN0ZWFkIG9mIEFMTE9DX0dST1cgYXMgaXQgaGFzIHNvbWUKKyAqIGFkZGVkIG5pY2V0aWVzLgorICoKKyAqIERPIE5PVCBVU0UgYW55IGV4cHJlc3Npb24gd2l0aCBzaWRlLWVmZmVjdCBmb3IgJ3gnLCAnbnInLCBvciAnYWxsb2MnLgorICovCisjZGVmaW5lIEFMTE9DX0dST1coeCwgbnIsIGFsbG9jKSBcCisJZG8geyBcCisJCWlmICgobnIpID4gYWxsb2MpIHsgXAorCQkJaWYgKGFsbG9jX25yKGFsbG9jKSA8IChucikpIFwKKwkJCQlhbGxvYyA9IChucik7IFwKKwkJCWVsc2UgXAorCQkJCWFsbG9jID0gYWxsb2NfbnIoYWxsb2MpOyBcCisJCQlSRUFMTE9DX0FSUkFZKHgsIGFsbG9jKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogU2ltaWxhciB0byBBTExPQ19HUk9XIGJ1dCBoYW5kbGVzIHVwZGF0aW5nIG9mIHRoZSBuciB2YWx1ZSBhbmQKKyAqIHplcm9pbmcgdGhlIGJ5dGVzIG9mIHRoZSBuZXdseS1ncm93biBhcnJheSBlbGVtZW50cy4KKyAqCisgKiBETyBOT1QgVVNFIGFueSBleHByZXNzaW9uIHdpdGggc2lkZS1lZmZlY3QgZm9yIGFueSBvZiB0aGUKKyAqIGFyZ3VtZW50cy4KKyAqLworI2RlZmluZSBBTExPQ19HUk9XX0JZKHgsIG5yLCBpbmNyZWFzZSwgYWxsb2MpIFwKKwlkbyB7IFwKKwkJaWYgKGluY3JlYXNlKSB7IFwKKwkJCXNpemVfdCBuZXdfbnIgPSBuciArIChpbmNyZWFzZSk7IFwKKwkJCWlmIChuZXdfbnIgPCBucikgXAorCQkJCUJVRygibmVnYXRpdmUgZ3Jvd3RoIGluIEFMTE9DX0dST1dfQlkiKTsgXAorCQkJQUxMT0NfR1JPVyh4LCBuZXdfbnIsIGFsbG9jKTsgXAorCQkJbWVtc2V0KCh4KSArIG5yLCAwLCBzaXplb2YoKih4KSkgKiAoaW5jcmVhc2UpKTsgXAorCQkJbnIgPSBuZXdfbnI7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworLyogSW5pdGlhbGl6ZSBhbmQgdXNlIHRoZSBjYWNoZSBpbmZvcm1hdGlvbiAqLworc3RydWN0IGxvY2tfZmlsZTsKK3ZvaWQgcHJlbG9hZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4LAorCQkgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICB1bnNpZ25lZCBpbnQgcmVmcmVzaF9mbGFncyk7CitpbnQgZG9fcmVhZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJICBpbnQgbXVzdF9leGlzdCk7IC8qIGZvciB0ZXN0dGluZyBvbmx5ISAqLworaW50IHJlYWRfaW5kZXhfZnJvbShzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgIGNvbnN0IGNoYXIgKmdpdGRpcik7CitpbnQgaXNfaW5kZXhfdW5ib3JuKHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKKworLyogRm9yIHVzZSB3aXRoIGB3cml0ZV9sb2NrZWRfaW5kZXgoKWAuICovCisjZGVmaW5lIENPTU1JVF9MT0NLCQkoMSA8PCAwKQorI2RlZmluZSBTS0lQX0lGX1VOQ0hBTkdFRAkoMSA8PCAxKQorCisvKgorICogV3JpdGUgdGhlIGluZGV4IHdoaWxlIGhvbGRpbmcgYW4gYWxyZWFkeS10YWtlbiBsb2NrLiBDbG9zZSB0aGUgbG9jaywKKyAqIGFuZCBpZiBgQ09NTUlUX0xPQ0tgIGlzIGdpdmVuLCBjb21taXQgaXQuCisgKgorICogVW5sZXNzIGEgc3BsaXQgaW5kZXggaXMgaW4gdXNlLCB3cml0ZSB0aGUgaW5kZXggaW50byB0aGUgbG9ja2ZpbGUuCisgKgorICogV2l0aCBhIHNwbGl0IGluZGV4LCB3cml0ZSB0aGUgc2hhcmVkIGluZGV4IHRvIGEgdGVtcG9yYXJ5IGZpbGUsCisgKiBhZGp1c3QgaXRzIHBlcm1pc3Npb25zIGFuZCByZW5hbWUgaXQgaW50byBwbGFjZSwgdGhlbiB3cml0ZSB0aGUKKyAqIHNwbGl0IGluZGV4IHRvIHRoZSBsb2NrZmlsZS4gSWYgdGhlIHRlbXBvcmFyeSBmaWxlIGZvciB0aGUgc2hhcmVkCisgKiBpbmRleCBjYW5ub3QgYmUgY3JlYXRlZCwgZmFsbCBiYWNrIHRvIHRoZSBiZWhhdmlvciBkZXNjcmliZWQgaW4KKyAqIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGguCisgKgorICogV2l0aCBgQ09NTUlUX0xPQ0tgLCB0aGUgbG9jayBpcyBhbHdheXMgY29tbWl0dGVkIG9yIHJvbGxlZCBiYWNrLgorICogV2l0aG91dCBpdCwgdGhlIGxvY2sgaXMgY2xvc2VkLCBidXQgbmVpdGhlciBjb21taXR0ZWQgbm9yIHJvbGxlZAorICogYmFjay4KKyAqCisgKiBJZiBgU0tJUF9JRl9VTkNIQU5HRURgIGlzIGdpdmVuIGFuZCB0aGUgaW5kZXggaXMgdW5jaGFuZ2VkLCBub3RoaW5nCisgKiBpcyB3cml0dGVuIChhbmQgdGhlIGxvY2sgaXMgcm9sbGVkIGJhY2sgaWYgYENPTU1JVF9MT0NLYCBpcyBnaXZlbikuCisgKi8KK2ludCB3cml0ZV9sb2NrZWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBsb2NrX2ZpbGUgKmxvY2ssIHVuc2lnbmVkIGZsYWdzKTsKKworaW50IGRpc2NhcmRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICopOwordm9pZCBtb3ZlX2luZGV4X2V4dGVuc2lvbnMoc3RydWN0IGluZGV4X3N0YXRlICpkc3QsIHN0cnVjdCBpbmRleF9zdGF0ZSAqc3JjKTsKK2ludCB1bm1lcmdlZF9pbmRleChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CisKKy8qKgorICogUmV0dXJucyAxIGlmIGlzdGF0ZSBkaWZmZXJzIGZyb20gdHJlZSwgMCBvdGhlcndpc2UuICBJZiB0cmVlIGlzIE5VTEwsCisgKiBjb21wYXJlcyBpc3RhdGUgdG8gSEVBRC4gIElmIHRyZWUgaXMgTlVMTCBhbmQgb24gYW4gdW5ib3JuIGJyYW5jaCwKKyAqIHJldHVybnMgMSBpZiB0aGVyZSBhcmUgZW50cmllcyBpbiBpc3RhdGUsIDAgb3RoZXJ3aXNlLiAgSWYgYW4gc3RyYnVmIGlzCisgKiBwcm92aWRlZCwgdGhlIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIHRoYXQgZGlmZmVyIHdpbGwgYmUgYXBwZW5kZWQKKyAqIHRvIGl0LgorICovCitpbnQgcmVwb19pbmRleF9oYXNfY2hhbmdlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqc2IpOworCitpbnQgdmVyaWZ5X3BhdGgoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSk7CitpbnQgc3RyY21wX29mZnNldChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCAqZmlyc3RfY2hhbmdlKTsKK2ludCBpbmRleF9kaXJfZXhpc3RzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7Cit2b2lkIGFkanVzdF9kaXJuYW1lX2Nhc2Uoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNoYXIgKm5hbWUpOworc3RydWN0IGNhY2hlX2VudHJ5ICppbmRleF9maWxlX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpZ25jYXNlKTsKKworLyoKKyAqIFNlYXJjaGVzIGZvciBhbiBlbnRyeSBkZWZpbmVkIGJ5IG5hbWUgYW5kIG5hbWVsZW4gaW4gdGhlIGdpdmVuIGluZGV4LgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NpdGl2ZSAoaW5jbHVkaW5nIDApIGl0IGlzIHRoZSBwb3NpdGlvbiBvZiBhbgorICogZXhhY3QgbWF0Y2guIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbmVnYXRpdmUsIHRoZSBuZWdhdGVkIHZhbHVlIG1pbnVzIDEKKyAqIGlzIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgZW50cnkgd291bGQgYmUgaW5zZXJ0ZWQuCisgKiBFeGFtcGxlOiBUaGUgY3VycmVudCBpbmRleCBjb25zaXN0cyBvZiB0aGVzZSBmaWxlcyBhbmQgaXRzIHN0YWdlczoKKyAqCisgKiAgIGIjMCwgZCMwLCBmIzEsIGYjMworICoKKyAqIGluZGV4X25hbWVfcG9zKCZpbmRleCwgImEiLCAxKSAtPiAtMQorICogaW5kZXhfbmFtZV9wb3MoJmluZGV4LCAiYiIsIDEpIC0+ICAwCisgKiBpbmRleF9uYW1lX3BvcygmaW5kZXgsICJjIiwgMSkgLT4gLTIKKyAqIGluZGV4X25hbWVfcG9zKCZpbmRleCwgImQiLCAxKSAtPiAgMQorICogaW5kZXhfbmFtZV9wb3MoJmluZGV4LCAiZSIsIDEpIC0+IC0zCisgKiBpbmRleF9uYW1lX3BvcygmaW5kZXgsICJmIiwgMSkgLT4gLTMKKyAqIGluZGV4X25hbWVfcG9zKCZpbmRleCwgImciLCAxKSAtPiAtNQorICovCitpbnQgaW5kZXhfbmFtZV9wb3MoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKTsKKworLyoKKyAqIFNvbWUgZnVuY3Rpb25zIHJldHVybiB0aGUgbmVnYXRpdmUgY29tcGxlbWVudCBvZiBhbiBpbnNlcnQgcG9zaXRpb24gd2hlbiBhCisgKiBwcmVjaXNlIG1hdGNoIHdhcyBub3QgZm91bmQgYnV0IGEgcG9zaXRpb24gd2FzIGZvdW5kIHdoZXJlIHRoZSBlbnRyeSB3b3VsZAorICogbmVlZCB0byBiZSBpbnNlcnRlZC4gVGhpcyBoZWxwZXIgcHJvdGVjdHMgdGhhdCBsb2dpYyBmcm9tIGFueSBpbnRlZ2VyCisgKiB1bmRlcmZsb3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGluZGV4X3Bvc190b19pbnNlcnRfcG9zKHVpbnRtYXhfdCBwb3MpCit7CisJaWYgKHBvcyA+IElOVF9NQVgpCisJCWRpZSgib3ZlcmZsb3c6IC0xIC0gJSJQUkl1TUFYLCBwb3MpOworCXJldHVybiAtMSAtIChpbnQpcG9zOworfQorCisjZGVmaW5lIEFERF9DQUNIRV9PS19UT19BREQgMQkJLyogT2sgdG8gYWRkICovCisjZGVmaW5lIEFERF9DQUNIRV9PS19UT19SRVBMQUNFIDIJLyogT2sgdG8gcmVwbGFjZSBmaWxlL2RpcmVjdG9yeSAqLworI2RlZmluZSBBRERfQ0FDSEVfU0tJUF9ERkNIRUNLIDQJLyogT2sgdG8gc2tpcCBERiBjb25mbGljdCBjaGVja3MgKi8KKyNkZWZpbmUgQUREX0NBQ0hFX0pVU1RfQVBQRU5EIDgJCS8qIEFwcGVuZCBvbmx5OyB0cmVlLmM6OnJlYWRfdHJlZSgpICovCisjZGVmaW5lIEFERF9DQUNIRV9ORVdfT05MWSAxNgkJLyogRG8gbm90IHJlcGxhY2UgZXhpc3Rpbmcgb25lcyAqLworI2RlZmluZSBBRERfQ0FDSEVfS0VFUF9DQUNIRV9UUkVFIDMyCS8qIERvIG5vdCBpbnZhbGlkYXRlIGNhY2hlLXRyZWUgKi8KKyNkZWZpbmUgQUREX0NBQ0hFX1JFTk9STUFMSVpFIDY0ICAgICAgICAvKiBQYXNzIGFsb25nIEhBU0hfUkVOT1JNQUxJWkUgKi8KK2ludCBhZGRfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBvcHRpb24pOwordm9pZCByZW5hbWVfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCBwb3MsIGNvbnN0IGNoYXIgKm5ld19uYW1lKTsKKworLyogUmVtb3ZlIGVudHJ5LCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZSBlbnRyaWVzIHRvIGdvLiAqLworaW50IHJlbW92ZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgaW50IHBvcyk7CisKK3ZvaWQgcmVtb3ZlX21hcmtlZF9jYWNoZV9lbnRyaWVzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgaW52YWxpZGF0ZSk7CitpbnQgcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCk7CisjZGVmaW5lIEFERF9DQUNIRV9WRVJCT1NFIDEKKyNkZWZpbmUgQUREX0NBQ0hFX1BSRVRFTkQgMgorI2RlZmluZSBBRERfQ0FDSEVfSUdOT1JFX0VSUk9SUwk0CisjZGVmaW5lIEFERF9DQUNIRV9JR05PUkVfUkVNT1ZBTCA4CisjZGVmaW5lIEFERF9DQUNIRV9JTlRFTlQgMTYKKy8qCisgKiBUaGVzZSB0d28gYXJlIHVzZWQgdG8gYWRkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCBwYXRoCisgKiB0byB0aGUgaW5kZXgsIG1hcmtpbmcgdGhlIHdvcmtpbmcgdHJlZSB1cC10by1kYXRlIGJ5IHN0b3JpbmcKKyAqIHRoZSBjYWNoZWQgc3RhdCBpbmZvIGluIHRoZSByZXN1bHRpbmcgY2FjaGUgZW50cnkuICBBIGNhbGxlcgorICogdGhhdCBoYXMgYWxyZWFkeSBydW4gbHN0YXQoMikgb24gdGhlIHBhdGggY2FuIGNhbGwKKyAqIGFkZF90b19pbmRleCgpLCBhbmQgYWxsIG90aGVycyBjYW4gY2FsbCBhZGRfZmlsZV90b19pbmRleCgpOworICogdGhlIGxhdHRlciB3aWxsIGRvIG5lY2Vzc2FyeSBsc3RhdCgyKSBpbnRlcm5hbGx5IGJlZm9yZQorICogY2FsbGluZyB0aGUgZm9ybWVyLgorICovCitpbnQgYWRkX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQgZmxhZ3MpOworaW50IGFkZF9maWxlX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpOworCitpbnQgY2htb2RfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNoYXIgZmxpcCk7CitpbnQgY2Vfc2FtZV9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpiKTsKK3ZvaWQgc2V0X29iamVjdF9uYW1lX2Zvcl9pbnRlbnRfdG9fYWRkX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpOworaW50IGluZGV4X25hbWVfaXNfb3RoZXIoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK3ZvaWQgKnJlYWRfYmxvYl9kYXRhX2Zyb21faW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworLyogZG8gc3RhdCBjb21wYXJpc29uIGV2ZW4gaWYgQ0VfVkFMSUQgaXMgdHJ1ZSAqLworI2RlZmluZSBDRV9NQVRDSF9JR05PUkVfVkFMSUQJCTAxCisvKiBkbyBub3QgY2hlY2sgdGhlIGNvbnRlbnRzIGJ1dCByZXBvcnQgZGlydHkgb24gcmFjaWx5LWNsZWFuIGVudHJpZXMgKi8KKyNkZWZpbmUgQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWQkJMDIKKy8qIGRvIHN0YXQgY29tcGFyaXNvbiBldmVuIGlmIENFX1NLSVBfV09SS1RSRUUgaXMgdHJ1ZSAqLworI2RlZmluZSBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRQkwNAorLyogaWdub3JlIG5vbi1leGlzdGVudCBmaWxlcyBkdXJpbmcgc3RhdCB1cGRhdGUgICovCisjZGVmaW5lIENFX01BVENIX0lHTk9SRV9NSVNTSU5HCQkweDA4CisvKiBlbmFibGUgc3RhdCByZWZyZXNoICovCisjZGVmaW5lIENFX01BVENIX1JFRlJFU0gJCTB4MTAKKy8qIGRvbid0IHJlZnJlc2hfZnNtb25pdG9yIHN0YXRlIG9yIGRvIHN0YXQgY29tcGFyaXNvbiBldmVuIGlmIENFX0ZTTU9OSVRPUl9WQUxJRCBpcyB0cnVlICovCisjZGVmaW5lIENFX01BVENIX0lHTk9SRV9GU01PTklUT1IgMFgyMAoraW50IGlzX3JhY3lfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKTsKK2ludCBpZV9tYXRjaF9zdGF0KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiwgc3RydWN0IHN0YXQgKiwgdW5zaWduZWQgaW50KTsKK2ludCBpZV9tb2RpZmllZChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICosIHN0cnVjdCBzdGF0ICosIHVuc2lnbmVkIGludCk7CisKKyNkZWZpbmUgSEFTSF9XUklURV9PQkpFQ1QgMQorI2RlZmluZSBIQVNIX0ZPUk1BVF9DSEVDSyAyCisjZGVmaW5lIEhBU0hfUkVOT1JNQUxJWkUgIDQKK2ludCBpbmRleF9mZChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmQsIHN0cnVjdCBzdGF0ICpzdCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBmbGFncyk7CitpbnQgaW5kZXhfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqc3QsIHVuc2lnbmVkIGZsYWdzKTsKKworLyoKKyAqIFJlY29yZCB0byBzZCB0aGUgZGF0YSBmcm9tIHN0IHRoYXQgd2UgdXNlIHRvIGNoZWNrIHdoZXRoZXIgYSBmaWxlCisgKiBtaWdodCBoYXZlIGNoYW5nZWQuCisgKi8KK3ZvaWQgZmlsbF9zdGF0X2RhdGEoc3RydWN0IHN0YXRfZGF0YSAqc2QsIHN0cnVjdCBzdGF0ICpzdCk7CisKKy8qCisgKiBSZXR1cm4gMCBpZiBzdCBpcyBjb25zaXN0ZW50IHdpdGggYSBmaWxlIG5vdCBoYXZpbmcgYmVlbiBjaGFuZ2VkCisgKiBzaW5jZSBzZCB3YXMgZmlsbGVkLiAgSWYgdGhlcmUgYXJlIGRpZmZlcmVuY2VzLCByZXR1cm4gYQorICogY29tYmluYXRpb24gb2YgTVRJTUVfQ0hBTkdFRCwgQ1RJTUVfQ0hBTkdFRCwgT1dORVJfQ0hBTkdFRCwKKyAqIElOT0RFX0NIQU5HRUQsIGFuZCBEQVRBX0NIQU5HRUQuCisgKi8KK2ludCBtYXRjaF9zdGF0X2RhdGEoY29uc3Qgc3RydWN0IHN0YXRfZGF0YSAqc2QsIHN0cnVjdCBzdGF0ICpzdCk7CitpbnQgbWF0Y2hfc3RhdF9kYXRhX3JhY3koY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3Qgc3RydWN0IHN0YXRfZGF0YSAqc2QsIHN0cnVjdCBzdGF0ICpzdCk7CisKK3ZvaWQgZmlsbF9zdGF0X2NhY2hlX2luZm8oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCk7CisKKyNkZWZpbmUgUkVGUkVTSF9SRUFMTFkJCTB4MDAwMQkvKiBpZ25vcmVfdmFsaWQgKi8KKyNkZWZpbmUgUkVGUkVTSF9VTk1FUkdFRAkweDAwMDIJLyogYWxsb3cgdW5tZXJnZWQgKi8KKyNkZWZpbmUgUkVGUkVTSF9RVUlFVAkJMHgwMDA0CS8qIGJlIHF1aWV0IGFib3V0IGl0ICovCisjZGVmaW5lIFJFRlJFU0hfSUdOT1JFX01JU1NJTkcJMHgwMDA4CS8qIGlnbm9yZSBub24tZXhpc3RlbnQgKi8KKyNkZWZpbmUgUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUwkweDAwMTAJLyogaWdub3JlIHN1Ym1vZHVsZXMgKi8KKyNkZWZpbmUgUkVGUkVTSF9JTl9QT1JDRUxBSU4JMHgwMDIwCS8qIHVzZXIgZnJpZW5kbHkgb3V0cHV0LCBub3QgIm5lZWRzIHVwZGF0ZSIgKi8KKyNkZWZpbmUgUkVGUkVTSF9QUk9HUkVTUwkweDAwNDAgIC8qIHNob3cgcHJvZ3Jlc3MgYmFyIGlmIHN0ZGVyciBpcyB0dHkgKi8KK2ludCByZWZyZXNoX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGNoYXIgKnNlZW4sIGNvbnN0IGNoYXIgKmhlYWRlcl9tc2cpOworLyoKKyAqIFJlZnJlc2ggdGhlIGluZGV4IGFuZCB3cml0ZSBpdCB0byBkaXNrLgorICoKKyAqICdyZWZyZXNoX2ZsYWdzJyBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gJ3JlZnJlc2hfaW5kZXgoKScsIHdoaWxlCisgKiAnQ09NTUlUX0xPQ0sgfCB3cml0ZV9mbGFncycgaXMgcGFzc2VkIHRvICd3cml0ZV9sb2NrZWRfaW5kZXgoKScsIHNvCisgKiB0aGUgbG9ja2ZpbGUgaXMgYWx3YXlzIGVpdGhlciBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suCisgKgorICogSWYgJ2dlbnRsZScgaXMgcGFzc2VkLCBlcnJvcnMgbG9ja2luZyB0aGUgaW5kZXggYXJlIGlnbm9yZWQuCisgKgorICogUmV0dXJuIDEgaWYgcmVmcmVzaGluZyB0aGUgaW5kZXggcmV0dXJucyBhbiBlcnJvciwgLTEgaWYgd3JpdGluZworICogdGhlIGluZGV4IHRvIGRpc2sgZmFpbHMsIDAgb24gc3VjY2Vzcy4KKyAqCisgKiBOb3RlIHRoYXQgaWYgcmVmcmVzaGluZyB0aGUgaW5kZXggcmV0dXJucyBhbiBlcnJvciwgd2Ugc3RpbGwgd3JpdGUKKyAqIG91dCB0aGUgaW5kZXggKHVubGVzcyBsb2NraW5nIGZhaWxzKS4KKyAqLworaW50IHJlcG9fcmVmcmVzaF9hbmRfd3JpdGVfaW5kZXgoc3RydWN0IHJlcG9zaXRvcnkqLCB1bnNpZ25lZCBpbnQgcmVmcmVzaF9mbGFncywgdW5zaWduZWQgaW50IHdyaXRlX2ZsYWdzLCBpbnQgZ2VudGxlLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKiwgY2hhciAqc2VlbiwgY29uc3QgY2hhciAqaGVhZGVyX21zZyk7CisKK3N0cnVjdCBjYWNoZV9lbnRyeSAqcmVmcmVzaF9jYWNoZV9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGNhY2hlX2VudHJ5ICosIHVuc2lnbmVkIGludCk7CisKK3ZvaWQgc2V0X2FsdGVybmF0ZV9pbmRleF9vdXRwdXQoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIGludCB2ZXJpZnlfaW5kZXhfY2hlY2tzdW07CitleHRlcm4gaW50IHZlcmlmeV9jZV9vcmRlcjsKKworLyogRW52aXJvbm1lbnQgYml0cyBmcm9tIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtICovCitleHRlcm4gaW50IHRydXN0X2V4ZWN1dGFibGVfYml0OworZXh0ZXJuIGludCB0cnVzdF9jdGltZTsKK2V4dGVybiBpbnQgY2hlY2tfc3RhdDsKK2V4dGVybiBpbnQgcXVvdGVfcGF0aF9mdWxseTsKK2V4dGVybiBpbnQgaGFzX3N5bWxpbmtzOworZXh0ZXJuIGludCBtaW5pbXVtX2FiYnJldiwgZGVmYXVsdF9hYmJyZXY7CitleHRlcm4gaW50IGlnbm9yZV9jYXNlOworZXh0ZXJuIGludCBhc3N1bWVfdW5jaGFuZ2VkOworZXh0ZXJuIGludCBwcmVmZXJfc3ltbGlua19yZWZzOworZXh0ZXJuIGludCB3YXJuX2FtYmlndW91c19yZWZzOworZXh0ZXJuIGludCB3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eTsKK2V4dGVybiBjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X3doaXRlc3BhY2U7CitleHRlcm4gY29uc3QgY2hhciAqYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9hdHRyaWJ1dGVzX2ZpbGU7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2hvb2tzX3BhdGg7CitleHRlcm4gaW50IHpsaWJfY29tcHJlc3Npb25fbGV2ZWw7CitleHRlcm4gaW50IGNvcmVfY29tcHJlc3Npb25fbGV2ZWw7CitleHRlcm4gaW50IHBhY2tfY29tcHJlc3Npb25fbGV2ZWw7CitleHRlcm4gc2l6ZV90IHBhY2tlZF9naXRfd2luZG93X3NpemU7CitleHRlcm4gc2l6ZV90IHBhY2tlZF9naXRfbGltaXQ7CitleHRlcm4gc2l6ZV90IGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBiaWdfZmlsZV90aHJlc2hvbGQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwYWNrX3NpemVfbGltaXRfY2ZnOworCisvKgorICogQWNjZXNzb3JzIGZvciB0aGUgY29yZS5zaGFyZWRyZXBvc2l0b3J5IGNvbmZpZyB3aGljaCBsYXp5LWxvYWQgdGhlIHZhbHVlCisgKiBmcm9tIHRoZSBjb25maWcgKGlmIG5vdCBhbHJlYWR5IHNldCkuIFRoZSAicmVzZXQiIGZ1bmN0aW9uIGNhbiBiZQorICogdXNlZCB0byB1bnNldCAic2V0IiBvciBjYWNoZWQgdmFsdWUsIG1lYW5pbmcgdGhhdCB0aGUgdmFsdWUgd2lsbCBiZSBsb2FkZWQKKyAqIGZyZXNoIGZyb20gdGhlIGNvbmZpZyBmaWxlIG9uIHRoZSBuZXh0IGNhbGwgdG8gZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCkuCisgKi8KK3ZvaWQgc2V0X3NoYXJlZF9yZXBvc2l0b3J5KGludCB2YWx1ZSk7CitpbnQgZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KHZvaWQpOwordm9pZCByZXNldF9zaGFyZWRfcmVwb3NpdG9yeSh2b2lkKTsKKworLyoKKyAqIERvIHJlcGxhY2UgcmVmcyBuZWVkIHRvIGJlIGNoZWNrZWQgdGhpcyBydW4/ICBUaGlzIHZhcmlhYmxlIGlzCisgKiBpbml0aWFsaXplZCB0byB0cnVlIHVubGVzcyAtLW5vLXJlcGxhY2Utb2JqZWN0IGlzIHVzZWQgb3IKKyAqICRHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTIGlzIHNldCwgYnV0IGlzIHNldCB0byBmYWxzZSBieSBzb21lCisgKiBjb21tYW5kcyB0aGF0IGRvIG5vdCB3YW50IHJlcGxhY2UgcmVmZXJlbmNlcyB0byBiZSBhY3RpdmUuCisgKi8KK2V4dGVybiBpbnQgcmVhZF9yZXBsYWNlX3JlZnM7CitleHRlcm4gY2hhciAqZ2l0X3JlcGxhY2VfcmVmX2Jhc2U7CisKK2V4dGVybiBpbnQgZnN5bmNfb2JqZWN0X2ZpbGVzOworZXh0ZXJuIGludCBjb3JlX3ByZWxvYWRfaW5kZXg7CitleHRlcm4gaW50IHByZWNvbXBvc2VkX3VuaWNvZGU7CitleHRlcm4gaW50IHByb3RlY3RfaGZzOworZXh0ZXJuIGludCBwcm90ZWN0X250ZnM7CitleHRlcm4gY29uc3QgY2hhciAqY29yZV9mc21vbml0b3I7CisKK2V4dGVybiBpbnQgY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQ7CitleHRlcm4gaW50IGNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmU7CisKKy8qCisgKiBJbmNsdWRlIGJyb2tlbiByZWZzIGluIGFsbCByZWYgaXRlcmF0aW9ucywgd2hpY2ggd2lsbAorICogZ2VuZXJhbGx5IGNob2tlIGRhbmdlcm91cyBvcGVyYXRpb25zIHJhdGhlciB0aGFuIGxldHRpbmcKKyAqIHRoZW0gc2lsZW50bHkgcHJvY2VlZCB3aXRob3V0IHRha2luZyB0aGUgYnJva2VuIHJlZiBpbnRvCisgKiBhY2NvdW50LgorICovCitleHRlcm4gaW50IHJlZl9wYXJhbm9pYTsKKworLyoKKyAqIFJldHVybnMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgJEdJVF9PUFRJT05BTF9MT0NLUyAob3IgdGhlIGRlZmF1bHQgdmFsdWUpLgorICovCitpbnQgdXNlX29wdGlvbmFsX2xvY2tzKHZvaWQpOworCisvKgorICogVGhlIGNoYXJhY3RlciB0aGF0IGJlZ2lucyBhIGNvbW1lbnRlZCBsaW5lIGluIHVzZXItZWRpdGFibGUgZmlsZQorICogdGhhdCBpcyBzdWJqZWN0IHRvIHN0cmlwc3BhY2UuCisgKi8KK2V4dGVybiBjaGFyIGNvbW1lbnRfbGluZV9jaGFyOworZXh0ZXJuIGludCBhdXRvX2NvbW1lbnRfbGluZV9jaGFyOworCitlbnVtIGxvZ19yZWZzX2NvbmZpZyB7CisJTE9HX1JFRlNfVU5TRVQgPSAtMSwKKwlMT0dfUkVGU19OT05FID0gMCwKKwlMT0dfUkVGU19OT1JNQUwsCisJTE9HX1JFRlNfQUxXQVlTCit9OworZXh0ZXJuIGVudW0gbG9nX3JlZnNfY29uZmlnIGxvZ19hbGxfcmVmX3VwZGF0ZXM7CisKK2VudW0gcmViYXNlX3NldHVwX3R5cGUgeworCUFVVE9SRUJBU0VfTkVWRVIgPSAwLAorCUFVVE9SRUJBU0VfTE9DQUwsCisJQVVUT1JFQkFTRV9SRU1PVEUsCisJQVVUT1JFQkFTRV9BTFdBWVMKK307CisKK2VudW0gcHVzaF9kZWZhdWx0X3R5cGUgeworCVBVU0hfREVGQVVMVF9OT1RISU5HID0gMCwKKwlQVVNIX0RFRkFVTFRfTUFUQ0hJTkcsCisJUFVTSF9ERUZBVUxUX1NJTVBMRSwKKwlQVVNIX0RFRkFVTFRfVVBTVFJFQU0sCisJUFVTSF9ERUZBVUxUX0NVUlJFTlQsCisJUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVECit9OworCitleHRlcm4gZW51bSByZWJhc2Vfc2V0dXBfdHlwZSBhdXRvcmViYXNlOworZXh0ZXJuIGVudW0gcHVzaF9kZWZhdWx0X3R5cGUgcHVzaF9kZWZhdWx0OworCitlbnVtIG9iamVjdF9jcmVhdGlvbl9tb2RlIHsKKwlPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1MgPSAwLAorCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSAxCit9OworCitleHRlcm4gZW51bSBvYmplY3RfY3JlYXRpb25fbW9kZSBvYmplY3RfY3JlYXRpb25fbW9kZTsKKworZXh0ZXJuIGNoYXIgKm5vdGVzX3JlZl9uYW1lOworCitleHRlcm4gaW50IGdyYWZ0c19yZXBsYWNlX3BhcmVudHM7CisKKy8qCisgKiBHSVRfUkVQT19WRVJTSU9OIGlzIHRoZSB2ZXJzaW9uIHdlIHdyaXRlIGJ5IGRlZmF1bHQuIFRoZQorICogX1JFQUQgdmFyaWFudCBpcyB0aGUgaGlnaGVzdCBudW1iZXIgd2Uga25vdyBob3cgdG8KKyAqIGhhbmRsZS4KKyAqLworI2RlZmluZSBHSVRfUkVQT19WRVJTSU9OIDAKKyNkZWZpbmUgR0lUX1JFUE9fVkVSU0lPTl9SRUFEIDEKK2V4dGVybiBpbnQgcmVwb3NpdG9yeV9mb3JtYXRfcHJlY2lvdXNfb2JqZWN0czsKK2V4dGVybiBpbnQgcmVwb3NpdG9yeV9mb3JtYXRfd29ya3RyZWVfY29uZmlnOworCisvKgorICogWW91IF9oYXZlXyB0byBpbml0aWFsaXplIGEgYHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdGAgdXNpbmcKKyAqIGA9IFJFUE9TSVRPUllfRk9STUFUX0lOSVRgIGJlZm9yZSBjYWxsaW5nIGByZWFkX3JlcG9zaXRvcnlfZm9ybWF0KClgLgorICovCitzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgeworCWludCB2ZXJzaW9uOworCWludCBwcmVjaW91c19vYmplY3RzOworCWNoYXIgKnBhcnRpYWxfY2xvbmU7IC8qIHZhbHVlIG9mIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICovCisJaW50IHdvcmt0cmVlX2NvbmZpZzsKKwlpbnQgaXNfYmFyZTsKKwlpbnQgaGFzaF9hbGdvOworCWNoYXIgKndvcmtfdHJlZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdW5rbm93bl9leHRlbnNpb25zOworfTsKKworLyoKKyAqIEFsd2F5cyB1c2UgdGhpcyB0byBpbml0aWFsaXplIGEgYHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdGAKKyAqIHRvIGEgd2VsbC1kZWZpbmVkLCBkZWZhdWx0IHN0YXRlIGJlZm9yZSBjYWxsaW5nCisgKiBgcmVhZF9yZXBvc2l0b3J5KClgLgorICovCisjZGVmaW5lIFJFUE9TSVRPUllfRk9STUFUX0lOSVQgXAoreyBcCisJLnZlcnNpb24gPSAtMSwgXAorCS5pc19iYXJlID0gLTEsIFwKKwkuaGFzaF9hbGdvID0gR0lUX0hBU0hfU0hBMSwgXAorCS51bmtub3duX2V4dGVuc2lvbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUCwgXAorfQorCisvKgorICogUmVhZCB0aGUgcmVwb3NpdG9yeSBmb3JtYXQgY2hhcmFjdGVyaXN0aWNzIGZyb20gdGhlIGNvbmZpZyBmaWxlICJwYXRoIiBpbnRvCisgKiAiZm9ybWF0IiBzdHJ1Y3QuIFJldHVybnMgdGhlIG51bWVyaWMgdmVyc2lvbi4gT24gZXJyb3IsIG9yIGlmIG5vIHZlcnNpb24gaXMKKyAqIGZvdW5kIGluIHRoZSBjb25maWd1cmF0aW9uLCAtMSBpcyByZXR1cm5lZCwgZm9ybWF0LT52ZXJzaW9uIGlzIHNldCB0byAtMSwKKyAqIGFuZCBhbGwgb3RoZXIgZmllbGRzIGluIHRoZSBzdHJ1Y3QgYXJlIHNldCB0byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCisgKiAoUkVQT1NJVE9SWV9GT1JNQVRfSU5JVCkuIEFsd2F5cyBpbml0aWFsaXplIHRoZSBzdHJ1Y3QgdXNpbmcKKyAqIFJFUE9TSVRPUllfRk9STUFUX0lOSVQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworaW50IHJlYWRfcmVwb3NpdG9yeV9mb3JtYXQoc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpmb3JtYXQsIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogRnJlZSB0aGUgbWVtb3J5IGhlbGQgb250byBieSBgZm9ybWF0YCwgYnV0IG5vdCB0aGUgc3RydWN0IGl0c2VsZi4KKyAqIChObyBuZWVkIHRvIHVzZSB0aGlzIGFmdGVyIGByZWFkX3JlcG9zaXRvcnlfZm9ybWF0KClgIGZhaWxzLikKKyAqLwordm9pZCBjbGVhcl9yZXBvc2l0b3J5X2Zvcm1hdChzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKmZvcm1hdCk7CisKKy8qCisgKiBWZXJpZnkgdGhhdCB0aGUgcmVwb3NpdG9yeSBkZXNjcmliZWQgYnkgcmVwb3NpdG9yeV9mb3JtYXQgaXMgc29tZXRoaW5nIHdlCisgKiBjYW4gcmVhZC4gSWYgaXQgaXMsIHJldHVybiAwLiBPdGhlcndpc2UsIHJldHVybiAtMSwgYW5kICJlcnIiIHdpbGwgZGVzY3JpYmUKKyAqIGFueSBlcnJvcnMgZW5jb3VudGVyZWQuCisgKi8KK2ludCB2ZXJpZnlfcmVwb3NpdG9yeV9mb3JtYXQoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpmb3JtYXQsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qCisgKiBDaGVjayB0aGUgcmVwb3NpdG9yeSBmb3JtYXQgdmVyc2lvbiBpbiB0aGUgcGF0aCBmb3VuZCBpbiBnZXRfZ2l0X2RpcigpLAorICogYW5kIGRpZSBpZiBpdCBpcyBhIHZlcnNpb24gd2UgZG9uJ3QgdW5kZXJzdGFuZC4gR2VuZXJhbGx5IG9uZSB3b3VsZAorICogc2V0X2dpdF9kaXIoKSBiZWZvcmUgY2FsbGluZyB0aGlzLCBhbmQgdXNlIGl0IG9ubHkgZm9yICJhcmUgd2UgaW4gYSB2YWxpZAorICogcmVwbz8iLgorICovCit2b2lkIGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0KHZvaWQpOworCisjZGVmaW5lIE1USU1FX0NIQU5HRUQJMHgwMDAxCisjZGVmaW5lIENUSU1FX0NIQU5HRUQJMHgwMDAyCisjZGVmaW5lIE9XTkVSX0NIQU5HRUQJMHgwMDA0CisjZGVmaW5lIE1PREVfQ0hBTkdFRCAgICAweDAwMDgKKyNkZWZpbmUgSU5PREVfQ0hBTkdFRCAgIDB4MDAxMAorI2RlZmluZSBEQVRBX0NIQU5HRUQgICAgMHgwMDIwCisjZGVmaW5lIFRZUEVfQ0hBTkdFRCAgICAweDAwNDAKKworLyoKKyAqIFJldHVybiBhbiBhYmJyZXZpYXRlZCBzaGExIHVuaXF1ZSB3aXRoaW4gdGhpcyByZXBvc2l0b3J5J3Mgb2JqZWN0IGRhdGFiYXNlLgorICogVGhlIHJlc3VsdCB3aWxsIGJlIGF0IGxlYXN0IGBsZW5gIGNoYXJhY3RlcnMgbG9uZywgYW5kIHdpbGwgYmUgTlVMCisgKiB0ZXJtaW5hdGVkLgorICoKKyAqIFRoZSBub24tYF9yYCB2ZXJzaW9uIHJldHVybnMgYSBzdGF0aWMgYnVmZmVyIHdoaWNoIHJlbWFpbnMgdmFsaWQgdW50aWwgNAorICogbW9yZSBjYWxscyB0byBmaW5kX3VuaXF1ZV9hYmJyZXYgYXJlIG1hZGUuCisgKgorICogVGhlIGBfcmAgdmFyaWFudCB3cml0ZXMgdG8gYSBidWZmZXIgc3VwcGxpZWQgYnkgdGhlIGNhbGxlciwgd2hpY2ggbXVzdCBiZSBhdAorICogbGVhc3QgYEdJVF9NQVhfSEVYU1ogKyAxYCBieXRlcy4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiB3cml0dGVuIChleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yKS4KKyAqCisgKiBOb3RlIHRoYXQgd2hpbGUgdGhpcyB2ZXJzaW9uIGF2b2lkcyB0aGUgc3RhdGljIGJ1ZmZlciwgaXQgaXMgbm90IGZ1bGx5CisgKiByZWVudHJhbnQsIGFzIGl0IGNhbGxzIGludG8gb3RoZXIgbm9uLXJlZW50cmFudCBnaXQgY29kZS4KKyAqLworY29uc3QgY2hhciAqcmVwb19maW5kX3VuaXF1ZV9hYmJyZXYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGxlbik7CisjZGVmaW5lIGZpbmRfdW5pcXVlX2FiYnJldihvaWQsIGxlbikgcmVwb19maW5kX3VuaXF1ZV9hYmJyZXYodGhlX3JlcG9zaXRvcnksIG9pZCwgbGVuKQoraW50IHJlcG9fZmluZF91bmlxdWVfYWJicmV2X3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNoYXIgKmhleCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgbGVuKTsKKyNkZWZpbmUgZmluZF91bmlxdWVfYWJicmV2X3IoaGV4LCBvaWQsIGxlbikgcmVwb19maW5kX3VuaXF1ZV9hYmJyZXZfcih0aGVfcmVwb3NpdG9yeSwgaGV4LCBvaWQsIGxlbikKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgbnVsbF9vaWQ7CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhc2hjbXAoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMikKK3sKKwkvKgorCSAqIFRlYWNoIHRoZSBjb21waWxlciB0aGF0IHRoZXJlIGFyZSBvbmx5IHR3byBwb3NzaWJpbGl0aWVzIG9mIGhhc2ggc2l6ZQorCSAqIGhlcmUsIHNvIHRoYXQgaXQgY2FuIG9wdGltaXplIGZvciB0aGlzIGNhc2UgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkgKi8KKwlpZiAodGhlX2hhc2hfYWxnby0+cmF3c3ogPT0gR0lUX01BWF9SQVdTWikKKwkJcmV0dXJuIG1lbWNtcChzaGExLCBzaGEyLCBHSVRfTUFYX1JBV1NaKTsKKwlyZXR1cm4gbWVtY21wKHNoYTEsIHNoYTIsIEdJVF9TSEExX1JBV1NaKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2lkY21wKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDEsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDIpCit7CisJcmV0dXJuIGhhc2hjbXAob2lkMS0+aGFzaCwgb2lkMi0+aGFzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhc2hlcShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGEyKQoreworCS8qCisJICogV2Ugd3JpdGUgdGhpcyBoZXJlIGluc3RlYWQgb2YgZGVmZXJyaW5nIHRvIGhhc2hjbXAgc28gdGhhdCB0aGUKKwkgKiBjb21waWxlciBjYW4gcHJvcGVybHkgaW5saW5lIGl0IGFuZCBhdm9pZCBjYWxsaW5nIG1lbWNtcC4KKwkgKi8KKwlpZiAodGhlX2hhc2hfYWxnby0+cmF3c3ogPT0gR0lUX01BWF9SQVdTWikKKwkJcmV0dXJuICFtZW1jbXAoc2hhMSwgc2hhMiwgR0lUX01BWF9SQVdTWik7CisJcmV0dXJuICFtZW1jbXAoc2hhMSwgc2hhMiwgR0lUX1NIQTFfUkFXU1opOworfQorCitzdGF0aWMgaW5saW5lIGludCBvaWRlcShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQxLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQyKQoreworCXJldHVybiBoYXNoZXEob2lkMS0+aGFzaCwgb2lkMi0+aGFzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX251bGxfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gb2lkZXEob2lkLCAmbnVsbF9vaWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaGNweSh1bnNpZ25lZCBjaGFyICpzaGFfZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGFfc3JjKQoreworCW1lbWNweShzaGFfZHN0LCBzaGFfc3JjLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaWRjcHkoc3RydWN0IG9iamVjdF9pZCAqZHN0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpzcmMpCit7CisJbWVtY3B5KGRzdC0+aGFzaCwgc3JjLT5oYXNoLCBHSVRfTUFYX1JBV1NaKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRkdXAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqc3JjKQoreworCXN0cnVjdCBvYmplY3RfaWQgKmRzdCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvYmplY3RfaWQpKTsKKwlvaWRjcHkoZHN0LCBzcmMpOworCXJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYXNoY2xyKHVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJbWVtc2V0KGhhc2gsIDAsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9pZGNscihzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJbWVtc2V0KG9pZC0+aGFzaCwgMCwgR0lUX01BWF9SQVdTWik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaWRyZWFkKHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwltZW1jcHkob2lkLT5oYXNoLCBoYXNoLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2VtcHR5X2Jsb2Jfc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXJldHVybiBoYXNoZXEoc2hhMSwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfYmxvYi0+aGFzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2VtcHR5X2Jsb2Jfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gb2lkZXEob2lkLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV9ibG9iKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZW1wdHlfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuIGhhc2hlcShzaGExLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLT5oYXNoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZW1wdHlfdHJlZV9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBvaWRlcShvaWQsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworfQorCitjb25zdCBjaGFyICplbXB0eV90cmVlX29pZF9oZXgodm9pZCk7Citjb25zdCBjaGFyICplbXB0eV9ibG9iX29pZF9oZXgodm9pZCk7CisKKy8qIHNldCBkZWZhdWx0IHBlcm1pc3Npb25zIGJ5IHBhc3NpbmcgbW9kZSBhcmd1bWVudHMgdG8gb3BlbigyKSAqLworaW50IGdpdF9ta3N0ZW1wc19tb2RlKGNoYXIgKnBhdHRlcm4sIGludCBzdWZmaXhfbGVuLCBpbnQgbW9kZSk7CitpbnQgZ2l0X21rc3RlbXBfbW9kZShjaGFyICpwYXR0ZXJuLCBpbnQgbW9kZSk7CisKKy8qCisgKiBOT1RFIE5PVEUgTk9URSEhCisgKgorICogUEVSTV9VTUFTSywgT0xEX1BFUk1fR1JPVVAgYW5kIE9MRF9QRVJNX0VWRVJZQk9EWSBlbnVtZXJhdGlvbnMgbXVzdAorICogbm90IGJlIGNoYW5nZWQuIE9sZCByZXBvc2l0b3JpZXMgaGF2ZSBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgd3JpdHRlbiBpbgorICogbnVtZXJpYyBmb3JtYXQsIGFuZCB0aGVyZWZvcmUgdGhlc2UgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQgZm9yIGNvbXBhdGliaWxpdHkKKyAqIHJlYXNvbnMuCisgKi8KK2VudW0gc2hhcmVkcmVwbyB7CisJUEVSTV9VTUFTSyAgICAgICAgICA9IDAsCisJT0xEX1BFUk1fR1JPVVAgICAgICA9IDEsCisJT0xEX1BFUk1fRVZFUllCT0RZICA9IDIsCisJUEVSTV9HUk9VUCAgICAgICAgICA9IDA2NjAsCisJUEVSTV9FVkVSWUJPRFkgICAgICA9IDA2NjQKK307CitpbnQgZ2l0X2NvbmZpZ19wZXJtKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworaW50IGFkanVzdF9zaGFyZWRfcGVybShjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIENyZWF0ZSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG5hbWVkIHBhdGgsIHVzaW5nIGNhcmUgdG8gYmUKKyAqIHNvbWV3aGF0IHNhZmUgYWdhaW5zdCByYWNlcy4gUmV0dXJuIG9uZSBvZiB0aGUgc2NsZF9lcnJvciB2YWx1ZXMgdG8KKyAqIGluZGljYXRlIHN1Y2Nlc3MvZmFpbHVyZS4gT24gZXJyb3IsIHNldCBlcnJubyB0byBkZXNjcmliZSB0aGUKKyAqIHByb2JsZW0uCisgKgorICogU0NMRF9WQU5JU0hFRCBpbmRpY2F0ZXMgdGhhdCBvbmUgb2YgdGhlIGFuY2VzdG9yIGRpcmVjdG9yaWVzIG9mIHRoZQorICogcGF0aCBleGlzdGVkIGF0IG9uZSBwb2ludCBkdXJpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgYW5kIHRoZW4KKyAqIHN1ZGRlbmx5IHZhbmlzaGVkLCBwcm9iYWJseSBiZWNhdXNlIGFub3RoZXIgcHJvY2VzcyBwcnVuZWQgdGhlCisgKiBkaXJlY3Rvcnkgd2hpbGUgd2Ugd2VyZSB3b3JraW5nLiAgVG8gYmUgcm9idXN0IGFnYWluc3QgdGhpcyBraW5kIG9mCisgKiByYWNlLCBjYWxsZXJzIG1pZ2h0IHdhbnQgdG8gdHJ5IGludm9raW5nIHRoZSBmdW5jdGlvbiBhZ2FpbiB3aGVuIGl0CisgKiByZXR1cm5zIFNDTERfVkFOSVNIRUQuCisgKgorICogc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcygpIHRlbXBvcmFyaWx5IGNoYW5nZXMgcGF0aCB3aGlsZSBpdAorICogaXMgd29ya2luZyBidXQgcmVzdG9yZXMgaXQgYmVmb3JlIHJldHVybmluZy4KKyAqIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoKSBkb2Vzbid0IG1vZGlmeSBwYXRoLCBldmVuCisgKiB0ZW1wb3JhcmlseS4KKyAqLworZW51bSBzY2xkX2Vycm9yIHsKKwlTQ0xEX09LID0gMCwKKwlTQ0xEX0ZBSUxFRCA9IC0xLAorCVNDTERfUEVSTVMgPSAtMiwKKwlTQ0xEX0VYSVNUUyA9IC0zLAorCVNDTERfVkFOSVNIRUQgPSAtNAorfTsKK2VudW0gc2NsZF9lcnJvciBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGNoYXIgKnBhdGgpOworZW51bSBzY2xkX2Vycm9yIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgcmFjZXByb29mX2NyZWF0ZV9maWxlKCkuIFRoaXMgZnVuY3Rpb24gaXMKKyAqIGV4cGVjdGVkIHRvIGRvIHNvbWV0aGluZyB0aGF0IG1ha2VzIGRpcm5hbWUocGF0aCkgcGVybWFuZW50IGRlc3BpdGUKKyAqIHRoZSBmYWN0IHRoYXQgb3RoZXIgcHJvY2Vzc2VzIG1pZ2h0IGJlIGNsZWFuaW5nIHVwIGVtcHR5CisgKiBkaXJlY3RvcmllcyBhdCB0aGUgc2FtZSB0aW1lLiBVc3VhbGx5IGl0IHdpbGwgY3JlYXRlIGEgZmlsZSBuYW1lZAorICogcGF0aCwgYnV0IGFsdGVybmF0aXZlbHkgaXQgY291bGQgY3JlYXRlIGFub3RoZXIgZmlsZSBpbiB0aGF0CisgKiBkaXJlY3RvcnksIG9yIGV2ZW4gY2hkaXIoKSBpbnRvIHRoYXQgZGlyZWN0b3J5LiBUaGUgZnVuY3Rpb24gc2hvdWxkCisgKiByZXR1cm4gMCBpZiB0aGUgYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBPbiBlcnJvciwgaXQKKyAqIHNob3VsZCByZXR1cm4gYSBub256ZXJvIHJlc3VsdCBhbmQgc2V0IGVycm5vLgorICogcmFjZXByb29mX2NyZWF0ZV9maWxlKCkgdHJlYXRzIHR3byBlcnJubyB2YWx1ZXMgc3BlY2lhbGx5OgorICoKKyAqIC0gRU5PRU5UIC0tIGRpcm5hbWUocGF0aCkgZG9lcyBub3QgZXhpc3QuIEluIHRoaXMgY2FzZSwKKyAqICAgICAgICAgICAgIHJhY2Vwcm9vZl9jcmVhdGVfZmlsZSgpIHRyaWVzIGNyZWF0aW5nIGRpcm5hbWUocGF0aCkKKyAqICAgICAgICAgICAgIChhbmQgYW55IHBhcmVudCBkaXJlY3RvcmllcywgaWYgbmVjZXNzYXJ5KSBhbmQgY2FsbHMKKyAqICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBhZ2Fpbi4KKyAqCisgKiAtIEVJU0RJUiAtLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnkuIEluIHRoaXMKKyAqICAgICAgICAgICAgIGNhc2UsIHJhY2Vwcm9vZl9jcmVhdGVfZmlsZSgpIHJlbW92ZXMgdGhlIGRpcmVjdG9yeSBpZgorICogICAgICAgICAgICAgaXQgaXMgZW1wdHkgKGFuZCByZWN1cnNpdmVseSBhbnkgZW1wdHkgZGlyZWN0b3JpZXMgdGhhdAorICogICAgICAgICAgICAgaXQgY29udGFpbnMpIGFuZCBjYWxscyB0aGUgZnVuY3Rpb24gYWdhaW4uCisgKgorICogQW55IG90aGVyIGVycm5vIGNhdXNlcyByYWNlcHJvb2ZfY3JlYXRlX2ZpbGUoKSB0byBmYWlsIHdpdGggdGhlCisgKiBjYWxsYmFjaydzIHJldHVybiB2YWx1ZSBhbmQgZXJybm8uCisgKgorICogT2J2aW91c2x5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBPSyB3aXRoIGJlaW5nIGNhbGxlZCBhZ2FpbiBpZiBpdAorICogZmFpbHMgd2l0aCBFTk9FTlQgb3IgRUlTRElSLiBJbiBvdGhlciBzY2VuYXJpb3MgaXQgd2lsbCBub3QgYmUKKyAqIGNhbGxlZCBhZ2Fpbi4KKyAqLwordHlwZWRlZiBpbnQgY3JlYXRlX2ZpbGVfZm4oY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqY2IpOworCisvKgorICogQ3JlYXRlIGEgZmlsZSBpbiBkaXJuYW1lKHBhdGgpIGJ5IGNhbGxpbmcgZm4sIGNyZWF0aW5nIGxlYWRpbmcKKyAqIGRpcmVjdG9yaWVzIGlmIG5lY2Vzc2FyeS4gUmV0cnkgYSBmZXcgdGltZXMgaW4gY2FzZSB3ZSBhcmUgcmFjaW5nCisgKiB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IGlzIHRyeWluZyB0byBjbGVhbiB1cCB0aGUgZGlyZWN0b3J5IHRoYXQKKyAqIGNvbnRhaW5zIHBhdGguIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgY3JlYXRlX2ZpbGVfZm4gZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogUmV0dXJuIHRoZSB2YWx1ZSBhbmQgc2V0IHRoZSBlcnJubyB0aGF0IHJlc3VsdGVkIGZyb20gdGhlIG1vc3QKKyAqIHJlY2VudCBjYWxsIG9mIGZuLiBmbiBpcyBhbHdheXMgY2FsbGVkIGF0IGxlYXN0IG9uY2UsIGFuZCB3aWxsIGJlCisgKiBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgaWYgaXQgcmV0dXJucyBFTk9FTlQgb3IgRUlTRElSLgorICovCitpbnQgcmFjZXByb29mX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNyZWF0ZV9maWxlX2ZuIGZuLCB2b2lkICpjYik7CisKK2ludCBta2Rpcl9pbl9naXRkaXIoY29uc3QgY2hhciAqcGF0aCk7CitjaGFyICpleHBhbmRfdXNlcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZWFsX2hvbWUpOworY29uc3QgY2hhciAqZW50ZXJfcmVwbyhjb25zdCBjaGFyICpwYXRoLCBpbnQgc3RyaWN0KTsKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2Fic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfZGlyX3NlcChwYXRoWzBdKSB8fCBoYXNfZG9zX2RyaXZlX3ByZWZpeChwYXRoKTsKK30KK2ludCBpc19kaXJlY3RvcnkoY29uc3QgY2hhciAqKTsKK2NoYXIgKnN0cmJ1Zl9yZWFscGF0aChzdHJ1Y3Qgc3RyYnVmICpyZXNvbHZlZCwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgaW50IGRpZV9vbl9lcnJvcik7Citjb25zdCBjaGFyICpyZWFsX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7Citjb25zdCBjaGFyICpyZWFsX3BhdGhfaWZfdmFsaWQoY29uc3QgY2hhciAqcGF0aCk7CitjaGFyICpyZWFsX3BhdGhkdXAoY29uc3QgY2hhciAqcGF0aCwgaW50IGRpZV9vbl9lcnJvcik7Citjb25zdCBjaGFyICphYnNvbHV0ZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqYWJzb2x1dGVfcGF0aGR1cChjb25zdCBjaGFyICpwYXRoKTsKK2NvbnN0IGNoYXIgKnJlbW92ZV9sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqaW4sIGNvbnN0IGNoYXIgKnByZWZpeCk7Citjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdHJidWYgKnNiKTsKK2ludCBub3JtYWxpemVfcGF0aF9jb3B5X2xlbihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50ICpwcmVmaXhfbGVuKTsKK2ludCBub3JtYWxpemVfcGF0aF9jb3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKK2ludCBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnByZWZpeGVzKTsKK2NoYXIgKnN0cmlwX3BhdGhfc3VmZml4KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CitpbnQgZGFlbW9uX2F2b2lkX2FsaWFzKGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogVGhlc2UgZnVuY3Rpb25zIG1hdGNoIHRoZWlyIGlzX2hmc19kb3RnaXQoKSBjb3VudGVycGFydHM7IHNlZSB1dGY4LmggZm9yCisgKiBkZXRhaWxzLgorICovCitpbnQgaXNfbnRmc19kb3RnaXQoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgaXNfbnRmc19kb3RnaXRtb2R1bGVzKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGlzX250ZnNfZG90Z2l0aWdub3JlKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGlzX250ZnNfZG90Z2l0YXR0cmlidXRlcyhjb25zdCBjaGFyICpuYW1lKTsKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZmYgInN0ciIgY291bGQgYmUgY29uZnVzZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uIHdoZW4KKyAqIHBhc3NlZCB0byBhIHN1Yi1wcm9ncmFtIGxpa2UgInNzaCIuIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGgKKyAqIHNoZWxsLXF1b3RpbmcsIHdoaWNoIHNob3VsZCBiZSBoYW5kbGVkIHNlcGFyYXRlbHk7IHdlJ3JlIGFzc3VtaW5nIGhlcmUgdGhhdAorICogdGhlIHN0cmluZyBtYWtlcyBpdCB2ZXJiYXRpbSB0byB0aGUgc3ViLXByb2dyYW0uCisgKi8KK2ludCBsb29rc19saWtlX2NvbW1hbmRfbGluZV9vcHRpb24oY29uc3QgY2hhciAqc3RyKTsKKworLyoqCisgKiBSZXR1cm4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIHdpdGggdGhlIGV2YWx1YXRpb24gb2YKKyAqICIkWERHX0NPTkZJR19IT01FL2dpdC8kZmlsZW5hbWUiIGlmICRYREdfQ09ORklHX0hPTUUgaXMgbm9uLWVtcHR5LCBvdGhlcndpc2UKKyAqICIkSE9NRS8uY29uZmlnL2dpdC8kZmlsZW5hbWUiLiBSZXR1cm4gTlVMTCB1cG9uIGVycm9yLgorICovCitjaGFyICp4ZGdfY29uZmlnX2hvbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpOworCisvKioKKyAqIFJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZgorICogIiRYREdfQ0FDSEVfSE9NRS9naXQvJGZpbGVuYW1lIiBpZiAkWERHX0NBQ0hFX0hPTUUgaXMgbm9uLWVtcHR5LCBvdGhlcndpc2UKKyAqICIkSE9NRS8uY2FjaGUvZ2l0LyRmaWxlbmFtZSIuIFJldHVybiBOVUxMIHVwb24gZXJyb3IuCisgKi8KK2NoYXIgKnhkZ19jYWNoZV9ob21lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworaW50IGdpdF9vcGVuX2Nsb2V4ZWMoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKTsKKyNkZWZpbmUgZ2l0X29wZW4obmFtZSkgZ2l0X29wZW5fY2xvZXhlYyhuYW1lLCBPX1JET05MWSkKK2ludCB1bnBhY2tfbG9vc2VfaGVhZGVyKGdpdF96c3RyZWFtICpzdHJlYW0sIHVuc2lnbmVkIGNoYXIgKm1hcCwgdW5zaWduZWQgbG9uZyBtYXBzaXplLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmc2l6KTsKK2ludCBwYXJzZV9sb29zZV9oZWFkZXIoY29uc3QgY2hhciAqaGRyLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CisKK2ludCBjaGVja19vYmplY3Rfc2lnbmF0dXJlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqdHlwZSk7CisKK2ludCBmaW5hbGl6ZV9vYmplY3RfZmlsZShjb25zdCBjaGFyICp0bXBmaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKKy8qIEhlbHBlciB0byBjaGVjayBhbmQgInRvdWNoIiBhIGZpbGUgKi8KK2ludCBjaGVja19hbmRfZnJlc2hlbl9maWxlKGNvbnN0IGNoYXIgKmZuLCBpbnQgZnJlc2hlbik7CisKK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciBoZXh2YWxfdGFibGVbMjU2XTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGhleHZhbCh1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGhleHZhbF90YWJsZVtjXTsKK30KKworLyoKKyAqIENvbnZlcnQgdHdvIGNvbnNlY3V0aXZlIGhleGFkZWNpbWFsIGRpZ2l0cyBpbnRvIGEgY2hhci4gIFJldHVybiBhCisgKiBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4gIERvbid0IHJ1biBvdmVyIHRoZSBlbmQgb2Ygc2hvcnQgc3RyaW5ncy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaGV4MmNocihjb25zdCBjaGFyICpzKQoreworCXVuc2lnbmVkIGludCB2YWwgPSBoZXh2YWwoc1swXSk7CisJcmV0dXJuICh2YWwgJiB+MHhmKSA/IHZhbCA6ICh2YWwgPDwgNCkgfCBoZXh2YWwoc1sxXSk7Cit9CisKKy8qIENvbnZlcnQgdG8vZnJvbSBoZXgvc2hhMSByZXByZXNlbnRhdGlvbiAqLworI2RlZmluZSBNSU5JTVVNX0FCQlJFViBtaW5pbXVtX2FiYnJldgorI2RlZmluZSBERUZBVUxUX0FCQlJFViBkZWZhdWx0X2FiYnJldgorCisvKiB1c2VkIHdoZW4gdGhlIGNvZGUgZG9lcyBub3Qga25vdyBvciBjYXJlIHdoYXQgdGhlIGRlZmF1bHQgYWJicmV2IGlzICovCisjZGVmaW5lIEZBTExCQUNLX0RFRkFVTFRfQUJCUkVWIDcKKworc3RydWN0IG9iamVjdF9jb250ZXh0IHsKKwl1bnNpZ25lZCBzaG9ydCBtb2RlOworCS8qCisJICogc3ltbGlua19wYXRoIGlzIG9ubHkgdXNlZCBieSBnZXRfdHJlZV9lbnRyeV9mb2xsb3dfc3ltbGlua3MsCisJICogYW5kIG9ubHkgZm9yIHN5bWxpbmtzIHRoYXQgcG9pbnQgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeS4KKwkgKi8KKwlzdHJ1Y3Qgc3RyYnVmIHN5bWxpbmtfcGF0aDsKKwkvKgorCSAqIElmIEdFVF9PSURfUkVDT1JEX1BBVEggaXMgc2V0LCB0aGlzIHdpbGwgcmVjb3JkIHBhdGggKGlmIGFueSkKKwkgKiBmb3VuZCB3aGVuIHJlc29sdmluZyB0aGUgbmFtZS4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKwkgKiByZWxlYXNpbmcgdGhlIG1lbW9yeS4KKwkgKi8KKwljaGFyICpwYXRoOworfTsKKworI2RlZmluZSBHRVRfT0lEX1FVSUVUTFkgICAgICAgICAgIDAxCisjZGVmaW5lIEdFVF9PSURfQ09NTUlUICAgICAgICAgICAgMDIKKyNkZWZpbmUgR0VUX09JRF9DT01NSVRUSVNIICAgICAgICAwNAorI2RlZmluZSBHRVRfT0lEX1RSRUUgICAgICAgICAgICAgMDEwCisjZGVmaW5lIEdFVF9PSURfVFJFRUlTSCAgICAgICAgICAwMjAKKyNkZWZpbmUgR0VUX09JRF9CTE9CICAgICAgICAgICAgIDA0MAorI2RlZmluZSBHRVRfT0lEX0ZPTExPV19TWU1MSU5LUyAwMTAwCisjZGVmaW5lIEdFVF9PSURfUkVDT1JEX1BBVEggICAgIDAyMDAKKyNkZWZpbmUgR0VUX09JRF9PTkxZX1RPX0RJRSAgICAwNDAwMAorCisjZGVmaW5lIEdFVF9PSURfRElTQU1CSUdVQVRPUlMgXAorCShHRVRfT0lEX0NPTU1JVCB8IEdFVF9PSURfQ09NTUlUVElTSCB8IFwKKwlHRVRfT0lEX1RSRUUgfCBHRVRfT0lEX1RSRUVJU0ggfCBcCisJR0VUX09JRF9CTE9CKQorCitlbnVtIGdldF9vaWRfcmVzdWx0IHsKKwlGT1VORCA9IDAsCisJTUlTU0lOR19PQkpFQ1QgPSAtMSwgLyogVGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgbWlzc2luZyAqLworCVNIT1JUX05BTUVfQU1CSUdVT1VTID0gLTIsCisJLyogVGhlIGZvbGxvd2luZyBvbmx5IGFwcGx5IHdoZW4gc3ltbGlua3MgYXJlIGZvbGxvd2VkICovCisJREFOR0xJTkdfU1lNTElOSyA9IC00LCAvKgorCQkJCSogVGhlIGluaXRpYWwgc3ltbGluayBpcyB0aGVyZSwgYnV0CisJCQkJKiAodHJhbnNpdGl2ZWx5KSBwb2ludHMgdG8gYSBtaXNzaW5nCisJCQkJKiBpbi10cmVlIGZpbGUKKwkJCQkqLworCVNZTUxJTktfTE9PUCA9IC01LAorCU5PVF9ESVIgPSAtNiwgLyoKKwkJICAgICAgICogU29tZXdoZXJlIGFsb25nIHRoZSBzeW1saW5rIGNoYWluLCBhIHBhdGggaXMKKwkJICAgICAgICogcmVxdWVzdGVkIHdoaWNoIGNvbnRhaW5zIGEgZmlsZSBhcyBhCisJCSAgICAgICAqIG5vbi1maW5hbCBlbGVtZW50LgorCQkgICAgICAgKi8KK307CisKK2ludCByZXBvX2dldF9vaWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK2ludCBnZXRfb2lkZihzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2ludCByZXBvX2dldF9vaWRfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgcmVwb19nZXRfb2lkX2NvbW1pdHRpc2goc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK2ludCByZXBvX2dldF9vaWRfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IHJlcG9fZ2V0X29pZF90cmVlaXNoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgcmVwb19nZXRfb2lkX2Jsb2Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK2ludCByZXBvX2dldF9vaWRfbWIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK3ZvaWQgbWF5YmVfZGllX29uX21pc3NwZWx0X29iamVjdF9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgpOworZW51bSBnZXRfb2lkX3Jlc3VsdCBnZXRfb2lkX3dpdGhfY29udGV4dChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqc3RyLAorCQkJCQkgdW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJIHN0cnVjdCBvYmplY3RfY29udGV4dCAqb2MpOworCisjZGVmaW5lIGdldF9vaWQoc3RyLCBvaWQpCQlyZXBvX2dldF9vaWQodGhlX3JlcG9zaXRvcnksIHN0ciwgb2lkKQorI2RlZmluZSBnZXRfb2lkX2NvbW1pdChzdHIsIG9pZCkJcmVwb19nZXRfb2lkX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgc3RyLCBvaWQpCisjZGVmaW5lIGdldF9vaWRfY29tbWl0dGlzaChzdHIsIG9pZCkJcmVwb19nZXRfb2lkX2NvbW1pdHRpc2godGhlX3JlcG9zaXRvcnksIHN0ciwgb2lkKQorI2RlZmluZSBnZXRfb2lkX3RyZWUoc3RyLCBvaWQpCQlyZXBvX2dldF9vaWRfdHJlZSh0aGVfcmVwb3NpdG9yeSwgc3RyLCBvaWQpCisjZGVmaW5lIGdldF9vaWRfdHJlZWlzaChzdHIsIG9pZCkJcmVwb19nZXRfb2lkX3RyZWVpc2godGhlX3JlcG9zaXRvcnksIHN0ciwgb2lkKQorI2RlZmluZSBnZXRfb2lkX2Jsb2Ioc3RyLCBvaWQpCQlyZXBvX2dldF9vaWRfYmxvYih0aGVfcmVwb3NpdG9yeSwgc3RyLCBvaWQpCisjZGVmaW5lIGdldF9vaWRfbWIoc3RyLCBvaWQpIAkJcmVwb19nZXRfb2lkX21iKHRoZV9yZXBvc2l0b3J5LCBzdHIsIG9pZCkKKwordHlwZWRlZiBpbnQgZWFjaF9hYmJyZXZfZm4oY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICopOworaW50IHJlcG9fZm9yX2VhY2hfYWJicmV2KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfYWJicmV2X2ZuLCB2b2lkICopOworI2RlZmluZSBmb3JfZWFjaF9hYmJyZXYocHJlZml4LCBmbiwgZGF0YSkgcmVwb19mb3JfZWFjaF9hYmJyZXYodGhlX3JlcG9zaXRvcnksIHByZWZpeCwgZm4sIGRhdGEpCisKK2ludCBzZXRfZGlzYW1iaWd1YXRlX2hpbnRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworCisvKgorICogVHJ5IHRvIHJlYWQgYSBTSEExIGluIGhleGFkZWNpbWFsIGZvcm1hdCBmcm9tIHRoZSA0MCBjaGFyYWN0ZXJzCisgKiBzdGFydGluZyBhdCBoZXguICBXcml0ZSB0aGUgMjAtYnl0ZSByZXN1bHQgdG8gc2hhMSBpbiBiaW5hcnkgZm9ybS4KKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MuICBSZWFkaW5nIHN0b3BzIGlmIGEgTlVMIGlzIGVuY291bnRlcmVkIGluIHRoZQorICogaW5wdXQsIHNvIGl0IGlzIHNhZmUgdG8gcGFzcyB0aGlzIGZ1bmN0aW9uIGFuIGFyYml0cmFyeQorICogbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqLworaW50IGdldF9zaGExX2hleChjb25zdCBjaGFyICpoZXgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworaW50IGdldF9vaWRfaGV4KGNvbnN0IGNoYXIgKmhleCwgc3RydWN0IG9iamVjdF9pZCAqc2hhMSk7CisKKy8qCisgKiBSZWFkIGBsZW5gIHBhaXJzIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyBmcm9tIGBoZXhgIGFuZCB3cml0ZSB0aGUKKyAqIHZhbHVlcyB0byBgYmluYXJ5YCBhcyBgbGVuYCBieXRlcy4gUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLTEgaWYKKyAqIHRoZSBpbnB1dCBkb2VzIG5vdCBjb25zaXN0IG9mIGhleCBkaWdpdHMpLgorICovCitpbnQgaGV4X3RvX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJpbmFyeSwgY29uc3QgY2hhciAqaGV4LCBzaXplX3QgbGVuKTsKKworLyoKKyAqIENvbnZlcnQgYSBiaW5hcnkgaGFzaCBpbiAidW5zaWduZWQgY2hhciBbXSIgb3IgYW4gb2JqZWN0IG5hbWUgaW4KKyAqICJzdHJ1Y3Qgb2JqZWN0X2lkICoiIHRvIGl0cyBoZXggZXF1aXZhbGVudC4gVGhlIGBfcmAgdmFyaWFudCBpcyByZWVudHJhbnQsCisgKiBhbmQgd3JpdGVzIHRoZSBOVUwtdGVybWluYXRlZCBvdXRwdXQgdG8gdGhlIGJ1ZmZlciBgb3V0YCwgd2hpY2ggbXVzdCBiZSBhdAorICogbGVhc3QgYEdJVF9NQVhfSEVYU1ogKyAxYCBieXRlcywgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIG91dCBmb3IKKyAqIGNvbnZlbmllbmNlLgorICoKKyAqIFRoZSBub24tYF9yYCB2YXJpYW50IHJldHVybnMgYSBzdGF0aWMgYnVmZmVyLCBidXQgdXNlcyBhIHJpbmcgb2YgNAorICogYnVmZmVycywgbWFraW5nIGl0IHNhZmUgdG8gbWFrZSBtdWx0aXBsZSBjYWxscyBmb3IgYSBzaW5nbGUgc3RhdGVtZW50LCBsaWtlOgorICoKKyAqICAgcHJpbnRmKCIlcyAtPiAlcyIsIGhhc2hfdG9faGV4KG9uZSksIGhhc2hfdG9faGV4KHR3bykpOworICogICBwcmludGYoIiVzIC0+ICVzIiwgb2lkX3RvX2hleChvbmUpLCBvaWRfdG9faGV4KHR3bykpOworICovCitjaGFyICpoYXNoX3RvX2hleF9hbGdvcF9yKGNoYXIgKmJ1ZmZlciwgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKik7CitjaGFyICpvaWRfdG9faGV4X3IoY2hhciAqb3V0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworY2hhciAqaGFzaF90b19oZXhfYWxnb3AoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKik7CS8qIHN0YXRpYyBidWZmZXIgcmVzdWx0ISAqLworY2hhciAqaGFzaF90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCk7CQkJCQkJLyogc2FtZSBzdGF0aWMgYnVmZmVyICovCitjaGFyICpvaWRfdG9faGV4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CQkJCQkJLyogc2FtZSBzdGF0aWMgYnVmZmVyICovCisKKy8qCisgKiBQYXJzZSBhIDQwLWNoYXJhY3RlciBoZXhhZGVjaW1hbCBvYmplY3QgSUQgc3RhcnRpbmcgZnJvbSBoZXgsIHVwZGF0aW5nIHRoZQorICogcG9pbnRlciBzcGVjaWZpZWQgYnkgZW5kIHdoZW4gcGFyc2luZyBzdG9wcy4gIFRoZSByZXN1bHRpbmcgb2JqZWN0IElEIGlzCisgKiBzdG9yZWQgaW4gb2lkLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuICBQYXJzaW5nIHdpbGwgc3RvcCBvbiB0aGUgZmlyc3QgTlVMIG9yCisgKiBvdGhlciBpbnZhbGlkIGNoYXJhY3Rlci4gIGVuZCBpcyBvbmx5IHVwZGF0ZWQgb24gc3VjY2Vzczsgb3RoZXJ3aXNlLCBpdCBpcworICogdW5tb2RpZmllZC4KKyAqLworaW50IHBhcnNlX29pZF9oZXgoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKiplbmQpOworCisvKgorICogVGhpcyByZWFkcyBzaG9ydC1oYW5kIHN5bnRheCB0aGF0IG5vdCBvbmx5IGV2YWx1YXRlcyB0byBhIGNvbW1pdAorICogb2JqZWN0IG5hbWUsIGJ1dCBhbHNvIGNhbiBhY3QgYXMgaWYgdGhlIGVuZCB1c2VyIHNwZWxsZWQgdGhlIG5hbWUKKyAqIG9mIHRoZSBicmFuY2ggZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorICoKKyAqIC0gIkB7LU59IiBmaW5kcyB0aGUgbmFtZSBvZiB0aGUgTnRoIHByZXZpb3VzIGJyYW5jaCB3ZSB3ZXJlIG9uLCBhbmQKKyAqICAgcGxhY2VzIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggaW4gdGhlIGdpdmVuIGJ1ZiBhbmQgcmV0dXJucyB0aGUKKyAqICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGFyc2VkIGlmIHN1Y2Nlc3NmdWwuCisgKgorICogLSAiPGJyYW5jaD5Ae3Vwc3RyZWFtfSIgZmluZHMgdGhlIG5hbWUgb2YgdGhlIG90aGVyIHJlZiB0aGF0CisgKiAgIDxicmFuY2g+IGlzIGNvbmZpZ3VyZWQgdG8gbWVyZ2Ugd2l0aCAobWlzc2luZyA8YnJhbmNoPiBkZWZhdWx0cworICogICB0byB0aGUgY3VycmVudCBicmFuY2gpLCBhbmQgcGxhY2VzIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggaW4gdGhlCisgKiAgIGdpdmVuIGJ1ZiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGFyc2VkIGlmCisgKiAgIHN1Y2Nlc3NmdWwuCisgKgorICogSWYgdGhlIGlucHV0IGlzIG5vdCBvZiB0aGUgYWNjZXB0ZWQgZm9ybWF0LCBpdCByZXR1cm5zIGEgbmVnYXRpdmUKKyAqIG51bWJlciB0byBzaWduYWwgYW4gZXJyb3IuCisgKgorICogSWYgdGhlIGlucHV0IHdhcyBvayBidXQgdGhlcmUgYXJlIG5vdCBOIGJyYW5jaCBzd2l0Y2hlcyBpbiB0aGUKKyAqIHJlZmxvZywgaXQgcmV0dXJucyAwLgorICoKKyAqIElmICJhbGxvd2VkIiBpcyBub24temVybywgaXQgaXMgYSB0cmVhdGVkIGFzIGEgYml0ZmllbGQgb2YgYWxsb3dhYmxlCisgKiBleHBhbnNpb25zOiBsb2NhbCBicmFuY2hlcyAoInJlZnMvaGVhZHMvIiksIHJlbW90ZSBicmFuY2hlcworICogKCJyZWZzL3JlbW90ZXMvIiksIG9yICJIRUFEIi4gSWYgbm8gImFsbG93ZWQiIGJpdHMgYXJlIHNldCwgYW55IGV4cGFuc2lvbiBpcworICogYWxsb3dlZCwgZXZlbiBvbmVzIHRvIHJlZnMgb3V0c2lkZSBvZiB0aG9zZSBuYW1lc3BhY2VzLgorICovCisjZGVmaW5lIElOVEVSUFJFVF9CUkFOQ0hfTE9DQUwgKDE8PDApCisjZGVmaW5lIElOVEVSUFJFVF9CUkFOQ0hfUkVNT1RFICgxPDwxKQorI2RlZmluZSBJTlRFUlBSRVRfQlJBTkNIX0hFQUQgKDE8PDIpCitpbnQgcmVwb19pbnRlcnByZXRfYnJhbmNoX25hbWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICAgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCSAgICAgICB1bnNpZ25lZCBhbGxvd2VkKTsKKyNkZWZpbmUgaW50ZXJwcmV0X2JyYW5jaF9uYW1lKHN0ciwgbGVuLCBidWYsIGFsbG93ZWQpIFwKKwlyZXBvX2ludGVycHJldF9icmFuY2hfbmFtZSh0aGVfcmVwb3NpdG9yeSwgc3RyLCBsZW4sIGJ1ZiwgYWxsb3dlZCkKKworaW50IHZhbGlkYXRlX2hlYWRyZWYoY29uc3QgY2hhciAqcmVmKTsKKworaW50IGJhc2VfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IG1vZGUxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBtb2RlMik7CitpbnQgZGZfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IG1vZGUxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBtb2RlMik7CitpbnQgbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqbmFtZTIsIHNpemVfdCBsZW4yKTsKK2ludCBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIGludCBsZW4xLCBpbnQgc3RhZ2UxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBzdGFnZTIpOworCit2b2lkICpyZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSBjb25zdCBjaGFyICpyZXF1aXJlZF90eXBlLAorCQkJCSB1bnNpZ25lZCBsb25nICpzaXplLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRfcmV0KTsKKworc3RydWN0IG9iamVjdCAqcmVwb19wZWVsX3RvX3R5cGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0ICpvLCBlbnVtIG9iamVjdF90eXBlKTsKKyNkZWZpbmUgcGVlbF90b190eXBlKG5hbWUsIG5hbWVsZW4sIG9iaiwgdHlwZSkgXAorCXJlcG9fcGVlbF90b190eXBlKHRoZV9yZXBvc2l0b3J5LCBuYW1lLCBuYW1lbGVuLCBvYmosIHR5cGUpCisKK2VudW0gZGF0ZV9tb2RlX3R5cGUgeworCURBVEVfTk9STUFMID0gMCwKKwlEQVRFX0hVTUFOLAorCURBVEVfUkVMQVRJVkUsCisJREFURV9TSE9SVCwKKwlEQVRFX0lTTzg2MDEsCisJREFURV9JU084NjAxX1NUUklDVCwKKwlEQVRFX1JGQzI4MjIsCisJREFURV9TVFJGVElNRSwKKwlEQVRFX1JBVywKKwlEQVRFX1VOSVgKK307CisKK3N0cnVjdCBkYXRlX21vZGUgeworCWVudW0gZGF0ZV9tb2RlX3R5cGUgdHlwZTsKKwljb25zdCBjaGFyICpzdHJmdGltZV9mbXQ7CisJaW50IGxvY2FsOworfTsKKworLyoKKyAqIENvbnZlbmllbmNlIGhlbHBlciBmb3IgcGFzc2luZyBhIGNvbnN0YW50IHR5cGUsIGxpa2U6CisgKgorICogICBzaG93X2RhdGUodCwgdHosIERBVEVfTU9ERShOT1JNQUwpKTsKKyAqLworI2RlZmluZSBEQVRFX01PREUodCkgZGF0ZV9tb2RlX2Zyb21fdHlwZShEQVRFXyMjdCkKK3N0cnVjdCBkYXRlX21vZGUgKmRhdGVfbW9kZV9mcm9tX3R5cGUoZW51bSBkYXRlX21vZGVfdHlwZSB0eXBlKTsKKworY29uc3QgY2hhciAqc2hvd19kYXRlKHRpbWVzdGFtcF90IHRpbWUsIGludCB0aW1lem9uZSwgY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqbW9kZSk7Cit2b2lkIHNob3dfZGF0ZV9yZWxhdGl2ZSh0aW1lc3RhbXBfdCB0aW1lLCBzdHJ1Y3Qgc3RyYnVmICp0aW1lYnVmKTsKK3ZvaWQgc2hvd19kYXRlX2h1bWFuKHRpbWVzdGFtcF90IHRpbWUsIGludCB0eiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdywKKwkJCXN0cnVjdCBzdHJidWYgKnRpbWVidWYpOworaW50IHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgc3RydWN0IHN0cmJ1ZiAqb3V0KTsKK2ludCBwYXJzZV9kYXRlX2Jhc2ljKGNvbnN0IGNoYXIgKmRhdGUsIHRpbWVzdGFtcF90ICp0aW1lc3RhbXAsIGludCAqb2Zmc2V0KTsKK2ludCBwYXJzZV9leHBpcnlfZGF0ZShjb25zdCBjaGFyICpkYXRlLCB0aW1lc3RhbXBfdCAqdGltZXN0YW1wKTsKK3ZvaWQgZGF0ZXN0YW1wKHN0cnVjdCBzdHJidWYgKm91dCk7CisjZGVmaW5lIGFwcHJveGlkYXRlKHMpIGFwcHJveGlkYXRlX2NhcmVmdWwoKHMpLCBOVUxMKQordGltZXN0YW1wX3QgYXBwcm94aWRhdGVfY2FyZWZ1bChjb25zdCBjaGFyICosIGludCAqKTsKK3RpbWVzdGFtcF90IGFwcHJveGlkYXRlX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmRhdGUpOwordm9pZCBwYXJzZV9kYXRlX2Zvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCBkYXRlX21vZGUgKm1vZGUpOworaW50IGRhdGVfb3ZlcmZsb3dzKHRpbWVzdGFtcF90IGRhdGUpOworCisjZGVmaW5lIElERU5UX1NUUklDVAkgICAgICAgMQorI2RlZmluZSBJREVOVF9OT19EQVRFCSAgICAgICAyCisjZGVmaW5lIElERU5UX05PX05BTUUJICAgICAgIDQKKworZW51bSB3YW50X2lkZW50IHsKKwlXQU5UX0JMQU5LX0lERU5ULAorCVdBTlRfQVVUSE9SX0lERU5ULAorCVdBTlRfQ09NTUlUVEVSX0lERU5UCit9OworCitjb25zdCBjaGFyICpnaXRfYXV0aG9yX2luZm8oaW50KTsKK2NvbnN0IGNoYXIgKmdpdF9jb21taXR0ZXJfaW5mbyhpbnQpOworY29uc3QgY2hhciAqZm10X2lkZW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmVtYWlsLAorCQkgICAgICBlbnVtIHdhbnRfaWRlbnQgd2hvc2VfaWRlbnQsCisJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGVfc3RyLCBpbnQpOworY29uc3QgY2hhciAqZm10X25hbWUoZW51bSB3YW50X2lkZW50KTsKK2NvbnN0IGNoYXIgKmlkZW50X2RlZmF1bHRfbmFtZSh2b2lkKTsKK2NvbnN0IGNoYXIgKmlkZW50X2RlZmF1bHRfZW1haWwodm9pZCk7Citjb25zdCBjaGFyICpnaXRfZWRpdG9yKHZvaWQpOworY29uc3QgY2hhciAqZ2l0X3NlcXVlbmNlX2VkaXRvcih2b2lkKTsKK2NvbnN0IGNoYXIgKmdpdF9wYWdlcihpbnQgc3Rkb3V0X2lzX3R0eSk7CitpbnQgaXNfdGVybWluYWxfZHVtYih2b2lkKTsKK2ludCBnaXRfaWRlbnRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworLyoKKyAqIFByZXBhcmUgYW4gaWRlbnQgdG8gZmFsbCBiYWNrIG9uIGlmIHRoZSB1c2VyIGRpZG4ndCBjb25maWd1cmUgaXQuCisgKi8KK3ZvaWQgcHJlcGFyZV9mYWxsYmFja19pZGVudChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICplbWFpbCk7Cit2b2lkIHJlc2V0X2lkZW50X2RhdGUodm9pZCk7CisKK3N0cnVjdCBpZGVudF9zcGxpdCB7CisJY29uc3QgY2hhciAqbmFtZV9iZWdpbjsKKwljb25zdCBjaGFyICpuYW1lX2VuZDsKKwljb25zdCBjaGFyICptYWlsX2JlZ2luOworCWNvbnN0IGNoYXIgKm1haWxfZW5kOworCWNvbnN0IGNoYXIgKmRhdGVfYmVnaW47CisJY29uc3QgY2hhciAqZGF0ZV9lbmQ7CisJY29uc3QgY2hhciAqdHpfYmVnaW47CisJY29uc3QgY2hhciAqdHpfZW5kOworfTsKKy8qCisgKiBTaWduYWxzIGFuIHN1Y2Nlc3Mgd2l0aCAwLCBidXQgdGltZSBwYXJ0IG9mIHRoZSByZXN1bHQgbWF5IGJlIE5VTEwKKyAqIGlmIHRoZSBpbnB1dCBsYWNrcyB0aW1lc3RhbXAgYW5kIHpvbmUKKyAqLworaW50IHNwbGl0X2lkZW50X2xpbmUoc3RydWN0IGlkZW50X3NwbGl0ICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKworLyoKKyAqIExpa2Ugc2hvd19kYXRlLCBidXQgcHVsbCB0aGUgdGltZXN0YW1wIGFuZCB0eiBwYXJhbWV0ZXJzIGZyb20KKyAqIHRoZSBpZGVudF9zcGxpdC4gSXQgd2lsbCBhbHNvIHNhbml0eS1jaGVjayB0aGUgdmFsdWVzIGFuZCBwcm9kdWNlCisgKiBhIHdlbGwta25vd24gc2VudGluZWwgZGF0ZSBpZiB0aGV5IGFwcGVhciBib2d1cy4KKyAqLworY29uc3QgY2hhciAqc2hvd19pZGVudF9kYXRlKGNvbnN0IHN0cnVjdCBpZGVudF9zcGxpdCAqaWQsCisJCQkgICAgY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqbW9kZSk7CisKKy8qCisgKiBDb21wYXJlIHNwbGl0IGlkZW50cyBmb3IgZXF1YWxpdHkgb3Igc3RyaWN0IG9yZGVyaW5nLiBOb3RlIHRoYXQgd2UKKyAqIGNvbXBhcmUgb25seSB0aGUgaWRlbnQgcGFydCBvZiB0aGUgbGluZSwgaWdub3JpbmcgYW55IHRpbWVzdGFtcC4KKyAqCisgKiBCZWNhdXNlIHRoZXJlIGFyZSB0d28gZmllbGRzLCB3ZSBtdXN0IGNob29zZSBvbmUgYXMgdGhlIHByaW1hcnkga2V5OyB3ZQorICogY3VycmVudGx5IGFyYml0cmFyaWx5IHBpY2sgdGhlIGVtYWlsLgorICovCitpbnQgaWRlbnRfY21wKGNvbnN0IHN0cnVjdCBpZGVudF9zcGxpdCAqLCBjb25zdCBzdHJ1Y3QgaWRlbnRfc3BsaXQgKik7CisKK3N0cnVjdCBjaGVja291dCB7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGU7CisJY29uc3QgY2hhciAqYmFzZV9kaXI7CisJaW50IGJhc2VfZGlyX2xlbjsKKwlzdHJ1Y3QgZGVsYXllZF9jaGVja291dCAqZGVsYXllZF9jaGVja291dDsKKwl1bnNpZ25lZCBmb3JjZToxLAorCQkgcXVpZXQ6MSwKKwkJIG5vdF9uZXc6MSwKKwkJIGNsb25lOjEsCisJCSByZWZyZXNoX2NhY2hlOjE7Cit9OworI2RlZmluZSBDSEVDS09VVF9JTklUIHsgTlVMTCwgIiIgfQorCisjZGVmaW5lIFRFTVBPUkFSWV9GSUxFTkFNRV9MRU5HVEggMjUKK2ludCBjaGVja291dF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBjaGFyICp0b3BhdGgsIGludCAqbnJfY2hlY2tvdXRzKTsKK3ZvaWQgZW5hYmxlX2RlbGF5ZWRfY2hlY2tvdXQoc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSk7CitpbnQgZmluaXNoX2RlbGF5ZWRfY2hlY2tvdXQoc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50ICpucl9jaGVja291dHMpOworLyoKKyAqIFVubGluayB0aGUgbGFzdCBjb21wb25lbnQgYW5kIHNjaGVkdWxlIHRoZSBsZWFkaW5nIGRpcmVjdG9yaWVzIGZvcgorICogcmVtb3ZhbCwgc3VjaCB0aGF0IGVtcHR5IGRpcmVjdG9yaWVzIGdldCByZW1vdmVkLgorICovCit2b2lkIHVubGlua19lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKTsKKworc3RydWN0IGNhY2hlX2RlZiB7CisJc3RydWN0IHN0cmJ1ZiBwYXRoOworCWludCBmbGFnczsKKwlpbnQgdHJhY2tfZmxhZ3M7CisJaW50IHByZWZpeF9sZW5fc3RhdF9mdW5jOworfTsKKyNkZWZpbmUgQ0FDSEVfREVGX0lOSVQgeyBTVFJCVUZfSU5JVCwgMCwgMCwgMCB9CitzdGF0aWMgaW5saW5lIHZvaWQgY2FjaGVfZGVmX2NsZWFyKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlKQoreworCXN0cmJ1Zl9yZWxlYXNlKCZjYWNoZS0+cGF0aCk7Cit9CisKK2ludCBoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CitpbnQgdGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IGNoZWNrX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK2ludCBoYXNfZGlyc19vbmx5X3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50IHByZWZpeF9sZW4pOwordm9pZCBzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7Cit2b2lkIHJlbW92ZV9zY2hlZHVsZWRfZGlycyh2b2lkKTsKKworc3RydWN0IHBhY2tfd2luZG93IHsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKm5leHQ7CisJdW5zaWduZWQgY2hhciAqYmFzZTsKKwlvZmZfdCBvZmZzZXQ7CisJc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBpbnQgbGFzdF91c2VkOworCXVuc2lnbmVkIGludCBpbnVzZV9jbnQ7Cit9OworCitzdHJ1Y3QgcGFja19lbnRyeSB7CisJb2ZmX3Qgb2Zmc2V0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworfTsKKworLyoKKyAqIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHJvb3RlZCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIGRpcmVjdG9yeSwgb3IKKyAqIGRpZSBvbiBmYWlsdXJlLiBUaGUgZmlsZW5hbWUgaXMgdGFrZW4gZnJvbSAicGF0dGVybiIsIHdoaWNoIHNob3VsZCBoYXZlIHRoZQorICogdXN1YWwgIlhYWFhYWCIgdHJhaWxlciwgYW5kIHRoZSByZXN1bHRpbmcgZmlsZW5hbWUgaXMgd3JpdHRlbiBpbnRvIHRoZQorICogInRlbXBsYXRlIiBidWZmZXIuIFJldHVybnMgdGhlIG9wZW4gZGVzY3JpcHRvci4KKyAqLworaW50IG9kYl9ta3N0ZW1wKHN0cnVjdCBzdHJidWYgKnRlbXBfZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnBhdHRlcm4pOworCisvKgorICogQ3JlYXRlIGEgcGFjayAua2VlcCBmaWxlIG5hbWVkICJuYW1lIiAod2hpY2ggc2hvdWxkIGdlbmVyYWxseSBiZSB0aGUgb3V0cHV0CisgKiBvZiBvZGJfcGFja19uYW1lKS4gUmV0dXJucyBhIGZpbGUgZGVzY3JpcHRvciBvcGVuZWQgZm9yIHdyaXRpbmcsIG9yIC0xIG9uCisgKiBlcnJvci4KKyAqLworaW50IG9kYl9wYWNrX2tlZXAoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qCisgKiBTZXQgdGhpcyB0byAwIHRvIHByZXZlbnQgb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKCkgZnJvbSBmZXRjaGluZyBtaXNzaW5nCisgKiBibG9icy4gVGhpcyBoYXMgYSBkaWZmZXJlbmNlIG9ubHkgaWYgZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmUgaXMgc2V0LgorICoKKyAqIEl0cyBkZWZhdWx0IHZhbHVlIGlzIDEuCisgKi8KK2V4dGVybiBpbnQgZmV0Y2hfaWZfbWlzc2luZzsKKworLyogRHVtYiBzZXJ2ZXJzIHN1cHBvcnQgKi8KK2ludCB1cGRhdGVfc2VydmVyX2luZm8oaW50KTsKKworY29uc3QgY2hhciAqZ2V0X2xvZ19vdXRwdXRfZW5jb2Rpbmcodm9pZCk7Citjb25zdCBjaGFyICpnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZyh2b2lkKTsKKworLyoKKyAqIFRoaXMgaXMgYSBoYWNrIGZvciB0ZXN0IHByb2dyYW1zIGxpa2UgdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZSB0bworICogZW5zdXJlIHRoYXQgdGhleSBkbyBub3QgbW9kaWZ5IHRoZSB1bnRyYWNrZWQgY2FjaGUgd2hlbiByZWFkaW5nIGl0LgorICogRG8gbm90IHVzZSBpdCBvdGhlcndpc2UhCisgKi8KK2V4dGVybiBpbnQgaWdub3JlX3VudHJhY2tlZF9jYWNoZV9jb25maWc7CisKK2ludCBjb21taXR0ZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKHZvaWQpOworaW50IGF1dGhvcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4odm9pZCk7CisKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfY29tbWl0X2VuY29kaW5nOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9sb2dfb3V0cHV0X2VuY29kaW5nOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9tYWlsbWFwX2ZpbGU7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X21haWxtYXBfYmxvYjsKKworLyogSU8gaGVscGVyIGZ1bmN0aW9ucyAqLwordm9pZCBtYXliZV9mbHVzaF9vcl9kaWUoRklMRSAqLCBjb25zdCBjaGFyICopOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3ZvaWQgZnByaW50Zl9vcl9kaWUoRklMRSAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNkZWZpbmUgQ09QWV9SRUFEX0VSUk9SICgtMikKKyNkZWZpbmUgQ09QWV9XUklURV9FUlJPUiAoLTMpCitpbnQgY29weV9mZChpbnQgaWZkLCBpbnQgb2ZkKTsKK2ludCBjb3B5X2ZpbGUoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBtb2RlKTsKK2ludCBjb3B5X2ZpbGVfd2l0aF90aW1lKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSk7CisKK3ZvaWQgd3JpdGVfb3JfZGllKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOwordm9pZCBmc3luY19vcl9kaWUoaW50IGZkLCBjb25zdCBjaGFyICopOworCitzc2l6ZV90IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK3NzaXplX3Qgd3JpdGVfaW5fZnVsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK3NzaXplX3QgcHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpOworCitzdGF0aWMgaW5saW5lIHNzaXplX3Qgd3JpdGVfc3RyX2luX2Z1bGwoaW50IGZkLCBjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHdyaXRlX2luX2Z1bGwoZmQsIHN0ciwgc3RybGVuKHN0cikpOworfQorCisvKioKKyAqIE9wZW4gKGFuZCB0cnVuY2F0ZSkgdGhlIGZpbGUgYXQgcGF0aCwgd3JpdGUgdGhlIGNvbnRlbnRzIG9mIGJ1ZiB0byBpdCwKKyAqIGFuZCBjbG9zZSBpdC4gRGllcyBpZiBhbnkgZXJyb3JzIGFyZSBlbmNvdW50ZXJlZC4KKyAqLwordm9pZCB3cml0ZV9maWxlX2J1Zihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOworCisvKioKKyAqIExpa2Ugd3JpdGVfZmlsZV9idWYoKSwgYnV0IGZvcm1hdCB0aGUgY29udGVudHMgaW50byBhIGJ1ZmZlciBmaXJzdC4KKyAqIEFkZGl0aW9uYWxseSwgd3JpdGVfZmlsZSgpIHdpbGwgYXBwZW5kIGEgbmV3bGluZSBpZiBvbmUgaXMgbm90IGFscmVhZHkKKyAqIHByZXNlbnQsIG1ha2luZyBpdCBjb252ZW5pZW50IHRvIHdyaXRlIHRleHQgZmlsZXM6CisgKgorICogICB3cml0ZV9maWxlKHBhdGgsICJjb3VudGVyOiAlZCIsIGN0cik7CisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCit2b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisvKiBwYWdlci5jICovCit2b2lkIHNldHVwX3BhZ2VyKHZvaWQpOworaW50IHBhZ2VyX2luX3VzZSh2b2lkKTsKK2V4dGVybiBpbnQgcGFnZXJfdXNlX2NvbG9yOworaW50IHRlcm1fY29sdW1ucyh2b2lkKTsKK3ZvaWQgdGVybV9jbGVhcl9saW5lKHZvaWQpOworaW50IGRlY2ltYWxfd2lkdGgodWludG1heF90KTsKK2ludCBjaGVja19wYWdlcl9jb25maWcoY29uc3QgY2hhciAqY21kKTsKK3ZvaWQgcHJlcGFyZV9wYWdlcl9hcmdzKHN0cnVjdCBjaGlsZF9wcm9jZXNzICosIGNvbnN0IGNoYXIgKnBhZ2VyKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmVkaXRvcl9wcm9ncmFtOworZXh0ZXJuIGNvbnN0IGNoYXIgKmFza3Bhc3NfcHJvZ3JhbTsKK2V4dGVybiBjb25zdCBjaGFyICpleGNsdWRlc19maWxlOworCisvKiBiYXNlODUgKi8KK2ludCBkZWNvZGVfODUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGluZWxlbik7Cit2b2lkIGVuY29kZV84NShjaGFyICpidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBieXRlcyk7CisKKy8qIHBrdC1saW5lLmMgKi8KK3ZvaWQgcGFja2V0X3RyYWNlX2lkZW50aXR5KGNvbnN0IGNoYXIgKnByb2cpOworCisvKiBhZGQgKi8KKy8qCisgKiByZXR1cm4gMCBpZiBzdWNjZXNzLCAxIC0gaWYgYWRkaXRpb24gb2YgYSBmaWxlIGZhaWxlZCBhbmQKKyAqIEFERF9GSUxFU19JR05PUkVfRVJST1JTIHdhcyBzcGVjaWZpZWQgaW4gZmxhZ3MKKyAqLworaW50IGFkZF9maWxlc190b19jYWNoZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGludCBmbGFncyk7CisKKy8qIGRpZmYuYyAqLworZXh0ZXJuIGludCBkaWZmX2F1dG9fcmVmcmVzaF9pbmRleDsKKworLyogbWF0Y2gtdHJlZXMuYyAqLwordm9pZCBzaGlmdF90cmVlKHN0cnVjdCByZXBvc2l0b3J5ICosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGludCk7Cit2b2lkIHNoaWZ0X3RyZWVfYnkoc3RydWN0IHJlcG9zaXRvcnkgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIHN0cnVjdCBvYmplY3RfaWQgKiwgY29uc3QgY2hhciAqKTsKKworLyoKKyAqIHdoaXRlc3BhY2UgcnVsZXMuCisgKiB1c2VkIGJ5IGJvdGggZGlmZiBhbmQgYXBwbHkKKyAqIGxhc3QgdHdvIGRpZ2l0cyBhcmUgdGFiIHdpZHRoCisgKi8KKyNkZWZpbmUgV1NfQkxBTktfQVRfRU9MICAgICAgICAgMDEwMAorI2RlZmluZSBXU19TUEFDRV9CRUZPUkVfVEFCICAgICAwMjAwCisjZGVmaW5lIFdTX0lOREVOVF9XSVRIX05PTl9UQUIgIDA0MDAKKyNkZWZpbmUgV1NfQ1JfQVRfRU9MICAgICAgICAgICAwMTAwMAorI2RlZmluZSBXU19CTEFOS19BVF9FT0YgICAgICAgIDAyMDAwCisjZGVmaW5lIFdTX1RBQl9JTl9JTkRFTlQgICAgICAgMDQwMDAKKyNkZWZpbmUgV1NfVFJBSUxJTkdfU1BBQ0UgICAgICAoV1NfQkxBTktfQVRfRU9MfFdTX0JMQU5LX0FUX0VPRikKKyNkZWZpbmUgV1NfREVGQVVMVF9SVUxFIChXU19UUkFJTElOR19TUEFDRXxXU19TUEFDRV9CRUZPUkVfVEFCfDgpCisjZGVmaW5lIFdTX1RBQl9XSURUSF9NQVNLICAgICAgICAwNzcKKy8qIEFsbCBXU18qIC0tIHdoZW4gZXh0ZW5kZWQsIGFkYXB0IGRpZmYuYyBlbWl0X3N5bWJvbCAqLworI2RlZmluZSBXU19SVUxFX01BU0sgICAgICAgICAgIDA3Nzc3CitleHRlcm4gdW5zaWduZWQgd2hpdGVzcGFjZV9ydWxlX2NmZzsKK3Vuc2lnbmVkIHdoaXRlc3BhY2VfcnVsZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqKTsKK3Vuc2lnbmVkIHBhcnNlX3doaXRlc3BhY2VfcnVsZShjb25zdCBjaGFyICopOwordW5zaWduZWQgd3NfY2hlY2soY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSk7Cit2b2lkIHdzX2NoZWNrX2VtaXQoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSwgRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzZXQsIGNvbnN0IGNoYXIgKnJlc2V0LCBjb25zdCBjaGFyICp3cyk7CitjaGFyICp3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyh1bnNpZ25lZCB3cyk7Cit2b2lkIHdzX2ZpeF9jb3B5KHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqLCBpbnQsIHVuc2lnbmVkLCBpbnQgKik7CitpbnQgd3NfYmxhbmtfbGluZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlKTsKKyNkZWZpbmUgd3NfdGFiX3dpZHRoKHJ1bGUpICAgICAoKHJ1bGUpICYgV1NfVEFCX1dJRFRIX01BU0spCisKKy8qIGxzLWZpbGVzICovCit2b2lkIG92ZXJsYXlfdHJlZV9vbl9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKnRyZWVfbmFtZSwgY29uc3QgY2hhciAqcHJlZml4KTsKKworLyogc2V0dXAuYyAqLworc3RydWN0IHN0YXJ0dXBfaW5mbyB7CisJaW50IGhhdmVfcmVwb3NpdG9yeTsKKwljb25zdCBjaGFyICpwcmVmaXg7Cit9OworZXh0ZXJuIHN0cnVjdCBzdGFydHVwX2luZm8gKnN0YXJ0dXBfaW5mbzsKKworLyogbWVyZ2UuYyAqLworc3RydWN0IGNvbW1pdF9saXN0OworaW50IHRyeV9tZXJnZV9jb21tYW5kKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQljb25zdCBjaGFyICpzdHJhdGVneSwgc2l6ZV90IHhvcHRzX25yLAorCQljb25zdCBjaGFyICoqeG9wdHMsIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uLAorCQljb25zdCBjaGFyICpoZWFkX2FyZywgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVzKTsKK2ludCBjaGVja291dF9mYXN0X2ZvcndhcmQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmZyb20sCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRvLAorCQkJICBpbnQgb3ZlcndyaXRlX2lnbm9yZSk7CisKKworaW50IHNhbmVfZXhlY3ZwKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKmNvbnN0IGFyZ3ZbXSk7CisKKy8qCisgKiBBIHN0cnVjdCB0byBlbmNhcHN1bGF0ZSB0aGUgY29uY2VwdCBvZiB3aGV0aGVyIGEgZmlsZSBoYXMgY2hhbmdlZAorICogc2luY2Ugd2UgbGFzdCBjaGVja2VkIGl0LiBUaGlzIHVzZXMgY3JpdGVyaWEgc2ltaWxhciB0byB0aG9zZSB1c2VkCisgKiBmb3IgdGhlIGluZGV4LgorICovCitzdHJ1Y3Qgc3RhdF92YWxpZGl0eSB7CisJc3RydWN0IHN0YXRfZGF0YSAqc2Q7Cit9OworCit2b2lkIHN0YXRfdmFsaWRpdHlfY2xlYXIoc3RydWN0IHN0YXRfdmFsaWRpdHkgKnN2KTsKKworLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSAob3IgYSBzeW1saW5rIHRvIGEgcmVndWxhcgorICogZmlsZSkgYW5kIG1hdGNoZXMgdGhlIHNhdmVkIHN0YXRfdmFsaWRpdHksIDAgb3RoZXJ3aXNlLiAgQSBtaXNzaW5nCisgKiBvciBpbmFjY2Vzc2libGUgZmlsZSBpcyBjb25zaWRlcmVkIGEgbWF0Y2ggaWYgdGhlIHN0cnVjdCB3YXMganVzdAorICogaW5pdGlhbGl6ZWQsIG9yIGlmIHRoZSBwcmV2aW91cyB1cGRhdGUgZm91bmQgYW4gaW5hY2Nlc3NpYmxlIGZpbGUuCisgKi8KK2ludCBzdGF0X3ZhbGlkaXR5X2NoZWNrKHN0cnVjdCBzdGF0X3ZhbGlkaXR5ICpzdiwgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBVcGRhdGUgdGhlIHN0YXRfdmFsaWRpdHkgZnJvbSBhIGZpbGUgb3BlbmVkIGF0IGRlc2NyaXB0b3IgZmQuIElmCisgKiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBpbmFjY2Vzc2libGUsIG9yIG5vdCBhIHJlZ3VsYXIgZmlsZSwgdGhlbgorICogZnV0dXJlIGNhbGxzIHRvIHN0YXRfdmFsaWRpdHlfY2hlY2sgd2lsbCBtYXRjaCBpZmYgb25lIG9mIHRob3NlCisgKiBjb25kaXRpb25zIGNvbnRpbnVlcyB0byBiZSB0cnVlLgorICovCit2b2lkIHN0YXRfdmFsaWRpdHlfdXBkYXRlKHN0cnVjdCBzdGF0X3ZhbGlkaXR5ICpzdiwgaW50IGZkKTsKKworaW50IHZlcnNpb25jbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKK3ZvaWQgc2xlZXBfbWlsbGlzZWMoaW50IG1pbGxpc2VjKTsKKworLyoKKyAqIENyZWF0ZSBhIGRpcmVjdG9yeSBhbmQgKGlmIHNoYXJlIGlzIG5vbnplcm8pIGFkanVzdCBpdHMgcGVybWlzc2lvbnMKKyAqIGFjY29yZGluZyB0byB0aGUgc2hhcmVkX3JlcG9zaXRvcnkgc2V0dGluZy4gT25seSB1c2UgdGhpcyBmb3IKKyAqIGRpcmVjdG9yaWVzIHVuZGVyICRHSVRfRElSLiAgRG9uJ3QgdXNlIGl0IGZvciB3b3JraW5nIHRyZWUKKyAqIGRpcmVjdG9yaWVzLgorICovCit2b2lkIHNhZmVfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpkaXIsIGludCBzaGFyZSk7CisKKy8qCisgKiBTaG91bGQgd2UgcHJpbnQgYW4gZWxsaXBzaXMgYWZ0ZXIgYW4gYWJicmV2aWF0ZWQgU0hBLTEgdmFsdWUKKyAqIHdoZW4gZG9pbmcgZGlmZi1yYXcgb3V0cHV0IG9yIGluZGljYXRpbmcgYSBkZXRhY2hlZCBIRUFEPworICovCitpbnQgcHJpbnRfc2hhMV9lbGxpcHNpcyh2b2lkKTsKKworLyogUmV0dXJuIDEgaWYgdGhlIGZpbGUgaXMgZW1wdHkgb3IgZG9lcyBub3QgZXhpc3RzLCAwIG90aGVyd2lzZS4gKi8KK2ludCBpc19lbXB0eV9vcl9taXNzaW5nX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpOworCisjZW5kaWYgLyogQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvY2hkaXItbm90aWZ5LmMgYi9jaGRpci1ub3RpZnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjdmMmMyCi0tLSAvZGV2L251bGwKKysrIGIvY2hkaXItbm90aWZ5LmMKQEAgLTAsMCArMSw5MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY2hkaXItbm90aWZ5LmgiCisjaW5jbHVkZSAibGlzdC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdHJ1Y3QgY2hkaXJfbm90aWZ5X2VudHJ5IHsKKwljb25zdCBjaGFyICpuYW1lOworCWNoZGlyX25vdGlmeV9jYWxsYmFjayBjYjsKKwl2b2lkICpkYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CitzdGF0aWMgTElTVF9IRUFEKGNoZGlyX25vdGlmeV9lbnRyaWVzKTsKKwordm9pZCBjaGRpcl9ub3RpZnlfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgIGNoZGlyX25vdGlmeV9jYWxsYmFjayBjYiwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNoZGlyX25vdGlmeV9lbnRyeSAqZSA9IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJZS0+bmFtZSA9IG5hbWU7CisJZS0+Y2IgPSBjYjsKKwllLT5kYXRhID0gZGF0YTsKKwlsaXN0X2FkZF90YWlsKCZlLT5saXN0LCAmY2hkaXJfbm90aWZ5X2VudHJpZXMpOworfQorCitzdGF0aWMgdm9pZCByZXBhcmVudF9jYihjb25zdCBjaGFyICpuYW1lLAorCQkJY29uc3QgY2hhciAqb2xkX2N3ZCwKKwkJCWNvbnN0IGNoYXIgKm5ld19jd2QsCisJCQl2b2lkICpkYXRhKQoreworCWNoYXIgKipwYXRoID0gZGF0YTsKKwljaGFyICp0bXAgPSAqcGF0aDsKKworCWlmICghdG1wKQorCQlyZXR1cm47CisKKwkqcGF0aCA9IHJlcGFyZW50X3JlbGF0aXZlX3BhdGgob2xkX2N3ZCwgbmV3X2N3ZCwgdG1wKTsKKwlmcmVlKHRtcCk7CisKKwlpZiAobmFtZSkgeworCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9zZXR1cF9rZXksCisJCQkJICJzZXR1cDogcmVwYXJlbnQgJXMgdG8gJyVzJyIsCisJCQkJIG5hbWUsICpwYXRoKTsKKwl9Cit9CisKK3ZvaWQgY2hkaXJfbm90aWZ5X3JlcGFyZW50KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKipwYXRoKQoreworCWNoZGlyX25vdGlmeV9yZWdpc3RlcihuYW1lLCByZXBhcmVudF9jYiwgcGF0aCk7Cit9CisKK2ludCBjaGRpcl9ub3RpZnkoY29uc3QgY2hhciAqbmV3X2N3ZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG9sZF9jd2QgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisKKwlpZiAoc3RyYnVmX2dldGN3ZCgmb2xkX2N3ZCkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGNoZGlyKG5ld19jd2QpIDwgMCkgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJc3RyYnVmX3JlbGVhc2UoJm9sZF9jd2QpOworCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQlyZXR1cm4gLTE7CisJfQorCisJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2Vfc2V0dXBfa2V5LAorCQkJICJzZXR1cDogY2hkaXIgZnJvbSAnJXMnIHRvICclcyciLAorCQkJIG9sZF9jd2QuYnVmLCBuZXdfY3dkKTsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmY2hkaXJfbm90aWZ5X2VudHJpZXMpIHsKKwkJc3RydWN0IGNoZGlyX25vdGlmeV9lbnRyeSAqZSA9CisJCQlsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNoZGlyX25vdGlmeV9lbnRyeSwgbGlzdCk7CisJCWUtPmNiKGUtPm5hbWUsIG9sZF9jd2QuYnVmLCBuZXdfY3dkLCBlLT5kYXRhKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmb2xkX2N3ZCk7CisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKnJlcGFyZW50X3JlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqb2xkX2N3ZCwKKwkJCSAgICAgY29uc3QgY2hhciAqbmV3X2N3ZCwKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpyZXQsICpmdWxsOworCisJaWYgKGlzX2Fic29sdXRlX3BhdGgocGF0aCkpCisJCXJldHVybiB4c3RyZHVwKHBhdGgpOworCisJZnVsbCA9IHhzdHJmbXQoIiVzLyVzIiwgb2xkX2N3ZCwgcGF0aCk7CisJcmV0ID0geHN0cmR1cChyZW1vdmVfbGVhZGluZ19wYXRoKGZ1bGwsIG5ld19jd2QpKTsKKwlmcmVlKGZ1bGwpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2NoZGlyLW5vdGlmeS5oIGIvY2hkaXItbm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2ZTRjMQotLS0gL2Rldi9udWxsCisrKyBiL2NoZGlyLW5vdGlmeS5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgQ0hESVJfTk9USUZZX0gKKyNkZWZpbmUgQ0hESVJfTk9USUZZX0gKKworLyoKKyAqIEFuIEFQSSB0byBsZXQgY29kZSAic3Vic2NyaWJlIiB0byBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICogVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IHNvbWUgY29kZSBhc2tzIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHdvcmtpbmcKKyAqIGRpcmVjdG9yeSBjaGFuZ2VzLCBhbmQgb3RoZXIgY29kZSB0aGF0IGNhbGxzIGNoZGlyIHVzZXMgYSBzcGVjaWFsIHdyYXBwZXIKKyAqIHRoYXQgbm90aWZpZXMgZXZlcnlvbmUuCisgKi8KKworLyoKKyAqIENhbGxlcnMgd2hvIG5lZWQgdG8ga25vdyBhYm91dCBjaGFuZ2VzIGNhbiBkbzoKKyAqCisgKiAgIHZvaWQgZm9vKGNvbnN0IGNoYXIgKm9sZF9wYXRoLCBjb25zdCBjaGFyICpuZXdfcGF0aCwgdm9pZCAqZGF0YSkKKyAqICAgeworICoJd2FybmluZygic3dpdGNoZWQgZnJvbSAlcyB0byAlcyEiLCBvbGRfcGF0aCwgbmV3X3BhdGgpOworICogICB9CisgKiAgIC4uLgorICogICBjaGRpcl9ub3RpZnlfcmVnaXN0ZXIoImRlc2NyaXB0aW9uIiwgZm9vLCBkYXRhKTsKKyAqCisgKiBJbiBwcmFjdGljZSBtb3N0IGNhbGxlcnMgd2lsbCB3YW50IHRvIG1vdmUgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBuZXcgcm9vdDsKKyAqIHRoZXkgY2FuIHVzZSB0aGUgcmVwYXJlbnRfcmVsYXRpdmVfcGF0aCgpIGhlbHBlciBmb3IgdGhhdC4gSWYgdGhhdCdzIGFsbAorICogeW91J3JlIGRvaW5nLCB5b3UgY2FuIGFsc28gdXNlIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbjoKKyAqCisgKiAgIGNoZGlyX25vdGlmeV9yZXBhcmVudCgiZGVzY3JpcHRpb24iLCAmbXlfcGF0aCk7CisgKgorICogV2hlbmV2ZXIgYSBjaGRpciBldmVudCBvY2N1cnMsIHRoYXQgd2lsbCB1cGRhdGUgbXlfcGF0aCAoaWYgaXQncyByZWxhdGl2ZSkKKyAqIHRvIGFkanVzdCBmb3IgdGhlIG5ldyBjd2QgYnkgZnJlZWluZyBhbnkgZXhpc3Rpbmcgc3RyaW5nIGFuZCBhbGxvY2F0aW5nIGEKKyAqIG5ldyBvbmUuCisgKgorICogUmVnaXN0ZXJlZCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGFkZGVkLiBOb3RlCisgKiB0aGF0IHRoZXJlJ3MgY3VycmVudGx5IG5vIHdheSB0byByZW1vdmUgYSBmdW5jdGlvbiwgc28gbWFrZSBzdXJlIHRoYXQgdGhlCisgKiBkYXRhIHBhcmFtZXRlciByZW1haW5zIHZhbGlkIGZvciB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbS4KKyAqCisgKiBUaGUgIm5hbWUiIGFyZ3VtZW50IGlzIHVzZWQgb25seSBmb3IgcHJpbnRpbmcgdHJhY2Ugb3V0cHV0IGZyb20KKyAqICRHSVRfVFJBQ0VfU0VUVVAuIEl0IG1heSBiZSBOVUxMLCBidXQgaWYgbm9uLU5VTEwgc2hvdWxkIHBvaW50IHRvCisgKiBzdG9yYWdlIHdoaWNoIGxhc3RzIGFzIGxvbmcgYXMgdGhlIHJlZ2lzdHJhdGlvbiBpcyBhY3RpdmUuCisgKi8KK3R5cGVkZWYgdm9pZCAoKmNoZGlyX25vdGlmeV9jYWxsYmFjaykoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpvbGRfY3dkLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5ld19jd2QsCisJCQkJICAgICAgdm9pZCAqZGF0YSk7Cit2b2lkIGNoZGlyX25vdGlmeV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBjaGRpcl9ub3RpZnlfY2FsbGJhY2sgY2IsIHZvaWQgKmRhdGEpOwordm9pZCBjaGRpcl9ub3RpZnlfcmVwYXJlbnQoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqKnBhdGgpOworCisvKgorICoKKyAqIENhbGxlcnMgdGhhdCB3YW50IHRvIGNoZGlyOgorICoKKyAqICAgY2hkaXJfbm90aWZ5KG5ld19wYXRoKTsKKyAqCisgKiB0byBzd2l0Y2ggdG8gdGhlIG5ldyBwYXRoIGFuZCBub3RpZnkgYW55IGNhbGxiYWNrcy4KKyAqCisgKiBOb3RlIHRoYXQgeW91IGRvbid0IG5lZWQgdG8gY2hkaXJfbm90aWZ5KCkgaWYgeW91J3JlIGp1c3QgdGVtcG9yYXJpbHkgbW92aW5nCisgKiB0byBhIGRpcmVjdG9yeSBhbmQgYmFjaywgYXMgbG9uZyBhcyB5b3UgZG9uJ3QgY2FsbCBhbnkgc3Vic2NyaWJlZCBjb2RlIGluCisgKiBiZXR3ZWVuIChidXQgaXQgc2hvdWxkIGJlIHNhZmUgdG8gZG8gc28gaWYgeW91J3JlIHVuc3VyZSkuCisgKi8KK2ludCBjaGRpcl9ub3RpZnkoY29uc3QgY2hhciAqbmV3X2N3ZCk7CisKKy8qCisgKiBSZXBhcmVudCBhIHJlbGF0aXZlIHBhdGggZnJvbSBvbGRfcm9vdCB0byBuZXdfcm9vdC4gRm9yIGV4YW1wbGU6CisgKgorICogICByZXBhcmVudF9yZWxhdGl2ZV9wYXRoKCIvYSIsICIvYS9iIiwgImIvcmVsIik7CisgKgorICogd291bGQgcmV0dXJuIHRoZSAobmV3bHkgYWxsb2NhdGVkKSBzdHJpbmcgInJlbCIuIE5vdGUgdGhhdCB3ZSBtYXkgcmV0dXJuIGFuCisgKiBhYnNvbHV0ZSBwYXRoIGluIHNvbWUgY2FzZXMgKGUuZy4sIGlmIHRoZSByZXN1bHRpbmcgcGF0aCBpcyBub3QgaW5zaWRlCisgKiBuZXdfY3dkKS4KKyAqLworY2hhciAqcmVwYXJlbnRfcmVsYXRpdmVfcGF0aChjb25zdCBjaGFyICpvbGRfY3dkLAorCQkJICAgICBjb25zdCBjaGFyICpuZXdfY3dkLAorCQkJICAgICBjb25zdCBjaGFyICpwYXRoKTsKKworI2VuZGlmIC8qIENIRElSX05PVElGWV9IICovCmRpZmYgLS1naXQgYS9jaGVjay1idWlsdGlucy5zaCBiL2NoZWNrLWJ1aWx0aW5zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwYWFmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVjay1idWlsdGlucy5zaApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworeworCWNhdCA8PFxFT0YKK3NheUl0OgorCSQoZm9yZWFjaCBiLCQoQlVJTFRfSU5TKSxlY2hvIFhYWCAkKGI6JFg9KSBZWVk7KQorRU9GCisJY2F0IE1ha2VmaWxlCit9IHwKK21ha2UgLWYgLSBzYXlJdCAyPi9kZXYvbnVsbCB8CitzZWQgLW4gLWUgJ3MvLipYWFggXCguKlwpIFlZWS4qL1wxL3AnIHwKK3NvcnQgfAoreworICAgIGJhZD0wCisgICAgd2hpbGUgcmVhZCBidWlsdGluCisgICAgZG8KKwliYXNlPSQoZXhwciAiJGJ1aWx0aW4iIDogJ2dpdC1cKC4qXCknKQorCXg9JChzZWQgLW5lICdzLy4qeyAiJyRiYXNlJyIsIFwoY21kX1teLCBdKlwpLiovJyRiYXNlJwlcMS9wJyBnaXQuYykKKwlpZiB0ZXN0IC16ICIkeCIKKwl0aGVuCisJCWVjaG8gIiRiYXNlIGlzIGJ1aWx0aW4gYnV0IG5vdCBsaXN0ZWQgaW4gZ2l0LmMgY29tbWFuZCBsaXN0IgorCQliYWQ9MQorCWZpCisJZm9yIHNmeCBpbiBzaCBwZXJsIHB5CisJZG8KKwkJaWYgdGVzdCAtZiAiJGJ1aWx0aW4uJHNmeCIKKwkJdGhlbgorCQkJZWNobyAiJGJhc2UgaXMgYnVpbHRpbiBidXQgJGJ1aWx0aW4uJHNmeCBzdGlsbCBleGlzdHMiCisJCQliYWQ9MQorCQlmaQorCWRvbmUKKyAgICBkb25lCisgICAgZXhpdCAkYmFkCit9CmRpZmYgLS1naXQgYS9jaGVja19iaW5kaXIgYi9jaGVja19iaW5kaXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjIzZWFkYwotLS0gL2Rldi9udWxsCisrKyBiL2NoZWNrX2JpbmRpcgpAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKK2JpbmRpcj0iJDEiCitnaXRleGVjZGlyPSIkMiIKK2dpdGNtZD0iJDMiCitpZiB0ZXN0ICIkYmluZGlyIiAhPSAiJGdpdGV4ZWNkaXIiICYmIHRlc3QgLXggIiRnaXRjbWQiCit0aGVuCisJZWNobworCWVjaG8gIiEhIFlvdSBoYXZlIGluc3RhbGxlZCBnaXQtKiBjb21tYW5kcyB0byBuZXcgZ2l0ZXhlY2Rpci4iCisJZWNobyAiISEgT2xkIHZlcnNpb24gZ2l0LSogY29tbWFuZHMgc3RpbGwgcmVtYWluIGluIGJpbmRpci4iCisJZWNobyAiISEgTWl4aW5nIHR3byB2ZXJzaW9ucyBvZiBHaXQgd2lsbCBsZWFkIHRvIHByb2JsZW1zLiIKKwllY2hvICIhISBQbGVhc2UgcmVtb3ZlIG9sZCB2ZXJzaW9uIGNvbW1hbmRzIGluIGJpbmRpciBub3cuIgorCWVjaG8KK2ZpCmRpZmYgLS1naXQgYS9jaGVja291dC5jIGIvY2hlY2tvdXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJlOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvY2hlY2tvdXQuYwpAQCAtMCwwICsxLDcxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisjaW5jbHVkZSAiY2hlY2tvdXQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworc3RydWN0IHRyYWNraW5nX25hbWVfZGF0YSB7CisJLyogY29uc3QgKi8gY2hhciAqc3JjX3JlZjsKKwljaGFyICpkc3RfcmVmOworCXN0cnVjdCBvYmplY3RfaWQgKmRzdF9vaWQ7CisJaW50IG51bV9tYXRjaGVzOworCWNvbnN0IGNoYXIgKmRlZmF1bHRfcmVtb3RlOworCWNoYXIgKmRlZmF1bHRfZHN0X3JlZjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpkZWZhdWx0X2RzdF9vaWQ7Cit9OworCisjZGVmaW5lIFRSQUNLSU5HX05BTUVfREFUQV9JTklUIHsgTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCB9CisKK3N0YXRpYyBpbnQgY2hlY2tfdHJhY2tpbmdfbmFtZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHRyYWNraW5nX25hbWVfZGF0YSAqY2IgPSBjYl9kYXRhOworCXN0cnVjdCByZWZzcGVjX2l0ZW0gcXVlcnk7CisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHN0cnVjdCByZWZzcGVjX2l0ZW0pKTsKKwlxdWVyeS5zcmMgPSBjYi0+c3JjX3JlZjsKKwlpZiAocmVtb3RlX2ZpbmRfdHJhY2tpbmcocmVtb3RlLCAmcXVlcnkpIHx8CisJICAgIGdldF9vaWQocXVlcnkuZHN0LCBjYi0+ZHN0X29pZCkpIHsKKwkJZnJlZShxdWVyeS5kc3QpOworCQlyZXR1cm4gMDsKKwl9CisJY2ItPm51bV9tYXRjaGVzKys7CisJaWYgKGNiLT5kZWZhdWx0X3JlbW90ZSAmJiAhc3RyY21wKHJlbW90ZS0+bmFtZSwgY2ItPmRlZmF1bHRfcmVtb3RlKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpkc3QgPSB4bWFsbG9jKHNpemVvZigqY2ItPmRlZmF1bHRfZHN0X29pZCkpOworCQljYi0+ZGVmYXVsdF9kc3RfcmVmID0geHN0cmR1cChxdWVyeS5kc3QpOworCQlvaWRjcHkoZHN0LCBjYi0+ZHN0X29pZCk7CisJCWNiLT5kZWZhdWx0X2RzdF9vaWQgPSBkc3Q7CisJfQorCWlmIChjYi0+ZHN0X3JlZikgeworCQlmcmVlKHF1ZXJ5LmRzdCk7CisJCXJldHVybiAwOworCX0KKwljYi0+ZHN0X3JlZiA9IHF1ZXJ5LmRzdDsKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqdW5pcXVlX3RyYWNraW5nX25hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSBpbnQgKmR3aW1fcmVtb3Rlc19tYXRjaGVkKQoreworCXN0cnVjdCB0cmFja2luZ19uYW1lX2RhdGEgY2JfZGF0YSA9IFRSQUNLSU5HX05BTUVfREFUQV9JTklUOworCWNvbnN0IGNoYXIgKmRlZmF1bHRfcmVtb3RlID0gTlVMTDsKKwlpZiAoIWdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgiY2hlY2tvdXQuZGVmYXVsdHJlbW90ZSIsICZkZWZhdWx0X3JlbW90ZSkpCisJCWNiX2RhdGEuZGVmYXVsdF9yZW1vdGUgPSBkZWZhdWx0X3JlbW90ZTsKKwljYl9kYXRhLnNyY19yZWYgPSB4c3RyZm10KCJyZWZzL2hlYWRzLyVzIiwgbmFtZSk7CisJY2JfZGF0YS5kc3Rfb2lkID0gb2lkOworCWZvcl9lYWNoX3JlbW90ZShjaGVja190cmFja2luZ19uYW1lLCAmY2JfZGF0YSk7CisJaWYgKGR3aW1fcmVtb3Rlc19tYXRjaGVkKQorCQkqZHdpbV9yZW1vdGVzX21hdGNoZWQgPSBjYl9kYXRhLm51bV9tYXRjaGVzOworCWZyZWUoY2JfZGF0YS5zcmNfcmVmKTsKKwlmcmVlKChjaGFyICopZGVmYXVsdF9yZW1vdGUpOworCWlmIChjYl9kYXRhLm51bV9tYXRjaGVzID09IDEpIHsKKwkJZnJlZShjYl9kYXRhLmRlZmF1bHRfZHN0X3JlZik7CisJCWZyZWUoY2JfZGF0YS5kZWZhdWx0X2RzdF9vaWQpOworCQlyZXR1cm4gY2JfZGF0YS5kc3RfcmVmOworCX0KKwlmcmVlKGNiX2RhdGEuZHN0X3JlZik7CisJaWYgKGNiX2RhdGEuZGVmYXVsdF9kc3RfcmVmKSB7CisJCW9pZGNweShvaWQsIGNiX2RhdGEuZGVmYXVsdF9kc3Rfb2lkKTsKKwkJZnJlZShjYl9kYXRhLmRlZmF1bHRfZHN0X29pZCk7CisJCXJldHVybiBjYl9kYXRhLmRlZmF1bHRfZHN0X3JlZjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9jaGVja291dC5oIGIvY2hlY2tvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTUyMTMzCi0tLSAvZGV2L251bGwKKysrIGIvY2hlY2tvdXQuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIENIRUNLT1VUX0gKKyNkZWZpbmUgQ0hFQ0tPVVRfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworLyoKKyAqIENoZWNrIGlmIHRoZSBicmFuY2ggbmFtZSB1bmlxdWVseSBtYXRjaGVzIGEgYnJhbmNoIG5hbWUgb24gYSByZW1vdGUKKyAqIHRyYWNraW5nIGJyYW5jaC4gIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGlmIHN1Y2ggYSBicmFuY2gKKyAqIGV4aXN0cywgTlVMTCBvdGhlcndpc2UuCisgKi8KK2NvbnN0IGNoYXIgKnVuaXF1ZV90cmFja2luZ19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgaW50ICpkd2ltX3JlbW90ZXNfbWF0Y2hlZCk7CisKKyNlbmRpZiAvKiBDSEVDS09VVF9IICovCmRpZmYgLS1naXQgYS9jaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaCBiL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ5N2ZkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaApAQCAtMCwwICsxLDg0IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjCisjIEluc3RhbGwgZGVwZW5kZW5jaWVzIHJlcXVpcmVkIHRvIGJ1aWxkIGFuZCB0ZXN0IEdpdCBvbiBMaW51eCBhbmQgbWFjT1MKKyMKKworLiAkezAlLyp9L2xpYi5zaAorCitQNFdIRU5DRT1odHRwOi8vZmlsZWhvc3QucGVyZm9yY2UuY29tL3BlcmZvcmNlL3IkTElOVVhfUDRfVkVSU0lPTgorTEZTV0hFTkNFPWh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZ2l0LWxmcy9yZWxlYXNlcy9kb3dubG9hZC92JExJTlVYX0dJVF9MRlNfVkVSU0lPTgorCitjYXNlICIkam9ibmFtZSIgaW4KK2xpbnV4LWNsYW5nfGxpbnV4LWdjYykKKwlzdWRvIGFwdC1hZGQtcmVwb3NpdG9yeSAteSAicHBhOnVidW50dS10b29sY2hhaW4tci90ZXN0IgorCXN1ZG8gYXB0LWdldCAtcSB1cGRhdGUKKwlzdWRvIGFwdC1nZXQgLXEgLXkgaW5zdGFsbCBsYW5ndWFnZS1wYWNrLWlzIGxpYnN2bi1wZXJsIGFwYWNoZTIKKwljYXNlICIkam9ibmFtZSIgaW4KKwlsaW51eC1nY2MpCisJCXN1ZG8gYXB0LWdldCAtcSAteSBpbnN0YWxsIGdjYy04CisJCTs7CisJZXNhYworCisJbWtkaXIgLS1wYXJlbnRzICIkUDRfUEFUSCIKKwlwdXNoZCAiJFA0X1BBVEgiCisJCXdnZXQgLS1xdWlldCAiJFA0V0hFTkNFL2Jpbi5saW51eDI2eDg2XzY0L3A0ZCIKKwkJd2dldCAtLXF1aWV0ICIkUDRXSEVOQ0UvYmluLmxpbnV4MjZ4ODZfNjQvcDQiCisJCWNobW9kIHUreCBwNGQKKwkJY2htb2QgdSt4IHA0CisJcG9wZAorCW1rZGlyIC0tcGFyZW50cyAiJEdJVF9MRlNfUEFUSCIKKwlwdXNoZCAiJEdJVF9MRlNfUEFUSCIKKwkJd2dldCAtLXF1aWV0ICIkTEZTV0hFTkNFL2dpdC1sZnMtbGludXgtYW1kNjQtJExJTlVYX0dJVF9MRlNfVkVSU0lPTi50YXIuZ3oiCisJCXRhciAtLWV4dHJhY3QgLS1ndW56aXAgLS1maWxlICJnaXQtbGZzLWxpbnV4LWFtZDY0LSRMSU5VWF9HSVRfTEZTX1ZFUlNJT04udGFyLmd6IgorCQljcCBnaXQtbGZzLSRMSU5VWF9HSVRfTEZTX1ZFUlNJT04vZ2l0LWxmcyAuCisJcG9wZAorCTs7Citvc3gtY2xhbmd8b3N4LWdjYykKKwlleHBvcnQgSE9NRUJSRVdfTk9fQVVUT19VUERBVEU9MSBIT01FQlJFV19OT19JTlNUQUxMX0NMRUFOVVA9MQorCSMgVW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gcnVuIHBlcmYgdGVzdHM6CisJIyBicmV3IGluc3RhbGwgZ251LXRpbWUKKwl0ZXN0IC16ICIkQlJFV19JTlNUQUxMX1BBQ0tBR0VTIiB8fAorCWJyZXcgaW5zdGFsbCAkQlJFV19JTlNUQUxMX1BBQ0tBR0VTCisJYnJldyBsaW5rIC0tZm9yY2UgZ2V0dGV4dAorCWJyZXcgY2FzayBpbnN0YWxsIC0tbm8tcXVhcmFudGluZSBwZXJmb3JjZSB8fCB7CisJCSMgVXBkYXRlIHRoZSBkZWZpbml0aW9ucyBhbmQgdHJ5IGFnYWluCisJCWNhc2tfcmVwbz0iJChicmV3IC0tcmVwb3NpdG9yeSkiL0xpYnJhcnkvVGFwcy9ob21lYnJldy9ob21lYnJldy1jYXNrICYmCisJCWdpdCAtQyAiJGNhc2tfcmVwbyIgcHVsbCAtLW5vLXN0YXQgJiYKKwkJYnJldyBjYXNrIGluc3RhbGwgLS1uby1xdWFyYW50aW5lIHBlcmZvcmNlCisJfSB8fAorCWJyZXcgaW5zdGFsbCBjYXNrcm9vbS9jYXNrL3BlcmZvcmNlCisJY2FzZSAiJGpvYm5hbWUiIGluCisJb3N4LWdjYykKKwkJYnJldyBpbnN0YWxsIGdjY0A5CisJCSMgSnVzdCBpbiBjYXNlIHRoZSBpbWFnZSBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gZ2NjQDkKKwkJIyBwcmUtaW5zdGFsbGVkIGJ1dCBub3QgbGlua2VkLgorCQlicmV3IGxpbmsgZ2NjQDkKKwkJOzsKKwllc2FjCisJOzsKK1N0YXRpY0FuYWx5c2lzKQorCXN1ZG8gYXB0LWdldCAtcSB1cGRhdGUKKwlzdWRvIGFwdC1nZXQgLXEgLXkgaW5zdGFsbCBjb2NjaW5lbGxlIGxpYmN1cmw0LW9wZW5zc2wtZGV2IGxpYnNzbC1kZXYgXAorCQlsaWJleHBhdC1kZXYgZ2V0dGV4dAorCTs7CitEb2N1bWVudGF0aW9uKQorCXN1ZG8gYXB0LWdldCAtcSB1cGRhdGUKKwlzdWRvIGFwdC1nZXQgLXEgLXkgaW5zdGFsbCBhc2NpaWRvYyB4bWx0byBkb2Nib29rLXhzbC1ucworCisJdGVzdCAtbiAiJEFMUkVBRFlfSEFWRV9BU0NJSURPQ1RPUiIgfHwKKwlnZW0gaW5zdGFsbCAtLXZlcnNpb24gMS41LjggYXNjaWlkb2N0b3IKKwk7OworZXNhYworCitpZiB0eXBlIHA0ZCA+L2Rldi9udWxsICYmIHR5cGUgcDQgPi9kZXYvbnVsbAordGhlbgorCWVjaG8gIiQodHB1dCBzZXRhZiA2KVBlcmZvcmNlIFNlcnZlciBWZXJzaW9uJCh0cHV0IHNncjApIgorCXA0ZCAtViB8IGdyZXAgUmV2LgorCWVjaG8gIiQodHB1dCBzZXRhZiA2KVBlcmZvcmNlIENsaWVudCBWZXJzaW9uJCh0cHV0IHNncjApIgorCXA0IC1WIHwgZ3JlcCBSZXYuCitmaQoraWYgdHlwZSBnaXQtbGZzID4vZGV2L251bGwKK3RoZW4KKwllY2hvICIkKHRwdXQgc2V0YWYgNilHaXQtTEZTIFZlcnNpb24kKHRwdXQgc2dyMCkiCisJZ2l0LWxmcyB2ZXJzaW9uCitmaQpkaWZmIC0tZ2l0IGEvY2kvbGliLnNoIGIvY2kvbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE5MGQwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jaS9saWIuc2gKQEAgLTAsMCArMSwxOTcgQEAKKyMgTGlicmFyeSBvZiBmdW5jdGlvbnMgc2hhcmVkIGJ5IGFsbCBDSSBzY3JpcHRzCisKK3NraXBfYnJhbmNoX3RpcF93aXRoX3RhZyAoKSB7CisJIyBTb21ldGltZXMsIGEgYnJhbmNoIGlzIHB1c2hlZCBhdCB0aGUgc2FtZSB0aW1lIHRoZSB0YWcgdGhhdCBwb2ludHMKKwkjIGF0IHRoZSBzYW1lIGNvbW1pdCBhcyB0aGUgdGlwIG9mIHRoZSBicmFuY2ggaXMgcHVzaGVkLCBhbmQgYnVpbGRpbmcKKwkjIGJvdGggYXQgdGhlIHNhbWUgdGltZSBpcyBhIHdhc3RlLgorCSMKKwkjIFdoZW4gdGhlIGJ1aWxkIGlzIHRyaWdnZXJlZCBieSBhIHB1c2ggdG8gYSB0YWcsICRDSV9CUkFOQ0ggd2lsbAorCSMgaGF2ZSB0aGF0IHRhZ25hbWUsIGUuZy4gdjIuMTQuMC4gIExldCdzIHNlZSBpZiAkQ0lfQlJBTkNIIGlzCisJIyBleGFjdGx5IGF0IGEgdGFnLCBhbmQgaWYgc28sIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tICRDSV9CUkFOQ0guCisJIyBUaGF0IHdheSwgd2UgY2FuIHRlbGwgaWYgd2UgYXJlIGJ1aWxkaW5nIHRoZSB0aXAgb2YgYSBicmFuY2ggdGhhdAorCSMgaXMgdGFnZ2VkIGFuZCB3ZSBjYW4gc2tpcCB0aGUgYnVpbGQgYmVjYXVzZSB3ZSB3b24ndCBiZSBza2lwcGluZyBhCisJIyBidWlsZCBvZiBhIHRhZy4KKworCWlmIFRBRz0kKGdpdCBkZXNjcmliZSAtLWV4YWN0LW1hdGNoICIkQ0lfQlJBTkNIIiAyPi9kZXYvbnVsbCkgJiYKKwkJdGVzdCAiJFRBRyIgIT0gIiRDSV9CUkFOQ0giCisJdGhlbgorCQllY2hvICIkKHRwdXQgc2V0YWYgMilUaXAgb2YgJENJX0JSQU5DSCBpcyBleGFjdGx5IGF0ICRUQUckKHRwdXQgc2dyMCkiCisJCWV4aXQgMAorCWZpCit9CisKKyMgU2F2ZSBzb21lIGluZm8gYWJvdXQgdGhlIGN1cnJlbnQgY29tbWl0J3MgdHJlZSwgc28gd2UgY2FuIHNraXAgdGhlIGJ1aWxkCisjIGpvYiBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWUgdHJlZSBhZ2FpbiBhbmQgY2FuIHByb3ZpZGUgYSB1c2VmdWwgaW5mbworIyBtZXNzYWdlLgorc2F2ZV9nb29kX3RyZWUgKCkgeworCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSAkQ0lfQ09NTUlUXnt0cmVlfSkgJENJX0NPTU1JVCAkQ0lfSk9CX05VTUJFUiAkQ0lfSk9CX0lEIiA+PiIkZ29vZF90cmVlc19maWxlIgorCSMgbGltaXQgdGhlIGZpbGUgc2l6ZQorCXRhaWwgLTEwMDAgIiRnb29kX3RyZWVzX2ZpbGUiID4iJGdvb2RfdHJlZXNfZmlsZSIudG1wCisJbXYgIiRnb29kX3RyZWVzX2ZpbGUiLnRtcCAiJGdvb2RfdHJlZXNfZmlsZSIKK30KKworIyBTa2lwIHRoZSBidWlsZCBqb2IgaWYgdGhlIHNhbWUgdHJlZSBoYXMgYWxyZWFkeSBiZWVuIGJ1aWx0IGFuZCB0ZXN0ZWQKKyMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSAoZS5nLiBiZWNhdXNlIHRoZSBicmFuY2ggZ290IHJlYmFzZWQsIGNoYW5naW5nIG9ubHkKKyMgdGhlIGNvbW1pdCBtZXNzYWdlcykuCitza2lwX2dvb2RfdHJlZSAoKSB7CisJaWYgdGVzdCAiJFRSQVZJU19ERUJVR19NT0RFIiA9IHRydWUKKwl0aGVuCisJCXJldHVybgorCWZpCisKKwlpZiAhIGdvb2RfdHJlZV9pbmZvPSIkKGdyZXAgIl4kKGdpdCByZXYtcGFyc2UgJENJX0NPTU1JVF57dHJlZX0pICIgIiRnb29kX3RyZWVzX2ZpbGUiKSIKKwl0aGVuCisJCSMgSGF2ZW4ndCBzZWVuIHRoaXMgdHJlZSB5ZXQsIG9yIG5vIGNhY2hlZCBnb29kIHRyZWVzIGZpbGUgeWV0LgorCQkjIENvbnRpbnVlIHRoZSBidWlsZCBqb2IuCisJCXJldHVybgorCWZpCisKKwllY2hvICIkZ29vZF90cmVlX2luZm8iIHwgeworCQlyZWFkIHRyZWUgcHJldl9nb29kX2NvbW1pdCBwcmV2X2dvb2Rfam9iX251bWJlciBwcmV2X2dvb2Rfam9iX2lkCisKKwkJaWYgdGVzdCAiJENJX0pPQl9JRCIgPSAiJHByZXZfZ29vZF9qb2JfaWQiCisJCXRoZW4KKwkJCWNhdCA8PC1FT0YKKwkJCSQodHB1dCBzZXRhZiAyKVNraXBwaW5nIGJ1aWxkIGpvYiBmb3IgY29tbWl0ICRDSV9DT01NSVQuJCh0cHV0IHNncjApCisJCQlUaGlzIGNvbW1pdCBoYXMgYWxyZWFkeSBiZWVuIGJ1aWx0IGFuZCB0ZXN0ZWQgc3VjY2Vzc2Z1bGx5IGJ5IHRoaXMgYnVpbGQgam9iLgorCQkJVG8gZm9yY2UgYSByZS1idWlsZCBkZWxldGUgdGhlIGJyYW5jaCdzIGNhY2hlIGFuZCB0aGVuIGhpdCAnUmVzdGFydCBqb2InLgorCQkJRU9GCisJCWVsc2UKKwkJCWNhdCA8PC1FT0YKKwkJCSQodHB1dCBzZXRhZiAyKVNraXBwaW5nIGJ1aWxkIGpvYiBmb3IgY29tbWl0ICRDSV9DT01NSVQuJCh0cHV0IHNncjApCisJCQlUaGlzIGNvbW1pdCdzIHRyZWUgaGFzIGFscmVhZHkgYmVlbiBidWlsdCBhbmQgdGVzdGVkIHN1Y2Nlc3NmdWxseSBpbiBidWlsZCBqb2IgJHByZXZfZ29vZF9qb2JfbnVtYmVyIGZvciBjb21taXQgJHByZXZfZ29vZF9jb21taXQuCisJCQlUaGUgbG9nIG9mIHRoYXQgYnVpbGQgam9iIGlzIGF2YWlsYWJsZSBhdCAkKHVybF9mb3Jfam9iX2lkICRwcmV2X2dvb2Rfam9iX2lkKQorCQkJVG8gZm9yY2UgYSByZS1idWlsZCBkZWxldGUgdGhlIGJyYW5jaCdzIGNhY2hlIGFuZCB0aGVuIGhpdCAnUmVzdGFydCBqb2InLgorCQkJRU9GCisJCWZpCisJfQorCisJZXhpdCAwCit9CisKK2NoZWNrX3VuaWdub3JlZF9idWlsZF9hcnRpZmFjdHMgKCkKK3sKKwkhIGdpdCBscy1maWxlcyAtLW90aGVyIC0tZXhjbHVkZS1zdGFuZGFyZCAtLWVycm9yLXVubWF0Y2ggXAorCQktLSAnOi8qJyAyPi9kZXYvbnVsbCB8fAorCXsKKwkJZWNobyAiJCh0cHV0IHNldGFmIDEpZXJyb3I6IGZvdW5kIHVuaWdub3JlZCBidWlsZCBhcnRpZmFjdHMkKHRwdXQgc2dyMCkiCisJCWZhbHNlCisJfQorfQorCisjIENsZWFyIE1BS0VGTEFHUyB0aGF0IG1heSBjb21lIGZyb20gdGhlIG91dHNpZGUgd29ybGQuCitleHBvcnQgTUFLRUZMQUdTPQorCisjIFNldCAnZXhpdCBvbiBlcnJvcicgZm9yIGFsbCBDSSBzY3JpcHRzIHRvIGxldCB0aGUgY2FsbGVyIGtub3cgdGhhdAorIyBzb21ldGhpbmcgd2VudCB3cm9uZy4KKyMgU2V0IHRyYWNpbmcgZXhlY3V0ZWQgY29tbWFuZHMsIHByaW1hcmlseSBzZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcworIyBhbmQgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuCitzZXQgLWV4CisKK2lmIHRlc3QgdHJ1ZSA9ICIkVFJBVklTIgordGhlbgorCUNJX1RZUEU9dHJhdmlzCisJIyBXaGVuIGJ1aWxkaW5nIGEgUFIsIFRSQVZJU19CUkFOQ0ggcmVmZXJzIHRvIHRoZSAqdGFyZ2V0KiBicmFuY2guIE5vdAorCSMgd2hhdCB3ZSB3YW50IGhlcmUuIFdlIHdhbnQgdGhlIHNvdXJjZSBicmFuY2ggaW5zdGVhZC4KKwlDSV9CUkFOQ0g9IiR7VFJBVklTX1BVTExfUkVRVUVTVF9CUkFOQ0g6LSRUUkFWSVNfQlJBTkNIfSIKKwlDSV9DT01NSVQ9IiRUUkFWSVNfQ09NTUlUIgorCUNJX0pPQl9JRD0iJFRSQVZJU19KT0JfSUQiCisJQ0lfSk9CX05VTUJFUj0iJFRSQVZJU19KT0JfTlVNQkVSIgorCUNJX09TX05BTUU9IiRUUkFWSVNfT1NfTkFNRSIKKwlDSV9SRVBPX1NMVUc9IiRUUkFWSVNfUkVQT19TTFVHIgorCisJY2FjaGVfZGlyPSIkSE9NRS90cmF2aXMtY2FjaGUiCisKKwl1cmxfZm9yX2pvYl9pZCAoKSB7CisJCWVjaG8gImh0dHBzOi8vdHJhdmlzLWNpLm9yZy8kQ0lfUkVQT19TTFVHL2pvYnMvJDEiCisJfQorCisJQlJFV19JTlNUQUxMX1BBQ0tBR0VTPSJnaXQtbGZzIGdldHRleHQiCisJZXhwb3J0IEdJVF9QUk9WRV9PUFRTPSItLXRpbWVyIC0tam9icyAzIC0tc3RhdGU9ZmFpbGVkLHNsb3csc2F2ZSIKKwlleHBvcnQgR0lUX1RFU1RfT1BUUz0iLS12ZXJib3NlLWxvZyAteCAtLWltbWVkaWF0ZSIKKwlNQUtFRkxBR1M9IiRNQUtFRkxBR1MgLS1qb2JzPTIiCitlbGlmIHRlc3QgLW4gIiRTWVNURU1fQ09MTEVDVElPTlVSSSIgfHwgdGVzdCAtbiAiJFNZU1RFTV9UQVNLREVGSU5JVElPTlNVUkkiCit0aGVuCisJQ0lfVFlQRT1henVyZS1waXBlbGluZXMKKwkjIFdlIGFyZSBydW5uaW5nIGluIEF6dXJlIFBpcGVsaW5lcworCUNJX0JSQU5DSD0iJEJVSUxEX1NPVVJDRUJSQU5DSCIKKwlDSV9DT01NSVQ9IiRCVUlMRF9TT1VSQ0VWRVJTSU9OIgorCUNJX0pPQl9JRD0iJEJVSUxEX0JVSUxESUQiCisJQ0lfSk9CX05VTUJFUj0iJEJVSUxEX0JVSUxETlVNQkVSIgorCUNJX09TX05BTUU9IiQoZWNobyAiJEFHRU5UX09TIiB8IHRyIEEtWiBhLXopIgorCXRlc3QgZGFyd2luICE9ICIkQ0lfT1NfTkFNRSIgfHwgQ0lfT1NfTkFNRT1vc3gKKwlDSV9SRVBPX1NMVUc9IiQoZXhwciAiJEJVSUxEX1JFUE9TSVRPUllfVVJJIiA6ICcuKi9cKFteL10qL1teL10qXCkkJykiCisJQ0M9IiR7Q0M6LWdjY30iCisKKwkjIHVzZSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgY2FjaGUgZGlyIChiZWNhdXNlIHRoZSBmaWxlIHNoYXJlIGlzIHNoYXJlZAorCSMgYW1vbmcgKmFsbCogcGhhc2VzKQorCWNhY2hlX2Rpcj0iJEhPTUUvdGVzdC1jYWNoZS8kU1lTVEVNX1BIQVNFTkFNRSIKKworCXVybF9mb3Jfam9iX2lkICgpIHsKKwkJZWNobyAiJFNZU1RFTV9UQVNLREVGSU5JVElPTlNVUkkkU1lTVEVNX1RFQU1QUk9KRUNUL19idWlsZC9yZXN1bHRzP2J1aWxkSWQ9JDEiCisJfQorCisJZXhwb3J0IEdJVF9QUk9WRV9PUFRTPSItLXRpbWVyIC0tam9icyAxMCAtLXN0YXRlPWZhaWxlZCxzbG93LHNhdmUiCisJZXhwb3J0IEdJVF9URVNUX09QVFM9Ii0tdmVyYm9zZS1sb2cgLXggLS13cml0ZS1qdW5pdC14bWwiCisJTUFLRUZMQUdTPSIkTUFLRUZMQUdTIC0tam9icz0xMCIKKwl0ZXN0IHdpbmRvd3NfbnQgIT0gIiRDSV9PU19OQU1FIiB8fAorCUdJVF9URVNUX09QVFM9Ii0tbm8tY2hhaW4tbGludCAtLW5vLWJpbi13cmFwcGVycyAkR0lUX1RFU1RfT1BUUyIKK2Vsc2UKKwllY2hvICJDb3VsZCBub3QgaWRlbnRpZnkgQ0kgdHlwZSIgPiYyCisJZXhpdCAxCitmaQorCitnb29kX3RyZWVzX2ZpbGU9IiRjYWNoZV9kaXIvZ29vZC10cmVlcyIKKworbWtkaXIgLXAgIiRjYWNoZV9kaXIiCisKK3NraXBfYnJhbmNoX3RpcF93aXRoX3RhZworc2tpcF9nb29kX3RyZWUKKworaWYgdGVzdCAteiAiJGpvYm5hbWUiCit0aGVuCisJam9ibmFtZT0iJENJX09TX05BTUUtJENDIgorZmkKKworZXhwb3J0IERFVkVMT1BFUj0xCitleHBvcnQgREVGQVVMVF9URVNUX1RBUkdFVD1wcm92ZQorZXhwb3J0IEdJVF9URVNUX0NMT05FXzJHQj10cnVlCisKK2Nhc2UgIiRqb2JuYW1lIiBpbgorbGludXgtY2xhbmd8bGludXgtZ2NjKQorCWlmIFsgIiRqb2JuYW1lIiA9IGxpbnV4LWdjYyBdCisJdGhlbgorCQlleHBvcnQgQ0M9Z2NjLTgKKwlmaQorCisJZXhwb3J0IEdJVF9URVNUX0hUVFBEPXRydWUKKworCSMgVGhlIExpbnV4IGJ1aWxkIGluc3RhbGxzIHRoZSBkZWZpbmVkIGRlcGVuZGVuY3kgdmVyc2lvbnMgYmVsb3cuCisJIyBUaGUgT1MgWCBidWlsZCBpbnN0YWxscyBtdWNoIG1vcmUgcmVjZW50IHZlcnNpb25zLCB3aGljaGV2ZXIKKwkjIHdlcmUgcmVjb3JkZWQgaW4gdGhlIEhvbWVicmV3IGRhdGFiYXNlIHVwb24gY3JlYXRpbmcgdGhlIE9TIFgKKwkjIGltYWdlLgorCSMgS2VlcCB0aGF0IGluIG1pbmQgd2hlbiB5b3UgZW5jb3VudGVyIGEgYnJva2VuIE9TIFggYnVpbGQhCisJZXhwb3J0IExJTlVYX1A0X1ZFUlNJT049IjE2LjIiCisJZXhwb3J0IExJTlVYX0dJVF9MRlNfVkVSU0lPTj0iMS41LjIiCisKKwlQNF9QQVRIPSIkSE9NRS9jdXN0b20vcDQiCisJR0lUX0xGU19QQVRIPSIkSE9NRS9jdXN0b20vZ2l0LWxmcyIKKwlleHBvcnQgUEFUSD0iJEdJVF9MRlNfUEFUSDokUDRfUEFUSDokUEFUSCIKKwk7Oworb3N4LWNsYW5nfG9zeC1nY2MpCisJaWYgWyAiJGpvYm5hbWUiID0gb3N4LWdjYyBdCisJdGhlbgorCQlleHBvcnQgQ0M9Z2NjLTkKKwlmaQorCisJIyB0OTgxMCBvY2Nhc2lvbmFsbHkgZmFpbHMgb24gVHJhdmlzIENJIE9TIFgKKwkjIHQ5ODE2IG9jY2FzaW9uYWxseSBmYWlscyB3aXRoICJUQVAgb3V0IG9mIHNlcXVlbmNlIGVycm9ycyIgb24KKwkjIFRyYXZpcyBDSSBPUyBYCisJZXhwb3J0IEdJVF9TS0lQX1RFU1RTPSJ0OTgxMCB0OTgxNiIKKwk7OworR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04pCisJZXhwb3J0IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPXRydWUKKwk7OworZXNhYworCitNQUtFRkxBR1M9IiRNQUtFRkxBR1MgQ0M9JHtDQzotY2N9IgpkaWZmIC0tZ2l0IGEvY2kvbWFrZS10ZXN0LWFydGlmYWN0cy5zaCBiL2NpL21ha2UtdGVzdC1hcnRpZmFjdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjQ2OTY3NAotLS0gL2Rldi9udWxsCisrKyBiL2NpL21ha2UtdGVzdC1hcnRpZmFjdHMuc2gKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisjCisjIEJ1aWxkIEdpdCBhbmQgc3RvcmUgYXJ0aWZhY3RzIGZvciB0ZXN0aW5nCisjCisKK21rZGlyIC1wICIkMSIgIyBpbiBjYXNlIGNpL2xpYi5zaCBkZWNpZGVzIHRvIHF1aXQgZWFybHkKKworLiAkezAlLyp9L2xpYi5zaAorCittYWtlIGFydGlmYWN0cy10YXIgQVJUSUZBQ1RTX0RJUkVDVE9SWT0iJDEiCisKK2NoZWNrX3VuaWdub3JlZF9idWlsZF9hcnRpZmFjdHMKZGlmZiAtLWdpdCBhL2NpL21vdW50LWZpbGVzaGFyZS5zaCBiL2NpL21vdW50LWZpbGVzaGFyZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNmI1OGE4Ci0tLSAvZGV2L251bGwKKysrIGIvY2kvbW91bnQtZmlsZXNoYXJlLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCitkaWUgKCkgeworCWVjaG8gIiQqIiA+JjIKKwlleGl0IDEKK30KKwordGVzdCAkIyA9IDQgfHwKK2RpZSAiVXNhZ2U6ICQwIDxzaGFyZT4gPHVzZXJuYW1lPiA8cGFzc3dvcmQ+IDxtb3VudHBvaW50PiIKKworbWtkaXIgLXAgIiQ0IiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgJDQiCisKK2Nhc2UgIiQodW5hbWUgLXMpIiBpbgorTGludXgpCisJc3VkbyBtb3VudCAtdCBjaWZzIC1vIHZlcnM9My4wLHVzZXJuYW1lPSIkMiIscGFzc3dvcmQ9IiQzIixkaXJfbW9kZT0wNzc3LGZpbGVfbW9kZT0wNzc3LHNlcnZlcmlubyAiJDEiICIkNCIKKwk7OworRGFyd2luKQorCXBhc3M9IiQoZWNobyAiJDMiIHwgc2VkIC1lICdzL1wvLyUyRi9nJyAtZSAncy8rLyUyQi9nJykiICYmCisJbW91bnQgLXQgc21iZnMsc29mdCAic21iOi8vJDI6JHBhc3NAJHsxIy8vfSIgIiQ0IgorCTs7CisqKQorCWRpZSAiTm8gc3VwcG9ydCBmb3IgJCh1bmFtZSAtcykiCisJOzsKK2VzYWMgfHwKK2RpZSAiQ291bGQgbm90IG1vdW50ICQ0IgpkaWZmIC0tZ2l0IGEvY2kvcHJpbnQtdGVzdC1mYWlsdXJlcy5zaCBiL2NpL3ByaW50LXRlc3QtZmFpbHVyZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTY4OGEyNgotLS0gL2Rldi9udWxsCisrKyBiL2NpL3ByaW50LXRlc3QtZmFpbHVyZXMuc2gKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisjCisjIFByaW50IG91dHB1dCBvZiBmYWlsaW5nIHRlc3RzCisjCisKKy4gJHswJS8qfS9saWIuc2gKKworIyBUcmFjaW5nIGV4ZWN1dGVkIGNvbW1hbmRzIHdvdWxkIHByb2R1Y2UgdG9vIG11Y2ggbm9pc2UgaW4gdGhlIGxvb3AgYmVsb3cuCitzZXQgK3gKKworY2QgdC8KKworaWYgISBscyB0ZXN0LXJlc3VsdHMvKi5leGl0ID4vZGV2L251bGwgMj4vZGV2L251bGwKK3RoZW4KKwllY2hvICJCdWlsZCBqb2IgZmFpbGVkIGJlZm9yZSB0aGUgdGVzdHMgY291bGQgaGF2ZSBiZWVuIHJ1biIKKwlleGl0CitmaQorCitjYXNlICIkam9ibmFtZSIgaW4KK29zeC1jbGFuZ3xvc3gtZ2NjKQorCSMgYmFzZTY0IGluIE9TWCBkb2Vzbid0IHdyYXAgaXRzIG91dHB1dCBhdCA3NiBjb2x1bW5zIGJ5CisJIyBkZWZhdWx0LCBidXQgcHJpbnRzIGEgc2luZ2xlLCB2ZXJ5IGxvbmcgbGluZS4KKwliYXNlNjRfb3B0cz0iLWIgNzYiCisJOzsKK2VzYWMKKworY29tYmluZWRfdHJhc2hfc2l6ZT0wCitmb3IgVEVTVF9FWElUIGluIHRlc3QtcmVzdWx0cy8qLmV4aXQKK2RvCisJaWYgWyAiJChjYXQgIiRURVNUX0VYSVQiKSIgIT0gIjAiIF0KKwl0aGVuCisJCVRFU1RfT1VUPSIke1RFU1RfRVhJVCVleGl0fW91dCIKKwkJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCQllY2hvICIkKHRwdXQgc2V0YWYgMSkke1RFU1RfT1VUfS4uLiQodHB1dCBzZ3IwKSIKKwkJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCQljYXQgIiR7VEVTVF9PVVR9IgorCisJCXRlc3RfbmFtZT0iJHtURVNUX0VYSVQlLmV4aXR9IgorCQl0ZXN0X25hbWU9IiR7dGVzdF9uYW1lIyMqL30iCisJCXRyYXNoX2Rpcj0idHJhc2ggZGlyZWN0b3J5LiR0ZXN0X25hbWUiCisJCWNhc2UgIiRDSV9UWVBFIiBpbgorCQl0cmF2aXMpCisJCQk7OworCQlhenVyZS1waXBlbGluZXMpCisJCQlta2RpciAtcCBmYWlsZWQtdGVzdC1hcnRpZmFjdHMKKwkJCW12ICIkdHJhc2hfZGlyIiBmYWlsZWQtdGVzdC1hcnRpZmFjdHMKKwkJCWNvbnRpbnVlCisJCQk7OworCQkqKQorCQkJZWNobyAiVW5oYW5kbGVkIENJIHR5cGU6ICRDSV9UWVBFIiA+JjIKKwkJCWV4aXQgMQorCQkJOzsKKwkJZXNhYworCQl0cmFzaF90Z3pfYjY0PSJ0cmFzaC4kdGVzdF9uYW1lLmJhc2U2NCIKKwkJaWYgWyAtZCAiJHRyYXNoX2RpciIgXQorCQl0aGVuCisJCQl0YXIgY3pwICIkdHJhc2hfZGlyIiB8YmFzZTY0ICRiYXNlNjRfb3B0cyA+IiR0cmFzaF90Z3pfYjY0IgorCisJCQl0cmFzaF9zaXplPSQod2MgLWMgPCIkdHJhc2hfdGd6X2I2NCIpCisJCQlpZiBbICR0cmFzaF9zaXplIC1ndCAxMDQ4NTc2IF0KKwkJCXRoZW4KKwkJCQkjIGxhcmdlciB0aGFuIDFNQgorCQkJCWVjaG8gIiQodHB1dCBzZXRhZiAxKURpZG4ndCBpbmNsdWRlIHRoZSB0cmFzaCBkaXJlY3Rvcnkgb2YgJyR0ZXN0X25hbWUnIGluIHRoZSB0cmFjZSBsb2csIGl0J3MgdG9vIGJpZyQodHB1dCBzZ3IwKSIKKwkJCQljb250aW51ZQorCQkJZmkKKworCQkJbmV3X2NvbWJpbmVkX3RyYXNoX3NpemU9JCgoJGNvbWJpbmVkX3RyYXNoX3NpemUgKyAkdHJhc2hfc2l6ZSkpCisJCQlpZiBbICRuZXdfY29tYmluZWRfdHJhc2hfc2l6ZSAtZ3QgMTA0ODU3NiBdCisJCQl0aGVuCisJCQkJZWNobyAiJCh0cHV0IHNldGFmIDEpRGlkbid0IGluY2x1ZGUgdGhlIHRyYXNoIGRpcmVjdG9yeSBvZiAnJHRlc3RfbmFtZScgaW4gdGhlIHRyYWNlIGxvZywgdGhlcmUgaXMgcGxlbnR5IG9mIHRyYXNoIGluIHRoZXJlIGFscmVhZHkuJCh0cHV0IHNncjApIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJY29tYmluZWRfdHJhc2hfc2l6ZT0kbmV3X2NvbWJpbmVkX3RyYXNoX3NpemUKKworCQkJIyBETyBOT1QgbW9kaWZ5IHRoZXNlIHR3byAnZWNobyctZWQgc3RyaW5ncyBiZWxvdworCQkJIyB3aXRob3V0IHVwZGF0aW5nICdjaS91dGlsL2V4dHJhY3QtdHJhc2gtZGlycy5zaCcKKwkJCSMgYXMgd2VsbC4KKwkJCWVjaG8gIiQodHB1dCBzZXRhZiAxKVN0YXJ0IG9mIHRyYXNoIGRpcmVjdG9yeSBvZiAnJHRlc3RfbmFtZSc6JCh0cHV0IHNncjApIgorCQkJY2F0ICIkdHJhc2hfdGd6X2I2NCIKKwkJCWVjaG8gIiQodHB1dCBzZXRhZiAxKUVuZCBvZiB0cmFzaCBkaXJlY3Rvcnkgb2YgJyR0ZXN0X25hbWUnJCh0cHV0IHNncjApIgorCQlmaQorCWZpCitkb25lCisKK2lmIFsgJGNvbWJpbmVkX3RyYXNoX3NpemUgLWd0IDAgXQordGhlbgorCWVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwllY2hvICJUcmFzaCBkaXJlY3RvcmllcyBlbWJlZGRlZCBpbiB0aGlzIGxvZyBjYW4gYmUgZXh0cmFjdGVkIGJ5IHJ1bm5pbmc6IgorCWVjaG8KKwllY2hvICIgIGN1cmwgaHR0cHM6Ly9hcGkudHJhdmlzLWNpLm9yZy92My9qb2IvJFRSQVZJU19KT0JfSUQvbG9nLnR4dCB8Li9jaS91dGlsL2V4dHJhY3QtdHJhc2gtZGlycy5zaCIKK2ZpCmRpZmYgLS1naXQgYS9jaS9ydW4tYnVpbGQtYW5kLXRlc3RzLnNoIGIvY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZGY1NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvY2kvcnVuLWJ1aWxkLWFuZC10ZXN0cy5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKyMKKyMgQnVpbGQgYW5kIHRlc3QgR2l0CisjCisKKy4gJHswJS8qfS9saWIuc2gKKworY2FzZSAiJENJX09TX05BTUUiIGluCit3aW5kb3dzKikgY21kIC8vYyBta2xpbmsgLy9qIHRcXC5wcm92ZSAiJChjeWdwYXRoIC1hdyAiJGNhY2hlX2Rpci8ucHJvdmUiKSI7OworKikgbG4gLXMgIiRjYWNoZV9kaXIvLnByb3ZlIiB0Ly5wcm92ZTs7Citlc2FjCisKK21ha2UKK2Nhc2UgIiRqb2JuYW1lIiBpbgorbGludXgtZ2NjKQorCW1ha2UgdGVzdAorCWV4cG9ydCBHSVRfVEVTVF9TUExJVF9JTkRFWD15ZXMKKwlleHBvcnQgR0lUX1RFU1RfRlVMTF9JTl9QQUNLX0FSUkFZPXRydWUKKwlleHBvcnQgR0lUX1RFU1RfT0VfU0laRT0xMAorCWV4cG9ydCBHSVRfVEVTVF9PRV9ERUxUQV9TSVpFPTUKKwlleHBvcnQgR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTEKKwlleHBvcnQgR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWD0xCisJZXhwb3J0IEdJVF9URVNUX0FERF9JX1VTRV9CVUlMVElOPTEKKwltYWtlIHRlc3QKKwk7OworbGludXgtZ2NjLTQuOCkKKwkjIERvbid0IHJ1biB0aGUgdGVzdHM7IHdlIG9ubHkgY2FyZSBhYm91dCB3aGV0aGVyIEdpdCBjYW4gYmUKKwkjIGJ1aWx0IHdpdGggR0NDIDQuOCwgYXMgaXQgZXJyb3JzIG91dCBvbiBzb21lIHVuZGVzaXJlZCAoQzk5KQorCSMgY29uc3RydWN0cyB0aGF0IG5ld2VyIGNvbXBpbGVycyBzZWVtIHRvIHF1aWV0bHkgYWNjZXB0LgorCTs7CisqKQorCW1ha2UgdGVzdAorCTs7Citlc2FjCisKK2NoZWNrX3VuaWdub3JlZF9idWlsZF9hcnRpZmFjdHMKKworc2F2ZV9nb29kX3RyZWUKZGlmZiAtLWdpdCBhL2NpL3J1bi1saW51eDMyLWJ1aWxkLnNoIGIvY2kvcnVuLWxpbnV4MzItYnVpbGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTNhMTkzYQotLS0gL2Rldi9udWxsCisrKyBiL2NpL3J1bi1saW51eDMyLWJ1aWxkLnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyBCdWlsZCBhbmQgdGVzdCBHaXQgaW4gYSAzMi1iaXQgZW52aXJvbm1lbnQKKyMKKyMgVXNhZ2U6CisjICAgcnVuLWxpbnV4MzItYnVpbGQuc2ggPGhvc3QtdXNlci1pZD4KKyMKKworc2V0IC1leAorCitpZiB0ZXN0ICQjIC1uZSAxIHx8IHRlc3QgLXogIiQxIgordGhlbgorCWVjaG8gPiYyICJ1c2FnZTogcnVuLWxpbnV4MzItYnVpbGQuc2ggPGhvc3QtdXNlci1pZD4iCisJZXhpdCAxCitmaQorCisjIFVwZGF0ZSBwYWNrYWdlcyB0byB0aGUgbGF0ZXN0IGF2YWlsYWJsZSB2ZXJzaW9ucworbGludXgzMiAtLTMyYml0IGkzODYgc2ggLWMgJworICAgIGFwdCB1cGRhdGUgPi9kZXYvbnVsbCAmJgorICAgIGFwdCBpbnN0YWxsIC15IGJ1aWxkLWVzc2VudGlhbCBsaWJjdXJsNC1vcGVuc3NsLWRldiBsaWJzc2wtZGV2IFwKKwlsaWJleHBhdC1kZXYgZ2V0dGV4dCBweXRob24gPi9kZXYvbnVsbAorJworCisjIElmIHRoaXMgc2NyaXB0IHJ1bnMgaW5zaWRlIGEgZG9ja2VyIGNvbnRhaW5lciwgdGhlbiBhbGwgY29tbWFuZHMgYXJlCisjIHVzdWFsbHkgZXhlY3V0ZWQgYXMgcm9vdC4gQ29uc2VxdWVudGx5LCB0aGUgaG9zdCB1c2VyIG1pZ2h0IG5vdCBiZQorIyBhYmxlIHRvIGFjY2VzcyB0aGUgdGVzdCBvdXRwdXQgZmlsZXMuCisjIElmIGEgbm9uIDAgaG9zdCB1c2VyIGlkIGlzIGdpdmVuLCB0aGVuIGNyZWF0ZSBhIHVzZXIgImNpIiB3aXRoIHRoYXQKKyMgdXNlciBpZCB0byBtYWtlIGV2ZXJ5dGhpbmcgYWNjZXNzaWJsZSB0byB0aGUgaG9zdCB1c2VyLgorSE9TVF9VSUQ9JDEKK2lmIHRlc3QgJEhPU1RfVUlEIC1lcSAwCit0aGVuCisJIyBKdXN0IGluIGNhc2Ugc29tZW9uZSBkb2VzIHdhbnQgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlIGFzIHJvb3QuCisJQ0lfVVNFUj1yb290CitlbHNlCisJQ0lfVVNFUj1jaQorCWlmIHRlc3QgIiQoaWQgLXUgJENJX1VTRVIgMj4vZGV2L251bGwpIiA9ICRIT1NUX1VJRAorCXRoZW4KKwkJZWNobyAidXNlciAnJENJX1VTRVInIGFscmVhZHkgZXhpc3RzIHdpdGggdGhlIHJlcXVlc3RlZCBJRCAkSE9TVF9VSUQiCisJZWxzZQorCQl1c2VyYWRkIC11ICRIT1NUX1VJRCAkQ0lfVVNFUgorCWZpCisKKwkjIER1ZSB0byBhIGJ1ZyB0aGUgdGVzdCBzdWl0ZSB3YXMgcnVuIGFzIHJvb3QgaW4gdGhlIHBhc3QsIHNvCisJIyBhIHByb3ZlIHN0YXRlIGZpbGUgY3JlYXRlZCBiYWNrIHRoZW4gaXMgb25seSBhY2Nlc3NpYmxlIGJ5CisJIyByb290LiAgTm93IHRoYXQgYnVnIGlzIGZpeGVkLCB0aGUgdGVzdCBzdWl0ZSBpcyBydW4gYXMgYQorCSMgcmVndWxhciB1c2VyLCBidXQgdGhlIHByb3ZlIHN0YXRlIGZpbGUgY29taW5nIGZyb20gVHJhdmlzCisJIyBDSSdzIGNhY2hlIG1pZ2h0IHN0aWxsIGJlIG93bmVkIGJ5IHJvb3QuCisJIyBNYWtlIHN1cmUgdGhhdCB0aGlzIHVzZXIgaGFzIHJpZ2h0cyB0byBhbnkgY2FjaGVkIGZpbGVzLAorCSMgaW5jbHVkaW5nIGFuIGV4aXN0aW5nIHByb3ZlIHN0YXRlIGZpbGUuCisJdGVzdCAtbiAiJGNhY2hlX2RpciIgJiYgY2hvd24gLVIgJEhPU1RfVUlEOiRIT1NUX1VJRCAiJGNhY2hlX2RpciIKK2ZpCisKKyMgQnVpbGQgYW5kIHRlc3QKK2xpbnV4MzIgLS0zMmJpdCBpMzg2IHN1IC1tIC1sICRDSV9VU0VSIC1jICcKKwlzZXQgLWV4CisJY2QgL3Vzci9zcmMvZ2l0CisJdGVzdCAtbiAiJGNhY2hlX2RpciIgJiYgbG4gLXMgIiRjYWNoZV9kaXIvLnByb3ZlIiB0Ly5wcm92ZQorCW1ha2UKKwltYWtlIHRlc3QKKycKZGlmZiAtLWdpdCBhL2NpL3J1bi1saW51eDMyLWRvY2tlci5zaCBiL2NpL3J1bi1saW51eDMyLWRvY2tlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTFhY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvY2kvcnVuLWxpbnV4MzItZG9ja2VyLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorIworIyBEb3dubG9hZCBhbmQgcnVuIERvY2tlciBpbWFnZSB0byBidWlsZCBhbmQgdGVzdCAzMi1iaXQgR2l0CisjCisKKy4gJHswJS8qfS9saWIuc2gKKworZG9ja2VyIHB1bGwgZGFhbGQvdWJ1bnR1MzI6eGVuaWFsCisKKyMgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBkZWJ1ZyB0aGUgZG9ja2VyIGJ1aWxkIGxvY2FsbHk6CisjICQgZG9ja2VyIHJ1biAtaXR2ICIke1BXRH06L3Vzci9zcmMvZ2l0IiAtLWVudHJ5cG9pbnQgL2Jpbi9iYXNoIGRhYWxkL3VidW50dTMyOnhlbmlhbAorIyByb290QGNvbnRhaW5lcjovIyAvdXNyL3NyYy9naXQvY2kvcnVuLWxpbnV4MzItYnVpbGQuc2ggPGhvc3QtdXNlci1pZD4KKworY29udGFpbmVyX2NhY2hlX2Rpcj0vdG1wL3RyYXZpcy1jYWNoZQorCitkb2NrZXIgcnVuIFwKKwktLWludGVyYWN0aXZlIFwKKwktLWVudiBERVZFTE9QRVIgXAorCS0tZW52IERFRkFVTFRfVEVTVF9UQVJHRVQgXAorCS0tZW52IEdJVF9QUk9WRV9PUFRTIFwKKwktLWVudiBHSVRfVEVTVF9PUFRTIFwKKwktLWVudiBHSVRfVEVTVF9DTE9ORV8yR0IgXAorCS0tZW52IGNhY2hlX2Rpcj0iJGNvbnRhaW5lcl9jYWNoZV9kaXIiIFwKKwktLXZvbHVtZSAiJHtQV0R9Oi91c3Ivc3JjL2dpdCIgXAorCS0tdm9sdW1lICIkY2FjaGVfZGlyOiRjb250YWluZXJfY2FjaGVfZGlyIiBcCisJZGFhbGQvdWJ1bnR1MzI6eGVuaWFsIFwKKwkvdXNyL3NyYy9naXQvY2kvcnVuLWxpbnV4MzItYnVpbGQuc2ggJChpZCAtdSAkVVNFUikKKworY2hlY2tfdW5pZ25vcmVkX2J1aWxkX2FydGlmYWN0cworCitzYXZlX2dvb2RfdHJlZQpkaWZmIC0tZ2l0IGEvY2kvcnVuLXN0YXRpYy1hbmFseXNpcy5zaCBiL2NpL3J1bi1zdGF0aWMtYW5hbHlzaXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjViY2ViZAotLS0gL2Rldi9udWxsCisrKyBiL2NpL3J1bi1zdGF0aWMtYW5hbHlzaXMuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjCisjIFBlcmZvcm0gdmFyaW91cyBzdGF0aWMgY29kZSBhbmFseXNpcyBjaGVja3MKKyMKKworLiAkezAlLyp9L2xpYi5zaAorCittYWtlIGNvY2NpY2hlY2sKKworc2V0ICt4CisKK2ZhaWw9Citmb3IgY29jY2lfcGF0Y2ggaW4gY29udHJpYi9jb2NjaW5lbGxlLyoucGF0Y2gKK2RvCisJaWYgdGVzdCAtcyAiJGNvY2NpX3BhdGNoIgorCXRoZW4KKwkJZWNobyAiJCh0cHV0IHNldGFmIDEpQ29jY2luZWxsZSBzdWdnZXN0cyB0aGUgZm9sbG93aW5nIGNoYW5nZXMgaW4gJyRjb2NjaV9wYXRjaCc6JCh0cHV0IHNncjApIgorCQljYXQgIiRjb2NjaV9wYXRjaCIKKwkJZmFpbD1VbmZvcnR1bmF0ZWx5WWVzCisJZmkKK2RvbmUKKworaWYgdGVzdCAtbiAiJGZhaWwiCit0aGVuCisJZWNobyAiJCh0cHV0IHNldGFmIDEpZXJyb3I6IENvY2NpbmVsbGUgc3VnZ2VzdGVkIHNvbWUgY2hhbmdlcyQodHB1dCBzZ3IwKSIKKwlleGl0IDEKK2ZpCisKK21ha2UgaGRyLWNoZWNrIHx8CitleGl0IDEKKworc2F2ZV9nb29kX3RyZWUKZGlmZiAtLWdpdCBhL2NpL3J1bi10ZXN0LXNsaWNlLnNoIGIvY2kvcnVuLXRlc3Qtc2xpY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjhjMmMzMQotLS0gL2Rldi9udWxsCisrKyBiL2NpL3J1bi10ZXN0LXNsaWNlLnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorIworIyBUZXN0IEdpdCBpbiBwYXJhbGxlbAorIworCisuICR7MCUvKn0vbGliLnNoCisKK2Nhc2UgIiRDSV9PU19OQU1FIiBpbgord2luZG93cyopIGNtZCAvL2MgbWtsaW5rIC8vaiB0XFwucHJvdmUgIiQoY3lncGF0aCAtYXcgIiRjYWNoZV9kaXIvLnByb3ZlIikiOzsKKyopIGxuIC1zICIkY2FjaGVfZGlyLy5wcm92ZSIgdC8ucHJvdmU7OworZXNhYworCittYWtlIC0tcXVpZXQgLUMgdCBUPSIkKGNkIHQgJiYKKwkuL2hlbHBlci90ZXN0LXRvb2wgcGF0aC11dGlscyBzbGljZS10ZXN0cyAiJDEiICIkMiIgdFswLTldKi5zaCB8CisJdHIgJ1xuJyAnICcpIgorCitjaGVja191bmlnbm9yZWRfYnVpbGRfYXJ0aWZhY3RzCmRpZmYgLS1naXQgYS9jaS90ZXN0LWRvY3VtZW50YXRpb24uc2ggYi9jaS90ZXN0LWRvY3VtZW50YXRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU0MTg4OAotLS0gL2Rldi9udWxsCisrKyBiL2NpL3Rlc3QtZG9jdW1lbnRhdGlvbi5zaApAQCAtMCwwICsxLDQ1IEBACisjIS91c3IvYmluL2VudiBiYXNoCisjCisjIFBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiBkb2N1bWVudGF0aW9uIGFuZCBidWlsZCBpdC4KKyMKKworLiAkezAlLyp9L2xpYi5zaAorCitmaWx0ZXJfbG9nICgpIHsKKwlzZWQgLWUgJy9eR0lUX1ZFUlNJT04gPSAvZCcgXAorCSAgICAtZSAiL2NvbnN0YW50IEdlbTo6Q29uZmlnTWFwIGlzIGRlcHJlY2F0ZWQvZCIgXAorCSAgICAtZSAnL14gICAgXCogbmV3IGFzY2lpZG9jIGZsYWdzJC9kJyBcCisJICAgIC1lICcvc3RyaXBwZWQgbmFtZXNwYWNlIGJlZm9yZSBwcm9jZXNzaW5nL2QnIFwKKwkgICAgLWUgJy9BdHRyaWJ1dGVkLipJRHMgZm9yIGVsZW1lbnQvZCcgXAorCSAgICAiJDEiCit9CisKK21ha2UgY2hlY2stYnVpbHRpbnMKK21ha2UgY2hlY2stZG9jcworCisjIEJ1aWxkIGRvY3Mgd2l0aCBBc2NpaURvYworbWFrZSBkb2MgPiA+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+d2lkdGgpOworCWlmIChvcHRzICYmIG9wdHMtPmluZGVudCkKKwkJYXJndl9hcnJheV9wdXNoZihhcmd2LCAiLS1pbmRlbnQ9JXMiLCBvcHRzLT5pbmRlbnQpOworCWlmIChvcHRzICYmIG9wdHMtPnBhZGRpbmcpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoYXJndiwgIi0tcGFkZGluZz0lZCIsIG9wdHMtPnBhZGRpbmcpOworCisJZmZsdXNoKHN0ZG91dCk7CisJY29sdW1uX3Byb2Nlc3MuaW4gPSAtMTsKKwljb2x1bW5fcHJvY2Vzcy5vdXQgPSBkdXAoMSk7CisJY29sdW1uX3Byb2Nlc3MuZ2l0X2NtZCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY29sdW1uX3Byb2Nlc3MpKQorCQlyZXR1cm4gLTI7CisKKwlmZF9vdXQgPSBkdXAoMSk7CisJY2xvc2UoMSk7CisJZHVwMihjb2x1bW5fcHJvY2Vzcy5pbiwgMSk7CisJY2xvc2UoY29sdW1uX3Byb2Nlc3MuaW4pOworCXJldHVybiAwOworfQorCitpbnQgc3RvcF9jb2x1bW5fZmlsdGVyKHZvaWQpCit7CisJaWYgKGZkX291dCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJZmZsdXNoKHN0ZG91dCk7CisJY2xvc2UoMSk7CisJZmluaXNoX2NvbW1hbmQoJmNvbHVtbl9wcm9jZXNzKTsKKwlkdXAyKGZkX291dCwgMSk7CisJY2xvc2UoZmRfb3V0KTsKKwlmZF9vdXQgPSAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbHVtbi5oIGIvY29sdW1uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4Yzc0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbHVtbi5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgQ09MVU1OX0gKKyNkZWZpbmUgQ09MVU1OX0gKKworI2RlZmluZSBDT0xfTEFZT1VUX01BU0sgICAweDAwMEYKKyNkZWZpbmUgQ09MX0VOQUJMRV9NQVNLICAgMHgwMDMwICAgLyogYWx3YXlzLCBuZXZlciBvciBhdXRvICovCisjZGVmaW5lIENPTF9QQVJTRU9QVCAgICAgIDB4MDA0MCAgIC8qIC0tY29sdW1uIGlzIGdpdmVuIGZyb20gY21kbGluZSAqLworI2RlZmluZSBDT0xfREVOU0UgICAgICAgICAweDAwODAgICAvKiBTaHJpbmsgY29sdW1ucyB3aGVuIHBvc3NpYmxlLAorCQkJCSAgICAgIG1ha2luZyBzcGFjZSBmb3IgbW9yZSBjb2x1bW5zICovCisKKyNkZWZpbmUgQ09MX0RJU0FCTEVEICAgICAgMHgwMDAwICAgLyogbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lIENPTF9FTkFCTEVEICAgICAgIDB4MDAxMAorI2RlZmluZSBDT0xfQVVUTyAgICAgICAgICAweDAwMjAKKworI2RlZmluZSBDT0xfTEFZT1VUKGMpICgoYykgJiBDT0xfTEFZT1VUX01BU0spCisjZGVmaW5lIENPTF9DT0xVTU4gICAgICAgICAgICAgMCAgIC8qIEZpbGwgY29sdW1ucyBiZWZvcmUgcm93cyAqLworI2RlZmluZSBDT0xfUk9XICAgICAgICAgICAgICAgIDEgICAvKiBGaWxsIHJvd3MgYmVmb3JlIGNvbHVtbnMgKi8KKyNkZWZpbmUgQ09MX1BMQUlOICAgICAgICAgICAgIDE1ICAgLyogb25lIGNvbHVtbiAqLworCisjZGVmaW5lIGV4cGxpY2l0bHlfZW5hYmxlX2NvbHVtbihjKSBcCisJKCgoYykgJiBDT0xfUEFSU0VPUFQpICYmIGNvbHVtbl9hY3RpdmUoYykpCisKK3N0cnVjdCBjb2x1bW5fb3B0aW9ucyB7CisJaW50IHdpZHRoOworCWludCBwYWRkaW5nOworCWNvbnN0IGNoYXIgKmluZGVudDsKKwljb25zdCBjaGFyICpubDsKK307CisKK3N0cnVjdCBvcHRpb247CitpbnQgcGFyc2VvcHRfY29sdW1uX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IGdpdF9jb2x1bW5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCSAgICAgIGNvbnN0IGNoYXIgKmNvbW1hbmQsIHVuc2lnbmVkIGludCAqY29sb3B0cyk7CitpbnQgZmluYWxpemVfY29sb3B0cyh1bnNpZ25lZCBpbnQgKmNvbG9wdHMsIGludCBzdGRvdXRfaXNfdHR5KTsKK3N0YXRpYyBpbmxpbmUgaW50IGNvbHVtbl9hY3RpdmUodW5zaWduZWQgaW50IGNvbG9wdHMpCit7CisJcmV0dXJuIChjb2xvcHRzICYgQ09MX0VOQUJMRV9NQVNLKSA9PSBDT0xfRU5BQkxFRDsKK30KKworc3RydWN0IHN0cmluZ19saXN0Owordm9pZCBwcmludF9jb2x1bW5zKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IGNvbG9wdHMsCisJCSAgIGNvbnN0IHN0cnVjdCBjb2x1bW5fb3B0aW9ucyAqb3B0cyk7CisKK2ludCBydW5fY29sdW1uX2ZpbHRlcihpbnQgY29sb3B0cywgY29uc3Qgc3RydWN0IGNvbHVtbl9vcHRpb25zICopOworaW50IHN0b3BfY29sdW1uX2ZpbHRlcih2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21iaW5lLWRpZmYuYyBiL2NvbWJpbmUtZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzRkODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtMCwwICsxLDE2MTUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInhkaWZmL3htYWNyb3MuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorCitzdGF0aWMgaW50IGNvbXBhcmVfcGF0aHMoY29uc3Qgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpvbmUsCisJCQkgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28pCit7CisJaWYgKCFTX0lTRElSKG9uZS0+bW9kZSkgJiYgIVNfSVNESVIodHdvLT5tb2RlKSkKKwkJcmV0dXJuIHN0cmNtcChvbmUtPnBhdGgsIHR3by0+cGF0aCk7CisKKwlyZXR1cm4gYmFzZV9uYW1lX2NvbXBhcmUob25lLT5wYXRoLCBzdHJsZW4ob25lLT5wYXRoKSwgb25lLT5tb2RlLAorCQkJCSB0d28tPnBhdGgsIHN0cmxlbih0d28tPnBhdGgpLCB0d28tPm1vZGUpOworfQorCitzdGF0aWMgaW50IGZpbGVuYW1lX2NoYW5nZWQoY2hhciBzdGF0dXMpCit7CisJcmV0dXJuIHN0YXR1cyA9PSAnUicgfHwgc3RhdHVzID09ICdDJzsKK30KKworc3RhdGljIHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqaW50ZXJzZWN0X3BhdGhzKAorCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqY3VyciwKKwlpbnQgbiwKKwlpbnQgbnVtX3BhcmVudCwKKwlpbnQgY29tYmluZWRfYWxsX3BhdGhzKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwgKip0YWlsID0gJmN1cnI7CisJaW50IGksIGosIGNtcDsKKworCWlmICghbikgeworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJaW50IGxlbjsKKwkJCWNvbnN0IGNoYXIgKnBhdGg7CisJCQlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocS0+cXVldWVbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJcGF0aCA9IHEtPnF1ZXVlW2ldLT50d28tPnBhdGg7CisJCQlsZW4gPSBzdHJsZW4ocGF0aCk7CisJCQlwID0geG1hbGxvYyhjb21iaW5lX2RpZmZfcGF0aF9zaXplKG51bV9wYXJlbnQsIGxlbikpOworCQkJcC0+cGF0aCA9IChjaGFyICopICYocC0+cGFyZW50W251bV9wYXJlbnRdKTsKKwkJCW1lbWNweShwLT5wYXRoLCBwYXRoLCBsZW4pOworCQkJcC0+cGF0aFtsZW5dID0gMDsKKwkJCXAtPm5leHQgPSBOVUxMOworCQkJbWVtc2V0KHAtPnBhcmVudCwgMCwKKwkJCSAgICAgICBzaXplb2YocC0+cGFyZW50WzBdKSAqIG51bV9wYXJlbnQpOworCisJCQlvaWRjcHkoJnAtPm9pZCwgJnEtPnF1ZXVlW2ldLT50d28tPm9pZCk7CisJCQlwLT5tb2RlID0gcS0+cXVldWVbaV0tPnR3by0+bW9kZTsKKwkJCW9pZGNweSgmcC0+cGFyZW50W25dLm9pZCwgJnEtPnF1ZXVlW2ldLT5vbmUtPm9pZCk7CisJCQlwLT5wYXJlbnRbbl0ubW9kZSA9IHEtPnF1ZXVlW2ldLT5vbmUtPm1vZGU7CisJCQlwLT5wYXJlbnRbbl0uc3RhdHVzID0gcS0+cXVldWVbaV0tPnN0YXR1czsKKworCQkJaWYgKGNvbWJpbmVkX2FsbF9wYXRocyAmJgorCQkJICAgIGZpbGVuYW1lX2NoYW5nZWQocC0+cGFyZW50W25dLnN0YXR1cykpIHsKKwkJCQlzdHJidWZfaW5pdCgmcC0+cGFyZW50W25dLnBhdGgsIDApOworCQkJCXN0cmJ1Zl9hZGRzdHIoJnAtPnBhcmVudFtuXS5wYXRoLAorCQkJCQkgICAgICBxLT5xdWV1ZVtpXS0+b25lLT5wYXRoKTsKKwkJCX0KKwkJCSp0YWlsID0gcDsKKwkJCXRhaWwgPSAmcC0+bmV4dDsKKwkJfQorCQlyZXR1cm4gY3VycjsKKwl9CisKKwkvKgorCSAqIHBhdGhzIGluIGN1cnIgKGxpbmtlZCBsaXN0KSBhbmQgcS0+cXVldWVbXSAoYXJyYXkpIGFyZQorCSAqIGJvdGggc29ydGVkIGluIHRoZSB0cmVlIG9yZGVyLgorCSAqLworCWkgPSAwOworCXdoaWxlICgocCA9ICp0YWlsKSAhPSBOVUxMKSB7CisJCWNtcCA9ICgoaSA+PSBxLT5ucikKKwkJICAgICAgID8gLTEgOiBjb21wYXJlX3BhdGhzKHAsIHEtPnF1ZXVlW2ldLT50d28pKTsKKworCQlpZiAoY21wIDwgMCkgeworCQkJLyogcC0+cGF0aCBub3QgaW4gcS0+cXVldWVbXTsgZHJvcCBpdCAqLworCQkJKnRhaWwgPSBwLT5uZXh0OworCQkJZm9yIChqID0gMDsgaiA8IG51bV9wYXJlbnQ7IGorKykKKwkJCQlpZiAoY29tYmluZWRfYWxsX3BhdGhzICYmCisJCQkJICAgIGZpbGVuYW1lX2NoYW5nZWQocC0+cGFyZW50W2pdLnN0YXR1cykpCisJCQkJCXN0cmJ1Zl9yZWxlYXNlKCZwLT5wYXJlbnRbal0ucGF0aCk7CisJCQlmcmVlKHApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY21wID4gMCkgeworCQkJLyogcS0+cXVldWVbaV0gbm90IGluIHAtPnBhdGg7IHNraXAgaXQgKi8KKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2lkY3B5KCZwLT5wYXJlbnRbbl0ub2lkLCAmcS0+cXVldWVbaV0tPm9uZS0+b2lkKTsKKwkJcC0+cGFyZW50W25dLm1vZGUgPSBxLT5xdWV1ZVtpXS0+b25lLT5tb2RlOworCQlwLT5wYXJlbnRbbl0uc3RhdHVzID0gcS0+cXVldWVbaV0tPnN0YXR1czsKKwkJaWYgKGNvbWJpbmVkX2FsbF9wYXRocyAmJgorCQkgICAgZmlsZW5hbWVfY2hhbmdlZChwLT5wYXJlbnRbbl0uc3RhdHVzKSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnAtPnBhcmVudFtuXS5wYXRoLAorCQkJCSAgICAgIHEtPnF1ZXVlW2ldLT5vbmUtPnBhdGgpOworCisJCXRhaWwgPSAmcC0+bmV4dDsKKwkJaSsrOworCX0KKwlyZXR1cm4gY3VycjsKK30KKworLyogTGluZXMgbG9zdCBmcm9tIHBhcmVudCAqLworc3RydWN0IGxsaW5lIHsKKwlzdHJ1Y3QgbGxpbmUgKm5leHQsICpwcmV2OworCWludCBsZW47CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfbWFwOworCWNoYXIgbGluZVtGTEVYX0FSUkFZXTsKK307CisKKy8qIExpbmVzIGxvc3QgZnJvbSBjdXJyZW50IHBhcmVudCAoYmVmb3JlIGNvYWxlc2NpbmcpICovCitzdHJ1Y3QgcGxvc3QgeworCXN0cnVjdCBsbGluZSAqbG9zdF9oZWFkLCAqbG9zdF90YWlsOworCWludCBsZW47Cit9OworCisvKiBMaW5lcyBzdXJ2aXZpbmcgaW4gdGhlIG1lcmdlIHJlc3VsdCAqLworc3RydWN0IHNsaW5lIHsKKwkvKiBBY2N1bXVsYXRlZCBhbmQgY29hbGVzY2VkIGxvc3QgbGluZXMgKi8KKwlzdHJ1Y3QgbGxpbmUgKmxvc3Q7CisJaW50IGxlbmxvc3Q7CisJc3RydWN0IHBsb3N0IHBsb3N0OworCWNoYXIgKmJvbDsKKwlpbnQgbGVuOworCS8qIGJpdCAwIHVwIHRvIChOLTEpIGFyZSBvbiBpZiB0aGUgcGFyZW50IGhhcyB0aGlzIGxpbmUgKGkuZS4KKwkgKiB3ZSBkaWQgbm90IGNoYW5nZSBpdCkuCisJICogYml0IE4gaXMgdXNlZCBmb3IgImludGVyZXN0aW5nIiBsaW5lcywgaW5jbHVkaW5nIGNvbnRleHQuCisJICogYml0IChOKzEpIGlzIHVzZWQgZm9yICJkbyBub3Qgc2hvdyBkZWxldGlvbiBiZWZvcmUgdGhpcyIuCisJICovCisJdW5zaWduZWQgbG9uZyBmbGFnOworCXVuc2lnbmVkIGxvbmcgKnBfbG5vOworfTsKKworc3RhdGljIGludCBtYXRjaF9zdHJpbmdfc3BhY2VzKGNvbnN0IGNoYXIgKmxpbmUxLCBpbnQgbGVuMSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpsaW5lMiwgaW50IGxlbjIsCisJCQkgICAgICAgbG9uZyBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBYREZfV0hJVEVTUEFDRV9GTEFHUykgeworCQlmb3IgKDsgbGVuMSA+IDAgJiYgWERMX0lTU1BBQ0UobGluZTFbbGVuMSAtIDFdKTsgbGVuMS0tKTsKKwkJZm9yICg7IGxlbjIgPiAwICYmIFhETF9JU1NQQUNFKGxpbmUyW2xlbjIgLSAxXSk7IGxlbjItLSk7CisJfQorCisJaWYgKCEoZmxhZ3MgJiAoWERGX0lHTk9SRV9XSElURVNQQUNFIHwgWERGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRSkpKQorCQlyZXR1cm4gKGxlbjEgPT0gbGVuMiAmJiAhbWVtY21wKGxpbmUxLCBsaW5lMiwgbGVuMSkpOworCisJd2hpbGUgKGxlbjEgPiAwICYmIGxlbjIgPiAwKSB7CisJCWxlbjEtLTsKKwkJbGVuMi0tOworCQlpZiAoWERMX0lTU1BBQ0UobGluZTFbbGVuMV0pIHx8IFhETF9JU1NQQUNFKGxpbmUyW2xlbjJdKSkgeworCQkJaWYgKChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UpICYmCisJCQkgICAgKCFYRExfSVNTUEFDRShsaW5lMVtsZW4xXSkgfHwgIVhETF9JU1NQQUNFKGxpbmUyW2xlbjJdKSkpCisJCQkJcmV0dXJuIDA7CisKKwkJCWZvciAoOyBsZW4xID4gMCAmJiBYRExfSVNTUEFDRShsaW5lMVtsZW4xXSk7IGxlbjEtLSk7CisJCQlmb3IgKDsgbGVuMiA+IDAgJiYgWERMX0lTU1BBQ0UobGluZTJbbGVuMl0pOyBsZW4yLS0pOworCQl9CisJCWlmIChsaW5lMVtsZW4xXSAhPSBsaW5lMltsZW4yXSkKKwkJCXJldHVybiAwOworCX0KKworCWlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRSkgeworCQkvKiBDb25zdW1lIHJlbWFpbmluZyBzcGFjZXMgKi8KKwkJZm9yICg7IGxlbjEgPiAwICYmIFhETF9JU1NQQUNFKGxpbmUxW2xlbjEgLSAxXSk7IGxlbjEtLSk7CisJCWZvciAoOyBsZW4yID4gMCAmJiBYRExfSVNTUEFDRShsaW5lMltsZW4yIC0gMV0pOyBsZW4yLS0pOworCX0KKworCS8qIFdlIG1hdGNoZWQgZnVsbCBsaW5lMSBhbmQgbGluZTIgKi8KKwlpZiAoIWxlbjEgJiYgIWxlbjIpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK2VudW0gY29hbGVzY2VfZGlyZWN0aW9uIHsgTUFUQ0gsIEJBU0UsIE5FVyB9OworCisvKiBDb2FsZXNjZSBuZXcgbGluZXMgaW50byBiYXNlIGJ5IGZpbmRpbmcgTENTICovCitzdGF0aWMgc3RydWN0IGxsaW5lICpjb2FsZXNjZV9saW5lcyhzdHJ1Y3QgbGxpbmUgKmJhc2UsIGludCAqbGVuYmFzZSwKKwkJCQkgICAgc3RydWN0IGxsaW5lICpuZXdsaW5lLCBpbnQgbGVubmV3LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudCwgbG9uZyBmbGFncykKK3sKKwlpbnQgKipsY3M7CisJZW51bSBjb2FsZXNjZV9kaXJlY3Rpb24gKipkaXJlY3Rpb25zOworCXN0cnVjdCBsbGluZSAqYmFzZWVuZCwgKm5ld2VuZCA9IE5VTEw7CisJaW50IGksIGosIG9yaWdiYXNlbGVuID0gKmxlbmJhc2U7CisKKwlpZiAobmV3bGluZSA9PSBOVUxMKQorCQlyZXR1cm4gYmFzZTsKKworCWlmIChiYXNlID09IE5VTEwpIHsKKwkJKmxlbmJhc2UgPSBsZW5uZXc7CisJCXJldHVybiBuZXdsaW5lOworCX0KKworCS8qCisJICogQ29hbGVzY2UgbmV3IGxpbmVzIGludG8gYmFzZSBieSBmaW5kaW5nIHRoZSBMQ1MKKwkgKiAtIENyZWF0ZSB0aGUgdGFibGUgdG8gcnVuIGR5bmFtaWMgcHJvZ3JhbW1pbmcKKwkgKiAtIENvbXB1dGUgdGhlIExDUworCSAqIC0gVGhlbiByZXZlcnNlIHJlYWQgdGhlIGRpcmVjdGlvbiBzdHJ1Y3R1cmU6CisJICogICAtIElmIHdlIGhhdmUgTUFUQ0gsIGFzc2lnbiBwYXJlbnQgdG8gYmFzZSBmbGFnLCBhbmQgY29uc3VtZQorCSAqICAgYm90aCBiYXNlZW5kIGFuZCBuZXdlbmQKKwkgKiAgIC0gRWxzZSBpZiB3ZSBoYXZlIEJBU0UsIGNvbnN1bWUgYmFzZWVuZAorCSAqICAgLSBFbHNlIGlmIHdlIGhhdmUgTkVXLCBpbnNlcnQgbmV3ZW5kIGxsaW5lIGludG8gYmFzZSBhbmQKKwkgKiAgIGNvbnN1bWUgbmV3ZW5kCisJICovCisJbGNzID0geGNhbGxvYyhzdF9hZGQob3JpZ2Jhc2VsZW4sIDEpLCBzaXplb2YoaW50KikpOworCWRpcmVjdGlvbnMgPSB4Y2FsbG9jKHN0X2FkZChvcmlnYmFzZWxlbiwgMSksIHNpemVvZihlbnVtIGNvYWxlc2NlX2RpcmVjdGlvbiopKTsKKwlmb3IgKGkgPSAwOyBpIDwgb3JpZ2Jhc2VsZW4gKyAxOyBpKyspIHsKKwkJbGNzW2ldID0geGNhbGxvYyhzdF9hZGQobGVubmV3LCAxKSwgc2l6ZW9mKGludCkpOworCQlkaXJlY3Rpb25zW2ldID0geGNhbGxvYyhzdF9hZGQobGVubmV3LCAxKSwgc2l6ZW9mKGVudW0gY29hbGVzY2VfZGlyZWN0aW9uKSk7CisJCWRpcmVjdGlvbnNbaV1bMF0gPSBCQVNFOworCX0KKwlmb3IgKGogPSAxOyBqIDwgbGVubmV3ICsgMTsgaisrKQorCQlkaXJlY3Rpb25zWzBdW2pdID0gTkVXOworCisJZm9yIChpID0gMSwgYmFzZWVuZCA9IGJhc2U7IGkgPCBvcmlnYmFzZWxlbiArIDE7IGkrKykgeworCQlmb3IgKGogPSAxLCBuZXdlbmQgPSBuZXdsaW5lOyBqIDwgbGVubmV3ICsgMTsgaisrKSB7CisJCQlpZiAobWF0Y2hfc3RyaW5nX3NwYWNlcyhiYXNlZW5kLT5saW5lLCBiYXNlZW5kLT5sZW4sCisJCQkJCQluZXdlbmQtPmxpbmUsIG5ld2VuZC0+bGVuLCBmbGFncykpIHsKKwkJCQlsY3NbaV1bal0gPSBsY3NbaSAtIDFdW2ogLSAxXSArIDE7CisJCQkJZGlyZWN0aW9uc1tpXVtqXSA9IE1BVENIOworCQkJfSBlbHNlIGlmIChsY3NbaV1baiAtIDFdID49IGxjc1tpIC0gMV1bal0pIHsKKwkJCQlsY3NbaV1bal0gPSBsY3NbaV1baiAtIDFdOworCQkJCWRpcmVjdGlvbnNbaV1bal0gPSBORVc7CisJCQl9IGVsc2UgeworCQkJCWxjc1tpXVtqXSA9IGxjc1tpIC0gMV1bal07CisJCQkJZGlyZWN0aW9uc1tpXVtqXSA9IEJBU0U7CisJCQl9CisJCQlpZiAobmV3ZW5kLT5uZXh0KQorCQkJCW5ld2VuZCA9IG5ld2VuZC0+bmV4dDsKKwkJfQorCQlpZiAoYmFzZWVuZC0+bmV4dCkKKwkJCWJhc2VlbmQgPSBiYXNlZW5kLT5uZXh0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBvcmlnYmFzZWxlbiArIDE7IGkrKykKKwkJZnJlZShsY3NbaV0pOworCWZyZWUobGNzKTsKKworCS8qIEF0IHRoaXMgcG9pbnQsIGJhc2VlbmQgYW5kIG5ld2VuZCBwb2ludCB0byB0aGUgZW5kIG9mIGVhY2ggbGlzdHMgKi8KKwlpLS07CisJai0tOworCXdoaWxlIChpICE9IDAgfHwgaiAhPSAwKSB7CisJCWlmIChkaXJlY3Rpb25zW2ldW2pdID09IE1BVENIKSB7CisJCQliYXNlZW5kLT5wYXJlbnRfbWFwIHw9IDE8PHBhcmVudDsKKwkJCWJhc2VlbmQgPSBiYXNlZW5kLT5wcmV2OworCQkJbmV3ZW5kID0gbmV3ZW5kLT5wcmV2OworCQkJaS0tOworCQkJai0tOworCQl9IGVsc2UgaWYgKGRpcmVjdGlvbnNbaV1bal0gPT0gTkVXKSB7CisJCQlzdHJ1Y3QgbGxpbmUgKmxsaW5lOworCisJCQlsbGluZSA9IG5ld2VuZDsKKwkJCS8qIFJlbW92ZSBsbGluZSBmcm9tIG5ldyBsaXN0IGFuZCB1cGRhdGUgbmV3ZW5kICovCisJCQlpZiAobGxpbmUtPnByZXYpCisJCQkJbGxpbmUtPnByZXYtPm5leHQgPSBsbGluZS0+bmV4dDsKKwkJCWVsc2UKKwkJCQluZXdsaW5lID0gbGxpbmUtPm5leHQ7CisJCQlpZiAobGxpbmUtPm5leHQpCisJCQkJbGxpbmUtPm5leHQtPnByZXYgPSBsbGluZS0+cHJldjsKKworCQkJbmV3ZW5kID0gbGxpbmUtPnByZXY7CisJCQlqLS07CisKKwkJCS8qIEFkZCBsbGluZSB0byBiYXNlIGxpc3QgKi8KKwkJCWlmIChiYXNlZW5kKSB7CisJCQkJbGxpbmUtPm5leHQgPSBiYXNlZW5kLT5uZXh0OworCQkJCWxsaW5lLT5wcmV2ID0gYmFzZWVuZDsKKwkJCQlpZiAobGxpbmUtPnByZXYpCisJCQkJCWxsaW5lLT5wcmV2LT5uZXh0ID0gbGxpbmU7CisJCQl9CisJCQllbHNlIHsKKwkJCQlsbGluZS0+bmV4dCA9IGJhc2U7CisJCQkJYmFzZSA9IGxsaW5lOworCQkJfQorCQkJKCpsZW5iYXNlKSsrOworCisJCQlpZiAobGxpbmUtPm5leHQpCisJCQkJbGxpbmUtPm5leHQtPnByZXYgPSBsbGluZTsKKworCQl9IGVsc2UgeworCQkJYmFzZWVuZCA9IGJhc2VlbmQtPnByZXY7CisJCQlpLS07CisJCX0KKwl9CisKKwluZXdlbmQgPSBuZXdsaW5lOworCXdoaWxlIChuZXdlbmQpIHsKKwkJc3RydWN0IGxsaW5lICpsbGluZSA9IG5ld2VuZDsKKwkJbmV3ZW5kID0gbmV3ZW5kLT5uZXh0OworCQlmcmVlKGxsaW5lKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgb3JpZ2Jhc2VsZW4gKyAxOyBpKyspCisJCWZyZWUoZGlyZWN0aW9uc1tpXSk7CisJZnJlZShkaXJlY3Rpb25zKTsKKworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgY2hhciAqZ3JhYl9ibG9iKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnNpemUsIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252LAorCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpibG9iOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWlmIChTX0lTR0lUTElOSyhtb2RlKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmYnVmLCAiU3VicHJvamVjdCBjb21taXQgJXNcbiIsIG9pZF90b19oZXgob2lkKSk7CisJCSpzaXplID0gYnVmLmxlbjsKKwkJYmxvYiA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJfSBlbHNlIGlmIChpc19udWxsX29pZChvaWQpKSB7CisJCS8qIGRlbGV0ZWQgYmxvYiAqLworCQkqc2l6ZSA9IDA7CisJCXJldHVybiB4Y2FsbG9jKDEsIDEpOworCX0gZWxzZSBpZiAodGV4dGNvbnYpIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmID0gYWxsb2NfZmlsZXNwZWMocGF0aCk7CisJCWZpbGxfZmlsZXNwZWMoZGYsIG9pZCwgMSwgbW9kZSk7CisJCSpzaXplID0gZmlsbF90ZXh0Y29udihyLCB0ZXh0Y29udiwgZGYsICZibG9iKTsKKwkJZnJlZV9maWxlc3BlYyhkZik7CisJfSBlbHNlIHsKKwkJYmxvYiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgc2l6ZSk7CisJCWlmICh0eXBlICE9IE9CSl9CTE9CKQorCQkJZGllKCJvYmplY3QgJyVzJyBpcyBub3QgYSBibG9iISIsIG9pZF90b19oZXgob2lkKSk7CisJfQorCXJldHVybiBibG9iOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbG9zdChzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCBpbnQgbiwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbGxpbmUgKmxsaW5lOworCXVuc2lnbmVkIGxvbmcgdGhpc19tYXNrID0gKDFVTDw8bik7CisJaWYgKGxpbmVbbGVuLTFdID09ICdcbicpCisJCWxlbi0tOworCisJRkxFWF9BTExPQ19NRU0obGxpbmUsIGxpbmUsIGxpbmUsIGxlbik7CisJbGxpbmUtPmxlbiA9IGxlbjsKKwlsbGluZS0+bmV4dCA9IE5VTEw7CisJbGxpbmUtPnByZXYgPSBzbGluZS0+cGxvc3QubG9zdF90YWlsOworCWlmIChsbGluZS0+cHJldikKKwkJbGxpbmUtPnByZXYtPm5leHQgPSBsbGluZTsKKwllbHNlCisJCXNsaW5lLT5wbG9zdC5sb3N0X2hlYWQgPSBsbGluZTsKKwlzbGluZS0+cGxvc3QubG9zdF90YWlsID0gbGxpbmU7CisJc2xpbmUtPnBsb3N0LmxlbisrOworCWxsaW5lLT5wYXJlbnRfbWFwID0gdGhpc19tYXNrOworfQorCitzdHJ1Y3QgY29tYmluZV9kaWZmX3N0YXRlIHsKKwl1bnNpZ25lZCBpbnQgbG5vOworCWludCBvYiwgb24sIG5iLCBubjsKKwl1bnNpZ25lZCBsb25nIG5tYXNrOworCWludCBudW1fcGFyZW50OworCWludCBuOworCXN0cnVjdCBzbGluZSAqc2xpbmU7CisJc3RydWN0IHNsaW5lICpsb3N0X2J1Y2tldDsKK307CisKK3N0YXRpYyB2b2lkIGNvbnN1bWVfaHVuayh2b2lkICpzdGF0ZV8sCisJCQkgbG9uZyBvYiwgbG9uZyBvbiwKKwkJCSBsb25nIG5iLCBsb25nIG5uLAorCQkJIGNvbnN0IGNoYXIgKmZ1bmNsaW5lLCBsb25nIGZ1bmNsZW4pCit7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9zdGF0ZSAqc3RhdGUgPSBzdGF0ZV87CisKKwlzdGF0ZS0+b2IgPSBvYjsKKwlzdGF0ZS0+b24gPSBvbjsKKwlzdGF0ZS0+bmIgPSBuYjsKKwlzdGF0ZS0+bm4gPSBubjsKKwlzdGF0ZS0+bG5vID0gc3RhdGUtPm5iOworCWlmIChzdGF0ZS0+bm4gPT0gMCkgeworCQkvKiBAQCAtWCxZICtOLDAgQEAgcmVtb3ZlZCBZIGxpbmVzCisJCSAqIHRoYXQgd291bGQgaGF2ZSBjb21lICphZnRlciogbGluZSBOCisJCSAqIGluIHRoZSByZXN1bHQuICBPdXIgbG9zdCBidWNrZXRzIGhhbmcKKwkJICogdG8gdGhlIGxpbmUgYWZ0ZXIgdGhlIHJlbW92ZWQgbGluZXMsCisJCSAqCisJCSAqIE5vdGUgdGhhdCB0aGlzIGlzIGNvcnJlY3QgZXZlbiB3aGVuIE4gPT0gMCwKKwkJICogaW4gd2hpY2ggY2FzZSB0aGUgaHVuayByZW1vdmVzIHRoZSBmaXJzdAorCQkgKiBsaW5lIGluIHRoZSBmaWxlLgorCQkgKi8KKwkJc3RhdGUtPmxvc3RfYnVja2V0ID0gJnN0YXRlLT5zbGluZVtzdGF0ZS0+bmJdOworCQlpZiAoIXN0YXRlLT5uYikKKwkJCXN0YXRlLT5uYiA9IDE7CisJfSBlbHNlIHsKKwkJc3RhdGUtPmxvc3RfYnVja2V0ID0gJnN0YXRlLT5zbGluZVtzdGF0ZS0+bmItMV07CisJfQorCWlmICghc3RhdGUtPnNsaW5lW3N0YXRlLT5uYi0xXS5wX2xubykKKwkJc3RhdGUtPnNsaW5lW3N0YXRlLT5uYi0xXS5wX2xubyA9CisJCQl4Y2FsbG9jKHN0YXRlLT5udW1fcGFyZW50LCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXN0YXRlLT5zbGluZVtzdGF0ZS0+bmItMV0ucF9sbm9bc3RhdGUtPm5dID0gc3RhdGUtPm9iOworfQorCitzdGF0aWMgdm9pZCBjb25zdW1lX2xpbmUodm9pZCAqc3RhdGVfLCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3N0YXRlICpzdGF0ZSA9IHN0YXRlXzsKKwlpZiAoIXN0YXRlLT5sb3N0X2J1Y2tldCkKKwkJcmV0dXJuOyAvKiBub3QgaW4gYW55IGh1bmsgeWV0ICovCisJc3dpdGNoIChsaW5lWzBdKSB7CisJY2FzZSAnLSc6CisJCWFwcGVuZF9sb3N0KHN0YXRlLT5sb3N0X2J1Y2tldCwgc3RhdGUtPm4sIGxpbmUrMSwgbGVuLTEpOworCQlicmVhazsKKwljYXNlICcrJzoKKwkJc3RhdGUtPnNsaW5lW3N0YXRlLT5sbm8tMV0uZmxhZyB8PSBzdGF0ZS0+bm1hc2s7CisJCXN0YXRlLT5sbm8rKzsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb21iaW5lX2RpZmYoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcGFyZW50LCB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJCSBtbWZpbGVfdCAqcmVzdWx0X2ZpbGUsCisJCQkgc3RydWN0IHNsaW5lICpzbGluZSwgdW5zaWduZWQgaW50IGNudCwgaW50IG4sCisJCQkgaW50IG51bV9wYXJlbnQsIGludCByZXN1bHRfZGVsZXRlZCwKKwkJCSBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udiwKKwkJCSBjb25zdCBjaGFyICpwYXRoLCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGludCBwX2xubywgbG5vOworCXVuc2lnbmVkIGxvbmcgbm1hc2sgPSAoMVVMIDw8IG4pOworCXhwcGFyYW1fdCB4cHA7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCW1tZmlsZV90IHBhcmVudF9maWxlOworCXN0cnVjdCBjb21iaW5lX2RpZmZfc3RhdGUgc3RhdGU7CisJdW5zaWduZWQgbG9uZyBzejsKKworCWlmIChyZXN1bHRfZGVsZXRlZCkKKwkJcmV0dXJuOyAvKiByZXN1bHQgZGVsZXRlZCAqLworCisJcGFyZW50X2ZpbGUucHRyID0gZ3JhYl9ibG9iKHIsIHBhcmVudCwgbW9kZSwgJnN6LCB0ZXh0Y29udiwgcGF0aCk7CisJcGFyZW50X2ZpbGUuc2l6ZSA9IHN6OworCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJeHBwLmZsYWdzID0gZmxhZ3M7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisJc3RhdGUubm1hc2sgPSBubWFzazsKKwlzdGF0ZS5zbGluZSA9IHNsaW5lOworCXN0YXRlLmxubyA9IDE7CisJc3RhdGUubnVtX3BhcmVudCA9IG51bV9wYXJlbnQ7CisJc3RhdGUubiA9IG47CisKKwlpZiAoeGRpX2RpZmZfb3V0ZigmcGFyZW50X2ZpbGUsIHJlc3VsdF9maWxlLCBjb25zdW1lX2h1bmssCisJCQkgIGNvbnN1bWVfbGluZSwgJnN0YXRlLCAmeHBwLCAmeGVjZmcpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBjb21iaW5lZCBkaWZmIGZvciAlcyIsCisJCSAgICBvaWRfdG9faGV4KHBhcmVudCkpOworCWZyZWUocGFyZW50X2ZpbGUucHRyKTsKKworCS8qIEFzc2lnbiBsaW5lIG51bWJlcnMgZm9yIHRoaXMgcGFyZW50LgorCSAqCisJICogc2xpbmVbbG5vXS5wX2xub1tuXSByZWNvcmRzIHRoZSBmaXJzdCBsaW5lIG51bWJlcgorCSAqIChjb3VudGluZyBmcm9tIDEpIGZvciBwYXJlbnQgTiBpZiB0aGUgZmluYWwgaHVuayBkaXNwbGF5CisJICogc3RhcnRlZCBieSBzaG93aW5nIHNsaW5lW2xub10gKHBvc3NpYmx5IHNob3dpbmcgdGhlIGxvc3QKKwkgKiBsaW5lcyBhdHRhY2hlZCB0byBpdCBmaXJzdCkuCisJICovCisJZm9yIChsbm8gPSAwLCAgcF9sbm8gPSAxOyBsbm8gPD0gY250OyBsbm8rKykgeworCQlzdHJ1Y3QgbGxpbmUgKmxsOworCQlzbGluZVtsbm9dLnBfbG5vW25dID0gcF9sbm87CisKKwkJLyogQ29hbGVzY2UgbmV3IGxpbmVzICovCisJCWlmIChzbGluZVtsbm9dLnBsb3N0Lmxvc3RfaGVhZCkgeworCQkJc3RydWN0IHNsaW5lICpzbCA9ICZzbGluZVtsbm9dOworCQkJc2wtPmxvc3QgPSBjb2FsZXNjZV9saW5lcyhzbC0+bG9zdCwgJnNsLT5sZW5sb3N0LAorCQkJCQkJICBzbC0+cGxvc3QubG9zdF9oZWFkLAorCQkJCQkJICBzbC0+cGxvc3QubGVuLCBuLCBmbGFncyk7CisJCQlzbC0+cGxvc3QubG9zdF9oZWFkID0gc2wtPnBsb3N0Lmxvc3RfdGFpbCA9IE5VTEw7CisJCQlzbC0+cGxvc3QubGVuID0gMDsKKwkJfQorCisJCS8qIEhvdyBtYW55IGxpbmVzIHdvdWxkIHRoaXMgc2xpbmUgYWR2YW5jZSB0aGUgcF9sbm8/ICovCisJCWxsID0gc2xpbmVbbG5vXS5sb3N0OworCQl3aGlsZSAobGwpIHsKKwkJCWlmIChsbC0+cGFyZW50X21hcCAmIG5tYXNrKQorCQkJCXBfbG5vKys7IC8qICctJyBtZWFucyBwYXJlbnQgaGFkIGl0ICovCisJCQlsbCA9IGxsLT5uZXh0OworCQl9CisJCWlmIChsbm8gPCBjbnQgJiYgIShzbGluZVtsbm9dLmZsYWcgJiBubWFzaykpCisJCQlwX2xubysrOyAvKiBubyAnKycgbWVhbnMgcGFyZW50IGhhZCBpdCAqLworCX0KKwlzbGluZVtsbm9dLnBfbG5vW25dID0gcF9sbm87IC8qIHRyYWlsZXIgKi8KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY29udGV4dCA9IDM7CitzdGF0aWMgY2hhciBjb21iaW5lX21hcmtlciA9ICdAJzsKKworc3RhdGljIGludCBpbnRlcmVzdGluZyhzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGFsbF9tYXNrKQoreworCS8qIElmIHNvbWUgcGFyZW50cyBsb3N0IGxpbmVzIGhlcmUsIG9yIGlmIHdlIGhhdmUgYWRkZWQgdG8KKwkgKiBzb21lIHBhcmVudCwgaXQgaXMgaW50ZXJlc3RpbmcuCisJICovCisJcmV0dXJuICgoc2xpbmUtPmZsYWcgJiBhbGxfbWFzaykgfHwgc2xpbmUtPmxvc3QpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGp1c3RfaHVua190YWlsKHN0cnVjdCBzbGluZSAqc2xpbmUsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGxfbWFzaywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGh1bmtfYmVnaW4sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpKQoreworCS8qIGkgcG9pbnRzIGF0IHRoZSBmaXJzdCB1bmludGVyZXN0aW5nIGxpbmUuICBJZiB0aGUgbGFzdCBsaW5lCisJICogb2YgdGhlIGh1bmsgd2FzIGludGVyZXN0aW5nIG9ubHkgYmVjYXVzZSBpdCBoYXMgc29tZQorCSAqIGRlbGV0aW9uLCB0aGVuIGl0IGlzIG5vdCBhbGwgdGhhdCBpbnRlcmVzdGluZyBmb3IgdGhlCisJICogcHVycG9zZSBvZiBnaXZpbmcgdHJhaWxpbmcgY29udGV4dCBsaW5lcy4gIFRoaXMgaXMgYmVjYXVzZQorCSAqIHdlIG91dHB1dCAnLScgbGluZSBhbmQgdGhlbiB1bm1vZGlmaWVkIHNsaW5lW2ktMV0gaXRzZWxmIGluCisJICogdGhhdCBjYXNlIHdoaWNoIGdpdmVzIHVzIG9uZSBleHRyYSBjb250ZXh0IGxpbmUuCisJICovCisJaWYgKChodW5rX2JlZ2luICsgMSA8PSBpKSAmJiAhKHNsaW5lW2ktMV0uZmxhZyAmIGFsbF9tYXNrKSkKKwkJaS0tOworCXJldHVybiBpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX25leHQoc3RydWN0IHNsaW5lICpzbGluZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1hcmssCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY250LAorCQkJICAgICAgIGludCBsb29rX2Zvcl91bmludGVyZXN0aW5nKQoreworCS8qIFdlIGhhdmUgZXhhbWluZWQgdXAgdG8gaS0xIGFuZCBhcmUgYWJvdXQgdG8gbG9vayBhdCBpLgorCSAqIEZpbmQgbmV4dCBpbnRlcmVzdGluZyBvciB1bmludGVyZXN0aW5nIGxpbmUuICBIZXJlLAorCSAqICJpbnRlcmVzdGluZyIgZG9lcyBub3QgbWVhbiBpbnRlcmVzdGluZygpLCBidXQgbWFya2VkIGJ5CisJICogdGhlIGdpdmVfY29udGV4dCgpIGZ1bmN0aW9uIGJlbG93IChpLmUuIGl0IGluY2x1ZGVzIGNvbnRleHQKKwkgKiBsaW5lcyB0aGF0IGFyZSBub3QgaW50ZXJlc3RpbmcgdG8gaW50ZXJlc3RpbmcoKSBmdW5jdGlvbgorCSAqIHRoYXQgYXJlIHN1cnJvdW5kZWQgYnkgaW50ZXJlc3RpbmcoKSBvbmVzLgorCSAqLworCXdoaWxlIChpIDw9IGNudCkKKwkJaWYgKGxvb2tfZm9yX3VuaW50ZXJlc3RpbmcKKwkJICAgID8gIShzbGluZVtpXS5mbGFnICYgbWFyaykKKwkJICAgIDogKHNsaW5lW2ldLmZsYWcgJiBtYXJrKSkKKwkJCXJldHVybiBpOworCQllbHNlCisJCQlpKys7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZ2l2ZV9jb250ZXh0KHN0cnVjdCBzbGluZSAqc2xpbmUsIHVuc2lnbmVkIGxvbmcgY250LCBpbnQgbnVtX3BhcmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGFsbF9tYXNrID0gKDFVTDw8bnVtX3BhcmVudCkgLSAxOworCXVuc2lnbmVkIGxvbmcgbWFyayA9ICgxVUw8PG51bV9wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgbm9fcHJlX2RlbGV0ZSA9ICgyVUw8PG51bV9wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgaTsKKworCS8qIFR3byBncm91cHMgb2YgaW50ZXJlc3RpbmcgbGluZXMgbWF5IGhhdmUgYSBzaG9ydCBnYXAgb2YKKwkgKiB1bmludGVyZXN0aW5nIGxpbmVzLiAgQ29ubmVjdCBzdWNoIGdyb3VwcyB0byBnaXZlIHRoZW0gYQorCSAqIGJpdCBvZiBjb250ZXh0LgorCSAqCisJICogV2UgZmlyc3Qgc3RhcnQgZnJvbSB3aGF0IHRoZSBpbnRlcmVzdGluZygpIGZ1bmN0aW9uIHNheXMsCisJICogYW5kIG1hcmsgdGhlbSB3aXRoICJtYXJrIiwgYW5kIHBhaW50IGNvbnRleHQgbGluZXMgd2l0aCB0aGUKKwkgKiBtYXJrLiAgU28gaW50ZXJlc3RpbmcoKSB3b3VsZCBzdGlsbCBzYXkgZmFsc2UgZm9yIHN1Y2ggY29udGV4dAorCSAqIGxpbmVzIGJ1dCB0aGV5IGFyZSB0cmVhdGVkIGFzICJpbnRlcmVzdGluZyIgaW4gdGhlIGVuZC4KKwkgKi8KKwlpID0gZmluZF9uZXh0KHNsaW5lLCBtYXJrLCAwLCBjbnQsIDApOworCWlmIChjbnQgPCBpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChpIDw9IGNudCkgeworCQl1bnNpZ25lZCBsb25nIGogPSAoY29udGV4dCA8IGkpID8gKGkgLSBjb250ZXh0KSA6IDA7CisJCXVuc2lnbmVkIGxvbmcgazsKKworCQkvKiBQYWludCBhIGZldyBsaW5lcyBiZWZvcmUgdGhlIGZpcnN0IGludGVyZXN0aW5nIGxpbmUuICovCisJCXdoaWxlIChqIDwgaSkgeworCQkJaWYgKCEoc2xpbmVbal0uZmxhZyAmIG1hcmspKQorCQkJCXNsaW5lW2pdLmZsYWcgfD0gbm9fcHJlX2RlbGV0ZTsKKwkJCXNsaW5lW2orK10uZmxhZyB8PSBtYXJrOworCQl9CisKKwlhZ2FpbjoKKwkJLyogd2Uga25vdyB1cCB0byBpIGlzIHRvIGJlIGluY2x1ZGVkLiAgd2hlcmUgZG9lcyB0aGUKKwkJICogbmV4dCB1bmludGVyZXN0aW5nIG9uZSBzdGFydD8KKwkJICovCisJCWogPSBmaW5kX25leHQoc2xpbmUsIG1hcmssIGksIGNudCwgMSk7CisJCWlmIChjbnQgPCBqKQorCQkJYnJlYWs7IC8qIHRoZSByZXN0IGFyZSBhbGwgaW50ZXJlc3RpbmcgKi8KKworCQkvKiBsb29rYWhlYWQgY29udGV4dCBsaW5lcyAqLworCQlrID0gZmluZF9uZXh0KHNsaW5lLCBtYXJrLCBqLCBjbnQsIDApOworCQlqID0gYWRqdXN0X2h1bmtfdGFpbChzbGluZSwgYWxsX21hc2ssIGksIGopOworCisJCWlmIChrIDwgaiArIGNvbnRleHQpIHsKKwkJCS8qIGsgaXMgaW50ZXJlc3RpbmcgYW5kIFtqLGspIGFyZSBub3QsIGJ1dAorCQkJICogcGFpbnQgdGhlbSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBnYXAgaXMgc21hbGwuCisJCQkgKi8KKwkJCXdoaWxlIChqIDwgaykKKwkJCQlzbGluZVtqKytdLmZsYWcgfD0gbWFyazsKKwkJCWkgPSBrOworCQkJZ290byBhZ2FpbjsKKwkJfQorCisJCS8qIGogaXMgdGhlIGZpcnN0IHVuaW50ZXJlc3RpbmcgbGluZSBhbmQgdGhlcmUgaXMKKwkJICogbm8gb3ZlcmxhcCBiZXlvbmQgaXQgd2l0aGluIGNvbnRleHQgbGluZXMuICBQYWludAorCQkgKiB0aGUgdHJhaWxpbmcgZWRnZSBhIGJpdC4KKwkJICovCisJCWkgPSBrOworCQlrID0gKGogKyBjb250ZXh0IDwgY250KzEpID8gaiArIGNvbnRleHQgOiBjbnQrMTsKKwkJd2hpbGUgKGogPCBrKQorCQkJc2xpbmVbaisrXS5mbGFnIHw9IG1hcms7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1ha2VfaHVua3Moc3RydWN0IHNsaW5lICpzbGluZSwgdW5zaWduZWQgbG9uZyBjbnQsCisJCSAgICAgICBpbnQgbnVtX3BhcmVudCwgaW50IGRlbnNlKQoreworCXVuc2lnbmVkIGxvbmcgYWxsX21hc2sgPSAoMVVMPDxudW1fcGFyZW50KSAtIDE7CisJdW5zaWduZWQgbG9uZyBtYXJrID0gKDFVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBpOworCWludCBoYXNfaW50ZXJlc3RpbmcgPSAwOworCisJZm9yIChpID0gMDsgaSA8PSBjbnQ7IGkrKykgeworCQlpZiAoaW50ZXJlc3RpbmcoJnNsaW5lW2ldLCBhbGxfbWFzaykpCisJCQlzbGluZVtpXS5mbGFnIHw9IG1hcms7CisJCWVsc2UKKwkJCXNsaW5lW2ldLmZsYWcgJj0gfm1hcms7CisJfQorCWlmICghZGVuc2UpCisJCXJldHVybiBnaXZlX2NvbnRleHQoc2xpbmUsIGNudCwgbnVtX3BhcmVudCk7CisKKwkvKiBMb29rIGF0IGVhY2ggaHVuaywgYW5kIGlmIHdlIGhhdmUgY2hhbmdlcyBmcm9tIG9ubHkgb25lCisJICogcGFyZW50LCBvciB0aGUgY2hhbmdlcyBhcmUgdGhlIHNhbWUgZnJvbSBhbGwgYnV0IG9uZQorCSAqIHBhcmVudCwgbWFyayB0aGF0IHVuaW50ZXJlc3RpbmcuCisJICovCisJaSA9IDA7CisJd2hpbGUgKGkgPD0gY250KSB7CisJCXVuc2lnbmVkIGxvbmcgaiwgaHVua19iZWdpbiwgaHVua19lbmQ7CisJCXVuc2lnbmVkIGxvbmcgc2FtZV9kaWZmOworCQl3aGlsZSAoaSA8PSBjbnQgJiYgIShzbGluZVtpXS5mbGFnICYgbWFyaykpCisJCQlpKys7CisJCWlmIChjbnQgPCBpKQorCQkJYnJlYWs7IC8qIE5vIG1vcmUgaW50ZXJlc3RpbmcgaHVua3MgKi8KKwkJaHVua19iZWdpbiA9IGk7CisJCWZvciAoaiA9IGkgKyAxOyBqIDw9IGNudDsgaisrKSB7CisJCQlpZiAoIShzbGluZVtqXS5mbGFnICYgbWFyaykpIHsKKwkJCQkvKiBMb29rIGJleW9uZCB0aGUgZW5kIHRvIHNlZSBpZiB0aGVyZQorCQkJCSAqIGlzIGFuIGludGVyZXN0aW5nIGxpbmUgYWZ0ZXIgdGhpcworCQkJCSAqIGh1bmsgd2l0aGluIGNvbnRleHQgc3Bhbi4KKwkJCQkgKi8KKwkJCQl1bnNpZ25lZCBsb25nIGxhOyAvKiBsb29rYWhlYWQgKi8KKwkJCQlpbnQgY29udGluID0gMDsKKwkJCQlsYSA9IGFkanVzdF9odW5rX3RhaWwoc2xpbmUsIGFsbF9tYXNrLAorCQkJCQkJICAgICBodW5rX2JlZ2luLCBqKTsKKwkJCQlsYSA9IChsYSArIGNvbnRleHQgPCBjbnQgKyAxKSA/CisJCQkJCShsYSArIGNvbnRleHQpIDogY250ICsgMTsKKwkJCQl3aGlsZSAobGEgJiYgaiA8PSAtLWxhKSB7CisJCQkJCWlmIChzbGluZVtsYV0uZmxhZyAmIG1hcmspIHsKKwkJCQkJCWNvbnRpbiA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIWNvbnRpbikKKwkJCQkJYnJlYWs7CisJCQkJaiA9IGxhOworCQkJfQorCQl9CisJCWh1bmtfZW5kID0gajsKKworCQkvKiBbaS4uaHVua19lbmQpIGFyZSBpbnRlcmVzdGluZy4gIE5vdyBpcyBpdCByZWFsbHkKKwkJICogaW50ZXJlc3Rpbmc/ICBXZSBjaGVjayBpZiB0aGVyZSBhcmUgb25seSB0d28gdmVyc2lvbnMKKwkJICogYW5kIHRoZSByZXN1bHQgbWF0Y2hlcyBvbmUgb2YgdGhlbS4gIFRoYXQgaXMsIHdlIGxvb2sKKwkJICogYXQ6CisJCSAqICAgKCspIGxpbmUsIHdoaWNoIHJlY29yZHMgbGluZXMgYWRkZWQgdG8gd2hpY2ggcGFyZW50czsKKwkJICogICAgICAgdGhpcyBsaW5lIGFwcGVhcnMgaW4gdGhlIHJlc3VsdC4KKwkJICogICAoLSkgbGluZSwgd2hpY2ggcmVjb3JkcyBmcm9tIHdoYXQgcGFyZW50cyB0aGUgbGluZQorCQkgKiAgICAgICB3YXMgcmVtb3ZlZDsgdGhpcyBsaW5lIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcmVzdWx0LgorCQkgKiB0aGVuIGNoZWNrIHRoZSBzZXQgb2YgcGFyZW50cyB0aGUgcmVzdWx0IGhhcyBkaWZmZXJlbmNlCisJCSAqIGZyb20sIGZyb20gYWxsIGxpbmVzLiAgSWYgdGhlcmUgYXJlIGxpbmVzIHRoYXQgaGFzCisJCSAqIGRpZmZlcmVudCBzZXQgb2YgcGFyZW50cyB0aGF0IHRoZSByZXN1bHQgaGFzIGRpZmZlcmVuY2VzCisJCSAqIGZyb20sIHRoYXQgbWVhbnMgd2UgaGF2ZSBtb3JlIHRoYW4gdHdvIHZlcnNpb25zLgorCQkgKgorCQkgKiBFdmVuIHdoZW4gd2UgaGF2ZSBvbmx5IHR3byB2ZXJzaW9ucywgaWYgdGhlIHJlc3VsdCBkb2VzCisJCSAqIG5vdCBtYXRjaCBhbnkgb2YgdGhlIHBhcmVudHMsIHRoZSBpdCBzaG91bGQgYmUgY29uc2lkZXJlZAorCQkgKiBpbnRlcmVzdGluZy4gIEluIHN1Y2ggYSBjYXNlLCB3ZSB3b3VsZCBoYXZlIGFsbCAnKycgbGluZS4KKwkJICogQWZ0ZXIgcGFzc2luZyB0aGUgYWJvdmUgInR3byB2ZXJzaW9ucyIgdGVzdCwgdGhhdCB3b3VsZAorCQkgKiBhcHBlYXIgYXMgInRoZSBzYW1lIHNldCBvZiBwYXJlbnRzIiB0byBiZSAiYWxsIHBhcmVudHMiLgorCQkgKi8KKwkJc2FtZV9kaWZmID0gMDsKKwkJaGFzX2ludGVyZXN0aW5nID0gMDsKKwkJZm9yIChqID0gaTsgaiA8IGh1bmtfZW5kICYmICFoYXNfaW50ZXJlc3Rpbmc7IGorKykgeworCQkJdW5zaWduZWQgbG9uZyB0aGlzX2RpZmYgPSBzbGluZVtqXS5mbGFnICYgYWxsX21hc2s7CisJCQlzdHJ1Y3QgbGxpbmUgKmxsID0gc2xpbmVbal0ubG9zdDsKKwkJCWlmICh0aGlzX2RpZmYpIHsKKwkJCQkvKiBUaGlzIGhhcyBzb21lIGNoYW5nZXMuICBJcyBpdCB0aGUKKwkJCQkgKiBzYW1lIGFzIG90aGVycz8KKwkJCQkgKi8KKwkJCQlpZiAoIXNhbWVfZGlmZikKKwkJCQkJc2FtZV9kaWZmID0gdGhpc19kaWZmOworCQkJCWVsc2UgaWYgKHNhbWVfZGlmZiAhPSB0aGlzX2RpZmYpIHsKKwkJCQkJaGFzX2ludGVyZXN0aW5nID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJd2hpbGUgKGxsICYmICFoYXNfaW50ZXJlc3RpbmcpIHsKKwkJCQkvKiBMb3N0IHRoaXMgbGluZSBmcm9tIHRoZXNlIHBhcmVudHM7CisJCQkJICogd2hvIGFyZSB0aGV5PyAgQXJlIHRoZXkgdGhlIHNhbWU/CisJCQkJICovCisJCQkJdGhpc19kaWZmID0gbGwtPnBhcmVudF9tYXA7CisJCQkJaWYgKCFzYW1lX2RpZmYpCisJCQkJCXNhbWVfZGlmZiA9IHRoaXNfZGlmZjsKKwkJCQllbHNlIGlmIChzYW1lX2RpZmYgIT0gdGhpc19kaWZmKSB7CisJCQkJCWhhc19pbnRlcmVzdGluZyA9IDE7CisJCQkJfQorCQkJCWxsID0gbGwtPm5leHQ7CisJCQl9CisJCX0KKworCQlpZiAoIWhhc19pbnRlcmVzdGluZyAmJiBzYW1lX2RpZmYgIT0gYWxsX21hc2spIHsKKwkJCS8qIFRoaXMgaHVuayBpcyBub3QgdGhhdCBpbnRlcmVzdGluZyBhZnRlciBhbGwgKi8KKwkJCWZvciAoaiA9IGh1bmtfYmVnaW47IGogPCBodW5rX2VuZDsgaisrKQorCQkJCXNsaW5lW2pdLmZsYWcgJj0gfm1hcms7CisJCX0KKwkJaSA9IGh1bmtfZW5kOworCX0KKworCWhhc19pbnRlcmVzdGluZyA9IGdpdmVfY29udGV4dChzbGluZSwgY250LCBudW1fcGFyZW50KTsKKwlyZXR1cm4gaGFzX2ludGVyZXN0aW5nOworfQorCitzdGF0aWMgdm9pZCBzaG93X3BhcmVudF9sbm8oc3RydWN0IHNsaW5lICpzbGluZSwgdW5zaWduZWQgbG9uZyBsMCwgdW5zaWduZWQgbG9uZyBsMSwgaW50IG4sIHVuc2lnbmVkIGxvbmcgbnVsbF9jb250ZXh0KQoreworCWwwID0gc2xpbmVbbDBdLnBfbG5vW25dOworCWwxID0gc2xpbmVbbDFdLnBfbG5vW25dOworCXByaW50ZigiIC0lbHUsJWx1IiwgbDAsIGwxLWwwLW51bGxfY29udGV4dCk7Cit9CisKK3N0YXRpYyBpbnQgaHVua19jb21tZW50X2xpbmUoY29uc3QgY2hhciAqYm9sKQoreworCWludCBjaDsKKworCWlmICghYm9sKQorCQlyZXR1cm4gMDsKKwljaCA9ICpib2wgJiAweGZmOworCXJldHVybiAoaXNhbHBoYShjaCkgfHwgY2ggPT0gJ18nIHx8IGNoID09ICckJyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbGluZV90b19lb2woY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgY29uc3QgY2hhciAqcmVzZXQpCit7CisJaW50IHNhd19jcl9hdF9lb2wgPSAwOworCWlmIChsZW4gPCAwKQorCQlsZW4gPSBzdHJsZW4obGluZSk7CisJc2F3X2NyX2F0X2VvbCA9IChsZW4gJiYgbGluZVtsZW4tMV0gPT0gJ1xyJyk7CisKKwlwcmludGYoIiUuKnMlcyVzXG4iLCBsZW4gLSBzYXdfY3JfYXRfZW9sLCBsaW5lLAorCSAgICAgICByZXNldCwKKwkgICAgICAgc2F3X2NyX2F0X2VvbCA/ICJcciIgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfc2xpbmUoc3RydWN0IHNsaW5lICpzbGluZSwgY29uc3QgY2hhciAqbGluZV9wcmVmaXgsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGNudCwgaW50IG51bV9wYXJlbnQsCisJCSAgICAgICBpbnQgdXNlX2NvbG9yLCBpbnQgcmVzdWx0X2RlbGV0ZWQpCit7CisJdW5zaWduZWQgbG9uZyBtYXJrID0gKDFVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBub19wcmVfZGVsZXRlID0gKDJVTDw8bnVtX3BhcmVudCk7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBsbm8gPSAwOworCWNvbnN0IGNoYXIgKmNfZnJhZyA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9GUkFHSU5GTyk7CisJY29uc3QgY2hhciAqY19mdW5jID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0ZVTkNJTkZPKTsKKwljb25zdCBjaGFyICpjX25ldyA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9GSUxFX05FVyk7CisJY29uc3QgY2hhciAqY19vbGQgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfRklMRV9PTEQpOworCWNvbnN0IGNoYXIgKmNfY29udGV4dCA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9DT05URVhUKTsKKwljb25zdCBjaGFyICpjX3Jlc2V0ID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX1JFU0VUKTsKKworCWlmIChyZXN1bHRfZGVsZXRlZCkKKwkJcmV0dXJuOyAvKiByZXN1bHQgZGVsZXRlZCAqLworCisJd2hpbGUgKDEpIHsKKwkJdW5zaWduZWQgbG9uZyBodW5rX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBybGluZXM7CisJCWNvbnN0IGNoYXIgKmh1bmtfY29tbWVudCA9IE5VTEw7CisJCXVuc2lnbmVkIGxvbmcgbnVsbF9jb250ZXh0ID0gMDsKKworCQl3aGlsZSAobG5vIDw9IGNudCAmJiAhKHNsaW5lW2xub10uZmxhZyAmIG1hcmspKSB7CisJCQlpZiAoaHVua19jb21tZW50X2xpbmUoc2xpbmVbbG5vXS5ib2wpKQorCQkJCWh1bmtfY29tbWVudCA9IHNsaW5lW2xub10uYm9sOworCQkJbG5vKys7CisJCX0KKwkJaWYgKGNudCA8IGxubykKKwkJCWJyZWFrOworCQllbHNlIHsKKwkJCWZvciAoaHVua19lbmQgPSBsbm8gKyAxOyBodW5rX2VuZCA8PSBjbnQ7IGh1bmtfZW5kKyspCisJCQkJaWYgKCEoc2xpbmVbaHVua19lbmRdLmZsYWcgJiBtYXJrKSkKKwkJCQkJYnJlYWs7CisJCX0KKwkJcmxpbmVzID0gaHVua19lbmQgLSBsbm87CisJCWlmIChjbnQgPCBodW5rX2VuZCkKKwkJCXJsaW5lcy0tOyAvKiBwb2ludGluZyBhdCB0aGUgbGFzdCBkZWxldGUgaHVuayAqLworCisJCWlmICghY29udGV4dCkgeworCQkJLyoKKwkJCSAqIEV2ZW4gd2hlbiBydW5uaW5nIHdpdGggLS11bmlmaWVkPTAsIGFsbAorCQkJICogbGluZXMgaW4gdGhlIGh1bmsgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIGluCisJCQkgKiB0aGUgbG9vcCBiZWxvdyBpbiBvcmRlciB0byBzaG93IHRoZQorCQkJICogZGVsZXRpb24gcmVjb3JkZWQgaW4gbG9zdF9oZWFkLiAgSG93ZXZlciwKKwkJCSAqIHdlIGRvIG5vdCB3YW50IHRvIHNob3cgdGhlIHJlc3VsdGluZyBsaW5lCisJCQkgKiB3aXRoIGFsbCBibGFuayBjb250ZXh0IG1hcmtlcnMgaW4gc3VjaCBhCisJCQkgKiBjYXNlLiAgQ29tcGVuc2F0ZS4KKwkJCSAqLworCQkJdW5zaWduZWQgbG9uZyBqOworCQkJZm9yIChqID0gbG5vOyBqIDwgaHVua19lbmQ7IGorKykKKwkJCQlpZiAoIShzbGluZVtqXS5mbGFnICYgKG1hcmstMSkpKQorCQkJCQludWxsX2NvbnRleHQrKzsKKwkJCXJsaW5lcyAtPSBudWxsX2NvbnRleHQ7CisJCX0KKworCQlwcmludGYoIiVzJXMiLCBsaW5lX3ByZWZpeCwgY19mcmFnKTsKKwkJZm9yIChpID0gMDsgaSA8PSBudW1fcGFyZW50OyBpKyspIHB1dGNoYXIoY29tYmluZV9tYXJrZXIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJc2hvd19wYXJlbnRfbG5vKHNsaW5lLCBsbm8sIGh1bmtfZW5kLCBpLCBudWxsX2NvbnRleHQpOworCQlwcmludGYoIiArJWx1LCVsdSAiLCBsbm8rMSwgcmxpbmVzKTsKKwkJZm9yIChpID0gMDsgaSA8PSBudW1fcGFyZW50OyBpKyspIHB1dGNoYXIoY29tYmluZV9tYXJrZXIpOworCisJCWlmIChodW5rX2NvbW1lbnQpIHsKKwkJCWludCBjb21tZW50X2VuZCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDA7IGkrKykgeworCQkJCWludCBjaCA9IGh1bmtfY29tbWVudFtpXSAmIDB4ZmY7CisJCQkJaWYgKCFjaCB8fCBjaCA9PSAnXG4nKQorCQkJCQlicmVhazsKKwkJCQlpZiAoIWlzc3BhY2UoY2gpKQorCQkJCSAgICBjb21tZW50X2VuZCA9IGk7CisJCQl9CisJCQlpZiAoY29tbWVudF9lbmQpCisJCQkJcHJpbnRmKCIlcyVzICVzJXMiLCBjX3Jlc2V0LAorCQkJCQkJICAgIGNfY29udGV4dCwgY19yZXNldCwKKwkJCQkJCSAgICBjX2Z1bmMpOworCQkJZm9yIChpID0gMDsgaSA8IGNvbW1lbnRfZW5kOyBpKyspCisJCQkJcHV0Y2hhcihodW5rX2NvbW1lbnRbaV0pOworCQl9CisKKwkJcHJpbnRmKCIlc1xuIiwgY19yZXNldCk7CisJCXdoaWxlIChsbm8gPCBodW5rX2VuZCkgeworCQkJc3RydWN0IGxsaW5lICpsbDsKKwkJCWludCBqOworCQkJdW5zaWduZWQgbG9uZyBwX21hc2s7CisJCQlzdHJ1Y3Qgc2xpbmUgKnNsID0gJnNsaW5lW2xubysrXTsKKwkJCWxsID0gKHNsLT5mbGFnICYgbm9fcHJlX2RlbGV0ZSkgPyBOVUxMIDogc2wtPmxvc3Q7CisJCQl3aGlsZSAobGwpIHsKKwkJCQlwcmludGYoIiVzJXMiLCBsaW5lX3ByZWZpeCwgY19vbGQpOworCQkJCWZvciAoaiA9IDA7IGogPCBudW1fcGFyZW50OyBqKyspIHsKKwkJCQkJaWYgKGxsLT5wYXJlbnRfbWFwICYgKDFVTDw8aikpCisJCQkJCQlwdXRjaGFyKCctJyk7CisJCQkJCWVsc2UKKwkJCQkJCXB1dGNoYXIoJyAnKTsKKwkJCQl9CisJCQkJc2hvd19saW5lX3RvX2VvbChsbC0+bGluZSwgLTEsIGNfcmVzZXQpOworCQkJCWxsID0gbGwtPm5leHQ7CisJCQl9CisJCQlpZiAoY250IDwgbG5vKQorCQkJCWJyZWFrOworCQkJcF9tYXNrID0gMTsKKwkJCWZwdXRzKGxpbmVfcHJlZml4LCBzdGRvdXQpOworCQkJaWYgKCEoc2wtPmZsYWcgJiAobWFyay0xKSkpIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgc2xpbmUgd2FzIGhlcmUgdG8gaGFuZyB0aGUKKwkJCQkgKiBsb3N0IGxpbmVzIGluIGZyb250IG9mIGl0LgorCQkJCSAqLworCQkJCWlmICghY29udGV4dCkKKwkJCQkJY29udGludWU7CisJCQkJZnB1dHMoY19jb250ZXh0LCBzdGRvdXQpOworCQkJfQorCQkJZWxzZQorCQkJCWZwdXRzKGNfbmV3LCBzdGRvdXQpOworCQkJZm9yIChqID0gMDsgaiA8IG51bV9wYXJlbnQ7IGorKykgeworCQkJCWlmIChwX21hc2sgJiBzbC0+ZmxhZykKKwkJCQkJcHV0Y2hhcignKycpOworCQkJCWVsc2UKKwkJCQkJcHV0Y2hhcignICcpOworCQkJCXBfbWFzayA8PD0gMTsKKwkJCX0KKwkJCXNob3dfbGluZV90b19lb2woc2wtPmJvbCwgc2wtPmxlbiwgY19yZXNldCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJldXNlX2NvbWJpbmVfZGlmZihzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGNudCwKKwkJCSAgICAgICBpbnQgaSwgaW50IGopCit7CisJLyogV2UgaGF2ZSBhbHJlYWR5IGV4YW1pbmVkIHBhcmVudCBqIGFuZCB3ZSBrbm93IHBhcmVudCBpCisJICogYW5kIHBhcmVudCBqIGFyZSB0aGUgc2FtZSwgc28gcmV1c2UgdGhlIGNvbWJpbmVkIHJlc3VsdAorCSAqIG9mIHBhcmVudCBqIGZvciBwYXJlbnQgaS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGxubywgaW1hc2ssIGptYXNrOworCWltYXNrID0gKDFVTDw8aSk7CisJam1hc2sgPSAoMVVMPDxqKTsKKworCWZvciAobG5vID0gMDsgbG5vIDw9IGNudDsgbG5vKyspIHsKKwkJc3RydWN0IGxsaW5lICpsbCA9IHNsaW5lLT5sb3N0OworCQlzbGluZS0+cF9sbm9baV0gPSBzbGluZS0+cF9sbm9bal07CisJCXdoaWxlIChsbCkgeworCQkJaWYgKGxsLT5wYXJlbnRfbWFwICYgam1hc2spCisJCQkJbGwtPnBhcmVudF9tYXAgfD0gaW1hc2s7CisJCQlsbCA9IGxsLT5uZXh0OworCQl9CisJCWlmIChzbGluZS0+ZmxhZyAmIGptYXNrKQorCQkJc2xpbmUtPmZsYWcgfD0gaW1hc2s7CisJCXNsaW5lKys7CisJfQorCS8qIHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGZpbGUgKHNsaW5lW2NudF0pICovCisJc2xpbmUtPnBfbG5vW2ldID0gc2xpbmUtPnBfbG5vW2pdOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3F1b3RlZF9wYXRoKGNvbnN0IGNoYXIgKmhlYWQsCisJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZV9wcmVmaXgsCisJCQkgICAgIGNvbnN0IGNoYXIgKmNfbWV0YSwgY29uc3QgY2hhciAqY19yZXNldCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGxpbmVfcHJlZml4KTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGNfbWV0YSk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBoZWFkKTsKKwlxdW90ZV90d29fY19zdHlsZSgmYnVmLCBwcmVmaXgsIHBhdGgsIDApOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgY19yZXNldCk7CisJcHV0cyhidWYuYnVmKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19jb21iaW5lZF9oZWFkZXIoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICplbGVtLAorCQkJCSBpbnQgbnVtX3BhcmVudCwKKwkJCQkgaW50IGRlbnNlLAorCQkJCSBzdHJ1Y3QgcmV2X2luZm8gKnJldiwKKwkJCQkgY29uc3QgY2hhciAqbGluZV9wcmVmaXgsCisJCQkJIGludCBtb2RlX2RpZmZlcnMsCisJCQkJIGludCBzaG93X2ZpbGVfaGVhZGVyKQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9ICZyZXYtPmRpZmZvcHQ7CisJaW50IGFiYnJldiA9IG9wdC0+ZmxhZ3MuZnVsbF9pbmRleCA/IHRoZV9oYXNoX2FsZ28tPmhleHN6IDogREVGQVVMVF9BQkJSRVY7CisJY29uc3QgY2hhciAqYV9wcmVmaXggPSBvcHQtPmFfcHJlZml4ID8gb3B0LT5hX3ByZWZpeCA6ICJhLyI7CisJY29uc3QgY2hhciAqYl9wcmVmaXggPSBvcHQtPmJfcHJlZml4ID8gb3B0LT5iX3ByZWZpeCA6ICJiLyI7CisJY29uc3QgY2hhciAqY19tZXRhID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdCwgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqY19yZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvcHQsIERJRkZfUkVTRVQpOworCWNvbnN0IGNoYXIgKmFiYjsKKwlpbnQgYWRkZWQgPSAwOworCWludCBkZWxldGVkID0gMDsKKwlpbnQgaTsKKworCWlmIChyZXYtPmxvZ2luZm8gJiYgIXJldi0+bm9fY29tbWl0X2lkKQorCQlzaG93X2xvZyhyZXYpOworCisJZHVtcF9xdW90ZWRfcGF0aChkZW5zZSA/ICJkaWZmIC0tY2MgIiA6ICJkaWZmIC0tY29tYmluZWQgIiwKKwkJCSAiIiwgZWxlbS0+cGF0aCwgbGluZV9wcmVmaXgsIGNfbWV0YSwgY19yZXNldCk7CisJcHJpbnRmKCIlcyVzaW5kZXggIiwgbGluZV9wcmVmaXgsIGNfbWV0YSk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQlhYmIgPSBmaW5kX3VuaXF1ZV9hYmJyZXYoJmVsZW0tPnBhcmVudFtpXS5vaWQsCisJCQkJCSBhYmJyZXYpOworCQlwcmludGYoIiVzJXMiLCBpID8gIiwiIDogIiIsIGFiYik7CisJfQorCWFiYiA9IGZpbmRfdW5pcXVlX2FiYnJldigmZWxlbS0+b2lkLCBhYmJyZXYpOworCXByaW50ZigiLi4lcyVzXG4iLCBhYmIsIGNfcmVzZXQpOworCisJaWYgKG1vZGVfZGlmZmVycykgeworCQlkZWxldGVkID0gIWVsZW0tPm1vZGU7CisKKwkJLyogV2Ugc2F5IGl0IHdhcyBhZGRlZCBpZiBub2JvZHkgaGFkIGl0ICovCisJCWFkZGVkID0gIWRlbGV0ZWQ7CisJCWZvciAoaSA9IDA7IGFkZGVkICYmIGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlpZiAoZWxlbS0+cGFyZW50W2ldLnN0YXR1cyAhPQorCQkJICAgIERJRkZfU1RBVFVTX0FEREVEKQorCQkJCWFkZGVkID0gMDsKKwkJaWYgKGFkZGVkKQorCQkJcHJpbnRmKCIlcyVzbmV3IGZpbGUgbW9kZSAlMDZvIiwKKwkJCSAgICAgICBsaW5lX3ByZWZpeCwgY19tZXRhLCBlbGVtLT5tb2RlKTsKKwkJZWxzZSB7CisJCQlpZiAoZGVsZXRlZCkKKwkJCQlwcmludGYoIiVzJXNkZWxldGVkIGZpbGUgIiwKKwkJCQkgICAgICAgbGluZV9wcmVmaXgsIGNfbWV0YSk7CisJCQlwcmludGYoIm1vZGUgIik7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCQkJcHJpbnRmKCIlcyUwNm8iLCBpID8gIiwiIDogIiIsCisJCQkJICAgICAgIGVsZW0tPnBhcmVudFtpXS5tb2RlKTsKKwkJCX0KKwkJCWlmIChlbGVtLT5tb2RlKQorCQkJCXByaW50ZigiLi4lMDZvIiwgZWxlbS0+bW9kZSk7CisJCX0KKwkJcHJpbnRmKCIlc1xuIiwgY19yZXNldCk7CisJfQorCisJaWYgKCFzaG93X2ZpbGVfaGVhZGVyKQorCQlyZXR1cm47CisKKwlpZiAocmV2LT5jb21iaW5lZF9hbGxfcGF0aHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQkJY2hhciAqcGF0aCA9IGZpbGVuYW1lX2NoYW5nZWQoZWxlbS0+cGFyZW50W2ldLnN0YXR1cykKKwkJCQk/IGVsZW0tPnBhcmVudFtpXS5wYXRoLmJ1ZiA6IGVsZW0tPnBhdGg7CisJCQlpZiAoZWxlbS0+cGFyZW50W2ldLnN0YXR1cyA9PSBESUZGX1NUQVRVU19BRERFRCkKKwkJCQlkdW1wX3F1b3RlZF9wYXRoKCItLS0gIiwgIiIsICIvZGV2L251bGwiLAorCQkJCQkJIGxpbmVfcHJlZml4LCBjX21ldGEsIGNfcmVzZXQpOworCQkJZWxzZQorCQkJCWR1bXBfcXVvdGVkX3BhdGgoIi0tLSAiLCBhX3ByZWZpeCwgcGF0aCwKKwkJCQkJCSBsaW5lX3ByZWZpeCwgY19tZXRhLCBjX3Jlc2V0KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhZGRlZCkKKwkJCWR1bXBfcXVvdGVkX3BhdGgoIi0tLSAiLCAiIiwgIi9kZXYvbnVsbCIsCisJCQkJCSBsaW5lX3ByZWZpeCwgY19tZXRhLCBjX3Jlc2V0KTsKKwkJZWxzZQorCQkJZHVtcF9xdW90ZWRfcGF0aCgiLS0tICIsIGFfcHJlZml4LCBlbGVtLT5wYXRoLAorCQkJCQkgbGluZV9wcmVmaXgsIGNfbWV0YSwgY19yZXNldCk7CisJfQorCWlmIChkZWxldGVkKQorCQlkdW1wX3F1b3RlZF9wYXRoKCIrKysgIiwgIiIsICIvZGV2L251bGwiLAorCQkJCSBsaW5lX3ByZWZpeCwgY19tZXRhLCBjX3Jlc2V0KTsKKwllbHNlCisJCWR1bXBfcXVvdGVkX3BhdGgoIisrKyAiLCBiX3ByZWZpeCwgZWxlbS0+cGF0aCwKKwkJCQkgbGluZV9wcmVmaXgsIGNfbWV0YSwgY19yZXNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGF0Y2hfZGlmZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmVsZW0sIGludCBudW1fcGFyZW50LAorCQkJICAgIGludCBkZW5zZSwgaW50IHdvcmtpbmdfdHJlZV9maWxlLAorCQkJICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9ICZyZXYtPmRpZmZvcHQ7CisJdW5zaWduZWQgbG9uZyByZXN1bHRfc2l6ZSwgY250LCBsbm87CisJaW50IHJlc3VsdF9kZWxldGVkID0gMDsKKwljaGFyICpyZXN1bHQsICpjcDsKKwlzdHJ1Y3Qgc2xpbmUgKnNsaW5lOyAvKiBzdXJ2aXZlZCBsaW5lcyAqLworCWludCBtb2RlX2RpZmZlcnMgPSAwOworCWludCBpLCBzaG93X2h1bmtzOworCW1tZmlsZV90IHJlc3VsdF9maWxlOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252ID0gTlVMTDsKKwlpbnQgaXNfYmluYXJ5OworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvcHQpOworCisJY29udGV4dCA9IG9wdC0+Y29udGV4dDsKKwl1c2VyZGlmZiA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChvcHQtPnJlcG8tPmluZGV4LCBlbGVtLT5wYXRoKTsKKwlpZiAoIXVzZXJkaWZmKQorCQl1c2VyZGlmZiA9IHVzZXJkaWZmX2ZpbmRfYnlfbmFtZSgiZGVmYXVsdCIpOworCWlmIChvcHQtPmZsYWdzLmFsbG93X3RleHRjb252KQorCQl0ZXh0Y29udiA9IHVzZXJkaWZmX2dldF90ZXh0Y29udihvcHQtPnJlcG8sIHVzZXJkaWZmKTsKKworCS8qIFJlYWQgdGhlIHJlc3VsdCBvZiBtZXJnZSBmaXJzdCAqLworCWlmICghd29ya2luZ190cmVlX2ZpbGUpCisJCXJlc3VsdCA9IGdyYWJfYmxvYihvcHQtPnJlcG8sICZlbGVtLT5vaWQsIGVsZW0tPm1vZGUsICZyZXN1bHRfc2l6ZSwKKwkJCQkgICB0ZXh0Y29udiwgZWxlbS0+cGF0aCk7CisJZWxzZSB7CisJCS8qIFVzZWQgYnkgZGlmZi10cmVlIHRvIHJlYWQgZnJvbSB0aGUgd29ya2luZyB0cmVlICovCisJCXN0cnVjdCBzdGF0IHN0OworCQlpbnQgZmQgPSAtMTsKKworCQlpZiAobHN0YXQoZWxlbS0+cGF0aCwgJnN0KSA8IDApCisJCQlnb3RvIGRlbGV0ZWRfZmlsZTsKKworCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmYnVmLCBlbGVtLT5wYXRoLCBzdC5zdF9zaXplKSA8IDApIHsKKwkJCQllcnJvcl9lcnJubygicmVhZGxpbmsoJXMpIiwgZWxlbS0+cGF0aCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcmVzdWx0X3NpemUgPSBidWYubGVuOworCQkJcmVzdWx0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwkJCWVsZW0tPm1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOworCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJaWYgKHJlc29sdmVfZ2l0bGlua19yZWYoZWxlbS0+cGF0aCwgIkhFQUQiLCAmb2lkKSA8IDApCisJCQkJcmVzdWx0ID0gZ3JhYl9ibG9iKG9wdC0+cmVwbywgJmVsZW0tPm9pZCwKKwkJCQkJCSAgIGVsZW0tPm1vZGUsICZyZXN1bHRfc2l6ZSwKKwkJCQkJCSAgIE5VTEwsIE5VTEwpOworCQkJZWxzZQorCQkJCXJlc3VsdCA9IGdyYWJfYmxvYihvcHQtPnJlcG8sICZvaWQsIGVsZW0tPm1vZGUsCisJCQkJCQkgICAmcmVzdWx0X3NpemUsIE5VTEwsIE5VTEwpOworCQl9IGVsc2UgaWYgKHRleHRjb252KSB7CisJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYgPSBhbGxvY19maWxlc3BlYyhlbGVtLT5wYXRoKTsKKwkJCWZpbGxfZmlsZXNwZWMoZGYsICZudWxsX29pZCwgMCwgc3Quc3RfbW9kZSk7CisJCQlyZXN1bHRfc2l6ZSA9IGZpbGxfdGV4dGNvbnYob3B0LT5yZXBvLCB0ZXh0Y29udiwgZGYsICZyZXN1bHQpOworCQkJZnJlZV9maWxlc3BlYyhkZik7CisJCX0gZWxzZSBpZiAoMCA8PSAoZmQgPSBvcGVuKGVsZW0tPnBhdGgsIE9fUkRPTkxZKSkpIHsKKwkJCXNpemVfdCBsZW4gPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQkJc3NpemVfdCBkb25lOworCQkJaW50IGlzX2ZpbGUsIGk7CisKKwkJCWVsZW0tPm1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOworCQkJLyogaWYgc3ltbGlua3MgZG9uJ3Qgd29yaywgYXNzdW1lIHN5bWxpbmsgaWYgYWxsIHBhcmVudHMKKwkJCSAqIGFyZSBzeW1saW5rcworCQkJICovCisJCQlpc19maWxlID0gaGFzX3N5bWxpbmtzOworCQkJZm9yIChpID0gMDsgIWlzX2ZpbGUgJiYgaSA8IG51bV9wYXJlbnQ7IGkrKykKKwkJCQlpc19maWxlID0gIVNfSVNMTksoZWxlbS0+cGFyZW50W2ldLm1vZGUpOworCQkJaWYgKCFpc19maWxlKQorCQkJCWVsZW0tPm1vZGUgPSBjYW5vbl9tb2RlKFNfSUZMTkspOworCisJCQlyZXN1bHRfc2l6ZSA9IGxlbjsKKwkJCXJlc3VsdCA9IHhtYWxsb2N6KGxlbik7CisKKwkJCWRvbmUgPSByZWFkX2luX2Z1bGwoZmQsIHJlc3VsdCwgbGVuKTsKKwkJCWlmIChkb25lIDwgMCkKKwkJCQlkaWVfZXJybm8oInJlYWQgZXJyb3IgJyVzJyIsIGVsZW0tPnBhdGgpOworCQkJZWxzZSBpZiAoZG9uZSA8IGxlbikKKwkJCQlkaWUoImVhcmx5IEVPRiAnJXMnIiwgZWxlbS0+cGF0aCk7CisKKwkJCS8qIElmIG5vdCBhIGZha2Ugc3ltbGluaywgYXBwbHkgZmlsdGVycywgZS5nLiBhdXRvY3JsZiAqLworCQkJaWYgKGlzX2ZpbGUpIHsKKwkJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCQkJaWYgKGNvbnZlcnRfdG9fZ2l0KHJldi0+ZGlmZm9wdC5yZXBvLT5pbmRleCwKKwkJCQkJCSAgIGVsZW0tPnBhdGgsIHJlc3VsdCwgbGVuLCAmYnVmLCBnbG9iYWxfY29udl9mbGFnc19lb2wpKSB7CisJCQkJCWZyZWUocmVzdWx0KTsKKwkJCQkJcmVzdWx0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmbGVuKTsKKwkJCQkJcmVzdWx0X3NpemUgPSBsZW47CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgeworCQlkZWxldGVkX2ZpbGU6CisJCQlyZXN1bHRfZGVsZXRlZCA9IDE7CisJCQlyZXN1bHRfc2l6ZSA9IDA7CisJCQllbGVtLT5tb2RlID0gMDsKKwkJCXJlc3VsdCA9IHhjYWxsb2MoMSwgMSk7CisJCX0KKworCQlpZiAoMCA8PSBmZCkKKwkJCWNsb3NlKGZkKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCWlmIChlbGVtLT5wYXJlbnRbaV0ubW9kZSAhPSBlbGVtLT5tb2RlKSB7CisJCQltb2RlX2RpZmZlcnMgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodGV4dGNvbnYpCisJCWlzX2JpbmFyeSA9IDA7CisJZWxzZSBpZiAodXNlcmRpZmYtPmJpbmFyeSAhPSAtMSkKKwkJaXNfYmluYXJ5ID0gdXNlcmRpZmYtPmJpbmFyeTsKKwllbHNlIHsKKwkJaXNfYmluYXJ5ID0gYnVmZmVyX2lzX2JpbmFyeShyZXN1bHQsIHJlc3VsdF9zaXplKTsKKwkJZm9yIChpID0gMDsgIWlzX2JpbmFyeSAmJiBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCQljaGFyICpidWY7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCQlidWYgPSBncmFiX2Jsb2Iob3B0LT5yZXBvLAorCQkJCQkmZWxlbS0+cGFyZW50W2ldLm9pZCwKKwkJCQkJZWxlbS0+cGFyZW50W2ldLm1vZGUsCisJCQkJCSZzaXplLCBOVUxMLCBOVUxMKTsKKwkJCWlmIChidWZmZXJfaXNfYmluYXJ5KGJ1Ziwgc2l6ZSkpCisJCQkJaXNfYmluYXJ5ID0gMTsKKwkJCWZyZWUoYnVmKTsKKwkJfQorCX0KKwlpZiAoaXNfYmluYXJ5KSB7CisJCXNob3dfY29tYmluZWRfaGVhZGVyKGVsZW0sIG51bV9wYXJlbnQsIGRlbnNlLCByZXYsCisJCQkJICAgICBsaW5lX3ByZWZpeCwgbW9kZV9kaWZmZXJzLCAwKTsKKwkJcHJpbnRmKCJCaW5hcnkgZmlsZXMgZGlmZmVyXG4iKTsKKwkJZnJlZShyZXN1bHQpOworCQlyZXR1cm47CisJfQorCisJZm9yIChjbnQgPSAwLCBjcCA9IHJlc3VsdDsgY3AgPCByZXN1bHQgKyByZXN1bHRfc2l6ZTsgY3ArKykgeworCQlpZiAoKmNwID09ICdcbicpCisJCQljbnQrKzsKKwl9CisJaWYgKHJlc3VsdF9zaXplICYmIHJlc3VsdFtyZXN1bHRfc2l6ZS0xXSAhPSAnXG4nKQorCQljbnQrKzsgLyogaW5jb21wbGV0ZSBsaW5lICovCisKKwlzbGluZSA9IHhjYWxsb2Moc3RfYWRkKGNudCwgMiksIHNpemVvZigqc2xpbmUpKTsKKwlzbGluZVswXS5ib2wgPSByZXN1bHQ7CisJZm9yIChsbm8gPSAwLCBjcCA9IHJlc3VsdDsgY3AgPCByZXN1bHQgKyByZXN1bHRfc2l6ZTsgY3ArKykgeworCQlpZiAoKmNwID09ICdcbicpIHsKKwkJCXNsaW5lW2xub10ubGVuID0gY3AgLSBzbGluZVtsbm9dLmJvbDsKKwkJCWxubysrOworCQkJaWYgKGxubyA8IGNudCkKKwkJCQlzbGluZVtsbm9dLmJvbCA9IGNwICsgMTsKKwkJfQorCX0KKwlpZiAocmVzdWx0X3NpemUgJiYgcmVzdWx0W3Jlc3VsdF9zaXplLTFdICE9ICdcbicpCisJCXNsaW5lW2NudC0xXS5sZW4gPSByZXN1bHRfc2l6ZSAtIChzbGluZVtjbnQtMV0uYm9sIC0gcmVzdWx0KTsKKworCXJlc3VsdF9maWxlLnB0ciA9IHJlc3VsdDsKKwlyZXN1bHRfZmlsZS5zaXplID0gcmVzdWx0X3NpemU7CisKKwkvKiBFdmVuIHBfbG5vW2NudCsxXSBpcyB2YWxpZCAtLSB0aGF0IGlzIGZvciB0aGUgZW5kIGxpbmUgbnVtYmVyCisJICogZm9yIGRlbGV0aW9uIGh1bmsgYXQgdGhlIGVuZC4KKwkgKi8KKwlzbGluZVswXS5wX2xubyA9IHhjYWxsb2Moc3RfbXVsdChzdF9hZGQoY250LCAyKSwgbnVtX3BhcmVudCksIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJZm9yIChsbm8gPSAwOyBsbm8gPD0gY250OyBsbm8rKykKKwkJc2xpbmVbbG5vKzFdLnBfbG5vID0gc2xpbmVbbG5vXS5wX2xubyArIG51bV9wYXJlbnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisJCQlpZiAob2lkZXEoJmVsZW0tPnBhcmVudFtpXS5vaWQsCisJCQkJICAmZWxlbS0+cGFyZW50W2pdLm9pZCkpIHsKKwkJCQlyZXVzZV9jb21iaW5lX2RpZmYoc2xpbmUsIGNudCwgaSwgaik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gaikKKwkJCWNvbWJpbmVfZGlmZihvcHQtPnJlcG8sCisJCQkJICAgICAmZWxlbS0+cGFyZW50W2ldLm9pZCwKKwkJCQkgICAgIGVsZW0tPnBhcmVudFtpXS5tb2RlLAorCQkJCSAgICAgJnJlc3VsdF9maWxlLCBzbGluZSwKKwkJCQkgICAgIGNudCwgaSwgbnVtX3BhcmVudCwgcmVzdWx0X2RlbGV0ZWQsCisJCQkJICAgICB0ZXh0Y29udiwgZWxlbS0+cGF0aCwgb3B0LT54ZGxfb3B0cyk7CisJfQorCisJc2hvd19odW5rcyA9IG1ha2VfaHVua3Moc2xpbmUsIGNudCwgbnVtX3BhcmVudCwgZGVuc2UpOworCisJaWYgKHNob3dfaHVua3MgfHwgbW9kZV9kaWZmZXJzIHx8IHdvcmtpbmdfdHJlZV9maWxlKSB7CisJCXNob3dfY29tYmluZWRfaGVhZGVyKGVsZW0sIG51bV9wYXJlbnQsIGRlbnNlLCByZXYsCisJCQkJICAgICBsaW5lX3ByZWZpeCwgbW9kZV9kaWZmZXJzLCAxKTsKKwkJZHVtcF9zbGluZShzbGluZSwgbGluZV9wcmVmaXgsIGNudCwgbnVtX3BhcmVudCwKKwkJCSAgIG9wdC0+dXNlX2NvbG9yLCByZXN1bHRfZGVsZXRlZCk7CisJfQorCWZyZWUocmVzdWx0KTsKKworCWZvciAobG5vID0gMDsgbG5vIDwgY250OyBsbm8rKykgeworCQlpZiAoc2xpbmVbbG5vXS5sb3N0KSB7CisJCQlzdHJ1Y3QgbGxpbmUgKmxsID0gc2xpbmVbbG5vXS5sb3N0OworCQkJd2hpbGUgKGxsKSB7CisJCQkJc3RydWN0IGxsaW5lICp0bXAgPSBsbDsKKwkJCQlsbCA9IGxsLT5uZXh0OworCQkJCWZyZWUodG1wKTsKKwkJCX0KKwkJfQorCX0KKwlmcmVlKHNsaW5lWzBdLnBfbG5vKTsKKwlmcmVlKHNsaW5lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yYXdfZGlmZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsIGludCBudW1fcGFyZW50LCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCWludCBsaW5lX3Rlcm1pbmF0aW9uLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uLCBpOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvcHQpOworCisJbGluZV90ZXJtaW5hdGlvbiA9IG9wdC0+bGluZV90ZXJtaW5hdGlvbjsKKwlpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uID0gJ1x0JzsKKwlpZiAoIWxpbmVfdGVybWluYXRpb24pCisJCWludGVyX25hbWVfdGVybWluYXRpb24gPSAwOworCisJaWYgKHJldi0+bG9naW5mbyAmJiAhcmV2LT5ub19jb21taXRfaWQpCisJCXNob3dfbG9nKHJldik7CisKKworCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9SQVcpIHsKKwkJcHJpbnRmKCIlcyIsIGxpbmVfcHJlZml4KTsKKworCQkvKiBBcyBtYW55IGNvbG9ucyBhcyB0aGVyZSBhcmUgcGFyZW50cyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJcHV0Y2hhcignOicpOworCisJCS8qIFNob3cgdGhlIG1vZGVzICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlwcmludGYoIiUwNm8gIiwgcC0+cGFyZW50W2ldLm1vZGUpOworCQlwcmludGYoIiUwNm8iLCBwLT5tb2RlKTsKKworCQkvKiBTaG93IHNoYTEncyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJcHJpbnRmKCIgJXMiLCBkaWZmX2FsaWduZWRfYWJicmV2KCZwLT5wYXJlbnRbaV0ub2lkLAorCQkJCQkJCSAgb3B0LT5hYmJyZXYpKTsKKwkJcHJpbnRmKCIgJXMgIiwgZGlmZl9hbGlnbmVkX2FiYnJldigmcC0+b2lkLCBvcHQtPmFiYnJldikpOworCX0KKworCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfUkFXIHwgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVMpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlwdXRjaGFyKHAtPnBhcmVudFtpXS5zdGF0dXMpOworCQlwdXRjaGFyKGludGVyX25hbWVfdGVybWluYXRpb24pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspCisJCWlmIChyZXYtPmNvbWJpbmVkX2FsbF9wYXRocykgeworCQkJaWYgKGZpbGVuYW1lX2NoYW5nZWQocC0+cGFyZW50W2ldLnN0YXR1cykpCisJCQkJd3JpdGVfbmFtZV9xdW90ZWQocC0+cGFyZW50W2ldLnBhdGguYnVmLCBzdGRvdXQsCisJCQkJCQkgIGludGVyX25hbWVfdGVybWluYXRpb24pOworCQkJZWxzZQorCQkJCXdyaXRlX25hbWVfcXVvdGVkKHAtPnBhdGgsIHN0ZG91dCwKKwkJCQkJCSAgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbik7CisJCX0KKwl3cml0ZV9uYW1lX3F1b3RlZChwLT5wYXRoLCBzdGRvdXQsIGxpbmVfdGVybWluYXRpb24pOworfQorCisvKgorICogVGhlIHJlc3VsdCAocC0+ZWxlbSkgaXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGVpcgorICogcGFyZW50cyBhcmUgdHlwaWNhbGx5IGZyb20gbXVsdGlwbGUgc3RhZ2VzIGR1cmluZyBhIG1lcmdlCisgKiAoaS5lLiBkaWZmLWZpbGVzKSBvciB0aGUgc3RhdGUgaW4gSEVBRCBhbmQgaW4gdGhlIGluZGV4CisgKiAoaS5lLiBkaWZmLWluZGV4KS4KKyAqLwordm9pZCBzaG93X2NvbWJpbmVkX2RpZmYoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLAorCQkgICAgICAgaW50IG51bV9wYXJlbnQsCisJCSAgICAgICBpbnQgZGVuc2UsCisJCSAgICAgICBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCisJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9SQVcgfAorCQkJCSAgRElGRl9GT1JNQVRfTkFNRSB8CisJCQkJICBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykpCisJCXNob3dfcmF3X2RpZmYocCwgbnVtX3BhcmVudCwgcmV2KTsKKwllbHNlIGlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkKKwkJc2hvd19wYXRjaF9kaWZmKHAsIG51bV9wYXJlbnQsIGRlbnNlLCAxLCByZXYpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2NvbWJpbmVkX3BhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIpCit7CisJZnJlZShwYWlyLT50d28pOworCWZyZWUocGFpcik7Cit9CisKKy8qCisgKiBBIGNvbWJpbmVfZGlmZl9wYXRoIGV4cHJlc3NlcyBOIHBhcmVudHMgb24gdGhlIExIUyBhZ2FpbnN0IDEgbWVyZ2UKKyAqIHJlc3VsdC4gU3ludGhlc2l6ZSBhIGRpZmZfZmlsZXBhaXIgdGhhdCBoYXMgTiBlbnRyaWVzIG9uIHRoZSAib25lIgorICogc2lkZSBhbmQgMSBlbnRyeSBvbiB0aGUgInR3byIgc2lkZS4KKyAqCisgKiBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCB3YW50IHRvIGFkZCBtb3JlIGRhdGEgdG8gY29tYmluZV9kaWZmX3BhdGgKKyAqIHNvIHRoYXQgd2UgY2FuIGZpbGwgZmllbGRzIHdlIGFyZSBpZ25vcmluZyAobW9zdCBub3RhYmx5LCBzaXplKSBoZXJlLAorICogYnV0IGN1cnJlbnRseSBub2JvZHkgdXNlcyBpdCwgc28gdGhpcyBzaG91bGQgc3VmZmljZSBmb3Igbm93LgorICovCitzdGF0aWMgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmNvbWJpbmVkX3BhaXIoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLAorCQkJCQkgICBpbnQgbnVtX3BhcmVudCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcG9vbDsKKworCXBhaXIgPSB4bWFsbG9jKHNpemVvZigqcGFpcikpOworCXBvb2wgPSB4Y2FsbG9jKHN0X2FkZChudW1fcGFyZW50LCAxKSwgc2l6ZW9mKHN0cnVjdCBkaWZmX2ZpbGVzcGVjKSk7CisJcGFpci0+b25lID0gcG9vbCArIDE7CisJcGFpci0+dHdvID0gcG9vbDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJcGFpci0+b25lW2ldLnBhdGggPSBwLT5wYXRoOworCQlwYWlyLT5vbmVbaV0ubW9kZSA9IHAtPnBhcmVudFtpXS5tb2RlOworCQlvaWRjcHkoJnBhaXItPm9uZVtpXS5vaWQsICZwLT5wYXJlbnRbaV0ub2lkKTsKKwkJcGFpci0+b25lW2ldLm9pZF92YWxpZCA9ICFpc19udWxsX29pZCgmcC0+cGFyZW50W2ldLm9pZCk7CisJCXBhaXItPm9uZVtpXS5oYXNfbW9yZV9lbnRyaWVzID0gMTsKKwl9CisJcGFpci0+b25lW251bV9wYXJlbnQgLSAxXS5oYXNfbW9yZV9lbnRyaWVzID0gMDsKKworCXBhaXItPnR3by0+cGF0aCA9IHAtPnBhdGg7CisJcGFpci0+dHdvLT5tb2RlID0gcC0+bW9kZTsKKwlvaWRjcHkoJnBhaXItPnR3by0+b2lkLCAmcC0+b2lkKTsKKwlwYWlyLT50d28tPm9pZF92YWxpZCA9ICFpc19udWxsX29pZCgmcC0+b2lkKTsKKwlyZXR1cm4gcGFpcjsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NvbWJpbmVkX2NhbGxiYWNrKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwKKwkJCQkgICAgIHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcGF0aHMsCisJCQkJICAgICBpbnQgbnVtX3BhcmVudCwKKwkJCQkgICAgIGludCBudW1fcGF0aHMpCit7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBxOworCWludCBpOworCisJcS5xdWV1ZSA9IHhjYWxsb2MobnVtX3BhdGhzLCBzaXplb2Yoc3RydWN0IGRpZmZfZmlsZXBhaXIgKikpOworCXEuYWxsb2MgPSBudW1fcGF0aHM7CisJcS5uciA9IG51bV9wYXRoczsKKwlmb3IgKGkgPSAwLCBwID0gcGF0aHM7IHA7IHAgPSBwLT5uZXh0KQorCQlxLnF1ZXVlW2krK10gPSBjb21iaW5lZF9wYWlyKHAsIG51bV9wYXJlbnQpOworCW9wdC0+Zm9ybWF0X2NhbGxiYWNrKCZxLCBvcHQsIG9wdC0+Zm9ybWF0X2NhbGxiYWNrX2RhdGEpOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGF0aHM7IGkrKykKKwkJZnJlZV9jb21iaW5lZF9wYWlyKHEucXVldWVbaV0pOworCWZyZWUocS5xdWV1ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXRoX3BhdGgodm9pZCAqb2JqKQoreworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcGF0aCA9IChzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKilvYmo7CisKKwlyZXR1cm4gcGF0aC0+cGF0aDsKK30KKworLyoKKyAqIERpZmYgc3RhdCBmb3JtYXRzIHdoaWNoIHdlIGFsd2F5cyBjb21wdXRlIHNvbGVseSBhZ2FpbnN0IHRoZSBmaXJzdCBwYXJlbnQuCisgKi8KKyNkZWZpbmUgU1RBVF9GT1JNQVRfTUFTSyAoRElGRl9GT1JNQVRfTlVNU1RBVCBcCisJCQkgIHwgRElGRl9GT1JNQVRfU0hPUlRTVEFUIFwKKwkJCSAgfCBESUZGX0ZPUk1BVF9TVU1NQVJZIFwKKwkJCSAgfCBESUZGX0ZPUk1BVF9ESVJTVEFUIFwKKwkJCSAgfCBESUZGX0ZPUk1BVF9ESUZGU1RBVCkKKworLyogZmluZCBzZXQgb2YgcGF0aHMgdGhhdCBldmVyeSBwYXJlbnQgdG91Y2hlcyAqLworc3RhdGljIHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqZmluZF9wYXRoc19nZW5lcmljKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwljb25zdCBzdHJ1Y3Qgb2lkX2FycmF5ICpwYXJlbnRzLAorCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwKKwlpbnQgY29tYmluZWRfYWxsX3BhdGhzKQoreworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcGF0aHMgPSBOVUxMOworCWludCBpLCBudW1fcGFyZW50ID0gcGFyZW50cy0+bnI7CisKKwlpbnQgb3V0cHV0X2Zvcm1hdCA9IG9wdC0+b3V0cHV0X2Zvcm1hdDsKKwljb25zdCBjaGFyICpvcmRlcmZpbGUgPSBvcHQtPm9yZGVyZmlsZTsKKworCW9wdC0+b3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwkvKiB0ZWxsIGRpZmZfdHJlZSB0byBlbWl0IHBhdGhzIGluIHNvcnRlZCAoPXRyZWUpIG9yZGVyICovCisJb3B0LT5vcmRlcmZpbGUgPSBOVUxMOworCisJLyogRChBLFAxLi4uUG4pID0gRChBLFAxKSBeIC4uLiBeIEQoQSxQbikgICh3cnQgcGF0aHMpICovCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQkvKgorCQkgKiBzaG93IHN0YXQgYWdhaW5zdCB0aGUgZmlyc3QgcGFyZW50IGV2ZW4gd2hlbiBkb2luZworCQkgKiBjb21iaW5lZCBkaWZmLgorCQkgKi8KKwkJaW50IHN0YXRfb3B0ID0gb3V0cHV0X2Zvcm1hdCAmIFNUQVRfRk9STUFUX01BU0s7CisJCWlmIChpID09IDAgJiYgc3RhdF9vcHQpCisJCQlvcHQtPm91dHB1dF9mb3JtYXQgPSBzdGF0X29wdDsKKwkJZWxzZQorCQkJb3B0LT5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCQlkaWZmX3RyZWVfb2lkKCZwYXJlbnRzLT5vaWRbaV0sIG9pZCwgIiIsIG9wdCk7CisJCWRpZmZjb3JlX3N0ZChvcHQpOworCQlwYXRocyA9IGludGVyc2VjdF9wYXRocyhwYXRocywgaSwgbnVtX3BhcmVudCwKKwkJCQkJY29tYmluZWRfYWxsX3BhdGhzKTsKKworCQkvKiBpZiBzaG93aW5nIGRpZmYsIHNob3cgaXQgaW4gcmVxdWVzdGVkIG9yZGVyICovCisJCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgIT0gRElGRl9GT1JNQVRfTk9fT1VUUFVUICYmCisJCSAgICBvcmRlcmZpbGUpIHsKKwkJCWRpZmZjb3JlX29yZGVyKG9yZGVyZmlsZSk7CisJCX0KKworCQlkaWZmX2ZsdXNoKG9wdCk7CisJfQorCisJb3B0LT5vdXRwdXRfZm9ybWF0ID0gb3V0cHV0X2Zvcm1hdDsKKwlvcHQtPm9yZGVyZmlsZSA9IG9yZGVyZmlsZTsKKwlyZXR1cm4gcGF0aHM7Cit9CisKKworLyoKKyAqIGZpbmQgc2V0IG9mIHBhdGhzIHRoYXQgZXZlcnlib2R5IHRvdWNoZXMsIGFzc3VtaW5nIGRpZmYgaXMgcnVuIHdpdGhvdXQKKyAqIHJlbmFtZS9jb3B5IGRldGVjdGlvbiwgZXRjLCBjb21wYXJpbmcgYWxsIHRyZWVzIHNpbXVsdGFuZW91c2x5ICg9IGZhc3RlcikuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmZpbmRfcGF0aHNfbXVsdGl0cmVlKAorCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3Qgc3RydWN0IG9pZF9hcnJheSAqcGFyZW50cywKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJaW50IGksIG5wYXJlbnQgPSBwYXJlbnRzLT5ucjsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICoqcGFyZW50c19vaWQ7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoIHBhdGhzX2hlYWQ7CisJc3RydWN0IHN0cmJ1ZiBiYXNlOworCisJQUxMT0NfQVJSQVkocGFyZW50c19vaWQsIG5wYXJlbnQpOworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyBpKyspCisJCXBhcmVudHNfb2lkW2ldID0gJnBhcmVudHMtPm9pZFtpXTsKKworCS8qIGZha2UgbGlzdCBoZWFkLCBzbyB3b3JrZXIgY2FuIGFzc3VtZSBpdCBpcyBub24tTlVMTCAqLworCXBhdGhzX2hlYWQubmV4dCA9IE5VTEw7CisKKwlzdHJidWZfaW5pdCgmYmFzZSwgUEFUSF9NQVgpOworCWRpZmZfdHJlZV9wYXRocygmcGF0aHNfaGVhZCwgb2lkLCBwYXJlbnRzX29pZCwgbnBhcmVudCwgJmJhc2UsIG9wdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmYmFzZSk7CisJZnJlZShwYXJlbnRzX29pZCk7CisJcmV0dXJuIHBhdGhzX2hlYWQubmV4dDsKK30KKworCit2b2lkIGRpZmZfdHJlZV9jb21iaW5lZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQljb25zdCBzdHJ1Y3Qgb2lkX2FycmF5ICpwYXJlbnRzLAorCQkJaW50IGRlbnNlLAorCQkJc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gJnJldi0+ZGlmZm9wdDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHRzOworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwgKnBhdGhzOworCWludCBpLCBudW1fcGF0aHMsIG5lZWRzZXAsIHNob3dfbG9nX2ZpcnN0LCBudW1fcGFyZW50ID0gcGFyZW50cy0+bnI7CisJaW50IG5lZWRfZ2VuZXJpY19wYXRoc2NhbjsKKworCS8qIG5vdGhpbmcgdG8gZG8sIGlmIG5vIHBhcmVudHMgKi8KKwlpZiAoIW51bV9wYXJlbnQpCisJCXJldHVybjsKKworCXNob3dfbG9nX2ZpcnN0ID0gISFyZXYtPmxvZ2luZm8gJiYgIXJldi0+bm9fY29tbWl0X2lkOworCW5lZWRzZXAgPSAwOworCWlmIChzaG93X2xvZ19maXJzdCkgeworCQlzaG93X2xvZyhyZXYpOworCisJCWlmIChyZXYtPnZlcmJvc2VfaGVhZGVyICYmIG9wdC0+b3V0cHV0X2Zvcm1hdCAmJgorCQkgICAgb3B0LT5vdXRwdXRfZm9ybWF0ICE9IERJRkZfRk9STUFUX05PX09VVFBVVCAmJgorCQkgICAgIWNvbW1pdF9mb3JtYXRfaXNfZW1wdHkocmV2LT5jb21taXRfZm9ybWF0KSkKKwkJCXByaW50ZigiJXMlYyIsIGRpZmZfbGluZV9wcmVmaXgob3B0KSwKKwkJCSAgICAgICBvcHQtPmxpbmVfdGVybWluYXRpb24pOworCX0KKworCWRpZmZvcHRzID0gKm9wdDsKKwljb3B5X3BhdGhzcGVjKCZkaWZmb3B0cy5wYXRoc3BlYywgJm9wdC0+cGF0aHNwZWMpOworCWRpZmZvcHRzLmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJZGlmZm9wdHMuZmxhZ3MuYWxsb3dfZXh0ZXJuYWwgPSAwOworCisJLyogZmluZCBzZXQgb2YgcGF0aHMgdGhhdCBldmVyeWJvZHkgdG91Y2hlcworCSAqCisJICogTk9URQorCSAqCisJICogRGlmZmNvcmUgdHJhbnNmb3JtYXRpb25zIGFyZSBib3VuZCB0byBkaWZmX2ZpbGVzcGVjIGFuZCBsb2dpYworCSAqIGNvbXBhcmluZyB0d28gZW50cmllcyAtIGkuZS4gdGhleSBkbyBub3QgYXBwbHkgZGlyZWN0bHkgdG8gY29tYmluZQorCSAqIGRpZmYuCisJICoKKwkgKiBJZiBzb21lIG9mIHN1Y2ggdHJhbnNmb3JtYXRpb25zIGlzIHJlcXVlc3RlZCAtIHdlIGxhdW5jaCBnZW5lcmljCisJICogcGF0aCBzY2FubmluZywgd2hpY2ggd29ya3Mgc2lnbmlmaWNhbnRseSBzbG93ZXIgY29tcGFyZWQgdG8KKwkgKiBzaW11bHRhbmVvdXMgYWxsLXRyZWVzLWluLW9uZS1nbyBzY2FuIGluIGZpbmRfcGF0aHNfbXVsdGl0cmVlKCkuCisJICoKKwkgKiBUT0RPIHNvbWUgb2YgdGhlIGZpbHRlcnMgY291bGQgYmUgcG9ydGVkIHRvIHdvcmsgb24KKwkgKiBjb21iaW5lX2RpZmZfcGF0aHMgLSBpLmUuIGFsbCBmdW5jdGlvbmFsaXR5IHRoYXQgc2tpcHMgcGF0aHMsIHNvIGluCisJICogdGhlb3J5LCB3ZSBjb3VsZCBlbmQgdXAgaGF2aW5nIG9ubHkgbXVsdGl0cmVlIHBhdGggc2Nhbm5pbmcuCisJICoKKwkgKiBOT1RFIHBsZWFzZSBrZWVwIHRoaXMgc2VtYW50aWNhbGx5IGluIHN5bmMgd2l0aCBkaWZmY29yZV9zdGQoKQorCSAqLworCW5lZWRfZ2VuZXJpY19wYXRoc2NhbiA9IG9wdC0+c2tpcF9zdGF0X3VubWF0Y2gJfHwKKwkJCW9wdC0+ZmxhZ3MuZm9sbG93X3JlbmFtZXMJfHwKKwkJCW9wdC0+YnJlYWtfb3B0ICE9IC0xCXx8CisJCQlvcHQtPmRldGVjdF9yZW5hbWUJfHwKKwkJCShvcHQtPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9LSU5EU19NQVNLKQl8fAorCQkJb3B0LT5maWx0ZXI7CisKKworCWlmIChuZWVkX2dlbmVyaWNfcGF0aHNjYW4pIHsKKwkJLyoKKwkJICogTk9URSBnZW5lcmljIGNhc2UgYWxzbyBoYW5kbGVzIC0tc3RhdCwgYXMgaXQgY29tcHV0ZXMKKwkJICogZGlmZihzaGExLHBhcmVudF9pKSBmb3IgYWxsIGkgdG8gZG8gdGhlIGpvYiwgc3BlY2lmaWNhbGx5CisJCSAqIGZvciBwYXJlbnQwLgorCQkgKi8KKwkJcGF0aHMgPSBmaW5kX3BhdGhzX2dlbmVyaWMob2lkLCBwYXJlbnRzLCAmZGlmZm9wdHMsCisJCQkJCSAgIHJldi0+Y29tYmluZWRfYWxsX3BhdGhzKTsKKwl9CisJZWxzZSB7CisJCWludCBzdGF0X29wdDsKKwkJcGF0aHMgPSBmaW5kX3BhdGhzX211bHRpdHJlZShvaWQsIHBhcmVudHMsICZkaWZmb3B0cyk7CisKKwkJLyoKKwkJICogc2hvdyBzdGF0IGFnYWluc3QgdGhlIGZpcnN0IHBhcmVudCBldmVuCisJCSAqIHdoZW4gZG9pbmcgY29tYmluZWQgZGlmZi4KKwkJICovCisJCXN0YXRfb3B0ID0gb3B0LT5vdXRwdXRfZm9ybWF0ICYgU1RBVF9GT1JNQVRfTUFTSzsKKwkJaWYgKHN0YXRfb3B0KSB7CisJCQlkaWZmb3B0cy5vdXRwdXRfZm9ybWF0ID0gc3RhdF9vcHQ7CisKKwkJCWRpZmZfdHJlZV9vaWQoJnBhcmVudHMtPm9pZFswXSwgb2lkLCAiIiwgJmRpZmZvcHRzKTsKKwkJCWRpZmZjb3JlX3N0ZCgmZGlmZm9wdHMpOworCQkJaWYgKG9wdC0+b3JkZXJmaWxlKQorCQkJCWRpZmZjb3JlX29yZGVyKG9wdC0+b3JkZXJmaWxlKTsKKwkJCWRpZmZfZmx1c2goJmRpZmZvcHRzKTsKKwkJfQorCX0KKworCS8qIGZpbmQgb3V0IG51bWJlciBvZiBzdXJ2aXZpbmcgcGF0aHMgKi8KKwlmb3IgKG51bV9wYXRocyA9IDAsIHAgPSBwYXRoczsgcDsgcCA9IHAtPm5leHQpCisJCW51bV9wYXRocysrOworCisJLyogb3JkZXIgcGF0aHMgYWNjb3JkaW5nIHRvIGRpZmZjb3JlX29yZGVyICovCisJaWYgKG9wdC0+b3JkZXJmaWxlICYmIG51bV9wYXRocykgeworCQlzdHJ1Y3Qgb2JqX29yZGVyICpvOworCisJCUFMTE9DX0FSUkFZKG8sIG51bV9wYXRocyk7CisJCWZvciAoaSA9IDAsIHAgPSBwYXRoczsgcDsgcCA9IHAtPm5leHQsIGkrKykKKwkJCW9baV0ub2JqID0gcDsKKwkJb3JkZXJfb2JqZWN0cyhvcHQtPm9yZGVyZmlsZSwgcGF0aF9wYXRoLCBvLCBudW1fcGF0aHMpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhdGhzIC0gMTsgaSsrKSB7CisJCQlwID0gb1tpXS5vYmo7CisJCQlwLT5uZXh0ID0gb1tpKzFdLm9iajsKKwkJfQorCisJCXAgPSBvW251bV9wYXRocy0xXS5vYmo7CisJCXAtPm5leHQgPSBOVUxMOworCQlwYXRocyA9IG9bMF0ub2JqOworCQlmcmVlKG8pOworCX0KKworCisJaWYgKG51bV9wYXRocykgeworCQlpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX1JBVyB8CisJCQkJCSAgRElGRl9GT1JNQVRfTkFNRSB8CisJCQkJCSAgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVMpKSB7CisJCQlmb3IgKHAgPSBwYXRoczsgcDsgcCA9IHAtPm5leHQpCisJCQkJc2hvd19yYXdfZGlmZihwLCBudW1fcGFyZW50LCByZXYpOworCQkJbmVlZHNlcCA9IDE7CisJCX0KKwkJZWxzZSBpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgU1RBVF9GT1JNQVRfTUFTSykKKwkJCW5lZWRzZXAgPSAxOworCQllbHNlIGlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DQUxMQkFDSykKKwkJCWhhbmRsZV9jb21iaW5lZF9jYWxsYmFjayhvcHQsIHBhdGhzLCBudW1fcGFyZW50LCBudW1fcGF0aHMpOworCisJCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkgeworCQkJaWYgKG5lZWRzZXApCisJCQkJcHJpbnRmKCIlcyVjIiwgZGlmZl9saW5lX3ByZWZpeChvcHQpLAorCQkJCSAgICAgICBvcHQtPmxpbmVfdGVybWluYXRpb24pOworCQkJZm9yIChwID0gcGF0aHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJCXNob3dfcGF0Y2hfZGlmZihwLCBudW1fcGFyZW50LCBkZW5zZSwKKwkJCQkJCTAsIHJldik7CisJCX0KKwl9CisKKwkvKiBDbGVhbiB0aGluZ3MgdXAgKi8KKwl3aGlsZSAocGF0aHMpIHsKKwkJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICp0bXAgPSBwYXRoczsKKwkJcGF0aHMgPSBwYXRocy0+bmV4dDsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykKKwkJCWlmIChyZXYtPmNvbWJpbmVkX2FsbF9wYXRocyAmJgorCQkJICAgIGZpbGVuYW1lX2NoYW5nZWQodG1wLT5wYXJlbnRbaV0uc3RhdHVzKSkKKwkJCQlzdHJidWZfcmVsZWFzZSgmdG1wLT5wYXJlbnRbaV0ucGF0aCk7CisJCWZyZWUodG1wKTsKKwl9CisKKwljbGVhcl9wYXRoc3BlYygmZGlmZm9wdHMucGF0aHNwZWMpOworfQorCit2b2lkIGRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBkZW5zZSwKKwkJCSAgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gZ2V0X3NhdmVkX3BhcmVudHMocmV2LCBjb21taXQpOworCXN0cnVjdCBvaWRfYXJyYXkgcGFyZW50cyA9IE9JRF9BUlJBWV9JTklUOworCisJd2hpbGUgKHBhcmVudCkgeworCQlvaWRfYXJyYXlfYXBwZW5kKCZwYXJlbnRzLCAmcGFyZW50LT5pdGVtLT5vYmplY3Qub2lkKTsKKwkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCX0KKwlkaWZmX3RyZWVfY29tYmluZWQoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgJnBhcmVudHMsIGRlbnNlLCByZXYpOworCW9pZF9hcnJheV9jbGVhcigmcGFyZW50cyk7Cit9CmRpZmYgLS1naXQgYS9jb21tYW5kLWxpc3QudHh0IGIvY29tbWFuZC1saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDg3ODk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbWFuZC1saXN0LnR4dApAQCAtMCwwICsxLDIxMCBAQAorIyBDb21tYW5kIGNsYXNzaWZpY2F0aW9uIGxpc3QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbCBzdXBwb3J0ZWQgY29tbWFuZHMsIGJ1aWx0aW4gb3IgZXh0ZXJuYWwsIG11c3QgYmUgZGVzY3JpYmVkIGluCisjIGhlcmUuIFRoaXMgaW5mbyBpcyB1c2VkIHRvIGxpc3QgY29tbWFuZHMgaW4gdmFyaW91cyBwbGFjZXMuIEVhY2gKKyMgY29tbWFuZCBpcyBvbiBvbmUgbGluZSBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBhdHRyaWJ1dGVzLgorIworIyBUaGUgZmlyc3QgYXR0cmlidXRlIGdyb3VwIGlzIG1hbmRhdG9yeSBhbmQgaW5kaWNhdGVzIHRoZSBjb21tYW5kCisjIHR5cGUuIFRoaXMgZ3JvdXAgaW5jbHVkZXM6CisjCisjICAgbWFpbnBvcmNlbGFpbgorIyAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworIyAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKKyMgICBmb3JlaWduc2NtaW50ZXJmYWNlCisjICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKKyMgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKKyMgICBzeW5jaGluZ3JlcG9zaXRvcmllcworIyAgIHN5bmNoZWxwZXJzCisjICAgcHVyZWhlbHBlcnMKKyMKKyMgVGhlIHR5cGUgbmFtZXMgYXJlIHNlbGYgZXhwbGFuYXRvcnkuIEJ1dCBpZiB5b3Ugd2FudCB0byBzZWUgd2hhdAorIyBjb21tYW5kIGJlbG9uZ3MgdG8gd2hhdCBncm91cCB0byBnZXQgYSBiZXR0ZXIgcGljdHVyZSwgaGF2ZSBhIGxvb2sKKyMgYXQgImdpdCIgbWFuIHBhZ2UsICJHSVQgQ09NTUFORFMiIHNlY3Rpb24uCisjCisjIENvbW1hbmRzIG9mIHR5cGUgbWFpbnBvcmNlbGFpbiBjYW4gYWxzbyBvcHRpb25hbGx5IGhhdmUgb25lIG9mIHRoZXNlCisjIGF0dHJpYnV0ZXM6CisjCisjICAgaW5pdAorIyAgIHdvcmt0cmVlCisjICAgaW5mbworIyAgIGhpc3RvcnkKKyMgICByZW1vdGUKKyMKKyMgVGhlc2UgY29tbWFuZHMgYXJlIGNvbnNpZGVyZWQgImNvbW1vbiIgYW5kIHdpbGwgc2hvdyB1cCBpbiAiZ2l0CisjIGhlbHAiIG91dHB1dCBpbiBncm91cHMuIFVuY29tbW9uIHBvcmNlbGFpbiBjb21tYW5kcyBtdXN0IG5vdAorIyBzcGVjaWZ5IGFueSBvZiB0aGVzZSBhdHRyaWJ1dGVzLgorIworIyAiY29tcGxldGUiIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIG1hcmsgdGhhdCB0aGUgY29tbWFuZCBzaG91bGQgYmUKKyMgY29tcGxldGFibGUgYnkgZ2l0LWNvbXBsZXRpb24uYmFzaC4gTm90ZSB0aGF0IGJ5IGRlZmF1bHQsCisjIG1haW5wb3JjZWxhaW4gY29tbWFuZHMgYXJlIGNvbXBsZXRhYmxlIHNvIHlvdSBkb24ndCBuZWVkIHRoaXMKKyMgYXR0cmlidXRlLgorIworIyBBcyBwYXJ0IG9mIHRoZSBHaXQgbWFuIHBhZ2UgbGlzdCwgdGhlIG1hbig1LzcpIGd1aWRlcyBhcmUgYWxzbworIyBzcGVjaWZpZWQgaGVyZSwgd2hpY2ggY2FuIG9ubHkgaGF2ZSAiZ3VpZGUiIGF0dHJpYnV0ZSBhbmQgbm90aGluZworIyBlbHNlLgorIworIyMjIGNvbW1hbmQgbGlzdCAoZG8gbm90IGNoYW5nZSB0aGlzIGxpbmUsIGFsc28gZG8gbm90IGNoYW5nZSBhbGlnbm1lbnQpCisjIGNvbW1hbmQgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgW2NhdGVnb3J5XSBbY2F0ZWdvcnldCitnaXQtYWRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgd29ya3RyZWUKK2dpdC1hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtYW5ub3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWFwcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzICAgICAgICAgICAgY29tcGxldGUKK2dpdC1hcmNoaW1wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtYXJjaGl2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWJpc2VjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluZm8KK2dpdC1ibGFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzICAgICAgICAgIGNvbXBsZXRlCitnaXQtYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LWJ1bmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jYXQtZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1jaGVjay1hdHRyICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNoZWNrLWlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY2hlY2stbWFpbG1hcCAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jaGVja291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2hlY2tvdXQtaW5kZXggICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1jaGVjay1yZWYtZm9ybWF0ICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNoZXJyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycyAgICAgICAgICBjb21wbGV0ZQorZ2l0LWNoZXJyeS1waWNrICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jaXRvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWNsb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluaXQKK2dpdC1jb2x1bW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNvbW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGhpc3RvcnkKK2dpdC1jb21taXQtZ3JhcGggICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LWNvbW1pdC10cmVlICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzICAgICAgICAgICBjb21wbGV0ZQorZ2l0LWNvdW50LW9iamVjdHMgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1jcmVkZW50aWFsICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNyZWRlbnRpYWwtY2FjaGUgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY3JlZGVudGlhbC1zdG9yZSAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jdnNleHBvcnRjb21taXQgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtY3ZzaW1wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LWN2c3NlcnZlciAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1kYWVtb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LWRlc2NyaWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1kaWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBpbmZvCitnaXQtZGlmZi1maWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZGlmZi1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZGlmZi10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZGlmZnRvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycyAgICAgICAgICBjb21wbGV0ZQorZ2l0LWZhc3QtZXhwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LWZhc3QtaW1wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LWZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHJlbW90ZQorZ2l0LWZldGNoLXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtZmlsdGVyLWJyYW5jaCAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtZm10LW1lcmdlLW1zZyAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1mb3ItZWFjaC1yZWYgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1mb3JtYXQtcGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtZnNjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycyAgICAgICAgICBjb21wbGV0ZQorZ2l0LWdjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1nZXQtdGFyLWNvbW1pdC1pZCAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1ncmVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBpbmZvCitnaXQtZ3VpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWhhc2gtb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtaGVscCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycyAgICAgICAgICBjb21wbGV0ZQorZ2l0LWh0dHAtYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtaHR0cC1mZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1odHRwLXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LWltYXAtc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1pbmRleC1wYWNrICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LWluaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluaXQKK2dpdC1pbnN0YXdlYiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzICAgICAgICAgIGNvbXBsZXRlCitnaXQtaW50ZXJwcmV0LXRyYWlsZXJzICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaW5mbworZ2l0LWxzLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWxzLXJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWxzLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW1haWxpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtbWFpbHNwbGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1tZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBoaXN0b3J5CitnaXQtbWVyZ2UtYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtbWVyZ2UtZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1tZXJnZS1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LW1lcmdlLW9uZS1maWxlICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtbWVyZ2V0b29sICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzICAgICAgICAgICBjb21wbGV0ZQorZ2l0LW1lcmdlLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1tdWx0aS1wYWNrLWluZGV4ICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LW1rdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtbWt0cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1tdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICB3b3JrdHJlZQorZ2l0LW5hbWUtcmV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW5vdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1wNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcGFjay1vYmplY3RzICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1wYWNrLXJlZHVuZGFudCAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1wYWNrLXJlZnMgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1wYXJzZS1yZW1vdGUgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LXBhdGNoLWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtcHJ1bmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcHJ1bmUtcGFja2VkICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1wdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKK2dpdC1wdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKK2dpdC1xdWlsdGltcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcmFuZ2UtZGlmZiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXJlYWQtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtcmViYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXJlY2VpdmUtcGFjayAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtcmVmbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzICAgICAgICAgICBjb21wbGV0ZQorZ2l0LXJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycyAgICAgICAgICAgY29tcGxldGUKK2dpdC1yZXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMgICAgICAgICAgIGNvbXBsZXRlCitnaXQtcmVwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzICAgICAgICAgICBjb21wbGV0ZQorZ2l0LXJlcXVlc3QtcHVsbCAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UgICAgICAgICAgICAgY29tcGxldGUKK2dpdC1yZXJlcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXJlc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHdvcmt0cmVlCitnaXQtcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXJldi1saXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXJldi1wYXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHdvcmt0cmVlCitnaXQtc2VuZC1lbWFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZSAgICAgICAgICAgICBjb21wbGV0ZQorZ2l0LXNlbmQtcGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtc2hlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1zaG9ydGxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtc2hvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaW5mbworZ2l0LXNob3ctYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMgICAgICAgICAgY29tcGxldGUKK2dpdC1zaG93LWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1zaG93LXJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1zaC1pMThuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LXNoLXNldHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtc3BhcnNlLWNoZWNrb3V0ICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgd29ya3RyZWUKK2dpdC1zdGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtc3RhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZQorZ2l0LXN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluZm8KK2dpdC1zdHJpcHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LXN1Ym1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1zdm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtc3dpdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXN5bWJvbGljLXJlZiAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXVucGFjay1maWxlICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXVucGFjay1vYmplY3RzICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtdXBkYXRlLWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC11cGRhdGUtcmVmICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtdXBsb2FkLWFyY2hpdmUgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC11cGxvYWQtcGFjayAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LXZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXZlcmlmeS1jb21taXQgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC12ZXJpZnktcGFjayAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC12ZXJpZnktdGFnICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXR3ZWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXdoYXRjaGFuZ2VkICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMgICAgICAgICAgY29tcGxldGUKK2dpdC13b3JrdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtd3JpdGUtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdGF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0Y2xpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRjb3JlLXR1dG9yaWFsICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdGN2cy1taWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0ZGlmZmNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRldmVyeWRheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdGdsb3NzYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0aG9va3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRpZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdG1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0bmFtZXNwYWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXRyZXBvc2l0b3J5LWxheW91dCAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdHJldmlzaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0c3VibW9kdWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCitnaXR0dXRvcmlhbC0yICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdHR1dG9yaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQorZ2l0d29ya2Zsb3dzICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCmRpZmYgLS1naXQgYS9jb21taXQtZ3JhcGguYyBiL2NvbW1pdC1ncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMTNhODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQtZ3JhcGguYwpAQCAtMCwwICsxLDIxMDMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJyZXBsYWNlLW9iamVjdC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisKKyNkZWZpbmUgR1JBUEhfU0lHTkFUVVJFIDB4NDM0NzUwNDggLyogIkNHUEgiICovCisjZGVmaW5lIEdSQVBIX0NIVU5LSURfT0lERkFOT1VUIDB4NGY0OTQ0NDYgLyogIk9JREYiICovCisjZGVmaW5lIEdSQVBIX0NIVU5LSURfT0lETE9PS1VQIDB4NGY0OTQ0NGMgLyogIk9JREwiICovCisjZGVmaW5lIEdSQVBIX0NIVU5LSURfREFUQSAweDQzNDQ0MTU0IC8qICJDREFUIiAqLworI2RlZmluZSBHUkFQSF9DSFVOS0lEX0VYVFJBRURHRVMgMHg0NTQ0NDc0NSAvKiAiRURHRSIgKi8KKyNkZWZpbmUgR1JBUEhfQ0hVTktJRF9CQVNFIDB4NDI0MTUzNDUgLyogIkJBU0UiICovCisKKyNkZWZpbmUgR1JBUEhfREFUQV9XSURUSCAodGhlX2hhc2hfYWxnby0+cmF3c3ogKyAxNikKKworI2RlZmluZSBHUkFQSF9WRVJTSU9OXzEgMHgxCisjZGVmaW5lIEdSQVBIX1ZFUlNJT04gR1JBUEhfVkVSU0lPTl8xCisKKyNkZWZpbmUgR1JBUEhfRVhUUkFfRURHRVNfTkVFREVEIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1JBUEhfRURHRV9MQVNUX01BU0sgMHg3ZmZmZmZmZgorI2RlZmluZSBHUkFQSF9QQVJFTlRfTk9ORSAweDcwMDAwMDAwCisKKyNkZWZpbmUgR1JBUEhfTEFTVF9FREdFIDB4ODAwMDAwMDAKKworI2RlZmluZSBHUkFQSF9IRUFERVJfU0laRSA4CisjZGVmaW5lIEdSQVBIX0ZBTk9VVF9TSVpFICg0ICogMjU2KQorI2RlZmluZSBHUkFQSF9DSFVOS0xPT0tVUF9XSURUSCAxMgorI2RlZmluZSBHUkFQSF9NSU5fU0laRSAoR1JBUEhfSEVBREVSX1NJWkUgKyA0ICogR1JBUEhfQ0hVTktMT09LVVBfV0lEVEggXAorCQkJKyBHUkFQSF9GQU5PVVRfU0laRSArIHRoZV9oYXNoX2FsZ28tPnJhd3N6KQorCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBSRUFDSEFCTEUgICAgICAgKDF1PDwxNSkKKworY2hhciAqZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiKQoreworCXJldHVybiB4c3RyZm10KCIlcy9pbmZvL2NvbW1pdC1ncmFwaCIsIG9kYi0+cGF0aCk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfc3BsaXRfZ3JhcGhfZmlsZW5hbWUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpvaWRfaGV4KQoreworCXJldHVybiB4c3RyZm10KCIlcy9pbmZvL2NvbW1pdC1ncmFwaHMvZ3JhcGgtJXMuZ3JhcGgiLCBvZGItPnBhdGgsCisJCSAgICAgICBvaWRfaGV4KTsKK30KKworc3RhdGljIGNoYXIgKmdldF9jaGFpbl9maWxlbmFtZShzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiKQoreworCXJldHVybiB4c3RyZm10KCIlcy9pbmZvL2NvbW1pdC1ncmFwaHMvY29tbWl0LWdyYXBoLWNoYWluIiwgb2RiLT5wYXRoKTsKK30KKworc3RhdGljIHVpbnQ4X3Qgb2lkX3ZlcnNpb24odm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfZ3JhcGggKmFsbG9jX2NvbW1pdF9ncmFwaCh2b2lkKQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSB4Y2FsbG9jKDEsIHNpemVvZigqZykpOworCWctPmdyYXBoX2ZkID0gLTE7CisKKwlyZXR1cm4gZzsKK30KKworZXh0ZXJuIGludCByZWFkX3JlcGxhY2VfcmVmczsKKworc3RhdGljIGludCBjb21taXRfZ3JhcGhfY29tcGF0aWJsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlpZiAoIXItPmdpdGRpcikKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVhZF9yZXBsYWNlX3JlZnMpIHsKKwkJcHJlcGFyZV9yZXBsYWNlX29iamVjdChyKTsKKwkJaWYgKGhhc2htYXBfZ2V0X3NpemUoJnItPm9iamVjdHMtPnJlcGxhY2VfbWFwLT5tYXApKQorCQkJcmV0dXJuIDA7CisJfQorCisJcHJlcGFyZV9jb21taXRfZ3JhZnQocik7CisJaWYgKHItPnBhcnNlZF9vYmplY3RzICYmIHItPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNfbnIpCisJCXJldHVybiAwOworCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3cocikpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBvcGVuX2NvbW1pdF9ncmFwaChjb25zdCBjaGFyICpncmFwaF9maWxlLCBpbnQgKmZkLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJKmZkID0gZ2l0X29wZW4oZ3JhcGhfZmlsZSk7CisJaWYgKCpmZCA8IDApCisJCXJldHVybiAwOworCWlmIChmc3RhdCgqZmQsIHN0KSkgeworCQljbG9zZSgqZmQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBjb21taXRfZ3JhcGggKmxvYWRfY29tbWl0X2dyYXBoX29uZV9mZF9zdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzdCwKKwkJCQkJCSBzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiKQoreworCXZvaWQgKmdyYXBoX21hcDsKKwlzaXplX3QgZ3JhcGhfc2l6ZTsKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpyZXQ7CisKKwlncmFwaF9zaXplID0geHNpemVfdChzdC0+c3Rfc2l6ZSk7CisKKwlpZiAoZ3JhcGhfc2l6ZSA8IEdSQVBIX01JTl9TSVpFKSB7CisJCWNsb3NlKGZkKTsKKwkJZXJyb3IoXygiY29tbWl0LWdyYXBoIGZpbGUgaXMgdG9vIHNtYWxsIikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZ3JhcGhfbWFwID0geG1tYXAoTlVMTCwgZ3JhcGhfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCXJldCA9IHBhcnNlX2NvbW1pdF9ncmFwaChncmFwaF9tYXAsIGZkLCBncmFwaF9zaXplKTsKKworCWlmIChyZXQpCisJCXJldC0+b2RiID0gb2RiOworCWVsc2UgeworCQltdW5tYXAoZ3JhcGhfbWFwLCBncmFwaF9zaXplKTsKKwkJY2xvc2UoZmQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2NvbW1pdF9ncmFwaF9saXRlKHN0cnVjdCBjb21taXRfZ3JhcGggKmcpCit7CisJLyoKKwkgKiBCYXNpYyB2YWxpZGF0aW9uIHNoYXJlZCBiZXR3ZWVuIHBhcnNlX2NvbW1pdF9ncmFwaCgpCisJICogd2hpY2gnbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGdyYXBoIGlzIHVzZWQsIGFuZCB0aGUKKwkgKiBtdWNoIG1vcmUgZXhwZW5zaXZlIHZlcmlmeV9jb21taXRfZ3JhcGgoKSB1c2VkIGJ5CisJICogImNvbW1pdC1ncmFwaCB2ZXJpZnkiLgorCSAqCisJICogVGhlcmUgc2hvdWxkIG9ubHkgYmUgdmVyeSBiYXNpYyBjaGVja3MgaGVyZSB0byBlbnN1cmUgdGhhdAorCSAqIHdlIGRvbid0IGUuZy4gc2VnZmF1bHQgaW4gZmlsbF9jb21taXRfaW5fZ3JhcGgoKSwgYnV0CisJICogYmVjYXVzZSB0aGlzIGlzIGEgdmVyeSBob3QgY29kZXBhdGggbm90aGluZyB0aGF0IGUuZy4gbG9vcHMKKwkgKiBvdmVyIGctPm51bV9jb21taXRzLCBvciBydW5zIGEgY2hlY2tzdW0gb24gdGhlIGNvbW1pdC1ncmFwaAorCSAqIGl0c2VsZi4KKwkgKi8KKwlpZiAoIWctPmNodW5rX29pZF9mYW5vdXQpIHsKKwkJZXJyb3IoImNvbW1pdC1ncmFwaCBpcyBtaXNzaW5nIHRoZSBPSUQgRmFub3V0IGNodW5rIik7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWctPmNodW5rX29pZF9sb29rdXApIHsKKwkJZXJyb3IoImNvbW1pdC1ncmFwaCBpcyBtaXNzaW5nIHRoZSBPSUQgTG9va3VwIGNodW5rIik7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWctPmNodW5rX2NvbW1pdF9kYXRhKSB7CisJCWVycm9yKCJjb21taXQtZ3JhcGggaXMgbWlzc2luZyB0aGUgQ29tbWl0IERhdGEgY2h1bmsiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjb21taXRfZ3JhcGggKnBhcnNlX2NvbW1pdF9ncmFwaCh2b2lkICpncmFwaF9tYXAsIGludCBmZCwKKwkJCQkJc2l6ZV90IGdyYXBoX3NpemUpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgKmNodW5rX2xvb2t1cDsKKwl1aW50MzJfdCBpOworCXN0cnVjdCBjb21taXRfZ3JhcGggKmdyYXBoOworCXVpbnQ2NF90IGxhc3RfY2h1bmtfb2Zmc2V0OworCXVpbnQzMl90IGxhc3RfY2h1bmtfaWQ7CisJdWludDMyX3QgZ3JhcGhfc2lnbmF0dXJlOworCXVuc2lnbmVkIGNoYXIgZ3JhcGhfdmVyc2lvbiwgaGFzaF92ZXJzaW9uOworCisJaWYgKCFncmFwaF9tYXApCisJCXJldHVybiBOVUxMOworCisJaWYgKGdyYXBoX3NpemUgPCBHUkFQSF9NSU5fU0laRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkYXRhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilncmFwaF9tYXA7CisKKwlncmFwaF9zaWduYXR1cmUgPSBnZXRfYmUzMihkYXRhKTsKKwlpZiAoZ3JhcGhfc2lnbmF0dXJlICE9IEdSQVBIX1NJR05BVFVSRSkgeworCQllcnJvcihfKCJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIpLAorCQkgICAgICBncmFwaF9zaWduYXR1cmUsIEdSQVBIX1NJR05BVFVSRSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWdyYXBoX3ZlcnNpb24gPSAqKHVuc2lnbmVkIGNoYXIqKShkYXRhICsgNCk7CisJaWYgKGdyYXBoX3ZlcnNpb24gIT0gR1JBUEhfVkVSU0lPTikgeworCQllcnJvcihfKCJjb21taXQtZ3JhcGggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIiksCisJCSAgICAgIGdyYXBoX3ZlcnNpb24sIEdSQVBIX1ZFUlNJT04pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwloYXNoX3ZlcnNpb24gPSAqKHVuc2lnbmVkIGNoYXIqKShkYXRhICsgNSk7CisJaWYgKGhhc2hfdmVyc2lvbiAhPSBvaWRfdmVyc2lvbigpKSB7CisJCWVycm9yKF8oImNvbW1pdC1ncmFwaCBoYXNoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIpLAorCQkgICAgICBoYXNoX3ZlcnNpb24sIG9pZF92ZXJzaW9uKCkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlncmFwaCA9IGFsbG9jX2NvbW1pdF9ncmFwaCgpOworCisJZ3JhcGgtPmhhc2hfbGVuID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJZ3JhcGgtPm51bV9jaHVua3MgPSAqKHVuc2lnbmVkIGNoYXIqKShkYXRhICsgNik7CisJZ3JhcGgtPmdyYXBoX2ZkID0gZmQ7CisJZ3JhcGgtPmRhdGEgPSBncmFwaF9tYXA7CisJZ3JhcGgtPmRhdGFfbGVuID0gZ3JhcGhfc2l6ZTsKKworCWxhc3RfY2h1bmtfaWQgPSAwOworCWxhc3RfY2h1bmtfb2Zmc2V0ID0gODsKKwljaHVua19sb29rdXAgPSBkYXRhICsgODsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jaHVua3M7IGkrKykgeworCQl1aW50MzJfdCBjaHVua19pZDsKKwkJdWludDY0X3QgY2h1bmtfb2Zmc2V0OworCQlpbnQgY2h1bmtfcmVwZWF0ZWQgPSAwOworCisJCWlmIChkYXRhICsgZ3JhcGhfc2l6ZSAtIGNodW5rX2xvb2t1cCA8CisJCSAgICBHUkFQSF9DSFVOS0xPT0tVUF9XSURUSCkgeworCQkJZXJyb3IoXygiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIikpOworCQkJZnJlZShncmFwaCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWNodW5rX2lkID0gZ2V0X2JlMzIoY2h1bmtfbG9va3VwICsgMCk7CisJCWNodW5rX29mZnNldCA9IGdldF9iZTY0KGNodW5rX2xvb2t1cCArIDQpOworCisJCWNodW5rX2xvb2t1cCArPSBHUkFQSF9DSFVOS0xPT0tVUF9XSURUSDsKKworCQlpZiAoY2h1bmtfb2Zmc2V0ID4gZ3JhcGhfc2l6ZSAtIHRoZV9oYXNoX2FsZ28tPnJhd3N6KSB7CisJCQllcnJvcihfKCJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IiksICh1aW50MzJfdCkoY2h1bmtfb2Zmc2V0ID4+IDMyKSwKKwkJCSAgICAgICh1aW50MzJfdCljaHVua19vZmZzZXQpOworCQkJZnJlZShncmFwaCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXN3aXRjaCAoY2h1bmtfaWQpIHsKKwkJY2FzZSBHUkFQSF9DSFVOS0lEX09JREZBTk9VVDoKKwkJCWlmIChncmFwaC0+Y2h1bmtfb2lkX2Zhbm91dCkKKwkJCQljaHVua19yZXBlYXRlZCA9IDE7CisJCQllbHNlCisJCQkJZ3JhcGgtPmNodW5rX29pZF9mYW5vdXQgPSAodWludDMyX3QqKShkYXRhICsgY2h1bmtfb2Zmc2V0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1JBUEhfQ0hVTktJRF9PSURMT09LVVA6CisJCQlpZiAoZ3JhcGgtPmNodW5rX29pZF9sb29rdXApCisJCQkJY2h1bmtfcmVwZWF0ZWQgPSAxOworCQkJZWxzZQorCQkJCWdyYXBoLT5jaHVua19vaWRfbG9va3VwID0gZGF0YSArIGNodW5rX29mZnNldDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1JBUEhfQ0hVTktJRF9EQVRBOgorCQkJaWYgKGdyYXBoLT5jaHVua19jb21taXRfZGF0YSkKKwkJCQljaHVua19yZXBlYXRlZCA9IDE7CisJCQllbHNlCisJCQkJZ3JhcGgtPmNodW5rX2NvbW1pdF9kYXRhID0gZGF0YSArIGNodW5rX29mZnNldDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1JBUEhfQ0hVTktJRF9FWFRSQUVER0VTOgorCQkJaWYgKGdyYXBoLT5jaHVua19leHRyYV9lZGdlcykKKwkJCQljaHVua19yZXBlYXRlZCA9IDE7CisJCQllbHNlCisJCQkJZ3JhcGgtPmNodW5rX2V4dHJhX2VkZ2VzID0gZGF0YSArIGNodW5rX29mZnNldDsKKwkJCWJyZWFrOworCisJCWNhc2UgR1JBUEhfQ0hVTktJRF9CQVNFOgorCQkJaWYgKGdyYXBoLT5jaHVua19iYXNlX2dyYXBocykKKwkJCQljaHVua19yZXBlYXRlZCA9IDE7CisJCQllbHNlCisJCQkJZ3JhcGgtPmNodW5rX2Jhc2VfZ3JhcGhzID0gZGF0YSArIGNodW5rX29mZnNldDsKKwkJfQorCisJCWlmIChjaHVua19yZXBlYXRlZCkgeworCQkJZXJyb3IoXygiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIpLCBjaHVua19pZCk7CisJCQlmcmVlKGdyYXBoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKGxhc3RfY2h1bmtfaWQgPT0gR1JBUEhfQ0hVTktJRF9PSURMT09LVVApCisJCXsKKwkJCWdyYXBoLT5udW1fY29tbWl0cyA9IChjaHVua19vZmZzZXQgLSBsYXN0X2NodW5rX29mZnNldCkKKwkJCQkJICAgICAvIGdyYXBoLT5oYXNoX2xlbjsKKwkJfQorCisJCWxhc3RfY2h1bmtfaWQgPSBjaHVua19pZDsKKwkJbGFzdF9jaHVua19vZmZzZXQgPSBjaHVua19vZmZzZXQ7CisJfQorCisJaGFzaGNweShncmFwaC0+b2lkLmhhc2gsIGdyYXBoLT5kYXRhICsgZ3JhcGgtPmRhdGFfbGVuIC0gZ3JhcGgtPmhhc2hfbGVuKTsKKworCWlmICh2ZXJpZnlfY29tbWl0X2dyYXBoX2xpdGUoZ3JhcGgpKSB7CisJCWZyZWUoZ3JhcGgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gZ3JhcGg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2dyYXBoICpsb2FkX2NvbW1pdF9ncmFwaF9vbmUoY29uc3QgY2hhciAqZ3JhcGhfZmlsZSwKKwkJCQkJCSAgc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYikKK3sKKworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnOworCWludCBvcGVuX29rID0gb3Blbl9jb21taXRfZ3JhcGgoZ3JhcGhfZmlsZSwgJmZkLCAmc3QpOworCisJaWYgKCFvcGVuX29rKQorCQlyZXR1cm4gTlVMTDsKKworCWcgPSBsb2FkX2NvbW1pdF9ncmFwaF9vbmVfZmRfc3QoZmQsICZzdCwgb2RiKTsKKworCWlmIChnKQorCQlnLT5maWxlbmFtZSA9IHhzdHJkdXAoZ3JhcGhfZmlsZSk7CisKKwlyZXR1cm4gZzsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfZ3JhcGggKmxvYWRfY29tbWl0X2dyYXBoX3YxKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJIHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIpCit7CisJY2hhciAqZ3JhcGhfbmFtZSA9IGdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUob2RiKTsKKwlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnID0gbG9hZF9jb21taXRfZ3JhcGhfb25lKGdyYXBoX25hbWUsIG9kYik7CisJZnJlZShncmFwaF9uYW1lKTsKKworCXJldHVybiBnOworfQorCitzdGF0aWMgaW50IGFkZF9ncmFwaF90b19jaGFpbihzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLAorCQkJICAgICAgc3RydWN0IGNvbW1pdF9ncmFwaCAqY2hhaW4sCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRzLAorCQkJICAgICAgaW50IG4pCit7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqY3VyX2cgPSBjaGFpbjsKKworCWlmIChuICYmICFnLT5jaHVua19iYXNlX2dyYXBocykgeworCQl3YXJuaW5nKF8oImNvbW1pdC1ncmFwaCBoYXMgbm8gYmFzZSBncmFwaHMgY2h1bmsiKSk7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlIChuKSB7CisJCW4tLTsKKworCQlpZiAoIWN1cl9nIHx8CisJCSAgICAhb2lkZXEoJm9pZHNbbl0sICZjdXJfZy0+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+Y2h1bmtfY29tbWl0X2RhdGEgKworCQkJR1JBUEhfREFUQV9XSURUSCAqIChjLT5ncmFwaF9wb3MgLSBnLT5udW1fY29tbWl0c19pbl9iYXNlKTsKKworCWhhc2hjcHkob2lkLmhhc2gsIGNvbW1pdF9kYXRhKTsKKwlzZXRfY29tbWl0X3RyZWUoYywgbG9va3VwX3RyZWUociwgJm9pZCkpOworCisJcmV0dXJuIGMtPm1heWJlX3RyZWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJlZSAqZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoX29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCSBzdHJ1Y3QgY29tbWl0X2dyYXBoICpnLAorCQkJCQkJIGNvbnN0IHN0cnVjdCBjb21taXQgKmMpCit7CisJaWYgKGMtPm1heWJlX3RyZWUpCisJCXJldHVybiBjLT5tYXliZV90cmVlOworCWlmIChjLT5ncmFwaF9wb3MgPT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIKQorCQlCVUcoImdldF9jb21taXRfdHJlZV9pbl9ncmFwaF9vbmUgY2FsbGVkIGZyb20gbm9uLWNvbW1pdC1ncmFwaCBjb21taXQiKTsKKworCXJldHVybiBsb2FkX3RyZWVfZm9yX2NvbW1pdChyLCBnLCAoc3RydWN0IGNvbW1pdCAqKWMpOworfQorCitzdHJ1Y3QgdHJlZSAqZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjKQoreworCXJldHVybiBnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGhfb25lKHIsIHItPm9iamVjdHMtPmNvbW1pdF9ncmFwaCwgYyk7Cit9CisKK3N0cnVjdCBwYWNrZWRfY29tbWl0X2xpc3QgeworCXN0cnVjdCBjb21taXQgKipsaXN0OworCWludCBucjsKKwlpbnQgYWxsb2M7Cit9OworCitzdHJ1Y3QgcGFja2VkX29pZF9saXN0IHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpsaXN0OworCWludCBucjsKKwlpbnQgYWxsb2M7Cit9OworCitzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyOworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisJY2hhciAqZ3JhcGhfbmFtZTsKKwlzdHJ1Y3QgcGFja2VkX29pZF9saXN0IG9pZHM7CisJc3RydWN0IHBhY2tlZF9jb21taXRfbGlzdCBjb21taXRzOworCWludCBudW1fZXh0cmFfZWRnZXM7CisJdW5zaWduZWQgbG9uZyBhcHByb3hfbnJfb2JqZWN0czsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCWludCBwcm9ncmVzc19kb25lOworCXVpbnQ2NF90IHByb2dyZXNzX2NudDsKKworCWNoYXIgKmJhc2VfZ3JhcGhfbmFtZTsKKwlpbnQgbnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlOworCWludCBudW1fY29tbWl0X2dyYXBoc19hZnRlcjsKKwljaGFyICoqY29tbWl0X2dyYXBoX2ZpbGVuYW1lc19iZWZvcmU7CisJY2hhciAqKmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXI7CisJY2hhciAqKmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyOworCXVpbnQzMl90IG5ld19udW1fY29tbWl0c19pbl9iYXNlOworCXN0cnVjdCBjb21taXRfZ3JhcGggKm5ld19iYXNlX2dyYXBoOworCisJdW5zaWduZWQgYXBwZW5kOjEsCisJCSByZXBvcnRfcHJvZ3Jlc3M6MSwKKwkJIHNwbGl0OjEsCisJCSBjaGVja19vaWRzOjE7CisKKwljb25zdCBzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgKnNwbGl0X29wdHM7Cit9OworCitzdGF0aWMgdm9pZCB3cml0ZV9ncmFwaF9jaHVua19mYW5vdXQoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCSAgICAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJaW50IGksIGNvdW50ID0gMDsKKwlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IGN0eC0+Y29tbWl0cy5saXN0OworCisJLyoKKwkgKiBXcml0ZSB0aGUgZmlyc3QtbGV2ZWwgdGFibGUgKHRoZSBsaXN0IGlzIHNvcnRlZCwKKwkgKiBidXQgd2UgdXNlIGEgMjU2LWVudHJ5IGxvb2t1cCB0byBiZSBhYmxlIHRvIGF2b2lkCisJICogaGF2aW5nIHRvIGRvIGVpZ2h0IGV4dHJhIGJpbmFyeSBzZWFyY2ggaXRlcmF0aW9ucykuCisJICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXdoaWxlIChjb3VudCA8IGN0eC0+Y29tbWl0cy5ucikgeworCQkJaWYgKCgqbGlzdCktPm9iamVjdC5vaWQuaGFzaFswXSAhPSBpKQorCQkJCWJyZWFrOworCQkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCArK2N0eC0+cHJvZ3Jlc3NfY250KTsKKwkJCWNvdW50Kys7CisJCQlsaXN0Kys7CisJCX0KKworCQloYXNod3JpdGVfYmUzMihmLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZV9ncmFwaF9jaHVua19vaWRzKHN0cnVjdCBoYXNoZmlsZSAqZiwgaW50IGhhc2hfbGVuLAorCQkJCSAgIHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBjb21taXQgKipsaXN0ID0gY3R4LT5jb21taXRzLmxpc3Q7CisJaW50IGNvdW50OworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGN0eC0+Y29tbWl0cy5ucjsgY291bnQrKywgbGlzdCsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CisJCWhhc2h3cml0ZShmLCAoKmxpc3QpLT5vYmplY3Qub2lkLmhhc2gsIChpbnQpaGFzaF9sZW4pOworCX0KK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF90b19zaGExKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IGNvbW1pdCAqKmNvbW1pdHMgPSB0YWJsZTsKKwlyZXR1cm4gY29tbWl0c1tpbmRleF0tPm9iamVjdC5vaWQuaGFzaDsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZ3JhcGhfY2h1bmtfZGF0YShzdHJ1Y3QgaGFzaGZpbGUgKmYsIGludCBoYXNoX2xlbiwKKwkJCQkgICBzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IGN0eC0+Y29tbWl0cy5saXN0OworCXN0cnVjdCBjb21taXQgKipsYXN0ID0gY3R4LT5jb21taXRzLmxpc3QgKyBjdHgtPmNvbW1pdHMubnI7CisJdWludDMyX3QgbnVtX2V4dHJhX2VkZ2VzID0gMDsKKworCXdoaWxlIChsaXN0IDwgbGFzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKwkJc3RydWN0IG9iamVjdF9pZCAqdHJlZTsKKwkJaW50IGVkZ2VfdmFsdWU7CisJCXVpbnQzMl90IHBhY2tlZERhdGVbMl07CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CisKKwkJaWYgKHBhcnNlX2NvbW1pdF9ub19ncmFwaCgqbGlzdCkpCisJCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIpLAorCQkJCW9pZF90b19oZXgoJigqbGlzdCktPm9iamVjdC5vaWQpKTsKKwkJdHJlZSA9IGdldF9jb21taXRfdHJlZV9vaWQoKmxpc3QpOworCQloYXNod3JpdGUoZiwgdHJlZS0+aGFzaCwgaGFzaF9sZW4pOworCisJCXBhcmVudCA9ICgqbGlzdCktPnBhcmVudHM7CisKKwkJaWYgKCFwYXJlbnQpCisJCQllZGdlX3ZhbHVlID0gR1JBUEhfUEFSRU5UX05PTkU7CisJCWVsc2UgeworCQkJZWRnZV92YWx1ZSA9IHNoYTFfcG9zKHBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZC5oYXNoLAorCQkJCQkgICAgICBjdHgtPmNvbW1pdHMubGlzdCwKKwkJCQkJICAgICAgY3R4LT5jb21taXRzLm5yLAorCQkJCQkgICAgICBjb21taXRfdG9fc2hhMSk7CisKKwkJCWlmIChlZGdlX3ZhbHVlID49IDApCisJCQkJZWRnZV92YWx1ZSArPSBjdHgtPm5ld19udW1fY29tbWl0c19pbl9iYXNlOworCQkJZWxzZSB7CisJCQkJdWludDMyX3QgcG9zOworCQkJCWlmIChmaW5kX2NvbW1pdF9pbl9ncmFwaChwYXJlbnQtPml0ZW0sCisJCQkJCQkJIGN0eC0+bmV3X2Jhc2VfZ3JhcGgsCisJCQkJCQkJICZwb3MpKQorCQkJCQllZGdlX3ZhbHVlID0gcG9zOworCQkJfQorCisJCQlpZiAoZWRnZV92YWx1ZSA8IDApCisJCQkJQlVHKCJtaXNzaW5nIHBhcmVudCAlcyBmb3IgY29tbWl0ICVzIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmcGFyZW50LT5pdGVtLT5vYmplY3Qub2lkKSwKKwkJCQkgICAgb2lkX3RvX2hleCgmKCpsaXN0KS0+b2JqZWN0Lm9pZCkpOworCQl9CisKKwkJaGFzaHdyaXRlX2JlMzIoZiwgZWRnZV92YWx1ZSk7CisKKwkJaWYgKHBhcmVudCkKKwkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKworCQlpZiAoIXBhcmVudCkKKwkJCWVkZ2VfdmFsdWUgPSBHUkFQSF9QQVJFTlRfTk9ORTsKKwkJZWxzZSBpZiAocGFyZW50LT5uZXh0KQorCQkJZWRnZV92YWx1ZSA9IEdSQVBIX0VYVFJBX0VER0VTX05FRURFRCB8IG51bV9leHRyYV9lZGdlczsKKwkJZWxzZSB7CisJCQllZGdlX3ZhbHVlID0gc2hhMV9wb3MocGFyZW50LT5pdGVtLT5vYmplY3Qub2lkLmhhc2gsCisJCQkJCSAgICAgIGN0eC0+Y29tbWl0cy5saXN0LAorCQkJCQkgICAgICBjdHgtPmNvbW1pdHMubnIsCisJCQkJCSAgICAgIGNvbW1pdF90b19zaGExKTsKKworCQkJaWYgKGVkZ2VfdmFsdWUgPj0gMCkKKwkJCQllZGdlX3ZhbHVlICs9IGN0eC0+bmV3X251bV9jb21taXRzX2luX2Jhc2U7CisJCQllbHNlIHsKKwkJCQl1aW50MzJfdCBwb3M7CisJCQkJaWYgKGZpbmRfY29tbWl0X2luX2dyYXBoKHBhcmVudC0+aXRlbSwKKwkJCQkJCQkgY3R4LT5uZXdfYmFzZV9ncmFwaCwKKwkJCQkJCQkgJnBvcykpCisJCQkJCWVkZ2VfdmFsdWUgPSBwb3M7CisJCQl9CisKKwkJCWlmIChlZGdlX3ZhbHVlIDwgMCkKKwkJCQlCVUcoIm1pc3NpbmcgcGFyZW50ICVzIGZvciBjb21taXQgJXMiLAorCQkJCSAgICBvaWRfdG9faGV4KCZwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQpLAorCQkJCSAgICBvaWRfdG9faGV4KCYoKmxpc3QpLT5vYmplY3Qub2lkKSk7CisJCX0KKworCQloYXNod3JpdGVfYmUzMihmLCBlZGdlX3ZhbHVlKTsKKworCQlpZiAoZWRnZV92YWx1ZSAmIEdSQVBIX0VYVFJBX0VER0VTX05FRURFRCkgeworCQkJZG8geworCQkJCW51bV9leHRyYV9lZGdlcysrOworCQkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwkJCX0gd2hpbGUgKHBhcmVudCk7CisJCX0KKworCQlpZiAoc2l6ZW9mKCgqbGlzdCktPmRhdGUpID4gNCkKKwkJCXBhY2tlZERhdGVbMF0gPSBodG9ubCgoKCpsaXN0KS0+ZGF0ZSA+PiAzMikgJiAweDMpOworCQllbHNlCisJCQlwYWNrZWREYXRlWzBdID0gMDsKKworCQlwYWNrZWREYXRlWzBdIHw9IGh0b25sKCgqbGlzdCktPmdlbmVyYXRpb24gPDwgMik7CisKKwkJcGFja2VkRGF0ZVsxXSA9IGh0b25sKCgqbGlzdCktPmRhdGUpOworCQloYXNod3JpdGUoZiwgcGFja2VkRGF0ZSwgOCk7CisKKwkJbGlzdCsrOworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfZ3JhcGhfY2h1bmtfZXh0cmFfZWRnZXMoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCQkgIHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBjb21taXQgKipsaXN0ID0gY3R4LT5jb21taXRzLmxpc3Q7CisJc3RydWN0IGNvbW1pdCAqKmxhc3QgPSBjdHgtPmNvbW1pdHMubGlzdCArIGN0eC0+Y29tbWl0cy5ucjsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKworCXdoaWxlIChsaXN0IDwgbGFzdCkgeworCQlpbnQgbnVtX3BhcmVudHMgPSAwOworCisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgKytjdHgtPnByb2dyZXNzX2NudCk7CisKKwkJZm9yIChwYXJlbnQgPSAoKmxpc3QpLT5wYXJlbnRzOyBudW1fcGFyZW50cyA8IDMgJiYgcGFyZW50OworCQkgICAgIHBhcmVudCA9IHBhcmVudC0+bmV4dCkKKwkJCW51bV9wYXJlbnRzKys7CisKKwkJaWYgKG51bV9wYXJlbnRzIDw9IDIpIHsKKwkJCWxpc3QrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2luY2UgbnVtX3BhcmVudHMgPiAyLCB0aGlzIGluaXRpYWxpemVyIGlzIHNhZmUuICovCisJCWZvciAocGFyZW50ID0gKCpsaXN0KS0+cGFyZW50cy0+bmV4dDsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpIHsKKwkJCWludCBlZGdlX3ZhbHVlID0gc2hhMV9wb3MocGFyZW50LT5pdGVtLT5vYmplY3Qub2lkLmhhc2gsCisJCQkJCQkgIGN0eC0+Y29tbWl0cy5saXN0LAorCQkJCQkJICBjdHgtPmNvbW1pdHMubnIsCisJCQkJCQkgIGNvbW1pdF90b19zaGExKTsKKworCQkJaWYgKGVkZ2VfdmFsdWUgPj0gMCkKKwkJCQllZGdlX3ZhbHVlICs9IGN0eC0+bmV3X251bV9jb21taXRzX2luX2Jhc2U7CisJCQllbHNlIHsKKwkJCQl1aW50MzJfdCBwb3M7CisJCQkJaWYgKGZpbmRfY29tbWl0X2luX2dyYXBoKHBhcmVudC0+aXRlbSwKKwkJCQkJCQkgY3R4LT5uZXdfYmFzZV9ncmFwaCwKKwkJCQkJCQkgJnBvcykpCisJCQkJCWVkZ2VfdmFsdWUgPSBwb3M7CisJCQl9CisKKwkJCWlmIChlZGdlX3ZhbHVlIDwgMCkKKwkJCQlCVUcoIm1pc3NpbmcgcGFyZW50ICVzIGZvciBjb21taXQgJXMiLAorCQkJCSAgICBvaWRfdG9faGV4KCZwYXJlbnQtPml0ZW0tPm9iamVjdC5vaWQpLAorCQkJCSAgICBvaWRfdG9faGV4KCYoKmxpc3QpLT5vYmplY3Qub2lkKSk7CisJCQllbHNlIGlmICghcGFyZW50LT5uZXh0KQorCQkJCWVkZ2VfdmFsdWUgfD0gR1JBUEhfTEFTVF9FREdFOworCisJCQloYXNod3JpdGVfYmUzMihmLCBlZGdlX3ZhbHVlKTsKKwkJfQorCisJCWxpc3QrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgb2lkX2NvbXBhcmUoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmEgPSAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKV9hOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmIgPSAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKV9iOworCXJldHVybiBvaWRjbXAoYSwgYik7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BhY2tlZF9jb21taXRzKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrLAorCQkJICAgICAgdWludDMyX3QgcG9zLAorCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCA9IChzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQqKWRhdGE7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCW9mZl90IG9mZnNldCA9IG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChwYWNrLCBwb3MpOworCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IE9CSkVDVF9JTkZPX0lOSVQ7CisKKwlpZiAoY3R4LT5wcm9ncmVzcykKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCArK2N0eC0+cHJvZ3Jlc3NfZG9uZSk7CisKKwlvaS50eXBlcCA9ICZ0eXBlOworCWlmIChwYWNrZWRfb2JqZWN0X2luZm8oY3R4LT5yLCBwYWNrLCBvZmZzZXQsICZvaSkgPCAwKQorCQlkaWUoXygidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCisJaWYgKHR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDA7CisKKwlBTExPQ19HUk9XKGN0eC0+b2lkcy5saXN0LCBjdHgtPm9pZHMubnIgKyAxLCBjdHgtPm9pZHMuYWxsb2MpOworCW9pZGNweSgmKGN0eC0+b2lkcy5saXN0W2N0eC0+b2lkcy5ucl0pLCBvaWQpOworCWN0eC0+b2lkcy5ucisrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9taXNzaW5nX3BhcmVudHMoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKwlmb3IgKHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpIHsKKwkJaWYgKCEocGFyZW50LT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpKSB7CisJCQlBTExPQ19HUk9XKGN0eC0+b2lkcy5saXN0LCBjdHgtPm9pZHMubnIgKyAxLCBjdHgtPm9pZHMuYWxsb2MpOworCQkJb2lkY3B5KCZjdHgtPm9pZHMubGlzdFtjdHgtPm9pZHMubnJdLCAmKHBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZCkpOworCQkJY3R4LT5vaWRzLm5yKys7CisJCQlwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBSRUFDSEFCTEU7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX3JlYWNoYWJsZShzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlfKCJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIiksCisJCQkJCWN0eC0+b2lkcy5ucik7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+b2lkcy5ucjsgaSsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgaSArIDEpOworCQljb21taXQgPSBsb29rdXBfY29tbWl0KGN0eC0+ciwgJmN0eC0+b2lkcy5saXN0W2ldKTsKKwkJaWYgKGNvbW1pdCkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFJFQUNIQUJMRTsKKwl9CisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7CisKKwkvKgorCSAqIEFzIHRoaXMgbG9vcCBydW5zLCBjdHgtPm9pZHMubnIgbWF5IGdyb3csIGJ1dCBub3QgbW9yZQorCSAqIHRoYW4gdGhlIG51bWJlciBvZiBtaXNzaW5nIGNvbW1pdHMgaW4gdGhlIHJlYWNoYWJsZQorCSAqIGNsb3N1cmUuCisJICovCisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKQorCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKKwkJCQkJXygiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIpLAorCQkJCQkwKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5vaWRzLm5yOyBpKyspIHsKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpICsgMSk7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXQoY3R4LT5yLCAmY3R4LT5vaWRzLmxpc3RbaV0pOworCisJCWlmICghY29tbWl0KQorCQkJY29udGludWU7CisJCWlmIChjdHgtPnNwbGl0KSB7CisJCQlpZiAoIXBhcnNlX2NvbW1pdChjb21taXQpICYmCisJCQkgICAgY29tbWl0LT5ncmFwaF9wb3MgPT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIKQorCQkJCWFkZF9taXNzaW5nX3BhcmVudHMoY3R4LCBjb21taXQpOworCQl9IGVsc2UgaWYgKCFwYXJzZV9jb21taXRfbm9fZ3JhcGgoY29tbWl0KSkKKwkJCWFkZF9taXNzaW5nX3BhcmVudHMoY3R4LCBjb21taXQpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKKworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQkJCV8oIkNsZWFyaW5nIGNvbW1pdCBtYXJrcyBpbiBjb21taXQgZ3JhcGgiKSwKKwkJCQkJY3R4LT5vaWRzLm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5vaWRzLm5yOyBpKyspIHsKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpICsgMSk7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXQoY3R4LT5yLCAmY3R4LT5vaWRzLmxpc3RbaV0pOworCisJCWlmIChjb21taXQpCisJCQljb21taXQtPm9iamVjdC5mbGFncyAmPSB+UkVBQ0hBQkxFOworCX0KKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZV9nZW5lcmF0aW9uX251bWJlcnMoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJaW50IGk7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKKworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQkJCV8oIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIiksCisJCQkJCWN0eC0+Y29tbWl0cy5ucik7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+Y29tbWl0cy5ucjsgaSsrKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgaSArIDEpOworCQlpZiAoY3R4LT5jb21taXRzLmxpc3RbaV0tPmdlbmVyYXRpb24gIT0gR0VORVJBVElPTl9OVU1CRVJfSU5GSU5JVFkgJiYKKwkJICAgIGN0eC0+Y29tbWl0cy5saXN0W2ldLT5nZW5lcmF0aW9uICE9IEdFTkVSQVRJT05fTlVNQkVSX1pFUk8pCisJCQljb250aW51ZTsKKworCQljb21taXRfbGlzdF9pbnNlcnQoY3R4LT5jb21taXRzLmxpc3RbaV0sICZsaXN0KTsKKwkJd2hpbGUgKGxpc3QpIHsKKwkJCXN0cnVjdCBjb21taXQgKmN1cnJlbnQgPSBsaXN0LT5pdGVtOworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisJCQlpbnQgYWxsX3BhcmVudHNfY29tcHV0ZWQgPSAxOworCQkJdWludDMyX3QgbWF4X2dlbmVyYXRpb24gPSAwOworCisJCQlmb3IgKHBhcmVudCA9IGN1cnJlbnQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CisJCQkJaWYgKHBhcmVudC0+aXRlbS0+Z2VuZXJhdGlvbiA9PSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWSB8fAorCQkJCSAgICBwYXJlbnQtPml0ZW0tPmdlbmVyYXRpb24gPT0gR0VORVJBVElPTl9OVU1CRVJfWkVSTykgeworCQkJCQlhbGxfcGFyZW50c19jb21wdXRlZCA9IDA7CisJCQkJCWNvbW1pdF9saXN0X2luc2VydChwYXJlbnQtPml0ZW0sICZsaXN0KTsKKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIGlmIChwYXJlbnQtPml0ZW0tPmdlbmVyYXRpb24gPiBtYXhfZ2VuZXJhdGlvbikgeworCQkJCQltYXhfZ2VuZXJhdGlvbiA9IHBhcmVudC0+aXRlbS0+Z2VuZXJhdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhbGxfcGFyZW50c19jb21wdXRlZCkgeworCQkJCWN1cnJlbnQtPmdlbmVyYXRpb24gPSBtYXhfZ2VuZXJhdGlvbiArIDE7CisJCQkJcG9wX2NvbW1pdCgmbGlzdCk7CisKKwkJCQlpZiAoY3VycmVudC0+Z2VuZXJhdGlvbiA+IEdFTkVSQVRJT05fTlVNQkVSX01BWCkKKwkJCQkJY3VycmVudC0+Z2VuZXJhdGlvbiA9IEdFTkVSQVRJT05fTlVNQkVSX01BWDsKKwkJCX0KKwkJfQorCX0KKwlzdG9wX3Byb2dyZXNzKCZjdHgtPnByb2dyZXNzKTsKK30KKworc3RhdGljIGludCBhZGRfcmVmX3RvX2xpc3QoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSAoc3RydWN0IHN0cmluZ19saXN0ICopY2JfZGF0YTsKKworCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBvaWRfdG9faGV4KG9pZCkpOworCXJldHVybiAwOworfQorCitpbnQgd3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZShzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLAorCQkJCSBlbnVtIGNvbW1pdF9ncmFwaF93cml0ZV9mbGFncyBmbGFncywKKwkJCQkgY29uc3Qgc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzICpzcGxpdF9vcHRzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IHJlc3VsdDsKKworCWZvcl9lYWNoX3JlZihhZGRfcmVmX3RvX2xpc3QsICZsaXN0KTsKKwlyZXN1bHQgPSB3cml0ZV9jb21taXRfZ3JhcGgob2RiLCBOVUxMLCAmbGlzdCwKKwkJCQkgICAgZmxhZ3MsIHNwbGl0X29wdHMpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9vaWRzX2Zyb21fcGFja3Moc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgsCisJCQkJc3RydWN0IHN0cmluZ19saXN0ICpwYWNrX2luZGV4ZXMpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgc3RyYnVmIHByb2dyZXNzX3RpdGxlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBwYWNrbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBkaXJsZW47CisKKwlzdHJidWZfYWRkZigmcGFja25hbWUsICIlcy9wYWNrLyIsIGN0eC0+b2RiLT5wYXRoKTsKKwlkaXJsZW4gPSBwYWNrbmFtZS5sZW47CisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKSB7CisJCXN0cmJ1Zl9hZGRmKCZwcm9ncmVzc190aXRsZSwKKwkJCSAgICBRXygiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIsCisJCQkgICAgICAgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIiwKKwkJCSAgICAgICBwYWNrX2luZGV4ZXMtPm5yKSwKKwkJCSAgICBwYWNrX2luZGV4ZXMtPm5yKTsKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MocHJvZ3Jlc3NfdGl0bGUuYnVmLCAwKTsKKwkJY3R4LT5wcm9ncmVzc19kb25lID0gMDsKKwl9CisJZm9yIChpID0gMDsgaSA8IHBhY2tfaW5kZXhlcy0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwkJc3RyYnVmX3NldGxlbigmcGFja25hbWUsIGRpcmxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJnBhY2tuYW1lLCBwYWNrX2luZGV4ZXMtPml0ZW1zW2ldLnN0cmluZyk7CisJCXAgPSBhZGRfcGFja2VkX2dpdChwYWNrbmFtZS5idWYsIHBhY2tuYW1lLmxlbiwgMSk7CisJCWlmICghcCkgeworCQkJZXJyb3IoXygiZXJyb3IgYWRkaW5nIHBhY2sgJXMiKSwgcGFja25hbWUuYnVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKSB7CisJCQllcnJvcihfKCJlcnJvciBvcGVuaW5nIGluZGV4IGZvciAlcyIpLCBwYWNrbmFtZS5idWYpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWZvcl9lYWNoX29iamVjdF9pbl9wYWNrKHAsIGFkZF9wYWNrZWRfY29tbWl0cywgY3R4LAorCQkJCQlGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUik7CisJCWNsb3NlX3BhY2socCk7CisJCWZyZWUocCk7CisJfQorCisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7CisJc3RyYnVmX3JlbGVhc2UoJnByb2dyZXNzX3RpdGxlKTsKKwlzdHJidWZfcmVsZWFzZSgmcGFja25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9vaWRzX2Zyb21fY29tbWl0X2hleChzdHJ1Y3Qgd3JpdGVfY29tbWl0X2dyYXBoX2NvbnRleHQgKmN0eCwKKwkJCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqY29tbWl0X2hleCkKK3sKKwl1aW50MzJfdCBpOworCXN0cnVjdCBzdHJidWYgcHJvZ3Jlc3NfdGl0bGUgPSBTVFJCVUZfSU5JVDsKKworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykgeworCQlzdHJidWZfYWRkZigmcHJvZ3Jlc3NfdGl0bGUsCisJCQkgICAgUV8oIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIiwKKwkJCSAgICAgICAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWZzIiwKKwkJCSAgICAgICBjb21taXRfaGV4LT5uciksCisJCQkgICAgY29tbWl0X2hleC0+bnIpOworCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKKwkJCQkJcHJvZ3Jlc3NfdGl0bGUuYnVmLAorCQkJCQljb21taXRfaGV4LT5ucik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBjb21taXRfaGV4LT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmVuZDsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBjb21taXQgKnJlc3VsdDsKKworCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkgKyAxKTsKKwkJaWYgKCFwYXJzZV9vaWRfaGV4KGNvbW1pdF9oZXgtPml0ZW1zW2ldLnN0cmluZywgJm9pZCwgJmVuZCkgJiYKKwkJICAgIChyZXN1bHQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoY3R4LT5yLCAmb2lkLCAxKSkpIHsKKwkJCUFMTE9DX0dST1coY3R4LT5vaWRzLmxpc3QsIGN0eC0+b2lkcy5uciArIDEsIGN0eC0+b2lkcy5hbGxvYyk7CisJCQlvaWRjcHkoJmN0eC0+b2lkcy5saXN0W2N0eC0+b2lkcy5ucl0sICYocmVzdWx0LT5vYmplY3Qub2lkKSk7CisJCQljdHgtPm9pZHMubnIrKzsKKwkJfSBlbHNlIGlmIChjdHgtPmNoZWNrX29pZHMpIHsKKwkJCWVycm9yKF8oImludmFsaWQgY29tbWl0IG9iamVjdCBpZDogJXMiKSwKKwkJCSAgICBjb21taXRfaGV4LT5pdGVtc1tpXS5zdHJpbmcpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9ncmVzc190aXRsZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmlsbF9vaWRzX2Zyb21fYWxsX3BhY2tzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQlfKCJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIpLAorCQkJY3R4LT5hcHByb3hfbnJfb2JqZWN0cyk7CisJZm9yX2VhY2hfcGFja2VkX29iamVjdChhZGRfcGFja2VkX2NvbW1pdHMsIGN0eCwKKwkJCSAgICAgICBGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUik7CisJaWYgKGN0eC0+cHJvZ3Jlc3NfZG9uZSA8IGN0eC0+YXBwcm94X25yX29iamVjdHMpCisJCWRpc3BsYXlfcHJvZ3Jlc3MoY3R4LT5wcm9ncmVzcywgY3R4LT5hcHByb3hfbnJfb2JqZWN0cyk7CisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjb3VudF9kaXN0aW5jdF9jb21taXRzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXVpbnQzMl90IGksIGNvdW50X2Rpc3RpbmN0ID0gMTsKKworCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKKwkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQlfKCJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIpLAorCQkJY3R4LT5vaWRzLm5yKTsKKwlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIDApOyAvKiBUT0RPOiBNZWFzdXJlIFFTT1JUKCkgcHJvZ3Jlc3MgKi8KKwlRU09SVChjdHgtPm9pZHMubGlzdCwgY3R4LT5vaWRzLm5yLCBvaWRfY29tcGFyZSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgY3R4LT5vaWRzLm5yOyBpKyspIHsKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpICsgMSk7CisJCWlmICghb2lkZXEoJmN0eC0+b2lkcy5saXN0W2kgLSAxXSwgJmN0eC0+b2lkcy5saXN0W2ldKSkgeworCQkJaWYgKGN0eC0+c3BsaXQpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdChjdHgtPnIsICZjdHgtPm9pZHMubGlzdFtpXSk7CisKKwkJCQlpZiAoIWMgfHwgYy0+Z3JhcGhfcG9zICE9IENPTU1JVF9OT1RfRlJPTV9HUkFQSCkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWNvdW50X2Rpc3RpbmN0Kys7CisJCX0KKwl9CisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7CisKKwlyZXR1cm4gY291bnRfZGlzdGluY3Q7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfb2lkc190b19jb21taXRzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXVpbnQzMl90IGk7CisKKwljdHgtPm51bV9leHRyYV9lZGdlcyA9IDA7CisJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKQorCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKKwkJCV8oIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIiksCisJCQljdHgtPm9pZHMubnIpOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPm9pZHMubnI7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbnVtX3BhcmVudHM7CisKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpICsgMSk7CisJCWlmIChpID4gMCAmJiBvaWRlcSgmY3R4LT5vaWRzLmxpc3RbaSAtIDFdLCAmY3R4LT5vaWRzLmxpc3RbaV0pKQorCQkJY29udGludWU7CisKKwkJQUxMT0NfR1JPVyhjdHgtPmNvbW1pdHMubGlzdCwgY3R4LT5jb21taXRzLm5yICsgMSwgY3R4LT5jb21taXRzLmFsbG9jKTsKKwkJY3R4LT5jb21taXRzLmxpc3RbY3R4LT5jb21taXRzLm5yXSA9IGxvb2t1cF9jb21taXQoY3R4LT5yLCAmY3R4LT5vaWRzLmxpc3RbaV0pOworCisJCWlmIChjdHgtPnNwbGl0ICYmCisJCSAgICBjdHgtPmNvbW1pdHMubGlzdFtjdHgtPmNvbW1pdHMubnJdLT5ncmFwaF9wb3MgIT0gQ09NTUlUX05PVF9GUk9NX0dSQVBIKQorCQkJY29udGludWU7CisKKwkJcGFyc2VfY29tbWl0X25vX2dyYXBoKGN0eC0+Y29tbWl0cy5saXN0W2N0eC0+Y29tbWl0cy5ucl0pOworCisJCW51bV9wYXJlbnRzID0gY29tbWl0X2xpc3RfY291bnQoY3R4LT5jb21taXRzLmxpc3RbY3R4LT5jb21taXRzLm5yXS0+cGFyZW50cyk7CisJCWlmIChudW1fcGFyZW50cyA+IDIpCisJCQljdHgtPm51bV9leHRyYV9lZGdlcyArPSBudW1fcGFyZW50cyAtIDE7CisKKwkJY3R4LT5jb21taXRzLm5yKys7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2dyYXBoX2NodW5rX2Jhc2VfMShzdHJ1Y3QgaGFzaGZpbGUgKmYsCisJCQkJICAgIHN0cnVjdCBjb21taXRfZ3JhcGggKmcpCit7CisJaW50IG51bSA9IDA7CisKKwlpZiAoIWcpCisJCXJldHVybiAwOworCisJbnVtID0gd3JpdGVfZ3JhcGhfY2h1bmtfYmFzZV8xKGYsIGctPmJhc2VfZ3JhcGgpOworCWhhc2h3cml0ZShmLCBnLT5vaWQuaGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCXJldHVybiBudW0gKyAxOworfQorCitzdGF0aWMgaW50IHdyaXRlX2dyYXBoX2NodW5rX2Jhc2Uoc3RydWN0IGhhc2hmaWxlICpmLAorCQkJCSAgc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJaW50IG51bSA9IHdyaXRlX2dyYXBoX2NodW5rX2Jhc2VfMShmLCBjdHgtPm5ld19iYXNlX2dyYXBoKTsKKworCWlmIChudW0gIT0gY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDEpIHsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIHdyaXRlIGNvcnJlY3QgbnVtYmVyIG9mIGJhc2UgZ3JhcGggaWRzIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfY29tbWl0X2dyYXBoX2ZpbGUoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJdWludDMyX3QgaTsKKwlpbnQgZmQ7CisJc3RydWN0IGhhc2hmaWxlICpmOworCXN0cnVjdCBsb2NrX2ZpbGUgbGsgPSBMT0NLX0lOSVQ7CisJdWludDMyX3QgY2h1bmtfaWRzWzZdOworCXVpbnQ2NF90IGNodW5rX29mZnNldHNbNl07CisJY29uc3QgdW5zaWduZWQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJc3RydWN0IHN0cmJ1ZiBwcm9ncmVzc190aXRsZSA9IFNUUkJVRl9JTklUOworCWludCBudW1fY2h1bmtzID0gMzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGZpbGVfaGFzaDsKKworCWlmIChjdHgtPnNwbGl0KSB7CisJCXN0cnVjdCBzdHJidWYgdG1wX2ZpbGUgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkZigmdG1wX2ZpbGUsCisJCQkgICAgIiVzL2luZm8vY29tbWl0LWdyYXBocy90bXBfZ3JhcGhfWFhYWFhYIiwKKwkJCSAgICBjdHgtPm9kYi0+cGF0aCk7CisJCWN0eC0+Z3JhcGhfbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJnRtcF9maWxlLCBOVUxMKTsKKwl9IGVsc2UgeworCQljdHgtPmdyYXBoX25hbWUgPSBnZXRfY29tbWl0X2dyYXBoX2ZpbGVuYW1lKGN0eC0+b2RiKTsKKwl9CisKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhjdHgtPmdyYXBoX25hbWUpKSB7CisJCVVOTEVBSyhjdHgtPmdyYXBoX25hbWUpOworCQllcnJvcihfKCJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiKSwKKwkJCWN0eC0+Z3JhcGhfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY3R4LT5zcGxpdCkgeworCQljaGFyICpsb2NrX25hbWUgPSBnZXRfY2hhaW5fZmlsZW5hbWUoY3R4LT5vZGIpOworCisJCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxrLCBsb2NrX25hbWUsIExPQ0tfRElFX09OX0VSUk9SKTsKKworCQlmZCA9IGdpdF9ta3N0ZW1wX21vZGUoY3R4LT5ncmFwaF9uYW1lLCAwNDQ0KTsKKwkJaWYgKGZkIDwgMCkgeworCQkJZXJyb3IoXygidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIiksIGN0eC0+Z3JhcGhfbmFtZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlmID0gaGFzaGZkKGZkLCBjdHgtPmdyYXBoX25hbWUpOworCX0gZWxzZSB7CisJCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxrLCBjdHgtPmdyYXBoX25hbWUsIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJZmQgPSBsay50ZW1wZmlsZS0+ZmQ7CisJCWYgPSBoYXNoZmQobGsudGVtcGZpbGUtPmZkLCBsay50ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmKTsKKwl9CisKKwljaHVua19pZHNbMF0gPSBHUkFQSF9DSFVOS0lEX09JREZBTk9VVDsKKwljaHVua19pZHNbMV0gPSBHUkFQSF9DSFVOS0lEX09JRExPT0tVUDsKKwljaHVua19pZHNbMl0gPSBHUkFQSF9DSFVOS0lEX0RBVEE7CisJaWYgKGN0eC0+bnVtX2V4dHJhX2VkZ2VzKSB7CisJCWNodW5rX2lkc1tudW1fY2h1bmtzXSA9IEdSQVBIX0NIVU5LSURfRVhUUkFFREdFUzsKKwkJbnVtX2NodW5rcysrOworCX0KKwlpZiAoY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA+IDEpIHsKKwkJY2h1bmtfaWRzW251bV9jaHVua3NdID0gR1JBUEhfQ0hVTktJRF9CQVNFOworCQludW1fY2h1bmtzKys7CisJfQorCisJY2h1bmtfaWRzW251bV9jaHVua3NdID0gMDsKKworCWNodW5rX29mZnNldHNbMF0gPSA4ICsgKG51bV9jaHVua3MgKyAxKSAqIEdSQVBIX0NIVU5LTE9PS1VQX1dJRFRIOworCWNodW5rX29mZnNldHNbMV0gPSBjaHVua19vZmZzZXRzWzBdICsgR1JBUEhfRkFOT1VUX1NJWkU7CisJY2h1bmtfb2Zmc2V0c1syXSA9IGNodW5rX29mZnNldHNbMV0gKyBoYXNoc3ogKiBjdHgtPmNvbW1pdHMubnI7CisJY2h1bmtfb2Zmc2V0c1szXSA9IGNodW5rX29mZnNldHNbMl0gKyAoaGFzaHN6ICsgMTYpICogY3R4LT5jb21taXRzLm5yOworCisJbnVtX2NodW5rcyA9IDM7CisJaWYgKGN0eC0+bnVtX2V4dHJhX2VkZ2VzKSB7CisJCWNodW5rX29mZnNldHNbbnVtX2NodW5rcyArIDFdID0gY2h1bmtfb2Zmc2V0c1tudW1fY2h1bmtzXSArCisJCQkJCQk0ICogY3R4LT5udW1fZXh0cmFfZWRnZXM7CisJCW51bV9jaHVua3MrKzsKKwl9CisJaWYgKGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPiAxKSB7CisJCWNodW5rX29mZnNldHNbbnVtX2NodW5rcyArIDFdID0gY2h1bmtfb2Zmc2V0c1tudW1fY2h1bmtzXSArCisJCQkJCQloYXNoc3ogKiAoY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDEpOworCQludW1fY2h1bmtzKys7CisJfQorCisJaGFzaHdyaXRlX2JlMzIoZiwgR1JBUEhfU0lHTkFUVVJFKTsKKworCWhhc2h3cml0ZV91OChmLCBHUkFQSF9WRVJTSU9OKTsKKwloYXNod3JpdGVfdTgoZiwgb2lkX3ZlcnNpb24oKSk7CisJaGFzaHdyaXRlX3U4KGYsIG51bV9jaHVua3MpOworCWhhc2h3cml0ZV91OChmLCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMSk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IG51bV9jaHVua3M7IGkrKykgeworCQl1aW50MzJfdCBjaHVua193cml0ZVszXTsKKworCQljaHVua193cml0ZVswXSA9IGh0b25sKGNodW5rX2lkc1tpXSk7CisJCWNodW5rX3dyaXRlWzFdID0gaHRvbmwoY2h1bmtfb2Zmc2V0c1tpXSA+PiAzMik7CisJCWNodW5rX3dyaXRlWzJdID0gaHRvbmwoY2h1bmtfb2Zmc2V0c1tpXSAmIDB4ZmZmZmZmZmYpOworCQloYXNod3JpdGUoZiwgY2h1bmtfd3JpdGUsIDEyKTsKKwl9CisKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpIHsKKwkJc3RyYnVmX2FkZGYoJnByb2dyZXNzX3RpdGxlLAorCQkJICAgIFFfKCJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIsCisJCQkgICAgICAgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiLAorCQkJICAgICAgIG51bV9jaHVua3MpLAorCQkJICAgIG51bV9jaHVua3MpOworCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKKwkJCXByb2dyZXNzX3RpdGxlLmJ1ZiwKKwkJCW51bV9jaHVua3MgKiBjdHgtPmNvbW1pdHMubnIpOworCX0KKwl3cml0ZV9ncmFwaF9jaHVua19mYW5vdXQoZiwgY3R4KTsKKwl3cml0ZV9ncmFwaF9jaHVua19vaWRzKGYsIGhhc2hzeiwgY3R4KTsKKwl3cml0ZV9ncmFwaF9jaHVua19kYXRhKGYsIGhhc2hzeiwgY3R4KTsKKwlpZiAoY3R4LT5udW1fZXh0cmFfZWRnZXMpCisJCXdyaXRlX2dyYXBoX2NodW5rX2V4dHJhX2VkZ2VzKGYsIGN0eCk7CisJaWYgKGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPiAxICYmCisJICAgIHdyaXRlX2dyYXBoX2NodW5rX2Jhc2UoZiwgY3R4KSkgeworCQlyZXR1cm4gLTE7CisJfQorCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9ncmVzc190aXRsZSk7CisKKwlpZiAoY3R4LT5zcGxpdCAmJiBjdHgtPmJhc2VfZ3JhcGhfbmFtZSAmJiBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyID4gMSkgeworCQljaGFyICpuZXdfYmFzZV9oYXNoID0geHN0cmR1cChvaWRfdG9faGV4KCZjdHgtPm5ld19iYXNlX2dyYXBoLT5vaWQpKTsKKwkJY2hhciAqbmV3X2Jhc2VfbmFtZSA9IGdldF9zcGxpdF9ncmFwaF9maWxlbmFtZShjdHgtPm5ld19iYXNlX2dyYXBoLT5vZGIsIG5ld19iYXNlX2hhc2gpOworCisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyW2N0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAyXSk7CisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMl0pOworCQljdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXJbY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDJdID0gbmV3X2Jhc2VfbmFtZTsKKwkJY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMl0gPSBuZXdfYmFzZV9oYXNoOworCX0KKworCWNsb3NlX2NvbW1pdF9ncmFwaChjdHgtPnItPm9iamVjdHMpOworCWZpbmFsaXplX2hhc2hmaWxlKGYsIGZpbGVfaGFzaC5oYXNoLCBDU1VNX0hBU0hfSU5fU1RSRUFNIHwgQ1NVTV9GU1lOQyk7CisKKwlpZiAoY3R4LT5zcGxpdCkgeworCQlGSUxFICpjaGFpbmYgPSBmZG9wZW5fbG9ja19maWxlKCZsaywgInciKTsKKwkJY2hhciAqZmluYWxfZ3JhcGhfbmFtZTsKKwkJaW50IHJlc3VsdDsKKworCQljbG9zZShmZCk7CisKKwkJaWYgKCFjaGFpbmYpIHsKKwkJCWVycm9yKF8oInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIikpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGN0eC0+YmFzZV9ncmFwaF9uYW1lKSB7CisJCQljb25zdCBjaGFyICpkZXN0ID0gY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyWworCQkJCQkJY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDJdOworCisJCQlpZiAoc3RyY21wKGN0eC0+YmFzZV9ncmFwaF9uYW1lLCBkZXN0KSkgeworCQkJCXJlc3VsdCA9IHJlbmFtZShjdHgtPmJhc2VfZ3JhcGhfbmFtZSwgZGVzdCk7CisKKwkJCQlpZiAocmVzdWx0KSB7CisJCQkJCWVycm9yKF8oImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIpKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNoYXIgKmdyYXBoX25hbWUgPSBnZXRfY29tbWl0X2dyYXBoX2ZpbGVuYW1lKGN0eC0+b2RiKTsKKwkJCXVubGluayhncmFwaF9uYW1lKTsKKwkJfQorCisJCWN0eC0+Y29tbWl0X2dyYXBoX2hhc2hfYWZ0ZXJbY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDFdID0geHN0cmR1cChvaWRfdG9faGV4KCZmaWxlX2hhc2gpKTsKKwkJZmluYWxfZ3JhcGhfbmFtZSA9IGdldF9zcGxpdF9ncmFwaF9maWxlbmFtZShjdHgtPm9kYiwKKwkJCQkJY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyIC0gMV0pOworCQljdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYWZ0ZXJbY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAtIDFdID0gZmluYWxfZ3JhcGhfbmFtZTsKKworCQlyZXN1bHQgPSByZW5hbWUoY3R4LT5ncmFwaF9uYW1lLCBmaW5hbF9ncmFwaF9uYW1lKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcjsgaSsrKQorCQkJZnByaW50Zihsay50ZW1wZmlsZS0+ZnAsICIlc1xuIiwgY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlcltpXSk7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyb3IoXygiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwljb21taXRfbG9ja19maWxlKCZsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BsaXRfZ3JhcGhfbWVyZ2Vfc3RyYXRlZ3koc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqZzsKKwl1aW50MzJfdCBudW1fY29tbWl0czsKKwl1aW50MzJfdCBpOworCisJaW50IG1heF9jb21taXRzID0gMDsKKwlpbnQgc2l6ZV9tdWx0ID0gMjsKKworCWlmIChjdHgtPnNwbGl0X29wdHMpIHsKKwkJbWF4X2NvbW1pdHMgPSBjdHgtPnNwbGl0X29wdHMtPm1heF9jb21taXRzOworCisJCWlmIChjdHgtPnNwbGl0X29wdHMtPnNpemVfbXVsdGlwbGUpCisJCQlzaXplX211bHQgPSBjdHgtPnNwbGl0X29wdHMtPnNpemVfbXVsdGlwbGU7CisJfQorCisJZyA9IGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCW51bV9jb21taXRzID0gY3R4LT5jb21taXRzLm5yOworCWN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgPSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZSArIDE7CisKKwl3aGlsZSAoZyAmJiAoZy0+bnVtX2NvbW1pdHMgPD0gc2l6ZV9tdWx0ICogbnVtX2NvbW1pdHMgfHwKKwkJICAgIChtYXhfY29tbWl0cyAmJiBudW1fY29tbWl0cyA+IG1heF9jb21taXRzKSkpIHsKKwkJaWYgKGctPm9kYiAhPSBjdHgtPm9kYikKKwkJCWJyZWFrOworCisJCW51bV9jb21taXRzICs9IGctPm51bV9jb21taXRzOworCQlnID0gZy0+YmFzZV9ncmFwaDsKKworCQljdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyLS07CisJfQorCisJY3R4LT5uZXdfYmFzZV9ncmFwaCA9IGc7CisKKwlpZiAoY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA9PSAyKSB7CisJCWNoYXIgKm9sZF9ncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShnLT5vZGIpOworCisJCWlmICghc3RyY21wKGctPmZpbGVuYW1lLCBvbGRfZ3JhcGhfbmFtZSkgJiYKKwkJICAgIGctPm9kYiAhPSBjdHgtPm9kYikgeworCQkJY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA9IDE7CisJCQljdHgtPm5ld19iYXNlX2dyYXBoID0gTlVMTDsKKwkJfQorCisJCWZyZWUob2xkX2dyYXBoX25hbWUpOworCX0KKworCUFMTE9DX0FSUkFZKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlciwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcik7CisJQUxMT0NfQVJSQVkoY3R4LT5jb21taXRfZ3JhcGhfaGFzaF9hZnRlciwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciAmJgorCQkgICAgaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlOyBpKyspCisJCWN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlcltpXSA9IHhzdHJkdXAoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2JlZm9yZVtpXSk7CisKKwlpID0gY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmUgLSAxOworCWcgPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKworCXdoaWxlIChnKSB7CisJCWlmIChpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcikKKwkJCWN0eC0+Y29tbWl0X2dyYXBoX2hhc2hfYWZ0ZXJbaV0gPSB4c3RyZHVwKG9pZF90b19oZXgoJmctPm9pZCkpOworCisJCWktLTsKKwkJZyA9IGctPmJhc2VfZ3JhcGg7CisJfQorfQorCitzdGF0aWMgdm9pZCBtZXJnZV9jb21taXRfZ3JhcGgoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgsCisJCQkgICAgICAgc3RydWN0IGNvbW1pdF9ncmFwaCAqZykKK3sKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IG9mZnNldCA9IGctPm51bV9jb21taXRzX2luX2Jhc2U7CisKKwlBTExPQ19HUk9XKGN0eC0+Y29tbWl0cy5saXN0LCBjdHgtPmNvbW1pdHMubnIgKyBnLT5udW1fY29tbWl0cywgY3R4LT5jb21taXRzLmFsbG9jKTsKKworCWZvciAoaSA9IDA7IGkgPCBnLT5udW1fY29tbWl0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CisKKwkJZGlzcGxheV9wcm9ncmVzcyhjdHgtPnByb2dyZXNzLCBpICsgMSk7CisKKwkJbG9hZF9vaWRfZnJvbV9ncmFwaChnLCBpICsgb2Zmc2V0LCAmb2lkKTsKKworCQkvKiBvbmx5IGFkZCBjb21taXRzIGlmIHRoZXkgc3RpbGwgZXhpc3QgaW4gdGhlIHJlcG8gKi8KKwkJcmVzdWx0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KGN0eC0+ciwgJm9pZCwgMSk7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJY3R4LT5jb21taXRzLmxpc3RbY3R4LT5jb21taXRzLm5yXSA9IHJlc3VsdDsKKwkJCWN0eC0+Y29tbWl0cy5ucisrOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGNvbW1pdF9jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICphID0gKihjb25zdCBzdHJ1Y3QgY29tbWl0ICoqKV9hOworCWNvbnN0IHN0cnVjdCBjb21taXQgKmIgPSAqKGNvbnN0IHN0cnVjdCBjb21taXQgKiopX2I7CisJcmV0dXJuIG9pZGNtcCgmYS0+b2JqZWN0Lm9pZCwgJmItPm9iamVjdC5vaWQpOworfQorCitzdGF0aWMgdm9pZCBzb3J0X2FuZF9zY2FuX21lcmdlZF9jb21taXRzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXVpbnQzMl90IGk7CisKKwlpZiAoY3R4LT5yZXBvcnRfcHJvZ3Jlc3MpCisJCWN0eC0+cHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKAorCQkJCQlfKCJTY2FubmluZyBtZXJnZWQgY29tbWl0cyIpLAorCQkJCQljdHgtPmNvbW1pdHMubnIpOworCisJUVNPUlQoY3R4LT5jb21taXRzLmxpc3QsIGN0eC0+Y29tbWl0cy5uciwgY29tbWl0X2NvbXBhcmUpOworCisJY3R4LT5udW1fZXh0cmFfZWRnZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPmNvbW1pdHMubnI7IGkrKykgeworCQlkaXNwbGF5X3Byb2dyZXNzKGN0eC0+cHJvZ3Jlc3MsIGkpOworCisJCWlmIChpICYmIG9pZGVxKCZjdHgtPmNvbW1pdHMubGlzdFtpIC0gMV0tPm9iamVjdC5vaWQsCisJCQkgICZjdHgtPmNvbW1pdHMubGlzdFtpXS0+b2JqZWN0Lm9pZCkpIHsKKwkJCWRpZShfKCJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiKSwKKwkJCSAgICBvaWRfdG9faGV4KCZjdHgtPmNvbW1pdHMubGlzdFtpXS0+b2JqZWN0Lm9pZCkpOworCQl9IGVsc2UgeworCQkJdW5zaWduZWQgaW50IG51bV9wYXJlbnRzOworCisJCQludW1fcGFyZW50cyA9IGNvbW1pdF9saXN0X2NvdW50KGN0eC0+Y29tbWl0cy5saXN0W2ldLT5wYXJlbnRzKTsKKwkJCWlmIChudW1fcGFyZW50cyA+IDIpCisJCQkJY3R4LT5udW1fZXh0cmFfZWRnZXMgKz0gbnVtX3BhcmVudHMgLSAxOworCQl9CisJfQorCisJc3RvcF9wcm9ncmVzcygmY3R4LT5wcm9ncmVzcyk7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX2NvbW1pdF9ncmFwaHMoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqZyA9IGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoOworCXVpbnQzMl90IGN1cnJlbnRfZ3JhcGhfbnVtYmVyID0gY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmU7CisKKwl3aGlsZSAoZyAmJiBjdXJyZW50X2dyYXBoX251bWJlciA+PSBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2FmdGVyKSB7CisJCWN1cnJlbnRfZ3JhcGhfbnVtYmVyLS07CisKKwkJaWYgKGN0eC0+cmVwb3J0X3Byb2dyZXNzKQorCQkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiTWVyZ2luZyBjb21taXQtZ3JhcGgiKSwgMCk7CisKKwkJbWVyZ2VfY29tbWl0X2dyYXBoKGN0eCwgZyk7CisJCXN0b3BfcHJvZ3Jlc3MoJmN0eC0+cHJvZ3Jlc3MpOworCisJCWcgPSBnLT5iYXNlX2dyYXBoOworCX0KKworCWlmIChnKSB7CisJCWN0eC0+bmV3X2Jhc2VfZ3JhcGggPSBnOworCQljdHgtPm5ld19udW1fY29tbWl0c19pbl9iYXNlID0gZy0+bnVtX2NvbW1pdHMgKyBnLT5udW1fY29tbWl0c19pbl9iYXNlOworCX0KKworCWlmIChjdHgtPm5ld19iYXNlX2dyYXBoKQorCQljdHgtPmJhc2VfZ3JhcGhfbmFtZSA9IHhzdHJkdXAoY3R4LT5uZXdfYmFzZV9ncmFwaC0+ZmlsZW5hbWUpOworCisJc29ydF9hbmRfc2Nhbl9tZXJnZWRfY29tbWl0cyhjdHgpOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2NvbW1pdF9ncmFwaHMoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHgpCit7CisJdWludDMyX3QgaTsKKwl0aW1lX3Qgbm93ID0gdGltZShOVUxMKTsKKworCWZvciAoaSA9IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXIgLSAxOyBpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmU7IGkrKykgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJc3RydWN0IHV0aW1idWYgdXBkYXRlZF90aW1lOworCisJCXN0YXQoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2JlZm9yZVtpXSwgJnN0KTsKKworCQl1cGRhdGVkX3RpbWUuYWN0aW1lID0gc3Quc3RfYXRpbWU7CisJCXVwZGF0ZWRfdGltZS5tb2R0aW1lID0gbm93OworCQl1dGltZShjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlW2ldLCAmdXBkYXRlZF90aW1lKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4cGlyZV9jb21taXRfZ3JhcGhzKHN0cnVjdCB3cml0ZV9jb21taXRfZ3JhcGhfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmRlOworCXNpemVfdCBkaXJuYW1lbGVuOworCXRpbWVzdGFtcF90IGV4cGlyZV90aW1lID0gdGltZShOVUxMKTsKKworCWlmIChjdHgtPnNwbGl0X29wdHMgJiYgY3R4LT5zcGxpdF9vcHRzLT5leHBpcmVfdGltZSkKKwkJZXhwaXJlX3RpbWUgLT0gY3R4LT5zcGxpdF9vcHRzLT5leHBpcmVfdGltZTsKKwlpZiAoIWN0eC0+c3BsaXQpIHsKKwkJY2hhciAqY2hhaW5fZmlsZV9uYW1lID0gZ2V0X2NoYWluX2ZpbGVuYW1lKGN0eC0+b2RiKTsKKwkJdW5saW5rKGNoYWluX2ZpbGVfbmFtZSk7CisJCWZyZWUoY2hhaW5fZmlsZV9uYW1lKTsKKwkJY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA9IDA7CisJfQorCisJc3RyYnVmX2FkZHN0cigmcGF0aCwgY3R4LT5vZGItPnBhdGgpOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvaW5mby9jb21taXQtZ3JhcGhzIik7CisJZGlyID0gb3BlbmRpcihwYXRoLmJ1Zik7CisKKwlpZiAoIWRpcikKKwkJZ290byBvdXQ7CisKKwlzdHJidWZfYWRkY2goJnBhdGgsICcvJyk7CisJZGlybmFtZWxlbiA9IHBhdGgubGVuOworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXVpbnQzMl90IGksIGZvdW5kID0gMDsKKworCQlzdHJidWZfc2V0bGVuKCZwYXRoLCBkaXJuYW1lbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmcGF0aCwgZGUtPmRfbmFtZSk7CisKKwkJc3RhdChwYXRoLmJ1ZiwgJnN0KTsKKworCQlpZiAoc3Quc3RfbXRpbWUgPiBleHBpcmVfdGltZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocGF0aC5sZW4gPCA2IHx8IHN0cmNtcChwYXRoLmJ1ZiArIHBhdGgubGVuIC0gNiwgIi5ncmFwaCIpKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYWZ0ZXI7IGkrKykgeworCQkJaWYgKCFzdHJjbXAoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyW2ldLAorCQkJCSAgICBwYXRoLmJ1ZikpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWZvdW5kKQorCQkJdW5saW5rKHBhdGguYnVmKTsKKwl9CisKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7Cit9CisKK2ludCB3cml0ZV9jb21taXRfZ3JhcGgoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiwKKwkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGFja19pbmRleGVzLAorCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpjb21taXRfaGV4LAorCQkgICAgICAgZW51bSBjb21taXRfZ3JhcGhfd3JpdGVfZmxhZ3MgZmxhZ3MsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgKnNwbGl0X29wdHMpCit7CisJc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0ICpjdHg7CisJdWludDMyX3QgaSwgY291bnRfZGlzdGluY3QgPSAwOworCWludCByZXMgPSAwOworCisJaWYgKCFjb21taXRfZ3JhcGhfY29tcGF0aWJsZSh0aGVfcmVwb3NpdG9yeSkpCisJCXJldHVybiAwOworCisJY3R4ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHdyaXRlX2NvbW1pdF9ncmFwaF9jb250ZXh0KSk7CisJY3R4LT5yID0gdGhlX3JlcG9zaXRvcnk7CisJY3R4LT5vZGIgPSBvZGI7CisJY3R4LT5hcHBlbmQgPSBmbGFncyAmIENPTU1JVF9HUkFQSF9XUklURV9BUFBFTkQgPyAxIDogMDsKKwljdHgtPnJlcG9ydF9wcm9ncmVzcyA9IGZsYWdzICYgQ09NTUlUX0dSQVBIX1dSSVRFX1BST0dSRVNTID8gMSA6IDA7CisJY3R4LT5zcGxpdCA9IGZsYWdzICYgQ09NTUlUX0dSQVBIX1dSSVRFX1NQTElUID8gMSA6IDA7CisJY3R4LT5jaGVja19vaWRzID0gZmxhZ3MgJiBDT01NSVRfR1JBUEhfV1JJVEVfQ0hFQ0tfT0lEUyA/IDEgOiAwOworCWN0eC0+c3BsaXRfb3B0cyA9IHNwbGl0X29wdHM7CisKKwlpZiAoY3R4LT5zcGxpdCkgeworCQlzdHJ1Y3QgY29tbWl0X2dyYXBoICpnOworCQlwcmVwYXJlX2NvbW1pdF9ncmFwaChjdHgtPnIpOworCisJCWcgPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKworCQl3aGlsZSAoZykgeworCQkJY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmUrKzsKKwkJCWcgPSBnLT5iYXNlX2dyYXBoOworCQl9CisKKwkJaWYgKGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlKSB7CisJCQlBTExPQ19BUlJBWShjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlLCBjdHgtPm51bV9jb21taXRfZ3JhcGhzX2JlZm9yZSk7CisJCQlpID0gY3R4LT5udW1fY29tbWl0X2dyYXBoc19iZWZvcmU7CisJCQlnID0gY3R4LT5yLT5vYmplY3RzLT5jb21taXRfZ3JhcGg7CisKKwkJCXdoaWxlIChnKSB7CisJCQkJY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2JlZm9yZVstLWldID0geHN0cmR1cChnLT5maWxlbmFtZSk7CisJCQkJZyA9IGctPmJhc2VfZ3JhcGg7CisJCQl9CisJCX0KKwl9CisKKwljdHgtPmFwcHJveF9ucl9vYmplY3RzID0gYXBwcm94aW1hdGVfb2JqZWN0X2NvdW50KCk7CisJY3R4LT5vaWRzLmFsbG9jID0gY3R4LT5hcHByb3hfbnJfb2JqZWN0cyAvIDMyOworCisJaWYgKGN0eC0+c3BsaXQgJiYgc3BsaXRfb3B0cyAmJiBjdHgtPm9pZHMuYWxsb2MgPiBzcGxpdF9vcHRzLT5tYXhfY29tbWl0cykKKwkJY3R4LT5vaWRzLmFsbG9jID0gc3BsaXRfb3B0cy0+bWF4X2NvbW1pdHM7CisKKwlpZiAoY3R4LT5hcHBlbmQpIHsKKwkJcHJlcGFyZV9jb21taXRfZ3JhcGhfb25lKGN0eC0+ciwgY3R4LT5vZGIpOworCQlpZiAoY3R4LT5yLT5vYmplY3RzLT5jb21taXRfZ3JhcGgpCisJCQljdHgtPm9pZHMuYWxsb2MgKz0gY3R4LT5yLT5vYmplY3RzLT5jb21taXRfZ3JhcGgtPm51bV9jb21taXRzOworCX0KKworCWlmIChjdHgtPm9pZHMuYWxsb2MgPCAxMDI0KQorCQljdHgtPm9pZHMuYWxsb2MgPSAxMDI0OworCUFMTE9DX0FSUkFZKGN0eC0+b2lkcy5saXN0LCBjdHgtPm9pZHMuYWxsb2MpOworCisJaWYgKGN0eC0+YXBwZW5kICYmIGN0eC0+ci0+b2JqZWN0cy0+Y29tbWl0X2dyYXBoKSB7CisJCXN0cnVjdCBjb21taXRfZ3JhcGggKmcgPSBjdHgtPnItPm9iamVjdHMtPmNvbW1pdF9ncmFwaDsKKwkJZm9yIChpID0gMDsgaSA8IGctPm51bV9jb21taXRzOyBpKyspIHsKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2ggPSBnLT5jaHVua19vaWRfbG9va3VwICsgZy0+aGFzaF9sZW4gKiBpOworCQkJaGFzaGNweShjdHgtPm9pZHMubGlzdFtjdHgtPm9pZHMubnIrK10uaGFzaCwgaGFzaCk7CisJCX0KKwl9CisKKwlpZiAocGFja19pbmRleGVzKSB7CisJCWlmICgocmVzID0gZmlsbF9vaWRzX2Zyb21fcGFja3MoY3R4LCBwYWNrX2luZGV4ZXMpKSkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoY29tbWl0X2hleCkgeworCQlpZiAoKHJlcyA9IGZpbGxfb2lkc19mcm9tX2NvbW1pdF9oZXgoY3R4LCBjb21taXRfaGV4KSkpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKCFwYWNrX2luZGV4ZXMgJiYgIWNvbW1pdF9oZXgpCisJCWZpbGxfb2lkc19mcm9tX2FsbF9wYWNrcyhjdHgpOworCisJY2xvc2VfcmVhY2hhYmxlKGN0eCk7CisKKwljb3VudF9kaXN0aW5jdCA9IGNvdW50X2Rpc3RpbmN0X2NvbW1pdHMoY3R4KTsKKworCWlmIChjb3VudF9kaXN0aW5jdCA+PSBHUkFQSF9FREdFX0xBU1RfTUFTSykgeworCQllcnJvcihfKCJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIpLCBjb3VudF9kaXN0aW5jdCk7CisJCXJlcyA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJY3R4LT5jb21taXRzLmFsbG9jID0gY291bnRfZGlzdGluY3Q7CisJQUxMT0NfQVJSQVkoY3R4LT5jb21taXRzLmxpc3QsIGN0eC0+Y29tbWl0cy5hbGxvYyk7CisKKwljb3B5X29pZHNfdG9fY29tbWl0cyhjdHgpOworCisJaWYgKGN0eC0+Y29tbWl0cy5uciA+PSBHUkFQSF9FREdFX0xBU1RfTUFTSykgeworCQllcnJvcihfKCJ0b28gbWFueSBjb21taXRzIHRvIHdyaXRlIGdyYXBoIikpOworCQlyZXMgPSAtMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmICghY3R4LT5jb21taXRzLm5yKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAoY3R4LT5zcGxpdCkgeworCQlzcGxpdF9ncmFwaF9tZXJnZV9zdHJhdGVneShjdHgpOworCisJCW1lcmdlX2NvbW1pdF9ncmFwaHMoY3R4KTsKKwl9IGVsc2UKKwkJY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlciA9IDE7CisKKwljb21wdXRlX2dlbmVyYXRpb25fbnVtYmVycyhjdHgpOworCisJcmVzID0gd3JpdGVfY29tbWl0X2dyYXBoX2ZpbGUoY3R4KTsKKworCWlmIChjdHgtPnNwbGl0KQorCQltYXJrX2NvbW1pdF9ncmFwaHMoY3R4KTsKKworCWV4cGlyZV9jb21taXRfZ3JhcGhzKGN0eCk7CisKK2NsZWFudXA6CisJZnJlZShjdHgtPmdyYXBoX25hbWUpOworCWZyZWUoY3R4LT5jb21taXRzLmxpc3QpOworCWZyZWUoY3R4LT5vaWRzLmxpc3QpOworCisJaWYgKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlcikgeworCQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fY29tbWl0X2dyYXBoc19hZnRlcjsgaSsrKSB7CisJCQlmcmVlKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19hZnRlcltpXSk7CisJCQlmcmVlKGN0eC0+Y29tbWl0X2dyYXBoX2hhc2hfYWZ0ZXJbaV0pOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX2NvbW1pdF9ncmFwaHNfYmVmb3JlOyBpKyspCisJCQlmcmVlKGN0eC0+Y29tbWl0X2dyYXBoX2ZpbGVuYW1lc19iZWZvcmVbaV0pOworCisJCWZyZWUoY3R4LT5jb21taXRfZ3JhcGhfZmlsZW5hbWVzX2FmdGVyKTsKKwkJZnJlZShjdHgtPmNvbW1pdF9ncmFwaF9maWxlbmFtZXNfYmVmb3JlKTsKKwkJZnJlZShjdHgtPmNvbW1pdF9ncmFwaF9oYXNoX2FmdGVyKTsKKwl9CisKKwlmcmVlKGN0eCk7CisKKwlyZXR1cm4gcmVzOworfQorCisjZGVmaW5lIFZFUklGWV9DT01NSVRfR1JBUEhfRVJST1JfSEFTSCAyCitzdGF0aWMgaW50IHZlcmlmeV9jb21taXRfZ3JhcGhfZXJyb3I7CisKK3N0YXRpYyB2b2lkIGdyYXBoX3JlcG9ydChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmVyaWZ5X2NvbW1pdF9ncmFwaF9lcnJvciA9IDE7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKK30KKworI2RlZmluZSBHRU5FUkFUSU9OX1pFUk9fRVhJU1RTIDEKKyNkZWZpbmUgR0VORVJBVElPTl9OVU1CRVJfRVhJU1RTIDIKKworaW50IHZlcmlmeV9jb21taXRfZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXRfZ3JhcGggKmcsIGludCBmbGFncykKK3sKKwl1aW50MzJfdCBpLCBjdXJfZmFub3V0X3BvcyA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBwcmV2X29pZCwgY3VyX29pZCwgY2hlY2tzdW07CisJaW50IGdlbmVyYXRpb25femVybyA9IDA7CisJc3RydWN0IGhhc2hmaWxlICpmOworCWludCBkZXZudWxsOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCWludCBsb2NhbF9lcnJvciA9IDA7CisKKwlpZiAoIWcpIHsKKwkJZ3JhcGhfcmVwb3J0KCJubyBjb21taXQtZ3JhcGggZmlsZSBsb2FkZWQiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdmVyaWZ5X2NvbW1pdF9ncmFwaF9lcnJvciA9IHZlcmlmeV9jb21taXRfZ3JhcGhfbGl0ZShnKTsKKwlpZiAodmVyaWZ5X2NvbW1pdF9ncmFwaF9lcnJvcikKKwkJcmV0dXJuIHZlcmlmeV9jb21taXRfZ3JhcGhfZXJyb3I7CisKKwlkZXZudWxsID0gb3BlbigiL2Rldi9udWxsIiwgT19XUk9OTFkpOworCWYgPSBoYXNoZmQoZGV2bnVsbCwgTlVMTCk7CisJaGFzaHdyaXRlKGYsIGctPmRhdGEsIGctPmRhdGFfbGVuIC0gZy0+aGFzaF9sZW4pOworCWZpbmFsaXplX2hhc2hmaWxlKGYsIGNoZWNrc3VtLmhhc2gsIENTVU1fQ0xPU0UpOworCWlmICghaGFzaGVxKGNoZWNrc3VtLmhhc2gsIGctPmRhdGEgKyBnLT5kYXRhX2xlbiAtIGctPmhhc2hfbGVuKSkgeworCQlncmFwaF9yZXBvcnQoXygidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IikpOworCQl2ZXJpZnlfY29tbWl0X2dyYXBoX2Vycm9yID0gVkVSSUZZX0NPTU1JVF9HUkFQSF9FUlJPUl9IQVNIOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBnLT5udW1fY29tbWl0czsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmdyYXBoX2NvbW1pdDsKKworCQloYXNoY3B5KGN1cl9vaWQuaGFzaCwgZy0+Y2h1bmtfb2lkX2xvb2t1cCArIGctPmhhc2hfbGVuICogaSk7CisKKwkJaWYgKGkgJiYgb2lkY21wKCZwcmV2X29pZCwgJmN1cl9vaWQpID49IDApCisJCQlncmFwaF9yZXBvcnQoXygiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgT0lEIG9yZGVyOiAlcyB0aGVuICVzIiksCisJCQkJICAgICBvaWRfdG9faGV4KCZwcmV2X29pZCksCisJCQkJICAgICBvaWRfdG9faGV4KCZjdXJfb2lkKSk7CisKKwkJb2lkY3B5KCZwcmV2X29pZCwgJmN1cl9vaWQpOworCisJCXdoaWxlIChjdXJfb2lkLmhhc2hbMF0gPiBjdXJfZmFub3V0X3BvcykgeworCQkJdWludDMyX3QgZmFub3V0X3ZhbHVlID0gZ2V0X2JlMzIoZy0+Y2h1bmtfb2lkX2Zhbm91dCArIGN1cl9mYW5vdXRfcG9zKTsKKworCQkJaWYgKGkgIT0gZmFub3V0X3ZhbHVlKQorCQkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIpLAorCQkJCQkgICAgIGN1cl9mYW5vdXRfcG9zLCBmYW5vdXRfdmFsdWUsIGkpOworCQkJY3VyX2Zhbm91dF9wb3MrKzsKKwkJfQorCisJCWdyYXBoX2NvbW1pdCA9IGxvb2t1cF9jb21taXQociwgJmN1cl9vaWQpOworCQlpZiAoIXBhcnNlX2NvbW1pdF9pbl9ncmFwaF9vbmUociwgZywgZ3JhcGhfY29tbWl0KSkKKwkJCWdyYXBoX3JlcG9ydChfKCJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIiksCisJCQkJICAgICBvaWRfdG9faGV4KCZjdXJfb2lkKSk7CisJfQorCisJd2hpbGUgKGN1cl9mYW5vdXRfcG9zIDwgMjU2KSB7CisJCXVpbnQzMl90IGZhbm91dF92YWx1ZSA9IGdldF9iZTMyKGctPmNodW5rX29pZF9mYW5vdXQgKyBjdXJfZmFub3V0X3Bvcyk7CisKKwkJaWYgKGctPm51bV9jb21taXRzICE9IGZhbm91dF92YWx1ZSkKKwkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIpLAorCQkJCSAgICAgY3VyX2Zhbm91dF9wb3MsIGZhbm91dF92YWx1ZSwgaSk7CisKKwkJY3VyX2Zhbm91dF9wb3MrKzsKKwl9CisKKwlpZiAodmVyaWZ5X2NvbW1pdF9ncmFwaF9lcnJvciAmIH5WRVJJRllfQ09NTUlUX0dSQVBIX0VSUk9SX0hBU0gpCisJCXJldHVybiB2ZXJpZnlfY29tbWl0X2dyYXBoX2Vycm9yOworCisJaWYgKGZsYWdzICYgQ09NTUlUX0dSQVBIX1dSSVRFX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIpLAorCQkJCQlnLT5udW1fY29tbWl0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZy0+bnVtX2NvbW1pdHM7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpncmFwaF9jb21taXQsICpvZGJfY29tbWl0OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmdyYXBoX3BhcmVudHMsICpvZGJfcGFyZW50czsKKwkJdWludDMyX3QgbWF4X2dlbmVyYXRpb24gPSAwOworCisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwkJaGFzaGNweShjdXJfb2lkLmhhc2gsIGctPmNodW5rX29pZF9sb29rdXAgKyBnLT5oYXNoX2xlbiAqIGkpOworCisJCWdyYXBoX2NvbW1pdCA9IGxvb2t1cF9jb21taXQociwgJmN1cl9vaWQpOworCQlvZGJfY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKiljcmVhdGVfb2JqZWN0KHIsICZjdXJfb2lkLCBhbGxvY19jb21taXRfbm9kZShyKSk7CisJCWlmIChwYXJzZV9jb21taXRfaW50ZXJuYWwob2RiX2NvbW1pdCwgMCwgMCkpIHsKKwkJCWdyYXBoX3JlcG9ydChfKCJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiKSwKKwkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFvaWRlcSgmZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoX29uZShyLCBnLCBncmFwaF9jb21taXQpLT5vYmplY3Qub2lkLAorCQkJICAgZ2V0X2NvbW1pdF90cmVlX29pZChvZGJfY29tbWl0KSkpCisJCQlncmFwaF9yZXBvcnQoXygicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIpLAorCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCksCisJCQkJICAgICBvaWRfdG9faGV4KGdldF9jb21taXRfdHJlZV9vaWQoZ3JhcGhfY29tbWl0KSksCisJCQkJICAgICBvaWRfdG9faGV4KGdldF9jb21taXRfdHJlZV9vaWQob2RiX2NvbW1pdCkpKTsKKworCQlncmFwaF9wYXJlbnRzID0gZ3JhcGhfY29tbWl0LT5wYXJlbnRzOworCQlvZGJfcGFyZW50cyA9IG9kYl9jb21taXQtPnBhcmVudHM7CisKKwkJd2hpbGUgKGdyYXBoX3BhcmVudHMpIHsKKwkJCWlmIChvZGJfcGFyZW50cyA9PSBOVUxMKSB7CisJCQkJZ3JhcGhfcmVwb3J0KF8oImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIiksCisJCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCkpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBwYXJzZSBwYXJlbnQgaW4gY2FzZSBpdCBpcyBpbiBhIGJhc2UgZ3JhcGggKi8KKwkJCXBhcnNlX2NvbW1pdF9pbl9ncmFwaF9vbmUociwgZywgZ3JhcGhfcGFyZW50cy0+aXRlbSk7CisKKwkJCWlmICghb2lkZXEoJmdyYXBoX3BhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQsICZvZGJfcGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZCkpCisJCQkJZ3JhcGhfcmVwb3J0KF8oImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIiksCisJCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCksCisJCQkJCSAgICAgb2lkX3RvX2hleCgmZ3JhcGhfcGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZCksCisJCQkJCSAgICAgb2lkX3RvX2hleCgmb2RiX3BhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQpKTsKKworCQkJaWYgKGdyYXBoX3BhcmVudHMtPml0ZW0tPmdlbmVyYXRpb24gPiBtYXhfZ2VuZXJhdGlvbikKKwkJCQltYXhfZ2VuZXJhdGlvbiA9IGdyYXBoX3BhcmVudHMtPml0ZW0tPmdlbmVyYXRpb247CisKKwkJCWdyYXBoX3BhcmVudHMgPSBncmFwaF9wYXJlbnRzLT5uZXh0OworCQkJb2RiX3BhcmVudHMgPSBvZGJfcGFyZW50cy0+bmV4dDsKKwkJfQorCisJCWlmIChvZGJfcGFyZW50cyAhPSBOVUxMKQorCQkJZ3JhcGhfcmVwb3J0KF8oImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiKSwKKwkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpKTsKKworCQlpZiAoIWdyYXBoX2NvbW1pdC0+Z2VuZXJhdGlvbikgeworCQkJaWYgKGdlbmVyYXRpb25femVybyA9PSBHRU5FUkFUSU9OX05VTUJFUl9FWElTVFMpCisJCQkJZ3JhcGhfcmVwb3J0KF8oImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIiksCisJCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCkpOworCQkJZ2VuZXJhdGlvbl96ZXJvID0gR0VORVJBVElPTl9aRVJPX0VYSVNUUzsKKwkJfSBlbHNlIGlmIChnZW5lcmF0aW9uX3plcm8gPT0gR0VORVJBVElPTl9aRVJPX0VYSVNUUykKKwkJCWdyYXBoX3JlcG9ydChfKCJjb21taXQtZ3JhcGggaGFzIG5vbi16ZXJvIGdlbmVyYXRpb24gbnVtYmVyIGZvciBjb21taXQgJXMsIGJ1dCB6ZXJvIGVsc2V3aGVyZSIpLAorCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCkpOworCisJCWlmIChnZW5lcmF0aW9uX3plcm8gPT0gR0VORVJBVElPTl9aRVJPX0VYSVNUUykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIG9uZSBvZiBvdXIgcGFyZW50cyBoYXMgZ2VuZXJhdGlvbiBHRU5FUkFUSU9OX05VTUJFUl9NQVgsIHRoZW4KKwkJICogb3VyIGdlbmVyYXRpb24gaXMgYWxzbyBHRU5FUkFUSU9OX05VTUJFUl9NQVguIERlY3JlbWVudCB0byBhdm9pZAorCQkgKiBleHRyYSBsb2dpYyBpbiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbi4KKwkJICovCisJCWlmIChtYXhfZ2VuZXJhdGlvbiA9PSBHRU5FUkFUSU9OX05VTUJFUl9NQVgpCisJCQltYXhfZ2VuZXJhdGlvbi0tOworCisJCWlmIChncmFwaF9jb21taXQtPmdlbmVyYXRpb24gIT0gbWF4X2dlbmVyYXRpb24gKyAxKQorCQkJZ3JhcGhfcmVwb3J0KF8oImNvbW1pdC1ncmFwaCBnZW5lcmF0aW9uIGZvciBjb21taXQgJXMgaXMgJXUgIT0gJXUiKSwKKwkJCQkgICAgIG9pZF90b19oZXgoJmN1cl9vaWQpLAorCQkJCSAgICAgZ3JhcGhfY29tbWl0LT5nZW5lcmF0aW9uLAorCQkJCSAgICAgbWF4X2dlbmVyYXRpb24gKyAxKTsKKworCQlpZiAoZ3JhcGhfY29tbWl0LT5kYXRlICE9IG9kYl9jb21taXQtPmRhdGUpCisJCQlncmFwaF9yZXBvcnQoXygiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJSJQUkl0aW1lIiAhPSAlIlBSSXRpbWUpLAorCQkJCSAgICAgb2lkX3RvX2hleCgmY3VyX29pZCksCisJCQkJICAgICBncmFwaF9jb21taXQtPmRhdGUsCisJCQkJICAgICBvZGJfY29tbWl0LT5kYXRlKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJbG9jYWxfZXJyb3IgPSB2ZXJpZnlfY29tbWl0X2dyYXBoX2Vycm9yOworCisJaWYgKCEoZmxhZ3MgJiBDT01NSVRfR1JBUEhfVkVSSUZZX1NIQUxMT1cpICYmIGctPmJhc2VfZ3JhcGgpCisJCWxvY2FsX2Vycm9yIHw9IHZlcmlmeV9jb21taXRfZ3JhcGgociwgZy0+YmFzZV9ncmFwaCwgZmxhZ3MpOworCisJcmV0dXJuIGxvY2FsX2Vycm9yOworfQorCit2b2lkIGZyZWVfY29tbWl0X2dyYXBoKHN0cnVjdCBjb21taXRfZ3JhcGggKmcpCit7CisJaWYgKCFnKQorCQlyZXR1cm47CisJaWYgKGctPmdyYXBoX2ZkID49IDApIHsKKwkJbXVubWFwKCh2b2lkICopZy0+ZGF0YSwgZy0+ZGF0YV9sZW4pOworCQlnLT5kYXRhID0gTlVMTDsKKwkJY2xvc2UoZy0+Z3JhcGhfZmQpOworCX0KKwlmcmVlKGctPmZpbGVuYW1lKTsKKwlmcmVlKGcpOworfQorCit2b2lkIGRpc2FibGVfY29tbWl0X2dyYXBoKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXItPmNvbW1pdF9ncmFwaF9kaXNhYmxlZCA9IDE7Cit9CmRpZmYgLS1naXQgYS9jb21taXQtZ3JhcGguaCBiL2NvbW1pdC1ncmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2E2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQtZ3JhcGguaApAQCAtMCwwICsxLDExOSBAQAorI2lmbmRlZiBDT01NSVRfR1JBUEhfSAorI2RlZmluZSBDT01NSVRfR1JBUEhfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworI2RlZmluZSBHSVRfVEVTVF9DT01NSVRfR1JBUEggIkdJVF9URVNUX0NPTU1JVF9HUkFQSCIKKyNkZWZpbmUgR0lUX1RFU1RfQ09NTUlUX0dSQVBIX0RJRV9PTl9MT0FEICJHSVRfVEVTVF9DT01NSVRfR1JBUEhfRElFX09OX0xPQUQiCisKK3N0cnVjdCBjb21taXQ7CisKK2NoYXIgKmdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYik7CitpbnQgb3Blbl9jb21taXRfZ3JhcGgoY29uc3QgY2hhciAqZ3JhcGhfZmlsZSwgaW50ICpmZCwgc3RydWN0IHN0YXQgKnN0KTsKKworLyoKKyAqIEdpdmVuIGEgY29tbWl0IHN0cnVjdCwgdHJ5IHRvIGZpbGwgdGhlIGNvbW1pdCBzdHJ1Y3QgaW5mbywgaW5jbHVkaW5nOgorICogIDEuIHRyZWUgb2JqZWN0CisgKiAgMi4gZGF0ZQorICogIDMuIHBhcmVudHMuCisgKgorICogUmV0dXJucyAxIGlmIGFuZCBvbmx5IGlmIHRoZSBjb21taXQgd2FzIGZvdW5kIGluIHRoZSBwYWNrZWQgZ3JhcGguCisgKgorICogU2VlIHBhcnNlX2NvbW1pdF9idWZmZXIoKSBmb3IgdGhlIGZhbGxiYWNrIGFmdGVyIHRoaXMgY2FsbC4KKyAqLworaW50IHBhcnNlX2NvbW1pdF9pbl9ncmFwaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqaXRlbSk7CisKKy8qCisgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGxvYWRlZCBjb21taXQgY29udGVudHMgZnJvbSB0aGUgY29tbWl0IGJ1ZmZlciwKKyAqIGJ1dCB3ZSBhbHNvIHdhbnQgdG8gZW5zdXJlIHRoZSBjb21taXQtZ3JhcGggY29udGVudCBpcyBjb3JyZWN0bHkKKyAqIGNoZWNrZWQgYW5kIGZpbGxlZC4gRmlsbCB0aGUgZ3JhcGhfcG9zIGFuZCBnZW5lcmF0aW9uIG1lbWJlcnMgb2YKKyAqIHRoZSBnaXZlbiBjb21taXQuCisgKi8KK3ZvaWQgbG9hZF9jb21taXRfZ3JhcGhfaW5mbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqaXRlbSk7CisKK3N0cnVjdCB0cmVlICpnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqYyk7CisKK3N0cnVjdCBjb21taXRfZ3JhcGggeworCWludCBncmFwaF9mZDsKKworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7CisJc2l6ZV90IGRhdGFfbGVuOworCisJdW5zaWduZWQgY2hhciBoYXNoX2xlbjsKKwl1bnNpZ25lZCBjaGFyIG51bV9jaHVua3M7CisJdWludDMyX3QgbnVtX2NvbW1pdHM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY2hhciAqZmlsZW5hbWU7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCXVpbnQzMl90IG51bV9jb21taXRzX2luX2Jhc2U7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqYmFzZV9ncmFwaDsKKworCWNvbnN0IHVpbnQzMl90ICpjaHVua19vaWRfZmFub3V0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNodW5rX29pZF9sb29rdXA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfY29tbWl0X2RhdGE7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfZXh0cmFfZWRnZXM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfYmFzZV9ncmFwaHM7Cit9OworCitzdHJ1Y3QgY29tbWl0X2dyYXBoICpsb2FkX2NvbW1pdF9ncmFwaF9vbmVfZmRfc3QoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJCQkJCQkgc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYik7CitzdHJ1Y3QgY29tbWl0X2dyYXBoICpyZWFkX2NvbW1pdF9ncmFwaF9vbmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgIHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIpOworc3RydWN0IGNvbW1pdF9ncmFwaCAqcGFyc2VfY29tbWl0X2dyYXBoKHZvaWQgKmdyYXBoX21hcCwgaW50IGZkLAorCQkJCQlzaXplX3QgZ3JhcGhfc2l6ZSk7CisKKy8qCisgKiBSZXR1cm4gMSBpZiBhbmQgb25seSBpZiB0aGUgcmVwb3NpdG9yeSBoYXMgYSBjb21taXQtZ3JhcGgKKyAqIGZpbGUgYW5kIGdlbmVyYXRpb24gbnVtYmVycyBhcmUgY29tcHV0ZWQgaW4gdGhhdCBmaWxlLgorICovCitpbnQgZ2VuZXJhdGlvbl9udW1iZXJzX2VuYWJsZWQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworCitlbnVtIGNvbW1pdF9ncmFwaF93cml0ZV9mbGFncyB7CisJQ09NTUlUX0dSQVBIX1dSSVRFX0FQUEVORCAgICAgPSAoMSA8PCAwKSwKKwlDT01NSVRfR1JBUEhfV1JJVEVfUFJPR1JFU1MgICA9ICgxIDw8IDEpLAorCUNPTU1JVF9HUkFQSF9XUklURV9TUExJVCAgICAgID0gKDEgPDwgMiksCisJLyogTWFrZSBzdXJlIHRoYXQgZWFjaCBPSUQgaW4gdGhlIGlucHV0IGlzIGEgdmFsaWQgY29tbWl0IE9JRC4gKi8KKwlDT01NSVRfR1JBUEhfV1JJVEVfQ0hFQ0tfT0lEUyA9ICgxIDw8IDMpCit9OworCitzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgeworCWludCBzaXplX211bHRpcGxlOworCWludCBtYXhfY29tbWl0czsKKwl0aW1lc3RhbXBfdCBleHBpcmVfdGltZTsKK307CisKKy8qCisgKiBUaGUgd3JpdGVfY29tbWl0X2dyYXBoKiBtZXRob2RzIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MKKyAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuIE5vdGUgdGhhdCBpZiB0aGUgcmVwb3NpdG9yeQorICogaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgY29tbWl0LWdyYXBoIGZlYXR1cmUsIHRoZW4gdGhlCisgKiBtZXRob2RzIHdpbGwgcmV0dXJuIDAgd2l0aG91dCB3cml0aW5nIGEgY29tbWl0LWdyYXBoLgorICovCitpbnQgd3JpdGVfY29tbWl0X2dyYXBoX3JlYWNoYWJsZShzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLAorCQkJCSBlbnVtIGNvbW1pdF9ncmFwaF93cml0ZV9mbGFncyBmbGFncywKKwkJCQkgY29uc3Qgc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzICpzcGxpdF9vcHRzKTsKK2ludCB3cml0ZV9jb21taXRfZ3JhcGgoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYiwKKwkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGFja19pbmRleGVzLAorCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpjb21taXRfaGV4LAorCQkgICAgICAgZW51bSBjb21taXRfZ3JhcGhfd3JpdGVfZmxhZ3MgZmxhZ3MsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgKnNwbGl0X29wdHMpOworCisjZGVmaW5lIENPTU1JVF9HUkFQSF9WRVJJRllfU0hBTExPVwkoMSA8PCAwKQorCitpbnQgdmVyaWZ5X2NvbW1pdF9ncmFwaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdF9ncmFwaCAqZywgaW50IGZsYWdzKTsKKwordm9pZCBjbG9zZV9jb21taXRfZ3JhcGgoc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgKik7Cit2b2lkIGZyZWVfY29tbWl0X2dyYXBoKHN0cnVjdCBjb21taXRfZ3JhcGggKik7CisKKy8qCisgKiBEaXNhYmxlIGZ1cnRoZXIgdXNlIG9mIHRoZSBjb21taXQgZ3JhcGggaW4gdGhpcyBwcm9jZXNzIHdoZW4gcGFyc2luZyBhCisgKiAic3RydWN0IGNvbW1pdCIuCisgKi8KK3ZvaWQgZGlzYWJsZV9jb21taXRfZ3JhcGgoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1pdC1yZWFjaC5jIGIvY29tbWl0LXJlYWNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhN2U3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1pdC1yZWFjaC5jCkBAIC0wLDAgKzEsNzczIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAicmVmLWZpbHRlci5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIFBBUkVOVDEJCSgxdTw8MTYpCisjZGVmaW5lIFBBUkVOVDIJCSgxdTw8MTcpCisjZGVmaW5lIFNUQUxFCQkoMXU8PDE4KQorI2RlZmluZSBSRVNVTFQJCSgxdTw8MTkpCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhbGxfZmxhZ3MgPSAoUEFSRU5UMSB8IFBBUkVOVDIgfCBTVEFMRSB8IFJFU1VMVCk7CisKK3N0YXRpYyBpbnQgcXVldWVfaGFzX25vbnN0YWxlKHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPm5yOyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcXVldWUtPmFycmF5W2ldLmRhdGE7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1RBTEUpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBhbGwgaW5wdXQgY29tbWl0cyBpbiBvbmUgYW5kIHR3b3NbXSBtdXN0IGhhdmUgYmVlbiBwYXJzZWQhICovCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpwYWludF9kb3duX3RvX2NvbW1vbihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCXN0cnVjdCBjb21taXQgKm9uZSwgaW50IG4sCisJCQkJCQlzdHJ1Y3QgY29tbWl0ICoqdHdvcywKKwkJCQkJCWludCBtaW5fZ2VuZXJhdGlvbikKK3sKKwlzdHJ1Y3QgcHJpb19xdWV1ZSBxdWV1ZSA9IHsgY29tcGFyZV9jb21taXRzX2J5X2dlbl90aGVuX2NvbW1pdF9kYXRlIH07CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQgPSBOVUxMOworCWludCBpOworCXVpbnQzMl90IGxhc3RfZ2VuID0gR0VORVJBVElPTl9OVU1CRVJfSU5GSU5JVFk7CisKKwlpZiAoIW1pbl9nZW5lcmF0aW9uKQorCQlxdWV1ZS5jb21wYXJlID0gY29tcGFyZV9jb21taXRzX2J5X2NvbW1pdF9kYXRlOworCisJb25lLT5vYmplY3QuZmxhZ3MgfD0gUEFSRU5UMTsKKwlpZiAoIW4pIHsKKwkJY29tbWl0X2xpc3RfYXBwZW5kKG9uZSwgJnJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwgb25lKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJdHdvc1tpXS0+b2JqZWN0LmZsYWdzIHw9IFBBUkVOVDI7CisJCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwgdHdvc1tpXSk7CisJfQorCisJd2hpbGUgKHF1ZXVlX2hhc19ub25zdGFsZSgmcXVldWUpKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHByaW9fcXVldWVfZ2V0KCZxdWV1ZSk7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwkJaW50IGZsYWdzOworCisJCWlmIChtaW5fZ2VuZXJhdGlvbiAmJiBjb21taXQtPmdlbmVyYXRpb24gPiBsYXN0X2dlbikKKwkJCUJVRygiYmFkIGdlbmVyYXRpb24gc2tpcCAlOHggPiAlOHggYXQgJXMiLAorCQkJICAgIGNvbW1pdC0+Z2VuZXJhdGlvbiwgbGFzdF9nZW4sCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCWxhc3RfZ2VuID0gY29tbWl0LT5nZW5lcmF0aW9uOworCisJCWlmIChjb21taXQtPmdlbmVyYXRpb24gPCBtaW5fZ2VuZXJhdGlvbikKKwkJCWJyZWFrOworCisJCWZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3MgJiAoUEFSRU5UMSB8IFBBUkVOVDIgfCBTVEFMRSk7CisJCWlmIChmbGFncyA9PSAoUEFSRU5UMSB8IFBBUkVOVDIpKSB7CisJCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFJFU1VMVCkpIHsKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBSRVNVTFQ7CisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUoY29tbWl0LCAmcmVzdWx0KTsKKwkJCX0KKwkJCS8qIE1hcmsgcGFyZW50cyBvZiBhIGZvdW5kIG1lcmdlIHN0YWxlICovCisJCQlmbGFncyB8PSBTVEFMRTsKKwkJfQorCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQl3aGlsZSAocGFyZW50cykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudHMtPml0ZW07CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCWlmICgocC0+b2JqZWN0LmZsYWdzICYgZmxhZ3MpID09IGZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHJlcG9fcGFyc2VfY29tbWl0KHIsIHApKQorCQkJCXJldHVybiBOVUxMOworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IGZsYWdzOworCQkJcHJpb19xdWV1ZV9wdXQoJnF1ZXVlLCBwKTsKKwkJfQorCX0KKworCWNsZWFyX3ByaW9fcXVldWUoJnF1ZXVlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICptZXJnZV9iYXNlc19tYW55KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwKKwkJCQkJICAgIHN0cnVjdCBjb21taXQgKip0d29zKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAob25lID09IHR3b3NbaV0pCisJCQkvKgorCQkJICogV2UgZG8gbm90IG1hcmsgdGhpcyBldmVuIHdpdGggUkVTVUxUIHNvIHdlIGRvIG5vdAorCQkJICogaGF2ZSB0byBjbGVhbiBpdCB1cC4KKwkJCSAqLworCQkJcmV0dXJuIGNvbW1pdF9saXN0X2luc2VydChvbmUsICZyZXN1bHQpOworCX0KKworCWlmIChyZXBvX3BhcnNlX2NvbW1pdChyLCBvbmUpKQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChyZXBvX3BhcnNlX2NvbW1pdChyLCB0d29zW2ldKSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWxpc3QgPSBwYWludF9kb3duX3RvX2NvbW1vbihyLCBvbmUsIG4sIHR3b3MsIDApOworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX2NvbW1pdCgmbGlzdCk7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1RBTEUpKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUoY29tbWl0LCAmcmVzdWx0KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfb2N0b3B1c19tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmluKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqaSwgKmosICprLCAqcmV0ID0gTlVMTDsKKworCWlmICghaW4pCisJCXJldHVybiByZXQ7CisKKwljb21taXRfbGlzdF9pbnNlcnQoaW4tPml0ZW0sICZyZXQpOworCisJZm9yIChpID0gaW4tPm5leHQ7IGk7IGkgPSBpLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3X2NvbW1pdHMgPSBOVUxMLCAqZW5kID0gTlVMTDsKKworCQlmb3IgKGogPSByZXQ7IGo7IGogPSBqLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmJhc2VzOworCQkJYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXMoaS0+aXRlbSwgai0+aXRlbSk7CisJCQlpZiAoIW5ld19jb21taXRzKQorCQkJCW5ld19jb21taXRzID0gYmFzZXM7CisJCQllbHNlCisJCQkJZW5kLT5uZXh0ID0gYmFzZXM7CisJCQlmb3IgKGsgPSBiYXNlczsgazsgayA9IGstPm5leHQpCisJCQkJZW5kID0gazsKKwkJfQorCQlyZXQgPSBuZXdfY29tbWl0czsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZW1vdmVfcmVkdW5kYW50KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0ICoqYXJyYXksIGludCBjbnQpCit7CisJLyoKKwkgKiBTb21lIGNvbW1pdCBpbiB0aGUgYXJyYXkgbWF5IGJlIGFuIGFuY2VzdG9yIG9mCisJICogYW5vdGhlciBjb21taXQuICBNb3ZlIHN1Y2ggY29tbWl0IHRvIHRoZSBlbmQgb2YKKwkgKiB0aGUgYXJyYXksIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBjb21taXRzIHRoYXQKKwkgKiBhcmUgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyLgorCSAqLworCXN0cnVjdCBjb21taXQgKip3b3JrOworCXVuc2lnbmVkIGNoYXIgKnJlZHVuZGFudDsKKwlpbnQgKmZpbGxlZF9pbmRleDsKKwlpbnQgaSwgaiwgZmlsbGVkOworCisJd29yayA9IHhjYWxsb2MoY250LCBzaXplb2YoKndvcmspKTsKKwlyZWR1bmRhbnQgPSB4Y2FsbG9jKGNudCwgMSk7CisJQUxMT0NfQVJSQVkoZmlsbGVkX2luZGV4LCBjbnQgLSAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJcmVwb19wYXJzZV9jb21taXQociwgYXJyYXlbaV0pOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbjsKKwkJdWludDMyX3QgbWluX2dlbmVyYXRpb24gPSBhcnJheVtpXS0+Z2VuZXJhdGlvbjsKKworCQlpZiAocmVkdW5kYW50W2ldKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IGZpbGxlZCA9IDA7IGogPCBjbnQ7IGorKykgeworCQkJaWYgKGkgPT0gaiB8fCByZWR1bmRhbnRbal0pCisJCQkJY29udGludWU7CisJCQlmaWxsZWRfaW5kZXhbZmlsbGVkXSA9IGo7CisJCQl3b3JrW2ZpbGxlZCsrXSA9IGFycmF5W2pdOworCisJCQlpZiAoYXJyYXlbal0tPmdlbmVyYXRpb24gPCBtaW5fZ2VuZXJhdGlvbikKKwkJCQltaW5fZ2VuZXJhdGlvbiA9IGFycmF5W2pdLT5nZW5lcmF0aW9uOworCQl9CisJCWNvbW1vbiA9IHBhaW50X2Rvd25fdG9fY29tbW9uKHIsIGFycmF5W2ldLCBmaWxsZWQsCisJCQkJCSAgICAgIHdvcmssIG1pbl9nZW5lcmF0aW9uKTsKKwkJaWYgKGFycmF5W2ldLT5vYmplY3QuZmxhZ3MgJiBQQVJFTlQyKQorCQkJcmVkdW5kYW50W2ldID0gMTsKKwkJZm9yIChqID0gMDsgaiA8IGZpbGxlZDsgaisrKQorCQkJaWYgKHdvcmtbal0tPm9iamVjdC5mbGFncyAmIFBBUkVOVDEpCisJCQkJcmVkdW5kYW50W2ZpbGxlZF9pbmRleFtqXV0gPSAxOworCQljbGVhcl9jb21taXRfbWFya3MoYXJyYXlbaV0sIGFsbF9mbGFncyk7CisJCWNsZWFyX2NvbW1pdF9tYXJrc19tYW55KGZpbGxlZCwgd29yaywgYWxsX2ZsYWdzKTsKKwkJZnJlZV9jb21taXRfbGlzdChjb21tb24pOworCX0KKworCS8qIE5vdyBjb2xsZWN0IHRoZSByZXN1bHQgKi8KKwlDT1BZX0FSUkFZKHdvcmssIGFycmF5LCBjbnQpOworCWZvciAoaSA9IGZpbGxlZCA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJaWYgKCFyZWR1bmRhbnRbaV0pCisJCQlhcnJheVtmaWxsZWQrK10gPSB3b3JrW2ldOworCWZvciAoaiA9IGZpbGxlZCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJaWYgKHJlZHVuZGFudFtpXSkKKwkJCWFycmF5W2orK10gPSB3b3JrW2ldOworCWZyZWUod29yayk7CisJZnJlZShyZWR1bmRhbnQpOworCWZyZWUoZmlsbGVkX2luZGV4KTsKKwlyZXR1cm4gZmlsbGVkOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfbWVyZ2VfYmFzZXNfbWFueV8wKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJICBzdHJ1Y3QgY29tbWl0ICpvbmUsCisJCQkJCQkgIGludCBuLAorCQkJCQkJICBzdHJ1Y3QgY29tbWl0ICoqdHdvcywKKwkJCQkJCSAgaW50IGNsZWFudXApCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCXN0cnVjdCBjb21taXQgKipyc2x0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0OworCWludCBjbnQsIGk7CisKKwlyZXN1bHQgPSBtZXJnZV9iYXNlc19tYW55KHIsIG9uZSwgbiwgdHdvcyk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAob25lID09IHR3b3NbaV0pCisJCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LT5uZXh0KSB7CisJCWlmIChjbGVhbnVwKSB7CisJCQljbGVhcl9jb21taXRfbWFya3Mob25lLCBhbGxfZmxhZ3MpOworCQkJY2xlYXJfY29tbWl0X21hcmtzX21hbnkobiwgdHdvcywgYWxsX2ZsYWdzKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIFRoZXJlIGFyZSBtb3JlIHRoYW4gb25lICovCisJY250ID0gY29tbWl0X2xpc3RfY291bnQocmVzdWx0KTsKKwlyc2x0ID0geGNhbGxvYyhjbnQsIHNpemVvZigqcnNsdCkpOworCWZvciAobGlzdCA9IHJlc3VsdCwgaSA9IDA7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQlyc2x0W2krK10gPSBsaXN0LT5pdGVtOworCWZyZWVfY29tbWl0X2xpc3QocmVzdWx0KTsKKworCWNsZWFyX2NvbW1pdF9tYXJrcyhvbmUsIGFsbF9mbGFncyk7CisJY2xlYXJfY29tbWl0X21hcmtzX21hbnkobiwgdHdvcywgYWxsX2ZsYWdzKTsKKworCWNudCA9IHJlbW92ZV9yZWR1bmRhbnQociwgcnNsdCwgY250KTsKKwlyZXN1bHQgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocnNsdFtpXSwgJnJlc3VsdCk7CisJZnJlZShyc2x0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlcG9fZ2V0X21lcmdlX2Jhc2VzX21hbnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICAgIHN0cnVjdCBjb21taXQgKm9uZSwKKwkJCQkJICAgICAgaW50IG4sCisJCQkJCSAgICAgIHN0cnVjdCBjb21taXQgKip0d29zKQoreworCXJldHVybiBnZXRfbWVyZ2VfYmFzZXNfbWFueV8wKHIsIG9uZSwgbiwgdHdvcywgMSk7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqcmVwb19nZXRfbWVyZ2VfYmFzZXNfbWFueV9kaXJ0eShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJCSAgICBzdHJ1Y3QgY29tbWl0ICpvbmUsCisJCQkJCQkgICAgaW50IG4sCisJCQkJCQkgICAgc3RydWN0IGNvbW1pdCAqKnR3b3MpCit7CisJcmV0dXJuIGdldF9tZXJnZV9iYXNlc19tYW55XzAociwgb25lLCBuLCB0d29zLCAwKTsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpyZXBvX2dldF9tZXJnZV9iYXNlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJIHN0cnVjdCBjb21taXQgKm9uZSwKKwkJCQkJIHN0cnVjdCBjb21taXQgKnR3bykKK3sKKwlyZXR1cm4gZ2V0X21lcmdlX2Jhc2VzX21hbnlfMChyLCBvbmUsIDEsICZ0d28sIDEpOworfQorCisvKgorICogSXMgImNvbW1pdCIgYSBkZXNjZW5kYW50IG9mIG9uZSBvZiB0aGUgZWxlbWVudHMgb24gdGhlICJ3aXRoX2NvbW1pdCIgbGlzdD8KKyAqLworaW50IGlzX2Rlc2NlbmRhbnRfb2Yoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKndpdGhfY29tbWl0KQoreworCWlmICghd2l0aF9jb21taXQpCisJCXJldHVybiAxOworCisJaWYgKGdlbmVyYXRpb25fbnVtYmVyc19lbmFibGVkKHRoZV9yZXBvc2l0b3J5KSkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZyb21fbGlzdCA9IE5VTEw7CisJCWludCByZXN1bHQ7CisJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZmcm9tX2xpc3QpOworCQlyZXN1bHQgPSBjYW5fYWxsX2Zyb21fcmVhY2goZnJvbV9saXN0LCB3aXRoX2NvbW1pdCwgMCk7CisJCWZyZWVfY29tbWl0X2xpc3QoZnJvbV9saXN0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9IGVsc2UgeworCQl3aGlsZSAod2l0aF9jb21taXQpIHsKKwkJCXN0cnVjdCBjb21taXQgKm90aGVyOworCisJCQlvdGhlciA9IHdpdGhfY29tbWl0LT5pdGVtOworCQkJd2l0aF9jb21taXQgPSB3aXRoX2NvbW1pdC0+bmV4dDsKKwkJCWlmIChpbl9tZXJnZV9iYXNlcyhvdGhlciwgY29tbWl0KSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBJcyAiY29tbWl0IiBhbiBhbmNlc3RvciBvZiBvbmUgb2YgdGhlICJyZWZlcmVuY2VzIj8KKyAqLworaW50IHJlcG9faW5fbWVyZ2VfYmFzZXNfbWFueShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgICBpbnQgbnJfcmVmZXJlbmNlLCBzdHJ1Y3QgY29tbWl0ICoqcmVmZXJlbmNlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXM7CisJaW50IHJldCA9IDAsIGk7CisJdWludDMyX3QgbWluX2dlbmVyYXRpb24gPSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWTsKKworCWlmIChyZXBvX3BhcnNlX2NvbW1pdChyLCBjb21taXQpKQorCQlyZXR1cm4gcmV0OworCWZvciAoaSA9IDA7IGkgPCBucl9yZWZlcmVuY2U7IGkrKykgeworCQlpZiAocmVwb19wYXJzZV9jb21taXQociwgcmVmZXJlbmNlW2ldKSkKKwkJCXJldHVybiByZXQ7CisJCWlmIChyZWZlcmVuY2VbaV0tPmdlbmVyYXRpb24gPCBtaW5fZ2VuZXJhdGlvbikKKwkJCW1pbl9nZW5lcmF0aW9uID0gcmVmZXJlbmNlW2ldLT5nZW5lcmF0aW9uOworCX0KKworCWlmIChjb21taXQtPmdlbmVyYXRpb24gPiBtaW5fZ2VuZXJhdGlvbikKKwkJcmV0dXJuIHJldDsKKworCWJhc2VzID0gcGFpbnRfZG93bl90b19jb21tb24ociwgY29tbWl0LAorCQkJCSAgICAgbnJfcmVmZXJlbmNlLCByZWZlcmVuY2UsCisJCQkJICAgICBjb21taXQtPmdlbmVyYXRpb24pOworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBBUkVOVDIpCisJCXJldCA9IDE7CisJY2xlYXJfY29tbWl0X21hcmtzKGNvbW1pdCwgYWxsX2ZsYWdzKTsKKwljbGVhcl9jb21taXRfbWFya3NfbWFueShucl9yZWZlcmVuY2UsIHJlZmVyZW5jZSwgYWxsX2ZsYWdzKTsKKwlmcmVlX2NvbW1pdF9saXN0KGJhc2VzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSXMgImNvbW1pdCIgYW4gYW5jZXN0b3Igb2YgKGkuZS4gcmVhY2hhYmxlIGZyb20pIHRoZSAicmVmZXJlbmNlIj8KKyAqLworaW50IHJlcG9faW5fbWVyZ2VfYmFzZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQlzdHJ1Y3QgY29tbWl0ICpyZWZlcmVuY2UpCit7CisJcmV0dXJuIHJlcG9faW5fbWVyZ2VfYmFzZXNfbWFueShyLCBjb21taXQsIDEsICZyZWZlcmVuY2UpOworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlZHVjZV9oZWFkcyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmhlYWRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEwsICoqdGFpbCA9ICZyZXN1bHQ7CisJc3RydWN0IGNvbW1pdCAqKmFycmF5OworCWludCBudW1faGVhZCwgaTsKKworCWlmICghaGVhZHMpCisJCXJldHVybiBOVUxMOworCisJLyogVW5pcXVpZnkgKi8KKwlmb3IgKHAgPSBoZWFkczsgcDsgcCA9IHAtPm5leHQpCisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+U1RBTEU7CisJZm9yIChwID0gaGVhZHMsIG51bV9oZWFkID0gMDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNUQUxFKQorCQkJY29udGludWU7CisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBTVEFMRTsKKwkJbnVtX2hlYWQrKzsKKwl9CisJYXJyYXkgPSB4Y2FsbG9jKG51bV9oZWFkLCBzaXplb2YoKmFycmF5KSk7CisJZm9yIChwID0gaGVhZHMsIGkgPSAwOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU1RBTEUpIHsKKwkJCWFycmF5W2krK10gPSBwLT5pdGVtOworCQkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5TVEFMRTsKKwkJfQorCX0KKwludW1faGVhZCA9IHJlbW92ZV9yZWR1bmRhbnQodGhlX3JlcG9zaXRvcnksIGFycmF5LCBudW1faGVhZCk7CisJZm9yIChpID0gMDsgaSA8IG51bV9oZWFkOyBpKyspCisJCXRhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGFycmF5W2ldLCB0YWlsKS0+bmV4dDsKKwlmcmVlKGFycmF5KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHJlZHVjZV9oZWFkc19yZXBsYWNlKHN0cnVjdCBjb21taXRfbGlzdCAqKmhlYWRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0ID0gcmVkdWNlX2hlYWRzKCpoZWFkcyk7CisJZnJlZV9jb21taXRfbGlzdCgqaGVhZHMpOworCSpoZWFkcyA9IHJlc3VsdDsKK30KKworaW50IHJlZl9uZXdlcihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkKQoreworCXN0cnVjdCBvYmplY3QgKm87CisJc3RydWN0IGNvbW1pdCAqb2xkX2NvbW1pdCwgKm5ld19jb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpvbGRfY29tbWl0X2xpc3QgPSBOVUxMOworCisJLyoKKwkgKiBCb3RoIG5ld19jb21taXQgYW5kIG9sZF9jb21taXQgbXVzdCBiZSBjb21taXQtaXNoIGFuZCBuZXdfY29tbWl0IGlzIGRlc2NlbmRhbnQgb2YKKwkgKiBvbGRfY29tbWl0LiAgT3RoZXJ3aXNlIHdlIHJlcXVpcmUgLS1mb3JjZS4KKwkgKi8KKwlvID0gZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LCBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9sZF9vaWQpLAorCQkgICAgICBOVUxMLCAwKTsKKwlpZiAoIW8gfHwgby0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gMDsKKwlvbGRfY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikgbzsKKworCW8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgbmV3X29pZCksCisJCSAgICAgIE5VTEwsIDApOworCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCW5ld19jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKSBvOworCisJaWYgKHBhcnNlX2NvbW1pdChuZXdfY29tbWl0KSA8IDApCisJCXJldHVybiAwOworCisJY29tbWl0X2xpc3RfaW5zZXJ0KG9sZF9jb21taXQsICZvbGRfY29tbWl0X2xpc3QpOworCXJldHVybiBpc19kZXNjZW5kYW50X29mKG5ld19jb21taXQsIG9sZF9jb21taXRfbGlzdCk7Cit9CisKKy8qCisgKiBNaW1pY2tpbmcgdGhlIHJlYWwgc3RhY2ssIHRoaXMgc3RhY2sgbGl2ZXMgb24gdGhlIGhlYXAsIGF2b2lkaW5nIHN0YWNrCisgKiBvdmVyZmxvd3MuCisgKgorICogQXQgZWFjaCByZWN1cnNpb24gc3RlcCwgdGhlIHN0YWNrIGl0ZW1zIHBvaW50cyB0byB0aGUgY29tbWl0cyB3aG9zZQorICogYW5jZXN0b3JzIGFyZSB0byBiZSBpbnNwZWN0ZWQuCisgKi8KK3N0cnVjdCBjb250YWluc19zdGFjayB7CisJaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgY29udGFpbnNfc3RhY2tfZW50cnkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwl9ICpjb250YWluc19zdGFjazsKK307CisKK3N0YXRpYyBpbnQgaW5fY29tbWl0X2xpc3QoY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICp3YW50LCBzdHJ1Y3QgY29tbWl0ICpjKQoreworCWZvciAoOyB3YW50OyB3YW50ID0gd2FudC0+bmV4dCkKKwkJaWYgKG9pZGVxKCZ3YW50LT5pdGVtLT5vYmplY3Qub2lkLCAmYy0+b2JqZWN0Lm9pZCkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRlc3Qgd2hldGhlciB0aGUgY2FuZGlkYXRlIGlzIGNvbnRhaW5lZCBpbiB0aGUgbGlzdC4KKyAqIERvIG5vdCByZWN1cnNlIHRvIGZpbmQgb3V0LCB0aG91Z2gsIGJ1dCByZXR1cm4gLTEgaWYgaW5jb25jbHVzaXZlLgorICovCitzdGF0aWMgZW51bSBjb250YWluc19yZXN1bHQgY29udGFpbnNfdGVzdChzdHJ1Y3QgY29tbWl0ICpjYW5kaWRhdGUsCisJCQkJCSAgY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICp3YW50LAorCQkJCQkgIHN0cnVjdCBjb250YWluc19jYWNoZSAqY2FjaGUsCisJCQkJCSAgdWludDMyX3QgY3V0b2ZmKQoreworCWVudW0gY29udGFpbnNfcmVzdWx0ICpjYWNoZWQgPSBjb250YWluc19jYWNoZV9hdChjYWNoZSwgY2FuZGlkYXRlKTsKKworCS8qIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgYW5zd2VyIGNhY2hlZCwgcmV0dXJuIHRoYXQuICovCisJaWYgKCpjYWNoZWQpCisJCXJldHVybiAqY2FjaGVkOworCisJLyogb3IgYXJlIHdlIGl0PyAqLworCWlmIChpbl9jb21taXRfbGlzdCh3YW50LCBjYW5kaWRhdGUpKSB7CisJCSpjYWNoZWQgPSBDT05UQUlOU19ZRVM7CisJCXJldHVybiBDT05UQUlOU19ZRVM7CisJfQorCisJLyogT3RoZXJ3aXNlLCB3ZSBkb24ndCBrbm93OyBwcmVwYXJlIHRvIHJlY3Vyc2UgKi8KKwlwYXJzZV9jb21taXRfb3JfZGllKGNhbmRpZGF0ZSk7CisKKwlpZiAoY2FuZGlkYXRlLT5nZW5lcmF0aW9uIDwgY3V0b2ZmKQorCQlyZXR1cm4gQ09OVEFJTlNfTk87CisKKwlyZXR1cm4gQ09OVEFJTlNfVU5LTk9XTjsKK30KKworc3RhdGljIHZvaWQgcHVzaF90b19jb250YWluc19zdGFjayhzdHJ1Y3QgY29tbWl0ICpjYW5kaWRhdGUsIHN0cnVjdCBjb250YWluc19zdGFjayAqY29udGFpbnNfc3RhY2spCit7CisJQUxMT0NfR1JPVyhjb250YWluc19zdGFjay0+Y29udGFpbnNfc3RhY2ssIGNvbnRhaW5zX3N0YWNrLT5uciArIDEsIGNvbnRhaW5zX3N0YWNrLT5hbGxvYyk7CisJY29udGFpbnNfc3RhY2stPmNvbnRhaW5zX3N0YWNrW2NvbnRhaW5zX3N0YWNrLT5ucl0uY29tbWl0ID0gY2FuZGlkYXRlOworCWNvbnRhaW5zX3N0YWNrLT5jb250YWluc19zdGFja1tjb250YWluc19zdGFjay0+bnIrK10ucGFyZW50cyA9IGNhbmRpZGF0ZS0+cGFyZW50czsKK30KKworc3RhdGljIGVudW0gY29udGFpbnNfcmVzdWx0IGNvbnRhaW5zX3RhZ19hbGdvKHN0cnVjdCBjb21taXQgKmNhbmRpZGF0ZSwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICp3YW50LAorCQkJCQkgICAgICBzdHJ1Y3QgY29udGFpbnNfY2FjaGUgKmNhY2hlKQoreworCXN0cnVjdCBjb250YWluc19zdGFjayBjb250YWluc19zdGFjayA9IHsgMCwgMCwgTlVMTCB9OworCWVudW0gY29udGFpbnNfcmVzdWx0IHJlc3VsdDsKKwl1aW50MzJfdCBjdXRvZmYgPSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWTsKKwljb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwlmb3IgKHAgPSB3YW50OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcC0+aXRlbTsKKwkJbG9hZF9jb21taXRfZ3JhcGhfaW5mbyh0aGVfcmVwb3NpdG9yeSwgYyk7CisJCWlmIChjLT5nZW5lcmF0aW9uIDwgY3V0b2ZmKQorCQkJY3V0b2ZmID0gYy0+Z2VuZXJhdGlvbjsKKwl9CisKKwlyZXN1bHQgPSBjb250YWluc190ZXN0KGNhbmRpZGF0ZSwgd2FudCwgY2FjaGUsIGN1dG9mZik7CisJaWYgKHJlc3VsdCAhPSBDT05UQUlOU19VTktOT1dOKQorCQlyZXR1cm4gcmVzdWx0OworCisJcHVzaF90b19jb250YWluc19zdGFjayhjYW5kaWRhdGUsICZjb250YWluc19zdGFjayk7CisJd2hpbGUgKGNvbnRhaW5zX3N0YWNrLm5yKSB7CisJCXN0cnVjdCBjb250YWluc19zdGFja19lbnRyeSAqZW50cnkgPSAmY29udGFpbnNfc3RhY2suY29udGFpbnNfc3RhY2tbY29udGFpbnNfc3RhY2subnIgLSAxXTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZW50cnktPmNvbW1pdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gZW50cnktPnBhcmVudHM7CisKKwkJaWYgKCFwYXJlbnRzKSB7CisJCQkqY29udGFpbnNfY2FjaGVfYXQoY2FjaGUsIGNvbW1pdCkgPSBDT05UQUlOU19OTzsKKwkJCWNvbnRhaW5zX3N0YWNrLm5yLS07CisJCX0KKwkJLyoKKwkJICogSWYgd2UganVzdCBwb3BwZWQgdGhlIHN0YWNrLCBwYXJlbnRzLT5pdGVtIGhhcyBiZWVuIG1hcmtlZCwKKwkJICogdGhlcmVmb3JlIGNvbnRhaW5zX3Rlc3Qgd2lsbCByZXR1cm4gYSBtZWFuaW5nZnVsIHllcy9uby4KKwkJICovCisJCWVsc2Ugc3dpdGNoIChjb250YWluc190ZXN0KHBhcmVudHMtPml0ZW0sIHdhbnQsIGNhY2hlLCBjdXRvZmYpKSB7CisJCWNhc2UgQ09OVEFJTlNfWUVTOgorCQkJKmNvbnRhaW5zX2NhY2hlX2F0KGNhY2hlLCBjb21taXQpID0gQ09OVEFJTlNfWUVTOworCQkJY29udGFpbnNfc3RhY2subnItLTsKKwkJCWJyZWFrOworCQljYXNlIENPTlRBSU5TX05POgorCQkJZW50cnktPnBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQkJYnJlYWs7CisJCWNhc2UgQ09OVEFJTlNfVU5LTk9XTjoKKwkJCXB1c2hfdG9fY29udGFpbnNfc3RhY2socGFyZW50cy0+aXRlbSwgJmNvbnRhaW5zX3N0YWNrKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZyZWUoY29udGFpbnNfc3RhY2suY29udGFpbnNfc3RhY2spOworCXJldHVybiBjb250YWluc190ZXN0KGNhbmRpZGF0ZSwgd2FudCwgY2FjaGUsIGN1dG9mZik7Cit9CisKK2ludCBjb21taXRfY29udGFpbnMoc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCBzdHJ1Y3QgY29udGFpbnNfY2FjaGUgKmNhY2hlKQoreworCWlmIChmaWx0ZXItPndpdGhfY29tbWl0X3RhZ19hbGdvKQorCQlyZXR1cm4gY29udGFpbnNfdGFnX2FsZ28oY29tbWl0LCBsaXN0LCBjYWNoZSkgPT0gQ09OVEFJTlNfWUVTOworCXJldHVybiBpc19kZXNjZW5kYW50X29mKGNvbW1pdCwgbGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9jb21taXRzX2J5X2dlbihjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYSA9ICooY29uc3Qgc3RydWN0IGNvbW1pdCAqIGNvbnN0ICopX2E7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYiA9ICooY29uc3Qgc3RydWN0IGNvbW1pdCAqIGNvbnN0ICopX2I7CisKKwlpZiAoYS0+Z2VuZXJhdGlvbiA8IGItPmdlbmVyYXRpb24pCisJCXJldHVybiAtMTsKKwlpZiAoYS0+Z2VuZXJhdGlvbiA+IGItPmdlbmVyYXRpb24pCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQgY2FuX2FsbF9mcm9tX3JlYWNoX3dpdGhfZmxhZyhzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpmcm9tLAorCQkJCSB1bnNpZ25lZCBpbnQgd2l0aF9mbGFnLAorCQkJCSB1bnNpZ25lZCBpbnQgYXNzaWduX2ZsYWcsCisJCQkJIHRpbWVfdCBtaW5fY29tbWl0X2RhdGUsCisJCQkJIHVpbnQzMl90IG1pbl9nZW5lcmF0aW9uKQoreworCXN0cnVjdCBjb21taXQgKipsaXN0ID0gTlVMTDsKKwlpbnQgaTsKKwlpbnQgbnJfY29tbWl0czsKKwlpbnQgcmVzdWx0ID0gMTsKKworCUFMTE9DX0FSUkFZKGxpc3QsIGZyb20tPm5yKTsKKwlucl9jb21taXRzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZnJvbS0+bnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpmcm9tX29uZSA9IGZyb20tPm9iamVjdHNbaV0uaXRlbTsKKworCQlpZiAoIWZyb21fb25lIHx8IGZyb21fb25lLT5mbGFncyAmIGFzc2lnbl9mbGFnKQorCQkJY29udGludWU7CisKKwkJZnJvbV9vbmUgPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIGZyb21fb25lLAorCQkJCSAgICAgImEgZnJvbSBvYmplY3QiLCAwKTsKKwkJaWYgKCFmcm9tX29uZSB8fCBmcm9tX29uZS0+dHlwZSAhPSBPQkpfQ09NTUlUKSB7CisJCQkvKgorCQkJICogbm8gd2F5IHRvIHRlbGwgaWYgdGhpcyBpcyByZWFjaGFibGUgYnkKKwkJCSAqIGxvb2tpbmcgYXQgdGhlIGFuY2VzdHJ5IGNoYWluIGFsb25lLCBzbworCQkJICogbGVhdmUgYSBub3RlIHRvIG91cnNlbHZlcyBub3QgdG8gd29ycnkgYWJvdXQKKwkJCSAqIHRoaXMgb2JqZWN0IGFueW1vcmUuCisJCQkgKi8KKwkJCWZyb20tPm9iamVjdHNbaV0uaXRlbS0+ZmxhZ3MgfD0gYXNzaWduX2ZsYWc7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxpc3RbbnJfY29tbWl0c10gPSAoc3RydWN0IGNvbW1pdCAqKWZyb21fb25lOworCQlpZiAocGFyc2VfY29tbWl0KGxpc3RbbnJfY29tbWl0c10pIHx8CisJCSAgICBsaXN0W25yX2NvbW1pdHNdLT5nZW5lcmF0aW9uIDwgbWluX2dlbmVyYXRpb24pIHsKKwkJCXJlc3VsdCA9IDA7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKworCQlucl9jb21taXRzKys7CisJfQorCisJUVNPUlQobGlzdCwgbnJfY29tbWl0cywgY29tcGFyZV9jb21taXRzX2J5X2dlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY29tbWl0czsgaSsrKSB7CisJCS8qIERGUyBmcm9tIGxpc3RbaV0gKi8KKwkJc3RydWN0IGNvbW1pdF9saXN0ICpzdGFjayA9IE5VTEw7CisKKwkJbGlzdFtpXS0+b2JqZWN0LmZsYWdzIHw9IGFzc2lnbl9mbGFnOworCQljb21taXRfbGlzdF9pbnNlcnQobGlzdFtpXSwgJnN0YWNrKTsKKworCQl3aGlsZSAoc3RhY2spIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJCQlpZiAoc3RhY2stPml0ZW0tPm9iamVjdC5mbGFncyAmICh3aXRoX2ZsYWcgfCBSRVNVTFQpKSB7CisJCQkJcG9wX2NvbW1pdCgmc3RhY2spOworCQkJCWlmIChzdGFjaykKKwkJCQkJc3RhY2stPml0ZW0tPm9iamVjdC5mbGFncyB8PSBSRVNVTFQ7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZvciAocGFyZW50ID0gc3RhY2stPml0ZW0tPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CisJCQkJaWYgKHBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgKHdpdGhfZmxhZyB8IFJFU1VMVCkpCisJCQkJCXN0YWNrLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gUkVTVUxUOworCisJCQkJaWYgKCEocGFyZW50LT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBhc3NpZ25fZmxhZykpIHsKKwkJCQkJcGFyZW50LT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gYXNzaWduX2ZsYWc7CisKKwkJCQkJaWYgKHBhcnNlX2NvbW1pdChwYXJlbnQtPml0ZW0pIHx8CisJCQkJCSAgICBwYXJlbnQtPml0ZW0tPmRhdGUgPCBtaW5fY29tbWl0X2RhdGUgfHwKKwkJCQkJICAgIHBhcmVudC0+aXRlbS0+Z2VuZXJhdGlvbiA8IG1pbl9nZW5lcmF0aW9uKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudC0+aXRlbSwgJnN0YWNrKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoIXBhcmVudCkKKwkJCQlwb3BfY29tbWl0KCZzdGFjayk7CisJCX0KKworCQlpZiAoIShsaXN0W2ldLT5vYmplY3QuZmxhZ3MgJiAod2l0aF9mbGFnIHwgUkVTVUxUKSkpIHsKKwkJCXJlc3VsdCA9IDA7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKK2NsZWFudXA6CisJY2xlYXJfY29tbWl0X21hcmtzX21hbnkobnJfY29tbWl0cywgbGlzdCwgUkVTVUxUIHwgYXNzaWduX2ZsYWcpOworCWZyZWUobGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnJvbS0+bnI7IGkrKykKKwkJZnJvbS0+b2JqZWN0c1tpXS5pdGVtLT5mbGFncyAmPSB+YXNzaWduX2ZsYWc7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgY2FuX2FsbF9mcm9tX3JlYWNoKHN0cnVjdCBjb21taXRfbGlzdCAqZnJvbSwgc3RydWN0IGNvbW1pdF9saXN0ICp0bywKKwkJICAgICAgIGludCBjdXRvZmZfYnlfbWluX2RhdGUpCit7CisJc3RydWN0IG9iamVjdF9hcnJheSBmcm9tX29ianMgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwl0aW1lX3QgbWluX2NvbW1pdF9kYXRlID0gY3V0b2ZmX2J5X21pbl9kYXRlID8gZnJvbS0+aXRlbS0+ZGF0ZSA6IDA7CisJc3RydWN0IGNvbW1pdF9saXN0ICpmcm9tX2l0ZXIgPSBmcm9tLCAqdG9faXRlciA9IHRvOworCWludCByZXN1bHQ7CisJdWludDMyX3QgbWluX2dlbmVyYXRpb24gPSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWTsKKworCXdoaWxlIChmcm9tX2l0ZXIpIHsKKwkJYWRkX29iamVjdF9hcnJheSgmZnJvbV9pdGVyLT5pdGVtLT5vYmplY3QsIE5VTEwsICZmcm9tX29ianMpOworCisJCWlmICghcGFyc2VfY29tbWl0KGZyb21faXRlci0+aXRlbSkpIHsKKwkJCWlmIChmcm9tX2l0ZXItPml0ZW0tPmRhdGUgPCBtaW5fY29tbWl0X2RhdGUpCisJCQkJbWluX2NvbW1pdF9kYXRlID0gZnJvbV9pdGVyLT5pdGVtLT5kYXRlOworCisJCQlpZiAoZnJvbV9pdGVyLT5pdGVtLT5nZW5lcmF0aW9uIDwgbWluX2dlbmVyYXRpb24pCisJCQkJbWluX2dlbmVyYXRpb24gPSBmcm9tX2l0ZXItPml0ZW0tPmdlbmVyYXRpb247CisJCX0KKworCQlmcm9tX2l0ZXIgPSBmcm9tX2l0ZXItPm5leHQ7CisJfQorCisJd2hpbGUgKHRvX2l0ZXIpIHsKKwkJaWYgKCFwYXJzZV9jb21taXQodG9faXRlci0+aXRlbSkpIHsKKwkJCWlmICh0b19pdGVyLT5pdGVtLT5kYXRlIDwgbWluX2NvbW1pdF9kYXRlKQorCQkJCW1pbl9jb21taXRfZGF0ZSA9IHRvX2l0ZXItPml0ZW0tPmRhdGU7CisKKwkJCWlmICh0b19pdGVyLT5pdGVtLT5nZW5lcmF0aW9uIDwgbWluX2dlbmVyYXRpb24pCisJCQkJbWluX2dlbmVyYXRpb24gPSB0b19pdGVyLT5pdGVtLT5nZW5lcmF0aW9uOworCQl9CisKKwkJdG9faXRlci0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFBBUkVOVDI7CisKKwkJdG9faXRlciA9IHRvX2l0ZXItPm5leHQ7CisJfQorCisJcmVzdWx0ID0gY2FuX2FsbF9mcm9tX3JlYWNoX3dpdGhfZmxhZygmZnJvbV9vYmpzLCBQQVJFTlQyLCBQQVJFTlQxLAorCQkJCQkgICAgICBtaW5fY29tbWl0X2RhdGUsIG1pbl9nZW5lcmF0aW9uKTsKKworCXdoaWxlIChmcm9tKSB7CisJCWNsZWFyX2NvbW1pdF9tYXJrcyhmcm9tLT5pdGVtLCBQQVJFTlQxKTsKKwkJZnJvbSA9IGZyb20tPm5leHQ7CisJfQorCisJd2hpbGUgKHRvKSB7CisJCWNsZWFyX2NvbW1pdF9tYXJrcyh0by0+aXRlbSwgUEFSRU5UMik7CisJCXRvID0gdG8tPm5leHQ7CisJfQorCisJb2JqZWN0X2FycmF5X2NsZWFyKCZmcm9tX29ianMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqZ2V0X3JlYWNoYWJsZV9zdWJzZXQoc3RydWN0IGNvbW1pdCAqKmZyb20sIGludCBucl9mcm9tLAorCQkJCQkgc3RydWN0IGNvbW1pdCAqKnRvLCBpbnQgbnJfdG8sCisJCQkJCSB1bnNpZ25lZCBpbnQgcmVhY2hhYmxlX2ZsYWcpCit7CisJc3RydWN0IGNvbW1pdCAqKml0ZW07CisJc3RydWN0IGNvbW1pdCAqY3VycmVudDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZvdW5kX2NvbW1pdHMgPSBOVUxMOworCXN0cnVjdCBjb21taXQgKip0b19sYXN0ID0gdG8gKyBucl90bzsKKwlzdHJ1Y3QgY29tbWl0ICoqZnJvbV9sYXN0ID0gZnJvbSArIG5yX2Zyb207CisJdWludDMyX3QgbWluX2dlbmVyYXRpb24gPSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWTsKKwlpbnQgbnVtX3RvX2ZpbmQgPSAwOworCisJc3RydWN0IHByaW9fcXVldWUgcXVldWUgPSB7IGNvbXBhcmVfY29tbWl0c19ieV9nZW5fdGhlbl9jb21taXRfZGF0ZSB9OworCisJZm9yIChpdGVtID0gdG87IGl0ZW0gPCB0b19sYXN0OyBpdGVtKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9ICppdGVtOworCisJCXBhcnNlX2NvbW1pdChjKTsKKwkJaWYgKGMtPmdlbmVyYXRpb24gPCBtaW5fZ2VuZXJhdGlvbikKKwkJCW1pbl9nZW5lcmF0aW9uID0gYy0+Z2VuZXJhdGlvbjsKKworCQlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiBQQVJFTlQxKSkgeworCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFBBUkVOVDE7CisJCQludW1fdG9fZmluZCsrOworCQl9CisJfQorCisJZm9yIChpdGVtID0gZnJvbTsgaXRlbSA8IGZyb21fbGFzdDsgaXRlbSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSAqaXRlbTsKKwkJaWYgKCEoYy0+b2JqZWN0LmZsYWdzICYgUEFSRU5UMikpIHsKKwkJCWMtPm9iamVjdC5mbGFncyB8PSBQQVJFTlQyOworCQkJcGFyc2VfY29tbWl0KGMpOworCisJCQlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsICppdGVtKTsKKwkJfQorCX0KKworCXdoaWxlIChudW1fdG9fZmluZCAmJiAoY3VycmVudCA9IHByaW9fcXVldWVfZ2V0KCZxdWV1ZSkpICE9IE5VTEwpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCWlmIChjdXJyZW50LT5vYmplY3QuZmxhZ3MgJiBQQVJFTlQxKSB7CisJCQljdXJyZW50LT5vYmplY3QuZmxhZ3MgJj0gflBBUkVOVDE7CisJCQljdXJyZW50LT5vYmplY3QuZmxhZ3MgfD0gcmVhY2hhYmxlX2ZsYWc7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY3VycmVudCwgJmZvdW5kX2NvbW1pdHMpOworCQkJbnVtX3RvX2ZpbmQtLTsKKwkJfQorCisJCWZvciAocGFyZW50cyA9IGN1cnJlbnQtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKworCQkJcGFyc2VfY29tbWl0KHApOworCisJCQlpZiAocC0+Z2VuZXJhdGlvbiA8IG1pbl9nZW5lcmF0aW9uKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgUEFSRU5UMikKKwkJCQljb250aW51ZTsKKworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IFBBUkVOVDI7CisJCQlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIHApOworCQl9CisJfQorCisJY2xlYXJfY29tbWl0X21hcmtzX21hbnkobnJfdG8sIHRvLCBQQVJFTlQxKTsKKwljbGVhcl9jb21taXRfbWFya3NfbWFueShucl9mcm9tLCBmcm9tLCBQQVJFTlQyKTsKKworCXJldHVybiBmb3VuZF9jb21taXRzOworfQpkaWZmIC0tZ2l0IGEvY29tbWl0LXJlYWNoLmggYi9jb21taXQtcmVhY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE0M2U4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbWl0LXJlYWNoLmgKQEAgLTAsMCArMSwxMDUgQEAKKyNpZm5kZWYgQ09NTUlUX1JFQUNIX0gKKyNkZWZpbmUgQ09NTUlUX1JFQUNIX0gKKworI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImNvbW1pdC1zbGFiLmgiCisKK3N0cnVjdCBjb21taXRfbGlzdDsKK3N0cnVjdCByZWZfZmlsdGVyOworc3RydWN0IG9iamVjdF9pZDsKK3N0cnVjdCBvYmplY3RfYXJyYXk7CisKK3N0cnVjdCBjb21taXRfbGlzdCAqcmVwb19nZXRfbWVyZ2VfYmFzZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSBzdHJ1Y3QgY29tbWl0ICpyZXYxLAorCQkJCQkgc3RydWN0IGNvbW1pdCAqcmV2Mik7CitzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlcG9fZ2V0X21lcmdlX2Jhc2VzX21hbnkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICAgIHN0cnVjdCBjb21taXQgKm9uZSwgaW50IG4sCisJCQkJCSAgICAgIHN0cnVjdCBjb21taXQgKip0d29zKTsKKy8qIFRvIGJlIHVzZWQgb25seSB3aGVuIG9iamVjdCBmbGFncyBhZnRlciB0aGlzIGNhbGwgbm8gbG9uZ2VyIG1hdHRlciAqLworc3RydWN0IGNvbW1pdF9saXN0ICpyZXBvX2dldF9tZXJnZV9iYXNlc19tYW55X2RpcnR5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkJICAgIHN0cnVjdCBjb21taXQgKm9uZSwgaW50IG4sCisJCQkJCQkgICAgc3RydWN0IGNvbW1pdCAqKnR3b3MpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSBnZXRfbWVyZ2VfYmFzZXMocjEsIHIyKSAgICAgICAgICAgcmVwb19nZXRfbWVyZ2VfYmFzZXModGhlX3JlcG9zaXRvcnksIHIxLCByMikKKyNkZWZpbmUgZ2V0X21lcmdlX2Jhc2VzX21hbnkob25lLCBuLCB0d28pIHJlcG9fZ2V0X21lcmdlX2Jhc2VzX21hbnkodGhlX3JlcG9zaXRvcnksIG9uZSwgbiwgdHdvKQorI2RlZmluZSBnZXRfbWVyZ2VfYmFzZXNfbWFueV9kaXJ0eShvbmUsIG4sIHR3b3MpIHJlcG9fZ2V0X21lcmdlX2Jhc2VzX21hbnlfZGlydHkodGhlX3JlcG9zaXRvcnksIG9uZSwgbiwgdHdvcykKKyNlbmRpZgorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKHN0cnVjdCBjb21taXRfbGlzdCAqaW4pOworCitpbnQgaXNfZGVzY2VuZGFudF9vZihzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqd2l0aF9jb21taXQpOworaW50IHJlcG9faW5fbWVyZ2VfYmFzZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQlzdHJ1Y3QgY29tbWl0ICpyZWZlcmVuY2UpOworaW50IHJlcG9faW5fbWVyZ2VfYmFzZXNfbWFueShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgICBpbnQgbnJfcmVmZXJlbmNlLCBzdHJ1Y3QgY29tbWl0ICoqcmVmZXJlbmNlKTsKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgaW5fbWVyZ2VfYmFzZXMoYzEsIGMyKSByZXBvX2luX21lcmdlX2Jhc2VzKHRoZV9yZXBvc2l0b3J5LCBjMSwgYzIpCisjZGVmaW5lIGluX21lcmdlX2Jhc2VzX21hbnkoYzEsIG4sIGNzKSByZXBvX2luX21lcmdlX2Jhc2VzX21hbnkodGhlX3JlcG9zaXRvcnksIGMxLCBuLCBjcykKKyNlbmRpZgorCisvKgorICogVGFrZXMgYSBsaXN0IG9mIGNvbW1pdHMgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aGVyZSB0aG9zZQorICogaGF2ZSBiZWVuIHJlbW92ZWQgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIG90aGVyIGNvbW1pdHMgaW4KKyAqIHRoZSBsaXN0LiBJdCBpcyB1c2VmdWwgZm9yLCBlLmcuLCByZWR1Y2luZyB0aGUgY29tbWl0cworICogcmFuZG9tbHkgdGhyb3duIGF0IHRoZSBnaXQtbWVyZ2UgY29tbWFuZCBhbmQgcmVtb3ZpbmcKKyAqIHJlZHVuZGFudCBjb21taXRzIHRoYXQgdGhlIHVzZXIgc2hvdWxkbid0IGhhdmUgZ2l2ZW4gdG8gaXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyB0aGUgU1RBTEUgYml0IG9mIHRoZSBjb21taXQgb2JqZWN0cycKKyAqIGZsYWdzLgorICovCitzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlZHVjZV9oZWFkcyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmhlYWRzKTsKKworLyoKKyAqIExpa2UgYHJlZHVjZV9oZWFkcygpYCwgZXhjZXB0IGl0IHJlcGxhY2VzIHRoZSBsaXN0LiBVc2UgdGhpcworICogaW5zdGVhZCBvZiBgZm9vID0gcmVkdWNlX2hlYWRzKGZvbyk7YCB0byBhdm9pZCBtZW1vcnkgbGVha3MuCisgKi8KK3ZvaWQgcmVkdWNlX2hlYWRzX3JlcGxhY2Uoc3RydWN0IGNvbW1pdF9saXN0ICoqaGVhZHMpOworCitpbnQgcmVmX25ld2VyKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQpOworCisvKgorICogVW5rbm93biBoYXMgdG8gYmUgIjAiIGhlcmUsIGJlY2F1c2UgdGhhdCdzIHRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICogY29udGFpbnNfY2FjaGUgc2xhYiBlbnRyaWVzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gYXNzaWduZWQuCisgKi8KK2VudW0gY29udGFpbnNfcmVzdWx0IHsKKwlDT05UQUlOU19VTktOT1dOID0gMCwKKwlDT05UQUlOU19OTywKKwlDT05UQUlOU19ZRVMKK307CisKK2RlZmluZV9jb21taXRfc2xhYihjb250YWluc19jYWNoZSwgZW51bSBjb250YWluc19yZXN1bHQpOworCitpbnQgY29tbWl0X2NvbnRhaW5zKHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgc3RydWN0IGNvbnRhaW5zX2NhY2hlICpjYWNoZSk7CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgZXZlcnkgY29tbWl0IGluICdmcm9tJyBjYW4gcmVhY2ggYXQgbGVhc3Qgb25lIGNvbW1pdAorICogdGhhdCBpcyBtYXJrZWQgd2l0aCAnd2l0aF9mbGFnJy4gQXMgd2UgdHJhdmVyc2UsIHVzZSAnYXNzaWduX2ZsYWcnCisgKiBhcyBhIG1hcmtlciBmb3IgY29tbWl0cyB0aGF0IGFyZSBhbHJlYWR5IHZpc2l0ZWQuIERvIG5vdCB3YWxrCisgKiBjb21taXRzIHdpdGggZGF0ZSBiZWxvdyAnbWluX2NvbW1pdF9kYXRlJyBvciBnZW5lcmF0aW9uIGJlbG93CisgKiAnbWluX2dlbmVyYXRpb24nLgorICovCitpbnQgY2FuX2FsbF9mcm9tX3JlYWNoX3dpdGhfZmxhZyhzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpmcm9tLAorCQkJCSB1bnNpZ25lZCBpbnQgd2l0aF9mbGFnLAorCQkJCSB1bnNpZ25lZCBpbnQgYXNzaWduX2ZsYWcsCisJCQkJIHRpbWVfdCBtaW5fY29tbWl0X2RhdGUsCisJCQkJIHVpbnQzMl90IG1pbl9nZW5lcmF0aW9uKTsKK2ludCBjYW5fYWxsX2Zyb21fcmVhY2goc3RydWN0IGNvbW1pdF9saXN0ICpmcm9tLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnRvLAorCQkgICAgICAgaW50IGNvbW1pdF9kYXRlX2N1dG9mZik7CisKKworLyoKKyAqIFJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBjb250YWluaW5nIHRoZSBjb21taXRzIGluIHRoZSAndG8nIGFycmF5CisgKiB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBhdCBsZWFzdCBvbmUgY29tbWl0IGluIHRoZSAnZnJvbScgYXJyYXkuCisgKiBBbHNvIGFkZCB0aGUgZ2l2ZW4gJ2ZsYWcnIHRvIGVhY2ggb2YgdGhlIGNvbW1pdHMgaW4gdGhlIHJldHVybmVkIGxpc3QuCisgKgorICogVGhpcyBtZXRob2QgdXNlcyB0aGUgUEFSRU5UMSBhbmQgUEFSRU5UMiBmbGFncyBkdXJpbmcgaXRzIG9wZXJhdGlvbiwKKyAqIHNvIGJlIHN1cmUgdGhlc2UgZmxhZ3MgYXJlIG5vdCBzZXQgYmVmb3JlIGNhbGxpbmcgdGhlIG1ldGhvZC4KKyAqLworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfcmVhY2hhYmxlX3N1YnNldChzdHJ1Y3QgY29tbWl0ICoqZnJvbSwgaW50IG5yX2Zyb20sCisJCQkJCSBzdHJ1Y3QgY29tbWl0ICoqdG8sIGludCBucl90bywKKwkJCQkJIHVuc2lnbmVkIGludCByZWFjaGFibGVfZmxhZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tbWl0LXNsYWItZGVjbC5oIGIvY29tbWl0LXNsYWItZGVjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzdiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQtc2xhYi1kZWNsLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBDT01NSVRfU0xBQl9IRFJfSAorI2RlZmluZSBDT01NSVRfU0xBQl9IRFJfSAorCisvKiBhbGxvY2F0ZSB+NTEya0IgYXQgb25jZSwgYWxsb3dpbmcgZm9yIG1hbGxvYyBvdmVyaGVhZCAqLworI2lmbmRlZiBDT01NSVRfU0xBQl9TSVpFCisjZGVmaW5lIENPTU1JVF9TTEFCX1NJWkUgKDUxMioxMDI0LTMyKQorI2VuZGlmCisKKyNkZWZpbmUgZGVjbGFyZV9jb21taXRfc2xhYihzbGFibmFtZSwgZWxlbXR5cGUpIAkJCVwKKwkJCQkJCQkJCVwKK3N0cnVjdCBzbGFibmFtZSB7CQkJCQkJCVwKKwl1bnNpZ25lZCBzbGFiX3NpemU7CQkJCQkJXAorCXVuc2lnbmVkIHN0cmlkZTsJCQkJCQlcCisJdW5zaWduZWQgc2xhYl9jb3VudDsJCQkJCQlcCisJZWxlbXR5cGUgKipzbGFiOwkJCQkJCVwKK30KKworLyoKKyAqIFN0YXRpY2FsbHkgaW5pdGlhbGl6ZSBhIGNvbW1pdCBzbGFiIG5hbWVkICJ2YXIiLiBOb3RlIHRoYXQgdGhpcworICogZXZhbHVhdGVzICJzdHJpZGUiIG11bHRpcGxlIHRpbWVzISBFeGFtcGxlOgorICoKKyAqICAgc3RydWN0IGluZGVncmVlIGluZGVncmVlcyA9IENPTU1JVF9TTEFCX0lOSVQoMSwgaW5kZWdyZWVzKTsKKyAqCisgKi8KKyNkZWZpbmUgQ09NTUlUX1NMQUJfSU5JVChzdHJpZGUsIHZhcikgeyBcCisJQ09NTUlUX1NMQUJfU0laRSAvIHNpemVvZigqKigodmFyKS5zbGFiKSkgLyAoc3RyaWRlKSwgXAorCShzdHJpZGUpLCAwLCBOVUxMIFwKK30KKworI2RlZmluZSBkZWNsYXJlX2NvbW1pdF9zbGFiX3Byb3RvdHlwZXMoc2xhYm5hbWUsIGVsZW10eXBlKQkJXAorCQkJCQkJCQkJXAordm9pZCBpbml0XyAjI3NsYWJuYW1lIyMgX3dpdGhfc3RyaWRlKHN0cnVjdCBzbGFibmFtZSAqcywgdW5zaWduZWQgc3RyaWRlKTsgXAordm9pZCBpbml0XyAjI3NsYWJuYW1lKHN0cnVjdCBzbGFibmFtZSAqcyk7CQkJCVwKK3ZvaWQgY2xlYXJfICMjc2xhYm5hbWUoc3RydWN0IHNsYWJuYW1lICpzKTsJCQkJXAorZWxlbXR5cGUgKnNsYWJuYW1lIyMgX2F0X3BlZWsoc3RydWN0IHNsYWJuYW1lICpzLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjLCBpbnQgYWRkX2lmX21pc3NpbmcpOyBcCitlbGVtdHlwZSAqc2xhYm5hbWUjIyBfYXQoc3RydWN0IHNsYWJuYW1lICpzLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjKTsJXAorZWxlbXR5cGUgKnNsYWJuYW1lIyMgX3BlZWsoc3RydWN0IHNsYWJuYW1lICpzLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjKQorCisjZGVmaW5lIGRlZmluZV9zaGFyZWRfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKSBcCisJZGVjbGFyZV9jb21taXRfc2xhYihzbGFibmFtZSwgZWxlbXR5cGUpOyBcCisJZGVjbGFyZV9jb21taXRfc2xhYl9wcm90b3R5cGVzKHNsYWJuYW1lLCBlbGVtdHlwZSkKKworI2VuZGlmIC8qIENPTU1JVF9TTEFCX0hEUl9IICovCmRpZmYgLS1naXQgYS9jb21taXQtc2xhYi1pbXBsLmggYi9jb21taXQtc2xhYi1pbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMwZWI5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1pdC1zbGFiLWltcGwuaApAQCAtMCwwICsxLDk0IEBACisjaWZuZGVmIENPTU1JVF9TTEFCX0lNUExfSAorI2RlZmluZSBDT01NSVRfU0xBQl9JTVBMX0gKKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorCisjZGVmaW5lIGltcGxlbWVudF9zdGF0aWNfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKSBcCisJaW1wbGVtZW50X2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSwgTUFZQkVfVU5VU0VEIHN0YXRpYykKKworI2RlZmluZSBpbXBsZW1lbnRfc2hhcmVkX2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSkgXAorCWltcGxlbWVudF9jb21taXRfc2xhYihzbGFibmFtZSwgZWxlbXR5cGUsICkKKworI2RlZmluZSBpbXBsZW1lbnRfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlLCBzY29wZSkJCVwKKwkJCQkJCQkJCVwKK3Njb3BlIHZvaWQgaW5pdF8gIyNzbGFibmFtZSMjIF93aXRoX3N0cmlkZShzdHJ1Y3Qgc2xhYm5hbWUgKnMsCQlcCisJCQkJCQkgICB1bnNpZ25lZCBzdHJpZGUpCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGVsZW1fc2l6ZTsJCQkJCQlcCisJaWYgKCFzdHJpZGUpCQkJCQkJCVwKKwkJc3RyaWRlID0gMTsJCQkJCQlcCisJcy0+c3RyaWRlID0gc3RyaWRlOwkJCQkJCVwKKwllbGVtX3NpemUgPSBzaXplb2YoZWxlbXR5cGUpICogc3RyaWRlOwkJCQlcCisJcy0+c2xhYl9zaXplID0gQ09NTUlUX1NMQUJfU0laRSAvIGVsZW1fc2l6ZTsJCQlcCisJcy0+c2xhYl9jb3VudCA9IDA7CQkJCQkJXAorCXMtPnNsYWIgPSBOVUxMOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc2NvcGUgdm9pZCBpbml0XyAjI3NsYWJuYW1lKHN0cnVjdCBzbGFibmFtZSAqcykJCQkJXAorewkJCQkJCQkJCVwKKwlpbml0XyAjI3NsYWJuYW1lIyMgX3dpdGhfc3RyaWRlKHMsIDEpOwkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc2NvcGUgdm9pZCBjbGVhcl8gIyNzbGFibmFtZShzdHJ1Y3Qgc2xhYm5hbWUgKnMpCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgaTsJCQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBzLT5zbGFiX2NvdW50OyBpKyspCQkJCVwKKwkJZnJlZShzLT5zbGFiW2ldKTsJCQkJCVwKKwlzLT5zbGFiX2NvdW50ID0gMDsJCQkJCQlcCisJRlJFRV9BTkRfTlVMTChzLT5zbGFiKTsJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc2NvcGUgZWxlbXR5cGUgKnNsYWJuYW1lIyMgX2F0X3BlZWsoc3RydWN0IHNsYWJuYW1lICpzLAkJCVwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IGNvbW1pdCAqYywgXAorCQkJCQkJICBpbnQgYWRkX2lmX21pc3NpbmcpICAgXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgbnRoX3NsYWIsIG50aF9zbG90OwkJCQlcCisJCQkJCQkJCQlcCisJbnRoX3NsYWIgPSBjLT5pbmRleCAvIHMtPnNsYWJfc2l6ZTsJCQkJXAorCW50aF9zbG90ID0gYy0+aW5kZXggJSBzLT5zbGFiX3NpemU7CQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAocy0+c2xhYl9jb3VudCA8PSBudGhfc2xhYikgewkJCQlcCisJCXVuc2lnbmVkIGludCBpOwkJCQkJCVwKKwkJaWYgKCFhZGRfaWZfbWlzc2luZykJCQkJCVwKKwkJCXJldHVybiBOVUxMOwkJCQkJXAorCQlSRUFMTE9DX0FSUkFZKHMtPnNsYWIsIG50aF9zbGFiICsgMSk7CQkJXAorCQlmb3IgKGkgPSBzLT5zbGFiX2NvdW50OyBpIDw9IG50aF9zbGFiOyBpKyspCQlcCisJCQlzLT5zbGFiW2ldID0gTlVMTDsJCQkJXAorCQlzLT5zbGFiX2NvdW50ID0gbnRoX3NsYWIgKyAxOwkJCQlcCisJfQkJCQkJCQkJXAorCWlmICghcy0+c2xhYltudGhfc2xhYl0pIHsJCQkJCVwKKwkJaWYgKCFhZGRfaWZfbWlzc2luZykJCQkJCVwKKwkJCXJldHVybiBOVUxMOwkJCQkJXAorCQlzLT5zbGFiW250aF9zbGFiXSA9IHhjYWxsb2Mocy0+c2xhYl9zaXplLAkJXAorCQkJCQkgICAgc2l6ZW9mKCoqcy0+c2xhYikgKiBzLT5zdHJpZGUpOwkJXAorCX0JCQkJCQkJCVwKKwlyZXR1cm4gJnMtPnNsYWJbbnRoX3NsYWJdW250aF9zbG90ICogcy0+c3RyaWRlXTsJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzY29wZSBlbGVtdHlwZSAqc2xhYm5hbWUjIyBfYXQoc3RydWN0IHNsYWJuYW1lICpzLAkJCVwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBzbGFibmFtZSMjX2F0X3BlZWsocywgYywgMSk7CQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzY29wZSBlbGVtdHlwZSAqc2xhYm5hbWUjIyBfcGVlayhzdHJ1Y3Qgc2xhYm5hbWUgKnMsCQkJXAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmMpCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHNsYWJuYW1lIyNfYXRfcGVlayhzLCBjLCAwKTsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0cnVjdCBzbGFibmFtZQorCisvKgorICogTm90ZSB0aGF0IHRoaXMgcmVkdW5kYW50IGZvcndhcmQgZGVjbGFyYXRpb24gaXMgcmVxdWlyZWQKKyAqIHRvIGFsbG93IGEgdGVybWluYXRpbmcgc2VtaWNvbG9uLCB3aGljaCBtYWtlcyBpbnN0YW50aWF0aW9ucyBsb29rCisgKiBsaWtlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gIEkuZS4sIHRoZSBleHBhbnNpb24gb2YKKyAqCisgKiAgICBpbXBsZW1lbnRfY29tbWl0X3NsYWIoaW5kZWdyZWUsIGludCwgc3RhdGljKTsKKyAqCisgKiBlbmRzIGluICdzdHJ1Y3QgaW5kZWdyZWU7Jy4gIFRoaXMgd291bGQgb3RoZXJ3aXNlCisgKiBiZSBhIHN5bnRheCBlcnJvciBhY2NvcmRpbmcgKGF0IGxlYXN0KSB0byBJU08gQy4gIEl0J3MgaGFyZCB0bworICogY2F0Y2ggYmVjYXVzZSBHQ0Mgc2lsZW50bHkgcGFyc2VzIGl0IGJ5IGRlZmF1bHQuCisgKi8KKworI2VuZGlmCS8qIENPTU1JVF9TTEFCX0lNUExfSCAqLwpkaWZmIC0tZ2l0IGEvY29tbWl0LXNsYWIuaCBiL2NvbW1pdC1zbGFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliZjBjOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1pdC1zbGFiLmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBDT01NSVRfU0xBQl9ICisjZGVmaW5lIENPTU1JVF9TTEFCX0gKKworI2luY2x1ZGUgImNvbW1pdC1zbGFiLWRlY2wuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi1pbXBsLmgiCisKKy8qCisgKiBkZWZpbmVfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKSBjcmVhdGVzIGJvaWxlcnBsYXRlIGNvZGUgdG8gZGVmaW5lCisgKiBhIG5ldyBzdHJ1Y3QgKHN0cnVjdCBzbGFibmFtZSkgdGhhdCBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhIHBpZWNlIG9mIGRhdGEKKyAqIG9mIGVsZW10eXBlIHRvIGNvbW1pdHMsIGFuZCBhIGZldyBmdW5jdGlvbnMgdG8gdXNlIHRoYXQgc3RydWN0LgorICoKKyAqIEFmdGVyIGluY2x1ZGluZyB0aGlzIGhlYWRlciBmaWxlLCB1c2luZzoKKyAqCisgKiBkZWZpbmVfY29tbWl0X3NsYWIoaW5kZWdyZWUsIGludCk7CisgKgorICogd2lsbCBsZXQgeW91IGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgKgorICogLSBpbnQgKmluZGVncmVlX2F0KHN0cnVjdCBpbmRlZ3JlZSAqLCBzdHJ1Y3QgY29tbWl0ICopOworICoKKyAqICAgVGhpcyBmdW5jdGlvbiBsb2NhdGVzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29tbWl0IGluCisgKiAgIHRoZSBpbmRlZ3JlZSBzbGFiLCBhbmQgcmV0dXJucyB0aGUgcG9pbnRlciB0byBpdC4gIFRoZSBsb2NhdGlvbiB0bworICogICBzdG9yZSB0aGUgZGF0YSBpcyBhbGxvY2F0ZWQgYXMgbmVjZXNzYXJ5LgorICoKKyAqIC0gaW50ICppbmRlZ3JlZV9wZWVrKHN0cnVjdCBpbmRlZ3JlZSAqLCBzdHJ1Y3QgY29tbWl0ICopOworICoKKyAqICAgVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGluZGVncmVlX2F0KCksIGJ1dCBpdCB3aWxsIHJldHVybiBOVUxMCisgKiAgIHVudGlsIGEgY2FsbCB0byBpbmRlZ3JlZV9hdCgpIHdhcyBtYWRlIGZvciB0aGUgY29tbWl0LgorICoKKyAqIC0gdm9pZCBpbml0X2luZGVncmVlKHN0cnVjdCBpbmRlZ3JlZSAqKTsKKyAqICAgdm9pZCBpbml0X2luZGVncmVlX3dpdGhfc3RyaWRlKHN0cnVjdCBpbmRlZ3JlZSAqLCBpbnQpOworICoKKyAqICAgSW5pdGlhbGl6ZXMgdGhlIGluZGVncmVlIHNsYWIgdGhhdCBhc3NvY2lhdGVzIGFuIGFycmF5IG9mIGludGVnZXJzCisgKiAgIHRvIGVhY2ggY29tbWl0LiAnc3RyaWRlJyBzcGVjaWZpZXMgaG93IGJpZyBlYWNoIGFycmF5IGlzLiAgVGhlIHNsYWIKKyAqICAgdGhhdCBpcyBpbml0aWFsaXplZCBieSB0aGUgdmFyaWFudCB3aXRob3V0ICJfd2l0aF9zdHJpZGUiIGFzc29jaWF0ZXMKKyAqICAgZWFjaCBjb21taXQgd2l0aCBhbiBhcnJheSBvZiBvbmUgaW50ZWdlci4KKyAqCisgKiAtIHZvaWQgY2xlYXJfaW5kZWdyZWUoc3RydWN0IGluZGVncmVlICopOworICoKKyAqICAgRW1wdGllcyB0aGUgc2xhYi4gIFRoZSBzbGFiIGNhbiBiZSByZXVzZWQgd2l0aCB0aGUgc2FtZSBzdHJpZGUKKyAqICAgd2l0aG91dCBjYWxsaW5nIGluaXRfaW5kZWdyZWUoKSBhZ2FpbiBvciBjYW4gYmUgcmVjb25maWd1cmVkIHRvIGEKKyAqICAgZGlmZmVyZW50IHN0cmlkZSBieSBjYWxsaW5nIGluaXRfaW5kZWdyZWVfd2l0aF9zdHJpZGUoKS4KKyAqCisgKiAgIENhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgdGhlIHNsYWIgZmFsbHMgb3V0IG9mIHNjb3BlIHRvIGF2b2lkCisgKiAgIGxlYWtpbmcgbWVtb3J5LgorICovCisKKyNkZWZpbmUgZGVmaW5lX2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSkgXAorCWRlY2xhcmVfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKTsgXAorCWltcGxlbWVudF9zdGF0aWNfY29tbWl0X3NsYWIoc2xhYm5hbWUsIGVsZW10eXBlKQorCisjZW5kaWYgLyogQ09NTUlUX1NMQUJfSCAqLwpkaWZmIC0tZ2l0IGEvY29tbWl0LmMgYi9jb21taXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmNmYTQxCi0tLSAvZGV2L251bGwKKysrIGIvY29tbWl0LmMKQEAgLTAsMCArMSwxNjMyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgImFkdmljZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKnJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcyhjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKiopOworCitpbnQgc2F2ZV9jb21taXRfYnVmZmVyID0gMTsKKworY29uc3QgY2hhciAqY29tbWl0X3R5cGUgPSAiY29tbWl0IjsKKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBxdWlldCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBkZXJlZl90YWcociwKKwkJCQkgICAgICAgcGFyc2Vfb2JqZWN0KHIsIG9pZCksCisJCQkJICAgICAgIE5VTEwsIDApOworCisJaWYgKCFvYmopCisJCXJldHVybiBOVUxMOworCXJldHVybiBvYmplY3RfYXNfdHlwZShyLCBvYmosIE9CSl9DT01NSVQsIHF1aWV0KTsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHIsIG9pZCwgMCk7Cit9CisKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfb3JfZGllKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqcmVmX25hbWUpCit7CisJc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghYykKKwkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSAlcyIpLCByZWZfbmFtZSk7CisJaWYgKCFvaWRlcShvaWQsICZjLT5vYmplY3Qub2lkKSkgeworCQl3YXJuaW5nKF8oIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiKSwKKwkJCXJlZl9uYW1lLCBvaWRfdG9faGV4KG9pZCkpOworCX0KKwlyZXR1cm4gYzsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qociwgb2lkKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qociwgb2lkLCBhbGxvY19jb21taXRfbm9kZShyKSk7CisJcmV0dXJuIG9iamVjdF9hc190eXBlKHIsIG9iaiwgT0JKX0NPTU1JVCwgMCk7Cit9CisKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlpZiAoZ2V0X29pZF9jb21taXR0aXNoKG5hbWUsICZvaWQpKQorCQlyZXR1cm4gTlVMTDsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY29tbWl0OworfQorCitzdGF0aWMgdGltZXN0YW1wX3QgcGFyc2VfY29tbWl0X2RhdGUoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICp0YWlsKQoreworCWNvbnN0IGNoYXIgKmRhdGVwdHI7CisKKwlpZiAoYnVmICsgNiA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlpZiAobWVtY21wKGJ1ZiwgImF1dGhvciIsIDYpKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoYnVmIDwgdGFpbCAmJiAqYnVmKysgIT0gJ1xuJykKKwkJLyogbmFkYSAqLzsKKwlpZiAoYnVmICsgOSA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlpZiAobWVtY21wKGJ1ZiwgImNvbW1pdHRlciIsIDkpKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoYnVmIDwgdGFpbCAmJiAqYnVmKysgIT0gJz4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgPj0gdGFpbCkKKwkJcmV0dXJuIDA7CisJZGF0ZXB0ciA9IGJ1ZjsKKwl3aGlsZSAoYnVmIDwgdGFpbCAmJiAqYnVmKysgIT0gJ1xuJykKKwkJLyogbmFkYSAqLzsKKwlpZiAoYnVmID49IHRhaWwpCisJCXJldHVybiAwOworCS8qIGRhdGVwdHIgPCBidWYgJiYgYnVmWy0xXSA9PSAnXG4nLCBzbyBwYXJzaW5nIHdpbGwgc3RvcCBhdCBidWYtMSAqLworCXJldHVybiBwYXJzZV90aW1lc3RhbXAoZGF0ZXB0ciwgTlVMTCwgMTApOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X2dyYWZ0X3NoYTFfYWNjZXNzKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqKmNvbW1pdF9ncmFmdF90YWJsZSA9IHRhYmxlOworCXJldHVybiBjb21taXRfZ3JhZnRfdGFibGVbaW5kZXhdLT5vaWQuaGFzaDsKK30KKworc3RhdGljIGludCBjb21taXRfZ3JhZnRfcG9zKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXJldHVybiBzaGExX3BvcyhzaGExLCByLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzLAorCQkJci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c19uciwKKwkJCWNvbW1pdF9ncmFmdF9zaGExX2FjY2Vzcyk7Cit9CisKK2ludCByZWdpc3Rlcl9jb21taXRfZ3JhZnQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0LAorCQkJICBpbnQgaWdub3JlX2R1cHMpCit7CisJaW50IHBvcyA9IGNvbW1pdF9ncmFmdF9wb3MociwgZ3JhZnQtPm9pZC5oYXNoKTsKKworCWlmICgwIDw9IHBvcykgeworCQlpZiAoaWdub3JlX2R1cHMpCisJCQlmcmVlKGdyYWZ0KTsKKwkJZWxzZSB7CisJCQlmcmVlKHItPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNbcG9zXSk7CisJCQlyLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzW3Bvc10gPSBncmFmdDsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJcG9zID0gLXBvcyAtIDE7CisJQUxMT0NfR1JPVyhyLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzLAorCQkgICByLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzX25yICsgMSwKKwkJICAgci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c19hbGxvYyk7CisJci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c19ucisrOworCWlmIChwb3MgPCByLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzX25yKQorCQltZW1tb3ZlKHItPnBhcnNlZF9vYmplY3RzLT5ncmFmdHMgKyBwb3MgKyAxLAorCQkJci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0cyArIHBvcywKKwkJCShyLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzX25yIC0gcG9zIC0gMSkgKgorCQkJc2l6ZW9mKCpyLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzKSk7CisJci0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c1twb3NdID0gZ3JhZnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjb21taXRfZ3JhZnQgKnJlYWRfZ3JhZnRfbGluZShzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCS8qIFRoZSBmb3JtYXQgaXMganVzdCAiQ29tbWl0IFBhcmVudDEgUGFyZW50MiAuLi5cbiIgKi8KKwlpbnQgaSwgcGhhc2U7CisJY29uc3QgY2hhciAqdGFpbCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQgPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgZHVtbXlfb2lkLCAqb2lkOworCisJc3RyYnVmX3J0cmltKGxpbmUpOworCWlmICghbGluZS0+bGVuIHx8IGxpbmUtPmJ1ZlswXSA9PSAnIycpCisJCXJldHVybiBOVUxMOworCS8qCisJICogcGhhc2UgMCB2ZXJpZmllcyBsaW5lLCBjb3VudHMgaGFzaGVzIGluIGxpbmUgYW5kIGFsbG9jYXRlcyBncmFmdAorCSAqIHBoYXNlIDEgZmlsbHMgZ3JhZnQKKwkgKi8KKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPCAyOyBwaGFzZSsrKSB7CisJCW9pZCA9IGdyYWZ0ID8gJmdyYWZ0LT5vaWQgOiAmZHVtbXlfb2lkOworCQlpZiAocGFyc2Vfb2lkX2hleChsaW5lLT5idWYsIG9pZCwgJnRhaWwpKQorCQkJZ290byBiYWRfZ3JhZnRfZGF0YTsKKwkJZm9yIChpID0gMDsgKnRhaWwgIT0gJ1wwJzsgaSsrKSB7CisJCQlvaWQgPSBncmFmdCA/ICZncmFmdC0+cGFyZW50W2ldIDogJmR1bW15X29pZDsKKwkJCWlmICghaXNzcGFjZSgqdGFpbCsrKSB8fCBwYXJzZV9vaWRfaGV4KHRhaWwsIG9pZCwgJnRhaWwpKQorCQkJCWdvdG8gYmFkX2dyYWZ0X2RhdGE7CisJCX0KKwkJaWYgKCFncmFmdCkgeworCQkJZ3JhZnQgPSB4bWFsbG9jKHN0X2FkZChzaXplb2YoKmdyYWZ0KSwKKwkJCQkJICAgICAgIHN0X211bHQoc2l6ZW9mKHN0cnVjdCBvYmplY3RfaWQpLCBpKSkpOworCQkJZ3JhZnQtPm5yX3BhcmVudCA9IGk7CisJCX0KKwl9CisJcmV0dXJuIGdyYWZ0OworCitiYWRfZ3JhZnRfZGF0YToKKwllcnJvcigiYmFkIGdyYWZ0IGRhdGE6ICVzIiwgbGluZS0+YnVmKTsKKwlhc3NlcnQoIWdyYWZ0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCByZWFkX2dyYWZ0X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKmdyYWZ0X2ZpbGUpCit7CisJRklMRSAqZnAgPSBmb3Blbl9vcl93YXJuKGdyYWZ0X2ZpbGUsICJyIik7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAoIWZwKQorCQlyZXR1cm4gLTE7CisJaWYgKGFkdmljZV9ncmFmdF9maWxlX2RlcHJlY2F0ZWQpCisJCWFkdmlzZShfKCJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorCQkJICJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorCQkJICJcbiIKKwkJCSAiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKwkJCSAidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorCQkJICJcbiIKKwkJCSAiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKwkJCSAiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiKSk7CisJd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIGZwLCAnXG4nKSkgeworCQkvKiBUaGUgZm9ybWF0IGlzIGp1c3QgIkNvbW1pdCBQYXJlbnQxIFBhcmVudDIgLi4uXG4iICovCisJCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0ID0gcmVhZF9ncmFmdF9saW5lKCZidWYpOworCQlpZiAoIWdyYWZ0KQorCQkJY29udGludWU7CisJCWlmIChyZWdpc3Rlcl9jb21taXRfZ3JhZnQociwgZ3JhZnQsIDEpKQorCQkJZXJyb3IoImR1cGxpY2F0ZSBncmFmdCBkYXRhOiAlcyIsIGJ1Zi5idWYpOworCX0KKwlmY2xvc2UoZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworfQorCit2b2lkIHByZXBhcmVfY29tbWl0X2dyYWZ0KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWNoYXIgKmdyYWZ0X2ZpbGU7CisKKwlpZiAoci0+cGFyc2VkX29iamVjdHMtPmNvbW1pdF9ncmFmdF9wcmVwYXJlZCkKKwkJcmV0dXJuOworCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCXJldHVybjsKKworCWdyYWZ0X2ZpbGUgPSBnZXRfZ3JhZnRfZmlsZShyKTsKKwlyZWFkX2dyYWZ0X2ZpbGUociwgZ3JhZnRfZmlsZSk7CisJLyogbWFrZSBzdXJlIHNoYWxsb3dzIGFyZSByZWFkICovCisJaXNfcmVwb3NpdG9yeV9zaGFsbG93KHIpOworCXItPnBhcnNlZF9vYmplY3RzLT5jb21taXRfZ3JhZnRfcHJlcGFyZWQgPSAxOworfQorCitzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpsb29rdXBfY29tbWl0X2dyYWZ0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IHBvczsKKwlwcmVwYXJlX2NvbW1pdF9ncmFmdChyKTsKKwlwb3MgPSBjb21taXRfZ3JhZnRfcG9zKHIsIG9pZC0+aGFzaCk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiByLT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzW3Bvc107Cit9CisKK2ludCBmb3JfZWFjaF9jb21taXRfZ3JhZnQoZWFjaF9jb21taXRfZ3JhZnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IGksIHJldDsKKwlmb3IgKGkgPSByZXQgPSAwOyBpIDwgdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNfbnIgJiYgIXJldDsgaSsrKQorCQlyZXQgPSBmbih0aGVfcmVwb3NpdG9yeS0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c1tpXSwgY2JfZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHVucmVnaXN0ZXJfc2hhbGxvdyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IHBvcyA9IGNvbW1pdF9ncmFmdF9wb3ModGhlX3JlcG9zaXRvcnksIG9pZC0+aGFzaCk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiAtMTsKKwlpZiAocG9zICsgMSA8IHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzX25yKQorCQlNT1ZFX0FSUkFZKHRoZV9yZXBvc2l0b3J5LT5wYXJzZWRfb2JqZWN0cy0+Z3JhZnRzICsgcG9zLAorCQkJICAgdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5ncmFmdHMgKyBwb3MgKyAxLAorCQkJICAgdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5ncmFmdHNfbnIgLSBwb3MgLSAxKTsKKwl0aGVfcmVwb3NpdG9yeS0+cGFyc2VkX29iamVjdHMtPmdyYWZ0c19uci0tOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY29tbWl0X2J1ZmZlciB7CisJdm9pZCAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CitkZWZpbmVfY29tbWl0X3NsYWIoYnVmZmVyX3NsYWIsIHN0cnVjdCBjb21taXRfYnVmZmVyKTsKKworc3RydWN0IGJ1ZmZlcl9zbGFiICphbGxvY2F0ZV9jb21taXRfYnVmZmVyX3NsYWIodm9pZCkKK3sKKwlzdHJ1Y3QgYnVmZmVyX3NsYWIgKmJzID0geG1hbGxvYyhzaXplb2YoKmJzKSk7CisJaW5pdF9idWZmZXJfc2xhYihicyk7CisJcmV0dXJuIGJzOworfQorCit2b2lkIGZyZWVfY29tbWl0X2J1ZmZlcl9zbGFiKHN0cnVjdCBidWZmZXJfc2xhYiAqYnMpCit7CisJY2xlYXJfYnVmZmVyX3NsYWIoYnMpOworCWZyZWUoYnMpOworfQorCit2b2lkIHNldF9jb21taXRfYnVmZmVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBjb21taXRfYnVmZmVyICp2ID0gYnVmZmVyX3NsYWJfYXQoCisJCXItPnBhcnNlZF9vYmplY3RzLT5idWZmZXJfc2xhYiwgY29tbWl0KTsKKwl2LT5idWZmZXIgPSBidWZmZXI7CisJdi0+c2l6ZSA9IHNpemU7Cit9CisKK2NvbnN0IHZvaWQgKmdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2J1ZmZlciAqdiA9IGJ1ZmZlcl9zbGFiX3BlZWsoCisJCXItPnBhcnNlZF9vYmplY3RzLT5idWZmZXJfc2xhYiwgY29tbWl0KTsKKwlpZiAoIXYpIHsKKwkJaWYgKHNpemVwKQorCQkJKnNpemVwID0gMDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChzaXplcCkKKwkJKnNpemVwID0gdi0+c2l6ZTsKKwlyZXR1cm4gdi0+YnVmZmVyOworfQorCitjb25zdCB2b2lkICpyZXBvX2dldF9jb21taXRfYnVmZmVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgICB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwljb25zdCB2b2lkICpyZXQgPSBnZXRfY2FjaGVkX2NvbW1pdF9idWZmZXIociwgY29tbWl0LCBzaXplcCk7CisJaWYgKCFyZXQpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCXJldCA9IHJlcG9fcmVhZF9vYmplY3RfZmlsZShyLCAmY29tbWl0LT5vYmplY3Qub2lkLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIXJldCkKKwkJCWRpZSgiY2Fubm90IHJlYWQgY29tbWl0IG9iamVjdCAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCWlmICh0eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoImV4cGVjdGVkIGNvbW1pdCBmb3IgJXMsIGdvdCAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSwgdHlwZV9uYW1lKHR5cGUpKTsKKwkJaWYgKHNpemVwKQorCQkJKnNpemVwID0gc2l6ZTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZXBvX3VudXNlX2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgICBjb25zdCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGNvbW1pdF9idWZmZXIgKnYgPSBidWZmZXJfc2xhYl9wZWVrKAorCQlyLT5wYXJzZWRfb2JqZWN0cy0+YnVmZmVyX3NsYWIsIGNvbW1pdCk7CisJaWYgKCEodiAmJiB2LT5idWZmZXIgPT0gYnVmZmVyKSkKKwkJZnJlZSgodm9pZCAqKWJ1ZmZlcik7Cit9CisKK3ZvaWQgZnJlZV9jb21taXRfYnVmZmVyKHN0cnVjdCBwYXJzZWRfb2JqZWN0X3Bvb2wgKnBvb2wsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2J1ZmZlciAqdiA9IGJ1ZmZlcl9zbGFiX3BlZWsoCisJCXBvb2wtPmJ1ZmZlcl9zbGFiLCBjb21taXQpOworCWlmICh2KSB7CisJCUZSRUVfQU5EX05VTEwodi0+YnVmZmVyKTsKKwkJdi0+c2l6ZSA9IDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NvbW1pdF90cmVlKHN0cnVjdCBjb21taXQgKmMsIHN0cnVjdCB0cmVlICp0KQoreworCWMtPm1heWJlX3RyZWUgPSB0OworfQorCitzdHJ1Y3QgdHJlZSAqcmVwb19nZXRfY29tbWl0X3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGNvbW1pdC0+bWF5YmVfdHJlZSB8fCAhY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gY29tbWl0LT5tYXliZV90cmVlOworCisJaWYgKGNvbW1pdC0+Z3JhcGhfcG9zICE9IENPTU1JVF9OT1RfRlJPTV9HUkFQSCkKKwkJcmV0dXJuIGdldF9jb21taXRfdHJlZV9pbl9ncmFwaChyLCBjb21taXQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBvYmplY3RfaWQgKmdldF9jb21taXRfdHJlZV9vaWQoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCB0cmVlICp0cmVlID0gZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCk7CisJcmV0dXJuIHRyZWUgPyAmdHJlZS0+b2JqZWN0Lm9pZCA6IE5VTEw7Cit9CisKK3ZvaWQgcmVsZWFzZV9jb21taXRfbWVtb3J5KHN0cnVjdCBwYXJzZWRfb2JqZWN0X3Bvb2wgKnBvb2wsIHN0cnVjdCBjb21taXQgKmMpCit7CisJc2V0X2NvbW1pdF90cmVlKGMsIE5VTEwpOworCWZyZWVfY29tbWl0X2J1ZmZlcihwb29sLCBjKTsKKwljLT5pbmRleCA9IDA7CisJZnJlZV9jb21taXRfbGlzdChjLT5wYXJlbnRzKTsKKworCWMtPm9iamVjdC5wYXJzZWQgPSAwOworfQorCitjb25zdCB2b2lkICpkZXRhY2hfY29tbWl0X2J1ZmZlcihzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXN0cnVjdCBjb21taXRfYnVmZmVyICp2ID0gYnVmZmVyX3NsYWJfcGVlaygKKwkJdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5idWZmZXJfc2xhYiwgY29tbWl0KTsKKwl2b2lkICpyZXQ7CisKKwlpZiAoIXYpIHsKKwkJaWYgKHNpemVwKQorCQkJKnNpemVwID0gMDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldCA9IHYtPmJ1ZmZlcjsKKwlpZiAoc2l6ZXApCisJCSpzaXplcCA9IHYtPnNpemU7CisKKwl2LT5idWZmZXIgPSBOVUxMOworCXYtPnNpemUgPSAwOworCXJldHVybiByZXQ7Cit9CisKK2ludCBwYXJzZV9jb21taXRfYnVmZmVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0ICppdGVtLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGNoZWNrX2dyYXBoKQoreworCWNvbnN0IGNoYXIgKnRhaWwgPSBidWZmZXI7CisJY29uc3QgY2hhciAqYnVmcHRyID0gYnVmZmVyOworCXN0cnVjdCBvYmplY3RfaWQgcGFyZW50OworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwdHI7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQ7CisJY29uc3QgaW50IHRyZWVfZW50cnlfbGVuID0gdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA1OworCWNvbnN0IGludCBwYXJlbnRfZW50cnlfbGVuID0gdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA3OworCXN0cnVjdCB0cmVlICp0cmVlOworCisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCisJaWYgKGl0ZW0tPnBhcmVudHMpIHsKKwkJLyoKKwkJICogUHJlc3VtYWJseSB0aGlzIGlzIGxlZnRvdmVyIGZyb20gYW4gZWFybGllciBmYWlsZWQgcGFyc2U7CisJCSAqIGNsZWFyIGl0IG91dCBpbiBwcmVwYXJhdGlvbiBmb3IgdXMgcmUtcGFyc2luZyAod2UnbGwgaGl0IHRoZQorCQkgKiBzYW1lIGVycm9yLCBidXQgdGhhdCdzIGdvb2QsIHNpbmNlIGl0IGxldHMgb3VyIGNhbGxlciBrbm93CisJCSAqIHRoZSByZXN1bHQgY2Fubm90IGJlIHRydXN0ZWQuCisJCSAqLworCQlmcmVlX2NvbW1pdF9saXN0KGl0ZW0tPnBhcmVudHMpOworCQlpdGVtLT5wYXJlbnRzID0gTlVMTDsKKwl9CisKKwl0YWlsICs9IHNpemU7CisJaWYgKHRhaWwgPD0gYnVmcHRyICsgdHJlZV9lbnRyeV9sZW4gKyAxIHx8IG1lbWNtcChidWZwdHIsICJ0cmVlICIsIDUpIHx8CisJCQlidWZwdHJbdHJlZV9lbnRyeV9sZW5dICE9ICdcbicpCisJCXJldHVybiBlcnJvcigiYm9ndXMgY29tbWl0IG9iamVjdCAlcyIsIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwlpZiAoZ2V0X29pZF9oZXgoYnVmcHRyICsgNSwgJnBhcmVudCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoImJhZCB0cmVlIHBvaW50ZXIgaW4gY29tbWl0ICVzIiwKKwkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCXRyZWUgPSBsb29rdXBfdHJlZShyLCAmcGFyZW50KTsKKwlpZiAoIXRyZWUpCisJCXJldHVybiBlcnJvcigiYmFkIHRyZWUgcG9pbnRlciAlcyBpbiBjb21taXQgJXMiLAorCQkJICAgICBvaWRfdG9faGV4KCZwYXJlbnQpLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJc2V0X2NvbW1pdF90cmVlKGl0ZW0sIHRyZWUpOworCWJ1ZnB0ciArPSB0cmVlX2VudHJ5X2xlbiArIDE7IC8qICJ0cmVlICIgKyAiaGV4IHNoYTEiICsgIlxuIiAqLworCXBwdHIgPSAmaXRlbS0+cGFyZW50czsKKworCWdyYWZ0ID0gbG9va3VwX2NvbW1pdF9ncmFmdChyLCAmaXRlbS0+b2JqZWN0Lm9pZCk7CisJd2hpbGUgKGJ1ZnB0ciArIHBhcmVudF9lbnRyeV9sZW4gPCB0YWlsICYmICFtZW1jbXAoYnVmcHRyLCAicGFyZW50ICIsIDcpKSB7CisJCXN0cnVjdCBjb21taXQgKm5ld19wYXJlbnQ7CisKKwkJaWYgKHRhaWwgPD0gYnVmcHRyICsgcGFyZW50X2VudHJ5X2xlbiArIDEgfHwKKwkJICAgIGdldF9vaWRfaGV4KGJ1ZnB0ciArIDcsICZwYXJlbnQpIHx8CisJCSAgICBidWZwdHJbcGFyZW50X2VudHJ5X2xlbl0gIT0gJ1xuJykKKwkJCXJldHVybiBlcnJvcigiYmFkIHBhcmVudHMgaW4gY29tbWl0ICVzIiwgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCQlidWZwdHIgKz0gcGFyZW50X2VudHJ5X2xlbiArIDE7CisJCS8qCisJCSAqIFRoZSBjbG9uZSBpcyBzaGFsbG93IGlmIG5yX3BhcmVudCA8IDAsIGFuZCB3ZSBtdXN0CisJCSAqIG5vdCB0cmF2ZXJzZSBpdHMgcmVhbCBwYXJlbnRzIGV2ZW4gd2hlbiB3ZSB1bmhpZGUgdGhlbS4KKwkJICovCisJCWlmIChncmFmdCAmJiAoZ3JhZnQtPm5yX3BhcmVudCA8IDAgfHwgZ3JhZnRzX3JlcGxhY2VfcGFyZW50cykpCisJCQljb250aW51ZTsKKwkJbmV3X3BhcmVudCA9IGxvb2t1cF9jb21taXQociwgJnBhcmVudCk7CisJCWlmICghbmV3X3BhcmVudCkKKwkJCXJldHVybiBlcnJvcigiYmFkIHBhcmVudCAlcyBpbiBjb21taXQgJXMiLAorCQkJCSAgICAgb2lkX3RvX2hleCgmcGFyZW50KSwKKwkJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQobmV3X3BhcmVudCwgcHB0ciktPm5leHQ7CisJfQorCWlmIChncmFmdCkgeworCQlpbnQgaTsKKwkJc3RydWN0IGNvbW1pdCAqbmV3X3BhcmVudDsKKwkJZm9yIChpID0gMDsgaSA8IGdyYWZ0LT5ucl9wYXJlbnQ7IGkrKykgeworCQkJbmV3X3BhcmVudCA9IGxvb2t1cF9jb21taXQociwKKwkJCQkJCSAgICZncmFmdC0+cGFyZW50W2ldKTsKKwkJCWlmICghbmV3X3BhcmVudCkKKwkJCQlyZXR1cm4gZXJyb3IoImJhZCBncmFmdCBwYXJlbnQgJXMgaW4gY29tbWl0ICVzIiwKKwkJCQkJICAgICBvaWRfdG9faGV4KCZncmFmdC0+cGFyZW50W2ldKSwKKwkJCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChuZXdfcGFyZW50LCBwcHRyKS0+bmV4dDsKKwkJfQorCX0KKwlpdGVtLT5kYXRlID0gcGFyc2VfY29tbWl0X2RhdGUoYnVmcHRyLCB0YWlsKTsKKworCWlmIChjaGVja19ncmFwaCkKKwkJbG9hZF9jb21taXRfZ3JhcGhfaW5mbyhyLCBpdGVtKTsKKworCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOworCXJldHVybiAwOworfQorCitpbnQgcmVwb19wYXJzZV9jb21taXRfaW50ZXJuYWwoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICAgc3RydWN0IGNvbW1pdCAqaXRlbSwKKwkJCSAgICAgICBpbnQgcXVpZXRfb25fbWlzc2luZywKKwkJCSAgICAgICBpbnQgdXNlX2NvbW1pdF9ncmFwaCkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKCFpdGVtKQorCQlyZXR1cm4gLTE7CisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCWlmICh1c2VfY29tbWl0X2dyYXBoICYmIHBhcnNlX2NvbW1pdF9pbl9ncmFwaChyLCBpdGVtKSkKKwkJcmV0dXJuIDA7CisJYnVmZmVyID0gcmVwb19yZWFkX29iamVjdF9maWxlKHIsICZpdGVtLT5vYmplY3Qub2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gcXVpZXRfb25fbWlzc2luZyA/IC0xIDoKKwkJCWVycm9yKCJDb3VsZCBub3QgcmVhZCAlcyIsCisJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwlpZiAodHlwZSAhPSBPQkpfQ09NTUlUKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKCJPYmplY3QgJXMgbm90IGEgY29tbWl0IiwKKwkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCX0KKworCXJldCA9IHBhcnNlX2NvbW1pdF9idWZmZXIociwgaXRlbSwgYnVmZmVyLCBzaXplLCAwKTsKKwlpZiAoc2F2ZV9jb21taXRfYnVmZmVyICYmICFyZXQpIHsKKwkJc2V0X2NvbW1pdF9idWZmZXIociwgaXRlbSwgYnVmZmVyLCBzaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCWZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmVwb19wYXJzZV9jb21taXRfZ2VudGx5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICBzdHJ1Y3QgY29tbWl0ICppdGVtLCBpbnQgcXVpZXRfb25fbWlzc2luZykKK3sKKwlyZXR1cm4gcmVwb19wYXJzZV9jb21taXRfaW50ZXJuYWwociwgaXRlbSwgcXVpZXRfb25fbWlzc2luZywgMSk7Cit9CisKK3ZvaWQgcGFyc2VfY29tbWl0X29yX2RpZShzdHJ1Y3QgY29tbWl0ICppdGVtKQoreworCWlmIChwYXJzZV9jb21taXQoaXRlbSkpCisJCWRpZSgidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIsCisJCSAgICBpdGVtID8gb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkgOiAiKG51bGwpIik7Cit9CisKK2ludCBmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIsIGNvbnN0IGNoYXIgKipzdWJqZWN0KQoreworCWNvbnN0IGNoYXIgKmVvbDsKKwljb25zdCBjaGFyICpwID0gY29tbWl0X2J1ZmZlcjsKKworCXdoaWxlICgqcCAmJiAoKnAgIT0gJ1xuJyB8fCBwWzFdICE9ICdcbicpKQorCQlwKys7CisJaWYgKCpwKSB7CisJCXAgPSBza2lwX2JsYW5rX2xpbmVzKHAgKyAyKTsKKwkJZW9sID0gc3RyY2hybnVsKHAsICdcbicpOworCX0gZWxzZQorCQllb2wgPSBwOworCisJKnN1YmplY3QgPSBwOworCisJcmV0dXJuIGVvbCAtIHA7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3RfaW5zZXJ0KHN0cnVjdCBjb21taXQgKml0ZW0sIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3RfcCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5ld19saXN0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9saXN0KSk7CisJbmV3X2xpc3QtPml0ZW0gPSBpdGVtOworCW5ld19saXN0LT5uZXh0ID0gKmxpc3RfcDsKKwkqbGlzdF9wID0gbmV3X2xpc3Q7CisJcmV0dXJuIG5ld19saXN0OworfQorCit1bnNpZ25lZCBjb21taXRfbGlzdF9jb3VudChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmwpCit7CisJdW5zaWduZWQgYyA9IDA7CisJZm9yICg7IGw7IGwgPSBsLT5uZXh0ICkKKwkJYysrOworCXJldHVybiBjOworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvcHlfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqaGVhZCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHAgPSAmaGVhZDsKKwl3aGlsZSAobGlzdCkgeworCQlwcCA9IGNvbW1pdF9saXN0X2FwcGVuZChsaXN0LT5pdGVtLCBwcCk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwlyZXR1cm4gaGVhZDsKK30KKwordm9pZCBmcmVlX2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwl3aGlsZSAobGlzdCkKKwkJcG9wX2NvbW1pdCgmbGlzdCk7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqIGNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHN0cnVjdCBjb21taXQgKml0ZW0sIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHAgPSBsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwl3aGlsZSAoKHAgPSAqcHApICE9IE5VTEwpIHsKKwkJaWYgKHAtPml0ZW0tPmRhdGUgPCBpdGVtLT5kYXRlKSB7CisJCQlicmVhazsKKwkJfQorCQlwcCA9ICZwLT5uZXh0OworCX0KKwlyZXR1cm4gY29tbWl0X2xpc3RfaW5zZXJ0KGl0ZW0sIHBwKTsKK30KKworc3RhdGljIGludCBjb21taXRfbGlzdF9jb21wYXJlX2J5X2RhdGUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwl0aW1lc3RhbXBfdCBhX2RhdGUgPSAoKGNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqKWEpLT5pdGVtLT5kYXRlOworCXRpbWVzdGFtcF90IGJfZGF0ZSA9ICgoY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICopYiktPml0ZW0tPmRhdGU7CisJaWYgKGFfZGF0ZSA8IGJfZGF0ZSkKKwkJcmV0dXJuIDE7CisJaWYgKGFfZGF0ZSA+IGJfZGF0ZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqY29tbWl0X2xpc3RfZ2V0X25leHQoY29uc3Qgdm9pZCAqYSkKK3sKKwlyZXR1cm4gKChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKilhKS0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgY29tbWl0X2xpc3Rfc2V0X25leHQodm9pZCAqYSwgdm9pZCAqbmV4dCkKK3sKKwkoKHN0cnVjdCBjb21taXRfbGlzdCAqKWEpLT5uZXh0ID0gbmV4dDsKK30KKwordm9pZCBjb21taXRfbGlzdF9zb3J0X2J5X2RhdGUoc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCkKK3sKKwkqbGlzdCA9IGxsaXN0X21lcmdlc29ydCgqbGlzdCwgY29tbWl0X2xpc3RfZ2V0X25leHQsIGNvbW1pdF9saXN0X3NldF9uZXh0LAorCQkJCWNvbW1pdF9saXN0X2NvbXBhcmVfYnlfZGF0ZSk7Cit9CisKK3N0cnVjdCBjb21taXQgKnBvcF9tb3N0X3JlY2VudF9jb21taXQoc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWFyaykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpyZXQgPSBwb3BfY29tbWl0KGxpc3QpOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IHJldC0+cGFyZW50czsKKworCXdoaWxlIChwYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBhcmVudHMtPml0ZW07CisJCWlmICghcGFyc2VfY29tbWl0KGNvbW1pdCkgJiYgIShjb21taXQtPm9iamVjdC5mbGFncyAmIG1hcmspKSB7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBtYXJrOworCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUoY29tbWl0LCBsaXN0KTsKKwkJfQorCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfY29tbWl0X21hcmtzXzEoc3RydWN0IGNvbW1pdF9saXN0ICoqcGxpc3QsCisJCQkJIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgaW50IG1hcmspCit7CisJd2hpbGUgKGNvbW1pdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkJaWYgKCEobWFyayAmIGNvbW1pdC0+b2JqZWN0LmZsYWdzKSkKKwkJCXJldHVybjsKKworCQljb21taXQtPm9iamVjdC5mbGFncyAmPSB+bWFyazsKKworCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQlpZiAoIXBhcmVudHMpCisJCQlyZXR1cm47CisKKwkJd2hpbGUgKChwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkpCisJCQljb21taXRfbGlzdF9pbnNlcnQocGFyZW50cy0+aXRlbSwgcGxpc3QpOworCisJCWNvbW1pdCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKwl9Cit9CisKK3ZvaWQgY2xlYXJfY29tbWl0X21hcmtzX21hbnkoaW50IG5yLCBzdHJ1Y3QgY29tbWl0ICoqY29tbWl0LCB1bnNpZ25lZCBpbnQgbWFyaykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCisJd2hpbGUgKG5yLS0pIHsKKwkJY2xlYXJfY29tbWl0X21hcmtzXzEoJmxpc3QsICpjb21taXQsIG1hcmspOworCQljb21taXQrKzsKKwl9CisJd2hpbGUgKGxpc3QpCisJCWNsZWFyX2NvbW1pdF9tYXJrc18xKCZsaXN0LCBwb3BfY29tbWl0KCZsaXN0KSwgbWFyayk7Cit9CisKK3ZvaWQgY2xlYXJfY29tbWl0X21hcmtzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgaW50IG1hcmspCit7CisJY2xlYXJfY29tbWl0X21hcmtzX21hbnkoMSwgJmNvbW1pdCwgbWFyayk7Cit9CisKK3N0cnVjdCBjb21taXQgKnBvcF9jb21taXQoc3RydWN0IGNvbW1pdF9saXN0ICoqc3RhY2spCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0b3AgPSAqc3RhY2s7CisJc3RydWN0IGNvbW1pdCAqaXRlbSA9IHRvcCA/IHRvcC0+aXRlbSA6IE5VTEw7CisKKwlpZiAodG9wKSB7CisJCSpzdGFjayA9IHRvcC0+bmV4dDsKKwkJZnJlZSh0b3ApOworCX0KKwlyZXR1cm4gaXRlbTsKK30KKworLyoKKyAqIFRvcG9sb2dpY2FsIHNvcnQgc3VwcG9ydAorICovCisKKy8qIGNvdW50IG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGhhdmUgbm90IGJlZW4gZW1pdHRlZCAqLworZGVmaW5lX2NvbW1pdF9zbGFiKGluZGVncmVlX3NsYWIsIGludCk7CisKK2RlZmluZV9jb21taXRfc2xhYihhdXRob3JfZGF0ZV9zbGFiLCB0aW1lc3RhbXBfdCk7CisKK3ZvaWQgcmVjb3JkX2F1dGhvcl9kYXRlKHN0cnVjdCBhdXRob3JfZGF0ZV9zbGFiICphdXRob3JfZGF0ZSwKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCBjaGFyICpidWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpOworCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKwljb25zdCBjaGFyICppZGVudF9saW5lOworCXNpemVfdCBpZGVudF9sZW47CisJY2hhciAqZGF0ZV9lbmQ7CisJdGltZXN0YW1wX3QgZGF0ZTsKKworCWlkZW50X2xpbmUgPSBmaW5kX2NvbW1pdF9oZWFkZXIoYnVmZmVyLCAiYXV0aG9yIiwgJmlkZW50X2xlbik7CisJaWYgKCFpZGVudF9saW5lKQorCQlnb3RvIGZhaWxfZXhpdDsgLyogbm8gYXV0aG9yIGxpbmUgKi8KKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGlkZW50X2xpbmUsIGlkZW50X2xlbikgfHwKKwkgICAgIWlkZW50LmRhdGVfYmVnaW4gfHwgIWlkZW50LmRhdGVfZW5kKQorCQlnb3RvIGZhaWxfZXhpdDsgLyogbWFsZm9ybWVkICJhdXRob3IiIGxpbmUgKi8KKworCWRhdGUgPSBwYXJzZV90aW1lc3RhbXAoaWRlbnQuZGF0ZV9iZWdpbiwgJmRhdGVfZW5kLCAxMCk7CisJaWYgKGRhdGVfZW5kICE9IGlkZW50LmRhdGVfZW5kKQorCQlnb3RvIGZhaWxfZXhpdDsgLyogbWFsZm9ybWVkIGRhdGUgKi8KKwkqKGF1dGhvcl9kYXRlX3NsYWJfYXQoYXV0aG9yX2RhdGUsIGNvbW1pdCkpID0gZGF0ZTsKKworZmFpbF9leGl0OgorCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIpOworfQorCitpbnQgY29tcGFyZV9jb21taXRzX2J5X2F1dGhvcl9kYXRlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXywKKwkJCQkgICB2b2lkICpjYl9kYXRhKQoreworCWNvbnN0IHN0cnVjdCBjb21taXQgKmEgPSBhXywgKmIgPSBiXzsKKwlzdHJ1Y3QgYXV0aG9yX2RhdGVfc2xhYiAqYXV0aG9yX2RhdGUgPSBjYl9kYXRhOworCXRpbWVzdGFtcF90IGFfZGF0ZSA9ICooYXV0aG9yX2RhdGVfc2xhYl9hdChhdXRob3JfZGF0ZSwgYSkpOworCXRpbWVzdGFtcF90IGJfZGF0ZSA9ICooYXV0aG9yX2RhdGVfc2xhYl9hdChhdXRob3JfZGF0ZSwgYikpOworCisJLyogbmV3ZXIgY29tbWl0cyB3aXRoIGxhcmdlciBkYXRlIGZpcnN0ICovCisJaWYgKGFfZGF0ZSA8IGJfZGF0ZSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYV9kYXRlID4gYl9kYXRlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21wYXJlX2NvbW1pdHNfYnlfZ2VuX3RoZW5fY29tbWl0X2RhdGUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLCB2b2lkICp1bnVzZWQpCit7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqYSA9IGFfLCAqYiA9IGJfOworCisJLyogbmV3ZXIgY29tbWl0cyBmaXJzdCAqLworCWlmIChhLT5nZW5lcmF0aW9uIDwgYi0+Z2VuZXJhdGlvbikKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYS0+Z2VuZXJhdGlvbiA+IGItPmdlbmVyYXRpb24pCisJCXJldHVybiAtMTsKKworCS8qIHVzZSBkYXRlIGFzIGEgaGV1cmlzdGljIHdoZW4gZ2VuZXJhdGlvbnMgYXJlIGVxdWFsICovCisJaWYgKGEtPmRhdGUgPCBiLT5kYXRlKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChhLT5kYXRlID4gYi0+ZGF0ZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgY29tcGFyZV9jb21taXRzX2J5X2NvbW1pdF9kYXRlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXywgdm9pZCAqdW51c2VkKQoreworCWNvbnN0IHN0cnVjdCBjb21taXQgKmEgPSBhXywgKmIgPSBiXzsKKwkvKiBuZXdlciBjb21taXRzIHdpdGggbGFyZ2VyIGRhdGUgZmlyc3QgKi8KKwlpZiAoYS0+ZGF0ZSA8IGItPmRhdGUpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGEtPmRhdGUgPiBiLT5kYXRlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQZXJmb3JtcyBhbiBpbi1wbGFjZSB0b3BvbG9naWNhbCBzb3J0IG9uIHRoZSBsaXN0IHN1cHBsaWVkLgorICovCit2b2lkIHNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwgZW51bSByZXZfc29ydF9vcmRlciBzb3J0X29yZGVyKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dCwgKm9yaWcgPSAqbGlzdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcHRyOworCXN0cnVjdCBpbmRlZ3JlZV9zbGFiIGluZGVncmVlOworCXN0cnVjdCBwcmlvX3F1ZXVlIHF1ZXVlOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgYXV0aG9yX2RhdGVfc2xhYiBhdXRob3JfZGF0ZTsKKworCWlmICghb3JpZykKKwkJcmV0dXJuOworCSpsaXN0ID0gTlVMTDsKKworCWluaXRfaW5kZWdyZWVfc2xhYigmaW5kZWdyZWUpOworCW1lbXNldCgmcXVldWUsICdcMCcsIHNpemVvZihxdWV1ZSkpOworCisJc3dpdGNoIChzb3J0X29yZGVyKSB7CisJZGVmYXVsdDogLyogUkVWX1NPUlRfSU5fR1JBUEhfT1JERVIgKi8KKwkJcXVldWUuY29tcGFyZSA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgUkVWX1NPUlRfQllfQ09NTUlUX0RBVEU6CisJCXF1ZXVlLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGU7CisJCWJyZWFrOworCWNhc2UgUkVWX1NPUlRfQllfQVVUSE9SX0RBVEU6CisJCWluaXRfYXV0aG9yX2RhdGVfc2xhYigmYXV0aG9yX2RhdGUpOworCQlxdWV1ZS5jb21wYXJlID0gY29tcGFyZV9jb21taXRzX2J5X2F1dGhvcl9kYXRlOworCQlxdWV1ZS5jYl9kYXRhID0gJmF1dGhvcl9kYXRlOworCQlicmVhazsKKwl9CisKKwkvKiBNYXJrIHRoZW0gYW5kIGNsZWFyIHRoZSBpbmRlZ3JlZSAqLworCWZvciAobmV4dCA9IG9yaWc7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IG5leHQtPml0ZW07CisJCSooaW5kZWdyZWVfc2xhYl9hdCgmaW5kZWdyZWUsIGNvbW1pdCkpID0gMTsKKwkJLyogYWxzbyByZWNvcmQgdGhlIGF1dGhvciBkYXRlcywgaWYgbmVlZGVkICovCisJCWlmIChzb3J0X29yZGVyID09IFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFKQorCQkJcmVjb3JkX2F1dGhvcl9kYXRlKCZhdXRob3JfZGF0ZSwgY29tbWl0KTsKKwl9CisKKwkvKiB1cGRhdGUgdGhlIGluZGVncmVlICovCisJZm9yIChuZXh0ID0gb3JpZzsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gbmV4dC0+aXRlbS0+cGFyZW50czsKKwkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisJCQlpbnQgKnBpID0gaW5kZWdyZWVfc2xhYl9hdCgmaW5kZWdyZWUsIHBhcmVudCk7CisKKwkJCWlmICgqcGkpCisJCQkJKCpwaSkrKzsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQl9CisJfQorCisJLyoKKwkgKiBmaW5kIHRoZSB0aXBzCisJICoKKwkgKiB0aXBzIGFyZSBub2RlcyBub3QgcmVhY2hhYmxlIGZyb20gYW55IG90aGVyIG5vZGUgaW4gdGhlIGxpc3QKKwkgKgorCSAqIHRoZSB0aXBzIHNlcnZlIGFzIGEgc3RhcnRpbmcgc2V0IGZvciB0aGUgd29yayBxdWV1ZS4KKwkgKi8KKwlmb3IgKG5leHQgPSBvcmlnOyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBuZXh0LT5pdGVtOworCisJCWlmICgqKGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBjb21taXQpKSA9PSAxKQorCQkJcHJpb19xdWV1ZV9wdXQoJnF1ZXVlLCBjb21taXQpOworCX0KKworCS8qCisJICogVGhpcyBpcyB1bmZvcnR1bmF0ZTsgdGhlIGluaXRpYWwgdGlwcyBuZWVkIHRvIGJlIHNob3duCisJICogaW4gdGhlIG9yZGVyIGdpdmVuIGZyb20gdGhlIHJldmlzaW9uIHRyYXZlcnNhbCBtYWNoaW5lcnkuCisJICovCisJaWYgKHNvcnRfb3JkZXIgPT0gUkVWX1NPUlRfSU5fR1JBUEhfT1JERVIpCisJCXByaW9fcXVldWVfcmV2ZXJzZSgmcXVldWUpOworCisJLyogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIGNvbW1pdCBsaXN0ICovCisJZnJlZV9jb21taXRfbGlzdChvcmlnKTsKKworCXBwdHIgPSBsaXN0OworCSpsaXN0ID0gTlVMTDsKKwl3aGlsZSAoKGNvbW1pdCA9IHByaW9fcXVldWVfZ2V0KCZxdWV1ZSkpICE9IE5VTEwpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50cyA7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQkJaW50ICpwaSA9IGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBwYXJlbnQpOworCisJCQlpZiAoISpwaSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIHBhcmVudHMgYXJlIG9ubHkgZW5xdWV1ZWQgZm9yIGVtaXNzaW9uCisJCQkgKiB3aGVuIGFsbCB0aGVpciBjaGlsZHJlbiBoYXZlIGJlZW4gZW1pdHRlZCB0aGVyZWJ5CisJCQkgKiBndWFyYW50ZWVpbmcgdG9wb2xvZ2ljYWwgb3JkZXIuCisJCQkgKi8KKwkJCWlmICgtLSgqcGkpID09IDEpCisJCQkJcHJpb19xdWV1ZV9wdXQoJnF1ZXVlLCBwYXJlbnQpOworCQl9CisJCS8qCisJCSAqIGFsbCBjaGlsZHJlbiBvZiBjb21taXQgaGF2ZSBhbHJlYWR5IGJlZW4KKwkJICogZW1pdHRlZC4gd2UgY2FuIGVtaXQgaXQgbm93LgorCQkgKi8KKwkJKihpbmRlZ3JlZV9zbGFiX2F0KCZpbmRlZ3JlZSwgY29tbWl0KSkgPSAwOworCisJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcHB0ciktPm5leHQ7CisJfQorCisJY2xlYXJfaW5kZWdyZWVfc2xhYigmaW5kZWdyZWUpOworCWNsZWFyX3ByaW9fcXVldWUoJnF1ZXVlKTsKKwlpZiAoc29ydF9vcmRlciA9PSBSRVZfU09SVF9CWV9BVVRIT1JfREFURSkKKwkJY2xlYXJfYXV0aG9yX2RhdGVfc2xhYigmYXV0aG9yX2RhdGUpOworfQorCitzdHJ1Y3QgcmV2X2NvbGxlY3QgeworCXN0cnVjdCBjb21taXQgKipjb21taXQ7CisJaW50IG5yOworCWludCBhbGxvYzsKKwl1bnNpZ25lZCBpbnQgaW5pdGlhbCA6IDE7Cit9OworCitzdGF0aWMgdm9pZCBhZGRfb25lX2NvbW1pdChzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCByZXZfY29sbGVjdCAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlpZiAoaXNfbnVsbF9vaWQob2lkKSkKKwkJcmV0dXJuOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIWNvbW1pdCB8fAorCSAgICAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUTVBfTUFSSykgfHwKKwkgICAgcGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCXJldHVybjsKKworCUFMTE9DX0dST1cocmV2cy0+Y29tbWl0LCByZXZzLT5uciArIDEsIHJldnMtPmFsbG9jKTsKKwlyZXZzLT5jb21taXRbcmV2cy0+bnIrK10gPSBjb21taXQ7CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVE1QX01BUks7Cit9CisKK3N0YXRpYyBpbnQgY29sbGVjdF9vbmVfcmVmbG9nX2VudChzdHJ1Y3Qgb2JqZWN0X2lkICpvb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpub2lkLAorCQkJCSAgY29uc3QgY2hhciAqaWRlbnQsIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwKKwkJCQkgIGludCB0eiwgY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JkYXRhKQoreworCXN0cnVjdCByZXZfY29sbGVjdCAqcmV2cyA9IGNiZGF0YTsKKworCWlmIChyZXZzLT5pbml0aWFsKSB7CisJCXJldnMtPmluaXRpYWwgPSAwOworCQlhZGRfb25lX2NvbW1pdChvb2lkLCByZXZzKTsKKwl9CisJYWRkX29uZV9jb21taXQobm9pZCwgcmV2cyk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjb21taXQgKmdldF9mb3JrX3BvaW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgcmV2X2NvbGxlY3QgcmV2czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmJhc2VzOworCWludCBpOworCXN0cnVjdCBjb21taXQgKnJldCA9IE5VTEw7CisKKwltZW1zZXQoJnJldnMsIDAsIHNpemVvZihyZXZzKSk7CisJcmV2cy5pbml0aWFsID0gMTsKKwlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZm5hbWUsIGNvbGxlY3Rfb25lX3JlZmxvZ19lbnQsICZyZXZzKTsKKworCWlmICghcmV2cy5uciAmJiAhZ2V0X29pZChyZWZuYW1lLCAmb2lkKSkKKwkJYWRkX29uZV9jb21taXQoJm9pZCwgJnJldnMpOworCisJZm9yIChpID0gMDsgaSA8IHJldnMubnI7IGkrKykKKwkJcmV2cy5jb21taXRbaV0tPm9iamVjdC5mbGFncyAmPSB+VE1QX01BUks7CisKKwliYXNlcyA9IGdldF9tZXJnZV9iYXNlc19tYW55KGNvbW1pdCwgcmV2cy5uciwgcmV2cy5jb21taXQpOworCisJLyoKKwkgKiBUaGVyZSBzaG91bGQgYmUgb25lIGFuZCBvbmx5IG9uZSBtZXJnZSBiYXNlLCB3aGVuIHdlIGZvdW5kCisJICogYSBjb21tb24gYW5jZXN0b3IgYW1vbmcgcmVmbG9nIGVudHJpZXMuCisJICovCisJaWYgKCFiYXNlcyB8fCBiYXNlcy0+bmV4dCkKKwkJZ290byBjbGVhbnVwX3JldHVybjsKKworCS8qIEFuZCB0aGUgZm91bmQgb25lIG11c3QgYmUgb25lIG9mIHRoZSByZWZsb2cgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCByZXZzLm5yOyBpKyspCisJCWlmICgmYmFzZXMtPml0ZW0tPm9iamVjdCA9PSAmcmV2cy5jb21taXRbaV0tPm9iamVjdCkKKwkJCWJyZWFrOyAvKiBmb3VuZCAqLworCWlmIChyZXZzLm5yIDw9IGkpCisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisKKwlyZXQgPSBiYXNlcy0+aXRlbTsKKworY2xlYW51cF9yZXR1cm46CisJZnJlZV9jb21taXRfbGlzdChiYXNlcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZ3BnX3NpZ19oZWFkZXJbXSA9ICJncGdzaWciOworc3RhdGljIGNvbnN0IGludCBncGdfc2lnX2hlYWRlcl9sZW4gPSBzaXplb2YoZ3BnX3NpZ19oZWFkZXIpIC0gMTsKKworc3RhdGljIGludCBkb19zaWduX2NvbW1pdChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmtleWlkKQoreworCXN0cnVjdCBzdHJidWYgc2lnID0gU1RSQlVGX0lOSVQ7CisJaW50IGluc3BvcywgY29weXBvczsKKwljb25zdCBjaGFyICplb2g7CisKKwkvKiBmaW5kIHRoZSBlbmQgb2YgdGhlIGhlYWRlciAqLworCWVvaCA9IHN0cnN0cihidWYtPmJ1ZiwgIlxuXG4iKTsKKwlpZiAoIWVvaCkKKwkJaW5zcG9zID0gYnVmLT5sZW47CisJZWxzZQorCQlpbnNwb3MgPSBlb2ggLSBidWYtPmJ1ZiArIDE7CisKKwlpZiAoIWtleWlkIHx8ICEqa2V5aWQpCisJCWtleWlkID0gZ2V0X3NpZ25pbmdfa2V5KCk7CisJaWYgKHNpZ25fYnVmZmVyKGJ1ZiwgJnNpZywga2V5aWQpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzaWcpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChjb3B5cG9zID0gMDsgc2lnLmJ1Zltjb3B5cG9zXTsgKSB7CisJCWNvbnN0IGNoYXIgKmJvbCA9IHNpZy5idWYgKyBjb3B5cG9zOworCQljb25zdCBjaGFyICplb2wgPSBzdHJjaHJudWwoYm9sLCAnXG4nKTsKKwkJaW50IGxlbiA9IChlb2wgLSBib2wpICsgISEqZW9sOworCisJCWlmICghY29weXBvcykgeworCQkJc3RyYnVmX2luc2VydChidWYsIGluc3BvcywgZ3BnX3NpZ19oZWFkZXIsIGdwZ19zaWdfaGVhZGVyX2xlbik7CisJCQlpbnNwb3MgKz0gZ3BnX3NpZ19oZWFkZXJfbGVuOworCQl9CisJCXN0cmJ1Zl9pbnNlcnRzdHIoYnVmLCBpbnNwb3MrKywgIiAiKTsKKwkJc3RyYnVmX2luc2VydChidWYsIGluc3BvcywgYm9sLCBsZW4pOworCQlpbnNwb3MgKz0gbGVuOworCQljb3B5cG9zICs9IGxlbjsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNpZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9zaWduZWRfY29tbWl0KGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCXN0cnVjdCBzdHJidWYgKnBheWxvYWQsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSkKK3sKKworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljb25zdCBjaGFyICpidWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsICZzaXplKTsKKwlpbnQgaW5fc2lnbmF0dXJlLCBzYXdfc2lnbmF0dXJlID0gLTE7CisJY29uc3QgY2hhciAqbGluZSwgKnRhaWw7CisKKwlsaW5lID0gYnVmZmVyOworCXRhaWwgPSBidWZmZXIgKyBzaXplOworCWluX3NpZ25hdHVyZSA9IDA7CisJc2F3X3NpZ25hdHVyZSA9IDA7CisJd2hpbGUgKGxpbmUgPCB0YWlsKSB7CisJCWNvbnN0IGNoYXIgKnNpZyA9IE5VTEw7CisJCWNvbnN0IGNoYXIgKm5leHQgPSBtZW1jaHIobGluZSwgJ1xuJywgdGFpbCAtIGxpbmUpOworCisJCW5leHQgPSBuZXh0ID8gbmV4dCArIDEgOiB0YWlsOworCQlpZiAoaW5fc2lnbmF0dXJlICYmIGxpbmVbMF0gPT0gJyAnKQorCQkJc2lnID0gbGluZSArIDE7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGxpbmUsIGdwZ19zaWdfaGVhZGVyKSAmJgorCQkJIGxpbmVbZ3BnX3NpZ19oZWFkZXJfbGVuXSA9PSAnICcpCisJCQlzaWcgPSBsaW5lICsgZ3BnX3NpZ19oZWFkZXJfbGVuICsgMTsKKwkJaWYgKHNpZykgeworCQkJc3RyYnVmX2FkZChzaWduYXR1cmUsIHNpZywgbmV4dCAtIHNpZyk7CisJCQlzYXdfc2lnbmF0dXJlID0gMTsKKwkJCWluX3NpZ25hdHVyZSA9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAoKmxpbmUgPT0gJ1xuJykKKwkJCQkvKiBkdW1wIHRoZSB3aG9sZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciAqLworCQkJCW5leHQgPSB0YWlsOworCQkJc3RyYnVmX2FkZChwYXlsb2FkLCBsaW5lLCBuZXh0IC0gbGluZSk7CisJCQlpbl9zaWduYXR1cmUgPSAwOworCQl9CisJCWxpbmUgPSBuZXh0OworCX0KKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgYnVmZmVyKTsKKwlyZXR1cm4gc2F3X3NpZ25hdHVyZTsKK30KKworaW50IHJlbW92ZV9zaWduYXR1cmUoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNvbnN0IGNoYXIgKmxpbmUgPSBidWYtPmJ1ZjsKKwljb25zdCBjaGFyICp0YWlsID0gYnVmLT5idWYgKyBidWYtPmxlbjsKKwlpbnQgaW5fc2lnbmF0dXJlID0gMDsKKwljb25zdCBjaGFyICpzaWdfc3RhcnQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnNpZ19lbmQgPSBOVUxMOworCisJd2hpbGUgKGxpbmUgPCB0YWlsKSB7CisJCWNvbnN0IGNoYXIgKm5leHQgPSBtZW1jaHIobGluZSwgJ1xuJywgdGFpbCAtIGxpbmUpOworCQluZXh0ID0gbmV4dCA/IG5leHQgKyAxIDogdGFpbDsKKworCQlpZiAoaW5fc2lnbmF0dXJlICYmIGxpbmVbMF0gPT0gJyAnKQorCQkJc2lnX2VuZCA9IG5leHQ7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGxpbmUsIGdwZ19zaWdfaGVhZGVyKSAmJgorCQkJIGxpbmVbZ3BnX3NpZ19oZWFkZXJfbGVuXSA9PSAnICcpIHsKKwkJCXNpZ19zdGFydCA9IGxpbmU7CisJCQlzaWdfZW5kID0gbmV4dDsKKwkJCWluX3NpZ25hdHVyZSA9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAoKmxpbmUgPT0gJ1xuJykKKwkJCQkvKiBkdW1wIHRoZSB3aG9sZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciAqLworCQkJCW5leHQgPSB0YWlsOworCQkJaW5fc2lnbmF0dXJlID0gMDsKKwkJfQorCQlsaW5lID0gbmV4dDsKKwl9CisKKwlpZiAoc2lnX3N0YXJ0KQorCQlzdHJidWZfcmVtb3ZlKGJ1Ziwgc2lnX3N0YXJ0IC0gYnVmLT5idWYsIHNpZ19lbmQgLSBzaWdfc3RhcnQpOworCisJcmV0dXJuIHNpZ19zdGFydCAhPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc2lnbmVkX3RhZyhzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICoqKnRhaWwpCit7CisJc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICpkZXNjOworCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICptZXJnZXRhZzsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplLCBsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJZGVzYyA9IG1lcmdlX3JlbW90ZV91dGlsKHBhcmVudCk7CisJaWYgKCFkZXNjIHx8ICFkZXNjLT5vYmopCisJCXJldHVybjsKKwlidWYgPSByZWFkX29iamVjdF9maWxlKCZkZXNjLT5vYmotPm9pZCwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZiB8fCB0eXBlICE9IE9CSl9UQUcpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJbGVuID0gcGFyc2Vfc2lnbmF0dXJlKGJ1Ziwgc2l6ZSk7CisJaWYgKHNpemUgPT0gbGVuKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCS8qCisJICogV2UgY291bGQgdmVyaWZ5IHRoaXMgc2lnbmF0dXJlIGFuZCBlaXRoZXIgb21pdCB0aGUgdGFnIHdoZW4KKwkgKiBpdCBkb2VzIG5vdCB2YWxpZGF0ZSwgYnV0IHRoZSBpbnRlZ3JhdG9yIG1heSBub3QgaGF2ZSB0aGUKKwkgKiBwdWJsaWMga2V5IG9mIHRoZSBzaWduZXIgb2YgdGhlIHRhZyBoZSBpcyBtZXJnaW5nLCB3aGlsZSBhCisJICogbGF0ZXIgYXVkaXRvciBtYXkgaGF2ZSBpdCB3aGlsZSBhdWRpdGluZywgc28gbGV0J3Mgbm90IHJ1bgorCSAqIHZlcmlmeS1zaWduZWQtYnVmZmVyIGhlcmUgZm9yIG5vdy4uLgorCSAqCisJICogaWYgKHZlcmlmeV9zaWduZWRfYnVmZmVyKGJ1ZiwgbGVuLCBidWYgKyBsZW4sIHNpemUgLSBsZW4sIC4uLikpCisJICoJd2Fybigid2FybmluZzogc2lnbmVkIHRhZyB1bnZlcmlmaWVkLiIpOworCSAqLworCW1lcmdldGFnID0geGNhbGxvYygxLCBzaXplb2YoKm1lcmdldGFnKSk7CisJbWVyZ2V0YWctPmtleSA9IHhzdHJkdXAoIm1lcmdldGFnIik7CisJbWVyZ2V0YWctPnZhbHVlID0gYnVmOworCW1lcmdldGFnLT5sZW4gPSBzaXplOworCisJKip0YWlsID0gbWVyZ2V0YWc7CisJKnRhaWwgPSAmbWVyZ2V0YWctPm5leHQ7CisJcmV0dXJuOworCitmcmVlX3JldHVybjoKKwlmcmVlKGJ1Zik7Cit9CisKK2ludCBjaGVja19jb21taXRfc2lnbmF0dXJlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBheWxvYWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNpZ25hdHVyZSA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAxOworCisJc2lnYy0+cmVzdWx0ID0gJ04nOworCisJaWYgKHBhcnNlX3NpZ25lZF9jb21taXQoY29tbWl0LCAmcGF5bG9hZCwgJnNpZ25hdHVyZSkgPD0gMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gY2hlY2tfc2lnbmF0dXJlKHBheWxvYWQuYnVmLCBwYXlsb2FkLmxlbiwgc2lnbmF0dXJlLmJ1ZiwKKwkJc2lnbmF0dXJlLmxlbiwgc2lnYyk7CisKKyBvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnBheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzaWduYXR1cmUpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCB2ZXJpZnlfbWVyZ2Vfc2lnbmF0dXJlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IHZlcmJvc2l0eSwKKwkJCSAgICBpbnQgY2hlY2tfdHJ1c3QpCit7CisJY2hhciBoZXhbR0lUX01BWF9IRVhTWiArIDFdOworCXN0cnVjdCBzaWduYXR1cmVfY2hlY2sgc2lnbmF0dXJlX2NoZWNrOworCWludCByZXQ7CisJbWVtc2V0KCZzaWduYXR1cmVfY2hlY2ssIDAsIHNpemVvZihzaWduYXR1cmVfY2hlY2spKTsKKworCXJldCA9IGNoZWNrX2NvbW1pdF9zaWduYXR1cmUoY29tbWl0LCAmc2lnbmF0dXJlX2NoZWNrKTsKKworCWZpbmRfdW5pcXVlX2FiYnJldl9yKGhleCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgREVGQVVMVF9BQkJSRVYpOworCXN3aXRjaCAoc2lnbmF0dXJlX2NoZWNrLnJlc3VsdCkgeworCWNhc2UgJ0cnOgorCQlpZiAocmV0IHx8IChjaGVja190cnVzdCAmJiBzaWduYXR1cmVfY2hlY2sudHJ1c3RfbGV2ZWwgPCBUUlVTVF9NQVJHSU5BTCkpCisJCQlkaWUoXygiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgIgorCQkJICAgICAgImFsbGVnZWRseSBieSAlcy4iKSwgaGV4LCBzaWduYXR1cmVfY2hlY2suc2lnbmVyKTsKKwkJYnJlYWs7CisJY2FzZSAnQic6CisJCWRpZShfKCJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgIgorCQkgICAgICAiYWxsZWdlZGx5IGJ5ICVzLiIpLCBoZXgsIHNpZ25hdHVyZV9jaGVjay5zaWduZXIpOworCWRlZmF1bHQ6IC8qICdOJyAqLworCQlkaWUoXygiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIpLCBoZXgpOworCX0KKwlpZiAodmVyYm9zaXR5ID49IDAgJiYgc2lnbmF0dXJlX2NoZWNrLnJlc3VsdCA9PSAnRycpCisJCXByaW50ZihfKCJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iKSwKKwkJICAgICAgIGhleCwgc2lnbmF0dXJlX2NoZWNrLnNpZ25lcik7CisKKwlzaWduYXR1cmVfY2hlY2tfY2xlYXIoJnNpZ25hdHVyZV9jaGVjayk7Cit9CisKK3ZvaWQgYXBwZW5kX21lcmdlX3RhZ19oZWFkZXJzKHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywKKwkJCSAgICAgIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICoqKnRhaWwpCit7CisJd2hpbGUgKHBhcmVudHMpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJaGFuZGxlX3NpZ25lZF90YWcocGFyZW50LCB0YWlsKTsKKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfZXh0cmFfaGVhZGVyKHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwKKwkJCSAgICAgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhKQoreworCXN0cmJ1Zl9hZGRzdHIoYnVmZmVyLCBleHRyYS0+a2V5KTsKKwlpZiAoZXh0cmEtPmxlbikKKwkJc3RyYnVmX2FkZF9saW5lcyhidWZmZXIsICIgIiwgZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRjaChidWZmZXIsICdcbicpOworfQorCitzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqcmVhZF9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCQkgICAgICBjb25zdCBjaGFyICoqZXhjbHVkZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljb25zdCBjaGFyICpidWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsICZzaXplKTsKKwlleHRyYSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcyhidWZmZXIsIHNpemUsIGV4Y2x1ZGUpOworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIpOworCXJldHVybiBleHRyYTsKK30KKworaW50IGZvcl9lYWNoX21lcmdldGFnKGVhY2hfbWVyZ2V0YWdfZm4gZm4sIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEsICp0b19mcmVlOworCWludCByZXMgPSAwOworCisJdG9fZnJlZSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcnMoY29tbWl0LCBOVUxMKTsKKwlmb3IgKGV4dHJhID0gdG9fZnJlZTsgIXJlcyAmJiBleHRyYTsgZXh0cmEgPSBleHRyYS0+bmV4dCkgeworCQlpZiAoc3RyY21wKGV4dHJhLT5rZXksICJtZXJnZXRhZyIpKQorCQkJY29udGludWU7IC8qIG5vdCBhIG1lcmdlIHRhZyAqLworCQlyZXMgPSBmbihjb21taXQsIGV4dHJhLCBkYXRhKTsKKwl9CisJZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyh0b19mcmVlKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdGFuZGFyZF9oZWFkZXJfZmllbGQoY29uc3QgY2hhciAqZmllbGQsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuICgobGVuID09IDQgJiYgIW1lbWNtcChmaWVsZCwgInRyZWUiLCA0KSkgfHwKKwkJKGxlbiA9PSA2ICYmICFtZW1jbXAoZmllbGQsICJwYXJlbnQiLCA2KSkgfHwKKwkJKGxlbiA9PSA2ICYmICFtZW1jbXAoZmllbGQsICJhdXRob3IiLCA2KSkgfHwKKwkJKGxlbiA9PSA5ICYmICFtZW1jbXAoZmllbGQsICJjb21taXR0ZXIiLCA5KSkgfHwKKwkJKGxlbiA9PSA4ICYmICFtZW1jbXAoZmllbGQsICJlbmNvZGluZyIsIDgpKSk7Cit9CisKK3N0YXRpYyBpbnQgZXhjbHVkZWRfaGVhZGVyX2ZpZWxkKGNvbnN0IGNoYXIgKmZpZWxkLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICoqZXhjbHVkZSkKK3sKKwlpZiAoIWV4Y2x1ZGUpCisJCXJldHVybiAwOworCisJd2hpbGUgKCpleGNsdWRlKSB7CisJCXNpemVfdCB4bGVuID0gc3RybGVuKCpleGNsdWRlKTsKKwkJaWYgKGxlbiA9PSB4bGVuICYmICFtZW1jbXAoZmllbGQsICpleGNsdWRlLCB4bGVuKSkKKwkJCXJldHVybiAxOworCQlleGNsdWRlKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKnJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcygKKwljb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLAorCWNvbnN0IGNoYXIgKipleGNsdWRlKQoreworCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSA9IE5VTEwsICoqdGFpbCA9ICZleHRyYSwgKml0ID0gTlVMTDsKKwljb25zdCBjaGFyICpsaW5lLCAqbmV4dCwgKmVvZiwgKmVvYjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJZm9yIChsaW5lID0gYnVmZmVyLCBlb2IgPSBsaW5lICsgc2l6ZTsKKwkgICAgIGxpbmUgPCBlb2IgJiYgKmxpbmUgIT0gJ1xuJzsKKwkgICAgIGxpbmUgPSBuZXh0KSB7CisJCW5leHQgPSBtZW1jaHIobGluZSwgJ1xuJywgZW9iIC0gbGluZSk7CisJCW5leHQgPSBuZXh0ID8gbmV4dCArIDEgOiBlb2I7CisJCWlmICgqbGluZSA9PSAnICcpIHsKKwkJCS8qIGNvbnRpbnVhdGlvbiAqLworCQkJaWYgKGl0KQorCQkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgbGluZSArIDEsIG5leHQgLSAobGluZSArIDEpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpdCkKKwkJCWl0LT52YWx1ZSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJml0LT5sZW4pOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCWl0ID0gTlVMTDsKKworCQllb2YgPSBtZW1jaHIobGluZSwgJyAnLCBuZXh0IC0gbGluZSk7CisJCWlmICghZW9mKQorCQkJZW9mID0gbmV4dDsKKwkJZWxzZSBpZiAoc3RhbmRhcmRfaGVhZGVyX2ZpZWxkKGxpbmUsIGVvZiAtIGxpbmUpIHx8CisJCQkgZXhjbHVkZWRfaGVhZGVyX2ZpZWxkKGxpbmUsIGVvZiAtIGxpbmUsIGV4Y2x1ZGUpKQorCQkJY29udGludWU7CisKKwkJaXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXQpKTsKKwkJaXQtPmtleSA9IHhtZW1kdXB6KGxpbmUsIGVvZi1saW5lKTsKKwkJKnRhaWwgPSBpdDsKKwkJdGFpbCA9ICZpdC0+bmV4dDsKKwkJaWYgKGVvZiArIDEgPCBuZXh0KQorCQkJc3RyYnVmX2FkZCgmYnVmLCBlb2YgKyAxLCBuZXh0IC0gKGVvZiArIDEpKTsKKwl9CisJaWYgKGl0KQorCQlpdC0+dmFsdWUgPSBzdHJidWZfZGV0YWNoKCZidWYsICZpdC0+bGVuKTsKKwlyZXR1cm4gZXh0cmE7Cit9CisKK3ZvaWQgZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEpCit7CisJd2hpbGUgKGV4dHJhKSB7CisJCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpuZXh0ID0gZXh0cmEtPm5leHQ7CisJCWZyZWUoZXh0cmEtPmtleSk7CisJCWZyZWUoZXh0cmEtPnZhbHVlKTsKKwkJZnJlZShleHRyYSk7CisJCWV4dHJhID0gbmV4dDsKKwl9Cit9CisKK2ludCBjb21taXRfdHJlZShjb25zdCBjaGFyICptc2csIHNpemVfdCBtc2dfbGVuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlLAorCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHN0cnVjdCBvYmplY3RfaWQgKnJldCwKKwkJY29uc3QgY2hhciAqYXV0aG9yLCBjb25zdCBjaGFyICpzaWduX2NvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMLCAqKnRhaWwgPSAmZXh0cmE7CisJaW50IHJlc3VsdDsKKworCWFwcGVuZF9tZXJnZV90YWdfaGVhZGVycyhwYXJlbnRzLCAmdGFpbCk7CisJcmVzdWx0ID0gY29tbWl0X3RyZWVfZXh0ZW5kZWQobXNnLCBtc2dfbGVuLCB0cmVlLCBwYXJlbnRzLCByZXQsCisJCQkJICAgICAgYXV0aG9yLCBzaWduX2NvbW1pdCwgZXh0cmEpOworCWZyZWVfY29tbWl0X2V4dHJhX2hlYWRlcnMoZXh0cmEpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9pbnZhbGlkX3V0ZjgoY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBvZmZzZXQgPSAwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X2NvZGVwb2ludFtdID0geworCQkweDdmLCAweDdmZiwgMHhmZmZmLCAweDEwZmZmZgorCX07CisKKwl3aGlsZSAobGVuKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpidWYrKzsKKwkJaW50IGJ5dGVzLCBiYWRfb2Zmc2V0OworCQl1bnNpZ25lZCBpbnQgY29kZXBvaW50OworCQl1bnNpZ25lZCBpbnQgbWluX3ZhbCwgbWF4X3ZhbDsKKworCQlsZW4tLTsKKwkJb2Zmc2V0Kys7CisKKwkJLyogU2ltcGxlIFVTLUFTQ0lJPyBObyB3b3JyaWVzLiAqLworCQlpZiAoYyA8IDB4ODApCisJCQljb250aW51ZTsKKworCQliYWRfb2Zmc2V0ID0gb2Zmc2V0LTE7CisKKwkJLyoKKwkJICogQ291bnQgaG93IG1hbnkgbW9yZSBoaWdoIGJpdHMgc2V0OiB0aGF0J3MgaG93CisJCSAqIG1hbnkgbW9yZSBieXRlcyB0aGlzIHNlcXVlbmNlIHNob3VsZCBoYXZlLgorCQkgKi8KKwkJYnl0ZXMgPSAwOworCQl3aGlsZSAoYyAmIDB4NDApIHsKKwkJCWMgPDw9IDE7CisJCQlieXRlcysrOworCQl9CisKKwkJLyoKKwkJICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMgbW9yZSBieXRlcy4gIExvbmdlciBzZXF1ZW5jZXMgcmVzdWx0IGluCisJCSAqIGNvZGVwb2ludHMgYmV5b25kIFUrMTBGRkZGLCB3aGljaCBhcmUgZ3VhcmFudGVlZCBuZXZlciB0byBleGlzdC4KKwkJICovCisJCWlmIChieXRlcyA8IDEgfHwgMyA8IGJ5dGVzKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisKKwkJLyogRG8gd2UgKmhhdmUqIHRoYXQgbWFueSBieXRlcz8gKi8KKwkJaWYgKGxlbiA8IGJ5dGVzKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisKKwkJLyoKKwkJICogUGxhY2UgdGhlIGVuY29kZWQgYml0cyBhdCB0aGUgYm90dG9tIG9mIHRoZSB2YWx1ZSBhbmQgY29tcHV0ZSB0aGUKKwkJICogdmFsaWQgcmFuZ2UuCisJCSAqLworCQljb2RlcG9pbnQgPSAoYyAmIDB4N2YpID4+IGJ5dGVzOworCQltaW5fdmFsID0gbWF4X2NvZGVwb2ludFtieXRlcy0xXSArIDE7CisJCW1heF92YWwgPSBtYXhfY29kZXBvaW50W2J5dGVzXTsKKworCQlvZmZzZXQgKz0gYnl0ZXM7CisJCWxlbiAtPSBieXRlczsKKworCQkvKiBBbmQgdmVyaWZ5IHRoYXQgdGhleSBhcmUgZ29vZCBjb250aW51YXRpb24gYnl0ZXMgKi8KKwkJZG8geworCQkJY29kZXBvaW50IDw8PSA2OworCQkJY29kZXBvaW50IHw9ICpidWYgJiAweDNmOworCQkJaWYgKCgqYnVmKysgJiAweGMwKSAhPSAweDgwKQorCQkJCXJldHVybiBiYWRfb2Zmc2V0OworCQl9IHdoaWxlICgtLWJ5dGVzKTsKKworCQkvKiBSZWplY3QgY29kZXBvaW50cyB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UgZm9yIHRoZSBzZXF1ZW5jZSBsZW5ndGguICovCisJCWlmIChjb2RlcG9pbnQgPCBtaW5fdmFsIHx8IGNvZGVwb2ludCA+IG1heF92YWwpCisJCQlyZXR1cm4gYmFkX29mZnNldDsKKwkJLyogU3Vycm9nYXRlcyBhcmUgb25seSBmb3IgVVRGLTE2IGFuZCBjYW5ub3QgYmUgZW5jb2RlZCBpbiBVVEYtOC4gKi8KKwkJaWYgKChjb2RlcG9pbnQgJiAweDFmZjgwMCkgPT0gMHhkODAwKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisJCS8qIFUreHhGRkZFIGFuZCBVK3h4RkZGRiBhcmUgZ3VhcmFudGVlZCBub24tY2hhcmFjdGVycy4gKi8KKwkJaWYgKChjb2RlcG9pbnQgJiAweGZmZmUpID09IDB4ZmZmZSkKKwkJCXJldHVybiBiYWRfb2Zmc2V0OworCQkvKiBTbyBhcmUgYW55dGhpbmcgaW4gdGhlIHJhbmdlIFUrRkREMC4uVStGREVGLiAqLworCQlpZiAoY29kZXBvaW50ID49IDB4ZmRkMCAmJiBjb2RlcG9pbnQgPD0gMHhmZGVmKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgYnVmZmVyIGlzIGluIHByb3BlciB1dGY4IGZvcm1hdC4KKyAqCisgKiBJZiBpdCBpc24ndCwgaXQgYXNzdW1lcyBhbnkgbm9uLXV0ZjggY2hhcmFjdGVycyBhcmUgTGF0aW4xLAorICogYW5kIGRvZXMgdGhlIGNvbnZlcnNpb24uCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X3V0Zjgoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWludCBvayA9IDE7CisJbG9uZyBwb3MgPSAwOworCisJZm9yICg7OykgeworCQlpbnQgYmFkOworCQl1bnNpZ25lZCBjaGFyIGM7CisJCXVuc2lnbmVkIGNoYXIgcmVwbGFjZVsyXTsKKworCQliYWQgPSBmaW5kX2ludmFsaWRfdXRmOChidWYtPmJ1ZiArIHBvcywgYnVmLT5sZW4gLSBwb3MpOworCQlpZiAoYmFkIDwgMCkKKwkJCXJldHVybiBvazsKKwkJcG9zICs9IGJhZDsKKwkJb2sgPSAwOworCQljID0gYnVmLT5idWZbcG9zXTsKKwkJc3RyYnVmX3JlbW92ZShidWYsIHBvcywgMSk7CisKKwkJLyogV2Uga25vdyAnYycgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMTI4LTI1NSAqLworCQlyZXBsYWNlWzBdID0gMHhjMCArIChjID4+IDYpOworCQlyZXBsYWNlWzFdID0gMHg4MCArIChjICYgMHgzZik7CisJCXN0cmJ1Zl9pbnNlcnQoYnVmLCBwb3MsIHJlcGxhY2UsIDIpOworCQlwb3MgKz0gMjsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbW1pdF91dGY4X3dhcm5bXSA9CitOXygiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorICAgIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisgICAidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iKTsKKworaW50IGNvbW1pdF90cmVlX2V4dGVuZGVkKGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IG1zZ19sZW4sCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZSwKKwkJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHN0cnVjdCBvYmplY3RfaWQgKnJldCwKKwkJCSBjb25zdCBjaGFyICphdXRob3IsIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0LAorCQkJIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSkKK3sKKwlpbnQgcmVzdWx0OworCWludCBlbmNvZGluZ19pc191dGY4OworCXN0cnVjdCBzdHJidWYgYnVmZmVyOworCisJYXNzZXJ0X29pZF90eXBlKHRyZWUsIE9CSl9UUkVFKTsKKworCWlmIChtZW1jaHIobXNnLCAnXDAnLCBtc2dfbGVuKSkKKwkJcmV0dXJuIGVycm9yKCJhIE5VTCBieXRlIGluIGNvbW1pdCBsb2cgbWVzc2FnZSBub3QgYWxsb3dlZC4iKTsKKworCS8qIE5vdCBoYXZpbmcgaTE4bi5jb21taXRlbmNvZGluZyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcgdXRmLTggKi8KKwllbmNvZGluZ19pc191dGY4ID0gaXNfZW5jb2RpbmdfdXRmOChnaXRfY29tbWl0X2VuY29kaW5nKTsKKworCXN0cmJ1Zl9pbml0KCZidWZmZXIsIDgxOTIpOyAvKiBzaG91bGQgYXZvaWQgcmVhbGxvY3MgZm9yIHRoZSBoZWFkZXJzICovCisJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgInRyZWUgJXNcbiIsIG9pZF90b19oZXgodHJlZSkpOworCisJLyoKKwkgKiBOT1RFISBUaGlzIG9yZGVyaW5nIG1lYW5zIHRoYXQgdGhlIHNhbWUgZXhhY3QgdHJlZSBtZXJnZWQgd2l0aCBhCisJICogZGlmZmVyZW50IG9yZGVyIG9mIHBhcmVudHMgd2lsbCBiZSBhIF9kaWZmZXJlbnRfIGNoYW5nZXNldCBldmVuCisJICogaWYgZXZlcnl0aGluZyBlbHNlIHN0YXlzIHRoZSBzYW1lLgorCSAqLworCXdoaWxlIChwYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBvcF9jb21taXQoJnBhcmVudHMpOworCQlzdHJidWZfYWRkZigmYnVmZmVyLCAicGFyZW50ICVzXG4iLAorCQkJICAgIG9pZF90b19oZXgoJnBhcmVudC0+b2JqZWN0Lm9pZCkpOworCX0KKworCS8qIFBlcnNvbi9kYXRlIGluZm9ybWF0aW9uICovCisJaWYgKCFhdXRob3IpCisJCWF1dGhvciA9IGdpdF9hdXRob3JfaW5mbyhJREVOVF9TVFJJQ1QpOworCXN0cmJ1Zl9hZGRmKCZidWZmZXIsICJhdXRob3IgJXNcbiIsIGF1dGhvcik7CisJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgImNvbW1pdHRlciAlc1xuIiwgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCkpOworCWlmICghZW5jb2RpbmdfaXNfdXRmOCkKKwkJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgImVuY29kaW5nICVzXG4iLCBnaXRfY29tbWl0X2VuY29kaW5nKTsKKworCXdoaWxlIChleHRyYSkgeworCQlhZGRfZXh0cmFfaGVhZGVyKCZidWZmZXIsIGV4dHJhKTsKKwkJZXh0cmEgPSBleHRyYS0+bmV4dDsKKwl9CisJc3RyYnVmX2FkZGNoKCZidWZmZXIsICdcbicpOworCisJLyogQW5kIGFkZCB0aGUgY29tbWVudCAqLworCXN0cmJ1Zl9hZGQoJmJ1ZmZlciwgbXNnLCBtc2dfbGVuKTsKKworCS8qIEFuZCBjaGVjayB0aGUgZW5jb2RpbmcgKi8KKwlpZiAoZW5jb2RpbmdfaXNfdXRmOCAmJiAhdmVyaWZ5X3V0ZjgoJmJ1ZmZlcikpCisJCWZwcmludGYoc3RkZXJyLCBfKGNvbW1pdF91dGY4X3dhcm4pKTsKKworCWlmIChzaWduX2NvbW1pdCAmJiBkb19zaWduX2NvbW1pdCgmYnVmZmVyLCBzaWduX2NvbW1pdCkpIHsKKwkJcmVzdWx0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCXJlc3VsdCA9IHdyaXRlX29iamVjdF9maWxlKGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sIGNvbW1pdF90eXBlLCByZXQpOworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2RlZmluZV9jb21taXRfc2xhYihtZXJnZV9kZXNjX3NsYWIsIHN0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyAqKTsKK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfZGVzY19zbGFiIG1lcmdlX2Rlc2Nfc2xhYiA9IENPTU1JVF9TTEFCX0lOSVQoMSwgbWVyZ2VfZGVzY19zbGFiKTsKKworc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICptZXJnZV9yZW1vdGVfdXRpbChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcmV0dXJuICptZXJnZV9kZXNjX3NsYWJfYXQoJm1lcmdlX2Rlc2Nfc2xhYiwgY29tbWl0KTsKK30KKwordm9pZCBzZXRfbWVyZ2VfcmVtb3RlX2Rlc2Moc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdCAqb2JqKQoreworCXN0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyAqZGVzYzsKKwlGTEVYX0FMTE9DX1NUUihkZXNjLCBuYW1lLCBuYW1lKTsKKwlkZXNjLT5vYmogPSBvYmo7CisJKm1lcmdlX2Rlc2Nfc2xhYl9hdCgmbWVyZ2VfZGVzY19zbGFiLCBjb21taXQpID0gZGVzYzsKK30KKworc3RydWN0IGNvbW1pdCAqZ2V0X21lcmdlX3BhcmVudChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaWYgKGdldF9vaWQobmFtZSwgJm9pZCkpCisJCXJldHVybiBOVUxMOworCW9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilwZWVsX3RvX3R5cGUobmFtZSwgMCwgb2JqLCBPQkpfQ09NTUlUKTsKKwlpZiAoY29tbWl0ICYmICFtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpKQorCQlzZXRfbWVyZ2VfcmVtb3RlX2Rlc2MoY29tbWl0LCBuYW1lLCBvYmopOworCXJldHVybiBjb21taXQ7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBjb21taXQgdG8gdGhlIGVuZCBvZiB0aGUgY29tbWl0X2xpc3QuCisgKgorICogbmV4dCBzdGFydHMgYnkgcG9pbnRpbmcgdG8gdGhlIHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIGhlYWQgb2YgYW4KKyAqIGVtcHR5IGNvbW1pdF9saXN0LCBhbmQgaXMgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgIm5leHQiIGZpZWxkIG9mCisgKiB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0IGFzIG5ldyBjb21taXRzIGFyZSBhcHBlbmRlZC4KKyAqCisgKiBVc2FnZSBleGFtcGxlOgorICoKKyAqICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisgKiAgICAgc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCA9ICZsaXN0OworICoKKyAqICAgICBuZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGMxLCBuZXh0KTsKKyAqICAgICBuZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGMyLCBuZXh0KTsKKyAqICAgICBhc3NlcnQoY29tbWl0X2xpc3RfY291bnQobGlzdCkgPT0gMik7CisgKiAgICAgcmV0dXJuIGxpc3Q7CisgKi8KK3N0cnVjdCBjb21taXRfbGlzdCAqKmNvbW1pdF9saXN0X2FwcGVuZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqKm5leHQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXdfY29tbWl0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9saXN0KSk7CisJbmV3X2NvbW1pdC0+aXRlbSA9IGNvbW1pdDsKKwkqbmV4dCA9IG5ld19jb21taXQ7CisJbmV3X2NvbW1pdC0+bmV4dCA9IE5VTEw7CisJcmV0dXJuICZuZXdfY29tbWl0LT5uZXh0OworfQorCitjb25zdCBjaGFyICpmaW5kX2NvbW1pdF9oZWFkZXIoY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICprZXksIHNpemVfdCAqb3V0X2xlbikKK3sKKwlpbnQga2V5X2xlbiA9IHN0cmxlbihrZXkpOworCWNvbnN0IGNoYXIgKmxpbmUgPSBtc2c7CisKKwl3aGlsZSAobGluZSkgeworCQljb25zdCBjaGFyICplb2wgPSBzdHJjaHJudWwobGluZSwgJ1xuJyk7CisKKwkJaWYgKGxpbmUgPT0gZW9sKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKGVvbCAtIGxpbmUgPiBrZXlfbGVuICYmCisJCSAgICAhc3RybmNtcChsaW5lLCBrZXksIGtleV9sZW4pICYmCisJCSAgICBsaW5lW2tleV9sZW5dID09ICcgJykgeworCQkJKm91dF9sZW4gPSBlb2wgLSBsaW5lIC0ga2V5X2xlbiAtIDE7CisJCQlyZXR1cm4gbGluZSArIGtleV9sZW4gKyAxOworCQl9CisJCWxpbmUgPSAqZW9sID8gZW9sICsgMSA6IE5VTEw7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogSW5zcGVjdCB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCBkZXRlcm1pbmUgdGhlIHRydWUgImVuZCIgb2YgdGhlIGxvZyBtZXNzYWdlLCBpbgorICogb3JkZXIgdG8gZmluZCB3aGVyZSB0byBwdXQgYSBuZXcgU2lnbmVkLW9mZi1ieTogbGluZS4gIElnbm9yZWQgYXJlCisgKiB0cmFpbGluZyBjb21tZW50IGxpbmVzIGFuZCBibGFuayBsaW5lcy4gIFRvIHN1cHBvcnQgImdpdCBjb21taXQgLXMKKyAqIC0tYW1lbmQiIG9uIGFuIGV4aXN0aW5nIGNvbW1pdCwgd2UgYWxzbyBpZ25vcmUgIkNvbmZsaWN0czoiLiAgVG8KKyAqIHN1cHBvcnQgImdpdCBjb21taXQgLXYiLCB3ZSB0cnVuY2F0ZSBhdCBjdXQgbGluZXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHRhaWwgdG8gaWdub3JlLCB0byBiZSBmZWQgYXMKKyAqIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGFwcGVuZF9zaWdub2ZmKCkuCisgKi8KK3NpemVfdCBpZ25vcmVfbm9uX3RyYWlsZXIoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBib2MgPSAwOworCXNpemVfdCBib2wgPSAwOworCWludCBpbl9vbGRfY29uZmxpY3RzX2Jsb2NrID0gMDsKKwlzaXplX3QgY3V0b2ZmID0gd3Rfc3RhdHVzX2xvY2F0ZV9lbmQoYnVmLCBsZW4pOworCisJd2hpbGUgKGJvbCA8IGN1dG9mZikgeworCQljb25zdCBjaGFyICpuZXh0X2xpbmUgPSBtZW1jaHIoYnVmICsgYm9sLCAnXG4nLCBsZW4gLSBib2wpOworCisJCWlmICghbmV4dF9saW5lKQorCQkJbmV4dF9saW5lID0gYnVmICsgbGVuOworCQllbHNlCisJCQluZXh0X2xpbmUrKzsKKworCQlpZiAoYnVmW2JvbF0gPT0gY29tbWVudF9saW5lX2NoYXIgfHwgYnVmW2JvbF0gPT0gJ1xuJykgeworCQkJLyogaXMgdGhpcyB0aGUgZmlyc3Qgb2YgdGhlIHJ1biBvZiBjb21tZW50cz8gKi8KKwkJCWlmICghYm9jKQorCQkJCWJvYyA9IGJvbDsKKwkJCS8qIG90aGVyd2lzZSwgaXQgaXMganVzdCBjb250aW51aW5nICovCisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYnVmICsgYm9sLCAiQ29uZmxpY3RzOlxuIikpIHsKKwkJCWluX29sZF9jb25mbGljdHNfYmxvY2sgPSAxOworCQkJaWYgKCFib2MpCisJCQkJYm9jID0gYm9sOworCQl9IGVsc2UgaWYgKGluX29sZF9jb25mbGljdHNfYmxvY2sgJiYgYnVmW2JvbF0gPT0gJ1x0JykgeworCQkJOyAvKiBhIHBhdGhuYW1lIGluIHRoZSBjb25mbGljdHMgYmxvY2sgKi8KKwkJfSBlbHNlIGlmIChib2MpIHsKKwkJCS8qIHRoZSBwcmV2aW91cyB3YXMgbm90IHRyYWlsaW5nIGNvbW1lbnQgKi8KKwkJCWJvYyA9IDA7CisJCQlpbl9vbGRfY29uZmxpY3RzX2Jsb2NrID0gMDsKKwkJfQorCQlib2wgPSBuZXh0X2xpbmUgLSBidWY7CisJfQorCXJldHVybiBib2MgPyBsZW4gLSBib2MgOiBsZW4gLSBjdXRvZmY7Cit9CisKK2ludCBydW5fY29tbWl0X2hvb2soaW50IGVkaXRvcl9pc191c2VkLCBjb25zdCBjaGFyICppbmRleF9maWxlLAorCQkgICAgY29uc3QgY2hhciAqbmFtZSwgLi4uKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGhvb2tfZW52ID0gQVJHVl9BUlJBWV9JTklUOworCXZhX2xpc3QgYXJnczsKKwlpbnQgcmV0OworCisJYXJndl9hcnJheV9wdXNoZigmaG9va19lbnYsICJHSVRfSU5ERVhfRklMRT0lcyIsIGluZGV4X2ZpbGUpOworCisJLyoKKwkgKiBMZXQgdGhlIGhvb2sga25vdyB0aGF0IG5vIGVkaXRvciB3aWxsIGJlIGxhdW5jaGVkLgorCSAqLworCWlmICghZWRpdG9yX2lzX3VzZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmaG9va19lbnYsICJHSVRfRURJVE9SPToiKTsKKworCXZhX3N0YXJ0KGFyZ3MsIG5hbWUpOworCXJldCA9IHJ1bl9ob29rX3ZlKGhvb2tfZW52LmFyZ3YsbmFtZSwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmhvb2tfZW52KTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jb21taXQuaCBiL2NvbW1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOGEwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQuaApAQCAtMCwwICsxLDQwNSBAQAorI2lmbmRlZiBDT01NSVRfSAorI2RlZmluZSBDT01NSVRfSAorCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicHJldHR5LmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKworI2RlZmluZSBDT01NSVRfTk9UX0ZST01fR1JBUEggMHhGRkZGRkZGRgorI2RlZmluZSBHRU5FUkFUSU9OX05VTUJFUl9JTkZJTklUWSAweEZGRkZGRkZGCisjZGVmaW5lIEdFTkVSQVRJT05fTlVNQkVSX01BWCAweDNGRkZGRkZGCisjZGVmaW5lIEdFTkVSQVRJT05fTlVNQkVSX1pFUk8gMAorCitzdHJ1Y3QgY29tbWl0X2xpc3QgeworCXN0cnVjdCBjb21taXQgKml0ZW07CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0OworfTsKKworLyoKKyAqIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0IG1hdHRlcnMgaW4gZnVsbCByZXBvIHdhbGsgb3BlcmF0aW9ucyBsaWtlCisgKiAnZ2l0IGNsb25lJyBvciAnZ2l0IGdjJy4gQ29uc2lkZXIgdXNpbmcgY29tbWl0LXNsYWIgdG8gYXR0YWNoIGRhdGEKKyAqIHRvIGEgY29tbWl0IGluc3RlYWQgb2YgYWRkaW5nIG5ldyBmaWVsZHMgaGVyZS4KKyAqLworc3RydWN0IGNvbW1pdCB7CisJc3RydWN0IG9iamVjdCBvYmplY3Q7CisJdGltZXN0YW1wX3QgZGF0ZTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkvKgorCSAqIElmIHRoZSBjb21taXQgaXMgbG9hZGVkIGZyb20gdGhlIGNvbW1pdC1ncmFwaCBmaWxlLCB0aGVuIHRoaXMKKwkgKiBtZW1iZXIgbWF5IGJlIE5VTEwuIE9ubHkgYWNjZXNzIGl0IHRocm91Z2ggcmVwb19nZXRfY29tbWl0X3RyZWUoKQorCSAqIG9yIGdldF9jb21taXRfdHJlZV9vaWQoKS4KKwkgKi8KKwlzdHJ1Y3QgdHJlZSAqbWF5YmVfdHJlZTsKKwl1aW50MzJfdCBncmFwaF9wb3M7CisJdWludDMyX3QgZ2VuZXJhdGlvbjsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7Cit9OworCitleHRlcm4gaW50IHNhdmVfY29tbWl0X2J1ZmZlcjsKK2V4dGVybiBjb25zdCBjaGFyICpjb21taXRfdHlwZTsKKworLyogV2hpbGUgd2UgY2FuIGRlY29yYXRlIGFueSBvYmplY3Qgd2l0aCBhIG5hbWUsIGl0J3Mgb25seSB1c2VkIGZvciBjb21taXRzLi4gKi8KK3N0cnVjdCBuYW1lX2RlY29yYXRpb24geworCXN0cnVjdCBuYW1lX2RlY29yYXRpb24gKm5leHQ7CisJaW50IHR5cGU7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworZW51bSBkZWNvcmF0aW9uX3R5cGUgeworCURFQ09SQVRJT05fTk9ORSA9IDAsCisJREVDT1JBVElPTl9SRUZfTE9DQUwsCisJREVDT1JBVElPTl9SRUZfUkVNT1RFLAorCURFQ09SQVRJT05fUkVGX1RBRywKKwlERUNPUkFUSU9OX1JFRl9TVEFTSCwKKwlERUNPUkFUSU9OX1JFRl9IRUFELAorCURFQ09SQVRJT05fR1JBRlRFRCwKK307CisKK3ZvaWQgYWRkX25hbWVfZGVjb3JhdGlvbihlbnVtIGRlY29yYXRpb25fdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqZ2V0X25hbWVfZGVjb3JhdGlvbihjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJICAgICAgaW50IHF1aWV0KTsKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qCisgKiBMb29rIHVwIG9iamVjdCBuYW1lZCBieSAib2lkIiwgZGVyZWZlcmVuY2UgdGFnIGFzIG5lY2Vzc2FyeSwKKyAqIGdldCBhIGNvbW1pdCBhbmQgcmV0dXJuIGl0LiBJZiAib2lkIiBkb2VzIG5vdCBkZXJlZmVyZW5jZSB0bworICogYSBjb21taXQsIHVzZSByZWZfbmFtZSB0byByZXBvcnQgYW4gZXJyb3IgYW5kIGRpZS4KKyAqLworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9vcl9kaWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpyZWZfbmFtZSk7CisKK2ludCBwYXJzZV9jb21taXRfYnVmZmVyKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgY29tbWl0ICppdGVtLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGNoZWNrX2dyYXBoKTsKK2ludCByZXBvX3BhcnNlX2NvbW1pdF9pbnRlcm5hbChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqaXRlbSwKKwkJCSAgICAgICBpbnQgcXVpZXRfb25fbWlzc2luZywgaW50IHVzZV9jb21taXRfZ3JhcGgpOworaW50IHJlcG9fcGFyc2VfY29tbWl0X2dlbnRseShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgc3RydWN0IGNvbW1pdCAqaXRlbSwKKwkJCSAgICAgaW50IHF1aWV0X29uX21pc3NpbmcpOworc3RhdGljIGlubGluZSBpbnQgcmVwb19wYXJzZV9jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKml0ZW0pCit7CisJcmV0dXJuIHJlcG9fcGFyc2VfY29tbWl0X2dlbnRseShyLCBpdGVtLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfY29tbWl0X25vX2dyYXBoKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gcmVwb19wYXJzZV9jb21taXRfaW50ZXJuYWwodGhlX3JlcG9zaXRvcnksIGNvbW1pdCwgMCwgMCk7Cit9CisKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgcGFyc2VfY29tbWl0X2ludGVybmFsKGl0ZW0sIHF1aWV0LCB1c2UpIHJlcG9fcGFyc2VfY29tbWl0X2ludGVybmFsKHRoZV9yZXBvc2l0b3J5LCBpdGVtLCBxdWlldCwgdXNlKQorI2RlZmluZSBwYXJzZV9jb21taXRfZ2VudGx5KGl0ZW0sIHF1aWV0KSByZXBvX3BhcnNlX2NvbW1pdF9nZW50bHkodGhlX3JlcG9zaXRvcnksIGl0ZW0sIHF1aWV0KQorI2RlZmluZSBwYXJzZV9jb21taXQoaXRlbSkgcmVwb19wYXJzZV9jb21taXQodGhlX3JlcG9zaXRvcnksIGl0ZW0pCisjZW5kaWYKKwordm9pZCBwYXJzZV9jb21taXRfb3JfZGllKHN0cnVjdCBjb21taXQgKml0ZW0pOworCitzdHJ1Y3QgYnVmZmVyX3NsYWI7CitzdHJ1Y3QgYnVmZmVyX3NsYWIgKmFsbG9jYXRlX2NvbW1pdF9idWZmZXJfc2xhYih2b2lkKTsKK3ZvaWQgZnJlZV9jb21taXRfYnVmZmVyX3NsYWIoc3RydWN0IGJ1ZmZlcl9zbGFiICpicyk7CisKKy8qCisgKiBBc3NvY2lhdGUgYW4gb2JqZWN0IGJ1ZmZlciB3aXRoIHRoZSBjb21taXQuIFRoZSBvd25lcnNoaXAgb2YgdGhlCisgKiBtZW1vcnkgaXMgaGFuZGVkIG92ZXIgdG8gdGhlIGNvbW1pdCwgYW5kIG11c3QgYmUgZnJlZSgpLWFibGUuCisgKi8KK3ZvaWQgc2V0X2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBjb21taXQgKiwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisvKgorICogR2V0IGFueSBjYWNoZWQgb2JqZWN0IGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1pdC4gUmV0dXJucyBOVUxMCisgKiBpZiBub25lLiBUaGUgcmVzdWx0aW5nIG1lbW9yeSBzaG91bGQgbm90IGJlIGZyZWVkLgorICovCitjb25zdCB2b2lkICpnZXRfY2FjaGVkX2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKiwgY29uc3Qgc3RydWN0IGNvbW1pdCAqLCB1bnNpZ25lZCBsb25nICpzaXplKTsKKworLyoKKyAqIEdldCB0aGUgY29tbWl0J3Mgb2JqZWN0IGNvbnRlbnRzLCBlaXRoZXIgZnJvbSBjYWNoZSBvciBieSByZWFkaW5nIHRoZSBvYmplY3QKKyAqIGZyb20gZGlzay4gVGhlIHJlc3VsdGluZyBtZW1vcnkgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgYW5kIG11c3QgYmUgZ2l2ZW4KKyAqIHRvIHVudXNlX2NvbW1pdF9idWZmZXIgd2hlbiB0aGUgY2FsbGVyIGlzIGRvbmUuCisgKi8KK2NvbnN0IHZvaWQgKnJlcG9fZ2V0X2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnNpemUpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSBnZXRfY29tbWl0X2J1ZmZlcihjLCBzKSByZXBvX2dldF9jb21taXRfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCBjLCBzKQorI2VuZGlmCisKKy8qCisgKiBUZWxsIHRoZSBjb21taXQgc3Vic3lzdGVtIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCBhIHBhcnRpY3VsYXIgY29tbWl0IGJ1ZmZlci4KKyAqIFRoZSBjb21taXQgYW5kIGJ1ZmZlciBzaG91bGQgYmUgdGhlIGlucHV0IGFuZCByZXR1cm4gdmFsdWUsIHJlc3BlY3RpdmVseSwKKyAqIGZyb20gYW4gZWFybGllciBjYWxsIHRvIGdldF9jb21taXRfYnVmZmVyLiAgVGhlIGJ1ZmZlciBtYXkgb3IgbWF5IG5vdCBiZQorICogZnJlZWQgYnkgdGhpcyBjYWxsOyBjYWxsZXJzIHNob3VsZCBub3QgYWNjZXNzIHRoZSBtZW1vcnkgYWZ0ZXJ3YXJkcy4KKyAqLwordm9pZCByZXBvX3VudXNlX2NvbW1pdF9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICosCisJCQkgICAgICBjb25zdCB2b2lkICpidWZmZXIpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSB1bnVzZV9jb21taXRfYnVmZmVyKGMsIGIpIHJlcG9fdW51c2VfY29tbWl0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgYywgYikKKyNlbmRpZgorCisvKgorICogRnJlZSBhbnkgY2FjaGVkIG9iamVjdCBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21taXQuCisgKi8KK3ZvaWQgZnJlZV9jb21taXRfYnVmZmVyKHN0cnVjdCBwYXJzZWRfb2JqZWN0X3Bvb2wgKnBvb2wsIHN0cnVjdCBjb21taXQgKik7CisKK3N0cnVjdCB0cmVlICpyZXBvX2dldF9jb21taXRfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICopOworI2RlZmluZSBnZXRfY29tbWl0X3RyZWUoYykgcmVwb19nZXRfY29tbWl0X3RyZWUodGhlX3JlcG9zaXRvcnksIGMpCitzdHJ1Y3Qgb2JqZWN0X2lkICpnZXRfY29tbWl0X3RyZWVfb2lkKGNvbnN0IHN0cnVjdCBjb21taXQgKik7CisKKy8qCisgKiBSZWxlYXNlIG1lbW9yeSByZWxhdGVkIHRvIGEgY29tbWl0LCBpbmNsdWRpbmcgdGhlIHBhcmVudCBsaXN0IGFuZAorICogYW55IGNhY2hlZCBvYmplY3QgYnVmZmVyLgorICovCit2b2lkIHJlbGVhc2VfY29tbWl0X21lbW9yeShzdHJ1Y3QgcGFyc2VkX29iamVjdF9wb29sICpwb29sLCBzdHJ1Y3QgY29tbWl0ICpjKTsKKworLyoKKyAqIERpc2Fzc29jaWF0ZSBhbnkgY2FjaGVkIG9iamVjdCBidWZmZXIgZnJvbSB0aGUgY29tbWl0LCBidXQgZG8gbm90IGZyZWUgaXQuCisgKiBUaGUgYnVmZmVyIChvciBOVUxMLCBpZiBub25lKSBpcyByZXR1cm5lZC4KKyAqLworY29uc3Qgdm9pZCAqZGV0YWNoX2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CisKKy8qIEZpbmQgYmVnaW5uaW5nIGFuZCBsZW5ndGggb2YgY29tbWl0IHN1YmplY3QuICovCitpbnQgZmluZF9jb21taXRfc3ViamVjdChjb25zdCBjaGFyICpjb21taXRfYnVmZmVyLCBjb25zdCBjaGFyICoqc3ViamVjdCk7CisKK3N0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3RfaW5zZXJ0KHN0cnVjdCBjb21taXQgKml0ZW0sCisJCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpOworc3RydWN0IGNvbW1pdF9saXN0ICoqY29tbWl0X2xpc3RfYXBwZW5kKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCk7Cit1bnNpZ25lZCBjb21taXRfbGlzdF9jb3VudChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmwpOworc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShzdHJ1Y3QgY29tbWl0ICppdGVtLAorCQkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0KTsKK3ZvaWQgY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpOworCisvKiBTaGFsbG93IGNvcHkgb2YgdGhlIGlucHV0IGxpc3QgKi8KK3N0cnVjdCBjb21taXRfbGlzdCAqY29weV9jb21taXRfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpOworCit2b2lkIGZyZWVfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KTsKKworc3RydWN0IHJldl9pbmZvOyAvKiBpbiByZXZpc2lvbi5oLCBpdCBjaXJjdWxhcmx5IHVzZXMgZW51bSBjbWl0X2ZtdCAqLworCitpbnQgaGFzX25vbl9hc2NpaShjb25zdCBjaGFyICp0ZXh0KTsKK2NvbnN0IGNoYXIgKmxvZ21zZ19yZWVuY29kZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgY2hhciAqKmNvbW1pdF9lbmNvZGluZywKKwkJCSAgICBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcpOworY29uc3QgY2hhciAqcmVwb19sb2dtc2dfcmVlbmNvZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgY2hhciAqKmNvbW1pdF9lbmNvZGluZywKKwkJCQkgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nKTsKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgbG9nbXNnX3JlZW5jb2RlKGMsIGVuYywgb3V0KSByZXBvX2xvZ21zZ19yZWVuY29kZSh0aGVfcmVwb3NpdG9yeSwgYywgZW5jLCBvdXQpCisjZW5kaWYKKworY29uc3QgY2hhciAqc2tpcF9ibGFua19saW5lcyhjb25zdCBjaGFyICptc2cpOworCisvKiogUmVtb3ZlcyB0aGUgZmlyc3QgY29tbWl0IGZyb20gYSBsaXN0IHNvcnRlZCBieSBkYXRlLCBhbmQgYWRkcyBhbGwKKyAqIG9mIGl0cyBwYXJlbnRzLgorICoqLworc3RydWN0IGNvbW1pdCAqcG9wX21vc3RfcmVjZW50X2NvbW1pdChzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXJrKTsKKworc3RydWN0IGNvbW1pdCAqcG9wX2NvbW1pdChzdHJ1Y3QgY29tbWl0X2xpc3QgKipzdGFjayk7CisKK3ZvaWQgY2xlYXJfY29tbWl0X21hcmtzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgaW50IG1hcmspOwordm9pZCBjbGVhcl9jb21taXRfbWFya3NfbWFueShpbnQgbnIsIHN0cnVjdCBjb21taXQgKipjb21taXQsIHVuc2lnbmVkIGludCBtYXJrKTsKKworCitlbnVtIHJldl9zb3J0X29yZGVyIHsKKwlSRVZfU09SVF9JTl9HUkFQSF9PUkRFUiA9IDAsCisJUkVWX1NPUlRfQllfQ09NTUlUX0RBVEUsCisJUkVWX1NPUlRfQllfQVVUSE9SX0RBVEUKK307CisKKy8qCisgKiBQZXJmb3JtcyBhbiBpbi1wbGFjZSB0b3BvbG9naWNhbCBzb3J0IG9mIGxpc3Qgc3VwcGxpZWQuCisgKgorICogICBpbnZhcmlhbnQgb2YgcmVzdWx0aW5nIGxpc3QgaXM6CisgKiAgICAgIGEgcmVhY2hhYmxlIGZyb20gYiA9PiBvcmQoYikgPCBvcmQoYSkKKyAqICAgc29ydF9vcmRlciBmdXJ0aGVyIHNwZWNpZmllczoKKyAqICAgUkVWX1NPUlRfSU5fR1JBUEhfT1JERVI6IHRyeSB0byBzaG93IGEgY29tbWl0IG9uIGEgc2luZ2xlLXBhcmVudAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhaW4gdG9nZXRoZXIuCisgKiAgIFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFOiBzaG93IGVsaWdpYmxlIGNvbW1pdHMgaW4gY29tbWl0dGVyLWRhdGUgb3JkZXIuCisgKi8KK3ZvaWQgc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcihzdHJ1Y3QgY29tbWl0X2xpc3QgKiosIGVudW0gcmV2X3NvcnRfb3JkZXIpOworCitzdHJ1Y3QgY29tbWl0X2dyYWZ0IHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgbnJfcGFyZW50OyAvKiA8IDAgaWYgc2hhbGxvdyBjb21taXQgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBhcmVudFtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLworfTsKK3R5cGVkZWYgaW50ICgqZWFjaF9jb21taXRfZ3JhZnRfZm4pKGNvbnN0IHN0cnVjdCBjb21taXRfZ3JhZnQgKiwgdm9pZCAqKTsKKworc3RydWN0IGNvbW1pdF9ncmFmdCAqcmVhZF9ncmFmdF9saW5lKHN0cnVjdCBzdHJidWYgKmxpbmUpOworaW50IHJlZ2lzdGVyX2NvbW1pdF9ncmFmdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdF9ncmFmdCAqLCBpbnQpOwordm9pZCBwcmVwYXJlX2NvbW1pdF9ncmFmdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CitzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpsb29rdXBfY29tbWl0X2dyYWZ0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitzdHJ1Y3QgY29tbWl0ICpnZXRfZm9ya19wb2ludChjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCisvKiBsYXJnZXN0IHBvc2l0aXZlIG51bWJlciBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBjYW4gY29udGFpbiAqLworI2RlZmluZSBJTkZJTklURV9ERVBUSCAweDdmZmZmZmZmCisKK3N0cnVjdCBvaWRfYXJyYXk7CitzdHJ1Y3QgcmVmOworaW50IHJlZ2lzdGVyX3NoYWxsb3coc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgdW5yZWdpc3Rlcl9zaGFsbG93KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgZm9yX2VhY2hfY29tbWl0X2dyYWZ0KGVhY2hfY29tbWl0X2dyYWZ0X2ZuLCB2b2lkICopOworaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9zaGFsbG93X2NvbW1pdHMoc3RydWN0IG9iamVjdF9hcnJheSAqaGVhZHMsCisJCQkJCWludCBkZXB0aCwgaW50IHNoYWxsb3dfZmxhZywgaW50IG5vdF9zaGFsbG93X2ZsYWcpOworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2hhbGxvd19jb21taXRzX2J5X3Jldl9saXN0KAorCQlpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgaW50IHNoYWxsb3dfZmxhZywgaW50IG5vdF9zaGFsbG93X2ZsYWcpOwordm9pZCBzZXRfYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqcGF0aCwgaW50IG92ZXJyaWRlKTsKK2ludCB3cml0ZV9zaGFsbG93X2NvbW1pdHMoc3RydWN0IHN0cmJ1ZiAqb3V0LCBpbnQgdXNlX3BhY2tfcHJvdG9jb2wsCisJCQkgIGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhKTsKK3ZvaWQgc2V0dXBfYWx0ZXJuYXRlX3NoYWxsb3coc3RydWN0IGxvY2tfZmlsZSAqc2hhbGxvd19sb2NrLAorCQkJICAgICBjb25zdCBjaGFyICoqYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9pZF9hcnJheSAqZXh0cmEpOworY29uc3QgY2hhciAqc2V0dXBfdGVtcG9yYXJ5X3NoYWxsb3coY29uc3Qgc3RydWN0IG9pZF9hcnJheSAqZXh0cmEpOwordm9pZCBhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHMoaW50KTsKKworLyoKKyAqIEluaXRpYWxpemUgd2l0aCBwcmVwYXJlX3NoYWxsb3dfaW5mbygpIG9yIHplcm8taW5pdGlhbGl6ZSAoZXF1aXZhbGVudCB0bworICogcHJlcGFyZV9zaGFsbG93X2luZm8gd2l0aCBhIE5VTEwgb2lkX2FycmF5KS4KKyAqLworc3RydWN0IHNoYWxsb3dfaW5mbyB7CisJc3RydWN0IG9pZF9hcnJheSAqc2hhbGxvdzsKKwlpbnQgKm91cnMsIG5yX291cnM7CisJaW50ICp0aGVpcnMsIG5yX3RoZWlyczsKKwlzdHJ1Y3Qgb2lkX2FycmF5ICpyZWY7CisKKwkvKiBmb3IgcmVjZWl2ZS1wYWNrICovCisJdWludDMyX3QgKip1c2VkX3NoYWxsb3c7CisJaW50ICpuZWVkX3JlYWNoYWJpbGl0eV90ZXN0OworCWludCAqcmVhY2hhYmxlOworCWludCAqc2hhbGxvd19yZWY7CisJc3RydWN0IGNvbW1pdCAqKmNvbW1pdHM7CisJaW50IG5yX2NvbW1pdHM7Cit9OworCit2b2lkIHByZXBhcmVfc2hhbGxvd19pbmZvKHN0cnVjdCBzaGFsbG93X2luZm8gKiwgc3RydWN0IG9pZF9hcnJheSAqKTsKK3ZvaWQgY2xlYXJfc2hhbGxvd19pbmZvKHN0cnVjdCBzaGFsbG93X2luZm8gKik7Cit2b2lkIHJlbW92ZV9ub25leGlzdGVudF90aGVpcnNfc2hhbGxvdyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICopOwordm9pZCBhc3NpZ25fc2hhbGxvd19jb21taXRzX3RvX3JlZnMoc3RydWN0IHNoYWxsb3dfaW5mbyAqaW5mbywKKwkJCQkgICAgdWludDMyX3QgKip1c2VkLAorCQkJCSAgICBpbnQgKnJlZl9zdGF0dXMpOworaW50IGRlbGF5ZWRfcmVhY2hhYmlsaXR5X3Rlc3Qoc3RydWN0IHNoYWxsb3dfaW5mbyAqc2ksIGludCBjKTsKKyNkZWZpbmUgUFJVTkVfU0hPV19PTkxZIDEKKyNkZWZpbmUgUFJVTkVfUVVJQ0sgMgordm9pZCBwcnVuZV9zaGFsbG93KHVuc2lnbmVkIG9wdGlvbnMpOworZXh0ZXJuIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2Vfc2hhbGxvdzsKKworaW50IGludGVyYWN0aXZlX2FkZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHBhdGNoKTsKK2ludCBydW5fYWRkX2ludGVyYWN0aXZlKGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25zdCBjaGFyICpwYXRjaF9tb2RlLAorCQkJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYyk7CisKK3N0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyIHsKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqbmV4dDsKKwljaGFyICprZXk7CisJY2hhciAqdmFsdWU7CisJc2l6ZV90IGxlbjsKK307CisKK3ZvaWQgYXBwZW5kX21lcmdlX3RhZ19oZWFkZXJzKHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywKKwkJCSAgICAgIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICoqKnRhaWwpOworCitpbnQgY29tbWl0X3RyZWUoY29uc3QgY2hhciAqbXNnLCBzaXplX3QgbXNnX2xlbiwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZSwKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXQsCisJCWNvbnN0IGNoYXIgKmF1dGhvciwgY29uc3QgY2hhciAqc2lnbl9jb21taXQpOworCitpbnQgY29tbWl0X3RyZWVfZXh0ZW5kZWQoY29uc3QgY2hhciAqbXNnLCBzaXplX3QgbXNnX2xlbiwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlLAorCQkJIHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywKKwkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXQsIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCSBjb25zdCBjaGFyICpzaWduX2NvbW1pdCwKKwkJCSBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqKTsKKworc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKnJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcnMoc3RydWN0IGNvbW1pdCAqLCBjb25zdCBjaGFyICoqKTsKKwordm9pZCBmcmVlX2NvbW1pdF9leHRyYV9oZWFkZXJzKHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSk7CisKKy8qCisgKiBTZWFyY2ggdGhlIGNvbW1pdCBvYmplY3QgY29udGVudHMgZ2l2ZW4gYnkgIm1zZyIgZm9yIHRoZSBoZWFkZXIgImtleSIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlciBjb250ZW50cywgb3IgTlVMTC4gVGhlIGxlbmd0aAorICogb2YgdGhlIGhlYWRlciwgdXAgdG8gdGhlIGZpcnN0IG5ld2xpbmUsIGlzIHJldHVybmVkIHZpYSBvdXRfbGVuLgorICoKKyAqIE5vdGUgdGhhdCBzb21lIGhlYWRlcnMgKGxpa2UgbWVyZ2V0YWcpIG1heSBiZSBtdWx0aS1saW5lLiBJdCBpcyB0aGUgY2FsbGVyJ3MKKyAqIHJlc3BvbnNpYmlsaXR5IHRvIHBhcnNlIGZ1cnRoZXIgaW4gdGhpcyBjYXNlIQorICovCitjb25zdCBjaGFyICpmaW5kX2NvbW1pdF9oZWFkZXIoY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICprZXksCisJCQkgICAgICAgc2l6ZV90ICpvdXRfbGVuKTsKKworLyogRmluZCB0aGUgZW5kIG9mIHRoZSBsb2cgbWVzc2FnZSwgdGhlIHJpZ2h0IHBsYWNlIGZvciBhIG5ldyB0cmFpbGVyLiAqLworc2l6ZV90IGlnbm9yZV9ub25fdHJhaWxlcihjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOworCit0eXBlZGVmIGludCAoKmVhY2hfbWVyZ2V0YWdfZm4pKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhLAorCQkJCXZvaWQgKmNiX2RhdGEpOworCitpbnQgZm9yX2VhY2hfbWVyZ2V0YWcoZWFjaF9tZXJnZXRhZ19mbiBmbiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKTsKKworc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjIHsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7IC8qIHRoZSBuYW1lZCBvYmplY3QsIGNvdWxkIGJlIGEgdGFnICovCisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKK3N0cnVjdCBtZXJnZV9yZW1vdGVfZGVzYyAqbWVyZ2VfcmVtb3RlX3V0aWwoc3RydWN0IGNvbW1pdCAqKTsKK3ZvaWQgc2V0X21lcmdlX3JlbW90ZV9kZXNjKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3QgKm9iaik7CisKKy8qCisgKiBHaXZlbiAibmFtZSIgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIG1lcmdlLCBmaW5kIHRoZSBjb21taXQgb2JqZWN0CisgKiBhbmQgcmV0dXJuIGl0LCB3aGlsZSBzdG9yaW5nIG1lcmdlX3JlbW90ZV9kZXNjIGluIGl0cyAtPnV0aWwgZmllbGQsCisgKiB0byBhbGxvdyBjYWxsZXJzIHRvIHRlbGwgaWYgd2UgYXJlIHRvbGQgdG8gbWVyZ2UgYSB0YWcuCisgKi8KK3N0cnVjdCBjb21taXQgKmdldF9tZXJnZV9wYXJlbnQoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBwYXJzZV9zaWduZWRfY29tbWl0KGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCXN0cnVjdCBzdHJidWYgKm1lc3NhZ2UsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSk7CitpbnQgcmVtb3ZlX3NpZ25hdHVyZShzdHJ1Y3Qgc3RyYnVmICpidWYpOworCisvKgorICogQ2hlY2sgdGhlIHNpZ25hdHVyZSBvZiB0aGUgZ2l2ZW4gY29tbWl0LiBUaGUgcmVzdWx0IG9mIHRoZSBjaGVjayBpcyBzdG9yZWQKKyAqIGluIHNpZy0+Y2hlY2tfcmVzdWx0LCAnRycgZm9yIGEgZ29vZCBzaWduYXR1cmUsICdVJyBmb3IgYSBnb29kIHNpZ25hdHVyZQorICogZnJvbSBhbiB1bnRydXN0ZWQgc2lnbmVyLCAnQicgZm9yIGEgYmFkIHNpZ25hdHVyZSBhbmQgJ04nIGZvciBubyBzaWduYXR1cmUKKyAqIGF0IGFsbC4gIFRoaXMgbWF5IGFsbG9jYXRlIG1lbW9yeSBmb3Igc2lnLT5ncGdfb3V0cHV0LCBzaWctPmdwZ19zdGF0dXMsCisgKiBzaWctPnNpZ25lciBhbmQgc2lnLT5rZXkuCisgKi8KK2ludCBjaGVja19jb21taXRfc2lnbmF0dXJlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYyk7CisKKy8qIHJlY29yZCBhdXRob3ItZGF0ZSBmb3IgZWFjaCBjb21taXQgb2JqZWN0ICovCitzdHJ1Y3QgYXV0aG9yX2RhdGVfc2xhYjsKK3ZvaWQgcmVjb3JkX2F1dGhvcl9kYXRlKHN0cnVjdCBhdXRob3JfZGF0ZV9zbGFiICphdXRob3JfZGF0ZSwKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKK2ludCBjb21wYXJlX2NvbW1pdHNfYnlfYXV0aG9yX2RhdGUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLCB2b2lkICp1bnVzZWQpOworCisvKgorICogVmVyaWZ5IGEgc2luZ2xlIGNvbW1pdCB3aXRoIGNoZWNrX2NvbW1pdF9zaWduYXR1cmUoKSBhbmQgZGllKCkgaWYgaXQgaXMgbm90CisgKiBhIGdvb2Qgc2lnbmF0dXJlLiBUaGlzIGlzbid0IHJlYWxseSBzdWl0YWJsZSBmb3IgZ2VuZXJhbCB1c2UsIGJ1dCBpcyBhCisgKiBoZWxwZXIgdG8gaW1wbGVtZW50IGNvbnNpc3RlbnQgbG9naWMgZm9yIHB1bGwvbWVyZ2UgLS12ZXJpZnktc2lnbmF0dXJlcy4KKyAqCisgKiBUaGUgY2hlY2tfdHJ1c3QgcGFyYW1ldGVyIGlzIG1lYW50IGZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LiAgVGhlIEdQRworICogaW50ZXJmYWNlIHZlcmlmaWVzIGtleSB0cnVzdCB3aXRoIGEgZGVmYXVsdCB0cnVzdCBsZXZlbCB0aGF0IGlzIGJlbG93IHRoZQorICogZGVmYXVsdCB0cnVzdCBsZXZlbCBmb3IgbWVyZ2Ugb3BlcmF0aW9ucy4gIEl0cyB2YWx1ZSBzaG91bGQgYmUgbm9uLXplcm8gaWYKKyAqIHRoZSB1c2VyIGhhc24ndCBzZXQgYSBtaW5pbXVtIHRydXN0IGxldmVsIGV4cGxpY2l0bHkgaW4gdGhlaXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBJZiB0aGUgdXNlciBoYXMgc2V0IGEgbWluaW11bSB0cnVzdCBsZXZlbCwgdGhlbiB0aGF0IHZhbHVlIHNob3VsZCBiZSBvYmV5ZWQKKyAqIGFuZCBjaGVja190cnVzdCBzaG91bGQgYmUgemVybywgZXZlbiBpZiB0aGUgY29uZmlndXJlZCB0cnVzdCBsZXZlbCBpcyBiZWxvdworICogdGhlIGRlZmF1bHQgdHJ1c3QgbGV2ZWwgZm9yIG1lcmdlcy4KKyAqLwordm9pZCB2ZXJpZnlfbWVyZ2Vfc2lnbmF0dXJlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IHZlcmJvc2UsCisJCQkgICAgaW50IGNoZWNrX3RydXN0KTsKKworaW50IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8sIHZvaWQgKnVudXNlZCk7CitpbnQgY29tcGFyZV9jb21taXRzX2J5X2dlbl90aGVuX2NvbW1pdF9kYXRlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXywgdm9pZCAqdW51c2VkKTsKKworTEFTVF9BUkdfTVVTVF9CRV9OVUxMCitpbnQgcnVuX2NvbW1pdF9ob29rKGludCBlZGl0b3JfaXNfdXNlZCwgY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgLi4uKTsKKworI2VuZGlmIC8qIENPTU1JVF9IICovCmRpZmYgLS1naXQgYS9jb21tb24tbWFpbi5jIGIvY29tbW9uLW1haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWUyMWRkCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uLW1haW4uYwpAQCAtMCwwICsxLDU3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgImF0dHIuaCIKKworLyoKKyAqIE1hbnkgcGFydHMgb2YgR2l0IGhhdmUgc3VicHJvZ3JhbXMgY29tbXVuaWNhdGUgdmlhIHBpcGUsIGV4cGVjdCB0aGUKKyAqIHVwc3RyZWFtIG9mIGEgcGlwZSB0byBkaWUgd2l0aCBTSUdQSVBFIHdoZW4gdGhlIGRvd25zdHJlYW0gb2YgYQorICogcGlwZSBkb2VzIG5vdCBuZWVkIHRvIHJlYWQgYWxsIHRoYXQgaXMgd3JpdHRlbi4gIFNvbWUgdGhpcmQtcGFydHkKKyAqIHByb2dyYW1zIHRoYXQgaWdub3JlIG9yIGJsb2NrIFNJR1BJUEUgZm9yIHRoZWlyIG93biByZWFzb24gZm9yZ2V0CisgKiB0byByZXN0b3JlIFNJR1BJUEUgaGFuZGxpbmcgdG8gdGhlIGRlZmF1bHQgYmVmb3JlIHNwYXduaW5nIEdpdCBhbmQKKyAqIGJyZWFrIHRoaXMgY2FyZWZ1bGx5IG9yY2hlc3RyYXRlZCBtYWNoaW5lcnkuCisgKgorICogUmVzdG9yZSB0aGUgd2F5IFNJR1BJUEUgaXMgaGFuZGxlZCB0byBkZWZhdWx0LCB3aGljaCBpcyB3aGF0IHdlCisgKiBleHBlY3QuCisgKi8KK3N0YXRpYyB2b2lkIHJlc3RvcmVfc2lncGlwZV90b19kZWZhdWx0KHZvaWQpCit7CisJc2lnc2V0X3QgdW5ibG9jazsKKworCXNpZ2VtcHR5c2V0KCZ1bmJsb2NrKTsKKwlzaWdhZGRzZXQoJnVuYmxvY2ssIFNJR1BJUEUpOworCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmdW5ibG9jaywgTlVMTCk7CisJc2lnbmFsKFNJR1BJUEUsIFNJR19ERkwpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IHJlc3VsdDsKKworCXRyYWNlMl9pbml0aWFsaXplX2Nsb2NrKCk7CisKKwkvKgorCSAqIEFsd2F5cyBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgMC8xLzIgdG8gYXZvaWQgY2xvYmJlcmluZyBmaWxlcworCSAqIGluIGRpZSgpLiAgSXQgYWxzbyBhdm9pZHMgbWVzc2luZyB1cCB3aGVuIHRoZSBwaXBlcyBhcmUgZHVwJ2VkCisJICogb250byBzdGRpbi9zdGRvdXQvc3RkZXJyIGluIHRoZSBjaGlsZCBwcm9jZXNzZXMgd2Ugc3Bhd24uCisJICovCisJc2FuaXRpemVfc3RkZmRzKCk7CisJcmVzdG9yZV9zaWdwaXBlX3RvX2RlZmF1bHQoKTsKKworCWdpdF9yZXNvbHZlX2V4ZWN1dGFibGVfZGlyKGFyZ3ZbMF0pOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCWluaXRpYWxpemVfdGhlX3JlcG9zaXRvcnkoKTsKKworCWF0dHJfc3RhcnQoKTsKKworCXRyYWNlMl9pbml0aWFsaXplKCk7CisJdHJhY2UyX2NtZF9zdGFydChhcmd2KTsKKwl0cmFjZTJfY29sbGVjdF9wcm9jZXNzX2luZm8oVFJBQ0UyX1BST0NFU1NfSU5GT19TVEFSVFVQKTsKKworCXJlc3VsdCA9IGNtZF9tYWluKGFyZ2MsIGFyZ3YpOworCisJdHJhY2UyX2NtZF9leGl0KHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2FjY2Vzcy5jIGIvY29tcGF0L2FjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZmRhM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYWNjZXNzLmMKQEAgLTAsMCArMSwzMSBAQAorI2RlZmluZSBDT01QQVRfQ09ERV9BQ0NFU1MKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworLyogRG8gdGhlIHNhbWUgdGhpbmcgYWNjZXNzKDIpIGRvZXMsIGJ1dCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQsCisgKiBhbmQgZG9uJ3QgbWFrZSB0aGUgbWlzdGFrZSBvZiB0ZWxsaW5nIHJvb3QgdGhhdCBhbnkgZmlsZSBpcworICogZXhlY3V0YWJsZS4gIFRoaXMgdmVyc2lvbiB1c2VzIHN0YXQoMikuCisgKi8KK2ludCBnaXRfYWNjZXNzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJLyogZG8gbm90IGludGVyZmVyZSBhIG5vcm1hbCB1c2VyICovCisJaWYgKGdldGV1aWQoKSkKKwkJcmV0dXJuIGFjY2VzcyhwYXRoLCBtb2RlKTsKKworCWlmIChzdGF0KHBhdGgsICZzdCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBSb290IGNhbiByZWFkIG9yIHdyaXRlIGFueSBmaWxlLiAqLworCWlmICghKG1vZGUgJiBYX09LKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSb290IGNhbiBleGVjdXRlIGFueSBmaWxlIHRoYXQgaGFzIGFueSBvbmUgb2YgdGhlIGV4ZWN1dGUKKwkgKiBiaXRzIHNldC4KKwkgKi8KKwlpZiAoc3Quc3RfbW9kZSAmIChTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEgpKQorCQlyZXR1cm4gMDsKKworCWVycm5vID0gRUFDQ0VTOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9hcHBsZS1jb21tb24tY3J5cHRvLmggYi9jb21wYXQvYXBwbGUtY29tbW9uLWNyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNzI3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYXBwbGUtY29tbW9uLWNyeXB0by5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qIHN1cHByZXNzIGluY2x1c2lvbiBvZiBjb25mbGljdGluZyBvcGVuc3NsIGZ1bmN0aW9ucyAqLworI2RlZmluZSBPUEVOU1NMX05PX01ENQorI2RlZmluZSBIRUFERVJfSE1BQ19ICisjZGVmaW5lIEhFQURFUl9TSEFfSAorI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25ITUFDLmg+CisjZGVmaW5lIEVWUF9tZDUoLi4uKSBrQ0NIbWFjQWxnTUQ1CisvKiBDQ0htYWMgZG9lc24ndCB0YWtlIG1kX2xlbiBhbmQgdGhlIHJldHVybiB0eXBlIGlzIHZvaWQgKi8KKyNkZWZpbmUgSE1BQyBnaXRfQ0NfSE1BQworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpnaXRfQ0NfSE1BQyhDQ0htYWNBbGdvcml0aG0gYWxnLAorCQljb25zdCB2b2lkICprZXksIGludCBrZXlfbGVuLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCisJCXVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKm1kX2xlbikKK3sKKwlDQ0htYWMoYWxnLCBrZXksIGtleV9sZW4sIGRhdGEsIGRhdGFfbGVuLCBtZCk7CisJcmV0dXJuIG1kOworfQorCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDcwCisjZGVmaW5lIEFQUExFX0xJT05fT1JfTkVXRVIKKyNpbmNsdWRlIDxTZWN1cml0eS9TZWN1cml0eS5oPgorLyogQXBwbGUncyBUWVBFX0JPT0wgY29uZmxpY3RzIHdpdGggY29uZmlnLmMgKi8KKyN1bmRlZiBUWVBFX0JPT0wKKyNlbmRpZgorCisjaWZuZGVmIFNIQTFfTUFYX0JMT0NLX1NJWkUKKyNlcnJvciBVc2luZyBBcHBsZSBDb21tb24gQ3J5cHRvIGxpYnJhcnkgcmVxdWlyZXMgc2V0dGluZyBTSEExX01BWF9CTE9DS19TSVpFCisjZW5kaWYKKworI2lmZGVmIEFQUExFX0xJT05fT1JfTkVXRVIKKyNkZWZpbmUgZ2l0X0NDX2Vycm9yX2NoZWNrKHBhdHRlcm4sIGVycikgXAorCWRvIHsgXAorCQlpZiAoZXJyKSB7IFwKKwkJCWRpZShwYXR0ZXJuLCAobG9uZylDRkVycm9yR2V0Q29kZShlcnIpKTsgXAorCQl9IFwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgRVZQX0VuY29kZUJsb2NrIGdpdF9DQ19FVlBfRW5jb2RlQmxvY2sKK3N0YXRpYyBpbmxpbmUgaW50IGdpdF9DQ19FVlBfRW5jb2RlQmxvY2sodW5zaWduZWQgY2hhciAqb3V0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGlubGVuKQoreworCUNGRXJyb3JSZWYgZXJyOworCVNlY1RyYW5zZm9ybVJlZiBlbmNvZGVyOworCUNGRGF0YVJlZiBpbnB1dCwgb3V0cHV0OworCUNGSW5kZXggbGVuZ3RoOworCisJZW5jb2RlciA9IFNlY0VuY29kZVRyYW5zZm9ybUNyZWF0ZShrU2VjQmFzZTY0RW5jb2RpbmcsICZlcnIpOworCWdpdF9DQ19lcnJvcl9jaGVjaygiU2VjRW5jb2RlVHJhbnNmb3JtQ3JlYXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKworCWlucHV0ID0gQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGluLCBpbmxlbik7CisJU2VjVHJhbnNmb3JtU2V0QXR0cmlidXRlKGVuY29kZXIsIGtTZWNUcmFuc2Zvcm1JbnB1dEF0dHJpYnV0ZU5hbWUsCisJCQlpbnB1dCwgJmVycik7CisJZ2l0X0NDX2Vycm9yX2NoZWNrKCJTZWNUcmFuc2Zvcm1TZXRBdHRyaWJ1dGUgZmFpbGVkOiAlbGQiLCBlcnIpOworCisJb3V0cHV0ID0gU2VjVHJhbnNmb3JtRXhlY3V0ZShlbmNvZGVyLCAmZXJyKTsKKwlnaXRfQ0NfZXJyb3JfY2hlY2soIlNlY1RyYW5zZm9ybUV4ZWN1dGUgZmFpbGVkOiAlbGQiLCBlcnIpOworCisJbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKG91dHB1dCk7CisJQ0ZEYXRhR2V0Qnl0ZXMob3V0cHV0LCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBvdXQpOworCisJQ0ZSZWxlYXNlKG91dHB1dCk7CisJQ0ZSZWxlYXNlKGlucHV0KTsKKwlDRlJlbGVhc2UoZW5jb2Rlcik7CisKKwlyZXR1cm4gKGludClzdHJsZW4oKGNvbnN0IGNoYXIgKilvdXQpOworfQorCisjZGVmaW5lIEVWUF9EZWNvZGVCbG9jayBnaXRfQ0NfRVZQX0RlY29kZUJsb2NrCitzdGF0aWMgaW50IGlubGluZSBnaXRfQ0NfRVZQX0RlY29kZUJsb2NrKHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIGludCBpbmxlbikKK3sKKwlDRkVycm9yUmVmIGVycjsKKwlTZWNUcmFuc2Zvcm1SZWYgZGVjb2RlcjsKKwlDRkRhdGFSZWYgaW5wdXQsIG91dHB1dDsKKwlDRkluZGV4IGxlbmd0aDsKKworCWRlY29kZXIgPSBTZWNEZWNvZGVUcmFuc2Zvcm1DcmVhdGUoa1NlY0Jhc2U2NEVuY29kaW5nLCAmZXJyKTsKKwlnaXRfQ0NfZXJyb3JfY2hlY2soIlNlY0VuY29kZVRyYW5zZm9ybUNyZWF0ZSBmYWlsZWQ6ICVsZCIsIGVycik7CisKKwlpbnB1dCA9IENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpbiwgaW5sZW4pOworCVNlY1RyYW5zZm9ybVNldEF0dHJpYnV0ZShkZWNvZGVyLCBrU2VjVHJhbnNmb3JtSW5wdXRBdHRyaWJ1dGVOYW1lLAorCQkJaW5wdXQsICZlcnIpOworCWdpdF9DQ19lcnJvcl9jaGVjaygiU2VjVHJhbnNmb3JtU2V0QXR0cmlidXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKworCW91dHB1dCA9IFNlY1RyYW5zZm9ybUV4ZWN1dGUoZGVjb2RlciwgJmVycik7CisJZ2l0X0NDX2Vycm9yX2NoZWNrKCJTZWNUcmFuc2Zvcm1FeGVjdXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKworCWxlbmd0aCA9IENGRGF0YUdldExlbmd0aChvdXRwdXQpOworCUNGRGF0YUdldEJ5dGVzKG91dHB1dCwgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgb3V0KTsKKworCUNGUmVsZWFzZShvdXRwdXQpOworCUNGUmVsZWFzZShpbnB1dCk7CisJQ0ZSZWxlYXNlKGRlY29kZXIpOworCisJcmV0dXJuIChpbnQpc3RybGVuKChjb25zdCBjaGFyICopb3V0KTsKK30KKyNlbmRpZiAvKiBBUFBMRV9MSU9OX09SX05FV0VSICovCmRpZmYgLS1naXQgYS9jb21wYXQvYmFzZW5hbWUuYyBiL2NvbXBhdC9iYXNlbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YmQ5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYmFzZW5hbWUuYwpAQCAtMCwwICsxLDcxIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiLi4vc3RyYnVmLmgiCisKKy8qIEFkYXB0ZWQgZnJvbSBsaWJpYmVydHkncyBiYXNlbmFtZS5jLiAgKi8KK2NoYXIgKmdpdGJhc2VuYW1lIChjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKmJhc2U7CisKKwlpZiAocGF0aCkKKwkJc2tpcF9kb3NfZHJpdmVfcHJlZml4KCZwYXRoKTsKKworCWlmICghcGF0aCB8fCAhKnBhdGgpCisJCXJldHVybiAiLiI7CisKKwlmb3IgKGJhc2UgPSBwYXRoOyAqcGF0aDsgcGF0aCsrKSB7CisJCWlmICghaXNfZGlyX3NlcCgqcGF0aCkpCisJCQljb250aW51ZTsKKwkJZG8geworCQkJcGF0aCsrOworCQl9IHdoaWxlIChpc19kaXJfc2VwKCpwYXRoKSk7CisJCWlmICgqcGF0aCkKKwkJCWJhc2UgPSBwYXRoOworCQllbHNlCisJCQl3aGlsZSAoLS1wYXRoICE9IGJhc2UgJiYgaXNfZGlyX3NlcCgqcGF0aCkpCisJCQkJKnBhdGggPSAnXDAnOworCX0KKwlyZXR1cm4gKGNoYXIgKiliYXNlOworfQorCitjaGFyICpnaXRkaXJuYW1lKGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcCA9IHBhdGgsICpzbGFzaCA9IE5VTEwsIGM7CisJaW50IGRvc19kcml2ZV9wcmVmaXg7CisKKwlpZiAoIXApCisJCXJldHVybiAiLiI7CisKKwlpZiAoKGRvc19kcml2ZV9wcmVmaXggPSBza2lwX2Rvc19kcml2ZV9wcmVmaXgoJnApKSAmJiAhKnApCisJCWdvdG8gZG90OworCisJLyoKKwkgKiBQT1NJWC4xLTIwMDEgc2F5cyBkaXJuYW1lKCIvIikgc2hvdWxkIHJldHVybiAiLyIsIGFuZCBkaXJuYW1lKCIvLyIpCisJICogc2hvdWxkIHJldHVybiAiLy8iLCBidXQgZGlybmFtZSgiLy8vIikgc2hvdWxkIHJldHVybiAiLyIgYWdhaW4uCisJICovCisJaWYgKGlzX2Rpcl9zZXAoKnApKSB7CisJCWlmICghcFsxXSB8fCAoaXNfZGlyX3NlcChwWzFdKSAmJiAhcFsyXSkpCisJCQlyZXR1cm4gcGF0aDsKKwkJc2xhc2ggPSArK3A7CisJfQorCXdoaWxlICgoYyA9ICoocCsrKSkpCisJCWlmIChpc19kaXJfc2VwKGMpKSB7CisJCQljaGFyICp0ZW50YXRpdmUgPSBwIC0gMTsKKworCQkJLyogUE9TSVguMS0yMDAxIHNheXMgdG8gaWdub3JlIHRyYWlsaW5nIHNsYXNoZXMgKi8KKwkJCXdoaWxlIChpc19kaXJfc2VwKCpwKSkKKwkJCQlwKys7CisJCQlpZiAoKnApCisJCQkJc2xhc2ggPSB0ZW50YXRpdmU7CisJCX0KKworCWlmIChzbGFzaCkgeworCQkqc2xhc2ggPSAnXDAnOworCQlyZXR1cm4gcGF0aDsKKwl9CisKK2RvdDoKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiUuKnMuIiwgZG9zX2RyaXZlX3ByZWZpeCwgcGF0aCk7CisJcmV0dXJuIGJ1Zi5idWY7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvYnN3YXAuaCBiL2NvbXBhdC9ic3dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZTI1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYnN3YXAuaApAQCAtMCwwICsxLDIxNyBAQAorI2lmbmRlZiBDT01QQVRfQlNXQVBfSAorI2RlZmluZSBDT01QQVRfQlNXQVBfSAorCisvKgorICogTGV0J3MgbWFrZSBzdXJlIHdlIGFsd2F5cyBoYXZlIGEgc2FuZSBkZWZpbml0aW9uIGZvciBudG9obCgpL2h0b25sKCkuCisgKiBTb21lIGxpYnJhcmllcyBkZWZpbmUgdGhvc2UgYXMgYSBmdW5jdGlvbiBjYWxsLCBqdXN0IHRvIHBlcmZvcm0gYnl0ZQorICogc2hpZnRpbmcsIGJyaW5naW5nIHNpZ25pZmljYW50IG92ZXJoZWFkIHRvIHdoYXQgc2hvdWxkIGJlIGEgc2ltcGxlCisgKiBvcGVyYXRpb24uCisgKi8KKworLyoKKyAqIERlZmF1bHQgdmVyc2lvbiB0aGF0IHRoZSBjb21waWxlciBvdWdodCB0byBvcHRpbWl6ZSBwcm9wZXJseSB3aXRoCisgKiBjb25zdGFudCB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZGVmYXVsdF9zd2FiMzIodWludDMyX3QgdmFsKQoreworCXJldHVybiAoKCh2YWwgJiAweGZmMDAwMDAwKSA+PiAyNCkgfAorCQkoKHZhbCAmIDB4MDBmZjAwMDApID4+ICA4KSB8CisJCSgodmFsICYgMHgwMDAwZmYwMCkgPDwgIDgpIHwKKwkJKCh2YWwgJiAweDAwMDAwMGZmKSA8PCAyNCkpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGRlZmF1bHRfYnN3YXA2NCh1aW50NjRfdCB2YWwpCit7CisJcmV0dXJuICgoKHZhbCAmICh1aW50NjRfdCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8CisJCSgodmFsICYgKHVpbnQ2NF90KTB4MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwKKwkJKCh2YWwgJiAodWludDY0X3QpMHgwMDAwMDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfAorCQkoKHZhbCAmICh1aW50NjRfdCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8ICA4KSB8CisJCSgodmFsICYgKHVpbnQ2NF90KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gIDgpIHwKKwkJKCh2YWwgJiAodWludDY0X3QpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfAorCQkoKHZhbCAmICh1aW50NjRfdCkweDAwZmYwMDAwMDAwMDAwMDBVTEwpID4+IDQwKSB8CisJCSgodmFsICYgKHVpbnQ2NF90KTB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpKTsKK30KKworI3VuZGVmIGJzd2FwMzIKKyN1bmRlZiBic3dhcDY0CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKworI2RlZmluZSBic3dhcDMyIGdpdF9ic3dhcDMyCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGdpdF9ic3dhcDMyKHVpbnQzMl90IHgpCit7CisJdWludDMyX3QgcmVzdWx0OworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSkKKwkJcmVzdWx0ID0gZGVmYXVsdF9zd2FiMzIoeCk7CisJZWxzZQorCQlfX2FzbV9fKCJic3dhcCAlMCIgOiAiPXIiIChyZXN1bHQpIDogIjAiICh4KSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSBic3dhcDY0IGdpdF9ic3dhcDY0CisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorc3RhdGljIGlubGluZSB1aW50NjRfdCBnaXRfYnN3YXA2NCh1aW50NjRfdCB4KQoreworCXVpbnQ2NF90IHJlc3VsdDsKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoeCkpCisJCXJlc3VsdCA9IGRlZmF1bHRfYnN3YXA2NCh4KTsKKwllbHNlCisJCV9fYXNtX18oImJzd2FwICVxMCIgOiAiPXIiIChyZXN1bHQpIDogIjAiICh4KSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGdpdF9ic3dhcDY0KHVpbnQ2NF90IHgpCit7CisJdW5pb24geyB1aW50NjRfdCBpNjQ7IHVpbnQzMl90IGkzMlsyXTsgfSB0bXAsIHJlc3VsdDsKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoeCkpCisJCXJlc3VsdC5pNjQgPSBkZWZhdWx0X2Jzd2FwNjQoeCk7CisJZWxzZSB7CisJCXRtcC5pNjQgPSB4OworCQlyZXN1bHQuaTMyWzBdID0gZ2l0X2Jzd2FwMzIodG1wLmkzMlsxXSk7CisJCXJlc3VsdC5pMzJbMV0gPSBnaXRfYnN3YXAzMih0bXAuaTMyWzBdKTsKKwl9CisJcmV0dXJuIHJlc3VsdC5pNjQ7Cit9CisjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9YNjQpKQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgYnN3YXAzMih4KSBfYnl0ZXN3YXBfdWxvbmcoeCkKKyNkZWZpbmUgYnN3YXA2NCh4KSBfYnl0ZXN3YXBfdWludDY0KHgpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChic3dhcDMyKQorCisjdW5kZWYgbnRvaGwKKyN1bmRlZiBodG9ubAorI2RlZmluZSBudG9obCh4KSBic3dhcDMyKHgpCisjZGVmaW5lIGh0b25sKHgpIGJzd2FwMzIoeCkKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGJzd2FwNjQpCisKKyN1bmRlZiBudG9obGwKKyN1bmRlZiBodG9ubGwKKyNkZWZpbmUgbnRvaGxsKHgpIGJzd2FwNjQoeCkKKyNkZWZpbmUgaHRvbmxsKHgpIGJzd2FwNjQoeCkKKworI2Vsc2UKKworI3VuZGVmIG50b2hsbAorI3VuZGVmIGh0b25sbAorCisjaWYgZGVmaW5lZChfX0JZVEVfT1JERVIpICYmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiBkZWZpbmVkKF9fQklHX0VORElBTikKKworIyBkZWZpbmUgR0lUX0JZVEVfT1JERVIgX19CWVRFX09SREVSCisjIGRlZmluZSBHSVRfTElUVExFX0VORElBTiBfX0xJVFRMRV9FTkRJQU4KKyMgZGVmaW5lIEdJVF9CSUdfRU5ESUFOIF9fQklHX0VORElBTgorCisjZWxpZiBkZWZpbmVkKEJZVEVfT1JERVIpICYmIGRlZmluZWQoTElUVExFX0VORElBTikgJiYgZGVmaW5lZChCSUdfRU5ESUFOKQorCisjIGRlZmluZSBHSVRfQllURV9PUkRFUiBCWVRFX09SREVSCisjIGRlZmluZSBHSVRfTElUVExFX0VORElBTiBMSVRUTEVfRU5ESUFOCisjIGRlZmluZSBHSVRfQklHX0VORElBTiBCSUdfRU5ESUFOCisKKyNlbHNlCisKKyMgZGVmaW5lIEdJVF9CSUdfRU5ESUFOIDQzMjEKKyMgZGVmaW5lIEdJVF9MSVRUTEVfRU5ESUFOIDEyMzQKKworIyBpZiBkZWZpbmVkKF9CSUdfRU5ESUFOKSAmJiAhZGVmaW5lZChfTElUVExFX0VORElBTikKKyMgIGRlZmluZSBHSVRfQllURV9PUkRFUiBHSVRfQklHX0VORElBTgorIyBlbGlmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pICYmICFkZWZpbmVkKF9CSUdfRU5ESUFOKQorIyAgZGVmaW5lIEdJVF9CWVRFX09SREVSIEdJVF9MSVRUTEVfRU5ESUFOCisjIGVsaWYgZGVmaW5lZChfX1RIV19CSUdfRU5ESUFOX18pICYmICFkZWZpbmVkKF9fVEhXX0xJVFRMRV9FTkRJQU5fXykKKyMgIGRlZmluZSBHSVRfQllURV9PUkRFUiBHSVRfQklHX0VORElBTgorIyBlbGlmIGRlZmluZWQoX19USFdfTElUVExFX0VORElBTl9fKSAmJiAhZGVmaW5lZChfX1RIV19CSUdfRU5ESUFOX18pCisjICBkZWZpbmUgR0lUX0JZVEVfT1JERVIgR0lUX0xJVFRMRV9FTkRJQU4KKyMgZWxzZQorIyAgZXJyb3IgIkNhbm5vdCBkZXRlcm1pbmUgZW5kaWFubmVzcyIKKyMgZW5kaWYKKworI2VuZGlmCisKKyNpZiBHSVRfQllURV9PUkRFUiA9PSBHSVRfQklHX0VORElBTgorIyBkZWZpbmUgbnRvaGxsKG4pIChuKQorIyBkZWZpbmUgaHRvbmxsKG4pIChuKQorI2Vsc2UKKyMgZGVmaW5lIG50b2hsbChuKSBkZWZhdWx0X2Jzd2FwNjQobikKKyMgZGVmaW5lIGh0b25sbChuKSBkZWZhdWx0X2Jzd2FwNjQobikKKyNlbmRpZgorCisjZW5kaWYKKworLyoKKyAqIFBlcmZvcm1hbmNlIG1pZ2h0IGJlIGltcHJvdmVkIGlmIHRoZSBDUFUgYXJjaGl0ZWN0dXJlIGlzIE9LIHdpdGgKKyAqIHVuYWxpZ25lZCAzMi1iaXQgbG9hZHMgYW5kIGEgZmFzdCBudG9obCgpIGlzIGF2YWlsYWJsZS4KKyAqIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gYnl0ZSBsb2FkcyBhbmQgc2hpZnRzIHdoaWNoIGlzIHBvcnRhYmxlLAorICogYW5kIGlzIGZhc3RlciBvbiBhcmNoaXRlY3R1cmVzIHdpdGggbWVtb3J5IGFsaWdubWVudCBpc3N1ZXMuCisgKi8KKworI2lmICFkZWZpbmVkKE5PX1VOQUxJR05FRF9MT0FEUykgJiYgKCBcCisgICAgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCisgICAgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX1g2NCkgfHwgXAorICAgIGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykpCisKKyNkZWZpbmUgZ2V0X2JlMTYocCkJbnRvaHMoKih1bnNpZ25lZCBzaG9ydCAqKShwKSkKKyNkZWZpbmUgZ2V0X2JlMzIocCkJbnRvaGwoKih1bnNpZ25lZCBpbnQgKikocCkpCisjZGVmaW5lIGdldF9iZTY0KHApCW50b2hsbCgqKHVpbnQ2NF90ICopKHApKQorI2RlZmluZSBwdXRfYmUzMihwLCB2KQlkbyB7ICoodW5zaWduZWQgaW50ICopKHApID0gaHRvbmwodik7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB1dF9iZTY0KHAsIHYpCWRvIHsgKih1aW50NjRfdCAqKShwKSA9IGh0b25sbCh2KTsgfSB3aGlsZSAoMCkKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB1aW50MTZfdCBnZXRfYmUxNihjb25zdCB2b2lkICpwdHIpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHB0cjsKKwlyZXR1cm4JKHVpbnQxNl90KXBbMF0gPDwgOCB8CisJCSh1aW50MTZfdClwWzFdIDw8IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZ2V0X2JlMzIoY29uc3Qgdm9pZCAqcHRyKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBwdHI7CisJcmV0dXJuCSh1aW50MzJfdClwWzBdIDw8IDI0IHwKKwkJKHVpbnQzMl90KXBbMV0gPDwgMTYgfAorCQkodWludDMyX3QpcFsyXSA8PCAgOCB8CisJCSh1aW50MzJfdClwWzNdIDw8ICAwOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGdldF9iZTY0KGNvbnN0IHZvaWQgKnB0cikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gcHRyOworCXJldHVybgkodWludDY0X3QpZ2V0X2JlMzIoJnBbMF0pIDw8IDMyIHwKKwkJKHVpbnQ2NF90KWdldF9iZTMyKCZwWzRdKSA8PCAgMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9iZTMyKHZvaWQgKnB0ciwgdWludDMyX3QgdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciAqcCA9IHB0cjsKKwlwWzBdID0gdmFsdWUgPj4gMjQ7CisJcFsxXSA9IHZhbHVlID4+IDE2OworCXBbMl0gPSB2YWx1ZSA+PiAgODsKKwlwWzNdID0gdmFsdWUgPj4gIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYmU2NCh2b2lkICpwdHIsIHVpbnQ2NF90IHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgKnAgPSBwdHI7CisJcFswXSA9IHZhbHVlID4+IDU2OworCXBbMV0gPSB2YWx1ZSA+PiA0ODsKKwlwWzJdID0gdmFsdWUgPj4gNDA7CisJcFszXSA9IHZhbHVlID4+IDMyOworCXBbNF0gPSB2YWx1ZSA+PiAyNDsKKwlwWzVdID0gdmFsdWUgPj4gMTY7CisJcFs2XSA9IHZhbHVlID4+ICA4OworCXBbN10gPSB2YWx1ZSA+PiAgMDsKK30KKworI2VuZGlmCisKKyNlbmRpZiAvKiBDT01QQVRfQlNXQVBfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L2ZpbGVuby5jIGIvY29tcGF0L2ZpbGVuby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODBlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvZmlsZW5vLmMKQEAgLTAsMCArMSw3IEBACisjZGVmaW5lIENPTVBBVF9DT0RFX0ZJTEVOTworI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitpbnQgZ2l0X2ZpbGVubyhGSUxFICpzdHJlYW0pCit7CisJcmV0dXJuIGZpbGVubyhzdHJlYW0pOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2ZvcGVuLmMgYi9jb21wYXQvZm9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDdiM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2ZvcGVuLmMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBUaGUgb3JkZXIgb2YgdGhlIGZvbGxvd2luZyB0d28gbGluZXMgaXMgaW1wb3J0YW50LgorICoKKyAqICBTVVBQUkVTU19GT1BFTl9SRURFRklOSVRJT04gaXMgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIGdpdC1jb21wYXQtdXRpbC5oCisgKiAgdG8gYXZvaWQgdGhlIHJlZGVmaW5pdGlvbiBvZiBmb3BlbiB3aXRoaW4gZ2l0LWNvbXBhdC11dGlsLmguIFRoaXMgaXMKKyAqICBuZWNlc3Nhcnkgc2luY2UgZm9wZW4gaXMgYSBtYWNybyBvbiBzb21lIHBsYXRmb3JtcyB3aGljaCBtYXkgYmUgc2V0CisgKiAgYmFzZWQgb24gY29tcGlsZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIG9uIEFJWCBmb3BlbiBpcyBzZXQgdG8gZm9wZW42NAorICogIHdoZW4gX0xBUkdFX0ZJTEVTIGlzIGRlZmluZWQuIFRoZSBwcmV2aW91cyB0ZWNobmlxdWUgb2YgbWVyZWx5IHVuZGVmaW5pbmcKKyAqICBmb3BlbiBhZnRlciBpbmNsdWRpbmcgZ2l0LWNvbXBhdC11dGlsLmggaXMgaW5hZGVxdWF0ZSBpbiB0aGlzIGNhc2UuCisgKi8KKyNkZWZpbmUgU1VQUFJFU1NfRk9QRU5fUkVERUZJTklUSU9OCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK0ZJTEUgKmdpdF9mb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKmZwOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKG1vZGVbMF0gPT0gJ3cnIHx8IG1vZGVbMF0gPT0gJ2EnKQorCQlyZXR1cm4gZm9wZW4ocGF0aCwgbW9kZSk7CisKKwlpZiAoIShmcCA9IGZvcGVuKHBhdGgsIG1vZGUpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZnN0YXQoZmlsZW5vKGZwKSwgJnN0KSkgeworCQlmY2xvc2UoZnApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQlmY2xvc2UoZnApOworCQllcnJubyA9IEVJU0RJUjsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGZwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2dtdGltZS5jIGIvY29tcGF0L2dtdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzYyZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvZ210aW1lLmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorI3VuZGVmIGdtdGltZQorI3VuZGVmIGdtdGltZV9yCisKK3N0cnVjdCB0bSAqZ2l0X2dtdGltZShjb25zdCB0aW1lX3QgKnRpbWVwKQoreworCXN0YXRpYyBzdHJ1Y3QgdG0gcmVzdWx0OworCXJldHVybiBnaXRfZ210aW1lX3IodGltZXAsICZyZXN1bHQpOworfQorCitzdHJ1Y3QgdG0gKmdpdF9nbXRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCkKK3sKKwlzdHJ1Y3QgdG0gKnJldDsKKworCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7CisJcmV0ID0gZ210aW1lX3IodGltZXAsIHJlc3VsdCk7CisKKwkvKgorCSAqIFJhdGhlciB0aGFuIE5VTEwsIEZyZWVCU0QgZ210aW1lIHNpbXBseSBsZWF2ZXMgdGhlICJzdHJ1Y3QgdG0iCisJICogdW50b3VjaGVkIHdoZW4gaXQgZW5jb3VudGVycyBvdmVyZmxvdy4gU2luY2UgIm1kYXkiIGNhbm5vdCBvdGhlcndpc2UKKwkgKiBiZSB6ZXJvLCB3ZSBjYW4gdGVzdCB0aGlzIHZlcnkgcXVpY2tseS4KKwkgKi8KKwlpZiAocmV0ICYmICFyZXQtPnRtX21kYXkpIHsKKwkJcmV0ID0gTlVMTDsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9oc3RyZXJyb3IuYyBiL2NvbXBhdC9oc3RyZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODVhMmZhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2hzdHJlcnJvci5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKK2NvbnN0IGNoYXIgKmdpdGhzdHJlcnJvcihpbnQgZXJyKQoreworCXN0YXRpYyBjaGFyIGJ1ZmZlcls0OF07CisJc3dpdGNoIChlcnIpCisJeworCWNhc2UgSE9TVF9OT1RfRk9VTkQ6CisJCXJldHVybiAiQXV0aG9yaXRhdGl2ZSBhbnN3ZXI6IGhvc3Qgbm90IGZvdW5kIjsKKwljYXNlIE5PX0RBVEE6CisJCXJldHVybiAiVmFsaWQgbmFtZSwgbm8gZGF0YSByZWNvcmQgb2YgcmVxdWVzdGVkIHR5cGUiOworCWNhc2UgTk9fUkVDT1ZFUlk6CisJCXJldHVybiAiTm9uIHJlY292ZXJhYmxlIGVycm9ycywgRk9STUVSUiwgUkVGVVNFRCwgTk9USU1QIjsKKwljYXNlIFRSWV9BR0FJTjoKKwkJcmV0dXJuICJOb24tYXV0aG9yaXRhdGl2ZSBcImhvc3Qgbm90IGZvdW5kXCIsIG9yIFNFUlZFUkZBSUwiOworCX0KKwlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiTmFtZSByZXNvbHV0aW9uIGVycm9yICVkIiwgZXJyKTsKKwlyZXR1cm4gYnVmZmVyOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2luZXRfbnRvcC5jIGIvY29tcGF0L2luZXRfbnRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzA3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvaW5ldF9udG9wLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKKyAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKKyAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKyNpZm5kZWYgTlNfSU5BRERSU1oKKyNkZWZpbmUgTlNfSU5BRERSU1oJNAorI2VuZGlmCisjaWZuZGVmIE5TX0lONkFERFJTWgorI2RlZmluZSBOU19JTjZBRERSU1oJMTYKKyNlbmRpZgorI2lmbmRlZiBOU19JTlQxNlNaCisjZGVmaW5lIE5TX0lOVDE2U1oJMgorI2VuZGlmCisKKy8qCisgKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKKyAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICovCisKKy8qIGNvbnN0IGNoYXIgKgorICogaW5ldF9udG9wNChzcmMsIGRzdCwgc2l6ZSkKKyAqCWZvcm1hdCBhbiBJUHY0IGFkZHJlc3MKKyAqIHJldHVybjoKKyAqCWBkc3QnIChhcyBhIGNvbnN0KQorICogbm90ZXM6CisgKgkoMSkgdXNlcyBubyBzdGF0aWNzCisgKgkoMikgdGFrZXMgYSB1X2NoYXIqIG5vdCBhbiBpbl9hZGRyIGFzIGlucHV0CisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworCXN0YXRpYyBjb25zdCBjaGFyIGZtdFtdID0gIiV1LiV1LiV1LiV1IjsKKwljaGFyIHRtcFtzaXplb2YgIjI1NS4yNTUuMjU1LjI1NSJdOworCWludCBucHJpbnRlZDsKKworCW5wcmludGVkID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgZm10LCBzcmNbMF0sIHNyY1sxXSwgc3JjWzJdLCBzcmNbM10pOworCWlmIChucHJpbnRlZCA8IDApCisJCXJldHVybiAoTlVMTCk7CS8qIHdlIGFzc3VtZSAiZXJybm8iIHdhcyBzZXQgYnkgInNucHJpbnRmKCkiICovCisJaWYgKChzaXplX3QpbnByaW50ZWQgPj0gc2l6ZSkgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3RybGNweShkc3QsIHRtcCwgc2l6ZSk7CisJcmV0dXJuIChkc3QpOworfQorCisjaWZuZGVmIE5PX0lQVjYKKy8qIGNvbnN0IGNoYXIgKgorICogaW5ldF9udG9wNihzcmMsIGRzdCwgc2l6ZSkKKyAqCWNvbnZlcnQgSVB2NiBiaW5hcnkgYWRkcmVzcyBpbnRvIHByZXNlbnRhdGlvbiAocHJpbnRhYmxlKSBmb3JtYXQKKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2luZXRfbnRvcDYoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisJLyoKKwkgKiBOb3RlIHRoYXQgaW50MzJfdCBhbmQgaW50MTZfdCBuZWVkIG9ubHkgYmUgImF0IGxlYXN0IiBsYXJnZSBlbm91Z2gKKwkgKiB0byBjb250YWluIGEgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBzaXplLiAgT24gc29tZSBzeXN0ZW1zLCBsaWtlCisJICogQ3JheXMsIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgYW4gaW50ZWdlciB2YXJpYWJsZSB3aXRoIDE2IGJpdHMuCisJICogS2VlcCB0aGlzIGluIG1pbmQgaWYgeW91IHRoaW5rIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjb2RlZAorCSAqIHRvIHVzZSBwb2ludGVyIG92ZXJsYXlzLiAgQWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKwkgKi8KKwljaGFyIHRtcFtzaXplb2YgImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOjI1NS4yNTUuMjU1LjI1NSJdLCAqdHA7CisJc3RydWN0IHsgaW50IGJhc2UsIGxlbjsgfSBiZXN0LCBjdXI7CisJdW5zaWduZWQgaW50IHdvcmRzW05TX0lONkFERFJTWiAvIE5TX0lOVDE2U1pdOworCWludCBpOworCisJLyoKKwkgKiBQcmVwcm9jZXNzOgorCSAqCUNvcHkgdGhlIGlucHV0IChieXRld2lzZSkgYXJyYXkgaW50byBhIHdvcmR3aXNlIGFycmF5LgorCSAqCUZpbmQgdGhlIGxvbmdlc3QgcnVuIG9mIDB4MDAncyBpbiBzcmNbXSBmb3IgOjogc2hvcnRoYW5kaW5nLgorCSAqLworCW1lbXNldCh3b3JkcywgJ1wwJywgc2l6ZW9mIHdvcmRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlNfSU42QUREUlNaOyBpKyspCisJCXdvcmRzW2kgLyAyXSB8PSAoc3JjW2ldIDw8ICgoMSAtIChpICUgMikpIDw8IDMpKTsKKwliZXN0LmJhc2UgPSAtMTsKKwliZXN0LmxlbiA9IDA7CisJY3VyLmJhc2UgPSAtMTsKKwljdXIubGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgKE5TX0lONkFERFJTWiAvIE5TX0lOVDE2U1opOyBpKyspIHsKKwkJaWYgKHdvcmRzW2ldID09IDApIHsKKwkJCWlmIChjdXIuYmFzZSA9PSAtMSkKKwkJCQljdXIuYmFzZSA9IGksIGN1ci5sZW4gPSAxOworCQkJZWxzZQorCQkJCWN1ci5sZW4rKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChjdXIuYmFzZSAhPSAtMSkgeworCQkJCWlmIChiZXN0LmJhc2UgPT0gLTEgfHwgY3VyLmxlbiA+IGJlc3QubGVuKQorCQkJCQliZXN0ID0gY3VyOworCQkJCWN1ci5iYXNlID0gLTE7CisJCQl9CisJCX0KKwl9CisJaWYgKGN1ci5iYXNlICE9IC0xKSB7CisJCWlmIChiZXN0LmJhc2UgPT0gLTEgfHwgY3VyLmxlbiA+IGJlc3QubGVuKQorCQkJYmVzdCA9IGN1cjsKKwl9CisJaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiBiZXN0LmxlbiA8IDIpCisJCWJlc3QuYmFzZSA9IC0xOworCisJLyoKKwkgKiBGb3JtYXQgdGhlIHJlc3VsdC4KKwkgKi8KKwl0cCA9IHRtcDsKKwlmb3IgKGkgPSAwOyBpIDwgKE5TX0lONkFERFJTWiAvIE5TX0lOVDE2U1opOyBpKyspIHsKKwkJLyogQXJlIHdlIGluc2lkZSB0aGUgYmVzdCBydW4gb2YgMHgwMCdzPyAqLworCQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGkgPj0gYmVzdC5iYXNlICYmCisJCSAgICBpIDwgKGJlc3QuYmFzZSArIGJlc3QubGVuKSkgeworCQkJaWYgKGkgPT0gYmVzdC5iYXNlKQorCQkJCSp0cCsrID0gJzonOworCQkJY29udGludWU7CisJCX0KKwkJLyogQXJlIHdlIGZvbGxvd2luZyBhbiBpbml0aWFsIHJ1biBvZiAweDAwcyBvciBhbnkgcmVhbCBoZXg/ICovCisJCWlmIChpICE9IDApCisJCQkqdHArKyA9ICc6JzsKKwkJLyogSXMgdGhpcyBhZGRyZXNzIGFuIGVuY2Fwc3VsYXRlZCBJUHY0PyAqLworCQlpZiAoaSA9PSA2ICYmIGJlc3QuYmFzZSA9PSAwICYmCisJCSAgICAoYmVzdC5sZW4gPT0gNiB8fCAoYmVzdC5sZW4gPT0gNSAmJiB3b3Jkc1s1XSA9PSAweGZmZmYpKSkgeworCQkJaWYgKCFpbmV0X250b3A0KHNyYysxMiwgdHAsIHNpemVvZiB0bXAgLSAodHAgLSB0bXApKSkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJdHAgKz0gc3RybGVuKHRwKTsKKwkJCWJyZWFrOworCQl9CisJCXRwICs9IHNucHJpbnRmKHRwLCBzaXplb2YgdG1wIC0gKHRwIC0gdG1wKSwgIiV4Iiwgd29yZHNbaV0pOworCX0KKwkvKiBXYXMgaXQgYSB0cmFpbGluZyBydW4gb2YgMHgwMCdzPyAqLworCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgKGJlc3QuYmFzZSArIGJlc3QubGVuKSA9PQorCSAgICAoTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWikpCisJCSp0cCsrID0gJzonOworCSp0cCsrID0gJ1wwJzsKKworCS8qCisJICogQ2hlY2sgZm9yIG92ZXJmbG93LCBjb3B5LCBhbmQgd2UncmUgZG9uZS4KKwkgKi8KKwlpZiAoKHNpemVfdCkodHAgLSB0bXApID4gc2l6ZSkgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3RybGNweShkc3QsIHRtcCwgc2l6ZSk7CisJcmV0dXJuIChkc3QpOworfQorI2VuZGlmCisKKy8qIGNoYXIgKgorICogaW5ldF9udG9wKGFmLCBzcmMsIGRzdCwgc2l6ZSkKKyAqCWNvbnZlcnQgYSBuZXR3b3JrIGZvcm1hdCBhZGRyZXNzIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCisgKiByZXR1cm46CisgKglwb2ludGVyIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQgYWRkcmVzcyAoYGRzdCcpLCBvciBOVUxMIChzZWUgZXJybm8pLgorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworY29uc3QgY2hhciAqCitpbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIChpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKSk7CisjaWZuZGVmIE5PX0lQVjYKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gKGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpKTsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWVycm5vID0gRUFGTk9TVVBQT1JUOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9jb21wYXQvaW5ldF9wdG9uLmMgYi9jb21wYXQvaW5ldF9wdG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5YTBhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9pbmV0X3B0b24uYwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxICBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTQorICogRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTAorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORworICogRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisgKiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKyNpZm5kZWYgTlNfSU5UMTZTWgorI2RlZmluZSBOU19JTlQxNlNaICAgICAgIDIKKyNlbmRpZgorCisjaWZuZGVmIE5TX0lOQUREUlNaCisjZGVmaW5lIE5TX0lOQUREUlNaICAgICAgNAorI2VuZGlmCisKKyNpZm5kZWYgTlNfSU42QUREUlNaCisjZGVmaW5lIE5TX0lONkFERFJTWiAgICAxNgorI2VuZGlmCisKKy8qCisgKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKKyAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICovCisKK3N0YXRpYyBpbnQgaW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCk7CisjaWZuZGVmIE5PX0lQVjYKK3N0YXRpYyBpbnQgaW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCk7CisjZW5kaWYKKworLyogaW50CisgKiBpbmV0X3B0b240KHNyYywgZHN0KQorICogICAgICBsaWtlIGluZXRfYXRvbigpIGJ1dCB3aXRob3V0IGFsbCB0aGUgaGV4YWRlY2ltYWwgYW5kIHNob3J0aGFuZC4KKyAqIHJldHVybjoKKyAqICAgICAgMSBpZiBgc3JjJyBpcyBhIHZhbGlkIGRvdHRlZCBxdWFkLCBlbHNlIDAuCisgKiBub3RpY2U6CisgKiAgICAgIGRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgorICogYXV0aG9yOgorICogICAgICBQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgaW50CitpbmV0X3B0b240KGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0KQoreworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5IjsKKyAgICAgICAgaW50IHNhd19kaWdpdCwgb2N0ZXRzLCBjaDsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0bXBbTlNfSU5BRERSU1pdLCAqdHA7CisKKyAgICAgICAgc2F3X2RpZ2l0ID0gMDsKKyAgICAgICAgb2N0ZXRzID0gMDsKKyAgICAgICAgKih0cCA9IHRtcCkgPSAwOworICAgICAgICB3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGNoOworCisgICAgICAgICAgICAgICAgaWYgKChwY2ggPSBzdHJjaHIoZGlnaXRzLCBjaCkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuZXcgPSAqdHAgKiAxMCArIChwY2ggLSBkaWdpdHMpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3ID4gMjU1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgKnRwID0gbmV3OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgc2F3X2RpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK29jdGV0cyA+IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3X2RpZ2l0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcuJyAmJiBzYXdfZGlnaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvY3RldHMgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICorK3RwID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhd19kaWdpdCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICB9CisgICAgICAgIGlmIChvY3RldHMgPCA0KQorICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIG1lbWNweShkc3QsIHRtcCwgTlNfSU5BRERSU1opOworICAgICAgICByZXR1cm4gKDEpOworfQorCisvKiBpbnQKKyAqIGluZXRfcHRvbjYoc3JjLCBkc3QpCisgKiAgICAgIGNvbnZlcnQgcHJlc2VudGF0aW9uIGxldmVsIGFkZHJlc3MgdG8gbmV0d29yayBvcmRlciBiaW5hcnkgZm9ybS4KKyAqIHJldHVybjoKKyAqICAgICAgMSBpZiBgc3JjJyBpcyBhIHZhbGlkIFtSRkMxODg0IDIuMl0gYWRkcmVzcywgZWxzZSAwLgorICogbm90aWNlOgorICogICAgICAoMSkgZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKiAgICAgICgyKSA6OiBpbiBhIGZ1bGwgYWRkcmVzcyBpcyBzaWxlbnRseSBpZ25vcmVkLgorICogY3JlZGl0OgorICogICAgICBpbnNwaXJlZCBieSBNYXJrIEFuZHJld3MuCisgKiBhdXRob3I6CisgKiAgICAgIFBhdWwgVml4aWUsIDE5OTYuCisgKi8KKworI2lmbmRlZiBOT19JUFY2CitzdGF0aWMgaW50CitpbmV0X3B0b242KGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0KQoreworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciB4ZGlnaXRzX2xbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeGRpZ2l0c191W10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdG1wW05TX0lONkFERFJTWl0sICp0cCwgKmVuZHAsICpjb2xvbnA7CisgICAgICAgIGNvbnN0IGNoYXIgKnhkaWdpdHMsICpjdXJ0b2s7CisgICAgICAgIGludCBjaCwgc2F3X3hkaWdpdDsKKyAgICAgICAgdW5zaWduZWQgaW50IHZhbDsKKworICAgICAgICBtZW1zZXQoKHRwID0gdG1wKSwgJ1wwJywgTlNfSU42QUREUlNaKTsKKyAgICAgICAgZW5kcCA9IHRwICsgTlNfSU42QUREUlNaOworICAgICAgICBjb2xvbnAgPSBOVUxMOworICAgICAgICAvKiBMZWFkaW5nIDo6IHJlcXVpcmVzIHNvbWUgc3BlY2lhbCBoYW5kbGluZy4gKi8KKyAgICAgICAgaWYgKCpzcmMgPT0gJzonKQorICAgICAgICAgICAgICAgIGlmICgqKytzcmMgIT0gJzonKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgY3VydG9rID0gc3JjOworICAgICAgICBzYXdfeGRpZ2l0ID0gMDsKKyAgICAgICAgdmFsID0gMDsKKyAgICAgICAgd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBjaDsKKworICAgICAgICAgICAgICAgIGlmICgocGNoID0gc3RyY2hyKCh4ZGlnaXRzID0geGRpZ2l0c19sKSwgY2gpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgcGNoID0gc3RyY2hyKCh4ZGlnaXRzID0geGRpZ2l0c191KSwgY2gpOworICAgICAgICAgICAgICAgIGlmIChwY2ggIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsIDw8PSA0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFsIHw9IChwY2ggLSB4ZGlnaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPiAweGZmZmYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzYXdfeGRpZ2l0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJzonKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ0b2sgPSBzcmM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNhd194ZGlnaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9ucCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvbnAgPSB0cDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHAgKyBOU19JTlQxNlNaID4gZW5kcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0cCsrID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgPj4gOCkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgKnRwKysgPSAodW5zaWduZWQgY2hhcikgdmFsICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhd194ZGlnaXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4nICYmICgodHAgKyBOU19JTkFERFJTWikgPD0gZW5kcCkgJiYKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9wdG9uNChjdXJ0b2ssIHRwKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRwICs9IE5TX0lOQUREUlNaOworICAgICAgICAgICAgICAgICAgICAgICAgc2F3X3hkaWdpdCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8qICdcMCcgd2FzIHNlZW4gYnkgaW5ldF9wdG9uNCgpLiAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICB9CisgICAgICAgIGlmIChzYXdfeGRpZ2l0KSB7CisgICAgICAgICAgICAgICAgaWYgKHRwICsgTlNfSU5UMTZTWiA+IGVuZHApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICp0cCsrID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgPj4gOCkgJiAweGZmOworICAgICAgICAgICAgICAgICp0cCsrID0gKHVuc2lnbmVkIGNoYXIpIHZhbCAmIDB4ZmY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbG9ucCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBTaW5jZSBzb21lIG1lbW1vdmUoKSdzIGVycm9uZW91c2x5IGZhaWwgdG8gaGFuZGxlCisgICAgICAgICAgICAgICAgICogb3ZlcmxhcHBpbmcgcmVnaW9ucywgd2UnbGwgZG8gdGhlIHNoaWZ0IGJ5IGhhbmQuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgY29uc3QgaW50IG4gPSB0cCAtIGNvbG9ucDsKKyAgICAgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwWy0gaV0gPSBjb2xvbnBbbiAtIGldOworICAgICAgICAgICAgICAgICAgICAgICAgY29sb25wW24gLSBpXSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRwID0gZW5kcDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHAgIT0gZW5kcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICBtZW1jcHkoZHN0LCB0bXAsIE5TX0lONkFERFJTWik7CisgICAgICAgIHJldHVybiAoMSk7Cit9CisjZW5kaWYKKworLyogaW50CisgKiBpc2NfbmV0X3B0b24oYWYsIHNyYywgZHN0KQorICogICAgICBjb252ZXJ0IGZyb20gcHJlc2VudGF0aW9uIGZvcm1hdCAod2hpY2ggdXN1YWxseSBtZWFucyBBU0NJSSBwcmludGFibGUpCisgKiAgICAgIHRvIG5ldHdvcmsgZm9ybWF0ICh3aGljaCBpcyB1c3VhbGx5IHNvbWUga2luZCBvZiBiaW5hcnkgZm9ybWF0KS4KKyAqIHJldHVybjoKKyAqICAgICAgMSBpZiB0aGUgYWRkcmVzcyB3YXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHkKKyAqICAgICAgMCBpZiB0aGUgYWRkcmVzcyB3YXNuJ3QgdmFsaWQgKGBkc3QnIGlzIHVudG91Y2hlZCBpbiB0aGlzIGNhc2UpCisgKiAgICAgIC0xIGlmIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQgKGBkc3QnIGlzIHVudG91Y2hlZCBpbiB0aGlzIGNhc2UsIHRvbykKKyAqIGF1dGhvcjoKKyAqICAgICAgUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworaW50CitpbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKK3sKKyAgICAgICAgc3dpdGNoIChhZikgeworICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbmV0X3B0b240KHNyYywgZHN0KSk7CisjaWZuZGVmIE5PX0lQVjYKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgICAgICByZXR1cm4gKGluZXRfcHRvbjYoc3JjLCBkc3QpKTsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGVycm5vID0gRUFGTk9TVVBQT1JUOworICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9CisgICAgICAgIC8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9tZW1tZW0uYyBiL2NvbXBhdC9tZW1tZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmJjYjQyCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21lbW1lbS5jCkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKwordm9pZCAqZ2l0bWVtbWVtKGNvbnN0IHZvaWQgKmhheXN0YWNrLCBzaXplX3QgaGF5c3RhY2tfbGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm5lZWRsZSwgc2l6ZV90IG5lZWRsZV9sZW4pCit7CisJY29uc3QgY2hhciAqYmVnaW4gPSBoYXlzdGFjazsKKwljb25zdCBjaGFyICpsYXN0X3Bvc3NpYmxlID0gYmVnaW4gKyBoYXlzdGFja19sZW4gLSBuZWVkbGVfbGVuOworCWNvbnN0IGNoYXIgKnRhaWwgPSBuZWVkbGU7CisJY2hhciBwb2ludDsKKworCS8qCisJICogVGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGVtcHR5IHN0cmluZyBpcyBkZWVtZWQgdG8gb2NjdXIgYXQKKwkgKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuCisJICovCisJaWYgKG5lZWRsZV9sZW4gPT0gMCkKKwkJcmV0dXJuICh2b2lkICopYmVnaW47CisKKwkvKgorCSAqIFNhbml0eSBjaGVjaywgb3RoZXJ3aXNlIHRoZSBsb29wIG1pZ2h0IHNlYXJjaCB0aHJvdWdoIHRoZSB3aG9sZQorCSAqIG1lbW9yeS4KKwkgKi8KKwlpZiAoaGF5c3RhY2tfbGVuIDwgbmVlZGxlX2xlbikKKwkJcmV0dXJuIE5VTEw7CisKKwlwb2ludCA9ICp0YWlsKys7CisJZm9yICg7IGJlZ2luIDw9IGxhc3RfcG9zc2libGU7IGJlZ2luKyspIHsKKwkJaWYgKCpiZWdpbiA9PSBwb2ludCAmJiAhbWVtY21wKGJlZ2luICsgMSwgdGFpbCwgbmVlZGxlX2xlbiAtIDEpKQorCQkJcmV0dXJuICh2b2lkICopYmVnaW47CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuYyBiL2NvbXBhdC9taW5ndy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNDA2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbWluZ3cuYwpAQCAtMCwwICsxLDI4NTAgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ3aW4zMi5oIgorI2luY2x1ZGUgPGNvbmlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlICIuLi9zdHJidWYuaCIKKyNpbmNsdWRlICIuLi9ydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgIi4uL2NhY2hlLmgiCisjaW5jbHVkZSAid2luMzIvbGF6eWxvYWQuaCIKKyNpbmNsdWRlICIuLi9jb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworI2RlZmluZSBIQ0FTVCh0eXBlLCBoYW5kbGUpICgodHlwZSkoaW50cHRyX3QpaGFuZGxlKQorCitzdGF0aWMgY29uc3QgaW50IGRlbGF5W10gPSB7IDAsIDEsIDEwLCAyMCwgNDAgfTsKKwordm9pZCBvcGVuX2luX2dkYih2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlleHRlcm4gY2hhciAqX3BnbXB0cjsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJtaW50dHkiLCAiZ2RiIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIi0tcGlkPSVkIiwgZ2V0cGlkKCkpOworCWNwLmNsZWFuX29uX2V4aXQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZjcCkgPCAwKQorCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBzdGFydCBnZGIiKTsKKwlzbGVlcCgxKTsKK30KKworaW50IGVycl93aW5fdG9fcG9zaXgoRFdPUkQgd2luZXJyKQoreworCWludCBlcnJvciA9IEVOT1NZUzsKKwlzd2l0Y2god2luZXJyKSB7CisJY2FzZSBFUlJPUl9BQ0NFU1NfREVOSUVEOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9BQ0NPVU5UX0RJU0FCTEVEOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9BQ0NPVU5UX1JFU1RSSUNUSU9OOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9BTFJFQURZX0FTU0lHTkVEOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0FMUkVBRFlfRVhJU1RTOiBlcnJvciA9IEVFWElTVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9BUklUSE1FVElDX09WRVJGTE9XOiBlcnJvciA9IEVSQU5HRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfQ09NTUFORDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0RFVklDRTogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0RSSVZFUl9MRVZFTDogZXJyb3IgPSBFTlhJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfRVhFX0ZPUk1BVDogZXJyb3IgPSBFTk9FWEVDOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9GT1JNQVQ6IGVycm9yID0gRU5PRVhFQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfTEVOR1RIOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfUEFUSE5BTUU6IGVycm9yID0gRU5PRU5UOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9QSVBFOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9VTklUOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfVVNFUk5BTUU6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0JST0tFTl9QSVBFOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX0JVRkZFUl9PVkVSRkxPVzogZXJyb3IgPSBFTkFNRVRPT0xPTkc7IGJyZWFrOworCWNhc2UgRVJST1JfQlVTWTogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9CVVNZX0RSSVZFOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEOiBlcnJvciA9IEVOT1NZUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DQU5OT1RfTUFLRTogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfQ0FOVE9QRU46IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTlRSRUFEOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DQU5UV1JJVEU6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0NSQzogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQ1VSUkVOVF9ESVJFQ1RPUlk6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0RFVklDRV9JTl9VU0U6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfREVWX05PVF9FWElTVDogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfRElSRUNUT1JZOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9ESVJfTk9UX0VNUFRZOiBlcnJvciA9IEVOT1RFTVBUWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9ESVNLX0NIQU5HRTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfRElTS19GVUxMOiBlcnJvciA9IEVOT1NQQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9EUklWRV9MT0NLRUQ6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfRU5WVkFSX05PVF9GT1VORDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfRVhFX01BUktFRF9JTlZBTElEOiBlcnJvciA9IEVOT0VYRUM7IGJyZWFrOworCWNhc2UgRVJST1JfRklMRU5BTUVfRVhDRURfUkFOR0U6IGVycm9yID0gRU5BTUVUT09MT05HOyBicmVhazsKKwljYXNlIEVSUk9SX0ZJTEVfRVhJU1RTOiBlcnJvciA9IEVFWElTVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9GSUxFX0lOVkFMSUQ6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EOiBlcnJvciA9IEVOT0VOVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9HRU5fRkFJTFVSRTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfSEFORExFX0RJU0tfRlVMTDogZXJyb3IgPSBFTk9TUEM7IGJyZWFrOworCWNhc2UgRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUjogZXJyb3IgPSBFTk9NRU07IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9BQ0NFU1M6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfQUREUkVTUzogZXJyb3IgPSBFRkFVTFQ7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9CTE9DSzogZXJyb3IgPSBFRkFVTFQ7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9EQVRBOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0RSSVZFOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0VYRV9TSUdOQVRVUkU6IGVycm9yID0gRU5PRVhFQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0ZMQUdTOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0ZVTkNUSU9OOiBlcnJvciA9IEVOT1NZUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0hBTkRMRTogZXJyb3IgPSBFQkFERjsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0xPR09OX0hPVVJTOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX05BTUU6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfT1dORVI6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1BBU1NXT1JEOiBlcnJvciA9IEVQRVJNOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfUFJJTUFSWV9HUk9VUDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9TSUdOQUxfTlVNQkVSOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1RBUkdFVF9IQU5ETEU6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfV09SS1NUQVRJT046IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0lPX0RFVklDRTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfSU9fSU5DT01QTEVURTogZXJyb3IgPSBFSU5UUjsgYnJlYWs7CisJY2FzZSBFUlJPUl9MT0NLRUQ6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0xPR09OX0ZBSUxVUkU6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX01BUFBFRF9BTElHTk1FTlQ6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX01FVEFfRVhQQU5TSU9OX1RPT19MT05HOiBlcnJvciA9IEUyQklHOyBicmVhazsKKwljYXNlIEVSUk9SX01PUkVfREFUQTogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9ORUdBVElWRV9TRUVLOiBlcnJvciA9IEVTUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT0FDQ0VTUzogZXJyb3IgPSBFRkFVTFQ7IGJyZWFrOworCWNhc2UgRVJST1JfTk9ORV9NQVBQRUQ6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX05PVF9FTk9VR0hfTUVNT1JZOiBlcnJvciA9IEVOT01FTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT1RfUkVBRFk6IGVycm9yID0gRUFHQUlOOyBicmVhazsKKwljYXNlIEVSUk9SX05PVF9TQU1FX0RFVklDRTogZXJyb3IgPSBFWERFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT19EQVRBOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX05PX01PUkVfU0VBUkNIX0hBTkRMRVM6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX05PX1BST0NfU0xPVFM6IGVycm9yID0gRUFHQUlOOyBicmVhazsKKwljYXNlIEVSUk9SX05PX1NVQ0hfUFJJVklMRUdFOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9PUEVOX0ZBSUxFRDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfT1BFTl9GSUxFUzogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9PUEVSQVRJT05fQUJPUlRFRDogZXJyb3IgPSBFSU5UUjsgYnJlYWs7CisJY2FzZSBFUlJPUl9PVVRPRk1FTU9SWTogZXJyb3IgPSBFTk9NRU07IGJyZWFrOworCWNhc2UgRVJST1JfUEFTU1dPUkRfRVhQSVJFRDogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfUEFUSF9CVVNZOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX1BBVEhfTk9UX0ZPVU5EOiBlcnJvciA9IEVOT0VOVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9QSVBFX0JVU1k6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfUElQRV9DT05ORUNURUQ6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfUElQRV9MSVNURU5JTkc6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfUElQRV9OT1RfQ09OTkVDVEVEOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRDogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfUkVBRF9GQVVMVDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfU0VFSzogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfU0VFS19PTl9ERVZJQ0U6IGVycm9yID0gRVNQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEOiBlcnJvciA9IEVORklMRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfU1RBQ0tfT1ZFUkZMT1c6IGVycm9yID0gRU5PTUVNOyBicmVhazsKKwljYXNlIEVSUk9SX1NVQ0NFU1M6IEJVRygiZXJyX3dpbl90b19wb3NpeCgpIGNhbGxlZCB3aXRob3V0IGFuIGVycm9yISIpOworCWNhc2UgRVJST1JfU1dBUEVSUk9SOiBlcnJvciA9IEVOT0VOVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9UT09fTUFOWV9NT0RVTEVTOiBlcnJvciA9IEVNRklMRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTOiBlcnJvciA9IEVNRklMRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9VTlJFQ09HTklaRURfTUVESUE6IGVycm9yID0gRU5YSU87IGJyZWFrOworCWNhc2UgRVJST1JfVU5SRUNPR05JWkVEX1ZPTFVNRTogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfV0FJVF9OT19DSElMRFJFTjogZXJyb3IgPSBFQ0hJTEQ7IGJyZWFrOworCWNhc2UgRVJST1JfV1JJVEVfRkFVTFQ6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX1dSSVRFX1BST1RFQ1Q6IGVycm9yID0gRVJPRlM7IGJyZWFrOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2ZpbGVfaW5fdXNlX2Vycm9yKERXT1JEIGVycmNvZGUpCit7CisJc3dpdGNoIChlcnJjb2RlKSB7CisJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjoKKwljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfeWVzX25vX2Fuc3dlcih2b2lkKQoreworCWNoYXIgYW5zd2VyWzEwMjRdOworCisJaWYgKGZnZXRzKGFuc3dlciwgc2l6ZW9mKGFuc3dlciksIHN0ZGluKSkgeworCQlzaXplX3QgYW5zd2VyX2xlbiA9IHN0cmxlbihhbnN3ZXIpOworCQlpbnQgZ290X2Z1bGxfbGluZSA9IDAsIGM7CisKKwkJLyogcmVtb3ZlIHRoZSBuZXdsaW5lICovCisJCWlmIChhbnN3ZXJfbGVuID49IDIgJiYgYW5zd2VyW2Fuc3dlcl9sZW4tMl0gPT0gJ1xyJykgeworCQkJYW5zd2VyW2Fuc3dlcl9sZW4tMl0gPSAnXDAnOworCQkJZ290X2Z1bGxfbGluZSA9IDE7CisJCX0gZWxzZSBpZiAoYW5zd2VyX2xlbiA+PSAxICYmIGFuc3dlclthbnN3ZXJfbGVuLTFdID09ICdcbicpIHsKKwkJCWFuc3dlclthbnN3ZXJfbGVuLTFdID0gJ1wwJzsKKwkJCWdvdF9mdWxsX2xpbmUgPSAxOworCQl9CisJCS8qIGZsdXNoIHRoZSBidWZmZXIgaW4gY2FzZSB3ZSBkaWQgbm90IGdldCB0aGUgZnVsbCBsaW5lICovCisJCWlmICghZ290X2Z1bGxfbGluZSkKKwkJCXdoaWxlICgoYyA9IGdldGNoYXIoKSkgIT0gRU9GICYmIGMgIT0gJ1xuJykKKwkJCQk7CisJfSBlbHNlCisJCS8qIHdlIGNvdWxkIG5vdCByZWFkLCByZXR1cm4gdGhlCisJCSAqIGRlZmF1bHQgYW5zd2VyIHdoaWNoIGlzIG5vICovCisJCXJldHVybiAwOworCisJaWYgKHRvbG93ZXIoYW5zd2VyWzBdKSA9PSAneScgJiYgIWFuc3dlclsxXSkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdHJuY2FzZWNtcChhbnN3ZXIsICJ5ZXMiLCBzaXplb2YoYW5zd2VyKSkpCisJCXJldHVybiAxOworCWlmICh0b2xvd2VyKGFuc3dlclswXSkgPT0gJ24nICYmICFhbnN3ZXJbMV0pCisJCXJldHVybiAwOworCWlmICghc3RybmNhc2VjbXAoYW5zd2VyLCAibm8iLCBzaXplb2YoYW5zd2VyKSkpCisJCXJldHVybiAwOworCisJLyogZGlkIG5vdCBmaW5kIGFuIGFuc3dlciB3ZSB1bmRlcnN0YW5kICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGFza195ZXNfbm9faWZfcG9zc2libGUoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJY2hhciBxdWVzdGlvbls0MDk2XTsKKwljb25zdCBjaGFyICpyZXRyeV9ob29rW10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKwl2YV9saXN0IGFyZ3M7CisKKwl2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCXZzbnByaW50ZihxdWVzdGlvbiwgc2l6ZW9mKHF1ZXN0aW9uKSwgZm9ybWF0LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisKKwlpZiAoKHJldHJ5X2hvb2tbMF0gPSBtaW5nd19nZXRlbnYoIkdJVF9BU0tfWUVTTk8iKSkpIHsKKwkJcmV0cnlfaG9va1sxXSA9IHF1ZXN0aW9uOworCQlyZXR1cm4gIXJ1bl9jb21tYW5kX3Zfb3B0KHJldHJ5X2hvb2ssIDApOworCX0KKworCWlmICghaXNhdHR5KF9maWxlbm8oc3RkaW4pKSB8fCAhaXNhdHR5KF9maWxlbm8oc3RkZXJyKSkpCisJCXJldHVybiAwOworCisJd2hpbGUgKDEpIHsKKwkJaW50IGFuc3dlcjsKKwkJZnByaW50ZihzdGRlcnIsICIlcyAoeS9uKSAiLCBxdWVzdGlvbik7CisKKwkJaWYgKChhbnN3ZXIgPSByZWFkX3llc19ub19hbnN3ZXIoKSkgPj0gMCkKKwkJCXJldHVybiBhbnN3ZXI7CisKKwkJZnByaW50ZihzdGRlcnIsICJTb3JyeSwgSSBkaWQgbm90IHVuZGVyc3RhbmQgeW91ciBhbnN3ZXIuICIKKwkJCQkiUGxlYXNlIHR5cGUgJ3knIG9yICduJ1xuIik7CisJfQorfQorCisvKiBXaW5kb3dzIG9ubHkgKi8KK2VudW0gaGlkZV9kb3RmaWxlc190eXBlIHsKKwlISURFX0RPVEZJTEVTX0ZBTFNFID0gMCwKKwlISURFX0RPVEZJTEVTX1RSVUUsCisJSElERV9ET1RGSUxFU19ET1RHSVRPTkxZCit9OworCitzdGF0aWMgaW50IGNvcmVfcmVzdHJpY3RfaW5oZXJpdGVkX2hhbmRsZXMgPSAtMTsKK3N0YXRpYyBlbnVtIGhpZGVfZG90ZmlsZXNfdHlwZSBoaWRlX2RvdGZpbGVzID0gSElERV9ET1RGSUxFU19ET1RHSVRPTkxZOworc3RhdGljIGNoYXIgKnVuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlczsKKworaW50IG1pbmd3X2NvcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImNvcmUuaGlkZWRvdGZpbGVzIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiZG90Z2l0b25seSIpKQorCQkJaGlkZV9kb3RmaWxlcyA9IEhJREVfRE9URklMRVNfRE9UR0lUT05MWTsKKwkJZWxzZQorCQkJaGlkZV9kb3RmaWxlcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS51bnNldGVudnZhcnMiKSkgeworCQlmcmVlKHVuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlcyk7CisJCXVuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlcyA9IHhzdHJkdXAodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnJlc3RyaWN0aW5oZXJpdGVkaGFuZGxlcyIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImF1dG8iKSkKKwkJCWNvcmVfcmVzdHJpY3RfaW5oZXJpdGVkX2hhbmRsZXMgPSAtMTsKKwkJZWxzZQorCQkJY29yZV9yZXN0cmljdF9pbmhlcml0ZWRfaGFuZGxlcyA9CisJCQkJZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogTm9ybWFsaXplcyBOVCBwYXRocyBhcyByZXR1cm5lZCBieSBzb21lIGxvdy1sZXZlbCBBUElzLiAqLworc3RhdGljIHdjaGFyX3QgKm5vcm1hbGl6ZV9udHBhdGgod2NoYXJfdCAqd2J1ZikKK3sKKwlpbnQgaTsKKwkvKiBmaXggYWJzb2x1dGUgcGF0aCBwcmVmaXhlcyAqLworCWlmICh3YnVmWzBdID09ICdcXCcpIHsKKwkJLyogc3RyaXAgTlQgbmFtZXNwYWNlIHByZWZpeGVzICovCisJCWlmICghd2NzbmNtcCh3YnVmLCBMIlxcPz9cXCIsIDQpIHx8CisJCSAgICAhd2NzbmNtcCh3YnVmLCBMIlxcXFw/XFwiLCA0KSkKKwkJCXdidWYgKz0gNDsKKwkJZWxzZSBpZiAoIXdjc25pY21wKHdidWYsIEwiXFxEb3NEZXZpY2VzXFwiLCAxMikpCisJCQl3YnVmICs9IDEyOworCQkvKiByZXBsYWNlIHJlbWFpbmluZyAnLi4uVU5DXCcgd2l0aCAnXFwnICovCisJCWlmICghd2NzbmljbXAod2J1ZiwgTCJVTkNcXCIsIDQpKSB7CisJCQl3YnVmICs9IDI7CisJCQkqd2J1ZiA9ICdcXCc7CisJCX0KKwl9CisJLyogY29udmVydCBiYWNrc2xhc2hlcyB0byBzbGFzaGVzICovCisJZm9yIChpID0gMDsgd2J1ZltpXTsgaSsrKQorCQlpZiAod2J1ZltpXSA9PSAnXFwnKQorCQkJd2J1ZltpXSA9ICcvJzsKKwlyZXR1cm4gd2J1ZjsKK30KKworaW50IG1pbmd3X3VubGluayhjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlpbnQgcmV0LCB0cmllcyA9IDA7CisJd2NoYXJfdCB3cGF0aG5hbWVbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3cGF0aG5hbWUsIHBhdGhuYW1lKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIHJlYWQtb25seSBmaWxlcyBjYW5ub3QgYmUgcmVtb3ZlZCAqLworCV93Y2htb2Qod3BhdGhuYW1lLCAwNjY2KTsKKwl3aGlsZSAoKHJldCA9IF93dW5saW5rKHdwYXRobmFtZSkpID09IC0xICYmIHRyaWVzIDwgQVJSQVlfU0laRShkZWxheSkpIHsKKwkJaWYgKCFpc19maWxlX2luX3VzZV9lcnJvcihHZXRMYXN0RXJyb3IoKSkpCisJCQlicmVhazsKKwkJLyoKKwkJICogV2UgYXNzdW1lIHRoYXQgc29tZSBvdGhlciBwcm9jZXNzIGhhZCB0aGUgc291cmNlIG9yCisJCSAqIGRlc3RpbmF0aW9uIGZpbGUgb3BlbiBhdCB0aGUgd3JvbmcgbW9tZW50IGFuZCByZXRyeS4KKwkJICogSW4gb3JkZXIgdG8gZ2l2ZSB0aGUgb3RoZXIgcHJvY2VzcyBhIGhpZ2hlciBjaGFuY2UgdG8KKwkJICogY29tcGxldGUgaXRzIG9wZXJhdGlvbiwgd2UgZ2l2ZSB1cCBvdXIgdGltZSBzbGljZSBub3cuCisJCSAqIElmIHdlIGhhdmUgdG8gcmV0cnkgYWdhaW4sIHdlIGRvIHNsZWVwIGEgYml0LgorCQkgKi8KKwkJU2xlZXAoZGVsYXlbdHJpZXNdKTsKKwkJdHJpZXMrKzsKKwl9CisJd2hpbGUgKHJldCA9PSAtMSAmJiBpc19maWxlX2luX3VzZV9lcnJvcihHZXRMYXN0RXJyb3IoKSkgJiYKKwkgICAgICAgYXNrX3llc19ub19pZl9wb3NzaWJsZSgiVW5saW5rIG9mIGZpbGUgJyVzJyBmYWlsZWQuICIKKwkJCSJTaG91bGQgSSB0cnkgYWdhaW4/IiwgcGF0aG5hbWUpKQorCSAgICAgICByZXQgPSBfd3VubGluayh3cGF0aG5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfZGlyX2VtcHR5KGNvbnN0IHdjaGFyX3QgKndwYXRoKQoreworCVdJTjMyX0ZJTkRfREFUQVcgZmluZGJ1ZjsKKwlIQU5ETEUgaGFuZGxlOworCXdjaGFyX3Qgd2J1ZltNQVhfUEFUSCArIDJdOworCXdjc2NweSh3YnVmLCB3cGF0aCk7CisJd2NzY2F0KHdidWYsIEwiXFwqIik7CisJaGFuZGxlID0gRmluZEZpcnN0RmlsZVcod2J1ZiwgJmZpbmRidWYpOworCWlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9OT19NT1JFX0ZJTEVTOworCisJd2hpbGUgKCF3Y3NjbXAoZmluZGJ1Zi5jRmlsZU5hbWUsIEwiLiIpIHx8CisJCQkhd2NzY21wKGZpbmRidWYuY0ZpbGVOYW1lLCBMIi4uIikpCisJCWlmICghRmluZE5leHRGaWxlVyhoYW5kbGUsICZmaW5kYnVmKSkgeworCQkJRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCQlGaW5kQ2xvc2UoaGFuZGxlKTsKKwkJCXJldHVybiBlcnIgPT0gRVJST1JfTk9fTU9SRV9GSUxFUzsKKwkJfQorCUZpbmRDbG9zZShoYW5kbGUpOworCXJldHVybiAwOworfQorCitpbnQgbWluZ3dfcm1kaXIoY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJaW50IHJldCwgdHJpZXMgPSAwOworCXdjaGFyX3Qgd3BhdGhuYW1lW01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod3BhdGhuYW1lLCBwYXRobmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoKHJldCA9IF93cm1kaXIod3BhdGhuYW1lKSkgPT0gLTEgJiYgdHJpZXMgPCBBUlJBWV9TSVpFKGRlbGF5KSkgeworCQlpZiAoIWlzX2ZpbGVfaW5fdXNlX2Vycm9yKEdldExhc3RFcnJvcigpKSkKKwkJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCWlmIChlcnJubyAhPSBFQUNDRVMpCisJCQlicmVhazsKKwkJaWYgKCFpc19kaXJfZW1wdHkod3BhdGhuYW1lKSkgeworCQkJZXJybm8gPSBFTk9URU1QVFk7CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBXZSBhc3N1bWUgdGhhdCBzb21lIG90aGVyIHByb2Nlc3MgaGFkIHRoZSBzb3VyY2Ugb3IKKwkJICogZGVzdGluYXRpb24gZmlsZSBvcGVuIGF0IHRoZSB3cm9uZyBtb21lbnQgYW5kIHJldHJ5LgorCQkgKiBJbiBvcmRlciB0byBnaXZlIHRoZSBvdGhlciBwcm9jZXNzIGEgaGlnaGVyIGNoYW5jZSB0bworCQkgKiBjb21wbGV0ZSBpdHMgb3BlcmF0aW9uLCB3ZSBnaXZlIHVwIG91ciB0aW1lIHNsaWNlIG5vdy4KKwkJICogSWYgd2UgaGF2ZSB0byByZXRyeSBhZ2Fpbiwgd2UgZG8gc2xlZXAgYSBiaXQuCisJCSAqLworCQlTbGVlcChkZWxheVt0cmllc10pOworCQl0cmllcysrOworCX0KKwl3aGlsZSAocmV0ID09IC0xICYmIGVycm5vID09IEVBQ0NFUyAmJiBpc19maWxlX2luX3VzZV9lcnJvcihHZXRMYXN0RXJyb3IoKSkgJiYKKwkgICAgICAgYXNrX3llc19ub19pZl9wb3NzaWJsZSgiRGVsZXRpb24gb2YgZGlyZWN0b3J5ICclcycgZmFpbGVkLiAiCisJCQkiU2hvdWxkIEkgdHJ5IGFnYWluPyIsIHBhdGhuYW1lKSkKKwkgICAgICAgcmV0ID0gX3dybWRpcih3cGF0aG5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRzX2hpZGluZyhjb25zdCBjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKmJhc2VuYW1lOworCisJaWYgKGhpZGVfZG90ZmlsZXMgPT0gSElERV9ET1RGSUxFU19GQUxTRSkKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSBjYW5ub3QgdXNlIGJhc2VuYW1lKCksIGFzIGl0IHdvdWxkIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzICovCisJd2luMzJfc2tpcF9kb3NfZHJpdmVfcHJlZml4KChjaGFyICoqKSZwYXRoKTsKKwlpZiAoISpwYXRoKQorCQlyZXR1cm4gMDsKKworCWZvciAoYmFzZW5hbWUgPSBwYXRoOyAqcGF0aDsgcGF0aCsrKQorCQlpZiAoaXNfZGlyX3NlcCgqcGF0aCkpIHsKKwkJCWRvIHsKKwkJCQlwYXRoKys7CisJCQl9IHdoaWxlIChpc19kaXJfc2VwKCpwYXRoKSk7CisJCQkvKiBpZ25vcmUgdHJhaWxpbmcgc2xhc2hlcyAqLworCQkJaWYgKCpwYXRoKQorCQkJCWJhc2VuYW1lID0gcGF0aDsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCisJaWYgKGhpZGVfZG90ZmlsZXMgPT0gSElERV9ET1RGSUxFU19UUlVFKQorCQlyZXR1cm4gKmJhc2VuYW1lID09ICcuJzsKKworCWFzc2VydChoaWRlX2RvdGZpbGVzID09IEhJREVfRE9URklMRVNfRE9UR0lUT05MWSk7CisJcmV0dXJuICFzdHJuY2FzZWNtcCgiLmdpdCIsIGJhc2VuYW1lLCA0KSAmJgorCQkoIWJhc2VuYW1lWzRdIHx8IGlzX2Rpcl9zZXAoYmFzZW5hbWVbNF0pKTsKK30KKworc3RhdGljIGludCBzZXRfaGlkZGVuX2ZsYWcoY29uc3Qgd2NoYXJfdCAqcGF0aCwgaW50IHNldCkKK3sKKwlEV09SRCBvcmlnaW5hbCA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoKSwgbW9kaWZpZWQ7CisJaWYgKHNldCkKKwkJbW9kaWZpZWQgPSBvcmlnaW5hbCB8IEZJTEVfQVRUUklCVVRFX0hJRERFTjsKKwllbHNlCisJCW1vZGlmaWVkID0gb3JpZ2luYWwgJiB+RklMRV9BVFRSSUJVVEVfSElEREVOOworCWlmIChvcmlnaW5hbCA9PSBtb2RpZmllZCB8fCBTZXRGaWxlQXR0cmlidXRlc1cocGF0aCwgbW9kaWZpZWQpKQorCQlyZXR1cm4gMDsKKwllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCXJldHVybiAtMTsKK30KKworaW50IG1pbmd3X21rZGlyKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKQoreworCWludCByZXQ7CisJd2NoYXJfdCB3cGF0aFtNQVhfUEFUSF07CisKKwlpZiAoIWlzX3ZhbGlkX3dpbjMyX3BhdGgocGF0aCwgMCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod3BhdGgsIHBhdGgpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldCA9IF93bWtkaXIod3BhdGgpOworCWlmICghcmV0ICYmIG5lZWRzX2hpZGluZyhwYXRoKSkKKwkJcmV0dXJuIHNldF9oaWRkZW5fZmxhZyh3cGF0aCwgMSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENhbGxpbmcgQ3JlYXRlRmlsZSgpIHVzaW5nIEZJTEVfQVBQRU5EX0RBVEEgYW5kIHdpdGhvdXQgRklMRV9XUklURV9EQVRBCisgKiBpcyBkb2N1bWVudGVkIGluIFsxXSBhcyBvcGVuaW5nIGEgd3JpdGFibGUgZmlsZSBoYW5kbGUgaW4gYXBwZW5kIG1vZGUuCisgKiAoSXQgaXMgYmVsaWV2ZWQgdGhhdCkgdGhpcyBpcyBhdG9taWMgc2luY2UgaXQgaXMgbWFpbnRhaW5lZCBieSB0aGUKKyAqIGtlcm5lbCB1bmxpa2UgdGhlIE9fQVBQRU5EIGZsYWcgd2hpY2ggaXMgcmFjaWx5IG1haW50YWluZWQgYnkgdGhlIENSVC4KKyAqCisgKiBbMV0gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9kZXNrdG9wL2ZpbGVpby9maWxlLWFjY2Vzcy1yaWdodHMtY29uc3RhbnRzCisgKgorICogVGhpcyB0cmljayBkb2VzIG5vdCBhcHBlYXIgdG8gd29yayBmb3IgbmFtZWQgcGlwZXMuICBJbnN0ZWFkIGl0IGNyZWF0ZXMKKyAqIGEgbmFtZWQgcGlwZSBjbGllbnQgaGFuZGxlIHRoYXQgY2Fubm90IGJlIHdyaXR0ZW4gdG8uICBDYWxsZXJzIHNob3VsZAorICoganVzdCB1c2UgdGhlIHJlZ3VsYXIgX3dvcGVuKCkgZm9yIHRoZW0uICAoQW5kIHNpbmNlIGNsaWVudCBoYW5kbGUgZ2V0cworICogYm91bmQgdG8gYSB1bmlxdWUgc2VydmVyIGhhbmRsZSwgaXQgaXNuJ3QgcmVhbGx5IGFuIGlzc3VlLikKKyAqLworc3RhdGljIGludCBtaW5nd19vcGVuX2FwcGVuZCh3Y2hhcl90IGNvbnN0ICp3ZmlsZW5hbWUsIGludCBvZmxhZ3MsIC4uLikKK3sKKwlIQU5ETEUgaGFuZGxlOworCWludCBmZDsKKwlEV09SRCBjcmVhdGUgPSAob2ZsYWdzICYgT19DUkVBVCkgPyBPUEVOX0FMV0FZUyA6IE9QRU5fRVhJU1RJTkc7CisKKwkvKiBvbmx5IHRoZXNlIGZsYWdzIGFyZSBzdXBwb3J0ZWQgKi8KKwlpZiAoKG9mbGFncyAmIH5PX0NSRUFUKSAhPSAoT19XUk9OTFkgfCBPX0FQUEVORCkpCisJCXJldHVybiBlcnJubyA9IEVOT1NZUywgLTE7CisKKwkvKgorCSAqIEZJTEVfU0hBUkVfV1JJVEUgaXMgcmVxdWlyZWQgdG8gcGVybWl0IGNoaWxkIHByb2Nlc3NlcworCSAqIHRvIGFwcGVuZCB0byB0aGUgZmlsZS4KKwkgKi8KKwloYW5kbGUgPSBDcmVhdGVGaWxlVyh3ZmlsZW5hbWUsIEZJTEVfQVBQRU5EX0RBVEEsCisJCQlGSUxFX1NIQVJFX1dSSVRFIHwgRklMRV9TSEFSRV9SRUFELAorCQkJTlVMTCwgY3JlYXRlLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOworCWlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybiBlcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpLCAtMTsKKworCS8qCisJICogTm8gT19BUFBFTkQgaGVyZSwgYmVjYXVzZSB0aGUgQ1JUIHVzZXMgaXQgb25seSB0byByZXNldCB0aGUKKwkgKiBmaWxlIHBvaW50ZXIgdG8gRU9GIGJlZm9yZSBlYWNoIHdyaXRlKCk7IGJ1dCB0aGF0IGlzIG5vdAorCSAqIG5lY2Vzc2FyeSAoYW5kIG1heSBsZWFkIHRvIHJhY2VzKSBmb3IgYSBmaWxlIGNyZWF0ZWQgd2l0aAorCSAqIEZJTEVfQVBQRU5EX0RBVEEuCisJICovCisJZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KWhhbmRsZSwgT19CSU5BUlkpOworCWlmIChmZCA8IDApCisJCUNsb3NlSGFuZGxlKGhhbmRsZSk7CisJcmV0dXJuIGZkOworfQorCisvKgorICogRG9lcyB0aGUgcGF0aG5hbWUgbWFwIHRvIHRoZSBsb2NhbCBuYW1lZCBwaXBlIGZpbGVzeXN0ZW0/CisgKiBUaGF0IGlzLCBkb2VzIGl0IGhhdmUgYSAiLy8uL3BpcGUvIiBwcmVmaXg/CisgKi8KK3N0YXRpYyBpbnQgaXNfbG9jYWxfbmFtZWRfcGlwZV9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXJldHVybiAoaXNfZGlyX3NlcChmaWxlbmFtZVswXSkgJiYKKwkJaXNfZGlyX3NlcChmaWxlbmFtZVsxXSkgJiYKKwkJZmlsZW5hbWVbMl0gPT0gJy4nICAmJgorCQlpc19kaXJfc2VwKGZpbGVuYW1lWzNdKSAmJgorCQkhc3RybmNhc2VjbXAoZmlsZW5hbWUrNCwgInBpcGUiLCA0KSAmJgorCQlpc19kaXJfc2VwKGZpbGVuYW1lWzhdKSAmJgorCQlmaWxlbmFtZVs5XSk7Cit9CisKK2ludCBtaW5nd19vcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG9mbGFncywgLi4uKQoreworCXR5cGVkZWYgaW50ICgqb3Blbl9mbl90KSh3Y2hhcl90IGNvbnN0ICp3ZmlsZW5hbWUsIGludCBvZmxhZ3MsIC4uLik7CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIG1vZGU7CisJaW50IGZkLCBjcmVhdGUgPSAob2ZsYWdzICYgKE9fQ1JFQVQgfCBPX0VYQ0wpKSA9PSAoT19DUkVBVCB8IE9fRVhDTCk7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdOworCW9wZW5fZm5fdCBvcGVuX2ZuOworCisJdmFfc3RhcnQoYXJncywgb2ZsYWdzKTsKKwltb2RlID0gdmFfYXJnKGFyZ3MsIGludCk7CisJdmFfZW5kKGFyZ3MpOworCisJaWYgKCFpc192YWxpZF93aW4zMl9wYXRoKGZpbGVuYW1lLCAhY3JlYXRlKSkgeworCQllcnJubyA9IGNyZWF0ZSA/IEVJTlZBTCA6IEVOT0VOVDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgob2ZsYWdzICYgT19BUFBFTkQpICYmICFpc19sb2NhbF9uYW1lZF9waXBlX3BhdGgoZmlsZW5hbWUpKQorCQlvcGVuX2ZuID0gbWluZ3dfb3Blbl9hcHBlbmQ7CisJZWxzZQorCQlvcGVuX2ZuID0gX3dvcGVuOworCisJaWYgKGZpbGVuYW1lICYmICFzdHJjbXAoZmlsZW5hbWUsICIvZGV2L251bGwiKSkKKwkJd2NzY3B5KHdmaWxlbmFtZSwgTCJudWwiKTsKKwllbHNlIGlmICh4dXRmdG93Y3NfcGF0aCh3ZmlsZW5hbWUsIGZpbGVuYW1lKSA8IDApCisJCXJldHVybiAtMTsKKworCWZkID0gb3Blbl9mbih3ZmlsZW5hbWUsIG9mbGFncywgbW9kZSk7CisKKwlpZiAoZmQgPCAwICYmIChvZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZICYmIGVycm5vID09IEVBQ0NFUykgeworCQlEV09SRCBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyh3ZmlsZW5hbWUpOworCQlpZiAoYXR0cnMgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMgJiYgKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkKKwkJCWVycm5vID0gRUlTRElSOworCX0KKwlpZiAoKG9mbGFncyAmIE9fQ1JFQVQpICYmIG5lZWRzX2hpZGluZyhmaWxlbmFtZSkpIHsKKwkJLyoKKwkJICogSW50ZXJuYWxseSwgX3dvcGVuKCkgdXNlcyB0aGUgQ3JlYXRlRmlsZSgpIEFQSSB3aGljaCBlcnJvcnMKKwkJICogb3V0IHdpdGggYW4gRVJST1JfQUNDRVNTX0RFTklFRCBpZiBDUkVBVEVfQUxXQVlTIHdhcworCQkgKiBzcGVjaWZpZWQgYW5kIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZSdzIGF0dHJpYnV0ZXMgZG8gbm90CisJCSAqIG1hdGNoICpleGFjdGx5Ki4gQXMgdGhlcmUgaXMgbm8gbW9kZSBvciBmbGFnIHdlIGNhbiBzZXQgdGhhdAorCQkgKiB3b3VsZCBjb3JyZXNwb25kIHRvIEZJTEVfQVRUUklCVVRFX0hJRERFTiwgbGV0J3MganVzdCB0cnkKKwkJICogYWdhaW4gKndpdGhvdXQqIHRoZSBPX0NSRUFUIGZsYWcgKHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCisJCSAqIENSRUFURV9BTFdBWVMgZmxhZyBvZiBDcmVhdGVGaWxlKCkpLgorCQkgKi8KKwkJaWYgKGZkIDwgMCAmJiBlcnJubyA9PSBFQUNDRVMpCisJCQlmZCA9IG9wZW5fZm4od2ZpbGVuYW1lLCBvZmxhZ3MgJiB+T19DUkVBVCwgbW9kZSk7CisJCWlmIChmZCA+PSAwICYmIHNldF9oaWRkZW5fZmxhZyh3ZmlsZW5hbWUsIDEpKQorCQkJd2FybmluZygiY291bGQgbm90IG1hcmsgJyVzJyBhcyBoaWRkZW4uIiwgZmlsZW5hbWUpOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBCT09MIFdJTkFQSSBjdHJsX2lnbm9yZShEV09SRCB0eXBlKQoreworCXJldHVybiBUUlVFOworfQorCisjdW5kZWYgZmdldGMKK2ludCBtaW5nd19mZ2V0YyhGSUxFICpzdHJlYW0pCit7CisJaW50IGNoOworCWlmICghaXNhdHR5KF9maWxlbm8oc3RyZWFtKSkpCisJCXJldHVybiBmZ2V0YyhzdHJlYW0pOworCisJU2V0Q29uc29sZUN0cmxIYW5kbGVyKGN0cmxfaWdub3JlLCBUUlVFKTsKKwl3aGlsZSAoMSkgeworCQljaCA9IGZnZXRjKHN0cmVhbSk7CisJCWlmIChjaCAhPSBFT0YgfHwgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfT1BFUkFUSU9OX0FCT1JURUQpCisJCQlicmVhazsKKworCQkvKiBDdHJsK0Mgd2FzIHByZXNzZWQsIHNpbXVsYXRlIFNJR0lOVCBhbmQgcmV0cnkgKi8KKwkJbWluZ3dfcmFpc2UoU0lHSU5UKTsKKwl9CisJU2V0Q29uc29sZUN0cmxIYW5kbGVyKGN0cmxfaWdub3JlLCBGQUxTRSk7CisJcmV0dXJuIGNoOworfQorCisjdW5kZWYgZm9wZW4KK0ZJTEUgKm1pbmd3X2ZvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUpCit7CisJaW50IGhpZGUgPSBuZWVkc19oaWRpbmcoZmlsZW5hbWUpOworCUZJTEUgKmZpbGU7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdLCB3b3R5cGVbNF07CisJaWYgKGZpbGVuYW1lICYmICFzdHJjbXAoZmlsZW5hbWUsICIvZGV2L251bGwiKSkKKwkJd2NzY3B5KHdmaWxlbmFtZSwgTCJudWwiKTsKKwllbHNlIGlmICghaXNfdmFsaWRfd2luMzJfcGF0aChmaWxlbmFtZSwgMSkpIHsKKwkJaW50IGNyZWF0ZSA9IG90eXBlICYmIHN0cmNocihvdHlwZSwgJ3cnKTsKKwkJZXJybm8gPSBjcmVhdGUgPyBFSU5WQUwgOiBFTk9FTlQ7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSBpZiAoeHV0ZnRvd2NzX3BhdGgod2ZpbGVuYW1lLCBmaWxlbmFtZSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh4dXRmdG93Y3Mod290eXBlLCBvdHlwZSwgQVJSQVlfU0laRSh3b3R5cGUpKSA8IDApCisJCXJldHVybiBOVUxMOworCisJaWYgKGhpZGUgJiYgIWFjY2VzcyhmaWxlbmFtZSwgRl9PSykgJiYgc2V0X2hpZGRlbl9mbGFnKHdmaWxlbmFtZSwgMCkpIHsKKwkJZXJyb3IoImNvdWxkIG5vdCB1bmhpZGUgJXMiLCBmaWxlbmFtZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlmaWxlID0gX3dmb3Blbih3ZmlsZW5hbWUsIHdvdHlwZSk7CisJaWYgKCFmaWxlICYmIEdldExhc3RFcnJvcigpID09IEVSUk9SX0lOVkFMSURfTkFNRSkKKwkJZXJybm8gPSBFTk9FTlQ7CisJaWYgKGZpbGUgJiYgaGlkZSAmJiBzZXRfaGlkZGVuX2ZsYWcod2ZpbGVuYW1lLCAxKSkKKwkJd2FybmluZygiY291bGQgbm90IG1hcmsgJyVzJyBhcyBoaWRkZW4uIiwgZmlsZW5hbWUpOworCXJldHVybiBmaWxlOworfQorCitGSUxFICptaW5nd19mcmVvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUsIEZJTEUgKnN0cmVhbSkKK3sKKwlpbnQgaGlkZSA9IG5lZWRzX2hpZGluZyhmaWxlbmFtZSk7CisJRklMRSAqZmlsZTsKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF0sIHdvdHlwZVs0XTsKKwlpZiAoZmlsZW5hbWUgJiYgIXN0cmNtcChmaWxlbmFtZSwgIi9kZXYvbnVsbCIpKQorCQl3Y3NjcHkod2ZpbGVuYW1lLCBMIm51bCIpOworCWVsc2UgaWYgKCFpc192YWxpZF93aW4zMl9wYXRoKGZpbGVuYW1lLCAxKSkgeworCQlpbnQgY3JlYXRlID0gb3R5cGUgJiYgc3RyY2hyKG90eXBlLCAndycpOworCQllcnJubyA9IGNyZWF0ZSA/IEVJTlZBTCA6IEVOT0VOVDsKKwkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIGlmICh4dXRmdG93Y3NfcGF0aCh3ZmlsZW5hbWUsIGZpbGVuYW1lKSA8IDApCisJCXJldHVybiBOVUxMOworCisJaWYgKHh1dGZ0b3djcyh3b3R5cGUsIG90eXBlLCBBUlJBWV9TSVpFKHdvdHlwZSkpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaGlkZSAmJiAhYWNjZXNzKGZpbGVuYW1lLCBGX09LKSAmJiBzZXRfaGlkZGVuX2ZsYWcod2ZpbGVuYW1lLCAwKSkgeworCQllcnJvcigiY291bGQgbm90IHVuaGlkZSAlcyIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWZpbGUgPSBfd2ZyZW9wZW4od2ZpbGVuYW1lLCB3b3R5cGUsIHN0cmVhbSk7CisJaWYgKGZpbGUgJiYgaGlkZSAmJiBzZXRfaGlkZGVuX2ZsYWcod2ZpbGVuYW1lLCAxKSkKKwkJd2FybmluZygiY291bGQgbm90IG1hcmsgJyVzJyBhcyBoaWRkZW4uIiwgZmlsZW5hbWUpOworCXJldHVybiBmaWxlOworfQorCisjdW5kZWYgZmZsdXNoCitpbnQgbWluZ3dfZmZsdXNoKEZJTEUgKnN0cmVhbSkKK3sKKwlpbnQgcmV0ID0gZmZsdXNoKHN0cmVhbSk7CisKKwkvKgorCSAqIHdyaXRlKCkgaXMgdXNlZCBiZWhpbmQgdGhlIHNjZW5lcyBvZiBzdGRpbyBvdXRwdXQgZnVuY3Rpb25zLgorCSAqIFNpbmNlIGdpdCBjb2RlIGRvZXMgbm90IGNoZWNrIGZvciBlcnJvcnMgYWZ0ZXIgZWFjaCBzdGRpbyB3cml0ZQorCSAqIG9wZXJhdGlvbiwgaXQgY2FuIGhhcHBlbiB0aGF0IHdyaXRlKCkgaXMgY2FsbGVkIGJ5IGEgbGF0ZXIKKwkgKiBzdGRpbyBmdW5jdGlvbiBldmVuIGlmIGFuIGVhcmxpZXIgd3JpdGUoKSBjYWxsIGZhaWxlZC4gSW4gdGhlCisJICogY2FzZSBvZiBhIHBpcGUgd2hvc2UgcmVhZGFibGUgZW5kIHdhcyBjbG9zZWQsIG9ubHkgdGhlIGZpcnN0CisJICogY2FsbCB0byB3cml0ZSgpIHJlcG9ydHMgRVBJUEUgb24gV2luZG93cy4gU3Vic2VxdWVudCB3cml0ZSgpCisJICogY2FsbHMgcmVwb3J0IEVJTlZBTC4gSXQgaXMgaW1wb3NzaWJsZSB0byBub3RpY2Ugd2hldGhlciB0aGlzCisJICogZmZsdXNoIGludm9jYXRpb24gdHJpZ2dlcmVkIHN1Y2ggYSBjYXNlLCB0aGVyZWZvcmUsIHdlIGhhdmUgdG8KKwkgKiBjYXRjaCBhbGwgRUlOVkFMIGVycm9ycyB3aG9sZS1zYWxlLgorCSAqLworCWlmIChyZXQgJiYgZXJybm8gPT0gRUlOVkFMKQorCQllcnJubyA9IEVQSVBFOworCisJcmV0dXJuIHJldDsKK30KKworI3VuZGVmIHdyaXRlCitzc2l6ZV90IG1pbmd3X3dyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QgcmVzdWx0ID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTsKKworCWlmIChyZXN1bHQgPCAwICYmIGVycm5vID09IEVJTlZBTCAmJiBidWYpIHsKKwkJLyogY2hlY2sgaWYgZmQgaXMgYSBwaXBlICovCisJCUhBTkRMRSBoID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoZmQpOworCQlpZiAoR2V0RmlsZVR5cGUoaCkgPT0gRklMRV9UWVBFX1BJUEUpCisJCQllcnJubyA9IEVQSVBFOworCQllbHNlCisJCQllcnJubyA9IEVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgbWluZ3dfYWNjZXNzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkKK3sKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZW5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCS8qIFhfT0sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgTVNWQ1JUIHZlcnNpb24gKi8KKwlyZXR1cm4gX3dhY2Nlc3Mod2ZpbGVuYW1lLCBtb2RlICYgflhfT0spOworfQorCitpbnQgbWluZ3dfY2hkaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwl3Y2hhcl90IHdkaXJuYW1lW01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod2Rpcm5hbWUsIGRpcm5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBfd2NoZGlyKHdkaXJuYW1lKTsKK30KKworaW50IG1pbmd3X2NobW9kKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkKK3sKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZW5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBfd2NobW9kKHdmaWxlbmFtZSwgbW9kZSk7Cit9CisKKy8qCisgKiBUaGUgdW5pdCBvZiBGSUxFVElNRSBpcyAxMDAtbmFub3NlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxNjAxLCBVVEMuCisgKiBSZXR1cm5zIHRoZSAxMDAtbmFub3NlY29uZHMgKCJoZWt0byBuYW5vc2Vjb25kcyIpIHNpbmNlIHRoZSBlcG9jaC4KKyAqLworc3RhdGljIGlubGluZSBsb25nIGxvbmcgZmlsZXRpbWVfdG9faG5zZWMoY29uc3QgRklMRVRJTUUgKmZ0KQoreworCWxvbmcgbG9uZyB3aW5UaW1lID0gKChsb25nIGxvbmcpZnQtPmR3SGlnaERhdGVUaW1lIDw8IDMyKSArIGZ0LT5kd0xvd0RhdGVUaW1lOworCS8qIFdpbmRvd3MgdG8gVW5peCBFcG9jaCBjb252ZXJzaW9uICovCisJcmV0dXJuIHdpblRpbWUgLSAxMTY0NDQ3MzYwMDAwMDAwMDBMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGV0aW1lX3RvX3RpbWVzcGVjKGNvbnN0IEZJTEVUSU1FICpmdCwgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlsb25nIGxvbmcgaG5zZWMgPSBmaWxldGltZV90b19obnNlYyhmdCk7CisJdHMtPnR2X3NlYyA9ICh0aW1lX3QpKGhuc2VjIC8gMTAwMDAwMDApOworCXRzLT50dl9uc2VjID0gKGhuc2VjICUgMTAwMDAwMDApICogMTAwOworfQorCisvKioKKyAqIFZlcmlmaWVzIHRoYXQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcygpIHdvdWxkIHN1Y2NlZWQuCisgKi8KK3N0YXRpYyBpbnQgaGFzX3ZhbGlkX2RpcmVjdG9yeV9wcmVmaXgod2NoYXJfdCAqd2ZpbGVuYW1lKQoreworCWludCBuID0gd2NzbGVuKHdmaWxlbmFtZSk7CisKKwl3aGlsZSAobiA+IDApIHsKKwkJd2NoYXJfdCBjID0gd2ZpbGVuYW1lWy0tbl07CisJCURXT1JEIGF0dHJpYnV0ZXM7CisKKwkJaWYgKCFpc19kaXJfc2VwKGMpKQorCQkJY29udGludWU7CisKKwkJd2ZpbGVuYW1lW25dID0gTCdcMCc7CisJCWF0dHJpYnV0ZXMgPSBHZXRGaWxlQXR0cmlidXRlc1cod2ZpbGVuYW1lKTsKKwkJd2ZpbGVuYW1lW25dID0gYzsKKwkJaWYgKGF0dHJpYnV0ZXMgPT0gRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZIHx8CisJCQkJYXR0cmlidXRlcyA9PSBGSUxFX0FUVFJJQlVURV9ERVZJQ0UpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGF0dHJpYnV0ZXMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpCisJCQlzd2l0Y2ggKEdldExhc3RFcnJvcigpKSB7CisJCQljYXNlIEVSUk9SX1BBVEhfTk9UX0ZPVU5EOgorCQkJCWNvbnRpbnVlOworCQkJY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDoKKwkJCQkvKiBUaGlzIGltcGxpZXMgcGFyZW50IGRpcmVjdG9yeSBleGlzdHMuICovCisJCQkJcmV0dXJuIDE7CisJCQl9CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyogV2Uga2VlcCB0aGUgZG9fbHN0YXQgY29kZSBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGF2b2lkIHJlY3Vyc2lvbi4KKyAqIFdoZW4gYSBwYXRoIGVuZHMgd2l0aCBhIHNsYXNoLCB0aGUgc3RhdCB3aWxsIGZhaWwgd2l0aCBFTk9FTlQuIEluCisgKiB0aGlzIGNhc2UsIHdlIHN0cmlwIHRoZSB0cmFpbGluZyBzbGFzaGVzIGFuZCBzdGF0IGFnYWluLgorICoKKyAqIElmIGZvbGxvdyBpcyB0cnVlIHRoZW4gYWN0IGxpa2Ugc3RhdCgpIGFuZCByZXBvcnQgb24gdGhlIGxpbmsKKyAqIHRhcmdldC4gT3RoZXJ3aXNlIHJlcG9ydCBvbiB0aGUgbGluayBpdHNlbGYuCisgKi8KK3N0YXRpYyBpbnQgZG9fbHN0YXQoaW50IGZvbGxvdywgY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCVdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgZmRhdGE7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3ZmlsZW5hbWUsIGZpbGVfbmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcod2ZpbGVuYW1lLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZmZGF0YSkpIHsKKwkJYnVmLT5zdF9pbm8gPSAwOworCQlidWYtPnN0X2dpZCA9IDA7CisJCWJ1Zi0+c3RfdWlkID0gMDsKKwkJYnVmLT5zdF9ubGluayA9IDE7CisJCWJ1Zi0+c3RfbW9kZSA9IGZpbGVfYXR0cl90b19zdF9tb2RlKGZkYXRhLmR3RmlsZUF0dHJpYnV0ZXMpOworCQlidWYtPnN0X3NpemUgPSBmZGF0YS5uRmlsZVNpemVMb3cgfAorCQkJKCgob2ZmX3QpZmRhdGEubkZpbGVTaXplSGlnaCk8PDMyKTsKKwkJYnVmLT5zdF9kZXYgPSBidWYtPnN0X3JkZXYgPSAwOyAvKiBub3QgdXNlZCBieSBHaXQgKi8KKwkJZmlsZXRpbWVfdG9fdGltZXNwZWMoJihmZGF0YS5mdExhc3RBY2Nlc3NUaW1lKSwgJihidWYtPnN0X2F0aW0pKTsKKwkJZmlsZXRpbWVfdG9fdGltZXNwZWMoJihmZGF0YS5mdExhc3RXcml0ZVRpbWUpLCAmKGJ1Zi0+c3RfbXRpbSkpOworCQlmaWxldGltZV90b190aW1lc3BlYygmKGZkYXRhLmZ0Q3JlYXRpb25UaW1lKSwgJihidWYtPnN0X2N0aW0pKTsKKwkJaWYgKGZkYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSB7CisJCQlXSU4zMl9GSU5EX0RBVEFXIGZpbmRidWY7CisJCQlIQU5ETEUgaGFuZGxlID0gRmluZEZpcnN0RmlsZVcod2ZpbGVuYW1lLCAmZmluZGJ1Zik7CisJCQlpZiAoaGFuZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCQkJaWYgKChmaW5kYnVmLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSAmJgorCQkJCQkJKGZpbmRidWYuZHdSZXNlcnZlZDAgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykpIHsKKwkJCQkJaWYgKGZvbGxvdykgeworCQkJCQkJY2hhciBidWZmZXJbTUFYSU1VTV9SRVBBUlNFX0RBVEFfQlVGRkVSX1NJWkVdOworCQkJCQkJYnVmLT5zdF9zaXplID0gcmVhZGxpbmsoZmlsZV9uYW1lLCBidWZmZXIsIE1BWElNVU1fUkVQQVJTRV9EQVRBX0JVRkZFUl9TSVpFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWJ1Zi0+c3RfbW9kZSA9IFNfSUZMTks7CisJCQkJCX0KKwkJCQkJYnVmLT5zdF9tb2RlIHw9IFNfSVJFQUQ7CisJCQkJCWlmICghKGZpbmRidWYuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkKKwkJCQkJCWJ1Zi0+c3RfbW9kZSB8PSBTX0lXUklURTsKKwkJCQl9CisJCQkJRmluZENsb3NlKGhhbmRsZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXN3aXRjaCAoR2V0TGFzdEVycm9yKCkpIHsKKwljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6CisJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjoKKwljYXNlIEVSUk9SX0xPQ0tfVklPTEFUSU9OOgorCWNhc2UgRVJST1JfU0hBUklOR19CVUZGRVJfRVhDRUVERUQ6CisJCWVycm5vID0gRUFDQ0VTOworCQlicmVhazsKKwljYXNlIEVSUk9SX0JVRkZFUl9PVkVSRkxPVzoKKwkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCWJyZWFrOworCWNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6CisJCWVycm5vID0gRU5PTUVNOworCQlicmVhazsKKwljYXNlIEVSUk9SX1BBVEhfTk9UX0ZPVU5EOgorCQlpZiAoIWhhc192YWxpZF9kaXJlY3RvcnlfcHJlZml4KHdmaWxlbmFtZSkpIHsKKwkJCWVycm5vID0gRU5PVERJUjsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGx0aHJ1ICovCisJZGVmYXVsdDoKKwkJZXJybm8gPSBFTk9FTlQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qIFdlIHByb3ZpZGUgb3VyIG93biBsc3RhdC9mc3RhdCBmdW5jdGlvbnMsIHNpbmNlIHRoZSBwcm92aWRlZAorICogbHN0YXQvZnN0YXQgZnVuY3Rpb25zIGFyZSBzbyBzbG93LiBUaGVzZSBzdGF0IGZ1bmN0aW9ucyBhcmUKKyAqIHRhaWxvcmVkIGZvciBHaXQncyB1c2FnZSAocmVhZDogZmFzdCksIGFuZCBhcmUgbm90IG1lYW50IHRvIGJlCisgKiBjb21wbGV0ZS4gTm90ZSB0aGF0IEdpdCBzdGF0KClzIGFyZSByZWRpcmVjdGVkIHRvIG1pbmd3X2xzdGF0KCkKKyAqIHRvbywgc2luY2UgV2luZG93cyBkb2Vzbid0IHJlYWxseSBoYW5kbGUgc3ltbGlua3MgdGhhdCB3ZWxsLgorICovCitzdGF0aWMgaW50IGRvX3N0YXRfaW50ZXJuYWwoaW50IGZvbGxvdywgY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCWludCBuYW1lbGVuOworCWNoYXIgYWx0X25hbWVbUEFUSF9NQVhdOworCisJaWYgKCFkb19sc3RhdChmb2xsb3csIGZpbGVfbmFtZSwgYnVmKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBpZiBmaWxlX25hbWUgZW5kZWQgaW4gYSAnLycsIFdpbmRvd3MgcmV0dXJuZWQgRU5PRU5UOworCSAqIHRyeSBhZ2FpbiB3aXRob3V0IHRyYWlsaW5nIHNsYXNoZXMKKwkgKi8KKwlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQlyZXR1cm4gLTE7CisKKwluYW1lbGVuID0gc3RybGVuKGZpbGVfbmFtZSk7CisJaWYgKG5hbWVsZW4gJiYgZmlsZV9uYW1lW25hbWVsZW4tMV0gIT0gJy8nKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKG5hbWVsZW4gJiYgZmlsZV9uYW1lW25hbWVsZW4tMV0gPT0gJy8nKQorCQktLW5hbWVsZW47CisJaWYgKCFuYW1lbGVuIHx8IG5hbWVsZW4gPj0gUEFUSF9NQVgpCisJCXJldHVybiAtMTsKKworCW1lbWNweShhbHRfbmFtZSwgZmlsZV9uYW1lLCBuYW1lbGVuKTsKKwlhbHRfbmFtZVtuYW1lbGVuXSA9IDA7CisJcmV0dXJuIGRvX2xzdGF0KGZvbGxvdywgYWx0X25hbWUsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2ZpbGVfaW5mb19ieV9oYW5kbGUoSEFORExFIGhuZCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBmZGF0YTsKKworCWlmICghR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoaG5kLCAmZmRhdGEpKSB7CisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlidWYtPnN0X2lubyA9IDA7CisJYnVmLT5zdF9naWQgPSAwOworCWJ1Zi0+c3RfdWlkID0gMDsKKwlidWYtPnN0X25saW5rID0gMTsKKwlidWYtPnN0X21vZGUgPSBmaWxlX2F0dHJfdG9fc3RfbW9kZShmZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzKTsKKwlidWYtPnN0X3NpemUgPSBmZGF0YS5uRmlsZVNpemVMb3cgfAorCQkoKChvZmZfdClmZGF0YS5uRmlsZVNpemVIaWdoKTw8MzIpOworCWJ1Zi0+c3RfZGV2ID0gYnVmLT5zdF9yZGV2ID0gMDsgLyogbm90IHVzZWQgYnkgR2l0ICovCisJZmlsZXRpbWVfdG9fdGltZXNwZWMoJihmZGF0YS5mdExhc3RBY2Nlc3NUaW1lKSwgJihidWYtPnN0X2F0aW0pKTsKKwlmaWxldGltZV90b190aW1lc3BlYygmKGZkYXRhLmZ0TGFzdFdyaXRlVGltZSksICYoYnVmLT5zdF9tdGltKSk7CisJZmlsZXRpbWVfdG9fdGltZXNwZWMoJihmZGF0YS5mdENyZWF0aW9uVGltZSksICYoYnVmLT5zdF9jdGltKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtaW5nd19sc3RhdChjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJcmV0dXJuIGRvX3N0YXRfaW50ZXJuYWwoMCwgZmlsZV9uYW1lLCBidWYpOworfQoraW50IG1pbmd3X3N0YXQoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCXJldHVybiBkb19zdGF0X2ludGVybmFsKDEsIGZpbGVfbmFtZSwgYnVmKTsKK30KKworaW50IG1pbmd3X2ZzdGF0KGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlIQU5ETEUgZmggPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKwlEV09SRCBhdmFpbCwgdHlwZSA9IEdldEZpbGVUeXBlKGZoKSAmIH5GSUxFX1RZUEVfUkVNT1RFOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBGSUxFX1RZUEVfRElTSzoKKwkJcmV0dXJuIGdldF9maWxlX2luZm9fYnlfaGFuZGxlKGZoLCBidWYpOworCisJY2FzZSBGSUxFX1RZUEVfQ0hBUjoKKwljYXNlIEZJTEVfVFlQRV9QSVBFOgorCQkvKiBpbml0aWFsaXplIHN0YXQgZmllbGRzICovCisJCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJCWJ1Zi0+c3RfbmxpbmsgPSAxOworCisJCWlmICh0eXBlID09IEZJTEVfVFlQRV9DSEFSKSB7CisJCQlidWYtPnN0X21vZGUgPSBfU19JRkNIUjsKKwkJfSBlbHNlIHsKKwkJCWJ1Zi0+c3RfbW9kZSA9IF9TX0lGSUZPOworCQkJaWYgKFBlZWtOYW1lZFBpcGUoZmgsIE5VTEwsIDAsIE5VTEwsICZhdmFpbCwgTlVMTCkpCisJCQkJYnVmLT5zdF9zaXplID0gYXZhaWw7CisJCX0KKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gLTE7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZV90X3RvX2ZpbGV0aW1lKHRpbWVfdCB0LCBGSUxFVElNRSAqZnQpCit7CisJbG9uZyBsb25nIHdpblRpbWUgPSB0ICogMTAwMDAwMDBMTCArIDExNjQ0NDczNjAwMDAwMDAwMExMOworCWZ0LT5kd0xvd0RhdGVUaW1lID0gd2luVGltZTsKKwlmdC0+ZHdIaWdoRGF0ZVRpbWUgPSB3aW5UaW1lID4+IDMyOworfQorCitpbnQgbWluZ3dfdXRpbWUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3Qgc3RydWN0IHV0aW1idWYgKnRpbWVzKQoreworCUZJTEVUSU1FIG1mdCwgYWZ0OworCWludCBmaCwgcmM7CisJRFdPUkQgYXR0cnM7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3ZmlsZW5hbWUsIGZpbGVfbmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBtdXN0IGhhdmUgd3JpdGUgcGVybWlzc2lvbiAqLworCWF0dHJzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHdmaWxlbmFtZSk7CisJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTICYmCisJICAgIChhdHRycyAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkgeworCQkvKiBpZ25vcmUgZXJyb3JzIGhlcmU7IG9wZW4oKSB3aWxsIHJlcG9ydCB0aGVtICovCisJCVNldEZpbGVBdHRyaWJ1dGVzVyh3ZmlsZW5hbWUsIGF0dHJzICYgfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZKTsKKwl9CisKKwlpZiAoKGZoID0gX3dvcGVuKHdmaWxlbmFtZSwgT19SRFdSIHwgT19CSU5BUlkpKSA8IDApIHsKKwkJcmMgPSAtMTsKKwkJZ290byByZXZlcnRfYXR0cnM7CisJfQorCisJaWYgKHRpbWVzKSB7CisJCXRpbWVfdF90b19maWxldGltZSh0aW1lcy0+bW9kdGltZSwgJm1mdCk7CisJCXRpbWVfdF90b19maWxldGltZSh0aW1lcy0+YWN0aW1lLCAmYWZ0KTsKKwl9IGVsc2UgeworCQlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmbWZ0KTsKKwkJYWZ0ID0gbWZ0OworCX0KKwlpZiAoIVNldEZpbGVUaW1lKChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmgpLCBOVUxMLCAmYWZ0LCAmbWZ0KSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmMgPSAtMTsKKwl9IGVsc2UKKwkJcmMgPSAwOworCWNsb3NlKGZoKTsKKworcmV2ZXJ0X2F0dHJzOgorCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyAmJgorCSAgICAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkpIHsKKwkJLyogaWdub3JlIGVycm9ycyBhZ2FpbiAqLworCQlTZXRGaWxlQXR0cmlidXRlc1cod2ZpbGVuYW1lLCBhdHRycyk7CisJfQorCXJldHVybiByYzsKK30KKworI3VuZGVmIHN0cmZ0aW1lCitzaXplX3QgbWluZ3dfc3RyZnRpbWUoY2hhciAqcywgc2l6ZV90IG1heCwKKwkJICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKnRtKQoreworCXNpemVfdCByZXQgPSBzdHJmdGltZShzLCBtYXgsIGZvcm1hdCwgdG0pOworCisJaWYgKCFyZXQgJiYgZXJybm8gPT0gRUlOVkFMKQorCQlkaWUoImludmFsaWQgc3RyZnRpbWUgZm9ybWF0OiAnJXMnIiwgZm9ybWF0KTsKKwlyZXR1cm4gcmV0OworfQorCit1bnNpZ25lZCBpbnQgc2xlZXAgKHVuc2lnbmVkIGludCBzZWNvbmRzKQoreworCVNsZWVwKHNlY29uZHMqMTAwMCk7CisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKm1pbmd3X21rdGVtcChjaGFyICp0ZW1wbGF0ZSkKK3sKKwl3Y2hhcl90IHd0ZW1wbGF0ZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHd0ZW1wbGF0ZSwgdGVtcGxhdGUpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFfd21rdGVtcCh3dGVtcGxhdGUpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoeHdjc3RvdXRmKHRlbXBsYXRlLCB3dGVtcGxhdGUsIHN0cmxlbih0ZW1wbGF0ZSkgKyAxKSA8IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiB0ZW1wbGF0ZTsKK30KKworaW50IG1rc3RlbXAoY2hhciAqdGVtcGxhdGUpCit7CisJY2hhciAqZmlsZW5hbWUgPSBta3RlbXAodGVtcGxhdGUpOworCWlmIChmaWxlbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIG9wZW4oZmlsZW5hbWUsIE9fUkRXUiB8IE9fQ1JFQVQsIDA2MDApOworfQorCitpbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgdm9pZCAqdHopCit7CisJRklMRVRJTUUgZnQ7CisJbG9uZyBsb25nIGhuc2VjOworCisJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKKwlobnNlYyA9IGZpbGV0aW1lX3RvX2huc2VjKCZmdCk7CisJdHYtPnR2X3NlYyA9IGhuc2VjIC8gMTAwMDAwMDA7CisJdHYtPnR2X3VzZWMgPSAoaG5zZWMgJSAxMDAwMDAwMCkgLyAxMDsKKwlyZXR1cm4gMDsKK30KKworaW50IHBpcGUoaW50IGZpbGVkZXNbMl0pCit7CisJSEFORExFIGhbMl07CisKKwkvKiB0aGlzIGNyZWF0ZXMgbm9uLWluaGVyaXRhYmxlIGhhbmRsZXMgKi8KKwlpZiAoIUNyZWF0ZVBpcGUoJmhbMF0sICZoWzFdLCBOVUxMLCA4MTkyKSkgeworCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCQlyZXR1cm4gLTE7CisJfQorCWZpbGVkZXNbMF0gPSBfb3Blbl9vc2ZoYW5kbGUoSENBU1QoaW50LCBoWzBdKSwgT19OT0lOSEVSSVQpOworCWlmIChmaWxlZGVzWzBdIDwgMCkgeworCQlDbG9zZUhhbmRsZShoWzBdKTsKKwkJQ2xvc2VIYW5kbGUoaFsxXSk7CisJCXJldHVybiAtMTsKKwl9CisJZmlsZWRlc1sxXSA9IF9vcGVuX29zZmhhbmRsZShIQ0FTVChpbnQsIGhbMV0pLCBPX05PSU5IRVJJVCk7CisJaWYgKGZpbGVkZXNbMV0gPCAwKSB7CisJCWNsb3NlKGZpbGVkZXNbMF0pOworCQlDbG9zZUhhbmRsZShoWzFdKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCkKK3sKKwlpZiAoZ210aW1lX3MocmVzdWx0LCB0aW1lcCkgPT0gMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCkKK3sKKwlpZiAobG9jYWx0aW1lX3MocmVzdWx0LCB0aW1lcCkgPT0gMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gTlVMTDsKK30KKworY2hhciAqbWluZ3dfZ2V0Y3dkKGNoYXIgKnBvaW50ZXIsIGludCBsZW4pCit7CisJd2NoYXJfdCBjd2RbTUFYX1BBVEhdLCB3cG9pbnRlcltNQVhfUEFUSF07CisJRFdPUkQgcmV0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcoQVJSQVlfU0laRShjd2QpLCBjd2QpOworCisJaWYgKCFyZXQgfHwgcmV0ID49IEFSUkFZX1NJWkUoY3dkKSkgeworCQllcnJubyA9IHJldCA/IEVOQU1FVE9PTE9ORyA6IGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0ID0gR2V0TG9uZ1BhdGhOYW1lVyhjd2QsIHdwb2ludGVyLCBBUlJBWV9TSVpFKHdwb2ludGVyKSk7CisJaWYgKCFyZXQgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQUNDRVNTX0RFTklFRCkgeworCQlIQU5ETEUgaG5kID0gQ3JlYXRlRmlsZVcoY3dkLCAwLAorCQkJRklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURSB8IEZJTEVfU0hBUkVfREVMRVRFLCBOVUxMLAorCQkJT1BFTl9FWElTVElORywgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5VTEwpOworCQlpZiAoaG5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQkJcmV0dXJuIE5VTEw7CisJCXJldCA9IEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcoaG5kLCB3cG9pbnRlciwgQVJSQVlfU0laRSh3cG9pbnRlciksIDApOworCQlDbG9zZUhhbmRsZShobmQpOworCQlpZiAoIXJldCB8fCByZXQgPj0gQVJSQVlfU0laRSh3cG9pbnRlcikpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKHh3Y3N0b3V0Zihwb2ludGVyLCBub3JtYWxpemVfbnRwYXRoKHdwb2ludGVyKSwgbGVuKSA8IDApCisJCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIHBvaW50ZXI7CisJfQorCWlmICghcmV0IHx8IHJldCA+PSBBUlJBWV9TSVpFKHdwb2ludGVyKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHh3Y3N0b3V0Zihwb2ludGVyLCB3cG9pbnRlciwgbGVuKSA8IDApCisJCXJldHVybiBOVUxMOworCWNvbnZlcnRfc2xhc2hlcyhwb2ludGVyKTsKKwlyZXR1cm4gcG9pbnRlcjsKK30KKworLyoKKyAqIFNlZSAiUGFyc2luZyBDKysgQ29tbWFuZC1MaW5lIEFyZ3VtZW50cyIgYXQgTWljcm9zb2Z0J3MgRG9jczoKKyAqIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2NwcC9jcHAvcGFyc2luZy1jcHAtY29tbWFuZC1saW5lLWFyZ3VtZW50cworICovCitzdGF0aWMgY29uc3QgY2hhciAqcXVvdGVfYXJnX21zdmMoY29uc3QgY2hhciAqYXJnKQoreworCS8qIGNvdW50IGNoYXJzIHRvIHF1b3RlICovCisJaW50IGxlbiA9IDAsIG4gPSAwOworCWludCBmb3JjZV9xdW90ZXMgPSAwOworCWNoYXIgKnEsICpkOworCWNvbnN0IGNoYXIgKnAgPSBhcmc7CisJaWYgKCEqcCkgZm9yY2VfcXVvdGVzID0gMTsKKwl3aGlsZSAoKnApIHsKKwkJaWYgKGlzc3BhY2UoKnApIHx8ICpwID09ICcqJyB8fCAqcCA9PSAnPycgfHwgKnAgPT0gJ3snIHx8ICpwID09ICdcJycpCisJCQlmb3JjZV9xdW90ZXMgPSAxOworCQllbHNlIGlmICgqcCA9PSAnIicpCisJCQluKys7CisJCWVsc2UgaWYgKCpwID09ICdcXCcpIHsKKwkJCWludCBjb3VudCA9IDA7CisJCQl3aGlsZSAoKnAgPT0gJ1xcJykgeworCQkJCWNvdW50Kys7CisJCQkJcCsrOworCQkJCWxlbisrOworCQkJfQorCQkJaWYgKCpwID09ICciJyB8fCAhKnApCisJCQkJbiArPSBjb3VudCoyICsgMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWxlbisrOworCQlwKys7CisJfQorCWlmICghZm9yY2VfcXVvdGVzICYmIG4gPT0gMCkKKwkJcmV0dXJuIGFyZzsKKworCS8qIGluc2VydCBcIHdoZXJlIG5lY2Vzc2FyeSAqLworCWQgPSBxID0geG1hbGxvYyhzdF9hZGQzKGxlbiwgbiwgMykpOworCSpkKysgPSAnIic7CisJd2hpbGUgKCphcmcpIHsKKwkJaWYgKCphcmcgPT0gJyInKQorCQkJKmQrKyA9ICdcXCc7CisJCWVsc2UgaWYgKCphcmcgPT0gJ1xcJykgeworCQkJaW50IGNvdW50ID0gMDsKKwkJCXdoaWxlICgqYXJnID09ICdcXCcpIHsKKwkJCQljb3VudCsrOworCQkJCSpkKysgPSAqYXJnKys7CisJCQl9CisJCQlpZiAoKmFyZyA9PSAnIicgfHwgISphcmcpIHsKKwkJCQl3aGlsZSAoY291bnQtLSA+IDApCisJCQkJCSpkKysgPSAnXFwnOworCQkJCS8qIGRvbid0IGVzY2FwZSB0aGUgc3Vycm91bmRpbmcgZW5kIHF1b3RlICovCisJCQkJaWYgKCEqYXJnKQorCQkJCQlicmVhazsKKwkJCQkqZCsrID0gJ1xcJzsKKwkJCX0KKwkJfQorCQkqZCsrID0gKmFyZysrOworCX0KKwkqZCsrID0gJyInOworCSpkKysgPSAnXDAnOworCXJldHVybiBxOworfQorCisjaW5jbHVkZSAicXVvdGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnF1b3RlX2FyZ19tc3lzMihjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwMiA9IGFyZywgKnA7CisKKwlmb3IgKHAgPSBhcmc7ICpwOyBwKyspIHsKKwkJaW50IHdzID0gaXNzcGFjZSgqcCk7CisJCWlmICghd3MgJiYgKnAgIT0gJ1xcJyAmJiAqcCAhPSAnIicgJiYgKnAgIT0gJ3snICYmICpwICE9ICdcJycgJiYKKwkJICAgICpwICE9ICc/JyAmJiAqcCAhPSAnKicgJiYgKnAgIT0gJ34nKQorCQkJY29udGludWU7CisJCWlmICghYnVmLmxlbikKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnIicpOworCQlpZiAocCAhPSBwMikKKwkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgcDIsIHAgLSBwMik7CisJCWlmICgqcCA9PSAnXFwnIHx8ICpwID09ICciJykKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXFwnKTsKKwkJcDIgPSBwOworCX0KKworCWlmIChwID09IGFyZykKKwkJc3RyYnVmX2FkZGNoKCZidWYsICciJyk7CisJZWxzZSBpZiAoIWJ1Zi5sZW4pCisJCXJldHVybiBhcmc7CisJZWxzZQorCQlzdHJidWZfYWRkKCZidWYsIHAyLCBwIC0gcDIpOworCisJc3RyYnVmX2FkZGNoKCZidWYsICciJyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9pbnRlcnByZXRlcihjb25zdCBjaGFyICpjbWQpCit7CisJc3RhdGljIGNoYXIgYnVmWzEwMF07CisJY2hhciAqcCwgKm9wdDsKKwlpbnQgbiwgZmQ7CisKKwkvKiBkb24ndCBldmVuIHRyeSBhIC5leGUgKi8KKwluID0gc3RybGVuKGNtZCk7CisJaWYgKG4gPj0gNCAmJiAhc3RyY2FzZWNtcChjbWQrbi00LCAiLmV4ZSIpKQorCQlyZXR1cm4gTlVMTDsKKworCWZkID0gb3BlbihjbWQsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwluID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKS0xKTsKKwljbG9zZShmZCk7CisJaWYgKG4gPCA0KQkvKiBhdCBsZWFzdCAnIyEveCcgYW5kIG5vdCBlcnJvciAqLworCQlyZXR1cm4gTlVMTDsKKworCWlmIChidWZbMF0gIT0gJyMnIHx8IGJ1ZlsxXSAhPSAnIScpCisJCXJldHVybiBOVUxMOworCWJ1ZltuXSA9ICdcMCc7CisJcCA9IGJ1ZiArIHN0cmNzcG4oYnVmLCAiXHJcbiIpOworCWlmICghKnApCisJCXJldHVybiBOVUxMOworCisJKnAgPSAnXDAnOworCWlmICghKHAgPSBzdHJyY2hyKGJ1ZisyLCAnLycpKSAmJiAhKHAgPSBzdHJyY2hyKGJ1ZisyLCAnXFwnKSkpCisJCXJldHVybiBOVUxMOworCS8qIHN0cmlwIG9wdGlvbnMgKi8KKwlpZiAoKG9wdCA9IHN0cmNocihwKzEsICcgJykpKQorCQkqb3B0ID0gJ1wwJzsKKwlyZXR1cm4gcCsxOworfQorCisvKgorICogZXhlX29ubHkgbWVhbnMgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gZGV0ZWN0IC5leGUgZmlsZXMsIGJ1dCBub3Qgc2NyaXB0cworICogKHdoaWNoIGRvIG5vdCBoYXZlIGFuIGV4dGVuc2lvbikKKyAqLworc3RhdGljIGNoYXIgKmxvb2t1cF9wcm9nKGNvbnN0IGNoYXIgKmRpciwgaW50IGRpcmxlbiwgY29uc3QgY2hhciAqY21kLAorCQkJIGludCBpc2V4ZSwgaW50IGV4ZV9vbmx5KQoreworCWNoYXIgcGF0aFtNQVhfUEFUSF07CisJd2NoYXJfdCB3cGF0aFtNQVhfUEFUSF07CisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJS4qc1xcJXMuZXhlIiwgZGlybGVuLCBkaXIsIGNtZCk7CisKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod3BhdGgsIHBhdGgpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWlzZXhlICYmIF93YWNjZXNzKHdwYXRoLCBGX09LKSA9PSAwKQorCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKwl3cGF0aFt3Y3NsZW4od3BhdGgpLTRdID0gJ1wwJzsKKwlpZiAoKCFleGVfb25seSB8fCBpc2V4ZSkgJiYgX3dhY2Nlc3Mod3BhdGgsIEZfT0spID09IDApIHsKKwkJaWYgKCEoR2V0RmlsZUF0dHJpYnV0ZXNXKHdwYXRoKSAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpIHsKKwkJCXBhdGhbc3RybGVuKHBhdGgpLTRdID0gJ1wwJzsKKwkJCXJldHVybiB4c3RyZHVwKHBhdGgpOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogRGV0ZXJtaW5lcyB0aGUgYWJzb2x1dGUgcGF0aCBvZiBjbWQgdXNpbmcgdGhlIHNwbGl0IHBhdGggaW4gcGF0aC4KKyAqIElmIGNtZCBjb250YWlucyBhIHNsYXNoIG9yIGJhY2tzbGFzaCwgbm8gbG9va3VwIGlzIHBlcmZvcm1lZC4KKyAqLworc3RhdGljIGNoYXIgKnBhdGhfbG9va3VwKGNvbnN0IGNoYXIgKmNtZCwgaW50IGV4ZV9vbmx5KQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJY2hhciAqcHJvZyA9IE5VTEw7CisJaW50IGxlbiA9IHN0cmxlbihjbWQpOworCWludCBpc2V4ZSA9IGxlbiA+PSA0ICYmICFzdHJjYXNlY21wKGNtZCtsZW4tNCwgIi5leGUiKTsKKworCWlmIChzdHJwYnJrKGNtZCwgIi9cXCIpKQorCQlyZXR1cm4geHN0cmR1cChjbWQpOworCisJcGF0aCA9IG1pbmd3X2dldGVudigiUEFUSCIpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoIXByb2cpIHsKKwkJY29uc3QgY2hhciAqc2VwID0gc3RyY2hybnVsKHBhdGgsICc7Jyk7CisJCWludCBkaXJsZW4gPSBzZXAgLSBwYXRoOworCQlpZiAoZGlybGVuKQorCQkJcHJvZyA9IGxvb2t1cF9wcm9nKHBhdGgsIGRpcmxlbiwgY21kLCBpc2V4ZSwgZXhlX29ubHkpOworCQlpZiAoISpzZXApCisJCQlicmVhazsKKwkJcGF0aCA9IHNlcCArIDE7CisJfQorCisJcmV0dXJuIHByb2c7Cit9CisKK3N0YXRpYyBjb25zdCB3Y2hhcl90ICp3Y3NjaHJudWwoY29uc3Qgd2NoYXJfdCAqcywgd2NoYXJfdCBjKQoreworCXdoaWxlICgqcyAmJiAqcyAhPSBjKQorCQlzKys7CisJcmV0dXJuIHM7Cit9CisKKy8qIENvbXBhcmUgb25seSBrZXlzICovCitzdGF0aWMgaW50IHdlbnZjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwl3Y2hhcl90ICpwID0gKih3Y2hhcl90ICoqKWEsICpxID0gKih3Y2hhcl90ICoqKWI7CisJc2l6ZV90IHBfbGVuLCBxX2xlbjsKKworCS8qIEZpbmQgdGhlIGtleXMgKi8KKwlwX2xlbiA9IHdjc2Nocm51bChwLCBMJz0nKSAtIHA7CisJcV9sZW4gPSB3Y3NjaHJudWwocSwgTCc9JykgLSBxOworCisJLyogSWYgdGhlIGxlbmd0aCBkaWZmZXJzLCBpbmNsdWRlIHRoZSBzaG9ydGVyIGtleSdzIE5VTCAqLworCWlmIChwX2xlbiA8IHFfbGVuKQorCQlwX2xlbisrOworCWVsc2UgaWYgKHBfbGVuID4gcV9sZW4pCisJCXBfbGVuID0gcV9sZW4gKyAxOworCisJcmV0dXJuIF93Y3NuaWNtcChwLCBxLCBwX2xlbik7Cit9CisKKy8qCisgKiBCdWlsZCBhbiBlbnZpcm9ubWVudCBibG9jayBjb21iaW5pbmcgdGhlIGluaGVyaXRlZCBlbnZpcm9ubWVudAorICogbWVyZ2VkIHdpdGggdGhlIGdpdmVuIGxpc3Qgb2Ygc2V0dGluZ3MuCisgKgorICogVmFsdWVzIG9mIHRoZSBmb3JtICJLRVk9VkFMVUUiIGluIGRlbHRhZW52IG92ZXJyaWRlIGluaGVyaXRlZCB2YWx1ZXMuCisgKiBWYWx1ZXMgb2YgdGhlIGZvcm0gIktFWSIgaW4gZGVsdGFlbnYgZGVsZXRlIGluaGVyaXRlZCB2YWx1ZXMuCisgKgorICogTXVsdGlwbGUgZW50cmllcyBpbiBkZWx0YWVudiBmb3IgdGhlIHNhbWUga2V5IGFyZSBleHBsaWNpdGx5IGFsbG93ZWQuCisgKgorICogV2UgcmV0dXJuIGEgY29udGlndW91cyBibG9jayBvZiBVTklDT0RFIHN0cmluZ3Mgd2l0aCBhIGZpbmFsIHRyYWlsaW5nCisgKiB6ZXJvIHdvcmQuCisgKi8KK3N0YXRpYyB3Y2hhcl90ICptYWtlX2Vudmlyb25tZW50X2Jsb2NrKGNoYXIgKipkZWx0YWVudikKK3sKKwl3Y2hhcl90ICp3ZW52ID0gR2V0RW52aXJvbm1lbnRTdHJpbmdzVygpLCAqd2RlbHRhZW52LCAqcmVzdWx0LCAqcDsKKwlzaXplX3Qgd2xlbiwgcywgZGVsdGFfc2l6ZSwgc2l6ZTsKKworCXdjaGFyX3QgKiphcnJheSA9IE5VTEw7CisJc2l6ZV90IGFsbG9jID0gMCwgbnIgPSAwLCBpOworCisJc2l6ZSA9IDE7IC8qIGZvciBleHRyYSBOVUwgYXQgdGhlIGVuZCAqLworCisJLyogSWYgdGhlcmUgaXMgbm8gZGVsdGFlbnYgdG8gYXBwbHksIHNpbXBseSByZXR1cm4gYSBjb3B5LiAqLworCWlmICghZGVsdGFlbnYgfHwgISpkZWx0YWVudikgeworCQlmb3IgKHAgPSB3ZW52OyBwICYmICpwOyApIHsKKwkJCXNpemVfdCBzID0gd2NzbGVuKHApICsgMTsKKwkJCXNpemUgKz0gczsKKwkJCXAgKz0gczsKKwkJfQorCisJCUFMTE9DX0FSUkFZKHJlc3VsdCwgc2l6ZSk7CisJCUNPUFlfQVJSQVkocmVzdWx0LCB3ZW52LCBzaXplKTsKKwkJRnJlZUVudmlyb25tZW50U3RyaW5nc1cod2Vudik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIGRlbHRhZW52LCBsZXQncyBhY2N1bXVsYXRlIGFsbCBrZXlzIGludG8gYGFycmF5YCwKKwkgKiBzb3J0IHRoZW0gdXNpbmcgdGhlIHN0YWJsZSBnaXRfc3RhYmxlX3Fzb3J0KCkgYW5kIHRoZW4gY29weSwKKwkgKiBza2lwcGluZyBkdXBsaWNhdGUga2V5cworCSAqLworCWZvciAocCA9IHdlbnY7IHAgJiYgKnA7ICkgeworCQlBTExPQ19HUk9XKGFycmF5LCBuciArIDEsIGFsbG9jKTsKKwkJcyA9IHdjc2xlbihwKSArIDE7CisJCWFycmF5W25yKytdID0gcDsKKwkJcCArPSBzOworCQlzaXplICs9IHM7CisJfQorCisJLyogKG92ZXItKWFzc2VzcyBzaXplIG5lZWRlZCBmb3Igd2NoYXIgdmVyc2lvbiBvZiBkZWx0YWVudiAqLworCWZvciAoZGVsdGFfc2l6ZSA9IDAsIGkgPSAwOyBkZWx0YWVudltpXTsgaSsrKQorCQlkZWx0YV9zaXplICs9IHN0cmxlbihkZWx0YWVudltpXSkgKiAyICsgMTsKKwlBTExPQ19BUlJBWSh3ZGVsdGFlbnYsIGRlbHRhX3NpemUpOworCisJLyogY29udmVydCB0aGUgZGVsdGFlbnYsIGFwcGVuZGluZyB0byBhcnJheSAqLworCWZvciAoaSA9IDAsIHAgPSB3ZGVsdGFlbnY7IGRlbHRhZW52W2ldOyBpKyspIHsKKwkJQUxMT0NfR1JPVyhhcnJheSwgbnIgKyAxLCBhbGxvYyk7CisJCXdsZW4gPSB4dXRmdG93Y3MocCwgZGVsdGFlbnZbaV0sIHdkZWx0YWVudiArIGRlbHRhX3NpemUgLSBwKTsKKwkJYXJyYXlbbnIrK10gPSBwOworCQlwICs9IHdsZW4gKyAxOworCX0KKworCWdpdF9zdGFibGVfcXNvcnQoYXJyYXksIG5yLCBzaXplb2YoKmFycmF5KSwgd2VudmNtcCk7CisJQUxMT0NfQVJSQVkocmVzdWx0LCBzaXplICsgZGVsdGFfc2l6ZSk7CisKKwlmb3IgKHAgPSByZXN1bHQsIGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkvKiBTa2lwIGFueSBkdXBsaWNhdGUga2V5czsgbGFzdCBvbmUgd2lucyAqLworCQl3aGlsZSAoaSArIDEgPCBuciAmJiAhd2VudmNtcChhcnJheSArIGksIGFycmF5ICsgaSArIDEpKQorCQkgICAgICAgaSsrOworCisJCS8qIFNraXAgInRvIGRlbGV0ZSIgZW50cnkgKi8KKwkJaWYgKCF3Y3NjaHIoYXJyYXlbaV0sIEwnPScpKQorCQkJY29udGludWU7CisKKwkJc2l6ZSA9IHdjc2xlbihhcnJheVtpXSkgKyAxOworCQlDT1BZX0FSUkFZKHAsIGFycmF5W2ldLCBzaXplKTsKKwkJcCArPSBzaXplOworCX0KKwkqcCA9IEwnXDAnOworCisJZnJlZShhcnJheSk7CisJZnJlZSh3ZGVsdGFlbnYpOworCUZyZWVFbnZpcm9ubWVudFN0cmluZ3NXKHdlbnYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3Vuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlcyh2b2lkKQoreworCXN0YXRpYyBpbnQgZG9uZTsKKwljaGFyICpwID0gdW5zZXRfZW52aXJvbm1lbnRfdmFyaWFibGVzOworCisJaWYgKGRvbmUgfHwgIXApCisJCXJldHVybjsKKwlkb25lID0gMTsKKworCWZvciAoOzspIHsKKwkJY2hhciAqY29tbWEgPSBzdHJjaHIocCwgJywnKTsKKworCQlpZiAoY29tbWEpCisJCQkqY29tbWEgPSAnXDAnOworCQl1bnNldGVudihwKTsKKwkJaWYgKCFjb21tYSkKKwkJCWJyZWFrOworCQlwID0gY29tbWEgKyAxOworCX0KK30KKworc3RydWN0IHBpbmZvX3QgeworCXN0cnVjdCBwaW5mb190ICpuZXh0OworCXBpZF90IHBpZDsKKwlIQU5ETEUgcHJvYzsKK307CitzdGF0aWMgc3RydWN0IHBpbmZvX3QgKnBpbmZvID0gTlVMTDsKK0NSSVRJQ0FMX1NFQ1RJT04gcGluZm9fY3M7CisKKy8qIFVzZWQgdG8gbWF0Y2ggYW5kIGNob21wIG9mZiBwYXRoIGNvbXBvbmVudHMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2xhc3RfcGF0aF9jb21wb25lbnQoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90ICpsZW4sCisJCQkJCSAgICBjb25zdCBjaGFyICpjb21wb25lbnQpCit7CisJc2l6ZV90IGNvbXBvbmVudF9sZW4gPSBzdHJsZW4oY29tcG9uZW50KTsKKwlpZiAoKmxlbiA8IGNvbXBvbmVudF9sZW4gKyAxIHx8CisJICAgICFpc19kaXJfc2VwKHBhdGhbKmxlbiAtIGNvbXBvbmVudF9sZW4gLSAxXSkgfHwKKwkgICAgZnNwYXRobmNtcChwYXRoICsgKmxlbiAtIGNvbXBvbmVudF9sZW4sIGNvbXBvbmVudCwgY29tcG9uZW50X2xlbikpCisJCXJldHVybiAwOworCSpsZW4gLT0gY29tcG9uZW50X2xlbiArIDE7CisJLyogY2hvbXAgb2ZmIHJlcGVhdGVkIGRpciBzZXBhcmF0b3JzICovCisJd2hpbGUgKCpsZW4gPiAwICYmIGlzX2Rpcl9zZXAocGF0aFsqbGVuIC0gMV0pKQorCQkoKmxlbiktLTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpc19tc3lzMl9zaChjb25zdCBjaGFyICpjbWQpCit7CisJaWYgKCFjbWQpCisJCXJldHVybiAwOworCisJaWYgKCFzdHJjbXAoY21kLCAic2giKSkgeworCQlzdGF0aWMgaW50IHJldCA9IC0xOworCQljaGFyICpwOworCisJCWlmIChyZXQgPj0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcCA9IHBhdGhfbG9va3VwKGNtZCwgMCk7CisJCWlmICghcCkKKwkJCXJldCA9IDA7CisJCWVsc2UgeworCQkJc2l6ZV90IGxlbiA9IHN0cmxlbihwKTsKKworCQkJcmV0ID0gbWF0Y2hfbGFzdF9wYXRoX2NvbXBvbmVudChwLCAmbGVuLCAic2guZXhlIikgJiYKKwkJCQltYXRjaF9sYXN0X3BhdGhfY29tcG9uZW50KHAsICZsZW4sICJiaW4iKSAmJgorCQkJCW1hdGNoX2xhc3RfcGF0aF9jb21wb25lbnQocCwgJmxlbiwgInVzciIpOworCQkJZnJlZShwKTsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChlbmRzX3dpdGgoY21kLCAiXFxzaC5leGUiKSkgeworCQlzdGF0aWMgY2hhciAqc2g7CisKKwkJaWYgKCFzaCkKKwkJCXNoID0gcGF0aF9sb29rdXAoInNoIiwgMCk7CisKKwkJcmV0dXJuICFmc3BhdGhjbXAoY21kLCBzaCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBwaWRfdCBtaW5nd19zcGF3bnZlX2ZkKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKipkZWx0YWVudiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmRpciwKKwkJCSAgICAgIGludCBwcmVwZW5kX2NtZCwgaW50IGZoaW4sIGludCBmaG91dCwgaW50IGZoZXJyKQoreworCXN0YXRpYyBpbnQgcmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlID0gLTE7CisJU1RBUlRVUElORk9FWFcgc2k7CisJUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKKwlMUFBST0NfVEhSRUFEX0FUVFJJQlVURV9MSVNUIGF0dHJfbGlzdCA9IE5VTEw7CisJSEFORExFIHN0ZGhhbmRsZXNbM107CisJRFdPUkQgc3RkaGFuZGxlc19jb3VudCA9IDA7CisJU0laRV9UIHNpemU7CisJc3RydWN0IHN0cmJ1ZiBhcmdzOworCXdjaGFyX3Qgd2NtZFtNQVhfUEFUSF0sIHdkaXJbTUFYX1BBVEhdLCAqd2FyZ3MsICp3ZW52YmxrID0gTlVMTDsKKwl1bnNpZ25lZCBmbGFncyA9IENSRUFURV9VTklDT0RFX0VOVklST05NRU5UOworCUJPT0wgcmV0OworCUhBTkRMRSBjb25zOworCWNvbnN0IGNoYXIgKigqcXVvdGVfYXJnKShjb25zdCBjaGFyICphcmcpID0KKwkJaXNfbXN5czJfc2goY21kID8gY21kIDogKmFyZ3YpID8KKwkJcXVvdGVfYXJnX21zeXMyIDogcXVvdGVfYXJnX21zdmM7CisKKwkvKiBNYWtlIHN1cmUgdG8gb3ZlcnJpZGUgcHJldmlvdXMgZXJyb3JzLCBpZiBhbnkgKi8KKwllcnJubyA9IDA7CisKKwlpZiAocmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlIDwgMCkKKwkJcmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlID0gY29yZV9yZXN0cmljdF9pbmhlcml0ZWRfaGFuZGxlczsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgY29kZSB0byByZXN0cmljdCB3aGljaCBoYW5kbGVzIGFyZSBpbmhlcml0ZWQgc2VlbXMKKwkgKiB0byB3b3JrIHByb3Blcmx5IG9ubHkgb24gV2luZG93cyA3IGFuZCBsYXRlciwgc28gbGV0J3MgZGlzYWJsZSBpdAorCSAqIG9uIFdpbmRvd3MgVmlzdGEgYW5kIDIwMDguCisJICovCisJaWYgKHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA8IDApCisJCXJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA9IEdldFZlcnNpb24oKSA+PiAxNiA+PSA3NjAxOworCisJZG9fdW5zZXRfZW52aXJvbm1lbnRfdmFyaWFibGVzKCk7CisKKwkvKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UgYXJlIGFzc29jaWF0ZWQgdG8gYSBjb25zb2xlICovCisJY29ucyA9IENyZWF0ZUZpbGVXKEwiQ09OT1VUJCIsIEdFTkVSSUNfV1JJVEUsCisJCQlGSUxFX1NIQVJFX1dSSVRFLCBOVUxMLCBPUEVOX0VYSVNUSU5HLAorCQkJRklMRV9BVFRSSUJVVEVfTk9STUFMLCBOVUxMKTsKKwlpZiAoY29ucyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQkvKiBUaGVyZSBpcyBubyBjb25zb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2Nlc3MuCisJCSAqIFNpbmNlIHRoZSBjaGlsZCBpcyBhIGNvbnNvbGUgcHJvY2VzcywgV2luZG93cworCQkgKiB3b3VsZCBub3JtYWxseSBjcmVhdGUgYSBjb25zb2xlIHdpbmRvdy4gQnV0CisJCSAqIHNpbmNlIHdlJ2xsIGJlIHJlZGlyZWN0aW5nIHN0ZCBzdHJlYW1zLCB3ZSBkbworCQkgKiBub3QgbmVlZCB0aGUgY29uc29sZS4KKwkJICogSXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBERVRBQ0hFRF9QUk9DRVNTCisJCSAqIGluc3RlYWQgb2YgQ1JFQVRFX05PX1dJTkRPVyB0byBtYWtlIHNzaAorCQkgKiByZWNvZ25pemUgdGhhdCBpdCBoYXMgbm8gY29uc29sZS4KKwkJICovCisJCWZsYWdzIHw9IERFVEFDSEVEX1BST0NFU1M7CisJfSBlbHNlIHsKKwkJLyogVGhlcmUgaXMgYWxyZWFkeSBhIGNvbnNvbGUuIElmIHdlIHNwZWNpZmllZAorCQkgKiBERVRBQ0hFRF9QUk9DRVNTIGhlcmUsIHRvbywgV2luZG93cyB3b3VsZAorCQkgKiBkaXNhc3NvY2lhdGUgdGhlIGNoaWxkIGZyb20gdGhlIGNvbnNvbGUuCisJCSAqIFRoZSBzYW1lIGlzIHRydWUgZm9yIENSRUFURV9OT19XSU5ET1cuCisJCSAqIEdvIGZpZ3VyZSEKKwkJICovCisJCUNsb3NlSGFuZGxlKGNvbnMpOworCX0KKwltZW1zZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKKwlzaS5TdGFydHVwSW5mby5jYiA9IHNpemVvZihzaSk7CisJc2kuU3RhcnR1cEluZm8uaFN0ZElucHV0ID0gd2luYW5zaV9nZXRfb3NmaGFuZGxlKGZoaW4pOworCXNpLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgPSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoZmhvdXQpOworCXNpLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IHdpbmFuc2lfZ2V0X29zZmhhbmRsZShmaGVycik7CisKKwkvKiBUaGUgbGlzdCBvZiBoYW5kbGVzIGNhbm5vdCBjb250YWluIGR1cGxpY2F0ZXMgKi8KKwlpZiAoc2kuU3RhcnR1cEluZm8uaFN0ZElucHV0ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlzdGRoYW5kbGVzW3N0ZGhhbmRsZXNfY291bnQrK10gPSBzaS5TdGFydHVwSW5mby5oU3RkSW5wdXQ7CisJaWYgKHNpLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgJiYKKwkgICAgc2kuU3RhcnR1cEluZm8uaFN0ZE91dHB1dCAhPSBzaS5TdGFydHVwSW5mby5oU3RkSW5wdXQpCisJCXN0ZGhhbmRsZXNbc3RkaGFuZGxlc19jb3VudCsrXSA9IHNpLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQ7CisJaWYgKHNpLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSAmJgorCSAgICBzaS5TdGFydHVwSW5mby5oU3RkRXJyb3IgIT0gc2kuU3RhcnR1cEluZm8uaFN0ZElucHV0ICYmCisJICAgIHNpLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciAhPSBzaS5TdGFydHVwSW5mby5oU3RkT3V0cHV0KQorCQlzdGRoYW5kbGVzW3N0ZGhhbmRsZXNfY291bnQrK10gPSBzaS5TdGFydHVwSW5mby5oU3RkRXJyb3I7CisJaWYgKHN0ZGhhbmRsZXNfY291bnQpCisJCXNpLlN0YXJ0dXBJbmZvLmR3RmxhZ3MgfD0gU1RBUlRGX1VTRVNUREhBTkRMRVM7CisKKwlpZiAoKmFyZ3YgJiYgIXN0cmNtcChjbWQsICphcmd2KSkKKwkJd2NtZFswXSA9IEwnXDAnOworCWVsc2UgaWYgKHh1dGZ0b3djc19wYXRoKHdjbWQsIGNtZCkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGRpciAmJiB4dXRmdG93Y3NfcGF0aCh3ZGlyLCBkaXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogY29uY2F0ZW5hdGUgYXJndiwgcXVvdGluZyBhcmdzIGFzIHdlIGdvICovCisJc3RyYnVmX2luaXQoJmFyZ3MsIDApOworCWlmIChwcmVwZW5kX2NtZCkgeworCQljaGFyICpxdW90ZWQgPSAoY2hhciAqKXF1b3RlX2FyZyhjbWQpOworCQlzdHJidWZfYWRkc3RyKCZhcmdzLCBxdW90ZWQpOworCQlpZiAocXVvdGVkICE9IGNtZCkKKwkJCWZyZWUocXVvdGVkKTsKKwl9CisJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKKwkJY2hhciAqcXVvdGVkID0gKGNoYXIgKilxdW90ZV9hcmcoKmFyZ3YpOworCQlpZiAoKmFyZ3MuYnVmKQorCQkJc3RyYnVmX2FkZGNoKCZhcmdzLCAnICcpOworCQlzdHJidWZfYWRkc3RyKCZhcmdzLCBxdW90ZWQpOworCQlpZiAocXVvdGVkICE9ICphcmd2KQorCQkJZnJlZShxdW90ZWQpOworCX0KKworCUFMTE9DX0FSUkFZKHdhcmdzLCBzdF9hZGQoc3RfbXVsdCgyLCBhcmdzLmxlbiksIDEpKTsKKwl4dXRmdG93Y3Mod2FyZ3MsIGFyZ3MuYnVmLCAyICogYXJncy5sZW4gKyAxKTsKKwlzdHJidWZfcmVsZWFzZSgmYXJncyk7CisKKwl3ZW52YmxrID0gbWFrZV9lbnZpcm9ubWVudF9ibG9jayhkZWx0YWVudik7CisKKwltZW1zZXQoJnBpLCAwLCBzaXplb2YocGkpKTsKKwlpZiAocmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlICYmIHN0ZGhhbmRsZXNfY291bnQgJiYKKwkgICAgKEluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdChOVUxMLCAxLCAwLCAmc2l6ZSkgfHwKKwkgICAgIEdldExhc3RFcnJvcigpID09IEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpICYmCisJICAgIChhdHRyX2xpc3QgPSAoTFBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfTElTVCkKKwkJCShIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgc2l6ZSkpKSAmJgorCSAgICBJbml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QoYXR0cl9saXN0LCAxLCAwLCAmc2l6ZSkgJiYKKwkgICAgVXBkYXRlUHJvY1RocmVhZEF0dHJpYnV0ZShhdHRyX2xpc3QsIDAsCisJCQkJICAgICAgUFJPQ19USFJFQURfQVRUUklCVVRFX0hBTkRMRV9MSVNULAorCQkJCSAgICAgIHN0ZGhhbmRsZXMsCisJCQkJICAgICAgc3RkaGFuZGxlc19jb3VudCAqIHNpemVvZihIQU5ETEUpLAorCQkJCSAgICAgIE5VTEwsIE5VTEwpKSB7CisJCXNpLmxwQXR0cmlidXRlTGlzdCA9IGF0dHJfbGlzdDsKKwkJZmxhZ3MgfD0gRVhURU5ERURfU1RBUlRVUElORk9fUFJFU0VOVDsKKwl9CisKKwlyZXQgPSBDcmVhdGVQcm9jZXNzVygqd2NtZCA/IHdjbWQgOiBOVUxMLCB3YXJncywgTlVMTCwgTlVMTCwKKwkJCSAgICAgc3RkaGFuZGxlc19jb3VudCA/IFRSVUUgOiBGQUxTRSwKKwkJCSAgICAgZmxhZ3MsIHdlbnZibGssIGRpciA/IHdkaXIgOiBOVUxMLAorCQkJICAgICAmc2kuU3RhcnR1cEluZm8sICZwaSk7CisKKwkvKgorCSAqIE9uIFdpbmRvd3MgMjAwOCBSMiwgaXQgc2VlbXMgdGhhdCBzcGVjaWZ5aW5nIGNlcnRhaW4gdHlwZXMgb2YgaGFuZGxlcworCSAqIChzdWNoIGFzIEZJTEVfVFlQRV9DSEFSIG9yIEZJTEVfVFlQRV9QSVBFKSB3aWxsIGFsd2F5cyBwcm9kdWNlIGFuCisJICogZXJyb3IuIFJhdGhlciB0aGFuIHBsYXlpbmcgZmluaWNreSBhbmQgZnJhZ2lsZSBnYW1lcywgbGV0J3MganVzdCB0cnkKKwkgKiB0byBkZXRlY3QgdGhpcyBzaXR1YXRpb24gYW5kIHNpbXBseSB0cnkgYWdhaW4gd2l0aG91dCByZXN0cmljdGluZyBhbnkKKwkgKiBoYW5kbGUgaW5oZXJpdGFuY2UuIFRoaXMgaXMgc3RpbGwgYmV0dGVyIHRoYW4gZmFpbGluZyB0byBjcmVhdGUKKwkgKiBwcm9jZXNzZXMuCisJICovCisJaWYgKCFyZXQgJiYgcmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlICYmIHN0ZGhhbmRsZXNfY291bnQpIHsKKwkJRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGVyciAhPSBFUlJPUl9OT19TWVNURU1fUkVTT1VSQ0VTICYmCisJCSAgICAvKgorCQkgICAgICogT24gV2luZG93cyA3IGFuZCBlYXJsaWVyLCBoYW5kbGVzIG9uIHBpcGVzIGFuZCBjaGFyYWN0ZXIKKwkJICAgICAqIGRldmljZXMgYXJlIGluaGVyaXRlZCBhdXRvbWF0aWNhbGx5LCBhbmQgY2Fubm90IGJlCisJCSAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIHRocmVhZCBoYW5kbGUgbGlzdC4gUmF0aGVyIHRoYW4gdHJ5aW5nCisJCSAgICAgKiB0byBjYXRjaCBlYWNoIGFuZCBldmVyeSBjb3JuZXIgY2FzZSAoYW5kIHJ1bm5pbmcgdGhlCisJCSAgICAgKiBjaGFuY2Ugb2YgKnN0aWxsKiBmb3JnZXR0aW5nIGEgZmV3KSwgbGV0J3MganVzdCBmYWxsCisJCSAgICAgKiBiYWNrIHRvIGNyZWF0aW5nIHRoZSBwcm9jZXNzIHdpdGhvdXQgdHJ5aW5nIHRvIGxpbWl0IHRoZQorCQkgICAgICogaGFuZGxlIGluaGVyaXRhbmNlLgorCQkgICAgICovCisJCSAgICAhKGVyciA9PSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUiAmJgorCQkgICAgICBHZXRWZXJzaW9uKCkgPj4gMTYgPCA5MjAwKSAmJgorCQkgICAgIWdldGVudigiU1VQUFJFU1NfSEFORExFX0lOSEVSSVRBTkNFX1dBUk5JTkciKSkgeworCQkJRFdPUkQgZmwgPSAwOworCQkJaW50IGk7CisKKwkJCXNldGVudigiU1VQUFJFU1NfSEFORExFX0lOSEVSSVRBTkNFX1dBUk5JTkciLCAiMSIsIDEpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgc3RkaGFuZGxlc19jb3VudDsgaSsrKSB7CisJCQkJSEFORExFIGggPSBzdGRoYW5kbGVzW2ldOworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICJoYW5kbGUgIyVkOiAlcCAodHlwZSAlbHgsICIKKwkJCQkJICAgICJoYW5kbGUgaW5mbyAoJWQpICVseFxuIiwgaSwgaCwKKwkJCQkJICAgIEdldEZpbGVUeXBlKGgpLAorCQkJCQkgICAgR2V0SGFuZGxlSW5mb3JtYXRpb24oaCwgJmZsKSwKKwkJCQkJICAgIGZsKTsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlxuVGhpcyBpcyBhIGJ1ZzsgcGxlYXNlIHJlcG9ydCBpdCAiCisJCQkJICAgICAgImF0XG5odHRwczovL2dpdGh1Yi5jb20vZ2l0LWZvci13aW5kb3dzLyIKKwkJCQkgICAgICAiZ2l0L2lzc3Vlcy9uZXdcblxuIgorCQkJCSAgICAgICJUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcsIHBsZWFzZSBzZXQgIgorCQkJCSAgICAgICJ0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVcblxuIgorCQkJCSAgICAgICJcdFNVUFBSRVNTX0hBTkRMRV9JTkhFUklUQU5DRV9XQVJOSU5HPTEiCisJCQkJICAgICAgIlxuIik7CisJCX0KKwkJcmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlID0gMDsKKwkJZmxhZ3MgJj0gfkVYVEVOREVEX1NUQVJUVVBJTkZPX1BSRVNFTlQ7CisJCXJldCA9IENyZWF0ZVByb2Nlc3NXKCp3Y21kID8gd2NtZCA6IE5VTEwsIHdhcmdzLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgVFJVRSwgZmxhZ3MsIHdlbnZibGssIGRpciA/IHdkaXIgOiBOVUxMLAorCQkJCSAgICAgJnNpLlN0YXJ0dXBJbmZvLCAmcGkpOworCQlpZiAoIXJldCkKKwkJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCWlmIChyZXQgJiYgYnVmLmxlbikgeworCQkJd2FybmluZygiZmFpbGVkIHRvIHJlc3RyaWN0IGZpbGUgaGFuZGxlcyAoJWxkKVxuXG4lcyIsCisJCQkJZXJyLCBidWYuYnVmKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9IGVsc2UgaWYgKCFyZXQpCisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisKKwlpZiAoc2kubHBBdHRyaWJ1dGVMaXN0KQorCQlEZWxldGVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdChzaS5scEF0dHJpYnV0ZUxpc3QpOworCWlmIChhdHRyX2xpc3QpCisJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGF0dHJfbGlzdCk7CisKKwlmcmVlKHdlbnZibGspOworCWZyZWUod2FyZ3MpOworCisJaWYgKCFyZXQpCisJCXJldHVybiAtMTsKKworCUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOworCisJLyoKKwkgKiBUaGUgcHJvY2VzcyBJRCBpcyB0aGUgaHVtYW4tcmVhZGFibGUgaWRlbnRpZmllciBvZiB0aGUgcHJvY2VzcworCSAqIHRoYXQgd2Ugd2FudCB0byBwcmVzZW50IGluIGxvZyBhbmQgZXJyb3IgbWVzc2FnZXMuIFRoZSBoYW5kbGUKKwkgKiBpcyBub3QgdXNlZnVsIGZvciB0aGlzIHB1cnBvc2UuIEJ1dCB3ZSBjYW5ub3QgY2xvc2UgaXQsIGVpdGhlciwKKwkgKiBiZWNhdXNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB0dXJuIGEgcHJvY2VzcyBJRCBpbnRvIGEgcHJvY2VzcworCSAqIGhhbmRsZSBhZnRlciB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVkLgorCSAqIEtlZXAgdGhlIGhhbmRsZSBpbiBhIGxpc3QgZm9yIHdhaXRwaWQuCisJICovCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJnBpbmZvX2NzKTsKKwl7CisJCXN0cnVjdCBwaW5mb190ICppbmZvID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBpbmZvX3QpKTsKKwkJaW5mby0+cGlkID0gcGkuZHdQcm9jZXNzSWQ7CisJCWluZm8tPnByb2MgPSBwaS5oUHJvY2VzczsKKwkJaW5mby0+bmV4dCA9IHBpbmZvOworCQlwaW5mbyA9IGluZm87CisJfQorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZwaW5mb19jcyk7CisKKwlyZXR1cm4gKHBpZF90KXBpLmR3UHJvY2Vzc0lkOworfQorCitzdGF0aWMgcGlkX3QgbWluZ3dfc3Bhd252KGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGludCBwcmVwZW5kX2NtZCkKK3sKKwlyZXR1cm4gbWluZ3dfc3Bhd252ZV9mZChjbWQsIGFyZ3YsIE5VTEwsIE5VTEwsIHByZXBlbmRfY21kLCAwLCAxLCAyKTsKK30KKworcGlkX3QgbWluZ3dfc3Bhd252cGUoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICoqYXJndiwgY2hhciAqKmRlbHRhZW52LAorCQkgICAgIGNvbnN0IGNoYXIgKmRpciwKKwkJICAgICBpbnQgZmhpbiwgaW50IGZob3V0LCBpbnQgZmhlcnIpCit7CisJcGlkX3QgcGlkOworCWNoYXIgKnByb2cgPSBwYXRoX2xvb2t1cChjbWQsIDApOworCisJaWYgKCFwcm9nKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlwaWQgPSAtMTsKKwl9CisJZWxzZSB7CisJCWNvbnN0IGNoYXIgKmludGVycHIgPSBwYXJzZV9pbnRlcnByZXRlcihwcm9nKTsKKworCQlpZiAoaW50ZXJwcikgeworCQkJY29uc3QgY2hhciAqYXJndjAgPSBhcmd2WzBdOworCQkJY2hhciAqaXByb2cgPSBwYXRoX2xvb2t1cChpbnRlcnByLCAxKTsKKwkJCWFyZ3ZbMF0gPSBwcm9nOworCQkJaWYgKCFpcHJvZykgeworCQkJCWVycm5vID0gRU5PRU5UOworCQkJCXBpZCA9IC0xOworCQkJfQorCQkJZWxzZSB7CisJCQkJcGlkID0gbWluZ3dfc3Bhd252ZV9mZChpcHJvZywgYXJndiwgZGVsdGFlbnYsIGRpciwgMSwKKwkJCQkJCSAgICAgICBmaGluLCBmaG91dCwgZmhlcnIpOworCQkJCWZyZWUoaXByb2cpOworCQkJfQorCQkJYXJndlswXSA9IGFyZ3YwOworCQl9CisJCWVsc2UKKwkJCXBpZCA9IG1pbmd3X3NwYXdudmVfZmQocHJvZywgYXJndiwgZGVsdGFlbnYsIGRpciwgMCwKKwkJCQkJICAgICAgIGZoaW4sIGZob3V0LCBmaGVycik7CisJCWZyZWUocHJvZyk7CisJfQorCXJldHVybiBwaWQ7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X3NoZWxsX2V4ZWMoY29uc3QgY2hhciAqY21kLCBjaGFyICpjb25zdCAqYXJndikKK3sKKwljb25zdCBjaGFyICppbnRlcnByID0gcGFyc2VfaW50ZXJwcmV0ZXIoY21kKTsKKwljaGFyICpwcm9nOworCWludCBwaWQgPSAwOworCisJaWYgKCFpbnRlcnByKQorCQlyZXR1cm4gMDsKKwlwcm9nID0gcGF0aF9sb29rdXAoaW50ZXJwciwgMSk7CisJaWYgKHByb2cpIHsKKwkJaW50IGV4ZWNfaWQ7CisJCWludCBhcmdjID0gMDsKKyNpZm5kZWYgX01TQ19WRVIKKwkJY29uc3QKKyNlbmRpZgorCQljaGFyICoqYXJndjI7CisJCXdoaWxlIChhcmd2W2FyZ2NdKSBhcmdjKys7CisJCUFMTE9DX0FSUkFZKGFyZ3YyLCBhcmdjICsgMSk7CisJCWFyZ3YyWzBdID0gKGNoYXIgKiljbWQ7CS8qIGZ1bGwgcGF0aCB0byB0aGUgc2NyaXB0IGZpbGUgKi8KKwkJQ09QWV9BUlJBWSgmYXJndjJbMV0sICZhcmd2WzFdLCBhcmdjKTsKKwkJZXhlY19pZCA9IHRyYWNlMl9leGVjKHByb2csIGFyZ3YyKTsKKwkJcGlkID0gbWluZ3dfc3Bhd252KHByb2csIGFyZ3YyLCAxKTsKKwkJaWYgKHBpZCA+PSAwKSB7CisJCQlpbnQgc3RhdHVzOworCQkJaWYgKHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSA8IDApCisJCQkJc3RhdHVzID0gMjU1OworCQkJdHJhY2UyX2V4ZWNfcmVzdWx0KGV4ZWNfaWQsIHN0YXR1cyk7CisJCQlleGl0KHN0YXR1cyk7CisJCX0KKwkJdHJhY2UyX2V4ZWNfcmVzdWx0KGV4ZWNfaWQsIC0xKTsKKwkJcGlkID0gMTsJLyogaW5kaWNhdGUgdGhhdCB3ZSB0cmllZCBidXQgZmFpbGVkICovCisJCWZyZWUocHJvZyk7CisJCWZyZWUoYXJndjIpOworCX0KKwlyZXR1cm4gcGlkOworfQorCitpbnQgbWluZ3dfZXhlY3YoY29uc3QgY2hhciAqY21kLCBjaGFyICpjb25zdCAqYXJndikKK3sKKwkvKiBjaGVjayBpZiBnaXRfY29tbWFuZCBpcyBhIHNoZWxsIHNjcmlwdCAqLworCWlmICghdHJ5X3NoZWxsX2V4ZWMoY21kLCBhcmd2KSkgeworCQlpbnQgcGlkLCBzdGF0dXM7CisJCWludCBleGVjX2lkOworCisJCWV4ZWNfaWQgPSB0cmFjZTJfZXhlYyhjbWQsIChjb25zdCBjaGFyICoqKWFyZ3YpOworCQlwaWQgPSBtaW5nd19zcGF3bnYoY21kLCAoY29uc3QgY2hhciAqKilhcmd2LCAwKTsKKwkJaWYgKHBpZCA8IDApIHsKKwkJCXRyYWNlMl9leGVjX3Jlc3VsdChleGVjX2lkLCAtMSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSA8IDApCisJCQlzdGF0dXMgPSAyNTU7CisJCXRyYWNlMl9leGVjX3Jlc3VsdChleGVjX2lkLCBzdGF0dXMpOworCQlleGl0KHN0YXR1cyk7CisJfQorCXJldHVybiAtMTsKK30KKworaW50IG1pbmd3X2V4ZWN2cChjb25zdCBjaGFyICpjbWQsIGNoYXIgKmNvbnN0ICphcmd2KQoreworCWNoYXIgKnByb2cgPSBwYXRoX2xvb2t1cChjbWQsIDApOworCisJaWYgKHByb2cpIHsKKwkJbWluZ3dfZXhlY3YocHJvZywgYXJndik7CisJCWZyZWUocHJvZyk7CisJfSBlbHNlCisJCWVycm5vID0gRU5PRU5UOworCisJcmV0dXJuIC0xOworfQorCitpbnQgbWluZ3dfa2lsbChwaWRfdCBwaWQsIGludCBzaWcpCit7CisJaWYgKHBpZCA+IDAgJiYgc2lnID09IFNJR1RFUk0pIHsKKwkJSEFORExFIGggPSBPcGVuUHJvY2VzcyhQUk9DRVNTX1RFUk1JTkFURSwgRkFMU0UsIHBpZCk7CisKKwkJaWYgKFRlcm1pbmF0ZVByb2Nlc3MoaCwgLTEpKSB7CisJCQlDbG9zZUhhbmRsZShoKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwkJQ2xvc2VIYW5kbGUoaCk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKHBpZCA+IDAgJiYgc2lnID09IDApIHsKKwkJSEFORExFIGggPSBPcGVuUHJvY2VzcyhQUk9DRVNTX1FVRVJZX0lORk9STUFUSU9OLCBGQUxTRSwgcGlkKTsKKwkJaWYgKGgpIHsKKwkJCUNsb3NlSGFuZGxlKGgpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBVVEYtOCB2ZXJzaW9ucyBvZiBnZXRlbnYoKSwgcHV0ZW52KCkgYW5kIHVuc2V0ZW52KCkuCisgKiBJbnRlcm5hbGx5LCB0aGV5IHVzZSB0aGUgQ1JUJ3Mgc3RvY2sgVU5JQ09ERSByb3V0aW5lcworICogdG8gYXZvaWQgZGF0YSBsb3NzLgorICovCitjaGFyICptaW5nd19nZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKK3sKKyNkZWZpbmUgR0VURU5WX01BWF9SRVRBSU4gNjQKKwlzdGF0aWMgY2hhciAqdmFsdWVzW0dFVEVOVl9NQVhfUkVUQUlOXTsKKwlzdGF0aWMgaW50IHZhbHVlX2NvdW50ZXI7CisJaW50IGxlbl9rZXksIGxlbl92YWx1ZTsKKwl3Y2hhcl90ICp3X2tleTsKKwljaGFyICp2YWx1ZTsKKwl3Y2hhcl90IHdfdmFsdWVbMzI3NjhdOworCisJaWYgKCFuYW1lIHx8ICEqbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsZW5fa2V5ID0gc3RybGVuKG5hbWUpICsgMTsKKwkvKiBXZSBjYW5ub3QgdXNlIHhjYWxsb2MoKSBoZXJlIGJlY2F1c2UgdGhhdCB1c2VzIGdldGVudigpIGl0c2VsZiAqLworCXdfa2V5ID0gY2FsbG9jKGxlbl9rZXksIHNpemVvZih3Y2hhcl90KSk7CisJaWYgKCF3X2tleSkKKwkJZGllKCJPdXQgb2YgbWVtb3J5LCAodHJpZWQgdG8gYWxsb2NhdGUgJXUgd2NoYXJfdCdzKSIsIGxlbl9rZXkpOworCXh1dGZ0b3djcyh3X2tleSwgbmFtZSwgbGVuX2tleSk7CisJLyogR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoKSBvbmx5IHNldHMgdGhlIGxhc3QgZXJyb3IgdXBvbiBmYWlsdXJlICovCisJU2V0TGFzdEVycm9yKEVSUk9SX1NVQ0NFU1MpOworCWxlbl92YWx1ZSA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKHdfa2V5LCB3X3ZhbHVlLCBBUlJBWV9TSVpFKHdfdmFsdWUpKTsKKwlpZiAoIWxlbl92YWx1ZSAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5EKSB7CisJCWZyZWUod19rZXkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZnJlZSh3X2tleSk7CisKKwlsZW5fdmFsdWUgPSBsZW5fdmFsdWUgKiAzICsgMTsKKwkvKiBXZSBjYW5ub3QgdXNlIHhjYWxsb2MoKSBoZXJlIGJlY2F1c2UgdGhhdCB1c2VzIGdldGVudigpIGl0c2VsZiAqLworCXZhbHVlID0gY2FsbG9jKGxlbl92YWx1ZSwgc2l6ZW9mKGNoYXIpKTsKKwlpZiAoIXZhbHVlKQorCQlkaWUoIk91dCBvZiBtZW1vcnksICh0cmllZCB0byBhbGxvY2F0ZSAldSBieXRlcykiLCBsZW5fdmFsdWUpOworCXh3Y3N0b3V0Zih2YWx1ZSwgd192YWx1ZSwgbGVuX3ZhbHVlKTsKKworCS8qCisJICogV2UgcmV0dXJuIGB2YWx1ZWAgd2hpY2ggaXMgYW4gYWxsb2NhdGVkIHZhbHVlIGFuZCB0aGUgY2FsbGVyIGlzIE5PVAorCSAqIGV4cGVjdGluZyB0byBoYXZlIHRvIGZyZWUgaXQsIHNvIHdlIGtlZXAgYSByb3VuZC1yb2JpbiBhcnJheSwKKwkgKiBpbnZhbGlkYXRpbmcgdGhlIGJ1ZmZlciBhZnRlciBHRVRFTlZfTUFYX1JFVEFJTiBnZXRlbnYoKSBjYWxscy4KKwkgKi8KKwlmcmVlKHZhbHVlc1t2YWx1ZV9jb3VudGVyXSk7CisJdmFsdWVzW3ZhbHVlX2NvdW50ZXIrK10gPSB2YWx1ZTsKKwlpZiAodmFsdWVfY291bnRlciA+PSBBUlJBWV9TSVpFKHZhbHVlcykpCisJCXZhbHVlX2NvdW50ZXIgPSAwOworCisJcmV0dXJuIHZhbHVlOworfQorCitpbnQgbWluZ3dfcHV0ZW52KGNvbnN0IGNoYXIgKm5hbWV2YWx1ZSkKK3sKKwlpbnQgc2l6ZTsKKwl3Y2hhcl90ICp3aWRlLCAqZXF1YWw7CisJQk9PTCByZXN1bHQ7CisKKwlpZiAoIW5hbWV2YWx1ZSB8fCAhKm5hbWV2YWx1ZSkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gc3RybGVuKG5hbWV2YWx1ZSkgKiAyICsgMTsKKwl3aWRlID0gY2FsbG9jKHNpemUsIHNpemVvZih3Y2hhcl90KSk7CisJaWYgKCF3aWRlKQorCQlkaWUoIk91dCBvZiBtZW1vcnksICh0cmllZCB0byBhbGxvY2F0ZSAldSB3Y2hhcl90J3MpIiwgc2l6ZSk7CisJeHV0ZnRvd2NzKHdpZGUsIG5hbWV2YWx1ZSwgc2l6ZSk7CisJZXF1YWwgPSB3Y3NjaHIod2lkZSwgTCc9Jyk7CisJaWYgKCFlcXVhbCkKKwkJcmVzdWx0ID0gU2V0RW52aXJvbm1lbnRWYXJpYWJsZVcod2lkZSwgTlVMTCk7CisJZWxzZSB7CisJCSplcXVhbCA9IEwnXDAnOworCQlyZXN1bHQgPSBTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyh3aWRlLCBlcXVhbCArIDEpOworCX0KKwlmcmVlKHdpZGUpOworCisJaWYgKCFyZXN1bHQpCisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisKKwlyZXR1cm4gcmVzdWx0ID8gMCA6IC0xOworfQorCitzdGF0aWMgdm9pZCBlbnN1cmVfc29ja2V0X2luaXRpYWxpemF0aW9uKHZvaWQpCit7CisJV1NBREFUQSB3c2E7CisJc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CisKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3c2EpKQorCQlkaWUoInVuYWJsZSB0byBpbml0aWFsaXplIHdpbnNvY2sgc3Vic3lzdGVtLCBlcnJvciAlZCIsCisJCQlXU0FHZXRMYXN0RXJyb3IoKSk7CisKKwlhdGV4aXQoKHZvaWQoKikodm9pZCkpIFdTQUNsZWFudXApOworCWluaXRpYWxpemVkID0gMTsKK30KKworI3VuZGVmIGdldGhvc3RuYW1lCitpbnQgbWluZ3dfZ2V0aG9zdG5hbWUoY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisgICAgZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOworICAgIHJldHVybiBnZXRob3N0bmFtZShuYW1lLCBuYW1lbGVuKTsKK30KKworI3VuZGVmIGdldGhvc3RieW5hbWUKK3N0cnVjdCBob3N0ZW50ICptaW5nd19nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKmhvc3QpCit7CisJZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOworCXJldHVybiBnZXRob3N0YnluYW1lKGhvc3QpOworfQorCisjdW5kZWYgZ2V0YWRkcmluZm8KK2ludCBtaW5nd19nZXRhZGRyaW5mbyhjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOworCXJldHVybiBnZXRhZGRyaW5mbyhub2RlLCBzZXJ2aWNlLCBoaW50cywgcmVzKTsKK30KKworaW50IG1pbmd3X3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworCWludCBzb2NrZmQ7CisJU09DS0VUIHM7CisKKwllbnN1cmVfc29ja2V0X2luaXRpYWxpemF0aW9uKCk7CisJcyA9IFdTQVNvY2tldChkb21haW4sIHR5cGUsIHByb3RvY29sLCBOVUxMLCAwLCAwKTsKKwlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQkvKgorCQkgKiBXU0FHZXRMYXN0RXJyb3IoKSB2YWx1ZXMgYXJlIHJlZ3VsYXIgQlNEIGVycm9yIGNvZGVzCisJCSAqIGJpYXNlZCBieSBXU0FCQVNFRVJSLgorCQkgKiBIb3dldmVyLCBzdHJlcnJvcigpIGRvZXMgbm90IGtub3cgYWJvdXQgbmV0d29ya2luZworCQkgKiBzcGVjaWZpYyBlcnJvcnMsIHdoaWNoIGFyZSB2YWx1ZXMgYmVnaW5uaW5nIGF0IDM4IG9yIHNvLgorCQkgKiBUaGVyZWZvcmUsIHdlIGNob29zZSB0byBsZWF2ZSB0aGUgYmlhc2VkIGVycm9yIGNvZGUKKwkJICogaW4gZXJybm8gc28gdGhhdCBfaWZfIHNvbWVvbmUgbG9va3MgdXAgdGhlIGNvZGUgc29tZXdoZXJlLAorCQkgKiB0aGVuIGl0IGlzIGF0IGxlYXN0IHRoZSBudW1iZXIgdGhhdCBhcmUgdXN1YWxseSBsaXN0ZWQuCisJCSAqLworCQllcnJubyA9IFdTQUdldExhc3RFcnJvcigpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIGNvbnZlcnQgaW50byBhIGZpbGUgZGVzY3JpcHRvciAqLworCWlmICgoc29ja2ZkID0gX29wZW5fb3NmaGFuZGxlKHMsIE9fUkRXUnxPX0JJTkFSWSkpIDwgMCkgeworCQljbG9zZXNvY2tldChzKTsKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gbWFrZSBhIHNvY2tldCBmaWxlIGRlc2NyaXB0b3I6ICVzIiwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJfQorCXJldHVybiBzb2NrZmQ7Cit9CisKKyN1bmRlZiBjb25uZWN0CitpbnQgbWluZ3dfY29ubmVjdChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc3opCit7CisJU09DS0VUIHMgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZCk7CisJcmV0dXJuIGNvbm5lY3Qocywgc2EsIHN6KTsKK30KKworI3VuZGVmIGJpbmQKK2ludCBtaW5nd19iaW5kKGludCBzb2NrZmQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNpemVfdCBzeikKK3sKKwlTT0NLRVQgcyA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkKTsKKwlyZXR1cm4gYmluZChzLCBzYSwgc3opOworfQorCisjdW5kZWYgc2V0c29ja29wdAoraW50IG1pbmd3X3NldHNvY2tvcHQoaW50IHNvY2tmZCwgaW50IGx2bCwgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlTT0NLRVQgcyA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkKTsKKwlyZXR1cm4gc2V0c29ja29wdChzLCBsdmwsIG9wdG5hbWUsIChjb25zdCBjaGFyKilvcHR2YWwsIG9wdGxlbik7Cit9CisKKyN1bmRlZiBzaHV0ZG93bgoraW50IG1pbmd3X3NodXRkb3duKGludCBzb2NrZmQsIGludCBob3cpCit7CisJU09DS0VUIHMgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZCk7CisJcmV0dXJuIHNodXRkb3duKHMsIGhvdyk7Cit9CisKKyN1bmRlZiBsaXN0ZW4KK2ludCBtaW5nd19saXN0ZW4oaW50IHNvY2tmZCwgaW50IGJhY2tsb2cpCit7CisJU09DS0VUIHMgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZCk7CisJcmV0dXJuIGxpc3RlbihzLCBiYWNrbG9nKTsKK30KKworI3VuZGVmIGFjY2VwdAoraW50IG1pbmd3X2FjY2VwdChpbnQgc29ja2ZkMSwgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90ICpzeikKK3sKKwlpbnQgc29ja2ZkMjsKKworCVNPQ0tFVCBzMSA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkMSk7CisJU09DS0VUIHMyID0gYWNjZXB0KHMxLCBzYSwgc3opOworCisJLyogY29udmVydCBpbnRvIGEgZmlsZSBkZXNjcmlwdG9yICovCisJaWYgKChzb2NrZmQyID0gX29wZW5fb3NmaGFuZGxlKHMyLCBPX1JEV1J8T19CSU5BUlkpKSA8IDApIHsKKwkJaW50IGVyciA9IGVycm5vOworCQljbG9zZXNvY2tldChzMik7CisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIG1ha2UgYSBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yOiAlcyIsCisJCQlzdHJlcnJvcihlcnIpKTsKKwl9CisJcmV0dXJuIHNvY2tmZDI7Cit9CisKKyN1bmRlZiByZW5hbWUKK2ludCBtaW5nd19yZW5hbWUoY29uc3QgY2hhciAqcG9sZCwgY29uc3QgY2hhciAqcG5ldykKK3sKKwlEV09SRCBhdHRycywgZ2xlOworCWludCB0cmllcyA9IDA7CisJd2NoYXJfdCB3cG9sZFtNQVhfUEFUSF0sIHdwbmV3W01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod3BvbGQsIHBvbGQpIDwgMCB8fCB4dXRmdG93Y3NfcGF0aCh3cG5ldywgcG5ldykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFRyeSBuYXRpdmUgcmVuYW1lKCkgZmlyc3QgdG8gZ2V0IGVycm5vIHJpZ2h0LgorCSAqIEl0IGlzIGJhc2VkIG9uIE1vdmVGaWxlKCksIHdoaWNoIGNhbm5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMuCisJICovCisJaWYgKCFfd3JlbmFtZSh3cG9sZCwgd3BuZXcpKQorCQlyZXR1cm4gMDsKKwlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQlyZXR1cm4gLTE7CityZXBlYXQ6CisJaWYgKE1vdmVGaWxlRXhXKHdwb2xkLCB3cG5ldywgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORykpCisJCXJldHVybiAwOworCS8qIFRPRE86IHRyYW5zbGF0ZSBtb3JlIGVycm9ycyAqLworCWdsZSA9IEdldExhc3RFcnJvcigpOworCWlmIChnbGUgPT0gRVJST1JfQUNDRVNTX0RFTklFRCAmJgorCSAgICAoYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cod3BuZXcpKSAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgeworCQlpZiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpIHsKKwkJCURXT1JEIGF0dHJzb2xkID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHdwb2xkKTsKKwkJCWlmIChhdHRyc29sZCA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyB8fAorCQkJICAgICEoYXR0cnNvbGQgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKQorCQkJCWVycm5vID0gRUlTRElSOworCQkJZWxzZSBpZiAoIV93cm1kaXIod3BuZXcpKQorCQkJCWdvdG8gcmVwZWF0OworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgJiYKKwkJICAgIFNldEZpbGVBdHRyaWJ1dGVzVyh3cG5ldywgYXR0cnMgJiB+RklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKSB7CisJCQlpZiAoTW92ZUZpbGVFeFcod3BvbGQsIHdwbmV3LCBNT1ZFRklMRV9SRVBMQUNFX0VYSVNUSU5HKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWdsZSA9IEdldExhc3RFcnJvcigpOworCQkJLyogcmV2ZXJ0IGZpbGUgYXR0cmlidXRlcyBvbiBmYWlsdXJlICovCisJCQlTZXRGaWxlQXR0cmlidXRlc1cod3BuZXcsIGF0dHJzKTsKKwkJfQorCX0KKwlpZiAodHJpZXMgPCBBUlJBWV9TSVpFKGRlbGF5KSAmJiBnbGUgPT0gRVJST1JfQUNDRVNTX0RFTklFRCkgeworCQkvKgorCQkgKiBXZSBhc3N1bWUgdGhhdCBzb21lIG90aGVyIHByb2Nlc3MgaGFkIHRoZSBzb3VyY2Ugb3IKKwkJICogZGVzdGluYXRpb24gZmlsZSBvcGVuIGF0IHRoZSB3cm9uZyBtb21lbnQgYW5kIHJldHJ5LgorCQkgKiBJbiBvcmRlciB0byBnaXZlIHRoZSBvdGhlciBwcm9jZXNzIGEgaGlnaGVyIGNoYW5jZSB0bworCQkgKiBjb21wbGV0ZSBpdHMgb3BlcmF0aW9uLCB3ZSBnaXZlIHVwIG91ciB0aW1lIHNsaWNlIG5vdy4KKwkJICogSWYgd2UgaGF2ZSB0byByZXRyeSBhZ2Fpbiwgd2UgZG8gc2xlZXAgYSBiaXQuCisJCSAqLworCQlTbGVlcChkZWxheVt0cmllc10pOworCQl0cmllcysrOworCQlnb3RvIHJlcGVhdDsKKwl9CisJaWYgKGdsZSA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEICYmCisJICAgICAgIGFza195ZXNfbm9faWZfcG9zc2libGUoIlJlbmFtZSBmcm9tICclcycgdG8gJyVzJyBmYWlsZWQuICIKKwkJICAgICAgICJTaG91bGQgSSB0cnkgYWdhaW4/IiwgcG9sZCwgcG5ldykpCisJCWdvdG8gcmVwZWF0OworCisJZXJybm8gPSBFQUNDRVM7CisJcmV0dXJuIC0xOworfQorCisvKgorICogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYWdlc2l6ZSwgYnV0CisgKiB0aGUgYWxsb2NhdGlvbiBncmFudWxhcml0eS4gSWYgZnV0dXJlIFdpbmRvd3Mgc3BlY2lmaWMgZ2l0IGNvZGUKKyAqIG5lZWRzIHRoZSByZWFsIGdldHBhZ2VzaXplIGZ1bmN0aW9uLCB3ZSBuZWVkIHRvIGZpbmQgYW5vdGhlciBzb2x1dGlvbi4KKyAqLworaW50IG1pbmd3X2dldHBhZ2VzaXplKHZvaWQpCit7CisJU1lTVEVNX0lORk8gc2k7CisJR2V0U3lzdGVtSW5mbygmc2kpOworCXJldHVybiBzaS5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKK30KKworLyogU2VlIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNzI0NDM1LmFzcHggKi8KK2VudW0gRVhURU5ERURfTkFNRV9GT1JNQVQgeworCU5hbWVEaXNwbGF5ID0gMywKKwlOYW1lVXNlclByaW5jaXBhbCA9IDgKK307CisKK3N0YXRpYyBjaGFyICpnZXRfZXh0ZW5kZWRfdXNlcl9pbmZvKGVudW0gRVhURU5ERURfTkFNRV9GT1JNQVQgdHlwZSkKK3sKKwlERUNMQVJFX1BST0NfQUREUihzZWN1cjMyLmRsbCwgQk9PTCwgR2V0VXNlck5hbWVFeFcsCisJCWVudW0gRVhURU5ERURfTkFNRV9GT1JNQVQsIExQQ1dTVFIsIFBVTE9ORyk7CisJc3RhdGljIHdjaGFyX3Qgd2J1ZmZlclsxMDI0XTsKKwlEV09SRCBsZW47CisKKwlpZiAoIUlOSVRfUFJPQ19BRERSKEdldFVzZXJOYW1lRXhXKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsZW4gPSBBUlJBWV9TSVpFKHdidWZmZXIpOworCWlmIChHZXRVc2VyTmFtZUV4Vyh0eXBlLCB3YnVmZmVyLCAmbGVuKSkgeworCQljaGFyICpjb252ZXJ0ZWQgPSB4bWFsbG9jKChsZW4gKj0gMykpOworCQlpZiAoeHdjc3RvdXRmKGNvbnZlcnRlZCwgd2J1ZmZlciwgbGVuKSA+PSAwKQorCQkJcmV0dXJuIGNvbnZlcnRlZDsKKwkJZnJlZShjb252ZXJ0ZWQpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitjaGFyICptaW5nd19xdWVyeV91c2VyX2VtYWlsKHZvaWQpCit7CisJcmV0dXJuIGdldF9leHRlbmRlZF91c2VyX2luZm8oTmFtZVVzZXJQcmluY2lwYWwpOworfQorCitzdHJ1Y3QgcGFzc3dkICpnZXRwd3VpZChpbnQgdWlkKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbml0aWFsaXplZDsKKwlzdGF0aWMgY2hhciB1c2VyX25hbWVbMTAwXTsKKwlzdGF0aWMgc3RydWN0IHBhc3N3ZCAqcDsKKwl3Y2hhcl90IGJ1ZlsxMDBdOworCURXT1JEIGxlbjsKKworCWlmIChpbml0aWFsaXplZCkKKwkJcmV0dXJuIHA7CisKKwlsZW4gPSBBUlJBWV9TSVpFKGJ1Zik7CisJaWYgKCFHZXRVc2VyTmFtZVcoYnVmLCAmbGVuKSkgeworCQlpbml0aWFsaXplZCA9IDE7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICh4d2NzdG91dGYodXNlcl9uYW1lLCBidWYsIHNpemVvZih1c2VyX25hbWUpKSA8IDApIHsKKwkJaW5pdGlhbGl6ZWQgPSAxOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwID0geG1hbGxvYyhzaXplb2YoKnApKTsKKwlwLT5wd19uYW1lID0gdXNlcl9uYW1lOworCXAtPnB3X2dlY29zID0gZ2V0X2V4dGVuZGVkX3VzZXJfaW5mbyhOYW1lRGlzcGxheSk7CisJaWYgKCFwLT5wd19nZWNvcykKKwkJcC0+cHdfZ2Vjb3MgPSAidW5rbm93biI7CisJcC0+cHdfZGlyID0gTlVMTDsKKworCWluaXRpYWxpemVkID0gMTsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIEhBTkRMRSB0aW1lcl9ldmVudDsKK3N0YXRpYyBIQU5ETEUgdGltZXJfdGhyZWFkOworc3RhdGljIGludCB0aW1lcl9pbnRlcnZhbDsKK3N0YXRpYyBpbnQgb25lX3Nob3Q7CitzdGF0aWMgc2lnX2hhbmRsZXJfdCB0aW1lcl9mbiA9IFNJR19ERkwsIHNpZ2ludF9mbiA9IFNJR19ERkw7CisKKy8qIFRoZSB0aW1lciB3b3JrcyBsaWtlIHRoaXM6CisgKiBUaGUgdGhyZWFkLCB0aWNrdGFjaygpLCBpcyBhIHRyaXZpYWwgcm91dGluZSB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUKKyAqIG9ubHkgd2FpdHMgdG8gcmVjZWl2ZSB0aGUgc2lnbmFsIHRvIHRlcm1pbmF0ZS4gVGhlIG1haW4gdGhyZWFkIHRlbGxzCisgKiB0aGUgdGhyZWFkIHRvIHRlcm1pbmF0ZSBieSBzZXR0aW5nIHRoZSB0aW1lcl9ldmVudCB0byB0aGUgc2lnbmFsbGVkCisgKiBzdGF0ZS4KKyAqIEJ1dCB0aWNrdGFjaygpIGludGVycnVwdHMgdGhlIHdhaXQgc3RhdGUgYWZ0ZXIgdGhlIHRpbWVyJ3MgaW50ZXJ2YWwKKyAqIGxlbmd0aCB0byBjYWxsIHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHRpY2t0YWNrKHZvaWQgKmR1bW15KQoreworCXdoaWxlIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpbWVyX2V2ZW50LCB0aW1lcl9pbnRlcnZhbCkgPT0gV0FJVF9USU1FT1VUKSB7CisJCW1pbmd3X3JhaXNlKFNJR0FMUk0pOworCQlpZiAob25lX3Nob3QpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdGltZXJfdGhyZWFkKHZvaWQpCit7CisJdGltZXJfZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCWlmICh0aW1lcl9ldmVudCkgeworCQl0aW1lcl90aHJlYWQgPSAoSEFORExFKSBfYmVnaW50aHJlYWRleChOVUxMLCAwLCB0aWNrdGFjaywgTlVMTCwgMCwgTlVMTCk7CisJCWlmICghdGltZXJfdGhyZWFkICkKKwkJCXJldHVybiBlcnJubyA9IEVOT01FTSwKKwkJCQllcnJvcigiY2Fubm90IHN0YXJ0IHRpbWVyIHRocmVhZCIpOworCX0gZWxzZQorCQlyZXR1cm4gZXJybm8gPSBFTk9NRU0sCisJCQllcnJvcigiY2Fubm90IGFsbG9jYXRlIHJlc291cmNlcyBmb3IgdGltZXIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RvcF90aW1lcl90aHJlYWQodm9pZCkKK3sKKwlpZiAodGltZXJfZXZlbnQpCisJCVNldEV2ZW50KHRpbWVyX2V2ZW50KTsJLyogdGVsbCB0aHJlYWQgdG8gdGVybWluYXRlICovCisJaWYgKHRpbWVyX3RocmVhZCkgeworCQlpbnQgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpbWVyX3RocmVhZCwgMTAwMDApOworCQlpZiAocmMgPT0gV0FJVF9USU1FT1VUKQorCQkJZXJyb3IoInRpbWVyIHRocmVhZCBkaWQgbm90IHRlcm1pbmF0ZSB0aW1lbHkiKTsKKwkJZWxzZSBpZiAocmMgIT0gV0FJVF9PQkpFQ1RfMCkKKwkJCWVycm9yKCJ3YWl0aW5nIGZvciB0aW1lciB0aHJlYWQgZmFpbGVkOiAlbHUiLAorCQkJICAgICAgR2V0TGFzdEVycm9yKCkpOworCQlDbG9zZUhhbmRsZSh0aW1lcl90aHJlYWQpOworCX0KKwlpZiAodGltZXJfZXZlbnQpCisJCUNsb3NlSGFuZGxlKHRpbWVyX2V2ZW50KTsKKwl0aW1lcl9ldmVudCA9IE5VTEw7CisJdGltZXJfdGhyZWFkID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfdGltZXZhbF9lcShjb25zdCBzdHJ1Y3QgdGltZXZhbCAqaTEsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICppMikKK3sKKwlyZXR1cm4gaTEtPnR2X3NlYyA9PSBpMi0+dHZfc2VjICYmIGkxLT50dl91c2VjID09IGkyLT50dl91c2VjOworfQorCitpbnQgc2V0aXRpbWVyKGludCB0eXBlLCBzdHJ1Y3QgaXRpbWVydmFsICppbiwgc3RydWN0IGl0aW1lcnZhbCAqb3V0KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGltZXZhbCB6ZXJvOworCXN0YXRpYyBpbnQgYXRleGl0X2RvbmU7CisKKwlpZiAob3V0ICE9IE5VTEwpCisJCXJldHVybiBlcnJubyA9IEVJTlZBTCwKKwkJCWVycm9yKCJzZXRpdGltZXIgcGFyYW0gMyAhPSBOVUxMIG5vdCBpbXBsZW1lbnRlZCIpOworCWlmICghaXNfdGltZXZhbF9lcSgmaW4tPml0X2ludGVydmFsLCAmemVybykgJiYKKwkgICAgIWlzX3RpbWV2YWxfZXEoJmluLT5pdF9pbnRlcnZhbCwgJmluLT5pdF92YWx1ZSkpCisJCXJldHVybiBlcnJubyA9IEVJTlZBTCwKKwkJCWVycm9yKCJzZXRpdGltZXI6IGl0X2ludGVydmFsIG11c3QgYmUgemVybyBvciBlcSBpdF92YWx1ZSIpOworCisJaWYgKHRpbWVyX3RocmVhZCkKKwkJc3RvcF90aW1lcl90aHJlYWQoKTsKKworCWlmIChpc190aW1ldmFsX2VxKCZpbi0+aXRfdmFsdWUsICZ6ZXJvKSAmJgorCSAgICBpc190aW1ldmFsX2VxKCZpbi0+aXRfaW50ZXJ2YWwsICZ6ZXJvKSkKKwkJcmV0dXJuIDA7CisKKwl0aW1lcl9pbnRlcnZhbCA9IGluLT5pdF92YWx1ZS50dl9zZWMgKiAxMDAwICsgaW4tPml0X3ZhbHVlLnR2X3VzZWMgLyAxMDAwOworCW9uZV9zaG90ID0gaXNfdGltZXZhbF9lcSgmaW4tPml0X2ludGVydmFsLCAmemVybyk7CisJaWYgKCFhdGV4aXRfZG9uZSkgeworCQlhdGV4aXQoc3RvcF90aW1lcl90aHJlYWQpOworCQlhdGV4aXRfZG9uZSA9IDE7CisJfQorCXJldHVybiBzdGFydF90aW1lcl90aHJlYWQoKTsKK30KKworaW50IHNpZ2FjdGlvbihpbnQgc2lnLCBzdHJ1Y3Qgc2lnYWN0aW9uICppbiwgc3RydWN0IHNpZ2FjdGlvbiAqb3V0KQoreworCWlmIChzaWcgIT0gU0lHQUxSTSkKKwkJcmV0dXJuIGVycm5vID0gRUlOVkFMLAorCQkJZXJyb3IoInNpZ2FjdGlvbiBvbmx5IGltcGxlbWVudGVkIGZvciBTSUdBTFJNIik7CisJaWYgKG91dCAhPSBOVUxMKQorCQlyZXR1cm4gZXJybm8gPSBFSU5WQUwsCisJCQllcnJvcigic2lnYWN0aW9uOiBwYXJhbSAzICE9IE5VTEwgbm90IGltcGxlbWVudGVkIik7CisKKwl0aW1lcl9mbiA9IGluLT5zYV9oYW5kbGVyOworCXJldHVybiAwOworfQorCisjdW5kZWYgc2lnbmFsCitzaWdfaGFuZGxlcl90IG1pbmd3X3NpZ25hbChpbnQgc2lnLCBzaWdfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJc2lnX2hhbmRsZXJfdCBvbGQ7CisKKwlzd2l0Y2ggKHNpZykgeworCWNhc2UgU0lHQUxSTToKKwkJb2xkID0gdGltZXJfZm47CisJCXRpbWVyX2ZuID0gaGFuZGxlcjsKKwkJYnJlYWs7CisKKwljYXNlIFNJR0lOVDoKKwkJb2xkID0gc2lnaW50X2ZuOworCQlzaWdpbnRfZm4gPSBoYW5kbGVyOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiBzaWduYWwoc2lnLCBoYW5kbGVyKTsKKwl9CisKKwlyZXR1cm4gb2xkOworfQorCisjdW5kZWYgcmFpc2UKK2ludCBtaW5nd19yYWlzZShpbnQgc2lnKQoreworCXN3aXRjaCAoc2lnKSB7CisJY2FzZSBTSUdBTFJNOgorCQlpZiAodGltZXJfZm4gPT0gU0lHX0RGTCkgeworCQkJaWYgKGlzYXR0eShTVERFUlJfRklMRU5PKSkKKwkJCQlmcHV0cygiQWxhcm0gY2xvY2tcbiIsIHN0ZGVycik7CisJCQlleGl0KDEyOCArIFNJR0FMUk0pOworCQl9IGVsc2UgaWYgKHRpbWVyX2ZuICE9IFNJR19JR04pCisJCQl0aW1lcl9mbihTSUdBTFJNKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNJR0lOVDoKKwkJaWYgKHNpZ2ludF9mbiA9PSBTSUdfREZMKQorCQkJZXhpdCgxMjggKyBTSUdJTlQpOworCQllbHNlIGlmIChzaWdpbnRfZm4gIT0gU0lHX0lHTikKKwkJCXNpZ2ludF9mbihTSUdJTlQpOworCQlyZXR1cm4gMDsKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisJY2FzZSBTSUdJTEw6CisJY2FzZSBTSUdGUEU6CisJY2FzZSBTSUdTRUdWOgorCWNhc2UgU0lHVEVSTToKKwljYXNlIFNJR0JSRUFLOgorCWNhc2UgU0lHQUJSVDoKKwljYXNlIFNJR0FCUlRfQ09NUEFUOgorCQkvKgorCQkgKiBUaGUgPHNpZ25hbC5oPiBoZWFkZXIgaW4gdGhlIE1TIEMgUnVudGltZSBkZWZpbmVzIDggc2lnbmFscworCQkgKiBhcyBiZWluZyBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtLiBBbnl0aGluZyBlbHNlIGNhdXNlcyBhbgorCQkgKiAiSW52YWxpZCBzaWduYWwgb3IgZXJyb3IiICh3aGljaCBpbiBERUJVRyBidWlsZHMgY2F1c2VzIHRoZQorCQkgKiBBYm9ydC9SZXRyeS9JZ25vcmUgZGlhbG9nKS4gV2UgYnktcGFzcyB0aGUgQ1JUIGZvciB0aGluZ3Mgd2UKKwkJICogYWxyZWFkeSBrbm93IHdpbGwgZmFpbC4KKwkJICovCisJCXJldHVybiByYWlzZShzaWcpOworCWRlZmF1bHQ6CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisKKyNlbHNlCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gcmFpc2Uoc2lnKTsKKworI2VuZGlmCisKKwl9Cit9CisKK2ludCBsaW5rKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpCit7CisJd2NoYXJfdCB3b2xkcGF0aFtNQVhfUEFUSF0sIHduZXdwYXRoW01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod29sZHBhdGgsIG9sZHBhdGgpIDwgMCB8fAorCQl4dXRmdG93Y3NfcGF0aCh3bmV3cGF0aCwgbmV3cGF0aCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIUNyZWF0ZUhhcmRMaW5rVyh3bmV3cGF0aCwgd29sZHBhdGgsIE5VTEwpKSB7CisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3BpZF90IHdhaXRwaWQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgaW50IG9wdGlvbnMpCit7CisJSEFORExFIGggPSBPcGVuUHJvY2VzcyhTWU5DSFJPTklaRSB8IFBST0NFU1NfUVVFUllfSU5GT1JNQVRJT04sCisJICAgIEZBTFNFLCBwaWQpOworCWlmICghaCkgeworCQllcnJubyA9IEVDSElMRDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwaWQgPiAwICYmIG9wdGlvbnMgJiBXTk9IQU5HKSB7CisJCWlmIChXQUlUX09CSkVDVF8wICE9IFdhaXRGb3JTaW5nbGVPYmplY3QoaCwgMCkpIHsKKwkJCUNsb3NlSGFuZGxlKGgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJb3B0aW9ucyAmPSB+V05PSEFORzsKKwl9CisKKwlpZiAob3B0aW9ucyA9PSAwKSB7CisJCXN0cnVjdCBwaW5mb190ICoqcHBpbmZvOworCQlpZiAoV2FpdEZvclNpbmdsZU9iamVjdChoLCBJTkZJTklURSkgIT0gV0FJVF9PQkpFQ1RfMCkgeworCQkJQ2xvc2VIYW5kbGUoaCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChzdGF0dXMpCisJCQlHZXRFeGl0Q29kZVByb2Nlc3MoaCwgKExQRFdPUkQpc3RhdHVzKTsKKworCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmcGluZm9fY3MpOworCisJCXBwaW5mbyA9ICZwaW5mbzsKKwkJd2hpbGUgKCpwcGluZm8pIHsKKwkJCXN0cnVjdCBwaW5mb190ICppbmZvID0gKnBwaW5mbzsKKwkJCWlmIChpbmZvLT5waWQgPT0gcGlkKSB7CisJCQkJQ2xvc2VIYW5kbGUoaW5mby0+cHJvYyk7CisJCQkJKnBwaW5mbyA9IGluZm8tPm5leHQ7CisJCQkJZnJlZShpbmZvKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBwaW5mbyA9ICZpbmZvLT5uZXh0OworCQl9CisKKwkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJnBpbmZvX2NzKTsKKworCQlDbG9zZUhhbmRsZShoKTsKKwkJcmV0dXJuIHBpZDsKKwl9CisJQ2xvc2VIYW5kbGUoaCk7CisKKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCB4dXRmdG93Y3NuKHdjaGFyX3QgKndjcywgY29uc3QgY2hhciAqdXRmcywgc2l6ZV90IHdjc2xlbiwgaW50IHV0ZmxlbikKK3sKKwlpbnQgdXBvcyA9IDAsIHdwb3MgPSAwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnV0ZiA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikgdXRmczsKKwlpZiAoIXV0ZiB8fCAhd2NzIHx8IHdjc2xlbiA8IDEpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisJLyogcmVzZXJ2ZSBzcGFjZSBmb3IgXDAgKi8KKwl3Y3NsZW4tLTsKKwlpZiAodXRmbGVuIDwgMCkKKwkJdXRmbGVuID0gSU5UX01BWDsKKworCXdoaWxlICh1cG9zIDwgdXRmbGVuKSB7CisJCWludCBjID0gdXRmW3Vwb3MrK10gJiAweGZmOworCQlpZiAodXRmbGVuID09IElOVF9NQVggJiYgYyA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHdwb3MgPj0gd2NzbGVuKSB7CisJCQl3Y3Nbd3Bvc10gPSAwOworCQkJZXJybm8gPSBFUkFOR0U7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoYyA8IDB4ODApIHsKKwkJCS8qIEFTQ0lJICovCisJCQl3Y3Nbd3BvcysrXSA9IGM7CisJCX0gZWxzZSBpZiAoYyA+PSAweGMyICYmIGMgPCAweGUwICYmIHVwb3MgPCB1dGZsZW4gJiYKKwkJCQkodXRmW3Vwb3NdICYgMHhjMCkgPT0gMHg4MCkgeworCQkJLyogMi1ieXRlIHV0Zi04ICovCisJCQljID0gKChjICYgMHgxZikgPDwgNik7CisJCQljIHw9ICh1dGZbdXBvcysrXSAmIDB4M2YpOworCQkJd2NzW3dwb3MrK10gPSBjOworCQl9IGVsc2UgaWYgKGMgPj0gMHhlMCAmJiBjIDwgMHhmMCAmJiB1cG9zICsgMSA8IHV0ZmxlbiAmJgorCQkJCSEoYyA9PSAweGUwICYmIHV0Zlt1cG9zXSA8IDB4YTApICYmIC8qIG92ZXItbG9uZyBlbmNvZGluZyAqLworCQkJCSh1dGZbdXBvc10gJiAweGMwKSA9PSAweDgwICYmCisJCQkJKHV0Zlt1cG9zICsgMV0gJiAweGMwKSA9PSAweDgwKSB7CisJCQkvKiAzLWJ5dGUgdXRmLTggKi8KKwkJCWMgPSAoKGMgJiAweDBmKSA8PCAxMik7CisJCQljIHw9ICgodXRmW3Vwb3MrK10gJiAweDNmKSA8PCA2KTsKKwkJCWMgfD0gKHV0Zlt1cG9zKytdICYgMHgzZik7CisJCQl3Y3Nbd3BvcysrXSA9IGM7CisJCX0gZWxzZSBpZiAoYyA+PSAweGYwICYmIGMgPCAweGY1ICYmIHVwb3MgKyAyIDwgdXRmbGVuICYmCisJCQkJd3BvcyArIDEgPCB3Y3NsZW4gJiYKKwkJCQkhKGMgPT0gMHhmMCAmJiB1dGZbdXBvc10gPCAweDkwKSAmJiAvKiBvdmVyLWxvbmcgZW5jb2RpbmcgKi8KKwkJCQkhKGMgPT0gMHhmNCAmJiB1dGZbdXBvc10gPj0gMHg5MCkgJiYgLyogPiBcdTEwZmZmZiAqLworCQkJCSh1dGZbdXBvc10gJiAweGMwKSA9PSAweDgwICYmCisJCQkJKHV0Zlt1cG9zICsgMV0gJiAweGMwKSA9PSAweDgwICYmCisJCQkJKHV0Zlt1cG9zICsgMl0gJiAweGMwKSA9PSAweDgwKSB7CisJCQkvKiA0LWJ5dGUgdXRmLTg6IGNvbnZlcnQgdG8gXHVkOHh4IFx1ZGN4eCBzdXJyb2dhdGUgcGFpciAqLworCQkJYyA9ICgoYyAmIDB4MDcpIDw8IDE4KTsKKwkJCWMgfD0gKCh1dGZbdXBvcysrXSAmIDB4M2YpIDw8IDEyKTsKKwkJCWMgfD0gKCh1dGZbdXBvcysrXSAmIDB4M2YpIDw8IDYpOworCQkJYyB8PSAodXRmW3Vwb3MrK10gJiAweDNmKTsKKwkJCWMgLT0gMHgxMDAwMDsKKwkJCXdjc1t3cG9zKytdID0gMHhkODAwIHwgKGMgPj4gMTApOworCQkJd2NzW3dwb3MrK10gPSAweGRjMDAgfCAoYyAmIDB4M2ZmKTsKKwkJfSBlbHNlIGlmIChjID49IDB4YTApIHsKKwkJCS8qIGludmFsaWQgdXRmLTggYnl0ZSwgcHJpbnRhYmxlIHVuaWNvZGUgY2hhcjogY29udmVydCAxOjEgKi8KKwkJCXdjc1t3cG9zKytdID0gYzsKKwkJfSBlbHNlIHsKKwkJCS8qIGludmFsaWQgdXRmLTggYnl0ZSwgbm9uLXByaW50YWJsZSB1bmljb2RlOiBjb252ZXJ0IHRvIGhleCAqLworCQkJc3RhdGljIGNvbnN0IGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwkJCXdjc1t3cG9zKytdID0gaGV4W2MgPj4gNF07CisJCQlpZiAod3BvcyA8IHdjc2xlbikKKwkJCQl3Y3Nbd3BvcysrXSA9IGhleFtjICYgMHgwZl07CisJCX0KKwl9CisJd2NzW3dwb3NdID0gMDsKKwlyZXR1cm4gd3BvczsKK30KKworaW50IHh3Y3N0b3V0ZihjaGFyICp1dGYsIGNvbnN0IHdjaGFyX3QgKndjcywgc2l6ZV90IHV0ZmxlbikKK3sKKwlpZiAoIXdjcyB8fCAhdXRmIHx8IHV0ZmxlbiA8IDEpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisJdXRmbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCB3Y3MsIC0xLCB1dGYsIHV0ZmxlbiwgTlVMTCwgTlVMTCk7CisJaWYgKHV0ZmxlbikKKwkJcmV0dXJuIHV0ZmxlbiAtIDE7CisJZXJybm8gPSBFUkFOR0U7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF93aW5kb3dzX2Vudmlyb25tZW50KHZvaWQpCit7CisJY2hhciAqdG1wID0gZ2V0ZW52KCJUTVBESVIiKTsKKworCS8qIG9uIFdpbmRvd3MgaXQgaXMgVE1QIGFuZCBURU1QICovCisJaWYgKCF0bXApIHsKKwkJaWYgKCEodG1wID0gZ2V0ZW52KCJUTVAiKSkpCisJCQl0bXAgPSBnZXRlbnYoIlRFTVAiKTsKKwkJaWYgKHRtcCkgeworCQkJc2V0ZW52KCJUTVBESVIiLCB0bXAsIDEpOworCQkJdG1wID0gZ2V0ZW52KCJUTVBESVIiKTsKKwkJfQorCX0KKworCWlmICh0bXApIHsKKwkJLyoKKwkJICogQ29udmVydCBhbGwgZGlyIHNlcGFyYXRvcnMgdG8gZm9yd2FyZCBzbGFzaGVzLAorCQkgKiB0byBoZWxwIHNoZWxsIGNvbW1hbmRzIGNhbGxlZCBmcm9tIHRoZSBHaXQKKwkJICogZXhlY3V0YWJsZSAoYnkgbm90IG1pc3Rha2luZyB0aGUgZGlyIHNlcGFyYXRvcnMKKwkJICogZm9yIGVzY2FwZSBjaGFyYWN0ZXJzKS4KKwkJICovCisJCWNvbnZlcnRfc2xhc2hlcyh0bXApOworCX0KKworCS8qIHNpbXVsYXRlIFRFUk0gdG8gZW5hYmxlIGF1dG8tY29sb3IgKHNlZSBjb2xvci5jKSAqLworCWlmICghZ2V0ZW52KCJURVJNIikpCisJCXNldGVudigiVEVSTSIsICJjeWd3aW4iLCAxKTsKKworCS8qIGNhbGN1bGF0ZSBIT01FIGlmIG5vdCBzZXQgKi8KKwlpZiAoIWdldGVudigiSE9NRSIpKSB7CisJCS8qCisJCSAqIHRyeSAkSE9NRURSSVZFJEhPTUVQQVRIIC0gdGhlIGhvbWUgc2hhcmUgbWF5IGJlIGEgbmV0d29yaworCQkgKiBsb2NhdGlvbiwgdGh1cyBhbHNvIGNoZWNrIGlmIHRoZSBwYXRoIGV4aXN0cyAoaS5lLiBpcyBub3QKKwkJICogZGlzY29ubmVjdGVkKQorCQkgKi8KKwkJaWYgKCh0bXAgPSBnZXRlbnYoIkhPTUVEUklWRSIpKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgdG1wKTsKKwkJCWlmICgodG1wID0gZ2V0ZW52KCJIT01FUEFUSCIpKSkgeworCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgdG1wKTsKKwkJCQlpZiAoaXNfZGlyZWN0b3J5KGJ1Zi5idWYpKQorCQkJCQlzZXRlbnYoIkhPTUUiLCBidWYuYnVmLCAxKTsKKwkJCQllbHNlCisJCQkJCXRtcCA9IE5VTEw7IC8qIHVzZSAkVVNFUlBST0ZJTEUgKi8KKwkJCX0KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQl9CisJCS8qIHVzZSAkVVNFUlBST0ZJTEUgaWYgdGhlIGhvbWUgc2hhcmUgaXMgbm90IGF2YWlsYWJsZSAqLworCQlpZiAoIXRtcCAmJiAodG1wID0gZ2V0ZW52KCJVU0VSUFJPRklMRSIpKSkKKwkJCXNldGVudigiSE9NRSIsIHRtcCwgMSk7CisJfQorfQorCitpbnQgaXNfdmFsaWRfd2luMzJfcGF0aChjb25zdCBjaGFyICpwYXRoLCBpbnQgYWxsb3dfbGl0ZXJhbF9udWwpCit7CisJY29uc3QgY2hhciAqcCA9IHBhdGg7CisJaW50IHByZWNlZGluZ19zcGFjZV9vcl9wZXJpb2QgPSAwLCBpID0gMCwgcGVyaW9kcyA9IDA7CisKKwlpZiAoIXByb3RlY3RfbnRmcykKKwkJcmV0dXJuIDE7CisKKwlza2lwX2Rvc19kcml2ZV9wcmVmaXgoKGNoYXIgKiopJnBhdGgpOworCWdvdG8gc2VnbWVudF9zdGFydDsKKworCWZvciAoOzspIHsKKwkJY2hhciBjID0gKihwYXRoKyspOworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnXDAnOgorCQljYXNlICcvJzogY2FzZSAnXFwnOgorCQkJLyogY2Fubm90IGVuZCBpbiBgIGAgb3IgYC5gLCBleGNlcHQgZm9yIGAuYCBhbmQgYC4uYCAqLworCQkJaWYgKHByZWNlZGluZ19zcGFjZV9vcl9wZXJpb2QgJiYKKwkJCSAgICAoaSAhPSBwZXJpb2RzIHx8IHBlcmlvZHMgPiAyKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmICghYykKKwkJCQlyZXR1cm4gMTsKKworCQkJaSA9IHBlcmlvZHMgPSBwcmVjZWRpbmdfc3BhY2Vfb3JfcGVyaW9kID0gMDsKKworc2VnbWVudF9zdGFydDoKKwkJCXN3aXRjaCAoKnBhdGgpIHsKKwkJCWNhc2UgJ2EnOiBjYXNlICdBJzogLyogQVVYICovCisJCQkJaWYgKCgoYyA9IHBhdGhbKytpXSkgIT0gJ3UnICYmIGMgIT0gJ1UnKSB8fAorCQkJCSAgICAoKGMgPSBwYXRoWysraV0pICE9ICd4JyAmJiBjICE9ICdYJykpIHsKK25vdF9hX3Jlc2VydmVkX25hbWU6CisJCQkJCXBhdGggKz0gaTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnYyc6IGNhc2UgJ0MnOiAvKiBDT008Tj4sIENPTiwgQ09OSU4kLCBDT05PVVQkICovCisJCQkJaWYgKChjID0gcGF0aFsrK2ldKSAhPSAnbycgJiYgYyAhPSAnTycpCisJCQkJCWdvdG8gbm90X2FfcmVzZXJ2ZWRfbmFtZTsKKwkJCQljID0gcGF0aFsrK2ldOworCQkJCWlmIChjID09ICdtJyB8fCBjID09ICdNJykgeyAvKiBDT008Tj4gKi8KKwkJCQkJaWYgKCFpc2RpZ2l0KHBhdGhbKytpXSkpCisJCQkJCQlnb3RvIG5vdF9hX3Jlc2VydmVkX25hbWU7CisJCQkJfSBlbHNlIGlmIChjID09ICduJyB8fCBjID09ICdOJykgeyAvKiBDT04gKi8KKwkJCQkJYyA9IHBhdGhbaSArIDFdOworCQkJCQlpZiAoKGMgPT0gJ2knIHx8IGMgPT0gJ0knKSAmJgorCQkJCQkgICAgKChjID0gcGF0aFtpICsgMl0pID09ICduJyB8fAorCQkJCQkgICAgIGMgPT0gJ04nKSAmJgorCQkJCQkgICAgcGF0aFtpICsgM10gPT0gJyQnKQorCQkJCQkJaSArPSAzOyAvKiBDT05JTiQgKi8KKwkJCQkJZWxzZSBpZiAoKGMgPT0gJ28nIHx8IGMgPT0gJ08nKSAmJgorCQkJCQkJICgoYyA9IHBhdGhbaSArIDJdKSA9PSAndScgfHwKKwkJCQkJCSAgYyA9PSAnVScpICYmCisJCQkJCQkgKChjID0gcGF0aFtpICsgM10pID09ICd0JyB8fAorCQkJCQkJICBjID09ICdUJykgJiYKKwkJCQkJCSBwYXRoW2kgKyA0XSA9PSAnJCcpCisJCQkJCQlpICs9IDQ7IC8qIENPTk9VVCQgKi8KKwkJCQl9IGVsc2UKKwkJCQkJZ290byBub3RfYV9yZXNlcnZlZF9uYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnbCc6IGNhc2UgJ0wnOiAvKiBMUFQ8Tj4gKi8KKwkJCQlpZiAoKChjID0gcGF0aFsrK2ldKSAhPSAncCcgJiYgYyAhPSAnUCcpIHx8CisJCQkJICAgICgoYyA9IHBhdGhbKytpXSkgIT0gJ3QnICYmIGMgIT0gJ1QnKSB8fAorCQkJCSAgICAhaXNkaWdpdChwYXRoWysraV0pKQorCQkJCQlnb3RvIG5vdF9hX3Jlc2VydmVkX25hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzogY2FzZSAnTic6IC8qIE5VTCAqLworCQkJCWlmICgoKGMgPSBwYXRoWysraV0pICE9ICd1JyAmJiBjICE9ICdVJykgfHwKKwkJCQkgICAgKChjID0gcGF0aFsrK2ldKSAhPSAnbCcgJiYgYyAhPSAnTCcpIHx8CisJCQkJICAgIChhbGxvd19saXRlcmFsX251bCAmJgorCQkJCSAgICAgIXBhdGhbaSArIDFdICYmIHAgPT0gcGF0aCkpCisJCQkJCWdvdG8gbm90X2FfcmVzZXJ2ZWRfbmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3AnOiBjYXNlICdQJzogLyogUFJOICovCisJCQkJaWYgKCgoYyA9IHBhdGhbKytpXSkgIT0gJ3InICYmIGMgIT0gJ1InKSB8fAorCQkJCSAgICAoKGMgPSBwYXRoWysraV0pICE9ICduJyAmJiBjICE9ICdOJykpCisJCQkJCWdvdG8gbm90X2FfcmVzZXJ2ZWRfbmFtZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBTbyBmYXIsIHRoaXMgbG9va3MgbGlrZSBhIHJlc2VydmVkIG5hbWUuIExldCdzIHNlZQorCQkJICogd2hldGhlciBpdCBhY3R1YWxseSBpcyBvbmU6IHRyYWlsaW5nIHNwYWNlcywgYSBmaWxlCisJCQkgKiBleHRlbnNpb24sIG9yIGFuIE5URlMgQWx0ZXJuYXRlIERhdGEgU3RyZWFtIGRvIG5vdAorCQkJICogbWF0dGVyLCB0aGUgbmFtZSBpcyBzdGlsbCByZXNlcnZlZCBpZiBhbnkgb2YgdGhvc2UKKwkJCSAqIGZvbGxvdyBpbW1lZGlhdGVseSBhZnRlciB0aGUgYWN0dWFsIG5hbWUuCisJCQkgKi8KKwkJCWkrKzsKKwkJCWlmIChwYXRoW2ldID09ICcgJykgeworCQkJCXByZWNlZGluZ19zcGFjZV9vcl9wZXJpb2QgPSAxOworCQkJCXdoaWxlIChwYXRoWysraV0gPT0gJyAnKQorCQkJCQk7IC8qIHNraXAgYWxsIHNwYWNlcyAqLworCQkJfQorCisJCQljID0gcGF0aFtpXTsKKwkJCWlmIChjICYmIGMgIT0gJy4nICYmIGMgIT0gJzonICYmIGMgIT0gJy8nICYmIGMgIT0gJ1xcJykKKwkJCQlnb3RvIG5vdF9hX3Jlc2VydmVkX25hbWU7CisKKwkJCS8qIGNvbnRhaW5zIHJlc2VydmVkIG5hbWUgKi8KKwkJCXJldHVybiAwOworCQljYXNlICcuJzoKKwkJCXBlcmlvZHMrKzsKKwkJCS8qIGZhbGx0aHJ1ICovCisJCWNhc2UgJyAnOgorCQkJcHJlY2VkaW5nX3NwYWNlX29yX3BlcmlvZCA9IDE7CisJCQlpKys7CisJCQljb250aW51ZTsKKwkJY2FzZSAnOic6IC8qIERPUyBkcml2ZSBwcmVmaXggd2FzIGFscmVhZHkgc2tpcHBlZCAqLworCQljYXNlICc8JzogY2FzZSAnPic6IGNhc2UgJyInOiBjYXNlICd8JzogY2FzZSAnPyc6IGNhc2UgJyonOgorCQkJLyogaWxsZWdhbCBjaGFyYWN0ZXIgKi8KKwkJCXJldHVybiAwOworCQlkZWZhdWx0OgorCQkJaWYgKGMgPiAnXDAnICYmIGMgPCAnXHgyMCcpCisJCQkJLyogaWxsZWdhbCBjaGFyYWN0ZXIgKi8KKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlwcmVjZWRpbmdfc3BhY2Vfb3JfcGVyaW9kID0gMDsKKwkJaSsrOworCX0KK30KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKQorLyoKKyAqIERpc2FibGUgTVNWQ1JUIGNvbW1hbmQgbGluZSB3aWxkY2FyZCBleHBhbnNpb24gKF9fZ2V0bWFpbmFyZ3MgY2FsbGVkIGZyb20KKyAqIG1pbmd3IHN0YXJ0dXAgY29kZSwgc2VlIGluaXQuYyBpbiBtaW5ndyBydW50aW1lKS4KKyAqLworaW50IF9DUlRfZ2xvYiA9IDA7CisjZW5kaWYKKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX3N0YXJ0dXAodm9pZCkKK3sKKwlmcHV0cygiZmF0YWw6IG5vdCBlbm91Z2ggbWVtb3J5IGZvciBpbml0aWFsaXphdGlvbiIsIHN0ZGVycik7CisJZXhpdCgxMjgpOworfQorCitzdGF0aWMgdm9pZCAqbWFsbG9jX3N0YXJ0dXAoc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcmVzdWx0ID0gbWFsbG9jKHNpemUpOworCWlmICghcmVzdWx0KQorCQlkaWVfc3RhcnR1cCgpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjaGFyICp3Y3N0b3V0ZmR1cF9zdGFydHVwKGNoYXIgKmJ1ZmZlciwgY29uc3Qgd2NoYXJfdCAqd2NzLCBzaXplX3QgbGVuKQoreworCWxlbiA9IHh3Y3N0b3V0ZihidWZmZXIsIHdjcywgbGVuKSArIDE7CisJcmV0dXJuIG1lbWNweShtYWxsb2Nfc3RhcnR1cChsZW4pLCBidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIG1heWJlX3JlZGlyZWN0X3N0ZF9oYW5kbGUoY29uc3Qgd2NoYXJfdCAqa2V5LCBEV09SRCBzdGRfaWQsIGludCBmZCwKKwkJCQkgICAgICBEV09SRCBkZXNpcmVkX2FjY2VzcywgRFdPUkQgZmxhZ3MpCit7CisJRFdPUkQgY3JlYXRlX2ZsYWcgPSBmZCA/IE9QRU5fQUxXQVlTIDogT1BFTl9FWElTVElORzsKKwl3Y2hhcl90IGJ1ZltNQVhfUEFUSF07CisJRFdPUkQgbWF4ID0gQVJSQVlfU0laRShidWYpOworCUhBTkRMRSBoYW5kbGU7CisJRFdPUkQgcmV0ID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBidWYsIG1heCk7CisKKwlpZiAoIXJldCB8fCByZXQgPj0gbWF4KQorCQlyZXR1cm47CisKKwkvKiBtYWtlIHN1cmUgdGhpcyBkb2VzIG5vdCBsZWFrIGludG8gY2hpbGQgcHJvY2Vzc2VzICovCisJU2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBOVUxMKTsKKwlpZiAoIXdjc2NtcChidWYsIEwib2ZmIikpIHsKKwkJY2xvc2UoZmQpOworCQloYW5kbGUgPSBHZXRTdGRIYW5kbGUoc3RkX2lkKTsKKwkJaWYgKGhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJCUNsb3NlSGFuZGxlKGhhbmRsZSk7CisJCXJldHVybjsKKwl9CisJaWYgKHN0ZF9pZCA9PSBTVERfRVJST1JfSEFORExFICYmICF3Y3NjbXAoYnVmLCBMIjI+JjEiKSkgeworCQloYW5kbGUgPSBHZXRTdGRIYW5kbGUoU1REX09VVFBVVF9IQU5ETEUpOworCQlpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCQljbG9zZShmZCk7CisJCQloYW5kbGUgPSBHZXRTdGRIYW5kbGUoc3RkX2lkKTsKKwkJCWlmIChoYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCQkJQ2xvc2VIYW5kbGUoaGFuZGxlKTsKKwkJfSBlbHNlIHsKKwkJCWludCBuZXdfZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KWhhbmRsZSwgT19CSU5BUlkpOworCQkJU2V0U3RkSGFuZGxlKHN0ZF9pZCwgaGFuZGxlKTsKKwkJCWR1cDIobmV3X2ZkLCBmZCk7CisJCQkvKiBkbyAqbm90KiBjbG9zZSB0aGUgbmV3X2ZkOiB0aGF0IHdvdWxkIGNsb3NlIHN0ZG91dCAqLworCQl9CisJCXJldHVybjsKKwl9CisJaGFuZGxlID0gQ3JlYXRlRmlsZVcoYnVmLCBkZXNpcmVkX2FjY2VzcywgMCwgTlVMTCwgY3JlYXRlX2ZsYWcsCisJCQkgICAgIGZsYWdzLCBOVUxMKTsKKwlpZiAoaGFuZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCWludCBuZXdfZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KWhhbmRsZSwgT19CSU5BUlkpOworCQlTZXRTdGRIYW5kbGUoc3RkX2lkLCBoYW5kbGUpOworCQlkdXAyKG5ld19mZCwgZmQpOworCQljbG9zZShuZXdfZmQpOworCX0KK30KKworc3RhdGljIHZvaWQgbWF5YmVfcmVkaXJlY3Rfc3RkX2hhbmRsZXModm9pZCkKK3sKKwltYXliZV9yZWRpcmVjdF9zdGRfaGFuZGxlKEwiR0lUX1JFRElSRUNUX1NURElOIiwgU1REX0lOUFVUX0hBTkRMRSwgMCwKKwkJCQkgIEdFTkVSSUNfUkVBRCwgRklMRV9BVFRSSUJVVEVfTk9STUFMKTsKKwltYXliZV9yZWRpcmVjdF9zdGRfaGFuZGxlKEwiR0lUX1JFRElSRUNUX1NURE9VVCIsIFNURF9PVVRQVVRfSEFORExFLCAxLAorCQkJCSAgR0VORVJJQ19XUklURSwgRklMRV9BVFRSSUJVVEVfTk9STUFMKTsKKwltYXliZV9yZWRpcmVjdF9zdGRfaGFuZGxlKEwiR0lUX1JFRElSRUNUX1NUREVSUiIsIFNURF9FUlJPUl9IQU5ETEUsIDIsCisJCQkJICBHRU5FUklDX1dSSVRFLCBGSUxFX0ZMQUdfTk9fQlVGRkVSSU5HKTsKK30KKworI2lmZGVmIF9NU0NfVkVSCisjaWZkZWYgX0RFQlVHCisjaW5jbHVkZSA8Y3J0ZGJnLmg+CisjZW5kaWYKKyNlbmRpZgorCisvKgorICogV2UgaW1wbGVtZW50IHdtYWluKCkgYW5kIGNvbXBpbGUgd2l0aCAtbXVuaWNvZGUsIHdoaWNoIHdvdWxkCisgKiBub3JtYWxseSBpZ25vcmUgbWFpbigpLCBidXQgd2UgY2FsbCB0aGUgbGF0dGVyIGZyb20gdGhlIGZvcm1lcgorICogc28gdGhhdCB3ZSBjYW4gaGFuZGxlIG5vbi1BU0NJSSBjb21tYW5kLWxpbmUgcGFyYW1ldGVycworICogYXBwcm9wcmlhdGVseS4KKyAqCisgKiBUbyBiZSBtb3JlIGNvbXBhdGlibGUgd2l0aCB0aGUgY29yZSBnaXQgY29kZSwgd2UgY29udmVydAorICogYXJndiBpbnRvIFVURjggYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byBtYWluKCkuCisgKi8KK2ludCB3bWFpbihpbnQgYXJnYywgY29uc3Qgd2NoYXJfdCAqKndhcmd2KQoreworCWludCBpLCBtYXhsZW4sIGV4aXRfc3RhdHVzOworCWNoYXIgKmJ1ZmZlciwgKipzYXZlOworCWNvbnN0IGNoYXIgKiphcmd2OworCisJdHJhY2UyX2luaXRpYWxpemVfY2xvY2soKTsKKworI2lmZGVmIF9NU0NfVkVSCisjaWZkZWYgX0RFQlVHCisJX0NydFNldFJlcG9ydE1vZGUoX0NSVF9BU1NFUlQsIF9DUlREQkdfTU9ERV9ERUJVRyk7CisjZW5kaWYKKworI2lmZGVmIFVTRV9NU1ZDX0NSVERCRworCV9DcnRTZXREYmdGbGFnKF9DUlREQkdfQUxMT0NfTUVNX0RGIHwgX0NSVERCR19MRUFLX0NIRUNLX0RGKTsKKyNlbmRpZgorI2VuZGlmCisKKwltYXliZV9yZWRpcmVjdF9zdGRfaGFuZGxlcygpOworCisJLyogZGV0ZXJtaW5lIHNpemUgb2YgYXJndiBhbmQgZW52aXJvbiBjb252ZXJzaW9uIGJ1ZmZlciAqLworCW1heGxlbiA9IHdjc2xlbih3YXJndlswXSk7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKwkJbWF4bGVuID0gbWF4KG1heGxlbiwgd2NzbGVuKHdhcmd2W2ldKSk7CisKKwkvKiBhbGxvY2F0ZSBidWZmZXIgKHdjaGFyX3QgZW5jb2RlcyB0byBtYXggMyBVVEYtOCBieXRlcykgKi8KKwltYXhsZW4gPSAzICogbWF4bGVuICsgMTsKKwlidWZmZXIgPSBtYWxsb2Nfc3RhcnR1cChtYXhsZW4pOworCisJLyoKKwkgKiBDcmVhdGUgYSBVVEYtOCB2ZXJzaW9uIG9mIHdfYXJndi4gQWxzbyBjcmVhdGUgYSAic2F2ZSIgY29weQorCSAqIHRvIHJlbWVtYmVyIGFsbCB0aGUgc3RyaW5nIHBvaW50ZXJzIGJlY2F1c2UgcGFyc2Vfb3B0aW9ucygpCisJICogd2lsbCByZW1vdmUgY2xhaW1lZCBpdGVtcyBmcm9tIHRoZSBhcmd2IHRoYXQgd2UgcGFzcyBkb3duLgorCSAqLworCUFMTE9DX0FSUkFZKGFyZ3YsIGFyZ2MgKyAxKTsKKwlBTExPQ19BUlJBWShzYXZlLCBhcmdjICsgMSk7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJYXJndltpXSA9IHNhdmVbaV0gPSB3Y3N0b3V0ZmR1cF9zdGFydHVwKGJ1ZmZlciwgd2FyZ3ZbaV0sIG1heGxlbik7CisJYXJndltpXSA9IHNhdmVbaV0gPSBOVUxMOworCWZyZWUoYnVmZmVyKTsKKworCS8qIGZpeCBXaW5kb3dzIHNwZWNpZmljIGVudmlyb25tZW50IHNldHRpbmdzICovCisJc2V0dXBfd2luZG93c19lbnZpcm9ubWVudCgpOworCisJdW5zZXRfZW52aXJvbm1lbnRfdmFyaWFibGVzID0geHN0cmR1cCgiUEVSTDVMSUIiKTsKKworCS8qIGluaXRpYWxpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igd2FpdHBpZCBwaW5mb190IGxpc3QgKi8KKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZwaW5mb19jcyk7CisKKwkvKiBzZXQgdXAgZGVmYXVsdCBmaWxlIG1vZGUgYW5kIGZpbGUgbW9kZXMgZm9yIHN0ZGluL291dC9lcnIgKi8KKwlfZm1vZGUgPSBfT19CSU5BUlk7CisJX3NldG1vZGUoX2ZpbGVubyhzdGRpbiksIF9PX0JJTkFSWSk7CisJX3NldG1vZGUoX2ZpbGVubyhzdGRvdXQpLCBfT19CSU5BUlkpOworCV9zZXRtb2RlKF9maWxlbm8oc3RkZXJyKSwgX09fQklOQVJZKTsKKworCS8qIGluaXRpYWxpemUgVW5pY29kZSBjb25zb2xlICovCisJd2luYW5zaV9pbml0KCk7CisKKwkvKiBpbnZva2UgdGhlIHJlYWwgbWFpbigpIHVzaW5nIG91ciB1dGY4IHZlcnNpb24gb2YgYXJndi4gKi8KKwlleGl0X3N0YXR1cyA9IG1haW4oYXJnYywgYXJndik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQlmcmVlKHNhdmVbaV0pOworCWZyZWUoc2F2ZSk7CisJZnJlZShhcmd2KTsKKworCXJldHVybiBleGl0X3N0YXR1czsKK30KKworaW50IHVuYW1lKHN0cnVjdCB1dHNuYW1lICpidWYpCit7CisJdW5zaWduZWQgdiA9ICh1bnNpZ25lZClHZXRWZXJzaW9uKCk7CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKKwl4c25wcmludGYoYnVmLT5zeXNuYW1lLCBzaXplb2YoYnVmLT5zeXNuYW1lKSwgIldpbmRvd3MiKTsKKwl4c25wcmludGYoYnVmLT5yZWxlYXNlLCBzaXplb2YoYnVmLT5yZWxlYXNlKSwKKwkJICIldS4ldSIsIHYgJiAweGZmLCAodiA+PiA4KSAmIDB4ZmYpOworCS8qIGFzc3VtaW5nIE5UIHZhcmlhbnRzIG9ubHkuLiAqLworCXhzbnByaW50ZihidWYtPnZlcnNpb24sIHNpemVvZihidWYtPnZlcnNpb24pLAorCQkgICIldSIsICh2ID4+IDE2KSAmIDB4N2ZmZik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuaCBiL2NvbXBhdC9taW5ndy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZmU4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbWluZ3cuaApAQCAtMCwwICsxLDYxNCBAQAorI2lmZGVmIF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KK3R5cGVkZWYgX3NpZ3NldF90IHNpZ3NldF90OworI2VuZGlmCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorCisvKiBNaW5HVy13NjQgcmVwb3J0cyB0byBoYXZlIGZsb2NrZmlsZSwgYnV0IGl0IGRvZXMgbm90IGFjdHVhbGx5IGhhdmUgaXQuICovCisjaWZkZWYgX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IKKyN1bmRlZiBfUE9TSVhfVEhSRUFEX1NBRkVfRlVOQ1RJT05TCisjZW5kaWYKKworaW50IG1pbmd3X2NvcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKKyNkZWZpbmUgcGxhdGZvcm1fY29yZV9jb25maWcgbWluZ3dfY29yZV9jb25maWcKKworLyoKKyAqIHRoaW5ncyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGluIGhlYWRlciBmaWxlcworICovCisKK3R5cGVkZWYgaW50IHVpZF90OwordHlwZWRlZiBpbnQgc29ja2xlbl90OworI2lmbmRlZiBfX01JTkdXNjRfVkVSU0lPTl9NQUpPUgordHlwZWRlZiBpbnQgcGlkX3Q7CisjZGVmaW5lIGhzdHJlcnJvciBzdHJlcnJvcgorI2VuZGlmCisKKyNkZWZpbmUgU19JRkxOSyAgICAwMTIwMDAwIC8qIFN5bWJvbGljIGxpbmsgKi8KKyNkZWZpbmUgU19JU0xOSyh4KSAoKCh4KSAmIFNfSUZNVCkgPT0gU19JRkxOSykKKyNkZWZpbmUgU19JU1NPQ0soeCkgMAorCisjaWZuZGVmIFNfSVJXWEcKKyNkZWZpbmUgU19JUkdSUCAwCisjZGVmaW5lIFNfSVdHUlAgMAorI2RlZmluZSBTX0lYR1JQIDAKKyNkZWZpbmUgU19JUldYRyAoU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lYR1JQKQorI2VuZGlmCisjaWZuZGVmIFNfSVJXWE8KKyNkZWZpbmUgU19JUk9USCAwCisjZGVmaW5lIFNfSVdPVEggMAorI2RlZmluZSBTX0lYT1RIIDAKKyNkZWZpbmUgU19JUldYTyAoU19JUk9USCB8IFNfSVdPVEggfCBTX0lYT1RIKQorI2VuZGlmCisKKyNkZWZpbmUgU19JU1VJRCAwMDA0MDAwCisjZGVmaW5lIFNfSVNHSUQgMDAwMjAwMAorI2RlZmluZSBTX0lTVlRYIDAwMDEwMDAKKworI2RlZmluZSBXSUZFWElURUQoeCkgMQorI2RlZmluZSBXSUZTSUdOQUxFRCh4KSAwCisjZGVmaW5lIFdFWElUU1RBVFVTKHgpICgoeCkgJiAweGZmKQorI2RlZmluZSBXVEVSTVNJRyh4KSBTSUdURVJNCisKKyNpZm5kZWYgRVdPVUxEQkxPQ0sKKyNkZWZpbmUgRVdPVUxEQkxPQ0sgRUFHQUlOCisjZW5kaWYKKyNpZm5kZWYgRUxPT1AKKyNkZWZpbmUgRUxPT1AgRU1MSU5LCisjZW5kaWYKKyNkZWZpbmUgU0hVVF9XUiBTRF9TRU5ECisKKyNkZWZpbmUgU0lHSFVQIDEKKyNkZWZpbmUgU0lHUVVJVCAzCisjZGVmaW5lIFNJR0tJTEwgOQorI2RlZmluZSBTSUdQSVBFIDEzCisjZGVmaW5lIFNJR0FMUk0gMTQKKyNkZWZpbmUgU0lHQ0hMRCAxNworCisjZGVmaW5lIEZfR0VURkQgMQorI2RlZmluZSBGX1NFVEZEIDIKKyNkZWZpbmUgRkRfQ0xPRVhFQyAweDEKKworI2lmICFkZWZpbmVkIE9fQ0xPRVhFQyAmJiBkZWZpbmVkIE9fTk9JTkhFUklUCisjZGVmaW5lIE9fQ0xPRVhFQwlPX05PSU5IRVJJVAorI2VuZGlmCisKKyNpZm5kZWYgRUFGTk9TVVBQT1JUCisjZGVmaW5lIEVBRk5PU1VQUE9SVCBXU0FFQUZOT1NVUFBPUlQKKyNlbmRpZgorI2lmbmRlZiBFQ09OTkFCT1JURUQKKyNkZWZpbmUgRUNPTk5BQk9SVEVEIFdTQUVDT05OQUJPUlRFRAorI2VuZGlmCisjaWZuZGVmIEVOT1RTT0NLCisjZGVmaW5lIEVOT1RTT0NLIFdTQUVOT1RTT0NLCisjZW5kaWYKKworc3RydWN0IHBhc3N3ZCB7CisJY2hhciAqcHdfbmFtZTsKKwljaGFyICpwd19nZWNvczsKKwljaGFyICpwd19kaXI7Cit9OworCit0eXBlZGVmIHZvaWQgKF9fY2RlY2wgKnNpZ19oYW5kbGVyX3QpKGludCk7CitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwlzaWdfaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgc2FfZmxhZ3M7Cit9OworI2RlZmluZSBTQV9SRVNUQVJUIDAKKworc3RydWN0IGl0aW1lcnZhbCB7CisJc3RydWN0IHRpbWV2YWwgaXRfdmFsdWUsIGl0X2ludGVydmFsOworfTsKKyNkZWZpbmUgSVRJTUVSX1JFQUwgMAorCitzdHJ1Y3QgdXRzbmFtZSB7CisJY2hhciBzeXNuYW1lWzE2XTsKKwljaGFyIG5vZGVuYW1lWzFdOworCWNoYXIgcmVsZWFzZVsxNl07CisJY2hhciB2ZXJzaW9uWzE2XTsKKwljaGFyIG1hY2hpbmVbMV07Cit9OworCisvKgorICogc2FuaXRpemUgcHJlcHJvY2Vzc29yIG5hbWVzcGFjZSBwb2xsdXRlZCBieSBXaW5kb3dzIGhlYWRlcnMgZGVmaW5pbmcKKyAqIG1hY3JvcyB3aGljaCBjb2xsaWRlIHdpdGggZ2l0IGxvY2FsIHZlcnNpb25zCisgKi8KKyN1bmRlZiBIRUxQX0NPTU1BTkQgLyogZnJvbSB3aW51c2VyLmggKi8KKworLyoKKyAqIHRyaXZpYWwgc3R1YnMKKyAqLworCitzdGF0aWMgaW5saW5lIGludCByZWFkbGluayhjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXopCit7IGVycm5vID0gRU5PU1lTOyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHN5bWxpbmsoY29uc3QgY2hhciAqb2xkcGF0aCwgY29uc3QgY2hhciAqbmV3cGF0aCkKK3sgZXJybm8gPSBFTk9TWVM7IHJldHVybiAtMTsgfQorc3RhdGljIGlubGluZSBpbnQgZmNobW9kKGludCBmaWxkZXMsIG1vZGVfdCBtb2RlKQoreyBlcnJubyA9IEVOT1NZUzsgcmV0dXJuIC0xOyB9CisjaWZuZGVmIF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SCitzdGF0aWMgaW5saW5lIHBpZF90IGZvcmsodm9pZCkKK3sgZXJybm8gPSBFTk9TWVM7IHJldHVybiAtMTsgfQorI2VuZGlmCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcykKK3sgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGZzeW5jKGludCBmZCkKK3sgcmV0dXJuIF9jb21taXQoZmQpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc3luYyh2b2lkKQore30KK3N0YXRpYyBpbmxpbmUgdWlkX3QgZ2V0dWlkKHZvaWQpCit7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYXNzd2QgKmdldHB3bmFtKGNvbnN0IGNoYXIgKm5hbWUpCit7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIGludCBmY250bChpbnQgZmQsIGludCBjbWQsIC4uLikKK3sKKwlpZiAoY21kID09IEZfR0VURkQgfHwgY21kID09IEZfU0VURkQpCisJCXJldHVybiAwOworCWVycm5vID0gRUlOVkFMOworCXJldHVybiAtMTsKK30KKworI2RlZmluZSBzaWdlbXB0eXNldCh4KSAodm9pZCkwCitzdGF0aWMgaW5saW5lIGludCBzaWdhZGRzZXQoc2lnc2V0X3QgKnNldCwgaW50IHNpZ251bSkKK3sgcmV0dXJuIDA7IH0KKyNkZWZpbmUgU0lHX0JMT0NLIDAKKyNkZWZpbmUgU0lHX1VOQkxPQ0sgMAorc3RhdGljIGlubGluZSBpbnQgc2lncHJvY21hc2soaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9sZHNldCkKK3sgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgcGlkX3QgZ2V0cHBpZCh2b2lkKQoreyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSBwaWRfdCBnZXRwZ2lkKHBpZF90IHBpZCkKK3sgcmV0dXJuIHBpZCA9PSAwID8gZ2V0cGlkKCkgOiBwaWQ7IH0KK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGNnZXRwZ3JwKGludCBmZCkKK3sgcmV0dXJuIGdldHBpZCgpOyB9CisKKy8qCisgKiBzaW1wbGUgYWRhcHRvcnMKKyAqLworCitpbnQgbWluZ3dfbWtkaXIoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpOworI2RlZmluZSBta2RpciBtaW5nd19ta2RpcgorCisjZGVmaW5lIFdOT0hBTkcgMQorcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucyk7CisKKyNkZWZpbmUga2lsbCBtaW5nd19raWxsCitpbnQgbWluZ3dfa2lsbChwaWRfdCBwaWQsIGludCBzaWcpOworCisjaWZuZGVmIE5PX09QRU5TU0wKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorc3RhdGljIGlubGluZSBpbnQgbWluZ3dfU1NMX3NldF9mZChTU0wgKnNzbCwgaW50IGZkKQoreworCXJldHVybiBTU0xfc2V0X2ZkKHNzbCwgX2dldF9vc2ZoYW5kbGUoZmQpKTsKK30KKyNkZWZpbmUgU1NMX3NldF9mZCBtaW5nd19TU0xfc2V0X2ZkCisKK3N0YXRpYyBpbmxpbmUgaW50IG1pbmd3X1NTTF9zZXRfcmZkKFNTTCAqc3NsLCBpbnQgZmQpCit7CisJcmV0dXJuIFNTTF9zZXRfcmZkKHNzbCwgX2dldF9vc2ZoYW5kbGUoZmQpKTsKK30KKyNkZWZpbmUgU1NMX3NldF9yZmQgbWluZ3dfU1NMX3NldF9yZmQKKworc3RhdGljIGlubGluZSBpbnQgbWluZ3dfU1NMX3NldF93ZmQoU1NMICpzc2wsIGludCBmZCkKK3sKKwlyZXR1cm4gU1NMX3NldF93ZmQoc3NsLCBfZ2V0X29zZmhhbmRsZShmZCkpOworfQorI2RlZmluZSBTU0xfc2V0X3dmZCBtaW5nd19TU0xfc2V0X3dmZAorI2VuZGlmCisKKy8qCisgKiBpbXBsZW1lbnRhdGlvbnMgb2YgbWlzc2luZyBmdW5jdGlvbnMKKyAqLworCitpbnQgcGlwZShpbnQgZmlsZWRlc1syXSk7Cit1bnNpZ25lZCBpbnQgc2xlZXAgKHVuc2lnbmVkIGludCBzZWNvbmRzKTsKK2ludCBta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKTsKK2ludCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCB2b2lkICp0eik7CisjaWZuZGVmIF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SCitzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KTsKK3N0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpOworI2VuZGlmCitpbnQgZ2V0cGFnZXNpemUodm9pZCk7CS8qIGRlZmluZWQgaW4gTWluR1cncyBsaWJnY2MuYSAqLworc3RydWN0IHBhc3N3ZCAqZ2V0cHd1aWQodWlkX3QgdWlkKTsKK2ludCBzZXRpdGltZXIoaW50IHR5cGUsIHN0cnVjdCBpdGltZXJ2YWwgKmluLCBzdHJ1Y3QgaXRpbWVydmFsICpvdXQpOworaW50IHNpZ2FjdGlvbihpbnQgc2lnLCBzdHJ1Y3Qgc2lnYWN0aW9uICppbiwgc3RydWN0IHNpZ2FjdGlvbiAqb3V0KTsKK2ludCBsaW5rKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpOworaW50IHVuYW1lKHN0cnVjdCB1dHNuYW1lICpidWYpOworCisvKgorICogcmVwbGFjZW1lbnRzIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucworICovCisKK2ludCBtaW5nd191bmxpbmsoY29uc3QgY2hhciAqcGF0aG5hbWUpOworI2RlZmluZSB1bmxpbmsgbWluZ3dfdW5saW5rCisKK2ludCBtaW5nd19ybWRpcihjb25zdCBjaGFyICpwYXRoKTsKKyNkZWZpbmUgcm1kaXIgbWluZ3dfcm1kaXIKKworaW50IG1pbmd3X29wZW4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb2ZsYWdzLCAuLi4pOworI2RlZmluZSBvcGVuIG1pbmd3X29wZW4KKworaW50IG1pbmd3X2ZnZXRjKEZJTEUgKnN0cmVhbSk7CisjZGVmaW5lIGZnZXRjIG1pbmd3X2ZnZXRjCisKK0ZJTEUgKm1pbmd3X2ZvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUpOworI2RlZmluZSBmb3BlbiBtaW5nd19mb3BlbgorCitGSUxFICptaW5nd19mcmVvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUsIEZJTEUgKnN0cmVhbSk7CisjZGVmaW5lIGZyZW9wZW4gbWluZ3dfZnJlb3BlbgorCitpbnQgbWluZ3dfZmZsdXNoKEZJTEUgKnN0cmVhbSk7CisjZGVmaW5lIGZmbHVzaCBtaW5nd19mZmx1c2gKKworc3NpemVfdCBtaW5nd193cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisjZGVmaW5lIHdyaXRlIG1pbmd3X3dyaXRlCisKK2ludCBtaW5nd19hY2Nlc3MoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlKTsKKyN1bmRlZiBhY2Nlc3MKKyNkZWZpbmUgYWNjZXNzIG1pbmd3X2FjY2VzcworCitpbnQgbWluZ3dfY2hkaXIoY29uc3QgY2hhciAqZGlybmFtZSk7CisjZGVmaW5lIGNoZGlyIG1pbmd3X2NoZGlyCisKK2ludCBtaW5nd19jaG1vZChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUpOworI2RlZmluZSBjaG1vZCBtaW5nd19jaG1vZAorCitjaGFyICptaW5nd19ta3RlbXAoY2hhciAqdGVtcGxhdGUpOworI2RlZmluZSBta3RlbXAgbWluZ3dfbWt0ZW1wCisKK2NoYXIgKm1pbmd3X2dldGN3ZChjaGFyICpwb2ludGVyLCBpbnQgbGVuKTsKKyNkZWZpbmUgZ2V0Y3dkIG1pbmd3X2dldGN3ZAorCisjaWZkZWYgTk9fVU5TRVRFTlYKKyNlcnJvciAiTk9fVU5TRVRFTlYgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIFdpbmRvd3Mtc3BlY2lmaWMgc3RhcnR1cCBjb2RlISIKKyNlbmRpZgorCisvKgorICogV2UgYmluZCAqZW52KCkgcm91dGluZXMgKGV2ZW4gdGhlIG1pbmd3XyBvbmVzKSB0byBwcml2YXRlIG1pbmd3XyB2ZXJzaW9ucy4KKyAqIFRoZXNlIHRhbGsgdG8gdGhlIENSVCB1c2luZyBVTklDT0RFL3djaGFyX3QsIGJ1dCBtYWludGFpbiB0aGUgb3JpZ2luYWwKKyAqIG5hcnJvdy1jaGFyIEFQSS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIE1TQ1JUIG1haW50YWlucyBib3RoIEFOU0kgKGdldGVudigpKSBhbmQgVU5JQ09ERSAoX3dnZXRlbnYoKSkKKyAqIHJvdXRpbmVzIGFuZCBzdG9yZXMgYm90aCB2ZXJzaW9ucyBvZiBlYWNoIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHBhcmFsbGVsCisgKiAoYW5kIHNlY3JldGx5IHVwZGF0ZXMgYm90aCB3aGVuIHlvdSBzZXQgb25lIG9yIHRoZSBvdGhlciksIGJ1dCBpdCB1c2VzIENQX0FDUAorICogdG8gZG8gdGhlIGNvbnZlcnNpb24gcmF0aGVyIHRoYW4gQ1BfVVRGOC4KKyAqCisgKiBTaW5jZSBldmVyeXRoaW5nIGluIHRoZSBnaXQgY29kZSBiYXNlIGlzIFVURjgsIHdlIGRlZmluZSB0aGUgbWluZ3dfIHJvdXRpbmVzCisgKiB0byBhY2Nlc3MgdGhlIENSVCB1c2luZyB0aGUgVU5JQ09ERSByb3V0aW5lcyBhbmQgbWFudWFsbHkgY29udmVydCB0aGVtIHRvCisgKiBVVEY4LiAgVGhpcyBhbHNvIGF2b2lkcyByb3VuZC10cmlwIHByb2JsZW1zLgorICoKKyAqIFRoaXMgYWxzbyBoZWxwcyB3aXRoIG91ciBsaW5rYWdlLCBzaW5jZSAiX3dlbnZpcm9uIiBpcyBwdWJsaWNseSBleHBvcnRlZAorICogZnJvbSB0aGUgQ1JULiAgQnV0IHRvIGFjY2VzcyAiX2Vudmlyb24iIHdlIHdvdWxkIGhhdmUgdG8gc3RhdGljYWxseSBsaW5rCisgKiB0byB0aGUgQ1JUICgvTVQpLgorICoKKyAqIFdlIHJlcXVpcmUgTk9fU0VURU5WIChhbmQgbGV0IGdpdHNldGVudigpIGNhbGwgb3VyIG1pbmd3X3B1dGVudikuCisgKi8KKyNkZWZpbmUgZ2V0ZW52ICAgICAgIG1pbmd3X2dldGVudgorI2RlZmluZSBwdXRlbnYgICAgICAgbWluZ3dfcHV0ZW52CisjZGVmaW5lIHVuc2V0ZW52ICAgICBtaW5nd19wdXRlbnYKK2NoYXIgKm1pbmd3X2dldGVudihjb25zdCBjaGFyICpuYW1lKTsKK2ludCAgIG1pbmd3X3B1dGVudihjb25zdCBjaGFyICpuYW1lKTsKKworaW50IG1pbmd3X2dldGhvc3RuYW1lKGNoYXIgKmhvc3QsIGludCBuYW1lbGVuKTsKKyNkZWZpbmUgZ2V0aG9zdG5hbWUgbWluZ3dfZ2V0aG9zdG5hbWUKKworc3RydWN0IGhvc3RlbnQgKm1pbmd3X2dldGhvc3RieW5hbWUoY29uc3QgY2hhciAqaG9zdCk7CisjZGVmaW5lIGdldGhvc3RieW5hbWUgbWluZ3dfZ2V0aG9zdGJ5bmFtZQorCitpbnQgbWluZ3dfZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqbm9kZSwgY29uc3QgY2hhciAqc2VydmljZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKTsKKyNkZWZpbmUgZ2V0YWRkcmluZm8gbWluZ3dfZ2V0YWRkcmluZm8KKworaW50IG1pbmd3X3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsKKyNkZWZpbmUgc29ja2V0IG1pbmd3X3NvY2tldAorCitpbnQgbWluZ3dfY29ubmVjdChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc3opOworI2RlZmluZSBjb25uZWN0IG1pbmd3X2Nvbm5lY3QKKworaW50IG1pbmd3X2JpbmQoaW50IHNvY2tmZCwgc3RydWN0IHNvY2thZGRyICpzYSwgc2l6ZV90IHN6KTsKKyNkZWZpbmUgYmluZCBtaW5nd19iaW5kCisKK2ludCBtaW5nd19zZXRzb2Nrb3B0KGludCBzb2NrZmQsIGludCBsdmwsIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIGludCBvcHRsZW4pOworI2RlZmluZSBzZXRzb2Nrb3B0IG1pbmd3X3NldHNvY2tvcHQKKworaW50IG1pbmd3X3NodXRkb3duKGludCBzb2NrZmQsIGludCBob3cpOworI2RlZmluZSBzaHV0ZG93biBtaW5nd19zaHV0ZG93bgorCitpbnQgbWluZ3dfbGlzdGVuKGludCBzb2NrZmQsIGludCBiYWNrbG9nKTsKKyNkZWZpbmUgbGlzdGVuIG1pbmd3X2xpc3RlbgorCitpbnQgbWluZ3dfYWNjZXB0KGludCBzb2NrZmQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCAqc3opOworI2RlZmluZSBhY2NlcHQgbWluZ3dfYWNjZXB0CisKK2ludCBtaW5nd19yZW5hbWUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKKyNkZWZpbmUgcmVuYW1lIG1pbmd3X3JlbmFtZQorCisjaWYgZGVmaW5lZChVU0VfV0lOMzJfTU1BUCkgfHwgZGVmaW5lZChfTVNDX1ZFUikKK2ludCBtaW5nd19nZXRwYWdlc2l6ZSh2b2lkKTsKKyNkZWZpbmUgZ2V0cGFnZXNpemUgbWluZ3dfZ2V0cGFnZXNpemUKKyNlbmRpZgorCitzdHJ1Y3QgcmxpbWl0IHsKKwl1bnNpZ25lZCBpbnQgcmxpbV9jdXI7Cit9OworI2RlZmluZSBSTElNSVRfTk9GSUxFIDAKKworc3RhdGljIGlubGluZSBpbnQgZ2V0cmxpbWl0KGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqcmxwKQoreworCWlmIChyZXNvdXJjZSAhPSBSTElNSVRfTk9GSUxFKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJcmxwLT5ybGltX2N1ciA9IDIwNDg7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVc2UgbWluZ3cgc3BlY2lmaWMgc3RhdCgpL2xzdGF0KCkvZnN0YXQoKSBpbXBsZW1lbnRhdGlvbnMgb24gV2luZG93cywKKyAqIGluY2x1ZGluZyBvdXIgb3duIHN0cnVjdCBzdGF0IHdpdGggNjQgYml0IHN0X3NpemUgYW5kIG5hbm9zZWNvbmQtcHJlY2lzaW9uCisgKiBmaWxlIHRpbWVzLgorICovCisjaWZuZGVmIF9fTUlOR1c2NF9WRVJTSU9OX01BSk9SCisjZGVmaW5lIG9mZl90IG9mZjY0X3QKKyNkZWZpbmUgbHNlZWsgX2xzZWVraTY0CisjaWZuZGVmIF9NU0NfVkVSCitzdHJ1Y3QgdGltZXNwZWMgeworCXRpbWVfdCB0dl9zZWM7CisJbG9uZyB0dl9uc2VjOworfTsKKyNlbmRpZgorI2VuZGlmCisKK3N0cnVjdCBtaW5nd19zdGF0IHsKKyAgICBfZGV2X3Qgc3RfZGV2OworICAgIF9pbm9fdCBzdF9pbm87CisgICAgX21vZGVfdCBzdF9tb2RlOworICAgIHNob3J0IHN0X25saW5rOworICAgIHNob3J0IHN0X3VpZDsKKyAgICBzaG9ydCBzdF9naWQ7CisgICAgX2Rldl90IHN0X3JkZXY7CisgICAgb2ZmNjRfdCBzdF9zaXplOworICAgIHN0cnVjdCB0aW1lc3BlYyBzdF9hdGltOworICAgIHN0cnVjdCB0aW1lc3BlYyBzdF9tdGltOworICAgIHN0cnVjdCB0aW1lc3BlYyBzdF9jdGltOworfTsKKworI2RlZmluZSBzdF9hdGltZSBzdF9hdGltLnR2X3NlYworI2RlZmluZSBzdF9tdGltZSBzdF9tdGltLnR2X3NlYworI2RlZmluZSBzdF9jdGltZSBzdF9jdGltLnR2X3NlYworCisjaWZkZWYgc3RhdAorI3VuZGVmIHN0YXQKKyNlbmRpZgorI2RlZmluZSBzdGF0IG1pbmd3X3N0YXQKK2ludCBtaW5nd19sc3RhdChjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYpOworaW50IG1pbmd3X3N0YXQoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKK2ludCBtaW5nd19mc3RhdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpOworI2lmZGVmIGZzdGF0CisjdW5kZWYgZnN0YXQKKyNlbmRpZgorI2RlZmluZSBmc3RhdCBtaW5nd19mc3RhdAorI2lmZGVmIGxzdGF0CisjdW5kZWYgbHN0YXQKKyNlbmRpZgorI2RlZmluZSBsc3RhdCBtaW5nd19sc3RhdAorCisKK2ludCBtaW5nd191dGltZShjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IHN0cnVjdCB1dGltYnVmICp0aW1lcyk7CisjZGVmaW5lIHV0aW1lIG1pbmd3X3V0aW1lCitzaXplX3QgbWluZ3dfc3RyZnRpbWUoY2hhciAqcywgc2l6ZV90IG1heCwKKwkJICAgY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKnRtKTsKKyNkZWZpbmUgc3RyZnRpbWUgbWluZ3dfc3RyZnRpbWUKKworcGlkX3QgbWluZ3dfc3Bhd252cGUoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICoqYXJndiwgY2hhciAqKmVudiwKKwkJICAgICBjb25zdCBjaGFyICpkaXIsCisJCSAgICAgaW50IGZoaW4sIGludCBmaG91dCwgaW50IGZoZXJyKTsKK2ludCBtaW5nd19leGVjdnAoY29uc3QgY2hhciAqY21kLCBjaGFyICpjb25zdCAqYXJndik7CisjZGVmaW5lIGV4ZWN2cCBtaW5nd19leGVjdnAKK2ludCBtaW5nd19leGVjdihjb25zdCBjaGFyICpjbWQsIGNoYXIgKmNvbnN0ICphcmd2KTsKKyNkZWZpbmUgZXhlY3YgbWluZ3dfZXhlY3YKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2l0X250b2hsKHVuc2lnbmVkIGludCB4KQoreyByZXR1cm4gKHVuc2lnbmVkIGludCludG9obCh4KTsgfQorI2RlZmluZSBudG9obCBnaXRfbnRvaGwKKworc2lnX2hhbmRsZXJfdCBtaW5nd19zaWduYWwoaW50IHNpZywgc2lnX2hhbmRsZXJfdCBoYW5kbGVyKTsKKyNkZWZpbmUgc2lnbmFsIG1pbmd3X3NpZ25hbAorCitpbnQgbWluZ3dfcmFpc2UoaW50IHNpZyk7CisjZGVmaW5lIHJhaXNlIG1pbmd3X3JhaXNlCisKKy8qCisgKiBBTlNJIGVtdWxhdGlvbiB3cmFwcGVycworICovCisKK2ludCB3aW5hbnNpX2lzYXR0eShpbnQgZmQpOworI2RlZmluZSBpc2F0dHkgd2luYW5zaV9pc2F0dHkKKworaW50IHdpbmFuc2lfZHVwMihpbnQgb2xkZmQsIGludCBuZXdmZCk7CisjZGVmaW5lIGR1cDIgd2luYW5zaV9kdXAyCisKK3ZvaWQgd2luYW5zaV9pbml0KHZvaWQpOworSEFORExFIHdpbmFuc2lfZ2V0X29zZmhhbmRsZShpbnQgZmQpOworCisvKgorICogZ2l0IHNwZWNpZmljIGNvbXBhdGliaWxpdHkKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgY29udmVydF9zbGFzaGVzKGNoYXIgKnBhdGgpCit7CisJZm9yICg7ICpwYXRoOyBwYXRoKyspCisJCWlmICgqcGF0aCA9PSAnXFwnKQorCQkJKnBhdGggPSAnLyc7Cit9CisjZGVmaW5lIFBBVEhfU0VQICc7JworY2hhciAqbWluZ3dfcXVlcnlfdXNlcl9lbWFpbCh2b2lkKTsKKyNkZWZpbmUgcXVlcnlfdXNlcl9lbWFpbCBtaW5nd19xdWVyeV91c2VyX2VtYWlsCisjaWYgIWRlZmluZWQoX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IpICYmICghZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPCAxODAwKQorI2RlZmluZSBQUkl1TUFYICJJNjR1IgorI2RlZmluZSBQUklkNjQgIkk2NGQiCisjZWxzZQorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworLyoqCisgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBwYXRoIGlzIGEgdmFsaWQgb25lIG9uIFdpbmRvd3MuCisgKgorICogSW4gcGFydGljdWxhciwgcGF0aCBzZWdtZW50cyBhcmUgZGlzYWxsb3dlZCB3aGljaAorICoKKyAqIC0gZW5kIGluIGEgcGVyaW9kIG9yIGEgc3BhY2UgKGV4Y2VwdCB0aGUgc3BlY2lhbCBkaXJlY3RvcmllcyBgLmAgYW5kIGAuLmApLgorICoKKyAqIC0gY29udGFpbiBhbnkgb2YgdGhlIHJlc2VydmVkIGNoYXJhY3RlcnMsIGUuZy4gYDpgLCBgO2AsIGAqYCwgZXRjCisgKgorICogLSBjb3JyZXNwb25kIHRvIHJlc2VydmVkIG5hbWVzIChzdWNoIGFzIGBBVVhgLCBgUFJOYCwgZXRjKQorICoKKyAqIFRoZSBgYWxsb3dfbGl0ZXJhbF9udWxgIHBhcmFtZXRlciBjb250cm9scyB3aGV0aGVyIHRoZSBwYXRoIGBOVUxgIHNob3VsZAorICogYmUgY29uc2lkZXJlZCB2YWxpZCAodGhpcyBtYWtlcyBzZW5zZSBlLmcuIGJlZm9yZSBvcGVuaW5nIGZpbGVzLCBhcyBpdCBpcworICogcGVyZmVjdGx5IGxlZ2l0aW1hdGUgdG8gb3BlbiBgTlVMYCBvbiBXaW5kb3dzLCBqdXN0IGFzIGl0IGlzIHRvIG9wZW4KKyAqIGAvZGV2L251bGxgIG9uIFVuaXgvTGludXgpLgorICoKKyAqIFJldHVybnMgMSB1cG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSAwLgorICovCitpbnQgaXNfdmFsaWRfd2luMzJfcGF0aChjb25zdCBjaGFyICpwYXRoLCBpbnQgYWxsb3dfbGl0ZXJhbF9udWwpOworI2RlZmluZSBpc192YWxpZF9wYXRoKHBhdGgpIGlzX3ZhbGlkX3dpbjMyX3BhdGgocGF0aCwgMCkKKworLyoqCisgKiBDb252ZXJ0cyBVVEYtOCBlbmNvZGVkIHN0cmluZyB0byBVVEYtMTZMRS4KKyAqCisgKiBUbyBzdXBwb3J0IHJlcG9zaXRvcmllcyB3aXRoIGxlZ2FjeS1lbmNvZGVkIGZpbGUgbmFtZXMsIGludmFsaWQgVVRGLTggYnl0ZXMKKyAqIDB4YTAgLSAweGZmIGFyZSBjb252ZXJ0ZWQgdG8gY29ycmVzcG9uZGluZyBwcmludGFibGUgVW5pY29kZSBjaGFycyBcdTAwYTAgLQorICogXHUwMGZmLCBhbmQgaW52YWxpZCBVVEYtOCBieXRlcyAweDgwIC0gMHg5ZiAod2hpY2ggd291bGQgbWFrZSBub24tcHJpbnRhYmxlCisgKiBVbmljb2RlKSBhcmUgY29udmVydGVkIHRvIGhleC1jb2RlLgorICoKKyAqIExlYWQtYnl0ZXMgbm90IGZvbGxvd2VkIGJ5IGFuIGFwcHJvcHJpYXRlIG51bWJlciBvZiB0cmFpbC1ieXRlcywgb3Zlci1sb25nCisgKiBlbmNvZGluZ3MgYW5kIDQtYnl0ZSBlbmNvZGluZ3MgPiBcdTEwZmZmZiBhcmUgZGV0ZWN0ZWQgYXMgaW52YWxpZCBVVEYtOC4KKyAqCisgKiBNYXhpbXVtIHNwYWNlIHJlcXVpcmVtZW50IGZvciB0aGUgdGFyZ2V0IGJ1ZmZlciBpcyB0d28gd2lkZSBjaGFycyBwZXIgVVRGLTgKKyAqIGNoYXIgKCgoc3RybGVuKHV0ZikgKiAyKSArIDEpIFsqIHNpemVvZih3Y2hhcl90KV0pLgorICoKKyAqIFRoZSBtYXhpbXVtIHNwYWNlIGlzIG5lZWRlZCBvbmx5IGlmIHRoZSBlbnRpcmUgaW5wdXQgc3RyaW5nIGNvbnNpc3RzIG9mCisgKiBpbnZhbGlkIFVURi04IGJ5dGVzIGluIHJhbmdlIDB4ODAtMHg5ZiwgYXMgcGVyIHRoZSBmb2xsb3dpbmcgdGFibGU6CisgKgorICogICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgVVRGLTggfCBVVEYtMTYgfAorICogICBDb2RlIHBvaW50ICB8ICBVVEYtOCBzZXF1ZW5jZSAgIHwgYnl0ZXMgfCB3b3JkcyAgfCByYXRpbworICogLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0KKyAqIDAwMDAwMC0wMDAwN2YgfCAwLTdmICAgICAgICAgICAgICB8ICAgMSAgIHwgICAxICAgIHwgIDEKKyAqIDAwMDA4MC0wMDA3ZmYgfCBjMi1kZiArIDgwLWJmICAgICB8ICAgMiAgIHwgICAxICAgIHwgIDAuNQorICogMDAwODAwLTAwZmZmZiB8IGUwLWVmICsgMiAqIDgwLWJmIHwgICAzICAgfCAgIDEgICAgfCAgMC4zMworICogMDEwMDAwLTEwZmZmZiB8IGYwLWY0ICsgMyAqIDgwLWJmIHwgICA0ICAgfCAgMiAoYSkgfCAgMC41CisgKiBpbnZhbGlkICAgICAgIHwgODAtOWYgICAgICAgICAgICAgfCAgIDEgICB8ICAyIChiKSB8ICAyCisgKiBpbnZhbGlkICAgICAgIHwgYTAtZmYgICAgICAgICAgICAgfCAgIDEgICB8ICAgMSAgICB8ICAxCisgKgorICogKGEpIGVuY29kZWQgYXMgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyCisgKiAoYikgZW5jb2RlZCBhcyB0d28gaGV4IGRpZ2l0cworICoKKyAqIE5vdGUgdGhhdCwgd2hpbGUgdGhlIFVURi04IGVuY29kaW5nIHNjaGVtZSBjYW4gYmUgZXh0ZW5kZWQgdG8gNS1ieXRlLCA2LWJ5dGUKKyAqIG9yIGV2ZW4gaW5kZWZpbml0ZS1ieXRlIHNlcXVlbmNlcywgdGhlIGxhcmdlc3QgdmFsaWQgY29kZSBwb2ludCBcdTEwZmZmZgorICogZW5jb2RlcyBhcyBvbmx5IDQgVVRGLTggYnl0ZXMuCisgKgorICogUGFyYW1ldGVyczoKKyAqIHdjczogd2lkZSBjaGFyIHRhcmdldCBidWZmZXIKKyAqIHV0Zjogc3RyaW5nIHRvIGNvbnZlcnQKKyAqIHdjc2xlbjogc2l6ZSBvZiB0YXJnZXQgYnVmZmVyIChpbiB3Y2hhcl90J3MpCisgKiB1dGZsZW46IHNpemUgb2Ygc3RyaW5nIHRvIGNvbnZlcnQsIG9yIC0xIGlmIDAtdGVybWluYXRlZAorICoKKyAqIFJldHVybnM6CisgKiBsZW5ndGggb2YgY29udmVydGVkIHN0cmluZyAoX3djc2xlbih3Y3MpKSwgb3IgLTEgb24gZmFpbHVyZQorICoKKyAqIEVycm9yczoKKyAqIEVJTlZBTDogb25lIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGlzIGludmFsaWQgKGUuZy4gTlVMTCkKKyAqIEVSQU5HRTogdGhlIG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsCisgKi8KK2ludCB4dXRmdG93Y3NuKHdjaGFyX3QgKndjcywgY29uc3QgY2hhciAqdXRmLCBzaXplX3Qgd2NzbGVuLCBpbnQgdXRmbGVuKTsKKworLyoqCisgKiBTaW1wbGlmaWVkIHZhcmlhbnQgb2YgeHV0ZnRvd2NzbiwgYXNzdW1lcyBpbnB1dCBzdHJpbmcgaXMgXDAtdGVybWluYXRlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgeHV0ZnRvd2NzKHdjaGFyX3QgKndjcywgY29uc3QgY2hhciAqdXRmLCBzaXplX3Qgd2NzbGVuKQoreworCXJldHVybiB4dXRmdG93Y3NuKHdjcywgdXRmLCB3Y3NsZW4sIC0xKTsKK30KKworLyoqCisgKiBTaW1wbGlmaWVkIGZpbGUgc3lzdGVtIHNwZWNpZmljIHZhcmlhbnQgb2YgeHV0ZnRvd2NzbiwgYXNzdW1lcyBvdXRwdXQKKyAqIGJ1ZmZlciBzaXplIGlzIE1BWF9QQVRIIHdpZGUgY2hhcnMgYW5kIGlucHV0IHN0cmluZyBpcyBcMC10ZXJtaW5hdGVkLAorICogZmFpbHMgd2l0aCBFTkFNRVRPT0xPTkcgaWYgaW5wdXQgc3RyaW5nIGlzIHRvbyBsb25nLgorICovCitzdGF0aWMgaW5saW5lIGludCB4dXRmdG93Y3NfcGF0aCh3Y2hhcl90ICp3Y3MsIGNvbnN0IGNoYXIgKnV0ZikKK3sKKwlpbnQgcmVzdWx0ID0geHV0ZnRvd2Nzbih3Y3MsIHV0ZiwgTUFYX1BBVEgsIC0xKTsKKwlpZiAocmVzdWx0IDwgMCAmJiBlcnJubyA9PSBFUkFOR0UpCisJCWVycm5vID0gRU5BTUVUT09MT05HOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQ29udmVydHMgVVRGLTE2TEUgZW5jb2RlZCBzdHJpbmcgdG8gVVRGLTguCisgKgorICogTWF4aW11bSBzcGFjZSByZXF1aXJlbWVudCBmb3IgdGhlIHRhcmdldCBidWZmZXIgaXMgdGhyZWUgVVRGLTggY2hhcnMgcGVyCisgKiB3aWRlIGNoYXIgKChfd2NzbGVuKHdjcykgKiAzKSArIDEpLgorICoKKyAqIFRoZSBtYXhpbXVtIHNwYWNlIGlzIG5lZWRlZCBvbmx5IGlmIHRoZSBlbnRpcmUgaW5wdXQgc3RyaW5nIGNvbnNpc3RzIG9mCisgKiBVVEYtMTYgd29yZHMgaW4gcmFuZ2UgMHgwODAwLTB4ZDdmZiBvciAweGUwMDAtMHhmZmZmIChpLmUuIFx1MDgwMC1cdWZmZmYKKyAqIG1vZHVsbyBzdXJyb2dhdGUgcGFpcnMpLCBhcyBwZXIgdGhlIGZvbGxvd2luZyB0YWJsZToKKyAqCisgKiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgVVRGLTE2IHwgVVRGLTggfAorICogICBDb2RlIHBvaW50ICB8ICBVVEYtMTYgc2VxdWVuY2UgICAgICB8IHdvcmRzICB8IGJ5dGVzIHwgcmF0aW8KKyAqIC0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLQorICogMDAwMDAwLTAwMDA3ZiB8IDAwMDAtMDA3ZiAgICAgICAgICAgICB8ICAgMSAgICB8ICAgMSAgIHwgIDEKKyAqIDAwMDA4MC0wMDA3ZmYgfCAwMDgwLTA3ZmYgICAgICAgICAgICAgfCAgIDEgICAgfCAgIDIgICB8ICAyCisgKiAwMDA4MDAtMDBmZmZmIHwgMDgwMC1kN2ZmIC8gZTAwMC1mZmZmIHwgICAxICAgIHwgICAzICAgfCAgMworICogMDEwMDAwLTEwZmZmZiB8IGQ4MDAtZGJmZiArIGRjMDAtZGZmZiB8ICAgMiAgICB8ICAgNCAgIHwgIDIKKyAqCisgKiBOb3RlIHRoYXQgaW52YWxpZCBjb2RlIHBvaW50cyA+IDEwZmZmZiBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gVVRGLTE2LgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiB1dGY6IHRhcmdldCBidWZmZXIKKyAqIHdjczogd2lkZSBzdHJpbmcgdG8gY29udmVydAorICogdXRmbGVuOiBzaXplIG9mIHRhcmdldCBidWZmZXIKKyAqCisgKiBSZXR1cm5zOgorICogbGVuZ3RoIG9mIGNvbnZlcnRlZCBzdHJpbmcsIG9yIC0xIG9uIGZhaWx1cmUKKyAqCisgKiBFcnJvcnM6CisgKiBFSU5WQUw6IG9uZSBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBpcyBpbnZhbGlkIChlLmcuIE5VTEwpCisgKiBFUkFOR0U6IHRoZSBvdXRwdXQgYnVmZmVyIGlzIHRvbyBzbWFsbAorICovCitpbnQgeHdjc3RvdXRmKGNoYXIgKnV0ZiwgY29uc3Qgd2NoYXJfdCAqd2NzLCBzaXplX3QgdXRmbGVuKTsKKworLyoKKyAqIEEgY3JpdGljYWwgc2VjdGlvbiB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3Bhd24KKyAqIGZ1bmN0aW9ucyAobWluZ3dfc3Bhd252W3BdZSgpKSBhbmQgd2FpdHBpZCgpLiBJbml0aWFsaXNlZCBpbgorICogdGhlIHJlcGxhY2VtZW50IG1haW4oKSBtYWNybyBiZWxvdy4KKyAqLworZXh0ZXJuIENSSVRJQ0FMX1NFQ1RJT04gcGluZm9fY3M7CisKKy8qCisgKiBHaXQsIGxpa2UgbW9zdCBwb3J0YWJsZSBDIGFwcGxpY2F0aW9ucywgaW1wbGVtZW50cyBhIG1haW4oKSBmdW5jdGlvbi4gT24KKyAqIFdpbmRvd3MsIHRoaXMgbWFpbigpIGZ1bmN0aW9uIHdvdWxkIHJlY2VpdmUgcGFyYW1ldGVycyBlbmNvZGVkIGluIHRoZQorICogY3VycmVudCBsb2NhbGUsIGJ1dCBHaXQgZm9yIFdpbmRvd3Mgd291bGQgcHJlZmVyIFVURi04IGVuY29kZWQgIHBhcmFtZXRlcnMuCisgKgorICogVG8gbWFrZSB0aGF0IGhhcHBlbiwgd2Ugc3RpbGwgZGVjbGFyZSBtYWluKCkgaGVyZSwgYW5kIHRoZW4gZGVjbGFyZSBhbmQKKyAqIGltcGxlbWVudCB3bWFpbigpICh3aGljaCBpcyB0aGUgVW5pY29kZSB2YXJpYW50IG9mIG1haW4oKSkgYW5kIGNvbXBpbGUgd2l0aAorICogLW11bmljb2RlLiBUaGlzIHdtYWluKCkgZnVuY3Rpb24gcmVlbmNvZGVzIHRoZSBwYXJhbWV0ZXJzIGZyb20gVVRGLTE2IHRvCisgKiBVVEYtOCBmb3JtYXQsIHNldHMgdXAgYSBjb3VwbGUgb2Ygb3RoZXIgdGhpbmdzIGFzIHJlcXVpcmVkIG9uIFdpbmRvd3MsIGFuZAorICogdGhlbiBoYW5kcyBvZmYgdG8gdGhlIG1haW4oKSBmdW5jdGlvbi4KKyAqLworaW50IHdtYWluKGludCBhcmdjLCBjb25zdCB3Y2hhcl90ICoqd19hcmd2KTsKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisKKy8qCisgKiBGb3IgZGVidWdnaW5nOiBpZiBhIHByb2JsZW0gb2NjdXJzLCBzYXksIGluIGEgR2l0IHByb2Nlc3MgdGhhdCBpcyBzcGF3bmVkCisgKiBmcm9tIGFub3RoZXIgR2l0IHByb2Nlc3Mgd2hpY2ggaW4gdHVybiBpcyBzcGF3bmVkIGZyb20geWV0IGFub3RoZXIgR2l0CisgKiBwcm9jZXNzLCBpdCBjYW4gYmUgcXVpdGUgZGF1bnRpbmcgdG8gZmlndXJlIG91dCB3aGF0IGlzIGdvaW5nIG9uLgorICoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBvcGVuIGEgbmV3IE1pblRUWSAodGhpcyBhc3N1bWVzIHlvdSBhcmUgaW4gR2l0IGZvcgorICogV2luZG93cycgU0RLKSB3aXRoIGEgR0RCIHRoYXQgYXR0YWNoZXMgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyByaWdodCBhd2F5LgorICovCitleHRlcm4gdm9pZCBvcGVuX2luX2dkYih2b2lkKTsKKworLyoKKyAqIFVzZWQgYnkgUHRocmVhZCBBUEkgaW1wbGVtZW50YXRpb24gZm9yIFdpbmRvd3MKKyAqLworaW50IGVycl93aW5fdG9fcG9zaXgoRFdPUkQgd2luZXJyKTsKZGlmZiAtLWdpdCBhL2NvbXBhdC9ta2Rpci5jIGIvY29tcGF0L21rZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyNTNmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9ta2Rpci5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKyN1bmRlZiBta2RpcgorCisvKiBmb3IgcGxhdGZvcm1zIHRoYXQgY2FuJ3QgZGVhbCB3aXRoIGEgdHJhaWxpbmcgJy8nICovCitpbnQgY29tcGF0X21rZGlyX3dvX3RyYWlsaW5nX3NsYXNoKGNvbnN0IGNoYXIgKmRpciwgbW9kZV90IG1vZGUpCit7CisJaW50IHJldHZhbDsKKwljaGFyICp0bXBfZGlyID0gTlVMTDsKKwlzaXplX3QgbGVuID0gc3RybGVuKGRpcik7CisKKwlpZiAobGVuICYmIGRpcltsZW4tMV0gPT0gJy8nKSB7CisJCWlmICgodG1wX2RpciA9IHN0cmR1cChkaXIpKSA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCQl0bXBfZGlyW2xlbi0xXSA9ICdcMCc7CisJfQorCWVsc2UKKwkJdG1wX2RpciA9IChjaGFyICopZGlyOworCisJcmV0dmFsID0gbWtkaXIodG1wX2RpciwgbW9kZSk7CisJaWYgKHRtcF9kaXIgIT0gZGlyKQorCQlmcmVlKHRtcF9kaXIpOworCisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9ta2R0ZW1wLmMgYi9jb21wYXQvbWtkdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzYxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbWtkdGVtcC5jCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitjaGFyICpnaXRta2R0ZW1wKGNoYXIgKnRlbXBsYXRlKQoreworCWlmICghKm1rdGVtcCh0ZW1wbGF0ZSkgfHwgbWtkaXIodGVtcGxhdGUsIDA3MDApKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdGVtcGxhdGU7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbW1hcC5jIGIvY29tcGF0L21tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGQzMTAxCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21tYXAuYwpAQCAtMCwwICsxLDQwIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3ZvaWQgKmdpdF9tbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCkKK3sKKwlzaXplX3QgbiA9IDA7CisKKwlpZiAoc3RhcnQgIT0gTlVMTCB8fCBmbGFncyAhPSBNQVBfUFJJVkFURSB8fCBwcm90ICE9IFBST1RfUkVBRCkKKwkJZGllKCJJbnZhbGlkIHVzYWdlIG9mIG1tYXAgd2hlbiBidWlsdCB3aXRoIE5PX01NQVAiKTsKKworCXN0YXJ0ID0geG1hbGxvYyhsZW5ndGgpOworCWlmIChzdGFydCA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gTUFQX0ZBSUxFRDsKKwl9CisKKwl3aGlsZSAobiA8IGxlbmd0aCkgeworCQlzc2l6ZV90IGNvdW50ID0geHByZWFkKGZkLCAoY2hhciAqKXN0YXJ0ICsgbiwgbGVuZ3RoIC0gbiwgb2Zmc2V0ICsgbik7CisKKwkJaWYgKGNvdW50ID09IDApIHsKKwkJCW1lbXNldCgoY2hhciAqKXN0YXJ0K24sIDAsIGxlbmd0aC1uKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNvdW50IDwgMCkgeworCQkJZnJlZShzdGFydCk7CisJCQllcnJubyA9IEVBQ0NFUzsKKwkJCXJldHVybiBNQVBfRkFJTEVEOworCQl9CisKKwkJbiArPSBjb3VudDsKKwl9CisKKwlyZXR1cm4gc3RhcnQ7Cit9CisKK2ludCBnaXRfbXVubWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworCWZyZWUoc3RhcnQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21zdmMuYyBiL2NvbXBhdC9tc3ZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4NDNkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9tc3ZjLmMKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlIDxjb25pby5oPgorI2luY2x1ZGUgIi4uL3N0cmJ1Zi5oIgorCisjaW5jbHVkZSAibWluZ3cuYyIKZGlmZiAtLWdpdCBhL2NvbXBhdC9tc3ZjLmggYi9jb21wYXQvbXN2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkN2E4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbXN2Yy5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX19NU1ZDX19IRUFECisjZGVmaW5lIF9fTVNWQ19fSEVBRAorCisjaW5jbHVkZSA8ZGlyZWN0Lmg+CisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPGlvLmg+CisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDE4KSAvKiBzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbiAqLworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpIC8qIHR5cGUgY29udmVyc2lvbiwgcG9zc2libGUgbG9zcyBvZiBkYXRhICovCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA5MCkgLyogJ2Z1bmN0aW9uJyA6IGRpZmZlcmVudCAnY29uc3QnIHF1YWxpZmllcnMgKEFMTE9DX0dST1cgZXRjLikqLworCisvKiBwb3J0aW5nIGZ1bmN0aW9uICovCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2RlZmluZSBfX2lubGluZV9fIF9faW5saW5lCisjZGVmaW5lIF9fYXR0cmlidXRlX18oeCkKKyNkZWZpbmUgc3RyY2FzZWNtcCAgIF9zdHJpY21wCisjZGVmaW5lIHN0cm5jYXNlY21wICBfc3RybmljbXAKKyNkZWZpbmUgZnRydW5jYXRlICAgIF9jaHNpemUKKyNkZWZpbmUgc3RydG91bGwgICAgIF9zdHJ0b3VpNjQKKyNkZWZpbmUgc3RydG9sbCAgICAgIF9zdHJ0b2k2NAorCisjdW5kZWYgRVJST1IKKworI2RlZmluZSBmdGVsbG8gX2Z0ZWxsaTY0CisKK3R5cGVkZWYgaW50IHNpZ3NldF90OworLyogb3BlbiBmb3IgcmVhZGluZywgd3JpdGluZywgb3IgYm90aCAobm90IGluIGZjbnRsLmgpICovCisjZGVmaW5lIE9fQUNDTU9ERSAgICAgKF9PX1JET05MWSB8IF9PX1dST05MWSB8IF9PX1JEV1IpCisKKyNpbmNsdWRlICJjb21wYXQvbWluZ3cuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL0xpY2Vuc2UudHh0IGIvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI3Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dApAQCAtMCwwICsxLDIzIEBACitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dCBiL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2NiZjUwCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9SZWFkbWUudHh0CkBAIC0wLDAgKzEsMTM2IEBACituZWRhbGxvYyB2MS4wNSAxNXRoIEp1bmUgMjAwODoKKy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPQorCitieSBOaWFsbCBEb3VnbGFzIChodHRwOi8vd3d3Lm5lZHByb2QuY29tL3Byb2dyYW1zL3BvcnRhYmxlL25lZG1hbGxvYy8pCisKK0VuY2xvc2VkIGlzIG5lZGFsbG9jLCBhbiBhbHRlcm5hdGl2ZSBtYWxsb2MgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpcGxlCit0aHJlYWRzIHdpdGhvdXQgbG9jayBjb250ZW50aW9uIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjguNC4gSXQgaXMgbW9yZQorb3IgbGVzcyBhIG5ld2VyIGltcGxlbWVudGF0aW9uIG9mIHB0bWFsbG9jMiwgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpbgorTGludXggKHdoaWNoIGlzIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjcuMCkgYnV0IGFsc28gY29udGFpbnMgYSBwZXItdGhyZWFkCitjYWNoZSBmb3IgbWF4aW11bSBDUFUgc2NhbGFiaWxpdHkuCisKK0l0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIHdoaWNoIGJhc2ljYWxseSBtZWFucworeW91IGNhbiBkbyBhbnl0aGluZyB5b3UgbGlrZSB3aXRoIGl0LiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBtYWxsb2MuYy5oCitmaWxlIHdoaWNoIHJlbWFpbnMgY29weXJpZ2h0IHRvIG90aGVycy4KKworSXQgaGFzIGJlZW4gdGVzdGVkIG9uIHdpbjMyICh4ODYpLCB3aW42NCAoeDY0KSwgTGludXggKHg2NCksIEZyZWVCU0QgKHg2NCkKK2FuZCBBcHBsZSBNYWNPUyBYICh4ODYpLiBJdCB3b3JrcyB2ZXJ5IHdlbGwgb24gYWxsIG9mIHRoZXNlIGFuZCBpcyB2ZXJ5CitzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBzeXN0ZW0gYWxsb2NhdG9yIG9uIGFsbCBvZiB0aGVzZSBwbGF0Zm9ybXMuCisKK0J5IGxpdGVyYWxseSBkcm9wcGluZyBpbiB0aGlzIGFsbG9jYXRvciBhcyBhIHJlcGxhY2VtZW50IGZvciB5b3VyIHN5c3RlbQorYWxsb2NhdG9yLCB5b3UgY2FuIHNlZSByZWFsIHdvcmxkIGltcHJvdmVtZW50cyBvZiB1cCB0byB0aHJlZSB0aW1lcyBpbiBub3JtYWwKK2NvZGUhCisKK1RvIHVzZToKKy09LT0tPS0KK0Ryb3AgaW4gbmVkbWFsbG9jLmgsIG5lZG1hbGxvYy5jIGFuZCBtYWxsb2MuYy5oIGludG8geW91ciBwcm9qZWN0LgorQ29uZmlndXJlIHVzaW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gbmVkbWFsbG9jLmguIFJ1biBhbmQgZW5qb3kuCisKK1RvIHRlc3QsIGNvbXBpbGUgdGVzdC5jLiBJdCB3aWxsIHJ1biBhIGNvbXBhcmlzb24gYmV0d2VlbiB5b3VyIHN5c3RlbQorYWxsb2NhdG9yIGFuZCBuZWRhbGxvYyBhbmQgdGVsbCB5b3UgaG93IG11Y2ggZmFzdGVyIG5lZGFsbG9jIGlzLiBJdCBhbHNvCitzZXJ2ZXMgYXMgYW4gZXhhbXBsZSBvZiB1c2FnZS4KKworTm90ZXM6CistPS09LT0KK0lmIHlvdSB3YW50IHRoZSB2ZXJ5IGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgYWxsb2NhdG9yLCBnZXQgaXQgZnJvbSB0aGUKK1RuRk9YIFNWTiByZXBvc2l0b3J5IGF0IHN2bjovL3N2bi5iZXJsaW9zLmRlL3ZpZXdjdnMvdG5mb3gvdHJ1bmsvc3JjL25lZG1hbGxvYworCitCZWNhdXNlIG9mIGhvdyBuZWRhbGxvYyBhbGxvY2F0ZXMgYW4gbXNwYWNlIHBlciB0aHJlYWQsIGl0IGNhbiBjYXVzZQorc2V2ZXJlIGJsb2F0aW5nIG9mIG1lbW9yeSB1c2FnZSB1bmRlciBjZXJ0YWluIGFsbG9jYXRpb24gcGF0dGVybnMuCitZb3UgY2FuIHN1YnN0YW50aWFsbHkgcmVkdWNlIHRoaXMgd2FzdGFnZSBieSBzZXR0aW5nIE1BWFRIUkVBRFNJTlBPT0wKK29yIHRoZSB0aHJlYWRzIHBhcmFtZXRlciB0byBuZWRjcmVhdGVwb29sKCkgdG8gYSBmcmFjdGlvbiBvZiB0aGUgbnVtYmVyIG9mCit0aHJlYWRzIHdoaWNoIHdvdWxkIG5vcm1hbGx5IGJlIGluIGEgcG9vbCBhdCBvbmNlLiBUaGlzIHdpbGwgcmVkdWNlCitibG9hdGluZyBhdCB0aGUgY29zdCBvZiBhbiBpbmNyZWFzZSBpbiBsb2NrIGNvbnRlbnRpb24uIElmIGFsbG9jYXRlZCBzaXplCitpcyBsZXNzIHRoYW4gVEhSRUFEQ0FDSEVNQVgsIGxvY2tpbmcgaXMgYXZvaWRlZCA5MC05OSUgb2YgdGhlIHRpbWUgYW5kCitpZiBtb3N0IG9mIHlvdXIgYWxsb2NhdGlvbnMgYXJlIGJlbG93IHRoaXMgdmFsdWUsIHlvdSBjYW4gc2FmZWx5IHNldAorTUFYVEhSRUFEU0lOUE9PTCB0byBvbmUuCisKK1lvdSB3aWxsIHN1ZmZlciBtZW1vcnkgbGVha2FnZSB1bmxlc3MgeW91IGNhbGwgbmVkZGlzYWJsZXRocmVhZGNhY2hlKCkKK3BlciBwb29sIGZvciBldmVyeSB0aHJlYWQgd2hpY2ggZXhpdHMuIFRoaXMgaXMgYmVjYXVzZSBuZWRhbGxvYyBjYW5ub3QKK3BvcnRhYmx5IGtub3cgd2hlbiBhIHRocmVhZCBleGl0cyBhbmQgdGh1cyB3aGVuIGl0cyB0aHJlYWQgY2FjaGUgY2FuCitiZSByZXR1cm5lZCBmb3IgdXNlIGJ5IG90aGVyIGNvZGUuIERvbid0IGZvcmdldCBwb29sIHplcm8sIHRoZSBzeXN0ZW0gcG9vbC4KKworRm9yIEMrKyB0eXBlIGFsbG9jYXRpb24gcGF0dGVybnMgKHdoZXJlIHRoZSBzYW1lIHNpemVzIG9mIG1lbW9yeSBhcmUKK3JlZ3VsYXJseSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGFzIG9iamVjdHMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCksCit0aGUgdGhyZWFkY2FjaGUgYWx3YXlzIGJlbmVmaXRzIHBlcmZvcm1hbmNlLiBJZiBob3dldmVyIHlvdXIgYWxsb2NhdGlvbgorcGF0dGVybnMgYXJlIGRpZmZlcmVudCwgc2VhcmNoaW5nIHRoZSB0aHJlYWRjYWNoZSBtYXkgc2lnbmlmaWNhbnRseSBzbG93Citkb3duIHlvdXIgY29kZSAtIGFzIGEgcnVsZSBvZiB0aHVtYiwgaWYgY2FjaGUgdXRpbGlzYXRpb24gaXMgYmVsb3cgODAlCisoc2VlIHRoZSBzb3VyY2UgZm9yIG5lZGRpc2FibGV0aHJlYWRjYWNoZSgpIGZvciBob3cgdG8gZW5hYmxlIGRlYnVnCitwcmludGluZyBpbiByZWxlYXNlIG1vZGUpIHRoZW4geW91IHNob3VsZCBkaXNhYmxlIHRoZSB0aHJlYWQgY2FjaGUgZm9yCit0aGF0IHRocmVhZC4gWW91IGNhbiBjb21waWxlIG91dCB0aGUgdGhyZWFkY2FjaGUgY29kZSBieSBzZXR0aW5nCitUSFJFQURDQUNIRU1BWCB0byB6ZXJvLgorCitTcGVlZCBjb21wYXJpc29uczoKKy09LT0tPS09LT0tPS09LT0tPQorU2VlIEJlbmNobWFya3MueGxzIGZvciBkZXRhaWxzLgorCitUaGUgZW5jbG9zZWQgdGVzdC5jIGNhbiBkbyB0d28gdGhpbmdzOiBpdCBjYW4gYmUgYSB0b3J0dXJlIHRlc3Qgb3IgYSBzcGVlZAordGVzdC4gVGhlIHNwZWVkIHRlc3QgaXMgZGVzaWduZWQgdG8gYmUgYSByZXByZXNlbnRhdGl2ZSBzeW50aGV0aWMKK21lbW9yeSBhbGxvY2F0b3IgdGVzdC4gSXQgd29ya3MgYnkgcmFuZG9tbHkgbWl4aW5nIGFsbG9jYXRpb25zIHdpdGggZnJlZXMKK3dpdGggaGFsZiBvZiB0aGUgYWxsb2NhdGlvbiBzaXplcyBiZWluZyBhIHR3byBwb3dlciBtdWx0aXBsZSBsZXNzIHRoYW4KKzUxMiBieXRlcyAodG8gbWltaWMgQysrIHN0YWNrIGluc3RhbnRpYXRlZCBvYmplY3RzKSBhbmQgdGhlIG90aGVyIGhhbGYKK2JlaW5nIGEgc2ltcGxlIHJhbmRvbSB2YWx1ZSBsZXNzIHRoYW4gMTZLYi4KKworVGhlIHJlYWwgd29ybGQgY29kZSByZXN1bHRzIGFyZSBmcm9tIFRuJ3MgVGVzdElPIGJlbmNobWFyay4gVGhpcyBpcyBhCitoZWF2aWx5IG11bHRpdGhyZWFkZWQgYW5kIG1lbW9yeSBpbnRlbnNpdmUgYmVuY2htYXJrIHdpdGggYSBsb3Qgb2YgYnJhbmNoaW5nCithbmQgb3RoZXIgc3R1ZmYgbW9kZXJuIHByb2Nlc3NvcnMgZG9uJ3QgbGlrZSBzbyBtdWNoLiBBcyB5b3UnbGwgbm90ZSwgdGhlCit0ZXN0IGRvZXNuJ3Qgc2hvdyB0aGUgYmVuZWZpdHMgb2YgdGhlIHRocmVhZGNhY2hlIG1vc3RseSBkdWUgdG8gdGhlIHNhdHVyYXRpb24KK29mIHRoZSBtZW1vcnkgYnVzIGJlaW5nIHRoZSBsaW1pdGluZyBmYWN0b3IuCisKK0NoYW5nZUxvZzoKKy09LT0tPS09LT0KK3YxLjA1IDE1dGggSnVuZSAyMDA4OgorICogeyAxMDQyIH0gQWRkZWQgZXJyb3IgY2hlY2sgZm9yIFRMU1NFVCgpIGFuZCBUTFNGUkVFKCkgbWFjcm9zLiBUaGFua3MgdG8KK01hcmt1cyBFbGZyaW5nIGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIHsgMTA0MyB9IEZpeGVkIGEgc2VnZmF1bHQgd2hlbiBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgdXNpbmcKK25lZGluZGVwZW5kZW50X2NvbWFsbG9jKCkuIFRoYW5rcyB0byBQYXZlbCBWb3plbmlsZWsgZm9yIHJlcG9ydGluZyB0aGlzLgorCit2MS4wNCAxNHRoIEp1bHkgMjAwNzoKKyAqIEZpeGVkIGEgYnVnIHdpdGggdGhlIG5ldyBvcHRpbWlzZWQgaW1wbGVtZW50YXRpb24gdGhhdCBmYWlsZWQgdG8gbG9jaworb24gYSByZWFsbG9jIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAqIEZpeGVkIGxhY2sgb2YgdGhyZWFkIHN5bmNocm9uaXNhdGlvbiBpbiBJbml0UG9vbCgpIGNhdXNpbmcgcG9vbCBjb3JydXB0aW9uCisgKiBGaXhlZCBhIG1lbW9yeSBsZWFrIG9mIHRocmVhZCBjYWNoZSBjb250ZW50cyBvbiBkaXNhYmxpbmcuIFRoYW5rcyB0byBFYXJsCitDaGV3IGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIEFkZGVkIGEgc2FuaXR5IGNoZWNrIGZvciBmcmVlZCBibG9ja3MgYmVpbmcgdmFsaWQuCisgKiBSZXdvcmtlZCB0ZXN0LmMgaW50byBiZWluZyBhIHRvcnR1cmUgdGVzdC4KKyAqIEZpeGVkIEdDQyBhc3NlbWJsZXIgb3B0aW1pc2F0aW9uIG1pc3NwZWNpZmljYXRpb24KKwordjEuMDRhbHBoYV9zdm45MTUgN3RoIE9jdG9iZXIgMjAwNjoKKyAqIEZpeGVkIGZhaWx1cmUgdG8gdW5sb2NrIHRocmVhZCBjYWNoZSBsaXN0IGlmIGFsbG9jYXRpbmcgYSBuZXcgbGlzdCBmYWlsZWQuCitUaGFua3MgdG8gRG1pdHJ5IENoaWNoa292IGZvciByZXBvcnRpbmcgdGhpcy4gRnVydGhlciB0aGFua3MgdG8gQWxla3NleSBTYW5pbi4KKyAqIEZpeGVkIHJlYWxsb2MoMCwgPHNpemU+KSBzZWdmYXVsdGluZy4gVGhhbmtzIHRvIERtaXRyeSBDaGljaGtvdiBmb3IKK3JlcG9ydGluZyB0aGlzLgorICogTWFkZSBjb25maWcgZGVmaW5lcyAjaWZuZGVmIHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGJ1aWxkIHN5c3RlbS4KK1RoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciBzdWdnZXN0aW5nIHRoaXMuCisgKiBGaXhlZCBkZWFkbG9jayBpbiBuZWRwcmVhbGxvYygpIGR1ZSB0byB1bm5lY2Vzc2FyeSBsb2NraW5nIG9mIHByZWZlcnJlZAordGhyZWFkIG1zcGFjZSB3aGVuIG1zcGFjZV9yZWFsbG9jKCkgYWx3YXlzIHVzZXMgdGhlIG9yaWdpbmFsIGJsb2NrJ3MgbXNwYWNlCithbnl3YXkuIFRoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIE1hZGUgc29tZSBzcGVlZCBpbXByb3ZlbWVudHMgYnkgaGFja2luZyBtc3BhY2VfbWFsbG9jKCkgdG8gbm8gbG9uZ2VyIGxvY2sKK2l0cyBtc3BhY2UsIHRodXMgYWxsb3dpbmcgdGhlIHJlY3Vyc2l2ZSBtdXRleCBpbXBsZW1lbnRhdGlvbiB0byBiZSByZW1vdmVkCit3aXRoIGFuIGFzc29jaWF0ZWQgc3BlZWQgaW5jcmVhc2UuIFRoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciBzdWdnZXN0aW5nIHRoaXMuCisgKiBGaXhlZCBhIGJ1ZyB3aGVyZSBhbGxvY2F0aW5nIG1zcGFjZXMgb3ZlcnJhbiBpdHMgbWF4IGxpbWl0LiBUaGFua3MgdG8KK0FsZWtzZXkgU2FuaW4gZm9yIHJlcG9ydGluZyB0aGlzLgorCit2MS4wMyAxMHRoIEp1bHkgMjAwNjoKKyAqIEZpeGVkIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZyBpbiB0aHJlYWRjYWNoZSBjb2RlIHdoaWNoIG9ubHkgYXBwZWFyZWQgd2l0aCA+NAordGhyZWFkcyBhbmQgaW4gaGVhdnkgdXNlIG9mIHRoZSB0aHJlYWRjYWNoZS4KKwordjEuMDIgMTV0aCBNYXkgMjAwNjoKKyAqIEludGVncmF0ZWQgZGxtYWxsb2MgdjIuOC40LCBmaXhpbmcgdGhlIHdpbjMyIG1lbW9yeSByZWxlYXNlIHByb2JsZW0gYW5kCitpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugc3RpbGwgZnVydGhlci4gU3BlZWQgaXMgbm93IHVwIHRvIHR3aWNlIHRoZSBzcGVlZCBvZiB2MS4wMQorKGF2ZXJhZ2UgaXMgNjclIGZhc3RlcikuCisgKiBGaXhlZCB3aW4zMiBjcml0aWNhbCBzZWN0aW9uIGltcGxlbWVudGF0aW9uLiBUaGFua3MgdG8gUGF2ZWwgS3V6bmV0c292Citmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBXYXNuJ3QgbG9ja2luZyBtc3BhY2UgaWYgYWxsIG1zcGFjZXMgd2VyZSBsb2NrZWQuIFRoYW5rcyB0byBQYXZlbCBLdXpuZXRzb3YKK2ZvciByZXBvcnRpbmcgdGhpcy4KKyAqIEFkZGVkIEFwcGxlIE1hYyBPUyBYIHN1cHBvcnQuCisKK3YxLjAxIDI0dGggRmVicnVhcnkgMjAwNjoKKyAqIEZpeGVkIG11bHRpcHJvY2Vzc29yIHNjYWxpbmcgcHJvYmxlbXMgYnkgcmVtb3Zpbmcgc291cmNlcyBvZiBjYWNoZSBzbG9zaGluZworICogRWFybCBDaGV3IDxlYXJsX2NoZXcgPGF0PiBhZ2lsZW50IDxkb3Q+IGNvbT4gc2VudCBwYXRjaGVzIGZvciB0aGUgZm9sbG93aW5nOgorICAgMS4gc2l6ZTJiaW5pZHgoKSB3YXNuJ3Qgd29ya2luZyBmb3IgZGVmYXVsdCBjb2RlIHBhdGggKG5vbiB4ODYpCisgICAyLiBGaXhlZCBmYWlsdXJlIHRvIHJlbGVhc2UgbXNwYWNlIGxvY2sgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHdoaWNoCisgICAgICBjYXVzZWQgYSBkZWFkbG9jaworCit2MS4wMCAxc3QgSmFudWFyeSAyMDA2OgorICogRmlyc3QgcmVsZWFzZQpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oIGIvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDg0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKQEAgLTAsMCArMSw1NzYxIEBACisvKgorICBUaGlzIGlzIGEgdmVyc2lvbiAoYWthIGRsbWFsbG9jKSBvZiBtYWxsb2MvZnJlZS9yZWFsbG9jIHdyaXR0ZW4gYnkKKyAgRG91ZyBMZWEgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvcHVibGljZG9tYWluLiAgU2VuZCBxdWVzdGlvbnMsCisgIGNvbW1lbnRzLCBjb21wbGFpbnRzLCBwZXJmb3JtYW5jZSBkYXRhLCBldGMgdG8gZGxAY3Mub3N3ZWdvLmVkdQorCisqIFZlcnNpb24gcHJlLTIuOC40IE1vbiBOb3YgMjcgMTE6MjI6MzcgMjAwNiAgICAoZGwgYXQgZ2VlKQorCisgICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQKKwkgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYworCSBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyEKKworKiBRdWlja3N0YXJ0CisKKyAgVGhpcyBsaWJyYXJ5IGlzIGFsbCBpbiBvbmUgZmlsZSB0byBzaW1wbGlmeSB0aGUgbW9zdCBjb21tb24gdXNhZ2U6CisgIGZ0cCBpdCwgY29tcGlsZSBpdCAoLU8zKSwgYW5kIGxpbmsgaXQgaW50byBhbm90aGVyIHByb2dyYW0uIEFsbCBvZgorICB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgZGVmYXVsdCB0byByZWFzb25hYmxlIHZhbHVlcyBmb3IgdXNlIG9uCisgIG1vc3QgcGxhdGZvcm1zLiAgWW91IG1pZ2h0IGxhdGVyIHdhbnQgdG8gc3RlcCB0aHJvdWdoIHZhcmlvdXMKKyAgY29tcGlsZS10aW1lIGFuZCBkeW5hbWljIHR1bmluZyBvcHRpb25zLgorCisgIEZvciBjb252ZW5pZW5jZSwgYW4gaW5jbHVkZSBmaWxlIGZvciBjb2RlIHVzaW5nIHRoaXMgbWFsbG9jIGlzIGF0OgorICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MtMi44LjQuaAorICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAuaCBmaWxlIHVubGVzcyB5b3UgY2FsbCBmdW5jdGlvbnMgbm90CisgIGRlZmluZWQgaW4geW91ciBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4gIFRoZSAuaCBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlCisgIGV4Y2VycHRzIGZyb20gdGhpcyBmaWxlIG5lZWRlZCBmb3IgdXNpbmcgdGhpcyBtYWxsb2Mgb24gQU5TSSBDL0MrKworICBzeXN0ZW1zLCBzbyBsb25nIGFzIHlvdSBoYXZlbid0IGNoYW5nZWQgY29tcGlsZS10aW1lIG9wdGlvbnMgYWJvdXQKKyAgbmFtaW5nIGFuZCB0dW5pbmcgcGFyYW1ldGVycy4gIElmIHlvdSBkbywgdGhlbiB5b3UgY2FuIGNyZWF0ZSB5b3VyCisgIG93biBtYWxsb2MuaCB0aGF0IGRvZXMgaW5jbHVkZSBhbGwgc2V0dGluZ3MgYnkgY3V0dGluZyBhdCB0aGUgcG9pbnQKKyAgaW5kaWNhdGVkIGJlbG93LiBOb3RlIHRoYXQgeW91IG1heSBhbHJlYWR5IGJ5IGRlZmF1bHQgYmUgdXNpbmcgYSBDCisgIGxpYnJhcnkgY29udGFpbmluZyBhIG1hbGxvYyB0aGF0IGlzIGJhc2VkIG9uIHNvbWUgdmVyc2lvbiBvZiB0aGlzCisgIG1hbGxvYyAoZm9yIGV4YW1wbGUgaW4gbGludXgpLiBZb3UgbWlnaHQgc3RpbGwgd2FudCB0byB1c2UgdGhlIG9uZQorICBpbiB0aGlzIGZpbGUgdG8gY3VzdG9taXplIHNldHRpbmdzIG9yIHRvIGF2b2lkIG92ZXJoZWFkcyBhc3NvY2lhdGVkCisgIHdpdGggbGlicmFyeSB2ZXJzaW9ucy4KKworKiBWaXRhbCBzdGF0aXN0aWNzOgorCisgIFN1cHBvcnRlZCBwb2ludGVyL3NpemVfdCByZXByZXNlbnRhdGlvbjogICAgICAgNCBvciA4IGJ5dGVzCisgICAgICAgc2l6ZV90IE1VU1QgYmUgYW4gdW5zaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcworICAgICAgIHBvaW50ZXJzLiAoSWYgeW91IGFyZSB1c2luZyBhbiBhbmNpZW50IHN5c3RlbSB0aGF0IGRlY2xhcmVzCisgICAgICAgc2l6ZV90IGFzIGEgc2lnbmVkIHR5cGUsIG9yIG5lZWQgaXQgdG8gYmUgYSBkaWZmZXJlbnQgd2lkdGgKKyAgICAgICB0aGFuIHBvaW50ZXJzLCB5b3UgY2FuIHVzZSBhIHByZXZpb3VzIHJlbGVhc2Ugb2YgdGhpcyBtYWxsb2MKKyAgICAgICAoZS5nLiAyLjcuMikgc3VwcG9ydGluZyB0aGVzZS4pCisKKyAgQWxpZ25tZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIChkZWZhdWx0KQorICAgICAgIFRoaXMgc3VmZmljZXMgZm9yIG5lYXJseSBhbGwgY3VycmVudCBtYWNoaW5lcyBhbmQgQyBjb21waWxlcnMuCisgICAgICAgSG93ZXZlciwgeW91IGNhbiBkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCB0byBiZSB3aWRlciB0aGFuIHRoaXMKKyAgICAgICBpZiBuZWNlc3NhcnkgKHVwIHRvIDEyOGJ5dGVzKSwgYXQgdGhlIGV4cGVuc2Ugb2YgdXNpbmcgbW9yZSBzcGFjZS4KKworICBNaW5pbXVtIG92ZXJoZWFkIHBlciBhbGxvY2F0ZWQgY2h1bms6ICAgNCBvciAgOCBieXRlcyAoaWYgNGJ5dGUgc2l6ZXMpCisJCQkJCSAgOCBvciAxNiBieXRlcyAoaWYgOGJ5dGUgc2l6ZXMpCisgICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMgYSBoaWRkZW4gd29yZCBvZiBvdmVyaGVhZCBob2xkaW5nIHNpemUKKyAgICAgICBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLCBhbmQgYWRkaXRpb25hbCBjcm9zcy1jaGVjayB3b3JkCisgICAgICAgaWYgRk9PVEVSUyBpcyBkZWZpbmVkLgorCisgIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAgMTYgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKwkJCSAgOC1ieXRlIHB0cnM6ICAzMiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorCisgICAgICAgRXZlbiBhIHJlcXVlc3QgZm9yIHplcm8gYnl0ZXMgKGkuZS4sIG1hbGxvYygwKSkgcmV0dXJucyBhCisgICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KKyAgICAgICBUaGUgbWF4aW11bSBvdmVyaGVhZCB3YXN0YWdlIChpLmUuLCBudW1iZXIgb2YgZXh0cmEgYnl0ZXMKKyAgICAgICBhbGxvY2F0ZWQgdGhhbiB3ZXJlIHJlcXVlc3RlZCBpbiBtYWxsb2MpIGlzIGxlc3MgdGhhbiBvciBlcXVhbAorICAgICAgIHRvIHRoZSBtaW5pbXVtIHNpemUsIGV4Y2VwdCBmb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdAorICAgICAgIGFyZSBzZXJ2aWNlZCB2aWEgbW1hcCgpLCB3aGVyZSB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIGFib3V0CisgICAgICAgMzIgYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyIGZyb20gYSBzeXN0ZW0gcGFnZSAodGhlIG1pbmltYWwKKyAgICAgICBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5dGVzLgorCisgIFNlY3VyaXR5OiBzdGF0aWMtc2FmZTsgb3B0aW9uYWxseSBtb3JlIG9yIGxlc3MKKyAgICAgICBUaGUgInNlY3VyaXR5IiBvZiBtYWxsb2MgcmVmZXJzIHRvIHRoZSBhYmlsaXR5IG9mIG1hbGljaW91cworICAgICAgIGNvZGUgdG8gYWNjZW50dWF0ZSB0aGUgZWZmZWN0cyBvZiBlcnJvcnMgKGZvciBleGFtcGxlLCBmcmVlaW5nCisgICAgICAgc3BhY2UgdGhhdCBpcyBub3QgY3VycmVudGx5IG1hbGxvYydlZCBvciBvdmVyd3JpdGluZyBwYXN0IHRoZQorICAgICAgIGVuZHMgb2YgY2h1bmtzKSBpbiBjb2RlIHRoYXQgY2FsbHMgbWFsbG9jLiAgVGhpcyBtYWxsb2MKKyAgICAgICBndWFyYW50ZWVzIG5vdCB0byBtb2RpZnkgYW55IG1lbW9yeSBsb2NhdGlvbnMgYmVsb3cgdGhlIGJhc2Ugb2YKKyAgICAgICBoZWFwLCBpLmUuLCBzdGF0aWMgdmFyaWFibGVzLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB1c2FnZQorICAgICAgIGVycm9ycy4gIFRoZSByb3V0aW5lcyBhZGRpdGlvbmFsbHkgZGV0ZWN0IG1vc3QgaW1wcm9wZXIgZnJlZXMKKyAgICAgICBhbmQgcmVhbGxvY3MuICBBbGwgdGhpcyBob2xkcyBhcyBsb25nIGFzIHRoZSBzdGF0aWMgYm9va2tlZXBpbmcKKyAgICAgICBmb3IgbWFsbG9jIGl0c2VsZiBpcyBub3QgY29ycnVwdGVkIGJ5IHNvbWUgb3RoZXIgbWVhbnMuICBUaGlzCisgICAgICAgaXMgb25seSBvbmUgYXNwZWN0IG9mIHNlY3VyaXR5IC0tIHRoZXNlIGNoZWNrcyBkbyBub3QsIGFuZAorICAgICAgIGNhbm5vdCwgZGV0ZWN0IGFsbCBwb3NzaWJsZSBwcm9ncmFtbWluZyBlcnJvcnMuCisKKyAgICAgICBJZiBGT09URVJTIGlzIGRlZmluZWQgbm9uemVybywgdGhlbiBlYWNoIGFsbG9jYXRlZCBjaHVuaworICAgICAgIGNhcnJpZXMgYW4gYWRkaXRpb25hbCBjaGVjayB3b3JkIHRvIHZlcmlmeSB0aGF0IGl0IHdhcyBtYWxsb2NlZAorICAgICAgIGZyb20gaXRzIHNwYWNlLiAgVGhlc2UgY2hlY2sgd29yZHMgYXJlIHRoZSBzYW1lIHdpdGhpbiBlYWNoCisgICAgICAgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSB1c2luZyBtYWxsb2MsIGJ1dCBkaWZmZXIgYWNyb3NzCisgICAgICAgZXhlY3V0aW9ucywgc28gZXh0ZXJuYWxseSBjcmFmdGVkIGZha2UgY2h1bmtzIGNhbm5vdCBiZQorICAgICAgIGZyZWVkLiBUaGlzIGltcHJvdmVzIHNlY3VyaXR5IGJ5IHJlamVjdGluZyBmcmVlcy9yZWFsbG9jcyB0aGF0CisgICAgICAgY291bGQgY29ycnVwdCBoZWFwIG1lbW9yeSwgaW4gYWRkaXRpb24gdG8gdGhlIGNoZWNrcyBwcmV2ZW50aW5nCisgICAgICAgd3JpdGVzIHRvIHN0YXRpY3MgdGhhdCBhcmUgYWx3YXlzIG9uLiAgVGhpcyBtYXkgZnVydGhlciBpbXByb3ZlCisgICAgICAgc2VjdXJpdHkgYXQgdGhlIGV4cGVuc2Ugb2YgdGltZSBhbmQgc3BhY2Ugb3ZlcmhlYWQuICAoTm90ZSB0aGF0CisgICAgICAgRk9PVEVSUyBtYXkgYWxzbyBiZSB3b3J0aCB1c2luZyB3aXRoIE1TUEFDRVMuKQorCisgICAgICAgQnkgZGVmYXVsdCBkZXRlY3RlZCBlcnJvcnMgY2F1c2UgdGhlIHByb2dyYW0gdG8gYWJvcnQgKGNhbGxpbmcKKyAgICAgICAiYWJvcnQoKSIpLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgdG8gaW5zdGVhZCBwcm9jZWVkIHBhc3QKKyAgICAgICBlcnJvcnMgYnkgZGVmaW5pbmcgUFJPQ0VFRF9PTl9FUlJPUi4gIEluIHRoaXMgY2FzZSwgYSBiYWQgZnJlZQorICAgICAgIGhhcyBubyBlZmZlY3QsIGFuZCBhIG1hbGxvYyB0aGF0IGVuY291bnRlcnMgYSBiYWQgYWRkcmVzcworICAgICAgIGNhdXNlZCBieSB1c2VyIG92ZXJ3cml0ZXMgd2lsbCBpZ25vcmUgdGhlIGJhZCBhZGRyZXNzIGJ5CisgICAgICAgZHJvcHBpbmcgcG9pbnRlcnMgYW5kIGluZGljZXMgdG8gYWxsIGtub3duIG1lbW9yeS4gVGhpcyBtYXkKKyAgICAgICBiZSBhcHByb3ByaWF0ZSBmb3IgcHJvZ3JhbXMgdGhhdCBzaG91bGQgY29udGludWUgaWYgYXQgYWxsCisgICAgICAgcG9zc2libGUgaW4gdGhlIGZhY2Ugb2YgcHJvZ3JhbW1pbmcgZXJyb3JzLCBhbHRob3VnaCB0aGV5IG1heQorICAgICAgIHJ1biBvdXQgb2YgbWVtb3J5IGJlY2F1c2UgZHJvcHBlZCBtZW1vcnkgaXMgbmV2ZXIgcmVjbGFpbWVkLgorCisgICAgICAgSWYgeW91IGRvbid0IGxpa2UgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gZGVmaW5lCisgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gYW5kIFVTQUdFX0VSUk9SX0FDVElPTiB0byBkbyBhbnl0aGluZworICAgICAgIGVsc2UuIEFuZCBpZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3VyIHByb2dyYW0gdXNpbmcgbWFsbG9jIGhhcworICAgICAgIG5vIGVycm9ycyBvciB2dWxuZXJhYmlsaXRpZXMsIHlvdSBjYW4gZGVmaW5lIElOU0VDVVJFIHRvIDEsCisgICAgICAgd2hpY2ggbWlnaHQgKG9yIG1pZ2h0IG5vdCkgcHJvdmlkZSBhIHNtYWxsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorCisgIFRocmVhZC1zYWZldHk6IE5PVCB0aHJlYWQtc2FmZSB1bmxlc3MgVVNFX0xPQ0tTIGRlZmluZWQKKyAgICAgICBXaGVuIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCBlYWNoIHB1YmxpYyBjYWxsIHRvIG1hbGxvYywgZnJlZSwKKyAgICAgICBldGMgaXMgc3Vycm91bmRlZCB3aXRoIGVpdGhlciBhIHB0aHJlYWQgbXV0ZXggb3IgYSB3aW4zMgorICAgICAgIHNwaW5sb2NrIChkZXBlbmRpbmcgb24gV0lOMzIpLiBUaGlzIGlzIG5vdCBlc3BlY2lhbGx5IGZhc3QsIGFuZAorICAgICAgIGNhbiBiZSBhIG1ham9yIGJvdHRsZW5lY2suICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUKKyAgICAgICBtaW5pbWFsIHByb3RlY3Rpb24gaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMsIGFuZCB0byBwcm92aWRlIGEKKyAgICAgICBiYXNpcyBmb3IgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9jIGluIGEgY29uY3VycmVudAorICAgICAgIHByb2dyYW0sIGNvbnNpZGVyIGluc3RlYWQgdXNpbmcgbmVkbWFsbG9jCisgICAgICAgKGh0dHA6Ly93d3cubmVkcHJvZC5jb20vcHJvZ3JhbXMvcG9ydGFibGUvbmVkbWFsbG9jLykgb3IKKyAgICAgICBwdG1hbGxvYyAoU2VlIGh0dHA6Ly93d3cubWFsbG9jLmRlKSwgd2hpY2ggYXJlIGRlcml2ZWQKKyAgICAgICBmcm9tIHZlcnNpb25zIG9mIHRoaXMgbWFsbG9jLgorCisgIFN5c3RlbSByZXF1aXJlbWVudHM6IEFueSBjb21iaW5hdGlvbiBvZiBNT1JFQ09SRSBhbmQvb3IgTU1BUC9NVU5NQVAKKyAgICAgICBUaGlzIG1hbGxvYyBjYW4gdXNlIHVuaXggc2JyayBvciBhbnkgZW11bGF0aW9uIChpbnZva2VkIHVzaW5nCisgICAgICAgdGhlIENBTExfTU9SRUNPUkUgbWFjcm8pIGFuZC9vciBtbWFwL211bm1hcCBvciBhbnkgZW11bGF0aW9uCisgICAgICAgKGludm9rZWQgdXNpbmcgQ0FMTF9NTUFQL0NBTExfTVVOTUFQKSB0byBnZXQgYW5kIHJlbGVhc2Ugc3lzdGVtCisgICAgICAgbWVtb3J5LiAgT24gbW9zdCB1bml4IHN5c3RlbXMsIGl0IHRlbmRzIHRvIHdvcmsgYmVzdCBpZiBib3RoCisgICAgICAgTU9SRUNPUkUgYW5kIE1NQVAgYXJlIGVuYWJsZWQuICBPbiBXaW4zMiwgaXQgdXNlcyBlbXVsYXRpb25zCisgICAgICAgYmFzZWQgb24gVmlydHVhbEFsbG9jLiBJdCBhbHNvIHVzZXMgY29tbW9uIEMgbGlicmFyeSBmdW5jdGlvbnMKKyAgICAgICBsaWtlIG1lbXNldC4KKworICBDb21wbGlhbmNlOiBJIGJlbGlldmUgaXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24KKyAgICAgICAoU2VlIGh0dHA6Ly93d3cudW5peC5vcmcpLiBBbHNvIFNWSUQvWFBHLCBBTlNJIEMsIGFuZCBwcm9iYWJseQorICAgICAgIG90aGVycyBhcyB3ZWxsLgorCisqIE92ZXJ2aWV3IG9mIGFsZ29yaXRobXMKKworICBUaGlzIGlzIG5vdCB0aGUgZmFzdGVzdCwgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBtb3N0IHBvcnRhYmxlLCBvcgorICBtb3N0IHR1bmFibGUgbWFsbG9jIGV2ZXIgd3JpdHRlbi4gSG93ZXZlciBpdCBpcyBhbW9uZyB0aGUgZmFzdGVzdAorICB3aGlsZSBhbHNvIGJlaW5nIGFtb25nIHRoZSBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIHBvcnRhYmxlIGFuZAorICB0dW5hYmxlLiAgQ29uc2lzdGVudCBiYWxhbmNlIGFjcm9zcyB0aGVzZSBmYWN0b3JzIHJlc3VsdHMgaW4gYSBnb29kCisgIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IgZm9yIG1hbGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuCisKKyAgSW4gbW9zdCB3YXlzLCB0aGlzIG1hbGxvYyBpcyBhIGJlc3QtZml0IGFsbG9jYXRvci4gR2VuZXJhbGx5LCBpdAorICBjaG9vc2VzIHRoZSBiZXN0LWZpdHRpbmcgZXhpc3RpbmcgY2h1bmsgZm9yIGEgcmVxdWVzdCwgd2l0aCB0aWVzCisgIGJyb2tlbiBpbiBhcHByb3hpbWF0ZWx5IGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGlzIHN0cmF0ZWd5CisgIG5vcm1hbGx5IG1haW50YWlucyBsb3cgZnJhZ21lbnRhdGlvbi4pIEhvd2V2ZXIsIGZvciByZXF1ZXN0cyBsZXNzCisgIHRoYW4gMjU2Ynl0ZXMsIGl0IGRldmlhdGVzIGZyb20gYmVzdC1maXQgd2hlbiB0aGVyZSBpcyBub3QgYW4KKyAgZXhhY3RseSBmaXR0aW5nIGF2YWlsYWJsZSBjaHVuayBieSBwcmVmZXJyaW5nIHRvIHVzZSBzcGFjZSBhZGphY2VudAorICB0byB0aGF0IHVzZWQgZm9yIHRoZSBwcmV2aW91cyBzbWFsbCByZXF1ZXN0LCBhcyB3ZWxsIGFzIGJ5IGJyZWFraW5nCisgIHRpZXMgaW4gYXBwcm94aW1hdGVseSBtb3N0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGVzZSBlbmhhbmNlCisgIGxvY2FsaXR5IG9mIHNlcmllcyBvZiBzbWFsbCBhbGxvY2F0aW9ucy4pICBBbmQgZm9yIHZlcnkgbGFyZ2UgcmVxdWVzdHMKKyAgKD49IDI1NktiIGJ5IGRlZmF1bHQpLCBpdCByZWxpZXMgb24gc3lzdGVtIG1lbW9yeSBtYXBwaW5nCisgIGZhY2lsaXRpZXMsIGlmIHN1cHBvcnRlZC4gIChUaGlzIGhlbHBzIGF2b2lkIGNhcnJ5aW5nIGFyb3VuZCBhbmQKKyAgcG9zc2libHkgZnJhZ21lbnRpbmcgbWVtb3J5IHVzZWQgb25seSBmb3IgbGFyZ2UgY2h1bmtzLikKKworICBBbGwgb3BlcmF0aW9ucyAoZXhjZXB0IG1hbGxvY19zdGF0cyBhbmQgbWFsbGluZm8pIGhhdmUgZXhlY3V0aW9uCisgIHRpbWVzIHRoYXQgYXJlIGJvdW5kZWQgYnkgYSBjb25zdGFudCBmYWN0b3Igb2YgdGhlIG51bWJlciBvZiBiaXRzIGluCisgIGEgc2l6ZV90LCBub3QgY291bnRpbmcgYW55IGNsZWFyaW5nIGluIGNhbGxvYyBvciBjb3B5aW5nIGluIHJlYWxsb2MsCisgIG9yIGFjdGlvbnMgc3Vycm91bmRpbmcgTU9SRUNPUkUgYW5kIE1NQVAgdGhhdCBoYXZlIHRpbWVzCisgIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIG5vbi1jb250aWd1b3VzIHJlZ2lvbnMgcmV0dXJuZWQgYnkKKyAgc3lzdGVtIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGlzIG9mdGVuIGp1c3QgMS4gSW4gcmVhbC10aW1lCisgIGFwcGxpY2F0aW9ucywgeW91IGNhbiBvcHRpb25hbGx5IHN1cHByZXNzIHNlZ21lbnQgdHJhdmVyc2FscyB1c2luZworICBOT19TRUdNRU5UX1RSQVZFUlNBTCwgd2hpY2ggYXNzdXJlcyBib3VuZGVkIGV4ZWN1dGlvbiBldmVuIHdoZW4KKyAgc3lzdGVtIGFsbG9jYXRvcnMgcmV0dXJuIG5vbi1jb250aWd1b3VzIHNwYWNlcywgYXQgdGhlIHR5cGljYWwKKyAgZXhwZW5zZSBvZiBjYXJyeWluZyBhcm91bmQgbW9yZSBtZW1vcnkgYW5kIGluY3JlYXNlZCBmcmFnbWVudGF0aW9uLgorCisgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBtb2R1bGFyIGFuZCBzZXJpb3VzbHkgb3ZlcnVzZXMKKyAgbWFjcm9zLiBQZXJoYXBzIHNvbWVkYXkgYWxsIEMgY29tcGlsZXJzIHdpbGwgZG8gYXMgZ29vZCBhIGpvYgorICBpbmxpbmluZyBtb2R1bGFyIGNvZGUgYXMgY2FuIG5vdyBiZSBkb25lIGJ5IGJydXRlLWZvcmNlIGV4cGFuc2lvbiwKKyAgYnV0IG5vdywgZW5vdWdoIG9mIHRoZW0gc2VlbSBub3QgdG8uCisKKyAgU29tZSBjb21waWxlcnMgaXNzdWUgYSBsb3Qgb2Ygd2FybmluZ3MgYWJvdXQgY29kZSB0aGF0IGlzCisgIGRlYWQvdW5yZWFjaGFibGUgb25seSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGFsc28gYWJvdXQgaW50ZW50aW9uYWwKKyAgdXNlcyBvZiBuZWdhdGlvbiBvbiB1bnNpZ25lZCB0eXBlcy4gQWxsIGtub3duIGNhc2VzIG9mIGVhY2ggY2FuIGJlCisgIGlnbm9yZWQuCisKKyAgRm9yIGEgbG9uZ2VyIGJ1dCBvdXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKKyAgICAgaHR0cDovL2dlZS5jcy5vc3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKKworKiBNU1BBQ0VTCisgIElmIE1TUEFDRVMgaXMgZGVmaW5lZCwgdGhlbiBpbiBhZGRpdGlvbiB0byBtYWxsb2MsIGZyZWUsIGV0Yy4sCisgIHRoaXMgZmlsZSBhbHNvIGRlZmluZXMgbXNwYWNlX21hbGxvYywgbXNwYWNlX2ZyZWUsIGV0Yy4gVGhlc2UKKyAgYXJlIHZlcnNpb25zIG9mIG1hbGxvYyByb3V0aW5lcyB0aGF0IHRha2UgYW4gIm1zcGFjZSIgYXJndW1lbnQKKyAgb2J0YWluZWQgdXNpbmcgY3JlYXRlX21zcGFjZSwgdG8gY29udHJvbCBhbGwgaW50ZXJuYWwgYm9va2tlZXBpbmcuCisgIElmIE9OTFlfTVNQQUNFUyBpcyBkZWZpbmVkLCBvbmx5IHRoZXNlIHZlcnNpb25zIGFyZSBjb21waWxlZC4KKyAgU28gaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoaXMgYWxsb2NhdG9yIGZvciBvbmx5IHNvbWUgYWxsb2NhdGlvbnMsCisgIGFuZCB5b3VyIHN5c3RlbSBtYWxsb2MgZm9yIG90aGVycywgeW91IGNhbiBjb21waWxlIHdpdGgKKyAgT05MWV9NU1BBQ0VTIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlLi4uCisgICAgc3RhdGljIG1zcGFjZSBteW1zcGFjZSA9IGNyZWF0ZV9tc3BhY2UoMCwwKTsgLy8gZm9yIGV4YW1wbGUKKyAgICAjZGVmaW5lIG15bWFsbG9jKGJ5dGVzKSAgbXNwYWNlX21hbGxvYyhteW1zcGFjZSwgYnl0ZXMpCisKKyAgKE5vdGU6IElmIHlvdSBvbmx5IG5lZWQgb25lIGluc3RhbmNlIG9mIGFuIG1zcGFjZSwgeW91IGNhbiBpbnN0ZWFkCisgIHVzZSAiVVNFX0RMX1BSRUZJWCIgdG8gcmVsYWJlbCB0aGUgZ2xvYmFsIG1hbGxvYy4pCisKKyAgWW91IGNhbiBzaW1pbGFybHkgY3JlYXRlIHRocmVhZC1sb2NhbCBhbGxvY2F0b3JzIGJ5IHN0b3JpbmcKKyAgbXNwYWNlcyBhcyB0aHJlYWQtbG9jYWxzLiBGb3IgZXhhbXBsZToKKyAgICBzdGF0aWMgX190aHJlYWQgbXNwYWNlIHRsbXMgPSAwOworICAgIHZvaWQqICB0bG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICAgIGlmICh0bG1zID09IDApIHRsbXMgPSBjcmVhdGVfbXNwYWNlKDAsIDApOworICAgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2ModGxtcywgYnl0ZXMpOworICAgIH0KKyAgICB2b2lkICB0bGZyZWUodm9pZCogbWVtKSB7IG1zcGFjZV9mcmVlKHRsbXMsIG1lbSk7IH0KKworICBVbmxlc3MgRk9PVEVSUyBpcyBkZWZpbmVkLCBlYWNoIG1zcGFjZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50LgorICBZb3UgY2Fubm90IGFsbG9jYXRlIGZyb20gb25lIGFuZCBmcmVlIHRvIGFub3RoZXIgKGFsdGhvdWdoCisgIGNvbmZvcm1hbmNlIGlzIG9ubHkgd2Vha2x5IGNoZWNrZWQsIHNvIHVzYWdlIGVycm9ycyBhcmUgbm90IGFsd2F5cworICBjYXVnaHQpLiBJZiBGT09URVJTIGlzIGRlZmluZWQsIHRoZW4gZWFjaCBjaHVuayBjYXJyaWVzIGFyb3VuZCBhIHRhZworICBpbmRpY2F0aW5nIGl0cyBvcmlnaW5hdGluZyBtc3BhY2UsIGFuZCBmcmVlcyBhcmUgZGlyZWN0ZWQgdG8gdGhlaXIKKyAgb3JpZ2luYXRpbmcgc3BhY2VzLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ29tcGlsZS10aW1lIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlIGNhcmVmdWwgaW4gc2V0dGluZyAjZGVmaW5lIHZhbHVlcyBmb3IgbnVtZXJpY2FsIGNvbnN0YW50cyBvZiB0eXBlCitzaXplX3QuIE9uIHNvbWUgc3lzdGVtcywgbGl0ZXJhbCB2YWx1ZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkCit0byBzaXplX3QgcHJlY2lzaW9uIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IGNhc3RlZC4gWW91IGNhbiBhbHNvCit1c2UgdGhlIHN5bWJvbGljIHZhbHVlcyBNQVhfU0laRV9ULCBTSVpFX1RfT05FLCBldGMgYmVsb3cuCisKK1dJTjMyICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGlmIF9XSU4zMiBkZWZpbmVkCisgIERlZmluaW5nIFdJTjMyIHNldHMgdXAgZGVmYXVsdHMgZm9yIE1TIGVudmlyb25tZW50IGFuZCBjb21waWxlcnMuCisgIE90aGVyd2lzZSBkZWZhdWx0cyBhcmUgZm9yIHVuaXguIEJld2FyZSB0aGF0IHRoZXJlIHNlZW0gdG8gYmUgc29tZQorICBjYXNlcyB3aGVyZSB0aGlzIG1hbGxvYyBtaWdodCBub3QgYmUgYSBwdXJlIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCisgIFdpbjMyIG1hbGxvYzogUmFuZG9tLWxvb2tpbmcgZmFpbHVyZXMgZnJvbSBXaW4zMiBHREkgQVBJJ3MgKGVnOworICBTZXRESUJpdHMoKSkgbWF5IGJlIGR1ZSB0byBidWdzIGluIHNvbWUgdmlkZW8gZHJpdmVyIGltcGxlbWVudGF0aW9ucworICB3aGVuIHBpeGVsIGJ1ZmZlcnMgYXJlIG1hbGxvYygpZWQsIGFuZCB0aGUgcmVnaW9uIHNwYW5zIG1vcmUgdGhhbgorICBvbmUgVmlydHVhbEFsbG9jKCllZCByZWdpb24uIEJlY2F1c2UgZGxtYWxsb2MgdXNlcyBhIHNtYWxsICg2NEtiKQorICBkZWZhdWx0IGdyYW51bGFyaXR5LCBwaXhlbCBidWZmZXJzIG1heSBzdHJhZGRsZSB2aXJ0dWFsIGFsbG9jYXRpb24KKyAgcmVnaW9ucyBtb3JlIG9mdGVuIHRoYW4gd2hlbiB1c2luZyB0aGUgTWljcm9zb2Z0IGFsbG9jYXRvci4gIFlvdSBjYW4KKyAgYXZvaWQgdGhpcyBieSB1c2luZyBWaXJ0dWFsQWxsb2MoKSBhbmQgVmlydHVhbEZyZWUoKSBmb3IgYWxsIHBpeGVsCisgIGJ1ZmZlcnMgcmF0aGVyIHRoYW4gdXNpbmcgbWFsbG9jKCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwKKyAgcmVjb21waWxlIHRoaXMgbWFsbG9jIHdpdGggYSBsYXJnZXIgREVGQVVMVF9HUkFOVUxBUklUWS4KKworTUFMTE9DX0FMSUdOTUVOVCAgICAgICAgIGRlZmF1bHQ6IChzaXplX3QpOAorICBDb250cm9scyB0aGUgbWluaW11bSBhbGlnbm1lbnQgZm9yIG1hbGxvYydlZCBjaHVua3MuICBJdCBtdXN0IGJlIGEKKyAgcG93ZXIgb2YgdHdvIGFuZCBhdCBsZWFzdCA4LCBldmVuIG9uIG1hY2hpbmVzIGZvciB3aGljaCBzbWFsbGVyCisgIGFsaWdubWVudHMgd291bGQgc3VmZmljZS4gSXQgbWF5IGJlIGRlZmluZWQgYXMgbGFyZ2VyIHRoYW4gdGhpcworICB0aG91Z2guIE5vdGUgaG93ZXZlciB0aGF0IGNvZGUgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgb3B0aW1pemVkIGZvcgorICB0aGUgY2FzZSBvZiA4LWJ5dGUgYWxpZ25tZW50LgorCitNU1BBQ0VTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnQgYWxsb2NhdGlvbiBzcGFjZXMuCisgIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaWYgSEFWRV9NTUFQIGlzIHRydWUuCisKK09OTFlfTVNQQUNFUyAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgb25seSBjb21waWxlIGluIG1zcGFjZSB2ZXJzaW9ucywgbm90IHJlZ3VsYXIgdmVyc2lvbnMuCisKK1VTRV9MT0NLUyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgQ2F1c2VzIGVhY2ggY2FsbCB0byBlYWNoIHB1YmxpYyByb3V0aW5lIHRvIGJlIHN1cnJvdW5kZWQgd2l0aAorICBwdGhyZWFkIG9yIFdJTjMyIG11dGV4IGxvY2svdW5sb2NrLiAoSWYgc2V0IHRydWUsIHRoaXMgY2FuIGJlCisgIG92ZXJyaWRkZW4gb24gYSBwZXItbXNwYWNlIGJhc2lzIGZvciBtc3BhY2UgdmVyc2lvbnMuKSBJZiBzZXQgdG8gYQorICBub24temVybyB2YWx1ZSBvdGhlciB0aGFuIDEsIGxvY2tzIGFyZSB1c2VkLCBidXQgdGhlaXIKKyAgaW1wbGVtZW50YXRpb24gaXMgbGVmdCBvdXQsIHNvIGxvY2sgZnVuY3Rpb25zIG11c3QgYmUgc3VwcGxpZWQgbWFudWFsbHkuCisKK1VTRV9TUElOX0xPQ0tTICAgICAgICAgICBkZWZhdWx0OiAxIGlmZiBVU0VfTE9DS1MgYW5kIG9uIHg4NiB1c2luZyBnY2Mgb3IgTVNDCisgIElmIHRydWUsIHVzZXMgY3VzdG9tIHNwaW4gbG9ja3MgZm9yIGxvY2tpbmcuIFRoaXMgaXMgY3VycmVudGx5CisgIHN1cHBvcnRlZCBvbmx5IGZvciB4ODYgcGxhdGZvcm1zIHVzaW5nIGdjYyBvciByZWNlbnQgTVMgY29tcGlsZXJzLgorICBPdGhlcndpc2UsIHBvc2l4IGxvY2tzIG9yIHdpbjMyIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSB1c2VkLgorCitGT09URVJTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBwcm92aWRlIGV4dHJhIGNoZWNraW5nIGFuZCBkaXNwYXRjaGluZyBieSBwbGFjaW5nCisgIGluZm9ybWF0aW9uIGluIHRoZSBmb290ZXJzIG9mIGFsbG9jYXRlZCBjaHVua3MuIFRoaXMgYWRkcworICBzcGFjZSBhbmQgdGltZSBvdmVyaGVhZC4KKworSU5TRUNVUkUgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgb21pdCBjaGVja3MgZm9yIHVzYWdlIGVycm9ycyBhbmQgaGVhcCBzcGFjZSBvdmVyd3JpdGVzLgorCitVU0VfRExfUFJFRklYICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgQ2F1c2VzIGNvbXBpbGVyIHRvIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgorICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugb25seSB3YW50IHRvIHVzZSB0aGlzIG1hbGxvYyBpbiBvbmUgcGFydAorICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0gbWFsbG9jIGVsc2V3aGVyZS4KKworQUJPUlQgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgYWJvcnQoKQorICBEZWZpbmVzIGhvdyB0byBhYm9ydCBvbiBmYWlsZWQgY2hlY2tzLiAgT24gbW9zdCBzeXN0ZW1zLCBhIGZhaWxlZAorICBjaGVjayBjYW5ub3QgZGllIHdpdGggYW4gImFzc2VydCIgb3IgZXZlbiBwcmludCBhbiBpbmZvcm1hdGl2ZQorICBtZXNzYWdlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHByaW50IHJvdXRpbmVzIGluIHR1cm4gY2FsbCBtYWxsb2MsCisgIHdoaWNoIHdpbGwgZmFpbCBhZ2Fpbi4gIEdlbmVyYWxseSwgdGhlIGJlc3QgcG9saWN5IGlzIHRvIHNpbXBseSBjYWxsCisgIGFib3J0KCkuIEl0J3Mgbm90IHZlcnkgdXNlZnVsIHRvIGRvIG1vcmUgdGhhbiB0aGlzIGJlY2F1c2UgbWFueQorICBlcnJvcnMgZHVlIHRvIG92ZXJ3cml0aW5nIHdpbGwgc2hvdyB1cCBhcyBhZGRyZXNzIGZhdWx0cyAobnVsbCwgb2RkCisgIGFkZHJlc3NlcyBldGMpIHJhdGhlciB0aGFuIG1hbGxvYy10cmlnZ2VyZWQgY2hlY2tzLCBzbyB3aWxsIGFsc28KKyAgYWJvcnQuICBBbHNvLCBtb3N0IGNvbXBpbGVycyBrbm93IHRoYXQgYWJvcnQoKSBkb2VzIG5vdCByZXR1cm4sIHNvCisgIGNhbiBiZXR0ZXIgb3B0aW1pemUgY29kZSBjb25kaXRpb25hbGx5IGNhbGxpbmcgaXQuCisKK1BST0NFRURfT05fRVJST1IgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMCAoZmFsc2UpCisgIENvbnRyb2xzIHdoZXRoZXIgZGV0ZWN0ZWQgYmFkIGFkZHJlc3NlcyBjYXVzZSB0aGVtIHRvIGJ5cGFzc2VkCisgIHJhdGhlciB0aGFuIGFib3J0aW5nLiBJZiBzZXQsIGRldGVjdGVkIGJhZCBhcmd1bWVudHMgdG8gZnJlZSBhbmQKKyAgcmVhbGxvYyBhcmUgaWdub3JlZC4gQW5kIGFsbCBib29ra2VlcGluZyBpbmZvcm1hdGlvbiBpcyB6ZXJvZWQgb3V0CisgIHVwb24gYSBkZXRlY3RlZCBvdmVyd3JpdGUgb2YgZnJlZWQgaGVhcCBzcGFjZSwgdGh1cyBsb3NpbmcgdGhlCisgIGFiaWxpdHkgdG8gZXZlciByZXR1cm4gaXQgZnJvbSBtYWxsb2MgYWdhaW4sIGJ1dCBlbmFibGluZyB0aGUKKyAgYXBwbGljYXRpb24gdG8gcHJvY2VlZC4gSWYgUFJPQ0VFRF9PTl9FUlJPUiBpcyBkZWZpbmVkLCB0aGUKKyAgc3RhdGljIHZhcmlhYmxlIG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50IGlzIGNvbXBpbGVkIGluCisgIGFuZCBjYW4gYmUgZXhhbWluZWQgdG8gc2VlIGlmIGVycm9ycyBoYXZlIG9jY3VycmVkLiBUaGlzIG9wdGlvbgorICBnZW5lcmF0ZXMgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCBhYm9ydCBwb2xpY3kuCisKK0RFQlVHICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUaGUgREVCVUcgc2V0dGluZyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHBlb3BsZSB0cnlpbmcgdG8gbW9kaWZ5CisgIHRoaXMgY29kZSBvciBkaWFnbm9zZSBwcm9ibGVtcyB3aGVuIHBvcnRpbmcgdG8gbmV3IHBsYXRmb3Jtcy4KKyAgSG93ZXZlciwgaXQgbWF5IGFsc28gYmUgYWJsZSB0byBiZXR0ZXIgaXNvbGF0ZSB1c2VyIGVycm9ycyB0aGFuIGp1c3QKKyAgdXNpbmcgcnVudGltZSBjaGVja3MuICBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91dGluZXMgc3BlbGwKKyAgb3V0IGluIG1vcmUgZGV0YWlsIHRoZSBhc3N1bXB0aW9ucyBhbmQgaW52YXJpYW50cyB1bmRlcmx5aW5nIHRoZQorICBhbGdvcml0aG1zLiAgVGhlIGNoZWNraW5nIGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93bgorICBleGVjdXRpb24gbm90aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRworICBzZXQgd2lsbCBhdHRlbXB0IHRvIGNoZWNrIGV2ZXJ5IG5vbi1tbWFwcGVkIGFsbG9jYXRlZCBhbmQgZnJlZSBjaHVuaworICBpbiB0aGUgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbWFyaWVzLgorCitBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMSAodHJ1ZSkKKyAgRGVidWdnaW5nIGFzc2VydGlvbiBmYWlsdXJlcyBjYW4gYmUgbmVhcmx5IGltcG9zc2libGUgaWYgeW91cgorICB2ZXJzaW9uIG9mIHRoZSBhc3NlcnQgbWFjcm8gY2F1c2VzIG1hbGxvYyB0byBiZSBjYWxsZWQsIHdoaWNoIHdpbGwKKyAgbGVhZCB0byBhIGNhc2NhZGUgb2YgZnVydGhlciBmYWlsdXJlcywgYmxvd2luZyB0aGUgcnVudGltZSBzdGFjay4KKyAgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgY2F1c2UgYXNzZXJ0aW9ucyBmYWlsdXJlcyB0byBjYWxsIGFib3J0KCksCisgIHdoaWNoIHdpbGwgdXN1YWxseSBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisKK01BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgZGVmYXVsdDogc2V0cyBlcnJubyB0byBFTk9NRU0sIG9yIG5vLW9wIG9uIHdpbjMyCisgIFRoZSBhY3Rpb24gdG8gdGFrZSBiZWZvcmUgInJldHVybiAwIiB3aGVuIG1hbGxvYyBmYWlscyB0byBiZSBhYmxlIHRvCisgIHJldHVybiBtZW1vcnkgYmVjYXVzZSB0aGVyZSBpcyBub25lIGF2YWlsYWJsZS4KKworSEFWRV9NT1JFQ09SRSAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKSB1bmxlc3Mgd2luMzIgb3IgT05MWV9NU1BBQ0VTCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgc2JyayBvciBhbiBlbXVsYXRpb24gb2YgaXQuCisKK01PUkVDT1JFICAgICAgICAgICAgICAgICAgZGVmYXVsdDogc2JyaworICBUaGUgbmFtZSBvZiB0aGUgc2Jyay1zdHlsZSBzeXN0ZW0gcm91dGluZSB0byBjYWxsIHRvIG9idGFpbiBtb3JlCisgIG1lbW9yeS4gIFNlZSBiZWxvdyBmb3IgZ3VpZGFuY2Ugb24gd3JpdGluZyBjdXN0b20gTU9SRUNPUkUKKyAgZnVuY3Rpb25zLiBUaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRSB2YXJpZXMgYWNyb3NzCisgIHN5c3RlbXMuICBJdCBjYW5ub3QgYmUgc2l6ZV90LCBiZWNhdXNlIGl0IHN1cHBvcnRzIG5lZ2F0aXZlCisgIGFyZ3VtZW50cywgc28gaXQgaXMgbm9ybWFsbHkgdGhlIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgIHNpemVfdCAoc29tZXRpbWVzIGRlY2xhcmVkIGFzICJpbnRwdHJfdCIpLiAgSXQgZG9lc24ndCBtdWNoIG1hdHRlcgorICB0aG91Z2guIEludGVybmFsbHksIHdlIG9ubHkgY2FsbCBpdCB3aXRoIGFyZ3VtZW50cyBsZXNzIHRoYW4gaGFsZgorICB0aGUgbWF4IHZhbHVlIG9mIGEgc2l6ZV90LCB3aGljaCBzaG91bGQgd29yayBhY3Jvc3MgYWxsIHJlYXNvbmFibGUKKyAgcG9zc2liaWxpdGllcywgYWx0aG91Z2ggc29tZXRpbWVzIGdlbmVyYXRpbmcgY29tcGlsZXIgd2FybmluZ3MuCisKK01PUkVDT1JFX0NPTlRJR1VPVVMgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgaWYgSEFWRV9NT1JFQ09SRQorICBJZiB0cnVlLCB0YWtlIGFkdmFudGFnZSBvZiBmYWN0IHRoYXQgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUKKyAgd2l0aCBwb3NpdGl2ZSBhcmd1bWVudHMgYWx3YXlzIHJldHVybiBjb250aWd1b3VzIGluY3JlYXNpbmcKKyAgYWRkcmVzc2VzLiAgVGhpcyBpcyB0cnVlIG9mIHVuaXggc2Jyay4gSXQgZG9lcyBub3QgaHVydCB0b28gbXVjaCB0bworICBzZXQgaXQgdHJ1ZSBhbnl3YXksIHNpbmNlIG1hbGxvYyBjb3BlcyB3aXRoIG5vbi1jb250aWd1aXRpZXMuCisgIFNldHRpbmcgaXQgZmFsc2Ugd2hlbiBkZWZpbml0ZWx5IG5vbi1jb250aWd1b3VzIHNhdmVzIHRpbWUKKyAgYW5kIHBvc3NpYmx5IHdhc3RlZCBzcGFjZSBpdCB3b3VsZCB0YWtlIHRvIGRpc2NvdmVyIHRoaXMgdGhvdWdoLgorCitNT1JFQ09SRV9DQU5OT1RfVFJJTSAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRydWUgaWYgTU9SRUNPUkUgY2Fubm90IHJlbGVhc2Ugc3BhY2UgYmFjayB0byB0aGUgc3lzdGVtIHdoZW4gZ2l2ZW4KKyAgbmVnYXRpdmUgYXJndW1lbnRzLiBUaGlzIGlzIGdlbmVyYWxseSBuZWNlc3Nhcnkgb25seSBpZiB5b3UgYXJlCisgIHVzaW5nIGEgaGFuZC1jcmFmdGVkIE1PUkVDT1JFIGZ1bmN0aW9uIHRoYXQgY2Fubm90IGhhbmRsZSBuZWdhdGl2ZQorICBhcmd1bWVudHMuCisKK05PX1NFR01FTlRfVFJBVkVSU0FMICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgbm9uLXplcm8sIHN1cHByZXNzZXMgdHJhdmVyc2FscyBvZiBtZW1vcnkgc2VnbWVudHMKKyAgcmV0dXJuZWQgYnkgZWl0aGVyIE1PUkVDT1JFIG9yIENBTExfTU1BUC4gVGhpcyBkaXNhYmxlcworICBtZXJnaW5nIG9mIHNlZ21lbnRzIHRoYXQgYXJlIGNvbnRpZ3VvdXMsIGFuZCBzZWxlY3RpdmVseQorICByZWxlYXNpbmcgdGhlbSB0byB0aGUgT1MgaWYgdW51c2VkLCBidXQgYm91bmRzIGV4ZWN1dGlvbiB0aW1lcy4KKworSEFWRV9NTUFQICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKQorICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIG1tYXAgb3IgYW4gZW11bGF0aW9uIG9mIGl0LiAgSWYgc28sIGFuZAorICBIQVZFX01PUkVDT1JFIGlzIG5vdCB0cnVlLCBNTUFQIGlzIHVzZWQgZm9yIGFsbCBzeXN0ZW0KKyAgYWxsb2NhdGlvbi4gSWYgc2V0IGFuZCBIQVZFX01PUkVDT1JFIGlzIHRydWUgYXMgd2VsbCwgTU1BUCBpcworICBwcmltYXJpbHkgdXNlZCB0byBkaXJlY3RseSBhbGxvY2F0ZSB2ZXJ5IGxhcmdlIGJsb2Nrcy4gSXQgaXMgYWxzbworICB1c2VkIGFzIGEgYmFja3VwIHN0cmF0ZWd5IGluIGNhc2VzIHdoZXJlIE1PUkVDT1JFIGZhaWxzIHRvIHByb3ZpZGUKKyAgc3BhY2UgZnJvbSBzeXN0ZW0uIE5vdGU6IEEgc2luZ2xlIGNhbGwgdG8gTVVOTUFQIGlzIGFzc3VtZWQgdG8gYmUKKyAgYWJsZSB0byB1bm1hcCBtZW1vcnkgdGhhdCBtYXkgaGF2ZSBiZSBhbGxvY2F0ZWQgdXNpbmcgbXVsdGlwbGUgY2FsbHMKKyAgdG8gTU1BUCwgc28gbG9uZyBhcyB0aGV5IGFyZSBhZGphY2VudC4KKworSEFWRV9NUkVNQVAgICAgICAgICAgICAgICBkZWZhdWx0OiAxIG9uIGxpbnV4LCBlbHNlIDAKKyAgSWYgdHJ1ZSByZWFsbG9jKCkgdXNlcyBtcmVtYXAoKSB0byByZS1hbGxvY2F0ZSBsYXJnZSBibG9ja3MgYW5kCisgIGV4dGVuZCBvciBzaHJpbmsgYWxsb2NhdGlvbiBzcGFjZXMuCisKK01NQVBfQ0xFQVJTICAgICAgICAgICAgICAgZGVmYXVsdDogMSBleGNlcHQgb24gV0lOQ0UuCisgIFRydWUgaWYgbW1hcCBjbGVhcnMgbWVtb3J5IHNvIGNhbGxvYyBkb2Vzbid0IG5lZWQgdG8uIFRoaXMgaXMgdHJ1ZQorICBmb3Igc3RhbmRhcmQgdW5peCBtbWFwIHVzaW5nIC9kZXYvemVybyBhbmQgb24gV0lOMzIgZXhjZXB0IGZvciBXSU5DRS4KKworVVNFX0JVSUxUSU5fRkZTICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIHRoZSBidWlsdGluIGZmcygpIGZ1bmN0aW9uIHRvIGNvbXB1dGUgaW5kaWNlcy4KKyAgU29tZSBjb21waWxlcnMgbWF5IHJlY29nbml6ZSBhbmQgaW50cmluc2lmeSBmZnMgdG8gYmUgZmFzdGVyIHRoYW4gdGhlCisgIHN1cHBsaWVkIEMgdmVyc2lvbi4gQWxzbywgdGhlIGNhc2Ugb2YgeDg2IHVzaW5nIGdjYyBpcyBzcGVjaWFsLWNhc2VkCisgIHRvIGFuIGFzbSBpbnN0cnVjdGlvbiwgc28gaXMgYWxyZWFkeSBhcyBmYXN0IGFzIGl0IGNhbiBiZSwgYW5kIHNvCisgIHRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0LiBTaW1pbGFybHkgZm9yIFdpbjMyIHVuZGVyIHJlY2VudCBNUyBjb21waWxlcnMuCisgIChPbiBtb3N0IHg4NnMsIHRoZSBhc20gdmVyc2lvbiBpcyBvbmx5IHNsaWdodGx5IGZhc3RlciB0aGFuIHRoZSBDIHZlcnNpb24uKQorCittYWxsb2NfZ2V0cGFnZXNpemUgICAgICAgICBkZWZhdWx0OiBkZXJpdmUgZnJvbSBzeXN0ZW0gaW5jbHVkZXMsIG9yIDQwOTYuCisgIFRoZSBzeXN0ZW0gcGFnZSBzaXplLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGlzIG1hbGxvYyBtYW5hZ2VzCisgIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gaW4gcGFnZS1zaXplIHVuaXRzLiAgVGhpcyBtYXkgYmUgKGFuZAorICB1c3VhbGx5IGlzKSBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgY29uc3RhbnQuIFRoaXMgaXMgaWdub3JlZAorICBpZiBXSU4zMiwgd2hlcmUgcGFnZSBzaXplIGlzIGRldGVybWluZWQgdXNpbmcgZ2V0U3lzdGVtSW5mbyBkdXJpbmcKKyAgaW5pdGlhbGl6YXRpb24uCisKK1VTRV9ERVZfUkFORE9NICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSAvZGV2L3JhbmRvbSB0byBpbml0aWFsaXplIHNlY3VyZSBtYWdpYyBzZWVkIGZvcgorICBzdGFtcGluZyBmb290ZXJzLiBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4KKworTk9fTUFMTElORk8gICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiBkZWZpbmVkLCBkb24ndCBjb21waWxlICJtYWxsaW5mbyIuIFRoaXMgY2FuIGJlIGEgc2ltcGxlIHdheQorICBvZiBkZWFsaW5nIHdpdGggbWlzbWF0Y2hlcyBiZXR3ZWVuIHN5c3RlbSBkZWNsYXJhdGlvbnMgYW5kCisgIHRob3NlIGluIHRoaXMgZmlsZS4KKworTUFMTElORk9fRklFTERfVFlQRSAgICAgICAgZGVmYXVsdDogc2l6ZV90CisgIFRoZSB0eXBlIG9mIHRoZSBmaWVsZHMgaW4gdGhlIG1hbGxpbmZvIHN0cnVjdC4gVGhpcyB3YXMgb3JpZ2luYWxseQorICBkZWZpbmVkIGFzICJpbnQiIGluIFNWSUQgZXRjLCBidXQgaXMgbW9yZSB1c2VmdWxseSBkZWZpbmVkIGFzCisgIHNpemVfdC4gVGhlIHZhbHVlIGlzIHVzZWQgb25seSBpZiAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBpcyBub3Qgc2V0CisKK1JFQUxMT0NfWkVST19CWVRFU19GUkVFUyAgICBkZWZhdWx0OiBub3QgZGVmaW5lZAorICBUaGlzIHNob3VsZCBiZSBzZXQgaWYgYSBjYWxsIHRvIHJlYWxsb2Mgd2l0aCB6ZXJvIGJ5dGVzIHNob3VsZAorICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsCisgIHNpbmNlIHRoaXMgbWFsbG9jIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBmb3IgbWFsbG9jKDApLCBzbyBkb2VzCisgIHJlYWxsb2MocCwgMCkuCisKK0xBQ0tTX1VOSVNURF9ILCBMQUNLU19GQ05UTF9ILCBMQUNLU19TWVNfUEFSQU1fSCwgTEFDS1NfU1lTX01NQU5fSAorTEFDS1NfU1RSSU5HU19ILCBMQUNLU19TVFJJTkdfSCwgTEFDS1NfU1lTX1RZUEVTX0gsICBMQUNLU19FUlJOT19ICitMQUNLU19TVERMSUJfSCAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZCB1bmxlc3Mgb24gV0lOMzIKKyAgRGVmaW5lIHRoZXNlIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlc2UgaGVhZGVyIGZpbGVzLgorICBZb3UgbWlnaHQgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zIHRoZXkgcHJvdmlkZS4KKworREVGQVVMVF9HUkFOVUxBUklUWSAgICAgICAgZGVmYXVsdDogcGFnZSBzaXplIGlmIE1PUkVDT1JFX0NPTlRJR1VPVVMsCisJCQkJc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkgaW4gV0lOMzIsCisJCQkJb3RoZXJ3aXNlIDY0Sy4KKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB4KQorICBUaGUgdW5pdCBmb3IgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uICBPbgorICBtb3N0IHN5c3RlbXMgd2l0aCBjb250aWd1b3VzIE1PUkVDT1JFLCB0aGVyZSBpcyBubyByZWFzb24gdG8KKyAgbWFrZSB0aGlzIG1vcmUgdGhhbiBhIHBhZ2UuIEhvd2V2ZXIsIHN5c3RlbXMgd2l0aCBNTUFQIHRlbmQgdG8KKyAgZWl0aGVyIHJlcXVpcmUgb3IgZW5jb3VyYWdlIGxhcmdlciBncmFudWxhcml0aWVzLiAgWW91IGNhbiBpbmNyZWFzZQorICB0aGlzIHZhbHVlIHRvIHByZXZlbnQgc3lzdGVtIGFsbG9jYXRpb24gZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBzbworICBvZnRlbiwgZXNwZWNpYWxseSBpZiB0aGV5IGFyZSBzbG93LiAgVGhlIHZhbHVlIG11c3QgYmUgYXQgbGVhc3Qgb25lCisgIHBhZ2UgYW5kIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBTZXR0aW5nIHRvIDAgY2F1c2VzIGluaXRpYWxpemF0aW9uCisgIHRvIGVpdGhlciBwYWdlIHNpemUgb3Igd2luMzIgcmVnaW9uIHNpemUuICAoTm90ZTogSW4gcHJldmlvdXMKKyAgdmVyc2lvbnMgb2YgbWFsbG9jLCB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIG9wdGlvbiB3YXMgY2FsbGVkCisgICJUT1BfUEFEIikKKworREVGQVVMVF9UUklNX1RIUkVTSE9MRCAgICBkZWZhdWx0OiAyTUIKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX1RSSU1fVEhSRVNIT0xELCB4KQorICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHRvcC1tb3N0IG1lbW9yeSB0byBrZWVwIGJlZm9yZQorICByZWxlYXNpbmcgdmlhIG1hbGxvY190cmltIGluIGZyZWUoKS4gIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkKKyAgdXNlZnVsIGluIGxvbmctbGl2ZWQgcHJvZ3JhbXMgdXNpbmcgY29udGlndW91cyBNT1JFQ09SRS4gIEJlY2F1c2UKKyAgdHJpbW1pbmcgdmlhIHNicmsgY2FuIGJlIHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuIHNvbWV0aW1lcyBiZQorICB3YXN0ZWZ1bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkIGFsbG9jYXRlCisgIG1vcmUgbGFyZ2UgY2h1bmtzKSB0aGUgdmFsdWUgc2hvdWxkIGJlIGhpZ2ggZW5vdWdoIHNvIHRoYXQgeW91cgorICBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3b3VsZCBpbXByb3ZlIGJ5IHJlbGVhc2luZyB0aGlzIG11Y2gKKyAgbWVtb3J5LiAgQXMgYSByb3VnaCBndWlkZSwgeW91IG1pZ2h0IHNldCB0byBhIHZhbHVlIGNsb3NlIHRvIHRoZQorICBhdmVyYWdlIHNpemUgb2YgYSBwcm9jZXNzIChwcm9ncmFtKSBydW5uaW5nIG9uIHlvdXIgc3lzdGVtLgorICBSZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeSB3b3VsZCBhbGxvdyBzdWNoIGEgcHJvY2VzcyB0byBydW4gaW4KKyAgbWVtb3J5LiAgR2VuZXJhbGx5LCBpdCBpcyB3b3J0aCB0dW5pbmcgdHJpbSB0aHJlc2hvbGRzIHdoZW4gYQorICBwcm9ncmFtIHVuZGVyZ29lcyBwaGFzZXMgd2hlcmUgc2V2ZXJhbCBsYXJnZSBjaHVua3MgYXJlIGFsbG9jYXRlZAorICBhbmQgcmVsZWFzZWQgaW4gd2F5cyB0aGF0IGNhbiByZXVzZSBlYWNoIG90aGVyJ3Mgc3RvcmFnZSwgcGVyaGFwcworICBtaXhlZCB3aXRoIHBoYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8gc3VjaCBjaHVua3MgYXQgYWxsLiBUaGUgdHJpbQorICB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUgdG8gaGF2ZSBhbnkgdXNlZnVsIGVmZmVjdC4gIFRvCisgIGRpc2FibGUgdHJpbW1pbmcgY29tcGxldGVseSwgeW91IGNhbiBzZXQgdG8gTUFYX1NJWkVfVC4gTm90ZSB0aGF0IHRoZSB0cmljaworICBzb21lIHBlb3BsZSB1c2Ugb2YgbWFsbG9jaW5nIGEgaHVnZSBzcGFjZSBhbmQgdGhlbiBmcmVlaW5nIGl0IGF0CisgIHByb2dyYW0gc3RhcnR1cCwgaW4gYW4gYXR0ZW1wdCB0byByZXNlcnZlIHN5c3RlbSBtZW1vcnksIGRvZXNuJ3QKKyAgaGF2ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IHVuZGVyIGF1dG9tYXRpYyB0cmltbWluZywgc2luY2UgdGhhdCBtZW1vcnkKKyAgd2lsbCBpbW1lZGlhdGVseSBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgorCitERUZBVUxUX01NQVBfVEhSRVNIT0xEICAgICAgIGRlZmF1bHQ6IDI1NksKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX01NQVBfVEhSRVNIT0xELCB4KQorICBUaGUgcmVxdWVzdCBzaXplIHRocmVzaG9sZCBmb3IgdXNpbmcgTU1BUCB0byBkaXJlY3RseSBzZXJ2aWNlIGEKKyAgcmVxdWVzdC4gUmVxdWVzdHMgb2YgYXQgbGVhc3QgdGhpcyBzaXplIHRoYXQgY2Fubm90IGJlIGFsbG9jYXRlZAorICB1c2luZyBhbHJlYWR5LWV4aXN0aW5nIHNwYWNlIHdpbGwgYmUgc2VydmljZWQgdmlhIG1tYXAuICAoSWYgZW5vdWdoCisgIG5vcm1hbCBmcmVlZCBzcGFjZSBhbHJlYWR5IGV4aXN0cyBpdCBpcyB1c2VkIGluc3RlYWQuKSAgVXNpbmcgbW1hcAorICBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0aGF0IHRoZXkgY2FuIGJlCisgIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJvbSB0aGUgaG9zdCBzeXN0ZW0uIEEgcmVxdWVzdAorICBzZXJ2aWNlZCB0aHJvdWdoIG1tYXAgaXMgbmV2ZXIgcmV1c2VkIGJ5IGFueSBvdGhlciByZXF1ZXN0IChhdCBsZWFzdAorICBub3QgZGlyZWN0bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28gaGFwcGVuIHRvIHJlbWFwIHN1Y2Nlc3NpdmUKKyAgcmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4gIFNlZ3JlZ2F0aW5nIHNwYWNlIGluIHRoaXMgd2F5IGhhcworICB0aGUgYmVuZWZpdHMgdGhhdDogTW1hcHBlZCBzcGFjZSBjYW4gYWx3YXlzIGJlIGluZGl2aWR1YWxseSByZWxlYXNlZAorICBiYWNrIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIGhlbHBzIGtlZXAgdGhlIHN5c3RlbSBsZXZlbCBtZW1vcnkgZGVtYW5kcworICBvZiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSBsb3cuICBBbHNvLCBtYXBwZWQgbWVtb3J5IGRvZXNuJ3QgYmVjb21lCisgIGBsb2NrZWQnIGJldHdlZW4gb3RoZXIgY2h1bmtzLCBhcyBjYW4gaGFwcGVuIHdpdGggbm9ybWFsbHkgYWxsb2NhdGVkCisgIGNodW5rcywgd2hpY2ggbWVhbnMgdGhhdCBldmVuIHRyaW1taW5nIHZpYSBtYWxsb2NfdHJpbSB3b3VsZCBub3QKKyAgcmVsZWFzZSB0aGVtLiAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGUgc3BhY2UKKyAgY2Fubm90IGJlIHJlY2xhaW1lZCwgY29uc29saWRhdGVkLCBhbmQgdGhlbiB1c2VkIHRvIHNlcnZpY2UgbGF0ZXIKKyAgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLiAgVGhlIGFkdmFudGFnZXMgb2YgbW1hcAorICBuZWFybHkgYWx3YXlzIG91dHdlaWdoIGRpc2FkdmFudGFnZXMgZm9yICJsYXJnZSIgY2h1bmtzLCBidXQgdGhlCisgIHZhbHVlIG9mICJsYXJnZSIgbWF5IHZhcnkgYWNyb3NzIHN5c3RlbXMuICBUaGUgZGVmYXVsdCBpcyBhbgorICBlbXBpcmljYWxseSBkZXJpdmVkIHZhbHVlIHRoYXQgd29ya3Mgd2VsbCBpbiBtb3N0IHN5c3RlbXMuIFlvdSBjYW4KKyAgZGlzYWJsZSBtbWFwIGJ5IHNldHRpbmcgdG8gTUFYX1NJWkVfVC4KKworTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAgIGRlZmF1bHQ6IDQwOTUgdW5sZXNzIG5vdCBIQVZFX01NQVAKKyAgVGhlIG51bWJlciBvZiBjb25zb2xpZGF0ZWQgZnJlZXMgYmV0d2VlbiBjaGVja3MgdG8gcmVsZWFzZQorICB1bnVzZWQgc2VnbWVudHMgd2hlbiBmcmVlaW5nLiBXaGVuIHVzaW5nIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLAorICBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgbXNwYWNlcywgY2hlY2tpbmcgb25seSBmb3IgdG9wbW9zdCBzcGFjZQorICBkb2Vzbid0IGFsd2F5cyBzdWZmaWNlIHRvIHRyaWdnZXIgdHJpbW1pbmcuIFRvIGNvbXBlbnNhdGUgZm9yIHRoaXMsCisgIGZyZWUoKSB3aWxsLCB3aXRoIGEgcGVyaW9kIG9mIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKG9yIHRoZQorICBjdXJyZW50IG51bWJlciBvZiBzZWdtZW50cywgaWYgZ3JlYXRlcikgdHJ5IHRvIHJlbGVhc2UgdW51c2VkCisgIHNlZ21lbnRzIHRvIHRoZSBPUyB3aGVuIGZyZWVpbmcgY2h1bmtzIHRoYXQgcmVzdWx0IGluCisgIGNvbnNvbGlkYXRpb24uIFRoZSBiZXN0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBhIGNvbXByb21pc2UKKyAgYmV0d2VlbiBzbG93aW5nIGRvd24gZnJlZXMgd2l0aCByZWxhdGl2ZWx5IGNvc3RseSBjaGVja3MgdGhhdAorICByYXJlbHkgdHJpZ2dlciB2ZXJzdXMgaG9sZGluZyBvbiB0byB1bnVzZWQgbWVtb3J5LiBUbyBlZmZlY3RpdmVseQorICBkaXNhYmxlLCBzZXQgdG8gTUFYX1NJWkVfVC4gVGhpcyBtYXkgbGVhZCB0byBhIHZlcnkgc2xpZ2h0IHNwZWVkCisgIGltcHJvdmVtZW50IGF0IHRoZSBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeS4KKyovCisKKy8qIFZlcnNpb24gaWRlbnRpZmllciB0byBhbGxvdyBwZW9wbGUgdG8gc3VwcG9ydCBtdWx0aXBsZSB2ZXJzaW9ucyAqLworI2lmbmRlZiBETE1BTExPQ19WRVJTSU9OCisjZGVmaW5lIERMTUFMTE9DX1ZFUlNJT04gMjA4MDQKKyNlbmRpZiAvKiBETE1BTExPQ19WRVJTSU9OICovCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorI2RlZmluZSBfR05VX1NPVVJDRSAxCisjZW5kaWYKKworI2lmbmRlZiBXSU4zMgorI2lmZGVmIF9XSU4zMgorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgIC8qIF9XSU4zMiAqLworI2lmZGVmIF9XSU4zMl9XQ0UKKyNkZWZpbmUgTEFDS1NfRkNOVExfSAorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgLyogX1dJTjMyX1dDRSAqLworI2VuZGlmICAvKiBXSU4zMiAqLworI2lmZGVmIFdJTjMyCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNpZm5kZWYgX1dJTjMyX1dJTk5UCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDQwMworI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBIQVZFX01NQVAgMQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gKKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAorI2RlZmluZSBMQUNLU19TVFJJTkdfSAorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1RZUEVTX0gKKyNkZWZpbmUgTEFDS1NfRVJSTk9fSAorI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZW5kaWYgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZkZWYgX1dJTjMyX1dDRSAvKiBXSU5DRSByZXBvcnRlZGx5IGRvZXMgbm90IGNsZWFyICovCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDAKKyNlbHNlCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAvKiBfV0lOMzJfV0NFICovCisjZW5kaWYgIC8qIFdJTjMyICovCisKKyNpZiBkZWZpbmVkKERBUldJTikgfHwgZGVmaW5lZChfREFSV0lOKQorLyogTWFjIE9TWCBkb2NzIGFkdmlzZSBub3QgdG8gdXNlIHNicms7IGl0IHNlZW1zIGJldHRlciB0byB1c2UgbW1hcCAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2RlZmluZSBIQVZFX01NQVAgMQorLyogT1NYIGFsbG9jYXRvcnMgcHJvdmlkZSAxNiBieXRlIGFsaWdubWVudCAqLworI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpMTZVKQorI2VuZGlmCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNlbmRpZiAgLyogREFSV0lOICovCisKKyNpZm5kZWYgTEFDS1NfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gIC8qIEZvciBzaXplX3QgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8KKworLyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8KKyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCisKKyNpZm5kZWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAwICAgICAvKiBkZWZpbmUgdG8gYSB2YWx1ZSAqLworI2Vsc2UKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjaWZuZGVmIE1TUEFDRVMKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgTVNQQUNFUyAxCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBNU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIE1TUEFDRVMgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KThVKQorI2VuZGlmICAvKiBNQUxMT0NfQUxJR05NRU5UICovCisjaWZuZGVmIEZPT1RFUlMKKyNkZWZpbmUgRk9PVEVSUyAwCisjZW5kaWYgIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgQUJPUlQKKyNkZWZpbmUgQUJPUlQgIGFib3J0KCkKKyNlbmRpZiAgLyogQUJPUlQgKi8KKyNpZm5kZWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgMQorI2VuZGlmICAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2lmbmRlZiBQUk9DRUVEX09OX0VSUk9SCisjZGVmaW5lIFBST0NFRURfT05fRVJST1IgMAorI2VuZGlmICAvKiBQUk9DRUVEX09OX0VSUk9SICovCisjaWZuZGVmIFVTRV9MT0NLUworI2RlZmluZSBVU0VfTE9DS1MgMAorI2VuZGlmICAvKiBVU0VfTE9DS1MgKi8KKyNpZm5kZWYgVVNFX1NQSU5fTE9DS1MKKyNpZiBVU0VfTE9DS1MgJiYgKGRlZmluZWQoX19HTlVDX18pICYmICgoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkpKSB8fCAoZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMTApCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDAKKyNlbmRpZiAvKiBVU0VfTE9DS1MgJiYgLi4uICovCisjZW5kaWYgLyogVVNFX1NQSU5fTE9DS1MgKi8KKyNpZm5kZWYgSU5TRUNVUkUKKyNkZWZpbmUgSU5TRUNVUkUgMAorI2VuZGlmICAvKiBJTlNFQ1VSRSAqLworI2lmbmRlZiBIQVZFX01NQVAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjaWZuZGVmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAgLyogTU1BUF9DTEVBUlMgKi8KKyNpZm5kZWYgSEFWRV9NUkVNQVAKKyNpZmRlZiBsaW51eAorI2RlZmluZSBIQVZFX01SRU1BUCAxCisjZWxzZSAgIC8qIGxpbnV4ICovCisjZGVmaW5lIEhBVkVfTVJFTUFQIDAKKyNlbmRpZiAgLyogbGludXggKi8KKyNlbmRpZiAgLyogSEFWRV9NUkVNQVAgKi8KKyNpZm5kZWYgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTiAgZXJybm8gPSBFTk9NRU07CisjZW5kaWYgIC8qIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAxCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjaWYgIUhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAwCisjZWxzZSAgIC8qICFIQVZFX01PUkVDT1JFICovCisjZGVmaW5lIE1PUkVDT1JFX0RFRkFVTFQgc2JyaworI2lmbmRlZiBNT1JFQ09SRV9DT05USUdVT1VTCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2lmIChNT1JFQ09SRV9DT05USUdVT1VTIHx8IGRlZmluZWQoV0lOMzIpKQorI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgwKSAgLyogMCBtZWFucyB0byBjb21wdXRlIGluIGluaXRfbXBhcmFtcyAqLworI2Vsc2UgICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKChzaXplX3QpNjRVICogKHNpemVfdCkxMDI0VSkKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2VuZGlmICAvKiBERUZBVUxUX0dSQU5VTEFSSVRZICovCisjaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoKHNpemVfdCkyVSAqIChzaXplX3QpMTAyNFUgKiAoc2l6ZV90KTEwMjRVKQorI2Vsc2UgICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNlbmRpZiAgLyogREVGQVVMVF9UUklNX1RIUkVTSE9MRCAqLworI2lmbmRlZiBERUZBVUxUX01NQVBfVEhSRVNIT0xECisjaWYgSEFWRV9NTUFQCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKChzaXplX3QpMjU2VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjZW5kaWYgIC8qIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKi8KKyNpZm5kZWYgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURQorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIDQwOTUKKyNlbHNlCisjZGVmaW5lIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgTUFYX1NJWkVfVAorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2VuZGlmIC8qIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKi8KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwCisjZW5kaWYgIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmbmRlZiBVU0VfREVWX1JBTkRPTQorI2RlZmluZSBVU0VfREVWX1JBTkRPTSAwCisjZW5kaWYgIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmICAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCisjaWZuZGVmIE5PX1NFR01FTlRfVFJBVkVSU0FMCisjZGVmaW5lIE5PX1NFR01FTlRfVFJBVkVSU0FMIDAKKyNlbmRpZiAvKiBOT19TRUdNRU5UX1RSQVZFUlNBTCAqLworCisvKgorICBtYWxsb3B0IHR1bmluZyBvcHRpb25zLiAgU1ZJRC9YUEcgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtZXRlcgorICBudW1iZXJzIGZvciBtYWxsb3B0LCBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZQorICBhcmUgdXNlZCBpbiB0aGlzIG1hbGxvYywgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzCisgIG1hbGxvYyBkb2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBvcHRpb25zLgorKi8KKworI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAoLTEpCisjZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikKKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFsbGluZm8gZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBUaGlzIHZlcnNpb24gb2YgbWFsbG9jIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBTVklEL1hQRyBtYWxsaW5mbworICByb3V0aW5lIHRoYXQgcmV0dXJucyBhIHN0cnVjdCBjb250YWluaW5nIHVzYWdlIHByb3BlcnRpZXMgYW5kCisgIHN0YXRpc3RpY3MuIEl0IHNob3VsZCB3b3JrIG9uIGFueSBzeXN0ZW0gdGhhdCBoYXMgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZGVmaW5pbmcgc3RydWN0IG1hbGxpbmZvLiAgVGhlIG1haW4KKyAgZGVjbGFyYXRpb24gbmVlZGVkIGlzIHRoZSBtYWxsaW5mbyBzdHJ1Y3QgdGhhdCBpcyByZXR1cm5lZCAoYnktY29weSkKKyAgYnkgbWFsbGluZm8oKS4gIFRoZSBtYWxsb2luZm8gc3RydWN0IGNvbnRhaW5zIGEgYnVuY2ggb2YgZmllbGRzIHRoYXQKKyAgYXJlIG5vdCBldmVuIG1lYW5pbmdmdWwgaW4gdGhpcyB2ZXJzaW9uIG9mIG1hbGxvYy4gIFRoZXNlIGZpZWxkcyBhcmUKKyAgYXJlIGluc3RlYWQgZmlsbGVkIGJ5IG1hbGxpbmZvKCkgd2l0aCBvdGhlciBudW1iZXJzIHRoYXQgbWlnaHQgYmUgb2YKKyAgaW50ZXJlc3QuCisKKyAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBzaG91bGQgYmUgc2V0IGlmIHlvdSBoYXZlIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGZpbGUgdGhhdCBpbmNsdWRlcyBhIGRlY2xhcmF0aW9uIG9mIHN0cnVjdAorICBtYWxsaW5mby4gIElmIHNvLCBpdCBpcyBpbmNsdWRlZDsgZWxzZSBhIGNvbXBsaWFudCB2ZXJzaW9uIGlzCisgIGRlY2xhcmVkIGJlbG93LiAgVGhlc2UgbXVzdCBiZSBwcmVjaXNlbHkgdGhlIHNhbWUgZm9yIG1hbGxpbmZvKCkgdG8KKyAgd29yay4gIFRoZSBvcmlnaW5hbCBTVklEIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3QsIGRlZmluZWQgb24gbW9zdAorICBzeXN0ZW1zIHdpdGggbWFsbGluZm8sIGRlY2xhcmVzIGFsbCBmaWVsZHMgYXMgaW50cy4gQnV0IHNvbWUgb3RoZXJzCisgIGRlZmluZSBhcyB1bnNpZ25lZCBsb25nLiBJZiB5b3VyIHN5c3RlbSBkZWZpbmVzIHRoZSBmaWVsZHMgdXNpbmcgYQorICB0eXBlIG9mIGRpZmZlcmVudCB3aWR0aCB0aGFuIGxpc3RlZCBoZXJlLCB5b3UgTVVTVCAjaW5jbHVkZSB5b3VyCisgIHN5c3RlbSB2ZXJzaW9uIGFuZCAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0guCisqLworCisvKiAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKworI2lmZGVmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0gKKyNpbmNsdWRlICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiCisjZWxzZSAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjaWZuZGVmIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRAorI2RlZmluZSBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgMQorc3RydWN0IG1hbGxpbmZvIHsKKyAgTUFMTElORk9fRklFTERfVFlQRSBhcmVuYTsgICAgLyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHNtYmxrczsgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtzOyAgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmc21ibGtzOyAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBrZWVwY29zdDsgLyogcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLworfTsKKyNlbmRpZiAvKiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgKi8KKyNlbmRpZiAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgVHJ5IHRvIHBlcnN1YWRlIGNvbXBpbGVycyB0byBpbmxpbmUuIFRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IKKyAgaW5saW5pbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLCBzbyB0aGVzZSBhcmVuJ3QgdXNlZCBmb3IgdGhlbS4KKyovCisKKyNpZmRlZiBfX01JTkdXNjRfVkVSU0lPTl9NQUpPUgorI3VuZGVmIEZPUkNFSU5MSU5FCisjZW5kaWYKKyNpZm5kZWYgRk9SQ0VJTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIEZPUkNFSU5MSU5FIF9faW5saW5lIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKKyAgI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIEZPUkNFSU5MSU5FIF9fZm9yY2VpbmxpbmUKKyAgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTk9JTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBOT0lOTElORSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICAjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgTk9JTkxJTkUgX19kZWNsc3BlYyhub2lubGluZSkKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIE5PSU5MSU5FCisgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORSBpbmxpbmUKKyNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORQorI2VuZGlmCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgVVNFX0RMX1BSRUZJWAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKKyNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgICBtYWxsb2NfdXNhYmxlX3NpemUKKyNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjYXVzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBUbyB3b3JrYXJvdW5kIHRoZSBmYWN0IHRoYXQgbWFsbG9wdCBpcyBzcGVjaWZpZWQgdG8gdXNlIGludCwKKyAgbm90IHNpemVfdCBwYXJhbWV0ZXJzLCB0aGUgdmFsdWUgLTEgaXMgc3BlY2lhbGx5IHRyZWF0ZWQgYXMgdGhlCisgIG1heGltdW0gdW5zaWduZWQgc2l6ZV90IHZhbHVlLgorCisgIFNWSUQvWFBHL0FOU0kgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtIG51bWJlcnMgZm9yIG1hbGxvcHQsCisgIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlIGFyZSB1c2UgaW4gdGhpcyBtYWxsb2MsCisgIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcyBtYWxsb2MgYWxzbyBzdXBwb3J0cyBvdGhlcgorICBvcHRpb25zIGluIG1hbGxvcHQuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4gIEJyaWVmbHksIHN1cHBvcnRlZAorICBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzIChsaXN0ZWQgZGVmYXVsdHMgYXJlIGZvciAidHlwaWNhbCIKKyAgY29uZmlndXJhdGlvbnMpLgorCisgIFN5bWJvbCAgICAgICAgICAgIHBhcmFtICMgIGRlZmF1bHQgICAgYWxsb3dlZCBwYXJhbSB2YWx1ZXMKKyAgTV9UUklNX1RIUkVTSE9MRCAgICAgLTEgICAyKjEwMjQqMTAyNCAgIGFueSAgICgtMSBkaXNhYmxlcykKKyAgTV9HUkFOVUxBUklUWSAgICAgICAgLTIgICAgIHBhZ2Ugc2l6ZSAgIGFueSBwb3dlciBvZiAyID49IHBhZ2Ugc2l6ZQorICBNX01NQVBfVEhSRVNIT0xEICAgICAtMyAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBwb3J0KQorKi8KK2ludCBkbG1hbGxvcHQoaW50LCBpbnQpOworCisvKgorICBtYWxsb2NfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKKyAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCisgIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworLyoKKyAgbWFsbG9jX21heF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzCisgIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlCisgIGhhcyBiZWVuIHJlY2xhaW1lZCBieSB0aGUgc3lzdGVtLiBUaGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisgIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLAorICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZAorICBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLiAgRXZlbiBpZiBsb2NrcyBhcmUKKyAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQKKyAgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1hbGxpbmZvKCkKKyAgUmV0dXJucyAoYnkgY29weSkgYSBzdHJ1Y3QgY29udGFpbmluZyB2YXJpb3VzIHN1bW1hcnkgc3RhdGlzdGljczoKKworICBhcmVuYTogICAgIGN1cnJlbnQgdG90YWwgbm9uLW1tYXBwZWQgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgIG9yZGJsa3M6ICAgdGhlIG51bWJlciBvZiBmcmVlIGNodW5rcworICBzbWJsa3M6ICAgIGFsd2F5cyB6ZXJvLgorICBoYmxrczogICAgIGN1cnJlbnQgbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucworICBoYmxraGQ6ICAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gbW1hcHBlZCByZWdpb25zCisgIHVzbWJsa3M6ICAgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlLiBUaGlzIHdpbGwgYmUgZ3JlYXRlcgorCQl0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLgorICBmc21ibGtzOiAgIGFsd2F5cyB6ZXJvCisgIHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFwcGVkKQorICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UKKyAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkCisJICAgICAgIGJhY2sgdG8gc3lzdGVtIHZpYSBtYWxsb2NfdHJpbS4gKCJpZGVhbGx5IiBtZWFucyB0aGF0CisJICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCisgIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQorICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKKyAgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKKyAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcworICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQorICBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxvYyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcworICBzcGFjZSB0byByZXByZXNlbnQgZWxlbWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAorICBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkKKyAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25zdHJ1Y3RpbmcgbGFyZ2UgZGF0YQorICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCisgIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcworICBtYXkgbGF0ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07CisKKyAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7CisgICAgc3RydWN0IE5vZGUqKiBwb29sOworICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9kZXNfbmVlZGVkKCk7CisgICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7CisgICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7CisgICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7CisgICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uCisgICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpCisgICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOworICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikKKyAgICByZXR1cm4gZmlyc3Q7CisgIH0KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7CisKKy8qCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCisgIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKKyAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKKyAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxvYywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAorICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFnZ3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdQorICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAorICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IEhlYWQgeyAuLi4gfQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9CisKKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7CisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOworICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07CisgICAgdm9pZCogY2h1bmtzWzNdOworICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQorICAgICAgZGllKCk7CisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOworICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOworICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKKyAgICAvLyAuLi4KKyAgfQorCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAorICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KKworICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKKyAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKik7CisKKworLyoKKyAgcHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgorICovCit2b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYworICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5CisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCisgIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQorICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCisqLworaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHModm9pZCk7CisKKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApOworCisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBpbgorICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gKKyAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVtIHNpemUgY29uc3RyYWludHMuCisgIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0IHdvcnJ5aW5nIGFib3V0CisgIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAorICBwcm9ncmFtbWluZyBwcmFjdGljZS4gbWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgorICBkZWJ1Z2dpbmcgYW5kIGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgorCisgIHAgPSBtYWxsb2Mobik7CisgIGFzc2VydChtYWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKKyovCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCopOworCisKKyNpZiBNU1BBQ0VTCisKKy8qCisgIG1zcGFjZSBpcyBhbiBvcGFxdWUgdHlwZSByZXByZXNlbnRpbmcgYW4gaW5kZXBlbmRlbnQKKyAgcmVnaW9uIG9mIHNwYWNlIHRoYXQgc3VwcG9ydHMgbXNwYWNlX21hbGxvYywgZXRjLgorKi8KK3R5cGVkZWYgdm9pZCogbXNwYWNlOworCisvKgorICBjcmVhdGVfbXNwYWNlIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5kZXBlbmRlbnQgc3BhY2Ugd2l0aCB0aGUKKyAgZ2l2ZW4gaW5pdGlhbCBjYXBhY2l0eSwgb3IsIGlmIDAsIHRoZSBkZWZhdWx0IGdyYW51bGFyaXR5IHNpemUuICBJdAorICByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3lzdGVtIG1lbW9yeSBhdmFpbGFibGUgdG8gY3JlYXRlIHRoZQorICBzcGFjZS4gIElmIGFyZ3VtZW50IGxvY2tlZCBpcyBub24temVybywgdGhlIHNwYWNlIHVzZXMgYSBzZXBhcmF0ZQorICBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzLiBUaGUgY2FwYWNpdHkgb2YgdGhlIHNwYWNlIHdpbGwgZ3JvdworICBkeW5hbWljYWxseSBhcyBuZWVkZWQgdG8gc2VydmljZSBtc3BhY2VfbWFsbG9jIHJlcXVlc3RzLiAgWW91IGNhbgorICBjb250cm9sIHRoZSBzaXplcyBvZiBpbmNyZW1lbnRhbCBpbmNyZWFzZXMgb2YgdGhpcyBzcGFjZSBieQorICBjb21waWxpbmcgd2l0aCBhIGRpZmZlcmVudCBERUZBVUxUX0dSQU5VTEFSSVRZIG9yIGR5bmFtaWNhbGx5CisgIHNldHRpbmcgd2l0aCBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHZhbHVlKS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBkZXN0cm95X21zcGFjZSBkZXN0cm95cyB0aGUgZ2l2ZW4gc3BhY2UsIGFuZCBhdHRlbXB0cyB0byByZXR1cm4gYWxsCisgIG9mIGl0cyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIHRvdGFsIG51bWJlciBvZgorICBieXRlcyBmcmVlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24sIHRoZSByZXN1bHRzIG9mIGFjY2VzcyB0byBhbGwgbWVtb3J5CisgIHVzZWQgYnkgdGhlIHNwYWNlIGJlY29tZSB1bmRlZmluZWQuCisqLworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApOworCisvKgorICBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSB1c2VzIHRoZSBtZW1vcnkgc3VwcGxpZWQgYXMgdGhlIGluaXRpYWwgYmFzZQorICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMKKyAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMKKyAgbGFyZ2UuIChPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4pIFdoZW4gdGhpcyBpbml0aWFsIHNwYWNlIGlzCisgIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uCisgIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQKKyAgc3BhY2UgKGlmIHBvc3NpYmxlKSBidXQgbm90IHRoZSBpbml0aWFsIGJhc2UuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyBjb250cm9scyB3aGV0aGVyIHJlcXVlc3RzIGZvciBsYXJnZSBjaHVua3MKKyAgYXJlIGFsbG9jYXRlZCBpbiB0aGVpciBvd24gbW1hcHBlZCByZWdpb25zLCBzZXBhcmF0ZSBmcm9tIG90aGVycyBpbgorICB0aGlzIG1zcGFjZS4gQnkgZGVmYXVsdCB0aGlzIGlzIGVuYWJsZWQsIHdoaWNoIHJlZHVjZXMKKyAgZnJhZ21lbnRhdGlvbi4gSG93ZXZlciwgc3VjaCBjaHVua3MgYXJlIG5vdCBuZWNlc3NhcmlseSByZWxlYXNlZCB0bworICB0aGUgc3lzdGVtIHVwb24gZGVzdHJveV9tc3BhY2UuICBEaXNhYmxpbmcgYnkgc2V0dGluZyB0byBmYWxzZSBtYXkKKyAgaW5jcmVhc2UgZnJhZ21lbnRhdGlvbiwgYnV0IGF2b2lkcyBsZWFrYWdlIHdoZW4gcmVseWluZyBvbgorICBkZXN0cm95X21zcGFjZSB0byByZWxlYXNlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIHRoaXMgc3BhY2UuCisqLworaW50IG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyhtc3BhY2UgbXNwLCBpbnQgZW5hYmxlKTsKKworCisvKgorICBtc3BhY2VfbWFsbG9jIGJlaGF2ZXMgYXMgbWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9mcmVlIGJlaGF2ZXMgYXMgZnJlZSwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisKKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfZnJlZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkLgorICBmcmVlIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfZnJlZSBiZWNhdXNlIGZyZWVkIGNodW5rcyBmcm9tCisgIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZyBzcGFjZXMuCisqLwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfcmVhbGxvYyBiZWhhdmVzIGFzIHJlYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX3JlYWxsb2MgaXMgbm90IGFjdHVhbGx5CisgIG5lZWRlZC4gIHJlYWxsb2MgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9yZWFsbG9jIGJlY2F1c2UKKyAgcmVhbGxvY2VkIGNodW5rcyBmcm9tIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZworICBzcGFjZXMuCisqLwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogbWVtLCBzaXplX3QgbmV3c2l6ZSk7CisKKy8qCisgIG1zcGFjZV9jYWxsb2MgYmVoYXZlcyBhcyBjYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOworCisvKgorICBtc3BhY2VfbWVtYWxpZ24gYmVoYXZlcyBhcyBtZW1hbGlnbiwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NvbWFsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbXNwYWNlX21hbGxpbmZvIGJlaGF2ZXMgYXMgbWFsbGluZm8sIGJ1dCByZXBvcnRzIHByb3BlcnRpZXMgb2YKKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbWFsbG9jX3VzYWJsZV9zaXplOworKi8KKyAgc2l6ZV90IG1zcGFjZV91c2FibGVfc2l6ZSh2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfbWFsbG9jX3N0YXRzIGJlaGF2ZXMgYXMgbWFsbG9jX3N0YXRzLCBidXQgcmVwb3J0cworICBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKTsKKworLyoKKyAgQW4gYWxpYXMgZm9yIG1hbGxvcHQuCisqLworaW50IG1zcGFjZV9tYWxsb3B0KGludCwgaW50KTsKKworI2VuZGlmIC8qIE1TUEFDRVMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OyAgLyogZW5kIG9mIGV4dGVybiAiQyIgKi8KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgVG8gbWFrZSBhIGZ1bGx5IGN1c3RvbWl6YWJsZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSwgY3V0IGV2ZXJ5dGhpbmcKKyAgYWJvdmUgdGhpcyBsaW5lLCBwdXQgaW50byBmaWxlIG1hbGxvYy5oLCBlZGl0IHRvIHN1aXQsIGFuZCAjaW5jbHVkZSBpdAorICBvbiB0aGUgbmV4dCBsaW5lLCBhcyB3ZWxsIGFzIGluIHByb2dyYW1zIHRoYXQgdXNlIHRoaXMgbWFsbG9jLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKy8qICNpbmNsdWRlICJtYWxsb2MuaCIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW50ZXJuYWwgI2luY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIFdJTjMyCisjaWZuZGVmIF9fR05VQ19fCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkgLyogbm8gInVuc2lnbmVkIiB3YXJuaW5ncyAqLworI2VuZGlmCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgIC8qIGZvciBwcmludGluZyBpbiBtYWxsb2Nfc3RhdHMgKi8KKworI2lmbmRlZiBMQUNLU19FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgLyogZm9yIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2VuZGlmIC8qIExBQ0tTX0VSUk5PX0ggKi8KKyNpZiBGT09URVJTCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgLyogZm9yIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCisjZW5kaWYgLyogRk9PVEVSUyAqLworI2lmbmRlZiBMQUNLU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgIC8qIGZvciBhYm9ydCgpICovCisjZW5kaWYgLyogTEFDS1NfU1RETElCX0ggKi8KKyNpZmRlZiBERUJVRworI2lmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIGFzc2VydCh4KSBpZighKHgpKSBBQk9SVAorI2Vsc2UgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZiAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2Vsc2UgIC8qIERFQlVHICovCisjaWZuZGVmIGFzc2VydAorI2RlZmluZSBhc3NlcnQoeCkKKyNlbmRpZgorI2RlZmluZSBERUJVRyAwCisjZW5kaWYgLyogREVCVUcgKi8KKyNpZm5kZWYgTEFDS1NfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBmb3IgbWVtc2V0IGV0YyAqLworI2VuZGlmICAvKiBMQUNLU19TVFJJTkdfSCAqLworI2lmIFVTRV9CVUlMVElOX0ZGUworI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+ICAgICAvKiBmb3IgZmZzICovCisjZW5kaWYgLyogTEFDS1NfU1RSSU5HU19IICovCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWYgSEFWRV9NTUFQCisjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPiAgICAvKiBmb3IgbW1hcCAqLworI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8KKyNpZm5kZWYgTEFDS1NfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogTEFDS1NfRkNOVExfSCAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2lmbmRlZiBMQUNLU19VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHNicmssIHN5c2NvbmYgKi8KKyNlbHNlIC8qIExBQ0tTX1VOSVNURF9IICovCisjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQorZXh0ZXJuIHZvaWQqICAgICBzYnJrKHB0cmRpZmZfdCk7CisjZW5kaWYgLyogRnJlZUJTRCBldGMgKi8KKyNlbmRpZiAvKiBMQUNLU19VTklTVERfSCAqLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGxvY2tpbmcgKi8KKyNpZiBVU0VfTE9DS1MKKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgIC8qIHNvbGFyaXMgKi8KKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNlbmRpZiAvKiBzb2xhcmlzICovCisjZWxzZQorI2lmbmRlZiBfTV9BTUQ2NAorLyogVGhlc2UgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiBBTUQ2NCBidWlsZHMgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNpZm5kZWYgX19NSU5HVzMyX18KK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqRGVzdCwgTE9ORyBFeGNoYW5nZSwgTE9ORyBDb21wKTsKK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRFeGNoYW5nZShMT05HIHZvbGF0aWxlICpUYXJnZXQsIExPTkcgVmFsdWUpOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9NX0FNRDY0ICovCisjaWZuZGVmIF9fTUlOR1czMl9fCisjcHJhZ21hIGludHJpbnNpYyAoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKQorI3ByYWdtYSBpbnRyaW5zaWMgKF9JbnRlcmxvY2tlZEV4Y2hhbmdlKQorI2Vsc2UKKyAgLyogLS1bIHN0YXJ0IEdDQyBjb21wYXRpYmlsaXR5IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqIENvbXBhdGliaWxpdHkgPGludHJpbl94ODYuaD4gaGVhZGVyIGZvciBHQ0MgLS0gR0NDIGVxdWl2YWxlbnRzIG9mIGludHJpbnNpYworICAgKiBNaWNyb3NvZnQgVmlzdWFsIEMrKyBmdW5jdGlvbnMuIE9yaWdpbmFsbHkgZGV2ZWxvcGVkIGZvciB0aGUgUmVhY3RPUworICAgKiAoPGh0dHA6Ly93d3cucmVhY3Rvcy5vcmcvPikgYW5kIFRpbnlLcm5sICg8aHR0cDovL3d3dy50aW55a3JubC5vcmcvPikKKyAgICogcHJvamVjdHMuCisgICAqCisgICAqIENvcHlyaWdodCAoYykgMjAwNiBLSks6Okh5cGVyaW9uIDxoYWNrYnVubnlAcmVhY3Rvcy5jb20+CisgICAqCisgICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgICAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAgICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgICAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICAgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgKgorICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICAgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgICoKKyAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAgICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgICAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgICAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgKi8KKworICAvKioqIEF0b21pYyBvcGVyYXRpb25zICoqKi8KKyAgI2lmIChfX0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKSA+IDQwMTAwCisgICAgI3VuZGVmIF9SZWFkV3JpdGVCYXJyaWVyCisgICAgI2RlZmluZSBfUmVhZFdyaXRlQmFycmllcigpIF9fc3luY19zeW5jaHJvbml6ZSgpCisgICNlbHNlCisgICAgc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGxvbmcgX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGxvbmcgKiBjb25zdCBUYXJnZXQsIGNvbnN0IGxvbmcgVmFsdWUpCisgICAgeworICAgICAgbG9uZyByZXM7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZyV6MCAlMiwgJTAiIDogIj1nIiAoKihUYXJnZXQpKSwgIj1yIiAocmVzKSA6ICIxIiAoVmFsdWUpKTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9NZW1vcnlCYXJyaWVyKHZvaWQpCisgICAgeworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgOiA6IDogIm1lbW9yeSIpOworICAgIH0KKyAgICAjZGVmaW5lIF9SZWFkV3JpdGVCYXJyaWVyKCkgX01lbW9yeUJhcnJpZXIoKQorICAjZW5kaWYKKyAgLyogQlVHQlVHOiBHQ0Mgb25seSBzdXBwb3J0cyBmdWxsIGJhcnJpZXJzICovCisgIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBsb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlKHZvbGF0aWxlIGxvbmcgKiBjb25zdCBUYXJnZXQsIGNvbnN0IGxvbmcgVmFsdWUpCisgIHsKKyAgICAvKiBOT1RFOiBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQgd291bGQgYmUgYW4gYWNxdWlyZSBiYXJyaWVyLCBzbyB3ZSBmb3JjZSBhIGZ1bGwgYmFycmllciAqLworICAgIF9SZWFkV3JpdGVCYXJyaWVyKCk7CisgICAgcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldChUYXJnZXQsIFZhbHVlKTsKKyAgfQorICAvKiAtLVsgZW5kIEdDQyBjb21wYXRpYmlsaXR5IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZW5kaWYKKyNkZWZpbmUgaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlCisjZGVmaW5lIGludGVybG9ja2VkZXhjaGFuZ2UgX0ludGVybG9ja2VkRXhjaGFuZ2UKKyNlbmRpZiAvKiBXaW4zMiAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGJpdCBzY2FubmluZyBvbiB3aW4zMiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjaWZuZGVmIEJpdFNjYW5Gb3J3YXJkCS8qIFRyeSB0byBhdm9pZCBwdWxsaW5nIGluIFdpbk5ULmggKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOwordW5zaWduZWQgY2hhciBfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEJpdFNjYW5Gb3J3YXJkIF9CaXRTY2FuRm9yd2FyZAorI2RlZmluZSBCaXRTY2FuUmV2ZXJzZSBfQml0U2NhblJldmVyc2UKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuRm9yd2FyZCkKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuUmV2ZXJzZSkKKyNlbmRpZiAvKiBCaXRTY2FuRm9yd2FyZCAqLworI2VuZGlmIC8qIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwICovCisKKyNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgbWFsbG9jX2dldHBhZ2VzaXplCisjICBpZmRlZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNWUjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVyc2NvcmUgKi8KKyMgICAgaWZuZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgICBkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBfU0NfUEFHRV9TSVpFCisjICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgc3lzY29uZihfU0NfUEFHRV9TSVpFKQorIyAgZWxzZQorIyAgICBpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VYKSB8fCBkZWZpbmVkKEhBVkVfR0VUUEFHRVNJWkUpCisgICAgICAgZXh0ZXJuIHNpemVfdCBnZXRwYWdlc2l6ZSgpOworIyAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgV0lOMzIgLyogdXNlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBnZXRwYWdlc2l6ZSAqLworIyAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgICAgZWxzZQorIyAgICAgICAgaWZuZGVmIExBQ0tTX1NZU19QQVJBTV9ICisjICAgICAgICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgICAgICAgZW5kaWYKKyMgICAgICAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGlmZGVmIE5CUEcKKyMgICAgICAgICAgICBpZm5kZWYgQ0xTSVpFCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIChOQlBHICogQ0xTSVpFKQorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICBpZmRlZiBOQlBDCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEMKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBpZmRlZiBQQUdFU0laRQorIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFCisjICAgICAgICAgICAgICBlbHNlIC8qIGp1c3QgZ3Vlc3MgKi8KKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoKHNpemVfdCk0MDk2VSkKKyMgICAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZW5kaWYKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBzaXplX3QgYW5kIGFsaWdubWVudCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBieXRlIGFuZCBiaXQgc2l6ZSBvZiBhIHNpemVfdCAqLworI2RlZmluZSBTSVpFX1RfU0laRSAgICAgICAgIChzaXplb2Yoc2l6ZV90KSkKKyNkZWZpbmUgU0laRV9UX0JJVFNJWkUgICAgICAoc2l6ZW9mKHNpemVfdCkgPDwgMykKKworLyogU29tZSBjb25zdGFudHMgY29lcmNlZCB0byBzaXplX3QgKi8KKy8qIEFubm95aW5nIGJ1dCBuZWNlc3NhcnkgdG8gYXZvaWQgZXJyb3JzIG9uIHNvbWUgcGxhdGZvcm1zICovCisjZGVmaW5lIFNJWkVfVF9aRVJPICAgICAgICAgKChzaXplX3QpMCkKKyNkZWZpbmUgU0laRV9UX09ORSAgICAgICAgICAoKHNpemVfdCkxKQorI2RlZmluZSBTSVpFX1RfVFdPICAgICAgICAgICgoc2l6ZV90KTIpCisjZGVmaW5lIFNJWkVfVF9GT1VSICAgICAgICAgKChzaXplX3QpNCkKKyNkZWZpbmUgVFdPX1NJWkVfVF9TSVpFUyAgICAoU0laRV9UX1NJWkU8PDEpCisjZGVmaW5lIEZPVVJfU0laRV9UX1NJWkVTICAgKFNJWkVfVF9TSVpFPDwyKQorI2RlZmluZSBTSVhfU0laRV9UX1NJWkVTICAgIChGT1VSX1NJWkVfVF9TSVpFUytUV09fU0laRV9UX1NJWkVTKQorI2RlZmluZSBIQUxGX01BWF9TSVpFX1QgICAgIChNQVhfU0laRV9UIC8gMlUpCisKKy8qIFRoZSBiaXQgbWFzayB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIE1BTExPQ19BTElHTk1FTlQgKi8KKyNkZWZpbmUgQ0hVTktfQUxJR05fTUFTSyAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpCisKKy8qIFRydWUgaWYgYWRkcmVzcyBhIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLworI2RlZmluZSBpc19hbGlnbmVkKEEpICAgICAgICgoKHNpemVfdCkoKEEpKSAmIChDSFVOS19BTElHTl9NQVNLKSkgPT0gMCkKKworLyogdGhlIG51bWJlciBvZiBieXRlcyB0byBvZmZzZXQgYW4gYWRkcmVzcyB0byBhbGlnbiBpdCAqLworI2RlZmluZSBhbGlnbl9vZmZzZXQoQSlcCisgKCgoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKT8gMCA6XAorICAoKE1BTExPQ19BTElHTk1FTlQgLSAoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSkgJiBDSFVOS19BTElHTl9NQVNLKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIElmIEhBVkVfTU9SRUNPUkUgb3IgSEFWRV9NTUFQIGFyZSBmYWxzZSwgd2UganVzdCBkZWZpbmUgY2FsbHMgYW5kCisgICBjaGVja3MgdG8gZmFpbCBzbyBjb21waWxlciBvcHRpbWl6ZXIgY2FuIGRlbGV0ZSBjb2RlIHJhdGhlciB0aGFuCisgICB1c2luZyBzbyBtYW55ICIjaWYicy4KKyovCisKKworLyogTU9SRUNPUkUgYW5kIE1NQVAgbXVzdCByZXR1cm4gTUZBSUwgb24gZmFpbHVyZSAqLworI2RlZmluZSBNRkFJTCAgICAgICAgICAgICAgICAoKHZvaWQqKShNQVhfU0laRV9UKSkKKyNkZWZpbmUgQ01GQUlMICAgICAgICAgICAgICAgKChjaGFyKikoTUZBSUwpKSAvKiBkZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLworCisjaWYgSEFWRV9NTUFQCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgIG11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgTU1BUF9QUk9UICAgICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQorI2lmICFkZWZpbmVkKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQX0FOT04pCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgICAgICAgIE1BUF9BTk9OCisjZW5kaWYgLyogTUFQX0FOT04gKi8KKyNpZmRlZiBNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTKQorI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgLTEsIDApCisjZWxzZSAvKiBNQVBfQU5PTllNT1VTICovCisvKgorICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FOT05ZTU9VUywgc28gdGhlIGZvbGxvd2luZworICAgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkLCBidXQgaXMgc3VwcGxpZWQganVzdCBpbiBjYXNlLgorKi8KKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFKQorc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBDYWNoZWQgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3plcm8uICovCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAoKGRldl96ZXJvX2ZkIDwgMCkgPyBcCisJICAgKGRldl96ZXJvX2ZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKSwgXAorCSAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpIDogXAorCSAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpCisjZW5kaWYgLyogTUFQX0FOT05ZTU9VUyAqLworCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgTU1BUF9ERUZBVUxUKHMpCisKKyNlbHNlIC8qIFdJTjMyICovCisKKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMybW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAorCQkJICAgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzY2VkIHNlZ21lbnRzICovCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHdpbjMybXVubWFwKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpIHsKKyAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIG1pbmZvOworICBjaGFyKiBjcHRyID0gKGNoYXIqKXB0cjsKKyAgd2hpbGUgKHNpemUpIHsKKyAgICBpZiAoVmlydHVhbFF1ZXJ5KGNwdHIsICZtaW5mbywgc2l6ZW9mKG1pbmZvKSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobWluZm8uQmFzZUFkZHJlc3MgIT0gY3B0ciB8fCBtaW5mby5BbGxvY2F0aW9uQmFzZSAhPSBjcHRyIHx8CisJbWluZm8uU3RhdGUgIT0gTUVNX0NPTU1JVCB8fCBtaW5mby5SZWdpb25TaXplID4gc2l6ZSkKKyAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoVmlydHVhbEZyZWUoY3B0ciwgMCwgTUVNX1JFTEVBU0UpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgY3B0ciArPSBtaW5mby5SZWdpb25TaXplOworICAgIHNpemUgLT0gbWluZm8uUmVnaW9uU2l6ZTsKKyAgfQorICByZXR1cm4gMDsKK30KKworI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgICAgICAgd2luMzJtbWFwKHMpCisjZGVmaW5lIE1VTk1BUF9ERUZBVUxUKGEsIHMpICAgICAgICB3aW4zMm11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgRElSRUNUX01NQVBfREVGQVVMVChzKSAgICAgIHdpbjMyZGlyZWN0X21tYXAocykKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworCisjaWYgSEFWRV9NUkVNQVAKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgTVJFTUFQX0RFRkFVTFQoYWRkciwgb3N6LCBuc3osIG12KSBtcmVtYXAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBIQVZFX01SRU1BUCAqLworCisKKy8qKgorICogRGVmaW5lIENBTExfTU9SRUNPUkUKKyAqLworI2lmIEhBVkVfTU9SRUNPUkUKKyAgICAjaWZkZWYgTU9SRUNPUkUKKwkjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgTU9SRUNPUkUoUykKKyAgICAjZWxzZSAgLyogTU9SRUNPUkUgKi8KKwkjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgTU9SRUNPUkVfREVGQVVMVChTKQorICAgICNlbmRpZiAvKiBNT1JFQ09SRSAqLworI2Vsc2UgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyAgICAjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLworCisvKioKKyAqIERlZmluZSBDQUxMX01NQVAvQ0FMTF9NVU5NQVAvQ0FMTF9ESVJFQ1RfTU1BUAorICovCisjaWYgSEFWRV9NTUFQCisgICAgI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAgICAoU0laRV9UX09ORSkKKyAgICAjZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgICAgIChTSVpFX1RfT05FKQorCisgICAgI2lmZGVmIE1NQVAKKwkjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgTU1BUChzKQorICAgICNlbHNlIC8qIE1NQVAgKi8KKwkjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgTU1BUF9ERUZBVUxUKHMpCisgICAgI2VuZGlmIC8qIE1NQVAgKi8KKyAgICAjaWZkZWYgTVVOTUFQCisJI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgIE1VTk1BUCgoYSksIChzKSkKKyAgICAjZWxzZSAvKiBNVU5NQVAgKi8KKwkjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgTVVOTUFQX0RFRkFVTFQoKGEpLCAocykpCisgICAgI2VuZGlmIC8qIE1VTk1BUCAqLworICAgICNpZmRlZiBESVJFQ1RfTU1BUAorCSNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSBESVJFQ1RfTU1BUChzKQorICAgICNlbHNlIC8qIERJUkVDVF9NTUFQICovCisJI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpIERJUkVDVF9NTUFQX0RFRkFVTFQocykKKyAgICAjZW5kaWYgLyogRElSRUNUX01NQVAgKi8KKyNlbHNlICAvKiBIQVZFX01NQVAgKi8KKyAgICAjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgICAgIChTSVpFX1RfWkVSTykKKyAgICAjZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgICAgIChTSVpFX1RfWkVSTykKKworICAgICNkZWZpbmUgTU1BUChzKSAgICAgICAgICAgICAgICAgTUZBSUwKKyAgICAjZGVmaW5lIE1VTk1BUChhLCBzKSAgICAgICAgICAgICgtMSkKKyAgICAjZGVmaW5lIERJUkVDVF9NTUFQKHMpICAgICAgICAgIE1GQUlMCisgICAgI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpICAgICBESVJFQ1RfTU1BUChzKQorICAgICNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICAgICAgTU1BUChzKQorICAgICNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgICAgTVVOTUFQKChhKSwgKHMpKQorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworCisvKioKKyAqIERlZmluZSBDQUxMX01SRU1BUAorICovCisjaWYgSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQCisgICAgI2lmZGVmIE1SRU1BUAorCSNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBNUkVNQVAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisgICAgI2Vsc2UgLyogTVJFTUFQICovCisJI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUF9ERUZBVUxUKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQorICAgICNlbmRpZiAvKiBNUkVNQVAgKi8KKyNlbHNlICAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKyAgICAjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisKKy8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCisjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpCisKKy8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSAqLworI2RlZmluZSBFWFRFUk5fQklUICAgICAgICAgICAgKDhVKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2NrIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gbG9ja3MgYXJlIGRlZmluZWQsIHRoZXJlIGlzIG9uZSBnbG9iYWwgbG9jaywgcGx1cworICBvbmUgcGVyLW1zcGFjZSBsb2NrLgorCisgIFRoZSBnbG9iYWwgbG9ja19lbnN1cmVzIHRoYXQgbXBhcmFtcy5tYWdpYyBhbmQgb3RoZXIgdW5pcXVlCisgIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIEl0IGFsc28gcHJvdGVjdHMKKyAgc2VxdWVuY2VzIG9mIGNhbGxzIHRvIE1PUkVDT1JFLiAgSW4gbWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMKKyAgdHdvIGNhbGxzLCB0aGF0IHNob3VsZCBub3QgYmUgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyBieSBvdGhlcgorICB0aHJlYWRzLiAgVGhpcyBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3QgZGlyZWN0IGNhbGxzIHRvIE1PUkVDT1JFCisgIGJ5IG90aGVyIHRocmVhZHMgbm90IHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwgY29kZSB0bworICBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbiBpbnRlcmZlcmVuY2UuCisKKyAgUGVyLW1zcGFjZSBsb2NrcyBzdXJyb3VuZCBjYWxscyB0byBtYWxsb2MsIGZyZWUsIGV0Yy4gIFRvIGVuYWJsZSB1c2UKKyAgaW4gbGF5ZXJlZCBleHRlbnNpb25zLCBwZXItbXNwYWNlIGxvY2tzIGFyZSByZWVudHJhbnQuCisKKyAgQmVjYXVzZSBsb2NrLXByb3RlY3RlZCByZWdpb25zIGdlbmVyYWxseSBoYXZlIGJvdW5kZWQgdGltZXMsIGl0IGlzCisgIE9LIHRvIHVzZSB0aGUgc3VwcGxpZWQgc2ltcGxlIHNwaW5sb2NrcyBpbiB0aGUgY3VzdG9tIHZlcnNpb25zIGZvcgorICB4ODYuCisKKyAgSWYgVVNFX0xPQ0tTIGlzID4gMSwgdGhlIGRlZmluaXRpb25zIG9mIGxvY2sgcm91dGluZXMgaGVyZSBhcmUKKyAgYnlwYXNzZWQsIGluIHdoaWNoIGNhc2UgeW91IHdpbGwgbmVlZCB0byBkZWZpbmUgYXQgbGVhc3QKKyAgSU5JVElBTF9MT0NLLCBBQ1FVSVJFX0xPQ0ssIFJFTEVBU0VfTE9DSyBhbmQgcG9zc2libHkgVFJZX0xPQ0sKKyAgKHdoaWNoIGlzIG5vdCB1c2VkIGluIHRoaXMgbWFsbG9jLCBidXQgY29tbW9ubHkgbmVlZGVkIGluCisgIGV4dGVuc2lvbnMuKQorKi8KKworI2lmIFVTRV9MT0NLUyA9PSAxCisKKyNpZiBVU0VfU1BJTl9MT0NLUworI2lmbmRlZiBXSU4zMgorCisvKiBDdXN0b20gcHRocmVhZC1zdHlsZSBzcGluIGxvY2tzIG9uIHg4NiBhbmQgeDY0IGZvciBnY2MgKi8KK3N0cnVjdCBwdGhyZWFkX21sb2NrX3QgeworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGM7CisgIHZvbGF0aWxlIHB0aHJlYWRfdCB0aHJlYWRpZDsKK307CisjZGVmaW5lIE1MT0NLX1Qgc3RydWN0ICAgICAgICBwdGhyZWFkX21sb2NrX3QKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIHB0aHJlYWRfc2VsZigpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgICAgICAobWVtc2V0KHNsLCAwLCBzaXplb2YoTUxPQ0tfVCkpLCAwKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgcHRocmVhZF9hY3F1aXJlX2xvY2soc2wpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICBwdGhyZWFkX3JlbGVhc2VfbG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgIHB0aHJlYWRfdHJ5X2xvY2soc2wpCisjZGVmaW5lIFNQSU5TX1BFUl9ZSUVMRCAgICAgICA2MworCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyAwLCAwLCAwfTsKKworc3RhdGljIEZPUkNFSU5MSU5FIGludCBwdGhyZWFkX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaW50IHNwaW5zID0gMDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50KiBscCA9ICZzbC0+bDsKKyAgZm9yICg7OykgeworICAgIGlmICgqbHAgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogcGxhY2UgYXJncyB0byBjbXB4Y2hnbCBpbiBsb2NhbHMgdG8gZXZhZGUgb2RkaXRpZXMgaW4gc29tZSBnY2NzICovCisgICAgICBpbnQgY21wID0gMDsKKyAgICAgIGludCB2YWwgPSAxOworICAgICAgaW50IHJldDsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICAoImxvY2s7IGNtcHhjaGdsICUxLCAlMiIKKwkJCSAgICAgOiAiPWEiIChyZXQpCisJCQkgICAgIDogInIiICh2YWwpLCAibSIgKCoobHApKSwgIjAiKGNtcCkKKwkJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CisgICAgICBpZiAoIXJldCkgeworCWFzc2VydCghc2wtPnRocmVhZGlkKTsKKwlzbC0+YyA9IDE7CisJc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgICBpZiAoKCsrc3BpbnMgJiBTUElOU19QRVJfWUlFTEQpID09IDApIHsKKyNpZiBkZWZpbmVkIChfX1NWUjQpICYmIGRlZmluZWQgKF9fc3VuKSAvKiBzb2xhcmlzICovCisJdGhyX3lpZWxkKCk7CisjZWxzZQorI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKwlzY2hlZF95aWVsZCgpOworI2Vsc2UgIC8qIG5vLW9wIHlpZWxkIG9uIHVua25vd24gc3lzdGVtcyAqLworCTsKKyNlbmRpZiAvKiBfX2xpbnV4X18gfHwgX19GcmVlQlNEX18gfHwgX19BUFBMRV9fICovCisjZW5kaWYgLyogc29sYXJpcyAqLworICAgICAgfQorICAgIH0KKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCBwdGhyZWFkX3JlbGVhc2VfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgYXNzZXJ0KHNsLT5sICE9IDApOworICBhc3NlcnQoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKTsKKyAgaWYgKC0tc2wtPmMgPT0gMCkgeworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCogbHAgPSAmc2wtPmw7CisgICAgaW50IHByZXYgPSAwOworICAgIGludCByZXQ7CisgICAgc2wtPnRocmVhZGlkID0gMDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhjaGdsICUwLCAlMSIKKwkJCSAgOiAiPXIiIChyZXQpCisJCQkgIDogIm0iICgqKGxwKSksICIwIihwcmV2KQorCQkJICA6ICJtZW1vcnkiKTsKKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHB0aHJlYWRfdHJ5X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCogbHAgPSAmc2wtPmw7CisgIGlmICgqbHAgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaW50IGNtcCA9IDA7CisgICAgaW50IHZhbCA9IDE7CisgICAgaW50IHJldDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAgKCJsb2NrOyBjbXB4Y2hnbCAlMSwgJTIiCisJCQkgICA6ICI9YSIgKHJldCkKKwkJCSAgIDogInIiICh2YWwpLCAibSIgKCoobHApKSwgIjAiKGNtcCkKKwkJCSAgIDogIm1lbW9yeSIsICJjYyIpOworICAgIGlmICghcmV0KSB7CisgICAgICBhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisgICAgICBzbC0+YyA9IDE7CisgICAgICBzbC0+dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworCisjZWxzZSAvKiBXSU4zMiAqLworLyogQ3VzdG9tIHdpbjMyLXN0eWxlIHNwaW4gbG9ja3Mgb24geDg2IGFuZCB4NjQgZm9yIE1TQyAqLworc3RydWN0IHdpbjMyX21sb2NrX3QKK3sKKyAgdm9sYXRpbGUgbG9uZyBsOworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYzsKKyAgdm9sYXRpbGUgbG9uZyB0aHJlYWRpZDsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHJldHVybl8wKGludCBpKSB7IHJldHVybiAwOyB9CisjZGVmaW5lIE1MT0NLX1QgICAgICAgICAgICAgICBzdHJ1Y3Qgd2luMzJfbWxvY2tfdAorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgd2luMzJfZ2V0Y3VycmVudHRocmVhZGlkKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgICAgIChtZW1zZXQoc2wsIDAsIHNpemVvZihNTE9DS19UKSksIHJldHVybl8wKDApKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgd2luMzJfYWNxdWlyZV9sb2NrKHNsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAgICAgd2luMzJfcmVsZWFzZV9sb2NrKHNsKQorI2RlZmluZSBUUllfTE9DSyhzbCkgICAgICAgICAgd2luMzJfdHJ5X2xvY2soc2wpCisjZGVmaW5lIFNQSU5TX1BFUl9ZSUVMRCAgICAgICA2MworCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyAwLCAwLCAwfTsKKworc3RhdGljIEZPUkNFSU5MSU5FIGxvbmcgd2luMzJfZ2V0Y3VycmVudHRocmVhZGlkKHZvaWQpIHsKKyNpZmRlZiBfTVNDX1ZFUgorI2lmIGRlZmluZWQoX01fSVg4NikKKyAgbG9uZyAqdGhyZWFkc3RydWN0PShsb25nICopX19yZWFkZnNkd29yZCgweDE4KTsKKyAgbG9uZyB0aHJlYWRpZD10aHJlYWRzdHJ1Y3RbMHgyNC9zaXplb2YobG9uZyldOworICByZXR1cm4gdGhyZWFkaWQ7CisjZWxpZiBkZWZpbmVkKF9NX1g2NCkKKyAgLyogdG9kbyAqLworICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZWxzZQorICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZW5kaWYKKyNlbHNlCisgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHdpbjMyX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaW50IHNwaW5zID0gMDsKKyAgZm9yICg7OykgeworICAgIGlmIChzbC0+bCAhPSAwKSB7CisgICAgICBpZiAoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKSB7CisJKytzbC0+YzsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZiAoIWludGVybG9ja2VkZXhjaGFuZ2UoJnNsLT5sLCAxKSkgeworCWFzc2VydCghc2wtPnRocmVhZGlkKTsKKwkJc2wtPmM9Q1VSUkVOVF9USFJFQUQ7CisJc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisJc2wtPmMgPSAxOworCXJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgICBpZiAoKCsrc3BpbnMgJiBTUElOU19QRVJfWUlFTEQpID09IDApCisgICAgICBTbGVlcEV4KDAsIEZBTFNFKTsKKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCB3aW4zMl9yZWxlYXNlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGFzc2VydChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpOworICBhc3NlcnQoc2wtPmwgIT0gMCk7CisgIGlmICgtLXNsLT5jID09IDApIHsKKyAgICBzbC0+dGhyZWFkaWQgPSAwOworICAgIGludGVybG9ja2VkZXhjaGFuZ2UgKCZzbC0+bCwgMCk7CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMl90cnlfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaWYoc2wtPmwgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFpbnRlcmxvY2tlZGV4Y2hhbmdlKCZzbC0+bCwgMSkpeworICAgICAgYXNzZXJ0KCFzbC0+dGhyZWFkaWQpOworICAgICAgc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisgICAgICBzbC0+YyA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworI2Vsc2UgLyogVVNFX1NQSU5fTE9DS1MgKi8KKworI2lmbmRlZiBXSU4zMgorLyogcHRocmVhZHMtYmFzZWQgbG9ja3MgKi8KKworI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICBwdGhyZWFkX3NlbGYoKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgcHRocmVhZF9pbml0X2xvY2soc2wpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgICAgICBwdGhyZWFkX211dGV4X2xvY2soc2wpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgICghcHRocmVhZF9tdXRleF90cnlsb2NrKHNsKSkKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKy8qIENvcGUgd2l0aCBvbGQtc3R5bGUgbGludXggcmVjdXJzaXZlIGxvY2sgaW5pdGlhbGl6YXRpb24gYnkgYWRkaW5nICovCisvKiBza2lwcGVkIGludGVybmFsIGRlY2xhcmF0aW9uIGZyb20gcHRocmVhZC5oICovCisjaWZkZWYgbGludXgKKyNpZm5kZWYgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUKK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCBfX1AgKChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCisJCQkJCSAgIGludCBfX2tpbmQpKTsKKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAKKyNkZWZpbmUgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSh4LHkpIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAoeCx5KQorI2VuZGlmCisjZW5kaWYKKworc3RhdGljIGludCBwdGhyZWFkX2luaXRfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgcHRocmVhZF9tdXRleGF0dHJfdCBhdHRyOworICBpZiAocHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cikpIHJldHVybiAxOworICBpZiAocHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdChzbCwgJmF0dHIpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJmF0dHIpKSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIFdJTjMyICovCisvKiBXaW4zMiBjcml0aWNhbCBzZWN0aW9ucyAqLworI2RlZmluZSBNTE9DS19UICAgICAgICAgICAgICAgQ1JJVElDQUxfU0VDVElPTgorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgR2V0Q3VycmVudFRocmVhZElkKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHMpICAgICAgICghSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbkFuZFNwaW5Db3VudCgocyksIDB4ODAwMDAwMDB8NDAwMCkpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzKSAgICAgICAoRW50ZXJDcml0aWNhbFNlY3Rpb24ocyksIDApCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzKSAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbihzKQorI2RlZmluZSBUUllfTE9DSyhzKSAgICAgICAgICAgVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24ocykKKyNkZWZpbmUgTkVFRF9HTE9CQUxfTE9DS19JTklUCisKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXg7CitzdGF0aWMgdm9sYXRpbGUgbG9uZyBtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1czsKKworLyogVXNlIHNwaW4gbG9vcCB0byBpbml0aWFsaXplIGdsb2JhbCBsb2NrICovCitzdGF0aWMgdm9pZCBpbml0X21hbGxvY19nbG9iYWxfbXV0ZXgoKSB7CisgIGZvciAoOzspIHsKKyAgICBsb25nIHN0YXQgPSBtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1czsKKyAgICBpZiAoc3RhdCA+IDApCisgICAgICByZXR1cm47CisgICAgLyogdHJhbnNpdGlvbiB0byA8IDAgd2hpbGUgaW5pdGlhbGl6aW5nLCB0aGVuIHRvID4gMCkgKi8KKyAgICBpZiAoc3RhdCA9PSAwICYmCisJaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UoJm1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzLCAtMSwgMCkgPT0gMCkgeworICAgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisgICAgICBpbnRlcmxvY2tlZGV4Y2hhbmdlKCZtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cywxKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2xlZXBFeCgwLCBGQUxTRSk7CisgIH0KK30KKworI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogVVNFX1NQSU5fTE9DS1MgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgPT0gMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVXNlci1kZWZpbmVkIGxvY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgVVNFX0xPQ0tTID4gMQorLyogRGVmaW5lIHlvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaGVyZSAqLworLyogI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAuLi4gKi8KKy8qICNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgLi4uICovCisvKiAjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgIC4uLiAqLworLyogI2RlZmluZSBUUllfTE9DSyhzbCkgLi4uICovCisvKiBzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0gLi4uICovCisjZW5kaWYgLyogVVNFX0xPQ0tTID4gMSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTG9jay1iYXNlZCBzdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMlUpCisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIFVTRV9MT0NLX0JJVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKyNpZiBVU0VfTE9DS1MKKyNkZWZpbmUgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKSAgQUNRVUlSRV9MT0NLKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsKKyNkZWZpbmUgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKSAgUkVMRUFTRV9MT0NLKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsKKyNlbHNlICAvKiBVU0VfTE9DS1MgKi8KKyNkZWZpbmUgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKQorI2RlZmluZSBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENodW5rIHJlcHJlc2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgKFRoZSBmb2xsb3dpbmcgaW5jbHVkZXMgbGlnaHRseSBlZGl0ZWQgZXhwbGFuYXRpb25zIGJ5IENvbGluIFBsdW1iLikKKworICBUaGUgbWFsbG9jX2NodW5rIGRlY2xhcmF0aW9uIGJlbG93IGlzIG1pc2xlYWRpbmcgKGJ1dCBhY2N1cmF0ZSBhbmQKKyAgbmVjZXNzYXJ5KS4gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFsbG93aW5nIGFjY2VzcyB0bworICBuZWNlc3NhcnkgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJvbSBhIGdpdmVuIGJhc2UuCisKKyAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcworICBvcmlnaW5hbGx5IGRlc2NyaWJlZCBieSBLbnV0aC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwgV2lsc29uCisgIGZ0cDovL2Z0cC5jcy51dGV4YXMuZWR1L3B1Yi9nYXJiYWdlL2FsbG9jc3J2LnBzIGZvciBhIHN1cnZleSBvZiBzdWNoCisgIHRlY2huaXF1ZXMuKSAgU2l6ZXMgb2YgZnJlZSBjaHVua3MgYXJlIHN0b3JlZCBib3RoIGluIHRoZSBmcm9udCBvZgorICBlYWNoIGNodW5rIGFuZCBhdCB0aGUgZW5kLiAgVGhpcyBtYWtlcyBjb25zb2xpZGF0aW5nIGZyYWdtZW50ZWQKKyAgY2h1bmtzIGludG8gYmlnZ2VyIGNodW5rcyBmYXN0LiAgVGhlIGhlYWQgZmllbGRzIGFsc28gaG9sZCBiaXRzCisgIHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvciBpbiB1c2UuCisKKyAgSGVyZSBhcmUgc29tZSBwaWN0dXJlcyB0byBtYWtlIGl0IGNsZWFyZXIuICBUaGV5IGFyZSAiZXhwbG9kZWQiIHRvCisgIHNob3cgdGhhdCB0aGUgc3RhdGUgb2YgYSBjaHVuayBjYW4gYmUgdGhvdWdodCBvZiBhcyBleHRlbmRpbmcgZnJvbQorICB0aGUgaGlnaCAzMSBiaXRzIG9mIHRoZSBoZWFkIGZpZWxkIG9mIGl0cyBoZWFkZXIgdGhyb3VnaCB0aGUKKyAgcHJldl9mb290IGFuZCBQSU5VU0VfQklUIGJpdCBvZiB0aGUgZm9sbG93aW5nIGNodW5rIGhlYWRlci4KKworICBBIGNodW5rIHRoYXQncyBpbiB1c2UgbG9va3MgbGlrZToKKworICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgIHwgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgUCA9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorCSB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMXwgKy0rCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorCSArLSAgICAgIHNpemUgLSBzaXplb2Yoc2l6ZV90KSBhdmFpbGFibGUgcGF5bG9hZCBieXRlcyAgICAgICAgICAtKworCSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfDF8CisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG1heSBvciBtYXkgbm90IGJlIGluIHVzZSkgICAgICAgICAgICAgICB8ICstKworIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgICBBbmQgaWYgaXQncyBmcmVlLCBpdCBsb29rcyBsaWtlIHRoaXM6CisKKyAgIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgICB8IFVzZXIgcGF5bG9hZCAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkISkgICAgICAgfAorCSAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKwkgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCBOZXh0IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCBQcmV2IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKwkgKy0gICAgICBzaXplIC0gc2l6ZW9mKHN0cnVjdCBjaHVuaykgdW51c2VkIGJ5dGVzICAgICAgICAgICAgICAgLSsKKwkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwwfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQpfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgKy0gVXNlciBwYXlsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJCQkJCQkJCSAgICAgfDB8CisJCQkJCQkJCSAgICAgKy0rCisgIE5vdGUgdGhhdCBzaW5jZSB3ZSBhbHdheXMgbWVyZ2UgYWRqYWNlbnQgZnJlZSBjaHVua3MsIHRoZSBjaHVua3MKKyAgYWRqYWNlbnQgdG8gYSBmcmVlIGNodW5rIG11c3QgYmUgaW4gdXNlLgorCisgIEdpdmVuIGEgcG9pbnRlciB0byBhIGNodW5rICh3aGljaCBjYW4gYmUgZGVyaXZlZCB0cml2aWFsbHkgZnJvbSB0aGUKKyAgcGF5bG9hZCBwb2ludGVyKSB3ZSBjYW4sIGluIE8oMSkgdGltZSwgZmluZCBvdXQgd2hldGhlciB0aGUgYWRqYWNlbnQKKyAgY2h1bmtzIGFyZSBmcmVlLCBhbmQgaWYgc28sIHVubGluayB0aGVtIGZyb20gdGhlIGxpc3RzIHRoYXQgdGhleQorICBhcmUgb24gYW5kIG1lcmdlIHRoZW0gd2l0aCB0aGUgY3VycmVudCBjaHVuay4KKworICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3VuZGFyaWVzLCBzbyB0aGUgbWVtIHBvcnRpb24KKyAgKHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyKSBpcyBhbHNvIG9uIGFuIGV2ZW4gd29yZCBib3VuZGFyeSwgYW5kCisgIHRodXMgYXQgbGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4KKworICBUaGUgUCAoUElOVVNFX0JJVCkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBsb3ctb3JkZXIgYml0IG9mIHRoZQorICBjaHVuayBzaXplICh3aGljaCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiB0d28gd29yZHMpLCBpcyBhbiBpbi11c2UKKyAgYml0IGZvciB0aGUgKnByZXZpb3VzKiBjaHVuay4gIElmIHRoYXQgYml0IGlzICpjbGVhciosIHRoZW4gdGhlCisgIHdvcmQgYmVmb3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUgY29udGFpbnMgdGhlIHByZXZpb3VzIGNodW5rCisgIHNpemUsIGFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBmcm9udCBvZiB0aGUgcHJldmlvdXMgY2h1bmsuCisgIFRoZSB2ZXJ5IGZpcnN0IGNodW5rIGFsbG9jYXRlZCBhbHdheXMgaGFzIHRoaXMgYml0IHNldCwgcHJldmVudGluZworICBhY2Nlc3MgdG8gbm9uLWV4aXN0ZW50IChvciBub24tb3duZWQpIG1lbW9yeS4gSWYgcGludXNlIGlzIHNldCBmb3IKKyAgYW55IGdpdmVuIGNodW5rLCB0aGVuIHlvdSBDQU5OT1QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZQorICBwcmV2aW91cyBjaHVuaywgYW5kIG1pZ2h0IGV2ZW4gZ2V0IGEgbWVtb3J5IGFkZHJlc3NpbmcgZmF1bHQgd2hlbgorICB0cnlpbmcgdG8gZG8gc28uCisKKyAgVGhlIEMgKENJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgc2Vjb25kLWxvd2VzdCBiaXQgb2YKKyAgdGhlIGNodW5rIHNpemUgcmVkdW5kYW50bHkgcmVjb3JkcyB3aGV0aGVyIHRoZSBjdXJyZW50IGNodW5rIGlzCisgIGludXNlLiBUaGlzIHJlZHVuZGFuY3kgZW5hYmxlcyB1c2FnZSBjaGVja3Mgd2l0aGluIGZyZWUgYW5kIHJlYWxsb2MsCisgIGFuZCByZWR1Y2VzIGluZGlyZWN0aW9uIHdoZW4gZnJlZWluZyBhbmQgY29uc29saWRhdGluZyBjaHVua3MuCisKKyAgRWFjaCBmcmVzaGx5IGFsbG9jYXRlZCBjaHVuayBtdXN0IGhhdmUgYm90aCBjaW51c2UgYW5kIHBpbnVzZSBzZXQuCisgIFRoYXQgaXMsIGVhY2ggYWxsb2NhdGVkIGNodW5rIGJvcmRlcnMgZWl0aGVyIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQKKyAgYW5kIHN0aWxsIGluLXVzZSBjaHVuaywgb3IgdGhlIGJhc2Ugb2YgaXRzIG1lbW9yeSBhcmVuYS4gVGhpcyBpcworICBlbnN1cmVkIGJ5IG1ha2luZyBhbGwgYWxsb2NhdGlvbnMgZnJvbSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkKKyAgZm91bmQgY2h1bmsuICBGdXJ0aGVyLCBubyBmcmVlIGNodW5rIHBoeXNpY2FsbHkgYm9yZGVycyBhbm90aGVyIG9uZSwKKyAgc28gZWFjaCBmcmVlIGNodW5rIGlzIGtub3duIHRvIGJlIHByZWNlZGVkIGFuZCBmb2xsb3dlZCBieSBlaXRoZXIKKyAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1lbW9yeS4KKworICBOb3RlIHRoYXQgdGhlIGBmb290JyBvZiB0aGUgY3VycmVudCBjaHVuayBpcyBhY3R1YWxseSByZXByZXNlbnRlZAorICBhcyB0aGUgcHJldl9mb290IG9mIHRoZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bworICBkZWFsIHdpdGggYWxpZ25tZW50cyBldGMgYnV0IGNhbiBiZSB2ZXJ5IGNvbmZ1c2luZyB3aGVuIHRyeWluZworICB0byBleHRlbmQgb3IgYWRhcHQgdGhpcyBjb2RlLgorCisgIFRoZSBleGNlcHRpb25zIHRvIGFsbCB0aGlzIGFyZQorCisgICAgIDEuIFRoZSBzcGVjaWFsIGNodW5rIGB0b3AnIGlzIHRoZSB0b3AtbW9zdCBhdmFpbGFibGUgY2h1bmsgKGkuZS4sCisJdGhlIG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZiBhdmFpbGFibGUgbWVtb3J5KS4gSXQgaXMgdHJlYXRlZAorCXNwZWNpYWxseS4gIFRvcCBpcyBuZXZlciBpbmNsdWRlZCBpbiBhbnkgYmluLCBpcyB1c2VkIG9ubHkgaWYKKwlubyBvdGhlciBjaHVuayBpcyBhdmFpbGFibGUsIGFuZCBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZQorCXN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUgTV9UUklNX1RIUkVTSE9MRCkuICBJbiBlZmZlY3QsCisJdGhlIHRvcCBjaHVuayBpcyB0cmVhdGVkIGFzIGxhcmdlciAoYW5kIHRodXMgbGVzcyB3ZWxsCisJZml0dGluZykgdGhhbiBhbnkgb3RoZXIgYXZhaWxhYmxlIGNodW5rLiAgVGhlIHRvcCBjaHVuaworCWRvZXNuJ3QgdXBkYXRlIGl0cyB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQKKwljb250aWd1b3VzIGNodW5rIHRoYXQgd291bGQgaGF2ZSB0byBpbmRleCBvZmYgaXQuIEhvd2V2ZXIsCisJc3BhY2UgaXMgc3RpbGwgYWxsb2NhdGVkIGZvciBpdCAoVE9QX0ZPT1RfU0laRSkgdG8gZW5hYmxlCisJc2VwYXJhdGlvbiBvciBtZXJnaW5nIHdoZW4gc3BhY2UgaXMgZXh0ZW5kZWQuCisKKyAgICAgMy4gQ2h1bmtzIGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgbG93ZXN0LW9yZGVyIGJpdAorCShJU19NTUFQUEVEX0JJVCkgc2V0IGluIHRoZWlyIHByZXZfZm9vdCBmaWVsZHMsIGFuZCBkbyBub3Qgc2V0CisJUElOVVNFX0JJVCBpbiB0aGVpciBoZWFkIGZpZWxkcy4gIEJlY2F1c2UgdGhleSBhcmUgYWxsb2NhdGVkCisJb25lLWJ5LW9uZSwgZWFjaCBtdXN0IGNhcnJ5IGl0cyBvd24gcHJldl9mb290IGZpZWxkLCB3aGljaCBpcworCWFsc28gdXNlZCB0byBob2xkIHRoZSBvZmZzZXQgdGhpcyBjaHVuayBoYXMgd2l0aGluIGl0cyBtbWFwcGVkCisJcmVnaW9uLCB3aGljaCBpcyBuZWVkZWQgdG8gcHJlc2VydmUgYWxpZ25tZW50LiBFYWNoIG1tYXBwZWQKKwljaHVuayBpcyB0cmFpbGVkIGJ5IHRoZSBmaXJzdCB0d28gZmllbGRzIG9mIGEgZmFrZSBuZXh0LWNodW5rCisJZm9yIHNha2Ugb2YgdXNhZ2UgY2hlY2tzLgorCisqLworCitzdHJ1Y3QgbWFsbG9jX2NodW5rIHsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgcHJldl9mb290OyAgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICAqLworICBzaXplX3QgICAgICAgICAgICAgICBoZWFkOyAgICAgICAvKiBTaXplIGFuZCBpbnVzZSBiaXRzLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBmZDsgICAgICAgICAvKiBkb3VibGUgbGlua3MgLS0gdXNlZCBvbmx5IGlmIGZyZWUuICovCisgIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGJrOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICBtY2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIG1jaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogc2JpbnB0cjsgIC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgY2h1bmtzICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5kZXhfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGJpbm1hcF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ190OyAgICAgICAgICAgLyogVGhlIHR5cGUgb2YgdmFyaW91cyBiaXQgZmxhZyBzZXRzICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gQ2h1bmtzIHNpemVzIGFuZCBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTUNIVU5LX1NJWkUgICAgICAgICAoc2l6ZW9mKG1jaHVuaykpCisKKyNpZiBGT09URVJTCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFRXT19TSVpFX1RfU0laRVMpCisjZWxzZSAvKiBGT09URVJTICovCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFNJWkVfVF9TSVpFKQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKworLyogTU1hcHBlZCBjaHVua3MgbmVlZCBhIHNlY29uZCB3b3JkIG9mIG92ZXJoZWFkIC4uLiAqLworI2RlZmluZSBNTUFQX0NIVU5LX09WRVJIRUFEIChUV09fU0laRV9UX1NJWkVTKQorLyogLi4uIGFuZCBhZGRpdGlvbmFsIHBhZGRpbmcgZm9yIGZha2UgbmV4dC1jaHVuayBhdCBmb290ICovCisjZGVmaW5lIE1NQVBfRk9PVF9QQUQgICAgICAgKEZPVVJfU0laRV9UX1NJWkVTKQorCisvKiBUaGUgc21hbGxlc3Qgc2l6ZSB3ZSBjYW4gbWFsbG9jIGlzIGFuIGFsaWduZWQgbWluaW1hbCBjaHVuayAqLworI2RlZmluZSBNSU5fQ0hVTktfU0laRVwKKyAgKChNQ0hVTktfU0laRSArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spCisKKy8qIGNvbnZlcnNpb24gZnJvbSBtYWxsb2MgaGVhZGVycyB0byB1c2VyIHBvaW50ZXJzLCBhbmQgYmFjayAqLworI2RlZmluZSBjaHVuazJtZW0ocCkgICAgICAgICgodm9pZCopKChjaGFyKikocCkgICAgICAgKyBUV09fU0laRV9UX1NJWkVTKSkKKyNkZWZpbmUgbWVtMmNodW5rKG1lbSkgICAgICAoKG1jaHVua3B0cikoKGNoYXIqKShtZW0pIC0gVFdPX1NJWkVfVF9TSVpFUykpCisvKiBjaHVuayBhc3NvY2lhdGVkIHdpdGggYWxpZ25lZCBhZGRyZXNzIEEgKi8KKyNkZWZpbmUgYWxpZ25fYXNfY2h1bmsoQSkgICAobWNodW5rcHRyKSgoQSkgKyBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKEEpKSkKKworLyogQm91bmRzIG9uIHJlcXVlc3QgKG5vdCBjaHVuaykgc2l6ZXMuICovCisjZGVmaW5lIE1BWF9SRVFVRVNUICAgICAgICAgKCgtTUlOX0NIVU5LX1NJWkUpIDw8IDIpCisjZGVmaW5lIE1JTl9SRVFVRVNUICAgICAgICAgKE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQgLSBTSVpFX1RfT05FKQorCisvKiBwYWQgcmVxdWVzdCBieXRlcyBpbnRvIGEgdXNhYmxlIHNpemUgKi8KKyNkZWZpbmUgcGFkX3JlcXVlc3QocmVxKSBcCisgICAoKChyZXEpICsgQ0hVTktfT1ZFUkhFQUQgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBwYWQgcmVxdWVzdCwgY2hlY2tpbmcgZm9yIG1pbmltdW0gKGJ1dCBub3QgbWF4aW11bSkgKi8KKyNkZWZpbmUgcmVxdWVzdDJzaXplKHJlcSkgXAorICAoKChyZXEpIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KHJlcSkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gaGVhZCBhbmQgZm9vdCBmaWVsZHMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVGhlIGhlYWQgZmllbGQgb2YgYSBjaHVuayBpcyBvcidlZCB3aXRoIFBJTlVTRV9CSVQgd2hlbiBwcmV2aW91cworICBhZGphY2VudCBjaHVuayBpbiB1c2UsIGFuZCBvcidlZCB3aXRoIENJTlVTRV9CSVQgaWYgdGhpcyBjaHVuayBpcyBpbgorICB1c2UuIElmIHRoZSBjaHVuayB3YXMgb2J0YWluZWQgd2l0aCBtbWFwLCB0aGUgcHJldl9mb290IGZpZWxkIGhhcworICBJU19NTUFQUEVEX0JJVCBzZXQsIG90aGVyd2lzZSBob2xkaW5nIHRoZSBvZmZzZXQgb2YgdGhlIGJhc2Ugb2YgdGhlCisgIG1tYXBwZWQgcmVnaW9uIHRvIHRoZSBiYXNlIG9mIHRoZSBjaHVuay4KKworICBGTEFHNF9CSVQgaXMgbm90IHVzZWQgYnkgdGhpcyBtYWxsb2MsIGJ1dCBtaWdodCBiZSB1c2VmdWwgaW4gZXh0ZW5zaW9ucy4KKyovCisKKyNkZWZpbmUgUElOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX09ORSkKKyNkZWZpbmUgQ0lOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX1RXTykKKyNkZWZpbmUgRkxBRzRfQklUICAgICAgICAgICAoU0laRV9UX0ZPVVIpCisjZGVmaW5lIElOVVNFX0JJVFMgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkKKyNkZWZpbmUgRkxBR19CSVRTICAgICAgICAgICAoUElOVVNFX0JJVHxDSU5VU0VfQklUfEZMQUc0X0JJVCkKKworLyogSGVhZCB2YWx1ZSBmb3IgZmVuY2Vwb3N0cyAqLworI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQorCisvKiBleHRyYWN0aW9uIG9mIGZpZWxkcyBmcm9tIGhlYWQgd29yZHMgKi8KKyNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkKKyNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkKKyNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihGTEFHX0JJVFMpKQorCisjZGVmaW5lIGNsZWFyX3BpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+UElOVVNFX0JJVCkKKyNkZWZpbmUgY2xlYXJfY2ludXNlKHApICAgICAoKHApLT5oZWFkICY9IH5DSU5VU0VfQklUKQorCisvKiBUcmVhdCBzcGFjZSBhdCBwdHIgKy8tIG9mZnNldCBhcyBhIGNodW5rICovCisjZGVmaW5lIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHMpICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSkKKyNkZWZpbmUgY2h1bmtfbWludXNfb2Zmc2V0KHAsIHMpICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgLSAocykpKQorCisvKiBQdHIgdG8gbmV4dCBvciBwcmV2aW91cyBwaHlzaWNhbCBtYWxsb2NfY2h1bmsuICovCisjZGVmaW5lIG5leHRfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgKyAoKHApLT5oZWFkICYgfkZMQUdfQklUUykpKQorI2RlZmluZSBwcmV2X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpIC0gKChwKS0+cHJldl9mb290KSApKQorCisvKiBleHRyYWN0IG5leHQgY2h1bmsncyBwaW51c2UgYml0ICovCisjZGVmaW5lIG5leHRfcGludXNlKHApICAoKG5leHRfY2h1bmsocCktPmhlYWQpICYgUElOVVNFX0JJVCkKKworLyogR2V0L3NldCBzaXplIGF0IGZvb3RlciAqLworI2RlZmluZSBnZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCkKKyNkZWZpbmUgc2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAocykpCisKKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBhbmQgZm9vdCAqLworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUKSwgc2V0X2Zvb3QocCwgcykpCisKKy8qIFNldCBzaXplLCBwaW51c2UgYml0LCBmb290LCBhbmQgY2xlYXIgbmV4dCBwaW51c2UgKi8KKyNkZWZpbmUgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcywgbilcCisgIChjbGVhcl9waW51c2UobiksIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKSkKKworI2RlZmluZSBpc19tbWFwcGVkKHApXAorICAoISgocCktPmhlYWQgJiBQSU5VU0VfQklUKSAmJiAoKHApLT5wcmV2X2Zvb3QgJiBJU19NTUFQUEVEX0JJVCkpCisKKy8qIEdldCB0aGUgaW50ZXJuYWwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGNodW5rIHAgKi8KKyNkZWZpbmUgb3ZlcmhlYWRfZm9yKHApXAorIChpc19tbWFwcGVkKHApPyBNTUFQX0NIVU5LX09WRVJIRUFEIDogQ0hVTktfT1ZFUkhFQUQpCisKKy8qIFJldHVybiB0cnVlIGlmIG1hbGxvY2VkIHNwYWNlIGlzIG5vdCBuZWNlc3NhcmlseSBjbGVhcmVkICovCisjaWYgTU1BUF9DTEVBUlMKKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKCFpc19tbWFwcGVkKHApKQorI2Vsc2UgLyogTU1BUF9DTEVBUlMgKi8KKyNkZWZpbmUgY2FsbG9jX211c3RfY2xlYXIocCkgKDEpCisjZW5kaWYgLyogTU1BUF9DTEVBUlMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdmVybGFpZCBkYXRhIHN0cnVjdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgV2hlbiBjaHVua3MgYXJlIG5vdCBpbiB1c2UsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgbm9kZXMgb2YgZWl0aGVyCisgIGxpc3RzIG9yIHRyZWVzLgorCisgICJTbWFsbCIgIGNodW5rcyBhcmUgc3RvcmVkIGluIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdHMsIGFuZCBsb29rCisgIGxpa2UgdGhpczoKKworICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIGluIGxpc3QgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgTGFyZ2VyIGNodW5rcyBhcmUga2VwdCBpbiBhIGZvcm0gb2YgYml0d2lzZSBkaWdpdGFsIHRyZWVzIChha2EKKyAgdHJpZXMpIGtleWVkIG9uIGNodW5rc2l6ZXMuICBCZWNhdXNlIG1hbGxvY190cmVlX2NodW5rcyBhcmUgb25seSBmb3IKKyAgZnJlZSBjaHVua3MgZ3JlYXRlciB0aGFuIDI1NiBieXRlcywgdGhlaXIgc2l6ZSBkb2Vzbid0IGltcG9zZSBhbnkKKyAgY29uc3RyYWludHMgb24gdXNlciBjaHVuayBzaXplcy4gIEVhY2ggbm9kZSBsb29rcyBsaWtlOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBoZWFkOicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKKyAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBsZWZ0IGNoaWxkIChjaGlsZFswXSkgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byByaWdodCBjaGlsZCAoY2hpbGRbMV0pICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBwYXJlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgYmluIGluZGV4IG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisJICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICBFYWNoIHRyZWUgaG9sZGluZyB0cmVlbm9kZXMgaXMgYSB0cmVlIG9mIHVuaXF1ZSBjaHVuayBzaXplcy4gIENodW5rcworICBvZiB0aGUgc2FtZSBzaXplIGFyZSBhcnJhbmdlZCBpbiBhIGNpcmN1bGFybHktbGlua2VkIGxpc3QsIHdpdGggb25seQorICB0aGUgb2xkZXN0IGNodW5rICh0aGUgbmV4dCB0byBiZSB1c2VkLCBpbiBvdXIgRklGTyBvcmRlcmluZykKKyAgYWN0dWFsbHkgaW4gdGhlIHRyZWUuICAoVHJlZSBtZW1iZXJzIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IGEgbm9uLW51bGwKKyAgcGFyZW50IHBvaW50ZXIuKSAgSWYgYSBjaHVuayB3aXRoIHRoZSBzYW1lIHNpemUgYXMgYW4gZXhpc3Rpbmcgbm9kZQorICBpcyBpbnNlcnRlZCwgaXQgaXMgbGlua2VkIG9mZiB0aGUgZXhpc3Rpbmcgbm9kZSB1c2luZyBwb2ludGVycyB0aGF0CisgIHdvcmsgaW4gdGhlIHNhbWUgd2F5IGFzIGZkL2JrIHBvaW50ZXJzIG9mIHNtYWxsIGNodW5rcy4KKworICBFYWNoIHRyZWUgY29udGFpbnMgYSBwb3dlciBvZiAyIHNpemVkIHJhbmdlIG9mIGNodW5rIHNpemVzICh0aGUKKyAgc21hbGxlc3QgaXMgMHgxMDAgPD0geCA8IDB4MTgwKSwgd2hpY2ggaXMgZGl2aWRlZCBpbiBoYWxmIGF0IGVhY2gKKyAgdHJlZSBsZXZlbCwgd2l0aCB0aGUgY2h1bmtzIGluIHRoZSBzbWFsbGVyIGhhbGYgb2YgdGhlIHJhbmdlICgweDEwMAorICA8PSB4IDwgMHgxNDAgZm9yIHRoZSB0b3Agbm9zZSkgaW4gdGhlIGxlZnQgc3VidHJlZSBhbmQgdGhlIGxhcmdlcgorICBoYWxmICgweDE0MCA8PSB4IDwgMHgxODApIGluIHRoZSByaWdodCBzdWJ0cmVlLiAgVGhpcyBpcywgb2YgY291cnNlLAorICBkb25lIGJ5IGluc3BlY3RpbmcgaW5kaXZpZHVhbCBiaXRzLgorCisgIFVzaW5nIHRoZXNlIHJ1bGVzLCBlYWNoIG5vZGUncyBsZWZ0IHN1YnRyZWUgY29udGFpbnMgYWxsIHNtYWxsZXIKKyAgc2l6ZXMgdGhhbiBpdHMgcmlnaHQgc3VidHJlZS4gIEhvd2V2ZXIsIHRoZSBub2RlIGF0IHRoZSByb290IG9mIGVhY2gKKyAgc3VidHJlZSBoYXMgbm8gcGFydGljdWxhciBvcmRlcmluZyByZWxhdGlvbnNoaXAgdG8gZWl0aGVyLiAgKFRoZQorICBkaXZpZGluZyBsaW5lIGJldHdlZW4gdGhlIHN1YnRyZWUgc2l6ZXMgaXMgYmFzZWQgb24gdHJpZSByZWxhdGlvbi4pCisgIElmIHdlIHJlbW92ZSB0aGUgbGFzdCBjaHVuayBvZiBhIGdpdmVuIHNpemUgZnJvbSB0aGUgaW50ZXJpb3Igb2YgdGhlCisgIHRyZWUsIHdlIG5lZWQgdG8gcmVwbGFjZSBpdCB3aXRoIGEgbGVhZiBub2RlLiAgVGhlIHRyZWUgb3JkZXJpbmcKKyAgcnVsZXMgcGVybWl0IGEgbm9kZSB0byBiZSByZXBsYWNlZCBieSBhbnkgbGVhZiBiZWxvdyBpdC4KKworICBUaGUgc21hbGxlc3QgY2h1bmsgaW4gYSB0cmVlIChhIGNvbW1vbiBvcGVyYXRpb24gaW4gYSBiZXN0LWZpdAorICBhbGxvY2F0b3IpIGNhbiBiZSBmb3VuZCBieSB3YWxraW5nIGEgcGF0aCB0byB0aGUgbGVmdG1vc3QgbGVhZiBpbgorICB0aGUgdHJlZS4gIFVubGlrZSBhIHVzdWFsIGJpbmFyeSB0cmVlLCB3aGVyZSB3ZSBmb2xsb3cgbGVmdCBjaGlsZAorICBwb2ludGVycyB1bnRpbCB3ZSByZWFjaCBhIG51bGwsIGhlcmUgd2UgZm9sbG93IHRoZSByaWdodCBjaGlsZAorICBwb2ludGVyIGFueSB0aW1lIHRoZSBsZWZ0IG9uZSBpcyBudWxsLCB1bnRpbCB3ZSByZWFjaCBhIGxlYWYgd2l0aAorICBib3RoIGNoaWxkIHBvaW50ZXJzIG51bGwuIFRoZSBzbWFsbGVzdCBjaHVuayBpbiB0aGUgdHJlZSB3aWxsIGJlCisgIHNvbWV3aGVyZSBhbG9uZyB0aGF0IHBhdGguCisKKyAgVGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mIHN0ZXBzIHRvIGFkZCwgZmluZCwgb3IgcmVtb3ZlIGEgbm9kZSBpcworICBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgYml0cyBkaWZmZXJlbnRpYXRpbmcgY2h1bmtzIHdpdGhpbgorICBiaW5zLiBVbmRlciBjdXJyZW50IGJpbiBjYWxjdWxhdGlvbnMsIHRoaXMgcmFuZ2VzIGZyb20gNiB1cCB0byAyMQorICAoZm9yIDMyIGJpdCBzaXplcykgb3IgdXAgdG8gNTMgKGZvciA2NCBiaXQgc2l6ZXMpLiBUaGUgdHlwaWNhbCBjYXNlCisgIGlzIG9mIGNvdXJzZSBtdWNoIGJldHRlci4KKyovCisKK3N0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayB7CisgIC8qIFRoZSBmaXJzdCBmb3VyIGZpZWxkcyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBtYWxsb2NfY2h1bmsgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBwcmV2X2Zvb3Q7CisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgaGVhZDsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBmZDsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBiazsKKworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGNoaWxkWzJdOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHBhcmVudDsKKyAgYmluZGV4X3QgICAgICAgICAgICAgICAgICBpbmRleDsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rICB0Y2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGNodW5rcHRyOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRiaW5wdHI7IC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgdHJlZXMgKi8KKworLyogQSBsaXR0bGUgaGVscGVyIG1hY3JvIGZvciB0cmVlcyAqLworI2RlZmluZSBsZWZ0bW9zdF9jaGlsZCh0KSAoKHQpLT5jaGlsZFswXSAhPSAwPyAodCktPmNoaWxkWzBdIDogKHQpLT5jaGlsZFsxXSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2VnbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRWFjaCBtYWxsb2Mgc3BhY2UgbWF5IGluY2x1ZGUgbm9uLWNvbnRpZ3VvdXMgc2VnbWVudHMsIGhlbGQgaW4gYQorICBsaXN0IGhlYWRlZCBieSBhbiBlbWJlZGRlZCBtYWxsb2Nfc2VnbWVudCByZWNvcmQgcmVwcmVzZW50aW5nIHRoZQorICB0b3AtbW9zdCBzcGFjZS4gU2VnbWVudHMgYWxzbyBpbmNsdWRlIGZsYWdzIGhvbGRpbmcgcHJvcGVydGllcyBvZgorICB0aGUgc3BhY2UuIExhcmdlIGNodW5rcyB0aGF0IGFyZSBkaXJlY3RseSBhbGxvY2F0ZWQgYnkgbW1hcCBhcmUgbm90CisgIGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gVGhleSBhcmUgaW5zdGVhZCBpbmRlcGVuZGVudGx5IGNyZWF0ZWQgYW5kCisgIGRlc3Ryb3llZCB3aXRob3V0IG90aGVyd2lzZSBrZWVwaW5nIHRyYWNrIG9mIHRoZW0uCisKKyAgU2VnbWVudCBtYW5hZ2VtZW50IG1haW5seSBjb21lcyBpbnRvIHBsYXkgZm9yIHNwYWNlcyBhbGxvY2F0ZWQgYnkKKyAgTU1BUC4gIEFueSBjYWxsIHRvIE1NQVAgbWlnaHQgb3IgbWlnaHQgbm90IHJldHVybiBtZW1vcnkgdGhhdCBpcworICBhZGphY2VudCB0byBhbiBleGlzdGluZyBzZWdtZW50LiAgTU9SRUNPUkUgbm9ybWFsbHkgY29udGlndW91c2x5CisgIGV4dGVuZHMgdGhlIGN1cnJlbnQgc3BhY2UsIHNvIHRoaXMgc3BhY2UgaXMgYWxtb3N0IGFsd2F5cyBhZGphY2VudCwKKyAgd2hpY2ggaXMgc2ltcGxlciBhbmQgZmFzdGVyIHRvIGRlYWwgd2l0aC4gKFRoaXMgaXMgd2h5IE1PUkVDT1JFIGlzCisgIHVzZWQgcHJlZmVyZW50aWFsbHkgdG8gTU1BUCB3aGVuIGJvdGggYXJlIGF2YWlsYWJsZSAtLSBzZWUKKyAgc3lzX2FsbG9jLikgIFdoZW4gYWxsb2NhdGluZyB1c2luZyBNTUFQLCB3ZSBkb24ndCB1c2UgYW55IG9mIHRoZQorICBoaW50aW5nIG1lY2hhbmlzbXMgKGluY29uc2lzdGVudGx5KSBzdXBwb3J0ZWQgaW4gdmFyaW91cworICBpbXBsZW1lbnRhdGlvbnMgb2YgdW5peCBtbWFwLCBvciBkaXN0aW5ndWlzaCByZXNlcnZpbmcgZnJvbQorICBjb21taXR0aW5nIG1lbW9yeS4gSW5zdGVhZCwgd2UganVzdCBhc2sgZm9yIHNwYWNlLCBhbmQgZXhwbG9pdAorICBjb250aWd1aXR5IHdoZW4gd2UgZ2V0IGl0LiAgSXQgaXMgcHJvYmFibHkgcG9zc2libGUgdG8gZG8KKyAgYmV0dGVyIHRoYW4gdGhpcyBvbiBzb21lIHN5c3RlbXMsIGJ1dCBubyBnZW5lcmFsIHNjaGVtZSBzZWVtcworICB0byBiZSBzaWduaWZpY2FudGx5IGJldHRlci4KKworICBNYW5hZ2VtZW50IGVudGFpbHMgYSBzaW1wbGVyIHZhcmlhbnQgb2YgdGhlIGNvbnNvbGlkYXRpb24gc2NoZW1lCisgIHVzZWQgZm9yIGNodW5rcyB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbiAtLSBuZXcgYWRqYWNlbnQgbWVtb3J5IGlzCisgIG5vcm1hbGx5IHByZXBlbmRlZCBvciBhcHBlbmRlZCB0byBhbiBleGlzdGluZyBzZWdtZW50LiBIb3dldmVyLAorICB0aGVyZSBhcmUgbGltaXRhdGlvbnMgY29tcGFyZWQgdG8gY2h1bmsgY29uc29saWRhdGlvbiB0aGF0IG1vc3RseQorICByZWZsZWN0IHRoZSBmYWN0IHRoYXQgc2VnbWVudCBwcm9jZXNzaW5nIGlzIHJlbGF0aXZlbHkgaW5mcmVxdWVudAorICAob2NjdXJyaW5nIG9ubHkgd2hlbiBnZXR0aW5nIG1lbW9yeSBmcm9tIHN5c3RlbSkgYW5kIHRoYXQgd2UKKyAgZG9uJ3QgZXhwZWN0IHRvIGhhdmUgaHVnZSBudW1iZXJzIG9mIHNlZ21lbnRzOgorCisgICogU2VnbWVudHMgYXJlIG5vdCBpbmRleGVkLCBzbyB0cmF2ZXJzYWwgcmVxdWlyZXMgbGluZWFyIHNjYW5zLiAgKEl0CisgICAgd291bGQgYmUgcG9zc2libGUgdG8gaW5kZXggdGhlc2UsIGJ1dCBpcyBub3Qgd29ydGggdGhlIGV4dHJhCisgICAgb3ZlcmhlYWQgYW5kIGNvbXBsZXhpdHkgZm9yIG1vc3QgcHJvZ3JhbXMgb24gbW9zdCBwbGF0Zm9ybXMuKQorICAqIE5ldyBzZWdtZW50cyBhcmUgb25seSBhcHBlbmRlZCB0byBvbGQgb25lcyB3aGVuIGhvbGRpbmcgdG9wLW1vc3QKKyAgICBtZW1vcnk7IGlmIHRoZXkgY2Fubm90IGJlIHByZXBlbmRlZCB0byBvdGhlcnMsIHRoZXkgYXJlIGhlbGQgaW4KKyAgICBkaWZmZXJlbnQgc2VnbWVudHMuCisKKyAgRXhjZXB0IGZvciB0aGUgdG9wLW1vc3Qgc2VnbWVudCBvZiBhbiBtc3RhdGUsIGVhY2ggc2VnbWVudCByZWNvcmQKKyAgaXMga2VwdCBhdCB0aGUgdGFpbCBvZiBpdHMgc2VnbWVudC4gU2VnbWVudHMgYXJlIGFkZGVkIGJ5IHB1c2hpbmcKKyAgc2VnbWVudCByZWNvcmRzIG9udG8gdGhlIGxpc3QgaGVhZGVkIGJ5ICZtc3RhdGUuc2VnIGZvciB0aGUKKyAgY29udGFpbmluZyBtc3RhdGUuCisKKyAgU2VnbWVudCBmbGFncyBjb250cm9sIGFsbG9jYXRpb24vbWVyZ2UvZGVhbGxvY2F0aW9uIHBvbGljaWVzOgorICAqIElmIEVYVEVSTl9CSVQgc2V0LCB0aGVuIHdlIGRpZCBub3QgYWxsb2NhdGUgdGhpcyBzZWdtZW50LAorICAgIGFuZCBzbyBzaG91bGQgbm90IHRyeSB0byBkZWFsbG9jYXRlIG9yIG1lcmdlIHdpdGggb3RoZXJzLgorICAgIChUaGlzIGN1cnJlbnRseSBob2xkcyBvbmx5IGZvciB0aGUgaW5pdGlhbCBzZWdtZW50IHBhc3NlZAorICAgIGludG8gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UuKQorICAqIElmIElTX01NQVBQRURfQklUIHNldCwgdGhlIHNlZ21lbnQgbWF5IGJlIG1lcmdlZCB3aXRoCisgICAgb3RoZXIgc3Vycm91bmRpbmcgbW1hcHBlZCBzZWdtZW50cyBhbmQgdHJpbW1lZC9kZS1hbGxvY2F0ZWQKKyAgICB1c2luZyBtdW5tYXAuCisgICogSWYgbmVpdGhlciBiaXQgaXMgc2V0LCB0aGVuIHRoZSBzZWdtZW50IHdhcyBvYnRhaW5lZCB1c2luZworICAgIE1PUkVDT1JFIHNvIGNhbiBiZSBtZXJnZWQgd2l0aCBzdXJyb3VuZGluZyBNT1JFQ09SRSdkIHNlZ21lbnRzCisgICAgYW5kIGRlYWxsb2NhdGVkL3RyaW1tZWQgdXNpbmcgTU9SRUNPUkUgd2l0aCBuZWdhdGl2ZSBhcmd1bWVudHMuCisqLworCitzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgeworICBjaGFyKiAgICAgICAgYmFzZTsgICAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzICovCisgIHNpemVfdCAgICAgICBzaXplOyAgICAgICAgICAgICAvKiBhbGxvY2F0ZWQgc2l6ZSAqLworICBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQqIG5leHQ7ICAgLyogcHRyIHRvIG5leHQgc2VnbWVudCAqLworICBmbGFnX3QgICAgICAgc2ZsYWdzOyAgICAgICAgICAgLyogbW1hcCBhbmQgZXh0ZXJuIGZsYWcgKi8KK307CisKKyNkZWZpbmUgaXNfbW1hcHBlZF9zZWdtZW50KFMpICAoKFMpLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkKKyNkZWZpbmUgaXNfZXh0ZXJuX3NlZ21lbnQoUykgICAoKFMpLT5zZmxhZ3MgJiBFWFRFUk5fQklUKQorCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCAgbXNlZ21lbnQ7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbXNlZ21lbnRwdHI7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3N0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICBBIG1hbGxvY19zdGF0ZSBob2xkcyBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIGZvciBhIHNwYWNlLgorICAgVGhlIG1haW4gZmllbGRzIGFyZToKKworICBUb3AKKyAgICBUaGUgdG9wbW9zdCBjaHVuayBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50LiBJdHMgc2l6ZSBpcworICAgIGNhY2hlZCBpbiB0b3BzaXplLiAgVGhlIGFjdHVhbCBzaXplIG9mIHRvcG1vc3Qgc3BhY2UgaXMKKyAgICB0b3BzaXplK1RPUF9GT09UX1NJWkUsIHdoaWNoIGluY2x1ZGVzIHNwYWNlIHJlc2VydmVkIGZvciBhZGRpbmcKKyAgICBmZW5jZXBvc3RzIGFuZCBzZWdtZW50IHJlY29yZHMgaWYgbmVjZXNzYXJ5IHdoZW4gZ2V0dGluZyBtb3JlCisgICAgc3BhY2UgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHNpemUgYXQgd2hpY2ggdG8gYXV0b3RyaW0gdG9wIGlzCisgICAgY2FjaGVkIGZyb20gbXBhcmFtcyBpbiB0cmltX2NoZWNrLCBleGNlcHQgdGhhdCBpdCBpcyBkaXNhYmxlZCBpZgorICAgIGFuIGF1dG90cmltIGZhaWxzLgorCisgIERlc2lnbmF0ZWQgdmljdGltIChkdikKKyAgICBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgY2h1bmsgZm9yIHNlcnZpY2luZyBzbWFsbCByZXF1ZXN0cyB0aGF0CisgICAgZG9uJ3QgaGF2ZSBleGFjdCBmaXRzLiAgSXQgaXMgbm9ybWFsbHkgdGhlIGNodW5rIHNwbGl0IG9mZiBtb3N0CisgICAgcmVjZW50bHkgdG8gc2VydmljZSBhbm90aGVyIHNtYWxsIHJlcXVlc3QuICBJdHMgc2l6ZSBpcyBjYWNoZWQgaW4KKyAgICBkdnNpemUuIFRoZSBsaW5rIGZpZWxkcyBvZiB0aGlzIGNodW5rIGFyZSBub3QgbWFpbnRhaW5lZCBzaW5jZSBpdAorICAgIGlzIG5vdCBrZXB0IGluIGEgYmluLgorCisgIFNtYWxsQmlucworICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBmcmVlIGNodW5rcy4gIFRoZXNlIGJpbnMgaG9sZCBjaHVua3MKKyAgICB3aXRoIHNpemVzIGxlc3MgdGhhbiBNSU5fTEFSR0VfU0laRSBieXRlcy4gRWFjaCBiaW4gY29udGFpbnMKKyAgICBjaHVua3Mgb2YgYWxsIHRoZSBzYW1lIHNpemUsIHNwYWNlZCA4IGJ5dGVzIGFwYXJ0LiAgVG8gc2ltcGxpZnkKKyAgICB1c2UgaW4gZG91YmxlLWxpbmtlZCBsaXN0cywgZWFjaCBiaW4gaGVhZGVyIGFjdHMgYXMgYSBtYWxsb2NfY2h1bmsKKyAgICBwb2ludGluZyB0byB0aGUgcmVhbCBmaXJzdCBub2RlLCBpZiBpdCBleGlzdHMgKGVsc2UgcG9pbnRpbmcgdG8KKyAgICBpdHNlbGYpLiAgVGhpcyBhdm9pZHMgc3BlY2lhbC1jYXNpbmcgZm9yIGhlYWRlcnMuICBCdXQgdG8gYXZvaWQKKyAgICB3YXN0ZSwgd2UgYWxsb2NhdGUgb25seSB0aGUgZmQvYmsgcG9pbnRlcnMgb2YgYmlucywgYW5kIHRoZW4gdXNlCisgICAgcmVwb3NpdGlvbmluZyB0cmlja3MgdG8gdHJlYXQgdGhlc2UgYXMgdGhlIGZpZWxkcyBvZiBhIGNodW5rLgorCisgIFRyZWVCaW5zCisgICAgVHJlZWJpbnMgYXJlIHBvaW50ZXJzIHRvIHRoZSByb290cyBvZiB0cmVlcyBob2xkaW5nIGEgcmFuZ2Ugb2YKKyAgICBzaXplcy4gVGhlcmUgYXJlIDIgZXF1YWxseSBzcGFjZWQgdHJlZWJpbnMgZm9yIGVhY2ggcG93ZXIgb2YgdHdvCisgICAgZnJvbSBUUkVFX1NISUZUIHRvIFRSRUVfU0hJRlQrMTYuIFRoZSBsYXN0IGJpbiBob2xkcyBhbnl0aGluZworICAgIGxhcmdlci4KKworICBCaW4gbWFwcworICAgIFRoZXJlIGlzIG9uZSBiaXQgbWFwIGZvciBzbWFsbCBiaW5zICgic21hbGxtYXAiKSBhbmQgb25lIGZvcgorICAgIHRyZWViaW5zICgidHJlZW1hcCkuICBFYWNoIGJpbiBzZXRzIGl0cyBiaXQgd2hlbiBub24tZW1wdHksIGFuZAorICAgIGNsZWFycyB0aGUgYml0IHdoZW4gZW1wdHkuICBCaXQgb3BlcmF0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIGF2b2lkCisgICAgYmluLWJ5LWJpbiBzZWFyY2hpbmcgLS0gbmVhcmx5IGFsbCAic2VhcmNoIiBpcyBkb25lIHdpdGhvdXQgZXZlcgorICAgIGxvb2tpbmcgYXQgYmlucyB0aGF0IHdvbid0IGJlIHNlbGVjdGVkLiAgVGhlIGJpdCBtYXBzCisgICAgY29uc2VydmF0aXZlbHkgdXNlIDMyIGJpdHMgcGVyIG1hcCB3b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbS4KKyAgICBGb3IgYSBnb29kIGRlc2NyaXB0aW9uIG9mIHNvbWUgb2YgdGhlIGJpdC1iYXNlZCB0ZWNobmlxdWVzIHVzZWQKKyAgICBoZXJlLCBzZWUgSGVucnkgUy4gV2FycmVuIEpyJ3MgYm9vayAiSGFja2VyJ3MgRGVsaWdodCIgKGFuZAorICAgIHN1cHBsZW1lbnQgYXQgaHR0cDovL2hhY2tlcnNkZWxpZ2h0Lm9yZy8pLiBNYW55IG9mIHRoZXNlIGFyZQorICAgIGludGVuZGVkIHRvIHJlZHVjZSB0aGUgYnJhbmNoaW5lc3Mgb2YgcGF0aHMgdGhyb3VnaCBtYWxsb2MgZXRjLCBhcworICAgIHdlbGwgYXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbWVtb3J5IGxvY2F0aW9ucyByZWFkIG9yIHdyaXR0ZW4uCisKKyAgU2VnbWVudHMKKyAgICBBIGxpc3Qgb2Ygc2VnbWVudHMgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZAorICAgIHJlcHJlc2VudGluZyB0aGUgaW5pdGlhbCBzcGFjZS4KKworICBBZGRyZXNzIGNoZWNrIHN1cHBvcnQKKyAgICBUaGUgbGVhc3RfYWRkciBmaWVsZCBpcyB0aGUgbGVhc3QgYWRkcmVzcyBldmVyIG9idGFpbmVkIGZyb20KKyAgICBNT1JFQ09SRSBvciBNTUFQLiBBdHRlbXB0ZWQgZnJlZXMgYW5kIHJlYWxsb2NzIG9mIGFueSBhZGRyZXNzIGxlc3MKKyAgICB0aGFuIHRoaXMgYXJlIHRyYXBwZWQgKHVubGVzcyBJTlNFQ1VSRSBpcyBkZWZpbmVkKS4KKworICBNYWdpYyB0YWcKKyAgICBBIGNyb3NzLWNoZWNrIGZpZWxkIHRoYXQgc2hvdWxkIGFsd2F5cyBob2xkIHNhbWUgdmFsdWUgYXMgbXBhcmFtcy5tYWdpYy4KKworICBGbGFncworICAgIEJpdHMgcmVjb3JkaW5nIHdoZXRoZXIgdG8gdXNlIE1NQVAsIGxvY2tzLCBvciBjb250aWd1b3VzIE1PUkVDT1JFCisKKyAgU3RhdGlzdGljcworICAgIEVhY2ggc3BhY2Uga2VlcHMgdHJhY2sgb2YgY3VycmVudCBhbmQgbWF4aW11bSBzeXN0ZW0gbWVtb3J5CisgICAgb2J0YWluZWQgdmlhIE1PUkVDT1JFIG9yIE1NQVAuCisKKyAgVHJpbSBzdXBwb3J0CisgICAgRmllbGRzIGhvbGRpbmcgdGhlIGFtb3VudCBvZiB1bnVzZWQgdG9wbW9zdCBtZW1vcnkgdGhhdCBzaG91bGQgdHJpZ2dlcgorICAgIHRpbWluZywgYW5kIGEgY291bnRlciB0byBmb3JjZSBwZXJpb2RpYyBzY2FubmluZyB0byByZWxlYXNlIHVudXNlZAorICAgIG5vbi10b3Btb3N0IHNlZ21lbnRzLgorCisgIExvY2tpbmcKKyAgICBJZiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgdGhlICJtdXRleCIgbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQKKyAgICBhcm91bmQgZXZlcnkgcHVibGljIGNhbGwgdXNpbmcgdGhpcyBtc3BhY2UuCisKKyAgRXh0ZW5zaW9uIHN1cHBvcnQKKyAgICBBIHZvaWQqIHBvaW50ZXIgYW5kIGEgc2l6ZV90IGZpZWxkIHRoYXQgY2FuIGJlIHVzZWQgdG8gaGVscCBpbXBsZW1lbnQKKyAgICBleHRlbnNpb25zIHRvIHRoaXMgbWFsbG9jLgorKi8KKworLyogQmluIHR5cGVzLCB3aWR0aHMgYW5kIHNpemVzICovCisjZGVmaW5lIE5TTUFMTEJJTlMgICAgICAgICgzMlUpCisjZGVmaW5lIE5UUkVFQklOUyAgICAgICAgICgzMlUpCisjZGVmaW5lIFNNQUxMQklOX1NISUZUICAgICgzVSkKKyNkZWZpbmUgU01BTExCSU5fV0lEVEggICAgKFNJWkVfVF9PTkUgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIFRSRUVCSU5fU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgTUlOX0xBUkdFX1NJWkUgICAgKFNJWkVfVF9PTkUgPDwgVFJFRUJJTl9TSElGVCkKKyNkZWZpbmUgTUFYX1NNQUxMX1NJWkUgICAgKE1JTl9MQVJHRV9TSVpFIC0gU0laRV9UX09ORSkKKyNkZWZpbmUgTUFYX1NNQUxMX1JFUVVFU1QgKE1BWF9TTUFMTF9TSVpFIC0gQ0hVTktfQUxJR05fTUFTSyAtIENIVU5LX09WRVJIRUFEKQorCitzdHJ1Y3QgbWFsbG9jX3N0YXRlIHsKKyAgYmlubWFwX3QgICBzbWFsbG1hcDsKKyAgYmlubWFwX3QgICB0cmVlbWFwOworICBzaXplX3QgICAgIGR2c2l6ZTsKKyAgc2l6ZV90ICAgICB0b3BzaXplOworICBjaGFyKiAgICAgIGxlYXN0X2FkZHI7CisgIG1jaHVua3B0ciAgZHY7CisgIG1jaHVua3B0ciAgdG9wOworICBzaXplX3QgICAgIHRyaW1fY2hlY2s7CisgIHNpemVfdCAgICAgcmVsZWFzZV9jaGVja3M7CisgIHNpemVfdCAgICAgbWFnaWM7CisgIG1jaHVua3B0ciAgc21hbGxiaW5zWyhOU01BTExCSU5TKzEpKjJdOworICB0YmlucHRyICAgIHRyZWViaW5zW05UUkVFQklOU107CisgIHNpemVfdCAgICAgZm9vdHByaW50OworICBzaXplX3QgICAgIG1heF9mb290cHJpbnQ7CisgIGZsYWdfdCAgICAgbWZsYWdzOworI2lmIFVTRV9MT0NLUworICBNTE9DS19UICAgIG11dGV4OyAgICAgLyogbG9jYXRlIGxvY2sgYW1vbmcgZmllbGRzIHRoYXQgcmFyZWx5IGNoYW5nZSAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworICBtc2VnbWVudCAgIHNlZzsKKyAgdm9pZCogICAgICBleHRwOyAgICAgIC8qIFVudXNlZCBidXQgYXZhaWxhYmxlIGZvciBleHRlbnNpb25zICovCisgIHNpemVfdCAgICAgZXh0czsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zdGF0ZSogICAgbXN0YXRlOworCisvKiAtLS0tLS0tLS0tLS0tIEdsb2JhbCBtYWxsb2Nfc3RhdGUgYW5kIG1hbGxvY19wYXJhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBtYWxsb2NfcGFyYW1zIGhvbGRzIGdsb2JhbCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBjYW4gYmUKKyAgZHluYW1pY2FsbHkgc2V0IHVzaW5nIG1hbGxvcHQuIFRoZXJlIGlzIGEgc2luZ2xlIGluc3RhbmNlLCBtcGFyYW1zLAorICBpbml0aWFsaXplZCBpbiBpbml0X21wYXJhbXMuIE5vdGUgdGhhdCB0aGUgbm9uLXplcm9uZXNzIG9mICJtYWdpYyIKKyAgYWxzbyBzZXJ2ZXMgYXMgYW4gaW5pdGlhbGl6YXRpb24gZmxhZy4KKyovCisKK3N0cnVjdCBtYWxsb2NfcGFyYW1zIHsKKyAgdm9sYXRpbGUgc2l6ZV90IG1hZ2ljOworICBzaXplX3QgcGFnZV9zaXplOworICBzaXplX3QgZ3JhbnVsYXJpdHk7CisgIHNpemVfdCBtbWFwX3RocmVzaG9sZDsKKyAgc2l6ZV90IHRyaW1fdGhyZXNob2xkOworICBmbGFnX3QgZGVmYXVsdF9tZmxhZ3M7Cit9OworCitzdGF0aWMgc3RydWN0IG1hbGxvY19wYXJhbXMgbXBhcmFtczsKKworLyogRW5zdXJlIG1wYXJhbXMgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgZW5zdXJlX2luaXRpYWxpemF0aW9uKCkgKCh2b2lkKShtcGFyYW1zLm1hZ2ljICE9IDAgfHwgaW5pdF9tcGFyYW1zKCkpKQorCisjaWYgIU9OTFlfTVNQQUNFUworCisvKiBUaGUgZ2xvYmFsIG1hbGxvY19zdGF0ZSB1c2VkIGZvciBhbGwgbm9uLSJtc3BhY2UiIGNhbGxzICovCitzdGF0aWMgc3RydWN0IG1hbGxvY19zdGF0ZSBfZ21fOworI2RlZmluZSBnbSAgICAgICAgICAgICAgICAgKCZfZ21fKQorI2RlZmluZSBpc19nbG9iYWwoTSkgICAgICAgKChNKSA9PSAmX2dtXykKKworI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KKworI2RlZmluZSBpc19pbml0aWFsaXplZChNKSAgKChNKS0+dG9wICE9IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5c3RlbSBhbGxvYyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE9wZXJhdGlvbnMgb24gbWZsYWdzICovCisKKyNkZWZpbmUgdXNlX2xvY2soTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBlbmFibGVfbG9jayhNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGRpc2FibGVfbG9jayhNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9MT0NLX0JJVCkKKworI2RlZmluZSB1c2VfbW1hcChNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGVuYWJsZV9tbWFwKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX01NQVBfQklUKQorCisjZGVmaW5lIHVzZV9ub25jb250aWd1b3VzKE0pICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9jb250aWd1b3VzKE0pICgoTSktPm1mbGFncyB8PSAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQorCisjZGVmaW5lIHNldF9sb2NrKE0sTClcCisgKChNKS0+bWZsYWdzID0gKEwpP1wKKyAgKChNKS0+bWZsYWdzIHwgVVNFX0xPQ0tfQklUKSA6XAorICAoKE0pLT5tZmxhZ3MgJiB+VVNFX0xPQ0tfQklUKSkKKworLyogcGFnZS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgcGFnZV9hbGlnbihTKVwKKyAoKChTKSArIChtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKSAmIH4obXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkKKworLyogZ3JhbnVsYXJpdHktYWxpZ24gYSBzaXplICovCisjZGVmaW5lIGdyYW51bGFyaXR5X2FsaWduKFMpXAorICAoKChTKSArIChtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpXAorICAgJiB+KG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkKKworCisvKiBGb3IgbW1hcCwgdXNlIGdyYW51bGFyaXR5IGFsaWdubWVudCBvbiB3aW5kb3dzLCBlbHNlIHBhZ2UtYWxpZ24gKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSBtbWFwX2FsaWduKFMpIGdyYW51bGFyaXR5X2FsaWduKFMpCisjZWxzZQorI2RlZmluZSBtbWFwX2FsaWduKFMpIHBhZ2VfYWxpZ24oUykKKyNlbmRpZgorCisvKiBGb3Igc3lzX2FsbG9jLCBlbm91Z2ggcGFkZGluZyB0byBlbnN1cmUgY2FuIG1hbGxvYyByZXF1ZXN0IG9uIHN1Y2Nlc3MgKi8KKyNkZWZpbmUgU1lTX0FMTE9DX1BBRERJTkcgKFRPUF9GT09UX1NJWkUgKyBNQUxMT0NfQUxJR05NRU5UKQorCisjZGVmaW5lIGlzX3BhZ2VfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgPT0gMCkKKyNkZWZpbmUgaXNfZ3JhbnVsYXJpdHlfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKSA9PSAwKQorCisvKiAgVHJ1ZSBpZiBzZWdtZW50IFMgaG9sZHMgYWRkcmVzcyBBICovCisjZGVmaW5lIHNlZ21lbnRfaG9sZHMoUywgQSlcCisgICgoY2hhciopKEEpID49IFMtPmJhc2UgJiYgKGNoYXIqKShBKSA8IFMtPmJhc2UgKyBTLT5zaXplKQorCisvKiBSZXR1cm4gc2VnbWVudCBob2xkaW5nIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBtc2VnbWVudHB0ciBzZWdtZW50X2hvbGRpbmcobXN0YXRlIG0sIGNoYXIqIGFkZHIpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKGFkZHIgPj0gc3AtPmJhc2UgJiYgYWRkciA8IHNwLT5iYXNlICsgc3AtPnNpemUpCisgICAgICByZXR1cm4gc3A7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworLyogUmV0dXJuIHRydWUgaWYgc2VnbWVudCBjb250YWlucyBhIHNlZ21lbnQgbGluayAqLworc3RhdGljIGludCBoYXNfc2VnbWVudF9saW5rKG1zdGF0ZSBtLCBtc2VnbWVudHB0ciBzcykgeworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoKGNoYXIqKXNwID49IHNzLT5iYXNlICYmIChjaGFyKilzcCA8IHNzLT5iYXNlICsgc3MtPnNpemUpCisgICAgICByZXR1cm4gMTsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgocykgPiAoTSktPnRyaW1fY2hlY2spCisjZWxzZSAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKDApCisjZW5kaWYgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKworLyoKKyAgVE9QX0ZPT1RfU0laRSBpcyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBzZWdtZW50LCBpbmNsdWRpbmcgc3BhY2UKKyAgdGhhdCBtYXkgYmUgbmVlZGVkIHRvIHBsYWNlIHNlZ21lbnQgcmVjb3JkcyBhbmQgZmVuY2Vwb3N0cyB3aGVuIG5ldworICBub25jb250aWd1b3VzIHNlZ21lbnRzIGFyZSBhZGRlZC4KKyovCisjZGVmaW5lIFRPUF9GT09UX1NJWkVcCisgIChhbGlnbl9vZmZzZXQoY2h1bmsybWVtKDApKStwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSkrTUlOX0NIVU5LX1NJWkUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSG9va3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgUFJFQUNUSU9OIHNob3VsZCBiZSBkZWZpbmVkIHRvIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uCisgIGZhaWx1cmUuIElmIHlvdSBhcmUgbm90IHVzaW5nIGxvY2tpbmcsIHlvdSBjYW4gcmVkZWZpbmUgdGhlc2UgdG8gZG8KKyAgYW55dGhpbmcgeW91IGxpa2UuCisqLworCisjaWYgVVNFX0xPQ0tTCisKKyNkZWZpbmUgUFJFQUNUSU9OKE0pICAoKHVzZV9sb2NrKE0pKT8gQUNRVUlSRV9MT0NLKCYoTSktPm11dGV4KSA6IDApCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkgeyBpZiAodXNlX2xvY2soTSkpIFJFTEVBU0VfTE9DSygmKE0pLT5tdXRleCk7IH0KKyNlbHNlIC8qIFVTRV9MT0NLUyAqLworCisjaWZuZGVmIFBSRUFDVElPTgorI2RlZmluZSBQUkVBQ1RJT04oTSkgKDApCisjZW5kaWYgIC8qIFBSRUFDVElPTiAqLworCisjaWZuZGVmIFBPU1RBQ1RJT04KKyNkZWZpbmUgUE9TVEFDVElPTihNKQorI2VuZGlmICAvKiBQT1NUQUNUSU9OICovCisKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworLyoKKyAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIHVwb24gZGV0ZWN0ZWQgYmFkIGFkZHJlc3Nlcy4KKyAgVVNBR0VfRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCBvbiBkZXRlY3RlZCBiYWQgZnJlZXMgYW5kCisgIHJlYWxsb2NzLiBUaGUgYXJndW1lbnQgcCBpcyBhbiBhZGRyZXNzIHRoYXQgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgdGhlCisgIGZhdWx0LiBJdCBpcyBpZ25vcmVkIGJ5IHRoZSB0d28gcHJlZGVmaW5lZCBhY3Rpb25zLCBidXQgbWlnaHQgYmUKKyAgdXNlZnVsIGluIGN1c3RvbSBhY3Rpb25zIHRoYXQgdHJ5IHRvIGhlbHAgZGlhZ25vc2UgZXJyb3JzLgorKi8KKworI2lmIFBST0NFRURfT05fRVJST1IKKworLyogQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGNvcnJ1cHRpb24gZXJyb3JzIGNhdXNpbmcgcmVzZXRzICovCitpbnQgbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7CisKKy8qIGRlZmF1bHQgY29ycnVwdGlvbiBhY3Rpb24gKi8KK3N0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKTsKKworI2RlZmluZSBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKSAgcmVzZXRfb25fZXJyb3IobSkKKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0sIHApCisKKyNlbHNlIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworI2lmbmRlZiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTgorI2RlZmluZSBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKSBBQk9SVAorI2VuZGlmIC8qIENPUlJVUFRJT05fRVJST1JfQUNUSU9OICovCisKKyNpZm5kZWYgVVNBR0VfRVJST1JfQUNUSU9OCisjZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLHApIEFCT1JUCisjZW5kaWYgLyogVVNBR0VfRVJST1JfQUNUSU9OICovCisKKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhIERFQlVHCisKKyNkZWZpbmUgY2hlY2tfZnJlZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkKKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkKKworI2Vsc2UgLyogREVCVUcgKi8KKyNkZWZpbmUgY2hlY2tfZnJlZV9jaHVuayhNLFApICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKSAgICAgICAgZG9fY2hlY2tfdG9wX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKSAgICAgICBkb19jaGVja19tYWxsb2Nfc3RhdGUoTSkKKworc3RhdGljIHZvaWQgICBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3Qgcyk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZWJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3NtYWxsYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKG1zdGF0ZSBtKTsKK3N0YXRpYyBpbnQgICAgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KTsKK3N0YXRpYyBzaXplX3QgdHJhdmVyc2VfYW5kX2NoZWNrKG1zdGF0ZSBtKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEluZGV4aW5nIEJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGlzX3NtYWxsKHMpICAgICAgICAgKCgocykgPj4gU01BTExCSU5fU0hJRlQpIDwgTlNNQUxMQklOUykKKyNkZWZpbmUgc21hbGxfaW5kZXgocykgICAgICAoKHMpICA+PiBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgc21hbGxfaW5kZXgyc2l6ZShpKSAoKGkpICA8PCBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgTUlOX1NNQUxMX0lOREVYICAgICAoc21hbGxfaW5kZXgoTUlOX0NIVU5LX1NJWkUpKQorCisvKiBhZGRyZXNzaW5nIGJ5IGluZGV4LiBTZWUgYWJvdmUgYWJvdXQgc21hbGxiaW4gcmVwb3NpdGlvbmluZyAqLworI2RlZmluZSBzbWFsbGJpbl9hdChNLCBpKSAgICgoc2JpbnB0cikoKGNoYXIqKSYoKE0pLT5zbWFsbGJpbnNbKGkpPDwxXSkpKQorI2RlZmluZSB0cmVlYmluX2F0KE0saSkgICAgICgmKChNKS0+dHJlZWJpbnNbaV0pKQorCisvKiBhc3NpZ24gdHJlZSBpbmRleCBmb3Igc2l6ZSBTIHRvIHZhcmlhYmxlIEkuIFVzZSB4ODYgYXNtIGlmIHBvc3NpYmxlICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLO1wKKyAgICBfX2FzbV9fKCJic3JsXHQlMSwgJTBcblx0IiA6ICI9ciIgKEspIDogInJtIiAgKFgpKTtcCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcCisgIH1cCit9CisKKyNlbGlmIGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IEsgPSBfYml0X3NjYW5fcmV2ZXJzZSAoWCk7IFwKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSztcCisgICAgX0JpdFNjYW5SZXZlcnNlKChEV09SRCAqKSAmSywgWCk7XAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorCisjZWxzZSAvKiBHTlVDICovCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IFkgPSAodW5zaWduZWQgaW50KVg7XAorICAgIHVuc2lnbmVkIGludCBOID0gKChZIC0gMHgxMDApID4+IDE2KSAmIDg7XAorICAgIHVuc2lnbmVkIGludCBLID0gKCgoWSA8PD0gTikgLSAweDEwMDApID4+IDE2KSAmIDQ7XAorICAgIE4gKz0gSztcCisgICAgTiArPSBLID0gKCgoWSA8PD0gSykgLSAweDQwMDApID4+IDE2KSAmIDI7XAorICAgIEsgPSAxNCAtIE4gKyAoKFkgPDw9IEspID4+IDE1KTtcCisgICAgSSA9IChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpO1wKKyAgfVwKK30KKyNlbmRpZiAvKiBHTlVDICovCisKKy8qIEJpdCByZXByZXNlbnRpbmcgbWF4aW11bSByZXNvbHZlZCBzaXplIGluIGEgdHJlZWJpbiBhdCBpICovCisjZGVmaW5lIGJpdF9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoaSA9PSBOVFJFRUJJTlMtMSk/IChTSVpFX1RfQklUU0laRS0xKSA6ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDIpCisKKy8qIFNoaWZ0IHBsYWNpbmcgbWF4aW11bSByZXNvbHZlZCBiaXQgaW4gYSB0cmVlYmluIGF0IGkgYXMgc2lnbiBiaXQgKi8KKyNkZWZpbmUgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgICgoaSA9PSBOVFJFRUJJTlMtMSk/IDAgOiBcCisgICAgKChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSAtICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDIpKSkKKworLyogVGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IGNodW5rIGhlbGQgaW4gYmluIHdpdGggaW5kZXggaSAqLworI2RlZmluZSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgICgoU0laRV9UX09ORSA8PCAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQpKSB8ICBcCisgICAoKChzaXplX3QpKChpKSAmIFNJWkVfVF9PTkUpKSA8PCAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAxKSkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gYmluIG1hcHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYml0IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gaW5kZXggKi8KKyNkZWZpbmUgaWR4MmJpdChpKSAgICAgICAgICAgICAgKChiaW5tYXBfdCkoMSkgPDwgKGkpKQorCisvKiBNYXJrL0NsZWFyIGJpdHMgd2l0aCBnaXZlbiBpbmRleCAqLworI2RlZmluZSBtYXJrX3NtYWxsbWFwKE0saSkgICAgICAoKE0pLT5zbWFsbG1hcCB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfc21hbGxtYXAoTSxpKSAgICAgKChNKS0+c21hbGxtYXAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHNtYWxsbWFwX2lzX21hcmtlZChNLGkpICgoTSktPnNtYWxsbWFwICYgICBpZHgyYml0KGkpKQorCisjZGVmaW5lIG1hcmtfdHJlZW1hcChNLGkpICAgICAgICgoTSktPnRyZWVtYXAgIHw9ICBpZHgyYml0KGkpKQorI2RlZmluZSBjbGVhcl90cmVlbWFwKE0saSkgICAgICAoKE0pLT50cmVlbWFwICAmPSB+aWR4MmJpdChpKSkKKyNkZWZpbmUgdHJlZW1hcF9pc19tYXJrZWQoTSxpKSAgKChNKS0+dHJlZW1hcCAgJiAgIGlkeDJiaXQoaSkpCisKKy8qIGlzb2xhdGUgdGhlIGxlYXN0IHNldCBiaXQgb2YgYSBiaXRtYXAgKi8KKyNkZWZpbmUgbGVhc3RfYml0KHgpICAgICAgICAgKCh4KSAmIC0oeCkpCisKKy8qIG1hc2sgd2l0aCBhbGwgYml0cyB0byBsZWZ0IG9mIGxlYXN0IGJpdCBvZiB4IG9uICovCisjZGVmaW5lIGxlZnRfYml0cyh4KSAgICAgICAgICgoeDw8MSkgfCAtKHg8PDEpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBvciBlcXVhbCB0byBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBzYW1lX29yX2xlZnRfYml0cyh4KSAoKHgpIHwgLSh4KSkKKworLyogaW5kZXggY29ycmVzcG9uZGluZyB0byBnaXZlbiBiaXQuIFVzZSB4ODYgYXNtIGlmIHBvc3NpYmxlICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBfX2FzbV9fKCJic2ZsXHQlMSwgJTBcblx0IiA6ICI9ciIgKEopIDogInJtIiAoWCkpO1wKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2VsaWYgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBKID0gX2JpdF9zY2FuX2ZvcndhcmQgKFgpOyBcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgX0JpdFNjYW5Gb3J3YXJkKChEV09SRCAqKSAmSiwgWCk7XAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxpZiBVU0VfQlVJTFRJTl9GRlMKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpIEkgPSBmZnMoWCktMQorCisjZWxzZQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgWSA9IFggLSAxO1wKKyAgdW5zaWduZWQgaW50IEsgPSBZID4+ICgxNi00KSAmIDE2O1wKKyAgdW5zaWduZWQgaW50IE4gPSBLOyAgICAgICAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDgtMykgJiAgODsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICg0LTIpICYgIDQ7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMi0xKSAmICAyOyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDEtMCkgJiAgMTsgIFkgPj49IEs7XAorICBJID0gKGJpbmRleF90KShOICsgWSk7XAorfQorI2VuZGlmIC8qIEdOVUMgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSdW50aW1lIENoZWNrIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBGb3Igc2VjdXJpdHksIHRoZSBtYWluIGludmFyaWFudCBpcyB0aGF0IG1hbGxvYy9mcmVlL2V0YyBuZXZlcgorICB3cml0ZXMgdG8gYSBzdGF0aWMgYWRkcmVzcyBvdGhlciB0aGFuIG1hbGxvY19zdGF0ZSwgdW5sZXNzIHN0YXRpYworICBtYWxsb2Nfc3RhdGUgaXRzZWxmIGhhcyBiZWVuIGNvcnJ1cHRlZCwgd2hpY2ggY2Fubm90IG9jY3VyIHZpYQorICBtYWxsb2MgKGJlY2F1c2Ugb2YgdGhlc2UgY2hlY2tzKS4gSW4gZXNzZW5jZSB0aGlzIG1lYW5zIHRoYXQgd2UKKyAgYmVsaWV2ZSBhbGwgcG9pbnRlcnMsIHNpemVzLCBtYXBzIGV0YyBoZWxkIGluIG1hbGxvY19zdGF0ZSwgYnV0CisgIGNoZWNrIGFsbCBvZiB0aG9zZSBsaW5rZWQgb3Igb2Zmc2V0dGVkIGZyb20gb3RoZXIgZW1iZWRkZWQgZGF0YQorICBzdHJ1Y3R1cmVzLiAgVGhlc2UgY2hlY2tzIGFyZSBpbnRlcnNwZXJzZWQgd2l0aCBtYWluIGNvZGUgaW4gYSB3YXkKKyAgdGhhdCB0ZW5kcyB0byBtaW5pbWl6ZSB0aGVpciBydW4tdGltZSBjb3N0LgorCisgIFdoZW4gRk9PVEVSUyBpcyBkZWZpbmVkLCBpbiBhZGRpdGlvbiB0byByYW5nZSBjaGVja2luZywgd2UgYWxzbworICB2ZXJpZnkgZm9vdGVyIGZpZWxkcyBvZiBpbnVzZSBjaHVua3MsIHdoaWNoIGNhbiBiZSB1c2VkIGd1YXJhbnRlZQorICB0aGF0IHRoZSBtc3RhdGUgY29udHJvbGxpbmcgbWFsbG9jL2ZyZWUgaXMgaW50YWN0LiAgVGhpcyBpcyBhCisgIHN0cmVhbWxpbmVkIHZlcnNpb24gb2YgdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBieSBXaWxsaWFtIFJvYmVydHNvbgorICBldCBhbCBpbiAiUnVuLXRpbWUgRGV0ZWN0aW9uIG9mIEhlYXAtYmFzZWQgT3ZlcmZsb3dzIiBMSVNBJzAzCisgIGh0dHA6Ly93d3cudXNlbml4Lm9yZy9ldmVudHMvbGlzYTAzL3RlY2gvcm9iZXJ0c29uLmh0bWwgVGhlIGZvb3RlcgorICBvZiBhbiBpbnVzZSBjaHVuayBob2xkcyB0aGUgeG9yIG9mIGl0cyBtc3RhdGUgYW5kIGEgcmFuZG9tIHNlZWQsCisgIHRoYXQgaXMgY2hlY2tlZCB1cG9uIGNhbGxzIHRvIGZyZWUoKSBhbmQgcmVhbGxvYygpLiAgVGhpcyBpcworICAocHJvYmFibGlzdGljYWxseSkgdW5ndWVzc2FibGUgZnJvbSBvdXRzaWRlIHRoZSBwcm9ncmFtLCBidXQgY2FuIGJlCisgIGNvbXB1dGVkIGJ5IGFueSBjb2RlIHN1Y2Nlc3NmdWxseSBtYWxsb2MnaW5nIGFueSBjaHVuaywgc28gZG9lcyBub3QKKyAgaXRzZWxmIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGNvZGUgdGhhdCBoYXMgYWxyZWFkeSBicm9rZW4KKyAgc2VjdXJpdHkgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiAgVW5saWtlIFJvYmVydHNvbiBldCBhbCwgd2UKKyAgYWx3YXlzIGR5bmFtaWNhbGx5IGNoZWNrIGFkZHJlc3NlcyBvZiBhbGwgb2Zmc2V0IGNodW5rcyAocHJldmlvdXMsCisgIG5leHQsIGV0YykuIFRoaXMgdHVybnMgb3V0IHRvIGJlIGNoZWFwZXIgdGhhbiByZWx5aW5nIG9uIGhhc2hlcy4KKyovCisKKyNpZiAhSU5TRUNVUkUKKy8qIENoZWNrIGlmIGFkZHJlc3MgYSBpcyBhdCBsZWFzdCBhcyBoaWdoIGFzIGFueSBmcm9tIE1PUkVDT1JFIG9yIE1NQVAgKi8KKyNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoKGNoYXIqKShhKSA+PSAoTSktPmxlYXN0X2FkZHIpCisvKiBDaGVjayBpZiBhZGRyZXNzIG9mIG5leHQgY2h1bmsgbiBpcyBoaWdoZXIgdGhhbiBiYXNlIGNodW5rIHAgKi8KKyNkZWZpbmUgb2tfbmV4dChwLCBuKSAgICAoKGNoYXIqKShwKSA8IChjaGFyKikobikpCisvKiBDaGVjayBpZiBwIGhhcyBpdHMgY2ludXNlIGJpdCBvbiAqLworI2RlZmluZSBva19jaW51c2UocCkgICAgIGNpbnVzZShwKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIHBpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfcGludXNlKHApICAgICBwaW51c2UocCkKKworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKDEpCisjZGVmaW5lIG9rX25leHQoYiwgbikgICAgKDEpCisjZGVmaW5lIG9rX2NpbnVzZShwKSAgICAgKDEpCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgKDEpCisjZW5kaWYgLyogIUlOU0VDVVJFICovCisKKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCisvKiBDaGVjayBpZiAoYWxsZWdlZCkgbXN0YXRlIG0gaGFzIGV4cGVjdGVkIG1hZ2ljIGZpZWxkICovCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKChNKS0+bWFnaWMgPT0gbXBhcmFtcy5tYWdpYykKKyNlbHNlICAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKDEpCisjZW5kaWYgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworCisKKy8qIEluIGdjYywgdXNlIF9fYnVpbHRpbl9leHBlY3QgdG8gbWluaW1pemUgaW1wYWN0IG9mIGNoZWNrcyAqLworI2lmICFJTlNFQ1VSRQorI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKKyNkZWZpbmUgUlRDSEVDSyhlKSAgX19idWlsdGluX2V4cGVjdChlLCAxKQorI2Vsc2UgLyogR05VQyAqLworI2RlZmluZSBSVENIRUNLKGUpICAoZSkKKyNlbmRpZiAvKiBHTlVDICovCisjZWxzZSAvKiAhSU5TRUNVUkUgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKDEpCisjZW5kaWYgLyogIUlOU0VDVVJFICovCisKKy8qIG1hY3JvcyB0byBzZXQgdXAgaW51c2UgY2h1bmtzIHdpdGggb3Igd2l0aG91dCBmb290ZXJzICovCisKKyNpZiAhRk9PVEVSUworCisjZGVmaW5lIG1hcmtfaW51c2VfZm9vdChNLHAscykKKworLyogU2V0IGNpbnVzZSBiaXQgYW5kIHBpbnVzZSBiaXQgb2YgbmV4dCBjaHVuayAqLworI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKCgocCktPmhlYWQgJiBQSU5VU0VfQklUKXxzfENJTlVTRV9CSVQpLFwKKyAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCisKKy8qIFNldCBjaW51c2UgYW5kIHBpbnVzZSBvZiB0aGlzIGNodW5rIGFuZCBwaW51c2Ugb2YgbmV4dCBjaHVuayAqLworI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCisKKy8qIFNldCBzaXplLCBjaW51c2UgYW5kIHBpbnVzZSBiaXQgb2YgdGhpcyBjaHVuayAqLworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSkKKworI2Vsc2UgLyogRk9PVEVSUyAqLworCisvKiBTZXQgZm9vdCBvZiBpbnVzZSBjaHVuayB0byBiZSB4b3Igb2YgbXN0YXRlIGFuZCBzZWVkICovCisjZGVmaW5lIG1hcmtfaW51c2VfZm9vdChNLHAscylcCisgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAoKHNpemVfdCkoTSkgXiBtcGFyYW1zLm1hZ2ljKSkKKworI2RlZmluZSBnZXRfbXN0YXRlX2ZvcihwKVwKKyAgKChtc3RhdGUpKCgobWNodW5rcHRyKSgoY2hhciopKHApICtcCisgICAgKGNodW5rc2l6ZShwKSkpKS0+cHJldl9mb290IF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksIFwKKyAgbWFya19pbnVzZV9mb290KE0scCxzKSkKKworI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSxcCisgbWFya19pbnVzZV9mb290KE0scCxzKSkKKworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgIG1hcmtfaW51c2VfZm9vdChNLCBwLCBzKSkKKworI2VuZGlmIC8qICFGT09URVJTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2V0dGluZyBtcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluaXRpYWxpemUgbXBhcmFtcyAqLworc3RhdGljIGludCBpbml0X21wYXJhbXModm9pZCkgeworI2lmZGVmIE5FRURfR0xPQkFMX0xPQ0tfSU5JVAorICBpZiAobWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXMgPD0gMCkKKyAgICBpbml0X21hbGxvY19nbG9iYWxfbXV0ZXgoKTsKKyNlbmRpZgorCisgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgIGlmIChtcGFyYW1zLm1hZ2ljID09IDApIHsKKyAgICBzaXplX3QgbWFnaWM7CisgICAgc2l6ZV90IHBzaXplOworICAgIHNpemVfdCBnc2l6ZTsKKworI2lmbmRlZiBXSU4zMgorICAgIHBzaXplID0gbWFsbG9jX2dldHBhZ2VzaXplOworICAgIGdzaXplID0gKChERUZBVUxUX0dSQU5VTEFSSVRZICE9IDApPyBERUZBVUxUX0dSQU5VTEFSSVRZIDogcHNpemUpOworI2Vsc2UgLyogV0lOMzIgKi8KKyAgICB7CisgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKKyAgICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKKyAgICAgIHBzaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsKKyAgICAgIGdzaXplID0gKChERUZBVUxUX0dSQU5VTEFSSVRZICE9IDApPworCSAgICAgICBERUZBVUxUX0dSQU5VTEFSSVRZIDogc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkpOworICAgIH0KKyNlbmRpZiAvKiBXSU4zMiAqLworCisgICAgLyogU2FuaXR5LWNoZWNrIGNvbmZpZ3VyYXRpb246CisgICAgICAgc2l6ZV90IG11c3QgYmUgdW5zaWduZWQgYW5kIGFzIHdpZGUgYXMgcG9pbnRlciB0eXBlLgorICAgICAgIGludHMgbXVzdCBiZSBhdCBsZWFzdCA0IGJ5dGVzLgorICAgICAgIGFsaWdubWVudCBtdXN0IGJlIGF0IGxlYXN0IDguCisgICAgICAgQWxpZ25tZW50LCBtaW4gY2h1bmsgc2l6ZSwgYW5kIHBhZ2Ugc2l6ZSBtdXN0IGFsbCBiZSBwb3dlcnMgb2YgMi4KKyAgICAqLworICAgIGlmICgoc2l6ZW9mKHNpemVfdCkgIT0gc2l6ZW9mKGNoYXIqKSkgfHwKKwkoTUFYX1NJWkVfVCA8IE1JTl9DSFVOS19TSVpFKSAgfHwKKwkoc2l6ZW9mKGludCkgPCA0KSAgfHwKKwkoTUFMTE9DX0FMSUdOTUVOVCA8IChzaXplX3QpOFUpIHx8CisJKChNQUxMT0NfQUxJR05NRU5UICYgKE1BTExPQ19BTElHTk1FTlQtU0laRV9UX09ORSkpICE9IDApIHx8CisJKChNQ0hVTktfU0laRSAgICAgICYgKE1DSFVOS19TSVpFLVNJWkVfVF9PTkUpKSAgICAgICE9IDApIHx8CisJKChnc2l6ZSAgICAgICAgICAgICYgKGdzaXplLVNJWkVfVF9PTkUpKSAgICAgICAgICAgICE9IDApIHx8CisJKChwc2l6ZSAgICAgICAgICAgICYgKHBzaXplLVNJWkVfVF9PTkUpKSAgICAgICAgICAgICE9IDApKQorICAgICAgQUJPUlQ7CisKKyAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gZ3NpemU7CisgICAgbXBhcmFtcy5wYWdlX3NpemUgPSBwc2l6ZTsKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gREVGQVVMVF9NTUFQX1RIUkVTSE9MRDsKKyAgICBtcGFyYW1zLnRyaW1fdGhyZXNob2xkID0gREVGQVVMVF9UUklNX1RIUkVTSE9MRDsKKyNpZiBNT1JFQ09SRV9DT05USUdVT1VTCisgICAgbXBhcmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVQ7CisjZWxzZSAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUfFVTRV9OT05DT05USUdVT1VTX0JJVDsKKyNlbmRpZiAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisgICAgLyogU2V0IHVwIGxvY2sgZm9yIG1haW4gbWFsbG9jIGFyZWEgKi8KKyAgICBnbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgICAodm9pZClJTklUSUFMX0xPQ0soJmdtLT5tdXRleCk7CisjZW5kaWYKKworI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkKKyAgICB7CisjaWYgVVNFX0RFVl9SQU5ET00KKyAgICAgIGludCBmZDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYnVmW3NpemVvZihzaXplX3QpXTsKKyAgICAgIC8qIFRyeSB0byB1c2UgL2Rldi91cmFuZG9tLCBlbHNlIGZhbGwgYmFjayBvbiB1c2luZyB0aW1lICovCisgICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpKSA+PSAwICYmCisJICByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA9PSBzaXplb2YoYnVmKSkgeworCW1hZ2ljID0gKigoc2l6ZV90ICopIGJ1Zik7CisJY2xvc2UoZmQpOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZkZWYgV0lOMzIKKwltYWdpYyA9IChzaXplX3QpKEdldFRpY2tDb3VudCgpIF4gKHNpemVfdCkweDU1NTU1NTU1VSk7CisjZWxzZQorICAgICAgbWFnaWMgPSAoc2l6ZV90KSh0aW1lKDApIF4gKHNpemVfdCkweDU1NTU1NTU1VSk7CisjZW5kaWYKKyAgICAgIG1hZ2ljIHw9IChzaXplX3QpOFU7ICAgIC8qIGVuc3VyZSBub256ZXJvICovCisgICAgICBtYWdpYyAmPSB+KHNpemVfdCk3VTsgICAvKiBpbXByb3ZlIGNoYW5jZXMgb2YgZmF1bHQgZm9yIGJhZCB2YWx1ZXMgKi8KKyAgICB9CisjZWxzZSAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisgICAgbWFnaWMgPSAoc2l6ZV90KTB4NTg1ODU4NThVOworI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworICAgIG1wYXJhbXMubWFnaWMgPSBtYWdpYzsKKyAgfQorCisgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgIHJldHVybiAxOworfQorCisvKiBzdXBwb3J0IGZvciBtYWxsb3B0ICovCitzdGF0aWMgaW50IGNoYW5nZV9tcGFyYW0oaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHNpemVfdCB2YWwgPSAodmFsdWUgPT0gLTEpPyBNQVhfU0laRV9UIDogKHNpemVfdCl2YWx1ZTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIHN3aXRjaChwYXJhbV9udW1iZXIpIHsKKyAgY2FzZSBNX1RSSU1fVEhSRVNIT0xEOgorICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGNhc2UgTV9HUkFOVUxBUklUWToKKyAgICBpZiAodmFsID49IG1wYXJhbXMucGFnZV9zaXplICYmICgodmFsICYgKHZhbC0xKSkgPT0gMCkpIHsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSB2YWw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIGNhc2UgTV9NTUFQX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBkZWZhdWx0OgorICAgIHJldHVybiAwOworICB9Cit9CisKKyNpZiBERUJVRworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBhbnkgY2h1bmssIHdoZXRoZXIgZnJlZSwgaW51c2UsIG1tYXBwZWQgZXRjICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIHRvcCBjaHVuayAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopcCk7CisgIHNpemVfdCAgc3ogPSBwLT5oZWFkICYgfklOVVNFX0JJVFM7IC8qIHRoaXJkLWxvd2VzdCBiaXQgY2FuIGJlIHNldCEgKi8KKyAgYXNzZXJ0KHNwICE9IDApOworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworICBhc3NlcnQoc3ogPT0gbS0+dG9wc2l6ZSk7CisgIGFzc2VydChzeiA+IDApOworICBhc3NlcnQoc3ogPT0gKChzcC0+YmFzZSArIHNwLT5zaXplKSAtIChjaGFyKilwKSAtIFRPUF9GT09UX1NJWkUpOworICBhc3NlcnQocGludXNlKHApKTsKKyAgYXNzZXJ0KCFwaW51c2UoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opKSk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgKGludXNlKSBtbWFwcGVkIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90ICBzeiA9IGNodW5rc2l6ZShwKTsKKyAgc2l6ZV90IGxlbiA9IChzeiArIChwLT5wcmV2X2Zvb3QgJiB+SVNfTU1BUFBFRF9CSVQpICsgTU1BUF9GT09UX1BBRCk7CisgIGFzc2VydChpc19tbWFwcGVkKHApKTsKKyAgYXNzZXJ0KHVzZV9tbWFwKG0pKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KCFpc19zbWFsbChzeikpOworICBhc3NlcnQoKGxlbiAmIChtcGFyYW1zLnBhZ2Vfc2l6ZS1TSVpFX1RfT05FKSkgPT0gMCk7CisgIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeiktPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3orU0laRV9UX1NJWkUpLT5oZWFkID09IDApOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGludXNlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKKyAgYXNzZXJ0KGNpbnVzZShwKSk7CisgIGFzc2VydChuZXh0X3BpbnVzZShwKSk7CisgIC8qIElmIG5vdCBwaW51c2UgYW5kIG5vdCBtbWFwcGVkLCBwcmV2aW91cyBjaHVuayBoYXMgT0sgb2Zmc2V0ICovCisgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHBpbnVzZShwKSB8fCBuZXh0X2NodW5rKHByZXZfY2h1bmsocCkpID09IHApOworICBpZiAoaXNfbW1hcHBlZChwKSkKKyAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG0sIHApOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBzaXplX3Qgc3ogPSBjaHVua3NpemUocCk7CisgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc3opOworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydCghY2ludXNlKHApKTsKKyAgYXNzZXJ0KCFuZXh0X3BpbnVzZShwKSk7CisgIGFzc2VydCAoIWlzX21tYXBwZWQocCkpOworICBpZiAocCAhPSBtLT5kdiAmJiBwICE9IG0tPnRvcCkgeworICAgIGlmIChzeiA+PSBNSU5fQ0hVTktfU0laRSkgeworICAgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOworICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7CisgICAgICBhc3NlcnQobmV4dC0+cHJldl9mb290ID09IHN6KTsKKyAgICAgIGFzc2VydChwaW51c2UocCkpOworICAgICAgYXNzZXJ0IChuZXh0ID09IG0tPnRvcCB8fCBjaW51c2UobmV4dCkpOworICAgICAgYXNzZXJ0KHAtPmZkLT5iayA9PSBwKTsKKyAgICAgIGFzc2VydChwLT5iay0+ZmQgPT0gcCk7CisgICAgfQorICAgIGVsc2UgIC8qIG1hcmtlcnMgYXJlIGFsd2F5cyBvZiBzaXplIFNJWkVfVF9TSVpFICovCisgICAgICBhc3NlcnQoc3ogPT0gU0laRV9UX1NJWkUpOworICB9Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgbWFsbG9jZWQgY2h1bmtzIGF0IHRoZSBwb2ludCB0aGV5IGFyZSBtYWxsb2NlZCAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBzaXplX3Qgc3ogPSBwLT5oZWFkICYgfihQSU5VU0VfQklUfENJTlVTRV9CSVQpOworICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKKyAgICBhc3NlcnQoc3ogPj0gTUlOX0NIVU5LX1NJWkUpOworICAgIGFzc2VydChzeiA+PSBzKTsKKyAgICAvKiB1bmxlc3MgbW1hcHBlZCwgc2l6ZSBpcyBsZXNzIHRoYW4gTUlOX0NIVU5LX1NJWkUgbW9yZSB0aGFuIHJlcXVlc3QgKi8KKyAgICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBzeiA8IChzICsgTUlOX0NIVU5LX1NJWkUpKTsKKyAgfQorfQorCisvKiBDaGVjayBhIHRyZWUgYW5kIGl0cyBzdWJ0cmVlcy4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCkgeworICB0Y2h1bmtwdHIgaGVhZCA9IDA7CisgIHRjaHVua3B0ciB1ID0gdDsKKyAgYmluZGV4X3QgdGluZGV4ID0gdC0+aW5kZXg7CisgIHNpemVfdCB0c2l6ZSA9IGNodW5rc2l6ZSh0KTsKKyAgYmluZGV4X3QgaWR4OworICBjb21wdXRlX3RyZWVfaW5kZXgodHNpemUsIGlkeCk7CisgIGFzc2VydCh0aW5kZXggPT0gaWR4KTsKKyAgYXNzZXJ0KHRzaXplID49IE1JTl9MQVJHRV9TSVpFKTsKKyAgYXNzZXJ0KHRzaXplID49IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaWR4KSk7CisgIGFzc2VydCgoaWR4ID09IE5UUkVFQklOUy0xKSB8fCAodHNpemUgPCBtaW5zaXplX2Zvcl90cmVlX2luZGV4KChpZHgrMSkpKSk7CisKKyAgZG8geyAvKiB0cmF2ZXJzZSB0aHJvdWdoIGNoYWluIG9mIHNhbWUtc2l6ZWQgbm9kZXMgKi8KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgKChtY2h1bmtwdHIpdSkpOworICAgIGFzc2VydCh1LT5pbmRleCA9PSB0aW5kZXgpOworICAgIGFzc2VydChjaHVua3NpemUodSkgPT0gdHNpemUpOworICAgIGFzc2VydCghY2ludXNlKHUpKTsKKyAgICBhc3NlcnQoIW5leHRfcGludXNlKHUpKTsKKyAgICBhc3NlcnQodS0+ZmQtPmJrID09IHUpOworICAgIGFzc2VydCh1LT5iay0+ZmQgPT0gdSk7CisgICAgaWYgKHUtPnBhcmVudCA9PSAwKSB7CisgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0gPT0gMCk7CisgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0gPT0gMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXNzZXJ0KGhlYWQgPT0gMCk7IC8qIG9ubHkgb25lIG5vZGUgb24gY2hhaW4gaGFzIHBhcmVudCAqLworICAgICAgaGVhZCA9IHU7CisgICAgICBhc3NlcnQodS0+cGFyZW50ICE9IHUpOworICAgICAgYXNzZXJ0ICh1LT5wYXJlbnQtPmNoaWxkWzBdID09IHUgfHwKKwkgICAgICB1LT5wYXJlbnQtPmNoaWxkWzFdID09IHUgfHwKKwkgICAgICAqKCh0YmlucHRyKikodS0+cGFyZW50KSkgPT0gdSk7CisgICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCkgeworCWFzc2VydCh1LT5jaGlsZFswXS0+cGFyZW50ID09IHUpOworCWFzc2VydCh1LT5jaGlsZFswXSAhPSB1KTsKKwlkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzBdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFsxXSAhPSAwKSB7CisJYXNzZXJ0KHUtPmNoaWxkWzFdLT5wYXJlbnQgPT0gdSk7CisJYXNzZXJ0KHUtPmNoaWxkWzFdICE9IHUpOworCWRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMV0pOworICAgICAgfQorICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDAgJiYgdS0+Y2hpbGRbMV0gIT0gMCkgeworCWFzc2VydChjaHVua3NpemUodS0+Y2hpbGRbMF0pIDwgY2h1bmtzaXplKHUtPmNoaWxkWzFdKSk7CisgICAgICB9CisgICAgfQorICAgIHUgPSB1LT5mZDsKKyAgfSB3aGlsZSAodSAhPSB0KTsKKyAgYXNzZXJ0KGhlYWQgIT0gMCk7Cit9CisKKy8qICBDaGVjayBhbGwgdGhlIGNodW5rcyBpbiBhIHRyZWViaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZWJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkgeworICB0YmlucHRyKiB0YiA9IHRyZWViaW5fYXQobSwgaSk7CisgIHRjaHVua3B0ciB0ID0gKnRiOworICBpbnQgZW1wdHkgPSAobS0+dHJlZW1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHQgPT0gMCkKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KQorICAgIGRvX2NoZWNrX3RyZWUobSwgdCk7Cit9CisKKy8qICBDaGVjayBhbGwgdGhlIGNodW5rcyBpbiBhIHNtYWxsYmluLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3NtYWxsYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIGkpOworICBtY2h1bmtwdHIgcCA9IGItPmJrOworICB1bnNpZ25lZCBpbnQgZW1wdHkgPSAobS0+c21hbGxtYXAgJiAoMVUgPDwgaSkpID09IDA7CisgIGlmIChwID09IGIpCisgICAgYXNzZXJ0KGVtcHR5KTsKKyAgaWYgKCFlbXB0eSkgeworICAgIGZvciAoOyBwICE9IGI7IHAgPSBwLT5iaykgeworICAgICAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICBtY2h1bmtwdHIgcTsKKyAgICAgIC8qIGVhY2ggY2h1bmsgY2xhaW1zIHRvIGJlIGZyZWUgKi8KKyAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcCk7CisgICAgICAvKiBjaHVuayBiZWxvbmdzIGluIGJpbiAqLworICAgICAgYXNzZXJ0KHNtYWxsX2luZGV4KHNpemUpID09IGkpOworICAgICAgYXNzZXJ0KHAtPmJrID09IGIgfHwgY2h1bmtzaXplKHAtPmJrKSA9PSBjaHVua3NpemUocCkpOworICAgICAgLyogY2h1bmsgaXMgZm9sbG93ZWQgYnkgYW4gaW51c2UgY2h1bmsgKi8KKyAgICAgIHEgPSBuZXh0X2NodW5rKHApOworICAgICAgaWYgKHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpCisJZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisgICAgfQorICB9Cit9CisKKy8qIEZpbmQgeCBpbiBhIGJpbi4gVXNlZCBpbiBvdGhlciBjaGVjayBmdW5jdGlvbnMuICovCitzdGF0aWMgaW50IGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCkgeworICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZSh4KTsKKyAgaWYgKGlzX3NtYWxsKHNpemUpKSB7CisgICAgYmluZGV4X3Qgc2lkeCA9IHNtYWxsX2luZGV4KHNpemUpOworICAgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIHNpZHgpOworICAgIGlmIChzbWFsbG1hcF9pc19tYXJrZWQobSwgc2lkeCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYjsKKyAgICAgIGRvIHsKKwlpZiAocCA9PSB4KQorCSAgcmV0dXJuIDE7CisgICAgICB9IHdoaWxlICgocCA9IHAtPmZkKSAhPSBiKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgYmluZGV4X3QgdGlkeDsKKyAgICBjb21wdXRlX3RyZWVfaW5kZXgoc2l6ZSwgdGlkeCk7CisgICAgaWYgKHRyZWVtYXBfaXNfbWFya2VkKG0sIHRpZHgpKSB7CisgICAgICB0Y2h1bmtwdHIgdCA9ICp0cmVlYmluX2F0KG0sIHRpZHgpOworICAgICAgc2l6ZV90IHNpemViaXRzID0gc2l6ZSA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgodGlkeCk7CisgICAgICB3aGlsZSAodCAhPSAwICYmIGNodW5rc2l6ZSh0KSAhPSBzaXplKSB7CisJdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisJc2l6ZWJpdHMgPDw9IDE7CisgICAgICB9CisgICAgICBpZiAodCAhPSAwKSB7CisJdGNodW5rcHRyIHUgPSB0OworCWRvIHsKKwkgIGlmICh1ID09ICh0Y2h1bmtwdHIpeCkKKwkgICAgcmV0dXJuIDE7CisJfSB3aGlsZSAoKHUgPSB1LT5mZCkgIT0gdCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBUcmF2ZXJzZSBlYWNoIGNodW5rIGFuZCBjaGVjayBpdDsgcmV0dXJuIHRvdGFsICovCitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSkgeworICBzaXplX3Qgc3VtID0gMDsKKyAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgc3VtICs9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICBtY2h1bmtwdHIgbGFzdHEgPSAwOworICAgICAgYXNzZXJ0KHBpbnVzZShxKSk7CisgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorCSAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworCXN1bSArPSBjaHVua3NpemUocSk7CisJaWYgKGNpbnVzZShxKSkgeworCSAgYXNzZXJ0KCFiaW5fZmluZChtLCBxKSk7CisJICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsKKwl9CisJZWxzZSB7CisJICBhc3NlcnQocSA9PSBtLT5kdiB8fCBiaW5fZmluZChtLCBxKSk7CisJICBhc3NlcnQobGFzdHEgPT0gMCB8fCBjaW51c2UobGFzdHEpKTsgLyogTm90IDIgY29uc2VjdXRpdmUgZnJlZSAqLworCSAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsKKwl9CisJbGFzdHEgPSBxOworCXEgPSBuZXh0X2NodW5rKHEpOworICAgICAgfQorICAgICAgcyA9IHMtPm5leHQ7CisgICAgfQorICB9CisgIHJldHVybiBzdW07Cit9CisKKy8qIENoZWNrIGFsbCBwcm9wZXJ0aWVzIG9mIG1hbGxvY19zdGF0ZS4gKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSkgeworICBiaW5kZXhfdCBpOworICBzaXplX3QgdG90YWw7CisgIC8qIGNoZWNrIGJpbnMgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkKKyAgICBkb19jaGVja19zbWFsbGJpbihtLCBpKTsKKyAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQorICAgIGRvX2NoZWNrX3RyZWViaW4obSwgaSk7CisKKyAgaWYgKG0tPmR2c2l6ZSAhPSAwKSB7IC8qIGNoZWNrIGR2IGNodW5rICovCisgICAgZG9fY2hlY2tfYW55X2NodW5rKG0sIG0tPmR2KTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID09IGNodW5rc2l6ZShtLT5kdikpOworICAgIGFzc2VydChtLT5kdnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOworICAgIGFzc2VydChiaW5fZmluZChtLCBtLT5kdikgPT0gMCk7CisgIH0KKworICBpZiAobS0+dG9wICE9IDApIHsgICAvKiBjaGVjayB0b3AgY2h1bmsgKi8KKyAgICBkb19jaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAvKmFzc2VydChtLT50b3BzaXplID09IGNodW5rc2l6ZShtLT50b3ApKTsgcmVkdW5kYW50ICovCisgICAgYXNzZXJ0KG0tPnRvcHNpemUgPiAwKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+dG9wKSA9PSAwKTsKKyAgfQorCisgIHRvdGFsID0gdHJhdmVyc2VfYW5kX2NoZWNrKG0pOworICBhc3NlcnQodG90YWwgPD0gbS0+Zm9vdHByaW50KTsKKyAgYXNzZXJ0KG0tPmZvb3RwcmludCA8PSBtLT5tYXhfZm9vdHByaW50KTsKK30KKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGF0aXN0aWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU5PX01BTExJTkZPCitzdGF0aWMgc3RydWN0IG1hbGxpbmZvIGludGVybmFsX21hbGxpbmZvKG1zdGF0ZSBtKSB7CisgIHN0cnVjdCBtYWxsaW5mbyBubSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7CisgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgICBzaXplX3QgbmZyZWUgPSBTSVpFX1RfT05FOyAvKiB0b3AgYWx3YXlzIGZyZWUgKi8KKyAgICAgIHNpemVfdCBtZnJlZSA9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgICAgc2l6ZV90IHN1bSA9IG1mcmVlOworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICB3aGlsZSAocyAhPSAwKSB7CisJbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKwl3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorCSAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisJICBzaXplX3Qgc3ogPSBjaHVua3NpemUocSk7CisJICBzdW0gKz0gc3o7CisJICBpZiAoIWNpbnVzZShxKSkgeworCSAgICBtZnJlZSArPSBzejsKKwkgICAgKytuZnJlZTsKKwkgIH0KKwkgIHEgPSBuZXh0X2NodW5rKHEpOworCX0KKwlzID0gcy0+bmV4dDsKKyAgICAgIH0KKworICAgICAgbm0uYXJlbmEgICAgPSBzdW07CisgICAgICBubS5vcmRibGtzICA9IG5mcmVlOworICAgICAgbm0uaGJsa2hkICAgPSBtLT5mb290cHJpbnQgLSBzdW07CisgICAgICBubS51c21ibGtzICA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBubS51b3JkYmxrcyA9IG0tPmZvb3RwcmludCAtIG1mcmVlOworICAgICAgbm0uZm9yZGJsa3MgPSBtZnJlZTsKKyAgICAgIG5tLmtlZXBjb3N0ID0gbS0+dG9wc2l6ZTsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9CisgIHJldHVybiBubTsKK30KKyNlbmRpZiAvKiAhTk9fTUFMTElORk8gKi8KKworc3RhdGljIHZvaWQgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zdGF0ZSBtKSB7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIHNpemVfdCBtYXhmcCA9IDA7CisgICAgc2l6ZV90IGZwID0gMDsKKyAgICBzaXplX3QgdXNlZCA9IDA7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICBtYXhmcCA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBmcCA9IG0tPmZvb3RwcmludDsKKyAgICAgIHVzZWQgPSBmcCAtIChtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRSk7CisKKyAgICAgIHdoaWxlIChzICE9IDApIHsKKwltY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworCXdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisJICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKwkgIGlmICghY2ludXNlKHEpKQorCSAgICB1c2VkIC09IGNodW5rc2l6ZShxKTsKKwkgIHEgPSBuZXh0X2NodW5rKHEpOworCX0KKwlzID0gcy0+bmV4dDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIm1heCBzeXN0ZW0gYnl0ZXMgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKG1heGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJzeXN0ZW0gYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShmcCkpOworICAgIGZwcmludGYoc3RkZXJyLCAiaW4gdXNlIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykodXNlZCkpOworCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHNtYWxsYmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBWYXJpb3VzIGZvcm1zIG9mIGxpbmtpbmcgYW5kIHVubGlua2luZyBhcmUgZGVmaW5lZCBhcyBtYWNyb3MuICBFdmVuCisgIHRoZSBvbmVzIGZvciB0cmVlcywgd2hpY2ggYXJlIHZlcnkgbG9uZyBidXQgaGF2ZSB2ZXJ5IHNob3J0IHR5cGljYWwKKyAgcGF0aHMuICBUaGlzIGlzIHVnbHkgYnV0IHJlZHVjZXMgcmVsaWFuY2Ugb24gaW5saW5pbmcgc3VwcG9ydCBvZgorICBjb21waWxlcnMuCisqLworCisvKiBMaW5rIGEgZnJlZSBjaHVuayBpbnRvIGEgc21hbGxiaW4gICovCisjZGVmaW5lIGluc2VydF9zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBiaW5kZXhfdCBJICA9IHNtYWxsX2luZGV4KFMpO1wKKyAgbWNodW5rcHRyIEIgPSBzbWFsbGJpbl9hdChNLCBJKTtcCisgIG1jaHVua3B0ciBGID0gQjtcCisgIGFzc2VydChTID49IE1JTl9DSFVOS19TSVpFKTtcCisgIGlmICghc21hbGxtYXBfaXNfbWFya2VkKE0sIEkpKVwKKyAgICBtYXJrX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEItPmZkKSkpXAorICAgIEYgPSBCLT5mZDtcCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCisgIEItPmZkID0gUDtcCisgIEYtPmJrID0gUDtcCisgIFAtPmZkID0gRjtcCisgIFAtPmJrID0gQjtcCit9CisKKy8qIFVubGluayBhIGNodW5rIGZyb20gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIG1jaHVua3B0ciBGID0gUC0+ZmQ7XAorICBtY2h1bmtwdHIgQiA9IFAtPmJrO1wKKyAgYmluZGV4X3QgSSA9IHNtYWxsX2luZGV4KFMpO1wKKyAgYXNzZXJ0KFAgIT0gQik7XAorICBhc3NlcnQoUCAhPSBGKTtcCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAorICBpZiAoRiA9PSBCKVwKKyAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0soKEYgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEYpKSAmJlwKKwkJICAgKEIgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEIpKSkpIHtcCisgICAgRi0+YmsgPSBCO1wKKyAgICBCLT5mZCA9IEY7XAorICB9XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorfQorCisvKiBVbmxpbmsgdGhlIGZpcnN0IGNodW5rIGZyb20gYSBzbWFsbGJpbiAqLworI2RlZmluZSB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoTSwgQiwgUCwgSSkge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEIgPT0gRilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgIEItPmZkID0gRjtcCisgICAgRi0+YmsgPSBCO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworCisKKy8qIFJlcGxhY2UgZHYgbm9kZSwgYmlubmluZyB0aGUgb2xkIG9uZSAqLworLyogVXNlZCBvbmx5IHdoZW4gZHZzaXplIGtub3duIHRvIGJlIHNtYWxsICovCisjZGVmaW5lIHJlcGxhY2VfZHYoTSwgUCwgUykge1wKKyAgc2l6ZV90IERWUyA9IE0tPmR2c2l6ZTtcCisgIGlmIChEVlMgIT0gMCkge1wKKyAgICBtY2h1bmtwdHIgRFYgPSBNLT5kdjtcCisgICAgYXNzZXJ0KGlzX3NtYWxsKERWUykpO1wKKyAgICBpbnNlcnRfc21hbGxfY2h1bmsoTSwgRFYsIERWUyk7XAorICB9XAorICBNLT5kdnNpemUgPSBTO1wKKyAgTS0+ZHYgPSBQO1wKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHRyZWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5zZXJ0IGNodW5rIGludG8gdHJlZSAqLworI2RlZmluZSBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgWCwgUykge1wKKyAgdGJpbnB0ciogSDtcCisgIGJpbmRleF90IEk7XAorICBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSk7XAorICBIID0gdHJlZWJpbl9hdChNLCBJKTtcCisgIFgtPmluZGV4ID0gSTtcCisgIFgtPmNoaWxkWzBdID0gWC0+Y2hpbGRbMV0gPSAwO1wKKyAgaWYgKCF0cmVlbWFwX2lzX21hcmtlZChNLCBJKSkge1wKKyAgICBtYXJrX3RyZWVtYXAoTSwgSSk7XAorICAgICpIID0gWDtcCisgICAgWC0+cGFyZW50ID0gKHRjaHVua3B0cilIO1wKKyAgICBYLT5mZCA9IFgtPmJrID0gWDtcCisgIH1cCisgIGVsc2Uge1wKKyAgICB0Y2h1bmtwdHIgVCA9ICpIO1wKKyAgICBzaXplX3QgSyA9IFMgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KEkpO1wKKyAgICBmb3IgKDs7KSB7XAorICAgICAgaWYgKGNodW5rc2l6ZShUKSAhPSBTKSB7XAorCXRjaHVua3B0ciogQyA9ICYoVC0+Y2hpbGRbKEsgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdKTtcCisJSyA8PD0gMTtcCisJaWYgKCpDICE9IDApXAorCSAgVCA9ICpDO1wKKwllbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQykpKSB7XAorCSAgKkMgPSBYO1wKKwkgIFgtPnBhcmVudCA9IFQ7XAorCSAgWC0+ZmQgPSBYLT5iayA9IFg7XAorCSAgYnJlYWs7XAorCX1cCisJZWxzZSB7XAorCSAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorCSAgYnJlYWs7XAorCX1cCisgICAgICB9XAorICAgICAgZWxzZSB7XAorCXRjaHVua3B0ciBGID0gVC0+ZmQ7XAorCWlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgVCkgJiYgb2tfYWRkcmVzcyhNLCBGKSkpIHtcCisJICBULT5mZCA9IEYtPmJrID0gWDtcCisJICBYLT5mZCA9IEY7XAorCSAgWC0+YmsgPSBUO1wKKwkgIFgtPnBhcmVudCA9IDA7XAorCSAgYnJlYWs7XAorCX1cCisJZWxzZSB7XAorCSAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorCSAgYnJlYWs7XAorCX1cCisgICAgICB9XAorICAgIH1cCisgIH1cCit9CisKKy8qCisgIFVubGluayBzdGVwczoKKworICAxLiBJZiB4IGlzIGEgY2hhaW5lZCBub2RlLCB1bmxpbmsgaXQgZnJvbSBpdHMgc2FtZS1zaXplZCBmZC9iayBsaW5rcworICAgICBhbmQgY2hvb3NlIGl0cyBiayBub2RlIGFzIGl0cyByZXBsYWNlbWVudC4KKyAgMi4gSWYgeCB3YXMgdGhlIGxhc3Qgbm9kZSBvZiBpdHMgc2l6ZSwgYnV0IG5vdCBhIGxlYWYgbm9kZSwgaXQgbXVzdAorICAgICBiZSByZXBsYWNlZCB3aXRoIGEgbGVhZiBub2RlIChub3QgbWVyZWx5IG9uZSB3aXRoIGFuIG9wZW4gbGVmdCBvcgorICAgICByaWdodCksIHRvIG1ha2Ugc3VyZSB0aGF0IGxlZnRzIGFuZCByaWdodHMgb2YgZGVzY2VuZGFudHMKKyAgICAgY29ycmVzcG9uZCBwcm9wZXJseSB0byBiaXQgbWFza3MuICBXZSB1c2UgdGhlIHJpZ2h0bW9zdCBkZXNjZW5kYW50CisgICAgIG9mIHguICBXZSBjb3VsZCB1c2UgYW55IG90aGVyIGxlYWYsIGJ1dCB0aGlzIGlzIGVhc3kgdG8gbG9jYXRlIGFuZAorICAgICB0ZW5kcyB0byBjb3VudGVyYWN0IHJlbW92YWwgb2YgbGVmdG1vc3RzIGVsc2V3aGVyZSwgYW5kIHNvIGtlZXBzCisgICAgIHBhdGhzIHNob3J0ZXIgdGhhbiBtaW5pbWFsbHkgZ3VhcmFudGVlZC4gIFRoaXMgZG9lc24ndCBsb29wIG11Y2gKKyAgICAgYmVjYXVzZSBvbiBhdmVyYWdlIGEgbm9kZSBpbiBhIHRyZWUgaXMgbmVhciB0aGUgYm90dG9tLgorICAzLiBJZiB4IGlzIHRoZSBiYXNlIG9mIGEgY2hhaW4gKGkuZS4sIGhhcyBwYXJlbnQgbGlua3MpIHJlbGluaworICAgICB4J3MgcGFyZW50IGFuZCBjaGlsZHJlbiB0byB4J3MgcmVwbGFjZW1lbnQgKG9yIG51bGwgaWYgbm9uZSkuCisqLworCisjZGVmaW5lIHVubGlua19sYXJnZV9jaHVuayhNLCBYKSB7XAorICB0Y2h1bmtwdHIgWFAgPSBYLT5wYXJlbnQ7XAorICB0Y2h1bmtwdHIgUjtcCisgIGlmIChYLT5iayAhPSBYKSB7XAorICAgIHRjaHVua3B0ciBGID0gWC0+ZmQ7XAorICAgIFIgPSBYLT5iaztcCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgICBGLT5iayA9IFI7XAorICAgICAgUi0+ZmQgPSBGO1wKKyAgICB9XAorICAgIGVsc2Uge1wKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyKiBSUDtcCisgICAgaWYgKCgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzFdKSkpICE9IDApIHx8XAorCSgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzBdKSkpICE9IDApKSB7XAorICAgICAgdGNodW5rcHRyKiBDUDtcCisgICAgICB3aGlsZSAoKCooQ1AgPSAmKFItPmNoaWxkWzFdKSkgIT0gMCkgfHxcCisJICAgICAoKihDUCA9ICYoUi0+Y2hpbGRbMF0pKSAhPSAwKSkge1wKKwlSID0gKihSUCA9IENQKTtcCisgICAgICB9XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSUCkpKVwKKwkqUlAgPSAwO1wKKyAgICAgIGVsc2Uge1wKKwlDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICB9XAorICAgIH1cCisgIH1cCisgIGlmIChYUCAhPSAwKSB7XAorICAgIHRiaW5wdHIqIEggPSB0cmVlYmluX2F0KE0sIFgtPmluZGV4KTtcCisgICAgaWYgKFggPT0gKkgpIHtcCisgICAgICBpZiAoKCpIID0gUikgPT0gMCkgXAorCWNsZWFyX3RyZWVtYXAoTSwgWC0+aW5kZXgpO1wKKyAgICB9XAorICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBYUCkpKSB7XAorICAgICAgaWYgKFhQLT5jaGlsZFswXSA9PSBYKSBcCisJWFAtPmNoaWxkWzBdID0gUjtcCisgICAgICBlbHNlIFwKKwlYUC0+Y2hpbGRbMV0gPSBSO1wKKyAgICB9XAorICAgIGVsc2VcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgaWYgKFIgIT0gMCkge1wKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUikpKSB7XAorCXRjaHVua3B0ciBDMCwgQzE7XAorCVItPnBhcmVudCA9IFhQO1wKKwlpZiAoKEMwID0gWC0+Y2hpbGRbMF0pICE9IDApIHtcCisJICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMwKSkpIHtcCisJICAgIFItPmNoaWxkWzBdID0gQzA7XAorCSAgICBDMC0+cGFyZW50ID0gUjtcCisJICB9XAorCSAgZWxzZVwKKwkgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorCX1cCisJaWYgKChDMSA9IFgtPmNoaWxkWzFdKSAhPSAwKSB7XAorCSAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMSkpKSB7XAorCSAgICBSLT5jaGlsZFsxXSA9IEMxO1wKKwkgICAgQzEtPnBhcmVudCA9IFI7XAorCSAgfVwKKwkgIGVsc2VcCisJICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKwl9XAorICAgICAgfVwKKyAgICAgIGVsc2VcCisJQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCit9CisKKy8qIFJlbGF5cyB0byBsYXJnZSB2cyBzbWFsbCBiaW4gb3BlcmF0aW9ucyAqLworCisjZGVmaW5lIGluc2VydF9jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFRQLCBTKTsgfQorCisjZGVmaW5lIHVubGlua19jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgdW5saW5rX2xhcmdlX2NodW5rKE0sIFRQKTsgfQorCisKKy8qIFJlbGF5cyB0byBpbnRlcm5hbCBjYWxscyB0byBtYWxsb2MvZnJlZSBmcm9tIHJlYWxsb2MsIG1lbWFsaWduIGV0YyAqLworCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBPTkxZX01TUEFDRVMgKi8KKyNpZiBNU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKVwKKyAgIChtID09IGdtKT8gZGxtYWxsb2MoYikgOiBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKVwKKyAgIGlmIChtID09IGdtKSBkbGZyZWUobWVtKTsgZWxzZSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBNU1BBQ0VTICovCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBkbG1hbGxvYyhiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgZGxmcmVlKG1lbSkKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEaXJlY3QtbW1hcHBpbmcgY2h1bmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIERpcmVjdGx5IG1tYXBwZWQgY2h1bmtzIGFyZSBzZXQgdXAgd2l0aCBhbiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mCisgIHRoZSBtbWFwcGVkIHJlZ2lvbiBzdG9yZWQgaW4gdGhlIHByZXZfZm9vdCBmaWVsZCBvZiB0aGUgY2h1bmsuIFRoaXMKKyAgYWxsb3dzIHJlY29uc3RydWN0aW9uIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudCB0byBNVU5NQVAgd2hlbiBmcmVlZCwKKyAgYW5kIGFsc28gYWxsb3dzIGFkanVzdG1lbnQgb2YgdGhlIHJldHVybmVkIGNodW5rIHRvIG1lZXQgYWxpZ25tZW50CisgIHJlcXVpcmVtZW50cyAoZXNwZWNpYWxseSBpbiBtZW1hbGlnbikuICBUaGVyZSBpcyBhbHNvIGVub3VnaCBzcGFjZQorICBhbGxvY2F0ZWQgdG8gaG9sZCBhIGZha2UgbmV4dCBjaHVuayBvZiBzaXplIFNJWkVfVF9TSVpFIHRvIG1haW50YWluCisgIHRoZSBQSU5VU0UgYml0IHNvIGZyZWVzIGNhbiBiZSBjaGVja2VkLgorKi8KKworLyogTWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyB2b2lkKiBtbWFwX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG1tc2l6ZSA9IG1tYXBfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgIGlmIChtbXNpemUgPiBuYikgeyAgICAgLyogQ2hlY2sgZm9yIHdyYXAgYXJvdW5kIDAgKi8KKyAgICBjaGFyKiBtbSA9IChjaGFyKikoQ0FMTF9ESVJFQ1RfTU1BUChtbXNpemUpKTsKKyAgICBpZiAobW0gIT0gQ01GQUlMKSB7CisgICAgICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShtbSkpOworICAgICAgc2l6ZV90IHBzaXplID0gbW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG1jaHVua3B0ciBwID0gKG1jaHVua3B0cikobW0gKyBvZmZzZXQpOworICAgICAgcC0+cHJldl9mb290ID0gb2Zmc2V0IHwgSVNfTU1BUFBFRF9CSVQ7CisgICAgICAocCktPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgcCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAobW0gPCBtLT5sZWFzdF9hZGRyKQorCW0tPmxlYXN0X2FkZHIgPSBtbTsKKyAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorCW0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgcCk7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogUmVhbGxvYyB1c2luZyBtbWFwICovCitzdGF0aWMgbWNodW5rcHRyIG1tYXBfcmVzaXplKG1zdGF0ZSBtLCBtY2h1bmtwdHIgb2xkcCwgc2l6ZV90IG5iKSB7CisgIHNpemVfdCBvbGRzaXplID0gY2h1bmtzaXplKG9sZHApOworICBpZiAoaXNfc21hbGwobmIpKSAvKiBDYW4ndCBzaHJpbmsgbW1hcCByZWdpb25zIGJlbG93IHNtYWxsIHNpemUgKi8KKyAgICByZXR1cm4gMDsKKyAgLyogS2VlcCBvbGQgY2h1bmsgaWYgYmlnIGVub3VnaCBidXQgbm90IHRvbyBiaWcgKi8KKyAgaWYgKG9sZHNpemUgPj0gbmIgKyBTSVpFX1RfU0laRSAmJgorICAgICAgKG9sZHNpemUgLSBuYikgPD0gKG1wYXJhbXMuZ3JhbnVsYXJpdHkgPDwgMSkpCisgICAgcmV0dXJuIG9sZHA7CisgIGVsc2UgeworICAgIHNpemVfdCBvZmZzZXQgPSBvbGRwLT5wcmV2X2Zvb3QgJiB+SVNfTU1BUFBFRF9CSVQ7CisgICAgc2l6ZV90IG9sZG1tc2l6ZSA9IG9sZHNpemUgKyBvZmZzZXQgKyBNTUFQX0ZPT1RfUEFEOworICAgIHNpemVfdCBuZXdtbXNpemUgPSBtbWFwX2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICAgIGNoYXIqIGNwID0gKGNoYXIqKUNBTExfTVJFTUFQKChjaGFyKilvbGRwIC0gb2Zmc2V0LAorCQkJCSAgb2xkbW1zaXplLCBuZXdtbXNpemUsIDEpOworICAgIGlmIChjcCAhPSBDTUZBSUwpIHsKKyAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cikoY3AgKyBvZmZzZXQpOworICAgICAgc2l6ZV90IHBzaXplID0gbmV3bW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG5ld3AtPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgbmV3cCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChuZXdwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAoY3AgPCBtLT5sZWFzdF9hZGRyKQorCW0tPmxlYXN0X2FkZHIgPSBjcDsKKyAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG5ld21tc2l6ZSAtIG9sZG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorCW0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIG5ld3A7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtc3BhY2UgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIHRvcCBjaHVuayBhbmQgaXRzIHNpemUgKi8KK3N0YXRpYyB2b2lkIGluaXRfdG9wKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCwgc2l6ZV90IHBzaXplKSB7CisgIC8qIEVuc3VyZSBhbGlnbm1lbnQgKi8KKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocCkpOworICBwID0gKG1jaHVua3B0cikoKGNoYXIqKXAgKyBvZmZzZXQpOworICBwc2l6ZSAtPSBvZmZzZXQ7CisKKyAgbS0+dG9wID0gcDsKKyAgbS0+dG9wc2l6ZSA9IHBzaXplOworICBwLT5oZWFkID0gcHNpemUgfCBQSU5VU0VfQklUOworICAvKiBzZXQgc2l6ZSBvZiBmYWtlIHRyYWlsaW5nIGNodW5rIGhvbGRpbmcgb3ZlcmhlYWQgc3BhY2Ugb25seSBvbmNlICovCisgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IFRPUF9GT09UX1NJWkU7CisgIG0tPnRyaW1fY2hlY2sgPSBtcGFyYW1zLnRyaW1fdGhyZXNob2xkOyAvKiByZXNldCBvbiBlYWNoIHVwZGF0ZSAqLworfQorCisvKiBJbml0aWFsaXplIGJpbnMgZm9yIGEgbmV3IG1zdGF0ZSB0aGF0IGlzIG90aGVyd2lzZSB6ZXJvZWQgb3V0ICovCitzdGF0aWMgdm9pZCBpbml0X2JpbnMobXN0YXRlIG0pIHsKKyAgLyogRXN0YWJsaXNoIGNpcmN1bGFyIGxpbmtzIGZvciBzbWFsbGJpbnMgKi8KKyAgYmluZGV4X3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkgeworICAgIHNiaW5wdHIgYmluID0gc21hbGxiaW5fYXQobSxpKTsKKyAgICBiaW4tPmZkID0gYmluLT5iayA9IGJpbjsKKyAgfQorfQorCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSkgeworICBpbnQgaTsKKyAgKyttYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKyAgLyogUmVpbml0aWFsaXplIGZpZWxkcyB0byBmb3JnZXQgYWJvdXQgYWxsIG1lbW9yeSAqLworICBtLT5zbWFsbGJpbnMgPSBtLT50cmVlYmlucyA9IDA7CisgIG0tPmR2c2l6ZSA9IG0tPnRvcHNpemUgPSAwOworICBtLT5zZWcuYmFzZSA9IDA7CisgIG0tPnNlZy5zaXplID0gMDsKKyAgbS0+c2VnLm5leHQgPSAwOworICBtLT50b3AgPSBtLT5kdiA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICAqdHJlZWJpbl9hdChtLCBpKSA9IDA7CisgIGluaXRfYmlucyhtKTsKK30KKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKy8qIEFsbG9jYXRlIGNodW5rIGFuZCBwcmVwZW5kIHJlbWFpbmRlciB3aXRoIGNodW5rIGluIHN1Y2Nlc3NvciBiYXNlLiAqLworc3RhdGljIHZvaWQqIHByZXBlbmRfYWxsb2MobXN0YXRlIG0sIGNoYXIqIG5ld2Jhc2UsIGNoYXIqIG9sZGJhc2UsCisJCQkgICBzaXplX3QgbmIpIHsKKyAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhuZXdiYXNlKTsKKyAgbWNodW5rcHRyIG9sZGZpcnN0ID0gYWxpZ25fYXNfY2h1bmsob2xkYmFzZSk7CisgIHNpemVfdCBwc2l6ZSA9IChjaGFyKilvbGRmaXJzdCAtIChjaGFyKilwOworICBtY2h1bmtwdHIgcSA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgc2l6ZV90IHFzaXplID0gcHNpemUgLSBuYjsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7CisKKyAgYXNzZXJ0KChjaGFyKilvbGRmaXJzdCA+IChjaGFyKilxKTsKKyAgYXNzZXJ0KHBpbnVzZShvbGRmaXJzdCkpOworICBhc3NlcnQocXNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOworCisgIC8qIGNvbnNvbGlkYXRlIHJlbWFpbmRlciB3aXRoIGZpcnN0IGNodW5rIG9mIG9sZCBiYXNlICovCisgIGlmIChvbGRmaXJzdCA9PSBtLT50b3ApIHsKKyAgICBzaXplX3QgdHNpemUgPSBtLT50b3BzaXplICs9IHFzaXplOworICAgIG0tPnRvcCA9IHE7CisgICAgcS0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICBjaGVja190b3BfY2h1bmsobSwgcSk7CisgIH0KKyAgZWxzZSBpZiAob2xkZmlyc3QgPT0gbS0+ZHYpIHsKKyAgICBzaXplX3QgZHNpemUgPSBtLT5kdnNpemUgKz0gcXNpemU7CisgICAgbS0+ZHYgPSBxOworICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhxLCBkc2l6ZSk7CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFjaW51c2Uob2xkZmlyc3QpKSB7CisgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUob2xkZmlyc3QpOworICAgICAgdW5saW5rX2NodW5rKG0sIG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBvbGRmaXJzdCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBxc2l6ZSArPSBuc2l6ZTsKKyAgICB9CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcXNpemUsIG9sZGZpcnN0KTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcXNpemUpOworICAgIGNoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgIH0KKworICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgcmV0dXJuIGNodW5rMm1lbShwKTsKK30KKworLyogQWRkIGEgc2VnbWVudCB0byBob2xkIGEgbmV3IG5vbmNvbnRpZ3VvdXMgcmVnaW9uICovCitzdGF0aWMgdm9pZCBhZGRfc2VnbWVudChtc3RhdGUgbSwgY2hhciogdGJhc2UsIHNpemVfdCB0c2l6ZSwgZmxhZ190IG1tYXBwZWQpIHsKKyAgLyogRGV0ZXJtaW5lIGxvY2F0aW9ucyBhbmQgc2l6ZXMgb2Ygc2VnbWVudCwgZmVuY2Vwb3N0cywgb2xkIHRvcCAqLworICBjaGFyKiBvbGRfdG9wID0gKGNoYXIqKW0tPnRvcDsKKyAgbXNlZ21lbnRwdHIgb2xkc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgb2xkX3RvcCk7CisgIGNoYXIqIG9sZF9lbmQgPSBvbGRzcC0+YmFzZSArIG9sZHNwLT5zaXplOworICBzaXplX3Qgc3NpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSk7CisgIGNoYXIqIHJhd3NwID0gb2xkX2VuZCAtIChzc2l6ZSArIEZPVVJfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHJhd3NwKSk7CisgIGNoYXIqIGFzcCA9IHJhd3NwICsgb2Zmc2V0OworICBjaGFyKiBjc3AgPSAoYXNwIDwgKG9sZF90b3AgKyBNSU5fQ0hVTktfU0laRSkpPyBvbGRfdG9wIDogYXNwOworICBtY2h1bmtwdHIgc3AgPSAobWNodW5rcHRyKWNzcDsKKyAgbXNlZ21lbnRwdHIgc3MgPSAobXNlZ21lbnRwdHIpKGNodW5rMm1lbShzcCkpOworICBtY2h1bmtwdHIgdG5leHQgPSBjaHVua19wbHVzX29mZnNldChzcCwgc3NpemUpOworICBtY2h1bmtwdHIgcCA9IHRuZXh0OworICBpbnQgbmZlbmNlcyA9IDA7CisKKyAgLyogcmVzZXQgdG9wIHRvIG5ldyBzcGFjZSAqLworICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOworCisgIC8qIFNldCB1cCBzZWdtZW50IHJlY29yZCAqLworICBhc3NlcnQoaXNfYWxpZ25lZChzcykpOworICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHNwLCBzc2l6ZSk7CisgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLworICBtLT5zZWcuYmFzZSA9IHRiYXNlOworICBtLT5zZWcuc2l6ZSA9IHRzaXplOworICBtLT5zZWcuc2ZsYWdzID0gbW1hcHBlZDsKKyAgbS0+c2VnLm5leHQgPSBzczsKKworICAvKiBJbnNlcnQgdHJhaWxpbmcgZmVuY2Vwb3N0cyAqLworICBmb3IgKDs7KSB7CisgICAgbWNodW5rcHRyIG5leHRwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgU0laRV9UX1NJWkUpOworICAgIHAtPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICArK25mZW5jZXM7CisgICAgaWYgKChjaGFyKikoJihuZXh0cC0+aGVhZCkpIDwgb2xkX2VuZCkKKyAgICAgIHAgPSBuZXh0cDsKKyAgICBlbHNlCisgICAgICBicmVhazsKKyAgfQorICBhc3NlcnQobmZlbmNlcyA+PSAyKTsKKworICAvKiBJbnNlcnQgdGhlIHJlc3Qgb2Ygb2xkIHRvcCBpbnRvIGEgYmluIGFzIGFuIG9yZGluYXJ5IGZyZWUgY2h1bmsgKi8KKyAgaWYgKGNzcCAhPSBvbGRfdG9wKSB7CisgICAgbWNodW5rcHRyIHEgPSAobWNodW5rcHRyKW9sZF90b3A7CisgICAgc2l6ZV90IHBzaXplID0gY3NwIC0gb2xkX3RvcDsKKyAgICBtY2h1bmtwdHIgdG4gPSBjaHVua19wbHVzX29mZnNldChxLCBwc2l6ZSk7CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcHNpemUsIHRuKTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcHNpemUpOworICB9CisKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN5c3RlbSBhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gdXNpbmcgTU9SRUNPUkUgb3IgTU1BUCAqLworc3RhdGljIHZvaWQqIHN5c19hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIGNoYXIqIHRiYXNlID0gQ01GQUlMOworICBzaXplX3QgdHNpemUgPSAwOworICBmbGFnX3QgbW1hcF9mbGFnID0gMDsKKworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKworICAvKiBEaXJlY3RseSBtYXAgbGFyZ2UgY2h1bmtzICovCisgIGlmICh1c2VfbW1hcChtKSAmJiBuYiA+PSBtcGFyYW1zLm1tYXBfdGhyZXNob2xkKSB7CisgICAgdm9pZCogbWVtID0gbW1hcF9hbGxvYyhtLCBuYik7CisgICAgaWYgKG1lbSAhPSAwKQorICAgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIC8qCisgICAgVHJ5IGdldHRpbmcgbWVtb3J5IGluIGFueSBvZiB0aHJlZSB3YXlzIChpbiBtb3N0LXByZWZlcnJlZCB0bworICAgIGxlYXN0LXByZWZlcnJlZCBvcmRlcik6CisgICAgMS4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2FuIG5vcm1hbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3QgTU9SRUNPUkVfQ09OVElHVU9VUyBvciBub3QgSEFWRV9NT1JFQ09SRSBvcgorICAgICAgIG1haW4gc3BhY2UgaXMgbW1hcHBlZCBvciBhIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2FsbCBmYWlsZWQpCisgICAgMi4gQSBjYWxsIHRvIE1NQVAgbmV3IHNwYWNlIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NTUFQKS4KKyAgICAgICBOb3RlIHRoYXQgdW5kZXIgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGlmIE1PUkVDT1JFIGlzIHVuYWJsZSB0bworICAgICAgIGZ1bGZpbGwgYSByZXF1ZXN0LCBhbmQgSEFWRV9NTUFQIGlzIHRydWUsIHRoZW4gbW1hcCBpcworICAgICAgIHVzZWQgYXMgYSBub25jb250aWd1b3VzIHN5c3RlbSBhbGxvY2F0b3IuIFRoaXMgaXMgYSB1c2VmdWwgYmFja3VwCisgICAgICAgc3RyYXRlZ3kgZm9yIHN5c3RlbXMgd2l0aCBob2xlcyBpbiBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNhc2UKKyAgICAgICBzYnJrIGNhbm5vdCBjb250aWd1b3VzbHkgZXhwYW5kIHRoZSBoZWFwLCBidXQgbW1hcCBtYXkgYmUgYWJsZSB0bworICAgICAgIGZpbmQgc3BhY2UuCisgICAgMy4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2Fubm90IHVzdWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01PUkVDT1JFKQorCisgICBJbiBhbGwgY2FzZXMsIHdlIG5lZWQgdG8gcmVxdWVzdCBlbm91Z2ggYnl0ZXMgZnJvbSBzeXN0ZW0gdG8gZW5zdXJlCisgICB3ZSBjYW4gbWFsbG9jIG5iIGJ5dGVzIHVwb24gc3VjY2Vzcywgc28gcGFkIHdpdGggZW5vdWdoIHNwYWNlIGZvcgorICAgdG9wX2Zvb3QsIHBsdXMgYWxpZ25tZW50LXBhZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbG9zZSBieXRlcyBpZgorICAgbm90IG9uIGJvdW5kYXJ5LCBhbmQgcm91bmQgdGhpcyB1cCB0byBhIGdyYW51bGFyaXR5IHVuaXQuCisgICovCisKKyAgaWYgKE1PUkVDT1JFX0NPTlRJR1VPVVMgJiYgIXVzZV9ub25jb250aWd1b3VzKG0pKSB7CisgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgbXNlZ21lbnRwdHIgc3MgPSAobS0+dG9wID09IDApPyAwIDogc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworICAgIHNpemVfdCBhc2l6ZSA9IDA7CisgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKworICAgIGlmIChzcyA9PSAwKSB7ICAvKiBGaXJzdCB0aW1lIHRocm91Z2ggb3IgcmVjb3ZlcnkgKi8KKyAgICAgIGNoYXIqIGJhc2UgPSAoY2hhciopQ0FMTF9NT1JFQ09SRSgwKTsKKyAgICAgIGlmIChiYXNlICE9IENNRkFJTCkgeworCWFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTWVNfQUxMT0NfUEFERElORyk7CisJLyogQWRqdXN0IHRvIGVuZCBvbiBhIHBhZ2UgYm91bmRhcnkgKi8KKwlpZiAoIWlzX3BhZ2VfYWxpZ25lZChiYXNlKSkKKwkgIGFzaXplICs9IChwYWdlX2FsaWduKChzaXplX3QpYmFzZSkgLSAoc2l6ZV90KWJhc2UpOworCS8qIENhbid0IGNhbGwgTU9SRUNPUkUgaWYgc2l6ZSBpcyBuZWdhdGl2ZSB3aGVuIHRyZWF0ZWQgYXMgc2lnbmVkICovCisJaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisJICAgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBiYXNlKSB7CisJICB0YmFzZSA9IGJhc2U7CisJICB0c2l6ZSA9IGFzaXplOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBTdWJ0cmFjdCBvdXQgZXhpc3RpbmcgYXZhaWxhYmxlIHRvcCBzcGFjZSBmcm9tIE1PUkVDT1JFIHJlcXVlc3QuICovCisgICAgICBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iIC0gbS0+dG9wc2l6ZSArIFNZU19BTExPQ19QQURESU5HKTsKKyAgICAgIC8qIFVzZSBtZW0gaGVyZSBvbmx5IGlmIGl0IGRpZCBjb250aW51b3VzbHkgZXh0ZW5kIG9sZCBzcGFjZSAqLworICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisJICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gc3MtPmJhc2Urc3MtPnNpemUpIHsKKwl0YmFzZSA9IGJyOworCXRzaXplID0gYXNpemU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHRiYXNlID09IENNRkFJTCkgeyAgICAvKiBDb3BlIHdpdGggcGFydGlhbCBmYWlsdXJlICovCisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFRyeSB0byB1c2UvZXh0ZW5kIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCisJaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisJICAgIGFzaXplIDwgbmIgKyBTWVNfQUxMT0NfUEFERElORykgeworCSAgc2l6ZV90IGVzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTWVNfQUxMT0NfUEFERElORyAtIGFzaXplKTsKKwkgIGlmIChlc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworCSAgICBjaGFyKiBlbmQgPSAoY2hhciopQ0FMTF9NT1JFQ09SRShlc2l6ZSk7CisJICAgIGlmIChlbmQgIT0gQ01GQUlMKQorCSAgICAgIGFzaXplICs9IGVzaXplOworCSAgICBlbHNlIHsgICAgICAgICAgICAvKiBDYW4ndCB1c2U7IHRyeSB0byByZWxlYXNlICovCisJICAgICAgKHZvaWQpIENBTExfTU9SRUNPUkUoLWFzaXplKTsKKwkgICAgICBiciA9IENNRkFJTDsKKwkgICAgfQorCSAgfQorCX0KKyAgICAgIH0KKyAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVXNlIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCisJdGJhc2UgPSBicjsKKwl0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgICAgZWxzZQorCWRpc2FibGVfY29udGlndW91cyhtKTsgLyogRG9uJ3QgdHJ5IGNvbnRpZ3VvdXMgcGF0aCBpbiB0aGUgZnV0dXJlICovCisgICAgfQorCisgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgfQorCisgIGlmIChIQVZFX01NQVAgJiYgdGJhc2UgPT0gQ01GQUlMKSB7ICAvKiBUcnkgTU1BUCAqLworICAgIHNpemVfdCByc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworICAgIGlmIChyc2l6ZSA+IG5iKSB7IC8qIEZhaWwgaWYgd3JhcHMgYXJvdW5kIHplcm8gKi8KKyAgICAgIGNoYXIqIG1wID0gKGNoYXIqKShDQUxMX01NQVAocnNpemUpKTsKKyAgICAgIGlmIChtcCAhPSBDTUZBSUwpIHsKKwl0YmFzZSA9IG1wOworCXRzaXplID0gcnNpemU7CisJbW1hcF9mbGFnID0gSVNfTU1BUFBFRF9CSVQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKEhBVkVfTU9SRUNPUkUgJiYgdGJhc2UgPT0gQ01GQUlMKSB7IC8qIFRyeSBub25jb250aWd1b3VzIE1PUkVDT1JFICovCisgICAgc2l6ZV90IGFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTWVNfQUxMT0NfUEFERElORyk7CisgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7CisgICAgICBjaGFyKiBiciA9IENNRkFJTDsKKyAgICAgIGNoYXIqIGVuZCA9IENNRkFJTDsKKyAgICAgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgICAgICBiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpOworICAgICAgZW5kID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgICAgICBpZiAoYnIgIT0gQ01GQUlMICYmIGVuZCAhPSBDTUZBSUwgJiYgYnIgPCBlbmQpIHsKKwlzaXplX3Qgc3NpemUgPSBlbmQgLSBicjsKKwlpZiAoc3NpemUgPiBuYiArIFRPUF9GT09UX1NJWkUpIHsKKwkgIHRiYXNlID0gYnI7CisJICB0c2l6ZSA9IHNzaXplOworCX0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CisKKyAgICBpZiAoKG0tPmZvb3RwcmludCArPSB0c2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKworICAgIGlmICghaXNfaW5pdGlhbGl6ZWQobSkpIHsgLyogZmlyc3QtdGltZSBpbml0aWFsaXphdGlvbiAqLworICAgICAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgICAgICBtLT5zZWcuc2l6ZSA9IHRzaXplOworICAgICAgbS0+c2VnLnNmbGFncyA9IG1tYXBfZmxhZzsKKyAgICAgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKKyAgICAgIG0tPnJlbGVhc2VfY2hlY2tzID0gTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURTsKKyAgICAgIGluaXRfYmlucyhtKTsKKyNpZiAhT05MWV9NU1BBQ0VTCisgICAgICBpZiAoaXNfZ2xvYmFsKG0pKQorCWluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgIHsKKwkvKiBPZmZzZXQgdG9wIGJ5IGVtYmVkZGVkIG1hbGxvY19zdGF0ZSAqLworCW1jaHVua3B0ciBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKwlpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtVE9QX0ZPT1RfU0laRSk7CisgICAgICB9CisgICAgfQorCisgICAgZWxzZSB7CisgICAgICAvKiBUcnkgdG8gbWVyZ2Ugd2l0aCBhbiBleGlzdGluZyBzZWdtZW50ICovCisgICAgICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgICAgICAvKiBPbmx5IGNvbnNpZGVyIG1vc3QgcmVjZW50IHNlZ21lbnQgaWYgdHJhdmVyc2FsIHN1cHByZXNzZWQgKi8KKyAgICAgIHdoaWxlIChzcCAhPSAwICYmIHRiYXNlICE9IHNwLT5iYXNlICsgc3AtPnNpemUpCisJc3AgPSAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpID8gMCA6IHNwLT5uZXh0OworICAgICAgaWYgKHNwICE9IDAgJiYKKwkgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYKKwkgIChzcC0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZyAmJgorCSAgc2VnbWVudF9ob2xkcyhzcCwgbS0+dG9wKSkgeyAvKiBhcHBlbmQgKi8KKwlzcC0+c2l6ZSArPSB0c2l6ZTsKKwlpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgKyB0c2l6ZSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlpZiAodGJhc2UgPCBtLT5sZWFzdF9hZGRyKQorCSAgbS0+bGVhc3RfYWRkciA9IHRiYXNlOworCXNwID0gJm0tPnNlZzsKKwl3aGlsZSAoc3AgIT0gMCAmJiBzcC0+YmFzZSAhPSB0YmFzZSArIHRzaXplKQorCSAgc3AgPSAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpID8gMCA6IHNwLT5uZXh0OworCWlmIChzcCAhPSAwICYmCisJICAgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYKKwkgICAgKHNwLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnKSB7CisJICBjaGFyKiBvbGRiYXNlID0gc3AtPmJhc2U7CisJICBzcC0+YmFzZSA9IHRiYXNlOworCSAgc3AtPnNpemUgKz0gdHNpemU7CisJICByZXR1cm4gcHJlcGVuZF9hbGxvYyhtLCB0YmFzZSwgb2xkYmFzZSwgbmIpOworCX0KKwllbHNlCisJICBhZGRfc2VnbWVudChtLCB0YmFzZSwgdHNpemUsIG1tYXBfZmxhZyk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDwgbS0+dG9wc2l6ZSkgeyAvKiBBbGxvY2F0ZSBmcm9tIG5ldyBvciBleHRlbmRlZCB0b3Agc3BhY2UgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG0tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG0tPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisKKyAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIHN5c3RlbSBkZWFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVW5tYXAgYW5kIHVubGluayBhbnkgbW1hcHBlZCBzZWdtZW50cyB0aGF0IGRvbid0IGNvbnRhaW4gdXNlZCBjaHVua3MgKi8KK3N0YXRpYyBzaXplX3QgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHJlbGVhc2VkID0gMDsKKyAgaW50IG5zZWdzID0gMDsKKyAgbXNlZ21lbnRwdHIgcHJlZCA9ICZtLT5zZWc7CisgIG1zZWdtZW50cHRyIHNwID0gcHJlZC0+bmV4dDsKKyAgd2hpbGUgKHNwICE9IDApIHsKKyAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKKyAgICBtc2VnbWVudHB0ciBuZXh0ID0gc3AtPm5leHQ7CisgICAgKytuc2VnczsKKyAgICBpZiAoaXNfbW1hcHBlZF9zZWdtZW50KHNwKSAmJiAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApKSB7CisgICAgICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKGJhc2UpOworICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgLyogQ2FuIHVubWFwIGlmIGZpcnN0IGNodW5rIGhvbGRzIGVudGlyZSBzZWdtZW50IGFuZCBub3QgcGlubmVkICovCisgICAgICBpZiAoIWNpbnVzZShwKSAmJiAoY2hhciopcCArIHBzaXplID49IGJhc2UgKyBzaXplIC0gVE9QX0ZPT1RfU0laRSkgeworCXRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKKwlhc3NlcnQoc2VnbWVudF9ob2xkcyhzcCwgKGNoYXIqKXNwKSk7CisJaWYgKHAgPT0gbS0+ZHYpIHsKKwkgIG0tPmR2ID0gMDsKKwkgIG0tPmR2c2l6ZSA9IDA7CisJfQorCWVsc2UgeworCSAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHRwKTsKKwl9CisJaWYgKENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApIHsKKwkgIHJlbGVhc2VkICs9IHNpemU7CisJICBtLT5mb290cHJpbnQgLT0gc2l6ZTsKKwkgIC8qIHVubGluayBvYnNvbGV0ZWQgcmVjb3JkICovCisJICBzcCA9IHByZWQ7CisJICBzcC0+bmV4dCA9IG5leHQ7CisJfQorCWVsc2UgeyAvKiBiYWNrIG91dCBpZiBjYW5ub3QgdW5tYXAgKi8KKwkgIGluc2VydF9sYXJnZV9jaHVuayhtLCB0cCwgcHNpemUpOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKE5PX1NFR01FTlRfVFJBVkVSU0FMKSAvKiBzY2FuIG9ubHkgZmlyc3Qgc2VnbWVudCAqLworICAgICAgYnJlYWs7CisgICAgcHJlZCA9IHNwOworICAgIHNwID0gbmV4dDsKKyAgfQorICAvKiBSZXNldCBjaGVjayBjb3VudGVyICovCisgIG0tPnJlbGVhc2VfY2hlY2tzID0gKChuc2VncyA+IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUpPworCQkgICAgICAgbnNlZ3MgOiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFKTsKKyAgcmV0dXJuIHJlbGVhc2VkOworfQorCitzdGF0aWMgaW50IHN5c190cmltKG1zdGF0ZSBtLCBzaXplX3QgcGFkKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpZiAocGFkIDwgTUFYX1JFUVVFU1QgJiYgaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBwYWQgKz0gVE9QX0ZPT1RfU0laRTsgLyogZW5zdXJlIGVub3VnaCByb29tIGZvciBzZWdtZW50IG92ZXJoZWFkICovCisKKyAgICBpZiAobS0+dG9wc2l6ZSA+IHBhZCkgeworICAgICAgLyogU2hyaW5rIHRvcCBzcGFjZSBpbiBncmFudWxhcml0eS1zaXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSAqLworICAgICAgc2l6ZV90IHVuaXQgPSBtcGFyYW1zLmdyYW51bGFyaXR5OworICAgICAgc2l6ZV90IGV4dHJhID0gKChtLT50b3BzaXplIC0gcGFkICsgKHVuaXQgLSBTSVpFX1RfT05FKSkgLyB1bml0IC0KKwkJICAgICAgU0laRV9UX09ORSkgKiB1bml0OworICAgICAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKW0tPnRvcCk7CisKKyAgICAgIGlmICghaXNfZXh0ZXJuX3NlZ21lbnQoc3ApKSB7CisJaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkpIHsKKwkgIGlmIChIQVZFX01NQVAgJiYKKwkgICAgICBzcC0+c2l6ZSA+PSBleHRyYSAmJgorCSAgICAgICFoYXNfc2VnbWVudF9saW5rKG0sIHNwKSkgeyAvKiBjYW4ndCBzaHJpbmsgaWYgcGlubmVkICovCisJICAgIHNpemVfdCBuZXdzaXplID0gc3AtPnNpemUgLSBleHRyYTsKKwkgICAgLyogUHJlZmVyIG1yZW1hcCwgZmFsbCBiYWNrIHRvIG11bm1hcCAqLworCSAgICBpZiAoKENBTExfTVJFTUFQKHNwLT5iYXNlLCBzcC0+c2l6ZSwgbmV3c2l6ZSwgMCkgIT0gTUZBSUwpIHx8CisJCShDQUxMX01VTk1BUChzcC0+YmFzZSArIG5ld3NpemUsIGV4dHJhKSA9PSAwKSkgeworCSAgICAgIHJlbGVhc2VkID0gZXh0cmE7CisJICAgIH0KKwkgIH0KKwl9CisJZWxzZSBpZiAoSEFWRV9NT1JFQ09SRSkgeworCSAgaWYgKGV4dHJhID49IEhBTEZfTUFYX1NJWkVfVCkgLyogQXZvaWQgd3JhcHBpbmcgbmVnYXRpdmUgKi8KKwkgICAgZXh0cmEgPSAoSEFMRl9NQVhfU0laRV9UKSArIFNJWkVfVF9PTkUgLSB1bml0OworCSAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwkgIHsKKwkgICAgLyogTWFrZSBzdXJlIGVuZCBvZiBtZW1vcnkgaXMgd2hlcmUgd2UgbGFzdCBzZXQgaXQuICovCisJICAgIGNoYXIqIG9sZF9iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisJICAgIGlmIChvbGRfYnIgPT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkgeworCSAgICAgIGNoYXIqIHJlbF9iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgtZXh0cmEpKTsKKwkgICAgICBjaGFyKiBuZXdfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworCSAgICAgIGlmIChyZWxfYnIgIT0gQ01GQUlMICYmIG5ld19iciA8IG9sZF9icikKKwkJcmVsZWFzZWQgPSBvbGRfYnIgLSBuZXdfYnI7CisJICAgIH0KKwkgIH0KKwkgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJfQorICAgICAgfQorCisgICAgICBpZiAocmVsZWFzZWQgIT0gMCkgeworCXNwLT5zaXplIC09IHJlbGVhc2VkOworCW0tPmZvb3RwcmludCAtPSByZWxlYXNlZDsKKwlpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgLSByZWxlYXNlZCk7CisJY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgICB9CisgICAgfQorCisgICAgLyogVW5tYXAgYW55IHVudXNlZCBtbWFwcGVkIHNlZ21lbnRzICovCisgICAgaWYgKEhBVkVfTU1BUCkKKyAgICAgIHJlbGVhc2VkICs9IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG0pOworCisgICAgLyogT24gZmFpbHVyZSwgZGlzYWJsZSBhdXRvdHJpbSB0byBhdm9pZCByZXBlYXRlZCBmYWlsZWQgZnV0dXJlIGNhbGxzICovCisgICAgaWYgKHJlbGVhc2VkID09IDAgJiYgbS0+dG9wc2l6ZSA+IG0tPnRyaW1fY2hlY2spCisgICAgICBtLT50cmltX2NoZWNrID0gTUFYX1NJWkVfVDsKKyAgfQorCisgIHJldHVybiAocmVsZWFzZWQgIT0gMCk/IDEgOiAwOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGFsbG9jYXRlIGEgbGFyZ2UgcmVxdWVzdCBmcm9tIHRoZSBiZXN0IGZpdHRpbmcgY2h1bmsgaW4gYSB0cmVlYmluICovCitzdGF0aWMgdm9pZCogdG1hbGxvY19sYXJnZShtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHRjaHVua3B0ciB2ID0gMDsKKyAgc2l6ZV90IHJzaXplID0gLW5iOyAvKiBVbnNpZ25lZCBuZWdhdGlvbiAqLworICB0Y2h1bmtwdHIgdDsKKyAgYmluZGV4X3QgaWR4OworICBjb21wdXRlX3RyZWVfaW5kZXgobmIsIGlkeCk7CisgIGlmICgodCA9ICp0cmVlYmluX2F0KG0sIGlkeCkpICE9IDApIHsKKyAgICAvKiBUcmF2ZXJzZSB0cmVlIGZvciB0aGlzIGJpbiBsb29raW5nIGZvciBub2RlIHdpdGggc2l6ZSA9PSBuYiAqLworICAgIHNpemVfdCBzaXplYml0cyA9IG5iIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpZHgpOworICAgIHRjaHVua3B0ciByc3QgPSAwOyAgLyogVGhlIGRlZXBlc3QgdW50YWtlbiByaWdodCBzdWJ0cmVlICovCisgICAgZm9yICg7OykgeworICAgICAgdGNodW5rcHRyIHJ0OworICAgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKwl2ID0gdDsKKwlpZiAoKHJzaXplID0gdHJlbSkgPT0gMCkKKwkgIGJyZWFrOworICAgICAgfQorICAgICAgcnQgPSB0LT5jaGlsZFsxXTsKKyAgICAgIHQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworICAgICAgaWYgKHJ0ICE9IDAgJiYgcnQgIT0gdCkKKwlyc3QgPSBydDsKKyAgICAgIGlmICh0ID09IDApIHsKKwl0ID0gcnN0OyAvKiBzZXQgdCB0byBsZWFzdCBzdWJ0cmVlIGhvbGRpbmcgc2l6ZXMgPiBuYiAqLworCWJyZWFrOworICAgICAgfQorICAgICAgc2l6ZWJpdHMgPDw9IDE7CisgICAgfQorICB9CisgIGlmICh0ID09IDAgJiYgdiA9PSAwKSB7IC8qIHNldCB0IHRvIHJvb3Qgb2YgbmV4dCBub24tZW1wdHkgdHJlZWJpbiAqLworICAgIGJpbm1hcF90IGxlZnRiaXRzID0gbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSkgJiBtLT50cmVlbWFwOworICAgIGlmIChsZWZ0Yml0cyAhPSAwKSB7CisgICAgICBiaW5kZXhfdCBpOworICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworICAgICAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKyAgICAgIHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgICB9CisgIH0KKworICB3aGlsZSAodCAhPSAwKSB7IC8qIGZpbmQgc21hbGxlc3Qgb2YgdHJlZSBvciBzdWJ0cmVlICovCisgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICBpZiAodHJlbSA8IHJzaXplKSB7CisgICAgICByc2l6ZSA9IHRyZW07CisgICAgICB2ID0gdDsKKyAgICB9CisgICAgdCA9IGxlZnRtb3N0X2NoaWxkKHQpOworICB9CisKKyAgLyogIElmIGR2IGlzIGEgYmV0dGVyIGZpdCwgcmV0dXJuIDAgc28gbWFsbG9jIHdpbGwgdXNlIGl0ICovCisgIGlmICh2ICE9IDAgJiYgcnNpemUgPCAoc2l6ZV90KShtLT5kdnNpemUgLSBuYikpIHsKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHYpKSkgeyAvKiBzcGxpdCAqLworICAgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldCh2LCBuYik7CisgICAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dCh2LCByKSkpIHsKKwl1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisJaWYgKHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisJICBzZXRfaW51c2VfYW5kX3BpbnVzZShtLCB2LCAocnNpemUgKyBuYikpOworCWVsc2UgeworCSAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisJICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCSAgaW5zZXJ0X2NodW5rKG0sIHIsIHJzaXplKTsKKwl9CisJcmV0dXJuIGNodW5rMm1lbSh2KTsKKyAgICAgIH0KKyAgICB9CisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIGFsbG9jYXRlIGEgc21hbGwgcmVxdWVzdCBmcm9tIHRoZSBiZXN0IGZpdHRpbmcgY2h1bmsgaW4gYSB0cmVlYmluICovCitzdGF0aWMgdm9pZCogdG1hbGxvY19zbWFsbChtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHRjaHVua3B0ciB0LCB2OworICBzaXplX3QgcnNpemU7CisgIGJpbmRleF90IGk7CisgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KG0tPnRyZWVtYXApOworICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICB2ID0gdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICByc2l6ZSA9IGNodW5rc2l6ZSh0KSAtIG5iOworCisgIHdoaWxlICgodCA9IGxlZnRtb3N0X2NoaWxkKHQpKSAhPSAwKSB7CisgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICBpZiAodHJlbSA8IHJzaXplKSB7CisgICAgICByc2l6ZSA9IHRyZW07CisgICAgICB2ID0gdDsKKyAgICB9CisgIH0KKworICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHYpKSkgeworICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOworICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dCh2LCByKSkpIHsKKyAgICAgIHVubGlua19sYXJnZV9jaHVuayhtLCB2KTsKKyAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCXNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisgICAgICBlbHNlIHsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCXJlcGxhY2VfZHYobSwgciwgcnNpemUpOworICAgICAgfQorICAgICAgcmV0dXJuIGNodW5rMm1lbSh2KTsKKyAgICB9CisgIH0KKworICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZWFsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiBpbnRlcm5hbF9yZWFsbG9jKG1zdGF0ZSBtLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpIHsKKyAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOworICAgIHNpemVfdCBvbGRzaXplID0gY2h1bmtzaXplKG9sZHApOworICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgb2xkc2l6ZSk7CisgICAgbWNodW5rcHRyIG5ld3AgPSAwOworICAgIHZvaWQqIGV4dHJhID0gMDsKKworICAgIC8qIFRyeSB0byBlaXRoZXIgc2hyaW5rIG9yIGV4dGVuZCBpbnRvIHRvcC4gRWxzZSBtYWxsb2MtY29weS1mcmVlICovCisKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIG9sZHApICYmIG9rX2NpbnVzZShvbGRwKSAmJgorCQlva19uZXh0KG9sZHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKyAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgICBpZiAoaXNfbW1hcHBlZChvbGRwKSkKKwluZXdwID0gbW1hcF9yZXNpemUobSwgb2xkcCwgbmIpOworICAgICAgZWxzZSBpZiAob2xkc2l6ZSA+PSBuYikgeyAvKiBhbHJlYWR5IGJpZyBlbm91Z2ggKi8KKwlzaXplX3QgcnNpemUgPSBvbGRzaXplIC0gbmI7CisJbmV3cCA9IG9sZHA7CisJaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7CisJICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgbmIpOworCSAgc2V0X2ludXNlKG0sIG5ld3AsIG5iKTsKKwkgIHNldF9pbnVzZShtLCByZW1haW5kZXIsIHJzaXplKTsKKwkgIGV4dHJhID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisJfQorICAgICAgfQorICAgICAgZWxzZSBpZiAobmV4dCA9PSBtLT50b3AgJiYgb2xkc2l6ZSArIG0tPnRvcHNpemUgPiBuYikgeworCS8qIEV4cGFuZCBpbnRvIHRvcCAqLworCXNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIG0tPnRvcHNpemU7CisJc2l6ZV90IG5ld3RvcHNpemUgPSBuZXdzaXplIC0gbmI7CisJbWNodW5rcHRyIG5ld3RvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZHAsIG5iKTsKKwlzZXRfaW51c2UobSwgb2xkcCwgbmIpOworCW5ld3RvcC0+aGVhZCA9IG5ld3RvcHNpemUgfFBJTlVTRV9CSVQ7CisJbS0+dG9wID0gbmV3dG9wOworCW0tPnRvcHNpemUgPSBuZXd0b3BzaXplOworCW5ld3AgPSBvbGRwOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFBPU1RBQ1RJT04obSk7CisKKyAgICBpZiAobmV3cCAhPSAwKSB7CisgICAgICBpZiAoZXh0cmEgIT0gMCkgeworCWludGVybmFsX2ZyZWUobSwgZXh0cmEpOworICAgICAgfQorICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbmV3cCk7CisgICAgICByZXR1cm4gY2h1bmsybWVtKG5ld3ApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHZvaWQqIG5ld21lbSA9IGludGVybmFsX21hbGxvYyhtLCBieXRlcyk7CisgICAgICBpZiAobmV3bWVtICE9IDApIHsKKwlzaXplX3Qgb2MgPSBvbGRzaXplIC0gb3ZlcmhlYWRfZm9yKG9sZHApOworCW1lbWNweShuZXdtZW0sIG9sZG1lbSwgKG9jIDwgYnl0ZXMpPyBvYyA6IGJ5dGVzKTsKKwlpbnRlcm5hbF9mcmVlKG0sIG9sZG1lbSk7CisgICAgICB9CisgICAgICByZXR1cm4gbmV3bWVtOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lbWFsaWduIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqIGludGVybmFsX21lbWFsaWduKG1zdGF0ZSBtLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGFsaWdubWVudCA8PSBNQUxMT0NfQUxJR05NRU5UKSAgICAvKiBDYW4ganVzdCB1c2UgbWFsbG9jICovCisgICAgcmV0dXJuIGludGVybmFsX21hbGxvYyhtLCBieXRlcyk7CisgIGlmIChhbGlnbm1lbnQgPCAgTUlOX0NIVU5LX1NJWkUpIC8qIG11c3QgYmUgYXQgbGVhc3QgYSBtaW5pbXVtIGNodW5rIHNpemUgKi8KKyAgICBhbGlnbm1lbnQgPSBNSU5fQ0hVTktfU0laRTsKKyAgaWYgKChhbGlnbm1lbnQgJiAoYWxpZ25tZW50LVNJWkVfVF9PTkUpKSAhPSAwKSB7LyogRW5zdXJlIGEgcG93ZXIgb2YgMiAqLworICAgIHNpemVfdCBhID0gTUFMTE9DX0FMSUdOTUVOVCA8PCAxOworICAgIHdoaWxlIChhIDwgYWxpZ25tZW50KSBhIDw8PSAxOworICAgIGFsaWdubWVudCA9IGE7CisgIH0KKworICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QgLSBhbGlnbm1lbnQpIHsKKyAgICBpZiAobSAhPSAwKSAgeyAvKiBUZXN0IGlzbid0IG5lZWRlZCBidXQgYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyAgICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgc2l6ZV90IG5iID0gcmVxdWVzdDJzaXplKGJ5dGVzKTsKKyAgICBzaXplX3QgcmVxID0gbmIgKyBhbGlnbm1lbnQgKyBNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEOworICAgIGNoYXIqIG1lbSA9IChjaGFyKilpbnRlcm5hbF9tYWxsb2MobSwgcmVxKTsKKyAgICBpZiAobWVtICE9IDApIHsKKyAgICAgIHZvaWQqIGxlYWRlciA9IDA7CisgICAgICB2b2lkKiB0cmFpbGVyID0gMDsKKyAgICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisKKyAgICAgIGlmIChQUkVBQ1RJT04obSkpIHJldHVybiAwOworICAgICAgaWYgKCgoKHNpemVfdCkobWVtKSkgJSBhbGlnbm1lbnQpICE9IDApIHsgLyogbWlzYWxpZ25lZCAqLworCS8qCisJICBGaW5kIGFuIGFsaWduZWQgc3BvdCBpbnNpZGUgY2h1bmsuICBTaW5jZSB3ZSBuZWVkIHRvIGdpdmUKKwkgIGJhY2sgbGVhZGluZyBzcGFjZSBpbiBhIGNodW5rIG9mIGF0IGxlYXN0IE1JTl9DSFVOS19TSVpFLCBpZgorCSAgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4KKwkgIE1JTl9DSFVOS19TSVpFIGxlYWRlciwgd2UgY2FuIG1vdmUgdG8gdGhlIG5leHQgYWxpZ25lZCBzcG90LgorCSAgV2UndmUgYWxsb2NhdGVkIGVub3VnaCB0b3RhbCByb29tIHNvIHRoYXQgdGhpcyBpcyBhbHdheXMKKwkgIHBvc3NpYmxlLgorCSovCisJY2hhciogYnIgPSAoY2hhciopbWVtMmNodW5rKChzaXplX3QpKCgoc2l6ZV90KShtZW0gKworCQkJCQkJICAgICAgIGFsaWdubWVudCAtCisJCQkJCQkgICAgICAgU0laRV9UX09ORSkpICYKKwkJCQkJICAgICAtYWxpZ25tZW50KSk7CisJY2hhciogcG9zID0gKChzaXplX3QpKGJyIC0gKGNoYXIqKShwKSkgPj0gTUlOX0NIVU5LX1NJWkUpPworCSAgYnIgOiBicithbGlnbm1lbnQ7CisJbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKXBvczsKKwlzaXplX3QgbGVhZHNpemUgPSBwb3MgLSAoY2hhciopKHApOworCXNpemVfdCBuZXdzaXplID0gY2h1bmtzaXplKHApIC0gbGVhZHNpemU7CisKKwlpZiAoaXNfbW1hcHBlZChwKSkgeyAvKiBGb3IgbW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLworCSAgbmV3cC0+cHJldl9mb290ID0gcC0+cHJldl9mb290ICsgbGVhZHNpemU7CisJICBuZXdwLT5oZWFkID0gKG5ld3NpemV8Q0lOVVNFX0JJVCk7CisJfQorCWVsc2UgeyAvKiBPdGhlcndpc2UsIGdpdmUgYmFjayBsZWFkZXIsIHVzZSB0aGUgcmVzdCAqLworCSAgc2V0X2ludXNlKG0sIG5ld3AsIG5ld3NpemUpOworCSAgc2V0X2ludXNlKG0sIHAsIGxlYWRzaXplKTsKKwkgIGxlYWRlciA9IGNodW5rMm1lbShwKTsKKwl9CisJcCA9IG5ld3A7CisgICAgICB9CisKKyAgICAgIC8qIEdpdmUgYmFjayBzcGFyZSByb29tIGF0IHRoZSBlbmQgKi8KKyAgICAgIGlmICghaXNfbW1hcHBlZChwKSkgeworCXNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOworCWlmIChzaXplID4gbmIgKyBNSU5fQ0hVTktfU0laRSkgeworCSAgc2l6ZV90IHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOworCSAgbWNodW5rcHRyIHJlbWFpbmRlciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwkgIHNldF9pbnVzZShtLCBwLCBuYik7CisJICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7CisJICB0cmFpbGVyID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisJfQorICAgICAgfQorCisgICAgICBhc3NlcnQgKGNodW5rc2l6ZShwKSA+PSBuYik7CisgICAgICBhc3NlcnQoKCgoc2l6ZV90KShjaHVuazJtZW0ocCkpKSAlIGFsaWdubWVudCkgPT0gMCk7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICBpZiAobGVhZGVyICE9IDApIHsKKwlpbnRlcm5hbF9mcmVlKG0sIGxlYWRlcik7CisgICAgICB9CisgICAgICBpZiAodHJhaWxlciAhPSAwKSB7CisJaW50ZXJuYWxfZnJlZShtLCB0cmFpbGVyKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29tYWxsb2MvY29hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCoqIGlhbGxvYyhtc3RhdGUgbSwKKwkJICAgICBzaXplX3Qgbl9lbGVtZW50cywKKwkJICAgICBzaXplX3QqIHNpemVzLAorCQkgICAgIGludCBvcHRzLAorCQkgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIC8qCisgICAgVGhpcyBwcm92aWRlcyBjb21tb24gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnRfWCByb3V0aW5lcywgaGFuZGxpbmcKKyAgICBhbGwgb2YgdGhlIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiByZXN1bHQuCisKKyAgICBUaGUgb3B0cyBhcmcgaGFzOgorICAgIGJpdCAwIHNldCBpZiBhbGwgZWxlbWVudHMgYXJlIHNhbWUgc2l6ZSAodXNpbmcgc2l6ZXNbMF0pCisgICAgYml0IDEgc2V0IGlmIGVsZW1lbnRzIHNob3VsZCBiZSB6ZXJvZWQKKyAgKi8KKworICBzaXplX3QgICAgZWxlbWVudF9zaXplOyAgIC8qIGNodW5rc2l6ZSBvZiBlYWNoIGVsZW1lbnQsIGlmIGFsbCBzYW1lICovCisgIHNpemVfdCAgICBjb250ZW50c19zaXplOyAgLyogdG90YWwgc2l6ZSBvZiBlbGVtZW50cyAqLworICBzaXplX3QgICAgYXJyYXlfc2l6ZTsgICAgIC8qIHJlcXVlc3Qgc2l6ZSBvZiBwb2ludGVyIGFycmF5ICovCisgIHZvaWQqICAgICBtZW07ICAgICAgICAgICAgLyogbWFsbG9jZWQgYWdncmVnYXRlIHNwYWNlICovCisgIG1jaHVua3B0ciBwOyAgICAgICAgICAgICAgLyogY29ycmVzcG9uZGluZyBjaHVuayAqLworICBzaXplX3QgICAgcmVtYWluZGVyX3NpemU7IC8qIHJlbWFpbmluZyBieXRlcyB3aGlsZSBzcGxpdHRpbmcgKi8KKyAgdm9pZCoqICAgIG1hcnJheTsgICAgICAgICAvKiBlaXRoZXIgImNodW5rcyIgb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCisgIG1jaHVua3B0ciBhcnJheV9jaHVuazsgICAgLyogY2h1bmsgZm9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBmbGFnX3QgICAgd2FzX2VuYWJsZWQ7ICAgIC8qIHRvIGRpc2FibGUgbW1hcCAqLworICBzaXplX3QgICAgc2l6ZTsKKyAgc2l6ZV90ICAgIGk7CisKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIC8qIGNvbXB1dGUgYXJyYXkgbGVuZ3RoLCBpZiBuZWVkZWQgKi8KKyAgaWYgKGNodW5rcyAhPSAwKSB7CisgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKKyAgICAgIHJldHVybiBjaHVua3M7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICBtYXJyYXkgPSBjaHVua3M7CisgICAgYXJyYXlfc2l6ZSA9IDA7CisgIH0KKyAgZWxzZSB7CisgICAgLyogaWYgZW1wdHkgcmVxLCBtdXN0IHN0aWxsIHJldHVybiBjaHVuayByZXByZXNlbnRpbmcgZW1wdHkgYXJyYXkgKi8KKyAgICBpZiAobl9lbGVtZW50cyA9PSAwKQorICAgICAgcmV0dXJuICh2b2lkKiopaW50ZXJuYWxfbWFsbG9jKG0sIDApOworICAgIG1hcnJheSA9IDA7CisgICAgYXJyYXlfc2l6ZSA9IHJlcXVlc3Qyc2l6ZShuX2VsZW1lbnRzICogKHNpemVvZih2b2lkKikpKTsKKyAgfQorCisgIC8qIGNvbXB1dGUgdG90YWwgZWxlbWVudCBzaXplICovCisgIGlmIChvcHRzICYgMHgxKSB7IC8qIGFsbC1zYW1lLXNpemUgKi8KKyAgICBlbGVtZW50X3NpemUgPSByZXF1ZXN0MnNpemUoKnNpemVzKTsKKyAgICBjb250ZW50c19zaXplID0gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZTsKKyAgfQorICBlbHNlIHsgLyogYWRkIHVwIGFsbCB0aGUgc2l6ZXMgKi8KKyAgICBlbGVtZW50X3NpemUgPSAwOworICAgIGNvbnRlbnRzX3NpemUgPSAwOworICAgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgICAgY29udGVudHNfc2l6ZSArPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOworICB9CisKKyAgc2l6ZSA9IGNvbnRlbnRzX3NpemUgKyBhcnJheV9zaXplOworCisgIC8qCisgICAgIEFsbG9jYXRlIHRoZSBhZ2dyZWdhdGUgY2h1bmsuICBGaXJzdCBkaXNhYmxlIGRpcmVjdC1tbWFwcGluZyBzbworICAgICBtYWxsb2Mgd29uJ3QgdXNlIGl0LCBzaW5jZSB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBsYXRlcgorICAgICBmcmVlL3JlYWxsb2Mgc3BhY2UgaW50ZXJuYWwgdG8gYSBzZWdyZWdhdGVkIG1tYXAgcmVnaW9uLgorICAqLworICB3YXNfZW5hYmxlZCA9IHVzZV9tbWFwKG0pOworICBkaXNhYmxlX21tYXAobSk7CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtLCBzaXplIC0gQ0hVTktfT1ZFUkhFQUQpOworICBpZiAod2FzX2VuYWJsZWQpCisgICAgZW5hYmxlX21tYXAobSk7CisgIGlmIChtZW0gPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgcCA9IG1lbTJjaHVuayhtZW0pOworICByZW1haW5kZXJfc2l6ZSA9IGNodW5rc2l6ZShwKTsKKworICBhc3NlcnQoIWlzX21tYXBwZWQocCkpOworCisgIGlmIChvcHRzICYgMHgyKSB7ICAgICAgIC8qIG9wdGlvbmFsbHkgY2xlYXIgdGhlIGVsZW1lbnRzICovCisgICAgbWVtc2V0KChzaXplX3QqKW1lbSwgMCwgcmVtYWluZGVyX3NpemUgLSBTSVpFX1RfU0laRSAtIGFycmF5X3NpemUpOworICB9CisKKyAgLyogSWYgbm90IHByb3ZpZGVkLCBhbGxvY2F0ZSB0aGUgcG9pbnRlciBhcnJheSBhcyBmaW5hbCBwYXJ0IG9mIGNodW5rICovCisgIGlmIChtYXJyYXkgPT0gMCkgeworICAgIHNpemVfdCAgYXJyYXlfY2h1bmtfc2l6ZTsKKyAgICBhcnJheV9jaHVuayA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIGNvbnRlbnRzX3NpemUpOworICAgIGFycmF5X2NodW5rX3NpemUgPSByZW1haW5kZXJfc2l6ZSAtIGNvbnRlbnRzX3NpemU7CisgICAgbWFycmF5ID0gKHZvaWQqKikgKGNodW5rMm1lbShhcnJheV9jaHVuaykpOworICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgYXJyYXlfY2h1bmssIGFycmF5X2NodW5rX3NpemUpOworICAgIHJlbWFpbmRlcl9zaXplID0gY29udGVudHNfc2l6ZTsKKyAgfQorCisgIC8qIHNwbGl0IG91dCBlbGVtZW50cyAqLworICBmb3IgKGkgPSAwOyA7ICsraSkgeworICAgIG1hcnJheVtpXSA9IGNodW5rMm1lbShwKTsKKyAgICBpZiAoaSAhPSBuX2VsZW1lbnRzLTEpIHsKKyAgICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkKKwlzaXplID0gZWxlbWVudF9zaXplOworICAgICAgZWxzZQorCXNpemUgPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOworICAgICAgcmVtYWluZGVyX3NpemUgLT0gc2l6ZTsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgc2l6ZSk7CisgICAgICBwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeyAvKiB0aGUgZmluYWwgZWxlbWVudCBhYnNvcmJzIGFueSBvdmVyYWxsb2NhdGlvbiBzbG9wICovCisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHJlbWFpbmRlcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisjaWYgREVCVUcKKyAgaWYgKG1hcnJheSAhPSBjaHVua3MpIHsKKyAgICAvKiBmaW5hbCBlbGVtZW50IG11c3QgaGF2ZSBleGFjdGx5IGV4aGF1c3RlZCBjaHVuayAqLworICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkgeworICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IGVsZW1lbnRfc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSkpOworICAgIH0KKyAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5KSk7CisgIH0KKyAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheVtpXSkpOworCisjZW5kaWYgLyogREVCVUcgKi8KKworICBQT1NUQUNUSU9OKG0pOworICByZXR1cm4gbWFycmF5OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAvKgorICAgICBCYXNpYyBhbGdvcml0aG06CisgICAgIElmIGEgc21hbGwgcmVxdWVzdCAoPCAyNTYgYnl0ZXMgbWludXMgcGVyLWNodW5rIG92ZXJoZWFkKToKKyAgICAgICAxLiBJZiBvbmUgZXhpc3RzLCB1c2UgYSByZW1haW5kZXJsZXNzIGNodW5rIGluIGFzc29jaWF0ZWQgc21hbGxiaW4uCisJICAoUmVtYWluZGVybGVzcyBtZWFucyB0aGF0IHRoZXJlIGFyZSB0b28gZmV3IGV4Y2VzcyBieXRlcyB0bworCSAgcmVwcmVzZW50IGFzIGEgY2h1bmsuKQorICAgICAgIDIuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgZHYgY2h1bmssIHdoaWNoIGlzIG5vcm1hbGx5IHRoZQorCSAgY2h1bmsgYWRqYWNlbnQgdG8gdGhlIG9uZSB1c2VkIGZvciB0aGUgbW9zdCByZWNlbnQgc21hbGwgcmVxdWVzdC4KKyAgICAgICAzLiBJZiBvbmUgZXhpc3RzLCBzcGxpdCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGNodW5rIGluIGEgYmluLAorCSAgc2F2aW5nIHJlbWFpbmRlciBpbiBkdi4KKyAgICAgICA0LiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KKyAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAorICAgICBPdGhlcndpc2UsIGZvciBhIGxhcmdlIHJlcXVlc3Q6CisgICAgICAgMS4gRmluZCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGJpbm5lZCBjaHVuayB0aGF0IGZpdHMsIGFuZCB1c2UgaXQKKwkgIGlmIGl0IGlzIGJldHRlciBmaXR0aW5nIHRoYW4gZHYgY2h1bmssIHNwbGl0dGluZyBpZiBuZWNlc3NhcnkuCisgICAgICAgMi4gSWYgYmV0dGVyIGZpdHRpbmcgdGhhbiBhbnkgYmlubmVkIGNodW5rLCB1c2UgdGhlIGR2IGNodW5rLgorICAgICAgIDMuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDQuIElmIHJlcXVlc3Qgc2l6ZSA+PSBtbWFwIHRocmVzaG9sZCwgdHJ5IHRvIGRpcmVjdGx5IG1tYXAgdGhpcyBjaHVuay4KKyAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAorCisgICAgIFRoZSB1Z2x5IGdvdG8ncyBoZXJlIGVuc3VyZSB0aGF0IHBvc3RhY3Rpb24gb2NjdXJzIGFsb25nIGFsbCBwYXRocy4KKyAgKi8KKworI2lmIFVTRV9MT0NLUworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsgLyogaW5pdGlhbGl6ZSBpbiBzeXNfYWxsb2MgaWYgbm90IHVzaW5nIGxvY2tzICovCisjZW5kaWYKKworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gZ20tPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisJbWNodW5rcHRyIGIsIHA7CisJaWR4ICs9IH5zbWFsbGJpdHMgJiAxOyAgICAgICAvKiBVc2VzIG5leHQgYmluIGlmIGlkeCBlbXB0eSAqLworCWIgPSBzbWFsbGJpbl9hdChnbSwgaWR4KTsKKwlwID0gYi0+ZmQ7CisJYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworCXVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaWR4KTsKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwltZW0gPSBjaHVuazJtZW0ocCk7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAobmIgPiBnbS0+ZHZzaXplKSB7CisJaWYgKHNtYWxsYml0cyAhPSAwKSB7IC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovCisJICBtY2h1bmtwdHIgYiwgcCwgcjsKKwkgIHNpemVfdCByc2l6ZTsKKwkgIGJpbmRleF90IGk7CisJICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworCSAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworCSAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKwkgIGIgPSBzbWFsbGJpbl9hdChnbSwgaSk7CisJICBwID0gYi0+ZmQ7CisJICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaSkpOworCSAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpKTsKKwkgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOworCSAgLyogRml0IGhlcmUgY2Fubm90IGJlIHJlbWFpbmRlcmxlc3MgaWYgNGJ5dGUgc2l6ZXMgKi8KKwkgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisJICAgIHNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIGVsc2UgeworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisJICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJICAgIHJlcGxhY2VfZHYoZ20sIHIsIHJzaXplKTsKKwkgIH0KKwkgIG1lbSA9IGNodW5rMm1lbShwKTsKKwkgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisKKwllbHNlIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKGdtLCBuYikpICE9IDApIHsKKwkgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKGdtLCBuYikpICE9IDApIHsKKwljaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJZ290byBwb3N0YWN0aW9uOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8PSBnbS0+ZHZzaXplKSB7CisgICAgICBzaXplX3QgcnNpemUgPSBnbS0+ZHZzaXplIC0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IGdtLT5kdjsKKyAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeyAvKiBzcGxpdCBkdiAqLworCW1jaHVua3B0ciByID0gZ20tPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCWdtLT5kdnNpemUgPSByc2l6ZTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisJc2l6ZV90IGR2cyA9IGdtLT5kdnNpemU7CisJZ20tPmR2c2l6ZSA9IDA7CisJZ20tPmR2ID0gMDsKKwlzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgZHZzKTsKKyAgICAgIH0KKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBlbHNlIGlmIChuYiA8IGdtLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IGdtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IGdtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfdG9wX2NodW5rKGdtLCBnbS0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBtZW0gPSBzeXNfYWxsb2MoZ20sIG5iKTsKKworICBwb3N0YWN0aW9uOgorICAgIFBPU1RBQ1RJT04oZ20pOworICAgIHJldHVybiBtZW07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBkbGZyZWUodm9pZCogbWVtKSB7CisgIC8qCisgICAgIENvbnNvbGlkYXRlIGZyZWVkIGNodW5rcyB3aXRoIHByZWNlZGluZyBvciBzdWNjZWVkaW5nIGJvcmRlcmluZworICAgICBmcmVlIGNodW5rcywgaWYgdGhleSBleGlzdCwgYW5kIHRoZW4gcGxhY2UgaW4gYSBiaW4uICBJbnRlcm1peGVkCisgICAgIHdpdGggc3BlY2lhbCBjYXNlcyBmb3IgdG9wLCBkdiwgbW1hcHBlZCBjaHVua3MsIGFuZCB1c2FnZSBlcnJvcnMuCisgICovCisKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisjaWYgRk9PVEVSUworICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyNkZWZpbmUgZm0gZ20KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7CisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19jaW51c2UocCkpKSB7CisJc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworCW1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworCWlmICghcGludXNlKHApKSB7CisJICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisJICBpZiAoKHByZXZzaXplICYgSVNfTU1BUFBFRF9CSVQpICE9IDApIHsKKwkgICAgcHJldnNpemUgJj0gfklTX01NQVBQRURfQklUOworCSAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisJICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKwkgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOworCSAgICBnb3RvIHBvc3RhY3Rpb247CisJICB9CisJICBlbHNlIHsKKwkgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOworCSAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKwkgICAgcCA9IHByZXY7CisJICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworCSAgICAgIGlmIChwICE9IGZtLT5kdikgeworCQl1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsKKwkgICAgICB9CisJICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCQlnb3RvIHBvc3RhY3Rpb247CisJICAgICAgfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgICBnb3RvIGVycm9yYWN0aW9uOworCSAgfQorCX0KKworCWlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworCSAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKwkgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgeworCSAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOworCSAgICAgIGZtLT50b3AgPSBwOworCSAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdiA9IDA7CisJCWZtLT5kdnNpemUgPSAwOworCSAgICAgIH0KKwkgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkKKwkJc3lzX3RyaW0oZm0sIDApOworCSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgICAgfQorCSAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgeworCSAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPmR2ID0gcDsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOworCSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisJICAgICAgcHNpemUgKz0gbnNpemU7CisJICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlnb3RvIHBvc3RhY3Rpb247CisJICAgICAgfQorCSAgICB9CisJICB9CisJICBlbHNlCisJICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKworCSAgaWYgKGlzX3NtYWxsKHBzaXplKSkgeworCSAgICBpbnNlcnRfc21hbGxfY2h1bmsoZm0sIHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICB9CisJICBlbHNlIHsKKwkgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworCSAgICBpbnNlcnRfbGFyZ2VfY2h1bmsoZm0sIHRwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgICBpZiAoLS1mbS0+cmVsZWFzZV9jaGVja3MgPT0gMCkKKwkgICAgICByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhmbSk7CisJICB9CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIGVycm9yYWN0aW9uOgorICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICBwb3N0YWN0aW9uOgorICAgICAgUE9TVEFDVElPTihmbSk7CisgICAgfQorICB9CisjaWYgIUZPT1RFUlMKKyN1bmRlZiBmbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KK30KKwordm9pZCogZGxjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgdm9pZCogbWVtOworICBzaXplX3QgcmVxID0gMDsKKyAgaWYgKG5fZWxlbWVudHMgIT0gMCkgeworICAgIHJlcSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgaWYgKCgobl9lbGVtZW50cyB8IGVsZW1fc2l6ZSkgJiB+KHNpemVfdCkweGZmZmYpICYmCisJKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkKKyAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7IC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLworICB9CisgIG1lbSA9IGRsbWFsbG9jKHJlcSk7CisgIGlmIChtZW0gIT0gMCAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgcmVxKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogZGxyZWFsbG9jKHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gZGxtYWxsb2MoYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIGRsZnJlZShvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmICEgRk9PVEVSUworICAgIG1zdGF0ZSBtID0gZ207CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihtZW0yY2h1bmsob2xkbWVtKSk7CisgICAgaWYgKCFva19tYWdpYyhtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG0sIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihnbSwgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwKKwkJCQkgdm9pZCogY2h1bmtzW10pIHsKKyAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCisgIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKK30KKwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLAorCQkJCSAgIHZvaWQqIGNodW5rc1tdKSB7CisgIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCit2b2lkKiBkbHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgc2l6ZV90IHBhZ2VzejsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOworICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIGJ5dGVzKTsKK30KKwordm9pZCogZGxwdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgKGJ5dGVzICsgcGFnZXN6IC0gU0laRV9UX09ORSkgJiB+KHBhZ2VzeiAtIFNJWkVfVF9PTkUpKTsKK30KKworaW50IGRsbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgeworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmICghUFJFQUNUSU9OKGdtKSkgeworICAgIHJlc3VsdCA9IHN5c190cmltKGdtLCBwYWQpOworICAgIFBPU1RBQ1RJT04oZ20pOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3NpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCkgeworICByZXR1cm4gZ20tPmZvb3RwcmludDsKK30KKworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCkgeworICByZXR1cm4gZ20tPm1heF9mb290cHJpbnQ7Cit9CisKKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBkbG1hbGxpbmZvKHZvaWQpIHsKKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKGdtKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCit2b2lkIGRsbWFsbG9jX3N0YXRzKCkgeworICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMoZ20pOworfQorCitpbnQgZGxtYWxsb3B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsKK30KKworI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KKworc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIGlmIChjaW51c2UocCkpCisgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOworICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1c2VyIG1zcGFjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgTVNQQUNFUworCitzdGF0aWMgbXN0YXRlIGluaXRfdXNlcl9tc3RhdGUoY2hhciogdGJhc2UsIHNpemVfdCB0c2l6ZSkgeworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBtY2h1bmtwdHIgbW47CisgIG1jaHVua3B0ciBtc3AgPSBhbGlnbl9hc19jaHVuayh0YmFzZSk7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSkoY2h1bmsybWVtKG1zcCkpOworICBtZW1zZXQobSwgMCwgbXNpemUpOworICAodm9pZClJTklUSUFMX0xPQ0soJm0tPm11dGV4KTsKKyAgbXNwLT5oZWFkID0gKG1zaXplfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOworICBtLT5zZWcuc2l6ZSA9IG0tPmZvb3RwcmludCA9IG0tPm1heF9mb290cHJpbnQgPSB0c2l6ZTsKKyAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICBtLT5yZWxlYXNlX2NoZWNrcyA9IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEU7CisgIG0tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgIG0tPmV4dHAgPSAwOworICBtLT5leHRzID0gMDsKKyAgZGlzYWJsZV9jb250aWd1b3VzKG0pOworICBpbml0X2JpbnMobSk7CisgIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOworICBpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtIFRPUF9GT09UX1NJWkUpOworICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgcmV0dXJuIG07Cit9CisKK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgeworICBtc3RhdGUgbSA9IDA7CisgIHNpemVfdCBtc2l6ZTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgaWYgKGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICBzaXplX3QgcnMgPSAoKGNhcGFjaXR5ID09IDApPyBtcGFyYW1zLmdyYW51bGFyaXR5IDoKKwkJIChjYXBhY2l0eSArIFRPUF9GT09UX1NJWkUgKyBtc2l6ZSkpOworICAgIHNpemVfdCB0c2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKHJzKTsKKyAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBJU19NTUFQUEVEX0JJVDsKKyAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgICAgfQorICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemU7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIGlmIChjYXBhY2l0eSA+IG1zaXplICsgVE9QX0ZPT1RfU0laRSAmJgorICAgICAgY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7CisgICAgbS0+c2VnLnNmbGFncyA9IEVYVEVSTl9CSVQ7CisgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCitpbnQgbXNwYWNlX21tYXBfbGFyZ2VfY2h1bmtzKG1zcGFjZSBtc3AsIGludCBlbmFibGUpIHsKKyAgaW50IHJldCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICBpZiAodXNlX21tYXAobXMpKQorICAgICAgcmV0ID0gMTsKKyAgICBpZiAoZW5hYmxlKQorICAgICAgZW5hYmxlX21tYXAobXMpOworICAgIGVsc2UKKyAgICAgIGRpc2FibGVfbW1hcChtcyk7CisgICAgUE9TVEFDVElPTihtcyk7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IGZyZWVkID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBtc2VnbWVudHB0ciBzcCA9ICZtcy0+c2VnOworICAgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgICBzaXplX3Qgc2l6ZSA9IHNwLT5zaXplOworICAgICAgZmxhZ190IGZsYWcgPSBzcC0+c2ZsYWdzOworICAgICAgc3AgPSBzcC0+bmV4dDsKKyAgICAgIGlmICgoZmxhZyAmIElTX01NQVBQRURfQklUKSAmJiAhKGZsYWcgJiBFWFRFUk5fQklUKSAmJgorCSAgQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkKKwlmcmVlZCArPSBzaXplOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiBmcmVlZDsKK30KKworLyoKKyAgbXNwYWNlIHZlcnNpb25zIG9mIHJvdXRpbmVzIGFyZSBuZWFyLWNsb25lcyBvZiB0aGUgZ2xvYmFsCisgIHZlcnNpb25zLiBUaGlzIGlzIG5vdCBzbyBuaWNlIGJ1dCBiZXR0ZXIgdGhhbiB0aGUgYWx0ZXJuYXRpdmVzLgorKi8KKworCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7CisgICAgICBzbWFsbGJpdHMgPSBtcy0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KKwltY2h1bmtwdHIgYiwgcDsKKwlpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisJYiA9IHNtYWxsYmluX2F0KG1zLCBpZHgpOworCXAgPSBiLT5mZDsKKwlhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpZHgpOworCXNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworCW1lbSA9IGNodW5rMm1lbShwKTsKKwljaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJZ290byBwb3N0YWN0aW9uOworICAgICAgfQorCisgICAgICBlbHNlIGlmIChuYiA+IG1zLT5kdnNpemUpIHsKKwlpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKwkgIG1jaHVua3B0ciBiLCBwLCByOworCSAgc2l6ZV90IHJzaXplOworCSAgYmluZGV4X3QgaTsKKwkgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisJICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisJICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworCSAgYiA9IHNtYWxsYmluX2F0KG1zLCBpKTsKKwkgIHAgPSBiLT5mZDsKKwkgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGkpOworCSAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7CisJICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworCSAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwkgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaSkpOworCSAgZWxzZSB7CisJICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKwkgICAgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwkgICAgcmVwbGFjZV9kdihtcywgciwgcnNpemUpOworCSAgfQorCSAgbWVtID0gY2h1bmsybWVtKHApOworCSAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCSAgZ290byBwb3N0YWN0aW9uOworCX0KKworCWVsc2UgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwobXMsIG5iKSkgIT0gMCkgeworCSAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAgICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UobXMsIG5iKSkgIT0gMCkgeworCWNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IG1zLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbXMtPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisJbWNodW5rcHRyIHIgPSBtcy0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJbXMtPmR2c2l6ZSA9IHJzaXplOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgfQorICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KKwlzaXplX3QgZHZzID0gbXMtPmR2c2l6ZTsKKwltcy0+ZHZzaXplID0gMDsKKwltcy0+ZHYgPSAwOworCXNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBkdnMpOworICAgICAgfQorICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIGVsc2UgaWYgKG5iIDwgbXMtPnRvcHNpemUpIHsgLyogU3BsaXQgdG9wICovCisgICAgICBzaXplX3QgcnNpemUgPSBtcy0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbXMtPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gbXMtPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja190b3BfY2h1bmsobXMsIG1zLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIG1lbSA9IHN5c19hbGxvYyhtcywgbmIpOworCisgIHBvc3RhY3Rpb246CisgICAgUE9TVEFDVElPTihtcyk7CisgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIGZtID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKwlzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisJbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7CisJaWYgKCFwaW51c2UocCkpIHsKKwkgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKwkgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgeworCSAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisJICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKwkgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQorCSAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisJICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgIH0KKwkgIGVsc2UgeworCSAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisJICAgIHBzaXplICs9IHByZXZzaXplOworCSAgICBwID0gcHJldjsKKwkgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisJICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7CisJCXVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworCSAgICAgIH0KKwkgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisJICB9CisJfQorCisJaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisJICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworCSAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisJICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPnRvcCA9IHA7CisJICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2ID0gMDsKKwkJZm0tPmR2c2l6ZSA9IDA7CisJICAgICAgfQorCSAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorCQlzeXNfdHJpbShmbSwgMCk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisJICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+ZHYgPSBwOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgeworCSAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKwkgICAgICBwc2l6ZSArPSBuc2l6ZTsKKwkgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKwkgIGVsc2UKKwkgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCisJICBpZiAoaXNfc21hbGwocHNpemUpKSB7CisJICAgIGluc2VydF9zbWFsbF9jaHVuayhmbSwgcCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgIH0KKwkgIGVsc2UgeworCSAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisJICAgIGluc2VydF9sYXJnZV9jaHVuayhmbSwgdHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICAgIGlmICgtLWZtLT5yZWxlYXNlX2NoZWNrcyA9PSAwKQorCSAgICAgIHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKGZtKTsKKwkgIH0KKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KK30KKwordm9pZCogbXNwYWNlX2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkKiBtZW07CisgIHNpemVfdCByZXEgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIGlmIChuX2VsZW1lbnRzICE9IDApIHsKKyAgICByZXEgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJgorCShyZXEgLyBuX2VsZW1lbnRzICE9IGVsZW1fc2l6ZSkpCisgICAgICByZXEgPSBNQVhfU0laRV9UOyAvKiBmb3JjZSBkb3duc3RyZWFtIGZhaWx1cmUgb24gb3ZlcmZsb3cgKi8KKyAgfQorICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobXMsIHJlcSk7CisgIGlmIChtZW0gIT0gMCAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgcmVxKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKG1zcCwgYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIG1zcGFjZV9mcmVlKG1zcCwgb2xkbWVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLworICBlbHNlIHsKKyNpZiBGT09URVJTCisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgbXN0YXRlIG1zID0gZ2V0X21zdGF0ZV9mb3IocCk7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG1zLCBvbGRtZW0sIGJ5dGVzKTsKKyAgfQorfQorCit2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKG1zLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisJCQkJIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKSB7CisgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCBzaXplcywgMCwgY2h1bmtzKTsKK30KKworaW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpIHsKKyAgaW50IHJlc3VsdCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgICByZXN1bHQgPSBzeXNfdHJpbShtcywgcGFkKTsKKyAgICAgIFBPU1RBQ1RJT04obXMpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zKTsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9Cit9CisKK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgcmVzdWx0ID0gbXMtPmZvb3RwcmludDsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgcmVzdWx0ID0gbXMtPm1heF9mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhtcyk7Cit9CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworc2l6ZV90IG1zcGFjZV91c2FibGVfc2l6ZSh2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBpZiAoY2ludXNlKHApKQorICAgICAgcmV0dXJuIGNodW5rc2l6ZShwKSAtIG92ZXJoZWFkX2ZvcihwKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IG1zcGFjZV9tYWxsb3B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsKK30KKworI2VuZGlmIC8qIE1TUEFDRVMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWx0ZXJuYXRpdmUgTU9SRUNPUkUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgR3VpZGVsaW5lcyBmb3IgY3JlYXRpbmcgYSBjdXN0b20gdmVyc2lvbiBvZiBNT1JFQ09SRToKKworICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBNT1JFQ09SRSBzaG91bGQgYWxsb2NhdGUgaW4gbXVsdGlwbGVzIG9mIHBhZ2VzaXplLgorICAqIE1PUkVDT1JFIG1heSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIHJlcXVlc3RlZC4gKE9yIGV2ZW4gbGVzcywKKyAgICAgIGJ1dCB0aGlzIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gYSBtYWxsb2MgZmFpbHVyZS4pCisgICogTU9SRUNPUkUgbXVzdCBub3QgYWxsb2NhdGUgbWVtb3J5IHdoZW4gZ2l2ZW4gYXJndW1lbnQgemVybywgYnV0CisgICAgICBpbnN0ZWFkIHJldHVybiBvbmUgcGFzdCB0aGUgZW5kIGFkZHJlc3Mgb2YgbWVtb3J5IGZyb20gcHJldmlvdXMKKyAgICAgIG5vbnplcm8gY2FsbC4KKyAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgd2l0aCBwb3NpdGl2ZQorICAgICAgYXJndW1lbnRzIHNob3VsZCByZXR1cm4gaW5jcmVhc2luZyBhZGRyZXNzZXMsIGluZGljYXRpbmcgdGhhdAorICAgICAgc3BhY2UgaGFzIGJlZW4gY29udGlndW91c2x5IGV4dGVuZGVkLgorICAqIEV2ZW4gdGhvdWdoIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIG5lZWQgbm90IHJldHVybiBjb250aWd1b3VzCisgICAgICBhZGRyZXNzZXMsIGl0IG11c3QgYmUgT0sgZm9yIG1hbGxvYydlZCBjaHVua3MgdG8gc3BhbiBtdWx0aXBsZQorICAgICAgcmVnaW9ucyBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGV5IGRvIGhhcHBlbiB0byBiZSBjb250aWd1b3VzLgorICAqIE1PUkVDT1JFIG5lZWQgbm90IGhhbmRsZSBuZWdhdGl2ZSBhcmd1bWVudHMgLS0gaXQgbWF5IGluc3RlYWQKKyAgICAgIGp1c3QgcmV0dXJuIE1GQUlMIHdoZW4gZ2l2ZW4gbmVnYXRpdmUgYXJndW1lbnRzLgorICAgICAgTmVnYXRpdmUgYXJndW1lbnRzIGFyZSBhbHdheXMgbXVsdGlwbGVzIG9mIHBhZ2VzaXplLiBNT1JFQ09SRQorICAgICAgbXVzdCBub3QgbWlzaW50ZXJwcmV0IG5lZ2F0aXZlIGFyZ3MgYXMgbGFyZ2UgcG9zaXRpdmUgdW5zaWduZWQKKyAgICAgIGFyZ3MuIFlvdSBjYW4gc3VwcHJlc3MgYWxsIHN1Y2ggY2FsbHMgZnJvbSBldmVuIG9jY3VycmluZyBieSBkZWZpbmluZworICAgICAgTU9SRUNPUkVfQ0FOTk9UX1RSSU0sCisKKyAgQXMgYW4gZXhhbXBsZSBhbHRlcm5hdGl2ZSBNT1JFQ09SRSwgaGVyZSBpcyBhIGN1c3RvbSBhbGxvY2F0b3IKKyAga2luZGx5IGNvbnRyaWJ1dGVkIGZvciBwcmUtT1NYIG1hY09TLiAgSXQgdXNlcyB2aXJ0dWFsbHkgYnV0IG5vdAorICBuZWNlc3NhcmlseSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbm9uLXBhZ2VkIG1lbW9yeSAobG9ja2VkIGluLAorICBwcmVzZW50IGFuZCB3b24ndCBnZXQgc3dhcHBlZCBvdXQpLiAgWW91IGNhbiB1c2UgaXQgYnkgdW5jb21tZW50aW5nCisgIHRoaXMgc2VjdGlvbiwgYWRkaW5nIHNvbWUgI2luY2x1ZGVzLCBhbmQgc2V0dGluZyB1cCB0aGUgYXBwcm9wcmlhdGUKKyAgZGVmaW5lcyBhYm92ZToKKworICAgICAgI2RlZmluZSBNT1JFQ09SRSBvc01vcmVDb3JlCisKKyAgVGhlcmUgaXMgYWxzbyBhIHNodXRkb3duIHJvdXRpbmUgdGhhdCBzaG91bGQgc29tZWhvdyBiZSBjYWxsZWQgZm9yCisgIGNsZWFudXAgdXBvbiBwcm9ncmFtIGV4aXQuCisKKyAgI2RlZmluZSBNQVhfUE9PTF9FTlRSSUVTIDEwMAorICAjZGVmaW5lIE1JTklNVU1fTU9SRUNPUkVfU0laRSAgKDY0ICogMTAyNFUpCisgIHN0YXRpYyBpbnQgbmV4dF9vc19wb29sOworICB2b2lkICpvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107CisKKyAgdm9pZCAqb3NNb3JlQ29yZShpbnQgc2l6ZSkKKyAgeworICAgIHZvaWQgKnB0ciA9IDA7CisgICAgc3RhdGljIHZvaWQgKnNicmtfdG9wID0gMDsKKworICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICBpZiAoc2l6ZSA8IE1JTklNVU1fTU9SRUNPUkVfU0laRSkKKwkgc2l6ZSA9IE1JTklNVU1fTU9SRUNPUkVfU0laRTsKKyAgICAgIGlmIChDdXJyZW50RXhlY3V0aW9uTGV2ZWwoKSA9PSBrVGFza0xldmVsKQorCSBwdHIgPSBQb29sQWxsb2NhdGVSZXNpZGVudChzaXplICsgUk1fUEFHRV9TSVpFLCAwKTsKKyAgICAgIGlmIChwdHIgPT0gMCkKKyAgICAgIHsKKwlyZXR1cm4gKHZvaWQgKikgTUZBSUw7CisgICAgICB9CisgICAgICAvLyBzYXZlIHB0cnMgc28gdGhleSBjYW4gYmUgZnJlZWQgZHVyaW5nIGNsZWFudXAKKyAgICAgIG91cl9vc19wb29sc1tuZXh0X29zX3Bvb2xdID0gcHRyOworICAgICAgbmV4dF9vc19wb29sKys7CisgICAgICBwdHIgPSAodm9pZCAqKSAoKCgoc2l6ZV90KSBwdHIpICsgUk1fUEFHRV9NQVNLKSAmIH5STV9QQUdFX01BU0spOworICAgICAgc2Jya190b3AgPSAoY2hhciAqKSBwdHIgKyBzaXplOworICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisgICAgZWxzZSBpZiAoc2l6ZSA8IDApCisgICAgeworICAgICAgLy8gd2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgc2hyaW5rIGJlaGF2aW9yCisgICAgICByZXR1cm4gKHZvaWQgKikgTUZBSUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gc2Jya190b3A7CisgICAgfQorICB9CisKKyAgLy8gY2xlYW51cCBhbnkgYWxsb2NhdGVkIG1lbW9yeSBwb29scworICAvLyBjYWxsZWQgYXMgbGFzdCB0aGluZyBiZWZvcmUgc2h1dHRpbmcgZG93biBkcml2ZXIKKworICB2b2lkIG9zQ2xlYW51cE1lbSh2b2lkKQorICB7CisgICAgdm9pZCAqKnB0cjsKKworICAgIGZvciAocHRyID0gb3VyX29zX3Bvb2xzOyBwdHIgPCAmb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOyBwdHIrKykKKyAgICAgIGlmICgqcHRyKQorICAgICAgeworCSBQb29sRGVhbGxvY2F0ZSgqcHRyKTsKKwkgKnB0ciA9IDA7CisgICAgICB9CisgIH0KKworKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSGlzdG9yeToKKyAgICBWMi44LjQgKG5vdCB5ZXQgcmVsZWFzZWQpCisgICAgICAqIEFkZCBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3M7IHRoYW5rcyB0byBKZWFuIEJyb3V3ZXJzCisgICAgICAqIEZpeCBpbnN1ZmZpY2llbnQgc3lzX2FsbG9jIHBhZGRpbmcgd2hlbiB1c2luZyAxNmJ5dGUgYWxpZ25tZW50CisgICAgICAqIEZpeCBiYWQgZXJyb3IgY2hlY2sgaW4gbXNwYWNlX2Zvb3RwcmludAorICAgICAgKiBBZGFwdGF0aW9ucyBmb3IgcHRtYWxsb2MsIGNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xvZ2VyLgorICAgICAgKiBSZWVudHJhbnQgc3BpbiBsb2NrcywgY291cnRlc3kgb2YgRWFybCBDaGV3IGFuZCBvdGhlcnMKKyAgICAgICogV2luMzIgaW1wcm92ZW1lbnRzLCBjb3VydGVzeSBvZiBOaWFsbCBEb3VnbGFzIGFuZCBFYXJsIENoZXcKKyAgICAgICogQWRkIE5PX1NFR01FTlRfVFJBVkVSU0FMIGFuZCBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIG9wdGlvbnMKKyAgICAgICogRXh0ZW5zaW9uIGhvb2sgaW4gbWFsbG9jX3N0YXRlCisgICAgICAqIFZhcmlvdXMgc21hbGwgYWRqdXN0bWVudHMgdG8gcmVkdWNlIHdhcm5pbmdzIG9uIHNvbWUgY29tcGlsZXJzCisgICAgICAqIFZhcmlvdXMgY29uZmlndXJhdGlvbiBleHRlbnNpb25zL2NoYW5nZXMgZm9yIG1vcmUgcGxhdGZvcm1zLiBUaGFua3MKKwkgdG8gYWxsIHdobyBjb250cmlidXRlZCB0aGVzZS4KKworICAgIFYyLjguMyBUaHUgU2VwIDIyIDExOjE2OjMyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGQgbWF4X2Zvb3RwcmludCBmdW5jdGlvbnMKKyAgICAgICogRW5zdXJlIGFsbCBhcHByb3ByaWF0ZSBsaXRlcmFscyBhcmUgc2l6ZV90CisgICAgICAqIEZpeCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwcm9ibGVtIGZvciBzb21lICNkZWZpbmUgc2V0dGluZ3MKKyAgICAgICogQXZvaWQgY29uY2F0ZW5hdGluZyBzZWdtZW50cyB3aXRoIHRoZSBvbmUgcHJvdmlkZWQKKwlpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZQorICAgICAgKiBSZW5hbWUgc29tZSB2YXJpYWJsZXMgdG8gYXZvaWQgY29tcGlsZXIgc2hhZG93aW5nIHdhcm5pbmdzCisgICAgICAqIFVzZSBleHBsaWNpdCBsb2NrIGluaXRpYWxpemF0aW9uLgorICAgICAgKiBCZXR0ZXIgaGFuZGxpbmcgb2Ygc2JyayBpbnRlcmZlcmVuY2UuCisgICAgICAqIFNpbXBsaWZ5IGFuZCBmaXggc2VnbWVudCBpbnNlcnRpb24sIHRyaW1taW5nIGFuZCBtc3BhY2VfZGVzdHJveQorICAgICAgKiBSZWluc3RhdGUgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTIG9wdGlvbiBmcm9tIDIuNy54CisgICAgICAqIFRoYW5rcyBlc3BlY2lhbGx5IHRvIERlbm5pcyBGbGFuYWdhbiBmb3IgaGVscCBvbiB0aGVzZS4KKworICAgIFYyLjguMiBTdW4gSnVuIDEyIDE2OjAxOjEwIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWVtYWxpZ24gYnJhY2UgZXJyb3IuCisKKyAgICBWMi44LjEgV2VkIEp1biAgOCAxNjoxMTo0NiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IGltcHJvcGVyICNlbmRpZiBuZXN0aW5nIGluIEMrKworICAgICAgKiBBZGQgZXhwbGljaXQgY2FzdHMgbmVlZGVkIGZvciBDKysKKworICAgIFYyLjguMCBNb24gTWF5IDMwIDE0OjA5OjAyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBVc2UgdHJlZXMgZm9yIGxhcmdlIGJpbnMKKyAgICAgICogU3VwcG9ydCBtc3BhY2VzCisgICAgICAqIFVzZSBzZWdtZW50cyB0byB1bmlmeSBzYnJrLWJhc2VkIGFuZCBtbWFwLWJhc2VkIHN5c3RlbSBhbGxvY2F0aW9uLAorCXJlbW92aW5nIG5lZWQgZm9yIGVtdWxhdGlvbiBvbiBtb3N0IHBsYXRmb3JtcyB3aXRob3V0IHNicmsuCisgICAgICAqIERlZmF1bHQgc2FmZXR5IGNoZWNrcworICAgICAgKiBPcHRpb25hbCBmb290ZXIgY2hlY2tzLiBUaGFua3MgdG8gV2lsbGlhbSBSb2JlcnRzb24gZm9yIHRoZSBpZGVhLgorICAgICAgKiBJbnRlcm5hbCBjb2RlIHJlZmFjdG9yaW5nCisgICAgICAqIEluY29ycG9yYXRlIHN1Z2dlc3Rpb25zIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBjaGFuZ2VzLgorCVRoYW5rcyB0byBEZW5uaXMgRmxhbmFnYW4sIENvbGluIFBsdW1iLCBOaWFsbCBEb3VnbGFzLAorCUFhcm9uIEJhY2htYW5uLCAgRW1lcnkgQmVyZ2VyLCBhbmQgb3RoZXJzLgorICAgICAgKiBTcGVlZCB1cCBub24tZmFzdGJpbiBwcm9jZXNzaW5nIGVub3VnaCB0byByZW1vdmUgZmFzdGJpbnMuCisgICAgICAqIFJlbW92ZSB1c2VsZXNzIGNmcmVlKCkgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgYXBwcy4KKyAgICAgICogUmVtb3ZlIGludGVybmFsIG1lbWNweSwgbWVtc2V0LiBDb21waWxlcnMgaGFuZGxlIGJ1aWx0aW5zIGJldHRlci4KKyAgICAgICogUmVtb3ZlIHNvbWUgb3B0aW9ucyB0aGF0IG5vIG9uZSBldmVyIHVzZWQgYW5kIHJlbmFtZSBvdGhlcnMuCisKKyAgICBWMi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1hbGxvY19zdGF0ZSBiaXRtYXAgYXJyYXkgbWlzZGVjbGFyYXRpb24KKworICAgIFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBbGxvdyB0dW5pbmcgb2YgRklSU1RfU09SVEVEX0JJTl9TSVpFCisgICAgICAqIFVzZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBKb2huIEJlbG1vbnRlLgorICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBub24tY29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuCisJVGhhbmtzIHRvIEFuZHJlYXMgTXVlbGxlciwgQ29uYWwgV2Fsc2gsIGFuZCBXb2xmcmFtIEdsb2dlcgorICAgICAgKiBCeXBhc3MgbW9zdCBvZiBtYWxsb2MgaWYgbm8gZnJlZXMuIFRoYW5rcyBUbyBFbWVyeSBCZXJnZXIuCisgICAgICAqIEZpeCBmcmVlaW5nIG9mIG9sZCB0b3Agbm9uLWNvbnRpZ3VvdXMgY2h1bmsgaW0gc3lzbWFsbG9jLgorICAgICAgKiBSYWlzZWQgZGVmYXVsdCB0cmltIGFuZCBtYXAgdGhyZXNob2xkcyB0byAyNTZLLgorICAgICAgKiBGaXggbW1hcC1yZWxhdGVkICNkZWZpbmVzLiBUaGFua3MgdG8gTHVib3MgTHVuYWsuCisgICAgICAqIEZpeCBjb3B5IG1hY3JvczsgYWRkZWQgTEFDS1NfRkNOVExfSC4gVGhhbmtzIHRvIE5lYWwgV2FsZmllbGQuCisgICAgICAqIEJyYW5jaC1mcmVlIGJpbiBjYWxjdWxhdGlvbgorICAgICAgKiBEZWZhdWx0IHRyaW0gYW5kIG1tYXAgdGhyZXNob2xkcyBub3cgMjU2Sy4KKworICAgIFYyLjcuMCBTdW4gTWFyIDExIDE0OjE0OjA2IDIwMDEgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBJbnRyb2R1Y2UgaW5kZXBlbmRlbnRfY29tYWxsb2MgYW5kIGluZGVwZW5kZW50X2NhbGxvYy4KKwlUaGFua3MgdG8gTWljaGFlbCBQYWNob3MgZm9yIG1vdGl2YXRpb24gYW5kIGhlbHAuCisgICAgICAqIE1ha2Ugb3B0aW9uYWwgLmggZmlsZSBhdmFpbGFibGUKKyAgICAgICogQWxsb3cgPiAyR0IgcmVxdWVzdHMgb24gMzJiaXQgc3lzdGVtcy4KKyAgICAgICogbmV3IFdJTjMyIHNicmssIG1tYXAsIG11bm1hcCwgbG9jayBjb2RlIGZyb20gPFdhbHRlckBHZU5lU3lzLWUuZGU+LgorCVRoYW5rcyBhbHNvIHRvIEFuZHJlYXMgTXVlbGxlciA8YS5tdWVsbGVyIGF0IHBhcmFkYXRlYy5kZT4sCisJYW5kIEFub255bW91cy4KKyAgICAgICogQWxsb3cgb3ZlcnJpZGUgb2YgTUFMTE9DX0FMSUdOTUVOVCAoVGhhbmtzIHRvIFJ1dWQgV2FpaiBmb3IKKwloZWxwaW5nIHRlc3QgdGhpcy4pCisgICAgICAqIG1lbWFsaWduOiBjaGVjayBhbGlnbm1lbnQgYXJnCisgICAgICAqIHJlYWxsb2M6IGRvbid0IHRyeSB0byBzaGlmdCBjaHVua3MgYmFja3dhcmRzLCBzaW5jZSB0aGlzCisJbGVhZHMgdG8gIG1vcmUgZnJhZ21lbnRhdGlvbiBpbiBzb21lIHByb2dyYW1zIGFuZCBkb2Vzbid0CisJc2VlbSB0byBoZWxwIGluIGFueSBvdGhlcnMuCisgICAgICAqIENvbGxlY3QgYWxsIGNhc2VzIGluIG1hbGxvYyByZXF1aXJpbmcgc3lzdGVtIG1lbW9yeSBpbnRvIHN5c21hbGxvYworICAgICAgKiBVc2UgbW1hcCBhcyBiYWNrdXAgdG8gc2JyaworICAgICAgKiBQbGFjZSBhbGwgaW50ZXJuYWwgc3RhdGUgaW4gbWFsbG9jX3N0YXRlCisgICAgICAqIEludHJvZHVjZSBmYXN0YmlucyAoYWx0aG91Z2ggc2ltaWxhciB0byAyLjUuMSkKKyAgICAgICogTWFueSBtaW5vciB0dW5pbmdzIGFuZCBjb3NtZXRpYyBpbXByb3ZlbWVudHMKKyAgICAgICogSW50cm9kdWNlIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTLCBVU0VfTUFMTE9DX0xPQ0sKKyAgICAgICogSW50cm9kdWNlIE1BTExPQ19GQUlMVVJFX0FDVElPTiwgTU9SRUNPUkVfQ09OVElHVU9VUworCVRoYW5rcyB0byBUb255IEUuIEJlbm5ldHQgPHRiZW5uZXR0QG52aWRpYS5jb20+IGFuZCBvdGhlcnMuCisgICAgICAqIEluY2x1ZGUgZXJybm8uaCB0byBzdXBwb3J0IGRlZmF1bHQgZmFpbHVyZSBhY3Rpb24uCisKKyAgICBWMi42LjYgU3VuIERlYyAgNSAwNzo0MjoxOSAxOTk5ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogcmV0dXJuIG51bGwgZm9yIG5lZ2F0aXZlIGFyZ3VtZW50cworICAgICAgKiBBZGRlZCBTZXZlcmFsIFdJTjMyIGNsZWFudXBzIGZyb20gTWFydGluIEMuIEZvbmcgPG1jZm9uZyBhdCB5YWhvby5jb20+CisJICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCisJICAoZS5nLiBXSU4zMiBwbGF0Zm9ybXMpCisJICogQ2xlYW51cCBoZWFkZXIgZmlsZSBpbmNsdXNpb24gZm9yIFdJTjMyIHBsYXRmb3JtcworCSAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCisJICogQWRkICdVU0VfRExfUFJFRklYJyB0byBxdWlja2x5IGFsbG93IGNvLWV4aXN0ZW5jZSB3aXRoIGV4aXN0aW5nCisJICAgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMKKwkgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQorCSAqIFVzZSAnYXNzZXJ0JyByYXRoZXIgdGhhbiAnQVNTRVJUJyBpbiBXSU4zMiBjb2RlIHRvIGNvbmZvcm0gdG8KKwkgICB1c2FnZSBvZiAnYXNzZXJ0JyBpbiBub24tV0lOMzIgY29kZQorCSAqIEltcHJvdmUgV0lOMzIgJ3NicmsoKScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bworCSAgIGF2b2lkIGluZmluaXRlIGxvb3AKKyAgICAgICogQWx3YXlzIGNhbGwgJ2ZSRWUoKScgcmF0aGVyIHRoYW4gJ2ZyZWUoKScKKworICAgIFYyLjYuNSBXZWQgSnVuIDE3IDE1OjU3OjMxIDE5OTggIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXhlZCBvcmRlcmluZyBwcm9ibGVtIHdpdGggYm91bmRhcnktc3RhbXBpbmcKKworICAgIFYyLjYuMyBTdW4gTWF5IDE5IDA4OjE3OjU4IDE5OTYgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGRlZCBwdmFsbG9jLCBhcyByZWNvbW1lbmRlZCBieSBILkouIExpdQorICAgICAgKiBBZGRlZCA2NGJpdCBwb2ludGVyIHN1cHBvcnQgbWFpbmx5IGZyb20gV29sZnJhbSBHbG9nZXIKKyAgICAgICogQWRkZWQgYW5vbnltb3VzbHkgZG9uYXRlZCBXSU4zMiBzYnJrIGVtdWxhdGlvbgorICAgICAgKiBNYWxsb2MsIGNhbGxvYywgZ2V0cGFnZXNpemU6IGFkZCBvcHRpbWl6YXRpb25zIGZyb20gUmF5bW9uZCBOaWpzc2VuCisgICAgICAqIG1hbGxvY19leHRlbmRfdG9wOiBmaXggbWFzayBlcnJvciB0aGF0IGNhdXNlZCB3YXN0YWdlIGFmdGVyCisJZm9yZWlnbiBzYnJrcworICAgICAgKiBBZGQgbGludXggbXJlbWFwIHN1cHBvcnQgY29kZSBmcm9tIEhKIExpdQorCisgICAgVjIuNi4yIFR1ZSBEZWMgIDUgMDY6NTI6NTUgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludGVncmF0ZWQgbW9zdCBkb2N1bWVudGF0aW9uIHdpdGggdGhlIGNvZGUuCisgICAgICAqIEFkZCBzdXBwb3J0IGZvciBtbWFwLCB3aXRoIGhlbHAgZnJvbQorCVdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgorICAgICAgKiBQYWNrIGJpbnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKyAgICAgICogVXNlIG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaG9sZAorICAgICAgKiBFbGltaW5hdGUgYmxvY2stbG9jYWwgZGVjbHMgdG8gc2ltcGxpZnkgdHJhY2luZyBhbmQgZGVidWdnaW5nLgorICAgICAgKiBTdXBwb3J0IGFub3RoZXIgY2FzZSBvZiByZWFsbG9jIHZpYSBtb3ZlIGludG8gdG9wCisgICAgICAqIEZpeCBlcnJvciBvY2N1cnJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qgd29yZC1hbGlnbmVkLgorICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVhZCBvZiBTQlJLX1VOSVQgdG8KKwlhdm9pZCBzdXJwcmlzZXMgYWJvdXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuCisgICAgICAqIEFkZCBtYWxsaW5mbywgbWFsbG9wdC4gVGhhbmtzIHRvIFJheW1vbmQgTmlqc3NlbgorCShyYXltb25kQGVzLmVsZS50dWUubmwpIGZvciB0aGUgc3VnZ2VzdGlvbi4KKyAgICAgICogQWRkIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIGFuZCB0b3BfcGFkIG1hbGxvcHQgcGFyYW1ldGVyLgorICAgICAgKiBNb3JlIHByZWNhdXRpb25zIGZvciBjYXNlcyB3aGVyZSBvdGhlciByb3V0aW5lcyBjYWxsIHNicmssCisJY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBsaWJjIGZyb20KKwlILkouIEx1IChoamxAZ251LmFpLm1pdC5lZHUpCisgICAgICAqIEludmVydGVkIHRoaXMgaGlzdG9yeSBsaXN0CisKKyAgICBWMi42LjEgU2F0IERlYyAgMiAxNDoxMDo1NyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmUtdHVuZWQgYW5kIGZpeGVkIHRvIGJlaGF2ZSBtb3JlIG5pY2VseSB3aXRoIFYyLjYuMCBjaGFuZ2VzLgorICAgICAgKiBSZW1vdmVkIGFsbCBwcmVhbGxvY2F0aW9uIGNvZGUgc2luY2UgdW5kZXIgY3VycmVudCBzY2hlbWUKKwl0aGUgd29yayByZXF1aXJlZCB0byB1bmRvIGJhZCBwcmVhbGxvY2F0aW9ucyBleGNlZWRzCisJdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgorICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVkIGJpbnMgc2luY2UKKwlubyBzY2hlbWUgdXNpbmcgdGhlbSBjb25zaXN0ZW50bHkgb3V0cGVyZm9ybXMgdGhvc2UgdGhhdCBkb24ndAorCWdpdmVuIGFib3ZlIGNoYW5nZXMuCisgICAgICAqIFVzZSBiZXN0IGZpdCBmb3IgdmVyeSBsYXJnZSBjaHVua3MgdG8gcHJldmVudCBzb21lIHdvcnN0LWNhc2VzLgorICAgICAgKiBBZGRlZCBzb21lIHN1cHBvcnQgZm9yIGRlYnVnZ2luZworCisgICAgVjIuNi4wIFNhdCBOb3YgIDQgMDc6MDU6MjMgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlbW92ZWQgZm9vdGVycyB3aGVuIGNodW5rcyBhcmUgaW4gdXNlLiBUaGFua3MgdG8KKwlQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisgICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJvbSBXb2xmcmFtIEdsb2dlcgorCSh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLgorCisgICAgVjIuNS4zIFR1ZSBBcHIgMjYgMTA6MTY6MDEgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQorCisgICAgVjIuNS4yIFR1ZSBBcHIgIDUgMTY6MjA6NDAgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQorICAgICAgKiByZWFsbG9jOiB0cnkgdG8gZXhwYW5kIGluIGJvdGggZGlyZWN0aW9ucworICAgICAgKiBtYWxsb2M6IHN3YXAgb3JkZXIgb2YgY2xlYW4tYmluIHN0cmF0ZWd5OworICAgICAgKiByZWFsbG9jOiBvbmx5IGNvbmRpdGlvbmFsbHkgZXhwYW5kIGJhY2t3YXJkcworICAgICAgKiBUcnkgbm90IHRvIHNjYXZlbmdlIHVzZWQgYmlucworICAgICAgKiBVc2UgYmluIGNvdW50cyBhcyBhIGd1aWRlIHRvIHByZWFsbG9jYXRpb24KKyAgICAgICogT2NjYXNpb25hbGx5IGJpbiByZXR1cm4gbGlzdCBjaHVua3MgaW4gZmlyc3Qgc2NhbgorICAgICAgKiBBZGQgYSBmZXcgb3B0aW1pemF0aW9ucyBmcm9tIGNvbGluQG55eDEwLmNzLmR1LmVkdQorCisgICAgVjIuNS4xIFNhdCBBdWcgMTQgMTU6NDA6NDMgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnKQorICAgICAgKiBmYXN0ZXIgYmluIGNvbXB1dGF0aW9uICYgc2xpZ2h0bHkgZGlmZmVyZW50IGJpbm5pbmcKKyAgICAgICogbWVyZ2VkIGFsbCBjb25zb2xpZGF0aW9ucyB0byBvbmUgcGFydCBvZiBtYWxsb2MgcHJvcGVyCisJIChlbGltaW5hdGluZyBvbGQgbWFsbG9jX2ZpbmRfc3BhY2UgJiBtYWxsb2NfY2xlYW5fYmluKQorICAgICAgKiBTY2FuIDIgcmV0dXJucyBjaHVua3MgKG5vdCBqdXN0IDEpCisgICAgICAqIFByb3BhZ2F0ZSBmYWlsdXJlIGluIHJlYWxsb2MgaWYgbWFsbG9jIHJldHVybnMgMAorICAgICAgKiBBZGQgc3R1ZmYgdG8gYWxsb3cgY29tcGlsYXRpb24gb24gbm9uLUFOU0kgY29tcGlsZXJzCisJICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCisKKyAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCisgICAgICAqIHJlbW92ZWQgcG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuaworICAgICAgKiByZW1vdmVkIGRlcGVuZGVuY3kgb24gZ2V0cGFnZXNpemUuaAorICAgICAgKiBtaXNjIGNvc21ldGljcyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCisgICAgICAqIGFudGljb3NtZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNzCisgICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCisJICB3aXRoIGdjYyAmIG5hdGl2ZSBjYyAoaHAsIGRlYyBvbmx5KSBhbGxvd2luZworCSAgRGV0bGVmcyAmIFpvcm4gY29tcGFyaXNvbiBzdHVkeSAoaW4gU0lHUExBTiBOb3RpY2VzLikKKworICAgIFRyaWFsIHZlcnNpb24gRnJpIEF1ZyAyOCAxMzoxNDoyOSAxOTkyICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKKyAgICAgICogQmFzZWQgbG9vc2VseSBvbiBsaWJnKystMS4yWCBtYWxsb2MuIChJdCByZXRhaW5zIHNvbWUgb2YgdGhlIG92ZXJhbGwKKwkgc3RydWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAgYnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQorCisqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYyBiL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMzFjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmMKQEAgLTAsMCArMSw5NTMgQEAKKy8qIEFsdGVybmF0aXZlIG1hbGxvYyBpbXBsZW1lbnRhdGlvbiBmb3IgbXVsdGlwbGUgdGhyZWFkcyB3aXRob3V0Citsb2NrIGNvbnRlbnRpb24gYmFzZWQgb24gZGxtYWxsb2MuIChDKSAyMDA1LTIwMDYgTmlhbGwgRG91Z2xhcworCitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyovCisKKyNpZmRlZiBfTVNDX1ZFUgorLyogRW5hYmxlIGZ1bGwgYWxpYXNpbmcgb24gTVNWQyAqLworLyojcHJhZ21hIG9wdGltaXplKCJhIiwgb24pKi8KKyNlbmRpZgorCisvKiNkZWZpbmUgRlVMTFNBTklUWUNIRUNLUyovCisKKyNpbmNsdWRlICJuZWRtYWxsb2MuaCIKKyNpZiBkZWZpbmVkKFdJTjMyKQorICNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorI2RlZmluZSBNU1BBQ0VTIDEKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDEKKyNpZm5kZWYgVVNFX0xPQ0tTCisgI2RlZmluZSBVU0VfTE9DS1MgMQorI2VuZGlmCisjZGVmaW5lIEZPT1RFUlMgMSAgICAgICAgICAgLyogTmVlZCB0byBlbmFibGUgZm9vdGVycyBzbyBmcmVlcyBsb2NrIHRoZSByaWdodCBtc3BhY2UgKi8KKyN1bmRlZiBERUJVRwkJCQkvKiBkbG1hbGxvYyB3YW50cyBERUJVRyBlaXRoZXIgMCBvciAxICovCisjaWZkZWYgX0RFQlVHCisgI2RlZmluZSBERUJVRyAxCisjZWxzZQorICNkZWZpbmUgREVCVUcgMAorI2VuZGlmCisjaWZkZWYgTkRFQlVHICAgICAgICAgICAgICAgLyogRGlzYWJsZSBhc3NlcnQgY2hlY2tpbmcgb24gcmVsZWFzZSBidWlsZHMgKi8KKyAjdW5kZWYgREVCVUcKKyNlbmRpZgorLyogVGhlIGRlZmF1bHQgb2YgNjRLYiBtZWFucyB3ZSBzcGVuZCB0b28gbXVjaCB0aW1lIGtlcm5lbC1zaWRlICovCisjaWZuZGVmIERFRkFVTFRfR1JBTlVMQVJJVFkKKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoMSoxMDI0KjEwMjQpCisjZW5kaWYKKy8qI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAwKi8KKworCisvKiNkZWZpbmUgRk9SQ0VJTkxJTkUqLworI2luY2x1ZGUgIm1hbGxvYy5jLmgiCisjaWZkZWYgTkRFQlVHICAgICAgICAgICAgICAgLyogRGlzYWJsZSBhc3NlcnQgY2hlY2tpbmcgb24gcmVsZWFzZSBidWlsZHMgKi8KKyAjdW5kZWYgREVCVUcKKyNlbmRpZgorCisvKiBUaGUgbWF4aW11bSBjb25jdXJyZW50IHRocmVhZHMgaW4gYSBwb29sIHBvc3NpYmxlICovCisjaWZuZGVmIE1BWFRIUkVBRFNJTlBPT0wKKyNkZWZpbmUgTUFYVEhSRUFEU0lOUE9PTCAxNgorI2VuZGlmCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkY2FjaGVzIHdoaWNoIGNhbiBiZSBhbGxvY2F0ZWQgKi8KKyNpZm5kZWYgVEhSRUFEQ0FDSEVNQVhDQUNIRVMKKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhDQUNIRVMgMjU2CisjZW5kaWYKKy8qIFRoZSBtYXhpbXVtIHNpemUgdG8gYmUgYWxsb2NhdGVkIGZyb20gdGhlIHRocmVhZCBjYWNoZSAqLworI2lmbmRlZiBUSFJFQURDQUNIRU1BWAorI2RlZmluZSBUSFJFQURDQUNIRU1BWCA4MTkyCisjZW5kaWYKKyNpZiAwCisvKiBUaGUgbnVtYmVyIG9mIGNhY2hlIGVudHJpZXMgZm9yIGZpbmVyIGdyYWluZWQgYmlucy4gVGhpcyBpcyAodG9wYml0cG9zKFRIUkVBRENBQ0hFTUFYKS00KSoyICovCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYQklOUyAoKDEzLTQpKjIpCisjZWxzZQorLyogVGhlIG51bWJlciBvZiBjYWNoZSBlbnRyaWVzLiBUaGlzIGlzICh0b3BiaXRwb3MoVEhSRUFEQ0FDSEVNQVgpLTQpICovCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYQklOUyAoMTMtNCkKKyNlbmRpZgorLyogUG9pbnQgYXQgd2hpY2ggdGhlIGZyZWUgc3BhY2UgaW4gYSB0aHJlYWQgY2FjaGUgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgKi8KKyNpZm5kZWYgVEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UKKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UgKDUxMioxMDI0KQorI2VuZGlmCisKKworI2lmZGVmIFdJTjMyCisgI2RlZmluZSBUTFNWQVIJCQlEV09SRAorICNkZWZpbmUgVExTQUxMT0MoaykJKCooayk9VGxzQWxsb2MoKSwgVExTX09VVF9PRl9JTkRFWEVTPT0qKGspKQorICNkZWZpbmUgVExTRlJFRShrKQkJKCFUbHNGcmVlKGspKQorICNkZWZpbmUgVExTR0VUKGspCQlUbHNHZXRWYWx1ZShrKQorICNkZWZpbmUgVExTU0VUKGssIGEpCSghVGxzU2V0VmFsdWUoaywgYSkpCisgI2lmZGVmIERFQlVHCitzdGF0aWMgTFBWT0lEIENoa2VkVGxzR2V0VmFsdWUoRFdPUkQgaWR4KQoreworCUxQVk9JRCByZXQ9VGxzR2V0VmFsdWUoaWR4KTsKKwlhc3NlcnQoU19PSz09R2V0TGFzdEVycm9yKCkpOworCXJldHVybiByZXQ7Cit9CisgICN1bmRlZiBUTFNHRVQKKyAgI2RlZmluZSBUTFNHRVQoaykgQ2hrZWRUbHNHZXRWYWx1ZShrKQorICNlbmRpZgorI2Vsc2UKKyAjZGVmaW5lIFRMU1ZBUgkJCXB0aHJlYWRfa2V5X3QKKyAjZGVmaW5lIFRMU0FMTE9DKGspCXB0aHJlYWRfa2V5X2NyZWF0ZShrLCAwKQorICNkZWZpbmUgVExTRlJFRShrKQkJcHRocmVhZF9rZXlfZGVsZXRlKGspCisgI2RlZmluZSBUTFNHRVQoaykJCXB0aHJlYWRfZ2V0c3BlY2lmaWMoaykKKyAjZGVmaW5lIFRMU1NFVChrLCBhKQlwdGhyZWFkX3NldHNwZWNpZmljKGssIGEpCisjZW5kaWYKKworI2lmIDAKKy8qIE9ubHkgZW5hYmxlIGlmIHRlc3Rpbmcgd2l0aCB2YWxncmluZC4gQ2F1c2VzIG1pc29wZXJhdGlvbiAqLworI2RlZmluZSBtc3BhY2VfbWFsbG9jKHAsIHMpIG1hbGxvYyhzKQorI2RlZmluZSBtc3BhY2VfcmVhbGxvYyhwLCBtLCBzKSByZWFsbG9jKG0sIHMpCisjZGVmaW5lIG1zcGFjZV9jYWxsb2MocCwgbiwgcykgY2FsbG9jKG4sIHMpCisjZGVmaW5lIG1zcGFjZV9mcmVlKHAsIG0pIGZyZWUobSkKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2lmICFkZWZpbmVkKE5PX05FRF9OQU1FU1BBQ0UpCituYW1lc3BhY2UgbmVkYWxsb2MgeworI2Vsc2UKK2V4dGVybiAiQyIgeworI2VuZGlmCisjZW5kaWYKKworc2l6ZV90IG5lZGJsa3NpemUodm9pZCAqbWVtKSBUSFJPV1NQRUMKK3sKKyNpZiAwCisJLyogT25seSBlbmFibGUgaWYgdGVzdGluZyB3aXRoIHZhbGdyaW5kLiBDYXVzZXMgbWlzb3BlcmF0aW9uICovCisJcmV0dXJuIFRIUkVBRENBQ0hFTUFYOworI2Vsc2UKKwlpZihtZW0pCisJeworCQltY2h1bmtwdHIgcD1tZW0yY2h1bmsobWVtKTsKKwkJYXNzZXJ0KGNpbnVzZShwKSk7CS8qIElmIHRoaXMgZmFpbHMsIHNvbWVvbmUgdHJpZWQgdG8gZnJlZSBhIGJsb2NrIHR3aWNlICovCisJCWlmKGNpbnVzZShwKSkKKwkJCXJldHVybiBjaHVua3NpemUocCktb3ZlcmhlYWRfZm9yKHApOworCX0KKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIG5lZHNldHZhbHVlKHZvaWQgKnYpIFRIUk9XU1BFQwkJCQkJeyBuZWRwc2V0dmFsdWUoMCwgdik7IH0KK3ZvaWQgKiBuZWRtYWxsb2Moc2l6ZV90IHNpemUpIFRIUk9XU1BFQwkJCQl7IHJldHVybiBuZWRwbWFsbG9jKDAsIHNpemUpOyB9Cit2b2lkICogbmVkY2FsbG9jKHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwY2FsbG9jKDAsIG5vLCBzaXplKTsgfQordm9pZCAqIG5lZHJlYWxsb2Modm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHByZWFsbG9jKDAsIG1lbSwgc2l6ZSk7IH0KK3ZvaWQgICBuZWRmcmVlKHZvaWQgKm1lbSkgVEhST1dTUEVDCQkJCQl7IG5lZHBmcmVlKDAsIG1lbSk7IH0KK3ZvaWQgKiBuZWRtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQyB7IHJldHVybiBuZWRwbWVtYWxpZ24oMCwgYWxpZ25tZW50LCBieXRlcyk7IH0KKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBuZWRtYWxsaW5mbyh2b2lkKSBUSFJPV1NQRUMJCQl7IHJldHVybiBuZWRwbWFsbGluZm8oMCk7IH0KKyNlbmRpZgoraW50ICAgIG5lZG1hbGxvcHQoaW50IHBhcm5vLCBpbnQgdmFsdWUpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwbWFsbG9wdCgwLCBwYXJubywgdmFsdWUpOyB9CitpbnQgICAgbmVkbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgVEhST1dTUEVDCQkJeyByZXR1cm4gbmVkcG1hbGxvY190cmltKDAsIHBhZCk7IH0KK3ZvaWQgICBuZWRtYWxsb2Nfc3RhdHModm9pZCkgVEhST1dTUEVDCQkJCQl7IG5lZHBtYWxsb2Nfc3RhdHMoMCk7IH0KK3NpemVfdCBuZWRtYWxsb2NfZm9vdHByaW50KHZvaWQpIFRIUk9XU1BFQwkJCQl7IHJldHVybiBuZWRwbWFsbG9jX2Zvb3RwcmludCgwKTsgfQordm9pZCAqKm5lZGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QgZWxlbXNubywgc2l6ZV90IGVsZW1zaXplLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcGluZGVwZW5kZW50X2NhbGxvYygwLCBlbGVtc25vLCBlbGVtc2l6ZSwgY2h1bmtzKTsgfQordm9pZCAqKm5lZGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBpbmRlcGVuZGVudF9jb21hbGxvYygwLCBlbGVtcywgc2l6ZXMsIGNodW5rcyk7IH0KKworc3RydWN0IHRocmVhZGNhY2hlYmxrX3Q7Cit0eXBlZGVmIHN0cnVjdCB0aHJlYWRjYWNoZWJsa190IHRocmVhZGNhY2hlYmxrOworc3RydWN0IHRocmVhZGNhY2hlYmxrX3QKK3sJLyogS2VlcCBsZXNzIHRoYW4gMTYgYnl0ZXMgb24gMzIgYml0IHN5c3RlbXMgYW5kIDMyIGJ5dGVzIG9uIDY0IGJpdCBzeXN0ZW1zICovCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXVuc2lnbmVkIGludCBtYWdpYzsKKyNlbmRpZgorCXVuc2lnbmVkIGludCBsYXN0VXNlZCwgc2l6ZTsKKwl0aHJlYWRjYWNoZWJsayAqbmV4dCwgKnByZXY7Cit9OwordHlwZWRlZiBzdHJ1Y3QgdGhyZWFkY2FjaGVfdAoreworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl1bnNpZ25lZCBpbnQgbWFnaWMxOworI2VuZGlmCisJaW50IG15bXNwYWNlOwkJCQkJCS8qIExhc3QgbXNwYWNlIGVudHJ5IHRoaXMgdGhyZWFkIHVzZWQgKi8KKwlsb25nIHRocmVhZGlkOworCXVuc2lnbmVkIGludCBtYWxsb2NzLCBmcmVlcywgc3VjY2Vzc2VzOworCXNpemVfdCBmcmVlSW5DYWNoZTsJCQkJCS8qIEhvdyBtdWNoIGZyZWUgc3BhY2UgaXMgc3RvcmVkIGluIHRoaXMgY2FjaGUgKi8KKwl0aHJlYWRjYWNoZWJsayAqYmluc1soVEhSRUFEQ0FDSEVNQVhCSU5TKzEpKjJdOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl1bnNpZ25lZCBpbnQgbWFnaWMyOworI2VuZGlmCit9IHRocmVhZGNhY2hlOworc3RydWN0IG5lZHBvb2xfdAoreworCU1MT0NLX1QgbXV0ZXg7CisJdm9pZCAqdXNlcnZhbHVlOworCWludCB0aHJlYWRzOwkJCQkJCS8qIE1heCBlbnRyaWVzIGluIG0gdG8gdXNlICovCisJdGhyZWFkY2FjaGUgKmNhY2hlc1tUSFJFQURDQUNIRU1BWENBQ0hFU107CisJVExTVkFSIG15Y2FjaGU7CQkJCQkJLyogVGhyZWFkIGNhY2hlIGZvciB0aGlzIHRocmVhZC4gMCBmb3IgdW5zZXQsIG5lZ2F0aXZlIGZvciB1c2UgbXNwYWNlLTEgZGlyZWN0bHksIG90aGVyd2lzZSBpcyBjYWNoZS0xICovCisJbXN0YXRlIG1bTUFYVEhSRUFEU0lOUE9PTCsxXTsJCS8qIG1zcGFjZSBlbnRyaWVzIGZvciB0aGlzIHBvb2wgKi8KK307CitzdGF0aWMgbmVkcG9vbCBzeXNwb29sOworCitzdGF0aWMgRk9SQ0VJTkxJTkUgdW5zaWduZWQgaW50IHNpemUyYmluaWR4KHNpemVfdCBfc2l6ZSkgVEhST1dTUEVDCit7CS8qIDg9MTAwMAkxNj0xMDAwMAkyMD0xMDEwMAkyND0xMTAwMAkzMj0xMDAwMDAJNDg9MTEwMDAwCTQwOTY9MTAwMDAwMDAwMDAwMCAqLworCXVuc2lnbmVkIGludCB0b3BiaXQsIHNpemU9KHVuc2lnbmVkIGludCkoX3NpemU+PjQpOworCS8qIDE2PTEJCTIwPTEJMjQ9MQkzMj0xMAk0OD0xMQk2ND0xMDAJOTY9MTEwCTEyOD0xMDAwCTQwOTY9MTAwMDAwMDAwICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorCXRvcGJpdCA9IHNpemVvZihzaXplKSpfX0NIQVJfQklUX18gLSAxIC0gX19idWlsdGluX2NseihzaXplKTsKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisJeworCSAgICB1bnNpZ25lZCBsb25nIGJzclRvcEJpdDsKKworCSAgICBfQml0U2NhblJldmVyc2UoJmJzclRvcEJpdCwgc2l6ZSk7CisKKwkgICAgdG9wYml0ID0gYnNyVG9wQml0OworCX0KKyNlbHNlCisjaWYgMAorCXVuaW9uIHsKKwkJdW5zaWduZWQgYXNJbnRbMl07CisJCWRvdWJsZSBhc0RvdWJsZTsKKwl9OworCWludCBuOworCisJYXNEb3VibGUgPSAoZG91YmxlKXNpemUgKyAwLjU7CisJdG9wYml0ID0gKGFzSW50WyFGT1hfQklHRU5ESUFOXSA+PiAyMCkgLSAxMDIzOworI2Vsc2UKKwl7CisJCXVuc2lnbmVkIGludCB4PXNpemU7CisJCXggPSB4IHwgKHggPj4gMSk7CisJCXggPSB4IHwgKHggPj4gMik7CisJCXggPSB4IHwgKHggPj4gNCk7CisJCXggPSB4IHwgKHggPj4gOCk7CisJCXggPSB4IHwgKHggPj4xNik7CisJCXggPSB+eDsKKwkJeCA9IHggLSAoKHggPj4gMSkgJiAweDU1NTU1NTU1KTsKKwkJeCA9ICh4ICYgMHgzMzMzMzMzMykgKyAoKHggPj4gMikgJiAweDMzMzMzMzMzKTsKKwkJeCA9ICh4ICsgKHggPj4gNCkpICYgMHgwRjBGMEYwRjsKKwkJeCA9IHggKyAoeCA8PCA4KTsKKwkJeCA9IHggKyAoeCA8PCAxNik7CisJCXRvcGJpdD0zMSAtICh4ID4+IDI0KTsKKwl9CisjZW5kaWYKKyNlbmRpZgorCXJldHVybiB0b3BiaXQ7Cit9CisKKworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKK3N0YXRpYyB2b2lkIHRjc2FuaXR5Y2hlY2sodGhyZWFkY2FjaGVibGsgKipwdHIpIFRIUk9XU1BFQworeworCWFzc2VydCgocHRyWzBdICYmIHB0clsxXSkgfHwgKCFwdHJbMF0gJiYgIXB0clsxXSkpOworCWlmKHB0clswXSAmJiBwdHJbMV0pCisJeworCQlhc3NlcnQobmVkYmxrc2l6ZShwdHJbMF0pPj1zaXplb2YodGhyZWFkY2FjaGVibGspKTsKKwkJYXNzZXJ0KG5lZGJsa3NpemUocHRyWzFdKT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSk7CisJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PXB0clswXS0+bWFnaWMpOworCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT1wdHJbMV0tPm1hZ2ljKTsKKwkJYXNzZXJ0KCFwdHJbMF0tPnByZXYpOworCQlhc3NlcnQoIXB0clsxXS0+bmV4dCk7CisJCWlmKHB0clswXT09cHRyWzFdKQorCQl7CisJCQlhc3NlcnQoIXB0clswXS0+bmV4dCk7CisJCQlhc3NlcnQoIXB0clsxXS0+cHJldik7CisJCX0KKwl9Cit9CitzdGF0aWMgdm9pZCB0Y2Z1bGxzYW5pdHljaGVjayh0aHJlYWRjYWNoZSAqdGMpIFRIUk9XU1BFQworeworCXRocmVhZGNhY2hlYmxrICoqdGNicHRyPXRjLT5iaW5zOworCWludCBuOworCWZvcihuPTA7IG48PVRIUkVBRENBQ0hFTUFYQklOUzsgbisrLCB0Y2JwdHIrPTIpCisJeworCQl0aHJlYWRjYWNoZWJsayAqYiwgKm9iPTA7CisJCXRjc2FuaXR5Y2hlY2sodGNicHRyKTsKKwkJZm9yKGI9dGNicHRyWzBdOyBiOyBvYj1iLCBiPWItPm5leHQpCisJCXsKKwkJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PWItPm1hZ2ljKTsKKwkJCWFzc2VydCghb2IgfHwgb2ItPm5leHQ9PWIpOworCQkJYXNzZXJ0KCFvYiB8fCBiLT5wcmV2PT1vYik7CisJCX0KKwl9Cit9CisjZW5kaWYKKworc3RhdGljIE5PSU5MSU5FIHZvaWQgUmVtb3ZlQ2FjaGVFbnRyaWVzKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgdW5zaWduZWQgaW50IGFnZSkgVEhST1dTUEVDCit7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCWlmKHRjLT5mcmVlSW5DYWNoZSkKKwl7CisJCXRocmVhZGNhY2hlYmxrICoqdGNicHRyPXRjLT5iaW5zOworCQlpbnQgbjsKKwkJZm9yKG49MDsgbjw9VEhSRUFEQ0FDSEVNQVhCSU5TOyBuKyssIHRjYnB0cis9MikKKwkJeworCQkJdGhyZWFkY2FjaGVibGsgKip0Y2I9dGNicHRyKzE7CQkvKiBjb21lIGZyb20gb2xkZXN0IGVuZCBvZiBsaXN0ICovCisJCQkvKnRjc2FuaXR5Y2hlY2sodGNicHRyKTsqLworCQkJZm9yKDsgKnRjYiAmJiB0Yy0+ZnJlZXMtKCp0Y2IpLT5sYXN0VXNlZD49YWdlOyApCisJCQl7CisJCQkJdGhyZWFkY2FjaGVibGsgKmY9KnRjYjsKKwkJCQlzaXplX3QgYmxrc2l6ZT1mLT5zaXplOyAvKm5lZGJsa3NpemUoZik7Ki8KKwkJCQlhc3NlcnQoYmxrc2l6ZTw9bmVkYmxrc2l6ZShmKSk7CisJCQkJYXNzZXJ0KGJsa3NpemUpOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwkJCQlhc3NlcnQoKih1bnNpZ25lZCBpbnQgKikgIk5FRE4iPT0oKnRjYiktPm1hZ2ljKTsKKyNlbmRpZgorCQkJCSp0Y2I9KCp0Y2IpLT5wcmV2OworCQkJCWlmKCp0Y2IpCisJCQkJCSgqdGNiKS0+bmV4dD0wOworCQkJCWVsc2UKKwkJCQkJKnRjYnB0cj0wOworCQkJCXRjLT5mcmVlSW5DYWNoZS09Ymxrc2l6ZTsKKwkJCQlhc3NlcnQoKGxvbmcpIHRjLT5mcmVlSW5DYWNoZT49MCk7CisJCQkJbXNwYWNlX2ZyZWUoMCwgZik7CisJCQkJLyp0Y3Nhbml0eWNoZWNrKHRjYnB0cik7Ki8KKwkJCX0KKwkJfQorCX0KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCit9CitzdGF0aWMgdm9pZCBEZXN0cm95Q2FjaGVzKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWlmKHAtPmNhY2hlcykKKwl7CisJCXRocmVhZGNhY2hlICp0YzsKKwkJaW50IG47CisJCWZvcihuPTA7IG48VEhSRUFEQ0FDSEVNQVhDQUNIRVM7IG4rKykKKwkJeworCQkJaWYoKHRjPXAtPmNhY2hlc1tuXSkpCisJCQl7CisJCQkJdGMtPmZyZWVzKys7CisJCQkJUmVtb3ZlQ2FjaGVFbnRyaWVzKHAsIHRjLCAwKTsKKwkJCQlhc3NlcnQoIXRjLT5mcmVlSW5DYWNoZSk7CisJCQkJdGMtPm15bXNwYWNlPS0xOworCQkJCXRjLT50aHJlYWRpZD0wOworCQkJCW1zcGFjZV9mcmVlKDAsIHRjKTsKKwkJCQlwLT5jYWNoZXNbbl09MDsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIE5PSU5MSU5FIHRocmVhZGNhY2hlICpBbGxvY0NhY2hlKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCXRocmVhZGNhY2hlICp0Yz0wOworCWludCBuLCBlbmQ7CisJQUNRVUlSRV9MT0NLKCZwLT5tdXRleCk7CisJZm9yKG49MDsgbjxUSFJFQURDQUNIRU1BWENBQ0hFUyAmJiBwLT5jYWNoZXNbbl07IG4rKyk7CisJaWYoVEhSRUFEQ0FDSEVNQVhDQUNIRVM9PW4pCisJewkvKiBMaXN0IGV4aGF1c3RlZCwgc28gZGlzYWJsZSBmb3IgdGhpcyB0aHJlYWQgKi8KKwkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwl0Yz1wLT5jYWNoZXNbbl09KHRocmVhZGNhY2hlICopIG1zcGFjZV9jYWxsb2MocC0+bVswXSwgMSwgc2l6ZW9mKHRocmVhZGNhY2hlKSk7CisJaWYoIXRjKQorCXsKKwkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGMtPm1hZ2ljMT0qKHVuc2lnbmVkIGludCAqKSJORURNQUxDMSI7CisJdGMtPm1hZ2ljMj0qKHVuc2lnbmVkIGludCAqKSJORURNQUxDMiI7CisjZW5kaWYKKwl0Yy0+dGhyZWFkaWQ9KGxvbmcpKHNpemVfdClDVVJSRU5UX1RIUkVBRDsKKwlmb3IoZW5kPTA7IHAtPm1bZW5kXTsgZW5kKyspOworCXRjLT5teW1zcGFjZT10Yy0+dGhyZWFkaWQgJSBlbmQ7CisJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopKHNpemVfdCkobisxKSkpIGFib3J0KCk7CisJcmV0dXJuIHRjOworfQorCitzdGF0aWMgdm9pZCAqdGhyZWFkY2FjaGVfbWFsbG9jKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0Yywgc2l6ZV90ICpzaXplKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ9MDsKKwl1bnNpZ25lZCBpbnQgYmVzdHNpemU7CisJdW5zaWduZWQgaW50IGlkeD1zaXplMmJpbmlkeCgqc2l6ZSk7CisJc2l6ZV90IGJsa3NpemU9MDsKKwl0aHJlYWRjYWNoZWJsayAqYmxrLCAqKmJpbnNwdHI7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCS8qIENhbGN1bGF0ZSBiZXN0IGZpdCBiaW4gc2l6ZSAqLworCWJlc3RzaXplPTE8PChpZHgrNCk7CisjaWYgMAorCS8qIEZpbmVyIGdyYWluZWQgYmluIGZpdCAqLworCWlkeDw8PTE7CisJaWYoKnNpemU+YmVzdHNpemUpCisJeworCQlpZHgrKzsKKwkJYmVzdHNpemUrPWJlc3RzaXplPj4xOworCX0KKwlpZigqc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCWlkeCsrOworCQliZXN0c2l6ZT0xPDwoNCsoaWR4Pj4xKSk7CisJfQorI2Vsc2UKKwlpZigqc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCWlkeCsrOworCQliZXN0c2l6ZTw8PTE7CisJfQorI2VuZGlmCisJYXNzZXJ0KGJlc3RzaXplPj0qc2l6ZSk7CisJaWYoKnNpemU8YmVzdHNpemUpICpzaXplPWJlc3RzaXplOworCWFzc2VydCgqc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpOworCWFzc2VydChpZHg8PVRIUkVBRENBQ0hFTUFYQklOUyk7CisJYmluc3B0cj0mdGMtPmJpbnNbaWR4KjJdOworCS8qIFRyeSB0byBtYXRjaCBjbG9zZSwgYnV0IG1vdmUgdXAgYSBiaW4gaWYgbmVjZXNzYXJ5ICovCisJYmxrPSpiaW5zcHRyOworCWlmKCFibGsgfHwgYmxrLT5zaXplPCpzaXplKQorCXsJLyogQnVtcCBpdCB1cCBhIGJpbiAqLworCQlpZihpZHg8VEhSRUFEQ0FDSEVNQVhCSU5TKQorCQl7CisJCQlpZHgrKzsKKwkJCWJpbnNwdHIrPTI7CisJCQlibGs9KmJpbnNwdHI7CisJCX0KKwl9CisJaWYoYmxrKQorCXsKKwkJYmxrc2l6ZT1ibGstPnNpemU7IC8qbmVkYmxrc2l6ZShibGspOyovCisJCWFzc2VydChuZWRibGtzaXplKGJsayk+PWJsa3NpemUpOworCQlhc3NlcnQoYmxrc2l6ZT49KnNpemUpOworCQlpZihibGstPm5leHQpCisJCQlibGstPm5leHQtPnByZXY9MDsKKwkJKmJpbnNwdHI9YmxrLT5uZXh0OworCQlpZighKmJpbnNwdHIpCisJCQliaW5zcHRyWzFdPTA7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCQlibGstPm1hZ2ljPTA7CisjZW5kaWYKKwkJYXNzZXJ0KGJpbnNwdHJbMF0hPWJsayAmJiBiaW5zcHRyWzFdIT1ibGspOworCQlhc3NlcnQobmVkYmxrc2l6ZShibGspPj1zaXplb2YodGhyZWFkY2FjaGVibGspICYmIG5lZGJsa3NpemUoYmxrKTw9VEhSRUFEQ0FDSEVNQVgrQ0hVTktfT1ZFUkhFQUQpOworCQkvKnByaW50ZigibWFsbG9jOiAlcCwgJXAsICVwLCAlbHVcbiIsIHAsIHRjLCBibGssIChsb25nKSBzaXplKTsqLworCQlyZXQ9KHZvaWQgKikgYmxrOworCX0KKwkrK3RjLT5tYWxsb2NzOworCWlmKHJldCkKKwl7CisJCWFzc2VydChibGtzaXplPj0qc2l6ZSk7CisJCSsrdGMtPnN1Y2Nlc3NlczsKKwkJdGMtPmZyZWVJbkNhY2hlLT1ibGtzaXplOworCQlhc3NlcnQoKGxvbmcpIHRjLT5mcmVlSW5DYWNoZT49MCk7CisJfQorI2lmIGRlZmluZWQoREVCVUcpICYmIDAKKwlpZighKHRjLT5tYWxsb2NzICYgMHhmZmYpKQorCXsKKwkJcHJpbnRmKCIqKiogdGhyZWFkY2FjaGU9JXUsIG1hbGxvY3M9JXUgKCVmKSwgZnJlZT0ldSAoJWYpLCBmcmVlSW5DYWNoZT0ldVxuIiwgKHVuc2lnbmVkIGludCkgdGMtPnRocmVhZGlkLCB0Yy0+bWFsbG9jcywKKwkJCShmbG9hdCkgdGMtPnN1Y2Nlc3Nlcy90Yy0+bWFsbG9jcywgdGMtPmZyZWVzLCAoZmxvYXQpIHRjLT5zdWNjZXNzZXMvdGMtPmZyZWVzLCAodW5zaWduZWQgaW50KSB0Yy0+ZnJlZUluQ2FjaGUpOworCX0KKyNlbmRpZgorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIE5PSU5MSU5FIHZvaWQgUmVsZWFzZUZyZWVJbkNhY2hlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlKSBUSFJPV1NQRUMKK3sKKwl1bnNpZ25lZCBpbnQgYWdlPVRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFLzgxOTI7CisJLypBQ1FVSVJFX0xPQ0soJnAtPm1bbXltc3BhY2VdLT5tdXRleCk7Ki8KKwl3aGlsZShhZ2UgJiYgdGMtPmZyZWVJbkNhY2hlPj1USFJFQURDQUNIRU1BWEZSRUVTUEFDRSkKKwl7CisJCVJlbW92ZUNhY2hlRW50cmllcyhwLCB0YywgYWdlKTsKKwkJLypwcmludGYoIioqKiBSZW1vdmluZyBjYWNoZSBlbnRyaWVzIG9sZGVyIHRoYW4gJXUgKCV1KVxuIiwgYWdlLCAodW5zaWduZWQgaW50KSB0Yy0+ZnJlZUluQ2FjaGUpOyovCisJCWFnZT4+PTE7CisJfQorCS8qUkVMRUFTRV9MT0NLKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpOyovCit9CitzdGF0aWMgdm9pZCB0aHJlYWRjYWNoZV9mcmVlKG5lZHBvb2wgKnAsIHRocmVhZGNhY2hlICp0YywgaW50IG15bXNwYWNlLCB2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwl1bnNpZ25lZCBpbnQgYmVzdHNpemU7CisJdW5zaWduZWQgaW50IGlkeD1zaXplMmJpbmlkeChzaXplKTsKKwl0aHJlYWRjYWNoZWJsayAqKmJpbnNwdHIsICp0Y2s9KHRocmVhZGNhY2hlYmxrICopIG1lbTsKKwlhc3NlcnQoc2l6ZT49c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSAmJiBzaXplPD1USFJFQURDQUNIRU1BWCtDSFVOS19PVkVSSEVBRCk7CisjaWZkZWYgREVCVUcKKwl7CS8qIE1ha2Ugc3VyZSB0aGlzIGlzIGEgdmFsaWQgbWVtb3J5IGJsb2NrICovCisJICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworCSAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKwkgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKwkgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyNlbmRpZgorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKwkvKiBDYWxjdWxhdGUgYmVzdCBmaXQgYmluIHNpemUgKi8KKwliZXN0c2l6ZT0xPDwoaWR4KzQpOworI2lmIDAKKwkvKiBGaW5lciBncmFpbmVkIGJpbiBmaXQgKi8KKwlpZHg8PD0xOworCWlmKHNpemU+YmVzdHNpemUpCisJeworCQl1bnNpZ25lZCBpbnQgYmlnZ2VyYmVzdHNpemU9YmVzdHNpemUrYmVzdHNpemU8PDE7CisJCWlmKHNpemU+PWJpZ2dlcmJlc3RzaXplKQorCQl7CisJCQlpZHgrKzsKKwkJCWJlc3RzaXplPWJpZ2dlcmJlc3RzaXplOworCQl9CisJfQorI2VuZGlmCisJaWYoYmVzdHNpemUhPXNpemUpCS8qIGRsbWFsbG9jIGNhbiByb3VuZCB1cCwgc28gd2Ugcm91bmQgZG93biB0byBwcmVzZXJ2ZSBpbmRleGluZyAqLworCQlzaXplPWJlc3RzaXplOworCWJpbnNwdHI9JnRjLT5iaW5zW2lkeCoyXTsKKwlhc3NlcnQoaWR4PD1USFJFQURDQUNIRU1BWEJJTlMpOworCWlmKHRjaz09KmJpbnNwdHIpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIkF0dGVtcHQgdG8gZnJlZSBhbHJlYWR5IGZyZWVkIG1lbW9yeSBibG9jayAlcCAtIGFib3J0aW5nIVxuIiwgdGNrKTsKKwkJYWJvcnQoKTsKKwl9CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjay0+bWFnaWM9Kih1bnNpZ25lZCBpbnQgKikgIk5FRE4iOworI2VuZGlmCisJdGNrLT5sYXN0VXNlZD0rK3RjLT5mcmVlczsKKwl0Y2stPnNpemU9KHVuc2lnbmVkIGludCkgc2l6ZTsKKwl0Y2stPm5leHQ9KmJpbnNwdHI7CisJdGNrLT5wcmV2PTA7CisJaWYodGNrLT5uZXh0KQorCQl0Y2stPm5leHQtPnByZXY9dGNrOworCWVsc2UKKwkJYmluc3B0clsxXT10Y2s7CisJYXNzZXJ0KCEqYmluc3B0ciB8fCAoKmJpbnNwdHIpLT5zaXplPT10Y2stPnNpemUpOworCSpiaW5zcHRyPXRjazsKKwlhc3NlcnQodGNrPT10Yy0+Ymluc1tpZHgqMl0pOworCWFzc2VydCh0Yy0+Ymluc1tpZHgqMisxXT09dGNrIHx8IGJpbnNwdHJbMF0tPm5leHQtPnByZXY9PXRjayk7CisJLypwcmludGYoImZyZWU6ICVwLCAlcCwgJXAsICVsdVxuIiwgcCwgdGMsIG1lbSwgKGxvbmcpIHNpemUpOyovCisJdGMtPmZyZWVJbkNhY2hlKz1zaXplOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKKyNpZiAxCisJaWYodGMtPmZyZWVJbkNhY2hlPj1USFJFQURDQUNIRU1BWEZSRUVTUEFDRSkKKwkJUmVsZWFzZUZyZWVJbkNhY2hlKHAsIHRjLCBteW1zcGFjZSk7CisjZW5kaWYKK30KKworCisKKworc3RhdGljIE5PSU5MSU5FIGludCBJbml0UG9vbChuZWRwb29sICpwLCBzaXplX3QgY2FwYWNpdHksIGludCB0aHJlYWRzKSBUSFJPV1NQRUMKK3sJLyogdGhyZWFkcyBpcyAtMSBmb3Igc3lzdGVtIHBvb2wgKi8KKwllbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKwlBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworCWlmKHAtPnRocmVhZHMpIGdvdG8gZG9uZTsKKwlpZihJTklUSUFMX0xPQ0soJnAtPm11dGV4KSkgZ290byBlcnI7CisJaWYoVExTQUxMT0MoJnAtPm15Y2FjaGUpKSBnb3RvIGVycjsKKwlpZighKHAtPm1bMF09KG1zdGF0ZSkgY3JlYXRlX21zcGFjZShjYXBhY2l0eSwgMSkpKSBnb3RvIGVycjsKKwlwLT5tWzBdLT5leHRwPXA7CisJcC0+dGhyZWFkcz0odGhyZWFkczwxIHx8IHRocmVhZHM+TUFYVEhSRUFEU0lOUE9PTCkgPyBNQVhUSFJFQURTSU5QT09MIDogdGhyZWFkczsKK2RvbmU6CisJUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwlyZXR1cm4gMTsKK2VycjoKKwlpZih0aHJlYWRzPDApCisJCWFib3J0KCk7CQkJLyogSWYgeW91IGNhbid0IGFsbG9jYXRlIGZvciBzeXN0ZW0gcG9vbCwgd2UncmUgc2NyZXdlZCAqLworCURlc3Ryb3lDYWNoZXMocCk7CisJaWYocC0+bVswXSkKKwl7CisJCWRlc3Ryb3lfbXNwYWNlKHAtPm1bMF0pOworCQlwLT5tWzBdPTA7CisJfQorCWlmKHAtPm15Y2FjaGUpCisJeworCQlpZihUTFNGUkVFKHAtPm15Y2FjaGUpKSBhYm9ydCgpOworCQlwLT5teWNhY2hlPTA7CisJfQorCVJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgTk9JTkxJTkUgbXN0YXRlIEZpbmRNU3BhY2UobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgKmxhc3RVc2VkLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CS8qIEdldHMgY2FsbGVkIHdoZW4gdGhyZWFkJ3MgbGFzdCB1c2VkIG1zcGFjZSBpcyBpbiB1c2UuIFRoZSBzdHJhdGVneQorCWlzIHRvIHJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgbXNwYWNlcyBsb29raW5nIGZvciBhbgorCXVubG9ja2VkIG9uZSBhbmQgaWYgd2UgZmFpbCwgd2UgY3JlYXRlIGEgbmV3IG9uZSBzbyBsb25nIGFzIHdlIGRvbid0CisJZXhjZWVkIHAtPnRocmVhZHMgKi8KKwlpbnQgbiwgZW5kOworCWZvcihuPWVuZD0qbGFzdFVzZWQrMTsgcC0+bVtuXTsgZW5kPSsrbikKKwl7CisJCWlmKFRSWV9MT0NLKCZwLT5tW25dLT5tdXRleCkpIGdvdG8gZm91bmQ7CisJfQorCWZvcihuPTA7IG48Kmxhc3RVc2VkICYmIHAtPm1bbl07IG4rKykKKwl7CisJCWlmKFRSWV9MT0NLKCZwLT5tW25dLT5tdXRleCkpIGdvdG8gZm91bmQ7CisJfQorCWlmKGVuZDxwLT50aHJlYWRzKQorCXsKKwkJbXN0YXRlIHRlbXA7CisJCWlmKCEodGVtcD0obXN0YXRlKSBjcmVhdGVfbXNwYWNlKHNpemUsIDEpKSkKKwkJCWdvdG8gYmFkZXhpdDsKKwkJLyogTm93IHdlJ3JlIHJlYWR5IHRvIG1vZGlmeSB0aGUgbGlzdHMsIHdlIGxvY2sgKi8KKwkJQUNRVUlSRV9MT0NLKCZwLT5tdXRleCk7CisJCXdoaWxlKHAtPm1bZW5kXSAmJiBlbmQ8cC0+dGhyZWFkcykKKwkJCWVuZCsrOworCQlpZihlbmQ+PXAtPnRocmVhZHMpCisJCXsJLyogRHJhdCwgbXVzdCBkZXN0cm95IGl0IG5vdyAqLworCQkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCQlkZXN0cm95X21zcGFjZSgobXNwYWNlKSB0ZW1wKTsKKwkJCWdvdG8gYmFkZXhpdDsKKwkJfQorCQkvKiBXZSByZWFsbHkgd2FudCB0byBtYWtlIHN1cmUgdGhpcyBnb2VzIGludG8gbWVtb3J5IG5vdyBidXQgd2UKKwkJaGF2ZSB0byBiZSBjYXJlZnVsIG9mIGJyZWFraW5nIGFsaWFzaW5nIHJ1bGVzLCBzbyB3cml0ZSBpdCB0d2ljZSAqLworCQl7CisJCQl2b2xhdGlsZSBzdHJ1Y3QgbWFsbG9jX3N0YXRlICoqX209KHZvbGF0aWxlIHN0cnVjdCBtYWxsb2Nfc3RhdGUgKiopICZwLT5tW2VuZF07CisJCQkqX209KHAtPm1bZW5kXT10ZW1wKTsKKwkJfQorCQlBQ1FVSVJFX0xPQ0soJnAtPm1bZW5kXS0+bXV0ZXgpOworCQkvKnByaW50ZigiQ3JlYXRlZCBtc3BhY2UgaWR4ICVkXG4iLCBlbmQpOyovCisJCVJFTEVBU0VfTE9DSygmcC0+bXV0ZXgpOworCQluPWVuZDsKKwkJZ290byBmb3VuZDsKKwl9CisJLyogTGV0IGl0IGxvY2sgb24gdGhlIGxhc3Qgb25lIGl0IHVzZWQgKi8KK2JhZGV4aXQ6CisJQUNRVUlSRV9MT0NLKCZwLT5tWypsYXN0VXNlZF0tPm11dGV4KTsKKwlyZXR1cm4gcC0+bVsqbGFzdFVzZWRdOworZm91bmQ6CisJKmxhc3RVc2VkPW47CisJaWYodGMpCisJCXRjLT5teW1zcGFjZT1uOworCWVsc2UKKwl7CisJCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKShzaXplX3QpKC0obisxKSkpKSBhYm9ydCgpOworCX0KKwlyZXR1cm4gcC0+bVtuXTsKK30KKworbmVkcG9vbCAqbmVkY3JlYXRlcG9vbChzaXplX3QgY2FwYWNpdHksIGludCB0aHJlYWRzKSBUSFJPV1NQRUMKK3sKKwluZWRwb29sICpyZXQ7CisJaWYoIShyZXQ9KG5lZHBvb2wgKikgbmVkcGNhbGxvYygwLCAxLCBzaXplb2YobmVkcG9vbCkpKSkgcmV0dXJuIDA7CisJaWYoIUluaXRQb29sKHJldCwgY2FwYWNpdHksIHRocmVhZHMpKQorCXsKKwkJbmVkcGZyZWUoMCwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkIG5lZGRlc3Ryb3lwb29sKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBuOworCUFDUVVJUkVfTE9DSygmcC0+bXV0ZXgpOworCURlc3Ryb3lDYWNoZXMocCk7CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJZGVzdHJveV9tc3BhY2UocC0+bVtuXSk7CisJCXAtPm1bbl09MDsKKwl9CisJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJaWYoVExTRlJFRShwLT5teWNhY2hlKSkgYWJvcnQoKTsKKwluZWRwZnJlZSgwLCBwKTsKK30KKwordm9pZCBuZWRwc2V0dmFsdWUobmVkcG9vbCAqcCwgdm9pZCAqdikgVEhST1dTUEVDCit7CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCXAtPnVzZXJ2YWx1ZT12OworfQordm9pZCAqbmVkZ2V0dmFsdWUobmVkcG9vbCAqKnAsIHZvaWQgKm1lbSkgVEhST1dTUEVDCit7CisJbmVkcG9vbCAqbnA9MDsKKwltY2h1bmtwdHIgbWNwPW1lbTJjaHVuayhtZW0pOworCW1zdGF0ZSBmbTsKKwlpZighKGlzX2FsaWduZWQoY2h1bmsybWVtKG1jcCkpKSAmJiBtY3AtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHJldHVybiAwOworCWlmKCFjaW51c2UobWNwKSkgcmV0dXJuIDA7CisJaWYoIW5leHRfcGludXNlKG1jcCkpIHJldHVybiAwOworCWlmKCFpc19tbWFwcGVkKG1jcCkgJiYgIXBpbnVzZShtY3ApKQorCXsKKwkJaWYobmV4dF9jaHVuayhwcmV2X2NodW5rKG1jcCkpIT1tY3ApIHJldHVybiAwOworCX0KKwlmbT1nZXRfbXN0YXRlX2ZvcihtY3ApOworCWlmKCFva19tYWdpYyhmbSkpIHJldHVybiAwOworCWlmKCFva19hZGRyZXNzKGZtLCBtY3ApKSByZXR1cm4gMDsKKwlpZighZm0tPmV4dHApIHJldHVybiAwOworCW5wPShuZWRwb29sICopIGZtLT5leHRwOworCWlmKHApICpwPW5wOworCXJldHVybiBucC0+dXNlcnZhbHVlOworfQorCit2b2lkIG5lZGRpc2FibGV0aHJlYWRjYWNoZShuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbXljYWNoZTsKKwlpZighcCkKKwl7CisJCXA9JnN5c3Bvb2w7CisJCWlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7CisJfQorCW15Y2FjaGU9KGludCkoc2l6ZV90KSBUTFNHRVQocC0+bXljYWNoZSk7CisJaWYoIW15Y2FjaGUpCisJewkvKiBTZXQgdG8gbXNwYWNlIDAgKi8KKwkJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopLTEpKSBhYm9ydCgpOworCX0KKwllbHNlIGlmKG15Y2FjaGU+MCkKKwl7CS8qIFNldCB0byBsYXN0IHVzZWQgbXNwYWNlICovCisJCXRocmVhZGNhY2hlICp0Yz1wLT5jYWNoZXNbbXljYWNoZS0xXTsKKyNpZiBkZWZpbmVkKERFQlVHKQorCQlwcmludGYoIlRocmVhZGNhY2hlIHV0aWxpc2F0aW9uOiAlbGYlJSBpbiBjYWNoZSB3aXRoICVsZiUlIGxvc3QgdG8gb3RoZXIgdGhyZWFkc1xuIiwKKwkJCTEwMC4wKnRjLT5zdWNjZXNzZXMvdGMtPm1hbGxvY3MsIDEwMC4wKigoZG91YmxlKSB0Yy0+bWFsbG9jcy10Yy0+ZnJlZXMpL3RjLT5tYWxsb2NzKTsKKyNlbmRpZgorCQlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKikoc2l6ZV90KSgtdGMtPm15bXNwYWNlKSkpIGFib3J0KCk7CisJCXRjLT5mcmVlcysrOworCQlSZW1vdmVDYWNoZUVudHJpZXMocCwgdGMsIDApOworCQlhc3NlcnQoIXRjLT5mcmVlSW5DYWNoZSk7CisJCXRjLT5teW1zcGFjZT0tMTsKKwkJdGMtPnRocmVhZGlkPTA7CisJCW1zcGFjZV9mcmVlKDAsIHAtPmNhY2hlc1tteWNhY2hlLTFdKTsKKwkJcC0+Y2FjaGVzW215Y2FjaGUtMV09MDsKKwl9Cit9CisKKyNkZWZpbmUgR0VUTVNQQUNFKG0scCx0YyxtcyxzLGFjdGlvbikgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtc3RhdGUgbSA9IEdldE1TcGFjZSgocCksKHRjKSwobXMpLChzKSk7ICAgIFwKKyAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSRUxFQVNFX0xPQ0soJm0tPm11dGV4KTsgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworc3RhdGljIEZPUkNFSU5MSU5FIG1zdGF0ZSBHZXRNU3BhY2UobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgbXltc3BhY2UsIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sJLyogUmV0dXJucyBhIGxvY2tlZCBhbmQgcmVhZHkgZm9yIHVzZSBtc3BhY2UgKi8KKwltc3RhdGUgbT1wLT5tW215bXNwYWNlXTsKKwlhc3NlcnQobSk7CisJaWYoIVRSWV9MT0NLKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpKSBtPUZpbmRNU3BhY2UocCwgdGMsICZteW1zcGFjZSwgc2l6ZSk7XAorCS8qYXNzZXJ0KElTX0xPQ0tFRCgmcC0+bVtteW1zcGFjZV0tPm11dGV4KSk7Ki8KKwlyZXR1cm4gbTsKK30KK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkIEdldFRocmVhZENhY2hlKG5lZHBvb2wgKipwLCB0aHJlYWRjYWNoZSAqKnRjLCBpbnQgKm15bXNwYWNlLCBzaXplX3QgKnNpemUpIFRIUk9XU1BFQworeworCWludCBteWNhY2hlOworCWlmKHNpemUgJiYgKnNpemU8c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSkgKnNpemU9c2l6ZW9mKHRocmVhZGNhY2hlYmxrKTsKKwlpZighKnApCisJeworCQkqcD0mc3lzcG9vbDsKKwkJaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsKKwl9CisJbXljYWNoZT0oaW50KShzaXplX3QpIFRMU0dFVCgoKnApLT5teWNhY2hlKTsKKwlpZihteWNhY2hlPjApCisJeworCQkqdGM9KCpwKS0+Y2FjaGVzW215Y2FjaGUtMV07CisJCSpteW1zcGFjZT0oKnRjKS0+bXltc3BhY2U7CisJfQorCWVsc2UgaWYoIW15Y2FjaGUpCisJeworCQkqdGM9QWxsb2NDYWNoZSgqcCk7CisJCWlmKCEqdGMpCisJCXsJLyogRGlzYWJsZSAqLworCQkJaWYoVExTU0VUKCgqcCktPm15Y2FjaGUsICh2b2lkICopLTEpKSBhYm9ydCgpOworCQkJKm15bXNwYWNlPTA7CisJCX0KKwkJZWxzZQorCQkJKm15bXNwYWNlPSgqdGMpLT5teW1zcGFjZTsKKwl9CisJZWxzZQorCXsKKwkJKnRjPTA7CisJCSpteW1zcGFjZT0tbXljYWNoZS0xOworCX0KKwlhc3NlcnQoKm15bXNwYWNlPj0wKTsKKwlhc3NlcnQoKGxvbmcpKHNpemVfdClDVVJSRU5UX1RIUkVBRD09KCp0YyktPnRocmVhZGlkKTsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJaWYoKnRjKQorCXsKKwkJaWYoKih1bnNpZ25lZCBpbnQgKikiTkVETUFMQzEiIT0oKnRjKS0+bWFnaWMxIHx8ICoodW5zaWduZWQgaW50ICopIk5FRE1BTEMyIiE9KCp0YyktPm1hZ2ljMikKKwkJeworCQkJYWJvcnQoKTsKKwkJfQorCX0KKyNlbmRpZgorfQorCit2b2lkICogbmVkcG1hbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CisJdm9pZCAqcmV0PTA7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZzaXplKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCWlmKHRjICYmIHNpemU8PVRIUkVBRENBQ0hFTUFYKQorCXsJLyogVXNlIHRoZSB0aHJlYWQgY2FjaGUgKi8KKwkJcmV0PXRocmVhZGNhY2hlX21hbGxvYyhwLCB0YywgJnNpemUpOworCX0KKyNlbmRpZgorCWlmKCFyZXQpCisJewkvKiBVc2UgdGhpcyB0aHJlYWQncyBtc3BhY2UgKi8KKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCBzaXplLAorCQkgIHJldD1tc3BhY2VfbWFsbG9jKG0sIHNpemUpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgKiBuZWRwY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXNpemVfdCByc2l6ZT1zaXplKm5vOworCXZvaWQgKnJldD0wOworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmcnNpemUpOworI2lmIFRIUkVBRENBQ0hFTUFYCisJaWYodGMgJiYgcnNpemU8PVRIUkVBRENBQ0hFTUFYKQorCXsJLyogVXNlIHRoZSB0aHJlYWQgY2FjaGUgKi8KKwkJaWYoKHJldD10aHJlYWRjYWNoZV9tYWxsb2MocCwgdGMsICZyc2l6ZSkpKQorCQkJbWVtc2V0KHJldCwgMCwgcnNpemUpOworCX0KKyNlbmRpZgorCWlmKCFyZXQpCisJewkvKiBVc2UgdGhpcyB0aHJlYWQncyBtc3BhY2UgKi8KKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCByc2l6ZSwKKwkJICByZXQ9bXNwYWNlX2NhbGxvYyhtLCAxLCByc2l6ZSkpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAqIG5lZHByZWFsbG9jKG5lZHBvb2wgKnAsIHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXZvaWQgKnJldD0wOworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJaWYoIW1lbSkgcmV0dXJuIG5lZHBtYWxsb2MocCwgc2l6ZSk7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmc2l6ZSk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwlpZih0YyAmJiBzaXplICYmIHNpemU8PVRIUkVBRENBQ0hFTUFYKQorCXsJLyogVXNlIHRoZSB0aHJlYWQgY2FjaGUgKi8KKwkJc2l6ZV90IG1lbXNpemU9bmVkYmxrc2l6ZShtZW0pOworCQlhc3NlcnQobWVtc2l6ZSk7CisJCWlmKChyZXQ9dGhyZWFkY2FjaGVfbWFsbG9jKHAsIHRjLCAmc2l6ZSkpKQorCQl7CisJCQltZW1jcHkocmV0LCBtZW0sIG1lbXNpemU8c2l6ZSA/IG1lbXNpemUgOiBzaXplKTsKKwkJCWlmKG1lbXNpemU8PVRIUkVBRENBQ0hFTUFYKQorCQkJCXRocmVhZGNhY2hlX2ZyZWUocCwgdGMsIG15bXNwYWNlLCBtZW0sIG1lbXNpemUpOworCQkJZWxzZQorCQkJCW1zcGFjZV9mcmVlKDAsIG1lbSk7CisJCX0KKwl9CisjZW5kaWYKKwlpZighcmV0KQorCXsJLyogUmVhbGxvY3MgYWx3YXlzIGhhcHBlbiBpbiB0aGUgbXNwYWNlIHRoZXkgaGFwcGVuZWQgaW4sIHNvIHNraXAKKwkJbG9ja2luZyB0aGUgcHJlZmVycmVkIG1zcGFjZSBmb3IgdGhpcyB0aHJlYWQgKi8KKwkJcmV0PW1zcGFjZV9yZWFsbG9jKDAsIG1lbSwgc2l6ZSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICAgbmVkcGZyZWUobmVkcG9vbCAqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUMKK3sJLyogRnJlZXMgYWx3YXlzIGhhcHBlbiBpbiB0aGUgbXNwYWNlIHRoZXkgaGFwcGVuZWQgaW4sIHNvIHNraXAKKwlsb2NraW5nIHRoZSBwcmVmZXJyZWQgbXNwYWNlIGZvciB0aGlzIHRocmVhZCAqLworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJc2l6ZV90IG1lbXNpemU7CisJYXNzZXJ0KG1lbSk7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAwKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCW1lbXNpemU9bmVkYmxrc2l6ZShtZW0pOworCWFzc2VydChtZW1zaXplKTsKKwlpZihtZW0gJiYgdGMgJiYgbWVtc2l6ZTw9KFRIUkVBRENBQ0hFTUFYK0NIVU5LX09WRVJIRUFEKSkKKwkJdGhyZWFkY2FjaGVfZnJlZShwLCB0YywgbXltc3BhY2UsIG1lbSwgbWVtc2l6ZSk7CisJZWxzZQorI2VuZGlmCisJCW1zcGFjZV9mcmVlKDAsIG1lbSk7Cit9Cit2b2lkICogbmVkcG1lbWFsaWduKG5lZHBvb2wgKnAsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgVEhST1dTUEVDCit7CisJdm9pZCAqcmV0OworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmYnl0ZXMpOworCXsJLyogVXNlIHRoaXMgdGhyZWFkJ3MgbXNwYWNlICovCisJR0VUTVNQQUNFKG0sIHAsIHRjLCBteW1zcGFjZSwgYnl0ZXMsCisJCSAgcmV0PW1zcGFjZV9tZW1hbGlnbihtLCBhbGlnbm1lbnQsIGJ5dGVzKSk7CisJfQorCXJldHVybiByZXQ7Cit9CisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gbmVkcG1hbGxpbmZvKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBuOworCXN0cnVjdCBtYWxsaW5mbyByZXQ9ezB9OworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQlzdHJ1Y3QgbWFsbGluZm8gdD1tc3BhY2VfbWFsbGluZm8ocC0+bVtuXSk7CisJCXJldC5hcmVuYSs9dC5hcmVuYTsKKwkJcmV0Lm9yZGJsa3MrPXQub3JkYmxrczsKKwkJcmV0LmhibGtoZCs9dC5oYmxraGQ7CisJCXJldC51c21ibGtzKz10LnVzbWJsa3M7CisJCXJldC51b3JkYmxrcys9dC51b3JkYmxrczsKKwkJcmV0LmZvcmRibGtzKz10LmZvcmRibGtzOworCQlyZXQua2VlcGNvc3QrPXQua2VlcGNvc3Q7CisJfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKK2ludCAgICBuZWRwbWFsbG9wdChuZWRwb29sICpwLCBpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDCit7CisJcmV0dXJuIG1zcGFjZV9tYWxsb3B0KHBhcm5vLCB2YWx1ZSk7Cit9CitpbnQgICAgbmVkcG1hbGxvY190cmltKG5lZHBvb2wgKnAsIHNpemVfdCBwYWQpIFRIUk9XU1BFQworeworCWludCBuLCByZXQ9MDsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJcmV0Kz1tc3BhY2VfdHJpbShwLT5tW25dLCBwYWQpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAgIG5lZHBtYWxsb2Nfc3RhdHMobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG47CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCW1zcGFjZV9tYWxsb2Nfc3RhdHMocC0+bVtuXSk7CisJfQorfQorc2l6ZV90IG5lZHBtYWxsb2NfZm9vdHByaW50KG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCXNpemVfdCByZXQ9MDsKKwlpbnQgbjsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJcmV0Kz1tc3BhY2VfZm9vdHByaW50KHAtPm1bbl0pOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCit7CisJdm9pZCAqKnJldDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJmVsZW1zaXplKTsKKyAgICBHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCBlbGVtc25vKmVsZW1zaXplLAorCSAgICAgIHJldD1tc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG0sIGVsZW1zbm8sIGVsZW1zaXplLCBjaHVua3MpKTsKKwlyZXR1cm4gcmV0OworfQordm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jb21hbGxvYyhuZWRwb29sICpwLCBzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQworeworCXZvaWQgKipyZXQ7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlzaXplX3QgaSwgKmFkanVzdGVkc2l6ZXM9KHNpemVfdCAqKSBhbGxvY2EoZWxlbXMqc2l6ZW9mKHNpemVfdCkpOworCWlmKCFhZGp1c3RlZHNpemVzKSByZXR1cm4gMDsKKwlmb3IoaT0wOyBpPGVsZW1zOyBpKyspCisJCWFkanVzdGVkc2l6ZXNbaV09c2l6ZXNbaV08c2l6ZW9mKHRocmVhZGNhY2hlYmxrKSA/IHNpemVvZih0aHJlYWRjYWNoZWJsaykgOiBzaXplc1tpXTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsIDApOworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIDAsCisJICAgICAgcmV0PW1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtLCBlbGVtcywgYWRqdXN0ZWRzaXplcywgY2h1bmtzKSk7CisJcmV0dXJuIHJldDsKK30KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmggYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjBlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKiBuZWRhbGxvYywgYW4gYWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQKK2xvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYyB2Mi44LjMuIChDKSAyMDA1IE5pYWxsIERvdWdsYXMKKworQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisqLworCisjaWZuZGVmIE5FRE1BTExPQ19ICisjZGVmaW5lIE5FRE1BTExPQ19ICisKKworLyogU2VlIG1hbGxvYy5jLmggZm9yIHdoYXQgZWFjaCBmdW5jdGlvbiBkb2VzLgorCitSRVBMQUNFX1NZU1RFTV9BTExPQ0FUT1IgY2F1c2VzIG5lZGFsbG9jJ3MgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBtYWxsb2MsCitmcmVlIGV0Yy4gaW5zdGVhZCBvZiBuZWRtYWxsb2MsIG5lZGZyZWUgZXRjLiBZb3UgbWF5IG9yIG1heSBub3Qgd2FudCB0aGlzLgorCitOT19ORURfTkFNRVNQQUNFIHByZXZlbnRzIHRoZSBmdW5jdGlvbnMgZnJvbSBiZWluZyBkZWZpbmVkIGluIHRoZSBuZWRhbGxvYworbmFtZXNwYWNlIHdoZW4gaW4gQysrICh1c2VzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIGluc3RlYWQpLgorCitFWFRTUEVDIGNhbiBiZSBkZWZpbmVkIHRvIGJlIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBvcgorX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIG9yIHdoYXRldmVyIHlvdSBsaWtlLiBJdCBkZWZhdWx0cwordG8gZXh0ZXJuLgorCitVU0VfTE9DS1MgY2FuIGJlIDIgaWYgeW91IHdhbnQgdG8gZGVmaW5lIHlvdXIgb3duIE1MT0NLX1QsIElOSVRJQUxfTE9DSywKK0FDUVVJUkVfTE9DSywgUkVMRUFTRV9MT0NLLCBUUllfTE9DSywgSVNfTE9DS0VEIGFuZCBOVUxMX0xPQ0tfSU5JVElBTElaRVIuCisKKyovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCisKKyNpZm5kZWYgRVhUU1BFQworICNkZWZpbmUgRVhUU1BFQyBleHRlcm4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTE0MDAKKyAjZGVmaW5lIE1BTExPQ0FUVFIgX19kZWNsc3BlYyhyZXN0cmljdCkKKyNlbmRpZgorI2lmZGVmIF9fR05VQ19fCisgI2RlZmluZSBNQUxMT0NBVFRSIF9fYXR0cmlidXRlX18gKChtYWxsb2MpKQorI2VuZGlmCisjaWZuZGVmIE1BTExPQ0FUVFIKKyAjZGVmaW5lIE1BTExPQ0FUVFIKKyNlbmRpZgorCisjaWZkZWYgUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SCisgI2RlZmluZSBuZWRtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyAjZGVmaW5lIG5lZGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworICNkZWZpbmUgbmVkcmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYworICNkZWZpbmUgbmVkZnJlZSAgICAgICAgICAgICAgICAgZnJlZQorICNkZWZpbmUgbmVkbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KKyAjZGVmaW5lIG5lZG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCisgI2RlZmluZSBuZWRtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisgI2RlZmluZSBuZWRtYWxsb2NfdHJpbSAgICAgICAgICBtYWxsb2NfdHJpbQorICNkZWZpbmUgbmVkbWFsbG9jX3N0YXRzICAgICAgICAgbWFsbG9jX3N0YXRzCisgI2RlZmluZSBuZWRtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisgI2RlZmluZSBuZWRpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyAjZGVmaW5lIG5lZGluZGVwZW5kZW50X2NvbWFsbG9jIGluZGVwZW5kZW50X2NvbWFsbG9jCisgI2lmZGVmIF9NU0NfVkVSCisgICNkZWZpbmUgbmVkYmxrc2l6ZSAgICAgICAgICAgICAgX21zaXplCisgI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBOT19NQUxMSU5GTworI2RlZmluZSBOT19NQUxMSU5GTyAwCisjZW5kaWYKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorICNpZiAhZGVmaW5lZChOT19ORURfTkFNRVNQQUNFKQorbmFtZXNwYWNlIG5lZGFsbG9jIHsKKyAjZWxzZQorZXh0ZXJuICJDIiB7CisgI2VuZGlmCisgI2RlZmluZSBUSFJPV1NQRUMgdGhyb3coKQorI2Vsc2UKKyAjZGVmaW5lIFRIUk9XU1BFQworI2VuZGlmCisKKy8qIFRoZXNlIGFyZSB0aGUgZ2xvYmFsIGZ1bmN0aW9ucyAqLworCisvKiBHZXRzIHRoZSB1c2FibGUgc2l6ZSBvZiBhbiBhbGxvY2F0ZWQgYmxvY2suIE5vdGUgdGhpcyB3aWxsIGFsd2F5cyBiZSBiaWdnZXIgdGhhbiB3aGF0IHdhcworYXNrZWQgZm9yIGR1ZSB0byByb3VuZGluZyBldGMuCisqLworRVhUU1BFQyBzaXplX3QgbmVkYmxrc2l6ZSh2b2lkICptZW0pIFRIUk9XU1BFQzsKKworRVhUU1BFQyB2b2lkIG5lZHNldHZhbHVlKHZvaWQgKnYpIFRIUk9XU1BFQzsKKworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRtYWxsb2Moc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkY2FsbG9jKHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcmVhbGxvYyh2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIHZvaWQgICBuZWRmcmVlKHZvaWQgKm1lbSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQzsKKyNpZiAhTk9fTUFMTElORk8KK0VYVFNQRUMgc3RydWN0IG1hbGxpbmZvIG5lZG1hbGxpbmZvKHZvaWQpIFRIUk9XU1BFQzsKKyNlbmRpZgorRVhUU1BFQyBpbnQgICAgbmVkbWFsbG9wdChpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDOworRVhUU1BFQyBpbnQgICAgbmVkbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkbWFsbG9jX3N0YXRzKHZvaWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgc2l6ZV90IG5lZG1hbGxvY19mb290cHJpbnQodm9pZCkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKKworLyogVGhlc2UgYXJlIHRoZSBwb29sIGZ1bmN0aW9ucyAqLworc3RydWN0IG5lZHBvb2xfdDsKK3R5cGVkZWYgc3RydWN0IG5lZHBvb2xfdCBuZWRwb29sOworCisvKiBDcmVhdGVzIGEgbWVtb3J5IHBvb2wgZm9yIHVzZSB3aXRoIHRoZSBuZWRwKiBmdW5jdGlvbnMgYmVsb3cuCitDYXBhY2l0eSBpcyBob3cgbXVjaCB0byBhbGxvY2F0ZSBpbW1lZGlhdGVseSAoaWYgeW91IGtub3cgeW91J2xsIGJlIGFsbG9jYXRpbmcgYSBsb3QKK29mIG1lbW9yeSB2ZXJ5IHNvb24pIHdoaWNoIHlvdSBjYW4gbGVhdmUgYXQgemVyby4gVGhyZWFkcyBzcGVjaWZpZXMgaG93IG1hbnkgdGhyZWFkcword2lsbCAqbm9ybWFsbHkqIGJlIGFjY2Vzc2luZyB0aGUgcG9vbCBjb25jdXJyZW50bHkuIFNldHRpbmcgdGhpcyB0byB6ZXJvIG1lYW5zIGl0CitleHRlbmRzIG9uIGRlbWFuZCwgYnV0IGJlIGNhcmVmdWwgb2YgdGhpcyBhcyBpdCBjYW4gcmFwaWRseSBjb25zdW1lIHN5c3RlbSByZXNvdXJjZXMKK3doZXJlIGJ1cnN0cyBvZiBjb25jdXJyZW50IHRocmVhZHMgdXNlIGEgcG9vbCBhdCBvbmNlLgorKi8KK0VYVFNQRUMgTUFMTE9DQVRUUiBuZWRwb29sICpuZWRjcmVhdGVwb29sKHNpemVfdCBjYXBhY2l0eSwgaW50IHRocmVhZHMpIFRIUk9XU1BFQzsKKworLyogRGVzdHJveXMgYSBtZW1vcnkgcG9vbCBwcmV2aW91c2x5IGNyZWF0ZWQgYnkgbmVkY3JlYXRlcG9vbCgpLgorKi8KK0VYVFNQRUMgdm9pZCBuZWRkZXN0cm95cG9vbChuZWRwb29sICpwKSBUSFJPV1NQRUM7CisKKy8qIFNldHMgYSB2YWx1ZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb29sLiBZb3UgY2FuIHJldHJpZXZlIHRoaXMgdmFsdWUgYnkgcGFzc2luZworYW55IG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgZnJvbSB0aGF0IHBvb2wuCisqLworRVhUU1BFQyB2b2lkIG5lZHBzZXR2YWx1ZShuZWRwb29sICpwLCB2b2lkICp2KSBUSFJPV1NQRUM7CisvKiBHZXRzIGEgcHJldmlvdXNseSBzZXQgdmFsdWUgdXNpbmcgbmVkcHNldHZhbHVlKCkgb3IgemVybyBpZiBtZW1vcnkgaXMgdW5rbm93bi4KK09wdGlvbmFsbHkgY2FuIGFsc28gcmV0cmlldmUgcG9vbC4KKyovCitFWFRTUEVDIHZvaWQgKm5lZGdldHZhbHVlKG5lZHBvb2wgKipwLCB2b2lkICptZW0pIFRIUk9XU1BFQzsKKworLyogRGlzYWJsZXMgdGhlIHRocmVhZCBjYWNoZSBmb3IgdGhlIGNhbGxpbmcgdGhyZWFkLCByZXR1cm5pbmcgYW55IGV4aXN0aW5nIGNhY2hlCitkYXRhIHRvIHRoZSBjZW50cmFsIHBvb2wuCisqLworRVhUU1BFQyB2b2lkIG5lZGRpc2FibGV0aHJlYWRjYWNoZShuZWRwb29sICpwKSBUSFJPV1NQRUM7CisKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcG1hbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRwY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcHJlYWxsb2MobmVkcG9vbCAqcCwgdm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkcGZyZWUobmVkcG9vbCAqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHBtZW1hbGlnbihuZWRwb29sICpwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQzsKKyNpZiAhTk9fTUFMTElORk8KK0VYVFNQRUMgc3RydWN0IG1hbGxpbmZvIG5lZHBtYWxsaW5mbyhuZWRwb29sICpwKSBUSFJPV1NQRUM7CisjZW5kaWYKK0VYVFNQRUMgaW50ICAgIG5lZHBtYWxsb3B0KG5lZHBvb2wgKnAsIGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUM7CitFWFRTUEVDIGludCAgICBuZWRwbWFsbG9jX3RyaW0obmVkcG9vbCAqcCwgc2l6ZV90IHBhZCkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkcG1hbGxvY19zdGF0cyhuZWRwb29sICpwKSBUSFJPV1NQRUM7CitFWFRTUEVDIHNpemVfdCBuZWRwbWFsbG9jX2Zvb3RwcmludChuZWRwb29sICpwKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUM7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyN1bmRlZiBNQUxMT0NBVFRSCisjdW5kZWYgRVhUU1BFQworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9vYnN0YWNrLmMgYi9jb21wYXQvb2JzdGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Y2Q1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvb2JzdGFjay5jCkBAIC0wLDAgKzEsNDEzIEBACisvKiBvYnN0YWNrLmMgLSBzdWJyb3V0aW5lcyB1c2VkIGltcGxpY2l0bHkgYnkgb2JqZWN0IHN0YWNrIG1hY3JvcworICAgQ29weXJpZ2h0IChDKSAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk2LCAxOTk3LCAxOTk4LAorICAgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlIDxnZXR0ZXh0Lmg+CisjaW5jbHVkZSAib2JzdGFjay5oIgorCisvKiBOT1RFIEJFRk9SRSBNT0RJRllJTkcgVEhJUyBGSUxFOiBUaGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUKKyAgIGluY3JlbWVudGVkIHdoZW5ldmVyIGNhbGxlcnMgY29tcGlsZWQgdXNpbmcgYW4gb2xkIG9ic3RhY2suaCBjYW4gbm8KKyAgIGxvbmdlciBwcm9wZXJseSBjYWxsIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBvYnN0YWNrLmMuICAqLworI2RlZmluZSBPQlNUQUNLX0lOVEVSRkFDRV9WRVJTSU9OIDEKKworLyogQ29tbWVudCBvdXQgYWxsIHRoaXMgY29kZSBpZiB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnksIGFuZCBhcmUgbm90CisgICBhY3R1YWxseSBjb21waWxpbmcgdGhlIGxpYnJhcnkgaXRzZWxmLCBhbmQgdGhlIGluc3RhbGxlZCBsaWJyYXJ5CisgICBzdXBwb3J0cyB0aGUgc2FtZSBsaWJyYXJ5IGludGVyZmFjZSB3ZSBkby4gIFRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBHTlUKKyAgIEMgTGlicmFyeSwgYnV0IGFsc28gaW5jbHVkZWQgaW4gbWFueSBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucy4gIENvbXBpbGluZworICAgYW5kIGxpbmtpbmcgaW4gdGhpcyBjb2RlIGlzIGEgd2FzdGUgd2hlbiB1c2luZyB0aGUgR05VIEMgbGlicmFyeQorICAgKGVzcGVjaWFsbHkgaWYgaXQgaXMgYSBzaGFyZWQgbGlicmFyeSkuICBSYXRoZXIgdGhhbiBoYXZpbmcgZXZlcnkgR05VCisgICBwcm9ncmFtIHVuZGVyc3RhbmQgYGNvbmZpZ3VyZSAtLXdpdGgtZ251LWxpYmMnIGFuZCBvbWl0IHRoZSBvYmplY3QKKyAgIGZpbGVzLCBpdCBpcyBzaW1wbGVyIHRvIGp1c3QgZG8gdGhpcyBpbiB0aGUgc291cmNlIGZvciBlYWNoIHN1Y2ggZmlsZS4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgkJLyogUmFuZG9tIHRoaW5nIHRvIGdldCBfX0dOVV9MSUJSQVJZX18uICAqLworI2lmICFkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgX19HTlVfTElCUkFSWV9fICYmIF9fR05VX0xJQlJBUllfXyA+IDEKKyMgaW5jbHVkZSA8Z251LXZlcnNpb25zLmg+CisjIGlmIF9HTlVfT0JTVEFDS19JTlRFUkZBQ0VfVkVSU0lPTiA9PSBPQlNUQUNLX0lOVEVSRkFDRV9WRVJTSU9OCisjICBkZWZpbmUgRUxJREVfQ09ERQorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmbmRlZiBFTElERV9DT0RFCisKKworIyBpZiBIQVZFX0lOVFRZUEVTX0gKKyMgIGluY2x1ZGUgPGludHR5cGVzLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfU1RESU5UX0ggfHwgZGVmaW5lZCBfTElCQworIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVuZGlmCisKKy8qIERldGVybWluZSBkZWZhdWx0IGFsaWdubWVudC4gICovCit1bmlvbiBmb29yb3VuZAoreworICB1aW50bWF4X3QgaTsKKyAgbG9uZyBkb3VibGUgZDsKKyAgdm9pZCAqcDsKK307CitzdHJ1Y3QgZm9vYWxpZ24KK3sKKyAgY2hhciBjOworICB1bmlvbiBmb29yb3VuZCB1OworfTsKKy8qIElmIG1hbGxvYyB3ZXJlIHJlYWxseSBzbWFydCwgaXQgd291bGQgcm91bmQgYWRkcmVzc2VzIHRvIERFRkFVTFRfQUxJR05NRU5ULgorICAgQnV0IGluIGZhY3QgaXQgbWlnaHQgYmUgbGVzcyBzbWFydCBhbmQgcm91bmQgYWRkcmVzc2VzIHRvIGFzIG11Y2ggYXMKKyAgIERFRkFVTFRfUk9VTkRJTkcuICBTbyB3ZSBwcmVwYXJlIGZvciBpdCB0byBkbyB0aGF0LiAgKi8KK2VudW0KKyAgeworICAgIERFRkFVTFRfQUxJR05NRU5UID0gb2Zmc2V0b2YgKHN0cnVjdCBmb29hbGlnbiwgdSksCisgICAgREVGQVVMVF9ST1VORElORyA9IHNpemVvZiAodW5pb24gZm9vcm91bmQpCisgIH07CisKKy8qIFdoZW4gd2UgY29weSBhIGxvbmcgYmxvY2sgb2YgZGF0YSwgdGhpcyBpcyB0aGUgdW5pdCB0byBkbyBpdCB3aXRoLgorICAgT24gc29tZSBtYWNoaW5lcywgY29weWluZyBzdWNjZXNzaXZlIGludHMgZG9lcyBub3Qgd29yazsKKyAgIGluIHN1Y2ggYSBjYXNlLCByZWRlZmluZSBDT1BZSU5HX1VOSVQgdG8gYGxvbmcnIChpZiB0aGF0IHdvcmtzKQorICAgb3IgYGNoYXInIGFzIGEgbGFzdCByZXNvcnQuICAqLworIyBpZm5kZWYgQ09QWUlOR19VTklUCisjICBkZWZpbmUgQ09QWUlOR19VTklUIGludAorIyBlbmRpZgorCisKKy8qIFRoZSBmdW5jdGlvbnMgYWxsb2NhdGluZyBtb3JlIHJvb20gYnkgY2FsbGluZyBgb2JzdGFja19jaHVua19hbGxvYycKKyAgIGp1bXAgdG8gdGhlIGhhbmRsZXIgcG9pbnRlZCB0byBieSBgb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcicuCisgICBUaGlzIGNhbiBiZSBzZXQgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gd2hpY2ggc2hvdWxkIGVpdGhlcgorICAgYWJvcnQgZ3JhY2VmdWxseSBvciB1c2UgbG9uZ2p1bXAgLSBidXQgc2hvdWxkbid0IHJldHVybi4gIFRoaXMKKyAgIHZhcmlhYmxlIGJ5IGRlZmF1bHQgcG9pbnRzIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbgorICAgYHByaW50X2FuZF9hYm9ydCcuICAqLworc3RhdGljIHZvaWQgcHJpbnRfYW5kX2Fib3J0ICh2b2lkKTsKK3ZvaWQgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAodm9pZCkgPSBwcmludF9hbmRfYWJvcnQ7CisKKyMgaWZkZWYgX0xJQkMKKyMgIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzNfNCkKKy8qIEEgbG9vb25nIHRpbWUgYWdvIChiZWZvcmUgMTk5NCwgYW55d2F5OyB3ZSdyZSBub3Qgc3VyZSkgdGhpcyBnbG9iYWwgdmFyaWFibGUKKyAgIHdhcyB1c2VkIGJ5IG5vbi1HTlUtQyBtYWNyb3MgdG8gYXZvaWQgbXVsdGlwbGUgZXZhbHVhdGlvbi4gIFRoZSBHTlUgQworICAgbGlicmFyeSBzdGlsbCBleHBvcnRzIGl0IGJlY2F1c2Ugc29tZWJvZHkgbWlnaHQgdXNlIGl0LiAgKi8KK3N0cnVjdCBvYnN0YWNrICpfb2JzdGFja19jb21wYXQ7Citjb21wYXRfc3ltYm9sIChsaWJjLCBfb2JzdGFja19jb21wYXQsIF9vYnN0YWNrLCBHTElCQ18yXzApOworIyAgZW5kaWYKKyMgZW5kaWYKKworLyogRGVmaW5lIGEgbWFjcm8gdGhhdCBlaXRoZXIgY2FsbHMgZnVuY3Rpb25zIHdpdGggdGhlIHRyYWRpdGlvbmFsIG1hbGxvYy9mcmVlCisgICBjYWxsaW5nIGludGVyZmFjZSwgb3IgY2FsbHMgZnVuY3Rpb25zIHdpdGggdGhlIG1tYWxsb2MvbWZyZWUgaW50ZXJmYWNlCisgICAodGhhdCBhZGRzIGFuIGV4dHJhIGZpcnN0IGFyZ3VtZW50KSwgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHVzZV9leHRyYV9hcmcuCisgICBGb3IgZnJlZSwgZG8gbm90IHVzZSA/Oiwgc2luY2Ugc29tZSBjb21waWxlcnMsIGxpa2UgdGhlIE1JUFMgY29tcGlsZXJzLAorICAgZG8gbm90IGFsbG93IChleHByKSA/IHZvaWQgOiB2b2lkLiAgKi8KKworIyBkZWZpbmUgQ0FMTF9DSFVOS0ZVTihoLCBzaXplKSBcCisgICgoKGgpIC0+IHVzZV9leHRyYV9hcmcpIFwKKyAgID8gKCooaCktPmNodW5rZnVuLmV4dHJhKSAoKGgpLT5leHRyYV9hcmcsIChzaXplKSkgXAorICAgOiAoKihoKS0+Y2h1bmtmdW4ucGxhaW4pICgoc2l6ZSkpKQorCisjIGRlZmluZSBDQUxMX0ZSRUVGVU4oaCwgb2xkX2NodW5rKSBcCisgIGRvIHsgXAorICAgIGlmICgoaCkgLT4gdXNlX2V4dHJhX2FyZykgXAorICAgICAgKCooaCktPmZyZWVmdW4uZXh0cmEpICgoaCktPmV4dHJhX2FyZywgKG9sZF9jaHVuaykpOyBcCisgICAgZWxzZSBcCisgICAgICAoKihoKS0+ZnJlZWZ1bi5wbGFpbikgKChvbGRfY2h1bmspKTsgXAorICB9IHdoaWxlICgwKQorCisMCisvKiBJbml0aWFsaXplIGFuIG9ic3RhY2sgSCBmb3IgdXNlLiAgU3BlY2lmeSBjaHVuayBzaXplIFNJWkUgKDAgbWVhbnMgZGVmYXVsdCkuCisgICBPYmplY3RzIHN0YXJ0IG9uIG11bHRpcGxlcyBvZiBBTElHTk1FTlQgKDAgbWVhbnMgdXNlIGRlZmF1bHQpLgorICAgQ0hVTktGVU4gaXMgdGhlIGZ1bmN0aW9uIHRvIHVzZSB0byBhbGxvY2F0ZSBjaHVua3MsCisgICBhbmQgRlJFRUZVTiB0aGUgZnVuY3Rpb24gdG8gZnJlZSB0aGVtLgorCisgICBSZXR1cm4gbm9uemVybyBpZiBzdWNjZXNzZnVsLCBjYWxscyBvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyIGlmCisgICBhbGxvY2F0aW9uIGZhaWxzLiAgKi8KKworaW50Citfb2JzdGFja19iZWdpbiAoc3RydWN0IG9ic3RhY2sgKmgsCisJCWludCBzaXplLCBpbnQgYWxpZ25tZW50LAorCQl2b2lkICooKmNodW5rZnVuKSAobG9uZyksCisJCXZvaWQgKCpmcmVlZnVuKSAodm9pZCAqKSkKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpjaHVuazsgLyogcG9pbnRzIHRvIG5ldyBjaHVuayAqLworCisgIGlmIChhbGlnbm1lbnQgPT0gMCkKKyAgICBhbGlnbm1lbnQgPSBERUZBVUxUX0FMSUdOTUVOVDsKKyAgaWYgKHNpemUgPT0gMCkKKyAgICAvKiBEZWZhdWx0IHNpemUgaXMgd2hhdCBHTlUgbWFsbG9jIGNhbiBmaXQgaW4gYSA0MDk2LWJ5dGUgYmxvY2suICAqLworICAgIHsKKyAgICAgIC8qIDEyIGlzIHNpemVvZiAobWhlYWQpIGFuZCA0IGlzIEVYVFJBIGZyb20gR05VIG1hbGxvYy4KKwkgVXNlIHRoZSB2YWx1ZXMgZm9yIHJhbmdlIGNoZWNraW5nLCBiZWNhdXNlIGlmIHJhbmdlIGNoZWNraW5nIGlzIG9mZiwKKwkgdGhlIGV4dHJhIGJ5dGVzIHdvbid0IGJlIG1pc3NlZCB0ZXJyaWJseSwgYnV0IGlmIHJhbmdlIGNoZWNraW5nIGlzIG9uCisJIGFuZCB3ZSB1c2VkIGEgbGFyZ2VyIHJlcXVlc3QsIGEgd2hvbGUgZXh0cmEgNDA5NiBieXRlcyB3b3VsZCBiZQorCSBhbGxvY2F0ZWQuCisKKwkgVGhlc2UgbnVtYmVyIGFyZSBpcnJlbGV2YW50IHRvIHRoZSBuZXcgR05VIG1hbGxvYy4gIEkgc3VzcGVjdCBpdCBpcworCSBsZXNzIHNlbnNpdGl2ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdC4gICovCisgICAgICBpbnQgZXh0cmEgPSAoKCgoMTIgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSkKKwkJICAgICsgNCArIERFRkFVTFRfUk9VTkRJTkcgLSAxKQorCQkgICAmIH4oREVGQVVMVF9ST1VORElORyAtIDEpKTsKKyAgICAgIHNpemUgPSA0MDk2IC0gZXh0cmE7CisgICAgfQorCisgIGgtPmNodW5rZnVuLnBsYWluID0gY2h1bmtmdW47CisgIGgtPmZyZWVmdW4ucGxhaW4gPSBmcmVlZnVuOworICBoLT5jaHVua19zaXplID0gc2l6ZTsKKyAgaC0+YWxpZ25tZW50X21hc2sgPSBhbGlnbm1lbnQgLSAxOworICBoLT51c2VfZXh0cmFfYXJnID0gMDsKKworICBjaHVuayA9IGgtPmNodW5rID0gQ0FMTF9DSFVOS0ZVTiAoaCwgaCAtPiBjaHVua19zaXplKTsKKyAgaWYgKCFjaHVuaykKKyAgICAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICgpOworICBoLT5uZXh0X2ZyZWUgPSBoLT5vYmplY3RfYmFzZSA9IF9fUFRSX0FMSUdOICgoY2hhciAqKSBjaHVuaywgY2h1bmstPmNvbnRlbnRzLAorCQkJCQkgICAgICAgYWxpZ25tZW50IC0gMSk7CisgIGgtPmNodW5rX2xpbWl0ID0gY2h1bmstPmxpbWl0CisgICAgPSAoY2hhciAqKSBjaHVuayArIGgtPmNodW5rX3NpemU7CisgIGNodW5rLT5wcmV2ID0gTlVMTDsKKyAgLyogVGhlIGluaXRpYWwgY2h1bmsgbm93IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdC4gICovCisgIGgtPm1heWJlX2VtcHR5X29iamVjdCA9IDA7CisgIGgtPmFsbG9jX2ZhaWxlZCA9IDA7CisgIHJldHVybiAxOworfQorCitpbnQKK19vYnN0YWNrX2JlZ2luXzEgKHN0cnVjdCBvYnN0YWNrICpoLCBpbnQgc2l6ZSwgaW50IGFsaWdubWVudCwKKwkJICB2b2lkICooKmNodW5rZnVuKSAodm9pZCAqLCBsb25nKSwKKwkJICB2b2lkICgqZnJlZWZ1bikgKHZvaWQgKiwgdm9pZCAqKSwKKwkJICB2b2lkICphcmcpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KKworICBpZiAoYWxpZ25tZW50ID09IDApCisgICAgYWxpZ25tZW50ID0gREVGQVVMVF9BTElHTk1FTlQ7CisgIGlmIChzaXplID09IDApCisgICAgLyogRGVmYXVsdCBzaXplIGlzIHdoYXQgR05VIG1hbGxvYyBjYW4gZml0IGluIGEgNDA5Ni1ieXRlIGJsb2NrLiAgKi8KKyAgICB7CisgICAgICAvKiAxMiBpcyBzaXplb2YgKG1oZWFkKSBhbmQgNCBpcyBFWFRSQSBmcm9tIEdOVSBtYWxsb2MuCisJIFVzZSB0aGUgdmFsdWVzIGZvciByYW5nZSBjaGVja2luZywgYmVjYXVzZSBpZiByYW5nZSBjaGVja2luZyBpcyBvZmYsCisJIHRoZSBleHRyYSBieXRlcyB3b24ndCBiZSBtaXNzZWQgdGVycmlibHksIGJ1dCBpZiByYW5nZSBjaGVja2luZyBpcyBvbgorCSBhbmQgd2UgdXNlZCBhIGxhcmdlciByZXF1ZXN0LCBhIHdob2xlIGV4dHJhIDQwOTYgYnl0ZXMgd291bGQgYmUKKwkgYWxsb2NhdGVkLgorCisJIFRoZXNlIG51bWJlciBhcmUgaXJyZWxldmFudCB0byB0aGUgbmV3IEdOVSBtYWxsb2MuICBJIHN1c3BlY3QgaXQgaXMKKwkgbGVzcyBzZW5zaXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QuICAqLworICAgICAgaW50IGV4dHJhID0gKCgoKDEyICsgREVGQVVMVF9ST1VORElORyAtIDEpICYgfihERUZBVUxUX1JPVU5ESU5HIC0gMSkpCisJCSAgICArIDQgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkKKwkJICAgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSk7CisgICAgICBzaXplID0gNDA5NiAtIGV4dHJhOworICAgIH0KKworICBoLT5jaHVua2Z1bi5leHRyYSA9IChzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKiAoKikodm9pZCAqLGxvbmcpKSBjaHVua2Z1bjsKKyAgaC0+ZnJlZWZ1bi5leHRyYSA9ICh2b2lkICgqKSAodm9pZCAqLCBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKikpIGZyZWVmdW47CisKKyAgaC0+Y2h1bmtfc2l6ZSA9IHNpemU7CisgIGgtPmFsaWdubWVudF9tYXNrID0gYWxpZ25tZW50IC0gMTsKKyAgaC0+ZXh0cmFfYXJnID0gYXJnOworICBoLT51c2VfZXh0cmFfYXJnID0gMTsKKworICBjaHVuayA9IGgtPmNodW5rID0gQ0FMTF9DSFVOS0ZVTiAoaCwgaCAtPiBjaHVua19zaXplKTsKKyAgaWYgKCFjaHVuaykKKyAgICAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICgpOworICBoLT5uZXh0X2ZyZWUgPSBoLT5vYmplY3RfYmFzZSA9IF9fUFRSX0FMSUdOICgoY2hhciAqKSBjaHVuaywgY2h1bmstPmNvbnRlbnRzLAorCQkJCQkgICAgICAgYWxpZ25tZW50IC0gMSk7CisgIGgtPmNodW5rX2xpbWl0ID0gY2h1bmstPmxpbWl0CisgICAgPSAoY2hhciAqKSBjaHVuayArIGgtPmNodW5rX3NpemU7CisgIGNodW5rLT5wcmV2ID0gTlVMTDsKKyAgLyogVGhlIGluaXRpYWwgY2h1bmsgbm93IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdC4gICovCisgIGgtPm1heWJlX2VtcHR5X29iamVjdCA9IDA7CisgIGgtPmFsbG9jX2ZhaWxlZCA9IDA7CisgIHJldHVybiAxOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBjdXJyZW50IGNodW5rIGZvciB0aGUgb2JzdGFjayAqSAorICAgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBMRU5HVEggYnl0ZXMgbmVlZCB0byBiZSBhZGRlZAorICAgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LCBvciBhIG5ldyBvYmplY3Qgb2YgbGVuZ3RoIExFTkdUSCBhbGxvY2F0ZWQuCisgICBDb3BpZXMgYW55IHBhcnRpYWwgb2JqZWN0IGZyb20gdGhlIGVuZCBvZiB0aGUgb2xkIGNodW5rCisgICB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgb25lLiAgKi8KKwordm9pZAorX29ic3RhY2tfbmV3Y2h1bmsgKHN0cnVjdCBvYnN0YWNrICpoLCBpbnQgbGVuZ3RoKQoreworICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKm9sZF9jaHVuayA9IGgtPmNodW5rOworICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKm5ld19jaHVuazsKKyAgcmVnaXN0ZXIgbG9uZwluZXdfc2l6ZTsKKyAgcmVnaXN0ZXIgbG9uZyBvYmpfc2l6ZSA9IGgtPm5leHRfZnJlZSAtIGgtPm9iamVjdF9iYXNlOworICByZWdpc3RlciBsb25nIGk7CisgIGxvbmcgYWxyZWFkeTsKKyAgY2hhciAqb2JqZWN0X2Jhc2U7CisKKyAgLyogQ29tcHV0ZSBzaXplIGZvciBuZXcgY2h1bmsuICAqLworICBuZXdfc2l6ZSA9IChvYmpfc2l6ZSArIGxlbmd0aCkgKyAob2JqX3NpemUgPj4gMykgKyBoLT5hbGlnbm1lbnRfbWFzayArIDEwMDsKKyAgaWYgKG5ld19zaXplIDwgaC0+Y2h1bmtfc2l6ZSkKKyAgICBuZXdfc2l6ZSA9IGgtPmNodW5rX3NpemU7CisKKyAgLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIG5ldyBjaHVuay4gICovCisgIG5ld19jaHVuayA9IENBTExfQ0hVTktGVU4gKGgsIG5ld19zaXplKTsKKyAgaWYgKCFuZXdfY2h1bmspCisgICAgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAoKTsKKyAgaC0+Y2h1bmsgPSBuZXdfY2h1bms7CisgIG5ld19jaHVuay0+cHJldiA9IG9sZF9jaHVuazsKKyAgbmV3X2NodW5rLT5saW1pdCA9IGgtPmNodW5rX2xpbWl0ID0gKGNoYXIgKikgbmV3X2NodW5rICsgbmV3X3NpemU7CisKKyAgLyogQ29tcHV0ZSBhbiBhbGlnbmVkIG9iamVjdF9iYXNlIGluIHRoZSBuZXcgY2h1bmsgKi8KKyAgb2JqZWN0X2Jhc2UgPQorICAgIF9fUFRSX0FMSUdOICgoY2hhciAqKSBuZXdfY2h1bmssIG5ld19jaHVuay0+Y29udGVudHMsIGgtPmFsaWdubWVudF9tYXNrKTsKKworICAvKiBNb3ZlIHRoZSBleGlzdGluZyBvYmplY3QgdG8gdGhlIG5ldyBjaHVuay4KKyAgICAgV29yZCBhdCBhIHRpbWUgaXMgZmFzdCBhbmQgaXMgc2FmZSBpZiB0aGUgb2JqZWN0CisgICAgIGlzIHN1ZmZpY2llbnRseSBhbGlnbmVkLiAgKi8KKyAgaWYgKGgtPmFsaWdubWVudF9tYXNrICsgMSA+PSBERUZBVUxUX0FMSUdOTUVOVCkKKyAgICB7CisgICAgICBmb3IgKGkgPSBvYmpfc2l6ZSAvIHNpemVvZiAoQ09QWUlOR19VTklUKSAtIDE7CisJICAgaSA+PSAwOyBpLS0pCisJKChDT1BZSU5HX1VOSVQgKilvYmplY3RfYmFzZSlbaV0KKwkgID0gKChDT1BZSU5HX1VOSVQgKiloLT5vYmplY3RfYmFzZSlbaV07CisgICAgICAvKiBXZSB1c2VkIHRvIGNvcHkgdGhlIG9kZCBmZXcgcmVtYWluaW5nIGJ5dGVzIGFzIG9uZSBleHRyYSBDT1BZSU5HX1VOSVQsCisJIGJ1dCB0aGF0IGNhbiBjcm9zcyBhIHBhZ2UgYm91bmRhcnkgb24gYSBtYWNoaW5lCisJIHdoaWNoIGRvZXMgbm90IGRvIHN0cmljdCBhbGlnbm1lbnQgZm9yIENPUFlJTkdfVU5JVFMuICAqLworICAgICAgYWxyZWFkeSA9IG9ial9zaXplIC8gc2l6ZW9mIChDT1BZSU5HX1VOSVQpICogc2l6ZW9mIChDT1BZSU5HX1VOSVQpOworICAgIH0KKyAgZWxzZQorICAgIGFscmVhZHkgPSAwOworICAvKiBDb3B5IHJlbWFpbmluZyBieXRlcyBvbmUgYnkgb25lLiAgKi8KKyAgZm9yIChpID0gYWxyZWFkeTsgaSA8IG9ial9zaXplOyBpKyspCisgICAgb2JqZWN0X2Jhc2VbaV0gPSBoLT5vYmplY3RfYmFzZVtpXTsKKworICAvKiBJZiB0aGUgb2JqZWN0IGp1c3QgY29waWVkIHdhcyB0aGUgb25seSBkYXRhIGluIE9MRF9DSFVOSywKKyAgICAgZnJlZSB0aGF0IGNodW5rIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgY2hhaW4uCisgICAgIEJ1dCBub3QgaWYgdGhhdCBjaHVuayBtaWdodCBjb250YWluIGFuIGVtcHR5IG9iamVjdC4gICovCisgIGlmICghIGgtPm1heWJlX2VtcHR5X29iamVjdAorICAgICAgJiYgKGgtPm9iamVjdF9iYXNlCisJICA9PSBfX1BUUl9BTElHTiAoKGNoYXIgKikgb2xkX2NodW5rLCBvbGRfY2h1bmstPmNvbnRlbnRzLAorCQkJICBoLT5hbGlnbm1lbnRfbWFzaykpKQorICAgIHsKKyAgICAgIG5ld19jaHVuay0+cHJldiA9IG9sZF9jaHVuay0+cHJldjsKKyAgICAgIENBTExfRlJFRUZVTiAoaCwgb2xkX2NodW5rKTsKKyAgICB9CisKKyAgaC0+b2JqZWN0X2Jhc2UgPSBvYmplY3RfYmFzZTsKKyAgaC0+bmV4dF9mcmVlID0gaC0+b2JqZWN0X2Jhc2UgKyBvYmpfc2l6ZTsKKyAgLyogVGhlIG5ldyBjaHVuayBjZXJ0YWlubHkgY29udGFpbnMgbm8gZW1wdHkgb2JqZWN0IHlldC4gICovCisgIGgtPm1heWJlX2VtcHR5X29iamVjdCA9IDA7Cit9CisjIGlmZGVmIF9MSUJDCitsaWJjX2hpZGRlbl9kZWYgKF9vYnN0YWNrX25ld2NodW5rKQorIyBlbmRpZgorCisvKiBSZXR1cm4gbm9uemVybyBpZiBvYmplY3QgT0JKIGhhcyBiZWVuIGFsbG9jYXRlZCBmcm9tIG9ic3RhY2sgSC4KKyAgIFRoaXMgaXMgaGVyZSBmb3IgZGVidWdnaW5nLgorICAgSWYgeW91IHVzZSBpdCBpbiBhIHByb2dyYW0sIHlvdSBhcmUgcHJvYmFibHkgbG9zaW5nLiAgKi8KKworLyogU3VwcHJlc3MgLVdtaXNzaW5nLXByb3RvdHlwZXMgd2FybmluZy4gIFdlIGRvbid0IHdhbnQgdG8gZGVjbGFyZSB0aGlzIGluCisgICBvYnN0YWNrLmggYmVjYXVzZSBpdCBpcyBqdXN0IGZvciBkZWJ1Z2dpbmcuICAqLworaW50IF9vYnN0YWNrX2FsbG9jYXRlZF9wIChzdHJ1Y3Qgb2JzdGFjayAqaCwgdm9pZCAqb2JqKTsKKworaW50Citfb2JzdGFja19hbGxvY2F0ZWRfcCAoc3RydWN0IG9ic3RhY2sgKmgsIHZvaWQgKm9iaikKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpscDsJLyogYmVsb3cgYWRkciBvZiBhbnkgb2JqZWN0cyBpbiB0aGlzIGNodW5rICovCisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqcGxwOwkvKiBwb2ludCB0byBwcmV2aW91cyBjaHVuayBpZiBhbnkgKi8KKworICBscCA9IChoKS0+Y2h1bms7CisgIC8qIFdlIHVzZSA+PSByYXRoZXIgdGhhbiA+IHNpbmNlIHRoZSBvYmplY3QgY2Fubm90IGJlIGV4YWN0bHkgYXQKKyAgICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2h1bmsgYnV0IG1pZ2h0IGJlIGFuIGVtcHR5IG9iamVjdCBleGFjdGx5CisgICAgIGF0IHRoZSBlbmQgb2YgYW4gYWRqYWNlbnQgY2h1bmsuICAqLworICB3aGlsZSAobHAgIT0gTlVMTCAmJiAoKHZvaWQgKikgbHAgPj0gb2JqIHx8ICh2b2lkICopIChscCktPmxpbWl0IDwgb2JqKSkKKyAgICB7CisgICAgICBwbHAgPSBscC0+cHJldjsKKyAgICAgIGxwID0gcGxwOworICAgIH0KKyAgcmV0dXJuIGxwICE9IE5VTEw7Cit9CisMCisvKiBGcmVlIG9iamVjdHMgaW4gb2JzdGFjayBILCBpbmNsdWRpbmcgT0JKIGFuZCBldmVyeXRoaW5nIGFsbG9jYXRlCisgICBtb3JlIHJlY2VudGx5IHRoYW4gT0JKLiAgSWYgT0JKIGlzIHplcm8sIGZyZWUgZXZlcnl0aGluZyBpbiBILiAgKi8KKworIyB1bmRlZiBvYnN0YWNrX2ZyZWUKKwordm9pZAorb2JzdGFja19mcmVlIChzdHJ1Y3Qgb2JzdGFjayAqaCwgdm9pZCAqb2JqKQoreworICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKmxwOwkvKiBiZWxvdyBhZGRyIG9mIGFueSBvYmplY3RzIGluIHRoaXMgY2h1bmsgKi8KKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpwbHA7CS8qIHBvaW50IHRvIHByZXZpb3VzIGNodW5rIGlmIGFueSAqLworCisgIGxwID0gaC0+Y2h1bms7CisgIC8qIFdlIHVzZSA+PSBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZSBhbiBvYmplY3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNodW5rLgorICAgICBCdXQgdGhlcmUgY2FuIGJlIGFuIGVtcHR5IG9iamVjdCBhdCB0aGF0IGFkZHJlc3MKKyAgICAgYXQgdGhlIGVuZCBvZiBhbm90aGVyIGNodW5rLiAgKi8KKyAgd2hpbGUgKGxwICE9IE5VTEwgJiYgKCh2b2lkICopIGxwID49IG9iaiB8fCAodm9pZCAqKSAobHApLT5saW1pdCA8IG9iaikpCisgICAgeworICAgICAgcGxwID0gbHAtPnByZXY7CisgICAgICBDQUxMX0ZSRUVGVU4gKGgsIGxwKTsKKyAgICAgIGxwID0gcGxwOworICAgICAgLyogSWYgd2Ugc3dpdGNoIGNodW5rcywgd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIHRoZSBuZXcgY3VycmVudAorCSBjaHVuayBjb250YWlucyBhbiBlbXB0eSBvYmplY3QsIHNvIGFzc3VtZSB0aGF0IGl0IG1heS4gICovCisgICAgICBoLT5tYXliZV9lbXB0eV9vYmplY3QgPSAxOworICAgIH0KKyAgaWYgKGxwKQorICAgIHsKKyAgICAgIGgtPm9iamVjdF9iYXNlID0gaC0+bmV4dF9mcmVlID0gKGNoYXIgKikgKG9iaik7CisgICAgICBoLT5jaHVua19saW1pdCA9IGxwLT5saW1pdDsKKyAgICAgIGgtPmNodW5rID0gbHA7CisgICAgfQorICBlbHNlIGlmIChvYmogIT0gTlVMTCkKKyAgICAvKiBvYmogaXMgbm90IGluIGFueSBvZiB0aGUgY2h1bmtzISAqLworICAgIGFib3J0ICgpOworfQorCisjIGlmZGVmIF9MSUJDCisvKiBPbGRlciB2ZXJzaW9ucyBvZiBsaWJjIHVzZWQgYSBmdW5jdGlvbiBfb2JzdGFja19mcmVlIGludGVuZGVkIHRvIGJlCisgICBjYWxsZWQgYnkgbm9uLUdDQyBjb21waWxlcnMuICAqLworc3Ryb25nX2FsaWFzIChvYnN0YWNrX2ZyZWUsIF9vYnN0YWNrX2ZyZWUpCisjIGVuZGlmCisMCitpbnQKK19vYnN0YWNrX21lbW9yeV91c2VkIChzdHJ1Y3Qgb2JzdGFjayAqaCkKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rKiBscDsKKyAgcmVnaXN0ZXIgaW50IG5ieXRlcyA9IDA7CisKKyAgZm9yIChscCA9IGgtPmNodW5rOyBscCAhPSBOVUxMOyBscCA9IGxwLT5wcmV2KQorICAgIHsKKyAgICAgIG5ieXRlcyArPSBscC0+bGltaXQgLSAoY2hhciAqKSBscDsKKyAgICB9CisgIHJldHVybiBuYnl0ZXM7Cit9CisMCisjIGlmZGVmIF9MSUJDCisjICBpbmNsdWRlIDxsaWJpby9pb2xpYmlvLmg+CisjIGVuZGlmCisKKyMgaWZuZGVmIF9fYXR0cmlidXRlX18KKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworIyAgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkKKyMgICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworIyAgZW5kaWYKKyMgZW5kaWYKKworc3RhdGljIHZvaWQKK3ByaW50X2FuZF9hYm9ydCAodm9pZCkKK3sKKyAgLyogRG9uJ3QgY2hhbmdlIGFueSBvZiB0aGVzZSBzdHJpbmdzLiAgWWVzLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhZGQKKyAgICAgdGhlIG5ld2xpbmUgdG8gdGhlIHN0cmluZyBhbmQgdXNlIGZwdXRzIG9yIHNvLiAgQnV0IHRoaXMgbXVzdCBub3QKKyAgICAgaGFwcGVuIGJlY2F1c2UgdGhlICJtZW1vcnkgZXhoYXVzdGVkIiBtZXNzYWdlIGFwcGVhcnMgaW4gb3RoZXIgcGxhY2VzCisgICAgIGxpa2UgdGhpcyBhbmQgdGhlIHRyYW5zbGF0aW9uIHNob3VsZCBiZSByZXVzZWQgaW5zdGVhZCBvZiBjcmVhdGluZworICAgICBhIHZlcnkgc2ltaWxhciBzdHJpbmcgd2hpY2ggcmVxdWlyZXMgYSBzZXBhcmF0ZSB0cmFuc2xhdGlvbi4gICovCisjIGlmZGVmIF9MSUJDCisgICh2b2lkKSBfX2Z4cHJpbnRmIChOVUxMLCAiJXNcbiIsIF8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisjIGVsc2UKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIF8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisjIGVuZGlmCisgIGV4aXQgKDEpOworfQorCisjZW5kaWYJLyogIUVMSURFX0NPREUgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9vYnN0YWNrLmggYi9jb21wYXQvb2JzdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MGE0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvb2JzdGFjay5oCkBAIC0wLDAgKzEsNTExIEBACisvKiBvYnN0YWNrLmggLSBvYmplY3Qgc3RhY2sgbWFjcm9zCisgICBDb3B5cmlnaHQgKEMpIDE5ODgtMTk5NCwxOTk2LTE5OTksMjAwMywyMDA0LDIwMDUsMjAwOQorCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogU3VtbWFyeToKKworQWxsIHRoZSBhcHBhcmVudCBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGFyZSBtYWNyb3MuIFRoZSBpZGVhCitpcyB0aGF0IHlvdSB3b3VsZCB1c2UgdGhlc2UgcHJlLXRlc3RlZCBtYWNyb3MgdG8gc29sdmUgYQordmVyeSBzcGVjaWZpYyBzZXQgb2YgcHJvYmxlbXMsIGFuZCB0aGV5IHdvdWxkIHJ1biBmYXN0LgorQ2F1dGlvbjogbm8gc2lkZS1lZmZlY3RzIGluIGFyZ3VtZW50cyBwbGVhc2UhISBUaGV5IG1heSBiZQorZXZhbHVhdGVkIE1BTlkgdGltZXMhIQorCitUaGVzZSBtYWNyb3Mgb3BlcmF0ZSBhIHN0YWNrIG9mIG9iamVjdHMuICBFYWNoIG9iamVjdCBzdGFydHMgbGlmZQorc21hbGwsIGFuZCBtYXkgZ3JvdyB0byBtYXR1cml0eS4gIChDb25zaWRlciBidWlsZGluZyBhIHdvcmQgc3lsbGFibGUKK2J5IHN5bGxhYmxlLikgIEFuIG9iamVjdCBjYW4gbW92ZSB3aGlsZSBpdCBpcyBncm93aW5nLiAgT25jZSBpdCBoYXMKK2JlZW4gImZpbmlzaGVkIiBpdCBuZXZlciBjaGFuZ2VzIGFkZHJlc3MgYWdhaW4uICBTbyB0aGUgInRvcCBvZiB0aGUKK3N0YWNrIiBpcyB0eXBpY2FsbHkgYW4gaW1tYXR1cmUgZ3Jvd2luZyBvYmplY3QsIHdoaWxlIHRoZSByZXN0IG9mIHRoZQorc3RhY2sgaXMgb2YgbWF0dXJlLCBmaXhlZCBzaXplIGFuZCBmaXhlZCBhZGRyZXNzIG9iamVjdHMuCisKK1RoZXNlIHJvdXRpbmVzIGdyYWIgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSwgdXNpbmcgYSBmdW5jdGlvbiB5b3UKK3N1cHBseSwgY2FsbGVkIGBvYnN0YWNrX2NodW5rX2FsbG9jJy4gIE9uIG9jY2FzaW9uLCB0aGV5IGZyZWUgY2h1bmtzLAorYnkgY2FsbGluZyBgb2JzdGFja19jaHVua19mcmVlJy4gIFlvdSBtdXN0IGRlZmluZSB0aGVtIGFuZCBkZWNsYXJlCit0aGVtIGJlZm9yZSB1c2luZyBhbnkgb2JzdGFjayBtYWNyb3MuCisKK0VhY2ggaW5kZXBlbmRlbnQgc3RhY2sgaXMgcmVwcmVzZW50ZWQgYnkgYSBgc3RydWN0IG9ic3RhY2snLgorRWFjaCBvZiB0aGUgb2JzdGFjayBtYWNyb3MgZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3VjaCBhIHN0cnVjdHVyZQorYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCitPbmUgbW90aXZhdGlvbiBmb3IgdGhpcyBwYWNrYWdlIGlzIHRoZSBwcm9ibGVtIG9mIGdyb3dpbmcgY2hhciBzdHJpbmdzCitpbiBzeW1ib2wgdGFibGVzLiAgVW5sZXNzIHlvdSBhcmUgImZhc2Npc3QgcGlnIHdpdGggYSByZWFkLW9ubHkgbWluZCIKKy0tR29zcGVyJ3MgaW1tb3J0YWwgcXVvdGUgZnJvbSBIQUtNRU0gaXRlbSAxNTQsIG91dCBvZiBjb250ZXh0LS15b3UKK3dvdWxkIG5vdCBsaWtlIHRvIHB1dCBhbnkgYXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgeW91cgorc3ltYm9scy4KKworSW4gcHJhY3RpY2UgdGhpcyBvZnRlbiBtZWFucyB5b3Ugd2lsbCBidWlsZCBtYW55IHNob3J0IHN5bWJvbHMgYW5kIGEKK2ZldyBsb25nIHN5bWJvbHMuICBBdCB0aGUgdGltZSB5b3UgYXJlIHJlYWRpbmcgYSBzeW1ib2wgeW91IGRvbid0IGtub3cKK2hvdyBsb25nIGl0IGlzLiAgT25lIHRyYWRpdGlvbmFsIG1ldGhvZCBpcyB0byByZWFkIGEgc3ltYm9sIGludG8gYQorYnVmZmVyLCByZWFsbG9jKClhdGluZyB0aGUgYnVmZmVyIGV2ZXJ5IHRpbWUgeW91IHRyeSB0byByZWFkIGEgc3ltYm9sCit0aGF0IGlzIGxvbmdlciB0aGFuIHRoZSBidWZmZXIuICBUaGlzIGlzIGJlYXV0LCBidXQgeW91IHN0aWxsIHdpbGwKK3dhbnQgdG8gY29weSB0aGUgc3ltYm9sIGZyb20gdGhlIGJ1ZmZlciB0byBhIG1vcmUgcGVybWFuZW50CitzeW1ib2wtdGFibGUgZW50cnkgc2F5IGFib3V0IGhhbGYgdGhlIHRpbWUuCisKK1dpdGggb2JzdGFja3MsIHlvdSBjYW4gd29yayBkaWZmZXJlbnRseS4gIFVzZSBvbmUgb2JzdGFjayBmb3IgYWxsIHN5bWJvbAorbmFtZXMuICBBcyB5b3UgcmVhZCBhIHN5bWJvbCwgZ3JvdyB0aGUgbmFtZSBpbiB0aGUgb2JzdGFjayBncmFkdWFsbHkuCitXaGVuIHRoZSBuYW1lIGlzIGNvbXBsZXRlLCBmaW5hbGl6ZSBpdC4gIFRoZW4sIGlmIHRoZSBzeW1ib2wgZXhpc3RzIGFscmVhZHksCitmcmVlIHRoZSBuZXdseSByZWFkIG5hbWUuCisKK1RoZSB3YXkgd2UgZG8gdGhpcyBpcyB0byB0YWtlIGEgbGFyZ2UgY2h1bmssIGFsbG9jYXRpbmcgbWVtb3J5IGZyb20KK2xvdyBhZGRyZXNzZXMuICBXaGVuIHlvdSB3YW50IHRvIGJ1aWxkIGEgc3ltYm9sIGluIHRoZSBjaHVuayB5b3UganVzdAorYWRkIGNoYXJzIGFib3ZlIHRoZSBjdXJyZW50ICJoaWdoIHdhdGVyIG1hcmsiIGluIHRoZSBjaHVuay4gIFdoZW4geW91CitoYXZlIGZpbmlzaGVkIGFkZGluZyBjaGFycywgYmVjYXVzZSB5b3UgZ290IHRvIHRoZSBlbmQgb2YgdGhlIHN5bWJvbCwKK3lvdSBrbm93IGhvdyBsb25nIHRoZSBjaGFycyBhcmUsIGFuZCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBvYmplY3QuCitNb3N0bHkgdGhlIGNoYXJzIHdpbGwgbm90IGJ1cnN0IG92ZXIgdGhlIGhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgY2h1bmssCitiZWNhdXNlIHlvdSB3b3VsZCB0eXBpY2FsbHkgZXhwZWN0IGEgY2h1bmsgdG8gYmUgKHNheSkgMTAwIHRpbWVzIGFzCitsb25nIGFzIGFuIGF2ZXJhZ2Ugb2JqZWN0LgorCitJbiBjYXNlIHRoYXQgaXNuJ3QgY2xlYXIsIHdoZW4gd2UgaGF2ZSBlbm91Z2ggY2hhcnMgdG8gbWFrZSB1cAordGhlIG9iamVjdCwgVEhFWSBBUkUgQUxSRUFEWSBDT05USUdVT1VTIElOIFRIRSBDSFVOSyAoZ3VhcmFudGVlZCkKK3NvIHdlIGp1c3QgcG9pbnQgdG8gaXQgd2hlcmUgaXQgbGllcy4gIE5vIG1vdmluZyBvZiBjaGFycyBpcworbmVlZGVkIGFuZCB0aGlzIGlzIHRoZSBzZWNvbmQgd2luOiBwb3RlbnRpYWxseSBsb25nIHN0cmluZ3MgbmVlZAorbmV2ZXIgYmUgZXhwbGljaXRseSBzaHVmZmxlZC4gT25jZSBhbiBvYmplY3QgaXMgZm9ybWVkLCBpdCBkb2VzIG5vdAorY2hhbmdlIGl0cyBhZGRyZXNzIGR1cmluZyBpdHMgbGlmZXRpbWUuCisKK1doZW4gdGhlIGNoYXJzIGJ1cnN0IG92ZXIgYSBjaHVuayBib3VuZGFyeSwgd2UgYWxsb2NhdGUgYSBsYXJnZXIKK2NodW5rLCBhbmQgdGhlbiBjb3B5IHRoZSBwYXJ0bHkgZm9ybWVkIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZAorY2h1bmsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGxhcmdlciBjaHVuay4gIFdlIHRoZW4gY2Fycnkgb24KK2FjY3JlZGl0aW5nIGNoYXJhY3RlcnMgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGFzIHdlIG5vcm1hbGx5IHdvdWxkLgorCitBIHNwZWNpYWwgbWFjcm8gaXMgcHJvdmlkZWQgdG8gYWRkIGEgc2luZ2xlIGNoYXIgYXQgYSB0aW1lIHRvIGEKK2dyb3dpbmcgb2JqZWN0LiAgVGhpcyBhbGxvd3MgdGhlIHVzZSBvZiByZWdpc3RlciB2YXJpYWJsZXMsIHdoaWNoCiticmVhayB0aGUgb3JkaW5hcnkgJ2dyb3d0aCcgbWFjcm8uCisKK1N1bW1hcnk6CisJV2UgYWxsb2NhdGUgbGFyZ2UgY2h1bmtzLgorCVdlIGNhcnZlIG91dCBvbmUgb2JqZWN0IGF0IGEgdGltZSBmcm9tIHRoZSBjdXJyZW50IGNodW5rLgorCU9uY2UgY2FydmVkLCBhbiBvYmplY3QgbmV2ZXIgbW92ZXMuCisJV2UgYXJlIGZyZWUgdG8gYXBwZW5kIGRhdGEgb2YgYW55IHNpemUgdG8gdGhlIGN1cnJlbnRseQorCSAgZ3Jvd2luZyBvYmplY3QuCisJRXhhY3RseSBvbmUgb2JqZWN0IGlzIGdyb3dpbmcgaW4gYW4gb2JzdGFjayBhdCBhbnkgb25lIHRpbWUuCisJWW91IGNhbiBydW4gb25lIG9ic3RhY2sgcGVyIGNvbnRyb2wgYmxvY2suCisJWW91IG1heSBoYXZlIGFzIG1hbnkgY29udHJvbCBibG9ja3MgYXMgeW91IGRhcmUuCisJQmVjYXVzZSBvZiB0aGUgd2F5IHdlIGRvIGl0LCB5b3UgY2FuIGB1bndpbmQnIGFuIG9ic3RhY2sKKwkgIGJhY2sgdG8gYSBwcmV2aW91cyBzdGF0ZS4gKFlvdSBtYXkgcmVtb3ZlIG9iamVjdHMgbXVjaAorCSAgYXMgeW91IHdvdWxkIHdpdGggYSBzdGFjay4pCisqLworCisKKy8qIERvbid0IGRvIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbW9yZSB0aGFuIG9uY2UuICAqLworCisjaWZuZGVmIF9PQlNUQUNLX0gKKyNkZWZpbmUgX09CU1RBQ0tfSCAxCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwwKKy8qIFdlIG5lZWQgdGhlIHR5cGUgb2YgYSBwb2ludGVyIHN1YnRyYWN0aW9uLiAgSWYgX19QVFJESUZGX1RZUEVfXyBpcworICAgZGVmaW5lZCwgYXMgd2l0aCBHTlUgQywgdXNlIHRoYXQ7IHRoYXQgd2F5IHdlIGRvbid0IHBvbGx1dGUgdGhlCisgICBuYW1lc3BhY2Ugd2l0aCA8c3RkZGVmLmg+J3Mgc3ltYm9scy4gIE90aGVyd2lzZSwgaW5jbHVkZSA8c3RkZGVmLmg+CisgICBhbmQgdXNlIHB0cmRpZmZfdC4gICovCisKKyNpZmRlZiBfX1BUUkRJRkZfVFlQRV9fCisjIGRlZmluZSBQVFJfSU5UX1RZUEUgX19QVFJESUZGX1RZUEVfXworI2Vsc2UKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjIGRlZmluZSBQVFJfSU5UX1RZUEUgcHRyZGlmZl90CisjZW5kaWYKKworLyogSWYgQiBpcyB0aGUgYmFzZSBvZiBhbiBvYmplY3QgYWRkcmVzc2VkIGJ5IFAsIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICBhbGlnbmluZyBQIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIEEgKyAxLiAgQiBhbmQgUCBtdXN0IGJlIG9mIHR5cGUKKyAgIGNoYXIgKi4gIEEgKyAxIG11c3QgYmUgYSBwb3dlciBvZiAyLiAgKi8KKworI2RlZmluZSBfX0JQVFJfQUxJR04oQiwgUCwgQSkgKChCKSArICgoKFApIC0gKEIpICsgKEEpKSAmIH4oQSkpKQorCisvKiBTaW1pbGFyIHRvIF9CUFRSX0FMSUdOIChCLCBQLCBBKSwgZXhjZXB0IG9wdGltaXplIHRoZSBjb21tb24gY2FzZQorICAgd2hlcmUgcG9pbnRlcnMgY2FuIGJlIGNvbnZlcnRlZCB0byBpbnRlZ2VycywgYWxpZ25lZCBhcyBpbnRlZ2VycywKKyAgIGFuZCBjb252ZXJ0ZWQgYmFjayBhZ2Fpbi4gIElmIFBUUl9JTlRfVFlQRSBpcyBuYXJyb3dlciB0aGFuIGEKKyAgIHBvaW50ZXIgKGUuZy4sIHRoZSBBUy80MDApLCBwbGF5IGl0IHNhZmUgYW5kIGNvbXB1dGUgdGhlIGFsaWdubWVudAorICAgcmVsYXRpdmUgdG8gQi4gIE90aGVyd2lzZSwgdXNlIHRoZSBmYXN0ZXIgc3RyYXRlZ3kgb2YgY29tcHV0aW5nIHRoZQorICAgYWxpZ25tZW50IHJlbGF0aXZlIHRvIDAuICAqLworCisjZGVmaW5lIF9fUFRSX0FMSUdOKEIsIFAsIEEpCQkJCQkJICAgIFwKKyAgKHNpemVvZiAoUFRSX0lOVF9UWVBFKSA8IHNpemVvZih2b2lkICopID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICBfX0JQVFJfQUxJR04oKEIpLCAoUCksIChBKSkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKHZvaWQgKilfX0JQVFJfQUxJR04oKFBUUl9JTlRfVFlQRSkodm9pZCAqKTAsIChQVFJfSU5UX1RZUEUpKFApLCAoQSkpICAgICAgICAgICAgXAorICApCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RydWN0IF9vYnN0YWNrX2NodW5rCQkvKiBMaXZlcyBhdCBmcm9udCBvZiBlYWNoIGNodW5rLiAqLworeworICBjaGFyICAqbGltaXQ7CQkJLyogMSBwYXN0IGVuZCBvZiB0aGlzIGNodW5rICovCisgIHN0cnVjdCBfb2JzdGFja19jaHVuayAqcHJldjsJLyogYWRkcmVzcyBvZiBwcmlvciBjaHVuayBvciBOVUxMICovCisgIGNoYXIJY29udGVudHNbNF07CQkvKiBvYmplY3RzIGJlZ2luIGhlcmUgKi8KK307CisKK3N0cnVjdCBvYnN0YWNrCQkvKiBjb250cm9sIGN1cnJlbnQgb2JqZWN0IGluIGN1cnJlbnQgY2h1bmsgKi8KK3sKKyAgbG9uZwljaHVua19zaXplOwkJLyogcHJlZmVycmVkIHNpemUgdG8gYWxsb2NhdGUgY2h1bmtzIGluICovCisgIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7CS8qIGFkZHJlc3Mgb2YgY3VycmVudCBzdHJ1Y3Qgb2JzdGFja19jaHVuayAqLworICBjaGFyCSpvYmplY3RfYmFzZTsJCS8qIGFkZHJlc3Mgb2Ygb2JqZWN0IHdlIGFyZSBidWlsZGluZyAqLworICBjaGFyCSpuZXh0X2ZyZWU7CQkvKiB3aGVyZSB0byBhZGQgbmV4dCBjaGFyIHRvIGN1cnJlbnQgb2JqZWN0ICovCisgIGNoYXIJKmNodW5rX2xpbWl0OwkJLyogYWRkcmVzcyBvZiBjaGFyIGFmdGVyIGN1cnJlbnQgY2h1bmsgKi8KKyAgdW5pb24KKyAgeworICAgIFBUUl9JTlRfVFlQRSB0ZW1waW50OworICAgIHZvaWQgKnRlbXBwdHI7CisgIH0gdGVtcDsJCQkvKiBUZW1wb3JhcnkgZm9yIHNvbWUgbWFjcm9zLiAgKi8KKyAgaW50ICAgYWxpZ25tZW50X21hc2s7CQkvKiBNYXNrIG9mIGFsaWdubWVudCBmb3IgZWFjaCBvYmplY3QuICovCisgIC8qIFRoZXNlIHByb3RvdHlwZXMgdmFyeSBiYXNlZCBvbiBgdXNlX2V4dHJhX2FyZycuICovCisgIHVuaW9uIHsKKyAgICB2b2lkICooKnBsYWluKSAobG9uZyk7CisgICAgc3RydWN0IF9vYnN0YWNrX2NodW5rICooKmV4dHJhKSAodm9pZCAqLCBsb25nKTsKKyAgfSBjaHVua2Z1bjsKKyAgdW5pb24geworICAgIHZvaWQgKCpwbGFpbikgKHZvaWQgKik7CisgICAgdm9pZCAoKmV4dHJhKSAodm9pZCAqLCBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKik7CisgIH0gZnJlZWZ1bjsKKyAgdm9pZCAqZXh0cmFfYXJnOwkJLyogZmlyc3QgYXJnIGZvciBjaHVuayBhbGxvYy9kZWFsbG9jIGZ1bmNzICovCisgIHVuc2lnbmVkIHVzZV9leHRyYV9hcmc6MTsJLyogY2h1bmsgYWxsb2MvZGVhbGxvYyBmdW5jcyB0YWtlIGV4dHJhIGFyZyAqLworICB1bnNpZ25lZCBtYXliZV9lbXB0eV9vYmplY3Q6MTsvKiBUaGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGN1cnJlbnQKKwkJCQkgICBjaHVuayBjb250YWlucyBhIHplcm8tbGVuZ3RoIG9iamVjdC4gIFRoaXMKKwkJCQkgICBwcmV2ZW50cyBmcmVlaW5nIHRoZSBjaHVuayBpZiB3ZSBhbGxvY2F0ZQorCQkJCSAgIGEgYmlnZ2VyIGNodW5rIHRvIHJlcGxhY2UgaXQuICovCisgIHVuc2lnbmVkIGFsbG9jX2ZhaWxlZDoxOwkvKiBObyBsb25nZXIgdXNlZCwgYXMgd2Ugbm93IGNhbGwgdGhlIGZhaWxlZAorCQkJCSAgIGhhbmRsZXIgb24gZXJyb3IsIGJ1dCByZXRhaW5lZCBmb3IgYmluYXJ5CisJCQkJICAgY29tcGF0aWJpbGl0eS4gICovCit9OworCisvKiBEZWNsYXJlIHRoZSBleHRlcm5hbCBmdW5jdGlvbnMgd2UgdXNlOyB0aGV5IGFyZSBpbiBvYnN0YWNrLmMuICAqLworCitleHRlcm4gdm9pZCBfb2JzdGFja19uZXdjaHVuayAoc3RydWN0IG9ic3RhY2sgKiwgaW50KTsKK2V4dGVybiBpbnQgX29ic3RhY2tfYmVnaW4gKHN0cnVjdCBvYnN0YWNrICosIGludCwgaW50LAorCQkJICAgIHZvaWQgKigqKSAobG9uZyksIHZvaWQgKCopICh2b2lkICopKTsKK2V4dGVybiBpbnQgX29ic3RhY2tfYmVnaW5fMSAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBpbnQsCisJCQkgICAgIHZvaWQgKigqKSAodm9pZCAqLCBsb25nKSwKKwkJCSAgICAgdm9pZCAoKikgKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiBpbnQgX29ic3RhY2tfbWVtb3J5X3VzZWQgKHN0cnVjdCBvYnN0YWNrICopOworCit2b2lkIG9ic3RhY2tfZnJlZSAoc3RydWN0IG9ic3RhY2sgKiwgdm9pZCAqKTsKKworDAorLyogRXJyb3IgaGFuZGxlciBjYWxsZWQgd2hlbiBgb2JzdGFja19jaHVua19hbGxvYycgZmFpbGVkIHRvIGFsbG9jYXRlCisgICBtb3JlIG1lbW9yeS4gIFRoaXMgY2FuIGJlIHNldCB0byBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiB3aGljaAorICAgc2hvdWxkIGVpdGhlciBhYm9ydCBncmFjZWZ1bGx5IG9yIHVzZSBsb25nanVtcCAtIGJ1dCBzaG91bGRuJ3QKKyAgIHJldHVybi4gIFRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byBwcmludCBhIG1lc3NhZ2UgYW5kIGFib3J0LiAgKi8KK2V4dGVybiB2b2lkICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKHZvaWQpOworDAorLyogUG9pbnRlciB0byBiZWdpbm5pbmcgb2Ygb2JqZWN0IGJlaW5nIGFsbG9jYXRlZCBvciB0byBiZSBhbGxvY2F0ZWQgbmV4dC4KKyAgIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IG5vdCBiZSB0aGUgZmluYWwgYWRkcmVzcyBvZiB0aGUgb2JqZWN0CisgICBiZWNhdXNlIGEgbmV3IGNodW5rIG1pZ2h0IGJlIG5lZWRlZCB0byBob2xkIHRoZSBmaW5hbCBzaXplLiAgKi8KKworI2RlZmluZSBvYnN0YWNrX2Jhc2UoaCkgKCh2b2lkICopIChoKS0+b2JqZWN0X2Jhc2UpCisKKy8qIFNpemUgZm9yIGFsbG9jYXRpbmcgb3JkaW5hcnkgY2h1bmtzLiAgKi8KKworI2RlZmluZSBvYnN0YWNrX2NodW5rX3NpemUoaCkgKChoKS0+Y2h1bmtfc2l6ZSkKKworLyogUG9pbnRlciB0byBuZXh0IGJ5dGUgbm90IHlldCBhbGxvY2F0ZWQgaW4gY3VycmVudCBjaHVuay4gICovCisKKyNkZWZpbmUgb2JzdGFja19uZXh0X2ZyZWUoaCkJKChoKS0+bmV4dF9mcmVlKQorCisvKiBNYXNrIHNwZWNpZnlpbmcgbG93IGJpdHMgdGhhdCBzaG91bGQgYmUgY2xlYXIgaW4gYWRkcmVzcyBvZiBhbiBvYmplY3QuICAqLworCisjZGVmaW5lIG9ic3RhY2tfYWxpZ25tZW50X21hc2soaCkgKChoKS0+YWxpZ25tZW50X21hc2spCisKKy8qIFRvIHByZXZlbnQgcHJvdG90eXBlIHdhcm5pbmdzIHByb3ZpZGUgY29tcGxldGUgYXJndW1lbnQgbGlzdC4gICovCisjZGVmaW5lIG9ic3RhY2tfaW5pdChoKQkJCQkJCVwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgMCwgMCwJCQkJCVwKKwkJICAodm9pZCAqKCopIChsb25nKSkgb2JzdGFja19jaHVua19hbGxvYywJXAorCQkgICh2b2lkICgqKSAodm9pZCAqKSkgb2JzdGFja19jaHVua19mcmVlKQorCisjZGVmaW5lIG9ic3RhY2tfYmVnaW4oaCwgc2l6ZSkJCQkJCVwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgKHNpemUpLCAwLAkJCQlcCisJCSAgKHZvaWQgKigqKSAobG9uZykpIG9ic3RhY2tfY2h1bmtfYWxsb2MsCVwKKwkJICAodm9pZCAoKikgKHZvaWQgKikpIG9ic3RhY2tfY2h1bmtfZnJlZSkKKworI2RlZmluZSBvYnN0YWNrX3NwZWNpZnlfYWxsb2NhdGlvbihoLCBzaXplLCBhbGlnbm1lbnQsIGNodW5rZnVuLCBmcmVlZnVuKSAgXAorICBfb2JzdGFja19iZWdpbiAoKGgpLCAoc2l6ZSksIChhbGlnbm1lbnQpLAkJCQkgICBcCisJCSAgKHZvaWQgKigqKSAobG9uZykpIChjaHVua2Z1biksCQkJICAgXAorCQkgICh2b2lkICgqKSAodm9pZCAqKSkgKGZyZWVmdW4pKQorCisjZGVmaW5lIG9ic3RhY2tfc3BlY2lmeV9hbGxvY2F0aW9uX3dpdGhfYXJnKGgsIHNpemUsIGFsaWdubWVudCwgY2h1bmtmdW4sIGZyZWVmdW4sIGFyZykgXAorICBfb2JzdGFja19iZWdpbl8xICgoaCksIChzaXplKSwgKGFsaWdubWVudCksCQkJCVwKKwkJICAgICh2b2lkICooKikgKHZvaWQgKiwgbG9uZykpIChjaHVua2Z1biksCQlcCisJCSAgICAodm9pZCAoKikgKHZvaWQgKiwgdm9pZCAqKSkgKGZyZWVmdW4pLCAoYXJnKSkKKworI2RlZmluZSBvYnN0YWNrX2NodW5rZnVuKGgsIG5ld2NodW5rZnVuKSBcCisgICgoaCktPmNodW5rZnVuLmV4dHJhID0gKHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCopKHZvaWQgKiwgbG9uZykpIChuZXdjaHVua2Z1bikpCisKKyNkZWZpbmUgb2JzdGFja19mcmVlZnVuKGgsIG5ld2ZyZWVmdW4pIFwKKyAgKChoKS0+ZnJlZWZ1bi5leHRyYSA9ICh2b2lkICgqKSh2b2lkICosIHN0cnVjdCBfb2JzdGFja19jaHVuayAqKSkgKG5ld2ZyZWVmdW4pKQorCisjZGVmaW5lIG9ic3RhY2tfMWdyb3dfZmFzdChoLGFjaGFyKSAoKigoaCktPm5leHRfZnJlZSkrKyA9IChhY2hhcikpCisKKyNkZWZpbmUgb2JzdGFja19ibGFua19mYXN0KGgsbikgKChoKS0+bmV4dF9mcmVlICs9IChuKSkKKworI2RlZmluZSBvYnN0YWNrX21lbW9yeV91c2VkKGgpIF9vYnN0YWNrX21lbW9yeV91c2VkIChoKQorDAorI2lmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX1NURENfXyAmJiBfX1NURENfXworLyogTmV4dFN0ZXAgMi4wIGNjIGlzIHJlYWxseSBnY2MgMS45MyBidXQgaXQgZGVmaW5lcyBfX0dOVUNfXyA9IDIgYW5kCisgICBkb2VzIG5vdCBpbXBsZW1lbnQgX19leHRlbnNpb25fXy4gIEJ1dCB0aGF0IGNvbXBpbGVyIGRvZXNuJ3QgZGVmaW5lCisgICBfX0dOVUNfTUlOT1JfXy4gICovCisjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19OZVhUX18gJiYgIV9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9fZXh0ZW5zaW9uX18KKyMgZW5kaWYKKworLyogRm9yIEdOVSBDLCBpZiBub3QgLXRyYWRpdGlvbmFsLAorICAgd2UgY2FuIGRlZmluZSB0aGVzZSBtYWNyb3MgdG8gY29tcHV0ZSBhbGwgYXJncyBvbmx5IG9uY2UKKyAgIHdpdGhvdXQgdXNpbmcgYSBnbG9iYWwgdmFyaWFibGUuCisgICBBbHNvLCB3ZSBjYW4gYXZvaWQgdXNpbmcgdGhlIGB0ZW1wJyBzbG90LCB0byBtYWtlIGZhc3RlciBjb2RlLiAgKi8KKworIyBkZWZpbmUgb2JzdGFja19vYmplY3Rfc2l6ZShPQlNUQUNLKQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrIGNvbnN0ICpfX28gPSAoT0JTVEFDSyk7CQkJCVwKKyAgICAgKHVuc2lnbmVkKSAoX19vLT5uZXh0X2ZyZWUgLSBfX28tPm9iamVjdF9iYXNlKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19yb29tKE9CU1RBQ0spCQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrIGNvbnN0ICpfX28gPSAoT0JTVEFDSyk7CQkJCVwKKyAgICAgKHVuc2lnbmVkKSAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19tYWtlX3Jvb20oT0JTVEFDSyxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlIDwgX19sZW4pCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19lbXB0eV9wKE9CU1RBQ0spCQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsJCQkJXAorICAgICAoX19vLT5jaHVuay0+cHJldiA9PSAwCQkJCQkJXAorICAgICAgJiYgX19vLT5uZXh0X2ZyZWUgPT0gX19QVFJfQUxJR04gKChjaGFyICopIF9fby0+Y2h1bmssCQlcCisJCQkJCV9fby0+Y2h1bmstPmNvbnRlbnRzLAkJXAorCQkJCQlfX28tPmFsaWdubWVudF9tYXNrKSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdyhPQlNUQUNLLHdoZXJlLGxlbmd0aCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOwkJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIF9fbGVuID4gX19vLT5jaHVua19saW1pdCkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuKTsJCQkJCVwKKyAgIG1lbWNweSAoX19vLT5uZXh0X2ZyZWUsIHdoZXJlLCBfX2xlbik7CQkJCVwKKyAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3cwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gKyAxID4gX19vLT5jaHVua19saW1pdCkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuICsgMSk7CQkJCVwKKyAgIG1lbWNweSAoX19vLT5uZXh0X2ZyZWUsIHdoZXJlLCBfX2xlbik7CQkJCVwKKyAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKKyAgICooX19vLT5uZXh0X2ZyZWUpKysgPSAwOwkJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrXzFncm93KE9CU1RBQ0ssZGF0dW0pCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgMSA+IF9fby0+Y2h1bmtfbGltaXQpCQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgMSk7CQkJCQlcCisgICBvYnN0YWNrXzFncm93X2Zhc3QgKF9fbywgZGF0dW0pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKy8qIFRoZXNlIGFzc3VtZSB0aGF0IHRoZSBvYnN0YWNrIGFsaWdubWVudCBpcyBnb29kIGVub3VnaCBmb3IgcG9pbnRlcnMKKyAgIG9yIGludHMsIGFuZCB0aGF0IHRoZSBkYXRhIGFkZGVkIHNvIGZhciB0byB0aGUgY3VycmVudCBvYmplY3QKKyAgIHNoYXJlcyB0aGF0IG11Y2ggYWxpZ25tZW50LiAgKi8KKworIyBkZWZpbmUgb2JzdGFja19wdHJfZ3JvdyhPQlNUQUNLLGRhdHVtKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgc2l6ZW9mICh2b2lkICopID4gX19vLT5jaHVua19saW1pdCkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgc2l6ZW9mICh2b2lkICopKTsJCQkJXAorICAgb2JzdGFja19wdHJfZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsgfSkJCQkJXAorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93KE9CU1RBQ0ssZGF0dW0pCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBzaXplb2YgKGludCkgPiBfX28tPmNodW5rX2xpbWl0KQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBzaXplb2YgKGludCkpOwkJCQlcCisgICBvYnN0YWNrX2ludF9ncm93X2Zhc3QgKF9fbywgZGF0dW0pOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93X2Zhc3QoT0JTVEFDSyxhcHRyKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgICooY29uc3Qgdm9pZCAqKikgX19vMS0+bmV4dF9mcmVlID0gKGFwdHIpOwkJCQlcCisgICBfX28xLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChjb25zdCB2b2lkICopOwkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19pbnRfZ3Jvd19mYXN0KE9CU1RBQ0ssYWludCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbzEgPSAoT0JTVEFDSyk7CQkJCQlcCisgICAqKGludCAqKSBfX28xLT5uZXh0X2ZyZWUgPSAoYWludCk7CQkJCQlcCisgICBfX28xLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChpbnQpOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfYmxhbmsoT0JTVEFDSyxsZW5ndGgpCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSA8IF9fbGVuKQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgb2JzdGFja19ibGFua19mYXN0IChfX28sIF9fbGVuKTsJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2FsbG9jKE9CU1RBQ0ssbGVuZ3RoKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9faCA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIG9ic3RhY2tfYmxhbmsgKF9faCwgKGxlbmd0aCkpOwkJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weShPQlNUQUNLLHdoZXJlLGxlbmd0aCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9faCA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIG9ic3RhY2tfZ3JvdyAoX19oLCAod2hlcmUpLCAobGVuZ3RoKSk7CQkJCVwKKyAgIG9ic3RhY2tfZmluaXNoIChfX2gpOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2NvcHkwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ncm93MCAoX19oLCAod2hlcmUpLCAobGVuZ3RoKSk7CQkJCVwKKyAgIG9ic3RhY2tfZmluaXNoIChfX2gpOyB9KQorCisvKiBUaGUgbG9jYWwgdmFyaWFibGUgaXMgbmFtZWQgX19vMSB0byBhdm9pZCBhIG5hbWUgY29uZmxpY3QKKyAgIHdoZW4gb2JzdGFja19ibGFuayBpcyBjYWxsZWQuICAqLworIyBkZWZpbmUgb2JzdGFja19maW5pc2goT0JTVEFDSykJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28xID0gKE9CU1RBQ0spOwkJCQkJXAorICAgdm9pZCAqX192YWx1ZSA9ICh2b2lkICopIF9fbzEtPm9iamVjdF9iYXNlOwkJCQlcCisgICBpZiAoX19vMS0+bmV4dF9mcmVlID09IF9fdmFsdWUpCQkJCQlcCisgICAgIF9fbzEtPm1heWJlX2VtcHR5X29iamVjdCA9IDE7CQkJCQlcCisgICBfX28xLT5uZXh0X2ZyZWUJCQkJCQkJXAorICAgICA9IF9fUFRSX0FMSUdOIChfX28xLT5vYmplY3RfYmFzZSwgX19vMS0+bmV4dF9mcmVlLAkJCVwKKwkJICAgIF9fbzEtPmFsaWdubWVudF9tYXNrKTsJCQkJXAorICAgaWYgKF9fbzEtPm5leHRfZnJlZSAtIChjaGFyICopX19vMS0+Y2h1bmsJCQkJXAorICAgICAgID4gX19vMS0+Y2h1bmtfbGltaXQgLSAoY2hhciAqKV9fbzEtPmNodW5rKQkJCVwKKyAgICAgX19vMS0+bmV4dF9mcmVlID0gX19vMS0+Y2h1bmtfbGltaXQ7CQkJCVwKKyAgIF9fbzEtPm9iamVjdF9iYXNlID0gX19vMS0+bmV4dF9mcmVlOwkJCQkJXAorICAgX192YWx1ZTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19mcmVlKE9CU1RBQ0ssIE9CSikJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICB2b2lkICpfX29iaiA9IChPQkopOwkJCQkJCQlcCisgICBpZiAoX19vYmogPiAodm9pZCAqKV9fby0+Y2h1bmsgJiYgX19vYmogPCAodm9pZCAqKV9fby0+Y2h1bmtfbGltaXQpICBcCisgICAgIF9fby0+bmV4dF9mcmVlID0gX19vLT5vYmplY3RfYmFzZSA9IChjaGFyICopX19vYmo7CQkJXAorICAgZWxzZSAob2JzdGFja19mcmVlKSAoX19vLCBfX29iaik7IH0pCisMCisjZWxzZSAvKiBub3QgX19HTlVDX18gb3Igbm90IF9fU1REQ19fICovCisKKyMgZGVmaW5lIG9ic3RhY2tfb2JqZWN0X3NpemUoaCkgXAorICh1bnNpZ25lZCkgKChoKS0+bmV4dF9mcmVlIC0gKGgpLT5vYmplY3RfYmFzZSkKKworIyBkZWZpbmUgb2JzdGFja19yb29tKGgpCQlcCisgKHVuc2lnbmVkKSAoKGgpLT5jaHVua19saW1pdCAtIChoKS0+bmV4dF9mcmVlKQorCisjIGRlZmluZSBvYnN0YWNrX2VtcHR5X3AoaCkgXAorICgoaCktPmNodW5rLT5wcmV2ID09IDAJCQkJCQkJXAorICAmJiAoaCktPm5leHRfZnJlZSA9PSBfX1BUUl9BTElHTiAoKGNoYXIgKikgKGgpLT5jaHVuaywJCVwKKwkJCQkgICAgKGgpLT5jaHVuay0+Y29udGVudHMsCQlcCisJCQkJICAgIChoKS0+YWxpZ25tZW50X21hc2spKQorCisvKiBOb3RlIHRoYXQgdGhlIGNhbGwgdG8gX29ic3RhY2tfbmV3Y2h1bmsgaXMgZW5jbG9zZWQgaW4gKC4uLiwgMCkKKyAgIHNvIHRoYXQgd2UgY2FuIGF2b2lkIGhhdmluZyB2b2lkIGV4cHJlc3Npb25zCisgICBpbiB0aGUgYXJtcyBvZiB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KKyAgIENhc3RpbmcgdGhlIHRoaXJkIG9wZXJhbmQgdG8gdm9pZCB3YXMgdHJpZWQgYmVmb3JlLAorICAgYnV0IHNvbWUgY29tcGlsZXJzIHdvbid0IGFjY2VwdCBpdC4gICovCisKKyMgZGVmaW5lIG9ic3RhY2tfbWFrZV9yb29tKGgsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcC50ZW1waW50ID4gKGgpLT5jaHVua19saW1pdCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSkKKworIyBkZWZpbmUgb2JzdGFja19ncm93KGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcC50ZW1waW50ID4gKGgpLT5jaHVua19saW1pdCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSwJCVwKKyAgbWVtY3B5ICgoaCktPm5leHRfZnJlZSwgd2hlcmUsIChoKS0+dGVtcC50ZW1waW50KSwJCQlcCisgIChoKS0+bmV4dF9mcmVlICs9IChoKS0+dGVtcC50ZW1waW50KQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3cwKGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSArIChoKS0+dGVtcC50ZW1waW50ICsgMSA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXAudGVtcGludCArIDEpLCAwKSA6IDApLAkJXAorICBtZW1jcHkgKChoKS0+bmV4dF9mcmVlLCB3aGVyZSwgKGgpLT50ZW1wLnRlbXBpbnQpLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wLnRlbXBpbnQsCQkJCQlcCisgICooKGgpLT5uZXh0X2ZyZWUpKysgPSAwKQorCisjIGRlZmluZSBvYnN0YWNrXzFncm93KGgsZGF0dW0pCQkJCQkJXAorKCAoKChoKS0+bmV4dF9mcmVlICsgMSA+IChoKS0+Y2h1bmtfbGltaXQpCQkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIDEpLCAwKSA6IDApLAkJCQlcCisgIG9ic3RhY2tfMWdyb3dfZmFzdCAoaCwgZGF0dW0pKQorCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93KGgsZGF0dW0pCQkJCQlcCisoICgoKGgpLT5uZXh0X2ZyZWUgKyBzaXplb2YgKGNoYXIgKikgPiAoaCktPmNodW5rX2xpbWl0KQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgc2l6ZW9mIChjaGFyICopKSwgMCkgOiAwKSwJCVwKKyAgb2JzdGFja19wdHJfZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3coaCxkYXR1bSkJCQkJCVwKKyggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoaW50KSA+IChoKS0+Y2h1bmtfbGltaXQpCQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgc2l6ZW9mIChpbnQpKSwgMCkgOiAwKSwJCQlcCisgIG9ic3RhY2tfaW50X2dyb3dfZmFzdCAoaCwgZGF0dW0pKQorCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93X2Zhc3QoaCxhcHRyKQkJCQkJXAorICAoKChjb25zdCB2b2lkICoqKSAoKGgpLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mICh2b2lkICopKSlbLTFdID0gKGFwdHIpKQorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93X2Zhc3QoaCxhaW50KQkJCQkJXAorICAoKChpbnQgKikgKChoKS0+bmV4dF9mcmVlICs9IHNpemVvZiAoaW50KSkpWy0xXSA9IChhaW50KSkKKworIyBkZWZpbmUgb2JzdGFja19ibGFuayhoLGxlbmd0aCkJCQkJCVwKKyggKGgpLT50ZW1wLnRlbXBpbnQgPSAobGVuZ3RoKSwJCQkJCQlcCisgICgoKGgpLT5jaHVua19saW1pdCAtIChoKS0+bmV4dF9mcmVlIDwgKGgpLT50ZW1wLnRlbXBpbnQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXAudGVtcGludCksIDApIDogMCksCQlcCisgIG9ic3RhY2tfYmxhbmtfZmFzdCAoaCwgKGgpLT50ZW1wLnRlbXBpbnQpKQorCisjIGRlZmluZSBvYnN0YWNrX2FsbG9jKGgsbGVuZ3RoKQkJCQkJXAorIChvYnN0YWNrX2JsYW5rICgoaCksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weShoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyAob2JzdGFja19ncm93ICgoaCksICh3aGVyZSksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisgKG9ic3RhY2tfZ3JvdzAgKChoKSwgKHdoZXJlKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKKworIyBkZWZpbmUgb2JzdGFja19maW5pc2goaCkJCQkJCQlcCisoICgoaCktPm5leHRfZnJlZSA9PSAoaCktPm9iamVjdF9iYXNlCQkJCQlcCisgICA/ICgoKGgpLT5tYXliZV9lbXB0eV9vYmplY3QgPSAxKSwgMCkJCQkJCVwKKyAgIDogMCksCQkJCQkJCQlcCisgIChoKS0+dGVtcC50ZW1wcHRyID0gKGgpLT5vYmplY3RfYmFzZSwJCQkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUJCQkJCQkJXAorICAgID0gX19QVFJfQUxJR04gKChoKS0+b2JqZWN0X2Jhc2UsIChoKS0+bmV4dF9mcmVlLAkJCVwKKwkJICAgKGgpLT5hbGlnbm1lbnRfbWFzayksCQkJCVwKKyAgKCgoaCktPm5leHRfZnJlZSAtIChjaGFyICopIChoKS0+Y2h1bmsJCQkJXAorICAgID4gKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspCQkJCVwKKyAgID8gKChoKS0+bmV4dF9mcmVlID0gKGgpLT5jaHVua19saW1pdCkgOiAwKSwJCQkJXAorICAoaCktPm9iamVjdF9iYXNlID0gKGgpLT5uZXh0X2ZyZWUsCQkJCQlcCisgIChoKS0+dGVtcC50ZW1wcHRyKQorCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoaCxvYmopCQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChjaGFyICopIChvYmopIC0gKGNoYXIgKikgKGgpLT5jaHVuaywJCVwKKyAgKCgoKGgpLT50ZW1wLnRlbXBpbnQgPiAwCQkJCQkJXAorICAgICYmIChoKS0+dGVtcC50ZW1waW50IDwgKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspKQlcCisgICA/IChwdHJkaWZmX3QpICgoaCktPm5leHRfZnJlZSA9IChoKS0+b2JqZWN0X2Jhc2UJCQkJXAorCSAgICA9IChoKS0+dGVtcC50ZW1waW50ICsgKGNoYXIgKikgKGgpLT5jaHVuaykJCQlcCisgICA6ICgoKG9ic3RhY2tfZnJlZSkgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQgKyAoY2hhciAqKSAoaCktPmNodW5rKSwgMCksIDApKSkKKworI2VuZGlmIC8qIG5vdCBfX0dOVUNfXyBvciBub3QgX19TVERDX18gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CS8qIEMrKyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBvYnN0YWNrLmggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9wb2xsL3BvbGwuYyBiL2NvbXBhdC9wb2xsL3BvbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE2ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3BvbGwvcG9sbC5jCkBAIC0wLDAgKzEsNjA4IEBACisvKiBFbXVsYXRpb24gZm9yIHBvbGwoMikKKyAgIENvbnRyaWJ1dGVkIGJ5IFBhb2xvIEJvbnppbmkuCisKKyAgIENvcHlyaWdodCAyMDAxLTIwMDMsIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZ251bGliLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRvIGJ1bXAgdGhlIG1pbmltdW0gV2luZG93cyB2ZXJzaW9uIHRvIFdpbmRvd3MgVmlzdGEgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworLyogVGVsbCBnY2Mgbm90IHRvIHdhcm4gYWJvdXQgdGhlIChuZmQgPCAwKSB0ZXN0cywgYmVsb3cuICAqLworI2lmIChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pIHx8IDQgPCBfX0dOVUNfXworIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd0eXBlLWxpbWl0cyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSU4zMikKKyMgaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKyMgZGVmaW5lIFdJTjMyX05BVElWRQorIyBpZiBkZWZpbmVkIChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX1dJTjMyX1dJTk5UKQorIyAgZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDIKKyMgZW5kaWYKKyMgaW5jbHVkZSA8d2luc29jazIuaD4KKyMgaW5jbHVkZSA8d2luZG93cy5oPgorIyBpbmNsdWRlIDxpby5oPgorIyBpbmNsdWRlIDxzdGRpby5oPgorIyBpbmNsdWRlIDxjb25pby5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorIyBpZm5kZWYgTk9fU1lTX1NFTEVDVF9ICisjICBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgInBvbGwuaCIKKworI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyMgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19GSUxJT19ICisjIGluY2x1ZGUgPHN5cy9maWxpby5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZm5kZWYgSU5GVElNCisjIGRlZmluZSBJTkZUSU0gKC0xKQorI2VuZGlmCisKKy8qIEJlT1MgZG9lcyBub3QgaGF2ZSBNU0dfUEVFSy4gICovCisjaWZuZGVmIE1TR19QRUVLCisjIGRlZmluZSBNU0dfUEVFSyAwCisjZW5kaWYKKworI2lmZGVmIFdJTjMyX05BVElWRQorCisjZGVmaW5lIElzQ29uc29sZUhhbmRsZShoKSAoKChsb25nKSAoaW50cHRyX3QpIChoKSAmIDMpID09IDMpCisKK3N0YXRpYyBCT09MCitJc1NvY2tldEhhbmRsZSAoSEFORExFIGgpCit7CisgIFdTQU5FVFdPUktFVkVOVFMgZXY7CisKKyAgaWYgKElzQ29uc29sZUhhbmRsZSAoaCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIFVuZGVyIFdpbmUsIGl0IHNlZW1zIHRoYXQgZ2V0c29ja29wdCByZXR1cm5zIDAgZm9yIHBpcGVzIHRvby4KKyAgICAgV1NBRW51bU5ldHdvcmtFdmVudHMgaW5zdGVhZCBkaXN0aW5ndWlzaGVzIHRoZSB0d28gY29ycmVjdGx5LiAgKi8KKyAgZXYubE5ldHdvcmtFdmVudHMgPSAweERFQURCRUVGOworICBXU0FFbnVtTmV0d29ya0V2ZW50cyAoKFNPQ0tFVCkgaCwgTlVMTCwgJmV2KTsKKyAgcmV0dXJuIGV2LmxOZXR3b3JrRXZlbnRzICE9IDB4REVBREJFRUY7Cit9CisKKy8qIERlY2xhcmUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBudGRsbCBmdW5jdGlvbnMuICAqLwordHlwZWRlZiBzdHJ1Y3QgX0ZJTEVfUElQRV9MT0NBTF9JTkZPUk1BVElPTiB7CisgIFVMT05HIE5hbWVkUGlwZVR5cGU7CisgIFVMT05HIE5hbWVkUGlwZUNvbmZpZ3VyYXRpb247CisgIFVMT05HIE1heGltdW1JbnN0YW5jZXM7CisgIFVMT05HIEN1cnJlbnRJbnN0YW5jZXM7CisgIFVMT05HIEluYm91bmRRdW90YTsKKyAgVUxPTkcgUmVhZERhdGFBdmFpbGFibGU7CisgIFVMT05HIE91dGJvdW5kUXVvdGE7CisgIFVMT05HIFdyaXRlUXVvdGFBdmFpbGFibGU7CisgIFVMT05HIE5hbWVkUGlwZVN0YXRlOworICBVTE9ORyBOYW1lZFBpcGVFbmQ7Cit9IEZJTEVfUElQRV9MT0NBTF9JTkZPUk1BVElPTiwgKlBGSUxFX1BJUEVfTE9DQUxfSU5GT1JNQVRJT047CisKK3R5cGVkZWYgc3RydWN0IF9JT19TVEFUVVNfQkxPQ0sKK3sKKyAgdW5pb24geworICAgIERXT1JEIFN0YXR1czsKKyAgICBQVk9JRCBQb2ludGVyOworICB9IHU7CisgIFVMT05HX1BUUiBJbmZvcm1hdGlvbjsKK30gSU9fU1RBVFVTX0JMT0NLLCAqUElPX1NUQVRVU19CTE9DSzsKKwordHlwZWRlZiBlbnVtIF9GSUxFX0lORk9STUFUSU9OX0NMQVNTIHsKKyAgRmlsZVBpcGVMb2NhbEluZm9ybWF0aW9uID0gMjQKK30gRklMRV9JTkZPUk1BVElPTl9DTEFTUywgKlBGSUxFX0lORk9STUFUSU9OX0NMQVNTOworCit0eXBlZGVmIERXT1JEIChXSU5BUEkgKlBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlKQorCSAoSEFORExFLCBJT19TVEFUVVNfQkxPQ0sgKiwgVk9JRCAqLCBVTE9ORywgRklMRV9JTkZPUk1BVElPTl9DTEFTUyk7CisKKyMgaWZuZGVmIFBJUEVfQlVGCisjICBkZWZpbmUgUElQRV9CVUYgICAgICA1MTIKKyMgZW5kaWYKKworLyogQ29tcHV0ZSByZXZlbnRzIHZhbHVlcyBmb3IgZmlsZSBoYW5kbGUgSC4gIElmIHNvbWUgZXZlbnRzIGNhbm5vdCBoYXBwZW4KKyAgIGZvciB0aGUgaGFuZGxlLCBlbGltaW5hdGUgdGhlbSBmcm9tICpQX1NPVUdIVC4gICovCisKK3N0YXRpYyBpbnQKK3dpbjMyX2NvbXB1dGVfcmV2ZW50cyAoSEFORExFIGgsIGludCAqcF9zb3VnaHQpCit7CisgIGludCBpLCByZXQsIGhhcHBlbmVkOworICBJTlBVVF9SRUNPUkQgKmlyYnVmZmVyOworICBEV09SRCBhdmFpbCwgbmJ1ZmZlcjsKKyAgQk9PTCBiUmV0OworCisgIHN3aXRjaCAoR2V0RmlsZVR5cGUgKGgpKQorICAgIHsKKyAgICBjYXNlIEZJTEVfVFlQRV9QSVBFOgorICAgICAgaGFwcGVuZWQgPSAwOworICAgICAgaWYgKFBlZWtOYW1lZFBpcGUgKGgsIE5VTEwsIDAsIE5VTEwsICZhdmFpbCwgTlVMTCkgIT0gMCkKKwl7CisJICBpZiAoYXZhaWwpCisJICAgIGhhcHBlbmVkIHw9ICpwX3NvdWdodCAmIChQT0xMSU4gfCBQT0xMUkROT1JNKTsKKwl9CisgICAgICBlbHNlIGlmIChHZXRMYXN0RXJyb3IgKCkgPT0gRVJST1JfQlJPS0VOX1BJUEUpCisJaGFwcGVuZWQgfD0gUE9MTEhVUDsKKworICAgICAgZWxzZQorCXsKKwkgIC8qIEl0IHdhcyB0aGUgd3JpdGUtZW5kIG9mIHRoZSBwaXBlLiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vCisJICAgICByZWxpYWJsZSB3YXkgb2Yga25vd2luZyBpZiBpdCBjYW4gYmUgd3JpdHRlbiB3aXRob3V0IGJsb2NraW5nLgorCSAgICAgSnVzdCBzYXkgdGhhdCBpdCdzIGFsbCBnb29kLiAqLworCSAgICBoYXBwZW5lZCB8PSAqcF9zb3VnaHQgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKTsKKwl9CisgICAgICByZXR1cm4gaGFwcGVuZWQ7CisKKyAgICBjYXNlIEZJTEVfVFlQRV9DSEFSOgorICAgICAgcmV0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoaCwgMCk7CisgICAgICBpZiAoIUlzQ29uc29sZUhhbmRsZSAoaCkpCisJcmV0dXJuIHJldCA9PSBXQUlUX09CSkVDVF8wID8gKnBfc291Z2h0ICYgfihQT0xMUFJJIHwgUE9MTFJEQkFORCkgOiAwOworCisgICAgICBuYnVmZmVyID0gYXZhaWwgPSAwOworICAgICAgYlJldCA9IEdldE51bWJlck9mQ29uc29sZUlucHV0RXZlbnRzIChoLCAmbmJ1ZmZlcik7CisgICAgICBpZiAoYlJldCkKKwl7CisJICAvKiBJbnB1dCBidWZmZXIuICAqLworCSAgKnBfc291Z2h0ICY9IFBPTExJTiB8IFBPTExSRE5PUk07CisJICBpZiAobmJ1ZmZlciA9PSAwKQorCSAgICByZXR1cm4gUE9MTEhVUDsKKwkgIGlmICghKnBfc291Z2h0KQorCSAgICByZXR1cm4gMDsKKworCSAgaXJidWZmZXIgPSAoSU5QVVRfUkVDT1JEICopIGFsbG9jYSAobmJ1ZmZlciAqIHNpemVvZiAoSU5QVVRfUkVDT1JEKSk7CisJICBiUmV0ID0gUGVla0NvbnNvbGVJbnB1dCAoaCwgaXJidWZmZXIsIG5idWZmZXIsICZhdmFpbCk7CisJICBpZiAoIWJSZXQgfHwgYXZhaWwgPT0gMCkKKwkgICAgcmV0dXJuIFBPTExIVVA7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBhdmFpbDsgaSsrKQorCSAgICBpZiAoaXJidWZmZXJbaV0uRXZlbnRUeXBlID09IEtFWV9FVkVOVCkKKwkgICAgICByZXR1cm4gKnBfc291Z2h0OworCSAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFNjcmVlbiBidWZmZXIuICAqLworCSAgKnBfc291Z2h0ICY9IFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORDsKKwkgIHJldHVybiAqcF9zb3VnaHQ7CisJfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHJldCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKGgsIDApOworICAgICAgaWYgKHJldCA9PSBXQUlUX09CSkVDVF8wKQorCXJldHVybiAqcF9zb3VnaHQgJiB+KFBPTExQUkkgfCBQT0xMUkRCQU5EKTsKKworICAgICAgcmV0dXJuICpwX3NvdWdodCAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpOworICAgIH0KK30KKworLyogQ29udmVydCBmZF9zZXRzIHJldHVybmVkIGJ5IHNlbGVjdCBpbnRvIHJldmVudHMgdmFsdWVzLiAgKi8KKworc3RhdGljIGludAord2luMzJfY29tcHV0ZV9yZXZlbnRzX3NvY2tldCAoU09DS0VUIGgsIGludCBzb3VnaHQsIGxvbmcgbE5ldHdvcmtFdmVudHMpCit7CisgIGludCBoYXBwZW5lZCA9IDA7CisKKyAgaWYgKChsTmV0d29ya0V2ZW50cyAmIChGRF9SRUFEIHwgRkRfQUNDRVBUIHwgRkRfQ0xPU0UpKSA9PSBGRF9BQ0NFUFQpCisgICAgaGFwcGVuZWQgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pICYgc291Z2h0OworCisgIGVsc2UgaWYgKGxOZXR3b3JrRXZlbnRzICYgKEZEX1JFQUQgfCBGRF9BQ0NFUFQgfCBGRF9DTE9TRSkpCisgICAgeworICAgICAgaW50IHIsIGVycm9yOworCisgICAgICBjaGFyIGRhdGFbNjRdOworICAgICAgV1NBU2V0TGFzdEVycm9yICgwKTsKKyAgICAgIHIgPSByZWN2IChoLCBkYXRhLCBzaXplb2YgKGRhdGEpLCBNU0dfUEVFSyk7CisgICAgICBlcnJvciA9IFdTQUdldExhc3RFcnJvciAoKTsKKyAgICAgIFdTQVNldExhc3RFcnJvciAoMCk7CisKKyAgICAgIGlmIChyID4gMCB8fCBlcnJvciA9PSBXU0FFTk9UQ09OTikKKwloYXBwZW5lZCB8PSAoUE9MTElOIHwgUE9MTFJETk9STSkgJiBzb3VnaHQ7CisKKyAgICAgIC8qIERpc3Rpbmd1aXNoIGh1bmctdXAgc29ja2V0cyBmcm9tIG90aGVyIGVycm9ycy4gICovCisgICAgICBlbHNlIGlmIChyID09IDAgfHwgZXJyb3IgPT0gV1NBRVNIVVRET1dOIHx8IGVycm9yID09IFdTQUVDT05OUkVTRVQKKwkgICAgICAgfHwgZXJyb3IgPT0gV1NBRUNPTk5BQk9SVEVEIHx8IGVycm9yID09IFdTQUVORVRSRVNFVCkKKwloYXBwZW5lZCB8PSBQT0xMSFVQOworCisgICAgICBlbHNlCisJaGFwcGVuZWQgfD0gUE9MTEVSUjsKKyAgICB9CisKKyAgaWYgKGxOZXR3b3JrRXZlbnRzICYgKEZEX1dSSVRFIHwgRkRfQ09OTkVDVCkpCisgICAgaGFwcGVuZWQgfD0gKFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCkgJiBzb3VnaHQ7CisKKyAgaWYgKGxOZXR3b3JrRXZlbnRzICYgRkRfT09CKQorICAgIGhhcHBlbmVkIHw9IChQT0xMUFJJIHwgUE9MTFJEQkFORCkgJiBzb3VnaHQ7CisKKyAgcmV0dXJuIGhhcHBlbmVkOworfQorCisjZWxzZSAvKiAhTWluR1cgKi8KKworLyogQ29udmVydCBzZWxlY3QoMikgcmV0dXJuZWQgZmRfc2V0cyBpbnRvIHBvbGwoMikgcmV2ZW50cyB2YWx1ZXMuICAqLworc3RhdGljIGludAorY29tcHV0ZV9yZXZlbnRzIChpbnQgZmQsIGludCBzb3VnaHQsIGZkX3NldCAqcmZkcywgZmRfc2V0ICp3ZmRzLCBmZF9zZXQgKmVmZHMpCit7CisgIGludCBoYXBwZW5lZCA9IDA7CisgIGlmIChGRF9JU1NFVCAoZmQsIHJmZHMpKQorICAgIHsKKyAgICAgIGludCByOworICAgICAgaW50IHNvY2tldF9lcnJubzsKKworIyBpZiBkZWZpbmVkIF9fTUFDSF9fICYmIGRlZmluZWQgX19BUFBMRV9fCisgICAgICAvKiBUaGVyZSBpcyBhIGJ1ZyBpbiBNYWMgT1MgWCB0aGF0IGNhdXNlcyBpdCB0byBpZ25vcmUgTVNHX1BFRUsKKwkgZm9yIHNvbWUga2luZHMgb2YgZGVzY3JpcHRvcnMuICBEZXRlY3QgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIGEKKwkgY29ubmVjdGVkIHNvY2tldCwgYSBzZXJ2ZXIgc29ja2V0LCBvciBzb21ldGhpbmcgZWxzZSB1c2luZyBhCisJIDAtYnl0ZSByZWN2LCBhbmQgdXNlIGlvY3RsKDIpIHRvIGRldGVjdCBQT0xMSFVQLiAgKi8KKyAgICAgIHIgPSByZWN2IChmZCwgTlVMTCwgMCwgTVNHX1BFRUspOworICAgICAgc29ja2V0X2Vycm5vID0gKHIgPCAwKSA/IGVycm5vIDogMDsKKyAgICAgIGlmIChyID09IDAgfHwgc29ja2V0X2Vycm5vID09IEVOT1RTT0NLKQorCWlvY3RsIChmZCwgRklPTlJFQUQsICZyKTsKKyMgZWxzZQorICAgICAgY2hhciBkYXRhWzY0XTsKKyAgICAgIHIgPSByZWN2IChmZCwgZGF0YSwgc2l6ZW9mIChkYXRhKSwgTVNHX1BFRUspOworICAgICAgc29ja2V0X2Vycm5vID0gKHIgPCAwKSA/IGVycm5vIDogMDsKKyMgZW5kaWYKKyAgICAgIGlmIChyID09IDApCisJaGFwcGVuZWQgfD0gUE9MTEhVUDsKKworICAgICAgLyogSWYgdGhlIGV2ZW50IGhhcHBlbmVkIG9uIGFuIHVuY29ubmVjdGVkIHNlcnZlciBzb2NrZXQsCisJIHRoYXQncyBmaW5lLiAqLworICAgICAgZWxzZSBpZiAociA+IDAgfHwgKCAvKiAociA9PSAtMSkgJiYgKi8gc29ja2V0X2Vycm5vID09IEVOT1RDT05OKSkKKwloYXBwZW5lZCB8PSAoUE9MTElOIHwgUE9MTFJETk9STSkgJiBzb3VnaHQ7CisKKyAgICAgIC8qIERpc3Rpbmd1aXNoIGh1bmctdXAgc29ja2V0cyBmcm9tIG90aGVyIGVycm9ycy4gICovCisgICAgICBlbHNlIGlmIChzb2NrZXRfZXJybm8gPT0gRVNIVVRET1dOIHx8IHNvY2tldF9lcnJubyA9PSBFQ09OTlJFU0VUCisJICAgICAgIHx8IHNvY2tldF9lcnJubyA9PSBFQ09OTkFCT1JURUQgfHwgc29ja2V0X2Vycm5vID09IEVORVRSRVNFVCkKKwloYXBwZW5lZCB8PSBQT0xMSFVQOworCisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgdXNlIHJlY3YoKSBvbiBub24tc29ja2V0LCBpbmNsdWRpbmcgSFAgTm9uU3RvcCAqLworICAgICAgZWxzZSBpZiAoLyogKHIgPT0gLTEpICYmICovIHNvY2tldF9lcnJubyA9PSBFTk9UU09DSykKKwloYXBwZW5lZCB8PSAoUE9MTElOIHwgUE9MTFJETk9STSkgJiBzb3VnaHQ7CisKKyAgICAgIGVsc2UKKwloYXBwZW5lZCB8PSBQT0xMRVJSOworICAgIH0KKworICBpZiAoRkRfSVNTRVQgKGZkLCB3ZmRzKSkKKyAgICBoYXBwZW5lZCB8PSAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSAmIHNvdWdodDsKKworICBpZiAoRkRfSVNTRVQgKGZkLCBlZmRzKSkKKyAgICBoYXBwZW5lZCB8PSAoUE9MTFBSSSB8IFBPTExSREJBTkQpICYgc291Z2h0OworCisgIHJldHVybiBoYXBwZW5lZDsKK30KKyNlbmRpZiAvKiAhTWluR1cgKi8KKworaW50Citwb2xsIChzdHJ1Y3QgcG9sbGZkICpwZmQsIG5mZHNfdCBuZmQsIGludCB0aW1lb3V0KQoreworI2lmbmRlZiBXSU4zMl9OQVRJVkUKKyAgZmRfc2V0IHJmZHMsIHdmZHMsIGVmZHM7CisgIHN0cnVjdCB0aW1ldmFsIHR2OworICBzdHJ1Y3QgdGltZXZhbCAqcHR2OworICBpbnQgbWF4ZmQsIHJjOworICBuZmRzX3QgaTsKKworIyBpZmRlZiBfU0NfT1BFTl9NQVgKKyAgc3RhdGljIGludCBzY19vcGVuX21heCA9IC0xOworCisgIGlmIChuZmQgPCAwCisgICAgICB8fCAobmZkID4gc2Nfb3Blbl9tYXgKKwkgICYmIChzY19vcGVuX21heCAhPSAtMQorCSAgICAgIHx8IG5mZCA+IChzY19vcGVuX21heCA9IHN5c2NvbmYgKF9TQ19PUEVOX01BWCkpKSkpCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorIyBlbHNlIC8qICFfU0NfT1BFTl9NQVggKi8KKyMgIGlmZGVmIE9QRU5fTUFYCisgIGlmIChuZmQgPCAwIHx8IG5mZCA+IE9QRU5fTUFYKQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyMgIGVuZGlmIC8qIE9QRU5fTUFYIC0tIGVsc2UsIG5vIGNoZWNrIGlzIG5lZWRlZCAqLworIyBlbmRpZiAvKiAhX1NDX09QRU5fTUFYICovCisKKyAgLyogRUZBVUxUIGlzIG5vdCBuZWNlc3NhcnkgdG8gaW1wbGVtZW50LCBidXQgbGV0J3MgZG8gaXQgaW4gdGhlCisgICAgIHNpbXBsZXN0IGNhc2UuICovCisgIGlmICghcGZkICYmIG5mZCkKKyAgICB7CisgICAgICBlcnJubyA9IEVGQVVMVDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogY29udmVydCB0aW1lb3V0IG51bWJlciBpbnRvIGEgdGltZXZhbCBzdHJ1Y3R1cmUgKi8KKyAgaWYgKHRpbWVvdXQgPT0gMCkKKyAgICB7CisgICAgICBwdHYgPSAmdHY7CisgICAgICBwdHYtPnR2X3NlYyA9IDA7CisgICAgICBwdHYtPnR2X3VzZWMgPSAwOworICAgIH0KKyAgZWxzZSBpZiAodGltZW91dCA+IDApCisgICAgeworICAgICAgcHR2ID0gJnR2OworICAgICAgcHR2LT50dl9zZWMgPSB0aW1lb3V0IC8gMTAwMDsKKyAgICAgIHB0di0+dHZfdXNlYyA9ICh0aW1lb3V0ICUgMTAwMCkgKiAxMDAwOworICAgIH0KKyAgZWxzZSBpZiAodGltZW91dCA9PSBJTkZUSU0pCisgICAgLyogd2FpdCBmb3JldmVyICovCisgICAgcHR2ID0gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBjcmVhdGUgZmQgc2V0cyBhbmQgZGV0ZXJtaW5lIG1heCBmZCAqLworICBtYXhmZCA9IC0xOworICBGRF9aRVJPICgmcmZkcyk7CisgIEZEX1pFUk8gKCZ3ZmRzKTsKKyAgRkRfWkVSTyAoJmVmZHMpOworICBmb3IgKGkgPSAwOyBpIDwgbmZkOyBpKyspCisgICAgeworICAgICAgaWYgKHBmZFtpXS5mZCA8IDApCisJY29udGludWU7CisKKyAgICAgIGlmIChwZmRbaV0uZXZlbnRzICYgKFBPTExJTiB8IFBPTExSRE5PUk0pKQorCUZEX1NFVCAocGZkW2ldLmZkLCAmcmZkcyk7CisKKyAgICAgIC8qIHNlZSBzZWxlY3QoMik6ICJ0aGUgb25seSBleGNlcHRpb25hbCBjb25kaXRpb24gZGV0ZWN0YWJsZQorCSBpcyBvdXQtb2YtYmFuZCBkYXRhIHJlY2VpdmVkIG9uIGEgc29ja2V0IiwgaGVuY2Ugd2UgcHVzaAorCSBQT0xMV1JCQU5EIGV2ZW50cyBvbnRvIHdmZHMgaW5zdGVhZCBvZiBlZmRzLiAqLworICAgICAgaWYgKHBmZFtpXS5ldmVudHMgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSkKKwlGRF9TRVQgKHBmZFtpXS5mZCwgJndmZHMpOworICAgICAgaWYgKHBmZFtpXS5ldmVudHMgJiAoUE9MTFBSSSB8IFBPTExSREJBTkQpKQorCUZEX1NFVCAocGZkW2ldLmZkLCAmZWZkcyk7CisgICAgICBpZiAocGZkW2ldLmZkID49IG1heGZkCisJICAmJiAocGZkW2ldLmV2ZW50cyAmIChQT0xMSU4gfCBQT0xMT1VUIHwgUE9MTFBSSQorCQkJICAgICAgIHwgUE9MTFJETk9STSB8IFBPTExSREJBTkQKKwkJCSAgICAgICB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSkpCisJeworCSAgbWF4ZmQgPSBwZmRbaV0uZmQ7CisJICBpZiAobWF4ZmQgPiBGRF9TRVRTSVpFKQorCSAgICB7CisJICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7CisJICAgICAgcmV0dXJuIC0xOworCSAgICB9CisJfQorICAgIH0KKworICAvKiBleGFtaW5lIGZkIHNldHMgKi8KKyAgcmMgPSBzZWxlY3QgKG1heGZkICsgMSwgJnJmZHMsICZ3ZmRzLCAmZWZkcywgcHR2KTsKKyAgaWYgKHJjIDwgMCkKKyAgICByZXR1cm4gcmM7CisKKyAgLyogZXN0YWJsaXNoIHJlc3VsdHMgKi8KKyAgcmMgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgbmZkOyBpKyspCisgICAgaWYgKHBmZFtpXS5mZCA8IDApCisgICAgICBwZmRbaV0ucmV2ZW50cyA9IDA7CisgICAgZWxzZQorICAgICAgeworCWludCBoYXBwZW5lZCA9IGNvbXB1dGVfcmV2ZW50cyAocGZkW2ldLmZkLCBwZmRbaV0uZXZlbnRzLAorCQkJCQkmcmZkcywgJndmZHMsICZlZmRzKTsKKwlpZiAoaGFwcGVuZWQpCisJICB7CisJICAgIHBmZFtpXS5yZXZlbnRzID0gaGFwcGVuZWQ7CisJICAgIHJjKys7CisJICB9CisJZWxzZQorCSAgeworCSAgICBwZmRbaV0ucmV2ZW50cyA9IDA7CisJICB9CisgICAgICB9CisKKyAgcmV0dXJuIHJjOworI2Vsc2UKKyAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHR2MDsKKyAgc3RhdGljIEhBTkRMRSBoRXZlbnQ7CisgIFdTQU5FVFdPUktFVkVOVFMgZXY7CisgIEhBTkRMRSBoLCBoYW5kbGVfYXJyYXlbRkRfU0VUU0laRSArIDJdOworICBEV09SRCByZXQsIHdhaXRfdGltZW91dCwgbmhhbmRsZXMsIG9yaWdfdGltZW91dCA9IDA7CisgIFVMT05HTE9ORyBzdGFydCA9IDA7CisgIGZkX3NldCByZmRzLCB3ZmRzLCB4ZmRzOworICBCT09MIHBvbGxfYWdhaW47CisgIE1TRyBtc2c7CisgIGludCByYyA9IDA7CisgIG5mZHNfdCBpOworCisgIGlmIChuZmQgPCAwIHx8IHRpbWVvdXQgPCAtMSkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKHRpbWVvdXQgIT0gSU5GVElNKQorICAgIHsKKyAgICAgIG9yaWdfdGltZW91dCA9IHRpbWVvdXQ7CisgICAgICBzdGFydCA9IEdldFRpY2tDb3VudDY0KCk7CisgICAgfQorCisgIGlmICghaEV2ZW50KQorICAgIGhFdmVudCA9IENyZWF0ZUV2ZW50IChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCityZXN0YXJ0OgorICBoYW5kbGVfYXJyYXlbMF0gPSBoRXZlbnQ7CisgIG5oYW5kbGVzID0gMTsKKyAgRkRfWkVSTyAoJnJmZHMpOworICBGRF9aRVJPICgmd2Zkcyk7CisgIEZEX1pFUk8gKCZ4ZmRzKTsKKworICAvKiBDbGFzc2lmeSBzb2NrZXQgaGFuZGxlcyBhbmQgY3JlYXRlIGZkIHNldHMuICovCisgIGZvciAoaSA9IDA7IGkgPCBuZmQ7IGkrKykKKyAgICB7CisgICAgICBpbnQgc291Z2h0ID0gcGZkW2ldLmV2ZW50czsKKyAgICAgIHBmZFtpXS5yZXZlbnRzID0gMDsKKyAgICAgIGlmIChwZmRbaV0uZmQgPCAwKQorCWNvbnRpbnVlOworICAgICAgaWYgKCEoc291Z2h0ICYgKFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQKKwkJICAgICAgfCBQT0xMUFJJIHwgUE9MTFJEQkFORCkpKQorCWNvbnRpbnVlOworCisgICAgICBoID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUgKHBmZFtpXS5mZCk7CisgICAgICBhc3NlcnQgKGggIT0gTlVMTCk7CisgICAgICBpZiAoSXNTb2NrZXRIYW5kbGUgKGgpKQorCXsKKwkgIGludCByZXF1ZXN0ZWQgPSBGRF9DTE9TRTsKKworCSAgLyogc2VlIGFib3ZlOyBzb2NrZXQgaGFuZGxlcyBhcmUgbWFwcGVkIG9udG8gc2VsZWN0LiAgKi8KKwkgIGlmIChzb3VnaHQgJiAoUE9MTElOIHwgUE9MTFJETk9STSkpCisJICAgIHsKKwkgICAgICByZXF1ZXN0ZWQgfD0gRkRfUkVBRCB8IEZEX0FDQ0VQVDsKKwkgICAgICBGRF9TRVQgKChTT0NLRVQpIGgsICZyZmRzKTsKKwkgICAgfQorCSAgaWYgKHNvdWdodCAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpKQorCSAgICB7CisJICAgICAgcmVxdWVzdGVkIHw9IEZEX1dSSVRFIHwgRkRfQ09OTkVDVDsKKwkgICAgICBGRF9TRVQgKChTT0NLRVQpIGgsICZ3ZmRzKTsKKwkgICAgfQorCSAgaWYgKHNvdWdodCAmIChQT0xMUFJJIHwgUE9MTFJEQkFORCkpCisJICAgIHsKKwkgICAgICByZXF1ZXN0ZWQgfD0gRkRfT09COworCSAgICAgIEZEX1NFVCAoKFNPQ0tFVCkgaCwgJnhmZHMpOworCSAgICB9CisKKwkgIGlmIChyZXF1ZXN0ZWQpCisJICAgIFdTQUV2ZW50U2VsZWN0ICgoU09DS0VUKSBoLCBoRXZlbnQsIHJlcXVlc3RlZCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFBvbGwgbm93LiAgSWYgd2UgZ2V0IGFuIGV2ZW50LCBkbyBub3QgcG9sbCBhZ2Fpbi4gIEFsc28sCisJICAgICBzY3JlZW4gYnVmZmVyIGhhbmRsZXMgYXJlIHdhaXRhYmxlLCBhbmQgdGhleSdsbCBibG9jayB1bnRpbAorCSAgICAgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlLiAgd2luMzJfY29tcHV0ZV9yZXZlbnRzIGVsaW1pbmF0ZXMKKwkgICAgIGJpdHMgZm9yIHRoZSAid3JvbmciIGRpcmVjdGlvbi4gKi8KKwkgIHBmZFtpXS5yZXZlbnRzID0gd2luMzJfY29tcHV0ZV9yZXZlbnRzIChoLCAmc291Z2h0KTsKKwkgIGlmIChzb3VnaHQpCisJICAgIGhhbmRsZV9hcnJheVtuaGFuZGxlcysrXSA9IGg7CisJICBpZiAocGZkW2ldLnJldmVudHMpCisJICAgIHRpbWVvdXQgPSAwOworCX0KKyAgICB9CisKKyAgaWYgKHNlbGVjdCAoMCwgJnJmZHMsICZ3ZmRzLCAmeGZkcywgJnR2MCkgPiAwKQorICAgIHsKKyAgICAgIC8qIERvIE1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHMgYW55d2F5IHRvIGRpc3BhdGNoIG1lc3NhZ2VzLCBidXQKKwkgbm8gbmVlZCB0byBjYWxsIHNlbGVjdCBhZ2Fpbi4gICovCisgICAgICBwb2xsX2FnYWluID0gRkFMU0U7CisgICAgICB3YWl0X3RpbWVvdXQgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHBvbGxfYWdhaW4gPSBUUlVFOworICAgICAgaWYgKHRpbWVvdXQgPT0gSU5GVElNKQorCXdhaXRfdGltZW91dCA9IElORklOSVRFOworICAgICAgZWxzZQorCXdhaXRfdGltZW91dCA9IHRpbWVvdXQ7CisgICAgfQorCisgIGZvciAoOzspCisgICAgeworICAgICAgcmV0ID0gTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cyAobmhhbmRsZXMsIGhhbmRsZV9hcnJheSwgRkFMU0UsCisJCQkJICAgICAgIHdhaXRfdGltZW91dCwgUVNfQUxMSU5QVVQpOworCisgICAgICBpZiAocmV0ID09IFdBSVRfT0JKRUNUXzAgKyBuaGFuZGxlcykKKwl7CisJICAvKiBuZXcgaW5wdXQgb2Ygc29tZSBvdGhlciBraW5kICovCisJICBCT09MIGJSZXQ7CisJICB3aGlsZSAoKGJSZXQgPSBQZWVrTWVzc2FnZSAoJm1zZywgTlVMTCwgMCwgMCwgUE1fUkVNT1ZFKSkgIT0gMCkKKwkgICAgeworCSAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UgKCZtc2cpOworCSAgICAgIERpc3BhdGNoTWVzc2FnZSAoJm1zZyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJYnJlYWs7CisgICAgfQorCisgIGlmIChwb2xsX2FnYWluKQorICAgIHNlbGVjdCAoMCwgJnJmZHMsICZ3ZmRzLCAmeGZkcywgJnR2MCk7CisKKyAgLyogUGxhY2UgYSBzZW50aW5lbCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4gICovCisgIGhhbmRsZV9hcnJheVtuaGFuZGxlc10gPSBOVUxMOworICBuaGFuZGxlcyA9IDE7CisgIGZvciAoaSA9IDA7IGkgPCBuZmQ7IGkrKykKKyAgICB7CisgICAgICBpbnQgaGFwcGVuZWQ7CisKKyAgICAgIGlmIChwZmRbaV0uZmQgPCAwKQorCWNvbnRpbnVlOworICAgICAgaWYgKCEocGZkW2ldLmV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUkROT1JNIHwKKwkJCSAgICAgUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSkpCisJY29udGludWU7CisKKyAgICAgIGggPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZSAocGZkW2ldLmZkKTsKKyAgICAgIGlmIChoICE9IGhhbmRsZV9hcnJheVtuaGFuZGxlc10pCisJeworCSAgLyogSXQncyBhIHNvY2tldC4gICovCisJICBXU0FFbnVtTmV0d29ya0V2ZW50cyAoKFNPQ0tFVCkgaCwgTlVMTCwgJmV2KTsKKwkgIFdTQUV2ZW50U2VsZWN0ICgoU09DS0VUKSBoLCBOVUxMLCAwKTsKKworCSAgLyogSWYgd2UncmUgbHVja3ksIFdTQUVudW1OZXR3b3JrRXZlbnRzIGFscmVhZHkgcHJvdmlkZWQgYSB3YXkKKwkgICAgIHRvIGRpc3Rpbmd1aXNoIEZEX1JFQUQgYW5kIEZEX0FDQ0VQVDsgdGhpcyBzYXZlcyBhIHJlY3YgbGF0ZXIuICAqLworCSAgaWYgKEZEX0lTU0VUICgoU09DS0VUKSBoLCAmcmZkcykKKwkgICAgICAmJiAhKGV2LmxOZXR3b3JrRXZlbnRzICYgKEZEX1JFQUQgfCBGRF9BQ0NFUFQpKSkKKwkgICAgZXYubE5ldHdvcmtFdmVudHMgfD0gRkRfUkVBRCB8IEZEX0FDQ0VQVDsKKwkgIGlmIChGRF9JU1NFVCAoKFNPQ0tFVCkgaCwgJndmZHMpKQorCSAgICBldi5sTmV0d29ya0V2ZW50cyB8PSBGRF9XUklURSB8IEZEX0NPTk5FQ1Q7CisJICBpZiAoRkRfSVNTRVQgKChTT0NLRVQpIGgsICZ4ZmRzKSkKKwkgICAgZXYubE5ldHdvcmtFdmVudHMgfD0gRkRfT09COworCisJICBoYXBwZW5lZCA9IHdpbjMyX2NvbXB1dGVfcmV2ZW50c19zb2NrZXQgKChTT0NLRVQpIGgsIHBmZFtpXS5ldmVudHMsCisJCQkJCQkgICBldi5sTmV0d29ya0V2ZW50cyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIE5vdCBhIHNvY2tldC4gICovCisJICBpbnQgc291Z2h0ID0gcGZkW2ldLmV2ZW50czsKKwkgIGhhcHBlbmVkID0gd2luMzJfY29tcHV0ZV9yZXZlbnRzIChoLCAmc291Z2h0KTsKKwkgIG5oYW5kbGVzKys7CisJfQorCisgICAgICAgaWYgKChwZmRbaV0ucmV2ZW50cyB8PSBoYXBwZW5lZCkgIT0gMCkKKwlyYysrOworICAgIH0KKworICBpZiAoIXJjICYmIG9yaWdfdGltZW91dCAmJiB0aW1lb3V0ICE9IElORlRJTSkKKyAgICB7CisgICAgICBVTE9OR0xPTkcgZWxhcHNlZCA9IEdldFRpY2tDb3VudDY0KCkgLSBzdGFydDsKKyAgICAgIHRpbWVvdXQgPSBlbGFwc2VkID49IG9yaWdfdGltZW91dCA/IDAgOiAoaW50KShvcmlnX3RpbWVvdXQgLSBlbGFwc2VkKTsKKyAgICB9CisKKyAgaWYgKCFyYyAmJiB0aW1lb3V0KQorICAgIHsKKyAgICAgIFNsZWVwRXggKDEsIFRSVUUpOworICAgICAgZ290byByZXN0YXJ0OworICAgIH0KKworICByZXR1cm4gcmM7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9wb2xsL3BvbGwuaCBiL2NvbXBhdC9wb2xsL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE1OTczCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3BvbGwvcG9sbC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEhlYWRlciBmb3IgcG9sbCgyKSBlbXVsYXRpb24KKyAgIENvbnRyaWJ1dGVkIGJ5IFBhb2xvIEJvbnppbmkuCisKKyAgIENvcHlyaWdodCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBnbnVsaWIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfR0xfUE9MTF9ICisjZGVmaW5lIF9HTF9QT0xMX0gKKworI2lmIGRlZmluZWQoX1dJTjMyX1dJTk5UKSAmJiBfV0lOMzJfV0lOTlQgPj0gMHg2MDAKKy8qIFZpc3RhIGhhcyBpdHMgb3duLCBzb2NrZXQtb25seSBwb2xsKCkgKi8KKyN1bmRlZiBQT0xMSU4KKyN1bmRlZiBQT0xMUFJJCisjdW5kZWYgUE9MTE9VVAorI3VuZGVmIFBPTExFUlIKKyN1bmRlZiBQT0xMSFVQCisjdW5kZWYgUE9MTE5WQUwKKyN1bmRlZiBQT0xMUkROT1JNCisjdW5kZWYgUE9MTFJEQkFORAorI3VuZGVmIFBPTExXUk5PUk0KKyN1bmRlZiBQT0xMV1JCQU5ECisjZGVmaW5lIHBvbGxmZCBjb21wYXRfcG9sbGZkCisjZW5kaWYKKworLyogZmFrZSBhIHBvbGwoMikgZW52aXJvbm1lbnQgKi8KKyNkZWZpbmUgUE9MTElOICAgICAgMHgwMDAxICAgICAgLyogYW55IHJlYWRhYmxlIGRhdGEgYXZhaWxhYmxlICAgKi8KKyNkZWZpbmUgUE9MTFBSSSAgICAgMHgwMDAyICAgICAgLyogT09CL1VyZ2VudCByZWFkYWJsZSBkYXRhICAgICAgKi8KKyNkZWZpbmUgUE9MTE9VVCAgICAgMHgwMDA0ICAgICAgLyogZmlsZSBkZXNjcmlwdG9yIGlzIHdyaXRlYWJsZSAgKi8KKyNkZWZpbmUgUE9MTEVSUiAgICAgMHgwMDA4ICAgICAgLyogc29tZSBwb2xsIGVycm9yIG9jY3VycmVkICAgICAgKi8KKyNkZWZpbmUgUE9MTEhVUCAgICAgMHgwMDEwICAgICAgLyogZmlsZSBkZXNjcmlwdG9yIHdhcyAiaHVuZyB1cCIgKi8KKyNkZWZpbmUgUE9MTE5WQUwgICAgMHgwMDIwICAgICAgLyogcmVxdWVzdGVkIGV2ZW50cyAiaW52YWxpZCIgICAgKi8KKyNkZWZpbmUgUE9MTFJETk9STSAgMHgwMDQwCisjZGVmaW5lIFBPTExSREJBTkQgIDB4MDA4MAorI2RlZmluZSBQT0xMV1JOT1JNICAweDAxMDAKKyNkZWZpbmUgUE9MTFdSQkFORCAgMHgwMjAwCisKK3N0cnVjdCBwb2xsZmQKK3sKKyAgaW50IGZkOyAgICAgICAgICAgICAgICAgICAgICAgLyogd2hpY2ggZmlsZSBkZXNjcmlwdG9yIHRvIHBvbGwgKi8KKyAgc2hvcnQgZXZlbnRzOyAgICAgICAgICAgICAgICAgLyogZXZlbnRzIHdlIGFyZSBpbnRlcmVzdGVkIGluICAgKi8KKyAgc2hvcnQgcmV2ZW50czsgICAgICAgICAgICAgICAgLyogZXZlbnRzIGZvdW5kIG9uIHJldHVybiAgICAgICAgKi8KK307CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBuZmRzX3Q7CisKK2V4dGVybiBpbnQgcG9sbCAoc3RydWN0IHBvbGxmZCAqcGZkLCBuZmRzX3QgbmZkLCBpbnQgdGltZW91dCk7CisKKy8qIERlZmluZSBJTkZUSU0gb25seSBpZiBkb2luZyBzbyBjb25mb3JtcyB0byBQT1NJWC4gICovCisjaWYgIWRlZmluZWQgKF9QT1NJWF9DX1NPVVJDRSkgJiYgIWRlZmluZWQgKF9YT1BFTl9TT1VSQ0UpCisjZGVmaW5lIElORlRJTSAoLTEpCisjZW5kaWYKKworI2VuZGlmIC8qIF9HTF9QT0xMX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9wcmVhZC5jIGIvY29tcGF0L3ByZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4Y2FjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9wcmVhZC5jCkBAIC0wLDAgKzEsMTggQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworc3NpemVfdCBnaXRfcHJlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgb2ZmX3Qgb2Zmc2V0KQoreworICAgICAgICBvZmZfdCBjdXJyZW50X29mZnNldDsKKyAgICAgICAgc3NpemVfdCByYzsKKworICAgICAgICBjdXJyZW50X29mZnNldCA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7CisKKyAgICAgICAgaWYgKGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIHJjID0gcmVhZF9pbl9mdWxsKGZkLCBidWYsIGNvdW50KTsKKworICAgICAgICBpZiAoY3VycmVudF9vZmZzZXQgIT0gbHNlZWsoZmQsIGN1cnJlbnRfb2Zmc2V0LCBTRUVLX1NFVCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvcHJlY29tcG9zZV91dGY4LmMgYi9jb21wYXQvcHJlY29tcG9zZV91dGY4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2MjUwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9wcmVjb21wb3NlX3V0ZjguYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvbnZlcnRzIGZpbGVuYW1lcyBmcm9tIGRlY29tcG9zZWQgdW5pY29kZSBpbnRvIHByZWNvbXBvc2VkIHVuaWNvZGUuCisgKiBVc2VkIG9uIE1hY09TIFguCisgKi8KKworI2RlZmluZSBQUkVDT01QT1NFX1VOSUNPREVfQworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAicHJlY29tcG9zZV91dGY4LmgiCisKK3R5cGVkZWYgY2hhciAqaWNvbnZfaWJwOworc3RhdGljIGNvbnN0IGNoYXIgKnJlcG9fZW5jb2RpbmcgPSAiVVRGLTgiOworc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfZW5jb2RpbmcgPSAiVVRGLTgtTUFDIjsKKworc3RhdGljIHNpemVfdCBoYXNfbm9uX2FzY2lpKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBtYXhsZW4sIHNpemVfdCAqc3RybGVuX2MpCit7CisJY29uc3QgdWludDhfdCAqcHRyID0gKGNvbnN0IHVpbnQ4X3QgKilzOworCXNpemVfdCBzdHJsZW5fY2hhcnMgPSAwOworCXNpemVfdCByZXQgPSAwOworCisJaWYgKCFwdHIgfHwgISpwdHIpCisJCXJldHVybiAwOworCisJd2hpbGUgKCpwdHIgJiYgbWF4bGVuKSB7CisJCWlmICgqcHRyICYgMHg4MCkKKwkJCXJldCsrOworCQlzdHJsZW5fY2hhcnMrKzsKKwkJcHRyKys7CisJCW1heGxlbi0tOworCX0KKwlpZiAoc3RybGVuX2MpCisJCSpzdHJsZW5fYyA9IHN0cmxlbl9jaGFyczsKKworCXJldHVybiByZXQ7Cit9CisKKwordm9pZCBwcm9iZV91dGY4X3BhdGhuYW1lX2NvbXBvc2l0aW9uKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIGNvbnN0IGNoYXIgKmF1bWxfbmZjID0gIlx4YzNceGE0IjsKKwlzdGF0aWMgY29uc3QgY2hhciAqYXVtbF9uZmQgPSAiXHg2MVx4Y2NceDg4IjsKKwlpbnQgb3V0cHV0X2ZkOworCWlmIChwcmVjb21wb3NlZF91bmljb2RlICE9IC0xKQorCQlyZXR1cm47IC8qIFdlIGZvdW5kIGl0IGRlZmluZWQgaW4gdGhlIGdsb2JhbCBjb25maWcsIHJlc3BlY3QgaXQgKi8KKwlnaXRfcGF0aF9idWYoJnBhdGgsICIlcyIsIGF1bWxfbmZjKTsKKwlvdXRwdXRfZmQgPSBvcGVuKHBhdGguYnVmLCBPX0NSRUFUfE9fRVhDTHxPX1JEV1IsIDA2MDApOworCWlmIChvdXRwdXRfZmQgPj0gMCkgeworCQljbG9zZShvdXRwdXRfZmQpOworCQlnaXRfcGF0aF9idWYoJnBhdGgsICIlcyIsIGF1bWxfbmZkKTsKKwkJcHJlY29tcG9zZWRfdW5pY29kZSA9IGFjY2VzcyhwYXRoLmJ1ZiwgUl9PSykgPyAwIDogMTsKKwkJZ2l0X2NvbmZpZ19zZXQoImNvcmUucHJlY29tcG9zZXVuaWNvZGUiLAorCQkJICAgICAgIHByZWNvbXBvc2VkX3VuaWNvZGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJZ2l0X3BhdGhfYnVmKCZwYXRoLCAiJXMiLCBhdW1sX25mYyk7CisJCWlmICh1bmxpbmsocGF0aC5idWYpKQorCQkJZGllX2Vycm5vKF8oImZhaWxlZCB0byB1bmxpbmsgJyVzJyIpLCBwYXRoLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKK30KKworCit2b2lkIHByZWNvbXBvc2VfYXJndihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGkgPSAwOworCWNvbnN0IGNoYXIgKm9sZGFyZzsKKwljaGFyICpuZXdhcmc7CisJaWNvbnZfdCBpY19wcmVjb21wb3NlOworCisJaWYgKHByZWNvbXBvc2VkX3VuaWNvZGUgIT0gMSkKKwkJcmV0dXJuOworCisJaWNfcHJlY29tcG9zZSA9IGljb252X29wZW4ocmVwb19lbmNvZGluZywgcGF0aF9lbmNvZGluZyk7CisJaWYgKGljX3ByZWNvbXBvc2UgPT0gKGljb252X3QpIC0xKQorCQlyZXR1cm47CisKKwl3aGlsZSAoaSA8IGFyZ2MpIHsKKwkJc2l6ZV90IG5hbWVsZW47CisJCW9sZGFyZyA9IGFyZ3ZbaV07CisJCWlmIChoYXNfbm9uX2FzY2lpKG9sZGFyZywgKHNpemVfdCktMSwgJm5hbWVsZW4pKSB7CisJCQluZXdhcmcgPSByZWVuY29kZV9zdHJpbmdfaWNvbnYob2xkYXJnLCBuYW1lbGVuLCBpY19wcmVjb21wb3NlLCAwLCBOVUxMKTsKKwkJCWlmIChuZXdhcmcpCisJCQkJYXJndltpXSA9IG5ld2FyZzsKKwkJfQorCQlpKys7CisJfQorCWljb252X2Nsb3NlKGljX3ByZWNvbXBvc2UpOworfQorCisKK1BSRUNfRElSICpwcmVjb21wb3NlX3V0Zjhfb3BlbmRpcihjb25zdCBjaGFyICpkaXJuYW1lKQoreworCVBSRUNfRElSICpwcmVjX2RpciA9IHhtYWxsb2Moc2l6ZW9mKFBSRUNfRElSKSk7CisJcHJlY19kaXItPmRpcmVudF9uZmMgPSB4bWFsbG9jKHNpemVvZihkaXJlbnRfcHJlY19wc3gpKTsKKwlwcmVjX2Rpci0+ZGlyZW50X25mYy0+bWF4X25hbWVfbGVuID0gc2l6ZW9mKHByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX25hbWUpOworCisJcHJlY19kaXItPmRpcnAgPSBvcGVuZGlyKGRpcm5hbWUpOworCWlmICghcHJlY19kaXItPmRpcnApIHsKKwkJZnJlZShwcmVjX2Rpci0+ZGlyZW50X25mYyk7CisJCWZyZWUocHJlY19kaXIpOworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgeworCQlpbnQgcmV0X2Vycm5vID0gZXJybm87CisJCXByZWNfZGlyLT5pY19wcmVjb21wb3NlID0gaWNvbnZfb3BlbihyZXBvX2VuY29kaW5nLCBwYXRoX2VuY29kaW5nKTsKKwkJLyogaWYgaWNvbnZfb3BlbigpIGZhaWxzLCBkaWUoKSBpbiByZWFkZGlyKCkgaWYgbmVlZGVkICovCisJCWVycm5vID0gcmV0X2Vycm5vOworCX0KKworCXJldHVybiBwcmVjX2RpcjsKK30KKworc3RydWN0IGRpcmVudF9wcmVjX3BzeCAqcHJlY29tcG9zZV91dGY4X3JlYWRkaXIoUFJFQ19ESVIgKnByZWNfZGlyKQoreworCXN0cnVjdCBkaXJlbnQgKnJlczsKKwlyZXMgPSByZWFkZGlyKHByZWNfZGlyLT5kaXJwKTsKKwlpZiAocmVzKSB7CisJCXNpemVfdCBuYW1lbGVueiA9IHN0cmxlbihyZXMtPmRfbmFtZSkgKyAxOyAvKiBcMCAqLworCQlzaXplX3QgbmV3X21heGxlbiA9IG5hbWVsZW56OworCisJCWludCByZXRfZXJybm8gPSBlcnJubzsKKworCQlpZiAobmV3X21heGxlbiA+IHByZWNfZGlyLT5kaXJlbnRfbmZjLT5tYXhfbmFtZV9sZW4pIHsKKwkJCXNpemVfdCBuZXdfbGVuID0gc2l6ZW9mKGRpcmVudF9wcmVjX3BzeCkgKyBuZXdfbWF4bGVuIC0KKwkJCQlzaXplb2YocHJlY19kaXItPmRpcmVudF9uZmMtPmRfbmFtZSk7CisKKwkJCXByZWNfZGlyLT5kaXJlbnRfbmZjID0geHJlYWxsb2MocHJlY19kaXItPmRpcmVudF9uZmMsIG5ld19sZW4pOworCQkJcHJlY19kaXItPmRpcmVudF9uZmMtPm1heF9uYW1lX2xlbiA9IG5ld19tYXhsZW47CisJCX0KKworCQlwcmVjX2Rpci0+ZGlyZW50X25mYy0+ZF9pbm8gID0gcmVzLT5kX2lubzsKKwkJcHJlY19kaXItPmRpcmVudF9uZmMtPmRfdHlwZSA9IHJlcy0+ZF90eXBlOworCisJCWlmICgocHJlY29tcG9zZWRfdW5pY29kZSA9PSAxKSAmJiBoYXNfbm9uX2FzY2lpKHJlcy0+ZF9uYW1lLCAoc2l6ZV90KS0xLCBOVUxMKSkgeworCQkJaWYgKHByZWNfZGlyLT5pY19wcmVjb21wb3NlID09IChpY29udl90KS0xKSB7CisJCQkJZGllKCJpY29udl9vcGVuKCVzLCVzKSBmYWlsZWQsIGJ1dCBuZWVkZWQ6XG4iCisJCQkJCQkiICAgIHByZWNvbXBvc2VkIHVuaWNvZGUgaXMgbm90IHN1cHBvcnRlZC5cbiIKKwkJCQkJCSIgICAgSWYgeW91IHdhbnQgdG8gdXNlIGRlY29tcG9zZWQgdW5pY29kZSwgcnVuXG4iCisJCQkJCQkiICAgIFwiZ2l0IGNvbmZpZyBjb3JlLnByZWNvbXBvc2V1bmljb2RlIGZhbHNlXCJcbiIsCisJCQkJCQlyZXBvX2VuY29kaW5nLCBwYXRoX2VuY29kaW5nKTsKKwkJCX0gZWxzZSB7CisJCQkJaWNvbnZfaWJwCWNwID0gKGljb252X2licClyZXMtPmRfbmFtZTsKKwkJCQlzaXplX3QgaW5sZWZ0ID0gbmFtZWxlbno7CisJCQkJY2hhciAqb3V0cG9zID0gJnByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX25hbWVbMF07CisJCQkJc2l6ZV90IG91dHN6ID0gcHJlY19kaXItPmRpcmVudF9uZmMtPm1heF9uYW1lX2xlbjsKKwkJCQllcnJubyA9IDA7CisJCQkJaWNvbnYocHJlY19kaXItPmljX3ByZWNvbXBvc2UsICZjcCwgJmlubGVmdCwgJm91dHBvcywgJm91dHN6KTsKKwkJCQlpZiAoZXJybm8gfHwgaW5sZWZ0KSB7CisJCQkJCS8qCisJCQkJCSAqIGljb252KCkgZmFpbGVkIGFuZCBlcnJubyBjb3VsZCBiZSBFMkJJRywgRUlMU0VRLCBFSU5WQUwsIEVCQURGCisJCQkJCSAqIE1hY09TIFggYXZvaWRzIGlsbGVnYWwgYnl0ZSBzZXF1ZW5jZXMuCisJCQkJCSAqIElmIHRoZXkgb2NjdXIgb24gYSBtb3VudGVkIGRyaXZlIChlLmcuIE5GUykgaXQgaXMgbm90IHdvcnRoIHRvCisJCQkJCSAqIGRpZSgpIGZvciB0aGF0LCBidXQgcmF0aGVyIGxldCB0aGUgdXNlciBzZWUgdGhlIG9yaWdpbmFsIG5hbWUKKwkJCQkJKi8KKwkJCQkJbmFtZWxlbnogPSAwOyAvKiB0cmlnZ2VyIHN0cmxjcHkgKi8KKwkJCQl9CisJCQl9CisJCX0gZWxzZQorCQkJbmFtZWxlbnogPSAwOworCisJCWlmICghbmFtZWxlbnopCisJCQlzdHJsY3B5KHByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX25hbWUsIHJlcy0+ZF9uYW1lLAorCQkJCQkJCXByZWNfZGlyLT5kaXJlbnRfbmZjLT5tYXhfbmFtZV9sZW4pOworCisJCWVycm5vID0gcmV0X2Vycm5vOworCQlyZXR1cm4gcHJlY19kaXItPmRpcmVudF9uZmM7CisJfQorCXJldHVybiBOVUxMOworfQorCisKK2ludCBwcmVjb21wb3NlX3V0ZjhfY2xvc2VkaXIoUFJFQ19ESVIgKnByZWNfZGlyKQoreworCWludCByZXRfdmFsdWU7CisJaW50IHJldF9lcnJubzsKKwlyZXRfdmFsdWUgPSBjbG9zZWRpcihwcmVjX2Rpci0+ZGlycCk7CisJcmV0X2Vycm5vID0gZXJybm87CisJaWYgKHByZWNfZGlyLT5pY19wcmVjb21wb3NlICE9IChpY29udl90KS0xKQorCQlpY29udl9jbG9zZShwcmVjX2Rpci0+aWNfcHJlY29tcG9zZSk7CisJZnJlZShwcmVjX2Rpci0+ZGlyZW50X25mYyk7CisJZnJlZShwcmVjX2Rpcik7CisJZXJybm8gPSByZXRfZXJybm87CisJcmV0dXJuIHJldF92YWx1ZTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9wcmVjb21wb3NlX3V0ZjguaCBiL2NvbXBhdC9wcmVjb21wb3NlX3V0ZjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjg0M2QzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgUFJFQ09NUE9TRV9VTklDT0RFX0gKKyNkZWZpbmUgUFJFQ09NUE9TRV9VTklDT0RFX0gKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KKworCit0eXBlZGVmIHN0cnVjdCBkaXJlbnRfcHJlY19wc3ggeworCWlub190IGRfaW5vOyAgICAgICAgICAgIC8qIFBvc2l4ICovCisJc2l6ZV90IG1heF9uYW1lX2xlbjsgICAgLyogU2VlIGJlbG93ICovCisJdW5zaWduZWQgY2hhciBkX3R5cGU7ICAgLyogYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zIGdpdCBydW5zIG9uICovCisKKwkvKgorCSAqIFNlZSBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9kaXJlbnQuaC5odG1sCisJICogTkFNRV9NQVggKyAxIHNob3VsZCBiZSBlbm91Z2gsIGJ1dCBzb21lIHN5c3RlbXMgaGF2ZQorCSAqIE5BTUVfTUFYPTI1NSBhbmQgc3RybGVuKGRfbmFtZSkgbWF5IHJldHVybiA1MDggb3IgNTEwCisJICogU29sdXRpb246IGFsbG9jYXRlIG1vcmUgd2hlbiBuZWVkZWQsIHNlZSBwcmVjb21wb3NlX3V0ZjhfcmVhZGRpcigpCisJICovCisJY2hhciAgIGRfbmFtZVtOQU1FX01BWCsxXTsKK30gZGlyZW50X3ByZWNfcHN4OworCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpY29udl90IGljX3ByZWNvbXBvc2U7CisJRElSICpkaXJwOworCXN0cnVjdCBkaXJlbnRfcHJlY19wc3ggKmRpcmVudF9uZmM7Cit9IFBSRUNfRElSOworCit2b2lkIHByZWNvbXBvc2VfYXJndihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwordm9pZCBwcm9iZV91dGY4X3BhdGhuYW1lX2NvbXBvc2l0aW9uKHZvaWQpOworCitQUkVDX0RJUiAqcHJlY29tcG9zZV91dGY4X29wZW5kaXIoY29uc3QgY2hhciAqZGlybmFtZSk7CitzdHJ1Y3QgZGlyZW50X3ByZWNfcHN4ICpwcmVjb21wb3NlX3V0ZjhfcmVhZGRpcihQUkVDX0RJUiAqZGlycCk7CitpbnQgcHJlY29tcG9zZV91dGY4X2Nsb3NlZGlyKFBSRUNfRElSICpkaXJwKTsKKworI2lmbmRlZiBQUkVDT01QT1NFX1VOSUNPREVfQworI2RlZmluZSBkaXJlbnQgZGlyZW50X3ByZWNfcHN4CisjZGVmaW5lIG9wZW5kaXIobikgcHJlY29tcG9zZV91dGY4X29wZW5kaXIobikKKyNkZWZpbmUgcmVhZGRpcihkKSBwcmVjb21wb3NlX3V0ZjhfcmVhZGRpcihkKQorI2RlZmluZSBjbG9zZWRpcihkKSBwcmVjb21wb3NlX3V0ZjhfY2xvc2VkaXIoZCkKKyNkZWZpbmUgRElSIFBSRUNfRElSCisjZW5kaWYgLyogUFJFQ09NUE9TRV9VTklDT0RFX0MgKi8KKworI2VuZGlmIC8qIFBSRUNPTVBPU0VfVU5JQ09ERV9IICovCmRpZmYgLS1naXQgYS9jb21wYXQvcXNvcnRfcy5jIGIvY29tcGF0L3Fzb3J0X3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQxZjBhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3Fzb3J0X3MuYwpAQCAtMCwwICsxLDY5IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKy8qCisgKiBBIG1lcmdlIHNvcnQgaW1wbGVtZW50YXRpb24sIHNpbXBsaWZpZWQgZnJvbSB0aGUgcXNvcnQgaW1wbGVtZW50YXRpb24KKyAqIGJ5IE1pa2UgSGFlcnRlbCwgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICogQWRkZWQgY29udGV4dCBwb2ludGVyLCBzYWZldHkgY2hlY2tzIGFuZCByZXR1cm4gdmFsdWUuCisgKi8KKworc3RhdGljIHZvaWQgbXNvcnRfd2l0aF90bXAodm9pZCAqYiwgc2l6ZV90IG4sIHNpemVfdCBzLAorCQkJICAgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgdm9pZCAqKSwKKwkJCSAgIGNoYXIgKnQsIHZvaWQgKmN0eCkKK3sKKwljaGFyICp0bXA7CisJY2hhciAqYjEsICpiMjsKKwlzaXplX3QgbjEsIG4yOworCisJaWYgKG4gPD0gMSkKKwkJcmV0dXJuOworCisJbjEgPSBuIC8gMjsKKwluMiA9IG4gLSBuMTsKKwliMSA9IGI7CisJYjIgPSAoY2hhciAqKWIgKyAobjEgKiBzKTsKKworCW1zb3J0X3dpdGhfdG1wKGIxLCBuMSwgcywgY21wLCB0LCBjdHgpOworCW1zb3J0X3dpdGhfdG1wKGIyLCBuMiwgcywgY21wLCB0LCBjdHgpOworCisJdG1wID0gdDsKKworCXdoaWxlIChuMSA+IDAgJiYgbjIgPiAwKSB7CisJCWlmIChjbXAoYjEsIGIyLCBjdHgpIDw9IDApIHsKKwkJCW1lbWNweSh0bXAsIGIxLCBzKTsKKwkJCXRtcCArPSBzOworCQkJYjEgKz0gczsKKwkJCS0tbjE7CisJCX0gZWxzZSB7CisJCQltZW1jcHkodG1wLCBiMiwgcyk7CisJCQl0bXAgKz0gczsKKwkJCWIyICs9IHM7CisJCQktLW4yOworCQl9CisJfQorCWlmIChuMSA+IDApCisJCW1lbWNweSh0bXAsIGIxLCBuMSAqIHMpOworCW1lbWNweShiLCB0LCAobiAtIG4yKSAqIHMpOworfQorCitpbnQgZ2l0X3Fzb3J0X3Modm9pZCAqYiwgc2l6ZV90IG4sIHNpemVfdCBzLAorCQlpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCB2b2lkICopLCB2b2lkICpjdHgpCit7CisJY29uc3Qgc2l6ZV90IHNpemUgPSBzdF9tdWx0KG4sIHMpOworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKCFuKQorCQlyZXR1cm4gMDsKKwlpZiAoIWIgfHwgIWNtcCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHNpemUgPCBzaXplb2YoYnVmKSkgeworCQkvKiBUaGUgdGVtcG9yYXJ5IGFycmF5IGZpdHMgb24gdGhlIHNtYWxsIG9uLXN0YWNrIGJ1ZmZlci4gKi8KKwkJbXNvcnRfd2l0aF90bXAoYiwgbiwgcywgY21wLCBidWYsIGN0eCk7CisJfSBlbHNlIHsKKwkJLyogSXQncyBzb21ld2hhdCBsYXJnZSwgc28gbWFsbG9jIGl0LiAgKi8KKwkJY2hhciAqdG1wID0geG1hbGxvYyhzaXplKTsKKwkJbXNvcnRfd2l0aF90bXAoYiwgbiwgcywgY21wLCB0bXAsIGN0eCk7CisJCWZyZWUodG1wKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnY29tcC5jIGIvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWJjMDllCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYwpAQCAtMCwwICsxLDM4OTEgQEAKKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNywyMDA5LDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmIGRlZmluZWQgX19UQU5ERU0KKyAvKiBUaGlzIGlzIGN1cnJlbnRseSBkdXBsaWNhdGVkIGZyb20gZ2l0LWNvbXBhdC11dGlscy5oICovCisjIGlmZGVmIE5PX0lOVFBUUl9UCisgdHlwZWRlZiBsb25nIGludHB0cl90OworIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50cHRyX3Q7CisjIGVuZGlmCisjZW5kaWYKKworc3RhdGljIHJlZ19lcnJjb2RlX3QgcmVfY29tcGlsZV9pbnRlcm5hbCAocmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqIHBhdHRlcm4sCisJCQkJCSAgc2l6ZV90IGxlbmd0aCwgcmVnX3N5bnRheF90IHN5bnRheCk7CitzdGF0aWMgdm9pZCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwKKwkJCQkgICAgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisJCQkJICAgICBjaGFyICpmYXN0bWFwKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGluaXRfZGZhIChyZV9kZmFfdCAqZGZhLCBzaXplX3QgcGF0X2xlbik7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyB2b2lkIGZyZWVfY2hhcnNldCAocmVfY2hhcnNldF90ICpjc2V0KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIHZvaWQgZnJlZV93b3JrYXJlYV9jb21waWxlIChyZWdleF90ICpwcmVnKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNyZWF0ZV9pbml0aWFsX3N0YXRlIChyZV9kZmFfdCAqZGZhKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHZvaWQgb3B0aW1pemVfdXRmOCAocmVfZGZhX3QgKmRmYSk7CisjZW5kaWYKK3N0YXRpYyByZWdfZXJyY29kZV90IGFuYWx5emUgKHJlZ2V4X3QgKnByZWcpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcHJlb3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsCisJCQkgICAgICAgcmVnX2VycmNvZGVfdCAoZm4gKHZvaWQgKiwgYmluX3RyZWVfdCAqKSksCisJCQkgICAgICAgdm9pZCAqZXh0cmEpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcG9zdG9yZGVyIChiaW5fdHJlZV90ICpyb290LAorCQkJCXJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCQkJCXZvaWQgKmV4dHJhKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IG9wdGltaXplX3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGxvd2VyX3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpsb3dlcl9zdWJleHAgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVnZXhfdCAqcHJlZywKKwkJCQkgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxjX2ZpcnN0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxjX25leHQgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGxpbmtfbmZhX25vZGVzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgaW50IGR1cGxpY2F0ZV9ub2RlIChyZV9kZmFfdCAqZGZhLCBpbnQgb3JnX2lkeCwgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpOworc3RhdGljIGludCBzZWFyY2hfZHVwbGljYXRlZF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgb3JnX25vZGUsCisJCQkJICAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19lY2xvc3VyZSAocmVfZGZhX3QgKmRmYSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxjX2VjbG9zdXJlX2l0ZXIgKHJlX25vZGVfc2V0ICpuZXdfc2V0LCByZV9kZmFfdCAqZGZhLAorCQkJCQkgaW50IG5vZGUsIGludCByb290KTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNhbGNfaW52ZWNsb3N1cmUgKHJlX2RmYV90ICpkZmEpOworc3RhdGljIGludCBmZXRjaF9udW1iZXIgKHJlX3N0cmluZ190ICppbnB1dCwgcmVfdG9rZW5fdCAqdG9rZW4sCisJCQkgcmVnX3N5bnRheF90IHN5bnRheCk7CitzdGF0aWMgaW50IHBlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsCisJCQlyZWdfc3ludGF4X3Qgc3ludGF4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZSAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywKKwkJCSAgcmVnX3N5bnRheF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9yZWdfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJCSAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJICBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9icmFuY2ggKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkJIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCSBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9leHByZXNzaW9uIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJCSAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJICAgICBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9zdWJfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJCSAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJICBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9kdXBfb3AgKGJpbl90cmVlX3QgKmR1cF9lbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorCQkJCSByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKwkJCQkgcmVnX3N5bnRheF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwKKwkJCQkgICAgICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgICAgICByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcGFyc2VfYnJhY2tldF9lbGVtZW50IChicmFja2V0X2VsZW1fdCAqZWxlbSwKKwkJCQkJICAgIHJlX3N0cmluZ190ICpyZWdleHAsCisJCQkJCSAgICByZV90b2tlbl90ICp0b2tlbiwgaW50IHRva2VuX2xlbiwKKwkJCQkJICAgIHJlX2RmYV90ICpkZmEsCisJCQkJCSAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCQkgICAgaW50IGFjY2VwdF9oeXBoZW4pOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcGFyc2VfYnJhY2tldF9zeW1ib2wgKGJyYWNrZXRfZWxlbV90ICplbGVtLAorCQkJCQkgIHJlX3N0cmluZ190ICpyZWdleHAsCisJCQkJCSAgcmVfdG9rZW5fdCAqdG9rZW4pOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LAorCQkJCQlyZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJCQkJaW50ICplcXVpdl9jbGFzc19hbGxvYywKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorCQkJCSAgICAgIGJpdHNldF90IHNiY3NldCwKKwkJCQkgICAgICByZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJCQkgICAgICBpbnQgKmNoYXJfY2xhc3NfYWxsb2MsCisJCQkJICAgICAgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwKKwkJCQkgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKyNlbHNlICAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKwkJCQkgICAgICBiaXRzZXRfdCBzYmNzZXQsCisJCQkJICAgICAgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwKKwkJCQkgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyBiaW5fdHJlZV90ICpidWlsZF9jaGFyY2xhc3Nfb3AgKHJlX2RmYV90ICpkZmEsCisJCQkJICAgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpjbGFzc19uYW1lLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpleHRyYSwKKwkJCQkgICAgICAgaW50IG5vbl9tYXRjaCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpjcmVhdGVfdHJlZSAocmVfZGZhX3QgKmRmYSwKKwkJCQliaW5fdHJlZV90ICpsZWZ0LCBiaW5fdHJlZV90ICpyaWdodCwKKwkJCQlyZV90b2tlbl90eXBlX3QgdHlwZSk7CitzdGF0aWMgYmluX3RyZWVfdCAqY3JlYXRlX3Rva2VuX3RyZWUgKHJlX2RmYV90ICpkZmEsCisJCQkJICAgICAgYmluX3RyZWVfdCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJCQkJICAgICAgY29uc3QgcmVfdG9rZW5fdCAqdG9rZW4pOworc3RhdGljIGJpbl90cmVlX3QgKmR1cGxpY2F0ZV90cmVlIChjb25zdCBiaW5fdHJlZV90ICpzcmMsIHJlX2RmYV90ICpkZmEpOworc3RhdGljIHZvaWQgZnJlZV90b2tlbiAocmVfdG9rZW5fdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBmcmVlX3RyZWUgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IG1hcmtfb3B0X3N1YmV4cCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworDAorLyogVGhpcyB0YWJsZSBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIGZvciBlYWNoIG9mIHRoZSBlcnJvciBjb2RlcyBsaXN0ZWQKKyAgIGluIHJlZ2V4LmguICBPYnZpb3VzbHkgdGhlIG9yZGVyIGhlcmUgaGFzIHRvIGJlIHNhbWUgYXMgdGhlcmUuCisgICBQT1NJWCBkb2Vzbid0IHJlcXVpcmUgdGhhdCB3ZSBkbyBhbnl0aGluZyBmb3IgUkVHX05PRVJST1IsCisgICBidXQgd2h5IG5vdCBiZSBuaWNlPyAgKi8KKworY29uc3QgY2hhciBfX3JlX2Vycm9yX21zZ2lkW10gYXR0cmlidXRlX2hpZGRlbiA9CisgIHsKKyNkZWZpbmUgUkVHX05PRVJST1JfSURYCTAKKyAgICBnZXR0ZXh0X25vb3AgKCJTdWNjZXNzIikJLyogUkVHX05PRVJST1IgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19OT01BVENIX0lEWCAoUkVHX05PRVJST1JfSURYICsgc2l6ZW9mICJTdWNjZXNzIikKKyAgICBnZXR0ZXh0X25vb3AgKCJObyBtYXRjaCIpCS8qIFJFR19OT01BVENIICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfQkFEUEFUX0lEWAkoUkVHX05PTUFUQ0hfSURYICsgc2l6ZW9mICJObyBtYXRjaCIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iKSAvKiBSRUdfQkFEUEFUICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUNPTExBVEVfSURYIChSRUdfQkFEUEFUX0lEWCArIHNpemVvZiAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIpIC8qIFJFR19FQ09MTEFURSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VDVFlQRV9JRFgJKFJFR19FQ09MTEFURV9JRFggKyBzaXplb2YgIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpIC8qIFJFR19FQ1RZUEUgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FRVNDQVBFX0lEWAkoUkVHX0VDVFlQRV9JRFggKyBzaXplb2YgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiKQorICAgIGdldHRleHRfbm9vcCAoIlRyYWlsaW5nIGJhY2tzbGFzaCIpIC8qIFJFR19FRVNDQVBFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVNVQlJFR19JRFgJKFJFR19FRVNDQVBFX0lEWCArIHNpemVvZiAiVHJhaWxpbmcgYmFja3NsYXNoIikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIikgLyogUkVHX0VTVUJSRUcgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FQlJBQ0tfSURYCShSRUdfRVNVQlJFR19JRFggKyBzaXplb2YgIkludmFsaWQgYmFjayByZWZlcmVuY2UiKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBbIG9yIFteIikJLyogUkVHX0VCUkFDSyAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VQQVJFTl9JRFgJKFJFR19FQlJBQ0tfSURYICsgc2l6ZW9mICJVbm1hdGNoZWQgWyBvciBbXiIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICggb3IgXFwoIikgLyogUkVHX0VQQVJFTiAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VCUkFDRV9JRFgJKFJFR19FUEFSRU5fSURYICsgc2l6ZW9mICJVbm1hdGNoZWQgKCBvciBcXCgiKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBcXHsiKSAvKiBSRUdfRUJSQUNFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfQkFEQlJfSURYCShSRUdfRUJSQUNFX0lEWCArIHNpemVvZiAiVW5tYXRjaGVkIFxceyIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIpIC8qIFJFR19CQURCUiAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VSQU5HRV9JRFgJKFJFR19CQURCUl9JRFggKyBzaXplb2YgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmFuZ2UgZW5kIikJLyogUkVHX0VSQU5HRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VTUEFDRV9JRFgJKFJFR19FUkFOR0VfSURYICsgc2l6ZW9mICJJbnZhbGlkIHJhbmdlIGVuZCIpCisgICAgZ2V0dGV4dF9ub29wICgiTWVtb3J5IGV4aGF1c3RlZCIpIC8qIFJFR19FU1BBQ0UgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19CQURSUFRfSURYCShSRUdfRVNQQUNFX0lEWCArIHNpemVvZiAiTWVtb3J5IGV4aGF1c3RlZCIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIikgLyogUkVHX0JBRFJQVCAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VFTkRfSURYCShSRUdfQkFEUlBUX0lEWCArIHNpemVvZiAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIikKKyAgICBnZXR0ZXh0X25vb3AgKCJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIpIC8qIFJFR19FRU5EICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVNJWkVfSURYCShSRUdfRUVORF9JRFggKyBzaXplb2YgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIikKKyAgICBnZXR0ZXh0X25vb3AgKCJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpIC8qIFJFR19FU0laRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VSUEFSRU5fSURYCShSRUdfRVNJWkVfSURYICsgc2l6ZW9mICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICkgb3IgXFwpIikgLyogUkVHX0VSUEFSRU4gKi8KKyAgfTsKKworY29uc3Qgc2l6ZV90IF9fcmVfZXJyb3JfbXNnaWRfaWR4W10gYXR0cmlidXRlX2hpZGRlbiA9CisgIHsKKyAgICBSRUdfTk9FUlJPUl9JRFgsCisgICAgUkVHX05PTUFUQ0hfSURYLAorICAgIFJFR19CQURQQVRfSURYLAorICAgIFJFR19FQ09MTEFURV9JRFgsCisgICAgUkVHX0VDVFlQRV9JRFgsCisgICAgUkVHX0VFU0NBUEVfSURYLAorICAgIFJFR19FU1VCUkVHX0lEWCwKKyAgICBSRUdfRUJSQUNLX0lEWCwKKyAgICBSRUdfRVBBUkVOX0lEWCwKKyAgICBSRUdfRUJSQUNFX0lEWCwKKyAgICBSRUdfQkFEQlJfSURYLAorICAgIFJFR19FUkFOR0VfSURYLAorICAgIFJFR19FU1BBQ0VfSURYLAorICAgIFJFR19CQURSUFRfSURYLAorICAgIFJFR19FRU5EX0lEWCwKKyAgICBSRUdfRVNJWkVfSURYLAorICAgIFJFR19FUlBBUkVOX0lEWAorICB9OworDAorLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisKKworI2lmZGVmIFpPU19VU1MKKworLyogRm9yIFpPUyBVU1Mgd2UgbXVzdCBkZWZpbmUgYnRvd2MgKi8KKword2NoYXJfdCAKK2J0b3djIChpbnQgYykKK3sKKyAgIHdjaGFyX3Qgd3RtcFsyXTsKKyAgIGNoYXIgdG1wWzJdOworCisgICB0bXBbMF0gPSBjOworICAgdG1wWzFdID0gMDsKKworICAgbWJ0b3djICh3dG1wLCB0bXAsIDEpOworICAgcmV0dXJuIHd0bXBbMF07Cit9CisjZW5kaWYKKworLyogcmVfY29tcGlsZV9wYXR0ZXJuIGlzIHRoZSBHTlUgcmVndWxhciBleHByZXNzaW9uIGNvbXBpbGVyOiBpdAorICAgY29tcGlsZXMgUEFUVEVSTiAob2YgbGVuZ3RoIExFTkdUSCkgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiBCVUZQLgorICAgUmV0dXJucyAwIGlmIHRoZSBwYXR0ZXJuIHdhcyB2YWxpZCwgb3RoZXJ3aXNlIGFuIGVycm9yIHN0cmluZy4KKworICAgQXNzdW1lcyB0aGUgYGFsbG9jYXRlZCcgKGFuZCBwZXJoYXBzIGBidWZmZXInKSBhbmQgYHRyYW5zbGF0ZScgZmllbGRzCisgICBhcmUgc2V0IGluIEJVRlAgb24gZW50cnkuICAqLworCitjb25zdCBjaGFyICoKK3JlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqcGF0dGVybiwKKwkJICAgIHNpemVfdCBsZW5ndGgsCisJCSAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworCisgIC8qIEFuZCBHTlUgY29kZSBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIGdldCByZWdpc3RlciBpbmZvcm1hdGlvbgorICAgICBieSBwYXNzaW5nIG51bGwgZm9yIHRoZSBSRUdTIGFyZ3VtZW50IHRvIHJlX21hdGNoLCBldGMuLCBub3QgYnkKKyAgICAgc2V0dGluZyBub19zdWIsIHVubGVzcyBSRV9OT19TVUIgaXMgc2V0LiAgKi8KKyAgYnVmcC0+bm9fc3ViID0gISEocmVfc3ludGF4X29wdGlvbnMgJiBSRV9OT19TVUIpOworCisgIC8qIE1hdGNoIGFuY2hvcnMgYXQgbmV3bGluZS4gICovCisgIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yID0gMTsKKworICByZXQgPSByZV9jb21waWxlX2ludGVybmFsIChidWZwLCBwYXR0ZXJuLCBsZW5ndGgsIHJlX3N5bnRheF9vcHRpb25zKTsKKworICBpZiAoIXJldCkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFsoaW50KSByZXRdKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9jb21waWxlX3BhdHRlcm4sIHJlX2NvbXBpbGVfcGF0dGVybikKKyNlbmRpZgorCisvKiBTZXQgYnkgYHJlX3NldF9zeW50YXgnIHRvIHRoZSBjdXJyZW50IHJlZ2V4cCBzeW50YXggdG8gcmVjb2duaXplLiAgQ2FuCisgICBhbHNvIGJlIGFzc2lnbmVkIHRvIGFyYml0cmFyaWx5OiBlYWNoIHBhdHRlcm4gYnVmZmVyIHN0b3JlcyBpdHMgb3duCisgICBzeW50YXgsIHNvIGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gcmVnZXggY29tcGlsYXRpb25zLiAgKi8KKy8qIFRoaXMgaGFzIG5vIGluaXRpYWxpemVyIGJlY2F1c2UgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIEVtYWNzCisgICBiZWNvbWUgcmVhZC1vbmx5IGFmdGVyIGR1bXBpbmcuICAqLworcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworCisKKy8qIFNwZWNpZnkgdGhlIHByZWNpc2Ugc3ludGF4IG9mIHJlZ2V4cHMgZm9yIGNvbXBpbGF0aW9uLiAgVGhpcyBwcm92aWRlcworICAgZm9yIGNvbXBhdGliaWxpdHkgZm9yIHZhcmlvdXMgdXRpbGl0aWVzIHdoaWNoIGhpc3RvcmljYWxseSBoYXZlCisgICBkaWZmZXJlbnQsIGluY29tcGF0aWJsZSBzeW50YXhlcy4KKworICAgVGhlIGFyZ3VtZW50IFNZTlRBWCBpcyBhIGJpdCBtYXNrIGNvbXByaXNlZCBvZiB0aGUgdmFyaW91cyBiaXRzCisgICBkZWZpbmVkIGluIHJlZ2V4LmguICBXZSByZXR1cm4gdGhlIG9sZCBzeW50YXguICAqLworCityZWdfc3ludGF4X3QKK3JlX3NldF9zeW50YXggKHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJlZ19zeW50YXhfdCByZXQgPSByZV9zeW50YXhfb3B0aW9uczsKKworICByZV9zeW50YXhfb3B0aW9ucyA9IHN5bnRheDsKKyAgcmV0dXJuIHJldDsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZXRfc3ludGF4LCByZV9zZXRfc3ludGF4KQorI2VuZGlmCisKK2ludAorcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgYnVmcC0+YnVmZmVyOworICBjaGFyICpmYXN0bWFwID0gYnVmcC0+ZmFzdG1hcDsKKworICBtZW1zZXQgKGZhc3RtYXAsICdcMCcsIHNpemVvZiAoY2hhcikgKiBTQkNfTUFYKTsKKyAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKGJ1ZnAsIGRmYS0+aW5pdF9zdGF0ZSwgZmFzdG1hcCk7CisgIGlmIChkZmEtPmluaXRfc3RhdGUgIT0gZGZhLT5pbml0X3N0YXRlX3dvcmQpCisgICAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKGJ1ZnAsIGRmYS0+aW5pdF9zdGF0ZV93b3JkLCBmYXN0bWFwKTsKKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZSAhPSBkZmEtPmluaXRfc3RhdGVfbmwpCisgICAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKGJ1ZnAsIGRmYS0+aW5pdF9zdGF0ZV9ubCwgZmFzdG1hcCk7CisgIGlmIChkZmEtPmluaXRfc3RhdGUgIT0gZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZikKKyAgICByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAoYnVmcCwgZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiwgZmFzdG1hcCk7CisgIGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgPSAxOworICByZXR1cm4gMDsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9jb21waWxlX2Zhc3RtYXAsIHJlX2NvbXBpbGVfZmFzdG1hcCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpCityZV9zZXRfZmFzdG1hcCAoY2hhciAqZmFzdG1hcCwgaW50IGljYXNlLCBpbnQgY2gpCit7CisgIGZhc3RtYXBbY2hdID0gMTsKKyAgaWYgKGljYXNlKQorICAgIGZhc3RtYXBbdG9sb3dlciAoY2gpXSA9IDE7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVfY29tcGlsZV9mYXN0bWFwLgorICAgQ29tcGlsZSBmYXN0bWFwIGZvciB0aGUgaW5pdGlhbF9zdGF0ZSBJTklUX1NUQVRFLiAgKi8KKworc3RhdGljIHZvaWQKK3JlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorCQkJIGNoYXIgKmZhc3RtYXApCit7CisgIHZvbGF0aWxlIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgYnVmcC0+YnVmZmVyOworICBpbnQgbm9kZV9jbnQ7CisgIGludCBpY2FzZSA9IChkZmEtPm1iX2N1cl9tYXggPT0gMSAmJiAoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpKTsKKyAgZm9yIChub2RlX2NudCA9IDA7IG5vZGVfY250IDwgaW5pdF9zdGF0ZS0+bm9kZXMubmVsZW07ICsrbm9kZV9jbnQpCisgICAgeworICAgICAgaW50IG5vZGUgPSBpbml0X3N0YXRlLT5ub2Rlcy5lbGVtc1tub2RlX2NudF07CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKworICAgICAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSKQorCXsKKwkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSByZV9tYWxsb2MgKHVuc2lnbmVkIGNoYXIsIGRmYS0+bWJfY3VyX21heCksICpwOworCSAgICAgIHdjaGFyX3Qgd2M7CisJICAgICAgbWJzdGF0ZV90IHN0YXRlOworCisJICAgICAgcCA9IGJ1ZjsKKwkgICAgICAqcCsrID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuYzsKKwkgICAgICB3aGlsZSAoKytub2RlIDwgZGZhLT5ub2Rlc19sZW4KKwkJICAgICAmJiBkZmEtPm5vZGVzW25vZGVdLnR5cGUgPT0gQ0hBUkFDVEVSCisJCSAgICAgJiYgZGZhLT5ub2Rlc1tub2RlXS5tYl9wYXJ0aWFsKQorCQkqcCsrID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuYzsKKwkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworCSAgICAgIGlmIChfX21icnRvd2MgKCZ3YywgKGNvbnN0IGNoYXIgKikgYnVmLCBwIC0gYnVmLAorCQkJICAgICAmc3RhdGUpID09IHAgLSBidWYKKwkJICAmJiAoX193Y3J0b21iICgoY2hhciAqKSBidWYsIHRvd2xvd2VyICh3YyksICZzdGF0ZSkKKwkJICAgICAgIT0gKHNpemVfdCkgLTEpKQorCQlyZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgMCwgYnVmWzBdKTsKKwkgICAgICByZV9mcmVlIChidWYpOworCSAgICB9CisjZW5kaWYKKwl9CisgICAgICBlbHNlIGlmICh0eXBlID09IFNJTVBMRV9CUkFDS0VUKQorCXsKKwkgIGludCBpLCBjaDsKKwkgIGZvciAoaSA9IDAsIGNoID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorCSAgICB7CisJICAgICAgaW50IGo7CisJICAgICAgYml0c2V0X3dvcmRfdCB3ID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuc2Jjc2V0W2ldOworCSAgICAgIGZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRF9CSVRTOyArK2osICsrY2gpCisJCWlmICh3ICYgKChiaXRzZXRfd29yZF90KSAxIDw8IGopKQorCQkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgY2gpOworCSAgICB9CisJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBlbHNlIGlmICh0eXBlID09IENPTVBMRVhfQlJBQ0tFVCkKKwl7CisJICByZV9jaGFyc2V0X3QgKmNzZXQgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5tYmNzZXQ7CisJICBpbnQgaTsKKworIyBpZmRlZiBfTElCQworCSAgLyogU2VlIGlmIHdlIGhhdmUgdG8gdHJ5IGFsbCBieXRlcyB3aGljaCBzdGFydCBtdWx0aXBsZSBjb2xsYXRpb24KKwkgICAgIGVsZW1lbnRzLgorCSAgICAgZS5nLiBJbiBkYV9ESywgd2Ugd2FudCB0byBjYXRjaCAnYScgc2luY2UgImFhIiBpcyBhIHZhbGlkCisJCSAgY29sbGF0aW9uIGVsZW1lbnQsIGFuZCBkb24ndCBjYXRjaCAnYicgc2luY2UgJ2InIGlzCisJCSAgdGhlIG9ubHkgY29sbGF0aW9uIGVsZW1lbnQgd2hpY2ggc3RhcnRzIGZyb20gJ2InIChhbmQKKwkJICBpdCBpcyBjYXVnaHQgYnkgU0lNUExFX0JSQUNLRVQpLiAgKi8KKwkgICAgICBpZiAoX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKSAhPSAwCisJCSAgJiYgKGNzZXQtPm5jb2xsX3N5bXMgfHwgY3NldC0+bnJhbmdlcykpCisJCXsKKwkJICBjb25zdCBpbnQzMl90ICp0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisJCSAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisJCSAgZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkKKwkJICAgIGlmICh0YWJsZVtpXSA8IDApCisJCSAgICAgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgaSk7CisJCX0KKyMgZW5kaWYgLyogX0xJQkMgKi8KKworCSAgLyogU2VlIGlmIHdlIGhhdmUgdG8gc3RhcnQgdGhlIG1hdGNoIGF0IGFsbCBtdWx0aWJ5dGUgY2hhcmFjdGVycywKKwkgICAgIGkuZS4gd2hlcmUgd2Ugd291bGQgbm90IGZpbmQgYW4gaW52YWxpZCBzZXF1ZW5jZS4gIFRoaXMgb25seQorCSAgICAgYXBwbGllcyB0byBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHM7IGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIKKwkgICAgIHNldHMsIHRoZSBTSU1QTEVfQlJBQ0tFVCBhZ2FpbiBzdWZmaWNlcy4gICovCisJICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMQorCSAgICAgICYmIChjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5vbl9tYXRjaCB8fCBjc2V0LT5ucmFuZ2VzCisjIGlmZGVmIF9MSUJDCisJCSAgfHwgY3NldC0+bmVxdWl2X2NsYXNzZXMKKyMgZW5kaWYgLyogX0xJQkMgKi8KKwkJICkpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOworCSAgICAgIGRvCisJCXsKKwkJICBtYnN0YXRlX3QgbWJzOworCQkgIG1lbXNldCAoJm1icywgMCwgc2l6ZW9mIChtYnMpKTsKKwkJICBpZiAoX19tYnJ0b3djIChOVUxMLCAoY2hhciAqKSAmYywgMSwgJm1icykgPT0gKHNpemVfdCkgLTIpCisJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgZmFsc2UsIChpbnQpIGMpOworCQl9CisJICAgICAgd2hpbGUgKCsrYyAhPSAwKTsKKwkgICAgfQorCisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiAuLi4gRWxzZSBjYXRjaCBhbGwgYnl0ZXMgd2hpY2ggY2FuIHN0YXJ0IHRoZSBtYmNoYXJzLiAgKi8KKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgY3NldC0+bm1iY2hhcnM7ICsraSkKKwkJeworCQkgIGNoYXIgYnVmWzI1Nl07CisJCSAgbWJzdGF0ZV90IHN0YXRlOworCQkgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisJCSAgaWYgKF9fd2NydG9tYiAoYnVmLCBjc2V0LT5tYmNoYXJzW2ldLCAmc3RhdGUpICE9IChzaXplX3QpIC0xKQorCQkgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCAqKHVuc2lnbmVkIGNoYXIgKikgYnVmKTsKKwkJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorCQkgICAgeworCQkgICAgICBpZiAoX193Y3J0b21iIChidWYsIHRvd2xvd2VyIChjc2V0LT5tYmNoYXJzW2ldKSwgJnN0YXRlKQorCQkJICAhPSAoc2l6ZV90KSAtMSkKKwkJCXJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBmYWxzZSwgKih1bnNpZ25lZCBjaGFyICopIGJ1Zik7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9QRVJJT0QKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICAgICB8fCB0eXBlID09IE9QX1VURjhfUEVSSU9ECisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgICAgICAgfHwgdHlwZSA9PSBFTkRfT0ZfUkUpCisJeworCSAgbWVtc2V0IChmYXN0bWFwLCAnXDEnLCBzaXplb2YgKGNoYXIpICogU0JDX01BWCk7CisJICBpZiAodHlwZSA9PSBFTkRfT0ZfUkUpCisJICAgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMTsKKwkgIHJldHVybjsKKwl9CisgICAgfQorfQorDAorLyogRW50cnkgcG9pbnQgZm9yIFBPU0lYIGNvZGUuICAqLworLyogcmVnY29tcCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcyBhIHN0cmluZyBhbmQgY29tcGlsZXMgaXQuCisKKyAgIFBSRUcgaXMgYSByZWdleF90ICouICBXZSBkbyBub3QgZXhwZWN0IGFueSBmaWVsZHMgdG8gYmUgaW5pdGlhbGl6ZWQsCisgICBzaW5jZSBQT1NJWCBzYXlzIHdlIHNob3VsZG4ndC4gIFRodXMsIHdlIHNldAorCisgICAgIGBidWZmZXInIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuOworICAgICBgdXNlZCcgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybjsKKyAgICAgYHN5bnRheCcgdG8gUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIGlmIHRoZQorICAgICAgIFJFR19FWFRFTkRFRCBiaXQgaW4gQ0ZMQUdTIGlzIHNldDsgb3RoZXJ3aXNlLCB0bworICAgICAgIFJFX1NZTlRBWF9QT1NJWF9CQVNJQzsKKyAgICAgYG5ld2xpbmVfYW5jaG9yJyB0byBSRUdfTkVXTElORSBiZWluZyBzZXQgaW4gQ0ZMQUdTOworICAgICBgZmFzdG1hcCcgdG8gYW4gYWxsb2NhdGVkIHNwYWNlIGZvciB0aGUgZmFzdG1hcDsKKyAgICAgYGZhc3RtYXBfYWNjdXJhdGUnIHRvIHplcm87CisgICAgIGByZV9uc3ViJyB0byB0aGUgbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGluIFBBVFRFUk4uCisKKyAgIFBBVFRFUk4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBhdHRlcm4gc3RyaW5nLgorCisgICBDRkxBR1MgaXMgYSBzZXJpZXMgb2YgYml0cyB3aGljaCBhZmZlY3QgY29tcGlsYXRpb24uCisKKyAgICAgSWYgUkVHX0VYVEVOREVEIGlzIHNldCwgd2UgdXNlIFBPU0lYIGV4dGVuZGVkIHN5bnRheDsgb3RoZXJ3aXNlLCB3ZQorICAgICB1c2UgUE9TSVggYmFzaWMgc3ludGF4LgorCisgICAgIElmIFJFR19ORVdMSU5FIGlzIHNldCwgdGhlbiAuIGFuZCBbXi4uLl0gZG9uJ3QgbWF0Y2ggbmV3bGluZS4KKyAgICAgQWxzbywgcmVnZXhlYyB3aWxsIHRyeSBhIG1hdGNoIGJlZ2lubmluZyBhZnRlciBldmVyeSBuZXdsaW5lLgorCisgICAgIElmIFJFR19JQ0FTRSBpcyBzZXQsIHRoZW4gd2UgY29uc2lkZXJzIHVwcGVyLSBhbmQgbG93ZXJjYXNlCisgICAgIHZlcnNpb25zIG9mIGxldHRlcnMgdG8gYmUgZXF1aXZhbGVudCB3aGVuIG1hdGNoaW5nLgorCisgICAgIElmIFJFR19OT1NVQiBpcyBzZXQsIHRoZW4gd2hlbiBQUkVHIGlzIHBhc3NlZCB0byByZWdleGVjLCB0aGF0CisgICAgIHJvdXRpbmUgd2lsbCByZXBvcnQgb25seSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCBub3RoaW5nIGFib3V0IHRoZQorICAgICByZWdpc3RlcnMuCisKKyAgIEl0IHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgbm9uemVybyBpZiBpdCBkb2Vzbid0LiAgKFNlZSByZWdleC5oIGZvcgorICAgdGhlIHJldHVybiBjb2RlcyBhbmQgdGhlaXIgbWVhbmluZ3MuKSAgKi8KKworaW50CityZWdjb21wIChyZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCisJIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgcGF0dGVybiwKKwkgaW50IGNmbGFncykKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJlZ19zeW50YXhfdCBzeW50YXggPSAoKGNmbGFncyAmIFJFR19FWFRFTkRFRCkgPyBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQKKwkJCSA6IFJFX1NZTlRBWF9QT1NJWF9CQVNJQyk7CisKKyAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKyAgcHJlZy0+dXNlZCA9IDA7CisKKyAgLyogVHJ5IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgZmFzdG1hcC4gICovCisgIHByZWctPmZhc3RtYXAgPSByZV9tYWxsb2MgKGNoYXIsIFNCQ19NQVgpOworICBpZiAoQkUgKHByZWctPmZhc3RtYXAgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgc3ludGF4IHw9IChjZmxhZ3MgJiBSRUdfSUNBU0UpID8gUkVfSUNBU0UgOiAwOworCisgIC8qIElmIFJFR19ORVdMSU5FIGlzIHNldCwgbmV3bGluZXMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuICAqLworICBpZiAoY2ZsYWdzICYgUkVHX05FV0xJTkUpCisgICAgeyAvKiBSRUdfTkVXTElORSBpbXBsaWVzIG5laXRoZXIgLiBub3IgW14uLi5dIG1hdGNoIG5ld2xpbmUuICAqLworICAgICAgc3ludGF4ICY9IH5SRV9ET1RfTkVXTElORTsKKyAgICAgIHN5bnRheCB8PSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkU7CisgICAgICAvKiBJdCBhbHNvIGNoYW5nZXMgdGhlIG1hdGNoaW5nIGJlaGF2aW9yLiAgKi8KKyAgICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICBwcmVnLT5uZXdsaW5lX2FuY2hvciA9IDA7CisgIHByZWctPm5vX3N1YiA9ICEhKGNmbGFncyAmIFJFR19OT1NVQik7CisgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7CisKKyAgcmV0ID0gcmVfY29tcGlsZV9pbnRlcm5hbCAocHJlZywgcGF0dGVybiwgc3RybGVuIChwYXR0ZXJuKSwgc3ludGF4KTsKKworICAvKiBQT1NJWCBkb2Vzbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gdW5tYXRjaGVkIG9wZW4tZ3JvdXAgYW5kIGFuCisgICAgIHVubWF0Y2hlZCBjbG9zZS1ncm91cDogYm90aCBhcmUgUkVHX0VQQVJFTi4gICovCisgIGlmIChyZXQgPT0gUkVHX0VSUEFSRU4pCisgICAgcmV0ID0gUkVHX0VQQVJFTjsKKworICAvKiBXZSBoYXZlIGFscmVhZHkgY2hlY2tlZCBwcmVnLT5mYXN0bWFwICE9IE5VTEwuICAqLworICBpZiAoQkUgKHJldCA9PSBSRUdfTk9FUlJPUiwgMSkpCisgICAgLyogQ29tcHV0ZSB0aGUgZmFzdG1hcCBub3csIHNpbmNlIHJlZ2V4ZWMgY2Fubm90IG1vZGlmeSB0aGUgcGF0dGVybgorICAgICAgIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgZmFpbHMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gICovCisgICAgKHZvaWQpIHJlX2NvbXBpbGVfZmFzdG1hcCAocHJlZyk7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBTb21lIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbXBpbGluZyB0aGUgZXhwcmVzc2lvbi4gICovCisgICAgICByZV9mcmVlIChwcmVnLT5mYXN0bWFwKTsKKyAgICAgIHByZWctPmZhc3RtYXAgPSBOVUxMOworICAgIH0KKworICByZXR1cm4gKGludCkgcmV0OworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlZ2NvbXAsIHJlZ2NvbXApCisjZW5kaWYKKworLyogUmV0dXJucyBhIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byBhbiBlcnJvciBjb2RlLCBFUlJDT0RFLCByZXR1cm5lZAorICAgZnJvbSBlaXRoZXIgcmVnY29tcCBvciByZWdleGVjLiAgIFdlIGRvbid0IHVzZSBQUkVHIGhlcmUuICAqLworCitzaXplX3QKK3JlZ2Vycm9yKGludCBlcnJjb2RlLCBjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCisJIGNoYXIgKl9fcmVzdHJpY3QgZXJyYnVmLCBzaXplX3QgZXJyYnVmX3NpemUpCit7CisgIGNvbnN0IGNoYXIgKm1zZzsKKyAgc2l6ZV90IG1zZ19zaXplOworCisgIGlmIChCRSAoZXJyY29kZSA8IDAKKwkgIHx8IGVycmNvZGUgPj0gKGludCkgKHNpemVvZiAoX19yZV9lcnJvcl9tc2dpZF9pZHgpCisJCQkgICAgICAgLyBzaXplb2YgKF9fcmVfZXJyb3JfbXNnaWRfaWR4WzBdKSksIDApKQorICAgIC8qIE9ubHkgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgc2hvdWxkIGJlIHBhc3NlZAorICAgICAgIHRvIHRoaXMgcm91dGluZS4gIElmIHdlIGFyZSBnaXZlbiBhbnl0aGluZyBlbHNlLCBvciBpZiBvdGhlciByZWdleAorICAgICAgIGNvZGUgZ2VuZXJhdGVzIGFuIGludmFsaWQgZXJyb3IgY29kZSwgdGhlbiB0aGUgcHJvZ3JhbSBoYXMgYSBidWcuCisgICAgICAgRHVtcCBjb3JlIHNvIHdlIGNhbiBmaXggaXQuICAqLworICAgIGFib3J0ICgpOworCisgIG1zZyA9IGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFtlcnJjb2RlXSk7CisKKyAgbXNnX3NpemUgPSBzdHJsZW4gKG1zZykgKyAxOyAvKiBJbmNsdWRlcyB0aGUgbnVsbC4gICovCisKKyAgaWYgKEJFIChlcnJidWZfc2l6ZSAhPSAwLCAxKSkKKyAgICB7CisgICAgICBpZiAoQkUgKG1zZ19zaXplID4gZXJyYnVmX3NpemUsIDApKQorCXsKKwkgIG1lbWNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSk7CisJICBlcnJidWZbZXJyYnVmX3NpemUgLSAxXSA9IDA7CisJfQorICAgICAgZWxzZQorCW1lbWNweSAoZXJyYnVmLCBtc2csIG1zZ19zaXplKTsKKyAgICB9CisKKyAgcmV0dXJuIG1zZ19zaXplOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlZ2Vycm9yLCByZWdlcnJvcikKKyNlbmRpZgorCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLyogVGhpcyBzdGF0aWMgYXJyYXkgaXMgdXNlZCBmb3IgdGhlIG1hcCB0byBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzIHdoZW4KKyAgIFVURi04IGlzIHVzZWQuICBPdGhlcndpc2Ugd2Ugd291bGQgYWxsb2NhdGUgbWVtb3J5IGp1c3QgdG8gaW5pdGlhbGl6ZQorICAgaXQgdGhlIHNhbWUgYWxsIHRoZSB0aW1lLiAgVVRGLTggaXMgdGhlIHByZWZlcnJlZCBlbmNvZGluZyBzbyB0aGlzIGlzCisgICBhIHdvcnRod2hpbGUgb3B0aW1pemF0aW9uLiAgKi8KKyNpZiBfX0dOVUNfXyA+PSAzCitzdGF0aWMgY29uc3QgYml0c2V0X3QgdXRmOF9zYl9tYXAgPSB7CisgIC8qIFNldCB0aGUgZmlyc3QgMTI4IGJpdHMuICAqLworICBbMCAuLi4gMHg4MCAvIEJJVFNFVF9XT1JEX0JJVFMgLSAxXSA9IEJJVFNFVF9XT1JEX01BWAorfTsKKyNlbHNlIC8qICEgKF9fR05VQ19fID49IDMpICovCitzdGF0aWMgYml0c2V0X3QgdXRmOF9zYl9tYXA7CisjZW5kaWYgLyogX19HTlVDX18gPj0gMyAqLworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKworc3RhdGljIHZvaWQKK2ZyZWVfZGZhX2NvbnRlbnQgKHJlX2RmYV90ICpkZmEpCit7CisgIGludCBpLCBqOworCisgIGlmIChkZmEtPm5vZGVzKQorICAgIGZvciAoaSA9IDA7IGkgPCBkZmEtPm5vZGVzX2xlbjsgKytpKQorICAgICAgZnJlZV90b2tlbiAoZGZhLT5ub2RlcyArIGkpOworICByZV9mcmVlIChkZmEtPm5leHRzKTsKKyAgZm9yIChpID0gMDsgaSA8IGRmYS0+bm9kZXNfbGVuOyArK2kpCisgICAgeworICAgICAgaWYgKGRmYS0+ZWNsb3N1cmVzICE9IE5VTEwpCisJcmVfbm9kZV9zZXRfZnJlZSAoZGZhLT5lY2xvc3VyZXMgKyBpKTsKKyAgICAgIGlmIChkZmEtPmludmVjbG9zdXJlcyAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKGRmYS0+aW52ZWNsb3N1cmVzICsgaSk7CisgICAgICBpZiAoZGZhLT5lZGVzdHMgIT0gTlVMTCkKKwlyZV9ub2RlX3NldF9mcmVlIChkZmEtPmVkZXN0cyArIGkpOworICAgIH0KKyAgcmVfZnJlZSAoZGZhLT5lZGVzdHMpOworICByZV9mcmVlIChkZmEtPmVjbG9zdXJlcyk7CisgIHJlX2ZyZWUgKGRmYS0+aW52ZWNsb3N1cmVzKTsKKyAgcmVfZnJlZSAoZGZhLT5ub2Rlcyk7CisKKyAgaWYgKGRmYS0+c3RhdGVfdGFibGUpCisgICAgZm9yIChpID0gMDsgaSA8PSBkZmEtPnN0YXRlX2hhc2hfbWFzazsgKytpKQorICAgICAgeworCXN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqZW50cnkgPSBkZmEtPnN0YXRlX3RhYmxlICsgaTsKKwlmb3IgKGogPSAwOyBqIDwgZW50cnktPm51bTsgKytqKQorCSAgeworCSAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IGVudHJ5LT5hcnJheVtqXTsKKwkgICAgZnJlZV9zdGF0ZSAoc3RhdGUpOworCSAgfQorCXJlX2ZyZWUgKGVudHJ5LT5hcnJheSk7CisgICAgICB9CisgIHJlX2ZyZWUgKGRmYS0+c3RhdGVfdGFibGUpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChkZmEtPnNiX2NoYXIgIT0gdXRmOF9zYl9tYXApCisgICAgcmVfZnJlZSAoZGZhLT5zYl9jaGFyKTsKKyNlbmRpZgorICByZV9mcmVlIChkZmEtPnN1YmV4cF9tYXApOworI2lmZGVmIERFQlVHCisgIHJlX2ZyZWUgKGRmYS0+cmVfc3RyKTsKKyNlbmRpZgorCisgIHJlX2ZyZWUgKGRmYSk7Cit9CisKKworLyogRnJlZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3BhY2UgdXNlZCBieSBQUkVHLiAgKi8KKwordm9pZAorcmVnZnJlZSAocmVnZXhfdCAqcHJlZykKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGlmIChCRSAoZGZhICE9IE5VTEwsIDEpKQorICAgIGZyZWVfZGZhX2NvbnRlbnQgKGRmYSk7CisgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgIHByZWctPmFsbG9jYXRlZCA9IDA7CisKKyAgcmVfZnJlZSAocHJlZy0+ZmFzdG1hcCk7CisgIHByZWctPmZhc3RtYXAgPSBOVUxMOworCisgIHJlX2ZyZWUgKHByZWctPnRyYW5zbGF0ZSk7CisgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVnZnJlZSwgcmVnZnJlZSkKKyNlbmRpZgorDAorLyogRW50cnkgcG9pbnRzIGNvbXBhdGlibGUgd2l0aCA0LjIgQlNEIHJlZ2V4IGxpYnJhcnkuICBXZSBkb24ndCBkZWZpbmUKKyAgIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuICAqLworCisjaWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCBkZWZpbmVkIF9MSUJDCisKKy8qIEJTRCBoYXMgb25lIGFuZCBvbmx5IG9uZSBwYXR0ZXJuIGJ1ZmZlci4gICovCitzdGF0aWMgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlX2NvbXBfYnVmOworCitjaGFyICoKKyMgaWZkZWYgX0xJQkMKKy8qIE1ha2UgdGhlc2UgZGVmaW5pdGlvbnMgd2VhayBpbiBsaWJjLCBzbyBQT1NJWCBwcm9ncmFtcyBjYW4gcmVkZWZpbmUKKyAgIHRoZXNlIG5hbWVzIGlmIHRoZXkgZG9uJ3QgdXNlIG91ciBmdW5jdGlvbnMsIGFuZCBzdGlsbCB1c2UKKyAgIHJlZ2NvbXAvcmVnZXhlYyBhYm92ZSB3aXRob3V0IGxpbmsgZXJyb3JzLiAgKi8KK3dlYWtfZnVuY3Rpb24KKyMgZW5kaWYKK3JlX2NvbXAgKHMpCisgICAgIGNvbnN0IGNoYXIgKnM7Cit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICBjaGFyICpmYXN0bWFwOworCisgIGlmICghcykKKyAgICB7CisgICAgICBpZiAoIXJlX2NvbXBfYnVmLmJ1ZmZlcikKKwlyZXR1cm4gZ2V0dGV4dCAoIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChyZV9jb21wX2J1Zi5idWZmZXIpCisgICAgeworICAgICAgZmFzdG1hcCA9IHJlX2NvbXBfYnVmLmZhc3RtYXA7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gTlVMTDsKKyAgICAgIF9fcmVnZnJlZSAoJnJlX2NvbXBfYnVmKTsKKyAgICAgIG1lbXNldCAoJnJlX2NvbXBfYnVmLCAnXDAnLCBzaXplb2YgKHJlX2NvbXBfYnVmKSk7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gZmFzdG1hcDsKKyAgICB9CisKKyAgaWYgKHJlX2NvbXBfYnVmLmZhc3RtYXAgPT0gTlVMTCkKKyAgICB7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gKGNoYXIgKikgbWFsbG9jIChTQkNfTUFYKTsKKyAgICAgIGlmIChyZV9jb21wX2J1Zi5mYXN0bWFwID09IE5VTEwpCisJcmV0dXJuIChjaGFyICopIGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQKKwkJCQkgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFsoaW50KSBSRUdfRVNQQUNFXSk7CisgICAgfQorCisgIC8qIFNpbmNlIGByZV9leGVjJyBhbHdheXMgcGFzc2VzIE5VTEwgZm9yIHRoZSBgcmVncycgYXJndW1lbnQsIHdlCisgICAgIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIgZmllbGRzIHdoaWNoIGFmZmVjdCBpdC4gICovCisKKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lcy4gICovCisgIHJlX2NvbXBfYnVmLm5ld2xpbmVfYW5jaG9yID0gMTsKKworICByZXQgPSByZV9jb21waWxlX2ludGVybmFsICgmcmVfY29tcF9idWYsIHMsIHN0cmxlbiAocyksIHJlX3N5bnRheF9vcHRpb25zKTsKKworICBpZiAoIXJldCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBZZXMsIHdlJ3JlIGRpc2NhcmRpbmcgYGNvbnN0JyBoZXJlIGlmICFIQVZFX0xJQklOVEwuICAqLworICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAoX19yZV9lcnJvcl9tc2dpZCArIF9fcmVfZXJyb3JfbXNnaWRfaWR4WyhpbnQpIHJldF0pOworfQorCisjaWZkZWYgX0xJQkMKK2xpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCit7CisgIF9fcmVnZnJlZSAoJnJlX2NvbXBfYnVmKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1JFR0VYX1JFX0NPTVAgKi8KKwwKKy8qIEludGVybmFsIGVudHJ5IHBvaW50LgorICAgQ29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVFRFUk4sIHdob3NlIGxlbmd0aCBpcyBMRU5HVEguCisgICBTWU5UQVggaW5kaWNhdGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3JlX2NvbXBpbGVfaW50ZXJuYWwgKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKiBwYXR0ZXJuLCBzaXplX3QgbGVuZ3RoLAorCQkgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisgIHJlX2RmYV90ICpkZmE7CisgIHJlX3N0cmluZ190IHJlZ2V4cDsKKworICAvKiBJbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlci4gICovCisgIHByZWctPmZhc3RtYXBfYWNjdXJhdGUgPSAwOworICBwcmVnLT5zeW50YXggPSBzeW50YXg7CisgIHByZWctPm5vdF9ib2wgPSBwcmVnLT5ub3RfZW9sID0gMDsKKyAgcHJlZy0+dXNlZCA9IDA7CisgIHByZWctPnJlX25zdWIgPSAwOworICBwcmVnLT5jYW5fYmVfbnVsbCA9IDA7CisgIHByZWctPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKworICAvKiBJbml0aWFsaXplIHRoZSBkZmEuICAqLworICBkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBpZiAoQkUgKHByZWctPmFsbG9jYXRlZCA8IHNpemVvZiAocmVfZGZhX3QpLCAwKSkKKyAgICB7CisgICAgICAvKiBJZiB6ZXJvIGFsbG9jYXRlZCwgYnV0IGJ1ZmZlciBpcyBub24tbnVsbCwgdHJ5IHRvIHJlYWxsb2MKKwkgZW5vdWdoIHNwYWNlLiAgVGhpcyBsb3NlcyBpZiBidWZmZXIncyBhZGRyZXNzIGlzIGJvZ3VzLCBidXQKKwkgdGhhdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LiAgSWYgLT5idWZmZXIgaXMgTlVMTCB0aGlzCisJIGlzIGEgc2ltcGxlIGFsbG9jYXRpb24uICAqLworICAgICAgZGZhID0gcmVfcmVhbGxvYyAocHJlZy0+YnVmZmVyLCByZV9kZmFfdCwgMSk7CisgICAgICBpZiAoZGZhID09IE5VTEwpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSBzaXplb2YgKHJlX2RmYV90KTsKKyAgICAgIHByZWctPmJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGRmYTsKKyAgICB9CisgIHByZWctPnVzZWQgPSBzaXplb2YgKHJlX2RmYV90KTsKKworICBlcnIgPSBpbml0X2RmYSAoZGZhLCBsZW5ndGgpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgICAgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgLyogTm90ZTogbGVuZ3RoKzEgd2lsbCBub3Qgb3ZlcmZsb3cgc2luY2UgaXQgaXMgY2hlY2tlZCBpbiBpbml0X2RmYS4gICovCisgIGRmYS0+cmVfc3RyID0gcmVfbWFsbG9jIChjaGFyLCBsZW5ndGggKyAxKTsKKyAgc3RybmNweSAoZGZhLT5yZV9zdHIsIHBhdHRlcm4sIGxlbmd0aCArIDEpOworI2VuZGlmCisKKyAgX19saWJjX2xvY2tfaW5pdCAoZGZhLT5sb2NrKTsKKworICBlcnIgPSByZV9zdHJpbmdfY29uc3RydWN0ICgmcmVnZXhwLCBwYXR0ZXJuLCBsZW5ndGgsIHByZWctPnRyYW5zbGF0ZSwKKwkJCSAgICAgc3ludGF4ICYgUkVfSUNBU0UsIGRmYSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgcmVfY29tcGlsZV9pbnRlcm5hbF9mcmVlX3JldHVybjoKKyAgICAgIGZyZWVfd29ya2FyZWFfY29tcGlsZSAocHJlZyk7CisgICAgICByZV9zdHJpbmdfZGVzdHJ1Y3QgKCZyZWdleHApOworICAgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgICAgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgLyogUGFyc2UgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYW5kIGJ1aWxkIGEgc3RydWN0dXJlIHRyZWUuICAqLworICBwcmVnLT5yZV9uc3ViID0gMDsKKyAgZGZhLT5zdHJfdHJlZSA9IHBhcnNlICgmcmVnZXhwLCBwcmVnLCBzeW50YXgsICZlcnIpOworICBpZiAoQkUgKGRmYS0+c3RyX3RyZWUgPT0gTlVMTCwgMCkpCisgICAgZ290byByZV9jb21waWxlX2ludGVybmFsX2ZyZWVfcmV0dXJuOworCisgIC8qIEFuYWx5emUgdGhlIHRyZWUgYW5kIGNyZWF0ZSB0aGUgbmZhLiAgKi8KKyAgZXJyID0gYW5hbHl6ZSAocHJlZyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIHJlX2NvbXBpbGVfaW50ZXJuYWxfZnJlZV9yZXR1cm47CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBJZiBwb3NzaWJsZSwgZG8gc2VhcmNoaW5nIGluIHNpbmdsZSBieXRlIGVuY29kaW5nIHRvIHNwZWVkIHRoaW5ncyB1cC4gICovCisgIGlmIChkZmEtPmlzX3V0ZjggJiYgIShzeW50YXggJiBSRV9JQ0FTRSkgJiYgcHJlZy0+dHJhbnNsYXRlID09IE5VTEwpCisgICAgb3B0aW1pemVfdXRmOCAoZGZhKTsKKyNlbmRpZgorCisgIC8qIFRoZW4gY3JlYXRlIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkZmEuICAqLworICBlcnIgPSBjcmVhdGVfaW5pdGlhbF9zdGF0ZSAoZGZhKTsKKworICAvKiBSZWxlYXNlIHdvcmsgYXJlYXMuICAqLworICBmcmVlX3dvcmthcmVhX2NvbXBpbGUgKHByZWcpOworICByZV9zdHJpbmdfZGVzdHJ1Y3QgKCZyZWdleHApOworCisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICBmcmVlX2RmYV9jb250ZW50IChkZmEpOworICAgICAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgICAgIHByZWctPmFsbG9jYXRlZCA9IDA7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKKy8qIEluaXRpYWxpemUgREZBLiAgV2UgdXNlIHRoZSBsZW5ndGggb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBQQVRfTEVOCisgICBhcyB0aGUgaW5pdGlhbCBsZW5ndGggb2Ygc29tZSBhcnJheXMuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW5pdF9kZmEgKHJlX2RmYV90ICpkZmEsIHNpemVfdCBwYXRfbGVuKQoreworICB1bnNpZ25lZCBpbnQgdGFibGVfc2l6ZTsKKyNpZm5kZWYgX0xJQkMKKyAgY2hhciAqY29kZXNldF9uYW1lOworI2VuZGlmCisKKyAgbWVtc2V0IChkZmEsICdcMCcsIHNpemVvZiAocmVfZGZhX3QpKTsKKworICAvKiBGb3JjZSBhbGxvY2F0aW9uIG9mIHN0cl90cmVlX3N0b3JhZ2UgdGhlIGZpcnN0IHRpbWUuICAqLworICBkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID0gQklOX1RSRUVfU1RPUkFHRV9TSVpFOworCisgIC8qIEF2b2lkIG92ZXJmbG93cy4gICovCisgIGlmIChwYXRfbGVuID09IFNJWkVfTUFYKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIGRmYS0+bm9kZXNfYWxsb2MgPSBwYXRfbGVuICsgMTsKKyAgZGZhLT5ub2RlcyA9IHJlX21hbGxvYyAocmVfdG9rZW5fdCwgZGZhLT5ub2Rlc19hbGxvYyk7CisKKyAgLyogIHRhYmxlX3NpemUgPSAyIF4gY2VpbChsb2cgcGF0X2xlbikgKi8KKyAgZm9yICh0YWJsZV9zaXplID0gMTsgOyB0YWJsZV9zaXplIDw8PSAxKQorICAgIGlmICh0YWJsZV9zaXplID4gcGF0X2xlbikKKyAgICAgIGJyZWFrOworCisgIGRmYS0+c3RhdGVfdGFibGUgPSBjYWxsb2MgKHNpemVvZiAoc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5KSwgdGFibGVfc2l6ZSk7CisgIGRmYS0+c3RhdGVfaGFzaF9tYXNrID0gdGFibGVfc2l6ZSAtIDE7CisKKyAgZGZhLT5tYl9jdXJfbWF4ID0gTUJfQ1VSX01BWDsKKyNpZmRlZiBfTElCQworICBpZiAoZGZhLT5tYl9jdXJfbWF4ID09IDYKKyAgICAgICYmIHN0cmNtcCAoX05MX0NVUlJFTlQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FKSwgIlVURi04IikgPT0gMCkKKyAgICBkZmEtPmlzX3V0ZjggPSAxOworICBkZmEtPm1hcF9ub3Rhc2NpaSA9IChfTkxfQ1VSUkVOVF9XT1JEIChMQ19DVFlQRSwgX05MX0NUWVBFX01BUF9UT19OT05BU0NJSSkKKwkJICAgICAgICE9IDApOworI2Vsc2UKKyMgaWZkZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgIGNvZGVzZXRfbmFtZSA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKyMgZWxzZQorICBjb2Rlc2V0X25hbWUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKyAgaWYgKGNvZGVzZXRfbmFtZSA9PSBOVUxMIHx8IGNvZGVzZXRfbmFtZVswXSA9PSAnXDAnKQorICAgIGNvZGVzZXRfbmFtZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisgIGlmIChjb2Rlc2V0X25hbWUgPT0gTlVMTCB8fCBjb2Rlc2V0X25hbWVbMF0gPT0gJ1wwJykKKyAgICBjb2Rlc2V0X25hbWUgPSBnZXRlbnYgKCJMQU5HIik7CisgIGlmIChjb2Rlc2V0X25hbWUgPT0gTlVMTCkKKyAgICBjb2Rlc2V0X25hbWUgPSAiIjsKKyAgZWxzZSBpZiAoc3RyY2hyIChjb2Rlc2V0X25hbWUsICcuJykgIT0gIE5VTEwpCisgICAgY29kZXNldF9uYW1lID0gc3RyY2hyIChjb2Rlc2V0X25hbWUsICcuJykgKyAxOworIyBlbmRpZgorCisgIC8qIHN0cmNhc2VjbXAgaXNuJ3QgYSBzdGFuZGFyZCBpbnRlcmZhY2UuIGJydXRlIGZvcmNlIGNoZWNrICovCisjaWYgMAorICBpZiAoc3RyY2FzZWNtcCAoY29kZXNldF9uYW1lLCAiVVRGLTgiKSA9PSAwCisgICAgICB8fCBzdHJjYXNlY21wIChjb2Rlc2V0X25hbWUsICJVVEY4IikgPT0gMCkKKyAgICBkZmEtPmlzX3V0ZjggPSAxOworI2Vsc2UKKyAgaWYgKCAgIChjb2Rlc2V0X25hbWVbMF0gPT0gJ1UnIHx8IGNvZGVzZXRfbmFtZVswXSA9PSAndScpCisgICAgICAmJiAoY29kZXNldF9uYW1lWzFdID09ICdUJyB8fCBjb2Rlc2V0X25hbWVbMV0gPT0gJ3QnKQorICAgICAgJiYgKGNvZGVzZXRfbmFtZVsyXSA9PSAnRicgfHwgY29kZXNldF9uYW1lWzJdID09ICdmJykKKyAgICAgICYmIChjb2Rlc2V0X25hbWVbM10gPT0gJy0nCisgICAgICAgICAgPyBjb2Rlc2V0X25hbWVbNF0gPT0gJzgnICYmIGNvZGVzZXRfbmFtZVs1XSA9PSAnXDAnCisgICAgICAgICAgOiBjb2Rlc2V0X25hbWVbM10gPT0gJzgnICYmIGNvZGVzZXRfbmFtZVs0XSA9PSAnXDAnKSkKKyAgICBkZmEtPmlzX3V0ZjggPSAxOworI2VuZGlmCisKKyAgLyogV2UgY2hlY2sgZXhoYXVzdGl2ZWx5IGluIHRoZSBsb29wIGJlbG93IGlmIHRoaXMgY2hhcnNldCBpcyBhCisgICAgIHN1cGVyc2V0IG9mIEFTQ0lJLiAgKi8KKyAgZGZhLT5tYXBfbm90YXNjaWkgPSAwOworI2VuZGlmCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKyAgICB7CisgICAgICBpZiAoZGZhLT5pc191dGY4KQorICAgICAgICB7CisjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgMworCSAgc3RhdGljIHNob3J0IHV0Zjhfc2JfbWFwX2luaXRlZCA9IDA7CisKKwkgIGlmICghIHV0Zjhfc2JfbWFwX2luaXRlZCkKKwkgICAgeworCQlpbnQgaTsKKworCSAgCXV0Zjhfc2JfbWFwX2luaXRlZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPD0gMHg4MCAvIEJJVFNFVF9XT1JEX0JJVFMgLSAxOyBpKyspCisJCSAgdXRmOF9zYl9tYXBbaV0gPSBCSVRTRVRfV09SRF9NQVg7CisJICAgIH0KKyNlbmRpZgorCSAgZGZhLT5zYl9jaGFyID0gKHJlX2JpdHNldF9wdHJfdCkgdXRmOF9zYl9tYXA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGludCBpLCBqLCBjaDsKKworCSAgZGZhLT5zYl9jaGFyID0gKHJlX2JpdHNldF9wdHJfdCkgY2FsbG9jIChzaXplb2YgKGJpdHNldF90KSwgMSk7CisJICBpZiAoQkUgKGRmYS0+c2JfY2hhciA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKwkgIC8qIFNldCB0aGUgYml0cyBjb3JyZXNwb25kaW5nIHRvIHNpbmdsZSBieXRlIGNoYXJzLiAgKi8KKwkgIGZvciAoaSA9IDAsIGNoID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorCSAgICBmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRfQklUUzsgKytqLCArK2NoKQorCSAgICAgIHsKKwkJd2ludF90IHdjaCA9IF9fYnRvd2MgKGNoKTsKKwkJaWYgKHdjaCAhPSBXRU9GKQorCQkgIGRmYS0+c2JfY2hhcltpXSB8PSAoYml0c2V0X3dvcmRfdCkgMSA8PCBqOworIyBpZm5kZWYgX0xJQkMKKwkJaWYgKGlzYXNjaWkgKGNoKSAmJiB3Y2ggIT0gY2gpCisJCSAgZGZhLT5tYXBfbm90YXNjaWkgPSAxOworIyBlbmRpZgorCSAgICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyAgaWYgKEJFIChkZmEtPm5vZGVzID09IE5VTEwgfHwgZGZhLT5zdGF0ZV90YWJsZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBJbml0aWFsaXplIFdPUkRfQ0hBUiB0YWJsZSwgd2hpY2ggaW5kaWNhdGUgd2hpY2ggY2hhcmFjdGVyIGlzCisgICAid29yZCIuICBJbiB0aGlzIGNhc2UgIndvcmQiIG1lYW5zIHRoYXQgaXQgaXMgdGhlIHdvcmQgY29uc3RydWN0aW9uCisgICBjaGFyYWN0ZXIgdXNlZCBieSBzb21lIG9wZXJhdG9ycyBsaWtlICJcPCIsICJcPiIsIGV0Yy4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgoraW5pdF93b3JkX2NoYXIgKHJlX2RmYV90ICpkZmEpCit7CisgIGludCBpLCBqLCBjaDsKKyAgZGZhLT53b3JkX29wc191c2VkID0gMTsKKyAgZm9yIChpID0gMCwgY2ggPSAwOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisgICAgZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEX0JJVFM7ICsraiwgKytjaCkKKyAgICAgIGlmIChpc2FsbnVtIChjaCkgfHwgY2ggPT0gJ18nKQorCWRmYS0+d29yZF9jaGFyW2ldIHw9IChiaXRzZXRfd29yZF90KSAxIDw8IGo7Cit9CisKKy8qIEZyZWUgdGhlIHdvcmsgYXJlYSB3aGljaCBhcmUgb25seSB1c2VkIHdoaWxlIGNvbXBpbGluZy4gICovCisKK3N0YXRpYyB2b2lkCitmcmVlX3dvcmthcmVhX2NvbXBpbGUgKHJlZ2V4X3QgKnByZWcpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV9zdG9yYWdlX3QgKnN0b3JhZ2UsICpuZXh0OworICBmb3IgKHN0b3JhZ2UgPSBkZmEtPnN0cl90cmVlX3N0b3JhZ2U7IHN0b3JhZ2U7IHN0b3JhZ2UgPSBuZXh0KQorICAgIHsKKyAgICAgIG5leHQgPSBzdG9yYWdlLT5uZXh0OworICAgICAgcmVfZnJlZSAoc3RvcmFnZSk7CisgICAgfQorICBkZmEtPnN0cl90cmVlX3N0b3JhZ2UgPSBOVUxMOworICBkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID0gQklOX1RSRUVfU1RPUkFHRV9TSVpFOworICBkZmEtPnN0cl90cmVlID0gTlVMTDsKKyAgcmVfZnJlZSAoZGZhLT5vcmdfaW5kaWNlcyk7CisgIGRmYS0+b3JnX2luZGljZXMgPSBOVUxMOworfQorCisvKiBDcmVhdGUgaW5pdGlhbCBzdGF0ZXMgZm9yIGFsbCBjb250ZXh0cy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitjcmVhdGVfaW5pdGlhbF9zdGF0ZSAocmVfZGZhX3QgKmRmYSkKK3sKKyAgaW50IGZpcnN0LCBpOworICByZWdfZXJyY29kZV90IGVycjsKKyAgcmVfbm9kZV9zZXQgaW5pdF9ub2RlczsKKworICAvKiBJbml0aWFsIHN0YXRlcyBoYXZlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgdGhlIG5vZGUgd2hpY2ggaXMKKyAgICAgdGhlIGZpcnN0IG5vZGUgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gICovCisgIGZpcnN0ID0gZGZhLT5zdHJfdHJlZS0+Zmlyc3QtPm5vZGVfaWR4OworICBkZmEtPmluaXRfbm9kZSA9IGZpcnN0OworICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZpbml0X25vZGVzLCBkZmEtPmVjbG9zdXJlcyArIGZpcnN0KTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBlcnI7CisKKyAgLyogVGhlIGJhY2stcmVmZXJlbmNlcyB3aGljaCBhcmUgaW4gaW5pdGlhbCBzdGF0ZXMgY2FuIGVwc2lsb24gdHJhbnNpdCwKKyAgICAgc2luY2UgaW4gdGhpcyBjYXNlIGFsbCBvZiB0aGUgc3ViZXhwcmVzc2lvbnMgY2FuIGJlIG51bGwuCisgICAgIFRoZW4gd2UgYWRkIGVwc2lsb24gY2xvc3VyZXMgb2YgdGhlIG5vZGVzIHdoaWNoIGFyZSB0aGUgbmV4dCBub2RlcyBvZgorICAgICB0aGUgYmFjay1yZWZlcmVuY2VzLiAgKi8KKyAgaWYgKGRmYS0+bmJhY2tyZWYgPiAwKQorICAgIGZvciAoaSA9IDA7IGkgPCBpbml0X25vZGVzLm5lbGVtOyArK2kpCisgICAgICB7CisJaW50IG5vZGVfaWR4ID0gaW5pdF9ub2Rlcy5lbGVtc1tpXTsKKwlyZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV9pZHhdLnR5cGU7CisKKwlpbnQgY2xleHBfaWR4OworCWlmICh0eXBlICE9IE9QX0JBQ0tfUkVGKQorCSAgY29udGludWU7CisJZm9yIChjbGV4cF9pZHggPSAwOyBjbGV4cF9pZHggPCBpbml0X25vZGVzLm5lbGVtOyArK2NsZXhwX2lkeCkKKwkgIHsKKwkgICAgcmVfdG9rZW5fdCAqY2xleHBfbm9kZTsKKwkgICAgY2xleHBfbm9kZSA9IGRmYS0+bm9kZXMgKyBpbml0X25vZGVzLmVsZW1zW2NsZXhwX2lkeF07CisJICAgIGlmIChjbGV4cF9ub2RlLT50eXBlID09IE9QX0NMT1NFX1NVQkVYUAorCQkmJiBjbGV4cF9ub2RlLT5vcHIuaWR4ID09IGRmYS0+bm9kZXNbbm9kZV9pZHhdLm9wci5pZHgpCisJICAgICAgYnJlYWs7CisJICB9CisJaWYgKGNsZXhwX2lkeCA9PSBpbml0X25vZGVzLm5lbGVtKQorCSAgY29udGludWU7CisKKwlpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwkgIHsKKwkgICAgaW50IGRlc3RfaWR4ID0gZGZhLT5lZGVzdHNbbm9kZV9pZHhdLmVsZW1zWzBdOworCSAgICBpZiAoIXJlX25vZGVfc2V0X2NvbnRhaW5zICgmaW5pdF9ub2RlcywgZGVzdF9pZHgpKQorCSAgICAgIHsKKwkJcmVnX2VycmNvZGVfdCBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJmluaXRfbm9kZXMsCisJCQkJCQkgICAgICAgZGZhLT5lY2xvc3VyZXMKKwkJCQkJCSAgICAgICArIGRlc3RfaWR4KTsKKwkJaWYgKGVyciAhPSBSRUdfTk9FUlJPUikKKwkJICByZXR1cm4gZXJyOworCQlpID0gMDsKKwkgICAgICB9CisJICB9CisgICAgICB9CisKKyAgLyogSXQgbXVzdCBiZSB0aGUgZmlyc3QgdGltZSB0byBpbnZva2UgYWNxdWlyZV9zdGF0ZS4gICovCisgIGRmYS0+aW5pdF9zdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmaW5pdF9ub2RlcywgMCk7CisgIC8qIFdlIGRvbid0IGNoZWNrIEVSUiBoZXJlLCBzaW5jZSB0aGUgaW5pdGlhbCBzdGF0ZSBtdXN0IG5vdCBiZSBOVUxMLiAgKi8KKyAgaWYgKEJFIChkZmEtPmluaXRfc3RhdGUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZS0+aGFzX2NvbnN0cmFpbnQpCisgICAgeworICAgICAgZGZhLT5pbml0X3N0YXRlX3dvcmQgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmluaXRfbm9kZXMsCisJCQkJCQkgICAgICAgQ09OVEVYVF9XT1JEKTsKKyAgICAgIGRmYS0+aW5pdF9zdGF0ZV9ubCA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmaW5pdF9ub2RlcywKKwkJCQkJCSAgICAgQ09OVEVYVF9ORVdMSU5FKTsKKyAgICAgIGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwKKwkJCQkJCQkgJmluaXRfbm9kZXMsCisJCQkJCQkJIENPTlRFWFRfTkVXTElORQorCQkJCQkJCSB8IENPTlRFWFRfQkVHQlVGKTsKKyAgICAgIGlmIChCRSAoZGZhLT5pbml0X3N0YXRlX3dvcmQgPT0gTlVMTCB8fCBkZmEtPmluaXRfc3RhdGVfbmwgPT0gTlVMTAorCSAgICAgIHx8IGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYgPT0gTlVMTCwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisgIGVsc2UKKyAgICBkZmEtPmluaXRfc3RhdGVfd29yZCA9IGRmYS0+aW5pdF9zdGF0ZV9ubAorICAgICAgPSBkZmEtPmluaXRfc3RhdGVfYmVnYnVmID0gZGZhLT5pbml0X3N0YXRlOworCisgIHJlX25vZGVfc2V0X2ZyZWUgKCZpbml0X25vZGVzKTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorDAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBJZiBpdCBpcyBwb3NzaWJsZSB0byBkbyBzZWFyY2hpbmcgaW4gc2luZ2xlIGJ5dGUgZW5jb2RpbmcgaW5zdGVhZCBvZiBVVEYtOAorICAgdG8gc3BlZWQgdGhpbmdzIHVwLCBzZXQgZGZhLT5tYl9jdXJfbWF4IHRvIDEsIGNsZWFyIGlzX3V0ZjggYW5kIGNoYW5nZQorICAgREZBIG5vZGVzIHdoZXJlIG5lZWRlZC4gICovCisKK3N0YXRpYyB2b2lkCitvcHRpbWl6ZV91dGY4IChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgbm9kZSwgaSwgbWJfY2hhcnMgPSAwLCBoYXNfcGVyaW9kID0gMDsKKworICBmb3IgKG5vZGUgPSAwOyBub2RlIDwgZGZhLT5ub2Rlc19sZW47ICsrbm9kZSkKKyAgICBzd2l0Y2ggKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgQ0hBUkFDVEVSOgorCWlmIChkZmEtPm5vZGVzW25vZGVdLm9wci5jID49IDB4ODApCisJICBtYl9jaGFycyA9IDE7CisJYnJlYWs7CisgICAgICBjYXNlIEFOQ0hPUjoKKwlzd2l0Y2ggKGRmYS0+bm9kZXNbbm9kZV0ub3ByLmN0eF90eXBlKQorCSAgeworCSAgY2FzZSBMSU5FX0ZJUlNUOgorCSAgY2FzZSBMSU5FX0xBU1Q6CisJICBjYXNlIEJVRl9GSVJTVDoKKwkgIGNhc2UgQlVGX0xBU1Q6CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgLyogV29yZCBhbmNob3JzIGV0Yy4gY2Fubm90IGJlIGhhbmRsZWQuICBJdCdzIG9rYXkgdG8gdGVzdAorCSAgICAgICBvcHIuY3R4X3R5cGUgc2luY2UgY29uc3RyYWludHMgKGZvciBhbGwgREZBIG5vZGVzKSBhcmUKKwkgICAgICAgY3JlYXRlZCBieSBPUmluZyBvbmUgb3IgbW9yZSBvcHIuY3R4X3R5cGUgdmFsdWVzLiAgKi8KKwkgICAgcmV0dXJuOworCSAgfQorCWJyZWFrOworICAgICAgY2FzZSBPUF9QRVJJT0Q6CisJaGFzX3BlcmlvZCA9IDE7CisJYnJlYWs7CisgICAgICBjYXNlIE9QX0JBQ0tfUkVGOgorICAgICAgY2FzZSBPUF9BTFQ6CisgICAgICBjYXNlIEVORF9PRl9SRToKKyAgICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgorICAgICAgY2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorCWJyZWFrOworICAgICAgY2FzZSBDT01QTEVYX0JSQUNLRVQ6CisJcmV0dXJuOworICAgICAgY2FzZSBTSU1QTEVfQlJBQ0tFVDoKKwkvKiBKdXN0IGRvdWJsZSBjaGVjay4gIFRoZSBub24tQVNDSUkgcmFuZ2Ugc3RhcnRzIGF0IDB4ODAuICAqLworCWFzc2VydCAoMHg4MCAlIEJJVFNFVF9XT1JEX0JJVFMgPT0gMCk7CisJZm9yIChpID0gMHg4MCAvIEJJVFNFVF9XT1JEX0JJVFM7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwkgIGlmIChkZmEtPm5vZGVzW25vZGVdLm9wci5zYmNzZXRbaV0pCisJICAgIHJldHVybjsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJYWJvcnQgKCk7CisgICAgICB9CisKKyAgaWYgKG1iX2NoYXJzIHx8IGhhc19wZXJpb2QpCisgICAgZm9yIChub2RlID0gMDsgbm9kZSA8IGRmYS0+bm9kZXNfbGVuOyArK25vZGUpCisgICAgICB7CisJaWYgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9PSBDSEFSQUNURVIKKwkgICAgJiYgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyA+PSAweDgwKQorCSAgZGZhLT5ub2Rlc1tub2RlXS5tYl9wYXJ0aWFsID0gMDsKKwllbHNlIGlmIChkZmEtPm5vZGVzW25vZGVdLnR5cGUgPT0gT1BfUEVSSU9EKQorCSAgZGZhLT5ub2Rlc1tub2RlXS50eXBlID0gT1BfVVRGOF9QRVJJT0Q7CisgICAgICB9CisKKyAgLyogVGhlIHNlYXJjaCBjYW4gYmUgaW4gc2luZ2xlIGJ5dGUgbG9jYWxlLiAgKi8KKyAgZGZhLT5tYl9jdXJfbWF4ID0gMTsKKyAgZGZhLT5pc191dGY4ID0gMDsKKyAgZGZhLT5oYXNfbWJfbm9kZSA9IGRmYS0+bmJhY2tyZWYgPiAwIHx8IGhhc19wZXJpb2Q7Cit9CisjZW5kaWYKKwwKKy8qIEFuYWx5emUgdGhlIHN0cnVjdHVyZSB0cmVlLCBhbmQgY2FsY3VsYXRlICJmaXJzdCIsICJuZXh0IiwgImVkZXN0IiwKKyAgICJlY2xvc3VyZSIsIGFuZCAiaW52ZWNsb3N1cmUiLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2FuYWx5emUgKHJlZ2V4X3QgKnByZWcpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICByZWdfZXJyY29kZV90IHJldDsKKworICAvKiBBbGxvY2F0ZSBhcnJheXMuICAqLworICBkZmEtPm5leHRzID0gcmVfbWFsbG9jIChpbnQsIGRmYS0+bm9kZXNfYWxsb2MpOworICBkZmEtPm9yZ19pbmRpY2VzID0gcmVfbWFsbG9jIChpbnQsIGRmYS0+bm9kZXNfYWxsb2MpOworICBkZmEtPmVkZXN0cyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIGRmYS0+bm9kZXNfYWxsb2MpOworICBkZmEtPmVjbG9zdXJlcyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIGRmYS0+bm9kZXNfYWxsb2MpOworICBpZiAoQkUgKGRmYS0+bmV4dHMgPT0gTlVMTCB8fCBkZmEtPm9yZ19pbmRpY2VzID09IE5VTEwgfHwgZGZhLT5lZGVzdHMgPT0gTlVMTAorCSAgfHwgZGZhLT5lY2xvc3VyZXMgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgZGZhLT5zdWJleHBfbWFwID0gcmVfbWFsbG9jIChpbnQsIHByZWctPnJlX25zdWIpOworICBpZiAoZGZhLT5zdWJleHBfbWFwICE9IE5VTEwpCisgICAgeworICAgICAgaW50IGk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZy0+cmVfbnN1YjsgaSsrKQorCWRmYS0+c3ViZXhwX21hcFtpXSA9IGk7CisgICAgICBwcmVvcmRlciAoZGZhLT5zdHJfdHJlZSwgb3B0aW1pemVfc3ViZXhwcywgZGZhKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVnLT5yZV9uc3ViOyBpKyspCisJaWYgKGRmYS0+c3ViZXhwX21hcFtpXSAhPSBpKQorCSAgYnJlYWs7CisgICAgICBpZiAoaSA9PSBwcmVnLT5yZV9uc3ViKQorCXsKKwkgIGZyZWUgKGRmYS0+c3ViZXhwX21hcCk7CisJICBkZmEtPnN1YmV4cF9tYXAgPSBOVUxMOworCX0KKyAgICB9CisKKyAgcmV0ID0gcG9zdG9yZGVyIChkZmEtPnN0cl90cmVlLCBsb3dlcl9zdWJleHBzLCBwcmVnKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHJldCA9IHBvc3RvcmRlciAoZGZhLT5zdHJfdHJlZSwgY2FsY19maXJzdCwgZGZhKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHByZW9yZGVyIChkZmEtPnN0cl90cmVlLCBjYWxjX25leHQsIGRmYSk7CisgIHJldCA9IHByZW9yZGVyIChkZmEtPnN0cl90cmVlLCBsaW5rX25mYV9ub2RlcywgZGZhKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHJldCA9IGNhbGNfZWNsb3N1cmUgKGRmYSk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIC8qIFdlIG9ubHkgbmVlZCB0aGlzIGR1cmluZyB0aGUgcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyBwYXNzIGluIHJlZ2V4ZWMuYzsKKyAgICAgc2tpcCBpdCBpZiBwX2lfbiB3aWxsIG5vdCBydW4sIGFzIGNhbGNfaW52ZWNsb3N1cmUgY2FuIGJlIHF1YWRyYXRpYy4gICovCisgIGlmICgoIXByZWctPm5vX3N1YiAmJiBwcmVnLT5yZV9uc3ViID4gMCAmJiBkZmEtPmhhc19wbHVyYWxfbWF0Y2gpCisgICAgICB8fCBkZmEtPm5iYWNrcmVmKQorICAgIHsKKyAgICAgIGRmYS0+aW52ZWNsb3N1cmVzID0gcmVfbWFsbG9jIChyZV9ub2RlX3NldCwgZGZhLT5ub2Rlc19sZW4pOworICAgICAgaWYgKEJFIChkZmEtPmludmVjbG9zdXJlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHJldCA9IGNhbGNfaW52ZWNsb3N1cmUgKGRmYSk7CisgICAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qIE91ciBwYXJzZSB0cmVlcyBhcmUgdmVyeSB1bmJhbGFuY2VkLCBzbyB3ZSBjYW5ub3QgdXNlIGEgc3RhY2sgdG8KKyAgIGltcGxlbWVudCBwYXJzZSB0cmVlIHZpc2l0cy4gIEluc3RlYWQsIHdlIHVzZSBwYXJlbnQgcG9pbnRlcnMgYW5kCisgICBzb21lIGhhaXJ5IGNvZGUgaW4gdGhlc2UgdHdvIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcG9zdG9yZGVyIChiaW5fdHJlZV90ICpyb290LCByZWdfZXJyY29kZV90IChmbiAodm9pZCAqLCBiaW5fdHJlZV90ICopKSwKKwkgICB2b2lkICpleHRyYSkKK3sKKyAgYmluX3RyZWVfdCAqbm9kZSwgKnByZXY7CisKKyAgZm9yIChub2RlID0gcm9vdDsgOyApCisgICAgeworICAgICAgLyogRGVzY2VuZCBkb3duIHRoZSB0cmVlLCBwcmVmZXJhYmx5IHRvIHRoZSBsZWZ0IChvciB0byB0aGUgcmlnaHQKKwkgaWYgdGhhdCdzIHRoZSBvbmx5IGNoaWxkKS4gICovCisgICAgICB3aGlsZSAobm9kZS0+bGVmdCB8fCBub2RlLT5yaWdodCkKKwlpZiAobm9kZS0+bGVmdCkKKwkgIG5vZGUgPSBub2RlLT5sZWZ0OworCWVsc2UKKwkgIG5vZGUgPSBub2RlLT5yaWdodDsKKworICAgICAgZG8KKwl7CisJICByZWdfZXJyY29kZV90IGVyciA9IGZuIChleHRyYSwgbm9kZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJICBpZiAobm9kZS0+cGFyZW50ID09IE5VTEwpCisJICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgIHByZXYgPSBub2RlOworCSAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwl9CisgICAgICAvKiBHbyB1cCB3aGlsZSB3ZSBoYXZlIGEgbm9kZSB0aGF0IGlzIHJlYWNoZWQgZnJvbSB0aGUgcmlnaHQuICAqLworICAgICAgd2hpbGUgKG5vZGUtPnJpZ2h0ID09IHByZXYgfHwgbm9kZS0+cmlnaHQgPT0gTlVMTCk7CisgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcHJlb3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsIHJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCSAgdm9pZCAqZXh0cmEpCit7CisgIGJpbl90cmVlX3QgKm5vZGU7CisKKyAgZm9yIChub2RlID0gcm9vdDsgOyApCisgICAgeworICAgICAgcmVnX2VycmNvZGVfdCBlcnIgPSBmbiAoZXh0cmEsIG5vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisKKyAgICAgIC8qIEdvIHRvIHRoZSBsZWZ0IG5vZGUsIG9yIHVwIGFuZCB0byB0aGUgcmlnaHQuICAqLworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJbm9kZSA9IG5vZGUtPmxlZnQ7CisgICAgICBlbHNlCisJeworCSAgYmluX3RyZWVfdCAqcHJldiA9IE5VTEw7CisJICB3aGlsZSAobm9kZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5yaWdodCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgcHJldiA9IG5vZGU7CisJICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwkgICAgICBpZiAoIW5vZGUpCisJCXJldHVybiBSRUdfTk9FUlJPUjsKKwkgICAgfQorCSAgbm9kZSA9IG5vZGUtPnJpZ2h0OworCX0KKyAgICB9Cit9CisKKy8qIE9wdGltaXphdGlvbiBwYXNzOiBpZiBhIFNVQkVYUCBpcyBlbnRpcmVseSBjb250YWluZWQsIHN0cmlwIGl0IGFuZCB0ZWxsCisgICByZV9zZWFyY2hfaW50ZXJuYWwgdG8gbWFwIHRoZSBpbm5lciBvbmUncyBvcHIuaWR4IHRvIHRoaXMgb25lJ3MuICBBZGp1c3QKKyAgIGJhY2tyZWZlcmVuY2VzIGFzIHdlbGwuICBSZXF1aXJlcyBhIHByZW9yZGVyIHZpc2l0LiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90CitvcHRpbWl6ZV9zdWJleHBzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBleHRyYTsKKworICBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBPUF9CQUNLX1JFRiAmJiBkZmEtPnN1YmV4cF9tYXApCisgICAgeworICAgICAgaW50IGlkeCA9IG5vZGUtPnRva2VuLm9wci5pZHg7CisgICAgICBub2RlLT50b2tlbi5vcHIuaWR4ID0gZGZhLT5zdWJleHBfbWFwW2lkeF07CisgICAgICBkZmEtPnVzZWRfYmtyZWZfbWFwIHw9IDEgPDwgbm9kZS0+dG9rZW4ub3ByLmlkeDsKKyAgICB9CisKKyAgZWxzZSBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBTVUJFWFAKKwkgICAmJiBub2RlLT5sZWZ0ICYmIG5vZGUtPmxlZnQtPnRva2VuLnR5cGUgPT0gU1VCRVhQKQorICAgIHsKKyAgICAgIGludCBvdGhlcl9pZHggPSBub2RlLT5sZWZ0LT50b2tlbi5vcHIuaWR4OworCisgICAgICBub2RlLT5sZWZ0ID0gbm9kZS0+bGVmdC0+bGVmdDsKKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCW5vZGUtPmxlZnQtPnBhcmVudCA9IG5vZGU7CisKKyAgICAgIGRmYS0+c3ViZXhwX21hcFtvdGhlcl9pZHhdID0gZGZhLT5zdWJleHBfbWFwW25vZGUtPnRva2VuLm9wci5pZHhdOworICAgICAgaWYgKG90aGVyX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMpCisJICBkZmEtPnVzZWRfYmtyZWZfbWFwICY9IH4oKGJpdHNldF93b3JkX3QpIDEgPDwgb3RoZXJfaWR4KTsKKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBMb3dlcmluZyBwYXNzOiBUdXJuIGVhY2ggU1VCRVhQIG5vZGUgaW50byB0aGUgYXBwcm9wcmlhdGUgY29uY2F0ZW5hdGlvbgorICAgb2YgT1BfT1BFTl9TVUJFWFAsIHRoZSBib2R5IG9mIHRoZSBTVUJFWFAgKGlmIGFueSkgYW5kIE9QX0NMT1NFX1NVQkVYUC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbG93ZXJfc3ViZXhwcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIHJlZ2V4X3QgKnByZWcgPSAocmVnZXhfdCAqKSBleHRyYTsKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKworICBpZiAobm9kZS0+bGVmdCAmJiBub2RlLT5sZWZ0LT50b2tlbi50eXBlID09IFNVQkVYUCkKKyAgICB7CisgICAgICBub2RlLT5sZWZ0ID0gbG93ZXJfc3ViZXhwICgmZXJyLCBwcmVnLCBub2RlLT5sZWZ0KTsKKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCW5vZGUtPmxlZnQtPnBhcmVudCA9IG5vZGU7CisgICAgfQorICBpZiAobm9kZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnRva2VuLnR5cGUgPT0gU1VCRVhQKQorICAgIHsKKyAgICAgIG5vZGUtPnJpZ2h0ID0gbG93ZXJfc3ViZXhwICgmZXJyLCBwcmVnLCBub2RlLT5yaWdodCk7CisgICAgICBpZiAobm9kZS0+cmlnaHQpCisJbm9kZS0+cmlnaHQtPnBhcmVudCA9IG5vZGU7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2xvd2VyX3N1YmV4cCAocmVnX2VycmNvZGVfdCAqZXJyLCByZWdleF90ICpwcmVnLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVfdCAqYm9keSA9IG5vZGUtPmxlZnQ7CisgIGJpbl90cmVlX3QgKm9wLCAqY2xzLCAqdHJlZTEsICp0cmVlOworCisgIGlmIChwcmVnLT5ub19zdWIKKyAgICAgIC8qIFdlIGRvIG5vdCBvcHRpbWl6ZSBlbXB0eSBzdWJleHByZXNzaW9ucywgYmVjYXVzZSBvdGhlcndpc2Ugd2UgbWF5CisJIGhhdmUgYmFkIENPTkNBVCBub2RlcyB3aXRoIE5VTEwgY2hpbGRyZW4uICBUaGlzIGlzIG9idmlvdXNseSBub3QKKwkgdmVyeSBjb21tb24sIHNvIHdlIGRvIG5vdCBsb3NlIG11Y2guICBBbiBleGFtcGxlIHRoYXQgdHJpZ2dlcnMKKwkgdGhpcyBjYXNlIGlzIHRoZSBzZWQgInNjcmlwdCIgL1woXCkveC4gICovCisgICAgICAmJiBub2RlLT5sZWZ0ICE9IE5VTEwKKyAgICAgICYmIChub2RlLT50b2tlbi5vcHIuaWR4ID49IEJJVFNFVF9XT1JEX0JJVFMKKwkgIHx8ICEoZGZhLT51c2VkX2JrcmVmX21hcAorCSAgICAgICAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBub2RlLT50b2tlbi5vcHIuaWR4KSkpKQorICAgIHJldHVybiBub2RlLT5sZWZ0OworCisgIC8qIENvbnZlcnQgdGhlIFNVQkVYUCBub2RlIHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFuCisgICAgIE9QX09QRU5fU1VCRVhQLCB0aGUgY29udGVudHMsIGFuZCBhbiBPUF9DTE9TRV9TVUJFWFAuICAqLworICBvcCA9IGNyZWF0ZV90cmVlIChkZmEsIE5VTEwsIE5VTEwsIE9QX09QRU5fU1VCRVhQKTsKKyAgY2xzID0gY3JlYXRlX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgT1BfQ0xPU0VfU1VCRVhQKTsKKyAgdHJlZTEgPSBib2R5ID8gY3JlYXRlX3RyZWUgKGRmYSwgYm9keSwgY2xzLCBDT05DQVQpIDogY2xzOworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgb3AsIHRyZWUxLCBDT05DQVQpOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCB8fCB0cmVlMSA9PSBOVUxMIHx8IG9wID09IE5VTEwgfHwgY2xzID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIG9wLT50b2tlbi5vcHIuaWR4ID0gY2xzLT50b2tlbi5vcHIuaWR4ID0gbm9kZS0+dG9rZW4ub3ByLmlkeDsKKyAgb3AtPnRva2VuLm9wdF9zdWJleHAgPSBjbHMtPnRva2VuLm9wdF9zdWJleHAgPSBub2RlLT50b2tlbi5vcHRfc3ViZXhwOworICByZXR1cm4gdHJlZTsKK30KKworLyogUGFzcyAxIGluIGJ1aWxkaW5nIHRoZSBORkE6IGNvbXB1dGUgRklSU1QgYW5kIGNyZWF0ZSB1bmxpbmtlZCBhdXRvbWF0b24KKyAgIG5vZGVzLiAgUmVxdWlyZXMgYSBwb3N0b3JkZXIgdmlzaXQuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfZmlyc3QgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGV4dHJhOworICBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBDT05DQVQpCisgICAgeworICAgICAgbm9kZS0+Zmlyc3QgPSBub2RlLT5sZWZ0LT5maXJzdDsKKyAgICAgIG5vZGUtPm5vZGVfaWR4ID0gbm9kZS0+bGVmdC0+bm9kZV9pZHg7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbm9kZS0+Zmlyc3QgPSBub2RlOworICAgICAgbm9kZS0+bm9kZV9pZHggPSByZV9kZmFfYWRkX25vZGUgKGRmYSwgbm9kZS0+dG9rZW4pOworICAgICAgaWYgKEJFIChub2RlLT5ub2RlX2lkeCA9PSAtMSwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBBTkNIT1IpCisJZGZhLT5ub2Rlc1tub2RlLT5ub2RlX2lkeF0uY29uc3RyYWludCA9IG5vZGUtPnRva2VuLm9wci5jdHhfdHlwZTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogUGFzcyAyOiBjb21wdXRlIE5FWFQgb24gdGhlIHRyZWUuICBQcmVvcmRlciB2aXNpdC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19uZXh0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgc3dpdGNoIChub2RlLT50b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIE9QX0RVUF9BU1RFUklTSzoKKyAgICAgIG5vZGUtPmxlZnQtPm5leHQgPSBub2RlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDT05DQVQ6CisgICAgICBub2RlLT5sZWZ0LT5uZXh0ID0gbm9kZS0+cmlnaHQtPmZpcnN0OworICAgICAgbm9kZS0+cmlnaHQtPm5leHQgPSBub2RlLT5uZXh0OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCW5vZGUtPmxlZnQtPm5leHQgPSBub2RlLT5uZXh0OworICAgICAgaWYgKG5vZGUtPnJpZ2h0KQorCW5vZGUtPnJpZ2h0LT5uZXh0ID0gbm9kZS0+bmV4dDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBQYXNzIDM6IGxpbmsgYWxsIERGQSBub2RlcyB0byB0aGVpciBORVhUIG5vZGUgKGFueSBvcmRlciB3aWxsIGRvKS4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbGlua19uZmFfbm9kZXMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGV4dHJhOworICBpbnQgaWR4ID0gbm9kZS0+bm9kZV9pZHg7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisKKyAgc3dpdGNoIChub2RlLT50b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIENPTkNBVDoKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBFTkRfT0ZfUkU6CisgICAgICBhc3NlcnQgKG5vZGUtPm5leHQgPT0gTlVMTCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgorICAgIGNhc2UgT1BfQUxUOgorICAgICAgeworCWludCBsZWZ0LCByaWdodDsKKwlkZmEtPmhhc19wbHVyYWxfbWF0Y2ggPSAxOworCWlmIChub2RlLT5sZWZ0ICE9IE5VTEwpCisJICBsZWZ0ID0gbm9kZS0+bGVmdC0+Zmlyc3QtPm5vZGVfaWR4OworCWVsc2UKKwkgIGxlZnQgPSBub2RlLT5uZXh0LT5ub2RlX2lkeDsKKwlpZiAobm9kZS0+cmlnaHQgIT0gTlVMTCkKKwkgIHJpZ2h0ID0gbm9kZS0+cmlnaHQtPmZpcnN0LT5ub2RlX2lkeDsKKwllbHNlCisJICByaWdodCA9IG5vZGUtPm5leHQtPm5vZGVfaWR4OworCWFzc2VydCAobGVmdCA+IC0xKTsKKwlhc3NlcnQgKHJpZ2h0ID4gLTEpOworCWVyciA9IHJlX25vZGVfc2V0X2luaXRfMiAoZGZhLT5lZGVzdHMgKyBpZHgsIGxlZnQsIHJpZ2h0KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBBTkNIT1I6CisgICAgY2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICBjYXNlIE9QX0NMT1NFX1NVQkVYUDoKKyAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoZGZhLT5lZGVzdHMgKyBpZHgsIG5vZGUtPm5leHQtPm5vZGVfaWR4KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CQUNLX1JFRjoKKyAgICAgIGRmYS0+bmV4dHNbaWR4XSA9IG5vZGUtPm5leHQtPm5vZGVfaWR4OworICAgICAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gT1BfQkFDS19SRUYpCisJZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xIChkZmEtPmVkZXN0cyArIGlkeCwgZGZhLT5uZXh0c1tpZHhdKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAobm9kZS0+dG9rZW4udHlwZSkpOworICAgICAgZGZhLT5uZXh0c1tpZHhdID0gbm9kZS0+bmV4dC0+bm9kZV9pZHg7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworLyogRHVwbGljYXRlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgdGhlIG5vZGUgUk9PVF9OT0RFLgorICAgTm90ZSB0aGF0IGR1cGxpY2F0ZWQgbm9kZXMgaGF2ZSBjb25zdHJhaW50IElOSVRfQ09OU1RSQUlOVCBpbiBhZGRpdGlvbgorICAgdG8gdGhlaXIgb3duIGNvbnN0cmFpbnQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2R1cGxpY2F0ZV9ub2RlX2Nsb3N1cmUgKHJlX2RmYV90ICpkZmEsIGludCB0b3Bfb3JnX25vZGUsIGludCB0b3BfY2xvbmVfbm9kZSwKKwkJCWludCByb290X25vZGUsIHVuc2lnbmVkIGludCBpbml0X2NvbnN0cmFpbnQpCit7CisgIGludCBvcmdfbm9kZSwgY2xvbmVfbm9kZSwgcmV0OworICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA9IGluaXRfY29uc3RyYWludDsKKyAgZm9yIChvcmdfbm9kZSA9IHRvcF9vcmdfbm9kZSwgY2xvbmVfbm9kZSA9IHRvcF9jbG9uZV9ub2RlOzspCisgICAgeworICAgICAgaW50IG9yZ19kZXN0LCBjbG9uZV9kZXN0OworICAgICAgaWYgKGRmYS0+bm9kZXNbb3JnX25vZGVdLnR5cGUgPT0gT1BfQkFDS19SRUYpCisJeworCSAgLyogSWYgdGhlIGJhY2sgcmVmZXJlbmNlIGVwc2lsb24tdHJhbnNpdCwgaXRzIGRlc3RpbmF0aW9uIG11c3QKKwkgICAgIGFsc28gaGF2ZSB0aGUgY29uc3RyYWludC4gIFRoZW4gZHVwbGljYXRlIHRoZSBlcHNpbG9uIGNsb3N1cmUKKwkgICAgIG9mIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2UsIGFuZCBzdG9yZSBpdCBpbgorCSAgICAgZWRlc3RzIG9mIHRoZSBiYWNrIHJlZmVyZW5jZS4gICovCisJICBvcmdfZGVzdCA9IGRmYS0+bmV4dHNbb3JnX25vZGVdOworCSAgcmVfbm9kZV9zZXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSk7CisJICBjbG9uZV9kZXN0ID0gZHVwbGljYXRlX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgaWYgKEJFIChjbG9uZV9kZXN0ID09IC0xLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBkZmEtPm5leHRzW2Nsb25lX25vZGVdID0gZGZhLT5uZXh0c1tvcmdfbm9kZV07CisJICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICBpZiAoQkUgKHJldCA8IDAsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBlbHNlIGlmIChkZmEtPmVkZXN0c1tvcmdfbm9kZV0ubmVsZW0gPT0gMCkKKwl7CisJICAvKiBJbiBjYXNlIG9mIHRoZSBub2RlIGNhbid0IGVwc2lsb24tdHJhbnNpdCwgZG9uJ3QgZHVwbGljYXRlIHRoZQorCSAgICAgZGVzdGluYXRpb24gYW5kIHN0b3JlIHRoZSBvcmlnaW5hbCBkZXN0aW5hdGlvbiBhcyB0aGUKKwkgICAgIGRlc3RpbmF0aW9uIG9mIHRoZSBub2RlLiAgKi8KKwkgIGRmYS0+bmV4dHNbY2xvbmVfbm9kZV0gPSBkZmEtPm5leHRzW29yZ19ub2RlXTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGVsc2UgaWYgKGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5uZWxlbSA9PSAxKQorCXsKKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuIGVwc2lsb24tdHJhbnNpdCwgYW5kIGl0IGhhcyBvbmx5IG9uZQorCSAgICAgZGVzdGluYXRpb24uICAqLworCSAgb3JnX2Rlc3QgPSBkZmEtPmVkZXN0c1tvcmdfbm9kZV0uZWxlbXNbMF07CisJICByZV9ub2RlX3NldF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlKTsKKwkgIC8qIElmIHRoZSBub2RlIGlzIHJvb3Rfbm9kZSBpdHNlbGYsIGl0IG1lYW5zIHRoZSBlcHNpbG9uIGNsc291cmUKKwkgICAgIGhhcyBhIGxvb3AuICAgVGhlbiB0aWUgaXQgdG8gdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByb290X25vZGUuICAqLworCSAgaWYgKG9yZ19ub2RlID09IHJvb3Rfbm9kZSAmJiBjbG9uZV9ub2RlICE9IG9yZ19ub2RlKQorCSAgICB7CisJICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIG9yZ19kZXN0KTsKKwkgICAgICBpZiAoQkUgKHJldCA8IDAsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgLyogSW4gY2FzZSBvZiB0aGUgbm9kZSBoYXMgYW5vdGhlciBjb25zdHJhaW50LCBhZGQgaXQuICAqLworCSAgY29uc3RyYWludCB8PSBkZmEtPm5vZGVzW29yZ19ub2RlXS5jb25zdHJhaW50OworCSAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgIGlmIChCRSAoY2xvbmVfZGVzdCA9PSAtMSwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgZWxzZSAvKiBkZmEtPmVkZXN0c1tvcmdfbm9kZV0ubmVsZW0gPT0gMiAqLworCXsKKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuIGVwc2lsb24tdHJhbnNpdCwgYW5kIGl0IGhhcyB0d28KKwkgICAgIGRlc3RpbmF0aW9ucy4gSW4gdGhlIGJpbl90cmVlX3QgYW5kIERGQSwgdGhhdCdzICd8JyBhbmQgJyonLiAgICovCisJICBvcmdfZGVzdCA9IGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5lbGVtc1swXTsKKwkgIHJlX25vZGVfc2V0X2VtcHR5IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUpOworCSAgLyogU2VhcmNoIGZvciBhIGR1cGxpY2F0ZWQgbm9kZSB3aGljaCBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnQuICAqLworCSAgY2xvbmVfZGVzdCA9IHNlYXJjaF9kdXBsaWNhdGVkX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgaWYgKGNsb25lX2Rlc3QgPT0gLTEpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBpcyBubyBzdWNoIGR1cGxpY2F0ZWQgbm9kZSwgY3JlYXRlIGEgbmV3IG9uZS4gICovCisJICAgICAgcmVnX2VycmNvZGVfdCBlcnI7CisJICAgICAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgICAgICBpZiAoQkUgKGNsb25lX2Rlc3QgPT0gLTEsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICAgICAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgICAgZXJyID0gZHVwbGljYXRlX25vZGVfY2xvc3VyZSAoZGZhLCBvcmdfZGVzdCwgY2xvbmVfZGVzdCwKKwkJCQkJICAgIHJvb3Rfbm9kZSwgY29uc3RyYWludCk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gZXJyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBpcyBhIGR1cGxpY2F0ZWQgbm9kZSB3aGljaCBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnQsCisJCSB1c2UgaXQgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4gICovCisJICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgICAgIGlmIChCRSAocmV0IDwgMCwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisKKwkgIG9yZ19kZXN0ID0gZGZhLT5lZGVzdHNbb3JnX25vZGVdLmVsZW1zWzFdOworCSAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgIGlmIChCRSAoY2xvbmVfZGVzdCA9PSAtMSwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgb3JnX25vZGUgPSBvcmdfZGVzdDsKKyAgICAgIGNsb25lX25vZGUgPSBjbG9uZV9kZXN0OworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBTZWFyY2ggZm9yIGEgbm9kZSB3aGljaCBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIG5vZGUgT1JHX05PREUsIGFuZAorICAgc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50IENPTlNUUkFJTlQuICAqLworCitzdGF0aWMgaW50CitzZWFyY2hfZHVwbGljYXRlZF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgb3JnX25vZGUsCisJCQl1bnNpZ25lZCBpbnQgY29uc3RyYWludCkKK3sKKyAgaW50IGlkeDsKKyAgZm9yIChpZHggPSBkZmEtPm5vZGVzX2xlbiAtIDE7IGRmYS0+bm9kZXNbaWR4XS5kdXBsaWNhdGVkICYmIGlkeCA+IDA7IC0taWR4KQorICAgIHsKKyAgICAgIGlmIChvcmdfbm9kZSA9PSBkZmEtPm9yZ19pbmRpY2VzW2lkeF0KKwkgICYmIGNvbnN0cmFpbnQgPT0gZGZhLT5ub2Rlc1tpZHhdLmNvbnN0cmFpbnQpCisJcmV0dXJuIGlkeDsgLyogRm91bmQuICAqLworICAgIH0KKyAgcmV0dXJuIC0xOyAvKiBOb3QgZm91bmQuICAqLworfQorCisvKiBEdXBsaWNhdGUgdGhlIG5vZGUgd2hvc2UgaW5kZXggaXMgT1JHX0lEWCBhbmQgc2V0IHRoZSBjb25zdHJhaW50IENPTlNUUkFJTlQuCisgICBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXcgbm9kZSwgb3IgLTEgaWYgaW5zdWZmaWNpZW50IHN0b3JhZ2UgaXMKKyAgIGF2YWlsYWJsZS4gICovCisKK3N0YXRpYyBpbnQKK2R1cGxpY2F0ZV9ub2RlIChyZV9kZmFfdCAqZGZhLCBpbnQgb3JnX2lkeCwgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpCit7CisgIGludCBkdXBfaWR4ID0gcmVfZGZhX2FkZF9ub2RlIChkZmEsIGRmYS0+bm9kZXNbb3JnX2lkeF0pOworICBpZiAoQkUgKGR1cF9pZHggIT0gLTEsIDEpKQorICAgIHsKKyAgICAgIGRmYS0+bm9kZXNbZHVwX2lkeF0uY29uc3RyYWludCA9IGNvbnN0cmFpbnQ7CisgICAgICBkZmEtPm5vZGVzW2R1cF9pZHhdLmNvbnN0cmFpbnQgfD0gZGZhLT5ub2Rlc1tvcmdfaWR4XS5jb25zdHJhaW50OworICAgICAgZGZhLT5ub2Rlc1tkdXBfaWR4XS5kdXBsaWNhdGVkID0gMTsKKworICAgICAgLyogU3RvcmUgdGhlIGluZGV4IG9mIHRoZSBvcmlnaW5hbCBub2RlLiAgKi8KKyAgICAgIGRmYS0+b3JnX2luZGljZXNbZHVwX2lkeF0gPSBvcmdfaWR4OworICAgIH0KKyAgcmV0dXJuIGR1cF9pZHg7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitjYWxjX2ludmVjbG9zdXJlIChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgc3JjLCBpZHgsIHJldDsKKyAgZm9yIChpZHggPSAwOyBpZHggPCBkZmEtPm5vZGVzX2xlbjsgKytpZHgpCisgICAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGZhLT5pbnZlY2xvc3VyZXMgKyBpZHgpOworCisgIGZvciAoc3JjID0gMDsgc3JjIDwgZGZhLT5ub2Rlc19sZW47ICsrc3JjKQorICAgIHsKKyAgICAgIGludCAqZWxlbXMgPSBkZmEtPmVjbG9zdXJlc1tzcmNdLmVsZW1zOworICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBkZmEtPmVjbG9zdXJlc1tzcmNdLm5lbGVtOyArK2lkeCkKKwl7CisJICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnRfbGFzdCAoZGZhLT5pbnZlY2xvc3VyZXMgKyBlbGVtc1tpZHhdLCBzcmMpOworCSAgaWYgKEJFIChyZXQgPT0gLTEsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlICJlY2xvc3VyZSIgZm9yIGFsbCB0aGUgbm9kZSBpbiBERkEuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19lY2xvc3VyZSAocmVfZGZhX3QgKmRmYSkKK3sKKyAgaW50IG5vZGVfaWR4LCBpbmNvbXBsZXRlOworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoZGZhLT5ub2Rlc19sZW4gPiAwKTsKKyNlbmRpZgorICBpbmNvbXBsZXRlID0gMDsKKyAgLyogRm9yIGVhY2ggbm9kZXMsIGNhbGN1bGF0ZSBlcHNpbG9uIGNsb3N1cmUuICAqLworICBmb3IgKG5vZGVfaWR4ID0gMDsgOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgICAgcmVfbm9kZV9zZXQgZWNsb3N1cmVfZWxlbTsKKyAgICAgIGlmIChub2RlX2lkeCA9PSBkZmEtPm5vZGVzX2xlbikKKwl7CisJICBpZiAoIWluY29tcGxldGUpCisJICAgIGJyZWFrOworCSAgaW5jb21wbGV0ZSA9IDA7CisJICBub2RlX2lkeCA9IDA7CisJfQorCisjaWZkZWYgREVCVUcKKyAgICAgIGFzc2VydCAoZGZhLT5lY2xvc3VyZXNbbm9kZV9pZHhdLm5lbGVtICE9IC0xKTsKKyNlbmRpZgorCisgICAgICAvKiBJZiB3ZSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCwgc2tpcCBpdC4gICovCisgICAgICBpZiAoZGZhLT5lY2xvc3VyZXNbbm9kZV9pZHhdLm5lbGVtICE9IDApCisJY29udGludWU7CisgICAgICAvKiBDYWxjdWxhdGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBub2RlX2lkeCcuICAqLworICAgICAgZXJyID0gY2FsY19lY2xvc3VyZV9pdGVyICgmZWNsb3N1cmVfZWxlbSwgZGZhLCBub2RlX2lkeCwgMSk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKworICAgICAgaWYgKGRmYS0+ZWNsb3N1cmVzW25vZGVfaWR4XS5uZWxlbSA9PSAwKQorCXsKKwkgIGluY29tcGxldGUgPSAxOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmVjbG9zdXJlX2VsZW0pOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIGVwc2lsb24gY2xvc3VyZSBvZiBOT0RFLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfZWNsb3N1cmVfaXRlciAocmVfbm9kZV9zZXQgKm5ld19zZXQsIHJlX2RmYV90ICpkZmEsIGludCBub2RlLCBpbnQgcm9vdCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBpOworICByZV9ub2RlX3NldCBlY2xvc3VyZTsKKyAgaW50IHJldDsKKyAgaW50IGluY29tcGxldGUgPSAwOworICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJmVjbG9zdXJlLCBkZmEtPmVkZXN0c1tub2RlXS5uZWxlbSArIDEpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKworICAvKiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIGFyZSBjYWxjdWxhdGluZyB0aGlzIG5vZGUgbm93LgorICAgICBXZSByZWZlcmVuY2UgdGhpcyB2YWx1ZSB0byBhdm9pZCBpbmZpbml0ZSBsb29wLiAgKi8KKyAgZGZhLT5lY2xvc3VyZXNbbm9kZV0ubmVsZW0gPSAtMTsKKworICAvKiBJZiB0aGUgY3VycmVudCBub2RlIGhhcyBjb25zdHJhaW50cywgZHVwbGljYXRlIGFsbCBub2RlcworICAgICBzaW5jZSB0aGV5IG11c3QgaW5oZXJpdCB0aGUgY29uc3RyYWludHMuICAqLworICBpZiAoZGZhLT5ub2Rlc1tub2RlXS5jb25zdHJhaW50CisgICAgICAmJiBkZmEtPmVkZXN0c1tub2RlXS5uZWxlbQorICAgICAgJiYgIWRmYS0+bm9kZXNbZGZhLT5lZGVzdHNbbm9kZV0uZWxlbXNbMF1dLmR1cGxpY2F0ZWQpCisgICAgeworICAgICAgZXJyID0gZHVwbGljYXRlX25vZGVfY2xvc3VyZSAoZGZhLCBub2RlLCBub2RlLCBub2RlLAorCQkJCSAgICBkZmEtPm5vZGVzW25vZGVdLmNvbnN0cmFpbnQpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorCisgIC8qIEV4cGFuZCBlYWNoIGVwc2lsb24gZGVzdGluYXRpb24gbm9kZXMuICAqLworICBpZiAoSVNfRVBTSUxPTl9OT0RFKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkpCisgICAgZm9yIChpID0gMDsgaSA8IGRmYS0+ZWRlc3RzW25vZGVdLm5lbGVtOyArK2kpCisgICAgICB7CisJcmVfbm9kZV9zZXQgZWNsb3N1cmVfZWxlbTsKKwlpbnQgZWRlc3QgPSBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1tpXTsKKwkvKiBJZiBjYWxjdWxhdGluZyB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBlZGVzdCcgaXMgaW4gcHJvZ3Jlc3MsCisJICAgcmV0dXJuIGludGVybWVkaWF0ZSByZXN1bHQuICAqLworCWlmIChkZmEtPmVjbG9zdXJlc1tlZGVzdF0ubmVsZW0gPT0gLTEpCisJICB7CisJICAgIGluY29tcGxldGUgPSAxOworCSAgICBjb250aW51ZTsKKwkgIH0KKwkvKiBJZiB3ZSBoYXZlbid0IGNhbGN1bGF0ZWQgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiBgZWRlc3QnIHlldCwKKwkgICBjYWxjdWxhdGUgbm93LiBPdGhlcndpc2UgdXNlIGNhbGN1bGF0ZWQgZXBzaWxvbiBjbG9zdXJlLiAgKi8KKwlpZiAoZGZhLT5lY2xvc3VyZXNbZWRlc3RdLm5lbGVtID09IDApCisJICB7CisJICAgIGVyciA9IGNhbGNfZWNsb3N1cmVfaXRlciAoJmVjbG9zdXJlX2VsZW0sIGRmYSwgZWRlc3QsIDApOworCSAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgICAgcmV0dXJuIGVycjsKKwkgIH0KKwllbHNlCisJICBlY2xvc3VyZV9lbGVtID0gZGZhLT5lY2xvc3VyZXNbZWRlc3RdOworCS8qIE1lcmdlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgYGVkZXN0Jy4gICovCisJZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZlY2xvc3VyZSwgJmVjbG9zdXJlX2VsZW0pOworCWlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgIHJldHVybiBlcnI7CisJLyogSWYgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiBgZWRlc3QnIGlzIGluY29tcGxldGUsCisJICAgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiB0aGlzIG5vZGUgaXMgYWxzbyBpbmNvbXBsZXRlLiAgKi8KKwlpZiAoZGZhLT5lY2xvc3VyZXNbZWRlc3RdLm5lbGVtID09IDApCisJICB7CisJICAgIGluY29tcGxldGUgPSAxOworCSAgICByZV9ub2RlX3NldF9mcmVlICgmZWNsb3N1cmVfZWxlbSk7CisJICB9CisgICAgICB9CisKKyAgLyogQW4gZXBzaWxvbiBjbG9zdXJlIGluY2x1ZGVzIGl0c2VsZi4gICovCisgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoJmVjbG9zdXJlLCBub2RlKTsKKyAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgaWYgKGluY29tcGxldGUgJiYgIXJvb3QpCisgICAgZGZhLT5lY2xvc3VyZXNbbm9kZV0ubmVsZW0gPSAwOworICBlbHNlCisgICAgZGZhLT5lY2xvc3VyZXNbbm9kZV0gPSBlY2xvc3VyZTsKKyAgKm5ld19zZXQgPSBlY2xvc3VyZTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorDAorLyogRnVuY3Rpb25zIGZvciB0b2tlbiB3aGljaCBhcmUgdXNlZCBpbiB0aGUgcGFyc2VyLiAgKi8KKworLyogRmV0Y2ggYSB0b2tlbiBmcm9tIElOUFVULgorICAgV2UgbXVzdCBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW5zaWRlIGJyYWNrZXQgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZldGNoX3Rva2VuIChyZV90b2tlbl90ICpyZXN1bHQsIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKK3sKKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCBwZWVrX3Rva2VuIChyZXN1bHQsIGlucHV0LCBzeW50YXgpKTsKK30KKworLyogUGVlayBhIHRva2VuIGZyb20gSU5QVVQsIGFuZCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4uCisgICBXZSBtdXN0IG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBpbnNpZGUgYnJhY2tldCBleHByZXNzaW9ucy4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQoreworICB1bnNpZ25lZCBjaGFyIGM7CisKKyAgaWYgKHJlX3N0cmluZ19lb2kgKGlucHV0KSkKKyAgICB7CisgICAgICB0b2tlbi0+dHlwZSA9IEVORF9PRl9SRTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBjID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIDApOworICB0b2tlbi0+b3ByLmMgPSBjOworCisgIHRva2VuLT53b3JkX2NoYXIgPSAwOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHRva2VuLT5tYl9wYXJ0aWFsID0gMDsKKyAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSAmJgorICAgICAgIXJlX3N0cmluZ19maXJzdF9ieXRlIChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgeworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICB0b2tlbi0+bWJfcGFydGlhbCA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisjZW5kaWYKKyAgaWYgKGMgPT0gJ1xcJykKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMyOworICAgICAgaWYgKHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxID49IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKwl7CisJICB0b2tlbi0+dHlwZSA9IEJBQ0tfU0xBU0g7CisJICByZXR1cm4gMTsKKwl9CisKKyAgICAgIGMyID0gcmVfc3RyaW5nX3BlZWtfYnl0ZV9jYXNlIChpbnB1dCwgMSk7CisgICAgICB0b2tlbi0+b3ByLmMgPSBjMjsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorCXsKKwkgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsCisJCQkJCSAgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEpOworCSAgdG9rZW4tPndvcmRfY2hhciA9IElTX1dJREVfV09SRF9DSEFSICh3YykgIT0gMDsKKwl9CisgICAgICBlbHNlCisjZW5kaWYKKwl0b2tlbi0+d29yZF9jaGFyID0gSVNfV09SRF9DSEFSIChjMikgIT0gMDsKKworICAgICAgc3dpdGNoIChjMikKKwl7CisJY2FzZSAnfCc6CisJICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgIShzeW50YXggJiBSRV9OT19CS19WQkFSKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9BTFQ7CisJICBicmVhazsKKwljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6CisJY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19CS19SRUZTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gT1BfQkFDS19SRUY7CisJICAgICAgdG9rZW4tPm9wci5pZHggPSBjMiAtICcxJzsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnPCc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0ZJUlNUOworCSAgICB9CisJICBicmVhazsKKwljYXNlICc+JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfTEFTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnYic6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0RFTElNOworCSAgICB9CisJICBicmVhazsKKwljYXNlICdCJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IE5PVF9XT1JEX0RFTElNOworCSAgICB9CisJICBicmVhazsKKwljYXNlICd3JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX1dPUkQ7CisJICBicmVhazsKKwljYXNlICdXJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX05PVFdPUkQ7CisJICBicmVhazsKKwljYXNlICdzJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX1NQQUNFOworCSAgYnJlYWs7CisJY2FzZSAnUyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9OT1RTUEFDRTsKKwkgIGJyZWFrOworCWNhc2UgJ2AnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gQlVGX0ZJUlNUOworCSAgICB9CisJICBicmVhazsKKwljYXNlICdcJyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBCVUZfTEFTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnKCc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19CS19QQVJFTlMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fU1VCRVhQOworCSAgYnJlYWs7CisJY2FzZSAnKSc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19CS19QQVJFTlMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX0NMT1NFX1NVQkVYUDsKKwkgIGJyZWFrOworCWNhc2UgJysnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmIChzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9EVVBfUExVUzsKKwkgIGJyZWFrOworCWNhc2UgJz8nOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmIChzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9EVVBfUVVFU1RJT047CisJICBicmVhazsKKwljYXNlICd7JzoKKwkgIGlmICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKSAmJiAoIShzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0RVUF9OVU07CisJICBicmVhazsKKwljYXNlICd9JzoKKwkgIGlmICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKSAmJiAoIShzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9EVVBfTlVNOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICAgIHJldHVybiAyOworICAgIH0KKworICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpOworICAgICAgdG9rZW4tPndvcmRfY2hhciA9IElTX1dJREVfV09SRF9DSEFSICh3YykgIT0gMDsKKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIHRva2VuLT53b3JkX2NoYXIgPSBJU19XT1JEX0NIQVIgKHRva2VuLT5vcHIuYyk7CisKKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICdcbic6CisgICAgICBpZiAoc3ludGF4ICYgUkVfTkVXTElORV9BTFQpCisJdG9rZW4tPnR5cGUgPSBPUF9BTFQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICd8JzoKKyAgICAgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAoc3ludGF4ICYgUkVfTk9fQktfVkJBUikpCisJdG9rZW4tPnR5cGUgPSBPUF9BTFQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICcqJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfRFVQX0FTVEVSSVNLOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKyc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgIShzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwl0b2tlbi0+dHlwZSA9IE9QX0RVUF9QTFVTOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnPyc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgIShzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwl0b2tlbi0+dHlwZSA9IE9QX0RVUF9RVUVTVElPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3snOgorICAgICAgaWYgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpICYmIChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQorCXRva2VuLT50eXBlID0gT1BfT1BFTl9EVVBfTlVNOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnfSc6CisgICAgICBpZiAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykgJiYgKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpCisJdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9EVVBfTlVNOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKCc6CisgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorCXRva2VuLT50eXBlID0gT1BfT1BFTl9TVUJFWFA7CisgICAgICBicmVhazsKKyAgICBjYXNlICcpJzoKKyAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisJdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9TVUJFWFA7CisgICAgICBicmVhazsKKyAgICBjYXNlICdbJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfT1BFTl9CUkFDS0VUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnLic6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX1BFUklPRDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ14nOgorICAgICAgaWYgKCEoc3ludGF4ICYgKFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyB8IFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSkpICYmCisJICByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICE9IDApCisJeworCSAgY2hhciBwcmV2ID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIC0xKTsKKwkgIGlmICghKHN5bnRheCAmIFJFX05FV0xJTkVfQUxUKSB8fCBwcmV2ICE9ICdcbicpCisJICAgIGJyZWFrOworCX0KKyAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IExJTkVfRklSU1Q7CisgICAgICBicmVhazsKKyAgICBjYXNlICckJzoKKyAgICAgIGlmICghKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUykgJiYKKwkgIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxICE9IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKwl7CisJICByZV90b2tlbl90IG5leHQ7CisJICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoaW5wdXQsIDEpOworCSAgcGVla190b2tlbiAoJm5leHQsIGlucHV0LCBzeW50YXgpOworCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCAtMSk7CisJICBpZiAobmV4dC50eXBlICE9IE9QX0FMVCAmJiBuZXh0LnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKQorCSAgICBicmVhazsKKwl9CisgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKyAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBMSU5FX0xBU1Q7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gMTsKK30KKworLyogUGVlayBhIHRva2VuIGZyb20gSU5QVVQsIGFuZCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4uCisgICBXZSBtdXN0IG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBvdXQgb2YgYnJhY2tldCBleHByZXNzaW9ucy4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitwZWVrX3Rva2VuX2JyYWNrZXQgKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgaWYgKHJlX3N0cmluZ19lb2kgKGlucHV0KSkKKyAgICB7CisgICAgICB0b2tlbi0+dHlwZSA9IEVORF9PRl9SRTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgYyA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAwKTsKKyAgdG9rZW4tPm9wci5jID0gYzsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEgJiYKKyAgICAgICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpKQorICAgIHsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgICAgcmV0dXJuIDE7CisgICAgfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgaWYgKGMgPT0gJ1xcJyAmJiAoc3ludGF4ICYgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUykKKyAgICAgICYmIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxIDwgcmVfc3RyaW5nX2xlbmd0aCAoaW5wdXQpKQorICAgIHsKKyAgICAgIC8qIEluIHRoaXMgY2FzZSwgJ1wnIGVzY2FwZSBhIGNoYXJhY3Rlci4gICovCisgICAgICB1bnNpZ25lZCBjaGFyIGMyOworICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCAxKTsKKyAgICAgIGMyID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIDApOworICAgICAgdG9rZW4tPm9wci5jID0gYzI7CisgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgaWYgKGMgPT0gJ1snKSAvKiAnWycgaXMgYSBzcGVjaWFsIGNoYXIgaW4gYSBicmFja2V0IGV4cHMuICAqLworICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CisgICAgICBpbnQgdG9rZW5fbGVuOworICAgICAgaWYgKHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxIDwgcmVfc3RyaW5nX2xlbmd0aCAoaW5wdXQpKQorCWMyID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIDEpOworICAgICAgZWxzZQorCWMyID0gMDsKKyAgICAgIHRva2VuLT5vcHIuYyA9IGMyOworICAgICAgdG9rZW5fbGVuID0gMjsKKyAgICAgIHN3aXRjaCAoYzIpCisJeworCWNhc2UgJy4nOgorCSAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0NPTExfRUxFTTsKKwkgIGJyZWFrOworCWNhc2UgJz0nOgorCSAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0VRVUlWX0NMQVNTOworCSAgYnJlYWs7CisJY2FzZSAnOic6CisJICBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0NIQVJfQ0xBU1M7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIC8qIGVsc2UgZmFsbCB0aHJvdWdoLiAgKi8KKwlkZWZhdWx0OgorCSAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisJICB0b2tlbi0+b3ByLmMgPSBjOworCSAgdG9rZW5fbGVuID0gMTsKKwkgIGJyZWFrOworCX0KKyAgICAgIHJldHVybiB0b2tlbl9sZW47CisgICAgfQorICBzd2l0Y2ggKGMpCisgICAgeworICAgIGNhc2UgJy0nOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9DSEFSU0VUX1JBTkdFOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXSc6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX0NMT1NFX0JSQUNLRVQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICdeJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfTk9OX01BVENIX0xJU1Q7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgfQorICByZXR1cm4gMTsKK30KKwwKKy8qIEZ1bmN0aW9ucyBmb3IgcGFyc2VyLiAgKi8KKworLyogRW50cnkgcG9pbnQgb2YgdGhlIHBhcnNlci4KKyAgIFBhcnNlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gUkVHRVhQIGFuZCByZXR1cm4gdGhlIHN0cnVjdHVyZSB0cmVlLgorICAgSWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkLCBFUlIgaXMgc2V0IGJ5IGVycm9yIGNvZGUsIGFuZCByZXR1cm4gTlVMTC4KKyAgIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbiA8cmVnX2V4cD46CisJICAgQ0FUCisJICAgLyBcCisJICAvICAgXAorICAgPHJlZ19leHA+ICBFT1IKKworICAgQ0FUIG1lYW5zIGNvbmNhdGVuYXRpb24uCisgICBFT1IgbWVhbnMgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbi4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZWdfc3ludGF4X3Qgc3ludGF4LAorICAgICAgIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWUsICplb3IsICpyb290OworICByZV90b2tlbl90IGN1cnJlbnRfdG9rZW47CisgIGRmYS0+c3ludGF4ID0gc3ludGF4OworICBmZXRjaF90b2tlbiAoJmN1cnJlbnRfdG9rZW4sIHJlZ2V4cCwgc3ludGF4IHwgUkVfQ0FSRVRfQU5DSE9SU19IRVJFKTsKKyAgdHJlZSA9IHBhcnNlX3JlZ19leHAgKHJlZ2V4cCwgcHJlZywgJmN1cnJlbnRfdG9rZW4sIHN5bnRheCwgMCwgZXJyKTsKKyAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGVvciA9IGNyZWF0ZV90cmVlIChkZmEsIE5VTEwsIE5VTEwsIEVORF9PRl9SRSk7CisgIGlmICh0cmVlICE9IE5VTEwpCisgICAgcm9vdCA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGVvciwgQ09OQ0FUKTsKKyAgZWxzZQorICAgIHJvb3QgPSBlb3I7CisgIGlmIChCRSAoZW9yID09IE5VTEwgfHwgcm9vdCA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIHJvb3Q7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgPGJyYW5jaDE+fDxicmFuY2gyPjoKKwkgICBBTFQKKwkgICAvIFwKKwkgIC8gICBcCisgICA8YnJhbmNoMT4gPGJyYW5jaDI+CisKKyAgIEFMVCBtZWFucyBhbHRlcm5hdGl2ZSwgd2hpY2ggcmVwcmVzZW50cyB0aGUgb3BlcmF0b3IgYHwnLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfcmVnX2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlLCAqYnJhbmNoID0gTlVMTDsKKyAgdHJlZSA9IHBhcnNlX2JyYW5jaCAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSAodG9rZW4tPnR5cGUgPT0gT1BfQUxUKQorICAgIHsKKyAgICAgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXggfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUpOworICAgICAgaWYgKHRva2VuLT50eXBlICE9IE9QX0FMVCAmJiB0b2tlbi0+dHlwZSAhPSBFTkRfT0ZfUkUKKwkgICYmIChuZXN0ID09IDAgfHwgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKwl7CisJICBicmFuY2ggPSBwYXJzZV9icmFuY2ggKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCwgZXJyKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiBicmFuY2ggPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGVsc2UKKwlicmFuY2ggPSBOVUxMOworICAgICAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGJyYW5jaCwgT1BfQUxUKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkIHRoZSBmb2xsb3dpbmcgdHJlZSwgZnJvbSByZWd1bGFyIGV4cHJlc3Npb24KKyAgIDxleHAxPjxleHAyPjoKKwlDQVQKKwkvIFwKKyAgICAgICAvICAgXAorICAgPGV4cDE+IDxleHAyPgorCisgICBDQVQgbWVhbnMgY29uY2F0ZW5hdGlvbi4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX2JyYW5jaCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgYmluX3RyZWVfdCAqdHJlZSwgKmV4cDsKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIHRyZWUgPSBwYXJzZV9leHByZXNzaW9uIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworCisgIHdoaWxlICh0b2tlbi0+dHlwZSAhPSBPUF9BTFQgJiYgdG9rZW4tPnR5cGUgIT0gRU5EX09GX1JFCisJICYmIChuZXN0ID09IDAgfHwgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKyAgICB7CisgICAgICBleHAgPSBwYXJzZV9leHByZXNzaW9uIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgZXhwID09IE5VTEwsIDApKQorCXsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGlmICh0cmVlICE9IE5VTEwgJiYgZXhwICE9IE5VTEwpCisJeworCSAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGV4cCwgQ09OQ0FUKTsKKwkgIGlmICh0cmVlID09IE5VTEwpCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHRyZWUgPT0gTlVMTCkKKwl0cmVlID0gZXhwOworICAgICAgLyogT3RoZXJ3aXNlIGV4cCA9PSBOVUxMLCB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBuZXcgdHJlZS4gICovCisgICAgfQorICByZXR1cm4gdHJlZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uIGEqOgorCSAqCisJIHwKKwkgYQorKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJCSAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pIChyZWdleHApCisJCSAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpKQorCSAgICB7CisJICAgICAgYmluX3RyZWVfdCAqbWJjX3JlbWFpbjsKKwkgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKwkgICAgICBtYmNfcmVtYWluID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworCSAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBtYmNfcmVtYWluLCBDT05DQVQpOworCSAgICAgIGlmIChCRSAobWJjX3JlbWFpbiA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJCXsKKwkJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkJICByZXR1cm4gTlVMTDsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fU1VCRVhQOgorICAgICAgdHJlZSA9IHBhcnNlX3N1Yl9leHAgKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCArIDEsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfT1BFTl9CUkFDS0VUOgorICAgICAgdHJlZSA9IHBhcnNlX2JyYWNrZXRfZXhwIChyZWdleHAsIGRmYSwgdG9rZW4sIHN5bnRheCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9CQUNLX1JFRjoKKyAgICAgIGlmICghQkUgKGRmYS0+Y29tcGxldGVkX2JrcmVmX21hcCAmICgxIDw8IHRva2VuLT5vcHIuaWR4KSwgMSkpCisJeworCSAgKmVyciA9IFJFR19FU1VCUkVHOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZGZhLT51c2VkX2JrcmVmX21hcCB8PSAxIDw8IHRva2VuLT5vcHIuaWR4OworICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgICsrZGZhLT5uYmFja3JlZjsKKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9PUEVOX0RVUF9OVU06CisgICAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKwl7CisJICAqZXJyID0gUkVHX0JBRFJQVDsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBPUF9EVVBfQVNURVJJU0s6CisgICAgY2FzZSBPUF9EVVBfUExVUzoKKyAgICBjYXNlIE9QX0RVUF9RVUVTVElPTjoKKyAgICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTKQorCXsKKwkgICplcnIgPSBSRUdfQkFEUlBUOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpCisJeworCSAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisJICByZXR1cm4gcGFyc2VfZXhwcmVzc2lvbiAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworCX0KKyAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICAqLworICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorICAgICAgaWYgKCh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFApICYmCisJICAhKHN5bnRheCAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpKQorCXsKKwkgICplcnIgPSBSRUdfRVJQQVJFTjsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICAqLworICAgIGNhc2UgT1BfQ0xPU0VfRFVQX05VTToKKyAgICAgIC8qIFdlIHRyZWF0IGl0IGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisKKyAgICAgIC8qIFRoZW4gd2UgY2FuIHRoZXNlIGNoYXJhY3RlcnMgYXMgbm9ybWFsIGNoYXJhY3RlcnMuICAqLworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICAvKiBtYl9wYXJ0aWFsIGFuZCB3b3JkX2NoYXIgYml0cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYWxyZWFkeQorCSBieSBwZWVrX3Rva2VuLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBicmVhazsKKyAgICBjYXNlIEFOQ0hPUjoKKyAgICAgIGlmICgodG9rZW4tPm9wci5jdHhfdHlwZQorCSAgICYgKFdPUkRfREVMSU0gfCBOT1RfV09SRF9ERUxJTSB8IFdPUkRfRklSU1QgfCBXT1JEX0xBU1QpKQorCSAgJiYgZGZhLT53b3JkX29wc191c2VkID09IDApCisJaW5pdF93b3JkX2NoYXIgKGRmYSk7CisgICAgICBpZiAodG9rZW4tPm9wci5jdHhfdHlwZSA9PSBXT1JEX0RFTElNCisJICB8fCB0b2tlbi0+b3ByLmN0eF90eXBlID09IE5PVF9XT1JEX0RFTElNKQorCXsKKwkgIGJpbl90cmVlX3QgKnRyZWVfZmlyc3QsICp0cmVlX2xhc3Q7CisJICBpZiAodG9rZW4tPm9wci5jdHhfdHlwZSA9PSBXT1JEX0RFTElNKQorCSAgICB7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfRklSU1Q7CisJICAgICAgdHJlZV9maXJzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9MQVNUOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gSU5TSURFX1dPUkQ7CisJICAgICAgdHJlZV9maXJzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gSU5TSURFX05PVFdPUkQ7CisJICAgIH0KKwkgIHRyZWVfbGFzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlX2ZpcnN0LCB0cmVlX2xhc3QsIE9QX0FMVCk7CisJICBpZiAoQkUgKHRyZWVfZmlyc3QgPT0gTlVMTCB8fCB0cmVlX2xhc3QgPT0gTlVMTCB8fCB0cmVlID09IE5VTEwsIDApKQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwkgICAgeworCSAgICAgICplcnIgPSBSRUdfRVNQQUNFOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgICAgLyogV2UgbXVzdCByZXR1cm4gaGVyZSwgc2luY2UgQU5DSE9ScyBjYW4ndCBiZSBmb2xsb3dlZAorCSBieSByZXBldGl0aW9uIG9wZXJhdG9ycy4KKwkgZWcuIFJFIl4qIiBpcyBpbnZhbGlkIG9yICI8QU5DSE9SKF4pPjxDSEFSKCopPiIsCisJICAgICBpdCBtdXN0IG5vdCBiZSAiPEFOQ0hPUiheKT48UkVQRUFUKCopPiIuICAqLworICAgICAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisgICAgICByZXR1cm4gdHJlZTsKKyAgICBjYXNlIE9QX1BFUklPRDoKKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwlkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfV09SRDoKKyAgICBjYXNlIE9QX05PVFdPUkQ6CisgICAgICB0cmVlID0gYnVpbGRfY2hhcmNsYXNzX29wIChkZmEsIHJlZ2V4cC0+dHJhbnMsCisJCQkJICJhbG51bSIsCisJCQkJICJfIiwKKwkJCQkgdG9rZW4tPnR5cGUgPT0gT1BfTk9UV09SRCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9TUEFDRToKKyAgICBjYXNlIE9QX05PVFNQQUNFOgorICAgICAgdHJlZSA9IGJ1aWxkX2NoYXJjbGFzc19vcCAoZGZhLCByZWdleHAtPnRyYW5zLAorCQkJCSAic3BhY2UiLAorCQkJCSAiIiwKKwkJCQkgdG9rZW4tPnR5cGUgPT0gT1BfTk9UU1BBQ0UsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfQUxUOgorICAgIGNhc2UgRU5EX09GX1JFOgorICAgICAgcmV0dXJuIE5VTEw7CisgICAgY2FzZSBCQUNLX1NMQVNIOgorICAgICAgKmVyciA9IFJFR19FRVNDQVBFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIE11c3Qgbm90IGhhcHBlbj8gICovCisjaWZkZWYgREVCVUcKKyAgICAgIGFzc2VydCAoMCk7CisjZW5kaWYKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgd2hpbGUgKHRva2VuLT50eXBlID09IE9QX0RVUF9BU1RFUklTSyB8fCB0b2tlbi0+dHlwZSA9PSBPUF9EVVBfUExVUworCSB8fCB0b2tlbi0+dHlwZSA9PSBPUF9EVVBfUVVFU1RJT04gfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9EVVBfTlVNKQorICAgIHsKKyAgICAgIHRyZWUgPSBwYXJzZV9kdXBfb3AgKHRyZWUsIHJlZ2V4cCwgZGZhLCB0b2tlbiwgc3ludGF4LCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICAvKiBJbiBCUkUgY29uc2VjdXRpdmUgZHVwbGljYXRpb25zIGFyZSBub3QgYWxsb3dlZC4gICovCisgICAgICBpZiAoKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5WQUxJRF9EVVApCisJICAmJiAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX0FTVEVSSVNLCisJICAgICAgfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9EVVBfTlVNKSkKKwl7CisJICAqZXJyID0gUkVHX0JBRFJQVDsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisKKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKDxyZWdfZXhwPik6CisJIFNVQkVYUAorCSAgICB8CisJPHJlZ19leHA+CisqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZV9zdWJfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKwkgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIHNpemVfdCBjdXJfbnN1YjsKKyAgY3VyX25zdWIgPSBwcmVnLT5yZV9uc3ViKys7CisKKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCB8IFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSk7CisKKyAgLyogVGhlIHN1YmV4cHJlc3Npb24gbWF5IGJlIGEgbnVsbCBzdHJpbmcuICAqLworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorICAgIHRyZWUgPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgdHJlZSA9IHBhcnNlX3JlZ19leHAgKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciA9PSBSRUdfTk9FUlJPUiAmJiB0b2tlbi0+dHlwZSAhPSBPUF9DTE9TRV9TVUJFWFAsIDApKQorCSplcnIgPSBSRUdfRVBBUkVOOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKGN1cl9uc3ViIDw9ICc5JyAtICcxJykKKyAgICBkZmEtPmNvbXBsZXRlZF9ia3JlZl9tYXAgfD0gMSA8PCBjdXJfbnN1YjsKKworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgTlVMTCwgU1VCRVhQKTsKKyAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB0cmVlLT50b2tlbi5vcHIuaWR4ID0gY3VyX25zdWI7CisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlIHJlcGV0aXRpb24gb3BlcmF0b3JzIGxpa2UgIioiLCAiKyIsICJ7MSwzfSIgZXRjLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfZHVwX29wIChiaW5fdHJlZV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLAorCSAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIGJpbl90cmVlX3QgKnRyZWUgPSBOVUxMLCAqb2xkX3RyZWUgPSBOVUxMOworICBpbnQgaSwgc3RhcnQsIGVuZCwgc3RhcnRfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCk7CisjaWZuZGVmIFJFX1RPS0VOX0lOSVRfQlVHCisgIHJlX3Rva2VuX3Qgc3RhcnRfdG9rZW4gPSAqdG9rZW47CisjZWxzZQorICByZV90b2tlbl90IHN0YXJ0X3Rva2VuOworCisgIG1lbWNweSAoKHZvaWQgKikgJnN0YXJ0X3Rva2VuLCAodm9pZCAqKSB0b2tlbiwgc2l6ZW9mIHN0YXJ0X3Rva2VuKTsKKyNlbmRpZgorCisgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0RVUF9OVU0pCisgICAgeworICAgICAgZW5kID0gMDsKKyAgICAgIHN0YXJ0ID0gZmV0Y2hfbnVtYmVyIChyZWdleHAsIHRva2VuLCBzeW50YXgpOworICAgICAgaWYgKHN0YXJ0ID09IC0xKQorCXsKKwkgIGlmICh0b2tlbi0+dHlwZSA9PSBDSEFSQUNURVIgJiYgdG9rZW4tPm9wci5jID09ICcsJykKKwkgICAgc3RhcnQgPSAwOyAvKiBXZSB0cmVhdCAieyxtfSIgYXMgInswLG19Ii4gICovCisJICBlbHNlCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0JBREJSOyAvKiA8cmU+e30gaXMgaW52YWxpZC4gICovCisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICBpZiAoQkUgKHN0YXJ0ICE9IC0yLCAxKSkKKwl7CisJICAvKiBXZSB0cmVhdCAie259IiBhcyAie24sbn0iLiAgKi8KKwkgIGVuZCA9ICgodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfRFVQX05VTSkgPyBzdGFydAorCQkgOiAoKHRva2VuLT50eXBlID09IENIQVJBQ1RFUiAmJiB0b2tlbi0+b3ByLmMgPT0gJywnKQorCQkgICAgPyBmZXRjaF9udW1iZXIgKHJlZ2V4cCwgdG9rZW4sIHN5bnRheCkgOiAtMikpOworCX0KKyAgICAgIGlmIChCRSAoc3RhcnQgPT0gLTIgfHwgZW5kID09IC0yLCAwKSkKKwl7CisJICAvKiBJbnZhbGlkIHNlcXVlbmNlLiAgKi8KKwkgIGlmIChCRSAoIShzeW50YXggJiBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCksIDApKQorCSAgICB7CisJICAgICAgaWYgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSkKKwkJKmVyciA9IFJFR19FQlJBQ0U7CisJICAgICAgZWxzZQorCQkqZXJyID0gUkVHX0JBREJSOworCisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKworCSAgLyogSWYgdGhlIHN5bnRheCBiaXQgaXMgc2V0LCByb2xsYmFjay4gICovCisJICByZV9zdHJpbmdfc2V0X2luZGV4IChyZWdleHAsIHN0YXJ0X2lkeCk7CisJICAqdG9rZW4gPSBzdGFydF90b2tlbjsKKwkgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCSAgLyogbWJfcGFydGlhbCBhbmQgd29yZF9jaGFyIGJpdHMgc2hvdWxkIGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkKKwkgICAgIHBlZWtfdG9rZW4uICAqLworCSAgcmV0dXJuIGVsZW07CisJfQorCisgICAgICBpZiAoQkUgKChlbmQgIT0gLTEgJiYgc3RhcnQgPiBlbmQpIHx8IHRva2VuLT50eXBlICE9IE9QX0NMT1NFX0RVUF9OVU0sIDApKQorCXsKKwkgIC8qIEZpcnN0IG51bWJlciBncmVhdGVyIHRoYW4gc2Vjb25kLiAgKi8KKwkgICplcnIgPSBSRUdfQkFEQlI7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RhcnQgPSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX1BMVVMpID8gMSA6IDA7CisgICAgICBlbmQgPSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX1FVRVNUSU9OKSA/IDEgOiAtMTsKKyAgICB9CisKKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgaWYgKEJFIChlbGVtID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBpZiAoQkUgKHN0YXJ0ID09IDAgJiYgZW5kID09IDAsIDApKQorICAgIHsKKyAgICAgIHBvc3RvcmRlciAoZWxlbSwgZnJlZV90cmVlLCBOVUxMKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAvKiBFeHRyYWN0ICI8cmU+e24sbX0iIHRvICI8cmU+PHJlPi4uLjxyZT48cmU+ezAsPG0tbj59Ii4gICovCisgIGlmIChCRSAoc3RhcnQgPiAwLCAwKSkKKyAgICB7CisgICAgICB0cmVlID0gZWxlbTsKKyAgICAgIGZvciAoaSA9IDI7IGkgPD0gc3RhcnQ7ICsraSkKKwl7CisJICBlbGVtID0gZHVwbGljYXRlX3RyZWUgKGVsZW0sIGRmYSk7CisJICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgZWxlbSwgQ09OQ0FUKTsKKwkgIGlmIChCRSAoZWxlbSA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJICAgIGdvdG8gcGFyc2VfZHVwX29wX2VzcGFjZTsKKwl9CisKKyAgICAgIGlmIChzdGFydCA9PSBlbmQpCisJcmV0dXJuIHRyZWU7CisKKyAgICAgIC8qIER1cGxpY2F0ZSBFTEVNIGJlZm9yZSBpdCBpcyBtYXJrZWQgb3B0aW9uYWwuICAqLworICAgICAgZWxlbSA9IGR1cGxpY2F0ZV90cmVlIChlbGVtLCBkZmEpOworICAgICAgb2xkX3RyZWUgPSB0cmVlOworICAgIH0KKyAgZWxzZQorICAgIG9sZF90cmVlID0gTlVMTDsKKworICBpZiAoZWxlbS0+dG9rZW4udHlwZSA9PSBTVUJFWFApCisgICAgcG9zdG9yZGVyIChlbGVtLCBtYXJrX29wdF9zdWJleHAsICh2b2lkICopIChpbnRwdHJfdCkgZWxlbS0+dG9rZW4ub3ByLmlkeCk7CisKKyAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIGVsZW0sIE5VTEwsIChlbmQgPT0gLTEgPyBPUF9EVVBfQVNURVJJU0sgOiBPUF9BTFQpKTsKKyAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorICAgIGdvdG8gcGFyc2VfZHVwX29wX2VzcGFjZTsKKworICAvKiBUaGlzIGxvb3AgaXMgYWN0dWFsbHkgZXhlY3V0ZWQgb25seSB3aGVuIGVuZCAhPSAtMSwKKyAgICAgdG8gcmV3cml0ZSA8cmU+ezAsbn0gYXMgKDxyZT4oPHJlPi4uLjxyZT4/KT8pPy4uLiAgV2UgaGF2ZQorICAgICBhbHJlYWR5IGNyZWF0ZWQgdGhlIHN0YXJ0KzEtdGggY29weS4gICovCisgIGZvciAoaSA9IHN0YXJ0ICsgMjsgaSA8PSBlbmQ7ICsraSkKKyAgICB7CisgICAgICBlbGVtID0gZHVwbGljYXRlX3RyZWUgKGVsZW0sIGRmYSk7CisgICAgICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgZWxlbSwgQ09OQ0FUKTsKKyAgICAgIGlmIChCRSAoZWxlbSA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJZ290byBwYXJzZV9kdXBfb3BfZXNwYWNlOworCisgICAgICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgTlVMTCwgT1BfQUxUKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwlnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisgICAgfQorCisgIGlmIChvbGRfdHJlZSkKKyAgICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgb2xkX3RyZWUsIHRyZWUsIENPTkNBVCk7CisKKyAgcmV0dXJuIHRyZWU7CisKKyBwYXJzZV9kdXBfb3BfZXNwYWNlOgorICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFNpemUgb2YgdGhlIG5hbWVzIGZvciBjb2xsYXRpbmcgc3ltYm9sL2VxdWl2YWxlbmNlX2NsYXNzL2NoYXJhY3Rlcl9jbGFzcy4KKyAgIEknbSBub3Qgc3VyZSwgYnV0IG1heWJlIGVub3VnaC4gICovCisjZGVmaW5lIEJSQUNLRVRfTkFNRV9CVUZfU0laRSAzMgorCisjaWZuZGVmIF9MSUJDCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCBvbmx5IHVzZWQgaW4gY2FzZSBvZiBOT1QgX0xJQkMuCisgICAgIEJ1aWxkIHRoZSByYW5nZSBleHByZXNzaW9uIHdoaWNoIHN0YXJ0cyBmcm9tIFNUQVJUX0VMRU0sIGFuZCBlbmRzCisgICAgIGF0IEVORF9FTEVNLiAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KKyAgICAgUkFOR0VfQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCBhbmQKKyAgICAgbWJjc2V0LT5yYW5nZV9lbmRzLCBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5CisgICAgIHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorYnVpbGRfcmFuZ2VfZXhwIChiaXRzZXRfdCBzYmNzZXQsIHJlX2NoYXJzZXRfdCAqbWJjc2V0LCBpbnQgKnJhbmdlX2FsbG9jLAorCQkgYnJhY2tldF9lbGVtX3QgKnN0YXJ0X2VsZW0sIGJyYWNrZXRfZWxlbV90ICplbmRfZWxlbSkKKyMgZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK2J1aWxkX3JhbmdlX2V4cCAoYml0c2V0X3Qgc2Jjc2V0LCBicmFja2V0X2VsZW1fdCAqc3RhcnRfZWxlbSwKKwkJIGJyYWNrZXRfZWxlbV90ICplbmRfZWxlbSkKKyMgZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCit7CisgIHVuc2lnbmVkIGludCBzdGFydF9jaCwgZW5kX2NoOworICAvKiBFcXVpdmFsZW5jZSBDbGFzc2VzIGFuZCBDaGFyYWN0ZXIgQ2xhc3NlcyBjYW4ndCBiZSBhIHJhbmdlIHN0YXJ0L2VuZC4gICovCisgIGlmIChCRSAoc3RhcnRfZWxlbS0+dHlwZSA9PSBFUVVJVl9DTEFTUyB8fCBzdGFydF9lbGVtLT50eXBlID09IENIQVJfQ0xBU1MKKwkgIHx8IGVuZF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IGVuZF9lbGVtLT50eXBlID09IENIQVJfQ0xBU1MsCisJICAwKSkKKyAgICByZXR1cm4gUkVHX0VSQU5HRTsKKworICAvKiBXZSBjYW4gaGFuZGxlIG5vIG11bHRpIGNoYXJhY3RlciBjb2xsYXRpbmcgZWxlbWVudHMgd2l0aG91dCBsaWJjCisgICAgIHN1cHBvcnQuICAqLworICBpZiAoQkUgKChzdGFydF9lbGVtLT50eXBlID09IENPTExfU1lNCisJICAgJiYgc3RybGVuICgoY2hhciAqKSBzdGFydF9lbGVtLT5vcHIubmFtZSkgPiAxKQorCSAgfHwgKGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNCisJICAgICAgJiYgc3RybGVuICgoY2hhciAqKSBlbmRfZWxlbS0+b3ByLm5hbWUpID4gMSksIDApKQorICAgIHJldHVybiBSRUdfRUNPTExBVEU7CisKKyMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgeworICAgIHdjaGFyX3Qgd2M7CisgICAgd2ludF90IHN0YXJ0X3djOworICAgIHdpbnRfdCBlbmRfd2M7CisgICAgd2NoYXJfdCBjbXBfYnVmWzZdID0ge0wnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCd9OworCisgICAgc3RhcnRfY2ggPSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gU0JfQ0hBUikgPyBzdGFydF9lbGVtLT5vcHIuY2gKKwkJOiAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pID8gc3RhcnRfZWxlbS0+b3ByLm5hbWVbMF0KKwkJICAgOiAwKSk7CisgICAgZW5kX2NoID0gKChlbmRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSKSA/IGVuZF9lbGVtLT5vcHIuY2gKKwkgICAgICA6ICgoZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pID8gZW5kX2VsZW0tPm9wci5uYW1lWzBdCisJCSA6IDApKTsKKyNpZmRlZiBHQVdLCisgICAgLyoKKyAgICAgKiBGZWRvcmEgQ29yZSAyLCBtYXliZSBvdGhlcnMsIGhhdmUgYnJva2VuIGBidG93YycgdGhhdCByZXR1cm5zIC0xCisgICAgICogZm9yIGFueSB2YWx1ZSA+IDEyNy4gU2lnaC4gTm90ZSB0aGF0IGBzdGFydF9jaCcgYW5kIGBlbmRfY2gnIGFyZQorICAgICAqIHVuc2lnbmVkLCBzbyB3ZSBkb24ndCBoYXZlIHNpZ24gZXh0ZW5zaW9uIHByb2JsZW1zLgorICAgICAqLworICAgIHN0YXJ0X3djID0gKChzdGFydF9lbGVtLT50eXBlID09IFNCX0NIQVIgfHwgc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKwkJPyBzdGFydF9jaCA6IHN0YXJ0X2VsZW0tPm9wci53Y2gpOworICAgIGVuZF93YyA9ICgoZW5kX2VsZW0tPnR5cGUgPT0gU0JfQ0hBUiB8fCBlbmRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKwkgICAgICA/IGVuZF9jaCA6IGVuZF9lbGVtLT5vcHIud2NoKTsKKyNlbHNlCisgICAgc3RhcnRfd2MgPSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gU0JfQ0hBUiB8fCBzdGFydF9lbGVtLT50eXBlID09IENPTExfU1lNKQorCQk/IF9fYnRvd2MgKHN0YXJ0X2NoKSA6IHN0YXJ0X2VsZW0tPm9wci53Y2gpOworICAgIGVuZF93YyA9ICgoZW5kX2VsZW0tPnR5cGUgPT0gU0JfQ0hBUiB8fCBlbmRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKwkgICAgICA/IF9fYnRvd2MgKGVuZF9jaCkgOiBlbmRfZWxlbS0+b3ByLndjaCk7CisjZW5kaWYKKyAgICBpZiAoc3RhcnRfd2MgPT0gV0VPRiB8fCBlbmRfd2MgPT0gV0VPRikKKyAgICAgIHJldHVybiBSRUdfRUNPTExBVEU7CisgICAgY21wX2J1ZlswXSA9IHN0YXJ0X3djOworICAgIGNtcF9idWZbNF0gPSBlbmRfd2M7CisgICAgaWYgKHdjc2NvbGwgKGNtcF9idWYsIGNtcF9idWYgKyA0KSA+IDApCisgICAgICByZXR1cm4gUkVHX0VSQU5HRTsKKworICAgIC8qIEdvdCB2YWxpZCBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWVzLCBhZGQgdGhlbSBhcyBhIG5ldyBlbnRyeS4KKyAgICAgICBIb3dldmVyLCBmb3IgIV9MSUJDIHdlIGhhdmUgbm8gY29sbGF0aW9uIGVsZW1lbnRzOiBpZiB0aGUKKyAgICAgICBjaGFyYWN0ZXIgc2V0IGlzIHNpbmdsZSBieXRlLCB0aGUgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHNldAorICAgICAgIHRoYXQgd2UgYnVpbGQgYmVsb3cgc3VmZmljZXMuICBwYXJzZV9icmFja2V0X2V4cCBwYXNzZXMKKyAgICAgICBubyBNQkNTRVQgaWYgZGZhLT5tYl9jdXJfbWF4ID09IDEuICAqLworICAgIGlmIChtYmNzZXQpCisgICAgICB7CisJLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworCWlmIChCRSAoKnJhbmdlX2FsbG9jID09IG1iY3NldC0+bnJhbmdlcywgMCkpCisJICB7CisJICAgIC8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UsIG5lZWQgcmVhbGxvYy4gICovCisJICAgIHdjaGFyX3QgKm5ld19hcnJheV9zdGFydCwgKm5ld19hcnJheV9lbmQ7CisJICAgIGludCBuZXdfbnJhbmdlczsKKworCSAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bnJhbmdlcyBpcyAwLiAgKi8KKwkgICAgbmV3X25yYW5nZXMgPSAyICogbWJjc2V0LT5ucmFuZ2VzICsgMTsKKwkgICAgLyogVXNlIHJlYWxsb2Mgc2luY2UgbWJjc2V0LT5yYW5nZV9zdGFydHMgYW5kIG1iY3NldC0+cmFuZ2VfZW5kcworCSAgICAgICBhcmUgTlVMTCBpZiAqcmFuZ2VfYWxsb2MgPT0gMC4gICovCisJICAgIG5ld19hcnJheV9zdGFydCA9IHJlX3JlYWxsb2MgKG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCB3Y2hhcl90LAorCQkJCQkgIG5ld19ucmFuZ2VzKTsKKwkgICAgbmV3X2FycmF5X2VuZCA9IHJlX3JlYWxsb2MgKG1iY3NldC0+cmFuZ2VfZW5kcywgd2NoYXJfdCwKKwkJCQkJbmV3X25yYW5nZXMpOworCisJICAgIGlmIChCRSAobmV3X2FycmF5X3N0YXJ0ID09IE5VTEwgfHwgbmV3X2FycmF5X2VuZCA9PSBOVUxMLCAwKSkKKwkgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKworCSAgICBtYmNzZXQtPnJhbmdlX3N0YXJ0cyA9IG5ld19hcnJheV9zdGFydDsKKwkgICAgbWJjc2V0LT5yYW5nZV9lbmRzID0gbmV3X2FycmF5X2VuZDsKKwkgICAgKnJhbmdlX2FsbG9jID0gbmV3X25yYW5nZXM7CisJICB9CisKKwltYmNzZXQtPnJhbmdlX3N0YXJ0c1ttYmNzZXQtPm5yYW5nZXNdID0gc3RhcnRfd2M7CisJbWJjc2V0LT5yYW5nZV9lbmRzW21iY3NldC0+bnJhbmdlcysrXSA9IGVuZF93YzsKKyAgICAgIH0KKworICAgIC8qIEJ1aWxkIHRoZSB0YWJsZSBmb3Igc2luZ2xlIGJ5dGUgY2hhcmFjdGVycy4gICovCisgICAgZm9yICh3YyA9IDA7IHdjIDwgU0JDX01BWDsgKyt3YykKKyAgICAgIHsKKwljbXBfYnVmWzJdID0gd2M7CisJaWYgKHdjc2NvbGwgKGNtcF9idWYsIGNtcF9idWYgKyAyKSA8PSAwCisJICAgICYmIHdjc2NvbGwgKGNtcF9idWYgKyAyLCBjbXBfYnVmICsgNCkgPD0gMCkKKwkgIGJpdHNldF9zZXQgKHNiY3NldCwgd2MpOworICAgICAgfQorICB9CisjIGVsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgY2g7CisgICAgc3RhcnRfY2ggPSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gU0JfQ0hBUiApID8gc3RhcnRfZWxlbS0+b3ByLmNoCisJCTogKChzdGFydF9lbGVtLT50eXBlID09IENPTExfU1lNKSA/IHN0YXJ0X2VsZW0tPm9wci5uYW1lWzBdCisJCSAgIDogMCkpOworICAgIGVuZF9jaCA9ICgoZW5kX2VsZW0tPnR5cGUgPT0gU0JfQ0hBUiApID8gZW5kX2VsZW0tPm9wci5jaAorCSAgICAgIDogKChlbmRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBlbmRfZWxlbS0+b3ByLm5hbWVbMF0KKwkJIDogMCkpOworICAgIGlmIChzdGFydF9jaCA+IGVuZF9jaCkKKyAgICAgIHJldHVybiBSRUdfRVJBTkdFOworICAgIC8qIEJ1aWxkIHRoZSB0YWJsZSBmb3Igc2luZ2xlIGJ5dGUgY2hhcmFjdGVycy4gICovCisgICAgZm9yIChjaCA9IDA7IGNoIDwgU0JDX01BWDsgKytjaCkKKyAgICAgIGlmIChzdGFydF9jaCA8PSBjaCAgJiYgY2ggPD0gZW5kX2NoKQorCWJpdHNldF9zZXQgKHNiY3NldCwgY2gpOworICB9CisjIGVuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisjZW5kaWYgLyogbm90IF9MSUJDICovCisKKyNpZm5kZWYgX0xJQkMKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgb25seSB1c2VkIGluIGNhc2Ugb2YgTk9UIF9MSUJDLi4KKyAgIEJ1aWxkIHRoZSBjb2xsYXRpbmcgZWxlbWVudCB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KKyAgIENPTExfU1lNX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPmNvbGxfc3ltLCBpcyBhCisgICBwb2ludGVyIGFyZ3VtZW50IHNpbmNlIHdlIG1heSB1cGRhdGUgaXQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KKyMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX2NvbGxhdGluZ19zeW1ib2wgKGJpdHNldF90IHNiY3NldCwgcmVfY2hhcnNldF90ICptYmNzZXQsCisJCQlpbnQgKmNvbGxfc3ltX2FsbG9jLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorIyBlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoYml0c2V0X3Qgc2Jjc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyAgc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKTsKKyAgaWYgKEJFIChuYW1lX2xlbiAhPSAxLCAwKSkKKyAgICByZXR1cm4gUkVHX0VDT0xMQVRFOworICBlbHNlCisgICAgeworICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBuYW1lWzBdKTsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9Cit9CisjZW5kaWYgLyogbm90IF9MSUJDICovCisKKy8qIFRoaXMgZnVuY3Rpb24gcGFyc2UgYnJhY2tldCBleHByZXNzaW9uIGxpa2UgIlthYmNdIiwgIlthLWNdIiwKKyAgICJbWy5hLWEuXV0iIGV0Yy4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKwkJICAgcmVnX3N5bnRheF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKQoreworI2lmZGVmIF9MSUJDCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxzZXFtYjsKKyAgY29uc3QgY2hhciAqY29sbHNlcXdjOworICB1aW50MzJfdCBucnVsZXM7CisgIGludDMyX3QgdGFibGVfc2l6ZTsKKyAgY29uc3QgaW50MzJfdCAqc3ltYl90YWJsZTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmE7CisKKyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJQkMgZW52aXJvbm1lbnQuCisgICAgIFNlZWsgdGhlIGNvbGxhdGluZyBzeW1ib2wgZW50cnkgY29ycmVzcG9uZGluZ3MgdG8gTkFNRS4KKyAgICAgUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc3ltYm9sIGluIHRoZSBTWU1CX1RBQkxFLiAgKi8KKworICBhdXRvIGlubGluZSBpbnQzMl90CisgIF9fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpCisgIHNlZWtfY29sbGF0aW5nX3N5bWJvbF9lbnRyeSAobmFtZSwgbmFtZV9sZW4pCisJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWU7CisJIHNpemVfdCBuYW1lX2xlbjsKKyAgICB7CisgICAgICBpbnQzMl90IGhhc2ggPSBlbGVtX2hhc2ggKChjb25zdCBjaGFyICopIG5hbWUsIG5hbWVfbGVuKTsKKyAgICAgIGludDMyX3QgZWxlbSA9IGhhc2ggJSB0YWJsZV9zaXplOworICAgICAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisJeworCSAgaW50MzJfdCBzZWNvbmQgPSBoYXNoICUgKHRhYmxlX3NpemUgLSAyKSArIDE7CisKKwkgIGRvCisJICAgIHsKKwkgICAgICAvKiBGaXJzdCBjb21wYXJlIHRoZSBoYXNoaW5nIHZhbHVlLiAgKi8KKwkgICAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gaGFzaAorCQkgIC8qIENvbXBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZS4gICovCisJCSAgJiYgbmFtZV9sZW4gPT0gZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdXQorCQkgIC8qIENvbXBhcmUgdGhlIG5hbWUuICAqLworCQkgICYmIG1lbWNtcCAobmFtZSwgJmV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXSArIDFdLAorCQkJICAgICBuYW1lX2xlbikgPT0gMCkKKwkJeworCQkgIC8qIFllcCwgdGhpcyBpcyB0aGUgZW50cnkuICAqLworCQkgIGJyZWFrOworCQl9CisKKwkgICAgICAvKiBOZXh0IGVudHJ5LiAgKi8KKwkgICAgICBlbGVtICs9IHNlY29uZDsKKwkgICAgfQorCSAgd2hpbGUgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApOworCX0KKyAgICAgIHJldHVybiBlbGVtOworICAgIH0KKworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9ubWVudC4KKyAgICAgTG9vayB1cCB0aGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlIG9mIEJSX0VMRU0uCisgICAgIFJldHVybiB0aGUgdmFsdWUgaWYgc3VjY2VlZGVkLCBVSU5UX01BWCBvdGhlcndpc2UuICAqLworCisgIGF1dG8gaW5saW5lIHVuc2lnbmVkIGludAorICBfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorICBsb29rdXBfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChicl9lbGVtKQorCSBicmFja2V0X2VsZW1fdCAqYnJfZWxlbTsKKyAgICB7CisgICAgICBpZiAoYnJfZWxlbS0+dHlwZSA9PSBTQl9DSEFSKQorCXsKKwkgIC8qCisJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorCSAgKi8KKwkgIGlmIChucnVsZXMgPT0gMCkKKwkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIuY2hdOworCSAgZWxzZQorCSAgICB7CisJICAgICAgd2ludF90IHdjID0gX19idG93YyAoYnJfZWxlbS0+b3ByLmNoKTsKKwkgICAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCB3Yyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IE1CX0NIQVIpCisJeworCSAgaWYgKG5ydWxlcyAhPSAwKQorCSAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBicl9lbGVtLT5vcHIud2NoKTsKKwl9CisgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IENPTExfU1lNKQorCXsKKwkgIHNpemVfdCBzeW1fbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopIGJyX2VsZW0tPm9wci5uYW1lKTsKKwkgIGlmIChucnVsZXMgIT0gMCkKKwkgICAgeworCSAgICAgIGludDMyX3QgZWxlbSwgaWR4OworCSAgICAgIGVsZW0gPSBzZWVrX2NvbGxhdGluZ19zeW1ib2xfZW50cnkgKGJyX2VsZW0tPm9wci5uYW1lLAorCQkJCQkJICBzeW1fbmFtZV9sZW4pOworCSAgICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorCQl7CisJCSAgLyogV2UgZm91bmQgdGhlIGVudHJ5LiAgKi8KKwkJICBpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisJCSAgLyogU2tpcCB0aGUgbmFtZSBvZiBjb2xsYXRpbmcgZWxlbWVudCBuYW1lLiAgKi8KKwkJICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisJCSAgLyogU2tpcCB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCQkgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKwkJICAvKiBBZGp1c3QgZm9yIHRoZSBhbGlnbm1lbnQuICAqLworCQkgIGlkeCA9IChpZHggKyAzKSAmIH4zOworCQkgIC8qIFNraXAgdGhlIG11bHRpYnl0ZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworCQkgIGlkeCArPSBzaXplb2YgKHVuc2lnbmVkIGludCk7CisJCSAgLyogU2tpcCB0aGUgd2lkZSBjaGFyIHNlcXVlbmNlIG9mIHRoZSBjb2xsYXRpbmcgZWxlbWVudC4gICovCisJCSAgaWR4ICs9IHNpemVvZiAodW5zaWduZWQgaW50KSAqCisJCSAgICAoMSArICoodW5zaWduZWQgaW50ICopIChleHRyYSArIGlkeCkpOworCQkgIC8qIFJldHVybiB0aGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlLiAgKi8KKwkJICByZXR1cm4gKih1bnNpZ25lZCBpbnQgKikgKGV4dHJhICsgaWR4KTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IDAgJiYgc3ltX25hbWVfbGVuID09IDEpCisJCXsKKwkJICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhIHNpbmdsZSBieXRlCisJCSAgICAgY2hhcmFjdGVyLiAgKi8KKwkJICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5uYW1lWzBdXTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChzeW1fbmFtZV9sZW4gPT0gMSkKKwkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIubmFtZVswXV07CisJfQorICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgIH0KKworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9ubWVudC4KKyAgICAgQnVpbGQgdGhlIHJhbmdlIGV4cHJlc3Npb24gd2hpY2ggc3RhcnRzIGZyb20gU1RBUlRfRUxFTSwgYW5kIGVuZHMKKyAgICAgYXQgRU5EX0VMRU0uICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBSQU5HRV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5yYW5nZV9zdGFydHMsIGFuZAorICAgICBtYmNzZXQtPnJhbmdlX2VuZHMsIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3ZSBtYXkKKyAgICAgdXBkYXRlIGl0LiAgKi8KKworICBhdXRvIGlubGluZSByZWdfZXJyY29kZV90CisgIF9fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpCisgIGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCBtYmNzZXQsIHJhbmdlX2FsbG9jLCBzdGFydF9lbGVtLCBlbmRfZWxlbSkKKwkgcmVfY2hhcnNldF90ICptYmNzZXQ7CisJIGludCAqcmFuZ2VfYWxsb2M7CisJIGJpdHNldF90IHNiY3NldDsKKwkgYnJhY2tldF9lbGVtX3QgKnN0YXJ0X2VsZW0sICplbmRfZWxlbTsKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY2g7CisgICAgICB1aW50MzJfdCBzdGFydF9jb2xsc2VxOworICAgICAgdWludDMyX3QgZW5kX2NvbGxzZXE7CisKKyAgICAgIC8qIEVxdWl2YWxlbmNlIENsYXNzZXMgYW5kIENoYXJhY3RlciBDbGFzc2VzIGNhbid0IGJlIGEgcmFuZ2UKKwkgc3RhcnQvZW5kLiAgKi8KKyAgICAgIGlmIChCRSAoc3RhcnRfZWxlbS0+dHlwZSA9PSBFUVVJVl9DTEFTUyB8fCBzdGFydF9lbGVtLT50eXBlID09IENIQVJfQ0xBU1MKKwkgICAgICB8fCBlbmRfZWxlbS0+dHlwZSA9PSBFUVVJVl9DTEFTUyB8fCBlbmRfZWxlbS0+dHlwZSA9PSBDSEFSX0NMQVNTLAorCSAgICAgIDApKQorCXJldHVybiBSRUdfRVJBTkdFOworCisgICAgICBzdGFydF9jb2xsc2VxID0gbG9va3VwX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoc3RhcnRfZWxlbSk7CisgICAgICBlbmRfY29sbHNlcSA9IGxvb2t1cF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGVuZF9lbGVtKTsKKyAgICAgIC8qIENoZWNrIHN0YXJ0L2VuZCBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWVzLiAgKi8KKyAgICAgIGlmIChCRSAoc3RhcnRfY29sbHNlcSA9PSBVSU5UX01BWCB8fCBlbmRfY29sbHNlcSA9PSBVSU5UX01BWCwgMCkpCisJcmV0dXJuIFJFR19FQ09MTEFURTsKKyAgICAgIGlmIChCRSAoKHN5bnRheCAmIFJFX05PX0VNUFRZX1JBTkdFUykgJiYgc3RhcnRfY29sbHNlcSA+IGVuZF9jb2xsc2VxLCAwKSkKKwlyZXR1cm4gUkVHX0VSQU5HRTsKKworICAgICAgLyogR290IHZhbGlkIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZXMsIGFkZCB0aGVtIGFzIGEgbmV3IGVudHJ5LgorCSBIb3dldmVyLCBpZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBlbGVtZW50cywgYW5kIHRoZSBjaGFyYWN0ZXIgc2V0CisJIGlzIHNpbmdsZSBieXRlLCB0aGUgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHNldCB0aGF0IHdlCisJIGJ1aWxkIGJlbG93IHN1ZmZpY2VzLiAqLworICAgICAgaWYgKG5ydWxlcyA+IDAgfHwgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwl7CisJICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisJICBpZiAoQkUgKCpyYW5nZV9hbGxvYyA9PSBtYmNzZXQtPm5yYW5nZXMsIDApKQorCSAgICB7CisJICAgICAgLyogVGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSwgbmVlZCByZWFsbG9jLiAgKi8KKwkgICAgICB1aW50MzJfdCAqbmV3X2FycmF5X3N0YXJ0OworCSAgICAgIHVpbnQzMl90ICpuZXdfYXJyYXlfZW5kOworCSAgICAgIGludCBuZXdfbnJhbmdlczsKKworCSAgICAgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5ucmFuZ2VzIGlzIDAuICAqLworCSAgICAgIG5ld19ucmFuZ2VzID0gMiAqIG1iY3NldC0+bnJhbmdlcyArIDE7CisJICAgICAgbmV3X2FycmF5X3N0YXJ0ID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9zdGFydHMsIHVpbnQzMl90LAorCQkJCQkgICAgbmV3X25yYW5nZXMpOworCSAgICAgIG5ld19hcnJheV9lbmQgPSByZV9yZWFsbG9jIChtYmNzZXQtPnJhbmdlX2VuZHMsIHVpbnQzMl90LAorCQkJCQkgIG5ld19ucmFuZ2VzKTsKKworCSAgICAgIGlmIChCRSAobmV3X2FycmF5X3N0YXJ0ID09IE5VTEwgfHwgbmV3X2FycmF5X2VuZCA9PSBOVUxMLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisKKwkgICAgICBtYmNzZXQtPnJhbmdlX3N0YXJ0cyA9IG5ld19hcnJheV9zdGFydDsKKwkgICAgICBtYmNzZXQtPnJhbmdlX2VuZHMgPSBuZXdfYXJyYXlfZW5kOworCSAgICAgICpyYW5nZV9hbGxvYyA9IG5ld19ucmFuZ2VzOworCSAgICB9CisKKwkgIG1iY3NldC0+cmFuZ2Vfc3RhcnRzW21iY3NldC0+bnJhbmdlc10gPSBzdGFydF9jb2xsc2VxOworCSAgbWJjc2V0LT5yYW5nZV9lbmRzW21iY3NldC0+bnJhbmdlcysrXSA9IGVuZF9jb2xsc2VxOworCX0KKworICAgICAgLyogQnVpbGQgdGhlIHRhYmxlIGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKyAgICAgIGZvciAoY2ggPSAwOyBjaCA8IFNCQ19NQVg7IGNoKyspCisJeworCSAgdWludDMyX3QgY2hfY29sbHNlcTsKKwkgIC8qCisJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorCSAgKi8KKwkgIGlmIChucnVsZXMgPT0gMCkKKwkgICAgY2hfY29sbHNlcSA9IGNvbGxzZXFtYltjaF07CisJICBlbHNlCisJICAgIGNoX2NvbGxzZXEgPSBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIF9fYnRvd2MgKGNoKSk7CisJICBpZiAoc3RhcnRfY29sbHNlcSA8PSBjaF9jb2xsc2VxICYmIGNoX2NvbGxzZXEgPD0gZW5kX2NvbGxzZXEpCisJICAgIGJpdHNldF9zZXQgKHNiY3NldCwgY2gpOworCX0KKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisKKyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJQkMgZW52aXJvbm1lbnQuCisgICAgIEJ1aWxkIHRoZSBjb2xsYXRpbmcgZWxlbWVudCB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBDT0xMX1NZTV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5jb2xsX3N5bSwgaXMgYQorICAgICBwb2ludGVyIGFyZ3VtZW50IHNpbmNlIHdlIG1heSB1cGRhdGUgaXQuICAqLworCisgIGF1dG8gaW5saW5lIHJlZ19lcnJjb2RlX3QKKyAgX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkKKyAgYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoc2Jjc2V0LCBtYmNzZXQsIGNvbGxfc3ltX2FsbG9jLCBuYW1lKQorCSByZV9jaGFyc2V0X3QgKm1iY3NldDsKKwkgaW50ICpjb2xsX3N5bV9hbGxvYzsKKwkgYml0c2V0X3Qgc2Jjc2V0OworCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lOworICAgIHsKKyAgICAgIGludDMyX3QgZWxlbSwgaWR4OworICAgICAgc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKTsKKyAgICAgIGlmIChucnVsZXMgIT0gMCkKKwl7CisJICBlbGVtID0gc2Vla19jb2xsYXRpbmdfc3ltYm9sX2VudHJ5IChuYW1lLCBuYW1lX2xlbik7CisJICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKwkgICAgeworCSAgICAgIC8qIFdlIGZvdW5kIHRoZSBlbnRyeS4gICovCisJICAgICAgaWR4ID0gc3ltYl90YWJsZVsyICogZWxlbSArIDFdOworCSAgICAgIC8qIFNraXAgdGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJICAgICAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworCSAgICB9CisJICBlbHNlIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSAwICYmIG5hbWVfbGVuID09IDEpCisJICAgIHsKKwkgICAgICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIsIHRyZWF0IGl0IGFzIGEgbm9ybWFsCisJCSBjaGFyYWN0ZXIuICAqLworCSAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgbmFtZVswXSk7CisJICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBSRUdfRUNPTExBVEU7CisKKwkgIC8qIEdvdCB2YWxpZCBjb2xsYXRpb24gc2VxdWVuY2UsIGFkZCBpdCBhcyBhIG5ldyBlbnRyeS4gICovCisJICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisJICBpZiAoQkUgKCpjb2xsX3N5bV9hbGxvYyA9PSBtYmNzZXQtPm5jb2xsX3N5bXMsIDApKQorCSAgICB7CisJICAgICAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisJICAgICAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5jb2xsX3N5bXMgaXMgMC4gICovCisJICAgICAgaW50IG5ld19jb2xsX3N5bV9hbGxvYyA9IDIgKiBtYmNzZXQtPm5jb2xsX3N5bXMgKyAxOworCSAgICAgIC8qIFVzZSByZWFsbG9jIHNpbmNlIG1iY3NldC0+Y29sbF9zeW1zIGlzIE5VTEwKKwkJIGlmICphbGxvYyA9PSAwLiAgKi8KKwkgICAgICBpbnQzMl90ICpuZXdfY29sbF9zeW1zID0gcmVfcmVhbGxvYyAobWJjc2V0LT5jb2xsX3N5bXMsIGludDMyX3QsCisJCQkJCQkgICBuZXdfY29sbF9zeW1fYWxsb2MpOworCSAgICAgIGlmIChCRSAobmV3X2NvbGxfc3ltcyA9PSBOVUxMLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgICAgbWJjc2V0LT5jb2xsX3N5bXMgPSBuZXdfY29sbF9zeW1zOworCSAgICAgICpjb2xsX3N5bV9hbGxvYyA9IG5ld19jb2xsX3N5bV9hbGxvYzsKKwkgICAgfQorCSAgbWJjc2V0LT5jb2xsX3N5bXNbbWJjc2V0LT5uY29sbF9zeW1zKytdID0gaWR4OworCSAgcmV0dXJuIFJFR19OT0VSUk9SOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoQkUgKG5hbWVfbGVuICE9IDEsIDApKQorCSAgICByZXR1cm4gUkVHX0VDT0xMQVRFOworCSAgZWxzZQorCSAgICB7CisJICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBuYW1lWzBdKTsKKwkgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyAgcmVfdG9rZW5fdCBicl90b2tlbjsKKyAgcmVfYml0c2V0X3B0cl90IHNiY3NldDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICByZV9jaGFyc2V0X3QgKm1iY3NldDsKKyAgaW50IGNvbGxfc3ltX2FsbG9jID0gMCwgcmFuZ2VfYWxsb2MgPSAwLCBtYmNoYXJfYWxsb2MgPSAwOworICBpbnQgZXF1aXZfY2xhc3NfYWxsb2MgPSAwLCBjaGFyX2NsYXNzX2FsbG9jID0gMDsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgaW50IG5vbl9tYXRjaCA9IDA7CisgIGJpbl90cmVlX3QgKndvcmtfdHJlZTsKKyAgaW50IHRva2VuX2xlbjsKKyAgaW50IGZpcnN0X3JvdW5kID0gMTsKKyNpZmRlZiBfTElCQworICBjb2xsc2VxbWIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICBpZiAobnJ1bGVzKQorICAgIHsKKyAgICAgIC8qCisgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCisgICAgICAqLworICAgICAgY29sbHNlcXdjID0gX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisgICAgICB0YWJsZV9zaXplID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQik7CisgICAgICBzeW1iX3RhYmxlID0gKGNvbnN0IGludDMyX3QgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQkgIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQik7CisgICAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJICAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKyAgICB9CisjZW5kaWYKKyAgc2Jjc2V0ID0gKHJlX2JpdHNldF9wdHJfdCkgY2FsbG9jIChzaXplb2YgKGJpdHNldF90KSwgMSk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgbWJjc2V0ID0gKHJlX2NoYXJzZXRfdCAqKSBjYWxsb2MgKHNpemVvZiAocmVfY2hhcnNldF90KSwgMSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMIHx8IG1iY3NldCA9PSBOVUxMLCAwKSkKKyNlbHNlCisgIGlmIChCRSAoc2Jjc2V0ID09IE5VTEwsIDApKQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgeworICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgdG9rZW5fbGVuID0gcGVla190b2tlbl9icmFja2V0ICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisgICAgeworICAgICAgKmVyciA9IFJFR19CQURQQVQ7CisgICAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworICAgIH0KKyAgaWYgKHRva2VuLT50eXBlID09IE9QX05PTl9NQVRDSF9MSVNUKQorICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbWJjc2V0LT5ub25fbWF0Y2ggPSAxOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgbm9uX21hdGNoID0gMTsKKyAgICAgIGlmIChzeW50YXggJiBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpCisJYml0c2V0X3NldCAoc2Jjc2V0LCAnXG4nKTsKKyAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgYSB0b2tlbi4gICovCisgICAgICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisgICAgICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisJeworCSAgKmVyciA9IFJFR19CQURQQVQ7CisJICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCX0KKyAgICB9CisKKyAgLyogV2UgdHJlYXQgdGhlIGZpcnN0ICddJyBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIuICAqLworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKyAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBicmFja2V0X2VsZW1fdCBzdGFydF9lbGVtLCBlbmRfZWxlbTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgc3RhcnRfbmFtZV9idWZbQlJBQ0tFVF9OQU1FX0JVRl9TSVpFXTsKKyAgICAgIHVuc2lnbmVkIGNoYXIgZW5kX25hbWVfYnVmW0JSQUNLRVRfTkFNRV9CVUZfU0laRV07CisgICAgICByZWdfZXJyY29kZV90IHJldDsKKyAgICAgIGludCB0b2tlbl9sZW4yID0gMCwgaXNfcmFuZ2VfZXhwID0gMDsKKyAgICAgIHJlX3Rva2VuX3QgdG9rZW4yOworCisgICAgICBzdGFydF9lbGVtLm9wci5uYW1lID0gc3RhcnRfbmFtZV9idWY7CisgICAgICByZXQgPSBwYXJzZV9icmFja2V0X2VsZW1lbnQgKCZzdGFydF9lbGVtLCByZWdleHAsIHRva2VuLCB0b2tlbl9sZW4sIGRmYSwKKwkJCQkgICBzeW50YXgsIGZpcnN0X3JvdW5kKTsKKyAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwl7CisJICAqZXJyID0gcmV0OworCSAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwl9CisgICAgICBmaXJzdF9yb3VuZCA9IDA7CisKKyAgICAgIC8qIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV4dCB0b2tlbi4gIFdlIG5lZWQgaXQgaW4gYW55IGNhc2UuICAqLworICAgICAgdG9rZW5fbGVuID0gcGVla190b2tlbl9icmFja2V0ICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworCisgICAgICAvKiBEbyBub3QgY2hlY2sgZm9yIHJhbmdlcyBpZiB3ZSBrbm93IHRoZXkgYXJlIG5vdCBhbGxvd2VkLiAgKi8KKyAgICAgIGlmIChzdGFydF9lbGVtLnR5cGUgIT0gQ0hBUl9DTEFTUyAmJiBzdGFydF9lbGVtLnR5cGUgIT0gRVFVSVZfQ0xBU1MpCisJeworCSAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19FQlJBQ0s7CisJICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgfQorCSAgaWYgKHRva2VuLT50eXBlID09IE9QX0NIQVJTRVRfUkFOR0UpCisJICAgIHsKKwkgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCB0b2tlbl9sZW4pOyAvKiBTa2lwICctJy4gICovCisJICAgICAgdG9rZW5fbGVuMiA9IHBlZWtfdG9rZW5fYnJhY2tldCAoJnRva2VuMiwgcmVnZXhwLCBzeW50YXgpOworCSAgICAgIGlmIChCRSAodG9rZW4yLnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKwkJeworCQkgICplcnIgPSBSRUdfRUJSQUNLOworCQkgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJCX0KKwkgICAgICBpZiAodG9rZW4yLnR5cGUgPT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKwkJeworCQkgIC8qIFdlIHRyZWF0IHRoZSBsYXN0ICctJyBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIuICAqLworCQkgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIC10b2tlbl9sZW4pOworCQkgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCQl9CisJICAgICAgZWxzZQorCQlpc19yYW5nZV9leHAgPSAxOworCSAgICB9CisJfQorCisgICAgICBpZiAoaXNfcmFuZ2VfZXhwID09IDEpCisJeworCSAgZW5kX2VsZW0ub3ByLm5hbWUgPSBlbmRfbmFtZV9idWY7CisJICByZXQgPSBwYXJzZV9icmFja2V0X2VsZW1lbnQgKCZlbmRfZWxlbSwgcmVnZXhwLCAmdG9rZW4yLCB0b2tlbl9sZW4yLAorCQkJCSAgICAgICBkZmEsIHN5bnRheCwgMSk7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICAqZXJyID0gcmV0OworCSAgICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJICAgIH0KKworCSAgdG9rZW5fbGVuID0gcGVla190b2tlbl9icmFja2V0ICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworCisjaWZkZWYgX0xJQkMKKwkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwgbWJjc2V0LCAmcmFuZ2VfYWxsb2MsCisJCQkJICAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyNlbHNlCisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCisJICAqZXJyID0gYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsCisJCQkJICBkZmEtPm1iX2N1cl9tYXggPiAxID8gbWJjc2V0IDogTlVMTCwKKwkJCQkgICZyYW5nZV9hbGxvYywgJnN0YXJ0X2VsZW0sICZlbmRfZWxlbSk7CisjIGVsc2UKKwkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwgJnN0YXJ0X2VsZW0sICZlbmRfZWxlbSk7CisjIGVuZGlmCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJfQorICAgICAgZWxzZQorCXsKKwkgIHN3aXRjaCAoc3RhcnRfZWxlbS50eXBlKQorCSAgICB7CisJICAgIGNhc2UgU0JfQ0hBUjoKKwkgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIHN0YXJ0X2VsZW0ub3ByLmNoKTsKKwkgICAgICBicmVhazsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICBjYXNlIE1CX0NIQVI6CisJICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgYXJyYXkgaGFzIGVub3VnaCBzcGFjZS4gICovCisJICAgICAgaWYgKEJFIChtYmNoYXJfYWxsb2MgPT0gbWJjc2V0LT5ubWJjaGFycywgMCkpCisJCXsKKwkJICB3Y2hhcl90ICpuZXdfbWJjaGFyczsKKwkJICAvKiBOb3QgZW5vdWdoLCByZWFsbG9jIGl0LiAgKi8KKwkJICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bm1iY2hhcnMgaXMgMC4gICovCisJCSAgbWJjaGFyX2FsbG9jID0gMiAqIG1iY3NldC0+bm1iY2hhcnMgKyAxOworCQkgIC8qIFVzZSByZWFsbG9jIHNpbmNlIGFycmF5IGlzIE5VTEwgaWYgKmFsbG9jID09IDAuICAqLworCQkgIG5ld19tYmNoYXJzID0gcmVfcmVhbGxvYyAobWJjc2V0LT5tYmNoYXJzLCB3Y2hhcl90LAorCQkJCQkgICAgbWJjaGFyX2FsbG9jKTsKKwkJICBpZiAoQkUgKG5ld19tYmNoYXJzID09IE5VTEwsIDApKQorCQkgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U7CisJCSAgbWJjc2V0LT5tYmNoYXJzID0gbmV3X21iY2hhcnM7CisJCX0KKwkgICAgICBtYmNzZXQtPm1iY2hhcnNbbWJjc2V0LT5ubWJjaGFycysrXSA9IHN0YXJ0X2VsZW0ub3ByLndjaDsKKwkgICAgICBicmVhazsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAgICBjYXNlIEVRVUlWX0NMQVNTOgorCSAgICAgICplcnIgPSBidWlsZF9lcXVpdl9jbGFzcyAoc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkJCW1iY3NldCwgJmVxdWl2X2NsYXNzX2FsbG9jLAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJCQkJCXN0YXJ0X2VsZW0ub3ByLm5hbWUpOworCSAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgQ09MTF9TWU06CisJICAgICAgKmVyciA9IGJ1aWxkX2NvbGxhdGluZ19zeW1ib2wgKHNiY3NldCwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCQkJCQkgICAgIG1iY3NldCwgJmNvbGxfc3ltX2FsbG9jLAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJCQkJCSAgICAgc3RhcnRfZWxlbS5vcHIubmFtZSk7CisJICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBDSEFSX0NMQVNTOgorCSAgICAgICplcnIgPSBidWlsZF9jaGFyY2xhc3MgKHJlZ2V4cC0+dHJhbnMsIHNiY3NldCwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCQkJCSAgICAgIG1iY3NldCwgJmNoYXJfY2xhc3NfYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCQkgICAgICAoY29uc3QgY2hhciAqKSBzdGFydF9lbGVtLm9wci5uYW1lLCBzeW50YXgpOworCSAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJICAgICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJICAgICAgYXNzZXJ0ICgwKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VCUkFDSzsKKwkgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJfQorICAgICAgaWYgKHRva2VuLT50eXBlID09IE9QX0NMT1NFX0JSQUNLRVQpCisJYnJlYWs7CisgICAgfQorCisgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgYSB0b2tlbi4gICovCisKKyAgLyogSWYgaXQgaXMgbm9uLW1hdGNoaW5nIGxpc3QuICAqLworICBpZiAobm9uX21hdGNoKQorICAgIGJpdHNldF9ub3QgKHNiY3NldCk7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBFbnN1cmUgb25seSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzIGFyZSBzZXQuICAqLworICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKyAgICBiaXRzZXRfbWFzayAoc2Jjc2V0LCBkZmEtPnNiX2NoYXIpOworCisgIGlmIChtYmNzZXQtPm5tYmNoYXJzIHx8IG1iY3NldC0+bmNvbGxfc3ltcyB8fCBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzCisgICAgICB8fCBtYmNzZXQtPm5yYW5nZXMgfHwgKGRmYS0+bWJfY3VyX21heCA+IDEgJiYgKG1iY3NldC0+bmNoYXJfY2xhc3NlcworCQkJCQkJICAgICB8fCBtYmNzZXQtPm5vbl9tYXRjaCkpKQorICAgIHsKKyAgICAgIGJpbl90cmVlX3QgKm1iY190cmVlOworICAgICAgaW50IHNiY19pZHg7CisgICAgICAvKiBCdWlsZCBhIHRyZWUgZm9yIGNvbXBsZXggYnJhY2tldC4gICovCisgICAgICBkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgIGJyX3Rva2VuLnR5cGUgPSBDT01QTEVYX0JSQUNLRVQ7CisgICAgICBicl90b2tlbi5vcHIubWJjc2V0ID0gbWJjc2V0OworICAgICAgbWJjX3RyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworICAgICAgaWYgKEJFIChtYmNfdHJlZSA9PSBOVUxMLCAwKSkKKwlnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKyAgICAgIGZvciAoc2JjX2lkeCA9IDA7IHNiY19pZHggPCBCSVRTRVRfV09SRFM7ICsrc2JjX2lkeCkKKwlpZiAoc2Jjc2V0W3NiY19pZHhdKQorCSAgYnJlYWs7CisgICAgICAvKiBJZiB0aGVyZSBhcmUgbm8gYml0cyBzZXQgaW4gc2Jjc2V0LCB0aGVyZSBpcyBubyBwb2ludAorCSBvZiBoYXZpbmcgYm90aCBTSU1QTEVfQlJBQ0tFVCBhbmQgQ09NUExFWF9CUkFDS0VULiAgKi8KKyAgICAgIGlmIChzYmNfaWR4IDwgQklUU0VUX1dPUkRTKQorCXsKKwkgIC8qIEJ1aWxkIGEgdHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLworCSAgYnJfdG9rZW4udHlwZSA9IFNJTVBMRV9CUkFDS0VUOworCSAgYnJfdG9rZW4ub3ByLnNiY3NldCA9IHNiY3NldDsKKwkgIHdvcmtfdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisJICBpZiAoQkUgKHdvcmtfdHJlZSA9PSBOVUxMLCAwKSkKKwkgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U7CisKKwkgIC8qIFRoZW4gam9pbiB0aGVtIGJ5IEFMVCBub2RlLiAgKi8KKwkgIHdvcmtfdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHdvcmtfdHJlZSwgbWJjX3RyZWUsIE9QX0FMVCk7CisJICBpZiAoQkUgKHdvcmtfdHJlZSA9PSBOVUxMLCAwKSkKKwkgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHJlX2ZyZWUgKHNiY3NldCk7CisJICB3b3JrX3RyZWUgPSBtYmNfdHJlZTsKKwl9CisgICAgfQorICBlbHNlCisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBmcmVlX2NoYXJzZXQgKG1iY3NldCk7CisjZW5kaWYKKyAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLworICAgICAgYnJfdG9rZW4udHlwZSA9IFNJTVBMRV9CUkFDS0VUOworICAgICAgYnJfdG9rZW4ub3ByLnNiY3NldCA9IHNiY3NldDsKKyAgICAgIHdvcmtfdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgICAgICBpZiAoQkUgKHdvcmtfdHJlZSA9PSBOVUxMLCAwKSkKKwlnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKyAgICB9CisgIHJldHVybiB3b3JrX3RyZWU7CisKKyBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U6CisgICplcnIgPSBSRUdfRVNQQUNFOworIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOgorICByZV9mcmVlIChzYmNzZXQpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGZyZWVfY2hhcnNldCAobWJjc2V0KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICByZXR1cm4gTlVMTDsKK30KKworLyogUGFyc2UgYW4gZWxlbWVudCBpbiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3BhcnNlX2JyYWNrZXRfZWxlbWVudCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisJCSAgICAgICByZV90b2tlbl90ICp0b2tlbiwgaW50IHRva2VuX2xlbiwgcmVfZGZhX3QgKmRmYSwKKwkJICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBhY2NlcHRfaHlwaGVuKQoreworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGludCBjdXJfY2hhcl9zaXplOworICBjdXJfY2hhcl9zaXplID0gcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAocmVnZXhwLCByZV9zdHJpbmdfY3VyX2lkeCAocmVnZXhwKSk7CisgIGlmIChjdXJfY2hhcl9zaXplID4gMSkKKyAgICB7CisgICAgICBlbGVtLT50eXBlID0gTUJfQ0hBUjsKKyAgICAgIGVsZW0tPm9wci53Y2ggPSByZV9zdHJpbmdfd2NoYXJfYXQgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpOworICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgY3VyX2NoYXJfc2l6ZSk7CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgYSB0b2tlbi4gICovCisgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NPTExfRUxFTSB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NIQVJfQ0xBU1MKKyAgICAgIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fRVFVSVZfQ0xBU1MpCisgICAgcmV0dXJuIHBhcnNlX2JyYWNrZXRfc3ltYm9sIChlbGVtLCByZWdleHAsIHRva2VuKTsKKyAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBPUF9DSEFSU0VUX1JBTkdFLCAwKSAmJiAhYWNjZXB0X2h5cGhlbikKKyAgICB7CisgICAgICAvKiBBICctJyBtdXN0IG9ubHkgYXBwZWFyIGFzIGFueXRoaW5nIGJ1dCBhIHJhbmdlIGluZGljYXRvciBiZWZvcmUKKwkgdGhlIGNsb3NpbmcgYnJhY2tldC4gIEV2ZXJ5dGhpbmcgZWxzZSBpcyBhbiBlcnJvci4gICovCisgICAgICByZV90b2tlbl90IHRva2VuMjsKKyAgICAgICh2b2lkKSBwZWVrX3Rva2VuX2JyYWNrZXQgKCZ0b2tlbjIsIHJlZ2V4cCwgc3ludGF4KTsKKyAgICAgIGlmICh0b2tlbjIudHlwZSAhPSBPUF9DTE9TRV9CUkFDS0VUKQorCS8qIFRoZSBhY3R1YWwgZXJyb3IgdmFsdWUgaXMgbm90IHN0YW5kYXJkaXplZCBzaW5jZSB0aGlzIHdob2xlCisJICAgY2FzZSBpcyB1bmRlZmluZWQuICBCdXQgRVJBTkdFIG1ha2VzIGdvb2Qgc2Vuc2UuICAqLworCXJldHVybiBSRUdfRVJBTkdFOworICAgIH0KKyAgZWxlbS0+dHlwZSA9IFNCX0NIQVI7CisgIGVsZW0tPm9wci5jaCA9IHRva2VuLT5vcHIuYzsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBQYXJzZSBhIGJyYWNrZXQgc3ltYm9sIGluIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICBCcmFja2V0IHN5bWJvbHMgYXJlCisgICBzdWNoIGFzIFs6PGNoYXJhY3Rlcl9jbGFzcz46XSwgWy48Y29sbGF0aW5nX2VsZW1lbnQ+Ll0sIGFuZAorICAgWz08ZXF1aXZhbGVudF9jbGFzcz49XS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitwYXJzZV9icmFja2V0X3N5bWJvbCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisJCSAgICAgIHJlX3Rva2VuX3QgKnRva2VuKQoreworICB1bnNpZ25lZCBjaGFyIGNoLCBkZWxpbSA9IHRva2VuLT5vcHIuYzsKKyAgaW50IGkgPSAwOworICBpZiAocmVfc3RyaW5nX2VvaShyZWdleHApKQorICAgIHJldHVybiBSRUdfRUJSQUNLOworICBmb3IgKDs7ICsraSkKKyAgICB7CisgICAgICBpZiAoaSA+PSBCUkFDS0VUX05BTUVfQlVGX1NJWkUpCisJcmV0dXJuIFJFR19FQlJBQ0s7CisgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DSEFSX0NMQVNTKQorCWNoID0gcmVfc3RyaW5nX2ZldGNoX2J5dGVfY2FzZSAocmVnZXhwKTsKKyAgICAgIGVsc2UKKwljaCA9IHJlX3N0cmluZ19mZXRjaF9ieXRlIChyZWdleHApOworICAgICAgaWYgKHJlX3N0cmluZ19lb2kocmVnZXhwKSkKKwlyZXR1cm4gUkVHX0VCUkFDSzsKKyAgICAgIGlmIChjaCA9PSBkZWxpbSAmJiByZV9zdHJpbmdfcGVla19ieXRlIChyZWdleHAsIDApID09ICddJykKKwlicmVhazsKKyAgICAgIGVsZW0tPm9wci5uYW1lW2ldID0gY2g7CisgICAgfQorICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCAxKTsKKyAgZWxlbS0+b3ByLm5hbWVbaV0gPSAnXDAnOworICBzd2l0Y2ggKHRva2VuLT50eXBlKQorICAgIHsKKyAgICBjYXNlIE9QX09QRU5fQ09MTF9FTEVNOgorICAgICAgZWxlbS0+dHlwZSA9IENPTExfU1lNOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9PUEVOX0VRVUlWX0NMQVNTOgorICAgICAgZWxlbS0+dHlwZSA9IEVRVUlWX0NMQVNTOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9PUEVOX0NIQVJfQ0xBU1M6CisgICAgICBlbGVtLT50eXBlID0gQ0hBUl9DTEFTUzsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworICAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwLgorICAgICBCdWlsZCB0aGUgZXF1aXZhbGVuY2UgY2xhc3Mgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KKyAgICAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KKyAgICAgRVFVSVZfQ0xBU1NfQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+ZXF1aXZfY2xhc3NlcywKKyAgICAgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbmNlIHdlIG1heSB1cGRhdGUgaXQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCitidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCByZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJICAgaW50ICplcXVpdl9jbGFzc19hbGxvYywgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkKKyNlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyNpZmRlZiBfTElCQworICB1aW50MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICBpZiAobnJ1bGVzICE9IDApCisgICAgeworICAgICAgY29uc3QgaW50MzJfdCAqdGFibGUsICppbmRpcmVjdDsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHMsICpleHRyYSwgKmNwOworICAgICAgdW5zaWduZWQgY2hhciBjaGFyX2J1ZlsyXTsKKyAgICAgIGludDMyX3QgaWR4MSwgaWR4MjsKKyAgICAgIHVuc2lnbmVkIGludCBjaDsKKyAgICAgIHNpemVfdCBsZW47CisgICAgICAvKiBUaGlzICNpbmNsdWRlIGRlZmluZXMgYSBsb2NhbCBmdW5jdGlvbiEgICovCisjIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KKyAgICAgIC8qIENhbGN1bGF0ZSB0aGUgaW5kZXggZm9yIGVxdWl2YWxlbmNlIGNsYXNzLiAgKi8KKyAgICAgIGNwID0gbmFtZTsKKyAgICAgIHRhYmxlID0gKGNvbnN0IGludDMyX3QgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFTUIpOworICAgICAgd2VpZ2h0cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkgICAgICAgX05MX0NPTExBVEVfV0VJR0hUTUIpOworICAgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKwkJCQkJCSAgIF9OTF9DT0xMQVRFX0VYVFJBTUIpOworICAgICAgaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKwkJCQkJCV9OTF9DT0xMQVRFX0lORElSRUNUTUIpOworICAgICAgaWR4MSA9IGZpbmRpZHggKCZjcCk7CisgICAgICBpZiAoQkUgKGlkeDEgPT0gMCB8fCBjcCA8IG5hbWUgKyBzdHJsZW4gKChjb25zdCBjaGFyICopIG5hbWUpLCAwKSkKKwkvKiBUaGlzIGlzbid0IGEgdmFsaWQgY2hhcmFjdGVyLiAgKi8KKwlyZXR1cm4gUkVHX0VDT0xMQVRFOworCisgICAgICAvKiBCdWlsZCBzaW5nbGUgYnl0ZSBtYXRjaGluZyB0YWJsZSBmb3IgdGhpcyBlcXVpdmFsZW5jZSBjbGFzcy4gICovCisgICAgICBjaGFyX2J1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAnXDAnOworICAgICAgbGVuID0gd2VpZ2h0c1tpZHgxICYgMHhmZmZmZmZdOworICAgICAgZm9yIChjaCA9IDA7IGNoIDwgU0JDX01BWDsgKytjaCkKKwl7CisJICBjaGFyX2J1ZlswXSA9IGNoOworCSAgY3AgPSBjaGFyX2J1ZjsKKwkgIGlkeDIgPSBmaW5kaWR4ICgmY3ApOworLyoKKwkgIGlkeDIgPSB0YWJsZVtjaF07CisqLworCSAgaWYgKGlkeDIgPT0gMCkKKwkgICAgLyogVGhpcyBpc24ndCBhIHZhbGlkIGNoYXJhY3Rlci4gICovCisJICAgIGNvbnRpbnVlOworCSAgLyogQ29tcGFyZSBvbmx5IGlmIHRoZSBsZW5ndGggbWF0Y2hlcyBhbmQgdGhlIGNvbGxhdGlvbiBydWxlCisJICAgICBpbmRleCBpcyB0aGUgc2FtZS4gICovCisJICBpZiAobGVuID09IHdlaWdodHNbaWR4MiAmIDB4ZmZmZmZmXSAmJiAoaWR4MSA+PiAyNCkgPT0gKGlkeDIgPj4gMjQpKQorCSAgICB7CisJICAgICAgaW50IGNudCA9IDA7CisKKwkgICAgICB3aGlsZSAoY250IDw9IGxlbiAmJgorCQkgICAgIHdlaWdodHNbKGlkeDEgJiAweGZmZmZmZikgKyAxICsgY250XQorCQkgICAgID09IHdlaWdodHNbKGlkeDIgJiAweGZmZmZmZikgKyAxICsgY250XSkKKwkJKytjbnQ7CisKKwkgICAgICBpZiAoY250ID4gbGVuKQorCQliaXRzZXRfc2V0IChzYmNzZXQsIGNoKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGFycmF5IGhhcyBlbm91Z2ggc3BhY2UuICAqLworICAgICAgaWYgKEJFICgqZXF1aXZfY2xhc3NfYWxsb2MgPT0gbWJjc2V0LT5uZXF1aXZfY2xhc3NlcywgMCkpCisJeworCSAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisJICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bmVxdWl2X2NsYXNzZXMgaXMgMC4gICovCisJICBpbnQgbmV3X2VxdWl2X2NsYXNzX2FsbG9jID0gMiAqIG1iY3NldC0+bmVxdWl2X2NsYXNzZXMgKyAxOworCSAgLyogVXNlIHJlYWxsb2Mgc2luY2UgdGhlIGFycmF5IGlzIE5VTEwgaWYgKmFsbG9jID09IDAuICAqLworCSAgaW50MzJfdCAqbmV3X2VxdWl2X2NsYXNzZXMgPSByZV9yZWFsbG9jIChtYmNzZXQtPmVxdWl2X2NsYXNzZXMsCisJCQkJCQkgICBpbnQzMl90LAorCQkJCQkJICAgbmV3X2VxdWl2X2NsYXNzX2FsbG9jKTsKKwkgIGlmIChCRSAobmV3X2VxdWl2X2NsYXNzZXMgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgbWJjc2V0LT5lcXVpdl9jbGFzc2VzID0gbmV3X2VxdWl2X2NsYXNzZXM7CisJICAqZXF1aXZfY2xhc3NfYWxsb2MgPSBuZXdfZXF1aXZfY2xhc3NfYWxsb2M7CisJfQorICAgICAgbWJjc2V0LT5lcXVpdl9jbGFzc2VzW21iY3NldC0+bmVxdWl2X2NsYXNzZXMrK10gPSBpZHgxOworICAgIH0KKyAgZWxzZQorI2VuZGlmIC8qIF9MSUJDICovCisgICAgeworICAgICAgaWYgKEJFIChzdHJsZW4gKChjb25zdCBjaGFyICopIG5hbWUpICE9IDEsIDApKQorCXJldHVybiBSRUdfRUNPTExBVEU7CisgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsICpuYW1lKTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworICAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwLgorICAgICBCdWlsZCB0aGUgY2hhcmFjdGVyIGNsYXNzIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IE5BTUUuCisgICAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICAgIENIQVJfQ0xBU1NfQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+Y2hhcl9jbGFzc2VzLAorICAgICBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGJpdHNldF90IHNiY3NldCwKKwkJIHJlX2NoYXJzZXRfdCAqbWJjc2V0LCBpbnQgKmNoYXJfY2xhc3NfYWxsb2MsCisJCSBjb25zdCBjaGFyICpjbGFzc19uYW1lLCByZWdfc3ludGF4X3Qgc3ludGF4KQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisJCSBjb25zdCBjaGFyICpjbGFzc19uYW1lLCByZWdfc3ludGF4X3Qgc3ludGF4KQorI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworeworICBpbnQgaTsKKworICAvKiBJbiBjYXNlIG9mIFJFR19JQ0FTRSAidXBwZXIiIGFuZCAibG93ZXIiIG1hdGNoIHRoZSBib3RoIG9mCisgICAgIHVwcGVyIGFuZCBsb3dlciBjYXNlcy4gICovCisgIGlmICgoc3ludGF4ICYgUkVfSUNBU0UpCisgICAgICAmJiAoc3RyY21wIChjbGFzc19uYW1lLCAidXBwZXIiKSA9PSAwIHx8IHN0cmNtcCAoY2xhc3NfbmFtZSwgImxvd2VyIikgPT0gMCkpCisgICAgY2xhc3NfbmFtZSA9ICJhbHBoYSI7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisgIGlmIChCRSAoKmNoYXJfY2xhc3NfYWxsb2MgPT0gbWJjc2V0LT5uY2hhcl9jbGFzc2VzLCAwKSkKKyAgICB7CisgICAgICAvKiBOb3QgZW5vdWdoLCByZWFsbG9jIGl0LiAgKi8KKyAgICAgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5uY2hhcl9jbGFzc2VzIGlzIDAuICAqLworICAgICAgaW50IG5ld19jaGFyX2NsYXNzX2FsbG9jID0gMiAqIG1iY3NldC0+bmNoYXJfY2xhc3NlcyArIDE7CisgICAgICAvKiBVc2UgcmVhbGxvYyBzaW5jZSBhcnJheSBpcyBOVUxMIGlmICphbGxvYyA9PSAwLiAgKi8KKyAgICAgIHdjdHlwZV90ICpuZXdfY2hhcl9jbGFzc2VzID0gcmVfcmVhbGxvYyAobWJjc2V0LT5jaGFyX2NsYXNzZXMsIHdjdHlwZV90LAorCQkJCQkgICAgICAgbmV3X2NoYXJfY2xhc3NfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfY2hhcl9jbGFzc2VzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgbWJjc2V0LT5jaGFyX2NsYXNzZXMgPSBuZXdfY2hhcl9jbGFzc2VzOworICAgICAgKmNoYXJfY2xhc3NfYWxsb2MgPSBuZXdfY2hhcl9jbGFzc19hbGxvYzsKKyAgICB9CisgIG1iY3NldC0+Y2hhcl9jbGFzc2VzW21iY3NldC0+bmNoYXJfY2xhc3NlcysrXSA9IF9fd2N0eXBlIChjbGFzc19uYW1lKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisjZGVmaW5lIEJVSUxEX0NIQVJDTEFTU19MT09QKGN0eXBlX2Z1bmMpCVwKKyAgZG8gewkJCQkJCVwKKyAgICBpZiAoQkUgKHRyYW5zICE9IE5VTEwsIDApKQkJCVwKKyAgICAgIHsJCQkJCQlcCisJZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkJCVwKKyAgCSAgaWYgKGN0eXBlX2Z1bmMgKGkpKQkJCVwKKwkgICAgYml0c2V0X3NldCAoc2Jjc2V0LCB0cmFuc1tpXSk7CVwKKyAgICAgIH0JCQkJCQlcCisgICAgZWxzZQkJCQkJXAorICAgICAgewkJCQkJCVwKKwlmb3IgKGkgPSAwOyBpIDwgU0JDX01BWDsgKytpKQkJXAorICAJICBpZiAoY3R5cGVfZnVuYyAoaSkpCQkJXAorCSAgICBiaXRzZXRfc2V0IChzYmNzZXQsIGkpOwkJXAorICAgICAgfQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworICBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAiYWxudW0iKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2FsbnVtKTsKKyAgZWxzZSBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAiY250cmwiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2NudHJsKTsKKyAgZWxzZSBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAibG93ZXIiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2xvd2VyKTsKKyAgZWxzZSBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAic3BhY2UiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3NwYWNlKTsKKyAgZWxzZSBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAiYWxwaGEiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2FscGhhKTsKKyAgZWxzZSBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAiZGlnaXQiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2RpZ2l0KTsKKyAgZWxzZSBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAicHJpbnQiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3ByaW50KTsKKyAgZWxzZSBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAidXBwZXIiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3VwcGVyKTsKKyAgZWxzZSBpZiAoc3RyY21wIChjbGFzc19uYW1lLCAiYmxhbmsiKSA9PSAwKQorI2lmbmRlZiBHQVdLCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzYmxhbmspOworI2Vsc2UKKyAgICAvKiBzZWUgY29tbWVudHMgYWJvdmUgKi8KKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNfYmxhbmspOworI2VuZGlmCisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImdyYXBoIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNncmFwaCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInB1bmN0IikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNwdW5jdCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInhkaWdpdCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzeGRpZ2l0KTsKKyAgZWxzZQorICAgIHJldHVybiBSRUdfRUNUWVBFOworCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIGJpbl90cmVlX3QgKgorYnVpbGRfY2hhcmNsYXNzX29wIChyZV9kZmFfdCAqZGZhLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKwkJICAgIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUsCisJCSAgICBjb25zdCBjaGFyICpleHRyYSwgaW50IG5vbl9tYXRjaCwKKwkJICAgIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfYml0c2V0X3B0cl90IHNiY3NldDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICByZV9jaGFyc2V0X3QgKm1iY3NldDsKKyAgaW50IGFsbG9jID0gMDsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJlX3Rva2VuX3QgYnJfdG9rZW47CisgIGJpbl90cmVlX3QgKnRyZWU7CisKKyAgc2Jjc2V0ID0gKHJlX2JpdHNldF9wdHJfdCkgY2FsbG9jIChzaXplb2YgKGJpdHNldF90KSwgMSk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgbWJjc2V0ID0gKHJlX2NoYXJzZXRfdCAqKSBjYWxsb2MgKHNpemVvZiAocmVfY2hhcnNldF90KSwgMSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChCRSAoc2Jjc2V0ID09IE5VTEwgfHwgbWJjc2V0ID09IE5VTEwsIDApKQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIGlmIChCRSAoc2Jjc2V0ID09IE5VTEwsIDApKQorI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIGlmIChub25fbWF0Y2gpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBtYmNzZXQtPm5vbl9tYXRjaCA9IDE7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICAgfQorCisgIC8qIFdlIGRvbid0IGNhcmUgdGhlIHN5bnRheCBpbiB0aGlzIGNhc2UuICAqLworICByZXQgPSBidWlsZF9jaGFyY2xhc3MgKHRyYW5zLCBzYmNzZXQsCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkJCSBtYmNzZXQsICZhbGxvYywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCQkJIGNsYXNzX25hbWUsIDApOworCisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICByZV9mcmVlIChzYmNzZXQpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBmcmVlX2NoYXJzZXQgKG1iY3NldCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgICplcnIgPSByZXQ7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIC8qIFx3IG1hdGNoICdfJyBhbHNvLiAgKi8KKyAgZm9yICg7ICpleHRyYTsgZXh0cmErKykKKyAgICBiaXRzZXRfc2V0IChzYmNzZXQsICpleHRyYSk7CisKKyAgLyogSWYgaXQgaXMgbm9uLW1hdGNoaW5nIGxpc3QuICAqLworICBpZiAobm9uX21hdGNoKQorICAgIGJpdHNldF9ub3QgKHNiY3NldCk7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBFbnN1cmUgb25seSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzIGFyZSBzZXQuICAqLworICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKyAgICBiaXRzZXRfbWFzayAoc2Jjc2V0LCBkZmEtPnNiX2NoYXIpOworI2VuZGlmCisKKyAgLyogQnVpbGQgYSB0cmVlIGZvciBzaW1wbGUgYnJhY2tldC4gICovCisgIGJyX3Rva2VuLnR5cGUgPSBTSU1QTEVfQlJBQ0tFVDsKKyAgYnJfdG9rZW4ub3ByLnNiY3NldCA9IHNiY3NldDsKKyAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKyAgICBnb3RvIGJ1aWxkX3dvcmRfb3BfZXNwYWNlOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgYmluX3RyZWVfdCAqbWJjX3RyZWU7CisgICAgICAvKiBCdWlsZCBhIHRyZWUgZm9yIGNvbXBsZXggYnJhY2tldC4gICovCisgICAgICBicl90b2tlbi50eXBlID0gQ09NUExFWF9CUkFDS0VUOworICAgICAgYnJfdG9rZW4ub3ByLm1iY3NldCA9IG1iY3NldDsKKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgbWJjX3RyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworICAgICAgaWYgKEJFIChtYmNfdHJlZSA9PSBOVUxMLCAwKSkKKwlnb3RvIGJ1aWxkX3dvcmRfb3BfZXNwYWNlOworICAgICAgLyogVGhlbiBqb2luIHRoZW0gYnkgQUxUIG5vZGUuICAqLworICAgICAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIG1iY190cmVlLCBPUF9BTFQpOworICAgICAgaWYgKEJFIChtYmNfdHJlZSAhPSBOVUxMLCAxKSkKKwlyZXR1cm4gdHJlZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmcmVlX2NoYXJzZXQgKG1iY3NldCk7CisgICAgICByZXR1cm4gdHJlZTsKKyAgICB9CisjZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmV0dXJuIHRyZWU7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisKKyBidWlsZF93b3JkX29wX2VzcGFjZToKKyAgcmVfZnJlZSAoc2Jjc2V0KTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBmcmVlX2NoYXJzZXQgKG1iY3NldCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgKmVyciA9IFJFR19FU1BBQ0U7CisgIHJldHVybiBOVUxMOworfQorCisvKiBUaGlzIGlzIGludGVuZGVkIGZvciB0aGUgZXhwcmVzc2lvbnMgbGlrZSAiYXsxLDN9Ii4KKyAgIEZldGNoIGEgbnVtYmVyIGZyb20gYGlucHV0JywgYW5kIHJldHVybiB0aGUgbnVtYmVyLgorICAgUmV0dXJuIC0xLCBpZiB0aGUgbnVtYmVyIGZpZWxkIGlzIGVtcHR5IGxpa2UgInssMX0iLgorICAgUmV0dXJuIC0yLCBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuICAqLworCitzdGF0aWMgaW50CitmZXRjaF9udW1iZXIgKHJlX3N0cmluZ190ICppbnB1dCwgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIGludCBudW0gPSAtMTsKKyAgdW5zaWduZWQgY2hhciBjOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIGlucHV0LCBzeW50YXgpOworICAgICAgYyA9IHRva2VuLT5vcHIuYzsKKyAgICAgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKwlyZXR1cm4gLTI7CisgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfRFVQX05VTSB8fCBjID09ICcsJykKKwlicmVhazsKKyAgICAgIG51bSA9ICgodG9rZW4tPnR5cGUgIT0gQ0hBUkFDVEVSIHx8IGMgPCAnMCcgfHwgJzknIDwgYyB8fCBudW0gPT0gLTIpCisJICAgICA/IC0yIDogKChudW0gPT0gLTEpID8gYyAtICcwJyA6IG51bSAqIDEwICsgYyAtICcwJykpOworICAgICAgbnVtID0gKG51bSA+IFJFX0RVUF9NQVgpID8gLTIgOiBudW07CisgICAgfQorICByZXR1cm4gbnVtOworfQorDAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgdm9pZAorZnJlZV9jaGFyc2V0IChyZV9jaGFyc2V0X3QgKmNzZXQpCit7CisgIHJlX2ZyZWUgKGNzZXQtPm1iY2hhcnMpOworIyBpZmRlZiBfTElCQworICByZV9mcmVlIChjc2V0LT5jb2xsX3N5bXMpOworICByZV9mcmVlIChjc2V0LT5lcXVpdl9jbGFzc2VzKTsKKyAgcmVfZnJlZSAoY3NldC0+cmFuZ2Vfc3RhcnRzKTsKKyAgcmVfZnJlZSAoY3NldC0+cmFuZ2VfZW5kcyk7CisjIGVuZGlmCisgIHJlX2ZyZWUgKGNzZXQtPmNoYXJfY2xhc3Nlcyk7CisgIHJlX2ZyZWUgKGNzZXQpOworfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisMCisvKiBGdW5jdGlvbnMgZm9yIGJpbmFyeSB0cmVlIG9wZXJhdGlvbi4gICovCisKKy8qIENyZWF0ZSBhIHRyZWUgbm9kZS4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2NyZWF0ZV90cmVlIChyZV9kZmFfdCAqZGZhLCBiaW5fdHJlZV90ICpsZWZ0LCBiaW5fdHJlZV90ICpyaWdodCwKKwkgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlKQoreworICByZV90b2tlbl90IHQ7CisgIHQudHlwZSA9IHR5cGU7CisgIHJldHVybiBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBsZWZ0LCByaWdodCwgJnQpOworfQorCitzdGF0aWMgYmluX3RyZWVfdCAqCitjcmVhdGVfdG9rZW5fdHJlZSAocmVfZGZhX3QgKmRmYSwgYmluX3RyZWVfdCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJCSAgIGNvbnN0IHJlX3Rva2VuX3QgKnRva2VuKQoreworICBiaW5fdHJlZV90ICp0cmVlOworICBpZiAoQkUgKGRmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHggPT0gQklOX1RSRUVfU1RPUkFHRV9TSVpFLCAwKSkKKyAgICB7CisgICAgICBiaW5fdHJlZV9zdG9yYWdlX3QgKnN0b3JhZ2UgPSByZV9tYWxsb2MgKGJpbl90cmVlX3N0b3JhZ2VfdCwgMSk7CisKKyAgICAgIGlmIChzdG9yYWdlID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisgICAgICBzdG9yYWdlLT5uZXh0ID0gZGZhLT5zdHJfdHJlZV9zdG9yYWdlOworICAgICAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlID0gc3RvcmFnZTsKKyAgICAgIGRmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHggPSAwOworICAgIH0KKyAgdHJlZSA9ICZkZmEtPnN0cl90cmVlX3N0b3JhZ2UtPmRhdGFbZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lkeCsrXTsKKworICB0cmVlLT5wYXJlbnQgPSBOVUxMOworICB0cmVlLT5sZWZ0ID0gbGVmdDsKKyAgdHJlZS0+cmlnaHQgPSByaWdodDsKKyAgdHJlZS0+dG9rZW4gPSAqdG9rZW47CisgIHRyZWUtPnRva2VuLmR1cGxpY2F0ZWQgPSAwOworICB0cmVlLT50b2tlbi5vcHRfc3ViZXhwID0gMDsKKyAgdHJlZS0+Zmlyc3QgPSBOVUxMOworICB0cmVlLT5uZXh0ID0gTlVMTDsKKyAgdHJlZS0+bm9kZV9pZHggPSAtMTsKKworICBpZiAobGVmdCAhPSBOVUxMKQorICAgIGxlZnQtPnBhcmVudCA9IHRyZWU7CisgIGlmIChyaWdodCAhPSBOVUxMKQorICAgIHJpZ2h0LT5wYXJlbnQgPSB0cmVlOworICByZXR1cm4gdHJlZTsKK30KKworLyogTWFyayB0aGUgdHJlZSBTUkMgYXMgYW4gb3B0aW9uYWwgc3ViZXhwcmVzc2lvbi4KKyAgIFRvIGJlIGNhbGxlZCBmcm9tIHByZW9yZGVyIG9yIHBvc3RvcmRlci4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CittYXJrX29wdF9zdWJleHAgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICBpbnQgaWR4ID0gKGludCkgKGludHB0cl90KSBleHRyYTsKKyAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gU1VCRVhQICYmIG5vZGUtPnRva2VuLm9wci5pZHggPT0gaWR4KQorICAgIG5vZGUtPnRva2VuLm9wdF9zdWJleHAgPSAxOworCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbnNpZGUgTk9ERS4gKi8KKworc3RhdGljIHZvaWQKK2ZyZWVfdG9rZW4gKHJlX3Rva2VuX3QgKm5vZGUpCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUICYmIG5vZGUtPmR1cGxpY2F0ZWQgPT0gMCkKKyAgICBmcmVlX2NoYXJzZXQgKG5vZGUtPm9wci5tYmNzZXQpOworICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICBpZiAobm9kZS0+dHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCAmJiBub2RlLT5kdXBsaWNhdGVkID09IDApCisgICAgICByZV9mcmVlIChub2RlLT5vcHIuc2Jjc2V0KTsKK30KKworLyogV29ya2VyIGZ1bmN0aW9uIGZvciB0cmVlIHdhbGtpbmcuICBGcmVlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGluc2lkZSBOT0RFCisgICBhbmQgaXRzIGNoaWxkcmVuLiAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorZnJlZV90cmVlICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgZnJlZV90b2tlbiAoJm5vZGUtPnRva2VuKTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisKKy8qIER1cGxpY2F0ZSB0aGUgbm9kZSBTUkMsIGFuZCByZXR1cm4gbmV3IG5vZGUuICBUaGlzIGlzIGEgcHJlb3JkZXIKKyAgIHZpc2l0IHNpbWlsYXIgdG8gdGhlIG9uZSBpbXBsZW1lbnRlZCBieSB0aGUgZ2VuZXJpYyB2aXNpdG9yLCBidXQKKyAgIHdlIG5lZWQgbW9yZSBpbmZyYXN0cnVjdHVyZSB0byBtYWludGFpbiB0d28gcGFyYWxsZWwgdHJlZXMgLS0tIHNvLAorICAgaXQncyBlYXNpZXIgdG8gZHVwbGljYXRlLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorZHVwbGljYXRlX3RyZWUgKGNvbnN0IGJpbl90cmVlX3QgKnJvb3QsIHJlX2RmYV90ICpkZmEpCit7CisgIGNvbnN0IGJpbl90cmVlX3QgKm5vZGU7CisgIGJpbl90cmVlX3QgKmR1cF9yb290OworICBiaW5fdHJlZV90ICoqcF9uZXcgPSAmZHVwX3Jvb3QsICpkdXBfbm9kZSA9IHJvb3QtPnBhcmVudDsKKworICBmb3IgKG5vZGUgPSByb290OyA7ICkKKyAgICB7CisgICAgICAvKiBDcmVhdGUgYSBuZXcgdHJlZSBhbmQgbGluayBpdCBiYWNrIHRvIHRoZSBjdXJyZW50IHBhcmVudC4gICovCisgICAgICAqcF9uZXcgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmbm9kZS0+dG9rZW4pOworICAgICAgaWYgKCpwX25ldyA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgICAgKCpwX25ldyktPnBhcmVudCA9IGR1cF9ub2RlOworICAgICAgKCpwX25ldyktPnRva2VuLmR1cGxpY2F0ZWQgPSAxOworICAgICAgZHVwX25vZGUgPSAqcF9uZXc7CisKKyAgICAgIC8qIEdvIHRvIHRoZSBsZWZ0IG5vZGUsIG9yIHVwIGFuZCB0byB0aGUgcmlnaHQuICAqLworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJeworCSAgbm9kZSA9IG5vZGUtPmxlZnQ7CisJICBwX25ldyA9ICZkdXBfbm9kZS0+bGVmdDsKKwl9CisgICAgICBlbHNlCisJeworCSAgY29uc3QgYmluX3RyZWVfdCAqcHJldiA9IE5VTEw7CisJICB3aGlsZSAobm9kZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5yaWdodCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgcHJldiA9IG5vZGU7CisJICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwkgICAgICBkdXBfbm9kZSA9IGR1cF9ub2RlLT5wYXJlbnQ7CisJICAgICAgaWYgKCFub2RlKQorCQlyZXR1cm4gZHVwX3Jvb3Q7CisJICAgIH0KKwkgIG5vZGUgPSBub2RlLT5yaWdodDsKKwkgIHBfbmV3ID0gJmR1cF9ub2RlLT5yaWdodDsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4LmMgYi9jb21wYXQvcmVnZXgvcmVnZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2UwM2E5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKQEAgLTAsMCArMSw4NyBAQAorLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKy8qIE1ha2Ugc3VyZSBubyBvbmUgY29tcGlsZXMgdGhpcyBjb2RlIHdpdGggYSBDKysgY29tcGlsZXIuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCisjIGVycm9yICJUaGlzIGlzIEMgY29kZSwgdXNlIGEgQyBjb21waWxlciIKKyNlbmRpZgorCisjaWZkZWYgX0xJQkMKKy8qIFdlIGhhdmUgdG8ga2VlcCB0aGUgbmFtZXNwYWNlIGNsZWFuLiAgKi8KKyMgZGVmaW5lIHJlZ2ZyZWUocHJlZykgX19yZWdmcmVlIChwcmVnKQorIyBkZWZpbmUgcmVnZXhlYyhwciwgc3QsIG5tLCBwbSwgZWYpIF9fcmVnZXhlYyAocHIsIHN0LCBubSwgcG0sIGVmKQorIyBkZWZpbmUgcmVnY29tcChwcmVnLCBwYXR0ZXJuLCBjZmxhZ3MpIF9fcmVnY29tcCAocHJlZywgcGF0dGVybiwgY2ZsYWdzKQorIyBkZWZpbmUgcmVnZXJyb3IoZXJyY29kZSwgcHJlZywgZXJyYnVmLCBlcnJidWZfc2l6ZSkgXAorCV9fcmVnZXJyb3IoZXJyY29kZSwgcHJlZywgZXJyYnVmLCBlcnJidWZfc2l6ZSkKKyMgZGVmaW5lIHJlX3NldF9yZWdpc3RlcnMoYnUsIHJlLCBudSwgc3QsIGVuKSBcCisJX19yZV9zZXRfcmVnaXN0ZXJzIChidSwgcmUsIG51LCBzdCwgZW4pCisjIGRlZmluZSByZV9tYXRjaF8yKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgcG9zLCByZWdzLCBzdG9wKSBcCisJX19yZV9tYXRjaF8yIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHBvcywgcmVncywgc3RvcCkKKyMgZGVmaW5lIHJlX21hdGNoKGJ1ZnAsIHN0cmluZywgc2l6ZSwgcG9zLCByZWdzKSBcCisJX19yZV9tYXRjaCAoYnVmcCwgc3RyaW5nLCBzaXplLCBwb3MsIHJlZ3MpCisjIGRlZmluZSByZV9zZWFyY2goYnVmcCwgc3RyaW5nLCBzaXplLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MpIFwKKwlfX3JlX3NlYXJjaCAoYnVmcCwgc3RyaW5nLCBzaXplLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MpCisjIGRlZmluZSByZV9jb21waWxlX3BhdHRlcm4ocGF0dGVybiwgbGVuZ3RoLCBidWZwKSBcCisJX19yZV9jb21waWxlX3BhdHRlcm4gKHBhdHRlcm4sIGxlbmd0aCwgYnVmcCkKKyMgZGVmaW5lIHJlX3NldF9zeW50YXgoc3ludGF4KSBfX3JlX3NldF9zeW50YXggKHN5bnRheCkKKyMgZGVmaW5lIHJlX3NlYXJjaF8yKGJ1ZnAsIHN0MSwgczEsIHN0MiwgczIsIHN0YXJ0cG9zLCByYW5nZSwgcmVncywgc3RvcCkgXAorCV9fcmVfc2VhcmNoXzIgKGJ1ZnAsIHN0MSwgczEsIHN0MiwgczIsIHN0YXJ0cG9zLCByYW5nZSwgcmVncywgc3RvcCkKKyMgZGVmaW5lIHJlX2NvbXBpbGVfZmFzdG1hcChidWZwKSBfX3JlX2NvbXBpbGVfZmFzdG1hcCAoYnVmcCkKKworIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfTVNDX1ZFUikKKyNpbmNsdWRlIDxzdGRpby5oPiAvKiBmb3Igc2l6ZV90ICovCisjZW5kaWYKKworLyogT24gc29tZSBzeXN0ZW1zLCBsaW1pdHMuaCBzZXRzIFJFX0RVUF9NQVggdG8gYSBsb3dlciB2YWx1ZSB0aGFuCisgICBHTlUgcmVnZXggYWxsb3dzLiAgSW5jbHVkZSBpdCBiZWZvcmUgPHJlZ2V4Lmg+LCB3aGljaCBjb3JyZWN0bHkKKyAgICN1bmRlZnMgUkVfRFVQX01BWCBhbmQgc2V0cyBpdCB0byB0aGUgcmlnaHQgdmFsdWUuICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZkZWYgR0FXSworI3VuZGVmIGFsbG9jYQorI2RlZmluZSBhbGxvY2EgYWxsb2NhX2lzX2JhZF95b3Vfc2hvdWxkX25ldmVyX3VzZV9pdAorI2VuZGlmCisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlICJyZWdleF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSAicmVnZXhfaW50ZXJuYWwuYyIKKyNpZmRlZiBHQVdLCisjZGVmaW5lIGJvb2wgaW50CisjZGVmaW5lIHRydWUgKDEpCisjZGVmaW5lIGZhbHNlICgwKQorI2VuZGlmCisjaW5jbHVkZSAicmVnY29tcC5jIgorI2luY2x1ZGUgInJlZ2V4ZWMuYyIKKworLyogQmluYXJ5IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICAqLworI2lmIF9MSUJDCisjIGluY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorIyBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zKQorbGlua193YXJuaW5nIChyZV9tYXhfZmFpbHVyZXMsICJ0aGUgJ3JlX21heF9mYWlsdXJlcycgdmFyaWFibGUgaXMgb2Jzb2xldGUgYW5kIHdpbGwgZ28gYXdheS4iKQoraW50IHJlX21heF9mYWlsdXJlcyA9IDIwMDA7CisjIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleC5oIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzNDEyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleC5oCkBAIC0wLDAgKzEsNTg2IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogRGVmaW5pdGlvbnMgZm9yIGRhdGEgc3RydWN0dXJlcyBhbmQgcm91dGluZXMgZm9yIHRoZSByZWd1bGFyCisgICBleHByZXNzaW9uIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDE5ODUsMTk4OS05MywxOTk1LTk4LDIwMDAsMjAwMSwyMDAyLDIwMDMsMjAwNSwyMDA2LDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfUkVHRVhfSAorI2RlZmluZSBfUkVHRVhfSCAxCisKKyNpZmRlZiBIQVZFX1NURERFRl9ICisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9MSUJDCisjZGVmaW5lIF9fVVNFX0dOVQkxCisjZW5kaWYKKworLyogQWxsb3cgdGhlIHVzZSBpbiBDKysgY29kZS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgcmVnY29tcCBnaXRfcmVnY29tcAorI2RlZmluZSByZWdleGVjIGdpdF9yZWdleGVjCisjZGVmaW5lIHJlZ2Vycm9yIGdpdF9yZWdlcnJvcgorI2RlZmluZSByZWdmcmVlIGdpdF9yZWdmcmVlCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIHR5cGVzIGhhdmUgdG8gYmUgc2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUKKyAgIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSB2YWx1ZSBvZiBhIHBvaW50ZXIuICBGb3IgbW9zdCBBTlNJIGNvbXBpbGVycworICAgcHRyZGlmZl90IGFuZCBzaXplX3Qgc2hvdWxkIGJlIGxpa2VseSBPSy4gIFN0aWxsIHNpemUgb2YgdGhlc2UgdHdvCisgICB0eXBlcyBpcyAyIGZvciBNaWNyb3NvZnQgQy4gIFVnaC4uLiAqLwordHlwZWRlZiBsb25nIGludCBzX3JlZ190OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBhY3RpdmVfcmVnX3Q7CisKKy8qIFRoZSBmb2xsb3dpbmcgYml0cyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ2V4cCBzeW50YXggd2UKKyAgIHJlY29nbml6ZS4gIFRoZSBzZXQvbm90LXNldCBtZWFuaW5ncyBhcmUgY2hvc2VuIHNvIHRoYXQgRW1hY3Mgc3ludGF4CisgICByZW1haW5zIHRoZSB2YWx1ZSAwLiAgVGhlIGJpdHMgYXJlIGdpdmVuIGluIGFscGhhYmV0aWNhbCBvcmRlciwgYW5kCisgICB0aGUgZGVmaW5pdGlvbnMgc2hpZnRlZCBieSBvbmUgZnJvbSB0aGUgcHJldmlvdXMgYml0OyB0aHVzLCB3aGVuIHdlCisgICBhZGQgb3IgcmVtb3ZlIGEgYml0LCBvbmx5IG9uZSBvdGhlciBkZWZpbml0aW9uIG5lZWQgY2hhbmdlLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcmVnX3N5bnRheF90OworCisjaWZkZWYgX19VU0VfR05VCisvKiBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIFwgaW5zaWRlIGEgYnJhY2tldCBleHByZXNzaW9uIGlzIGxpdGVyYWwuCisgICBJZiBzZXQsIHRoZW4gc3VjaCBhIFwgcXVvdGVzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyLiAgKi8KKyMgZGVmaW5lIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgKCh1bnNpZ25lZCBsb25nIGludCkgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiArIGFuZCA/IGFyZSBvcGVyYXRvcnMsIGFuZCBcKyBhbmQgXD8gYXJlCisgICAgIGxpdGVyYWxzLgorICAgSWYgc2V0LCB0aGVuIFwrIGFuZCBcPyBhcmUgb3BlcmF0b3JzIGFuZCArIGFuZCA/IGFyZSBsaXRlcmFscy4gICovCisjIGRlZmluZSBSRV9CS19QTFVTX1FNIChSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgc3VwcG9ydGVkLiAgVGhleSBhcmU6CisgICAgIFs6YWxwaGE6XSwgWzp1cHBlcjpdLCBbOmxvd2VyOl0sICBbOmRpZ2l0Ol0sIFs6YWxudW06XSwgWzp4ZGlnaXQ6XSwKKyAgICAgWzpzcGFjZTpdLCBbOnByaW50Ol0sIFs6cHVuY3Q6XSwgWzpncmFwaDpdLCBhbmQgWzpjbnRybDpdLgorICAgSWYgbm90IHNldCwgdGhlbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgbm90IHN1cHBvcnRlZC4gICovCisjIGRlZmluZSBSRV9DSEFSX0NMQVNTRVMgKFJFX0JLX1BMVVNfUU0gPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIF4gYW5kICQgYXJlIGFsd2F5cyBhbmNob3JzIChvdXRzaWRlIGJyYWNrZXQKKyAgICAgZXhwcmVzc2lvbnMsIG9mIGNvdXJzZSkuCisgICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIGl0IGRlcGVuZHM6CisgICAgICAgIF4gIGlzIGFuIGFuY2hvciBpZiBpdCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcmVndWxhcgorICAgICAgICAgICBleHByZXNzaW9uIG9yIGFmdGVyIGFuIG9wZW4tZ3JvdXAgb3IgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3I7CisgICAgICAgICQgIGlzIGFuIGFuY2hvciBpZiBpdCBpcyBhdCB0aGUgZW5kIG9mIGEgcmVndWxhciBleHByZXNzaW9uLCBvcgorICAgICAgICAgICBiZWZvcmUgYSBjbG9zZS1ncm91cCBvciBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvci4KKworICAgVGhpcyBiaXQgY291bGQgYmUgKHJlKWNvbWJpbmVkIHdpdGggUkVfQ09OVEVYVF9JTkRFUF9PUFMsIGJlY2F1c2UKKyAgIFBPU0lYIGRyYWZ0IDExLjIgc2F5cyB0aGF0ICogZXRjLiBpbiBsZWFkaW5nIHBvc2l0aW9ucyBpcyB1bmRlZmluZWQuCisgICBXZSBhbHJlYWR5IGltcGxlbWVudGVkIGEgcHJldmlvdXMgZHJhZnQgd2hpY2ggbWFkZSB0aG9zZSBjb25zdHJ1Y3RzCisgICBpbnZhbGlkLCB0aG91Z2gsIHNvIHdlIGhhdmVuJ3QgY2hhbmdlZCB0aGUgY29kZSBiYWNrLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyAoUkVfQ0hBUl9DTEFTU0VTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGFsd2F5cyBzcGVjaWFsCisgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSBhcmUgaW4gdGhlIHBhdHRlcm4uCisgICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgc3BlY2lhbCBvbmx5IGluCisgICAgIHNvbWUgY29udGV4dHM7IG90aGVyd2lzZSB0aGV5IGFyZSBvcmRpbmFyeS4gIFNwZWNpZmljYWxseSwKKyAgICAgKiArID8gYW5kIGludGVydmFscyBhcmUgb25seSBzcGVjaWFsIHdoZW4gbm90IGFmdGVyIHRoZSBiZWdpbm5pbmcsCisgICAgIG9wZW4tZ3JvdXAsIG9yIGFsdGVybmF0aW9uIG9wZXJhdG9yLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5ERVBfT1BTIChSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuICosICssID8sIGFuZCB7IGNhbm5vdCBiZSBmaXJzdCBpbiBhbiByZSBvcgorICAgICBpbW1lZGlhdGVseSBhZnRlciBhbiBhbHRlcm5hdGlvbiBvciBiZWdpbi1ncm91cCBvcGVyYXRvci4gICovCisjIGRlZmluZSBSRV9DT05URVhUX0lOVkFMSURfT1BTIChSRV9DT05URVhUX0lOREVQX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gLiBtYXRjaGVzIG5ld2xpbmUuCisgICBJZiBub3Qgc2V0LCB0aGVuIGl0IGRvZXNuJ3QuICAqLworIyBkZWZpbmUgUkVfRE9UX05FV0xJTkUgKFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIC4gZG9lc24ndCBtYXRjaCBOVUwuCisgICBJZiBub3Qgc2V0LCB0aGVuIGl0IGRvZXMuICAqLworIyBkZWZpbmUgUkVfRE9UX05PVF9OVUxMIChSRV9ET1RfTkVXTElORSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5vbm1hdGNoaW5nIGxpc3RzIFteLi4uXSBkbyBub3QgbWF0Y2ggbmV3bGluZS4KKyAgIElmIG5vdCBzZXQsIHRoZXkgZG8uICAqLworIyBkZWZpbmUgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIChSRV9ET1RfTk9UX05VTEwgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBlaXRoZXIgXHsuLi5cfSBvciB7Li4ufSBkZWZpbmVzIGFuCisgICAgIGludGVydmFsLCBkZXBlbmRpbmcgb24gUkVfTk9fQktfQlJBQ0VTLgorICAgSWYgbm90IHNldCwgXHssIFx9LCB7LCBhbmQgfSBhcmUgbGl0ZXJhbHMuICAqLworIyBkZWZpbmUgUkVfSU5URVJWQUxTIChSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCArLCA/IGFuZCB8IGFyZW4ndCByZWNvZ25pemVkIGFzIG9wZXJhdG9ycy4KKyAgIElmIG5vdCBzZXQsIHRoZXkgYXJlLiAgKi8KKyMgZGVmaW5lIFJFX0xJTUlURURfT1BTIChSRV9JTlRFUlZBTFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBuZXdsaW5lIGlzIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLgorICAgSWYgbm90IHNldCwgbmV3bGluZSBpcyBsaXRlcmFsLiAgKi8KKyMgZGVmaW5lIFJFX05FV0xJTkVfQUxUIChSRV9MSU1JVEVEX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYHsuLi59JyBkZWZpbmVzIGFuIGludGVydmFsLCBhbmQgXHsgYW5kIFx9CisgICAgIGFyZSBsaXRlcmFscy4KKyAgSWYgbm90IHNldCwgdGhlbiBgXHsuLi5cfScgZGVmaW5lcyBhbiBpbnRlcnZhbC4gICovCisjIGRlZmluZSBSRV9OT19CS19CUkFDRVMgKFJFX05FV0xJTkVfQUxUIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgKC4uLikgZGVmaW5lcyBhIGdyb3VwLCBhbmQgXCggYW5kIFwpIGFyZSBsaXRlcmFscy4KKyAgIElmIG5vdCBzZXQsIFwoLi4uXCkgZGVmaW5lcyBhIGdyb3VwLCBhbmQgKCBhbmQgKSBhcmUgbGl0ZXJhbHMuICAqLworIyBkZWZpbmUgUkVfTk9fQktfUEFSRU5TIChSRV9OT19CS19CUkFDRVMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIFw8ZGlnaXQ+IG1hdGNoZXMgPGRpZ2l0Pi4KKyAgIElmIG5vdCBzZXQsIHRoZW4gXDxkaWdpdD4gaXMgYSBiYWNrLXJlZmVyZW5jZS4gICovCisjIGRlZmluZSBSRV9OT19CS19SRUZTIChSRV9OT19CS19QQVJFTlMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHwgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IsIGFuZCBcfCBpcyBsaXRlcmFsLgorICAgSWYgbm90IHNldCwgdGhlbiBcfCBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvciwgYW5kIHwgaXMgbGl0ZXJhbC4gICovCisjIGRlZmluZSBSRV9OT19CS19WQkFSIChSRV9OT19CS19SRUZTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbiBlbmRpbmcgcmFuZ2UgcG9pbnQgY29sbGF0aW5nIGhpZ2hlcgorICAgICB0aGFuIHRoZSBzdGFydGluZyByYW5nZSBwb2ludCwgYXMgaW4gW3otYV0sIGlzIGludmFsaWQuCisgICBJZiBub3Qgc2V0LCB0aGVuIHdoZW4gZW5kaW5nIHJhbmdlIHBvaW50IGNvbGxhdGVzIGhpZ2hlciB0aGFuIHRoZQorICAgICBzdGFydGluZyByYW5nZSBwb2ludCwgdGhlIHJhbmdlIGlzIGlnbm9yZWQuICAqLworIyBkZWZpbmUgUkVfTk9fRU1QVFlfUkFOR0VTIChSRV9OT19CS19WQkFSIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbiB1bm1hdGNoZWQgKSBpcyBvcmRpbmFyeS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gYW4gdW5tYXRjaGVkICkgaXMgaW52YWxpZC4gICovCisjIGRlZmluZSBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEIChSRV9OT19FTVBUWV9SQU5HRVMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBzdWNjZWVkIGFzIHNvb24gYXMgd2UgbWF0Y2ggdGhlIHdob2xlIHBhdHRlcm4sCisgICB3aXRob3V0IGZ1cnRoZXIgYmFja3RyYWNraW5nLiAgKi8KKyMgZGVmaW5lIFJFX05PX1BPU0lYX0JBQ0tUUkFDS0lORyAoUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGRvIG5vdCBwcm9jZXNzIHRoZSBHTlUgcmVnZXggb3BlcmF0b3JzLgorICAgSWYgbm90IHNldCwgdGhlbiB0aGUgR05VIHJlZ2V4IG9wZXJhdG9ycyBhcmUgcmVjb2duaXplZC4gKi8KKyMgZGVmaW5lIFJFX05PX0dOVV9PUFMgKFJFX05PX1BPU0lYX0JBQ0tUUkFDS0lORyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGEgc3ludGFjdGljYWxseSBpbnZhbGlkIGludGVydmFsIGlzIHRyZWF0ZWQgYXMKKyAgIGEgc3RyaW5nIG9mIG9yZGluYXJ5IGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgdGhlIEVSRSAnYXsxJyBpcworICAgdHJlYXRlZCBhcyAnYVx7MScuICAqLworIyBkZWZpbmUgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgKFJFX05PX0dOVV9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGlnbm9yZSBjYXNlIHdoZW4gbWF0Y2hpbmcuCisgICBJZiBub3Qgc2V0LCB0aGVuIGNhc2UgaXMgc2lnbmlmaWNhbnQuICAqLworIyBkZWZpbmUgUkVfSUNBU0UgKFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIDw8IDEpCisKKy8qIFRoaXMgYml0IGlzIHVzZWQgaW50ZXJuYWxseSBsaWtlIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyBidXQgb25seQorICAgZm9yIF4sIGJlY2F1c2UgaXQgaXMgZGlmZmljdWx0IHRvIHNjYW4gdGhlIHJlZ2V4IGJhY2t3YXJkcyB0byBmaW5kCisgICB3aGV0aGVyIF4gc2hvdWxkIGJlIHNwZWNpYWwuICAqLworIyBkZWZpbmUgUkVfQ0FSRVRfQU5DSE9SU19IRVJFIChSRV9JQ0FTRSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXHsgY2Fubm90IGJlIGZpcnN0IGluIGFuIGJyZSBvcgorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4gYWx0ZXJuYXRpb24gb3IgYmVnaW4tZ3JvdXAgb3BlcmF0b3IuICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCAoUkVfQ0FSRVRfQU5DSE9SU19IRVJFIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBub19zdWIgd2lsbCBiZSBzZXQgdG8gMSBkdXJpbmcKKyAgIHJlX2NvbXBpbGVfcGF0dGVybi4gICovCisjZGVmaW5lIFJFX05PX1NVQiAoUkVfQ09OVEVYVF9JTlZBTElEX0RVUCA8PCAxKQorI2VuZGlmCisKKy8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgcmVnZXhwIHN5bnRheCB0byB1c2UgKGZvcgorICAgc29tZSBpbnRlcmZhY2VzKS4gIFdoZW4gYSByZWdleHAgaXMgY29tcGlsZWQsIHRoZSBzeW50YXggdXNlZCBpcworICAgc3RvcmVkIGluIHRoZSBwYXR0ZXJuIGJ1ZmZlciwgc28gY2hhbmdpbmcgdGhpcyBkb2VzIG5vdCBhZmZlY3QKKyAgIGFscmVhZHktY29tcGlsZWQgcmVnZXhwcy4gICovCitleHRlcm4gcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworDAorI2lmZGVmIF9fVVNFX0dOVQorLyogRGVmaW5lIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUgYml0cyBmb3IgdGhlIHN0YW5kYXJkIHBvc3NpYmlsaXRpZXMuCisgICAoVGhlIFtbWyBjb21tZW50cyBkZWxpbWl0IHdoYXQgZ2V0cyBwdXQgaW50byB0aGUgVGV4aW5mbyBmaWxlLCBzbworICAgZG9uJ3QgZGVsZXRlIHRoZW0hKSAgKi8KKy8qIFtbW2JlZ2luIHN5bnRheGVzXV1dICovCisjZGVmaW5lIFJFX1NZTlRBWF9FTUFDUyAwCisKKyNkZWZpbmUgUkVfU1lOVEFYX0FXSwkJCQkJCQlcCisgIChSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTICAgfCBSRV9ET1RfTk9UX05VTEwJCQlcCisgICB8IFJFX05PX0JLX1BBUkVOUyAgICAgICAgICAgICAgfCBSRV9OT19CS19SRUZTCQkJXAorICAgfCBSRV9OT19CS19WQkFSICAgICAgICAgICAgICAgIHwgUkVfTk9fRU1QVFlfUkFOR0VTCQkJXAorICAgfCBSRV9ET1RfTkVXTElORQkJICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJXAorICAgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEIHwgUkVfTk9fR05VX09QUykKKworI2RlZmluZSBSRV9TWU5UQVhfR05VX0FXSwkJCQkJCVwKKyAgKChSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgfCBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTCQlcCisgICB8IFJFX0lOVkFMSURfSU5URVJWQUxfT1JEKQkJCQkJCVwKKyAgICYgfihSRV9ET1RfTk9UX05VTEwgfCBSRV9DT05URVhUX0lOREVQX09QUwkJCQlcCisgICAgICAgfCBSRV9DT05URVhUX0lOVkFMSURfT1BTICkpCisKKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0FXSwkJCQkJCVwKKyAgKFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCB8IFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMJCVwKKyAgIHwgUkVfSU5URVJWQUxTCSAgICB8IFJFX05PX0dOVV9PUFMJCQkJXAorICAgfCBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCkKKworI2RlZmluZSBSRV9TWU5UQVhfR1JFUAkJCQkJCQlcCisgIChSRV9CS19QTFVTX1FNICAgICAgICAgICAgICB8IFJFX0NIQVJfQ0xBU1NFUwkJCQlcCisgICB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSB8IFJFX0lOVEVSVkFMUwkJCQlcCisgICB8IFJFX05FV0xJTkVfQUxUKQorCisjZGVmaW5lIFJFX1NZTlRBWF9FR1JFUAkJCQkJCQlcCisgIChSRV9DSEFSX0NMQVNTRVMgICAgICAgIHwgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQkJXAorICAgfCBSRV9DT05URVhUX0lOREVQX09QUyB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORQkJCVwKKyAgIHwgUkVfTkVXTElORV9BTFQgICAgICAgfCBSRV9OT19CS19QQVJFTlMJCQkJXAorICAgfCBSRV9OT19CS19WQkFSKQorCisjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9FR1JFUAkJCQkJCVwKKyAgKFJFX1NZTlRBWF9FR1JFUCB8IFJFX0lOVEVSVkFMUyB8IFJFX05PX0JLX0JSQUNFUwkJCVwKKyAgIHwgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpCisKKy8qIFAxMDAzLjIvRDExLjIsIHNlY3Rpb24gNC4yMC43LjEsIGxpbmVzIDUwNzhmZi4gICovCisjZGVmaW5lIFJFX1NZTlRBWF9FRCBSRV9TWU5UQVhfUE9TSVhfQkFTSUMKKworI2RlZmluZSBSRV9TWU5UQVhfU0VEIFJFX1NZTlRBWF9QT1NJWF9CQVNJQworCisvKiBTeW50YXggYml0cyBjb21tb24gdG8gYm90aCBiYXNpYyBhbmQgZXh0ZW5kZWQgUE9TSVggcmVnZXggc3ludGF4LiAgKi8KKyNkZWZpbmUgX1JFX1NZTlRBWF9QT1NJWF9DT01NT04JCQkJCQlcCisgIChSRV9DSEFSX0NMQVNTRVMgfCBSRV9ET1RfTkVXTElORSAgICAgIHwgUkVfRE9UX05PVF9OVUxMCQlcCisgICB8IFJFX0lOVEVSVkFMUyAgfCBSRV9OT19FTVBUWV9SQU5HRVMpCisKKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAorICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9CS19QTFVTX1FNIHwgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKworLyogRGlmZmVycyBmcm9tIC4uLl9QT1NJWF9CQVNJQyBvbmx5IGluIHRoYXQgUkVfQktfUExVU19RTSBiZWNvbWVzCisgICBSRV9MSU1JVEVEX09QUywgaS5lLiwgXD8gXCsgXHwgYXJlIG5vdCByZWNvZ25pemVkLiAgQWN0dWFsbHksIHRoaXMKKyAgIGlzbid0IG1pbmltYWwsIHNpbmNlIG90aGVyIG9wZXJhdG9ycywgc3VjaCBhcyBcYCwgYXJlbid0IGRpc2FibGVkLiAgKi8KKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX01JTklNQUxfQkFTSUMJCQkJCVwKKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OIHwgUkVfTElNSVRFRF9PUFMpCisKKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVECQkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTICAgfCBSRV9OT19CS19CUkFDRVMJCQkJXAorICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgIHwgUkVfTk9fQktfVkJBUgkJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQorCisvKiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0VYVEVOREVEIGluIHRoYXQgUkVfQ09OVEVYVF9JTkRFUF9PUFMgaXMKKyAgIHJlbW92ZWQgYW5kIFJFX05PX0JLX1JFRlMgaXMgYWRkZWQuICAqLworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9FWFRFTkRFRAkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9OT19CS19CUkFDRVMJCQkJXAorICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCQlcCisgICB8IFJFX05PX0JLX1ZCQVIJICAgIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKy8qIFtbW2VuZCBzeW50YXhlc11dXSAqLworDAorLyogTWF4aW11bSBudW1iZXIgb2YgZHVwbGljYXRlcyBhbiBpbnRlcnZhbCBjYW4gYWxsb3cuICBTb21lIHN5c3RlbXMKKyAgIChlcnJvbmVvdXNseSkgZGVmaW5lIHRoaXMgaW4gb3RoZXIgaGVhZGVyIGZpbGVzLCBidXQgd2Ugd2FudCBvdXIKKyAgIHZhbHVlLCBzbyByZW1vdmUgYW55IHByZXZpb3VzIGRlZmluZS4gICovCisjIGlmZGVmIFJFX0RVUF9NQVgKKyMgIHVuZGVmIFJFX0RVUF9NQVgKKyMgZW5kaWYKKy8qIElmIHNpemVvZihpbnQpID09IDIsIHRoZW4gKCgxIDw8IDE1KSAtIDEpIG92ZXJmbG93cy4gICovCisjIGRlZmluZSBSRV9EVVBfTUFYICgweDdmZmYpCisjZW5kaWYKKworCisvKiBQT1NJWCBgY2ZsYWdzJyBiaXRzIChpLmUuLCBpbmZvcm1hdGlvbiBmb3IgYHJlZ2NvbXAnKS4gICovCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB1c2UgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIHN5bnRheC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gdXNlIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBzeW50YXguICAqLworI2RlZmluZSBSRUdfRVhURU5ERUQgMQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNhc2Ugd2hlbiBtYXRjaGluZy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisjZGVmaW5lIFJFR19JQ0FTRSAoUkVHX0VYVEVOREVEIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbmNob3JzIGRvIG5vdCBtYXRjaCBhdCBuZXdsaW5lCisgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gYW5jaG9ycyBkbyBtYXRjaCBhdCBuZXdsaW5lcy4gICovCisjZGVmaW5lIFJFR19ORVdMSU5FIChSRUdfSUNBU0UgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHJlcG9ydCBvbmx5IHN1Y2Nlc3Mgb3IgZmFpbCBpbiByZWdleGVjLgorICAgSWYgbm90IHNldCwgdGhlbiByZXR1cm5zIGRpZmZlciBiZXR3ZWVuIG5vdCBtYXRjaGluZyBhbmQgZXJyb3JzLiAgKi8KKyNkZWZpbmUgUkVHX05PU1VCIChSRUdfTkVXTElORSA8PCAxKQorCisKKy8qIFBPU0lYIGBlZmxhZ3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZvciByZWdleGVjKS4gICovCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB0aGUgYmVnaW5uaW5nLW9mLWxpbmUgb3BlcmF0b3IgZG9lc24ndCBtYXRjaAorICAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgKHByZXN1bWFibHkgYmVjYXVzZSBpdCdzIG5vdCB0aGUKKyAgICAgYmVnaW5uaW5nIG9mIGEgbGluZSkuCisgICBJZiBub3Qgc2V0LCB0aGVuIHRoZSBiZWdpbm5pbmctb2YtbGluZSBvcGVyYXRvciBkb2VzIG1hdGNoIHRoZQorICAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4gICovCisjZGVmaW5lIFJFR19OT1RCT0wgMQorCisvKiBMaWtlIFJFR19OT1RCT0wsIGV4Y2VwdCBmb3IgdGhlIGVuZC1vZi1saW5lLiAgKi8KKyNkZWZpbmUgUkVHX05PVEVPTCAoMSA8PCAxKQorCisvKiBVc2UgUE1BVENIWzBdIHRvIGRlbGltaXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHNlYXJjaCBpbiB0aGUKKyAgIGJ1ZmZlci4gICovCisjZGVmaW5lIFJFR19TVEFSVEVORCAoMSA8PCAyKQorCisKKy8qIElmIGFueSBlcnJvciBjb2RlcyBhcmUgcmVtb3ZlZCwgY2hhbmdlZCwgb3IgYWRkZWQsIHVwZGF0ZSB0aGUKKyAgIGByZV9lcnJvcl9tc2cnIHRhYmxlIGluIHJlZ2V4LmMuICAqLwordHlwZWRlZiBlbnVtCit7CisjaWYgZGVmaW5lZCBfWE9QRU5fU09VUkNFIHx8IGRlZmluZWQgX19VU0VfWE9QRU4ySworICBSRUdfRU5PU1lTID0gLTEsCS8qIFRoaXMgd2lsbCBuZXZlciBoYXBwZW4gZm9yIHRoaXMgaW1wbGVtZW50YXRpb24uICAqLworI2VuZGlmCisKKyAgUkVHX05PRVJST1IgPSAwLAkvKiBTdWNjZXNzLiAgKi8KKyAgUkVHX05PTUFUQ0gsCQkvKiBEaWRuJ3QgZmluZCBhIG1hdGNoIChmb3IgcmVnZXhlYykuICAqLworCisgIC8qIFBPU0lYIHJlZ2NvbXAgcmV0dXJuIGVycm9yIGNvZGVzLiAgKEluIHRoZSBvcmRlciBsaXN0ZWQgaW4gdGhlCisgICAgIHN0YW5kYXJkLikgICovCisgIFJFR19CQURQQVQsCQkvKiBJbnZhbGlkIHBhdHRlcm4uICAqLworICBSRUdfRUNPTExBVEUsCQkvKiBJbnZhbGlkIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKyAgUkVHX0VDVFlQRSwJCS8qIEludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUuICAqLworICBSRUdfRUVTQ0FQRSwJCS8qIFRyYWlsaW5nIGJhY2tzbGFzaC4gICovCisgIFJFR19FU1VCUkVHLAkJLyogSW52YWxpZCBiYWNrIHJlZmVyZW5jZS4gICovCisgIFJFR19FQlJBQ0ssCQkvKiBVbm1hdGNoZWQgbGVmdCBicmFja2V0LiAgKi8KKyAgUkVHX0VQQVJFTiwJCS8qIFBhcmVudGhlc2lzIGltYmFsYW5jZS4gICovCisgIFJFR19FQlJBQ0UsCQkvKiBVbm1hdGNoZWQgXHsuICAqLworICBSRUdfQkFEQlIsCQkvKiBJbnZhbGlkIGNvbnRlbnRzIG9mIFx7XH0uICAqLworICBSRUdfRVJBTkdFLAkJLyogSW52YWxpZCByYW5nZSBlbmQuICAqLworICBSRUdfRVNQQUNFLAkJLyogUmFuIG91dCBvZiBtZW1vcnkuICAqLworICBSRUdfQkFEUlBULAkJLyogTm8gcHJlY2VkaW5nIHJlIGZvciByZXBldGl0aW9uIG9wLiAgKi8KKworICAvKiBFcnJvciBjb2RlcyB3ZSd2ZSBhZGRlZC4gICovCisgIFJFR19FRU5ELAkJLyogUHJlbWF0dXJlIGVuZC4gICovCisgIFJFR19FU0laRSwJCS8qIENvbXBpbGVkIHBhdHRlcm4gYmlnZ2VyIHRoYW4gMl4xNiBieXRlcy4gICovCisgIFJFR19FUlBBUkVOCQkvKiBVbm1hdGNoZWQgKSBvciBcKTsgbm90IHJldHVybmVkIGZyb20gcmVnY29tcC4gICovCit9IHJlZ19lcnJjb2RlX3Q7CisMCisvKiBUaGlzIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBjb21waWxlZCBwYXR0ZXJuLiAgQmVmb3JlIGNhbGxpbmcKKyAgIHRoZSBwYXR0ZXJuIGNvbXBpbGVyLCB0aGUgZmllbGRzIGBidWZmZXInLCBgYWxsb2NhdGVkJywgYGZhc3RtYXAnLAorICAgYHRyYW5zbGF0ZScsIGFuZCBgbm9fc3ViJyBjYW4gYmUgc2V0LiAgQWZ0ZXIgdGhlIHBhdHRlcm4gaGFzIGJlZW4KKyAgIGNvbXBpbGVkLCB0aGUgYHJlX25zdWInIGZpZWxkIGlzIGF2YWlsYWJsZS4gIEFsbCBvdGhlciBmaWVsZHMgYXJlCisgICBwcml2YXRlIHRvIHRoZSByZWdleCByb3V0aW5lcy4gICovCisKKyNpZm5kZWYgUkVfVFJBTlNMQVRFX1RZUEUKKyMgZGVmaW5lIF9fUkVfVFJBTlNMQVRFX1RZUEUgdW5zaWduZWQgY2hhciAqCisjIGlmZGVmIF9fVVNFX0dOVQorIyAgZGVmaW5lIFJFX1RSQU5TTEFURV9UWVBFIF9fUkVfVFJBTlNMQVRFX1RZUEUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBfX1JFUEJfUFJFRklYKG5hbWUpIG5hbWUKKyNlbHNlCisjIGRlZmluZSBfX1JFUEJfUFJFRklYKG5hbWUpIF9fIyNuYW1lCisjZW5kaWYKKworc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyCit7CisgIC8qIFNwYWNlIHRoYXQgaG9sZHMgdGhlIGNvbXBpbGVkIHBhdHRlcm4uICBJdCBpcyBkZWNsYXJlZCBhcworICAgICBgdW5zaWduZWQgY2hhciAqJyBiZWNhdXNlIGl0cyBlbGVtZW50cyBhcmUgc29tZXRpbWVzIHVzZWQgYXMKKyAgICAgYXJyYXkgaW5kZXhlcy4gICovCisgIHVuc2lnbmVkIGNoYXIgKl9fUkVQQl9QUkVGSVgoYnVmZmVyKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gd2hpY2ggYGJ1ZmZlcicgcG9pbnRzLiAgKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgX19SRVBCX1BSRUZJWChhbGxvY2F0ZWQpOworCisgIC8qIE51bWJlciBvZiBieXRlcyBhY3R1YWxseSB1c2VkIGluIGBidWZmZXInLiAgKi8KKyAgdW5zaWduZWQgbG9uZyBpbnQgX19SRVBCX1BSRUZJWCh1c2VkKTsKKworICAvKiBTeW50YXggc2V0dGluZyB3aXRoIHdoaWNoIHRoZSBwYXR0ZXJuIHdhcyBjb21waWxlZC4gICovCisgIHJlZ19zeW50YXhfdCBfX1JFUEJfUFJFRklYKHN5bnRheCk7CisKKyAgLyogUG9pbnRlciB0byBhIGZhc3RtYXAsIGlmIGFueSwgb3RoZXJ3aXNlIHplcm8uICByZV9zZWFyY2ggdXNlcyB0aGUKKyAgICAgZmFzdG1hcCwgaWYgdGhlcmUgaXMgb25lLCB0byBza2lwIG92ZXIgaW1wb3NzaWJsZSBzdGFydGluZyBwb2ludHMKKyAgICAgZm9yIG1hdGNoZXMuICAqLworICBjaGFyICpfX1JFUEJfUFJFRklYKGZhc3RtYXApOworCisgIC8qIEVpdGhlciBhIHRyYW5zbGF0ZSB0YWJsZSB0byBhcHBseSB0byBhbGwgY2hhcmFjdGVycyBiZWZvcmUKKyAgICAgY29tcGFyaW5nIHRoZW0sIG9yIHplcm8gZm9yIG5vIHRyYW5zbGF0aW9uLiAgVGhlIHRyYW5zbGF0aW9uIGlzCisgICAgIGFwcGxpZWQgdG8gYSBwYXR0ZXJuIHdoZW4gaXQgaXMgY29tcGlsZWQgYW5kIHRvIGEgc3RyaW5nIHdoZW4gaXQKKyAgICAgaXMgbWF0Y2hlZC4gICovCisgIF9fUkVfVFJBTlNMQVRFX1RZUEUgX19SRVBCX1BSRUZJWCh0cmFuc2xhdGUpOworCisgIC8qIE51bWJlciBvZiBzdWJleHByZXNzaW9ucyBmb3VuZCBieSB0aGUgY29tcGlsZXIuICAqLworICBzaXplX3QgcmVfbnN1YjsKKworICAvKiBaZXJvIGlmIHRoaXMgcGF0dGVybiBjYW5ub3QgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZywgb25lIGVsc2UuCisgICAgIFdlbGwsIGluIHRydXRoIGl0J3MgdXNlZCBvbmx5IGluIGByZV9zZWFyY2hfMicsIHRvIHNlZSB3aGV0aGVyIG9yCisgICAgIG5vdCB3ZSBzaG91bGQgdXNlIHRoZSBmYXN0bWFwLCBzbyB3ZSBkb24ndCBzZXQgdGhpcyBhYnNvbHV0ZWx5CisgICAgIHBlcmZlY3RseTsgc2VlIGByZV9jb21waWxlX2Zhc3RtYXAnICh0aGUgYGR1cGxpY2F0ZScgY2FzZSkuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKGNhbl9iZV9udWxsKSA6IDE7CisKKyAgLyogSWYgUkVHU19VTkFMTE9DQVRFRCwgYWxsb2NhdGUgc3BhY2UgaW4gdGhlIGByZWdzJyBzdHJ1Y3R1cmUKKyAgICAgZm9yIGBtYXggKFJFX05SRUdTLCByZV9uc3ViICsgMSknIGdyb3Vwcy4KKyAgICAgSWYgUkVHU19SRUFMTE9DQVRFLCByZWFsbG9jYXRlIHNwYWNlIGlmIG5lY2Vzc2FyeS4KKyAgICAgSWYgUkVHU19GSVhFRCwgdXNlIHdoYXQncyB0aGVyZS4gICovCisjaWZkZWYgX19VU0VfR05VCisjIGRlZmluZSBSRUdTX1VOQUxMT0NBVEVEIDAKKyMgZGVmaW5lIFJFR1NfUkVBTExPQ0FURSAxCisjIGRlZmluZSBSRUdTX0ZJWEVEIDIKKyNlbmRpZgorICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKHJlZ3NfYWxsb2NhdGVkKSA6IDI7CisKKyAgLyogU2V0IHRvIHplcm8gd2hlbiBgcmVnZXhfY29tcGlsZScgY29tcGlsZXMgYSBwYXR0ZXJuOyBzZXQgdG8gb25lCisgICAgIGJ5IGByZV9jb21waWxlX2Zhc3RtYXAnIGlmIGl0IHVwZGF0ZXMgdGhlIGZhc3RtYXAuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKGZhc3RtYXBfYWNjdXJhdGUpIDogMTsKKworICAvKiBJZiBzZXQsIGByZV9tYXRjaF8yJyBkb2VzIG5vdCByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgc3ViZXhwcmVzc2lvbnMuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5vX3N1YikgOiAxOworCisgIC8qIElmIHNldCwgYSBiZWdpbm5pbmctb2YtbGluZSBhbmNob3IgZG9lc24ndCBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzdHJpbmcuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5vdF9ib2wpIDogMTsKKworICAvKiBTaW1pbGFybHkgZm9yIGFuIGVuZC1vZi1saW5lIGFuY2hvci4gICovCisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgobm90X2VvbCkgOiAxOworCisgIC8qIElmIHRydWUsIGFuIGFuY2hvciBhdCBhIG5ld2xpbmUgbWF0Y2hlcy4gICovCisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgobmV3bGluZV9hbmNob3IpIDogMTsKK307CisKK3R5cGVkZWYgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlZ2V4X3Q7CisMCisvKiBUeXBlIGZvciBieXRlIG9mZnNldHMgd2l0aGluIHRoZSBzdHJpbmcuICBQT1NJWCBtYW5kYXRlcyB0aGlzLiAgKi8KK3R5cGVkZWYgaW50IHJlZ29mZl90OworCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3ZSBzdG9yZSByZWdpc3RlciBtYXRjaCBkYXRhIGluLiAgU2VlCisgICByZWdleC50ZXhpbmZvIGZvciBhIGZ1bGwgZGVzY3JpcHRpb24gb2Ygd2hhdCByZWdpc3RlcnMgbWF0Y2guICAqLworc3RydWN0IHJlX3JlZ2lzdGVycworeworICB1bnNpZ25lZCBudW1fcmVnczsKKyAgcmVnb2ZmX3QgKnN0YXJ0OworICByZWdvZmZfdCAqZW5kOworfTsKKworCisvKiBJZiBgcmVnc19hbGxvY2F0ZWQnIGlzIFJFR1NfVU5BTExPQ0FURUQgaW4gdGhlIHBhdHRlcm4gYnVmZmVyLAorICAgYHJlX21hdGNoXzInIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYXQgbGVhc3QgdGhpcyBtYW55IHJlZ2lzdGVycworICAgdGhlIGZpcnN0IHRpbWUgYSBgcmVncycgc3RydWN0dXJlIGlzIHBhc3NlZC4gICovCisjIGlmbmRlZiBSRV9OUkVHUworIyAgZGVmaW5lIFJFX05SRUdTIDMwCisjIGVuZGlmCisjZW5kaWYKKworCisvKiBQT1NJWCBzcGVjaWZpY2F0aW9uIGZvciByZWdpc3RlcnMuICBBc2lkZSBmcm9tIHRoZSBkaWZmZXJlbnQgbmFtZXMgdGhhbgorICAgYHJlX3JlZ2lzdGVycycsIFBPU0lYIHVzZXMgYW4gYXJyYXkgb2Ygc3RydWN0dXJlcywgaW5zdGVhZCBvZiBhCisgICBzdHJ1Y3R1cmUgb2YgYXJyYXlzLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHJlZ29mZl90IHJtX3NvOyAgLyogQnl0ZSBvZmZzZXQgZnJvbSBzdHJpbmcncyBzdGFydCB0byBzdWJzdHJpbmcncyBzdGFydC4gICovCisgIHJlZ29mZl90IHJtX2VvOyAgLyogQnl0ZSBvZmZzZXQgZnJvbSBzdHJpbmcncyBzdGFydCB0byBzdWJzdHJpbmcncyBlbmQuICAqLworfSByZWdtYXRjaF90OworDAorLyogRGVjbGFyYXRpb25zIGZvciByb3V0aW5lcy4gICovCisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIFNldHMgdGhlIGN1cnJlbnQgZGVmYXVsdCBzeW50YXggdG8gU1lOVEFYLCBhbmQgcmV0dXJuIHRoZSBvbGQgc3ludGF4LgorICAgWW91IGNhbiBhbHNvIHNpbXBseSBhc3NpZ24gdG8gdGhlIGByZV9zeW50YXhfb3B0aW9ucycgdmFyaWFibGUuICAqLworZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zZXRfc3ludGF4IChyZWdfc3ludGF4X3QgX19zeW50YXgpOworCisvKiBDb21waWxlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gUEFUVEVSTiwgd2l0aCBsZW5ndGggTEVOR1RICisgICBhbmQgc3ludGF4IGdpdmVuIGJ5IHRoZSBnbG9iYWwgYHJlX3N5bnRheF9vcHRpb25zJywgaW50byB0aGUgYnVmZmVyCisgICBCVUZGRVIuICBSZXR1cm4gTlVMTCBpZiBzdWNjZXNzZnVsLCBhbmQgYW4gZXJyb3Igc3RyaW5nIGlmIG5vdC4gICovCitleHRlcm4gY29uc3QgY2hhciAqcmVfY29tcGlsZV9wYXR0ZXJuIChjb25zdCBjaGFyICpfX3BhdHRlcm4sIHNpemVfdCBfX2xlbmd0aCwKKwkJCQkgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZlcik7CisKKworLyogQ29tcGlsZSBhIGZhc3RtYXAgZm9yIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluIEJVRkZFUjsgdXNlZCB0bworICAgYWNjZWxlcmF0ZSBzZWFyY2hlcy4gIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwgYW5kIC0yIGlmIHdhcyBhbgorICAgaW50ZXJuYWwgZXJyb3IuICAqLworZXh0ZXJuIGludCByZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIpOworCisKKy8qIFNlYXJjaCBpbiB0aGUgc3RyaW5nIFNUUklORyAod2l0aCBsZW5ndGggTEVOR1RIKSBmb3IgdGhlIHBhdHRlcm4KKyAgIGNvbXBpbGVkIGludG8gQlVGRkVSLiAgU3RhcnQgc2VhcmNoaW5nIGF0IHBvc2l0aW9uIFNUQVJULCBmb3IgUkFOR0UKKyAgIGNoYXJhY3RlcnMuICBSZXR1cm4gdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBtYXRjaCwgLTEgZm9yIG5vCisgICBtYXRjaCwgb3IgLTIgZm9yIGFuIGludGVybmFsIGVycm9yLiAgQWxzbyByZXR1cm4gcmVnaXN0ZXIKKyAgIGluZm9ybWF0aW9uIGluIFJFR1MgKGlmIFJFR1MgYW5kIEJVRkZFUi0+bm9fc3ViIGFyZSBub256ZXJvKS4gICovCitleHRlcm4gaW50IHJlX3NlYXJjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZlciwgY29uc3QgY2hhciAqX19jc3RyaW5nLAorCQkgICAgICBpbnQgX19sZW5ndGgsIGludCBfX3N0YXJ0LCBpbnQgX19yYW5nZSwKKwkJICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzKTsKKworCisvKiBMaWtlIGByZV9zZWFyY2gnLCBidXQgc2VhcmNoIGluIHRoZSBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kCisgICBTVFJJTkcyLiAgQWxzbywgc3RvcCBzZWFyY2hpbmcgYXQgaW5kZXggU1RBUlQgKyBTVE9QLiAgKi8KK2V4dGVybiBpbnQgcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsCisJCQljb25zdCBjaGFyICpfX3N0cmluZzEsIGludCBfX2xlbmd0aDEsCisJCQljb25zdCBjaGFyICpfX3N0cmluZzIsIGludCBfX2xlbmd0aDIsIGludCBfX3N0YXJ0LAorCQkJaW50IF9fcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncywgaW50IF9fc3RvcCk7CisKKworLyogTGlrZSBgcmVfc2VhcmNoJywgYnV0IHJldHVybiBob3cgbWFueSBjaGFyYWN0ZXJzIGluIFNUUklORyB0aGUgcmVnZXhwCisgICBpbiBCVUZGRVIgbWF0Y2hlZCwgc3RhcnRpbmcgYXQgcG9zaXRpb24gU1RBUlQuICAqLworZXh0ZXJuIGludCByZV9tYXRjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZlciwgY29uc3QgY2hhciAqX19jc3RyaW5nLAorCQkgICAgIGludCBfX2xlbmd0aCwgaW50IF9fc3RhcnQsIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncyk7CisKKworLyogUmVsYXRlcyB0byBgcmVfbWF0Y2gnIGFzIGByZV9zZWFyY2hfMicgcmVsYXRlcyB0byBgcmVfc2VhcmNoJy4gICovCitleHRlcm4gaW50IHJlX21hdGNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsCisJCSAgICAgICBjb25zdCBjaGFyICpfX3N0cmluZzEsIGludCBfX2xlbmd0aDEsCisJCSAgICAgICBjb25zdCBjaGFyICpfX3N0cmluZzIsIGludCBfX2xlbmd0aDIsIGludCBfX3N0YXJ0LAorCQkgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzLCBpbnQgX19zdG9wKTsKKworCisvKiBTZXQgUkVHUyB0byBob2xkIE5VTV9SRUdTIHJlZ2lzdGVycywgc3RvcmluZyB0aGVtIGluIFNUQVJUUyBhbmQKKyAgIEVORFMuICBTdWJzZXF1ZW50IG1hdGNoZXMgdXNpbmcgQlVGRkVSIGFuZCBSRUdTIHdpbGwgdXNlIHRoaXMgbWVtb3J5CisgICBmb3IgcmVjb3JkaW5nIHJlZ2lzdGVyIGluZm9ybWF0aW9uLiAgU1RBUlRTIGFuZCBFTkRTIG11c3QgYmUKKyAgIGFsbG9jYXRlZCB3aXRoIG1hbGxvYywgYW5kIG11c3QgZWFjaCBiZSBhdCBsZWFzdCBgTlVNX1JFR1MgKiBzaXplb2YKKyAgIChyZWdvZmZfdCknIGJ5dGVzIGxvbmcuCisKKyAgIElmIE5VTV9SRUdTID09IDAsIHRoZW4gc3Vic2VxdWVudCBtYXRjaGVzIHNob3VsZCBhbGxvY2F0ZSB0aGVpciBvd24KKyAgIHJlZ2lzdGVyIGRhdGEuCisKKyAgIFVubGVzcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIGZpcnN0IHNlYXJjaCBvciBtYXRjaCB1c2luZworICAgUEFUVEVSTl9CVUZGRVIgd2lsbCBhbGxvY2F0ZSBpdHMgb3duIHJlZ2lzdGVyIGRhdGEsIHdpdGhvdXQKKyAgIGZyZWVpbmcgdGhlIG9sZCBkYXRhLiAgKi8KK2V4dGVybiB2b2lkIHJlX3NldF9yZWdpc3RlcnMgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsCisJCQkgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgX19udW1fcmVncywKKwkJCSAgICAgIHJlZ29mZl90ICpfX3N0YXJ0cywgcmVnb2ZmX3QgKl9fZW5kcyk7CisjZW5kaWYJLyogVXNlIEdOVSAqLworCisjaWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCAoZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9fVVNFX0JTRCkKKyMgaWZuZGVmIF9DUkFZCisvKiA0LjIgYnNkIGNvbXBhdGliaWxpdHkuICAqLworZXh0ZXJuIGNoYXIgKnJlX2NvbXAgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHJlX2V4ZWMgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZW5kaWYKKworLyogR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9fcmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKyAgICJyZXN0cmljdCIsIGFuZCAiY29uZmlndXJlIiBtYXkgaGF2ZSBkZWZpbmVkICJyZXN0cmljdCIuICAqLworI2lmbmRlZiBfX3Jlc3RyaWN0CisjIGlmICEgKDIgPCBfX0dOVUNfXyB8fCAoMiA9PSBfX0dOVUNfXyAmJiA5NSA8PSBfX0dOVUNfTUlOT1JfXykpCisjICBpZiBkZWZpbmVkIHJlc3RyaWN0IHx8IDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXworIyAgIGRlZmluZSBfX3Jlc3RyaWN0IHJlc3RyaWN0CisjICBlbHNlCisjICAgZGVmaW5lIF9fcmVzdHJpY3QKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKy8qIGdjYyAzLjEgYW5kIHVwIHN1cHBvcnQgdGhlIFtyZXN0cmljdF0gc3ludGF4LiAgKi8KKyNpZm5kZWYgX19yZXN0cmljdF9hcnIKKyMgaWYgKF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKSkgXAorICAgICAmJiAhZGVmaW5lZCBfX0dOVUdfXworIyAgZGVmaW5lIF9fcmVzdHJpY3RfYXJyIF9fcmVzdHJpY3QKKyMgZWxzZQorIyAgZGVmaW5lIF9fcmVzdHJpY3RfYXJyCisjIGVuZGlmCisjZW5kaWYKKworLyogUE9TSVggY29tcGF0aWJpbGl0eS4gICovCitleHRlcm4gaW50IHJlZ2NvbXAgKHJlZ2V4X3QgKl9fcmVzdHJpY3QgX19wcmVnLAorCQkgICAgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdHRlcm4sCisJCSAgICBpbnQgX19jZmxhZ3MpOworCitleHRlcm4gaW50IHJlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgX19wcmVnLAorCQkgICAgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NzdHJpbmcsIHNpemVfdCBfX25tYXRjaCwKKwkJICAgIHJlZ21hdGNoX3QgX19wbWF0Y2hbX19yZXN0cmljdF9hcnJdLAorCQkgICAgaW50IF9fZWZsYWdzKTsKKworZXh0ZXJuIHNpemVfdCByZWdlcnJvciAoaW50IF9fZXJyY29kZSwgY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBfX3ByZWcsCisJCQljaGFyICpfX3Jlc3RyaWN0IF9fZXJyYnVmLCBzaXplX3QgX19lcnJidWZfc2l6ZSk7CisKK2V4dGVybiB2b2lkIHJlZ2ZyZWUgKHJlZ2V4X3QgKl9fcHJlZyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYJLyogQysrICovCisKKyNlbmRpZiAvKiByZWdleC5oICovCmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuYyBiL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNTFjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuYwpAQCAtMCwwICsxLDE3NDMgQEAKKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCitzdGF0aWMgdm9pZCByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorCQkJCQlyZV9zdHJpbmdfdCAqcHN0ciwKKwkJCQkJUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGludCBpY2FzZSwKKwkJCQkJY29uc3QgcmVfZGZhX3QgKmRmYSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqY3JlYXRlX2NpX25ld3N0YXRlIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkgIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywKKwkJCQkJICB1bnNpZ25lZCBpbnQgaGFzaCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqY3JlYXRlX2NkX25ld3N0YXRlIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkgIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywKKwkJCQkJICB1bnNpZ25lZCBpbnQgY29udGV4dCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgaGFzaCkgaW50ZXJuYWxfZnVuY3Rpb247CisKKyNpZmRlZiBHQVdLCisjdW5kZWYgTUFYCS8qIHNhZmV0eSAqLworc3RhdGljIGludAorTUFYKHNpemVfdCBhLCBzaXplX3QgYikKK3sKKwlyZXR1cm4gKGEgPiBiID8gYSA6IGIpOworfQorI2VuZGlmCisMCisvKiBGdW5jdGlvbnMgZm9yIHN0cmluZyBvcGVyYXRpb24uICAqLworCisvKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlIHRoZSBidWZmZXJzLiAgSXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwKKyAgIHJlX3N0cmluZ19yZWNvbnN0cnVjdCBiZWZvcmUgdXNpbmcgdGhlIG9iamVjdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX2FsbG9jYXRlIChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgaW5pdF9sZW4sCisJCSAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgaW50IGljYXNlLCBjb25zdCByZV9kZmFfdCAqZGZhKQoreworICByZWdfZXJyY29kZV90IHJldDsKKyAgaW50IGluaXRfYnVmX2xlbjsKKworICAvKiBFbnN1cmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBmaXRzIGludG8gdGhlIGJ1ZmZlcnMuICAqLworICBpZiAoaW5pdF9sZW4gPCBkZmEtPm1iX2N1cl9tYXgpCisgICAgaW5pdF9sZW4gPSBkZmEtPm1iX2N1cl9tYXg7CisgIGluaXRfYnVmX2xlbiA9IChsZW4gKyAxIDwgaW5pdF9sZW4pID8gbGVuICsgMTogaW5pdF9sZW47CisgIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChzdHIsIGxlbiwgcHN0ciwgdHJhbnMsIGljYXNlLCBkZmEpOworCisgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIGluaXRfYnVmX2xlbik7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIHBzdHItPndvcmRfY2hhciA9IGRmYS0+d29yZF9jaGFyOworICBwc3RyLT53b3JkX29wc191c2VkID0gZGZhLT53b3JkX29wc191c2VkOworICBwc3RyLT5tYnMgPSBwc3RyLT5tYnNfYWxsb2NhdGVkID8gcHN0ci0+bWJzIDogKHVuc2lnbmVkIGNoYXIgKikgc3RyOworICBwc3RyLT52YWxpZF9sZW4gPSAocHN0ci0+bWJzX2FsbG9jYXRlZCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKSA/IDAgOiBsZW47CisgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBwc3RyLT52YWxpZF9sZW47CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSB0aGUgYnVmZmVycywgYW5kIGluaXRpYWxpemUgdGhlbS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKwkJICAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgaW50IGljYXNlLCBjb25zdCByZV9kZmFfdCAqZGZhKQoreworICByZWdfZXJyY29kZV90IHJldDsKKyAgbWVtc2V0IChwc3RyLCAnXDAnLCBzaXplb2YgKHJlX3N0cmluZ190KSk7CisgIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChzdHIsIGxlbiwgcHN0ciwgdHJhbnMsIGljYXNlLCBkZmEpOworCisgIGlmIChsZW4gPiAwKQorICAgIHsKKyAgICAgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIGxlbiArIDEpOworICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiByZXQ7CisgICAgfQorICBwc3RyLT5tYnMgPSBwc3RyLT5tYnNfYWxsb2NhdGVkID8gcHN0ci0+bWJzIDogKHVuc2lnbmVkIGNoYXIgKikgc3RyOworCisgIGlmIChpY2FzZSkKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCXsKKwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisJICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gcmV0OworCSAgICAgIGlmIChwc3RyLT52YWxpZF9yYXdfbGVuID49IGxlbikKKwkJYnJlYWs7CisJICAgICAgaWYgKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+dmFsaWRfbGVuICsgZGZhLT5tYl9jdXJfbWF4KQorCQlicmVhazsKKwkgICAgICByZXQgPSByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChwc3RyLCBwc3RyLT5idWZzX2xlbiAqIDIpOworCSAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIHJldDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKwlidWlsZF91cHBlcl9idWZmZXIgKHBzdHIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJeworCSAgaWYgKHRyYW5zICE9IE5VTEwpCisJICAgIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChwc3RyKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHBzdHItPnZhbGlkX2xlbiA9IHBzdHItPmJ1ZnNfbGVuOworCSAgICAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBwc3RyLT5idWZzX2xlbjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciByZV9zdHJpbmdfYWxsb2NhdGUsIGFuZCByZV9zdHJpbmdfY29uc3RydWN0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IG5ld19idWZfbGVuKQoreworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKyAgICB7CisgICAgICB3aW50X3QgKm5ld193Y3M7CisKKyAgICAgIC8qIEF2b2lkIG92ZXJmbG93IGluIHJlYWxsb2MuICAqLworICAgICAgY29uc3Qgc2l6ZV90IG1heF9vYmplY3Rfc2l6ZSA9IE1BWCAoc2l6ZW9mICh3aW50X3QpLCBzaXplb2YgKGludCkpOworICAgICAgaWYgKEJFIChTSVpFX01BWCAvIG1heF9vYmplY3Rfc2l6ZSA8IG5ld19idWZfbGVuLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKworICAgICAgbmV3X3djcyA9IHJlX3JlYWxsb2MgKHBzdHItPndjcywgd2ludF90LCBuZXdfYnVmX2xlbik7CisgICAgICBpZiAoQkUgKG5ld193Y3MgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBwc3RyLT53Y3MgPSBuZXdfd2NzOworICAgICAgaWYgKHBzdHItPm9mZnNldHMgIT0gTlVMTCkKKwl7CisJICBpbnQgKm5ld19vZmZzZXRzID0gcmVfcmVhbGxvYyAocHN0ci0+b2Zmc2V0cywgaW50LCBuZXdfYnVmX2xlbik7CisJICBpZiAoQkUgKG5ld19vZmZzZXRzID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIHBzdHItPm9mZnNldHMgPSBuZXdfb2Zmc2V0czsKKwl9CisgICAgfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworICBpZiAocHN0ci0+bWJzX2FsbG9jYXRlZCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpuZXdfbWJzID0gcmVfcmVhbGxvYyAocHN0ci0+bWJzLCB1bnNpZ25lZCBjaGFyLAorCQkJCQkgICBuZXdfYnVmX2xlbik7CisgICAgICBpZiAoQkUgKG5ld19tYnMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBwc3RyLT5tYnMgPSBuZXdfbWJzOworICAgIH0KKyAgcHN0ci0+YnVmc19sZW4gPSBuZXdfYnVmX2xlbjsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgcmVfc3RyaW5nX3QgKnBzdHIsCisJCQkgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGludCBpY2FzZSwKKwkJCSAgICBjb25zdCByZV9kZmFfdCAqZGZhKQoreworICBwc3RyLT5yYXdfbWJzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyOworICBwc3RyLT5sZW4gPSBsZW47CisgIHBzdHItPnJhd19sZW4gPSBsZW47CisgIHBzdHItPnRyYW5zID0gdHJhbnM7CisgIHBzdHItPmljYXNlID0gaWNhc2UgPyAxIDogMDsKKyAgcHN0ci0+bWJzX2FsbG9jYXRlZCA9ICh0cmFucyAhPSBOVUxMIHx8IGljYXNlKTsKKyAgcHN0ci0+bWJfY3VyX21heCA9IGRmYS0+bWJfY3VyX21heDsKKyAgcHN0ci0+aXNfdXRmOCA9IGRmYS0+aXNfdXRmODsKKyAgcHN0ci0+bWFwX25vdGFzY2lpID0gZGZhLT5tYXBfbm90YXNjaWk7CisgIHBzdHItPnN0b3AgPSBwc3RyLT5sZW47CisgIHBzdHItPnJhd19zdG9wID0gcHN0ci0+c3RvcDsKK30KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisKKy8qIEJ1aWxkIHdpZGUgY2hhcmFjdGVyIGJ1ZmZlciBQU1RSLT5XQ1MuCisgICBJZiB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgc3RyaW5nIGFyZToKKyAgICAgPG1iMT4oMCksIDxtYjE+KDEpLCA8bWIyPigwKSwgPG1iMj4oMSksIDxzYjM+CisgICBUaGVuIHdpZGUgY2hhcmFjdGVyIGJ1ZmZlciB3aWxsIGJlOgorICAgICA8d2MxPiAgICwgV0VPRiAgICAsIDx3YzI+ICAgLCBXRU9GICAgICwgPHdjMz4KKyAgIFdlIHVzZSBXRU9GIGZvciBwYWRkaW5nLCB0aGV5IGluZGljYXRlIHRoYXQgdGhlIHBvc2l0aW9uIGlzbid0CisgICBhIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLgorCisgICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIFBTVFItPlZBTElEX0xFTiBlbGVtZW50cyBhcmUgYWxyZWFkeQorICAgYnVpbHQgYW5kIHN0YXJ0cyBmcm9tIFBTVFItPlZBTElEX0xFTi4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorYnVpbGRfd2NzX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisjaWZkZWYgX0xJQkMKKyAgdW5zaWduZWQgY2hhciBidWZbTUJfTEVOX01BWF07CisgIGFzc2VydCAoTUJfTEVOX01BWCA+PSBwc3RyLT5tYl9jdXJfbWF4KTsKKyNlbHNlCisgIHVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKKyNlbmRpZgorICBtYnN0YXRlX3QgcHJldl9zdDsKKyAgaW50IGJ5dGVfaWR4LCBlbmRfaWR4LCByZW1haW5fbGVuOworICBzaXplX3QgbWJjbGVuOworCisgIC8qIEJ1aWxkIHRoZSBidWZmZXJzIGZyb20gcHN0ci0+dmFsaWRfbGVuIHRvIGVpdGhlciBwc3RyLT5sZW4gb3IKKyAgICAgcHN0ci0+YnVmc19sZW4uICAqLworICBlbmRfaWR4ID0gKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+bGVuKSA/IHBzdHItPmxlbiA6IHBzdHItPmJ1ZnNfbGVuOworICBmb3IgKGJ5dGVfaWR4ID0gcHN0ci0+dmFsaWRfbGVuOyBieXRlX2lkeCA8IGVuZF9pZHg7KQorICAgIHsKKyAgICAgIHdjaGFyX3Qgd2M7CisgICAgICBjb25zdCBjaGFyICpwOworCisgICAgICByZW1haW5fbGVuID0gZW5kX2lkeCAtIGJ5dGVfaWR4OworICAgICAgcHJldl9zdCA9IHBzdHItPmN1cl9zdGF0ZTsKKyAgICAgIC8qIEFwcGx5IHRoZSB0cmFuc2xhdGlvbiBpZiB3ZSBuZWVkLiAgKi8KKyAgICAgIGlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJeworCSAgaW50IGksIGNoOworCisJICBmb3IgKGkgPSAwOyBpIDwgcHN0ci0+bWJfY3VyX21heCAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorCSAgICB7CisJICAgICAgY2ggPSBwc3RyLT5yYXdfbWJzIFtwc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4ICsgaV07CisJICAgICAgYnVmW2ldID0gcHN0ci0+bWJzW2J5dGVfaWR4ICsgaV0gPSBwc3RyLT50cmFuc1tjaF07CisJICAgIH0KKwkgIHAgPSAoY29uc3QgY2hhciAqKSBidWY7CisJfQorICAgICAgZWxzZQorCXAgPSAoY29uc3QgY2hhciAqKSBwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeDsKKyAgICAgIG1iY2xlbiA9IF9fbWJydG93YyAoJndjLCBwLCByZW1haW5fbGVuLCAmcHN0ci0+Y3VyX3N0YXRlKTsKKyAgICAgIGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0yLCAwKSkKKwl7CisJICAvKiBUaGUgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UsIGZpbmlzaCB0byBidWlsZC4gICovCisJICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCSAgYnJlYWs7CisJfQorICAgICAgZWxzZSBpZiAoQkUgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gMCwgMCkpCisJeworCSAgLyogV2UgdHJlYXQgdGhlc2UgY2FzZXMgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCisJICBtYmNsZW4gPSAxOworCSAgd2MgPSAod2NoYXJfdCkgcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4XTsKKwkgIGlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJICAgIHdjID0gcHN0ci0+dHJhbnNbd2NdOworCSAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwl9CisKKyAgICAgIC8qIFdyaXRlIHdpZGUgY2hhcmFjdGVyIGFuZCBwYWRkaW5nLiAgKi8KKyAgICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9IHdjOworICAgICAgLyogV3JpdGUgcGFkZGluZ3MuICAqLworICAgICAgZm9yIChyZW1haW5fbGVuID0gYnl0ZV9pZHggKyBtYmNsZW4gLSAxOyBieXRlX2lkeCA8IHJlbWFpbl9sZW4gOykKKwlwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSBXRU9GOworICAgIH0KKyAgcHN0ci0+dmFsaWRfbGVuID0gYnl0ZV9pZHg7CisgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBieXRlX2lkeDsKK30KKworLyogQnVpbGQgd2lkZSBjaGFyYWN0ZXIgYnVmZmVyIFBTVFItPldDUyBsaWtlIGJ1aWxkX3djc19idWZmZXIsCisgICBidXQgZm9yIFJFR19JQ0FTRS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisgIG1ic3RhdGVfdCBwcmV2X3N0OworICBpbnQgc3JjX2lkeCwgYnl0ZV9pZHgsIGVuZF9pZHgsIHJlbWFpbl9sZW47CisgIHNpemVfdCBtYmNsZW47CisjaWZkZWYgX0xJQkMKKyAgY2hhciBidWZbTUJfTEVOX01BWF07CisgIGFzc2VydCAoTUJfTEVOX01BWCA+PSBwc3RyLT5tYl9jdXJfbWF4KTsKKyNlbHNlCisgIGNoYXIgYnVmWzY0XTsKKyNlbmRpZgorCisgIGJ5dGVfaWR4ID0gcHN0ci0+dmFsaWRfbGVuOworICBlbmRfaWR4ID0gKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+bGVuKSA/IHBzdHItPmxlbiA6IHBzdHItPmJ1ZnNfbGVuOworCisgIC8qIFRoZSBmb2xsb3dpbmcgb3B0aW1pemF0aW9uIGFzc3VtZXMgdGhhdCBBU0NJSSBjaGFyYWN0ZXJzIGNhbiBiZQorICAgICBtYXBwZWQgdG8gd2lkZSBjaGFyYWN0ZXJzIHdpdGggYSBzaW1wbGUgY2FzdC4gICovCisgIGlmICghIHBzdHItPm1hcF9ub3Rhc2NpaSAmJiBwc3RyLT50cmFucyA9PSBOVUxMICYmICFwc3RyLT5vZmZzZXRzX25lZWRlZCkKKyAgICB7CisgICAgICB3aGlsZSAoYnl0ZV9pZHggPCBlbmRfaWR4KQorCXsKKwkgIHdjaGFyX3Qgd2M7CisKKwkgIGlmIChpc2FzY2lpIChwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHhdKQorCSAgICAgICYmIG1ic2luaXQgKCZwc3RyLT5jdXJfc3RhdGUpKQorCSAgICB7CisJICAgICAgLyogSW4gY2FzZSBvZiBhIHNpbmdsZWJ5dGUgY2hhcmFjdGVyLiAgKi8KKwkgICAgICBwc3RyLT5tYnNbYnl0ZV9pZHhdCisJCT0gdG91cHBlciAocHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4XSk7CisJICAgICAgLyogVGhlIG5leHQgc3RlcCB1c2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2NoYXJfdCBpcyBlbmNvZGVkCisJCSBBU0NJSS1zYWZlOiBhbGwgQVNDSUkgdmFsdWVzIGNhbiBiZSBjb252ZXJ0ZWQgbGlrZSB0aGlzLiAgKi8KKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHhdID0gKHdjaGFyX3QpIHBzdHItPm1ic1tieXRlX2lkeF07CisJICAgICAgKytieXRlX2lkeDsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICByZW1haW5fbGVuID0gZW5kX2lkeCAtIGJ5dGVfaWR4OworCSAgcHJldl9zdCA9IHBzdHItPmN1cl9zdGF0ZTsKKwkgIG1iY2xlbiA9IF9fbWJydG93YyAoJndjLAorCQkJICAgICAgKChjb25zdCBjaGFyICopIHBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeAorCQkJICAgICAgICsgYnl0ZV9pZHgpLCByZW1haW5fbGVuLCAmcHN0ci0+Y3VyX3N0YXRlKTsKKwkgIGlmIChCRSAobWJjbGVuICsgMiA+IDIsIDEpKQorCSAgICB7CisJICAgICAgd2NoYXJfdCB3Y3UgPSB3YzsKKwkgICAgICBpZiAoaXN3bG93ZXIgKHdjKSkKKwkJeworCQkgIHNpemVfdCBtYmNkbGVuOworCisJCSAgd2N1ID0gdG93dXBwZXIgKHdjKTsKKwkJICBtYmNkbGVuID0gd2NydG9tYiAoYnVmLCB3Y3UsICZwcmV2X3N0KTsKKwkJICBpZiAoQkUgKG1iY2xlbiA9PSBtYmNkbGVuLCAxKSkKKwkJICAgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIGJ1ZiwgbWJjbGVuKTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIHNyY19pZHggPSBieXRlX2lkeDsKKwkJICAgICAgZ290byBvZmZzZXRzX25lZWRlZDsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwKKwkJCXBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4LCBtYmNsZW4pOworCSAgICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9IHdjdTsKKwkgICAgICAvKiBXcml0ZSBwYWRkaW5ncy4gICovCisJICAgICAgZm9yIChyZW1haW5fbGVuID0gYnl0ZV9pZHggKyBtYmNsZW4gLSAxOyBieXRlX2lkeCA8IHJlbWFpbl9sZW4gOykKKwkJcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gV0VPRjsKKwkgICAgfQorCSAgZWxzZSBpZiAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwKQorCSAgICB7CisJICAgICAgLyogSXQgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgb3IgJ1wwJy4gIEp1c3QgdXNlIHRoZSBieXRlLiAgKi8KKwkgICAgICBpbnQgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHhdOworCSAgICAgIHBzdHItPm1ic1tieXRlX2lkeF0gPSBjaDsKKwkgICAgICAvKiBBbmQgYWxzbyBjYXN0IGl0IHRvIHdpZGUgY2hhci4gICovCisJICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gKHdjaGFyX3QpIGNoOworCSAgICAgIGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0xLCAwKSkKKwkJcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogVGhlIGJ1ZmZlciBkb2Vzbid0IGhhdmUgZW5vdWdoIHNwYWNlLCBmaW5pc2ggdG8gYnVpbGQuICAqLworCSAgICAgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBwc3RyLT52YWxpZF9sZW4gPSBieXRlX2lkeDsKKyAgICAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBieXRlX2lkeDsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisgIGVsc2UKKyAgICBmb3IgKHNyY19pZHggPSBwc3RyLT52YWxpZF9yYXdfbGVuOyBieXRlX2lkeCA8IGVuZF9pZHg7KQorICAgICAgeworCXdjaGFyX3Qgd2M7CisJY29uc3QgY2hhciAqcDsKKyAgICAgIG9mZnNldHNfbmVlZGVkOgorCXJlbWFpbl9sZW4gPSBlbmRfaWR4IC0gYnl0ZV9pZHg7CisJcHJldl9zdCA9IHBzdHItPmN1cl9zdGF0ZTsKKwlpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCSAgeworCSAgICBpbnQgaSwgY2g7CisKKwkgICAgZm9yIChpID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKwkgICAgICB7CisJCWNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3X21ic19pZHggKyBzcmNfaWR4ICsgaV07CisJCWJ1ZltpXSA9IHBzdHItPnRyYW5zW2NoXTsKKwkgICAgICB9CisJICAgIHAgPSAoY29uc3QgY2hhciAqKSBidWY7CisJICB9CisJZWxzZQorCSAgcCA9IChjb25zdCBjaGFyICopIHBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHg7CisJbWJjbGVuID0gX19tYnJ0b3djICgmd2MsIHAsIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworCWlmIChCRSAobWJjbGVuICsgMiA+IDIsIDEpKQorCSAgeworCSAgICB3Y2hhcl90IHdjdSA9IHdjOworCSAgICBpZiAoaXN3bG93ZXIgKHdjKSkKKwkgICAgICB7CisJCXNpemVfdCBtYmNkbGVuOworCisJCXdjdSA9IHRvd3VwcGVyICh3Yyk7CisJCW1iY2RsZW4gPSB3Y3J0b21iICgoY2hhciAqKSBidWYsIHdjdSwgJnByZXZfc3QpOworCQlpZiAoQkUgKG1iY2xlbiA9PSBtYmNkbGVuLCAxKSkKKwkJICBtZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LCBidWYsIG1iY2xlbik7CisJCWVsc2UgaWYgKG1iY2RsZW4gIT0gKHNpemVfdCkgLTEpCisJCSAgeworCQkgICAgc2l6ZV90IGk7CisKKwkJICAgIGlmIChieXRlX2lkeCArIG1iY2RsZW4gPiBwc3RyLT5idWZzX2xlbikKKwkJICAgICAgeworCQkJcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkJCWJyZWFrOworCQkgICAgICB9CisKKwkJICAgIGlmIChwc3RyLT5vZmZzZXRzID09IE5VTEwpCisJCSAgICAgIHsKKwkJCXBzdHItPm9mZnNldHMgPSByZV9tYWxsb2MgKGludCwgcHN0ci0+YnVmc19sZW4pOworCisJCQlpZiAocHN0ci0+b2Zmc2V0cyA9PSBOVUxMKQorCQkJICByZXR1cm4gUkVHX0VTUEFDRTsKKwkJICAgICAgfQorCQkgICAgaWYgKCFwc3RyLT5vZmZzZXRzX25lZWRlZCkKKwkJICAgICAgeworCQkJZm9yIChpID0gMDsgaSA8IChzaXplX3QpIGJ5dGVfaWR4OyArK2kpCisJCQkgIHBzdHItPm9mZnNldHNbaV0gPSBpOworCQkJcHN0ci0+b2Zmc2V0c19uZWVkZWQgPSAxOworCQkgICAgICB9CisKKwkJICAgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIGJ1ZiwgbWJjZGxlbik7CisJCSAgICBwc3RyLT53Y3NbYnl0ZV9pZHhdID0gd2N1OworCQkgICAgcHN0ci0+b2Zmc2V0c1tieXRlX2lkeF0gPSBzcmNfaWR4OworCQkgICAgZm9yIChpID0gMTsgaSA8IG1iY2RsZW47ICsraSkKKwkJICAgICAgeworCQkJcHN0ci0+b2Zmc2V0c1tieXRlX2lkeCArIGldCisJCQkgID0gc3JjX2lkeCArIChpIDwgbWJjbGVuID8gaSA6IG1iY2xlbiAtIDEpOworCQkJcHN0ci0+d2NzW2J5dGVfaWR4ICsgaV0gPSBXRU9GOworCQkgICAgICB9CisJCSAgICBwc3RyLT5sZW4gKz0gbWJjZGxlbiAtIG1iY2xlbjsKKwkJICAgIGlmIChwc3RyLT5yYXdfc3RvcCA+IHNyY19pZHgpCisJCSAgICAgIHBzdHItPnN0b3AgKz0gbWJjZGxlbiAtIG1iY2xlbjsKKwkJICAgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pCisJCQkgICAgICA/IHBzdHItPmxlbiA6IHBzdHItPmJ1ZnNfbGVuOworCQkgICAgYnl0ZV9pZHggKz0gbWJjZGxlbjsKKwkJICAgIHNyY19pZHggKz0gbWJjbGVuOworCQkgICAgY29udGludWU7CisJCSAgfQorCQllbHNlCisJCSAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgcCwgbWJjbGVuKTsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICBtZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LCBwLCBtYmNsZW4pOworCisJICAgIGlmIChCRSAocHN0ci0+b2Zmc2V0c19uZWVkZWQgIT0gMCwgMCkpCisJICAgICAgeworCQlzaXplX3QgaTsKKwkJZm9yIChpID0gMDsgaSA8IG1iY2xlbjsgKytpKQorCQkgIHBzdHItPm9mZnNldHNbYnl0ZV9pZHggKyBpXSA9IHNyY19pZHggKyBpOworCSAgICAgIH0KKwkgICAgc3JjX2lkeCArPSBtYmNsZW47CisKKwkgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gd2N1OworCSAgICAvKiBXcml0ZSBwYWRkaW5ncy4gICovCisJICAgIGZvciAocmVtYWluX2xlbiA9IGJ5dGVfaWR4ICsgbWJjbGVuIC0gMTsgYnl0ZV9pZHggPCByZW1haW5fbGVuIDspCisJICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gV0VPRjsKKwkgIH0KKwllbHNlIGlmIChtYmNsZW4gPT0gKHNpemVfdCkgLTEgfHwgbWJjbGVuID09IDApCisJICB7CisJICAgIC8qIEl0IGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIG9yICdcMCcuICBKdXN0IHVzZSB0aGUgYnl0ZS4gICovCisJICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBzcmNfaWR4XTsKKworCSAgICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCSAgICAgIGNoID0gcHN0ci0+dHJhbnMgW2NoXTsKKwkgICAgcHN0ci0+bWJzW2J5dGVfaWR4XSA9IGNoOworCisJICAgIGlmIChCRSAocHN0ci0+b2Zmc2V0c19uZWVkZWQgIT0gMCwgMCkpCisJICAgICAgcHN0ci0+b2Zmc2V0c1tieXRlX2lkeF0gPSBzcmNfaWR4OworCSAgICArK3NyY19pZHg7CisKKwkgICAgLyogQW5kIGFsc28gY2FzdCBpdCB0byB3aWRlIGNoYXIuICAqLworCSAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSAod2NoYXJfdCkgY2g7CisJICAgIGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0xLCAwKSkKKwkgICAgICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgLyogVGhlIGJ1ZmZlciBkb2Vzbid0IGhhdmUgZW5vdWdoIHNwYWNlLCBmaW5pc2ggdG8gYnVpbGQuICAqLworCSAgICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCSAgICBicmVhazsKKwkgIH0KKyAgICAgIH0KKyAgcHN0ci0+dmFsaWRfbGVuID0gYnl0ZV9pZHg7CisgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBzcmNfaWR4OworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFNraXAgY2hhcmFjdGVycyB1bnRpbCB0aGUgaW5kZXggYmVjb21lcyBncmVhdGVyIHRoYW4gTkVXX1JBV19JRFguCisgICBSZXR1cm4gdGhlIGluZGV4LiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19za2lwX2NoYXJzIChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IG5ld19yYXdfaWR4LCB3aW50X3QgKmxhc3Rfd2MpCit7CisgIG1ic3RhdGVfdCBwcmV2X3N0OworICBpbnQgcmF3YnVmX2lkeDsKKyAgc2l6ZV90IG1iY2xlbjsKKyAgd2ludF90IHdjID0gV0VPRjsKKworICAvKiBTa2lwIHRoZSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrLiAgKi8KKyAgZm9yIChyYXdidWZfaWR4ID0gcHN0ci0+cmF3X21ic19pZHggKyBwc3RyLT52YWxpZF9yYXdfbGVuOworICAgICAgIHJhd2J1Zl9pZHggPCBuZXdfcmF3X2lkeDspCisgICAgeworICAgICAgd2NoYXJfdCB3YzI7CisgICAgICBpbnQgcmVtYWluX2xlbiA9IHBzdHItPmxlbiAtIHJhd2J1Zl9pZHg7CisgICAgICBwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworICAgICAgbWJjbGVuID0gX19tYnJ0b3djICgmd2MyLCAoY29uc3QgY2hhciAqKSBwc3RyLT5yYXdfbWJzICsgcmF3YnVmX2lkeCwKKwkJCSAgcmVtYWluX2xlbiwgJnBzdHItPmN1cl9zdGF0ZSk7CisgICAgICBpZiAoQkUgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMiB8fCBtYmNsZW4gPT0gKHNpemVfdCkgLTEgfHwgbWJjbGVuID09IDAsIDApKQorCXsKKwkgIC8qIFdlIHRyZWF0IHRoZXNlIGNhc2VzIGFzIGEgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyLiAgKi8KKwkgIGlmIChtYmNsZW4gPT0gMCB8fCByZW1haW5fbGVuID09IDApCisJICAgIHdjID0gTCdcMCc7CisJICBlbHNlCisJICAgIHdjID0gKih1bnNpZ25lZCBjaGFyICopIChwc3RyLT5yYXdfbWJzICsgcmF3YnVmX2lkeCk7CisJICBtYmNsZW4gPSAxOworCSAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwl9CisgICAgICBlbHNlCisJd2MgPSAod2ludF90KSB3YzI7CisgICAgICAvKiBUaGVuIHByb2NlZWQgdGhlIG5leHQgY2hhcmFjdGVyLiAgKi8KKyAgICAgIHJhd2J1Zl9pZHggKz0gbWJjbGVuOworICAgIH0KKyAgKmxhc3Rfd2MgPSAod2ludF90KSB3YzsKKyAgcmV0dXJuIHJhd2J1Zl9pZHg7Cit9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisKKy8qIEJ1aWxkIHRoZSBidWZmZXIgUFNUUi0+TUJTLCBhbmQgYXBwbHkgdGhlIHRyYW5zbGF0aW9uIGlmIHdlIG5lZWQuCisgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gY2FzZSBvZiBSRUdfSUNBU0UuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK2J1aWxkX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisgIGludCBjaGFyX2lkeCwgZW5kX2lkeDsKKyAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKworICBmb3IgKGNoYXJfaWR4ID0gcHN0ci0+dmFsaWRfbGVuOyBjaGFyX2lkeCA8IGVuZF9pZHg7ICsrY2hhcl9pZHgpCisgICAgeworICAgICAgaW50IGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGNoYXJfaWR4XTsKKyAgICAgIGlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJY2ggPSBwc3RyLT50cmFuc1tjaF07CisgICAgICBpZiAoaXNsb3dlciAoY2gpKQorCXBzdHItPm1ic1tjaGFyX2lkeF0gPSB0b3VwcGVyIChjaCk7CisgICAgICBlbHNlCisJcHN0ci0+bWJzW2NoYXJfaWR4XSA9IGNoOworICAgIH0KKyAgcHN0ci0+dmFsaWRfbGVuID0gY2hhcl9pZHg7CisgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBjaGFyX2lkeDsKK30KKworLyogQXBwbHkgVFJBTlMgdG8gdGhlIGJ1ZmZlciBpbiBQU1RSLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisgIGludCBidWZfaWR4LCBlbmRfaWR4OworICBlbmRfaWR4ID0gKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+bGVuKSA/IHBzdHItPmxlbiA6IHBzdHItPmJ1ZnNfbGVuOworCisgIGZvciAoYnVmX2lkeCA9IHBzdHItPnZhbGlkX2xlbjsgYnVmX2lkeCA8IGVuZF9pZHg7ICsrYnVmX2lkeCkKKyAgICB7CisgICAgICBpbnQgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnVmX2lkeF07CisgICAgICBwc3RyLT5tYnNbYnVmX2lkeF0gPSBwc3RyLT50cmFuc1tjaF07CisgICAgfQorCisgIHBzdHItPnZhbGlkX2xlbiA9IGJ1Zl9pZHg7CisgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBidWZfaWR4OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlLWNvbnN0cnVjdCB0aGUgYnVmZmVycy4KKyAgIENvbmNyZXRlbHksIGNvbnZlcnQgdG8gd2lkZSBjaGFyYWN0ZXIgaW4gY2FzZSBvZiBwc3RyLT5tYl9jdXJfbWF4ID4gMSwKKyAgIGNvbnZlcnQgdG8gdXBwZXIgY2FzZSBpbiBjYXNlIG9mIFJFR19JQ0FTRSwgYXBwbHkgdHJhbnNsYXRpb24uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCit7CisgIGludCBvZmZzZXQgPSBpZHggLSBwc3RyLT5yYXdfbWJzX2lkeDsKKyAgaWYgKEJFIChvZmZzZXQgPCAwLCAwKSkKKyAgICB7CisgICAgICAvKiBSZXNldCBidWZmZXIuICAqLworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICBwc3RyLT5sZW4gPSBwc3RyLT5yYXdfbGVuOworICAgICAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9wOworICAgICAgcHN0ci0+dmFsaWRfbGVuID0gMDsKKyAgICAgIHBzdHItPnJhd19tYnNfaWR4ID0gMDsKKyAgICAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSAwOworICAgICAgcHN0ci0+b2Zmc2V0c19uZWVkZWQgPSAwOworICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSAoKGVmbGFncyAmIFJFR19OT1RCT0wpID8gQ09OVEVYVF9CRUdCVUYKKwkJCSAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVYVF9CRUdCVUYpOworICAgICAgaWYgKCFwc3RyLT5tYnNfYWxsb2NhdGVkKQorCXBzdHItPm1icyA9ICh1bnNpZ25lZCBjaGFyICopIHBzdHItPnJhd19tYnM7CisgICAgICBvZmZzZXQgPSBpZHg7CisgICAgfQorCisgIGlmIChCRSAob2Zmc2V0ICE9IDAsIDEpKQorICAgIHsKKyAgICAgIC8qIFNob3VsZCB0aGUgYWxyZWFkeSBjaGVja2VkIGNoYXJhY3RlcnMgYmUga2VwdD8gICovCisgICAgICBpZiAoQkUgKG9mZnNldCA8IHBzdHItPnZhbGlkX3Jhd19sZW4sIDEpKQorCXsKKwkgIC8qIFllcywgbW92ZSB0aGVtIHRvIHRoZSBmcm9udCBvZiB0aGUgYnVmZmVyLiAgKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgaWYgKEJFIChwc3RyLT5vZmZzZXRzX25lZWRlZCwgMCkpCisJICAgIHsKKwkgICAgICBpbnQgbG93ID0gMCwgaGlnaCA9IHBzdHItPnZhbGlkX2xlbiwgbWlkOworCSAgICAgIGRvCisJCXsKKwkJICBtaWQgPSBsb3cgKyAoaGlnaCAtIGxvdykgLyAyOworCQkgIGlmIChwc3RyLT5vZmZzZXRzW21pZF0gPiBvZmZzZXQpCisJCSAgICBoaWdoID0gbWlkOworCQkgIGVsc2UgaWYgKHBzdHItPm9mZnNldHNbbWlkXSA8IG9mZnNldCkKKwkJICAgIGxvdyA9IG1pZCArIDE7CisJCSAgZWxzZQorCQkgICAgYnJlYWs7CisJCX0KKwkgICAgICB3aGlsZSAobG93IDwgaGlnaCk7CisJICAgICAgaWYgKHBzdHItPm9mZnNldHNbbWlkXSA8IG9mZnNldCkKKwkJKyttaWQ7CisJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAocHN0ciwgbWlkIC0gMSwKKwkJCQkJCQllZmxhZ3MpOworCSAgICAgIC8qIFRoaXMgY2FuIGJlIHF1aXRlIGNvbXBsaWNhdGVkLCBzbyBoYW5kbGUgc3BlY2lhbGx5CisJCSBvbmx5IHRoZSBjb21tb24gYW5kIGVhc3kgY2FzZSB3aGVyZSB0aGUgY2hhcmFjdGVyIHdpdGgKKwkJIGRpZmZlcmVudCBsZW5ndGggcmVwcmVzZW50YXRpb24gb2YgbG93ZXIgYW5kIHVwcGVyCisJCSBjYXNlIGlzIHByZXNlbnQgYXQgb3IgYWZ0ZXIgb2Zmc2V0LiAgKi8KKwkgICAgICBpZiAocHN0ci0+dmFsaWRfbGVuID4gb2Zmc2V0CisJCSAgJiYgbWlkID09IG9mZnNldCAmJiBwc3RyLT5vZmZzZXRzW21pZF0gPT0gb2Zmc2V0KQorCQl7CisJCSAgbWVtbW92ZSAocHN0ci0+d2NzLCBwc3RyLT53Y3MgKyBvZmZzZXQsCisJCQkgICAocHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KSAqIHNpemVvZiAod2ludF90KSk7CisJCSAgbWVtbW92ZSAocHN0ci0+bWJzLCBwc3RyLT5tYnMgKyBvZmZzZXQsIHBzdHItPnZhbGlkX2xlbiAtIG9mZnNldCk7CisJCSAgcHN0ci0+dmFsaWRfbGVuIC09IG9mZnNldDsKKwkJICBwc3RyLT52YWxpZF9yYXdfbGVuIC09IG9mZnNldDsKKwkJICBmb3IgKGxvdyA9IDA7IGxvdyA8IHBzdHItPnZhbGlkX2xlbjsgbG93KyspCisJCSAgICBwc3RyLT5vZmZzZXRzW2xvd10gPSBwc3RyLT5vZmZzZXRzW2xvdyArIG9mZnNldF0gLSBvZmZzZXQ7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBPdGhlcndpc2UsIGp1c3QgZmluZCBvdXQgaG93IGxvbmcgdGhlIHBhcnRpYWwgbXVsdGlieXRlCisJCSAgICAgY2hhcmFjdGVyIGF0IG9mZnNldCBpcyBhbmQgZmlsbCBpdCB3aXRoIFdFT0YvMjU1LiAgKi8KKwkJICBwc3RyLT5sZW4gPSBwc3RyLT5yYXdfbGVuIC0gaWR4ICsgb2Zmc2V0OworCQkgIHBzdHItPnN0b3AgPSBwc3RyLT5yYXdfc3RvcCAtIGlkeCArIG9mZnNldDsKKwkJICBwc3RyLT5vZmZzZXRzX25lZWRlZCA9IDA7CisJCSAgd2hpbGUgKG1pZCA+IDAgJiYgcHN0ci0+b2Zmc2V0c1ttaWQgLSAxXSA9PSBvZmZzZXQpCisJCSAgICAtLW1pZDsKKwkJICB3aGlsZSAobWlkIDwgcHN0ci0+dmFsaWRfbGVuKQorCQkgICAgaWYgKHBzdHItPndjc1ttaWRdICE9IFdFT0YpCisJCSAgICAgIGJyZWFrOworCQkgICAgZWxzZQorCQkgICAgICArK21pZDsKKwkJICBpZiAobWlkID09IHBzdHItPnZhbGlkX2xlbikKKwkJICAgIHBzdHItPnZhbGlkX2xlbiA9IDA7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBwc3RyLT52YWxpZF9sZW4gPSBwc3RyLT5vZmZzZXRzW21pZF0gLSBvZmZzZXQ7CisJCSAgICAgIGlmIChwc3RyLT52YWxpZF9sZW4pCisJCQl7CisJCQkgIGZvciAobG93ID0gMDsgbG93IDwgcHN0ci0+dmFsaWRfbGVuOyArK2xvdykKKwkJCSAgICBwc3RyLT53Y3NbbG93XSA9IFdFT0Y7CisJCQkgIG1lbXNldCAocHN0ci0+bWJzLCAyNTUsIHBzdHItPnZhbGlkX2xlbik7CisJCQl9CisJCSAgICB9CisJCSAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKwkJfQorCSAgICB9CisJICBlbHNlCisjZW5kaWYKKwkgICAgeworCSAgICAgIHBzdHItPnRpcF9jb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKHBzdHIsIG9mZnNldCAtIDEsCisJCQkJCQkJZWZsYWdzKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwkJbWVtbW92ZSAocHN0ci0+d2NzLCBwc3RyLT53Y3MgKyBvZmZzZXQsCisJCQkgKHBzdHItPnZhbGlkX2xlbiAtIG9mZnNldCkgKiBzaXplb2YgKHdpbnRfdCkpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgICAgaWYgKEJFIChwc3RyLT5tYnNfYWxsb2NhdGVkLCAwKSkKKwkJbWVtbW92ZSAocHN0ci0+bWJzLCBwc3RyLT5tYnMgKyBvZmZzZXQsCisJCQkgcHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KTsKKwkgICAgICBwc3RyLT52YWxpZF9sZW4gLT0gb2Zmc2V0OworCSAgICAgIHBzdHItPnZhbGlkX3Jhd19sZW4gLT0gb2Zmc2V0OworI2lmIERFQlVHCisJICAgICAgYXNzZXJ0IChwc3RyLT52YWxpZF9sZW4gPiAwKTsKKyNlbmRpZgorCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgLyogTm8sIHNraXAgYWxsIGNoYXJhY3RlcnMgdW50aWwgSURYLiAgKi8KKwkgIGludCBwcmV2X3ZhbGlkX2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKworCSAgaWYgKEJFIChwc3RyLT5vZmZzZXRzX25lZWRlZCwgMCkpCisJICAgIHsKKwkgICAgICBwc3RyLT5sZW4gPSBwc3RyLT5yYXdfbGVuIC0gaWR4ICsgb2Zmc2V0OworCSAgICAgIHBzdHItPnN0b3AgPSBwc3RyLT5yYXdfc3RvcCAtIGlkeCArIG9mZnNldDsKKwkgICAgICBwc3RyLT5vZmZzZXRzX25lZWRlZCA9IDA7CisJICAgIH0KKyNlbmRpZgorCSAgcHN0ci0+dmFsaWRfbGVuID0gMDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorCSAgICB7CisJICAgICAgaW50IHdjc19pZHg7CisJICAgICAgd2ludF90IHdjID0gV0VPRjsKKworCSAgICAgIGlmIChwc3RyLT5pc191dGY4KQorCQl7CisJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqcmF3LCAqcCwgKmVuZDsKKworCQkgIC8qIFNwZWNpYWwgY2FzZSBVVEYtOC4gIE11bHRpLWJ5dGUgY2hhcnMgc3RhcnQgd2l0aCBhbnkKKwkJICAgICBieXRlIG90aGVyIHRoYW4gMHg4MCAtIDB4YmYuICAqLworCQkgIHJhdyA9IHBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeDsKKwkJICBlbmQgPSByYXcgKyAob2Zmc2V0IC0gcHN0ci0+bWJfY3VyX21heCk7CisJCSAgaWYgKGVuZCA8IHBzdHItPnJhd19tYnMpCisJCSAgICBlbmQgPSBwc3RyLT5yYXdfbWJzOworCQkgIHAgPSByYXcgKyBvZmZzZXQgLSAxOworI2lmZGVmIF9MSUJDCisJCSAgLyogV2Uga25vdyB0aGUgd2NoYXJfdCBlbmNvZGluZyBpcyBVQ1M0LCBzbyBmb3IgdGhlIHNpbXBsZQorCQkgICAgIGNhc2UsIEFTQ0lJIGNoYXJhY3RlcnMsIHNraXAgdGhlIGNvbnZlcnNpb24gc3RlcC4gICovCisJCSAgaWYgKGlzYXNjaWkgKCpwKSAmJiBCRSAocHN0ci0+dHJhbnMgPT0gTlVMTCwgMSkpCisJCSAgICB7CisJCSAgICAgIG1lbXNldCAoJnBzdHItPmN1cl9zdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKwkJICAgICAgLyogcHN0ci0+dmFsaWRfbGVuID0gMDsgKi8KKwkJICAgICAgd2MgPSAod2NoYXJfdCkgKnA7CisJCSAgICB9CisJCSAgZWxzZQorI2VuZGlmCisJCSAgICBmb3IgKDsgcCA+PSBlbmQ7IC0tcCkKKwkJICAgICAgaWYgKCgqcCAmIDB4YzApICE9IDB4ODApCisJCQl7CisJCQkgIG1ic3RhdGVfdCBjdXJfc3RhdGU7CisJCQkgIHdjaGFyX3Qgd2MyOworCQkJICBpbnQgbWxlbiA9IHJhdyArIHBzdHItPmxlbiAtIHA7CisJCQkgIHVuc2lnbmVkIGNoYXIgYnVmWzZdOworCQkJICBzaXplX3QgbWJjbGVuOworCisJCQkgIGlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJCQkgICAgeworCQkJICAgICAgaW50IGkgPSBtbGVuIDwgNiA/IG1sZW4gOiA2OworCQkJICAgICAgd2hpbGUgKC0taSA+PSAwKQorCQkJCWJ1ZltpXSA9IHBzdHItPnRyYW5zW3BbaV1dOworCQkJICAgIH0KKwkJCSAgLyogWFhYIERvbid0IHVzZSBtYnJ0b3djLCB3ZSBrbm93IHdoaWNoIGNvbnZlcnNpb24KKwkJCSAgICAgdG8gdXNlIChVVEYtOCAtPiBVQ1M0KS4gICovCisJCQkgIG1lbXNldCAoJmN1cl9zdGF0ZSwgMCwgc2l6ZW9mIChjdXJfc3RhdGUpKTsKKwkJCSAgbWJjbGVuID0gX19tYnJ0b3djICgmd2MyLCAoY29uc3QgY2hhciAqKSBwLCBtbGVuLAorCQkJCQkgICAgICAmY3VyX3N0YXRlKTsKKwkJCSAgaWYgKHJhdyArIG9mZnNldCAtIHAgPD0gbWJjbGVuCisJCQkgICAgICAmJiBtYmNsZW4gPCAoc2l6ZV90KSAtMikKKwkJCSAgICB7CisJCQkgICAgICBtZW1zZXQgKCZwc3RyLT5jdXJfc3RhdGUsICdcMCcsCisJCQkJICAgICAgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKwkJCSAgICAgIHBzdHItPnZhbGlkX2xlbiA9IG1iY2xlbiAtIChyYXcgKyBvZmZzZXQgLSBwKTsKKwkJCSAgICAgIHdjID0gd2MyOworCQkJICAgIH0KKwkJCSAgYnJlYWs7CisJCQl9CisJCX0KKworCSAgICAgIGlmICh3YyA9PSBXRU9GKQorCQlwc3RyLT52YWxpZF9sZW4gPSByZV9zdHJpbmdfc2tpcF9jaGFycyAocHN0ciwgaWR4LCAmd2MpIC0gaWR4OworCSAgICAgIGlmICh3YyA9PSBXRU9GKQorCQlwc3RyLT50aXBfY29udGV4dAorCQkgID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKHBzdHIsIHByZXZfdmFsaWRfbGVuIC0gMSwgZWZsYWdzKTsKKwkgICAgICBlbHNlCisJCXBzdHItPnRpcF9jb250ZXh0ID0gKChCRSAocHN0ci0+d29yZF9vcHNfdXNlZCAhPSAwLCAwKQorCQkJCSAgICAgICYmIElTX1dJREVfV09SRF9DSEFSICh3YykpCisJCQkJICAgICA/IENPTlRFWFRfV09SRAorCQkJCSAgICAgOiAoKElTX1dJREVfTkVXTElORSAod2MpCisJCQkJCSAmJiBwc3RyLT5uZXdsaW5lX2FuY2hvcikKKwkJCQkJPyBDT05URVhUX05FV0xJTkUgOiAwKSk7CisJICAgICAgaWYgKEJFIChwc3RyLT52YWxpZF9sZW4sIDApKQorCQl7CisJCSAgZm9yICh3Y3NfaWR4ID0gMDsgd2NzX2lkeCA8IHBzdHItPnZhbGlkX2xlbjsgKyt3Y3NfaWR4KQorCQkgICAgcHN0ci0+d2NzW3djc19pZHhdID0gV0VPRjsKKwkJICBpZiAocHN0ci0+bWJzX2FsbG9jYXRlZCkKKwkJICAgIG1lbXNldCAocHN0ci0+bWJzLCAyNTUsIHBzdHItPnZhbGlkX2xlbik7CisJCX0KKwkgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworCSAgICB9CisJICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgICAgeworCSAgICAgIGludCBjID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIG9mZnNldCAtIDFdOworCSAgICAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSAwOworCSAgICAgIGlmIChwc3RyLT50cmFucykKKwkJYyA9IHBzdHItPnRyYW5zW2NdOworCSAgICAgIHBzdHItPnRpcF9jb250ZXh0ID0gKGJpdHNldF9jb250YWluIChwc3RyLT53b3JkX2NoYXIsIGMpCisJCQkJICAgPyBDT05URVhUX1dPUkQKKwkJCQkgICA6ICgoSVNfTkVXTElORSAoYykgJiYgcHN0ci0+bmV3bGluZV9hbmNob3IpCisJCQkJICAgICAgPyBDT05URVhUX05FV0xJTkUgOiAwKSk7CisJICAgIH0KKwl9CisgICAgICBpZiAoIUJFIChwc3RyLT5tYnNfYWxsb2NhdGVkLCAwKSkKKwlwc3RyLT5tYnMgKz0gb2Zmc2V0OworICAgIH0KKyAgcHN0ci0+cmF3X21ic19pZHggPSBpZHg7CisgIHBzdHItPmxlbiAtPSBvZmZzZXQ7CisgIHBzdHItPnN0b3AgLT0gb2Zmc2V0OworCisgIC8qIFRoZW4gYnVpbGQgdGhlIGJ1ZmZlcnMuICAqLworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKyAgICB7CisgICAgICBpZiAocHN0ci0+aWNhc2UpCisJeworCSAgcmVnX2VycmNvZGVfdCByZXQgPSBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChwc3RyKTsKKwkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIHJldDsKKwl9CisgICAgICBlbHNlCisJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgfQorICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICBpZiAoQkUgKHBzdHItPm1ic19hbGxvY2F0ZWQsIDApKQorICAgICAgeworCWlmIChwc3RyLT5pY2FzZSkKKwkgIGJ1aWxkX3VwcGVyX2J1ZmZlciAocHN0cik7CisJZWxzZSBpZiAocHN0ci0+dHJhbnMgIT0gTlVMTCkKKwkgIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChwc3RyKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwc3RyLT52YWxpZF9sZW4gPSBwc3RyLT5sZW47CisKKyAgcHN0ci0+Y3VyX2lkeCA9IDA7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9zdHJpbmdfcGVla19ieXRlX2Nhc2UgKGNvbnN0IHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4KQoreworICBpbnQgY2gsIG9mZjsKKworICAvKiBIYW5kbGUgdGhlIGNvbW1vbiAoZWFzaWVzdCkgY2FzZXMgZmlyc3QuICAqLworICBpZiAoQkUgKCFwc3RyLT5tYnNfYWxsb2NhdGVkLCAxKSkKKyAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMQorICAgICAgJiYgISByZV9zdHJpbmdfaXNfc2luZ2xlX2J5dGVfY2hhciAocHN0ciwgcHN0ci0+Y3VyX2lkeCArIGlkeCkpCisgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisjZW5kaWYKKworICBvZmYgPSBwc3RyLT5jdXJfaWR4ICsgaWR4OworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChwc3RyLT5vZmZzZXRzX25lZWRlZCkKKyAgICBvZmYgPSBwc3RyLT5vZmZzZXRzW29mZl07CisjZW5kaWYKKworICBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBvZmZdOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogRW5zdXJlIHRoYXQgZS5nLiBmb3IgdHJfVFIuVVRGLTggQkFDS1NMQVNIIERPVExFU1MgU01BTEwgTEVUVEVSIEkKKyAgICAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIENBUElUQUwgTEVUVEVSIEkgaW5zdGVhZCBvZiBmaXJzdCBieXRlIG9mCisgICAgIERPVExFU1MgU01BTEwgTEVUVEVSIEkuICBUaGUgbGF0dGVyIHdvdWxkIGNvbmZ1c2UgdGhlIHBhcnNlciwKKyAgICAgc2luY2UgcGVla19ieXRlX2Nhc2UgZG9lc24ndCBhZHZhbmNlIGN1cl9pZHggaW4gYW55IHdheS4gICovCisgIGlmIChwc3RyLT5vZmZzZXRzX25lZWRlZCAmJiAhaXNhc2NpaSAoY2gpKQorICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworI2VuZGlmCisKKyAgcmV0dXJuIGNoOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhcgoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX3N0cmluZ19mZXRjaF9ieXRlX2Nhc2UgKHJlX3N0cmluZ190ICpwc3RyKQoreworICBpZiAoQkUgKCFwc3RyLT5tYnNfYWxsb2NhdGVkLCAxKSkKKyAgICByZXR1cm4gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKHBzdHIpOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm9mZnNldHNfbmVlZGVkKQorICAgIHsKKyAgICAgIGludCBvZmYsIGNoOworCisgICAgICAvKiBGb3IgdHJfVFIuVVRGLTggW1s6aXNsb3dlcjpdXSB0aGVyZSBpcworCSBbWzogQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERPVCBsb3dlcjpdXSBpbiBtYnMuICBTa2lwCisJIGluIHRoYXQgY2FzZSB0aGUgd2hvbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgYW5kIHJldHVybgorCSB0aGUgb3JpZ2luYWwgbGV0dGVyLiAgT24gdGhlIG90aGVyIHNpZGUsIHdpdGgKKwkgW1s6IERPVExFU1MgU01BTEwgTEVUVEVSIEkgcmV0dXJuIFtbOkksIGFzIGRvaW5nCisJIGFueXRoaW5nIGVsc2Ugd291bGQgY29tcGxpY2F0ZSB0aGluZ3MgdG9vIG11Y2guICAqLworCisgICAgICBpZiAoIXJlX3N0cmluZ19maXJzdF9ieXRlIChwc3RyLCBwc3RyLT5jdXJfaWR4KSkKKwlyZXR1cm4gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKHBzdHIpOworCisgICAgICBvZmYgPSBwc3RyLT5vZmZzZXRzW3BzdHItPmN1cl9pZHhdOworICAgICAgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgb2ZmXTsKKworICAgICAgaWYgKCEgaXNhc2NpaSAoY2gpKQorCXJldHVybiByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocHN0cik7CisKKyAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChwc3RyLAorCQkJICAgIHJlX3N0cmluZ19jaGFyX3NpemVfYXQgKHBzdHIsIHBzdHItPmN1cl9pZHgpKTsKKyAgICAgIHJldHVybiBjaDsKKyAgICB9CisjZW5kaWYKKworICByZXR1cm4gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIHBzdHItPmN1cl9pZHgrK107Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX2Rlc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICByZV9mcmVlIChwc3RyLT53Y3MpOworICByZV9mcmVlIChwc3RyLT5vZmZzZXRzKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKyAgaWYgKHBzdHItPm1ic19hbGxvY2F0ZWQpCisgICAgcmVfZnJlZSAocHN0ci0+bWJzKTsKK30KKworLyogUmV0dXJuIHRoZSBjb250ZXh0IGF0IElEWCBpbiBJTlBVVC4gICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfY29udGV4dF9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgaWR4LCBpbnQgZWZsYWdzKQoreworICBpbnQgYzsKKyAgaWYgKEJFIChpZHggPCAwLCAwKSkKKyAgICAvKiBJbiB0aGlzIGNhc2UsIHdlIHVzZSB0aGUgdmFsdWUgc3RvcmVkIGluIGlucHV0LT50aXBfY29udGV4dCwKKyAgICAgICBzaW5jZSB3ZSBjYW4ndCBrbm93IHRoZSBjaGFyYWN0ZXIgaW4gaW5wdXQtPm1ic1stMV0gaGVyZS4gICovCisgICAgcmV0dXJuIGlucHV0LT50aXBfY29udGV4dDsKKyAgaWYgKEJFIChpZHggPT0gaW5wdXQtPmxlbiwgMCkpCisgICAgcmV0dXJuICgoZWZsYWdzICYgUkVHX05PVEVPTCkgPyBDT05URVhUX0VOREJVRgorCSAgICA6IENPTlRFWFRfTkVXTElORSB8IENPTlRFWFRfRU5EQlVGKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIHdpbnRfdCB3YzsKKyAgICAgIGludCB3Y19pZHggPSBpZHg7CisgICAgICB3aGlsZShpbnB1dC0+d2NzW3djX2lkeF0gPT0gV0VPRikKKwl7CisjaWZkZWYgREVCVUcKKwkgIC8qIEl0IG11c3Qgbm90IGhhcHBlbi4gICovCisJICBhc3NlcnQgKHdjX2lkeCA+PSAwKTsKKyNlbmRpZgorCSAgLS13Y19pZHg7CisJICBpZiAod2NfaWR4IDwgMCkKKwkgICAgcmV0dXJuIGlucHV0LT50aXBfY29udGV4dDsKKwl9CisgICAgICB3YyA9IGlucHV0LT53Y3Nbd2NfaWR4XTsKKyAgICAgIGlmIChCRSAoaW5wdXQtPndvcmRfb3BzX3VzZWQgIT0gMCwgMCkgJiYgSVNfV0lERV9XT1JEX0NIQVIgKHdjKSkKKwlyZXR1cm4gQ09OVEVYVF9XT1JEOworICAgICAgcmV0dXJuIChJU19XSURFX05FV0xJTkUgKHdjKSAmJiBpbnB1dC0+bmV3bGluZV9hbmNob3IKKwkgICAgICA/IENPTlRFWFRfTkVXTElORSA6IDApOworICAgIH0KKyAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgYyA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgaWR4KTsKKyAgICAgIGlmIChiaXRzZXRfY29udGFpbiAoaW5wdXQtPndvcmRfY2hhciwgYykpCisJcmV0dXJuIENPTlRFWFRfV09SRDsKKyAgICAgIHJldHVybiBJU19ORVdMSU5FIChjKSAmJiBpbnB1dC0+bmV3bGluZV9hbmNob3IgPyBDT05URVhUX05FV0xJTkUgOiAwOworICAgIH0KK30KKwwKKy8qIEZ1bmN0aW9ucyBmb3Igc2V0IG9wZXJhdGlvbi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfYWxsb2MgKHJlX25vZGVfc2V0ICpzZXQsIGludCBzaXplKQoreworICAvKgorICAgKiBBRFI6IHZhbGdyaW5kIHNheXMgc2l6ZSBjYW4gYmUgMCwgd2hpY2ggdGhlbiBkb2Vzbid0CisgICAqIGZyZWUgdGhlIGJsb2NrIG9mIHNpemUgMC4gIEhhcnVtcGguIFRoaXMgc2VlbXMKKyAgICogdG8gd29yayBvaywgdGhvdWdoLgorICAgKi8KKyAgaWYgKHNpemUgPT0gMCkKKyAgICB7CisgICAgICAgbWVtc2V0KHNldCwgMCwgc2l6ZW9mKCpzZXQpKTsKKyAgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorICBzZXQtPmFsbG9jID0gc2l6ZTsKKyAgc2V0LT5uZWxlbSA9IDA7CisgIHNldC0+ZWxlbXMgPSByZV9tYWxsb2MgKGludCwgc2l6ZSk7CisgIGlmIChCRSAoc2V0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luaXRfMSAocmVfbm9kZV9zZXQgKnNldCwgaW50IGVsZW0pCit7CisgIHNldC0+YWxsb2MgPSAxOworICBzZXQtPm5lbGVtID0gMTsKKyAgc2V0LT5lbGVtcyA9IHJlX21hbGxvYyAoaW50LCAxKTsKKyAgaWYgKEJFIChzZXQtPmVsZW1zID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgIHNldC0+YWxsb2MgPSBzZXQtPm5lbGVtID0gMDsKKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKyAgc2V0LT5lbGVtc1swXSA9IGVsZW07CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbml0XzIgKHJlX25vZGVfc2V0ICpzZXQsIGludCBlbGVtMSwgaW50IGVsZW0yKQoreworICBzZXQtPmFsbG9jID0gMjsKKyAgc2V0LT5lbGVtcyA9IHJlX21hbGxvYyAoaW50LCAyKTsKKyAgaWYgKEJFIChzZXQtPmVsZW1zID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBpZiAoZWxlbTEgPT0gZWxlbTIpCisgICAgeworICAgICAgc2V0LT5uZWxlbSA9IDE7CisgICAgICBzZXQtPmVsZW1zWzBdID0gZWxlbTE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc2V0LT5uZWxlbSA9IDI7CisgICAgICBpZiAoZWxlbTEgPCBlbGVtMikKKwl7CisJICBzZXQtPmVsZW1zWzBdID0gZWxlbTE7CisJICBzZXQtPmVsZW1zWzFdID0gZWxlbTI7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHNldC0+ZWxlbXNbMF0gPSBlbGVtMjsKKwkgIHNldC0+ZWxlbXNbMV0gPSBlbGVtMTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5pdF9jb3B5IChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYykKK3sKKyAgZGVzdC0+bmVsZW0gPSBzcmMtPm5lbGVtOworICBpZiAoc3JjLT5uZWxlbSA+IDApCisgICAgeworICAgICAgZGVzdC0+YWxsb2MgPSBkZXN0LT5uZWxlbTsKKyAgICAgIGRlc3QtPmVsZW1zID0gcmVfbWFsbG9jIChpbnQsIGRlc3QtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAoZGVzdC0+ZWxlbXMgPT0gTlVMTCwgMCkpCisJeworCSAgZGVzdC0+YWxsb2MgPSBkZXN0LT5uZWxlbSA9IDA7CisJICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zLCBzcmMtPmVsZW1zLCBzcmMtPm5lbGVtICogc2l6ZW9mIChpbnQpKTsKKyAgICB9CisgIGVsc2UKKyAgICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZXN0KTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgc2V0cyBTUkMxIGFuZCBTUkMyLiBBbmQgbWVyZ2UgaXQgdG8KKyAgIERFU1QuIFJldHVybiB2YWx1ZSBpbmRpY2F0ZSB0aGUgZXJyb3IgY29kZSBvciBSRUdfTk9FUlJPUiBpZiBzdWNjZWVkZWQuCisgICBOb3RlOiBXZSBhc3N1bWUgZGVzdC0+ZWxlbXMgaXMgTlVMTCwgd2hlbiBkZXN0LT5hbGxvYyBpcyAwLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9hZGRfaW50ZXJzZWN0IChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYzEsCisJCQkgICBjb25zdCByZV9ub2RlX3NldCAqc3JjMikKK3sKKyAgaW50IGkxLCBpMiwgaXMsIGlkLCBkZWx0YSwgc2Jhc2U7CisgIGlmIChzcmMxLT5uZWxlbSA9PSAwIHx8IHNyYzItPm5lbGVtID09IDApCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIC8qIFdlIG5lZWQgZGVzdC0+bmVsZW0gKyAyICogZWxlbXNfaW5faW50ZXJzZWN0aW9uOyB0aGlzIGlzIGEKKyAgICAgY29uc2VydmF0aXZlIGVzdGltYXRlLiAgKi8KKyAgaWYgKHNyYzEtPm5lbGVtICsgc3JjMi0+bmVsZW0gKyBkZXN0LT5uZWxlbSA+IGRlc3QtPmFsbG9jKQorICAgIHsKKyAgICAgIGludCBuZXdfYWxsb2MgPSBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtICsgZGVzdC0+YWxsb2M7CisgICAgICBpbnQgKm5ld19lbGVtcyA9IHJlX3JlYWxsb2MgKGRlc3QtPmVsZW1zLCBpbnQsIG5ld19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19lbGVtcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGRlc3QtPmVsZW1zID0gbmV3X2VsZW1zOworICAgICAgZGVzdC0+YWxsb2MgPSBuZXdfYWxsb2M7CisgICAgfQorCisgIC8qIEZpbmQgdGhlIGl0ZW1zIGluIHRoZSBpbnRlcnNlY3Rpb24gb2YgU1JDMSBhbmQgU1JDMiwgYW5kIGNvcHkKKyAgICAgaW50byB0aGUgdG9wIG9mIERFU1QgdGhvc2UgdGhhdCBhcmUgbm90IGFscmVhZHkgaW4gREVTVCBpdHNlbGYuICAqLworICBzYmFzZSA9IGRlc3QtPm5lbGVtICsgc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbTsKKyAgaTEgPSBzcmMxLT5uZWxlbSAtIDE7CisgIGkyID0gc3JjMi0+bmVsZW0gLSAxOworICBpZCA9IGRlc3QtPm5lbGVtIC0gMTsKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBpZiAoc3JjMS0+ZWxlbXNbaTFdID09IHNyYzItPmVsZW1zW2kyXSkKKwl7CisJICAvKiBUcnkgdG8gZmluZCB0aGUgaXRlbSBpbiBERVNULiAgTWF5YmUgd2UgY291bGQgYmluYXJ5IHNlYXJjaD8gICovCisJICB3aGlsZSAoaWQgPj0gMCAmJiBkZXN0LT5lbGVtc1tpZF0gPiBzcmMxLT5lbGVtc1tpMV0pCisJICAgIC0taWQ7CisKKwkgIGlmIChpZCA8IDAgfHwgZGVzdC0+ZWxlbXNbaWRdICE9IHNyYzEtPmVsZW1zW2kxXSkKKwkgICAgZGVzdC0+ZWxlbXNbLS1zYmFzZV0gPSBzcmMxLT5lbGVtc1tpMV07CisKKwkgIGlmICgtLWkxIDwgMCB8fCAtLWkyIDwgMCkKKwkgICAgYnJlYWs7CisJfQorCisgICAgICAvKiBMb3dlciB0aGUgaGlnaGVzdCBvZiB0aGUgdHdvIGl0ZW1zLiAgKi8KKyAgICAgIGVsc2UgaWYgKHNyYzEtPmVsZW1zW2kxXSA8IHNyYzItPmVsZW1zW2kyXSkKKwl7CisJICBpZiAoLS1pMiA8IDApCisJICAgIGJyZWFrOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoLS1pMSA8IDApCisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgaWQgPSBkZXN0LT5uZWxlbSAtIDE7CisgIGlzID0gZGVzdC0+bmVsZW0gKyBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtIC0gMTsKKyAgZGVsdGEgPSBpcyAtIHNiYXNlICsgMTsKKworICAvKiBOb3cgY29weS4gIFdoZW4gREVMVEEgYmVjb21lcyB6ZXJvLCB0aGUgcmVtYWluaW5nCisgICAgIERFU1QgZWxlbWVudHMgYXJlIGFscmVhZHkgaW4gcGxhY2U7IHRoaXMgaXMgbW9yZSBvcgorICAgICBsZXNzIHRoZSBzYW1lIGxvb3AgdGhhdCBpcyBpbiByZV9ub2RlX3NldF9tZXJnZS4gICovCisgIGRlc3QtPm5lbGVtICs9IGRlbHRhOworICBpZiAoZGVsdGEgPiAwICYmIGlkID49IDApCisgICAgZm9yICg7OykKKyAgICAgIHsKKwlpZiAoZGVzdC0+ZWxlbXNbaXNdID4gZGVzdC0+ZWxlbXNbaWRdKQorCSAgeworCSAgICAvKiBDb3B5IGZyb20gdGhlIHRvcC4gICovCisJICAgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGEtLV0gPSBkZXN0LT5lbGVtc1tpcy0tXTsKKwkgICAgaWYgKGRlbHRhID09IDApCisJICAgICAgYnJlYWs7CisJICB9CisJZWxzZQorCSAgeworCSAgICAvKiBTbGlkZSBmcm9tIHRoZSBib3R0b20uICAqLworCSAgICBkZXN0LT5lbGVtc1tpZCArIGRlbHRhXSA9IGRlc3QtPmVsZW1zW2lkXTsKKwkgICAgaWYgKC0taWQgPCAwKQorCSAgICAgIGJyZWFrOworCSAgfQorICAgICAgfQorCisgIC8qIENvcHkgcmVtYWluaW5nIFNSQyBlbGVtZW50cy4gICovCisgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIGRlc3QtPmVsZW1zICsgc2Jhc2UsIGRlbHRhICogc2l6ZW9mIChpbnQpKTsKKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgdW5pb24gc2V0IG9mIHRoZSBzZXRzIFNSQzEgYW5kIFNSQzIuIEFuZCBzdG9yZSBpdCB0bworICAgREVTVC4gUmV0dXJuIHZhbHVlIGluZGljYXRlIHRoZSBlcnJvciBjb2RlIG9yIFJFR19OT0VSUk9SIGlmIHN1Y2NlZWRlZC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAocmVfbm9kZV9zZXQgKmRlc3QsIGNvbnN0IHJlX25vZGVfc2V0ICpzcmMxLAorCQkJY29uc3QgcmVfbm9kZV9zZXQgKnNyYzIpCit7CisgIGludCBpMSwgaTIsIGlkOworICBpZiAoc3JjMSAhPSBOVUxMICYmIHNyYzEtPm5lbGVtID4gMCAmJiBzcmMyICE9IE5VTEwgJiYgc3JjMi0+bmVsZW0gPiAwKQorICAgIHsKKyAgICAgIGRlc3QtPmFsbG9jID0gc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbTsKKyAgICAgIGRlc3QtPmVsZW1zID0gcmVfbWFsbG9jIChpbnQsIGRlc3QtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAoZGVzdC0+ZWxlbXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHNyYzEgIT0gTlVMTCAmJiBzcmMxLT5uZWxlbSA+IDApCisJcmV0dXJuIHJlX25vZGVfc2V0X2luaXRfY29weSAoZGVzdCwgc3JjMSk7CisgICAgICBlbHNlIGlmIChzcmMyICE9IE5VTEwgJiYgc3JjMi0+bmVsZW0gPiAwKQorCXJldHVybiByZV9ub2RlX3NldF9pbml0X2NvcHkgKGRlc3QsIHNyYzIpOworICAgICAgZWxzZQorCXJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRlc3QpOworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKyAgZm9yIChpMSA9IGkyID0gaWQgPSAwIDsgaTEgPCBzcmMxLT5uZWxlbSAmJiBpMiA8IHNyYzItPm5lbGVtIDspCisgICAgeworICAgICAgaWYgKHNyYzEtPmVsZW1zW2kxXSA+IHNyYzItPmVsZW1zW2kyXSkKKwl7CisJICBkZXN0LT5lbGVtc1tpZCsrXSA9IHNyYzItPmVsZW1zW2kyKytdOworCSAgY29udGludWU7CisJfQorICAgICAgaWYgKHNyYzEtPmVsZW1zW2kxXSA9PSBzcmMyLT5lbGVtc1tpMl0pCisJKytpMjsKKyAgICAgIGRlc3QtPmVsZW1zW2lkKytdID0gc3JjMS0+ZWxlbXNbaTErK107CisgICAgfQorICBpZiAoaTEgPCBzcmMxLT5uZWxlbSkKKyAgICB7CisgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zICsgaWQsIHNyYzEtPmVsZW1zICsgaTEsCisJICAgICAoc3JjMS0+bmVsZW0gLSBpMSkgKiBzaXplb2YgKGludCkpOworICAgICAgaWQgKz0gc3JjMS0+bmVsZW0gLSBpMTsKKyAgICB9CisgIGVsc2UgaWYgKGkyIDwgc3JjMi0+bmVsZW0pCisgICAgeworICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcyArIGlkLCBzcmMyLT5lbGVtcyArIGkyLAorCSAgICAgKHNyYzItPm5lbGVtIC0gaTIpICogc2l6ZW9mIChpbnQpKTsKKyAgICAgIGlkICs9IHNyYzItPm5lbGVtIC0gaTI7CisgICAgfQorICBkZXN0LT5uZWxlbSA9IGlkOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgdW5pb24gc2V0IG9mIHRoZSBzZXRzIERFU1QgYW5kIFNSQy4gQW5kIHN0b3JlIGl0IHRvCisgICBERVNULiBSZXR1cm4gdmFsdWUgaW5kaWNhdGUgdGhlIGVycm9yIGNvZGUgb3IgUkVHX05PRVJST1IgaWYgc3VjY2VlZGVkLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9tZXJnZSAocmVfbm9kZV9zZXQgKmRlc3QsIGNvbnN0IHJlX25vZGVfc2V0ICpzcmMpCit7CisgIGludCBpcywgaWQsIHNiYXNlLCBkZWx0YTsKKyAgaWYgKHNyYyA9PSBOVUxMIHx8IHNyYy0+bmVsZW0gPT0gMCkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisgIGlmIChkZXN0LT5hbGxvYyA8IDIgKiBzcmMtPm5lbGVtICsgZGVzdC0+bmVsZW0pCisgICAgeworICAgICAgaW50IG5ld19hbGxvYyA9IDIgKiAoc3JjLT5uZWxlbSArIGRlc3QtPmFsbG9jKTsKKyAgICAgIGludCAqbmV3X2J1ZmZlciA9IHJlX3JlYWxsb2MgKGRlc3QtPmVsZW1zLCBpbnQsIG5ld19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19idWZmZXIgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBkZXN0LT5lbGVtcyA9IG5ld19idWZmZXI7CisgICAgICBkZXN0LT5hbGxvYyA9IG5ld19hbGxvYzsKKyAgICB9CisKKyAgaWYgKEJFIChkZXN0LT5uZWxlbSA9PSAwLCAwKSkKKyAgICB7CisgICAgICBkZXN0LT5uZWxlbSA9IHNyYy0+bmVsZW07CisgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zLCBzcmMtPmVsZW1zLCBzcmMtPm5lbGVtICogc2l6ZW9mIChpbnQpKTsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisKKyAgLyogQ29weSBpbnRvIHRoZSB0b3Agb2YgREVTVCB0aGUgaXRlbXMgb2YgU1JDIHRoYXQgYXJlIG5vdAorICAgICBmb3VuZCBpbiBERVNULiAgTWF5YmUgd2UgY291bGQgYmluYXJ5IHNlYXJjaCBpbiBERVNUPyAgKi8KKyAgZm9yIChzYmFzZSA9IGRlc3QtPm5lbGVtICsgMiAqIHNyYy0+bmVsZW0sCisgICAgICAgaXMgPSBzcmMtPm5lbGVtIC0gMSwgaWQgPSBkZXN0LT5uZWxlbSAtIDE7IGlzID49IDAgJiYgaWQgPj0gMDsgKQorICAgIHsKKyAgICAgIGlmIChkZXN0LT5lbGVtc1tpZF0gPT0gc3JjLT5lbGVtc1tpc10pCisJaXMtLSwgaWQtLTsKKyAgICAgIGVsc2UgaWYgKGRlc3QtPmVsZW1zW2lkXSA8IHNyYy0+ZWxlbXNbaXNdKQorCWRlc3QtPmVsZW1zWy0tc2Jhc2VdID0gc3JjLT5lbGVtc1tpcy0tXTsKKyAgICAgIGVsc2UgLyogaWYgKGRlc3QtPmVsZW1zW2lkXSA+IHNyYy0+ZWxlbXNbaXNdKSAqLworCS0taWQ7CisgICAgfQorCisgIGlmIChpcyA+PSAwKQorICAgIHsKKyAgICAgIC8qIElmIERFU1QgaXMgZXhoYXVzdGVkLCB0aGUgcmVtYWluaW5nIGl0ZW1zIG9mIFNSQyBtdXN0IGJlIHVuaXF1ZS4gICovCisgICAgICBzYmFzZSAtPSBpcyArIDE7CisgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zICsgc2Jhc2UsIHNyYy0+ZWxlbXMsIChpcyArIDEpICogc2l6ZW9mIChpbnQpKTsKKyAgICB9CisKKyAgaWQgPSBkZXN0LT5uZWxlbSAtIDE7CisgIGlzID0gZGVzdC0+bmVsZW0gKyAyICogc3JjLT5uZWxlbSAtIDE7CisgIGRlbHRhID0gaXMgLSBzYmFzZSArIDE7CisgIGlmIChkZWx0YSA9PSAwKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKworICAvKiBOb3cgY29weS4gIFdoZW4gREVMVEEgYmVjb21lcyB6ZXJvLCB0aGUgcmVtYWluaW5nCisgICAgIERFU1QgZWxlbWVudHMgYXJlIGFscmVhZHkgaW4gcGxhY2UuICAqLworICBkZXN0LT5uZWxlbSArPSBkZWx0YTsKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBpZiAoZGVzdC0+ZWxlbXNbaXNdID4gZGVzdC0+ZWxlbXNbaWRdKQorCXsKKwkgIC8qIENvcHkgZnJvbSB0aGUgdG9wLiAgKi8KKwkgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGEtLV0gPSBkZXN0LT5lbGVtc1tpcy0tXTsKKwkgIGlmIChkZWx0YSA9PSAwKQorCSAgICBicmVhazsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogU2xpZGUgZnJvbSB0aGUgYm90dG9tLiAgKi8KKwkgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGFdID0gZGVzdC0+ZWxlbXNbaWRdOworCSAgaWYgKC0taWQgPCAwKQorCSAgICB7CisJICAgICAgLyogQ29weSByZW1haW5pbmcgU1JDIGVsZW1lbnRzLiAgKi8KKwkgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zLCBkZXN0LT5lbGVtcyArIHNiYXNlLAorCQkgICAgICBkZWx0YSAqIHNpemVvZiAoaW50KSk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSW5zZXJ0IHRoZSBuZXcgZWxlbWVudCBFTEVNIHRvIHRoZSByZV9ub2RlX3NldCogU0VULgorICAgU0VUIHNob3VsZCBub3QgYWxyZWFkeSBoYXZlIEVMRU0uCisgICByZXR1cm4gLTEgaWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkLCByZXR1cm4gMSBvdGhlcndpc2UuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5zZXJ0IChyZV9ub2RlX3NldCAqc2V0LCBpbnQgZWxlbSkKK3sKKyAgaW50IGlkeDsKKyAgLyogSW4gY2FzZSB0aGUgc2V0IGlzIGVtcHR5LiAgKi8KKyAgaWYgKHNldC0+YWxsb2MgPT0gMCkKKyAgICB7CisgICAgICBpZiAoQkUgKHJlX25vZGVfc2V0X2luaXRfMSAoc2V0LCBlbGVtKSA9PSBSRUdfTk9FUlJPUiwgMSkpCisJcmV0dXJuIDE7CisgICAgICBlbHNlCisJcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoQkUgKHNldC0+bmVsZW0sIDApID09IDApCisgICAgeworICAgICAgLyogV2UgYWxyZWFkeSBndWFyYW50ZWVkIGFib3ZlIHRoYXQgc2V0LT5hbGxvYyAhPSAwLiAgKi8KKyAgICAgIHNldC0+ZWxlbXNbMF0gPSBlbGVtOworICAgICAgKytzZXQtPm5lbGVtOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIFJlYWxsb2MgaWYgd2UgbmVlZC4gICovCisgIGlmIChzZXQtPmFsbG9jID09IHNldC0+bmVsZW0pCisgICAgeworICAgICAgaW50ICpuZXdfZWxlbXM7CisgICAgICBzZXQtPmFsbG9jID0gc2V0LT5hbGxvYyAqIDI7CisgICAgICBuZXdfZWxlbXMgPSByZV9yZWFsbG9jIChzZXQtPmVsZW1zLCBpbnQsIHNldC0+YWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfZWxlbXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIC0xOworICAgICAgc2V0LT5lbGVtcyA9IG5ld19lbGVtczsKKyAgICB9CisKKyAgLyogTW92ZSB0aGUgZWxlbWVudHMgd2hpY2ggZm9sbG93cyB0aGUgbmV3IGVsZW1lbnQuICBUZXN0IHRoZQorICAgICBmaXJzdCBlbGVtZW50IHNlcGFyYXRlbHkgdG8gc2tpcCBhIGNoZWNrIGluIHRoZSBpbm5lciBsb29wLiAgKi8KKyAgaWYgKGVsZW0gPCBzZXQtPmVsZW1zWzBdKQorICAgIHsKKyAgICAgIGlkeCA9IDA7CisgICAgICBmb3IgKGlkeCA9IHNldC0+bmVsZW07IGlkeCA+IDA7IGlkeC0tKQorCXNldC0+ZWxlbXNbaWR4XSA9IHNldC0+ZWxlbXNbaWR4IC0gMV07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZm9yIChpZHggPSBzZXQtPm5lbGVtOyBzZXQtPmVsZW1zW2lkeCAtIDFdID4gZWxlbTsgaWR4LS0pCisJc2V0LT5lbGVtc1tpZHhdID0gc2V0LT5lbGVtc1tpZHggLSAxXTsKKyAgICB9CisKKyAgLyogSW5zZXJ0IHRoZSBuZXcgZWxlbWVudC4gICovCisgIHNldC0+ZWxlbXNbaWR4XSA9IGVsZW07CisgICsrc2V0LT5uZWxlbTsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEluc2VydCB0aGUgbmV3IGVsZW1lbnQgRUxFTSB0byB0aGUgcmVfbm9kZV9zZXQqIFNFVC4KKyAgIFNFVCBzaG91bGQgbm90IGFscmVhZHkgaGF2ZSBhbnkgZWxlbWVudCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRUxFTS4KKyAgIFJldHVybiAtMSBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQsIHJldHVybiAxIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbnNlcnRfbGFzdCAocmVfbm9kZV9zZXQgKnNldCwgaW50IGVsZW0pCit7CisgIC8qIFJlYWxsb2MgaWYgd2UgbmVlZC4gICovCisgIGlmIChzZXQtPmFsbG9jID09IHNldC0+bmVsZW0pCisgICAgeworICAgICAgaW50ICpuZXdfZWxlbXM7CisgICAgICBzZXQtPmFsbG9jID0gKHNldC0+YWxsb2MgKyAxKSAqIDI7CisgICAgICBuZXdfZWxlbXMgPSByZV9yZWFsbG9jIChzZXQtPmVsZW1zLCBpbnQsIHNldC0+YWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfZWxlbXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIC0xOworICAgICAgc2V0LT5lbGVtcyA9IG5ld19lbGVtczsKKyAgICB9CisKKyAgLyogSW5zZXJ0IHRoZSBuZXcgZWxlbWVudC4gICovCisgIHNldC0+ZWxlbXNbc2V0LT5uZWxlbSsrXSA9IGVsZW07CisgIHJldHVybiAxOworfQorCisvKiBDb21wYXJlIHR3byBub2RlIHNldHMgU0VUMSBhbmQgU0VUMi4KKyAgIHJldHVybiAxIGlmIFNFVDEgYW5kIFNFVDIgYXJlIGVxdWl2YWxlbnQsIHJldHVybiAwIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9ub2RlX3NldF9jb21wYXJlIChjb25zdCByZV9ub2RlX3NldCAqc2V0MSwgY29uc3QgcmVfbm9kZV9zZXQgKnNldDIpCit7CisgIGludCBpOworICBpZiAoc2V0MSA9PSBOVUxMIHx8IHNldDIgPT0gTlVMTCB8fCBzZXQxLT5uZWxlbSAhPSBzZXQyLT5uZWxlbSkKKyAgICByZXR1cm4gMDsKKyAgZm9yIChpID0gc2V0MS0+bmVsZW0gOyAtLWkgPj0gMCA7ICkKKyAgICBpZiAoc2V0MS0+ZWxlbXNbaV0gIT0gc2V0Mi0+ZWxlbXNbaV0pCisgICAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIFJldHVybiAoaWR4ICsgMSkgaWYgU0VUIGNvbnRhaW5zIHRoZSBlbGVtZW50IEVMRU0sIHJldHVybiAwIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9ub2RlX3NldF9jb250YWlucyAoY29uc3QgcmVfbm9kZV9zZXQgKnNldCwgaW50IGVsZW0pCit7CisgIHVuc2lnbmVkIGludCBpZHgsIHJpZ2h0LCBtaWQ7CisgIGlmIChzZXQtPm5lbGVtIDw9IDApCisgICAgcmV0dXJuIDA7CisKKyAgLyogQmluYXJ5IHNlYXJjaCB0aGUgZWxlbWVudC4gICovCisgIGlkeCA9IDA7CisgIHJpZ2h0ID0gc2V0LT5uZWxlbSAtIDE7CisgIHdoaWxlIChpZHggPCByaWdodCkKKyAgICB7CisgICAgICBtaWQgPSBpZHggKyAocmlnaHQgLSBpZHgpIC8gMjsKKyAgICAgIGlmIChzZXQtPmVsZW1zW21pZF0gPCBlbGVtKQorCWlkeCA9IG1pZCArIDE7CisgICAgICBlbHNlCisJcmlnaHQgPSBtaWQ7CisgICAgfQorICByZXR1cm4gc2V0LT5lbGVtc1tpZHhdID09IGVsZW0gPyBpZHggKyAxIDogMDsKK30KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9yZW1vdmVfYXQgKHJlX25vZGVfc2V0ICpzZXQsIGludCBpZHgpCit7CisgIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzZXQtPm5lbGVtKQorICAgIHJldHVybjsKKyAgLS1zZXQtPm5lbGVtOworICBmb3IgKDsgaWR4IDwgc2V0LT5uZWxlbTsgaWR4KyspCisgICAgc2V0LT5lbGVtc1tpZHhdID0gc2V0LT5lbGVtc1tpZHggKyAxXTsKK30KKwwKKworLyogQWRkIHRoZSB0b2tlbiBUT0tFTiB0byBkZmEtPm5vZGVzLCBhbmQgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgdG9rZW4uCisgICBPciByZXR1cm4gLTEsIGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZC4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9kZmFfYWRkX25vZGUgKHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgdG9rZW4pCit7CisgIGlmIChCRSAoZGZhLT5ub2Rlc19sZW4gPj0gZGZhLT5ub2Rlc19hbGxvYywgMCkpCisgICAgeworICAgICAgc2l6ZV90IG5ld19ub2Rlc19hbGxvYyA9IGRmYS0+bm9kZXNfYWxsb2MgKiAyOworICAgICAgaW50ICpuZXdfbmV4dHMsICpuZXdfaW5kaWNlczsKKyAgICAgIHJlX25vZGVfc2V0ICpuZXdfZWRlc3RzLCAqbmV3X2VjbG9zdXJlczsKKyAgICAgIHJlX3Rva2VuX3QgKm5ld19ub2RlczsKKworICAgICAgLyogQXZvaWQgb3ZlcmZsb3dzIGluIHJlYWxsb2MuICAqLworICAgICAgY29uc3Qgc2l6ZV90IG1heF9vYmplY3Rfc2l6ZSA9IE1BWCAoc2l6ZW9mIChyZV90b2tlbl90KSwKKwkJCQkJICBNQVggKHNpemVvZiAocmVfbm9kZV9zZXQpLAorCQkJCQkgICAgICAgc2l6ZW9mIChpbnQpKSk7CisgICAgICBpZiAoQkUgKFNJWkVfTUFYIC8gbWF4X29iamVjdF9zaXplIDwgbmV3X25vZGVzX2FsbG9jLCAwKSkKKwlyZXR1cm4gLTE7CisKKyAgICAgIG5ld19ub2RlcyA9IHJlX3JlYWxsb2MgKGRmYS0+bm9kZXMsIHJlX3Rva2VuX3QsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19ub2RlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gLTE7CisgICAgICBkZmEtPm5vZGVzID0gbmV3X25vZGVzOworICAgICAgbmV3X25leHRzID0gcmVfcmVhbGxvYyAoZGZhLT5uZXh0cywgaW50LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgbmV3X2luZGljZXMgPSByZV9yZWFsbG9jIChkZmEtPm9yZ19pbmRpY2VzLCBpbnQsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBuZXdfZWRlc3RzID0gcmVfcmVhbGxvYyAoZGZhLT5lZGVzdHMsIHJlX25vZGVfc2V0LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgbmV3X2VjbG9zdXJlcyA9IHJlX3JlYWxsb2MgKGRmYS0+ZWNsb3N1cmVzLCByZV9ub2RlX3NldCwgbmV3X25vZGVzX2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X25leHRzID09IE5VTEwgfHwgbmV3X2luZGljZXMgPT0gTlVMTAorCSAgICAgIHx8IG5ld19lZGVzdHMgPT0gTlVMTCB8fCBuZXdfZWNsb3N1cmVzID09IE5VTEwsIDApKQorCXJldHVybiAtMTsKKyAgICAgIGRmYS0+bmV4dHMgPSBuZXdfbmV4dHM7CisgICAgICBkZmEtPm9yZ19pbmRpY2VzID0gbmV3X2luZGljZXM7CisgICAgICBkZmEtPmVkZXN0cyA9IG5ld19lZGVzdHM7CisgICAgICBkZmEtPmVjbG9zdXJlcyA9IG5ld19lY2xvc3VyZXM7CisgICAgICBkZmEtPm5vZGVzX2FsbG9jID0gbmV3X25vZGVzX2FsbG9jOworICAgIH0KKyAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0gPSB0b2tlbjsKKyAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0uY29uc3RyYWludCA9IDA7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0uYWNjZXB0X21iID0KKyAgICAodG9rZW4udHlwZSA9PSBPUF9QRVJJT0QgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkgfHwgdG9rZW4udHlwZSA9PSBDT01QTEVYX0JSQUNLRVQ7CisjZW5kaWYKKyAgZGZhLT5uZXh0c1tkZmEtPm5vZGVzX2xlbl0gPSAtMTsKKyAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBkZmEtPm5vZGVzX2xlbik7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5ub2Rlc19sZW4pOworICByZXR1cm4gZGZhLT5ub2Rlc19sZW4rKzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjYWxjX3N0YXRlX2hhc2ggKGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywgdW5zaWduZWQgaW50IGNvbnRleHQpCit7CisgIHVuc2lnbmVkIGludCBoYXNoID0gbm9kZXMtPm5lbGVtICsgY29udGV4dDsKKyAgaW50IGk7CisgIGZvciAoaSA9IDAgOyBpIDwgbm9kZXMtPm5lbGVtIDsgaSsrKQorICAgIGhhc2ggKz0gbm9kZXMtPmVsZW1zW2ldOworICByZXR1cm4gaGFzaDsKK30KKworLyogU2VhcmNoIGZvciB0aGUgc3RhdGUgd2hvc2Ugbm9kZV9zZXQgaXMgZXF1aXZhbGVudCB0byBOT0RFUy4KKyAgIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgc3RhdGUsIGlmIHdlIGZvdW5kIGl0IGluIHRoZSBERkEuCisgICBPdGhlcndpc2UgY3JlYXRlIHRoZSBuZXcgb25lIGFuZCByZXR1cm4gaXQuICBJbiBjYXNlIG9mIGFuIGVycm9yCisgICByZXR1cm4gTlVMTCBhbmQgc2V0IHRoZSBlcnJvciBjb2RlIGluIEVSUi4KKyAgIE5vdGU6IC0gV2UgYXNzdW1lIE5VTEwgYXMgdGhlIGludmFsaWQgc3RhdGUsIHRoZW4gaXQgaXMgcG9zc2libGUgdGhhdAorCSAgIHJldHVybiB2YWx1ZSBpcyBOVUxMIGFuZCBFUlIgaXMgUkVHX05PRVJST1IuCisJIC0gV2UgbmV2ZXIgcmV0dXJuIG5vbi1OVUxMIHZhbHVlIGluIGNhc2Ugb2YgYW55IGVycm9ycywgaXQgaXMgZm9yCisJICAgb3B0aW1pemF0aW9uLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX2FjcXVpcmVfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwgY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMpCit7CisgIHVuc2lnbmVkIGludCBoYXNoOworICByZV9kZmFzdGF0ZV90ICpuZXdfc3RhdGU7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqc3BvdDsKKyAgaW50IGk7CisgIGlmIChCRSAobm9kZXMtPm5lbGVtID09IDAsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfTk9FUlJPUjsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgaGFzaCA9IGNhbGNfc3RhdGVfaGFzaCAobm9kZXMsIDApOworICBzcG90ID0gZGZhLT5zdGF0ZV90YWJsZSArIChoYXNoICYgZGZhLT5zdGF0ZV9oYXNoX21hc2spOworCisgIGZvciAoaSA9IDAgOyBpIDwgc3BvdC0+bnVtIDsgaSsrKQorICAgIHsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlID0gc3BvdC0+YXJyYXlbaV07CisgICAgICBpZiAoaGFzaCAhPSBzdGF0ZS0+aGFzaCkKKwljb250aW51ZTsKKyAgICAgIGlmIChyZV9ub2RlX3NldF9jb21wYXJlICgmc3RhdGUtPm5vZGVzLCBub2RlcykpCisJcmV0dXJuIHN0YXRlOworICAgIH0KKworICAvKiBUaGVyZSBhcmUgbm8gYXBwcm9wcmlhdGUgc3RhdGUgaW4gdGhlIGRmYSwgY3JlYXRlIHRoZSBuZXcgb25lLiAgKi8KKyAgbmV3X3N0YXRlID0gY3JlYXRlX2NpX25ld3N0YXRlIChkZmEsIG5vZGVzLCBoYXNoKTsKKyAgaWYgKEJFIChuZXdfc3RhdGUgPT0gTlVMTCwgMCkpCisgICAgKmVyciA9IFJFR19FU1BBQ0U7CisKKyAgcmV0dXJuIG5ld19zdGF0ZTsKK30KKworLyogU2VhcmNoIGZvciB0aGUgc3RhdGUgd2hvc2Ugbm9kZV9zZXQgaXMgZXF1aXZhbGVudCB0byBOT0RFUyBhbmQKKyAgIHdob3NlIGNvbnRleHQgaXMgZXF1aXZhbGVudCB0byBDT05URVhULgorICAgUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBzdGF0ZSwgaWYgd2UgZm91bmQgaXQgaW4gdGhlIERGQS4KKyAgIE90aGVyd2lzZSBjcmVhdGUgdGhlIG5ldyBvbmUgYW5kIHJldHVybiBpdC4gIEluIGNhc2Ugb2YgYW4gZXJyb3IKKyAgIHJldHVybiBOVUxMIGFuZCBzZXQgdGhlIGVycm9yIGNvZGUgaW4gRVJSLgorICAgTm90ZTogLSBXZSBhc3N1bWUgTlVMTCBhcyB0aGUgaW52YWxpZCBzdGF0ZSwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0CisJICAgcmV0dXJuIHZhbHVlIGlzIE5VTEwgYW5kIEVSUiBpcyBSRUdfTk9FUlJPUi4KKwkgLSBXZSBuZXZlciByZXR1cm4gbm9uLU5VTEwgdmFsdWUgaW4gY2FzZSBvZiBhbnkgZXJyb3JzLCBpdCBpcyBmb3IKKwkgICBvcHRpbWl6YXRpb24uICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0IChyZWdfZXJyY29kZV90ICplcnIsIGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkgIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywgdW5zaWduZWQgaW50IGNvbnRleHQpCit7CisgIHVuc2lnbmVkIGludCBoYXNoOworICByZV9kZmFzdGF0ZV90ICpuZXdfc3RhdGU7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqc3BvdDsKKyAgaW50IGk7CisgIGlmIChub2Rlcy0+bmVsZW0gPT0gMCkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX05PRVJST1I7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGhhc2ggPSBjYWxjX3N0YXRlX2hhc2ggKG5vZGVzLCBjb250ZXh0KTsKKyAgc3BvdCA9IGRmYS0+c3RhdGVfdGFibGUgKyAoaGFzaCAmIGRmYS0+c3RhdGVfaGFzaF9tYXNrKTsKKworICBmb3IgKGkgPSAwIDsgaSA8IHNwb3QtPm51bSA7IGkrKykKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IHNwb3QtPmFycmF5W2ldOworICAgICAgaWYgKHN0YXRlLT5oYXNoID09IGhhc2gKKwkgICYmIHN0YXRlLT5jb250ZXh0ID09IGNvbnRleHQKKwkgICYmIHJlX25vZGVfc2V0X2NvbXBhcmUgKHN0YXRlLT5lbnRyYW5jZV9ub2Rlcywgbm9kZXMpKQorCXJldHVybiBzdGF0ZTsKKyAgICB9CisgIC8qIFRoZXJlIGFyZSBubyBhcHByb3ByaWF0ZSBzdGF0ZSBpbiBgZGZhJywgY3JlYXRlIHRoZSBuZXcgb25lLiAgKi8KKyAgbmV3X3N0YXRlID0gY3JlYXRlX2NkX25ld3N0YXRlIChkZmEsIG5vZGVzLCBjb250ZXh0LCBoYXNoKTsKKyAgaWYgKEJFIChuZXdfc3RhdGUgPT0gTlVMTCwgMCkpCisgICAgKmVyciA9IFJFR19FU1BBQ0U7CisKKyAgcmV0dXJuIG5ld19zdGF0ZTsKK30KKworLyogRmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXcgc3RhdGUgTkVXU1RBVEUsIGFuZCB1c2luZyBpdHMgaGFzaCB2YWx1ZQorICAgSEFTSCBwdXQgaW4gdGhlIGFwcHJvcHJpYXRlIGJ1Y2tldCBvZiBERkEncyBzdGF0ZSB0YWJsZS4gIFJldHVybiB2YWx1ZQorICAgaW5kaWNhdGVzIHRoZSBlcnJvciBjb2RlIGlmIGZhaWxlZC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CityZWdpc3Rlcl9zdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfZGZhc3RhdGVfdCAqbmV3c3RhdGUsCisJCXVuc2lnbmVkIGludCBoYXNoKQoreworICBzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkgKnNwb3Q7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgaTsKKworICBuZXdzdGF0ZS0+aGFzaCA9IGhhc2g7CisgIGVyciA9IHJlX25vZGVfc2V0X2FsbG9jICgmbmV3c3RhdGUtPm5vbl9lcHNfbm9kZXMsIG5ld3N0YXRlLT5ub2Rlcy5uZWxlbSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld3N0YXRlLT5ub2Rlcy5uZWxlbTsgaSsrKQorICAgIHsKKyAgICAgIGludCBlbGVtID0gbmV3c3RhdGUtPm5vZGVzLmVsZW1zW2ldOworICAgICAgaWYgKCFJU19FUFNJTE9OX05PREUgKGRmYS0+bm9kZXNbZWxlbV0udHlwZSkpCisJaWYgKHJlX25vZGVfc2V0X2luc2VydF9sYXN0ICgmbmV3c3RhdGUtPm5vbl9lcHNfbm9kZXMsIGVsZW0pIDwgMCkKKwkgIHJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKworICBzcG90ID0gZGZhLT5zdGF0ZV90YWJsZSArIChoYXNoICYgZGZhLT5zdGF0ZV9oYXNoX21hc2spOworICBpZiAoQkUgKHNwb3QtPmFsbG9jIDw9IHNwb3QtPm51bSwgMCkpCisgICAgeworICAgICAgaW50IG5ld19hbGxvYyA9IDIgKiBzcG90LT5udW0gKyAyOworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHNwb3QtPmFycmF5LCByZV9kZmFzdGF0ZV90ICosCisJCQkJCSAgICAgIG5ld19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19hcnJheSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHNwb3QtPmFycmF5ID0gbmV3X2FycmF5OworICAgICAgc3BvdC0+YWxsb2MgPSBuZXdfYWxsb2M7CisgICAgfQorICBzcG90LT5hcnJheVtzcG90LT5udW0rK10gPSBuZXdzdGF0ZTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgdm9pZAorZnJlZV9zdGF0ZSAocmVfZGZhc3RhdGVfdCAqc3RhdGUpCit7CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZzdGF0ZS0+bm9uX2Vwc19ub2Rlcyk7CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZzdGF0ZS0+aW52ZWNsb3N1cmUpOworICBpZiAoc3RhdGUtPmVudHJhbmNlX25vZGVzICE9ICZzdGF0ZS0+bm9kZXMpCisgICAgeworICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoc3RhdGUtPmVudHJhbmNlX25vZGVzKTsKKyAgICAgIHJlX2ZyZWUgKHN0YXRlLT5lbnRyYW5jZV9ub2Rlcyk7CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlICgmc3RhdGUtPm5vZGVzKTsKKyAgcmVfZnJlZSAoc3RhdGUtPndvcmRfdHJ0YWJsZSk7CisgIHJlX2ZyZWUgKHN0YXRlLT50cnRhYmxlKTsKKyAgcmVfZnJlZSAoc3RhdGUpOworfQorCisvKiBDcmVhdGUgdGhlIG5ldyBzdGF0ZSB3aGljaCBpcyBpbmRlcGVuZGVudCBvZiBjb250ZXh0cy4KKyAgIFJldHVybiB0aGUgbmV3IHN0YXRlIGlmIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK2NyZWF0ZV9jaV9uZXdzdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkgICAgdW5zaWduZWQgaW50IGhhc2gpCit7CisgIGludCBpOworICByZWdfZXJyY29kZV90IGVycjsKKyAgcmVfZGZhc3RhdGVfdCAqbmV3c3RhdGU7CisKKyAgbmV3c3RhdGUgPSAocmVfZGZhc3RhdGVfdCAqKSBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCksIDEpOworICBpZiAoQkUgKG5ld3N0YXRlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZuZXdzdGF0ZS0+bm9kZXMsIG5vZGVzKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIHJlX2ZyZWUgKG5ld3N0YXRlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPSAmbmV3c3RhdGUtPm5vZGVzOworICBmb3IgKGkgPSAwIDsgaSA8IG5vZGVzLT5uZWxlbSA7IGkrKykKKyAgICB7CisgICAgICByZV90b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIG5vZGVzLT5lbGVtc1tpXTsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gbm9kZS0+dHlwZTsKKyAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiAhbm9kZS0+Y29uc3RyYWludCkKKwljb250aW51ZTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbmV3c3RhdGUtPmFjY2VwdF9tYiB8PSBub2RlLT5hY2NlcHRfbWI7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAgICAgLyogSWYgdGhlIHN0YXRlIGhhcyB0aGUgaGFsdCBub2RlLCB0aGUgc3RhdGUgaXMgYSBoYWx0IHN0YXRlLiAgKi8KKyAgICAgIGlmICh0eXBlID09IEVORF9PRl9SRSkKKwluZXdzdGF0ZS0+aGFsdCA9IDE7CisgICAgICBlbHNlIGlmICh0eXBlID09IE9QX0JBQ0tfUkVGKQorCW5ld3N0YXRlLT5oYXNfYmFja3JlZiA9IDE7CisgICAgICBlbHNlIGlmICh0eXBlID09IEFOQ0hPUiB8fCBub2RlLT5jb25zdHJhaW50KQorCW5ld3N0YXRlLT5oYXNfY29uc3RyYWludCA9IDE7CisgICAgfQorICBlcnIgPSByZWdpc3Rlcl9zdGF0ZSAoZGZhLCBuZXdzdGF0ZSwgaGFzaCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICBmcmVlX3N0YXRlIChuZXdzdGF0ZSk7CisgICAgICBuZXdzdGF0ZSA9IE5VTEw7CisgICAgfQorICByZXR1cm4gbmV3c3RhdGU7Cit9CisKKy8qIENyZWF0ZSB0aGUgbmV3IHN0YXRlIHdoaWNoIGlzIGRlcGVuZCBvbiB0aGUgY29udGV4dCBDT05URVhULgorICAgUmV0dXJuIHRoZSBuZXcgc3RhdGUgaWYgc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorY3JlYXRlX2NkX25ld3N0YXRlIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCSAgICB1bnNpZ25lZCBpbnQgY29udGV4dCwgdW5zaWduZWQgaW50IGhhc2gpCit7CisgIGludCBpLCBuY3R4X25vZGVzID0gMDsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIHJlX2RmYXN0YXRlX3QgKm5ld3N0YXRlOworCisgIG5ld3N0YXRlID0gKHJlX2RmYXN0YXRlX3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2RmYXN0YXRlX3QpLCAxKTsKKyAgaWYgKEJFIChuZXdzdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmbmV3c3RhdGUtPm5vZGVzLCBub2Rlcyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICByZV9mcmVlIChuZXdzdGF0ZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgbmV3c3RhdGUtPmNvbnRleHQgPSBjb250ZXh0OworICBuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPSAmbmV3c3RhdGUtPm5vZGVzOworCisgIGZvciAoaSA9IDAgOyBpIDwgbm9kZXMtPm5lbGVtIDsgaSsrKQorICAgIHsKKyAgICAgIHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsgbm9kZXMtPmVsZW1zW2ldOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBub2RlLT50eXBlOworICAgICAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgPSBub2RlLT5jb25zdHJhaW50OworCisgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgIWNvbnN0cmFpbnQpCisJY29udGludWU7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIG5ld3N0YXRlLT5hY2NlcHRfbWIgfD0gbm9kZS0+YWNjZXB0X21iOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgICAgIC8qIElmIHRoZSBzdGF0ZSBoYXMgdGhlIGhhbHQgbm9kZSwgdGhlIHN0YXRlIGlzIGEgaGFsdCBzdGF0ZS4gICovCisgICAgICBpZiAodHlwZSA9PSBFTkRfT0ZfUkUpCisJbmV3c3RhdGUtPmhhbHQgPSAxOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwluZXdzdGF0ZS0+aGFzX2JhY2tyZWYgPSAxOworCisgICAgICBpZiAoY29uc3RyYWludCkKKwl7CisJICBpZiAobmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID09ICZuZXdzdGF0ZS0+bm9kZXMpCisJICAgIHsKKwkgICAgICBuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPSByZV9tYWxsb2MgKHJlX25vZGVfc2V0LCAxKTsKKwkgICAgICBpZiAoQkUgKG5ld3N0YXRlLT5lbnRyYW5jZV9ub2RlcyA9PSBOVUxMLCAwKSkKKwkJeworCQkgIGZyZWVfc3RhdGUgKG5ld3N0YXRlKTsKKwkJICByZXR1cm4gTlVMTDsKKwkJfQorCSAgICAgIGlmIChyZV9ub2RlX3NldF9pbml0X2NvcHkgKG5ld3N0YXRlLT5lbnRyYW5jZV9ub2Rlcywgbm9kZXMpCisJCSAgIT0gUkVHX05PRVJST1IpCisJCXJldHVybiBOVUxMOworCSAgICAgIG5jdHhfbm9kZXMgPSAwOworCSAgICAgIG5ld3N0YXRlLT5oYXNfY29uc3RyYWludCA9IDE7CisJICAgIH0KKworCSAgaWYgKE5PVF9TQVRJU0ZZX1BSRVZfQ09OU1RSQUlOVCAoY29uc3RyYWludCxjb250ZXh0KSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoJm5ld3N0YXRlLT5ub2RlcywgaSAtIG5jdHhfbm9kZXMpOworCSAgICAgICsrbmN0eF9ub2RlczsKKwkgICAgfQorCX0KKyAgICB9CisgIGVyciA9IHJlZ2lzdGVyX3N0YXRlIChkZmEsIG5ld3N0YXRlLCBoYXNoKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIGZyZWVfc3RhdGUgKG5ld3N0YXRlKTsKKyAgICAgIG5ld3N0YXRlID0gTlVMTDsKKyAgICB9CisgIHJldHVybiAgbmV3c3RhdGU7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuaCBiL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZThhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuaApAQCAtMCwwICsxLDgwOSBAQAorLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA1LCAyMDA3LCAyMDA4LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1JFR0VYX0lOVEVSTkFMX0gKKyNkZWZpbmUgX1JFR0VYX0lOVEVSTkFMX0ggMQorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZCBIQVZFX0xBTkdJTkZPX0ggfHwgZGVmaW5lZCBIQVZFX0xBTkdJTkZPX0NPREVTRVQgfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxsYW5naW5mby5oPgorI2VuZGlmCisjaWYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkIEhBVkVfV0NIQVJfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPHdjaGFyLmg+CisjZW5kaWYgLyogSEFWRV9XQ0hBUl9IIHx8IF9MSUJDICovCisjaWYgZGVmaW5lZCBIQVZFX1dDVFlQRV9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisjZW5kaWYgLyogSEFWRV9XQ1RZUEVfSCB8fCBfTElCQyAqLworI2lmIGRlZmluZWQgSEFWRV9TVERCT09MX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYgLyogSEFWRV9TVERCT09MX0ggfHwgX0xJQkMgKi8KKyNpZiAhZGVmaW5lZChaT1NfVVNTKQorI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmIC8qIEhBVkVfU1RESU5UX0ggfHwgX0xJQkMgKi8KKyNlbmRpZiAvKiAhWk9TX1VTUyAqLworI2lmIGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyNlbHNlCisjIGRlZmluZSBfX2xpYmNfbG9ja19kZWZpbmUoQ0xBU1MsTkFNRSkKKyMgZGVmaW5lIF9fbGliY19sb2NrX2luaXQoTkFNRSkgZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgR0FXSworLyogSW4gY2FzZSB0aGF0IHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGlzYmxhbmsoKS4gICovCisjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9JU0JMQU5LICYmICFkZWZpbmVkIGlzYmxhbmsKKyMgZGVmaW5lIGlzYmxhbmsoY2gpICgoY2gpID09ICcgJyB8fCAoY2gpID09ICdcdCcpCisjZW5kaWYKKyNlbHNlIC8qIEdBV0sgKi8KKy8qCisgKiBUaGlzIGlzIGEgZnJlYWtpbmcgbWVzcy4gT24gZ2xpYmMgc3lzdGVtcyB5b3UgaGF2ZSB0byBkZWZpbmUKKyAqIGEgbWFnaWMgY29uc3RhbnQgdG8gZ2V0IGlzYmxhbmsoKSBvdXQgb2YgPGN0eXBlLmg+LCBzaW5jZSBpdCdzCisgKiBhIEM5OSBmdW5jdGlvbi4gIFRvIGhlY2sgd2l0aCBhbGwgdGhhdCBhbmQgYm9ycm93IGEgcGFnZSBmcm9tCisgKiBkZmEuYydzIGJvb2suCisgKi8KKworc3RhdGljIGludAoraXNfYmxhbmsgKGludCBjKQoreworICAgcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcpOworfQorI2VuZGlmIC8qIEdBV0sgKi8KKworI2lmZGVmIF9MSUJDCisjIGlmbmRlZiBfUkVfREVGSU5FX0xPQ0FMRV9GVU5DVElPTlMKKyMgIGRlZmluZSBfUkVfREVGSU5FX0xPQ0FMRV9GVU5DVElPTlMgMQorIyAgIGluY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisjICAgaW5jbHVkZSA8bG9jYWxlL2VsZW0taGFzaC5oPgorIyAgIGluY2x1ZGUgPGxvY2FsZS9jb2xsLWxvb2t1cC5oPgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuICAqLworI2lmIChIQVZFX0xJQklOVExfSCAmJiBFTkFCTEVfTkxTKSB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgaWZkZWYgX0xJQkMKKyMgIHVuZGVmIGdldHRleHQKKyMgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSBcCisgIElOVFVTRShfX2RjZ2V0dGV4dCkgKF9saWJjX2ludGxfZG9tYWlubmFtZSwgbXNnaWQsIExDX01FU1NBR0VTKQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyNlbmRpZgorCisjaWZuZGVmIGdldHRleHRfbm9vcAorLyogVGhpcyBkZWZpbmUgaXMgc28geGdldHRleHQgY2FuIGZpbmQgdGhlIGludGVybmF0aW9uYWxpemFibGUKKyAgIHN0cmluZ3MuICAqLworIyBkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCisjZW5kaWYKKworLyogRm9yIGxvc2VyIHN5c3RlbXMgd2l0aG91dCB0aGUgZGVmaW5pdGlvbi4gICovCisjaWZuZGVmIFNJWkVfTUFYCisjIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisjZW5kaWYKKworI2lmbmRlZiBOT19NQlNVUFBPUlQKKyNpbmNsdWRlICJtYnN1cHBvcnQuaCIgLyogZ2F3ayAqLworI2VuZGlmCisjaWZuZGVmIE1CX0NVUl9NQVgKKyNkZWZpbmUgTUJfQ1VSX01BWCAxCisjZW5kaWYKKworI2lmIChkZWZpbmVkIE1CU19TVVBQT1JUKSB8fCBfTElCQworIyBkZWZpbmUgUkVfRU5BQkxFX0kxOE4KKyNlbmRpZgorCisjaWYgX19HTlVDX18gPj0gMworIyBkZWZpbmUgQkUoZXhwciwgdmFsKSBfX2J1aWx0aW5fZXhwZWN0IChleHByLCB2YWwpCisjZWxzZQorIyBkZWZpbmUgQkUoZXhwciwgdmFsKSAoZXhwcikKKyMgaWZkZWYgaW5saW5lCisjIHVuZGVmIGlubGluZQorIyBlbmRpZgorIyBkZWZpbmUgaW5saW5lCisjZW5kaWYKKworLyogTnVtYmVyIG9mIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisjZGVmaW5lIFNCQ19NQVggMjU2CisKKyNkZWZpbmUgQ09MTF9FTEVNX0xFTl9NQVggOAorCisvKiBUaGUgY2hhcmFjdGVyIHdoaWNoIHJlcHJlc2VudHMgbmV3bGluZS4gICovCisjZGVmaW5lIE5FV0xJTkVfQ0hBUiAnXG4nCisjZGVmaW5lIFdJREVfTkVXTElORV9DSEFSIEwnXG4nCisKKy8qIFJlbmFtZSB0byBzdGFuZGFyZCBBUEkgZm9yIHVzaW5nIG91dCBvZiBnbGliYy4gICovCisjaWZuZGVmIF9MSUJDCisjIGlmZGVmIF9fd2N0eXBlCisjIHVuZGVmIF9fd2N0eXBlCisjIGVuZGlmCisjIGRlZmluZSBfX3djdHlwZSB3Y3R5cGUKKyMgaWZkZWYgX19pc3djdHlwZQorIyB1bmRlZiBfX2lzd2N0eXBlCisjIGVuZGlmCisjIGRlZmluZSBfX2lzd2N0eXBlIGlzd2N0eXBlCisjIGRlZmluZSBfX2J0b3djIGJ0b3djCisjIGRlZmluZSBfX21icnRvd2MgbWJydG93YworI3VuZGVmIF9fbWVtcGNweQkvKiBHQVdLICovCisjIGRlZmluZSBfX21lbXBjcHkgbWVtcGNweQorIyBkZWZpbmUgX193Y3J0b21iIHdjcnRvbWIKKyMgZGVmaW5lIF9fcmVnZnJlZSByZWdmcmVlCisjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisjZW5kaWYgLyogbm90IF9MSUJDICovCisKKyNpZmRlZiBfX0dOVUNfXworIyBkZWZpbmUgX19hdHRyaWJ1dGUoYXJnKSBfX2F0dHJpYnV0ZV9fIChhcmcpCisjZWxzZQorIyBkZWZpbmUgX19hdHRyaWJ1dGUoYXJnKQorI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyIF9fcmVfZXJyb3JfbXNnaWRbXSBhdHRyaWJ1dGVfaGlkZGVuOworZXh0ZXJuIGNvbnN0IHNpemVfdCBfX3JlX2Vycm9yX21zZ2lkX2lkeFtdIGF0dHJpYnV0ZV9oaWRkZW47CisKKy8qIEFuIGludGVnZXIgdXNlZCB0byByZXByZXNlbnQgYSBzZXQgb2YgYml0cy4gIEl0IG11c3QgYmUgdW5zaWduZWQsCisgICBhbmQgbXVzdCBiZSBhdCBsZWFzdCBhcyB3aWRlIGFzIHVuc2lnbmVkIGludC4gICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGJpdHNldF93b3JkX3Q7CisvKiBBbGwgYml0cyBzZXQgaW4gYSBiaXRzZXRfd29yZF90LiAgKi8KKyNkZWZpbmUgQklUU0VUX1dPUkRfTUFYIFVMT05HX01BWAorLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBiaXRzZXRfd29yZF90LiAgKi8KKyNkZWZpbmUgQklUU0VUX1dPUkRfQklUUyAoc2l6ZW9mIChiaXRzZXRfd29yZF90KSAqIENIQVJfQklUKQorLyogTnVtYmVyIG9mIGJpdHNldF93b3JkX3QgaW4gYSBiaXRfc2V0LiAgKi8KKyNkZWZpbmUgQklUU0VUX1dPUkRTIChTQkNfTUFYIC8gQklUU0VUX1dPUkRfQklUUykKK3R5cGVkZWYgYml0c2V0X3dvcmRfdCBiaXRzZXRfdFtCSVRTRVRfV09SRFNdOwordHlwZWRlZiBiaXRzZXRfd29yZF90ICpyZV9iaXRzZXRfcHRyX3Q7Cit0eXBlZGVmIGNvbnN0IGJpdHNldF93b3JkX3QgKnJlX2NvbnN0X2JpdHNldF9wdHJfdDsKKworI2RlZmluZSBiaXRzZXRfc2V0KHNldCxpKSBcCisgIChzZXRbaSAvIEJJVFNFVF9XT1JEX0JJVFNdIHw9IChiaXRzZXRfd29yZF90KSAxIDw8IGkgJSBCSVRTRVRfV09SRF9CSVRTKQorI2RlZmluZSBiaXRzZXRfY2xlYXIoc2V0LGkpIFwKKyAgKHNldFtpIC8gQklUU0VUX1dPUkRfQklUU10gJj0gfigoYml0c2V0X3dvcmRfdCkgMSA8PCBpICUgQklUU0VUX1dPUkRfQklUUykpCisjZGVmaW5lIGJpdHNldF9jb250YWluKHNldCxpKSBcCisgIChzZXRbaSAvIEJJVFNFVF9XT1JEX0JJVFNdICYgKChiaXRzZXRfd29yZF90KSAxIDw8IGkgJSBCSVRTRVRfV09SRF9CSVRTKSkKKyNkZWZpbmUgYml0c2V0X2VtcHR5KHNldCkgbWVtc2V0IChzZXQsICdcMCcsIHNpemVvZiAoYml0c2V0X3QpKQorI2RlZmluZSBiaXRzZXRfc2V0X2FsbChzZXQpIG1lbXNldCAoc2V0LCAnXHhmZicsIHNpemVvZiAoYml0c2V0X3QpKQorI2RlZmluZSBiaXRzZXRfY29weShkZXN0LHNyYykgbWVtY3B5IChkZXN0LCBzcmMsIHNpemVvZiAoYml0c2V0X3QpKQorCisjZGVmaW5lIFBSRVZfV09SRF9DT05TVFJBSU5UIDB4MDAwMQorI2RlZmluZSBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCAweDAwMDIKKyNkZWZpbmUgTkVYVF9XT1JEX0NPTlNUUkFJTlQgMHgwMDA0CisjZGVmaW5lIE5FWFRfTk9UV09SRF9DT05TVFJBSU5UIDB4MDAwOAorI2RlZmluZSBQUkVWX05FV0xJTkVfQ09OU1RSQUlOVCAweDAwMTAKKyNkZWZpbmUgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQgMHgwMDIwCisjZGVmaW5lIFBSRVZfQkVHQlVGX0NPTlNUUkFJTlQgMHgwMDQwCisjZGVmaW5lIE5FWFRfRU5EQlVGX0NPTlNUUkFJTlQgMHgwMDgwCisjZGVmaW5lIFdPUkRfREVMSU1fQ09OU1RSQUlOVCAweDAxMDAKKyNkZWZpbmUgTk9UX1dPUkRfREVMSU1fQ09OU1RSQUlOVCAweDAyMDAKKwordHlwZWRlZiBlbnVtCit7CisgIElOU0lERV9XT1JEID0gUFJFVl9XT1JEX0NPTlNUUkFJTlQgfCBORVhUX1dPUkRfQ09OU1RSQUlOVCwKKyAgV09SRF9GSVJTVCA9IFBSRVZfTk9UV09SRF9DT05TVFJBSU5UIHwgTkVYVF9XT1JEX0NPTlNUUkFJTlQsCisgIFdPUkRfTEFTVCA9IFBSRVZfV09SRF9DT05TVFJBSU5UIHwgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQsCisgIElOU0lERV9OT1RXT1JEID0gUFJFVl9OT1RXT1JEX0NPTlNUUkFJTlQgfCBORVhUX05PVFdPUkRfQ09OU1RSQUlOVCwKKyAgTElORV9GSVJTVCA9IFBSRVZfTkVXTElORV9DT05TVFJBSU5ULAorICBMSU5FX0xBU1QgPSBORVhUX05FV0xJTkVfQ09OU1RSQUlOVCwKKyAgQlVGX0ZJUlNUID0gUFJFVl9CRUdCVUZfQ09OU1RSQUlOVCwKKyAgQlVGX0xBU1QgPSBORVhUX0VOREJVRl9DT05TVFJBSU5ULAorICBXT1JEX0RFTElNID0gV09SRF9ERUxJTV9DT05TVFJBSU5ULAorICBOT1RfV09SRF9ERUxJTSA9IE5PVF9XT1JEX0RFTElNX0NPTlNUUkFJTlQKK30gcmVfY29udGV4dF90eXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgYWxsb2M7CisgIGludCBuZWxlbTsKKyAgaW50ICplbGVtczsKK30gcmVfbm9kZV9zZXQ7CisKK3R5cGVkZWYgZW51bQoreworICBOT05fVFlQRSA9IDAsCisKKyAgLyogTm9kZSB0eXBlLCBUaGVzZSBhcmUgdXNlZCBieSB0b2tlbiwgbm9kZSwgdHJlZS4gICovCisgIENIQVJBQ1RFUiA9IDEsCisgIEVORF9PRl9SRSA9IDIsCisgIFNJTVBMRV9CUkFDS0VUID0gMywKKyAgT1BfQkFDS19SRUYgPSA0LAorICBPUF9QRVJJT0QgPSA1LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIENPTVBMRVhfQlJBQ0tFVCA9IDYsCisgIE9QX1VURjhfUEVSSU9EID0gNywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgIC8qIFdlIGRlZmluZSBFUFNJTE9OX0JJVCBhcyBhIG1hY3JvIHNvIHRoYXQgT1BfT1BFTl9TVUJFWFAgaXMgdXNlZAorICAgICB3aGVuIHRoZSBkZWJ1Z2dlciBzaG93cyB2YWx1ZXMgb2YgdGhpcyBlbnVtIHR5cGUuICAqLworI2RlZmluZSBFUFNJTE9OX0JJVCA4CisgIE9QX09QRU5fU1VCRVhQID0gRVBTSUxPTl9CSVQgfCAwLAorICBPUF9DTE9TRV9TVUJFWFAgPSBFUFNJTE9OX0JJVCB8IDEsCisgIE9QX0FMVCA9IEVQU0lMT05fQklUIHwgMiwKKyAgT1BfRFVQX0FTVEVSSVNLID0gRVBTSUxPTl9CSVQgfCAzLAorICBBTkNIT1IgPSBFUFNJTE9OX0JJVCB8IDQsCisKKyAgLyogVHJlZSB0eXBlLCB0aGVzZSBhcmUgdXNlZCBvbmx5IGJ5IHRyZWUuICovCisgIENPTkNBVCA9IDE2LAorICBTVUJFWFAgPSAxNywKKworICAvKiBUb2tlbiB0eXBlLCB0aGVzZSBhcmUgdXNlZCBvbmx5IGJ5IHRva2VuLiAgKi8KKyAgT1BfRFVQX1BMVVMgPSAxOCwKKyAgT1BfRFVQX1FVRVNUSU9OLAorICBPUF9PUEVOX0JSQUNLRVQsCisgIE9QX0NMT1NFX0JSQUNLRVQsCisgIE9QX0NIQVJTRVRfUkFOR0UsCisgIE9QX09QRU5fRFVQX05VTSwKKyAgT1BfQ0xPU0VfRFVQX05VTSwKKyAgT1BfTk9OX01BVENIX0xJU1QsCisgIE9QX09QRU5fQ09MTF9FTEVNLAorICBPUF9DTE9TRV9DT0xMX0VMRU0sCisgIE9QX09QRU5fRVFVSVZfQ0xBU1MsCisgIE9QX0NMT1NFX0VRVUlWX0NMQVNTLAorICBPUF9PUEVOX0NIQVJfQ0xBU1MsCisgIE9QX0NMT1NFX0NIQVJfQ0xBU1MsCisgIE9QX1dPUkQsCisgIE9QX05PVFdPUkQsCisgIE9QX1NQQUNFLAorICBPUF9OT1RTUEFDRSwKKyAgQkFDS19TTEFTSAorCit9IHJlX3Rva2VuX3R5cGVfdDsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBNdWx0aWJ5dGUgY2hhcmFjdGVycy4gICovCisgIHdjaGFyX3QgKm1iY2hhcnM7CisKKyAgLyogQ29sbGF0aW5nIHN5bWJvbHMuICAqLworIyBpZmRlZiBfTElCQworICBpbnQzMl90ICpjb2xsX3N5bXM7CisjIGVuZGlmCisKKyAgLyogRXF1aXZhbGVuY2UgY2xhc3Nlcy4gKi8KKyMgaWZkZWYgX0xJQkMKKyAgaW50MzJfdCAqZXF1aXZfY2xhc3NlczsKKyMgZW5kaWYKKworICAvKiBSYW5nZSBleHByZXNzaW9ucy4gKi8KKyMgaWZkZWYgX0xJQkMKKyAgdWludDMyX3QgKnJhbmdlX3N0YXJ0czsKKyAgdWludDMyX3QgKnJhbmdlX2VuZHM7CisjIGVsc2UgLyogbm90IF9MSUJDICovCisgIHdjaGFyX3QgKnJhbmdlX3N0YXJ0czsKKyAgd2NoYXJfdCAqcmFuZ2VfZW5kczsKKyMgZW5kaWYgLyogbm90IF9MSUJDICovCisKKyAgLyogQ2hhcmFjdGVyIGNsYXNzZXMuICovCisgIHdjdHlwZV90ICpjaGFyX2NsYXNzZXM7CisKKyAgLyogSWYgdGhpcyBjaGFyYWN0ZXIgc2V0IGlzIHRoZSBub24tbWF0Y2hpbmcgbGlzdC4gICovCisgIHVuc2lnbmVkIGludCBub25fbWF0Y2ggOiAxOworCisgIC8qICMgb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworICBpbnQgbm1iY2hhcnM7CisKKyAgLyogIyBvZiBjb2xsYXRpbmcgc3ltYm9scy4gICovCisgIGludCBuY29sbF9zeW1zOworCisgIC8qICMgb2YgZXF1aXZhbGVuY2UgY2xhc3Nlcy4gKi8KKyAgaW50IG5lcXVpdl9jbGFzc2VzOworCisgIC8qICMgb2YgcmFuZ2UgZXhwcmVzc2lvbnMuICovCisgIGludCBucmFuZ2VzOworCisgIC8qICMgb2YgY2hhcmFjdGVyIGNsYXNzZXMuICovCisgIGludCBuY2hhcl9jbGFzc2VzOworfSByZV9jaGFyc2V0X3Q7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5pb24KKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYzsJCS8qIGZvciBDSEFSQUNURVIgKi8KKyAgICByZV9iaXRzZXRfcHRyX3Qgc2Jjc2V0OwkvKiBmb3IgU0lNUExFX0JSQUNLRVQgKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgIHJlX2NoYXJzZXRfdCAqbWJjc2V0OwkvKiBmb3IgQ09NUExFWF9CUkFDS0VUICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICBpbnQgaWR4OwkJCS8qIGZvciBCQUNLX1JFRiAqLworICAgIHJlX2NvbnRleHRfdHlwZSBjdHhfdHlwZTsJLyogZm9yIEFOQ0hPUiAqLworICB9IG9wcjsKKyNpZiBfX0dOVUNfXyA+PSAyCisgIHJlX3Rva2VuX3R5cGVfdCB0eXBlIDogODsKKyNlbHNlCisgIHJlX3Rva2VuX3R5cGVfdCB0eXBlOworI2VuZGlmCisgIHVuc2lnbmVkIGludCBjb25zdHJhaW50IDogMTA7CS8qIGNvbnRleHQgY29uc3RyYWludCAqLworICB1bnNpZ25lZCBpbnQgZHVwbGljYXRlZCA6IDE7CisgIHVuc2lnbmVkIGludCBvcHRfc3ViZXhwIDogMTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICB1bnNpZ25lZCBpbnQgYWNjZXB0X21iIDogMTsKKyAgLyogVGhlc2UgMiBiaXRzIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSB1bmlvbiBpZiBuZWVkZWQgKGUuZy4gaWYgcnVubmluZyBvdXQKKyAgICAgb2YgYml0czsgbW92ZSBvcHIuYyB0byBvcHIuYy5jIGFuZCBtb3ZlIHRoZSBmbGFncyB0byBvcHIuYy5mbGFncykuICAqLworICB1bnNpZ25lZCBpbnQgbWJfcGFydGlhbCA6IDE7CisjZW5kaWYKKyAgdW5zaWduZWQgaW50IHdvcmRfY2hhciA6IDE7Cit9IHJlX3Rva2VuX3Q7CisKKyNkZWZpbmUgSVNfRVBTSUxPTl9OT0RFKHR5cGUpICgodHlwZSkgJiBFUFNJTE9OX0JJVCkKKworc3RydWN0IHJlX3N0cmluZ190Cit7CisgIC8qIEluZGljYXRlIHRoZSByYXcgYnVmZmVyIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBzdHJpbmcgcGFzc2VkIGFzIGFuCisgICAgIGFyZ3VtZW50IG9mIHJlZ2V4ZWMoKSwgcmVfc2VhcmNoKCksIGV0Yy4uICAqLworICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXdfbWJzOworICAvKiBTdG9yZSB0aGUgbXVsdGlieXRlIHN0cmluZy4gIEluIGNhc2Ugb2YgImNhc2UgaW5zZW5zaXRpdmUgbW9kZSIgbGlrZQorICAgICBSRUdfSUNBU0UsIHVwcGVyIGNhc2VzIG9mIHRoZSBzdHJpbmcgYXJlIHN0b3JlZCwgb3RoZXJ3aXNlIE1CUyBwb2ludHMKKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGF0IFJBV19NQlMgcG9pbnRzLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqbWJzOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIFN0b3JlIHRoZSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgd2hpY2ggaXMgY29ycmVzcG9uZGluZyB0byBNQlMuICAqLworICB3aW50X3QgKndjczsKKyAgaW50ICpvZmZzZXRzOworICBtYnN0YXRlX3QgY3VyX3N0YXRlOworI2VuZGlmCisgIC8qIEluZGV4IGluIFJBV19NQlMuICBFYWNoIGNoYXJhY3RlciBtYnNbaV0gY29ycmVzcG9uZHMgdG8KKyAgICAgcmF3X21ic1tyYXdfbWJzX2lkeCArIGldLiAgKi8KKyAgaW50IHJhd19tYnNfaWR4OworICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWxpZCBjaGFyYWN0ZXJzIGluIHRoZSBidWZmZXJzLiAgKi8KKyAgaW50IHZhbGlkX2xlbjsKKyAgLyogVGhlIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIGJ5dGVzIGluIHJhd19tYnMgYXJyYXkuICAqLworICBpbnQgdmFsaWRfcmF3X2xlbjsKKyAgLyogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVycyBNQlMgYW5kIFdDUy4gICovCisgIGludCBidWZzX2xlbjsKKyAgLyogVGhlIGluZGV4IGluIE1CUywgd2hpY2ggaXMgdXBkYXRlZCBieSByZV9zdHJpbmdfZmV0Y2hfYnl0ZS4gICovCisgIGludCBjdXJfaWR4OworICAvKiBsZW5ndGggb2YgUkFXX01CUyBhcnJheS4gICovCisgIGludCByYXdfbGVuOworICAvKiBUaGlzIGlzIFJBV19MRU4gLSBSQVdfTUJTX0lEWCArIFZBTElEX0xFTiAtIFZBTElEX1JBV19MRU4uICAqLworICBpbnQgbGVuOworICAvKiBFbmQgb2YgdGhlIGJ1ZmZlciBtYXkgYmUgc2hvcnRlciB0aGFuIGl0cyBsZW5ndGggaW4gdGhlIGNhc2VzIHN1Y2gKKyAgICAgYXMgcmVfbWF0Y2hfMiwgcmVfc2VhcmNoXzIuICBUaGVuLCB3ZSB1c2UgU1RPUCBmb3IgZW5kIG9mIHRoZSBidWZmZXIKKyAgICAgaW5zdGVhZCBvZiBMRU4uICAqLworICBpbnQgcmF3X3N0b3A7CisgIC8qIFRoaXMgaXMgUkFXX1NUT1AgLSBSQVdfTUJTX0lEWCBhZGp1c3RlZCB0aHJvdWdoIE9GRlNFVFMuICAqLworICBpbnQgc3RvcDsKKworICAvKiBUaGUgY29udGV4dCBvZiBtYnNbMF0uICBXZSBzdG9yZSB0aGUgY29udGV4dCBpbmRlcGVuZGVudGx5LCBzaW5jZQorICAgICB0aGUgY29udGV4dCBvZiBtYnNbMF0gbWF5IGJlIGRpZmZlcmVudCBmcm9tIHJhd19tYnNbMF0sIHdoaWNoIGlzCisgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IHN0cmluZy4gICovCisgIHVuc2lnbmVkIGludCB0aXBfY29udGV4dDsKKyAgLyogVGhlIHRyYW5zbGF0aW9uIHBhc3NlZCBhcyBhIHBhcnQgb2YgYW4gYXJndW1lbnQgb2YgcmVfY29tcGlsZV9wYXR0ZXJuLiAgKi8KKyAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnM7CisgIC8qIENvcHkgb2YgcmVfZGZhX3QncyB3b3JkX2NoYXIuICAqLworICByZV9jb25zdF9iaXRzZXRfcHRyX3Qgd29yZF9jaGFyOworICAvKiAxIGlmIFJFR19JQ0FTRS4gICovCisgIHVuc2lnbmVkIGNoYXIgaWNhc2U7CisgIHVuc2lnbmVkIGNoYXIgaXNfdXRmODsKKyAgdW5zaWduZWQgY2hhciBtYXBfbm90YXNjaWk7CisgIHVuc2lnbmVkIGNoYXIgbWJzX2FsbG9jYXRlZDsKKyAgdW5zaWduZWQgY2hhciBvZmZzZXRzX25lZWRlZDsKKyAgdW5zaWduZWQgY2hhciBuZXdsaW5lX2FuY2hvcjsKKyAgdW5zaWduZWQgY2hhciB3b3JkX29wc191c2VkOworICBpbnQgbWJfY3VyX21heDsKK307Cit0eXBlZGVmIHN0cnVjdCByZV9zdHJpbmdfdCByZV9zdHJpbmdfdDsKKworCitzdHJ1Y3QgcmVfZGZhX3Q7Cit0eXBlZGVmIHN0cnVjdCByZV9kZmFfdCByZV9kZmFfdDsKKworI2lmbmRlZiBfTElCQworIyBpZmRlZiBfX2kzODZfXworIyAgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uICAgX19hdHRyaWJ1dGUgKChyZWdwYXJtICgzKSwgc3RkY2FsbCkpCisjIGVsc2UKKyMgIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTk9UX0lOX2xpYmMKK3N0YXRpYyByZWdfZXJyY29kZV90IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHJlX3N0cmluZ190ICpwc3RyLAorCQkJCQkJaW50IG5ld19idWZfbGVuKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyB2b2lkIGJ1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorICBpbnRlcm5hbF9mdW5jdGlvbjsKKyMgZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyB2b2lkIGJ1aWxkX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVfc3RyaW5nX2NvbnRleHRfYXQgKGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCwKKwkJCQkJICBpbnQgZWZsYWdzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKTsKKyNlbmRpZgorI2RlZmluZSByZV9zdHJpbmdfcGVla19ieXRlKHBzdHIsIG9mZnNldCkgXAorICAoKHBzdHIpLT5tYnNbKHBzdHIpLT5jdXJfaWR4ICsgb2Zmc2V0XSkKKyNkZWZpbmUgcmVfc3RyaW5nX2ZldGNoX2J5dGUocHN0cikgXAorICAoKHBzdHIpLT5tYnNbKHBzdHIpLT5jdXJfaWR4KytdKQorI2RlZmluZSByZV9zdHJpbmdfZmlyc3RfYnl0ZShwc3RyLCBpZHgpIFwKKyAgKChpZHgpID09IChwc3RyKS0+dmFsaWRfbGVuIHx8IChwc3RyKS0+d2NzW2lkeF0gIT0gV0VPRikKKyNkZWZpbmUgcmVfc3RyaW5nX2lzX3NpbmdsZV9ieXRlX2NoYXIocHN0ciwgaWR4KSBcCisgICgocHN0ciktPndjc1tpZHhdICE9IFdFT0YgJiYgKChwc3RyKS0+dmFsaWRfbGVuID09IChpZHgpICsgMSBcCisJCQkJfHwgKHBzdHIpLT53Y3NbKGlkeCkgKyAxXSAhPSBXRU9GKSkKKyNkZWZpbmUgcmVfc3RyaW5nX2VvaShwc3RyKSAoKHBzdHIpLT5zdG9wIDw9IChwc3RyKS0+Y3VyX2lkeCkKKyNkZWZpbmUgcmVfc3RyaW5nX2N1cl9pZHgocHN0cikgKChwc3RyKS0+Y3VyX2lkeCkKKyNkZWZpbmUgcmVfc3RyaW5nX2dldF9idWZmZXIocHN0cikgKChwc3RyKS0+bWJzKQorI2RlZmluZSByZV9zdHJpbmdfbGVuZ3RoKHBzdHIpICgocHN0ciktPmxlbikKKyNkZWZpbmUgcmVfc3RyaW5nX2J5dGVfYXQocHN0cixpZHgpICgocHN0ciktPm1ic1tpZHhdKQorI2RlZmluZSByZV9zdHJpbmdfc2tpcF9ieXRlcyhwc3RyLGlkeCkgKChwc3RyKS0+Y3VyX2lkeCArPSAoaWR4KSkKKyNkZWZpbmUgcmVfc3RyaW5nX3NldF9pbmRleChwc3RyLGlkeCkgKChwc3RyKS0+Y3VyX2lkeCA9IChpZHgpKQorCisjaWZuZGVmIF9MSUJDCisjIGlmIEhBVkVfQUxMT0NBCisjICBpZiAoX01TQ19WRVIpCisjICAgaW5jbHVkZSA8bWFsbG9jLmg+CisjICAgZGVmaW5lIF9fbGliY191c2VfYWxsb2NhKG4pIDAKKyMgIGVsc2UKKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKy8qIFRoZSBPUyB1c3VhbGx5IGd1YXJhbnRlZXMgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKKyAgIGFsbG9jYXRlIGFueXRoaW5nIGxhcmdlciB0aGFuIDQwOTYgYnl0ZXMuICBBbHNvIGNhcmUgZm9yIHRoZSBwb3NzaWJpbGl0eQorICAgb2YgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisjICBkZWZpbmUgX19saWJjX3VzZV9hbGxvY2EobikgKChuKSA8IDQwMzIpCisjICBlbmRpZgorIyBlbHNlCisvKiBhbGxvY2EgaXMgaW1wbGVtZW50ZWQgd2l0aCBtYWxsb2MsIHNvIGp1c3QgdXNlIG1hbGxvYy4gICovCisjICBkZWZpbmUgX19saWJjX3VzZV9hbGxvY2EobikgMAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgcmVfbWFsbG9jKHQsbikgKCh0ICopIG1hbGxvYyAoKG4pICogc2l6ZW9mICh0KSkpCisvKiBTdW5PUyA0LjEueCByZWFsbG9jIGRvZXNuJ3QgYWNjZXB0IG51bGwgcG9pbnRlcnM6IHByZS1TdGFuZGFyZCBDLiBTaWdoLiAqLworI2RlZmluZSByZV9yZWFsbG9jKHAsdCxuKSAoKHAgIT0gTlVMTCkgPyAodCAqKSByZWFsbG9jIChwLChuKSpzaXplb2YodCkpIDogKHQgKikgY2FsbG9jKG4sc2l6ZW9mKHQpKSkKKyNkZWZpbmUgcmVfZnJlZShwKSBmcmVlIChwKQorCitzdHJ1Y3QgYmluX3RyZWVfdAoreworICBzdHJ1Y3QgYmluX3RyZWVfdCAqcGFyZW50OworICBzdHJ1Y3QgYmluX3RyZWVfdCAqbGVmdDsKKyAgc3RydWN0IGJpbl90cmVlX3QgKnJpZ2h0OworICBzdHJ1Y3QgYmluX3RyZWVfdCAqZmlyc3Q7CisgIHN0cnVjdCBiaW5fdHJlZV90ICpuZXh0OworCisgIHJlX3Rva2VuX3QgdG9rZW47CisKKyAgLyogYG5vZGVfaWR4JyBpcyB0aGUgaW5kZXggaW4gZGZhLT5ub2RlcywgaWYgYHR5cGUnID09IDAuCisgICAgIE90aGVyd2lzZSBgdHlwZScgaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhpcyBub2RlLiAgKi8KKyAgaW50IG5vZGVfaWR4OworfTsKK3R5cGVkZWYgc3RydWN0IGJpbl90cmVlX3QgYmluX3RyZWVfdDsKKworI2RlZmluZSBCSU5fVFJFRV9TVE9SQUdFX1NJWkUgXAorICAoKDEwMjQgLSBzaXplb2YgKHZvaWQgKikpIC8gc2l6ZW9mIChiaW5fdHJlZV90KSkKKworc3RydWN0IGJpbl90cmVlX3N0b3JhZ2VfdAoreworICBzdHJ1Y3QgYmluX3RyZWVfc3RvcmFnZV90ICpuZXh0OworICBiaW5fdHJlZV90IGRhdGFbQklOX1RSRUVfU1RPUkFHRV9TSVpFXTsKK307Cit0eXBlZGVmIHN0cnVjdCBiaW5fdHJlZV9zdG9yYWdlX3QgYmluX3RyZWVfc3RvcmFnZV90OworCisjZGVmaW5lIENPTlRFWFRfV09SRCAxCisjZGVmaW5lIENPTlRFWFRfTkVXTElORSAoQ09OVEVYVF9XT1JEIDw8IDEpCisjZGVmaW5lIENPTlRFWFRfQkVHQlVGIChDT05URVhUX05FV0xJTkUgPDwgMSkKKyNkZWZpbmUgQ09OVEVYVF9FTkRCVUYgKENPTlRFWFRfQkVHQlVGIDw8IDEpCisKKyNkZWZpbmUgSVNfV09SRF9DT05URVhUKGMpICgoYykgJiBDT05URVhUX1dPUkQpCisjZGVmaW5lIElTX05FV0xJTkVfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9ORVdMSU5FKQorI2RlZmluZSBJU19CRUdCVUZfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9CRUdCVUYpCisjZGVmaW5lIElTX0VOREJVRl9DT05URVhUKGMpICgoYykgJiBDT05URVhUX0VOREJVRikKKyNkZWZpbmUgSVNfT1JESU5BUllfQ09OVEVYVChjKSAoKGMpID09IDApCisKKyNkZWZpbmUgSVNfV09SRF9DSEFSKGNoKSAoaXNhbG51bSAoY2gpIHx8IChjaCkgPT0gJ18nKQorI2RlZmluZSBJU19ORVdMSU5FKGNoKSAoKGNoKSA9PSBORVdMSU5FX0NIQVIpCisjZGVmaW5lIElTX1dJREVfV09SRF9DSEFSKGNoKSAoaXN3YWxudW0gKGNoKSB8fCAoY2gpID09IEwnXycpCisjZGVmaW5lIElTX1dJREVfTkVXTElORShjaCkgKChjaCkgPT0gV0lERV9ORVdMSU5FX0NIQVIpCisKKyNkZWZpbmUgTk9UX1NBVElTRllfUFJFVl9DT05TVFJBSU5UKGNvbnN0cmFpbnQsY29udGV4dCkgXAorICgoKChjb25zdHJhaW50KSAmIFBSRVZfV09SRF9DT05TVFJBSU5UKSAmJiAhSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCkgJiYgSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX05FV0xJTkVfQ09OU1RSQUlOVCkgJiYgIUlTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpXAorICB8fCAoKGNvbnN0cmFpbnQgJiBQUkVWX0JFR0JVRl9DT05TVFJBSU5UKSAmJiAhSVNfQkVHQlVGX0NPTlRFWFQgKGNvbnRleHQpKSkKKworI2RlZmluZSBOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQoY29uc3RyYWludCxjb250ZXh0KSBcCisgKCgoKGNvbnN0cmFpbnQpICYgTkVYVF9XT1JEX0NPTlNUUkFJTlQpICYmICFJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgoKGNvbnN0cmFpbnQpICYgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQpICYmIElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKCgoY29uc3RyYWludCkgJiBORVhUX05FV0xJTkVfQ09OU1RSQUlOVCkgJiYgIUlTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKCgoY29uc3RyYWludCkgJiBORVhUX0VOREJVRl9DT05TVFJBSU5UKSAmJiAhSVNfRU5EQlVGX0NPTlRFWFQgKGNvbnRleHQpKSkKKworc3RydWN0IHJlX2RmYXN0YXRlX3QKK3sKKyAgdW5zaWduZWQgaW50IGhhc2g7CisgIHJlX25vZGVfc2V0IG5vZGVzOworICByZV9ub2RlX3NldCBub25fZXBzX25vZGVzOworICByZV9ub2RlX3NldCBpbnZlY2xvc3VyZTsKKyAgcmVfbm9kZV9zZXQgKmVudHJhbmNlX25vZGVzOworICBzdHJ1Y3QgcmVfZGZhc3RhdGVfdCAqKnRydGFibGUsICoqd29yZF90cnRhYmxlOworICB1bnNpZ25lZCBpbnQgY29udGV4dCA6IDQ7CisgIHVuc2lnbmVkIGludCBoYWx0IDogMTsKKyAgLyogSWYgdGhpcyBzdGF0ZSBjYW4gYWNjZXB0IGBtdWx0aSBieXRlJy4KKyAgICAgTm90ZSB0aGF0IHdlIHJlZmVyIHRvIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCBhbmQgbXVsdGkgY2hhcmFjdGVyCisgICAgIGNvbGxhdGluZyBlbGVtZW50cyBhcyBgbXVsdGkgYnl0ZScuICAqLworICB1bnNpZ25lZCBpbnQgYWNjZXB0X21iIDogMTsKKyAgLyogSWYgdGhpcyBzdGF0ZSBoYXMgYmFja3JlZmVyZW5jZSBub2RlKHMpLiAgKi8KKyAgdW5zaWduZWQgaW50IGhhc19iYWNrcmVmIDogMTsKKyAgdW5zaWduZWQgaW50IGhhc19jb25zdHJhaW50IDogMTsKK307Cit0eXBlZGVmIHN0cnVjdCByZV9kZmFzdGF0ZV90IHJlX2RmYXN0YXRlX3Q7CisKK3N0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeQoreworICBpbnQgbnVtOworICBpbnQgYWxsb2M7CisgIHJlX2RmYXN0YXRlX3QgKiphcnJheTsKK307CisKKy8qIEFycmF5IHR5cGUgdXNlZCBpbiByZV9zdWJfbWF0Y2hfbGFzdF90IGFuZCByZV9zdWJfbWF0Y2hfdG9wX3QuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgbmV4dF9pZHg7CisgIGludCBhbGxvYzsKKyAgcmVfZGZhc3RhdGVfdCAqKmFycmF5OworfSBzdGF0ZV9hcnJheV90OworCisvKiBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSBOT0RFIHdob3NlIHR5cGUgaXMgT1BfQ0xPU0VfU1VCRVhQLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IG5vZGU7CisgIGludCBzdHJfaWR4OyAvKiBUaGUgcG9zaXRpb24gTk9ERSBtYXRjaCBhdC4gICovCisgIHN0YXRlX2FycmF5X3QgcGF0aDsKK30gcmVfc3ViX21hdGNoX2xhc3RfdDsKKworLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUgTk9ERSB3aG9zZSB0eXBlIGlzIE9QX09QRU5fU1VCRVhQLgorICAgQW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub2RlLCB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUCwKKyAgIGNvcnJlc3BvbmRpbmcgdG8gTk9ERSBpcyBzdG9yZWQgaW4gTEFTVFMuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgc3RyX2lkeDsKKyAgaW50IG5vZGU7CisgIHN0YXRlX2FycmF5X3QgKnBhdGg7CisgIGludCBhbGFzdHM7IC8qIEFsbG9jYXRpb24gc2l6ZSBvZiBMQVNUUy4gICovCisgIGludCBubGFzdHM7IC8qIFRoZSBudW1iZXIgb2YgTEFTVFMuICAqLworICByZV9zdWJfbWF0Y2hfbGFzdF90ICoqbGFzdHM7Cit9IHJlX3N1Yl9tYXRjaF90b3BfdDsKKworc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkKK3sKKyAgaW50IG5vZGU7CisgIGludCBzdHJfaWR4OworICBpbnQgc3ViZXhwX2Zyb207CisgIGludCBzdWJleHBfdG87CisgIGNoYXIgbW9yZTsKKyAgY2hhciB1bnVzZWQ7CisgIHVuc2lnbmVkIHNob3J0IGludCBlcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwOworfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogVGhlIHN0cmluZyBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgc3RyaW5nLiAgKi8KKyAgcmVfc3RyaW5nX3QgaW5wdXQ7CisjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYTsKKyNlbHNlCisgIGNvbnN0IHJlX2RmYV90ICpkZmE7CisjZW5kaWYKKyAgLyogRUZMQUdTIG9mIHRoZSBhcmd1bWVudCBvZiByZWdleGVjLiAgKi8KKyAgaW50IGVmbGFnczsKKyAgLyogV2hlcmUgdGhlIG1hdGNoaW5nIGVuZHMuICAqLworICBpbnQgbWF0Y2hfbGFzdDsKKyAgaW50IGxhc3Rfbm9kZTsKKyAgLyogVGhlIHN0YXRlIGxvZyB1c2VkIGJ5IHRoZSBtYXRjaGVyLiAgKi8KKyAgcmVfZGZhc3RhdGVfdCAqKnN0YXRlX2xvZzsKKyAgaW50IHN0YXRlX2xvZ190b3A7CisgIC8qIEJhY2sgcmVmZXJlbmNlIGNhY2hlLiAgKi8KKyAgaW50IG5ia3JlZl9lbnRzOworICBpbnQgYWJrcmVmX2VudHM7CisgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnRzOworICBpbnQgbWF4X21iX2VsZW1fbGVuOworICBpbnQgbnN1Yl90b3BzOworICBpbnQgYXN1Yl90b3BzOworICByZV9zdWJfbWF0Y2hfdG9wX3QgKipzdWJfdG9wczsKK30gcmVfbWF0Y2hfY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdAoreworICByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0YXRlczsKKyAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RhdGVzOworICBpbnQgbGFzdF9ub2RlOworICBpbnQgbGFzdF9zdHJfaWR4OworICByZV9ub2RlX3NldCBsaW1pdHM7Cit9IHJlX3NpZnRfY29udGV4dF90OworCitzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdAoreworICBpbnQgaWR4OworICBpbnQgbm9kZTsKKyAgcmVnbWF0Y2hfdCAqcmVnczsKKyAgcmVfbm9kZV9zZXQgZXBzX3ZpYV9ub2RlczsKK307CisKK3N0cnVjdCByZV9mYWlsX3N0YWNrX3QKK3sKKyAgaW50IG51bTsKKyAgaW50IGFsbG9jOworICBzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdCAqc3RhY2s7Cit9OworCitzdHJ1Y3QgcmVfZGZhX3QKK3sKKyAgcmVfdG9rZW5fdCAqbm9kZXM7CisgIHNpemVfdCBub2Rlc19hbGxvYzsKKyAgc2l6ZV90IG5vZGVzX2xlbjsKKyAgaW50ICpuZXh0czsKKyAgaW50ICpvcmdfaW5kaWNlczsKKyAgcmVfbm9kZV9zZXQgKmVkZXN0czsKKyAgcmVfbm9kZV9zZXQgKmVjbG9zdXJlczsKKyAgcmVfbm9kZV9zZXQgKmludmVjbG9zdXJlczsKKyAgc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5ICpzdGF0ZV90YWJsZTsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZTsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZV93b3JkOworICByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlX25sOworICByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlX2JlZ2J1ZjsKKyAgYmluX3RyZWVfdCAqc3RyX3RyZWU7CisgIGJpbl90cmVlX3N0b3JhZ2VfdCAqc3RyX3RyZWVfc3RvcmFnZTsKKyAgcmVfYml0c2V0X3B0cl90IHNiX2NoYXI7CisgIGludCBzdHJfdHJlZV9zdG9yYWdlX2lkeDsKKworICAvKiBudW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgYHJlX25zdWInIGlzIGluIHJlZ2V4X3QuICAqLworICB1bnNpZ25lZCBpbnQgc3RhdGVfaGFzaF9tYXNrOworICBpbnQgaW5pdF9ub2RlOworICBpbnQgbmJhY2tyZWY7IC8qIFRoZSBudW1iZXIgb2YgYmFja3JlZmVyZW5jZSBpbiB0aGlzIGRmYS4gICovCisKKyAgLyogQml0bWFwIGV4cHJlc3Npbmcgd2hpY2ggYmFja3JlZmVyZW5jZSBpcyB1c2VkLiAgKi8KKyAgYml0c2V0X3dvcmRfdCB1c2VkX2JrcmVmX21hcDsKKyAgYml0c2V0X3dvcmRfdCBjb21wbGV0ZWRfYmtyZWZfbWFwOworCisgIHVuc2lnbmVkIGludCBoYXNfcGx1cmFsX21hdGNoIDogMTsKKyAgLyogSWYgdGhpcyBkZmEgaGFzICJtdWx0aWJ5dGUgbm9kZSIsIHdoaWNoIGlzIGEgYmFja3JlZmVyZW5jZSBvcgorICAgICBhIG5vZGUgd2hpY2ggY2FuIGFjY2VwdCBtdWx0aWJ5dGUgY2hhcmFjdGVyIG9yIG11bHRpIGNoYXJhY3RlcgorICAgICBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIHVuc2lnbmVkIGludCBoYXNfbWJfbm9kZSA6IDE7CisgIHVuc2lnbmVkIGludCBpc191dGY4IDogMTsKKyAgdW5zaWduZWQgaW50IG1hcF9ub3Rhc2NpaSA6IDE7CisgIHVuc2lnbmVkIGludCB3b3JkX29wc191c2VkIDogMTsKKyAgaW50IG1iX2N1cl9tYXg7CisgIGJpdHNldF90IHdvcmRfY2hhcjsKKyAgcmVnX3N5bnRheF90IHN5bnRheDsKKyAgaW50ICpzdWJleHBfbWFwOworI2lmZGVmIERFQlVHCisgIGNoYXIqIHJlX3N0cjsKKyNlbmRpZgorI2lmIGRlZmluZWQgX0xJQkMKKyAgX19saWJjX2xvY2tfZGVmaW5lICgsIGxvY2spCisjZW5kaWYKK307CisKKyNkZWZpbmUgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eShzZXQpIG1lbXNldCAoc2V0LCAnXDAnLCBzaXplb2YgKHJlX25vZGVfc2V0KSkKKyNkZWZpbmUgcmVfbm9kZV9zZXRfcmVtb3ZlKHNldCxpZCkgXAorICAocmVfbm9kZV9zZXRfcmVtb3ZlX2F0IChzZXQsIHJlX25vZGVfc2V0X2NvbnRhaW5zIChzZXQsIGlkKSAtIDEpKQorI2RlZmluZSByZV9ub2RlX3NldF9lbXB0eShwKSAoKHApLT5uZWxlbSA9IDApCisjZGVmaW5lIHJlX25vZGVfc2V0X2ZyZWUoc2V0KSByZV9mcmVlICgoc2V0KS0+ZWxlbXMpCisMCisKK3R5cGVkZWYgZW51bQoreworICBTQl9DSEFSLAorICBNQl9DSEFSLAorICBFUVVJVl9DTEFTUywKKyAgQ09MTF9TWU0sCisgIENIQVJfQ0xBU1MKK30gYnJhY2tldF9lbGVtX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGJyYWNrZXRfZWxlbV90eXBlIHR5cGU7CisgIHVuaW9uCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNoOworICAgIHVuc2lnbmVkIGNoYXIgKm5hbWU7CisgICAgd2NoYXJfdCB3Y2g7CisgIH0gb3ByOworfSBicmFja2V0X2VsZW1fdDsKKworCisvKiBJbmxpbmUgZnVuY3Rpb25zIGZvciBiaXRzZXQgb3BlcmF0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0c2V0X25vdCAoYml0c2V0X3Qgc2V0KQoreworICBpbnQgYml0c2V0X2k7CisgIGZvciAoYml0c2V0X2kgPSAwOyBiaXRzZXRfaSA8IEJJVFNFVF9XT1JEUzsgKytiaXRzZXRfaSkKKyAgICBzZXRbYml0c2V0X2ldID0gfnNldFtiaXRzZXRfaV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0c2V0X21lcmdlIChiaXRzZXRfdCBkZXN0LCBjb25zdCBiaXRzZXRfdCBzcmMpCit7CisgIGludCBiaXRzZXRfaTsKKyAgZm9yIChiaXRzZXRfaSA9IDA7IGJpdHNldF9pIDwgQklUU0VUX1dPUkRTOyArK2JpdHNldF9pKQorICAgIGRlc3RbYml0c2V0X2ldIHw9IHNyY1tiaXRzZXRfaV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0c2V0X21hc2sgKGJpdHNldF90IGRlc3QsIGNvbnN0IGJpdHNldF90IHNyYykKK3sKKyAgaW50IGJpdHNldF9pOworICBmb3IgKGJpdHNldF9pID0gMDsgYml0c2V0X2kgPCBCSVRTRVRfV09SRFM7ICsrYml0c2V0X2kpCisgICAgZGVzdFtiaXRzZXRfaV0gJj0gc3JjW2JpdHNldF9pXTsKK30KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBJbmxpbmUgZnVuY3Rpb25zIGZvciByZV9zdHJpbmcuICAqLworc3RhdGljIGlubGluZSBpbnQKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9zdHJpbmdfY2hhcl9zaXplX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKK3sKKyAgaW50IGJ5dGVfaWR4OworICBpZiAocHN0ci0+bWJfY3VyX21heCA9PSAxKQorICAgIHJldHVybiAxOworICBmb3IgKGJ5dGVfaWR4ID0gMTsgaWR4ICsgYnl0ZV9pZHggPCBwc3RyLT52YWxpZF9sZW47ICsrYnl0ZV9pZHgpCisgICAgaWYgKHBzdHItPndjc1tpZHggKyBieXRlX2lkeF0gIT0gV0VPRikKKyAgICAgIGJyZWFrOworICByZXR1cm4gYnl0ZV9pZHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgd2ludF90CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX3djaGFyX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKK3sKKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKyAgICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+bWJzW2lkeF07CisgIHJldHVybiAod2ludF90KSBwc3RyLT53Y3NbaWR4XTsKK30KKworIyBpZm5kZWYgTk9UX0lOX2xpYmMKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlICgocHVyZSkpCityZV9zdHJpbmdfZWxlbV9zaXplX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKK3sKKyMgIGlmZGVmIF9MSUJDCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsICpleHRyYTsKKyAgY29uc3QgaW50MzJfdCAqdGFibGUsICppbmRpcmVjdDsKKyAgaW50MzJfdCB0bXA7CisjICAgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorICB1aW50X2Zhc3QzMl90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisKKyAgaWYgKG5ydWxlcyAhPSAwKQorICAgIHsKKyAgICAgIHRhYmxlID0gKGNvbnN0IGludDMyX3QgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFTUIpOworICAgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9FWFRSQU1CKTsKKyAgICAgIGluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQlfTkxfQ09MTEFURV9JTkRJUkVDVE1CKTsKKyAgICAgIHAgPSBwc3RyLT5tYnMgKyBpZHg7CisgICAgICB0bXAgPSBmaW5kaWR4ICgmcCk7CisgICAgICByZXR1cm4gcCAtIHBzdHItPm1icyAtIGlkeDsKKyAgICB9CisgIGVsc2UKKyMgIGVuZGlmIC8qIF9MSUJDICovCisgICAgcmV0dXJuIDE7Cit9CisjIGVuZGlmCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworI2VuZGlmIC8qICBfUkVHRVhfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4ZWMuYyBiL2NvbXBhdC9yZWdleC9yZWdleGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkzNThhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleGVjLmMKQEAgLTAsMCArMSw0MzY4IEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUsIDIwMDcsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWF0Y2hfY3R4X2luaXQgKHJlX21hdGNoX2NvbnRleHRfdCAqY2FjaGUsIGludCBlZmxhZ3MsCisJCQkJICAgICBpbnQgbikgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdm9pZCBtYXRjaF9jdHhfY2xlYW4gKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdm9pZCBtYXRjaF9jdHhfZnJlZSAocmVfbWF0Y2hfY29udGV4dF90ICpjYWNoZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXRjaF9jdHhfYWRkX2VudHJ5IChyZV9tYXRjaF9jb250ZXh0X3QgKmNhY2hlLCBpbnQgbm9kZSwKKwkJCQkJICBpbnQgc3RyX2lkeCwgaW50IGZyb20sIGludCB0bykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IHN0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgbWF0Y2hfY3R4X2FkZF9zdWJ0b3AgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG5vZGUsCisJCQkJCSAgIGludCBzdHJfaWR4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9zdWJfbWF0Y2hfbGFzdF90ICogbWF0Y2hfY3R4X2FkZF9zdWJsYXN0IChyZV9zdWJfbWF0Y2hfdG9wX3QgKnN1YnRvcCwKKwkJCQkJCSAgIGludCBub2RlLCBpbnQgc3RyX2lkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdm9pZCBzaWZ0X2N0eF9pbml0IChyZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwgcmVfZGZhc3RhdGVfdCAqKnNpZnRlZF9zdHMsCisJCQkgICByZV9kZmFzdGF0ZV90ICoqbGltaXRlZF9zdHMsIGludCBsYXN0X25vZGUsCisJCQkgICBpbnQgbGFzdF9zdHJfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IHJlX3NlYXJjaF9pbnRlcm5hbCAoY29uc3QgcmVnZXhfdCAqcHJlZywKKwkJCQkJIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbmd0aCwKKwkJCQkJIGludCBzdGFydCwgaW50IHJhbmdlLCBpbnQgc3RvcCwKKwkJCQkJIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sCisJCQkJCSBpbnQgZWZsYWdzKTsKK3N0YXRpYyBpbnQgcmVfc2VhcmNoXzJfc3R1YiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCQkJICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgbGVuZ3RoMSwKKwkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IGxlbmd0aDIsCisJCQkgICAgIGludCBzdGFydCwgaW50IHJhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCQkJICAgICBpbnQgc3RvcCwgaW50IHJldF9sZW4pOworc3RhdGljIGludCByZV9zZWFyY2hfc3R1YiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCQkJICAgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuZ3RoLCBpbnQgc3RhcnQsCisJCQkgICBpbnQgcmFuZ2UsIGludCBzdG9wLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCQkJICAgaW50IHJldF9sZW4pOworc3RhdGljIHVuc2lnbmVkIHJlX2NvcHlfcmVncyAoc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCQkJICAgICAgaW50IG5yZWdzLCBpbnQgcmVnc19hbGxvY2F0ZWQpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KTsKK3N0YXRpYyBpbnQgY2hlY2tfbWF0Y2hpbmcgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGZsX2xvbmdlc3RfbWF0Y2gsCisJCQkgICBpbnQgKnBfbWF0Y2hfZmlyc3QpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgICAgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLCBpbnQgaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWdzIChjb25zdCByZV9kZmFfdCAqZGZhLCByZWdtYXRjaF90ICpwbWF0Y2gsCisJCQkgcmVnbWF0Y2hfdCAqcHJldl9pZHhfbWF0Y2gsIGludCBjdXJfbm9kZSwKKwkJCSBpbnQgY3VyX2lkeCwgaW50IG5tYXRjaCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBwdXNoX2ZhaWxfc3RhY2sgKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzLAorCQkJCSAgICAgIGludCBzdHJfaWR4LCBpbnQgZGVzdF9ub2RlLCBpbnQgbnJlZ3MsCisJCQkJICAgICAgcmVnbWF0Y2hfdCAqcmVncywKKwkJCQkgICAgICByZV9ub2RlX3NldCAqZXBzX3ZpYV9ub2RlcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBzZXRfcmVncyAoY29uc3QgcmVnZXhfdCAqcHJlZywKKwkJCSAgICAgICBjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgICAgICAgc2l6ZV90IG5tYXRjaCwgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCQkJICAgICAgIGludCBmbF9iYWNrdHJhY2spIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyBpbnQgc2lmdF9zdGF0ZXNfaXRlcl9tYiAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCXJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkJCWludCBub2RlX2lkeCwgaW50IHN0cl9pZHgsIGludCBtYXhfc3RyX2lkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyByZWdfZXJyY29kZV90IHNpZnRfc3RhdGVzX2JhY2t3YXJkIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgIHJlX3NpZnRfY29udGV4dF90ICpzY3R4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX3NpZnRlZF9zdGF0ZXMgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwgaW50IHN0cl9pZHgsCisJCQkJCSAgcmVfbm9kZV9zZXQgKmN1cl9kZXN0KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IHVwZGF0ZV9jdXJfc2lmdGVkX3N0YXRlIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgICAgIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkJCQkgICAgICBpbnQgc3RyX2lkeCwKKwkJCQkJICAgICAgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgYWRkX2Vwc2lsb25fc3JjX25vZGVzIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkgICAgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCQkJCSAgICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGNoZWNrX2RzdF9saW1pdHMgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgICAgcmVfbm9kZV9zZXQgKmxpbWl0cywKKwkJCSAgICAgaW50IGRzdF9ub2RlLCBpbnQgZHN0X2lkeCwgaW50IHNyY19ub2RlLAorCQkJICAgICBpbnQgc3JjX2lkeCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3NfMSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQlpbnQgYm91bmRhcmllcywgaW50IHN1YmV4cF9pZHgsCisJCQkJCWludCBmcm9tX25vZGUsIGludCBia3JlZl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICAgaW50IGxpbWl0LCBpbnQgc3ViZXhwX2lkeCwKKwkJCQkgICAgICBpbnQgbm9kZSwgaW50IHN0cl9pZHgsCisJCQkJICAgICAgaW50IGJrcmVmX2lkeCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19zdWJleHBfbGltaXRzIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkgIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkJCQkgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzLAorCQkJCQkgIHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCQkJCSAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmJrcmVmX2VudHMsCisJCQkJCSAgaW50IHN0cl9pZHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3Qgc2lmdF9zdGF0ZXNfYmtyZWYgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCQkJCWludCBzdHJfaWR4LCBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBtZXJnZV9zdGF0ZV9hcnJheSAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJcmVfZGZhc3RhdGVfdCAqKmRzdCwKKwkJCQkJcmVfZGZhc3RhdGVfdCAqKnNyYywgaW50IG51bSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqZmluZF9yZWNvdmVyX3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsCisJCQkJCSByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlX2RmYXN0YXRlX3QgKnRyYW5zaXRfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwKKwkJCQkgICAgIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgICAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICptZXJnZV9zdGF0ZV93aXRoX2xvZyAocmVnX2VycmNvZGVfdCAqZXJyLAorCQkJCQkgICAgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgICAgcmVfZGZhc3RhdGVfdCAqbmV4dF9zdGF0ZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCQlyZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJCQkJaW50IHN0cl9pZHgpIGludGVybmFsX2Z1bmN0aW9uOworI2lmIDAKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICp0cmFuc2l0X3N0YXRlX3NiIChyZWdfZXJyY29kZV90ICplcnIsCisJCQkJCXJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJcmVfZGZhc3RhdGVfdCAqcHN0YXRlKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyNlbmRpZgorI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgcmVnX2VycmNvZGVfdCB0cmFuc2l0X3N0YXRlX21iIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICAgIHJlX2RmYXN0YXRlX3QgKnBzdGF0ZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyByZWdfZXJyY29kZV90IHRyYW5zaXRfc3RhdGVfYmtyZWYgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZ2V0X3N1YmV4cCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSBpbnQgYmtyZWZfbm9kZSwgaW50IGJrcmVmX3N0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZ2V0X3N1YmV4cF9zdWIgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgICAgIGNvbnN0IHJlX3N1Yl9tYXRjaF90b3BfdCAqc3ViX3RvcCwKKwkJCQkgICAgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKnN1Yl9sYXN0LAorCQkJCSAgICAgaW50IGJrcmVmX25vZGUsIGludCBia3JlZl9zdHIpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBmaW5kX3N1YmV4cF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCQkgICAgIGludCBzdWJleHBfaWR4LCBpbnQgdHlwZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19hcnJpdmFsIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgIHN0YXRlX2FycmF5X3QgKnBhdGgsIGludCB0b3Bfbm9kZSwKKwkJCQkgICAgaW50IHRvcF9zdHIsIGludCBsYXN0X25vZGUsIGludCBsYXN0X3N0ciwKKwkJCQkgICAgaW50IHR5cGUpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfYXJyaXZhbF9hZGRfbmV4dF9ub2RlcyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkJICAgaW50IHN0cl9pZHgsCisJCQkJCQkgICByZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJCQkJICAgcmVfbm9kZV9zZXQgKm5leHRfbm9kZXMpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkgICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCQkJICAgICAgIGludCBleF9zdWJleHAsIGludCB0eXBlKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbF9zdWIgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCQkgICByZV9ub2RlX3NldCAqZHN0X25vZGVzLAorCQkJCQkJICAgaW50IHRhcmdldCwgaW50IGV4X3N1YmV4cCwKKwkJCQkJCSAgIGludCB0eXBlKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGV4cGFuZF9ia3JlZl9jYWNoZSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgaW50IGN1cl9zdHIsCisJCQkJCSBpbnQgc3ViZXhwX251bSwgaW50IHR5cGUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBidWlsZF90cnRhYmxlIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJICByZV9kZmFzdGF0ZV90ICpzdGF0ZSkgaW50ZXJuYWxfZnVuY3Rpb247CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyBpbnQgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKwkJCQkgICAgY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyMgaWZkZWYgX0xJQkMKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywKKwkJCQkJCSAgIHNpemVfdCBuYW1lX2xlbikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjIGVuZGlmIC8qIF9MSUJDICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyBpbnQgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJICAgICAgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorCQkJCSAgICAgICByZV9ub2RlX3NldCAqc3RhdGVzX25vZGUsCisJCQkJICAgICAgIGJpdHNldF90ICpzdGF0ZXNfY2gpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGludCBjaGVja19ub2RlX2FjY2VwdCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgICAgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSwgaW50IGlkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBleHRlbmRfYnVmZmVycyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKwwKKy8qIEVudHJ5IHBvaW50IGZvciBQT1NJWCBjb2RlLiAgKi8KKworLyogcmVnZXhlYyBzZWFyY2hlcyBmb3IgYSBnaXZlbiBwYXR0ZXJuLCBzcGVjaWZpZWQgYnkgUFJFRywgaW4gdGhlCisgICBzdHJpbmcgU1RSSU5HLgorCisgICBJZiBOTUFUQ0ggaXMgemVybyBvciBSRUdfTk9TVUIgd2FzIHNldCBpbiB0aGUgY2ZsYWdzIGFyZ3VtZW50IHRvCisgICBgcmVnY29tcCcsIHdlIGlnbm9yZSBQTUFUQ0guICBPdGhlcndpc2UsIHdlIGFzc3VtZSBQTUFUQ0ggaGFzIGF0CisgICBsZWFzdCBOTUFUQ0ggZWxlbWVudHMsIGFuZCB3ZSBzZXQgdGhlbSB0byB0aGUgb2Zmc2V0cyBvZiB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgbWF0Y2hlZCBzdWJzdHJpbmdzLgorCisgICBFRkxBR1Mgc3BlY2lmaWVzIGBleGVjdXRpb24gZmxhZ3MnIHdoaWNoIGFmZmVjdCBtYXRjaGluZzogaWYKKyAgIFJFR19OT1RCT0wgaXMgc2V0LCB0aGVuIF4gZG9lcyBub3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgIHN0cmluZzsgaWYgUkVHX05PVEVPTCBpcyBzZXQsIHRoZW4gJCBkb2VzIG5vdCBtYXRjaCBhdCB0aGUgZW5kLgorCisgICBXZSByZXR1cm4gMCBpZiB3ZSBmaW5kIGEgbWF0Y2ggYW5kIFJFR19OT01BVENIIGlmIG5vdC4gICovCisKK2ludAorcmVnZXhlYyAoCisJY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorCWNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qgc3RyaW5nLAorCXNpemVfdCBubWF0Y2gsCisJcmVnbWF0Y2hfdCBwbWF0Y2hbXSwKKwlpbnQgZWZsYWdzKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IHN0YXJ0LCBsZW5ndGg7CisKKyAgaWYgKGVmbGFncyAmIH4oUkVHX05PVEJPTCB8IFJFR19OT1RFT0wgfCBSRUdfU1RBUlRFTkQpKQorICAgIHJldHVybiBSRUdfQkFEUEFUOworCisgIGlmIChlZmxhZ3MgJiBSRUdfU1RBUlRFTkQpCisgICAgeworICAgICAgc3RhcnQgPSBwbWF0Y2hbMF0ucm1fc287CisgICAgICBsZW5ndGggPSBwbWF0Y2hbMF0ucm1fZW87CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RhcnQgPSAwOworICAgICAgbGVuZ3RoID0gc3RybGVuIChzdHJpbmcpOworICAgIH0KKworICBfX2xpYmNfbG9ja19sb2NrIChkZmEtPmxvY2spOworICBpZiAocHJlZy0+bm9fc3ViKQorICAgIGVyciA9IHJlX3NlYXJjaF9pbnRlcm5hbCAocHJlZywgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCBsZW5ndGggLSBzdGFydCwKKwkJCSAgICAgIGxlbmd0aCwgMCwgTlVMTCwgZWZsYWdzKTsKKyAgZWxzZQorICAgIGVyciA9IHJlX3NlYXJjaF9pbnRlcm5hbCAocHJlZywgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCBsZW5ndGggLSBzdGFydCwKKwkJCSAgICAgIGxlbmd0aCwgbm1hdGNoLCBwbWF0Y2gsIGVmbGFncyk7CisgIF9fbGliY19sb2NrX3VubG9jayAoZGZhLT5sb2NrKTsKKyAgcmV0dXJuIGVyciAhPSBSRUdfTk9FUlJPUjsKK30KKworI2lmZGVmIF9MSUJDCisjIGluY2x1ZGUgPHNobGliLWNvbXBhdC5oPgordmVyc2lvbmVkX3N5bWJvbCAobGliYywgX19yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzNfNCk7CisKKyMgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfM180KQorX190eXBlb2ZfXyAoX19yZWdleGVjKSBfX2NvbXBhdF9yZWdleGVjOworCitpbnQKK2F0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitfX2NvbXBhdF9yZWdleGVjIChjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCisJCSAgY29uc3QgY2hhciAqX19yZXN0cmljdCBzdHJpbmcsIHNpemVfdCBubWF0Y2gsCisJCSAgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwgaW50IGVmbGFncykKK3sKKyAgcmV0dXJuIHJlZ2V4ZWMgKHByZWcsIHN0cmluZywgbm1hdGNoLCBwbWF0Y2gsCisJCSAgZWZsYWdzICYgKFJFR19OT1RCT0wgfCBSRUdfTk9URU9MKSk7Cit9Citjb21wYXRfc3ltYm9sIChsaWJjLCBfX2NvbXBhdF9yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzApOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEVudHJ5IHBvaW50cyBmb3IgR05VIGNvZGUuICAqLworCisvKiByZV9tYXRjaCwgcmVfc2VhcmNoLCByZV9tYXRjaF8yLCByZV9zZWFyY2hfMgorCisgICBUaGUgZm9ybWVyIHR3byBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBTVFJJTkcgd2l0aCBsZW5ndGggTEVOR1RILAorICAgd2hpbGUgdGhlIGxhdGVyIHR3byBvcGVyYXRlIG9uIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMgorICAgd2l0aCBsZW5ndGhzIExFTkdUSDEgYW5kIExFTkdUSDIsIHJlc3BlY3RpdmVseS4KKworICAgcmVfbWF0Y2goKSBtYXRjaGVzIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluIEJVRlAgYWdhaW5zdCB0aGUgc3RyaW5nLAorICAgc3RhcnRpbmcgYXQgaW5kZXggU1RBUlQuCisKKyAgIHJlX3NlYXJjaCgpIGZpcnN0IHRyaWVzIG1hdGNoaW5nIGF0IGluZGV4IFNUQVJULCB0aGVuIGl0IHRyaWVzIHRvIG1hdGNoCisgICBzdGFydGluZyBmcm9tIGluZGV4IFNUQVJUICsgMSwgYW5kIHNvIG9uLiAgVGhlIGxhc3Qgc3RhcnQgcG9zaXRpb24gdHJpZWQKKyAgIGlzIFNUQVJUICsgUkFOR0UuICAoVGh1cyBSQU5HRSA9IDAgZm9yY2VzIHJlX3NlYXJjaCB0byBvcGVyYXRlIHRoZSBzYW1lCisgICB3YXkgYXMgcmVfbWF0Y2goKS4pCisKKyAgIFRoZSBwYXJhbWV0ZXIgU1RPUCBvZiByZV97bWF0Y2gsc2VhcmNofV8yIHNwZWNpZmllcyB0aGF0IG5vIG1hdGNoIGV4Y2VlZGluZworICAgdGhlIGZpcnN0IFNUT1AgY2hhcmFjdGVycyBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5ncyBzaG91bGQgYmUKKyAgIGNvbmNlcm5lZC4KKworICAgSWYgUkVHUyBpcyBub3QgTlVMTCwgYW5kIEJVRlAtPm5vX3N1YiBpcyBub3Qgc2V0LCB0aGUgb2Zmc2V0cyBvZiB0aGUgbWF0Y2gKKyAgIGFuZCBhbGwgZ3JvdXBzIGlzIHN0cm9lZCBpbiBSRUdTLiAgKEZvciB0aGUgIl8yIiB2YXJpYW50cywgdGhlIG9mZnNldHMgYXJlCisgICBjb21wdXRlZCByZWxhdGl2ZSB0byB0aGUgY29uY2F0ZW5hdGlvbiwgbm90IHJlbGF0aXZlIHRvIHRoZSBpbmRpdmlkdWFsCisgICBzdHJpbmdzLikKKworICAgT24gc3VjY2VzcywgcmVfbWF0Y2gqIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2gsIHJlX3NlYXJjaCoKKyAgIHJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaC4gIFJldHVybiB2YWx1ZSAtMSBtZWFucyBubworICAgbWF0Y2ggd2FzIGZvdW5kIGFuZCAtMiBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgZXJyb3IuICAqLworCitpbnQKK3JlX21hdGNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJICBjb25zdCBjaGFyICpzdHJpbmcsCisJICBpbnQgbGVuZ3RoLAorCSAgaW50IHN0YXJ0LAorCSAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncykKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF9zdHViIChidWZwLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIDAsIGxlbmd0aCwgcmVncywgMSk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2gsIHJlX21hdGNoKQorI2VuZGlmCisKK2ludAorcmVfc2VhcmNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJICAgY29uc3QgY2hhciAqc3RyaW5nLAorCSAgIGludCBsZW5ndGgsIGludCBzdGFydCwgaW50IHJhbmdlLAorCSAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpCit7CisgIHJldHVybiByZV9zZWFyY2hfc3R1YiAoYnVmcCwgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCByYW5nZSwgbGVuZ3RoLCByZWdzLCAwKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZWFyY2gsIHJlX3NlYXJjaCkKKyNlbmRpZgorCitpbnQKK3JlX21hdGNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IGxlbmd0aDEsCisJICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBsZW5ndGgyLCBpbnQgc3RhcnQsCisJICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQoreworICByZXR1cm4gcmVfc2VhcmNoXzJfc3R1YiAoYnVmcCwgc3RyaW5nMSwgbGVuZ3RoMSwgc3RyaW5nMiwgbGVuZ3RoMiwKKwkJCSAgIHN0YXJ0LCAwLCByZWdzLCBzdG9wLCAxKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9tYXRjaF8yLCByZV9tYXRjaF8yKQorI2VuZGlmCisKK2ludAorcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBsZW5ndGgxLAorCSAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IGxlbmd0aDIsIGludCBzdGFydCwKKwkgICAgIGludCByYW5nZSwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgIGludCBzdG9wKQoreworICByZXR1cm4gcmVfc2VhcmNoXzJfc3R1YiAoYnVmcCwgc3RyaW5nMSwgbGVuZ3RoMSwgc3RyaW5nMiwgbGVuZ3RoMiwKKwkJCSAgIHN0YXJ0LCByYW5nZSwgcmVncywgc3RvcCwgMCk7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoXzIsIHJlX3NlYXJjaF8yKQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3JlX3NlYXJjaF8yX3N0dWIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgbGVuZ3RoMSwKKwkJICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgbGVuZ3RoMiwgaW50IHN0YXJ0LAorCQkgIGludCByYW5nZSwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKwkJICBpbnQgc3RvcCwgaW50IHJldF9sZW4pCit7CisgIGNvbnN0IGNoYXIgKnN0cjsKKyAgaW50IHJ2YWw7CisgIGludCBsZW4gPSBsZW5ndGgxICsgbGVuZ3RoMjsKKyAgaW50IGZyZWVfc3RyID0gMDsKKworICBpZiAoQkUgKGxlbmd0aDEgPCAwIHx8IGxlbmd0aDIgPCAwIHx8IHN0b3AgPCAwLCAwKSkKKyAgICByZXR1cm4gLTI7CisKKyAgLyogQ29uY2F0ZW5hdGUgdGhlIHN0cmluZ3MuICAqLworICBpZiAobGVuZ3RoMiA+IDApCisgICAgaWYgKGxlbmd0aDEgPiAwKQorICAgICAgeworCWNoYXIgKnMgPSByZV9tYWxsb2MgKGNoYXIsIGxlbik7CisKKwlpZiAoQkUgKHMgPT0gTlVMTCwgMCkpCisJICByZXR1cm4gLTI7CisJbWVtY3B5IChzLCBzdHJpbmcxLCBsZW5ndGgxKTsKKwltZW1jcHkgKHMgKyBsZW5ndGgxLCBzdHJpbmcyLCBsZW5ndGgyKTsKKwlzdHIgPSBzOworCWZyZWVfc3RyID0gMTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBzdHIgPSBzdHJpbmcyOworICBlbHNlCisgICAgc3RyID0gc3RyaW5nMTsKKworICBydmFsID0gcmVfc2VhcmNoX3N0dWIgKGJ1ZnAsIHN0ciwgbGVuLCBzdGFydCwgcmFuZ2UsIHN0b3AsIHJlZ3MsIHJldF9sZW4pOworICBpZiAoZnJlZV9zdHIpCisgICAgcmVfZnJlZSAoKGNoYXIgKikgc3RyKTsKKyAgcmV0dXJuIHJ2YWw7Cit9CisKKy8qIFRoZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyB0aG9zZSBvZiByZV9zZWFyY2guCisgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnM6CisgICBJZiBSRVRfTEVOIGlzIG5vbnplcm8gdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaXMgcmV0dXJuZWQgKHJlX21hdGNoIHN0eWxlKTsKKyAgIG90aGVyd2lzZSB0aGUgcG9zaXRpb24gb2YgdGhlIG1hdGNoIGlzIHJldHVybmVkLiAgKi8KKworc3RhdGljIGludAorcmVfc2VhcmNoX3N0dWIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuZ3RoLCBpbnQgc3RhcnQsCisJCWludCByYW5nZSwgaW50IHN0b3AsCisJCXN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCByZXRfbGVuKQoreworICByZWdfZXJyY29kZV90IHJlc3VsdDsKKyAgcmVnbWF0Y2hfdCAqcG1hdGNoOworICBpbnQgbnJlZ3MsIHJ2YWw7CisgIGludCBlZmxhZ3MgPSAwOworCisgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UuICAqLworICBpZiAoQkUgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IGxlbmd0aCwgMCkpCisgICAgcmV0dXJuIC0xOworICBpZiAoQkUgKHN0YXJ0ICsgcmFuZ2UgPiBsZW5ndGgsIDApKQorICAgIHJhbmdlID0gbGVuZ3RoIC0gc3RhcnQ7CisgIGVsc2UgaWYgKEJFIChzdGFydCArIHJhbmdlIDwgMCwgMCkpCisgICAgcmFuZ2UgPSAtc3RhcnQ7CisKKyAgX19saWJjX2xvY2tfbG9jayAoZGZhLT5sb2NrKTsKKworICBlZmxhZ3MgfD0gKGJ1ZnAtPm5vdF9ib2wpID8gUkVHX05PVEJPTCA6IDA7CisgIGVmbGFncyB8PSAoYnVmcC0+bm90X2VvbCkgPyBSRUdfTk9URU9MIDogMDsKKworICAvKiBDb21waWxlIGZhc3RtYXAgaWYgd2UgaGF2ZW4ndCB5ZXQuICAqLworICBpZiAocmFuZ2UgPiAwICYmIGJ1ZnAtPmZhc3RtYXAgIT0gTlVMTCAmJiAhYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSkKKyAgICByZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApOworCisgIGlmIChCRSAoYnVmcC0+bm9fc3ViLCAwKSkKKyAgICByZWdzID0gTlVMTDsKKworICAvKiBXZSBuZWVkIGF0IGxlYXN0IDEgcmVnaXN0ZXIuICAqLworICBpZiAocmVncyA9PSBOVUxMKQorICAgIG5yZWdzID0gMTsKKyAgZWxzZSBpZiAoQkUgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfRklYRUQgJiYKKwkgICAgICAgcmVncy0+bnVtX3JlZ3MgPCBidWZwLT5yZV9uc3ViICsgMSwgMCkpCisgICAgeworICAgICAgbnJlZ3MgPSByZWdzLT5udW1fcmVnczsKKyAgICAgIGlmIChCRSAobnJlZ3MgPCAxLCAwKSkKKwl7CisJICAvKiBOb3RoaW5nIGNhbiBiZSBjb3BpZWQgdG8gcmVncy4gICovCisJICByZWdzID0gTlVMTDsKKwkgIG5yZWdzID0gMTsKKwl9CisgICAgfQorICBlbHNlCisgICAgbnJlZ3MgPSBidWZwLT5yZV9uc3ViICsgMTsKKyAgcG1hdGNoID0gcmVfbWFsbG9jIChyZWdtYXRjaF90LCBucmVncyk7CisgIGlmIChCRSAocG1hdGNoID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgIHJ2YWwgPSAtMjsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KKworICByZXN1bHQgPSByZV9zZWFyY2hfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgcmFuZ2UsIHN0b3AsCisJCQkgICAgICAgbnJlZ3MsIHBtYXRjaCwgZWZsYWdzKTsKKworICBydmFsID0gMDsKKworICAvKiBJIGhvcGUgd2UgbmVlZG4ndCBmaWxsIHRoZWlyIHJlZ3Mgd2l0aCAtMSdzIHdoZW4gbm8gbWF0Y2ggd2FzIGZvdW5kLiAgKi8KKyAgaWYgKHJlc3VsdCAhPSBSRUdfTk9FUlJPUikKKyAgICBydmFsID0gLTE7CisgIGVsc2UgaWYgKHJlZ3MgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBJZiBjYWxsZXIgd2FudHMgcmVnaXN0ZXIgY29udGVudHMgZGF0YSBiYWNrLCBjb3B5IHRoZW0uICAqLworICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSByZV9jb3B5X3JlZ3MgKHJlZ3MsIHBtYXRjaCwgbnJlZ3MsCisJCQkJCSAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkKTsKKyAgICAgIGlmIChCRSAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19VTkFMTE9DQVRFRCwgMCkpCisJcnZhbCA9IC0yOworICAgIH0KKworICBpZiAoQkUgKHJ2YWwgPT0gMCwgMSkpCisgICAgeworICAgICAgaWYgKHJldF9sZW4pCisJeworCSAgYXNzZXJ0IChwbWF0Y2hbMF0ucm1fc28gPT0gc3RhcnQpOworCSAgcnZhbCA9IHBtYXRjaFswXS5ybV9lbyAtIHN0YXJ0OworCX0KKyAgICAgIGVsc2UKKwlydmFsID0gcG1hdGNoWzBdLnJtX3NvOworICAgIH0KKyAgcmVfZnJlZSAocG1hdGNoKTsKKyBvdXQ6CisgIF9fbGliY19sb2NrX3VubG9jayAoZGZhLT5sb2NrKTsKKyAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAorcmVfY29weV9yZWdzIChzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCSAgICAgIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkgICAgICBpbnQgbnJlZ3MsIGludCByZWdzX2FsbG9jYXRlZCkKK3sKKyAgaW50IHJ2YWwgPSBSRUdTX1JFQUxMT0NBVEU7CisgIGludCBpOworICBpbnQgbmVlZF9yZWdzID0gbnJlZ3MgKyAxOworICAvKiBXZSBuZWVkIG9uZSBleHRyYSBlbGVtZW50IGJleW9uZCBgbnVtX3JlZ3MnIGZvciB0aGUgYC0xJyBtYXJrZXIgR05VIGNvZGUKKyAgICAgdXNlcy4gICovCisKKyAgLyogSGF2ZSB0aGUgcmVnaXN0ZXIgZGF0YSBhcnJheXMgYmVlbiBhbGxvY2F0ZWQ/ICAqLworICBpZiAocmVnc19hbGxvY2F0ZWQgPT0gUkVHU19VTkFMTE9DQVRFRCkKKyAgICB7IC8qIE5vLiAgU28gYWxsb2NhdGUgdGhlbSB3aXRoIG1hbGxvYy4gICovCisgICAgICByZWdzLT5zdGFydCA9IHJlX21hbGxvYyAocmVnb2ZmX3QsIG5lZWRfcmVncyk7CisgICAgICBpZiAoQkUgKHJlZ3MtPnN0YXJ0ID09IE5VTEwsIDApKQorCXJldHVybiBSRUdTX1VOQUxMT0NBVEVEOworICAgICAgcmVncy0+ZW5kID0gcmVfbWFsbG9jIChyZWdvZmZfdCwgbmVlZF9yZWdzKTsKKyAgICAgIGlmIChCRSAocmVncy0+ZW5kID09IE5VTEwsIDApKQorCXsKKwkgIHJlX2ZyZWUgKHJlZ3MtPnN0YXJ0KTsKKwkgIHJldHVybiBSRUdTX1VOQUxMT0NBVEVEOworCX0KKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gbmVlZF9yZWdzOworICAgIH0KKyAgZWxzZSBpZiAocmVnc19hbGxvY2F0ZWQgPT0gUkVHU19SRUFMTE9DQVRFKQorICAgIHsgLyogWWVzLiAgSWYgd2UgbmVlZCBtb3JlIGVsZW1lbnRzIHRoYW4gd2VyZSBhbHJlYWR5CisJIGFsbG9jYXRlZCwgcmVhbGxvY2F0ZSB0aGVtLiAgSWYgd2UgbmVlZCBmZXdlciwganVzdAorCSBsZWF2ZSBpdCBhbG9uZS4gICovCisgICAgICBpZiAoQkUgKG5lZWRfcmVncyA+IHJlZ3MtPm51bV9yZWdzLCAwKSkKKwl7CisJICByZWdvZmZfdCAqbmV3X3N0YXJ0ID0gcmVfcmVhbGxvYyAocmVncy0+c3RhcnQsIHJlZ29mZl90LCBuZWVkX3JlZ3MpOworCSAgcmVnb2ZmX3QgKm5ld19lbmQ7CisJICBpZiAoQkUgKG5ld19zdGFydCA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR1NfVU5BTExPQ0FURUQ7CisJICBuZXdfZW5kID0gcmVfcmVhbGxvYyAocmVncy0+ZW5kLCByZWdvZmZfdCwgbmVlZF9yZWdzKTsKKwkgIGlmIChCRSAobmV3X2VuZCA9PSBOVUxMLCAwKSkKKwkgICAgeworCSAgICAgIHJlX2ZyZWUgKG5ld19zdGFydCk7CisJICAgICAgcmV0dXJuIFJFR1NfVU5BTExPQ0FURUQ7CisJICAgIH0KKwkgIHJlZ3MtPnN0YXJ0ID0gbmV3X3N0YXJ0OworCSAgcmVncy0+ZW5kID0gbmV3X2VuZDsKKwkgIHJlZ3MtPm51bV9yZWdzID0gbmVlZF9yZWdzOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBhc3NlcnQgKHJlZ3NfYWxsb2NhdGVkID09IFJFR1NfRklYRUQpOworICAgICAgLyogVGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGNhbGxlZCB3aXRoIFJFR1NfRklYRUQgYW5kIG5yZWdzIHRvbyBiaWcuICAqLworICAgICAgYXNzZXJ0IChyZWdzLT5udW1fcmVncyA+PSBucmVncyk7CisgICAgICBydmFsID0gUkVHU19GSVhFRDsKKyAgICB9CisKKyAgLyogQ29weSB0aGUgcmVncy4gICovCisgIGZvciAoaSA9IDA7IGkgPCBucmVnczsgKytpKQorICAgIHsKKyAgICAgIHJlZ3MtPnN0YXJ0W2ldID0gcG1hdGNoW2ldLnJtX3NvOworICAgICAgcmVncy0+ZW5kW2ldID0gcG1hdGNoW2ldLnJtX2VvOworICAgIH0KKyAgZm9yICggOyBpIDwgcmVncy0+bnVtX3JlZ3M7ICsraSkKKyAgICByZWdzLT5zdGFydFtpXSA9IHJlZ3MtPmVuZFtpXSA9IC0xOworCisgIHJldHVybiBydmFsOworfQorCisvKiBTZXQgUkVHUyB0byBob2xkIE5VTV9SRUdTIHJlZ2lzdGVycywgc3RvcmluZyB0aGVtIGluIFNUQVJUUyBhbmQKKyAgIEVORFMuICBTdWJzZXF1ZW50IG1hdGNoZXMgdXNpbmcgUEFUVEVSTl9CVUZGRVIgYW5kIFJFR1Mgd2lsbCB1c2UKKyAgIHRoaXMgbWVtb3J5IGZvciByZWNvcmRpbmcgcmVnaXN0ZXIgaW5mb3JtYXRpb24uICBTVEFSVFMgYW5kIEVORFMKKyAgIG11c3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoZSBtYWxsb2MgbGlicmFyeSByb3V0aW5lLCBhbmQgbXVzdCBlYWNoCisgICBiZSBhdCBsZWFzdCBOVU1fUkVHUyAqIHNpemVvZiAocmVnb2ZmX3QpIGJ5dGVzIGxvbmcuCisKKyAgIElmIE5VTV9SRUdTID09IDAsIHRoZW4gc3Vic2VxdWVudCBtYXRjaGVzIHNob3VsZCBhbGxvY2F0ZSB0aGVpciBvd24KKyAgIHJlZ2lzdGVyIGRhdGEuCisKKyAgIFVubGVzcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIGZpcnN0IHNlYXJjaCBvciBtYXRjaCB1c2luZworICAgUEFUVEVSTl9CVUZGRVIgd2lsbCBhbGxvY2F0ZSBpdHMgb3duIHJlZ2lzdGVyIGRhdGEsIHdpdGhvdXQKKyAgIGZyZWVpbmcgdGhlIG9sZCBkYXRhLiAgKi8KKwordm9pZAorcmVfc2V0X3JlZ2lzdGVycyAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCQkgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCSAgdW5zaWduZWQgbnVtX3JlZ3MsCisJCSAgcmVnb2ZmX3QgKnN0YXJ0cywKKwkJICByZWdvZmZfdCAqZW5kcykKK3sKKyAgaWYgKG51bV9yZWdzKQorICAgIHsKKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19SRUFMTE9DQVRFOworICAgICAgcmVncy0+bnVtX3JlZ3MgPSBudW1fcmVnczsKKyAgICAgIHJlZ3MtPnN0YXJ0ID0gc3RhcnRzOworICAgICAgcmVncy0+ZW5kID0gZW5kczsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfVU5BTExPQ0FURUQ7CisgICAgICByZWdzLT5udW1fcmVncyA9IDA7CisgICAgICByZWdzLT5zdGFydCA9IHJlZ3MtPmVuZCA9IChyZWdvZmZfdCAqKSAwOworICAgIH0KK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZXRfcmVnaXN0ZXJzLCByZV9zZXRfcmVnaXN0ZXJzKQorI2VuZGlmCisMCisvKiBFbnRyeSBwb2ludHMgY29tcGF0aWJsZSB3aXRoIDQuMiBCU0QgcmVnZXggbGlicmFyeS4gIFdlIGRvbid0IGRlZmluZQorICAgdGhlbSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZC4gICovCisKKyNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IGRlZmluZWQgX0xJQkMKK2ludAorIyBpZmRlZiBfTElCQword2Vha19mdW5jdGlvbgorIyBlbmRpZgorcmVfZXhlYyAocykKKyAgICAgY29uc3QgY2hhciAqczsKK3sKKyAgcmV0dXJuIDAgPT0gcmVnZXhlYyAoJnJlX2NvbXBfYnVmLCBzLCAwLCBOVUxMLCAwKTsKK30KKyNlbmRpZiAvKiBfUkVHRVhfUkVfQ09NUCAqLworDAorLyogSW50ZXJuYWwgZW50cnkgcG9pbnQuICAqLworCisvKiBTZWFyY2hlcyBmb3IgYSBjb21waWxlZCBwYXR0ZXJuIFBSRUcgaW4gdGhlIHN0cmluZyBTVFJJTkcsIHdob3NlCisgICBsZW5ndGggaXMgTEVOR1RILiAgTk1BVENILCBQTUFUQ0gsIGFuZCBFRkxBR1MgaGF2ZSB0aGUgc2FtZQorICAgbWluZ2luZ3Mgd2l0aCByZWdleGVjLiAgU1RBUlQsIGFuZCBSQU5HRSBoYXZlIHRoZSBzYW1lIG1lYW5pbmdzCisgICB3aXRoIHJlX3NlYXJjaC4KKyAgIFJldHVybiBSRUdfTk9FUlJPUiBpZiB3ZSBmaW5kIGEgbWF0Y2gsIGFuZCBSRUdfTk9NQVRDSCBpZiBub3QsCisgICBvdGhlcndpc2UgcmV0dXJuIHRoZSBlcnJvciBjb2RlLgorICAgTm90ZTogV2UgYXNzdW1lIGZyb250IGVuZCBmdW5jdGlvbnMgYWxyZWFkeSBjaGVjayByYW5nZXMuCisgICAoU1RBUlQgKyBSQU5HRSA+PSAwICYmIFNUQVJUICsgUkFOR0UgPD0gTEVOR1RIKSAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3JlX3NlYXJjaF9pbnRlcm5hbCAoY29uc3QgcmVnZXhfdCAqcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJICAgIGludCBsZW5ndGgsIGludCBzdGFydCwgaW50IHJhbmdlLCBpbnQgc3RvcCwKKwkJICAgIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sCisJCSAgICBpbnQgZWZsYWdzKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgY29uc3QgcmVfZGZhX3QgKmRmYSA9IChjb25zdCByZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGludCBsZWZ0X2xpbSwgcmlnaHRfbGltLCBpbmNyOworICBpbnQgZmxfbG9uZ2VzdF9tYXRjaCwgbWF0Y2hfZmlyc3QsIG1hdGNoX2tpbmQsIG1hdGNoX2xhc3QgPSAtMTsKKyAgaW50IGV4dHJhX25tYXRjaDsKKyAgaW50IHNiLCBjaDsKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorICByZV9tYXRjaF9jb250ZXh0X3QgbWN0eCA9IHsgLmRmYSA9IGRmYSB9OworI2Vsc2UKKyAgcmVfbWF0Y2hfY29udGV4dF90IG1jdHg7CisjZW5kaWYKKyAgY2hhciAqZmFzdG1hcCA9IChwcmVnLT5mYXN0bWFwICE9IE5VTEwgJiYgcHJlZy0+ZmFzdG1hcF9hY2N1cmF0ZQorCQkgICAmJiByYW5nZSAmJiAhcHJlZy0+Y2FuX2JlX251bGwpID8gcHJlZy0+ZmFzdG1hcCA6IE5VTEw7CisgIFJFX1RSQU5TTEFURV9UWVBFIHQgPSBwcmVnLT50cmFuc2xhdGU7CisKKyNpZiAhKGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpKQorICBtZW1zZXQgKCZtY3R4LCAnXDAnLCBzaXplb2YgKHJlX21hdGNoX2NvbnRleHRfdCkpOworICBtY3R4LmRmYSA9IGRmYTsKKyNlbmRpZgorCisgIGV4dHJhX25tYXRjaCA9IChubWF0Y2ggPiBwcmVnLT5yZV9uc3ViKSA/IG5tYXRjaCAtIChwcmVnLT5yZV9uc3ViICsgMSkgOiAwOworICBubWF0Y2ggLT0gZXh0cmFfbm1hdGNoOworCisgIC8qIENoZWNrIGlmIHRoZSBERkEgaGF2ZW4ndCBiZWVuIGNvbXBpbGVkLiAgKi8KKyAgaWYgKEJFIChwcmVnLT51c2VkID09IDAgfHwgZGZhLT5pbml0X3N0YXRlID09IE5VTEwKKwkgIHx8IGRmYS0+aW5pdF9zdGF0ZV93b3JkID09IE5VTEwgfHwgZGZhLT5pbml0X3N0YXRlX25sID09IE5VTEwKKwkgIHx8IGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19OT01BVENIOworCisjaWZkZWYgREVCVUcKKyAgLyogV2UgYXNzdW1lIGZyb250LWVuZCBmdW5jdGlvbnMgYWxyZWFkeSBjaGVjayB0aGVtLiAgKi8KKyAgYXNzZXJ0IChzdGFydCArIHJhbmdlID49IDAgJiYgc3RhcnQgKyByYW5nZSA8PSBsZW5ndGgpOworI2VuZGlmCisKKyAgLyogSWYgaW5pdGlhbCBzdGF0ZXMgd2l0aCBub24tYmVnYnVmIGNvbnRleHRzIGhhdmUgbm8gZWxlbWVudHMsCisgICAgIHRoZSByZWdleCBtdXN0IGJlIGFuY2hvcmVkLiAgSWYgcHJlZy0+bmV3bGluZV9hbmNob3IgaXMgc2V0LAorICAgICB3ZSdsbCBuZXZlciB1c2UgaW5pdF9zdGF0ZV9ubCwgc28gZG8gbm90IGNoZWNrIGl0LiAgKi8KKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZS0+bm9kZXMubmVsZW0gPT0gMAorICAgICAgJiYgZGZhLT5pbml0X3N0YXRlX3dvcmQtPm5vZGVzLm5lbGVtID09IDAKKyAgICAgICYmIChkZmEtPmluaXRfc3RhdGVfbmwtPm5vZGVzLm5lbGVtID09IDAKKwkgIHx8ICFwcmVnLT5uZXdsaW5lX2FuY2hvcikpCisgICAgeworICAgICAgaWYgKHN0YXJ0ICE9IDAgJiYgc3RhcnQgKyByYW5nZSAhPSAwKQorCXJldHVybiBSRUdfTk9NQVRDSDsKKyAgICAgIHN0YXJ0ID0gcmFuZ2UgPSAwOworICAgIH0KKworICAvKiBXZSBtdXN0IGNoZWNrIHRoZSBsb25nZXN0IG1hdGNoaW5nLCBpZiBubWF0Y2ggPiAwLiAgKi8KKyAgZmxfbG9uZ2VzdF9tYXRjaCA9IChubWF0Y2ggIT0gMCB8fCBkZmEtPm5iYWNrcmVmKTsKKworICBlcnIgPSByZV9zdHJpbmdfYWxsb2NhdGUgKCZtY3R4LmlucHV0LCBzdHJpbmcsIGxlbmd0aCwgZGZhLT5ub2Rlc19sZW4gKyAxLAorCQkJICAgIHByZWctPnRyYW5zbGF0ZSwgcHJlZy0+c3ludGF4ICYgUkVfSUNBU0UsIGRmYSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIGZyZWVfcmV0dXJuOworICBtY3R4LmlucHV0LnN0b3AgPSBzdG9wOworICBtY3R4LmlucHV0LnJhd19zdG9wID0gc3RvcDsKKyAgbWN0eC5pbnB1dC5uZXdsaW5lX2FuY2hvciA9IHByZWctPm5ld2xpbmVfYW5jaG9yOworCisgIGVyciA9IG1hdGNoX2N0eF9pbml0ICgmbWN0eCwgZWZsYWdzLCBkZmEtPm5iYWNrcmVmICogMik7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIGZyZWVfcmV0dXJuOworCisgIC8qIFdlIHdpbGwgbG9nIGFsbCB0aGUgREZBIHN0YXRlcyB0aHJvdWdoIHdoaWNoIHRoZSBkZmEgcGFzcywKKyAgICAgaWYgbm1hdGNoID4gMSwgb3IgdGhpcyBkZmEgaGFzICJtdWx0aWJ5dGUgbm9kZSIsIHdoaWNoIGlzIGEKKyAgICAgYmFjay1yZWZlcmVuY2Ugb3IgYSBub2RlIHdoaWNoIGNhbiBhY2NlcHQgbXVsdGlieXRlIGNoYXJhY3RlciBvcgorICAgICBtdWx0aSBjaGFyYWN0ZXIgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICBpZiAobm1hdGNoID4gMSB8fCBkZmEtPmhhc19tYl9ub2RlKQorICAgIHsKKyAgICAgIC8qIEF2b2lkIG92ZXJmbG93LiAgKi8KKyAgICAgIGlmIChCRSAoU0laRV9NQVggLyBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgPD0gbWN0eC5pbnB1dC5idWZzX2xlbiwgMCkpCisJeworCSAgZXJyID0gUkVHX0VTUEFDRTsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorCisgICAgICBtY3R4LnN0YXRlX2xvZyA9IHJlX21hbGxvYyAocmVfZGZhc3RhdGVfdCAqLCBtY3R4LmlucHV0LmJ1ZnNfbGVuICsgMSk7CisgICAgICBpZiAoQkUgKG1jdHguc3RhdGVfbG9nID09IE5VTEwsIDApKQorCXsKKwkgIGVyciA9IFJFR19FU1BBQ0U7CisJICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBtY3R4LnN0YXRlX2xvZyA9IE5VTEw7CisKKyAgbWF0Y2hfZmlyc3QgPSBzdGFydDsKKyAgbWN0eC5pbnB1dC50aXBfY29udGV4dCA9IChlZmxhZ3MgJiBSRUdfTk9UQk9MKSA/IENPTlRFWFRfQkVHQlVGCisJCQkgICA6IENPTlRFWFRfTkVXTElORSB8IENPTlRFWFRfQkVHQlVGOworCisgIC8qIENoZWNrIGluY3JlbWVudGFsbHkgd2hldGhlciBvZiBub3QgdGhlIGlucHV0IHN0cmluZyBtYXRjaC4gICovCisgIGluY3IgPSAocmFuZ2UgPCAwKSA/IC0xIDogMTsKKyAgbGVmdF9saW0gPSAocmFuZ2UgPCAwKSA/IHN0YXJ0ICsgcmFuZ2UgOiBzdGFydDsKKyAgcmlnaHRfbGltID0gKHJhbmdlIDwgMCkgPyBzdGFydCA6IHN0YXJ0ICsgcmFuZ2U7CisgIHNiID0gZGZhLT5tYl9jdXJfbWF4ID09IDE7CisgIG1hdGNoX2tpbmQgPQorICAgIChmYXN0bWFwCisgICAgID8gKChzYiB8fCAhKHByZWctPnN5bnRheCAmIFJFX0lDQVNFIHx8IHQpID8gNCA6IDApCisJfCAocmFuZ2UgPj0gMCA/IDIgOiAwKQorCXwgKHQgIT0gTlVMTCA/IDEgOiAwKSkKKyAgICAgOiA4KTsKKworICBmb3IgKDs7IG1hdGNoX2ZpcnN0ICs9IGluY3IpCisgICAgeworICAgICAgZXJyID0gUkVHX05PTUFUQ0g7CisgICAgICBpZiAobWF0Y2hfZmlyc3QgPCBsZWZ0X2xpbSB8fCByaWdodF9saW0gPCBtYXRjaF9maXJzdCkKKwlnb3RvIGZyZWVfcmV0dXJuOworCisgICAgICAvKiBBZHZhbmNlIGFzIHJhcGlkbHkgYXMgcG9zc2libGUgdGhyb3VnaCB0aGUgc3RyaW5nLCB1bnRpbCB3ZQorCSBmaW5kIGEgcGxhdXNpYmxlIHBsYWNlIHRvIHN0YXJ0IG1hdGNoaW5nLiAgVGhpcyBtYXkgYmUgZG9uZQorCSB3aXRoIHZhcnlpbmcgZWZmaWNpZW5jeSwgc28gdGhlcmUgYXJlIHZhcmlvdXMgcG9zc2liaWxpdGllczoKKwkgb25seSB0aGUgbW9zdCBjb21tb24gb2YgdGhlbSBhcmUgc3BlY2lhbGl6ZWQsIGluIG9yZGVyIHRvCisJIHNhdmUgb24gY29kZSBzaXplLiAgV2UgdXNlIGEgc3dpdGNoIHN0YXRlbWVudCBmb3Igc3BlZWQuICAqLworICAgICAgc3dpdGNoIChtYXRjaF9raW5kKQorCXsKKwljYXNlIDg6CisJICAvKiBObyBmYXN0bWFwLiAgKi8KKwkgIGJyZWFrOworCisJY2FzZSA3OgorCSAgLyogRmFzdG1hcCB3aXRoIHNpbmdsZS1ieXRlIHRyYW5zbGF0aW9uLCBtYXRjaCBmb3J3YXJkLiAgKi8KKwkgIHdoaWxlIChCRSAobWF0Y2hfZmlyc3QgPCByaWdodF9saW0sIDEpCisJCSAmJiAhZmFzdG1hcFt0Wyh1bnNpZ25lZCBjaGFyKSBzdHJpbmdbbWF0Y2hfZmlyc3RdXV0pCisJICAgICsrbWF0Y2hfZmlyc3Q7CisJICBnb3RvIGZvcndhcmRfbWF0Y2hfZm91bmRfc3RhcnRfb3JfcmVhY2hlZF9lbmQ7CisKKwljYXNlIDY6CisJICAvKiBGYXN0bWFwIHdpdGhvdXQgdHJhbnNsYXRpb24sIG1hdGNoIGZvcndhcmQuICAqLworCSAgd2hpbGUgKEJFIChtYXRjaF9maXJzdCA8IHJpZ2h0X2xpbSwgMSkKKwkJICYmICFmYXN0bWFwWyh1bnNpZ25lZCBjaGFyKSBzdHJpbmdbbWF0Y2hfZmlyc3RdXSkKKwkgICAgKyttYXRjaF9maXJzdDsKKworCWZvcndhcmRfbWF0Y2hfZm91bmRfc3RhcnRfb3JfcmVhY2hlZF9lbmQ6CisJICBpZiAoQkUgKG1hdGNoX2ZpcnN0ID09IHJpZ2h0X2xpbSwgMCkpCisJICAgIHsKKwkgICAgICBjaCA9IG1hdGNoX2ZpcnN0ID49IGxlbmd0aAorCQkgICAgICAgPyAwIDogKHVuc2lnbmVkIGNoYXIpIHN0cmluZ1ttYXRjaF9maXJzdF07CisJICAgICAgaWYgKCFmYXN0bWFwW3QgPyB0W2NoXSA6IGNoXSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIDQ6CisJY2FzZSA1OgorCSAgLyogRmFzdG1hcCB3aXRob3V0IG11bHRpLWJ5dGUgdHJhbnNsYXRpb24sIG1hdGNoIGJhY2t3YXJkcy4gICovCisJICB3aGlsZSAobWF0Y2hfZmlyc3QgPj0gbGVmdF9saW0pCisJICAgIHsKKwkgICAgICBjaCA9IG1hdGNoX2ZpcnN0ID49IGxlbmd0aAorCQkgICAgICAgPyAwIDogKHVuc2lnbmVkIGNoYXIpIHN0cmluZ1ttYXRjaF9maXJzdF07CisJICAgICAgaWYgKGZhc3RtYXBbdCA/IHRbY2hdIDogY2hdKQorCQlicmVhazsKKwkgICAgICAtLW1hdGNoX2ZpcnN0OworCSAgICB9CisJICBpZiAobWF0Y2hfZmlyc3QgPCBsZWZ0X2xpbSkKKwkgICAgZ290byBmcmVlX3JldHVybjsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIC8qIEluIHRoaXMgY2FzZSwgd2UgY2FuJ3QgZGV0ZXJtaW5lIGVhc2lseSB0aGUgY3VycmVudCBieXRlLAorCSAgICAgc2luY2UgaXQgbWlnaHQgYmUgYSBjb21wb25lbnQgYnl0ZSBvZiBhIG11bHRpYnl0ZQorCSAgICAgY2hhcmFjdGVyLiAgVGhlbiB3ZSB1c2UgdGhlIGNvbnN0cnVjdGVkIGJ1ZmZlciBpbnN0ZWFkLiAgKi8KKwkgIGZvciAoOzspCisJICAgIHsKKwkgICAgICAvKiBJZiBNQVRDSF9GSVJTVCBpcyBvdXQgb2YgdGhlIHZhbGlkIHJhbmdlLCByZWNvbnN0cnVjdCB0aGUKKwkJIGJ1ZmZlcnMuICAqLworCSAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSBtYXRjaF9maXJzdCAtIG1jdHguaW5wdXQucmF3X21ic19pZHg7CisJICAgICAgaWYgKEJFIChvZmZzZXQgPj0gKHVuc2lnbmVkIGludCkgbWN0eC5pbnB1dC52YWxpZF9yYXdfbGVuLCAwKSkKKwkJeworCQkgIGVyciA9IHJlX3N0cmluZ19yZWNvbnN0cnVjdCAoJm1jdHguaW5wdXQsIG1hdGNoX2ZpcnN0LAorCQkJCQkgICAgICAgZWZsYWdzKTsKKwkJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCisJCSAgb2Zmc2V0ID0gbWF0Y2hfZmlyc3QgLSBtY3R4LmlucHV0LnJhd19tYnNfaWR4OworCQl9CisJICAgICAgLyogSWYgTUFUQ0hfRklSU1QgaXMgb3V0IG9mIHRoZSBidWZmZXIsIGxlYXZlIGl0IGFzICdcMCcuCisJCSBOb3RlIHRoYXQgTUFUQ0hfRklSU1QgbXVzdCBub3QgYmUgc21hbGxlciB0aGFuIDAuICAqLworCSAgICAgIGNoID0gKG1hdGNoX2ZpcnN0ID49IGxlbmd0aAorCQkgICAgPyAwIDogcmVfc3RyaW5nX2J5dGVfYXQgKCZtY3R4LmlucHV0LCBvZmZzZXQpKTsKKwkgICAgICBpZiAoZmFzdG1hcFtjaF0pCisJCWJyZWFrOworCSAgICAgIG1hdGNoX2ZpcnN0ICs9IGluY3I7CisJICAgICAgaWYgKG1hdGNoX2ZpcnN0IDwgbGVmdF9saW0gfHwgbWF0Y2hfZmlyc3QgPiByaWdodF9saW0pCisJCXsKKwkJICBlcnIgPSBSRUdfTk9NQVRDSDsKKwkJICBnb3RvIGZyZWVfcmV0dXJuOworCQl9CisJICAgIH0KKwkgIGJyZWFrOworCX0KKworICAgICAgLyogUmVjb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMgc28gdGhhdCB0aGUgbWF0Y2hlciBjYW4gYXNzdW1lIHRoYXQKKwkgdGhlIG1hdGNoaW5nIHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gICovCisgICAgICBlcnIgPSByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKCZtY3R4LmlucHV0LCBtYXRjaF9maXJzdCwgZWZsYWdzKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgLyogRG9uJ3QgY29uc2lkZXIgdGhpcyBjaGFyIGFzIGEgcG9zc2libGUgbWF0Y2ggc3RhcnQgaWYgaXQgcGFydCwKKwl5ZXQgaXNuJ3QgdGhlIGhlYWQsIG9mIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisgICAgICBpZiAoIXNiICYmICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoJm1jdHguaW5wdXQsIDApKQorCWNvbnRpbnVlOworI2VuZGlmCisKKyAgICAgIC8qIEl0IHNlZW1zIHRvIGJlIGFwcHJvcHJpYXRlIG9uZSwgdGhlbiB1c2UgdGhlIG1hdGNoZXIuICAqLworICAgICAgLyogV2UgYXNzdW1lIHRoYXQgdGhlIG1hdGNoaW5nIHN0YXJ0cyBmcm9tIDAuICAqLworICAgICAgbWN0eC5zdGF0ZV9sb2dfdG9wID0gbWN0eC5uYmtyZWZfZW50cyA9IG1jdHgubWF4X21iX2VsZW1fbGVuID0gMDsKKyAgICAgIG1hdGNoX2xhc3QgPSBjaGVja19tYXRjaGluZyAoJm1jdHgsIGZsX2xvbmdlc3RfbWF0Y2gsCisJCQkJICAgcmFuZ2UgPj0gMCA/ICZtYXRjaF9maXJzdCA6IE5VTEwpOworICAgICAgaWYgKG1hdGNoX2xhc3QgIT0gLTEpCisJeworCSAgaWYgKEJFIChtYXRjaF9sYXN0ID09IC0yLCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgbWN0eC5tYXRjaF9sYXN0ID0gbWF0Y2hfbGFzdDsKKwkgICAgICBpZiAoKCFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMSkgfHwgZGZhLT5uYmFja3JlZikKKwkJeworCQkgIHJlX2RmYXN0YXRlX3QgKnBzdGF0ZSA9IG1jdHguc3RhdGVfbG9nW21hdGNoX2xhc3RdOworCQkgIG1jdHgubGFzdF9ub2RlID0gY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0ICgmbWN0eCwgcHN0YXRlLAorCQkJCQkJCSAgICAgbWF0Y2hfbGFzdCk7CisJCX0KKwkgICAgICBpZiAoKCFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMSAmJiBkZmEtPmhhc19wbHVyYWxfbWF0Y2gpCisJCSAgfHwgZGZhLT5uYmFja3JlZikKKwkJeworCQkgIGVyciA9IHBydW5lX2ltcG9zc2libGVfbm9kZXMgKCZtY3R4KTsKKwkJICBpZiAoZXJyID09IFJFR19OT0VSUk9SKQorCQkgICAgYnJlYWs7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PTUFUQ0gsIDApKQorCQkgICAgZ290byBmcmVlX3JldHVybjsKKwkJICBtYXRjaF9sYXN0ID0gLTE7CisJCX0KKwkgICAgICBlbHNlCisJCWJyZWFrOyAvKiBXZSBmb3VuZCBhIG1hdGNoLiAgKi8KKwkgICAgfQorCX0KKworICAgICAgbWF0Y2hfY3R4X2NsZWFuICgmbWN0eCk7CisgICAgfQorCisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtYXRjaF9sYXN0ICE9IC0xKTsKKyAgYXNzZXJ0IChlcnIgPT0gUkVHX05PRVJST1IpOworI2VuZGlmCisKKyAgLyogU2V0IHBtYXRjaFtdIGlmIHdlIG5lZWQuICAqLworICBpZiAobm1hdGNoID4gMCkKKyAgICB7CisgICAgICBpbnQgcmVnX2lkeDsKKworICAgICAgLyogSW5pdGlhbGl6ZSByZWdpc3RlcnMuICAqLworICAgICAgZm9yIChyZWdfaWR4ID0gMTsgcmVnX2lkeCA8IG5tYXRjaDsgKytyZWdfaWR4KQorCXBtYXRjaFtyZWdfaWR4XS5ybV9zbyA9IHBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9IC0xOworCisgICAgICAvKiBTZXQgdGhlIHBvaW50cyB3aGVyZSBtYXRjaGluZyBzdGFydC9lbmQuICAqLworICAgICAgcG1hdGNoWzBdLnJtX3NvID0gMDsKKyAgICAgIHBtYXRjaFswXS5ybV9lbyA9IG1jdHgubWF0Y2hfbGFzdDsKKworICAgICAgaWYgKCFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMSkKKwl7CisJICBlcnIgPSBzZXRfcmVncyAocHJlZywgJm1jdHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJICBkZmEtPmhhc19wbHVyYWxfbWF0Y2ggJiYgZGZhLT5uYmFja3JlZiA+IDApOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKworICAgICAgLyogQXQgbGFzdCwgYWRkIHRoZSBvZmZzZXQgdG8gdGhlIGVhY2ggcmVnaXN0ZXJzLCBzaW5jZSB3ZSBzbGlkZWQKKwkgdGhlIGJ1ZmZlcnMgc28gdGhhdCB3ZSBjb3VsZCBhc3N1bWUgdGhhdCB0aGUgbWF0Y2hpbmcgc3RhcnRzCisJIGZyb20gMC4gICovCisgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgbm1hdGNoOyArK3JlZ19pZHgpCisJaWYgKHBtYXRjaFtyZWdfaWR4XS5ybV9zbyAhPSAtMSkKKwkgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICBpZiAoQkUgKG1jdHguaW5wdXQub2Zmc2V0c19uZWVkZWQgIT0gMCwgMCkpCisJICAgICAgeworCQlwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPQorCQkgIChwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPT0gbWN0eC5pbnB1dC52YWxpZF9sZW4KKwkJICAgPyBtY3R4LmlucHV0LnZhbGlkX3Jhd19sZW4KKwkJICAgOiBtY3R4LmlucHV0Lm9mZnNldHNbcG1hdGNoW3JlZ19pZHhdLnJtX3NvXSk7CisJCXBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9CisJCSAgKHBtYXRjaFtyZWdfaWR4XS5ybV9lbyA9PSBtY3R4LmlucHV0LnZhbGlkX2xlbgorCQkgICA/IG1jdHguaW5wdXQudmFsaWRfcmF3X2xlbgorCQkgICA6IG1jdHguaW5wdXQub2Zmc2V0c1twbWF0Y2hbcmVnX2lkeF0ucm1fZW9dKTsKKwkgICAgICB9CisjZWxzZQorCSAgICBhc3NlcnQgKG1jdHguaW5wdXQub2Zmc2V0c19uZWVkZWQgPT0gMCk7CisjZW5kaWYKKwkgICAgcG1hdGNoW3JlZ19pZHhdLnJtX3NvICs9IG1hdGNoX2ZpcnN0OworCSAgICBwbWF0Y2hbcmVnX2lkeF0ucm1fZW8gKz0gbWF0Y2hfZmlyc3Q7CisJICB9CisgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgZXh0cmFfbm1hdGNoOyArK3JlZ19pZHgpCisJeworCSAgcG1hdGNoW25tYXRjaCArIHJlZ19pZHhdLnJtX3NvID0gLTE7CisJICBwbWF0Y2hbbm1hdGNoICsgcmVnX2lkeF0ucm1fZW8gPSAtMTsKKwl9CisKKyAgICAgIGlmIChkZmEtPnN1YmV4cF9tYXApCisJZm9yIChyZWdfaWR4ID0gMDsgcmVnX2lkeCArIDEgPCBubWF0Y2g7IHJlZ19pZHgrKykKKwkgIGlmIChkZmEtPnN1YmV4cF9tYXBbcmVnX2lkeF0gIT0gcmVnX2lkeCkKKwkgICAgeworCSAgICAgIHBtYXRjaFtyZWdfaWR4ICsgMV0ucm1fc28KKwkJPSBwbWF0Y2hbZGZhLT5zdWJleHBfbWFwW3JlZ19pZHhdICsgMV0ucm1fc287CisJICAgICAgcG1hdGNoW3JlZ19pZHggKyAxXS5ybV9lbworCQk9IHBtYXRjaFtkZmEtPnN1YmV4cF9tYXBbcmVnX2lkeF0gKyAxXS5ybV9lbzsKKwkgICAgfQorICAgIH0KKworIGZyZWVfcmV0dXJuOgorICByZV9mcmVlIChtY3R4LnN0YXRlX2xvZyk7CisgIGlmIChkZmEtPm5iYWNrcmVmKQorICAgIG1hdGNoX2N0eF9mcmVlICgmbWN0eCk7CisgIHJlX3N0cmluZ19kZXN0cnVjdCAoJm1jdHguaW5wdXQpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpbnQgaGFsdF9ub2RlLCBtYXRjaF9sYXN0OworICByZWdfZXJyY29kZV90IHJldDsKKyAgcmVfZGZhc3RhdGVfdCAqKnNpZnRlZF9zdGF0ZXM7CisgIHJlX2RmYXN0YXRlX3QgKipsaW1fc3RhdGVzID0gTlVMTDsKKyAgcmVfc2lmdF9jb250ZXh0X3Qgc2N0eDsKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKTsKKyNlbmRpZgorICBtYXRjaF9sYXN0ID0gbWN0eC0+bWF0Y2hfbGFzdDsKKyAgaGFsdF9ub2RlID0gbWN0eC0+bGFzdF9ub2RlOworCisgIC8qIEF2b2lkIG92ZXJmbG93LiAgKi8KKyAgaWYgKEJFIChTSVpFX01BWCAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSA8PSBtYXRjaF9sYXN0LCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKworICBzaWZ0ZWRfc3RhdGVzID0gcmVfbWFsbG9jIChyZV9kZmFzdGF0ZV90ICosIG1hdGNoX2xhc3QgKyAxKTsKKyAgaWYgKEJFIChzaWZ0ZWRfc3RhdGVzID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgIHJldCA9IFJFR19FU1BBQ0U7CisgICAgICBnb3RvIGZyZWVfcmV0dXJuOworICAgIH0KKyAgaWYgKGRmYS0+bmJhY2tyZWYpCisgICAgeworICAgICAgbGltX3N0YXRlcyA9IHJlX21hbGxvYyAocmVfZGZhc3RhdGVfdCAqLCBtYXRjaF9sYXN0ICsgMSk7CisgICAgICBpZiAoQkUgKGxpbV9zdGF0ZXMgPT0gTlVMTCwgMCkpCisJeworCSAgcmV0ID0gUkVHX0VTUEFDRTsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorICAgICAgd2hpbGUgKDEpCisJeworCSAgbWVtc2V0IChsaW1fc3RhdGVzLCAnXDAnLAorCQkgIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSAqIChtYXRjaF9sYXN0ICsgMSkpOworCSAgc2lmdF9jdHhfaW5pdCAoJnNjdHgsIHNpZnRlZF9zdGF0ZXMsIGxpbV9zdGF0ZXMsIGhhbHRfbm9kZSwKKwkJCSBtYXRjaF9sYXN0KTsKKwkgIHJldCA9IHNpZnRfc3RhdGVzX2JhY2t3YXJkIChtY3R4LCAmc2N0eCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmc2N0eC5saW1pdHMpOworCSAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICAgIGdvdG8gZnJlZV9yZXR1cm47CisJICBpZiAoc2lmdGVkX3N0YXRlc1swXSAhPSBOVUxMIHx8IGxpbV9zdGF0ZXNbMF0gIT0gTlVMTCkKKwkgICAgYnJlYWs7CisJICBkbworCSAgICB7CisJICAgICAgLS1tYXRjaF9sYXN0OworCSAgICAgIGlmIChtYXRjaF9sYXN0IDwgMCkKKwkJeworCQkgIHJldCA9IFJFR19OT01BVENIOworCQkgIGdvdG8gZnJlZV9yZXR1cm47CisJCX0KKwkgICAgfSB3aGlsZSAobWN0eC0+c3RhdGVfbG9nW21hdGNoX2xhc3RdID09IE5VTEwKKwkJICAgICB8fCAhbWN0eC0+c3RhdGVfbG9nW21hdGNoX2xhc3RdLT5oYWx0KTsKKwkgIGhhbHRfbm9kZSA9IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAobWN0eCwKKwkJCQkJCW1jdHgtPnN0YXRlX2xvZ1ttYXRjaF9sYXN0XSwKKwkJCQkJCW1hdGNoX2xhc3QpOworCX0KKyAgICAgIHJldCA9IG1lcmdlX3N0YXRlX2FycmF5IChkZmEsIHNpZnRlZF9zdGF0ZXMsIGxpbV9zdGF0ZXMsCisJCQkgICAgICAgbWF0Y2hfbGFzdCArIDEpOworICAgICAgcmVfZnJlZSAobGltX3N0YXRlcyk7CisgICAgICBsaW1fc3RhdGVzID0gTlVMTDsKKyAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHNpZnRfY3R4X2luaXQgKCZzY3R4LCBzaWZ0ZWRfc3RhdGVzLCBsaW1fc3RhdGVzLCBoYWx0X25vZGUsIG1hdGNoX2xhc3QpOworICAgICAgcmV0ID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZzY3R4KTsKKyAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZzY3R4LmxpbWl0cyk7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKyAgICAgIGlmIChzaWZ0ZWRfc3RhdGVzWzBdID09IE5VTEwpCisJeworCSAgcmV0ID0gUkVHX05PTUFUQ0g7CisJICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKyAgICB9CisgIHJlX2ZyZWUgKG1jdHgtPnN0YXRlX2xvZyk7CisgIG1jdHgtPnN0YXRlX2xvZyA9IHNpZnRlZF9zdGF0ZXM7CisgIHNpZnRlZF9zdGF0ZXMgPSBOVUxMOworICBtY3R4LT5sYXN0X25vZGUgPSBoYWx0X25vZGU7CisgIG1jdHgtPm1hdGNoX2xhc3QgPSBtYXRjaF9sYXN0OworICByZXQgPSBSRUdfTk9FUlJPUjsKKyBmcmVlX3JldHVybjoKKyAgcmVfZnJlZSAoc2lmdGVkX3N0YXRlcyk7CisgIHJlX2ZyZWUgKGxpbV9zdGF0ZXMpOworICByZXR1cm4gcmV0OworfQorCisvKiBBY3F1aXJlIGFuIGluaXRpYWwgc3RhdGUgYW5kIHJldHVybiBpdC4KKyAgIFdlIG11c3Qgc2VsZWN0IGFwcHJvcHJpYXRlIGluaXRpYWwgc3RhdGUgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LAorICAgc2luY2UgaW5pdGlhbCBzdGF0ZXMgbWF5IGhhdmUgY29uc3RyYWludHMgbGlrZSAiXDwiLCAiXiIsIGV0Yy4uICAqLworCitzdGF0aWMgaW5saW5lIHJlX2RmYXN0YXRlX3QgKgorX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkgaW50ZXJuYWxfZnVuY3Rpb24KK2FjcXVpcmVfaW5pdF9zdGF0ZV9jb250ZXh0IChyZWdfZXJyY29kZV90ICplcnIsIGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgICBpbnQgaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpZiAoZGZhLT5pbml0X3N0YXRlLT5oYXNfY29uc3RyYWludCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBpZHggLSAxLCBtY3R4LT5lZmxhZ3MpOworICAgICAgaWYgKElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZV93b3JkOworICAgICAgZWxzZSBpZiAoSVNfT1JESU5BUllfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZTsKKyAgICAgIGVsc2UgaWYgKElTX0JFR0JVRl9DT05URVhUIChjb250ZXh0KSAmJiBJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQpKQorCXJldHVybiBkZmEtPmluaXRfc3RhdGVfYmVnYnVmOworICAgICAgZWxzZSBpZiAoSVNfTkVXTElORV9DT05URVhUIChjb250ZXh0KSkKKwlyZXR1cm4gZGZhLT5pbml0X3N0YXRlX25sOworICAgICAgZWxzZSBpZiAoSVNfQkVHQlVGX0NPTlRFWFQgKGNvbnRleHQpKQorCXsKKwkgIC8qIEl0IGlzIHJlbGF0aXZlbHkgcmFyZSBjYXNlLCB0aGVuIGNhbGN1bGF0ZSBvbiBkZW1hbmQuICAqLworCSAgcmV0dXJuIHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoZXJyLCBkZmEsCisJCQkJCSAgIGRmYS0+aW5pdF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsCisJCQkJCSAgIGNvbnRleHQpOworCX0KKyAgICAgIGVsc2UKKwkvKiBNdXN0IG5vdCBoYXBwZW4/ICAqLworCXJldHVybiBkZmEtPmluaXRfc3RhdGU7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZTsKK30KKworLyogQ2hlY2sgd2hldGhlciB0aGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGlucHV0IHN0cmluZyBJTlBVVCBvciBub3QsCisgICBhbmQgcmV0dXJuIHRoZSBpbmRleCB3aGVyZSB0aGUgbWF0Y2hpbmcgZW5kLCByZXR1cm4gLTEgaWYgbm90IG1hdGNoLAorICAgb3IgcmV0dXJuIC0yIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisgICBGTF9MT05HRVNUX01BVENIIG1lYW5zIHdlIHdhbnQgdGhlIFBPU0lYIGxvbmdlc3QgbWF0Y2hpbmcuCisgICBJZiBQX01BVENIX0ZJUlNUIGlzIG5vdCBOVUxMLCBhbmQgdGhlIG1hdGNoIGZhaWxzLCBpdCBpcyBzZXQgdG8gdGhlCisgICBuZXh0IHBsYWNlIHdoZXJlIHdlIG1heSB3YW50IHRvIHRyeSBtYXRjaGluZy4KKyAgIE5vdGUgdGhhdCB0aGUgbWF0Y2hlciBhc3N1bWUgdGhhdCB0aGUgbWF0Y2hpbmcgc3RhcnRzIGZyb20gdGhlIGN1cnJlbnQKKyAgIGluZGV4IG9mIHRoZSBidWZmZXIuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfbWF0Y2hpbmcgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGZsX2xvbmdlc3RfbWF0Y2gsCisJCWludCAqcF9tYXRjaF9maXJzdCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBtYXRjaCA9IDA7CisgIGludCBtYXRjaF9sYXN0ID0gLTE7CisgIGludCBjdXJfc3RyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworICByZV9kZmFzdGF0ZV90ICpjdXJfc3RhdGU7CisgIGludCBhdF9pbml0X3N0YXRlID0gcF9tYXRjaF9maXJzdCAhPSBOVUxMOworICBpbnQgbmV4dF9zdGFydF9pZHggPSBjdXJfc3RyX2lkeDsKKworICBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgY3VyX3N0YXRlID0gYWNxdWlyZV9pbml0X3N0YXRlX2NvbnRleHQgKCZlcnIsIG1jdHgsIGN1cl9zdHJfaWR4KTsKKyAgLyogQW4gaW5pdGlhbCBzdGF0ZSBtdXN0IG5vdCBiZSBOVUxMIChpbnZhbGlkKS4gICovCisgIGlmIChCRSAoY3VyX3N0YXRlID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgIGFzc2VydCAoZXJyID09IFJFR19FU1BBQ0UpOworICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICBpZiAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpCisgICAgeworICAgICAgbWN0eC0+c3RhdGVfbG9nW2N1cl9zdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKworICAgICAgLyogQ2hlY2sgT1BfT1BFTl9TVUJFWFAgaW4gdGhlIGluaXRpYWwgc3RhdGUgaW4gY2FzZSB0aGF0IHdlIHVzZSB0aGVtCisJIGxhdGVyLiAgRS5nLiBQcm9jZXNzaW5nIGJhY2sgcmVmZXJlbmNlcy4gICovCisgICAgICBpZiAoQkUgKGRmYS0+bmJhY2tyZWYsIDApKQorCXsKKwkgIGF0X2luaXRfc3RhdGUgPSAwOworCSAgZXJyID0gY2hlY2tfc3ViZXhwX21hdGNoaW5nX3RvcCAobWN0eCwgJmN1cl9zdGF0ZS0+bm9kZXMsIDApOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCisJICBpZiAoY3VyX3N0YXRlLT5oYXNfYmFja3JlZikKKwkgICAgeworCSAgICAgIGVyciA9IHRyYW5zaXRfc3RhdGVfYmtyZWYgKG1jdHgsICZjdXJfc3RhdGUtPm5vZGVzKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qIElmIHRoZSBSRSBhY2NlcHRzIE5VTEwgc3RyaW5nLiAgKi8KKyAgaWYgKEJFIChjdXJfc3RhdGUtPmhhbHQsIDApKQorICAgIHsKKyAgICAgIGlmICghY3VyX3N0YXRlLT5oYXNfY29uc3RyYWludAorCSAgfHwgY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChtY3R4LCBjdXJfc3RhdGUsIGN1cl9zdHJfaWR4KSkKKwl7CisJICBpZiAoIWZsX2xvbmdlc3RfbWF0Y2gpCisJICAgIHJldHVybiBjdXJfc3RyX2lkeDsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG1hdGNoX2xhc3QgPSBjdXJfc3RyX2lkeDsKKwkgICAgICBtYXRjaCA9IDE7CisJICAgIH0KKwl9CisgICAgfQorCisgIHdoaWxlICghcmVfc3RyaW5nX2VvaSAoJm1jdHgtPmlucHV0KSkKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpvbGRfc3RhdGUgPSBjdXJfc3RhdGU7CisgICAgICBpbnQgbmV4dF9jaGFyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpICsgMTsKKworICAgICAgaWYgKEJFIChuZXh0X2NoYXJfaWR4ID49IG1jdHgtPmlucHV0LmJ1ZnNfbGVuLCAwKQorCSAgfHwgKEJFIChuZXh0X2NoYXJfaWR4ID49IG1jdHgtPmlucHV0LnZhbGlkX2xlbiwgMCkKKwkgICAgICAmJiBtY3R4LT5pbnB1dC52YWxpZF9sZW4gPCBtY3R4LT5pbnB1dC5sZW4pKQorCXsKKwkgIGVyciA9IGV4dGVuZF9idWZmZXJzIChtY3R4KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIGFzc2VydCAoZXJyID09IFJFR19FU1BBQ0UpOworCSAgICAgIHJldHVybiAtMjsKKwkgICAgfQorCX0KKworICAgICAgY3VyX3N0YXRlID0gdHJhbnNpdF9zdGF0ZSAoJmVyciwgbWN0eCwgY3VyX3N0YXRlKTsKKyAgICAgIGlmIChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCkKKwljdXJfc3RhdGUgPSBtZXJnZV9zdGF0ZV93aXRoX2xvZyAoJmVyciwgbWN0eCwgY3VyX3N0YXRlKTsKKworICAgICAgaWYgKGN1cl9zdGF0ZSA9PSBOVUxMKQorCXsKKwkgIC8qIFJlYWNoZWQgdGhlIGludmFsaWQgc3RhdGUgb3IgYW4gZXJyb3IuICBUcnkgdG8gcmVjb3ZlciBhIHZhbGlkCisJICAgICBzdGF0ZSB1c2luZyB0aGUgc3RhdGUgbG9nLCBpZiBhdmFpbGFibGUgYW5kIGlmIHdlIGhhdmUgbm90CisJICAgICBhbHJlYWR5IGZvdW5kIGEgdmFsaWQgKGV2ZW4gaWYgbm90IHRoZSBsb25nZXN0KSBtYXRjaC4gICovCisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiAtMjsKKworCSAgaWYgKG1jdHgtPnN0YXRlX2xvZyA9PSBOVUxMCisJICAgICAgfHwgKG1hdGNoICYmICFmbF9sb25nZXN0X21hdGNoKQorCSAgICAgIHx8IChjdXJfc3RhdGUgPSBmaW5kX3JlY292ZXJfc3RhdGUgKCZlcnIsIG1jdHgpKSA9PSBOVUxMKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGlmIChCRSAoYXRfaW5pdF9zdGF0ZSwgMCkpCisJeworCSAgaWYgKG9sZF9zdGF0ZSA9PSBjdXJfc3RhdGUpCisJICAgIG5leHRfc3RhcnRfaWR4ID0gbmV4dF9jaGFyX2lkeDsKKwkgIGVsc2UKKwkgICAgYXRfaW5pdF9zdGF0ZSA9IDA7CisJfQorCisgICAgICBpZiAoY3VyX3N0YXRlLT5oYWx0KQorCXsKKwkgIC8qIFJlYWNoZWQgYSBoYWx0IHN0YXRlLgorCSAgICAgQ2hlY2sgdGhlIGhhbHQgc3RhdGUgY2FuIHNhdGlzZnkgdGhlIGN1cnJlbnQgY29udGV4dC4gICovCisJICBpZiAoIWN1cl9zdGF0ZS0+aGFzX2NvbnN0cmFpbnQKKwkgICAgICB8fCBjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKG1jdHgsIGN1cl9zdGF0ZSwKKwkJCQkJICAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkpKQorCSAgICB7CisJICAgICAgLyogV2UgZm91bmQgYW4gYXBwcm9wcmlhdGUgaGFsdCBzdGF0ZS4gICovCisJICAgICAgbWF0Y2hfbGFzdCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworCSAgICAgIG1hdGNoID0gMTsKKworCSAgICAgIC8qIFdlIGZvdW5kIGEgbWF0Y2gsIGRvIG5vdCBtb2RpZnkgbWF0Y2hfZmlyc3QgYmVsb3cuICAqLworCSAgICAgIHBfbWF0Y2hfZmlyc3QgPSBOVUxMOworCSAgICAgIGlmICghZmxfbG9uZ2VzdF9tYXRjaCkKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgIGlmIChwX21hdGNoX2ZpcnN0KQorICAgICpwX21hdGNoX2ZpcnN0ICs9IG5leHRfc3RhcnRfaWR4OworCisgIHJldHVybiBtYXRjaF9sYXN0OworfQorCisvKiBDaGVjayBOT0RFIG1hdGNoIHRoZSBjdXJyZW50IGNvbnRleHQuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfaGFsdF9ub2RlX2NvbnRleHQgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlLCB1bnNpZ25lZCBpbnQgY29udGV4dCkKK3sKKyAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisgIHVuc2lnbmVkIGludCBjb25zdHJhaW50ID0gZGZhLT5ub2Rlc1tub2RlXS5jb25zdHJhaW50OworICBpZiAodHlwZSAhPSBFTkRfT0ZfUkUpCisgICAgcmV0dXJuIDA7CisgIGlmICghY29uc3RyYWludCkKKyAgICByZXR1cm4gMTsKKyAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAoY29uc3RyYWludCwgY29udGV4dCkpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCisvKiBDaGVjayB0aGUgaGFsdCBzdGF0ZSBTVEFURSBtYXRjaCB0aGUgY3VycmVudCBjb250ZXh0LgorICAgUmV0dXJuIDAgaWYgbm90IG1hdGNoLCBpZiB0aGUgbm9kZSwgU1RBVEUgaGFzLCBpcyBhIGhhbHQgbm9kZSBhbmQKKyAgIG1hdGNoIHRoZSBjb250ZXh0LCByZXR1cm4gdGhlIG5vZGUuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLCBpbnQgaWR4KQoreworICBpbnQgaTsKKyAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChzdGF0ZS0+aGFsdCk7CisjZW5kaWYKKyAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGlkeCwgbWN0eC0+ZWZsYWdzKTsKKyAgZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ub2Rlcy5uZWxlbTsgKytpKQorICAgIGlmIChjaGVja19oYWx0X25vZGVfY29udGV4dCAobWN0eC0+ZGZhLCBzdGF0ZS0+bm9kZXMuZWxlbXNbaV0sIGNvbnRleHQpKQorICAgICAgcmV0dXJuIHN0YXRlLT5ub2Rlcy5lbGVtc1tpXTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIENvbXB1dGUgdGhlIG5leHQgbm9kZSB0byB3aGljaCAiTkZBIiB0cmFuc2l0IGZyb20gTk9ERSgiTkZBIiBpcyBhIE5GQQorICAgY29ycmVzcG9uZGluZyB0byB0aGUgREZBKS4KKyAgIFJldHVybiB0aGUgZGVzdGluYXRpb24gbm9kZSwgYW5kIHVwZGF0ZSBFUFNfVklBX05PREVTLCByZXR1cm4gLTEgaW4gY2FzZQorICAgb2YgZXJyb3JzLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3Byb2NlZWRfbmV4dF9ub2RlIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBucmVncywgcmVnbWF0Y2hfdCAqcmVncywKKwkJICAgaW50ICpwaWR4LCBpbnQgbm9kZSwgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMsCisJCSAgIHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpbnQgaSwgZXJyOworICBpZiAoSVNfRVBTSUxPTl9OT0RFIChkZmEtPm5vZGVzW25vZGVdLnR5cGUpKQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMgPSAmbWN0eC0+c3RhdGVfbG9nWypwaWR4XS0+bm9kZXM7CisgICAgICByZV9ub2RlX3NldCAqZWRlc3RzID0gJmRmYS0+ZWRlc3RzW25vZGVdOworICAgICAgaW50IGRlc3Rfbm9kZTsKKyAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luc2VydCAoZXBzX3ZpYV9ub2Rlcywgbm9kZSk7CisgICAgICBpZiAoQkUgKGVyciA8IDAsIDApKQorCXJldHVybiAtMjsKKyAgICAgIC8qIFBpY2sgdXAgYSB2YWxpZCBkZXN0aW5hdGlvbiwgb3IgcmV0dXJuIC0xIGlmIG5vbmUgaXMgZm91bmQuICAqLworICAgICAgZm9yIChkZXN0X25vZGUgPSAtMSwgaSA9IDA7IGkgPCBlZGVzdHMtPm5lbGVtOyArK2kpCisJeworCSAgaW50IGNhbmRpZGF0ZSA9IGVkZXN0cy0+ZWxlbXNbaV07CisJICBpZiAoIXJlX25vZGVfc2V0X2NvbnRhaW5zIChjdXJfbm9kZXMsIGNhbmRpZGF0ZSkpCisJICAgIGNvbnRpbnVlOworCSAgaWYgKGRlc3Rfbm9kZSA9PSAtMSkKKwkgICAgZGVzdF9ub2RlID0gY2FuZGlkYXRlOworCisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBJbiBvcmRlciB0byBhdm9pZCBpbmZpbml0ZSBsb29wIGxpa2UgIihhKikqIiwgcmV0dXJuIHRoZSBzZWNvbmQKKwkJIGVwc2lsb24tdHJhbnNpdGlvbiBpZiB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgY29uc2lkZXJlZC4gICovCisJICAgICAgaWYgKHJlX25vZGVfc2V0X2NvbnRhaW5zIChlcHNfdmlhX25vZGVzLCBkZXN0X25vZGUpKQorCQlyZXR1cm4gY2FuZGlkYXRlOworCisJICAgICAgLyogT3RoZXJ3aXNlLCBwdXNoIHRoZSBzZWNvbmQgZXBzaWxvbi10cmFuc2l0aW9uIG9uIHRoZSBmYWlsIHN0YWNrLiAgKi8KKwkgICAgICBlbHNlIGlmIChmcyAhPSBOVUxMCisJCSAgICAgICAmJiBwdXNoX2ZhaWxfc3RhY2sgKGZzLCAqcGlkeCwgY2FuZGlkYXRlLCBucmVncywgcmVncywKKwkJCQkJICAgZXBzX3ZpYV9ub2RlcykpCisJCXJldHVybiAtMjsKKworCSAgICAgIC8qIFdlIGtub3cgd2UgYXJlIGdvaW5nIHRvIGV4aXQuICAqLworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIGRlc3Rfbm9kZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgbmFjY2VwdGVkID0gMDsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChkZmEtPm5vZGVzW25vZGVdLmFjY2VwdF9tYikKKwluYWNjZXB0ZWQgPSBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoZGZhLCBub2RlLCAmbWN0eC0+aW5wdXQsICpwaWR4KTsKKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgaWYgKHR5cGUgPT0gT1BfQkFDS19SRUYpCisJeworCSAgaW50IHN1YmV4cF9pZHggPSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHggKyAxOworCSAgbmFjY2VwdGVkID0gcmVnc1tzdWJleHBfaWR4XS5ybV9lbyAtIHJlZ3Nbc3ViZXhwX2lkeF0ucm1fc287CisJICBpZiAoZnMgIT0gTlVMTCkKKwkgICAgeworCSAgICAgIGlmIChyZWdzW3N1YmV4cF9pZHhdLnJtX3NvID09IC0xIHx8IHJlZ3Nbc3ViZXhwX2lkeF0ucm1fZW8gPT0gLTEpCisJCXJldHVybiAtMTsKKwkgICAgICBlbHNlIGlmIChuYWNjZXB0ZWQpCisJCXsKKwkJICBjaGFyICpidWYgPSAoY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKwkJICBpZiAobWVtY21wIChidWYgKyByZWdzW3N1YmV4cF9pZHhdLnJtX3NvLCBidWYgKyAqcGlkeCwKKwkJCSAgICAgIG5hY2NlcHRlZCkgIT0gMCkKKwkJICAgIHJldHVybiAtMTsKKwkJfQorCSAgICB9CisKKwkgIGlmIChuYWNjZXB0ZWQgPT0gMCkKKwkgICAgeworCSAgICAgIGludCBkZXN0X25vZGU7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChlcHNfdmlhX25vZGVzLCBub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciA8IDAsIDApKQorCQlyZXR1cm4gLTI7CisJICAgICAgZGVzdF9ub2RlID0gZGZhLT5lZGVzdHNbbm9kZV0uZWxlbXNbMF07CisJICAgICAgaWYgKHJlX25vZGVfc2V0X2NvbnRhaW5zICgmbWN0eC0+c3RhdGVfbG9nWypwaWR4XS0+bm9kZXMsCisJCQkJCWRlc3Rfbm9kZSkpCisJCXJldHVybiBkZXN0X25vZGU7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChuYWNjZXB0ZWQgIT0gMAorCSAgfHwgY2hlY2tfbm9kZV9hY2NlcHQgKG1jdHgsIGRmYS0+bm9kZXMgKyBub2RlLCAqcGlkeCkpCisJeworCSAgaW50IGRlc3Rfbm9kZSA9IGRmYS0+bmV4dHNbbm9kZV07CisJICAqcGlkeCA9IChuYWNjZXB0ZWQgPT0gMCkgPyAqcGlkeCArIDEgOiAqcGlkeCArIG5hY2NlcHRlZDsKKwkgIGlmIChmcyAmJiAoKnBpZHggPiBtY3R4LT5tYXRjaF9sYXN0IHx8IG1jdHgtPnN0YXRlX2xvZ1sqcGlkeF0gPT0gTlVMTAorCQkgICAgIHx8ICFyZV9ub2RlX3NldF9jb250YWlucyAoJm1jdHgtPnN0YXRlX2xvZ1sqcGlkeF0tPm5vZGVzLAorCQkJCQkgICAgICAgZGVzdF9ub2RlKSkpCisJICAgIHJldHVybiAtMTsKKwkgIHJlX25vZGVfc2V0X2VtcHR5IChlcHNfdmlhX25vZGVzKTsKKwkgIHJldHVybiBkZXN0X25vZGU7CisJfQorICAgIH0KKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3B1c2hfZmFpbF9zdGFjayAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMsIGludCBzdHJfaWR4LCBpbnQgZGVzdF9ub2RlLAorCQkgaW50IG5yZWdzLCByZWdtYXRjaF90ICpyZWdzLCByZV9ub2RlX3NldCAqZXBzX3ZpYV9ub2RlcykKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBudW0gPSBmcy0+bnVtKys7CisgIGlmIChmcy0+bnVtID09IGZzLT5hbGxvYykKKyAgICB7CisgICAgICBzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdCAqbmV3X2FycmF5OworICAgICAgbmV3X2FycmF5ID0gcmVhbGxvYyAoZnMtPnN0YWNrLCAoc2l6ZW9mIChzdHJ1Y3QgcmVfZmFpbF9zdGFja19lbnRfdCkKKwkJCQkgICAgICAgKiBmcy0+YWxsb2MgKiAyKSk7CisgICAgICBpZiAobmV3X2FycmF5ID09IE5VTEwpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBmcy0+YWxsb2MgKj0gMjsKKyAgICAgIGZzLT5zdGFjayA9IG5ld19hcnJheTsKKyAgICB9CisgIGZzLT5zdGFja1tudW1dLmlkeCA9IHN0cl9pZHg7CisgIGZzLT5zdGFja1tudW1dLm5vZGUgPSBkZXN0X25vZGU7CisgIGZzLT5zdGFja1tudW1dLnJlZ3MgPSByZV9tYWxsb2MgKHJlZ21hdGNoX3QsIG5yZWdzKTsKKyAgaWYgKGZzLT5zdGFja1tudW1dLnJlZ3MgPT0gTlVMTCkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgbWVtY3B5IChmcy0+c3RhY2tbbnVtXS5yZWdzLCByZWdzLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbnJlZ3MpOworICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZmcy0+c3RhY2tbbnVtXS5lcHNfdmlhX25vZGVzLCBlcHNfdmlhX25vZGVzKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3BvcF9mYWlsX3N0YWNrIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcywgaW50ICpwaWR4LCBpbnQgbnJlZ3MsCisJCXJlZ21hdGNoX3QgKnJlZ3MsIHJlX25vZGVfc2V0ICplcHNfdmlhX25vZGVzKQoreworICBpbnQgbnVtID0gLS1mcy0+bnVtOworICBhc3NlcnQgKG51bSA+PSAwKTsKKyAgKnBpZHggPSBmcy0+c3RhY2tbbnVtXS5pZHg7CisgIG1lbWNweSAocmVncywgZnMtPnN0YWNrW251bV0ucmVncywgc2l6ZW9mIChyZWdtYXRjaF90KSAqIG5yZWdzKTsKKyAgcmVfbm9kZV9zZXRfZnJlZSAoZXBzX3ZpYV9ub2Rlcyk7CisgIHJlX2ZyZWUgKGZzLT5zdGFja1tudW1dLnJlZ3MpOworICAqZXBzX3ZpYV9ub2RlcyA9IGZzLT5zdGFja1tudW1dLmVwc192aWFfbm9kZXM7CisgIHJldHVybiBmcy0+c3RhY2tbbnVtXS5ub2RlOworfQorCisvKiBTZXQgdGhlIHBvc2l0aW9ucyB3aGVyZSB0aGUgc3ViZXhwcmVzc2lvbnMgYXJlIHN0YXJ0cy9lbmRzIHRvIHJlZ2lzdGVycworICAgUE1BVENILgorICAgTm90ZTogV2UgYXNzdW1lIHRoYXQgcG1hdGNoWzBdIGlzIGFscmVhZHkgc2V0LCBhbmQKKyAgIHBtYXRjaFtpXS5ybV9zbyA9PSBwbWF0Y2hbaV0ucm1fZW8gPT0gLTEgZm9yIDAgPCBpIDwgbm1hdGNoLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitzZXRfcmVncyAoY29uc3QgcmVnZXhfdCAqcHJlZywgY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBzaXplX3Qgbm1hdGNoLAorCSAgcmVnbWF0Y2hfdCAqcG1hdGNoLCBpbnQgZmxfYmFja3RyYWNrKQoreworICBjb25zdCByZV9kZmFfdCAqZGZhID0gKGNvbnN0IHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgaW50IGlkeCwgY3VyX25vZGU7CisgIHJlX25vZGVfc2V0IGVwc192aWFfbm9kZXM7CisgIHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzOworICBzdHJ1Y3QgcmVfZmFpbF9zdGFja190IGZzX2JvZHkgPSB7IDAsIDIsIE5VTEwgfTsKKyAgcmVnbWF0Y2hfdCAqcHJldl9pZHhfbWF0Y2g7CisgIGludCBwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCA9IDA7CisKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG5tYXRjaCA+IDEpOworICBhc3NlcnQgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKTsKKyNlbmRpZgorICBpZiAoZmxfYmFja3RyYWNrKQorICAgIHsKKyAgICAgIGZzID0gJmZzX2JvZHk7CisgICAgICBmcy0+c3RhY2sgPSByZV9tYWxsb2MgKHN0cnVjdCByZV9mYWlsX3N0YWNrX2VudF90LCBmcy0+YWxsb2MpOworICAgICAgaWYgKGZzLT5zdGFjayA9PSBOVUxMKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKyAgZWxzZQorICAgIGZzID0gTlVMTDsKKworICBjdXJfbm9kZSA9IGRmYS0+aW5pdF9ub2RlOworICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmZXBzX3ZpYV9ub2Rlcyk7CisKKyNpZmRlZiBIQVZFX0FMTE9DQQorICBpZiAoX19saWJjX3VzZV9hbGxvY2EgKG5tYXRjaCAqIHNpemVvZiAocmVnbWF0Y2hfdCkpKQorICAgIHByZXZfaWR4X21hdGNoID0gKHJlZ21hdGNoX3QgKikgYWxsb2NhIChubWF0Y2ggKiBzaXplb2YgKHJlZ21hdGNoX3QpKTsKKyAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgcHJldl9pZHhfbWF0Y2ggPSByZV9tYWxsb2MgKHJlZ21hdGNoX3QsIG5tYXRjaCk7CisgICAgICBpZiAocHJldl9pZHhfbWF0Y2ggPT0gTlVMTCkKKwl7CisJICBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChmcyk7CisJICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCA9IDE7CisgICAgfQorICBtZW1jcHkgKHByZXZfaWR4X21hdGNoLCBwbWF0Y2gsIHNpemVvZiAocmVnbWF0Y2hfdCkgKiBubWF0Y2gpOworCisgIGZvciAoaWR4ID0gcG1hdGNoWzBdLnJtX3NvOyBpZHggPD0gcG1hdGNoWzBdLnJtX2VvIDspCisgICAgeworICAgICAgdXBkYXRlX3JlZ3MgKGRmYSwgcG1hdGNoLCBwcmV2X2lkeF9tYXRjaCwgY3VyX25vZGUsIGlkeCwgbm1hdGNoKTsKKworICAgICAgaWYgKGlkeCA9PSBwbWF0Y2hbMF0ucm1fZW8gJiYgY3VyX25vZGUgPT0gbWN0eC0+bGFzdF9ub2RlKQorCXsKKwkgIGludCByZWdfaWR4OworCSAgaWYgKGZzKQorCSAgICB7CisJICAgICAgZm9yIChyZWdfaWR4ID0gMDsgcmVnX2lkeCA8IG5tYXRjaDsgKytyZWdfaWR4KQorCQlpZiAocG1hdGNoW3JlZ19pZHhdLnJtX3NvID4gLTEgJiYgcG1hdGNoW3JlZ19pZHhdLnJtX2VvID09IC0xKQorCQkgIGJyZWFrOworCSAgICAgIGlmIChyZWdfaWR4ID09IG5tYXRjaCkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKwkJICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisJCSAgICByZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisJCSAgcmV0dXJuIGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKGZzKTsKKwkJfQorCSAgICAgIGN1cl9ub2RlID0gcG9wX2ZhaWxfc3RhY2sgKGZzLCAmaWR4LCBubWF0Y2gsIHBtYXRjaCwKKwkJCQkJICZlcHNfdmlhX25vZGVzKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOworCSAgICAgIGlmIChwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCkKKwkJcmVfZnJlZSAocHJldl9pZHhfbWF0Y2gpOworCSAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgICAgfQorCX0KKworICAgICAgLyogUHJvY2VlZCB0byBuZXh0IG5vZGUuICAqLworICAgICAgY3VyX25vZGUgPSBwcm9jZWVkX25leHRfbm9kZSAobWN0eCwgbm1hdGNoLCBwbWF0Y2gsICZpZHgsIGN1cl9ub2RlLAorCQkJCSAgICAmZXBzX3ZpYV9ub2RlcywgZnMpOworCisgICAgICBpZiAoQkUgKGN1cl9ub2RlIDwgMCwgMCkpCisJeworCSAgaWYgKEJFIChjdXJfbm9kZSA9PSAtMiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJICAgICAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQlyZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisJICAgICAgZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOworCSAgICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisJICBpZiAoZnMpCisJICAgIGN1cl9ub2RlID0gcG9wX2ZhaWxfc3RhY2sgKGZzLCAmaWR4LCBubWF0Y2gsIHBtYXRjaCwKKwkJCQkgICAgICAgJmVwc192aWFfbm9kZXMpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOworCSAgICAgIGlmIChwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCkKKwkJcmVfZnJlZSAocHJldl9pZHhfbWF0Y2gpOworCSAgICAgIHJldHVybiBSRUdfTk9NQVRDSDsKKwkgICAgfQorCX0KKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKyAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorICAgIHJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKyAgcmV0dXJuIGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKGZzKTsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcykKK3sKKyAgaWYgKGZzKQorICAgIHsKKyAgICAgIGludCBmc19pZHg7CisgICAgICBmb3IgKGZzX2lkeCA9IDA7IGZzX2lkeCA8IGZzLT5udW07ICsrZnNfaWR4KQorCXsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZmcy0+c3RhY2tbZnNfaWR4XS5lcHNfdmlhX25vZGVzKTsKKwkgIHJlX2ZyZWUgKGZzLT5zdGFja1tmc19pZHhdLnJlZ3MpOworCX0KKyAgICAgIHJlX2ZyZWUgKGZzLT5zdGFjayk7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgordXBkYXRlX3JlZ3MgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkgICAgIHJlZ21hdGNoX3QgKnByZXZfaWR4X21hdGNoLCBpbnQgY3VyX25vZGUsIGludCBjdXJfaWR4LCBpbnQgbm1hdGNoKQoreworICBpbnQgdHlwZSA9IGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGU7CisgIGlmICh0eXBlID09IE9QX09QRU5fU1VCRVhQKQorICAgIHsKKyAgICAgIGludCByZWdfbnVtID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3ByLmlkeCArIDE7CisKKyAgICAgIC8qIFdlIGFyZSBhdCB0aGUgZmlyc3Qgbm9kZSBvZiB0aGlzIHN1YiBleHByZXNzaW9uLiAgKi8KKyAgICAgIGlmIChyZWdfbnVtIDwgbm1hdGNoKQorCXsKKwkgIHBtYXRjaFtyZWdfbnVtXS5ybV9zbyA9IGN1cl9pZHg7CisJICBwbWF0Y2hbcmVnX251bV0ucm1fZW8gPSAtMTsKKwl9CisgICAgfQorICBlbHNlIGlmICh0eXBlID09IE9QX0NMT1NFX1NVQkVYUCkKKyAgICB7CisgICAgICBpbnQgcmVnX251bSA9IGRmYS0+bm9kZXNbY3VyX25vZGVdLm9wci5pZHggKyAxOworICAgICAgaWYgKHJlZ19udW0gPCBubWF0Y2gpCisJeworCSAgLyogV2UgYXJlIGF0IHRoZSBsYXN0IG5vZGUgb2YgdGhpcyBzdWIgZXhwcmVzc2lvbi4gICovCisJICBpZiAocG1hdGNoW3JlZ19udW1dLnJtX3NvIDwgY3VyX2lkeCkKKwkgICAgeworCSAgICAgIHBtYXRjaFtyZWdfbnVtXS5ybV9lbyA9IGN1cl9pZHg7CisJICAgICAgLyogVGhpcyBpcyBhIG5vbi1lbXB0eSBtYXRjaCBvciB3ZSBhcmUgbm90IGluc2lkZSBhbiBvcHRpb25hbAorCQkgc3ViZXhwcmVzc2lvbi4gIEFjY2VwdCB0aGlzIHJpZ2h0IGF3YXkuICAqLworCSAgICAgIG1lbWNweSAocHJldl9pZHhfbWF0Y2gsIHBtYXRjaCwgc2l6ZW9mIChyZWdtYXRjaF90KSAqIG5tYXRjaCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlXS5vcHRfc3ViZXhwCisJCSAgJiYgcHJldl9pZHhfbWF0Y2hbcmVnX251bV0ucm1fc28gIT0gLTEpCisJCS8qIFdlIHRyYW5zaXRlZCB0aHJvdWdoIGFuIGVtcHR5IG1hdGNoIGZvciBhbiBvcHRpb25hbAorCQkgICBzdWJleHByZXNzaW9uLCBsaWtlIChhPykqLCBhbmQgdGhpcyBpcyBub3QgdGhlIHN1YmV4cCdzCisJCSAgIGZpcnN0IG1hdGNoLiAgQ29weSBiYWNrIHRoZSBvbGQgY29udGVudCBvZiB0aGUgcmVnaXN0ZXJzCisJCSAgIHNvIHRoYXQgbWF0Y2hlcyBvZiBhbiBpbm5lciBzdWJleHByZXNzaW9uIGFyZSB1bmRvbmUgYXMKKwkJICAgd2VsbCwgbGlrZSBpbiAoKGE/KSkqLiAgKi8KKwkJbWVtY3B5IChwbWF0Y2gsIHByZXZfaWR4X21hdGNoLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbm1hdGNoKTsKKwkgICAgICBlbHNlCisJCS8qIFdlIGNvbXBsZXRlZCBhIHN1YmV4cHJlc3Npb24sIGJ1dCBpdCBtYXkgYmUgcGFydCBvZgorCQkgICBhbiBvcHRpb25hbCBvbmUsIHNvIGRvIG5vdCB1cGRhdGUgUFJFVl9JRFhfTUFUQ0guICAqLworCQlwbWF0Y2hbcmVnX251bV0ucm1fZW8gPSBjdXJfaWR4OworCSAgICB9CisJfQorICAgIH0KK30KKworLyogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIFNUQVRFX0xPRyBmcm9tIHRoZSBTQ1RYLT5sYXN0X3N0cl9pZHggdG8gMAorICAgYW5kIHNpZnQgdGhlIG5vZGVzIGluIGVhY2ggc3RhdGVzIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzLgorICAgVXBkYXRlZCBzdGF0ZV9sb2cgd2lsbCBiZSB3cm90ZSB0byBTVEFURV9MT0cuCisKKyAgIFJ1bGVzOiBXZSB0aHJvdyBhd2F5IHRoZSBOb2RlIGBhJyBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFhdIGlmLi4uCisgICAgIDEuIFdoZW4gU1RSX0lEWCA9PSBNQVRDSF9MQVNUKHRoZSBsYXN0IGluZGV4IGluIHRoZSBzdGF0ZV9sb2cpOgorCUlmIGBhJyBpc24ndCB0aGUgTEFTVF9OT0RFIGFuZCBgYScgY2FuJ3QgZXBzaWxvbiB0cmFuc2l0IHRvCisJdGhlIExBU1RfTk9ERSwgd2UgdGhyb3cgYXdheSB0aGUgbm9kZSBgYScuCisgICAgIDIuIFdoZW4gMCA8PSBTVFJfSURYIDwgTUFUQ0hfTEFTVCBhbmQgYGEnIGFjY2VwdHMKKwlzdHJpbmcgYHMnIGFuZCB0cmFuc2l0IHRvIGBiJzoKKwlpLiBJZiAnYicgaXNuJ3QgaW4gdGhlIFNUQVRFX0xPR1tTVFJfSURYK3N0cmxlbigncycpXSwgd2UgdGhyb3cKKwkgICBhd2F5IHRoZSBub2RlIGBhJy4KKwlpaS4gSWYgJ2InIGlzIGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWCtzdHJsZW4oJ3MnKV0gYnV0ICdiJyBpcworCSAgICB0aHJvd24gYXdheSwgd2UgdGhyb3cgYXdheSB0aGUgbm9kZSBgYScuCisgICAgIDMuIFdoZW4gMCA8PSBTVFJfSURYIDwgTUFUQ0hfTEFTVCBhbmQgJ2EnIGVwc2lsb24gdHJhbnNpdCB0byAnYic6CisJaS4gSWYgJ2InIGlzbid0IGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWF0sIHdlIHRocm93IGF3YXkgdGhlCisJICAgbm9kZSBgYScuCisJaWkuIElmICdiJyBpcyBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFhdIGJ1dCAnYicgaXMgdGhyb3duIGF3YXksCisJICAgIHdlIHRocm93IGF3YXkgdGhlIG5vZGUgYGEnLiAgKi8KKworI2RlZmluZSBTVEFURV9OT0RFX0NPTlRBSU5TKHN0YXRlLG5vZGUpIFwKKyAgKChzdGF0ZSkgIT0gTlVMTCAmJiByZV9ub2RlX3NldF9jb250YWlucyAoJihzdGF0ZSktPm5vZGVzLCBub2RlKSkKKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitzaWZ0X3N0YXRlc19iYWNrd2FyZCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBudWxsX2NudCA9IDA7CisgIGludCBzdHJfaWR4ID0gc2N0eC0+bGFzdF9zdHJfaWR4OworICByZV9ub2RlX3NldCBjdXJfZGVzdDsKKworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwgJiYgbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdICE9IE5VTEwpOworI2VuZGlmCisKKyAgLyogQnVpbGQgc2lmdGVkIHN0YXRlX2xvZ1tzdHJfaWR4XS4gIEl0IGhhcyB0aGUgbm9kZXMgd2hpY2ggY2FuIGVwc2lsb24KKyAgICAgdHJhbnNpdCB0byB0aGUgbGFzdF9ub2RlIGFuZCB0aGUgbGFzdF9ub2RlIGl0c2VsZi4gICovCisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoJmN1cl9kZXN0LCBzY3R4LT5sYXN0X25vZGUpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgZXJyID0gdXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUgKG1jdHgsIHNjdHgsIHN0cl9pZHgsICZjdXJfZGVzdCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIGZyZWVfcmV0dXJuOworCisgIC8qIFRoZW4gY2hlY2sgZWFjaCBzdGF0ZXMgaW4gdGhlIHN0YXRlX2xvZy4gICovCisgIHdoaWxlIChzdHJfaWR4ID4gMCkKKyAgICB7CisgICAgICAvKiBVcGRhdGUgY291bnRlcnMuICAqLworICAgICAgbnVsbF9jbnQgPSAoc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4XSA9PSBOVUxMKSA/IG51bGxfY250ICsgMSA6IDA7CisgICAgICBpZiAobnVsbF9jbnQgPiBtY3R4LT5tYXhfbWJfZWxlbV9sZW4pCisJeworCSAgbWVtc2V0IChzY3R4LT5zaWZ0ZWRfc3RhdGVzLCAnXDAnLAorCQkgIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSAqIHN0cl9pZHgpOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmN1cl9kZXN0KTsKKwkgIHJldHVybiBSRUdfTk9FUlJPUjsKKwl9CisgICAgICByZV9ub2RlX3NldF9lbXB0eSAoJmN1cl9kZXN0KTsKKyAgICAgIC0tc3RyX2lkeDsKKworICAgICAgaWYgKG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSkKKwl7CisJICBlcnIgPSBidWlsZF9zaWZ0ZWRfc3RhdGVzIChtY3R4LCBzY3R4LCBzdHJfaWR4LCAmY3VyX2Rlc3QpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCX0KKworICAgICAgLyogQWRkIGFsbCB0aGUgbm9kZXMgd2hpY2ggc2F0aXNmeSB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisJIC0gSXQgY2FuIGVwc2lsb24gdHJhbnNpdCB0byBhIG5vZGUgaW4gQ1VSX0RFU1QuCisJIC0gSXQgaXMgaW4gQ1VSX1NSQy4KKwkgQW5kIHVwZGF0ZSBzdGF0ZV9sb2cuICAqLworICAgICAgZXJyID0gdXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUgKG1jdHgsIHNjdHgsIHN0cl9pZHgsICZjdXJfZGVzdCk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKyAgICB9CisgIGVyciA9IFJFR19OT0VSUk9SOworIGZyZWVfcmV0dXJuOgorICByZV9ub2RlX3NldF9mcmVlICgmY3VyX2Rlc3QpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2J1aWxkX3NpZnRlZF9zdGF0ZXMgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCSAgICAgaW50IHN0cl9pZHgsIHJlX25vZGVfc2V0ICpjdXJfZGVzdCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgY29uc3QgcmVfbm9kZV9zZXQgKmN1cl9zcmMgPSAmbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdLT5ub25fZXBzX25vZGVzOworICBpbnQgaTsKKworICAvKiBUaGVuIGJ1aWxkIHRoZSBuZXh0IHNpZnRlZCBzdGF0ZS4KKyAgICAgV2UgYnVpbGQgdGhlIG5leHQgc2lmdGVkIHN0YXRlIG9uIGBjdXJfZGVzdCcsIGFuZCB1cGRhdGUKKyAgICAgYHNpZnRlZF9zdGF0ZXNbc3RyX2lkeF0nIHdpdGggYGN1cl9kZXN0Jy4KKyAgICAgTm90ZToKKyAgICAgYGN1cl9kZXN0JyBpcyB0aGUgc2lmdGVkIHN0YXRlIGZyb20gYHN0YXRlX2xvZ1tzdHJfaWR4ICsgMV0nLgorICAgICBgY3VyX3NyYycgcG9pbnRzIHRoZSBub2RlX3NldCBvZiB0aGUgb2xkIGBzdGF0ZV9sb2dbc3RyX2lkeF0nCisgICAgICh3aXRoIHRoZSBlcHNpbG9uIG5vZGVzIHByZS1maWx0ZXJlZCBvdXQpLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGN1cl9zcmMtPm5lbGVtOyBpKyspCisgICAgeworICAgICAgaW50IHByZXZfbm9kZSA9IGN1cl9zcmMtPmVsZW1zW2ldOworICAgICAgaW50IG5hY2NlcHRlZCA9IDA7CisgICAgICBpbnQgcmV0OworCisjaWZkZWYgREVCVUcKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1twcmV2X25vZGVdLnR5cGU7CisgICAgICBhc3NlcnQgKCFJU19FUFNJTE9OX05PREUgKHR5cGUpKTsKKyNlbmRpZgorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICAvKiBJZiB0aGUgbm9kZSBtYXkgYWNjZXB0IGBtdWx0aSBieXRlJy4gICovCisgICAgICBpZiAoZGZhLT5ub2Rlc1twcmV2X25vZGVdLmFjY2VwdF9tYikKKwluYWNjZXB0ZWQgPSBzaWZ0X3N0YXRlc19pdGVyX21iIChtY3R4LCBzY3R4LCBwcmV2X25vZGUsCisJCQkJCSBzdHJfaWR4LCBzY3R4LT5sYXN0X3N0cl9pZHgpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgICAgIC8qIFdlIGRvbid0IGNoZWNrIGJhY2tyZWZlcmVuY2VzIGhlcmUuCisJIFNlZSB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSgpLiAgKi8KKyAgICAgIGlmICghbmFjY2VwdGVkCisJICAmJiBjaGVja19ub2RlX2FjY2VwdCAobWN0eCwgZGZhLT5ub2RlcyArIHByZXZfbm9kZSwgc3RyX2lkeCkKKwkgICYmIFNUQVRFX05PREVfQ09OVEFJTlMgKHNjdHgtPnNpZnRlZF9zdGF0ZXNbc3RyX2lkeCArIDFdLAorCQkJCSAgZGZhLT5uZXh0c1twcmV2X25vZGVdKSkKKwluYWNjZXB0ZWQgPSAxOworCisgICAgICBpZiAobmFjY2VwdGVkID09IDApCisJY29udGludWU7CisKKyAgICAgIGlmIChzY3R4LT5saW1pdHMubmVsZW0pCisJeworCSAgaW50IHRvX2lkeCA9IHN0cl9pZHggKyBuYWNjZXB0ZWQ7CisJICBpZiAoY2hlY2tfZHN0X2xpbWl0cyAobWN0eCwgJnNjdHgtPmxpbWl0cywKKwkJCQlkZmEtPm5leHRzW3ByZXZfbm9kZV0sIHRvX2lkeCwKKwkJCQlwcmV2X25vZGUsIHN0cl9pZHgpKQorCSAgICBjb250aW51ZTsKKwl9CisgICAgICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGN1cl9kZXN0LCBwcmV2X25vZGUpOworICAgICAgaWYgKEJFIChyZXQgPT0gLTEsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2NsZWFuX3N0YXRlX2xvZ19pZl9uZWVkZWQgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG5leHRfc3RhdGVfbG9nX2lkeCkKK3sKKyAgaW50IHRvcCA9IG1jdHgtPnN0YXRlX2xvZ190b3A7CisKKyAgaWYgKG5leHRfc3RhdGVfbG9nX2lkeCA+PSBtY3R4LT5pbnB1dC5idWZzX2xlbgorICAgICAgfHwgKG5leHRfc3RhdGVfbG9nX2lkeCA+PSBtY3R4LT5pbnB1dC52YWxpZF9sZW4KKwkgICYmIG1jdHgtPmlucHV0LnZhbGlkX2xlbiA8IG1jdHgtPmlucHV0LmxlbikpCisgICAgeworICAgICAgcmVnX2VycmNvZGVfdCBlcnI7CisgICAgICBlcnIgPSBleHRlbmRfYnVmZmVycyAobWN0eCk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisKKyAgaWYgKHRvcCA8IG5leHRfc3RhdGVfbG9nX2lkeCkKKyAgICB7CisgICAgICBtZW1zZXQgKG1jdHgtPnN0YXRlX2xvZyArIHRvcCArIDEsICdcMCcsCisJICAgICAgc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopICogKG5leHRfc3RhdGVfbG9nX2lkeCAtIHRvcCkpOworICAgICAgbWN0eC0+c3RhdGVfbG9nX3RvcCA9IG5leHRfc3RhdGVfbG9nX2lkeDsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCittZXJnZV9zdGF0ZV9hcnJheSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfZGZhc3RhdGVfdCAqKmRzdCwKKwkJICAgcmVfZGZhc3RhdGVfdCAqKnNyYywgaW50IG51bSkKK3sKKyAgaW50IHN0X2lkeDsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGZvciAoc3RfaWR4ID0gMDsgc3RfaWR4IDwgbnVtOyArK3N0X2lkeCkKKyAgICB7CisgICAgICBpZiAoZHN0W3N0X2lkeF0gPT0gTlVMTCkKKwlkc3Rbc3RfaWR4XSA9IHNyY1tzdF9pZHhdOworICAgICAgZWxzZSBpZiAoc3JjW3N0X2lkeF0gIT0gTlVMTCkKKwl7CisJICByZV9ub2RlX3NldCBtZXJnZWRfc2V0OworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAoJm1lcmdlZF9zZXQsICZkc3Rbc3RfaWR4XS0+bm9kZXMsCisJCQkJCSZzcmNbc3RfaWR4XS0+bm9kZXMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCSAgZHN0W3N0X2lkeF0gPSByZV9hY3F1aXJlX3N0YXRlICgmZXJyLCBkZmEsICZtZXJnZWRfc2V0KTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZtZXJnZWRfc2V0KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgordXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwgaW50IHN0cl9pZHgsCisJCQkgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzOworICBjYW5kaWRhdGVzID0gKChtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0gPT0gTlVMTCkgPyBOVUxMCisJCTogJm1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XS0+bm9kZXMpOworCisgIGlmIChkZXN0X25vZGVzLT5uZWxlbSA9PSAwKQorICAgIHNjdHgtPnNpZnRlZF9zdGF0ZXNbc3RyX2lkeF0gPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgaWYgKGNhbmRpZGF0ZXMpCisJeworCSAgLyogQXQgZmlyc3QsIGFkZCB0aGUgbm9kZXMgd2hpY2ggY2FuIGVwc2lsb24gdHJhbnNpdCB0byBhIG5vZGUgaW4KKwkgICAgIERFU1RfTk9ERS4gICovCisJICBlcnIgPSBhZGRfZXBzaWxvbl9zcmNfbm9kZXMgKGRmYSwgZGVzdF9ub2RlcywgY2FuZGlkYXRlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisKKwkgIC8qIFRoZW4sIGNoZWNrIHRoZSBsaW1pdGF0aW9ucyBpbiB0aGUgY3VycmVudCBzaWZ0X2NvbnRleHQuICAqLworCSAgaWYgKHNjdHgtPmxpbWl0cy5uZWxlbSkKKwkgICAgeworCSAgICAgIGVyciA9IGNoZWNrX3N1YmV4cF9saW1pdHMgKGRmYSwgZGVzdF9ub2RlcywgY2FuZGlkYXRlcywgJnNjdHgtPmxpbWl0cywKKwkJCQkJIG1jdHgtPmJrcmVmX2VudHMsIHN0cl9pZHgpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKworICAgICAgc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4XSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwgZGVzdF9ub2Rlcyk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisKKyAgaWYgKGNhbmRpZGF0ZXMgJiYgbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdLT5oYXNfYmFja3JlZikKKyAgICB7CisgICAgICBlcnIgPSBzaWZ0X3N0YXRlc19ia3JlZiAobWN0eCwgc2N0eCwgc3RyX2lkeCwgY2FuZGlkYXRlcyk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCithZGRfZXBzaWxvbl9zcmNfbm9kZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkgICAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisgIGludCBpOworCisgIHJlX2RmYXN0YXRlX3QgKnN0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCBkZXN0X25vZGVzKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBlcnI7CisKKyAgaWYgKCFzdGF0ZS0+aW52ZWNsb3N1cmUuYWxsb2MpCisgICAgeworICAgICAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZzdGF0ZS0+aW52ZWNsb3N1cmUsIGRlc3Rfbm9kZXMtPm5lbGVtKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXN0X25vZGVzLT5uZWxlbTsgaSsrKQorCXsKKwkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmc3RhdGUtPmludmVjbG9zdXJlLAorCQkJCSAgIGRmYS0+aW52ZWNsb3N1cmVzICsgZGVzdF9ub2Rlcy0+ZWxlbXNbaV0pOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgfQorICByZXR1cm4gcmVfbm9kZV9zZXRfYWRkX2ludGVyc2VjdCAoZGVzdF9ub2RlcywgY2FuZGlkYXRlcywKKwkJCQkgICAgJnN0YXRlLT5pbnZlY2xvc3VyZSk7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorc3ViX2Vwc2lsb25fc3JjX25vZGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZSwgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCSAgICAgICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcykKK3sKKyAgICBpbnQgZWNsX2lkeDsKKyAgICByZWdfZXJyY29kZV90IGVycjsKKyAgICByZV9ub2RlX3NldCAqaW52X2VjbG9zdXJlID0gZGZhLT5pbnZlY2xvc3VyZXMgKyBub2RlOworICAgIHJlX25vZGVfc2V0IGV4Y2VwdF9ub2RlczsKKyAgICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmZXhjZXB0X25vZGVzKTsKKyAgICBmb3IgKGVjbF9pZHggPSAwOyBlY2xfaWR4IDwgaW52X2VjbG9zdXJlLT5uZWxlbTsgKytlY2xfaWR4KQorICAgICAgeworCWludCBjdXJfbm9kZSA9IGludl9lY2xvc3VyZS0+ZWxlbXNbZWNsX2lkeF07CisJaWYgKGN1cl9ub2RlID09IG5vZGUpCisJICBjb250aW51ZTsKKwlpZiAoSVNfRVBTSUxPTl9OT0RFIChkZmEtPm5vZGVzW2N1cl9ub2RlXS50eXBlKSkKKwkgIHsKKwkgICAgaW50IGVkc3QxID0gZGZhLT5lZGVzdHNbY3VyX25vZGVdLmVsZW1zWzBdOworCSAgICBpbnQgZWRzdDIgPSAoKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA+IDEpCisJCQkgPyBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMV0gOiAtMSk7CisJICAgIGlmICgoIXJlX25vZGVfc2V0X2NvbnRhaW5zIChpbnZfZWNsb3N1cmUsIGVkc3QxKQorCQkgJiYgcmVfbm9kZV9zZXRfY29udGFpbnMgKGRlc3Rfbm9kZXMsIGVkc3QxKSkKKwkJfHwgKGVkc3QyID4gMAorCQkgICAgJiYgIXJlX25vZGVfc2V0X2NvbnRhaW5zIChpbnZfZWNsb3N1cmUsIGVkc3QyKQorCQkgICAgJiYgcmVfbm9kZV9zZXRfY29udGFpbnMgKGRlc3Rfbm9kZXMsIGVkc3QyKSkpCisJICAgICAgeworCQllcnIgPSByZV9ub2RlX3NldF9hZGRfaW50ZXJzZWN0ICgmZXhjZXB0X25vZGVzLCBjYW5kaWRhdGVzLAorCQkJCQkJIGRmYS0+aW52ZWNsb3N1cmVzICsgY3VyX25vZGUpOworCQlpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCSAgeworCQkgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmV4Y2VwdF9ub2Rlcyk7CisJCSAgICByZXR1cm4gZXJyOworCQkgIH0KKwkgICAgICB9CisJICB9CisgICAgICB9CisgICAgZm9yIChlY2xfaWR4ID0gMDsgZWNsX2lkeCA8IGludl9lY2xvc3VyZS0+bmVsZW07ICsrZWNsX2lkeCkKKyAgICAgIHsKKwlpbnQgY3VyX25vZGUgPSBpbnZfZWNsb3N1cmUtPmVsZW1zW2VjbF9pZHhdOworCWlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKCZleGNlcHRfbm9kZXMsIGN1cl9ub2RlKSkKKwkgIHsKKwkgICAgaW50IGlkeCA9IHJlX25vZGVfc2V0X2NvbnRhaW5zIChkZXN0X25vZGVzLCBjdXJfbm9kZSkgLSAxOworCSAgICByZV9ub2RlX3NldF9yZW1vdmVfYXQgKGRlc3Rfbm9kZXMsIGlkeCk7CisJICB9CisgICAgICB9CisgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmV4Y2VwdF9ub2Rlcyk7CisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfZHN0X2xpbWl0cyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9ub2RlX3NldCAqbGltaXRzLAorCQkgIGludCBkc3Rfbm9kZSwgaW50IGRzdF9pZHgsIGludCBzcmNfbm9kZSwgaW50IHNyY19pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBsaW1faWR4LCBzcmNfcG9zLCBkc3RfcG9zOworCisgIGludCBkc3RfYmtyZWZfaWR4ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgZHN0X2lkeCk7CisgIGludCBzcmNfYmtyZWZfaWR4ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgc3JjX2lkeCk7CisgIGZvciAobGltX2lkeCA9IDA7IGxpbV9pZHggPCBsaW1pdHMtPm5lbGVtOyArK2xpbV9pZHgpCisgICAgeworICAgICAgaW50IHN1YmV4cF9pZHg7CisgICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50OworICAgICAgZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGxpbWl0cy0+ZWxlbXNbbGltX2lkeF07CisgICAgICBzdWJleHBfaWR4ID0gZGZhLT5ub2Rlc1tlbnQtPm5vZGVdLm9wci5pZHg7CisKKyAgICAgIGRzdF9wb3MgPSBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zIChtY3R4LCBsaW1pdHMtPmVsZW1zW2xpbV9pZHhdLAorCQkJCQkgICBzdWJleHBfaWR4LCBkc3Rfbm9kZSwgZHN0X2lkeCwKKwkJCQkJICAgZHN0X2JrcmVmX2lkeCk7CisgICAgICBzcmNfcG9zID0gY2hlY2tfZHN0X2xpbWl0c19jYWxjX3BvcyAobWN0eCwgbGltaXRzLT5lbGVtc1tsaW1faWR4XSwKKwkJCQkJICAgc3ViZXhwX2lkeCwgc3JjX25vZGUsIHNyY19pZHgsCisJCQkJCSAgIHNyY19ia3JlZl9pZHgpOworCisgICAgICAvKiBJbiBjYXNlIG9mOgorCSA8c3JjPiA8ZHN0PiAoIDxzdWJleHA+ICkKKwkgKCA8c3ViZXhwPiApIDxzcmM+IDxkc3Q+CisJICggPHN1YmV4cDE+IDxzcmM+IDxzdWJleHAyPiA8ZHN0PiA8c3ViZXhwMz4gKSAgKi8KKyAgICAgIGlmIChzcmNfcG9zID09IGRzdF9wb3MpCisJY29udGludWU7IC8qIFRoaXMgaXMgdW5yZWxhdGVkIGxpbWl0YXRpb24uICAqLworICAgICAgZWxzZQorCXJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGJvdW5kYXJpZXMsCisJCQkgICAgIGludCBzdWJleHBfaWR4LCBpbnQgZnJvbV9ub2RlLCBpbnQgYmtyZWZfaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBjb25zdCByZV9ub2RlX3NldCAqZWNsb3N1cmVzID0gZGZhLT5lY2xvc3VyZXMgKyBmcm9tX25vZGU7CisgIGludCBub2RlX2lkeDsKKworICAvKiBFbHNlLCB3ZSBhcmUgb24gdGhlIGJvdW5kYXJ5OiBleGFtaW5lIHRoZSBub2RlcyBvbiB0aGUgZXBzaWxvbgorICAgICBjbG9zdXJlLiAgKi8KKyAgZm9yIChub2RlX2lkeCA9IDA7IG5vZGVfaWR4IDwgZWNsb3N1cmVzLT5uZWxlbTsgKytub2RlX2lkeCkKKyAgICB7CisgICAgICBpbnQgbm9kZSA9IGVjbG9zdXJlcy0+ZWxlbXNbbm9kZV9pZHhdOworICAgICAgc3dpdGNoIChkZmEtPm5vZGVzW25vZGVdLnR5cGUpCisJeworCWNhc2UgT1BfQkFDS19SRUY6CisJICBpZiAoYmtyZWZfaWR4ICE9IC0xKQorCSAgICB7CisJICAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudCA9IG1jdHgtPmJrcmVmX2VudHMgKyBia3JlZl9pZHg7CisJICAgICAgZG8KKwkJeworCQkgIGludCBkc3QsIGNwb3M7CisKKwkJICBpZiAoZW50LT5ub2RlICE9IG5vZGUpCisJCSAgICBjb250aW51ZTsKKworCQkgIGlmIChzdWJleHBfaWR4IDwgQklUU0VUX1dPUkRfQklUUworCQkgICAgICAmJiAhKGVudC0+ZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcAorCQkJICAgJiAoKGJpdHNldF93b3JkX3QpIDEgPDwgc3ViZXhwX2lkeCkpKQorCQkgICAgY29udGludWU7CisKKwkJICAvKiBSZWN1cnNlIHRyeWluZyB0byByZWFjaCB0aGUgT1BfT1BFTl9TVUJFWFAgYW5kCisJCSAgICAgT1BfQ0xPU0VfU1VCRVhQIGNhc2VzIGJlbG93LiAgQnV0LCBpZiB0aGUKKwkJICAgICBkZXN0aW5hdGlvbiBub2RlIGlzIHRoZSBzYW1lIG5vZGUgYXMgdGhlIHNvdXJjZQorCQkgICAgIG5vZGUsIGRvbid0IHJlY3Vyc2UgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhbgorCQkgICAgIGluZmluaXRlIGxvb3A6IGEgcmVnZXggdGhhdCBleGhpYml0cyB0aGlzIGJlaGF2aW9yCisJCSAgICAgaXMgKClcMSpcMSogICovCisJCSAgZHN0ID0gZGZhLT5lZGVzdHNbbm9kZV0uZWxlbXNbMF07CisJCSAgaWYgKGRzdCA9PSBmcm9tX25vZGUpCisJCSAgICB7CisJCSAgICAgIGlmIChib3VuZGFyaWVzICYgMSkKKwkJCXJldHVybiAtMTsKKwkJICAgICAgZWxzZSAvKiBpZiAoYm91bmRhcmllcyAmIDIpICovCisJCQlyZXR1cm4gMDsKKwkJICAgIH0KKworCQkgIGNwb3MgPQorCQkgICAgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIChtY3R4LCBib3VuZGFyaWVzLCBzdWJleHBfaWR4LAorCQkJCQkJIGRzdCwgYmtyZWZfaWR4KTsKKwkJICBpZiAoY3BvcyA9PSAtMSAvKiAmJiAoYm91bmRhcmllcyAmIDEpICovKQorCQkgICAgcmV0dXJuIC0xOworCQkgIGlmIChjcG9zID09IDAgJiYgKGJvdW5kYXJpZXMgJiAyKSkKKwkJICAgIHJldHVybiAwOworCisJCSAgaWYgKHN1YmV4cF9pZHggPCBCSVRTRVRfV09SRF9CSVRTKQorCQkgICAgZW50LT5lcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwCisJCSAgICAgICY9IH4oKGJpdHNldF93b3JkX3QpIDEgPDwgc3ViZXhwX2lkeCk7CisJCX0KKwkgICAgICB3aGlsZSAoZW50KystPm1vcmUpOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgT1BfT1BFTl9TVUJFWFA6CisJICBpZiAoKGJvdW5kYXJpZXMgJiAxKSAmJiBzdWJleHBfaWR4ID09IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkKKwkgICAgcmV0dXJuIC0xOworCSAgYnJlYWs7CisKKwljYXNlIE9QX0NMT1NFX1NVQkVYUDoKKwkgIGlmICgoYm91bmRhcmllcyAmIDIpICYmIHN1YmV4cF9pZHggPT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KQorCSAgICByZXR1cm4gMDsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICByZXR1cm4gKGJvdW5kYXJpZXMgJiAyKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfZHN0X2xpbWl0c19jYWxjX3BvcyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbGltaXQsCisJCQkgICBpbnQgc3ViZXhwX2lkeCwgaW50IGZyb21fbm9kZSwgaW50IHN0cl9pZHgsCisJCQkgICBpbnQgYmtyZWZfaWR4KQoreworICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqbGltID0gbWN0eC0+YmtyZWZfZW50cyArIGxpbWl0OworICBpbnQgYm91bmRhcmllczsKKworICAvKiBJZiB3ZSBhcmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHN1YmV4cHJlc3Npb24sIHJldHVybiAtMSBvciAxLiAgKi8KKyAgaWYgKHN0cl9pZHggPCBsaW0tPnN1YmV4cF9mcm9tKQorICAgIHJldHVybiAtMTsKKworICBpZiAobGltLT5zdWJleHBfdG8gPCBzdHJfaWR4KQorICAgIHJldHVybiAxOworCisgIC8qIElmIHdlIGFyZSB3aXRoaW4gdGhlIHN1YmV4cHJlc3Npb24sIHJldHVybiAwLiAgKi8KKyAgYm91bmRhcmllcyA9IChzdHJfaWR4ID09IGxpbS0+c3ViZXhwX2Zyb20pOworICBib3VuZGFyaWVzIHw9IChzdHJfaWR4ID09IGxpbS0+c3ViZXhwX3RvKSA8PCAxOworICBpZiAoYm91bmRhcmllcyA9PSAwKQorICAgIHJldHVybiAwOworCisgIC8qIEVsc2UsIGV4YW1pbmUgZXBzaWxvbiBjbG9zdXJlLiAgKi8KKyAgcmV0dXJuIGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3NfMSAobWN0eCwgYm91bmRhcmllcywgc3ViZXhwX2lkeCwKKwkJCQkgICAgICBmcm9tX25vZGUsIGJrcmVmX2lkeCk7Cit9CisKKy8qIENoZWNrIHRoZSBsaW1pdGF0aW9ucyBvZiBzdWIgZXhwcmVzc2lvbnMgTElNSVRTLCBhbmQgcmVtb3ZlIHRoZSBub2RlcworICAgd2hpY2ggYXJlIGFnYWluc3QgbGltaXRhdGlvbnMgZnJvbSBERVNUX05PREVTLiAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX3N1YmV4cF9saW1pdHMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkgICAgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzLCByZV9ub2RlX3NldCAqbGltaXRzLAorCQkgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnRzLCBpbnQgc3RyX2lkeCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBub2RlX2lkeCwgbGltX2lkeDsKKworICBmb3IgKGxpbV9pZHggPSAwOyBsaW1faWR4IDwgbGltaXRzLT5uZWxlbTsgKytsaW1faWR4KQorICAgIHsKKyAgICAgIGludCBzdWJleHBfaWR4OworICAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudDsKKyAgICAgIGVudCA9IGJrcmVmX2VudHMgKyBsaW1pdHMtPmVsZW1zW2xpbV9pZHhdOworCisgICAgICBpZiAoc3RyX2lkeCA8PSBlbnQtPnN1YmV4cF9mcm9tIHx8IGVudC0+c3RyX2lkeCA8IHN0cl9pZHgpCisJY29udGludWU7IC8qIFRoaXMgaXMgdW5yZWxhdGVkIGxpbWl0YXRpb24uICAqLworCisgICAgICBzdWJleHBfaWR4ID0gZGZhLT5ub2Rlc1tlbnQtPm5vZGVdLm9wci5pZHg7CisgICAgICBpZiAoZW50LT5zdWJleHBfdG8gPT0gc3RyX2lkeCkKKwl7CisJICBpbnQgb3BzX25vZGUgPSAtMTsKKwkgIGludCBjbHNfbm9kZSA9IC0xOworCSAgZm9yIChub2RlX2lkeCA9IDA7IG5vZGVfaWR4IDwgZGVzdF9ub2Rlcy0+bmVsZW07ICsrbm9kZV9pZHgpCisJICAgIHsKKwkgICAgICBpbnQgbm9kZSA9IGRlc3Rfbm9kZXMtPmVsZW1zW25vZGVfaWR4XTsKKwkgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKwkgICAgICBpZiAodHlwZSA9PSBPUF9PUEVOX1NVQkVYUAorCQkgICYmIHN1YmV4cF9pZHggPT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KQorCQlvcHNfbm9kZSA9IG5vZGU7CisJICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9DTE9TRV9TVUJFWFAKKwkJICAgICAgICYmIHN1YmV4cF9pZHggPT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KQorCQljbHNfbm9kZSA9IG5vZGU7CisJICAgIH0KKworCSAgLyogQ2hlY2sgdGhlIGxpbWl0YXRpb24gb2YgdGhlIG9wZW4gc3ViZXhwcmVzc2lvbi4gICovCisJICAvKiBOb3RlIHRoYXQgKGVudC0+c3ViZXhwX3RvID0gc3RyX2lkeCAhPSBlbnQtPnN1YmV4cF9mcm9tKS4gICovCisJICBpZiAob3BzX25vZGUgPj0gMCkKKwkgICAgeworCSAgICAgIGVyciA9IHN1Yl9lcHNpbG9uX3NyY19ub2RlcyAoZGZhLCBvcHNfbm9kZSwgZGVzdF9ub2RlcywKKwkJCQkJICAgY2FuZGlkYXRlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gZXJyOworCSAgICB9CisKKwkgIC8qIENoZWNrIHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBjbG9zZSBzdWJleHByZXNzaW9uLiAgKi8KKwkgIGlmIChjbHNfbm9kZSA+PSAwKQorCSAgICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBkZXN0X25vZGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKwkgICAgICB7CisJCWludCBub2RlID0gZGVzdF9ub2Rlcy0+ZWxlbXNbbm9kZV9pZHhdOworCQlpZiAoIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkZmEtPmludmVjbG9zdXJlcyArIG5vZGUsCisJCQkJCSAgIGNsc19ub2RlKQorCQkgICAgJiYgIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkZmEtPmVjbG9zdXJlcyArIG5vZGUsCisJCQkJCSAgICAgIGNsc19ub2RlKSkKKwkJICB7CisJCSAgICAvKiBJdCBpcyBhZ2FpbnN0IHRoaXMgbGltaXRhdGlvbi4KKwkJICAgICAgIFJlbW92ZSBpdCBmb3JtIHRoZSBjdXJyZW50IHNpZnRlZCBzdGF0ZS4gICovCisJCSAgICBlcnIgPSBzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGRmYSwgbm9kZSwgZGVzdF9ub2RlcywKKwkJCQkJCSBjYW5kaWRhdGVzKTsKKwkJICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgICAgcmV0dXJuIGVycjsKKwkJICAgIC0tbm9kZV9pZHg7CisJCSAgfQorCSAgICAgIH0KKwl9CisgICAgICBlbHNlIC8qIChlbnQtPnN1YmV4cF90byAhPSBzdHJfaWR4KSAgKi8KKwl7CisJICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBkZXN0X25vZGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKwkgICAgeworCSAgICAgIGludCBub2RlID0gZGVzdF9ub2Rlcy0+ZWxlbXNbbm9kZV9pZHhdOworCSAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworCSAgICAgIGlmICh0eXBlID09IE9QX0NMT1NFX1NVQkVYUCB8fCB0eXBlID09IE9QX09QRU5fU1VCRVhQKQorCQl7CisJCSAgaWYgKHN1YmV4cF9pZHggIT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KQorCQkgICAgY29udGludWU7CisJCSAgLyogSXQgaXMgYWdhaW5zdCB0aGlzIGxpbWl0YXRpb24uCisJCSAgICAgUmVtb3ZlIGl0IGZvcm0gdGhlIGN1cnJlbnQgc2lmdGVkIHN0YXRlLiAgKi8KKwkJICBlcnIgPSBzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGRmYSwgbm9kZSwgZGVzdF9ub2RlcywKKwkJCQkJICAgICAgIGNhbmRpZGF0ZXMpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitzaWZ0X3N0YXRlc19ia3JlZiAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJICAgaW50IHN0cl9pZHgsIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG5vZGVfaWR4LCBub2RlOworICByZV9zaWZ0X2NvbnRleHRfdCBsb2NhbF9zY3R4OworICBpbnQgZmlyc3RfaWR4ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgc3RyX2lkeCk7CisKKyAgaWYgKGZpcnN0X2lkeCA9PSAtMSkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyAgbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzID0gTlVMTDsgLyogTWFyayB0aGF0IGl0IGhhc24ndCBiZWVuIGluaXRpYWxpemVkLiAgKi8KKworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBjYW5kaWRhdGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKyAgICB7CisgICAgICBpbnQgZW5hYmxlZF9pZHg7CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZTsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnRyeTsKKyAgICAgIG5vZGUgPSBjYW5kaWRhdGVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworICAgICAgLyogQXZvaWQgaW5maW5pdGUgbG9vcCBmb3IgdGhlIFJFcyBsaWtlICIoKVwxKyIuICAqLworICAgICAgaWYgKG5vZGUgPT0gc2N0eC0+bGFzdF9ub2RlICYmIHN0cl9pZHggPT0gc2N0eC0+bGFzdF9zdHJfaWR4KQorCWNvbnRpbnVlOworICAgICAgaWYgKHR5cGUgIT0gT1BfQkFDS19SRUYpCisJY29udGludWU7CisKKyAgICAgIGVudHJ5ID0gbWN0eC0+YmtyZWZfZW50cyArIGZpcnN0X2lkeDsKKyAgICAgIGVuYWJsZWRfaWR4ID0gZmlyc3RfaWR4OworICAgICAgZG8KKwl7CisJICBpbnQgc3ViZXhwX2xlbjsKKwkgIGludCB0b19pZHg7CisJICBpbnQgZHN0X25vZGU7CisJICBpbnQgcmV0OworCSAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRlOworCisJICBpZiAoZW50cnktPm5vZGUgIT0gbm9kZSkKKwkgICAgY29udGludWU7CisJICBzdWJleHBfbGVuID0gZW50cnktPnN1YmV4cF90byAtIGVudHJ5LT5zdWJleHBfZnJvbTsKKwkgIHRvX2lkeCA9IHN0cl9pZHggKyBzdWJleHBfbGVuOworCSAgZHN0X25vZGUgPSAoc3ViZXhwX2xlbiA/IGRmYS0+bmV4dHNbbm9kZV0KKwkJICAgICAgOiBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1swXSk7CisKKwkgIGlmICh0b19pZHggPiBzY3R4LT5sYXN0X3N0cl9pZHgKKwkgICAgICB8fCBzY3R4LT5zaWZ0ZWRfc3RhdGVzW3RvX2lkeF0gPT0gTlVMTAorCSAgICAgIHx8ICFTVEFURV9OT0RFX0NPTlRBSU5TIChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3RvX2lkeF0sIGRzdF9ub2RlKQorCSAgICAgIHx8IGNoZWNrX2RzdF9saW1pdHMgKG1jdHgsICZzY3R4LT5saW1pdHMsIG5vZGUsCisJCQkJICAgc3RyX2lkeCwgZHN0X25vZGUsIHRvX2lkeCkpCisJICAgIGNvbnRpbnVlOworCisJICBpZiAobG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzID09IE5VTEwpCisJICAgIHsKKwkgICAgICBsb2NhbF9zY3R4ID0gKnNjdHg7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmbG9jYWxfc2N0eC5saW1pdHMsICZzY3R4LT5saW1pdHMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgbG9jYWxfc2N0eC5sYXN0X25vZGUgPSBub2RlOworCSAgbG9jYWxfc2N0eC5sYXN0X3N0cl9pZHggPSBzdHJfaWR4OworCSAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0ICgmbG9jYWxfc2N0eC5saW1pdHMsIGVuYWJsZWRfaWR4KTsKKwkgIGlmIChCRSAocmV0IDwgMCwgMCkpCisJICAgIHsKKwkgICAgICBlcnIgPSBSRUdfRVNQQUNFOworCSAgICAgIGdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIGN1cl9zdGF0ZSA9IGxvY2FsX3NjdHguc2lmdGVkX3N0YXRlc1tzdHJfaWR4XTsKKwkgIGVyciA9IHNpZnRfc3RhdGVzX2JhY2t3YXJkIChtY3R4LCAmbG9jYWxfc2N0eCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdvdG8gZnJlZV9yZXR1cm47CisJICBpZiAoc2N0eC0+bGltaXRlZF9zdGF0ZXMgIT0gTlVMTCkKKwkgICAgeworCSAgICAgIGVyciA9IG1lcmdlX3N0YXRlX2FycmF5IChkZmEsIHNjdHgtPmxpbWl0ZWRfc3RhdGVzLAorCQkJCSAgICAgICBsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXMsCisJCQkJICAgICAgIHN0cl9pZHggKyAxKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIGxvY2FsX3NjdHguc2lmdGVkX3N0YXRlc1tzdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKwkgIHJlX25vZGVfc2V0X3JlbW92ZSAoJmxvY2FsX3NjdHgubGltaXRzLCBlbmFibGVkX2lkeCk7CisKKwkgIC8qIG1jdHgtPmJrcmVmX2VudHMgbWF5IGhhdmUgY2hhbmdlZCwgcmVsb2FkIHRoZSBwb2ludGVyLiAgKi8KKwkgIGVudHJ5ID0gbWN0eC0+YmtyZWZfZW50cyArIGVuYWJsZWRfaWR4OworCX0KKyAgICAgIHdoaWxlIChlbmFibGVkX2lkeCsrLCBlbnRyeSsrLT5tb3JlKTsKKyAgICB9CisgIGVyciA9IFJFR19OT0VSUk9SOworIGZyZWVfcmV0dXJuOgorICBpZiAobG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzICE9IE5VTEwpCisgICAgeworICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmxvY2FsX3NjdHgubGltaXRzKTsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitzaWZ0X3N0YXRlc19pdGVyX21iIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkgICAgIGludCBub2RlX2lkeCwgaW50IHN0cl9pZHgsIGludCBtYXhfc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IG5hY2NlcHRlZDsKKyAgLyogQ2hlY2sgdGhlIG5vZGUgY2FuIGFjY2VwdCBgbXVsdGkgYnl0ZScuICAqLworICBuYWNjZXB0ZWQgPSBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoZGZhLCBub2RlX2lkeCwgJm1jdHgtPmlucHV0LCBzdHJfaWR4KTsKKyAgaWYgKG5hY2NlcHRlZCA+IDAgJiYgc3RyX2lkeCArIG5hY2NlcHRlZCA8PSBtYXhfc3RyX2lkeCAmJgorICAgICAgIVNUQVRFX05PREVfQ09OVEFJTlMgKHNjdHgtPnNpZnRlZF9zdGF0ZXNbc3RyX2lkeCArIG5hY2NlcHRlZF0sCisJCQkgICAgZGZhLT5uZXh0c1tub2RlX2lkeF0pKQorICAgIC8qIFRoZSBub2RlIGNhbid0IGFjY2VwdCB0aGUgYG11bHRpIGJ5dGUnLCBvciB0aGUKKyAgICAgICBkZXN0aW5hdGlvbiB3YXMgYWxyZWFkeSB0aHJvd24gYXdheSwgdGhlbiB0aGUgbm9kZQorICAgICAgIGNvdWxkbid0IGFjY2VwdCB0aGUgY3VycmVudCBpbnB1dCBgbXVsdGkgYnl0ZScuICAgKi8KKyAgICBuYWNjZXB0ZWQgPSAwOworICAvKiBPdGhlcndpc2UsIGl0IGlzIHN1cmUgdGhhdCB0aGUgbm9kZSBjb3VsZCBhY2NlcHQKKyAgICAgYG5hY2NlcHRlZCcgYnl0ZXMgaW5wdXQuICAqLworICByZXR1cm4gbmFjY2VwdGVkOworfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKwwKKy8qIEZ1bmN0aW9ucyBmb3Igc3RhdGUgdHJhbnNpdGlvbi4gICovCisKKy8qIFJldHVybiB0aGUgbmV4dCBzdGF0ZSB0byB3aGljaCB0aGUgY3VycmVudCBzdGF0ZSBTVEFURSB3aWxsIHRyYW5zaXQgYnkKKyAgIGFjY2VwdGluZyB0aGUgY3VycmVudCBpbnB1dCBieXRlLCBhbmQgdXBkYXRlIFNUQVRFX0xPRyBpZiBuZWNlc3NhcnkuCisgICBJZiBTVEFURSBjYW4gYWNjZXB0IGEgbXVsdGlieXRlIGNoYXIvY29sbGF0aW5nIGVsZW1lbnQvYmFjayByZWZlcmVuY2UKKyAgIHVwZGF0ZSB0aGUgZGVzdGluYXRpb24gb2YgU1RBVEVfTE9HLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK3RyYW5zaXRfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCSAgICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSkKK3sKKyAgcmVfZGZhc3RhdGVfdCAqKnRydGFibGU7CisgIHVuc2lnbmVkIGNoYXIgY2g7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBjYW4gYWNjZXB0IG11bHRpYnl0ZS4gICovCisgIGlmIChCRSAoc3RhdGUtPmFjY2VwdF9tYiwgMCkpCisgICAgeworICAgICAgKmVyciA9IHRyYW5zaXRfc3RhdGVfbWIgKG1jdHgsIHN0YXRlKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgLyogVGhlbiBkZWNpZGUgdGhlIG5leHQgc3RhdGUgd2l0aCB0aGUgc2luZ2xlIGJ5dGUuICAqLworI2lmIDAKKyAgaWYgKDApCisgICAgLyogZG9uJ3QgdXNlIHRyYW5zaXRpb24gdGFibGUgICovCisgICAgcmV0dXJuIHRyYW5zaXRfc3RhdGVfc2IgKGVyciwgbWN0eCwgc3RhdGUpOworI2VuZGlmCisKKyAgLyogVXNlIHRyYW5zaXRpb24gdGFibGUgICovCisgIGNoID0gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKCZtY3R4LT5pbnB1dCk7CisgIGZvciAoOzspCisgICAgeworICAgICAgdHJ0YWJsZSA9IHN0YXRlLT50cnRhYmxlOworICAgICAgaWYgKEJFICh0cnRhYmxlICE9IE5VTEwsIDEpKQorCXJldHVybiB0cnRhYmxlW2NoXTsKKworICAgICAgdHJ0YWJsZSA9IHN0YXRlLT53b3JkX3RydGFibGU7CisgICAgICBpZiAoQkUgKHRydGFibGUgIT0gTlVMTCwgMSkpCisJeworCSAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisJICBjb250ZXh0CisJICAgID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwKKwkJCQkgICAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkgLSAxLAorCQkJCSAgICBtY3R4LT5lZmxhZ3MpOworCSAgaWYgKElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpCisJICAgIHJldHVybiB0cnRhYmxlW2NoICsgU0JDX01BWF07CisJICBlbHNlCisJICAgIHJldHVybiB0cnRhYmxlW2NoXTsKKwl9CisKKyAgICAgIGlmICghYnVpbGRfdHJ0YWJsZSAobWN0eC0+ZGZhLCBzdGF0ZSkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisKKyAgICAgIC8qIFJldHJ5LCB3ZSBub3cgaGF2ZSBhIHRyYW5zaXRpb24gdGFibGUuICAqLworICAgIH0KK30KKworLyogVXBkYXRlIHRoZSBzdGF0ZV9sb2cgaWYgd2UgbmVlZCAqLworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK21lcmdlX3N0YXRlX3dpdGhfbG9nIChyZWdfZXJyY29kZV90ICplcnIsIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJICAgICAgcmVfZGZhc3RhdGVfdCAqbmV4dF9zdGF0ZSkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IGN1cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKworICBpZiAoY3VyX2lkeCA+IG1jdHgtPnN0YXRlX2xvZ190b3ApCisgICAgeworICAgICAgbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID0gbmV4dF9zdGF0ZTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ190b3AgPSBjdXJfaWR4OworICAgIH0KKyAgZWxzZSBpZiAobWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID09IE5VTEwpCisgICAgeworICAgICAgbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdID0gbmV4dF9zdGF0ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpwc3RhdGU7CisgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICAgIHJlX25vZGVfc2V0IG5leHRfbm9kZXMsICpsb2dfbm9kZXMsICp0YWJsZV9ub2RlcyA9IE5VTEw7CisgICAgICAvKiBJZiAoc3RhdGVfbG9nW2N1cl9pZHhdICE9IDApLCBpdCBpbXBsaWVzIHRoYXQgY3VyX2lkeCBpcworCSB0aGUgZGVzdGluYXRpb24gb2YgYSBtdWx0aWJ5dGUgY2hhci9jb2xsYXRpbmcgZWxlbWVudC8KKwkgYmFjayByZWZlcmVuY2UuICBUaGVuIHRoZSBuZXh0IHN0YXRlIGlzIHRoZSB1bmlvbiBzZXQgb2YKKwkgdGhlc2UgZGVzdGluYXRpb25zIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUgdHJhbnNpdGlvbiB0YWJsZS4gICovCisgICAgICBwc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF07CisgICAgICBsb2dfbm9kZXMgPSBwc3RhdGUtPmVudHJhbmNlX25vZGVzOworICAgICAgaWYgKG5leHRfc3RhdGUgIT0gTlVMTCkKKwl7CisJICB0YWJsZV9ub2RlcyA9IG5leHRfc3RhdGUtPmVudHJhbmNlX25vZGVzOworCSAgKmVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZuZXh0X25vZGVzLCB0YWJsZV9ub2RlcywKKwkJCQkJICAgICBsb2dfbm9kZXMpOworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZQorCW5leHRfbm9kZXMgPSAqbG9nX25vZGVzOworICAgICAgLyogTm90ZTogV2UgYWxyZWFkeSBhZGQgdGhlIG5vZGVzIG9mIHRoZSBpbml0aWFsIHN0YXRlLAorCSB0aGVuIHdlIGRvbid0IG5lZWQgdG8gYWRkIHRoZW0gaGVyZS4gICovCisKKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LAorCQkJCSAgICAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpIC0gMSwKKwkJCQkgICAgICBtY3R4LT5lZmxhZ3MpOworICAgICAgbmV4dF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XQorCT0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0IChlcnIsIGRmYSwgJm5leHRfbm9kZXMsIGNvbnRleHQpOworICAgICAgLyogV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBlcnJvcnMgaGVyZSwgc2luY2UgdGhlIHJldHVybiB2YWx1ZSBvZgorCSB0aGlzIGZ1bmN0aW9uIGlzIG5leHRfc3RhdGUgYW5kIEVSUiBpcyBhbHJlYWR5IHNldC4gICovCisKKyAgICAgIGlmICh0YWJsZV9ub2RlcyAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgICB9CisKKyAgaWYgKEJFIChkZmEtPm5iYWNrcmVmLCAwKSAmJiBuZXh0X3N0YXRlICE9IE5VTEwpCisgICAgeworICAgICAgLyogQ2hlY2sgT1BfT1BFTl9TVUJFWFAgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaW4gY2FzZSB0aGF0IHdlIHVzZSB0aGVtCisJIGxhdGVyLiAgV2UgbXVzdCBjaGVjayB0aGVtIGhlcmUsIHNpbmNlIHRoZSBiYWNrIHJlZmVyZW5jZXMgaW4gdGhlCisJIG5leHQgc3RhdGUgbWlnaHQgdXNlIHRoZW0uICAqLworICAgICAgKmVyciA9IGNoZWNrX3N1YmV4cF9tYXRjaGluZ190b3AgKG1jdHgsICZuZXh0X3N0YXRlLT5ub2RlcywKKwkJCQkJY3VyX2lkeCk7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBOVUxMOworCisgICAgICAvKiBJZiB0aGUgbmV4dCBzdGF0ZSBoYXMgYmFjayByZWZlcmVuY2VzLiAgKi8KKyAgICAgIGlmIChuZXh0X3N0YXRlLT5oYXNfYmFja3JlZikKKwl7CisJICAqZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgJm5leHRfc3RhdGUtPm5vZGVzKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBOVUxMOworCSAgbmV4dF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XTsKKwl9CisgICAgfQorCisgIHJldHVybiBuZXh0X3N0YXRlOworfQorCisvKiBTa2lwIGJ5dGVzIGluIHRoZSBpbnB1dCB0aGF0IGNvcnJlc3BvbmQgdG8gcGFydCBvZiBhCisgICBtdWx0aS1ieXRlIG1hdGNoLCB0aGVuIGxvb2sgaW4gdGhlIGxvZyBmb3IgYSBzdGF0ZQorICAgZnJvbSB3aGljaCB0byByZXN0YXJ0IG1hdGNoaW5nLiAgKi8KK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCitmaW5kX3JlY292ZXJfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICByZV9kZmFzdGF0ZV90ICpjdXJfc3RhdGU7CisgIGRvCisgICAgeworICAgICAgaW50IG1heCA9IG1jdHgtPnN0YXRlX2xvZ190b3A7CisgICAgICBpbnQgY3VyX3N0cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKworICAgICAgZG8KKwl7CisJICBpZiAoKytjdXJfc3RyX2lkeCA+IG1heCkKKwkgICAgcmV0dXJuIE5VTEw7CisJICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoJm1jdHgtPmlucHV0LCAxKTsKKwl9CisgICAgICB3aGlsZSAobWN0eC0+c3RhdGVfbG9nW2N1cl9zdHJfaWR4XSA9PSBOVUxMKTsKKworICAgICAgY3VyX3N0YXRlID0gbWVyZ2Vfc3RhdGVfd2l0aF9sb2cgKGVyciwgbWN0eCwgTlVMTCk7CisgICAgfQorICB3aGlsZSAoKmVyciA9PSBSRUdfTk9FUlJPUiAmJiBjdXJfc3RhdGUgPT0gTlVMTCk7CisgIHJldHVybiBjdXJfc3RhdGU7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRyYW5zaXRfc3RhdGUuICAqLworCisvKiBGcm9tIHRoZSBub2RlIHNldCBDVVJfTk9ERVMsIHBpY2sgdXAgdGhlIG5vZGVzIHdob3NlIHR5cGVzIGFyZQorICAgT1BfT1BFTl9TVUJFWFAgYW5kIHdoaWNoIGhhdmUgY29ycmVzcG9uZGluZyBiYWNrIHJlZmVyZW5jZXMgaW4gdGhlIHJlZ3VsYXIKKyAgIGV4cHJlc3Npb24uIEFuZCByZWdpc3RlciB0aGVtIHRvIHVzZSB0aGVtIGxhdGVyIGZvciBldmFsdWF0aW5nIHRoZQorICAgY29ycmVzcG9uZGluZyBiYWNrIHJlZmVyZW5jZXMuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX3N1YmV4cF9tYXRjaGluZ190b3AgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCSAgIGludCBzdHJfaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpbnQgbm9kZV9pZHg7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworCisgIC8qIFRPRE86IFRoaXMgaXNuJ3QgZWZmaWNpZW50LgorCSAgIEJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBub2RlcyB3aG9zZSB0eXBlcyBhcmUKKwkgICBPUF9PUEVOX1NVQkVYUCBhbmQgd2hvc2UgaW5kZXggaXMgU1VCRVhQX0lEWCwgd2UgbXVzdCBjaGVjayBhbGwKKwkgICBub2Rlcy4KKwkgICBFLmcuIFJFOiAoYSl7Mn0gICovCisgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGN1cl9ub2Rlcy0+bmVsZW07ICsrbm9kZV9pZHgpCisgICAgeworICAgICAgaW50IG5vZGUgPSBjdXJfbm9kZXMtPmVsZW1zW25vZGVfaWR4XTsKKyAgICAgIGlmIChkZmEtPm5vZGVzW25vZGVdLnR5cGUgPT0gT1BfT1BFTl9TVUJFWFAKKwkgICYmIGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCA8IEJJVFNFVF9XT1JEX0JJVFMKKwkgICYmIChkZmEtPnVzZWRfYmtyZWZfbWFwCisJICAgICAgJiAoKGJpdHNldF93b3JkX3QpIDEgPDwgZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KSkpCisJeworCSAgZXJyID0gbWF0Y2hfY3R4X2FkZF9zdWJ0b3AgKG1jdHgsIG5vZGUsIHN0cl9pZHgpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworI2lmIDAKKy8qIFJldHVybiB0aGUgbmV4dCBzdGF0ZSB0byB3aGljaCB0aGUgY3VycmVudCBzdGF0ZSBTVEFURSB3aWxsIHRyYW5zaXQgYnkKKyAgIGFjY2VwdGluZyB0aGUgY3VycmVudCBpbnB1dCBieXRlLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgordHJhbnNpdF9zdGF0ZV9zYiAocmVnX2VycmNvZGVfdCAqZXJyLCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCSAgcmVfZGZhc3RhdGVfdCAqc3RhdGUpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlX25vZGVfc2V0IG5leHRfbm9kZXM7CisgIHJlX2RmYXN0YXRlX3QgKm5leHRfc3RhdGU7CisgIGludCBub2RlX2NudCwgY3VyX3N0cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKyAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisKKyAgKmVyciA9IHJlX25vZGVfc2V0X2FsbG9jICgmbmV4dF9ub2Rlcywgc3RhdGUtPm5vZGVzLm5lbGVtICsgMSk7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGZvciAobm9kZV9jbnQgPSAwOyBub2RlX2NudCA8IHN0YXRlLT5ub2Rlcy5uZWxlbTsgKytub2RlX2NudCkKKyAgICB7CisgICAgICBpbnQgY3VyX25vZGUgPSBzdGF0ZS0+bm9kZXMuZWxlbXNbbm9kZV9jbnRdOworICAgICAgaWYgKGNoZWNrX25vZGVfYWNjZXB0IChtY3R4LCBkZmEtPm5vZGVzICsgY3VyX25vZGUsIGN1cl9zdHJfaWR4KSkKKwl7CisJICAqZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZuZXh0X25vZGVzLAorCQkJCSAgICBkZmEtPmVjbG9zdXJlcyArIGRmYS0+bmV4dHNbY3VyX25vZGVdKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgfQorICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgY3VyX3N0cl9pZHgsIG1jdHgtPmVmbGFncyk7CisgIG5leHRfc3RhdGUgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKGVyciwgZGZhLCAmbmV4dF9ub2RlcywgY29udGV4dCk7CisgIC8qIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZXJyb3JzIGhlcmUsIHNpbmNlIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICAgdGhpcyBmdW5jdGlvbiBpcyBuZXh0X3N0YXRlIGFuZCBFUlIgaXMgYWxyZWFkeSBzZXQuICAqLworCisgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKCZtY3R4LT5pbnB1dCwgMSk7CisgIHJldHVybiBuZXh0X3N0YXRlOworfQorI2VuZGlmCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCit0cmFuc2l0X3N0YXRlX21iIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX2RmYXN0YXRlX3QgKnBzdGF0ZSkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBwc3RhdGUtPm5vZGVzLm5lbGVtOyArK2kpCisgICAgeworICAgICAgcmVfbm9kZV9zZXQgZGVzdF9ub2RlcywgKm5ld19ub2RlczsKKyAgICAgIGludCBjdXJfbm9kZV9pZHggPSBwc3RhdGUtPm5vZGVzLmVsZW1zW2ldOworICAgICAgaW50IG5hY2NlcHRlZCwgZGVzdF9pZHg7CisgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKmRlc3Rfc3RhdGU7CisKKyAgICAgIGlmICghZGZhLT5ub2Rlc1tjdXJfbm9kZV9pZHhdLmFjY2VwdF9tYikKKwljb250aW51ZTsKKworICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVfaWR4XS5jb25zdHJhaW50KQorCXsKKwkgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LAorCQkJCQkgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpLAorCQkJCQkgIG1jdHgtPmVmbGFncyk7CisJICBpZiAoTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UIChkZmEtPm5vZGVzW2N1cl9ub2RlX2lkeF0uY29uc3RyYWludCwKKwkJCQkJICAgY29udGV4dCkpCisJICAgIGNvbnRpbnVlOworCX0KKworICAgICAgLyogSG93IG1hbnkgYnl0ZXMgdGhlIG5vZGUgY2FuIGFjY2VwdD8gICovCisgICAgICBuYWNjZXB0ZWQgPSBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoZGZhLCBjdXJfbm9kZV9pZHgsICZtY3R4LT5pbnB1dCwKKwkJCQkJICAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkpOworICAgICAgaWYgKG5hY2NlcHRlZCA9PSAwKQorCWNvbnRpbnVlOworCisgICAgICAvKiBUaGUgbm9kZSBjYW4gYWNjZXB0cyBgbmFjY2VwdGVkJyBieXRlcy4gICovCisgICAgICBkZXN0X2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpICsgbmFjY2VwdGVkOworICAgICAgbWN0eC0+bWF4X21iX2VsZW1fbGVuID0gKChtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPCBuYWNjZXB0ZWQpID8gbmFjY2VwdGVkCisJCQkgICAgICAgOiBtY3R4LT5tYXhfbWJfZWxlbV9sZW4pOworICAgICAgZXJyID0gY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAobWN0eCwgZGVzdF9pZHgpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisjaWZkZWYgREVCVUcKKyAgICAgIGFzc2VydCAoZGZhLT5uZXh0c1tjdXJfbm9kZV9pZHhdICE9IC0xKTsKKyNlbmRpZgorICAgICAgbmV3X25vZGVzID0gZGZhLT5lY2xvc3VyZXMgKyBkZmEtPm5leHRzW2N1cl9ub2RlX2lkeF07CisKKyAgICAgIGRlc3Rfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9pZHhdOworICAgICAgaWYgKGRlc3Rfc3RhdGUgPT0gTlVMTCkKKwlkZXN0X25vZGVzID0gKm5ld19ub2RlczsKKyAgICAgIGVsc2UKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9pbml0X3VuaW9uICgmZGVzdF9ub2RlcywKKwkJCQkJZGVzdF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsIG5ld19ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgICAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGRlc3RfaWR4IC0gMSwKKwkJCQkgICAgICBtY3R4LT5lZmxhZ3MpOworICAgICAgbWN0eC0+c3RhdGVfbG9nW2Rlc3RfaWR4XQorCT0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZkZXN0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIGlmIChkZXN0X3N0YXRlICE9IE5VTEwpCisJcmVfbm9kZV9zZXRfZnJlZSAoJmRlc3Rfbm9kZXMpOworICAgICAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbZGVzdF9pZHhdID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgordHJhbnNpdF9zdGF0ZV9ia3JlZiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgaTsKKyAgaW50IGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisKKyAgZm9yIChpID0gMDsgaSA8IG5vZGVzLT5uZWxlbTsgKytpKQorICAgIHsKKyAgICAgIGludCBkZXN0X3N0cl9pZHgsIHByZXZfbmVsZW0sIGJrY19pZHg7CisgICAgICBpbnQgbm9kZV9pZHggPSBub2Rlcy0+ZWxlbXNbaV07CisgICAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsgbm9kZV9pZHg7CisgICAgICByZV9ub2RlX3NldCAqbmV3X2Rlc3Rfbm9kZXM7CisKKyAgICAgIC8qIENoZWNrIHdoZXRoZXIgYG5vZGUnIGlzIGEgYmFja3JlZmVyZW5jZSBvciBub3QuICAqLworICAgICAgaWYgKG5vZGUtPnR5cGUgIT0gT1BfQkFDS19SRUYpCisJY29udGludWU7CisKKyAgICAgIGlmIChub2RlLT5jb25zdHJhaW50KQorCXsKKwkgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBjdXJfc3RyX2lkeCwKKwkJCQkJICBtY3R4LT5lZmxhZ3MpOworCSAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAobm9kZS0+Y29uc3RyYWludCwgY29udGV4dCkpCisJICAgIGNvbnRpbnVlOworCX0KKworICAgICAgLyogYG5vZGUnIGlzIGEgYmFja3JlZmVyZW5jZS4KKwkgQ2hlY2sgdGhlIHN1YnN0cmluZyB3aGljaCB0aGUgc3Vic3RyaW5nIG1hdGNoZWQuICAqLworICAgICAgYmtjX2lkeCA9IG1jdHgtPm5ia3JlZl9lbnRzOworICAgICAgZXJyID0gZ2V0X3N1YmV4cCAobWN0eCwgbm9kZV9pZHgsIGN1cl9zdHJfaWR4KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworCisgICAgICAvKiBBbmQgYWRkIHRoZSBlcHNpbG9uIGNsb3N1cmVzICh3aGljaCBpcyBgbmV3X2Rlc3Rfbm9kZXMnKSBvZgorCSB0aGUgYmFja3JlZmVyZW5jZSB0byBhcHByb3ByaWF0ZSBzdGF0ZV9sb2cuICAqLworI2lmZGVmIERFQlVHCisgICAgICBhc3NlcnQgKGRmYS0+bmV4dHNbbm9kZV9pZHhdICE9IC0xKTsKKyNlbmRpZgorICAgICAgZm9yICg7IGJrY19pZHggPCBtY3R4LT5uYmtyZWZfZW50czsgKytia2NfaWR4KQorCXsKKwkgIGludCBzdWJleHBfbGVuOworCSAgcmVfZGZhc3RhdGVfdCAqZGVzdF9zdGF0ZTsKKwkgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnQ7CisJICBia3JlZl9lbnQgPSBtY3R4LT5ia3JlZl9lbnRzICsgYmtjX2lkeDsKKwkgIGlmIChia3JlZl9lbnQtPm5vZGUgIT0gbm9kZV9pZHggfHwgYmtyZWZfZW50LT5zdHJfaWR4ICE9IGN1cl9zdHJfaWR4KQorCSAgICBjb250aW51ZTsKKwkgIHN1YmV4cF9sZW4gPSBia3JlZl9lbnQtPnN1YmV4cF90byAtIGJrcmVmX2VudC0+c3ViZXhwX2Zyb207CisJICBuZXdfZGVzdF9ub2RlcyA9IChzdWJleHBfbGVuID09IDAKKwkJCSAgICA/IGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5lZGVzdHNbbm9kZV9pZHhdLmVsZW1zWzBdCisJCQkgICAgOiBkZmEtPmVjbG9zdXJlcyArIGRmYS0+bmV4dHNbbm9kZV9pZHhdKTsKKwkgIGRlc3Rfc3RyX2lkeCA9IChjdXJfc3RyX2lkeCArIGJrcmVmX2VudC0+c3ViZXhwX3RvCisJCQkgIC0gYmtyZWZfZW50LT5zdWJleHBfZnJvbSk7CisJICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgZGVzdF9zdHJfaWR4IC0gMSwKKwkJCQkJICBtY3R4LT5lZmxhZ3MpOworCSAgZGVzdF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tkZXN0X3N0cl9pZHhdOworCSAgcHJldl9uZWxlbSA9ICgobWN0eC0+c3RhdGVfbG9nW2N1cl9zdHJfaWR4XSA9PSBOVUxMKSA/IDAKKwkJCTogbWN0eC0+c3RhdGVfbG9nW2N1cl9zdHJfaWR4XS0+bm9kZXMubmVsZW0pOworCSAgLyogQWRkIGBuZXdfZGVzdF9ub2RlJyB0byBzdGF0ZV9sb2cuICAqLworCSAgaWYgKGRlc3Rfc3RhdGUgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIG1jdHgtPnN0YXRlX2xvZ1tkZXN0X3N0cl9pZHhdCisJCT0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsIG5ld19kZXN0X25vZGVzLAorCQkJCQkgICAgY29udGV4dCk7CisJICAgICAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XSA9PSBOVUxMCisJCSAgICAgICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0IGRlc3Rfbm9kZXM7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAoJmRlc3Rfbm9kZXMsCisJCQkJCSAgICBkZXN0X3N0YXRlLT5lbnRyYW5jZV9ub2RlcywKKwkJCQkJICAgIG5ld19kZXN0X25vZGVzKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXsKKwkJICByZV9ub2RlX3NldF9mcmVlICgmZGVzdF9ub2Rlcyk7CisJCSAgZ290byBmcmVlX3JldHVybjsKKwkJfQorCSAgICAgIG1jdHgtPnN0YXRlX2xvZ1tkZXN0X3N0cl9pZHhdCisJCT0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZkZXN0X25vZGVzLCBjb250ZXh0KTsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZGVzdF9ub2Rlcyk7CisJICAgICAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XSA9PSBOVUxMCisJCSAgICAgICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIC8qIFdlIG5lZWQgdG8gY2hlY2sgcmVjdXJzaXZlbHkgaWYgdGhlIGJhY2tyZWZlcmVuY2UgY2FuIGVwc2lsb24KKwkgICAgIHRyYW5zaXQuICAqLworCSAgaWYgKHN1YmV4cF9sZW4gPT0gMAorCSAgICAgICYmIG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0tPm5vZGVzLm5lbGVtID4gcHJldl9uZWxlbSkKKwkgICAgeworCSAgICAgIGVyciA9IGNoZWNrX3N1YmV4cF9tYXRjaGluZ190b3AgKG1jdHgsIG5ld19kZXN0X25vZGVzLAorCQkJCQkgICAgICAgY3VyX3N0cl9pZHgpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgICBlcnIgPSB0cmFuc2l0X3N0YXRlX2JrcmVmIChtY3R4LCBuZXdfZGVzdF9ub2Rlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJfQorICAgIH0KKyAgZXJyID0gUkVHX05PRVJST1I7CisgZnJlZV9yZXR1cm46CisgIHJldHVybiBlcnI7Cit9CisKKy8qIEVudW1lcmF0ZSBhbGwgdGhlIGNhbmRpZGF0ZXMgd2hpY2ggdGhlIGJhY2tyZWZlcmVuY2UgQktSRUZfTk9ERSBjYW4gbWF0Y2gKKyAgIGF0IEJLUkVGX1NUUl9JRFgsIGFuZCByZWdpc3RlciB0aGVtIGJ5IG1hdGNoX2N0eF9hZGRfZW50cnkoKS4KKyAgIE5vdGUgdGhhdCB3ZSBtaWdodCBjb2xsZWN0IGluYXBwcm9wcmlhdGUgY2FuZGlkYXRlcyBoZXJlLgorICAgSG93ZXZlciwgdGhlIGNvc3Qgb2YgY2hlY2tpbmcgdGhlbSBzdHJpY3RseSBoZXJlIGlzIHRvbyBoaWdoLCB0aGVuIHdlCisgICBkZWxheSB0aGVzZSBjaGVja2luZyBmb3IgcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcygpLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitnZXRfc3ViZXhwIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBia3JlZl9ub2RlLCBpbnQgYmtyZWZfc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IHN1YmV4cF9udW0sIHN1Yl90b3BfaWR4OworICBjb25zdCBjaGFyICpidWYgPSAoY29uc3QgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKyAgLyogUmV0dXJuIGlmIHdlIGhhdmUgYWxyZWFkeSBjaGVja2VkIEJLUkVGX05PREUgYXQgQktSRUZfU1RSX0lEWC4gICovCisgIGludCBjYWNoZV9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBia3JlZl9zdHJfaWR4KTsKKyAgaWYgKGNhY2hlX2lkeCAhPSAtMSkKKyAgICB7CisgICAgICBjb25zdCBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50cnkKKwk9IG1jdHgtPmJrcmVmX2VudHMgKyBjYWNoZV9pZHg7CisgICAgICBkbworCWlmIChlbnRyeS0+bm9kZSA9PSBia3JlZl9ub2RlKQorCSAgcmV0dXJuIFJFR19OT0VSUk9SOyAvKiBXZSBhbHJlYWR5IGNoZWNrZWQgaXQuICAqLworICAgICAgd2hpbGUgKGVudHJ5KystPm1vcmUpOworICAgIH0KKworICBzdWJleHBfbnVtID0gZGZhLT5ub2Rlc1tia3JlZl9ub2RlXS5vcHIuaWR4OworCisgIC8qIEZvciBlYWNoIHN1YiBleHByZXNzaW9uICAqLworICBmb3IgKHN1Yl90b3BfaWR4ID0gMDsgc3ViX3RvcF9pZHggPCBtY3R4LT5uc3ViX3RvcHM7ICsrc3ViX3RvcF9pZHgpCisgICAgeworICAgICAgcmVnX2VycmNvZGVfdCBlcnI7CisgICAgICByZV9zdWJfbWF0Y2hfdG9wX3QgKnN1Yl90b3AgPSBtY3R4LT5zdWJfdG9wc1tzdWJfdG9wX2lkeF07CisgICAgICByZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJfbGFzdDsKKyAgICAgIGludCBzdWJfbGFzdF9pZHgsIHNsX3N0ciwgYmtyZWZfc3RyX29mZjsKKworICAgICAgaWYgKGRmYS0+bm9kZXNbc3ViX3RvcC0+bm9kZV0ub3ByLmlkeCAhPSBzdWJleHBfbnVtKQorCWNvbnRpbnVlOyAvKiBJdCBpc24ndCByZWxhdGVkLiAgKi8KKworICAgICAgc2xfc3RyID0gc3ViX3RvcC0+c3RyX2lkeDsKKyAgICAgIGJrcmVmX3N0cl9vZmYgPSBia3JlZl9zdHJfaWR4OworICAgICAgLyogQXQgZmlyc3QsIGNoZWNrIHRoZSBsYXN0IG5vZGUgb2Ygc3ViIGV4cHJlc3Npb25zIHdlIGFscmVhZHkKKwkgZXZhbHVhdGVkLiAgKi8KKyAgICAgIGZvciAoc3ViX2xhc3RfaWR4ID0gMDsgc3ViX2xhc3RfaWR4IDwgc3ViX3RvcC0+bmxhc3RzOyArK3N1Yl9sYXN0X2lkeCkKKwl7CisJICBpbnQgc2xfc3RyX2RpZmY7CisJICBzdWJfbGFzdCA9IHN1Yl90b3AtPmxhc3RzW3N1Yl9sYXN0X2lkeF07CisJICBzbF9zdHJfZGlmZiA9IHN1Yl9sYXN0LT5zdHJfaWR4IC0gc2xfc3RyOworCSAgLyogVGhlIG1hdGNoZWQgc3RyaW5nIGJ5IHRoZSBzdWIgZXhwcmVzc2lvbiBtYXRjaCB3aXRoIHRoZSBzdWJzdHJpbmcKKwkgICAgIGF0IHRoZSBiYWNrIHJlZmVyZW5jZT8gICovCisJICBpZiAoc2xfc3RyX2RpZmYgPiAwKQorCSAgICB7CisJICAgICAgaWYgKEJFIChia3JlZl9zdHJfb2ZmICsgc2xfc3RyX2RpZmYgPiBtY3R4LT5pbnB1dC52YWxpZF9sZW4sIDApKQorCQl7CisJCSAgLyogTm90IGVub3VnaCBjaGFycyBmb3IgYSBzdWNjZXNzZnVsIG1hdGNoLiAgKi8KKwkJICBpZiAoYmtyZWZfc3RyX29mZiArIHNsX3N0cl9kaWZmID4gbWN0eC0+aW5wdXQubGVuKQorCQkgICAgYnJlYWs7CisKKwkJICBlcnIgPSBjbGVhbl9zdGF0ZV9sb2dfaWZfbmVlZGVkIChtY3R4LAorCQkJCQkJICAgYmtyZWZfc3RyX29mZgorCQkJCQkJICAgKyBzbF9zdHJfZGlmZik7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgcmV0dXJuIGVycjsKKwkJICBidWYgPSAoY29uc3QgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKwkJfQorCSAgICAgIGlmIChtZW1jbXAgKGJ1ZiArIGJrcmVmX3N0cl9vZmYsIGJ1ZiArIHNsX3N0ciwgc2xfc3RyX2RpZmYpICE9IDApCisJCS8qIFdlIGRvbid0IG5lZWQgdG8gc2VhcmNoIHRoaXMgc3ViIGV4cHJlc3Npb24gYW55IG1vcmUuICAqLworCQlicmVhazsKKwkgICAgfQorCSAgYmtyZWZfc3RyX29mZiArPSBzbF9zdHJfZGlmZjsKKwkgIHNsX3N0ciArPSBzbF9zdHJfZGlmZjsKKwkgIGVyciA9IGdldF9zdWJleHBfc3ViIChtY3R4LCBzdWJfdG9wLCBzdWJfbGFzdCwgYmtyZWZfbm9kZSwKKwkJCQlia3JlZl9zdHJfaWR4KTsKKworCSAgLyogUmVsb2FkIGJ1Ziwgc2luY2UgdGhlIHByZWNlZGluZyBjYWxsIG1pZ2h0IGhhdmUgcmVhbGxvY2F0ZWQKKwkgICAgIHRoZSBidWZmZXIuICAqLworCSAgYnVmID0gKGNvbnN0IGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisKKwkgIGlmIChlcnIgPT0gUkVHX05PTUFUQ0gpCisJICAgIGNvbnRpbnVlOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKworICAgICAgaWYgKHN1Yl9sYXN0X2lkeCA8IHN1Yl90b3AtPm5sYXN0cykKKwljb250aW51ZTsKKyAgICAgIGlmIChzdWJfbGFzdF9pZHggPiAwKQorCSsrc2xfc3RyOworICAgICAgLyogVGhlbiwgc2VhcmNoIGZvciB0aGUgb3RoZXIgbGFzdCBub2RlcyBvZiB0aGUgc3ViIGV4cHJlc3Npb24uICAqLworICAgICAgZm9yICg7IHNsX3N0ciA8PSBia3JlZl9zdHJfaWR4OyArK3NsX3N0cikKKwl7CisJICBpbnQgY2xzX25vZGUsIHNsX3N0cl9vZmY7CisJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXM7CisJICBzbF9zdHJfb2ZmID0gc2xfc3RyIC0gc3ViX3RvcC0+c3RyX2lkeDsKKwkgIC8qIFRoZSBtYXRjaGVkIHN0cmluZyBieSB0aGUgc3ViIGV4cHJlc3Npb24gbWF0Y2ggd2l0aCB0aGUgc3Vic3RyaW5nCisJICAgICBhdCB0aGUgYmFjayByZWZlcmVuY2U/ICAqLworCSAgaWYgKHNsX3N0cl9vZmYgPiAwKQorCSAgICB7CisJICAgICAgaWYgKEJFIChia3JlZl9zdHJfb2ZmID49IG1jdHgtPmlucHV0LnZhbGlkX2xlbiwgMCkpCisJCXsKKwkJICAvKiBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIHdlIGNhbm5vdCBtYXRjaC4gICovCisJCSAgaWYgKGJrcmVmX3N0cl9vZmYgPj0gbWN0eC0+aW5wdXQubGVuKQorCQkgICAgYnJlYWs7CisKKwkJICBlcnIgPSBleHRlbmRfYnVmZmVycyAobWN0eCk7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgcmV0dXJuIGVycjsKKworCQkgIGJ1ZiA9IChjb25zdCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCQl9CisJICAgICAgaWYgKGJ1ZiBbYmtyZWZfc3RyX29mZisrXSAhPSBidWZbc2xfc3RyIC0gMV0pCisJCWJyZWFrOyAvKiBXZSBkb24ndCBuZWVkIHRvIHNlYXJjaCB0aGlzIHN1YiBleHByZXNzaW9uCisJCQkgIGFueSBtb3JlLiAgKi8KKwkgICAgfQorCSAgaWYgKG1jdHgtPnN0YXRlX2xvZ1tzbF9zdHJdID09IE5VTEwpCisJICAgIGNvbnRpbnVlOworCSAgLyogRG9lcyB0aGlzIHN0YXRlIGhhdmUgYSAnKScgb2YgdGhlIHN1YiBleHByZXNzaW9uPyAgKi8KKwkgIG5vZGVzID0gJm1jdHgtPnN0YXRlX2xvZ1tzbF9zdHJdLT5ub2RlczsKKwkgIGNsc19ub2RlID0gZmluZF9zdWJleHBfbm9kZSAoZGZhLCBub2Rlcywgc3ViZXhwX251bSwKKwkJCQkgICAgICAgT1BfQ0xPU0VfU1VCRVhQKTsKKwkgIGlmIChjbHNfbm9kZSA9PSAtMSkKKwkgICAgY29udGludWU7IC8qIE5vLiAgKi8KKwkgIGlmIChzdWJfdG9wLT5wYXRoID09IE5VTEwpCisJICAgIHsKKwkgICAgICBzdWJfdG9wLT5wYXRoID0gY2FsbG9jIChzaXplb2YgKHN0YXRlX2FycmF5X3QpLAorCQkJCSAgICAgIHNsX3N0ciAtIHN1Yl90b3AtPnN0cl9pZHggKyAxKTsKKwkgICAgICBpZiAoc3ViX3RvcC0+cGF0aCA9PSBOVUxMKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgfQorCSAgLyogQ2FuIHRoZSBPUF9PUEVOX1NVQkVYUCBub2RlIGFycml2ZSB0aGUgT1BfQ0xPU0VfU1VCRVhQIG5vZGUKKwkgICAgIGluIHRoZSBjdXJyZW50IGNvbnRleHQ/ICAqLworCSAgZXJyID0gY2hlY2tfYXJyaXZhbCAobWN0eCwgc3ViX3RvcC0+cGF0aCwgc3ViX3RvcC0+bm9kZSwKKwkJCSAgICAgICBzdWJfdG9wLT5zdHJfaWR4LCBjbHNfbm9kZSwgc2xfc3RyLAorCQkJICAgICAgIE9QX0NMT1NFX1NVQkVYUCk7CisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICAgIGNvbnRpbnVlOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICAgIHJldHVybiBlcnI7CisJICBzdWJfbGFzdCA9IG1hdGNoX2N0eF9hZGRfc3VibGFzdCAoc3ViX3RvcCwgY2xzX25vZGUsIHNsX3N0cik7CisJICBpZiAoQkUgKHN1Yl9sYXN0ID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIGVyciA9IGdldF9zdWJleHBfc3ViIChtY3R4LCBzdWJfdG9wLCBzdWJfbGFzdCwgYmtyZWZfbm9kZSwKKwkJCQlia3JlZl9zdHJfaWR4KTsKKwkgIGlmIChlcnIgPT0gUkVHX05PTUFUQ0gpCisJICAgIGNvbnRpbnVlOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgZ2V0X3N1YmV4cCgpLiAgKi8KKworLyogQ2hlY2sgU1VCX0xBU1QgY2FuIGFycml2ZSB0byB0aGUgYmFjayByZWZlcmVuY2UgQktSRUZfTk9ERSBhdCBCS1JFRl9TVFIuCisgICBJZiBpdCBjYW4gYXJyaXZlLCByZWdpc3RlciB0aGUgc3ViIGV4cHJlc3Npb24gZXhwcmVzc2VkIHdpdGggU1VCX1RPUAorICAgYW5kIFNVQl9MQVNULiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitnZXRfc3ViZXhwX3N1YiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBjb25zdCByZV9zdWJfbWF0Y2hfdG9wX3QgKnN1Yl90b3AsCisJCXJlX3N1Yl9tYXRjaF9sYXN0X3QgKnN1Yl9sYXN0LCBpbnQgYmtyZWZfbm9kZSwgaW50IGJrcmVmX3N0cikKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCB0b19pZHg7CisgIC8qIENhbiB0aGUgc3ViZXhwcmVzc2lvbiBhcnJpdmUgdGhlIGJhY2sgcmVmZXJlbmNlPyAgKi8KKyAgZXJyID0gY2hlY2tfYXJyaXZhbCAobWN0eCwgJnN1Yl9sYXN0LT5wYXRoLCBzdWJfbGFzdC0+bm9kZSwKKwkJICAgICAgIHN1Yl9sYXN0LT5zdHJfaWR4LCBia3JlZl9ub2RlLCBia3JlZl9zdHIsCisJCSAgICAgICBPUF9PUEVOX1NVQkVYUCk7CisgIGlmIChlcnIgIT0gUkVHX05PRVJST1IpCisgICAgcmV0dXJuIGVycjsKKyAgZXJyID0gbWF0Y2hfY3R4X2FkZF9lbnRyeSAobWN0eCwgYmtyZWZfbm9kZSwgYmtyZWZfc3RyLCBzdWJfdG9wLT5zdHJfaWR4LAorCQkJICAgICBzdWJfbGFzdC0+c3RyX2lkeCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworICB0b19pZHggPSBia3JlZl9zdHIgKyBzdWJfbGFzdC0+c3RyX2lkeCAtIHN1Yl90b3AtPnN0cl9pZHg7CisgIHJldHVybiBjbGVhbl9zdGF0ZV9sb2dfaWZfbmVlZGVkIChtY3R4LCB0b19pZHgpOworfQorCisvKiBGaW5kIHRoZSBmaXJzdCBub2RlIHdoaWNoIGlzICcoJyBvciAnKScgYW5kIHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFguCisgICBTZWFyY2ggJygnIGlmIEZMX09QRU4sIG9yIHNlYXJjaCAnKScgb3RoZXJ3aXNlLgorICAgVE9ETzogVGhpcyBmdW5jdGlvbiBpc24ndCBlZmZpY2llbnQuLi4KKwkgQmVjYXVzZSB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIG5vZGVzIHdob3NlIHR5cGVzIGFyZQorCSBPUF9PUEVOX1NVQkVYUCBhbmQgd2hvc2UgaW5kZXggaXMgU1VCRVhQX0lEWCwgd2UgbXVzdCBjaGVjayBhbGwKKwkgbm9kZXMuCisJIEUuZy4gUkU6IChhKXsyfSAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZpbmRfc3ViZXhwX25vZGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywKKwkJICBpbnQgc3ViZXhwX2lkeCwgaW50IHR5cGUpCit7CisgIGludCBjbHNfaWR4OworICBmb3IgKGNsc19pZHggPSAwOyBjbHNfaWR4IDwgbm9kZXMtPm5lbGVtOyArK2Nsc19pZHgpCisgICAgeworICAgICAgaW50IGNsc19ub2RlID0gbm9kZXMtPmVsZW1zW2Nsc19pZHhdOworICAgICAgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBjbHNfbm9kZTsKKyAgICAgIGlmIChub2RlLT50eXBlID09IHR5cGUKKwkgICYmIG5vZGUtPm9wci5pZHggPT0gc3ViZXhwX2lkeCkKKwlyZXR1cm4gY2xzX25vZGU7CisgICAgfQorICByZXR1cm4gLTE7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIG5vZGUgVE9QX05PREUgYXQgVE9QX1NUUiBjYW4gYXJyaXZlIHRvIHRoZSBub2RlCisgICBMQVNUX05PREUgYXQgTEFTVF9TVFIuICBXZSByZWNvcmQgdGhlIHBhdGggb250byBQQVRIIHNpbmNlIGl0IHdpbGwgYmUKKyAgIGhlYXZpbHkgcmV1c2VkLgorICAgUmV0dXJuIFJFR19OT0VSUk9SIGlmIGl0IGNhbiBhcnJpdmUsIG9yIFJFR19OT01BVENIIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfYXJyaXZhbCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBzdGF0ZV9hcnJheV90ICpwYXRoLCBpbnQgdG9wX25vZGUsCisJICAgICAgIGludCB0b3Bfc3RyLCBpbnQgbGFzdF9ub2RlLCBpbnQgbGFzdF9zdHIsIGludCB0eXBlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVyciA9IFJFR19OT0VSUk9SOworICBpbnQgc3ViZXhwX251bSwgYmFja3VwX2N1cl9pZHgsIHN0cl9pZHgsIG51bGxfY250OworICByZV9kZmFzdGF0ZV90ICpjdXJfc3RhdGUgPSBOVUxMOworICByZV9ub2RlX3NldCAqY3VyX25vZGVzLCBuZXh0X25vZGVzOworICByZV9kZmFzdGF0ZV90ICoqYmFja3VwX3N0YXRlX2xvZzsKKyAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisKKyAgc3ViZXhwX251bSA9IGRmYS0+bm9kZXNbdG9wX25vZGVdLm9wci5pZHg7CisgIC8qIEV4dGVuZCB0aGUgYnVmZmVyIGlmIHdlIG5lZWQuICAqLworICBpZiAoQkUgKHBhdGgtPmFsbG9jIDwgbGFzdF9zdHIgKyBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gKyAxLCAwKSkKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICoqbmV3X2FycmF5OworICAgICAgaW50IG9sZF9hbGxvYyA9IHBhdGgtPmFsbG9jOworICAgICAgcGF0aC0+YWxsb2MgKz0gbGFzdF9zdHIgKyBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gKyAxOworICAgICAgbmV3X2FycmF5ID0gcmVfcmVhbGxvYyAocGF0aC0+YXJyYXksIHJlX2RmYXN0YXRlX3QgKiwgcGF0aC0+YWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJeworCSAgcGF0aC0+YWxsb2MgPSBvbGRfYWxsb2M7CisJICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBwYXRoLT5hcnJheSA9IG5ld19hcnJheTsKKyAgICAgIG1lbXNldCAobmV3X2FycmF5ICsgb2xkX2FsbG9jLCAnXDAnLAorCSAgICAgIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSAqIChwYXRoLT5hbGxvYyAtIG9sZF9hbGxvYykpOworICAgIH0KKworICBzdHJfaWR4ID0gcGF0aC0+bmV4dF9pZHggPyBwYXRoLT5uZXh0X2lkeCA6IHRvcF9zdHI7CisKKyAgLyogVGVtcG9yYXJ5IG1vZGlmeSBNQ1RYLiAgKi8KKyAgYmFja3VwX3N0YXRlX2xvZyA9IG1jdHgtPnN0YXRlX2xvZzsKKyAgYmFja3VwX2N1cl9pZHggPSBtY3R4LT5pbnB1dC5jdXJfaWR4OworICBtY3R4LT5zdGF0ZV9sb2cgPSBwYXRoLT5hcnJheTsKKyAgbWN0eC0+aW5wdXQuY3VyX2lkeCA9IHN0cl9pZHg7CisKKyAgLyogU2V0dXAgaW5pdGlhbCBub2RlIHNldC4gICovCisgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBzdHJfaWR4IC0gMSwgbWN0eC0+ZWZsYWdzKTsKKyAgaWYgKHN0cl9pZHggPT0gdG9wX3N0cikKKyAgICB7CisgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0XzEgKCZuZXh0X25vZGVzLCB0b3Bfbm9kZSk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICAgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoZGZhLCAmbmV4dF9ub2Rlcywgc3ViZXhwX251bSwgdHlwZSk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJeworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgcmV0dXJuIGVycjsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY3VyX3N0YXRlID0gbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdOworICAgICAgaWYgKGN1cl9zdGF0ZSAmJiBjdXJfc3RhdGUtPmhhc19iYWNrcmVmKQorCXsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJm5leHRfbm9kZXMsICZjdXJfc3RhdGUtPm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgICBlbHNlCisJcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoJm5leHRfbm9kZXMpOworICAgIH0KKyAgaWYgKHN0cl9pZHggPT0gdG9wX3N0ciB8fCAoY3VyX3N0YXRlICYmIGN1cl9zdGF0ZS0+aGFzX2JhY2tyZWYpKQorICAgIHsKKyAgICAgIGlmIChuZXh0X25vZGVzLm5lbGVtKQorCXsKKwkgIGVyciA9IGV4cGFuZF9ia3JlZl9jYWNoZSAobWN0eCwgJm5leHRfbm9kZXMsIHN0cl9pZHgsCisJCQkJICAgIHN1YmV4cF9udW0sIHR5cGUpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgICBjdXJfc3RhdGUgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJm5leHRfbm9kZXMsIGNvbnRleHQpOworICAgICAgaWYgKEJFIChjdXJfc3RhdGUgPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgIHJldHVybiBlcnI7CisJfQorICAgICAgbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdID0gY3VyX3N0YXRlOworICAgIH0KKworICBmb3IgKG51bGxfY250ID0gMDsgc3RyX2lkeCA8IGxhc3Rfc3RyICYmIG51bGxfY250IDw9IG1jdHgtPm1heF9tYl9lbGVtX2xlbjspCisgICAgeworICAgICAgcmVfbm9kZV9zZXRfZW1wdHkgKCZuZXh0X25vZGVzKTsKKyAgICAgIGlmIChtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeCArIDFdKQorCXsKKwkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmbmV4dF9ub2RlcywKKwkJCQkgICAmbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHggKyAxXS0+bm9kZXMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgICBpZiAoY3VyX3N0YXRlKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfYWRkX25leHRfbm9kZXMgKG1jdHgsIHN0cl9pZHgsCisJCQkJCSAgICAgICZjdXJfc3RhdGUtPm5vbl9lcHNfbm9kZXMsCisJCQkJCSAgICAgICZuZXh0X25vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgKytzdHJfaWR4OworICAgICAgaWYgKG5leHRfbm9kZXMubmVsZW0pCisJeworCSAgZXJyID0gY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsIChkZmEsICZuZXh0X25vZGVzLCBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJICBlcnIgPSBleHBhbmRfYmtyZWZfY2FjaGUgKG1jdHgsICZuZXh0X25vZGVzLCBzdHJfaWR4LAorCQkJCSAgICBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIHN0cl9pZHggLSAxLCBtY3R4LT5lZmxhZ3MpOworICAgICAgY3VyX3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIGlmIChCRSAoY3VyX3N0YXRlID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwl7CisJICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICByZXR1cm4gZXJyOworCX0KKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKyAgICAgIG51bGxfY250ID0gY3VyX3N0YXRlID09IE5VTEwgPyBudWxsX2NudCArIDEgOiAwOworICAgIH0KKyAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworICBjdXJfbm9kZXMgPSAobWN0eC0+c3RhdGVfbG9nW2xhc3Rfc3RyXSA9PSBOVUxMID8gTlVMTAorCSAgICAgICA6ICZtY3R4LT5zdGF0ZV9sb2dbbGFzdF9zdHJdLT5ub2Rlcyk7CisgIHBhdGgtPm5leHRfaWR4ID0gc3RyX2lkeDsKKworICAvKiBGaXggTUNUWC4gICovCisgIG1jdHgtPnN0YXRlX2xvZyA9IGJhY2t1cF9zdGF0ZV9sb2c7CisgIG1jdHgtPmlucHV0LmN1cl9pZHggPSBiYWNrdXBfY3VyX2lkeDsKKworICAvKiBUaGVuIGNoZWNrIHRoZSBjdXJyZW50IG5vZGUgc2V0IGhhcyB0aGUgbm9kZSBMQVNUX05PREUuICAqLworICBpZiAoY3VyX25vZGVzICE9IE5VTEwgJiYgcmVfbm9kZV9zZXRfY29udGFpbnMgKGN1cl9ub2RlcywgbGFzdF9ub2RlKSkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyAgcmV0dXJuIFJFR19OT01BVENIOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBjaGVja19hcnJpdmFsLiAgKi8KKworLyogQ2FsY3VsYXRlIHRoZSBkZXN0aW5hdGlvbiBub2RlcyBvZiBDVVJfTk9ERVMgYXQgU1RSX0lEWCwgYW5kIGFwcGVuZCB0aGVtCisgICB0byBORVhUX05PREVTLgorICAgVE9ETzogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSBmdW5jdGlvbnMgdHJhbnNpdF9zdGF0ZSooKSwKKwkgaG93ZXZlciB0aGlzIGZ1bmN0aW9uIGhhcyBtYW55IGFkZGl0aW9uYWwgd29ya3MuCisJIENhbid0IHdlIHVuaWZ5IHRoZW0/ICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2Fycml2YWxfYWRkX25leHRfbm9kZXMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IHN0cl9pZHgsCisJCQkgICAgICByZV9ub2RlX3NldCAqY3VyX25vZGVzLCByZV9ub2RlX3NldCAqbmV4dF9ub2RlcykKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IHJlc3VsdDsKKyAgaW50IGN1cl9pZHg7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyNlbmRpZgorICByZV9ub2RlX3NldCB1bmlvbl9zZXQ7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZ1bmlvbl9zZXQpOworICBmb3IgKGN1cl9pZHggPSAwOyBjdXJfaWR4IDwgY3VyX25vZGVzLT5uZWxlbTsgKytjdXJfaWR4KQorICAgIHsKKyAgICAgIGludCBuYWNjZXB0ZWQgPSAwOworICAgICAgaW50IGN1cl9ub2RlID0gY3VyX25vZGVzLT5lbGVtc1tjdXJfaWR4XTsKKyNpZmRlZiBERUJVRworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW2N1cl9ub2RlXS50eXBlOworICAgICAgYXNzZXJ0ICghSVNfRVBTSUxPTl9OT0RFICh0eXBlKSk7CisjZW5kaWYKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgLyogSWYgdGhlIG5vZGUgbWF5IGFjY2VwdCBgbXVsdGkgYnl0ZScuICAqLworICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVdLmFjY2VwdF9tYikKKwl7CisJICBuYWNjZXB0ZWQgPSBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoZGZhLCBjdXJfbm9kZSwgJm1jdHgtPmlucHV0LAorCQkJCQkgICAgICAgc3RyX2lkeCk7CisJICBpZiAobmFjY2VwdGVkID4gMSkKKwkgICAgeworCSAgICAgIHJlX2RmYXN0YXRlX3QgKmRlc3Rfc3RhdGU7CisJICAgICAgaW50IG5leHRfbm9kZSA9IGRmYS0+bmV4dHNbY3VyX25vZGVdOworCSAgICAgIGludCBuZXh0X2lkeCA9IHN0cl9pZHggKyBuYWNjZXB0ZWQ7CisJICAgICAgZGVzdF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tuZXh0X2lkeF07CisJICAgICAgcmVfbm9kZV9zZXRfZW1wdHkgKCZ1bmlvbl9zZXQpOworCSAgICAgIGlmIChkZXN0X3N0YXRlKQorCQl7CisJCSAgZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZ1bmlvbl9zZXQsICZkZXN0X3N0YXRlLT5ub2Rlcyk7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgeworCQkgICAgICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKwkJICAgICAgcmV0dXJuIGVycjsKKwkJICAgIH0KKwkJfQorCSAgICAgIHJlc3VsdCA9IHJlX25vZGVfc2V0X2luc2VydCAoJnVuaW9uX3NldCwgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKHJlc3VsdCA8IDAsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJCX0KKwkgICAgICBtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLAorCQkJCQkJCSAgICAmdW5pb25fc2V0KTsKKwkgICAgICBpZiAoQkUgKG1jdHgtPnN0YXRlX2xvZ1tuZXh0X2lkeF0gPT0gTlVMTAorCQkgICAgICAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgcmV0dXJuIGVycjsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICBpZiAobmFjY2VwdGVkCisJICB8fCBjaGVja19ub2RlX2FjY2VwdCAobWN0eCwgZGZhLT5ub2RlcyArIGN1cl9ub2RlLCBzdHJfaWR4KSkKKwl7CisJICByZXN1bHQgPSByZV9ub2RlX3NldF9pbnNlcnQgKG5leHRfbm9kZXMsIGRmYS0+bmV4dHNbY3VyX25vZGVdKTsKKwkgIGlmIChCRSAocmVzdWx0IDwgMCwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKwkgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgfQorCX0KKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEZvciBhbGwgdGhlIG5vZGVzIGluIENVUl9OT0RFUywgYWRkIHRoZSBlcHNpbG9uIGNsb3N1cmVzIG9mIHRoZW0gdG8KKyAgIENVUl9OT0RFUywgaG93ZXZlciBleGNsdWRlIHRoZSBub2RlcyB3aGljaCBhcmU6CisgICAgLSBpbnNpZGUgdGhlIHN1YiBleHByZXNzaW9uIHdob3NlIG51bWJlciBpcyBFWF9TVUJFWFAsIGlmIEZMX09QRU4uCisgICAgLSBvdXQgb2YgdGhlIHN1YiBleHByZXNzaW9uIHdob3NlIG51bWJlciBpcyBFWF9TVUJFWFAsIGlmICFGTF9PUEVOLgorKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkgIGludCBleF9zdWJleHAsIGludCB0eXBlKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGlkeCwgb3V0c2lkZV9ub2RlOworICByZV9ub2RlX3NldCBuZXdfbm9kZXM7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChjdXJfbm9kZXMtPm5lbGVtKTsKKyNlbmRpZgorICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJm5ld19ub2RlcywgY3VyX25vZGVzLT5uZWxlbSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworICAvKiBDcmVhdGUgYSBuZXcgbm9kZSBzZXQgTkVXX05PREVTIHdpdGggdGhlIG5vZGVzIHdoaWNoIGFyZSBlcHNpbG9uCisgICAgIGNsb3N1cmVzIG9mIHRoZSBub2RlIGluIENVUl9OT0RFUy4gICovCisKKyAgZm9yIChpZHggPSAwOyBpZHggPCBjdXJfbm9kZXMtPm5lbGVtOyArK2lkeCkKKyAgICB7CisgICAgICBpbnQgY3VyX25vZGUgPSBjdXJfbm9kZXMtPmVsZW1zW2lkeF07CisgICAgICBjb25zdCByZV9ub2RlX3NldCAqZWNsb3N1cmUgPSBkZmEtPmVjbG9zdXJlcyArIGN1cl9ub2RlOworICAgICAgb3V0c2lkZV9ub2RlID0gZmluZF9zdWJleHBfbm9kZSAoZGZhLCBlY2xvc3VyZSwgZXhfc3ViZXhwLCB0eXBlKTsKKyAgICAgIGlmIChvdXRzaWRlX25vZGUgPT0gLTEpCisJeworCSAgLyogVGhlcmUgYXJlIG5vIHByb2JsZW1hdGljIG5vZGVzLCBqdXN0IG1lcmdlIHRoZW0uICAqLworCSAgZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZuZXdfbm9kZXMsIGVjbG9zdXJlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXdfbm9kZXMpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgLyogVGhlcmUgYXJlIHByb2JsZW1hdGljIG5vZGVzLCByZS1jYWxjdWxhdGUgaW5jcmVtZW50YWxseS4gICovCisJICBlcnIgPSBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xfc3ViIChkZmEsICZuZXdfbm9kZXMsIGN1cl9ub2RlLAorCQkJCQkgICAgICBleF9zdWJleHAsIHR5cGUpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJm5ld19ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKGN1cl9ub2Rlcyk7CisgICpjdXJfbm9kZXMgPSBuZXdfbm9kZXM7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wuCisgICBDaGVjayBpbmNyZW1lbnRhbGx5IHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgVEFSR0VULCBhbmQgaWYgaXQgaXNuJ3QKKyAgIHByb2JsZW1hdGljIGFwcGVuZCBpdCB0byBEU1RfTk9ERVMuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2Fycml2YWxfZXhwYW5kX2VjbF9zdWIgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX25vZGVfc2V0ICpkc3Rfbm9kZXMsCisJCQkgICAgICBpbnQgdGFyZ2V0LCBpbnQgZXhfc3ViZXhwLCBpbnQgdHlwZSkKK3sKKyAgaW50IGN1cl9ub2RlOworICBmb3IgKGN1cl9ub2RlID0gdGFyZ2V0OyAhcmVfbm9kZV9zZXRfY29udGFpbnMgKGRzdF9ub2RlcywgY3VyX25vZGUpOykKKyAgICB7CisgICAgICBpbnQgZXJyOworCisgICAgICBpZiAoZGZhLT5ub2Rlc1tjdXJfbm9kZV0udHlwZSA9PSB0eXBlCisJICAmJiBkZmEtPm5vZGVzW2N1cl9ub2RlXS5vcHIuaWR4ID09IGV4X3N1YmV4cCkKKwl7CisJICBpZiAodHlwZSA9PSBPUF9DTE9TRV9TVUJFWFApCisJICAgIHsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRzdF9ub2RlcywgY3VyX25vZGUpOworCSAgICAgIGlmIChCRSAoZXJyID09IC0xLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luc2VydCAoZHN0X25vZGVzLCBjdXJfbm9kZSk7CisgICAgICBpZiAoQkUgKGVyciA9PSAtMSwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBpZiAoZGZhLT5lZGVzdHNbY3VyX25vZGVdLm5lbGVtID09IDApCisJYnJlYWs7CisgICAgICBpZiAoZGZhLT5lZGVzdHNbY3VyX25vZGVdLm5lbGVtID09IDIpCisJeworCSAgZXJyID0gY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsX3N1YiAoZGZhLCBkc3Rfbm9kZXMsCisJCQkJCSAgICAgIGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1sxXSwKKwkJCQkJICAgICAgZXhfc3ViZXhwLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgICBjdXJfbm9kZSA9IGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1swXTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworCisvKiBGb3IgYWxsIHRoZSBiYWNrIHJlZmVyZW5jZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGUsIGNhbGN1bGF0ZSB0aGUKKyAgIGRlc3RpbmF0aW9uIG9mIHRoZSBiYWNrIHJlZmVyZW5jZXMgYnkgdGhlIGFwcHJvcHJpYXRlIGVudHJ5CisgICBpbiBNQ1RYLT5CS1JFRl9FTlRTLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitleHBhbmRfYmtyZWZfY2FjaGUgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJICAgIGludCBjdXJfc3RyLCBpbnQgc3ViZXhwX251bSwgaW50IHR5cGUpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgY2FjaGVfaWR4X3N0YXJ0ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgY3VyX3N0cik7CisgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQ7CisKKyAgaWYgKGNhY2hlX2lkeF9zdGFydCA9PSAtMSkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyByZXN0YXJ0OgorICBlbnQgPSBtY3R4LT5ia3JlZl9lbnRzICsgY2FjaGVfaWR4X3N0YXJ0OworICBkbworICAgIHsKKyAgICAgIGludCB0b19pZHgsIG5leHRfbm9kZTsKKworICAgICAgLyogSXMgdGhpcyBlbnRyeSBFTlQgaXMgYXBwcm9wcmlhdGU/ICAqLworICAgICAgaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVzLCBlbnQtPm5vZGUpKQorCWNvbnRpbnVlOyAvKiBOby4gICovCisKKyAgICAgIHRvX2lkeCA9IGN1cl9zdHIgKyBlbnQtPnN1YmV4cF90byAtIGVudC0+c3ViZXhwX2Zyb207CisgICAgICAvKiBDYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBiYWNrIHJlZmVyZW5jZSwgYW5kIGFwcGVuZCBpdAorCSB0byBNQ1RYLT5TVEFURV9MT0cuICAqLworICAgICAgaWYgKHRvX2lkeCA9PSBjdXJfc3RyKQorCXsKKwkgIC8qIFRoZSBiYWNrcmVmZXJlbmNlIGRpZCBlcHNpbG9uIHRyYW5zaXQsIHdlIG11c3QgcmUtY2hlY2sgYWxsIHRoZQorCSAgICAgbm9kZSBpbiB0aGUgY3VycmVudCBzdGF0ZS4gICovCisJICByZV9ub2RlX3NldCBuZXdfZGVzdHM7CisJICByZWdfZXJyY29kZV90IGVycjIsIGVycjM7CisJICBuZXh0X25vZGUgPSBkZmEtPmVkZXN0c1tlbnQtPm5vZGVdLmVsZW1zWzBdOworCSAgaWYgKHJlX25vZGVfc2V0X2NvbnRhaW5zIChjdXJfbm9kZXMsIG5leHRfbm9kZSkpCisJICAgIGNvbnRpbnVlOworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmbmV3X2Rlc3RzLCBuZXh0X25vZGUpOworCSAgZXJyMiA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoZGZhLCAmbmV3X2Rlc3RzLCBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGVycjMgPSByZV9ub2RlX3NldF9tZXJnZSAoY3VyX25vZGVzLCAmbmV3X2Rlc3RzKTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXdfZGVzdHMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IgfHwgZXJyMiAhPSBSRUdfTk9FUlJPUgorCQkgIHx8IGVycjMgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgZXJyID0gKGVyciAhPSBSRUdfTk9FUlJPUiA/IGVycgorCQkgICAgIDogKGVycjIgIT0gUkVHX05PRVJST1IgPyBlcnIyIDogZXJyMykpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwkgIC8qIFRPRE86IEl0IGlzIHN0aWxsIGluZWZmaWNpZW50Li4uICAqLworCSAgZ290byByZXN0YXJ0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICByZV9ub2RlX3NldCB1bmlvbl9zZXQ7CisJICBuZXh0X25vZGUgPSBkZmEtPm5leHRzW2VudC0+bm9kZV07CisJICBpZiAobWN0eC0+c3RhdGVfbG9nW3RvX2lkeF0pCisJICAgIHsKKwkgICAgICBpbnQgcmV0OworCSAgICAgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoJm1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdLT5ub2RlcywKKwkJCQkJbmV4dF9ub2RlKSkKKwkJY29udGludWU7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmdW5pb25fc2V0LAorCQkJCQkgICAmbWN0eC0+c3RhdGVfbG9nW3RvX2lkeF0tPm5vZGVzKTsKKwkgICAgICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZ1bmlvbl9zZXQsIG5leHRfbm9kZSk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IgfHwgcmV0IDwgMCwgMCkpCisJCXsKKwkJICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKwkJICBlcnIgPSBlcnIgIT0gUkVHX05PRVJST1IgPyBlcnIgOiBSRUdfRVNQQUNFOworCQkgIHJldHVybiBlcnI7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmdW5pb25fc2V0LCBuZXh0X25vZGUpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIGVycjsKKwkgICAgfQorCSAgbWN0eC0+c3RhdGVfbG9nW3RvX2lkeF0gPSByZV9hY3F1aXJlX3N0YXRlICgmZXJyLCBkZmEsICZ1bmlvbl9zZXQpOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJICBpZiAoQkUgKG1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdID09IE5VTEwKKwkJICAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKyAgICB9CisgIHdoaWxlIChlbnQrKy0+bW9yZSk7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQnVpbGQgdHJhbnNpdGlvbiB0YWJsZSBmb3IgdGhlIHN0YXRlLgorICAgUmV0dXJuIDEgaWYgc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorYnVpbGRfdHJ0YWJsZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfZGZhc3RhdGVfdCAqc3RhdGUpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgaSwgaiwgY2gsIG5lZWRfd29yZF90cnRhYmxlID0gMDsKKyAgYml0c2V0X3dvcmRfdCBlbGVtLCBtYXNrOworICBib29sIGRlc3RzX25vZGVfbWFsbG9jZWQgPSBmYWxzZTsKKyAgYm9vbCBkZXN0X3N0YXRlc19tYWxsb2NlZCA9IGZhbHNlOworICBpbnQgbmRlc3RzOyAvKiBOdW1iZXIgb2YgdGhlIGRlc3RpbmF0aW9uIHN0YXRlcyBmcm9tIGBzdGF0ZScuICAqLworICByZV9kZmFzdGF0ZV90ICoqdHJ0YWJsZTsKKyAgcmVfZGZhc3RhdGVfdCAqKmRlc3Rfc3RhdGVzID0gTlVMTCwgKipkZXN0X3N0YXRlc193b3JkLCAqKmRlc3Rfc3RhdGVzX25sOworICByZV9ub2RlX3NldCBmb2xsb3dzLCAqZGVzdHNfbm9kZTsKKyAgYml0c2V0X3QgKmRlc3RzX2NoOworICBiaXRzZXRfdCBhY2NlcHRhYmxlOworCisgIHN0cnVjdCBkZXN0c19hbGxvYworICB7CisgICAgcmVfbm9kZV9zZXQgZGVzdHNfbm9kZVtTQkNfTUFYXTsKKyAgICBiaXRzZXRfdCBkZXN0c19jaFtTQkNfTUFYXTsKKyAgfSAqZGVzdHNfYWxsb2M7CisKKyAgLyogV2UgYnVpbGQgREZBIHN0YXRlcyB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgZGVzdGluYXRpb24gbm9kZXMKKyAgICAgZnJvbSBgc3RhdGUnLiAgYGRlc3RzX25vZGVbaV0nIHJlcHJlc2VudHMgdGhlIG5vZGVzIHdoaWNoIGktdGgKKyAgICAgZGVzdGluYXRpb24gc3RhdGUgY29udGFpbnMsIGFuZCBgZGVzdHNfY2hbaV0nIHJlcHJlc2VudHMgdGhlCisgICAgIGNoYXJhY3RlcnMgd2hpY2ggaS10aCBkZXN0aW5hdGlvbiBzdGF0ZSBhY2NlcHRzLiAgKi8KKyNpZmRlZiBIQVZFX0FMTE9DQQorICBpZiAoX19saWJjX3VzZV9hbGxvY2EgKHNpemVvZiAoc3RydWN0IGRlc3RzX2FsbG9jKSkpCisgICAgZGVzdHNfYWxsb2MgPSAoc3RydWN0IGRlc3RzX2FsbG9jICopIGFsbG9jYSAoc2l6ZW9mIChzdHJ1Y3QgZGVzdHNfYWxsb2MpKTsKKyAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgZGVzdHNfYWxsb2MgPSByZV9tYWxsb2MgKHN0cnVjdCBkZXN0c19hbGxvYywgMSk7CisgICAgICBpZiAoQkUgKGRlc3RzX2FsbG9jID09IE5VTEwsIDApKQorCXJldHVybiAwOworICAgICAgZGVzdHNfbm9kZV9tYWxsb2NlZCA9IHRydWU7CisgICAgfQorICBkZXN0c19ub2RlID0gZGVzdHNfYWxsb2MtPmRlc3RzX25vZGU7CisgIGRlc3RzX2NoID0gZGVzdHNfYWxsb2MtPmRlc3RzX2NoOworCisgIC8qIEluaXRpYWxpemUgdHJhbnNpdGlvbiB0YWJsZS4gICovCisgIHN0YXRlLT53b3JkX3RydGFibGUgPSBzdGF0ZS0+dHJ0YWJsZSA9IE5VTEw7CisKKyAgLyogQXQgZmlyc3QsIGdyb3VwIGFsbCBub2RlcyBiZWxvbmdpbmcgdG8gYHN0YXRlJyBpbnRvIHNldmVyYWwKKyAgICAgZGVzdGluYXRpb25zLiAgKi8KKyAgbmRlc3RzID0gZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGRmYSwgc3RhdGUsIGRlc3RzX25vZGUsIGRlc3RzX2NoKTsKKyAgaWYgKEJFIChuZGVzdHMgPD0gMCwgMCkpCisgICAgeworICAgICAgaWYgKGRlc3RzX25vZGVfbWFsbG9jZWQpCisJZnJlZSAoZGVzdHNfYWxsb2MpOworICAgICAgLyogUmV0dXJuIDAgaW4gY2FzZSBvZiBhbiBlcnJvciwgMSBvdGhlcndpc2UuICAqLworICAgICAgaWYgKG5kZXN0cyA9PSAwKQorCXsKKwkgIHN0YXRlLT50cnRhYmxlID0gKHJlX2RmYXN0YXRlX3QgKiopCisJICAgIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopLCBTQkNfTUFYKTsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJmZvbGxvd3MsIG5kZXN0cyArIDEpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgZ290byBvdXRfZnJlZTsKKworICAvKiBBdm9pZCBhcml0aG1ldGljIG92ZXJmbG93IGluIHNpemUgY2FsY3VsYXRpb24uICAqLworICBpZiAoQkUgKCgoKFNJWkVfTUFYIC0gKHNpemVvZiAocmVfbm9kZV9zZXQpICsgc2l6ZW9mIChiaXRzZXRfdCkpICogU0JDX01BWCkKKwkgICAgLyAoMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkpCisJICAgPCBuZGVzdHMpLAorCSAgMCkpCisgICAgZ290byBvdXRfZnJlZTsKKworI2lmZGVmIEhBVkVfQUxMT0NBCisgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAoKHNpemVvZiAocmVfbm9kZV9zZXQpICsgc2l6ZW9mIChiaXRzZXRfdCkpICogU0JDX01BWAorCQkJICsgbmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkpCisgICAgZGVzdF9zdGF0ZXMgPSAocmVfZGZhc3RhdGVfdCAqKikKKyAgICAgIGFsbG9jYSAobmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSk7CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGRlc3Rfc3RhdGVzID0gKHJlX2RmYXN0YXRlX3QgKiopCisJbWFsbG9jIChuZGVzdHMgKiAzICogc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopKTsKKyAgICAgIGlmIChCRSAoZGVzdF9zdGF0ZXMgPT0gTlVMTCwgMCkpCisJeworb3V0X2ZyZWU6CisJICBpZiAoZGVzdF9zdGF0ZXNfbWFsbG9jZWQpCisJICAgIGZyZWUgKGRlc3Rfc3RhdGVzKTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZmb2xsb3dzKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBuZGVzdHM7ICsraSkKKwkgICAgcmVfbm9kZV9zZXRfZnJlZSAoZGVzdHNfbm9kZSArIGkpOworCSAgaWYgKGRlc3RzX25vZGVfbWFsbG9jZWQpCisJICAgIGZyZWUgKGRlc3RzX2FsbG9jKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGRlc3Rfc3RhdGVzX21hbGxvY2VkID0gdHJ1ZTsKKyAgICB9CisgIGRlc3Rfc3RhdGVzX3dvcmQgPSBkZXN0X3N0YXRlcyArIG5kZXN0czsKKyAgZGVzdF9zdGF0ZXNfbmwgPSBkZXN0X3N0YXRlc193b3JkICsgbmRlc3RzOworICBiaXRzZXRfZW1wdHkgKGFjY2VwdGFibGUpOworCisgIC8qIFRoZW4gYnVpbGQgdGhlIHN0YXRlcyBmb3IgYWxsIGRlc3RpbmF0aW9ucy4gICovCisgIGZvciAoaSA9IDA7IGkgPCBuZGVzdHM7ICsraSkKKyAgICB7CisgICAgICBpbnQgbmV4dF9ub2RlOworICAgICAgcmVfbm9kZV9zZXRfZW1wdHkgKCZmb2xsb3dzKTsKKyAgICAgIC8qIE1lcmdlIHRoZSBmb2xsb3dzIG9mIHRoaXMgZGVzdGluYXRpb24gc3RhdGVzLiAgKi8KKyAgICAgIGZvciAoaiA9IDA7IGogPCBkZXN0c19ub2RlW2ldLm5lbGVtOyArK2opCisJeworCSAgbmV4dF9ub2RlID0gZGZhLT5uZXh0c1tkZXN0c19ub2RlW2ldLmVsZW1zW2pdXTsKKwkgIGlmIChuZXh0X25vZGUgIT0gLTEpCisJICAgIHsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJmZvbGxvd3MsIGRmYS0+ZWNsb3N1cmVzICsgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gb3V0X2ZyZWU7CisJICAgIH0KKwl9CisgICAgICBkZXN0X3N0YXRlc1tpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywgMCk7CisgICAgICBpZiAoQkUgKGRlc3Rfc3RhdGVzW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIG91dF9mcmVlOworICAgICAgLyogSWYgdGhlIG5ldyBzdGF0ZSBoYXMgY29udGV4dCBjb25zdHJhaW50LAorCSBidWlsZCBhcHByb3ByaWF0ZSBzdGF0ZXMgZm9yIHRoZXNlIGNvbnRleHRzLiAgKi8KKyAgICAgIGlmIChkZXN0X3N0YXRlc1tpXS0+aGFzX2NvbnN0cmFpbnQpCisJeworCSAgZGVzdF9zdGF0ZXNfd29yZFtpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywKKwkJCQkJCQkgIENPTlRFWFRfV09SRCk7CisJICBpZiAoQkUgKGRlc3Rfc3RhdGVzX3dvcmRbaV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIG91dF9mcmVlOworCisJICBpZiAoZGVzdF9zdGF0ZXNbaV0gIT0gZGVzdF9zdGF0ZXNfd29yZFtpXSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorCSAgICBuZWVkX3dvcmRfdHJ0YWJsZSA9IDE7CisKKwkgIGRlc3Rfc3RhdGVzX25sW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZmb2xsb3dzLAorCQkJCQkJCUNPTlRFWFRfTkVXTElORSk7CisJICBpZiAoQkUgKGRlc3Rfc3RhdGVzX25sW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBvdXRfZnJlZTsKKyAJfQorICAgICAgZWxzZQorCXsKKwkgIGRlc3Rfc3RhdGVzX3dvcmRbaV0gPSBkZXN0X3N0YXRlc1tpXTsKKwkgIGRlc3Rfc3RhdGVzX25sW2ldID0gZGVzdF9zdGF0ZXNbaV07CisJfQorICAgICAgYml0c2V0X21lcmdlIChhY2NlcHRhYmxlLCBkZXN0c19jaFtpXSk7CisgICAgfQorCisgIGlmICghQkUgKG5lZWRfd29yZF90cnRhYmxlLCAwKSkKKyAgICB7CisgICAgICAvKiBXZSBkb24ndCBjYXJlIGFib3V0IHdoZXRoZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgYSB3b3JkCisJIGNoYXJhY3Rlciwgb3Igd2UgYXJlIGluIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHNldCBzbyB3ZSBjYW4KKwkgZGlzY2VybiBieSBsb29raW5nIGF0IHRoZSBjaGFyYWN0ZXIgY29kZTogYWxsb2NhdGUgYQorCSAyNTYtZW50cnkgdHJhbnNpdGlvbiB0YWJsZS4gICovCisgICAgICB0cnRhYmxlID0gc3RhdGUtPnRydGFibGUgPQorCShyZV9kZmFzdGF0ZV90ICoqKSBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSwgU0JDX01BWCk7CisgICAgICBpZiAoQkUgKHRydGFibGUgPT0gTlVMTCwgMCkpCisJZ290byBvdXRfZnJlZTsKKworICAgICAgLyogRm9yIGFsbCBjaGFyYWN0ZXJzIGNoLi4uOiAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwlmb3IgKGNoID0gaSAqIEJJVFNFVF9XT1JEX0JJVFMsIGVsZW0gPSBhY2NlcHRhYmxlW2ldLCBtYXNrID0gMTsKKwkgICAgIGVsZW07CisJICAgICBtYXNrIDw8PSAxLCBlbGVtID4+PSAxLCArK2NoKQorCSAgaWYgKEJFIChlbGVtICYgMSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkJIGNoYXJhY3RlciBjaC4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgICAgZm9yIChqID0gMDsgKGRlc3RzX2NoW2pdW2ldICYgbWFzaykgPT0gMDsgKytqKQorCQk7CisKKwkgICAgICAvKiBqLXRoIGRlc3RpbmF0aW9uIGFjY2VwdHMgdGhlIHdvcmQgY2hhcmFjdGVyIGNoLiAgKi8KKwkgICAgICBpZiAoZGZhLT53b3JkX2NoYXJbaV0gJiBtYXNrKQorCQl0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzX3dvcmRbal07CisJICAgICAgZWxzZQorCQl0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzW2pdOworCSAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogV2UgY2FyZSBhYm91dCB3aGV0aGVyIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIGEgd29yZAorCSBjaGFyYWN0ZXIsIGFuZCB3ZSBhcmUgaW4gYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXQ6IGRpc2Nlcm4KKwkgYnkgbG9va2luZyBhdCB0aGUgY2hhcmFjdGVyIGNvZGU6IGJ1aWxkIHR3byAyNTYtZW50cnkKKwkgdHJhbnNpdGlvbiB0YWJsZXMsIG9uZSBzdGFydGluZyBhdCB0cnRhYmxlWzBdIGFuZCBvbmUKKwkgc3RhcnRpbmcgYXQgdHJ0YWJsZVtTQkNfTUFYXS4gICovCisgICAgICB0cnRhYmxlID0gc3RhdGUtPndvcmRfdHJ0YWJsZSA9CisJKHJlX2RmYXN0YXRlX3QgKiopIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopLCAyICogU0JDX01BWCk7CisgICAgICBpZiAoQkUgKHRydGFibGUgPT0gTlVMTCwgMCkpCisJZ290byBvdXRfZnJlZTsKKworICAgICAgLyogRm9yIGFsbCBjaGFyYWN0ZXJzIGNoLi4uOiAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwlmb3IgKGNoID0gaSAqIEJJVFNFVF9XT1JEX0JJVFMsIGVsZW0gPSBhY2NlcHRhYmxlW2ldLCBtYXNrID0gMTsKKwkgICAgIGVsZW07CisJICAgICBtYXNrIDw8PSAxLCBlbGVtID4+PSAxLCArK2NoKQorCSAgaWYgKEJFIChlbGVtICYgMSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkJIGNoYXJhY3RlciBjaC4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgICAgZm9yIChqID0gMDsgKGRlc3RzX2NoW2pdW2ldICYgbWFzaykgPT0gMDsgKytqKQorCQk7CisKKwkgICAgICAvKiBqLXRoIGRlc3RpbmF0aW9uIGFjY2VwdHMgdGhlIHdvcmQgY2hhcmFjdGVyIGNoLiAgKi8KKwkgICAgICB0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzW2pdOworCSAgICAgIHRydGFibGVbY2ggKyBTQkNfTUFYXSA9IGRlc3Rfc3RhdGVzX3dvcmRbal07CisJICAgIH0KKyAgICB9CisKKyAgLyogbmV3IGxpbmUgKi8KKyAgaWYgKGJpdHNldF9jb250YWluIChhY2NlcHRhYmxlLCBORVdMSU5FX0NIQVIpKQorICAgIHsKKyAgICAgIC8qIFRoZSBjdXJyZW50IHN0YXRlIGFjY2VwdHMgbmV3bGluZSBjaGFyYWN0ZXIuICAqLworICAgICAgZm9yIChqID0gMDsgaiA8IG5kZXN0czsgKytqKQorCWlmIChiaXRzZXRfY29udGFpbiAoZGVzdHNfY2hbal0sIE5FV0xJTkVfQ0hBUikpCisJICB7CisJICAgIC8qIGstdGggZGVzdGluYXRpb24gYWNjZXB0cyBuZXdsaW5lIGNoYXJhY3Rlci4gICovCisJICAgIHRydGFibGVbTkVXTElORV9DSEFSXSA9IGRlc3Rfc3RhdGVzX25sW2pdOworCSAgICBpZiAobmVlZF93b3JkX3RydGFibGUpCisJICAgICAgdHJ0YWJsZVtORVdMSU5FX0NIQVIgKyBTQkNfTUFYXSA9IGRlc3Rfc3RhdGVzX25sW2pdOworCSAgICAvKiBUaGVyZSBtdXN0IGJlIG9ubHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkgICAgICAgbmV3bGluZS4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgIGJyZWFrOworCSAgfQorICAgIH0KKworICBpZiAoZGVzdF9zdGF0ZXNfbWFsbG9jZWQpCisgICAgZnJlZSAoZGVzdF9zdGF0ZXMpOworCisgIHJlX25vZGVfc2V0X2ZyZWUgKCZmb2xsb3dzKTsKKyAgZm9yIChpID0gMDsgaSA8IG5kZXN0czsgKytpKQorICAgIHJlX25vZGVfc2V0X2ZyZWUgKGRlc3RzX25vZGUgKyBpKTsKKworICBpZiAoZGVzdHNfbm9kZV9tYWxsb2NlZCkKKyAgICBmcmVlIChkZXN0c19hbGxvYyk7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEdyb3VwIGFsbCBub2RlcyBiZWxvbmdpbmcgdG8gU1RBVEUgaW50byBzZXZlcmFsIGRlc3RpbmF0aW9ucy4KKyAgIFRoZW4gZm9yIGFsbCBkZXN0aW5hdGlvbnMsIHNldCB0aGUgbm9kZXMgYmVsb25naW5nIHRvIHRoZSBkZXN0aW5hdGlvbgorICAgdG8gREVTVFNfTk9ERVtpXSBhbmQgc2V0IHRoZSBjaGFyYWN0ZXJzIGFjY2VwdGVkIGJ5IHRoZSBkZXN0aW5hdGlvbgorICAgdG8gREVTVF9DSFtpXS4gIFRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSBudW1iZXIgb2YgZGVzdGluYXRpb25zLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2dyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKwkJCSAgICByZV9ub2RlX3NldCAqZGVzdHNfbm9kZSwgYml0c2V0X3QgKmRlc3RzX2NoKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IHJlc3VsdDsKKyAgaW50IGksIGosIGs7CisgIGludCBuZGVzdHM7IC8qIE51bWJlciBvZiB0aGUgZGVzdGluYXRpb25zIGZyb20gYHN0YXRlJy4gICovCisgIGJpdHNldF90IGFjY2VwdHM7IC8qIENoYXJhY3RlcnMgYSBub2RlIGNhbiBhY2NlcHQuICAqLworICBjb25zdCByZV9ub2RlX3NldCAqY3VyX25vZGVzID0gJnN0YXRlLT5ub2RlczsKKyAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKyAgbmRlc3RzID0gMDsKKworICAvKiBGb3IgYWxsIHRoZSBub2RlcyBiZWxvbmdpbmcgdG8gYHN0YXRlJywgICovCisgIGZvciAoaSA9IDA7IGkgPCBjdXJfbm9kZXMtPm5lbGVtOyArK2kpCisgICAgeworICAgICAgcmVfdG9rZW5fdCAqbm9kZSA9ICZkZmEtPm5vZGVzW2N1cl9ub2Rlcy0+ZWxlbXNbaV1dOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBub2RlLT50eXBlOworICAgICAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgPSBub2RlLT5jb25zdHJhaW50OworCisgICAgICAvKiBFbnVtZXJhdGUgYWxsIHNpbmdsZSBieXRlIGNoYXJhY3RlciB0aGlzIG5vZGUgY2FuIGFjY2VwdC4gICovCisgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIpCisJYml0c2V0X3NldCAoYWNjZXB0cywgbm9kZS0+b3ByLmMpOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCkKKwl7CisJICBiaXRzZXRfbWVyZ2UgKGFjY2VwdHMsIG5vZGUtPm9wci5zYmNzZXQpOworCX0KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9EKQorCXsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIGJpdHNldF9tZXJnZSAoYWNjZXB0cywgZGZhLT5zYl9jaGFyKTsKKwkgIGVsc2UKKyNlbmRpZgorCSAgICBiaXRzZXRfc2V0X2FsbCAoYWNjZXB0cyk7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXDAnKTsKKwl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfVVRGOF9QRVJJT0QpCisJeworCSAgbWVtc2V0IChhY2NlcHRzLCAnXHhmZicsIHNpemVvZiAoYml0c2V0X3QpIC8gMik7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXDAnKTsKKwl9CisjZW5kaWYKKyAgICAgIGVsc2UKKwljb250aW51ZTsKKworICAgICAgLyogQ2hlY2sgdGhlIGBhY2NlcHRzJyBhbmQgc2lmdCB0aGUgY2hhcmFjdGVycyB3aGljaCBhcmUgbm90CisJIG1hdGNoIGl0IHRoZSBjb250ZXh0LiAgKi8KKyAgICAgIGlmIChjb25zdHJhaW50KQorCXsKKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBib29sIGFjY2VwdHNfbmV3bGluZSA9IGJpdHNldF9jb250YWluIChhY2NlcHRzLCBORVdMSU5FX0NIQVIpOworCSAgICAgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJICAgICAgaWYgKGFjY2VwdHNfbmV3bGluZSkKKwkJYml0c2V0X3NldCAoYWNjZXB0cywgTkVXTElORV9DSEFSKTsKKwkgICAgICBlbHNlCisJCWNvbnRpbnVlOworCSAgICB9CisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfRU5EQlVGX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9XT1JEX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfd29yZF90IGFueV9zZXQgPSAwOworCSAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiAhbm9kZS0+d29yZF9jaGFyKQorCQl7CisJCSAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKwkJICBjb250aW51ZTsKKwkJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKwkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IChkZmEtPndvcmRfY2hhcltqXSB8IH5kZmEtPnNiX2NoYXJbal0pKTsKKwkgICAgICBlbHNlCisjZW5kaWYKKwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gZGZhLT53b3JkX2NoYXJbal0pOworCSAgICAgIGlmICghYW55X3NldCkKKwkJY29udGludWU7CisJICAgIH0KKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfd29yZF90IGFueV9zZXQgPSAwOworCSAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiBub2RlLT53b3JkX2NoYXIpCisJCXsKKwkJICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCQkgIGNvbnRpbnVlOworCQl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gfihkZmEtPndvcmRfY2hhcltqXSAmIGRmYS0+c2JfY2hhcltqXSkpOworCSAgICAgIGVsc2UKKyNlbmRpZgorCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSB+ZGZhLT53b3JkX2NoYXJbal0pOworCSAgICAgIGlmICghYW55X3NldCkKKwkJY29udGludWU7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFRoZW4gZGl2aWRlIGBhY2NlcHRzJyBpbnRvIERGQSBzdGF0ZXMsIG9yIGNyZWF0ZSBhIG5ldworCSBzdGF0ZS4gIEFib3ZlLCB3ZSBtYWtlIHN1cmUgdGhhdCBhY2NlcHRzIGlzIG5vdCBlbXB0eS4gICovCisgICAgICBmb3IgKGogPSAwOyBqIDwgbmRlc3RzOyArK2opCisJeworCSAgYml0c2V0X3QgaW50ZXJzZWM7IC8qIEludGVyc2VjdGlvbiBzZXRzLCBzZWUgYmVsb3cuICAqLworCSAgYml0c2V0X3QgcmVtYWluczsKKwkgIC8qIEZsYWdzLCBzZWUgYmVsb3cuICAqLworCSAgYml0c2V0X3dvcmRfdCBoYXNfaW50ZXJzZWMsIG5vdF9zdWJzZXQsIG5vdF9jb25zdW1lZDsKKworCSAgLyogT3B0aW1pemF0aW9uLCBza2lwIGlmIHRoaXMgc3RhdGUgZG9lc24ndCBhY2NlcHQgdGhlIGNoYXJhY3Rlci4gICovCisJICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgIWJpdHNldF9jb250YWluIChkZXN0c19jaFtqXSwgbm9kZS0+b3ByLmMpKQorCSAgICBjb250aW51ZTsKKworCSAgLyogRW51bWVyYXRlIHRoZSBpbnRlcnNlY3Rpb24gc2V0IG9mIHRoaXMgc3RhdGUgYW5kIGBhY2NlcHRzJy4gICovCisJICBoYXNfaW50ZXJzZWMgPSAwOworCSAgZm9yIChrID0gMDsgayA8IEJJVFNFVF9XT1JEUzsgKytrKQorCSAgICBoYXNfaW50ZXJzZWMgfD0gaW50ZXJzZWNba10gPSBhY2NlcHRzW2tdICYgZGVzdHNfY2hbal1ba107CisJICAvKiBBbmQgc2tpcCBpZiB0aGUgaW50ZXJzZWN0aW9uIHNldCBpcyBlbXB0eS4gICovCisJICBpZiAoIWhhc19pbnRlcnNlYykKKwkgICAgY29udGludWU7CisKKwkgIC8qIFRoZW4gY2hlY2sgaWYgdGhpcyBzdGF0ZSBpcyBhIHN1YnNldCBvZiBgYWNjZXB0cycuICAqLworCSAgbm90X3N1YnNldCA9IG5vdF9jb25zdW1lZCA9IDA7CisJICBmb3IgKGsgPSAwOyBrIDwgQklUU0VUX1dPUkRTOyArK2spCisJICAgIHsKKwkgICAgICBub3Rfc3Vic2V0IHw9IHJlbWFpbnNba10gPSB+YWNjZXB0c1trXSAmIGRlc3RzX2NoW2pdW2tdOworCSAgICAgIG5vdF9jb25zdW1lZCB8PSBhY2NlcHRzW2tdID0gYWNjZXB0c1trXSAmIH5kZXN0c19jaFtqXVtrXTsKKwkgICAgfQorCisJICAvKiBJZiB0aGlzIHN0YXRlIGlzbid0IGEgc3Vic2V0IG9mIGBhY2NlcHRzJywgY3JlYXRlIGEKKwkgICAgIG5ldyBncm91cCBzdGF0ZSwgd2hpY2ggaGFzIHRoZSBgcmVtYWlucycuICovCisJICBpZiAobm90X3N1YnNldCkKKwkgICAgeworCSAgICAgIGJpdHNldF9jb3B5IChkZXN0c19jaFtuZGVzdHNdLCByZW1haW5zKTsKKwkgICAgICBiaXRzZXRfY29weSAoZGVzdHNfY2hbal0sIGludGVyc2VjKTsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKGRlc3RzX25vZGUgKyBuZGVzdHMsICZkZXN0c19ub2RlW2pdKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZXJyb3JfcmV0dXJuOworCSAgICAgICsrbmRlc3RzOworCSAgICB9CisKKwkgIC8qIFB1dCB0aGUgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgZ3JvdXAuICovCisJICByZXN1bHQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZkZXN0c19ub2RlW2pdLCBjdXJfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAocmVzdWx0IDwgMCwgMCkpCisJICAgIGdvdG8gZXJyb3JfcmV0dXJuOworCisJICAvKiBJZiBhbGwgY2hhcmFjdGVycyBhcmUgY29uc3VtZWQsIGdvIHRvIG5leHQgbm9kZS4gKi8KKwkgIGlmICghbm90X2NvbnN1bWVkKQorCSAgICBicmVhazsKKwl9CisgICAgICAvKiBTb21lIGNoYXJhY3RlcnMgcmVtYWluLCBjcmVhdGUgYSBuZXcgZ3JvdXAuICovCisgICAgICBpZiAoaiA9PSBuZGVzdHMpCisJeworCSAgYml0c2V0X2NvcHkgKGRlc3RzX2NoW25kZXN0c10sIGFjY2VwdHMpOworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xIChkZXN0c19ub2RlICsgbmRlc3RzLCBjdXJfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBlcnJvcl9yZXR1cm47CisJICArK25kZXN0czsKKwkgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJfQorICAgIH0KKyAgcmV0dXJuIG5kZXN0czsKKyBlcnJvcl9yZXR1cm46CisgIGZvciAoaiA9IDA7IGogPCBuZGVzdHM7ICsraikKKyAgICByZV9ub2RlX3NldF9mcmVlIChkZXN0c19ub2RlICsgaik7CisgIHJldHVybiAtMTsKK30KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBDaGVjayBob3cgbWFueSBieXRlcyB0aGUgbm9kZSBgZGZhLT5ub2Rlc1tub2RlX2lkeF0nIGFjY2VwdHMuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgYnl0ZXMgdGhlIG5vZGUgYWNjZXB0cy4KKyAgIFNUUl9JRFggaXMgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGlucHV0IHN0cmluZy4KKworICAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBub2RlcyB3aGljaCBjYW4gYWNjZXB0IG9uZSBjaGFyYWN0ZXIsIG9yCisgICBvbmUgY29sbGF0aW5nIGVsZW1lbnQgbGlrZSAnLicsICdbYS16XScsIG9wcG9zaXRlIHRvIHRoZSBvdGhlciBub2RlcworICAgY2FuIG9ubHkgYWNjZXB0IG9uZSBieXRlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisJCQkgY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2RlX2lkeDsKKyAgaW50IGNoYXJfbGVuLCBlbGVtX2xlbjsKKyAgaW50IGk7CisgIHdpbnRfdCB3YzsKKworICBpZiAoQkUgKG5vZGUtPnR5cGUgPT0gT1BfVVRGOF9QRVJJT0QsIDApKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCksIGQ7CisgICAgICBpZiAoQkUgKGMgPCAweGMyLCAxKSkKKwlyZXR1cm4gMDsKKworICAgICAgaWYgKHN0cl9pZHggKyAyID4gaW5wdXQtPmxlbikKKwlyZXR1cm4gMDsKKworICAgICAgZCA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCArIDEpOworICAgICAgaWYgKGMgPCAweGUwKQorCXJldHVybiAoZCA8IDB4ODAgfHwgZCA+IDB4YmYpID8gMCA6IDI7CisgICAgICBlbHNlIGlmIChjIDwgMHhmMCkKKwl7CisJICBjaGFyX2xlbiA9IDM7CisJICBpZiAoYyA9PSAweGUwICYmIGQgPCAweGEwKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmOCkKKwl7CisJICBjaGFyX2xlbiA9IDQ7CisJICBpZiAoYyA9PSAweGYwICYmIGQgPCAweDkwKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmYykKKwl7CisJICBjaGFyX2xlbiA9IDU7CisJICBpZiAoYyA9PSAweGY4ICYmIGQgPCAweDg4KQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmZSkKKwl7CisJICBjaGFyX2xlbiA9IDY7CisJICBpZiAoYyA9PSAweGZjICYmIGQgPCAweDg0KQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChzdHJfaWR4ICsgY2hhcl9sZW4gPiBpbnB1dC0+bGVuKQorCXJldHVybiAwOworCisgICAgICBmb3IgKGkgPSAxOyBpIDwgY2hhcl9sZW47ICsraSkKKwl7CisJICBkID0gcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBzdHJfaWR4ICsgaSk7CisJICBpZiAoZCA8IDB4ODAgfHwgZCA+IDB4YmYpCisJICAgIHJldHVybiAwOworCX0KKyAgICAgIHJldHVybiBjaGFyX2xlbjsKKyAgICB9CisKKyAgY2hhcl9sZW4gPSByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChpbnB1dCwgc3RyX2lkeCk7CisgIGlmIChub2RlLT50eXBlID09IE9QX1BFUklPRCkKKyAgICB7CisgICAgICBpZiAoY2hhcl9sZW4gPD0gMSkKKwlyZXR1cm4gMDsKKyAgICAgIC8qIEZJWE1FOiBJIGRvbid0IHRoaW5rIHRoaXMgaWYgaXMgbmVlZGVkLCBhcyBib3RoICdcbicKKwkgYW5kICdcMCcgYXJlIGNoYXJfbGVuID09IDEuICAqLworICAgICAgLyogJy4nIGFjY2VwdHMgYW55IG9uZSBjaGFyYWN0ZXIgZXhjZXB0IHRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzLiAgKi8KKyAgICAgIGlmICgoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSAmJgorCSAgIHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCkgPT0gJ1xuJykgfHwKKwkgICgoZGZhLT5zeW50YXggJiBSRV9ET1RfTk9UX05VTEwpICYmCisJICAgcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBzdHJfaWR4KSA9PSAnXDAnKSkKKwlyZXR1cm4gMDsKKyAgICAgIHJldHVybiBjaGFyX2xlbjsKKyAgICB9CisKKyAgZWxlbV9sZW4gPSByZV9zdHJpbmdfZWxlbV9zaXplX2F0IChpbnB1dCwgc3RyX2lkeCk7CisgIHdjID0gX19idG93YygqKGlucHV0LT5tYnMrc3RyX2lkeCkpOworICBpZiAoKChlbGVtX2xlbiA8PSAxICYmIGNoYXJfbGVuIDw9IDEpIHx8IGNoYXJfbGVuID09IDApICYmICh3YyAhPSBXRU9GICYmIHdjIDwgU0JDX01BWCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorICAgIHsKKyAgICAgIGNvbnN0IHJlX2NoYXJzZXRfdCAqY3NldCA9IG5vZGUtPm9wci5tYmNzZXQ7CisjIGlmZGVmIF9MSUJDCisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4KKwk9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoaW5wdXQpICsgc3RyX2lkeCk7CisgICAgICBpbnQgajsKKyAgICAgIHVpbnQzMl90IG5ydWxlczsKKyMgZW5kaWYgLyogX0xJQkMgKi8KKyAgICAgIGludCBtYXRjaF9sZW4gPSAwOworICAgICAgd2NoYXJfdCB3YyA9ICgoY3NldC0+bnJhbmdlcyB8fCBjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5tYmNoYXJzKQorCQkgICAgPyByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCBzdHJfaWR4KSA6IDApOworCisgICAgICAvKiBtYXRjaCB3aXRoIG11bHRpYnl0ZSBjaGFyYWN0ZXI/ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5tYmNoYXJzOyArK2kpCisJaWYgKHdjID09IGNzZXQtPm1iY2hhcnNbaV0pCisJICB7CisJICAgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworCSAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworCSAgfQorICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyYWN0ZXJfY2xhc3M/ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5jaGFyX2NsYXNzZXM7ICsraSkKKwl7CisJICB3Y3R5cGVfdCB3dCA9IGNzZXQtPmNoYXJfY2xhc3Nlc1tpXTsKKwkgIGlmIChfX2lzd2N0eXBlICh3Yywgd3QpKQorCSAgICB7CisJICAgICAgbWF0Y2hfbGVuID0gY2hhcl9sZW47CisJICAgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkgICAgfQorCX0KKworIyBpZmRlZiBfTElCQworICAgICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgICAgIGlmIChucnVsZXMgIT0gMCkKKwl7CisJICB1bnNpZ25lZCBpbnQgaW5fY29sbHNlcSA9IDA7CisJICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworCSAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhOworCSAgY29uc3QgY2hhciAqY29sbHNlcXdjOworCSAgLyogVGhpcyAjaW5jbHVkZSBkZWZpbmVzIGEgbG9jYWwgZnVuY3Rpb24hICAqLworIyAgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorCisJICAvKiBtYXRjaCB3aXRoIGNvbGxhdGluZ19zeW1ib2w/ICAqLworCSAgaWYgKGNzZXQtPm5jb2xsX3N5bXMpCisJICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5uY29sbF9zeW1zOyArK2kpCisJICAgIHsKKwkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsX3N5bSA9IGV4dHJhICsgY3NldC0+Y29sbF9zeW1zW2ldOworCSAgICAgIC8qIENvbXBhcmUgdGhlIGxlbmd0aCBvZiBpbnB1dCBjb2xsYXRpbmcgZWxlbWVudCBhbmQKKwkJIHRoZSBsZW5ndGggb2YgY3VycmVudCBjb2xsYXRpbmcgZWxlbWVudC4gICovCisJICAgICAgaWYgKCpjb2xsX3N5bSAhPSBlbGVtX2xlbikKKwkJY29udGludWU7CisJICAgICAgLyogQ29tcGFyZSBlYWNoIGJ5dGVzLiAgKi8KKwkgICAgICBmb3IgKGogPSAwOyBqIDwgKmNvbGxfc3ltOyBqKyspCisJCWlmIChwaW5bal0gIT0gY29sbF9zeW1bMSArIGpdKQorCQkgIGJyZWFrOworCSAgICAgIGlmIChqID09ICpjb2xsX3N5bSkKKwkJeworCQkgIC8qIE1hdGNoIGlmIGV2ZXJ5IGJ5dGVzIGlzIGVxdWFsLiAgKi8KKwkJICBtYXRjaF9sZW4gPSBqOworCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJCX0KKwkgICAgfQorCisJICBpZiAoY3NldC0+bnJhbmdlcykKKwkgICAgeworCSAgICAgIGlmIChlbGVtX2xlbiA8PSBjaGFyX2xlbikKKwkJeworCQkgIGNvbGxzZXF3YyA9IF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworCQkgIGluX2NvbGxzZXEgPSBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIHdjKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJaW5fY29sbHNlcSA9IGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChwaW4sIGVsZW1fbGVuKTsKKwkgICAgfQorCSAgLyogbWF0Y2ggd2l0aCByYW5nZSBleHByZXNzaW9uPyAgKi8KKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ucmFuZ2VzOyArK2kpCisJICAgIGlmIChjc2V0LT5yYW5nZV9zdGFydHNbaV0gPD0gaW5fY29sbHNlcQorCQkmJiBpbl9jb2xsc2VxIDw9IGNzZXQtPnJhbmdlX2VuZHNbaV0pCisJICAgICAgeworCQltYXRjaF9sZW4gPSBlbGVtX2xlbjsKKwkJZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkgICAgICB9CisKKwkgIC8qIG1hdGNoIHdpdGggZXF1aXZhbGVuY2VfY2xhc3M/ICAqLworCSAgaWYgKGNzZXQtPm5lcXVpdl9jbGFzc2VzKQorCSAgICB7CisJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSBwaW47CisJICAgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisJICAgICAgd2VpZ2h0cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisJICAgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisJICAgICAgaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisJICAgICAgaW50MzJfdCBpZHggPSBmaW5kaWR4ICgmY3ApOworCSAgICAgIGlmIChpZHggPiAwKQorCQlmb3IgKGkgPSAwOyBpIDwgY3NldC0+bmVxdWl2X2NsYXNzZXM7ICsraSkKKwkJICB7CisJCSAgICBpbnQzMl90IGVxdWl2X2NsYXNzX2lkeCA9IGNzZXQtPmVxdWl2X2NsYXNzZXNbaV07CisJCSAgICBzaXplX3Qgd2VpZ2h0X2xlbiA9IHdlaWdodHNbaWR4ICYgMHhmZmZmZmZdOworCQkgICAgaWYgKHdlaWdodF9sZW4gPT0gd2VpZ2h0c1tlcXVpdl9jbGFzc19pZHggJiAweGZmZmZmZl0KKwkJCSYmIChpZHggPj4gMjQpID09IChlcXVpdl9jbGFzc19pZHggPj4gMjQpKQorCQkgICAgICB7CisJCQlpbnQgY250ID0gMDsKKworCQkJaWR4ICY9IDB4ZmZmZmZmOworCQkJZXF1aXZfY2xhc3NfaWR4ICY9IDB4ZmZmZmZmOworCisJCQl3aGlsZSAoY250IDw9IHdlaWdodF9sZW4KKwkJCSAgICAgICAmJiAod2VpZ2h0c1tlcXVpdl9jbGFzc19pZHggKyAxICsgY250XQorCQkJCSAgID09IHdlaWdodHNbaWR4ICsgMSArIGNudF0pKQorCQkJICArK2NudDsKKwkJCWlmIChjbnQgPiB3ZWlnaHRfbGVuKQorCQkJICB7CisJCQkgICAgbWF0Y2hfbGVuID0gZWxlbV9sZW47CisJCQkgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgfQorCSAgICB9CisJfQorICAgICAgZWxzZQorIyBlbmRpZiAvKiBfTElCQyAqLworCXsKKwkgIC8qIG1hdGNoIHdpdGggcmFuZ2UgZXhwcmVzc2lvbj8gICovCisjaWYgX19HTlVDX18gPj0gMgorCSAgd2NoYXJfdCBjbXBfYnVmW10gPSB7TCdcMCcsIEwnXDAnLCB3YywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisjZWxzZQorCSAgd2NoYXJfdCBjbXBfYnVmW10gPSB7TCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisJICBjbXBfYnVmWzJdID0gd2M7CisjZW5kaWYKKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ucmFuZ2VzOyArK2kpCisJICAgIHsKKwkgICAgICBjbXBfYnVmWzBdID0gY3NldC0+cmFuZ2Vfc3RhcnRzW2ldOworCSAgICAgIGNtcF9idWZbNF0gPSBjc2V0LT5yYW5nZV9lbmRzW2ldOworCSAgICAgIGlmICh3Y3Njb2xsIChjbXBfYnVmLCBjbXBfYnVmICsgMikgPD0gMAorCQkgICYmIHdjc2NvbGwgKGNtcF9idWYgKyAyLCBjbXBfYnVmICsgNCkgPD0gMCkKKwkJeworCQkgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJCX0KKwkgICAgfQorCX0KKyAgICBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDoKKyAgICAgIGlmICghY3NldC0+bm9uX21hdGNoKQorCXJldHVybiBtYXRjaF9sZW47CisgICAgICBlbHNlCisJeworCSAgaWYgKG1hdGNoX2xlbiA+IDApCisJICAgIHJldHVybiAwOworCSAgZWxzZQorCSAgICByZXR1cm4gKGVsZW1fbGVuID4gY2hhcl9sZW4pID8gZWxlbV9sZW4gOiBjaGFyX2xlbjsKKwl9CisgICAgfQorICByZXR1cm4gMDsKK30KKworIyBpZmRlZiBfTElCQworc3RhdGljIHVuc2lnbmVkIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsIHNpemVfdCBtYnNfbGVuKQoreworICB1aW50MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICBpZiAobnJ1bGVzID09IDApCisgICAgeworICAgICAgaWYgKG1ic19sZW4gPT0gMSkKKwl7CisJICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisJICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwkgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisJICByZXR1cm4gY29sbHNlcVttYnNbMF1dOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQzMl90IGlkeDsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKyAgICAgIGludDMyX3QgZXh0cmFzaXplID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CICsgMSkgLSBleHRyYTsKKworICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBleHRyYXNpemU7KQorCXsKKwkgIGludCBtYnNfY250LCBmb3VuZCA9IDA7CisJICBpbnQzMl90IGVsZW1fbWJzX2xlbjsKKwkgIC8qIFNraXAgdGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJICBpZHggPSBpZHggKyBleHRyYVtpZHhdICsgMTsKKwkgIGVsZW1fbWJzX2xlbiA9IGV4dHJhW2lkeCsrXTsKKwkgIGlmIChtYnNfbGVuID09IGVsZW1fbWJzX2xlbikKKwkgICAgeworCSAgICAgIGZvciAobWJzX2NudCA9IDA7IG1ic19jbnQgPCBlbGVtX21ic19sZW47ICsrbWJzX2NudCkKKwkJaWYgKGV4dHJhW2lkeCArIG1ic19jbnRdICE9IG1ic1ttYnNfY250XSkKKwkJICBicmVhazsKKwkgICAgICBpZiAobWJzX2NudCA9PSBlbGVtX21ic19sZW4pCisJCS8qIEZvdW5kIHRoZSBlbnRyeS4gICovCisJCWZvdW5kID0gMTsKKwkgICAgfQorCSAgLyogU2tpcCB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCSAgaWR4ICs9IGVsZW1fbWJzX2xlbjsKKwkgIC8qIEFkanVzdCBmb3IgdGhlIGFsaWdubWVudC4gICovCisJICBpZHggPSAoaWR4ICsgMykgJiB+MzsKKwkgIC8qIFNraXAgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisJICBpZHggKz0gc2l6ZW9mICh1aW50MzJfdCk7CisJICAvKiBTa2lwIHRoZSB3aWRlIGNoYXIgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkgIGlkeCA9IGlkeCArIHNpemVvZiAodWludDMyX3QpICogKGV4dHJhW2lkeF0gKyAxKTsKKwkgIC8qIElmIHdlIGZvdW5kIHRoZSBlbnRyeSwgcmV0dXJuIHRoZSBzZXF1ZW5jZSB2YWx1ZS4gICovCisJICBpZiAoZm91bmQpCisJICAgIHJldHVybiAqKHVpbnQzMl90ICopIChleHRyYSArIGlkeCk7CisJICAvKiBTa2lwIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworCSAgaWR4ICs9IHNpemVvZiAodWludDMyX3QpOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9Cit9CisjIGVuZGlmIC8qIF9MSUJDICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworLyogQ2hlY2sgd2hldGhlciB0aGUgbm9kZSBhY2NlcHRzIHRoZSBieXRlIHdoaWNoIGlzIElEWC10aAorICAgYnl0ZSBvZiB0aGUgSU5QVVQuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfbm9kZV9hY2NlcHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSwKKwkJICAgaW50IGlkeCkKK3sKKyAgdW5zaWduZWQgY2hhciBjaDsKKyAgY2ggPSByZV9zdHJpbmdfYnl0ZV9hdCAoJm1jdHgtPmlucHV0LCBpZHgpOworICBzd2l0Y2ggKG5vZGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgaWYgKG5vZGUtPm9wci5jICE9IGNoKQorCXJldHVybiAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNJTVBMRV9CUkFDS0VUOgorICAgICAgaWYgKCFiaXRzZXRfY29udGFpbiAobm9kZS0+b3ByLnNiY3NldCwgY2gpKQorCXJldHVybiAwOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgIGNhc2UgT1BfVVRGOF9QRVJJT0Q6CisgICAgICBpZiAoY2ggPj0gMHg4MCkKKwlyZXR1cm4gMDsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisjZW5kaWYKKyAgICBjYXNlIE9QX1BFUklPRDoKKyAgICAgIGlmICgoY2ggPT0gJ1xuJyAmJiAhKG1jdHgtPmRmYS0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorCSAgfHwgKGNoID09ICdcMCcgJiYgKG1jdHgtPmRmYS0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMKSkpCisJcmV0dXJuIDA7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKG5vZGUtPmNvbnN0cmFpbnQpCisgICAgeworICAgICAgLyogVGhlIG5vZGUgaGFzIGNvbnN0cmFpbnRzLiAgQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBjb250ZXh0CisJIHNhdGlzZmllcyB0aGUgY29uc3RyYWludHMuICAqLworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBpZHgsCisJCQkJCQkgICBtY3R4LT5lZmxhZ3MpOworICAgICAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAobm9kZS0+Y29uc3RyYWludCwgY29udGV4dCkpCisJcmV0dXJuIDA7CisgICAgfQorCisgIHJldHVybiAxOworfQorCisvKiBFeHRlbmQgdGhlIGJ1ZmZlcnMsIGlmIHRoZSBidWZmZXJzIGhhdmUgcnVuIG91dC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJlX3N0cmluZ190ICpwc3RyID0gJm1jdHgtPmlucHV0OworCisgIC8qIEF2b2lkIG92ZXJmbG93LiAgKi8KKyAgaWYgKEJFIChJTlRfTUFYIC8gMiAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSA8PSBwc3RyLT5idWZzX2xlbiwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgLyogRG91YmxlIHRoZSBsZW5ndGhzIG9mIHRoZSBidWZmZXJzLiAgKi8KKyAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgcHN0ci0+YnVmc19sZW4gKiAyKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisKKyAgaWYgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIEFuZCBkb3VibGUgdGhlIGxlbmd0aCBvZiBzdGF0ZV9sb2cuICAqLworICAgICAgLyogWFhYIFdlIGhhdmUgbm8gaW5kaWNhdGlvbiBvZiB0aGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlci4gIElmIHRoaXMKKwkgYWxsb2NhdGlvbiBmYWlsIHdlIGhhdmUgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBzdGF0ZV9sb2cgYXJyYXkKKwkgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgc2l6ZS4gICovCisgICAgICByZV9kZmFzdGF0ZV90ICoqbmV3X2FycmF5ID0gcmVfcmVhbGxvYyAobWN0eC0+c3RhdGVfbG9nLCByZV9kZmFzdGF0ZV90ICosCisJCQkJCSAgICAgIHBzdHItPmJ1ZnNfbGVuICsgMSk7CisgICAgICBpZiAoQkUgKG5ld19hcnJheSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZyA9IG5ld19hcnJheTsKKyAgICB9CisKKyAgLyogVGhlbiByZWNvbnN0cnVjdCB0aGUgYnVmZmVycy4gICovCisgIGlmIChwc3RyLT5pY2FzZSkKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwl7CisJICByZXQgPSBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChwc3RyKTsKKwkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIHJldDsKKwl9CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJYnVpbGRfdXBwZXJfYnVmZmVyIChwc3RyKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKwl7CisJICBpZiAocHN0ci0+dHJhbnMgIT0gTlVMTCkKKwkgICAgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHBzdHIpOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworDAorLyogRnVuY3Rpb25zIGZvciBtYXRjaGluZyBjb250ZXh0LiAgKi8KKworLyogSW5pdGlhbGl6ZSBNQ1RYLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfaW5pdCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgZWZsYWdzLCBpbnQgbikKK3sKKyAgbWN0eC0+ZWZsYWdzID0gZWZsYWdzOworICBtY3R4LT5tYXRjaF9sYXN0ID0gLTE7CisgIGlmIChuID4gMCkKKyAgICB7CisgICAgICBtY3R4LT5ia3JlZl9lbnRzID0gcmVfbWFsbG9jIChzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSwgbik7CisgICAgICBtY3R4LT5zdWJfdG9wcyA9IHJlX21hbGxvYyAocmVfc3ViX21hdGNoX3RvcF90ICosIG4pOworICAgICAgaWYgKEJFIChtY3R4LT5ia3JlZl9lbnRzID09IE5VTEwgfHwgbWN0eC0+c3ViX3RvcHMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorICAvKiBBbHJlYWR5IHplcm8tZWQgYnkgdGhlIGNhbGxlci4KKyAgICAgZWxzZQorICAgICAgIG1jdHgtPmJrcmVmX2VudHMgPSBOVUxMOworICAgICBtY3R4LT5uYmtyZWZfZW50cyA9IDA7CisgICAgIG1jdHgtPm5zdWJfdG9wcyA9IDA7ICAqLworICBtY3R4LT5hYmtyZWZfZW50cyA9IG47CisgIG1jdHgtPm1heF9tYl9lbGVtX2xlbiA9IDE7CisgIG1jdHgtPmFzdWJfdG9wcyA9IG47CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2xlYW4gdGhlIGVudHJpZXMgd2hpY2ggZGVwZW5kIG9uIHRoZSBjdXJyZW50IGlucHV0IGluIE1DVFguCisgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCB3aGVuIHRoZSBtYXRjaGVyIGNoYW5nZXMgdGhlIHN0YXJ0IGluZGV4CisgICBvZiB0aGUgaW5wdXQsIG9yIGNoYW5nZXMgdGhlIGlucHV0IHN0cmluZy4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2NsZWFuIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpCit7CisgIGludCBzdF9pZHg7CisgIGZvciAoc3RfaWR4ID0gMDsgc3RfaWR4IDwgbWN0eC0+bnN1Yl90b3BzOyArK3N0X2lkeCkKKyAgICB7CisgICAgICBpbnQgc2xfaWR4OworICAgICAgcmVfc3ViX21hdGNoX3RvcF90ICp0b3AgPSBtY3R4LT5zdWJfdG9wc1tzdF9pZHhdOworICAgICAgZm9yIChzbF9pZHggPSAwOyBzbF9pZHggPCB0b3AtPm5sYXN0czsgKytzbF9pZHgpCisJeworCSAgcmVfc3ViX21hdGNoX2xhc3RfdCAqbGFzdCA9IHRvcC0+bGFzdHNbc2xfaWR4XTsKKwkgIHJlX2ZyZWUgKGxhc3QtPnBhdGguYXJyYXkpOworCSAgcmVfZnJlZSAobGFzdCk7CisJfQorICAgICAgcmVfZnJlZSAodG9wLT5sYXN0cyk7CisgICAgICBpZiAodG9wLT5wYXRoKQorCXsKKwkgIHJlX2ZyZWUgKHRvcC0+cGF0aC0+YXJyYXkpOworCSAgcmVfZnJlZSAodG9wLT5wYXRoKTsKKwl9CisgICAgICBmcmVlICh0b3ApOworICAgIH0KKworICBtY3R4LT5uc3ViX3RvcHMgPSAwOworICBtY3R4LT5uYmtyZWZfZW50cyA9IDA7Cit9CisKKy8qIEZyZWUgYWxsIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIE1DVFguICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK21hdGNoX2N0eF9mcmVlIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpCit7CisgIC8qIEZpcnN0LCBmcmVlIGFsbCB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBNQ1RYLT5TVUJfVE9QUy4gICovCisgIG1hdGNoX2N0eF9jbGVhbiAobWN0eCk7CisgIHJlX2ZyZWUgKG1jdHgtPnN1Yl90b3BzKTsKKyAgcmVfZnJlZSAobWN0eC0+YmtyZWZfZW50cyk7Cit9CisKKy8qIEFkZCBhIG5ldyBiYWNrcmVmZXJlbmNlIGVudHJ5IHRvIE1DVFguCisgICBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoYXQgY2FsbGVyIG5ldmVyIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGR1cGxpY2F0ZQorICAgZW50cnksIGFuZCBjYWxsIHdpdGggU1RSX0lEWCB3aGljaCBpc24ndCBzbWFsbGVyIHRoYW4gYW55IGV4aXN0aW5nIGVudHJ5LgorKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX2VudHJ5IChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBub2RlLCBpbnQgc3RyX2lkeCwgaW50IGZyb20sCisJCSAgICAgaW50IHRvKQoreworICBpZiAobWN0eC0+bmJrcmVmX2VudHMgPj0gbWN0eC0+YWJrcmVmX2VudHMpCisgICAgeworICAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkqIG5ld19lbnRyeTsKKyAgICAgIG5ld19lbnRyeSA9IHJlX3JlYWxsb2MgKG1jdHgtPmJrcmVmX2VudHMsIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5LAorCQkJICAgICAgbWN0eC0+YWJrcmVmX2VudHMgKiAyKTsKKyAgICAgIGlmIChCRSAobmV3X2VudHJ5ID09IE5VTEwsIDApKQorCXsKKwkgIHJlX2ZyZWUgKG1jdHgtPmJrcmVmX2VudHMpOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgbWN0eC0+YmtyZWZfZW50cyA9IG5ld19lbnRyeTsKKyAgICAgIG1lbXNldCAobWN0eC0+YmtyZWZfZW50cyArIG1jdHgtPm5ia3JlZl9lbnRzLCAnXDAnLAorCSAgICAgIHNpemVvZiAoc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkpICogbWN0eC0+YWJrcmVmX2VudHMpOworICAgICAgbWN0eC0+YWJrcmVmX2VudHMgKj0gMjsKKyAgICB9CisgIGlmIChtY3R4LT5uYmtyZWZfZW50cyA+IDAKKyAgICAgICYmIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMgLSAxXS5zdHJfaWR4ID09IHN0cl9pZHgpCisgICAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50cyAtIDFdLm1vcmUgPSAxOworCisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHNdLm5vZGUgPSBub2RlOworICBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzXS5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3ViZXhwX2Zyb20gPSBmcm9tOworICBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzXS5zdWJleHBfdG8gPSB0bzsKKworICAvKiBUaGlzIGlzIGEgY2FjaGUgdGhhdCBzYXZlcyBuZWdhdGl2ZSByZXN1bHRzIG9mIGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3MuCisgICAgIElmIGJpdCBOIGlzIGNsZWFyLCBtZWFucyB0aGF0IHRoaXMgZW50cnkgd29uJ3QgZXBzaWxvbi10cmFuc2l0aW9uIHRvCisgICAgIGFuIE9QX09QRU5fU1VCRVhQIG9yIE9QX0NMT1NFX1NVQkVYUCBmb3IgdGhlIE4rMS10aCBzdWJleHByZXNzaW9uLiAgSWYKKyAgICAgaXQgaXMgc2V0LCBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgd2lsbCByZWN1cnNlIGFuZCB0cnkgdG8gZmluZCBvbmUKKyAgICAgc3VjaCBub2RlLgorCisgICAgIEEgYmFja3JlZmVyZW5jZSBkb2VzIG5vdCBlcHNpbG9uLXRyYW5zaXRpb24gdW5sZXNzIGl0IGlzIGVtcHR5LCBzbyBzZXQKKyAgICAgdG8gYWxsIHplcm9zIGlmIEZST00gIT0gVE8uICAqLworICBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzXS5lcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwCisgICAgPSAoZnJvbSA9PSB0byA/IH4wIDogMCk7CisKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50cysrXS5tb3JlID0gMDsKKyAgaWYgKG1jdHgtPm1heF9tYl9lbGVtX2xlbiA8IHRvIC0gZnJvbSkKKyAgICBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPSB0byAtIGZyb207CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogU2VhcmNoIGZvciB0aGUgZmlyc3QgZW50cnkgd2hpY2ggaGFzIHRoZSBzYW1lIHN0cl9pZHgsIG9yIC0xIGlmIG5vbmUgaXMKKyAgIGZvdW5kLiAgTm90ZSB0aGF0IE1DVFgtPkJLUkVGX0VOVFMgaXMgYWxyZWFkeSBzb3J0ZWQgYnkgTUNUWC0+U1RSX0lEWC4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBzdHJfaWR4KQoreworICBpbnQgbGVmdCwgcmlnaHQsIG1pZCwgbGFzdDsKKyAgbGFzdCA9IHJpZ2h0ID0gbWN0eC0+bmJrcmVmX2VudHM7CisgIGZvciAobGVmdCA9IDA7IGxlZnQgPCByaWdodDspCisgICAgeworICAgICAgbWlkID0gbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMjsKKyAgICAgIGlmIChtY3R4LT5ia3JlZl9lbnRzW21pZF0uc3RyX2lkeCA8IHN0cl9pZHgpCisJbGVmdCA9IG1pZCArIDE7CisgICAgICBlbHNlCisJcmlnaHQgPSBtaWQ7CisgICAgfQorICBpZiAobGVmdCA8IGxhc3QgJiYgbWN0eC0+YmtyZWZfZW50c1tsZWZ0XS5zdHJfaWR4ID09IHN0cl9pZHgpCisgICAgcmV0dXJuIGxlZnQ7CisgIGVsc2UKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIFJlZ2lzdGVyIHRoZSBub2RlIE5PREUsIHdob3NlIHR5cGUgaXMgT1BfT1BFTl9TVUJFWFAsIGFuZCB3aGljaCBtYXRjaGVzCisgICBhdCBTVFJfSURYLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX3N1YnRvcCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbm9kZSwgaW50IHN0cl9pZHgpCit7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtY3R4LT5zdWJfdG9wcyAhPSBOVUxMKTsKKyAgYXNzZXJ0IChtY3R4LT5hc3ViX3RvcHMgPiAwKTsKKyNlbmRpZgorICBpZiAoQkUgKG1jdHgtPm5zdWJfdG9wcyA9PSBtY3R4LT5hc3ViX3RvcHMsIDApKQorICAgIHsKKyAgICAgIGludCBuZXdfYXN1Yl90b3BzID0gbWN0eC0+YXN1Yl90b3BzICogMjsKKyAgICAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKG1jdHgtPnN1Yl90b3BzLAorCQkJCQkJICAgcmVfc3ViX21hdGNoX3RvcF90ICosCisJCQkJCQkgICBuZXdfYXN1Yl90b3BzKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgbWN0eC0+c3ViX3RvcHMgPSBuZXdfYXJyYXk7CisgICAgICBtY3R4LT5hc3ViX3RvcHMgPSBuZXdfYXN1Yl90b3BzOworICAgIH0KKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzXSA9IGNhbGxvYyAoMSwgc2l6ZW9mIChyZV9zdWJfbWF0Y2hfdG9wX3QpKTsKKyAgaWYgKEJFIChtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdLT5ub2RlID0gbm9kZTsKKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzKytdLT5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBSZWdpc3RlciB0aGUgbm9kZSBOT0RFLCB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUCwgYW5kIHdoaWNoIG1hdGNoZXMKKyAgIGF0IFNUUl9JRFgsIHdob3NlIGNvcnJlc3BvbmRpbmcgT1BfT1BFTl9TVUJFWFAgaXMgU1VCX1RPUC4gICovCisKK3N0YXRpYyByZV9zdWJfbWF0Y2hfbGFzdF90ICoKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHJlX3N1Yl9tYXRjaF90b3BfdCAqc3VidG9wLCBpbnQgbm9kZSwgaW50IHN0cl9pZHgpCit7CisgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKm5ld19lbnRyeTsKKyAgaWYgKEJFIChzdWJ0b3AtPm5sYXN0cyA9PSBzdWJ0b3AtPmFsYXN0cywgMCkpCisgICAgeworICAgICAgaW50IG5ld19hbGFzdHMgPSAyICogc3VidG9wLT5hbGFzdHMgKyAxOworICAgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHN1YnRvcC0+bGFzdHMsCisJCQkJCQkgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqLAorCQkJCQkJICAgIG5ld19hbGFzdHMpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICBzdWJ0b3AtPmxhc3RzID0gbmV3X2FycmF5OworICAgICAgc3VidG9wLT5hbGFzdHMgPSBuZXdfYWxhc3RzOworICAgIH0KKyAgbmV3X2VudHJ5ID0gY2FsbG9jICgxLCBzaXplb2YgKHJlX3N1Yl9tYXRjaF9sYXN0X3QpKTsKKyAgaWYgKEJFIChuZXdfZW50cnkgIT0gTlVMTCwgMSkpCisgICAgeworICAgICAgc3VidG9wLT5sYXN0c1tzdWJ0b3AtPm5sYXN0c10gPSBuZXdfZW50cnk7CisgICAgICBuZXdfZW50cnktPm5vZGUgPSBub2RlOworICAgICAgbmV3X2VudHJ5LT5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgICAgICsrc3VidG9wLT5ubGFzdHM7CisgICAgfQorICByZXR1cm4gbmV3X2VudHJ5OworfQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfY3R4X2luaXQgKHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0cywKKwkgICAgICAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RzLCBpbnQgbGFzdF9ub2RlLCBpbnQgbGFzdF9zdHJfaWR4KQoreworICBzY3R4LT5zaWZ0ZWRfc3RhdGVzID0gc2lmdGVkX3N0czsKKyAgc2N0eC0+bGltaXRlZF9zdGF0ZXMgPSBsaW1pdGVkX3N0czsKKyAgc2N0eC0+bGFzdF9ub2RlID0gbGFzdF9ub2RlOworICBzY3R4LT5sYXN0X3N0cl9pZHggPSBsYXN0X3N0cl9pZHg7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZzY3R4LT5saW1pdHMpOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3NldGVudi5jIGIvY29tcGF0L3NldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDlmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc2V0ZW52LmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitpbnQgZ2l0c2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmVwbGFjZSkKK3sKKwlpbnQgb3V0OworCXNpemVfdCBuYW1lbGVuLCB2YWx1ZWxlbjsKKwljaGFyICplbnZzdHI7CisKKwlpZiAoIW5hbWUgfHwgc3RyY2hyKG5hbWUsICc9JykgfHwgIXZhbHVlKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghcmVwbGFjZSkgeworCQljaGFyICpvbGR2YWwgPSBOVUxMOworCQlvbGR2YWwgPSBnZXRlbnYobmFtZSk7CisJCWlmIChvbGR2YWwpIHJldHVybiAwOworCX0KKworCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJdmFsdWVsZW4gPSBzdHJsZW4odmFsdWUpOworCWVudnN0ciA9IG1hbGxvYyhzdF9hZGQzKG5hbWVsZW4sIHZhbHVlbGVuLCAyKSk7CisJaWYgKCFlbnZzdHIpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1jcHkoZW52c3RyLCBuYW1lLCBuYW1lbGVuKTsKKwllbnZzdHJbbmFtZWxlbl0gPSAnPSc7CisJbWVtY3B5KGVudnN0ciArIG5hbWVsZW4gKyAxLCB2YWx1ZSwgdmFsdWVsZW4pOworCWVudnN0cltuYW1lbGVuICsgdmFsdWVsZW4gKyAxXSA9IDA7CisKKwlvdXQgPSBwdXRlbnYoZW52c3RyKTsKKwkvKiBwdXRlbnYoMykgbWFrZXMgdGhlIGFyZ3VtZW50IHN0cmluZyBwYXJ0IG9mIHRoZSBlbnZpcm9ubWVudCwKKwkgKiBhbmQgY2hhbmdpbmcgdGhhdCBzdHJpbmcgbW9kaWZpZXMgdGhlIGVudmlyb25tZW50IC0tLSB3aGljaAorCSAqIG1lYW5zIHdlIGRvIG5vdCBvd24gdGhhdCBzdG9yYWdlIGFueW1vcmUuICBEbyBub3QgZnJlZQorCSAqIGVudnN0ci4KKwkgKi8KKworCXJldHVybiBvdXQ7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvc2hhMS1jaHVua2VkLmMgYi9jb21wYXQvc2hhMS1jaHVua2VkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkZmNmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9zaGExLWNodW5rZWQuYwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGdpdF9TSEExX1VwZGF0ZV9DaHVua2VkKHBsYXRmb3JtX1NIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc2l6ZV90IG5yOworCXNpemVfdCB0b3RhbCA9IDA7CisJY29uc3QgY2hhciAqY2RhdGEgPSAoY29uc3QgY2hhciopZGF0YTsKKworCXdoaWxlIChsZW4pIHsKKwkJbnIgPSBsZW47CisJCWlmIChuciA+IFNIQTFfTUFYX0JMT0NLX1NJWkUpCisJCQluciA9IFNIQTFfTUFYX0JMT0NLX1NJWkU7CisJCXBsYXRmb3JtX1NIQTFfVXBkYXRlKGMsIGNkYXRhLCBucik7CisJCXRvdGFsICs9IG5yOworCQljZGF0YSArPSBucjsKKwkJbGVuIC09IG5yOworCX0KKwlyZXR1cm4gdG90YWw7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvc2hhMS1jaHVua2VkLmggYi9jb21wYXQvc2hhMS1jaHVua2VkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyZGYyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9zaGExLWNodW5rZWQuaApAQCAtMCwwICsxLDIgQEAKKworaW50IGdpdF9TSEExX1VwZGF0ZV9DaHVua2VkKHBsYXRmb3JtX1NIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwpkaWZmIC0tZ2l0IGEvY29tcGF0L3NucHJpbnRmLmMgYi9jb21wYXQvc25wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjExNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3NucHJpbnRmLmMKQEAgLTAsMCArMSw2OSBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisvKgorICogVGhlIHNpemUgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgYXZhaWxhYmxlIHNwYWNlLCBpLmUuIGluY2x1ZGVzCisgKiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGU7IGJ1dCBXaW5kb3dzJ3MgdnNucHJpbnRmIHVzZXMgdGhlIGVudGlyZQorICogYnVmZmVyIGFuZCBhdm9pZHMgdGhlIHRyYWlsaW5nIE5VTCwgc2hvdWxkIHRoZSBidWZmZXIgYmUgZXhhY3RseQorICogYmlnIGVub3VnaCBmb3IgdGhlIHJlc3VsdC4gRGVmaW5pbmcgU05QUklOVEZfU0laRV9DT1JSIHRvIDEgd2lsbAorICogdGhlcmVmb3JlIHJlbW92ZSAxIGJ5dGUgZnJvbSB0aGUgcmVwb3J0ZWQgYnVmZmVyIHNpemUsIHNvIHdlCisgKiBhbHdheXMgaGF2ZSByb29tIGZvciBhIHRyYWlsaW5nIE5VTCBieXRlLgorICovCisjaWZuZGVmIFNOUFJJTlRGX1NJWkVfQ09SUgorI2lmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCA0KSAmJiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfVkVSIDwgMTkwMCkKKyNkZWZpbmUgU05QUklOVEZfU0laRV9DT1JSIDEKKyNlbHNlCisjZGVmaW5lIFNOUFJJTlRGX1NJWkVfQ09SUiAwCisjZW5kaWYKKyNlbmRpZgorCisjdW5kZWYgdnNucHJpbnRmCitpbnQgZ2l0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApCit7CisJdmFfbGlzdCBjcDsKKwljaGFyICpzOworCWludCByZXQgPSAtMTsKKworCWlmIChtYXhzaXplID4gMCkgeworCQl2YV9jb3B5KGNwLCBhcCk7CisJCXJldCA9IHZzbnByaW50ZihzdHIsIG1heHNpemUtU05QUklOVEZfU0laRV9DT1JSLCBmb3JtYXQsIGNwKTsKKwkJdmFfZW5kKGNwKTsKKwkJaWYgKHJldCA9PSBtYXhzaXplLTEpCisJCQlyZXQgPSAtMTsKKwkJLyogV2luZG93cyBkb2VzIG5vdCBOVUwtdGVybWluYXRlIGlmIHJlc3VsdCBmaWxscyBidWZmZXIgKi8KKwkJc3RyW21heHNpemUtMV0gPSAwOworCX0KKwlpZiAocmV0ICE9IC0xKQorCQlyZXR1cm4gcmV0OworCisJcyA9IE5VTEw7CisJaWYgKG1heHNpemUgPCAxMjgpCisJCW1heHNpemUgPSAxMjg7CisKKwl3aGlsZSAocmV0ID09IC0xKSB7CisJCW1heHNpemUgKj0gNDsKKwkJc3RyID0gcmVhbGxvYyhzLCBtYXhzaXplKTsKKwkJaWYgKCEgc3RyKQorCQkJYnJlYWs7CisJCXMgPSBzdHI7CisJCXZhX2NvcHkoY3AsIGFwKTsKKwkJcmV0ID0gdnNucHJpbnRmKHN0ciwgbWF4c2l6ZS1TTlBSSU5URl9TSVpFX0NPUlIsIGZvcm1hdCwgY3ApOworCQl2YV9lbmQoY3ApOworCQlpZiAocmV0ID09IG1heHNpemUtMSkKKwkJCXJldCA9IC0xOworCX0KKwlmcmVlKHMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBnaXRfc25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbWF4c2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJcmV0ID0gZ2l0X3ZzbnByaW50ZihzdHIsIG1heHNpemUsIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9jb21wYXQvc3RhdC5jIGIvY29tcGF0L3N0YXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQzOTMxCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3N0YXQuYwpAQCAtMCwwICsxLDQ4IEBACisjZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAyMDAxMTJMCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4gIC8qICpzdGF0LCBTX0lTKiAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBtb2RlX3QgICAgICAgKi8KKworc3RhdGljIGlubGluZSBtb2RlX3QgbW9kZV9uYXRpdmVfdG9fZ2l0KG1vZGVfdCBuYXRpdmVfbW9kZSkKK3sKKwltb2RlX3QgcGVybV9iaXRzID0gbmF0aXZlX21vZGUgJiAwNzc3NzsKKwlpZiAoU19JU1JFRyhuYXRpdmVfbW9kZSkpCisJCXJldHVybiAwMTAwMDAwIHwgcGVybV9iaXRzOworCWlmIChTX0lTRElSKG5hdGl2ZV9tb2RlKSkKKwkJcmV0dXJuIDAwNDAwMDAgfCBwZXJtX2JpdHM7CisJaWYgKFNfSVNMTksobmF0aXZlX21vZGUpKQorCQlyZXR1cm4gMDEyMDAwMCB8IHBlcm1fYml0czsKKwlpZiAoU19JU0JMSyhuYXRpdmVfbW9kZSkpCisJCXJldHVybiAwMDYwMDAwIHwgcGVybV9iaXRzOworCWlmIChTX0lTQ0hSKG5hdGl2ZV9tb2RlKSkKKwkJcmV0dXJuIDAwMjAwMDAgfCBwZXJtX2JpdHM7CisJaWYgKFNfSVNGSUZPKG5hdGl2ZV9tb2RlKSkKKwkJcmV0dXJuIDAwMTAwMDAgfCBwZXJtX2JpdHM7CisJaWYgKFNfSVNTT0NLKG5hdGl2ZV9tb2RlKSkKKwkJcmV0dXJuIDAxNDAwMDAgfCBwZXJtX2JpdHM7CisJLyogTm9uLXN0YW5kYXJkIHR5cGUgYml0cyB3ZXJlIGdpdmVuLiAqLworCXJldHVybiBwZXJtX2JpdHM7Cit9CisKK2ludCBnaXRfc3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCWludCByYyA9IHN0YXQocGF0aCwgYnVmKTsKKwlpZiAocmMgPT0gMCkKKwkJYnVmLT5zdF9tb2RlID0gbW9kZV9uYXRpdmVfdG9fZ2l0KGJ1Zi0+c3RfbW9kZSk7CisJcmV0dXJuIHJjOworfQorCitpbnQgZ2l0X2ZzdGF0KGludCBmZCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlpbnQgcmMgPSBmc3RhdChmZCwgYnVmKTsKKwlpZiAocmMgPT0gMCkKKwkJYnVmLT5zdF9tb2RlID0gbW9kZV9uYXRpdmVfdG9fZ2l0KGJ1Zi0+c3RfbW9kZSk7CisJcmV0dXJuIHJjOworfQorCitpbnQgZ2l0X2xzdGF0KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJaW50IHJjID0gbHN0YXQocGF0aCwgYnVmKTsKKwlpZiAocmMgPT0gMCkKKwkJYnVmLT5zdF9tb2RlID0gbW9kZV9uYXRpdmVfdG9fZ2l0KGJ1Zi0+c3RfbW9kZSk7CisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3N0cmNhc2VzdHIuYyBiL2NvbXBhdC9zdHJjYXNlc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4OTZkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9zdHJjYXNlc3RyLmMKQEAgLTAsMCArMSwyMiBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitjaGFyICpnaXRzdHJjYXNlc3RyKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCit7CisJaW50IG5sZW4gPSBzdHJsZW4obmVlZGxlKTsKKwlpbnQgaGxlbiA9IHN0cmxlbihoYXlzdGFjaykgLSBubGVuICsgMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBobGVuOyBpKyspIHsKKwkJaW50IGo7CisJCWZvciAoaiA9IDA7IGogPCBubGVuOyBqKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgYzEgPSBoYXlzdGFja1tpK2pdOworCQkJdW5zaWduZWQgY2hhciBjMiA9IG5lZWRsZVtqXTsKKwkJCWlmICh0b3VwcGVyKGMxKSAhPSB0b3VwcGVyKGMyKSkKKwkJCQlnb3RvIG5leHQ7CisJCX0KKwkJcmV0dXJuIChjaGFyICopIGhheXN0YWNrICsgaTsKKwluZXh0OgorCQk7CisJfQorCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3N0cmR1cC5jIGIvY29tcGF0L3N0cmR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmI5NzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RyZHVwLmMKQEAgLTAsMCArMSwxMSBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitjaGFyICpnaXRzdHJkdXAoY29uc3QgY2hhciAqczEpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzMSkgKyAxOworCWNoYXIgKnMyID0gbWFsbG9jKGxlbik7CisKKwlpZiAoczIpCisJCW1lbWNweShzMiwgczEsIGxlbik7CisJcmV0dXJuIHMyOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3N0cmxjcHkuYyBiL2NvbXBhdC9zdHJsY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyNGMzNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9zdHJsY3B5LmMKQEAgLTAsMCArMSwxMyBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitzaXplX3QgZ2l0c3RybGNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzaXplKQoreworCXNpemVfdCByZXQgPSBzdHJsZW4oc3JjKTsKKworCWlmIChzaXplKSB7CisJCXNpemVfdCBsZW4gPSAocmV0ID49IHNpemUpID8gc2l6ZSAtIDEgOiByZXQ7CisJCW1lbWNweShkZXN0LCBzcmMsIGxlbik7CisJCWRlc3RbbGVuXSA9ICdcMCc7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvc3RydG9pbWF4LmMgYi9jb21wYXQvc3RydG9pbWF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwOWVkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9zdHJ0b2ltYXguYwpAQCAtMCwwICsxLDEwIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludG1heF90IGdpdHN0cnRvaW1heCAoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisjaWYgZGVmaW5lZChOT19TVFJUT1VMTCkKKwlyZXR1cm4gc3RydG9sKG5wdHIsIGVuZHB0ciwgYmFzZSk7CisjZWxzZQorCXJldHVybiBzdHJ0b2xsKG5wdHIsIGVuZHB0ciwgYmFzZSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9zdHJ0b3VtYXguYyBiL2NvbXBhdC9zdHJ0b3VtYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQxMzUzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3N0cnRvdW1heC5jCkBAIC0wLDAgKzEsMTAgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKwordWludG1heF90IGdpdHN0cnRvdW1heCAoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisjaWYgZGVmaW5lZChOT19TVFJUT1VMTCkKKwlyZXR1cm4gc3RydG91bChucHRyLCBlbmRwdHIsIGJhc2UpOworI2Vsc2UKKwlyZXR1cm4gc3RydG91bGwobnB0ciwgZW5kcHRyLCBiYXNlKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3Rlcm1pbmFsLmMgYi9jb21wYXQvdGVybWluYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWJjYTAzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3Rlcm1pbmFsLmMKQEAgLTAsMCArMSwzODggQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJjb21wYXQvdGVybWluYWwuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfREVWX1RUWSkgfHwgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpCisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfdGVybSh2b2lkKTsKKworc3RhdGljIHZvaWQgcmVzdG9yZV90ZXJtX29uX3NpZ25hbChpbnQgc2lnKQoreworCXJlc3RvcmVfdGVybSgpOworCXNpZ2NoYWluX3BvcChzaWcpOworCXJhaXNlKHNpZyk7Cit9CisKKyNpZmRlZiBIQVZFX0RFVl9UVFkKKworI2RlZmluZSBJTlBVVF9QQVRIICIvZGV2L3R0eSIKKyNkZWZpbmUgT1VUUFVUX1BBVEggIi9kZXYvdHR5IgorCitzdGF0aWMgaW50IHRlcm1fZmQgPSAtMTsKK3N0YXRpYyBzdHJ1Y3QgdGVybWlvcyBvbGRfdGVybTsKKworc3RhdGljIHZvaWQgcmVzdG9yZV90ZXJtKHZvaWQpCit7CisJaWYgKHRlcm1fZmQgPCAwKQorCQlyZXR1cm47CisKKwl0Y3NldGF0dHIodGVybV9mZCwgVENTQUZMVVNILCAmb2xkX3Rlcm0pOworCWNsb3NlKHRlcm1fZmQpOworCXRlcm1fZmQgPSAtMTsKK30KKworc3RhdGljIGludCBkaXNhYmxlX2JpdHModGNmbGFnX3QgYml0cykKK3sKKwlzdHJ1Y3QgdGVybWlvcyB0OworCisJdGVybV9mZCA9IG9wZW4oIi9kZXYvdHR5IiwgT19SRFdSKTsKKwlpZiAodGNnZXRhdHRyKHRlcm1fZmQsICZ0KSA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlvbGRfdGVybSA9IHQ7CisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVzdG9yZV90ZXJtX29uX3NpZ25hbCk7CisKKwl0LmNfbGZsYWcgJj0gfmJpdHM7CisJaWYgKCF0Y3NldGF0dHIodGVybV9mZCwgVENTQUZMVVNILCAmdCkpCisJCXJldHVybiAwOworCitlcnJvcjoKKwljbG9zZSh0ZXJtX2ZkKTsKKwl0ZXJtX2ZkID0gLTE7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGRpc2FibGVfZWNobyh2b2lkKQoreworCXJldHVybiBkaXNhYmxlX2JpdHMoRUNITyk7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX25vbl9jYW5vbmljYWwodm9pZCkKK3sKKwlyZXR1cm4gZGlzYWJsZV9iaXRzKElDQU5PTiB8IEVDSE8pOworfQorCisjZWxpZiBkZWZpbmVkKEdJVF9XSU5ET1dTX05BVElWRSkKKworI2RlZmluZSBJTlBVVF9QQVRIICJDT05JTiQiCisjZGVmaW5lIE9VVFBVVF9QQVRIICJDT05PVVQkIgorI2RlZmluZSBGT1JDRV9URVhUICJ0IgorCitzdGF0aWMgaW50IHVzZV9zdHR5ID0gMTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3R0eV9yZXN0b3JlID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgSEFORExFIGhjb25pbiA9IElOVkFMSURfSEFORExFX1ZBTFVFOworc3RhdGljIERXT1JEIGNtb2RlOworCitzdGF0aWMgdm9pZCByZXN0b3JlX3Rlcm0odm9pZCkKK3sKKwlpZiAodXNlX3N0dHkpIHsKKwkJaW50IGk7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCWlmIChzdHR5X3Jlc3RvcmUubnIgPT0gMCkKKwkJCXJldHVybjsKKworCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJzdHR5Iik7CisJCWZvciAoaSA9IDA7IGkgPCBzdHR5X3Jlc3RvcmUubnI7IGkrKykKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgc3R0eV9yZXN0b3JlLml0ZW1zW2ldLnN0cmluZyk7CisJCXJ1bl9jb21tYW5kKCZjcCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZzdHR5X3Jlc3RvcmUsIDApOworCQlyZXR1cm47CisJfQorCisJaWYgKGhjb25pbiA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJcmV0dXJuOworCisJU2V0Q29uc29sZU1vZGUoaGNvbmluLCBjbW9kZSk7CisJQ2xvc2VIYW5kbGUoaGNvbmluKTsKKwloY29uaW4gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKK30KKworc3RhdGljIGludCBkaXNhYmxlX2JpdHMoRFdPUkQgYml0cykKK3sKKwlpZiAodXNlX3N0dHkpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAic3R0eSIpOworCisJCWlmIChiaXRzICYgRU5BQkxFX0xJTkVfSU5QVVQpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3R0eV9yZXN0b3JlLCAiaWNhbm9uIik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItaWNhbm9uIik7CisJCX0KKworCQlpZiAoYml0cyAmIEVOQUJMRV9FQ0hPX0lOUFVUKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0dHlfcmVzdG9yZSwgImVjaG8iKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi1lY2hvIik7CisJCX0KKworCQlpZiAoYml0cyAmIEVOQUJMRV9QUk9DRVNTRURfSU5QVVQpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3R0eV9yZXN0b3JlLCAiLWlnbmJyayIpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdHR5X3Jlc3RvcmUsICJpbnRyIik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0dHlfcmVzdG9yZSwgIl5jIik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJpZ25icmsiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgImludHIiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIiIpOworCQl9CisKKwkJaWYgKHJ1bl9jb21tYW5kKCZjcCkgPT0gMCkKKwkJCXJldHVybiAwOworCisJCS8qIGBzdHR5YCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQ7IGFjY2VzcyB0aGUgQ29uc29sZSBkaXJlY3RseSAqLworCQl1c2Vfc3R0eSA9IDA7CisJfQorCisJaGNvbmluID0gQ3JlYXRlRmlsZSgiQ09OSU4kIiwgR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwKKwkgICAgRklMRV9TSEFSRV9SRUFELCBOVUxMLCBPUEVOX0VYSVNUSU5HLAorCSAgICBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOworCWlmIChoY29uaW4gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybiAtMTsKKworCUdldENvbnNvbGVNb2RlKGhjb25pbiwgJmNtb2RlKTsKKwlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZXN0b3JlX3Rlcm1fb25fc2lnbmFsKTsKKwlpZiAoIVNldENvbnNvbGVNb2RlKGhjb25pbiwgY21vZGUgJiB+Yml0cykpIHsKKwkJQ2xvc2VIYW5kbGUoaGNvbmluKTsKKwkJaGNvbmluID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNhYmxlX2VjaG8odm9pZCkKK3sKKwlyZXR1cm4gZGlzYWJsZV9iaXRzKEVOQUJMRV9FQ0hPX0lOUFVUKTsKK30KKworc3RhdGljIGludCBlbmFibGVfbm9uX2Nhbm9uaWNhbCh2b2lkKQoreworCXJldHVybiBkaXNhYmxlX2JpdHMoRU5BQkxFX0VDSE9fSU5QVVQgfCBFTkFCTEVfTElORV9JTlBVVCB8IEVOQUJMRV9QUk9DRVNTRURfSU5QVVQpOworfQorCisvKgorICogT3ZlcnJpZGUgYGdldGNoYXIoKWAsIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHVzZQorICogYFJlYWRGaWxlKClgLgorICoKKyAqIFRoaXMgcG9zZXMgYSBwcm9ibGVtIHdoZW4gd2Ugd2FudCB0byBzZWUgd2hldGhlciB0aGUgc3RhbmRhcmQKKyAqIGlucHV0IGhhcyBtb3JlIGNoYXJhY3RlcnMsIGFzIHRoZSBkZWZhdWx0IG9mIEdpdCBmb3IgV2luZG93cyBpcyB0byBzdGFydCB0aGUKKyAqIEJhc2ggaW4gYSBNaW5UVFksIHdoaWNoIHVzZXMgYSBuYW1lZCBwaXBlIHRvIGVtdWxhdGUgYSBwdHksIGluIHdoaWNoIGNhc2UKKyAqIG91ciBgcG9sbCgpYCBlbXVsYXRpb24gY2FsbHMgYFBlZWtOYW1lZFBpcGUoKWAsIHdoaWNoIHNlZW1zIHRvIHJlcXVpcmUKKyAqIGBSZWFkRmlsZSgpYCB0byBiZSBjYWxsZWQgZmlyc3QgdG8gd29yayBwcm9wZXJseSAoaXQgb25seSByZXBvcnRzIDAKKyAqIGF2YWlsYWJsZSBieXRlcywgb3RoZXJ3aXNlKS4KKyAqCisgKiBTbyBsZXQncyBqdXN0IG92ZXJyaWRlIGBnZXRjaGFyKClgIHdpdGggYSB2ZXJzaW9uIGJhY2tlZCBieSBgUmVhZEZpbGUoKWAgYW5kCisgKiBnbyBvdXIgbWVycnkgd2F5cyBmcm9tIGhlcmUuCisgKi8KK3N0YXRpYyBpbnQgbWluZ3dfZ2V0Y2hhcih2b2lkKQoreworCURXT1JEIHJlYWQgPSAwOworCXVuc2lnbmVkIGNoYXIgY2g7CisKKwlpZiAoIVJlYWRGaWxlKEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKSwgJmNoLCAxLCAmcmVhZCwgTlVMTCkpCisJCXJldHVybiBFT0Y7CisKKwlpZiAoIXJlYWQpIHsKKwkJZXJyb3IoIlVuZXhwZWN0ZWQgMCByZWFkIik7CisJCXJldHVybiBFT0Y7CisJfQorCisJcmV0dXJuIGNoOworfQorI2RlZmluZSBnZXRjaGFyIG1pbmd3X2dldGNoYXIKKworI2VuZGlmCisKKyNpZm5kZWYgRk9SQ0VfVEVYVAorI2RlZmluZSBGT1JDRV9URVhUCisjZW5kaWYKKworY2hhciAqZ2l0X3Rlcm1pbmFsX3Byb21wdChjb25zdCBjaGFyICpwcm9tcHQsIGludCBlY2hvKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByOworCUZJTEUgKmlucHV0X2ZoLCAqb3V0cHV0X2ZoOworCisJaW5wdXRfZmggPSBmb3BlbihJTlBVVF9QQVRILCAiciIgRk9SQ0VfVEVYVCk7CisJaWYgKCFpbnB1dF9maCkKKwkJcmV0dXJuIE5VTEw7CisKKwlvdXRwdXRfZmggPSBmb3BlbihPVVRQVVRfUEFUSCwgInciIEZPUkNFX1RFWFQpOworCWlmICghb3V0cHV0X2ZoKSB7CisJCWZjbG9zZShpbnB1dF9maCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICghZWNobyAmJiBkaXNhYmxlX2VjaG8oKSkgeworCQlmY2xvc2UoaW5wdXRfZmgpOworCQlmY2xvc2Uob3V0cHV0X2ZoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZnB1dHMocHJvbXB0LCBvdXRwdXRfZmgpOworCWZmbHVzaChvdXRwdXRfZmgpOworCisJciA9IHN0cmJ1Zl9nZXRsaW5lX2xmKCZidWYsIGlucHV0X2ZoKTsKKwlpZiAoIWVjaG8pIHsKKwkJcHV0YygnXG4nLCBvdXRwdXRfZmgpOworCQlmZmx1c2gob3V0cHV0X2ZoKTsKKwl9CisKKwlyZXN0b3JlX3Rlcm0oKTsKKwlmY2xvc2UoaW5wdXRfZmgpOworCWZjbG9zZShvdXRwdXRfZmgpOworCisJaWYgKHIgPT0gRU9GKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gYnVmLmJ1ZjsKK30KKworLyoKKyAqIFRoZSBgaXNfa25vd25fZXNjYXBlX3NlcXVlbmNlKClgIGZ1bmN0aW9uIHJldHVybnMgMSBpZiB0aGUgcGFzc2VkIHN0cmluZworICogY29ycmVzcG9uZHMgdG8gYW4gRXNjYXBlIHNlcXVlbmNlIHRoYXQgdGhlIHRlcm1pbmFsIGNhcGFiaWxpdGllcyBjb250YWlucy4KKyAqCisgKiBUbyBhdm9pZCBkZXBlbmRpbmcgb24gbmN1cnNlcyBvciBvdGhlciBwbGF0Zm9ybS1zcGVjaWZpYyBsaWJyYXJpZXMsIHdlIHJlbHkKKyAqIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgYGluZm9jbXBgIGV4ZWN1dGFibGUgdG8gZG8gdGhlIGpvYiBmb3IgdXMgKGZhaWxpbmcKKyAqIHNpbGVudGx5IGlmIHRoZSBwcm9ncmFtIGlzIG5vdCBhdmFpbGFibGUgb3IgcmVmdXNlZCB0byBydW4pLgorICovCitzdHJ1Y3QgZXNjYXBlX3NlcXVlbmNlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwljaGFyIHNlcXVlbmNlW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGludCBzZXF1ZW5jZV9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqaGFzaG1hcF9jbXBfZm5fZGF0YSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBlc2NhcGVfc2VxdWVuY2VfZW50cnkgKmUxLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGVzY2FwZV9zZXF1ZW5jZV9lbnRyeSAqZTIsCisJCQkgICAgICBjb25zdCB2b2lkICprZXlkYXRhKQoreworCXJldHVybiBzdHJjbXAoZTEtPnNlcXVlbmNlLCBrZXlkYXRhID8ga2V5ZGF0YSA6IGUyLT5zZXF1ZW5jZSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfa25vd25fZXNjYXBlX3NlcXVlbmNlKGNvbnN0IGNoYXIgKnNlcXVlbmNlKQoreworCXN0YXRpYyBzdHJ1Y3QgaGFzaG1hcCBzZXF1ZW5jZXM7CisJc3RhdGljIGludCBpbml0aWFsaXplZDsKKworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWNoYXIgKnAsICplb2w7CisKKwkJaGFzaG1hcF9pbml0KCZzZXF1ZW5jZXMsIChoYXNobWFwX2NtcF9mbilzZXF1ZW5jZV9lbnRyeV9jbXAsCisJCQkgICAgIE5VTEwsIDApOworCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJpbmZvY21wIiwgIi1MIiwgIi0xIiwgTlVMTCk7CisJCWlmIChwaXBlX2NvbW1hbmQoJmNwLCBOVUxMLCAwLCAmYnVmLCAwLCBOVUxMLCAwKSkKKwkJCXN0cmJ1Zl9zZXRsZW4oJmJ1ZiwgMCk7CisKKwkJZm9yIChlb2wgPSBwID0gYnVmLmJ1ZjsgKnA7IHAgPSBlb2wgKyAxKSB7CisJCQlwID0gc3RyY2hyKHAsICc9Jyk7CisJCQlpZiAoIXApCisJCQkJYnJlYWs7CisJCQlwKys7CisJCQllb2wgPSBzdHJjaHJudWwocCwgJ1xuJyk7CisKKwkJCWlmIChzdGFydHNfd2l0aChwLCAiXFxFIikpIHsKKwkJCQljaGFyICpjb21tYSA9IG1lbWNocihwLCAnLCcsIGVvbCAtIHApOworCQkJCXN0cnVjdCBlc2NhcGVfc2VxdWVuY2VfZW50cnkgKmU7CisKKwkJCQlwWzBdID0gJ14nOworCQkJCXBbMV0gPSAnWyc7CisJCQkJRkxFWF9BTExPQ19NRU0oZSwgc2VxdWVuY2UsIHAsIGNvbW1hIC0gcCk7CisJCQkJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnRyeSwKKwkJCQkJCSAgIHN0cmhhc2goZS0+c2VxdWVuY2UpKTsKKwkJCQloYXNobWFwX2FkZCgmc2VxdWVuY2VzLCAmZS0+ZW50cnkpOworCQkJfQorCQkJaWYgKCEqZW9sKQorCQkJCWJyZWFrOworCQl9CisJCWluaXRpYWxpemVkID0gMTsKKwl9CisKKwlyZXR1cm4gISFoYXNobWFwX2dldF9mcm9tX2hhc2goJnNlcXVlbmNlcywgc3RyaGFzaChzZXF1ZW5jZSksIHNlcXVlbmNlKTsKK30KKworaW50IHJlYWRfa2V5X3dpdGhvdXRfZWNobyhzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RhdGljIGludCB3YXJuaW5nX2Rpc3BsYXllZDsKKwlpbnQgY2g7CisKKwlpZiAod2FybmluZ19kaXNwbGF5ZWQgfHwgZW5hYmxlX25vbl9jYW5vbmljYWwoKSA8IDApIHsKKwkJaWYgKCF3YXJuaW5nX2Rpc3BsYXllZCkgeworCQkJd2FybmluZygicmVhZGluZyBzaW5nbGUga2V5c3Ryb2tlcyBub3Qgc3VwcG9ydGVkIG9uICIKKwkJCQkidGhpcyBwbGF0Zm9ybTsgcmVhZGluZyBsaW5lIGluc3RlYWQiKTsKKwkJCXdhcm5pbmdfZGlzcGxheWVkID0gMTsKKwkJfQorCisJCXJldHVybiBzdHJidWZfZ2V0bGluZShidWYsIHN0ZGluKTsKKwl9CisKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwljaCA9IGdldGNoYXIoKTsKKwlpZiAoY2ggPT0gRU9GKSB7CisJCXJlc3RvcmVfdGVybSgpOworCQlyZXR1cm4gRU9GOworCX0KKwlzdHJidWZfYWRkY2goYnVmLCBjaCk7CisKKwlpZiAoY2ggPT0gJ1wwMzMnIC8qIEVTQyAqLykgeworCQkvKgorCQkgKiBXZSBhcmUgbW9zdCBsaWtlbHkgbG9va2luZyBhdCBhbiBFc2NhcGUgc2VxdWVuY2UuIExldCdzIHRyeQorCQkgKiB0byByZWFkIG1vcmUgYnl0ZXMsIHdhaXRpbmcgYXQgbW9zdCBoYWxmIGEgc2Vjb25kLCBhc3N1bWluZworCQkgKiB0aGF0IHRoZSBzZXF1ZW5jZSBpcyBjb21wbGV0ZSBpZiB3ZSBkaWQgbm90IHJlY2VpdmUgYW55IGJ5dGUKKwkJICogd2l0aGluIHRoYXQgdGltZS4KKwkJICoKKwkJICogU3RhcnQgYnkgcmVwbGFjaW5nIHRoZSBFc2NhcGUgYnl0ZSB3aXRoIF5bICovCisJCXN0cmJ1Zl9zcGxpY2UoYnVmLCBidWYtPmxlbiAtIDEsIDEsICJeWyIsIDIpOworCisJCS8qCisJCSAqIFF1ZXJ5IHRoZSB0ZXJtaW5hbCBjYXBhYmlsaXRpZXMgb25jZSBhYm91dCBhbGwgdGhlIEVzY2FwZQorCQkgKiBzZXF1ZW5jZXMgaXQga25vd3MgYWJvdXQsIHNvIHRoYXQgd2UgY2FuIGF2b2lkIHdhaXRpbmcgZm9yCisJCSAqIGhhbGYgYSBzZWNvbmQgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIHNlcXVlbmNlIGlzIGNvbXBsZXRlLgorCQkgKi8KKwkJd2hpbGUgKCFpc19rbm93bl9lc2NhcGVfc2VxdWVuY2UoYnVmLT5idWYpKSB7CisJCQlzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsgLmZkID0gMCwgLmV2ZW50cyA9IFBPTExJTiB9OworCisJCQlpZiAocG9sbCgmcGZkLCAxLCA1MDApIDwgMSkKKwkJCQlicmVhazsKKworCQkJY2ggPSBnZXRjaGFyKCk7CisJCQlpZiAoY2ggPT0gRU9GKQorCQkJCXJldHVybiAwOworCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgY2gpOworCQl9CisJfQorCisJcmVzdG9yZV90ZXJtKCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKK2NoYXIgKmdpdF90ZXJtaW5hbF9wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgZWNobykKK3sKKwlyZXR1cm4gZ2V0cGFzcyhwcm9tcHQpOworfQorCitpbnQgcmVhZF9rZXlfd2l0aG91dF9lY2hvKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlzdGF0aWMgaW50IHdhcm5pbmdfZGlzcGxheWVkOworCWNvbnN0IGNoYXIgKnJlczsKKworCWlmICghd2FybmluZ19kaXNwbGF5ZWQpIHsKKwkJd2FybmluZygicmVhZGluZyBzaW5nbGUga2V5c3Ryb2tlcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgIgorCQkJInBsYXRmb3JtOyByZWFkaW5nIGxpbmUgaW5zdGVhZCIpOworCQl3YXJuaW5nX2Rpc3BsYXllZCA9IDE7CisJfQorCisJcmVzID0gZ2V0cGFzcygiIik7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJaWYgKCFyZXMpCisJCXJldHVybiBFT0Y7CisJc3RyYnVmX2FkZHN0cihidWYsIHJlcyk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3Rlcm1pbmFsLmggYi9jb21wYXQvdGVybWluYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWQ1MmI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3Rlcm1pbmFsLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIENPTVBBVF9URVJNSU5BTF9ICisjZGVmaW5lIENPTVBBVF9URVJNSU5BTF9ICisKK2NoYXIgKmdpdF90ZXJtaW5hbF9wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgZWNobyk7CisKKy8qIFJlYWQgYSBzaW5nbGUga2V5c3Ryb2tlLCB3aXRob3V0IGVjaG9pbmcgaXQgdG8gdGhlIHRlcm1pbmFsICovCitpbnQgcmVhZF9rZXlfd2l0aG91dF9lY2hvKHN0cnVjdCBzdHJidWYgKmJ1Zik7CisKKyNlbmRpZiAvKiBDT01QQVRfVEVSTUlOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3Vuc2V0ZW52LmMgYi9jb21wYXQvdW5zZXRlbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjVmZDcwCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3Vuc2V0ZW52LmMKQEAgLTAsMCArMSwyNyBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCit2b2lkIGdpdHVuc2V0ZW52IChjb25zdCBjaGFyICpuYW1lKQoreworI2lmICFkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgICBleHRlcm4gY2hhciAqKmVudmlyb247CisjZW5kaWYKKyAgICAgaW50IHNyYywgZHN0OworICAgICBzaXplX3Qgbm1sbjsKKworICAgICBubWxuID0gc3RybGVuKG5hbWUpOworCisgICAgIGZvciAoc3JjID0gZHN0ID0gMDsgZW52aXJvbltzcmNdOyArK3NyYykgeworCSAgc2l6ZV90IGVubG47CisJICBlbmxuID0gc3RybGVuKGVudmlyb25bc3JjXSk7CisJICBpZiAoZW5sbiA+IG5tbG4pIHsKKyAgICAgICAgICAgICAgIC8qIG1pZ2h0IG1hdGNoLCBhbmQgY2FuIHRlc3QgZm9yICc9JyBzYWZlbHkgKi8KKwkgICAgICAgaWYgKDAgPT0gc3RybmNtcCAoZW52aXJvbltzcmNdLCBuYW1lLCBubWxuKQorCQkgICAmJiAnPScgPT0gZW52aXJvbltzcmNdW25tbG5dKQorCQkgICAgLyogbWF0Y2hlcywgc28gc2tpcCAqLworCQkgICAgY29udGludWU7CisJICB9CisJICBlbnZpcm9uW2RzdF0gPSBlbnZpcm9uW3NyY107CisJICArK2RzdDsKKyAgICAgfQorICAgICBlbnZpcm9uW2RzdF0gPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvLmdpdGlnbm9yZSBiL2NvbXBhdC92Y2J1aWxkLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4Yjc5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvdmNwa2cvCisvTVNWQy1ERUZTLUdFTgorL1ZDUEtHLURFRlMKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL1JFQURNRSBiL2NvbXBhdC92Y2J1aWxkL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjZkYWJmCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvUkVBRE1FCkBAIC0wLDAgKzEsMTEyIEBACitUaGUgU3RlcHMgdG8gQnVpbGQgR2l0IHdpdGggVlMyMDE1IG9yIFZTMjAxNyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKzEuIEluc3RhbGwgdGhlICJ2Y3BrZyIgb3BlbiBzb3VyY2UgcGFja2FnZSBtYW5hZ2VyIGFuZCBidWlsZCBlc3NlbnRpYWwKKyAgIHRoaXJkLXBhcnR5IGxpYnJhcmllcy4gIFRoZSBzdGVwcyBmb3IgdGhpcyBoYXZlIGJlZW4gY2FwdHVyZWQgaW4gYQorICAgc2V0IG9mIGNvbnZlbmllbmNlIHNjcmlwdHMuICBUaGVzZSBjYW4gYmUgcnVuIGZyb20gYSBzdG9jayBDb21tYW5kCisgICBQcm9tcHQgb3IgZnJvbSBhbiBTREsgYmFzaCB3aW5kb3c6CisKKyAgICQgY2QgPHJlcG9fcm9vdD4KKyAgICQgLi9jb21wYXQvdmNidWlsZC92Y3BrZ19pbnN0YWxsLmJhdAorCisgICBUaGUgdmNwa2cgdG9vbHMgYW5kIGFsbCBvZiB0aGUgdGhpcmQtcGFydHkgc291cmNlcyB3aWxsIGJlIGluc3RhbGxlZAorICAgaW4gdGhpcyBmb2xkZXI6CisgICAgICA8cmVwb19yb290Pi9jb21wYXQvdmNidWlsZC92Y3BrZy8KKworICAgQSBmaWxlIHdpbGwgYmUgY3JlYXRlZCB3aXRoIGEgc2V0IG9mIE1ha2VmaWxlIG1hY3JvcyBwb2ludGluZyB0byBhCisgICB1bmlmaWVkICJpbmNsdWRlIiwgImxpYiIsIGFuZCAiYmluIiBkaXJlY3RvcnkgKHJlbGVhc2UgYW5kIGRlYnVnKSBmb3IKKyAgIGFsbCBvZiB0aGUgcmVxdWlyZWQgcGFja2FnZXMuICBUaGlzIGZpbGUgd2lsbCBiZSBpbmNsdWRlZCBieSB0aGUgbWFpbgorICAgTWFrZWZpbGU6CisgICAgICA8cmVwb19yb290Pi9jb21wYXQvdmNidWlsZC9NU1ZDLURFRlMtR0VOCisKKzIuIE9QVElPTkFMTFkgY29weSB0aGUgdGhpcmQtcGFydHkgKi5kbGwgYW5kICoucGRiIGZpbGVzIGludG8gdGhlIHJlcG8KKyAgIHJvb3QgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcnVuIGFuZCBkZWJ1ZyBnaXQuZXhlIHdpdGhvdXQgaGF2aW5nIHRvCisgICBtYW5pcHVsYXRlIHlvdXIgUEFUSC4gIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZvciBkZWJ1ZyBzZXNzaW9ucyBpbgorICAgVmlzdWFsIFN0dWRpby4KKworICAgVXNlIE9ORSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zIHdoaWNoIHNob3VsZCBtYXRjaCBob3cgeW91IHdhbnQgdG8KKyAgIGNvbXBpbGUgZ2l0LmV4ZS4KKworICAgJCAuL2NvbXBhdC92Y2J1aWxkL3ZjcGtnX2NvcHlfcGFja2FnZXMuYmF0IGRlYnVnCisgICAkIC4vY29tcGF0L3ZjYnVpbGQvdmNwa2dfY29weV9wYWNrYWdlcy5iYXQgcmVsZWFzZQorCiszLiBCdWlsZCBnaXQgdXNpbmcgTVNWQyBmcm9tIGFuIFNESyBiYXNoIHdpbmRvdyB1c2luZyBvbmUgb2YgdGhlCisgICBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICQgbWFrZSBNU1ZDPTEKKyAgICQgbWFrZSBNU1ZDPTEgREVCVUc9MQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FsdGVybmF0aXZlbHksIHJ1biBgbWFrZSB2Y3hwcm9qYCBhbmQgdGhlbiBsb2FkIHRoZSBnZW5lcmF0ZWQgYGdpdC5zbG5gIGluCitWaXN1YWwgU3R1ZGlvLiBUaGUgaW5pdGlhbCBidWlsZCB3aWxsIGluc3RhbGwgdGhlIHZjcGtnIHN5c3RlbSBhbmQgYnVpbGQgdGhlCitkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseS4gVGhpcyB3aWxsIHRha2UgYSB3aGlsZS4KKworSW5zdGVhZCBvZiBnZW5lcmF0aW5nIHRoZSBgZ2l0LnNsbmAgZmlsZSB5b3Vyc2VsZiAod2hpY2ggcmVxdWlyZXMgYSBmdWxsIEdpdAorZm9yIFdpbmRvd3MgU0RLKSwgeW91IG1heSB3YW50IHRvIGNvbnNpZGVyIGZldGNoaW5nIHRoZSBgdnMvbWFzdGVyYCBicmFuY2ggb2YKK2h0dHBzOi8vZ2l0aHViLmNvbS9naXQtZm9yLXdpbmRvd3MvZ2l0IGluc3RlYWQgKHdoaWNoIGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseQordmlhIENJIHJ1bm5pbmcgYG1ha2UgdmN4cHJvamApLiBUaGUgYHZzL21hc3RlcmAgYnJhbmNoIGRvZXMgbm90IHJlcXVpcmUgYSBHaXQKK2ZvciBXaW5kb3dzIHRvIGJ1aWxkLCBidXQgeW91IGNhbiBydW4gdGhlIHRlc3Qgc2NyaXB0cyBpbiBhIHJlZ3VsYXIgR2l0IEJhc2guCisKK05vdGUgdGhhdCBgbWFrZSB2Y3hwcm9qYCB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGFuZCBjb21taXQgdGhlIGdlbmVyYXRlZCBgLnNsbmAKK2FuZCBgLnZjeHByb2pgIGZpbGVzIHRvIHRoZSByZXBvLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBidWlsZGluZyBhCitmdWxseS10ZXN0YWJsZSBHaXQgaW4gVmlzdWFsIFN0dWRpbywgd2hlcmUgYSByZWd1bGFyIEdpdCBCYXNoIGNhbiBiZSB1c2VkIHRvCitydW4gdGhlIHRlc3Qgc2NyaXB0cyAoYXMgb3Bwb3NlZCB0byBhIGZ1bGwgR2l0IGZvciBXaW5kb3dzIFNESyk6IGEgbnVtYmVyIG9mCitidWlsZCB0YXJnZXRzLCBzdWNoIGFzIEdpdCBjb21tYW5kcyBpbXBsZW1lbnRlZCBhcyBVbml4IHNoZWxsIHNjcmlwdHMgKHdoZXJlCitgQEBTSEVMTF9QQVRIQEBgIGFuZCBvdGhlciBwbGFjZWhvbGRlcnMgYXJlIGludGVycG9sYXRlZCkgcmVxdWlyZSBhIGZ1bGwtYmxvd24KK0dpdCBmb3IgV2luZG93cyBTREsgKHdoaWNoIGlzIGFib3V0IDEweCB0aGUgc2l6ZSBvZiBhIHJlZ3VsYXIgR2l0IGZvciBXaW5kb3dzCitpbnN0YWxsYXRpb24pLgorCitJZiB5b3VyIHBsYW4gaXMgdG8gb3BlbiBhIFB1bGwgUmVxdWVzdCB3aXRoIEdpdCBmb3IgV2luZG93cywgaXQgaXMgYSBnb29kIGlkZWEKK3RvIGRyb3AgdGhpcyBjb21taXQgYmVmb3JlIHN1Ym1pdHRpbmcuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBTdGVwcyBvZiBCdWlsZCBHaXQgd2l0aCBWUzIwMDgKKworMS4gWW91IG5lZWQgdGhlIGJ1aWxkIGVudmlyb25tZW50LCB3aGljaCBjb250YWlucyB0aGUgR2l0IGRlcGVuZGVuY2llcworICAgdG8gYmUgYWJsZSB0byBjb21waWxlLCBsaW5rIGFuZCBydW4gR2l0IHdpdGggTVNWQy4KKworICAgWW91IGNhbiBlaXRoZXIgdXNlIHRoZSBiaW5hcnkgcmVwb3NpdG9yeToKKworICAgICAgIFdXVzogaHR0cDovL3JlcG8ub3IuY3ovdy9tc3ZjZ2l0LmdpdAorICAgICAgIEdpdDogZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovbXN2Y2dpdC5naXQKKyAgICAgICBaaXA6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvbXN2Y2dpdC5naXQ/YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj16aXAKKworICAgYW5kIGNhbGwgdGhlIHNldHVwXzMyYml0X2Vudi5jbWQgYmF0Y2ggc2NyaXB0IGJlZm9yZSBjb21waWxpbmcgR2l0LAorICAgKHNlZSByZXBvL3BhY2thZ2UgUkVBRE1FIGZvciBkZXRhaWxzKSwgb3IgdGhlIHNvdXJjZSByZXBvc2l0b3J5OgorCisgICAgICAgV1dXOiBodHRwOi8vcmVwby5vci5jei93L2dpdGJ1aWxkLmdpdAorICAgICAgIEdpdDogZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovZ2l0YnVpbGQuZ2l0CisgICAgICAgWmlwOiAoTm9uZSwgYXMgaXQncyBhIHByb2plY3Qgd2l0aCBzdWJtb2R1bGVzKQorCisgICBhbmQgYnVpbGQgdGhlIHN1cHBvcnQgbGlicyBhcyBpbnN0cnVjdGVkIGluIHRoYXQgcmVwby9wYWNrYWdlLgorCisyLiBFbnN1cmUgeW91IGhhdmUgdGhlIG1zeXNnaXQgZW52aXJvbm1lbnQgaW4geW91ciBwYXRoLCBzbyB5b3UgaGF2ZQorICAgR05VIE1ha2UsIGJhc2ggYW5kIHBlcmwgYXZhaWxhYmxlLgorCisgICAgICAgV1dXOiBodHRwOi8vcmVwby5vci5jei93L21zeXNnaXQuZ2l0CisgICAgICAgR2l0OiBnaXQgY2xvbmUgZ2l0Oi8vcmVwby5vci5jei9tc3lzZ2l0LmdpdAorICAgICAgIFppcDogaHR0cDovL3JlcG8ub3IuY3ovdy9tc3lzZ2l0LmdpdD9hPXNuYXBzaG90O2g9bWFzdGVyO3NmPXppcAorCisgICBUaGlzIGVudmlyb25tZW50IGlzIGFsc28gbmVlZGVkIHdoZW4geW91IHVzZSB0aGUgcmVzdWx0aW5nCisgICBleGVjdXRhYmxlcywgc2luY2UgR2l0IG1pZ2h0IG5lZWQgdG8gcnVuIHNjcmlwdHMgd2hpY2ggYXJlIHBhcnQgb2YKKyAgIHRoZSBnaXQgb3BlcmF0aW9ucy4KKworMy4gSW5zaWRlIEdpdCdzIGRpcmVjdG9yeSBydW4gdGhlIGNvbW1hbmQ6CisgICAgICAgbWFrZSBjb21tYW5kLWxpc3QuaAorICAgdG8gZ2VuZXJhdGUgdGhlIGNvbW1hbmQtbGlzdC5oIGZpbGUgbmVlZGVkIHRvIGNvbXBpbGUgZ2l0LgorCis0LiBUaGVuIGVpdGhlciBidWlsZCBHaXQgd2l0aCB0aGUgR05VIE1ha2UgTWFrZWZpbGUgaW4gdGhlIEdpdCBwcm9qZWN0cworICAgcm9vdAorICAgICAgIG1ha2UgTVNWQz0xCisgICBvciBnZW5lcmF0ZSBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uL3Byb2plY3RzICguc2xuLy52Y3Byb2opIHdpdGggdGhlCisgICBjb21tYW5kCisgICAgICAgcGVybCBjb250cmliL2J1aWxkc3lzdGVtcy9nZW5lcmF0ZSAtZyBWY3Byb2oKKyAgIGFuZCBvcGVuIGFuZCBidWlsZCB0aGUgc29sdXRpb24gd2l0aCB0aGUgSURFCisgICAgICAgZGV2ZW52IGdpdC5zbG4gL3VzZWVudgorICAgb3IgYnVpbGQgd2l0aCB0aGUgSURFIGJ1aWxkIGVuZ2luZSBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICBkZXZlbnYgZ2l0LnNsbiAvdXNlZW52IC9idWlsZCAiUmVsZWFzZXxXaW4zMiIKKyAgIFRoZSAvdXNlZW52IG9wdGlvbiBpcyByZXF1aXJlZCwgc28gVmlzdWFsIFN0dWRpbyBwaWNrcyB1cCB0aGUKKyAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHN1cHBvcnQgbGlicmFyaWVzIHJlcXVpcmVkIHRvIGJ1aWxkCisgICBHaXQsIHdoaWNoIHlvdSBzZXQgdXAgaW4gc3RlcCAxLgorCitEb25lIQpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0IGIvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNWQyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9maW5kX3ZzX2Vudi5iYXQKQEAgLTAsMCArMSwxNjggQEAKK0BFQ0hPIE9GRgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBZb3UgY2FuIHVzZSBlaXRoZXIgR0NDICh0aGUgZGVmYXVsdCkgb3IgTVNWQyB0byBidWlsZCBnaXQKK1JFTSB1c2luZyB0aGUgR0lULVNESyBjb21tYW5kIGxpbmUgdG9vbHMuCitSRU0gICAgICAgICQgbWFrZQorUkVNICAgICAgICAkIG1ha2UgTVNWQz0xCitSRU0KK1JFTSBHSVQtU0RLIEJBU0ggd2luZG93cyBpbmhlcml0IGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIGFsbCBvZgorUkVNIHRoZSBiaW4vbGliL2luY2x1ZGUgcGF0aHMgZm9yIEdDQy4gIEl0IERPRVMgTk9UIGluaGVyaXQgdmFsdWVzCitSRU0gZm9yIHRoZSBjb3JyZXNwb25kaW5nIE1TVkMgdG9vbHMuCitSRU0KK1JFTSBEdXJpbmcgbm9ybWFsIChub24tZ2l0KSBXaW5kb3dzIGRldmVsb3BtZW50LCB5b3UgbGF1bmNoIG9uZQorUkVNIG9mIHRoZSBwcm92aWRlZCAiZGV2ZWxvcGVyIGNvbW1hbmQgcHJvbXB0cyIgdG8gc2V0IGVudmlyb25tZW50CitSRU0gdmFyaWFibGVzIGZvciB0aGUgTVNWQyB0b29scy4KK1JFTQorUkVNIFRoZXJlZm9yZSwgdG8gYWxsb3cgTVNWQyBjb21tYW5kIGxpbmUgYnVpbGRzIG9mIGdpdCBmcm9tIEJBU0gKK1JFTSBhbmQgTUFLRSwgd2UgbXVzdCBibGVuZCB0aGVzZSB0d28gZGlmZmVyZW50IHdvcmxkcy4gIFRoaXMgc2NyaXB0CitSRU0gYXR0ZW1wdHMgdG8gZG8gdGhhdC4KK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSRU0gVGhpcyBCQVQgZmlsZSBzdGFydHMgaW4gYSBwbGFpbiAobm9uLWRldmVsb3BlcikgY29tbWFuZCBwcm9tcHQsCitSRU0gc2VhcmNoZXMgZm9yIHRoZSAiYmVzdCIgY29tbWFuZCBwcm9tcHQgc2V0dXAgc2NyaXB0LCBpbnN0YWxscworUkVNIGl0IGludG8gdGhlIGN1cnJlbnQgQ01EIHByb2Nlc3MsIGFuZCBleHBvcnRzIHRoZSB2YXJpb3VzIE1TVkMKK1JFTSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHVzZSBieSBNQUtFLgorUkVNCitSRU0gVGhlIG91dHB1dCBvZiB0aGlzIHNjcmlwdCBzaG91bGQgYmUgd3JpdHRlbiB0byBhIG1ha2UgImluY2x1ZGUKK1JFTSBmaWxlIiBhbmQgcmVmZXJlbmNlZCBieSB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLgorUkVNCitSRU0gU2VlICJjb25maWcubWFrLnVuYW1lIiAobG9vayBmb3IgY29tcGF0L3ZjYnVpbGQvTVNWQy1ERUZTLUdFTikuCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVNIFRoZSBwcm92aWRlZCBjb21tYW5kIHByb21wdHMgYXJlIGN1c3RvbSB0byBlYWNoIFZTIHJlbGVhc2UgYW5kCitSRU0gZmlsbGVkIHdpdGggbG90cyBvZiBpbnRlcm5hbCBrbm93bGVkZ2UgKHN1Y2ggYXMgUmVnaXN0cnkgc2V0dGluZ3MpOworUkVNIGV2ZW4gdGhlaXIgbmFtZXMgdmFyeSBieSByZWxlYXNlLCBzbyBpdCBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIHVzCitSRU0gdG8gbG9vayBpbnNpZGUgdGhlbS4gIFJhdGhlciwganVzdCBydW4gdGhlbSBpbiBhIHN1Ym9yZGluYXRlCitSRU0gcHJvY2VzcyBhbmQgZXh0cmFjdCB0aGUgc2V0dGluZ3Mgd2UgbmVlZC4KK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSRU0KK1JFTSBDdXJyZW50IChWUzIwMTcgYW5kIGJleW9uZCkKK1JFTSAtLS0tLS0tLS0tLS0tLS0tLS0tCitSRU0gVmlzdWFsIFN0dWRpbyAyMDE3IGludHJvZHVjZWQgYSBuZXcgaW5zdGFsbGF0aW9uIGxheW91dCBhbmQKK1JFTSBzdXBwb3J0IGZvciBzaWRlLWJ5LXNpZGUgaW5zdGFsbGF0aW9uIG9mIG11bHRpcGxlIHZlcnNpb25zIG9mCitSRU0gVlMyMDE3LiAgRnVydGhlcm1vcmUsIHRoZXNlIGNhbiBhbGwgY29leGlzdCB3aXRoIGluc3RhbGxhdGlvbnMKK1JFTSBvZiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBWUyAod2hpY2ggaGF2ZSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50CitSRU0gbGF5b3V0IG9uIGRpc2spLgorUkVNCitSRU0gVlMyMDE3IFVwZGF0ZSAyIGludHJvZHVjZWQgYSAidnN3aGVyZS5leGUiIGNvbW1hbmQ6CitSRU0gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC92c3doZXJlCitSRU0gaHR0cHM6Ly9ibG9ncy5tc2RuLm1pY3Jvc29mdC5jb20vaGVhdGhzLzIwMTcvMDIvMjUvdnN3aGVyZS1hdmFpbGFibGUvCitSRU0gaHR0cHM6Ly9ibG9ncy5tc2RuLm1pY3Jvc29mdC5jb20vdmNibG9nLzIwMTcvMDMvMDYvZmluZGluZy10aGUtdmlzdWFsLWMtY29tcGlsZXItdG9vbHMtaW4tdmlzdWFsLXN0dWRpby0yMDE3LworUkVNCitSRU0gVlMyMDE1CitSRU0gLS0tLS0tCitSRU0gVmlzdWFsIFN0dWRpbyAyMDE1IHVzZXMgdGhlIHRyYWRpdGlvbmFsIFZjVmFyc0FsbC4KK1JFTQorUkVNIEVhcmxpZXIgVmVyc2lvbnMKK1JFTSAtLS0tLS0tLS0tLS0tLS0tCitSRU0gQ3VycmVudGx5IHVuc3VwcG9ydGVkLgorUkVNCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVNIE5vdGU6IFRocm91Z2hvdXQgdGhpcyBzY3JpcHQgd2UgdXNlICJkaXIgPHBhdGg+ICYmIDxjbWQ+IiByYXRoZXIKK1JFTSB0aGFuICJpZiBleGlzdCA8cGF0aD4iIGJlY2F1c2Ugb2Ygc2NyaXB0IHByb2JsZW1zIHdpdGggcGF0aG5hbWVzCitSRU0gY29udGFpbmluZyBzcGFjZXMuCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSRU0gU2FuaXRpemUgUEFUSCB0byBwcmV2ZW50IGdpdC1zZGsgcGF0aHMgZnJvbSBjb25mdXNpbmcgIndtaWMuZXhlIgorUkVNIChjYWxsZWQgaW50ZXJuYWxseSBpbiBzb21lIG9mIHRoZSBzeXN0ZW0gQkFUIGZpbGVzKS4KK1NFVCBQQVRIPSVTeXN0ZW1Sb290JVxzeXN0ZW0zMjslU3lzdGVtUm9vdCU7JVN5c3RlbVJvb3QlXFN5c3RlbTMyXFdiZW07CisKK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzpjdXJyZW50CisgICBTRVQgdnNfd2hlcmU9QzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1xJbnN0YWxsZXJcdnN3aGVyZS5leGUKKyAgIGRpciAiJXZzX3doZXJlJSIgPm51bCAyPm51bCAmJiBHT1RPIGhhdmVfdnNfd2hlcmUKKyAgIEdPVE8gbm90XzIwMTcKKworOmhhdmVfdnNfd2hlcmUKKyAgIFJFTSBUcnkgdG8gdXNlIFZzV2hlcmUgdG8gZ2V0IHRoZSBsb2NhdGlvbiBvZiBWc0RldkNtZC4KKworICAgUkVNIEtlZXAgVnNEZXZDbWQgZnJvbSBjZCdpbmcgYXdheS4KKyAgIFNFVCBWU0NNRF9TVEFSVF9ESVI9LgorCisgICBSRU0gR2V0IHRoZSByb290IG9mIHRoZSBWUyBwcm9kdWN0IGluc3RhbGxhdGlvbi4KKyAgIEZPUiAvRiAidXNlYmFja3EgdG9rZW5zPSoiICUlaSBJTiAoYCIldnNfd2hlcmUlIiAtbGF0ZXN0IC1yZXF1aXJlcyBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLldvcmtsb2FkLk5hdGl2ZURlc2t0b3AgLXByb3BlcnR5IGluc3RhbGxhdGlvblBhdGhgKSBETyBAU0VUIHZzX2lwPSUlaQorCisgICBTRVQgdnNfZGV2Y21kPSV2c19pcCVcQ29tbW9uN1xUb29sc1xWc0RldkNtZC5iYXQKKyAgIGRpciAiJXZzX2RldmNtZCUiID5udWwgMj5udWwgJiYgR09UTyBoYXZlX3ZzX2RldmNtZAorICAgR09UTyBub3RfMjAxNworCis6aGF2ZV92c19kZXZjbWQKKyAgIFJFTSBVc2UgVnNEZXZDbWQgdG8gc2V0dXAgdGhlIGVudmlyb25tZW50IG9mIHRoaXMgcHJvY2Vzcy4KKyAgIFJFTSBTZXR1cCBDTCBmb3IgYnVpbGRpbmcgNjQtYml0IGFwcHMgdXNpbmcgNjQtYml0IHRvb2xzLgorICAgQGNhbGwgIiV2c19kZXZjbWQlIiAtbm9fbG9nbyAtYXJjaD14NjQgLWhvc3RfYXJjaD14NjQKKworICAgU0VUIHRndD0lVlNDTURfQVJHX1RHVF9BUkNIJQorCisgICBTRVQgbW49JVZDVG9vbHNJbnN0YWxsRGlyJQorICAgU0VUIG1zdmNfaW5jbHVkZXM9LUkiJW1uJUlOQ0xVREUiCisgICBTRVQgbXN2Y19saWJzPS1MIiVtbiVsaWJcJXRndCUiCisgICBTRVQgbXN2Y19iaW5fZGlyPSVtbiViaW5cSG9zdCVWU0NNRF9BUkdfSE9TVF9BUkNIJVwldGd0JQorCisgICBTRVQgc2RrX2Rpcj0lV2luZG93c1Nka0RpciUKKyAgIFNFVCBzZGtfdmVyPSVXaW5kb3dzU0RLVmVyc2lvbiUKKyAgIFNFVCBzaT0lc2RrX2RpciVJbmNsdWRlXCVzZGtfdmVyJQorICAgU0VUIHNka19pbmNsdWRlcz0tSSIlc2kldWNydCIgLUkiJXNpJXVtIiAtSSIlc2klc2hhcmVkIgorICAgU0VUIHNsPSVzZGtfZGlyJWxpYlwlc2RrX3ZlciUKKyAgIFNFVCBzZGtfbGlicz0tTCIlc2wldWNydFwldGd0JSIgLUwiJXNsJXVtXCV0Z3QlIgorCisgICBTRVQgdnNfdmVyPSVWaXN1YWxTdHVkaW9WZXJzaW9uJQorCisgICBHT1RPIHByaW50X3ZhcnMKKworUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOm5vdF8yMDE3CisgICBSRU0gU2VlIGlmIFZTMjAxNSBpcyBpbnN0YWxsZWQuCisKKyAgIFNFVCB2c18yMDE1X2JhdD1DOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDE0LjBcVkNcdmN2YXJzYWxsLmJhdAorICAgZGlyICIldnNfMjAxNV9iYXQlIiA+bnVsIDI+bnVsICYmIEdPVE8gaGF2ZV92c18yMDE1CisgICBHT1RPIG5vdF8yMDE1CisKKzpoYXZlX3ZzXzIwMTUKKyAgIFJFTSBVc2UgVmNWYXJzQWxsIGxpa2UgdGhlICJ4NjQgTmF0aXZlIiBjb21tYW5kIHByb21wdC4KKyAgIFJFTSBTZXR1cCBDTCBmb3IgYnVpbGRpbmcgNjQtYml0IGFwcHMgdXNpbmcgNjQtYml0IHRvb2xzLgorICAgQGNhbGwgIiV2c18yMDE1X2JhdCUiIGFtZDY0CisKKyAgIFJFTSBOb3RlIHRoYXQgaW4gVlMyMDE1IHRoZXkgdXNlICJ4NjQiIGluIHNvbWUgY29udGV4dHMgYW5kICJhbWQ2NCIgaW4gb3RoZXJzLgorICAgU0VUIG1uPUM6XFByb2dyYW0gRmlsZXMgKHg4NilcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMTQuMFxWQ1wKKyAgIFNFVCBtc3ZjX2luY2x1ZGVzPS1JIiVtbiVJTkNMVURFIgorICAgU0VUIG1zdmNfbGlicz0tTCIlbW4lbGliXGFtZDY0IgorICAgU0VUIG1zdmNfYmluX2Rpcj0lbW4lYmluXGFtZDY0CisKKyAgIFNFVCBzZGtfZGlyPSVXaW5kb3dzU2RrRGlyJQorICAgU0VUIHNka192ZXI9JVdpbmRvd3NTREtWZXJzaW9uJQorICAgU0VUIHNpPSVzZGtfZGlyJUluY2x1ZGVcJXNka192ZXIlCisgICBTRVQgc2RrX2luY2x1ZGVzPS1JIiVzaSV1Y3J0IiAtSSIlc2kldW0iIC1JIiVzaSVzaGFyZWQiIC1JIiVzaSV3aW5ydCIKKyAgIFNFVCBzbD0lc2RrX2RpciVsaWJcJXNka192ZXIlCisgICBTRVQgc2RrX2xpYnM9LUwiJXNsJXVjcnRceDY0IiAtTCIlc2wldW1ceDY0IgorCisgICBTRVQgdnNfdmVyPSVWaXN1YWxTdHVkaW9WZXJzaW9uJQorCisgICBHT1RPIHByaW50X3ZhcnMKKworUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOm5vdF8yMDE1CisgICBlY2hvICJFUlJPUjogdW5zdXBwb3J0ZWQgVlMgdmVyc2lvbiAob2xkZXIgdGhhbiBWUzIwMTUpIiA+JjIKKyAgIEVYSVQgL0IgMQorCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis6cHJpbnRfdmFycworICAgUkVNIER1bXAgdGhlIGVzc2VudGlhbCB2YXJzIHRvIHN0ZG91dCB0byBhbGxvdyB0aGUgbWFpbgorICAgUkVNIE1ha2VmaWxlIHRvIGluY2x1ZGUgaXQuICBTZWUgY29uZmlnLm1hay51bmFtZS4KKyAgIFJFTSBJbmNsdWRlIERPUy1zdHlsZSBhbmQgQkFTSC1zdHlsZSBwYXRoIGZvciBiaW4gZGlyLgorCisgICBlY2hvIG1zdmNfYmluX2Rpcj0lbXN2Y19iaW5fZGlyJQorICAgU0VUIFgxPSVtc3ZjX2Jpbl9kaXI6Qzo9L0MlCisgICBTRVQgWDI9JVgxOlw9LyUKKyAgIGVjaG8gbXN2Y19iaW5fZGlyX21zeXM9JVgyJQorCisgICBlY2hvIG1zdmNfaW5jbHVkZXM9JW1zdmNfaW5jbHVkZXMlCisgICBlY2hvIG1zdmNfbGlicz0lbXN2Y19saWJzJQorCisgICBlY2hvIHNka19pbmNsdWRlcz0lc2RrX2luY2x1ZGVzJQorICAgZWNobyBzZGtfbGlicz0lc2RrX2xpYnMlCisKKyAgIGVjaG8gdnNfdmVyPSV2c192ZXIlCisKKyAgIEVYSVQgL0IgMApkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvcGFyYW0uaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3BhcmFtLmgKQEAgLTAsMCArMSBAQAorLyogSW50ZW50aW9uYWxseSBlbXB0eSBmaWxlIHRvIHN1cHBvcnQgYnVpbGRpbmcgZ2l0IHdpdGggTVNWQyAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdGltZS5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODU1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy90aW1lLmgKQEAgLTAsMCArMSBAQAorLyogSW50ZW50aW9uYWxseSBlbXB0eSBmaWxlIHRvIHN1cHBvcnQgYnVpbGRpbmcgZ2l0IHdpdGggTVNWQyAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdXRpbWUuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3V0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNTg5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3V0aW1lLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZglfVVRJTUVfSF8KKyNkZWZpbmUJX1VUSU1FX0hfCisvKgorICogVVRJTUUuSAorICogVGhpcyBmaWxlIGhhcyBubyBjb3B5cmlnaHQgYXNzaWduZWQgYW5kIGlzIHBsYWNlZCBpbiB0aGUgUHVibGljIERvbWFpbi4KKyAqIFRoaXMgZmlsZSBpcyBhIHBhcnQgb2YgdGhlIG1pbmd3LXJ1bnRpbWUgcGFja2FnZS4KKyAqCisgKiBUaGUgbWluZ3ctcnVudGltZSBwYWNrYWdlIGFuZCBpdHMgY29kZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisgKiB3aWxsIGJlIHVzZWZ1bCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkuICBBTEwgV0FSUkFOVElFUywgRVhQUkVTU0VEIE9SCisgKiBJTVBMSUVEIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIFRoaXMgaW5jbHVkZXMgYnV0IGlzIG5vdCBsaW1pdGVkIHRvCisgKiB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiBZb3UgYXJlIGZyZWUgdG8gdXNlIHRoaXMgcGFja2FnZSBhbmQgaXRzIGNvZGUgd2l0aG91dCBsaW1pdGF0aW9uLgorICovCisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCBieSBfdXRpbWUgZnVuY3Rpb24uCisgKi8KK3N0cnVjdCBfdXRpbWJ1ZgoreworCXRpbWVfdAlhY3RpbWU7CQkvKiBBY2Nlc3MgdGltZSAqLworCXRpbWVfdAltb2R0aW1lOwkvKiBNb2RpZmljYXRpb24gdGltZSAqLworfTsKKworI2lmbmRlZglfTk9fT0xETkFNRVMKKy8qIE5PVEU6IE11c3QgYmUgdGhlIHNhbWUgYXMgX3V0aW1idWYgYWJvdmUuICovCitzdHJ1Y3QgdXRpbWJ1ZgoreworCXRpbWVfdAlhY3RpbWU7CisJdGltZV90CW1vZHRpbWU7Cit9OworI2VuZGlmCS8qIE5vdCBfTk9fT0xETkFNRVMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3VuaXN0ZC5oIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk1OWQxCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91bmlzdGQuaApAQCAtMCwwICsxLDEwMyBAQAorI2lmbmRlZiBfVU5JU1REXworI2RlZmluZSBfVU5JU1REXworCisvKiBXaW4zMiBkZWZpbmUgZm9yIHBvcnRpbmcgZ2l0Ki8KKworI2lmbmRlZiBfTU9ERV9UXworI2RlZmluZQlfTU9ERV9UXwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfbW9kZV90OworCisjaWZuZGVmCV9OT19PTEROQU1FUwordHlwZWRlZiBfbW9kZV90CW1vZGVfdDsKKyNlbmRpZgorI2VuZGlmCS8qIE5vdCBfTU9ERV9UXyAqLworCisjaWZuZGVmIF9TU0laRV9UXworI2RlZmluZSBfU1NJWkVfVF8KK3R5cGVkZWYgbG9uZyBfc3NpemVfdDsKKworI2lmbmRlZglfT0ZGX1RfCisjZGVmaW5lCV9PRkZfVF8KK3R5cGVkZWYgbG9uZyBfb2ZmX3Q7CisKKyNpZm5kZWYJX05PX09MRE5BTUVTCit0eXBlZGVmIF9vZmZfdAlvZmZfdDsKKyNlbmRpZgorI2VuZGlmCS8qIE5vdCBfT0ZGX1RfICovCisKKworI2lmbmRlZglfTk9fT0xETkFNRVMKK3R5cGVkZWYgX3NzaXplX3Qgc3NpemVfdDsKKyNlbmRpZgorI2VuZGlmIC8qIE5vdCBfU1NJWkVfVF8gKi8KKwordHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwordHlwZWRlZiBzaG9ydCAgaW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnQxNl90OwordHlwZWRlZiBpbnQgIGludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkICAgdWludDMyX3Q7Cit0eXBlZGVmIGxvbmcgbG9uZyAgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICAgdWludDY0X3Q7CisKK3R5cGVkZWYgbG9uZyBsb25nICBpbnRtYXhfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRtYXhfdDsKKwordHlwZWRlZiBpbnQ2NF90IG9mZjY0X3Q7CisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgX01TQ19WRVIgPCAxNjAwCisjZGVmaW5lIElOVE1BWF9NSU4gIF9JNjRfTUlOCisjZGVmaW5lIElOVE1BWF9NQVggIF9JNjRfTUFYCisjZGVmaW5lIFVJTlRNQVhfTUFYIF9VSTY0X01BWAorCisjZGVmaW5lIFVJTlQzMl9NQVggMHhmZmZmZmZmZiAgLyogNDI5NDk2NzI5NVUgKi8KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2RlZmluZSBTVERJTl9GSUxFTk8gIDAKKyNkZWZpbmUgU1RET1VUX0ZJTEVOTyAxCisjZGVmaW5lIFNUREVSUl9GSUxFTk8gMgorCisvKiBTb21lIGRlZmluZXMgZm9yIF9hY2Nlc3MgbkFjY2Vzc01vZGUgKE1TIGRvZXNuJ3QgZGVmaW5lIHRoZW0sIGJ1dAorICogaXQgZG9lc24ndCBzZWVtIHRvIGh1cnQgdG8gYWRkIHRoZW0pLiAqLworI2RlZmluZQlGX09LCTAJLyogQ2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlICovCisvKiBXZWxsIG1heWJlIGl0IGRvZXMgaHVydC4gIE9uIG5ld2VyIHZlcnNpb25zIG9mIE1TVkNSVCwgYW4gYWNjZXNzIG1vZGUKKyAgIG9mIDEgY2F1c2VzIGludmFsaWQgcGFyYW1ldGVyIGVycm9yLiAqLworI2RlZmluZQlYX09LCTAJLyogTVMgYWNjZXNzKCkgZG9lc24ndCBjaGVjayBmb3IgZXhlY3V0ZSBwZXJtaXNzaW9uLiAqLworI2RlZmluZQlXX09LCTIJLyogQ2hlY2sgZm9yIHdyaXRlIHBlcm1pc3Npb24gKi8KKyNkZWZpbmUJUl9PSwk0CS8qIENoZWNrIGZvciByZWFkIHBlcm1pc3Npb24gKi8KKworI2RlZmluZQlfU19JRklGTwkweDEwMDAJLyogRklGTyAqLworI2RlZmluZQlfU19JRkNIUgkweDIwMDAJLyogQ2hhcmFjdGVyICovCisjZGVmaW5lCV9TX0lGQkxLCTB4MzAwMAkvKiBCbG9jazogSXMgdGhpcyBldmVyIHNldCB1bmRlciB3MzI/ICovCisjZGVmaW5lCV9TX0lGRElSCTB4NDAwMAkvKiBEaXJlY3RvcnkgKi8KKyNkZWZpbmUJX1NfSUZSRUcJMHg4MDAwCS8qIFJlZ3VsYXIgKi8KKworI2RlZmluZQlfU19JRk1UCQkweEYwMDAJLyogRmlsZSB0eXBlIG1hc2sgKi8KKworI2RlZmluZQlfU19JWFVTUglfU19JRVhFQworI2RlZmluZQlfU19JV1VTUglfU19JV1JJVEUKKyNkZWZpbmUJX1NfSVJVU1IJX1NfSVJFQUQKKyNkZWZpbmUJX1NfSVNESVIobSkJKCgobSkgJiBfU19JRk1UKSA9PSBfU19JRkRJUikKKworI2RlZmluZQlTX0lGSUZPCQlfU19JRklGTworI2RlZmluZQlTX0lGQ0hSCQlfU19JRkNIUgorI2RlZmluZQlTX0lGQkxLCQlfU19JRkJMSworI2RlZmluZQlTX0lGRElSCQlfU19JRkRJUgorI2RlZmluZQlTX0lGUkVHCQlfU19JRlJFRworI2RlZmluZQlTX0lGTVQJCV9TX0lGTVQKKyNkZWZpbmUJU19JRVhFQwkJX1NfSUVYRUMKKyNkZWZpbmUJU19JV1JJVEUJX1NfSVdSSVRFCisjZGVmaW5lCVNfSVJFQUQJCV9TX0lSRUFECisjZGVmaW5lCVNfSVJXWFUJCV9TX0lSV1hVCisjZGVmaW5lCVNfSVhVU1IJCV9TX0lYVVNSCisjZGVmaW5lCVNfSVdVU1IJCV9TX0lXVVNSCisjZGVmaW5lCVNfSVJVU1IJCV9TX0lSVVNSCisKKworI2RlZmluZQlTX0lTRElSKG0pCSgoKG0pICYgU19JRk1UKSA9PSBTX0lGRElSKQorI2RlZmluZQlTX0lTUkVHKG0pCSgoKG0pICYgU19JRk1UKSA9PSBTX0lGUkVHKQorI2RlZmluZQlTX0lTRklGTyhtKQkoKChtKSAmIFNfSUZNVCkgPT0gU19JRklGTykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3V0aW1lLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3V0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4NWYzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdXRpbWUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8c3lzL3V0aW1lLmg+CmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9zY3JpcHRzL2NsaW5rLnBsIGIvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9jbGluay5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOWY3MWI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9jbGluay5wbApAQCAtMCwwICsxLDEzMSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbXBpbGVzIG9yIGxpbmtzIGZpbGVzCisjCisjIFRoaXMgaXMgYSB3cmFwcGVyIHRvIGZhY2lsaXRhdGUgdGhlIGNvbXBpbGF0aW9uIG9mIEdpdCB3aXRoIE1TVkMKKyMgdXNpbmcgR05VIE1ha2UgYXMgdGhlIGJ1aWxkIHN5c3RlbS4gU28sIGluc3RlYWQgb2YgbWFuaXB1bGF0aW5nIHRoZQorIyBNYWtlZmlsZSBpbnRvIHNvbWV0aGluZyBuYXN0eSwganVzdCB0byBzdXBwb3J0IG5vbi1zcGFjZSBhcmd1bWVudHMKKyMgZXRjLCB3ZSB1c2UgdGhpcyB3cmFwcGVyIHRvIGZpeCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OworbXkgQGFyZ3MgPSAoKTsKK215IEBjZmxhZ3MgPSAoKTsKK215IEBsZmxhZ3MgPSAoKTsKK215ICRpc19saW5raW5nID0gMDsKK215ICRpc19kZWJ1ZyA9IDA7Cit3aGlsZSAoQEFSR1YpIHsKKwlteSAkYXJnID0gc2hpZnQgQEFSR1Y7CisJaWYgKCIkYXJnIiBlcSAiLURERUJVRyIpIHsKKwkgICAgIyBTb21lIHZjcGtnLWJhc2VkIGxpYnJhcmllcyBoYXZlIGRpZmZlcmVudCBuYW1lcyBmb3IgcmVsZWFzZQorCSAgICAjIGFuZCBkZWJ1ZyB2ZXJzaW9ucy4gIFRoaXMgaGFjayBhc3N1bWVzIHRoYXQgLURERUJVRyBjb21lcworCSAgICAjIGJlZm9yZSBhbnkgIi1sKiIgZmxhZ3MuCisJICAgICRpc19kZWJ1ZyA9IDE7CisJfQorCWlmICgiJGFyZyIgPX4gL14tW0RJTUdPWl0vKSB7CisJCXB1c2goQGNmbGFncywgJGFyZyk7CisJfSBlbHNpZiAoIiRhcmciIGVxICItbyIpIHsKKwkJbXkgJGZpbGVfb3V0ID0gc2hpZnQgQEFSR1Y7CisJCWlmICgiJGZpbGVfb3V0IiA9fiAvZXhlJC8pIHsKKwkJCSRpc19saW5raW5nID0gMTsKKwkJCSMgQ3JlYXRlIGZvby5leGUgYW5kIGZvby5wZGIKKwkJCXB1c2goQGFyZ3MsICItT1VUOiRmaWxlX291dCIpOworCQl9IGVsc2UgeworCQkJIyBDcmVhdGUgZm9vLm8gYW5kIGZvby5vLnBkYgorCQkJcHVzaChAYXJncywgIi1GbyRmaWxlX291dCIpOworCQkJcHVzaChAYXJncywgIi1GZCRmaWxlX291dC5wZGIiKTsKKwkJfQorCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWx6IikgeworCSAgICBpZiAoJGlzX2RlYnVnKSB7CisJCXB1c2goQGFyZ3MsICJ6bGliZC5saWIiKTsKKwkgICAgfSBlbHNleworCQlwdXNoKEBhcmdzLCAiemxpYi5saWIiKTsKKwkgICAgfQorCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxpY29udiIpIHsKKwkJcHVzaChAYXJncywgImxpYmljb252LmxpYiIpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxjcnlwdG8iKSB7CisJCXB1c2goQGFyZ3MsICJsaWJjcnlwdG8ubGliIik7CisJfSBlbHNpZiAoIiRhcmciIGVxICItbHNzbCIpIHsKKwkJcHVzaChAYXJncywgImxpYnNzbC5saWIiKTsKKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1sY3VybCIpIHsKKwkJbXkgJGxpYiA9ICIiOworCQkjIE5ld2VyIHZjcGtnIGRlZmluaXRpb25zIGNhbGwgdGhpcyBsaWJjdXJsX2ltcC5saWI7IERvIHdlCisJCSMgbmVlZCB0byB1c2UgdGhhdCBpbnN0ZWFkPworCQlmb3JlYWNoIG15ICRmbGFnIChAbGZsYWdzKSB7CisJCQlpZiAoJGZsYWcgPX4gL14tTElCUEFUSDooLiopLykgeworCQkJCWZvcmVhY2ggbXkgJGwgKCJsaWJjdXJsX2ltcC5saWIiLCAibGliY3VybC5saWIiKSB7CisJCQkJCWlmICgtZiAiJDEvJGwiKSB7CisJCQkJCQkkbGliID0gJGw7CisJCQkJCQlsYXN0OworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCXB1c2goQGFyZ3MsICRsaWIpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxleHBhdCIpIHsKKwkJcHVzaChAYXJncywgImV4cGF0LmxpYiIpOworCX0gZWxzaWYgKCIkYXJnIiA9fiAvXi1MLyAmJiAiJGFyZyIgbmUgIi1MVENHIikgeworCQkkYXJnID1+IHMvXi1MLy1MSUJQQVRIOi87CisJCXB1c2goQGxmbGFncywgJGFyZyk7CisJfSBlbHNpZiAoIiRhcmciID1+IC9eLVtSbF0vKSB7CisJCSMgZWF0CisJfSBlbHNpZiAoIiRhcmciIGVxICItV2Vycm9yIikgeworCQlwdXNoKEBjZmxhZ3MsICItV1giKTsKKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1XYWxsIikgeworCQkjIGNsLmV4ZSB1bmRlcnN0YW5kcyAtV2FsbCwgYnV0IGl0IGlzIHJlYWxseSBvdmVyemVhbG91cworCQlwdXNoKEBjZmxhZ3MsICItVzQiKTsKKwkJIyBkaXNhYmxlIHRoZSAic2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoIiB3YXJuaW5nczsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDAxOCIpOworCQlwdXNoKEBjZmxhZ3MsICItd2Q0MjQ1Iik7CisJCXB1c2goQGNmbGFncywgIi13ZDQzODkiKTsKKwkJIyBkaXNhYmxlIHRoZSAidW5yZWZlcmVuY2VkIGZvcm1hbCBwYXJhbWV0ZXIiIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQxMDAiKTsKKwkJIyBkaXNhYmxlIHRoZSAiY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudCIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDEyNyIpOworCQkjIGRpc2FibGUgdGhlICJjb25zdCBvYmplY3Qgc2hvdWxkIGJlIGluaXRpYWxpemVkIiB3YXJuaW5nOyB0aGVzZSB3YXJuaW5ncyBhZmZlY3Qgb25seSBvYmplY3RzIHRoYXQgYXJlIGBzdGF0aWNgCisJCXB1c2goQGNmbGFncywgIi13ZDQxMzIiKTsKKwkJIyBkaXNhYmxlIHRoZSAiZnVuY3Rpb24vZGF0YSBwb2ludGVyIGNvbnZlcnNpb24gaW4gZXhwcmVzc2lvbiIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDE1MiIpOworCQkjIGRpc2FibGUgdGhlICJub24tY29uc3RhbnQgYWdncmVnYXRlIGluaXRpYWxpemVyIiB3YXJuaW5nOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0MjA0Iik7CisJCSMgZGlzYWJsZSB0aGUgImNhbm5vdCBiZSBpbml0aWFsaXplZCB1c2luZyBhZGRyZXNzIG9mIGF1dG9tYXRpYyB2YXJpYWJsZSIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDIyMSIpOworCQkjIGRpc2FibGUgdGhlICJwb3NzaWJsZSBsb3NzIG9mIGRhdGEiIHdhcm5pbmdzOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0MjQ0Iik7CisJCXB1c2goQGNmbGFncywgIi13ZDQyNjciKTsKKwkJIyBkaXNhYmxlIHRoZSAiYXJyYXkgaXMgdG9vIHNtYWxsIHRvIGluY2x1ZGUgYSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlciIgd2FybmluZzsgd2UgYWItdXNlIHN0cmluZ3MgdG8gaW5pdGlhbGl6ZSBPSURzCisJCXB1c2goQGNmbGFncywgIi13ZDQyOTUiKTsKKwkJIyBkaXNhYmxlIHRoZSAiJzw8JzogcmVzdWx0IG9mIDMyLWJpdCBzaGlmdCBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byA2NCBiaXRzIiB3YXJuaW5nOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0MzM0Iik7CisJCSMgZGlzYWJsZSB0aGUgImRlY2xhcmF0aW9uIGhpZGVzIHByZXZpb3VzIGxvY2FsIGRlY2xhcmF0aW9uIiB3YXJuaW5nOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0NDU2Iik7CisJCSMgZGlzYWJsZSB0aGUgImRlY2xhcmF0aW9uIGhpZGVzIGZ1bmN0aW9uIHBhcmFtZXRlciIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDQ1NyIpOworCQkjIGRpc2FibGUgdGhlICJkZWNsYXJhdGlvbiBoaWRlcyBnbG9iYWwgZGVjbGFyYXRpb24iIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQ0NTkiKTsKKwkJIyBkaXNhYmxlIHRoZSAicG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZSAnPG5hbWU+JyB1c2VkIiB3YXJuaW5nOyBvdXIgc291cmNlIGNvZGUgdmlvbGF0ZXMgdGhhdAorCQlwdXNoKEBjZmxhZ3MsICItd2Q0NzAxIik7CisJCSMgZGlzYWJsZSB0aGUgInVucmVhY2hhYmxlIGNvZGUiIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQ3MDIiKTsKKwkJIyBkaXNhYmxlIHRoZSAicG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBsb2NhbCBwb2ludGVyIHZhcmlhYmxlIHVzZWQiIHdhcm5pbmc7IG91ciBzb3VyY2UgY29kZSB2aW9sYXRlcyB0aGF0CisJCXB1c2goQGNmbGFncywgIi13ZDQ3MDMiKTsKKwkJIyBkaXNhYmxlIHRoZSAiYXNzaWdubWVudCB3aXRoaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbiIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDcwNiIpOworCQkjIGRpc2FibGUgdGhlICInaW5ldF9udG9hJzogVXNlIGluZXRfbnRvcCgpIG9yIEluZXROdG9wKCkgaW5zdGVhZCIgd2FybmluZzsgb3VyIHNvdXJjZSBjb2RlIHZpb2xhdGVzIHRoYXQKKwkJcHVzaChAY2ZsYWdzLCAiLXdkNDk5NiIpOworCX0gZWxzaWYgKCIkYXJnIiA9fiAvXi1XW2Etel0vKSB7CisJCSMgbGV0J3MgaWdub3JlIHRob3NlCisJfSBlbHNlIHsKKwkJcHVzaChAYXJncywgJGFyZyk7CisJfQorfQoraWYgKCRpc19saW5raW5nKSB7CisJcHVzaChAYXJncywgQGxmbGFncyk7CisJdW5zaGlmdChAYXJncywgImxpbmsuZXhlIik7Cit9IGVsc2UgeworCXVuc2hpZnQoQGFyZ3MsICJjbC5leGUiKTsKKwlwdXNoKEBhcmdzLCBAY2ZsYWdzKTsKK30KK3ByaW50ZihTVERFUlIgIioqKiogQGFyZ3NcblxuXG4iKSBpZiAoIWRlZmluZWQoJEVOVnsnUVVJRVRfR0VOJ30pKTsKK2V4aXQgKHN5c3RlbShAYXJncykgIT0gMCk7CmRpZmYgLS1naXQgYS9jb21wYXQvdmNidWlsZC9zY3JpcHRzL2xpYi5wbCBiL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvbGliLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4MDU0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9zY3JpcHRzL2xpYi5wbApAQCAtMCwwICsxLDI2IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGliaWZpZXMgZmlsZXMgb24gV2luZG93cworIworIyBUaGlzIGlzIGEgd3JhcHBlciB0byBmYWNpbGl0YXRlIHRoZSBjb21waWxhdGlvbiBvZiBHaXQgd2l0aCBNU1ZDCisjIHVzaW5nIEdOVSBNYWtlIGFzIHRoZSBidWlsZCBzeXN0ZW0uIFNvLCBpbnN0ZWFkIG9mIG1hbmlwdWxhdGluZyB0aGUKKyMgTWFrZWZpbGUgaW50byBzb21ldGhpbmcgbmFzdHksIGp1c3QgdG8gc3VwcG9ydCBub24tc3BhY2UgYXJndW1lbnRzCisjIGV0Yywgd2UgdXNlIHRoaXMgd3JhcHBlciB0byBmaXggdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBNYXJpdXMgU3Rvcm0tT2xzZW4gPG1zdG9ybW9AZ21haWwuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsKK215IEBhcmdzID0gKCk7Cit3aGlsZSAoQEFSR1YpIHsKKwlteSAkYXJnID0gc2hpZnQgQEFSR1Y7CisJaWYgKCIkYXJnIiBlcSAicmNzIikgeworCQkjIENvbnN1bWUgdGhlIHJjcyBvcHRpb24KKwl9IGVsc2lmICgiJGFyZyIgPX4gL1wuYSQvKSB7CisJCXB1c2goQGFyZ3MsICItT1VUOiRhcmciKTsKKwl9IGVsc2UgeworCQlwdXNoKEBhcmdzLCAkYXJnKTsKKwl9Cit9Cit1bnNoaWZ0KEBhcmdzLCAibGliLmV4ZSIpOworIyBwcmludGYoIioqKiogQGFyZ3NcbiIpOworZXhpdCAoc3lzdGVtKEBhcmdzKSAhPSAwKTsKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL3ZjcGtnX2NvcHlfZGxscy5iYXQgYi9jb21wYXQvdmNidWlsZC92Y3BrZ19jb3B5X2RsbHMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjYxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC92Y3BrZ19jb3B5X2RsbHMuYmF0CkBAIC0wLDAgKzEsMzkgQEAKK0BFQ0hPIE9GRgorUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTSBUaGlzIHNjcmlwdCBpcyBhbiBvcHRpb25hbCBzdGVwLiBJdCBjb3BpZXMgdGhlICouZGxsIGFuZCAqLnBkYgorUkVNIGZpbGVzIChjcmVhdGVkIGJ5IHZjcGtnX2luc3RhbGwuYmF0KSBpbnRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CitSRU0gb2YgdGhlIHJlcG8gc28gdGhhdCB5b3UgY2FuIHR5cGUgIi4vZ2l0LmV4ZSIgYW5kIGZpbmQgdGhlbSB3aXRob3V0CitSRU0gaGF2aW5nIHRvIGZpeHVwIHlvdXIgUEFUSC4KK1JFTQorUkVNIE5PVEU6IEJlY2F1c2UgdGhlIG5hbWVzIG9mIHNvbWUgRExMIGZpbGVzIGNoYW5nZSBiZXR3ZWVuIERFQlVHIGFuZAorUkVNIE5PVEU6IFJFTEVBU0UgYnVpbGRzIHdoZW4gYnVpbHQgdXNpbmcgInZjcGtnLmV4ZSIsIHlvdSB3aWxsIG5lZWQKK1JFTSBOT1RFOiB0byBjb3B5IHVwIHRoZSBjb3JyZXNwb25kaW5nIHZlcnNpb24uCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJU0VUTE9DQUwgRW5hYmxlRGVsYXllZEV4cGFuc2lvbgorCisJQEZPUiAvRiAiZGVsaW1zPSIgJSVEIElOICgiJX5kcDAiKSBETyBAU0VUIGN3ZD0lJX5mRAorCWNkICVjd2QlCisKKwlTRVQgYXJjaD14NjQtd2luZG93cworCVNFVCBpbnN0PSVjd2QldmNwa2dcaW5zdGFsbGVkXCVhcmNoJQorCisJSUYgWyUxXT09W3JlbGVhc2VdICgKKwkJZWNobyBDb3B5aW5nIFJFTEVBU0UgbW9kZSBETExzIHRvIHJlcG8gcm9vdC4uLgorCSkgRUxTRSBJRiBbJTFdPT1bZGVidWddICgKKwkJU0VUIGluc3Q9JWluc3QlXGRlYnVnCisJCWVjaG8gQ29weWluZyBERUJVRyBtb2RlIERMTHMgdG8gcmVwbyByb290Li4uCisJKSBFTFNFICgKKwkJZWNobyBFUlJPUjogSW52YWxpZCBhcmd1bWVudC4KKwkJZWNobyBVc2FnZTogJX4wIHJlbGVhc2UKKwkJZWNobyBVc2FnZTogJX4wIGRlYnVnCisJCUVYSVQgL0IgMQorCSkKKworCXhjb3B5IC9lL3Mvdi95ICVpbnN0JVxiaW5cKi5kbGwgLi5cLi5cCisJeGNvcHkgL2Uvcy92L3kgJWluc3QlXGJpblwqLnBkYiAuLlwuLlwKKworCXhjb3B5IC9lL3Mvdi95ICVpbnN0JVxiaW5cKi5kbGwgLi5cLi5cdFxoZWxwZXJcCisJeGNvcHkgL2Uvcy92L3kgJWluc3QlXGJpblwqLnBkYiAuLlwuLlx0XGhlbHBlclwKKworCUVYSVQgL0IgMApkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvdmNwa2dfaW5zdGFsbC5iYXQgYi9jb21wYXQvdmNidWlsZC92Y3BrZ19pbnN0YWxsLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmQwYmFkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvdmNwa2dfaW5zdGFsbC5iYXQKQEAgLTAsMCArMSw4MCBAQAorQEVDSE8gT0ZGCitSRU0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVNIFRoaXMgc2NyaXB0IGluc3RhbGxzIHRoZSAidmNwa2ciIHNvdXJjZSBwYWNrYWdlIG1hbmFnZXIgYW5kIHVzZXMKK1JFTSBpdCB0byBidWlsZCB0aGUgdGhpcmQtcGFydHkgbGlicmFyaWVzIHRoYXQgZ2l0IHJlcXVpcmVzIHdoZW4gaXQKK1JFTSBpcyBidWlsdCB1c2luZyBNU1ZDLgorUkVNCitSRU0gWzFdIEluc3RhbGwgVkNQS0cuCitSRU0gICAgIFthXSBDcmVhdGUgPHJvb3Q+L2NvbXBhdC92Y2J1aWxkL3ZjcGtnLworUkVNICAgICBbYl0gRG93bmxvYWQgInZjcGtnIi4KK1JFTSAgICAgW2NdIENvbXBpbGUgdXNpbmcgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBWUy4KK1JFTSAgICAgW2RdIENyZWF0ZSA8cm9vdD4vY29tcGF0L3ZjYnVpbGQvdmNwa2cvdmNwa2cuZXhlCitSRU0KK1JFTSBbMl0gSW5zdGFsbCB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMuCitSRU0gICAgIFthXSBEb3dubG9hZCBlYWNoICh3aGljaCBtYXkgYWxzbyBpbnN0YWxsIENNQUtFKS4KK1JFTSAgICAgW2JdIENvbXBpbGUgaW4gUkVMRUFTRSBtb2RlIGFuZCBpbnN0YWxsIGluOgorUkVNICAgICAgICAgdmNwa2cvaW5zdGFsbGVkLzxhcmNoPi97YmluLGxpYn0KK1JFTSAgICAgW2NdIENvbXBpbGUgaW4gREVCVUcgbW9kZSBhbmQgaW5zdGFsbCBpbjoKK1JFTSAgICAgICAgIHZjcGtnL2luc3RhbGxlZC88YXJjaD4vZGVidWcve2JpbixsaWJ9CitSRU0gICAgIFtkXSBJbnN0YWxsIGhlYWRlcnMgaW46CitSRU0gICAgICAgICB2Y3BrZy9pbnN0YWxsZWQvPGFyY2g+L2luY2x1ZGUKK1JFTQorUkVNIFszXSBDcmVhdGUgYSBzZXQgb2YgTUFLRSBkZWZpbml0aW9ucyBmb3IgdGhlIHRvcC1sZXZlbAorUkVNICAgICBNYWtlZmlsZSB0byBhbGxvdyAibWFrZSBNU1ZDPTEiIHRvIGZpbmQgdGhlIGFib3ZlCitSRU0gICAgIHRoaXJkLXBhcnR5IGxpYnJhcmllcy4KK1JFTSAgICAgW2FdIFdyaXRlIHZjcGtnL1ZDUEdLLURFRlMKK1JFTQorUkVNIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNyb3NvZnQuY29tL3ZjYmxvZy8yMDE2LzA5LzE5L3ZjcGtnLWEtdG9vbC10by1hY3F1aXJlLWFuZC1idWlsZC1jLW9wZW4tc291cmNlLWxpYnJhcmllcy1vbi13aW5kb3dzLworUkVNIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvdmNwa2cKK1JFTSBodHRwczovL3ZjcGtnLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC8KK1JFTSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlTRVRMT0NBTCBFbmFibGVEZWxheWVkRXhwYW5zaW9uCisKKwlARk9SIC9GICJkZWxpbXM9IiAlJUQgSU4gKCIlfmRwMCIpIERPIEBTRVQgY3dkPSUlfmZECisJY2QgJWN3ZCUKKworCWRpciB2Y3BrZ1x2Y3BrZy5leGUgPm51bCAyPm51bCAmJiBHT1RPIDppbnN0YWxsX2xpYnJhcmllcworCisJZWNobyBGZXRjaGluZyB2Y3BrZyBpbiAlY3dkJXZjcGtnCisJZ2l0LmV4ZSBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L3ZjcGtnIHZjcGtnCisJSUYgRVJST1JMRVZFTCAxICggRVhJVCAvQiAxICkKKworCWNkIHZjcGtnCisJZWNobyBCdWlsZGluZyB2Y3BrZworCXBvd2Vyc2hlbGwgLWV4ZWMgYnlwYXNzIHNjcmlwdHNcYm9vdHN0cmFwLnBzMQorCUlGIEVSUk9STEVWRUwgMSAoIEVYSVQgL0IgMSApCisKKwllY2hvIFN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgJWN3ZCV2Y3BrZ1x2Y3BrZy5leGUKKworOmluc3RhbGxfbGlicmFyaWVzCisJU0VUIGFyY2g9eDY0LXdpbmRvd3MKKworCWVjaG8gSW5zdGFsbGluZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMuLi4KKwlGT1IgJSVpIElOICh6bGliIGV4cGF0IGxpYmljb252IG9wZW5zc2wgbGlic3NoMiBjdXJsKSBETyAoCisJICAgIGNkICVjd2QldmNwa2cKKwkgICAgSUYgTk9UIEVYSVNUICJwYWNrYWdlc1wlJWlfJWFyY2glIiBDQUxMIDpzdWJfX2luc3RhbGxfb25lICUlaQorCSAgICBJRiBFUlJPUkxFVkVMIDEgKCBFWElUIC9CIDEgKQorCSkKKworOmluc3RhbGxfZGVmaW5lcworCWNkICVjd2QlCisJU0VUIGluc3Q9JWN3ZCV2Y3BrZ1xpbnN0YWxsZWRcJWFyY2glCisKKwllY2hvIHZjcGtnX2luYz0tSSIlaW5zdCVcaW5jbHVkZSI+VkNQS0ctREVGUworCWVjaG8gdmNwa2dfcmVsX2xpYj0tTCIlaW5zdCVcbGliIj4+VkNQS0ctREVGUworCWVjaG8gdmNwa2dfcmVsX2Jpbj0iJWluc3QlXGJpbiI+PlZDUEtHLURFRlMKKwllY2hvIHZjcGtnX2RiZ19saWI9LUwiJWluc3QlXGRlYnVnXGxpYiI+PlZDUEtHLURFRlMKKwllY2hvIHZjcGtnX2RiZ19iaW49IiVpbnN0JVxkZWJ1Z1xiaW4iPj5WQ1BLRy1ERUZTCisKKwlFWElUIC9CIDAKKworCis6c3ViX19pbnN0YWxsX29uZQorCWVjaG8gICAgIEluc3RhbGxpbmcgcGFja2FnZSAlMS4uLgorCisJLlx2Y3BrZy5leGUgaW5zdGFsbCAlMTolYXJjaCUKKwlJRiBFUlJPUkxFVkVMIDEgKCBFWElUIC9CIDEgKQorCisJZWNobyAgICAgRmluaXNoZWQgJTEKKwlnb3RvIDpFT0YKZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMi5oIGIvY29tcGF0L3dpbjMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3ZTg4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgV0lOMzJfSAorI2RlZmluZSBXSU4zMl9ICisKKy8qIGNvbW1vbiBXaW4zMiBmdW5jdGlvbnMgZm9yIE1pbkdXIGFuZCBDeWd3aW4gKi8KKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCS8qIE5vdCBkZWZpbmVkIGZvciBDeWd3aW4gKi8KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgZmlsZV9hdHRyX3RvX3N0X21vZGUgKERXT1JEIGF0dHIpCit7CisJaW50IGZNb2RlID0gU19JUkVBRDsKKwlpZiAoYXR0ciAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwkJZk1vZGUgfD0gU19JRkRJUjsKKwllbHNlCisJCWZNb2RlIHw9IFNfSUZSRUc7CisJaWYgKCEoYXR0ciAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkKKwkJZk1vZGUgfD0gU19JV1JJVEU7CisJcmV0dXJuIGZNb2RlOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfZmlsZV9hdHRyKGNvbnN0IGNoYXIgKmZuYW1lLCBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBICpmZGF0YSkKK3sKKwlpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeEEoZm5hbWUsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgZmRhdGEpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoR2V0TGFzdEVycm9yKCkpIHsKKwljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6CisJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjoKKwljYXNlIEVSUk9SX0xPQ0tfVklPTEFUSU9OOgorCWNhc2UgRVJST1JfU0hBUklOR19CVUZGRVJfRVhDRUVERUQ6CisJCXJldHVybiBFQUNDRVM7CisJY2FzZSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1c6CisJCXJldHVybiBFTkFNRVRPT0xPTkc7CisJY2FzZSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWToKKwkJcmV0dXJuIEVOT01FTTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRU5PRU5UOworCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvYWxsb2NhLmggYi9jb21wYXQvd2luMzIvYWxsb2NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkNzk4NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9hbGxvY2EuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bWFsbG9jLmg+CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvZGlyZW50LmMgYi9jb21wYXQvd2luMzIvZGlyZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0MjBlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9kaXJlbnQuYwpAQCAtMCwwICsxLDkyIEBACisjaW5jbHVkZSAiLi4vLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3N0cnVjdCBESVIgeworCXN0cnVjdCBkaXJlbnQgZGRfZGlyOyAvKiBpbmNsdWRlcyBkX3R5cGUgKi8KKwlIQU5ETEUgZGRfaGFuZGxlOyAgICAgLyogRmluZEZpcnN0RmlsZSBoYW5kbGUgKi8KKwlpbnQgZGRfc3RhdDsgICAgICAgICAgLyogMC1iYXNlZCBpbmRleCAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGZpbmRkYXRhMmRpcmVudChzdHJ1Y3QgZGlyZW50ICplbnQsIFdJTjMyX0ZJTkRfREFUQVcgKmZkYXRhKQoreworCS8qIGNvbnZlcnQgVVRGLTE2IG5hbWUgdG8gVVRGLTggKi8KKwl4d2NzdG91dGYoZW50LT5kX25hbWUsIGZkYXRhLT5jRmlsZU5hbWUsIHNpemVvZihlbnQtPmRfbmFtZSkpOworCisJLyogU2V0IGZpbGUgdHlwZSwgYmFzZWQgb24gV0lOMzJfRklORF9EQVRBICovCisJaWYgKGZkYXRhLT5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorCQllbnQtPmRfdHlwZSA9IERUX0RJUjsKKwllbHNlCisJCWVudC0+ZF90eXBlID0gRFRfUkVHOworfQorCitESVIgKm9wZW5kaXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwl3Y2hhcl90IHBhdHRlcm5bTUFYX1BBVEggKyAyXTsgLyogKyAyIGZvciAnLycgJyonICovCisJV0lOMzJfRklORF9EQVRBVyBmZGF0YTsKKwlIQU5ETEUgaDsKKwlpbnQgbGVuOworCURJUiAqZGlyOworCisJLyogY29udmVydCBuYW1lIHRvIFVURi0xNiBhbmQgY2hlY2sgbGVuZ3RoIDwgTUFYX1BBVEggKi8KKwlpZiAoKGxlbiA9IHh1dGZ0b3djc19wYXRoKHBhdHRlcm4sIG5hbWUpKSA8IDApCisJCXJldHVybiBOVUxMOworCisJLyogYXBwZW5kIG9wdGlvbmFsICcvJyBhbmQgd2lsZGNhcmQgJyonICovCisJaWYgKGxlbiAmJiAhaXNfZGlyX3NlcChwYXR0ZXJuW2xlbiAtIDFdKSkKKwkJcGF0dGVybltsZW4rK10gPSAnLyc7CisJcGF0dGVybltsZW4rK10gPSAnKic7CisJcGF0dGVybltsZW5dID0gMDsKKworCS8qIG9wZW4gZmluZCBoYW5kbGUgKi8KKwloID0gRmluZEZpcnN0RmlsZVcocGF0dGVybiwgJmZkYXRhKTsKKwlpZiAoaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQlEV09SRCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwkJZXJybm8gPSAoZXJyID09IEVSUk9SX0RJUkVDVE9SWSkgPyBFTk9URElSIDogZXJyX3dpbl90b19wb3NpeChlcnIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBpbml0aWFsaXplIERJUiBzdHJ1Y3R1cmUgYW5kIGNvcHkgZmlyc3QgZGlyIGVudHJ5ICovCisJZGlyID0geG1hbGxvYyhzaXplb2YoRElSKSk7CisJZGlyLT5kZF9oYW5kbGUgPSBoOworCWRpci0+ZGRfc3RhdCA9IDA7CisJZmluZGRhdGEyZGlyZW50KCZkaXItPmRkX2RpciwgJmZkYXRhKTsKKwlyZXR1cm4gZGlyOworfQorCitzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyKERJUiAqZGlyKQoreworCWlmICghZGlyKSB7CisJCWVycm5vID0gRUJBREY7IC8qIE5vIHNldF9lcnJubyBmb3IgbWluZ3cgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogaWYgZmlyc3QgZW50cnksIGRpcmVudCBoYXMgYWxyZWFkeSBiZWVuIHNldCB1cCBieSBvcGVuZGlyICovCisJaWYgKGRpci0+ZGRfc3RhdCkgeworCQkvKiBnZXQgbmV4dCBlbnRyeSBhbmQgY29udmVydCBmcm9tIFdJTjMyX0ZJTkRfREFUQSB0byBkaXJlbnQgKi8KKwkJV0lOMzJfRklORF9EQVRBVyBmZGF0YTsKKwkJaWYgKEZpbmROZXh0RmlsZVcoZGlyLT5kZF9oYW5kbGUsICZmZGF0YSkpIHsKKwkJCWZpbmRkYXRhMmRpcmVudCgmZGlyLT5kZF9kaXIsICZmZGF0YSk7CisJCX0gZWxzZSB7CisJCQlEV09SRCBsYXN0ZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCQkvKiBQT1NJWCBzYXlzIHlvdSBzaG91bGRuJ3Qgc2V0IGVycm5vIHdoZW4gcmVhZGRpciBjYW4ndAorCQkJICAgZmluZCBhbnkgbW9yZSBmaWxlczsgc28sIGlmIGFub3RoZXIgZXJyb3Igd2UgbGVhdmUgaXQgc2V0LiAqLworCQkJaWYgKGxhc3RlcnIgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykKKwkJCQllcnJubyA9IGVycl93aW5fdG9fcG9zaXgobGFzdGVycik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCSsrZGlyLT5kZF9zdGF0OworCXJldHVybiAmZGlyLT5kZF9kaXI7Cit9CisKK2ludCBjbG9zZWRpcihESVIgKmRpcikKK3sKKwlpZiAoIWRpcikgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gLTE7CisJfQorCisJRmluZENsb3NlKGRpci0+ZGRfaGFuZGxlKTsKKwlmcmVlKGRpcik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvZGlyZW50LmggYi9jb21wYXQvd2luMzIvZGlyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4MjA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9kaXJlbnQuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIERJUkVOVF9ICisjZGVmaW5lIERJUkVOVF9ICisKK3R5cGVkZWYgc3RydWN0IERJUiBESVI7CisKKyNkZWZpbmUgRFRfVU5LTk9XTiAwCisjZGVmaW5lIERUX0RJUiAgICAgMQorI2RlZmluZSBEVF9SRUcgICAgIDIKKyNkZWZpbmUgRFRfTE5LICAgICAzCisKK3N0cnVjdCBkaXJlbnQgeworCXVuc2lnbmVkIGNoYXIgZF90eXBlOyAgICAgIC8qIGZpbGUgdHlwZSB0byBwcmV2ZW50IGxzdGF0IGFmdGVyIHJlYWRkaXIgKi8KKwljaGFyIGRfbmFtZVtNQVhfUEFUSCAqIDNdOyAvKiBmaWxlIG5hbWUgKCogMyBmb3IgVVRGLTggY29udmVyc2lvbikgKi8KK307CisKK0RJUiAqb3BlbmRpcihjb25zdCBjaGFyICpkaXJuYW1lKTsKK3N0cnVjdCBkaXJlbnQgKnJlYWRkaXIoRElSICpkaXIpOworaW50IGNsb3NlZGlyKERJUiAqZGlyKTsKKworI2VuZGlmIC8qIERJUkVOVF9IICovCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvZ2l0Lm1hbmlmZXN0IGIvY29tcGF0L3dpbjMyL2dpdC5tYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFlM2NjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL2dpdC5tYW5pZmVzdApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Cis8YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIiBtYW5pZmVzdFZlcnNpb249IjEuMCI+CisJPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9IkdpdCIgdmVyc2lvbj0iMC4wLjAuMSIgLz4KKwk8dHJ1c3RJbmZvIHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MiI+CisJCTxzZWN1cml0eT4KKwkJCTxyZXF1ZXN0ZWRQcml2aWxlZ2VzPgorCQkJCTxyZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbCBsZXZlbD0iYXNJbnZva2VyIiB1aUFjY2Vzcz0iZmFsc2UiIC8+CisJCQk8L3JlcXVlc3RlZFByaXZpbGVnZXM+CisJCTwvc2VjdXJpdHk+CisJPC90cnVzdEluZm8+CisJPGNvbXBhdGliaWxpdHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206Y29tcGF0aWJpbGl0eS52MSI+CisJCTxhcHBsaWNhdGlvbj4KKwkJCTwhLS0gV2luZG93cyBWaXN0YSAtLT4KKwkJCTxzdXBwb3J0ZWRPUyBJZD0ie2UyMDExNDU3LTE1NDYtNDNjNS1hNWZlLTAwOGRlZWUzZDNmMH0iLz4KKwkJCTwhLS0gV2luZG93cyA3IC0tPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7MzUxMzhiOWEtNWQ5Ni00ZmJkLThlMmQtYTI0NDAyMjVmOTNhfSIvPgorCQkJPCEtLSBXaW5kb3dzIDggLS0+CisJCQk8c3VwcG9ydGVkT1MgSWQ9Ins0YTJmMjhlMy01M2I5LTQ0NDEtYmE5Yy1kNjlkNGE0YTZlMzh9Ii8+CisJCQk8IS0tIFdpbmRvd3MgOC4xIC0tPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7MWY2NzZjNzYtODBlMS00MjM5LTk1YmItODNkMGY2ZDBkYTc4fSIvPgorCQkJPCEtLSBXaW5kb3dzIDEwIC0tPgorCQkJPHN1cHBvcnRlZE9TIElkPSJ7OGUwZjdhMTItYmZiMy00ZmU4LWI5YTUtNDhmZDUwYTE1YTlhfSIvPgorCQk8L2FwcGxpY2F0aW9uPgorCTwvY29tcGF0aWJpbGl0eT4KKzwvYXNzZW1ibHk+CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvbGF6eWxvYWQuaCBiL2NvbXBhdC93aW4zMi9sYXp5bG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjMxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvbGF6eWxvYWQuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIExBWllMT0FEX0gKKyNkZWZpbmUgTEFaWUxPQURfSAorCisvKgorICogQSBwYWlyIG9mIG1hY3JvcyB0byBzaW1wbGlmeSBsb2FkaW5nIG9mIERMTCBmdW5jdGlvbnMuIEV4YW1wbGU6CisgKgorICogICBERUNMQVJFX1BST0NfQUREUihrZXJuZWwzMi5kbGwsIEJPT0wsIENyZWF0ZUhhcmRMaW5rVywKKyAqICAgICAgICAgICAgICAgICAgICAgTFBDV1NUUiwgTFBDV1NUUiwgTFBTRUNVUklUWV9BVFRSSUJVVEVTKTsKKyAqCisgKiAgIGlmICghSU5JVF9QUk9DX0FERFIoQ3JlYXRlSGFyZExpbmtXKSkKKyAqICAgICAgICAgICByZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBmaW5kIENyZWF0ZUhhcmRMaW5rVygpIGZ1bmN0aW9uIjsKKyAqCisgKiAgIGlmICghQ3JlYXRlSGFyZExpbmtXKHNvdXJjZSwgdGFyZ2V0LCBOVUxMKSkKKyAqICAgICAgICAgICByZXR1cm4gZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgaGFyZGxpbmsgZnJvbSAlUyB0byAlUyIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgdGFyZ2V0KTsKKyAqLworCitzdHJ1Y3QgcHJvY19hZGRyIHsKKwljb25zdCBjaGFyICpjb25zdCBkbGw7CisJY29uc3QgY2hhciAqY29uc3QgZnVuY3Rpb247CisJRkFSUFJPQyBwZnVuY3Rpb247CisJdW5zaWduZWQgaW5pdGlhbGl6ZWQgOiAxOworfTsKKworLyogRGVjbGFyZXMgYSBmdW5jdGlvbiB0byBiZSBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIERMTC4gKi8KKyNkZWZpbmUgREVDTEFSRV9QUk9DX0FERFIoZGxsLCByZXR0eXBlLCBmdW5jdGlvbiwgLi4uKSBcCisJc3RhdGljIHN0cnVjdCBwcm9jX2FkZHIgcHJvY19hZGRyXyMjZnVuY3Rpb24gPSBcCisJeyAjZGxsLCAjZnVuY3Rpb24sIE5VTEwsIDAgfTsgXAorCXN0YXRpYyByZXR0eXBlIChXSU5BUEkgKmZ1bmN0aW9uKShfX1ZBX0FSR1NfXykKKworLyoKKyAqIExvYWRzIGEgZnVuY3Rpb24gZnJvbSBhIERMTCAob25jZS1vbmx5KS4KKyAqIFJldHVybnMgbm9uLU5VTEwgZnVuY3Rpb24gcG9pbnRlciBvbiBzdWNjZXNzLgorICogUmV0dXJucyBOVUxMICsgZXJybm8gPT0gRU5PU1lTIG9uIGZhaWx1cmUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAqLworI2RlZmluZSBJTklUX1BST0NfQUREUihmdW5jdGlvbikgXAorCShmdW5jdGlvbiA9IGdldF9wcm9jX2FkZHIoJnByb2NfYWRkcl8jI2Z1bmN0aW9uKSkKKworc3RhdGljIGlubGluZSB2b2lkICpnZXRfcHJvY19hZGRyKHN0cnVjdCBwcm9jX2FkZHIgKnByb2MpCit7CisJLyogb25seSBkbyB0aGlzIG9uY2UgKi8KKwlpZiAoIXByb2MtPmluaXRpYWxpemVkKSB7CisJCUhBTkRMRSBobmQ7CisJCXByb2MtPmluaXRpYWxpemVkID0gMTsKKwkJaG5kID0gTG9hZExpYnJhcnlFeEEocHJvYy0+ZGxsLCBOVUxMLAorCQkJCSAgICAgTE9BRF9MSUJSQVJZX1NFQVJDSF9TWVNURU0zMik7CisJCWlmIChobmQpCisJCQlwcm9jLT5wZnVuY3Rpb24gPSBHZXRQcm9jQWRkcmVzcyhobmQsIHByb2MtPmZ1bmN0aW9uKTsKKwl9CisJLyogc2V0IEVOT1NZUyBpZiBETEwgb3IgZnVuY3Rpb24gd2FzIG5vdCBmb3VuZCAqLworCWlmICghcHJvYy0+cGZ1bmN0aW9uKQorCQllcnJubyA9IEVOT1NZUzsKKwlyZXR1cm4gcHJvYy0+cGZ1bmN0aW9uOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmMgYi9jb21wYXQvd2luMzIvcGF0aC11dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZjJmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvcGF0aC11dGlscy5jCkBAIC0wLDAgKzEsNTIgQEAKKyNpbmNsdWRlICIuLi8uLi9naXQtY29tcGF0LXV0aWwuaCIKKworaW50IHdpbjMyX2hhc19kb3NfZHJpdmVfcHJlZml4KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGk7CisKKwkvKgorCSAqIERvZXMgaXQgc3RhcnQgd2l0aCBhbiBBU0NJSSBsZXR0ZXIgKGkuZS4gaGlnaGVzdCBiaXQgbm90IHNldCksCisJICogZm9sbG93ZWQgYnkgYSBjb2xvbj8KKwkgKi8KKwlpZiAoISgweDgwICYgKHVuc2lnbmVkIGNoYXIpKnBhdGgpKQorCQlyZXR1cm4gKnBhdGggJiYgcGF0aFsxXSA9PSAnOicgPyAyIDogMDsKKworCS8qCisJICogV2hpbGUgZHJpdmUgbGV0dGVycyBtdXN0IGJlIGxldHRlcnMgb2YgdGhlIEVuZ2xpc2ggYWxwaGFiZXQsIGl0IGlzCisJICogcG9zc2libGUgdG8gYXNzaWduIHZpcnR1YWxseSBfYW55XyBVbmljb2RlIGNoYXJhY3RlciB2aWEgYHN1YnN0YCBhcworCSAqIGEgZHJpdmUgbGV0dGVyIHRvICJ2aXJ0dWFsIGRyaXZlcyIuIEV2ZW4gYDFgLCBvciBgw6RgLiBPciBmdW4gc3R1ZmYKKwkgKiBsaWtlIHRoaXM6CisJICoKKwkgKiAgICAgIHN1YnN0INaNOiAlVVNFUlBST0ZJTEUlXERlc2t0b3AKKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgNCAmJiAoMHg4MCAmICh1bnNpZ25lZCBjaGFyKXBhdGhbaV0pOyBpKyspCisJCTsgLyogc2tpcCBmaXJzdCBVVEYtOCBjaGFyYWN0ZXIgKi8KKwlyZXR1cm4gcGF0aFtpXSA9PSAnOicgPyBpICsgMSA6IDA7Cit9CisKK2ludCB3aW4zMl9za2lwX2Rvc19kcml2ZV9wcmVmaXgoY2hhciAqKnBhdGgpCit7CisJaW50IHJldCA9IGhhc19kb3NfZHJpdmVfcHJlZml4KCpwYXRoKTsKKwkqcGF0aCArPSByZXQ7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdpbjMyX29mZnNldF8xc3RfY29tcG9uZW50KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqcG9zID0gKGNoYXIgKilwYXRoOworCisJLyogdW5jIHBhdGhzICovCisJaWYgKCFza2lwX2Rvc19kcml2ZV9wcmVmaXgoJnBvcykgJiYKKwkJCWlzX2Rpcl9zZXAocG9zWzBdKSAmJiBpc19kaXJfc2VwKHBvc1sxXSkpIHsKKwkJLyogc2tpcCBzZXJ2ZXIgbmFtZSAqLworCQlwb3MgPSBzdHJwYnJrKHBvcyArIDIsICJcXC8iKTsKKwkJaWYgKCFwb3MpCisJCQlyZXR1cm4gMDsgLyogRXJyb3I6IG1hbGZvcm1lZCB1bmMgcGF0aCAqLworCisJCWRvIHsKKwkJCXBvcysrOworCQl9IHdoaWxlICgqcG9zICYmICFpc19kaXJfc2VwKCpwb3MpKTsKKwl9CisKKwlyZXR1cm4gcG9zICsgaXNfZGlyX3NlcCgqcG9zKSAtIHBhdGg7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcGF0aC11dGlscy5oIGIvY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmU3MDg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIFdJTjMyX1BBVEhfVVRJTFNfSAorI2RlZmluZSBXSU4zMl9QQVRIX1VUSUxTX0gKKworaW50IHdpbjMyX2hhc19kb3NfZHJpdmVfcHJlZml4KGNvbnN0IGNoYXIgKnBhdGgpOworI2RlZmluZSBoYXNfZG9zX2RyaXZlX3ByZWZpeCB3aW4zMl9oYXNfZG9zX2RyaXZlX3ByZWZpeAorCitpbnQgd2luMzJfc2tpcF9kb3NfZHJpdmVfcHJlZml4KGNoYXIgKipwYXRoKTsKKyNkZWZpbmUgc2tpcF9kb3NfZHJpdmVfcHJlZml4IHdpbjMyX3NraXBfZG9zX2RyaXZlX3ByZWZpeAorc3RhdGljIGlubGluZSBpbnQgd2luMzJfaXNfZGlyX3NlcChpbnQgYykKK3sKKwlyZXR1cm4gYyA9PSAnLycgfHwgYyA9PSAnXFwnOworfQorI2RlZmluZSBpc19kaXJfc2VwIHdpbjMyX2lzX2Rpcl9zZXAKK3N0YXRpYyBpbmxpbmUgY2hhciAqd2luMzJfZmluZF9sYXN0X2Rpcl9zZXAoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpyZXQgPSBOVUxMOworCWZvciAoOyAqcGF0aDsgKytwYXRoKQorCQlpZiAoaXNfZGlyX3NlcCgqcGF0aCkpCisJCQlyZXQgPSAoY2hhciAqKXBhdGg7CisJcmV0dXJuIHJldDsKK30KKyNkZWZpbmUgZmluZF9sYXN0X2Rpcl9zZXAgd2luMzJfZmluZF9sYXN0X2Rpcl9zZXAKK2ludCB3aW4zMl9vZmZzZXRfMXN0X2NvbXBvbmVudChjb25zdCBjaGFyICpwYXRoKTsKKyNkZWZpbmUgb2Zmc2V0XzFzdF9jb21wb25lbnQgd2luMzJfb2Zmc2V0XzFzdF9jb21wb25lbnQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcHRocmVhZC5jIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTdlZWFkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFuZHJ6ZWogSy4gSGFjemV3c2tpIDxhaGFjemV3c2tpQGdtYWlsLmNvbT4KKyAqCisgKiBESVNDTEFJTUVSOiBUaGUgaW1wbGVtZW50YXRpb24gaXMgR2l0LXNwZWNpZmljLCBpdCBpcyBzdWJzZXQgb2Ygb3JpZ2luYWwKKyAqIFB0aHJlYWRzIEFQSSwgd2l0aG91dCBsb3RzIG9mIG90aGVyIGZlYXR1cmVzIHRoYXQgR2l0IGRvZXNuJ3QgdXNlLgorICogR2l0IGFsc28gbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXNzZWQgYXJndW1lbnRzIGFyZSB2YWxpZCwgc28gdGhlcmUncworICogbm8gbmVlZCBmb3IgZG91YmxlLWNoZWNraW5nLgorICovCisKKyNpbmNsdWRlICIuLi8uLi9naXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJwdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHdpbjMyX3N0YXJ0X3JvdXRpbmUodm9pZCAqYXJnKQoreworCXB0aHJlYWRfdCAqdGhyZWFkID0gYXJnOworCXRocmVhZC0+dGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CisJdGhyZWFkLT5hcmcgPSB0aHJlYWQtPnN0YXJ0X3JvdXRpbmUodGhyZWFkLT5hcmcpOworCXJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICp0aHJlYWQsIGNvbnN0IHZvaWQgKnVudXNlZCwKKwkJICAgdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2b2lkKiksIHZvaWQgKmFyZykKK3sKKwl0aHJlYWQtPmFyZyA9IGFyZzsKKwl0aHJlYWQtPnN0YXJ0X3JvdXRpbmUgPSBzdGFydF9yb3V0aW5lOworCXRocmVhZC0+aGFuZGxlID0gKEhBTkRMRSkKKwkJX2JlZ2ludGhyZWFkZXgoTlVMTCwgMCwgd2luMzJfc3RhcnRfcm91dGluZSwgdGhyZWFkLCAwLCBOVUxMKTsKKworCWlmICghdGhyZWFkLT5oYW5kbGUpCisJCXJldHVybiBlcnJubzsKKwllbHNlCisJCXJldHVybiAwOworfQorCitpbnQgd2luMzJfcHRocmVhZF9qb2luKHB0aHJlYWRfdCAqdGhyZWFkLCB2b2lkICoqdmFsdWVfcHRyKQoreworCURXT1JEIHJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkLT5oYW5kbGUsIElORklOSVRFKTsKKwlzd2l0Y2ggKHJlc3VsdCkgeworCQljYXNlIFdBSVRfT0JKRUNUXzA6CisJCQlpZiAodmFsdWVfcHRyKQorCQkJCSp2YWx1ZV9wdHIgPSB0aHJlYWQtPmFyZzsKKwkJCXJldHVybiAwOworCQljYXNlIFdBSVRfQUJBTkRPTkVEOgorCQkJcmV0dXJuIEVJTlZBTDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwl9Cit9CisKK3B0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCkKK3sKKwlwdGhyZWFkX3QgdCA9IHsgTlVMTCB9OworCXQudGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CisJcmV0dXJuIHQ7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIvcHRocmVhZC5oIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzc5ODNkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3B0aHJlYWQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIEhlYWRlciB1c2VkIHRvIGFkYXB0IHB0aHJlYWQtYmFzZWQgUE9TSVggY29kZSB0byBXaW5kb3dzIEFQSSB0aHJlYWRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbmRyemVqIEsuIEhhY3pld3NraSA8YWhhY3pld3NraUBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBQVEhSRUFEX0gKKyNkZWZpbmUgUFRIUkVBRF9ICisKKyNpZm5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLyoKKyAqIERlZmluZXMgdGhhdCBhZGFwdCBXaW5kb3dzIEFQSSB0aHJlYWRzIHRvIHB0aHJlYWRzIEFQSQorICovCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfdCBDUklUSUNBTF9TRUNUSU9OCisKK3N0YXRpYyBpbmxpbmUgaW50IHJldHVybl8wKGludCBpKSB7CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfaW5pdChhLGIpIHJldHVybl8wKChJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKChhKSksIDApKQorI2RlZmluZSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koYSkgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKChhKSkKKyNkZWZpbmUgcHRocmVhZF9tdXRleF9sb2NrIEVudGVyQ3JpdGljYWxTZWN0aW9uCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIExlYXZlQ3JpdGljYWxTZWN0aW9uCisKK3R5cGVkZWYgaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoYSkgKCooYSkgPSAwKQorI2RlZmluZSBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KGEpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKGEsIHQpIDAKKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgMAorCisjZGVmaW5lIHB0aHJlYWRfY29uZF90IENPTkRJVElPTl9WQVJJQUJMRQorCisjZGVmaW5lIHB0aHJlYWRfY29uZF9pbml0KGEsYikgSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKChhKSkKKyNkZWZpbmUgcHRocmVhZF9jb25kX2Rlc3Ryb3koYSkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHB0aHJlYWRfY29uZF93YWl0KGEsYikgcmV0dXJuXzAoU2xlZXBDb25kaXRpb25WYXJpYWJsZUNTKChhKSwgKGIpLCBJTkZJTklURSkpCisjZGVmaW5lIHB0aHJlYWRfY29uZF9zaWduYWwgV2FrZUNvbmRpdGlvblZhcmlhYmxlCisjZGVmaW5lIHB0aHJlYWRfY29uZF9icm9hZGNhc3QgV2FrZUFsbENvbmRpdGlvblZhcmlhYmxlCisKKy8qCisgKiBTaW1wbGUgdGhyZWFkIGNyZWF0aW9uIGltcGxlbWVudGF0aW9uIHVzaW5nIHB0aHJlYWQgQVBJCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlIQU5ETEUgaGFuZGxlOworCXZvaWQgKigqc3RhcnRfcm91dGluZSkodm9pZCopOworCXZvaWQgKmFyZzsKKwlEV09SRCB0aWQ7Cit9IHB0aHJlYWRfdDsKKworaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqdGhyZWFkLCBjb25zdCB2b2lkICp1bnVzZWQsCisJCSAgIHZvaWQgKigqc3RhcnRfcm91dGluZSkodm9pZCopLCB2b2lkICphcmcpOworCisvKgorICogVG8gYXZvaWQgdGhlIG5lZWQgb2YgY29weWluZyBhIHN0cnVjdCwgd2UgdXNlIHNtYWxsIG1hY3JvIHdyYXBwZXIgdG8gcGFzcworICogcG9pbnRlciB0byB3aW4zMl9wdGhyZWFkX2pvaW4gaW5zdGVhZC4KKyAqLworI2RlZmluZSBwdGhyZWFkX2pvaW4oYSwgYikgd2luMzJfcHRocmVhZF9qb2luKCYoYSksIChiKSkKKworaW50IHdpbjMyX3B0aHJlYWRfam9pbihwdGhyZWFkX3QgKnRocmVhZCwgdm9pZCAqKnZhbHVlX3B0cik7CisKKyNkZWZpbmUgcHRocmVhZF9lcXVhbCh0MSwgdDIpICgodDEpLnRpZCA9PSAodDIpLnRpZCkKK3B0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBOT1JFVFVSTiBwdGhyZWFkX2V4aXQodm9pZCAqcmV0KQoreworCUV4aXRUaHJlYWQoKERXT1JEKShpbnRwdHJfdClyZXQpOworfQorCit0eXBlZGVmIERXT1JEIHB0aHJlYWRfa2V5X3Q7CitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqa2V5cCwgdm9pZCAoKmRlc3RydWN0b3IpKHZvaWQgKnZhbHVlKSkKK3sKKwlyZXR1cm4gKCprZXlwID0gVGxzQWxsb2MoKSkgPT0gVExTX09VVF9PRl9JTkRFWEVTID8gRUFHQUlOIDogMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9rZXlfZGVsZXRlKHB0aHJlYWRfa2V5X3Qga2V5KQoreworCXJldHVybiBUbHNGcmVlKGtleSkgPyAwIDogRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX3NldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICp2YWx1ZSkKK3sKKwlyZXR1cm4gVGxzU2V0VmFsdWUoa2V5LCAodm9pZCAqKXZhbHVlKSA/IDAgOiBFSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90IGtleSkKK3sKKwlyZXR1cm4gVGxzR2V0VmFsdWUoa2V5KTsKK30KKworI2lmbmRlZiBfX01JTkdXNjRfVkVSU0lPTl9NQUpPUgorc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9zaWdtYXNrKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvc2V0KQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBQVEhSRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMi9zeXNsb2cuYyBiL2NvbXBhdC93aW4zMi9zeXNsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjE5NzhkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3N5c2xvZy5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlICIuLi8uLi9naXQtY29tcGF0LXV0aWwuaCIKKworc3RhdGljIEhBTkRMRSBtc19ldmVudGxvZzsKKwordm9pZCBvcGVubG9nKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nb3B0LCBpbnQgZmFjaWxpdHkpCit7CisJaWYgKG1zX2V2ZW50bG9nKQorCQlyZXR1cm47CisKKwltc19ldmVudGxvZyA9IFJlZ2lzdGVyRXZlbnRTb3VyY2VBKE5VTEwsIGlkZW50KTsKKworCWlmICghbXNfZXZlbnRsb2cpCisJCXdhcm5pbmcoIlJlZ2lzdGVyRXZlbnRTb3VyY2UoKSBmYWlsZWQ6ICVsdSIsIEdldExhc3RFcnJvcigpKTsKK30KKwordm9pZCBzeXNsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlXT1JEIGxvZ3R5cGU7CisJY2hhciAqc3RyLCAqcG9zOworCWludCBzdHJfbGVuOworCXZhX2xpc3QgYXA7CisKKwlpZiAoIW1zX2V2ZW50bG9nKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdHJfbGVuID0gdnNucHJpbnRmKE5VTEwsIDAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAoc3RyX2xlbiA8IDApIHsKKwkJd2FybmluZ19lcnJubygidnNucHJpbnRmIGZhaWxlZCIpOworCQlyZXR1cm47CisJfQorCisJc3RyID0gbWFsbG9jKHN0X2FkZChzdHJfbGVuLCAxKSk7CisJaWYgKCFzdHIpIHsKKwkJd2FybmluZ19lcnJubygibWFsbG9jIGZhaWxlZCIpOworCQlyZXR1cm47CisJfQorCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNucHJpbnRmKHN0ciwgc3RyX2xlbiArIDEsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwl3aGlsZSAoKHBvcyA9IHN0cnN0cihzdHIsICIlMSIpKSAhPSBOVUxMKSB7CisJCWNoYXIgKm9sZHN0ciA9IHN0cjsKKwkJc3RyID0gcmVhbGxvYyhzdHIsIHN0X2FkZCgrK3N0cl9sZW4sIDEpKTsKKwkJaWYgKCFzdHIpIHsKKwkJCWZyZWUob2xkc3RyKTsKKwkJCXdhcm5pbmdfZXJybm8oInJlYWxsb2MgZmFpbGVkIik7CisJCQlyZXR1cm47CisJCX0KKwkJbWVtbW92ZShwb3MgKyAyLCBwb3MgKyAxLCBzdHJsZW4ocG9zKSk7CisJCXBvc1sxXSA9ICcgJzsKKwl9CisKKwlzd2l0Y2ggKHByaW9yaXR5KSB7CisJY2FzZSBMT0dfRU1FUkc6CisJY2FzZSBMT0dfQUxFUlQ6CisJY2FzZSBMT0dfQ1JJVDoKKwljYXNlIExPR19FUlI6CisJCWxvZ3R5cGUgPSBFVkVOVExPR19FUlJPUl9UWVBFOworCQlicmVhazsKKworCWNhc2UgTE9HX1dBUk5JTkc6CisJCWxvZ3R5cGUgPSBFVkVOVExPR19XQVJOSU5HX1RZUEU7CisJCWJyZWFrOworCisJY2FzZSBMT0dfTk9USUNFOgorCWNhc2UgTE9HX0lORk86CisJY2FzZSBMT0dfREVCVUc6CisJZGVmYXVsdDoKKwkJbG9ndHlwZSA9IEVWRU5UTE9HX0lORk9STUFUSU9OX1RZUEU7CisJCWJyZWFrOworCX0KKworCVJlcG9ydEV2ZW50QShtc19ldmVudGxvZywgbG9ndHlwZSwgMCwgMCwgTlVMTCwgMSwgMCwKKwkgICAgKGNvbnN0IGNoYXIgKiopJnN0ciwgTlVMTCk7CisJZnJlZShzdHIpOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3N5c2xvZy5oIGIvY29tcGF0L3dpbjMyL3N5c2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZGFhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvc3lzbG9nLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBTWVNMT0dfSAorI2RlZmluZSBTWVNMT0dfSAorCisjZGVmaW5lIExPR19QSUQgICAgIDB4MDEKKworI2RlZmluZSBMT0dfRU1FUkcgICAwCisjZGVmaW5lIExPR19BTEVSVCAgIDEKKyNkZWZpbmUgTE9HX0NSSVQgICAgMgorI2RlZmluZSBMT0dfRVJSICAgICAzCisjZGVmaW5lIExPR19XQVJOSU5HIDQKKyNkZWZpbmUgTE9HX05PVElDRSAgNQorI2RlZmluZSBMT0dfSU5GTyAgICA2CisjZGVmaW5lIExPR19ERUJVRyAgIDcKKworI2RlZmluZSBMT0dfREFFTU9OICAoMzw8MykKKwordm9pZCBvcGVubG9nKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nb3B0LCBpbnQgZmFjaWxpdHkpOwordm9pZCBzeXNsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNlbmRpZiAvKiBTWVNMT0dfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3RyYWNlMl93aW4zMl9wcm9jZXNzX2luZm8uYyBiL2NvbXBhdC93aW4zMi90cmFjZTJfd2luMzJfcHJvY2Vzc19pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjYmQxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi90cmFjZTJfd2luMzJfcHJvY2Vzc19pbmZvLmMKQEAgLTAsMCArMSwxOTEgQEAKKyNpbmNsdWRlICIuLi8uLi9jYWNoZS5oIgorI2luY2x1ZGUgIi4uLy4uL2pzb24td3JpdGVyLmgiCisjaW5jbHVkZSAibGF6eWxvYWQuaCIKKyNpbmNsdWRlIDxQc2FwaS5oPgorI2luY2x1ZGUgPHRsSGVscDMyLmg+CisKKy8qCisgKiBBbiBhcmJpdHJhcmlseSBjaG9zZW4gdmFsdWUgdG8gbGltaXQgdGhlIHNpemUgb2YgdGhlIGFuY2VzdG9yCisgKiBhcnJheSBidWlsdCBpbiBnaXRfcHJvY2Vzc2VzKCkuCisgKi8KKyNkZWZpbmUgTlJfUElEU19MSU1JVCAxMAorCisvKgorICogRmluZCB0aGUgcHJvY2VzcyBkYXRhIGZvciB0aGUgZ2l2ZW4gUElEIGluIHRoZSBnaXZlbiBzbmFwc2hvdAorICogYW5kIHVwZGF0ZSB0aGUgUFJPQ0VTU0VOVFJZMzIgZGF0YS4KKyAqLworc3RhdGljIGludCBmaW5kX3BpZChEV09SRCBwaWQsIEhBTkRMRSBoU25hcHNob3QsIFBST0NFU1NFTlRSWTMyICpwZTMyKQoreworCXBlMzItPmR3U2l6ZSA9IHNpemVvZihQUk9DRVNTRU5UUlkzMik7CisKKwlpZiAoUHJvY2VzczMyRmlyc3QoaFNuYXBzaG90LCBwZTMyKSkgeworCQlkbyB7CisJCQlpZiAocGUzMi0+dGgzMlByb2Nlc3NJRCA9PSBwaWQpCisJCQkJcmV0dXJuIDE7CisJCX0gd2hpbGUgKFByb2Nlc3MzMk5leHQoaFNuYXBzaG90LCBwZTMyKSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQWNjdW11bGF0ZSBKU09OIGFycmF5IG9mIG91ciBwYXJlbnQgcHJvY2Vzc2VzOgorICogICAgIFsKKyAqICAgICAgICAgZXhlLW5hbWUtcGFyZW50LAorICogICAgICAgICBleGUtbmFtZS1ncmFuZC1wYXJlbnQsCisgKiAgICAgICAgIC4uLgorICogICAgIF0KKyAqCisgKiBOb3RlOiB3ZSBvbmx5IHJlcG9ydCB0aGUgZmlsZW5hbWUgb2YgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZTsgdGhlCisgKiAgICAgICBvbmx5IHdheSB0byBnZXQgaXRzIGZ1bGwgcGF0aG5hbWUgaXMgdG8gdXNlIE9wZW5Qcm9jZXNzKCkKKyAqICAgICAgIGFuZCBHZXRNb2R1bGVGaWxlTmFtZUV4KCkgb3IgUXVlcnlmdWxsUHJvY2Vzc0ltYWdlTmFtZSgpCisgKiAgICAgICBhbmQgdGhhdCBzZWVtcyByYXRoZXIgZXhwZW5zaXZlIChvbiB0b3Agb2YgdGhlIGNvc3Qgb2YKKyAqICAgICAgIGdldHRpbmcgdGhlIHNuYXBzaG90KS4KKyAqCisgKiBOb3RlOiB3ZSBjb21wdXRlIHRoZSBzZXQgb2YgcGFyZW50IHByb2Nlc3NlcyBieSB3YWxraW5nIHRoZSBQUElECisgKiAgICAgICBsaW5rIGluIGVhY2ggdmlzaXRlZCBQUk9DRVNTRU5UUlkzMiByZWNvcmQuICBUaGlzIHNlYXJjaAorICogICAgICAgc3RvcHMgd2hlbiBhbiBhbmNlc3RvciBwcm9jZXNzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc25hcHNob3QKKyAqICAgICAgIChiZWNhdXNlIGl0IGV4aXRlZCBiZWZvcmUgdGhlIGN1cnJlbnQgb3IgaW50ZXJtZWRpYXRlIHBhcmVudAorICogICAgICAgcHJvY2VzcyBleGl0ZWQpLgorICoKKyAqICAgICAgIFRoaXMgc2VhcmNoIG1heSBjb21wdXRlIGFuIGluY29ycmVjdCByZXN1bHQgaWYgdGhlIFBQSUQgbGluaworICogICAgICAgcmVmZXJzIHRvIHRoZSBQSUQgb2YgYW4gZXhpdGVkIHBhcmVudCBhbmQgdGhhdCBQSUQgaGFzIGJlZW4KKyAqICAgICAgIHJlY3ljbGVkIGFuZCBnaXZlbiB0byBhIG5ldyB1bnJlbGF0ZWQgcHJvY2Vzcy4KKyAqCisgKiAgICAgICBXb3JzZSwgaXQgaXMgcG9zc2libGUgZm9yIGEgY2hpbGQgb3IgZGVzY2VuZGFudCBvZiB0aGUKKyAqICAgICAgIGN1cnJlbnQgcHJvY2VzcyB0byBiZSBnaXZlbiB0aGUgcmVjeWNsZWQgUElEIGFuZCBjYXVzZSBhCisgKiAgICAgICBQUElELWN5Y2xlLiAgVGhpcyB3b3VsZCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGJ1aWxkaW5nIG91cgorICogICAgICAgcGFyZW50IHByb2Nlc3MgYXJyYXkuCisgKgorICogTm90ZTogZm9yIGNvbXBsZXRlbmVzcywgdGhlICJTeXN0ZW0gSWRsZSIgcHJvY2VzcyBoYXMgUElEPTAgYW5kCisgKiAgICAgICBQUElEPTAgYW5kIGNvdWxkIGNhdXNlIGFub3RoZXIgUFBJRC1jeWNsZS4gIFdlIGRvbid0IGV4cGVjdAorICogICAgICAgR2l0IHRvIGJlIGEgZGVzY2VuZGFudCBvZiB0aGUgaWRsZSBwcm9jZXNzLCBidXQgYmVjYXVzZSBvZgorICogICAgICAgUElEIHJlY3ljbGluZywgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gZ2V0IGEgUFBJRCBsaW5rIHZhbHVlCisgKiAgICAgICBvZiAwLiAgVGhpcyB0b28gd291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcC4KKyAqCisgKiBUaGVyZWZvcmUsIHdlIGtlZXAgYW4gYXJyYXkgb2YgdGhlIHZpc2l0ZWQgUFBJRHMgdG8gZ3VhcmQgYWdhaW5zdAorICogY3ljbGVzLgorICoKKyAqIFdlIHVzZSBhIGZpeGVkLXNpemUgYXJyYXkgcmF0aGVyIHRoYW4gQUxMT0NfR1JPVyB0byBrZWVwIHRoaW5ncworICogc2ltcGxlIGFuZCBhdm9pZCB0aGUgYWxsb2MvcmVhbGxvYyBvdmVyaGVhZC4gIEl0IGlzIE9LIGlmIHdlCisgKiB0cnVuY2F0ZSB0aGUgc2VhcmNoIGFuZCByZXR1cm4gYSBwYXJ0aWFsIGFuc3dlci4KKyAqLworc3RhdGljIHZvaWQgZ2V0X3Byb2Nlc3NlcyhzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBIQU5ETEUgaFNuYXBzaG90KQoreworCVBST0NFU1NFTlRSWTMyIHBlMzI7CisJRFdPUkQgcGlkOworCURXT1JEIHBpZF9saXN0W05SX1BJRFNfTElNSVRdOworCWludCBrLCBucl9waWRzID0gMDsKKworCXBpZCA9IEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKKwl3aGlsZSAoZmluZF9waWQocGlkLCBoU25hcHNob3QsICZwZTMyKSkgeworCQkvKiBPbmx5IHJlcG9ydCBwYXJlbnRzLiBPbWl0IHNlbGYgZnJvbSB0aGUgSlNPTiBvdXRwdXQuICovCisJCWlmIChucl9waWRzKQorCQkJandfYXJyYXlfc3RyaW5nKGp3LCBwZTMyLnN6RXhlRmlsZSk7CisKKwkJLyogQ2hlY2sgZm9yIGN5Y2xlIGluIHNuYXBzaG90LiAoWWVzLCBpdCBoYXBwZW5lZC4pICovCisJCWZvciAoayA9IDA7IGsgPCBucl9waWRzOyBrKyspCisJCQlpZiAocGlkID09IHBpZF9saXN0W2tdKSB7CisJCQkJandfYXJyYXlfc3RyaW5nKGp3LCAiKGN5Y2xlKSIpOworCQkJCXJldHVybjsKKwkJCX0KKworCQlpZiAobnJfcGlkcyA9PSBOUl9QSURTX0xJTUlUKSB7CisJCQlqd19hcnJheV9zdHJpbmcoancsICIodHJ1bmNhdGVkKSIpOworCQkJcmV0dXJuOworCQl9CisKKwkJcGlkX2xpc3RbbnJfcGlkcysrXSA9IHBpZDsKKworCQlwaWQgPSBwZTMyLnRoMzJQYXJlbnRQcm9jZXNzSUQ7CisJfQorfQorCisvKgorICogRW1pdCBKU09OIGRhdGEgZm9yIHRoZSBjdXJyZW50IGFuZCBwYXJlbnQgcHJvY2Vzc2VzLiAgSW5kaXZpZHVhbAorICogdHJhY2UyIHRhcmdldHMgY2FuIGRlY2lkZSBob3cgdG8gYWN0dWFsbHkgcHJpbnQgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9hbmNlc3RyeSh2b2lkKQoreworCUhBTkRMRSBoU25hcHNob3QgPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBQUk9DRVNTLCAwKTsKKworCWlmIChoU25hcHNob3QgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKworCQlqd19hcnJheV9iZWdpbigmancsIDApOworCQlnZXRfcHJvY2Vzc2VzKCZqdywgaFNuYXBzaG90KTsKKwkJandfZW5kKCZqdyk7CisKKwkJdHJhY2UyX2RhdGFfanNvbigicHJvY2VzcyIsIHRoZV9yZXBvc2l0b3J5LCAid2luZG93cy9hbmNlc3RyeSIsCisJCQkJICZqdyk7CisKKwkJandfcmVsZWFzZSgmancpOworCQlDbG9zZUhhbmRsZShoU25hcHNob3QpOworCX0KK30KKworLyoKKyAqIElzIGEgZGVidWdnZXIgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcz8KKyAqCisgKiBUaGlzIHdpbGwgY2F0Y2ggZGVidWcgcnVucyAod2hlcmUgdGhlIGRlYnVnZ2VyIHN0YXJ0ZWQgdGhlIHByb2Nlc3MpLgorICogVGhpcyBpcyB0aGUgbm9ybWFsIGNhc2UuICBTaW5jZSB0aGlzIGNvZGUgaXMgY2FsbGVkIGR1cmluZyBvdXIgc3RhcnR1cCwKKyAqIGl0IHdpbGwgbm90IHJlcG9ydCBpbnN0YW5jZXMgd2hlcmUgYSBkZWJ1Z2dlciBpcyBhdHRhY2hlZCBkeW5hbWljYWxseQorICogdG8gYSBydW5uaW5nIGdpdCBwcm9jZXNzLCBidXQgdGhhdCBpcyByZWxhdGl2ZWx5IHJhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9pc19iZWluZ19kZWJ1Z2dlZCh2b2lkKQoreworCWlmIChJc0RlYnVnZ2VyUHJlc2VudCgpKQorCQl0cmFjZTJfZGF0YV9pbnRtYXgoInByb2Nlc3MiLCB0aGVfcmVwb3NpdG9yeSwKKwkJCQkgICAid2luZG93cy9kZWJ1Z2dlcl9wcmVzZW50IiwgMSk7Cit9CisKKy8qCisgKiBFbWl0IEpTT04gZGF0YSB3aXRoIHRoZSBwZWFrIG1lbW9yeSB1c2FnZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBnZXRfcGVha19tZW1vcnlfaW5mbyh2b2lkKQoreworCURFQ0xBUkVfUFJPQ19BRERSKHBzYXBpLmRsbCwgQk9PTCwgR2V0UHJvY2Vzc01lbW9yeUluZm8sIEhBTkRMRSwKKwkJCSAgUFBST0NFU1NfTUVNT1JZX0NPVU5URVJTLCBEV09SRCk7CisKKwlpZiAoSU5JVF9QUk9DX0FERFIoR2V0UHJvY2Vzc01lbW9yeUluZm8pKSB7CisJCVBST0NFU1NfTUVNT1JZX0NPVU5URVJTIHBtYzsKKworCQlpZiAoR2V0UHJvY2Vzc01lbW9yeUluZm8oR2V0Q3VycmVudFByb2Nlc3MoKSwgJnBtYywKKwkJCQkJIHNpemVvZihwbWMpKSkgeworCQkJc3RydWN0IGpzb25fd3JpdGVyIGp3ID0gSlNPTl9XUklURVJfSU5JVDsKKworCQkJandfb2JqZWN0X2JlZ2luKCZqdywgMCk7CisKKyNkZWZpbmUgS1Yoa3YpICNrdiwgKGludG1heF90KXBtYy5rdgorCisJCQlqd19vYmplY3RfaW50bWF4KCZqdywgS1YoUGFnZUZhdWx0Q291bnQpKTsKKwkJCWp3X29iamVjdF9pbnRtYXgoJmp3LCBLVihQZWFrV29ya2luZ1NldFNpemUpKTsKKwkJCWp3X29iamVjdF9pbnRtYXgoJmp3LCBLVihQZWFrUGFnZWZpbGVVc2FnZSkpOworCisJCQlqd19lbmQoJmp3KTsKKworCQkJdHJhY2UyX2RhdGFfanNvbigicHJvY2VzcyIsIHRoZV9yZXBvc2l0b3J5LAorCQkJCQkgIndpbmRvd3MvbWVtb3J5IiwgJmp3KTsKKwkJCWp3X3JlbGVhc2UoJmp3KTsKKwkJfQorCX0KK30KKwordm9pZCB0cmFjZTJfY29sbGVjdF9wcm9jZXNzX2luZm8oZW51bSB0cmFjZTJfcHJvY2Vzc19pbmZvX3JlYXNvbiByZWFzb24pCit7CisJaWYgKCF0cmFjZTJfaXNfZW5hYmxlZCgpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHJlYXNvbikgeworCWNhc2UgVFJBQ0UyX1BST0NFU1NfSU5GT19TVEFSVFVQOgorCQlnZXRfaXNfYmVpbmdfZGVidWdnZWQoKTsKKwkJZ2V0X2FuY2VzdHJ5KCk7CisJCXJldHVybjsKKworCWNhc2UgVFJBQ0UyX1BST0NFU1NfSU5GT19FWElUOgorCQlnZXRfcGVha19tZW1vcnlfaW5mbygpOworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlCVUcoInRyYWNlMl9jb2xsZWN0X3Byb2Nlc3NfaW5mbzogdW5rbm93biByZWFzb24gJyVkJyIsIHJlYXNvbik7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMybW1hcC5jIGIvY29tcGF0L3dpbjMybW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWQ1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzJtbWFwLmMKQEAgLTAsMCArMSw0NiBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCit2b2lkICpnaXRfbW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJSEFORExFIG9zZmhhbmRsZSwgaG1hcDsKKwl2b2lkICp0ZW1wOworCUxBUkdFX0lOVEVHRVIgbGVuOworCXVpbnQ2NF90IG8gPSBvZmZzZXQ7CisJdWludDMyX3QgbCA9IG8gJiAweEZGRkZGRkZGOworCXVpbnQzMl90IGggPSAobyA+PiAzMikgJiAweEZGRkZGRkZGOworCisJb3NmaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisJaWYgKCFHZXRGaWxlU2l6ZUV4KG9zZmhhbmRsZSwgJmxlbikpCisJCWRpZSgibW1hcDogY291bGQgbm90IGRldGVybWluZSBmaWxlc2l6ZSIpOworCisJaWYgKChsZW5ndGggKyBvZmZzZXQpID4gbGVuLlF1YWRQYXJ0KQorCQlsZW5ndGggPSB4c2l6ZV90KGxlbi5RdWFkUGFydCAtIG9mZnNldCk7CisKKwlpZiAoIShmbGFncyAmIE1BUF9QUklWQVRFKSkKKwkJZGllKCJJbnZhbGlkIHVzYWdlIG9mIG1tYXAgd2hlbiBidWlsdCB3aXRoIFVTRV9XSU4zMl9NTUFQIik7CisKKwlobWFwID0gQ3JlYXRlRmlsZU1hcHBpbmcob3NmaGFuZGxlLCBOVUxMLAorCQlwcm90ID09IFBST1RfUkVBRCA/IFBBR0VfUkVBRE9OTFkgOiBQQUdFX1dSSVRFQ09QWSwgMCwgMCwgTlVMTCk7CisKKwlpZiAoIWhtYXApIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiBNQVBfRkFJTEVEOworCX0KKworCXRlbXAgPSBNYXBWaWV3T2ZGaWxlRXgoaG1hcCwgcHJvdCA9PSBQUk9UX1JFQUQgPworCQkJRklMRV9NQVBfUkVBRCA6IEZJTEVfTUFQX0NPUFksIGgsIGwsIGxlbmd0aCwgc3RhcnQpOworCisJaWYgKCFDbG9zZUhhbmRsZShobWFwKSkKKwkJd2FybmluZygidW5hYmxlIHRvIGNsb3NlIGZpbGUgbWFwcGluZyBoYW5kbGUiKTsKKworCWlmICh0ZW1wKQorCQlyZXR1cm4gdGVtcDsKKworCWVycm5vID0gR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQ09NTUlUTUVOVF9MSU1JVCA/IEVGQklHIDogRUlOVkFMOworCXJldHVybiBNQVBfRkFJTEVEOworfQorCitpbnQgZ2l0X211bm1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCkKK3sKKwlyZXR1cm4gIVVubWFwVmlld09mRmlsZShzdGFydCk7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvd2luYW5zaS5jIGIvY29tcGF0L3dpbmFuc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdiMjBhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbmFuc2kuYwpAQCAtMCwwICsxLDY4MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IFBldGVyIEhhcnJpcyA8Z2l0QHBldGVyLmlzLWEtZ2Vlay5vcmc+CisgKi8KKworI3VuZGVmIE5PR0RJCisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSA8d2luZ2RpLmg+CisjaW5jbHVkZSA8d2lucmVnLmg+CisjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlICJ3aW4zMi9sYXp5bG9hZC5oIgorCitzdGF0aWMgaW50IGZkX2lzX2ludGVyYWN0aXZlWzNdID0geyAwLCAwLCAwIH07CisjZGVmaW5lIEZEX0NPTlNPTEUgMHgxCisjZGVmaW5lIEZEX1NXQVBQRUQgMHgyCisjZGVmaW5lIEZEX01TWVMgICAgMHg0CisKKy8qCisgQU5TSSBjb2RlcyB1c2VkIGJ5IGdpdDogbSwgSworCisgVGhpcyBmaWxlIGlzIGdpdC1zcGVjaWZpYy4gVGhlcmVmb3JlLCB0aGlzIGZpbGUgZG9lcyBub3QgYXR0ZW1wdAorIHRvIGltcGxlbWVudCBhbnkgY29kZXMgdGhhdCBhcmUgbm90IHVzZWQgYnkgZ2l0LgorKi8KKworc3RhdGljIEhBTkRMRSBjb25zb2xlOworc3RhdGljIFdPUkQgcGxhaW5fYXR0cjsKK3N0YXRpYyBXT1JEIGF0dHI7CitzdGF0aWMgaW50IG5lZ2F0aXZlOworc3RhdGljIGludCBub25fYXNjaWlfdXNlZCA9IDA7CitzdGF0aWMgSEFORExFIGh0aHJlYWQsIGhyZWFkLCBod3JpdGU7CitzdGF0aWMgSEFORExFIGhjb25zb2xlMSwgaGNvbnNvbGUyOworCisjaWZkZWYgX19NSU5HVzMyX18KKyNpZiAhZGVmaW5lZChfX01JTkdXNjRfVkVSU0lPTl9NQUpPUikgfHwgX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IgPCA1Cit0eXBlZGVmIHN0cnVjdCBfQ09OU09MRV9GT05UX0lORk9FWCB7CisJVUxPTkcgY2JTaXplOworCURXT1JEIG5Gb250OworCUNPT1JEIGR3Rm9udFNpemU7CisJVUlOVCBGb250RmFtaWx5OworCVVJTlQgRm9udFdlaWdodDsKKwlXQ0hBUiBGYWNlTmFtZVtMRl9GQUNFU0laRV07Cit9IENPTlNPTEVfRk9OVF9JTkZPRVgsICpQQ09OU09MRV9GT05UX0lORk9FWDsKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdhcm5faWZfcmFzdGVyX2ZvbnQodm9pZCkKK3sKKwlEV09SRCBmb250RmFtaWx5ID0gMDsKKwlERUNMQVJFX1BST0NfQUREUihrZXJuZWwzMi5kbGwsIEJPT0wsIEdldEN1cnJlbnRDb25zb2xlRm9udEV4LAorCQkJSEFORExFLCBCT09MLCBQQ09OU09MRV9GT05UX0lORk9FWCk7CisKKwkvKiBkb24ndCBib3RoZXIgaWYgb3V0cHV0IHdhcyBhc2NpaSBvbmx5ICovCisJaWYgKCFub25fYXNjaWlfdXNlZCkKKwkJcmV0dXJuOworCisJLyogR2V0Q3VycmVudENvbnNvbGVGb250RXggaXMgYXZhaWxhYmxlIHNpbmNlIFZpc3RhICovCisJaWYgKElOSVRfUFJPQ19BRERSKEdldEN1cnJlbnRDb25zb2xlRm9udEV4KSkgeworCQlDT05TT0xFX0ZPTlRfSU5GT0VYIGNmaTsKKwkJY2ZpLmNiU2l6ZSA9IHNpemVvZihjZmkpOworCQlpZiAoR2V0Q3VycmVudENvbnNvbGVGb250RXgoY29uc29sZSwgMCwgJmNmaSkpCisJCQlmb250RmFtaWx5ID0gY2ZpLkZvbnRGYW1pbHk7CisJfSBlbHNlIHsKKwkJLyogcHJlLVZpc3RhOiBjaGVjayBkZWZhdWx0IGNvbnNvbGUgZm9udCBpbiByZWdpc3RyeSAqLworCQlIS0VZIGhrZXk7CisJCWlmIChFUlJPUl9TVUNDRVNTID09IFJlZ09wZW5LZXlFeEEoSEtFWV9DVVJSRU5UX1VTRVIsICJDb25zb2xlIiwKKwkJCQkwLCBLRVlfUkVBRCwgJmhrZXkpKSB7CisJCQlEV09SRCBzaXplID0gc2l6ZW9mKGZvbnRGYW1pbHkpOworCQkJUmVnUXVlcnlWYWx1ZUV4QShoa2V5LCAiRm9udEZhbWlseSIsIE5VTEwsIE5VTEwsCisJCQkJCShMUFZPSUQpICZmb250RmFtaWx5LCAmc2l6ZSk7CisJCQlSZWdDbG9zZUtleShoa2V5KTsKKwkJfQorCX0KKworCWlmICghKGZvbnRGYW1pbHkgJiBUTVBGX1RSVUVUWVBFKSkgeworCQljb25zdCB3Y2hhcl90ICptc2cgPSBMIlxuV2FybmluZzogWW91ciBjb25zb2xlIGZvbnQgcHJvYmFibHkgIgorCQkJTCJkb2VzblwndCBzdXBwb3J0IFVuaWNvZGUuIElmIHlvdSBleHBlcmllbmNlIHN0cmFuZ2UgIgorCQkJTCJjaGFyYWN0ZXJzIGluIHRoZSBvdXRwdXQsIGNvbnNpZGVyIHN3aXRjaGluZyB0byBhICIKKwkJCUwiVHJ1ZVR5cGUgZm9udCBzdWNoIGFzIENvbnNvbGFzIVxuIjsKKwkJRFdPUkQgZHVtbXk7CisJCVdyaXRlQ29uc29sZVcoY29uc29sZSwgbXNnLCB3Y3NsZW4obXNnKSwgJmR1bW15LCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNfY29uc29sZShpbnQgZmQpCit7CisJQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gc2JpOworCURXT1JEIG1vZGU7CisJSEFORExFIGhjb247CisKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworCS8qIGdldCBPUyBoYW5kbGUgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciAqLworCWhjb24gPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZShmZCk7CisJaWYgKGhjb24gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaWYgaXRzIGEgZGV2aWNlIChpLmUuIGNvbnNvbGUsIHByaW50ZXIsIHNlcmlhbCBwb3J0KSAqLworCWlmIChHZXRGaWxlVHlwZShoY29uKSAhPSBGSUxFX1RZUEVfQ0hBUikKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBpZiBpdHMgYSBoYW5kbGUgdG8gYSBjb25zb2xlIG91dHB1dCBzY3JlZW4gYnVmZmVyICovCisJaWYgKCFmZCkgeworCQlpZiAoIUdldENvbnNvbGVNb2RlKGhjb24sICZtb2RlKSkKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBUaGlzIGNvZGUgcGF0aCBpcyBvbmx5IHJlYWNoZWQgaWYgdGhlcmUgaXMgbm8gY29uc29sZQorCQkgKiBhdHRhY2hlZCB0byBzdGRvdXQvc3RkZXJyLCBpLmUuIHdlIHdpbGwgbm90IG5lZWQgdG8gb3V0cHV0CisJCSAqIGFueSB0ZXh0IHRvIGFueSBjb25zb2xlLCB0aGVyZWZvcmUgd2UgbWlnaHQganVzdCBhcyB3ZWxsCisJCSAqIHVzZSBibGFjayBhcyBmb3JlZ3JvdW5kIGNvbG9yLgorCQkgKi8KKwkJc2JpLndBdHRyaWJ1dGVzID0gMDsKKwl9IGVsc2UgaWYgKCFHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhoY29uLCAmc2JpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmQgPj0gMCAmJiBmZCA8PSAyKQorCQlmZF9pc19pbnRlcmFjdGl2ZVtmZF0gfD0gRkRfQ09OU09MRTsKKworCS8qIGluaXRpYWxpemUgYXR0cmlidXRlcyAqLworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJY29uc29sZSA9IGhjb247CisJCWF0dHIgPSBwbGFpbl9hdHRyID0gc2JpLndBdHRyaWJ1dGVzOworCQluZWdhdGl2ZSA9IDA7CisJCWluaXRpYWxpemVkID0gMTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBCVUZGRVJfU0laRSA0MDk2CisjZGVmaW5lIE1BWF9QQVJBTVMgMTYKKworc3RhdGljIHZvaWQgd3JpdGVfY29uc29sZSh1bnNpZ25lZCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit7CisJLyogb25seSBjYWxsZWQgZnJvbSBjb25zb2xlX3RocmVhZCwgc28gYSBzdGF0aWMgYnVmZmVyIHdpbGwgZG8gKi8KKwlzdGF0aWMgd2NoYXJfdCB3YnVmWzIgKiBCVUZGRVJfU0laRSArIDFdOworCURXT1JEIGR1bW15OworCisJLyogY29udmVydCB1dGYtOCB0byB1dGYtMTYgKi8KKwlpbnQgd2xlbiA9IHh1dGZ0b3djc24od2J1ZiwgKGNoYXIqKSBzdHIsIEFSUkFZX1NJWkUod2J1ZiksIGxlbik7CisJaWYgKHdsZW4gPCAwKSB7CisJCXdjaGFyX3QgKmVyciA9IEwiW2ludmFsaWRdIjsKKwkJV3JpdGVDb25zb2xlVyhjb25zb2xlLCBlcnIsIHdjc2xlbihlcnIpLCAmZHVtbXksIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJLyogd3JpdGUgZGlyZWN0bHkgdG8gY29uc29sZSAqLworCVdyaXRlQ29uc29sZVcoY29uc29sZSwgd2J1Ziwgd2xlbiwgJmR1bW15LCBOVUxMKTsKKworCS8qIHJlbWVtYmVyIGlmIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIGFyZSBwcmludGVkICovCisJaWYgKHdsZW4gIT0gbGVuKQorCQlub25fYXNjaWlfdXNlZCA9IDE7Cit9CisKKyNkZWZpbmUgRk9SRUdST1VORF9BTEwgKEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSkKKyNkZWZpbmUgQkFDS0dST1VORF9BTEwgKEJBQ0tHUk9VTkRfUkVEIHwgQkFDS0dST1VORF9HUkVFTiB8IEJBQ0tHUk9VTkRfQkxVRSkKKworc3RhdGljIHZvaWQgc2V0X2NvbnNvbGVfYXR0cih2b2lkKQoreworCVdPUkQgYXR0cmlidXRlcyA9IGF0dHI7CisJaWYgKG5lZ2F0aXZlKSB7CisJCWF0dHJpYnV0ZXMgJj0gfkZPUkVHUk9VTkRfQUxMOworCQlhdHRyaWJ1dGVzICY9IH5CQUNLR1JPVU5EX0FMTDsKKworCQkvKiBUaGlzIGNvdWxkIHByb2JhYmx5IHVzZSBhIGJpdG1hc2sKKwkJICAgaW5zdGVhZCBvZiBhIHNlcmllcyBvZiBpZnMgKi8KKwkJaWYgKGF0dHIgJiBGT1JFR1JPVU5EX1JFRCkKKwkJCWF0dHJpYnV0ZXMgfD0gQkFDS0dST1VORF9SRUQ7CisJCWlmIChhdHRyICYgRk9SRUdST1VORF9HUkVFTikKKwkJCWF0dHJpYnV0ZXMgfD0gQkFDS0dST1VORF9HUkVFTjsKKwkJaWYgKGF0dHIgJiBGT1JFR1JPVU5EX0JMVUUpCisJCQlhdHRyaWJ1dGVzIHw9IEJBQ0tHUk9VTkRfQkxVRTsKKworCQlpZiAoYXR0ciAmIEJBQ0tHUk9VTkRfUkVEKQorCQkJYXR0cmlidXRlcyB8PSBGT1JFR1JPVU5EX1JFRDsKKwkJaWYgKGF0dHIgJiBCQUNLR1JPVU5EX0dSRUVOKQorCQkJYXR0cmlidXRlcyB8PSBGT1JFR1JPVU5EX0dSRUVOOworCQlpZiAoYXR0ciAmIEJBQ0tHUk9VTkRfQkxVRSkKKwkJCWF0dHJpYnV0ZXMgfD0gRk9SRUdST1VORF9CTFVFOworCX0KKwlTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZShjb25zb2xlLCBhdHRyaWJ1dGVzKTsKK30KKworc3RhdGljIHZvaWQgZXJhc2VfaW5fbGluZSh2b2lkKQoreworCUNPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNiaTsKKwlEV09SRCBkdW1teTsgLyogTmVlZGVkIGZvciBXaW5kb3dzIDcgKG9yIFZpc3RhKSByZWdyZXNzaW9uICovCisKKwlpZiAoIWNvbnNvbGUpCisJCXJldHVybjsKKworCUdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKGNvbnNvbGUsICZzYmkpOworCUZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQShjb25zb2xlLCAnICcsCisJCXNiaS5kd1NpemUuWCAtIHNiaS5kd0N1cnNvclBvc2l0aW9uLlgsIHNiaS5kd0N1cnNvclBvc2l0aW9uLAorCQkmZHVtbXkpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYXR0cihjaGFyIGZ1bmMsIGNvbnN0IGludCAqcGFyYW1zLCBpbnQgcGFyYW1sZW4pCit7CisJaW50IGk7CisJc3dpdGNoIChmdW5jKSB7CisJY2FzZSAnbSc6CisJCWZvciAoaSA9IDA7IGkgPCBwYXJhbWxlbjsgaSsrKSB7CisJCQlzd2l0Y2ggKHBhcmFtc1tpXSkgeworCQkJY2FzZSAwOiAvKiByZXNldCAqLworCQkJCWF0dHIgPSBwbGFpbl9hdHRyOworCQkJCW5lZ2F0aXZlID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTogLyogYm9sZCAqLworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6ICAvKiBmYWludCAqLworCQkJY2FzZSAyMjogLyogbm9ybWFsICovCisJCQkJYXR0ciAmPSB+Rk9SRUdST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6ICAvKiBpdGFsaWMgKi8KKwkJCQkvKiBVbnN1cHBvcnRlZCAqLworCQkJCWJyZWFrOworCQkJY2FzZSA0OiAgLyogdW5kZXJsaW5lICovCisJCQljYXNlIDIxOiAvKiBkb3VibGUgdW5kZXJsaW5lICovCisJCQkJLyogV2lraXBlZGlhIHNheXMgdGhpcyBmbGFnIGRvZXMgbm90aGluZyAqLworCQkJCS8qIEZ1cnRoZXJtb3JlLCBtaW5ndyBkb2Vzbid0IGRlZmluZSB0aGlzIGZsYWcKKwkJCQlhdHRyIHw9IENPTU1PTl9MVkJfVU5ERVJTQ09SRTsgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMjQ6IC8qIG5vIHVuZGVybGluZSAqLworCQkJCS8qIGF0dHIgJj0gfkNPTU1PTl9MVkJfVU5ERVJTQ09SRTsgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgNTogIC8qIHNsb3cgYmxpbmsgKi8KKwkJCWNhc2UgNjogIC8qIGZhc3QgYmxpbmsgKi8KKwkJCQkvKiBXZSBkb24ndCBoYXZlIGJsaW5rLCBidXQgd2UgZG8gaGF2ZQorCQkJCSAgIGJhY2tncm91bmQgaW50ZW5zaXR5ICovCisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0lOVEVOU0lUWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjU6IC8qIG5vIGJsaW5rICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDc6ICAvKiBuZWdhdGl2ZSAqLworCQkJCW5lZ2F0aXZlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjc6IC8qIHBvc2l0aXZlICovCisJCQkJbmVnYXRpdmUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSA4OiAgLyogY29uY2VhbCAqLworCQkJY2FzZSAyODogLyogcmV2ZWFsICovCisJCQkJLyogVW5zdXBwb3J0ZWQgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMzA6IC8qIEJsYWNrICovCisJCQkJYXR0ciAmPSB+Rk9SRUdST1VORF9BTEw7CisJCQkJYnJlYWs7CisJCQljYXNlIDMxOiAvKiBSZWQgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEOworCQkJCWJyZWFrOworCQkJY2FzZSAzMjogLyogR3JlZW4gKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfR1JFRU47CisJCQkJYnJlYWs7CisJCQljYXNlIDMzOiAvKiBZZWxsb3cgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzQ6IC8qIEJsdWUgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzU6IC8qIE1hZ2VudGEgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSAzNjogLyogQ3lhbiAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzc6IC8qIFdoaXRlICovCisJCQkJYXR0ciB8PSBGT1JFR1JPVU5EX1JFRCB8CisJCQkJCUZPUkVHUk9VTkRfR1JFRU4gfAorCQkJCQlGT1JFR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM4OiAvKiBVbmtub3duICovCisJCQkJYnJlYWs7CisJCQljYXNlIDM5OiAvKiByZXNldCAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gKHBsYWluX2F0dHIgJiBGT1JFR1JPVU5EX0FMTCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDQwOiAvKiBCbGFjayAqLworCQkJCWF0dHIgJj0gfkJBQ0tHUk9VTkRfQUxMOworCQkJCWJyZWFrOworCQkJY2FzZSA0MTogLyogUmVkICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDI6IC8qIEdyZWVuICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0dSRUVOOworCQkJCWJyZWFrOworCQkJY2FzZSA0MzogLyogWWVsbG93ICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRCB8IEJBQ0tHUk9VTkRfR1JFRU47CisJCQkJYnJlYWs7CisJCQljYXNlIDQ0OiAvKiBCbHVlICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ1OiAvKiBNYWdlbnRhICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRCB8IEJBQ0tHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDY6IC8qIEN5YW4gKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfR1JFRU4gfCBCQUNLR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ3OiAvKiBXaGl0ZSAqLworCQkJCWF0dHIgfD0gQkFDS0dST1VORF9SRUQgfAorCQkJCQlCQUNLR1JPVU5EX0dSRUVOIHwKKwkJCQkJQkFDS0dST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSA0ODogLyogVW5rbm93biAqLworCQkJCWJyZWFrOworCQkJY2FzZSA0OTogLyogcmVzZXQgKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IChwbGFpbl9hdHRyICYgQkFDS0dST1VORF9BTEwpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBVbnN1cHBvcnRlZCBjb2RlICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc2V0X2NvbnNvbGVfYXR0cigpOworCQlicmVhazsKKwljYXNlICdLJzoKKwkJZXJhc2VfaW5fbGluZSgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbnN1cHBvcnRlZCBjb2RlICovCisJCWJyZWFrOworCX0KK30KKworZW51bSB7CisJVEVYVCA9IDAsIEVTQ0FQRSA9IDAzMywgQlJBQ0tFVCA9ICdbJworfTsKKworc3RhdGljIERXT1JEIFdJTkFQSSBjb25zb2xlX3RocmVhZChMUFZPSUQgdW51c2VkKQoreworCXVuc2lnbmVkIGNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKKwlEV09SRCBieXRlczsKKwlpbnQgc3RhcnQsIGVuZCA9IDAsIGMsIHBhcmFtcG9zID0gMCwgc3RhdGUgPSBURVhUOworCWludCBwYXJhbXNbTUFYX1BBUkFNU107CisKKwl3aGlsZSAoMSkgeworCQkvKiByZWFkIG5leHQgY2h1bmsgb2YgYnl0ZXMgZnJvbSB0aGUgcGlwZSAqLworCQlpZiAoIVJlYWRGaWxlKGhyZWFkLCBidWZmZXIgKyBlbmQsIEJVRkZFUl9TSVpFIC0gZW5kLCAmYnl0ZXMsCisJCQkJTlVMTCkpIHsKKwkJCS8qIGV4aXQgaWYgcGlwZSBoYXMgYmVlbiBjbG9zZWQgb3IgZGlzY29ubmVjdGVkICovCisJCQlpZiAoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfUElQRV9OT1RfQ09OTkVDVEVEIHx8CisJCQkJCUdldExhc3RFcnJvcigpID09IEVSUk9SX0JST0tFTl9QSVBFKQorCQkJCWJyZWFrOworCQkJLyogaWdub3JlIG90aGVyIGVycm9ycyAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzY2FuIHRoZSBieXRlcyBhbmQgaGFuZGxlIEFOU0kgY29udHJvbCBjb2RlcyAqLworCQlieXRlcyArPSBlbmQ7CisJCXN0YXJ0ID0gZW5kID0gMDsKKwkJd2hpbGUgKGVuZCA8IGJ5dGVzKSB7CisJCQljID0gYnVmZmVyW2VuZCsrXTsKKwkJCXN3aXRjaCAoc3RhdGUpIHsKKwkJCWNhc2UgVEVYVDoKKwkJCQlpZiAoYyA9PSBFU0NBUEUpIHsKKwkJCQkJLyogcHJpbnQgdGV4dCBzZWVuIHNvIGZhciAqLworCQkJCQlpZiAoZW5kIC0gMSA+IHN0YXJ0KQorCQkJCQkJd3JpdGVfY29uc29sZShidWZmZXIgKyBzdGFydCwKKwkJCQkJCQllbmQgLSAxIC0gc3RhcnQpOworCisJCQkJCS8qIHRoZW4gc3RhcnQgcGFyc2luZyBlc2NhcGUgc2VxdWVuY2UgKi8KKwkJCQkJc3RhcnQgPSBlbmQgLSAxOworCQkJCQltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CisJCQkJCXBhcmFtcG9zID0gMDsKKwkJCQkJc3RhdGUgPSBFU0NBUEU7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEVTQ0FQRToKKwkJCQkvKiBjb250aW51ZSBpZiAiXDAzM1siLCBvdGhlcndpc2UgYmFpbCBvdXQgKi8KKwkJCQlzdGF0ZSA9IChjID09IEJSQUNLRVQpID8gQlJBQ0tFVCA6IFRFWFQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQlJBQ0tFVDoKKwkJCQkvKiBwYXJzZSBbMC05O10qIGludG8gYXJyYXkgb2YgcGFyYW1ldGVycyAqLworCQkJCWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeworCQkJCQlwYXJhbXNbcGFyYW1wb3NdICo9IDEwOworCQkJCQlwYXJhbXNbcGFyYW1wb3NdICs9IGMgLSAnMCc7CisJCQkJfSBlbHNlIGlmIChjID09ICc7JykgeworCQkJCQkvKgorCQkJCQkgKiBuZXh0IHBhcmFtZXRlciwgYmFpbCBvdXQgaWYgb3V0IG9mCisJCQkJCSAqIGJvdW5kcworCQkJCQkgKi8KKwkJCQkJcGFyYW1wb3MrKzsKKwkJCQkJaWYgKHBhcmFtcG9zID49IE1BWF9QQVJBTVMpCisJCQkJCQlzdGF0ZSA9IFRFWFQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogZW5kIG9mIGVzY2FwZSBzZXF1ZW5jZSwgY2hhbmdlCisJCQkJCSAqIGNvbnNvbGUgYXR0cmlidXRlcworCQkJCQkgKi8KKwkJCQkJc2V0X2F0dHIoYywgcGFyYW1zLCBwYXJhbXBvcyArIDEpOworCQkJCQlzdGFydCA9IGVuZDsKKwkJCQkJc3RhdGUgPSBURVhUOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIHByaW50IHJlbWFpbmluZyB0ZXh0IHVubGVzcyBwYXJzaW5nIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLworCQlpZiAoc3RhdGUgPT0gVEVYVCAmJiBlbmQgPiBzdGFydCkgeworCQkJLyogY2hlY2sgZm9yIGluY29tcGxldGUgVVRGLTggc2VxdWVuY2VzIGFuZCBmaXggZW5kICovCisJCQlpZiAoYnVmZmVyW2VuZCAtIDFdID49IDB4ODApIHsKKwkJCQlpZiAoYnVmZmVyW2VuZCAtMV0gPj0gMHhjMCkKKwkJCQkJZW5kLS07CisJCQkJZWxzZSBpZiAoZW5kIC0gMSA+IHN0YXJ0ICYmCisJCQkJCQlidWZmZXJbZW5kIC0gMl0gPj0gMHhlMCkKKwkJCQkJZW5kIC09IDI7CisJCQkJZWxzZSBpZiAoZW5kIC0gMiA+IHN0YXJ0ICYmCisJCQkJCQlidWZmZXJbZW5kIC0gM10gPj0gMHhmMCkKKwkJCQkJZW5kIC09IDM7CisJCQl9CisKKwkJCS8qIHByaW50IHJlbWFpbmluZyBjb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZXMgKi8KKwkJCWlmIChlbmQgPiBzdGFydCkKKwkJCQl3cml0ZV9jb25zb2xlKGJ1ZmZlciArIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisKKwkJCS8qIG1vdmUgcmVtYWluaW5nIGJ5dGVzIHRvIHRoZSBmcm9udCAqLworCQkJaWYgKGVuZCA8IGJ5dGVzKQorCQkJCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyBlbmQsIGJ5dGVzIC0gZW5kKTsKKwkJCWVuZCA9IGJ5dGVzIC0gZW5kOworCQl9IGVsc2UgeworCQkJLyogYWxsIGRhdGEgaGFzIGJlZW4gY29uc3VtZWQsIG1hcmsgYnVmZmVyIGVtcHR5ICovCisJCQllbmQgPSAwOworCQl9CisJfQorCisJLyogY2hlY2sgaWYgdGhlIGNvbnNvbGUgZm9udCBzdXBwb3J0cyB1bmljb2RlICovCisJd2Fybl9pZl9yYXN0ZXJfZm9udCgpOworCisJQ2xvc2VIYW5kbGUoaHJlYWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3aW5hbnNpX2V4aXQodm9pZCkKK3sKKwkvKiBmbHVzaCBhbGwgc3RyZWFtcyAqLworCV9mbHVzaGFsbCgpOworCisJLyogc2lnbmFsIGNvbnNvbGUgdGhyZWFkIHRvIGV4aXQgKi8KKwlGbHVzaEZpbGVCdWZmZXJzKGh3cml0ZSk7CisJRGlzY29ubmVjdE5hbWVkUGlwZShod3JpdGUpOworCisJLyogd2FpdCBmb3IgY29uc29sZSB0aHJlYWQgdG8gY29weSByZW1haW5pbmcgZGF0YSAqLworCVdhaXRGb3JTaW5nbGVPYmplY3QoaHRocmVhZCwgSU5GSU5JVEUpOworCisJLyogY2xlYW51cCBoYW5kbGVzLi4uICovCisJQ2xvc2VIYW5kbGUoaHdyaXRlKTsKKwlDbG9zZUhhbmRsZShodGhyZWFkKTsKK30KKworc3RhdGljIHZvaWQgZGllX2xhc3RlcnIoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJZGllX2Vycm5vKGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworI3VuZGVmIGR1cDIKK2ludCB3aW5hbnNpX2R1cDIoaW50IG9sZGZkLCBpbnQgbmV3ZmQpCit7CisJaW50IHJldCA9IGR1cDIob2xkZmQsIG5ld2ZkKTsKKworCWlmICghcmV0ICYmIG5ld2ZkID49IDAgJiYgbmV3ZmQgPD0gMikKKwkJZmRfaXNfaW50ZXJhY3RpdmVbbmV3ZmRdID0gb2xkZmQgPCAwIHx8IG9sZGZkID4gMiA/CisJCQkwIDogZmRfaXNfaW50ZXJhY3RpdmVbb2xkZmRdOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIEhBTkRMRSBkdXBsaWNhdGVfaGFuZGxlKEhBTkRMRSBobmQpCit7CisJSEFORExFIGhyZXN1bHQsIGhwcm9jID0gR2V0Q3VycmVudFByb2Nlc3MoKTsKKwlpZiAoIUR1cGxpY2F0ZUhhbmRsZShocHJvYywgaG5kLCBocHJvYywgJmhyZXN1bHQsIDAsIFRSVUUsCisJCQlEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorCQlkaWVfbGFzdGVycigiRHVwbGljYXRlSGFuZGxlKCVsaSkgZmFpbGVkIiwKKwkJCShsb25nKSAoaW50cHRyX3QpIGhuZCk7CisJcmV0dXJuIGhyZXN1bHQ7Cit9CisKK3N0YXRpYyBIQU5ETEUgc3dhcF9vc2ZobmQoaW50IGZkLCBIQU5ETEUgbmV3X2hhbmRsZSkKK3sKKwkvKgorCSAqIENyZWF0ZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggZmQKKwkgKiBiZWNhdXNlIHRoZSBvcmlnaW5hbCB3aWxsIGdldCBjbG9zZWQgd2hlbiB3ZSBkdXAyKCkuCisJICovCisJSEFORExFIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworCUhBTkRMRSBkdXBsaWNhdGUgPSBkdXBsaWNhdGVfaGFuZGxlKGhhbmRsZSk7CisKKwkvKiBDcmVhdGUgYSB0ZW1wIGZkIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWxyZWFkeSBvcGVuICJuZXdfaGFuZGxlIi4gKi8KKwlpbnQgbmV3X2ZkID0gX29wZW5fb3NmaGFuZGxlKChpbnRwdHJfdCluZXdfaGFuZGxlLCBPX0JJTkFSWSk7CisKKwlhc3NlcnQoKGZkID09IDEpIHx8IChmZCA9PSAyKSk7CisKKwkvKgorCSAqIFVzZSBzdG9jayBkdXAyKCkgdG8gcmUtYmluZCBmZCB0byB0aGUgbmV3IGhhbmRsZS4gIE5vdGUgdGhhdAorCSAqIHRoaXMgd2lsbCBpbXBsaWNpdGx5IGNsb3NlKDEpIGFuZCBjbG9zZSBib3RoIGZkPTEgYW5kIHRoZQorCSAqIG9yaWdpbmFsbHkgYXNzb2NpYXRlZCBoYW5kbGUuICBJdCB3aWxsIG9wZW4gYSBuZXcgZmQ9MSBhbmQKKwkgKiBjYWxsIER1cGxpY2F0ZUhhbmRsZSgpIG9uIHRoZSBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIG5ld19mZC4KKwkgKiBJdCBpcyBiZWNhdXNlIG9mIHRoaXMgaW1wbGljaXQgY2xvc2UoKSB0aGF0IHdlIGNyZWF0ZWQgdGhlCisJICogY29weSBvZiB0aGUgb3JpZ2luYWwuCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNhY2hlZCBjb25zb2xlIGhhbmRsZSB0byB0aGUKKwkgKiBkdXBsaWNhdGVkIG9uZSBiZWNhdXNlIHRoZSBkdXAyKCkgY2FsbCB3aWxsIGltcGxpY2l0bHkgY2xvc2UKKwkgKiB0aGUgb3JpZ2luYWwgb25lLgorCSAqCisJICogTm90ZSB0aGF0IGR1cDIoKSB3aGVuIGdpdmVuIHRhcmdldCA6PSB7MCwxLDJ9IHdpbGwgYWxzbworCSAqIGNhbGwgU2V0U3RkSGFuZGxlKCksIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC4KKwkgKi8KKwlpZiAoY29uc29sZSA9PSBoYW5kbGUpCisJCWNvbnNvbGUgPSBkdXBsaWNhdGU7CisJZHVwMihuZXdfZmQsIGZkKTsKKworCS8qIENsb3NlIHRoZSB0ZW1wIGZkLiAgVGhpcyBleHBsaWNpdGx5IGNsb3NlcyAibmV3X2hhbmRsZSIKKwkgKiAoYmVjYXVzZSBpdCBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggaXQpLgorCSAqLworCWNsb3NlKG5ld19mZCk7CisKKwlpZiAoZmQgPT0gMikKKwkJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKKwlmZF9pc19pbnRlcmFjdGl2ZVtmZF0gfD0gRkRfU1dBUFBFRDsKKworCXJldHVybiBkdXBsaWNhdGU7Cit9CisKKyNpZmRlZiBERVRFQ1RfTVNZU19UVFkKKworI2luY2x1ZGUgPHdpbnRlcm5sLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorCit0eXBlZGVmIHN0cnVjdCBfT0JKRUNUX05BTUVfSU5GT1JNQVRJT04KK3sKKwlVTklDT0RFX1NUUklORyBOYW1lOworCVdDSEFSIE5hbWVCdWZmZXJbRkxFWF9BUlJBWV07Cit9IE9CSkVDVF9OQU1FX0lORk9STUFUSU9OLCAqUE9CSkVDVF9OQU1FX0lORk9STUFUSU9OOworCisjZGVmaW5lIE9iamVjdE5hbWVJbmZvcm1hdGlvbiAxCisKKyNlbHNlCisjaW5jbHVkZSA8bnRzdGF0dXMuaD4KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBkZXRlY3RfbXN5c190dHkoaW50IGZkKQoreworCVVMT05HIHJlc3VsdDsKKwlCWVRFIGJ1ZmZlclsxMDI0XTsKKwlQT0JKRUNUX05BTUVfSU5GT1JNQVRJT04gbmFtZWluZm8gPSAoUE9CSkVDVF9OQU1FX0lORk9STUFUSU9OKSBidWZmZXI7CisJUFdTVFIgbmFtZTsKKworCS8qIGNoZWNrIGlmIGZkIGlzIGEgcGlwZSAqLworCUhBTkRMRSBoID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoZmQpOworCWlmIChHZXRGaWxlVHlwZShoKSAhPSBGSUxFX1RZUEVfUElQRSkKKwkJcmV0dXJuOworCisJLyogZ2V0IHBpcGUgbmFtZSAqLworCWlmICghTlRfU1VDQ0VTUyhOdFF1ZXJ5T2JqZWN0KGgsIE9iamVjdE5hbWVJbmZvcm1hdGlvbiwKKwkJCWJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAyLCAmcmVzdWx0KSkpCisJCXJldHVybjsKKwluYW1lID0gbmFtZWluZm8tPk5hbWUuQnVmZmVyOworCW5hbWVbbmFtZWluZm8tPk5hbWUuTGVuZ3RoIC8gc2l6ZW9mKCpuYW1lKV0gPSAwOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGlzIGNvdWxkIGJlIGEgTVNZUzIgcHR5IHBpcGUgKCdtc3lzLVhYWFgtcHR5Ti1YWCcpCisJICogb3IgYSBjeWd3aW4gcHR5IHBpcGUgKCdjeWd3aW4tWFhYWC1wdHlOLVhYJykKKwkgKi8KKwlpZiAoKCF3Y3NzdHIobmFtZSwgTCJtc3lzLSIpICYmICF3Y3NzdHIobmFtZSwgTCJjeWd3aW4tIikpIHx8CisJCQkhd2Nzc3RyKG5hbWUsIEwiLXB0eSIpKQorCQlyZXR1cm47CisKKwlpZiAoZmQgPT0gMikKKwkJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKKwlmZF9pc19pbnRlcmFjdGl2ZVtmZF0gfD0gRkRfTVNZUzsKK30KKworI2VuZGlmCisKKy8qCisgKiBXcmFwcGVyIGZvciBpc2F0dHkoKS4gIE1vc3QgY2FsbHMgaW4gdGhlIG1haW4gZ2l0IGNvZGUKKyAqIGNhbGwgaXNhdHR5KDEgb3IgMikgdG8gc2VlIGlmIHRoZSBpbnN0YW5jZSBpcyBpbnRlcmFjdGl2ZQorICogYW5kIHNob3VsZDogYmUgY29sb3JlZCwgc2hvdyBwcm9ncmVzcywgcGFnaW5hdGUgb3V0cHV0LgorICogV2UgbGllIGFuZCBnaXZlIHJlc3VsdHMgZm9yIHdoYXQgdGhlIGRlc2NyaXB0b3IgV0FTIGF0CisgKiBzdGFydHVwIChhbmQgaWdub3JlIGFueSBwaXBlIHJlZGlyZWN0aW9uIHdlIGludGVybmFsbHkKKyAqIGRvKS4KKyAqLworI3VuZGVmIGlzYXR0eQoraW50IHdpbmFuc2lfaXNhdHR5KGludCBmZCkKK3sKKwlpZiAoZmQgPj0gMCAmJiBmZCA8PSAyKQorCQlyZXR1cm4gZmRfaXNfaW50ZXJhY3RpdmVbZmRdICE9IDA7CisJcmV0dXJuIGlzYXR0eShmZCk7Cit9CisKK3ZvaWQgd2luYW5zaV9pbml0KHZvaWQpCit7CisJaW50IGNvbjEsIGNvbjI7CisJd2NoYXJfdCBuYW1lWzMyXTsKKworCS8qIGNoZWNrIGlmIGVpdGhlciBzdGRvdXQgb3Igc3RkZXJyIGlzIGEgY29uc29sZSBvdXRwdXQgc2NyZWVuIGJ1ZmZlciAqLworCWNvbjEgPSBpc19jb25zb2xlKDEpOworCWNvbjIgPSBpc19jb25zb2xlKDIpOworCisJLyogQWxzbyBjb21wdXRlIGNvbnNvbGUgYml0IGZvciBmZCAwIGV2ZW4gdGhvdWdoIHdlIGRvbid0IG5lZWQgdGhlIHJlc3VsdCBoZXJlLiAqLworCWlzX2NvbnNvbGUoMCk7CisKKwlpZiAoIWNvbjEgJiYgIWNvbjIpIHsKKyNpZmRlZiBERVRFQ1RfTVNZU19UVFkKKwkJLyogY2hlY2sgaWYgc3RkaW4gLyBzdGRvdXQgLyBzdGRlcnIgYXJlIE1TWVMyIHB0eSBwaXBlcyAqLworCQlkZXRlY3RfbXN5c190dHkoMCk7CisJCWRldGVjdF9tc3lzX3R0eSgxKTsKKwkJZGV0ZWN0X21zeXNfdHR5KDIpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwkvKiBjcmVhdGUgYSBuYW1lZCBwaXBlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGNvbnNvbGUgdGhyZWFkICovCisJaWYgKHN3cHJpbnRmKG5hbWUsIEFSUkFZX1NJWkUobmFtZSkgLSAxLCBMIlxcXFwuXFxwaXBlXFx3aW5hbnNpJWx1IiwKKwkJICAgICBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpIDwgMCkKKwkJZGllKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB3aW5hbnNpIHBpcGUgbmFtZSIpOworCWh3cml0ZSA9IENyZWF0ZU5hbWVkUGlwZVcobmFtZSwgUElQRV9BQ0NFU1NfT1VUQk9VTkQsCisJCVBJUEVfVFlQRV9CWVRFIHwgUElQRV9XQUlULCAxLCBCVUZGRVJfU0laRSwgMCwgMCwgTlVMTCk7CisJaWYgKGh3cml0ZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJZGllX2xhc3RlcnIoIkNyZWF0ZU5hbWVkUGlwZSBmYWlsZWQiKTsKKworCWhyZWFkID0gQ3JlYXRlRmlsZVcobmFtZSwgR0VORVJJQ19SRUFELCAwLCBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKKwlpZiAoaHJlYWQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCWRpZV9sYXN0ZXJyKCJDcmVhdGVGaWxlIGZvciBuYW1lZCBwaXBlIGZhaWxlZCIpOworCisJLyogc3RhcnQgY29uc29sZSBzcG9vbCB0aHJlYWQgb24gdGhlIHBpcGUncyByZWFkIGVuZCAqLworCWh0aHJlYWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgY29uc29sZV90aHJlYWQsIE5VTEwsIDAsIE5VTEwpOworCWlmIChodGhyZWFkID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlkaWVfbGFzdGVycigiQ3JlYXRlVGhyZWFkKGNvbnNvbGVfdGhyZWFkKSBmYWlsZWQiKTsKKworCS8qIHNjaGVkdWxlIGNsZWFudXAgcm91dGluZSAqLworCWlmIChhdGV4aXQod2luYW5zaV9leGl0KSkKKwkJZGllX2Vycm5vKCJhdGV4aXQod2luYW5zaV9leGl0KSBmYWlsZWQiKTsKKworCS8qIHJlZGlyZWN0IHN0ZG91dCAvIHN0ZGVyciB0byB0aGUgcGlwZSAqLworCWlmIChjb24xKQorCQloY29uc29sZTEgPSBzd2FwX29zZmhuZCgxLCBkdXBsaWNhdGVfaGFuZGxlKGh3cml0ZSkpOworCWlmIChjb24yKQorCQloY29uc29sZTIgPSBzd2FwX29zZmhuZCgyLCBkdXBsaWNhdGVfaGFuZGxlKGh3cml0ZSkpOworfQorCisvKgorICogUmV0dXJucyB0aGUgcmVhbCBjb25zb2xlIGhhbmRsZSBpZiBzdGRvdXQgLyBzdGRlcnIgaXMgYSBwaXBlIHJlZGlyZWN0aW5nCisgKiB0byB0aGUgY29uc29sZS4gQWxsb3dzIHNwYXduIC8gZXhlYyB0byBwYXNzIHRoZSBjb25zb2xlIHRvIHRoZSBuZXh0IHByb2Nlc3MuCisgKi8KK0hBTkRMRSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoaW50IGZkKQoreworCUhBTkRMRSByZXQ7CisKKwlpZiAoZmQgPT0gMSAmJiAoZmRfaXNfaW50ZXJhY3RpdmVbMV0gJiBGRF9TV0FQUEVEKSkKKwkJcmV0dXJuIGhjb25zb2xlMTsKKwlpZiAoZmQgPT0gMiAmJiAoZmRfaXNfaW50ZXJhY3RpdmVbMl0gJiBGRF9TV0FQUEVEKSkKKwkJcmV0dXJuIGhjb25zb2xlMjsKKworCXJldCA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworCisJLyoKKwkgKiBUaGVyZSBhcmUgb2J2aW91c2x5IGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggX2dldF9vc2ZoYW5kbGUoKQorCSAqIHJldHVybnMgKEhBTkRMRSktMi4gVGhpcyBpcyBub3QgZG9jdW1lbnRlZCBhbnl3aGVyZSwgYnV0IHRoYXQgaXMgc28KKwkgKiBjbGVhcmx5IGFuIGludmFsaWQgaGFuZGxlIHZhbHVlIHRoYXQgd2UgY2FuIGp1c3Qgd29yayBhcm91bmQgdGhpcworCSAqIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgZm9yIGludmFsaWQgaGFuZGxlcy4KKwkgKi8KKwlyZXR1cm4gcmV0ID09IChIQU5ETEUpLTIgPyBJTlZBTElEX0hBTkRMRV9WQUxVRSA6IHJldDsKK30KZGlmZiAtLWdpdCBhL2NvbmZpZy5jIGIvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3ZDJiZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5jCkBAIC0wLDAgKzEsMzM2MCBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqIENvcHlyaWdodCAoQykgSm9oYW5uZXMgU2NoaW5kZWxpbiwgMjAwNQorICoKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RydWN0IGNvbmZpZ19zb3VyY2UgeworCXN0cnVjdCBjb25maWdfc291cmNlICpwcmV2OworCXVuaW9uIHsKKwkJRklMRSAqZmlsZTsKKwkJc3RydWN0IGNvbmZpZ19idWYgeworCQkJY29uc3QgY2hhciAqYnVmOworCQkJc2l6ZV90IGxlbjsKKwkJCXNpemVfdCBwb3M7CisJCX0gYnVmOworCX0gdTsKKwllbnVtIGNvbmZpZ19vcmlnaW5fdHlwZSBvcmlnaW5fdHlwZTsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnBhdGg7CisJZW51bSBjb25maWdfZXJyb3JfYWN0aW9uIGRlZmF1bHRfZXJyb3JfYWN0aW9uOworCWludCBsaW5lbnI7CisJaW50IGVvZjsKKwlzdHJ1Y3Qgc3RyYnVmIHZhbHVlOworCXN0cnVjdCBzdHJidWYgdmFyOworCXVuc2lnbmVkIHN1YnNlY3Rpb25fY2FzZV9zZW5zaXRpdmUgOiAxOworCisJaW50ICgqZG9fZmdldGMpKHN0cnVjdCBjb25maWdfc291cmNlICpjKTsKKwlpbnQgKCpkb191bmdldGMpKGludCBjLCBzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZik7CisJbG9uZyAoKmRvX2Z0ZWxsKShzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqYyk7Cit9OworCisvKgorICogVGhlc2UgdmFyaWFibGVzIHJlY29yZCB0aGUgImN1cnJlbnQiIGNvbmZpZyBzb3VyY2UsIHdoaWNoCisgKiBjYW4gYmUgYWNjZXNzZWQgYnkgcGFyc2luZyBjYWxsYmFja3MuCisgKgorICogVGhlICJjZiIgdmFyaWFibGUgd2lsbCBiZSBub24tTlVMTCBvbmx5IHdoZW4gd2UgYXJlIGFjdHVhbGx5IHBhcnNpbmcgYSByZWFsCisgKiBjb25maWcgc291cmNlIChmaWxlLCBibG9iLCBjbWRsaW5lLCBldGMpLgorICoKKyAqIFRoZSAiY3VycmVudF9jb25maWdfa3ZpIiB2YXJpYWJsZSB3aWxsIGJlIG5vbi1OVUxMIG9ubHkgd2hlbiB3ZSBhcmUgZmVlZGluZworICogY2FjaGVkIGNvbmZpZyBmcm9tIGEgY29uZmlnc2V0IGludG8gYSBjYWxsYmFjay4KKyAqCisgKiBUaGV5IHNob3VsZCBnZW5lcmFsbHkgbmV2ZXIgYmUgbm9uLU5VTEwgYXQgdGhlIHNhbWUgdGltZS4gSWYgdGhleSBhcmUgYm90aAorICogTlVMTCwgdGhlbiB3ZSBhcmVuJ3QgcGFyc2luZyBhbnl0aGluZyAoYW5kIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb24gbG9va2luZworICogYXQgdGhlIHZhcmlhYmxlcywgaXQncyBlaXRoZXIgYSBidWcgZm9yIGl0IHRvIGJlIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UsCisgKiBvciBpdCdzIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIHJldXNlZCBmb3Igbm9uLWNvbmZpZyBwdXJwb3NlcywgYW5kIHNob3VsZAorICogZmFsbCBiYWNrIHRvIHNvbWUgc2FuZSBiZWhhdmlvcikuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY2Y7CitzdGF0aWMgc3RydWN0IGtleV92YWx1ZV9pbmZvICpjdXJyZW50X2NvbmZpZ19rdmk7CisKKy8qCisgKiBTaW1pbGFyIHRvIHRoZSB2YXJpYWJsZXMgYWJvdmUsIHRoaXMgZ2l2ZXMgYWNjZXNzIHRvIHRoZSAic2NvcGUiIG9mIHRoZQorICogY3VycmVudCB2YWx1ZSAocmVwbywgZ2xvYmFsLCBldGMpLiBGb3IgY2FjaGVkIHZhbHVlcywgaXQgY2FuIGJlIGZvdW5kIHZpYQorICogdGhlIGN1cnJlbnRfY29uZmlnX2t2aSBhcyBhYm92ZS4gRHVyaW5nIHBhcnNpbmcsIHRoZSBjdXJyZW50IHZhbHVlIGNhbiBiZQorICogZm91bmQgaW4gdGhpcyB2YXJpYWJsZS4gSXQncyBub3QgcGFydCBvZiAiY2YiIGJlY2F1c2UgaXQgdHJhbnNjZW5kcyBhIHNpbmdsZQorICogZmlsZSAoaS5lLiwgYSBmaWxlIGluY2x1ZGVkIGZyb20gLmdpdC9jb25maWcgaXMgc3RpbGwgaW4gInJlcG8iIHNjb3BlKS4KKyAqLworc3RhdGljIGVudW0gY29uZmlnX3Njb3BlIGN1cnJlbnRfcGFyc2luZ19zY29wZTsKKworc3RhdGljIGludCBjb3JlX2NvbXByZXNzaW9uX3NlZW47CitzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fc2VlbjsKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc2lvbl9zZWVuOworCitzdGF0aWMgaW50IGNvbmZpZ19maWxlX2ZnZXRjKHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKQoreworCXJldHVybiBnZXRjX3VubG9ja2VkKGNvbmYtPnUuZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX2ZpbGVfdW5nZXRjKGludCBjLCBzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZikKK3sKKwlyZXR1cm4gdW5nZXRjKGMsIGNvbmYtPnUuZmlsZSk7Cit9CisKK3N0YXRpYyBsb25nIGNvbmZpZ19maWxlX2Z0ZWxsKHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKQoreworCXJldHVybiBmdGVsbChjb25mLT51LmZpbGUpOworfQorCisKK3N0YXRpYyBpbnQgY29uZmlnX2J1Zl9mZ2V0YyhzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZikKK3sKKwlpZiAoY29uZi0+dS5idWYucG9zIDwgY29uZi0+dS5idWYubGVuKQorCQlyZXR1cm4gY29uZi0+dS5idWYuYnVmW2NvbmYtPnUuYnVmLnBvcysrXTsKKworCXJldHVybiBFT0Y7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX2J1Zl91bmdldGMoaW50IGMsIHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKQoreworCWlmIChjb25mLT51LmJ1Zi5wb3MgPiAwKSB7CisJCWNvbmYtPnUuYnVmLnBvcy0tOworCQlpZiAoY29uZi0+dS5idWYuYnVmW2NvbmYtPnUuYnVmLnBvc10gIT0gYykKKwkJCUJVRygiY29uZmlnX2J1ZiBjYW4gb25seSB1bmdldGMgdGhlIHNhbWUgY2hhcmFjdGVyIik7CisJCXJldHVybiBjOworCX0KKworCXJldHVybiBFT0Y7Cit9CisKK3N0YXRpYyBsb25nIGNvbmZpZ19idWZfZnRlbGwoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPnUuYnVmLnBvczsKK30KKworI2RlZmluZSBNQVhfSU5DTFVERV9ERVBUSCAxMAorc3RhdGljIGNvbnN0IGNoYXIgaW5jbHVkZV9kZXB0aF9hZHZpY2VbXSA9IE5fKAorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIgklc1xuIgorImZyb21cbiIKKyIJJXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iKTsKK3N0YXRpYyBpbnQgaGFuZGxlX3BhdGhfaW5jbHVkZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSAqaW5jKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqZXhwYW5kZWQ7CisKKwlpZiAoIXBhdGgpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCgiaW5jbHVkZS5wYXRoIik7CisKKwlleHBhbmRlZCA9IGV4cGFuZF91c2VyX3BhdGgocGF0aCwgMCk7CisJaWYgKCFleHBhbmRlZCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBleHBhbmQgaW5jbHVkZSBwYXRoICclcyciKSwgcGF0aCk7CisJcGF0aCA9IGV4cGFuZGVkOworCisJLyoKKwkgKiBVc2UgYW4gYWJzb2x1dGUgcGF0aCBhcy1pcywgYnV0IGludGVycHJldCByZWxhdGl2ZSBwYXRocworCSAqIGJhc2VkIG9uIHRoZSBpbmNsdWRpbmcgY29uZmlnIGZpbGUuCisJICovCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKSB7CisJCWNoYXIgKnNsYXNoOworCisJCWlmICghY2YgfHwgIWNmLT5wYXRoKQorCQkJcmV0dXJuIGVycm9yKF8oInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIpKTsKKworCQlzbGFzaCA9IGZpbmRfbGFzdF9kaXJfc2VwKGNmLT5wYXRoKTsKKwkJaWYgKHNsYXNoKQorCQkJc3RyYnVmX2FkZCgmYnVmLCBjZi0+cGF0aCwgc2xhc2ggLSBjZi0+cGF0aCArIDEpOworCQlzdHJidWZfYWRkc3RyKCZidWYsIHBhdGgpOworCQlwYXRoID0gYnVmLmJ1ZjsKKwl9CisKKwlpZiAoIWFjY2Vzc19vcl9kaWUocGF0aCwgUl9PSywgMCkpIHsKKwkJaWYgKCsraW5jLT5kZXB0aCA+IE1BWF9JTkNMVURFX0RFUFRIKQorCQkJZGllKF8oaW5jbHVkZV9kZXB0aF9hZHZpY2UpLCBNQVhfSU5DTFVERV9ERVBUSCwgcGF0aCwKKwkJCSAgICAhY2YgPyAiPHVua25vd24+IiA6CisJCQkgICAgY2YtPm5hbWUgPyBjZi0+bmFtZSA6CisJCQkgICAgInRoZSBjb21tYW5kIGxpbmUiKTsKKwkJcmV0ID0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZ2l0X2NvbmZpZ19pbmNsdWRlLCBwYXRoLCBpbmMpOworCQlpbmMtPmRlcHRoLS07CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWZyZWUoZXhwYW5kZWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF90cmFpbGluZ19zdGFyc3Rhcl9mb3JfZGlyKHN0cnVjdCBzdHJidWYgKnBhdCkKK3sKKwlpZiAocGF0LT5sZW4gJiYgaXNfZGlyX3NlcChwYXQtPmJ1ZltwYXQtPmxlbiAtIDFdKSkKKwkJc3RyYnVmX2FkZHN0cihwYXQsICIqKiIpOworfQorCitzdGF0aWMgaW50IHByZXBhcmVfaW5jbHVkZV9jb25kaXRpb25fcGF0dGVybihzdHJ1Y3Qgc3RyYnVmICpwYXQpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqZXhwYW5kZWQ7CisJaW50IHByZWZpeCA9IDA7CisKKwlleHBhbmRlZCA9IGV4cGFuZF91c2VyX3BhdGgocGF0LT5idWYsIDEpOworCWlmIChleHBhbmRlZCkgeworCQlzdHJidWZfcmVzZXQocGF0KTsKKwkJc3RyYnVmX2FkZHN0cihwYXQsIGV4cGFuZGVkKTsKKwkJZnJlZShleHBhbmRlZCk7CisJfQorCisJaWYgKHBhdC0+YnVmWzBdID09ICcuJyAmJiBpc19kaXJfc2VwKHBhdC0+YnVmWzFdKSkgeworCQljb25zdCBjaGFyICpzbGFzaDsKKworCQlpZiAoIWNmIHx8ICFjZi0+cGF0aCkKKwkJCXJldHVybiBlcnJvcihfKCJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSAiCisJCQkJICAgICAgICJjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiKSk7CisKKwkJc3RyYnVmX3JlYWxwYXRoKCZwYXRoLCBjZi0+cGF0aCwgMSk7CisJCXNsYXNoID0gZmluZF9sYXN0X2Rpcl9zZXAocGF0aC5idWYpOworCQlpZiAoIXNsYXNoKQorCQkJQlVHKCJob3cgaXMgdGhpcyBwb3NzaWJsZT8iKTsKKwkJc3RyYnVmX3NwbGljZShwYXQsIDAsIDEsIHBhdGguYnVmLCBzbGFzaCAtIHBhdGguYnVmKTsKKwkJcHJlZml4ID0gc2xhc2ggLSBwYXRoLmJ1ZiArIDEgLyogc2xhc2ggKi87CisJfSBlbHNlIGlmICghaXNfYWJzb2x1dGVfcGF0aChwYXQtPmJ1ZikpCisJCXN0cmJ1Zl9pbnNlcnRzdHIocGF0LCAwLCAiKiovIik7CisKKwlhZGRfdHJhaWxpbmdfc3RhcnN0YXJfZm9yX2RpcihwYXQpOworCisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXJldHVybiBwcmVmaXg7Cit9CisKK3N0YXRpYyBpbnQgaW5jbHVkZV9ieV9naXRkaXIoY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzLAorCQkJICAgICBjb25zdCBjaGFyICpjb25kLCBzaXplX3QgY29uZF9sZW4sIGludCBpY2FzZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHRleHQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdHRlcm4gPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMCwgcHJlZml4OworCWNvbnN0IGNoYXIgKmdpdF9kaXI7CisJaW50IGFscmVhZHlfdHJpZWRfYWJzb2x1dGUgPSAwOworCisJaWYgKG9wdHMtPmdpdF9kaXIpCisJCWdpdF9kaXIgPSBvcHRzLT5naXRfZGlyOworCWVsc2UKKwkJZ290byBkb25lOworCisJc3RyYnVmX3JlYWxwYXRoKCZ0ZXh0LCBnaXRfZGlyLCAxKTsKKwlzdHJidWZfYWRkKCZwYXR0ZXJuLCBjb25kLCBjb25kX2xlbik7CisJcHJlZml4ID0gcHJlcGFyZV9pbmNsdWRlX2NvbmRpdGlvbl9wYXR0ZXJuKCZwYXR0ZXJuKTsKKworYWdhaW46CisJaWYgKHByZWZpeCA8IDApCisJCWdvdG8gZG9uZTsKKworCWlmIChwcmVmaXggPiAwKSB7CisJCS8qCisJCSAqIHBlcmZvcm0gbGl0ZXJhbCBtYXRjaGluZyBvbiB0aGUgcHJlZml4IHBhcnQgc28gdGhhdAorCQkgKiBhbnkgd2lsZGNhcmQgY2hhcmFjdGVyIGluIGl0IGNhbid0IGNyZWF0ZSBzaWRlIGVmZmVjdHMuCisJCSAqLworCQlpZiAodGV4dC5sZW4gPCBwcmVmaXgpCisJCQlnb3RvIGRvbmU7CisJCWlmICghaWNhc2UgJiYgc3RybmNtcChwYXR0ZXJuLmJ1ZiwgdGV4dC5idWYsIHByZWZpeCkpCisJCQlnb3RvIGRvbmU7CisJCWlmIChpY2FzZSAmJiBzdHJuY2FzZWNtcChwYXR0ZXJuLmJ1ZiwgdGV4dC5idWYsIHByZWZpeCkpCisJCQlnb3RvIGRvbmU7CisJfQorCisJcmV0ID0gIXdpbGRtYXRjaChwYXR0ZXJuLmJ1ZiArIHByZWZpeCwgdGV4dC5idWYgKyBwcmVmaXgsCisJCQkgV01fUEFUSE5BTUUgfCAoaWNhc2UgPyBXTV9DQVNFRk9MRCA6IDApKTsKKworCWlmICghcmV0ICYmICFhbHJlYWR5X3RyaWVkX2Fic29sdXRlKSB7CisJCS8qCisJCSAqIFdlJ3ZlIHRyaWVkIGUuZy4gbWF0Y2hpbmcgZ2l0ZGlyOn4vd29yaywgYnV0IGlmCisJCSAqIH4vd29yayBpcyBhIHN5bWxpbmsgdG8gL21udC9zdG9yYWdlL3dvcmsKKwkJICogc3RyYnVmX3JlYWxwYXRoKCkgd2lsbCBleHBhbmQgaXQsIHNvIHRoZSBydWxlIHdvbid0CisJCSAqIG1hdGNoLiBMZXQncyBtYXRjaCBhZ2FpbnN0IGEKKwkJICogc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKCkgdmVyc2lvbiBvZiB0aGUgcGF0aCwKKwkJICogd2hpY2gnbGwgZG8gdGhlIHJpZ2h0IHRoaW5nCisJCSAqLworCQlzdHJidWZfcmVzZXQoJnRleHQpOworCQlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJnRleHQsIGdpdF9kaXIpOworCQlhbHJlYWR5X3RyaWVkX2Fic29sdXRlID0gMTsKKwkJZ290byBhZ2FpbjsKKwl9Citkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXR0ZXJuKTsKKwlzdHJidWZfcmVsZWFzZSgmdGV4dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbmNsdWRlX2J5X2JyYW5jaChjb25zdCBjaGFyICpjb25kLCBzaXplX3QgY29uZF9sZW4pCit7CisJaW50IGZsYWdzOworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBwYXR0ZXJuID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9ICF0aGVfcmVwb3NpdG9yeS0+Z2l0ZGlyID8KKwkJTlVMTCA6IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsICZmbGFncyk7CisJY29uc3QgY2hhciAqc2hvcnRuYW1lOworCisJaWYgKCFyZWZuYW1lIHx8ICEoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCXx8CisJCQkhc2tpcF9wcmVmaXgocmVmbmFtZSwgInJlZnMvaGVhZHMvIiwgJnNob3J0bmFtZSkpCisJCXJldHVybiAwOworCisJc3RyYnVmX2FkZCgmcGF0dGVybiwgY29uZCwgY29uZF9sZW4pOworCWFkZF90cmFpbGluZ19zdGFyc3Rhcl9mb3JfZGlyKCZwYXR0ZXJuKTsKKwlyZXQgPSAhd2lsZG1hdGNoKHBhdHRlcm4uYnVmLCBzaG9ydG5hbWUsIFdNX1BBVEhOQU1FKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0dGVybik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbmNsdWRlX2NvbmRpdGlvbl9pc190cnVlKGNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqb3B0cywKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmNvbmQsIHNpemVfdCBjb25kX2xlbikKK3sKKworCWlmIChza2lwX3ByZWZpeF9tZW0oY29uZCwgY29uZF9sZW4sICJnaXRkaXI6IiwgJmNvbmQsICZjb25kX2xlbikpCisJCXJldHVybiBpbmNsdWRlX2J5X2dpdGRpcihvcHRzLCBjb25kLCBjb25kX2xlbiwgMCk7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXhfbWVtKGNvbmQsIGNvbmRfbGVuLCAiZ2l0ZGlyL2k6IiwgJmNvbmQsICZjb25kX2xlbikpCisJCXJldHVybiBpbmNsdWRlX2J5X2dpdGRpcihvcHRzLCBjb25kLCBjb25kX2xlbiwgMSk7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXhfbWVtKGNvbmQsIGNvbmRfbGVuLCAib25icmFuY2g6IiwgJmNvbmQsICZjb25kX2xlbikpCisJCXJldHVybiBpbmNsdWRlX2J5X2JyYW5jaChjb25kLCBjb25kX2xlbik7CisKKwkvKiB1bmtub3duIGNvbmRpdGlvbmFscyBhcmUgYWx3YXlzIGZhbHNlICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29uZmlnX2luY2x1ZGUoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSAqaW5jID0gZGF0YTsKKwljb25zdCBjaGFyICpjb25kLCAqa2V5OworCWludCBjb25kX2xlbjsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBQYXNzIGFsb25nIGFsbCB2YWx1ZXMsIGluY2x1ZGluZyAiaW5jbHVkZSIgZGlyZWN0aXZlczsgdGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIHF1ZXJ5IGluZm9ybWF0aW9uIG9uIHRoZSBpbmNsdWRlcyB0aGVtc2VsdmVzLgorCSAqLworCXJldCA9IGluYy0+Zm4odmFyLCB2YWx1ZSwgaW5jLT5kYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghc3RyY21wKHZhciwgImluY2x1ZGUucGF0aCIpKQorCQlyZXQgPSBoYW5kbGVfcGF0aF9pbmNsdWRlKHZhbHVlLCBpbmMpOworCisJaWYgKCFwYXJzZV9jb25maWdfa2V5KHZhciwgImluY2x1ZGVpZiIsICZjb25kLCAmY29uZF9sZW4sICZrZXkpICYmCisJICAgIChjb25kICYmIGluY2x1ZGVfY29uZGl0aW9uX2lzX3RydWUoaW5jLT5vcHRzLCBjb25kLCBjb25kX2xlbikpICYmCisJICAgICFzdHJjbXAoa2V5LCAicGF0aCIpKQorCQlyZXQgPSBoYW5kbGVfcGF0aF9pbmNsdWRlKHZhbHVlLCBpbmMpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBnaXRfY29uZmlnX3B1c2hfcGFyYW1ldGVyKGNvbnN0IGNoYXIgKnRleHQpCit7CisJc3RydWN0IHN0cmJ1ZiBlbnYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpvbGQgPSBnZXRlbnYoQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQpOworCWlmIChvbGQgJiYgKm9sZCkgeworCQlzdHJidWZfYWRkc3RyKCZlbnYsIG9sZCk7CisJCXN0cmJ1Zl9hZGRjaCgmZW52LCAnICcpOworCX0KKwlzcV9xdW90ZV9idWYoJmVudiwgdGV4dCk7CisJc2V0ZW52KENPTkZJR19EQVRBX0VOVklST05NRU5ULCBlbnYuYnVmLCAxKTsKKwlzdHJidWZfcmVsZWFzZSgmZW52KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNrZXljaGFyKGludCBjKQoreworCXJldHVybiBpc2FsbnVtKGMpIHx8IGMgPT0gJy0nOworfQorCisvKgorICogQXV4aWxpYXJ5IGZ1bmN0aW9uIHRvIHNhbml0eS1jaGVjayBhbmQgc3BsaXQgdGhlIGtleSBpbnRvIHRoZSBzZWN0aW9uCisgKiBpZGVudGlmaWVyIGFuZCB2YXJpYWJsZSBuYW1lLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSB3aGVuIHRoZXJlIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIGluIHRoZSBrZXkgYW5kCisgKiAtMiBpZiB0aGVyZSBpcyBubyBzZWN0aW9uIG5hbWUgaW4gdGhlIGtleS4KKyAqCisgKiBzdG9yZV9rZXkgLSBwb2ludGVyIHRvIGNoYXIqIHdoaWNoIHdpbGwgaG9sZCBhIGNvcHkgb2YgdGhlIGtleSB3aXRoCisgKiAgICAgICAgICAgICBsb3dlcmNhc2Ugc2VjdGlvbiBhbmQgdmFyaWFibGUgbmFtZQorICogYmFzZWxlbiAtIHBvaW50ZXIgdG8gaW50IHdoaWNoIHdpbGwgaG9sZCB0aGUgbGVuZ3RoIG9mIHRoZQorICogICAgICAgICAgIHNlY3Rpb24gKyBzdWJzZWN0aW9uIHBhcnQsIGNhbiBiZSBOVUxMCisgKi8KK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19wYXJzZV9rZXlfMShjb25zdCBjaGFyICprZXksIGNoYXIgKipzdG9yZV9rZXksIGludCAqYmFzZWxlbl8sIGludCBxdWlldCkKK3sKKwlpbnQgaSwgZG90LCBiYXNlbGVuOworCWNvbnN0IGNoYXIgKmxhc3RfZG90ID0gc3RycmNocihrZXksICcuJyk7CisKKwkvKgorCSAqIFNpbmNlICJrZXkiIGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBzZWN0aW9uIG5hbWUgYW5kIHRoZSByZWFsCisJICoga2V5IG5hbWUgc2VwYXJhdGVkIGJ5IGEgZG90LCB3ZSBoYXZlIHRvIGtub3cgd2hlcmUgdGhlIGRvdCBpcy4KKwkgKi8KKworCWlmIChsYXN0X2RvdCA9PSBOVUxMIHx8IGxhc3RfZG90ID09IGtleSkgeworCQlpZiAoIXF1aWV0KQorCQkJZXJyb3IoXygia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIpLCBrZXkpOworCQlyZXR1cm4gLUNPTkZJR19OT19TRUNUSU9OX09SX05BTUU7CisJfQorCisJaWYgKCFsYXN0X2RvdFsxXSkgeworCQlpZiAoIXF1aWV0KQorCQkJZXJyb3IoXygia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiKSwga2V5KTsKKwkJcmV0dXJuIC1DT05GSUdfTk9fU0VDVElPTl9PUl9OQU1FOworCX0KKworCWJhc2VsZW4gPSBsYXN0X2RvdCAtIGtleTsKKwlpZiAoYmFzZWxlbl8pCisJCSpiYXNlbGVuXyA9IGJhc2VsZW47CisKKwkvKgorCSAqIFZhbGlkYXRlIHRoZSBrZXkgYW5kIHdoaWxlIGF0IGl0LCBsb3dlciBjYXNlIGl0IGZvciBtYXRjaGluZy4KKwkgKi8KKwlpZiAoc3RvcmVfa2V5KQorCQkqc3RvcmVfa2V5ID0geG1hbGxvY3ooc3RybGVuKGtleSkpOworCisJZG90ID0gMDsKKwlmb3IgKGkgPSAwOyBrZXlbaV07IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSBrZXlbaV07CisJCWlmIChjID09ICcuJykKKwkJCWRvdCA9IDE7CisJCS8qIExlYXZlIHRoZSBleHRlbmRlZCBiYXNlbmFtZSB1bnRvdWNoZWQuLiAqLworCQlpZiAoIWRvdCB8fCBpID4gYmFzZWxlbikgeworCQkJaWYgKCFpc2tleWNoYXIoYykgfHwKKwkJCSAgICAoaSA9PSBiYXNlbGVuICsgMSAmJiAhaXNhbHBoYShjKSkpIHsKKwkJCQlpZiAoIXF1aWV0KQorCQkJCQllcnJvcihfKCJpbnZhbGlkIGtleTogJXMiKSwga2V5KTsKKwkJCQlnb3RvIG91dF9mcmVlX3JldF8xOworCQkJfQorCQkJYyA9IHRvbG93ZXIoYyk7CisJCX0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7CisJCQlpZiAoIXF1aWV0KQorCQkJCWVycm9yKF8oImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiKSwga2V5KTsKKwkJCWdvdG8gb3V0X2ZyZWVfcmV0XzE7CisJCX0KKwkJaWYgKHN0b3JlX2tleSkKKwkJCSgqc3RvcmVfa2V5KVtpXSA9IGM7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9mcmVlX3JldF8xOgorCWlmIChzdG9yZV9rZXkpIHsKKwkJRlJFRV9BTkRfTlVMTCgqc3RvcmVfa2V5KTsKKwl9CisJcmV0dXJuIC1DT05GSUdfSU5WQUxJRF9LRVk7Cit9CisKK2ludCBnaXRfY29uZmlnX3BhcnNlX2tleShjb25zdCBjaGFyICprZXksIGNoYXIgKipzdG9yZV9rZXksIGludCAqYmFzZWxlbikKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19wYXJzZV9rZXlfMShrZXksIHN0b3JlX2tleSwgYmFzZWxlbiwgMCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2tleV9pc192YWxpZChjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuICFnaXRfY29uZmlnX3BhcnNlX2tleV8xKGtleSwgTlVMTCwgTlVMTCwgMSk7Cit9CisKK2ludCBnaXRfY29uZmlnX3BhcnNlX3BhcmFtZXRlcihjb25zdCBjaGFyICp0ZXh0LAorCQkJICAgICAgIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCWNoYXIgKmNhbm9uaWNhbF9uYW1lOworCXN0cnVjdCBzdHJidWYgKipwYWlyOworCWludCByZXQ7CisKKwlwYWlyID0gc3RyYnVmX3NwbGl0X3N0cih0ZXh0LCAnPScsIDIpOworCWlmICghcGFpclswXSkKKwkJcmV0dXJuIGVycm9yKF8oImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIiksIHRleHQpOworCisJaWYgKHBhaXJbMF0tPmxlbiAmJiBwYWlyWzBdLT5idWZbcGFpclswXS0+bGVuIC0gMV0gPT0gJz0nKSB7CisJCXN0cmJ1Zl9zZXRsZW4ocGFpclswXSwgcGFpclswXS0+bGVuIC0gMSk7CisJCXZhbHVlID0gcGFpclsxXSA/IHBhaXJbMV0tPmJ1ZiA6ICIiOworCX0gZWxzZSB7CisJCXZhbHVlID0gTlVMTDsKKwl9CisKKwlzdHJidWZfdHJpbShwYWlyWzBdKTsKKwlpZiAoIXBhaXJbMF0tPmxlbikgeworCQlzdHJidWZfbGlzdF9mcmVlKHBhaXIpOworCQlyZXR1cm4gZXJyb3IoXygiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiKSwgdGV4dCk7CisJfQorCisJaWYgKGdpdF9jb25maWdfcGFyc2Vfa2V5KHBhaXJbMF0tPmJ1ZiwgJmNhbm9uaWNhbF9uYW1lLCBOVUxMKSkgeworCQlyZXQgPSAtMTsKKwl9IGVsc2UgeworCQlyZXQgPSAoZm4oY2Fub25pY2FsX25hbWUsIHZhbHVlLCBkYXRhKSA8IDApID8gLTEgOiAwOworCQlmcmVlKGNhbm9uaWNhbF9uYW1lKTsKKwl9CisJc3RyYnVmX2xpc3RfZnJlZShwYWlyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ2l0X2NvbmZpZ19mcm9tX3BhcmFtZXRlcnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52KENPTkZJR19EQVRBX0VOVklST05NRU5UKTsKKwlpbnQgcmV0ID0gMDsKKwljaGFyICplbnZ3OworCWNvbnN0IGNoYXIgKiphcmd2ID0gTlVMTDsKKwlpbnQgbnIgPSAwLCBhbGxvYyA9IDA7CisJaW50IGk7CisJc3RydWN0IGNvbmZpZ19zb3VyY2Ugc291cmNlOworCisJaWYgKCFlbnYpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZzb3VyY2UsIDAsIHNpemVvZihzb3VyY2UpKTsKKwlzb3VyY2UucHJldiA9IGNmOworCXNvdXJjZS5vcmlnaW5fdHlwZSA9IENPTkZJR19PUklHSU5fQ01ETElORTsKKwljZiA9ICZzb3VyY2U7CisKKwkvKiBzcV9kZXF1b3RlIHdpbGwgd3JpdGUgb3ZlciBpdCAqLworCWVudncgPSB4c3RyZHVwKGVudik7CisKKwlpZiAoc3FfZGVxdW90ZV90b19hcmd2KGVudncsICZhcmd2LCAmbnIsICZhbGxvYykgPCAwKSB7CisJCXJldCA9IGVycm9yKF8oImJvZ3VzIGZvcm1hdCBpbiAlcyIpLCBDT05GSUdfREFUQV9FTlZJUk9OTUVOVCk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCWlmIChnaXRfY29uZmlnX3BhcnNlX3BhcmFtZXRlcihhcmd2W2ldLCBmbiwgZGF0YSkgPCAwKSB7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCitvdXQ6CisJZnJlZShhcmd2KTsKKwlmcmVlKGVudncpOworCWNmID0gc291cmNlLnByZXY7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZXRfbmV4dF9jaGFyKHZvaWQpCit7CisJaW50IGMgPSBjZi0+ZG9fZmdldGMoY2YpOworCisJaWYgKGMgPT0gJ1xyJykgeworCQkvKiBET1MgbGlrZSBzeXN0ZW1zICovCisJCWMgPSBjZi0+ZG9fZmdldGMoY2YpOworCQlpZiAoYyAhPSAnXG4nKSB7CisJCQlpZiAoYyAhPSBFT0YpCisJCQkJY2YtPmRvX3VuZ2V0YyhjLCBjZik7CisJCQljID0gJ1xyJzsKKwkJfQorCX0KKwlpZiAoYyA9PSAnXG4nKQorCQljZi0+bGluZW5yKys7CisJaWYgKGMgPT0gRU9GKSB7CisJCWNmLT5lb2YgPSAxOworCQljZi0+bGluZW5yKys7CisJCWMgPSAnXG4nOworCX0KKwlyZXR1cm4gYzsKK30KKworc3RhdGljIGNoYXIgKnBhcnNlX3ZhbHVlKHZvaWQpCit7CisJaW50IHF1b3RlID0gMCwgY29tbWVudCA9IDAsIHNwYWNlID0gMDsKKworCXN0cmJ1Zl9yZXNldCgmY2YtPnZhbHVlKTsKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoYyA9PSAnXG4nKSB7CisJCQlpZiAocXVvdGUpIHsKKwkJCQljZi0+bGluZW5yLS07CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlyZXR1cm4gY2YtPnZhbHVlLmJ1ZjsKKwkJfQorCQlpZiAoY29tbWVudCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNzcGFjZShjKSAmJiAhcXVvdGUpIHsKKwkJCWlmIChjZi0+dmFsdWUubGVuKQorCQkJCXNwYWNlKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXF1b3RlKSB7CisJCQlpZiAoYyA9PSAnOycgfHwgYyA9PSAnIycpIHsKKwkJCQljb21tZW50ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlmb3IgKDsgc3BhY2U7IHNwYWNlLS0pCisJCQlzdHJidWZfYWRkY2goJmNmLT52YWx1ZSwgJyAnKTsKKwkJaWYgKGMgPT0gJ1xcJykgeworCQkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnXG4nOgorCQkJCWNvbnRpbnVlOworCQkJY2FzZSAndCc6CisJCQkJYyA9ICdcdCc7CisJCQkJYnJlYWs7CisJCQljYXNlICdiJzoKKwkJCQljID0gJ1xiJzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCWMgPSAnXG4nOworCQkJCWJyZWFrOworCQkJLyogU29tZSBjaGFyYWN0ZXJzIGVzY2FwZSBhcyB0aGVtc2VsdmVzICovCisJCQljYXNlICdcXCc6IGNhc2UgJyInOgorCQkJCWJyZWFrOworCQkJLyogUmVqZWN0IHVua25vd24gZXNjYXBlIHNlcXVlbmNlcyAqLworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRjaCgmY2YtPnZhbHVlLCBjKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09ICciJykgeworCQkJcXVvdGUgPSAxLXF1b3RlOworCQkJY29udGludWU7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZjZi0+dmFsdWUsIGMpOworCX0KK30KKworc3RhdGljIGludCBnZXRfdmFsdWUoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEsIHN0cnVjdCBzdHJidWYgKm5hbWUpCit7CisJaW50IGM7CisJY2hhciAqdmFsdWU7CisJaW50IHJldDsKKworCS8qIEdldCB0aGUgZnVsbCBuYW1lICovCisJZm9yICg7OykgeworCQljID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoY2YtPmVvZikKKwkJCWJyZWFrOworCQlpZiAoIWlza2V5Y2hhcihjKSkKKwkJCWJyZWFrOworCQlzdHJidWZfYWRkY2gobmFtZSwgdG9sb3dlcihjKSk7CisJfQorCisJd2hpbGUgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKwkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKworCXZhbHVlID0gTlVMTDsKKwlpZiAoYyAhPSAnXG4nKSB7CisJCWlmIChjICE9ICc9JykKKwkJCXJldHVybiAtMTsKKwkJdmFsdWUgPSBwYXJzZV92YWx1ZSgpOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIC0xOworCX0KKwkvKgorCSAqIFdlIGFscmVhZHkgY29uc3VtZWQgdGhlIFxuLCBidXQgd2UgbmVlZCBsaW5lbnIgdG8gcG9pbnQgdG8KKwkgKiB0aGUgbGluZSB3ZSBqdXN0IHBhcnNlZCBkdXJpbmcgdGhlIGNhbGwgdG8gZm4gdG8gZ2V0CisJICogYWNjdXJhdGUgbGluZSBudW1iZXIgaW4gZXJyb3IgbWVzc2FnZXMuCisJICovCisJY2YtPmxpbmVuci0tOworCXJldCA9IGZuKG5hbWUtPmJ1ZiwgdmFsdWUsIGRhdGEpOworCWlmIChyZXQgPj0gMCkKKwkJY2YtPmxpbmVucisrOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2V4dGVuZGVkX2Jhc2VfdmFyKHN0cnVjdCBzdHJidWYgKm5hbWUsIGludCBjKQoreworCWNmLT5zdWJzZWN0aW9uX2Nhc2Vfc2Vuc2l0aXZlID0gMDsKKwlkbyB7CisJCWlmIChjID09ICdcbicpCisJCQlnb3RvIGVycm9yX2luY29tcGxldGVfbGluZTsKKwkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKworCS8qIFdlIHJlcXVpcmUgdGhlIGZvcm1hdCB0byBiZSAnW2Jhc2UgImV4dGVuc2lvbiJdJyAqLworCWlmIChjICE9ICciJykKKwkJcmV0dXJuIC0xOworCXN0cmJ1Zl9hZGRjaChuYW1lLCAnLicpOworCisJZm9yICg7OykgeworCQlpbnQgYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWdvdG8gZXJyb3JfaW5jb21wbGV0ZV9saW5lOworCQlpZiAoYyA9PSAnIicpCisJCQlicmVhazsKKwkJaWYgKGMgPT0gJ1xcJykgeworCQkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJCWlmIChjID09ICdcbicpCisJCQkJZ290byBlcnJvcl9pbmNvbXBsZXRlX2xpbmU7CisJCX0KKwkJc3RyYnVmX2FkZGNoKG5hbWUsIGMpOworCX0KKworCS8qIEZpbmFsICddJyAqLworCWlmIChnZXRfbmV4dF9jaGFyKCkgIT0gJ10nKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7CitlcnJvcl9pbmNvbXBsZXRlX2xpbmU6CisJY2YtPmxpbmVuci0tOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBnZXRfYmFzZV92YXIoc3RydWN0IHN0cmJ1ZiAqbmFtZSkKK3sKKwljZi0+c3Vic2VjdGlvbl9jYXNlX3NlbnNpdGl2ZSA9IDE7CisJZm9yICg7OykgeworCQlpbnQgYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJaWYgKGNmLT5lb2YpCisJCQlyZXR1cm4gLTE7CisJCWlmIChjID09ICddJykKKwkJCXJldHVybiAwOworCQlpZiAoaXNzcGFjZShjKSkKKwkJCXJldHVybiBnZXRfZXh0ZW5kZWRfYmFzZV92YXIobmFtZSwgYyk7CisJCWlmICghaXNrZXljaGFyKGMpICYmIGMgIT0gJy4nKQorCQkJcmV0dXJuIC0xOworCQlzdHJidWZfYWRkY2gobmFtZSwgdG9sb3dlcihjKSk7CisJfQorfQorCitzdHJ1Y3QgcGFyc2VfZXZlbnRfZGF0YSB7CisJZW51bSBjb25maWdfZXZlbnRfdCBwcmV2aW91c190eXBlOworCXNpemVfdCBwcmV2aW91c19vZmZzZXQ7CisJY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzOworfTsKKworc3RhdGljIGludCBkb19ldmVudChlbnVtIGNvbmZpZ19ldmVudF90IHR5cGUsIHN0cnVjdCBwYXJzZV9ldmVudF9kYXRhICpkYXRhKQoreworCXNpemVfdCBvZmZzZXQ7CisKKwlpZiAoIWRhdGEtPm9wdHMgfHwgIWRhdGEtPm9wdHMtPmV2ZW50X2ZuKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlID09IENPTkZJR19FVkVOVF9XSElURVNQQUNFICYmCisJICAgIGRhdGEtPnByZXZpb3VzX3R5cGUgPT0gdHlwZSkKKwkJcmV0dXJuIDA7CisKKwlvZmZzZXQgPSBjZi0+ZG9fZnRlbGwoY2YpOworCS8qCisJICogQXQgRU9GLCB0aGUgcGFyc2VyIGFsd2F5cyAiaW5zZXJ0cyIgYW4gZXh0cmEgJ1xuJywgdGhlcmVmb3JlCisJICogdGhlIGVuZCBvZmZzZXQgb2YgdGhlIGV2ZW50IGlzIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24sIG90aGVyd2lzZQorCSAqIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGFkdmFuY2VkIHRvIHRoZSBuZXh0IGV2ZW50LgorCSAqLworCWlmICh0eXBlICE9IENPTkZJR19FVkVOVF9FT0YpCisJCW9mZnNldC0tOworCisJaWYgKGRhdGEtPnByZXZpb3VzX3R5cGUgIT0gQ09ORklHX0VWRU5UX0VPRiAmJgorCSAgICBkYXRhLT5vcHRzLT5ldmVudF9mbihkYXRhLT5wcmV2aW91c190eXBlLCBkYXRhLT5wcmV2aW91c19vZmZzZXQsCisJCQkJIG9mZnNldCwgZGF0YS0+b3B0cy0+ZXZlbnRfZm5fZGF0YSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlkYXRhLT5wcmV2aW91c190eXBlID0gdHlwZTsKKwlkYXRhLT5wcmV2aW91c19vZmZzZXQgPSBvZmZzZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfcGFyc2Vfc291cmNlKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhLAorCQkJICAgIGNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgY29tbWVudCA9IDA7CisJaW50IGJhc2VsZW4gPSAwOworCXN0cnVjdCBzdHJidWYgKnZhciA9ICZjZi0+dmFyOworCWludCBlcnJvcl9yZXR1cm4gPSAwOworCWNoYXIgKmVycm9yX21zZyA9IE5VTEw7CisKKwkvKiBVK0ZFRkYgQnl0ZSBPcmRlciBNYXJrIGluIFVURjggKi8KKwljb25zdCBjaGFyICpib21wdHIgPSB1dGY4X2JvbTsKKworCS8qIEZvciB0aGUgcGFyc2VyIGV2ZW50IGNhbGxiYWNrICovCisJc3RydWN0IHBhcnNlX2V2ZW50X2RhdGEgZXZlbnRfZGF0YSA9IHsKKwkJQ09ORklHX0VWRU5UX0VPRiwgMCwgb3B0cworCX07CisKKwlmb3IgKDs7KSB7CisJCWludCBjOworCisJCWMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChib21wdHIgJiYgKmJvbXB0cikgeworCQkJLyogV2UgYXJlIGF0IHRoZSBmaWxlIGJlZ2lubmluZzsgc2tpcCBVVEY4LWVuY29kZWQgQk9NCisJCQkgKiBpZiBwcmVzZW50LiBTYW5lIGVkaXRvcnMgd29uJ3QgcHV0IHRoaXMgaW4gb24gdGhlaXIKKwkJCSAqIG93biwgYnV0IGUuZy4gV2luZG93cyBOb3RlcGFkIHdpbGwgZG8gaXQgaGFwcGlseS4gKi8KKwkJCWlmIChjID09ICgqYm9tcHRyICYgMDM3NykpIHsKKwkJCQlib21wdHIrKzsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJLyogRG8gbm90IHRvbGVyYXRlIHBhcnRpYWwgQk9NLiAqLworCQkJCWlmIChib21wdHIgIT0gdXRmOF9ib20pCisJCQkJCWJyZWFrOworCQkJCS8qIE5vIEJPTSBhdCBmaWxlIGJlZ2lubmluZy4gQ29vbC4gKi8KKwkJCQlib21wdHIgPSBOVUxMOworCQkJfQorCQl9CisJCWlmIChjID09ICdcbicpIHsKKwkJCWlmIChjZi0+ZW9mKSB7CisJCQkJaWYgKGRvX2V2ZW50KENPTkZJR19FVkVOVF9FT0YsICZldmVudF9kYXRhKSA8IDApCisJCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWlmIChkb19ldmVudChDT05GSUdfRVZFTlRfV0hJVEVTUEFDRSwgJmV2ZW50X2RhdGEpIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQljb21tZW50ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjb21tZW50KQorCQkJY29udGludWU7CisJCWlmIChpc3NwYWNlKGMpKSB7CisJCQlpZiAoZG9fZXZlbnQoQ09ORklHX0VWRU5UX1dISVRFU1BBQ0UsICZldmVudF9kYXRhKSA8IDApCisJCQkJCXJldHVybiAtMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09ICcjJyB8fCBjID09ICc7JykgeworCQkJaWYgKGRvX2V2ZW50KENPTkZJR19FVkVOVF9DT01NRU5ULCAmZXZlbnRfZGF0YSkgPCAwKQorCQkJCQlyZXR1cm4gLTE7CisJCQljb21tZW50ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09ICdbJykgeworCQkJaWYgKGRvX2V2ZW50KENPTkZJR19FVkVOVF9TRUNUSU9OLCAmZXZlbnRfZGF0YSkgPCAwKQorCQkJCQlyZXR1cm4gLTE7CisKKwkJCS8qIFJlc2V0IHByaW9yIHRvIGRldGVybWluaW5nIGEgbmV3IHN0ZW0gKi8KKwkJCXN0cmJ1Zl9yZXNldCh2YXIpOworCQkJaWYgKGdldF9iYXNlX3Zhcih2YXIpIDwgMCB8fCB2YXItPmxlbiA8IDEpCisJCQkJYnJlYWs7CisJCQlzdHJidWZfYWRkY2godmFyLCAnLicpOworCQkJYmFzZWxlbiA9IHZhci0+bGVuOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFpc2FscGhhKGMpKQorCQkJYnJlYWs7CisKKwkJaWYgKGRvX2V2ZW50KENPTkZJR19FVkVOVF9FTlRSWSwgJmV2ZW50X2RhdGEpIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQkvKgorCQkgKiBUcnVuY2F0ZSB0aGUgdmFyIG5hbWUgYmFjayB0byB0aGUgc2VjdGlvbiBoZWFkZXIKKwkJICogc3RlbSBwcmlvciB0byBncmFiYmluZyB0aGUgc3VmZml4IHBhcnQgb2YgdGhlIG5hbWUKKwkJICogYW5kIHRoZSB2YWx1ZS4KKwkJICovCisJCXN0cmJ1Zl9zZXRsZW4odmFyLCBiYXNlbGVuKTsKKwkJc3RyYnVmX2FkZGNoKHZhciwgdG9sb3dlcihjKSk7CisJCWlmIChnZXRfdmFsdWUoZm4sIGRhdGEsIHZhcikgPCAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGRvX2V2ZW50KENPTkZJR19FVkVOVF9FUlJPUiwgJmV2ZW50X2RhdGEpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc3dpdGNoIChjZi0+b3JpZ2luX3R5cGUpIHsKKwljYXNlIENPTkZJR19PUklHSU5fQkxPQjoKKwkJZXJyb3JfbXNnID0geHN0cmZtdChfKCJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIpLAorCQkJCSAgICAgIGNmLT5saW5lbnIsIGNmLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfT1JJR0lOX0ZJTEU6CisJCWVycm9yX21zZyA9IHhzdHJmbXQoXygiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiKSwKKwkJCQkgICAgICBjZi0+bGluZW5yLCBjZi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgQ09ORklHX09SSUdJTl9TVERJTjoKKwkJZXJyb3JfbXNnID0geHN0cmZtdChfKCJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiKSwKKwkJCQkgICAgICBjZi0+bGluZW5yKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfT1JJR0lOX1NVQk1PRFVMRV9CTE9COgorCQllcnJvcl9tc2cgPSB4c3RyZm10KF8oImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIpLAorCQkJCSAgICAgICBjZi0+bGluZW5yLCBjZi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgQ09ORklHX09SSUdJTl9DTURMSU5FOgorCQllcnJvcl9tc2cgPSB4c3RyZm10KF8oImJhZCBjb25maWcgbGluZSAlZCBpbiBjb21tYW5kIGxpbmUgJXMiKSwKKwkJCQkgICAgICAgY2YtPmxpbmVuciwgY2YtPm5hbWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJvcl9tc2cgPSB4c3RyZm10KF8oImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIpLAorCQkJCSAgICAgIGNmLT5saW5lbnIsIGNmLT5uYW1lKTsKKwl9CisKKwlzd2l0Y2ggKG9wdHMgJiYgb3B0cy0+ZXJyb3JfYWN0aW9uID8KKwkJb3B0cy0+ZXJyb3JfYWN0aW9uIDoKKwkJY2YtPmRlZmF1bHRfZXJyb3JfYWN0aW9uKSB7CisJY2FzZSBDT05GSUdfRVJST1JfRElFOgorCQlkaWUoIiVzIiwgZXJyb3JfbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfRVJST1JfRVJST1I6CisJCWVycm9yX3JldHVybiA9IGVycm9yKCIlcyIsIGVycm9yX21zZyk7CisJCWJyZWFrOworCWNhc2UgQ09ORklHX0VSUk9SX1NJTEVOVDoKKwkJZXJyb3JfcmV0dXJuID0gLTE7CisJCWJyZWFrOworCWNhc2UgQ09ORklHX0VSUk9SX1VOU0VUOgorCQlCVUcoImNvbmZpZyBlcnJvciBhY3Rpb24gdW5zZXQiKTsKKwl9CisKKwlmcmVlKGVycm9yX21zZyk7CisJcmV0dXJuIGVycm9yX3JldHVybjsKK30KKworc3RhdGljIHVpbnRtYXhfdCBnZXRfdW5pdF9mYWN0b3IoY29uc3QgY2hhciAqZW5kKQoreworCWlmICghKmVuZCkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoZW5kLCAiayIpKQorCQlyZXR1cm4gMTAyNDsKKwllbHNlIGlmICghc3RyY2FzZWNtcChlbmQsICJtIikpCisJCXJldHVybiAxMDI0ICogMTAyNDsKKwllbHNlIGlmICghc3RyY2FzZWNtcChlbmQsICJnIikpCisJCXJldHVybiAxMDI0ICogMTAyNCAqIDEwMjQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhcnNlX3NpZ25lZChjb25zdCBjaGFyICp2YWx1ZSwgaW50bWF4X3QgKnJldCwgaW50bWF4X3QgbWF4KQoreworCWlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKwkJY2hhciAqZW5kOworCQlpbnRtYXhfdCB2YWw7CisJCXVpbnRtYXhfdCB1dmFsOworCQl1aW50bWF4X3QgZmFjdG9yOworCisJCWVycm5vID0gMDsKKwkJdmFsID0gc3RydG9pbWF4KHZhbHVlLCAmZW5kLCAwKTsKKwkJaWYgKGVycm5vID09IEVSQU5HRSkKKwkJCXJldHVybiAwOworCQlmYWN0b3IgPSBnZXRfdW5pdF9mYWN0b3IoZW5kKTsKKwkJaWYgKCFmYWN0b3IpIHsKKwkJCWVycm5vID0gRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKwkJdXZhbCA9IHZhbCA8IDAgPyAtdmFsIDogdmFsOworCQlpZiAodW5zaWduZWRfbXVsdF9vdmVyZmxvd3MoZmFjdG9yLCB1dmFsKSB8fAorCQkgICAgZmFjdG9yICogdXZhbCA+IG1heCkgeworCQkJZXJybm8gPSBFUkFOR0U7CisJCQlyZXR1cm4gMDsKKwkJfQorCQl2YWwgKj0gZmFjdG9yOworCQkqcmV0ID0gdmFsOworCQlyZXR1cm4gMTsKKwl9CisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhcnNlX3Vuc2lnbmVkKGNvbnN0IGNoYXIgKnZhbHVlLCB1aW50bWF4X3QgKnJldCwgdWludG1heF90IG1heCkKK3sKKwlpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisJCWNoYXIgKmVuZDsKKwkJdWludG1heF90IHZhbDsKKwkJdWludG1heF90IGZhY3RvcjsKKworCQllcnJubyA9IDA7CisJCXZhbCA9IHN0cnRvdW1heCh2YWx1ZSwgJmVuZCwgMCk7CisJCWlmIChlcnJubyA9PSBFUkFOR0UpCisJCQlyZXR1cm4gMDsKKwkJZmFjdG9yID0gZ2V0X3VuaXRfZmFjdG9yKGVuZCk7CisJCWlmICghZmFjdG9yKSB7CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICh1bnNpZ25lZF9tdWx0X292ZXJmbG93cyhmYWN0b3IsIHZhbCkgfHwKKwkJICAgIGZhY3RvciAqIHZhbCA+IG1heCkgeworCQkJZXJybm8gPSBFUkFOR0U7CisJCQlyZXR1cm4gMDsKKwkJfQorCQl2YWwgKj0gZmFjdG9yOworCQkqcmV0ID0gdmFsOworCQlyZXR1cm4gMTsKKwl9CisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhcnNlX2ludChjb25zdCBjaGFyICp2YWx1ZSwgaW50ICpyZXQpCit7CisJaW50bWF4X3QgdG1wOworCWlmICghZ2l0X3BhcnNlX3NpZ25lZCh2YWx1ZSwgJnRtcCwgbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShpbnQpKSkKKwkJcmV0dXJuIDA7CisJKnJldCA9IHRtcDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBnaXRfcGFyc2VfaW50NjQoY29uc3QgY2hhciAqdmFsdWUsIGludDY0X3QgKnJldCkKK3sKKwlpbnRtYXhfdCB0bXA7CisJaWYgKCFnaXRfcGFyc2Vfc2lnbmVkKHZhbHVlLCAmdG1wLCBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKGludDY0X3QpKSkKKwkJcmV0dXJuIDA7CisJKnJldCA9IHRtcDsKKwlyZXR1cm4gMTsKK30KKworaW50IGdpdF9wYXJzZV91bG9uZyhjb25zdCBjaGFyICp2YWx1ZSwgdW5zaWduZWQgbG9uZyAqcmV0KQoreworCXVpbnRtYXhfdCB0bXA7CisJaWYgKCFnaXRfcGFyc2VfdW5zaWduZWQodmFsdWUsICZ0bXAsIG1heGltdW1fdW5zaWduZWRfdmFsdWVfb2ZfdHlwZShsb25nKSkpCisJCXJldHVybiAwOworCSpyZXQgPSB0bXA7CisJcmV0dXJuIDE7Cit9CisKK2ludCBnaXRfcGFyc2Vfc3NpemVfdChjb25zdCBjaGFyICp2YWx1ZSwgc3NpemVfdCAqcmV0KQoreworCWludG1heF90IHRtcDsKKwlpZiAoIWdpdF9wYXJzZV9zaWduZWQodmFsdWUsICZ0bXAsIG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUoc3NpemVfdCkpKQorCQlyZXR1cm4gMDsKKwkqcmV0ID0gdG1wOworCXJldHVybiAxOworfQorCitOT1JFVFVSTgorc3RhdGljIHZvaWQgZGllX2JhZF9udW1iZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqZXJyb3JfdHlwZSA9IChlcnJubyA9PSBFUkFOR0UpID8KKwkJTl8oIm91dCBvZiByYW5nZSIpIDogTl8oImludmFsaWQgdW5pdCIpOworCWNvbnN0IGNoYXIgKmJhZF9udW1lcmljID0gTl8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIpOworCisJaWYgKCF2YWx1ZSkKKwkJdmFsdWUgPSAiIjsKKworCWlmICghc3RyY21wKG5hbWUsICJHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiIpKQorCQkvKgorCQkgKiBXZSBleHBsaWNpdGx5ICpkb24ndCogdXNlIF8oKSBoZXJlIHNpbmNlIGl0IHdvdWxkCisJCSAqIGNhdXNlIGFuIGluZmluaXRlIGxvb3Agd2l0aCBfKCkgbmVlZGluZyB0byBjYWxsCisJCSAqIHVzZV9nZXR0ZXh0X3BvaXNvbigpLiBUaGlzIGlzIHdoeSBtYXJrZWQgdXAKKwkJICogdHJhbnNsYXRpb25zIHdpdGggTl8oKSBhYm92ZS4KKwkJICovCisJCWRpZShiYWRfbnVtZXJpYywgdmFsdWUsIG5hbWUsIGVycm9yX3R5cGUpOworCisJaWYgKCEoY2YgJiYgY2YtPm5hbWUpKQorCQlkaWUoXyhiYWRfbnVtZXJpYyksIHZhbHVlLCBuYW1lLCBfKGVycm9yX3R5cGUpKTsKKworCXN3aXRjaCAoY2YtPm9yaWdpbl90eXBlKSB7CisJY2FzZSBDT05GSUdfT1JJR0lOX0JMT0I6CisJCWRpZShfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIpLAorCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lLCBfKGVycm9yX3R5cGUpKTsKKwljYXNlIENPTkZJR19PUklHSU5fRklMRToKKwkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIiksCisJCSAgICB2YWx1ZSwgbmFtZSwgY2YtPm5hbWUsIF8oZXJyb3JfdHlwZSkpOworCWNhc2UgQ09ORklHX09SSUdJTl9TVERJTjoKKwkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIpLAorCQkgICAgdmFsdWUsIG5hbWUsIF8oZXJyb3JfdHlwZSkpOworCWNhc2UgQ09ORklHX09SSUdJTl9TVUJNT0RVTEVfQkxPQjoKKwkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIpLAorCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lLCBfKGVycm9yX3R5cGUpKTsKKwljYXNlIENPTkZJR19PUklHSU5fQ01ETElORToKKwkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiKSwKKwkJICAgIHZhbHVlLCBuYW1lLCBjZi0+bmFtZSwgXyhlcnJvcl90eXBlKSk7CisJZGVmYXVsdDoKKwkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIpLAorCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lLCBfKGVycm9yX3R5cGUpKTsKKwl9Cit9CisKK2ludCBnaXRfY29uZmlnX2ludChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQgcmV0OworCWlmICghZ2l0X3BhcnNlX2ludCh2YWx1ZSwgJnJldCkpCisJCWRpZV9iYWRfbnVtYmVyKG5hbWUsIHZhbHVlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQ2NF90IGdpdF9jb25maWdfaW50NjQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50NjRfdCByZXQ7CisJaWYgKCFnaXRfcGFyc2VfaW50NjQodmFsdWUsICZyZXQpKQorCQlkaWVfYmFkX251bWJlcihuYW1lLCB2YWx1ZSk7CisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgbG9uZyBnaXRfY29uZmlnX3Vsb25nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCWlmICghZ2l0X3BhcnNlX3Vsb25nKHZhbHVlLCAmcmV0KSkKKwkJZGllX2JhZF9udW1iZXIobmFtZSwgdmFsdWUpOworCXJldHVybiByZXQ7Cit9CisKK3NzaXplX3QgZ2l0X2NvbmZpZ19zc2l6ZV90KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXNzaXplX3QgcmV0OworCWlmICghZ2l0X3BhcnNlX3NzaXplX3QodmFsdWUsICZyZXQpKQorCQlkaWVfYmFkX251bWJlcihuYW1lLCB2YWx1ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnaXRfcGFyc2VfbWF5YmVfYm9vbF90ZXh0KGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiAxOworCWlmICghKnZhbHVlKQorCQlyZXR1cm4gMDsKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJ0cnVlIikKKwkgICAgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJ5ZXMiKQorCSAgICB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgIm9uIikpCisJCXJldHVybiAxOworCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImZhbHNlIikKKwkgICAgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJubyIpCisJICAgIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAib2ZmIikpCisJCXJldHVybiAwOworCXJldHVybiAtMTsKK30KKworaW50IGdpdF9wYXJzZV9tYXliZV9ib29sKGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCB2ID0gZ2l0X3BhcnNlX21heWJlX2Jvb2xfdGV4dCh2YWx1ZSk7CisJaWYgKDAgPD0gdikKKwkJcmV0dXJuIHY7CisJaWYgKGdpdF9wYXJzZV9pbnQodmFsdWUsICZ2KSkKKwkJcmV0dXJuICEhdjsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgKmlzX2Jvb2wpCit7CisJaW50IHYgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbF90ZXh0KHZhbHVlKTsKKwlpZiAoMCA8PSB2KSB7CisJCSppc19ib29sID0gMTsKKwkJcmV0dXJuIHY7CisJfQorCSppc19ib29sID0gMDsKKwlyZXR1cm4gZ2l0X2NvbmZpZ19pbnQobmFtZSwgdmFsdWUpOworfQorCitpbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBkaXNjYXJkOworCXJldHVybiAhIWdpdF9jb25maWdfYm9vbF9vcl9pbnQobmFtZSwgdmFsdWUsICZkaXNjYXJkKTsKK30KKworaW50IGdpdF9jb25maWdfc3RyaW5nKGNvbnN0IGNoYXIgKipkZXN0LCBjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCSpkZXN0ID0geHN0cmR1cCh2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29uZmlnX3BhdGhuYW1lKGNvbnN0IGNoYXIgKipkZXN0LCBjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCSpkZXN0ID0gZXhwYW5kX3VzZXJfcGF0aCh2YWx1ZSwgMCk7CisJaWYgKCEqZGVzdCkKKwkJZGllKF8oImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciKSwgdmFsdWUpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ19leHBpcnlfZGF0ZSh0aW1lc3RhbXBfdCAqdGltZXN0YW1wLCBjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCWlmIChwYXJzZV9leHBpcnlfZGF0ZSh2YWx1ZSwgdGltZXN0YW1wKSkKKwkJcmV0dXJuIGVycm9yKF8oIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIiksCisJCQkgICAgIHZhbHVlLCB2YXIpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ19jb2xvcihjaGFyICpkZXN0LCBjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCWlmIChjb2xvcl9wYXJzZSh2YWx1ZSwgZGVzdCkgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfY29yZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJLyogVGhpcyBuZWVkcyBhIGJldHRlciBuYW1lICovCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5maWxlbW9kZSIpKSB7CisJCXRydXN0X2V4ZWN1dGFibGVfYml0ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS50cnVzdGN0aW1lIikpIHsKKwkJdHJ1c3RfY3RpbWUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmNoZWNrc3RhdCIpKSB7CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImRlZmF1bHQiKSkKKwkJCWNoZWNrX3N0YXQgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIm1pbmltYWwiKSkKKwkJCWNoZWNrX3N0YXQgPSAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucXVvdGVwYXRoIikpIHsKKwkJcXVvdGVfcGF0aF9mdWxseSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5zeW1saW5rcyIpKSB7CisJCWhhc19zeW1saW5rcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5pZ25vcmVjYXNlIikpIHsKKwkJaWdub3JlX2Nhc2UgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuYXR0cmlidXRlc2ZpbGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJmdpdF9hdHRyaWJ1dGVzX2ZpbGUsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5ob29rc3BhdGgiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJmdpdF9ob29rc19wYXRoLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgImNvcmUuYmFyZSIpKSB7CisJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuaWdub3Jlc3RhdCIpKSB7CisJCWFzc3VtZV91bmNoYW5nZWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucHJlZmVyc3ltbGlua3JlZnMiKSkgeworCQlwcmVmZXJfc3ltbGlua19yZWZzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJhbHdheXMiKSkKKwkJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBMT0dfUkVGU19BTFdBWVM7CisJCWVsc2UgaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBMT0dfUkVGU19OT1JNQUw7CisJCWVsc2UKKwkJCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBMT0dfUkVGU19OT05FOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIikpIHsKKwkJd2Fybl9hbWJpZ3VvdXNfcmVmcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5hYmJyZXYiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImF1dG8iKSkKKwkJCWRlZmF1bHRfYWJicmV2ID0gLTE7CisJCWVsc2UgeworCQkJaW50IGFiYnJldiA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQkJaWYgKGFiYnJldiA8IG1pbmltdW1fYWJicmV2IHx8IGFiYnJldiA+IHRoZV9oYXNoX2FsZ28tPmhleHN6KQorCQkJCXJldHVybiBlcnJvcihfKCJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiKSwgYWJicmV2KTsKKwkJCWRlZmF1bHRfYWJicmV2ID0gYWJicmV2OworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuZGlzYW1iaWd1YXRlIikpCisJCXJldHVybiBzZXRfZGlzYW1iaWd1YXRlX2hpbnRfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5sb29zZWNvbXByZXNzaW9uIikpIHsKKwkJaW50IGxldmVsID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChsZXZlbCA9PSAtMSkKKwkJCWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCQllbHNlIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBaX0JFU1RfQ09NUFJFU1NJT04pCisJCQlkaWUoXygiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiKSwgbGV2ZWwpOworCQl6bGliX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCXpsaWJfY29tcHJlc3Npb25fc2VlbiA9IDE7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuY29tcHJlc3Npb24iKSkgeworCQlpbnQgbGV2ZWwgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKGxldmVsID09IC0xKQorCQkJbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJCWVsc2UgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IFpfQkVTVF9DT01QUkVTU0lPTikKKwkJCWRpZShfKCJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIpLCBsZXZlbCk7CisJCWNvcmVfY29tcHJlc3Npb25fbGV2ZWwgPSBsZXZlbDsKKwkJY29yZV9jb21wcmVzc2lvbl9zZWVuID0gMTsKKwkJaWYgKCF6bGliX2NvbXByZXNzaW9uX3NlZW4pCisJCQl6bGliX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCWlmICghcGFja19jb21wcmVzc2lvbl9zZWVuKQorCQkJcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IGxldmVsOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnBhY2tlZGdpdHdpbmRvd3NpemUiKSkgeworCQlpbnQgcGdzel94MiA9IGdldHBhZ2VzaXplKCkgKiAyOworCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplID0gZ2l0X2NvbmZpZ191bG9uZyh2YXIsIHZhbHVlKTsKKworCQkvKiBUaGlzIHZhbHVlIG11c3QgYmUgbXVsdGlwbGUgb2YgKHBhZ2VzaXplICogMikgKi8KKwkJcGFja2VkX2dpdF93aW5kb3dfc2l6ZSAvPSBwZ3N6X3gyOworCQlpZiAocGFja2VkX2dpdF93aW5kb3dfc2l6ZSA8IDEpCisJCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplID0gMTsKKwkJcGFja2VkX2dpdF93aW5kb3dfc2l6ZSAqPSBwZ3N6X3gyOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQiKSkgeworCQliaWdfZmlsZV90aHJlc2hvbGQgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnBhY2tlZGdpdGxpbWl0IikpIHsKKwkJcGFja2VkX2dpdF9saW1pdCA9IGdpdF9jb25maWdfdWxvbmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuZGVsdGFiYXNlY2FjaGVsaW1pdCIpKSB7CisJCWRlbHRhX2Jhc2VfY2FjaGVfbGltaXQgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmF1dG9jcmxmIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiaW5wdXQiKSkgeworCQkJYXV0b19jcmxmID0gQVVUT19DUkxGX0lOUFVUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYXV0b19jcmxmID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnNhZmVjcmxmIikpIHsKKwkJaW50IGVvbF9ybmR0cnBfZGllOworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJ3YXJuIikpIHsKKwkJCWdsb2JhbF9jb252X2ZsYWdzX2VvbCA9IENPTlZfRU9MX1JORFRSUF9XQVJOOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZW9sX3JuZHRycF9kaWUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCWdsb2JhbF9jb252X2ZsYWdzX2VvbCA9IGVvbF9ybmR0cnBfZGllID8KKwkJCUNPTlZfRU9MX1JORFRSUF9ESUUgOiAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmVvbCIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImxmIikpCisJCQljb3JlX2VvbCA9IEVPTF9MRjsKKwkJZWxzZSBpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJjcmxmIikpCisJCQljb3JlX2VvbCA9IEVPTF9DUkxGOworCQllbHNlIGlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgIm5hdGl2ZSIpKQorCQkJY29yZV9lb2wgPSBFT0xfTkFUSVZFOworCQllbHNlCisJCQljb3JlX2VvbCA9IEVPTF9VTlNFVDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5jaGVja3JvdW5kdHJpcGVuY29kaW5nIikpIHsKKwkJY2hlY2tfcm91bmR0cmlwX2VuY29kaW5nID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUubm90ZXNyZWYiKSkgeworCQlub3Rlc19yZWZfbmFtZSA9IHhzdHJkdXAodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmVkaXRvciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmVkaXRvcl9wcm9ncmFtLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgImNvcmUuY29tbWVudGNoYXIiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiYXV0byIpKQorCQkJYXV0b19jb21tZW50X2xpbmVfY2hhciA9IDE7CisJCWVsc2UgaWYgKHZhbHVlWzBdICYmICF2YWx1ZVsxXSkgeworCQkJY29tbWVudF9saW5lX2NoYXIgPSB2YWx1ZVswXTsKKwkJCWF1dG9fY29tbWVudF9saW5lX2NoYXIgPSAwOworCQl9IGVsc2UKKwkJCXJldHVybiBlcnJvcihfKCJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiKSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuYXNrcGFzcyIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmFza3Bhc3NfcHJvZ3JhbSwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmV4Y2x1ZGVzZmlsZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmZXhjbHVkZXNfZmlsZSwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLndoaXRlc3BhY2UiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXdoaXRlc3BhY2VfcnVsZV9jZmcgPSBwYXJzZV93aGl0ZXNwYWNlX3J1bGUodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmZzeW5jb2JqZWN0ZmlsZXMiKSkgeworCQlmc3luY19vYmplY3RfZmlsZXMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucHJlbG9hZGluZGV4IikpIHsKKwkJY29yZV9wcmVsb2FkX2luZGV4ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmNyZWF0ZW9iamVjdCIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAicmVuYW1lIikpCisJCQlvYmplY3RfY3JlYXRpb25fbW9kZSA9IE9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVM7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJsaW5rIikpCisJCQlvYmplY3RfY3JlYXRpb25fbW9kZSA9IE9CSkVDVF9DUkVBVElPTl9VU0VTX0hBUkRMSU5LUzsKKwkJZWxzZQorCQkJZGllKF8oImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIpLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuc3BhcnNlY2hlY2tvdXQiKSkgeworCQljb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5zcGFyc2VjaGVja291dGNvbmUiKSkgeworCQljb3JlX3NwYXJzZV9jaGVja291dF9jb25lID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnByZWNvbXBvc2V1bmljb2RlIikpIHsKKwkJcHJlY29tcG9zZWRfdW5pY29kZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wcm90ZWN0aGZzIikpIHsKKwkJcHJvdGVjdF9oZnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucHJvdGVjdG50ZnMiKSkgeworCQlwcm90ZWN0X250ZnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUudXNlcmVwbGFjZXJlZnMiKSkgeworCQlyZWFkX3JlcGxhY2VfcmVmcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiBwbGF0Zm9ybV9jb3JlX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfaTE4bl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJpMThuLmNvbW1pdGVuY29kaW5nIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X2NvbW1pdF9lbmNvZGluZywgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJpMThuLmxvZ291dHB1dGVuY29kaW5nIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcsIHZhciwgdmFsdWUpOworCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJicmFuY2guYXV0b3NldHVwbWVyZ2UiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJhbHdheXMiKSkgeworCQkJZ2l0X2JyYW5jaF90cmFjayA9IEJSQU5DSF9UUkFDS19BTFdBWVM7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlnaXRfYnJhbmNoX3RyYWNrID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm5ldmVyIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9ORVZFUjsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImxvY2FsIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9MT0NBTDsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInJlbW90ZSIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfUkVNT1RFOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiYWx3YXlzIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9BTFdBWVM7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcihfKCJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIiksIHZhcik7CisJCXJldHVybiAwOworCX0KKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9wdXNoX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhciwgInB1c2guZGVmYXVsdCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm5vdGhpbmciKSkKKwkJCXB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9OT1RISU5HOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibWF0Y2hpbmciKSkKKwkJCXB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9NQVRDSElORzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInNpbXBsZSIpKQorCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX1NJTVBMRTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInVwc3RyZWFtIikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfVVBTVFJFQU07CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJ0cmFja2luZyIpKSAvKiBkZXByZWNhdGVkICovCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfVVBTVFJFQU07CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJjdXJyZW50IikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfQ1VSUkVOVDsKKwkJZWxzZSB7CisJCQllcnJvcihfKCJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIpLCB2YXIsIHZhbHVlKTsKKwkJCXJldHVybiBlcnJvcihfKCJtdXN0IGJlIG9uZSBvZiBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCAiCisJCQkJICAgICAgICJ1cHN0cmVhbSBvciBjdXJyZW50IikpOworCQl9CisJCXJldHVybiAwOworCX0KKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9tYWlsbWFwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhciwgIm1haWxtYXAuZmlsZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmZ2l0X21haWxtYXBfZmlsZSwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAibWFpbG1hcC5ibG9iIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X21haWxtYXBfYmxvYiwgdmFyLCB2YWx1ZSk7CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHN0YXJ0c193aXRoKHZhciwgImNvcmUuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb3JlX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAidXNlci4iKSB8fAorCSAgICBzdGFydHNfd2l0aCh2YXIsICJhdXRob3IuIikgfHwKKwkgICAgc3RhcnRzX3dpdGgodmFyLCAiY29tbWl0dGVyLiIpKQorCQlyZXR1cm4gZ2l0X2lkZW50X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAiaTE4bi4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2kxOG5fY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgImJyYW5jaC4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2JyYW5jaF9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAicHVzaC4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X3B1c2hfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgIm1haWxtYXAuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9tYWlsbWFwX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJhZHZpY2UuIikgfHwgc3RhcnRzX3dpdGgodmFyLCAiY29sb3IuYWR2aWNlIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9hZHZpY2VfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAicGFnZXIuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLnBhZ2VyIikpIHsKKwkJcGFnZXJfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19ib29sKHZhcix2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInBhY2sucGFja3NpemVsaW1pdCIpKSB7CisJCXBhY2tfc2l6ZV9saW1pdF9jZmcgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJwYWNrLmNvbXByZXNzaW9uIikpIHsKKwkJaW50IGxldmVsID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChsZXZlbCA9PSAtMSkKKwkJCWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCQllbHNlIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBaX0JFU1RfQ09NUFJFU1NJT04pCisJCQlkaWUoXygiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiKSwgbGV2ZWwpOworCQlwYWNrX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCXBhY2tfY29tcHJlc3Npb25fc2VlbiA9IDE7CisJCXJldHVybiAwOworCX0KKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFsbCBzb3VyY2Ugc3BlY2lmaWMgZmllbGRzIGluIHRoZSB1bmlvbiwgZGllX29uX2Vycm9yLCBuYW1lIGFuZCB0aGUgY2FsbGJhY2tzCisgKiBmZ2V0YywgdW5nZXRjLCBmdGVsbCBvZiB0b3AgbmVlZCB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZworICogdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBkb19jb25maWdfZnJvbShzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqdG9wLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwKKwkJCSAgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzKQoreworCWludCByZXQ7CisKKwkvKiBwdXNoIGNvbmZpZy1maWxlIHBhcnNpbmcgc3RhdGUgc3RhY2sgKi8KKwl0b3AtPnByZXYgPSBjZjsKKwl0b3AtPmxpbmVuciA9IDE7CisJdG9wLT5lb2YgPSAwOworCXN0cmJ1Zl9pbml0KCZ0b3AtPnZhbHVlLCAxMDI0KTsKKwlzdHJidWZfaW5pdCgmdG9wLT52YXIsIDEwMjQpOworCWNmID0gdG9wOworCisJcmV0ID0gZ2l0X3BhcnNlX3NvdXJjZShmbiwgZGF0YSwgb3B0cyk7CisKKwkvKiBwb3AgY29uZmlnLWZpbGUgcGFyc2luZyBzdGF0ZSBzdGFjayAqLworCXN0cmJ1Zl9yZWxlYXNlKCZ0b3AtPnZhbHVlKTsKKwlzdHJidWZfcmVsZWFzZSgmdG9wLT52YXIpOworCWNmID0gdG9wLT5wcmV2OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkb19jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLAorCQljb25zdCBlbnVtIGNvbmZpZ19vcmlnaW5fdHlwZSBvcmlnaW5fdHlwZSwKKwkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCwgRklMRSAqZiwKKwkJdm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzKQoreworCXN0cnVjdCBjb25maWdfc291cmNlIHRvcDsKKwlpbnQgcmV0OworCisJdG9wLnUuZmlsZSA9IGY7CisJdG9wLm9yaWdpbl90eXBlID0gb3JpZ2luX3R5cGU7CisJdG9wLm5hbWUgPSBuYW1lOworCXRvcC5wYXRoID0gcGF0aDsKKwl0b3AuZGVmYXVsdF9lcnJvcl9hY3Rpb24gPSBDT05GSUdfRVJST1JfRElFOworCXRvcC5kb19mZ2V0YyA9IGNvbmZpZ19maWxlX2ZnZXRjOworCXRvcC5kb191bmdldGMgPSBjb25maWdfZmlsZV91bmdldGM7CisJdG9wLmRvX2Z0ZWxsID0gY29uZmlnX2ZpbGVfZnRlbGw7CisKKwlmbG9ja2ZpbGUoZik7CisJcmV0ID0gZG9fY29uZmlnX2Zyb20oJnRvcCwgZm4sIGRhdGEsIG9wdHMpOworCWZ1bmxvY2tmaWxlKGYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19mcm9tX3N0ZGluKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQoreworCXJldHVybiBkb19jb25maWdfZnJvbV9maWxlKGZuLCBDT05GSUdfT1JJR0lOX1NURElOLCAiIiwgTlVMTCwgc3RkaW4sCisJCQkJICAgZGF0YSwgTlVMTCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Zyb21fZmlsZV93aXRoX29wdGlvbnMoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgICAgIHZvaWQgKmRhdGEsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICpvcHRzKQoreworCWludCByZXQgPSAtMTsKKwlGSUxFICpmOworCisJZiA9IGZvcGVuX29yX3dhcm4oZmlsZW5hbWUsICJyIik7CisJaWYgKGYpIHsKKwkJcmV0ID0gZG9fY29uZmlnX2Zyb21fZmlsZShmbiwgQ09ORklHX09SSUdJTl9GSUxFLCBmaWxlbmFtZSwKKwkJCQkJICBmaWxlbmFtZSwgZiwgZGF0YSwgb3B0cyk7CisJCWZjbG9zZShmKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX2ZpbGVfd2l0aF9vcHRpb25zKGZuLCBmaWxlbmFtZSwgZGF0YSwgTlVMTCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Zyb21fbWVtKGNvbmZpZ19mbl90IGZuLAorCQkJY29uc3QgZW51bSBjb25maWdfb3JpZ2luX3R5cGUgb3JpZ2luX3R5cGUsCisJCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisJCQl2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IGNvbmZpZ19zb3VyY2UgdG9wOworCisJdG9wLnUuYnVmLmJ1ZiA9IGJ1ZjsKKwl0b3AudS5idWYubGVuID0gbGVuOworCXRvcC51LmJ1Zi5wb3MgPSAwOworCXRvcC5vcmlnaW5fdHlwZSA9IG9yaWdpbl90eXBlOworCXRvcC5uYW1lID0gbmFtZTsKKwl0b3AucGF0aCA9IE5VTEw7CisJdG9wLmRlZmF1bHRfZXJyb3JfYWN0aW9uID0gQ09ORklHX0VSUk9SX0VSUk9SOworCXRvcC5kb19mZ2V0YyA9IGNvbmZpZ19idWZfZmdldGM7CisJdG9wLmRvX3VuZ2V0YyA9IGNvbmZpZ19idWZfdW5nZXRjOworCXRvcC5kb19mdGVsbCA9IGNvbmZpZ19idWZfZnRlbGw7CisKKwlyZXR1cm4gZG9fY29uZmlnX2Zyb20oJnRvcCwgZm4sIGRhdGEsIG9wdHMpOworfQorCitpbnQgZ2l0X2NvbmZpZ19mcm9tX2Jsb2Jfb2lkKGNvbmZpZ19mbl90IGZuLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJldDsKKworCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciKSwgbmFtZSk7CisJaWYgKHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShidWYpOworCQlyZXR1cm4gZXJyb3IoXygicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIiksIG5hbWUpOworCX0KKworCXJldCA9IGdpdF9jb25maWdfZnJvbV9tZW0oZm4sIENPTkZJR19PUklHSU5fQkxPQiwgbmFtZSwgYnVmLCBzaXplLAorCQkJCSAgZGF0YSwgTlVMTCk7CisJZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnaXRfY29uZmlnX2Zyb21fYmxvYl9yZWYoY29uZmlnX2ZuX3QgZm4sCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoZ2V0X29pZChuYW1lLCAmb2lkKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIiksIG5hbWUpOworCXJldHVybiBnaXRfY29uZmlnX2Zyb21fYmxvYl9vaWQoZm4sIG5hbWUsICZvaWQsIGRhdGEpOworfQorCitjb25zdCBjaGFyICpnaXRfZXRjX2dpdGNvbmZpZyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzeXN0ZW1fd2lkZTsKKwlpZiAoIXN5c3RlbV93aWRlKQorCQlzeXN0ZW1fd2lkZSA9IHN5c3RlbV9wYXRoKEVUQ19HSVRDT05GSUcpOworCXJldHVybiBzeXN0ZW1fd2lkZTsKK30KKworLyoKKyAqIFBhcnNlIGVudmlyb25tZW50IHZhcmlhYmxlICdrJyBhcyBhIGJvb2xlYW4gKGluIHZhcmlvdXMKKyAqIHBvc3NpYmxlIHNwZWxsaW5ncyk7IGlmIG1pc3NpbmcsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAnZGVmJy4KKyAqLworaW50IGdpdF9lbnZfYm9vbChjb25zdCBjaGFyICprLCBpbnQgZGVmKQoreworCWNvbnN0IGNoYXIgKnYgPSBnZXRlbnYoayk7CisJcmV0dXJuIHYgPyBnaXRfY29uZmlnX2Jvb2woaywgdikgOiBkZWY7Cit9CisKKy8qCisgKiBQYXJzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnaycgYXMgdWxvbmcgd2l0aCBwb3NzaWJseSBhIHVuaXQKKyAqIHN1ZmZpeDsgaWYgbWlzc2luZywgdXNlIHRoZSBkZWZhdWx0IHZhbHVlICd2YWwnLgorICovCit1bnNpZ25lZCBsb25nIGdpdF9lbnZfdWxvbmcoY29uc3QgY2hhciAqaywgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJY29uc3QgY2hhciAqdiA9IGdldGVudihrKTsKKwlpZiAodiAmJiAhZ2l0X3BhcnNlX3Vsb25nKHYsICZ2YWwpKQorCQlkaWUoXygiZmFpbGVkIHRvIHBhcnNlICVzIiksIGspOworCXJldHVybiB2YWw7Cit9CisKK2ludCBnaXRfY29uZmlnX3N5c3RlbSh2b2lkKQoreworCXJldHVybiAhZ2l0X2Vudl9ib29sKCJHSVRfQ09ORklHX05PU1lTVEVNIiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZG9fZ2l0X2NvbmZpZ19zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMsCisJCQkJICBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwljaGFyICp4ZGdfY29uZmlnID0geGRnX2NvbmZpZ19ob21lKCJjb25maWciKTsKKwljaGFyICp1c2VyX2NvbmZpZyA9IGV4cGFuZF91c2VyX3BhdGgoIn4vLmdpdGNvbmZpZyIsIDApOworCWNoYXIgKnJlcG9fY29uZmlnOworCWVudW0gY29uZmlnX3Njb3BlIHByZXZfcGFyc2luZ19zY29wZSA9IGN1cnJlbnRfcGFyc2luZ19zY29wZTsKKworCWlmIChvcHRzLT5jb21tb25kaXIpCisJCXJlcG9fY29uZmlnID0gbWtwYXRoZHVwKCIlcy9jb25maWciLCBvcHRzLT5jb21tb25kaXIpOworCWVsc2UgaWYgKG9wdHMtPmdpdF9kaXIpCisJCUJVRygiZ2l0X2RpciB3aXRob3V0IGNvbW1vbmRpciIpOworCWVsc2UKKwkJcmVwb19jb25maWcgPSBOVUxMOworCisJY3VycmVudF9wYXJzaW5nX3Njb3BlID0gQ09ORklHX1NDT1BFX1NZU1RFTTsKKwlpZiAoZ2l0X2NvbmZpZ19zeXN0ZW0oKSAmJiAhYWNjZXNzX29yX2RpZShnaXRfZXRjX2dpdGNvbmZpZygpLCBSX09LLAorCQkJCQkJICBvcHRzLT5zeXN0ZW1fZ2VudGx5ID8KKwkJCQkJCSAgQUNDRVNTX0VBQ0NFU19PSyA6IDApKQorCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIGdpdF9ldGNfZ2l0Y29uZmlnKCksCisJCQkJCSAgICBkYXRhKTsKKworCWN1cnJlbnRfcGFyc2luZ19zY29wZSA9IENPTkZJR19TQ09QRV9HTE9CQUw7CisJaWYgKHhkZ19jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUoeGRnX2NvbmZpZywgUl9PSywgQUNDRVNTX0VBQ0NFU19PSykpCisJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgeGRnX2NvbmZpZywgZGF0YSk7CisKKwlpZiAodXNlcl9jb25maWcgJiYgIWFjY2Vzc19vcl9kaWUodXNlcl9jb25maWcsIFJfT0ssIEFDQ0VTU19FQUNDRVNfT0spKQorCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHVzZXJfY29uZmlnLCBkYXRhKTsKKworCWN1cnJlbnRfcGFyc2luZ19zY29wZSA9IENPTkZJR19TQ09QRV9MT0NBTDsKKwlpZiAoIW9wdHMtPmlnbm9yZV9yZXBvICYmIHJlcG9fY29uZmlnICYmCisJICAgICFhY2Nlc3Nfb3JfZGllKHJlcG9fY29uZmlnLCBSX09LLCAwKSkKKwkJcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCByZXBvX2NvbmZpZywgZGF0YSk7CisKKwljdXJyZW50X3BhcnNpbmdfc2NvcGUgPSBDT05GSUdfU0NPUEVfV09SS1RSRUU7CisJaWYgKCFvcHRzLT5pZ25vcmVfd29ya3RyZWUgJiYgcmVwb3NpdG9yeV9mb3JtYXRfd29ya3RyZWVfY29uZmlnKSB7CisJCWNoYXIgKnBhdGggPSBnaXRfcGF0aGR1cCgiY29uZmlnLndvcmt0cmVlIik7CisJCWlmICghYWNjZXNzX29yX2RpZShwYXRoLCBSX09LLCAwKSkKKwkJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgcGF0aCwgZGF0YSk7CisJCWZyZWUocGF0aCk7CisJfQorCisJY3VycmVudF9wYXJzaW5nX3Njb3BlID0gQ09ORklHX1NDT1BFX0NPTU1BTkQ7CisJaWYgKCFvcHRzLT5pZ25vcmVfY21kbGluZSAmJiBnaXRfY29uZmlnX2Zyb21fcGFyYW1ldGVycyhmbiwgZGF0YSkgPCAwKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciKSk7CisKKwljdXJyZW50X3BhcnNpbmdfc2NvcGUgPSBwcmV2X3BhcnNpbmdfc2NvcGU7CisJZnJlZSh4ZGdfY29uZmlnKTsKKwlmcmVlKHVzZXJfY29uZmlnKTsKKwlmcmVlKHJlcG9fY29uZmlnKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY29uZmlnX3dpdGhfb3B0aW9ucyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBnaXRfY29uZmlnX3NvdXJjZSAqY29uZmlnX3NvdXJjZSwKKwkJCWNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSBpbmMgPSBDT05GSUdfSU5DTFVERV9JTklUOworCisJaWYgKG9wdHMtPnJlc3BlY3RfaW5jbHVkZXMpIHsKKwkJaW5jLmZuID0gZm47CisJCWluYy5kYXRhID0gZGF0YTsKKwkJaW5jLm9wdHMgPSBvcHRzOworCQlmbiA9IGdpdF9jb25maWdfaW5jbHVkZTsKKwkJZGF0YSA9ICZpbmM7CisJfQorCisJaWYgKGNvbmZpZ19zb3VyY2UpCisJCWN1cnJlbnRfcGFyc2luZ19zY29wZSA9IGNvbmZpZ19zb3VyY2UtPnNjb3BlOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgc3BlY2lmaWMgZmlsZW5hbWUsIHVzZSBpdC4gT3RoZXJ3aXNlLCBmb2xsb3cgdGhlCisJICogcmVndWxhciBsb29rdXAgc2VxdWVuY2UuCisJICovCisJaWYgKGNvbmZpZ19zb3VyY2UgJiYgY29uZmlnX3NvdXJjZS0+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+ZmlsZW5hbWUsIGt2X2luZm8tPmxpbmVucik7Cit9CisKKy8qCisgKiBGaW5kIGFsbCB0aGUgc3R1ZmYgZm9yIGdpdF9jb25maWdfc2V0KCkgYmVsb3cuCisgKi8KKworc3RydWN0IGNvbmZpZ19zdG9yZV9kYXRhIHsKKwlpbnQgYmFzZWxlbjsKKwljaGFyICprZXk7CisJaW50IGRvX25vdF9tYXRjaDsKKwlyZWdleF90ICp2YWx1ZV9yZWdleDsKKwlpbnQgbXVsdGlfcmVwbGFjZTsKKwlzdHJ1Y3QgeworCQlzaXplX3QgYmVnaW4sIGVuZDsKKwkJZW51bSBjb25maWdfZXZlbnRfdCB0eXBlOworCQlpbnQgaXNfa2V5c19zZWN0aW9uOworCX0gKnBhcnNlZDsKKwl1bnNpZ25lZCBpbnQgcGFyc2VkX25yLCBwYXJzZWRfYWxsb2MsICpzZWVuLCBzZWVuX25yLCBzZWVuX2FsbG9jOworCXVuc2lnbmVkIGludCBrZXlfc2VlbjoxLCBzZWN0aW9uX3NlZW46MSwgaXNfa2V5c19zZWN0aW9uOjE7Cit9OworCitzdGF0aWMgdm9pZCBjb25maWdfc3RvcmVfZGF0YV9jbGVhcihzdHJ1Y3QgY29uZmlnX3N0b3JlX2RhdGEgKnN0b3JlKQoreworCWZyZWUoc3RvcmUtPmtleSk7CisJaWYgKHN0b3JlLT52YWx1ZV9yZWdleCAhPSBOVUxMICYmCisJICAgIHN0b3JlLT52YWx1ZV9yZWdleCAhPSBDT05GSUdfUkVHRVhfTk9ORSkgeworCQlyZWdmcmVlKHN0b3JlLT52YWx1ZV9yZWdleCk7CisJCWZyZWUoc3RvcmUtPnZhbHVlX3JlZ2V4KTsKKwl9CisJZnJlZShzdG9yZS0+cGFyc2VkKTsKKwlmcmVlKHN0b3JlLT5zZWVuKTsKKwltZW1zZXQoc3RvcmUsIDAsIHNpemVvZigqc3RvcmUpKTsKK30KKworc3RhdGljIGludCBtYXRjaGVzKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCisJCSAgIGNvbnN0IHN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSAqc3RvcmUpCit7CisJaWYgKHN0cmNtcChrZXksIHN0b3JlLT5rZXkpKQorCQlyZXR1cm4gMDsgLyogbm90IG91cnMgKi8KKwlpZiAoIXN0b3JlLT52YWx1ZV9yZWdleCkKKwkJcmV0dXJuIDE7IC8qIGFsd2F5cyBtYXRjaGVzICovCisJaWYgKHN0b3JlLT52YWx1ZV9yZWdleCA9PSBDT05GSUdfUkVHRVhfTk9ORSkKKwkJcmV0dXJuIDA7IC8qIG5ldmVyIG1hdGNoZXMgKi8KKworCXJldHVybiBzdG9yZS0+ZG9fbm90X21hdGNoIF4KKwkJKHZhbHVlICYmICFyZWdleGVjKHN0b3JlLT52YWx1ZV9yZWdleCwgdmFsdWUsIDAsIE5VTEwsIDApKTsKK30KKworc3RhdGljIGludCBzdG9yZV9hdXhfZXZlbnQoZW51bSBjb25maWdfZXZlbnRfdCB0eXBlLAorCQkJICAgc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSAqc3RvcmUgPSBkYXRhOworCisJQUxMT0NfR1JPVyhzdG9yZS0+cGFyc2VkLCBzdG9yZS0+cGFyc2VkX25yICsgMSwgc3RvcmUtPnBhcnNlZF9hbGxvYyk7CisJc3RvcmUtPnBhcnNlZFtzdG9yZS0+cGFyc2VkX25yXS5iZWdpbiA9IGJlZ2luOworCXN0b3JlLT5wYXJzZWRbc3RvcmUtPnBhcnNlZF9ucl0uZW5kID0gZW5kOworCXN0b3JlLT5wYXJzZWRbc3RvcmUtPnBhcnNlZF9ucl0udHlwZSA9IHR5cGU7CisKKwlpZiAodHlwZSA9PSBDT05GSUdfRVZFTlRfU0VDVElPTikgeworCQlpbnQgKCpjbXBmbikoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisKKwkJaWYgKGNmLT52YXIubGVuIDwgMiB8fCBjZi0+dmFyLmJ1ZltjZi0+dmFyLmxlbiAtIDFdICE9ICcuJykKKwkJCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIiksIGNmLT52YXIuYnVmKTsKKworCQlpZiAoY2YtPnN1YnNlY3Rpb25fY2FzZV9zZW5zaXRpdmUpCisJCQljbXBmbiA9IHN0cm5jYXNlY21wOworCQllbHNlCisJCQljbXBmbiA9IHN0cm5jbXA7CisKKwkJLyogSXMgdGhpcyB0aGUgc2VjdGlvbiB3ZSB3ZXJlIGxvb2tpbmcgZm9yPyAqLworCQlzdG9yZS0+aXNfa2V5c19zZWN0aW9uID0KKwkJCXN0b3JlLT5wYXJzZWRbc3RvcmUtPnBhcnNlZF9ucl0uaXNfa2V5c19zZWN0aW9uID0KKwkJCWNmLT52YXIubGVuIC0gMSA9PSBzdG9yZS0+YmFzZWxlbiAmJgorCQkJIWNtcGZuKGNmLT52YXIuYnVmLCBzdG9yZS0+a2V5LCBzdG9yZS0+YmFzZWxlbik7CisJCWlmIChzdG9yZS0+aXNfa2V5c19zZWN0aW9uKSB7CisJCQlzdG9yZS0+c2VjdGlvbl9zZWVuID0gMTsKKwkJCUFMTE9DX0dST1coc3RvcmUtPnNlZW4sIHN0b3JlLT5zZWVuX25yICsgMSwKKwkJCQkgICBzdG9yZS0+c2Vlbl9hbGxvYyk7CisJCQlzdG9yZS0+c2VlbltzdG9yZS0+c2Vlbl9ucl0gPSBzdG9yZS0+cGFyc2VkX25yOworCQl9CisJfQorCisJc3RvcmUtPnBhcnNlZF9ucisrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmVfYXV4KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSAqc3RvcmUgPSBjYjsKKworCWlmIChzdG9yZS0+a2V5X3NlZW4pIHsKKwkJaWYgKG1hdGNoZXMoa2V5LCB2YWx1ZSwgc3RvcmUpKSB7CisJCQlpZiAoc3RvcmUtPnNlZW5fbnIgPT0gMSAmJiBzdG9yZS0+bXVsdGlfcmVwbGFjZSA9PSAwKSB7CisJCQkJd2FybmluZyhfKCIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIiksIGtleSk7CisJCQl9CisKKwkJCUFMTE9DX0dST1coc3RvcmUtPnNlZW4sIHN0b3JlLT5zZWVuX25yICsgMSwKKwkJCQkgICBzdG9yZS0+c2Vlbl9hbGxvYyk7CisKKwkJCXN0b3JlLT5zZWVuW3N0b3JlLT5zZWVuX25yXSA9IHN0b3JlLT5wYXJzZWRfbnI7CisJCQlzdG9yZS0+c2Vlbl9ucisrOworCQl9CisJfSBlbHNlIGlmIChzdG9yZS0+aXNfa2V5c19zZWN0aW9uKSB7CisJCS8qCisJCSAqIERvIG5vdCBpbmNyZW1lbnQgbWF0Y2hlcyB5ZXQ6IHRoaXMgbWF5IG5vdCBiZSBhIG1hdGNoLCBidXQgd2UKKwkJICogYXJlIGluIHRoZSBkZXNpcmVkIHNlY3Rpb24uCisJCSAqLworCQlBTExPQ19HUk9XKHN0b3JlLT5zZWVuLCBzdG9yZS0+c2Vlbl9uciArIDEsIHN0b3JlLT5zZWVuX2FsbG9jKTsKKwkJc3RvcmUtPnNlZW5bc3RvcmUtPnNlZW5fbnJdID0gc3RvcmUtPnBhcnNlZF9ucjsKKwkJc3RvcmUtPnNlY3Rpb25fc2VlbiA9IDE7CisKKwkJaWYgKG1hdGNoZXMoa2V5LCB2YWx1ZSwgc3RvcmUpKSB7CisJCQlzdG9yZS0+c2Vlbl9ucisrOworCQkJc3RvcmUtPmtleV9zZWVuID0gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWVycm9yKF8oImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIiksIGZpbGVuYW1lKTsKKworCS8qIFNhbWUgZXJyb3IgY29kZSBhcyAiZmFpbGVkIHRvIHJlbmFtZSIuICovCisJcmV0dXJuIDQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHN0b3JlX2NyZWF0ZV9zZWN0aW9uKGNvbnN0IGNoYXIgKmtleSwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgY29uZmlnX3N0b3JlX2RhdGEgKnN0b3JlKQoreworCWNvbnN0IGNoYXIgKmRvdDsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlkb3QgPSBtZW1jaHIoa2V5LCAnLicsIHN0b3JlLT5iYXNlbGVuKTsKKwlpZiAoZG90KSB7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIlslLipzIFwiIiwgKGludCkoZG90IC0ga2V5KSwga2V5KTsKKwkJZm9yIChpID0gZG90IC0ga2V5ICsgMTsgaSA8IHN0b3JlLT5iYXNlbGVuOyBpKyspIHsKKwkJCWlmIChrZXlbaV0gPT0gJyInIHx8IGtleVtpXSA9PSAnXFwnKQorCQkJCXN0cmJ1Zl9hZGRjaCgmc2IsICdcXCcpOworCQkJc3RyYnVmX2FkZGNoKCZzYiwga2V5W2ldKTsKKwkJfQorCQlzdHJidWZfYWRkc3RyKCZzYiwgIlwiXVxuIik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiWyUuKnNdXG4iLCBzdG9yZS0+YmFzZWxlbiwga2V5KTsKKwl9CisKKwlyZXR1cm4gc2I7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX3NlY3Rpb24oaW50IGZkLCBjb25zdCBjaGFyICprZXksCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSAqc3RvcmUpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IHN0b3JlX2NyZWF0ZV9zZWN0aW9uKGtleSwgc3RvcmUpOworCXNzaXplX3QgcmV0OworCisJcmV0ID0gd3JpdGVfaW5fZnVsbChmZCwgc2IuYnVmLCBzYi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCB3cml0ZV9wYWlyKGludCBmZCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSAgY29uc3Qgc3RydWN0IGNvbmZpZ19zdG9yZV9kYXRhICpzdG9yZSkKK3sKKwlpbnQgaTsKKwlzc2l6ZV90IHJldDsKKwlpbnQgbGVuZ3RoID0gc3RybGVuKGtleSArIHN0b3JlLT5iYXNlbGVuICsgMSk7CisJY29uc3QgY2hhciAqcXVvdGUgPSAiIjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdmFsdWUgbmVlZHMgdG8gYmUgc3Vycm91bmRlZCB3aXRoIGEgZHEgcGFpci4KKwkgKiBOb3RlIHRoYXQgcHJvYmxlbWF0aWMgY2hhcmFjdGVycyBhcmUgYWx3YXlzIGJhY2tzbGFzaC1xdW90ZWQ7IHRoaXMKKwkgKiBjaGVjayBpcyBhYm91dCBub3QgbG9zaW5nIGxlYWRpbmcgb3IgdHJhaWxpbmcgU1AgYW5kIHN0cmluZ3MgdGhhdAorCSAqIGZvbGxvdyBiZWdpbm5pbmctb2YtY29tbWVudCBjaGFyYWN0ZXJzIChpLmUuICc7JyBhbmQgJyMnKSBieSB0aGUKKwkgKiBjb25maWd1cmF0aW9uIHBhcnNlci4KKwkgKi8KKwlpZiAodmFsdWVbMF0gPT0gJyAnKQorCQlxdW90ZSA9ICJcIiI7CisJZm9yIChpID0gMDsgdmFsdWVbaV07IGkrKykKKwkJaWYgKHZhbHVlW2ldID09ICc7JyB8fCB2YWx1ZVtpXSA9PSAnIycpCisJCQlxdW90ZSA9ICJcIiI7CisJaWYgKGkgJiYgdmFsdWVbaSAtIDFdID09ICcgJykKKwkJcXVvdGUgPSAiXCIiOworCisJc3RyYnVmX2FkZGYoJnNiLCAiXHQlLipzID0gJXMiLAorCQkgICAgbGVuZ3RoLCBrZXkgKyBzdG9yZS0+YmFzZWxlbiArIDEsIHF1b3RlKTsKKworCWZvciAoaSA9IDA7IHZhbHVlW2ldOyBpKyspCisJCXN3aXRjaCAodmFsdWVbaV0pIHsKKwkJY2FzZSAnXG4nOgorCQkJc3RyYnVmX2FkZHN0cigmc2IsICJcXG4iKTsKKwkJCWJyZWFrOworCQljYXNlICdcdCc6CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgIlxcdCIpOworCQkJYnJlYWs7CisJCWNhc2UgJyInOgorCQljYXNlICdcXCc6CisJCQlzdHJidWZfYWRkY2goJnNiLCAnXFwnKTsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkY2goJnNiLCB2YWx1ZVtpXSk7CisJCQlicmVhazsKKwkJfQorCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzXG4iLCBxdW90ZSk7CisKKwlyZXQgPSB3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJZiB3ZSBhcmUgYWJvdXQgdG8gdW5zZXQgdGhlIGxhc3Qga2V5KHMpIGluIGEgc2VjdGlvbiwgYW5kIGlmIHRoZXJlIGFyZQorICogbm8gY29tbWVudHMgc3Vycm91bmRpbmcgKG9yIGluY2x1ZGVkIGluKSB0aGUgc2VjdGlvbiwgd2Ugd2lsbCB3YW50IHRvCisgKiBleHRlbmQgYmVnaW4vZW5kIHRvIHJlbW92ZSB0aGUgZW50aXJlIHNlY3Rpb24uCisgKgorICogTm90ZTogdGhlIHBhcmFtZXRlciBgc2Vlbl9wdHJgIHBvaW50cyB0byB0aGUgaW5kZXggaW50byB0aGUgc3RvcmUuc2VlbgorICogYXJyYXkuICAqIFRoaXMgaW5kZXggbWF5IGJlIGluY3JlbWVudGVkIGlmIGEgc2VjdGlvbiBoYXMgbW9yZSB0aGFuIG9uZQorICogZW50cnkgKHdoaWNoIGFsbCBhcmUgdG8gYmUgcmVtb3ZlZCkuCisgKi8KK3N0YXRpYyB2b2lkIG1heWJlX3JlbW92ZV9zZWN0aW9uKHN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSAqc3RvcmUsCisJCQkJIHNpemVfdCAqYmVnaW5fb2Zmc2V0LCBzaXplX3QgKmVuZF9vZmZzZXQsCisJCQkJIGludCAqc2Vlbl9wdHIpCit7CisJc2l6ZV90IGJlZ2luOworCWludCBpLCBzZWVuLCBzZWN0aW9uX3NlZW4gPSAwOworCisJLyoKKwkgKiBGaXJzdCwgZW5zdXJlIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3Qga2V5LCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8KKwkgKiBjb21tZW50cyBiZWZvcmUgdGhlIGVudHJ5IG5vciBiZWZvcmUgdGhlIHNlY3Rpb24gaGVhZGVyLgorCSAqLworCXNlZW4gPSAqc2Vlbl9wdHI7CisJZm9yIChpID0gc3RvcmUtPnNlZW5bc2Vlbl07IGkgPiAwOyBpLS0pIHsKKwkJZW51bSBjb25maWdfZXZlbnRfdCB0eXBlID0gc3RvcmUtPnBhcnNlZFtpIC0gMV0udHlwZTsKKworCQlpZiAodHlwZSA9PSBDT05GSUdfRVZFTlRfQ09NTUVOVCkKKwkJCS8qIFRoZXJlIGlzIGEgY29tbWVudCBiZWZvcmUgdGhpcyBlbnRyeSBvciBzZWN0aW9uICovCisJCQlyZXR1cm47CisJCWlmICh0eXBlID09IENPTkZJR19FVkVOVF9FTlRSWSkgeworCQkJaWYgKCFzZWN0aW9uX3NlZW4pCisJCQkJLyogVGhpcyBpcyBub3QgdGhlIHNlY3Rpb24ncyBmaXJzdCBlbnRyeS4gKi8KKwkJCQlyZXR1cm47CisJCQkvKiBXZSBlbmNvdW50ZXJlZCBubyBjb21tZW50IGJlZm9yZSB0aGUgc2VjdGlvbi4gKi8KKwkJCWJyZWFrOworCQl9CisJCWlmICh0eXBlID09IENPTkZJR19FVkVOVF9TRUNUSU9OKSB7CisJCQlpZiAoIXN0b3JlLT5wYXJzZWRbaSAtIDFdLmlzX2tleXNfc2VjdGlvbikKKwkJCQlicmVhazsKKwkJCXNlY3Rpb25fc2VlbiA9IDE7CisJCX0KKwl9CisJYmVnaW4gPSBzdG9yZS0+cGFyc2VkW2ldLmJlZ2luOworCisJLyoKKwkgKiBOZXh0LCBtYWtlIHN1cmUgdGhhdCB3ZSBhcmUgcmVtb3ZpbmcgaGUgbGFzdCBrZXkocykgaW4gdGhlIHNlY3Rpb24sCisJICogYW5kIHRoYXQgdGhlcmUgYXJlIG5vIGNvbW1lbnRzIHRoYXQgYXJlIHBvc3NpYmx5IGFib3V0IHRoZSBjdXJyZW50CisJICogc2VjdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSBzdG9yZS0+c2VlbltzZWVuXSArIDE7IGkgPCBzdG9yZS0+cGFyc2VkX25yOyBpKyspIHsKKwkJZW51bSBjb25maWdfZXZlbnRfdCB0eXBlID0gc3RvcmUtPnBhcnNlZFtpXS50eXBlOworCisJCWlmICh0eXBlID09IENPTkZJR19FVkVOVF9DT01NRU5UKQorCQkJcmV0dXJuOworCQlpZiAodHlwZSA9PSBDT05GSUdfRVZFTlRfU0VDVElPTikgeworCQkJaWYgKHN0b3JlLT5wYXJzZWRbaV0uaXNfa2V5c19zZWN0aW9uKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHR5cGUgPT0gQ09ORklHX0VWRU5UX0VOVFJZKSB7CisJCQlpZiAoKytzZWVuIDwgc3RvcmUtPnNlZW5fbnIgJiYKKwkJCSAgICBpID09IHN0b3JlLT5zZWVuW3NlZW5dKQorCQkJCS8qIFdlIHdhbnQgdG8gcmVtb3ZlIHRoaXMgZW50cnksIHRvbyAqLworCQkJCWNvbnRpbnVlOworCQkJLyogVGhlcmUgaXMgYW5vdGhlciBlbnRyeSBpbiB0aGlzIHNlY3Rpb24uICovCisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGFyZSByZWFsbHkgcmVtb3ZpbmcgdGhlIGxhc3QgZW50cnkvZW50cmllcyBmcm9tIHRoaXMgc2VjdGlvbiwgYW5kCisJICogdGhlcmUgYXJlIG5vIGVuY2xvc2VkIG9yIHN1cnJvdW5kaW5nIGNvbW1lbnRzLiBSZW1vdmUgdGhlIGVudGlyZSwKKwkgKiBub3ctZW1wdHkgc2VjdGlvbi4KKwkgKi8KKwkqc2Vlbl9wdHIgPSBzZWVuOworCSpiZWdpbl9vZmZzZXQgPSBiZWdpbjsKKwlpZiAoaSA8IHN0b3JlLT5wYXJzZWRfbnIpCisJCSplbmRfb2Zmc2V0ID0gc3RvcmUtPnBhcnNlZFtpXS5iZWdpbjsKKwllbHNlCisJCSplbmRfb2Zmc2V0ID0gc3RvcmUtPnBhcnNlZFtzdG9yZS0+cGFyc2VkX25yIC0gMV0uZW5kOworfQorCitpbnQgZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lLAorCQkJCSAgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZV9nZW50bHkoY29uZmlnX2ZpbGVuYW1lLCBrZXksIHZhbHVlLCBOVUxMLCAwKTsKK30KKwordm9pZCBnaXRfY29uZmlnX3NldF9pbl9maWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSwKKwkJCSAgICBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoY29uZmlnX2ZpbGVuYW1lLCBrZXksIHZhbHVlLCBOVUxMLCAwKTsKK30KKworaW50IGdpdF9jb25maWdfc2V0X2dlbnRseShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9nZW50bHkoa2V5LCB2YWx1ZSwgTlVMTCwgMCk7Cit9CisKK3ZvaWQgZ2l0X2NvbmZpZ19zZXQoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihrZXksIHZhbHVlLCBOVUxMLCAwKTsKKworCXRyYWNlMl9jbWRfc2V0X2NvbmZpZyhrZXksIHZhbHVlKTsKK30KKworLyoKKyAqIElmIHZhbHVlPT1OVUxMLCB1bnNldCBpbiAocmVtb3ZlIGZyb20pIGNvbmZpZywKKyAqIGlmIHZhbHVlX3JlZ2V4IT1OVUxMLCBkaXNyZWdhcmQga2V5L3ZhbHVlIHBhaXJzIHdoZXJlIHZhbHVlIGRvZXMgbm90IG1hdGNoLgorICogaWYgdmFsdWVfcmVnZXg9PUNPTkZJR19SRUdFWF9OT05FLCBkbyBub3QgbWF0Y2ggYW55IGV4aXN0aW5nIHZhbHVlcworICogICAgIChvbmx5IGFkZCBhIG5ldyBvbmUpCisgKiBpZiBtdWx0aV9yZXBsYWNlPT0wLCBub3RoaW5nLCBvciBvbmx5IG9uZSBtYXRjaGluZyBrZXkvdmFsdWUgaXMgcmVwbGFjZWQsCisgKiAgICAgZWxzZSBhbGwgbWF0Y2hpbmcga2V5L3ZhbHVlcyAocmVnYXJkbGVzcyBob3cgbWFueSkgYXJlIHJlbW92ZWQsCisgKiAgICAgYmVmb3JlIHRoZSBuZXcgcGFpciBpcyB3cml0dGVuLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGlzOgorICoKKyAqIC0gaXQgbG9ja3MgdGhlIGNvbmZpZyBmaWxlIGJ5IGNyZWF0aW5nICIuZ2l0L2NvbmZpZy5sb2NrIgorICoKKyAqIC0gaXQgdGhlbiBwYXJzZXMgdGhlIGNvbmZpZyB1c2luZyBzdG9yZV9hdXgoKSBhcyB2YWxpZGF0b3IgdG8gZmluZAorICogICB0aGUgcG9zaXRpb24gb24gdGhlIGtleS92YWx1ZSBwYWlyIHRvIHJlcGxhY2UuIElmIGl0IGlzIHRvIGJlIHVuc2V0LAorICogICBpdCBtdXN0IGJlIGZvdW5kIGV4YWN0bHkgb25jZS4KKyAqCisgKiAtIHRoZSBjb25maWcgZmlsZSBpcyBtbWFwKCllZCBhbmQgdGhlIHBhcnQgYmVmb3JlIHRoZSBtYXRjaCAoaWYgYW55KSBpcworICogICB3cml0dGVuIHRvIHRoZSBsb2NrIGZpbGUsIHRoZW4gdGhlIGNoYW5nZWQgcGFydCBhbmQgdGhlIHJlc3QuCisgKgorICogLSB0aGUgY29uZmlnIGZpbGUgaXMgcmVtb3ZlZCBhbmQgdGhlIGxvY2sgZmlsZSByZW5hbWUoKWQgdG8gaXQuCisgKgorICovCitpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZV9nZW50bHkoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lLAorCQkJCQkgICBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJCQkgICBjb25zdCBjaGFyICp2YWx1ZV9yZWdleCwKKwkJCQkJICAgaW50IG11bHRpX3JlcGxhY2UpCit7CisJaW50IGZkID0gLTEsIGluX2ZkID0gLTE7CisJaW50IHJldDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CisJY2hhciAqZmlsZW5hbWVfYnVmID0gTlVMTDsKKwljaGFyICpjb250ZW50cyA9IE5VTEw7CisJc2l6ZV90IGNvbnRlbnRzX3N6OworCXN0cnVjdCBjb25maWdfc3RvcmVfZGF0YSBzdG9yZTsKKworCW1lbXNldCgmc3RvcmUsIDAsIHNpemVvZihzdG9yZSkpOworCisJLyogcGFyc2Uta2V5IHJldHVybnMgbmVnYXRpdmU7IGZsaXAgdGhlIHNpZ24gdG8gZmVlZCBleGl0KDMpICovCisJcmV0ID0gMCAtIGdpdF9jb25maWdfcGFyc2Vfa2V5KGtleSwgJnN0b3JlLmtleSwgJnN0b3JlLmJhc2VsZW4pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzdG9yZS5tdWx0aV9yZXBsYWNlID0gbXVsdGlfcmVwbGFjZTsKKworCWlmICghY29uZmlnX2ZpbGVuYW1lKQorCQljb25maWdfZmlsZW5hbWUgPSBmaWxlbmFtZV9idWYgPSBnaXRfcGF0aGR1cCgiY29uZmlnIik7CisKKwkvKgorCSAqIFRoZSBsb2NrIHNlcnZlcyBhIHB1cnBvc2UgaW4gYWRkaXRpb24gdG8gbG9ja2luZzogdGhlIG5ldworCSAqIGNvbnRlbnRzIG9mIC5naXQvY29uZmlnIHdpbGwgYmUgd3JpdHRlbiBpbnRvIGl0LgorCSAqLworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9jaywgY29uZmlnX2ZpbGVuYW1lLCAwKTsKKwlpZiAoZmQgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIiksIGNvbmZpZ19maWxlbmFtZSk7CisJCXJldCA9IENPTkZJR19OT19MT0NLOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCS8qCisJICogSWYgLmdpdC9jb25maWcgZG9lcyBub3QgZXhpc3QgeWV0LCB3cml0ZSBhIG1pbmltYWwgdmVyc2lvbi4KKwkgKi8KKwlpbl9mZCA9IG9wZW4oY29uZmlnX2ZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKCBpbl9mZCA8IDAgKSB7CisJCWlmICggRU5PRU5UICE9IGVycm5vICkgeworCQkJZXJyb3JfZXJybm8oXygib3BlbmluZyAlcyIpLCBjb25maWdfZmlsZW5hbWUpOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfRklMRTsgLyogc2FtZSBhcyAiaW52YWxpZCBjb25maWcgZmlsZSIgKi8KKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwkJLyogaWYgbm90aGluZyB0byB1bnNldCwgZXJyb3Igb3V0ICovCisJCWlmICh2YWx1ZSA9PSBOVUxMKSB7CisJCQlyZXQgPSBDT05GSUdfTk9USElOR19TRVQ7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJZnJlZShzdG9yZS5rZXkpOworCQlzdG9yZS5rZXkgPSB4c3RyZHVwKGtleSk7CisJCWlmICh3cml0ZV9zZWN0aW9uKGZkLCBrZXksICZzdG9yZSkgPCAwIHx8CisJCSAgICB3cml0ZV9wYWlyKGZkLCBrZXksIHZhbHVlLCAmc3RvcmUpIDwgMCkKKwkJCWdvdG8gd3JpdGVfZXJyX291dDsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJc2l6ZV90IGNvcHlfYmVnaW4sIGNvcHlfZW5kOworCQlpbnQgaSwgbmV3X2xpbmUgPSAwOworCQlzdHJ1Y3QgY29uZmlnX29wdGlvbnMgb3B0czsKKworCQlpZiAodmFsdWVfcmVnZXggPT0gTlVMTCkKKwkJCXN0b3JlLnZhbHVlX3JlZ2V4ID0gTlVMTDsKKwkJZWxzZSBpZiAodmFsdWVfcmVnZXggPT0gQ09ORklHX1JFR0VYX05PTkUpCisJCQlzdG9yZS52YWx1ZV9yZWdleCA9IENPTkZJR19SRUdFWF9OT05FOworCQllbHNlIHsKKwkJCWlmICh2YWx1ZV9yZWdleFswXSA9PSAnIScpIHsKKwkJCQlzdG9yZS5kb19ub3RfbWF0Y2ggPSAxOworCQkJCXZhbHVlX3JlZ2V4Kys7CisJCQl9IGVsc2UKKwkJCQlzdG9yZS5kb19ub3RfbWF0Y2ggPSAwOworCisJCQlzdG9yZS52YWx1ZV9yZWdleCA9IChyZWdleF90Kil4bWFsbG9jKHNpemVvZihyZWdleF90KSk7CisJCQlpZiAocmVnY29tcChzdG9yZS52YWx1ZV9yZWdleCwgdmFsdWVfcmVnZXgsCisJCQkJCVJFR19FWFRFTkRFRCkpIHsKKwkJCQllcnJvcihfKCJpbnZhbGlkIHBhdHRlcm46ICVzIiksIHZhbHVlX3JlZ2V4KTsKKwkJCQlGUkVFX0FORF9OVUxMKHN0b3JlLnZhbHVlX3JlZ2V4KTsKKwkJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9QQVRURVJOOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CisJCX0KKworCQlBTExPQ19HUk9XKHN0b3JlLnBhcnNlZCwgMSwgc3RvcmUucGFyc2VkX2FsbG9jKTsKKwkJc3RvcmUucGFyc2VkWzBdLmVuZCA9IDA7CisKKwkJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCQlvcHRzLmV2ZW50X2ZuID0gc3RvcmVfYXV4X2V2ZW50OworCQlvcHRzLmV2ZW50X2ZuX2RhdGEgPSAmc3RvcmU7CisKKwkJLyoKKwkJICogQWZ0ZXIgdGhpcywgc3RvcmUucGFyc2VkIHdpbGwgY29udGFpbiBvZmZzZXRzIG9mIGFsbCB0aGUKKwkJICogcGFyc2VkIGVsZW1lbnRzLCBhbmQgc3RvcmUuc2VlbiB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mCisJCSAqIG1hdGNoZXMsIGFzIGluZGljZXMgaW50byBzdG9yZS5wYXJzZWQuCisJCSAqCisJCSAqIEFzIGEgc2lkZSBlZmZlY3QsIHdlIG1ha2Ugc3VyZSB0byB0cmFuc2Zvcm0gb25seSBhIHZhbGlkCisJCSAqIGV4aXN0aW5nIGNvbmZpZyBmaWxlLgorCQkgKi8KKwkJaWYgKGdpdF9jb25maWdfZnJvbV9maWxlX3dpdGhfb3B0aW9ucyhzdG9yZV9hdXgsCisJCQkJCQkgICAgICBjb25maWdfZmlsZW5hbWUsCisJCQkJCQkgICAgICAmc3RvcmUsICZvcHRzKSkgeworCQkJZXJyb3IoXygiaW52YWxpZCBjb25maWcgZmlsZSAlcyIpLCBjb25maWdfZmlsZW5hbWUpOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfRklMRTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCQkvKiBpZiBub3RoaW5nIHRvIHVuc2V0LCBvciB0b28gbWFueSBtYXRjaGVzLCBlcnJvciBvdXQgKi8KKwkJaWYgKChzdG9yZS5zZWVuX25yID09IDAgJiYgdmFsdWUgPT0gTlVMTCkgfHwKKwkJICAgIChzdG9yZS5zZWVuX25yID4gMSAmJiBtdWx0aV9yZXBsYWNlID09IDApKSB7CisJCQlyZXQgPSBDT05GSUdfTk9USElOR19TRVQ7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJaWYgKGZzdGF0KGluX2ZkLCAmc3QpID09IC0xKSB7CisJCQllcnJvcl9lcnJubyhfKCJmc3RhdCBvbiAlcyBmYWlsZWQiKSwgY29uZmlnX2ZpbGVuYW1lKTsKKwkJCXJldCA9IENPTkZJR19JTlZBTElEX0ZJTEU7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJY29udGVudHNfc3ogPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQljb250ZW50cyA9IHhtbWFwX2dlbnRseShOVUxMLCBjb250ZW50c19zeiwgUFJPVF9SRUFELAorCQkJCQlNQVBfUFJJVkFURSwgaW5fZmQsIDApOworCQlpZiAoY29udGVudHMgPT0gTUFQX0ZBSUxFRCkgeworCQkJaWYgKGVycm5vID09IEVOT0RFViAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJCWVycm5vID0gRUlTRElSOworCQkJZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIG1tYXAgJyVzJyIpLCBjb25maWdfZmlsZW5hbWUpOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfRklMRTsKKwkJCWNvbnRlbnRzID0gTlVMTDsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwkJY2xvc2UoaW5fZmQpOworCQlpbl9mZCA9IC0xOworCisJCWlmIChjaG1vZChnZXRfbG9ja19maWxlX3BhdGgoJmxvY2spLCBzdC5zdF9tb2RlICYgMDc3NzcpIDwgMCkgeworCQkJZXJyb3JfZXJybm8oXygiY2htb2Qgb24gJXMgZmFpbGVkIiksIGdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jaykpOworCQkJcmV0ID0gQ09ORklHX05PX1dSSVRFOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCisJCWlmIChzdG9yZS5zZWVuX25yID09IDApIHsKKwkJCWlmICghc3RvcmUuc2Vlbl9hbGxvYykgeworCQkJCS8qIERpZCBub3Qgc2VlIGtleSBub3Igc2VjdGlvbiAqLworCQkJCUFMTE9DX0dST1coc3RvcmUuc2VlbiwgMSwgc3RvcmUuc2Vlbl9hbGxvYyk7CisJCQkJc3RvcmUuc2VlblswXSA9IHN0b3JlLnBhcnNlZF9ucgorCQkJCQktICEhc3RvcmUucGFyc2VkX25yOworCQkJfQorCQkJc3RvcmUuc2Vlbl9uciA9IDE7CisJCX0KKworCQlmb3IgKGkgPSAwLCBjb3B5X2JlZ2luID0gMDsgaSA8IHN0b3JlLnNlZW5fbnI7IGkrKykgeworCQkJc2l6ZV90IHJlcGxhY2VfZW5kOworCQkJaW50IGogPSBzdG9yZS5zZWVuW2ldOworCisJCQluZXdfbGluZSA9IDA7CisJCQlpZiAoIXN0b3JlLmtleV9zZWVuKSB7CisJCQkJY29weV9lbmQgPSBzdG9yZS5wYXJzZWRbal0uZW5kOworCQkJCS8qIGluY2x1ZGUgJ1xuJyB3aGVuIGNvcHlpbmcgc2VjdGlvbiBoZWFkZXIgKi8KKwkJCQlpZiAoY29weV9lbmQgPiAwICYmIGNvcHlfZW5kIDwgY29udGVudHNfc3ogJiYKKwkJCQkgICAgY29udGVudHNbY29weV9lbmQgLSAxXSAhPSAnXG4nICYmCisJCQkJICAgIGNvbnRlbnRzW2NvcHlfZW5kXSA9PSAnXG4nKQorCQkJCQljb3B5X2VuZCsrOworCQkJCXJlcGxhY2VfZW5kID0gY29weV9lbmQ7CisJCQl9IGVsc2UgeworCQkJCXJlcGxhY2VfZW5kID0gc3RvcmUucGFyc2VkW2pdLmVuZDsKKwkJCQljb3B5X2VuZCA9IHN0b3JlLnBhcnNlZFtqXS5iZWdpbjsKKwkJCQlpZiAoIXZhbHVlKQorCQkJCQltYXliZV9yZW1vdmVfc2VjdGlvbigmc3RvcmUsCisJCQkJCQkJICAgICAmY29weV9lbmQsCisJCQkJCQkJICAgICAmcmVwbGFjZV9lbmQsICZpKTsKKwkJCQkvKgorCQkJCSAqIFN3YWxsb3cgcHJlY2VkaW5nIHdoaXRlLXNwYWNlIG9uIHRoZSBzYW1lCisJCQkJICogbGluZS4KKwkJCQkgKi8KKwkJCQl3aGlsZSAoY29weV9lbmQgPiAwICkgeworCQkJCQljaGFyIGMgPSBjb250ZW50c1tjb3B5X2VuZCAtIDFdOworCisJCQkJCWlmIChpc3NwYWNlKGMpICYmIGMgIT0gJ1xuJykKKwkJCQkJCWNvcHlfZW5kLS07CisJCQkJCWVsc2UKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNvcHlfZW5kID4gMCAmJiBjb250ZW50c1tjb3B5X2VuZC0xXSAhPSAnXG4nKQorCQkJCW5ld19saW5lID0gMTsKKworCQkJLyogd3JpdGUgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGNvbmZpZyAqLworCQkJaWYgKGNvcHlfZW5kID4gY29weV9iZWdpbikgeworCQkJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBjb250ZW50cyArIGNvcHlfYmVnaW4sCisJCQkJCQkgIGNvcHlfZW5kIC0gY29weV9iZWdpbikgPCAwKQorCQkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CisJCQkJaWYgKG5ld19saW5lICYmCisJCQkJICAgIHdyaXRlX3N0cl9pbl9mdWxsKGZkLCAiXG4iKSA8IDApCisJCQkJCWdvdG8gd3JpdGVfZXJyX291dDsKKwkJCX0KKwkJCWNvcHlfYmVnaW4gPSByZXBsYWNlX2VuZDsKKwkJfQorCisJCS8qIHdyaXRlIHRoZSBwYWlyICh2YWx1ZSA9PSBOVUxMIG1lYW5zIHVuc2V0KSAqLworCQlpZiAodmFsdWUgIT0gTlVMTCkgeworCQkJaWYgKCFzdG9yZS5zZWN0aW9uX3NlZW4pIHsKKwkJCQlpZiAod3JpdGVfc2VjdGlvbihmZCwga2V5LCAmc3RvcmUpIDwgMCkKKwkJCQkJZ290byB3cml0ZV9lcnJfb3V0OworCQkJfQorCQkJaWYgKHdyaXRlX3BhaXIoZmQsIGtleSwgdmFsdWUsICZzdG9yZSkgPCAwKQorCQkJCWdvdG8gd3JpdGVfZXJyX291dDsKKwkJfQorCisJCS8qIHdyaXRlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgKi8KKwkJaWYgKGNvcHlfYmVnaW4gPCBjb250ZW50c19zeikKKwkJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBjb250ZW50cyArIGNvcHlfYmVnaW4sCisJCQkJCSAgY29udGVudHNfc3ogLSBjb3B5X2JlZ2luKSA8IDApCisJCQkJZ290byB3cml0ZV9lcnJfb3V0OworCisJCW11bm1hcChjb250ZW50cywgY29udGVudHNfc3opOworCQljb250ZW50cyA9IE5VTEw7CisJfQorCisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJmxvY2spIDwgMCkgeworCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiKSwgY29uZmlnX2ZpbGVuYW1lKTsKKwkJcmV0ID0gQ09ORklHX05PX1dSSVRFOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJldCA9IDA7CisKKwkvKiBJbnZhbGlkYXRlIHRoZSBjb25maWcgY2FjaGUgKi8KKwlnaXRfY29uZmlnX2NsZWFyKCk7CisKK291dF9mcmVlOgorCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJZnJlZShmaWxlbmFtZV9idWYpOworCWlmIChjb250ZW50cykKKwkJbXVubWFwKGNvbnRlbnRzLCBjb250ZW50c19zeik7CisJaWYgKGluX2ZkID49IDApCisJCWNsb3NlKGluX2ZkKTsKKwljb25maWdfc3RvcmVfZGF0YV9jbGVhcigmc3RvcmUpOworCXJldHVybiByZXQ7CisKK3dyaXRlX2Vycl9vdXQ6CisJcmV0ID0gd3JpdGVfZXJyb3IoZ2V0X2xvY2tfZmlsZV9wYXRoKCZsb2NrKSk7CisJZ290byBvdXRfZnJlZTsKKworfQorCit2b2lkIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lLAorCQkJCSAgICAgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlX3JlZ2V4LCBpbnQgbXVsdGlfcmVwbGFjZSkKK3sKKwlpZiAoIWdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KGNvbmZpZ19maWxlbmFtZSwga2V5LCB2YWx1ZSwKKwkJCQkJCSAgICB2YWx1ZV9yZWdleCwgbXVsdGlfcmVwbGFjZSkpCisJCXJldHVybjsKKwlpZiAodmFsdWUpCisJCWRpZShfKCJjb3VsZCBub3Qgc2V0ICclcycgdG8gJyVzJyIpLCBrZXksIHZhbHVlKTsKKwllbHNlCisJCWRpZShfKCJjb3VsZCBub3QgdW5zZXQgJyVzJyIpLCBrZXkpOworfQorCitpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfZ2VudGx5KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkJICAgY29uc3QgY2hhciAqdmFsdWVfcmVnZXgsIGludCBtdWx0aV9yZXBsYWNlKQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShOVUxMLCBrZXksIHZhbHVlLCB2YWx1ZV9yZWdleCwKKwkJCQkJCSAgICAgIG11bHRpX3JlcGxhY2UpOworfQorCit2b2lkIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlX3JlZ2V4LCBpbnQgbXVsdGlfcmVwbGFjZSkKK3sKKwlnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKE5VTEwsIGtleSwgdmFsdWUsIHZhbHVlX3JlZ2V4LAorCQkJCQltdWx0aV9yZXBsYWNlKTsKK30KKworc3RhdGljIGludCBzZWN0aW9uX25hbWVfbWF0Y2ggKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaSA9IDAsIGogPSAwLCBkb3QgPSAwOworCWlmIChidWZbaV0gIT0gJ1snKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAxOyBidWZbaV0gJiYgYnVmW2ldICE9ICddJzsgaSsrKSB7CisJCWlmICghZG90ICYmIGlzc3BhY2UoYnVmW2ldKSkgeworCQkJZG90ID0gMTsKKwkJCWlmIChuYW1lW2orK10gIT0gJy4nKQorCQkJCWJyZWFrOworCQkJZm9yIChpKys7IGlzc3BhY2UoYnVmW2ldKTsgaSsrKQorCQkJCTsgLyogZG8gbm90aGluZyAqLworCQkJaWYgKGJ1ZltpXSAhPSAnIicpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYnVmW2ldID09ICdcXCcgJiYgZG90KQorCQkJaSsrOworCQllbHNlIGlmIChidWZbaV0gPT0gJyInICYmIGRvdCkgeworCQkJZm9yIChpKys7IGlzc3BhY2UoYnVmW2ldKTsgaSsrKQorCQkJCTsgLyogZG9fbm90aGluZyAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGJ1ZltpXSAhPSBuYW1lW2orK10pCisJCQlicmVhazsKKwl9CisJaWYgKGJ1ZltpXSA9PSAnXScgJiYgbmFtZVtqXSA9PSAwKSB7CisJCS8qCisJCSAqIFdlIG1hdGNoLCBub3cganVzdCBmaW5kIHRoZSByaWdodCBsZW5ndGggb2Zmc2V0IGJ5CisJCSAqIGdvYmJsaW5nIHVwIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0LCBhcyB3ZWxsCisJCSAqLworCQlpKys7CisJCWZvciAoOyBidWZbaV0gJiYgaXNzcGFjZShidWZbaV0pOyBpKyspCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJcmV0dXJuIGk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlY3Rpb25fbmFtZV9pc19vayhjb25zdCBjaGFyICpuYW1lKQoreworCS8qIEVtcHR5IHNlY3Rpb24gbmFtZXMgYXJlIGJvZ3VzLiAqLworCWlmICghKm5hbWUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBCZWZvcmUgYSBkb3QsIHdlIG11c3QgYmUgYWxwaGFudW1lcmljIG9yIGRhc2guIEFmdGVyIHRoZSBmaXJzdCBkb3QsCisJICogYW55dGhpbmcgZ29lcywgc28gd2UgY2FuIHN0b3AgY2hlY2tpbmcuCisJICovCisJZm9yICg7ICpuYW1lICYmICpuYW1lICE9ICcuJzsgbmFtZSsrKQorCQlpZiAoKm5hbWUgIT0gJy0nICYmICFpc2FsbnVtKCpuYW1lKSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKiBpZiBuZXdfbmFtZSA9PSBOVUxMLCB0aGUgc2VjdGlvbiBpcyByZW1vdmVkIGluc3RlYWQgKi8KK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19jb3B5X29yX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5ld19uYW1lLCBpbnQgY29weSkKK3sKKwlpbnQgcmV0ID0gMCwgcmVtb3ZlID0gMDsKKwljaGFyICpmaWxlbmFtZV9idWYgPSBOVUxMOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwlpbnQgb3V0X2ZkOworCWNoYXIgYnVmWzEwMjRdOworCUZJTEUgKmNvbmZpZ19maWxlID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvcHlzdHIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29uZmlnX3N0b3JlX2RhdGEgc3RvcmU7CisKKwltZW1zZXQoJnN0b3JlLCAwLCBzaXplb2Yoc3RvcmUpKTsKKworCWlmIChuZXdfbmFtZSAmJiAhc2VjdGlvbl9uYW1lX2lzX29rKG5ld19uYW1lKSkgeworCQlyZXQgPSBlcnJvcihfKCJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiKSwgbmV3X25hbWUpOworCQlnb3RvIG91dF9ub19yb2xsYmFjazsKKwl9CisKKwlpZiAoIWNvbmZpZ19maWxlbmFtZSkKKwkJY29uZmlnX2ZpbGVuYW1lID0gZmlsZW5hbWVfYnVmID0gZ2l0X3BhdGhkdXAoImNvbmZpZyIpOworCisJb3V0X2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9jaywgY29uZmlnX2ZpbGVuYW1lLCAwKTsKKwlpZiAob3V0X2ZkIDwgMCkgeworCQlyZXQgPSBlcnJvcihfKCJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIpLCBjb25maWdfZmlsZW5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIShjb25maWdfZmlsZSA9IGZvcGVuKGNvbmZpZ19maWxlbmFtZSwgInJiIikpKSB7CisJCXJldCA9IHdhcm5fb25fZm9wZW5fZXJyb3JzKGNvbmZpZ19maWxlbmFtZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwkJLyogbm8gY29uZmlnIGZpbGUgbWVhbnMgbm90aGluZyB0byByZW5hbWUsIG5vIGVycm9yICovCisJCWdvdG8gY29tbWl0X2FuZF9vdXQ7CisJfQorCisJaWYgKGZzdGF0KGZpbGVubyhjb25maWdfZmlsZSksICZzdCkgPT0gLTEpIHsKKwkJcmV0ID0gZXJyb3JfZXJybm8oXygiZnN0YXQgb24gJXMgZmFpbGVkIiksIGNvbmZpZ19maWxlbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjaG1vZChnZXRfbG9ja19maWxlX3BhdGgoJmxvY2spLCBzdC5zdF9tb2RlICYgMDc3NzcpIDwgMCkgeworCQlyZXQgPSBlcnJvcl9lcnJubyhfKCJjaG1vZCBvbiAlcyBmYWlsZWQiKSwKKwkJCQkgIGdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jaykpOworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgY29uZmlnX2ZpbGUpKSB7CisJCWludCBpOworCQlpbnQgbGVuZ3RoOworCQlpbnQgaXNfc2VjdGlvbiA9IDA7CisJCWNoYXIgKm91dHB1dCA9IGJ1ZjsKKwkJZm9yIChpID0gMDsgYnVmW2ldICYmIGlzc3BhY2UoYnVmW2ldKTsgaSsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCWlmIChidWZbaV0gPT0gJ1snKSB7CisJCQkvKiBpdCdzIGEgc2VjdGlvbiAqLworCQkJaW50IG9mZnNldDsKKwkJCWlzX3NlY3Rpb24gPSAxOworCisJCQkvKgorCQkJICogV2hlbiBlbmNvdW50ZXJpbmcgYSBuZXcgc2VjdGlvbiB1bmRlciAtYyB3ZQorCQkJICogbmVlZCB0byBmbHVzaCBvdXQgYW55IHNlY3Rpb24gd2UncmUgYWxyZWFkeQorCQkJICogY29waW5nIGFuZCBiZWdpbiBhbmV3LiBUaGVyZSBtaWdodCBiZQorCQkJICogbXVsdGlwbGUgW2JyYW5jaCAiJG5hbWUiXSBzZWN0aW9ucy4KKwkJCSAqLworCQkJaWYgKGNvcHlzdHIubGVuID4gMCkgeworCQkJCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgY29weXN0ci5idWYsIGNvcHlzdHIubGVuKSA8IDApIHsKKwkJCQkJcmV0ID0gd3JpdGVfZXJyb3IoZ2V0X2xvY2tfZmlsZV9wYXRoKCZsb2NrKSk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQlzdHJidWZfcmVzZXQoJmNvcHlzdHIpOworCQkJfQorCisJCQlvZmZzZXQgPSBzZWN0aW9uX25hbWVfbWF0Y2goJmJ1ZltpXSwgb2xkX25hbWUpOworCQkJaWYgKG9mZnNldCA+IDApIHsKKwkJCQlyZXQrKzsKKwkJCQlpZiAobmV3X25hbWUgPT0gTlVMTCkgeworCQkJCQlyZW1vdmUgPSAxOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJc3RvcmUuYmFzZWxlbiA9IHN0cmxlbihuZXdfbmFtZSk7CisJCQkJaWYgKCFjb3B5KSB7CisJCQkJCWlmICh3cml0ZV9zZWN0aW9uKG91dF9mZCwgbmV3X25hbWUsICZzdG9yZSkgPCAwKSB7CisJCQkJCQlyZXQgPSB3cml0ZV9lcnJvcihnZXRfbG9ja19maWxlX3BhdGgoJmxvY2spKTsKKwkJCQkJCWdvdG8gb3V0OworCQkJCQl9CisJCQkJCS8qCisJCQkJCSAqIFdlIHdyb3RlIG91dCB0aGUgbmV3IHNlY3Rpb24sIHdpdGgKKwkJCQkJICogYSBuZXdsaW5lLCBub3cgc2tpcCB0aGUgb2xkCisJCQkJCSAqIHNlY3Rpb24ncyBsZW5ndGgKKwkJCQkJICovCisJCQkJCW91dHB1dCArPSBvZmZzZXQgKyBpOworCQkJCQlpZiAoc3RybGVuKG91dHB1dCkgPiAwKSB7CisJCQkJCQkvKgorCQkJCQkJICogTW9yZSBjb250ZW50IG1lYW5zIHRoZXJlJ3MKKwkJCQkJCSAqIGEgZGVjbGFyYXRpb24gdG8gcHV0IG9uIHRoZQorCQkJCQkJICogbmV4dCBsaW5lOyBpbmRlbnQgd2l0aCBhCisJCQkJCQkgKiB0YWIKKwkJCQkJCSAqLworCQkJCQkJb3V0cHV0IC09IDE7CisJCQkJCQlvdXRwdXRbMF0gPSAnXHQnOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJY29weXN0ciA9IHN0b3JlX2NyZWF0ZV9zZWN0aW9uKG5ld19uYW1lLCAmc3RvcmUpOworCQkJCX0KKwkJCX0KKwkJCXJlbW92ZSA9IDA7CisJCX0KKwkJaWYgKHJlbW92ZSkKKwkJCWNvbnRpbnVlOworCQlsZW5ndGggPSBzdHJsZW4ob3V0cHV0KTsKKworCQlpZiAoIWlzX3NlY3Rpb24gJiYgY29weXN0ci5sZW4gPiAwKSB7CisJCQlzdHJidWZfYWRkKCZjb3B5c3RyLCBvdXRwdXQsIGxlbmd0aCk7CisJCX0KKworCQlpZiAod3JpdGVfaW5fZnVsbChvdXRfZmQsIG91dHB1dCwgbGVuZ3RoKSA8IDApIHsKKwkJCXJldCA9IHdyaXRlX2Vycm9yKGdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jaykpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIENvcHkgYSB0cmFpbGluZyBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZywgd29uJ3QgYmUKKwkgKiBmbHVzaGVkIGJ5IHRoZSB1c3VhbCAiZmx1c2ggYmVjYXVzZSB3ZSBoYXZlIGEgbmV3IHNlY3Rpb24KKwkgKiBsb2dpYyBpbiB0aGUgbG9vcCBhYm92ZS4KKwkgKi8KKwlpZiAoY29weXN0ci5sZW4gPiAwKSB7CisJCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgY29weXN0ci5idWYsIGNvcHlzdHIubGVuKSA8IDApIHsKKwkJCXJldCA9IHdyaXRlX2Vycm9yKGdldF9sb2NrX2ZpbGVfcGF0aCgmbG9jaykpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RyYnVmX3Jlc2V0KCZjb3B5c3RyKTsKKwl9CisKKwlmY2xvc2UoY29uZmlnX2ZpbGUpOworCWNvbmZpZ19maWxlID0gTlVMTDsKK2NvbW1pdF9hbmRfb3V0OgorCWlmIChjb21taXRfbG9ja19maWxlKCZsb2NrKSA8IDApCisJCXJldCA9IGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIpLAorCQkJCSAgY29uZmlnX2ZpbGVuYW1lKTsKK291dDoKKwlpZiAoY29uZmlnX2ZpbGUpCisJCWZjbG9zZShjb25maWdfZmlsZSk7CisJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKK291dF9ub19yb2xsYmFjazoKKwlmcmVlKGZpbGVuYW1lX2J1Zik7CisJY29uZmlnX3N0b3JlX2RhdGFfY2xlYXIoJnN0b3JlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbl9pbl9maWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpvbGRfbmFtZSwgY29uc3QgY2hhciAqbmV3X25hbWUpCit7CisJcmV0dXJuIGdpdF9jb25maWdfY29weV9vcl9yZW5hbWVfc2VjdGlvbl9pbl9maWxlKGNvbmZpZ19maWxlbmFtZSwKKwkJCQkJIG9sZF9uYW1lLCBuZXdfbmFtZSwgMCk7Cit9CisKK2ludCBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbl9pbl9maWxlKE5VTEwsIG9sZF9uYW1lLCBuZXdfbmFtZSk7Cit9CisKK2ludCBnaXRfY29uZmlnX2NvcHlfc2VjdGlvbl9pbl9maWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpvbGRfbmFtZSwgY29uc3QgY2hhciAqbmV3X25hbWUpCit7CisJcmV0dXJuIGdpdF9jb25maWdfY29weV9vcl9yZW5hbWVfc2VjdGlvbl9pbl9maWxlKGNvbmZpZ19maWxlbmFtZSwKKwkJCQkJIG9sZF9uYW1lLCBuZXdfbmFtZSwgMSk7Cit9CisKK2ludCBnaXRfY29uZmlnX2NvcHlfc2VjdGlvbihjb25zdCBjaGFyICpvbGRfbmFtZSwgY29uc3QgY2hhciAqbmV3X25hbWUpCit7CisJcmV0dXJuIGdpdF9jb25maWdfY29weV9zZWN0aW9uX2luX2ZpbGUoTlVMTCwgb2xkX25hbWUsIG5ld19uYW1lKTsKK30KKworLyoKKyAqIENhbGwgdGhpcyB0byByZXBvcnQgZXJyb3IgZm9yIHlvdXIgdmFyaWFibGUgdGhhdCBzaG91bGQgbm90CisgKiBnZXQgYSBib29sZWFuIHZhbHVlIChpLmUuICJbbXldIHZhciIgbWVhbnMgInRydWUiKS4KKyAqLworI3VuZGVmIGNvbmZpZ19lcnJvcl9ub25ib29sCitpbnQgY29uZmlnX2Vycm9yX25vbmJvb2woY29uc3QgY2hhciAqdmFyKQoreworCXJldHVybiBlcnJvcihfKCJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIiksIHZhcik7Cit9CisKK2ludCBwYXJzZV9jb25maWdfa2V5KGNvbnN0IGNoYXIgKnZhciwKKwkJICAgICBjb25zdCBjaGFyICpzZWN0aW9uLAorCQkgICAgIGNvbnN0IGNoYXIgKipzdWJzZWN0aW9uLCBpbnQgKnN1YnNlY3Rpb25fbGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKiprZXkpCit7CisJY29uc3QgY2hhciAqZG90OworCisJLyogRG9lcyBpdCBzdGFydCB3aXRoICJzZWN0aW9uLiIgPyAqLworCWlmICghc2tpcF9wcmVmaXgodmFyLCBzZWN0aW9uLCAmdmFyKSB8fCAqdmFyICE9ICcuJykKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBGaW5kIHRoZSBrZXk7IHdlIGRvbid0IGtub3cgeWV0IGlmIHdlIGhhdmUgYSBzdWJzZWN0aW9uLCBidXQgd2UgbXVzdAorCSAqIHBhcnNlIGJhY2t3YXJkcyBmcm9tIHRoZSBlbmQsIHNpbmNlIHRoZSBzdWJzZWN0aW9uIG1heSBoYXZlIGRvdHMgaW4KKwkgKiBpdCwgdG9vLgorCSAqLworCWRvdCA9IHN0cnJjaHIodmFyLCAnLicpOworCSprZXkgPSBkb3QgKyAxOworCisJLyogRGlkIHdlIGhhdmUgYSBzdWJzZWN0aW9uIGF0IGFsbD8gKi8KKwlpZiAoZG90ID09IHZhcikgeworCQlpZiAoc3Vic2VjdGlvbikgeworCQkJKnN1YnNlY3Rpb24gPSBOVUxMOworCQkJKnN1YnNlY3Rpb25fbGVuID0gMDsKKwkJfQorCX0KKwllbHNlIHsKKwkJaWYgKCFzdWJzZWN0aW9uKQorCQkJcmV0dXJuIC0xOworCQkqc3Vic2VjdGlvbiA9IHZhciArIDE7CisJCSpzdWJzZWN0aW9uX2xlbiA9IGRvdCAtICpzdWJzZWN0aW9uOworCX0KKworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpjdXJyZW50X2NvbmZpZ19vcmlnaW5fdHlwZSh2b2lkKQoreworCWludCB0eXBlOworCWlmIChjdXJyZW50X2NvbmZpZ19rdmkpCisJCXR5cGUgPSBjdXJyZW50X2NvbmZpZ19rdmktPm9yaWdpbl90eXBlOworCWVsc2UgaWYoY2YpCisJCXR5cGUgPSBjZi0+b3JpZ2luX3R5cGU7CisJZWxzZQorCQlCVUcoImN1cnJlbnRfY29uZmlnX29yaWdpbl90eXBlIGNhbGxlZCBvdXRzaWRlIGNvbmZpZyBjYWxsYmFjayIpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBDT05GSUdfT1JJR0lOX0JMT0I6CisJCXJldHVybiAiYmxvYiI7CisJY2FzZSBDT05GSUdfT1JJR0lOX0ZJTEU6CisJCXJldHVybiAiZmlsZSI7CisJY2FzZSBDT05GSUdfT1JJR0lOX1NURElOOgorCQlyZXR1cm4gInN0YW5kYXJkIGlucHV0IjsKKwljYXNlIENPTkZJR19PUklHSU5fU1VCTU9EVUxFX0JMT0I6CisJCXJldHVybiAic3VibW9kdWxlLWJsb2IiOworCWNhc2UgQ09ORklHX09SSUdJTl9DTURMSU5FOgorCQlyZXR1cm4gImNvbW1hbmQgbGluZSI7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmtub3duIGNvbmZpZyBvcmlnaW4gdHlwZSIpOworCX0KK30KKworY29uc3QgY2hhciAqY29uZmlnX3Njb3BlX25hbWUoZW51bSBjb25maWdfc2NvcGUgc2NvcGUpCit7CisJc3dpdGNoIChzY29wZSkgeworCWNhc2UgQ09ORklHX1NDT1BFX1NZU1RFTToKKwkJcmV0dXJuICJzeXN0ZW0iOworCWNhc2UgQ09ORklHX1NDT1BFX0dMT0JBTDoKKwkJcmV0dXJuICJnbG9iYWwiOworCWNhc2UgQ09ORklHX1NDT1BFX0xPQ0FMOgorCQlyZXR1cm4gImxvY2FsIjsKKwljYXNlIENPTkZJR19TQ09QRV9XT1JLVFJFRToKKwkJcmV0dXJuICJ3b3JrdHJlZSI7CisJY2FzZSBDT05GSUdfU0NPUEVfQ09NTUFORDoKKwkJcmV0dXJuICJjb21tYW5kIjsKKwljYXNlIENPTkZJR19TQ09QRV9TVUJNT0RVTEU6CisJCXJldHVybiAic3VibW9kdWxlIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24iOworCX0KK30KKworY29uc3QgY2hhciAqY3VycmVudF9jb25maWdfbmFtZSh2b2lkKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJaWYgKGN1cnJlbnRfY29uZmlnX2t2aSkKKwkJbmFtZSA9IGN1cnJlbnRfY29uZmlnX2t2aS0+ZmlsZW5hbWU7CisJZWxzZSBpZiAoY2YpCisJCW5hbWUgPSBjZi0+bmFtZTsKKwllbHNlCisJCUJVRygiY3VycmVudF9jb25maWdfbmFtZSBjYWxsZWQgb3V0c2lkZSBjb25maWcgY2FsbGJhY2siKTsKKwlyZXR1cm4gbmFtZSA/IG5hbWUgOiAiIjsKK30KKworZW51bSBjb25maWdfc2NvcGUgY3VycmVudF9jb25maWdfc2NvcGUodm9pZCkKK3sKKwlpZiAoY3VycmVudF9jb25maWdfa3ZpKQorCQlyZXR1cm4gY3VycmVudF9jb25maWdfa3ZpLT5zY29wZTsKKwllbHNlCisJCXJldHVybiBjdXJyZW50X3BhcnNpbmdfc2NvcGU7Cit9CisKK2ludCBjdXJyZW50X2NvbmZpZ19saW5lKHZvaWQpCit7CisJaWYgKGN1cnJlbnRfY29uZmlnX2t2aSkKKwkJcmV0dXJuIGN1cnJlbnRfY29uZmlnX2t2aS0+bGluZW5yOworCWVsc2UKKwkJcmV0dXJuIGNmLT5saW5lbnI7Cit9CisKK2ludCBsb29rdXBfY29uZmlnKGNvbnN0IGNoYXIgKiptYXBwaW5nLCBpbnQgbnJfbWFwcGluZywgY29uc3QgY2hhciAqdmFyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX21hcHBpbmc7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gbWFwcGluZ1tpXTsKKworCQlpZiAobmFtZSAmJiAhc3RyY2FzZWNtcCh2YXIsIG5hbWUpKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2NvbmZpZy5oIGIvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzNzczZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5oCkBAIC0wLDAgKzEsNjIwIEBACisjaWZuZGVmIENPTkZJR19ICisjZGVmaW5lIENPTkZJR19ICisKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworCisvKioKKyAqIFRoZSBjb25maWcgQVBJIGdpdmVzIGNhbGxlcnMgYSB3YXkgdG8gYWNjZXNzIEdpdCBjb25maWd1cmF0aW9uIGZpbGVzCisgKiAoYW5kIGZpbGVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgc3ludGF4KS4KKyAqCisgKiBHZW5lcmFsIFVzYWdlCisgKiAtLS0tLS0tLS0tLS0tCisgKgorICogQ29uZmlnIGZpbGVzIGFyZSBwYXJzZWQgbGluZWFybHksIGFuZCBlYWNoIHZhcmlhYmxlIGZvdW5kIGlzIHBhc3NlZCB0byBhCisgKiBjYWxsZXItcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyByZXNwb25zaWJsZQorICogZm9yIGFueSBhY3Rpb25zIHRvIGJlIHRha2VuIG9uIHRoZSBjb25maWcgb3B0aW9uLCBhbmQgaXMgZnJlZSB0byBpZ25vcmUKKyAqIHNvbWUgb3B0aW9ucy4gSXQgaXMgbm90IHVuY29tbW9uIGZvciB0aGUgY29uZmlndXJhdGlvbiB0byBiZSBwYXJzZWQKKyAqIHNldmVyYWwgdGltZXMgZHVyaW5nIHRoZSBydW4gb2YgYSBHaXQgcHJvZ3JhbSwgd2l0aCBkaWZmZXJlbnQgY2FsbGJhY2tzCisgKiBwaWNraW5nIG91dCBkaWZmZXJlbnQgdmFyaWFibGVzIHVzZWZ1bCB0byB0aGVtc2VsdmVzLgorICovCisKK3N0cnVjdCBvYmplY3RfaWQ7CisKKy8qIGdpdF9jb25maWdfcGFyc2Vfa2V5KCkgcmV0dXJucyB0aGVzZSBuZWdhdGVkOiAqLworI2RlZmluZSBDT05GSUdfSU5WQUxJRF9LRVkgMQorI2RlZmluZSBDT05GSUdfTk9fU0VDVElPTl9PUl9OQU1FIDIKKy8qIGdpdF9jb25maWdfc2V0X2dlbnRseSgpLCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9nZW50bHkoKSByZXR1cm4gdGhlIGFib3ZlIG9yIHRoZXNlOiAqLworI2RlZmluZSBDT05GSUdfTk9fTE9DSyAtMQorI2RlZmluZSBDT05GSUdfSU5WQUxJRF9GSUxFIDMKKyNkZWZpbmUgQ09ORklHX05PX1dSSVRFIDQKKyNkZWZpbmUgQ09ORklHX05PVEhJTkdfU0VUIDUKKyNkZWZpbmUgQ09ORklHX0lOVkFMSURfUEFUVEVSTiA2CisjZGVmaW5lIENPTkZJR19HRU5FUklDX0VSUk9SIDcKKworI2RlZmluZSBDT05GSUdfUkVHRVhfTk9ORSAoKHZvaWQgKikxKQorCitlbnVtIGNvbmZpZ19zY29wZSB7CisJQ09ORklHX1NDT1BFX1VOS05PV04gPSAwLAorCUNPTkZJR19TQ09QRV9TWVNURU0sCisJQ09ORklHX1NDT1BFX0dMT0JBTCwKKwlDT05GSUdfU0NPUEVfTE9DQUwsCisJQ09ORklHX1NDT1BFX1dPUktUUkVFLAorCUNPTkZJR19TQ09QRV9DT01NQU5ELAorCUNPTkZJR19TQ09QRV9TVUJNT0RVTEUsCit9OworY29uc3QgY2hhciAqY29uZmlnX3Njb3BlX25hbWUoZW51bSBjb25maWdfc2NvcGUgc2NvcGUpOworCitzdHJ1Y3QgZ2l0X2NvbmZpZ19zb3VyY2UgeworCXVuc2lnbmVkIGludCB1c2Vfc3RkaW46MTsKKwljb25zdCBjaGFyICpmaWxlOworCWNvbnN0IGNoYXIgKmJsb2I7CisJZW51bSBjb25maWdfc2NvcGUgc2NvcGU7Cit9OworCitlbnVtIGNvbmZpZ19vcmlnaW5fdHlwZSB7CisJQ09ORklHX09SSUdJTl9CTE9CLAorCUNPTkZJR19PUklHSU5fRklMRSwKKwlDT05GSUdfT1JJR0lOX1NURElOLAorCUNPTkZJR19PUklHSU5fU1VCTU9EVUxFX0JMT0IsCisJQ09ORklHX09SSUdJTl9DTURMSU5FCit9OworCitlbnVtIGNvbmZpZ19ldmVudF90IHsKKwlDT05GSUdfRVZFTlRfU0VDVElPTiwKKwlDT05GSUdfRVZFTlRfRU5UUlksCisJQ09ORklHX0VWRU5UX1dISVRFU1BBQ0UsCisJQ09ORklHX0VWRU5UX0NPTU1FTlQsCisJQ09ORklHX0VWRU5UX0VPRiwKKwlDT05GSUdfRVZFTlRfRVJST1IKK307CisKKy8qCisgKiBUaGUgcGFyc2VyIGV2ZW50IGZ1bmN0aW9uIChpZiBub3QgTlVMTCkgaXMgY2FsbGVkIHdpdGggdGhlIGV2ZW50IHR5cGUgYW5kCisgKiB0aGUgYmVnaW4vZW5kIG9mZnNldHMgb2YgdGhlIHBhcnNlZCBlbGVtZW50cy4KKyAqCisgKiBOb3RlOiBmb3IgQ09ORklHX0VWRU5UX0VOVFJZIChpLmUuIGNvbmZpZyB2YXJpYWJsZXMpLCB0aGUgdHJhaWxpbmcgbmV3bGluZQorICogY2hhcmFjdGVyIGlzIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgZWxlbWVudC4KKyAqLwordHlwZWRlZiBpbnQgKCpjb25maWdfcGFyc2VyX2V2ZW50X2ZuX3QpKGVudW0gY29uZmlnX2V2ZW50X3QgdHlwZSwKKwkJCQkJc2l6ZV90IGJlZ2luX29mZnNldCwgc2l6ZV90IGVuZF9vZmZzZXQsCisJCQkJCXZvaWQgKmV2ZW50X2ZuX2RhdGEpOworCitzdHJ1Y3QgY29uZmlnX29wdGlvbnMgeworCXVuc2lnbmVkIGludCByZXNwZWN0X2luY2x1ZGVzIDogMTsKKwl1bnNpZ25lZCBpbnQgaWdub3JlX3JlcG8gOiAxOworCXVuc2lnbmVkIGludCBpZ25vcmVfd29ya3RyZWUgOiAxOworCXVuc2lnbmVkIGludCBpZ25vcmVfY21kbGluZSA6IDE7CisJdW5zaWduZWQgaW50IHN5c3RlbV9nZW50bHkgOiAxOworCWNvbnN0IGNoYXIgKmNvbW1vbmRpcjsKKwljb25zdCBjaGFyICpnaXRfZGlyOworCWNvbmZpZ19wYXJzZXJfZXZlbnRfZm5fdCBldmVudF9mbjsKKwl2b2lkICpldmVudF9mbl9kYXRhOworCWVudW0gY29uZmlnX2Vycm9yX2FjdGlvbiB7CisJCUNPTkZJR19FUlJPUl9VTlNFVCA9IDAsIC8qIHVzZSBzb3VyY2Utc3BlY2lmaWMgZGVmYXVsdCAqLworCQlDT05GSUdfRVJST1JfRElFLCAvKiBkaWUoKSBvbiBlcnJvciAqLworCQlDT05GSUdfRVJST1JfRVJST1IsIC8qIGVycm9yKCkgb24gZXJyb3IsIHJldHVybiAtMSAqLworCQlDT05GSUdfRVJST1JfU0lMRU5ULCAvKiByZXR1cm4gLTEgKi8KKwl9IGVycm9yX2FjdGlvbjsKK307CisKKy8qKgorICogQSBjb25maWcgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgdGhyZWUgcGFyYW1ldGVyczoKKyAqCisgKiAtIHRoZSBuYW1lIG9mIHRoZSBwYXJzZWQgdmFyaWFibGUuIFRoaXMgaXMgaW4gY2Fub25pY2FsICJmbGF0IiBmb3JtOiB0aGUKKyAqICAgc2VjdGlvbiwgc3Vic2VjdGlvbiwgYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgc2VwYXJhdGVkIGJ5IGRvdHMsCisgKiAgIGFuZCB0aGUgc2VjdGlvbiBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBhbGwgbG93ZXJjYXNlLiBFLmcuLAorICogICBgY29yZS5pZ25vcmVjYXNlYCwgYGRpZmYuU29tZVR5cGUudGV4dGNvbnZgLgorICoKKyAqIC0gdGhlIHZhbHVlIG9mIHRoZSBmb3VuZCB2YXJpYWJsZSwgYXMgYSBzdHJpbmcuIElmIHRoZSB2YXJpYWJsZSBoYWQgbm8KKyAqICAgdmFsdWUgc3BlY2lmaWVkLCB0aGUgdmFsdWUgd2lsbCBiZSBOVUxMICh0eXBpY2FsbHkgdGhpcyBtZWFucyBpdAorICogICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYm9vbGVhbiB0cnVlKS4KKyAqCisgKiAtIGEgdm9pZCBwb2ludGVyIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyIG9mIHRoZSBjb25maWcgQVBJOyB0aGlzIGNhbgorICogICBjb250YWluIGNhbGxiYWNrLXNwZWNpZmljIGRhdGEKKyAqCisgKiBBIGNvbmZpZyBjYWxsYmFjayBzaG91bGQgcmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIG9yIC0xIGlmIHRoZSB2YXJpYWJsZQorICogY291bGQgbm90IGJlIHBhcnNlZCBwcm9wZXJseS4KKyAqLwordHlwZWRlZiBpbnQgKCpjb25maWdfZm5fdCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisKK2ludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisKKy8qKgorICogUmVhZCBhIHNwZWNpZmljIGZpbGUgaW4gZ2l0LWNvbmZpZyBmb3JtYXQuCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBzYW1lIGNhbGxiYWNrIGFuZCBkYXRhIHBhcmFtZXRlcnMgYXMgYGdpdF9jb25maWdgLgorICovCitpbnQgZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKKworaW50IGdpdF9jb25maWdfZnJvbV9maWxlX3dpdGhfb3B0aW9ucyhjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqLAorCQkJCSAgICAgIHZvaWQgKiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKik7CitpbnQgZ2l0X2NvbmZpZ19mcm9tX21lbShjb25maWdfZm5fdCBmbiwKKwkJCWNvbnN0IGVudW0gY29uZmlnX29yaWdpbl90eXBlLAorCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCXZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqb3B0cyk7CitpbnQgZ2l0X2NvbmZpZ19mcm9tX2Jsb2Jfb2lkKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmRhdGEpOwordm9pZCBnaXRfY29uZmlnX3B1c2hfcGFyYW1ldGVyKGNvbnN0IGNoYXIgKnRleHQpOworaW50IGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKTsKK3ZvaWQgcmVhZF9lYXJseV9jb25maWcoY29uZmlnX2ZuX3QgY2IsIHZvaWQgKmRhdGEpOwordm9pZCByZWFkX3ZlcnlfZWFybHlfY29uZmlnKGNvbmZpZ19mbl90IGNiLCB2b2lkICpkYXRhKTsKKworLyoqCisgKiBNb3N0IHByb2dyYW1zIHdpbGwgc2ltcGx5IHdhbnQgdG8gbG9vayB1cCB2YXJpYWJsZXMgaW4gYWxsIGNvbmZpZyBmaWxlcworICogdGhhdCBHaXQga25vd3MgYWJvdXQsIHVzaW5nIHRoZSBub3JtYWwgcHJlY2VkZW5jZSBydWxlcy4gVG8gZG8gdGhpcywKKyAqIGNhbGwgYGdpdF9jb25maWdgIHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdm9pZCBkYXRhIHBvaW50ZXIuCisgKgorICogYGdpdF9jb25maWdgIHdpbGwgcmVhZCBhbGwgY29uZmlnIHNvdXJjZXMgaW4gb3JkZXIgb2YgaW5jcmVhc2luZworICogcHJpb3JpdHkuIFRodXMgYSBjYWxsYmFjayBzaG91bGQgdHlwaWNhbGx5IG92ZXJ3cml0ZSBwcmV2aW91c2x5LXNlZW4KKyAqIGVudHJpZXMgd2l0aCBuZXcgb25lcyAoZS5nLiwgaWYgYm90aCB0aGUgdXNlci13aWRlIGB+Ly5naXRjb25maWdgIGFuZAorICogcmVwby1zcGVjaWZpYyBgLmdpdC9jb25maWdgIGNvbnRhaW4gYGNvbG9yLnVpYCwgdGhlIGNvbmZpZyBtYWNoaW5lcnkKKyAqIHdpbGwgZmlyc3QgZmVlZCB0aGUgdXNlci13aWRlIG9uZSB0byB0aGUgY2FsbGJhY2ssIGFuZCB0aGVuIHRoZQorICogcmVwby1zcGVjaWZpYyBvbmU7IGJ5IG92ZXJ3cml0aW5nLCB0aGUgaGlnaGVyLXByaW9yaXR5IHJlcG8tc3BlY2lmaWMKKyAqIHZhbHVlIGlzIGxlZnQgYXQgdGhlIGVuZCkuCisgKi8KK3ZvaWQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqKTsKKworLyoqCisgKiBMZXRzIHRoZSBjYWxsZXIgZXhhbWluZSBjb25maWcgd2hpbGUgYWRqdXN0aW5nIHNvbWUgb2YgdGhlIGRlZmF1bHQKKyAqIGJlaGF2aW9yIG9mIGBnaXRfY29uZmlnYC4gSXQgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSB1c2VkIGJ5ICJyZWd1bGFyIgorICogR2l0IGNvZGUgdGhhdCBpcyBsb29raW5nIHVwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorICogSXQgaXMgaW50ZW5kZWQgZm9yIGFkdmFuY2VkIGNhbGxlcnMgbGlrZSBgZ2l0LWNvbmZpZ2AsIHdoaWNoIGFyZQorICogaW50ZW50aW9uYWxseSB0d2Vha2luZyB0aGUgbm9ybWFsIGNvbmZpZy1sb29rdXAgcHJvY2Vzcy4KKyAqIEl0IHRha2VzIHR3byBleHRyYSBwYXJhbWV0ZXJzOgorICoKKyAqIC0gYGNvbmZpZ19zb3VyY2VgCisgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub24tTlVMTCwgaXQgc3BlY2lmaWVzIHRoZSBzb3VyY2UgdG8gcGFyc2UgZm9yCisgKiBjb25maWd1cmF0aW9uLCByYXRoZXIgdGhhbiBsb29raW5nIGluIHRoZSB1c3VhbCBmaWxlcy4gU2VlIGBzdHJ1Y3QKKyAqIGdpdF9jb25maWdfc291cmNlYCBpbiBgY29uZmlnLmhgIGZvciBkZXRhaWxzLiBSZWd1bGFyIGBnaXRfY29uZmlnYCBkZWZhdWx0cworICogdG8gYE5VTExgLgorICoKKyAqIC0gYG9wdHNgCisgKiBTcGVjaWZ5IG9wdGlvbnMgdG8gYWRqdXN0IHRoZSBiZWhhdmlvciBvZiBwYXJzaW5nIGNvbmZpZyBmaWxlcy4gU2VlIGBzdHJ1Y3QKKyAqIGNvbmZpZ19vcHRpb25zYCBpbiBgY29uZmlnLmhgIGZvciBkZXRhaWxzLiBBcyBhbiBleGFtcGxlOiByZWd1bGFyIGBnaXRfY29uZmlnYAorICogc2V0cyBgb3B0cy5yZXNwZWN0X2luY2x1ZGVzYCB0byBgMWAgYnkgZGVmYXVsdC4KKyAqLworaW50IGNvbmZpZ193aXRoX29wdGlvbnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKiwKKwkJCXN0cnVjdCBnaXRfY29uZmlnX3NvdXJjZSAqY29uZmlnX3NvdXJjZSwKKwkJCWNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqb3B0cyk7CisKKy8qKgorICogVmFsdWUgUGFyc2luZyBIZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbnMgYWlkIGluIHBhcnNpbmcgc3RyaW5nIHZhbHVlcworICovCisKK2ludCBnaXRfcGFyc2Vfc3NpemVfdChjb25zdCBjaGFyICosIHNzaXplX3QgKik7CitpbnQgZ2l0X3BhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworLyoqCisgKiBTYW1lIGFzIGBnaXRfY29uZmlnX2Jvb2xgLCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIC0xIG9uIGVycm9yIHJhdGhlcgorICogdGhhbiBkeWluZy4KKyAqLworaW50IGdpdF9wYXJzZV9tYXliZV9ib29sKGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogUGFyc2UgdGhlIHN0cmluZyB0byBhbiBpbnRlZ2VyLCBpbmNsdWRpbmcgdW5pdCBmYWN0b3JzLiBEaWVzIG9uIGVycm9yOworICogb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LgorICovCitpbnQgZ2l0X2NvbmZpZ19pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCitpbnQ2NF90IGdpdF9jb25maWdfaW50NjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIElkZW50aWNhbCB0byBgZ2l0X2NvbmZpZ19pbnRgLCBidXQgZm9yIHVuc2lnbmVkIGxvbmdzLgorICovCit1bnNpZ25lZCBsb25nIGdpdF9jb25maWdfdWxvbmcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCitzc2l6ZV90IGdpdF9jb25maWdfc3NpemVfdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogU2FtZSBhcyBgZ2l0X2NvbmZpZ19ib29sYCwgZXhjZXB0IHRoYXQgaW50ZWdlcnMgYXJlIHJldHVybmVkIGFzLWlzLCBhbmQKKyAqIGFuIGBpc19ib29sYCBmbGFnIGlzIHVuc2V0LgorICovCitpbnQgZ2l0X2NvbmZpZ19ib29sX29yX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworCisvKioKKyAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBib29sZWFuIHZhbHVlLCByZXNwZWN0aW5nIGtleXdvcmRzIGxpa2UgInRydWUiIGFuZAorICogImZhbHNlIi4gSW50ZWdlciB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHRydWUvZmFsc2UgdmFsdWVzICh3aGVuIHRoZXkKKyAqIGFyZSBub24temVybyBvciB6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYKKyAqIHBhcnNpbmcgaXMgc3VjY2Vzc2Z1bCwgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcmVzdWx0LgorICovCitpbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBBbGxvY2F0ZXMgYW5kIGNvcGllcyB0aGUgdmFsdWUgc3RyaW5nIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXI7IGlmIG5vCisgKiBzdHJpbmcgaXMgZ2l2ZW4sIHByaW50cyBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm5zIC0xLgorICovCitpbnQgZ2l0X2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfc3RyaW5nYCwgYnV0IGV4cGFuZHMgYH5gIG9yIGB+dXNlcmAgaW50byB0aGUKKyAqIHVzZXIncyBob21lIGRpcmVjdG9yeSB3aGVuIGZvdW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGguCisgKi8KK2ludCBnaXRfY29uZmlnX3BhdGhuYW1lKGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworaW50IGdpdF9jb25maWdfZXhwaXJ5X2RhdGUodGltZXN0YW1wX3QgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworaW50IGdpdF9jb25maWdfY29sb3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQgZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogd3JpdGUgY29uZmlnIHZhbHVlcyB0byBhIHNwZWNpZmljIGNvbmZpZyBmaWxlLCB0YWtlcyBhIGtleS92YWx1ZSBwYWlyIGFzCisgKiBwYXJhbWV0ZXIuCisgKi8KK3ZvaWQgZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworaW50IGdpdF9jb25maWdfc2V0X2dlbnRseShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogd3JpdGUgY29uZmlnIHZhbHVlcyB0byBgLmdpdC9jb25maWdgLCB0YWtlcyBhIGtleS92YWx1ZSBwYWlyIGFzIHBhcmFtZXRlci4KKyAqLwordm9pZCBnaXRfY29uZmlnX3NldChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKK2ludCBnaXRfY29uZmlnX3BhcnNlX2tleShjb25zdCBjaGFyICosIGNoYXIgKiosIGludCAqKTsKK2ludCBnaXRfY29uZmlnX2tleV9pc192YWxpZChjb25zdCBjaGFyICprZXkpOworaW50IGdpdF9jb25maWdfc2V0X211bHRpdmFyX2dlbnRseShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwordm9pZCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKworLyoqCisgKiB0YWtlcyBmb3VyIHBhcmFtZXRlcnM6CisgKgorICogLSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgYXMgYSBzdHJpbmcsIHRvIHdoaWNoIGtleS92YWx1ZSBwYWlycyB3aWxsIGJlIHdyaXR0ZW4uCisgKgorICogLSB0aGUgbmFtZSBvZiBrZXksIGFzIGEgc3RyaW5nLiBUaGlzIGlzIGluIGNhbm9uaWNhbCAiZmxhdCIgZm9ybTogdGhlIHNlY3Rpb24sCisgKiAgIHN1YnNlY3Rpb24sIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIHNlcGFyYXRlZCBieSBkb3RzLCBhbmQgdGhlIHNlY3Rpb24KKyAqICAgYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgYWxsIGxvd2VyY2FzZS4KKyAqICAgRS5nLiwgYGNvcmUuaWdub3JlY2FzZWAsIGBkaWZmLlNvbWVUeXBlLnRleHRjb252YC4KKyAqCisgKiAtIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIGFzIGEgc3RyaW5nLiBJZiB2YWx1ZSBpcyBlcXVhbCB0byBOVUxMLCBpdCB3aWxsCisgKiAgIHJlbW92ZSB0aGUgbWF0Y2hpbmcga2V5IGZyb20gdGhlIGNvbmZpZyBmaWxlLgorICoKKyAqIC0gdGhlIHZhbHVlIHJlZ2V4LCBhcyBhIHN0cmluZy4gSXQgd2lsbCBkaXNyZWdhcmQga2V5L3ZhbHVlIHBhaXJzIHdoZXJlIHZhbHVlCisgKiAgIGRvZXMgbm90IG1hdGNoLgorICoKKyAqIC0gYSBtdWx0aV9yZXBsYWNlIHZhbHVlLCBhcyBhbiBpbnQuIElmIHZhbHVlIGlzIGVxdWFsIHRvIHplcm8sIG5vdGhpbmcgb3Igb25seQorICogICBvbmUgbWF0Y2hpbmcga2V5L3ZhbHVlIGlzIHJlcGxhY2VkLCBlbHNlIGFsbCBtYXRjaGluZyBrZXkvdmFsdWVzIChyZWdhcmRsZXNzCisgKiAgIGhvdyBtYW55KSBhcmUgcmVtb3ZlZCwgYmVmb3JlIHRoZSBuZXcgcGFpciBpcyB3cml0dGVuLgorICoKKyAqIEl0IHJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCit2b2lkIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisvKioKKyAqIHJlbmFtZSBvciByZW1vdmUgc2VjdGlvbnMgaW4gdGhlIGNvbmZpZyBmaWxlCisgKiBwYXJhbWV0ZXJzIGBvbGRfbmFtZWAgYW5kIGBuZXdfbmFtZWAKKyAqIElmIE5VTEwgaXMgcGFzc2VkIHRocm91Z2ggYG5ld19uYW1lYCBwYXJhbWV0ZXIsCisgKiB0aGUgc2VjdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY29uZmlnIGZpbGUuCisgKi8KK2ludCBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludCBnaXRfY29uZmlnX2NvcHlfc2VjdGlvbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQgZ2l0X2NvbmZpZ19jb3B5X3NlY3Rpb25faW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2NvbnN0IGNoYXIgKmdpdF9ldGNfZ2l0Y29uZmlnKHZvaWQpOworaW50IGdpdF9lbnZfYm9vbChjb25zdCBjaGFyICosIGludCk7Cit1bnNpZ25lZCBsb25nIGdpdF9lbnZfdWxvbmcoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKK2ludCBnaXRfY29uZmlnX3N5c3RlbSh2b2lkKTsKK2ludCBjb25maWdfZXJyb3Jfbm9uYm9vbChjb25zdCBjaGFyICopOworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIGNvbmZpZ19lcnJvcl9ub25ib29sKHMpIChjb25maWdfZXJyb3Jfbm9uYm9vbChzKSwgY29uc3RfZXJyb3IoKSkKKyNlbmRpZgorCitpbnQgZ2l0X2NvbmZpZ19wYXJzZV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSk7CisKK2VudW0gY29uZmlnX3Njb3BlIGN1cnJlbnRfY29uZmlnX3Njb3BlKHZvaWQpOworY29uc3QgY2hhciAqY3VycmVudF9jb25maWdfb3JpZ2luX3R5cGUodm9pZCk7Citjb25zdCBjaGFyICpjdXJyZW50X2NvbmZpZ19uYW1lKHZvaWQpOworaW50IGN1cnJlbnRfY29uZmlnX2xpbmUodm9pZCk7CisKKy8qKgorICogSW5jbHVkZSBEaXJlY3RpdmVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgY29uZmlnIHBhcnNlciBkb2VzIG5vdCByZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcy4KKyAqIEhvd2V2ZXIsIGEgY2FsbGVyIGNhbiB1c2UgdGhlIHNwZWNpYWwgYGdpdF9jb25maWdfaW5jbHVkZWAgd3JhcHBlcgorICogY2FsbGJhY2sgdG8gc3VwcG9ydCB0aGVtLiBUbyBkbyBzbywgeW91IHNpbXBseSB3cmFwIHlvdXIgInJlYWwiIGNhbGxiYWNrCisgKiBmdW5jdGlvbiBhbmQgZGF0YSBwb2ludGVyIGluIGEgYHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhYCwgYW5kIHBhc3MKKyAqIHRoZSB3cmFwcGVyIHRvIHRoZSByZWd1bGFyIGNvbmZpZy1yZWFkaW5nIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaW50IHJlYWRfZmlsZV93aXRoX2luY2x1ZGUoY29uc3QgY2hhciAqZmlsZSwgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCisgKiB7CisgKiBzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSBpbmMgPSBDT05GSUdfSU5DTFVERV9JTklUOworICogaW5jLmZuID0gZm47CisgKiBpbmMuZGF0YSA9IGRhdGE7CisgKiByZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZ2l0X2NvbmZpZ19pbmNsdWRlLCBmaWxlLCAmaW5jKTsKKyAqIH0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBgZ2l0X2NvbmZpZ2AgcmVzcGVjdHMgaW5jbHVkZXMgYXV0b21hdGljYWxseS4gVGhlIGxvd2VyLWxldmVsCisgKiBgZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgIGRvZXMgbm90LgorICoKKyAqLworc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgeworCWludCBkZXB0aDsKKwljb25maWdfZm5fdCBmbjsKKwl2b2lkICpkYXRhOworCWNvbnN0IHN0cnVjdCBjb25maWdfb3B0aW9ucyAqb3B0czsKK307CisjZGVmaW5lIENPTkZJR19JTkNMVURFX0lOSVQgeyAwIH0KK2ludCBnaXRfY29uZmlnX2luY2x1ZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpOworCisvKgorICogTWF0Y2ggYW5kIHBhcnNlIGEgY29uZmlnIGtleSBvZiB0aGUgZm9ybToKKyAqCisgKiAgIHNlY3Rpb24uKHN1YnNlY3Rpb24uKT9rZXkKKyAqCisgKiAoaS5lLiwgd2hhdCBnZXRzIGhhbmRlZCB0byBhIGNvbmZpZ19mbl90KS4gVGhlIGNhbGxlciBwcm92aWRlcyB0aGUgc2VjdGlvbjsKKyAqIHdlIHJldHVybiAtMSBpZiBpdCBkb2VzIG5vdCBtYXRjaCwgMCBvdGhlcndpc2UuIFRoZSBzdWJzZWN0aW9uIGFuZCBrZXkKKyAqIG91dC1wYXJhbWV0ZXJzIGFyZSBmaWxsZWQgYnkgdGhlIGZ1bmN0aW9uIChhbmQgKnN1YnNlY3Rpb24gaXMgTlVMTCBpZiBpdCBpcworICogbWlzc2luZykuCisgKgorICogSWYgdGhlIHN1YnNlY3Rpb24gcG9pbnRlci10by1wb2ludGVyIHBhc3NlZCBpbiBpcyBOVUxMLCByZXR1cm5zIDAgb25seSBpZgorICogdGhlcmUgaXMgbm8gc3Vic2VjdGlvbiBhdCBhbGwuCisgKi8KK2ludCBwYXJzZV9jb25maWdfa2V5KGNvbnN0IGNoYXIgKnZhciwKKwkJICAgICBjb25zdCBjaGFyICpzZWN0aW9uLAorCQkgICAgIGNvbnN0IGNoYXIgKipzdWJzZWN0aW9uLCBpbnQgKnN1YnNlY3Rpb25fbGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKiprZXkpOworCisvKioKKyAqIEN1c3RvbSBDb25maWdzZXRzCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEEgYGNvbmZpZ19zZXRgIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhbiBpbi1tZW1vcnkgY2FjaGUgZm9yCisgKiBjb25maWctbGlrZSBmaWxlcyB0aGF0IHRoZSBjYWxsZXIgc3BlY2lmaWVzIChpLmUuLCBmaWxlcyBsaWtlIGAuZ2l0bW9kdWxlc2AsCisgKiBgfi8uZ2l0Y29uZmlnYCBldGMuKS4gRm9yIGV4YW1wbGUsCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogc3RydWN0IGNvbmZpZ19zZXQgZ21fY29uZmlnOworICogZ2l0X2NvbmZpZ3NldF9pbml0KCZnbV9jb25maWcpOworICogaW50IGI7CisgKiAvL3dlIGFkZCBjb25maWcgZmlsZXMgdG8gdGhlIGNvbmZpZ19zZXQKKyAqIGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoJmdtX2NvbmZpZywgIi5naXRtb2R1bGVzIik7CisgKiBnaXRfY29uZmlnc2V0X2FkZF9maWxlKCZnbV9jb25maWcsICIuZ2l0bW9kdWxlc19hbHQiKTsKKyAqCisgKiBpZiAoIWdpdF9jb25maWdzZXRfZ2V0X2Jvb2woZ21fY29uZmlnLCAic3VibW9kdWxlLmZyb3R6Lmlnbm9yZSIsICZiKSkgeworICogLy9oYWNrIGhhY2sgaGFjaworICogfQorICoKKyAqIHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGUgY29uZmlnc2V0OgorICogZ2l0X2NvbmZpZ3NldF9jbGVhcigmZ21fY29uZmlnKTsKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDb25maWdzZXQgQVBJIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIGFib3ZlIG1lbnRpb25lZCB3b3JrIGZsb3cKKyAqLworCitzdHJ1Y3QgY29uZmlnX3NldF9lbGVtZW50IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY2hhciAqa2V5OworCXN0cnVjdCBzdHJpbmdfbGlzdCB2YWx1ZV9saXN0OworfTsKKworc3RydWN0IGNvbmZpZ3NldF9saXN0X2l0ZW0geworCXN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmU7CisJaW50IHZhbHVlX2luZGV4OworfTsKKworLyoKKyAqIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdCBhcmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlaXIKKyAqIHBvc2l0aW9uIGluIHRoZSBjb25maWcgZmlsZXMgYW5kIG9yZGVyIG9mIHBhcnNpbmcgdGhlIGZpbGVzLgorICogKGkuZS4ga2V5LXZhbHVlIHBhaXIgYXQgdGhlIGxhc3QgcG9zaXRpb24gb2YgLmdpdC9jb25maWcgd2lsbAorICogYmUgYXQgdGhlIGxhc3QgaXRlbSBvZiB0aGUgbGlzdCkKKyAqLworc3RydWN0IGNvbmZpZ3NldF9saXN0IHsKKwlzdHJ1Y3QgY29uZmlnc2V0X2xpc3RfaXRlbSAqaXRlbXM7CisJdW5zaWduZWQgaW50IG5yLCBhbGxvYzsKK307CisKK3N0cnVjdCBjb25maWdfc2V0IHsKKwlzdHJ1Y3QgaGFzaG1hcCBjb25maWdfaGFzaDsKKwlpbnQgaGFzaF9pbml0aWFsaXplZDsKKwlzdHJ1Y3QgY29uZmlnc2V0X2xpc3QgbGlzdDsKK307CisKKy8qKgorICogSW5pdGlhbGl6ZXMgdGhlIGNvbmZpZ19zZXQgYGNzYC4KKyAqLwordm9pZCBnaXRfY29uZmlnc2V0X2luaXQoc3RydWN0IGNvbmZpZ19zZXQgKmNzKTsKKworLyoqCisgKiBQYXJzZXMgdGhlIGZpbGUgYW5kIGFkZHMgdGhlIHZhcmlhYmxlLXZhbHVlIHBhaXJzIHRvIHRoZSBgY29uZmlnX3NldGAsCisgKiBkaWVzIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIHBhcnNpbmcgdGhlIGZpbGUuIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvcgorICogLTEgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgaW5hY2Nlc3NpYmxlLiBUaGUgdXNlciBoYXMgdG8gZGVjaWRlCisgKiBpZiBoZSB3YW50cyB0byBmcmVlIHRoZSBpbmNvbXBsZXRlIGNvbmZpZ3NldCBvciBjb250aW51ZSB1c2luZyBpdCB3aGVuCisgKiB0aGUgZnVuY3Rpb24gcmV0dXJucyAtMS4KKyAqLworaW50IGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKKy8qKgorICogRmluZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIGxpc3QsIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHByaW9yaXR5CisgKiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgYW5kIGNvbmZpZyBzZXQgYGNzYC4gV2hlbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIE5VTEwuIFRoZSBjYWxsZXIKKyAqIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgdGhlIHJldHVybmVkIHBvaW50ZXIsIGFzIGl0IGlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KKyAqLworY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSk7CisKKy8qKgorICogQ2xlYXJzIGBjb25maWdfc2V0YCBzdHJ1Y3R1cmUsIHJlbW92ZXMgYWxsIHNhdmVkIHZhcmlhYmxlLXZhbHVlIHBhaXJzLgorICovCit2b2lkIGdpdF9jb25maWdzZXRfY2xlYXIoc3RydWN0IGNvbmZpZ19zZXQgKmNzKTsKKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gMSBpZiBub3QgZm91bmQsIGFuZCAwIGlmIGZvdW5kLCBsZWF2aW5nIHRoZSBmb3VuZAorICogdmFsdWUgaW4gdGhlICdkZXN0JyBwb2ludGVyLgorICovCisKKy8qCisgKiBGaW5kcyB0aGUgaGlnaGVzdC1wcmlvcml0eSB2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAKKyAqIGFuZCBjb25maWcgc2V0IGBjc2AsIHN0b3JlcyB0aGUgcG9pbnRlciB0byBpdCBpbiBgdmFsdWVgIGFuZCByZXR1cm5zIDAuCisgKiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQKKyAqIHRvdWNoaW5nIGB2YWx1ZWAuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeSBgdmFsdWVgLCBhcyBpdAorICogaXMgb3duZWQgYnkgdGhlIGNhY2hlLgorICovCitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKKworaW50IGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZ19jb25zdChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworaW50IGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZyhzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKmRlc3QpOworaW50IGdpdF9jb25maWdzZXRfZ2V0X2ludChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKK2ludCBnaXRfY29uZmlnc2V0X2dldF91bG9uZyhzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAqZGVzdCk7CitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfYm9vbChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKK2ludCBnaXRfY29uZmlnc2V0X2dldF9ib29sX29yX2ludChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICppc19ib29sLCBpbnQgKmRlc3QpOworaW50IGdpdF9jb25maWdzZXRfZ2V0X21heWJlX2Jvb2woc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfcGF0aG5hbWUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKKworLyogRnVuY3Rpb25zIGZvciByZWFkaW5nIGEgcmVwb3NpdG9yeSdzIGNvbmZpZyAqLworc3RydWN0IHJlcG9zaXRvcnk7Cit2b2lkIHJlcG9fY29uZmlnKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSk7CitpbnQgcmVwb19jb25maWdfZ2V0X3ZhbHVlKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSk7Citjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlcG9fY29uZmlnX2dldF92YWx1ZV9tdWx0aShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmtleSk7CitpbnQgcmVwb19jb25maWdfZ2V0X3N0cmluZ19jb25zdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CitpbnQgcmVwb19jb25maWdfZ2V0X3N0cmluZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgIGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKmRlc3QpOworaW50IHJlcG9fY29uZmlnX2dldF9pbnQoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQljb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CitpbnQgcmVwb19jb25maWdfZ2V0X3Vsb25nKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICBjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgKmRlc3QpOworaW50IHJlcG9fY29uZmlnX2dldF9ib29sKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKK2ludCByZXBvX2NvbmZpZ19nZXRfYm9vbF9vcl9pbnQoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJY29uc3QgY2hhciAqa2V5LCBpbnQgKmlzX2Jvb2wsIGludCAqZGVzdCk7CitpbnQgcmVwb19jb25maWdfZ2V0X21heWJlX2Jvb2woc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgICAgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworaW50IHJlcG9fY29uZmlnX2dldF9wYXRobmFtZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CisKKy8qKgorICogUXVlcnlpbmcgRm9yIFNwZWNpZmljIFZhcmlhYmxlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEZvciBwcm9ncmFtcyB3YW50aW5nIHRvIHF1ZXJ5IGZvciBzcGVjaWZpYyB2YXJpYWJsZXMgaW4gYSBub24tY2FsbGJhY2sKKyAqIG1hbm5lciwgdGhlIGNvbmZpZyBBUEkgcHJvdmlkZXMgdHdvIGZ1bmN0aW9ucyBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVgCisgKiBhbmQgYGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpYC4gVGhleSBib3RoIHJlYWQgdmFsdWVzIGZyb20gYW4gaW50ZXJuYWwKKyAqIGNhY2hlIGdlbmVyYXRlZCBwcmV2aW91c2x5IGZyb20gcmVhZGluZyB0aGUgY29uZmlnIGZpbGVzLgorICovCisKKy8qKgorICogRmluZHMgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLAorICogc3RvcmVzIHRoZSBwb2ludGVyIHRvIGl0IGluIGB2YWx1ZWAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZworICogYHZhbHVlYC4gVGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IGB2YWx1ZWAsIGFzIGl0IGlzIG93bmVkCisgKiBieSB0aGUgY2FjaGUuCisgKi8KK2ludCBnaXRfY29uZmlnX2dldF92YWx1ZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSk7CisKKy8qKgorICogRmluZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIGxpc3QsIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHByaW9yaXR5CisgKiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAqIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkKKyAqIHRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCisgKi8KK2NvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoY29uc3QgY2hhciAqa2V5KTsKKworLyoqCisgKiBSZXNldHMgYW5kIGludmFsaWRhdGVzIHRoZSBjb25maWcgY2FjaGUuCisgKi8KK3ZvaWQgZ2l0X2NvbmZpZ19jbGVhcih2b2lkKTsKKworLyoqCisgKiBBbGxvY2F0ZXMgYW5kIGNvcGllcyB0aGUgcmV0cmlldmVkIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyIGZvcgorICogdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWA7IGlmIE5VTEwgc3RyaW5nIGlzIGdpdmVuLCBwcmludHMgYW4KKyAqIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMKKyAqIG5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcgYGRlc3RgLgorICovCitpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdGAsIGV4Y2VwdCB0aGF0IHJldHJpZXZlZCB2YWx1ZQorICogY29waWVkIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIHN0cmluZy4KKyAqLworaW50IGdpdF9jb25maWdfZ2V0X3N0cmluZyhjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KTsKKworLyoqCisgKiBGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSB0byBhbiBpbnRlZ2VyIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICogYGtleWAuIERpZXMgb24gZXJyb3I7IG90aGVyd2lzZSwgc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIgaW4KKyAqIGBkZXN0YCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwKKyAqIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nIGBkZXN0YC4KKyAqLworaW50IGdpdF9jb25maWdfZ2V0X2ludChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfaW50YCBidXQgZm9yIHVuc2lnbmVkIGxvbmdzLgorICovCitpbnQgZ2l0X2NvbmZpZ19nZXRfdWxvbmcoY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICpkZXN0KTsKKworLyoqCisgKiBGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSBpbnRvIGEgYm9vbGVhbiB2YWx1ZSwgZm9yIHRoZSBjb25maWd1cmF0aW9uCisgKiB2YXJpYWJsZSBga2V5YCByZXNwZWN0aW5nIGtleXdvcmRzIGxpa2UgInRydWUiIGFuZCAiZmFsc2UiLiBJbnRlZ2VyCisgKiB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHRydWUvZmFsc2UgdmFsdWVzICh3aGVuIHRoZXkgYXJlIG5vbi16ZXJvIG9yCisgKiB6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYgcGFyc2luZyBpcyBzdWNjZXNzZnVsLAorICogc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIHJlc3VsdCBpbiBgZGVzdGAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZworICogYGRlc3RgLgorICovCitpbnQgZ2l0X2NvbmZpZ19nZXRfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfYm9vbGAsIGV4Y2VwdCB0aGF0IGludGVnZXJzIGFyZSBjb3BpZWQgYXMtaXMsCisgKiBhbmQgYGlzX2Jvb2xgIGZsYWcgaXMgdW5zZXQuCisgKi8KK2ludCBnaXRfY29uZmlnX2dldF9ib29sX29yX2ludChjb25zdCBjaGFyICprZXksIGludCAqaXNfYm9vbCwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9ib29sYCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyAtMSBvbiBlcnJvcgorICogcmF0aGVyIHRoYW4gZHlpbmcuCisgKi8KK2ludCBnaXRfY29uZmlnX2dldF9tYXliZV9ib29sKGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9zdHJpbmdgLCBidXQgZXhwYW5kcyBgfmAgb3IgYH51c2VyYCBpbnRvCisgKiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IHdoZW4gZm91bmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aC4KKyAqLworaW50IGdpdF9jb25maWdfZ2V0X3BhdGhuYW1lKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCitpbnQgZ2l0X2NvbmZpZ19nZXRfaW5kZXhfdGhyZWFkcyhpbnQgKmRlc3QpOworaW50IGdpdF9jb25maWdfZ2V0X3VudHJhY2tlZF9jYWNoZSh2b2lkKTsKK2ludCBnaXRfY29uZmlnX2dldF9zcGxpdF9pbmRleCh2b2lkKTsKK2ludCBnaXRfY29uZmlnX2dldF9tYXhfcGVyY2VudF9zcGxpdF9jaGFuZ2Uodm9pZCk7CitpbnQgZ2l0X2NvbmZpZ19nZXRfZnNtb25pdG9yKHZvaWQpOworCisvKiBUaGlzIGRpZXMgaWYgdGhlIGNvbmZpZ3VyZWQgb3IgZGVmYXVsdCBkYXRlIGlzIGluIHRoZSBmdXR1cmUgKi8KK2ludCBnaXRfY29uZmlnX2dldF9leHBpcnkoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqb3V0cHV0KTsKKworLyogcGFyc2UgZWl0aGVyICJ0aGlzIG1hbnkgZGF5cyIgaW50ZWdlciwgb3IgIjUuZGF5cy5hZ28iIGFwcHJveGlkYXRlICovCitpbnQgZ2l0X2NvbmZpZ19nZXRfZXhwaXJ5X2luX2RheXMoY29uc3QgY2hhciAqa2V5LCB0aW1lc3RhbXBfdCAqLCB0aW1lc3RhbXBfdCBub3cpOworCitzdHJ1Y3Qga2V5X3ZhbHVlX2luZm8geworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWludCBsaW5lbnI7CisJZW51bSBjb25maWdfb3JpZ2luX3R5cGUgb3JpZ2luX3R5cGU7CisJZW51bSBjb25maWdfc2NvcGUgc2NvcGU7Cit9OworCisvKioKKyAqIEZpcnN0IHByaW50cyB0aGUgZXJyb3IgbWVzc2FnZSBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlciBpbiBgZXJyYCBhbmQgdGhlbgorICogZGllcyBwcmludGluZyB0aGUgbGluZSBudW1iZXIgYW5kIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkKKyAqIHZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YC4KKyAqLworTk9SRVRVUk4gdm9pZCBnaXRfZGllX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworCisvKioKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBmb3JtYXRzIHRoZSBkaWUgZXJyb3IgbWVzc2FnZSBhY2NvcmRpbmcgdG8gdGhlCisgKiBwYXJhbWV0ZXJzIGVudGVyZWQuIFVzZWQgYnkgYGdpdF9kaWVfY29uZmlnKClgLiBJdCBjYW4gYmUgdXNlZCBieSBjYWxsZXJzCisgKiBoYW5kbGluZyBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoKWAgdG8gcHJpbnQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZQorICogZm9yIHRoZSBkZXNpcmVkIHZhbHVlLgorICovCitOT1JFVFVSTiB2b2lkIGdpdF9kaWVfY29uZmlnX2xpbmVucihjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5yKTsKKworI2RlZmluZSBMT09LVVBfQ09ORklHKG1hcHBpbmcsIHZhcikgXAorCWxvb2t1cF9jb25maWcobWFwcGluZywgQVJSQVlfU0laRShtYXBwaW5nKSwgdmFyKQoraW50IGxvb2t1cF9jb25maWcoY29uc3QgY2hhciAqKm1hcHBpbmcsIGludCBucl9tYXBwaW5nLCBjb25zdCBjaGFyICp2YXIpOworCisjZW5kaWYgLyogQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2NvbmZpZy5tYWsuZGV2IGIvY29uZmlnLm1hay5kZXYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliMjE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5tYWsuZGV2CkBAIC0wLDAgKzEsNDcgQEAKK2lmZXEgKCQoZmlsdGVyIG5vLWVycm9yLCQoREVWT1BUUykpLCkKK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVdlcnJvcgorZW5kaWYKK2lmbmVxICgkKGZpbHRlciBwZWRhbnRpYywkKERFVk9QVFMpKSwpCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1wZWRhbnRpYworIyBkb24ndCB3YXJuIGZvciBlYWNoIE5fIHVzZQorREVWRUxPUEVSX0NGTEFHUyArPSAtRFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTj0wCitlbmRpZgorREVWRUxPUEVSX0NGTEFHUyArPSAtV2FsbAorREVWRUxPUEVSX0NGTEFHUyArPSAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudAorREVWRUxPUEVSX0NGTEFHUyArPSAtV2Zvcm1hdC1zZWN1cml0eQorREVWRUxPUEVSX0NGTEFHUyArPSAtV29sZC1zdHlsZS1kZWZpbml0aW9uCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1Xb3ZlcmZsb3cKK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVdwb2ludGVyLWFyaXRoCitERVZFTE9QRVJfQ0ZMQUdTICs9IC1Xc3RyaWN0LXByb3RvdHlwZXMKK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVd1bnVzZWQKK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVd2bGEKKworaWZuZGVmIENPTVBJTEVSX0ZFQVRVUkVTCitDT01QSUxFUl9GRUFUVVJFUyA6PSAkKHNoZWxsIC4vZGV0ZWN0LWNvbXBpbGVyICQoQ0MpKQorZW5kaWYKKworaWZuZXEgKCQoZmlsdGVyIGNsYW5nNCwkKENPTVBJTEVSX0ZFQVRVUkVTKSksKQorREVWRUxPUEVSX0NGTEFHUyArPSAtV3RhdXRvbG9naWNhbC1jb25zdGFudC1vdXQtb2YtcmFuZ2UtY29tcGFyZQorZW5kaWYKKworaWZuZXEgKCQob3IgJChmaWx0ZXIgZ2NjNiwkKENPTVBJTEVSX0ZFQVRVUkVTKSksJChmaWx0ZXIgY2xhbmc0LCQoQ09NUElMRVJfRkVBVFVSRVMpKSksKQorREVWRUxPUEVSX0NGTEFHUyArPSAtV2V4dHJhCisjIGlmIGEgZnVuY3Rpb24gaXMgcHVibGljLCB0aGVyZSBzaG91bGQgYmUgYSBwcm90b3R5cGUgYW5kIHRoZSByaWdodAorIyBoZWFkZXIgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQuIElmIG5vdCwgaXQgc2hvdWxkIGJlIHN0YXRpYy4KK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVdtaXNzaW5nLXByb3RvdHlwZXMKK2lmZXEgKCQoZmlsdGVyIGV4dHJhLWFsbCwkKERFVk9QVFMpKSwpCisjIFRoZXNlIGFyZSBkaXNhYmxlZCBiZWNhdXNlIHdlIGhhdmUgdGhlc2UgYWxsIG92ZXIgdGhlIHBsYWNlLgorREVWRUxPUEVSX0NGTEFHUyArPSAtV25vLWVtcHR5LWJvZHkKK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycworREVWRUxPUEVSX0NGTEFHUyArPSAtV25vLXNpZ24tY29tcGFyZQorREVWRUxPUEVSX0NGTEFHUyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIKK2VuZGlmCitlbmRpZgorCisjIHVuaW5pdGlhbGl6ZWQgd2FybmluZ3Mgb24gZ2NjIDQuOS4yIGluIHhkaWZmL3hkaWZmaS5jIGFuZCBjb25maWcuYworIyBub3Qgd29ydGggZml4aW5nIHNpbmNlIG5ld2VyIGNvbXBpbGVycyBjb3JyZWN0bHkgc3RvcCBjb21wbGFpbmluZworaWZuZXEgKCQoZmlsdGVyIGdjYzQsJChDT01QSUxFUl9GRUFUVVJFUykpLCkKK2lmZXEgKCQoZmlsdGVyIGdjYzUsJChDT01QSUxFUl9GRUFUVVJFUykpLCkKK0RFVkVMT1BFUl9DRkxBR1MgKz0gLVduby11bmluaXRpYWxpemVkCitlbmRpZgorZW5kaWYKZGlmZiAtLWdpdCBhL2NvbmZpZy5tYWsuaW4gYi9jb25maWcubWFrLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTZkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcubWFrLmluCkBAIC0wLDAgKzEsMjQgQEAKKyMgZ2l0IE1ha2VmaWxlIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGVkIGluIG1haW4gTWFrZWZpbGUKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworQ0MgPSBAQ0NACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitMREZMQUdTID0gQExERkxBR1NACitBUiA9IEBBUkAKK1RBUiA9IEBUQVJACitESUZGID0gQERJRkZACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorI0lOU1RBTEwgPSBASU5TVEFMTEAJCSMgbmVlZHMgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIHNvdXJjZXMKKworcHJlZml4ID0gQHByZWZpeEAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorYmluZGlyID0gQGJpbmRpckAKK2dpdGV4ZWNkaXIgPSBAbGliZXhlY2RpckAvZ2l0LWNvcmUKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAordGVtcGxhdGVfZGlyID0gQGRhdGFkaXJAL2dpdC1jb3JlL3RlbXBsYXRlcworc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorZG9jZGlyID0gQGRvY2RpckAKKworbWFuZGlyID0gQG1hbmRpckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKZGlmZiAtLWdpdCBhL2NvbmZpZy5tYWsudW5hbWUgYi9jb25maWcubWFrLnVuYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYjhlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcubWFrLnVuYW1lCkBAIC0wLDAgKzEsNzczIEBACisjIFBsYXRmb3JtIHNwZWNpZmljIE1ha2VmaWxlIHR3ZWFrcyBiYXNlZCBvbiB1bmFtZSBkZXRlY3Rpb24KKworIyBEZWZpbmUgTk9fU0FGRVNFSCBpZiB5b3UgbmVlZCBNU1ZDL1Zpc3VhbCBTdHVkaW8gdG8gaWdub3JlIHRoZSBsYWNrIG9mCisjIE1pY3Jvc29mdCdzIFNhZmUgRXhjZXB0aW9uIEhhbmRsaW5nIGluIGxpYnJhcmllcyAoc3VjaCBhcyB6bGliKS4KKyMgVHlwaWNhbGx5IHJlcXVpcmVkIGZvciBWUzIwMTMrLzMyLWJpdCBjb21waWxhdGlvbiBvbiBWaXN0YSsgdmVyc2lvbnMuCisKK3VuYW1lX1MgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXMgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQordW5hbWVfTSA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtbSAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9PIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1vIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX1IgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXIgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQordW5hbWVfUCA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtcCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9WIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC12IDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKKworaWZkZWYgTVNWQworCSMgYXZvaWQgdGhlIE1pbmdXIGFuZCBDeWd3aW4gY29uZmlndXJhdGlvbiBzZWN0aW9ucworCXVuYW1lX1MgOj0gV2luZG93cworCXVuYW1lX08gOj0gV2luZG93cworCisJIyBHZW5lcmF0ZSBhbmQgaW5jbHVkZSBtYWtlZmlsZSB2YXJpYWJsZXMgdGhhdCBwb2ludCB0byB0aGUKKwkjIGN1cnJlbnRseSBpbnN0YWxsZWQgc2V0IG9mIE1TVkMgY29tbWFuZCBsaW5lIHRvb2xzLgorY29tcGF0L3ZjYnVpbGQvTVNWQy1ERUZTLUdFTjogY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0CisJQCIkPCIgfCB0ciAnXFwnIC8gPiIkQCIKK2luY2x1ZGUgY29tcGF0L3ZjYnVpbGQvTVNWQy1ERUZTLUdFTgorCisJIyBTZWUgaWYgdmNwa2cgYW5kIHRoZSB2Y3BrZy1idWlsZCB2ZXJzaW9ucyBvZiB0aGUgdGhpcmQtcGFydHkKKwkjIGxpYnJhcmllcyB0aGF0IHdlIHVzZSBhcmUgaW5zdGFsbGVkLiAgV2UgaW5jbHVkZSB0aGUgcmVzdWx0CisJIyB0byBnZXQgJCh2Y3BrZ18qKSB2YXJpYWJsZXMgZGVmaW5lZCBmb3IgdGhlIE1ha2VmaWxlLgoraWZlcSAoLCQoU0tJUF9WQ1BLRykpCitjb21wYXQvdmNidWlsZC9WQ1BLRy1ERUZTOiBjb21wYXQvdmNidWlsZC92Y3BrZ19pbnN0YWxsLmJhdAorCUAiJDwiCitpbmNsdWRlIGNvbXBhdC92Y2J1aWxkL1ZDUEtHLURFRlMKK2VuZGlmCitlbmRpZgorCisjIFdlIGNob29zZSB0byBhdm9pZCAiaWYgLi4gZWxzZSBpZiAuLiBlbHNlIC4uIGVuZGlmIGVuZGlmIgorIyBiZWNhdXNlIG1haW50YWluaW5nIHRoZSBuZXN0aW5nIHRvIG1hdGNoIGlzIGEgcGFpbi4gIElmCisjIHdlIGhhZCAiZWxpZiIgdGhpbmdzIHdvdWxkIGhhdmUgYmVlbiBtdWNoIG5pY2VyLi4uCisKK2lmZXEgKCQodW5hbWVfUyksT1NGMSkKKwkjIE5lZWQgdGhpcyBmb3IgdV9zaG9ydCBkZWZpbml0aW9ucyBldCBhbAorCUJBU0lDX0NGTEFHUyArPSAtRF9PU0ZfU09VUkNFCisJU09DS0xFTl9UID0gaW50CisJTk9fU1RSVE9VTEwgPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxMaW51eCkKKwlIQVZFX0FMTE9DQV9IID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCUhBVkVfUEFUSFNfSCA9IFllc1BsZWFzZQorCUxJQkNfQ09OVEFJTlNfTElCSU5UTCA9IFllc1BsZWFzZQorCUhBVkVfREVWX1RUWSA9IFllc1BsZWFzZQorCUhBVkVfQ0xPQ0tfR0VUVElNRSA9IFllc1BsZWFzZQorCUhBVkVfQ0xPQ0tfTU9OT1RPTklDID0gWWVzUGxlYXNlCisJIyAtbHJ0IGlzIG5lZWRlZCBmb3IgY2xvY2tfZ2V0dGltZSBvbiBnbGliYyA8PSAyLjE2CisJTkVFRFNfTElCUlQgPSBZZXNQbGVhc2UKKwlIQVZFX0dFVERFTElNID0gWWVzUGxlYXNlCisJU0FORV9URVhUX0dSRVA9LWEKKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX1NZU0lORk8KKwlQUk9DRlNfRVhFQ1VUQUJMRV9QQVRIID0gL3Byb2Mvc2VsZi9leGUKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLEdOVS9rRnJlZUJTRCkKKwlIQVZFX0FMTE9DQV9IID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCUhBVkVfUEFUSFNfSCA9IFllc1BsZWFzZQorCURJUl9IQVNfQlNEX0dST1VQX1NFTUFOVElDUyA9IFllc1BsZWFzZQorCUxJQkNfQ09OVEFJTlNfTElCSU5UTCA9IFllc1BsZWFzZQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTID0gVW5mb3J0dW5hdGVseVllcworZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksVW5peFdhcmUpCisJQ0MgPSBjYworCU5FRURTX1NPQ0tFVCA9IFllc1BsZWFzZQorCU5FRURTX05TTCA9IFllc1BsZWFzZQorCU5FRURTX1NTTF9XSVRIX0NSWVBUTyA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJU0hFTExfUEFUSCA9IC91c3IvbG9jYWwvYmluL2Jhc2gKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1LdGhyZWFkCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJSU5TVEFMTCA9IGdpbnN0YWxsCisJVEFSID0gZ3RhcgorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLFNDT19TVikKKwlpZmVxICgkKHVuYW1lX1IpLDMuMikKKwkJQ0ZMQUdTID0gLU8yCisJZW5kaWYKKwlpZmVxICgkKHVuYW1lX1IpLDUpCisJCUNDID0gY2MKKwkJQkFTSUNfQ0ZMQUdTICs9IC1LdGhyZWFkCisJZW5kaWYKKwlORUVEU19TT0NLRVQgPSBZZXNQbGVhc2UKKwlORUVEU19OU0wgPSBZZXNQbGVhc2UKKwlORUVEU19TU0xfV0lUSF9DUllQVE8gPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvdXNyL2Jpbi9iYXNoCisJTk9fSVBWNiA9IFllc1BsZWFzZQorCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvbG9jYWwvaW5jbHVkZQorCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xvY2FsL2xpYgorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlJTlNUQUxMID0gZ2luc3RhbGwKKwlUQVIgPSBndGFyCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwkjIE5vdGU6ICQodW5hbWVfUikgZ2l2ZXMgdXMgdGhlIHVuZGVybHlpbmcgRGFyd2luIHZlcnNpb24uCisJIyAtIE1hY09TIDEwLjAuKiBhbmQgTWFjT1MgMTAuMS4wID0gRGFyd2luIDEuKgorCSMgLSBNYWNPUyAxMC54LiogPSBEYXJ3aW4gKHgrNCkuKiBmb3IgKDEgPD0geCkKKwkjIGkuZS4gImJlZ2lucyB3aXRoIFsxNTY3OF0gYW5kIGEgZG90IiBtZWFucyAiMTAuNC4qIG9yIG9sZGVyIi4KKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJ1sxNTY3OF1cLicpLDIpCisJCU9MRF9JQ09OViA9IFVuZm9ydHVuYXRlbHlZZXMKKwkJTk9fQVBQTEVfQ09NTU9OX0NSWVBUTyA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICdbMTVdXC4nKSwyKQorCQlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJZW5kaWYKKwlpZmVxICgkKHNoZWxsIHRlc3QgImBleHByICIkKHVuYW1lX1IpIiA6ICdcKFswLTldWzAtOV0qXClcLidgIiAtZ2UgMTEgJiYgZWNobyAxKSwxKQorCQlIQVZFX0dFVERFTElNID0gWWVzUGxlYXNlCisJZW5kaWYKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKKwlIQVZFX0RFVl9UVFkgPSBZZXNQbGVhc2UKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvcHJlY29tcG9zZV91dGY4Lm8KKwlCQVNJQ19DRkxBR1MgKz0gLURQUkVDT01QT1NFX1VOSUNPREUKKwlCQVNJQ19DRkxBR1MgKz0gLURQUk9URUNUX0hGU19ERUZBVUxUPTEKKwlIQVZFX0JTRF9TWVNDVEwgPSBZZXNQbGVhc2UKKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlIQVZFX05TX0dFVF9FWEVDVVRBQkxFX1BBVEggPSBZZXNQbGVhc2UKKwlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKKwlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9sb2NhbC9saWIKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLFN1bk9TKQorCU5FRURTX1NPQ0tFVCA9IFllc1BsZWFzZQorCU5FRURTX05TTCA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvYmluL2Jhc2gKKwlTQU5FX1RPT0xfUEFUSCA9IC91c3IveHBnNi9iaW46L3Vzci94cGc0L2JpbgorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fTVNHRk1UX0VYVEVOREVEX09QVElPTlMgPSBZZXNQbGVhc2UKKwlIQVZFX0RFVl9UVFkgPSBZZXNQbGVhc2UKKwlpZmVxICgkKHVuYW1lX1IpLDUuNikKKwkJU09DS0xFTl9UID0gaW50CisJCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCQlOT19JUFY2ID0gWWVzUGxlYXNlCisJCU5PX1NPQ0tBRERSX1NUT1JBR0UgPSBZZXNQbGVhc2UKKwkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJCUdJVF9URVNUX0NNUCA9IGNtcAorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSw1LjcpCisJCU5FRURTX1JFU09MViA9IFllc1BsZWFzZQorCQlOT19JUFY2ID0gWWVzUGxlYXNlCisJCU5PX1NPQ0tBRERSX1NUT1JBR0UgPSBZZXNQbGVhc2UKKwkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJCUdJVF9URVNUX0NNUCA9IGNtcAorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSw1LjgpCisJCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCQlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwkJR0lUX1RFU1RfQ01QID0gY21wCisJZW5kaWYKKwlpZmVxICgkKHVuYW1lX1IpLDUuOSkKKwkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCQlHSVRfVEVTVF9DTVAgPSBjbXAKKwllbmRpZgorCUlOU1RBTEwgPSAvdXNyL3VjYi9pbnN0YWxsCisJVEFSID0gZ3RhcgorCUJBU0lDX0NGTEFHUyArPSAtRF9fRVhURU5TSU9OU19fIC1EX19zdW5fXworZW5kaWYKK2lmZXEgKCQodW5hbWVfTyksQ3lnd2luKQorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnMVwuWzEtNl1cLicpLDQpCisJCU5PX0RfVFlQRV9JTl9ESVJFTlQgPSBZZXNQbGVhc2UKKwkJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCQlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwkJTk9fU1lNTElOS19IRUFEID0gWWVzUGxlYXNlCisJCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwkJT0xEX0lDT05WID0gVW5mb3J0dW5hdGVseVllcworCQkjIFRoZXJlIGFyZSBjb25mbGljdGluZyByZXBvcnRzIGFib3V0IHRoaXMuCisJCSMgT24gc29tZSBib3hlcyBOT19NTUFQIGlzIG5lZWRlZCwgYW5kIG5vdCBzbyBlbHNld2hlcmUuCisJCSMgVHJ5IGNvbW1lbnRpbmcgdGhpcyBvdXQgaWYgeW91IHN1c3BlY3QgTU1BUCBpcyBtb3JlIGVmZmljaWVudAorCQlOT19NTUFQID0gWWVzUGxlYXNlCisJZWxzZQorCQlOT19SRUdFWCA9IFVuZm9ydHVuYXRlbHlZZXMKKwllbmRpZgorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkgPSBVbmZvcnR1bmF0ZWx5WWVzCisJTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUID0gWWVzUGxlYXNlCisJWCA9IC5leGUKKwlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcworCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSBVbmZvcnR1bmF0ZWx5TmVlZHNUbworCU1NQVBfUFJFVkVOVFNfREVMRVRFID0gVW5mb3J0dW5hdGVseVllcworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC93aW4zMi9wYXRoLXV0aWxzLm8KKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLEZyZWVCU0QpCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwkjIFZlcnNpb25zIHVwIHRvIDEwLjEgcmVxdWlyZSBPTERfSUNPTlY7IDEwLjIgYW5kIGJleW9uZCBkb24ndC4KKwkjIEEgdHlwaWNhbCB2ZXJzaW9uIHN0cmluZyBsb29rcyBsaWtlICIxMC4yLVJFTEVBU0UiLgorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9SKSIgOiAnWzEtOV1cLicpLDIpCisJCU9MRF9JQ09OViA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh1bmFtZV9SKSkpLDEwLjApCisJCU9MRF9JQ09OViA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh1bmFtZV9SKSkpLDEwLjEpCisJCU9MRF9JQ09OViA9IFllc1BsZWFzZQorCWVuZGlmCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTID0gWWVzUGxlYXNlCisJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICc0XC4nKSwyKQorCQlQVEhSRUFEX0xJQlMgPSAtcHRocmVhZAorCQlOT19VSU5UTUFYX1QgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJZW5kaWYKKwlQWVRIT05fUEFUSCA9IC91c3IvbG9jYWwvYmluL3B5dGhvbgorCVBFUkxfUEFUSCA9IC91c3IvbG9jYWwvYmluL3BlcmwKKwlIQVZFX1BBVEhTX0ggPSBZZXNQbGVhc2UKKwlHTVRJTUVfVU5SRUxJQUJMRV9FUlJPUlMgPSBVbmZvcnR1bmF0ZWx5WWVzCisJSEFWRV9CU0RfU1lTQ1RMID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfS0VSTl9QUk9DX1NZU0NUTCA9IFllc1BsZWFzZQorCVBBR0VSX0VOViA9IExFU1M9RlJYIExWPS1jIE1PUkU9RlJYCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgPSBVbmZvcnR1bmF0ZWx5WWVzCisJRklMRU5PX0lTX0FfTUFDUk8gPSBVbmZvcnR1bmF0ZWx5WWVzCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxPcGVuQlNEKQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvbG9jYWwvaW5jbHVkZQorCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xvY2FsL2xpYgorCUhBVkVfUEFUSFNfSCA9IFllc1BsZWFzZQorCUhBVkVfQlNEX1NZU0NUTCA9IFllc1BsZWFzZQorCUhBVkVfQlNEX0tFUk5fUFJPQ19TWVNDVEwgPSBZZXNQbGVhc2UKKwlQUk9DRlNfRVhFQ1VUQUJMRV9QQVRIID0gL3Byb2MvY3VycHJvYy9maWxlCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgPSBVbmZvcnR1bmF0ZWx5WWVzCisJRklMRU5PX0lTX0FfTUFDUk8gPSBVbmZvcnR1bmF0ZWx5WWVzCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxNaXJCU0QpCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfU1lTQ1RMID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxOZXRCU0QpCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICdbMDFdXC4nKSwyKQorCQlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCWVuZGlmCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9wa2cvaW5jbHVkZQorCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL3BrZy9saWIgJChDQ19MRF9EWU5QQVRIKS91c3IvcGtnL2xpYgorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQorCUhBVkVfUEFUSFNfSCA9IFllc1BsZWFzZQorCUhBVkVfQlNEX1NZU0NUTCA9IFllc1BsZWFzZQorCUhBVkVfQlNEX0tFUk5fUFJPQ19TWVNDVEwgPSBZZXNQbGVhc2UKKwlQUk9DRlNfRVhFQ1VUQUJMRV9QQVRIID0gL3Byb2MvY3VycHJvYy9leGUKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLEFJWCkKKwlERUZBVUxUX1BBR0VSID0gbW9yZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlOT19SRUdFWCA9IE5lZWRzU3RhcnRFbmQKKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlJTlRFUk5BTF9RU09SVCA9IFVuZm9ydHVuYXRlbHlZZXMKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtRF9MQVJHRV9GSUxFUworCUZJTEVOT19JU19BX01BQ1JPID0gVW5mb3J0dW5hdGVseVllcworCU5FRURfQUNDRVNTX1JPT1RfSEFORExFUiA9IFVuZm9ydHVuYXRlbHlZZXMKKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfVikiIDogJ1sxMjM0XScpLDEpCisJCU5PX1BUSFJFQURTID0gWWVzUGxlYXNlCisJZWxzZQorCQlQVEhSRUFEX0xJQlMgPSAtbHB0aHJlYWQKKwllbmRpZgorCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9WKS4kKHVuYW1lX1IpIiA6ICc1XC4xJyksMykKKwkJSU5MSU5FID0gJycKKwllbmRpZgorCUdJVF9URVNUX0NNUCA9IGNtcAorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksR05VKQorCSMgR05VL0h1cmQKKwlIQVZFX0FMTE9DQV9IID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCUhBVkVfUEFUSFNfSCA9IFllc1BsZWFzZQorCUxJQkNfQ09OVEFJTlNfTElCSU5UTCA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksSVJJWCkKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJIyBXaGVuIGNvbXBpbGVkIHdpdGggdGhlIE1JUFNwcm8gNy40LjRtIGNvbXBpbGVyLCBhbmQgd2l0aG91dCBwdGhyZWFkcworCSMgKGkuZS4gTk9fUFRIUkVBRFMgaXMgc2V0KSwgYW5kIF93aXRoXyBNTUFQIChpLmUuIE5PX01NQVAgaXMgbm90IHNldCksCisJIyBnaXQgZGllcyB3aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyB0aGUgZmlyc3QKKwkjIGVudHJ5IG9mIGEgcmVmbG9nLiAgVGhlIGNvbnNlcnZhdGl2ZSBjaG9pY2UgaXMgbWFkZSB0byBhbHdheXMgc2V0CisJIyBOT19NTUFQLiAgSWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIGNvbXBpbGVyIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzCisJIyBpc3N1ZSwgY29tbWVudCBvdXQgdGhlIE5PX01NQVAgc3RhdGVtZW50LgorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCVNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9nbnUvYmluL2Jhc2gKKwlORUVEU19MSUJHRU4gPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLElSSVg2NCkKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJIyBXaGVuIGNvbXBpbGVkIHdpdGggdGhlIE1JUFNwcm8gNy40LjRtIGNvbXBpbGVyLCBhbmQgd2l0aG91dCBwdGhyZWFkcworCSMgKGkuZS4gTk9fUFRIUkVBRFMgaXMgc2V0KSwgYW5kIF93aXRoXyBNTUFQIChpLmUuIE5PX01NQVAgaXMgbm90IHNldCksCisJIyBnaXQgZGllcyB3aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyB0aGUgZmlyc3QKKwkjIGVudHJ5IG9mIGEgcmVmbG9nLiAgVGhlIGNvbnNlcnZhdGl2ZSBjaG9pY2UgaXMgbWFkZSB0byBhbHdheXMgc2V0CisJIyBOT19NTUFQLiAgSWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIGNvbXBpbGVyIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzCisJIyBpc3N1ZSwgY29tbWVudCBvdXQgdGhlIE5PX01NQVAgc3RhdGVtZW50LgorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCVNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9nbnUvYmluL2Jhc2gKKwlORUVEU19MSUJHRU4gPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLEhQLVVYKQorCUlOTElORSA9IF9faW5saW5lCisJTk9fSVBWNiA9IFllc1BsZWFzZQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJTk9fU1lTX1NFTEVDVF9IID0gWWVzUGxlYXNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlpZmVxICgkKHVuYW1lX1IpLEIuMTEuMDApCisJCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQorCQlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwllbmRpZgorCWlmZXEgKCQodW5hbWVfUiksQi4xMC4yMCkKKwkJIyBPdmVycmlkZSBIUC1VWCAxMS54IHNldHRpbmc6CisJCUlOTElORSA9CisJCVNPQ0tMRU5fVCA9IHNpemVfdAorCQlOT19QUkVBRCA9IFllc1BsZWFzZQorCQlOT19JTkVUX05UT1AgPSBZZXNQbGVhc2UKKwkJTk9fSU5FVF9QVE9OID0gWWVzUGxlYXNlCisJZW5kaWYKKwlHSVRfVEVTVF9DTVAgPSBjbXAKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLFdpbmRvd3MpCisJR0lUX1ZFUlNJT04gOj0gJChHSVRfVkVSU0lPTikuTVNWQworCXBhdGhzZXAgPSA7CisJIyBBc3N1bWUgdGhhdCB0aGlzIGlzIGJ1aWx0IGluIEdpdCBmb3IgV2luZG93cycgU0RLCisJaWZlcSAoTUlOR1czMiwkKE1TWVNURU0pKQorCQlwcmVmaXggPSAvbWluZ3czMgorCWVsc2UKKwkJcHJlZml4ID0gL21pbmd3NjQKKwllbmRpZgorCSMgUHJlcGVuZCBNU1ZDIDY0LWJpdCB0b29sLWNoYWluIHRvIFBBVEguCisJIworCSMgQSByZWd1bGFyIEdpdCBCYXNoICpkb2VzIG5vdCogaGF2ZSBjbC5leGUgaW4gaXRzICRQQVRILiBBcyB0aGVyZSBpcyBhCisJIyBsaW5rLmV4ZSBuZXh0IHRvLCBhbmQgcmVxdWlyZWQgYnksIGNsLmV4ZSwgd2UgaGF2ZSB0byBwcmVwZW5kIHRoaXMKKwkjIG9udG8gdGhlIGV4aXN0aW5nICRQQVRILgorCSMKKwlTQU5FX1RPT0xfUEFUSCA/PSAkKG1zdmNfYmluX2Rpcl9tc3lzKQorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19QUkVBRCA9IFllc1BsZWFzZQorCU5FRURTX0NSWVBUT19XSVRIX1NTTCA9IFllc1BsZWFzZQorCU5PX0xJQkdFTl9IID0gWWVzUGxlYXNlCisJTk9fUE9MTCA9IFllc1BsZWFzZQorCU5PX1NZTUxJTktfSEVBRCA9IFllc1BsZWFzZQorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19VTklYX1NPQ0tFVFMgPSBZZXNQbGVhc2UKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX0lOVFRZUEVTX0ggPSBZZXNQbGVhc2UKKwkjIFZTMjAxNSB3aXRoIFVDUlQgY2xhaW1zIHRoYXQgc25wcmludGYgYW5kIGZyaWVuZHMgYXJlIEM5OSBjb21wbGlhbnQsCisJIyBzbyB3ZSBkb24ndCBuZWVkIHRoaXM6CisJIworCSMgICBTTlBSSU5URl9SRVRVUk5TX0JPR1VTID0gWWVzUGxlYXNlCisJTk9fU1ZOX1RFU1RTID0gWWVzUGxlYXNlCisJUlVOVElNRV9QUkVGSVggPSBZZXNQbGVhc2UKKwlIQVZFX1dQR01QVFIgPSBZZXNXZURvCisJTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUID0gWWVzUGxlYXNlCisJVVNFX1dJTjMyX01NQVAgPSBZZXNQbGVhc2UKKwlNTUFQX1BSRVZFTlRTX0RFTEVURSA9IFVuZm9ydHVuYXRlbHlZZXMKKwkjIFVTRV9ORURfQUxMT0NBVE9SID0gWWVzUGxlYXNlCisJVU5SRUxJQUJMRV9GU1RBVCA9IFVuZm9ydHVuYXRlbHlZZXMKKwlPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTID0gVW5mb3J0dW5hdGVseU5lZWRzVG8KKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCU5PX0dFVFRFWFQgPSBZZXNQbGVhc2UKKwlOT19QWVRIT04gPSBZZXNQbGVhc2UKKwlFVEFHU19UQVJHRVQgPSBFVEFHUworCU5PX1BPU0lYX0dPT0RJRVMgPSBVbmZvcnR1bmF0ZWx5WWVzCisJTkFUSVZFX0NSTEYgPSBZZXNQbGVhc2UKKwlERUZBVUxUX0hFTFBfRk9STUFUID0gaHRtbAorCisJQ0MgPSBjb21wYXQvdmNidWlsZC9zY3JpcHRzL2NsaW5rLnBsCisJQVIgPSBjb21wYXQvdmNidWlsZC9zY3JpcHRzL2xpYi5wbAorCUNGTEFHUyA9CisJQkFTSUNfQ0ZMQUdTID0gLW5vbG9nbyAtSS4gLUljb21wYXQvdmNidWlsZC9pbmNsdWRlIC1EV0lOMzIgLURfQ09OU09MRSAtREhBVkVfU1RSSU5HX0ggLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUKKwlDT01QQVRfT0JKUyA9IGNvbXBhdC9tc3ZjLm8gY29tcGF0L3dpbmFuc2kubyBcCisJCWNvbXBhdC93aW4zMi9wYXRoLXV0aWxzLm8gXAorCQljb21wYXQvd2luMzIvcHRocmVhZC5vIGNvbXBhdC93aW4zMi9zeXNsb2cubyBcCisJCWNvbXBhdC93aW4zMi90cmFjZTJfd2luMzJfcHJvY2Vzc19pbmZvLm8gXAorCQljb21wYXQvd2luMzIvZGlyZW50Lm8KKwlDT01QQVRfQ0ZMQUdTID0gLURfX1VTRV9NSU5HV19BQ0NFU1MgLURERVRFQ1RfTVNZU19UVFkgLUROT0dESSAtREhBVkVfU1RSSU5HX0ggLUljb21wYXQgLUljb21wYXQvcmVnZXggLUljb21wYXQvd2luMzIgLURTVFJJUF9FWFRFTlNJT049XCIuZXhlXCIKKwlCQVNJQ19MREZMQUdTID0gLUlHTk9SRTo0MjE3IC1JR05PUkU6NDA0OSAtTk9MT0dPIC1FTlRSWTp3bWFpbkNSVFN0YXJ0dXAgLVNVQlNZU1RFTTpDT05TT0xFCisJIyBpbnZhbGlkY29udGludWUub2JqIGFsbG93cyBHaXQncyBzb3VyY2UgY29kZSB0byBjbG9zZSB0aGUgc2FtZSBmaWxlCisJIyBoYW5kbGUgdHdpY2UsIG9yIHRvIGFjY2VzcyB0aGUgb3NmaGFuZGxlIG9mIGFuIGFscmVhZHktY2xvc2VkIHN0ZG91dAorCSMgU2VlIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMyMzUzMzAuYXNweAorCUVYVExJQlMgPSB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiB3aW5pbmV0LmxpYiB3czJfMzIubGliIGludmFsaWRjb250aW51ZS5vYmoga2VybmVsMzIubGliIG50ZGxsLmxpYgorCVBUSFJFQURfTElCUyA9CisJbGliID0KKwlCQVNJQ19DRkxBR1MgKz0gJCh2Y3BrZ19pbmMpICQoc2RrX2luY2x1ZGVzKSAkKG1zdmNfaW5jbHVkZXMpCitpZm5kZWYgREVCVUcKKwlCQVNJQ19DRkxBR1MgKz0gJCh2Y3BrZ19yZWxfbGliKQorZWxzZQorCUJBU0lDX0NGTEFHUyArPSAkKHZjcGtnX2RiZ19saWIpCitlbmRpZgorCUJBU0lDX0NGTEFHUyArPSAkKHNka19saWJzKSAkKG1zdmNfbGlicykKKworaWZuZXEgKCQoVVNFX01TVkNfQ1JUREJHKSwpCisJIyBPcHRpb25hbGx5IGVuYWJsZSBtZW1vcnkgbGVhayByZXBvcnRpbmcuCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX01TVkNfQ1JUREJHCitlbmRpZgorCSMgQWx3YXlzIGdpdmUgIi1aaSIgdG8gdGhlIGNvbXBpbGVyIGFuZCAiLWRlYnVnIiB0byBsaW5rZXIgKGV2ZW4gaW4KKwkjIHJlbGVhc2UgbW9kZSkgdG8gZm9yY2UgYSBQREIgdG8gYmUgZ2VuZXJhdGVkIChsaWtlIFJlbFdpdGhEZWJJbmZvKS4KKwlCQVNJQ19DRkxBR1MgKz0gLVppCisJQkFTSUNfTERGTEFHUyArPSAtZGVidWcgLVpmCisKK2lmZGVmIE5PX1NBRkVTRUgKKwlMREZMQUdTICs9IC1TQUZFU0VIOk5PCitlbmRpZgorCitpZm5kZWYgREVCVUcKKwlCQVNJQ19DRkxBR1MgKz0gLUdMIC1HeSAtTzIgLU95LSAtTUQgLUROREVCVUcKKwlCQVNJQ19MREZMQUdTICs9IC1yZWxlYXNlIC1MVENHIC9PUFQ6UkVGIC9PUFQ6SUNGIC9JTkNSRU1FTlRBTDpOTyAvREVCVUdUWVBFOkNWLEZJWFVQCisJQVIgKz0gLUxUQ0cKK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLU1EZCAtRERFQlVHIC1EX0RFQlVHCitlbmRpZgorCVggPSAuZXhlCisKK2NvbXBhdC9tc3ZjLm86IGNvbXBhdC9tc3ZjLmMgY29tcGF0L21pbmd3LmMgR0lULUNGTEFHUworZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksSW50ZXJpeCkKKwlOT19JTklUR1JPVVBTID0gWWVzUGxlYXNlCisJTk9fSVBWNiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJaWZlcSAoJCh1bmFtZV9SKSwzLjUpCisJCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQorCQlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwkJTk9fU09DS0FERFJfU1RPUkFHRSA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSw1LjIpCisJCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQorCQlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwkJTk9fU09DS0FERFJfU1RPUkFHRSA9IFllc1BsZWFzZQorCWVuZGlmCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxNaW5peCkKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQorCU5FRURTX0xJQkdFTiA9CisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJTkVFRFNfUkVTT0xWID0KKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19NTUFQID0gWWVzUGxlYXNlCisJTk9fQ1VSTCA9CisJTk9fRVhQQVQgPQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksTk9OU1RPUF9LRVJORUwpCisJIyBOZWVkcyBzb21lIEM5OSBmZWF0dXJlcywgImlubGluZSIgaXMganVzdCBvbmUgb2YgdGhlbS4KKwkjIElOTElORT0nJyB3b3VsZCBqdXN0IHJlcGxhY2Ugb25lIHNldCBvZiB3YXJuaW5ncyB3aXRoIGFub3RoZXIgYW5kCisJIyBzdGlsbCBub3QgY29tcGlsZSBpbiBjODkgbW9kZSwgZHVlIHRvIG5vbi1jb25zdCBhcnJheSBpbml0aWFsaXphdGlvbnMuCisJQ0MgPSBjYyAtYzk5CisJIyBCdWlsZCBkb3duLXJldiBjb21wYXRpYmxlIG9iamVjdHMgdGhhdCBkb24ndCB1c2Ugb3VyIG5ldyBnZXRvcHRfbG9uZy4KKwlpZmVxICgkKHVuYW1lX1IpLiQodW5hbWVfViksSjA2LjIxKQorCQlDQyArPSAtV1JWVT1KMDYuMjAKKwllbmRpZgorCWlmZXEgKCQodW5hbWVfUikuJCh1bmFtZV9WKSxMMTcuMDIpCisJCUNDICs9IC1XUlZVPUwxNi4wNQorCWVuZGlmCisJIyBEaXNhYmxlIGFsbCBvcHRpbWl6YXRpb24sIHNlZW1zIHRvIHJlc3VsdCBpbiBiYWQgY29kZSwgd2l0aCAtTyBvciAtTzIKKwkjIG9yIGV2ZW4gLU8xIChkZWZhdWx0KSwgL3Vzci9sb2NhbC9saWJleGVjL2dpdC1jb3JlL2dpdC1wYWNrLW9iamVjdHMKKwkjIGFiZW5kcyBvbiAiZ2l0IHB1c2giLiBOZWVkcyBtb3JlIGludmVzdGlnYXRpb24uCisJQ0ZMQUdTID0gLWcgLU8wIC1XaW5saW5lCisJIyBXZSdkIHdhbnQgaXQgdG8gYmUgaGVyZS4KKwlwcmVmaXggPSAvdXNyL2xvY2FsCisJIyBwZXJsIGFuZCBweXRob24gbXVzdCBiZSBpbiAvdXNyL2JpbiBvbiBOb25TdG9wIC0gc3VwcGxpZWQgYnkgSFBFCisJIyB3aXRoIG9wZXJhdGluZyBzeXN0ZW0gaW4gdGhhdCBtYW5hZ2VkIGRpcmVjdG9yeS4KKwlQRVJMX1BBVEggPSAvdXNyL2Jpbi9wZXJsCisJUFlUSE9OX1BBVEggPSAvdXNyL2Jpbi9weXRob24KKwkjIFRoZSBjdXJyZW50IC91c3IvY29yZXV0aWxzL3JtIGF0IGxvd2VzdCBzdXBwb3J0IGxldmVsIGRvZXMgbm90IHdvcmsKKwkjIHdpdGggdGhlIGdpdCB0ZXN0IHN0cnVjdHVyZS4gTG9uZyBwYXRocyBhcyBpbgorCSMgJ3RyYXNoIGRpcmVjdG9yeS4uLicgY2F1c2Ugcm0gdG8gdGVybWluYXRlIHByZW1hdHVyZWx5IHdpdGhvdXQgZnVsbHkKKwkjIHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgYXQgT1MgcmVsZWFzZXMgSjA2LjIxIGFuZCBMMTcuMDIuCisJIyBEZWZhdWx0IHRvIHRoZSBvbGRlciBybSB1bnRpbCB0aG9zZSB0d28gcmVsZWFzZXMgYXJlIGRlcHJlY2F0ZWQuCisJUk0gPSAvYmluL3JtIC1mCisJIyBBcyBkZXRlY3RlZCBieSAnLi9jb25maWd1cmUnLgorCSMgTWlzc2RldGVjdGVkLCBoZW5jZSBjb21tZW50ZWQgb3V0LCBzZWUgYmVsb3cuCisJI05PX0NVUkwgPSBZZXNQbGVhc2UKKwkjIEFkZGVkIG1hbnVhbGx5LCBzZWUgYWJvdmUuCisJTkVFRFNfU1NMX1dJVEhfQ1VSTCA9IFllc1BsZWFzZQorCU5FRURTX0NSWVBUT19XSVRIX1NTTCA9IFllc1BsZWFzZQorCUhBVkVfREVWX1RUWSA9IFllc1BsZWFzZQorCUhBVkVfTElCQ0hBUlNFVF9IID0gWWVzUGxlYXNlCisJSEFWRV9TVFJJTkdTX0ggPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU5FRURTX0xJQklOVExfQkVGT1JFX0xJQklDT05WID0gWWVzUGxlYXNlCisJTk9fU1lTX1NFTEVDVF9IID0gVW5mb3J0dW5hdGVseVllcworCU5PX0RfVFlQRV9JTl9ESVJFTlQgPSBZZXNQbGVhc2UKKwlOT19HRVRURVhUID0gWWVzUGxlYXNlCisJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwkjIEN1cnJlbnRseSBsaWJpY29udi0xLjkuMS4KKwlPTERfSUNPTlYgPSBVbmZvcnR1bmF0ZWx5WWVzCisJTk9fUkVHRVggPSBOZWVkc1N0YXJ0RW5kCisJTk9fUFRIUkVBRFMgPSBVbmZvcnR1bmF0ZWx5WWVzCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgPSBVbmZvcnR1bmF0ZWx5WWVzCisKKwkjIE5vdCBkZXRlY3RlZCAobm9yIGNoZWNrZWQgZm9yKSBieSAnLi9jb25maWd1cmUnLgorCSMgV2UgZG9uJ3QgaGF2ZSBTQV9SRVNUQVJUIG9uIE5vblN0b3AsIHVuZm9ydHVuYWxldHkuCisJQ09NUEFUX0NGTEFHUyArPSAtRFNBX1JFU1RBUlQ9MAorCSMgQXBwYXJlbnRseSBuZWVkZWQgaW4gY29tcGF0L2ZubWF0Y2gvZm5tYXRjaC5jLgorCUNPTVBBVF9DRkxBR1MgKz0gLURIQVZFX1NUUklOR19IPTEKKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJTk9fUFJFQUQgPSBZZXNQbGVhc2UKKwlOT19NTUFQID0gWWVzUGxlYXNlCisJTk9fUE9MTCA9IFllc1BsZWFzZQorCU5PX0lOVFBUUl9UID0gVW5mb3J0dW5hdGVseVllcworCSMgQnVnIHJlcG9ydCAxMC0xMjA4MjItNDQ3NyBzdWJtaXR0ZWQgdG8gSFAgTm9uU3RvcCBkZXZlbG9wbWVudC4KKwlNS0RJUl9XT19UUkFJTElOR19TTEFTSCA9IFllc1BsZWFzZQorCSMgUkZFIDEwLTEyMDkxMi00NjkzIHN1Ym1pdHRlZCB0byBIUCBOb25TdG9wIGRldmVsb3BtZW50LgorCU5PX1NFVElUSU1FUiA9IFVuZm9ydHVuYXRlbHlZZXMKKwlTQU5FX1RPT0xfUEFUSCA9IC91c3IvY29yZXV0aWxzL2JpbjovdXNyL2xvY2FsL2JpbgorCVNIRUxMX1BBVEggPSAvdXNyL2NvcmV1dGlscy9iaW4vYmFzaAorZW5kaWYKK2lmbmVxICgsJChmaW5kc3RyaW5nIE1JTkdXLCQodW5hbWVfUykpKQorCXBhdGhzZXAgPSA7CisJSEFWRV9BTExPQ0FfSCA9IFllc1BsZWFzZQorCU5PX1BSRUFEID0gWWVzUGxlYXNlCisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJTk9fTElCR0VOX0ggPSBZZXNQbGVhc2UKKwlOT19QT0xMID0gWWVzUGxlYXNlCisJTk9fU1lNTElOS19IRUFEID0gWWVzUGxlYXNlCisJTk9fVU5JWF9TT0NLRVRTID0gWWVzUGxlYXNlCisJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX1NUUkxDUFkgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19TVk5fVEVTVFMgPSBZZXNQbGVhc2UKKwlSVU5USU1FX1BSRUZJWCA9IFllc1BsZWFzZQorCUhBVkVfV1BHTVBUUiA9IFllc1dlRG8KKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwlVU0VfV0lOMzJfTU1BUCA9IFllc1BsZWFzZQorCU1NQVBfUFJFVkVOVFNfREVMRVRFID0gVW5mb3J0dW5hdGVseVllcworCVVTRV9ORURfQUxMT0NBVE9SID0gWWVzUGxlYXNlCisJVU5SRUxJQUJMRV9GU1RBVCA9IFVuZm9ydHVuYXRlbHlZZXMKKwlPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTID0gVW5mb3J0dW5hdGVseU5lZWRzVG8KKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCU5PX1BZVEhPTiA9IFllc1BsZWFzZQorCUVUQUdTX1RBUkdFVCA9IEVUQUdTCisJTk9fUE9TSVhfR09PRElFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlERUZBVUxUX0hFTFBfRk9STUFUID0gaHRtbAorCUJBU0lDX0xERkxBR1MgKz0gLW11bmljb2RlCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PR0RJIC1JY29tcGF0IC1JY29tcGF0L3dpbjMyCisJQ09NUEFUX0NGTEFHUyArPSAtRFNUUklQX0VYVEVOU0lPTj1cIi5leGVcIgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9taW5ndy5vIGNvbXBhdC93aW5hbnNpLm8gXAorCQljb21wYXQvd2luMzIvdHJhY2UyX3dpbjMyX3Byb2Nlc3NfaW5mby5vIFwKKwkJY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMubyBcCisJCWNvbXBhdC93aW4zMi9wdGhyZWFkLm8gY29tcGF0L3dpbjMyL3N5c2xvZy5vIFwKKwkJY29tcGF0L3dpbjMyL2RpcmVudC5vCisJQkFTSUNfQ0ZMQUdTICs9IC1EV0lOMzIKKwlFWFRMSUJTICs9IC1sd3MyXzMyCisJR0lUTElCUyArPSBnaXQucmVzCisJUFRIUkVBRF9MSUJTID0KKwlSQyA9IHdpbmRyZXMgLU8gY29mZgorCU5BVElWRV9DUkxGID0gWWVzUGxlYXNlCisJWCA9IC5leGUKK2lmbmVxICgsJCh3aWxkY2FyZCAuLi9USElTX0lTX01TWVNHSVQpKQorCWh0bWxkaXIgPSBkb2MvZ2l0L2h0bWwvCisJcHJlZml4ID0KKwlJTlNUQUxMID0gL2Jpbi9pbnN0YWxsCisJRVhUTElCUyArPSAvbWluZ3cvbGliL2xpYnouYQorCU5PX1JfVE9fR0NDX0xJTktFUiA9IFllc1BsZWFzZQorCUlOVEVSTkFMX1FTT1JUID0gWWVzUGxlYXNlCisJSEFWRV9MSUJDSEFSU0VUX0ggPSBZZXNQbGVhc2UKKwlOT19HRVRURVhUID0gWWVzUGxlYXNlCisJQ09NUEFUX0NGTEFHUyArPSAtRF9fVVNFX01JTkdXX0FDQ0VTUworZWxzZQorCWlmbmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJzFcLicpLDIpCisJCSMgTVN5czIKKwkJcHJlZml4ID0gL3Vzci8KKwkJIyBFbmFibGUgREVQCisJCUJBU0lDX0xERkxBR1MgKz0gLVdsLC0tbnhjb21wYXQKKwkJIyBFbmFibGUgQVNMUiAodW5sZXNzIGRlYnVnZ2luZykKKwkJaWZuZXEgKCwkKGZpbmRzdHJpbmcgLU8sJChmaWx0ZXItb3V0IC1PMCAtT2csJChDRkxBR1MpKSkpCisJCQlCQVNJQ19MREZMQUdTICs9IC1XbCwtLWR5bmFtaWNiYXNlCisJCWVuZGlmCisJCWlmZXEgKE1JTkdXMzIsJChNU1lTVEVNKSkKKwkJCXByZWZpeCA9IC9taW5ndzMyCisJCQlIT1NUX0NQVSA9IGk2ODYKKwkJCUJBU0lDX0xERkxBR1MgKz0gLVdsLC0tcGljLWV4ZWN1dGFibGUsLWUsX21haW5DUlRTdGFydHVwCisJCWVuZGlmCisJCWlmZXEgKE1JTkdXNjQsJChNU1lTVEVNKSkKKwkJCXByZWZpeCA9IC9taW5ndzY0CisJCQlIT1NUX0NQVSA9IHg4Nl82NAorCQkJQkFTSUNfTERGTEFHUyArPSAtV2wsLS1waWMtZXhlY3V0YWJsZSwtZSxtYWluQ1JUU3RhcnR1cAorCQllbHNlCisJCQlDT01QQVRfQ0ZMQUdTICs9IC1EX1VTRV8zMkJJVF9USU1FX1QKKwkJCUJBU0lDX0xERkxBR1MgKz0gLVdsLC0tbGFyZ2UtYWRkcmVzcy1hd2FyZQorCQllbmRpZgorCQlDQyA9IGdjYworCQlDT01QQVRfQ0ZMQUdTICs9IC1EX19VU0VfTUlOR1dfQU5TSV9TVERJTz0wIC1EREVURUNUX01TWVNfVFRZIFwKKwkJCS1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZworCQlFWFRMSUJTICs9IC1sbnRkbGwKKwkJSU5TVEFMTCA9IC9iaW4vaW5zdGFsbAorCQlOT19SX1RPX0dDQ19MSU5LRVIgPSBZZXNQbGVhc2UKKwkJSU5URVJOQUxfUVNPUlQgPSBZZXNQbGVhc2UKKwkJSEFWRV9MSUJDSEFSU0VUX0ggPSBZZXNQbGVhc2UKKwkJTk9fR0VUVEVYVCA9CisJCVVTRV9HRVRURVhUX1NDSEVNRSA9IGZhbGx0aHJvdWdoCisJCVVTRV9MSUJQQ1JFPSBZZXNQbGVhc2UKKwkJTk9fTElCUENSRTFfSklUID0gVW5mb3J0dW5hdGVseVllcworCQlOT19DVVJMID0KKwkJVVNFX05FRF9BTExPQ0FUT1IgPSBZZXNQbGVhc2UKKwllbHNlCisJCUNPTVBBVF9DRkxBR1MgKz0gLURfX1VTRV9NSU5HV19BTlNJX1NURElPCisJCU5PX0NVUkwgPSBZZXNQbGVhc2UKKwllbmRpZgorZW5kaWYKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLFFOWCkKKwlDT01QQVRfQ0ZMQUdTICs9IC1EU0FfUkVTVEFSVD0wCisJRVhQQVRfTkVFRFNfWE1MUEFSU0VfSCA9IFllc1BsZWFzZQorCUhBVkVfU1RSSU5HU19IID0gWWVzUGxlYXNlCisJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCisJTk9fR0VUUEFHRVNJWkUgPSBZZXNQbGVhc2UKKwlOT19JQ09OViA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJTk9fUFRIUkVBRFMgPSBZZXNQbGVhc2UKKwlOT19SX1RPX0dDQ19MSU5LRVIgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorZW5kaWYKKwordmN4cHJvajoKKwkjIFJlcXVpcmUgY2xlYW4gd29yayB0cmVlCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2ggJiYgXAorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYgXAorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAtLQorCisJIyBNYWtlIC52Y3hwcm9qIGZpbGVzIGFuZCBhZGQgdGhlbQorCXVuc2V0IFFVSUVUX0dFTiBRVUlFVF9CVUlMVF9JTjsgXAorCXBlcmwgY29udHJpYi9idWlsZHN5c3RlbXMvZ2VuZXJhdGUgLWcgVmN4cHJvagorCWdpdCBhZGQgLWYgZ2l0LnNsbiB7KiwqL2xpYix0L2hlbHBlci8qfS8qLnZjeHByb2oKKworCSMgR2VuZXJhdGUgdGhlIExpbmtPckNvcHlCdWlsdGlucy50YXJnZXRzIGFuZCBMaW5rT3JDb3B5UmVtb3RlSHR0cC50YXJnZXRzIGZpbGUKKwkoZWNobyAnPFByb2plY3QgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+JyAmJiBcCisJIGVjaG8gJyAgPFRhcmdldCBOYW1lPSJDb3B5QnVpbHRpbnNfQWZ0ZXJCdWlsZCIgQWZ0ZXJUYXJnZXRzPSJBZnRlckJ1aWxkIj4nICYmIFwKKwkgZm9yIG5hbWUgaW4gJChCVUlMVF9JTlMpO1wKKwkgZG8gXAorCSAgIGVjaG8gJyAgICA8Q29weSBTb3VyY2VGaWxlcz0iJCQoT3V0RGlyKVxnaXQuZXhlIiBEZXN0aW5hdGlvbkZpbGVzPSIkJChPdXREaXIpXCciJCRuYW1lIiciIFNraXBVbmNoYW5nZWRGaWxlcz0idHJ1ZSIgVXNlSGFyZGxpbmtzSWZQb3NzaWJsZT0idHJ1ZSIgLz4nOyBcCisJIGRvbmUgJiYgXAorCSBlY2hvICcgIDwvVGFyZ2V0PicgJiYgXAorCSBlY2hvICc8L1Byb2plY3Q+JykgPmdpdC9MaW5rT3JDb3B5QnVpbHRpbnMudGFyZ2V0cworCShlY2hvICc8UHJvamVjdCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4nICYmIFwKKwkgZWNobyAnICA8VGFyZ2V0IE5hbWU9IkNvcHlCdWlsdGluc19BZnRlckJ1aWxkIiBBZnRlclRhcmdldHM9IkFmdGVyQnVpbGQiPicgJiYgXAorCSBmb3IgbmFtZSBpbiAkKFJFTU9URV9DVVJMX0FMSUFTRVMpOyBcCisJIGRvIFwKKwkgICBlY2hvICcgICAgPENvcHkgU291cmNlRmlsZXM9IiQkKE91dERpcilcJyIkKFJFTU9URV9DVVJMX1BSSU1BUlkpIiciIERlc3RpbmF0aW9uRmlsZXM9IiQkKE91dERpcilcJyIkJG5hbWUiJyIgU2tpcFVuY2hhbmdlZEZpbGVzPSJ0cnVlIiBVc2VIYXJkbGlua3NJZlBvc3NpYmxlPSJ0cnVlIiAvPic7IFwKKwkgZG9uZSAmJiBcCisJIGVjaG8gJyAgPC9UYXJnZXQ+JyAmJiBcCisJIGVjaG8gJzwvUHJvamVjdD4nKSA+Z2l0LXJlbW90ZS1odHRwL0xpbmtPckNvcHlSZW1vdGVIdHRwLnRhcmdldHMKKwlnaXQgYWRkIC1mIGdpdC9MaW5rT3JDb3B5QnVpbHRpbnMudGFyZ2V0cyBnaXQtcmVtb3RlLWh0dHAvTGlua09yQ29weVJlbW90ZUh0dHAudGFyZ2V0cworCisJIyBBZGQgY29tbWFuZC1saXN0LmgKKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0IGNvbW1hbmQtbGlzdC5oCisJZ2l0IGFkZCAtZiBjb21tYW5kLWxpc3QuaAorCisJIyBBZGQgc2NyaXB0cworCXJtIC1mIHBlcmwvcGVybC5tYWsKKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0ICQoU0NSSVBUX0xJQikgJChTQ1JJUFRTKQorCSMgU3RyaXAgb3V0IHRoZSBzYW5lIHRvb2wgcGF0aCwgbmVlZGVkIG9ubHkgZm9yIGJ1aWxkaW5nCisJc2VkIC1pICcvXmdpdF9icm9rZW5fcGF0aF9maXggIi4qL2QnIGdpdC1zaC1zZXR1cAorCWdpdCBhZGQgLWYgJChTQ1JJUFRfTElCKSAkKFNDUklQVFMpCisKKwkjIEFkZCBQZXJsIG1vZHVsZQorCSQoTUFLRSkgJChMSUJfUEVSTF9HRU4pCisJZ2l0IGFkZCAtZiBwZXJsL2J1aWxkCisKKwkjIEFkZCBiaW4td3JhcHBlcnMsIGZvciB0ZXN0aW5nCisJcm0gLXJmIGJpbi13cmFwcGVycy8KKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0ICQodGVzdF9iaW5kaXJfcHJvZ3JhbXMpCisJIyBFbnN1cmUgdGhhdCB0aGUgR0lUX0VYRUNfUEFUSCBpcyBhIFVuaXgteSBvbmUsIGFuZCB0aGF0IHRoZSBhYnNvbHV0ZQorCSMgcGF0aCBvZiB0aGUgcmVwb3NpdG9yeSBpcyBub3QgaGFyZC1jb2RlZCAoR0lUX0VYRUNfUEFUSCB3aWxsIGJlIHNldAorCSMgYnkgdGVzdC1saWIuc2ggYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHNldHVwKQorCXNlZCAtaSAtZSAncy9eXChHSVRfRVhFQ19QQVRIXCk9LiovdGVzdCAtbiAiJCR7XDEjIyo6Kn0iIHx8XAorCQkJXDE9IiQkKGN5Z3BhdGggLXUgIiQkXDEiKSIvJyBcCisJCS1lICJzfCckJChwd2QpfFwiXCQkR0lUX0VYRUNfUEFUSFwiJ3xnIiBiaW4td3JhcHBlcnMvKgorCSMgRW5zdXJlIHRoYXQgdGVzdC0qIGhlbHBlcnMgZmluZCB0aGUgLmRsbCBmaWxlcyBjb3BpZWQgdG8gdG9wLWxldmVsCisJc2VkIC1pICdzfF5QQVRIPS4qfCY6IiQkR0lUX0VYRUNfUEFUSCJ8JyBiaW4td3JhcHBlcnMvdGVzdC0qCisJIyBXZSBkbyBub3Qgd2FudCB0byBmb3JjZSBoYXJkLWxpbmtpbmcgYnVpbHRpbnMKKwlzZWQgLWkgJ3N8XChnaXRcKS1cKFstYS16XSpcKVwuZXhlInxcMS5leGUiIFwyfGcnIFwKKwkJYmluLXdyYXBwZXJzL2dpdC17cmVjZWl2ZS1wYWNrLHVwbG9hZC1hcmNoaXZlfQorCWdpdCBhZGQgLWYgJCh0ZXN0X2JpbmRpcl9wcm9ncmFtcykKKwkjIHJlbW90ZS1leHQgaXMgYSBidWlsdGluLCBidXQgaW52b2tlZCBhcyBpZiBpdCB3ZXJlIGV4dGVybmFsCisJc2VkICdzfHJlY2VpdmUtcGFja3xyZW1vdGUtZXh0fGcnIFwKKwkJPGJpbi13cmFwcGVycy9naXQtcmVjZWl2ZS1wYWNrID5iaW4td3JhcHBlcnMvZ2l0LXJlbW90ZS1leHQKKwlnaXQgYWRkIC1mIGJpbi13cmFwcGVycy9naXQtcmVtb3RlLWV4dAorCisJIyBBZGQgdGVtcGxhdGVzCisJJChNQUtFKSAtQyB0ZW1wbGF0ZXMKKwlnaXQgYWRkIC1mIHRlbXBsYXRlcy9ib2lsZXJwbGF0ZXMubWFkZSB0ZW1wbGF0ZXMvYmx0LworCisJIyBBZGQgdGhlIHRyYW5zbGF0ZWQgbWVzc2FnZXMKKwltYWtlIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0ICQoTU9GSUxFUykKKwlnaXQgYWRkIC1mICQoTU9GSUxFUykKKworCSMgQWRkIGJ1aWxkIG9wdGlvbnMKKwkkKE1BS0UpIE1TVkM9MSBTS0lQX1ZDUEtHPTEgcHJlZml4PS9taW5ndzY0IEdJVC1CVUlMRC1PUFRJT05TCisJZ2l0IGFkZCAtZiBHSVQtQlVJTEQtT1BUSU9OUworCisJIyBDb21taXQgdGhlIHdob2xlIHNoZWJhbmcKKwlnaXQgY29tbWl0IC1tICJHZW5lcmF0ZSBWaXN1YWwgU3R1ZGlvIHNvbHV0aW9uIiBcCisJCS1tICJBdXRvLWdlbmVyYXRlZCBieSBcYCQoTUFLRSkkKE1BS0VGTEFHUykgJEBcYCIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmFlZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMTMyNyBAQAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorCisjIyBEZWZpbml0aW9ucyBvZiBwcml2YXRlIG1hY3Jvcy4KKworIyBHSVRfQ09ORl9TVUJTVChWQUwsIFZBUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhdXNlIHRoZSBsaW5lICJWQVI9VkFMIiB0byBiZSBldmVudHVhbGx5IGFwcGVuZGVkIHRvICR7Y29uZmlnX2ZpbGV9LgorQUNfREVGVU4oW0dJVF9DT05GX1NVQlNUXSwKK1tBQ19SRVFVSVJFKFtHSVRfQ09ORl9TVUJTVF9JTklUXSkKK2NvbmZpZ19hcHBlbmRlZF9kZWZzPSIkY29uZmlnX2FwcGVuZGVkX2RlZnMke25ld2xpbmV9ZG5sCiskMT1tNF9pZihbJCNdLFsxXSxbJHskMX1dLFskMl0pIl0pCisKKyMgR0lUX0NPTkZfU1VCU1RfSU5JVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXBhcmUgc2hlbGwgdmFyaWFibGVzIGFuZCBhdXRvY29uZiBtYWNoaW5lIHJlcXVpcmVkIGJ5IGxhdGVyIGNhbGxzCisjIHRvIEdJVF9DT05GX1NVQlNULgorQUNfREVGVU4oW0dJVF9DT05GX1NVQlNUX0lOSVRdLAorICAgIFtjb25maWdfYXBwZW5kZWRfZGVmcz07IG5ld2xpbmU9JworJworICAgIEFDX0NPTkZJR19DT01NQU5EUyhbJGNvbmZpZ19maWxlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgW2VjaG8gIiRjb25maWdfYXBwZW5kZWRfZGVmcyIgPj4gIiRjb25maWdfZmlsZSJdLAorICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnX2ZpbGU9JGNvbmZpZ19maWxlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfYXBwZW5kZWRfZGVmcz0iJGNvbmZpZ19hcHBlbmRlZF9kZWZzIl0pXSkKKworIyBHSVRfQVJHX1NFVF9QQVRIKFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvdmlkZSAtLXdpdGgtUFJPR1JBTT1QQVRIIG9wdGlvbiB0byBzZXQgUEFUSCB0byBQUk9HUkFNCisjIE9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBhbGxvd3Mgc2V0dGluZyBOT19QUk9HUkFNPVllc1BsZWFzZSBpZgorIyAtLXdpdGhvdXQtUFJPR1JBTSB2ZXJzaW9uIHVzZWQuCitBQ19ERUZVTihbR0lUX0FSR19TRVRfUEFUSF0sCisgICAgW0FDX0FSR19XSVRIKFskMV0sCisgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLSQxPVBBVEhdLAorICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3ZpZGUgUEFUSCB0byAkMV0pXSwKKyAgICAgICAgW0dJVF9DT05GX0FQUEVORF9QQVRIKFskMV0sIFskMl0pXSwKKyAgICAgICAgW10pXSkKKworIyBHSVRfQ09ORl9BUFBFTkRfUEFUSChQUk9HUkFNKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJzZSAtLXdpdGgtUFJPR1JBTT1QQVRIIG9wdGlvbiB0byBzZXQgUFJPR1JBTV9QQVRIPVBBVEgKKyMgVXNlZCBieSBHSVRfQVJHX1NFVF9QQVRIKFBST0dSQU0pCisjIE9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBhbGxvd3Mgc2V0dGluZyBOT19QUk9HUkFNPVllc1BsZWFzZSBpZgorIyAtLXdpdGhvdXQtUFJPR1JBTSBpcyB1c2VkLgorQUNfREVGVU4oW0dJVF9DT05GX0FQUEVORF9QQVRIXSwKKyAgICBbbTRfcHVzaGRlZihbR0lUX1VDX1BST0dSQU1dLCBtNF90b3VwcGVyKFskMV0pKWRubAorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkMiI7IHRoZW4KKwkJR0lUX1VDX1BST0dSQU1bXV9QQVRIPSR3aXRodmFsCisJCUFDX01TR19OT1RJQ0UoW0Rpc2FibGluZyB1c2Ugb2YgR0lUX1VDX1BST0dSQU1dKQorCQlHSVRfQ09ORl9TVUJTVChbTk9fXUdJVF9VQ19QUk9HUkFNLCBbWWVzUGxlYXNlXSkKKwkJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BST0dSQU1bXV9QQVRILCBbXSkKKwllbHNlCisJCUFDX01TR19FUlJPUihbWW91IGNhbm5vdCB1c2UgZ2l0IHdpdGhvdXQgJDFdKQorCWZpCisgICAgZWxzZQorCWlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJCUFDX01TR19XQVJOKFtZb3Ugc2hvdWxkIHByb3ZpZGUgcGF0aCBmb3IgLS13aXRoLSQxPVBBVEhdKQorCWVsc2UKKwkJR0lUX1VDX1BST0dSQU1bXV9QQVRIPSR3aXRodmFsCisJCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgR0lUX1VDX1BST0dSQU1bXV9QQVRIIHRvICR3aXRodmFsXSkKKwkJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BST0dSQU1bXV9QQVRILCBbJHdpdGh2YWxdKQorCWZpCisgICAgZmkKKyAgICBtNF9wb3BkZWYoW0dJVF9VQ19QUk9HUkFNXSldKQorCisjIEdJVF9QQVJTRV9XSVRIKFBBQ0tBR0UpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvciB1c2UgaW4gQUNfQVJHX1dJVEggYWN0aW9uLWlmLWZvdW5kLCBmb3IgcGFja2FnZXMgZGVmYXVsdCBPTi4KKyMgKiBTZXQgTk9fUEFDS0FHRT1ZZXNQbGVhc2UgZm9yIC0td2l0aG91dC1QQUNLQUdFCisjICogU2V0IFBBQ0tBR0VESVI9UEFUSCBmb3IgLS13aXRoLVBBQ0tBR0U9UEFUSAorIyAqIFVuc2V0IE5PX1BBQ0tBR0UgZm9yIC0td2l0aC1QQUNLQUdFIHdpdGhvdXQgQVJHCitBQ19ERUZVTihbR0lUX1BBUlNFX1dJVEhdLAorICAgIFttNF9wdXNoZGVmKFtHSVRfVUNfUEFDS0FHRV0sIG00X3RvdXBwZXIoWyQxXSkpZG5sCisgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9WWVzUGxlYXNlCisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9CisgICAgZWxzZQorCU5PX1tdR0lUX1VDX1BBQ0tBR0U9CisJR0lUX1VDX1BBQ0tBR0VbXURJUj0kd2l0aHZhbAorCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgR0lUX1VDX1BBQ0tBR0VbXURJUiB0byAkd2l0aHZhbF0pCisJR0lUX0NPTkZfU1VCU1QoR0lUX1VDX1BBQ0tBR0VbRElSXSwgWyR3aXRodmFsXSkKKyAgICBmaQorICAgIG00X3BvcGRlZihbR0lUX1VDX1BBQ0tBR0VdKV0pCisKKyMgR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKFdJVEhOQU1FLCBWQVIsIEhFTFBfVEVYVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IFZBUiB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IC0td2l0aC1XSVRITkFNRS4KKyMgTm8gdmVyaWZpY2F0aW9uIG9mIGFyZ3VtZW50cyBpcyBwZXJmb3JtZWQsIGJ1dCB3YXJuaW5ncyBhcmUgaXNzdWVkCisjIGlmIGVpdGhlciAneWVzJyBvciAnbm8nIGlzIHNwZWNpZmllZC4KKyMgSEVMUF9URVhUIGlzIHByZXNlbnRlZCB3aGVuIC0taGVscCBpcyBjYWxsZWQuCisjIFRoaXMgaXMgYSBkaXJlY3Qgd2F5IHRvIGFsbG93IHNldHRpbmcgdmFyaWFibGVzIGluIHRoZSBNYWtlZmlsZS4KK0FDX0RFRlVOKFtHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVJdLAorW0FDX0FSR19XSVRIKFskMV0sCisgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtJDE9VkFMVUVdLCAkMyldLAorIGlmIHRlc3QgLW4gIiR3aXRodmFsIjsgdGhlbgorICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIiAtbyAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorICAgIEFDX01TR19XQVJOKFtZb3UgbGlrZWx5IGRvIG5vdCB3YW50IGVpdGhlciAneWVzJyBvciAnbm8nIGFzXQorCQkgICAgIFthIHZhbHVlIGZvciAkMSAoJDIpLiAgTWF5YmUgeW91IGRvLi4uP10pCisgIGZpCisgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgJDIgdG8gJHdpdGh2YWxdKQorICBHSVRfQ09ORl9TVUJTVChbJDJdLCBbJHdpdGh2YWxdKQorIGZpKV0pIyBHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIKKworIworIyBHSVRfQ0hFQ0tfRlVOQyhGVU5DVElPTiwgSUZUUlVFLCBJRkZBTFNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaW1pbGFyIHRvIEFDX0NIRUNLX0ZVTkMsIGJ1dCBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGdlbmVyYXRlCisjIHdhcm5pbmdzIGZvciBtaXNzaW5nIHByb3RvdHlwZXMgKGUuZy4gRnJlZUJTRCB3aGVuIGNvbXBpbGluZyB3aXRob3V0CisjIC1XYWxsKSwgaXQgZG9lcyBub3Qgd29yay4gIEJ5IGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4KKyMgbGlicmFyaWVzLCB0aGlzIHByb2JsZW0gY2FuIGJlIHdvcmtlZCBhcm91bmQuCitBQ19ERUZVTihbR0lUX0NIRUNLX0ZVTkNdLFtBQ19DSEVDS19GVU5DKFskMV0sWworICBBQ19TRUFSQ0hfTElCUyhbJDFdLCwKKyAgWyQyXSxbJDNdKQorXSxbJDNdKV0pCisKKyMKKyMgR0lUX1NUQVNIX0ZMQUdTKEJBU0VQQVRIX1ZBUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsb3cgZm9yIGVhc3kgc3Rhc2hpbmcgb2YgTERGTEFHUyBhbmQgQ1BQRkxBR1MgYmVmb3JlIHJ1bm5pbmcKKyMgdGVzdHMgdGhhdCBtYXkgd2FudCB0byB0YWtlIHVzZXIgc2V0dGluZ3MgaW50byBhY2NvdW50LgorQUNfREVGVU4oW0dJVF9TVEFTSF9GTEFHU10sWworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICBvbGRfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgIG9sZF9MREZMQUdTPSIkTERGTEFHUyIKKyAgIENQUEZMQUdTPSItSSQxL2luY2x1ZGUgJENQUEZMQUdTIgorICAgTERGTEFHUz0iLUwkMS8kbGliICRMREZMQUdTIgorZmkKK10pCisKK2RubAorZG5sIEdJVF9VTlNUQVNIX0ZMQUdTKEJBU0VQQVRIX1ZBUikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFJlc3RvcmUgdGhlIHN0YXNoZWQgKkZMQUdTIHZhbHVlcy4KK0FDX0RFRlVOKFtHSVRfVU5TVEFTSF9GTEFHU10sWworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICBDUFBGTEFHUz0iJG9sZF9DUFBGTEFHUyIKKyAgIExERkxBR1M9IiRvbGRfTERGTEFHUyIKK2ZpCitdKQorCisjIyBDb25maWd1cmUgYm9keSBzdGFydHMgaGVyZS4KKworQUNfUFJFUkVRKDIuNTkpCitBQ19JTklUKFtnaXRdLCBbQEBHSVRfVkVSU0lPTkBAXSwgW2dpdEB2Z2VyLmtlcm5lbC5vcmddKQorCitBQ19DT05GSUdfU1JDRElSKFtnaXQuY10pCisKK2NvbmZpZ19maWxlPWNvbmZpZy5tYWsuYXV0b2dlbgorY29uZmlnX2luPWNvbmZpZy5tYWsuaW4KKworR0lUX0NPTkZfU1VCU1QoW0FVVE9DT05GSUdVUkVEXSwgW1llc1BsZWFzZV0pCisKKyMgRGlyZWN0b3JpZXMgaG9sZGluZyAic2FuZXIiIHZlcnNpb25zIG9mIGNvbW1vbiBvciBQT1NJWCBiaW5hcmllcy4KK0FDX0FSR19XSVRIKFtzYW5lLXRvb2wtcGF0aF0sCisgIFtBU19IRUxQX1NUUklORygKKyAgICBbLS13aXRoLXNhbmUtdG9vbC1wYXRoPURJUi0xW1s6RElSLTIuLi46RElSLW5dXV0sCisgICAgW0RpcmVjdG9yaWVzIHRvIHByZXBlbmQgdG8gUEFUSCBpbiBidWlsZCBzeXN0ZW0gYW5kIGdlbmVyYXRlZCBzY3JpcHRzXSldLAorICBbaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorICAgIHdpdGh2YWw9JycKKyAgZWxzZQorICAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgU0FORV9UT09MX1BBVEggdG8gJyR3aXRodmFsJ10pCisgIGZpCisgIEdJVF9DT05GX1NVQlNUKFtTQU5FX1RPT0xfUEFUSF0sIFskd2l0aHZhbF0pXSwKKyAgWyMgSWYgdGhlICItLXdpdGgtc2FuZS10b29sLXBhdGgiIG9wdGlvbiB3YXMgbm90IGdpdmVuLCBkb24ndCB0b3VjaAorICAgIyBTQU5FX1RPT0xfUEFUSCBoZXJlLCBidXQgbGV0IGRlZmF1bHRzIGluIE1ha2VmaWxlIHRha2UgY2FyZSBvZiBpdC4KKyAgICMgVGhpcyBzaG91bGQgbWluaW1pemUgc3B1cmlvdXMgZGlmZmVyZW5jZXMgaW4gdGhlIGJlaGF2aW91ciBvZiB0aGUKKyAgICMgR2l0IGJ1aWxkIHN5c3RlbSB3aGVuIGNvbmZpZ3VyZSBpcyB1c2VkIHcuci50LiB3aGVuIGl0IGlzIG5vdC4KKyAgIDpdKQorCisjIyBTaXRlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBwcm9ncmFtcyAoYmVmb3JlIHRlc3RzKQorIyMgLS13aXRoLVBBQ0tBR0VbPUFSR10gYW5kIC0td2l0aG91dC1QQUNLQUdFCisjCisjIFNldCBsaWIgdG8gYWx0ZXJuYXRpdmUgbmFtZSBvZiBsaWIgZGlyZWN0b3J5IChlLmcuIGxpYjY0KQorQUNfQVJHX1dJVEgoW2xpYl0sCisgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliPUFSR10sCisgICAgICAgICAgICAgICAgIFtBUkcgc3BlY2lmaWVzIGFsdGVybmF0aXZlIG5hbWUgZm9yIGxpYiBkaXJlY3RvcnldKV0sCisgW2lmIHRlc3QgIiR3aXRodmFsIiA9ICJubyIgfHwgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4KKwlBQ19NU0dfV0FSTihbWW91IHNob3VsZCBwcm92aWRlIG5hbWUgZm9yIC0td2l0aC1saWI9QVJHXSkKKyAgZWxzZQorCWxpYj0kd2l0aHZhbAorCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgbGliIHRvICckbGliJ10pCisJR0lUX0NPTkZfU1VCU1QoW2xpYl0pCisgIGZpXSkKKworaWYgdGVzdCAteiAiJGxpYiI7IHRoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgbGliIHRvICdsaWInICh0aGUgZGVmYXVsdCldKQorICAgbGliPWxpYgorZmkKKworQUNfQVJHX0VOQUJMRShbcHRocmVhZHNdLAorIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZHM9RkxBR1NdLAorICBbRkxBR1MgaXMgdGhlIHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNvbXBpbGVyIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzLl0KKyAgW1RoZSBkZWZhdWx0IGlmIEZMQUdTIGlzIG5vdCBzcGVjaWZpZWQgaXMgdG8gdHJ5IGZpcnN0IC1wdGhyZWFkXQorICBbYW5kIHRoZW4gLWxwdGhyZWFkLl0KKyAgWy0tZGlzYWJsZS1wdGhyZWFkcyB3aWxsIGRpc2FibGUgdGhyZWFkaW5nLl0pXSwKK1sKK2lmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgQUNfTVNHX05PVElDRShbV2lsbCB0cnkgLXB0aHJlYWQgdGhlbiAtbHB0aHJlYWQgdG8gZW5hYmxlIFBPU0lYIFRocmVhZHNdKQorZWxpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgIT0gInhubyI7IHRoZW4KKyAgIFBUSFJFQURfQ0ZMQUdTPSRlbmFibGV2YWwKKyAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgJyRQVEhSRUFEX0NGTEFHUycgYXMgdGhlIEZMQUdTIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzXSkKK2Vsc2UKKyAgIEFDX01TR19OT1RJQ0UoW1BPU0lYIFRocmVhZHMgd2lsbCBiZSBkaXNhYmxlZC5dKQorICAgTk9fUFRIUkVBRFM9WWVzUGxlYXNlCisgICBVU0VSX05PUFRIUkVBRD0xCitmaV0sCitbCisgICBBQ19NU0dfTk9USUNFKFtXaWxsIHRyeSAtcHRocmVhZCB0aGVuIC1scHRocmVhZCB0byBlbmFibGUgUE9TSVggVGhyZWFkcy5dKQorXSkKKworIyBEZWZpbmUgb3B0aW9uIHRvIGVuYWJsZSBKYXZhU2NyaXB0IG1pbmlmaWNhdGlvbgorQUNfQVJHX0VOQUJMRShbanNtaW5dLAorW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1qc21pbj1QQVRIXSwKKyAgW1BBVEggaXMgdGhlIG5hbWUgb2YgYSBKYXZhU2NyaXB0IG1pbmlmaWVyIG9yIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIG9uZS5dKV0sCitbCisgIEpTTUlOPSRlbmFibGV2YWw7CisgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgSlNNSU4gdG8gJyRKU01JTicgdG8gZW5hYmxlIEphdmFTY3JpcHQgbWluaWZ5aW5nXSkKKyAgR0lUX0NPTkZfU1VCU1QoW0pTTUlOXSkKK10pCisKKyMgRGVmaW5lIG9wdGlvbiB0byBlbmFibGUgQ1NTIG1pbmlmaWNhdGlvbgorQUNfQVJHX0VOQUJMRShbY3NzbWluXSwKK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY3NzbWluPVBBVEhdLAorICBbUEFUSCBpcyB0aGUgbmFtZSBvZiBhIENTUyBtaW5pZmllciBvciB0aGUgYWJzb2x1dGUgcGF0aCB0byBvbmUuXSldLAorWworICBDU1NNSU49JGVuYWJsZXZhbDsKKyAgQUNfTVNHX05PVElDRShbU2V0dGluZyBDU1NNSU4gdG8gJyRDU1NNSU4nIHRvIGVuYWJsZSBDU1MgbWluaWZ5aW5nXSkKKyAgR0lUX0NPTkZfU1VCU1QoW0NTU01JTl0pCitdKQorCisjIyBTaXRlIGNvbmZpZ3VyYXRpb24gKG92ZXJyaWRlIGF1dG9kZXRlY3Rpb24pCisjIyAtLXdpdGgtUEFDS0FHRVs9QVJHXSBhbmQgLS13aXRob3V0LVBBQ0tBR0UKK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3Igc2l0ZSBjb25maWd1cmF0aW9uXSkKKyMKKyMgRGVmaW5lIE5PX1NWTl9URVNUUyBpZiB5b3Ugd2FudCB0byBza2lwIHRpbWUtY29uc3VtaW5nIFNWTiBpbnRlcm9wZXJhYmlsaXR5CisjIHRlc3RzLiAgVGhlc2UgdGVzdHMgdGFrZSB1cCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aGUgdG90YWwgdGVzdCB0aW1lCisjIGJ1dCBhcmUgbm90IG5lZWRlZCB1bmxlc3MgeW91IHBsYW4gdG8gdGFsayB0byBTVk4gcmVwb3MuCisjCisjIERlZmluZSBQUENfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgorIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgUG93ZXJQQy4KKyMKKyMgRGVmaW5lIE5PX09QRU5TU0wgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91IGRvIG5vdCBoYXZlIE9wZW5TU0wuCisjCisjIERlZmluZSBPUEVOU1NMRElSPS9mb28vYmFyIGlmIHlvdXIgb3BlbnNzbCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KK0FDX0FSR19XSVRIKG9wZW5zc2wsCitBU19IRUxQX1NUUklORyhbLS13aXRoLW9wZW5zc2xdLFt1c2UgT3BlblNTTCBsaWJyYXJ5IChkZWZhdWx0IGlzIFlFUyldKQorQVNfSEVMUF9TVFJJTkcoW10sICAgICAgICAgICAgICBbQVJHIGNhbiBiZSBwcmVmaXggZm9yIG9wZW5zc2wgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorR0lUX1BBUlNFX1dJVEgoW29wZW5zc2xdKSkKKworIyBEZWZpbmUgVVNFX0xJQlBDUkUgaWYgeW91IGhhdmUgYW5kIHdhbnQgdG8gdXNlIGxpYnBjcmUuIFZhcmlvdXMKKyMgY29tbWFuZHMgc3VjaCBhcyBsb2cgYW5kIGdyZXAgb2ZmZXIgcnVudGltZSBvcHRpb25zIHRvIHVzZQorIyBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyBpbnN0ZWFkIG9mIHN0YW5kYXJkIG9yIGV4dGVuZGVkCisjIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisjCisjIFVTRV9MSUJQQ1JFIGlzIGEgc3lub255bSBmb3IgVVNFX0xJQlBDUkUyLCBkZWZpbmUgVVNFX0xJQlBDUkUxCisjIGluc3RlYWQgaWYgeW91J2QgbGlrZSB0byB1c2UgdGhlIGxlZ2FjeSB2ZXJzaW9uIDEgb2YgdGhlIFBDUkUKKyMgbGlicmFyeS4gU3VwcG9ydCBmb3IgdmVyc2lvbiAxIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQgaW4gc29tZSBmdXR1cmUKKyMgcmVsZWFzZSBvZiBHaXQsIGFzIHVwc3RyZWFtIGhhcyBhbGwgYnV0IGFiYW5kb25lZCBpdC4KKyMKKyMgRGVmaW5lIExJQlBDUkVESVI9L2Zvby9iYXIgaWYgeW91ciBQQ1JFIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorIworQUNfQVJHX1dJVEgobGlicGNyZSwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGlicGNyZV0sW3N5bm9ueW0gZm9yIC0td2l0aC1saWJwY3JlMl0pLAorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlVU0VfTElCUENSRTI9CisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCVVTRV9MSUJQQ1JFMj1ZZXNQbGVhc2UKKyAgICBlbHNlCisJVVNFX0xJQlBDUkUyPVllc1BsZWFzZQorCUxJQlBDUkVESVI9JHdpdGh2YWwKKwlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIExJQlBDUkVESVIgdG8gJExJQlBDUkVESVJdKQorICAgICAgICBkbmwgVVNFX0xJQlBDUkUyIGNhbiBzdGlsbCBiZSBtb2RpZmllZCBiZWxvdywgc28gZG9uJ3Qgc3Vic3RpdHV0ZQorICAgICAgICBkbmwgaXQgeWV0LgorCUdJVF9DT05GX1NVQlNUKFtMSUJQQ1JFRElSXSkKKyAgICBmaSkKKworQUNfQVJHX1dJVEgobGlicGNyZTEsCitBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnBjcmUxXSxbc3VwcG9ydCBQZXJsLWNvbXBhdGlibGUgcmVnZXhlcyB2aWEgbGlicGNyZTEgKGRlZmF1bHQgaXMgTk8pXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgW0FSRyBjYW4gYmUgYWxzbyBwcmVmaXggZm9yIGxpYnBjcmUgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlVU0VfTElCUENSRTE9CisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCVVTRV9MSUJQQ1JFMT1ZZXNQbGVhc2UKKyAgICBlbHNlCisJVVNFX0xJQlBDUkUxPVllc1BsZWFzZQorCUxJQlBDUkVESVI9JHdpdGh2YWwKKwlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIExJQlBDUkVESVIgdG8gJExJQlBDUkVESVJdKQorICAgICAgICBkbmwgVVNFX0xJQlBDUkUxIGNhbiBzdGlsbCBiZSBtb2RpZmllZCBiZWxvdywgc28gZG9uJ3Qgc3Vic3RpdHV0ZQorICAgICAgICBkbmwgaXQgeWV0LgorCUdJVF9DT05GX1NVQlNUKFtMSUJQQ1JFRElSXSkKKyAgICBmaSkKKworQUNfQVJHX1dJVEgobGlicGNyZTIsCitBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnBjcmUyXSxbc3VwcG9ydCBQZXJsLWNvbXBhdGlibGUgcmVnZXhlcyB2aWEgbGlicGNyZTIgKGRlZmF1bHQgaXMgTk8pXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgW0FSRyBjYW4gYmUgYWxzbyBwcmVmaXggZm9yIGxpYnBjcmUgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorICAgIGlmIHRlc3QgLW4gIiRVU0VfTElCUENSRTIiOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihbT25seSBzdXBwbHkgb25lIG9mIC0td2l0aC1saWJwY3JlIG9yIGl0cyBzeW5vbnltIC0td2l0aC1saWJwY3JlMiFdKQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkVVNFX0xJQlBDUkUxIjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoW09ubHkgc3VwcGx5IG9uZSBvZiAtLXdpdGgtbGlicGNyZTEgb3IgLS13aXRoLWxpYnBjcmUyIV0pCisgICAgZmkKKworICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKwlVU0VfTElCUENSRTI9CisgICAgZWxpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorCVVTRV9MSUJQQ1JFMj1ZZXNQbGVhc2UKKyAgICBlbHNlCisJVVNFX0xJQlBDUkUyPVllc1BsZWFzZQorCUxJQlBDUkVESVI9JHdpdGh2YWwKKwlBQ19NU0dfTk9USUNFKFtTZXR0aW5nIExJQlBDUkVESVIgdG8gJExJQlBDUkVESVJdKQorICAgICAgICBkbmwgVVNFX0xJQlBDUkUyIGNhbiBzdGlsbCBiZSBtb2RpZmllZCBiZWxvdywgc28gZG9uJ3Qgc3Vic3RpdHV0ZQorICAgICAgICBkbmwgaXQgeWV0LgorCUdJVF9DT05GX1NVQlNUKFtMSUJQQ1JFRElSXSkKKyAgICBmaSkKKyMKKyMgRGVmaW5lIEhBVkVfQUxMT0NBX0ggaWYgeW91IGhhdmUgd29ya2luZyBhbGxvY2EoMykgZGVmaW5lZCBpbiB0aGF0IGhlYWRlci4KK0FDX0ZVTkNfQUxMT0NBCitjYXNlICRhY19jdl93b3JraW5nX2FsbG9jYV9oIGluCisgICAgeWVzKSAgICBIQVZFX0FMTE9DQV9IPVllc1BsZWFzZTs7CisgICAgKikgICAgICBIQVZFX0FMTE9DQV9IPScnOzsKK2VzYWMKK0dJVF9DT05GX1NVQlNUKFtIQVZFX0FMTE9DQV9IXSkKKyMKKyMgRGVmaW5lIE5PX0NVUkwgaWYgeW91IGRvIG5vdCBoYXZlIGN1cmwgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtcHVsbCBhbmQKKyMgZ2l0LWh0dHAtcHVzaCBhcmUgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCB1c2UgaHR0cDovLyBhbmQgaHR0cHM6Ly8KKyMgdHJhbnNwb3J0cy4KKyMKKyMgRGVmaW5lIENVUkxESVI9L2Zvby9iYXIgaWYgeW91ciBjdXJsIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcyBhcmUgaW4KKyMgL2Zvby9iYXIvaW5jbHVkZSBhbmQgL2Zvby9iYXIvbGliIGRpcmVjdG9yaWVzLgorQUNfQVJHX1dJVEgoY3VybCwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtY3VybF0sW3N1cHBvcnQgaHR0cChzKTovLyB0cmFuc3BvcnRzIChkZWZhdWx0IGlzIFlFUyldKQorQVNfSEVMUF9TVFJJTkcoW10sICAgICAgICAgICBbQVJHIGNhbiBiZSBhbHNvIHByZWZpeCBmb3IgY3VybCBsaWJyYXJ5IGFuZCBoZWFkZXJzXSksCitHSVRfUEFSU0VfV0lUSChjdXJsKSkKKyMKKyMgRGVmaW5lIE5PX0VYUEFUIGlmIHlvdSBkbyBub3QgaGF2ZSBleHBhdCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdXNoIGlzCisjIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzLgorIworIyBEZWZpbmUgRVhQQVRESVI9L2Zvby9iYXIgaWYgeW91ciBleHBhdCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KK0FDX0FSR19XSVRIKGV4cGF0LAorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1leHBhdF0sCitbc3VwcG9ydCBnaXQtcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzIHZpYSBXZWJEQVYgKGRlZmF1bHQgaXMgWUVTKV0pCitBU19IRUxQX1NUUklORyhbXSwgICAgICAgICAgICBbQVJHIGNhbiBiZSBhbHNvIHByZWZpeCBmb3IgZXhwYXQgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorR0lUX1BBUlNFX1dJVEgoZXhwYXQpKQorIworIyBEZWZpbmUgTk9fRklOSyBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIERhcndpbi9NYWMgT1MgWCwgaGF2ZSBGaW5rCisjIGluc3RhbGxlZCBpbiAvc3csIGJ1dCBkb24ndCB3YW50IEdJVCB0byBsaW5rIGFnYWluc3QgYW55IGxpYnJhcmllcworIyBpbnN0YWxsZWQgdGhlcmUuICBJZiBkZWZpbmVkIHlvdSBtYXkgc3BlY2lmeSB5b3VyIG93biAob3IgRmluaydzKQorIyBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzIGJ5IGRlZmluaW5nIENGTEFHUworIyBhbmQgTERGTEFHUyBhcHByb3ByaWF0ZWx5LgorIworIyBEZWZpbmUgTk9fREFSV0lOX1BPUlRTIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYLAorIyBoYXZlIERhcndpblBvcnRzIGluc3RhbGxlZCBpbiAvb3B0L2xvY2FsLCBidXQgZG9uJ3Qgd2FudCBHSVQgdG8KKyMgbGluayBhZ2FpbnN0IGFueSBsaWJyYXJpZXMgaW5zdGFsbGVkIHRoZXJlLiAgSWYgZGVmaW5lZCB5b3UgbWF5CisjIHNwZWNpZnkgeW91ciBvd24gKG9yIERhcndpblBvcnQncykgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKKyMgbGlicmFyeSBkaXJlY3RvcmllcyBieSBkZWZpbmluZyBDRkxBR1MgYW5kIExERkxBR1MgYXBwcm9wcmlhdGVseS4KKyMKKyMgRGVmaW5lIE5PX01NQVAgaWYgeW91IHdhbnQgdG8gYXZvaWQgbW1hcC4KKyMKKyMgRGVmaW5lIE5PX0lDT05WIGlmIHlvdXIgbGliYyBkb2VzIG5vdCBwcm9wZXJseSBzdXBwb3J0IGljb252LgorQUNfQVJHX1dJVEgoaWNvbnYsCitBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWljb252XSwKK1tpZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgaWNvbnZdKQorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1pY29udj1QQVRIXSwKK1tQQVRIIGlzIHByZWZpeCBmb3IgbGliaWNvbnYgbGlicmFyeSBhbmQgaGVhZGVyc10pCitBU19IRUxQX1NUUklORyhbXSwKK1t1c2VkIG9ubHkgaWYgeW91IG5lZWQgbGlua2luZyB3aXRoIGxpYmljb252XSksCitHSVRfUEFSU0VfV0lUSChpY29udikpCisKKyMjIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gYW5kIC0tZGlzYWJsZS1GRUFUVVJFCisjCisjIERlZmluZSBVU0VfTlNFQyBiZWxvdyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzCisjIGFuZCBjdGltZXMuIE5vdGUgdGhhdCB5b3UgbmVlZCByZWNlbnQgZ2xpYmMgKGF0IGxlYXN0IDIuMi40KSBmb3IgdGhpcywgYW5kCisjIGl0IHdpbGwgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseQorIyByYW5kb21seSBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZAorIyB0aW1lcyAobXkgZXh0MyBkb2Vzbid0KS4KKyMKKyMgRGVmaW5lIFVTRV9TVERFViBiZWxvdyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCB0aGUgdW5kZXJseWluZyBkZXZpY2UKKyMgY2hhbmdlIGJlaW5nIGNvbnNpZGVyZWQgYW4gaW5vZGUgY2hhbmdlIGZyb20gdGhlIHVwZGF0ZS1pbmRleCBwZXJzcGVjdGl2ZS4KKworIworIyBBbGxvdyB1c2VyIHRvIHNldCBFVENfR0lUQ09ORklHIHZhcmlhYmxlCitHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIoZ2l0Y29uZmlnLCBFVENfR0lUQ09ORklHLAorCQkJVXNlIFZBTFVFIGluc3RlYWQgb2YgL2V0Yy9naXRjb25maWcgYXMgdGhlCisJCQlnbG9iYWwgZ2l0IGNvbmZpZ3VyYXRpb24gZmlsZS4KKwkJCUlmIFZBTFVFIGlzIG5vdCBmdWxseSBxdWFsaWZpZWQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZAorCQkJYXMgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjb21wdXRlZCBwcmVmaXggYXQgcnVudGltZS4pCisKKyMKKyMgQWxsb3cgdXNlciB0byBzZXQgRVRDX0dJVEFUVFJJQlVURVMgdmFyaWFibGUKK0dJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihnaXRhdHRyaWJ1dGVzLCBFVENfR0lUQVRUUklCVVRFUywKKwkJCVVzZSBWQUxVRSBpbnN0ZWFkIG9mIC9ldGMvZ2l0YXR0cmlidXRlcyBhcyB0aGUKKwkJCWdsb2JhbCBnaXQgYXR0cmlidXRlcyBmaWxlLgorCQkJSWYgVkFMVUUgaXMgbm90IGZ1bGx5IHF1YWxpZmllZCBpdCB3aWxsIGJlIGludGVycHJldGVkCisJCQlhcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGNvbXB1dGVkIHByZWZpeCBhdCBydW50aW1lLikKKworIworIyBBbGxvdyB1c2VyIHRvIHNldCB0aGUgZGVmYXVsdCBwYWdlcgorR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKHBhZ2VyLCBERUZBVUxUX1BBR0VSLAorCQkJVXNlIFZBTFVFIGFzIHRoZSBmYWxsLWJhY2sgcGFnZXIgaW5zdGVhZCBvZiAnbGVzcycuCisJCQlUaGlzIGlzIHVzZWQgYnkgdGhpbmdzIGxpa2UgJ2dpdCBsb2cnIHdoZW4gdGhlIHVzZXIKKwkJCWRvZXMgbm90IHNwZWNpZnkgYSBwYWdlciB0byB1c2UgdGhyb3VnaCBhbHRlcm5hdGUKKwkJCW1ldGhvZHMuIGVnOiAvdXNyL2Jpbi9wYWdlcikKKyMKKyMgQWxsb3cgdXNlciB0byBzZXQgdGhlIGRlZmF1bHQgZWRpdG9yCitHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIoZWRpdG9yLCBERUZBVUxUX0VESVRPUiwKKwkJCVVzZSBWQUxVRSBhcyB0aGUgZmFsbC1iYWNrIGVkaXRvciBpbnN0ZWFkIG9mICd2aScuCisJCQlUaGlzIGlzIHVzZWQgYnkgdGhpbmdzIGxpa2UgJ2dpdCBjb21taXQnIHdoZW4gdGhlIHVzZXIKKwkJCWRvZXMgbm90IHNwZWNpZnkgYSBwcmVmZXJyZWQgZWRpdG9yIHRocm91Z2ggb3RoZXIKKwkJCW1ldGhvZHMuIGVnOiAvdXNyL2Jpbi9lZGl0b3IpCisKKyMKKyMgRGVmaW5lIFNIRUxMX1BBVEggdG8gcHJvdmlkZSBwYXRoIHRvIHNoZWxsLgorR0lUX0FSR19TRVRfUEFUSChzaGVsbCkKKyMKKyMgRGVmaW5lIFBFUkxfUEFUSCB0byBwcm92aWRlIHBhdGggdG8gUGVybC4KK0dJVF9BUkdfU0VUX1BBVEgocGVybCkKKyMKKyMgRGVmaW5lIFBZVEhPTl9QQVRIIHRvIHByb3ZpZGUgcGF0aCB0byBQeXRob24uCitHSVRfQVJHX1NFVF9QQVRIKHB5dGhvbiwgYWxsb3ctd2l0aG91dCkKKyMKKyMgRGVmaW5lIFpMSUJfUEFUSCB0byBwcm92aWRlIHBhdGggdG8gemxpYi4KK0dJVF9BUkdfU0VUX1BBVEgoemxpYikKKyMKKyMgRGVjbGFyZSB0aGUgd2l0aC10Y2x0ay93aXRob3V0LXRjbHRrIG9wdGlvbnMuCitBQ19BUkdfV0lUSCh0Y2x0aywKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtdGNsdGtdLFt1c2UgVGNsL1RrIEdVSSAoZGVmYXVsdCBpcyBZRVMpXSkKK0FTX0hFTFBfU1RSSU5HKFtdLFtBUkcgaXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgVGNsL1RrIGludGVycHJldGVyLl0pCitBU19IRUxQX1NUUklORyhbXSxbQmFyZSAtLXdpdGgtdGNsdGsgd2lsbCBtYWtlIHRoZSBHVUkgcGFydCBvbmx5IGlmXSkKK0FTX0hFTFBfU1RSSU5HKFtdLFtUY2wvVGsgaW50ZXJwcmV0ZXIgd2lsbCBiZSBmb3VuZCBpbiBhIHN5c3RlbS5dKSwKK0dJVF9QQVJTRV9XSVRIKHRjbHRrKSkKKyMKKworCisjIyBDaGVja3MgZm9yIHByb2dyYW1zLgorQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciBwcm9ncmFtc10pCisjCitBQ19QUk9HX0NDKFtjYyBnY2NdKQorQUNfQ19JTkxJTkUKK2Nhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgIGlubGluZSB8IHllcyB8IG5vKSBJTkxJTkU9Jyc7OworICAqKSAgICAgICAgICAgICAgICAgSU5MSU5FPSRhY19jdl9jX2lubGluZSA7OworZXNhYworR0lUX0NPTkZfU1VCU1QoW0lOTElORV0pCisKKyMgd2hpY2ggc3dpdGNoIHRvIHBhc3MgcnVudGltZSBwYXRoIHRvIGR5bmFtaWMgbGlicmFyaWVzIHRvIHRoZSBsaW5rZXIKK0FDX0NBQ0hFX0NIRUNLKFtpZiBsaW5rZXIgc3VwcG9ydHMgLVJdLCBnaXRfY3ZfbGRfZGFzaHIsIFsKKyAgIFNBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKyAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSAtUiAvIgorICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwgW2dpdF9jdl9sZF9kYXNocj15ZXNdLCBbZ2l0X2N2X2xkX2Rhc2hyPW5vXSkKKyAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSIKK10pCitpZiB0ZXN0ICIkZ2l0X2N2X2xkX2Rhc2hyIiA9ICJ5ZXMiOyB0aGVuCisgICBDQ19MRF9EWU5QQVRIPS1SCitlbHNlCisgICBBQ19DQUNIRV9DSEVDSyhbaWYgbGlua2VyIHN1cHBvcnRzIC1XbCwtcnBhdGgsXSwgZ2l0X2N2X2xkX3dsX3JwYXRoLCBbCisgICAgICBTQVZFX0xERkxBR1M9IiR7TERGTEFHU30iCisgICAgICBMREZMQUdTPSIke1NBVkVfTERGTEFHU30gLVdsLC1ycGF0aCwvIgorICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwgW2dpdF9jdl9sZF93bF9ycGF0aD15ZXNdLCBbZ2l0X2N2X2xkX3dsX3JwYXRoPW5vXSkKKyAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSIKKyAgIF0pCisgICBpZiB0ZXN0ICIkZ2l0X2N2X2xkX3dsX3JwYXRoIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBDQ19MRF9EWU5QQVRIPS1XbCwtcnBhdGgsCisgICBlbHNlCisgICAgICBBQ19DQUNIRV9DSEVDSyhbaWYgbGlua2VyIHN1cHBvcnRzIC1ycGF0aF0sIGdpdF9jdl9sZF9ycGF0aCwgWworICAgICAgICAgU0FWRV9MREZMQUdTPSIke0xERkxBR1N9IgorICAgICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IC1ycGF0aCAvIgorICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW10pXSwgW2dpdF9jdl9sZF9ycGF0aD15ZXNdLCBbZ2l0X2N2X2xkX3JwYXRoPW5vXSkKKyAgICAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSIKKyAgICAgIF0pCisgICAgICBpZiB0ZXN0ICIkZ2l0X2N2X2xkX3JwYXRoIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICBDQ19MRF9EWU5QQVRIPS1ycGF0aAorICAgICAgZWxzZQorICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2lmIGxpbmtlciBzdXBwb3J0cyAtV2wsK2IsXSwgZ2l0X2N2X2xkX3dsX2IsIFsKKyAgICAgICAgICAgIFNBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKyAgICAgICAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSAtV2wsK2IsLyIKKyAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sIFtnaXRfY3ZfbGRfd2xfYj15ZXNdLCBbZ2l0X2N2X2xkX3dsX2I9bm9dKQorICAgICAgICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IgorICAgICAgICAgXSkKKyAgICAgICAgIGlmIHRlc3QgIiRnaXRfY3ZfbGRfd2xfYiIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgQ0NfTERfRFlOUEFUSD0tV2wsK2IsCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIENDX0xEX0RZTlBBVEg9CisgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW2xpbmtlciBkb2VzIG5vdCBzdXBwb3J0IHJ1bnRpbWUgcGF0aCB0byBkeW5hbWljIGxpYnJhcmllc10pCisgICAgICAgICAgZmkKKyAgICAgIGZpCisgICBmaQorZmkKK0dJVF9DT05GX1NVQlNUKFtDQ19MRF9EWU5QQVRIXSkKKyNBQ19QUk9HX0lOU1RBTEwJCSMgbmVlZHMgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIHNvdXJjZXMKK0FDX0NIRUNLX1RPT0xTKEFSLCBbZ2FyIGFyXSwgOikKK0FDX0NIRUNLX1BST0dTKFRBUiwgW2d0YXIgdGFyXSkKK0FDX0NIRUNLX1BST0dTKERJRkYsIFtnbnVkaWZmIGdkaWZmIGRpZmZdKQorIyBUQ0xUS19QQVRIIHdpbGwgYmUgc2V0IHRvIHNvbWUgdmFsdWUgaWYgd2Ugd2FudCBUY2wvVGsKKyMgb3Igd2lsbCBiZSBlbXB0eSBvdGhlcndpc2UuCitpZiB0ZXN0IC1uICIkTk9fVENMVEsiOyB0aGVuCisgIFRDTFRLX1BBVEg9CitlbHNlCisgIGlmIHRlc3QgIiR3aXRoX3RjbHRrIiA9ICIiOyB0aGVuCisgICMgTm8gVGNsL1RrIHN3aXRjaGVzIGdpdmVuLiBEbyBub3QgY2hlY2sgZm9yIFRjbC9UaywgdXNlIGJhcmUgJ3dpc2gnLgorICAgIFRDTFRLX1BBVEg9d2lzaAorICBlbGlmIHRlc3QgIiR3aXRoX3RjbHRrIiA9ICJ5ZXMiOyB0aGVuCisgICMgVGNsL1RrIGNoZWNrIHJlcXVlc3RlZC4KKyAgICBBQ19DSEVDS19QUk9HUyhUQ0xUS19QQVRILCBbd2lzaF0sICkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW1VzaW5nIFRjbC9UayBpbnRlcnByZXRlciAkd2l0aF90Y2x0a10pCisgICAgVENMVEtfUEFUSD0iJHdpdGhfdGNsdGsiCisgIGZpCitmaQorR0lUX0NPTkZfU1VCU1QoW1RDTFRLX1BBVEhdKQorQUNfQ0hFQ0tfUFJPR1MoQVNDSUlET0MsIFthc2NpaWRvY10pCitpZiB0ZXN0IC1uICIkQVNDSUlET0MiOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgYXNjaWlkb2MgdmVyc2lvbl0pCisJYXNjaWlkb2NfdmVyc2lvbj1gJEFTQ0lJRE9DIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKKwljYXNlICIke2FzY2lpZG9jX3ZlcnNpb259IiBpbgorCWFzY2lpZG9jJyAnOCopCisJCUFDX01TR19SRVNVTFQoWyR7YXNjaWlkb2NfdmVyc2lvbn1dKQorCQk7OworCSopCisJCUFDX01TR19SRVNVTFQoWyR7YXNjaWlkb2NfdmVyc2lvbn0gKHVua25vd24pXSkKKwkJOzsKKwllc2FjCitmaQorCitpZiBncmVwIC1hIGFzY2lpIGNvbmZpZ3VyZS5hYyA+L2Rldi9udWxsOyB0aGVuCisgIEFDX01TR19SRVNVTFQoW1VzaW5nICdncmVwIC1hJyBmb3Igc2FuZV9ncmVwXSkKKyAgU0FORV9URVhUX0dSRVA9LWEKK2Vsc2UKKyAgU0FORV9URVhUX0dSRVA9CitmaQorR0lUX0NPTkZfU1VCU1QoW1NBTkVfVEVYVF9HUkVQXSkKKworIyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCitBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIGxpYnJhcmllc10pCisjCisjIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLgorIyBEZWZpbmUgTkVFRFNfU1NMX1dJVEhfQ1JZUFRPIGlmIHlvdSBuZWVkIC1sY3J5cHRvIHdpdGggLWxzc2wgKERhcndpbikuCisKK0dJVF9TVEFTSF9GTEFHUygkT1BFTlNTTERJUikKKworQUNfQ0hFQ0tfTElCKFtjcnlwdG9dLCBbU0hBMV9Jbml0XSwKK1tORUVEU19TU0xfV0lUSF9DUllQVE89XSwKK1tBQ19DSEVDS19MSUIoW3NzbF0sIFtTSEExX0luaXRdLAorIFtORUVEU19TU0xfV0lUSF9DUllQVE89WWVzUGxlYXNlIE5PX09QRU5TU0w9XSwKKyBbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPSAgICAgICAgICBOT19PUEVOU1NMPVllc1BsZWFzZV0pXSkKKworR0lUX1VOU1RBU0hfRkxBR1MoJE9QRU5TU0xESVIpCisKK0dJVF9DT05GX1NVQlNUKFtORUVEU19TU0xfV0lUSF9DUllQVE9dKQorR0lUX0NPTkZfU1VCU1QoW05PX09QRU5TU0xdKQorCisjCisjIEhhbmRsZSB0aGUgVVNFX0xJQlBDUkUxIGFuZCBVU0VfTElCUENSRTIgb3B0aW9ucyBwb3RlbnRpYWxseSBzZXQKKyMgYWJvdmUuCisjCisKK2lmIHRlc3QgLW4gIiRVU0VfTElCUENSRTEiOyB0aGVuCisKK0dJVF9TVEFTSF9GTEFHUygkTElCUENSRURJUikKKworQUNfQ0hFQ0tfTElCKFtwY3JlXSwgW3BjcmVfdmVyc2lvbl0sCitbVVNFX0xJQlBDUkUxPVllc1BsZWFzZV0sCitbVVNFX0xJQlBDUkUxPV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRMSUJQQ1JFRElSKQorCitHSVRfQ09ORl9TVUJTVChbVVNFX0xJQlBDUkUxXSkKKworZmkKKworCitpZiB0ZXN0IC1uICIkVVNFX0xJQlBDUkUyIjsgdGhlbgorCitHSVRfU1RBU0hfRkxBR1MoJExJQlBDUkVESVIpCisKK0FDX0NIRUNLX0xJQihbcGNyZTItOF0sIFtwY3JlMl9jb25maWdfOF0sCitbVVNFX0xJQlBDUkUyPVllc1BsZWFzZV0sCitbVVNFX0xJQlBDUkUyPV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRMSUJQQ1JFRElSKQorCitHSVRfQ09ORl9TVUJTVChbVVNFX0xJQlBDUkUyXSkKKworZmkKKworIworIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgbGliY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAorIyBnaXQtaHR0cC1wdXNoIGFyZSBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHVzZSBodHRwOi8vIGFuZCBodHRwczovLworIyB0cmFuc3BvcnRzLgorCitHSVRfU1RBU0hfRkxBR1MoJENVUkxESVIpCisKK0FDX0NIRUNLX0xJQihbY3VybF0sIFtjdXJsX2dsb2JhbF9pbml0XSwKK1tOT19DVVJMPV0sCitbTk9fQ1VSTD1ZZXNQbGVhc2VdKQorCitHSVRfVU5TVEFTSF9GTEFHUygkQ1VSTERJUikKKworR0lUX0NPTkZfU1VCU1QoW05PX0NVUkxdKQorCitpZiB0ZXN0IC16ICIkTk9fQ1VSTCI7IHRoZW4KKworQUNfQ0hFQ0tfUFJPRyhbQ1VSTF9DT05GSUddLCBbY3VybC1jb25maWddLAorW2N1cmwtY29uZmlnXSwKK1tub10pCisKK2lmIHRlc3QgJENVUkxfQ09ORklHICE9IG5vOyB0aGVuCisgICAgR0lUX0NPTkZfU1VCU1QoW0NVUkxfQ09ORklHXSkKKworICAgIGlmIHRlc3QgLXogIiRDVVJMX0NPTkZJR19PUFRTIjsgdGhlbgorICAgICAgICBDVVJMX0NPTkZJR19PUFRTPSItLWxpYnMiCisgICAgZmkKKworICAgIENVUkxfTERGTEFHUz0kKCRDVVJMX0NPTkZJRyAkQ1VSTF9DT05GSUdfT1BUUykKKyAgICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nIENVUkxfTERGTEFHUyB0byAnJENVUkxfTERGTEFHUyddKQorICAgIEdJVF9DT05GX1NVQlNUKFtDVVJMX0xERkxBR1NdLCBbJENVUkxfTERGTEFHU10pCitmaQorCitmaQorCisKKyMKKyMgRGVmaW5lIE5PX0VYUEFUIGlmIHlvdSBkbyBub3QgaGF2ZSBleHBhdCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdXNoIGlzCisjIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzLgorCitHSVRfU1RBU0hfRkxBR1MoJEVYUEFURElSKQorCitBQ19DSEVDS19MSUIoW2V4cGF0XSwgW1hNTF9QYXJzZXJDcmVhdGVdLAorW05PX0VYUEFUPV0sCitbTk9fRVhQQVQ9WWVzUGxlYXNlXSkKKworR0lUX1VOU1RBU0hfRkxBR1MoJEVYUEFURElSKQorCitHSVRfQ09ORl9TVUJTVChbTk9fRVhQQVRdKQorCisjCisjIERlZmluZSBORUVEU19MSUJJQ09OViBpZiBsaW5raW5nIHdpdGggbGliYyBpcyBub3QgZW5vdWdoIChEYXJ3aW4gYW5kCisjIHNvbWUgU29sYXJpcyBpbnN0YWxsYXRpb25zKS4KKyMgRGVmaW5lIE5PX0lDT05WIGlmIG5laXRoZXIgbGliYyBub3IgbGliaWNvbnYgc3VwcG9ydCBpY29udi4KKworaWYgdGVzdCAteiAiJE5PX0lDT05WIjsgdGhlbgorCitHSVRfU1RBU0hfRkxBR1MoJElDT05WRElSKQorCitBQ19ERUZVTihbSUNPTlZURVNUX1NSQ10sCitbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8aWNvbnYuaD5dLAorIFtpY29udl9vcGVuKCIiLCAiIik7XSldKQorCitpZiB0ZXN0IC1uICIkSUNPTlZESVIiOyB0aGVuCisgICBsaWJfb3JkZXI9Ii1saWNvbnYgLWxjIgorZWxzZQorICAgbGliX29yZGVyPSItbGMgLWxpY29udiIKK2ZpCisKK05PX0lDT05WPVllc1BsZWFzZQorCitmb3IgbCBpbiAkbGliX29yZGVyOyBkbworICAgIGlmIHRlc3QgIiRsIiA9ICItbGljb252IjsgdGhlbgorICAgICAgIE5FRURTX0xJQklDT05WPVllc1BsZWFzZQorICAgIGVsc2UKKyAgICAgICBORUVEU19MSUJJQ09OVj0KKyAgICBmaQorCisgICAgb2xkX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRMSUJTICRsIgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGljb252IGluICRsXSkKKyAgICBBQ19MSU5LX0lGRUxTRShbSUNPTlZURVNUX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJTk9fSUNPTlY9CisJYnJlYWtdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pXSkKKyAgICBMSUJTPSIkb2xkX0xJQlMiCitkb25lCisKKyNpbiBjYXNlIG9mIGJyZWFrCitMSUJTPSIkb2xkX0xJQlMiCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworR0lUX0NPTkZfU1VCU1QoW05FRURTX0xJQklDT05WXSkKK0dJVF9DT05GX1NVQlNUKFtOT19JQ09OVl0pCisKK2lmIHRlc3QgLW4gIiROT19JQ09OViI7IHRoZW4KKyAgICBORUVEU19MSUJJQ09OVj0KK2ZpCisKK2ZpCisKKyMKKyMgRGVmaW5lIE5PX0RFRkxBVEVfQk9VTkQgaWYgZGVmbGF0ZUJvdW5kIGlzIG1pc3NpbmcgZnJvbSB6bGliLgorCitHSVRfU1RBU0hfRkxBR1MoJFpMSUJfUEFUSCkKKworQUNfREVGVU4oW1pMSUJURVNUX1NSQ10sIFsKK0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHpsaWIuaD5dLAorIFtkZWZsYXRlQm91bmQoMCwgMCk7XSldKQorQUNfTVNHX0NIRUNLSU5HKFtmb3IgZGVmbGF0ZUJvdW5kIGluIC1sel0pCitvbGRfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbHoiCitBQ19MSU5LX0lGRUxTRShbWkxJQlRFU1RfU1JDXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSldLAorCVtBQ19NU0dfUkVTVUxUKFtub10pCisJTk9fREVGTEFURV9CT1VORD15ZXNdKQorTElCUz0iJG9sZF9MSUJTIgorCitHSVRfVU5TVEFTSF9GTEFHUygkWkxJQl9QQVRIKQorCitHSVRfQ09ORl9TVUJTVChbTk9fREVGTEFURV9CT1VORF0pCisKKyMKKyMgRGVmaW5lIE5FRURTX1NPQ0tFVCBpZiBsaW5raW5nIHdpdGggbGliYyBpcyBub3QgZW5vdWdoIChTdW5PUywKKyMgUGF0cmljayBNYXVyaXR6KS4KK0FDX0NIRUNLX0xJQihbY10sIFtzb2NrZXRdLAorW05FRURTX1NPQ0tFVD1dLAorW05FRURTX1NPQ0tFVD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05FRURTX1NPQ0tFVF0pCit0ZXN0IC1uICIkTkVFRFNfU09DS0VUIiAmJiBMSUJTPSIkTElCUyAtbHNvY2tldCIKKworIworIyBUaGUgbmV4dCBmZXcgdGVzdHMgd2lsbCBkZWZpbmUgTkVFRFNfUkVTT0xWIGlmIGxpbmtpbmcgd2l0aAorIyBsaWJyZXNvbHYgcHJvdmlkZXMgc29tZSBvZiB0aGUgZnVuY3Rpb25zIHdlIHdvdWxkIG5vcm1hbGx5IGdldAorIyBmcm9tIGxpYmMuCitORUVEU19SRVNPTFY9CisjCisjIERlZmluZSBOT19JTkVUX05UT1AgaWYgbGlua2luZyB3aXRoIC1scmVzb2x2IGlzIG5vdCBlbm91Z2guCisjIFNvbGFyaXMgMi43IGluIHBhcnRpY3VsYXIgaG9zIGluZXRfbnRvcCBpbiAtbHJlc29sdi4KK05PX0lORVRfTlRPUD0KK0FDX0NIRUNLX0ZVTkMoW2luZXRfbnRvcF0sCisgICAgW10sCisgICAgW0FDX0NIRUNLX0xJQihbcmVzb2x2XSwgW2luZXRfbnRvcF0sCisJW05FRURTX1JFU09MVj1ZZXNQbGVhc2VdLAorCVtOT19JTkVUX05UT1A9WWVzUGxlYXNlXSkKK10pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5FVF9OVE9QXSkKKyMKKyMgRGVmaW5lIE5PX0lORVRfUFRPTiBpZiBsaW5raW5nIHdpdGggLWxyZXNvbHYgaXMgbm90IGVub3VnaC4KKyMgU29sYXJpcyAyLjcgaW4gcGFydGljdWxhciBob3MgaW5ldF9wdG9uIGluIC1scmVzb2x2LgorTk9fSU5FVF9QVE9OPQorQUNfQ0hFQ0tfRlVOQyhbaW5ldF9wdG9uXSwKKyAgICBbXSwKKyAgICBbQUNfQ0hFQ0tfTElCKFtyZXNvbHZdLCBbaW5ldF9wdG9uXSwKKwlbTkVFRFNfUkVTT0xWPVllc1BsZWFzZV0sCisJW05PX0lORVRfUFRPTj1ZZXNQbGVhc2VdKQorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19JTkVUX1BUT05dKQorIworIyBEZWZpbmUgTk9fSFNUUkVSUk9SIGlmIGxpbmtpbmcgd2l0aCAtbHJlc29sdiBpcyBub3QgZW5vdWdoLgorIyBTb2xhcmlzIDIuNiBpbiBwYXJ0aWN1bGFyIGhhcyBubyBoc3RyZXJyb3IsIGV2ZW4gaW4gLWxyZXNvbHYuCitOT19IU1RSRVJST1I9CitBQ19DSEVDS19GVU5DKFtoc3RyZXJyb3JdLAorICAgIFtdLAorICAgIFtBQ19DSEVDS19MSUIoW3Jlc29sdl0sIFtoc3RyZXJyb3JdLAorCVtORUVEU19SRVNPTFY9WWVzUGxlYXNlXSwKKwlbTk9fSFNUUkVSUk9SPVllc1BsZWFzZV0pCitdKQorR0lUX0NPTkZfU1VCU1QoW05PX0hTVFJFUlJPUl0pCisKK2RubCBUaGlzIG11c3QgZ28gYWZ0ZXIgYWxsIHRoZSBwb3NzaWJsZSBwbGFjZXMgZm9yIGl0cyBpbml0aWFsaXphdGlvbiwKK2RubCBpbiB0aGUgQUNfQ0hFQ0tfRlVOQyBpbnZvY2F0aW9ucyBhYm92ZS4KK0dJVF9DT05GX1NVQlNUKFtORUVEU19SRVNPTFZdKQorIworIyBJZiBhbnkgb2YgdGhlIGFib3ZlIHRlc3RzIGRldGVybWluZWQgdGhhdCAtbHJlc29sdiBpcyBuZWVkZWQgYXQKKyMgYnVpbGQtdGltZSwgYWxzbyBzZXQgaXQgaGVyZSBmb3IgcmVtYWluaW5nIGNvbmZpZ3VyZS10aW1lIGNoZWNrcy4KK3Rlc3QgLW4gIiRORUVEU19SRVNPTFYiICYmIExJQlM9IiRMSUJTIC1scmVzb2x2IgorCitBQ19DSEVDS19MSUIoW2NdLCBbYmFzZW5hbWVdLAorW05FRURTX0xJQkdFTj1dLAorW05FRURTX0xJQkdFTj1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05FRURTX0xJQkdFTl0pCit0ZXN0IC1uICIkTkVFRFNfTElCR0VOIiAmJiBMSUJTPSIkTElCUyAtbGdlbiIKKworQUNfREVGVU4oW0xJQklOVExfU1JDXSwgWworQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8bGliaW50bC5oPgorXV0sW1sKK2NoYXIgKm1zZyA9IGdldHRleHQoInRlc3QiKTsKK11dKV0pCisKK0FDX01TR19DSEVDS0lORyhbaWYgbGliYyBjb250YWlucyBsaWJpbnRsXSkKK0FDX0xJTktfSUZFTFNFKFtMSUJJTlRMX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJTElCQ19DT05UQUlOU19MSUJJTlRMPVllc1BsZWFzZV0sCisJW0FDX01TR19SRVNVTFQoW25vXSkKKwlMSUJDX0NPTlRBSU5TX0xJQklOVEw9XSkKK0dJVF9DT05GX1NVQlNUKFtMSUJDX0NPTlRBSU5TX0xJQklOVExdKQorCisjCisjIERlZmluZSBOT19HRVRURVhUIGlmIHlvdSBkb24ndCB3YW50IEdpdCBvdXRwdXQgdG8gYmUgdHJhbnNsYXRlZC4KKyMgQSB0cmFuc2xhdGVkIEdpdCByZXF1aXJlcyBHTlUgbGliaW50bCBvciBhbm90aGVyIGdldHRleHQgaW1wbGVtZW50YXRpb24KK0FDX0NIRUNLX0hFQURFUihbbGliaW50bC5oXSwKK1tOT19HRVRURVhUPV0sCitbTk9fR0VUVEVYVD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX0dFVFRFWFRdKQorCitpZiB0ZXN0IC16ICIkTk9fR0VUVEVYVCI7IHRoZW4KKyAgICB0ZXN0IC1uICIkTElCQ19DT05UQUlOU19MSUJJTlRMIiB8fCBMSUJTPSIkTElCUyAtbGludGwiCitmaQorCisjIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgaGVhZGVyIGZpbGVzXSkKKyMKKyMgRGVmaW5lIE5PX1NZU19TRUxFQ1RfSCBpZiB5b3UgZG9uJ3QgaGF2ZSBzeXMvc2VsZWN0LmguCitBQ19DSEVDS19IRUFERVIoW3N5cy9zZWxlY3QuaF0sCitbTk9fU1lTX1NFTEVDVF9IPV0sCitbTk9fU1lTX1NFTEVDVF9IPVVuZm9ydHVuYXRlbHlZZXNdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NZU19TRUxFQ1RfSF0pCisjCisjIERlZmluZSBOT19QT0xMX0ggaWYgeW91IGRvbid0IGhhdmUgcG9sbC5oCitBQ19DSEVDS19IRUFERVIoW3BvbGwuaF0sCitbTk9fUE9MTF9IPV0sCitbTk9fUE9MTF9IPVVuZm9ydHVuYXRlbHlZZXNdKQorR0lUX0NPTkZfU1VCU1QoW05PX1BPTExfSF0pCisjCisjIERlZmluZSBOT19TWVNfUE9MTF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9wb2xsLmgKK0FDX0NIRUNLX0hFQURFUihbc3lzL3BvbGwuaF0sCitbTk9fU1lTX1BPTExfSD1dLAorW05PX1NZU19QT0xMX0g9VW5mb3J0dW5hdGVseVllc10pCitHSVRfQ09ORl9TVUJTVChbTk9fU1lTX1BPTExfSF0pCisjCisjIERlZmluZSBOT19JTlRUWVBFU19IIGlmIHlvdSBkb24ndCBoYXZlIGludHR5cGVzLmgKK0FDX0NIRUNLX0hFQURFUihbaW50dHlwZXMuaF0sCitbTk9fSU5UVFlQRVNfSD1dLAorW05PX0lOVFRZUEVTX0g9VW5mb3J0dW5hdGVseVllc10pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5UVFlQRVNfSF0pCisjCisjIERlZmluZSBPTERfSUNPTlYgaWYgeW91ciBsaWJyYXJ5IGhhcyBhbiBvbGQgaWNvbnYoKSwgd2hlcmUgdGhlIHNlY29uZAorIyAoaW5wdXQgYnVmZmVyIHBvaW50ZXIpIHBhcmFtZXRlciBpcyBkZWNsYXJlZCB3aXRoIHR5cGUgKGNvbnN0IGNoYXIgKiopLgorQUNfREVGVU4oW09MRElDT05WVEVTVF9TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxpY29udi5oPgorCitleHRlcm4gc2l6ZV90IGljb252KGljb252X3QgY2QsCisJCSAgICBjaGFyICoqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsCisJCSAgICBjaGFyICoqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7CitdXSwgW10pXSkKKworR0lUX1NUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworQUNfTVNHX0NIRUNLSU5HKFtmb3Igb2xkIGljb252KCldKQorQUNfQ09NUElMRV9JRkVMU0UoW09MRElDT05WVEVTVF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwlBQ19ERUZJTkUoSEFWRV9PTERfSUNPTlYsIDEpCisJT0xEX0lDT05WPVVuZm9ydHVuYXRlbHlZZXNdKQorCitHSVRfVU5TVEFTSF9GTEFHUygkSUNPTlZESVIpCisKK0dJVF9DT05GX1NVQlNUKFtPTERfSUNPTlZdKQorCisjCisjIERlZmluZSBJQ09OVl9PTUlUU19CT00gaWYgeW91IGFyZSBvbiBhIHN5c3RlbSB3aGljaAorIyBpY29udiBvbWl0cyBib20gZm9yIHV0Zi17MTYsMzJ9CitpZiB0ZXN0IC16ICIkTk9fSUNPTlYiOyB0aGVuCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpY29udiBvbWl0cyBib20gZm9yIHV0Zi0xNiBhbmQgdXRmLTMyXSwKKyBbYWNfY3ZfaWNvbnZfb21pdHNfYm9tXSwKK1sKK29sZF9MSUJTPSIkTElCUyIKK2lmIHRlc3QgLW4gIiRORUVEU19MSUJJQ09OViI7IHRoZW4KKwlMSUJTPSIkTElCUyAtbGljb252IgorZmkKKworQUNfUlVOX0lGRUxTRSgKKwlbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUCisJI2luY2x1ZGUgPGljb252Lmg+CisJI2lmZGVmIEhBVkVfT0xEX0lDT05WCisJdHlwZWRlZiBjb25zdCBjaGFyICppY29udl9pYnA7CisJI2Vsc2UKKwl0eXBlZGVmIGNoYXIgKmljb252X2licDsKKwkjZW5kaWYKKwldLAorCVtbCisJaW50IHY7CisJaWNvbnZfdCBjb252OworCWNoYXIgaW5bXSA9ICJhIjsgaWNvbnZfaWJwIHBpbiA9IGluOworCWNoYXIgb3V0WzIwXSA9ICIiOyBjaGFyICpwb3V0ID0gb3V0OworCXNpemVfdCBpc3ogPSBzaXplb2YgaW47CisJc2l6ZV90IG9zeiA9IHNpemVvZiBvdXQ7CisKKwljb252ID0gaWNvbnZfb3BlbigiVVRGLTE2IiwgIlVURi04Iik7CisJaWNvbnYoY29udiwgJnBpbiwgJmlzeiwgJnBvdXQsICZvc3opOworCWljb252X2Nsb3NlKGNvbnYpOworCXYgPSAodW5zaWduZWQgY2hhcikob3V0WzBdKSArICh1bnNpZ25lZCBjaGFyKShvdXRbMV0pOworCXJldHVybiB2ICE9IDB4ZmUgKyAweGZmOworCV1dKV0sCisJW2FjX2N2X2ljb252X29taXRzX2JvbT1ub10sCisJW2FjX2N2X2ljb252X29taXRzX2JvbT15ZXNdKQorCitMSUJTPSIkb2xkX0xJQlMiCitdKQoraWYgdGVzdCAieCRhY19jdl9pY29udl9vbWl0c19ib20iID0geHllczsgdGhlbgorCUlDT05WX09NSVRTX0JPTT1ZZXMKK2Vsc2UKKwlJQ09OVl9PTUlUU19CT009CitmaQorR0lUX0NPTkZfU1VCU1QoW0lDT05WX09NSVRTX0JPTV0pCitmaQorCisjIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljc10pCisjCitUWVBFX1NPQ0tMRU5fVAorY2FzZSAkYWNfY3ZfdHlwZV9zb2NrbGVuX3QgaW4KKyAgeWVzKQlTT0NLTEVOX1Q9Jyc7OworICAqKSAgCVNPQ0tMRU5fVD0kZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdjs7Citlc2FjCitHSVRfQ09ORl9TVUJTVChbU09DS0xFTl9UXSkKKworIworIyBEZWZpbmUgTk9fU1RSVUNUX0lUSU1FUlZBTCBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJ1Y3QgaXRpbWVydmFsLgorQUNfQ0hFQ0tfVFlQRVMoW3N0cnVjdCBpdGltZXJ2YWxdLAorW05PX1NUUlVDVF9JVElNRVJWQUw9XSwKK1tOT19TVFJVQ1RfSVRJTUVSVkFMPVVuZm9ydHVuYXRlbHlZZXNdLAorWyNpbmNsdWRlIDxzeXMvdGltZS5oPl0pCitHSVRfQ09ORl9TVUJTVChbTk9fU1RSVUNUX0lUSU1FUlZBTF0pCisjCisjIERlZmluZSBVU0VfU1RfVElNRVNQRUM9WWVzUGxlYXNlIHdoZW4gc3RhdC5zdF9tdGltZXNwZWMudHZfbnNlYyBleGlzdHMuCisjIERlZmluZSBOT19OU0VDPVllc1BsZWFzZSB3aGVuIG5laXRoZXIgc3RhdC5zdF9tdGltLnR2X25zZWMgbm9yCisjIHN0YXQuc3RfbXRpbWVzcGVjLnR2X25zZWMgZXhpc3RzLgorQUNfQ0hFQ0tfTUVNQkVSKFtzdHJ1Y3Qgc3RhdC5zdF9tdGltZXNwZWMudHZfbnNlY10pCitBQ19DSEVDS19NRU1CRVIoW3N0cnVjdCBzdGF0LnN0X210aW0udHZfbnNlY10pCitpZiB0ZXN0IHgkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X210aW1lc3BlY190dl9uc2VjID0geHllczsgdGhlbgorCVVTRV9TVF9USU1FU1BFQz1ZZXNQbGVhc2UKKwlHSVRfQ09ORl9TVUJTVChbVVNFX1NUX1RJTUVTUEVDXSkKK2VsaWYgdGVzdCB4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9tdGltX3R2X25zZWMgIT0geHllczsgdGhlbgorCU5PX05TRUM9WWVzUGxlYXNlCisJR0lUX0NPTkZfU1VCU1QoW05PX05TRUNdKQorZmkKKyMKKyMgRGVmaW5lIE5PX0RfVFlQRV9JTl9ESVJFTlQgaWYgeW91ciBwbGF0Zm9ybSBkZWZpbmVzIERUX1VOS05PV04gYnV0IGxhY2tzCisjIGRfdHlwZSBpbiBzdHJ1Y3QgZGlyZW50IChsYXRlc3QgQ3lnd2luIC0tIHdpbGwgYmUgZml4ZWQgc29vbmlzaCkuCitBQ19DSEVDS19NRU1CRVIoc3RydWN0IGRpcmVudC5kX3R5cGUsCitbTk9fRF9UWVBFX0lOX0RJUkVOVD1dLAorW05PX0RfVFlQRV9JTl9ESVJFTlQ9WWVzUGxlYXNlXSwKK1sjaW5jbHVkZSA8ZGlyZW50Lmg+XSkKK0dJVF9DT05GX1NVQlNUKFtOT19EX1RZUEVfSU5fRElSRU5UXSkKKyMKKyMgRGVmaW5lIE5PX0dFQ09TX0lOX1BXRU5UIGlmIHlvdSBkb24ndCBoYXZlIHB3X2dlY29zIGluIHN0cnVjdCBwYXNzd2QKKyMgaW4gdGhlIEMgbGlicmFyeS4KK0FDX0NIRUNLX01FTUJFUihzdHJ1Y3QgcGFzc3dkLnB3X2dlY29zLAorW05PX0dFQ09TX0lOX1BXRU5UPV0sCitbTk9fR0VDT1NfSU5fUFdFTlQ9WWVzUGxlYXNlXSwKK1sjaW5jbHVkZSA8cHdkLmg+XSkKK0dJVF9DT05GX1NVQlNUKFtOT19HRUNPU19JTl9QV0VOVF0pCisjCisjIERlZmluZSBOT19TT0NLQUREUl9TVE9SQUdFIGlmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSBzdHJ1Y3QKKyMgc29ja2FkZHJfc3RvcmFnZS4KK0FDX0NIRUNLX1RZUEUoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UsCitbTk9fU09DS0FERFJfU1RPUkFHRT1dLAorW05PX1NPQ0tBRERSX1NUT1JBR0U9WWVzUGxlYXNlXSxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19TT0NLQUREUl9TVE9SQUdFXSkKKyMKKyMgRGVmaW5lIE5PX0lQVjYgaWYgeW91IGxhY2sgSVB2NiBzdXBwb3J0IGFuZCBnZXRhZGRyaW5mbygpLgorQUNfQ0hFQ0tfVFlQRShbc3RydWN0IGFkZHJpbmZvXSxbCisgR0lUX0NIRUNLX0ZVTkMoW2dldGFkZHJpbmZvXSwKKyAgW05PX0lQVjY9XSwKKyAgW05PX0lQVjY9WWVzUGxlYXNlXSkKK10sW05PX0lQVjY9WWVzUGxlYXNlXSxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CitdKQorR0lUX0NPTkZfU1VCU1QoW05PX0lQVjZdKQorIworIyBEZWZpbmUgTk9fUkVHRVggaWYgeW91ciBDIGxpYnJhcnkgbGFja3MgcmVnZXggc3VwcG9ydCB3aXRoIFJFR19TVEFSVEVORAorIyBmZWF0dXJlLgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIHBsYXRmb3JtIHJlZ2V4IHN1cHBvcnRzIFJFR19TVEFSVEVORF0sCisgW2FjX2N2X2NfcmVnZXhfd2l0aF9yZWdfc3RhcnRlbmRdLCBbCitBQ19FR1JFUF9DUFAoeWlwcGVleWVzd2VoYXZlaXQsCisJQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUCisjaW5jbHVkZSA8cmVnZXguaD4KK10sCitbI2lmZGVmIFJFR19TVEFSVEVORAoreWlwcGVleWVzd2VoYXZlaXQKKyNlbmRpZgorXSksCisJW2FjX2N2X2NfcmVnZXhfd2l0aF9yZWdfc3RhcnRlbmQ9eWVzXSwKKwlbYWNfY3ZfY19yZWdleF93aXRoX3JlZ19zdGFydGVuZD1ub10pCitdKQoraWYgdGVzdCAkYWNfY3ZfY19yZWdleF93aXRoX3JlZ19zdGFydGVuZCA9IHllczsgdGhlbgorCU5PX1JFR0VYPQorZWxzZQorCU5PX1JFR0VYPVllc1BsZWFzZQorZmkKK0dJVF9DT05GX1NVQlNUKFtOT19SRUdFWF0pCisjCisjIERlZmluZSBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyBpZiB5b3VyIGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzdWNjZWVkcworIyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVhZCBmcm9tIGFuIGZvcGVuJ2VkIGRpcmVjdG9yeS4KK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN5c3RlbSBzdWNjZWVkcyB0byByZWFkIGZvcGVuJ2VkIGRpcmVjdG9yeV0sCisgW2FjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzXSwKK1sKK0FDX1JVTl9JRkVMU0UoCisJW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVF0sCisJCVtbCisJCUZJTEUgKmYgPSBmb3BlbigiLiIsICJyIik7CisJCXJldHVybiBmICE9IE5VTEw7XV0pXSwKKwlbYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9bm9dLAorCVthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXNdKQorXSkKK2lmIHRlc3QgJGFjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzID0geWVzOyB0aGVuCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVM9VW5mb3J0dW5hdGVseVllcworZWxzZQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTPQorZmkKK0dJVF9DT05GX1NVQlNUKFtGUkVBRF9SRUFEU19ESVJFQ1RPUklFU10pCisjCisjIERlZmluZSBTTlBSSU5URl9SRVRVUk5TX0JPR1VTIGlmIHlvdXIgYXJlIG9uIGEgc3lzdGVtIHdoaWNoIHNucHJpbnRmKCkKKyMgb3IgdnNucHJpbnRmKCkgcmV0dXJuIC0xIGluc3RlYWQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQKKyMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIGZpbmFsIHN0cmluZyBpZiBlbm91Z2ggc3BhY2UgaGFkIGJlZW4gYXZhaWxhYmxlLgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc25wcmludGYoKSBhbmQvb3IgdnNucHJpbnRmKCkgcmV0dXJuIGJvZ3VzIHZhbHVlXSwKKyBbYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1c10sCitbCitBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFQKKwkJI2luY2x1ZGUgInN0ZGFyZy5oIgorCisJCWludCB0ZXN0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKwkJeworCQkgIGludCByZXQ7CisJCSAgdmFfbGlzdCBhcDsKKwkJICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKwkJICByZXQgPSB2c25wcmludGYoc3RyLCBtYXhzaXplLCBmb3JtYXQsIGFwKTsKKwkJICB2YV9lbmQoYXApOworCQkgIHJldHVybiByZXQ7CisJCX1dLAorCQlbW2NoYXIgYnVmWzZdOworCQkgIGlmICh0ZXN0X3ZzbnByaW50ZihidWYsIDMsICIlcyIsICIxMjM0NSIpICE9IDUKKwkJICAgICAgfHwgc3RyY21wKGJ1ZiwgIjEyIikpIHJldHVybiAxOworCQkgIGlmIChzbnByaW50ZihidWYsIDMsICIlcyIsICIxMjM0NSIpICE9IDUKKwkJICAgICAgfHwgc3RyY21wKGJ1ZiwgIjEyIikpIHJldHVybiAxXV0pXSwKKwlbYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1cz1ub10sCisJW2FjX2N2X3NucHJpbnRmX3JldHVybnNfYm9ndXM9eWVzXSkKK10pCitpZiB0ZXN0ICRhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzID0geWVzOyB0aGVuCisJU05QUklOVEZfUkVUVVJOU19CT0dVUz1VbmZvcnR1bmF0ZWx5WWVzCitlbHNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUz0KK2ZpCitHSVRfQ09ORl9TVUJTVChbU05QUklOVEZfUkVUVVJOU19CT0dVU10pCisjCisjIERlZmluZSBORUVEU19NT0RFX1RSQU5TTEFUSU9OIGlmIHlvdXIgT1Mgc3RyYXlzIGZyb20gdGhlIHR5cGljYWwgZmlsZSB0eXBlCisjIGJpdHMgaW4gbW9kZSB2YWx1ZXMuCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgcGxhdGZvcm0gdXNlcyB0eXBpY2FsIGZpbGUgdHlwZSBiaXRzXSwKKyBbYWNfY3Zfc2FuZV9tb2RlX2JpdHNdLCBbCitBQ19FR1JFUF9DUFAoeWlwcGVleWVzd2VoYXZlaXQsCisJQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUXSwKK1sjaWYgU19JRk1UID09IDAxNzAwMDAgJiYgXAorCVNfSUZSRUcgPT0gMDEwMDAwMCAmJiBTX0lGRElSID09IDAwNDAwMDAgJiYgU19JRkxOSyA9PSAwMTIwMDAwICYmIFwKKwlTX0lGQkxLID09IDAwNjAwMDAgJiYgU19JRkNIUiA9PSAwMDIwMDAwICYmIFwKKwlTX0lGSUZPID09IDAwMTAwMDAgJiYgU19JRlNPQ0sgPT0gMDE0MDAwMAoreWlwcGVleWVzd2VoYXZlaXQKKyNlbmRpZgorXSksCisJW2FjX2N2X3NhbmVfbW9kZV9iaXRzPXllc10sCisJW2FjX2N2X3NhbmVfbW9kZV9iaXRzPW5vXSkKK10pCitpZiB0ZXN0ICRhY19jdl9zYW5lX21vZGVfYml0cyA9IHllczsgdGhlbgorCU5FRURTX01PREVfVFJBTlNMQVRJT049CitlbHNlCisJTkVFRFNfTU9ERV9UUkFOU0xBVElPTj1VbmZvcnR1bmF0ZWx5WWVzCitmaQorR0lUX0NPTkZfU1VCU1QoW05FRURTX01PREVfVFJBTlNMQVRJT05dKQorCisKKyMjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisjIyAoaW4gZGVmYXVsdCBDIGxpYnJhcnkgYW5kIGxpYnJhcmllcyBjaGVja2VkIGJ5IEFDX0NIRUNLX0xJQikKK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgbGlicmFyeSBmdW5jdGlvbnNdKQorIworIyBEZWZpbmUgTk9fTElCR0VOX0ggaWYgeW91IGRvbid0IGhhdmUgbGliZ2VuLmguCitBQ19DSEVDS19IRUFERVIoW2xpYmdlbi5oXSwKK1tOT19MSUJHRU5fSD1dLAorW05PX0xJQkdFTl9IPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fTElCR0VOX0hdKQorIworIyBEZWZpbmUgSEFWRV9QQVRIU19IIGlmIHlvdSBoYXZlIHBhdGhzLmguCitBQ19DSEVDS19IRUFERVIoW3BhdGhzLmhdLAorW0hBVkVfUEFUSFNfSD1ZZXNQbGVhc2VdLAorW0hBVkVfUEFUSFNfSD1dKQorR0lUX0NPTkZfU1VCU1QoW0hBVkVfUEFUSFNfSF0pCisjCisjIERlZmluZSBIQVZFX0xJQkNIQVJTRVRfSCBpZiBoYXZlIGxpYmNoYXJzZXQuaAorQUNfQ0hFQ0tfSEVBREVSKFtsaWJjaGFyc2V0LmhdLAorW0hBVkVfTElCQ0hBUlNFVF9IPVllc1BsZWFzZV0sCitbSEFWRV9MSUJDSEFSU0VUX0g9XSkKK0dJVF9DT05GX1NVQlNUKFtIQVZFX0xJQkNIQVJTRVRfSF0pCisjCisjIERlZmluZSBIQVZFX1NUUklOR1NfSCBpZiB5b3UgaGF2ZSBzdHJpbmdzLmgKK0FDX0NIRUNLX0hFQURFUihbc3RyaW5ncy5oXSwKK1tIQVZFX1NUUklOR1NfSD1ZZXNQbGVhc2VdLAorW0hBVkVfU1RSSU5HU19IPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9TVFJJTkdTX0hdKQorIyBEZWZpbmUgQ0hBUlNFVF9MSUIgaWYgbGliaWNvbnYgZG9lcyBub3QgZXhwb3J0IHRoZSBsb2NhbGVfY2hhcnNldCBzeW1ib2wKKyMgYW5kIGxpYmNoYXJzZXQgZG9lcworQ0hBUlNFVF9MSUI9CitBQ19DSEVDS19MSUIoW2ljb252XSwgW2xvY2FsZV9jaGFyc2V0XSwKKyAgICAgICBbQ0hBUlNFVF9MSUI9LWxpY29udl0sCisgICAgICAgW0FDX0NIRUNLX0xJQihbY2hhcnNldF0sIFtsb2NhbGVfY2hhcnNldF0sCisgICAgICAgICAgICAgICAgICAgICBbQ0hBUlNFVF9MSUI9LWxjaGFyc2V0XSldKQorR0lUX0NPTkZfU1VCU1QoW0NIQVJTRVRfTElCXSkKKyMKKyMgRGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRT1ZZXNQbGVhc2UgaWYgY2xvY2tfZ2V0dGltZSBpcyBhdmFpbGFibGUuCitHSVRfQ0hFQ0tfRlVOQyhjbG9ja19nZXR0aW1lLAorCVtIQVZFX0NMT0NLX0dFVFRJTUU9WWVzUGxlYXNlXSwKKwlbSEFWRV9DTE9DS19HRVRUSU1FPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9DTE9DS19HRVRUSU1FXSkKKworQUNfREVGVU4oW0NMT0NLX01PTk9UT05JQ19TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDx0aW1lLmg+CitjbG9ja2lkX3QgaWQgPSBDTE9DS19NT05PVE9OSUM7CitdXSldKQorCisjCisjIERlZmluZSBIQVZFX0NMT0NLX01PTk9UT05JQz1ZZXNQbGVhc2UgaWYgQ0xPQ0tfTU9OT1RPTklDIGlzIGF2YWlsYWJsZS4KK0FDX01TR19DSEVDS0lORyhbZm9yIENMT0NLX01PTk9UT05JQ10pCitBQ19DT01QSUxFX0lGRUxTRShbQ0xPQ0tfTU9OT1RPTklDX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJSEFWRV9DTE9DS19NT05PVE9OSUM9WWVzUGxlYXNlXSwKKwlbQUNfTVNHX1JFU1VMVChbbm9dKQorCUhBVkVfQ0xPQ0tfTU9OT1RPTklDPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9DTE9DS19NT05PVE9OSUNdKQorIworIyBEZWZpbmUgTk9fU0VUSVRJTUVSIGlmIHlvdSBkb24ndCBoYXZlIHNldGl0aW1lci4KK0dJVF9DSEVDS19GVU5DKHNldGl0aW1lciwKK1tOT19TRVRJVElNRVI9XSwKK1tOT19TRVRJVElNRVI9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19TRVRJVElNRVJdKQorIworIyBEZWZpbmUgTk9fU1RSQ0FTRVNUUiBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJjYXNlc3RyLgorR0lUX0NIRUNLX0ZVTkMoc3RyY2FzZXN0ciwKK1tOT19TVFJDQVNFU1RSPV0sCitbTk9fU1RSQ0FTRVNUUj1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NUUkNBU0VTVFJdKQorIworIyBEZWZpbmUgTk9fTUVNTUVNIGlmIHlvdSBkb24ndCBoYXZlIG1lbW1lbS4KK0dJVF9DSEVDS19GVU5DKG1lbW1lbSwKK1tOT19NRU1NRU09XSwKK1tOT19NRU1NRU09WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19NRU1NRU1dKQorIworIyBEZWZpbmUgTk9fU1RSTENQWSBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJsY3B5LgorR0lUX0NIRUNLX0ZVTkMoc3RybGNweSwKK1tOT19TVFJMQ1BZPV0sCitbTk9fU1RSTENQWT1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NUUkxDUFldKQorIworIyBEZWZpbmUgTk9fVUlOVE1BWF9UIGlmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSB1aW50bWF4X3QKK0FDX0NIRUNLX1RZUEUodWludG1heF90LAorW05PX1VJTlRNQVhfVD1dLAorW05PX1VJTlRNQVhfVD1ZZXNQbGVhc2VdLFsKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19VSU5UTUFYX1RdKQorIworIyBEZWZpbmUgTk9fU1RSVE9VTUFYIGlmIHlvdSBkb24ndCBoYXZlIHN0cnRvdW1heCBpbiB0aGUgQyBsaWJyYXJ5LgorR0lUX0NIRUNLX0ZVTkMoc3RydG91bWF4LAorW05PX1NUUlRPVU1BWD1dLAorW05PX1NUUlRPVU1BWD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NUUlRPVU1BWF0pCisjCisjIERlZmluZSBOT19TRVRFTlYgaWYgeW91IGRvbid0IGhhdmUgc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhzZXRlbnYsCitbTk9fU0VURU5WPV0sCitbTk9fU0VURU5WPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fU0VURU5WXSkKKyMKKyMgRGVmaW5lIE5PX1VOU0VURU5WIGlmIHlvdSBkb24ndCBoYXZlIHVuc2V0ZW52IGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyh1bnNldGVudiwKK1tOT19VTlNFVEVOVj1dLAorW05PX1VOU0VURU5WPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fVU5TRVRFTlZdKQorIworIyBEZWZpbmUgTk9fTUtEVEVNUCBpZiB5b3UgZG9uJ3QgaGF2ZSBta2R0ZW1wIGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhta2R0ZW1wLAorW05PX01LRFRFTVA9XSwKK1tOT19NS0RURU1QPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fTUtEVEVNUF0pCisjCisjIERlZmluZSBOT19JTklUR1JPVVBTIGlmIHlvdSBkb24ndCBoYXZlIGluaXRncm91cHMgaW4gdGhlIEMgbGlicmFyeS4KK0dJVF9DSEVDS19GVU5DKGluaXRncm91cHMsCitbTk9fSU5JVEdST1VQUz1dLAorW05PX0lOSVRHUk9VUFM9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19JTklUR1JPVVBTXSkKKyMKKyMgRGVmaW5lIEhBVkVfR0VUREVMSU0gaWYgeW91IGhhdmUgZ2V0ZGVsaW0gaW4gdGhlIEMgbGlicmFyeS4KK0dJVF9DSEVDS19GVU5DKGdldGRlbGltLAorW0hBVkVfR0VUREVMSU09WWVzUGxlYXNlXSwKK1tIQVZFX0dFVERFTElNPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9HRVRERUxJTV0pCisjCisjCisjIERlZmluZSBOT19NTUFQIGlmIHlvdSB3YW50IHRvIGF2b2lkIG1tYXAuCisjCisjIERlZmluZSBOT19JQ09OViBpZiB5b3VyIGxpYmMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBpY29udi4KKworQUNfREVGVU4oW0JTRF9TWVNDVExfU1JDXSwgWworQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorXV0sW1sKK2ludCB2YWwsIG1pYlsyXTsKK3NpemVfdCBsZW47CittaWJbMF0gPSBDVExfSFc7CittaWJbMV0gPSAxOworbGVuID0gc2l6ZW9mKHZhbCk7CityZXR1cm4gc3lzY3RsKG1pYiwgMiwgJnZhbCwgJmxlbiwgTlVMTCwgMCkgPyAxIDogMDsKK11dKV0pCisKKyMKKyMgRGVmaW5lIEhBVkVfQlNEX1NZU0NUTD1ZZXNQbGVhc2UgaWYgYSBCU0QtY29tcGF0aWJsZSBzeXNjdGwgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgQlNEIHN5c2N0bF0pCitBQ19DT01QSUxFX0lGRUxTRShbQlNEX1NZU0NUTF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCUhBVkVfQlNEX1NZU0NUTD1ZZXNQbGVhc2VdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pCisJSEFWRV9CU0RfU1lTQ1RMPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9CU0RfU1lTQ1RMXSkKKworIyMgT3RoZXIgY2hlY2tzLgorIyBEZWZpbmUgVVNFX1BJQyBpZiB5b3UgbmVlZCB0aGUgbWFpbiBnaXQgb2JqZWN0cyB0byBiZSBidWlsdCB3aXRoIC1mUElDCisjIGluIG9yZGVyIHRvIGJ1aWxkIGFuZCBsaW5rIHBlcmwvR2l0LnNvLiAgeDg2LTY0IHNlZW1zIHRvIG5lZWQgdGhpcy4KKyMKKyMgRGVmaW5lIE5PX1NZTUxJTktfSEVBRCBpZiB5b3UgbmV2ZXIgd2FudCAuZ2l0L0hFQUQgdG8gYmUgYSBzeW1ib2xpYyBsaW5rLgorIyBFbmFibGUgaXQgb24gV2luZG93cy4gIEJ5IGRlZmF1bHQsIHN5bXJlZnMgYXJlIHN0aWxsIHVzZWQuCisjCisjIERlZmluZSBOT19QVEhSRUFEUyBpZiB3ZSBkbyBub3QgaGF2ZSBwdGhyZWFkcy4KKyMKKyMgRGVmaW5lIFBUSFJFQURfTElCUyB0byB0aGUgbGlua2VyIGZsYWcgdXNlZCBmb3IgUHRocmVhZCBzdXBwb3J0LgorQUNfREVGVU4oW1BUSFJFQURURVNUX1NSQ10sIFsKK0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK3N0YXRpYyB2b2lkICpub29wKHZvaWQgKmlnbm9yZSkgeyByZXR1cm4gaWdub3JlOyB9CitdXSwgW1sKKwlwdGhyZWFkX211dGV4X3QgdGVzdF9tdXRleDsKKwlwdGhyZWFkX2tleV90IHRlc3Rfa2V5OworCXB0aHJlYWRfdCB0aDsKKwlpbnQgcmV0Y29kZSA9IDA7CisJdm9pZCAqcmV0ID0gKHZvaWQgKikwOworCXJldGNvZGUgfD0gcHRocmVhZF9rZXlfY3JlYXRlKCZ0ZXN0X2tleSwgKHZvaWQgKikwKTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmdGVzdF9tdXRleCwodm9pZCAqKTApOworCXJldGNvZGUgfD0gcHRocmVhZF9tdXRleF9sb2NrKCZ0ZXN0X211dGV4KTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0ZXN0X211dGV4KTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfY3JlYXRlKCZ0aCwgcmV0LCBub29wLCByZXQpOworCXJldGNvZGUgfD0gcHRocmVhZF9qb2luKHRoLCAmcmV0KTsKKwlyZXR1cm4gcmV0Y29kZTsKK11dKV0pCisKK2RubCBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitkbmwgICBbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sCitkbmwgICBbW3B0aHJlYWRfbXV0ZXhfdCB0ZXN0X211dGV4O11dCitkbmwgKV0pCisKK05PX1BUSFJFQURTPVVuZm9ydHVuYXRlbHlZZXMKK1BUSFJFQURfTElCUz0KKworaWYgdGVzdCAtbiAiJFVTRVJfTk9QVEhSRUFEIjsgdGhlbgorICAgQUNfTVNHX05PVElDRShbU2tpcHBpbmcgUE9TSVggVGhyZWFkcyBhdCB1c2VyIHJlcXVlc3QuXSkKKyMgaGFuZGxlIHRoZXNlIHNlcGFyYXRlbHkgc2luY2UgUFRIUkVBRF9DRkxBR1MgY291bGQgYmUgJy1scHRocmVhZHMKKyMgLURfUkVFTlRSQU5UJyBvciBzb21lIHN1Y2guCitlbGlmIHRlc3QgLXogIiRQVEhSRUFEX0NGTEFHUyI7IHRoZW4KKyAgdGhyZWFkc19mb3VuZD1ubworICAjIEF0dGVtcHQgdG8gY29tcGlsZSBhbmQgbGluayBzb21lIGNvZGUgdXNpbmcgcHRocmVhZHMgdG8gZGV0ZXJtaW5lCisgICMgcmVxdWlyZWQgbGlua2VyIGZsYWdzLiBUaGUgb3JkZXIgaXMgc29tZXdoYXQgaW1wb3J0YW50IGhlcmU6IFdlCisgICMgZmlyc3QgdHJ5IGl0IHdpdGhvdXQgYW55IGV4dHJhIGZsYWdzLCB0byBjYXRjaCBzeXN0ZW1zIHdoZXJlCisgICMgcHRocmVhZHMgYXJlIHBhcnQgb2YgdGhlIEMgbGlicmFyeSwgdGhlbiBnbyBvbiB0ZXN0aW5nIHZhcmlvdXMgb3RoZXIKKyAgIyBmbGFncy4gV2UgZG8gc28gdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLiBGb3IgZXhhbXBsZSwgb24gTWFjIE9TIFgKKyAgIyBwdGhyZWFkcyBhcmUgcGFydCBvZiB0aGUgQyBsaWJyYXJ5OyBtb3Jlb3ZlciwgdGhlIGNvbXBpbGVyIGFsbG93cyB1cworICAjIHRvIGFkZCAiLW10IiB0byB0aGUgQ0ZMQUdTIChhbHRob3VnaCBpdCB3aWxsIGRvIG5vdGhpbmcgZXhjZXB0CisgICMgdHJpZ2dlciBhIHdhcm5pbmcgYWJvdXQgYW4gdW51c2VkIGZsYWcpLiBIZW5jZSBpZiB3ZSBjaGVja2VkIGZvcgorICAjICItbXQiIGJlZm9yZSAiIiB3ZSB3b3VsZCBlbmQgdXAgcGlja2luZyBpdC4gQnV0IHVuZm9ydHVuYXRlbHkgdGhpcworICAjIHdvdWxkIHRoZW4gdHJpZ2dlciBjb21waWxlciB3YXJuaW5ncyBvbiBldmVyeSBzaW5nbGUgZmlsZSB3ZSBjb21waWxlLgorICBmb3Igb3B0IGluICIiIC1tdCAtcHRocmVhZCAtbHB0aHJlYWQ7IGRvCisgICAgIG9sZF9DRkxBR1M9IiRDRkxBR1MiCisgICAgIG9sZF9MSUJTPSIkTElCUyIKKyAgICAgY2FzZSAiJG9wdCIgaW4KKyAgICAgICAgLWwqKSAgTElCUz0iJG9wdCAkTElCUyIgOzsKKyAgICAgICAgKikgICAgQ0ZMQUdTPSIkb3B0ICRDRkxBR1MiIDs7CisgICAgIGVzYWMKKworICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQT1NJWCBUaHJlYWRzIHdpdGggJyRvcHQnXSkKKyAgICAgQUNfTElOS19JRkVMU0UoW1BUSFJFQURURVNUX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJCU5PX1BUSFJFQURTPQorCQlQVEhSRUFEX0xJQlM9IiRvcHQiCisJCVBUSFJFQURfQ0ZMQUdTPSIkb3B0IgorCQl0aHJlYWRzX2ZvdW5kPXllcworCQlicmVhaworCV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldKQorICAgICAgQ0ZMQUdTPSIkb2xkX0NGTEFHUyIKKyAgICAgIExJQlM9IiRvbGRfTElCUyIKKyAgZG9uZQorICBpZiB0ZXN0ICR0aHJlYWRzX2ZvdW5kICE9IHllczsgdGhlbgorICAgIEFDX0NIRUNLX0xJQihbcHRocmVhZF0sIFtwdGhyZWFkX2NyZWF0ZV0sCisJW1BUSFJFQURfTElCUz0iLWxwdGhyZWFkIl0sCisJW05PX1BUSFJFQURTPVVuZm9ydHVuYXRlbHlZZXNdKQorICBmaQorZWxzZQorICBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRQVEhSRUFEX0NGTEFHUyAkQ0ZMQUdTIgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQT1NJWCBUaHJlYWRzIHdpdGggJyRQVEhSRUFEX0NGTEFHUyddKQorICBBQ19MSU5LX0lGRUxTRShbUFRIUkVBRFRFU1RfU1JDXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkJTk9fUFRIUkVBRFM9CisJCVBUSFJFQURfTElCUz0iJFBUSFJFQURfQ0ZMQUdTIgorCV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldKQorCisgIENGTEFHUz0iJG9sZF9DRkxBR1MiCitmaQorCitDRkxBR1M9IiRvbGRfQ0ZMQUdTIgorCitHSVRfQ09ORl9TVUJTVChbUFRIUkVBRF9DRkxBR1NdKQorR0lUX0NPTkZfU1VCU1QoW1BUSFJFQURfTElCU10pCitHSVRfQ09ORl9TVUJTVChbTk9fUFRIUkVBRFNdKQorCisjIyBPdXRwdXQgZmlsZXMKK0FDX0NPTkZJR19GSUxFUyhbIiR7Y29uZmlnX2ZpbGV9IjoiJHtjb25maWdfaW59Il0pCitBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL2Nvbm5lY3QuYyBiL2Nvbm5lY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ1MWFiCi0tLSAvZGV2L251bGwKKysrIGIvY29ubmVjdC5jCkBAIC0wLDAgKzEsMTMzMSBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorCitzdGF0aWMgY2hhciAqc2VydmVyX2NhcGFiaWxpdGllc192MTsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBzZXJ2ZXJfY2FwYWJpbGl0aWVzX3YyID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2ZlYXR1cmVfdmFsdWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKKworc3RhdGljIGludCBjaGVja19yZWYoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWlmICghZmxhZ3MpCisJCXJldHVybiAxOworCisJaWYgKCFza2lwX3ByZWZpeChuYW1lLCAicmVmcy8iLCAmbmFtZSkpCisJCXJldHVybiAwOworCisJLyogUkVGX05PUk1BTCBtZWFucyB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIG1hZ2ljIGZha2UgdGFnIHJlZnMgKi8KKwlpZiAoKGZsYWdzICYgUkVGX05PUk1BTCkgJiYgY2hlY2tfcmVmbmFtZV9mb3JtYXQobmFtZSwgMCkpCisJCXJldHVybiAwOworCisJLyogUkVGX0hFQURTIG1lYW5zIHRoYXQgd2Ugd2FudCByZWd1bGFyIGJyYW5jaCBoZWFkcyAqLworCWlmICgoZmxhZ3MgJiBSRUZfSEVBRFMpICYmIHN0YXJ0c193aXRoKG5hbWUsICJoZWFkcy8iKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBSRUZfVEFHUyBtZWFucyB0aGF0IHdlIHdhbnQgdGFncyAqLworCWlmICgoZmxhZ3MgJiBSRUZfVEFHUykgJiYgc3RhcnRzX3dpdGgobmFtZSwgInRhZ3MvIikpCisJCXJldHVybiAxOworCisJLyogQWxsIHR5cGUgYml0cyBjbGVhciBtZWFucyB0aGF0IHdlIGFyZSBvayB3aXRoIGFueXRoaW5nICovCisJcmV0dXJuICEoZmxhZ3MgJiB+UkVGX05PUk1BTCk7Cit9CisKK2ludCBjaGVja19yZWZfdHlwZShjb25zdCBzdHJ1Y3QgcmVmICpyZWYsIGludCBmbGFncykKK3sKKwlyZXR1cm4gY2hlY2tfcmVmKHJlZi0+bmFtZSwgZmxhZ3MpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfaW5pdGlhbF9jb250YWN0KGludCB1bmV4cGVjdGVkKQoreworCS8qCisJICogQSBoYW5nLXVwIGFmdGVyIHNlZWluZyBzb21lIHJlc3BvbnNlIGZyb20gdGhlIG90aGVyIGVuZAorCSAqIG1lYW5zIHRoYXQgaXQgaXMgdW5leHBlY3RlZCwgYXMgd2Uga25vdyB0aGUgb3RoZXIgZW5kIGlzCisJICogd2lsbGluZyB0byB0YWxrIHRvIHVzLiAgQSBoYW5nLXVwIGJlZm9yZSBzZWVpbmcgYW55CisJICogcmVzcG9uc2UgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBBQ0wgcHJvYmxlbSwgdGhvdWdoLgorCSAqLworCWlmICh1bmV4cGVjdGVkKQorCQlkaWUoXygidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIpKTsKKwllbHNlCisJCWRpZShfKCJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuXG4iCisJCSAgICAgICJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKwkJICAgICAgImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIikpOworfQorCisvKiBDaGVja3MgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyB0aGUgY2FwYWJpbGl0eSAnYycgKi8KK2ludCBzZXJ2ZXJfc3VwcG9ydHNfdjIoY29uc3QgY2hhciAqYywgaW50IGRpZV9vbl9lcnJvcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJ2ZXJfY2FwYWJpbGl0aWVzX3YyLmFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICpvdXQ7CisJCWlmIChza2lwX3ByZWZpeChzZXJ2ZXJfY2FwYWJpbGl0aWVzX3YyLmFyZ3ZbaV0sIGMsICZvdXQpICYmCisJCSAgICAoISpvdXQgfHwgKm91dCA9PSAnPScpKQorCQkJcmV0dXJuIDE7CisJfQorCisJaWYgKGRpZV9vbl9lcnJvcikKKwkJZGllKF8oInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgJyVzJyIpLCBjKTsKKworCXJldHVybiAwOworfQorCitpbnQgc2VydmVyX3N1cHBvcnRzX2ZlYXR1cmUoY29uc3QgY2hhciAqYywgY29uc3QgY2hhciAqZmVhdHVyZSwKKwkJCSAgICBpbnQgZGllX29uX2Vycm9yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNlcnZlcl9jYXBhYmlsaXRpZXNfdjIuYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm91dDsKKwkJaWYgKHNraXBfcHJlZml4KHNlcnZlcl9jYXBhYmlsaXRpZXNfdjIuYXJndltpXSwgYywgJm91dCkgJiYKKwkJICAgICghKm91dCB8fCAqKG91dCsrKSA9PSAnPScpKSB7CisJCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KG91dCwgZmVhdHVyZSkpCisJCQkJcmV0dXJuIDE7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZGllX29uX2Vycm9yKQorCQlkaWUoXygic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciKSwgZmVhdHVyZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jYXBhYmlsaXRpZXNfdjIoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlcikKK3sKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgPT0gUEFDS0VUX1JFQURfTk9STUFMKQorCQlhcmd2X2FycmF5X3B1c2goJnNlcnZlcl9jYXBhYmlsaXRpZXNfdjIsIHJlYWRlci0+bGluZSk7CisKKwlpZiAocmVhZGVyLT5zdGF0dXMgIT0gUEFDS0VUX1JFQURfRkxVU0gpCisJCWRpZShfKCJleHBlY3RlZCBmbHVzaCBhZnRlciBjYXBhYmlsaXRpZXMiKSk7Cit9CisKK2VudW0gcHJvdG9jb2xfdmVyc2lvbiBkaXNjb3Zlcl92ZXJzaW9uKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIpCit7CisJZW51bSBwcm90b2NvbF92ZXJzaW9uIHZlcnNpb24gPSBwcm90b2NvbF91bmtub3duX3ZlcnNpb247CisKKwkvKgorCSAqIFBlZWsgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvCisJICogZGV0ZXJtaW5lIHRoZSBwcm90b2NvbCB2ZXJzaW9uIHRoZSBzZXJ2ZXIgaXMgc3BlYWtpbmcuCisJICovCisJc3dpdGNoIChwYWNrZXRfcmVhZGVyX3BlZWsocmVhZGVyKSkgeworCWNhc2UgUEFDS0VUX1JFQURfRU9GOgorCQlkaWVfaW5pdGlhbF9jb250YWN0KDApOworCWNhc2UgUEFDS0VUX1JFQURfRkxVU0g6CisJY2FzZSBQQUNLRVRfUkVBRF9ERUxJTToKKwkJdmVyc2lvbiA9IHByb3RvY29sX3YwOworCQlicmVhazsKKwljYXNlIFBBQ0tFVF9SRUFEX05PUk1BTDoKKwkJdmVyc2lvbiA9IGRldGVybWluZV9wcm90b2NvbF92ZXJzaW9uX2NsaWVudChyZWFkZXItPmxpbmUpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHZlcnNpb24pIHsKKwljYXNlIHByb3RvY29sX3YyOgorCQlwcm9jZXNzX2NhcGFiaWxpdGllc192MihyZWFkZXIpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YxOgorCQkvKiBSZWFkIHRoZSBwZWVrZWQgdmVyc2lvbiBsaW5lICovCisJCXBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpOworCQlicmVhazsKKwljYXNlIHByb3RvY29sX3YwOgorCQlicmVhazsKKwljYXNlIHByb3RvY29sX3Vua25vd25fdmVyc2lvbjoKKwkJQlVHKCJ1bmtub3duIHByb3RvY29sIHZlcnNpb24iKTsKKwl9CisKKwlyZXR1cm4gdmVyc2lvbjsKK30KKworc3RhdGljIHZvaWQgcGFyc2Vfb25lX3N5bXJlZl9pbmZvKHN0cnVjdCBzdHJpbmdfbGlzdCAqc3ltcmVmLCBjb25zdCBjaGFyICp2YWwsIGludCBsZW4pCit7CisJY2hhciAqc3ltLCAqdGFyZ2V0OworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKCFsZW4pCisJCXJldHVybjsgLyoganVzdCAic3ltcmVmIiAqLworCS8qIGUuZy4gInN5bXJlZj1IRUFEOnJlZnMvaGVhZHMvbWFzdGVyIiAqLworCXN5bSA9IHhtZW1kdXB6KHZhbCwgbGVuKTsKKwl0YXJnZXQgPSBzdHJjaHIoc3ltLCAnOicpOworCWlmICghdGFyZ2V0KQorCQkvKiBqdXN0ICJzeW1yZWY9c29tZXRoaW5nIiAqLworCQlnb3RvIHJlamVjdDsKKwkqKHRhcmdldCsrKSA9ICdcMCc7CisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHN5bSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkgfHwKKwkgICAgY2hlY2tfcmVmbmFtZV9mb3JtYXQodGFyZ2V0LCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkKKwkJLyogInN5bXJlZj1ib2d1czpwYWlyICovCisJCWdvdG8gcmVqZWN0OworCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoc3ltcmVmLCBzeW0pOworCWl0ZW0tPnV0aWwgPSB0YXJnZXQ7CisJcmV0dXJuOworcmVqZWN0OgorCWZyZWUoc3ltKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGFubm90YXRlX3JlZnNfd2l0aF9zeW1yZWZfaW5mbyhzdHJ1Y3QgcmVmICpyZWYpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHN5bXJlZiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWNvbnN0IGNoYXIgKmZlYXR1cmVfbGlzdCA9IHNlcnZlcl9jYXBhYmlsaXRpZXNfdjE7CisKKwl3aGlsZSAoZmVhdHVyZV9saXN0KSB7CisJCWludCBsZW47CisJCWNvbnN0IGNoYXIgKnZhbDsKKworCQl2YWwgPSBwYXJzZV9mZWF0dXJlX3ZhbHVlKGZlYXR1cmVfbGlzdCwgInN5bXJlZiIsICZsZW4pOworCQlpZiAoIXZhbCkKKwkJCWJyZWFrOworCQlwYXJzZV9vbmVfc3ltcmVmX2luZm8oJnN5bXJlZiwgdmFsLCBsZW4pOworCQlmZWF0dXJlX2xpc3QgPSB2YWwgKyAxOworCX0KKwlzdHJpbmdfbGlzdF9zb3J0KCZzeW1yZWYpOworCisJZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKCZzeW1yZWYsIHJlZi0+bmFtZSk7CisJCWlmICghaXRlbSkKKwkJCWNvbnRpbnVlOworCQlyZWYtPnN5bXJlZiA9IHhzdHJkdXAoKGNoYXIgKilpdGVtLT51dGlsKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN5bXJlZiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY2FwYWJpbGl0aWVzKGNvbnN0IGNoYXIgKmxpbmUsIGludCAqbGVuKQoreworCWludCBudWxfbG9jYXRpb24gPSBzdHJsZW4obGluZSk7CisJaWYgKG51bF9sb2NhdGlvbiA9PSAqbGVuKQorCQlyZXR1cm47CisJc2VydmVyX2NhcGFiaWxpdGllc192MSA9IHhzdHJkdXAobGluZSArIG51bF9sb2NhdGlvbiArIDEpOworCSpsZW4gPSBudWxfbG9jYXRpb247Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19kdW1teV9yZWYoY29uc3QgY2hhciAqbGluZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKHBhcnNlX29pZF9oZXgobGluZSwgJm9pZCwgJm5hbWUpKQorCQlyZXR1cm4gMDsKKwlpZiAoKm5hbWUgIT0gJyAnKQorCQlyZXR1cm4gMDsKKwluYW1lKys7CisKKwlyZXR1cm4gb2lkZXEoJm51bGxfb2lkLCAmb2lkKSAmJiAhc3RyY21wKG5hbWUsICJjYXBhYmlsaXRpZXNee30iKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbm9fY2FwYWJpbGl0aWVzKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJaWYgKHN0cmxlbihsaW5lKSAhPSBsZW4pCisJCXdhcm5pbmcoXygiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIpLAorCQkJbGluZSArIHN0cmxlbihsaW5lKSk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19yZWYoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgc3RydWN0IHJlZiAqKipsaXN0LAorCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3Qgb2lkX2FycmF5ICpleHRyYV9oYXZlKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKHBhcnNlX29pZF9oZXgobGluZSwgJm9sZF9vaWQsICZuYW1lKSkKKwkJcmV0dXJuIDA7CisJaWYgKCpuYW1lICE9ICcgJykKKwkJcmV0dXJuIDA7CisJbmFtZSsrOworCisJaWYgKGV4dHJhX2hhdmUgJiYgIXN0cmNtcChuYW1lLCAiLmhhdmUiKSkgeworCQlvaWRfYXJyYXlfYXBwZW5kKGV4dHJhX2hhdmUsICZvbGRfb2lkKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNhcGFiaWxpdGllc157fSIpKSB7CisJCWRpZShfKCJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBjYXBhYmlsaXRpZXNee30iKSk7CisJfSBlbHNlIGlmIChjaGVja19yZWYobmFtZSwgZmxhZ3MpKSB7CisJCXN0cnVjdCByZWYgKnJlZiA9IGFsbG9jX3JlZihuYW1lKTsKKwkJb2lkY3B5KCZyZWYtPm9sZF9vaWQsICZvbGRfb2lkKTsKKwkJKipsaXN0ID0gcmVmOworCQkqbGlzdCA9ICZyZWYtPm5leHQ7CisJfQorCWNoZWNrX25vX2NhcGFiaWxpdGllcyhsaW5lLCBsZW4pOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Nfc2hhbGxvdyhjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLAorCQkJICAgc3RydWN0IG9pZF9hcnJheSAqc2hhbGxvd19wb2ludHMpCit7CisJY29uc3QgY2hhciAqYXJnOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKworCWlmICghc2tpcF9wcmVmaXgobGluZSwgInNoYWxsb3cgIiwgJmFyZykpCisJCXJldHVybiAwOworCisJaWYgKGdldF9vaWRfaGV4KGFyZywgJm9sZF9vaWQpKQorCQlkaWUoXygicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIiksIGFyZyk7CisJaWYgKCFzaGFsbG93X3BvaW50cykKKwkJZGllKF8oInJlcG9zaXRvcnkgb24gdGhlIG90aGVyIGVuZCBjYW5ub3QgYmUgc2hhbGxvdyIpKTsKKwlvaWRfYXJyYXlfYXBwZW5kKHNoYWxsb3dfcG9pbnRzLCAmb2xkX29pZCk7CisJY2hlY2tfbm9fY2FwYWJpbGl0aWVzKGxpbmUsIGxlbik7CisJcmV0dXJuIDE7Cit9CisKK2VudW0gZ2V0X3JlbW90ZV9oZWFkc19zdGF0ZSB7CisJRVhQRUNUSU5HX0ZJUlNUX1JFRiA9IDAsCisJRVhQRUNUSU5HX1JFRiwKKwlFWFBFQ1RJTkdfU0hBTExPVywKKwlFWFBFQ1RJTkdfRE9ORSwKK307CisKKy8qCisgKiBSZWFkIGFsbCB0aGUgcmVmcyBmcm9tIHRoZSBvdGhlciBlbmQKKyAqLworc3RydWN0IHJlZiAqKmdldF9yZW1vdGVfaGVhZHMoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwKKwkJCSAgICAgIHN0cnVjdCByZWYgKipsaXN0LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICAgICBzdHJ1Y3Qgb2lkX2FycmF5ICpleHRyYV9oYXZlLAorCQkJICAgICAgc3RydWN0IG9pZF9hcnJheSAqc2hhbGxvd19wb2ludHMpCit7CisJc3RydWN0IHJlZiAqKm9yaWdfbGlzdCA9IGxpc3Q7CisJaW50IGxlbiA9IDA7CisJZW51bSBnZXRfcmVtb3RlX2hlYWRzX3N0YXRlIHN0YXRlID0gRVhQRUNUSU5HX0ZJUlNUX1JFRjsKKworCSpsaXN0ID0gTlVMTDsKKworCXdoaWxlIChzdGF0ZSAhPSBFWFBFQ1RJTkdfRE9ORSkgeworCQlzd2l0Y2ggKHBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpKSB7CisJCWNhc2UgUEFDS0VUX1JFQURfRU9GOgorCQkJZGllX2luaXRpYWxfY29udGFjdCgxKTsKKwkJY2FzZSBQQUNLRVRfUkVBRF9OT1JNQUw6CisJCQlsZW4gPSByZWFkZXItPnBrdGxlbjsKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9SRUFEX0ZMVVNIOgorCQkJc3RhdGUgPSBFWFBFQ1RJTkdfRE9ORTsKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9SRUFEX0RFTElNOgorCQkJZGllKF8oImludmFsaWQgcGFja2V0IikpOworCQl9CisKKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIEVYUEVDVElOR19GSVJTVF9SRUY6CisJCQlwcm9jZXNzX2NhcGFiaWxpdGllcyhyZWFkZXItPmxpbmUsICZsZW4pOworCQkJaWYgKHByb2Nlc3NfZHVtbXlfcmVmKHJlYWRlci0+bGluZSkpIHsKKwkJCQlzdGF0ZSA9IEVYUEVDVElOR19TSEFMTE9XOworCQkJCWJyZWFrOworCQkJfQorCQkJc3RhdGUgPSBFWFBFQ1RJTkdfUkVGOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBFWFBFQ1RJTkdfUkVGOgorCQkJaWYgKHByb2Nlc3NfcmVmKHJlYWRlci0+bGluZSwgbGVuLCAmbGlzdCwgZmxhZ3MsIGV4dHJhX2hhdmUpKQorCQkJCWJyZWFrOworCQkJc3RhdGUgPSBFWFBFQ1RJTkdfU0hBTExPVzsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgRVhQRUNUSU5HX1NIQUxMT1c6CisJCQlpZiAocHJvY2Vzc19zaGFsbG93KHJlYWRlci0+bGluZSwgbGVuLCBzaGFsbG93X3BvaW50cykpCisJCQkJYnJlYWs7CisJCQlkaWUoXygicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIpLCByZWFkZXItPmxpbmUpOworCQljYXNlIEVYUEVDVElOR19ET05FOgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlhbm5vdGF0ZV9yZWZzX3dpdGhfc3ltcmVmX2luZm8oKm9yaWdfbGlzdCk7CisKKwlyZXR1cm4gbGlzdDsKK30KKworLyogUmV0dXJucyAxIHdoZW4gYSB2YWxpZCByZWYgaGFzIGJlZW4gYWRkZWQgdG8gYGxpc3RgLCAwIG90aGVyd2lzZSAqLworc3RhdGljIGludCBwcm9jZXNzX3JlZl92Mihjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcmVmICoqKmxpc3QpCit7CisJaW50IHJldCA9IDE7CisJaW50IGkgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKwlzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHN0cmluZ19saXN0IGxpbmVfc2VjdGlvbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwljb25zdCBjaGFyICplbmQ7CisKKwkvKgorCSAqIFJlZiBsaW5lcyBoYXZlIGEgbnVtYmVyIG9mIGZpZWxkcyB3aGljaCBhcmUgc3BhY2UgZGVsaW1pbmF0ZWQuICBUaGUKKwkgKiBmaXJzdCBmaWVsZCBpcyB0aGUgT0lEIG9mIHRoZSByZWYuICBUaGUgc2Vjb25kIGZpZWxkIGlzIHRoZSByZWYKKwkgKiBuYW1lLiAgU3Vic2VxdWVudCBmaWVsZHMgKHN5bXJlZi10YXJnZXQgYW5kIHBlZWxlZCkgYXJlIG9wdGlvbmFsIGFuZAorCSAqIGRvbid0IGhhdmUgYSBwYXJ0aWN1bGFyIG9yZGVyLgorCSAqLworCWlmIChzdHJpbmdfbGlzdF9zcGxpdCgmbGluZV9zZWN0aW9ucywgbGluZSwgJyAnLCAtMSkgPCAyKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwYXJzZV9vaWRfaGV4KGxpbmVfc2VjdGlvbnMuaXRlbXNbaSsrXS5zdHJpbmcsICZvbGRfb2lkLCAmZW5kKSB8fAorCSAgICAqZW5kKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCXJlZiA9IGFsbG9jX3JlZihsaW5lX3NlY3Rpb25zLml0ZW1zW2krK10uc3RyaW5nKTsKKworCW9pZGNweSgmcmVmLT5vbGRfb2lkLCAmb2xkX29pZCk7CisJKipsaXN0ID0gcmVmOworCSpsaXN0ID0gJnJlZi0+bmV4dDsKKworCWZvciAoOyBpIDwgbGluZV9zZWN0aW9ucy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGxpbmVfc2VjdGlvbnMuaXRlbXNbaV0uc3RyaW5nOworCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAic3ltcmVmLXRhcmdldDoiLCAmYXJnKSkKKwkJCXJlZi0+c3ltcmVmID0geHN0cmR1cChhcmcpOworCisJCWlmIChza2lwX3ByZWZpeChhcmcsICJwZWVsZWQ6IiwgJmFyZykpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgcGVlbGVkX29pZDsKKwkJCWNoYXIgKnBlZWxlZF9uYW1lOworCQkJc3RydWN0IHJlZiAqcGVlbGVkOworCQkJaWYgKHBhcnNlX29pZF9oZXgoYXJnLCAmcGVlbGVkX29pZCwgJmVuZCkgfHwgKmVuZCkgeworCQkJCXJldCA9IDA7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXBlZWxlZF9uYW1lID0geHN0cmZtdCgiJXNee30iLCByZWYtPm5hbWUpOworCQkJcGVlbGVkID0gYWxsb2NfcmVmKHBlZWxlZF9uYW1lKTsKKworCQkJb2lkY3B5KCZwZWVsZWQtPm9sZF9vaWQsICZwZWVsZWRfb2lkKTsKKwkJCSoqbGlzdCA9IHBlZWxlZDsKKwkJCSpsaXN0ID0gJnBlZWxlZC0+bmV4dDsKKworCQkJZnJlZShwZWVsZWRfbmFtZSk7CisJCX0KKwl9CisKK291dDoKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGluZV9zZWN0aW9ucywgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHJlZiAqKmdldF9yZW1vdGVfcmVmcyhpbnQgZmRfb3V0LCBzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJICAgICBzdHJ1Y3QgcmVmICoqbGlzdCwgaW50IGZvcl9wdXNoLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqcmVmX3ByZWZpeGVzLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNlcnZlcl9vcHRpb25zKQoreworCWludCBpOworCSpsaXN0ID0gTlVMTDsKKworCWlmIChzZXJ2ZXJfc3VwcG9ydHNfdjIoImxzLXJlZnMiLCAxKSkKKwkJcGFja2V0X3dyaXRlX2ZtdChmZF9vdXQsICJjb21tYW5kPWxzLXJlZnNcbiIpOworCisJaWYgKHNlcnZlcl9zdXBwb3J0c192MigiYWdlbnQiLCAwKSkKKwkJcGFja2V0X3dyaXRlX2ZtdChmZF9vdXQsICJhZ2VudD0lcyIsIGdpdF91c2VyX2FnZW50X3Nhbml0aXplZCgpKTsKKworCWlmIChzZXJ2ZXJfb3B0aW9ucyAmJiBzZXJ2ZXJfb3B0aW9ucy0+bnIgJiYKKwkgICAgc2VydmVyX3N1cHBvcnRzX3YyKCJzZXJ2ZXItb3B0aW9uIiwgMSkpCisJCWZvciAoaSA9IDA7IGkgPCBzZXJ2ZXJfb3B0aW9ucy0+bnI7IGkrKykKKwkJCXBhY2tldF93cml0ZV9mbXQoZmRfb3V0LCAic2VydmVyLW9wdGlvbj0lcyIsCisJCQkJCSBzZXJ2ZXJfb3B0aW9ucy0+aXRlbXNbaV0uc3RyaW5nKTsKKworCXBhY2tldF9kZWxpbShmZF9vdXQpOworCS8qIFdoZW4gcHVzaGluZyB3ZSBkb24ndCB3YW50IHRvIHJlcXVlc3QgdGhlIHBlZWxlZCB0YWdzICovCisJaWYgKCFmb3JfcHVzaCkKKwkJcGFja2V0X3dyaXRlX2ZtdChmZF9vdXQsICJwZWVsXG4iKTsKKwlwYWNrZXRfd3JpdGVfZm10KGZkX291dCwgInN5bXJlZnNcbiIpOworCWZvciAoaSA9IDA7IHJlZl9wcmVmaXhlcyAmJiBpIDwgcmVmX3ByZWZpeGVzLT5hcmdjOyBpKyspIHsKKwkJcGFja2V0X3dyaXRlX2ZtdChmZF9vdXQsICJyZWYtcHJlZml4ICVzXG4iLAorCQkJCSByZWZfcHJlZml4ZXMtPmFyZ3ZbaV0pOworCX0KKwlwYWNrZXRfZmx1c2goZmRfb3V0KTsKKworCS8qIFByb2Nlc3MgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgKi8KKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgPT0gUEFDS0VUX1JFQURfTk9STUFMKSB7CisJCWlmICghcHJvY2Vzc19yZWZfdjIocmVhZGVyLT5saW5lLCAmbGlzdCkpCisJCQlkaWUoXygiaW52YWxpZCBscy1yZWZzIHJlc3BvbnNlOiAlcyIpLCByZWFkZXItPmxpbmUpOworCX0KKworCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9GTFVTSCkKKwkJZGllKF8oImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIikpOworCisJcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9mZWF0dXJlX3ZhbHVlKGNvbnN0IGNoYXIgKmZlYXR1cmVfbGlzdCwgY29uc3QgY2hhciAqZmVhdHVyZSwgaW50ICpsZW5wKQoreworCWludCBsZW47CisKKwlpZiAoIWZlYXR1cmVfbGlzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlsZW4gPSBzdHJsZW4oZmVhdHVyZSk7CisJd2hpbGUgKCpmZWF0dXJlX2xpc3QpIHsKKwkJY29uc3QgY2hhciAqZm91bmQgPSBzdHJzdHIoZmVhdHVyZV9saXN0LCBmZWF0dXJlKTsKKwkJaWYgKCFmb3VuZCkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoZmVhdHVyZV9saXN0ID09IGZvdW5kIHx8IGlzc3BhY2UoZm91bmRbLTFdKSkgeworCQkJY29uc3QgY2hhciAqdmFsdWUgPSBmb3VuZCArIGxlbjsKKwkJCS8qIGZlYXR1cmUgd2l0aCBubyB2YWx1ZSAoZS5nLiwgInRoaW4tcGFjayIpICovCisJCQlpZiAoISp2YWx1ZSB8fCBpc3NwYWNlKCp2YWx1ZSkpIHsKKwkJCQlpZiAobGVucCkKKwkJCQkJKmxlbnAgPSAwOworCQkJCXJldHVybiB2YWx1ZTsKKwkJCX0KKwkJCS8qIGZlYXR1cmUgd2l0aCBhIHZhbHVlIChlLmcuLCAiYWdlbnQ9Z2l0LzEuMi4zIikgKi8KKwkJCWVsc2UgaWYgKCp2YWx1ZSA9PSAnPScpIHsKKwkJCQl2YWx1ZSsrOworCQkJCWlmIChsZW5wKQorCQkJCQkqbGVucCA9IHN0cmNzcG4odmFsdWUsICIgXHRcbiIpOworCQkJCXJldHVybiB2YWx1ZTsKKwkJCX0KKwkJCS8qCisJCQkgKiBvdGhlcndpc2Ugd2UgbWF0Y2hlZCBhIHN1YnN0cmluZyBvZiBhbm90aGVyIGZlYXR1cmU7CisJCQkgKiBrZWVwIGxvb2tpbmcKKwkJCSAqLworCQl9CisJCWZlYXR1cmVfbGlzdCA9IGZvdW5kICsgMTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBwYXJzZV9mZWF0dXJlX3JlcXVlc3QoY29uc3QgY2hhciAqZmVhdHVyZV9saXN0LCBjb25zdCBjaGFyICpmZWF0dXJlKQoreworCXJldHVybiAhIXBhcnNlX2ZlYXR1cmVfdmFsdWUoZmVhdHVyZV9saXN0LCBmZWF0dXJlLCBOVUxMKTsKK30KKworY29uc3QgY2hhciAqc2VydmVyX2ZlYXR1cmVfdmFsdWUoY29uc3QgY2hhciAqZmVhdHVyZSwgaW50ICpsZW4pCit7CisJcmV0dXJuIHBhcnNlX2ZlYXR1cmVfdmFsdWUoc2VydmVyX2NhcGFiaWxpdGllc192MSwgZmVhdHVyZSwgbGVuKTsKK30KKworaW50IHNlcnZlcl9zdXBwb3J0cyhjb25zdCBjaGFyICpmZWF0dXJlKQoreworCXJldHVybiAhIXNlcnZlcl9mZWF0dXJlX3ZhbHVlKGZlYXR1cmUsIE5VTEwpOworfQorCitlbnVtIHByb3RvY29sIHsKKwlQUk9UT19MT0NBTCA9IDEsCisJUFJPVE9fRklMRSwKKwlQUk9UT19TU0gsCisJUFJPVE9fR0lUCit9OworCitpbnQgdXJsX2lzX2xvY2FsX25vdF9zc2goY29uc3QgY2hhciAqdXJsKQoreworCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hyKHVybCwgJzonKTsKKwljb25zdCBjaGFyICpzbGFzaCA9IHN0cmNocih1cmwsICcvJyk7CisJcmV0dXJuICFjb2xvbiB8fCAoc2xhc2ggJiYgc2xhc2ggPCBjb2xvbikgfHwKKwkJKGhhc19kb3NfZHJpdmVfcHJlZml4KHVybCkgJiYgaXNfdmFsaWRfcGF0aCh1cmwpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnByb3RfbmFtZShlbnVtIHByb3RvY29sIHByb3RvY29sKQoreworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwkJY2FzZSBQUk9UT19MT0NBTDoKKwkJY2FzZSBQUk9UT19GSUxFOgorCQkJcmV0dXJuICJmaWxlIjsKKwkJY2FzZSBQUk9UT19TU0g6CisJCQlyZXR1cm4gInNzaCI7CisJCWNhc2UgUFJPVE9fR0lUOgorCQkJcmV0dXJuICJnaXQiOworCQlkZWZhdWx0OgorCQkJcmV0dXJuICJ1bmtub3duIHByb3RvY29sIjsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIHByb3RvY29sIGdldF9wcm90b2NvbChjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghc3RyY21wKG5hbWUsICJzc2giKSkKKwkJcmV0dXJuIFBST1RPX1NTSDsKKwlpZiAoIXN0cmNtcChuYW1lLCAiZ2l0IikpCisJCXJldHVybiBQUk9UT19HSVQ7CisJaWYgKCFzdHJjbXAobmFtZSwgImdpdCtzc2giKSkgLyogZGVwcmVjYXRlZCAtIGRvIG5vdCB1c2UgKi8KKwkJcmV0dXJuIFBST1RPX1NTSDsKKwlpZiAoIXN0cmNtcChuYW1lLCAic3NoK2dpdCIpKSAvKiBkZXByZWNhdGVkIC0gZG8gbm90IHVzZSAqLworCQlyZXR1cm4gUFJPVE9fU1NIOworCWlmICghc3RyY21wKG5hbWUsICJmaWxlIikpCisJCXJldHVybiBQUk9UT19GSUxFOworCWRpZShfKCJwcm90b2NvbCAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQiKSwgbmFtZSk7Cit9CisKK3N0YXRpYyBjaGFyICpob3N0X2VuZChjaGFyICoqaG9zdHN0YXJ0LCBpbnQgcmVtb3ZlYnJhY2tldHMpCit7CisJY2hhciAqaG9zdCA9ICpob3N0c3RhcnQ7CisJY2hhciAqZW5kOworCWNoYXIgKnN0YXJ0ID0gc3Ryc3RyKGhvc3QsICJAWyIpOworCWlmIChzdGFydCkKKwkJc3RhcnQrKzsgLyogSnVtcCBvdmVyICdAJyAqLworCWVsc2UKKwkJc3RhcnQgPSBob3N0OworCWlmIChzdGFydFswXSA9PSAnWycpIHsKKwkJZW5kID0gc3RyY2hyKHN0YXJ0ICsgMSwgJ10nKTsKKwkJaWYgKGVuZCkgeworCQkJaWYgKHJlbW92ZWJyYWNrZXRzKSB7CisJCQkJKmVuZCA9IDA7CisJCQkJbWVtbW92ZShzdGFydCwgc3RhcnQgKyAxLCBlbmQgLSBzdGFydCk7CisJCQkJZW5kKys7CisJCQl9CisJCX0gZWxzZQorCQkJZW5kID0gaG9zdDsKKwl9IGVsc2UKKwkJZW5kID0gaG9zdDsKKwlyZXR1cm4gZW5kOworfQorCisjZGVmaW5lIFNUUl8ocykJIyBzCisjZGVmaW5lIFNUUihzKQlTVFJfKHMpCisKK3N0YXRpYyB2b2lkIGdldF9ob3N0X2FuZF9wb3J0KGNoYXIgKipob3N0LCBjb25zdCBjaGFyICoqcG9ydCkKK3sKKwljaGFyICpjb2xvbiwgKmVuZDsKKwllbmQgPSBob3N0X2VuZChob3N0LCAxKTsKKwljb2xvbiA9IHN0cmNocihlbmQsICc6Jyk7CisJaWYgKGNvbG9uKSB7CisJCWxvbmcgcG9ydG5yID0gc3RydG9sKGNvbG9uICsgMSwgJmVuZCwgMTApOworCQlpZiAoZW5kICE9IGNvbG9uICsgMSAmJiAqZW5kID09ICdcMCcgJiYgMCA8PSBwb3J0bnIgJiYgcG9ydG5yIDwgNjU1MzYpIHsKKwkJCSpjb2xvbiA9IDA7CisJCQkqcG9ydCA9IGNvbG9uICsgMTsKKwkJfSBlbHNlIGlmICghY29sb25bMV0pIHsKKwkJCSpjb2xvbiA9IDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9rZWVwYWxpdmUoaW50IHNvY2tmZCkKK3sKKwlpbnQga2EgPSAxOworCisJaWYgKHNldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsICZrYSwgc2l6ZW9mKGthKSkgPCAwKQorCQllcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiKSk7Cit9CisKKyNpZm5kZWYgTk9fSVBWNgorCitzdGF0aWMgY29uc3QgY2hhciAqYWlfbmFtZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFpKQoreworCXN0YXRpYyBjaGFyIGFkZHJbTklfTUFYSE9TVF07CisJaWYgKGdldG5hbWVpbmZvKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwgYWRkciwgc2l6ZW9mKGFkZHIpLCBOVUxMLCAwLAorCQkJTklfTlVNRVJJQ0hPU1QpICE9IDApCisJCXhzbnByaW50ZihhZGRyLCBzaXplb2YoYWRkciksICIodW5rbm93bikiKTsKKworCXJldHVybiBhZGRyOworfQorCisvKgorICogUmV0dXJucyBhIGNvbm5lY3RlZCBzb2NrZXQoKSBmZCwgb3IgZWxzZSBkaWUoKXMuCisgKi8KK3N0YXRpYyBpbnQgZ2l0X3RjcF9jb25uZWN0X3NvY2soY2hhciAqaG9zdCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgZXJyb3JfbWVzc2FnZSA9IFNUUkJVRl9JTklUOworCWludCBzb2NrZmQgPSAtMTsKKwljb25zdCBjaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpOworCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpMCwgKmFpOworCWludCBnYWk7CisJaW50IGNudCA9IDA7CisKKwlnZXRfaG9zdF9hbmRfcG9ydCgmaG9zdCwgJnBvcnQpOworCWlmICghKnBvcnQpCisJCXBvcnQgPSAiPG5vbmU+IjsKKworCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCWlmIChmbGFncyAmIENPTk5FQ1RfSVBWNCkKKwkJaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDsKKwllbHNlIGlmIChmbGFncyAmIENPTk5FQ1RfSVBWNikKKwkJaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKwloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworCisJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiTG9va2luZyB1cCAlcyAuLi4gIiksIGhvc3QpOworCisJZ2FpID0gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgJmhpbnRzLCAmYWkpOworCWlmIChnYWkpCisJCWRpZShfKCJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIpLCBob3N0LCBwb3J0LCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisKKwlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCS8qIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIgKi8KKwkJZnByaW50ZihzdGRlcnIsIF8oImRvbmUuXG5Db25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIiksIGhvc3QsIHBvcnQpOworCisJZm9yIChhaTAgPSBhaTsgYWk7IGFpID0gYWktPmFpX25leHQsIGNudCsrKSB7CisJCXNvY2tmZCA9IHNvY2tldChhaS0+YWlfZmFtaWx5LAorCQkJCWFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKKwkJaWYgKChzb2NrZmQgPCAwKSB8fAorCQkgICAgKGNvbm5lY3Qoc29ja2ZkLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkpIHsKKwkJCXN0cmJ1Zl9hZGRmKCZlcnJvcl9tZXNzYWdlLCAiJXNbJWQ6ICVzXTogZXJybm89JXNcbiIsCisJCQkJICAgIGhvc3QsIGNudCwgYWlfbmFtZShhaSksIHN0cmVycm9yKGVycm5vKSk7CisJCQlpZiAoMCA8PSBzb2NrZmQpCisJCQkJY2xvc2Uoc29ja2ZkKTsKKwkJCXNvY2tmZCA9IC0xOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQkJZnByaW50ZihzdGRlcnIsICIlcyAiLCBhaV9uYW1lKGFpKSk7CisJCWJyZWFrOworCX0KKworCWZyZWVhZGRyaW5mbyhhaTApOworCisJaWYgKHNvY2tmZCA8IDApCisJCWRpZShfKCJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiVzIiksIGhvc3QsIGVycm9yX21lc3NhZ2UuYnVmKTsKKworCWVuYWJsZV9rZWVwYWxpdmUoc29ja2ZkKTsKKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJLyogVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIgKi8KKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oImRvbmUuIikpOworCisJc3RyYnVmX3JlbGVhc2UoJmVycm9yX21lc3NhZ2UpOworCisJcmV0dXJuIHNvY2tmZDsKK30KKworI2Vsc2UgLyogTk9fSVBWNiAqLworCisvKgorICogUmV0dXJucyBhIGNvbm5lY3RlZCBzb2NrZXQoKSBmZCwgb3IgZWxzZSBkaWUoKXMuCisgKi8KK3N0YXRpYyBpbnQgZ2l0X3RjcF9jb25uZWN0X3NvY2soY2hhciAqaG9zdCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgZXJyb3JfbWVzc2FnZSA9IFNUUkJVRl9JTklUOworCWludCBzb2NrZmQgPSAtMTsKKwljb25zdCBjaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpOworCWNoYXIgKmVwOworCXN0cnVjdCBob3N0ZW50ICpoZTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2E7CisJY2hhciAqKmFwOworCXVuc2lnbmVkIGludCBucG9ydDsKKwlpbnQgY250OworCisJZ2V0X2hvc3RfYW5kX3BvcnQoJmhvc3QsICZwb3J0KTsKKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJZnByaW50ZihzdGRlcnIsIF8oIkxvb2tpbmcgdXAgJXMgLi4uICIpLCBob3N0KTsKKworCWhlID0gZ2V0aG9zdGJ5bmFtZShob3N0KTsKKwlpZiAoIWhlKQorCQlkaWUoXygidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIpLCBob3N0LCBoc3RyZXJyb3IoaF9lcnJubykpOworCW5wb3J0ID0gc3RydG91bChwb3J0LCAmZXAsIDEwKTsKKwlpZiAoIGVwID09IHBvcnQgfHwgKmVwICkgeworCQkvKiBOb3QgbnVtZXJpYyAqLworCQlzdHJ1Y3Qgc2VydmVudCAqc2UgPSBnZXRzZXJ2YnluYW1lKHBvcnQsInRjcCIpOworCQlpZiAoICFzZSApCisJCQlkaWUoXygidW5rbm93biBwb3J0ICVzIiksIHBvcnQpOworCQlucG9ydCA9IHNlLT5zX3BvcnQ7CisJfQorCisJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQkvKiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiICovCisJCWZwcmludGYoc3RkZXJyLCBfKCJkb25lLlxuQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIpLCBob3N0LCBwb3J0KTsKKworCWZvciAoY250ID0gMCwgYXAgPSBoZS0+aF9hZGRyX2xpc3Q7ICphcDsgYXArKywgY250KyspIHsKKwkJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mIHNhKTsKKwkJc2Euc2luX2ZhbWlseSA9IGhlLT5oX2FkZHJ0eXBlOworCQlzYS5zaW5fcG9ydCA9IGh0b25zKG5wb3J0KTsKKwkJbWVtY3B5KCZzYS5zaW5fYWRkciwgKmFwLCBoZS0+aF9sZW5ndGgpOworCisJCXNvY2tmZCA9IHNvY2tldChoZS0+aF9hZGRydHlwZSwgU09DS19TVFJFQU0sIDApOworCQlpZiAoKHNvY2tmZCA8IDApIHx8CisJCSAgICBjb25uZWN0KHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSwgc2l6ZW9mIHNhKSA8IDApIHsKKwkJCXN0cmJ1Zl9hZGRmKCZlcnJvcl9tZXNzYWdlLCAiJXNbJWQ6ICVzXTogZXJybm89JXNcbiIsCisJCQkJaG9zdCwKKwkJCQljbnQsCisJCQkJaW5ldF9udG9hKCooc3RydWN0IGluX2FkZHIgKikmc2Euc2luX2FkZHIpLAorCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQlpZiAoMCA8PSBzb2NrZmQpCisJCQkJY2xvc2Uoc29ja2ZkKTsKKwkJCXNvY2tmZCA9IC0xOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQkJZnByaW50ZihzdGRlcnIsICIlcyAiLAorCQkJCWluZXRfbnRvYSgqKHN0cnVjdCBpbl9hZGRyICopJnNhLnNpbl9hZGRyKSk7CisJCWJyZWFrOworCX0KKworCWlmIChzb2NrZmQgPCAwKQorCQlkaWUoXygidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4lcyIpLCBob3N0LCBlcnJvcl9tZXNzYWdlLmJ1Zik7CisKKwllbmFibGVfa2VlcGFsaXZlKHNvY2tmZCk7CisKKwlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCS8qIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiICovCisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJkb25lLiIpKTsKKworCXJldHVybiBzb2NrZmQ7Cit9CisKKyNlbmRpZiAvKiBOT19JUFY2ICovCisKKworLyoKKyAqIER1bW15IGNoaWxkX3Byb2Nlc3MgcmV0dXJuZWQgYnkgZ2l0X2Nvbm5lY3QoKSBpZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sCisgKiBkb2VzIG5vdCBuZWVkIGZvcmsoMikuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBub19mb3JrID0gQ0hJTERfUFJPQ0VTU19JTklUOworCitpbnQgZ2l0X2Nvbm5lY3Rpb25faXNfc29ja2V0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uKQoreworCXJldHVybiBjb25uID09ICZub19mb3JrOworfQorCitzdGF0aWMgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmdpdF90Y3BfY29ubmVjdChpbnQgZmRbMl0sIGNoYXIgKmhvc3QsIGludCBmbGFncykKK3sKKwlpbnQgc29ja2ZkID0gZ2l0X3RjcF9jb25uZWN0X3NvY2soaG9zdCwgZmxhZ3MpOworCisJZmRbMF0gPSBzb2NrZmQ7CisJZmRbMV0gPSBkdXAoc29ja2ZkKTsKKworCXJldHVybiAmbm9fZm9yazsKK30KKworCitzdGF0aWMgY2hhciAqZ2l0X3Byb3h5X2NvbW1hbmQ7CisKK3N0YXRpYyBpbnQgZ2l0X3Byb3h5X2NvbW1hbmRfb3B0aW9ucyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQl2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmdpdHByb3h5IikpIHsKKwkJY29uc3QgY2hhciAqZm9yX3BvczsKKwkJaW50IG1hdGNobGVuID0gLTE7CisJCWludCBob3N0bGVuOworCQljb25zdCBjaGFyICpyaG9zdF9uYW1lID0gY2I7CisJCWludCByaG9zdF9sZW4gPSBzdHJsZW4ocmhvc3RfbmFtZSk7CisKKwkJaWYgKGdpdF9wcm94eV9jb21tYW5kKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJLyogW2NvcmVdCisJCSAqIDsjIG1hdGNoZXMgd3d3Lmtlcm5lbC5vcmcgYXMgd2VsbAorCQkgKiBnaXRwcm94eSA9IG5ldGNhdHRlci0xIGZvciBrZXJuZWwub3JnCisJCSAqIGdpdHByb3h5ID0gbmV0Y2F0dGVyLTIgZm9yIHNhbXBsZS54egorCQkgKiBnaXRwcm94eSA9IG5ldGNhdHRlci1kZWZhdWx0CisJCSAqLworCQlmb3JfcG9zID0gc3Ryc3RyKHZhbHVlLCAiIGZvciAiKTsKKwkJaWYgKCFmb3JfcG9zKQorCQkJLyogbWF0Y2hlcyBldmVyeWJvZHkgKi8KKwkJCW1hdGNobGVuID0gc3RybGVuKHZhbHVlKTsKKwkJZWxzZSB7CisJCQlob3N0bGVuID0gc3RybGVuKGZvcl9wb3MgKyA1KTsKKwkJCWlmIChyaG9zdF9sZW4gPCBob3N0bGVuKQorCQkJCW1hdGNobGVuID0gLTE7CisJCQllbHNlIGlmICghc3RybmNtcChmb3JfcG9zICsgNSwKKwkJCQkJICByaG9zdF9uYW1lICsgcmhvc3RfbGVuIC0gaG9zdGxlbiwKKwkJCQkJICBob3N0bGVuKSAmJgorCQkJCSAoKHJob3N0X2xlbiA9PSBob3N0bGVuKSB8fAorCQkJCSAgcmhvc3RfbmFtZVtyaG9zdF9sZW4gLSBob3N0bGVuIC0xXSA9PSAnLicpKQorCQkJCW1hdGNobGVuID0gZm9yX3BvcyAtIHZhbHVlOworCQkJZWxzZQorCQkJCW1hdGNobGVuID0gLTE7CisJCX0KKwkJaWYgKDAgPD0gbWF0Y2hsZW4pIHsKKwkJCS8qIGNvcmUuZ2l0cHJveHkgPSBub25lIGZvciBrZXJuZWwub3JnICovCisJCQlpZiAobWF0Y2hsZW4gPT0gNCAmJgorCQkJICAgICFtZW1jbXAodmFsdWUsICJub25lIiwgNCkpCisJCQkJbWF0Y2hsZW4gPSAwOworCQkJZ2l0X3Byb3h5X2NvbW1hbmQgPSB4bWVtZHVweih2YWx1ZSwgbWF0Y2hsZW4pOworCQl9CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IGdpdF91c2VfcHJveHkoY29uc3QgY2hhciAqaG9zdCkKK3sKKwlnaXRfcHJveHlfY29tbWFuZCA9IGdldGVudigiR0lUX1BST1hZX0NPTU1BTkQiKTsKKwlnaXRfY29uZmlnKGdpdF9wcm94eV9jb21tYW5kX29wdGlvbnMsICh2b2lkKilob3N0KTsKKwlyZXR1cm4gKGdpdF9wcm94eV9jb21tYW5kICYmICpnaXRfcHJveHlfY29tbWFuZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X3Byb3h5X2Nvbm5lY3QoaW50IGZkWzJdLCBjaGFyICpob3N0KQoreworCWNvbnN0IGNoYXIgKnBvcnQgPSBTVFIoREVGQVVMVF9HSVRfUE9SVCk7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb3h5OworCisJZ2V0X2hvc3RfYW5kX3BvcnQoJmhvc3QsICZwb3J0KTsKKworCWlmIChsb29rc19saWtlX2NvbW1hbmRfbGluZV9vcHRpb24oaG9zdCkpCisJCWRpZShfKCJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIpLCBob3N0KTsKKwlpZiAobG9va3NfbGlrZV9jb21tYW5kX2xpbmVfb3B0aW9uKHBvcnQpKQorCQlkaWUoXygic3RyYW5nZSBwb3J0ICclcycgYmxvY2tlZCIpLCBwb3J0KTsKKworCXByb3h5ID0geG1hbGxvYyhzaXplb2YoKnByb3h5KSk7CisJY2hpbGRfcHJvY2Vzc19pbml0KHByb3h5KTsKKwlhcmd2X2FycmF5X3B1c2goJnByb3h5LT5hcmdzLCBnaXRfcHJveHlfY29tbWFuZCk7CisJYXJndl9hcnJheV9wdXNoKCZwcm94eS0+YXJncywgaG9zdCk7CisJYXJndl9hcnJheV9wdXNoKCZwcm94eS0+YXJncywgcG9ydCk7CisJcHJveHktPmluID0gLTE7CisJcHJveHktPm91dCA9IC0xOworCWlmIChzdGFydF9jb21tYW5kKHByb3h5KSkKKwkJZGllKF8oImNhbm5vdCBzdGFydCBwcm94eSAlcyIpLCBnaXRfcHJveHlfY29tbWFuZCk7CisJZmRbMF0gPSBwcm94eS0+b3V0OyAvKiByZWFkIGZyb20gcHJveHkgc3Rkb3V0ICovCisJZmRbMV0gPSBwcm94eS0+aW47ICAvKiB3cml0ZSB0byBwcm94eSBzdGRpbiAqLworCXJldHVybiBwcm94eTsKK30KKworc3RhdGljIGNoYXIgKmdldF9wb3J0KGNoYXIgKmhvc3QpCit7CisJY2hhciAqZW5kOworCWNoYXIgKnAgPSBzdHJjaHIoaG9zdCwgJzonKTsKKworCWlmIChwKSB7CisJCWxvbmcgcG9ydCA9IHN0cnRvbChwICsgMSwgJmVuZCwgMTApOworCQlpZiAoZW5kICE9IHAgKyAxICYmICplbmQgPT0gJ1wwJyAmJiAwIDw9IHBvcnQgJiYgcG9ydCA8IDY1NTM2KSB7CisJCQkqcCA9ICdcMCc7CisJCQlyZXR1cm4gcCsxOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRyYWN0IHByb3RvY29sIGFuZCByZWxldmFudCBwYXJ0cyBmcm9tIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiBVUkwuCisgKiBUaGUgY2FsbGVyIG11c3QgZnJlZSgpIHRoZSByZXR1cm5lZCBzdHJpbmdzLgorICovCitzdGF0aWMgZW51bSBwcm90b2NvbCBwYXJzZV9jb25uZWN0X3VybChjb25zdCBjaGFyICp1cmxfb3JpZywgY2hhciAqKnJldF9ob3N0LAorCQkJCSAgICAgICBjaGFyICoqcmV0X3BhdGgpCit7CisJY2hhciAqdXJsOworCWNoYXIgKmhvc3QsICpwYXRoOworCWNoYXIgKmVuZDsKKwlpbnQgc2VwYXJhdG9yID0gJy8nOworCWVudW0gcHJvdG9jb2wgcHJvdG9jb2wgPSBQUk9UT19MT0NBTDsKKworCWlmIChpc191cmwodXJsX29yaWcpKQorCQl1cmwgPSB1cmxfZGVjb2RlKHVybF9vcmlnKTsKKwllbHNlCisJCXVybCA9IHhzdHJkdXAodXJsX29yaWcpOworCisJaG9zdCA9IHN0cnN0cih1cmwsICI6Ly8iKTsKKwlpZiAoaG9zdCkgeworCQkqaG9zdCA9ICdcMCc7CisJCXByb3RvY29sID0gZ2V0X3Byb3RvY29sKHVybCk7CisJCWhvc3QgKz0gMzsKKwl9IGVsc2UgeworCQlob3N0ID0gdXJsOworCQlpZiAoIXVybF9pc19sb2NhbF9ub3Rfc3NoKHVybCkpIHsKKwkJCXByb3RvY29sID0gUFJPVE9fU1NIOworCQkJc2VwYXJhdG9yID0gJzonOworCQl9CisJfQorCisJLyoKKwkgKiBEb24ndCBkbyBkZXN0cnVjdGl2ZSB0cmFuc2Zvcm1zIGFzIHByb3RvY29sIGNvZGUgZG9lcworCSAqICdbXScgdW53cmFwcGluZyBpbiBnZXRfaG9zdF9hbmRfcG9ydCgpCisJICovCisJZW5kID0gaG9zdF9lbmQoJmhvc3QsIDApOworCisJaWYgKHByb3RvY29sID09IFBST1RPX0xPQ0FMKQorCQlwYXRoID0gZW5kOworCWVsc2UgaWYgKHByb3RvY29sID09IFBST1RPX0ZJTEUgJiYgKmhvc3QgIT0gJy8nICYmCisJCSAhaGFzX2Rvc19kcml2ZV9wcmVmaXgoaG9zdCkgJiYKKwkJIG9mZnNldF8xc3RfY29tcG9uZW50KGhvc3QgLSAyKSA+IDEpCisJCXBhdGggPSBob3N0IC0gMjsgLyogaW5jbHVkZSB0aGUgbGVhZGluZyAiLy8iICovCisJZWxzZSBpZiAocHJvdG9jb2wgPT0gUFJPVE9fRklMRSAmJiBoYXNfZG9zX2RyaXZlX3ByZWZpeChlbmQpKQorCQlwYXRoID0gZW5kOyAvKiAiZmlsZTovLyQocHdkKSIgbWF5IGJlICJmaWxlOi8vQzovcHJvamVjdHMvcmVwbyIgKi8KKwllbHNlCisJCXBhdGggPSBzdHJjaHIoZW5kLCBzZXBhcmF0b3IpOworCisJaWYgKCFwYXRoIHx8ICEqcGF0aCkKKwkJZGllKF8oIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IikpOworCisJLyoKKwkgKiBudWxsLXRlcm1pbmF0ZSBob3N0bmFtZSBhbmQgcG9pbnQgcGF0aCB0byB+IGZvciBVUkwncyBsaWtlIHRoaXM6CisJICogICAgc3NoOi8vaG9zdC54ei9+dXNlci9yZXBvCisJICovCisKKwllbmQgPSBwYXRoOyAvKiBOZWVkIHRvIFwwIHRlcm1pbmF0ZSBob3N0IGhlcmUgKi8KKwlpZiAoc2VwYXJhdG9yID09ICc6JykKKwkJcGF0aCsrOyAvKiBwYXRoIHN0YXJ0cyBhZnRlciAnOicgKi8KKwlpZiAocHJvdG9jb2wgPT0gUFJPVE9fR0lUIHx8IHByb3RvY29sID09IFBST1RPX1NTSCkgeworCQlpZiAocGF0aFsxXSA9PSAnficpCisJCQlwYXRoKys7CisJfQorCisJcGF0aCA9IHhzdHJkdXAocGF0aCk7CisJKmVuZCA9ICdcMCc7CisKKwkqcmV0X2hvc3QgPSB4c3RyZHVwKGhvc3QpOworCSpyZXRfcGF0aCA9IHBhdGg7CisJZnJlZSh1cmwpOworCXJldHVybiBwcm90b2NvbDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9zc2hfY29tbWFuZCh2b2lkKQoreworCWNvbnN0IGNoYXIgKnNzaDsKKworCWlmICgoc3NoID0gZ2V0ZW52KCJHSVRfU1NIX0NPTU1BTkQiKSkpCisJCXJldHVybiBzc2g7CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgiY29yZS5zc2hjb21tYW5kIiwgJnNzaCkpCisJCXJldHVybiBzc2g7CisKKwlyZXR1cm4gTlVMTDsKK30KKworZW51bSBzc2hfdmFyaWFudCB7CisJVkFSSUFOVF9BVVRPLAorCVZBUklBTlRfU0lNUExFLAorCVZBUklBTlRfU1NILAorCVZBUklBTlRfUExJTkssCisJVkFSSUFOVF9QVVRUWSwKKwlWQVJJQU5UX1RPUlRPSVNFUExJTkssCit9OworCitzdGF0aWMgdm9pZCBvdmVycmlkZV9zc2hfdmFyaWFudChlbnVtIHNzaF92YXJpYW50ICpzc2hfdmFyaWFudCkKK3sKKwljb25zdCBjaGFyICp2YXJpYW50ID0gZ2V0ZW52KCJHSVRfU1NIX1ZBUklBTlQiKTsKKworCWlmICghdmFyaWFudCAmJiBnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoInNzaC52YXJpYW50IiwgJnZhcmlhbnQpKQorCQlyZXR1cm47CisKKwlpZiAoIXN0cmNtcCh2YXJpYW50LCAiYXV0byIpKQorCQkqc3NoX3ZhcmlhbnQgPSBWQVJJQU5UX0FVVE87CisJZWxzZSBpZiAoIXN0cmNtcCh2YXJpYW50LCAicGxpbmsiKSkKKwkJKnNzaF92YXJpYW50ID0gVkFSSUFOVF9QTElOSzsKKwllbHNlIGlmICghc3RyY21wKHZhcmlhbnQsICJwdXR0eSIpKQorCQkqc3NoX3ZhcmlhbnQgPSBWQVJJQU5UX1BVVFRZOworCWVsc2UgaWYgKCFzdHJjbXAodmFyaWFudCwgInRvcnRvaXNlcGxpbmsiKSkKKwkJKnNzaF92YXJpYW50ID0gVkFSSUFOVF9UT1JUT0lTRVBMSU5LOworCWVsc2UgaWYgKCFzdHJjbXAodmFyaWFudCwgInNpbXBsZSIpKQorCQkqc3NoX3ZhcmlhbnQgPSBWQVJJQU5UX1NJTVBMRTsKKwllbHNlCisJCSpzc2hfdmFyaWFudCA9IFZBUklBTlRfU1NIOworfQorCitzdGF0aWMgZW51bSBzc2hfdmFyaWFudCBkZXRlcm1pbmVfc3NoX3ZhcmlhbnQoY29uc3QgY2hhciAqc3NoX2NvbW1hbmQsCisJCQkJCSAgICAgIGludCBpc19jbWRsaW5lKQoreworCWVudW0gc3NoX3ZhcmlhbnQgc3NoX3ZhcmlhbnQgPSBWQVJJQU5UX0FVVE87CisJY29uc3QgY2hhciAqdmFyaWFudDsKKwljaGFyICpwID0gTlVMTDsKKworCW92ZXJyaWRlX3NzaF92YXJpYW50KCZzc2hfdmFyaWFudCk7CisKKwlpZiAoc3NoX3ZhcmlhbnQgIT0gVkFSSUFOVF9BVVRPKQorCQlyZXR1cm4gc3NoX3ZhcmlhbnQ7CisKKwlpZiAoIWlzX2NtZGxpbmUpIHsKKwkJcCA9IHhzdHJkdXAoc3NoX2NvbW1hbmQpOworCQl2YXJpYW50ID0gYmFzZW5hbWUocCk7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqKnNzaF9hcmd2OworCisJCXAgPSB4c3RyZHVwKHNzaF9jb21tYW5kKTsKKwkJaWYgKHNwbGl0X2NtZGxpbmUocCwgJnNzaF9hcmd2KSA+IDApIHsKKwkJCXZhcmlhbnQgPSBiYXNlbmFtZSgoY2hhciAqKXNzaF9hcmd2WzBdKTsKKwkJCS8qCisJCQkgKiBBdCB0aGlzIHBvaW50LCB2YXJpYW50IHBvaW50cyBpbnRvIHRoZSBidWZmZXIKKwkJCSAqIHJlZmVyZW5jZWQgYnkgcCwgaGVuY2Ugd2UgZG8gbm90IG5lZWQgc3NoX2FyZ3YKKwkJCSAqIGFueSBsb25nZXIuCisJCQkgKi8KKwkJCWZyZWUoc3NoX2FyZ3YpOworCQl9IGVsc2UgeworCQkJZnJlZShwKTsKKwkJCXJldHVybiBzc2hfdmFyaWFudDsKKwkJfQorCX0KKworCWlmICghc3RyY2FzZWNtcCh2YXJpYW50LCAic3NoIikgfHwKKwkgICAgIXN0cmNhc2VjbXAodmFyaWFudCwgInNzaC5leGUiKSkKKwkJc3NoX3ZhcmlhbnQgPSBWQVJJQU5UX1NTSDsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YXJpYW50LCAicGxpbmsiKSB8fAorCQkgIXN0cmNhc2VjbXAodmFyaWFudCwgInBsaW5rLmV4ZSIpKQorCQlzc2hfdmFyaWFudCA9IFZBUklBTlRfUExJTks7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFyaWFudCwgInRvcnRvaXNlcGxpbmsiKSB8fAorCQkgIXN0cmNhc2VjbXAodmFyaWFudCwgInRvcnRvaXNlcGxpbmsuZXhlIikpCisJCXNzaF92YXJpYW50ID0gVkFSSUFOVF9UT1JUT0lTRVBMSU5LOworCisJZnJlZShwKTsKKwlyZXR1cm4gc3NoX3ZhcmlhbnQ7Cit9CisKKy8qCisgKiBPcGVuIGEgY29ubmVjdGlvbiB1c2luZyBHaXQncyBuYXRpdmUgcHJvdG9jb2wuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBob3N0YW5kcG9ydCwgYnV0IHRoaXMgZnVuY3Rpb24gbWF5CisgKiBtb2RpZnkgaXQgKGZvciBleGFtcGxlLCB0byB0cnVuY2F0ZSBpdCB0byByZW1vdmUgdGhlIHBvcnQgcGFydCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X2Nvbm5lY3RfZ2l0KGludCBmZFsyXSwgY2hhciAqaG9zdGFuZHBvcnQsCisJCQkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJvZywKKwkJCQkJICAgICBlbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiwKKwkJCQkJICAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisJc3RydWN0IHN0cmJ1ZiByZXF1ZXN0ID0gU1RSQlVGX0lOSVQ7CisJLyoKKwkgKiBTZXQgdXAgdmlydHVhbCBob3N0IGluZm9ybWF0aW9uIGJhc2VkIG9uIHdoZXJlIHdlIHdpbGwKKwkgKiBjb25uZWN0LCB1bmxlc3MgdGhlIHVzZXIgaGFzIG92ZXJyaWRkZW4gdXMgaW4KKwkgKiB0aGUgZW52aXJvbm1lbnQuCisJICovCisJY2hhciAqdGFyZ2V0X2hvc3QgPSBnZXRlbnYoIkdJVF9PVkVSUklERV9WSVJUVUFMX0hPU1QiKTsKKwlpZiAodGFyZ2V0X2hvc3QpCisJCXRhcmdldF9ob3N0ID0geHN0cmR1cCh0YXJnZXRfaG9zdCk7CisJZWxzZQorCQl0YXJnZXRfaG9zdCA9IHhzdHJkdXAoaG9zdGFuZHBvcnQpOworCisJdHJhbnNwb3J0X2NoZWNrX2FsbG93ZWQoImdpdCIpOworCisJLyoKKwkgKiBUaGVzZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gY29tbWFuZHMgZGllKCkgaWYgdGhleQorCSAqIGNhbm5vdCBjb25uZWN0LgorCSAqLworCWlmIChnaXRfdXNlX3Byb3h5KGhvc3RhbmRwb3J0KSkKKwkJY29ubiA9IGdpdF9wcm94eV9jb25uZWN0KGZkLCBob3N0YW5kcG9ydCk7CisJZWxzZQorCQljb25uID0gZ2l0X3RjcF9jb25uZWN0KGZkLCBob3N0YW5kcG9ydCwgZmxhZ3MpOworCS8qCisJICogU2VwYXJhdGUgb3JpZ2luYWwgcHJvdG9jb2wgY29tcG9uZW50cyBwcm9nIGFuZCBwYXRoCisJICogZnJvbSBleHRlbmRlZCBob3N0IGhlYWRlciB3aXRoIGEgTlVMIGJ5dGUuCisJICoKKwkgKiBOb3RlOiBEbyBub3QgYWRkIGFueSBvdGhlciBoZWFkZXJzIGhlcmUhICBEb2luZyBzbworCSAqIHdpbGwgY2F1c2Ugb2xkZXIgZ2l0LWRhZW1vbiBzZXJ2ZXJzIHRvIGNyYXNoLgorCSAqLworCXN0cmJ1Zl9hZGRmKCZyZXF1ZXN0LAorCQkgICAgIiVzICVzJWNob3N0PSVzJWMiLAorCQkgICAgcHJvZywgcGF0aCwgMCwKKwkJICAgIHRhcmdldF9ob3N0LCAwKTsKKworCS8qIElmIHVzaW5nIGEgbmV3IHZlcnNpb24gcHV0IHRoYXQgc3R1ZmYgaGVyZSBhZnRlciBhIHNlY29uZCBudWxsIGJ5dGUgKi8KKwlpZiAodmVyc2lvbiA+IDApIHsKKwkJc3RyYnVmX2FkZGNoKCZyZXF1ZXN0LCAnXDAnKTsKKwkJc3RyYnVmX2FkZGYoJnJlcXVlc3QsICJ2ZXJzaW9uPSVkJWMiLAorCQkJICAgIHZlcnNpb24sICdcMCcpOworCX0KKworCXBhY2tldF93cml0ZShmZFsxXSwgcmVxdWVzdC5idWYsIHJlcXVlc3QubGVuKTsKKworCWZyZWUodGFyZ2V0X2hvc3QpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZXF1ZXN0KTsKKwlyZXR1cm4gY29ubjsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGBlbnZgIGFuZCBvcHRpb25zIHRvCisgKiBgYXJnc2AgZm9yIHJ1bm5pbmcgc3NoIGluIEdpdCdzIFNTSC10dW5uZWxlZCB0cmFuc3BvcnQuCisgKi8KK3N0YXRpYyB2b2lkIHB1c2hfc3NoX29wdGlvbnMoc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3MsIHN0cnVjdCBhcmd2X2FycmF5ICplbnYsCisJCQkgICAgIGVudW0gc3NoX3ZhcmlhbnQgdmFyaWFudCwgY29uc3QgY2hhciAqcG9ydCwKKwkJCSAgICAgZW51bSBwcm90b2NvbF92ZXJzaW9uIHZlcnNpb24sIGludCBmbGFncykKK3sKKwlpZiAodmFyaWFudCA9PSBWQVJJQU5UX1NTSCAmJgorCSAgICB2ZXJzaW9uID4gMCkgeworCQlhcmd2X2FycmF5X3B1c2goYXJncywgIi1vIik7CisJCWFyZ3ZfYXJyYXlfcHVzaChhcmdzLCAiU2VuZEVudj0iIEdJVF9QUk9UT0NPTF9FTlZJUk9OTUVOVCk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoZW52LCBHSVRfUFJPVE9DT0xfRU5WSVJPTk1FTlQgIj12ZXJzaW9uPSVkIiwKKwkJCQkgdmVyc2lvbik7CisJfQorCisJaWYgKGZsYWdzICYgQ09OTkVDVF9JUFY0KSB7CisJCXN3aXRjaCAodmFyaWFudCkgeworCQljYXNlIFZBUklBTlRfQVVUTzoKKwkJCUJVRygiVkFSSUFOVF9BVVRPIHBhc3NlZCB0byBwdXNoX3NzaF9vcHRpb25zIik7CisJCWNhc2UgVkFSSUFOVF9TSU1QTEU6CisJCQlkaWUoXygic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIpKTsKKwkJY2FzZSBWQVJJQU5UX1NTSDoKKwkJY2FzZSBWQVJJQU5UX1BMSU5LOgorCQljYXNlIFZBUklBTlRfUFVUVFk6CisJCWNhc2UgVkFSSUFOVF9UT1JUT0lTRVBMSU5LOgorCQkJYXJndl9hcnJheV9wdXNoKGFyZ3MsICItNCIpOworCQl9CisJfSBlbHNlIGlmIChmbGFncyAmIENPTk5FQ1RfSVBWNikgeworCQlzd2l0Y2ggKHZhcmlhbnQpIHsKKwkJY2FzZSBWQVJJQU5UX0FVVE86CisJCQlCVUcoIlZBUklBTlRfQVVUTyBwYXNzZWQgdG8gcHVzaF9zc2hfb3B0aW9ucyIpOworCQljYXNlIFZBUklBTlRfU0lNUExFOgorCQkJZGllKF8oInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiKSk7CisJCWNhc2UgVkFSSUFOVF9TU0g6CisJCWNhc2UgVkFSSUFOVF9QTElOSzoKKwkJY2FzZSBWQVJJQU5UX1BVVFRZOgorCQljYXNlIFZBUklBTlRfVE9SVE9JU0VQTElOSzoKKwkJCWFyZ3ZfYXJyYXlfcHVzaChhcmdzLCAiLTYiKTsKKwkJfQorCX0KKworCWlmICh2YXJpYW50ID09IFZBUklBTlRfVE9SVE9JU0VQTElOSykKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3MsICItYmF0Y2giKTsKKworCWlmIChwb3J0KSB7CisJCXN3aXRjaCAodmFyaWFudCkgeworCQljYXNlIFZBUklBTlRfQVVUTzoKKwkJCUJVRygiVkFSSUFOVF9BVVRPIHBhc3NlZCB0byBwdXNoX3NzaF9vcHRpb25zIik7CisJCWNhc2UgVkFSSUFOVF9TSU1QTEU6CisJCQlkaWUoXygic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiKSk7CisJCWNhc2UgVkFSSUFOVF9TU0g6CisJCQlhcmd2X2FycmF5X3B1c2goYXJncywgIi1wIik7CisJCQlicmVhazsKKwkJY2FzZSBWQVJJQU5UX1BMSU5LOgorCQljYXNlIFZBUklBTlRfUFVUVFk6CisJCWNhc2UgVkFSSUFOVF9UT1JUT0lTRVBMSU5LOgorCQkJYXJndl9hcnJheV9wdXNoKGFyZ3MsICItUCIpOworCQl9CisKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3MsIHBvcnQpOworCX0KK30KKworLyogUHJlcGFyZSBhIGNoaWxkX3Byb2Nlc3MgZm9yIHVzZSBieSBHaXQncyBTU0gtdHVubmVsZWQgdHJhbnNwb3J0LiAqLworc3RhdGljIHZvaWQgZmlsbF9zc2hfYXJncyhzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubiwgY29uc3QgY2hhciAqc3NoX2hvc3QsCisJCQkgIGNvbnN0IGNoYXIgKnBvcnQsIGVudW0gcHJvdG9jb2xfdmVyc2lvbiB2ZXJzaW9uLAorCQkJICBpbnQgZmxhZ3MpCit7CisJY29uc3QgY2hhciAqc3NoOworCWVudW0gc3NoX3ZhcmlhbnQgdmFyaWFudDsKKworCWlmIChsb29rc19saWtlX2NvbW1hbmRfbGluZV9vcHRpb24oc3NoX2hvc3QpKQorCQlkaWUoXygic3RyYW5nZSBob3N0bmFtZSAnJXMnIGJsb2NrZWQiKSwgc3NoX2hvc3QpOworCisJc3NoID0gZ2V0X3NzaF9jb21tYW5kKCk7CisJaWYgKHNzaCkgeworCQl2YXJpYW50ID0gZGV0ZXJtaW5lX3NzaF92YXJpYW50KHNzaCwgMSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogR0lUX1NTSCBpcyB0aGUgbm8tc2hlbGwgdmVyc2lvbiBvZgorCQkgKiBHSVRfU1NIX0NPTU1BTkQgKGFuZCBtdXN0IHJlbWFpbiBzbyBmb3IKKwkJICogaGlzdG9yaWNhbCBjb21wYXRpYmlsaXR5KS4KKwkJICovCisJCWNvbm4tPnVzZV9zaGVsbCA9IDA7CisKKwkJc3NoID0gZ2V0ZW52KCJHSVRfU1NIIik7CisJCWlmICghc3NoKQorCQkJc3NoID0gInNzaCI7CisJCXZhcmlhbnQgPSBkZXRlcm1pbmVfc3NoX3ZhcmlhbnQoc3NoLCAwKTsKKwl9CisKKwlpZiAodmFyaWFudCA9PSBWQVJJQU5UX0FVVE8pIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZGV0ZWN0ID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCWRldGVjdC51c2Vfc2hlbGwgPSBjb25uLT51c2Vfc2hlbGw7CisJCWRldGVjdC5ub19zdGRpbiA9IGRldGVjdC5ub19zdGRvdXQgPSBkZXRlY3Qubm9fc3RkZXJyID0gMTsKKworCQlhcmd2X2FycmF5X3B1c2goJmRldGVjdC5hcmdzLCBzc2gpOworCQlhcmd2X2FycmF5X3B1c2goJmRldGVjdC5hcmdzLCAiLUciKTsKKwkJcHVzaF9zc2hfb3B0aW9ucygmZGV0ZWN0LmFyZ3MsICZkZXRlY3QuZW52X2FycmF5LAorCQkJCSBWQVJJQU5UX1NTSCwgcG9ydCwgdmVyc2lvbiwgZmxhZ3MpOworCQlhcmd2X2FycmF5X3B1c2goJmRldGVjdC5hcmdzLCBzc2hfaG9zdCk7CisKKwkJdmFyaWFudCA9IHJ1bl9jb21tYW5kKCZkZXRlY3QpID8gVkFSSUFOVF9TSU1QTEUgOiBWQVJJQU5UX1NTSDsKKwl9CisKKwlhcmd2X2FycmF5X3B1c2goJmNvbm4tPmFyZ3MsIHNzaCk7CisJcHVzaF9zc2hfb3B0aW9ucygmY29ubi0+YXJncywgJmNvbm4tPmVudl9hcnJheSwgdmFyaWFudCwgcG9ydCwgdmVyc2lvbiwgZmxhZ3MpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY29ubi0+YXJncywgc3NoX2hvc3QpOworfQorCisvKgorICogVGhpcyByZXR1cm5zIHRoZSBkdW1teSBjaGlsZF9wcm9jZXNzIGBub19mb3JrYCBpZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sCisgKiBkb2VzIG5vdCBuZWVkIGZvcmsoMiksIG9yIGEgc3RydWN0IGNoaWxkX3Byb2Nlc3Mgb2JqZWN0IGlmIGl0IGRvZXMuICBPbmNlCisgKiBkb25lLCBmaW5pc2ggdGhlIGNvbm5lY3Rpb24gd2l0aCBmaW5pc2hfY29ubmVjdCgpIHdpdGggdGhlIHZhbHVlIHJldHVybmVkCisgKiBmcm9tIHRoaXMgZnVuY3Rpb24gKGl0IGlzIHNhZmUgdG8gY2FsbCBmaW5pc2hfY29ubmVjdCgpIHdpdGggTlVMTCB0bworICogc3VwcG9ydCB0aGUgZm9ybWVyIGNhc2UpLgorICoKKyAqIElmIGl0IHJldHVybnMsIHRoZSBjb25uZWN0IGlzIHN1Y2Nlc3NmdWw7IGl0IGp1c3QgZGllcyBvbiBlcnJvcnMgKHRoaXMKKyAqIHdpbGwgaG9wZWZ1bGx5IGJlIGNoYW5nZWQgaW4gYSBsaWJpZmljYXRpb24gZWZmb3J0LCB0byByZXR1cm4gTlVMTCB3aGVuCisgKiB0aGUgY29ubmVjdGlvbiBmYWlsZWQpLgorICovCitzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICp1cmwsCisJCQkJICBjb25zdCBjaGFyICpwcm9nLCBpbnQgZmxhZ3MpCit7CisJY2hhciAqaG9zdGFuZHBvcnQsICpwYXRoOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uOworCWVudW0gcHJvdG9jb2wgcHJvdG9jb2w7CisJZW51bSBwcm90b2NvbF92ZXJzaW9uIHZlcnNpb24gPSBnZXRfcHJvdG9jb2xfdmVyc2lvbl9jb25maWcoKTsKKworCS8qCisJICogTkVFRFNXT1JLOiBJZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBwcm90b2NvbCB2MiBhbmQgd2UgYXJlIHBsYW5uaW5nCisJICogdG8gcGVyZm9ybSBhIHB1c2gsIHRoZW4gZmFsbGJhY2sgdG8gdjAgc2luY2UgdGhlIGNsaWVudCBkb2Vzbid0IGtub3cKKwkgKiBob3cgdG8gcHVzaCB5ZXQgdXNpbmcgdjIuCisJICovCisJaWYgKHZlcnNpb24gPT0gcHJvdG9jb2xfdjIgJiYgIXN0cmNtcCgiZ2l0LXJlY2VpdmUtcGFjayIsIHByb2cpKQorCQl2ZXJzaW9uID0gcHJvdG9jb2xfdjA7CisKKwkvKiBXaXRob3V0IHRoaXMgd2UgY2Fubm90IHJlbHkgb24gd2FpdHBpZCgpIHRvIHRlbGwKKwkgKiB3aGF0IGhhcHBlbmVkIHRvIG91ciBjaGlsZHJlbi4KKwkgKi8KKwlzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CisKKwlwcm90b2NvbCA9IHBhcnNlX2Nvbm5lY3RfdXJsKHVybCwgJmhvc3RhbmRwb3J0LCAmcGF0aCk7CisJaWYgKChmbGFncyAmIENPTk5FQ1RfRElBR19VUkwpICYmIChwcm90b2NvbCAhPSBQUk9UT19TU0gpKSB7CisJCXByaW50ZigiRGlhZzogdXJsPSVzXG4iLCB1cmwgPyB1cmwgOiAiTlVMTCIpOworCQlwcmludGYoIkRpYWc6IHByb3RvY29sPSVzXG4iLCBwcm90X25hbWUocHJvdG9jb2wpKTsKKwkJcHJpbnRmKCJEaWFnOiBob3N0YW5kcG9ydD0lc1xuIiwgaG9zdGFuZHBvcnQgPyBob3N0YW5kcG9ydCA6ICJOVUxMIik7CisJCXByaW50ZigiRGlhZzogcGF0aD0lc1xuIiwgcGF0aCA/IHBhdGggOiAiTlVMTCIpOworCQljb25uID0gTlVMTDsKKwl9IGVsc2UgaWYgKHByb3RvY29sID09IFBST1RPX0dJVCkgeworCQljb25uID0gZ2l0X2Nvbm5lY3RfZ2l0KGZkLCBob3N0YW5kcG9ydCwgcGF0aCwgcHJvZywgdmVyc2lvbiwgZmxhZ3MpOworCQljb25uLT50cmFjZTJfY2hpbGRfY2xhc3MgPSAidHJhbnNwb3J0L2dpdCI7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBjbWQgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqY29uc3QgKnZhcjsKKworCQljb25uID0geG1hbGxvYyhzaXplb2YoKmNvbm4pKTsKKwkJY2hpbGRfcHJvY2Vzc19pbml0KGNvbm4pOworCisJCWlmIChsb29rc19saWtlX2NvbW1hbmRfbGluZV9vcHRpb24ocGF0aCkpCisJCQlkaWUoXygic3RyYW5nZSBwYXRobmFtZSAnJXMnIGJsb2NrZWQiKSwgcGF0aCk7CisKKwkJc3RyYnVmX2FkZHN0cigmY21kLCBwcm9nKTsKKwkJc3RyYnVmX2FkZGNoKCZjbWQsICcgJyk7CisJCXNxX3F1b3RlX2J1ZigmY21kLCBwYXRoKTsKKworCQkvKiByZW1vdmUgcmVwby1sb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQgKi8KKwkJZm9yICh2YXIgPSBsb2NhbF9yZXBvX2VudjsgKnZhcjsgdmFyKyspCisJCQlhcmd2X2FycmF5X3B1c2goJmNvbm4tPmVudl9hcnJheSwgKnZhcik7CisKKwkJY29ubi0+dXNlX3NoZWxsID0gMTsKKwkJY29ubi0+aW4gPSBjb25uLT5vdXQgPSAtMTsKKwkJaWYgKHByb3RvY29sID09IFBST1RPX1NTSCkgeworCQkJY2hhciAqc3NoX2hvc3QgPSBob3N0YW5kcG9ydDsKKwkJCWNvbnN0IGNoYXIgKnBvcnQgPSBOVUxMOworCQkJdHJhbnNwb3J0X2NoZWNrX2FsbG93ZWQoInNzaCIpOworCQkJZ2V0X2hvc3RfYW5kX3BvcnQoJnNzaF9ob3N0LCAmcG9ydCk7CisKKwkJCWlmICghcG9ydCkKKwkJCQlwb3J0ID0gZ2V0X3BvcnQoc3NoX2hvc3QpOworCisJCQlpZiAoZmxhZ3MgJiBDT05ORUNUX0RJQUdfVVJMKSB7CisJCQkJcHJpbnRmKCJEaWFnOiB1cmw9JXNcbiIsIHVybCA/IHVybCA6ICJOVUxMIik7CisJCQkJcHJpbnRmKCJEaWFnOiBwcm90b2NvbD0lc1xuIiwgcHJvdF9uYW1lKHByb3RvY29sKSk7CisJCQkJcHJpbnRmKCJEaWFnOiB1c2VyYW5kaG9zdD0lc1xuIiwgc3NoX2hvc3QgPyBzc2hfaG9zdCA6ICJOVUxMIik7CisJCQkJcHJpbnRmKCJEaWFnOiBwb3J0PSVzXG4iLCBwb3J0ID8gcG9ydCA6ICJOT05FIik7CisJCQkJcHJpbnRmKCJEaWFnOiBwYXRoPSVzXG4iLCBwYXRoID8gcGF0aCA6ICJOVUxMIik7CisKKwkJCQlmcmVlKGhvc3RhbmRwb3J0KTsKKwkJCQlmcmVlKHBhdGgpOworCQkJCWZyZWUoY29ubik7CisJCQkJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQljb25uLT50cmFjZTJfY2hpbGRfY2xhc3MgPSAidHJhbnNwb3J0L3NzaCI7CisJCQlmaWxsX3NzaF9hcmdzKGNvbm4sIHNzaF9ob3N0LCBwb3J0LCB2ZXJzaW9uLCBmbGFncyk7CisJCX0gZWxzZSB7CisJCQl0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZCgiZmlsZSIpOworCQkJY29ubi0+dHJhY2UyX2NoaWxkX2NsYXNzID0gInRyYW5zcG9ydC9maWxlIjsKKwkJCWlmICh2ZXJzaW9uID4gMCkgeworCQkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNvbm4tPmVudl9hcnJheSwgR0lUX1BST1RPQ09MX0VOVklST05NRU5UICI9dmVyc2lvbj0lZCIsCisJCQkJCQkgdmVyc2lvbik7CisJCQl9CisJCX0KKwkJYXJndl9hcnJheV9wdXNoKCZjb25uLT5hcmdzLCBjbWQuYnVmKTsKKworCQlpZiAoc3RhcnRfY29tbWFuZChjb25uKSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gZm9yayIpKTsKKworCQlmZFswXSA9IGNvbm4tPm91dDsgLyogcmVhZCBmcm9tIGNoaWxkJ3Mgc3Rkb3V0ICovCisJCWZkWzFdID0gY29ubi0+aW47ICAvKiB3cml0ZSB0byBjaGlsZCdzIHN0ZGluICovCisJCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworCX0KKwlmcmVlKGhvc3RhbmRwb3J0KTsKKwlmcmVlKHBhdGgpOworCXJldHVybiBjb25uOworfQorCitpbnQgZmluaXNoX2Nvbm5lY3Qoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4pCit7CisJaW50IGNvZGU7CisJaWYgKCFjb25uIHx8IGdpdF9jb25uZWN0aW9uX2lzX3NvY2tldChjb25uKSkKKwkJcmV0dXJuIDA7CisKKwljb2RlID0gZmluaXNoX2NvbW1hbmQoY29ubik7CisJZnJlZShjb25uKTsKKwlyZXR1cm4gY29kZTsKK30KZGlmZiAtLWdpdCBhL2Nvbm5lY3QuaCBiL2Nvbm5lY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjIzODJlCi0tLSAvZGV2L251bGwKKysrIGIvY29ubmVjdC5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgQ09OTkVDVF9ICisjZGVmaW5lIENPTk5FQ1RfSAorCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKworI2RlZmluZSBDT05ORUNUX1ZFUkJPU0UgICAgICAgKDF1IDw8IDApCisjZGVmaW5lIENPTk5FQ1RfRElBR19VUkwgICAgICAoMXUgPDwgMSkKKyNkZWZpbmUgQ09OTkVDVF9JUFY0ICAgICAgICAgICgxdSA8PCAyKQorI2RlZmluZSBDT05ORUNUX0lQVjYgICAgICAgICAgKDF1IDw8IDMpCitzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKnByb2csIGludCBmbGFncyk7CitpbnQgZmluaXNoX2Nvbm5lY3Qoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4pOworaW50IGdpdF9jb25uZWN0aW9uX2lzX3NvY2tldChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubik7CitpbnQgc2VydmVyX3N1cHBvcnRzKGNvbnN0IGNoYXIgKmZlYXR1cmUpOworaW50IHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChjb25zdCBjaGFyICpmZWF0dXJlcywgY29uc3QgY2hhciAqZmVhdHVyZSk7Citjb25zdCBjaGFyICpzZXJ2ZXJfZmVhdHVyZV92YWx1ZShjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgKmxlbl9yZXQpOworaW50IHVybF9pc19sb2NhbF9ub3Rfc3NoKGNvbnN0IGNoYXIgKnVybCk7CisKK3N0cnVjdCBwYWNrZXRfcmVhZGVyOworZW51bSBwcm90b2NvbF92ZXJzaW9uIGRpc2NvdmVyX3ZlcnNpb24oc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlcik7CisKK2ludCBzZXJ2ZXJfc3VwcG9ydHNfdjIoY29uc3QgY2hhciAqYywgaW50IGRpZV9vbl9lcnJvcik7CitpbnQgc2VydmVyX3N1cHBvcnRzX2ZlYXR1cmUoY29uc3QgY2hhciAqYywgY29uc3QgY2hhciAqZmVhdHVyZSwKKwkJCSAgICBpbnQgZGllX29uX2Vycm9yKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb25uZWN0ZWQuYyBiL2Nvbm5lY3RlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWJkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb25uZWN0ZWQuYwpAQCAtMCwwICsxLDE0MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImNvbm5lY3RlZC5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAicHJvbWlzb3ItcmVtb3RlLmgiCisKKy8qCisgKiBJZiB3ZSBmZWVkIGFsbCB0aGUgY29tbWl0cyB3ZSB3YW50IHRvIHZlcmlmeSB0byB0aGlzIGNvbW1hbmQKKyAqCisgKiAgJCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tc3RkaW4gLS1ub3QgLS1hbGwKKyAqCisgKiBhbmQgaWYgaXQgZG9lcyBub3QgZXJyb3Igb3V0LCB0aGF0IG1lYW5zIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20KKyAqIHRoZXNlIGNvbW1pdHMgbG9jYWxseSBleGlzdHMgYW5kIGlzIGNvbm5lY3RlZCB0byBvdXIgZXhpc3RpbmcgcmVmcy4KKyAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgX25vdF8gdmFsaWRhdGUgdGhlIGluZGl2aWR1YWwgb2JqZWN0cy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqLworaW50IGNoZWNrX2Nvbm5lY3RlZChvaWRfaXRlcmF0ZV9mbiBmbiwgdm9pZCAqY2JfZGF0YSwKKwkJICAgIHN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHJldl9saXN0ID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBjaGVja19jb25uZWN0ZWRfb3B0aW9ucyBkZWZhdWx0cyA9IENIRUNLX0NPTk5FQ1RFRF9JTklUOworCWNoYXIgY29tbWl0W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqbmV3X3BhY2sgPSBOVUxMOworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKwlzaXplX3QgYmFzZV9sZW47CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWlmICghb3B0KQorCQlvcHQgPSAmZGVmYXVsdHM7CisJdHJhbnNwb3J0ID0gb3B0LT50cmFuc3BvcnQ7CisKKwlpZiAoZm4oY2JfZGF0YSwgJm9pZCkpIHsKKwkJaWYgKG9wdC0+ZXJyX2ZkKQorCQkJY2xvc2Uob3B0LT5lcnJfZmQpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICh0cmFuc3BvcnQgJiYgdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zICYmCisJICAgIHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+c2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCAmJgorCSAgICB0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUgJiYKKwkgICAgc3RyaXBfc3VmZml4KHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSwgIi5rZWVwIiwgJmJhc2VfbGVuKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGlkeF9maWxlID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGQoJmlkeF9maWxlLCB0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUsIGJhc2VfbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmaWR4X2ZpbGUsICIuaWR4Iik7CisJCW5ld19wYWNrID0gYWRkX3BhY2tlZF9naXQoaWR4X2ZpbGUuYnVmLCBpZHhfZmlsZS5sZW4sIDEpOworCQlzdHJidWZfcmVsZWFzZSgmaWR4X2ZpbGUpOworCX0KKworCWlmIChvcHQtPmNoZWNrX3JlZnNfYXJlX3Byb21pc29yX29iamVjdHNfb25seSkgeworCQkvKgorCQkgKiBGb3IgcGFydGlhbCBjbG9uZXMsIHdlIGRvbid0IHdhbnQgdG8gaGF2ZSB0byBkbyBhIHJlZ3VsYXIKKwkJICogY29ubmVjdGl2aXR5IGNoZWNrIGJlY2F1c2Ugd2UgaGF2ZSB0byBlbnVtZXJhdGUgYW5kIGV4Y2x1ZGUKKwkJICogYWxsIHByb21pc29yIG9iamVjdHMgKHNsb3cpLCBhbmQgdGhlbiB0aGUgY29ubmVjdGl2aXR5IGNoZWNrCisJCSAqIGl0c2VsZiBiZWNvbWVzIGEgbm8tb3AgYmVjYXVzZSBpbiBhIHBhcnRpYWwgY2xvbmUgZXZlcnkKKwkJICogb2JqZWN0IGlzIGEgcHJvbWlzb3Igb2JqZWN0LiBJbnN0ZWFkLCBqdXN0IG1ha2Ugc3VyZSB3ZQorCQkgKiByZWNlaXZlZCwgaW4gYSBwcm9taXNvciBwYWNrZmlsZSwgdGhlIG9iamVjdHMgcG9pbnRlZCB0byBieQorCQkgKiBlYWNoIHdhbnRlZCByZWYuCisJCSAqLworCQlkbyB7CisJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCQkJZm9yIChwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQkJaWYgKCFwLT5wYWNrX3Byb21pc29yKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZmluZF9wYWNrX2VudHJ5X29uZShvaWQuaGFzaCwgcCkpCisJCQkJCWdvdG8gcHJvbWlzb3JfcGFja19mb3VuZDsKKwkJCX0KKwkJCXJldHVybiAxOworcHJvbWlzb3JfcGFja19mb3VuZDoKKwkJCTsKKwkJfSB3aGlsZSAoIWZuKGNiX2RhdGEsICZvaWQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9wdC0+c2hhbGxvd19maWxlKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2xpc3QuYXJncywgIi0tc2hhbGxvdy1maWxlIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2xpc3QuYXJncywgb3B0LT5zaGFsbG93X2ZpbGUpOworCX0KKwlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsInJldi1saXN0Iik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1vYmplY3RzIik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1zdGRpbiIpOworCWlmIChoYXNfcHJvbWlzb3JfcmVtb3RlKCkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmV2X2xpc3QuYXJncywgIi0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIik7CisJaWYgKCFvcHQtPmlzX2RlZXBlbmluZ19mZXRjaCkgeworCQlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsICItLW5vdCIpOworCQlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsICItLWFsbCIpOworCX0KKwlhcmd2X2FycmF5X3B1c2goJnJldl9saXN0LmFyZ3MsICItLXF1aWV0Iik7CisJYXJndl9hcnJheV9wdXNoKCZyZXZfbGlzdC5hcmdzLCAiLS1hbHRlcm5hdGUtcmVmcyIpOworCWlmIChvcHQtPnByb2dyZXNzKQorCQlhcmd2X2FycmF5X3B1c2hmKCZyZXZfbGlzdC5hcmdzLCAiLS1wcm9ncmVzcz0lcyIsCisJCQkJIF8oIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIpKTsKKworCXJldl9saXN0LmdpdF9jbWQgPSAxOworCXJldl9saXN0LmVudiA9IG9wdC0+ZW52OworCXJldl9saXN0LmluID0gLTE7CisJcmV2X2xpc3Qubm9fc3Rkb3V0ID0gMTsKKwlpZiAob3B0LT5lcnJfZmQpCisJCXJldl9saXN0LmVyciA9IG9wdC0+ZXJyX2ZkOworCWVsc2UKKwkJcmV2X2xpc3Qubm9fc3RkZXJyID0gb3B0LT5xdWlldDsKKworCWlmIChzdGFydF9jb21tYW5kKCZyZXZfbGlzdCkpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIikpOworCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCWNvbW1pdFtoZXhzel0gPSAnXG4nOworCWRvIHsKKwkJLyoKKwkJICogSWYgaW5kZXgtcGFjayBhbHJlYWR5IGNoZWNrZWQgdGhhdDoKKwkJICogLSB0aGVyZSBhcmUgbm8gZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIG5ldyBwYWNrCisJCSAqIC0gdGhlIHBhY2sgaXMgc2VsZiBjb250YWluZWQKKwkJICogVGhlbiBpZiB0aGUgdXBkYXRlZCByZWYgaXMgaW4gdGhlIG5ldyBwYWNrLCB0aGVuIHdlCisJCSAqIGFyZSBzdXJlIHRoZSByZWYgaXMgZ29vZCBhbmQgbm90IHNlbmRpbmcgaXQgdG8KKwkJICogcmV2LWxpc3QgZm9yIHZlcmlmaWNhdGlvbi4KKwkJICovCisJCWlmIChuZXdfcGFjayAmJiBmaW5kX3BhY2tfZW50cnlfb25lKG9pZC5oYXNoLCBuZXdfcGFjaykpCisJCQljb250aW51ZTsKKworCQltZW1jcHkoY29tbWl0LCBvaWRfdG9faGV4KCZvaWQpLCBoZXhzeik7CisJCWlmICh3cml0ZV9pbl9mdWxsKHJldl9saXN0LmluLCBjb21taXQsIGhleHN6ICsgMSkgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRVBJUEUgJiYgZXJybm8gIT0gRUlOVkFMKQorCQkJCWVycm9yX2Vycm5vKF8oImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIpKTsKKwkJCWVyciA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghZm4oY2JfZGF0YSwgJm9pZCkpOworCisJaWYgKGNsb3NlKHJldl9saXN0LmluKSkKKwkJZXJyID0gZXJyb3JfZXJybm8oXygiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iKSk7CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZyZXZfbGlzdCkgfHwgZXJyOworfQpkaWZmIC0tZ2l0IGEvY29ubmVjdGVkLmggYi9jb25uZWN0ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmE1YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29ubmVjdGVkLmgKQEAgLTAsMCArMSw3NCBAQAorI2lmbmRlZiBDT05ORUNURURfSAorI2RlZmluZSBDT05ORUNURURfSAorCitzdHJ1Y3Qgb2JqZWN0X2lkOworc3RydWN0IHRyYW5zcG9ydDsKKworLyoKKyAqIFRha2UgY2FsbGJhY2sgZGF0YSwgYW5kIHJldHVybiBuZXh0IG9iamVjdCBuYW1lIGluIHRoZSBidWZmZXIuCisgKiBXaGVuIGNhbGxlZCBhZnRlciByZXR1cm5pbmcgdGhlIG5hbWUgZm9yIHRoZSBsYXN0IG9iamVjdCwgcmV0dXJuIC0xCisgKiB0byBzaWduYWwgRU9GLCBvdGhlcndpc2UgcmV0dXJuIDAuCisgKi8KK3R5cGVkZWYgaW50ICgqb2lkX2l0ZXJhdGVfZm4pKHZvaWQgKiwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIE5hbWVkLWFyZ3VtZW50cyBzdHJ1Y3QgZm9yIGNoZWNrX2Nvbm5lY3RlZC4gQWxsIGFyZ3VtZW50cyBhcmUKKyAqIG9wdGlvbmFsLCBhbmQgY2FuIGJlIGxlZnQgdG8gZGVmYXVsdHMgYXMgc2V0IGJ5IENIRUNLX0NPTk5FQ1RFRF9JTklULgorICovCitzdHJ1Y3QgY2hlY2tfY29ubmVjdGVkX29wdGlvbnMgeworCS8qIEF2b2lkIHByaW50aW5nIGFueSBlcnJvcnMgdG8gc3RkZXJyLiAqLworCWludCBxdWlldDsKKworCS8qIC0tc2hhbGxvdy1maWxlIHRvIHBhc3MgdG8gcmV2LWxpc3Qgc3ViLXByb2Nlc3MgKi8KKwljb25zdCBjaGFyICpzaGFsbG93X2ZpbGU7CisKKwkvKiBUcmFuc3BvcnQgd2hvc2Ugb2JqZWN0cyB3ZSBhcmUgY2hlY2tpbmcsIGlmIGF2YWlsYWJsZS4gKi8KKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisKKwkvKgorCSAqIElmIG5vbi16ZXJvLCBzZW5kIGVycm9yIG1lc3NhZ2VzIHRvIHRoaXMgZGVzY3JpcHRvciByYXRoZXIKKwkgKiB0aGFuIHN0ZGVyci4gVGhlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIGJlZm9yZSBjaGVja19jb25uZWN0ZWQKKwkgKiByZXR1cm5zLgorCSAqLworCWludCBlcnJfZmQ7CisKKwkvKiBJZiBub24temVybywgc2hvdyBwcm9ncmVzcyBhcyB3ZSB0cmF2ZXJzZSB0aGUgb2JqZWN0cy4gKi8KKwlpbnQgcHJvZ3Jlc3M7CisKKwkvKgorCSAqIEluc2VydCB0aGVzZSB2YXJpYWJsZXMgaW50byB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIGNoaWxkIHByb2Nlc3MuCisJICovCisJY29uc3QgY2hhciAqKmVudjsKKworCS8qCisJICogSWYgbm9uLXplcm8sIGNoZWNrIHRoZSBhbmNlc3RyeSBjaGFpbiBjb21wbGV0ZWx5LCBub3Qgc3RvcHBpbmcgYXQKKwkgKiBhbnkgZXhpc3RpbmcgcmVmLiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIGRlZXBlbmluZyBleGlzdGluZyByZWZzCisJICogZHVyaW5nIGEgZmV0Y2guCisJICovCisJdW5zaWduZWQgaXNfZGVlcGVuaW5nX2ZldGNoIDogMTsKKworCS8qCisJICogSWYgbm9uLXplcm8sIG9ubHkgY2hlY2sgdGhhdCB0aGUgdG9wLWxldmVsIG9iamVjdHMgcmVmZXJlbmNlZCBieSB0aGUKKwkgKiB3YW50ZWQgcmVmcyAocGFzc2VkIGluIGFzIGNiX2RhdGEpIGFyZSBwcm9taXNvciBvYmplY3RzLiBUaGlzIGlzCisJICogdXNlZnVsIGZvciBwYXJ0aWFsIGNsb25lcywgd2hlcmUgZW51bWVyYXRpbmcgYW5kIGV4Y2x1ZGluZyBhbGwKKwkgKiBwcm9taXNvciBvYmplY3RzIGlzIHZlcnkgc2xvdyBhbmQgdGhlIGNvbW1pdC13YWxrIGl0c2VsZiBiZWNvbWVzIGEKKwkgKiBuby1vcC4KKwkgKi8KKwl1bnNpZ25lZCBjaGVja19yZWZzX2FyZV9wcm9taXNvcl9vYmplY3RzX29ubHkgOiAxOworfTsKKworI2RlZmluZSBDSEVDS19DT05ORUNURURfSU5JVCB7IDAgfQorCisvKgorICogTWFrZSBzdXJlIHRoYXQgYWxsIGdpdmVuIG9iamVjdHMgYW5kIGFsbCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoZW0KKyAqIGVpdGhlciBleGlzdCBpbiBvdXIgb2JqZWN0IHN0b3JlIG9yIChpZiB0aGUgcmVwb3NpdG9yeSBpcyBhIHBhcnRpYWwKKyAqIGNsb25lKSBhcmUgcHJvbWlzZWQgdG8gYmUgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiAwIGlmIE9rLCBub24gemVybyBvdGhlcndpc2UgKGkuZS4gc29tZSBtaXNzaW5nIG9iamVjdHMpCisgKgorICogSWYgIm9wdCIgaXMgTlVMTCwgYmVoYXZlcyBhcyBpZiBDSEVDS19DT05ORUNURURfSU5JVCB3YXMgcGFzc2VkLgorICovCitpbnQgY2hlY2tfY29ubmVjdGVkKG9pZF9pdGVyYXRlX2ZuIGZuLCB2b2lkICpjYl9kYXRhLAorCQkgICAgc3RydWN0IGNoZWNrX2Nvbm5lY3RlZF9vcHRpb25zICpvcHQpOworCisjZW5kaWYgLyogQ09OTkVDVEVEX0ggKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvUkVBRE1FIGIvY29udHJpYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmMjkxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvUkVBRE1FCkBAIC0wLDAgKzEsNDMgQEAKK0NvbnRyaWJ1dGVkIFNvZnR3YXJlCisKK0FsdGhvdWdoIHRoZXNlIHBpZWNlcyBhcmUgYXZhaWxhYmxlIGFzIHBhcnQgb2YgdGhlIG9mZmljaWFsIGdpdAorc291cmNlIHRyZWUsIHRoZXkgYXJlIGluIHNvbWV3aGF0IGRpZmZlcmVudCBzdGF0dXMuICBUaGUKK2ludGVudGlvbiBpcyB0byBrZWVwIGludGVyZXN0aW5nIHRvb2xzIGFyb3VuZCBnaXQgaGVyZSwgbWF5YmUKK2V2ZW4gZXhwZXJpbWVudGFsIG9uZXMsIHRvIGdpdmUgdXNlcnMgYW4gZWFzaWVyIGFjY2VzcyB0byB0aGVtLAorYW5kIHRvIGdpdmUgdG9vbHMgd2lkZXIgZXhwb3N1cmUsIHNvIHRoYXQgdGhleSBjYW4gYmUgaW1wcm92ZWQKK2Zhc3Rlci4KKworSSBhbSBub3QgZXhwZWN0aW5nIHRvIHRvdWNoIHRoZXNlIG15c2VsZiB0aGF0IG11Y2guICBBcyBmYXIgYXMKK215IGRheS10by1kYXkgb3BlcmF0aW9uIGlzIGNvbmNlcm5lZCwgdGhlc2Ugc3ViZGlyZWN0b3JpZXMgYXJlCitvd25lZCBieSB0aGVpciByZXNwZWN0aXZlIHByaW1hcnkgYXV0aG9ycy4gIEkgYW0gd2lsbGluZyB0byBoZWxwCitpZiB1c2VycyBvZiB0aGVzZSBjb21wb25lbnRzIGFuZCB0aGUgY29udHJpYi8gc3VidHJlZSAib3duZXJzIgoraGF2ZSB0ZWNobmljYWwvZGVzaWduIGlzc3VlcyB0byByZXNvbHZlLCBidXQgdGhlIGluaXRpYXRpdmUgdG8KK2ZpeCBhbmQvb3IgZW5oYW5jZSB0aGluZ3MgX211c3RfIGJlIG9uIHRoZSBzaWRlIG9mIHRoZSBzdWJ0cmVlCitvd25lcnMuICBJT1csIEkgd29uJ3QgYmUgYWN0aXZlbHkgbG9va2luZyBmb3IgYnVncyBhbmQgcm9vbXMgZm9yCitlbmhhbmNlbWVudHMgaW4gdGhlbSBhcyB0aGUgZ2l0IG1haW50YWluZXIgLS0gSSBtYXkgb25seSBkbyBzbworanVzdCBhcyBvbmUgb2YgdGhlIHVzZXJzIHdoZW4gSSB3YW50IHRvIHNjcmF0Y2ggbXkgb3duIGl0Y2guICBJZgoreW91IGhhdmUgcGF0Y2hlcyB0byB0aGluZ3MgaW4gY29udHJpYi8gYXJlYSwgdGhlIHBhdGNoIHNob3VsZCBiZQorZmlyc3Qgc2VudCB0byB0aGUgcHJpbWFyeSBhdXRob3IsIGFuZCB0aGVuIHRoZSBwcmltYXJ5IGF1dGhvcgorc2hvdWxkIGFjayBhbmQgZm9yd2FyZCBpdCB0byBtZSAoZ2l0IHB1bGwgcmVxdWVzdCBpcyBuaWNlcikuCitUaGlzIGlzIHRoZSBzYW1lIHdheSBhcyBob3cgSSBoYXZlIGJlZW4gdHJlYXRpbmcgZ2l0aywgYW5kIHRvIGEKK2xlc3NlciBkZWdyZWUgdmFyaW91cyBmb3JlaWduIFNDTSBpbnRlcmZhY2VzLCBzbyB5b3Uga25vdyB0aGUKK2RyaWxsLgorCitJIGV4cGVjdCB0aGF0IHRoaW5ncyB0aGF0IHN0YXJ0IHRoZWlyIGxpZmUgaW4gdGhlIGNvbnRyaWIvIGFyZWEKK3RvIGdyYWR1YXRlIG91dCBvZiBjb250cmliLyBvbmNlIHRoZXkgbWF0dXJlLCBlaXRoZXIgYnkgYmVjb21pbmcKK3Byb2plY3RzIG9uIHRoZWlyIG93biwgb3IgbW92aW5nIHRvIHRoZSB0b3BsZXZlbCBkaXJlY3RvcnkuICBPbgordGhlIG90aGVyIGhhbmQsIEkgZXhwZWN0IEknbGwgYmUgcHJvcG9zaW5nIHJlbW92YWwgb2YgZGlzdXNlZAorYW5kIGluYWN0aXZlIG9uZXMgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0lmIHlvdSBoYXZlIG5ldyB0aGluZ3MgdG8gYWRkIHRvIHRoaXMgYXJlYSwgcGxlYXNlIGZpcnN0IHByb3Bvc2UKK2l0IG9uIHRoZSBnaXQgbWFpbGluZyBsaXN0LCBhbmQgYWZ0ZXIgYSBsaXN0IGRpc2N1c3Npb24gcHJvdmVzCit0aGVyZSBhcmUgc29tZSBnZW5lcmFsIGludGVyZXN0cyAoaXQgZG9lcyBub3QgaGF2ZSB0byBiZSBhCitsaXN0LXdpZGUgY29uc2Vuc3VzIGZvciBhIHRvb2wgdGFyZ2V0ZWQgdG8gYSByZWxhdGl2ZWx5IG5hcnJvdworYXVkaWVuY2UgLS0gZm9yIGV4YW1wbGUgSSBkbyBub3Qgd29yayB3aXRoIHByb2plY3RzIHdob3NlCit1cHN0cmVhbSBpcyBzdm4sIHNvIEkgaGF2ZSBubyB1c2UgZm9yIGdpdC1zdm4gbXlzZWxmLCBidXQgaXQgaXMKK29mIGdlbmVyYWwgaW50ZXJlc3QgZm9yIHBlb3BsZSB3aG8gbmVlZCB0byBpbnRlcm9wZXJhdGUgd2l0aCBTVk4KK3JlcG9zaXRvcmllcyBpbiBhIHdheSBnaXQtc3ZuIHdvcmtzIGJldHRlciB0aGFuIGdpdC1zdm5pbXBvcnQpLAorc3VibWl0IGEgcGF0Y2ggdG8gY3JlYXRlIGEgc3ViZGlyZWN0b3J5IG9mIGNvbnRyaWIvIGFuZCBwdXQgeW91cgorc3R1ZmYgdGhlcmUuCisKKy1qYwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy5wbSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0Y2JhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMucG0KQEAgLTAsMCArMSw0MiBAQAorcGFja2FnZSBHZW5lcmF0b3JzOworcmVxdWlyZSBFeHBvcnRlcjsKKwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK25vIHN0cmljdCAncmVmcyc7Cit1c2UgdmFycyBxdygkVkVSU0lPTiBAQVZBSUxBQkxFKTsKKworb3VyICRWRVJTSU9OID0gJzEuMDAnOworb3VyKEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0ssIEBBVkFJTEFCTEUpOworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQkVHSU4geworICAgIGxvY2FsKCpEKTsKKyAgICBteSAkbWUgPSAkSU5DeyJHZW5lcmF0b3JzLnBtIn07CisgICAgZGllICJDb3VsZG4ndCBmaW5kIG15c2VsZiBpbiBcQElOQywgd2hpY2ggaXMgcmVxdWlyZWQgdG8gbG9hZCB0aGUgZ2VuZXJhdG9ycyEiIGlmICgiJG1lIiBlcSAiIik7CisgICAgJG1lID0gZGlybmFtZSgkbWUpOworICAgIGlmIChvcGVuZGlyKEQsIiRtZS9HZW5lcmF0b3JzIikpIHsKKyAgICAgICAgZm9yZWFjaCBteSAkZ2VuIChyZWFkZGlyKEQpKSB7CisgICAgICAgICAgICBuZXh0IHVubGVzcyAoJGdlbiAgPX4gL1wucG0kLyk7CisgICAgICAgICAgICByZXF1aXJlICIke21lfS9HZW5lcmF0b3JzLyRnZW4iOworICAgICAgICAgICAgJGdlbiA9fiBzLFwucG0sLDsKKyAgICAgICAgICAgIHB1c2goQEFWQUlMQUJMRSwgJGdlbik7CisgICAgICAgIH0KKyAgICAgICAgY2xvc2VkaXIoRCk7CisgICAgICAgIG15ICRnZW5zID0gam9pbignLCAnLCBAQVZBSUxBQkxFKTsKKyAgICB9CisKKyAgICBwdXNoIEBFWFBPUlRfT0ssIHF3KGF2YWlsYWJsZSk7Cit9CisKK3N1YiBhdmFpbGFibGUgeworICAgIHJldHVybiBAQVZBSUxBQkxFOworfQorCitzdWIgZ2VuZXJhdGUgeworICAgIG15ICgkZ2VuLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHJldHVybiBldmFsKCJHZW5lcmF0b3JzOjoke2dlbn06OmdlbmVyYXRlKFwkZ2l0X2RpciwgXCRvdXRfZGlyLCBcJHJlbF9kaXIsIFwlYnVpbGRfc3RydWN0dXJlKSIpIGlmIGdyZXAoL14kZ2VuJC8sIEBBVkFJTEFCTEUpOworICAgIGRpZSAiR2VuZXJhdG9yIFwiJHtnZW59XCIgaXMgbm90IGF2YWlsYWJsZSFcbkF2YWlsYWJsZSBnZW5lcmF0b3JzIGFyZTogQEFWQUlMQUJMRVxuIjsKK30KKworMTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvUU1ha2UucG0gYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1FNYWtlLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmM2I2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1FNYWtlLnBtCkBAIC0wLDAgKzEsMTg5IEBACitwYWNrYWdlIEdlbmVyYXRvcnM6OlFNYWtlOworcmVxdWlyZSBFeHBvcnRlcjsKKwordXNlIHN0cmljdDsKK3VzZSB2YXJzIHF3KCRWRVJTSU9OKTsKKworb3VyICRWRVJTSU9OID0gJzEuMDAnOworb3VyKEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0ssIEBBVkFJTEFCTEUpOworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQkVHSU4geworICAgIHB1c2ggQEVYUE9SVF9PSywgcXcoZ2VuZXJhdGUpOworfQorCitzdWIgZ2VuZXJhdGUgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworCisgICAgbXkgQGxpYnMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlMifX07CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgY3JlYXRlTGliUHJvamVjdCgkXywgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgfQorCisgICAgbXkgQGFwcHMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX07CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgY3JlYXRlQXBwUHJvamVjdCgkXywgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgfQorCisgICAgY3JlYXRlR2x1ZVByb2plY3QoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBjcmVhdGVMaWJQcm9qZWN0IHsKKyAgICBteSAoJGxpYm5hbWUsICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlICRsaWJuYW1lIGxpYiBwcm9qZWN0XG4iOworICAgICRyZWxfZGlyID0gIi4uLyRyZWxfZGlyIjsKKworICAgIG15ICRzb3VyY2VzID0gam9pbigiIFxcXG5cdCIsIHNvcnQobWFwKCIkcmVsX2Rpci8kXyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X1NPVVJDRVMifX0pKSk7CisgICAgbXkgJGRlZmluZXMgPSBqb2luKCIgXFxcblx0Iiwgc29ydChAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9ERUZJTkVTIn19KSk7CisgICAgbXkgJGluY2x1ZGVzPSBqb2luKCIgXFxcblx0Iiwgc29ydChtYXAoIiRyZWxfZGlyLyRfIiwgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fSU5DTFVERVMifX0pKSk7CisgICAgbXkgJGNmbGFncyAgPSBqb2luKCIgIiwgc29ydChAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9DRkxBR1MifX0pKTsKKworICAgIG15ICRjZmxhZ3NfZGVidWcgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTVQvLU1UZC87CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1PLi8vOworCisgICAgbXkgJGNmbGFnc19yZWxlYXNlID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX3JlbGVhc2UgPX4gcy8tTVRkLy1NVC87CisKKyAgICBteSBAdG1wICA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0xGTEFHUyJ9fTsKKyAgICBteSBAdG1wMiA9ICgpOworICAgIGZvcmVhY2ggKEB0bXApIHsKKyAgICAgICAgaWYgKC9eLUxUQ0cvKSB7CisgICAgICAgIH0gZWxzaWYgKC9eLUwvKSB7CisgICAgICAgICAgICAkXyA9fiBzL14tTC8tTElCUEFUSDokcmVsX2RpclwvLzsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEB0bXAyLCAkXyk7CisgICAgfQorICAgIG15ICRsZmxhZ3MgPSBqb2luKCIgIiwgc29ydChAdG1wKSk7CisKKyAgICBteSAkdGFyZ2V0ID0gJGxpYm5hbWU7CisgICAgJHRhcmdldCA9fiBzL1wvL18vZzsKKyAgICAkZGVmaW5lcyA9fiBzLy1ELy9nOworICAgICRkZWZpbmVzID1+IHMvIi9cXFxcIi9nOworICAgICRpbmNsdWRlcyA9fiBzLy1JLy9nOworICAgIG1rZGlyICIkdGFyZ2V0IiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSAkdGFyZ2V0IGZvciBsaWIgcHJvamVjdCFcbiI7CisgICAgb3BlbiBGLCAiPiR0YXJnZXQvJHRhcmdldC5wcm8iIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gJHRhcmdldC8kdGFyZ2V0LnBybyBmb3Igd3JpdGluZyFcbiI7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKK1RFTVBMQVRFID0gbGliCitUQVJHRVQgPSAkdGFyZ2V0CitERVNURElSID0gJHJlbF9kaXIKKworQ09ORklHIC09IHF0CitDT05GSUcgKz0gc3RhdGljCisKK1FNQUtFX0NGTEFHUyA9CitRTUFLRV9DRkxBR1NfUkVMRUFTRSA9ICRjZmxhZ3NfcmVsZWFzZQorUU1BS0VfQ0ZMQUdTX0RFQlVHID0gJGNmbGFnc19kZWJ1ZworUU1BS0VfTElCRkxBR1MgPSAkbGZsYWdzCisKK0RFRklORVMgKz0gXFwKKyAgICAgICAgJGRlZmluZXMKKworSU5DTFVERVBBVEggKz0gXFwKKyAgICAgICAgJGluY2x1ZGVzCisKK1NPVVJDRVMgKz0gXFwKKyAgICAgICAgJHNvdXJjZXMKK0VPTQorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBjcmVhdGVBcHBQcm9qZWN0IHsKKyAgICBteSAoJGFwcG5hbWUsICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlICRhcHBuYW1lIGFwcCBwcm9qZWN0XG4iOworICAgICRyZWxfZGlyID0gIi4uLyRyZWxfZGlyIjsKKworICAgIG15ICRzb3VyY2VzID0gam9pbigiIFxcXG5cdCIsIHNvcnQobWFwKCIkcmVsX2Rpci8kXyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X1NPVVJDRVMifX0pKSk7CisgICAgbXkgJGRlZmluZXMgPSBqb2luKCIgXFxcblx0Iiwgc29ydChAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9ERUZJTkVTIn19KSk7CisgICAgbXkgJGluY2x1ZGVzPSBqb2luKCIgXFxcblx0Iiwgc29ydChtYXAoIiRyZWxfZGlyLyRfIiwgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fSU5DTFVERVMifX0pKSk7CisgICAgbXkgJGNmbGFncyAgPSBqb2luKCIgIiwgc29ydChAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9DRkxBR1MifX0pKTsKKworICAgIG15ICRjZmxhZ3NfZGVidWcgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTVQvLU1UZC87CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1PLi8vOworCisgICAgbXkgJGNmbGFnc19yZWxlYXNlID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX3JlbGVhc2UgPX4gcy8tTVRkLy1NVC87CisKKyAgICBteSAkbGliczsKKyAgICBmb3JlYWNoIChzb3J0KEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0xJQlMifX0pKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkbGlicyAuPSAiICRfIjsKKyAgICB9CisgICAgbXkgQHRtcCAgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9MRkxBR1MifX07CisgICAgbXkgQHRtcDIgPSAoKTsKKyAgICBmb3JlYWNoIChAdG1wKSB7CisgICAgICAgICMgbmV4dCBpZiAoJF8gZXEgIi1OT0RFRkFVTFRMSUI6TVNWQ1JULmxpYiIpOworICAgICAgICBpZiAoL14tTFRDRy8pIHsKKyAgICAgICAgfSBlbHNpZiAoL14tTC8pIHsKKyAgICAgICAgICAgICRfID1+IHMvXi1MLy1MSUJQQVRIOiRyZWxfZGlyXC8vOworICAgICAgICB9CisgICAgICAgIHB1c2goQHRtcDIsICRfKTsKKyAgICB9CisgICAgbXkgJGxmbGFncyA9IGpvaW4oIiAiLCBzb3J0KEB0bXApKTsKKworICAgIG15ICR0YXJnZXQgPSAkYXBwbmFtZTsKKyAgICAkdGFyZ2V0ID1+IHMvXC5leGUvLzsKKyAgICAkdGFyZ2V0ID1+IHMvXC8vXy9nOworICAgICRkZWZpbmVzID1+IHMvLUQvL2c7CisgICAgJGRlZmluZXMgPX4gcy8iL1xcXFwiL2c7CisgICAgJGluY2x1ZGVzID1+IHMvLUkvL2c7CisgICAgbWtkaXIgIiR0YXJnZXQiIHx8IGRpZSAiQ291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5ICR0YXJnZXQgZm9yIGFwcCBwcm9qZWN0IVxuIjsKKyAgICBvcGVuIEYsICI+JHRhcmdldC8kdGFyZ2V0LnBybyIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkdGFyZ2V0LyR0YXJnZXQucHJvIGZvciB3cml0aW5nIVxuIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworVEVNUExBVEUgPSBhcHAKK1RBUkdFVCA9ICR0YXJnZXQKK0RFU1RESVIgPSAkcmVsX2RpcgorCitDT05GSUcgLT0gcXQgZW1iZWRfbWFuaWZlc3RfZXhlCitDT05GSUcgKz0gY29uc29sZQorCitRTUFLRV9DRkxBR1MgPQorUU1BS0VfQ0ZMQUdTX1JFTEVBU0UgPSAkY2ZsYWdzX3JlbGVhc2UKK1FNQUtFX0NGTEFHU19ERUJVRyA9ICRjZmxhZ3NfZGVidWcKK1FNQUtFX0xGTEFHUyA9ICRsZmxhZ3MKK0xJQlMgICA9ICRsaWJzCisKK0RFRklORVMgKz0gXFwKKyAgICAgICAgJGRlZmluZXMKKworSU5DTFVERVBBVEggKz0gXFwKKyAgICAgICAgJGluY2x1ZGVzCisKK3dpbjMyOlFNQUtFX0xGTEFHUyArPSAtTElCUEFUSDokcmVsX2RpcgorZWxzZTogUU1BS0VfTEZMQUdTICs9IC1MJHJlbF9kaXIKKworU09VUkNFUyArPSBcXAorICAgICAgICAkc291cmNlcworRU9NCisgICAgY2xvc2UgRjsKK30KKworc3ViIGNyZWF0ZUdsdWVQcm9qZWN0IHsKKyAgICBteSAoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBteSAkbGlicyA9IGpvaW4oIiBcXCBcbiIsIG1hcCgiXHQkX3wkXy5wcm8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlMifX0pKTsKKyAgICBteSAkYXBwcyA9IGpvaW4oIiBcXCBcbiIsIG1hcCgiXHQkX3wkXy5wcm8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX0pKTsKKyAgICAkbGlicyA9fiBzL1wuYS8vZzsKKyAgICAkbGlicyA9fiBzL1wvL18vZzsKKyAgICAkbGlicyA9fiBzL1x8L1wvL2c7CisgICAgJGFwcHMgPX4gcy9cLmV4ZS8vZzsKKyAgICAkYXBwcyA9fiBzL1wvL18vZzsKKyAgICAkYXBwcyA9fiBzL1x8L1wvL2c7CisKKyAgICBteSAkZmlsZW5hbWUgPSAkb3V0X2RpcjsKKyAgICAkZmlsZW5hbWUgPX4gcy8uKlwvKFteXC9dKykkLyQxLzsKKyAgICAkZmlsZW5hbWUgPX4gcy9cLyQvLzsKKyAgICBwcmludCAiR2VuZXJhdGUgZ2x1ZSBwcm9qZWN0ICRmaWxlbmFtZS5wcm9cbiI7CisgICAgb3BlbiBGLCAiPiRmaWxlbmFtZS5wcm8iIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gJGZpbGVuYW1lLnBybyBmb3Igd3JpdGluZyFcbiI7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKK1RFTVBMQVRFID0gc3ViZGlycworQ09ORklHICs9IG9yZGVyZWQKK1NVQkRJUlMgKz0gXFwKKyRsaWJzIFxcCiskYXBwcworRU9NCisgICAgY2xvc2UgRjsKK30KKworMTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmNwcm9qLnBtIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9WY3Byb2oucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3NjQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmNwcm9qLnBtCkBAIC0wLDAgKzEsNTc5IEBACitwYWNrYWdlIEdlbmVyYXRvcnM6OlZjcHJvajsKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK3VzZSBzdHJpY3Q7Cit1c2UgdmFycyBxdygkVkVSU0lPTik7Cit1c2UgRGlnZXN0OjpTSEEgcXcoc2hhMjU2X2hleCk7CisKK291ciAkVkVSU0lPTiA9ICcxLjAwJzsKK291cihASVNBLCBARVhQT1JULCBARVhQT1JUX09LLCBAQVZBSUxBQkxFKTsKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK0JFR0lOIHsKKyAgICBwdXNoIEBFWFBPUlRfT0ssIHF3KGdlbmVyYXRlKTsKK30KKworc3ViIGdlbmVyYXRlX2d1aWQgKCQpIHsKKyAgICBteSAkaGV4ID0gc2hhMjU2X2hleCgkX1swXSk7CisgICAgJGhleCA9fiBzL14oLns4fSkoLns0fSkoLns0fSkoLns0fSkoLnsxMn0pLioveyQxLSQyLSQzLSQ0LSQ1fS87CisgICAgJGhleCA9fiB0ci9hLXovQS1aLzsKKyAgICByZXR1cm4gJGhleDsKK30KKworc3ViIGdlbmVyYXRlIHsKKyAgICBteSAoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBteSBAbGlicyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fTsKKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBjcmVhdGVMaWJQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCBcJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgfQorCisgICAgbXkgQGFwcHMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX07CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgY3JlYXRlQXBwUHJvamVjdCgkXywgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgXCVidWlsZF9zdHJ1Y3R1cmUpOworICAgIH0KKworICAgIGNyZWF0ZUdsdWVQcm9qZWN0KCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworICAgIHJldHVybiAwOworfQorCitzdWIgY3JlYXRlTGliUHJvamVjdCB7CisgICAgbXkgKCRsaWJuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAkYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSAkbGlibmFtZSB2Y3Byb2ogbGliIHByb2plY3RcbiI7CisgICAgJHJlbF9kaXIgPSAiLi5cXCRyZWxfZGlyIjsKKyAgICAkcmVsX2RpciA9fiBzL1wvL1xcL2c7CisKKyAgICBteSAkdGFyZ2V0ID0gJGxpYm5hbWU7CisgICAgJHRhcmdldCA9fiBzL1wvL18vZzsKKyAgICAkdGFyZ2V0ID1+IHMvXC5hLy87CisKKyAgICBteSAkdXVpZCA9IGdlbmVyYXRlX2d1aWQoJGxpYm5hbWUpOworICAgICQkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7dGFyZ2V0fV9HVUlEIn0gPSAkdXVpZDsKKworICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9TT1VSQ0VTIn19KSk7CisgICAgbXkgQHNvdXJjZXM7CisgICAgZm9yZWFjaCAoQHNyY3MpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9cXC9nOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkXyk7CisgICAgfQorICAgIG15ICRkZWZpbmVzID0gam9pbigiLCIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0RFRklORVMifX0pKTsKKyAgICBteSAkaW5jbHVkZXM9IGpvaW4oIjsiLCBzb3J0KG1hcCgiJnF1b3Q7JHJlbF9kaXJcXCRfJnF1b3Q7IiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0NGTEFHUyJ9fSkpOworICAgICRjZmxhZ3MgPX4gcy9cIi8mcXVvdDsvZzsKKyAgICAkY2ZsYWdzID1+IHMvPC8mbHQ7L2c7CisgICAgJGNmbGFncyA9fiBzLz4vJmd0Oy9nOworCisgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU8uLy87CisKKyAgICBteSAkY2ZsYWdzX3JlbGVhc2UgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfcmVsZWFzZSA9fiBzLy1NVGQvLU1ULzsKKworICAgIG15IEB0bXAgID0gQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0xGTEFHUyJ9fTsKKyAgICBteSBAdG1wMiA9ICgpOworICAgIGZvcmVhY2ggKEB0bXApIHsKKyAgICAgICAgaWYgKC9eLUxUQ0cvKSB7CisgICAgICAgIH0gZWxzaWYgKC9eLUwvKSB7CisgICAgICAgICAgICAkXyA9fiBzL14tTC8tTElCUEFUSDokcmVsX2RpclwvLzsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEB0bXAyLCAkXyk7CisgICAgfQorICAgIG15ICRsZmxhZ3MgPSBqb2luKCIgIiwgc29ydChAdG1wKSk7CisKKyAgICAkZGVmaW5lcyA9fiBzLy1ELy9nOworICAgICRkZWZpbmVzID1+IHMvXCIvXFwmcXVvdDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzLzwvJmx0Oy9nOworICAgICRkZWZpbmVzID1+IHMvPi8mZ3Q7L2c7CisgICAgJGRlZmluZXMgPX4gcy9cJy8vZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgbGliIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQudmNwcm9qIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIGJpbm1vZGUgRiwgIjpjcmxmIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZyA9ICJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOSwwMCIKKwlOYW1lPSIkdGFyZ2V0IgorCVByb2plY3RHVUlEPSIkdXVpZCI+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfZGVidWciCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsX0RFQlVHLCRkZWZpbmVzIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkcmVsX2RpciIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSI0IgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJcJChQcm9qZWN0RGlyKVwkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIkY2ZsYWdzX3JlbGVhc2UiCisJCQkJT3B0aW1pemF0aW9uPSIyIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkaW5jbHVkZXMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyLE5ERUJVRywkZGVmaW5lcyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iXCQoSW50RGlyKVxcXCQoVGFyZ2V0TmFtZSkucGRiIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorRU9NCisgICAgZm9yZWFjaChAc291cmNlcykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiRfIi8+CitFT00KKyAgICB9CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlQXBwUHJvamVjdCB7CisgICAgbXkgKCRhcHBuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAkYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSAkYXBwbmFtZSB2Y3Byb2ogYXBwIHByb2plY3RcbiI7CisgICAgJHJlbF9kaXIgPSAiLi5cXCRyZWxfZGlyIjsKKyAgICAkcmVsX2RpciA9fiBzL1wvL1xcL2c7CisKKyAgICBteSAkdGFyZ2V0ID0gJGFwcG5hbWU7CisgICAgJHRhcmdldCA9fiBzL1wvL18vZzsKKyAgICAkdGFyZ2V0ID1+IHMvXC5leGUvLzsKKworICAgIG15ICR1dWlkID0gZ2VuZXJhdGVfZ3VpZCgkYXBwbmFtZSk7CisgICAgJCRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHt0YXJnZXR9X0dVSUQifSA9ICR1dWlkOworCisgICAgbXkgQHNyY3MgPSBzb3J0KG1hcCgiJHJlbF9kaXJcXCRfIiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X1NPVVJDRVMifX0pKTsKKyAgICBteSBAc291cmNlczsKKyAgICBmb3JlYWNoIChAc3JjcykgeworICAgICAgICAkXyA9fiBzL1wvL1xcL2c7CisgICAgICAgIHB1c2goQHNvdXJjZXMsICRfKTsKKyAgICB9CisgICAgbXkgJGRlZmluZXMgPSBqb2luKCIsIiwgc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fREVGSU5FUyJ9fSkpOworICAgIG15ICRpbmNsdWRlcz0gam9pbigiOyIsIHNvcnQobWFwKCImcXVvdDskcmVsX2RpclxcJF8mcXVvdDsiLCBAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fSU5DTFVERVMifX0pKSk7CisgICAgbXkgJGNmbGFncyAgPSBqb2luKCIgIiwgc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fQ0ZMQUdTIn19KSk7CisgICAgJGNmbGFncyA9fiBzL1wiLyZxdW90Oy9nOworICAgICRjZmxhZ3MgPX4gcy88LyZsdDsvZzsKKyAgICAkY2ZsYWdzID1+IHMvPi8mZ3Q7L2c7CisKKyAgICBteSAkY2ZsYWdzX2RlYnVnID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU1ULy1NVGQvOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTy4vLzsKKworICAgIG15ICRjZmxhZ3NfcmVsZWFzZSA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19yZWxlYXNlID1+IHMvLU1UZC8tTVQvOworCisgICAgbXkgJGxpYnM7CisgICAgZm9yZWFjaCAoc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fTElCUyJ9fSkpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9fL2c7CisgICAgICAgICRsaWJzIC49ICIgJF8iOworICAgIH0KKyAgICBteSBAdG1wICA9IEB7JCRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9MRkxBR1MifX07CisgICAgbXkgQHRtcDIgPSAoKTsKKyAgICBmb3JlYWNoIChAdG1wKSB7CisgICAgICAgIGlmICgvXi1MVENHLykgeworICAgICAgICB9IGVsc2lmICgvXi1MLykgeworICAgICAgICAgICAgJF8gPX4gcy9eLUwvLUxJQlBBVEg6JHJlbF9kaXJcLy87CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAdG1wMiwgJF8pOworICAgIH0KKyAgICBteSAkbGZsYWdzID0gam9pbigiICIsIHNvcnQoQHRtcCkpIC4gIiAtTElCUEFUSDokcmVsX2RpciI7CisKKyAgICAkZGVmaW5lcyA9fiBzLy1ELy9nOworICAgICRkZWZpbmVzID1+IHMvXCIvXFwmcXVvdDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzLzwvJmx0Oy9nOworICAgICRkZWZpbmVzID1+IHMvPi8mZ3Q7L2c7CisgICAgJGRlZmluZXMgPX4gcy9cJy8vZzsKKyAgICAkZGVmaW5lcyA9fiBzL1xcXFwvXFwvZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgbGliIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQudmNwcm9qIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIGJpbm1vZGUgRiwgIjpjcmxmIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZyA9ICJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOSwwMCIKKwlOYW1lPSIkdGFyZ2V0IgorCVByb2plY3RHVUlEPSIkdXVpZCI+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfZGVidWciCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsX0RFQlVHLCRkZWZpbmVzIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJGxpYnMiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRsZmxhZ3MiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJHJlbF9kaXIiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMCIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iXCQoUHJvamVjdERpcilcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iJGNmbGFnc19yZWxlYXNlIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJGluY2x1ZGVzIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMixOREVCVUcsJGRlZmluZXMiCisJCQkJUnVudGltZUxpYnJhcnk9IjAiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IlwkKEludERpcilcXFwkKFRhcmdldE5hbWUpLnBkYiIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkbGlicyIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iJGxmbGFncyIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiIKKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSI+CitFT00KKyAgICBmb3JlYWNoKEBzb3VyY2VzKSB7CisgICAgICAgIHByaW50IEYgPDwgIkVPTSI7CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJF8iLz4KK0VPTQorICAgIH0KKyAgICBwcmludCBGIDw8ICJFT00iOworCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KK0VPTQorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBjcmVhdGVHbHVlUHJvamVjdCB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlIHNvbHV0aW9ucyBmaWxlXG4iOworICAgICRyZWxfZGlyID0gIi4uXFwkcmVsX2RpciI7CisgICAgJHJlbF9kaXIgPX4gcy9cLy9cXC9nOworICAgIG15ICRTTE5fSEVBRCA9ICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMC4wMFxuIyBWaXN1YWwgU3R1ZGlvIDIwMDhcbiI7CisgICAgbXkgJFNMTl9QUkUgID0gIlByb2plY3QoXCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfVwiKSA9ICI7CisgICAgbXkgJFNMTl9QT1NUID0gIlxuRW5kUHJvamVjdFxuIjsKKworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIG15IEB0bXA7CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9fL2c7CisgICAgICAgICRfID1+IHMvXC5hLy87CisgICAgICAgIHB1c2goQHRtcCwgJF8pOworICAgIH0KKyAgICBAbGlicyA9IEB0bXA7CisKKyAgICBteSBAYXBwcyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fTsKKyAgICBAdG1wID0gKCk7CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9fL2c7CisgICAgICAgICRfID1+IHMvXC5leGUvLzsKKyAgICAgICAgaWYgKCRfIGVxICJnaXQiICkgeworICAgICAgICAgICAgdW5zaGlmdChAdG1wLCAkXyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEB0bXAsICRfKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBAYXBwcyA9IEB0bXA7CisKKyAgICBvcGVuIEYsICI+Z2l0LnNsbiIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiBnaXQuc2xuIGZvciB3cml0aW5nIVxuIjsKKyAgICBiaW5tb2RlIEYsICI6Y3JsZiI7CisgICAgcHJpbnQgRiAiJFNMTl9IRUFEIjsKKworICAgIG15ICR1dWlkX2xpYmdpdCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfbGliZ2l0X0dVSUQifTsKKyAgICBteSAkdXVpZF94ZGlmZl9saWIgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTX3hkaWZmX2xpYl9HVUlEIn07CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgbXkgJGFwcG5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICIkU0xOX1BSRSI7CisgICAgICAgIHByaW50IEYgIlwiJHthcHBuYW1lfVwiLCBcIiR7YXBwbmFtZX1cXCR7YXBwbmFtZX0udmNwcm9qXCIsIFwiJHt1dWlkfVwiXG4iOworICAgICAgICBwcmludCBGICIJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdFxuIjsKKyAgICAgICAgcHJpbnQgRiAiCQkke3V1aWRfbGliZ2l0fSA9ICR7dXVpZF9saWJnaXR9XG4iOworICAgICAgICBwcmludCBGICIJCSR7dXVpZF94ZGlmZl9saWJ9ID0gJHt1dWlkX3hkaWZmX2xpYn1cbiI7CisgICAgICAgIHByaW50IEYgIglFbmRQcm9qZWN0U2VjdGlvbiI7CisgICAgICAgIHByaW50IEYgIiRTTE5fUE9TVCI7CisgICAgfQorICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIG15ICRsaWJuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QUkUiOworICAgICAgICBwcmludCBGICJcIiR7bGlibmFtZX1cIiwgXCIke2xpYm5hbWV9XFwke2xpYm5hbWV9LnZjcHJvalwiLCBcIiR7dXVpZH1cIiI7CisgICAgICAgIHByaW50IEYgIiRTTE5fUE9TVCI7CisgICAgfQorCisgICAgcHJpbnQgRiA8PCAiRU9NIjsKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzIKKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzIKKwlFbmRHbG9iYWxTZWN0aW9uCitFT00KKyAgICBwcmludCBGIDw8ICJFT00iOworCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCitFT00KKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICBteSAkYXBwbmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMlxuIjsKKyAgICB9CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgbXkgJGxpYm5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgfQorCisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwlFbmRHbG9iYWxTZWN0aW9uCitFbmRHbG9iYWwKK0VPTQorICAgIGNsb3NlIEY7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjeHByb2oucG0gYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjeHByb2oucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2NjZmOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmN4cHJvai5wbQpAQCAtMCwwICsxLDM5MiBAQAorcGFja2FnZSBHZW5lcmF0b3JzOjpWY3hwcm9qOworcmVxdWlyZSBFeHBvcnRlcjsKKwordXNlIHN0cmljdDsKK3VzZSB2YXJzIHF3KCRWRVJTSU9OKTsKK3VzZSBEaWdlc3Q6OlNIQSBxdyhzaGEyNTZfaGV4KTsKKworb3VyICRWRVJTSU9OID0gJzEuMDAnOworb3VyKEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0ssIEBBVkFJTEFCTEUpOworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQkVHSU4geworICAgIHB1c2ggQEVYUE9SVF9PSywgcXcoZ2VuZXJhdGUpOworfQorCitzdWIgZ2VuZXJhdGVfZ3VpZCAoJCkgeworCW15ICRoZXggPSBzaGEyNTZfaGV4KCRfWzBdKTsKKwkkaGV4ID1+IHMvXiguezh9KSguezR9KSguezR9KSguezR9KSguezEyfSkuKi97JDEtJDItJDMtJDQtJDV9LzsKKwkkaGV4ID1+IHRyL2Etei9BLVovOworCXJldHVybiAkaGV4OworfQorCitzdWIgZ2VuZXJhdGUgeworICAgIG15ICgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIGNyZWF0ZVByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsIFwlYnVpbGRfc3RydWN0dXJlLCAxKTsKKyAgICB9CisKKyAgICBteSBAYXBwcyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fTsKKyAgICBmb3JlYWNoIChAYXBwcykgeworICAgICAgICBjcmVhdGVQcm9qZWN0KCRfLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCBcJWJ1aWxkX3N0cnVjdHVyZSwgMCk7CisgICAgfQorCisgICAgY3JlYXRlR2x1ZVByb2plY3QoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N1YiBjcmVhdGVQcm9qZWN0IHsKKyAgICBteSAoJG5hbWUsICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICRidWlsZF9zdHJ1Y3R1cmUsICRzdGF0aWNfbGlicmFyeSkgPSBAXzsKKyAgICBteSAkbGFiZWwgPSAkc3RhdGljX2xpYnJhcnkgPyAibGliIiA6ICJhcHAiOworICAgIG15ICRwcmVmaXggPSAkc3RhdGljX2xpYnJhcnkgPyAiTElCU18iIDogIkFQUFNfIjsKKyAgICBteSAkY29uZmlnX3R5cGUgPSAkc3RhdGljX2xpYnJhcnkgPyAiU3RhdGljTGlicmFyeSIgOiAiQXBwbGljYXRpb24iOworICAgIHByaW50ICJHZW5lcmF0ZSAkbmFtZSB2Y3hwcm9qICRsYWJlbCBwcm9qZWN0XG4iOworICAgIG15ICRjZHVwID0gJG5hbWU7CisgICAgJGNkdXAgPX4gcy9bXlwvXSsvLi4vZzsKKyAgICAkY2R1cCA9fiBzL1wvL1xcL2c7CisgICAgJHJlbF9kaXIgPSAkcmVsX2RpciBlcSAiLiIgPyAkY2R1cCA6ICIkY2R1cFxcJHJlbF9kaXIiOworICAgICRyZWxfZGlyID1+IHMvXC8vXFwvZzsKKworICAgIG15ICR0YXJnZXQgPSAkbmFtZTsKKyAgICBpZiAoJHN0YXRpY19saWJyYXJ5KSB7CisgICAgICAkdGFyZ2V0ID1+IHMvXC5hLy87CisgICAgfSBlbHNlIHsKKyAgICAgICR0YXJnZXQgPX4gcy9cLmV4ZS8vOworICAgIH0KKworICAgIG15ICR1dWlkID0gZ2VuZXJhdGVfZ3VpZCgkbmFtZSk7CisgICAgJCRidWlsZF9zdHJ1Y3R1cmV7IiRwcmVmaXgke3RhcmdldH1fR1VJRCJ9ID0gJHV1aWQ7CisgICAgbXkgJHZjeHByb2ogPSAkdGFyZ2V0OworICAgICR2Y3hwcm9qID1+IHMvKC4qXC8pPyguKikvJCZcLyQyLnZjeHByb2ovOworICAgICR2Y3hwcm9qID1+IHMvKFteXC9dKikoXC9saWIpXC8obGliLnZjeHByb2opLyQxJDJcLyQxXyQzLzsKKyAgICAkJGJ1aWxkX3N0cnVjdHVyZXsiJHByZWZpeCR7dGFyZ2V0fV9WQ1hQUk9KIn0gPSAkdmN4cHJvajsKKworICAgIG15IEBzcmNzID0gc29ydChtYXAoIiRyZWxfZGlyXFwkXyIsIEB7JCRidWlsZF9zdHJ1Y3R1cmV7IiRwcmVmaXgke25hbWV9X1NPVVJDRVMifX0pKTsKKyAgICBteSBAc291cmNlczsKKyAgICBmb3JlYWNoIChAc3JjcykgeworICAgICAgICAkXyA9fiBzL1wvL1xcL2c7CisgICAgICAgIHB1c2goQHNvdXJjZXMsICRfKTsKKyAgICB9CisgICAgbXkgJGRlZmluZXMgPSBqb2luKCI7Iiwgc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyIkcHJlZml4JHtuYW1lfV9ERUZJTkVTIn19KSk7CisgICAgbXkgJGluY2x1ZGVzPSBqb2luKCI7Iiwgc29ydChtYXAgeyBzL14tSS8vOyBzL1wvL1xcL2c7IEZpbGU6OlNwZWMtPmZpbGVfbmFtZV9pc19hYnNvbHV0ZSgkXykgPyAkXyA6ICIkcmVsX2RpclxcJF8iIH0gQHskJGJ1aWxkX3N0cnVjdHVyZXsiJHByZWZpeCR7bmFtZX1fSU5DTFVERVMifX0pKTsKKyAgICBteSAkY2ZsYWdzID0gam9pbigiICIsIHNvcnQobWFwIHsgcy9eLVtHTE1PV1pdLiovLzsgcy8uKiAuKi8iJCYiLzsgJF87IH0gQHskJGJ1aWxkX3N0cnVjdHVyZXsiJHByZWZpeCR7bmFtZX1fQ0ZMQUdTIn19KSk7CisgICAgJGNmbGFncyA9fiBzLzwvJmx0Oy9nOworICAgICRjZmxhZ3MgPX4gcy8+LyZndDsvZzsKKworICAgIG15ICRsaWJzX3JlbGVhc2UgPSAiXG4gICAgIjsKKyAgICBteSAkbGlic19kZWJ1ZyA9ICJcbiAgICAiOworICAgIGlmICghJHN0YXRpY19saWJyYXJ5KSB7CisgICAgICAkbGlic19yZWxlYXNlID0gam9pbigiOyIsIHNvcnQoZ3JlcCAvXig/IWxpYmdpdFwubGlifHhkaWZmXC9saWJcLmxpYnx2Y3Mtc3ZuXC9saWJcLmxpYikvLCBAeyQkYnVpbGRfc3RydWN0dXJleyIkcHJlZml4JHtuYW1lfV9MSUJTIn19KSk7CisgICAgICAkbGlic19kZWJ1ZyA9ICRsaWJzX3JlbGVhc2U7CisgICAgICAkbGlic19kZWJ1ZyA9fiBzL3psaWJcLmxpYi96bGliZFwubGliL2c7CisgICAgICAkbGlic19kZWJ1ZyA9fiBzL2xpYmN1cmxcLmxpYi9saWJjdXJsLWRcLmxpYi9nOworICAgIH0KKworICAgICRkZWZpbmVzID1+IHMvLUQvL2c7CisgICAgJGRlZmluZXMgPX4gcy88LyZsdDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzLz4vJmd0Oy9nOworICAgICRkZWZpbmVzID1+IHMvXCcvL2c7CisKKyAgICBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSAkdGFyZ2V0IGZvciAkbGFiZWwgcHJvamVjdCFcbiIgdW5sZXNzICgtZCAiJHRhcmdldCIgfHwgbWtkaXIgIiR0YXJnZXQiKTsKKworICAgIG9wZW4gRiwgIj4kdmN4cHJvaiIgb3IgZGllICJDb3VsZCBub3Qgb3BlbiAkdmN4cHJvaiBmb3Igd3JpdGluZyFcbiI7CisgICAgYmlubW9kZSBGLCAiOmNybGYgOnV0ZjgiOworICAgIHByaW50IEYgY2hyKDB4RkVGRik7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD4kdXVpZDwvUHJvamVjdEd1aWQ+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxWQ1BLR0FyY2ggQ29uZGl0aW9uPSInXCQoUGxhdGZvcm0pJz09J1dpbjMyJyI+eDg2LXdpbmRvd3M8L1ZDUEtHQXJjaD4KKyAgICA8VkNQS0dBcmNoIENvbmRpdGlvbj0iJ1wkKFBsYXRmb3JtKSchPSdXaW4zMiciPng2NC13aW5kb3dzPC9WQ1BLR0FyY2g+CisgICAgPFZDUEtHQXJjaERpcmVjdG9yeT4kY2R1cFxcY29tcGF0XFx2Y2J1aWxkXFx2Y3BrZ1xcaW5zdGFsbGVkXFxcJChWQ1BLR0FyY2gpPC9WQ1BLR0FyY2hEaXJlY3Rvcnk+CisgICAgPFZDUEtHQmluRGlyZWN0b3J5IENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyI+XCQoVkNQS0dBcmNoRGlyZWN0b3J5KVxcZGVidWdcXGJpbjwvVkNQS0dCaW5EaXJlY3Rvcnk+CisgICAgPFZDUEtHTGliRGlyZWN0b3J5IENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyI+XCQoVkNQS0dBcmNoRGlyZWN0b3J5KVxcZGVidWdcXGxpYjwvVkNQS0dMaWJEaXJlY3Rvcnk+CisgICAgPFZDUEtHQmluRGlyZWN0b3J5IENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJyE9J0RlYnVnJyI+XCQoVkNQS0dBcmNoRGlyZWN0b3J5KVxcYmluPC9WQ1BLR0JpbkRpcmVjdG9yeT4KKyAgICA8VkNQS0dMaWJEaXJlY3RvcnkgQ29uZGl0aW9uPSInXCQoQ29uZmlndXJhdGlvbiknIT0nRGVidWcnIj5cJChWQ1BLR0FyY2hEaXJlY3RvcnkpXFxsaWI8L1ZDUEtHTGliRGlyZWN0b3J5PgorICAgIDxWQ1BLR0luY2x1ZGVEaXJlY3Rvcnk+XCQoVkNQS0dBcmNoRGlyZWN0b3J5KVxcaW5jbHVkZTwvVkNQS0dJbmNsdWRlRGlyZWN0b3J5PgorICAgIDxWQ1BLR0xpYnMgQ29uZGl0aW9uPSInXCQoQ29uZmlndXJhdGlvbiknPT0nRGVidWcnIj4kbGlic19kZWJ1ZzwvVkNQS0dMaWJzPgorICAgIDxWQ1BLR0xpYnMgQ29uZGl0aW9uPSInXCQoQ29uZmlndXJhdGlvbiknIT0nRGVidWcnIj4kbGlic19yZWxlYXNlPC9WQ1BLR0xpYnM+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJcJChWQ1RhcmdldHNQYXRoKVxcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IidcJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInXCQoQ29uZmlndXJhdGlvbiknPT0nUmVsZWFzZSciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT4kY29uZmlnX3R5cGU8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgorICAgIDwhLS0gPENoYXJhY3RlclNldD5VVEYtODwvQ2hhcmFjdGVyU2V0PiAtLT4KKyAgICA8T3V0RGlyPi4uXFw8L091dERpcj4KKyAgICA8IS0tIDxJbnREaXI+XCQoUHJvamVjdERpcilcJChDb25maWd1cmF0aW9uKVxcPC9JbnREaXI+IC0tPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iXCQoVkNUYXJnZXRzUGF0aClcXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iXCQoVXNlclJvb3REaXIpXFxNaWNyb3NvZnQuQ3BwLlwkKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnXCQoVXNlclJvb3REaXIpXFxNaWNyb3NvZnQuQ3BwLlwkKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxHZW5lcmF0ZU1hbmlmZXN0PmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgorICAgIDxFbmFibGVNYW5hZ2VkSW5jcmVtZW50YWxCdWlsZD50cnVlPC9FbmFibGVNYW5hZ2VkSW5jcmVtZW50YWxCdWlsZD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPiRjZmxhZ3MgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JGNkdXA7JGNkdXBcXGNvbXBhdDskY2R1cFxcY29tcGF0XFxyZWdleDskY2R1cFxcY29tcGF0XFx3aW4zMjskY2R1cFxcY29tcGF0XFxwb2xsOyRjZHVwXFxjb21wYXRcXHZjYnVpbGRcXGluY2x1ZGU7XCQoVkNQS0dJbmNsdWRlRGlyZWN0b3J5KTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPEVuYWJsZVBhcmFsbGVsQ29kZUdlbmVyYXRpb24gLz4KKyAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyIC8+CisgICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpYj4KKyAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgorICAgIDwvTGliPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+XCQoVkNQS0dMaWJEaXJlY3RvcnkpOyUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5cJChWQ1BLR0xpYnMpO1wkKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPmludmFsaWRjb250aW51ZS5vYmogJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgorICAgICAgPEVudHJ5UG9pbnRTeW1ib2w+d21haW5DUlRTdGFydHVwPC9FbnRyeVBvaW50U3ltYm9sPgorICAgICAgPE1hbmlmZXN0RmlsZT4kY2R1cFxcY29tcGF0XFx3aW4zMlxcZ2l0Lm1hbmlmZXN0PC9NYW5pZmVzdEZpbGU+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICA8L0xpbms+CitFT00KKyAgICBpZiAoJHRhcmdldCBlcSAnbGliZ2l0JykgeworICAgICAgICBwcmludCBGIDw8ICJFT00iOworICAgIDxQcmVCdWlsZEV2ZW50IENvbmRpdGlvbj0iIUV4aXN0cygnJGNkdXBcXGNvbXBhdFxcdmNidWlsZFxcdmNwa2dcXGluc3RhbGxlZFxcXCQoVkNQS0dBcmNoKVxcaW5jbHVkZVxcb3BlbnNzbFxcc3NsLmgnKSI+CisgICAgICA8TWVzc2FnZT5Jbml0aWFsaXplIFZDUEtHPC9NZXNzYWdlPgorICAgICAgPENvbW1hbmQ+ZGVsICIkY2R1cFxcY29tcGF0XFx2Y2J1aWxkXFx2Y3BrZyI8L0NvbW1hbmQ+CisgICAgICA8Q29tbWFuZD5jYWxsICIkY2R1cFxcY29tcGF0XFx2Y2J1aWxkXFx2Y3BrZ19pbnN0YWxsLmJhdCI8L0NvbW1hbmQ+CisgICAgPC9QcmVCdWlsZEV2ZW50PgorRU9NCisgICAgfQorICAgIHByaW50IEYgPDwgIkVPTSI7CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInXCQoUGxhdGZvcm0pJz09J1dpbjMyJyI+CisgICAgPExpbms+CisgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IidcJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHOyRkZWZpbmVzOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJ1wkKENvbmZpZ3VyYXRpb24pJz09J1JlbGVhc2UnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHOyRkZWZpbmVzOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxGYXZvclNpemVPclNwZWVkPlNwZWVkPC9GYXZvclNpemVPclNwZWVkPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CitFT00KKyAgICBmb3JlYWNoKEBzb3VyY2VzKSB7CisgICAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkXyIgLz4KK0VPTQorICAgIH0KKyAgICBwcmludCBGIDw8ICJFT00iOworICA8L0l0ZW1Hcm91cD4KK0VPTQorICAgIGlmICghJHN0YXRpY19saWJyYXJ5IHx8ICR0YXJnZXQgPX4gJ3Zjcy1zdm4nIHx8ICR0YXJnZXQgPX4gJ3hkaWZmJykgeworICAgICAgbXkgJHV1aWRfbGliZ2l0ID0gJCRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfbGliZ2l0X0dVSUQifTsKKyAgICAgIG15ICR1dWlkX3hkaWZmX2xpYiA9ICQkYnVpbGRfc3RydWN0dXJleyJMSUJTX3hkaWZmL2xpYl9HVUlEIn07CisKKyAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iJGNkdXBcXGxpYmdpdFxcbGliZ2l0LnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+JHV1aWRfbGliZ2l0PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CitFT00KKyAgICAgIGlmICghKCRuYW1lID1+ICd4ZGlmZicpKSB7CisgICAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iJGNkdXBcXHhkaWZmXFxsaWJcXHhkaWZmX2xpYi52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PiR1dWlkX3hkaWZmX2xpYjwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorRU9NCisgICAgICB9CisgICAgICBpZiAoJG5hbWUgPX4gLyh0ZXN0LShsaW5lLWJ1ZmZlcnxzdm4tZmUpfF5naXQtcmVtb3RlLXRlc3Rzdm4pXC5leGUkLykgeworICAgICAgICBteSAkdXVpZF92Y3Nfc3ZuX2xpYiA9ICQkYnVpbGRfc3RydWN0dXJleyJMSUJTX3Zjcy1zdm4vbGliX0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiA8PCAiRU9NIjsKKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSIkY2R1cFxcdmNzLXN2blxcbGliXFx2Y3Mtc3ZuX2xpYi52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PiR1dWlkX3Zjc19zdm5fbGliPC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CitFT00KKyAgICAgIH0KKyAgICAgIHByaW50IEYgPDwgIkVPTSI7CisgIDwvSXRlbUdyb3VwPgorRU9NCisgICAgfQorICAgIHByaW50IEYgPDwgIkVPTSI7CisgIDxJbXBvcnQgUHJvamVjdD0iXCQoVkNUYXJnZXRzUGF0aClcXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KK0VPTQorICAgIGlmICghJHN0YXRpY19saWJyYXJ5KSB7CisgICAgICBwcmludCBGIDw8ICJFT00iOworICA8VGFyZ2V0IE5hbWU9IiR7dGFyZ2V0fV9BZnRlckJ1aWxkIiBBZnRlclRhcmdldHM9IkFmdGVyQnVpbGQiPgorICAgIDxJdGVtR3JvdXA+CisgICAgICA8RExMc0FuZFBEQnMgSW5jbHVkZT0iXCQoVkNQS0dCaW5EaXJlY3RvcnkpXFwqLmRsbDtcJChWQ1BLR0JpbkRpcmVjdG9yeSlcXCoucGRiIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxDb3B5IFNvdXJjZUZpbGVzPSJAKERMTHNBbmRQREJzKSIgRGVzdGluYXRpb25Gb2xkZXI9IlwkKE91dERpcikiIFNraXBVbmNoYW5nZWRGaWxlcz0idHJ1ZSIgVXNlSGFyZGxpbmtzSWZQb3NzaWJsZT0idHJ1ZSIgLz4KKyAgICA8TWFrZURpciBEaXJlY3Rvcmllcz0iLi5cXHRlbXBsYXRlc1xcYmx0XFxicmFuY2hlcyIgLz4KKyAgPC9UYXJnZXQ+CitFT00KKyAgICB9CisgICAgaWYgKCR0YXJnZXQgZXEgJ2dpdCcpIHsKKyAgICAgIHByaW50IEYgIiAgPEltcG9ydCBQcm9qZWN0PVwiTGlua09yQ29weUJ1aWx0aW5zLnRhcmdldHNcIiAvPlxuIjsKKyAgICB9CisgICAgaWYgKCR0YXJnZXQgZXEgJ2dpdC1yZW1vdGUtaHR0cCcpIHsKKyAgICAgIHByaW50IEYgIiAgPEltcG9ydCBQcm9qZWN0PVwiTGlua09yQ29weVJlbW90ZUh0dHAudGFyZ2V0c1wiIC8+XG4iOworICAgIH0KKyAgICBwcmludCBGIDw8ICJFT00iOworPC9Qcm9qZWN0PgorRU9NCisgICAgY2xvc2UgRjsKK30KKworc3ViIGNyZWF0ZUdsdWVQcm9qZWN0IHsKKyAgICBteSAoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBwcmludCAiR2VuZXJhdGUgc29sdXRpb25zIGZpbGVcbiI7CisgICAgJHJlbF9kaXIgPSAiLi5cXCRyZWxfZGlyIjsKKyAgICAkcmVsX2RpciA9fiBzL1wvL1xcL2c7CisgICAgbXkgJFNMTl9IRUFEID0gIk1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDExLjAwXG4jIFZpc3VhbCBTdHVkaW8gMjAxMFxuIjsKKyAgICBteSAkU0xOX1BSRSAgPSAiUHJvamVjdChcIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9XCIpID0gIjsKKyAgICBteSAkU0xOX1BPU1QgPSAiXG5FbmRQcm9qZWN0XG4iOworCisgICAgbXkgQGxpYnMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlMifX07CisgICAgbXkgQHRtcDsKKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICAkXyA9fiBzL1wuYS8vOworICAgICAgICBwdXNoKEB0bXAsICRfKTsKKyAgICB9CisgICAgQGxpYnMgPSBAdG1wOworCisgICAgbXkgQGFwcHMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX07CisgICAgQHRtcCA9ICgpOworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgICRfID1+IHMvXC5leGUvLzsKKyAgICAgICAgaWYgKCRfIGVxICJnaXQiICkgeworICAgICAgICAgICAgdW5zaGlmdChAdG1wLCAkXyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEB0bXAsICRfKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBAYXBwcyA9IEB0bXA7CisKKyAgICBvcGVuIEYsICI+Z2l0LnNsbiIgfHwgZGllICJDb3VsZCBub3Qgb3BlbiBnaXQuc2xuIGZvciB3cml0aW5nIVxuIjsKKyAgICBiaW5tb2RlIEYsICI6Y3JsZiA6dXRmOCI7CisgICAgcHJpbnQgRiBjaHIoMHhGRUZGKTsKKyAgICBwcmludCBGICIkU0xOX0hFQUQiOworCisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgbXkgJGFwcG5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICIkU0xOX1BSRSI7CisJbXkgJHZjeHByb2ogPSAkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fVkNYUFJPSiJ9OworCSR2Y3hwcm9qID1+IHMvXC8vXFwvZzsKKyAgICAgICAgJGFwcG5hbWUgPX4gcy8uKlwvLy87CisgICAgICAgIHByaW50IEYgIlwiJHthcHBuYW1lfVwiLCBcIiR7dmN4cHJvan1cIiwgXCIke3V1aWR9XCIiOworICAgICAgICBwcmludCBGICIkU0xOX1BPU1QiOworICAgIH0KKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBteSAkbGlibmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIiRTTE5fUFJFIjsKKyAgICAgICAgbXkgJHZjeHByb2ogPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fVkNYUFJPSiJ9OworCSR2Y3hwcm9qID1+IHMvXC8vXFwvZzsKKyAgICAgICAgJGxpYm5hbWUgPX4gcy9cLy9fL2c7CisgICAgICAgIHByaW50IEYgIlwiJHtsaWJuYW1lfVwiLCBcIiR7dmN4cHJvan1cIiwgXCIke3V1aWR9XCIiOworICAgICAgICBwcmludCBGICIkU0xOX1BPU1QiOworICAgIH0KKworICAgIHByaW50IEYgPDwgIkVPTSI7CitHbG9iYWwKKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgorCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQKKwkJRGVidWd8eDg2ID0gRGVidWd8eDg2CisJCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQKKwkJUmVsZWFzZXx4ODYgPSBSZWxlYXNlfHg4NgorCUVuZEdsb2JhbFNlY3Rpb24KK0VPTQorICAgIHByaW50IEYgPDwgIkVPTSI7CisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KK0VPTQorICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIG15ICRhcHBuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NFxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NFxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgfQorICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIG15ICRsaWJuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NFxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8eDg2LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjRcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NFxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXx4ODYuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgfQorCisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCitFT00KKyAgICBjbG9zZSBGOworfQorCisxOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsIGIvY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3MDk3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9lbmdpbmUucGwKQEAgLTAsMCArMSwzOTQgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEbyBub3QgY2FsbCB0aGlzIHNjcmlwdCBkaXJlY3RseSEKKyMKKyMgVGhlIGdlbmVyYXRlIHNjcmlwdCBlbnN1cmVzIHRoYXQgQElOQyBpcyBjb3JyZWN0IGJlZm9yZSB0aGUgZW5naW5lCisjIGlzIGV4ZWN1dGVkLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyaXVzIFN0b3JtLU9sc2VuIDxtc3Rvcm1vQGdtYWlsLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBDd2Q7Cit1c2UgR2VuZXJhdG9yczsKK3VzZSBUZXh0OjpQYXJzZVdvcmRzOworCitteSAoJWJ1aWxkX3N0cnVjdHVyZSwgJWNvbXBpbGVfb3B0aW9ucywgQG1ha2VkcnkpOworbXkgJG91dF9kaXIgPSBnZXRjd2QoKTsKK215ICRnaXRfZGlyID0gJG91dF9kaXI7CiskZ2l0X2RpciA9fiBzPVxcPS89ZzsKKyRnaXRfZGlyID0gZGlybmFtZSgkZ2l0X2Rpcikgd2hpbGUgKCEtZSAiJGdpdF9kaXIvZ2l0LmMiICYmICIkZ2l0X2RpciIgbmUgIiIpOworZGllICJDb3VsZG4ndCBmaW5kIEdpdCByZXBvIiBpZiAoIiRnaXRfZGlyIiBlcSAiIik7CisKK215IEBnZW5zID0gR2VuZXJhdG9yczo6YXZhaWxhYmxlKCk7CitteSAkZ2VuID0gIlZjcHJvaiI7CisKK3N1YiBzaG93VXNhZ2UKK3sKKyAgICBteSAkZ2VubGlzdCA9IGpvaW4oJywgJywgQGdlbnMpOworICAgIHByaW50IDw8ICJFT00iOworZ2VuZXJhdGUgdXNhZ2U6CisgIC1nIDxHRU5FUkFUT1I+ICAtLWdlbiA8R0VORVJBVE9SPiBTcGVjaWZ5IHRoZSBidWlsZHN5c3RlbSBnZW5lcmF0b3IgICAgKGRlZmF1bHQ6ICRnZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGU6ICRnZW5saXN0CisgIC1vIDxQQVRIPiAgICAgICAtLW91dCA8UEFUSD4gICAgICBTcGVjaWZ5IG91dHB1dCBkaXJlY3RvcnkgZ2VuZXJhdGlvbiAgKGRlZmF1bHQ6IC4pCisgICAgICAgICAgICAgICAgICAtLW1ha2Utb3V0IDxQQVRIPiBXcml0ZSB0aGUgb3V0cHV0IG9mIEdOVSBNYWtlIGludG8gYSBmaWxlCisgIC1pIDxGSUxFPiAgICAgICAtLWluIDxGSUxFPiAgICAgICBTcGVjaWZ5IGlucHV0IGZpbGUsIGluc3RlYWQgb2YgcnVubmluZyBHTlUgTWFrZQorICAtaCwtPyAgICAgICAgICAgLS1oZWxwICAgICAgICAgICAgVGhpcyBoZWxwCitFT00KKyAgICBleGl0IDA7Cit9CisKKyMgUGFyc2UgY29tbWFuZC1saW5lIG9wdGlvbnMKK215ICRtYWtlX291dDsKK3doaWxlIChAQVJHVikgeworICAgIG15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKyAgICBpZiAoIiRhcmciIGVxICItaCIgfHwgIiRhcmciIGVxICItLWhlbHAiIHx8ICIkYXJnIiBlcSAiLT8iKSB7CisJc2hvd1VzYWdlKCk7CisJZXhpdCgwKTsKKyAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1vdXQiIHx8ICIkYXJnIiBlcSAiLW8iKSB7CisJJG91dF9kaXIgPSBzaGlmdCBAQVJHVjsKKyAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1tYWtlLW91dCIpIHsKKwkkbWFrZV9vdXQgPSBzaGlmdCBAQVJHVjsKKyAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1nZW4iIHx8ICIkYXJnIiBlcSAiLWciKSB7CisJJGdlbiA9IHNoaWZ0IEBBUkdWOworICAgIH0gZWxzaWYoIiRhcmciIGVxICItLWluIiB8fCAiJGFyZyIgZXEgIi1pIikgeworCW15ICRpbmZpbGUgPSBzaGlmdCBAQVJHVjsKKyAgICAgICAgb3BlbihGLCAiPCRpbmZpbGUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkaW5maWxlIjsKKyAgICAgICAgQG1ha2VkcnkgPSA8Rj47CisgICAgICAgIGNsb3NlKEYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRpZSAiVW5rbm93biBvcHRpb246ICIgLiAkYXJnOworICAgIH0KK30KKworIyBOT1QgdXNpbmcgRmlsZTo6U3BlYy0+cmVsMmFicygkcGF0aCwgJGJhc2UpIGhlcmUsIGFzCisjIGl0IGZhaWxzIGJhZGx5IGZvciBtZSBpbiB0aGUgbXN5c2dpdCBlbnZpcm9ubWVudAorJGdpdF9kaXIgPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRnaXRfZGlyKTsKKyRvdXRfZGlyID0gRmlsZTo6U3BlYy0+cmVsMmFicygkb3V0X2Rpcik7CitteSAkcmVsX2RpciA9IG1ha2VPdXRSZWwyR2l0KCRnaXRfZGlyLCAkb3V0X2Rpcik7CisKKyMgUHJpbnQgc29tZSBpbmZvcm1hdGlvbiBzbyB0aGUgdXNlciBmZWVscyBpbmZvcm1lZAorcHJpbnQgPDwgIkVPTSI7CistLS0tLQorR2VuZXJhdG9yOiAkZ2VuCitHaXQgZGlyOiAgICRnaXRfZGlyCitPdXQgZGlyOiAgICRvdXRfZGlyCistLS0tLQorUnVubmluZyBHTlUgTWFrZSB0byBmaWd1cmUgb3V0IGJ1aWxkIHN0cnVjdHVyZS4uLgorRU9NCisKKyMgUGlwZSBhIG1ha2UgLS1kcnktcnVuIGludG8gYSB2YXJpYWJsZSwgaWYgbm90IGFscmVhZHkgbG9hZGVkIGZyb20gZmlsZQorIyBDYXB0dXJlIHRoZSBtYWtlIGRyeSBzdGRlcnIgdG8gZmlsZSBmb3IgcmV2aWV3ICh3aWxsIGJlIGVtcHR5IGZvciBhIHJlbGVhc2UgYnVpbGQpLgorCitteSAkRXJyc0ZpbGUgPSAibXN2Yy1idWlsZC1tYWtlZHJ5ZXJyb3JzLnR4dCI7CitAbWFrZWRyeSA9IGBtYWtlIC1DICRnaXRfZGlyIC1uIE1TVkM9MSBTS0lQX1ZDUEtHPTEgVj0xIDI+JEVycnNGaWxlYAoraWYgIUBtYWtlZHJ5OworIyB0ZXN0IGZvciBhbiBlbXB0eSBFcnJvcnMgZmlsZSBhbmQgcmVtb3ZlIGl0Cit1bmxpbmsgJEVycnNGaWxlIGlmIC1mIC16ICRFcnJzRmlsZTsKKworaWYgKGRlZmluZWQgJG1ha2Vfb3V0KSB7CisgICAgb3BlbiBPVVQsICI+IiAuICRtYWtlX291dDsKKyAgICBwcmludCBPVVQgQG1ha2Vkcnk7CisgICAgY2xvc2UgT1VUOworfQorCisjIFBhcnNlIHRoZSBtYWtlIG91dHB1dCBpbnRvIHVzYWJsZSBpbmZvCitwYXJzZU1ha2VPdXRwdXQoKTsKKworIyBGaW5hbGx5LCBhc2sgdGhlIGdlbmVyYXRvciB0byBzdGFydCBnZW5lcmF0aW5nLi4KK0dlbmVyYXRvcnM6OmdlbmVyYXRlKCRnZW4sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworCisjIG1haW4gZmxvdyBlbmRzIGhlcmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyMgMSkgcGF0aDogL2Zvby9iYXIvYmF6ICAgICAgICAyKSBwYXRoOiAvZm9vL2Jhci9iYXogICAzKSBwYXRoOiAvZm9vL2Jhci9iYXoKKyMgICAgYmFzZTogL2Zvby9iYXIvYmF6L3RlbXAgICAgICBiYXNlOiAvZm9vL2JhciAgICAgICAgICBiYXNlOiAvdG1wCisjICAgIHJlbDogIC4uICAgICAgICAgICAgICAgICAgICAgcmVsOiAgYmF6ICAgICAgICAgICAgICAgcmVsOiAgLi4vZm9vL2Jhci9iYXoKK3N1YiBtYWtlT3V0UmVsMkdpdAoreworICAgIG15ICgkcGF0aCwgJGJhc2UpID0gQF87CisgICAgbXkgJHJlbDsKKyAgICBpZiAoIiRwYXRoIiBlcSAiJGJhc2UiKSB7CisgICAgICAgIHJldHVybiAiLiI7CisgICAgfSBlbHNpZiAoJGJhc2UgPX4gL14kcGF0aC8pIHsKKyAgICAgICAgIyBjYXNlIDEKKyAgICAgICAgbXkgJHRtcCA9ICRiYXNlOworICAgICAgICAkdG1wID1+IHMvXiRwYXRoLy87CisgICAgICAgIGZvcmVhY2ggKHNwbGl0KCcvJywgJHRtcCkpIHsKKyAgICAgICAgICAgICRyZWwgLj0gIi4uLyIgaWYgKCIkXyIgbmUgIiIpOworICAgICAgICB9CisgICAgfSBlbHNpZiAoJHBhdGggPX4gL14kYmFzZS8pIHsKKyAgICAgICAgIyBjYXNlIDIKKyAgICAgICAgJHJlbCA9ICRwYXRoOworICAgICAgICAkcmVsID1+IHMvXiRiYXNlLy87CisgICAgICAgICRyZWwgPSAiLi8kcmVsIjsKKyAgICB9IGVsc2UgeworICAgICAgICBteSAkdG1wID0gJGJhc2U7CisgICAgICAgIGZvcmVhY2ggKHNwbGl0KCcvJywgJHRtcCkpIHsKKyAgICAgICAgICAgICRyZWwgLj0gIi4uLyIgaWYgKCIkXyIgbmUgIiIpOworICAgICAgICB9CisgICAgICAgICRyZWwgLj0gJHBhdGg7CisgICAgfQorICAgICRyZWwgPX4gcy9cL1wvL1wvL2c7ICMgc2ltcGxpZnkKKyAgICAkcmVsID1+IHMvXC8kLy87ICAgICAjIGRvbid0IGVuZCB3aXRoIC8KKyAgICByZXR1cm4gJHJlbDsKK30KKworc3ViIHBhcnNlTWFrZU91dHB1dAoreworICAgIHByaW50ICJQYXJzaW5nIEdOVSBNYWtlIG91dHB1dCB0byBmaWd1cmUgb3V0IGJ1aWxkIHN0cnVjdHVyZS4uLlxuIjsKKyAgICBteSAkbGluZSA9IDA7CisgICAgd2hpbGUgKG15ICR0ZXh0ID0gc2hpZnQgQG1ha2VkcnkpIHsKKyAgICAgICAgbXkgJGF0ZV9uZXh0OworICAgICAgICBkbyB7CisgICAgICAgICAgICAkYXRlX25leHQgPSAwOworICAgICAgICAgICAgJGxpbmUrKzsKKyAgICAgICAgICAgIGNob21wICR0ZXh0OworICAgICAgICAgICAgY2hvcCAkdGV4dCBpZiAoJHRleHQgPX4gL1xyJC8pOworICAgICAgICAgICAgaWYgKCR0ZXh0ID1+IC9cXCQvKSB7CisgICAgICAgICAgICAgICAgJHRleHQgPX4gcy9cXCQvLzsKKyAgICAgICAgICAgICAgICAkdGV4dCAuPSBzaGlmdCBAbWFrZWRyeTsKKyAgICAgICAgICAgICAgICAkYXRlX25leHQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKCRhdGVfbmV4dCk7CisKKyAgICAgICAgaWYgKCR0ZXh0ID1+IC9edGVzdCAvKSB7CisgICAgICAgICAgICAjIG9wdGlvbnMgdG8gdGVzdCAoZWcgLW8pIG1heSBiZSBtaXN0YWtlbiBmb3IgbGlua2VyIG9wdGlvbnMKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoJHRleHQgPX4gL14obWtkaXJ8bXNnZm10KSAvKSB7CisgICAgICAgICAgICAjIG9wdGlvbnMgdG8gdGhlIFBvcnRhYmxlIE9iamVjdCB0cmFuc2xhdGlvbnMKKyAgICAgICAgICAgICMgdGhlIGxpbmUgIm1rZGlyIC4uLiAmJiBtc2dmbXQgLi4uIiBjb250YWlucyBubyBsaW5rZXIgb3B0aW9ucworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCR0ZXh0ID1+IC8gLWMgLykgeworICAgICAgICAgICAgIyBjb21waWxhdGlvbgorICAgICAgICAgICAgaGFuZGxlQ29tcGlsZUxpbmUoJHRleHQsICRsaW5lKTsKKworICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvIC1vIC8pIHsKKyAgICAgICAgICAgICMgbGlua2luZyBleGVjdXRhYmxlCisgICAgICAgICAgICBoYW5kbGVMaW5rTGluZSgkdGV4dCwgJGxpbmUpOworCisgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9cLm8gLyAmJiAkdGV4dCA9fiAvXC5hIC8pIHsKKyAgICAgICAgICAgICMgbGliaWZ5aW5nCisgICAgICAgICAgICBoYW5kbGVMaWJMaW5lKCR0ZXh0LCAkbGluZSk7CisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXmNwIC8pIHsKKyMgICAgICAgICAgICAjIGNvcHkgZmlsZSBhcm91bmQKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ecm0gLWYgLykgeworIyAgICAgICAgICAgICMgc2hlbGwgY29tbWFuZAorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15tYWtlWyBcW10vKSB7CisjICAgICAgICAgICAgIyBtYWtlIG91dHB1dAorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15lY2hvIC8pIHsKKyMgICAgICAgICAgICAjIGVjaG8gdG8gZmlsZQorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15pZiAvKSB7CisjICAgICAgICAgICAgIyBzaGVsbCBjb25kaXRpb25hbAorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL150Y2xzaCAvKSB7CisjICAgICAgICAgICAgIyB0cmFuc2xhdGlvbiBzdHVmZgorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL151bWFzayAvKSB7CisjICAgICAgICAgICAgIyBoYW5kbGluZyBib2lsZXJwbGF0ZXMKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9cJFwoXDpcKS8pIHsKKyMgICAgICAgICAgICAjIGlnbm9yZQorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15GTEFHUz0vKSB7CisjICAgICAgICAgICAgIyBmbGFncyBjaGVjayBmb3IgZGVwZW5kZW5jaWVzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXidcL3VzclwvYmluXC9wZXJsJyAtTUVycm9yIC1lLykgeworIyAgICAgICAgICAgICMgcGVybCBjb21tYW5kcyBmb3IgY29weWluZyBmaWxlcworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL2dlbmVyYXRlLWNtZGxpc3RcLnNoLykgeworIyAgICAgICAgICAgICMgY29tbWFuZCBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIGNvbW1hbmRzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvbmV3IGxvY2F0aW9ucyBvciBUY2wvKSB7CisjICAgICAgICAgICAgIyBjb21tYW5kIGZvciBkZXRlY3RpbmcgVGNsL1RrIGNoYW5nZXMKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ta2RpciAtcC8pIHsKKyMgICAgICAgICAgICAjIGNvbW1hbmQgY3JlYXRpbmcgcGF0aAorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gLzogbm8gY3VzdG9tIHRlbXBsYXRlcyB5ZXQvKSB7CisjICAgICAgICAgICAgIyB3aGF0ZXZlcgorIworIyAgICAgICAgfSBlbHNlIHsKKyMgICAgICAgICAgICBwcmludCAiVW5oYW5kbGVkIChsaW5lOiAkbGluZSk6ICR0ZXh0XG4iOworICAgICAgICB9CisgICAgfQorCisjICAgIHVzZSBEYXRhOjpEdW1wZXI7CisjICAgIHByaW50ICJQYXJzZWQgYnVpbGQgc3RydWN0dXJlOlxuIjsKKyMgICAgcHJpbnQgRHVtcGVyKCVidWlsZF9zdHJ1Y3R1cmUpOworfQorCisjIHZhcmlhYmxlcyBmb3IgdGhlIGNvbXBpbGF0aW9uIHBhcnQgb2YgZWFjaCBzdGVwCitteSAoQGRlZmluZXMsIEBpbmNwYXRocywgQGNmbGFncywgQHNvdXJjZXMpOworCitzdWIgY2xlYXJDb21waWxlU3RlcAoreworICAgIEBkZWZpbmVzID0gKCk7CisgICAgQGluY3BhdGhzID0gKCk7CisgICAgQGNmbGFncyA9ICgpOworICAgIEBzb3VyY2VzID0gKCk7Cit9CisKK3N1YiByZW1vdmVEdXBsaWNhdGVzCit7CisgICAgbXkgKCVkdXBIYXNoLCAkZW50cnkpOworICAgICVkdXBIYXNoID0gbWFwIHsgJF8sIDEgfSBAZGVmaW5lczsKKyAgICBAZGVmaW5lcyA9IGtleXMgJWR1cEhhc2g7CisKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGluY3BhdGhzOworICAgIEBpbmNwYXRocyA9IGtleXMgJWR1cEhhc2g7CisKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGNmbGFnczsKKyAgICBAY2ZsYWdzID0ga2V5cyAlZHVwSGFzaDsKK30KKworc3ViIGhhbmRsZUNvbXBpbGVMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IEBwYXJ0cyA9IHNoZWxsd29yZHMoJGxpbmUpOworICAgIG15ICRzb3VyY2VmaWxlOworICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAorICAgIHdoaWxlIChteSAkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAjIGlnbm9yZSBvYmplY3QgZmlsZQorICAgICAgICAgICAgc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItYyIpIHsKKyAgICAgICAgICAgICMgaWdub3JlIGNvbXBpbGUgZmxhZworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItYyIpIHsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14uPy1JLykgeworICAgICAgICAgICAgcHVzaChAaW5jcGF0aHMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14uPy1ELykgeworICAgICAgICAgICAgcHVzaChAZGVmaW5lcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBjZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGN8Y2N8Y3BwKSQvKSB7CisgICAgICAgICAgICAkc291cmNlZmlsZSA9ICRwYXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgY29tcGlsZXIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgIH0KKyAgICB9CisgICAgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fSU5DUEFUSFMifX0gPSBAaW5jcGF0aHM7CisgICAgY2xlYXJDb21waWxlU3RlcCgpOworfQorCitzdWIgaGFuZGxlTGliTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCAkbGlib3V0LCAkcGFydCk7CisgICAgIyBraWxsIGNtZCBhbmQgcm0gJ3ByZWZpeCcKKyAgICAkbGluZSA9fiBzL15ybSAtZiAuKiAmJiAuKiByY3MgLy87CisgICAgbXkgQHBhcnRzID0gc2hlbGx3b3JkcygkbGluZSk7CisgICAgd2hpbGUgKCRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBsZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKG98b2JqKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgICRsaWJvdXQgPSAkcGFydDsKKyAgICAgICAgICAgICRsaWJvdXQgPX4gcy9cLmEkLy87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBsaWIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgIH0KKyAgICB9CisjICAgIHByaW50ICJMaWJPdXQ6ICckbGlib3V0J1xuTEZsYWdzOiBAbGZsYWdzXG5PZmlsZXM6IEBvYmpmaWxlc1xuIjsKKyMgICAgZXhpdCgxKTsKKyAgICBmb3JlYWNoIChAb2JqZmlsZXMpIHsKKyAgICAgICAgbXkgJHNvdXJjZWZpbGUgPSAkXzsKKyAgICAgICAgJHNvdXJjZWZpbGUgPX4gcy9cLm8kLy5jLzsKKyAgICAgICAgcHVzaChAc291cmNlcywgJHNvdXJjZWZpbGUpOworICAgICAgICBwdXNoKEBjZmxhZ3MsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9DRkxBR1MifX0pOworICAgICAgICBwdXNoKEBkZWZpbmVzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fREVGSU5FUyJ9fSk7CisgICAgICAgIHB1c2goQGluY3BhdGhzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fSU5DUEFUSFMifX0pOworICAgIH0KKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCUyJ9fSwgJGxpYm91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX1NPVVJDRVMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9PQkpFQ1RTIik7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9JTkNMVURFUyJ9fSA9IEBpbmNwYXRoczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9MRkxBR1MifX0gPSBAbGZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fU09VUkNFUyJ9fSA9IEBzb3VyY2VzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fT0JKRUNUUyJ9fSA9IEBvYmpmaWxlczsKKyAgICBjbGVhckNvbXBpbGVTdGVwKCk7Cit9CisKK3N1YiBoYW5kbGVMaW5rTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCBAbGlicywgJGFwcG91dCwgJHBhcnQpOworICAgIG15IEBwYXJ0cyA9IHNoZWxsd29yZHMoJGxpbmUpOworICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAorICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoJHBhcnQgPX4gL14tSUdOT1JFLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLVtHUklNRE9dLykgeworICAgICAgICAgICAgIyBlYXQgY29tcGlsZXIgZmxhZ3MKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAkYXBwb3V0ID0gc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbHoiKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAiemxpYi5saWIiKTsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWxjcnlwdG8iKSB7CisgICAgICAgICAgICBwdXNoKEBsaWJzLCAibGliY3J5cHRvLmxpYiIpOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbHNzbCIpIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICJsaWJzc2wubGliIik7CisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1sY3VybCIpIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICJsaWJjdXJsLmxpYiIpOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbGV4cGF0IikgeworICAgICAgICAgICAgcHVzaChAbGlicywgImV4cGF0LmxpYiIpOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbGljb252IikgeworICAgICAgICAgICAgcHVzaChAbGlicywgImxpYmljb252LmxpYiIpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXlstXC9dLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihhfGxpYikkLykgeworICAgICAgICAgICAgJHBhcnQgPX4gcy9cLmEkLy5saWIvOworICAgICAgICAgICAgcHVzaChAbGlicywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCBlcSAnaW52YWxpZGNvbnRpbnVlLm9iaicpIHsKKyAgICAgICAgICAgICMgaWdub3JlIC0ga25vd24gdG8gTVNWQworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC5vJC8pIHsKKyAgICAgICAgICAgIHB1c2goQG9iamZpbGVzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLm9iaiQvKSB7CisgICAgICAgICAgICAjIGRvIG5vdGhpbmcsICdtYWtlJyBzaG91bGQgbm90IGJlIHByb2R1Y2luZyAub2JqLCBvbmx5IC5vIGZpbGVzCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBsaW5rIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorIyAgICBwcmludCAiQXBwT3V0OiAnJGFwcG91dCdcbkxGbGFnczogQGxmbGFnc1xuTGlicyAgOiBAbGlic1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisjICAgIGV4aXQoMSk7CisgICAgZm9yZWFjaCAoQG9iamZpbGVzKSB7CisgICAgICAgIG15ICRzb3VyY2VmaWxlID0gJF87CisgICAgICAgICRzb3VyY2VmaWxlID1+IHMvXC5vJC8uYy87CisgICAgICAgIHB1c2goQHNvdXJjZXMsICRzb3VyY2VmaWxlKTsKKyAgICAgICAgcHVzaChAY2ZsYWdzLCBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fQ0ZMQUdTIn19KTsKKyAgICAgICAgcHVzaChAZGVmaW5lcywgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0RFRklORVMifX0pOworICAgICAgICBwdXNoKEBpbmNwYXRocywgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0lOQ1BBVEhTIn19KTsKKyAgICB9CisgICAgcmVtb3ZlRHVwbGljYXRlcygpOworCisgICAgcmVtb3ZlRHVwbGljYXRlcygpOworICAgIHB1c2goQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19LCAkYXBwb3V0KTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9In19ID0gKCJfREVGSU5FUyIsICJfSU5DTFVERVMiLCAiX0NGTEFHUyIsICJfTEZMQUdTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfU09VUkNFUyIsICJfT0JKRUNUUyIsICJfTElCUyIpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fREVGSU5FUyJ9fSA9IEBkZWZpbmVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fSU5DTFVERVMifX0gPSBAaW5jcGF0aHM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9DRkxBR1MifX0gPSBAY2ZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fTEZMQUdTIn19ID0gQGxmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X1NPVVJDRVMifX0gPSBAc291cmNlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X09CSkVDVFMifX0gPSBAb2JqZmlsZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9MSUJTIn19ID0gQGxpYnM7CisgICAgY2xlYXJDb21waWxlU3RlcCgpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvZ2VuZXJhdGUgYi9jb250cmliL2J1aWxkc3lzdGVtcy9nZW5lcmF0ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzEwZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvZ2VuZXJhdGUKQEAgLTAsMCArMSwyOSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdlbmVyYXRlIGJ1aWxkc3lzdGVtIGZpbGVzCisjCisjIFRoaXMgc2NyaXB0IGdlbmVyYXRlIGJ1aWxkc3lzdGVtIGZpbGVzIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgYQorIyBHTlUgTWFrZSAtLWRyeS1ydW4sIGVuYWJsaW5nIFdpbmRvd3MgdXNlcnMgdG8gZGV2ZWxvcCBHaXQgd2l0aCB0aGVpcgorIyB0cnVzdGVkIElERSB3aXRoIG5hdGl2ZSBwcm9qZWN0cy4KKyMKKyMgTm90ZToKKyMgSXQgaXMgbm90IG1lYW50IGFzICp0aGUqIHdheSBvZiBidWlsZGluZyBHaXQgd2l0aCBNU1ZDLCBidXQgbWVyZWx5IGEKKyMgY29udmVuaWVuY2UuIFRoZSBjb3JyZWN0IHdheSBvZiBidWlsZGluZyBHaXQgd2l0aCBNU1ZDIGlzIHRvIHVzZSB0aGUKKyMgR05VIE1ha2UgdG9vbCB0byBidWlsZCB3aXRoIHRoZSBtYWludGFpbmVkIE1ha2VmaWxlIGluIHRoZSByb290IG9mCisjIHRoZSBwcm9qZWN0LiBJZiB5b3UgaGF2ZSB0aGUgbXN5c2dpdCBlbnZpcm9ubWVudCBpbnN0YWxsZWQgYW5kCisjIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQgY29uc29sZSwgdG9nZXRoZXIgd2l0aCB0aGUgVmlzdWFsIFN0dWRpbworIyBlbnZpcm9ubWVudCB5b3Ugd2lzaCB0byBidWlsZCBmb3IsIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyBydW4gdGhlCisjIGNvbW1hbmQ6CisjICAgICBtYWtlIE1TVkM9MQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyaXVzIFN0b3JtLU9sc2VuIDxtc3Rvcm1vQGdtYWlsLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgQ3dkOworCitteSAkZ2l0X2RpciA9IGdldGN3ZCgpOworJGdpdF9kaXIgPX4gcz1cXD0vPWc7CiskZ2l0X2RpciA9IGRpcm5hbWUoJGdpdF9kaXIpIHdoaWxlICghLWUgIiRnaXRfZGlyL2dpdC5jIiAmJiAiJGdpdF9kaXIiIG5lICIiKTsKK2RpZSAiQ291bGRuJ3QgZmluZCBHaXQgcmVwbyIgaWYgKCIkZ2l0X2RpciIgZXEgIiIpOworZXhlYyBqb2luKCIgIiwgKCJQRVJMNUxJQj0ke2dpdF9kaXJ9L2NvbnRyaWIvYnVpbGRzeXN0ZW1zICR7Z2l0X2Rpcn0vY29udHJpYi9idWlsZHN5c3RlbXMvZW5naW5lLnBsIiwgQEFSR1YpKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL3BhcnNlLnBsIGIvY29udHJpYi9idWlsZHN5c3RlbXMvcGFyc2UucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzk2NTZlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL3BhcnNlLnBsCkBAIC0wLDAgKzEsMjI4IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRG8gbm90IGNhbGwgdGhpcyBzY3JpcHQgZGlyZWN0bHkhCisjCisjIFRoZSBnZW5lcmF0ZSBzY3JpcHQgZW5zdXJlcyB0aGF0IEBJTkMgaXMgY29ycmVjdCBiZWZvcmUgdGhlIGVuZ2luZQorIyBpcyBleGVjdXRlZC4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEN3ZDsKKworbXkgJGZpbGUgPSAkQVJHVlswXTsKK2RpZSAiTm8gZmlsZSBwcm92aWRlZCEiIGlmICFkZWZpbmVkICRmaWxlOworCitteSAoJGNmbGFncywgJHRhcmdldCwgJHR5cGUsICRsaW5lKTsKKworb3BlbihGLCAiPCRmaWxlIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGZpbGUiOworbXkgQGRhdGEgPSA8Rj47CitjbG9zZShGKTsKKword2hpbGUgKG15ICR0ZXh0ID0gc2hpZnQgQGRhdGEpIHsKKyAgICBteSAkYXRlX25leHQ7CisgICAgZG8geworICAgICAgICAkYXRlX25leHQgPSAwOworICAgICAgICAkbGluZSsrOworICAgICAgICBjaG9tcCAkdGV4dDsKKyAgICAgICAgY2hvcCAkdGV4dCBpZiAoJHRleHQgPX4gL1xyJC8pOworICAgICAgICBpZiAoJHRleHQgPX4gL1xcJC8pIHsKKyAgICAgICAgICAgICR0ZXh0ID1+IHMvXFwkLy87CisgICAgICAgICAgICAkdGV4dCAuPSBzaGlmdCBAZGF0YTsKKyAgICAgICAgICAgICRhdGVfbmV4dCA9IDE7CisgICAgICAgIH0KKyAgICB9IHdoaWxlKCRhdGVfbmV4dCk7CisKKyAgICBpZigkdGV4dCA9fiAvIC1jIC8pIHsKKyAgICAgICAgIyBjb21waWxhdGlvbgorICAgICAgICBoYW5kbGVDb21waWxlTGluZSgkdGV4dCwgJGxpbmUpOworCisgICAgfSBlbHNpZiAoJHRleHQgPX4gLyAtbyAvKSB7CisgICAgICAgICMgbGlua2luZyBleGVjdXRhYmxlCisgICAgICAgIGhhbmRsZUxpbmtMaW5lKCR0ZXh0LCAkbGluZSk7CisKKyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXC5vIC8gJiYgJHRleHQgPX4gL1wuYSAvKSB7CisgICAgICAgICMgbGliaWZ5aW5nCisgICAgICAgIGhhbmRsZUxpYkxpbmUoJHRleHQsICRsaW5lKTsKKworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXmNwIC8pIHsKKyMgICAgICAgICMgY29weSBmaWxlIGFyb3VuZAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnJtIC1mIC8pIHsKKyMgICAgICAgICMgc2hlbGwgY29tbWFuZAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXm1ha2VbIFxbXS8pIHsKKyMgICAgICAgICMgbWFrZSBvdXRwdXQKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15lY2hvIC8pIHsKKyMgICAgICAgICMgZWNobyB0byBmaWxlCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eaWYgLykgeworIyAgICAgICAgIyBzaGVsbCBjb25kaXRpb25hbAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnRjbHNoIC8pIHsKKyMgICAgICAgICMgdHJhbnNsYXRpb24gc3R1ZmYKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL151bWFzayAvKSB7CisjICAgICAgICAjIGhhbmRsaW5nIGJvaWxlcnBsYXRlcworIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXCRcKFw6XCkvKSB7CisjICAgICAgICAjIGlnbm9yZQorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXkZMQUdTPS8pIHsKKyMgICAgICAgICMgZmxhZ3MgY2hlY2sgZm9yIGRlcGVuZGVuY2llcworIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXidcL3VzclwvYmluXC9wZXJsJyAtTUVycm9yIC1lLykgeworIyAgICAgICAgIyBwZXJsIGNvbW1hbmRzIGZvciBjb3B5aW5nIGZpbGVzCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9nZW5lcmF0ZS1jbWRsaXN0XC5zaC8pIHsKKyMgICAgICAgICMgY29tbWFuZCBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIGNvbW1hbmRzCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edGVzdCAvICYmICR0ZXh0ID1+IC98fCBybSAtZiAvKSB7CisjICAgICAgICAjIGNvbW1hbmRzIHJlbW92aW5nIGV4ZWN1dGFibGVzLCBpZiB0aGV5IGV4aXN0CisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9uZXcgbG9jYXRpb25zIG9yIFRjbC8pIHsKKyMgICAgICAgICMgY29tbWFuZCBmb3IgZGV0ZWN0aW5nIFRjbC9UayBjaGFuZ2VzCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ta2RpciAtcC8pIHsKKyMgICAgICAgICMgY29tbWFuZCBjcmVhdGluZyBwYXRoCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC86IG5vIGN1c3RvbSB0ZW1wbGF0ZXMgeWV0LykgeworIyAgICAgICAgIyB3aGF0ZXZlcgorCisgICAgfSBlbHNlIHsKKyMgICAgICAgIHByaW50ICJVbmhhbmRsZWQgKGxpbmU6ICRsaW5lKTogJHRleHRcbiI7CisgICAgfQorfQorY2xvc2UoRik7CisKKyMgdXNlIERhdGE6OkR1bXBlcjsKKyMgcHJpbnQgIlBhcnNlZCBidWlsZCBzdHJ1Y3R1cmU6XG4iOworIyBwcmludCBEdW1wZXIoJWJ1aWxkX3N0cnVjdHVyZSk7CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGdW5jdGlvbnMgdW5kZXIgaGVyZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitteSAoJWJ1aWxkX3N0cnVjdHVyZSwgQGRlZmluZXMsIEBpbmNwYXRocywgQGNmbGFncywgQHNvdXJjZXMpOworCitzdWIgY2xlYXJDb21waWxlU3RlcAoreworICAgIEBkZWZpbmVzID0gKCk7CisgICAgQGluY3BhdGhzID0gKCk7CisgICAgQGNmbGFncyA9ICgpOworICAgIEBzb3VyY2VzID0gKCk7Cit9CisKK3N1YiByZW1vdmVEdXBsaWNhdGVzCit7CisgICAgbXkgKCVkdXBIYXNoLCAkZW50cnkpOworICAgICVkdXBIYXNoID0gbWFwIHsgJF8sIDEgfSBAZGVmaW5lczsKKyAgICBAZGVmaW5lcyA9IGtleXMgJWR1cEhhc2g7CisKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGluY3BhdGhzOworICAgIEBpbmNwYXRocyA9IGtleXMgJWR1cEhhc2g7CisKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGNmbGFnczsKKyAgICBAY2ZsYWdzID0ga2V5cyAlZHVwSGFzaDsKKworICAgICVkdXBIYXNoID0gbWFwIHsgJF8sIDEgfSBAc291cmNlczsKKyAgICBAc291cmNlcyA9IGtleXMgJWR1cEhhc2g7Cit9CisKK3N1YiBoYW5kbGVDb21waWxlTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSBAcGFydHMgPSBzcGxpdCgnICcsICRsaW5lKTsKKyAgICBzaGlmdChAcGFydHMpOyAjIGlnbm9yZSBjbWQKKyAgICB3aGlsZSAobXkgJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCIkcGFydCIgZXEgIi1vIikgeworICAgICAgICAgICAgIyBpZ25vcmUgb2JqZWN0IGZpbGUKKyAgICAgICAgICAgIHNoaWZ0IEBwYXJ0czsKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWMiKSB7CisgICAgICAgICAgICAjIGlnbm9yZSBjb21waWxlIGZsYWcKKyAgICAgICAgfSBlbHNpZiAoIiRwYXJ0IiBlcSAiLWMiKSB7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLj8tSS8pIHsKKyAgICAgICAgICAgIHB1c2goQGluY3BhdGhzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLj8tRC8pIHsKKyAgICAgICAgICAgIHB1c2goQGRlZmluZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAY2ZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihjfGNjfGNwcCkkLykgeworICAgICAgICAgICAgcHVzaChAc291cmNlcywgJHBhcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgY29tcGlsZXIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgIH0KKyAgICB9CisgICAgI3ByaW50ICJTb3VyY2VzOiBAc291cmNlc1xuQ0ZsYWdzOiBAY2ZsYWdzXG5EZWZpbmU6IEBkZWZpbmVzXG5JbmNwYXQ6IEBpbmNwYXRoc1xuIjsKKyAgICAjZXhpdCgxKTsKK30KKworc3ViIGhhbmRsZUxpYkxpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgKEBvYmpmaWxlcywgQGxmbGFncywgJGxpYm91dCwgJHBhcnQpOworICAgICMga2lsbCBjbWQgYW5kIHJtICdwcmVmaXgnCisgICAgJGxpbmUgPX4gcy9ecm0gLWYgLiogJiYgLiogcmNzIC8vOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihvfG9iaikkLykgeworICAgICAgICAgICAgcHVzaChAb2JqZmlsZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGF8bGliKSQvKSB7CisgICAgICAgICAgICAkbGlib3V0ID0gJHBhcnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBsaWIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgIH0KKyAgICB9CisgICAgI3ByaW50ICJMaWJPdXQ6ICckbGlib3V0J1xuTEZsYWdzOiBAbGZsYWdzXG5PZmlsZXM6IEBvYmpmaWxlc1xuIjsKKyAgICAjZXhpdCgxKTsKKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisgICAgcHVzaChAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlMifX0sICRsaWJvdXQpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH0ifX0gPSAoIl9ERUZJTkVTIiwgIl9JTkNMVURFUyIsICJfQ0ZMQUdTIiwgIl9TT1VSQ0VTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfT0JKRUNUUyIpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fREVGSU5FUyJ9fSA9IEBkZWZpbmVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fSU5DTFVERVMifX0gPSBAaW5jcGF0aHM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9DRkxBR1MifX0gPSBAY2ZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fU09VUkNFUyJ9fSA9IEBzb3VyY2VzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fT0JKRUNUUyJ9fSA9IEBvYmpmaWxlczsKKyAgICBjbGVhckNvbXBpbGVTdGVwKCk7Cit9CisKK3N1YiBoYW5kbGVMaW5rTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCBAbGlicywgJGFwcG91dCwgJHBhcnQpOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAorICAgIHdoaWxlICgkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoJHBhcnQgPX4gL14tW0dSSURPXS8pIHsKKyAgICAgICAgICAgICMgZWF0IGNvbXBpbGVyIGZsYWdzCisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1vIikgeworICAgICAgICAgICAgJGFwcG91dCA9IHNoaWZ0IEBwYXJ0czsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihhfGxpYikkLykgeworICAgICAgICAgICAgcHVzaChAbGlicywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4ob3xvYmopJC8pIHsKKyAgICAgICAgICAgIHB1c2goQG9iamZpbGVzLCAkcGFydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBsaWIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgIH0KKyAgICB9CisgICAgI3ByaW50ICJBcHBPdXQ6ICckYXBwb3V0J1xuTEZsYWdzOiBAbGZsYWdzXG5MaWJzICA6IEBsaWJzXG5PZmlsZXM6IEBvYmpmaWxlc1xuIjsKKyAgICAjZXhpdCgxKTsKKyAgICByZW1vdmVEdXBsaWNhdGVzKCk7CisgICAgcHVzaChAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFMifX0sICRhcHBvdXQpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH0ifX0gPSAoIl9ERUZJTkVTIiwgIl9JTkNMVURFUyIsICJfQ0ZMQUdTIiwgIl9MRkxBR1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9TT1VSQ0VTIiwgIl9PQkpFQ1RTIiwgIl9MSUJTIik7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9ERUZJTkVTIn19ID0gQGRlZmluZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9JTkNMVURFUyJ9fSA9IEBpbmNwYXRoczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9MRkxBR1MifX0gPSBAbGZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fU09VUkNFUyJ9fSA9IEBzb3VyY2VzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fT0JKRUNUUyJ9fSA9IEBvYmpmaWxlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0xJQlMifX0gPSBAbGliczsKKyAgICBjbGVhckNvbXBpbGVTdGVwKCk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvLmdpdGlnbm9yZSBiL2NvbnRyaWIvY29jY2luZWxsZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjI5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvY2NpbmVsbGUvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisqLnBhdGNoKgpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL1JFQURNRSBiL2NvbnRyaWIvY29jY2luZWxsZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlODBiZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9SRUFETUUKQEAgLTAsMCArMSw0MyBAQAorVGhpcyBkaXJlY3RvcnkgcHJvdmlkZXMgZXhhbXBsZXMgb2YgQ29jY2luZWxsZSAoaHR0cDovL2NvY2NpbmVsbGUubGlwNi5mci8pCitzZW1hbnRpYyBwYXRjaGVzIHRoYXQgbWlnaHQgYmUgdXNlZnVsIHRvIGRldmVsb3BlcnMuCisKK1RoZXJlIGFyZSB0d28gdHlwZXMgb2Ygc2VtYW50aWMgcGF0Y2hlczoKKworICogVXNpbmcgdGhlIHNlbWFudGljIHRyYW5zZm9ybWF0aW9uIHRvIGNoZWNrIGZvciBiYWQgcGF0dGVybnMgaW4gdGhlIGNvZGU7CisgICBUaGUgdGFyZ2V0ICdtYWtlIGNvY2NpY2hlY2snIGlzIGRlc2lnbmVkIHRvIGNoZWNrIGZvciB0aGVzZSBwYXR0ZXJucyBhbmQKKyAgIGl0IGlzIGV4cGVjdGVkIHRoYXQgYW55IHJlc3VsdGluZyBwYXRjaCBpbmRpY2F0ZXMgYSByZWdyZXNzaW9uLgorICAgVGhlIHBhdGNoZXMgcmVzdWx0aW5nIGZyb20gJ21ha2UgY29jY2ljaGVjaycgYXJlIHNtYWxsIGFuZCBpbmZyZXF1ZW50LAorICAgc28gb25jZSB0aGV5IGFyZSBmb3VuZCwgdGhleSBjYW4gYmUgc2VudCB0byB0aGUgbWFpbGluZyBsaXN0IGFzIHBlciB1c3VhbC4KKworICAgRXhhbXBsZSBmb3IgaW50cm9kdWNpbmcgbmV3IHBhdHRlcm5zOgorICAgNjc5NDdjMzRhZSAoY29udmVydCAiaGFzaGNtcCgpICE9IDAiIHRvICIhaGFzaGVxKCkiLCAyMDE4LTA4LTI4KQorICAgYjg0Yzc4Mzg4MiAoZnNjazogcy8rK2kgPiAxL2krKy8sIDIwMTgtMTAtMjQpCisKKyAgIEV4YW1wbGUgb2YgZml4ZXMgdXNpbmcgdGhpcyBhcHByb2FjaDoKKyAgIDI0OGY2NmVkOGUgKHJ1bi1jb21tYW5kOiB1c2Ugc3RyYnVmX2FkZHN0cigpIGZvciBhZGRpbmcgYSBzdHJpbmcgdG8KKyAgICAgICAgICAgICAgIGEgc3RyYnVmLCAyMDE4LTAzLTI1KQorICAgZjkxOWZmZWJlZCAoVXNlIE1PVkVfQVJSQVksIDIwMTgtMDEtMjIpCisKKyAgIFRoZXNlIHR5cGVzIG9mIHNlbWFudGljIHBhdGNoZXMgYXJlIHVzdWFsbHkgcGFydCBvZiB0ZXN0aW5nLCBjLmYuCisgICAwODYwYTc2NDFiICh0cmF2aXMtY2k6IGZhaWwgaWYgQ29jY2luZWxsZSBzdGF0aWMgYW5hbHlzaXMgZm91bmQgc29tZXRoaW5nCisgICAgICAgICAgICAgICB0byB0cmFuc2Zvcm0sIDIwMTgtMDctMjMpCisKKyAqIFVzaW5nIHNlbWFudGljIHRyYW5zZm9ybWF0aW9ucyBpbiBsYXJnZSBzY2FsZSByZWZhY3RvcmluZ3MgdGhyb3VnaG91dAorICAgdGhlIGNvZGUgYmFzZS4KKworICAgV2hlbiBhcHBseWluZyB0aGUgc2VtYW50aWMgcGF0Y2ggaW50byBhIHJlYWwgcGF0Y2gsIHNlbmRpbmcgaXQgdG8gdGhlCisgICBtYWlsaW5nIGxpc3QgaW4gdGhlIHVzdWFsIHdheSwgc3VjaCBhIHBhdGNoIHdvdWxkIGJlIGV4cGVjdGVkIHRvIGhhdmUgYQorICAgbG90IG9mIHRleHR1YWwgYW5kIHNlbWFudGljIGNvbmZsaWN0cyBhcyBzdWNoIGxhcmdlIHNjYWxlIHJlZmFjdG9yaW5ncworICAgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdGhhdCBhcmUgdXNlZCB3aWRlbHkgaW4gdGhlIGNvZGUgYmFzZS4KKyAgIEEgdGV4dHVhbCBjb25mbGljdCB3b3VsZCBhcmlzZSBpZiBzdXJyb3VuZGluZyBjb2RlIG5lYXIgYW55IGNhbGwgb2Ygc3VjaAorICAgZnVuY3Rpb24gY2hhbmdlcy4gQSBzZW1hbnRpYyBjb25mbGljdCBhcmlzZXMgd2hlbiBvdGhlciBwYXRjaCBzZXJpZXMgaW4KKyAgIGZsaWdodCBpbnRyb2R1Y2UgY2FsbHMgdG8gc3VjaCBmdW5jdGlvbnMuCisKKyAgIFNvIHRvIGFpZCB0aGVzZSBsYXJnZSBzY2FsZSByZWZhY3RvcmluZ3MsIHNlbWFudGljIHBhdGNoZXMgY2FuIGJlIHVzZWQuCisgICBIb3dldmVyIHdlIGRvIG5vdCB3YW50IHRvIHN0b3JlIHRoZW0gaW4gdGhlIHNhbWUgcGxhY2UgYXMgdGhlIGNoZWNrcyBmb3IKKyAgIGJhZCBwYXR0ZXJucywgYXMgdGhlbiBhdXRvbWF0ZWQgYnVpbGRzIHdvdWxkIGZhaWwuCisgICBUaGF0IGlzIHdoeSBzZW1hbnRpYyBwYXRjaGVzICdjb250cmliL2NvY2NpbmVsbGUvKi5wZW5kaW5nLmNvY2NpJworICAgYXJlIGlnbm9yZWQgZm9yIGNoZWNrcywgYW5kIGNhbiBiZSBhcHBsaWVkIHVzaW5nICdtYWtlIGNvY2NpY2hlY2stcGVuZGluZycuCisKKyAgIFRoaXMgYWxsb3dzIHRvIGV4cG9zZSBwbGFucyBvZiBwZW5kaW5nIGxhcmdlIHNjYWxlIHJlZmFjdG9yaW5ncyB3aXRob3V0CisgICBpbXBhY3RpbmcgdGhlIGJhZCBwYXR0ZXJuIGNoZWNrcy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9hcnJheS5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS9hcnJheS5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmI4ZDJlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL2FycmF5LmNvY2NpCkBAIC0wLDAgKzEsOTAgQEAKK0BACitleHByZXNzaW9uIGRzdCwgc3JjLCBuLCBFOworQEAKKyAgbWVtY3B5KGRzdCwgc3JjLCBuICogc2l6ZW9mKAorLSBFWy4uLl0KKysgKihFKQorICApKQorCitAQAordHlwZSBUOworVCAqcHRyOworVFtdIGFycjsKK2V4cHJlc3Npb24gRSwgbjsKK0BACisoCisgIG1lbWNweShwdHIsIEUsCistIG4gKiBzaXplb2YoKihwdHIpKQorKyBuICogc2l6ZW9mKFQpCisgICkKK3wKKyAgbWVtY3B5KGFyciwgRSwKKy0gbiAqIHNpemVvZigqKGFycikpCisrIG4gKiBzaXplb2YoVCkKKyAgKQorfAorICBtZW1jcHkoRSwgcHRyLAorLSBuICogc2l6ZW9mKCoocHRyKSkKKysgbiAqIHNpemVvZihUKQorICApCit8CisgIG1lbWNweShFLCBhcnIsCistIG4gKiBzaXplb2YoKihhcnIpKQorKyBuICogc2l6ZW9mKFQpCisgICkKKykKKworQEAKK3R5cGUgVDsKK1QgKmRzdF9wdHI7CitUICpzcmNfcHRyOworVFtdIGRzdF9hcnI7CitUW10gc3JjX2FycjsKK2V4cHJlc3Npb24gbjsKK0BACisoCistIG1lbWNweShkc3RfcHRyLCBzcmNfcHRyLCAobikgKiBzaXplb2YoVCkpCisrIENPUFlfQVJSQVkoZHN0X3B0ciwgc3JjX3B0ciwgbikKK3wKKy0gbWVtY3B5KGRzdF9wdHIsIHNyY19hcnIsIChuKSAqIHNpemVvZihUKSkKKysgQ09QWV9BUlJBWShkc3RfcHRyLCBzcmNfYXJyLCBuKQorfAorLSBtZW1jcHkoZHN0X2Fyciwgc3JjX3B0ciwgKG4pICogc2l6ZW9mKFQpKQorKyBDT1BZX0FSUkFZKGRzdF9hcnIsIHNyY19wdHIsIG4pCit8CistIG1lbWNweShkc3RfYXJyLCBzcmNfYXJyLCAobikgKiBzaXplb2YoVCkpCisrIENPUFlfQVJSQVkoZHN0X2Fyciwgc3JjX2FyciwgbikKKykKKworQEAKK3R5cGUgVDsKK1QgKmRzdDsKK1QgKnNyYzsKK2V4cHJlc3Npb24gbjsKK0BACisoCistIG1lbW1vdmUoZHN0LCBzcmMsIChuKSAqIHNpemVvZigqZHN0KSk7CisrIE1PVkVfQVJSQVkoZHN0LCBzcmMsIG4pOworfAorLSBtZW1tb3ZlKGRzdCwgc3JjLCAobikgKiBzaXplb2YoKnNyYykpOworKyBNT1ZFX0FSUkFZKGRzdCwgc3JjLCBuKTsKK3wKKy0gbWVtbW92ZShkc3QsIHNyYywgKG4pICogc2l6ZW9mKFQpKTsKKysgTU9WRV9BUlJBWShkc3QsIHNyYywgbik7CispCisKK0BACit0eXBlIFQ7CitUICpwdHI7CitleHByZXNzaW9uIG47CitAQAorLSBwdHIgPSB4bWFsbG9jKChuKSAqIHNpemVvZigqcHRyKSk7CisrIEFMTE9DX0FSUkFZKHB0ciwgbik7CisKK0BACit0eXBlIFQ7CitUICpwdHI7CitleHByZXNzaW9uIG47CitAQAorLSBwdHIgPSB4bWFsbG9jKChuKSAqIHNpemVvZihUKSk7CisrIEFMTE9DX0FSUkFZKHB0ciwgbik7CmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvY29tbWl0LmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL2NvbW1pdC5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzhlNDcwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL2NvbW1pdC5jb2NjaQpAQCAtMCwwICsxLDM0IEBACitAQAorZXhwcmVzc2lvbiBjOworQEAKKy0gJmMtPm1heWJlX3RyZWUtPm9iamVjdC5vaWQKKysgZ2V0X2NvbW1pdF90cmVlX29pZChjKQorCitAQAorZXhwcmVzc2lvbiBjOworQEAKKy0gYy0+bWF5YmVfdHJlZS0+b2JqZWN0Lm9pZC5oYXNoCisrIGdldF9jb21taXRfdHJlZV9vaWQoYyktPmhhc2gKKworQEAKK2lkZW50aWZpZXIgZiAhfiAiXnNldF9jb21taXRfdHJlZSQiOworZXhwcmVzc2lvbiBjOworZXhwcmVzc2lvbiBzOworQEAKKyAgZiguLi4pIHs8Li4uCistIGMtPm1heWJlX3RyZWUgPSBzCisrIHNldF9jb21taXRfdHJlZShjLCBzKQorICAuLi4+fQorCisvLyBUaGVzZSBleGNsdWRlZCBmdW5jdGlvbnMgbXVzdCBhY2Nlc3MgYy0+bWF5YmVfdHJlZSBkaXJlY3RseS4KKy8vIE5vdGUgdGhhdCBpZiBjLT5tYXliZV90cmVlIGlzIHdyaXR0ZW4gc29tZXdoZXJlIG91dHNpZGUgb2YgdGhlc2UKKy8vIGZ1bmN0aW9ucywgdGhlbiB0aGUgcmVjb21tZW5kZWQgdHJhbnNmb3JtYXRpb24gd2lsbCBiZSBib2d1cyB3aXRoCisvLyByZXBvX2dldF9jb21taXRfdHJlZSgpIG9uIHRoZSBMSFMuCitAQAoraWRlbnRpZmllciBmICF+ICJeKHJlcG9fZ2V0X2NvbW1pdF90cmVlfGdldF9jb21taXRfdHJlZV9pbl9ncmFwaF9vbmV8bG9hZF90cmVlX2Zvcl9jb21taXR8c2V0X2NvbW1pdF90cmVlKSQiOworZXhwcmVzc2lvbiBjOworQEAKKyAgZiguLi4pIHs8Li4uCistIGMtPm1heWJlX3RyZWUKKysgcmVwb19nZXRfY29tbWl0X3RyZWUoc3BlY2lmeV90aGVfcmlnaHRfcmVwb19oZXJlLCBjKQorICAuLi4+fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL2ZsZXhfYWxsb2MuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvZmxleF9hbGxvYy5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWY3ZjZkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL2ZsZXhfYWxsb2MuY29jY2kKQEAgLTAsMCArMSwxMyBAQAorQEAKK2V4cHJlc3Npb24gc3RyOworaWRlbnRpZmllciB4LCBmbGV4bmFtZTsKK0BACistIEZMRVhfQUxMT0NfTUVNKHgsIGZsZXhuYW1lLCBzdHIsIHN0cmxlbihzdHIpKTsKKysgRkxFWF9BTExPQ19TVFIoeCwgZmxleG5hbWUsIHN0cik7CisKK0BACitleHByZXNzaW9uIHN0cjsKK2lkZW50aWZpZXIgeCwgcHRybmFtZTsKK0BACistIEZMRVhQVFJfQUxMT0NfTUVNKHgsIHB0cm5hbWUsIHN0ciwgc3RybGVuKHN0cikpOworKyBGTEVYUFRSX0FMTE9DX1NUUih4LCBwdHJuYW1lLCBzdHIpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL2ZyZWUuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvZnJlZS5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDkwMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL2ZyZWUuY29jY2kKQEAgLTAsMCArMSwxOCBAQAorQEAKK2V4cHJlc3Npb24gRTsKK0BACistIGlmIChFKQorICBmcmVlKEUpOworCitAQAorZXhwcmVzc2lvbiBFOworQEAKKy0gaWYgKCFFKQorICBmcmVlKEUpOworCitAQAorZXhwcmVzc2lvbiBFOworQEAKKy0gZnJlZShFKTsKKysgRlJFRV9BTkRfTlVMTChFKTsKKy0gRSA9IE5VTEw7CmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvaGFzaG1hcC5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS9oYXNobWFwLmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWUxMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvY2NpbmVsbGUvaGFzaG1hcC5jb2NjaQpAQCAtMCwwICsxLDE2IEBACitAIGhhc2htYXBfZW50cnlfaW5pdF91c2FnZSBACitleHByZXNzaW9uIEU7CitzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBITUU7CitAQAorLSBITUUuaGFzaCA9IEU7CisrIGhhc2htYXBfZW50cnlfaW5pdCgmSE1FLCBFKTsKKworQEAKK2lkZW50aWZpZXIgZiAhfiAiXmhhc2htYXBfZW50cnlfaW5pdCQiOworZXhwcmVzc2lvbiBFOworc3RydWN0IGhhc2htYXBfZW50cnkgKkhNRVA7CitAQAorICBmKC4uLikgezwuLi4KKy0gSE1FUC0+aGFzaCA9IEU7CisrIGhhc2htYXBfZW50cnlfaW5pdChITUVQLCBFKTsKKyAgLi4uPn0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9vYmplY3RfaWQuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvb2JqZWN0X2lkLmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZjRmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvY2NpbmVsbGUvb2JqZWN0X2lkLmNvY2NpCkBAIC0wLDAgKzEsODcgQEAKK0BACitzdHJ1Y3Qgb2JqZWN0X2lkIE9JRDsKK0BACistIGlzX251bGxfc2hhMShPSUQuaGFzaCkKKysgaXNfbnVsbF9vaWQoJk9JRCkKKworQEAKK3N0cnVjdCBvYmplY3RfaWQgKk9JRFBUUjsKK0BACistIGlzX251bGxfc2hhMShPSURQVFItPmhhc2gpCisrIGlzX251bGxfb2lkKE9JRFBUUikKKworQEAKK3N0cnVjdCBvYmplY3RfaWQgT0lEOworQEAKKy0gaGFzaGNscihPSUQuaGFzaCkKKysgb2lkY2xyKCZPSUQpCisKK0BACitpZGVudGlmaWVyIGYgIT0gb2lkY2xyOworc3RydWN0IG9iamVjdF9pZCAqT0lEUFRSOworQEAKKyAgZiguLi4pIHs8Li4uCistIGhhc2hjbHIoT0lEUFRSLT5oYXNoKQorKyBvaWRjbHIoT0lEUFRSKQorICAuLi4+fQorCitAQAorc3RydWN0IG9iamVjdF9pZCBPSUQxLCBPSUQyOworQEAKKy0gaGFzaGNtcChPSUQxLmhhc2gsIE9JRDIuaGFzaCkKKysgb2lkY21wKCZPSUQxLCAmT0lEMikKKworQEAKK2lkZW50aWZpZXIgZiAhPSBvaWRjbXA7CitzdHJ1Y3Qgb2JqZWN0X2lkICpPSURQVFIxLCBPSURQVFIyOworQEAKKyAgZiguLi4pIHs8Li4uCistIGhhc2hjbXAoT0lEUFRSMS0+aGFzaCwgT0lEUFRSMi0+aGFzaCkKKysgb2lkY21wKE9JRFBUUjEsIE9JRFBUUjIpCisgIC4uLj59CisKK0BACitzdHJ1Y3Qgb2JqZWN0X2lkICpPSURQVFI7CitzdHJ1Y3Qgb2JqZWN0X2lkIE9JRDsKK0BACistIGhhc2hjbXAoT0lEUFRSLT5oYXNoLCBPSUQuaGFzaCkKKysgb2lkY21wKE9JRFBUUiwgJk9JRCkKKworQEAKK3N0cnVjdCBvYmplY3RfaWQgKk9JRFBUUjsKK3N0cnVjdCBvYmplY3RfaWQgT0lEOworQEAKKy0gaGFzaGNtcChPSUQuaGFzaCwgT0lEUFRSLT5oYXNoKQorKyBvaWRjbXAoJk9JRCwgT0lEUFRSKQorCitAQAorc3RydWN0IG9iamVjdF9pZCAqT0lEUFRSMTsKK3N0cnVjdCBvYmplY3RfaWQgKk9JRFBUUjI7CitAQAorLSBvaWRjbXAoT0lEUFRSMSwgT0lEUFRSMikgPT0gMAorKyBvaWRlcShPSURQVFIxLCBPSURQVFIyKQorCitAQAoraWRlbnRpZmllciBmICE9IGhhc2hlcTsKK2V4cHJlc3Npb24gRTEsIEUyOworQEAKKyAgZiguLi4pIHs8Li4uCistIGhhc2hjbXAoRTEsIEUyKSA9PSAwCisrIGhhc2hlcShFMSwgRTIpCisgIC4uLj59CisKK0BACitzdHJ1Y3Qgb2JqZWN0X2lkICpPSURQVFIxOworc3RydWN0IG9iamVjdF9pZCAqT0lEUFRSMjsKK0BACistIG9pZGNtcChPSURQVFIxLCBPSURQVFIyKSAhPSAwCisrICFvaWRlcShPSURQVFIxLCBPSURQVFIyKQorCitAQAoraWRlbnRpZmllciBmICE9IGhhc2hlcTsKK2V4cHJlc3Npb24gRTEsIEUyOworQEAKKyAgZiguLi4pIHs8Li4uCistIGhhc2hjbXAoRTEsIEUyKSAhPSAwCisrICFoYXNoZXEoRTEsIEUyKQorICAuLi4+fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL3ByZWluY3IuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvcHJlaW5jci5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmUxZThkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL3ByZWluY3IuY29jY2kKQEAgLTAsMCArMSw1IEBACitAIHByZWluY3JlbWVudCBACitpZGVudGlmaWVyIGk7CitAQAorLSArK2kgPiAxCisrIGkrKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL3Fzb3J0LmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL3Fzb3J0LmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjkzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvY2NpbmVsbGUvcXNvcnQuY29jY2kKQEAgLTAsMCArMSwzNyBAQAorQEAKK2V4cHJlc3Npb24gYmFzZSwgbm1lbWIsIGNvbXBhcjsKK0BACistIHFzb3J0KGJhc2UsIG5tZW1iLCBzaXplb2YoKmJhc2UpLCBjb21wYXIpOworKyBRU09SVChiYXNlLCBubWVtYiwgY29tcGFyKTsKKworQEAKK2V4cHJlc3Npb24gYmFzZSwgbm1lbWIsIGNvbXBhcjsKK0BACistIHFzb3J0KGJhc2UsIG5tZW1iLCBzaXplb2YoYmFzZVswXSksIGNvbXBhcik7CisrIFFTT1JUKGJhc2UsIG5tZW1iLCBjb21wYXIpOworCitAQAordHlwZSBUOworVCAqYmFzZTsKK2V4cHJlc3Npb24gbm1lbWIsIGNvbXBhcjsKK0BACistIHFzb3J0KGJhc2UsIG5tZW1iLCBzaXplb2YoVCksIGNvbXBhcik7CisrIFFTT1JUKGJhc2UsIG5tZW1iLCBjb21wYXIpOworCitAQAorZXhwcmVzc2lvbiBiYXNlLCBubWVtYiwgY29tcGFyOworQEAKKy0gaWYgKG5tZW1iKQorICAgIFFTT1JUKGJhc2UsIG5tZW1iLCBjb21wYXIpOworCitAQAorZXhwcmVzc2lvbiBiYXNlLCBubWVtYiwgY29tcGFyOworQEAKKy0gaWYgKG5tZW1iID4gMCkKKyAgICBRU09SVChiYXNlLCBubWVtYiwgY29tcGFyKTsKKworQEAKK2V4cHJlc3Npb24gYmFzZSwgbm1lbWIsIGNvbXBhcjsKK0BACistIGlmIChubWVtYiA+IDEpCisgICAgUVNPUlQoYmFzZSwgbm1lbWIsIGNvbXBhcik7CmRpZmYgLS1naXQgYS9jb250cmliL2NvY2NpbmVsbGUvc3RyYnVmLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL3N0cmJ1Zi5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWFkYTY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL3N0cmJ1Zi5jb2NjaQpAQCAtMCwwICsxLDYyIEBACitAIHN0cmJ1Zl9hZGRmX3dpdGhfZm9ybWF0X29ubHkgQAorZXhwcmVzc2lvbiBFOworY29uc3RhbnQgZm10ICF+ICIlIjsKK0BACistIHN0cmJ1Zl9hZGRmCisrIHN0cmJ1Zl9hZGRzdHIKKyAgKEUsCisoCisgIGZtdAorfAorICBfKGZtdCkKKykKKyAgKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK3N0cnVjdCBzdHJidWYgU0I7Citmb3JtYXQgRiA9fiAicyI7CitAQAorLSBzdHJidWZfYWRkZihFLCAiJUBGQCIsIFNCLmJ1Zik7CisrIHN0cmJ1Zl9hZGRidWYoRSwgJlNCKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK3N0cnVjdCBzdHJidWYgKlNCUDsKK2Zvcm1hdCBGID1+ICJzIjsKK0BACistIHN0cmJ1Zl9hZGRmKEUsICIlQEZAIiwgU0JQLT5idWYpOworKyBzdHJidWZfYWRkYnVmKEUsIFNCUCk7CisKK0BACitleHByZXNzaW9uIEU7CitzdHJ1Y3Qgc3RyYnVmIFNCOworQEAKKy0gc3RyYnVmX2FkZHN0cihFLCBTQi5idWYpOworKyBzdHJidWZfYWRkYnVmKEUsICZTQik7CisKK0BACitleHByZXNzaW9uIEU7CitzdHJ1Y3Qgc3RyYnVmICpTQlA7CitAQAorLSBzdHJidWZfYWRkc3RyKEUsIFNCUC0+YnVmKTsKKysgc3RyYnVmX2FkZGJ1ZihFLCBTQlApOworCitAQAorZXhwcmVzc2lvbiBFMSwgRTI7Citmb3JtYXQgRiA9fiAicyI7CitAQAorLSBzdHJidWZfYWRkZihFMSwgIiVARkAiLCBFMik7CisrIHN0cmJ1Zl9hZGRzdHIoRTEsIEUyKTsKKworQEAKK2V4cHJlc3Npb24gRTEsIEUyLCBFMzsKK0BACistIHN0cmJ1Zl9hZGRzdHIoRTEsIGZpbmRfdW5pcXVlX2FiYnJldihFMiwgRTMpKTsKKysgc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KEUxLCBFMiwgRTMpOworCitAQAorZXhwcmVzc2lvbiBFMSwgRTI7CitAQAorLSBzdHJidWZfYWRkc3RyKEUxLCByZWFsX3BhdGgoRTIpKTsKKysgc3RyYnVmX2FkZF9yZWFsX3BhdGgoRTEsIEUyKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29jY2luZWxsZS9zd2FwLmNvY2NpIGIvY29udHJpYi9jb2NjaW5lbGxlL3N3YXAuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5MzRkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS9zd2FwLmNvY2NpCkBAIC0wLDAgKzEsMjggQEAKK0Agc3dhcF93aXRoX2RlY2xhcmF0aW9uIEAKK3R5cGUgVDsKK2lkZW50aWZpZXIgdG1wOworVCBhLCBiOworQEAKKy0gVCB0bXAgPSBhOworKyBUIHRtcDsKKysgdG1wID0gYTsKKyAgYSA9IGI7CisgIGIgPSB0bXA7CisKK0Agc3dhcCBACit0eXBlIFQ7CitUIHRtcCwgYSwgYjsKK0BACistIHRtcCA9IGE7CistIGEgPSBiOworLSBiID0gdG1wOworKyBTV0FQKGEsIGIpOworCitAIGV4dGVuZHMgc3dhcCBACitpZGVudGlmaWVyIHVudXNlZDsKK0BACisgIHsKKyAgLi4uCistIFQgdW51c2VkOworICAuLi4gd2hlbiAhPSB1bnVzZWQKKyAgfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL3RoZV9yZXBvc2l0b3J5LnBlbmRpbmcuY29jY2kgYi9jb250cmliL2NvY2NpbmVsbGUvdGhlX3JlcG9zaXRvcnkucGVuZGluZy5jb2NjaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWU3MDJlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb2NjaW5lbGxlL3RoZV9yZXBvc2l0b3J5LnBlbmRpbmcuY29jY2kKQEAgLTAsMCArMSwxNDQgQEAKKy8vIFRoaXMgZmlsZSBpcyB1c2VkIGZvciB0aGUgb25nb2luZyByZWZhY3RvcmluZyBvZgorLy8gYnJpbmdpbmcgdGhlIGluZGV4IG9yIHJlcG9zaXRvcnkgc3RydWN0IGluIGFsbCBvZgorLy8gb3VyIGNvZGUgYmFzZS4KKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK2V4cHJlc3Npb24gRzsKK0BACistIHJlYWRfb2JqZWN0X2ZpbGUoCisrIHJlcG9fcmVhZF9vYmplY3RfZmlsZSh0aGVfcmVwb3NpdG9yeSwKKyAgRSwgRiwgRykKKworQEAKK2V4cHJlc3Npb24gRTsKK0BACistIGhhc19zaGExX2ZpbGUoCisrIHJlcG9faGFzX3NoYTFfZmlsZSh0aGVfcmVwb3NpdG9yeSwKKyAgRSkKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK0BACistIGhhc19zaGExX2ZpbGVfd2l0aF9mbGFncygKKysgcmVwb19oYXNfc2hhMV9maWxlX3dpdGhfZmxhZ3ModGhlX3JlcG9zaXRvcnksCisgIEUpCisKK0BACitleHByZXNzaW9uIEU7CitAQAorLSBoYXNfb2JqZWN0X2ZpbGUoCisrIHJlcG9faGFzX29iamVjdF9maWxlKHRoZV9yZXBvc2l0b3J5LAorICBFKQorCitAQAorZXhwcmVzc2lvbiBFOworZXhwcmVzc2lvbiBGOworQEAKKy0gaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3MoCisrIHJlcG9faGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3ModGhlX3JlcG9zaXRvcnksCisgIEUpCisKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIEY7CitleHByZXNzaW9uIEc7CitAQAorLSBwYXJzZV9jb21taXRfaW50ZXJuYWwoCisrIHJlcG9fcGFyc2VfY29tbWl0X2ludGVybmFsKHRoZV9yZXBvc2l0b3J5LAorICBFLCBGLCBHKQorCitAQAorZXhwcmVzc2lvbiBFOworZXhwcmVzc2lvbiBGOworQEAKKy0gcGFyc2VfY29tbWl0X2dlbnRseSgKKysgcmVwb19wYXJzZV9jb21taXRfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LAorICBFLCBGKQorCitAQAorZXhwcmVzc2lvbiBFOworQEAKKy0gcGFyc2VfY29tbWl0KAorKyByZXBvX3BhcnNlX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwKKyAgRSkKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK0BACistIGdldF9tZXJnZV9iYXNlcygKKysgcmVwb19nZXRfbWVyZ2VfYmFzZXModGhlX3JlcG9zaXRvcnksCisgIEUsIEYpOworCitAQAorZXhwcmVzc2lvbiBFOworZXhwcmVzc2lvbiBGOworZXhwcmVzc2lvbiBHOworQEAKKy0gZ2V0X21lcmdlX2Jhc2VzX21hbnkoCisrIHJlcG9fZ2V0X21lcmdlX2Jhc2VzX21hbnkodGhlX3JlcG9zaXRvcnksCisgIEUsIEYsIEcpOworCitAQAorZXhwcmVzc2lvbiBFOworZXhwcmVzc2lvbiBGOworZXhwcmVzc2lvbiBHOworQEAKKy0gZ2V0X21lcmdlX2Jhc2VzX21hbnlfZGlydHkoCisrIHJlcG9fZ2V0X21lcmdlX2Jhc2VzX21hbnlfZGlydHkodGhlX3JlcG9zaXRvcnksCisgIEUsIEYsIEcpOworCitAQAorZXhwcmVzc2lvbiBFOworZXhwcmVzc2lvbiBGOworQEAKKy0gaW5fbWVyZ2VfYmFzZXMoCisrIHJlcG9faW5fbWVyZ2VfYmFzZXModGhlX3JlcG9zaXRvcnksCisgIEUsIEYpOworCitAQAorZXhwcmVzc2lvbiBFOworZXhwcmVzc2lvbiBGOworZXhwcmVzc2lvbiBHOworQEAKKy0gaW5fbWVyZ2VfYmFzZXNfbWFueSgKKysgcmVwb19pbl9tZXJnZV9iYXNlc19tYW55KHRoZV9yZXBvc2l0b3J5LAorICBFLCBGLCBHKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK0BACistIGdldF9jb21taXRfYnVmZmVyKAorKyByZXBvX2dldF9jb21taXRfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LAorICBFLCBGKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK0BACistIHVudXNlX2NvbW1pdF9idWZmZXIoCisrIHJlcG9fdW51c2VfY29tbWl0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwKKyAgRSwgRik7CisKK0BACitleHByZXNzaW9uIEU7CitleHByZXNzaW9uIEY7CitleHByZXNzaW9uIEc7CitAQAorLSBsb2dtc2dfcmVlbmNvZGUoCisrIHJlcG9fbG9nbXNnX3JlZW5jb2RlKHRoZV9yZXBvc2l0b3J5LAorICBFLCBGLCBHKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gRjsKK2V4cHJlc3Npb24gRzsKK2V4cHJlc3Npb24gSDsKK0BACistIGZvcm1hdF9jb21taXRfbWVzc2FnZSgKKysgcmVwb19mb3JtYXRfY29tbWl0X21lc3NhZ2UodGhlX3JlcG9zaXRvcnksCisgIEUsIEYsIEcsIEgpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL3hzdHJkdXBfb3JfbnVsbC5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS94c3RyZHVwX29yX251bGwuY29jY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwNWQxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29jY2luZWxsZS94c3RyZHVwX29yX251bGwuY29jY2kKQEAgLTAsMCArMSwxMyBAQAorQEAKK2V4cHJlc3Npb24gRTsKK2V4cHJlc3Npb24gVjsKK0BACistIGlmIChFKQorLSAgICBWID0geHN0cmR1cChFKTsKKysgViA9IHhzdHJkdXBfb3JfbnVsbChFKTsKKworQEAKK2V4cHJlc3Npb24gRTsKK0BACistIHhzdHJkdXAoYWJzb2x1dGVfcGF0aChFKSkKKysgYWJzb2x1dGVfcGF0aGR1cChFKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uLy5naXRhdHRyaWJ1dGVzIGIvY29udHJpYi9jb21wbGV0aW9uLy5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MTE2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbXBsZXRpb24vLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKi5iYXNoIGVvbD1sZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjE3ODZmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTAsMCArMSwzMzgxIEBACisjIGJhc2gvenNoIGNvbXBsZXRpb24gc3VwcG9ydCBmb3IgY29yZSBHaXQuCisjCisjIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KKyMgQ29uY2VwdHVhbGx5IGJhc2VkIG9uIGdpdGNvbXBsZXRpb24gKGh0dHA6Ly9naXR3ZWIuaGF3YWdhLm9yZy51ay8pLgorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4wLgorIworIyBUaGUgY29udGFpbmVkIGNvbXBsZXRpb24gcm91dGluZXMgcHJvdmlkZSBzdXBwb3J0IGZvciBjb21wbGV0aW5nOgorIworIyAgICAqKSBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaCBuYW1lcworIyAgICAqKSBsb2NhbCBhbmQgcmVtb3RlIHRhZyBuYW1lcworIyAgICAqKSAuZ2l0L3JlbW90ZXMgZmlsZSBuYW1lcworIyAgICAqKSBnaXQgJ3N1YmNvbW1hbmRzJworIyAgICAqKSBnaXQgZW1haWwgYWxpYXNlcyBmb3IgZ2l0LXNlbmQtZW1haWwKKyMgICAgKikgdHJlZSBwYXRocyB3aXRoaW4gJ3JlZjpwYXRoL3RvL2ZpbGUnIGV4cHJlc3Npb25zCisjICAgICopIGZpbGUgcGF0aHMgd2l0aGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4CisjICAgICopIGNvbW1vbiAtLWxvbmctb3B0aW9ucworIworIyBUbyB1c2UgdGhlc2Ugcm91dGluZXM6CisjCisjICAgIDEpIENvcHkgdGhpcyBmaWxlIHRvIHNvbWV3aGVyZSAoZS5nLiB+Ly5naXQtY29tcGxldGlvbi5iYXNoKS4KKyMgICAgMikgQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIC5iYXNocmMvLnpzaHJjOgorIyAgICAgICAgc291cmNlIH4vLmdpdC1jb21wbGV0aW9uLmJhc2gKKyMgICAgMykgQ29uc2lkZXIgY2hhbmdpbmcgeW91ciBQUzEgdG8gYWxzbyBzaG93IHRoZSBjdXJyZW50IGJyYW5jaCwKKyMgICAgICAgc2VlIGdpdC1wcm9tcHQuc2ggZm9yIGRldGFpbHMuCisjCisjIElmIHlvdSB1c2UgY29tcGxleCBhbGlhc2VzIG9mIGZvcm0gJyFmKCkgeyAuLi4gfTsgZicsIHlvdSBjYW4gdXNlIHRoZSBudWxsCisjIGNvbW1hbmQgJzonIGFzIHRoZSBmaXJzdCBjb21tYW5kIGluIHRoZSBmdW5jdGlvbiBib2R5IHRvIGRlY2xhcmUgdGhlIGRlc2lyZWQKKyMgY29tcGxldGlvbiBzdHlsZS4gIEZvciBleGFtcGxlICchZigpIHsgOiBnaXQgY29tbWl0IDsgLi4uIH07IGYnIHdpbGwKKyMgdGVsbCB0aGUgY29tcGxldGlvbiB0byB1c2UgY29tbWl0IGNvbXBsZXRpb24uICBUaGlzIGFsc28gd29ya3Mgd2l0aCBhbGlhc2VzCisjIG9mIGZvcm0gIiFzaCAtYyAnLi4uJyIuICBGb3IgZXhhbXBsZSwgIiFzaCAtYyAnOiBnaXQgY29tbWl0IDsgLi4uICciLgorIworIyBDb21wYXRpYmxlIHdpdGggYmFzaCAzLjIuNTcuCisjCisjIFlvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YKKyMgdGhlIGNvbXBsZXRpb24gcm91dGluZXM6CisjCisjICAgR0lUX0NPTVBMRVRJT05fQ0hFQ0tPVVRfTk9fR1VFU1MKKyMKKyMgICAgIFdoZW4gc2V0IHRvICIxIiwgZG8gbm90IGluY2x1ZGUgIkRXSU0iIHN1Z2dlc3Rpb25zIGluIGdpdC1jaGVja291dAorIyAgICAgYW5kIGdpdC1zd2l0Y2ggY29tcGxldGlvbiAoZS5nLiwgY29tcGxldGluZyAiZm9vIiB3aGVuICJvcmlnaW4vZm9vIgorIyAgICAgZXhpc3RzKS4KKworY2FzZSAiJENPTVBfV09SREJSRUFLUyIgaW4KKyo6KikgOiBncmVhdCA7OworKikgICBDT01QX1dPUkRCUkVBS1M9IiRDT01QX1dPUkRCUkVBS1M6IgorZXNhYworCisjIERpc2NvdmVycyB0aGUgcGF0aCB0byB0aGUgZ2l0IHJlcG9zaXRvcnkgdGFraW5nIGFueSAnLS1naXQtZGlyPTxwYXRoPicgYW5kCisjICctQyA8cGF0aD4nIG9wdGlvbnMgaW50byBhY2NvdW50IGFuZCBzdG9yZXMgaXQgaW4gdGhlICRfX2dpdF9yZXBvX3BhdGgKKyMgdmFyaWFibGUuCitfX2dpdF9maW5kX3JlcG9fcGF0aCAoKQoreworCWlmIFsgLW4gIiRfX2dpdF9yZXBvX3BhdGgiIF07IHRoZW4KKwkJIyB3ZSBhbHJlYWR5IGtub3cgd2hlcmUgaXQgaXMKKwkJcmV0dXJuCisJZmkKKworCWlmIFsgLW4gIiR7X19naXRfQ19hcmdzLX0iIF07IHRoZW4KKwkJX19naXRfcmVwb19wYXRoPSIkKGdpdCAiJHtfX2dpdF9DX2FyZ3NbQF19IiBcCisJCQkke19fZ2l0X2RpcjorLS1naXQtZGlyPSIkX19naXRfZGlyIn0gXAorCQkJcmV2LXBhcnNlIC0tYWJzb2x1dGUtZ2l0LWRpciAyPi9kZXYvbnVsbCkiCisJZWxpZiBbIC1uICIke19fZ2l0X2Rpci19IiBdOyB0aGVuCisJCXRlc3QgLWQgIiRfX2dpdF9kaXIiICYmCisJCV9fZ2l0X3JlcG9fcGF0aD0iJF9fZ2l0X2RpciIKKwllbGlmIFsgLW4gIiR7R0lUX0RJUi19IiBdOyB0aGVuCisJCXRlc3QgLWQgIiR7R0lUX0RJUi19IiAmJgorCQlfX2dpdF9yZXBvX3BhdGg9IiRHSVRfRElSIgorCWVsaWYgWyAtZCAuZ2l0IF07IHRoZW4KKwkJX19naXRfcmVwb19wYXRoPS5naXQKKwllbHNlCisJCV9fZ2l0X3JlcG9fcGF0aD0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkiCisJZmkKK30KKworIyBEZXByZWNhdGVkOiB1c2UgX19naXRfZmluZF9yZXBvX3BhdGgoKSBhbmQgJF9fZ2l0X3JlcG9fcGF0aCBpbnN0ZWFkCisjIF9fZ2l0ZGlyIGFjY2VwdHMgMCBvciAxIGFyZ3VtZW50cyAoaS5lLiwgbG9jYXRpb24pCisjIHJldHVybnMgbG9jYXRpb24gb2YgLmdpdCByZXBvCitfX2dpdGRpciAoKQoreworCWlmIFsgLXogIiR7MS19IiBdOyB0aGVuCisJCV9fZ2l0X2ZpbmRfcmVwb19wYXRoIHx8IHJldHVybiAxCisJCWVjaG8gIiRfX2dpdF9yZXBvX3BhdGgiCisJZWxpZiBbIC1kICIkMS8uZ2l0IiBdOyB0aGVuCisJCWVjaG8gIiQxLy5naXQiCisJZWxzZQorCQllY2hvICIkMSIKKwlmaQorfQorCisjIFJ1bnMgZ2l0IHdpdGggYWxsIHRoZSBvcHRpb25zIGdpdmVuIGFzIGFyZ3VtZW50LCByZXNwZWN0aW5nIGFueQorIyAnLS1naXQtZGlyPTxwYXRoPicgYW5kICctQyA8cGF0aD4nIG9wdGlvbnMgcHJlc2VudCBvbiB0aGUgY29tbWFuZCBsaW5lCitfX2dpdCAoKQoreworCWdpdCAke19fZ2l0X0NfYXJnczorIiR7X19naXRfQ19hcmdzW0BdfSJ9IFwKKwkJJHtfX2dpdF9kaXI6Ky0tZ2l0LWRpcj0iJF9fZ2l0X2RpciJ9ICIkQCIgMj4vZGV2L251bGwKK30KKworIyBSZW1vdmVzIGJhY2tzbGFzaCBlc2NhcGluZywgc2luZ2xlIHF1b3RlcyBhbmQgZG91YmxlIHF1b3RlcyBmcm9tIGEgd29yZCwKKyMgc3RvcmVzIHRoZSByZXN1bHQgaW4gdGhlIHZhcmlhYmxlICRkZXF1b3RlZF93b3JkLgorIyAxOiBUaGUgd29yZCB0byBkZXF1b3RlLgorX19naXRfZGVxdW90ZSAoKQoreworCWxvY2FsIHJlc3Q9IiQxIiBsZW4gY2gKKworCWRlcXVvdGVkX3dvcmQ9IiIKKworCXdoaWxlIHRlc3QgLW4gIiRyZXN0IjsgZG8KKwkJbGVuPSR7I2RlcXVvdGVkX3dvcmR9CisJCWRlcXVvdGVkX3dvcmQ9IiRkZXF1b3RlZF93b3JkJHtyZXN0JSVbXFxcJ1wiXSp9IgorCQlyZXN0PSIke3Jlc3Q6JCgoJHsjZGVxdW90ZWRfd29yZH0tJGxlbikpfSIKKworCQljYXNlICIke3Jlc3Q6MDoxfSIgaW4KKwkJXFwpCisJCQljaD0iJHtyZXN0OjE6MX0iCisJCQljYXNlICIkY2giIGluCisJCQkkJ1xuJykKKwkJCQk7OworCQkJKikKKwkJCQlkZXF1b3RlZF93b3JkPSIkZGVxdW90ZWRfd29yZCRjaCIKKwkJCQk7OworCQkJZXNhYworCQkJcmVzdD0iJHtyZXN0OjJ9IgorCQkJOzsKKwkJXCcpCisJCQlyZXN0PSIke3Jlc3Q6MX0iCisJCQlsZW49JHsjZGVxdW90ZWRfd29yZH0KKwkJCWRlcXVvdGVkX3dvcmQ9IiRkZXF1b3RlZF93b3JkJHtyZXN0JSVcJyp9IgorCQkJcmVzdD0iJHtyZXN0OiQoKCR7I2RlcXVvdGVkX3dvcmR9LSRsZW4rMSkpfSIKKwkJCTs7CisJCVwiKQorCQkJcmVzdD0iJHtyZXN0OjF9IgorCQkJd2hpbGUgdGVzdCAtbiAiJHJlc3QiIDsgZG8KKwkJCQlsZW49JHsjZGVxdW90ZWRfd29yZH0KKwkJCQlkZXF1b3RlZF93b3JkPSIkZGVxdW90ZWRfd29yZCR7cmVzdCUlW1xcXCJdKn0iCisJCQkJcmVzdD0iJHtyZXN0OiQoKCR7I2RlcXVvdGVkX3dvcmR9LSRsZW4pKX0iCisJCQkJY2FzZSAiJHtyZXN0OjA6MX0iIGluCisJCQkJXFwpCisJCQkJCWNoPSIke3Jlc3Q6MToxfSIKKwkJCQkJY2FzZSAiJGNoIiBpbgorCQkJCQlcInxcXHxcJHxcYCkKKwkJCQkJCWRlcXVvdGVkX3dvcmQ9IiRkZXF1b3RlZF93b3JkJGNoIgorCQkJCQkJOzsKKwkJCQkJJCdcbicpCisJCQkJCQk7OworCQkJCQkqKQorCQkJCQkJZGVxdW90ZWRfd29yZD0iJGRlcXVvdGVkX3dvcmRcXCRjaCIKKwkJCQkJCTs7CisJCQkJCWVzYWMKKwkJCQkJcmVzdD0iJHtyZXN0OjJ9IgorCQkJCQk7OworCQkJCVwiKQorCQkJCQlyZXN0PSIke3Jlc3Q6MX0iCisJCQkJCWJyZWFrCisJCQkJCTs7CisJCQkJZXNhYworCQkJZG9uZQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIGNvZGUgZnJvbToKKyMKKyMgICBiYXNoX2NvbXBsZXRpb24gLSBwcm9ncmFtbWFibGUgY29tcGxldGlvbiBmdW5jdGlvbnMgZm9yIGJhc2ggMy4yKworIworIyAgIENvcHlyaWdodCDCqSAyMDA2LTIwMDgsIElhbiBNYWNkb25hbGQgPGlhbkBjYWxpYmFuLm9yZz4KKyMgICAgICAgICAgICAgwqkgMjAwOS0yMDEwLCBCYXNoIENvbXBsZXRpb24gTWFpbnRhaW5lcnMKKyMgICAgICAgICAgICAgICAgICAgICA8YmFzaC1jb21wbGV0aW9uLWRldmVsQGxpc3RzLmFsaW90aC5kZWJpYW4ub3JnPgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjICAgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc29mdHdhcmUgY2FuIGJlIG9idGFpbmVkIGhlcmU6CisjCisjICAgaHR0cDovL2Jhc2gtY29tcGxldGlvbi5hbGlvdGguZGViaWFuLm9yZy8KKyMKKyMgICBSRUxFQVNFOiAyLngKKworIyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBhIHRva2VuaXplZCBsaXN0IG9mIHdvcmRzCisjIG9uIHRoZSBjb21tYW5kIGxpbmU6CisjCisjCV9fZ2l0X3JlYXNzZW1ibGVfY29tcF93b3Jkc19ieV9yZWYgJz06JworIwlpZiB0ZXN0ICIke3dvcmRzX1tjd29yZF8tMV19IiA9IC13CisjCXRoZW4KKyMJCS4uLgorIwlmaQorIworIyBUaGUgYXJndW1lbnQgc2hvdWxkIGJlIGEgY29sbGVjdGlvbiBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YKKyMgd29yZCBjb21wbGV0aW9uIHNlcGFyYXRvcnMgKENPTVBfV09SREJSRUFLUykgdG8gdHJlYXQgYXMgb3JkaW5hcnkKKyMgY2hhcmFjdGVycy4KKyMKKyMgVGhpcyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gZ29pbmcgYmFjayBpbiB0aW1lIGFuZCBzZXR0aW5nCisjIENPTVBfV09SREJSRUFLUyB0byBleGNsdWRlIHRob3NlIGNoYXJhY3RlcnMuICBUaGUgaW50ZW50IGlzIHRvCisjIG1ha2Ugb3B0aW9uIHR5cGVzIGxpa2UgLS1kYXRlPTx0eXBlPiBhbmQgPHJldj46PHBhdGg+IGVhc3kgdG8KKyMgcmVjb2duaXplIGJ5IHRyZWF0aW5nIGVhY2ggc2hlbGwgd29yZCBhcyBhIHNpbmdsZSB0b2tlbi4KKyMKKyMgSXQgaXMgYmVzdCBub3QgdG8gc2V0IENPTVBfV09SREJSRUFLUyBkaXJlY3RseSBiZWNhdXNlIHRoZSB2YWx1ZSBpcworIyBzaGFyZWQgd2l0aCBvdGhlciBjb21wbGV0aW9uIHNjcmlwdHMuICBCeSB0aGUgdGltZSB0aGUgY29tcGxldGlvbgorIyBmdW5jdGlvbiBnZXRzIGNhbGxlZCwgQ09NUF9XT1JEUyBoYXMgYWxyZWFkeSBiZWVuIHBvcHVsYXRlZCBzbyBsb2NhbAorIyBjaGFuZ2VzIHRvIENPTVBfV09SREJSRUFLUyBoYXZlIG5vIGVmZmVjdC4KKyMKKyMgT3V0cHV0OiB3b3Jkc18sIGN3b3JkXywgY3VyXy4KKworX19naXRfcmVhc3NlbWJsZV9jb21wX3dvcmRzX2J5X3JlZigpCit7CisJbG9jYWwgZXhjbHVkZSBpIGogZmlyc3QKKwkjIFdoaWNoIHdvcmQgc2VwYXJhdG9ycyB0byBleGNsdWRlPworCWV4Y2x1ZGU9IiR7MS8vW14kQ09NUF9XT1JEQlJFQUtTXX0iCisJY3dvcmRfPSRDT01QX0NXT1JECisJaWYgWyAteiAiJGV4Y2x1ZGUiIF07IHRoZW4KKwkJd29yZHNfPSgiJHtDT01QX1dPUkRTW0BdfSIpCisJCXJldHVybgorCWZpCisJIyBMaXN0IG9mIHdvcmQgY29tcGxldGlvbiBzZXBhcmF0b3JzIGhhcyBzaHJ1bms7CisJIyByZS1hc3NlbWJsZSB3b3JkcyB0byBjb21wbGV0ZS4KKwlmb3IgKChpPTAsIGo9MDsgaSA8ICR7I0NPTVBfV09SRFNbQF19OyBpKyssIGorKykpOyBkbworCQkjIEFwcGVuZCBlYWNoIG5vbmVtcHR5IHdvcmQgY29uc2lzdGluZyBvZiBqdXN0CisJCSMgd29yZCBzZXBhcmF0b3IgY2hhcmFjdGVycyB0byB0aGUgY3VycmVudCB3b3JkLgorCQlmaXJzdD10CisJCXdoaWxlCisJCQlbICRpIC1ndCAwIF0gJiYKKwkJCVsgLW4gIiR7Q09NUF9XT1JEU1skaV19IiBdICYmCisJCQkjIHdvcmQgY29uc2lzdHMgb2YgZXhjbHVkZWQgd29yZCBzZXBhcmF0b3JzCisJCQlbICIke0NPTVBfV09SRFNbJGldLy9bXiRleGNsdWRlXX0iID0gIiR7Q09NUF9XT1JEU1skaV19IiBdCisJCWRvCisJCQkjIEF0dGFjaCB0byB0aGUgcHJldmlvdXMgdG9rZW4sCisJCQkjIHVubGVzcyB0aGUgcHJldmlvdXMgdG9rZW4gaXMgdGhlIGNvbW1hbmQgbmFtZS4KKwkJCWlmIFsgJGogLWdlIDIgXSAmJiBbIC1uICIkZmlyc3QiIF07IHRoZW4KKwkJCQkoKGotLSkpCisJCQlmaQorCQkJZmlyc3Q9CisJCQl3b3Jkc19bJGpdPSR7d29yZHNfW2pdfSR7Q09NUF9XT1JEU1tpXX0KKwkJCWlmIFsgJGkgPSAkQ09NUF9DV09SRCBdOyB0aGVuCisJCQkJY3dvcmRfPSRqCisJCQlmaQorCQkJaWYgKCgkaSA8ICR7I0NPTVBfV09SRFNbQF19IC0gMSkpOyB0aGVuCisJCQkJKChpKyspKQorCQkJZWxzZQorCQkJCSMgRG9uZS4KKwkJCQlyZXR1cm4KKwkJCWZpCisJCWRvbmUKKwkJd29yZHNfWyRqXT0ke3dvcmRzX1tqXX0ke0NPTVBfV09SRFNbaV19CisJCWlmIFsgJGkgPSAkQ09NUF9DV09SRCBdOyB0aGVuCisJCQljd29yZF89JGoKKwkJZmkKKwlkb25lCit9CisKK2lmICEgdHlwZSBfZ2V0X2NvbXBfd29yZHNfYnlfcmVmID4vZGV2L251bGwgMj4mMTsgdGhlbgorX2dldF9jb21wX3dvcmRzX2J5X3JlZiAoKQoreworCWxvY2FsIGV4Y2x1ZGUgY3VyXyB3b3Jkc18gY3dvcmRfCisJaWYgWyAiJDEiID0gIi1uIiBdOyB0aGVuCisJCWV4Y2x1ZGU9JDIKKwkJc2hpZnQgMgorCWZpCisJX19naXRfcmVhc3NlbWJsZV9jb21wX3dvcmRzX2J5X3JlZiAiJGV4Y2x1ZGUiCisJY3VyXz0ke3dvcmRzX1tjd29yZF9dfQorCXdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KKwkJY2FzZSAiJDEiIGluCisJCWN1cikKKwkJCWN1cj0kY3VyXworCQkJOzsKKwkJcHJldikKKwkJCXByZXY9JHt3b3Jkc19bJGN3b3JkXy0xXX0KKwkJCTs7CisJCXdvcmRzKQorCQkJd29yZHM9KCIke3dvcmRzX1tAXX0iKQorCQkJOzsKKwkJY3dvcmQpCisJCQljd29yZD0kY3dvcmRfCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorfQorZmkKKworIyBGaWxscyB0aGUgQ09NUFJFUExZIGFycmF5IHdpdGggcHJlZmlsdGVyZWQgd29yZHMgd2l0aG91dCBhbnkgYWRkaXRpb25hbAorIyBwcm9jZXNzaW5nLgorIyBDYWxsZXJzIG11c3QgdGFrZSBjYXJlIG9mIHByb3ZpZGluZyBvbmx5IHdvcmRzIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgd29yZAorIyB0byBiZSBjb21wbGV0ZWQgYW5kIGFkZGluZyBhbnkgcHJlZml4IGFuZC9vciBzdWZmaXggKHRyYWlsaW5nIHNwYWNlISksIGlmCisjIG5lY2Vzc2FyeS4KKyMgMTogTGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBtYXRjaGluZyBjb21wbGV0aW9uIHdvcmRzLCBjb21wbGV0ZSB3aXRoCisjICAgIHByZWZpeCBhbmQgc3VmZml4LgorX19naXRjb21wX2RpcmVjdCAoKQoreworCWxvY2FsIElGUz0kJ1xuJworCisJQ09NUFJFUExZPSgkMSkKK30KKworX19naXRjb21wYXBwZW5kICgpCit7CisJbG9jYWwgeCBpPSR7I0NPTVBSRVBMWVtAXX0KKwlmb3IgeCBpbiAkMTsgZG8KKwkJaWYgW1sgIiR4IiA9PSAiJDMiKiBdXTsgdGhlbgorCQkJQ09NUFJFUExZW2krK109IiQyJHgkNCIKKwkJZmkKKwlkb25lCit9CisKK19fZ2l0Y29tcGFkZCAoKQoreworCUNPTVBSRVBMWT0oKQorCV9fZ2l0Y29tcGFwcGVuZCAiJEAiCit9CisKKyMgR2VuZXJhdGVzIGNvbXBsZXRpb24gcmVwbHksIGFwcGVuZGluZyBhIHNwYWNlIHRvIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZHMsCisjIGlmIG5lY2Vzc2FyeS4KKyMgSXQgYWNjZXB0cyAxIHRvIDQgYXJndW1lbnRzOgorIyAxOiBMaXN0IG9mIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZHMuCisjIDI6IEEgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiB3b3JkIChvcHRpb25hbCkuCisjIDM6IEdlbmVyYXRlIHBvc3NpYmxlIGNvbXBsZXRpb24gbWF0Y2hlcyBmb3IgdGhpcyB3b3JkIChvcHRpb25hbCkuCisjIDQ6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiB3b3JkIChvcHRpb25hbCkuCitfX2dpdGNvbXAgKCkKK3sKKwlsb2NhbCBjdXJfPSIkezMtJGN1cn0iCisKKwljYXNlICIkY3VyXyIgaW4KKwktLSo9KQorCQk7OworCS0tbm8tKikKKwkJbG9jYWwgYyBpPTAgSUZTPSQnIFx0XG4nCisJCWZvciBjIGluICQxOyBkbworCQkJaWYgW1sgJGMgPT0gIi0tIiBdXTsgdGhlbgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJYz0iJGMkezQtfSIKKwkJCWlmIFtbICRjID09ICIkY3VyXyIqIF1dOyB0aGVuCisJCQkJY2FzZSAkYyBpbgorCQkJCS0tKj18Ki4pIDs7CisJCQkJKikgYz0iJGMgIiA7OworCQkJCWVzYWMKKwkJCQlDT01QUkVQTFlbaSsrXT0iJHsyLX0kYyIKKwkJCWZpCisJCWRvbmUKKwkJOzsKKwkqKQorCQlsb2NhbCBjIGk9MCBJRlM9JCcgXHRcbicKKwkJZm9yIGMgaW4gJDE7IGRvCisJCQlpZiBbWyAkYyA9PSAiLS0iIF1dOyB0aGVuCisJCQkJYz0iLS1uby0uLi4kezQtfSIKKwkJCQlpZiBbWyAkYyA9PSAiJGN1cl8iKiBdXTsgdGhlbgorCQkJCQlDT01QUkVQTFlbaSsrXT0iJHsyLX0kYyAiCisJCQkJZmkKKwkJCQlicmVhaworCQkJZmkKKwkJCWM9IiRjJHs0LX0iCisJCQlpZiBbWyAkYyA9PSAiJGN1cl8iKiBdXTsgdGhlbgorCQkJCWNhc2UgJGMgaW4KKwkJCQkqPXwqLikgOzsKKwkJCQkqKSBjPSIkYyAiIDs7CisJCQkJZXNhYworCQkJCUNPTVBSRVBMWVtpKytdPSIkezItfSRjIgorCQkJZmkKKwkJZG9uZQorCQk7OworCWVzYWMKK30KKworIyBDbGVhciB0aGUgdmFyaWFibGVzIGNhY2hpbmcgYnVpbHRpbnMnIG9wdGlvbnMgd2hlbiAocmUtKXNvdXJjaW5nCisjIHRoZSBjb21wbGV0aW9uIHNjcmlwdC4KK2lmIFtbIC1uICR7WlNIX1ZFUlNJT04tfSBdXTsgdGhlbgorCXVuc2V0ICQoc2V0IHxzZWQgLW5lICdzL15cKF9fZ2l0Y29tcF9idWlsdGluX1thLXpBLVowLTlfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJykgMj4vZGV2L251bGwKK2Vsc2UKKwl1bnNldCAkKGNvbXBnZW4gLXYgX19naXRjb21wX2J1aWx0aW5fKQorZmkKKworIyBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8KKyMKKyMgICAgX19naXRjb21wICIkKGdpdCB4eHggLS1naXQtY29tcGxldGlvbi1oZWxwZXIpIC4uLiIKKyMKKyMgZXhjZXB0IHRoYXQgdGhlIG91dHB1dCBpcyBjYWNoZWQuIEFjY2VwdCAxLTMgYXJndW1lbnRzOgorIyAxOiB0aGUgZ2l0IGNvbW1hbmQgdG8gZXhlY3V0ZSwgdGhpcyBpcyBhbHNvIHRoZSBjYWNoZSBrZXkKKyMgMjogZXh0cmEgb3B0aW9ucyB0byBiZSBhZGRlZCBvbiB0b3AgKGUuZy4gbmVnYXRpdmUgZm9ybXMpCisjIDM6IG9wdGlvbnMgdG8gYmUgZXhjbHVkZWQKK19fZ2l0Y29tcF9idWlsdGluICgpCit7CisJIyBzcGFjZXMgbXVzdCBiZSByZXBsYWNlZCB3aXRoIHVuZGVyc2NvcmUgZm9yIG11bHRpLXdvcmQKKwkjIGNvbW1hbmRzLCBlLmcuICJnaXQgcmVtb3RlIGFkZCIgYmVjb21lcyByZW1vdGVfYWRkLgorCWxvY2FsIGNtZD0iJDEiCisJbG9jYWwgaW5jbD0iJDIiCisJbG9jYWwgZXhjbD0iJDMiCisKKwlsb2NhbCB2YXI9X19naXRjb21wX2J1aWx0aW5fIiR7Y21kLy0vX30iCisJbG9jYWwgb3B0aW9ucworCWV2YWwgIm9wdGlvbnM9XCQkdmFyIgorCisJaWYgWyAteiAiJG9wdGlvbnMiIF07IHRoZW4KKwkJIyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgYXJlIHNpZ25pZmljYW50IHRvIG1ha2UKKwkJIyBvcHRpb24gcmVtb3ZhbCB3b3JrIGNvcnJlY3RseS4KKwkJb3B0aW9ucz0iICRpbmNsICQoX19naXQgJHtjbWQvXy8gfSAtLWdpdC1jb21wbGV0aW9uLWhlbHBlcikgIiB8fCByZXR1cm4KKworCQlmb3IgaSBpbiAkZXhjbDsgZG8KKwkJCW9wdGlvbnM9IiR7b3B0aW9ucy8gJGkgLyB9IgorCQlkb25lCisJCWV2YWwgIiR2YXI9XCIkb3B0aW9uc1wiIgorCWZpCisKKwlfX2dpdGNvbXAgIiRvcHRpb25zIgorfQorCisjIFZhcmlhdGlvbiBvZiBfX2dpdGNvbXBfbmwgKCkgdGhhdCBhcHBlbmRzIHRvIHRoZSBleGlzdGluZyBsaXN0IG9mCisjIGNvbXBsZXRpb24gY2FuZGlkYXRlcywgQ09NUFJFUExZLgorX19naXRjb21wX25sX2FwcGVuZCAoKQoreworCWxvY2FsIElGUz0kJ1xuJworCV9fZ2l0Y29tcGFwcGVuZCAiJDEiICIkezItfSIgIiR7My0kY3VyfSIgIiR7NC0gfSIKK30KKworIyBHZW5lcmF0ZXMgY29tcGxldGlvbiByZXBseSBmcm9tIG5ld2xpbmUtc2VwYXJhdGVkIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZHMKKyMgYnkgYXBwZW5kaW5nIGEgc3BhY2UgdG8gYWxsIG9mIHRoZW0uCisjIEl0IGFjY2VwdHMgMSB0byA0IGFyZ3VtZW50czoKKyMgMTogTGlzdCBvZiBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmRzLCBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgbmV3bGluZS4KKyMgMjogQSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmQgKG9wdGlvbmFsKS4KKyMgMzogR2VuZXJhdGUgcG9zc2libGUgY29tcGxldGlvbiBtYXRjaGVzIGZvciB0aGlzIHdvcmQgKG9wdGlvbmFsKS4KKyMgNDogQSBzdWZmaXggdG8gYmUgYXBwZW5kZWQgdG8gZWFjaCBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmQgaW5zdGVhZCBvZgorIyAgICB0aGUgZGVmYXVsdCBzcGFjZSAob3B0aW9uYWwpLiAgSWYgc3BlY2lmaWVkIGJ1dCBlbXB0eSwgbm90aGluZyBpcworIyAgICBhcHBlbmRlZC4KK19fZ2l0Y29tcF9ubCAoKQoreworCUNPTVBSRVBMWT0oKQorCV9fZ2l0Y29tcF9ubF9hcHBlbmQgIiRAIgorfQorCisjIEZpbGxzIHRoZSBDT01QUkVQTFkgYXJyYXkgd2l0aCBwcmVmaWx0ZXJlZCBwYXRocyB3aXRob3V0IGFueSBhZGRpdGlvbmFsCisjIHByb2Nlc3NpbmcuCisjIENhbGxlcnMgbXVzdCB0YWtlIGNhcmUgb2YgcHJvdmlkaW5nIG9ubHkgcGF0aHMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCBwYXRoCisjIHRvIGJlIGNvbXBsZXRlZCBhbmQgYWRkaW5nIGFueSBwcmVmaXggcGF0aCBjb21wb25lbnRzLCBpZiBuZWNlc3NhcnkuCisjIDE6IExpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgbWF0Y2hpbmcgcGF0aHMsIGNvbXBsZXRlIHdpdGggYWxsIHByZWZpeAorIyAgICBwYXRoIGNvbXBvbmVudHMuCitfX2dpdGNvbXBfZmlsZV9kaXJlY3QgKCkKK3sKKwlsb2NhbCBJRlM9JCdcbicKKworCUNPTVBSRVBMWT0oJDEpCisKKwkjIHVzZSBhIGhhY2sgdG8gZW5hYmxlIGZpbGUgbW9kZSBpbiBiYXNoIDwgNAorCWNvbXBvcHQgLW8gZmlsZW5hbWVzICtvIG5vc3BhY2UgMj4vZGV2L251bGwgfHwKKwljb21wZ2VuIC1mIC9ub24tZXhpc3RpbmctZGlyLyA+L2Rldi9udWxsIHx8CisJdHJ1ZQorfQorCisjIEdlbmVyYXRlcyBjb21wbGV0aW9uIHJlcGx5IHdpdGggY29tcGdlbiBmcm9tIG5ld2xpbmUtc2VwYXJhdGVkIHBvc3NpYmxlCisjIGNvbXBsZXRpb24gZmlsZW5hbWVzLgorIyBJdCBhY2NlcHRzIDEgdG8gMyBhcmd1bWVudHM6CisjIDE6IExpc3Qgb2YgcG9zc2libGUgY29tcGxldGlvbiBmaWxlbmFtZXMsIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBuZXdsaW5lLgorIyAyOiBBIGRpcmVjdG9yeSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCBwb3NzaWJsZSBjb21wbGV0aW9uIGZpbGVuYW1lCisjICAgIChvcHRpb25hbCkuCisjIDM6IEdlbmVyYXRlIHBvc3NpYmxlIGNvbXBsZXRpb24gbWF0Y2hlcyBmb3IgdGhpcyB3b3JkIChvcHRpb25hbCkuCitfX2dpdGNvbXBfZmlsZSAoKQoreworCWxvY2FsIElGUz0kJ1xuJworCisJIyBYWFggZG9lcyBub3Qgd29yayB3aGVuIHRoZSBkaXJlY3RvcnkgcHJlZml4IGNvbnRhaW5zIGEgdGlsZGUsCisJIyBzaW5jZSB0aWxkZSBleHBhbnNpb24gaXMgbm90IGFwcGxpZWQuCisJIyBUaGlzIG1lYW5zIHRoYXQgQ09NUFJFUExZIHdpbGwgYmUgZW1wdHkgYW5kIEJhc2ggZGVmYXVsdAorCSMgY29tcGxldGlvbiB3aWxsIGJlIHVzZWQuCisJX19naXRjb21wYWRkICIkMSIgIiR7Mi19IiAiJHszLSRjdXJ9IiAiIgorCisJIyB1c2UgYSBoYWNrIHRvIGVuYWJsZSBmaWxlIG1vZGUgaW4gYmFzaCA8IDQKKwljb21wb3B0IC1vIGZpbGVuYW1lcyArbyBub3NwYWNlIDI+L2Rldi9udWxsIHx8CisJY29tcGdlbiAtZiAvbm9uLWV4aXN0aW5nLWRpci8gPi9kZXYvbnVsbCB8fAorCXRydWUKK30KKworIyBFeGVjdXRlICdnaXQgbHMtZmlsZXMnLCB1bmxlc3MgdGhlIC0tY29tbWl0dGFibGUgb3B0aW9uIGlzIHNwZWNpZmllZCwgaW4KKyMgd2hpY2ggY2FzZSBpdCBydW5zICdnaXQgZGlmZi1pbmRleCcgdG8gZmluZCBvdXQgdGhlIGZpbGVzIHRoYXQgY2FuIGJlCisjIGNvbW1pdHRlZC4gIEl0IHJldHVybiBwYXRocyByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBpbiB0aGUgZmlyc3QKKyMgYXJndW1lbnQsIGFuZCB1c2luZyB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHNlY29uZCBhcmd1bWVudC4KK19fZ2l0X2xzX2ZpbGVzX2hlbHBlciAoKQoreworCWlmIFsgIiQyIiA9PSAiLS1jb21taXR0YWJsZSIgXTsgdGhlbgorCQlfX2dpdCAtQyAiJDEiIC1jIGNvcmUucXVvdGVQYXRoPWZhbHNlIGRpZmYtaW5kZXggXAorCQkJLS1uYW1lLW9ubHkgLS1yZWxhdGl2ZSBIRUFEIC0tICIkezMvL1xcL1xcXFx9KiIKKwllbHNlCisJCSMgTk9URTogJDIgaXMgbm90IHF1b3RlZCBpbiBvcmRlciB0byBzdXBwb3J0IG11bHRpcGxlIG9wdGlvbnMKKwkJX19naXQgLUMgIiQxIiAtYyBjb3JlLnF1b3RlUGF0aD1mYWxzZSBscy1maWxlcyBcCisJCQktLWV4Y2x1ZGUtc3RhbmRhcmQgJDIgLS0gIiR7My8vXFwvXFxcXH0qIgorCWZpCit9CisKKworIyBfX2dpdF9pbmRleF9maWxlcyBhY2NlcHRzIDEgb3IgMiBhcmd1bWVudHM6CisjIDE6IE9wdGlvbnMgdG8gcGFzcyB0byBscy1maWxlcyAocmVxdWlyZWQpLgorIyAyOiBBIGRpcmVjdG9yeSBwYXRoIChvcHRpb25hbCkuCisjICAgIElmIHByb3ZpZGVkLCBvbmx5IGZpbGVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBhcmUgbGlzdGVkLgorIyAgICBTdWIgZGlyZWN0b3JpZXMgYXJlIG5ldmVyIHJlY3Vyc2VkLiAgUGF0aCBtdXN0IGhhdmUgYSB0cmFpbGluZworIyAgICBzbGFzaC4KKyMgMzogTGlzdCBvbmx5IHBhdGhzIG1hdGNoaW5nIHRoaXMgcGF0aCBjb21wb25lbnQgKG9wdGlvbmFsKS4KK19fZ2l0X2luZGV4X2ZpbGVzICgpCit7CisJbG9jYWwgcm9vdD0iJDIiIG1hdGNoPSIkMyIKKworCV9fZ2l0X2xzX2ZpbGVzX2hlbHBlciAiJHJvb3QiICIkMSIgIiRtYXRjaCIgfAorCWF3ayAtRiAvIC12IHBmeD0iJHsyLy9cXC9cXFxcfSIgJ3sKKwkJcGF0aHNbJDFdID0gMQorCX0KKwlFTkQgeworCQlmb3IgKHAgaW4gcGF0aHMpIHsKKwkJCWlmIChzdWJzdHIocCwgMSwgMSkgIT0gIlwiIikgeworCQkJCSMgTm8gc3BlY2lhbCBjaGFyYWN0ZXJzLCBlYXN5IQorCQkJCXByaW50IHBmeCBwCisJCQkJY29udGludWUKKwkJCX0KKworCQkJIyBUaGUgcGF0aCBpcyBxdW90ZWQuCisJCQlwID0gZGVxdW90ZShwKQorCQkJaWYgKHAgPT0gIiIpCisJCQkJY29udGludWUKKworCQkJIyBFdmVuIHdoZW4gYSBkaXJlY3RvcnkgbmFtZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbgorCQkJIyBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLCBpdCB3aWxsIHN0aWxsIGJlIHF1b3RlZCBpZgorCQkJIyBhbnkgb2YgaXRzIChzdHJpcHBlZCkgdHJhaWxpbmcgcGF0aCBjb21wb25lbnRzIGRvLgorCQkJIyBCZWNhdXNlIG9mIHRoaXMgd2UgbWF5IGhhdmUgc2VlbiB0aGUgc2FtZSBkaXJlY3RvcnkKKwkJCSMgYm90aCBxdW90ZWQgYW5kIHVucXVvdGVkLgorCQkJaWYgKHAgaW4gcGF0aHMpCisJCQkJIyBXZSBoYXZlIHNlZW4gdGhlIHNhbWUgZGlyZWN0b3J5IHVucXVvdGVkLAorCQkJCSMgc2tpcCBpdC4KKwkJCQljb250aW51ZQorCQkJZWxzZQorCQkJCXByaW50IHBmeCBwCisJCX0KKwl9CisJZnVuY3Rpb24gZGVxdW90ZShwLCAgICBic19pZHgsIG91dCwgZXNjLCBlc2NfaWR4LCBkZWMpIHsKKwkJIyBTa2lwIG9wZW5pbmcgZG91YmxlIHF1b3RlLgorCQlwID0gc3Vic3RyKHAsIDIpCisKKwkJIyBJbnRlcnByZXQgYmFja3NsYXNoIGVzY2FwZSBzZXF1ZW5jZXMuCisJCXdoaWxlICgoYnNfaWR4ID0gaW5kZXgocCwgIlxcIikpICE9IDApIHsKKwkJCW91dCA9IG91dCBzdWJzdHIocCwgMSwgYnNfaWR4IC0gMSkKKwkJCWVzYyA9IHN1YnN0cihwLCBic19pZHggKyAxLCAxKQorCQkJcCA9IHN1YnN0cihwLCBic19pZHggKyAyKQorCisJCQlpZiAoKGVzY19pZHggPSBpbmRleCgiYWJ0dmZyXCJcXCIsIGVzYykpICE9IDApIHsKKwkJCQkjIEMtc3R5bGUgb25lLWNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2UuCisJCQkJb3V0ID0gb3V0IHN1YnN0cigiXGFcYlx0XHZcZlxyXCJcXCIsCisJCQkJCQkgZXNjX2lkeCwgMSkKKwkJCX0gZWxzZSBpZiAoZXNjID09ICJuIikgeworCQkJCSMgVWgtb2gsIGEgbmV3bGluZSBjaGFyYWN0ZXIuCisJCQkJIyBXZSBjYW5ub3QgcmVsaWFibHkgcHV0IGEgcGF0aG5hbWUKKwkJCQkjIGNvbnRhaW5pbmcgYSBuZXdsaW5lIGludG8gQ09NUFJFUExZLAorCQkJCSMgYW5kIHRoZSBuZXdsaW5lIHdvdWxkIGNyZWF0ZSBhIG1lc3MuCisJCQkJIyBTa2lwIHRoaXMgcGF0aC4KKwkJCQlyZXR1cm4gIiIKKwkJCX0gZWxzZSB7CisJCQkJIyBNdXN0IGJlIGEgXG5ubiBvY3RhbCB2YWx1ZSwgdGhlbi4KKwkJCQlkZWMgPSBlc2MgICAgICAgICAgICAgKiA2NCArIFwKKwkJCQkgICAgICBzdWJzdHIocCwgMSwgMSkgKiA4ICArIFwKKwkJCQkgICAgICBzdWJzdHIocCwgMiwgMSkKKwkJCQlvdXQgPSBvdXQgc3ByaW50ZigiJWMiLCBkZWMpCisJCQkJcCA9IHN1YnN0cihwLCAzKQorCQkJfQorCQl9CisJCSMgRHJvcCBjbG9zaW5nIGRvdWJsZSBxdW90ZSwgaWYgdGhlcmUgaXMgb25lLgorCQkjIChUaGVyZSBpcyBub3QgYW55IGlmIHRoaXMgaXMgYSBkaXJlY3RvcnksIGFzIGl0IHdhcworCQkjIGFscmVhZHkgc3RyaXBwZWQgd2l0aCB0aGUgdHJhaWxpbmcgcGF0aCBjb21wb25lbnRzLikKKwkJaWYgKHN1YnN0cihwLCBsZW5ndGgocCksIDEpID09ICJcIiIpCisJCQlvdXQgPSBvdXQgc3Vic3RyKHAsIDEsIGxlbmd0aChwKSAtIDEpCisJCWVsc2UKKwkJCW91dCA9IG91dCBwCisKKwkJcmV0dXJuIG91dAorCX0nCit9CisKKyMgX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSByZXF1aXJlcyAxIGFyZ3VtZW50OgorIyAxOiB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIGxzLWZpbGUKKyMKKyMgVGhlIGV4Y2VwdGlvbiBpcyAtLWNvbW1pdHRhYmxlLCB3aGljaCBmaW5kcyB0aGUgZmlsZXMgYXBwcm9wcmlhdGUgY29tbWl0LgorX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAoKQoreworCWxvY2FsIGRlcXVvdGVkX3dvcmQgcGZ4PSIiIGN1cl8KKworCV9fZ2l0X2RlcXVvdGUgIiRjdXIiCisKKwljYXNlICIkZGVxdW90ZWRfd29yZCIgaW4KKwk/Ki8qKQorCQlwZng9IiR7ZGVxdW90ZWRfd29yZCUvKn0vIgorCQljdXJfPSIke2RlcXVvdGVkX3dvcmQjIyovfSIKKwkJOzsKKwkqKQorCQljdXJfPSIkZGVxdW90ZWRfd29yZCIKKwllc2FjCisKKwlfX2dpdGNvbXBfZmlsZV9kaXJlY3QgIiQoX19naXRfaW5kZXhfZmlsZXMgIiQxIiAiJHBmeCIgIiRjdXJfIikiCit9CisKKyMgTGlzdHMgYnJhbmNoZXMgZnJvbSB0aGUgbG9jYWwgcmVwb3NpdG9yeS4KKyMgMTogQSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCBsaXN0ZWQgYnJhbmNoIChvcHRpb25hbCkuCisjIDI6IExpc3Qgb25seSBicmFuY2hlcyBtYXRjaGluZyB0aGlzIHdvcmQgKG9wdGlvbmFsOyBsaXN0IGFsbCBicmFuY2hlcyBpZgorIyAgICB1bnNldCBvciBlbXB0eSkuCisjIDM6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggbGlzdGVkIGJyYW5jaCAob3B0aW9uYWwpLgorX19naXRfaGVhZHMgKCkKK3sKKwlsb2NhbCBwZng9IiR7MS19IiBjdXJfPSIkezItfSIgc2Z4PSIkezMtfSIKKworCV9fZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJHtwZngvL1wlLyUlfSUocmVmbmFtZTpzdHJpcD0yKSRzZngiIFwKKwkJCSJyZWZzL2hlYWRzLyRjdXJfKiIgInJlZnMvaGVhZHMvJGN1cl8qLyoqIgorfQorCisjIExpc3RzIHRhZ3MgZnJvbSB0aGUgbG9jYWwgcmVwb3NpdG9yeS4KKyMgQWNjZXB0cyB0aGUgc2FtZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgYXMgX19naXRfaGVhZHMoKSBhYm92ZS4KK19fZ2l0X3RhZ3MgKCkKK3sKKwlsb2NhbCBwZng9IiR7MS19IiBjdXJfPSIkezItfSIgc2Z4PSIkezMtfSIKKworCV9fZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJHtwZngvL1wlLyUlfSUocmVmbmFtZTpzdHJpcD0yKSRzZngiIFwKKwkJCSJyZWZzL3RhZ3MvJGN1cl8qIiAicmVmcy90YWdzLyRjdXJfKi8qKiIKK30KKworIyBMaXN0cyByZWZzIGZyb20gdGhlIGxvY2FsIChieSBkZWZhdWx0KSBvciBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuCisjIEl0IGFjY2VwdHMgMCwgMSBvciAyIGFyZ3VtZW50czoKKyMgMTogVGhlIHJlbW90ZSB0byBsaXN0IHJlZnMgZnJvbSAob3B0aW9uYWw7IGlnbm9yZWQsIGlmIHNldCBidXQgZW1wdHkpLgorIyAgICBDYW4gYmUgdGhlIG5hbWUgb2YgYSBjb25maWd1cmVkIHJlbW90ZSwgYSBwYXRoLCBvciBhIFVSTC4KKyMgMjogSW4gYWRkaXRpb24gdG8gbG9jYWwgcmVmcywgbGlzdCB1bmlxdWUgYnJhbmNoZXMgZnJvbSByZWZzL3JlbW90ZXMvIGZvcgorIyAgICAnZ2l0IGNoZWNrb3V0J3MgdHJhY2tpbmcgRFdJTWVyeSAob3B0aW9uYWw7IGlnbm9yZWQsIGlmIHNldCBidXQgZW1wdHkpLgorIyAzOiBBIHByZWZpeCB0byBiZSBhZGRlZCB0byBlYWNoIGxpc3RlZCByZWYgKG9wdGlvbmFsKS4KKyMgNDogTGlzdCBvbmx5IHJlZnMgbWF0Y2hpbmcgdGhpcyB3b3JkIChvcHRpb25hbDsgbGlzdCBhbGwgcmVmcyBpZiB1bnNldCBvcgorIyAgICBlbXB0eSkuCisjIDU6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggbGlzdGVkIHJlZiAob3B0aW9uYWw7IGlnbm9yZWQsIGlmIHNldAorIyAgICBidXQgZW1wdHkpLgorIworIyBVc2UgX19naXRfY29tcGxldGVfcmVmcygpIGluc3RlYWQuCitfX2dpdF9yZWZzICgpCit7CisJbG9jYWwgaSBoYXNoIGRpciB0cmFjaz0iJHsyLX0iCisJbG9jYWwgbGlzdF9yZWZzX2Zyb209cGF0aCByZW1vdGU9IiR7MS19IgorCWxvY2FsIGZvcm1hdCByZWZzCisJbG9jYWwgcGZ4PSIkezMtfSIgY3VyXz0iJHs0LSRjdXJ9IiBzZng9IiR7NS19IgorCWxvY2FsIG1hdGNoPSIkezQtfSIKKwlsb2NhbCBmZXJfcGZ4PSIke3BmeC8vXCUvJSV9IiAjICJlc2NhcGUiIGZvci1lYWNoLXJlZiBmb3JtYXQgc3BlY2lmaWVycworCisJX19naXRfZmluZF9yZXBvX3BhdGgKKwlkaXI9IiRfX2dpdF9yZXBvX3BhdGgiCisKKwlpZiBbIC16ICIkcmVtb3RlIiBdOyB0aGVuCisJCWlmIFsgLXogIiRkaXIiIF07IHRoZW4KKwkJCXJldHVybgorCQlmaQorCWVsc2UKKwkJaWYgX19naXRfaXNfY29uZmlndXJlZF9yZW1vdGUgIiRyZW1vdGUiOyB0aGVuCisJCQkjIGNvbmZpZ3VyZWQgcmVtb3RlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhCisJCQkjIGxvY2FsIGRpcmVjdG9yeSB3aXRoIHRoZSBzYW1lIG5hbWUKKwkJCWxpc3RfcmVmc19mcm9tPXJlbW90ZQorCQllbGlmIFsgLWQgIiRyZW1vdGUvLmdpdCIgXTsgdGhlbgorCQkJZGlyPSIkcmVtb3RlLy5naXQiCisJCWVsaWYgWyAtZCAiJHJlbW90ZSIgXTsgdGhlbgorCQkJZGlyPSIkcmVtb3RlIgorCQllbHNlCisJCQlsaXN0X3JlZnNfZnJvbT11cmwKKwkJZmkKKwlmaQorCisJaWYgWyAiJGxpc3RfcmVmc19mcm9tIiA9IHBhdGggXTsgdGhlbgorCQlpZiBbWyAiJGN1cl8iID09IF4qIF1dOyB0aGVuCisJCQlwZng9IiRwZnheIgorCQkJZmVyX3BmeD0iJGZlcl9wZnheIgorCQkJY3VyXz0ke2N1cl8jXn0KKwkJCW1hdGNoPSR7bWF0Y2gjXn0KKwkJZmkKKwkJY2FzZSAiJGN1cl8iIGluCisJCXJlZnN8cmVmcy8qKQorCQkJZm9ybWF0PSJyZWZuYW1lIgorCQkJcmVmcz0oIiRtYXRjaCoiICIkbWF0Y2gqLyoqIikKKwkJCXRyYWNrPSIiCisJCQk7OworCQkqKQorCQkJZm9yIGkgaW4gSEVBRCBGRVRDSF9IRUFEIE9SSUdfSEVBRCBNRVJHRV9IRUFEIFJFQkFTRV9IRUFEOyBkbworCQkJCWNhc2UgIiRpIiBpbgorCQkJCSRtYXRjaCopCisJCQkJCWlmIFsgLWUgIiRkaXIvJGkiIF07IHRoZW4KKwkJCQkJCWVjaG8gIiRwZngkaSRzZngiCisJCQkJCWZpCisJCQkJCTs7CisJCQkJZXNhYworCQkJZG9uZQorCQkJZm9ybWF0PSJyZWZuYW1lOnN0cmlwPTIiCisJCQlyZWZzPSgicmVmcy90YWdzLyRtYXRjaCoiICJyZWZzL3RhZ3MvJG1hdGNoKi8qKiIKKwkJCQkicmVmcy9oZWFkcy8kbWF0Y2gqIiAicmVmcy9oZWFkcy8kbWF0Y2gqLyoqIgorCQkJCSJyZWZzL3JlbW90ZXMvJG1hdGNoKiIgInJlZnMvcmVtb3Rlcy8kbWF0Y2gqLyoqIikKKwkJCTs7CisJCWVzYWMKKwkJX19naXRfZGlyPSIkZGlyIiBfX2dpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiRmZXJfcGZ4JSgkZm9ybWF0KSRzZngiIFwKKwkJCSIke3JlZnNbQF19IgorCQlpZiBbIC1uICIkdHJhY2siIF07IHRoZW4KKwkJCSMgZW1wbG95IHRoZSBoZXVyaXN0aWMgdXNlZCBieSBnaXQgY2hlY2tvdXQKKwkJCSMgVHJ5IHRvIGZpbmQgYSByZW1vdGUgYnJhbmNoIHRoYXQgbWF0Y2hlcyB0aGUgY29tcGxldGlvbiB3b3JkCisJCQkjIGJ1dCBvbmx5IG91dHB1dCBpZiB0aGUgYnJhbmNoIG5hbWUgaXMgdW5pcXVlCisJCQlfX2dpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiRmZXJfcGZ4JShyZWZuYW1lOnN0cmlwPTMpJHNmeCIgXAorCQkJCS0tc29ydD0icmVmbmFtZTpzdHJpcD0zIiBcCisJCQkJInJlZnMvcmVtb3Rlcy8qLyRtYXRjaCoiICJyZWZzL3JlbW90ZXMvKi8kbWF0Y2gqLyoqIiB8IFwKKwkJCXVuaXEgLXUKKwkJZmkKKwkJcmV0dXJuCisJZmkKKwljYXNlICIkY3VyXyIgaW4KKwlyZWZzfHJlZnMvKikKKwkJX19naXQgbHMtcmVtb3RlICIkcmVtb3RlIiAiJG1hdGNoKiIgfCBcCisJCXdoaWxlIHJlYWQgLXIgaGFzaCBpOyBkbworCQkJY2FzZSAiJGkiIGluCisJCQkqXnt9KSA7OworCQkJKikgZWNobyAiJHBmeCRpJHNmeCIgOzsKKwkJCWVzYWMKKwkJZG9uZQorCQk7OworCSopCisJCWlmIFsgIiRsaXN0X3JlZnNfZnJvbSIgPSByZW1vdGUgXTsgdGhlbgorCQkJY2FzZSAiSEVBRCIgaW4KKwkJCSRtYXRjaCopCWVjaG8gIiR7cGZ4fUhFQUQkc2Z4IiA7OworCQkJZXNhYworCQkJX19naXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIkZmVyX3BmeCUocmVmbmFtZTpzdHJpcD0zKSRzZngiIFwKKwkJCQkicmVmcy9yZW1vdGVzLyRyZW1vdGUvJG1hdGNoKiIgXAorCQkJCSJyZWZzL3JlbW90ZXMvJHJlbW90ZS8kbWF0Y2gqLyoqIgorCQllbHNlCisJCQlsb2NhbCBxdWVyeV9zeW1yZWYKKwkJCWNhc2UgIkhFQUQiIGluCisJCQkkbWF0Y2gqKQlxdWVyeV9zeW1yZWY9IkhFQUQiIDs7CisJCQllc2FjCisJCQlfX2dpdCBscy1yZW1vdGUgIiRyZW1vdGUiICRxdWVyeV9zeW1yZWYgXAorCQkJCSJyZWZzL3RhZ3MvJG1hdGNoKiIgInJlZnMvaGVhZHMvJG1hdGNoKiIgXAorCQkJCSJyZWZzL3JlbW90ZXMvJG1hdGNoKiIgfAorCQkJd2hpbGUgcmVhZCAtciBoYXNoIGk7IGRvCisJCQkJY2FzZSAiJGkiIGluCisJCQkJKl57fSkJOzsKKwkJCQlyZWZzLyopCWVjaG8gIiRwZngke2kjcmVmcy8qL30kc2Z4IiA7OworCQkJCSopCWVjaG8gIiRwZngkaSRzZngiIDs7ICAjIHN5bWJvbGljIHJlZnMKKwkJCQllc2FjCisJCQlkb25lCisJCWZpCisJCTs7CisJZXNhYworfQorCisjIENvbXBsZXRlcyByZWZzLCBzaG9ydCBhbmQgbG9uZywgbG9jYWwgYW5kIHJlbW90ZSwgc3ltYm9saWMgYW5kIHBzZXVkby4KKyMKKyMgVXNhZ2U6IF9fZ2l0X2NvbXBsZXRlX3JlZnMgWzxvcHRpb24+XS4uLgorIyAtLXJlbW90ZT08cmVtb3RlPjogVGhlIHJlbW90ZSB0byBsaXN0IHJlZnMgZnJvbSwgY2FuIGJlIHRoZSBuYW1lIG9mIGEKKyMgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgcmVtb3RlLCBhIHBhdGgsIG9yIGEgVVJMLgorIyAtLXRyYWNrOiBMaXN0IHVuaXF1ZSByZW1vdGUgYnJhbmNoZXMgZm9yICdnaXQgY2hlY2tvdXQncyB0cmFja2luZyBEV0lNZXJ5LgorIyAtLXBmeD08cHJlZml4PjogQSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCByZWYuCisjIC0tY3VyPTx3b3JkPjogVGhlIGN1cnJlbnQgcmVmIHRvIGJlIGNvbXBsZXRlZC4gIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50CisjICAgICAgICAgICAgICAgd29yZCB0byBiZSBjb21wbGV0ZWQuCisjIC0tc2Z4PTxzdWZmaXg+OiBBIHN1ZmZpeCB0byBiZSBhcHBlbmRlZCB0byBlYWNoIHJlZiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisjICAgICAgICAgICAgICAgICBzcGFjZS4KK19fZ2l0X2NvbXBsZXRlX3JlZnMgKCkKK3sKKwlsb2NhbCByZW1vdGUgdHJhY2sgcGZ4IGN1cl89IiRjdXIiIHNmeD0iICIKKworCXdoaWxlIHRlc3QgJCMgIT0gMDsgZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tcmVtb3RlPSopCXJlbW90ZT0iJHsxIyMtLXJlbW90ZT19IiA7OworCQktLXRyYWNrKQl0cmFjaz0ieWVzIiA7OworCQktLXBmeD0qKQlwZng9IiR7MSMjLS1wZng9fSIgOzsKKwkJLS1jdXI9KikJY3VyXz0iJHsxIyMtLWN1cj19IiA7OworCQktLXNmeD0qKQlzZng9IiR7MSMjLS1zZng9fSIgOzsKKwkJKikJCXJldHVybiAxIDs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlfX2dpdGNvbXBfZGlyZWN0ICIkKF9fZ2l0X3JlZnMgIiRyZW1vdGUiICIkdHJhY2siICIkcGZ4IiAiJGN1cl8iICIkc2Z4IikiCit9CisKKyMgX19naXRfcmVmczIgcmVxdWlyZXMgMSBhcmd1bWVudCAodG8gcGFzcyB0byBfX2dpdF9yZWZzKQorIyBEZXByZWNhdGVkOiB1c2UgX19naXRfY29tcGxldGVfZmV0Y2hfcmVmc3BlY3MoKSBpbnN0ZWFkLgorX19naXRfcmVmczIgKCkKK3sKKwlsb2NhbCBpCisJZm9yIGkgaW4gJChfX2dpdF9yZWZzICIkMSIpOyBkbworCQllY2hvICIkaTokaSIKKwlkb25lCit9CisKKyMgQ29tcGxldGVzIHJlZnNwZWNzIGZvciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuCisjIDE6IFRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKyMgMjogQSBwcmVmaXggdG8gYmUgYWRkZWQgdG8gZWFjaCBsaXN0ZWQgcmVmc3BlYyAob3B0aW9uYWwpLgorIyAzOiBUaGUgcmVmIHRvIGJlIGNvbXBsZXRlZCBhcyBhIHJlZnNwZWMgaW5zdGVhZCBvZiB0aGUgY3VycmVudCB3b3JkIHRvIGJlCisjICAgIGNvbXBsZXRlZCAob3B0aW9uYWwpCisjIDQ6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggbGlzdGVkIHJlZnNwZWMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAorIyAgICBzcGFjZSAob3B0aW9uYWwpLgorX19naXRfY29tcGxldGVfZmV0Y2hfcmVmc3BlY3MgKCkKK3sKKwlsb2NhbCBpIHJlbW90ZT0iJDEiIHBmeD0iJHsyLX0iIGN1cl89IiR7My0kY3VyfSIgc2Z4PSIkezQtIH0iCisKKwlfX2dpdGNvbXBfZGlyZWN0ICIkKAorCQlmb3IgaSBpbiAkKF9fZ2l0X3JlZnMgIiRyZW1vdGUiICIiICIiICIkY3VyXyIpIDsgZG8KKwkJCWVjaG8gIiRwZngkaTokaSRzZngiCisJCWRvbmUKKwkJKSIKK30KKworIyBfX2dpdF9yZWZzX3JlbW90ZXMgcmVxdWlyZXMgMSBhcmd1bWVudCAodG8gcGFzcyB0byBscy1yZW1vdGUpCitfX2dpdF9yZWZzX3JlbW90ZXMgKCkKK3sKKwlsb2NhbCBpIGhhc2gKKwlfX2dpdCBscy1yZW1vdGUgIiQxIiAncmVmcy9oZWFkcy8qJyB8IFwKKwl3aGlsZSByZWFkIC1yIGhhc2ggaTsgZG8KKwkJZWNobyAiJGk6cmVmcy9yZW1vdGVzLyQxLyR7aSNyZWZzL2hlYWRzL30iCisJZG9uZQorfQorCitfX2dpdF9yZW1vdGVzICgpCit7CisJX19naXRfZmluZF9yZXBvX3BhdGgKKwl0ZXN0IC1kICIkX19naXRfcmVwb19wYXRoL3JlbW90ZXMiICYmIGxzIC0xICIkX19naXRfcmVwb19wYXRoL3JlbW90ZXMiCisJX19naXQgcmVtb3RlCit9CisKKyMgUmV0dXJucyB0cnVlIGlmICQxIG1hdGNoZXMgdGhlIG5hbWUgb2YgYSBjb25maWd1cmVkIHJlbW90ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorX19naXRfaXNfY29uZmlndXJlZF9yZW1vdGUgKCkKK3sKKwlsb2NhbCByZW1vdGUKKwlmb3IgcmVtb3RlIGluICQoX19naXRfcmVtb3Rlcyk7IGRvCisJCWlmIFsgIiRyZW1vdGUiID0gIiQxIiBdOyB0aGVuCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKwlyZXR1cm4gMQorfQorCitfX2dpdF9saXN0X21lcmdlX3N0cmF0ZWdpZXMgKCkKK3sKKwlMQU5HPUMgTENfQUxMPUMgZ2l0IG1lcmdlIC1zIGhlbHAgMj4mMSB8CisJc2VkIC1uIC1lICcvW0FhXXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiAvLC9eJC97CisJCXMvXC4kLy8KKwkJcy8uKjovLworCQlzL15bIAldKi8vCisJCXMvWyAJXSokLy8KKwkJcAorCX0nCit9CisKK19fZ2l0X21lcmdlX3N0cmF0ZWdpZXM9CisjICdnaXQgbWVyZ2UgLXMgaGVscCcgKGFuZCB0aHVzIGRldGVjdGlvbiBvZiB0aGUgbWVyZ2Ugc3RyYXRlZ3kKKyMgbGlzdCkgZmFpbHMsIHVuZm9ydHVuYXRlbHksIGlmIHJ1biBvdXRzaWRlIG9mIGFueSBnaXQgd29ya2luZworIyB0cmVlLiAgX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBpbgorIyB0aGF0IGNhc2UsIGFuZCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgcmVwZWF0ZWQgdGhlIG5leHQgdGltZSBpdAorIyBpcyBuZWVkZWQuCitfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMgKCkKK3sKKwl0ZXN0IC1uICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIgfHwKKwlfX2dpdF9tZXJnZV9zdHJhdGVnaWVzPSQoX19naXRfbGlzdF9tZXJnZV9zdHJhdGVnaWVzKQorfQorCitfX2dpdF9tZXJnZV9zdHJhdGVneV9vcHRpb25zPSJvdXJzIHRoZWlycyBzdWJ0cmVlIHN1YnRyZWU9IHBhdGllbmNlCisJaGlzdG9ncmFtIGRpZmYtYWxnb3JpdGhtPSBpZ25vcmUtc3BhY2UtY2hhbmdlIGlnbm9yZS1hbGwtc3BhY2UKKwlpZ25vcmUtc3BhY2UtYXQtZW9sIHJlbm9ybWFsaXplIG5vLXJlbm9ybWFsaXplIG5vLXJlbmFtZXMKKwlmaW5kLXJlbmFtZXMgZmluZC1yZW5hbWVzPSByZW5hbWUtdGhyZXNob2xkPSIKKworX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlICgpCit7CisJbG9jYWwgZGVxdW90ZWRfd29yZCBwZnggbHMgcmVmIGN1cl89IiRjdXIiCisJY2FzZSAiJGN1cl8iIGluCisJKi4uPyo6KikKKwkJcmV0dXJuCisJCTs7CisJPyo6KikKKwkJcmVmPSIke2N1cl8lJToqfSIKKwkJY3VyXz0iJHtjdXJfIyo6fSIKKworCQlfX2dpdF9kZXF1b3RlICIkY3VyXyIKKworCQljYXNlICIkZGVxdW90ZWRfd29yZCIgaW4KKwkJPyovKikKKwkJCXBmeD0iJHtkZXF1b3RlZF93b3JkJS8qfSIKKwkJCWN1cl89IiR7ZGVxdW90ZWRfd29yZCMjKi99IgorCQkJbHM9IiRyZWY6JHBmeCIKKwkJCXBmeD0iJHBmeC8iCisJCQk7OworCQkqKQorCQkJY3VyXz0iJGRlcXVvdGVkX3dvcmQiCisJCQlscz0iJHJlZiIKKwkJCTs7CisJCWVzYWMKKworCQljYXNlICIkQ09NUF9XT1JEQlJFQUtTIiBpbgorCQkqOiopIDogZ3JlYXQgOzsKKwkJKikgICBwZng9IiRyZWY6JHBmeCIgOzsKKwkJZXNhYworCisJCV9fZ2l0Y29tcF9maWxlICIkKF9fZ2l0IGxzLXRyZWUgIiRscyIgXAorCQkJCXwgc2VkICdzL14uKgkvLworCQkJCSAgICAgICBzLyQvLycpIiBcCisJCQkiJHBmeCIgIiRjdXJfIgorCQk7OworCSouLi4qKQorCQlwZng9IiR7Y3VyXyUuLi4qfS4uLiIKKwkJY3VyXz0iJHtjdXJfIyouLi59IgorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tcGZ4PSIkcGZ4IiAtLWN1cj0iJGN1cl8iCisJCTs7CisJKi4uKikKKwkJcGZ4PSIke2N1cl8lLi4qfS4uIgorCQljdXJfPSIke2N1cl8jKi4ufSIKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLXBmeD0iJHBmeCIgLS1jdXI9IiRjdXJfIgorCQk7OworCSopCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0X2NvbXBsZXRlX2ZpbGUgKCkKK3sKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUKK30KKworX19naXRfY29tcGxldGVfcmV2bGlzdCAoKQoreworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3RfZmlsZQorfQorCitfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYyAoKQoreworCWxvY2FsIGN1cl89IiRjdXIiIGNtZD0iJHt3b3Jkc1sxXX0iCisJbG9jYWwgaSBjPTIgcmVtb3RlPSIiIHBmeD0iIiBsaHM9MSBub19jb21wbGV0ZV9yZWZzcGVjPTAKKwlpZiBbICIkY21kIiA9ICJyZW1vdGUiIF07IHRoZW4KKwkJKChjKyspKQorCWZpCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLS1taXJyb3IpIFsgIiRjbWQiID0gInB1c2giIF0gJiYgbm9fY29tcGxldGVfcmVmc3BlYz0xIDs7CisJCS1kfC0tZGVsZXRlKSBbICIkY21kIiA9ICJwdXNoIiBdICYmIGxocz0wIDs7CisJCS0tYWxsKQorCQkJY2FzZSAiJGNtZCIgaW4KKwkJCXB1c2gpIG5vX2NvbXBsZXRlX3JlZnNwZWM9MSA7OworCQkJZmV0Y2gpCisJCQkJcmV0dXJuCisJCQkJOzsKKwkJCSopIDs7CisJCQllc2FjCisJCQk7OworCQktLW11bHRpcGxlKSBub19jb21wbGV0ZV9yZWZzcGVjPTE7IGJyZWFrIDs7CisJCS0qKSA7OworCQkqKSByZW1vdGU9IiRpIjsgYnJlYWsgOzsKKwkJZXNhYworCQkoKGMrKykpCisJZG9uZQorCWlmIFsgLXogIiRyZW1vdGUiIF07IHRoZW4KKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIgorCQlyZXR1cm4KKwlmaQorCWlmIFsgJG5vX2NvbXBsZXRlX3JlZnNwZWMgPSAxIF07IHRoZW4KKwkJcmV0dXJuCisJZmkKKwlbICIkcmVtb3RlIiA9ICIuIiBdICYmIHJlbW90ZT0KKwljYXNlICIkY3VyXyIgaW4KKwkqOiopCisJCWNhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCisJCSo6KikgOiBncmVhdCA7OworCQkqKSAgIHBmeD0iJHtjdXJfJSU6Kn06IiA7OworCQllc2FjCisJCWN1cl89IiR7Y3VyXyMqOn0iCisJCWxocz0wCisJCTs7CisJKyopCisJCXBmeD0iKyIKKwkJY3VyXz0iJHtjdXJfIyt9IgorCQk7OworCWVzYWMKKwljYXNlICIkY21kIiBpbgorCWZldGNoKQorCQlpZiBbICRsaHMgPSAxIF07IHRoZW4KKwkJCV9fZ2l0X2NvbXBsZXRlX2ZldGNoX3JlZnNwZWNzICIkcmVtb3RlIiAiJHBmeCIgIiRjdXJfIgorCQllbHNlCisJCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tcGZ4PSIkcGZ4IiAtLWN1cj0iJGN1cl8iCisJCWZpCisJCTs7CisJcHVsbHxyZW1vdGUpCisJCWlmIFsgJGxocyA9IDEgXTsgdGhlbgorCQkJX19naXRfY29tcGxldGVfcmVmcyAtLXJlbW90ZT0iJHJlbW90ZSIgLS1wZng9IiRwZngiIC0tY3VyPSIkY3VyXyIKKwkJZWxzZQorCQkJX19naXRfY29tcGxldGVfcmVmcyAtLXBmeD0iJHBmeCIgLS1jdXI9IiRjdXJfIgorCQlmaQorCQk7OworCXB1c2gpCisJCWlmIFsgJGxocyA9IDEgXTsgdGhlbgorCQkJX19naXRfY29tcGxldGVfcmVmcyAtLXBmeD0iJHBmeCIgLS1jdXI9IiRjdXJfIgorCQllbHNlCisJCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tcmVtb3RlPSIkcmVtb3RlIiAtLXBmeD0iJHBmeCIgLS1jdXI9IiRjdXJfIgorCQlmaQorCQk7OworCWVzYWMKK30KKworX19naXRfY29tcGxldGVfc3RyYXRlZ3kgKCkKK3sKKwlfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMKKwljYXNlICIkcHJldiIgaW4KKwktc3wtLXN0cmF0ZWd5KQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIgorCQlyZXR1cm4gMAorCQk7OworCS1YKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9zdHJhdGVneV9vcHRpb25zIgorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tc3RyYXRlZ3k9KikKKwkJX19naXRjb21wICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIgIiIgIiR7Y3VyIyMtLXN0cmF0ZWd5PX0iCisJCXJldHVybiAwCisJCTs7CisJLS1zdHJhdGVneS1vcHRpb249KikKKwkJX19naXRjb21wICIkX19naXRfbWVyZ2Vfc3RyYXRlZ3lfb3B0aW9ucyIgIiIgIiR7Y3VyIyMtLXN0cmF0ZWd5LW9wdGlvbj19IgorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKKwlyZXR1cm4gMQorfQorCitfX2dpdF9hbGxfY29tbWFuZHM9CitfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcyAoKQoreworCXRlc3QgLW4gIiRfX2dpdF9hbGxfY29tbWFuZHMiIHx8CisJX19naXRfYWxsX2NvbW1hbmRzPSQoX19naXQgLS1saXN0LWNtZHM9bWFpbixvdGhlcnMsYWxpYXMsbm9oZWxwZXJzKQorfQorCisjIExpc3RzIGFsbCBzZXQgY29uZmlnIHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBnaXZlbiBzZWN0aW9uIHByZWZpeCwKKyMgd2l0aCB0aGUgcHJlZml4IHJlbW92ZWQuCitfX2dpdF9nZXRfY29uZmlnX3ZhcmlhYmxlcyAoKQoreworCWxvY2FsIHNlY3Rpb249IiQxIiBpIElGUz0kJ1xuJworCWZvciBpIGluICQoX19naXQgY29uZmlnIC0tbmFtZS1vbmx5IC0tZ2V0LXJlZ2V4cCAiXiRzZWN0aW9uXC4uKiIpOyBkbworCQllY2hvICIke2kjJHNlY3Rpb24ufSIKKwlkb25lCit9CisKK19fZ2l0X3ByZXR0eV9hbGlhc2VzICgpCit7CisJX19naXRfZ2V0X2NvbmZpZ192YXJpYWJsZXMgInByZXR0eSIKK30KKworIyBfX2dpdF9hbGlhc2VkX2NvbW1hbmQgcmVxdWlyZXMgMSBhcmd1bWVudAorX19naXRfYWxpYXNlZF9jb21tYW5kICgpCit7CisJbG9jYWwgd29yZCBjbWRsaW5lPSQoX19naXQgY29uZmlnIC0tZ2V0ICJhbGlhcy4kMSIpCisJZm9yIHdvcmQgaW4gJGNtZGxpbmU7IGRvCisJCWNhc2UgIiR3b3JkIiBpbgorCQlcIWdpdGt8Z2l0aykKKwkJCWVjaG8gImdpdGsiCisJCQlyZXR1cm4KKwkJCTs7CisJCVwhKikJOiBzaGVsbCBjb21tYW5kIGFsaWFzIDs7CisJCS0qKQk6IG9wdGlvbiA7OworCQkqPSopCTogc2V0dGluZyBlbnYgOzsKKwkJZ2l0KQk6IGdpdCBpdHNlbGYgOzsKKwkJXChcKSkgICA6IHNraXAgcGFyZW5zIG9mIHNoZWxsIGZ1bmN0aW9uIGRlZmluaXRpb24gOzsKKwkJeykJOiBza2lwIHN0YXJ0IG9mIHNoZWxsIGhlbHBlciBmdW5jdGlvbiA7OworCQk6KQk6IHNraXAgbnVsbCBjb21tYW5kIDs7CisJCVwnKikJOiBza2lwIG9wZW5pbmcgcXVvdGUgYWZ0ZXIgc2ggLWMgOzsKKwkJKikKKwkJCWVjaG8gIiR3b3JkIgorCQkJcmV0dXJuCisJCWVzYWMKKwlkb25lCit9CisKKyMgQ2hlY2sgd2hldGhlciBvbmUgb2YgdGhlIGdpdmVuIHdvcmRzIGlzIHByZXNlbnQgb24gdGhlIGNvbW1hbmQgbGluZSwKKyMgYW5kIHByaW50IHRoZSBmaXJzdCB3b3JkIGZvdW5kLgorIworIyBVc2FnZTogX19naXRfZmluZF9vbl9jbWRsaW5lIFs8b3B0aW9uPl0uLi4gIjx3b3JkbGlzdD4iCisjIC0tc2hvdy1pZHg6IE9wdGlvbmFsbHkgc2hvdyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHdvcmQgaW4gdGhlICR3b3JkcyBhcnJheS4KK19fZ2l0X2ZpbmRfb25fY21kbGluZSAoKQoreworCWxvY2FsIHdvcmQgYz0xIHNob3dfaWR4CisKKwl3aGlsZSB0ZXN0ICQjIC1ndCAxOyBkbworCQljYXNlICIkMSIgaW4KKwkJLS1zaG93LWlkeCkJc2hvd19pZHg9eSA7OworCQkqKQkJcmV0dXJuIDEgOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKwlsb2NhbCB3b3JkbGlzdD0iJDEiCisKKwl3aGlsZSBbICRjIC1sdCAkY3dvcmQgXTsgZG8KKwkJZm9yIHdvcmQgaW4gJHdvcmRsaXN0OyBkbworCQkJaWYgWyAiJHdvcmQiID0gIiR7d29yZHNbY119IiBdOyB0aGVuCisJCQkJaWYgWyAtbiAiJHNob3dfaWR4IiBdOyB0aGVuCisJCQkJCWVjaG8gIiRjICR3b3JkIgorCQkJCWVsc2UKKwkJCQkJZWNobyAiJHdvcmQiCisJCQkJZmkKKwkJCQlyZXR1cm4KKwkJCWZpCisJCWRvbmUKKwkJKChjKyspKQorCWRvbmUKK30KKworIyBFY2hvIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24gc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgY29uZmlnCisjCisjICQxOiBzaG9ydCBvcHRpb24gbmFtZQorIyAkMjogbG9uZyBvcHRpb24gbmFtZSBpbmNsdWRpbmcgPQorIyAkMzogbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMKKyMgJDQ6IGNvbmZpZyBzdHJpbmcgKG9wdGlvbmFsKQorIworIyBleGFtcGxlOgorIyByZXN1bHQ9IiQoX19naXRfZ2V0X29wdGlvbl92YWx1ZSAiLWQiICItLWRvLXNvbWV0aGluZz0iIFwKKyMgICAgICJ5ZXMgbm8iICJjb3JlLmRvU29tZXRoaW5nIikiCisjCisjIHJlc3VsdCBpcyB0aGVuIGVpdGhlciBlbXB0eSAobm8gb3B0aW9uIHNldCkgb3IgInllcyIgb3IgIm5vIgorIworIyBfX2dpdF9nZXRfb3B0aW9uX3ZhbHVlIHJlcXVpcmVzIDMgYXJndW1lbnRzCitfX2dpdF9nZXRfb3B0aW9uX3ZhbHVlICgpCit7CisJbG9jYWwgYyBzaG9ydF9vcHQgbG9uZ19vcHQgdmFsCisJbG9jYWwgcmVzdWx0PSB2YWx1ZXMgY29uZmlnX2tleSB3b3JkCisKKwlzaG9ydF9vcHQ9IiQxIgorCWxvbmdfb3B0PSIkMiIKKwl2YWx1ZXM9IiQzIgorCWNvbmZpZ19rZXk9IiQ0IgorCisJKChjID0gJGN3b3JkIC0gMSkpCisJd2hpbGUgWyAkYyAtZ2UgMCBdOyBkbworCQl3b3JkPSIke3dvcmRzW2NdfSIKKwkJZm9yIHZhbCBpbiAkdmFsdWVzOyBkbworCQkJaWYgWyAiJHNob3J0X29wdCR2YWwiID0gIiR3b3JkIiBdIHx8CisJCQkgICBbICIkbG9uZ19vcHQkdmFsIiAgPSAiJHdvcmQiIF07IHRoZW4KKwkJCQlyZXN1bHQ9IiR2YWwiCisJCQkJYnJlYWsgMgorCQkJZmkKKwkJZG9uZQorCQkoKGMtLSkpCisJZG9uZQorCisJaWYgWyAtbiAiJGNvbmZpZ19rZXkiIF0gJiYgWyAteiAiJHJlc3VsdCIgXTsgdGhlbgorCQlyZXN1bHQ9IiQoX19naXQgY29uZmlnICIkY29uZmlnX2tleSIpIgorCWZpCisKKwllY2hvICIkcmVzdWx0IgorfQorCitfX2dpdF9oYXNfZG91YmxlZGFzaCAoKQoreworCWxvY2FsIGM9MQorCXdoaWxlIFsgJGMgLWx0ICRjd29yZCBdOyBkbworCQlpZiBbICItLSIgPSAiJHt3b3Jkc1tjXX0iIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisJCSgoYysrKSkKKwlkb25lCisJcmV0dXJuIDEKK30KKworIyBUcnkgdG8gY291bnQgbm9uIG9wdGlvbiBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZQorIyBzcGVjaWZpZWQgZ2l0IGNvbW1hbmQuCisjIFdoZW4gb3B0aW9ucyBhcmUgdXNlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSB0aGUgc3BlY2lhbCAtLSBvcHRpb24gdG8KKyMgdGVsbCB0aGUgaW1wbGVtZW50YXRpb24gd2VyZSBub24gb3B0aW9uIGFyZ3VtZW50cyBiZWdpbi4KKyMgWFhYIHRoaXMgY2FuIG5vdCBiZSBpbXByb3ZlZCwgc2luY2Ugb3B0aW9ucyBjYW4gYXBwZWFyIGV2ZXJ5d2hlcmUsIGFzCisjIGFuIGV4YW1wbGU6CisjCWdpdCBtdiB4IC1uIHkKKyMKKyMgX19naXRfY291bnRfYXJndW1lbnRzIHJlcXVpcmVzIDEgYXJndW1lbnQ6IHRoZSBnaXQgY29tbWFuZCBleGVjdXRlZC4KK19fZ2l0X2NvdW50X2FyZ3VtZW50cyAoKQoreworCWxvY2FsIHdvcmQgaSBjPTAKKworCSMgU2tpcCAiZ2l0IiAoZmlyc3QgYXJndW1lbnQpCisJZm9yICgoaT0xOyBpIDwgJHsjd29yZHNbQF19OyBpKyspKTsgZG8KKwkJd29yZD0iJHt3b3Jkc1tpXX0iCisKKwkJY2FzZSAiJHdvcmQiIGluCisJCQktLSkKKwkJCQkjIEdvb2Q7IHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgZm9sbG93aW5nIGFyZSBvbmx5IG5vbgorCQkJCSMgb3B0aW9uIGFyZ3VtZW50cy4KKwkJCQkoKGMgPSAwKSkKKwkJCQk7OworCQkJIiQxIikKKwkJCQkjIFNraXAgdGhlIHNwZWNpZmllZCBnaXQgY29tbWFuZCBhbmQgZGlzY2FyZCBnaXQKKwkJCQkjIG1haW4gb3B0aW9ucworCQkJCSgoYyA9IDApKQorCQkJCTs7CisJCQk/KikKKwkJCQkoKGMrKykpCisJCQkJOzsKKwkJZXNhYworCWRvbmUKKworCXByaW50ZiAiJWQiICRjCit9CisKK19fZ2l0X3doaXRlc3BhY2VsaXN0PSJub3dhcm4gd2FybiBlcnJvciBlcnJvci1hbGwgZml4IgorX19naXRfcGF0Y2hmb3JtYXQ9Im1ib3ggc3RnaXQgc3RnaXQtc2VyaWVzIGhnIG1ib3hyZCIKK19fZ2l0X3Nob3djdXJyZW50cGF0Y2g9ImRpZmYgcmF3IgorX19naXRfYW1faW5wcm9ncmVzc19vcHRpb25zPSItLXNraXAgLS1jb250aW51ZSAtLXJlc29sdmVkIC0tYWJvcnQgLS1xdWl0IC0tc2hvdy1jdXJyZW50LXBhdGNoIgorCitfZ2l0X2FtICgpCit7CisJX19naXRfZmluZF9yZXBvX3BhdGgKKwlpZiBbIC1kICIkX19naXRfcmVwb19wYXRoIi9yZWJhc2UtYXBwbHkgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRfX2dpdF9hbV9pbnByb2dyZXNzX29wdGlvbnMiCisJCXJldHVybgorCWZpCisJY2FzZSAiJGN1ciIgaW4KKwktLXdoaXRlc3BhY2U9KikKKwkJX19naXRjb21wICIkX19naXRfd2hpdGVzcGFjZWxpc3QiICIiICIke2N1ciMjLS13aGl0ZXNwYWNlPX0iCisJCXJldHVybgorCQk7OworCS0tcGF0Y2gtZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3BhdGNoZm9ybWF0IiAiIiAiJHtjdXIjIy0tcGF0Y2gtZm9ybWF0PX0iCisJCXJldHVybgorCQk7OworCS0tc2hvdy1jdXJyZW50LXBhdGNoPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3Nob3djdXJyZW50cGF0Y2giICIiICIke2N1ciMjLS1zaG93LWN1cnJlbnQtcGF0Y2g9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBhbSAiIiBcCisJCQkiJF9fZ2l0X2FtX2lucHJvZ3Jlc3Nfb3B0aW9ucyIKKwkJcmV0dXJuCisJZXNhYworfQorCitfZ2l0X2FwcGx5ICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLXdoaXRlc3BhY2U9KikKKwkJX19naXRjb21wICIkX19naXRfd2hpdGVzcGFjZWxpc3QiICIiICIke2N1ciMjLS13aGl0ZXNwYWNlPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gYXBwbHkKKwkJcmV0dXJuCisJZXNhYworfQorCitfZ2l0X2FkZCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1jaG1vZD0qKQorCQlfX2dpdGNvbXAgIit4IC14IiAiIiAiJHtjdXIjIy0tY2htb2Q9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBhZGQKKwkJcmV0dXJuCisJZXNhYworCisJbG9jYWwgY29tcGxldGVfb3B0PSItLW90aGVycyAtLW1vZGlmaWVkIC0tZGlyZWN0b3J5IC0tbm8tZW1wdHktZGlyZWN0b3J5IgorCWlmIHRlc3QgLW4gIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICItdSAtLXVwZGF0ZSIpIgorCXRoZW4KKwkJY29tcGxldGVfb3B0PSItLW1vZGlmaWVkIgorCWZpCisJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiJGNvbXBsZXRlX29wdCIKK30KKworX2dpdF9hcmNoaXZlICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLWZvcm1hdD0qKQorCQlfX2dpdGNvbXAgIiQoZ2l0IGFyY2hpdmUgLS1saXN0KSIgIiIgIiR7Y3VyIyMtLWZvcm1hdD19IgorCQlyZXR1cm4KKwkJOzsKKwktLXJlbW90ZT0qKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiICIiICIke2N1ciMjLS1yZW1vdGU9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBhcmNoaXZlICItLWZvcm1hdD0gLS1saXN0IC0tdmVyYm9zZSAtLXByZWZpeD0gLS13b3JrdHJlZS1hdHRyaWJ1dGVzIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfZmlsZQorfQorCitfZ2l0X2Jpc2VjdCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJbG9jYWwgc3ViY29tbWFuZHM9InN0YXJ0IGJhZCBnb29kIHNraXAgcmVzZXQgdmlzdWFsaXplIHJlcGxheSBsb2cgcnVuIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQlfX2dpdF9maW5kX3JlcG9fcGF0aAorCQlpZiBbIC1mICIkX19naXRfcmVwb19wYXRoIi9CSVNFQ1RfU1RBUlQgXTsgdGhlbgorCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCWVsc2UKKwkJCV9fZ2l0Y29tcCAicmVwbGF5IHN0YXJ0IgorCQlmaQorCQlyZXR1cm4KKwlmaQorCisJY2FzZSAiJHN1YmNvbW1hbmQiIGluCisJYmFkfGdvb2R8cmVzZXR8c2tpcHxzdGFydCkKKwkJX19naXRfY29tcGxldGVfcmVmcworCQk7OworCSopCisJCTs7CisJZXNhYworfQorCitfX2dpdF9yZWZfZmllbGRsaXN0PSJyZWZuYW1lIG9iamVjdHR5cGUgb2JqZWN0c2l6ZSBvYmplY3RuYW1lIHVwc3RyZWFtIHB1c2ggSEVBRCBzeW1yZWYiCisKK19naXRfYnJhbmNoICgpCit7CisJbG9jYWwgaSBjPTEgb25seV9sb2NhbF9yZWY9Im4iIGhhc19yPSJuIgorCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLWR8LS1kZWxldGV8LW18LS1tb3ZlKQlvbmx5X2xvY2FsX3JlZj0ieSIgOzsKKwkJLXJ8LS1yZW1vdGVzKQkJaGFzX3I9InkiIDs7CisJCWVzYWMKKwkJKChjKyspKQorCWRvbmUKKworCWNhc2UgIiRjdXIiIGluCisJLS1zZXQtdXBzdHJlYW0tdG89KikKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLWN1cj0iJHtjdXIjIy0tc2V0LXVwc3RyZWFtLXRvPX0iCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBicmFuY2gKKwkJOzsKKwkqKQorCQlpZiBbICRvbmx5X2xvY2FsX3JlZiA9ICJ5IiAtYSAkaGFzX3IgPSAibiIgXTsgdGhlbgorCQkJX19naXRjb21wX2RpcmVjdCAiJChfX2dpdF9oZWFkcyAiIiAiJGN1ciIgIiAiKSIKKwkJZWxzZQorCQkJX19naXRfY29tcGxldGVfcmVmcworCQlmaQorCQk7OworCWVzYWMKK30KKworX2dpdF9idW5kbGUgKCkKK3sKKwlsb2NhbCBjbWQ9IiR7d29yZHNbMl19IgorCWNhc2UgIiRjd29yZCIgaW4KKwkyKQorCQlfX2dpdGNvbXAgImNyZWF0ZSBsaXN0LWhlYWRzIHZlcmlmeSB1bmJ1bmRsZSIKKwkJOzsKKwkzKQorCQkjIGxvb2tpbmcgZm9yIGEgZmlsZQorCQk7OworCSopCisJCWNhc2UgIiRjbWQiIGluCisJCQljcmVhdGUpCisJCQkJX19naXRfY29tcGxldGVfcmV2bGlzdAorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKK30KKworX2dpdF9jaGVja291dCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLWNvbmZsaWN0PSopCisJCV9fZ2l0Y29tcCAiZGlmZjMgbWVyZ2UiICIiICIke2N1ciMjLS1jb25mbGljdD19IgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY2hlY2tvdXQKKwkJOzsKKwkqKQorCQkjIGNoZWNrIGlmIC0tdHJhY2ssIC0tbm8tdHJhY2ssIG9yIC0tbm8tZ3Vlc3Mgd2FzIHNwZWNpZmllZAorCQkjIGlmIHNvLCBkaXNhYmxlIERXSU0gbW9kZQorCQlsb2NhbCBmbGFncz0iLS10cmFjayAtLW5vLXRyYWNrIC0tbm8tZ3Vlc3MiIHRyYWNrX29wdD0iLS10cmFjayIKKwkJaWYgWyAiJEdJVF9DT01QTEVUSU9OX0NIRUNLT1VUX05PX0dVRVNTIiA9ICIxIiBdIHx8CisJCSAgIFsgLW4gIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkZmxhZ3MiKSIgXTsgdGhlbgorCQkJdHJhY2tfb3B0PScnCisJCWZpCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgJHRyYWNrX29wdAorCQk7OworCWVzYWMKK30KKworX19naXRfc2VxdWVuY2VyX2lucHJvZ3Jlc3Nfb3B0aW9ucz0iLS1jb250aW51ZSAtLXF1aXQgLS1hYm9ydCAtLXNraXAiCisKK19fZ2l0X2NoZXJyeV9waWNrX2lucHJvZ3Jlc3Nfb3B0aW9ucz0kX19naXRfc2VxdWVuY2VyX2lucHJvZ3Jlc3Nfb3B0aW9ucworCitfZ2l0X2NoZXJyeV9waWNrICgpCit7CisJX19naXRfZmluZF9yZXBvX3BhdGgKKwlpZiBbIC1mICIkX19naXRfcmVwb19wYXRoIi9DSEVSUllfUElDS19IRUFEIF07IHRoZW4KKwkJX19naXRjb21wICIkX19naXRfY2hlcnJ5X3BpY2tfaW5wcm9ncmVzc19vcHRpb25zIgorCQlyZXR1cm4KKwlmaQorCisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY2hlcnJ5LXBpY2sgIiIgXAorCQkJIiRfX2dpdF9jaGVycnlfcGlja19pbnByb2dyZXNzX29wdGlvbnMiCisJCTs7CisJKikKKwkJX19naXRfY29tcGxldGVfcmVmcworCQk7OworCWVzYWMKK30KKworX2dpdF9jbGVhbiAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBjbGVhbgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwkjIFhYWCBzaG91bGQgd2UgY2hlY2sgZm9yIC14IG9wdGlvbiA/CisJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1vdGhlcnMgLS1kaXJlY3RvcnkiCit9CisKK19naXRfY2xvbmUgKCkKK3sKKwljYXNlICIkcHJldiIgaW4KKwktY3wtLWNvbmZpZykKKwkJX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX25hbWVfYW5kX3ZhbHVlCisJCXJldHVybgorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tY29uZmlnPSopCisJCV9fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV9uYW1lX2FuZF92YWx1ZSBcCisJCQktLWN1cj0iJHtjdXIjIy0tY29uZmlnPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY2xvbmUKKwkJcmV0dXJuCisJCTs7CisJZXNhYworfQorCitfX2dpdF91bnRyYWNrZWRfZmlsZV9tb2Rlcz0iYWxsIG5vIG5vcm1hbCIKKworX2dpdF9jb21taXQgKCkKK3sKKwljYXNlICIkcHJldiIgaW4KKwktY3wtQykKKwkJX19naXRfY29tcGxldGVfcmVmcworCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwljYXNlICIkY3VyIiBpbgorCS0tY2xlYW51cD0qKQorCQlfX2dpdGNvbXAgImRlZmF1bHQgc2Npc3NvcnMgc3RyaXAgdmVyYmF0aW0gd2hpdGVzcGFjZQorCQkJIiAiIiAiJHtjdXIjIy0tY2xlYW51cD19IgorCQlyZXR1cm4KKwkJOzsKKwktLXJldXNlLW1lc3NhZ2U9KnwtLXJlZWRpdC1tZXNzYWdlPSp8XAorCS0tZml4dXA9KnwtLXNxdWFzaD0qKQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tY3VyPSIke2N1ciMqPX0iCisJCXJldHVybgorCQk7OworCS0tdW50cmFja2VkLWZpbGVzPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3VudHJhY2tlZF9maWxlX21vZGVzIiAiIiAiJHtjdXIjIy0tdW50cmFja2VkLWZpbGVzPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gY29tbWl0CisJCXJldHVybgorCWVzYWMKKworCWlmIF9fZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IEhFQUQgPi9kZXYvbnVsbDsgdGhlbgorCQlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNvbW1pdHRhYmxlIgorCWVsc2UKKwkJIyBUaGlzIGlzIHRoZSBmaXJzdCBjb21taXQKKwkJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1jYWNoZWQiCisJZmkKK30KKworX2dpdF9kZXNjcmliZSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBkZXNjcmliZQorCQlyZXR1cm4KKwllc2FjCisJX19naXRfY29tcGxldGVfcmVmcworfQorCitfX2dpdF9kaWZmX2FsZ29yaXRobXM9Im15ZXJzIG1pbmltYWwgcGF0aWVuY2UgaGlzdG9ncmFtIgorCitfX2dpdF9kaWZmX3N1Ym1vZHVsZV9mb3JtYXRzPSJkaWZmIGxvZyBzaG9ydCIKKworX19naXRfY29sb3JfbW92ZWRfb3B0cz0ibm8gZGVmYXVsdCBwbGFpbiBibG9ja3MgemVicmEgZGltbWVkLXplYnJhIgorCitfX2dpdF9jb2xvcl9tb3ZlZF93c19vcHRzPSJubyBpZ25vcmUtc3BhY2UtYXQtZW9sIGlnbm9yZS1zcGFjZS1jaGFuZ2UKKwkJCWlnbm9yZS1hbGwtc3BhY2UgYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIgorCitfX2dpdF9kaWZmX2NvbW1vbl9vcHRpb25zPSItLXN0YXQgLS1udW1zdGF0IC0tc2hvcnRzdGF0IC0tc3VtbWFyeQorCQkJLS1wYXRjaC13aXRoLXN0YXQgLS1uYW1lLW9ubHkgLS1uYW1lLXN0YXR1cyAtLWNvbG9yCisJCQktLW5vLWNvbG9yIC0tY29sb3Itd29yZHMgLS1uby1yZW5hbWVzIC0tY2hlY2sKKwkJCS0tY29sb3ItbW92ZWQgLS1jb2xvci1tb3ZlZD0gLS1uby1jb2xvci1tb3ZlZAorCQkJLS1jb2xvci1tb3ZlZC13cz0gLS1uby1jb2xvci1tb3ZlZC13cworCQkJLS1mdWxsLWluZGV4IC0tYmluYXJ5IC0tYWJicmV2IC0tZGlmZi1maWx0ZXI9CisJCQktLWZpbmQtY29waWVzLWhhcmRlciAtLWlnbm9yZS1jci1hdC1lb2wKKwkJCS0tdGV4dCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgLS1pZ25vcmUtc3BhY2UtY2hhbmdlCisJCQktLWlnbm9yZS1hbGwtc3BhY2UgLS1pZ25vcmUtYmxhbmstbGluZXMgLS1leGl0LWNvZGUKKwkJCS0tcXVpZXQgLS1leHQtZGlmZiAtLW5vLWV4dC1kaWZmCisJCQktLW5vLXByZWZpeCAtLXNyYy1wcmVmaXg9IC0tZHN0LXByZWZpeD0KKwkJCS0taW50ZXItaHVuay1jb250ZXh0PQorCQkJLS1wYXRpZW5jZSAtLWhpc3RvZ3JhbSAtLW1pbmltYWwKKwkJCS0tcmF3IC0td29yZC1kaWZmIC0td29yZC1kaWZmLXJlZ2V4PQorCQkJLS1kaXJzdGF0IC0tZGlyc3RhdD0gLS1kaXJzdGF0LWJ5LWZpbGUKKwkJCS0tZGlyc3RhdC1ieS1maWxlPSAtLWN1bXVsYXRpdmUKKwkJCS0tZGlmZi1hbGdvcml0aG09CisJCQktLXN1Ym1vZHVsZSAtLXN1Ym1vZHVsZT0gLS1pZ25vcmUtc3VibW9kdWxlcworCQkJLS1pbmRlbnQtaGV1cmlzdGljIC0tbm8taW5kZW50LWhldXJpc3RpYworCQkJLS10ZXh0Y29udiAtLW5vLXRleHRjb252CisiCisKK19naXRfZGlmZiAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLWRpZmYtYWxnb3JpdGhtPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfYWxnb3JpdGhtcyIgIiIgIiR7Y3VyIyMtLWRpZmYtYWxnb3JpdGhtPX0iCisJCXJldHVybgorCQk7OworCS0tc3VibW9kdWxlPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfc3VibW9kdWxlX2Zvcm1hdHMiICIiICIke2N1ciMjLS1zdWJtb2R1bGU9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1jb2xvci1tb3ZlZD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9jb2xvcl9tb3ZlZF9vcHRzIiAiIiAiJHtjdXIjIy0tY29sb3ItbW92ZWQ9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1jb2xvci1tb3ZlZC13cz0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9jb2xvcl9tb3ZlZF93c19vcHRzIiAiIiAiJHtjdXIjIy0tY29sb3ItbW92ZWQtd3M9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIi0tY2FjaGVkIC0tc3RhZ2VkIC0tcGlja2F4ZS1hbGwgLS1waWNrYXhlLXJlZ2V4CisJCQktLWJhc2UgLS1vdXJzIC0tdGhlaXJzIC0tbm8taW5kZXgKKwkJCSRfX2dpdF9kaWZmX2NvbW1vbl9vcHRpb25zCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUKK30KKworX19naXRfbWVyZ2V0b29sc19jb21tb249ImRpZmZ1c2UgZGlmZm1lcmdlIGVjbWVyZ2UgZW1lcmdlIGtkaWZmMyBtZWxkIG9wZW5kaWZmCisJCQl0a2RpZmYgdmltZGlmZiBndmltZGlmZiB4eGRpZmYgYXJheGlzIHA0bWVyZ2UgYmMKKwkJCWNvZGVjb21wYXJlIHNtZXJnZQorIgorCitfZ2l0X2RpZmZ0b29sICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tdG9vbD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZXRvb2xzX2NvbW1vbiBrb21wYXJlIiAiIiAiJHtjdXIjIy0tdG9vbD19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIGRpZmZ0b29sICIkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJCQktLWJhc2UgLS1jYWNoZWQgLS1vdXJzIC0tdGhlaXJzCisJCQkJCS0tcGlja2F4ZS1hbGwgLS1waWNrYXhlLXJlZ2V4CisJCQkJCS0tcmVsYXRpdmUgLS1zdGFnZWQKKwkJCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlCit9CisKK19fZ2l0X2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcz0ieWVzIG9uLWRlbWFuZCBubyIKKworX2dpdF9mZXRjaCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1yZWN1cnNlLXN1Ym1vZHVsZXM9KikKKwkJX19naXRjb21wICIkX19naXRfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzIiAiIiAiJHtjdXIjIy0tcmVjdXJzZS1zdWJtb2R1bGVzPX0iCisJCXJldHVybgorCQk7OworCS0tZmlsdGVyPSopCisJCV9fZ2l0Y29tcCAiYmxvYjpub25lIGJsb2I6bGltaXQ9IHNwYXJzZTpvaWQ9IiAiIiAiJHtjdXIjIy0tZmlsdGVyPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gZmV0Y2gKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjCit9CisKK19fZ2l0X2Zvcm1hdF9wYXRjaF9leHRyYV9vcHRpb25zPSIKKwktLWZ1bGwtaW5kZXggLS1ub3QgLS1hbGwgLS1uby1wcmVmaXggLS1zcmMtcHJlZml4PQorCS0tZHN0LXByZWZpeD0gLS1ub3RlcworIgorCitfZ2l0X2Zvcm1hdF9wYXRjaCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS10aHJlYWQ9KikKKwkJX19naXRjb21wICIKKwkJCWRlZXAgc2hhbGxvdworCQkJIiAiIiAiJHtjdXIjIy0tdGhyZWFkPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gZm9ybWF0LXBhdGNoICIkX19naXRfZm9ybWF0X3BhdGNoX2V4dHJhX29wdGlvbnMiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfZnNjayAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBmc2NrCisJCXJldHVybgorCQk7OworCWVzYWMKK30KKworX2dpdF9naXRrICgpCit7CisJX2dpdGsKK30KKworIyBMaXN0cyBtYXRjaGluZyBzeW1ib2wgbmFtZXMgZnJvbSBhIHRhZyAoYXMgaW4gY3RhZ3MpIGZpbGUuCisjIDE6IExpc3Qgc3ltYm9sIG5hbWVzIG1hdGNoaW5nIHRoaXMgd29yZC4KKyMgMjogVGhlIHRhZyBmaWxlIHRvIGxpc3Qgc3ltYm9sIG5hbWVzIGZyb20uCisjIDM6IEEgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggbGlzdGVkIHN5bWJvbCBuYW1lIChvcHRpb25hbCkuCisjIDQ6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggbGlzdGVkIHN5bWJvbCBuYW1lIChvcHRpb25hbCkuCitfX2dpdF9tYXRjaF9jdGFnICgpIHsKKwlhd2sgLXYgcGZ4PSIkezMtfSIgLXYgc2Z4PSIkezQtfSIgIgorCQkvXiR7MS8vXC8vXFwvfS8geyBwcmludCBwZnggXCQxIHNmeCB9CisJCSIgIiQyIgorfQorCisjIENvbXBsZXRlIHN5bWJvbCBuYW1lcyBmcm9tIGEgdGFnIGZpbGUuCisjIFVzYWdlOiBfX2dpdF9jb21wbGV0ZV9zeW1ib2wgWzxvcHRpb24+XS4uLgorIyAtLXRhZ3M9PGZpbGU+OiBUaGUgdGFnIGZpbGUgdG8gbGlzdCBzeW1ib2wgbmFtZXMgZnJvbSBpbnN0ZWFkIG9mIHRoZQorIyAgICAgICAgICAgICAgICBkZWZhdWx0ICJ0YWdzIi4KKyMgLS1wZng9PHByZWZpeD46IEEgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggc3ltYm9sIG5hbWUuCisjIC0tY3VyPTx3b3JkPjogVGhlIGN1cnJlbnQgc3ltYm9sIG5hbWUgdG8gYmUgY29tcGxldGVkLiAgRGVmYXVsdHMgdG8KKyMgICAgICAgICAgICAgICB0aGUgY3VycmVudCB3b3JkIHRvIGJlIGNvbXBsZXRlZC4KKyMgLS1zZng9PHN1ZmZpeD46IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggc3ltYm9sIG5hbWUgaW5zdGVhZAorIyAgICAgICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgc3BhY2UuCitfX2dpdF9jb21wbGV0ZV9zeW1ib2wgKCkgeworCWxvY2FsIHRhZ3M9dGFncyBwZng9IiIgY3VyXz0iJHtjdXItfSIgc2Z4PSIgIgorCisJd2hpbGUgdGVzdCAkIyAhPSAwOyBkbworCQljYXNlICIkMSIgaW4KKwkJLS10YWdzPSopCXRhZ3M9IiR7MSMjLS10YWdzPX0iIDs7CisJCS0tcGZ4PSopCXBmeD0iJHsxIyMtLXBmeD19IiA7OworCQktLWN1cj0qKQljdXJfPSIkezEjIy0tY3VyPX0iIDs7CisJCS0tc2Z4PSopCXNmeD0iJHsxIyMtLXNmeD19IiA7OworCQkqKQkJcmV0dXJuIDEgOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmIHRlc3QgLXIgIiR0YWdzIjsgdGhlbgorCQlfX2dpdGNvbXBfZGlyZWN0ICIkKF9fZ2l0X21hdGNoX2N0YWcgIiRjdXJfIiAiJHRhZ3MiICIkcGZ4IiAiJHNmeCIpIgorCWZpCit9CisKK19naXRfZ3JlcCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIGdyZXAKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJY2FzZSAiJGN3b3JkLCRwcmV2IiBpbgorCTIsKnwqLC0qKQorCQlfX2dpdF9jb21wbGV0ZV9zeW1ib2wgJiYgcmV0dXJuCisJCTs7CisJZXNhYworCisJX19naXRfY29tcGxldGVfcmVmcworfQorCitfZ2l0X2hlbHAgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gaGVscAorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJaWYgdGVzdCAtbiAiJEdJVF9URVNUSU5HX0FMTF9DT01NQU5EX0xJU1QiCisJdGhlbgorCQlfX2dpdGNvbXAgIiRHSVRfVEVTVElOR19BTExfQ09NTUFORF9MSVNUICQoX19naXQgLS1saXN0LWNtZHM9YWxpYXMsbGlzdC1ndWlkZSkgZ2l0ayIKKwllbHNlCisJCV9fZ2l0Y29tcCAiJChfX2dpdCAtLWxpc3QtY21kcz1tYWluLG5vaGVscGVycyxhbGlhcyxsaXN0LWd1aWRlKSBnaXRrIgorCWZpCit9CisKK19naXRfaW5pdCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1zaGFyZWQ9KikKKwkJX19naXRjb21wICIKKwkJCWZhbHNlIHRydWUgdW1hc2sgZ3JvdXAgYWxsIHdvcmxkIGV2ZXJ5Ym9keQorCQkJIiAiIiAiJHtjdXIjIy0tc2hhcmVkPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gaW5pdAorCQlyZXR1cm4KKwkJOzsKKwllc2FjCit9CisKK19naXRfbHNfZmlsZXMgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gbHMtZmlsZXMKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJIyBYWFggaWdub3JlIG9wdGlvbnMgbGlrZSAtLW1vZGlmaWVkIGFuZCBhbHdheXMgc3VnZ2VzdCBhbGwgY2FjaGVkCisJIyBmaWxlcy4KKwlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNhY2hlZCIKK30KKworX2dpdF9sc19yZW1vdGUgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gbHMtcmVtb3RlCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiCit9CisKK19naXRfbHNfdHJlZSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBscy10cmVlCisJCXJldHVybgorCQk7OworCWVzYWMKKworCV9fZ2l0X2NvbXBsZXRlX2ZpbGUKK30KKworIyBPcHRpb25zIHRoYXQgZ28gd2VsbCBmb3IgbG9nLCBzaG9ydGxvZyBhbmQgZ2l0aworX19naXRfbG9nX2NvbW1vbl9vcHRpb25zPSIKKwktLW5vdCAtLWFsbAorCS0tYnJhbmNoZXMgLS10YWdzIC0tcmVtb3RlcworCS0tZmlyc3QtcGFyZW50IC0tbWVyZ2VzIC0tbm8tbWVyZ2VzCisJLS1tYXgtY291bnQ9CisJLS1tYXgtYWdlPSAtLXNpbmNlPSAtLWFmdGVyPQorCS0tbWluLWFnZT0gLS11bnRpbD0gLS1iZWZvcmU9CisJLS1taW4tcGFyZW50cz0gLS1tYXgtcGFyZW50cz0KKwktLW5vLW1pbi1wYXJlbnRzIC0tbm8tbWF4LXBhcmVudHMKKyIKKyMgT3B0aW9ucyB0aGF0IGdvIHdlbGwgZm9yIGxvZyBhbmQgZ2l0ayAobm90IHNob3J0bG9nKQorX19naXRfbG9nX2dpdGtfb3B0aW9ucz0iCisJLS1kZW5zZSAtLXNwYXJzZSAtLWZ1bGwtaGlzdG9yeQorCS0tc2ltcGxpZnktbWVyZ2VzIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbgorCS0tbGVmdC1yaWdodCAtLW5vdGVzIC0tbm8tbm90ZXMKKyIKKyMgT3B0aW9ucyB0aGF0IGdvIHdlbGwgZm9yIGxvZyBhbmQgc2hvcnRsb2cgKG5vdCBnaXRrKQorX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnM9IgorCS0tYXV0aG9yPSAtLWNvbW1pdHRlcj0gLS1ncmVwPQorCS0tYWxsLW1hdGNoIC0taW52ZXJ0LWdyZXAKKyIKKworX19naXRfbG9nX3ByZXR0eV9mb3JtYXRzPSJvbmVsaW5lIHNob3J0IG1lZGl1bSBmdWxsIGZ1bGxlciByZWZlcmVuY2UgZW1haWwgcmF3IGZvcm1hdDogdGZvcm1hdDogbWJveHJkIgorX19naXRfbG9nX2RhdGVfZm9ybWF0cz0icmVsYXRpdmUgaXNvODYwMSBpc284NjAxLXN0cmljdCByZmMyODIyIHNob3J0IGxvY2FsIGRlZmF1bHQgcmF3IHVuaXggZm9ybWF0OiIKKworX2dpdF9sb2cgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKwlfX2dpdF9maW5kX3JlcG9fcGF0aAorCisJbG9jYWwgbWVyZ2U9IiIKKwlpZiBbIC1mICIkX19naXRfcmVwb19wYXRoL01FUkdFX0hFQUQiIF07IHRoZW4KKwkJbWVyZ2U9Ii0tbWVyZ2UiCisJZmkKKwljYXNlICIkcHJldiwkY3VyIiBpbgorCS1MLDoqOiopCisJCXJldHVybgkjIGZhbGwgYmFjayB0byBCYXNoIGZpbGVuYW1lIGNvbXBsZXRpb24KKwkJOzsKKwktTCw6KikKKwkJX19naXRfY29tcGxldGVfc3ltYm9sIC0tY3VyPSIke2N1ciM6fSIgLS1zZng9IjoiCisJCXJldHVybgorCQk7OworCS1HLCp8LVMsKikKKwkJX19naXRfY29tcGxldGVfc3ltYm9sCisJCXJldHVybgorCQk7OworCWVzYWMKKwljYXNlICIkY3VyIiBpbgorCS0tcHJldHR5PSp8LS1mb3JtYXQ9KikKKwkJX19naXRjb21wICIkX19naXRfbG9nX3ByZXR0eV9mb3JtYXRzICQoX19naXRfcHJldHR5X2FsaWFzZXMpCisJCQkiICIiICIke2N1ciMqPX0iCisJCXJldHVybgorCQk7OworCS0tZGF0ZT0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfZGF0ZV9mb3JtYXRzIiAiIiAiJHtjdXIjIy0tZGF0ZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLWRlY29yYXRlPSopCisJCV9fZ2l0Y29tcCAiZnVsbCBzaG9ydCBubyIgIiIgIiR7Y3VyIyMtLWRlY29yYXRlPX0iCisJCXJldHVybgorCQk7OworCS0tZGlmZi1hbGdvcml0aG09KikKKwkJX19naXRjb21wICIkX19naXRfZGlmZl9hbGdvcml0aG1zIiAiIiAiJHtjdXIjIy0tZGlmZi1hbGdvcml0aG09fSIKKwkJcmV0dXJuCisJCTs7CisJLS1zdWJtb2R1bGU9KikKKwkJX19naXRjb21wICIkX19naXRfZGlmZl9zdWJtb2R1bGVfZm9ybWF0cyIgIiIgIiR7Y3VyIyMtLXN1Ym1vZHVsZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLW5vLXdhbGs9KikKKwkJX19naXRjb21wICJzb3J0ZWQgdW5zb3J0ZWQiICIiICIke2N1ciMjLS1uby13YWxrPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICIKKwkJCSRfX2dpdF9sb2dfY29tbW9uX29wdGlvbnMKKwkJCSRfX2dpdF9sb2dfc2hvcnRsb2dfb3B0aW9ucworCQkJJF9fZ2l0X2xvZ19naXRrX29wdGlvbnMKKwkJCS0tcm9vdCAtLXRvcG8tb3JkZXIgLS1kYXRlLW9yZGVyIC0tcmV2ZXJzZQorCQkJLS1mb2xsb3cgLS1mdWxsLWRpZmYKKwkJCS0tYWJicmV2LWNvbW1pdCAtLW5vLWFiYnJldi1jb21taXQgLS1hYmJyZXY9CisJCQktLXJlbGF0aXZlLWRhdGUgLS1kYXRlPQorCQkJLS1wcmV0dHk9IC0tZm9ybWF0PSAtLW9uZWxpbmUKKwkJCS0tc2hvdy1zaWduYXR1cmUKKwkJCS0tY2hlcnJ5LW1hcmsKKwkJCS0tY2hlcnJ5LXBpY2sKKwkJCS0tZ3JhcGgKKwkJCS0tZGVjb3JhdGUgLS1kZWNvcmF0ZT0gLS1uby1kZWNvcmF0ZQorCQkJLS13YWxrLXJlZmxvZ3MKKwkJCS0tbm8td2FsayAtLW5vLXdhbGs9IC0tZG8td2FsaworCQkJLS1wYXJlbnRzIC0tY2hpbGRyZW4KKwkJCS0tZXhwYW5kLXRhYnMgLS1leHBhbmQtdGFicz0gLS1uby1leHBhbmQtdGFicworCQkJLS1wYXRjaAorCQkJJG1lcmdlCisJCQkkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJLS1waWNrYXhlLWFsbCAtLXBpY2theGUtcmVnZXgKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJLUw6KjoqKQorCQlyZXR1cm4JIyBmYWxsIGJhY2sgdG8gQmFzaCBmaWxlbmFtZSBjb21wbGV0aW9uCisJCTs7CisJLUw6KikKKwkJX19naXRfY29tcGxldGVfc3ltYm9sIC0tY3VyPSIke2N1ciMtTDp9IiAtLXNmeD0iOiIKKwkJcmV0dXJuCisJCTs7CisJLUcqKQorCQlfX2dpdF9jb21wbGV0ZV9zeW1ib2wgLS1wZng9Ii1HIiAtLWN1cj0iJHtjdXIjLUd9IgorCQlyZXR1cm4KKwkJOzsKKwktUyopCisJCV9fZ2l0X2NvbXBsZXRlX3N5bWJvbCAtLXBmeD0iLVMiIC0tY3VyPSIke2N1ciMtU30iCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfbWVyZ2UgKCkKK3sKKwlfX2dpdF9jb21wbGV0ZV9zdHJhdGVneSAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBtZXJnZQorCQlyZXR1cm4KKwllc2FjCisJX19naXRfY29tcGxldGVfcmVmcworfQorCitfZ2l0X21lcmdldG9vbCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS10b29sPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdldG9vbHNfY29tbW9uIHRvcnRvaXNlbWVyZ2UiICIiICIke2N1ciMjLS10b29sPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICItLXRvb2w9IC0tcHJvbXB0IC0tbm8tcHJvbXB0IC0tZ3VpIC0tbm8tZ3VpIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCit9CisKK19naXRfbWVyZ2VfYmFzZSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBtZXJnZS1iYXNlCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZWZzCit9CisKK19naXRfbXYgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gbXYKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJaWYgWyAkKF9fZ2l0X2NvdW50X2FyZ3VtZW50cyAibXYiKSAtZ3QgMCBdOyB0aGVuCisJCSMgV2UgbmVlZCB0byBzaG93IGJvdGggY2FjaGVkIGFuZCB1bnRyYWNrZWQgZmlsZXMgKGluY2x1ZGluZworCQkjIGVtcHR5IGRpcmVjdG9yaWVzKSBzaW5jZSB0aGlzIG1heSBub3QgYmUgdGhlIGxhc3QgYXJndW1lbnQuCisJCV9fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUgIi0tY2FjaGVkIC0tb3RoZXJzIC0tZGlyZWN0b3J5IgorCWVsc2UKKwkJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1jYWNoZWQiCisJZmkKK30KKworX2dpdF9ub3RlcyAoKQoreworCWxvY2FsIHN1YmNvbW1hbmRzPSdhZGQgYXBwZW5kIGNvcHkgZWRpdCBnZXQtcmVmIGxpc3QgbWVyZ2UgcHJ1bmUgcmVtb3ZlIHNob3cnCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCisJY2FzZSAiJHN1YmNvbW1hbmQsJGN1ciIgaW4KKwksLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBub3RlcworCQk7OworCSwqKQorCQljYXNlICIkcHJldiIgaW4KKwkJLS1yZWYpCisJCQlfX2dpdF9jb21wbGV0ZV9yZWZzCisJCQk7OworCQkqKQorCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMgLS1yZWYiCisJCQk7OworCQllc2FjCisJCTs7CisJKiwtLXJldXNlLW1lc3NhZ2U9KnwqLC0tcmVlZGl0LW1lc3NhZ2U9KikKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLWN1cj0iJHtjdXIjKj19IgorCQk7OworCSosLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBub3Rlc18kc3ViY29tbWFuZAorCQk7OworCXBydW5lLCp8Z2V0LXJlZiwqKQorCQkjIHRoaXMgY29tbWFuZCBkb2VzIG5vdCB0YWtlIGEgcmVmLCBkbyBub3QgY29tcGxldGUgaXQKKwkJOzsKKwkqKQorCQljYXNlICIkcHJldiIgaW4KKwkJLW18LUYpCisJCQk7OworCQkqKQorCQkJX19naXRfY29tcGxldGVfcmVmcworCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKK30KKworX2dpdF9wdWxsICgpCit7CisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tcmVjdXJzZS1zdWJtb2R1bGVzPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyIgIiIgIiR7Y3VyIyMtLXJlY3Vyc2Utc3VibW9kdWxlcz19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHB1bGwKKworCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMKK30KKworX19naXRfcHVzaF9yZWN1cnNlX3N1Ym1vZHVsZXM9ImNoZWNrIG9uLWRlbWFuZCBvbmx5IgorCitfX2dpdF9jb21wbGV0ZV9mb3JjZV93aXRoX2xlYXNlICgpCit7CisJbG9jYWwgY3VyXz0kMQorCisJY2FzZSAiJGN1cl8iIGluCisJLS0qPSkKKwkJOzsKKwkqOiopCisJCV9fZ2l0X2NvbXBsZXRlX3JlZnMgLS1jdXI9IiR7Y3VyXyMqOn0iCisJCTs7CisJKikKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLWN1cj0iJGN1cl8iCisJCTs7CisJZXNhYworfQorCitfZ2l0X3B1c2ggKCkKK3sKKwljYXNlICIkcHJldiIgaW4KKwktLXJlcG8pCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIKKwkJcmV0dXJuCisJCTs7CisJLS1yZWN1cnNlLXN1Ym1vZHVsZXMpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3B1c2hfcmVjdXJzZV9zdWJtb2R1bGVzIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJY2FzZSAiJGN1ciIgaW4KKwktLXJlcG89KikKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIiAiIiAiJHtjdXIjIy0tcmVwbz19IgorCQlyZXR1cm4KKwkJOzsKKwktLXJlY3Vyc2Utc3VibW9kdWxlcz0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlcyIgIiIgIiR7Y3VyIyMtLXJlY3Vyc2Utc3VibW9kdWxlcz19IgorCQlyZXR1cm4KKwkJOzsKKwktLWZvcmNlLXdpdGgtbGVhc2U9KikKKwkJX19naXRfY29tcGxldGVfZm9yY2Vfd2l0aF9sZWFzZSAiJHtjdXIjIy0tZm9yY2Utd2l0aC1sZWFzZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHB1c2gKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjCit9CisKK19naXRfcmFuZ2VfZGlmZiAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1jcmVhdGlvbi1mYWN0b3I9IC0tbm8tZHVhbC1jb2xvcgorCQkJJF9fZ2l0X2RpZmZfY29tbW9uX29wdGlvbnMKKwkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdAorfQorCitfX2dpdF9yZWJhc2VfaW5wcm9ncmVzc19vcHRpb25zPSItLWNvbnRpbnVlIC0tc2tpcCAtLWFib3J0IC0tcXVpdCAtLXNob3ctY3VycmVudC1wYXRjaCIKK19fZ2l0X3JlYmFzZV9pbnRlcmFjdGl2ZV9pbnByb2dyZXNzX29wdGlvbnM9IiRfX2dpdF9yZWJhc2VfaW5wcm9ncmVzc19vcHRpb25zIC0tZWRpdC10b2RvIgorCitfZ2l0X3JlYmFzZSAoKQoreworCV9fZ2l0X2ZpbmRfcmVwb19wYXRoCisJaWYgWyAtZiAiJF9fZ2l0X3JlcG9fcGF0aCIvcmViYXNlLW1lcmdlL2ludGVyYWN0aXZlIF07IHRoZW4KKwkJX19naXRjb21wICIkX19naXRfcmViYXNlX2ludGVyYWN0aXZlX2lucHJvZ3Jlc3Nfb3B0aW9ucyIKKwkJcmV0dXJuCisJZWxpZiBbIC1kICIkX19naXRfcmVwb19wYXRoIi9yZWJhc2UtYXBwbHkgXSB8fCBcCisJICAgICBbIC1kICIkX19naXRfcmVwb19wYXRoIi9yZWJhc2UtbWVyZ2UgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRfX2dpdF9yZWJhc2VfaW5wcm9ncmVzc19vcHRpb25zIgorCQlyZXR1cm4KKwlmaQorCV9fZ2l0X2NvbXBsZXRlX3N0cmF0ZWd5ICYmIHJldHVybgorCWNhc2UgIiRjdXIiIGluCisJLS13aGl0ZXNwYWNlPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3doaXRlc3BhY2VsaXN0IiAiIiAiJHtjdXIjIy0td2hpdGVzcGFjZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLW9udG89KikKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLWN1cj0iJHtjdXIjIy0tb250bz19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlYmFzZSAiIiBcCisJCQkiJF9fZ2l0X3JlYmFzZV9pbnRlcmFjdGl2ZV9pbnByb2dyZXNzX29wdGlvbnMiCisKKwkJcmV0dXJuCisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3JlZnMKK30KKworX2dpdF9yZWZsb2cgKCkKK3sKKwlsb2NhbCBzdWJjb21tYW5kcz0ic2hvdyBkZWxldGUgZXhwaXJlIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKworCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCWVsc2UKKwkJX19naXRfY29tcGxldGVfcmVmcworCWZpCit9CisKK19fZ2l0X3NlbmRfZW1haWxfY29uZmlybV9vcHRpb25zPSJhbHdheXMgbmV2ZXIgYXV0byBjYyBjb21wb3NlIgorX19naXRfc2VuZF9lbWFpbF9zdXBwcmVzc2NjX29wdGlvbnM9ImF1dGhvciBzZWxmIGNjIGJvZHljYyBzb2IgY2NjbWQgYm9keSBhbGwiCisKK19naXRfc2VuZF9lbWFpbCAoKQoreworCWNhc2UgIiRwcmV2IiBpbgorCS0tdG98LS1jY3wtLWJjY3wtLWZyb20pCisJCV9fZ2l0Y29tcCAiJChfX2dpdCBzZW5kLWVtYWlsIC0tZHVtcC1hbGlhc2VzKSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJY2FzZSAiJGN1ciIgaW4KKwktLWNvbmZpcm09KikKKwkJX19naXRjb21wICIKKwkJCSRfX2dpdF9zZW5kX2VtYWlsX2NvbmZpcm1fb3B0aW9ucworCQkJIiAiIiAiJHtjdXIjIy0tY29uZmlybT19IgorCQlyZXR1cm4KKwkJOzsKKwktLXN1cHByZXNzLWNjPSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfc2VuZF9lbWFpbF9zdXBwcmVzc2NjX29wdGlvbnMKKwkJCSIgIiIgIiR7Y3VyIyMtLXN1cHByZXNzLWNjPX0iCisKKwkJcmV0dXJuCisJCTs7CisJLS1zbXRwLWVuY3J5cHRpb249KikKKwkJX19naXRjb21wICJzc2wgdGxzIiAiIiAiJHtjdXIjIy0tc210cC1lbmNyeXB0aW9uPX0iCisJCXJldHVybgorCQk7OworCS0tdGhyZWFkPSopCisJCV9fZ2l0Y29tcCAiCisJCQlkZWVwIHNoYWxsb3cKKwkJCSIgIiIgIiR7Y3VyIyMtLXRocmVhZD19IgorCQlyZXR1cm4KKwkJOzsKKwktLXRvPSp8LS1jYz0qfC0tYmNjPSp8LS1mcm9tPSopCisJCV9fZ2l0Y29tcCAiJChfX2dpdCBzZW5kLWVtYWlsIC0tZHVtcC1hbGlhc2VzKSIgIiIgIiR7Y3VyIy0tKj19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHNlbmQtZW1haWwgIi0tYW5ub3RhdGUgLS1iY2MgLS1jYyAtLWNjLWNtZCAtLWNoYWluLXJlcGx5LXRvCisJCQktLWNvbXBvc2UgLS1jb25maXJtPSAtLWRyeS1ydW4gLS1lbnZlbG9wZS1zZW5kZXIKKwkJCS0tZnJvbSAtLWlkZW50aXR5CisJCQktLWluLXJlcGx5LXRvIC0tbm8tY2hhaW4tcmVwbHktdG8gLS1uby1zaWduZWQtb2ZmLWJ5LWNjCisJCQktLW5vLXN1cHByZXNzLWZyb20gLS1uby10aHJlYWQgLS1xdWlldCAtLXJlcGx5LXRvCisJCQktLXNpZ25lZC1vZmYtYnktY2MgLS1zbXRwLXBhc3MgLS1zbXRwLXNlcnZlcgorCQkJLS1zbXRwLXNlcnZlci1wb3J0IC0tc210cC1lbmNyeXB0aW9uPSAtLXNtdHAtdXNlcgorCQkJLS1zdWJqZWN0IC0tc3VwcHJlc3MtY2M9IC0tc3VwcHJlc3MtZnJvbSAtLXRocmVhZCAtLXRvCisJCQktLXZhbGlkYXRlIC0tbm8tdmFsaWRhdGUKKwkJCSRfX2dpdF9mb3JtYXRfcGF0Y2hfZXh0cmFfb3B0aW9ucyIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKK30KKworX2dpdF9zdGFnZSAoKQoreworCV9naXRfYWRkCit9CisKK19naXRfc3RhdHVzICgpCit7CisJbG9jYWwgY29tcGxldGVfb3B0CisJbG9jYWwgdW50cmFja2VkX3N0YXRlCisKKwljYXNlICIkY3VyIiBpbgorCS0taWdub3JlLXN1Ym1vZHVsZXM9KikKKwkJX19naXRjb21wICJub25lIHVudHJhY2tlZCBkaXJ0eSBhbGwiICIiICIke2N1ciMjLS1pZ25vcmUtc3VibW9kdWxlcz19IgorCQlyZXR1cm4KKwkJOzsKKwktLXVudHJhY2tlZC1maWxlcz0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF91bnRyYWNrZWRfZmlsZV9tb2RlcyIgIiIgIiR7Y3VyIyMtLXVudHJhY2tlZC1maWxlcz19IgorCQlyZXR1cm4KKwkJOzsKKwktLWNvbHVtbj0qKQorCQlfX2dpdGNvbXAgIgorCQkJYWx3YXlzIG5ldmVyIGF1dG8gY29sdW1uIHJvdyBwbGFpbiBkZW5zZSBub2RlbnNlCisJCQkiICIiICIke2N1ciMjLS1jb2x1bW49fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiBzdGF0dXMKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJdW50cmFja2VkX3N0YXRlPSIkKF9fZ2l0X2dldF9vcHRpb25fdmFsdWUgIi11IiAiLS11bnRyYWNrZWQtZmlsZXM9IiBcCisJCSIkX19naXRfdW50cmFja2VkX2ZpbGVfbW9kZXMiICJzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIikiCisKKwljYXNlICIkdW50cmFja2VkX3N0YXRlIiBpbgorCW5vKQorCQkjIC0taWdub3JlZCBvcHRpb24gZG9lcyBub3QgbWF0dGVyCisJCWNvbXBsZXRlX29wdD0KKwkJOzsKKwlhbGx8bm9ybWFsfCopCisJCWNvbXBsZXRlX29wdD0iLS1jYWNoZWQgLS1kaXJlY3RvcnkgLS1uby1lbXB0eS1kaXJlY3RvcnkgLS1vdGhlcnMiCisKKwkJaWYgWyAtbiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIi0taWdub3JlZCIpIiBdOyB0aGVuCisJCQljb21wbGV0ZV9vcHQ9IiRjb21wbGV0ZV9vcHQgLS1pZ25vcmVkIC0tZXhjbHVkZT0qIgorCQlmaQorCQk7OworCWVzYWMKKworCV9fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUgIiRjb21wbGV0ZV9vcHQiCit9CisKK19naXRfc3dpdGNoICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLWNvbmZsaWN0PSopCisJCV9fZ2l0Y29tcCAiZGlmZjMgbWVyZ2UiICIiICIke2N1ciMjLS1jb25mbGljdD19IgorCQk7OworCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gc3dpdGNoCisJCTs7CisJKikKKwkJIyBjaGVjayBpZiAtLXRyYWNrLCAtLW5vLXRyYWNrLCBvciAtLW5vLWd1ZXNzIHdhcyBzcGVjaWZpZWQKKwkJIyBpZiBzbywgZGlzYWJsZSBEV0lNIG1vZGUKKwkJbG9jYWwgdHJhY2tfb3B0PSItLXRyYWNrIiBvbmx5X2xvY2FsX3JlZj1uCisJCWlmIFsgIiRHSVRfQ09NUExFVElPTl9DSEVDS09VVF9OT19HVUVTUyIgPSAiMSIgXSB8fAorCQkgICBbIC1uICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiLS10cmFjayAtLW5vLXRyYWNrIC0tbm8tZ3Vlc3MiKSIgXTsgdGhlbgorCQkJdHJhY2tfb3B0PScnCisJCWZpCisJCSMgZXhwbGljaXQgLS1ndWVzcyBlbmFibGVzIERXSU0gbW9kZSByZWdhcmRsZXNzIG9mCisJCSMgJEdJVF9DT01QTEVUSU9OX0NIRUNLT1VUX05PX0dVRVNTCisJCWlmIFsgLW4gIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICItLWd1ZXNzIikiIF07IHRoZW4KKwkJCXRyYWNrX29wdD0nLS10cmFjaycKKwkJZmkKKwkJaWYgWyAteiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIi1kIC0tZGV0YWNoIikiIF07IHRoZW4KKwkJCW9ubHlfbG9jYWxfcmVmPXkKKwkJZWxzZQorCQkJIyAtLWd1ZXNzIC0tZGV0YWNoIGlzIGludmFsaWQgY29tYmluYXRpb24sIG5vCisJCQkjIGR3aW0gd2lsbCBiZSBkb25lIHdoZW4gLS1kZXRhY2ggaXMgc3BlY2lmaWVkCisJCQl0cmFja19vcHQ9CisJCWZpCisJCWlmIFsgJG9ubHlfbG9jYWxfcmVmID0geSAtYSAteiAiJHRyYWNrX29wdCIgXTsgdGhlbgorCQkJX19naXRjb21wX2RpcmVjdCAiJChfX2dpdF9oZWFkcyAiIiAiJGN1ciIgIiAiKSIKKwkJZWxzZQorCQkJX19naXRfY29tcGxldGVfcmVmcyAkdHJhY2tfb3B0CisJCWZpCisJCTs7CisJZXNhYworfQorCitfX2dpdF9jb25maWdfZ2V0X3NldF92YXJpYWJsZXMgKCkKK3sKKwlsb2NhbCBwcmV2d29yZCB3b3JkIGNvbmZpZ19maWxlPSBjPSRjd29yZAorCXdoaWxlIFsgJGMgLWd0IDEgXTsgZG8KKwkJd29yZD0iJHt3b3Jkc1tjXX0iCisJCWNhc2UgIiR3b3JkIiBpbgorCQktLXN5c3RlbXwtLWdsb2JhbHwtLWxvY2FsfC0tZmlsZT0qKQorCQkJY29uZmlnX2ZpbGU9IiR3b3JkIgorCQkJYnJlYWsKKwkJCTs7CisJCS1mfC0tZmlsZSkKKwkJCWNvbmZpZ19maWxlPSIkd29yZCAkcHJldndvcmQiCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlwcmV2d29yZD0kd29yZAorCQljPSQoKC0tYykpCisJZG9uZQorCisJX19naXQgY29uZmlnICRjb25maWdfZmlsZSAtLW5hbWUtb25seSAtLWxpc3QKK30KKworX19naXRfY29uZmlnX3ZhcnM9CitfX2dpdF9jb21wdXRlX2NvbmZpZ192YXJzICgpCit7CisJdGVzdCAtbiAiJF9fZ2l0X2NvbmZpZ192YXJzIiB8fAorCV9fZ2l0X2NvbmZpZ192YXJzPSIkKGdpdCBoZWxwIC0tY29uZmlnLWZvci1jb21wbGV0aW9uIHwgc29ydCAtdSkiCit9CisKKyMgQ29tcGxldGVzIHBvc3NpYmxlIHZhbHVlcyBvZiB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorIworIyBVc2FnZTogX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX3ZhbHVlIFs8b3B0aW9uPl0uLi4KKyMgLS12YXJuYW1lPTx3b3JkPjogVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2hvc2UgdmFsdWUgaXMKKyMgICAgICAgICAgICAgICAgICAgdG8gYmUgY29tcGxldGVkLiAgRGVmYXVsdHMgdG8gdGhlIHByZXZpb3VzIHdvcmQgb24gdGhlCisjICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbGluZS4KKyMgLS1jdXI9PHdvcmQ+OiBUaGUgY3VycmVudCB2YWx1ZSB0byBiZSBjb21wbGV0ZWQuICBEZWZhdWx0cyB0byB0aGUgY3VycmVudAorIyAgICAgICAgICAgICAgIHdvcmQgdG8gYmUgY29tcGxldGVkLgorX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX3ZhbHVlICgpCit7CisJbG9jYWwgdmFybmFtZT0iJHByZXYiIGN1cl89IiRjdXIiCisKKwl3aGlsZSB0ZXN0ICQjICE9IDA7IGRvCisJCWNhc2UgIiQxIiBpbgorCQktLXZhcm5hbWU9KikJdmFybmFtZT0iJHsxIyMtLXZhcm5hbWU9fSIgOzsKKwkJLS1jdXI9KikJY3VyXz0iJHsxIyMtLWN1cj19IiA7OworCQkqKQkJcmV0dXJuIDEgOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmIFsgIiR7QkFTSF9WRVJTSU5GT1swXTotMH0iIC1nZSA0IF07IHRoZW4KKwkJdmFybmFtZT0iJHt2YXJuYW1lLCx9IgorCWVsc2UKKwkJdmFybmFtZT0iJChlY2hvICIkdmFybmFtZSIgfHRyIEEtWiBhLXopIgorCWZpCisKKwljYXNlICIkdmFybmFtZSIgaW4KKwlicmFuY2guKi5yZW1vdGV8YnJhbmNoLioucHVzaHJlbW90ZSkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCWJyYW5jaC4qLm1lcmdlKQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzIC0tY3VyPSIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJYnJhbmNoLioucmViYXNlKQorCQlfX2dpdGNvbXAgImZhbHNlIHRydWUgbWVyZ2VzIHByZXNlcnZlIGludGVyYWN0aXZlIiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXJlbW90ZS5wdXNoZGVmYXVsdCkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXJlbW90ZS4qLmZldGNoKQorCQlsb2NhbCByZW1vdGU9IiR7dmFybmFtZSNyZW1vdGUufSIKKwkJcmVtb3RlPSIke3JlbW90ZSUuZmV0Y2h9IgorCQlpZiBbIC16ICIkY3VyXyIgXTsgdGhlbgorCQkJX19naXRjb21wX25sICJyZWZzL2hlYWRzLyIgIiIgIiIgIiIKKwkJCXJldHVybgorCQlmaQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmc19yZW1vdGVzICIkcmVtb3RlIikiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJcmVtb3RlLioucHVzaCkKKwkJbG9jYWwgcmVtb3RlPSIke3Zhcm5hbWUjcmVtb3RlLn0iCisJCXJlbW90ZT0iJHtyZW1vdGUlLnB1c2h9IgorCQlfX2dpdGNvbXBfbmwgIiQoX19naXQgZm9yLWVhY2gtcmVmIFwKKwkJCS0tZm9ybWF0PSclKHJlZm5hbWUpOiUocmVmbmFtZSknIHJlZnMvaGVhZHMpIiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXB1bGwudHdvaGVhZHxwdWxsLm9jdG9wdXMpCisJCV9fZ2l0X2NvbXB1dGVfbWVyZ2Vfc3RyYXRlZ2llcworCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCWNvbG9yLnBhZ2VyKQorCQlfX2dpdGNvbXAgImZhbHNlIHRydWUiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJY29sb3IuKi4qKQorCQlfX2dpdGNvbXAgIgorCQkJbm9ybWFsIGJsYWNrIHJlZCBncmVlbiB5ZWxsb3cgYmx1ZSBtYWdlbnRhIGN5YW4gd2hpdGUKKwkJCWJvbGQgZGltIHVsIGJsaW5rIHJldmVyc2UKKwkJCSIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwljb2xvci4qKQorCQlfX2dpdGNvbXAgImZhbHNlIHRydWUgYWx3YXlzIG5ldmVyIGF1dG8iICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJZGlmZi5zdWJtb2R1bGUpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfc3VibW9kdWxlX2Zvcm1hdHMiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJaGVscC5mb3JtYXQpCisJCV9fZ2l0Y29tcCAibWFuIGluZm8gd2ViIGh0bWwiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJbG9nLmRhdGUpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2xvZ19kYXRlX2Zvcm1hdHMiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUpCisJCV9fZ2l0Y29tcCAibXV0dCBtYWlscmMgcGluZSBlbG0gZ251cyIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlzZW5kZW1haWwuY29uZmlybSkKKwkJX19naXRjb21wICIkX19naXRfc2VuZF9lbWFpbF9jb25maXJtX29wdGlvbnMiICIiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJc2VuZGVtYWlsLnN1cHByZXNzY2MpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zIiAiIiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXNlbmRlbWFpbC50cmFuc2ZlcmVuY29kaW5nKQorCQlfX2dpdGNvbXAgIjdiaXQgOGJpdCBxdW90ZWQtcHJpbnRhYmxlIGJhc2U2NCIgIiIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwkqLiopCisJCXJldHVybgorCQk7OworCWVzYWMKK30KKworIyBDb21wbGV0ZXMgY29uZmlndXJhdGlvbiBzZWN0aW9ucywgc3Vic2VjdGlvbnMsIHZhcmlhYmxlIG5hbWVzLgorIworIyBVc2FnZTogX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX25hbWUgWzxvcHRpb24+XS4uLgorIyAtLWN1cj08d29yZD46IFRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2VjdGlvbi92YXJpYWJsZSBuYW1lIHRvIGJlCisjICAgICAgICAgICAgICAgY29tcGxldGVkLiAgRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgd29yZCB0byBiZSBjb21wbGV0ZWQuCisjIC0tc2Z4PTxzdWZmaXg+OiBBIHN1ZmZpeCB0byBiZSBhcHBlbmRlZCB0byBlYWNoIGZ1bGx5IGNvbXBsZXRlZAorIyAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lIChidXQgbm90IHRvIHNlY3Rpb25zIG9yCisjICAgICAgICAgICAgICAgICBzdWJzZWN0aW9ucykgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBzcGFjZS4KK19fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV9uYW1lICgpCit7CisJbG9jYWwgY3VyXz0iJGN1ciIgc2Z4CisKKwl3aGlsZSB0ZXN0ICQjICE9IDA7IGRvCisJCWNhc2UgIiQxIiBpbgorCQktLWN1cj0qKQljdXJfPSIkezEjIy0tY3VyPX0iIDs7CisJCS0tc2Z4PSopCXNmeD0iJHsxIyMtLXNmeD19IiA7OworCQkqKQkJcmV0dXJuIDEgOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWNhc2UgIiRjdXJfIiBpbgorCWJyYW5jaC4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXJfJS4qfS4iCisJCWN1cl89IiR7Y3VyXyMjKi59IgorCQlfX2dpdGNvbXAgInJlbW90ZSBwdXNoUmVtb3RlIG1lcmdlIG1lcmdlT3B0aW9ucyByZWJhc2UiICIkcGZ4IiAiJGN1cl8iICIkc2Z4IgorCQlyZXR1cm4KKwkJOzsKKwlicmFuY2guKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIgorCQljdXJfPSIke2N1ciMqLn0iCisJCV9fZ2l0Y29tcF9kaXJlY3QgIiQoX19naXRfaGVhZHMgIiRwZngiICIkY3VyXyIgIi4iKSIKKwkJX19naXRjb21wX25sX2FwcGVuZCAkJ2F1dG9TZXR1cE1lcmdlXG5hdXRvU2V0dXBSZWJhc2VcbicgIiRwZngiICIkY3VyXyIgIiRzZngiCisJCXJldHVybgorCQk7OworCWd1aXRvb2wuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyXyUuKn0uIgorCQljdXJfPSIke2N1cl8jIyoufSIKKwkJX19naXRjb21wICIKKwkJCWFyZ1Byb21wdCBjbWQgY29uZmlybSBuZWVkc0ZpbGUgbm9Db25zb2xlIG5vUmVzY2FuCisJCQlwcm9tcHQgcmV2UHJvbXB0IHJldlVubWVyZ2VkIHRpdGxlCisJCQkiICIkcGZ4IiAiJGN1cl8iICIkc2Z4IgorCQlyZXR1cm4KKwkJOzsKKwlkaWZmdG9vbC4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXJfJS4qfS4iCisJCWN1cl89IiR7Y3VyXyMjKi59IgorCQlfX2dpdGNvbXAgImNtZCBwYXRoIiAiJHBmeCIgIiRjdXJfIiAiJHNmeCIKKwkJcmV0dXJuCisJCTs7CisJbWFuLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1cl8lLip9LiIKKwkJY3VyXz0iJHtjdXJfIyMqLn0iCisJCV9fZ2l0Y29tcCAiY21kIHBhdGgiICIkcGZ4IiAiJGN1cl8iICIkc2Z4IgorCQlyZXR1cm4KKwkJOzsKKwltZXJnZXRvb2wuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyXyUuKn0uIgorCQljdXJfPSIke2N1cl8jIyoufSIKKwkJX19naXRjb21wICJjbWQgcGF0aCB0cnVzdEV4aXRDb2RlIiAiJHBmeCIgIiRjdXJfIiAiJHNmeCIKKwkJcmV0dXJuCisJCTs7CisJcGFnZXIuKikKKwkJbG9jYWwgcGZ4PSIke2N1cl8lLip9LiIKKwkJY3VyXz0iJHtjdXJfIyoufSIKKwkJX19naXRfY29tcHV0ZV9hbGxfY29tbWFuZHMKKwkJX19naXRjb21wX25sICIkX19naXRfYWxsX2NvbW1hbmRzIiAiJHBmeCIgIiRjdXJfIiAiJHNmeCIKKwkJcmV0dXJuCisJCTs7CisJcmVtb3RlLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1cl8lLip9LiIKKwkJY3VyXz0iJHtjdXJfIyMqLn0iCisJCV9fZ2l0Y29tcCAiCisJCQl1cmwgcHJveHkgZmV0Y2ggcHVzaCBtaXJyb3Igc2tpcERlZmF1bHRVcGRhdGUKKwkJCXJlY2VpdmVwYWNrIHVwbG9hZHBhY2sgdGFnT3B0IHB1c2h1cmwKKwkJCSIgIiRwZngiICIkY3VyXyIgIiRzZngiCisJCXJldHVybgorCQk7OworCXJlbW90ZS4qKQorCQlsb2NhbCBwZng9IiR7Y3VyXyUuKn0uIgorCQljdXJfPSIke2N1cl8jKi59IgorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiICIkcGZ4IiAiJGN1cl8iICIuIgorCQlfX2dpdGNvbXBfbmxfYXBwZW5kICJwdXNoRGVmYXVsdCIgIiRwZngiICIkY3VyXyIgIiRzZngiCisJCXJldHVybgorCQk7OworCXVybC4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXJfJS4qfS4iCisJCWN1cl89IiR7Y3VyXyMjKi59IgorCQlfX2dpdGNvbXAgImluc3RlYWRPZiBwdXNoSW5zdGVhZE9mIiAiJHBmeCIgIiRjdXJfIiAiJHNmeCIKKwkJcmV0dXJuCisJCTs7CisJKi4qKQorCQlfX2dpdF9jb21wdXRlX2NvbmZpZ192YXJzCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2NvbmZpZ192YXJzIiAiIiAiJGN1cl8iICIkc2Z4IgorCQk7OworCSopCisJCV9fZ2l0X2NvbXB1dGVfY29uZmlnX3ZhcnMKKwkJX19naXRjb21wICIkKGVjaG8gIiRfX2dpdF9jb25maWdfdmFycyIgfAorCQkJCWF3ayAtRiAuICd7CisJCQkJCXNlY3Rpb25zWyQxXSA9IDEKKwkJCQl9CisJCQkJRU5EIHsKKwkJCQkJZm9yIChzIGluIHNlY3Rpb25zKQorCQkJCQkJcHJpbnQgcyAiLiIKKwkJCQl9CisJCQkJJykiICIiICIkY3VyXyIKKwkJOzsKKwllc2FjCit9CisKKyMgQ29tcGxldGVzICc9Jy1zZXBhcmF0ZWQgY29uZmlndXJhdGlvbiBzZWN0aW9ucy92YXJpYWJsZSBuYW1lcyBhbmQgdmFsdWVzCisjIGZvciAnZ2l0IC1jIHNlY3Rpb24ubmFtZT12YWx1ZScuCisjCisjIFVzYWdlOiBfX2dpdF9jb21wbGV0ZV9jb25maWdfdmFyaWFibGVfbmFtZV9hbmRfdmFsdWUgWzxvcHRpb24+XS4uLgorIyAtLWN1cj08d29yZD46IFRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2VjdGlvbi92YXJpYWJsZSBuYW1lL3ZhbHVlIHRvIGJlCisjICAgICAgICAgICAgICAgY29tcGxldGVkLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCB3b3JkIHRvIGJlIGNvbXBsZXRlZC4KK19fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV9uYW1lX2FuZF92YWx1ZSAoKQoreworCWxvY2FsIGN1cl89IiRjdXIiCisKKwl3aGlsZSB0ZXN0ICQjICE9IDA7IGRvCisJCWNhc2UgIiQxIiBpbgorCQktLWN1cj0qKQljdXJfPSIkezEjIy0tY3VyPX0iIDs7CisJCSopCQlyZXR1cm4gMSA7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJY2FzZSAiJGN1cl8iIGluCisJKj0qKQorCQlfX2dpdF9jb21wbGV0ZV9jb25maWdfdmFyaWFibGVfdmFsdWUgXAorCQkJLS12YXJuYW1lPSIke2N1cl8lJT0qfSIgLS1jdXI9IiR7Y3VyXyMqPX0iCisJCTs7CisJKikKKwkJX19naXRfY29tcGxldGVfY29uZmlnX3ZhcmlhYmxlX25hbWUgLS1jdXI9IiRjdXJfIiAtLXNmeD0nPScKKwkJOzsKKwllc2FjCit9CisKK19naXRfY29uZmlnICgpCit7CisJY2FzZSAiJHByZXYiIGluCisJLS1nZXR8LS1nZXQtYWxsfC0tdW5zZXR8LS11bnNldC1hbGwpCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9jb25maWdfZ2V0X3NldF92YXJpYWJsZXMpIgorCQlyZXR1cm4KKwkJOzsKKwkqLiopCisJCV9fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV92YWx1ZQorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIGNvbmZpZworCQk7OworCSopCisJCV9fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV9uYW1lCisJCTs7CisJZXNhYworfQorCitfZ2l0X3JlbW90ZSAoKQoreworCWxvY2FsIHN1YmNvbW1hbmRzPSIKKwkJYWRkIHJlbmFtZSByZW1vdmUgc2V0LWhlYWQgc2V0LWJyYW5jaGVzCisJCWdldC11cmwgc2V0LXVybCBzaG93IHBydW5lIHVwZGF0ZQorCQkiCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCWNhc2UgIiRjdXIiIGluCisJCS0tKikKKwkJCV9fZ2l0Y29tcF9idWlsdGluIHJlbW90ZQorCQkJOzsKKwkJKikKKwkJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCQkJOzsKKwkJZXNhYworCQlyZXR1cm4KKwlmaQorCisJY2FzZSAiJHN1YmNvbW1hbmQsJGN1ciIgaW4KKwlhZGQsLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiByZW1vdGVfYWRkCisJCTs7CisJYWRkLCopCisJCTs7CisJc2V0LWhlYWQsLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiByZW1vdGVfc2V0LWhlYWQKKwkJOzsKKwlzZXQtYnJhbmNoZXMsLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiByZW1vdGVfc2V0LWJyYW5jaGVzCisJCTs7CisJc2V0LWhlYWQsKnxzZXQtYnJhbmNoZXMsKikKKwkJX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMKKwkJOzsKKwl1cGRhdGUsLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiByZW1vdGVfdXBkYXRlCisJCTs7CisJdXBkYXRlLCopCisJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZW1vdGVzKSAkKF9fZ2l0X2dldF9jb25maWdfdmFyaWFibGVzICJyZW1vdGVzIikiCisJCTs7CisJc2V0LXVybCwtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlbW90ZV9zZXQtdXJsCisJCTs7CisJZ2V0LXVybCwtLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJlbW90ZV9nZXQtdXJsCisJCTs7CisJcHJ1bmUsLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiByZW1vdGVfcHJ1bmUKKwkJOzsKKwkqKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiCisJCTs7CisJZXNhYworfQorCitfZ2l0X3JlcGxhY2UgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAic2hvcnQgbWVkaXVtIGxvbmciICIiICIke2N1ciMjLS1mb3JtYXQ9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiByZXBsYWNlCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZWZzCit9CisKK19naXRfcmVyZXJlICgpCit7CisJbG9jYWwgc3ViY29tbWFuZHM9ImNsZWFyIGZvcmdldCBkaWZmIHJlbWFpbmluZyBzdGF0dXMgZ2MiCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCWlmIHRlc3QgLXogIiRzdWJjb21tYW5kIgorCXRoZW4KKwkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCXJldHVybgorCWZpCit9CisKK19naXRfcmVzZXQgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiByZXNldAorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmVmcworfQorCitfZ2l0X3Jlc3RvcmUgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tY29uZmxpY3Q9KikKKwkJX19naXRjb21wICJkaWZmMyBtZXJnZSIgIiIgIiR7Y3VyIyMtLWNvbmZsaWN0PX0iCisJCTs7CisJLS1zb3VyY2U9KikKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLWN1cj0iJHtjdXIjIy0tc291cmNlPX0iCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXBfYnVpbHRpbiByZXN0b3JlCisJCTs7CisJZXNhYworfQorCitfX2dpdF9yZXZlcnRfaW5wcm9ncmVzc19vcHRpb25zPSRfX2dpdF9zZXF1ZW5jZXJfaW5wcm9ncmVzc19vcHRpb25zCisKK19naXRfcmV2ZXJ0ICgpCit7CisJX19naXRfZmluZF9yZXBvX3BhdGgKKwlpZiBbIC1mICIkX19naXRfcmVwb19wYXRoIi9SRVZFUlRfSEVBRCBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3JldmVydF9pbnByb2dyZXNzX29wdGlvbnMiCisJCXJldHVybgorCWZpCisJX19naXRfY29tcGxldGVfc3RyYXRlZ3kgJiYgcmV0dXJuCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHJldmVydCAiIiBcCisJCQkiJF9fZ2l0X3JldmVydF9pbnByb2dyZXNzX29wdGlvbnMiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZWZzCit9CisKK19naXRfcm0gKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gcm0KKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1jYWNoZWQiCit9CisKK19naXRfc2hvcnRsb2cgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJJF9fZ2l0X2xvZ19jb21tb25fb3B0aW9ucworCQkJJF9fZ2l0X2xvZ19zaG9ydGxvZ19vcHRpb25zCisJCQktLW51bWJlcmVkIC0tc3VtbWFyeSAtLWVtYWlsCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfc2hvdyAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLXByZXR0eT0qfC0tZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2xvZ19wcmV0dHlfZm9ybWF0cyAkKF9fZ2l0X3ByZXR0eV9hbGlhc2VzKQorCQkJIiAiIiAiJHtjdXIjKj19IgorCQlyZXR1cm4KKwkJOzsKKwktLWRpZmYtYWxnb3JpdGhtPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfYWxnb3JpdGhtcyIgIiIgIiR7Y3VyIyMtLWRpZmYtYWxnb3JpdGhtPX0iCisJCXJldHVybgorCQk7OworCS0tc3VibW9kdWxlPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfc3VibW9kdWxlX2Zvcm1hdHMiICIiICIke2N1ciMjLS1zdWJtb2R1bGU9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIi0tcHJldHR5PSAtLWZvcm1hdD0gLS1hYmJyZXYtY29tbWl0IC0tbm8tYWJicmV2LWNvbW1pdAorCQkJLS1vbmVsaW5lIC0tc2hvdy1zaWduYXR1cmUgLS1wYXRjaAorCQkJLS1leHBhbmQtdGFicyAtLWV4cGFuZC10YWJzPSAtLW5vLWV4cGFuZC10YWJzCisJCQkkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlCit9CisKK19naXRfc2hvd19icmFuY2ggKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gc2hvdy1icmFuY2gKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKK30KKworX2dpdF9zcGFyc2VfY2hlY2tvdXQgKCkKK3sKKwlsb2NhbCBzdWJjb21tYW5kcz0ibGlzdCBpbml0IHNldCBkaXNhYmxlIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwkJcmV0dXJuCisJZmkKKworCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJaW5pdCwtLSopCisJCV9fZ2l0Y29tcCAiLS1jb25lIgorCQk7OworCXNldCwtLSopCisJCV9fZ2l0Y29tcCAiLS1zdGRpbiIKKwkJOzsKKwkqKQorCQk7OworCWVzYWMKK30KKworX2dpdF9zdGFzaCAoKQoreworCWxvY2FsIHNhdmVfb3B0cz0nLS1hbGwgLS1rZWVwLWluZGV4IC0tbm8ta2VlcC1pbmRleCAtLXF1aWV0IC0tcGF0Y2ggLS1pbmNsdWRlLXVudHJhY2tlZCcKKwlsb2NhbCBzdWJjb21tYW5kcz0ncHVzaCBsaXN0IHNob3cgYXBwbHkgY2xlYXIgZHJvcCBwb3AgY3JlYXRlIGJyYW5jaCcKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIHNhdmUiKSIKKwlpZiBbIC1uICIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiLXAiKSIgXTsgdGhlbgorCQlzdWJjb21tYW5kPSJwdXNoIgorCWZpCisJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KKwkJY2FzZSAiJGN1ciIgaW4KKwkJLS0qKQorCQkJX19naXRjb21wICIkc2F2ZV9vcHRzIgorCQkJOzsKKwkJc2EqKQorCQkJaWYgWyAteiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzYXZlX29wdHMiKSIgXTsgdGhlbgorCQkJCV9fZ2l0Y29tcCAic2F2ZSIKKwkJCWZpCisJCQk7OworCQkqKQorCQkJaWYgWyAteiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzYXZlX29wdHMiKSIgXTsgdGhlbgorCQkJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwllbHNlCisJCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJCXB1c2gsLS0qKQorCQkJX19naXRjb21wICIkc2F2ZV9vcHRzIC0tbWVzc2FnZSIKKwkJCTs7CisJCXNhdmUsLS0qKQorCQkJX19naXRjb21wICIkc2F2ZV9vcHRzIgorCQkJOzsKKwkJYXBwbHksLS0qfHBvcCwtLSopCisJCQlfX2dpdGNvbXAgIi0taW5kZXggLS1xdWlldCIKKwkJCTs7CisJCWRyb3AsLS0qKQorCQkJX19naXRjb21wICItLXF1aWV0IgorCQkJOzsKKwkJbGlzdCwtLSopCisJCQlfX2dpdGNvbXAgIi0tbmFtZS1zdGF0dXMgLS1vbmVsaW5lIC0tcGF0Y2gtd2l0aC1zdGF0IgorCQkJOzsKKwkJc2hvdywtLSp8YnJhbmNoLC0tKikKKwkJCTs7CisJCWJyYW5jaCwqKQorCQkJaWYgWyAkY3dvcmQgLWVxIDMgXTsgdGhlbgorCQkJCV9fZ2l0X2NvbXBsZXRlX3JlZnMKKwkJCWVsc2UKKwkJCQlfX2dpdGNvbXBfbmwgIiQoX19naXQgc3Rhc2ggbGlzdCBcCisJCQkJCQl8IHNlZCAtbiAtZSAncy86LiovL3AnKSIKKwkJCWZpCisJCQk7OworCQlzaG93LCp8YXBwbHksKnxkcm9wLCp8cG9wLCopCisJCQlfX2dpdGNvbXBfbmwgIiQoX19naXQgc3Rhc2ggbGlzdCBcCisJCQkJCXwgc2VkIC1uIC1lICdzLzouKi8vcCcpIgorCQkJOzsKKwkJKikKKwkJCTs7CisJCWVzYWMKKwlmaQorfQorCitfZ2l0X3N1Ym1vZHVsZSAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJbG9jYWwgc3ViY29tbWFuZHM9ImFkZCBzdGF0dXMgaW5pdCBkZWluaXQgdXBkYXRlIHNldC1icmFuY2ggc2V0LXVybCBzdW1tYXJ5IGZvcmVhY2ggc3luYyBhYnNvcmJnaXRkaXJzIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQljYXNlICIkY3VyIiBpbgorCQktLSopCisJCQlfX2dpdGNvbXAgIi0tcXVpZXQiCisJCQk7OworCQkqKQorCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCQk7OworCQllc2FjCisJCXJldHVybgorCWZpCisKKwljYXNlICIkc3ViY29tbWFuZCwkY3VyIiBpbgorCWFkZCwtLSopCisJCV9fZ2l0Y29tcCAiLS1icmFuY2ggLS1mb3JjZSAtLW5hbWUgLS1yZWZlcmVuY2UgLS1kZXB0aCIKKwkJOzsKKwlzdGF0dXMsLS0qKQorCQlfX2dpdGNvbXAgIi0tY2FjaGVkIC0tcmVjdXJzaXZlIgorCQk7OworCWRlaW5pdCwtLSopCisJCV9fZ2l0Y29tcCAiLS1mb3JjZSAtLWFsbCIKKwkJOzsKKwl1cGRhdGUsLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1pbml0IC0tcmVtb3RlIC0tbm8tZmV0Y2gKKwkJCS0tcmVjb21tZW5kLXNoYWxsb3cgLS1uby1yZWNvbW1lbmQtc2hhbGxvdworCQkJLS1mb3JjZSAtLXJlYmFzZSAtLW1lcmdlIC0tcmVmZXJlbmNlIC0tZGVwdGggLS1yZWN1cnNpdmUgLS1qb2JzCisJCSIKKwkJOzsKKwlzZXQtYnJhbmNoLC0tKikKKwkJX19naXRjb21wICItLWRlZmF1bHQgLS1icmFuY2giCisJCTs7CisJc3VtbWFyeSwtLSopCisJCV9fZ2l0Y29tcCAiLS1jYWNoZWQgLS1maWxlcyAtLXN1bW1hcnktbGltaXQiCisJCTs7CisJZm9yZWFjaCwtLSp8c3luYywtLSopCisJCV9fZ2l0Y29tcCAiLS1yZWN1cnNpdmUiCisJCTs7CisJKikKKwkJOzsKKwllc2FjCit9CisKK19naXRfc3ZuICgpCit7CisJbG9jYWwgc3ViY29tbWFuZHM9IgorCQlpbml0IGZldGNoIGNsb25lIHJlYmFzZSBkY29tbWl0IGxvZyBmaW5kLXJldgorCQlzZXQtdHJlZSBjb21taXQtZGlmZiBpbmZvIGNyZWF0ZS1pZ25vcmUgcHJvcGdldAorCQlwcm9wbGlzdCBzaG93LWlnbm9yZSBzaG93LWV4dGVybmFscyBicmFuY2ggdGFnIGJsYW1lCisJCW1pZ3JhdGUgbWtkaXJzIHJlc2V0IGdjCisJCSIKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KKwkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJZWxzZQorCQlsb2NhbCByZW1vdGVfb3B0cz0iLS11c2VybmFtZT0gLS1jb25maWctZGlyPSAtLW5vLWF1dGgtY2FjaGUiCisJCWxvY2FsIGZjX29wdHM9IgorCQkJLS1mb2xsb3ctcGFyZW50IC0tYXV0aG9ycy1maWxlPSAtLXJlcGFjaz0KKwkJCS0tbm8tbWV0YWRhdGEgLS11c2Utc3ZtLXByb3BzIC0tdXNlLXN2bnN5bmMtcHJvcHMKKwkJCS0tbG9nLXdpbmRvdy1zaXplPSAtLW5vLWNoZWNrb3V0IC0tcXVpZXQKKwkJCS0tcmVwYWNrLWZsYWdzIC0tdXNlLWxvZy1hdXRob3IgLS1sb2NhbHRpbWUKKwkJCS0tYWRkLWF1dGhvci1mcm9tCisJCQktLXJlY3Vyc2l2ZQorCQkJLS1pZ25vcmUtcGF0aHM9IC0taW5jbHVkZS1wYXRocz0gJHJlbW90ZV9vcHRzCisJCQkiCisJCWxvY2FsIGluaXRfb3B0cz0iCisJCQktLXRlbXBsYXRlPSAtLXNoYXJlZD0gLS10cnVuaz0gLS10YWdzPQorCQkJLS1icmFuY2hlcz0gLS1zdGRsYXlvdXQgLS1taW5pbWl6ZS11cmwKKwkJCS0tbm8tbWV0YWRhdGEgLS11c2Utc3ZtLXByb3BzIC0tdXNlLXN2bnN5bmMtcHJvcHMKKwkJCS0tcmV3cml0ZS1yb290PSAtLXByZWZpeD0gJHJlbW90ZV9vcHRzCisJCQkiCisJCWxvY2FsIGNtdF9vcHRzPSIKKwkJCS0tZWRpdCAtLXJtZGlyIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tY29weS1zaW1pbGFyaXR5PQorCQkJIgorCisJCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJCWZldGNoLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0gLS1mZXRjaC1hbGwgJGZjX29wdHMiCisJCQk7OworCQljbG9uZSwtLSopCisJCQlfX2dpdGNvbXAgIi0tcmV2aXNpb249ICRmY19vcHRzICRpbml0X29wdHMiCisJCQk7OworCQlpbml0LC0tKikKKwkJCV9fZ2l0Y29tcCAiJGluaXRfb3B0cyIKKwkJCTs7CisJCWRjb21taXQsLS0qKQorCQkJX19naXRjb21wICIKKwkJCQktLW1lcmdlIC0tc3RyYXRlZ3k9IC0tdmVyYm9zZSAtLWRyeS1ydW4KKwkJCQktLWZldGNoLWFsbCAtLW5vLXJlYmFzZSAtLWNvbW1pdC11cmwKKwkJCQktLXJldmlzaW9uIC0taW50ZXJhY3RpdmUgJGNtdF9vcHRzICRmY19vcHRzCisJCQkJIgorCQkJOzsKKwkJc2V0LXRyZWUsLS0qKQorCQkJX19naXRjb21wICItLXN0ZGluICRjbXRfb3B0cyAkZmNfb3B0cyIKKwkJCTs7CisJCWNyZWF0ZS1pZ25vcmUsLS0qfHByb3BnZXQsLS0qfHByb3BsaXN0LC0tKnxzaG93LWlnbm9yZSwtLSp8XAorCQlzaG93LWV4dGVybmFscywtLSp8bWtkaXJzLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0iCisJCQk7OworCQlsb2csLS0qKQorCQkJX19naXRjb21wICIKKwkJCQktLWxpbWl0PSAtLXJldmlzaW9uPSAtLXZlcmJvc2UgLS1pbmNyZW1lbnRhbAorCQkJCS0tb25lbGluZSAtLXNob3ctY29tbWl0IC0tbm9uLXJlY3Vyc2l2ZQorCQkJCS0tYXV0aG9ycy1maWxlPSAtLWNvbG9yCisJCQkJIgorCQkJOzsKKwkJcmViYXNlLC0tKikKKwkJCV9fZ2l0Y29tcCAiCisJCQkJLS1tZXJnZSAtLXZlcmJvc2UgLS1zdHJhdGVneT0gLS1sb2NhbAorCQkJCS0tZmV0Y2gtYWxsIC0tZHJ5LXJ1biAkZmNfb3B0cworCQkJCSIKKwkJCTs7CisJCWNvbW1pdC1kaWZmLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1tZXNzYWdlPSAtLWZpbGU9IC0tcmV2aXNpb249ICRjbXRfb3B0cyIKKwkJCTs7CisJCWluZm8sLS0qKQorCQkJX19naXRjb21wICItLXVybCIKKwkJCTs7CisJCWJyYW5jaCwtLSopCisJCQlfX2dpdGNvbXAgIi0tZHJ5LXJ1biAtLW1lc3NhZ2UgLS10YWciCisJCQk7OworCQl0YWcsLS0qKQorCQkJX19naXRjb21wICItLWRyeS1ydW4gLS1tZXNzYWdlIgorCQkJOzsKKwkJYmxhbWUsLS0qKQorCQkJX19naXRjb21wICItLWdpdC1mb3JtYXQiCisJCQk7OworCQltaWdyYXRlLC0tKikKKwkJCV9fZ2l0Y29tcCAiCisJCQkJLS1jb25maWctZGlyPSAtLWlnbm9yZS1wYXRocz0gLS1taW5pbWl6ZQorCQkJCS0tbm8tYXV0aC1jYWNoZSAtLXVzZXJuYW1lPQorCQkJCSIKKwkJCTs7CisJCXJlc2V0LC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0gLS1wYXJlbnQiCisJCQk7OworCQkqKQorCQkJOzsKKwkJZXNhYworCWZpCit9CisKK19naXRfdGFnICgpCit7CisJbG9jYWwgaSBjPTEgZj0wCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLWR8LS1kZWxldGV8LXZ8LS12ZXJpZnkpCisJCQlfX2dpdGNvbXBfZGlyZWN0ICIkKF9fZ2l0X3RhZ3MgIiIgIiRjdXIiICIgIikiCisJCQlyZXR1cm4KKwkJCTs7CisJCS1mKQorCQkJZj0xCisJCQk7OworCQllc2FjCisJCSgoYysrKSkKKwlkb25lCisKKwljYXNlICIkcHJldiIgaW4KKwktbXwtRikKKwkJOzsKKwktKnx0YWcpCisJCWlmIFsgJGYgPSAxIF07IHRoZW4KKwkJCV9fZ2l0Y29tcF9kaXJlY3QgIiQoX19naXRfdGFncyAiIiAiJGN1ciIgIiAiKSIKKwkJZmkKKwkJOzsKKwkqKQorCQlfX2dpdF9jb21wbGV0ZV9yZWZzCisJCTs7CisJZXNhYworCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluIHRhZworCQk7OworCWVzYWMKK30KKworX2dpdF93aGF0Y2hhbmdlZCAoKQoreworCV9naXRfbG9nCit9CisKK19fZ2l0X2NvbXBsZXRlX3dvcmt0cmVlX3BhdGhzICgpCit7CisJbG9jYWwgSUZTPSQnXG4nCisJX19naXRjb21wX25sICIkKGdpdCB3b3JrdHJlZSBsaXN0IC0tcG9yY2VsYWluIHwKKwkJIyBTa2lwIHRoZSBmaXJzdCBlbnRyeTogaXQncyB0aGUgcGF0aCBvZiB0aGUgbWFpbiB3b3JrdHJlZSwKKwkJIyB3aGljaCBjYW4ndCBiZSBtb3ZlZCwgcmVtb3ZlZCwgbG9ja2VkLCBldGMuCisJCXNlZCAtbiAtZSAnMiwkIHMvXndvcmt0cmVlIC8vcCcpIgorfQorCitfZ2l0X3dvcmt0cmVlICgpCit7CisJbG9jYWwgc3ViY29tbWFuZHM9ImFkZCBsaXN0IGxvY2sgbW92ZSBwcnVuZSByZW1vdmUgdW5sb2NrIgorCWxvY2FsIHN1YmNvbW1hbmQgc3ViY29tbWFuZF9pZHgKKworCXN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lIC0tc2hvdy1pZHggIiRzdWJjb21tYW5kcyIpIgorCXN1YmNvbW1hbmRfaWR4PSIke3N1YmNvbW1hbmQlICp9IgorCXN1YmNvbW1hbmQ9IiR7c3ViY29tbWFuZCMqIH0iCisKKwljYXNlICIkc3ViY29tbWFuZCwkY3VyIiBpbgorCSwqKQorCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwkJOzsKKwkqLC0tKikKKwkJX19naXRjb21wX2J1aWx0aW4gd29ya3RyZWVfJHN1YmNvbW1hbmQKKwkJOzsKKwlhZGQsKikJIyB1c2FnZTogZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0KKwkJIyBIZXJlIHdlIGFyZSBub3QgY29tcGxldGluZyBhbiAtLW9wdGlvbiwgaXQncyBlaXRoZXIgdGhlCisJCSMgcGF0aCBvciBhIHJlZi4KKwkJY2FzZSAiJHByZXYiIGluCisJCS1ifC1CKQkjIENvbXBsZXRlIHJlZnMgZm9yIGJyYW5jaCB0byBiZSBjcmVhdGVkL3Jlc2V0ZWQuCisJCQlfX2dpdF9jb21wbGV0ZV9yZWZzCisJCQk7OworCQktKikJIyBUaGUgcHJldmlvdXMgd29yZCBpcyBhbiAtb3wtLW9wdGlvbiB3aXRob3V0IGFuCisJCQkjIHVuc3R1Y2sgYXJndW1lbnQ6IGhhdmUgdG8gY29tcGxldGUgdGhlIHBhdGggZm9yCisJCQkjIHRoZSBuZXcgd29ya3RyZWUsIHNvIGRvbid0IGxpc3QgYW55dGhpbmcsIGJ1dCBsZXQKKwkJCSMgQmFzaCBmYWxsIGJhY2sgdG8gZmlsZW5hbWUgY29tcGxldGlvbi4KKwkJCTs7CisJCSopCSMgVGhlIHByZXZpb3VzIHdvcmQgaXMgbm90IGFuIC0tb3B0aW9uLCBzbyBpdCBtdXN0CisJCQkjIGJlIGVpdGhlciB0aGUgJ2FkZCcgc3ViY29tbWFuZCwgdGhlIHVuc3R1Y2sKKwkJCSMgYXJndW1lbnQgb2YgYW4gb3B0aW9uIChlLmcuIGJyYW5jaCBmb3IgLWJ8LUIpLCBvcgorCQkJIyB0aGUgcGF0aCBmb3IgdGhlIG5ldyB3b3JrdHJlZS4KKwkJCWlmIFsgJGN3b3JkIC1lcSAkKChzdWJjb21tYW5kX2lkeCsxKSkgXTsgdGhlbgorCQkJCSMgUmlnaHQgYWZ0ZXIgdGhlICdhZGQnIHN1YmNvbW1hbmQ6IGhhdmUgdG8KKwkJCQkjIGNvbXBsZXRlIHRoZSBwYXRoLCBzbyBmYWxsIGJhY2sgdG8gQmFzaAorCQkJCSMgZmlsZW5hbWUgY29tcGxldGlvbi4KKwkJCQk6CisJCQllbHNlCisJCQkJY2FzZSAiJHt3b3Jkc1tjd29yZC0yXX0iIGluCisJCQkJLWJ8LUIpCSMgQWZ0ZXIgJy1iIDxicmFuY2g+JzogaGF2ZSB0bworCQkJCQkjIGNvbXBsZXRlIHRoZSBwYXRoLCBzbyBmYWxsIGJhY2sKKwkJCQkJIyB0byBCYXNoIGZpbGVuYW1lIGNvbXBsZXRpb24uCisJCQkJCTs7CisJCQkJKikJIyBBZnRlciB0aGUgcGF0aDogaGF2ZSB0byBjb21wbGV0ZQorCQkJCQkjIHRoZSByZWYgdG8gYmUgY2hlY2tlZCBvdXQuCisJCQkJCV9fZ2l0X2NvbXBsZXRlX3JlZnMKKwkJCQkJOzsKKwkJCQllc2FjCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQk7OworCWxvY2ssKnxyZW1vdmUsKnx1bmxvY2ssKikKKwkJX19naXRfY29tcGxldGVfd29ya3RyZWVfcGF0aHMKKwkJOzsKKwltb3ZlLCopCisJCWlmIFsgJGN3b3JkIC1lcSAkKChzdWJjb21tYW5kX2lkeCsxKSkgXTsgdGhlbgorCQkJIyBUaGUgZmlyc3QgcGFyYW1ldGVyIG11c3QgYmUgYW4gZXhpc3Rpbmcgd29ya2luZworCQkJIyB0cmVlIHRvIGJlIG1vdmVkLgorCQkJX19naXRfY29tcGxldGVfd29ya3RyZWVfcGF0aHMKKwkJZWxzZQorCQkJIyBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgZGVzdGluYXRpb246IGl0IGNvdWxkCisJCQkjIGJlIGFueSBwYXRoLCBzbyBkb24ndCBsaXN0IGFueXRoaW5nLCBidXQgbGV0IEJhc2gKKwkJCSMgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGNvbXBsZXRpb24uCisJCQk6CisJCWZpCisJCTs7CisJZXNhYworfQorCitfX2dpdF9jb21wbGV0ZV9jb21tb24gKCkgeworCWxvY2FsIGNvbW1hbmQ9IiQxIgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcF9idWlsdGluICIkY29tbWFuZCIKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0X2NtZHNfd2l0aF9wYXJzZW9wdF9oZWxwZXI9CitfX2dpdF9zdXBwb3J0X3BhcnNlb3B0X2hlbHBlciAoKSB7CisJdGVzdCAtbiAiJF9fZ2l0X2NtZHNfd2l0aF9wYXJzZW9wdF9oZWxwZXIiIHx8CisJCV9fZ2l0X2NtZHNfd2l0aF9wYXJzZW9wdF9oZWxwZXI9IiQoX19naXQgLS1saXN0LWNtZHM9cGFyc2VvcHQpIgorCisJY2FzZSAiICRfX2dpdF9jbWRzX3dpdGhfcGFyc2VvcHRfaGVscGVyICIgaW4KKwkqIiAkMSAiKikKKwkJcmV0dXJuIDAKKwkJOzsKKwkqKQorCQlyZXR1cm4gMQorCQk7OworCWVzYWMKK30KKworX19naXRfY29tcGxldGVfY29tbWFuZCAoKSB7CisJbG9jYWwgY29tbWFuZD0iJDEiCisJbG9jYWwgY29tcGxldGlvbl9mdW5jPSJfZ2l0XyR7Y29tbWFuZC8vLS9ffSIKKwlpZiAhIGRlY2xhcmUgLWYgJGNvbXBsZXRpb25fZnVuYyA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmCisJCWRlY2xhcmUgLWYgX2NvbXBsZXRpb25fbG9hZGVyID4vZGV2L251bGwgMj4vZGV2L251bGwKKwl0aGVuCisJCV9jb21wbGV0aW9uX2xvYWRlciAiZ2l0LSRjb21tYW5kIgorCWZpCisJaWYgZGVjbGFyZSAtZiAkY29tcGxldGlvbl9mdW5jID4vZGV2L251bGwgMj4vZGV2L251bGwKKwl0aGVuCisJCSRjb21wbGV0aW9uX2Z1bmMKKwkJcmV0dXJuIDAKKwllbGlmIF9fZ2l0X3N1cHBvcnRfcGFyc2VvcHRfaGVscGVyICIkY29tbWFuZCIKKwl0aGVuCisJCV9fZ2l0X2NvbXBsZXRlX2NvbW1vbiAiJGNvbW1hbmQiCisJCXJldHVybiAwCisJZWxzZQorCQlyZXR1cm4gMQorCWZpCit9CisKK19fZ2l0X21haW4gKCkKK3sKKwlsb2NhbCBpIGM9MSBjb21tYW5kIF9fZ2l0X2RpciBfX2dpdF9yZXBvX3BhdGgKKwlsb2NhbCBfX2dpdF9DX2FyZ3MgQ19hcmdzX2NvdW50PTAKKworCXdoaWxlIFsgJGMgLWx0ICRjd29yZCBdOyBkbworCQlpPSIke3dvcmRzW2NdfSIKKwkJY2FzZSAiJGkiIGluCisJCS0tZ2l0LWRpcj0qKSBfX2dpdF9kaXI9IiR7aSMtLWdpdC1kaXI9fSIgOzsKKwkJLS1naXQtZGlyKSAgICgoYysrKSkgOyBfX2dpdF9kaXI9IiR7d29yZHNbY119IiA7OworCQktLWJhcmUpICAgICAgX19naXRfZGlyPSIuIiA7OworCQktLWhlbHApIGNvbW1hbmQ9ImhlbHAiOyBicmVhayA7OworCQktY3wtLXdvcmstdHJlZXwtLW5hbWVzcGFjZSkgKChjKyspKSA7OworCQktQykJX19naXRfQ19hcmdzW0NfYXJnc19jb3VudCsrXT0tQworCQkJKChjKyspKQorCQkJX19naXRfQ19hcmdzW0NfYXJnc19jb3VudCsrXT0iJHt3b3Jkc1tjXX0iCisJCQk7OworCQktKikgOzsKKwkJKikgY29tbWFuZD0iJGkiOyBicmVhayA7OworCQllc2FjCisJCSgoYysrKSkKKwlkb25lCisKKwlpZiBbIC16ICIkY29tbWFuZCIgXTsgdGhlbgorCQljYXNlICIkcHJldiIgaW4KKwkJLS1naXQtZGlyfC1DfC0td29yay10cmVlKQorCQkJIyB0aGVzZSBuZWVkIGEgcGF0aCBhcmd1bWVudCwgbGV0J3MgZmFsbCBiYWNrIHRvCisJCQkjIEJhc2ggZmlsZW5hbWUgY29tcGxldGlvbgorCQkJcmV0dXJuCisJCQk7OworCQktYykKKwkJCV9fZ2l0X2NvbXBsZXRlX2NvbmZpZ192YXJpYWJsZV9uYW1lX2FuZF92YWx1ZQorCQkJcmV0dXJuCisJCQk7OworCQktLW5hbWVzcGFjZSkKKwkJCSMgd2UgZG9uJ3Qgc3VwcG9ydCBjb21wbGV0aW5nIHRoZXNlIG9wdGlvbnMnIGFyZ3VtZW50cworCQkJcmV0dXJuCisJCQk7OworCQllc2FjCisJCWNhc2UgIiRjdXIiIGluCisJCS0tKikgICBfX2dpdGNvbXAgIgorCQkJLS1wYWdpbmF0ZQorCQkJLS1uby1wYWdlcgorCQkJLS1naXQtZGlyPQorCQkJLS1iYXJlCisJCQktLXZlcnNpb24KKwkJCS0tZXhlYy1wYXRoCisJCQktLWV4ZWMtcGF0aD0KKwkJCS0taHRtbC1wYXRoCisJCQktLW1hbi1wYXRoCisJCQktLWluZm8tcGF0aAorCQkJLS13b3JrLXRyZWU9CisJCQktLW5hbWVzcGFjZT0KKwkJCS0tbm8tcmVwbGFjZS1vYmplY3RzCisJCQktLWhlbHAKKwkJCSIKKwkJCTs7CisJCSopCisJCQlpZiB0ZXN0IC1uICIkR0lUX1RFU1RJTkdfUE9SQ0VMQUlOX0NPTU1BTkRfTElTVCIKKwkJCXRoZW4KKwkJCQlfX2dpdGNvbXAgIiRHSVRfVEVTVElOR19QT1JDRUxBSU5fQ09NTUFORF9MSVNUIgorCQkJZWxzZQorCQkJCV9fZ2l0Y29tcCAiJChfX2dpdCAtLWxpc3QtY21kcz1saXN0LW1haW5wb3JjZWxhaW4sb3RoZXJzLG5vaGVscGVycyxhbGlhcyxsaXN0LWNvbXBsZXRlLGNvbmZpZykiCisJCQlmaQorCQkJOzsKKwkJZXNhYworCQlyZXR1cm4KKwlmaQorCisJX19naXRfY29tcGxldGVfY29tbWFuZCAiJGNvbW1hbmQiICYmIHJldHVybgorCisJbG9jYWwgZXhwYW5zaW9uPSQoX19naXRfYWxpYXNlZF9jb21tYW5kICIkY29tbWFuZCIpCisJaWYgWyAtbiAiJGV4cGFuc2lvbiIgXTsgdGhlbgorCQl3b3Jkc1sxXT0kZXhwYW5zaW9uCisJCV9fZ2l0X2NvbXBsZXRlX2NvbW1hbmQgIiRleHBhbnNpb24iCisJZmkKK30KKworX19naXRrX21haW4gKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWxvY2FsIF9fZ2l0X3JlcG9fcGF0aAorCV9fZ2l0X2ZpbmRfcmVwb19wYXRoCisKKwlsb2NhbCBtZXJnZT0iIgorCWlmIFsgLWYgIiRfX2dpdF9yZXBvX3BhdGgvTUVSR0VfSEVBRCIgXTsgdGhlbgorCQltZXJnZT0iLS1tZXJnZSIKKwlmaQorCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJJF9fZ2l0X2xvZ19jb21tb25fb3B0aW9ucworCQkJJF9fZ2l0X2xvZ19naXRrX29wdGlvbnMKKwkJCSRtZXJnZQorCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdAorfQorCitpZiBbWyAtbiAke1pTSF9WRVJTSU9OLX0gXV0gJiYKKyAgICMgRG9uJ3QgZGVmaW5lIHRoZXNlIGZ1bmN0aW9ucyB3aGVuIHNvdXJjZWQgZnJvbSAnZ2l0LWNvbXBsZXRpb24uenNoJywKKyAgICMgaXQgaGFzIGl0cyBvd24gaW1wbGVtZW50YXRpb25zLgorICAgW1sgLXogJHtHSVRfU09VUkNJTkdfWlNIX0NPTVBMRVRJT04tfSBdXTsgdGhlbgorCWVjaG8gIldBUk5JTkc6IHRoaXMgc2NyaXB0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzZWUgZ2l0LWNvbXBsZXRpb24uenNoIiAxPiYyCisKKwlhdXRvbG9hZCAtVSArWCBjb21waW5pdCAmJiBjb21waW5pdAorCisJX19naXRjb21wICgpCisJeworCQllbXVsYXRlIC1MIHpzaAorCisJCWxvY2FsIGN1cl89IiR7My0kY3VyfSIKKworCQljYXNlICIkY3VyXyIgaW4KKwkJLS0qPSkKKwkJCTs7CisJCSopCisJCQlsb2NhbCBjIElGUz0kJyBcdFxuJworCQkJbG9jYWwgLWEgYXJyYXkKKwkJCWZvciBjIGluICR7PTF9OyBkbworCQkJCWM9IiRjJHs0LX0iCisJCQkJY2FzZSAkYyBpbgorCQkJCS0tKj0qfCouKSA7OworCQkJCSopIGM9IiRjICIgOzsKKwkJCQllc2FjCisJCQkJYXJyYXlbJHsjYXJyYXlbQF19KzFdPSIkYyIKKwkJCWRvbmUKKwkJCWNvbXBzZXQgLVAgJypbPTpdJworCQkJY29tcGFkZCAtUSAtUyAnJyAtcCAiJHsyLX0iIC1hIC0tIGFycmF5ICYmIF9yZXQ9MAorCQkJOzsKKwkJZXNhYworCX0KKworCV9fZ2l0Y29tcF9kaXJlY3QgKCkKKwl7CisJCWVtdWxhdGUgLUwgenNoCisKKwkJbG9jYWwgSUZTPSQnXG4nCisJCWNvbXBzZXQgLVAgJypbPTpdJworCQljb21wYWRkIC1RIC0tICR7PTF9ICYmIF9yZXQ9MAorCX0KKworCV9fZ2l0Y29tcF9ubCAoKQorCXsKKwkJZW11bGF0ZSAtTCB6c2gKKworCQlsb2NhbCBJRlM9JCdcbicKKwkJY29tcHNldCAtUCAnKls9Ol0nCisJCWNvbXBhZGQgLVEgLVMgIiR7NC0gfSIgLXAgIiR7Mi19IiAtLSAkez0xfSAmJiBfcmV0PTAKKwl9CisKKwlfX2dpdGNvbXBfZmlsZV9kaXJlY3QgKCkKKwl7CisJCWVtdWxhdGUgLUwgenNoCisKKwkJbG9jYWwgSUZTPSQnXG4nCisJCWNvbXBzZXQgLVAgJypbPTpdJworCQljb21wYWRkIC1mIC0tICR7PTF9ICYmIF9yZXQ9MAorCX0KKworCV9fZ2l0Y29tcF9maWxlICgpCisJeworCQllbXVsYXRlIC1MIHpzaAorCisJCWxvY2FsIElGUz0kJ1xuJworCQljb21wc2V0IC1QICcqWz06XScKKwkJY29tcGFkZCAtcCAiJHsyLX0iIC1mIC0tICR7PTF9ICYmIF9yZXQ9MAorCX0KKworCV9naXQgKCkKKwl7CisJCWxvY2FsIF9yZXQ9MSBjdXIgY3dvcmQgcHJldgorCQljdXI9JHt3b3Jkc1tDVVJSRU5UXX0KKwkJcHJldj0ke3dvcmRzW0NVUlJFTlQtMV19CisJCWxldCBjd29yZD1DVVJSRU5ULTEKKwkJZW11bGF0ZSBrc2ggLWMgX18ke3NlcnZpY2V9X21haW4KKwkJbGV0IF9yZXQgJiYgX2RlZmF1bHQgJiYgX3JldD0wCisJCXJldHVybiBfcmV0CisJfQorCisJY29tcGRlZiBfZ2l0IGdpdCBnaXRrCisJcmV0dXJuCitmaQorCitfX2dpdF9mdW5jX3dyYXAgKCkKK3sKKwlsb2NhbCBjdXIgd29yZHMgY3dvcmQgcHJldgorCV9nZXRfY29tcF93b3Jkc19ieV9yZWYgLW4gPTogY3VyIHdvcmRzIGN3b3JkIHByZXYKKwkkMQorfQorCisjIFNldHVwIGNvbXBsZXRpb24gZm9yIGNlcnRhaW4gZnVuY3Rpb25zIGRlZmluZWQgYWJvdmUgYnkgc2V0dGluZyBjb21tb24KKyMgdmFyaWFibGVzIGFuZCB3b3JrYXJvdW5kcy4KKyMgVGhpcyBpcyBOT1QgYSBwdWJsaWMgZnVuY3Rpb247IHVzZSBhdCB5b3VyIG93biByaXNrLgorX19naXRfY29tcGxldGUgKCkKK3sKKwlsb2NhbCB3cmFwcGVyPSJfX2dpdF93cmFwJHsyfSIKKwlldmFsICIkd3JhcHBlciAoKSB7IF9fZ2l0X2Z1bmNfd3JhcCAkMiA7IH0iCisJY29tcGxldGUgLW8gYmFzaGRlZmF1bHQgLW8gZGVmYXVsdCAtbyBub3NwYWNlIC1GICR3cmFwcGVyICQxIDI+L2Rldi9udWxsIFwKKwkJfHwgY29tcGxldGUgLW8gZGVmYXVsdCAtbyBub3NwYWNlIC1GICR3cmFwcGVyICQxCit9CisKKyMgd3JhcHBlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK19naXQgKCkKK3sKKwlfX2dpdF93cmFwX19naXRfbWFpbgorfQorCisjIHdyYXBwZXIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CitfZ2l0ayAoKQoreworCV9fZ2l0X3dyYXBfX2dpdGtfbWFpbgorfQorCitfX2dpdF9jb21wbGV0ZSBnaXQgX19naXRfbWFpbgorX19naXRfY29tcGxldGUgZ2l0ayBfX2dpdGtfbWFpbgorCisjIFRoZSBmb2xsb3dpbmcgYXJlIG5lY2Vzc2FyeSBvbmx5IGZvciBDeWd3aW4sIGFuZCBvbmx5IGFyZSBuZWVkZWQKKyMgd2hlbiB0aGUgdXNlciBoYXMgdGFiLWNvbXBsZXRlZCB0aGUgZXhlY3V0YWJsZSBuYW1lIGFuZCBjb25zZXF1ZW50bHkKKyMgaW5jbHVkZWQgdGhlICcuZXhlJyBzdWZmaXguCisjCitpZiBbIEN5Z3dpbiA9ICIkKHVuYW1lIC1vIDI+L2Rldi9udWxsKSIgXTsgdGhlbgorX19naXRfY29tcGxldGUgZ2l0LmV4ZSBfX2dpdF9tYWluCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLnRjc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24udGNzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc5MGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLnRjc2gKQEAgLTAsMCArMSwxMjYgQEAKKyMgdGNzaCBjb21wbGV0aW9uIHN1cHBvcnQgZm9yIGNvcmUgR2l0LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgTWFyYyBLaG91emFtIDxtYXJjLmtob3V6YW1AZ21haWwuY29tPgorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4wLgorIworIyBXaGVuIHNvdXJjZWQsIHRoaXMgc2NyaXB0IHdpbGwgZ2VuZXJhdGUgYSBuZXcgc2NyaXB0IHRoYXQgdXNlcworIyB0aGUgZ2l0LWNvbXBsZXRpb24uYmFzaCBzY3JpcHQgcHJvdmlkZWQgYnkgY29yZSBHaXQuICBUaGlzIG5ldworIyBzY3JpcHQgY2FuIGJlIHVzZWQgYnkgdGNzaCB0byBwZXJmb3JtIGdpdCBjb21wbGV0aW9uLgorIyBUaGUgY3VycmVudCBzY3JpcHQgYWxzbyBpc3N1ZXMgdGhlIG5lY2Vzc2FyeSB0Y3NoICdjb21wbGV0ZScKKyMgY29tbWFuZHMuCisjCisjIFRvIHVzZSB0aGlzIGNvbXBsZXRpb24gc2NyaXB0OgorIworIyAgICAwKSBZb3UgbmVlZCB0Y3NoIDYuMTYuMDAgb3IgbmV3ZXIuCisjICAgIDEpIENvcHkgYm90aCB0aGlzIGZpbGUgYW5kIHRoZSBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IHRvICR7SE9NRX0uCisjICAgICAgIFlvdSBfbXVzdF8gdXNlIHRoZSBuYW1lICR7SE9NRX0vLmdpdC1jb21wbGV0aW9uLmJhc2ggZm9yIHRoZQorIyAgICAgICBiYXNoIHNjcmlwdC4KKyMgICAgICAgKGUuZy4gfi8uZ2l0LWNvbXBsZXRpb24udGNzaCBhbmQgfi8uZ2l0LWNvbXBsZXRpb24uYmFzaCkuCisjICAgIDIpIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciAudGNzaHJjLy5jc2hyYzoKKyMgICAgICAgIHNvdXJjZSB+Ly5naXQtY29tcGxldGlvbi50Y3NoCisjICAgIDMpIEZvciBjb21wbGV0aW9uIHNpbWlsYXIgdG8gYmFzaCwgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWxzbworIyAgICAgICBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgLnRjc2hyYy8uY3NocmM6CisjICAgICAgICBzZXQgYXV0b2xpc3Q9YW1iaWd1b3VzCisjICAgICAgIEl0IHdpbGwgdGVsbCB0Y3NoIHRvIGxpc3QgdGhlIHBvc3NpYmxlIGNvbXBsZXRpb24gY2hvaWNlcy4KKworc2V0IF9fZ2l0X3Rjc2hfY29tcGxldGlvbl92ZXJzaW9uID0gYFxlY2hvICR7dGNzaH0gfCBcc2VkICdzL1wuLyAvZydgCitpZiAoICR7X19naXRfdGNzaF9jb21wbGV0aW9uX3ZlcnNpb25bMV19IDwgNiB8fCBcCisgICAgICggJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fdmVyc2lvblsxXX0gPT0gNiAmJiBcCisgICAgICAgJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fdmVyc2lvblsyXX0gPCAxNiApICkgdGhlbgorCWVjaG8gImdpdC1jb21wbGV0aW9uLnRjc2g6IFlvdXIgdmVyc2lvbiBvZiB0Y3NoIGlzIHRvbyBvbGQsIHlvdSBuZWVkIHZlcnNpb24gNi4xNi4wMCBvciBuZXdlci4gIEdpdCBjb21wbGV0aW9uIHdpbGwgbm90IHdvcmsuIgorCWV4aXQKK2VuZGlmCit1bnNldCBfX2dpdF90Y3NoX2NvbXBsZXRpb25fdmVyc2lvbgorCitzZXQgX19naXRfdGNzaF9jb21wbGV0aW9uX29yaWdpbmFsX3NjcmlwdCA9ICR7SE9NRX0vLmdpdC1jb21wbGV0aW9uLmJhc2gKK3NldCBfX2dpdF90Y3NoX2NvbXBsZXRpb25fc2NyaXB0ID0gJHtIT01FfS8uZ2l0LWNvbXBsZXRpb24udGNzaC5iYXNoCisKKyMgQ2hlY2sgdGhhdCB0aGUgdXNlciBwdXQgdGhlIHNjcmlwdCBpbiB0aGUgcmlnaHQgcGxhY2UKK2lmICggISAtZSAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl9vcmlnaW5hbF9zY3JpcHR9ICkgdGhlbgorCWVjaG8gImdpdC1jb21wbGV0aW9uLnRjc2g6IENhbm5vdCBmaW5kOiAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl9vcmlnaW5hbF9zY3JpcHR9LiAgR2l0IGNvbXBsZXRpb24gd2lsbCBub3Qgd29yay4iCisJZXhpdAorZW5kaWYKKworY2F0IDw8IEVPRiA+ISAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl9zY3JpcHR9CisjIWJhc2gKKyMKKyMgVGhpcyBzY3JpcHQgaXMgR0VORVJBVEVEIGFuZCB3aWxsIGJlIG92ZXJ3cml0dGVuIGF1dG9tYXRpY2FsbHkuCisjIERvIG5vdCBtb2RpZnkgaXQgZGlyZWN0bHkuICBJbnN0ZWFkLCBtb2RpZnkgZ2l0LWNvbXBsZXRpb24udGNzaAorIyBhbmQgc291cmNlIGl0IGFnYWluLgorCitzb3VyY2UgJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fb3JpZ2luYWxfc2NyaXB0fQorCisjIFJlbW92ZSB0aGUgY29sb24gYXMgYSBjb21wbGV0aW9uIHNlcGFyYXRvciBiZWNhdXNlIHRjc2ggY2Fubm90IGhhbmRsZSBpdAorQ09NUF9XT1JEQlJFQUtTPVwke0NPTVBfV09SREJSRUFLUy8vOn0KKworIyBGb3IgZmlsZSBjb21wbGV0aW9uLCB0Y3NoIG5lZWRzIHRoZSAnLycgdG8gYmUgYXBwZW5kZWQgdG8gZGlyZWN0b3JpZXMuCisjIEJ5IGRlZmF1bHQsIHRoZSBiYXNoIHNjcmlwdCBkb2VzIG5vdCBkbyB0aGF0LgorIyBXZSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IHVzaW5nIHRoZSBiZWxvdyBjb21wYXRpYmlsaXR5CisjIG1ldGhvZCBvZiB0aGUgZ2l0LWNvbXBsZXRpb24uYmFzaCBzY3JpcHQuCitfX2dpdF9pbmRleF9maWxlX2xpc3RfZmlsdGVyICgpCit7CisJX19naXRfaW5kZXhfZmlsZV9saXN0X2ZpbHRlcl9jb21wYXQKK30KKworIyBTZXQgQ09NUF9XT1JEUyBpbiBhIHdheSB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBiYXNoIHNjcmlwdC4KK0NPTVBfV09SRFM9KFwkMikKKworIyBUaGUgY3Vyc29yIGlzIGF0IHRoZSBlbmQgb2YgcGFyYW1ldGVyICMxLgorIyBXZSBtdXN0IGNoZWNrIGZvciBhIHNwYWNlIGFzIHRoZSBsYXN0IGNoYXJhY3RlciB3aGljaCB3aWxsCisjIHRlbGwgdXMgdGhhdCB0aGUgcHJldmlvdXMgd29yZCBpcyBjb21wbGV0ZSBhbmQgdGhlIGN1cnNvcgorIyBpcyBvbiB0aGUgbmV4dCB3b3JkLgoraWYgWyAiXCR7MjogLTF9IiA9PSAiICIgXTsgdGhlbgorCSMgVGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgc3BhY2UsIHNvIG91ciBsb2NhdGlvbiBpcyBhdCB0aGUgZW5kCisJIyBvZiB0aGUgY29tbWFuZC1saW5lIGFycmF5CisJQ09NUF9DV09SRD1cJHsjQ09NUF9XT1JEU1tAXX0KK2Vsc2UKKwkjIFRoZSBsYXN0IGNoYXJhY3RlciBpcyBub3QgYSBzcGFjZSwgc28gb3VyIGxvY2F0aW9uIGlzIG9uIHRoZQorCSMgbGFzdCB3b3JkIG9mIHRoZSBjb21tYW5kLWxpbmUgYXJyYXksIHNvIHdlIG11c3QgZGVjcmVtZW50IHRoZQorCSMgY291bnQgYnkgMQorCUNPTVBfQ1dPUkQ9XCQoKFwkeyNDT01QX1dPUkRTW0BdfS0xKSkKK2ZpCisKKyMgQ2FsbCBfZ2l0KCkgb3IgX2dpdGsoKSBvZiB0aGUgYmFzaCBzY3JpcHQsIGJhc2VkIG9uIHRoZSBmaXJzdCBhcmd1bWVudAorX1wkezF9CisKK0lGUz1cJCdcbicKK2lmIFsgXCR7I0NPTVBSRVBMWVsqXX0gLWVxIDAgXTsgdGhlbgorCSMgTm8gY29tcGxldGlvbnMgc3VnZ2VzdGVkLiAgSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRjc2ggdG8gcGVyZm9ybQorCSMgc3RhbmRhcmQgZmlsZSBjb21wbGV0aW9uLiAgSG93ZXZlciwgdGhlcmUgZG9lcyBub3Qgc2VlbSB0byBiZSB3YXkKKwkjIHRvIHRlbGwgdGNzaCB0byBkbyB0aGF0LiAgVG8gaGVscCB0aGUgdXNlciwgd2UgdHJ5IHRvIHNpbXVsYXRlCisJIyBmaWxlIGNvbXBsZXRpb24gZGlyZWN0bHkgaW4gdGhpcyBzY3JpcHQuCisJIworCSMgS25vd24gaXNzdWVzOgorCSMgICAgIC0gUG9zc2libGUgY29tcGxldGlvbnMgYXJlIHNob3duIHdpdGggdGhlaXIgZGlyZWN0b3J5IHByZWZpeC4KKwkjICAgICAtIENvbXBsZXRpb25zIGNvbnRhaW5pbmcgc2hlbGwgdmFyaWFibGVzIGFyZSBub3QgaGFuZGxlZC4KKwkjICAgICAtIENvbXBsZXRpb25zIHdpdGggfiBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGFyZSBub3QgaGFuZGxlZC4KKworCSMgTm8gZmlsZSBjb21wbGV0aW9uIHNob3VsZCBiZSBkb25lIHVubGVzcyB3ZSBhcmUgY29tcGxldGluZyBiZXlvbmQKKwkjIHRoZSBnaXQgc3ViLWNvbW1hbmQuICBBbiBpbXByb3ZlbWVudCBvbiB0aGUgYmFzaCBjb21wbGV0aW9uIDopCisJaWYgWyBcJHtDT01QX0NXT1JEfSAtZ3QgMSBdOyB0aGVuCisJCVRPX0NPTVBMRVRFPSJcJHtDT01QX1dPUkRTW1wke0NPTVBfQ1dPUkR9XX0iCisKKwkJIyBXZSBkb24ndCBzdXBwb3J0IH4gZXhwYW5zaW9uOiB0b28gdHJpY2t5LgorCQlpZiBbICJcJHtUT19DT01QTEVURTowOjF9IiAhPSAifiIgXTsgdGhlbgorCQkJIyBVc2UgbHMgc28gYXMgdG8gYWRkIHRoZSAnLycgYXQgdGhlIGVuZCBvZiBkaXJlY3Rvcmllcy4KKwkJCUNPTVBSRVBMWT0oXGBscyAtZHAgXCR7VE9fQ09NUExFVEV9KiAyPiAvZGV2L251bGxcYCkKKwkJZmkKKwlmaQorZmkKKworIyB0Y3NoIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGR1cGxpY2F0ZXMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcworZWNobyAiXCR7Q09NUFJFUExZWypdfSIgfCBzb3J0IHwgdW5pcQorCisjIElmIHRoZXJlIGlzIGEgc2luZ2xlIGNvbXBsZXRpb24gYW5kIGl0IGlzIGEgZGlyZWN0b3J5LCB3ZSBvdXRwdXQgaXQKKyMgYSBzZWNvbmQgdGltZSB0byB0cmljayB0Y3NoIGludG8gbm90IGFkZGluZyBhIHNwYWNlIGFmdGVyIGl0LgoraWYgWyBcJHsjQ09NUFJFUExZWypdfSAtZXEgMSBdICYmIFsgIlwke0NPTVBSRVBMWVswXTogLTF9IiA9PSAiLyIgXTsgdGhlbgorCWVjaG8gIlwke0NPTVBSRVBMWVsqXX0iCitmaQorCitFT0YKKworIyBEb24ndCBuZWVkIHRoaXMgdmFyaWFibGUgYW55bW9yZSwgc28gZG9uJ3QgcG9sbHV0ZSB0aGUgdXNlcnMgZW52aXJvbm1lbnQKK3Vuc2V0IF9fZ2l0X3Rjc2hfY29tcGxldGlvbl9vcmlnaW5hbF9zY3JpcHQKKworY29tcGxldGUgZ2l0ICAncCwqLGBiYXNoICR7X19naXRfdGNzaF9jb21wbGV0aW9uX3NjcmlwdH0gZ2l0ICIke0NPTU1BTkRfTElORX0iYCwnCitjb21wbGV0ZSBnaXRrICdwLCosYGJhc2ggJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fc2NyaXB0fSBnaXRrICIke0NPTU1BTkRfTElORX0iYCwnCmRpZmYgLS1naXQgYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uenNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLnpzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWY0ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLnpzaApAQCAtMCwwICsxLDI0NCBAQAorI2NvbXBkZWYgZ2l0IGdpdGsKKworIyB6c2ggY29tcGxldGlvbiB3cmFwcGVyIGZvciBnaXQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlLmNvbnRyZXJhc0BnbWFpbC5jb20+CisjCisjIFlvdSBuZWVkIGdpdCdzIGJhc2ggY29tcGxldGlvbiBzY3JpcHQgaW5zdGFsbGVkIHNvbWV3aGVyZSwgYnkgZGVmYXVsdCBpdAorIyB3b3VsZCBiZSB0aGUgbG9jYXRpb24gYmFzaC1jb21wbGV0aW9uIHVzZXMuCisjCisjIElmIHlvdXIgc2NyaXB0IGlzIHNvbWV3aGVyZSBlbHNlLCB5b3UgY2FuIGNvbmZpZ3VyZSBpdCBvbiB5b3VyIH4vLnpzaHJjOgorIworIyAgenN0eWxlICc6Y29tcGxldGlvbjoqOio6Z2l0OionIHNjcmlwdCB+Ly5naXQtY29tcGxldGlvbi56c2gKKyMKKyMgVGhlIHJlY29tbWVuZGVkIHdheSB0byBpbnN0YWxsIHRoaXMgc2NyaXB0IGlzIHRvIG1ha2UgYSBjb3B5IG9mIGl0IGluCisjIH4vLnpzaC8gZGlyZWN0b3J5IGFzIH4vLnpzaC9naXQtY29tcGxldGlvbi56c2ggYW5kIHRoZW4gYWRkIHRoZSBmb2xsb3dpbmcKKyMgdG8geW91ciB+Ly56c2hyYyBmaWxlOgorIworIyAgZnBhdGg9KH4vLnpzaCAkZnBhdGgpCisKK2NvbXBsZXRlICgpCit7CisJIyBkbyBub3RoaW5nCisJcmV0dXJuIDAKK30KKworenN0eWxlIC1UICc6Y29tcGxldGlvbjoqOio6Z2l0OionIHRhZy1vcmRlciAmJiBcCisJenN0eWxlICc6Y29tcGxldGlvbjoqOio6Z2l0OionIHRhZy1vcmRlciAnY29tbW9uLWNvbW1hbmRzJworCit6c3R5bGUgLXMgIjpjb21wbGV0aW9uOio6KjpnaXQ6KiIgc2NyaXB0IHNjcmlwdAoraWYgWyAteiAiJHNjcmlwdCIgXTsgdGhlbgorCWxvY2FsIC1hIGxvY2F0aW9ucworCWxvY2FsIGUKKwlsb2NhdGlvbnM9KAorCQkkKGRpcm5hbWUgJHtmdW5jc291cmNldHJhY2VbMV0lOip9KS9naXQtY29tcGxldGlvbi5iYXNoCisJCScvZXRjL2Jhc2hfY29tcGxldGlvbi5kL2dpdCcgIyBmZWRvcmEsIG9sZCBkZWJpYW4KKwkJJy91c3Ivc2hhcmUvYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL2dpdCcgIyBhcmNoLCB1YnVudHUsIG5ldyBkZWJpYW4KKwkJJy91c3Ivc2hhcmUvYmFzaC1jb21wbGV0aW9uL2dpdCcgIyBnZW50b28KKwkJKQorCWZvciBlIGluICRsb2NhdGlvbnM7IGRvCisJCXRlc3QgLWYgJGUgJiYgc2NyaXB0PSIkZSIgJiYgYnJlYWsKKwlkb25lCitmaQorR0lUX1NPVVJDSU5HX1pTSF9DT01QTEVUSU9OPXkgLiAiJHNjcmlwdCIKKworX19naXRjb21wICgpCit7CisJZW11bGF0ZSAtTCB6c2gKKworCWxvY2FsIGN1cl89IiR7My0kY3VyfSIKKworCWNhc2UgIiRjdXJfIiBpbgorCS0tKj0pCisJCTs7CisJKikKKwkJbG9jYWwgYyBJRlM9JCcgXHRcbicKKwkJbG9jYWwgLWEgYXJyYXkKKwkJZm9yIGMgaW4gJHs9MX07IGRvCisJCQljPSIkYyR7NC19IgorCQkJY2FzZSAkYyBpbgorCQkJLS0qPSp8Ki4pIDs7CisJCQkqKSBjPSIkYyAiIDs7CisJCQllc2FjCisJCQlhcnJheSs9KCIkYyIpCisJCWRvbmUKKwkJY29tcHNldCAtUCAnKls9Ol0nCisJCWNvbXBhZGQgLVEgLVMgJycgLXAgIiR7Mi19IiAtYSAtLSBhcnJheSAmJiBfcmV0PTAKKwkJOzsKKwllc2FjCit9CisKK19fZ2l0Y29tcF9kaXJlY3QgKCkKK3sKKwllbXVsYXRlIC1MIHpzaAorCisJbG9jYWwgSUZTPSQnXG4nCisJY29tcHNldCAtUCAnKls9Ol0nCisJY29tcGFkZCAtUSAtLSAkez0xfSAmJiBfcmV0PTAKK30KKworX19naXRjb21wX25sICgpCit7CisJZW11bGF0ZSAtTCB6c2gKKworCWxvY2FsIElGUz0kJ1xuJworCWNvbXBzZXQgLVAgJypbPTpdJworCWNvbXBhZGQgLVEgLVMgIiR7NC0gfSIgLXAgIiR7Mi19IiAtLSAkez0xfSAmJiBfcmV0PTAKK30KKworX19naXRjb21wX25sX2FwcGVuZCAoKQoreworCWVtdWxhdGUgLUwgenNoCisKKwlsb2NhbCBJRlM9JCdcbicKKwljb21wYWRkIC1RIC1TICIkezQtIH0iIC1wICIkezItfSIgLS0gJHs9MX0gJiYgX3JldD0wCit9CisKK19fZ2l0Y29tcF9maWxlX2RpcmVjdCAoKQoreworCWVtdWxhdGUgLUwgenNoCisKKwlsb2NhbCBJRlM9JCdcbicKKwljb21wc2V0IC1QICcqWz06XScKKwljb21wYWRkIC1mIC0tICR7PTF9ICYmIF9yZXQ9MAorfQorCitfX2dpdGNvbXBfZmlsZSAoKQoreworCWVtdWxhdGUgLUwgenNoCisKKwlsb2NhbCBJRlM9JCdcbicKKwljb21wc2V0IC1QICcqWz06XScKKwljb21wYWRkIC1wICIkezItfSIgLWYgLS0gJHs9MX0gJiYgX3JldD0wCit9CisKK19fZ2l0X3pzaF9iYXNoX2Z1bmMgKCkKK3sKKwllbXVsYXRlIC1MIGtzaAorCisJbG9jYWwgY29tbWFuZD0kMQorCisJbG9jYWwgY29tcGxldGlvbl9mdW5jPSJfZ2l0XyR7Y29tbWFuZC8vLS9ffSIKKwlkZWNsYXJlIC1mICRjb21wbGV0aW9uX2Z1bmMgPi9kZXYvbnVsbCAmJiAkY29tcGxldGlvbl9mdW5jICYmIHJldHVybgorCisJbG9jYWwgZXhwYW5zaW9uPSQoX19naXRfYWxpYXNlZF9jb21tYW5kICIkY29tbWFuZCIpCisJaWYgWyAtbiAiJGV4cGFuc2lvbiIgXTsgdGhlbgorCQl3b3Jkc1sxXT0kZXhwYW5zaW9uCisJCWNvbXBsZXRpb25fZnVuYz0iX2dpdF8ke2V4cGFuc2lvbi8vLS9ffSIKKwkJZGVjbGFyZSAtZiAkY29tcGxldGlvbl9mdW5jID4vZGV2L251bGwgJiYgJGNvbXBsZXRpb25fZnVuYworCWZpCit9CisKK19fZ2l0X3pzaF9jbWRfY29tbW9uICgpCit7CisJbG9jYWwgLWEgbGlzdAorCWxpc3Q9KAorCWFkZDonYWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4JworCWJpc2VjdDonZmluZCBieSBiaW5hcnkgc2VhcmNoIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnJworCWJyYW5jaDonbGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMnCisJY2hlY2tvdXQ6J2NoZWNrb3V0IGEgYnJhbmNoIG9yIHBhdGhzIHRvIHRoZSB3b3JraW5nIHRyZWUnCisJY2xvbmU6J2Nsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeScKKwljb21taXQ6J3JlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5JworCWRpZmY6J3Nob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMnCisJZmV0Y2g6J2Rvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnknCisJZ3JlcDoncHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuJworCWluaXQ6J2NyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lJworCWxvZzonc2hvdyBjb21taXQgbG9ncycKKwltZXJnZTonam9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXInCisJbXY6J21vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluaycKKwlwdWxsOidmZXRjaCBmcm9tIGFuZCBtZXJnZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCcKKwlwdXNoOid1cGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMnCisJcmViYXNlOidmb3J3YXJkLXBvcnQgbG9jYWwgY29tbWl0cyB0byB0aGUgdXBkYXRlZCB1cHN0cmVhbSBoZWFkJworCXJlc2V0OidyZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZScKKwlybToncmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgnCisJc2hvdzonc2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMnCisJc3RhdHVzOidzaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzJworCXRhZzonY3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEcnKQorCV9kZXNjcmliZSAtdCBjb21tb24tY29tbWFuZHMgJ2NvbW1vbiBjb21tYW5kcycgbGlzdCAmJiBfcmV0PTAKK30KKworX19naXRfenNoX2NtZF9hbGlhcyAoKQoreworCWxvY2FsIC1hIGxpc3QKKwlsaXN0PSgkeyR7JHsoMCkiJChnaXQgY29uZmlnIC16IC0tZ2V0LXJlZ2V4cCAnXmFsaWFzXC4nKSJ9I2FsaWFzLn0lJCdcbicqfSkKKwlfZGVzY3JpYmUgLXQgYWxpYXMtY29tbWFuZHMgJ2FsaWFzZXMnIGxpc3QgJCogJiYgX3JldD0wCit9CisKK19fZ2l0X3pzaF9jbWRfYWxsICgpCit7CisJbG9jYWwgLWEgbGlzdAorCWVtdWxhdGUga3NoIC1jIF9fZ2l0X2NvbXB1dGVfYWxsX2NvbW1hbmRzCisJbGlzdD0oICR7PV9fZ2l0X2FsbF9jb21tYW5kc30gKQorCV9kZXNjcmliZSAtdCBhbGwtY29tbWFuZHMgJ2FsbCBjb21tYW5kcycgbGlzdCAmJiBfcmV0PTAKK30KKworX19naXRfenNoX21haW4gKCkKK3sKKwlsb2NhbCBjdXJjb250ZXh0PSIkY3VyY29udGV4dCIgc3RhdGUgc3RhdGVfZGVzY3IgbGluZQorCXR5cGVzZXQgLUEgb3B0X2FyZ3MKKwlsb2NhbCAtYSBvcmlnX3dvcmRzCisKKwlvcmlnX3dvcmRzPSggJHt3b3Jkc1tAXX0gKQorCisJX2FyZ3VtZW50cyAtQyBcCisJCScoLXAgLS1wYWdpbmF0ZSAtLW5vLXBhZ2VyKSd7LXAsLS1wYWdpbmF0ZX0nW3BpcGUgYWxsIG91dHB1dCBpbnRvICcnbGVzcycnXScgXAorCQknKC1wIC0tcGFnaW5hdGUpLS1uby1wYWdlcltkbyBub3QgcGlwZSBnaXQgb3V0cHV0IGludG8gYSBwYWdlcl0nIFwKKwkJJy0tZ2l0LWRpcj0tW3NldCB0aGUgcGF0aCB0byB0aGUgcmVwb3NpdG9yeV06IDpfZGlyZWN0b3JpZXMnIFwKKwkJJy0tYmFyZVt0cmVhdCB0aGUgcmVwb3NpdG9yeSBhcyBhIGJhcmUgcmVwb3NpdG9yeV0nIFwKKwkJJygtIDopLS12ZXJzaW9uW3ByaW50cyB0aGUgZ2l0IHN1aXRlIHZlcnNpb25dJyBcCisJCSctLWV4ZWMtcGF0aD0tW3BhdGggdG8gd2hlcmUgeW91ciBjb3JlIGdpdCBwcm9ncmFtcyBhcmUgaW5zdGFsbGVkXTo6IDpfZGlyZWN0b3JpZXMnIFwKKwkJJy0taHRtbC1wYXRoW3ByaW50IHRoZSBwYXRoIHdoZXJlIGdpdCcncyBIVE1MIGRvY3VtZW50YXRpb24gaXMgaW5zdGFsbGVkXScgXAorCQknLS1pbmZvLXBhdGhbcHJpbnQgdGhlIHBhdGggd2hlcmUgdGhlIEluZm8gZmlsZXMgYXJlIGluc3RhbGxlZF0nIFwKKwkJJy0tbWFuLXBhdGhbcHJpbnQgdGhlIG1hbnBhdGggKHNlZSBgbWFuKDEpYCkgZm9yIHRoZSBtYW4gcGFnZXNdJyBcCisJCSctLXdvcmstdHJlZT0tW3NldCB0aGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlXTogOl9kaXJlY3RvcmllcycgXAorCQknLS1uYW1lc3BhY2U9LVtzZXQgdGhlIGdpdCBuYW1lc3BhY2VdJyBcCisJCSctLW5vLXJlcGxhY2Utb2JqZWN0c1tkbyBub3QgdXNlIHJlcGxhY2VtZW50IHJlZnMgdG8gcmVwbGFjZSBnaXQgb2JqZWN0c10nIFwKKwkJJygtIDopLS1oZWxwW3ByaW50cyB0aGUgc3lub3BzaXMgYW5kIGEgbGlzdCBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNvbW1hbmRzXTogOi0+YXJnJyBcCisJCScoLSk6IDotPmNvbW1hbmQnIFwKKwkJJygtKSo6OiA6LT5hcmcnICYmIHJldHVybgorCisJY2FzZSAkc3RhdGUgaW4KKwkoY29tbWFuZCkKKwkJX2FsdGVybmF0aXZlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpYXMtY29tbWFuZHM6YWxpYXM6X19naXRfenNoX2NtZF9hbGlhcycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tb24tY29tbWFuZHM6Y29tbW9uOl9fZ2l0X3pzaF9jbWRfY29tbW9uJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbC1jb21tYW5kczphbGw6X19naXRfenNoX2NtZF9hbGwnICYmIF9yZXQ9MAorCQk7OworCShhcmcpCisJCWxvY2FsIGNvbW1hbmQ9IiR7d29yZHNbMV19IiBfX2dpdF9kaXIKKworCQlpZiAoKCAkK29wdF9hcmdzWy0tYmFyZV0gKSk7IHRoZW4KKwkJCV9fZ2l0X2Rpcj0nLicKKwkJZWxzZQorCQkJX19naXRfZGlyPSR7b3B0X2FyZ3NbLS1naXQtZGlyXX0KKwkJZmkKKworCQkoKCAkK29wdF9hcmdzWy0taGVscF0gKSkgJiYgY29tbWFuZD0naGVscCcKKworCQl3b3Jkcz0oICR7b3JpZ193b3Jkc1tAXX0gKQorCisJCV9fZ2l0X3pzaF9iYXNoX2Z1bmMgJGNvbW1hbmQKKwkJOzsKKwllc2FjCit9CisKK19naXQgKCkKK3sKKwlsb2NhbCBfcmV0PTEKKwlsb2NhbCBjdXIgY3dvcmQgcHJldgorCisJY3VyPSR7d29yZHNbQ1VSUkVOVF19CisJcHJldj0ke3dvcmRzW0NVUlJFTlQtMV19CisJbGV0IGN3b3JkPUNVUlJFTlQtMQorCisJaWYgKCggJCtmdW5jdGlvbnNbX18ke3NlcnZpY2V9X3pzaF9tYWluXSApKTsgdGhlbgorCQlfXyR7c2VydmljZX1fenNoX21haW4KKwllbHNlCisJCWVtdWxhdGUga3NoIC1jIF9fJHtzZXJ2aWNlfV9tYWluCisJZmkKKworCWxldCBfcmV0ICYmIF9kZWZhdWx0ICYmIF9yZXQ9MAorCXJldHVybiBfcmV0Cit9CisKK19naXQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1wcm9tcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0Y2Q3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCkBAIC0wLDAgKzEsNTYwIEBACisjIGJhc2gvenNoIGdpdCBwcm9tcHQgc3VwcG9ydAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNyBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLjAuCisjCisjIFRoaXMgc2NyaXB0IGFsbG93cyB5b3UgdG8gc2VlIHJlcG9zaXRvcnkgc3RhdHVzIGluIHlvdXIgcHJvbXB0LgorIworIyBUbyBlbmFibGU6CisjCisjICAgIDEpIENvcHkgdGhpcyBmaWxlIHRvIHNvbWV3aGVyZSAoZS5nLiB+Ly5naXQtcHJvbXB0LnNoKS4KKyMgICAgMikgQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIC5iYXNocmMvLnpzaHJjOgorIyAgICAgICAgc291cmNlIH4vLmdpdC1wcm9tcHQuc2gKKyMgICAgM2EpIENoYW5nZSB5b3VyIFBTMSB0byBjYWxsIF9fZ2l0X3BzMSBhcworIyAgICAgICAgY29tbWFuZC1zdWJzdGl0dXRpb246CisjICAgICAgICBCYXNoOiBQUzE9J1tcdUBcaCBcVyQoX19naXRfcHMxICIgKCVzKSIpXVwkICcKKyMgICAgICAgIFpTSDogIHNldG9wdCBQUk9NUFRfU1VCU1QgOyBQUzE9J1slbkAlbSAlYyQoX19naXRfcHMxICIgKCVzKSIpXVwkICcKKyMgICAgICAgIHRoZSBvcHRpb25hbCBhcmd1bWVudCB3aWxsIGJlIHVzZWQgYXMgZm9ybWF0IHN0cmluZy4KKyMgICAgM2IpIEFsdGVybmF0aXZlbHksIGZvciBhIHNsaWdodGx5IGZhc3RlciBwcm9tcHQsIF9fZ2l0X3BzMSBjYW4KKyMgICAgICAgIGJlIHVzZWQgZm9yIFBST01QVF9DT01NQU5EIGluIEJhc2ggb3IgZm9yIHByZWNtZCgpIGluIFpzaAorIyAgICAgICAgd2l0aCB0d28gcGFyYW1ldGVycywgPHByZT4gYW5kIDxwb3N0Piwgd2hpY2ggYXJlIHN0cmluZ3MKKyMgICAgICAgIHlvdSB3b3VsZCBwdXQgaW4gJFBTMSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzdGF0dXMgc3RyaW5nCisjICAgICAgICBnZW5lcmF0ZWQgYnkgdGhlIGdpdC1wcm9tcHQgbWFjaGluZXJ5LiAgZS5nLgorIyAgICAgICAgQmFzaDogUFJPTVBUX0NPTU1BTkQ9J19fZ2l0X3BzMSAiXHVAXGg6XHciICJcXFwkICInCisjICAgICAgICAgIHdpbGwgc2hvdyB1c2VybmFtZSwgYXQtc2lnbiwgaG9zdCwgY29sb24sIGN3ZCwgdGhlbgorIyAgICAgICAgICB2YXJpb3VzIHN0YXR1cyBzdHJpbmcsIGZvbGxvd2VkIGJ5IGRvbGxhciBhbmQgU1AsIGFzCisjICAgICAgICAgIHlvdXIgcHJvbXB0LgorIyAgICAgICAgWlNIOiAgcHJlY21kICgpIHsgX19naXRfcHMxICIlbiIgIjolfiQgIiAifCVzIiB9CisjICAgICAgICAgIHdpbGwgc2hvdyB1c2VybmFtZSwgcGlwZSwgdGhlbiB2YXJpb3VzIHN0YXR1cyBzdHJpbmcsCisjICAgICAgICAgIGZvbGxvd2VkIGJ5IGNvbG9uLCBjd2QsIGRvbGxhciBhbmQgU1AsIGFzIHlvdXIgcHJvbXB0LgorIyAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzdXBwbHkgYSB0aGlyZCBhcmd1bWVudCB3aXRoIGEgcHJpbnRmCisjICAgICAgICBmb3JtYXQgc3RyaW5nIHRvIGZpbmV0dW5lIHRoZSBvdXRwdXQgb2YgdGhlIGJyYW5jaCBzdGF0dXMKKyMKKyMgVGhlIHJlcG9zaXRvcnkgc3RhdHVzIHdpbGwgYmUgZGlzcGxheWVkIG9ubHkgaWYgeW91IGFyZSBjdXJyZW50bHkgaW4gYQorIyBnaXQgcmVwb3NpdG9yeS4gVGhlICVzIHRva2VuIGlzIHRoZSBwbGFjZWhvbGRlciBmb3IgdGhlIHNob3duIHN0YXR1cy4KKyMKKyMgVGhlIHByb21wdCBzdGF0dXMgYWx3YXlzIGluY2x1ZGVzIHRoZSBjdXJyZW50IGJyYW5jaCBuYW1lLgorIworIyBJbiBhZGRpdGlvbiwgaWYgeW91IHNldCBHSVRfUFMxX1NIT1dESVJUWVNUQVRFIHRvIGEgbm9uZW1wdHkgdmFsdWUsCisjIHVuc3RhZ2VkICgqKSBhbmQgc3RhZ2VkICgrKSBjaGFuZ2VzIHdpbGwgYmUgc2hvd24gbmV4dCB0byB0aGUgYnJhbmNoCisjIG5hbWUuICBZb3UgY2FuIGNvbmZpZ3VyZSB0aGlzIHBlci1yZXBvc2l0b3J5IHdpdGggdGhlCisjIGJhc2guc2hvd0RpcnR5U3RhdGUgdmFyaWFibGUsIHdoaWNoIGRlZmF1bHRzIHRvIHRydWUgb25jZQorIyBHSVRfUFMxX1NIT1dESVJUWVNUQVRFIGlzIGVuYWJsZWQuCisjCisjIFlvdSBjYW4gYWxzbyBzZWUgaWYgY3VycmVudGx5IHNvbWV0aGluZyBpcyBzdGFzaGVkLCBieSBzZXR0aW5nCisjIEdJVF9QUzFfU0hPV1NUQVNIU1RBVEUgdG8gYSBub25lbXB0eSB2YWx1ZS4gSWYgc29tZXRoaW5nIGlzIHN0YXNoZWQsCisjIHRoZW4gYSAnJCcgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2ggbmFtZS4KKyMKKyMgSWYgeW91IHdvdWxkIGxpa2UgdG8gc2VlIGlmIHRoZXJlJ3JlIHVudHJhY2tlZCBmaWxlcywgdGhlbiB5b3UgY2FuIHNldAorIyBHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUyB0byBhIG5vbmVtcHR5IHZhbHVlLiBJZiB0aGVyZSdyZSB1bnRyYWNrZWQKKyMgZmlsZXMsIHRoZW4gYSAnJScgd2lsbCBiZSBzaG93biBuZXh0IHRvIHRoZSBicmFuY2ggbmFtZS4gIFlvdSBjYW4KKyMgY29uZmlndXJlIHRoaXMgcGVyLXJlcG9zaXRvcnkgd2l0aCB0aGUgYmFzaC5zaG93VW50cmFja2VkRmlsZXMKKyMgdmFyaWFibGUsIHdoaWNoIGRlZmF1bHRzIHRvIHRydWUgb25jZSBHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUyBpcworIyBlbmFibGVkLgorIworIyBJZiB5b3Ugd291bGQgbGlrZSB0byBzZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBIRUFEIGFuZCBpdHMgdXBzdHJlYW0sCisjIHNldCBHSVRfUFMxX1NIT1dVUFNUUkVBTT0iYXV0byIuICBBICI8IiBpbmRpY2F0ZXMgeW91IGFyZSBiZWhpbmQsICI+IgorIyBpbmRpY2F0ZXMgeW91IGFyZSBhaGVhZCwgIjw+IiBpbmRpY2F0ZXMgeW91IGhhdmUgZGl2ZXJnZWQgYW5kICI9IgorIyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlLiBZb3UgY2FuIGZ1cnRoZXIgY29udHJvbAorIyBiZWhhdmlvdXIgYnkgc2V0dGluZyBHSVRfUFMxX1NIT1dVUFNUUkVBTSB0byBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0CisjIG9mIHZhbHVlczoKKyMKKyMgICAgIHZlcmJvc2UgICAgICAgc2hvdyBudW1iZXIgb2YgY29tbWl0cyBhaGVhZC9iZWhpbmQgKCsvLSkgdXBzdHJlYW0KKyMgICAgIG5hbWUgICAgICAgICAgaWYgdmVyYm9zZSwgdGhlbiBhbHNvIHNob3cgdGhlIHVwc3RyZWFtIGFiYnJldiBuYW1lCisjICAgICBsZWdhY3kgICAgICAgIGRvbid0IHVzZSB0aGUgJy0tY291bnQnIG9wdGlvbiBhdmFpbGFibGUgaW4gcmVjZW50CisjICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIGdpdC1yZXYtbGlzdAorIyAgICAgZ2l0ICAgICAgICAgICBhbHdheXMgY29tcGFyZSBIRUFEIHRvIEB7dXBzdHJlYW19CisjICAgICBzdm4gICAgICAgICAgIGFsd2F5cyBjb21wYXJlIEhFQUQgdG8geW91ciBTVk4gdXBzdHJlYW0KKyMKKyMgWW91IGNhbiBjaGFuZ2UgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBicmFuY2ggbmFtZSBhbmQgdGhlIGFib3ZlCisjIHN0YXRlIHN5bWJvbHMgYnkgc2V0dGluZyBHSVRfUFMxX1NUQVRFU0VQQVJBVE9SLiBUaGUgZGVmYXVsdCBzZXBhcmF0b3IKKyMgaXMgU1AuCisjCisjIEJ5IGRlZmF1bHQsIF9fZ2l0X3BzMSB3aWxsIGNvbXBhcmUgSEVBRCB0byB5b3VyIFNWTiB1cHN0cmVhbSBpZiBpdCBjYW4KKyMgZmluZCBvbmUsIG9yIEB7dXBzdHJlYW19IG90aGVyd2lzZS4gIE9uY2UgeW91IGhhdmUgc2V0CisjIEdJVF9QUzFfU0hPV1VQU1RSRUFNLCB5b3UgY2FuIG92ZXJyaWRlIGl0IG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgYnkKKyMgc2V0dGluZyB0aGUgYmFzaC5zaG93VXBzdHJlYW0gY29uZmlnIHZhcmlhYmxlLgorIworIyBJZiB5b3Ugd291bGQgbGlrZSB0byBzZWUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaWRlbnRpdHkgb2YKKyMgY29tbWl0cyBjaGVja2VkIG91dCBhcyBhIGRldGFjaGVkIEhFQUQsIHNldCBHSVRfUFMxX0RFU0NSSUJFX1NUWUxFCisjIHRvIG9uZSBvZiB0aGVzZSB2YWx1ZXM6CisjCisjICAgICBjb250YWlucyAgICAgIHJlbGF0aXZlIHRvIG5ld2VyIGFubm90YXRlZCB0YWcgKHYxLjYuMy4yfjM1KQorIyAgICAgYnJhbmNoICAgICAgICByZWxhdGl2ZSB0byBuZXdlciB0YWcgb3IgYnJhbmNoIChtYXN0ZXJ+NCkKKyMgICAgIGRlc2NyaWJlICAgICAgcmVsYXRpdmUgdG8gb2xkZXIgYW5ub3RhdGVkIHRhZyAodjEuNi4zLjEtMTMtZ2RkNDJjMmYpCisjICAgICB0YWcgICAgICAgICAgIHJlbGF0aXZlIHRvIGFueSBvbGRlciB0YWcgKHYxLjYuMy4xLTEzLWdkZDQyYzJmKQorIyAgICAgZGVmYXVsdCAgICAgICBleGFjdGx5IG1hdGNoaW5nIHRhZworIworIyBJZiB5b3Ugd291bGQgbGlrZSBhIGNvbG9yZWQgaGludCBhYm91dCB0aGUgY3VycmVudCBkaXJ0eSBzdGF0ZSwgc2V0CisjIEdJVF9QUzFfU0hPV0NPTE9SSElOVFMgdG8gYSBub25lbXB0eSB2YWx1ZS4gVGhlIGNvbG9ycyBhcmUgYmFzZWQgb24KKyMgdGhlIGNvbG9yZWQgb3V0cHV0IG9mICJnaXQgc3RhdHVzIC1zYiIgYW5kIGFyZSBhdmFpbGFibGUgb25seSB3aGVuCisjIHVzaW5nIF9fZ2l0X3BzMSBmb3IgUFJPTVBUX0NPTU1BTkQgb3IgcHJlY21kLgorIworIyBJZiB5b3Ugd291bGQgbGlrZSBfX2dpdF9wczEgdG8gZG8gbm90aGluZyBpbiB0aGUgY2FzZSB3aGVuIHRoZSBjdXJyZW50CisjIGRpcmVjdG9yeSBpcyBzZXQgdXAgdG8gYmUgaWdub3JlZCBieSBnaXQsIHRoZW4gc2V0CisjIEdJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRCB0byBhIG5vbmVtcHR5IHZhbHVlLiBPdmVycmlkZSB0aGlzIG9uIHRoZQorIyByZXBvc2l0b3J5IGxldmVsIGJ5IHNldHRpbmcgYmFzaC5oaWRlSWZQd2RJZ25vcmVkIHRvICJmYWxzZSIuCisKKyMgY2hlY2sgd2hldGhlciBwcmludGYgc3VwcG9ydHMgLXYKK19fZ2l0X3ByaW50Zl9zdXBwb3J0c192PQorcHJpbnRmIC12IF9fZ2l0X3ByaW50Zl9zdXBwb3J0c192IC0tICclcycgeWVzID4vZGV2L251bGwgMj4mMQorCisjIHN0b3JlcyB0aGUgZGl2ZXJnZW5jZSBmcm9tIHVwc3RyZWFtIGluICRwCisjIHVzZWQgYnkgR0lUX1BTMV9TSE9XVVBTVFJFQU0KK19fZ2l0X3BzMV9zaG93X3Vwc3RyZWFtICgpCit7CisJbG9jYWwga2V5IHZhbHVlCisJbG9jYWwgc3ZuX3JlbW90ZSBzdm5fdXJsX3BhdHRlcm4gY291bnQgbgorCWxvY2FsIHVwc3RyZWFtPWdpdCBsZWdhY3k9IiIgdmVyYm9zZT0iIiBuYW1lPSIiCisKKwlzdm5fcmVtb3RlPSgpCisJIyBnZXQgc29tZSBjb25maWcgb3B0aW9ucyBmcm9tIGdpdC1jb25maWcKKwlsb2NhbCBvdXRwdXQ9IiQoZ2l0IGNvbmZpZyAteiAtLWdldC1yZWdleHAgJ14oc3ZuLXJlbW90ZVwuLipcLnVybHxiYXNoXC5zaG93dXBzdHJlYW0pJCcgMj4vZGV2L251bGwgfCB0ciAnXDBcbicgJ1xuICcpIgorCXdoaWxlIHJlYWQgLXIga2V5IHZhbHVlOyBkbworCQljYXNlICIka2V5IiBpbgorCQliYXNoLnNob3d1cHN0cmVhbSkKKwkJCUdJVF9QUzFfU0hPV1VQU1RSRUFNPSIkdmFsdWUiCisJCQlpZiBbWyAteiAiJHtHSVRfUFMxX1NIT1dVUFNUUkVBTX0iIF1dOyB0aGVuCisJCQkJcD0iIgorCQkJCXJldHVybgorCQkJZmkKKwkJCTs7CisJCXN2bi1yZW1vdGUuKi51cmwpCisJCQlzdm5fcmVtb3RlWyQoKCR7I3N2bl9yZW1vdGVbQF19ICsgMSkpXT0iJHZhbHVlIgorCQkJc3ZuX3VybF9wYXR0ZXJuPSIkc3ZuX3VybF9wYXR0ZXJuXFx8JHZhbHVlIgorCQkJdXBzdHJlYW09c3ZuK2dpdCAjIGRlZmF1bHQgdXBzdHJlYW0gaXMgU1ZOIGlmIGF2YWlsYWJsZSwgZWxzZSBnaXQKKwkJCTs7CisJCWVzYWMKKwlkb25lIDw8PCAiJG91dHB1dCIKKworCSMgcGFyc2UgY29uZmlndXJhdGlvbiB2YWx1ZXMKKwlmb3Igb3B0aW9uIGluICR7R0lUX1BTMV9TSE9XVVBTVFJFQU19OyBkbworCQljYXNlICIkb3B0aW9uIiBpbgorCQlnaXR8c3ZuKSB1cHN0cmVhbT0iJG9wdGlvbiIgOzsKKwkJdmVyYm9zZSkgdmVyYm9zZT0xIDs7CisJCWxlZ2FjeSkgIGxlZ2FjeT0xICA7OworCQluYW1lKSAgICBuYW1lPTEgOzsKKwkJZXNhYworCWRvbmUKKworCSMgRmluZCBvdXIgdXBzdHJlYW0KKwljYXNlICIkdXBzdHJlYW0iIGluCisJZ2l0KSAgICB1cHN0cmVhbT0iQHt1cHN0cmVhbX0iIDs7CisJc3ZuKikKKwkJIyBnZXQgdGhlIHVwc3RyZWFtIGZyb20gdGhlICJnaXQtc3ZuLWlkOiAuLi4iIGluIGEgY29tbWl0IG1lc3NhZ2UKKwkJIyAoZ2l0LXN2biB1c2VzIGVzc2VudGlhbGx5IHRoZSBzYW1lIHByb2NlZHVyZSBpbnRlcm5hbGx5KQorCQlsb2NhbCAtYSBzdm5fdXBzdHJlYW0KKwkJc3ZuX3Vwc3RyZWFtPSgkKGdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLTEgXAorCQkJCQktLWdyZXA9Il5naXQtc3ZuLWlkOiBcKCR7c3ZuX3VybF9wYXR0ZXJuIz8/fVwpIiAyPi9kZXYvbnVsbCkpCisJCWlmIFtbIDAgLW5lICR7I3N2bl91cHN0cmVhbVtAXX0gXV07IHRoZW4KKwkJCXN2bl91cHN0cmVhbT0ke3N2bl91cHN0cmVhbVskeyNzdm5fdXBzdHJlYW1bQF19IC0gMl19CisJCQlzdm5fdXBzdHJlYW09JHtzdm5fdXBzdHJlYW0lQCp9CisJCQlsb2NhbCBuX3N0b3A9IiR7I3N2bl9yZW1vdGVbQF19IgorCQkJZm9yICgobj0xOyBuIDw9IG5fc3RvcDsgbisrKSk7IGRvCisJCQkJc3ZuX3Vwc3RyZWFtPSR7c3ZuX3Vwc3RyZWFtIyR7c3ZuX3JlbW90ZVskbl19fQorCQkJZG9uZQorCisJCQlpZiBbWyAteiAiJHN2bl91cHN0cmVhbSIgXV07IHRoZW4KKwkJCQkjIGRlZmF1bHQgYnJhbmNoIG5hbWUgZm9yIGNoZWNrb3V0cyB3aXRoIG5vIGxheW91dDoKKwkJCQl1cHN0cmVhbT0ke0dJVF9TVk5fSUQ6LWdpdC1zdm59CisJCQllbHNlCisJCQkJdXBzdHJlYW09JHtzdm5fdXBzdHJlYW0jL30KKwkJCWZpCisJCWVsaWYgW1sgInN2bitnaXQiID0gIiR1cHN0cmVhbSIgXV07IHRoZW4KKwkJCXVwc3RyZWFtPSJAe3Vwc3RyZWFtfSIKKwkJZmkKKwkJOzsKKwllc2FjCisKKwkjIEZpbmQgaG93IG1hbnkgY29tbWl0cyB3ZSBhcmUgYWhlYWQvYmVoaW5kIG91ciB1cHN0cmVhbQorCWlmIFtbIC16ICIkbGVnYWN5IiBdXTsgdGhlbgorCQljb3VudD0iJChnaXQgcmV2LWxpc3QgLS1jb3VudCAtLWxlZnQtcmlnaHQgXAorCQkJCSIkdXBzdHJlYW0iLi4uSEVBRCAyPi9kZXYvbnVsbCkiCisJZWxzZQorCQkjIHByb2R1Y2UgZXF1aXZhbGVudCBvdXRwdXQgdG8gLS1jb3VudCBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgZ2l0CisJCWxvY2FsIGNvbW1pdHMKKwkJaWYgY29tbWl0cz0iJChnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0ICIkdXBzdHJlYW0iLi4uSEVBRCAyPi9kZXYvbnVsbCkiCisJCXRoZW4KKwkJCWxvY2FsIGNvbW1pdCBiZWhpbmQ9MCBhaGVhZD0wCisJCQlmb3IgY29tbWl0IGluICRjb21taXRzCisJCQlkbworCQkJCWNhc2UgIiRjb21taXQiIGluCisJCQkJIjwiKikgKChiZWhpbmQrKykpIDs7CisJCQkJKikgICAgKChhaGVhZCsrKSkgIDs7CisJCQkJZXNhYworCQkJZG9uZQorCQkJY291bnQ9IiRiZWhpbmQJJGFoZWFkIgorCQllbHNlCisJCQljb3VudD0iIgorCQlmaQorCWZpCisKKwkjIGNhbGN1bGF0ZSB0aGUgcmVzdWx0CisJaWYgW1sgLXogIiR2ZXJib3NlIiBdXTsgdGhlbgorCQljYXNlICIkY291bnQiIGluCisJCSIiKSAjIG5vIHVwc3RyZWFtCisJCQlwPSIiIDs7CisJCSIwCTAiKSAjIGVxdWFsIHRvIHVwc3RyZWFtCisJCQlwPSI9IiA7OworCQkiMAkiKikgIyBhaGVhZCBvZiB1cHN0cmVhbQorCQkJcD0iPiIgOzsKKwkJKiIJMCIpICMgYmVoaW5kIHVwc3RyZWFtCisJCQlwPSI8IiA7OworCQkqKQkgICAgIyBkaXZlcmdlZCBmcm9tIHVwc3RyZWFtCisJCQlwPSI8PiIgOzsKKwkJZXNhYworCWVsc2UKKwkJY2FzZSAiJGNvdW50IiBpbgorCQkiIikgIyBubyB1cHN0cmVhbQorCQkJcD0iIiA7OworCQkiMAkwIikgIyBlcXVhbCB0byB1cHN0cmVhbQorCQkJcD0iIHU9IiA7OworCQkiMAkiKikgIyBhaGVhZCBvZiB1cHN0cmVhbQorCQkJcD0iIHUrJHtjb3VudCMwCX0iIDs7CisJCSoiCTAiKSAjIGJlaGluZCB1cHN0cmVhbQorCQkJcD0iIHUtJHtjb3VudCUJMH0iIDs7CisJCSopCSAgICAjIGRpdmVyZ2VkIGZyb20gdXBzdHJlYW0KKwkJCXA9IiB1KyR7Y291bnQjKgl9LSR7Y291bnQlCSp9IiA7OworCQllc2FjCisJCWlmIFtbIC1uICIkY291bnQiICYmIC1uICIkbmFtZSIgXV07IHRoZW4KKwkJCV9fZ2l0X3BzMV91cHN0cmVhbV9uYW1lPSQoZ2l0IHJldi1wYXJzZSBcCisJCQkJLS1hYmJyZXYtcmVmICIkdXBzdHJlYW0iIDI+L2Rldi9udWxsKQorCQkJaWYgWyAkcGNtb2RlID0geWVzIF0gJiYgWyAkcHMxX2V4cGFuZGVkID0geWVzIF07IHRoZW4KKwkJCQlwPSIkcCBcJHtfX2dpdF9wczFfdXBzdHJlYW1fbmFtZX0iCisJCQllbHNlCisJCQkJcD0iJHAgJHtfX2dpdF9wczFfdXBzdHJlYW1fbmFtZX0iCisJCQkJIyBub3QgbmVlZGVkIGFueW1vcmU7IGtlZXAgdXNlcidzCisJCQkJIyBlbnZpcm9ubWVudCBjbGVhbgorCQkJCXVuc2V0IF9fZ2l0X3BzMV91cHN0cmVhbV9uYW1lCisJCQlmaQorCQlmaQorCWZpCisKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdGhhdCBpcyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBfX2dpdF9wczEuICBJdAorIyBpbmplY3RzIGNvbG9yIGNvZGVzIGludG8gdGhlIGFwcHJvcHJpYXRlIGdpdHN0cmluZyB2YXJpYWJsZXMgdXNlZAorIyB0byBidWlsZCBhIGdpdHN0cmluZy4KK19fZ2l0X3BzMV9jb2xvcml6ZV9naXRzdHJpbmcgKCkKK3sKKwlpZiBbWyAtbiAke1pTSF9WRVJTSU9OLX0gXV07IHRoZW4KKwkJbG9jYWwgY19yZWQ9JyVGe3JlZH0nCisJCWxvY2FsIGNfZ3JlZW49JyVGe2dyZWVufScKKwkJbG9jYWwgY19sYmx1ZT0nJUZ7Ymx1ZX0nCisJCWxvY2FsIGNfY2xlYXI9JyVmJworCWVsc2UKKwkJIyBVc2luZyBcWyBhbmQgXF0gYXJvdW5kIGNvbG9ycyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudAorCQkjIGlzc3VlcyB3aXRoIGNvbW1hbmQgbGluZSBlZGl0aW5nL2Jyb3dzaW5nL2NvbXBsZXRpb24hCisJCWxvY2FsIGNfcmVkPSdcW1xlWzMxbVxdJworCQlsb2NhbCBjX2dyZWVuPSdcW1xlWzMybVxdJworCQlsb2NhbCBjX2xibHVlPSdcW1xlWzE7MzRtXF0nCisJCWxvY2FsIGNfY2xlYXI9J1xbXGVbMG1cXScKKwlmaQorCWxvY2FsIGJhZF9jb2xvcj0kY19yZWQKKwlsb2NhbCBva19jb2xvcj0kY19ncmVlbgorCWxvY2FsIGZsYWdzX2NvbG9yPSIkY19sYmx1ZSIKKworCWxvY2FsIGJyYW5jaF9jb2xvcj0iIgorCWlmIFsgJGRldGFjaGVkID0gbm8gXTsgdGhlbgorCQlicmFuY2hfY29sb3I9IiRva19jb2xvciIKKwllbHNlCisJCWJyYW5jaF9jb2xvcj0iJGJhZF9jb2xvciIKKwlmaQorCWM9IiRicmFuY2hfY29sb3IkYyIKKworCXo9IiRjX2NsZWFyJHoiCisJaWYgWyAiJHciID0gIioiIF07IHRoZW4KKwkJdz0iJGJhZF9jb2xvciR3IgorCWZpCisJaWYgWyAtbiAiJGkiIF07IHRoZW4KKwkJaT0iJG9rX2NvbG9yJGkiCisJZmkKKwlpZiBbIC1uICIkcyIgXTsgdGhlbgorCQlzPSIkZmxhZ3NfY29sb3IkcyIKKwlmaQorCWlmIFsgLW4gIiR1IiBdOyB0aGVuCisJCXU9IiRiYWRfY29sb3IkdSIKKwlmaQorCXI9IiRjX2NsZWFyJHIiCit9CisKKyMgSGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgdGhlIGZpcnN0IGxpbmUgb2YgYSBmaWxlIGludG8gYSB2YXJpYWJsZS4KKyMgX19naXRfZXJlYWQgcmVxdWlyZXMgMiBhcmd1bWVudHMsIHRoZSBmaWxlIHBhdGggYW5kIHRoZSBuYW1lIG9mIHRoZQorIyB2YXJpYWJsZSwgaW4gdGhhdCBvcmRlci4KK19fZ2l0X2VyZWFkICgpCit7CisJdGVzdCAtciAiJDEiICYmIElGUz0kJ1xyXG4nIHJlYWQgIiQyIiA8IiQxIgorfQorCisjIHNlZSBpZiBhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBpbiBwcm9ncmVzcywgaWYgdGhlIHVzZXIgaGFzIGNvbW1pdHRlZCBhCisjIGNvbmZsaWN0IHJlc29sdXRpb24gd2l0aCAnZ2l0IGNvbW1pdCcgaW4gdGhlIG1pZGRsZSBvZiBhIHNlcXVlbmNlIG9mIHBpY2tzIG9yCisjIHJldmVydHMgdGhlbiBDSEVSUllfUElDS19IRUFEL1JFVkVSVF9IRUFEIHdpbGwgbm90IGV4aXN0IHNvIHdlIGhhdmUgdG8gcmVhZAorIyB0aGUgdG9kbyBmaWxlLgorX19naXRfc2VxdWVuY2VyX3N0YXR1cyAoKQoreworCWxvY2FsIHRvZG8KKwlpZiB0ZXN0IC1mICIkZy9DSEVSUllfUElDS19IRUFEIgorCXRoZW4KKwkJcj0ifENIRVJSWS1QSUNLSU5HIgorCQlyZXR1cm4gMDsKKwllbGlmIHRlc3QgLWYgIiRnL1JFVkVSVF9IRUFEIgorCXRoZW4KKwkJcj0ifFJFVkVSVElORyIKKwkJcmV0dXJuIDA7CisJZWxpZiBfX2dpdF9lcmVhZCAiJGcvc2VxdWVuY2VyL3RvZG8iIHRvZG8KKwl0aGVuCisJCWNhc2UgIiR0b2RvIiBpbgorCQlwW1wgXAldfHBpY2tbXCBcCV0qKQorCQkJcj0ifENIRVJSWS1QSUNLSU5HIgorCQkJcmV0dXJuIDAKKwkJOzsKKwkJcmV2ZXJ0W1wgXAldKikKKwkJCXI9InxSRVZFUlRJTkciCisJCQlyZXR1cm4gMAorCQk7OworCQllc2FjCisJZmkKKwlyZXR1cm4gMQorfQorCisjIF9fZ2l0X3BzMSBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKGkuZS4sIGZvcm1hdCBzdHJpbmcpCisjIHdoZW4gY2FsbGVkIGZyb20gUFMxIHVzaW5nIGNvbW1hbmQgc3Vic3RpdHV0aW9uCisjIGluIHRoaXMgbW9kZSBpdCBwcmludHMgdGV4dCB0byBhZGQgdG8gYmFzaCBQUzEgcHJvbXB0IChpbmNsdWRlcyBicmFuY2ggbmFtZSkKKyMKKyMgX19naXRfcHMxIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMgd2hlbiBjYWxsZWQgZnJvbSBQUk9NUFRfQ09NTUFORCAocGMpCisjIGluIHRoYXQgY2FzZSBpdCBfc2V0c18gUFMxLiBUaGUgYXJndW1lbnRzIGFyZSBwYXJ0cyBvZiBhIFBTMSBzdHJpbmcuCisjIHdoZW4gdHdvIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZSBmaXJzdCBpcyBwcmVwZW5kZWQgYW5kIHRoZSBzZWNvbmQgYXBwZW5kZWQKKyMgdG8gdGhlIHN0YXRlIHN0cmluZyB3aGVuIGFzc2lnbmVkIHRvIFBTMS4KKyMgVGhlIG9wdGlvbmFsIHRoaXJkIHBhcmFtZXRlciB3aWxsIGJlIHVzZWQgYXMgcHJpbnRmIGZvcm1hdCBzdHJpbmcgdG8gZnVydGhlcgorIyBjdXN0b21pemUgdGhlIG91dHB1dCBvZiB0aGUgZ2l0LXN0YXR1cyBzdHJpbmcuCisjIEluIHRoaXMgbW9kZSB5b3UgY2FuIHJlcXVlc3QgY29sb3JlZCBoaW50cyB1c2luZyBHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXRydWUKK19fZ2l0X3BzMSAoKQoreworCSMgcHJlc2VydmUgZXhpdCBzdGF0dXMKKwlsb2NhbCBleGl0PSQ/CisJbG9jYWwgcGNtb2RlPW5vCisJbG9jYWwgZGV0YWNoZWQ9bm8KKwlsb2NhbCBwczFwY19zdGFydD0nXHVAXGg6XHcgJworCWxvY2FsIHBzMXBjX2VuZD0nXCQgJworCWxvY2FsIHByaW50Zl9mb3JtYXQ9JyAoJXMpJworCisJY2FzZSAiJCMiIGluCisJCTJ8MykJcGNtb2RlPXllcworCQkJcHMxcGNfc3RhcnQ9IiQxIgorCQkJcHMxcGNfZW5kPSIkMiIKKwkJCXByaW50Zl9mb3JtYXQ9IiR7MzotJHByaW50Zl9mb3JtYXR9IgorCQkJIyBzZXQgUFMxIHRvIGEgcGxhaW4gcHJvbXB0IHNvIHRoYXQgd2UgY2FuCisJCQkjIHNpbXBseSByZXR1cm4gZWFybHkgaWYgdGhlIHByb21wdCBzaG91bGQgbm90CisJCQkjIGJlIGRlY29yYXRlZAorCQkJUFMxPSIkcHMxcGNfc3RhcnQkcHMxcGNfZW5kIgorCQk7OworCQkwfDEpCXByaW50Zl9mb3JtYXQ9IiR7MTotJHByaW50Zl9mb3JtYXR9IgorCQk7OworCQkqKQlyZXR1cm4gJGV4aXQKKwkJOzsKKwllc2FjCisKKwkjIHBzMV9leHBhbmRlZDogIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICd5ZXMnIGlmIHRoZSBzaGVsbAorCSMgc3ViamVjdHMgdGhlIHZhbHVlIG9mIFBTMSB0byBwYXJhbWV0ZXIgZXhwYW5zaW9uOgorCSMKKwkjICAgKiBiYXNoIGRvZXMgdW5sZXNzIHRoZSBwcm9tcHR2YXJzIG9wdGlvbiBpcyBkaXNhYmxlZAorCSMgICAqIHpzaCBkb2VzIG5vdCB1bmxlc3MgdGhlIFBST01QVF9TVUJTVCBvcHRpb24gaXMgc2V0CisJIyAgICogUE9TSVggc2hlbGxzIGFsd2F5cyBkbworCSMKKwkjIElmIHRoZSBzaGVsbCB3b3VsZCBleHBhbmQgdGhlIGNvbnRlbnRzIG9mIFBTMSB3aGVuIGRyYXdpbmcKKwkjIHRoZSBwcm9tcHQsIGEgcmF3IHJlZiBuYW1lIG11c3Qgbm90IGJlIGluY2x1ZGVkIGluIFBTMS4KKwkjIFRoaXMgcHJvdGVjdHMgdGhlIHVzZXIgZnJvbSBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24gdmlhCisJIyBzcGVjaWFsbHkgY3JhZnRlZCByZWYgbmFtZXMuICBGb3IgZXhhbXBsZSwgYSByZWYgbmFtZWQKKwkjICdyZWZzL2hlYWRzLyQoSUZTPV87Y21kPXN1ZG9fcm1fLXJmXy87JGNtZCknIG1pZ2h0IGNhdXNlIHRoZQorCSMgc2hlbGwgdG8gZXhlY3V0ZSAnc3VkbyBybSAtcmYgLycgd2hlbiB0aGUgcHJvbXB0IGlzIGRyYXduLgorCSMKKwkjIEluc3RlYWQsIHRoZSByZWYgbmFtZSBzaG91bGQgYmUgcGxhY2VkIGluIGEgc2VwYXJhdGUgZ2xvYmFsCisJIyB2YXJpYWJsZSAoaW4gdGhlIF9fZ2l0X3BzMV8qIG5hbWVzcGFjZSB0byBhdm9pZCBjb2xsaWRpbmcKKwkjIHdpdGggdGhlIHVzZXIncyBlbnZpcm9ubWVudCkgYW5kIHRoYXQgdmFyaWFibGUgc2hvdWxkIGJlCisJIyByZWZlcmVuY2VkIGZyb20gUFMxLiAgRm9yIGV4YW1wbGU6CisJIworCSMgICAgIF9fZ2l0X3BzMV9mb289JChkb19zb21ldGhpbmdfdG9fZ2V0X3JlZl9uYW1lKQorCSMgICAgIFBTMT0iLi4uc3R1ZmYuLi5cJHtfX2dpdF9wczFfZm9vfS4uLnN0dWZmLi4uIgorCSMKKwkjIElmIHRoZSBzaGVsbCBkb2VzIG5vdCBleHBhbmQgdGhlIGNvbnRlbnRzIG9mIFBTMSwgdGhlIHJhdworCSMgcmVmIG5hbWUgbXVzdCBiZSBpbmNsdWRlZCBpbiBQUzEuCisJIworCSMgVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgb25seSByZWxldmFudCB3aGVuIGluIHBjbW9kZS4KKwkjCisJIyBBc3N1bWUgdGhhdCB0aGUgc2hlbGwgZm9sbG93cyB0aGUgUE9TSVggc3BlY2lmaWNhdGlvbiBhbmQKKwkjIGV4cGFuZHMgUFMxIHVubGVzcyBkZXRlcm1pbmVkIG90aGVyd2lzZS4gIChUaGlzIGlzIG1vcmUKKwkjIGxpa2VseSB0byBiZSBjb3JyZWN0IGlmIHRoZSB1c2VyIGhhcyBhIG5vbi1iYXNoLCBub24tenNoCisJIyBzaGVsbCBhbmQgc2FmZXIgdGhhbiB0aGUgYWx0ZXJuYXRpdmUgaWYgdGhlIGFzc3VtcHRpb24gaXMKKwkjIGluY29ycmVjdC4pCisJIworCWxvY2FsIHBzMV9leHBhbmRlZD15ZXMKKwlbIC16ICIke1pTSF9WRVJTSU9OLX0iIF0gfHwgW1sgLW8gUFJPTVBUX1NVQlNUIF1dIHx8IHBzMV9leHBhbmRlZD1ubworCVsgLXogIiR7QkFTSF9WRVJTSU9OLX0iIF0gfHwgc2hvcHQgLXEgcHJvbXB0dmFycyB8fCBwczFfZXhwYW5kZWQ9bm8KKworCWxvY2FsIHJlcG9faW5mbyByZXZfcGFyc2VfZXhpdF9jb2RlCisJcmVwb19pbmZvPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyIC0taXMtaW5zaWRlLWdpdC1kaXIgXAorCQktLWlzLWJhcmUtcmVwb3NpdG9yeSAtLWlzLWluc2lkZS13b3JrLXRyZWUgXAorCQktLXNob3J0IEhFQUQgMj4vZGV2L251bGwpIgorCXJldl9wYXJzZV9leGl0X2NvZGU9IiQ/IgorCisJaWYgWyAteiAiJHJlcG9faW5mbyIgXTsgdGhlbgorCQlyZXR1cm4gJGV4aXQKKwlmaQorCisJbG9jYWwgc2hvcnRfc2hhPSIiCisJaWYgWyAiJHJldl9wYXJzZV9leGl0X2NvZGUiID0gIjAiIF07IHRoZW4KKwkJc2hvcnRfc2hhPSIke3JlcG9faW5mbyMjKiQnXG4nfSIKKwkJcmVwb19pbmZvPSIke3JlcG9faW5mbyUkJ1xuJyp9IgorCWZpCisJbG9jYWwgaW5zaWRlX3dvcmt0cmVlPSIke3JlcG9faW5mbyMjKiQnXG4nfSIKKwlyZXBvX2luZm89IiR7cmVwb19pbmZvJSQnXG4nKn0iCisJbG9jYWwgYmFyZV9yZXBvPSIke3JlcG9faW5mbyMjKiQnXG4nfSIKKwlyZXBvX2luZm89IiR7cmVwb19pbmZvJSQnXG4nKn0iCisJbG9jYWwgaW5zaWRlX2dpdGRpcj0iJHtyZXBvX2luZm8jIyokJ1xuJ30iCisJbG9jYWwgZz0iJHtyZXBvX2luZm8lJCdcbicqfSIKKworCWlmIFsgInRydWUiID0gIiRpbnNpZGVfd29ya3RyZWUiIF0gJiYKKwkgICBbIC1uICIke0dJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRC19IiBdICYmCisJICAgWyAiJChnaXQgY29uZmlnIC0tYm9vbCBiYXNoLmhpZGVJZlB3ZElnbm9yZWQpIiAhPSAiZmFsc2UiIF0gJiYKKwkgICBnaXQgY2hlY2staWdub3JlIC1xIC4KKwl0aGVuCisJCXJldHVybiAkZXhpdAorCWZpCisKKwlsb2NhbCByPSIiCisJbG9jYWwgYj0iIgorCWxvY2FsIHN0ZXA9IiIKKwlsb2NhbCB0b3RhbD0iIgorCWlmIFsgLWQgIiRnL3JlYmFzZS1tZXJnZSIgXTsgdGhlbgorCQlfX2dpdF9lcmVhZCAiJGcvcmViYXNlLW1lcmdlL2hlYWQtbmFtZSIgYgorCQlfX2dpdF9lcmVhZCAiJGcvcmViYXNlLW1lcmdlL21zZ251bSIgc3RlcAorCQlfX2dpdF9lcmVhZCAiJGcvcmViYXNlLW1lcmdlL2VuZCIgdG90YWwKKwkJcj0ifFJFQkFTRSIKKwllbHNlCisJCWlmIFsgLWQgIiRnL3JlYmFzZS1hcHBseSIgXTsgdGhlbgorCQkJX19naXRfZXJlYWQgIiRnL3JlYmFzZS1hcHBseS9uZXh0IiBzdGVwCisJCQlfX2dpdF9lcmVhZCAiJGcvcmViYXNlLWFwcGx5L2xhc3QiIHRvdGFsCisJCQlpZiBbIC1mICIkZy9yZWJhc2UtYXBwbHkvcmViYXNpbmciIF07IHRoZW4KKwkJCQlfX2dpdF9lcmVhZCAiJGcvcmViYXNlLWFwcGx5L2hlYWQtbmFtZSIgYgorCQkJCXI9InxSRUJBU0UiCisJCQllbGlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9hcHBseWluZyIgXTsgdGhlbgorCQkJCXI9InxBTSIKKwkJCWVsc2UKKwkJCQlyPSJ8QU0vUkVCQVNFIgorCQkJZmkKKwkJZWxpZiBbIC1mICIkZy9NRVJHRV9IRUFEIiBdOyB0aGVuCisJCQlyPSJ8TUVSR0lORyIKKwkJZWxpZiBfX2dpdF9zZXF1ZW5jZXJfc3RhdHVzOyB0aGVuCisJCQk6CisJCWVsaWYgWyAtZiAiJGcvQklTRUNUX0xPRyIgXTsgdGhlbgorCQkJcj0ifEJJU0VDVElORyIKKwkJZmkKKworCQlpZiBbIC1uICIkYiIgXTsgdGhlbgorCQkJOgorCQllbGlmIFsgLWggIiRnL0hFQUQiIF07IHRoZW4KKwkJCSMgc3ltbGluayBzeW1ib2xpYyByZWYKKwkJCWI9IiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsKSIKKwkJZWxzZQorCQkJbG9jYWwgaGVhZD0iIgorCQkJaWYgISBfX2dpdF9lcmVhZCAiJGcvSEVBRCIgaGVhZDsgdGhlbgorCQkJCXJldHVybiAkZXhpdAorCQkJZmkKKwkJCSMgaXMgaXQgYSBzeW1ib2xpYyByZWY/CisJCQliPSIke2hlYWQjcmVmOiB9IgorCQkJaWYgWyAiJGhlYWQiID0gIiRiIiBdOyB0aGVuCisJCQkJZGV0YWNoZWQ9eWVzCisJCQkJYj0iJCgKKwkJCQljYXNlICIke0dJVF9QUzFfREVTQ1JJQkVfU1RZTEUtfSIgaW4KKwkJCQkoY29udGFpbnMpCisJCQkJCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIEhFQUQgOzsKKwkJCQkoYnJhbmNoKQorCQkJCQlnaXQgZGVzY3JpYmUgLS1jb250YWlucyAtLWFsbCBIRUFEIDs7CisJCQkJKHRhZykKKwkJCQkJZ2l0IGRlc2NyaWJlIC0tdGFncyBIRUFEIDs7CisJCQkJKGRlc2NyaWJlKQorCQkJCQlnaXQgZGVzY3JpYmUgSEVBRCA7OworCQkJCSgqIHwgZGVmYXVsdCkKKwkJCQkJZ2l0IGRlc2NyaWJlIC0tdGFncyAtLWV4YWN0LW1hdGNoIEhFQUQgOzsKKwkJCQllc2FjIDI+L2Rldi9udWxsKSIgfHwKKworCQkJCWI9IiRzaG9ydF9zaGEuLi4iCisJCQkJYj0iKCRiKSIKKwkJCWZpCisJCWZpCisJZmkKKworCWlmIFsgLW4gIiRzdGVwIiBdICYmIFsgLW4gIiR0b3RhbCIgXTsgdGhlbgorCQlyPSIkciAkc3RlcC8kdG90YWwiCisJZmkKKworCWxvY2FsIHc9IiIKKwlsb2NhbCBpPSIiCisJbG9jYWwgcz0iIgorCWxvY2FsIHU9IiIKKwlsb2NhbCBjPSIiCisJbG9jYWwgcD0iIgorCisJaWYgWyAidHJ1ZSIgPSAiJGluc2lkZV9naXRkaXIiIF07IHRoZW4KKwkJaWYgWyAidHJ1ZSIgPSAiJGJhcmVfcmVwbyIgXTsgdGhlbgorCQkJYz0iQkFSRToiCisJCWVsc2UKKwkJCWI9IkdJVF9ESVIhIgorCQlmaQorCWVsaWYgWyAidHJ1ZSIgPSAiJGluc2lkZV93b3JrdHJlZSIgXTsgdGhlbgorCQlpZiBbIC1uICIke0dJVF9QUzFfU0hPV0RJUlRZU1RBVEUtfSIgXSAmJgorCQkgICBbICIkKGdpdCBjb25maWcgLS1ib29sIGJhc2guc2hvd0RpcnR5U3RhdGUpIiAhPSAiZmFsc2UiIF0KKwkJdGhlbgorCQkJZ2l0IGRpZmYgLS1uby1leHQtZGlmZiAtLXF1aWV0IHx8IHc9IioiCisJCQlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIC0tY2FjaGVkIC0tcXVpZXQgfHwgaT0iKyIKKwkJCWlmIFsgLXogIiRzaG9ydF9zaGEiIF0gJiYgWyAteiAiJGkiIF07IHRoZW4KKwkJCQlpPSIjIgorCQkJZmkKKwkJZmkKKwkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dTVEFTSFNUQVRFLX0iIF0gJiYKKwkJICAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IHJlZnMvc3Rhc2ggPi9kZXYvbnVsbAorCQl0aGVuCisJCQlzPSIkIgorCQlmaQorCisJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMtfSIgXSAmJgorCQkgICBbICIkKGdpdCBjb25maWcgLS1ib29sIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzKSIgIT0gImZhbHNlIiBdICYmCisJCSAgIGdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQgLS1kaXJlY3RvcnkgLS1uby1lbXB0eS1kaXJlY3RvcnkgLS1lcnJvci11bm1hdGNoIC0tICc6LyonID4vZGV2L251bGwgMj4vZGV2L251bGwKKwkJdGhlbgorCQkJdT0iJSR7WlNIX1ZFUlNJT04rJX0iCisJCWZpCisKKwkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dVUFNUUkVBTS19IiBdOyB0aGVuCisJCQlfX2dpdF9wczFfc2hvd191cHN0cmVhbQorCQlmaQorCWZpCisKKwlsb2NhbCB6PSIke0dJVF9QUzFfU1RBVEVTRVBBUkFUT1ItIiAifSIKKworCSMgTk8gY29sb3Igb3B0aW9uIHVubGVzcyBpbiBQUk9NUFRfQ09NTUFORCBtb2RlCisJaWYgWyAkcGNtb2RlID0geWVzIF0gJiYgWyAtbiAiJHtHSVRfUFMxX1NIT1dDT0xPUkhJTlRTLX0iIF07IHRoZW4KKwkJX19naXRfcHMxX2NvbG9yaXplX2dpdHN0cmluZworCWZpCisKKwliPSR7YiMjcmVmcy9oZWFkcy99CisJaWYgWyAkcGNtb2RlID0geWVzIF0gJiYgWyAkcHMxX2V4cGFuZGVkID0geWVzIF07IHRoZW4KKwkJX19naXRfcHMxX2JyYW5jaF9uYW1lPSRiCisJCWI9Ilwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iCisJZmkKKworCWxvY2FsIGY9IiR3JGkkcyR1IgorCWxvY2FsIGdpdHN0cmluZz0iJGMkYiR7ZjorJHokZn0kciRwIgorCisJaWYgWyAkcGNtb2RlID0geWVzIF07IHRoZW4KKwkJaWYgWyAiJHtfX2dpdF9wcmludGZfc3VwcG9ydHNfdi19IiAhPSB5ZXMgXTsgdGhlbgorCQkJZ2l0c3RyaW5nPSQocHJpbnRmIC0tICIkcHJpbnRmX2Zvcm1hdCIgIiRnaXRzdHJpbmciKQorCQllbHNlCisJCQlwcmludGYgLXYgZ2l0c3RyaW5nIC0tICIkcHJpbnRmX2Zvcm1hdCIgIiRnaXRzdHJpbmciCisJCWZpCisJCVBTMT0iJHBzMXBjX3N0YXJ0JGdpdHN0cmluZyRwczFwY19lbmQiCisJZWxzZQorCQlwcmludGYgLS0gIiRwcmludGZfZm9ybWF0IiAiJGdpdHN0cmluZyIKKwlmaQorCisJcmV0dXJuICRleGl0Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NvbnRhY3RzLy5naXRpZ25vcmUgYi9jb250cmliL2NvbnRhY3RzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4NWVlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29udGFjdHMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKK2dpdC1jb250YWN0cy4xCitnaXQtY29udGFjdHMuaHRtbAorZ2l0LWNvbnRhY3RzLnhtbApkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250YWN0cy9NYWtlZmlsZSBiL2NvbnRyaWIvY29udGFjdHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5OTBmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29udGFjdHMvTWFrZWZpbGUKQEAgLTAsMCArMSw3MSBAQAorIyBUaGUgZGVmYXVsdCB0YXJnZXQgb2YgdGhpcyBNYWtlZmlsZSBpcy4uLgorYWxsOjoKKworLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrCisKK3ByZWZpeCA/PSAvdXNyL2xvY2FsCitnaXRleGVjZGlyID89ICQocHJlZml4KS9saWJleGVjL2dpdC1jb3JlCittYW5kaXIgPz0gJChwcmVmaXgpL3NoYXJlL21hbgorbWFuMWRpciA/PSAkKG1hbmRpcikvbWFuMQoraHRtbGRpciA/PSAkKHByZWZpeCkvc2hhcmUvZG9jL2dpdC1kb2MKKworLi4vLi4vR0lULVZFUlNJT04tRklMRTogRk9SQ0UKKwkkKE1BS0UpIC1DIC4uLy4uLyBHSVQtVkVSU0lPTi1GSUxFCisKKy1pbmNsdWRlIC4uLy4uL0dJVC1WRVJTSU9OLUZJTEUKKworIyB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYSAnc3RhbmRhcmQnIGJzZC10eXBlIGluc3RhbGwgcHJvZ3JhbQorSU5TVEFMTCAgPz0gaW5zdGFsbAorUk0gICAgICAgPz0gcm0gLWYKKworQVNDSUlET0MgPSBhc2NpaWRvYworWE1MVE8gICAgPSB4bWx0bworCitpZm5kZWYgU0hFTExfUEFUSAorCVNIRUxMX1BBVEggPSAvYmluL3NoCitlbmRpZgorU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCisKK0FTQ0lJRE9DX0NPTkYgPSAuLi8uLi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKK01BTlBBR0VfWFNMICAgPSAuLi8uLi9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utbm9ybWFsLnhzbAorCitHSVRfQ09OVEFDVFMgOj0gZ2l0LWNvbnRhY3RzCisKK0dJVF9DT05UQUNUU19ET0MgOj0gZ2l0LWNvbnRhY3RzLjEKK0dJVF9DT05UQUNUU19YTUwgOj0gZ2l0LWNvbnRhY3RzLnhtbAorR0lUX0NPTlRBQ1RTX1RYVCA6PSBnaXQtY29udGFjdHMudHh0CitHSVRfQ09OVEFDVFNfSFRNTCA6PSBnaXQtY29udGFjdHMuaHRtbAorCitkb2M6ICQoR0lUX0NPTlRBQ1RTX0RPQykgJChHSVRfQ09OVEFDVFNfSFRNTCkKKworaW5zdGFsbDogJChHSVRfQ09OVEFDVFMpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQoZ2l0ZXhlY2RpcikKKwkkKElOU1RBTEwpIC1tIDc1NSAkKEdJVF9DT05UQUNUUykgJChERVNURElSKSQoZ2l0ZXhlY2RpcikKKworaW5zdGFsbC1kb2M6IGluc3RhbGwtbWFuIGluc3RhbGwtaHRtbAorCitpbnN0YWxsLW1hbjogJChHSVRfQ09OVEFDVFNfRE9DKQorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtbSA2NDQgJF4gJChERVNURElSKSQobWFuMWRpcikKKworaW5zdGFsbC1odG1sOiAkKEdJVF9DT05UQUNUU19IVE1MKQorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKGh0bWxkaXIpCisJJChJTlNUQUxMKSAtbSA2NDQgJF4gJChERVNURElSKSQoaHRtbGRpcikKKworJChHSVRfQ09OVEFDVFNfRE9DKTogJChHSVRfQ09OVEFDVFNfWE1MKQorCSQoWE1MVE8pIC1tICQoTUFOUEFHRV9YU0wpIG1hbiAkXgorCiskKEdJVF9DT05UQUNUU19YTUwpOiAkKEdJVF9DT05UQUNUU19UWFQpCisJJChBU0NJSURPQykgLWIgZG9jYm9vayAtZCBtYW5wYWdlIC1mICQoQVNDSUlET0NfQ09ORikgXAorCQktYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pICReCisKKyQoR0lUX0NPTlRBQ1RTX0hUTUwpOiAkKEdJVF9DT05UQUNUU19UWFQpCisJJChBU0NJSURPQykgLWIgeGh0bWwxMSAtZCBtYW5wYWdlIC1mICQoQVNDSUlET0NfQ09ORikgXAorCQktYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pICReCisKK2NsZWFuOgorCSQoUk0pICQoR0lUX0NPTlRBQ1RTKQorCSQoUk0pICoueG1sICouaHRtbCAqLjEKKworLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250YWN0cy9naXQtY29udGFjdHMgYi9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NWFkNzMyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb250YWN0cy9naXQtY29udGFjdHMKQEAgLTAsMCArMSwyMDMgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIExpc3QgcGVvcGxlIHdobyBtaWdodCBiZSBpbnRlcmVzdGVkIGluIGEgcGF0Y2guICBVc2VmdWwgYXMgdGhlIGFyZ3VtZW50IHRvCisjIGdpdC1zZW5kLWVtYWlsIC0tY2MtY21kIG9wdGlvbiwgYW5kIGluIG90aGVyIHNpdHVhdGlvbnMuCisjCisjIFVzYWdlOiBnaXQgY29udGFjdHMgPGZpbGUgfCByZXYtbGlzdCBvcHRpb24+IC4uLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIElQQzo6T3BlbjI7CisKK215ICRzaW5jZSA9ICc1LXllYXJzLWFnbyc7CitteSAkbWluX3BlcmNlbnQgPSAxMDsKK215ICRsYWJlbHNfcnggPSBxci9TaWduZWQtb2ZmLWJ5fFJldmlld2VkLWJ5fEFja2VkLWJ5fENjfFJlcG9ydGVkLWJ5L2k7CitteSAlc2VlbjsKKworc3ViIGZvcm1hdF9jb250YWN0IHsKKwlteSAoJG5hbWUsICRlbWFpbCkgPSBAXzsKKwlyZXR1cm4gIiRuYW1lIDwkZW1haWw+IjsKK30KKworc3ViIHBhcnNlX2NvbW1pdCB7CisJbXkgKCRjb21taXQsICRkYXRhKSA9IEBfOworCW15ICRjb250YWN0cyA9ICRjb21taXQtPntjb250YWN0c307CisJbXkgJGluYm9keSA9IDA7CisJZm9yIChzcGxpdCgvXi9tLCAkZGF0YSkpIHsKKwkJaWYgKG5vdCAkaW5ib2R5KSB7CisJCQlpZiAoL15hdXRob3IgKFtePD5dKykgPChcUyspPiAuKyQvKSB7CisJCQkJJGNvbnRhY3RzLT57Zm9ybWF0X2NvbnRhY3QoJDEsICQyKX0gPSAxOworCQkJfSBlbHNpZiAoL14kLykgeworCQkJCSRpbmJvZHkgPSAxOworCQkJfQorCQl9IGVsc2lmICgvXiRsYWJlbHNfcng6XHMrKFtePD5dKylccys8KFxTKz8pPiQvbykgeworCQkJJGNvbnRhY3RzLT57Zm9ybWF0X2NvbnRhY3QoJDEsICQyKX0gPSAxOworCQl9CisJfQorfQorCitzdWIgaW1wb3J0X2NvbW1pdHMgeworCW15ICgkY29tbWl0cykgPSBAXzsKKwlyZXR1cm4gdW5sZXNzICUkY29tbWl0czsKKwlteSAkcGlkID0gb3BlbjIgbXkgJHJlYWRlciwgbXkgJHdyaXRlciwgcXcoZ2l0IGNhdC1maWxlIC0tYmF0Y2gpOworCWZvciBteSAkaWQgKGtleXMoJSRjb21taXRzKSkgeworCQlwcmludCAkd3JpdGVyICIkaWRcbiI7CisJCW15ICRsaW5lID0gPCRyZWFkZXI+OworCQlpZiAoJGxpbmUgPX4gL14oWzAtOWEtZl17NDB9KSBjb21taXQgKFxkKykvKSB7CisJCQlteSAoJGNpZCwgJGxlbikgPSAoJDEsICQyKTsKKwkJCWRpZSAiZXhwZWN0ZWQgJGlkIGJ1dCBnb3QgJGNpZFxuIiB1bmxlc3MgJGlkIGVxICRjaWQ7CisJCQlteSAkZGF0YTsKKwkJCSMgY2F0LWZpbGUgZW1pdHMgbmV3bGluZSBhZnRlciBkYXRhLCBzbyByZWFkIGxlbisxCisJCQlyZWFkICRyZWFkZXIsICRkYXRhLCAkbGVuICsgMTsKKwkJCXBhcnNlX2NvbW1pdCgkY29tbWl0cy0+eyRpZH0sICRkYXRhKTsKKwkJfQorCX0KKwljbG9zZSAkcmVhZGVyOworCWNsb3NlICR3cml0ZXI7CisJd2FpdHBpZCgkcGlkLCAwKTsKKwlkaWUgImdpdC1jYXQtZmlsZSBlcnJvcjogJD9cbiIgaWYgJD87Cit9CisKK3N1YiBnZXRfYmxhbWUgeworCW15ICgkY29tbWl0cywgJHNvdXJjZSwgJGZyb20sICRyYW5nZXMpID0gQF87CisJcmV0dXJuIHVubGVzcyBAJHJhbmdlczsKKwlvcGVuIG15ICRmLCAnLXwnLAorCQlxdyhnaXQgYmxhbWUgLS1wb3JjZWxhaW4gLUMpLAorCQltYXAoeyItTCRfLT5bMF0sKyRfLT5bMV0ifSBAJHJhbmdlcyksCisJCSctLXNpbmNlJywgJHNpbmNlLCAiJGZyb21eIiwgJy0tJywgJHNvdXJjZSBvciBkaWU7CisJd2hpbGUgKDwkZj4pIHsKKwkJaWYgKC9eKFswLTlhLWZdezQwfSkgXGQrIFxkKyBcZCskLykgeworCQkJbXkgJGlkID0gJDE7CisJCQkkY29tbWl0cy0+eyRpZH0gPSB7IGlkID0+ICRpZCwgY29udGFjdHMgPT4ge30gfQorCQkJCXVubGVzcyAkc2VlbnskaWR9OworCQkJJHNlZW57JGlkfSA9IDE7CisJCX0KKwl9CisJY2xvc2UgJGY7Cit9CisKK3N1YiBibGFtZV9zb3VyY2VzIHsKKwlteSAoJHNvdXJjZXMsICRjb21taXRzKSA9IEBfOworCWZvciBteSAkcyAoa2V5cyAlJHNvdXJjZXMpIHsKKwkJZm9yIG15ICRpZCAoa2V5cyAleyRzb3VyY2VzLT57JHN9fSkgeworCQkJZ2V0X2JsYW1lKCRjb21taXRzLCAkcywgJGlkLCAkc291cmNlcy0+eyRzfXskaWR9KTsKKwkJfQorCX0KK30KKworc3ViIHNjYW5fcGF0Y2hlcyB7CisJbXkgKCRzb3VyY2VzLCAkaWQsICRmKSA9IEBfOworCW15ICRzb3VyY2U7CisJd2hpbGUgKDwkZj4pIHsKKwkJaWYgKC9eRnJvbSAoWzAtOWEtZl17NDB9KSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEkLykgeworCQkJJGlkID0gJDE7CisJCQkkc2VlbnskaWR9ID0gMTsKKwkJfQorCQluZXh0IHVubGVzcyAkaWQ7CisJCWlmIChte14tLS0gKD86YS8oLispfC9kZXYvbnVsbCkkfSkgeworCQkJJHNvdXJjZSA9ICQxOworCQl9IGVsc2lmICgvXkBAIC0oXGQrKSg/OiwoXGQrKSk/LyAmJiAkc291cmNlKSB7CisJCQlteSAkbGVuID0gZGVmaW5lZCgkMikgPyAkMiA6IDE7CisJCQlwdXNoIEB7JHNvdXJjZXMtPnskc291cmNlfXskaWR9fSwgWyQxLCAkbGVuXSBpZiAkbGVuOworCQl9CisJfQorfQorCitzdWIgc2Nhbl9wYXRjaF9maWxlIHsKKwlteSAoJGNvbW1pdHMsICRmaWxlKSA9IEBfOworCW9wZW4gbXkgJGYsICc8JywgJGZpbGUgb3IgZGllICJyZWFkIGZhaWx1cmU6ICRmaWxlOiAkIVxuIjsKKwlzY2FuX3BhdGNoZXMoJGNvbW1pdHMsIHVuZGVmLCAkZik7CisJY2xvc2UgJGY7Cit9CisKK3N1YiBwYXJzZV9yZXZfYXJncyB7CisJbXkgQGFyZ3MgPSBAXzsKKwlvcGVuIG15ICRmLCAnLXwnLAorCQlxdyhnaXQgcmV2LXBhcnNlIC0tcmV2cy1vbmx5IC0tZGVmYXVsdCBIRUFEIC0tc3ltYm9saWMpLCBAYXJncworCQlvciBkaWU7CisJbXkgQHJldnM7CisJd2hpbGUgKDwkZj4pIHsKKwkJY2hvbXA7CisJCXB1c2ggQHJldnMsICRfOworCX0KKwljbG9zZSAkZjsKKwlyZXR1cm4gQHJldnMgaWYgc2NhbGFyKEByZXZzKSAhPSAxOworCXJldHVybiAiXiRyZXZzWzBdIiwgJ0hFQUQnIHVubGVzcyAkcmV2c1swXSA9fiAvXi0vOworCXJldHVybiAkcmV2c1swXSwgJ0hFQUQnOworfQorCitzdWIgc2Nhbl9yZXZfYXJncyB7CisJbXkgKCRjb21taXRzLCAkYXJncykgPSBAXzsKKwlteSBAcmV2cyA9IHBhcnNlX3Jldl9hcmdzKEAkYXJncyk7CisJb3BlbiBteSAkZiwgJy18JywgcXcoZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSksIEByZXZzIG9yIGRpZTsKKwl3aGlsZSAoPCRmPikgeworCQljaG9tcDsKKwkJbXkgJGlkID0gJF87CisJCSRzZWVueyRpZH0gPSAxOworCQlvcGVuIG15ICRnLCAnLXwnLCBxdyhnaXQgc2hvdyAtQyAtLW9uZWxpbmUpLCAkaWQgb3IgZGllOworCQlzY2FuX3BhdGNoZXMoJGNvbW1pdHMsICRpZCwgJGcpOworCQljbG9zZSAkZzsKKwl9CisJY2xvc2UgJGY7Cit9CisKK3N1YiBtYWlsbWFwX2NvbnRhY3RzIHsKKwlteSAoJGNvbnRhY3RzKSA9IEBfOworCW15ICVtYXBwZWQ7CisJbXkgJHBpZCA9IG9wZW4yIG15ICRyZWFkZXIsIG15ICR3cml0ZXIsIHF3KGdpdCBjaGVjay1tYWlsbWFwIC0tc3RkaW4pOworCWZvciBteSAkY29udGFjdCAoa2V5cyglJGNvbnRhY3RzKSkgeworCQlwcmludCAkd3JpdGVyICIkY29udGFjdFxuIjsKKwkJbXkgJGNhbm9uaWNhbCA9IDwkcmVhZGVyPjsKKwkJY2hvbXAgJGNhbm9uaWNhbDsKKwkJJG1hcHBlZHskY2Fub25pY2FsfSArPSAkY29udGFjdHMtPnskY29udGFjdH07CisJfQorCWNsb3NlICRyZWFkZXI7CisJY2xvc2UgJHdyaXRlcjsKKwl3YWl0cGlkKCRwaWQsIDApOworCWRpZSAiZ2l0LWNoZWNrLW1haWxtYXAgZXJyb3I6ICQ/XG4iIGlmICQ/OworCXJldHVybiBcJW1hcHBlZDsKK30KKworaWYgKCFAQVJHVikgeworCWRpZSAiTm8gaW5wdXQgcmV2aXNpb25zIG9yIHBhdGNoIGZpbGVzXG4iOworfQorCitteSAoQGZpbGVzLCBAcmV2X2FyZ3MpOworZm9yIChAQVJHVikgeworCWlmICgtZSkgeworCQlwdXNoIEBmaWxlcywgJF87CisJfSBlbHNlIHsKKwkJcHVzaCBAcmV2X2FyZ3MsICRfOworCX0KK30KKworbXkgJXNvdXJjZXM7Citmb3IgKEBmaWxlcykgeworCXNjYW5fcGF0Y2hfZmlsZShcJXNvdXJjZXMsICRfKTsKK30KK2lmIChAcmV2X2FyZ3MpIHsKKwlzY2FuX3Jldl9hcmdzKFwlc291cmNlcywgXEByZXZfYXJncykKK30KKworbXkgJHRvcGxldmVsID0gYGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsYDsKK2Nob21wICR0b3BsZXZlbDsKK2NoZGlyKCR0b3BsZXZlbCkgb3IgZGllICJjaGRpciBmYWlsdXJlOiAkdG9wbGV2ZWw6ICQhXG4iOworCitteSAlY29tbWl0czsKK2JsYW1lX3NvdXJjZXMoXCVzb3VyY2VzLCBcJWNvbW1pdHMpOworaW1wb3J0X2NvbW1pdHMoXCVjb21taXRzKTsKKworbXkgJGNvbnRhY3RzID0ge307Citmb3IgbXkgJGNvbW1pdCAodmFsdWVzICVjb21taXRzKSB7CisJZm9yIG15ICRjb250YWN0IChrZXlzICV7JGNvbW1pdC0+e2NvbnRhY3RzfX0pIHsKKwkJJGNvbnRhY3RzLT57JGNvbnRhY3R9Kys7CisJfQorfQorJGNvbnRhY3RzID0gbWFpbG1hcF9jb250YWN0cygkY29udGFjdHMpOworCitteSAkbmNvbW1pdHMgPSBzY2FsYXIoa2V5cyAlY29tbWl0cyk7Citmb3IgbXkgJGNvbnRhY3QgKGtleXMgJSRjb250YWN0cykgeworCW15ICRwZXJjZW50ID0gJGNvbnRhY3RzLT57JGNvbnRhY3R9ICogMTAwIC8gJG5jb21taXRzOworCW5leHQgaWYgJHBlcmNlbnQgPCAkbWluX3BlcmNlbnQ7CisJcHJpbnQgIiRjb250YWN0XG4iOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250YWN0cy9naXQtY29udGFjdHMudHh0IGIvY29udHJpYi9jb250YWN0cy9naXQtY29udGFjdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOTE0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cy50eHQKQEAgLTAsMCArMSw5NCBAQAorZ2l0LWNvbnRhY3RzKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbnRhY3RzIC0gTGlzdCBwZW9wbGUgd2hvIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gYSBzZXQgb2YgY2hhbmdlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb250YWN0cycgKDxwYXRjaD58PHJhbmdlPnw8cmV2PikuLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l2ZW4gYSBzZXQgb2YgY2hhbmdlcywgc3BlY2lmaWVkIGFzIHBhdGNoIGZpbGVzIG9yIHJldmlzaW9ucywgZGV0ZXJtaW5lIHBlb3BsZQord2hvIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gdGhvc2UgY2hhbmdlcy4gIFRoaXMgaXMgZG9uZSBieSBjb25zdWx0aW5nIHRoZQoraGlzdG9yeSBvZiBlYWNoIHBhdGNoIG9yIHJldmlzaW9uIGh1bmsgdG8gZmluZCBwZW9wbGUgbWVudGlvbmVkIGJ5IGNvbW1pdHMKK3doaWNoIHRvdWNoZWQgdGhlIGxpbmVzIG9mIGZpbGVzIHVuZGVyIGNvbnNpZGVyYXRpb24uCisKK0lucHV0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIHBhdGNoIGZpbGVzIG9yIHJldmlzaW9uIGFyZ3VtZW50cy4gIEEgcmV2aXNpb24KK2FyZ3VtZW50IGNhbiBiZSBhIHJhbmdlIG9yIGEgc2luZ2xlIGA8cmV2PmAgd2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMKK2A8cmV2Pi4uSEVBRGAsIHRodXMgdGhlIHNhbWUgcmV2aXNpb24gYXJndW1lbnRzIGFyZSBhY2NlcHRlZCBhcyBmb3IKK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4gUGF0Y2ggZmlsZXMgYW5kIHJldmlzaW9uIGFyZ3VtZW50cyBjYW4gYmUgY29tYmluZWQKK2luIHRoZSBzYW1lIGludm9jYXRpb24uCisKK1RoaXMgY29tbWFuZCBjYW4gYmUgdXNlZnVsIGZvciBkZXRlcm1pbmluZyB0aGUgbGlzdCBvZiBwZW9wbGUgd2l0aCB3aG9tIHRvCitkaXNjdXNzIHByb3Bvc2VkIGNoYW5nZXMsIG9yIGZvciBmaW5kaW5nIHRoZSBsaXN0IG9mIHJlY2lwaWVudHMgdG8gQ2M6IHdoZW4KK3N1Ym1pdHRpbmcgYSBwYXRjaCBzZXJpZXMgdmlhIGBnaXQgc2VuZC1lbWFpbGAuIEZvciB0aGUgbGF0dGVyIGNhc2UsIGBnaXQKK2NvbnRhY3RzYCBjYW4gYmUgdXNlZCBhcyB0aGUgYXJndW1lbnQgdG8gYGdpdCBzZW5kLWVtYWlsYCdzIGAtLWNjLWNtZGAgb3B0aW9uLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworYGdpdCBibGFtZWAgaXMgaW52b2tlZCBmb3IgZWFjaCBodW5rIGluIGEgcGF0Y2ggZmlsZSBvciByZXZpc2lvbi4gIEZvciBlYWNoCitjb21taXQgbWVudGlvbmVkIGJ5IGBnaXQgYmxhbWVgLCB0aGUgY29tbWl0IG1lc3NhZ2UgaXMgY29uc3VsdGVkIGZvciBwZW9wbGUgd2hvCithdXRob3JlZCwgcmV2aWV3ZWQsIHNpZ25lZCwgYWNrbm93bGVkZ2VkLCBvciB3ZXJlIENjOidkLiAgT25jZSB0aGUgbGlzdCBvZgorcGFydGljaXBhbnRzIGlzIGtub3duLCBlYWNoIHBlcnNvbidzIHJlbGV2YW5jZSBpcyBjb21wdXRlZCBieSBjb25zaWRlcmluZyBob3cKK21hbnkgY29tbWl0cyBtZW50aW9uZWQgdGhhdCBwZXJzb24gY29tcGFyZWQgd2l0aCB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbW1pdHMKK3VuZGVyIGNvbnNpZGVyYXRpb24uICBUaGUgZmluYWwgb3V0cHV0IGNvbnNpc3RzIG9ubHkgb2YgcGFydGljaXBhbnRzIHdobyBleGNlZWQKK2EgbWluaW11bSB0aHJlc2hvbGQgb2YgcGFydGljaXBhdGlvbi4KKworCitPVVRQVVQKKy0tLS0tLQorCitGb3IgZWFjaCBwZXJzb24gb2YgaW50ZXJlc3QsIGEgc2luZ2xlIGxpbmUgaXMgb3V0cHV0LCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZS4KK0lmIHRoZSBwZXJzb24ncyBuYW1lIGlzIGtub3duLCBgYE5hbWUgJCQ8dXNlckBob3N0PiQkJycgaXMgcHJpbnRlZDsgb3RoZXJ3aXNlCitvbmx5IGBgJCQ8dXNlckBob3N0PiQkJycgaXMgcHJpbnRlZC4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBDb25zdWx0IHBhdGNoIGZpbGVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb250YWN0cyBmZWF0dXJlLyoucGF0Y2gKKy0tLS0tLS0tLS0tLQorCisqIFJldmlzaW9uIHJhbmdlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb250YWN0cyBSMS4uUjIKKy0tLS0tLS0tLS0tLQorCisqIEZyb20gYSBzaW5nbGUgcmV2aXNpb24gdG8gYEhFQURgOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb250YWN0cyBvcmlnaW4KKy0tLS0tLS0tLS0tLQorCisqIEhlbHBlciBmb3IgYGdpdCBzZW5kLWVtYWlsYDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgc2VuZC1lbWFpbCAtLWNjLWNtZD0nZ2l0IGNvbnRhY3RzJyBmZWF0dXJlLyoucGF0Y2gKKy0tLS0tLS0tLS0tLQorCisKK0xJTUlUQVRJT05TCistLS0tLS0tLS0tLQorCitTZXZlcmFsIGNvbmRpdGlvbnMgY29udHJvbGxpbmcgYSBwZXJzb24ncyBzaWduaWZpY2FuY2UgYXJlIGN1cnJlbnRseQoraGFyZC1jb2RlZCwgc3VjaCBhcyBtaW5pbXVtIHBhcnRpY2lwYXRpb24gbGV2ZWwgKDEwJSksIGJsYW1lIGRhdGUtbGltaXRpbmcgKDUKK3llYXJzKSwgYW5kIGAtQ2AgbGV2ZWwgZm9yIGRldGVjdGluZyBtb3ZlZCBhbmQgY29waWVkIGxpbmVzIChhIHNpbmdsZSBgLUNgKS4gSW4KK3RoZSBmdXR1cmUsIHRoZXNlIGNvbmRpdGlvbnMgbWF5IGJlY29tZSBjb25maWd1cmFibGUuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9jb250cmliL2NvdmVyYWdlLWRpZmYuc2ggYi9jb250cmliL2NvdmVyYWdlLWRpZmYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGVjNDE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY292ZXJhZ2UtZGlmZi5zaApAQCAtMCwwICsxLDEwOCBAQAorIyEvYmluL3NoCisKKyMgVXNhZ2U6IFJ1biAnY29udHJpYi9jb3ZlcmFnZS1kaWZmLnNoIDx2ZXJzaW9uMT4gPHZlcnNpb24yPicgZnJvbSBzb3VyY2Utcm9vdAorIyBhZnRlciBydW5uaW5nCisjCisjICAgICBtYWtlIGNvdmVyYWdlLXRlc3QKKyMgICAgIG1ha2UgY292ZXJhZ2UtcmVwb3J0CisjCisjIHdoaWxlIGNoZWNrZWQgb3V0IGF0IDx2ZXJzaW9uMj4uIFRoaXMgc2NyaXB0IGNvbWJpbmVzIHRoZSAqLmdjb3YgZmlsZXMKKyMgZ2VuZXJhdGVkIGJ5IHRoZSAnbWFrZScgY29tbWFuZHMgYWJvdmUgd2l0aCAnZ2l0IGRpZmYgPHZlcnNpb24xPiA8dmVyc2lvbjI+JworIyB0byByZXBvcnQgbmV3IGxpbmVzIHRoYXQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSB0ZXN0IHN1aXRlLgorCitWMT0kMQorVjI9JDIKKworZGlmZl9saW5lcyAoKSB7CisJcGVybCAtZSAnCisJCW15ICRsaW5lX251bTsKKwkJd2hpbGUgKDw+KSB7CisJCQkjIEh1bmsgaGVhZGVyPyAgR3JhYiB0aGUgYmVnaW5uaW5nIGluIHBvc3RpbWFnZS4KKwkJCWlmICgvXkBAIC1cZCsoPzosXGQrKT8gXCsoXGQrKSg/OixcZCspPyBAQC8pIHsKKwkJCQkkbGluZV9udW0gPSAkMTsKKwkJCQluZXh0OworCQkJfQorCisJCQkjIEhhdmUgd2Ugc2VlbiBhIGh1bms/ICBJZ25vcmUgImRpZmYgLS1naXQiIGV0Yy4KKwkJCW5leHQgdW5sZXNzIGRlZmluZWQgJGxpbmVfbnVtOworCisJCQkjIERlbGV0ZWQgbGluZT8gSWdub3JlLgorCQkJaWYgKC9eLS8pIHsKKwkJCQluZXh0OworCQkJfQorCisJCQkjIFNob3cgb25seSB0aGUgbGluZSBudW1iZXIgb2YgYWRkZWQgbGluZXMuCisJCQlpZiAoL15cKy8pIHsKKwkJCQlwcmludCAiJGxpbmVfbnVtXG4iOworCQkJfQorCQkJIyBFaXRoZXIgY29tbW9uIGNvbnRleHQgb3IgYWRkZWQgbGluZSBhcHBlYXIgaW4KKwkJCSMgdGhlIHBvc3RpbWFnZS4gIENvdW50IGl0LgorCQkJJGxpbmVfbnVtKys7CisJCX0KKwknCit9CisKK2ZpbGVzPSQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkgIiRWMSIgIiRWMiIgLS0gXCouYykKKworIyBjcmVhdGUgZW1wdHkgZmlsZQorPmNvdmVyYWdlLWRhdGEudHh0CisKK2ZvciBmaWxlIGluICRmaWxlcworZG8KKwlnaXQgZGlmZiAiJFYxIiAiJFYyIiAtLSAiJGZpbGUiIHwKKwlkaWZmX2xpbmVzIHwKKwlzb3J0ID5uZXdfbGluZXMudHh0CisKKwlpZiAhIHRlc3QgLXMgbmV3X2xpbmVzLnR4dAorCXRoZW4KKwkJY29udGludWUKKwlmaQorCisJaGFzaF9maWxlPSQoZWNobyAkZmlsZSB8IHNlZCAicy9cLy9cIy8iKQorCisJaWYgISB0ZXN0IC1zICIkaGFzaF9maWxlLmdjb3YiCisJdGhlbgorCQljb250aW51ZQorCWZpCisKKwlzZWQgLW5lICcvIyMjIyM6L3sKKwkJCXMvICAgICMjIyMjOi8vCisJCQlzLzouKi8vCisJCQlzLyAvL2cKKwkJCXAKKwkJfScgIiRoYXNoX2ZpbGUuZ2NvdiIgfAorCXNvcnQgPnVuY292ZXJlZF9saW5lcy50eHQKKworCWNvbW0gLTEyIHVuY292ZXJlZF9saW5lcy50eHQgbmV3X2xpbmVzLnR4dCB8CisJc2VkIC1lICdzLyQvXCkvJyB8CisJc2VkIC1lICdzL14vIC8nID51bmNvdmVyZWRfbmV3X2xpbmVzLnR4dAorCisJZ3JlcCAtcSAnW15bOnNwYWNlOl1dJyA8dW5jb3ZlcmVkX25ld19saW5lcy50eHQgJiYKKwllY2hvICRmaWxlID4+Y292ZXJhZ2UtZGF0YS50eHQgJiYKKwlnaXQgYmxhbWUgLXMgIiRWMiIgLS0gIiRmaWxlIiB8CisJc2VkICdzL1x0Ly9nJyB8CisJZ3JlcCAtZiB1bmNvdmVyZWRfbmV3X2xpbmVzLnR4dCA+PmNvdmVyYWdlLWRhdGEudHh0ICYmCisJZWNobyA+PmNvdmVyYWdlLWRhdGEudHh0CisKKwlybSAtZiBuZXdfbGluZXMudHh0IHVuY292ZXJlZF9saW5lcy50eHQgdW5jb3ZlcmVkX25ld19saW5lcy50eHQKK2RvbmUKKworY2F0IGNvdmVyYWdlLWRhdGEudHh0CisKK2VjaG8gIkNvbW1pdHMgaW50cm9kdWNpbmcgdW5jb3ZlcmVkIGNvZGU6IgorCitjb21taXRfbGlzdD0kKGNhdCBjb3ZlcmFnZS1kYXRhLnR4dCB8CisJZ3JlcCAtRSAnXlswLTlhLWZdezcsfSAnIHwKKwlhd2sgJ3twcmludCAkMTt9JyB8CisJc29ydCB8CisJdW5pcSkKKworKAorCWZvciBjb21taXQgaW4gJGNvbW1pdF9saXN0CisJZG8KKwkJZ2l0IGxvZyAtLW5vLWRlY29yYXRlIC0tcHJldHR5PWZvcm1hdDonJWFuICAgICAgJWg6ICVzJyAtMSAkY29tbWl0CisJCWVjaG8KKwlkb25lCispIHwgc29ydAorCitybSBjb3ZlcmFnZS1kYXRhLnR4dApkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvLmdpdGlnbm9yZSBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkOGZjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorZ2l0LWNyZWRlbnRpYWwtZ25vbWUta2V5cmluZwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvTWFrZWZpbGUgYi9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmMxOWRmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSwyNSBAQAorTUFJTjo9Z2l0LWNyZWRlbnRpYWwtZ25vbWUta2V5cmluZworYWxsOjogJChNQUlOKQorCitDQyA9IGdjYworUk0gPSBybSAtZgorQ0ZMQUdTID0gLWcgLU8yIC1XYWxsCitQS0dfQ09ORklHID0gcGtnLWNvbmZpZworCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworSU5DUzo9JChzaGVsbCAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGdub21lLWtleXJpbmctMSBnbGliLTIuMCkKK0xJQlM6PSQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgZ25vbWUta2V5cmluZy0xIGdsaWItMi4wKQorCitTUkNTOj0kKE1BSU4pLmMKK09CSlM6PSQoU1JDUzouYz0ubykKKworJS5vOiAlLmMKKwkkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChJTkNTKSAtbyAkQCAtYyAkPAorCiskKE1BSU4pOiAkKE9CSlMpCisJJChDQykgLW8gJEAgJChMREZMQUdTKSAkXiAkKExJQlMpCisKK2NsZWFuOgorCUAkKFJNKSAkKE1BSU4pICQoT0JKUykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL2dpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcuYyBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL2dpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzg5YmZhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvZ2l0LWNyZWRlbnRpYWwtZ25vbWUta2V5cmluZy5jCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEpvaG4gU3pha21laXN0ZXIgPGpvaG5Ac3pha21laXN0ZXIubmV0PgorICogICAgICAgICAgICAgICAyMDEyIFBoaWxpcHAgQS4gSGFydG1hbm4gPHBhaEBxby5jeD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgKiBDcmVkaXRzOgorICogLSBHTk9NRSBLZXlyaW5nIEFQSSBoYW5kbGluZyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgSm9obiBTemFrbWVpc3RlcgorICogLSBwb3J0ZWQgdG8gY3JlZGVudGlhbCBoZWxwZXIgQVBJIGJ5IFBoaWxpcHAgQS4gSGFydG1hbm4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z25vbWUta2V5cmluZy5oPgorCisjaWZkZWYgR05PTUVfS0VZUklOR19ERUZBVUxUCisKKyAgIC8qIE1vZGVybiBnbm9tZS1rZXlyaW5nICovCisKKyNpbmNsdWRlIDxnbm9tZS1rZXlyaW5nLW1lbW9yeS5oPgorCisjZWxzZQorCisgICAvKgorICAgICogU3VwcG9ydCBhbmNpZW50IGdub21lLWtleXJpbmcsIGNpcmMuIFJIRUwgNS5YLgorICAgICogR05PTUVfS0VZUklOR19ERUZBVUxUIHNlZW1zIHRvIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHdpdGggR25vbWUgMi4yMiwKKyAgICAqIGFuZCB0aGUgb3RoZXIgZmVhdHVyZXMgcm91Z2hseSBhcm91bmQgR25vbWUgMi4yMCwgNiBtb250aHMgYmVmb3JlLgorICAgICogVWJ1bnR1IDguMDQgdXNlZCBHbm9tZSAyLjIyIChJIHRoaW5rKS4gIE5vdCBzdXJlIGFueSBkaXN0cm8gdXNlZCAyLjIwLgorICAgICogU28gdGhlIGV4aXN0ZW5jZS9ub24tZXhpc3RlbmNlIG9mIEdOT01FX0tFWVJJTkdfREVGQVVMVCBzZWVtcyBsaWtlCisgICAgKiBhIGRlY2VudCB0aGluZyB0byB1c2UgYXMgYW4gaW5kaWNhdG9yLgorICAgICovCisKKyNkZWZpbmUgR05PTUVfS0VZUklOR19ERUZBVUxUIE5VTEwKKworLyoKKyAqIGFuY2llbnQgZ25vbWUta2V5cmluZyByZXR1cm5zIERFTklFRCB3aGVuIGFuIGVudHJ5IGlzIG5vdCBmb3VuZC4KKyAqIFNldHRpbmcgTk9fTUFUQ0ggdG8gREVOSUVEIHdpbGwgcHJldmVudCB1cyBmcm9tIHJlcG9ydGluZyBERU5JRUQKKyAqIGVycm9ycyBkdXJpbmcgZ2V0IGFuZCBlcmFzZSBvcGVyYXRpb25zLCBidXQgd2Ugd2lsbCBzdGlsbCByZXBvcnQKKyAqIERFTklFRCBlcnJvcnMgZHVyaW5nIGEgc3RvcmUuCisgKi8KKyNkZWZpbmUgR05PTUVfS0VZUklOR19SRVNVTFRfTk9fTUFUQ0ggR05PTUVfS0VZUklOR19SRVNVTFRfREVOSUVECisKKyNkZWZpbmUgZ25vbWVfa2V5cmluZ19tZW1vcnlfYWxsb2MgZ19tYWxsb2MKKyNkZWZpbmUgZ25vbWVfa2V5cmluZ19tZW1vcnlfZnJlZSBnbm9tZV9rZXlyaW5nX2ZyZWVfcGFzc3dvcmQKKyNkZWZpbmUgZ25vbWVfa2V5cmluZ19tZW1vcnlfc3RyZHVwIGdfc3RyZHVwCisKK3N0YXRpYyBjb25zdCBjaGFyICpnbm9tZV9rZXlyaW5nX3Jlc3VsdF90b19tZXNzYWdlKEdub21lS2V5cmluZ1Jlc3VsdCByZXN1bHQpCit7CisJc3dpdGNoIChyZXN1bHQpIHsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX09LOgorCQlyZXR1cm4gIk9LIjsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX0RFTklFRDoKKwkJcmV0dXJuICJEZW5pZWQiOworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfTk9fS0VZUklOR19EQUVNT046CisJCXJldHVybiAiTm8gS2V5cmluZyBEYWVtb24iOworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfQUxSRUFEWV9VTkxPQ0tFRDoKKwkJcmV0dXJuICJBbHJlYWR5IFVuTG9ja2VkIjsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX05PX1NVQ0hfS0VZUklORzoKKwkJcmV0dXJuICJObyBTdWNoIEtleXJpbmciOworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfQkFEX0FSR1VNRU5UUzoKKwkJcmV0dXJuICJCYWQgQXJndW1lbnRzIjsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX0lPX0VSUk9SOgorCQlyZXR1cm4gIklPIEVycm9yIjsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX0NBTkNFTExFRDoKKwkJcmV0dXJuICJDYW5jZWxsZWQiOworCWNhc2UgR05PTUVfS0VZUklOR19SRVNVTFRfQUxSRUFEWV9FWElTVFM6CisJCXJldHVybiAiQWxyZWFkeSBFeGlzdHMiOworCWRlZmF1bHQ6CisJCXJldHVybiAiVW5rbm93biBFcnJvciI7CisJfQorfQorCisvKgorICogU3VwcG9ydCByZWFsbHkgYW5jaWVudCBnbm9tZS1rZXlyaW5nLCBjaXJjLiBSSEVMIDQuWC4KKyAqIEp1c3QgYSBndWVzcyBmb3IgdGhlIEdsaWIgdmVyc2lvbi4gIEdsaWIgMi44IHdhcyByb3VnaGx5IEdub21lIDIuMTIgPworICogV2hpY2ggd2FzIHJlbGVhc2VkIHdpdGggZ25vbWUta2V5cmluZyAwLjQuMyA/PworICovCisjaWYgR0xJQl9NQUpPUl9WRVJTSU9OID09IDIgJiYgR0xJQl9NSU5PUl9WRVJTSU9OIDwgOAorCitzdGF0aWMgdm9pZCBnbm9tZV9rZXlyaW5nX2RvbmVfY2IoR25vbWVLZXlyaW5nUmVzdWx0IHJlc3VsdCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCWdwb2ludGVyICpkYXRhID0gKGdwb2ludGVyICopdXNlcl9kYXRhOworCWludCAqZG9uZSA9IChpbnQgKilkYXRhWzBdOworCUdub21lS2V5cmluZ1Jlc3VsdCAqciA9IChHbm9tZUtleXJpbmdSZXN1bHQgKilkYXRhWzFdOworCisJKnIgPSByZXN1bHQ7CisJKmRvbmUgPSAxOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9yZXF1ZXN0X2NvbXBsZXRpb24oaW50ICpkb25lKQoreworCUdNYWluQ29udGV4dCAqbWMgPSBnX21haW5fY29udGV4dF9kZWZhdWx0KCk7CisJd2hpbGUgKCEqZG9uZSkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKG1jLCBUUlVFKTsKK30KKworc3RhdGljIEdub21lS2V5cmluZ1Jlc3VsdCBnbm9tZV9rZXlyaW5nX2l0ZW1fZGVsZXRlX3N5bmMoY29uc3QgY2hhciAqa2V5cmluZywgZ3VpbnQzMiBpZCkKK3sKKwlpbnQgZG9uZSA9IDA7CisJR25vbWVLZXlyaW5nUmVzdWx0IHJlc3VsdDsKKwlncG9pbnRlciBkYXRhW10gPSB7ICZkb25lLCAmcmVzdWx0IH07CisKKwlnbm9tZV9rZXlyaW5nX2l0ZW1fZGVsZXRlKGtleXJpbmcsIGlkLCBnbm9tZV9rZXlyaW5nX2RvbmVfY2IsIGRhdGEsCisJCU5VTEwpOworCisJd2FpdF9mb3JfcmVxdWVzdF9jb21wbGV0aW9uKCZkb25lKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBUaGlzIGNyZWRlbnRpYWwgc3RydWN0IGFuZCBBUEkgaXMgc2ltcGxpZmllZCBmcm9tIGdpdCdzIGNyZWRlbnRpYWwue2gsY30KKyAqLworc3RydWN0IGNyZWRlbnRpYWwgeworCWNoYXIgKnByb3RvY29sOworCWNoYXIgKmhvc3Q7CisJdW5zaWduZWQgc2hvcnQgcG9ydDsKKwljaGFyICpwYXRoOworCWNoYXIgKnVzZXJuYW1lOworCWNoYXIgKnBhc3N3b3JkOworfTsKKworI2RlZmluZSBDUkVERU5USUFMX0lOSVQgeyBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMIH0KKwordHlwZWRlZiBpbnQgKCpjcmVkZW50aWFsX29wX2NiKShzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKworc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIHsKKwljaGFyICpuYW1lOworCWNyZWRlbnRpYWxfb3BfY2Igb3A7Cit9OworCisjZGVmaW5lIENSRURFTlRJQUxfT1BfRU5EIHsgTlVMTCwgTlVMTCB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIEdOT01FIEtleXJpbmcgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGNyZWF0ZSBhIHNwZWNpYWwga2V5cmluZyBvcHRpb24gc3RyaW5nLCBpZiBwYXRoIGlzIGdpdmVuICovCitzdGF0aWMgY2hhciAqa2V5cmluZ19vYmplY3Qoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaWYgKCFjLT5wYXRoKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjLT5wb3J0KQorCQlyZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCIlczolaGQvJXMiLCBjLT5ob3N0LCBjLT5wb3J0LCBjLT5wYXRoKTsKKworCXJldHVybiBnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwgYy0+aG9zdCwgYy0+cGF0aCk7Cit9CisKK3N0YXRpYyBpbnQga2V5cmluZ19nZXQoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJY2hhciAqb2JqZWN0ID0gTlVMTDsKKwlHTGlzdCAqZW50cmllczsKKwlHbm9tZUtleXJpbmdOZXR3b3JrUGFzc3dvcmREYXRhICpwYXNzd29yZF9kYXRhOworCUdub21lS2V5cmluZ1Jlc3VsdCByZXN1bHQ7CisKKwlpZiAoIWMtPnByb3RvY29sIHx8ICEoYy0+aG9zdCB8fCBjLT5wYXRoKSkKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCW9iamVjdCA9IGtleXJpbmdfb2JqZWN0KGMpOworCisJcmVzdWx0ID0gZ25vbWVfa2V5cmluZ19maW5kX25ldHdvcmtfcGFzc3dvcmRfc3luYygKKwkJCQljLT51c2VybmFtZSwKKwkJCQlOVUxMIC8qIGRvbWFpbiAqLywKKwkJCQljLT5ob3N0LAorCQkJCW9iamVjdCwKKwkJCQljLT5wcm90b2NvbCwKKwkJCQlOVUxMIC8qIGF1dGh0eXBlICovLAorCQkJCWMtPnBvcnQsCisJCQkJJmVudHJpZXMpOworCisJZ19mcmVlKG9iamVjdCk7CisKKwlpZiAocmVzdWx0ID09IEdOT01FX0tFWVJJTkdfUkVTVUxUX05PX01BVENIKQorCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCisJaWYgKHJlc3VsdCA9PSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9DQU5DRUxMRUQpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisKKwlpZiAocmVzdWx0ICE9IEdOT01FX0tFWVJJTkdfUkVTVUxUX09LKSB7CisJCWdfY3JpdGljYWwoIiVzIiwgZ25vbWVfa2V5cmluZ19yZXN1bHRfdG9fbWVzc2FnZShyZXN1bHQpKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwkvKiBwaWNrIHRoZSBmaXJzdCBvbmUgZnJvbSB0aGUgbGlzdCAqLworCXBhc3N3b3JkX2RhdGEgPSAoR25vbWVLZXlyaW5nTmV0d29ya1Bhc3N3b3JkRGF0YSAqKWVudHJpZXMtPmRhdGE7CisKKwlnbm9tZV9rZXlyaW5nX21lbW9yeV9mcmVlKGMtPnBhc3N3b3JkKTsKKwljLT5wYXNzd29yZCA9IGdub21lX2tleXJpbmdfbWVtb3J5X3N0cmR1cChwYXNzd29yZF9kYXRhLT5wYXNzd29yZCk7CisKKwlpZiAoIWMtPnVzZXJuYW1lKQorCQljLT51c2VybmFtZSA9IGdfc3RyZHVwKHBhc3N3b3JkX2RhdGEtPnVzZXIpOworCisJZ25vbWVfa2V5cmluZ19uZXR3b3JrX3Bhc3N3b3JkX2xpc3RfZnJlZShlbnRyaWVzKTsKKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKworc3RhdGljIGludCBrZXlyaW5nX3N0b3JlKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWd1aW50MzIgaXRlbV9pZDsKKwljaGFyICpvYmplY3QgPSBOVUxMOworCUdub21lS2V5cmluZ1Jlc3VsdCByZXN1bHQ7CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGF0IHdoYXQgd2UgYXJlIHN0b3JpbmcgaXMgYWN0dWFsbHkgc2Vuc2libGUuCisJICogSW4gcGFydGljdWxhciwgd2UgY2FuJ3QgbWFrZSBhIFVSTCB3aXRob3V0IGEgcHJvdG9jb2wgZmllbGQuCisJICogV2l0aG91dCBlaXRoZXIgYSBob3N0IG9yIHBhdGhuYW1lIChkZXBlbmRpbmcgb24gdGhlIHNjaGVtZSksCisJICogd2UgaGF2ZSBubyBwcmltYXJ5IGtleS4gQW5kIHdpdGhvdXQgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsCisJICogd2UgYXJlIG5vdCBhY3R1YWxseSBzdG9yaW5nIGEgY3JlZGVudGlhbC4KKwkgKi8KKwlpZiAoIWMtPnByb3RvY29sIHx8ICEoYy0+aG9zdCB8fCBjLT5wYXRoKSB8fAorCSAgICAhYy0+dXNlcm5hbWUgfHwgIWMtPnBhc3N3b3JkKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJb2JqZWN0ID0ga2V5cmluZ19vYmplY3QoYyk7CisKKwlyZXN1bHQgPSBnbm9tZV9rZXlyaW5nX3NldF9uZXR3b3JrX3Bhc3N3b3JkX3N5bmMoCisJCQkJR05PTUVfS0VZUklOR19ERUZBVUxULAorCQkJCWMtPnVzZXJuYW1lLAorCQkJCU5VTEwgLyogZG9tYWluICovLAorCQkJCWMtPmhvc3QsCisJCQkJb2JqZWN0LAorCQkJCWMtPnByb3RvY29sLAorCQkJCU5VTEwgLyogYXV0aHR5cGUgKi8sCisJCQkJYy0+cG9ydCwKKwkJCQljLT5wYXNzd29yZCwKKwkJCQkmaXRlbV9pZCk7CisKKwlnX2ZyZWUob2JqZWN0KTsKKworCWlmIChyZXN1bHQgIT0gR05PTUVfS0VZUklOR19SRVNVTFRfT0sgJiYKKwkgICAgcmVzdWx0ICE9IEdOT01FX0tFWVJJTkdfUkVTVUxUX0NBTkNFTExFRCkgeworCQlnX2NyaXRpY2FsKCIlcyIsIGdub21lX2tleXJpbmdfcmVzdWx0X3RvX21lc3NhZ2UocmVzdWx0KSk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBrZXlyaW5nX2VyYXNlKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWNoYXIgKm9iamVjdCA9IE5VTEw7CisJR0xpc3QgKmVudHJpZXM7CisJR25vbWVLZXlyaW5nTmV0d29ya1Bhc3N3b3JkRGF0YSAqcGFzc3dvcmRfZGF0YTsKKwlHbm9tZUtleXJpbmdSZXN1bHQgcmVzdWx0OworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWV0aGluZyB0byBtYXRjaAorCSAqIGFnYWluc3QuIFRoZSBpbnB1dCB3ZSBnZXQgaXMgYSByZXN0cmljdGl2ZSBwYXR0ZXJuLAorCSAqIHNvIHRlY2huaWNhbGx5IGEgYmxhbmsgY3JlZGVudGlhbCBtZWFucyAiZXJhc2UgZXZlcnl0aGluZyIuCisJICogQnV0IGl0IGlzIHRvbyBlYXN5IHRvIGFjY2lkZW50YWxseSBzZW5kIHRoaXMsIHNpbmNlIGl0IGlzIGVxdWl2YWxlbnQKKwkgKiB0byBlbXB0eSBpbnB1dC4gU28gZXhwbGljaXRseSBkaXNhbGxvdyBpdCwgYW5kIHJlcXVpcmUgdGhhdCB0aGUKKwkgKiBwYXR0ZXJuIGhhdmUgc29tZSBhY3R1YWwgY29udGVudCB0byBtYXRjaC4KKwkgKi8KKwlpZiAoIWMtPnByb3RvY29sICYmICFjLT5ob3N0ICYmICFjLT5wYXRoICYmICFjLT51c2VybmFtZSkKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCW9iamVjdCA9IGtleXJpbmdfb2JqZWN0KGMpOworCisJcmVzdWx0ID0gZ25vbWVfa2V5cmluZ19maW5kX25ldHdvcmtfcGFzc3dvcmRfc3luYygKKwkJCQljLT51c2VybmFtZSwKKwkJCQlOVUxMIC8qIGRvbWFpbiAqLywKKwkJCQljLT5ob3N0LAorCQkJCW9iamVjdCwKKwkJCQljLT5wcm90b2NvbCwKKwkJCQlOVUxMIC8qIGF1dGh0eXBlICovLAorCQkJCWMtPnBvcnQsCisJCQkJJmVudHJpZXMpOworCisJZ19mcmVlKG9iamVjdCk7CisKKwlpZiAocmVzdWx0ID09IEdOT01FX0tFWVJJTkdfUkVTVUxUX05PX01BVENIKQorCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCisJaWYgKHJlc3VsdCA9PSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9DQU5DRUxMRUQpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisKKwlpZiAocmVzdWx0ICE9IEdOT01FX0tFWVJJTkdfUkVTVUxUX09LKSB7CisJCWdfY3JpdGljYWwoIiVzIiwgZ25vbWVfa2V5cmluZ19yZXN1bHRfdG9fbWVzc2FnZShyZXN1bHQpKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwkvKiBwaWNrIHRoZSBmaXJzdCBvbmUgZnJvbSB0aGUgbGlzdCAoZGVsZXRlIGFsbCBtYXRjaGVzPykgKi8KKwlwYXNzd29yZF9kYXRhID0gKEdub21lS2V5cmluZ05ldHdvcmtQYXNzd29yZERhdGEgKillbnRyaWVzLT5kYXRhOworCisJcmVzdWx0ID0gZ25vbWVfa2V5cmluZ19pdGVtX2RlbGV0ZV9zeW5jKAorCQlwYXNzd29yZF9kYXRhLT5rZXlyaW5nLCBwYXNzd29yZF9kYXRhLT5pdGVtX2lkKTsKKworCWdub21lX2tleXJpbmdfbmV0d29ya19wYXNzd29yZF9saXN0X2ZyZWUoZW50cmllcyk7CisKKwlpZiAocmVzdWx0ICE9IEdOT01FX0tFWVJJTkdfUkVTVUxUX09LKSB7CisJCWdfY3JpdGljYWwoIiVzIiwgZ25vbWVfa2V5cmluZ19yZXN1bHRfdG9fbWVzc2FnZShyZXN1bHQpKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCisvKgorICogVGFibGUgd2l0aCBoZWxwZXIgb3BlcmF0aW9uIGNhbGxiYWNrcywgdXNlZCBieSBnZW5lcmljCisgKiBjcmVkZW50aWFsIGhlbHBlciBtYWluIGZ1bmN0aW9uLgorICovCitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIGNvbnN0IGNyZWRlbnRpYWxfaGVscGVyX29wc1tdID0geworCXsgImdldCIsICAga2V5cmluZ19nZXQgfSwKKwl7ICJzdG9yZSIsIGtleXJpbmdfc3RvcmUgfSwKKwl7ICJlcmFzZSIsIGtleXJpbmdfZXJhc2UgfSwKKwlDUkVERU5USUFMX09QX0VORAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIGNyZWRlbnRpYWwgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2luaXQoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2NsZWFyKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWdfZnJlZShjLT5wcm90b2NvbCk7CisJZ19mcmVlKGMtPmhvc3QpOworCWdfZnJlZShjLT5wYXRoKTsKKwlnX2ZyZWUoYy0+dXNlcm5hbWUpOworCWdub21lX2tleXJpbmdfbWVtb3J5X2ZyZWUoYy0+cGFzc3dvcmQpOworCisJY3JlZGVudGlhbF9pbml0KGMpOworfQorCitzdGF0aWMgaW50IGNyZWRlbnRpYWxfcmVhZChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwljaGFyICpidWY7CisJc2l6ZV90IGxpbmVfbGVuOworCWNoYXIgKmtleTsKKwljaGFyICp2YWx1ZTsKKworCWtleSA9IGJ1ZiA9IGdub21lX2tleXJpbmdfbWVtb3J5X2FsbG9jKDEwMjQpOworCisJd2hpbGUgKGZnZXRzKGJ1ZiwgMTAyNCwgc3RkaW4pKSB7CisJCWxpbmVfbGVuID0gc3RybGVuKGJ1Zik7CisKKwkJaWYgKGxpbmVfbGVuICYmIGJ1ZltsaW5lX2xlbi0xXSA9PSAnXG4nKQorCQkJYnVmWy0tbGluZV9sZW5dID0gJ1wwJzsKKworCQlpZiAoIWxpbmVfbGVuKQorCQkJYnJlYWs7CisKKwkJdmFsdWUgPSBzdHJjaHIoYnVmLCAnPScpOworCQlpZiAoIXZhbHVlKSB7CisJCQlnX3dhcm5pbmcoImludmFsaWQgY3JlZGVudGlhbCBsaW5lOiAlcyIsIGtleSk7CisJCQlnbm9tZV9rZXlyaW5nX21lbW9yeV9mcmVlKGJ1Zik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJKnZhbHVlKysgPSAnXDAnOworCisJCWlmICghc3RyY21wKGtleSwgInByb3RvY29sIikpIHsKKwkJCWdfZnJlZShjLT5wcm90b2NvbCk7CisJCQljLT5wcm90b2NvbCA9IGdfc3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgImhvc3QiKSkgeworCQkJZ19mcmVlKGMtPmhvc3QpOworCQkJYy0+aG9zdCA9IGdfc3RyZHVwKHZhbHVlKTsKKwkJCXZhbHVlID0gc3RycmNocihjLT5ob3N0LCAnOicpOworCQkJaWYgKHZhbHVlKSB7CisJCQkJKnZhbHVlKysgPSAnXDAnOworCQkJCWMtPnBvcnQgPSBhdG9pKHZhbHVlKTsKKwkJCX0KKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhdGgiKSkgeworCQkJZ19mcmVlKGMtPnBhdGgpOworCQkJYy0+cGF0aCA9IGdfc3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInVzZXJuYW1lIikpIHsKKwkJCWdfZnJlZShjLT51c2VybmFtZSk7CisJCQljLT51c2VybmFtZSA9IGdfc3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhc3N3b3JkIikpIHsKKwkJCWdub21lX2tleXJpbmdfbWVtb3J5X2ZyZWUoYy0+cGFzc3dvcmQpOworCQkJYy0+cGFzc3dvcmQgPSBnbm9tZV9rZXlyaW5nX21lbW9yeV9zdHJkdXAodmFsdWUpOworCQkJd2hpbGUgKCp2YWx1ZSkKKwkJCQkqdmFsdWUrKyA9ICdcMCc7CisJCX0KKwkJLyoKKwkJICogSWdub3JlIG90aGVyIGxpbmVzOyB3ZSBkb24ndCBrbm93IHdoYXQgdGhleSBtZWFuLCBidXQKKwkJICogdGhpcyBmdXR1cmUtcHJvb2ZzIHVzIHdoZW4gbGF0ZXIgdmVyc2lvbnMgb2YgZ2l0IGRvCisJCSAqIGxlYXJuIG5ldyBsaW5lcywgYW5kIHRoZSBoZWxwZXJzIGFyZSB1cGRhdGVkIHRvIG1hdGNoLgorCQkgKi8KKwl9CisKKwlnbm9tZV9rZXlyaW5nX21lbW9yeV9mcmVlKGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF93cml0ZV9pdGVtKEZJTEUgKmZwLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybjsKKwlmcHJpbnRmKGZwLCAiJXM9JXNcbiIsIGtleSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX3dyaXRlKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCS8qIG9ubHkgd3JpdGUgdXNlcm5hbWUvcGFzc3dvcmQsIGlmIHNldCAqLworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShzdGRvdXQsICJ1c2VybmFtZSIsIGMtPnVzZXJuYW1lKTsKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oc3Rkb3V0LCAicGFzc3dvcmQiLCBjLT5wYXNzd29yZCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIGNvbnN0ICp0cnlfb3AgPSBjcmVkZW50aWFsX2hlbHBlcl9vcHM7CisJY29uc3QgY2hhciAqYmFzZW5hbWUgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisKKwliYXNlbmFtZSA9IChiYXNlbmFtZSkgPyBiYXNlbmFtZSArIDEgOiBuYW1lOworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIDwiLCBiYXNlbmFtZSk7CisJd2hpbGUgKHRyeV9vcC0+bmFtZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgKHRyeV9vcCsrKS0+bmFtZSk7CisJCWlmICh0cnlfb3AtPm5hbWUpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgInwiKTsKKwl9CisJZnByaW50ZihzdGRlcnIsICIlcyIsICI+XG4iKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgcmV0ID0gRVhJVF9TVUNDRVNTOworCisJc3RydWN0IGNyZWRlbnRpYWxfb3BlcmF0aW9uIGNvbnN0ICp0cnlfb3AgPSBjcmVkZW50aWFsX2hlbHBlcl9vcHM7CisJc3RydWN0IGNyZWRlbnRpYWwgY3JlZCA9IENSRURFTlRJQUxfSU5JVDsKKworCWlmICghYXJndlsxXSkgeworCQl1c2FnZShhcmd2WzBdKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWdfc2V0X2FwcGxpY2F0aW9uX25hbWUoIkdpdCBDcmVkZW50aWFsIEhlbHBlciIpOworCisJLyogbG9va3VwIG9wZXJhdGlvbiBjYWxsYmFjayAqLworCXdoaWxlICh0cnlfb3AtPm5hbWUgJiYgc3RyY21wKGFyZ3ZbMV0sIHRyeV9vcC0+bmFtZSkpCisJCXRyeV9vcCsrOworCisJLyogdW5zdXBwb3J0ZWQgb3BlcmF0aW9uIGdpdmVuIC0tIGlnbm9yZSBzaWxlbnRseSAqLworCWlmICghdHJ5X29wLT5uYW1lIHx8ICF0cnlfb3AtPm9wKQorCQlnb3RvIG91dDsKKworCXJldCA9IGNyZWRlbnRpYWxfcmVhZCgmY3JlZCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBwZXJmb3JtIGNyZWRlbnRpYWwgb3BlcmF0aW9uICovCisJcmV0ID0gKCp0cnlfb3AtPm9wKSgmY3JlZCk7CisKKwljcmVkZW50aWFsX3dyaXRlKCZjcmVkKTsKKworb3V0OgorCWNyZWRlbnRpYWxfY2xlYXIoJmNyZWQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbGlic2VjcmV0L01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL2xpYnNlY3JldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY3NTUyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL2xpYnNlY3JldC9NYWtlZmlsZQpAQCAtMCwwICsxLDI1IEBACitNQUlOOj1naXQtY3JlZGVudGlhbC1saWJzZWNyZXQKK2FsbDo6ICQoTUFJTikKKworQ0MgPSBnY2MKK1JNID0gcm0gLWYKK0NGTEFHUyA9IC1nIC1PMiAtV2FsbAorUEtHX0NPTkZJRyA9IHBrZy1jb25maWcKKworLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrCisKK0lOQ1M6PSQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJzZWNyZXQtMSBnbGliLTIuMCkKK0xJQlM6PSQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWxpYnMgbGlic2VjcmV0LTEgZ2xpYi0yLjApCisKK1NSQ1M6PSQoTUFJTikuYworT0JKUzo9JChTUkNTOi5jPS5vKQorCislLm86ICUuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKElOQ1MpIC1vICRAIC1jICQ8CisKKyQoTUFJTik6ICQoT0JKUykKKwkkKENDKSAtbyAkQCAkKExERkxBR1MpICReICQoTElCUykKKworY2xlYW46CisJQCQoUk0pICQoTUFJTikgJChPQkpTKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL2xpYnNlY3JldC9naXQtY3JlZGVudGlhbC1saWJzZWNyZXQuYyBiL2NvbnRyaWIvY3JlZGVudGlhbC9saWJzZWNyZXQvZ2l0LWNyZWRlbnRpYWwtbGlic2VjcmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1OThiNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9saWJzZWNyZXQvZ2l0LWNyZWRlbnRpYWwtbGlic2VjcmV0LmMKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSm9obiBTemFrbWVpc3RlciA8am9obkBzemFrbWVpc3Rlci5uZXQ+CisgKiAgICAgICAgICAgICAgIDIwMTIgUGhpbGlwcCBBLiBIYXJ0bWFubiA8cGFoQHFvLmN4PgorICogICAgICAgICAgICAgICAyMDE2IE1hbnRhcyBNaWt1bMSXbmFzIDxncmF3aXR5QGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgKiBDcmVkaXRzOgorICogLSBHTk9NRSBLZXlyaW5nIEFQSSBoYW5kbGluZyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgSm9obiBTemFrbWVpc3RlcgorICogLSBwb3J0ZWQgdG8gY3JlZGVudGlhbCBoZWxwZXIgQVBJIGJ5IFBoaWxpcHAgQS4gSGFydG1hbm4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8bGlic2VjcmV0L3NlY3JldC5oPgorCisvKgorICogVGhpcyBjcmVkZW50aWFsIHN0cnVjdCBhbmQgQVBJIGlzIHNpbXBsaWZpZWQgZnJvbSBnaXQncyBjcmVkZW50aWFsLntoLGN9CisgKi8KK3N0cnVjdCBjcmVkZW50aWFsIHsKKwljaGFyICpwcm90b2NvbDsKKwljaGFyICpob3N0OworCXVuc2lnbmVkIHNob3J0IHBvcnQ7CisJY2hhciAqcGF0aDsKKwljaGFyICp1c2VybmFtZTsKKwljaGFyICpwYXNzd29yZDsKK307CisKKyNkZWZpbmUgQ1JFREVOVElBTF9JTklUIHsgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCB9CisKK3R5cGVkZWYgaW50ICgqY3JlZGVudGlhbF9vcF9jYikoc3RydWN0IGNyZWRlbnRpYWwgKik7CisKK3N0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiB7CisJY2hhciAqbmFtZTsKKwljcmVkZW50aWFsX29wX2NiIG9wOworfTsKKworI2RlZmluZSBDUkVERU5USUFMX09QX0VORCB7IE5VTEwsIE5VTEwgfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBTZWNyZXQgU2VydmljZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNoYXIgKm1ha2VfbGFiZWwoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaWYgKGMtPnBvcnQpCisJCXJldHVybiBnX3N0cmR1cF9wcmludGYoIkdpdDogJXM6Ly8lczolaHUvJXMiLAorCQkJCQljLT5wcm90b2NvbCwgYy0+aG9zdCwgYy0+cG9ydCwgYy0+cGF0aCA/IGMtPnBhdGggOiAiIik7CisJZWxzZQorCQlyZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCJHaXQ6ICVzOi8vJXMvJXMiLAorCQkJCQljLT5wcm90b2NvbCwgYy0+aG9zdCwgYy0+cGF0aCA/IGMtPnBhdGggOiAiIik7Cit9CisKK3N0YXRpYyBHSGFzaFRhYmxlICptYWtlX2F0dHJfbGlzdChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlHSGFzaFRhYmxlICphbCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgTlVMTCwgZ19mcmVlKTsKKworCWlmIChjLT51c2VybmFtZSkKKwkJZ19oYXNoX3RhYmxlX2luc2VydChhbCwgInVzZXIiLCBnX3N0cmR1cChjLT51c2VybmFtZSkpOworCWlmIChjLT5wcm90b2NvbCkKKwkJZ19oYXNoX3RhYmxlX2luc2VydChhbCwgInByb3RvY29sIiwgZ19zdHJkdXAoYy0+cHJvdG9jb2wpKTsKKwlpZiAoYy0+aG9zdCkKKwkJZ19oYXNoX3RhYmxlX2luc2VydChhbCwgInNlcnZlciIsIGdfc3RyZHVwKGMtPmhvc3QpKTsKKwlpZiAoYy0+cG9ydCkKKwkJZ19oYXNoX3RhYmxlX2luc2VydChhbCwgInBvcnQiLCBnX3N0cmR1cF9wcmludGYoIiVodSIsIGMtPnBvcnQpKTsKKwlpZiAoYy0+cGF0aCkKKwkJZ19oYXNoX3RhYmxlX2luc2VydChhbCwgIm9iamVjdCIsIGdfc3RyZHVwKGMtPnBhdGgpKTsKKworCXJldHVybiBhbDsKK30KKworc3RhdGljIGludCBrZXlyaW5nX2dldChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlTZWNyZXRTZXJ2aWNlICpzZXJ2aWNlID0gTlVMTDsKKwlHSGFzaFRhYmxlICphdHRyaWJ1dGVzID0gTlVMTDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKwlHTGlzdCAqaXRlbXMgPSBOVUxMOworCisJaWYgKCFjLT5wcm90b2NvbCB8fCAhKGMtPmhvc3QgfHwgYy0+cGF0aCkpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlzZXJ2aWNlID0gc2VjcmV0X3NlcnZpY2VfZ2V0X3N5bmMoMCwgTlVMTCwgJmVycm9yKTsKKwlpZiAoZXJyb3IgIT0gTlVMTCkgeworCQlnX2NyaXRpY2FsKCJjb3VsZCBub3QgY29ubmVjdCB0byBTZWNyZXQgU2VydmljZTogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisJCWdfZXJyb3JfZnJlZShlcnJvcik7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJYXR0cmlidXRlcyA9IG1ha2VfYXR0cl9saXN0KGMpOworCWl0ZW1zID0gc2VjcmV0X3NlcnZpY2Vfc2VhcmNoX3N5bmMoc2VydmljZSwKKwkJCQkJICAgU0VDUkVUX1NDSEVNQV9DT01QQVRfTkVUV09SSywKKwkJCQkJICAgYXR0cmlidXRlcywKKwkJCQkJICAgU0VDUkVUX1NFQVJDSF9MT0FEX1NFQ1JFVFMgfCBTRUNSRVRfU0VBUkNIX1VOTE9DSywKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgJmVycm9yKTsKKwlnX2hhc2hfdGFibGVfdW5yZWYoYXR0cmlidXRlcyk7CisJaWYgKGVycm9yICE9IE5VTEwpIHsKKwkJZ19jcml0aWNhbCgibG9va3VwIGZhaWxlZDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisJCWdfZXJyb3JfZnJlZShlcnJvcik7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJaWYgKGl0ZW1zICE9IE5VTEwpIHsKKwkJU2VjcmV0SXRlbSAqaXRlbTsKKwkJU2VjcmV0VmFsdWUgKnNlY3JldDsKKwkJY29uc3QgY2hhciAqczsKKworCQlpdGVtID0gaXRlbXMtPmRhdGE7CisJCXNlY3JldCA9IHNlY3JldF9pdGVtX2dldF9zZWNyZXQoaXRlbSk7CisJCWF0dHJpYnV0ZXMgPSBzZWNyZXRfaXRlbV9nZXRfYXR0cmlidXRlcyhpdGVtKTsKKworCQlzID0gZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLCAidXNlciIpOworCQlpZiAocykgeworCQkJZ19mcmVlKGMtPnVzZXJuYW1lKTsKKwkJCWMtPnVzZXJuYW1lID0gZ19zdHJkdXAocyk7CisJCX0KKworCQlzID0gc2VjcmV0X3ZhbHVlX2dldF90ZXh0KHNlY3JldCk7CisJCWlmIChzKSB7CisJCQlnX2ZyZWUoYy0+cGFzc3dvcmQpOworCQkJYy0+cGFzc3dvcmQgPSBnX3N0cmR1cChzKTsKKwkJfQorCisJCWdfaGFzaF90YWJsZV91bnJlZihhdHRyaWJ1dGVzKTsKKwkJc2VjcmV0X3ZhbHVlX3VucmVmKHNlY3JldCk7CisJCWdfbGlzdF9mcmVlX2Z1bGwoaXRlbXMsIGdfb2JqZWN0X3VucmVmKTsKKwl9CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCisKK3N0YXRpYyBpbnQga2V5cmluZ19zdG9yZShzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwljaGFyICpsYWJlbCA9IE5VTEw7CisJR0hhc2hUYWJsZSAqYXR0cmlidXRlcyA9IE5VTEw7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGF0IHdoYXQgd2UgYXJlIHN0b3JpbmcgaXMgYWN0dWFsbHkgc2Vuc2libGUuCisJICogSW4gcGFydGljdWxhciwgd2UgY2FuJ3QgbWFrZSBhIFVSTCB3aXRob3V0IGEgcHJvdG9jb2wgZmllbGQuCisJICogV2l0aG91dCBlaXRoZXIgYSBob3N0IG9yIHBhdGhuYW1lIChkZXBlbmRpbmcgb24gdGhlIHNjaGVtZSksCisJICogd2UgaGF2ZSBubyBwcmltYXJ5IGtleS4gQW5kIHdpdGhvdXQgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsCisJICogd2UgYXJlIG5vdCBhY3R1YWxseSBzdG9yaW5nIGEgY3JlZGVudGlhbC4KKwkgKi8KKwlpZiAoIWMtPnByb3RvY29sIHx8ICEoYy0+aG9zdCB8fCBjLT5wYXRoKSB8fAorCSAgICAhYy0+dXNlcm5hbWUgfHwgIWMtPnBhc3N3b3JkKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJbGFiZWwgPSBtYWtlX2xhYmVsKGMpOworCWF0dHJpYnV0ZXMgPSBtYWtlX2F0dHJfbGlzdChjKTsKKwlzZWNyZXRfcGFzc3dvcmRfc3RvcmV2X3N5bmMoU0VDUkVUX1NDSEVNQV9DT01QQVRfTkVUV09SSywKKwkJCQkgICAgYXR0cmlidXRlcywKKwkJCQkgICAgTlVMTCwKKwkJCQkgICAgbGFiZWwsCisJCQkJICAgIGMtPnBhc3N3b3JkLAorCQkJCSAgICBOVUxMLAorCQkJCSAgICAmZXJyb3IpOworCWdfZnJlZShsYWJlbCk7CisJZ19oYXNoX3RhYmxlX3VucmVmKGF0dHJpYnV0ZXMpOworCisJaWYgKGVycm9yICE9IE5VTEwpIHsKKwkJZ19jcml0aWNhbCgic3RvcmUgZmFpbGVkOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKwkJZ19lcnJvcl9mcmVlKGVycm9yKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitzdGF0aWMgaW50IGtleXJpbmdfZXJhc2Uoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJR0hhc2hUYWJsZSAqYXR0cmlidXRlcyA9IE5VTEw7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIHRvIG1hdGNoCisJICogYWdhaW5zdC4gVGhlIGlucHV0IHdlIGdldCBpcyBhIHJlc3RyaWN0aXZlIHBhdHRlcm4sCisJICogc28gdGVjaG5pY2FsbHkgYSBibGFuayBjcmVkZW50aWFsIG1lYW5zICJlcmFzZSBldmVyeXRoaW5nIi4KKwkgKiBCdXQgaXQgaXMgdG9vIGVhc3kgdG8gYWNjaWRlbnRhbGx5IHNlbmQgdGhpcywgc2luY2UgaXQgaXMgZXF1aXZhbGVudAorCSAqIHRvIGVtcHR5IGlucHV0LiBTbyBleHBsaWNpdGx5IGRpc2FsbG93IGl0LCBhbmQgcmVxdWlyZSB0aGF0IHRoZQorCSAqIHBhdHRlcm4gaGF2ZSBzb21lIGFjdHVhbCBjb250ZW50IHRvIG1hdGNoLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgJiYgIWMtPmhvc3QgJiYgIWMtPnBhdGggJiYgIWMtPnVzZXJuYW1lKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJYXR0cmlidXRlcyA9IG1ha2VfYXR0cl9saXN0KGMpOworCXNlY3JldF9wYXNzd29yZF9jbGVhcnZfc3luYyhTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorCQkJCSAgICBhdHRyaWJ1dGVzLAorCQkJCSAgICBOVUxMLAorCQkJCSAgICAmZXJyb3IpOworCWdfaGFzaF90YWJsZV91bnJlZihhdHRyaWJ1dGVzKTsKKworCWlmIChlcnJvciAhPSBOVUxMKSB7CisJCWdfY3JpdGljYWwoImVyYXNlIGZhaWxlZDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisJCWdfZXJyb3JfZnJlZShlcnJvcik7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworLyoKKyAqIFRhYmxlIHdpdGggaGVscGVyIG9wZXJhdGlvbiBjYWxsYmFja3MsIHVzZWQgYnkgZ2VuZXJpYworICogY3JlZGVudGlhbCBoZWxwZXIgbWFpbiBmdW5jdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiBjb25zdCBjcmVkZW50aWFsX2hlbHBlcl9vcHNbXSA9IHsKKwl7ICJnZXQiLCAgIGtleXJpbmdfZ2V0IH0sCisJeyAic3RvcmUiLCBrZXlyaW5nX3N0b3JlIH0sCisJeyAiZXJhc2UiLCBrZXlyaW5nX2VyYXNlIH0sCisJQ1JFREVOVElBTF9PUF9FTkQKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBjcmVkZW50aWFsIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9pbml0KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9jbGVhcihzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlnX2ZyZWUoYy0+cHJvdG9jb2wpOworCWdfZnJlZShjLT5ob3N0KTsKKwlnX2ZyZWUoYy0+cGF0aCk7CisJZ19mcmVlKGMtPnVzZXJuYW1lKTsKKwlnX2ZyZWUoYy0+cGFzc3dvcmQpOworCisJY3JlZGVudGlhbF9pbml0KGMpOworfQorCitzdGF0aWMgaW50IGNyZWRlbnRpYWxfcmVhZChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwljaGFyICpidWY7CisJc2l6ZV90IGxpbmVfbGVuOworCWNoYXIgKmtleTsKKwljaGFyICp2YWx1ZTsKKworCWtleSA9IGJ1ZiA9IGdfbWFsbG9jKDEwMjQpOworCisJd2hpbGUgKGZnZXRzKGJ1ZiwgMTAyNCwgc3RkaW4pKSB7CisJCWxpbmVfbGVuID0gc3RybGVuKGJ1Zik7CisKKwkJaWYgKGxpbmVfbGVuICYmIGJ1ZltsaW5lX2xlbi0xXSA9PSAnXG4nKQorCQkJYnVmWy0tbGluZV9sZW5dID0gJ1wwJzsKKworCQlpZiAoIWxpbmVfbGVuKQorCQkJYnJlYWs7CisKKwkJdmFsdWUgPSBzdHJjaHIoYnVmLCAnPScpOworCQlpZiAoIXZhbHVlKSB7CisJCQlnX3dhcm5pbmcoImludmFsaWQgY3JlZGVudGlhbCBsaW5lOiAlcyIsIGtleSk7CisJCQlnX2ZyZWUoYnVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkqdmFsdWUrKyA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoa2V5LCAicHJvdG9jb2wiKSkgeworCQkJZ19mcmVlKGMtPnByb3RvY29sKTsKKwkJCWMtPnByb3RvY29sID0gZ19zdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAiaG9zdCIpKSB7CisJCQlnX2ZyZWUoYy0+aG9zdCk7CisJCQljLT5ob3N0ID0gZ19zdHJkdXAodmFsdWUpOworCQkJdmFsdWUgPSBzdHJyY2hyKGMtPmhvc3QsICc6Jyk7CisJCQlpZiAodmFsdWUpIHsKKwkJCQkqdmFsdWUrKyA9ICdcMCc7CisJCQkJYy0+cG9ydCA9IGF0b2kodmFsdWUpOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAicGF0aCIpKSB7CisJCQlnX2ZyZWUoYy0+cGF0aCk7CisJCQljLT5wYXRoID0gZ19zdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAidXNlcm5hbWUiKSkgeworCQkJZ19mcmVlKGMtPnVzZXJuYW1lKTsKKwkJCWMtPnVzZXJuYW1lID0gZ19zdHJkdXAodmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAicGFzc3dvcmQiKSkgeworCQkJZ19mcmVlKGMtPnBhc3N3b3JkKTsKKwkJCWMtPnBhc3N3b3JkID0gZ19zdHJkdXAodmFsdWUpOworCQkJd2hpbGUgKCp2YWx1ZSkKKwkJCQkqdmFsdWUrKyA9ICdcMCc7CisJCX0KKwkJLyoKKwkJICogSWdub3JlIG90aGVyIGxpbmVzOyB3ZSBkb24ndCBrbm93IHdoYXQgdGhleSBtZWFuLCBidXQKKwkJICogdGhpcyBmdXR1cmUtcHJvb2ZzIHVzIHdoZW4gbGF0ZXIgdmVyc2lvbnMgb2YgZ2l0IGRvCisJCSAqIGxlYXJuIG5ldyBsaW5lcywgYW5kIHRoZSBoZWxwZXJzIGFyZSB1cGRhdGVkIHRvIG1hdGNoLgorCQkgKi8KKwl9CisKKwlnX2ZyZWUoYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX3dyaXRlX2l0ZW0oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuOworCWZwcmludGYoZnAsICIlcz0lc1xuIiwga2V5LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWRlbnRpYWxfd3JpdGUoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJLyogb25seSB3cml0ZSB1c2VybmFtZS9wYXNzd29yZCwgaWYgc2V0ICovCisJY3JlZGVudGlhbF93cml0ZV9pdGVtKHN0ZG91dCwgInVzZXJuYW1lIiwgYy0+dXNlcm5hbWUpOworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShzdGRvdXQsICJwYXNzd29yZCIsIGMtPnBhc3N3b3JkKTsKK30KKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgY3JlZGVudGlhbF9vcGVyYXRpb24gY29uc3QgKnRyeV9vcCA9IGNyZWRlbnRpYWxfaGVscGVyX29wczsKKwljb25zdCBjaGFyICpiYXNlbmFtZSA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKworCWJhc2VuYW1lID0gKGJhc2VuYW1lKSA/IGJhc2VuYW1lICsgMSA6IG5hbWU7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgPCIsIGJhc2VuYW1lKTsKKwl3aGlsZSAodHJ5X29wLT5uYW1lKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCAodHJ5X29wKyspLT5uYW1lKTsKKwkJaWYgKHRyeV9vcC0+bmFtZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCAifCIpOworCX0KKwlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgIj5cbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCByZXQgPSBFWElUX1NVQ0NFU1M7CisKKwlzdHJ1Y3QgY3JlZGVudGlhbF9vcGVyYXRpb24gY29uc3QgKnRyeV9vcCA9IGNyZWRlbnRpYWxfaGVscGVyX29wczsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBjcmVkID0gQ1JFREVOVElBTF9JTklUOworCisJaWYgKCFhcmd2WzFdKSB7CisJCXVzYWdlKGFyZ3ZbMF0pOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJZ19zZXRfYXBwbGljYXRpb25fbmFtZSgiR2l0IENyZWRlbnRpYWwgSGVscGVyIik7CisKKwkvKiBsb29rdXAgb3BlcmF0aW9uIGNhbGxiYWNrICovCisJd2hpbGUgKHRyeV9vcC0+bmFtZSAmJiBzdHJjbXAoYXJndlsxXSwgdHJ5X29wLT5uYW1lKSkKKwkJdHJ5X29wKys7CisKKwkvKiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gZ2l2ZW4gLS0gaWdub3JlIHNpbGVudGx5ICovCisJaWYgKCF0cnlfb3AtPm5hbWUgfHwgIXRyeV9vcC0+b3ApCisJCWdvdG8gb3V0OworCisJcmV0ID0gY3JlZGVudGlhbF9yZWFkKCZjcmVkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIHBlcmZvcm0gY3JlZGVudGlhbCBvcGVyYXRpb24gKi8KKwlyZXQgPSAoKnRyeV9vcC0+b3ApKCZjcmVkKTsKKworCWNyZWRlbnRpYWxfd3JpdGUoJmNyZWQpOworCitvdXQ6CisJY3JlZGVudGlhbF9jbGVhcigmY3JlZCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy8uZ2l0aWdub3JlIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxY2RkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK2dpdC1jcmVkZW50aWFsLW5ldHJjCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvTWFrZWZpbGUgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NGZiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy9NYWtlZmlsZQpAQCAtMCwwICsxLDMwIEBACisjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCithbGw6OgorCitTQ1JJUFRfUEVSTCA9IGdpdC1jcmVkZW50aWFsLW5ldHJjLnBlcmwKK0dJVF9ST09UX0RJUiA9IC4uLy4uLy4uCitIRVJFID0gY29udHJpYi9jcmVkZW50aWFsL25ldHJjCisKK1NDUklQVF9QRVJMX0ZVTEwgPSAkKHBhdHN1YnN0ICUsJChIRVJFKS8lLCQoU0NSSVBUX1BFUkwpKQorCithbGw6OiBidWlsZAorCitidWlsZDoKKwkkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKSBTQ1JJUFRfUEVSTD0iJChTQ1JJUFRfUEVSTF9GVUxMKSIgXAorICAgICAgICAgICAgICAgIGJ1aWxkLXBlcmwtc2NyaXB0CisKK2luc3RhbGw6IGJ1aWxkCisJJChNQUtFKSAtQyAkKEdJVF9ST09UX0RJUikgU0NSSVBUX1BFUkw9IiQoU0NSSVBUX1BFUkxfRlVMTCkiIFwKKyAgICAgICAgICAgICAgICBpbnN0YWxsLXBlcmwtc2NyaXB0CisKK2NsZWFuOgorCSQoTUFLRSkgLUMgJChHSVRfUk9PVF9ESVIpIFNDUklQVF9QRVJMPSIkKFNDUklQVF9QRVJMX0ZVTEwpIiBcCisgICAgICAgICAgICAgICAgY2xlYW4tcGVybC1zY3JpcHQKKwordGVzdDogYnVpbGQKKwkuL3QtZ2l0LWNyZWRlbnRpYWwtbmV0cmMuc2gKKwordGVzdHZlcmJvc2U6IGJ1aWxkCisJLi90LWdpdC1jcmVkZW50aWFsLW5ldHJjLnNoIC1kIC12CisKKy5QSE9OWTogYWxsIGJ1aWxkIGluc3RhbGwgY2xlYW4gdGVzdCB0ZXN0dmVyYm9zZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL2dpdC1jcmVkZW50aWFsLW5ldHJjLnBlcmwgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvZ2l0LWNyZWRlbnRpYWwtbmV0cmMucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzU3Y2M2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL2dpdC1jcmVkZW50aWFsLW5ldHJjLnBlcmwKQEAgLTAsMCArMSw0NDAgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgR2V0b3B0OjpMb25nOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEdpdDsKKworbXkgJFZFUlNJT04gPSAiMC4yIjsKKworbXkgJW9wdGlvbnMgPSAoCisJICAgICAgIGhlbHAgPT4gMCwKKwkgICAgICAgZGVidWcgPT4gMCwKKwkgICAgICAgdmVyYm9zZSA9PiAwLAorCSAgICAgICBpbnNlY3VyZSA9PiAwLAorCSAgICAgICBmaWxlID0+IFtdLAorCisJICAgICAgICMgaWRlbnRpY2FsIHRva2VuIG1hcHMsIGUuZy4gaG9zdCAtPiBob3N0LCB3aWxsIGJlIGluc2VydGVkIGxhdGVyCisJICAgICAgIHRtYXAgPT4geworCQkJcG9ydCA9PiAncHJvdG9jb2wnLAorCQkJbWFjaGluZSA9PiAnaG9zdCcsCisJCQlwYXRoID0+ICdwYXRoJywKKwkJCWxvZ2luID0+ICd1c2VybmFtZScsCisJCQl1c2VyID0+ICd1c2VybmFtZScsCisJCQlwYXNzd29yZCA9PiAncGFzc3dvcmQnLAorCQkgICAgICAgfQorCSAgICAgICk7CisKKyMgTWFwIGVhY2ggY3JlZGVudGlhbCBwcm90b2NvbCB0b2tlbiB0byBpdHNlbGYgb24gdGhlIG5ldHJjIHNpZGUuCitmb3JlYWNoICh2YWx1ZXMgJXskb3B0aW9uc3t0bWFwfX0pIHsKKwkkb3B0aW9uc3t0bWFwfS0+eyRffSA9ICRfOworfQorCisjIE5vdywgJG9wdGlvbnN7dG1hcH0gaGFzIGEgbWFwcGluZyBmcm9tIHRoZSBuZXRyYyBmb3JtYXQgdG8gdGhlIEdpdCBjcmVkZW50aWFsCisjIGhlbHBlciBwcm90b2NvbC4KKworIyBOZXh0LCB3ZSBidWlsZCB0aGUgcmV2ZXJzZSB0b2tlbiBtYXAuCisKKyMgV2hlbiAkcm1hcHtmb299IGNvbnRhaW5zICdiYXInLCB0aGF0IG1lYW5zIHRoYXQgd2hhdCB0aGUgR2l0IGNyZWRlbnRpYWwgaGVscGVyCisjIHByb3RvY29sIGNhbGxzICdiYXInIGlzIGZvdW5kIGFzICdmb28nIGluIHRoZSBuZXRyYy9hdXRoaW5mbyBmaWxlLiAgS2V5cyBpbgorIyAlcm1hcCBhcmUgd2hhdCB3ZSBleHBlY3QgdG8gcmVhZCBmcm9tIHRoZSBuZXRyYy9hdXRoaW5mbyBmaWxlLgorCitteSAlcm1hcDsKK2ZvcmVhY2ggbXkgJGsgKGtleXMgJXskb3B0aW9uc3t0bWFwfX0pIHsKKwlwdXNoIEB7JHJtYXB7JG9wdGlvbnN7dG1hcH0tPnska319fSwgJGs7Cit9CisKK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlKCJidW5kbGluZyIpOworCisjIFRPRE86IG1heWJlIGFsbG93IHRoZSB0b2tlbiBtYXAgJG9wdGlvbnN7dG1hcH0gdG8gYmUgY29uZmlndXJhYmxlLgorR2V0T3B0aW9ucyhcJW9wdGlvbnMsCisgICAgICAgICAgICJoZWxwfGgiLAorICAgICAgICAgICAiZGVidWd8ZCIsCisgICAgICAgICAgICJpbnNlY3VyZXxrIiwKKyAgICAgICAgICAgInZlcmJvc2V8diIsCisgICAgICAgICAgICJmaWxlfGY9c0AiLAorICAgICAgICAgICAnZ3BnfGc6cycsCisgICAgICAgICAgKTsKKworaWYgKCRvcHRpb25ze2hlbHB9KSB7CisJbXkgJHNob3J0bmFtZSA9IGJhc2VuYW1lKCQwKTsKKwkkc2hvcnRuYW1lID1+IHMvZ2l0LWNyZWRlbnRpYWwtLy87CisKKwlwcmludCA8PEVPSElQUFVTOworCiskMCBbKC1mIDxhdXRoZmlsZT4pLi4uXSBbLWcgPHByb2dyYW0+XSBbLWRdIFstdl0gWy1rXSBnZXQKKworVmVyc2lvbiAkVkVSU0lPTiBieSB0enpcQGxpZmVsb2dzLmNvbS4gIExpY2Vuc2U6IEJTRC4KKworT3B0aW9uczoKKworICAtZnwtLWZpbGUgPGF1dGhmaWxlPjogc3BlY2lmeSBuZXRyYy1zdHlsZSBmaWxlcy4gIEZpbGVzIHdpdGggdGhlIC5ncGcKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiB3aWxsIGJlIGRlY3J5cHRlZCBieSBHUEcgYmVmb3JlIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSAtZiBhcmd1bWVudHMgYXJlIE9LLiAgVGhleSBhcmUgcHJvY2Vzc2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlciwgYW5kIHRoZSBmaXJzdCBtYXRjaGluZyBlbnRyeSBmb3VuZCBpcyByZXR1cm5lZAorICAgICAgICAgICAgICAgICAgICAgICAgdmlhIHRoZSBjcmVkZW50aWFsIGhlbHBlciBwcm90b2NvbCAoc2VlIGJlbG93KS4KKworICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBubyAtZiBvcHRpb24gaXMgZ2l2ZW4sIC5hdXRoaW5mby5ncGcsIC5uZXRyYy5ncGcsCisgICAgICAgICAgICAgICAgICAgICAgICAuYXV0aGluZm8sIGFuZCAubmV0cmMgZmlsZXMgaW4geW91ciBob21lIGRpcmVjdG9yeSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaW4gdGhpcyBvcmRlci4KKworICAtZ3wtLWdwZyA8cHJvZ3JhbT4gIDogc3BlY2lmeSB0aGUgcHJvZ3JhbSBmb3IgR1BHLiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgZ3BnLnByb2dyYW0gaW4gdGhlIGdpdCByZXBvc2l0b3J5IG9yIGdsb2JhbAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIG9yIGdwZy4KKworICAta3wtLWluc2VjdXJlICAgICAgIDogaWdub3JlIGJhZCBmaWxlIG93bmVyc2hpcCBvciBwZXJtaXNzaW9ucworCisgIC1kfC0tZGVidWcgICAgICAgICAgOiB0dXJuIG9uIGRlYnVnZ2luZyAoZGV2ZWxvcGVyIGluZm8pCisKKyAgLXZ8LS12ZXJib3NlICAgICAgICA6IGJlIG1vcmUgdmVyYm9zZSAoc2hvdyBmaWxlcyBhbmQgaW5mb3JtYXRpb24gZm91bmQpCisKK1RvIGVuYWJsZSB0aGlzIGNyZWRlbnRpYWwgaGVscGVyOgorCisgIGdpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJyRzaG9ydG5hbWUgLWYgQVVUSEZJTEUxIC1mIEFVVEhGSUxFMicKKworKE5vdGUgdGhhdCBHaXQgd2lsbCBwcmVwZW5kICJnaXQtY3JlZGVudGlhbC0iIHRvIHRoZSBoZWxwZXIgbmFtZSBhbmQgbG9vayBmb3IgaXQKK2luIHRoZSBwYXRoLikKKworLi4uYW5kIGlmIHlvdSB3YW50IGxvdHMgb2YgZGVidWdnaW5nIGluZm86CisKKyAgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAnJHNob3J0bmFtZSAtZiBBVVRIRklMRSAtZCcKKworLi4ub3IgdG8gc2VlIHRoZSBmaWxlcyBvcGVuZWQgYW5kIGRhdGEgZm91bmQ6CisKKyAgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAnJHNob3J0bmFtZSAtZiBBVVRIRklMRSAtdicKKworT25seSAiZ2V0IiBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGlzIGNyZWRlbnRpYWwgaGVscGVyLiAgSXQgb3BlbnMgZXZlcnkKKzxhdXRoZmlsZT4gYW5kIGxvb2tzIGZvciB0aGUgZmlyc3QgZW50cnkgdGhhdCBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgc2VhcmNoCitjcml0ZXJpYToKKworICdwb3J0fHByb3RvY29sJzoKKyAgIFRoZSBwcm90b2NvbCB0aGF0IHdpbGwgYmUgdXNlZCAoZS5nLiwgaHR0cHMpLiAocHJvdG9jb2w9WCkKKworICdtYWNoaW5lfGhvc3QnOgorICAgVGhlIHJlbW90ZSBob3N0bmFtZSBmb3IgYSBuZXR3b3JrIGNyZWRlbnRpYWwuIChob3N0PVgpCisKKyAncGF0aCc6CisgICBUaGUgcGF0aCB3aXRoIHdoaWNoIHRoZSBjcmVkZW50aWFsIHdpbGwgYmUgdXNlZC4gKHBhdGg9WCkKKworICdsb2dpbnx1c2VyfHVzZXJuYW1lJzoKKyAgIFRoZSBjcmVkZW50aWFs4oCZcyB1c2VybmFtZSwgaWYgd2UgYWxyZWFkeSBoYXZlIG9uZS4gKHVzZXJuYW1lPVgpCisKK1RodXMsIHdoZW4gd2UgZ2V0IHRoaXMgcXVlcnkgb24gU1RESU46CisKK2hvc3Q9Z2l0aHViLmNvbQorcHJvdG9jb2w9aHR0cHMKK3VzZXJuYW1lPXR6egorCit0aGlzIGNyZWRlbnRpYWwgaGVscGVyIHdpbGwgbG9vayBmb3IgdGhlIGZpcnN0IGVudHJ5IGluIGV2ZXJ5IDxhdXRoZmlsZT4gdGhhdAorbWF0Y2hlcworCittYWNoaW5lIGdpdGh1Yi5jb20gcG9ydCBodHRwcyBsb2dpbiB0enoKKworT1IKKworbWFjaGluZSBnaXRodWIuY29tIHByb3RvY29sIGh0dHBzIGxvZ2luIHR6egorCitPUi4uLiBldGMuIGFjY2VwdGFibGUgdG9rZW5zIGFzIGxpc3RlZCBhYm92ZS4gIEFueSB1bmtub3duIHRva2VucyBhcmUKK3NpbXBseSBpZ25vcmVkLgorCitUaGVuLCB0aGUgaGVscGVyIHdpbGwgcHJpbnQgb3V0IHdoYXRldmVyIHRva2VucyBpdCBnb3QgZnJvbSB0aGUgZW50cnksIGluY2x1ZGluZworInBhc3N3b3JkIiB0b2tlbnMsIG1hcHBpbmcgYmFjayB0byBHaXQncyBoZWxwZXIgcHJvdG9jb2w7IGUuZy4gInBvcnQiIGlzIG1hcHBlZAorYmFjayB0byAicHJvdG9jb2wiLiAgQW55IHJlZHVuZGFudCBlbnRyeSB0b2tlbnMgKHBhcnQgb2YgdGhlIG9yaWdpbmFsIHF1ZXJ5KSBhcmUKK3NraXBwZWQuCisKK0FnYWluLCBub3RlIHRoYXQgb25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgZW50cnkgZnJvbSBhbGwgdGhlIDxhdXRoZmlsZT5zLAorcHJvY2Vzc2VkIGluIHRoZSBzZXF1ZW5jZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBpcyB1c2VkLgorCitOZXRyYy9hdXRoaW5mbyB0b2tlbnMgY2FuIGJlIHF1b3RlZCBhcyAnU1RSSU5HJyBvciAiU1RSSU5HIi4KKworTm8gY2FjaGluZyBpcyBwZXJmb3JtZWQgYnkgdGhpcyBjcmVkZW50aWFsIGhlbHBlci4KKworRU9ISVBQVVMKKworCWV4aXQgMDsKK30KKworbXkgJG1vZGUgPSBzaGlmdCBAQVJHVjsKKworIyBDcmVkZW50aWFscyBtdXN0IGdldCBhIHBhcmFtZXRlciwgc28gZGllIGlmIGl0J3MgbWlzc2luZy4KK2RpZSAiU3ludGF4OiAkMCBbKC1mIDxhdXRoZmlsZT4pLi4uXSBbLWRdIGdldCIgdW5sZXNzIGRlZmluZWQgJG1vZGU7CisKKyMgT25seSBzdXBwb3J0ICdnZXQnIG1vZGU7IHdpdGggYW55IG90aGVyIHVuc3VwcG9ydGVkIG9uZXMgd2UganVzdCBleGl0LgorZXhpdCAwIHVubGVzcyAkbW9kZSBlcSAnZ2V0JzsKKworbXkgJGZpbGVzID0gJG9wdGlvbnN7ZmlsZX07CisKKyMgaWYgbm8gZmlsZXMgd2VyZSBnaXZlbiwgdXNlIGEgcHJlZGVmaW5lZCBsaXN0LgorIyBub3RlIHRoYXQgLmdwZyBmaWxlcyBjb21lIGZpcnN0Cit1bmxlc3MgKHNjYWxhciBAJGZpbGVzKSB7CisJbXkgQGNhbmRpZGF0ZXMgPSBxd1sKKwkJCQkgICB+Ly5hdXRoaW5mby5ncGcKKwkJCQkgICB+Ly5uZXRyYy5ncGcKKwkJCQkgICB+Ly5hdXRoaW5mbworCQkJCSAgIH4vLm5ldHJjCisJCQkgIF07CisKKwkkZmlsZXMgPSAkb3B0aW9uc3tmaWxlfSA9IFsgbWFwIHsgZ2xvYiAkXyB9IEBjYW5kaWRhdGVzIF07Cit9CisKK2xvYWRfY29uZmlnKFwlb3B0aW9ucyk7CisKK215ICRxdWVyeSA9IHJlYWRfY3JlZGVudGlhbF9kYXRhX2Zyb21fc3RkaW4oKTsKKworRklMRToKK2ZvcmVhY2ggbXkgJGZpbGUgKEAkZmlsZXMpIHsKKwlteSAkZ3BnbW9kZSA9ICRmaWxlID1+IG0vXC5ncGckLzsKKwl1bmxlc3MgKC1yICRmaWxlKSB7CisJCWxvZ192ZXJib3NlKCJVbmFibGUgdG8gcmVhZCAkZmlsZTsgc2tpcHBpbmcgaXQiKTsKKwkJbmV4dCBGSUxFOworCX0KKworCSMgdGhlIGZvbGxvd2luZyBjaGVjayBpcyBjb3BpZWQgZnJvbSBOZXQ6Ok5ldHJjLCBmb3Igbm9uLUdQRyBmaWxlcworCSMgT1MvMiBhbmQgV2luMzIgZG8gbm90IGhhbmRsZSBzdGF0IGluIGEgd2F5IGNvbXBhdGlibGUgd2l0aCB0aGlzIGNoZWNrIDotKAorCXVubGVzcyAoJGdwZ21vZGUgfHwgJG9wdGlvbnN7aW5zZWN1cmV9IHx8CisJCSReTyBlcSAnb3MyJworCQl8fCAkXk8gZXEgJ01TV2luMzInCisJCXx8ICReTyBlcSAnTWFjT1MnCisJCXx8ICReTyA9fiAvXmN5Z3dpbi8pIHsKKwkJbXkgQHN0YXQgPSBzdGF0KCRmaWxlKTsKKworCQlpZiAoQHN0YXQpIHsKKwkJCWlmICgkc3RhdFsyXSAmIDA3NykgeworCQkJCWxvZ192ZXJib3NlKCJJbnNlY3VyZSAkZmlsZSAobW9kZT0lMDRvKTsgc2tpcHBpbmcgaXQiLAorCQkJCQkgICAgJHN0YXRbMl0gJiAwNzc3Nyk7CisJCQkJbmV4dCBGSUxFOworCQkJfQorCisJCQlpZiAoJHN0YXRbNF0gIT0gJDwpIHsKKwkJCQlsb2dfdmVyYm9zZSgiTm90IG93bmVyIG9mICRmaWxlOyBza2lwcGluZyBpdCIpOworCQkJCW5leHQgRklMRTsKKwkJCX0KKwkJfQorCX0KKworCW15IEBlbnRyaWVzID0gbG9hZF9uZXRyYygkZmlsZSwgJGdwZ21vZGUpOworCisJdW5sZXNzIChzY2FsYXIgQGVudHJpZXMpIHsKKwkJaWYgKCQhKSB7CisJCQlsb2dfdmVyYm9zZSgiVW5hYmxlIHRvIG9wZW4gJGZpbGU6ICQhIik7CisJCX0gZWxzZSB7CisJCQlsb2dfdmVyYm9zZSgiTm8gbmV0cmMgZW50cmllcyBmb3VuZCBpbiAkZmlsZSIpOworCQl9CisKKwkJbmV4dCBGSUxFOworCX0KKworCW15ICRlbnRyeSA9IGZpbmRfbmV0cmNfZW50cnkoJHF1ZXJ5LCBAZW50cmllcyk7CisJaWYgKCRlbnRyeSkgeworCQlwcmludF9jcmVkZW50aWFsX2RhdGEoJGVudHJ5LCAkcXVlcnkpOworCQkjIHdlJ3JlIGRvbmUhCisJCWxhc3QgRklMRTsKKwl9Cit9CisKK2V4aXQgMDsKKworc3ViIGxvYWRfbmV0cmMgeworCW15ICRmaWxlID0gc2hpZnQgQF87CisJbXkgJGdwZ21vZGUgPSBzaGlmdCBAXzsKKworCW15ICRpbzsKKwlpZiAoJGdwZ21vZGUpIHsKKwkJbXkgQGNtZCA9ICgkb3B0aW9uc3snZ3BnJ30sIHF3KC0tZGVjcnlwdCksICRmaWxlKTsKKwkJbG9nX3ZlcmJvc2UoIlVzaW5nIEdQRyB0byBvcGVuICRmaWxlOiBbQGNtZF0iKTsKKwkJb3BlbiAkaW8sICItfCIsIEBjbWQ7CisJfSBlbHNlIHsKKwkJbG9nX3ZlcmJvc2UoIk9wZW5pbmcgJGZpbGUuLi4iKTsKKwkJb3BlbiAkaW8sICc8JywgJGZpbGU7CisJfQorCisJIyBub3RoaW5nIHRvIGRvIGlmIHRoZSBvcGVuIGZhaWxlZCAod2UgbG9nIHRoZSBlcnJvciBsYXRlcikKKwlyZXR1cm4gdW5sZXNzICRpbzsKKworCSMgTmV0OjpOZXRyYyBkb2VzIHRoaXMsIGJ1dCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBtZXJnZWQgd2l0aCB0aGUgZmlsZQorCSMgZGV0ZWN0aW9uIGxvZ2ljLCBzbyB3ZSBoYXZlIHRvIGV4dHJhY3QganVzdCB0aGUgcGFydCB3ZSBuZWVkCisJbXkgQG5ldHJjX2VudHJpZXMgPSBuZXRfbmV0cmNfbG9hZGVyKCRpbyk7CisKKwkjIHRoZXNlIGVudHJpZXMgd2lsbCB1c2UgdGhlIGNyZWRlbnRpYWwgaGVscGVyIHByb3RvY29sIHRva2VuIG5hbWVzCisJbXkgQGVudHJpZXM7CisKKwlmb3JlYWNoIG15ICRuZW50cnkgKEBuZXRyY19lbnRyaWVzKSB7CisJCW15ICVlbnRyeTsKKwkJbXkgJG51bV9wb3J0OworCisJCWlmICghZGVmaW5lZCAkbmVudHJ5LT57bWFjaGluZX0pIHsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKGRlZmluZWQgJG5lbnRyeS0+e3BvcnR9ICYmICRuZW50cnktPntwb3J0fSA9fiBtL15cZCskLykgeworCQkJJG51bV9wb3J0ID0gJG5lbnRyeS0+e3BvcnR9OworCQkJZGVsZXRlICRuZW50cnktPntwb3J0fTsKKwkJfQorCisJCSMgY3JlYXRlIHRoZSBuZXcgZW50cnkgZm9yIHRoZSBjcmVkZW50aWFsIGhlbHBlciBwcm90b2NvbAorCQkkZW50cnl7JG9wdGlvbnN7dG1hcH0tPnskX319ID0gJG5lbnRyeS0+eyRffSBmb3JlYWNoIGtleXMgJSRuZW50cnk7CisKKwkJIyBmb3IgImhvc3QgWCBwb3J0IFkiIHdoZXJlIFkgaXMgYW4gaW50ZWdlciAoY2FwdHVyZWQgYnkKKwkJIyAkbnVtX3BvcnQgYWJvdmUpLCBzZXQgdGhlIGhvc3QgdG8gIlg6WSIKKwkJaWYgKGRlZmluZWQgJGVudHJ5e2hvc3R9ICYmIGRlZmluZWQgJG51bV9wb3J0KSB7CisJCQkkZW50cnl7aG9zdH0gPSBqb2luKCc6JywgJGVudHJ5e2hvc3R9LCAkbnVtX3BvcnQpOworCQl9CisKKwkJcHVzaCBAZW50cmllcywgXCVlbnRyeTsKKwl9CisKKwlyZXR1cm4gQGVudHJpZXM7Cit9CisKK3N1YiBuZXRfbmV0cmNfbG9hZGVyIHsKKwlteSAkZmggPSBzaGlmdCBAXzsKKwlteSBAZW50cmllczsKKwlteSAoJG1hY2gsICRtYWNkZWYsICR0b2ssIEB0b2spOworCisgICAgTElORToKKwl3aGlsZSAoPCRmaD4pIHsKKwkJdW5kZWYgJG1hY2RlZiBpZiAvXEFcblxaLzsKKworCQlpZiAoJG1hY2RlZikgeworCQkJbmV4dCBMSU5FOworCQl9CisKKwkJcy9eXHMqLy87CisJCWNob21wOworCisJCXdoaWxlIChsZW5ndGggJiYgcy9eKCIoKD86W14iXSt8XFwuKSopInwoKD86W15cXFxzXSt8XFwuKSopKVxzKi8vKSB7CisJCQkobXkgJHRvayA9ICQrKSA9fiBzL1xcKC4pLyQxL2c7CisJCQlwdXNoKEB0b2ssICR0b2spOworCQl9CisKKwkgICAgVE9LRU46CisJCXdoaWxlIChAdG9rKSB7CisJCQlpZiAoJHRva1swXSBlcSAiZGVmYXVsdCIpIHsKKwkJCQlzaGlmdChAdG9rKTsKKwkJCQkkbWFjaCA9IHsgbWFjaGluZSA9PiB1bmRlZiB9OworCQkJCW5leHQgVE9LRU47CisJCQl9CisKKwkJCSR0b2sgPSBzaGlmdChAdG9rKTsKKworCQkJaWYgKCR0b2sgZXEgIm1hY2hpbmUiKSB7CisJCQkJbXkgJGhvc3QgPSBzaGlmdCBAdG9rOworCQkJCSRtYWNoID0geyBtYWNoaW5lID0+ICRob3N0IH07CisJCQkJcHVzaCBAZW50cmllcywgJG1hY2g7CisJCQl9IGVsc2lmIChleGlzdHMgJG9wdGlvbnN7dG1hcH0tPnskdG9rfSkgeworCQkJCXVubGVzcyAoJG1hY2gpIHsKKwkJCQkJbG9nX2RlYnVnKCJTa2lwcGluZyB0b2tlbiAkdG9rIGJlY2F1c2Ugbm8gbWFjaGluZSB3YXMgZ2l2ZW4iKTsKKwkJCQkJbmV4dCBUT0tFTjsKKwkJCQl9CisKKwkJCQlteSAkdmFsdWUgPSBzaGlmdCBAdG9rOworCQkJCXVubGVzcyAoZGVmaW5lZCAkdmFsdWUpIHsKKwkJCQkJbG9nX2RlYnVnKCJUb2tlbiAkdG9rIGhhZCBubyB2YWx1ZSwgc2tpcHBpbmcgaXQuIik7CisJCQkJCW5leHQgVE9LRU47CisJCQkJfQorCisJCQkJIyBGb2xsb3dpbmcgbGluZSBhZGRlZCBieSBybWVycmVsbCB0byByZW1vdmUgJy8nIGVzY2FwZSBjaGFyIGluIC5uZXRyYworCQkJCSR2YWx1ZSA9fiBzL1wvXFwvXFwvZzsKKwkJCQkkbWFjaC0+eyR0b2t9ID0gJHZhbHVlOworCQkJfSBlbHNpZiAoJHRvayBlcSAibWFjZGVmIikgeyAjIHdlIGlnbm9yZSBtYWNyb3MKKwkJCQluZXh0IFRPS0VOIHVubGVzcyAkbWFjaDsKKwkJCQlteSAkdmFsdWUgPSBzaGlmdCBAdG9rOworCQkJCSRtYWNkZWYgPSAxOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIEBlbnRyaWVzOworfQorCitzdWIgcmVhZF9jcmVkZW50aWFsX2RhdGFfZnJvbV9zdGRpbiB7CisJIyB0aGUgcXVlcnk6IHN0YXJ0IHdpdGggZXZlcnkgdG9rZW4gd2l0aCBubyB2YWx1ZQorCW15ICVxID0gbWFwIHsgJF8gPT4gdW5kZWYgfSB2YWx1ZXMoJXskb3B0aW9uc3t0bWFwfX0pOworCisJd2hpbGUgKDxTVERJTj4pIHsKKwkJbmV4dCB1bmxlc3MgbS9eKFtePV0rKT0oLispLzsKKworCQlteSAoJHRva2VuLCAkdmFsdWUpID0gKCQxLCAkMik7CisJCWRpZSAiVW5rbm93biBzZWFyY2ggdG9rZW4gJHRva2VuIiB1bmxlc3MgZXhpc3RzICRxeyR0b2tlbn07CisJCSRxeyR0b2tlbn0gPSAkdmFsdWU7CisJCWxvZ19kZWJ1ZygiV2Ugd2VyZSBnaXZlbiBzZWFyY2ggdG9rZW4gJHRva2VuIGFuZCB2YWx1ZSAkdmFsdWUiKTsKKwl9CisKKwlmb3JlYWNoIChzb3J0IGtleXMgJXEpIHsKKwkJbG9nX2RlYnVnKCJTZWFyY2hpbmcgZm9yICVzID0gJXMiLCAkXywgJHF7JF99IHx8ICcoYW55IHZhbHVlKScpOworCX0KKworCXJldHVybiBcJXE7Cit9CisKKyMgdGFrZXMgdGhlIHNlYXJjaCB0b2tlbnMgYW5kIHRoZW4gYSBsaXN0IG9mIGVudHJpZXMKKyMgZWFjaCBlbnRyeSBpcyBhIGhhc2ggcmVmZXJlbmNlCitzdWIgZmluZF9uZXRyY19lbnRyeSB7CisJbXkgJHF1ZXJ5ID0gc2hpZnQgQF87CisKKyAgICBFTlRSWToKKwlmb3JlYWNoIG15ICRlbnRyeSAoQF8pCisJeworCQlteSAkZW50cnlfdGV4dCA9IGpvaW4gJywgJywgbWFwIHsgIiRfPSRlbnRyeS0+eyRffSIgfSBrZXlzICUkZW50cnk7CisJCWZvcmVhY2ggbXkgJGNoZWNrIChzb3J0IGtleXMgJSRxdWVyeSkgeworCQkJaWYgKCFkZWZpbmVkICRlbnRyeS0+eyRjaGVja30pIHsKKwkJCSAgICAgICAgbG9nX2RlYnVnKCJPSzogZW50cnkgaGFzIG5vICRjaGVjayB0b2tlbiwgc28gYW55IHZhbHVlIHNhdGlzZmllcyBjaGVjayAkY2hlY2siKTsKKwkJCX0gZWxzaWYgKGRlZmluZWQgJHF1ZXJ5LT57JGNoZWNrfSkgeworCQkJCWxvZ19kZWJ1ZygiY29tcGFyZSAlcyBbJXNdIHRvIFslc10gKGVudHJ5OiAlcykiLAorCQkJCQkgICRjaGVjaywKKwkJCQkJICAkZW50cnktPnskY2hlY2t9LAorCQkJCQkgICRxdWVyeS0+eyRjaGVja30sCisJCQkJCSAgJGVudHJ5X3RleHQpOworCQkJCXVubGVzcyAoJHF1ZXJ5LT57JGNoZWNrfSBlcSAkZW50cnktPnskY2hlY2t9KSB7CisJCQkJCW5leHQgRU5UUlk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlsb2dfZGVidWcoIk9LOiBhbnkgdmFsdWUgc2F0aXNmaWVzIGNoZWNrICRjaGVjayIpOworCQkJfQorCQl9CisKKwkJcmV0dXJuICRlbnRyeTsKKwl9CisKKwkjIG5vdGhpbmcgd2FzIGZvdW5kCisJcmV0dXJuOworfQorCitzdWIgcHJpbnRfY3JlZGVudGlhbF9kYXRhIHsKKwlteSAkZW50cnkgPSBzaGlmdCBAXzsKKwlteSAkcXVlcnkgPSBzaGlmdCBAXzsKKworCWxvZ19kZWJ1ZygiZW50cnkgaGFzIHBhc3NlZCBhbGwgdGhlIHNlYXJjaCBjaGVja3MiKTsKKyBUT0tFTjoKKwlmb3JlYWNoIG15ICRnaXRfdG9rZW4gKHNvcnQga2V5cyAlJGVudHJ5KSB7CisJCWxvZ19kZWJ1ZygibG9va2luZyBmb3IgdXNlZnVsIHRva2VuICRnaXRfdG9rZW4iKTsKKwkJIyBkb24ndCBwcmludCB1bmtub3duICh0byB0aGUgY3JlZGVudGlhbCBoZWxwZXIgcHJvdG9jb2wpIHRva2VucworCQluZXh0IFRPS0VOIHVubGVzcyBleGlzdHMgJHF1ZXJ5LT57JGdpdF90b2tlbn07CisKKwkJIyBkb24ndCBwcmludCB0aGluZ3MgYXNrZWQgaW4gdGhlIHF1ZXJ5ICh0aGUgZW50cnkgbWF0Y2hlcyB0aGVtKQorCQluZXh0IFRPS0VOIGlmIGRlZmluZWQgJHF1ZXJ5LT57JGdpdF90b2tlbn07CisKKwkJbG9nX2RlYnVnKCJGT1VORDogJGdpdF90b2tlbj0kZW50cnktPnskZ2l0X3Rva2VufSIpOworCQlwcmludGYgIiVzPSVzXG4iLCAkZ2l0X3Rva2VuLCAkZW50cnktPnskZ2l0X3Rva2VufTsKKwl9Cit9CitzdWIgbG9hZF9jb25maWcgeworCSMgbG9hZCBzZXR0aW5ncyBmcm9tIGdpdCBjb25maWcKKwlteSAkb3B0aW9ucyA9IHNoaWZ0OworCSMgc2V0IGZyb20gY29tbWFuZCBhcmd1bWVudCwgZ3BnLnByb2dyYW0gb3B0aW9uLCBvciBkZWZhdWx0IHRvIGdwZworCSRvcHRpb25zLT57J2dwZyd9IC8vPSBHaXQ6OmNvbmZpZygnZ3BnLnByb2dyYW0nKQorCSAgICAgICAgICAgICAgICAgIC8vICdncGcnOworCWxvZ192ZXJib3NlKCJ1c2luZyAkb3B0aW9uc3snZ3BnJ30gZm9yIEdQRyBvcGVyYXRpb25zIik7Cit9CitzdWIgbG9nX3ZlcmJvc2UgeworCXJldHVybiB1bmxlc3MgJG9wdGlvbnN7dmVyYm9zZX07CisJcHJpbnRmIFNUREVSUiBAXzsKKwlwcmludGYgU1RERVJSICJcbiI7Cit9CisKK3N1YiBsb2dfZGVidWcgeworCXJldHVybiB1bmxlc3MgJG9wdGlvbnN7ZGVidWd9OworCXByaW50ZiBTVERFUlIgQF87CisJcHJpbnRmIFNUREVSUiAiXG4iOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3QtZ2l0LWNyZWRlbnRpYWwtbmV0cmMuc2ggYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdC1naXQtY3JlZGVudGlhbC1uZXRyYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNzIyN2QwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3QtZ2l0LWNyZWRlbnRpYWwtbmV0cmMuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisoCisJY2QgLi4vLi4vLi4vdAorCXRlc3RfZGVzY3JpcHRpb249J2dpdC1jcmVkZW50aWFsLW5ldHJjJworCS4gLi90ZXN0LWxpYi5zaAorCisJaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwkJc2tpcF9hbGw9J3NraXBwaW5nIHBlcmwgaW50ZXJmYWNlIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJCXRlc3RfZG9uZQorCWZpCisKKwlwZXJsIC1NVGVzdDo6TW9yZSAtZSAwIDI+L2Rldi9udWxsIHx8IHsKKwkJc2tpcF9hbGw9IlBlcmwgVGVzdDo6TW9yZSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgdGVzdCIKKwkJdGVzdF9kb25lCisJfQorCisJIyBzZXQgdXAgdGVzdCByZXBvc2l0b3J5CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkJJ3NldCB1cCB0ZXN0IHJlcG9zaXRvcnknIFwKKwkJJ2dpdCBjb25maWcgLS1hZGQgZ3BnLnByb2dyYW0gdGVzdC5naXQtY29uZmlnLWdwZycKKworCSMgVGhlIGV4dGVybmFsIHRlc3Qgd2lsbCBvdXRwdXRzIGl0cyBvd24gcGxhbgorCXRlc3RfZXh0ZXJuYWxfaGFzX3RhcD0xCisKKwlleHBvcnQgUEVSTDVMSUI9IiRHSVRQRVJMTElCIgorCXRlc3RfZXh0ZXJuYWwgXAorCQknZ2l0LWNyZWRlbnRpYWwtbmV0cmMnIFwKKwkJcGVybCAiJEdJVF9CVUlMRF9ESVIiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LnBsCisKKwl0ZXN0X2RvbmUKKykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LmNvbW1hbmQtb3B0aW9uLWdwZyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LmNvbW1hbmQtb3B0aW9uLWdwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOGYxMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QuY29tbWFuZC1vcHRpb24tZ3BnCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCitlY2hvIG1hY2hpbmUgY29tbWFuZC1vcHRpb24tZ3BnIGxvZ2luIHVzZXJuYW1lIHBhc3N3b3JkIHBhc3N3b3JkCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5naXQtY29uZmlnLWdwZyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LmdpdC1jb25maWctZ3BnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1Y2Y1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5naXQtY29uZmlnLWdwZwpAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorZWNobyBtYWNoaW5lIGdpdC1jb25maWctZ3BnIGxvZ2luIHVzZXJuYW1lIHBhc3N3b3JkIHBhc3N3b3JkCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5uZXRyYyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0Lm5ldHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMTE5YTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5uZXRyYwpAQCAtMCwwICsxLDEzIEBACittYWNoaW5lIGltYXAgbG9naW4gdHp6QGxpZmVsb2dzLmNvbSBwb3J0IGltYXBzIHBhc3N3b3JkIGxldG1la25vdworbWFjaGluZSBpbWFwIGxvZ2luIGJvYiBwb3J0IGltYXBzIHBhc3N3b3JkIGJvYndpbGxrbm93CisKKyMgY29tbWVudCB0ZXN0CisKK21hY2hpbmUgaW1hcDIgbG9naW4gdHp6IHBvcnQgMTA5OSBwYXNzd29yZCB0enprbm93CittYWNoaW5lIGltYXAyIGxvZ2luIGJvYiBwYXNzd29yZCBib2J3aWxsa25vdworCisjIGFub3RoZXIgY29tbWFuZAorCittYWNoaW5lIGdpdGh1Yi5jb20KKyAgbXVsdGlsaW5ldG9rZW4gYW5vdGhlcnZhbHVlCisgIGxvZ2luIGNhcm9sIHBhc3N3b3JkIGNhcm9sa25vd3MKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0Lm5ldHJjLmdwZyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0Lm5ldHJjLmdwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QubmV0cmMuZ3BnCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5wbCBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwZmIzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5wbApAQCAtMCwwICsxLDEzOSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7Cit1c2UgVGVzdDo6TW9yZSBxdyhub19wbGFuKTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBGaWxlOjpTcGVjOjpGdW5jdGlvbnMgcXcoOkRFRkFVTFQgcmVsMmFicyk7Cit1c2UgSVBDOjpPcGVuMjsKKworQkVHSU4geworCSMgdC1naXQtY3JlZGVudGlhbC1uZXRyYy5zaCBraWNrcyBvZmYgb3VyIHRlc3RpbmcsIHNvIHdlIGhhdmUgdG8gZ28KKwkjIGZyb20gdGhlcmUuCisJVGVzdDo6TW9yZS0+YnVpbGRlci0+Y3VycmVudF90ZXN0KDEpOworfQorCitteSBAZ2xvYmFsX2NyZWRlbnRpYWxfYXJncyA9IEBBUkdWOworbXkgJHNjcmlwdERpciA9IGRpcm5hbWUgcmVsMmFicyAkMDsKK215ICgkbmV0cmMsICRuZXRyY0dwZywgJGdjTmV0cmMpID0gbWFwIHsgY2F0ZmlsZSAkc2NyaXB0RGlyLCAkXzsgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXcodGVzdC5uZXRyYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC5uZXRyYy5ncGcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdC1jcmVkZW50aWFsLW5ldHJjKTsKK2xvY2FsICRFTlZ7UEFUSH0gPSBqb2luICc6JworICAgICAgICAgICAgICAgICAgICAgICwgJHNjcmlwdERpcgorICAgICAgICAgICAgICAgICAgICAgICwgJEVOVntQQVRIfQorICAgICAgICAgICAgICAgICAgICAgID8gJEVOVntQQVRIfQorICAgICAgICAgICAgICAgICAgICAgIDogKCk7CisKK2RpYWcgIlRlc3RpbmcgaW5zZWN1cmUgZmlsZSwgbm90aGluZyBzaG91bGQgYmUgZm91bmRcbiI7CitjaG1vZCAwNjQ0LCAkbmV0cmM7CitteSAkY3JlZCA9IHJ1bl9jcmVkZW50aWFsKFsnLWYnLCAkbmV0cmMsICdnZXQnXSwKKwkJCSAgeyBob3N0ID0+ICdnaXRodWIuY29tJyB9KTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkID09IDAsICJHb3QgMCBrZXlzIGZyb20gaW5zZWN1cmUgZmlsZSIpOworCitkaWFnICJUZXN0aW5nIG1pc3NpbmcgZmlsZSwgbm90aGluZyBzaG91bGQgYmUgZm91bmRcbiI7CitjaG1vZCAwNjQ0LCAkbmV0cmM7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKFsnLWYnLCAnLy8vbm9zdWNoZmlsZS8vLycsICdnZXQnXSwKKwkJICAgICAgIHsgaG9zdCA9PiAnZ2l0aHViLmNvbScgfSk7CisKK29rKHNjYWxhciBrZXlzICUkY3JlZCA9PSAwLCAiR290IDAga2V5cyBmcm9tIG1pc3NpbmcgZmlsZSIpOworCitjaG1vZCAwNjAwLCAkbmV0cmM7CisKK2RpYWcgIlRlc3Rpbmcgd2l0aCBpbnZhbGlkIGRhdGFcbiI7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKFsnLWYnLCAkbmV0cmMsICdnZXQnXSwKKwkJICAgICAgICJiYWQgZGF0YSIpOworb2soc2NhbGFyIGtleXMgJSRjcmVkID09IDQsICJHb3QgZmlyc3QgZm91bmQga2V5cyB3aXRoIGJhZCBkYXRhIik7CisKK2RpYWcgIlRlc3RpbmcgbmV0cmMgZmlsZSBmb3IgYSBtaXNzaW5nIGNvcm92YW1pbGtiYXIgZW50cnlcbiI7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKFsnLWYnLCAkbmV0cmMsICdnZXQnXSwKKwkJICAgICAgIHsgaG9zdCA9PiAnY29yb3ZhbWlsa2JhcicgfSk7CisKK29rKHNjYWxhciBrZXlzICUkY3JlZCA9PSAwLCAiR290IG5vIGNvcm92YW1pbGtiYXIga2V5cyIpOworCitkaWFnICJUZXN0aW5nIG5ldHJjIGZpbGUgZm9yIGEgZ2l0aHViLmNvbSBlbnRyeVxuIjsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICRuZXRyYywgJ2dldCddLAorCQkgICAgICAgeyBob3N0ID0+ICdnaXRodWIuY29tJyB9KTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkID09IDIsICJHb3QgMiBHaXRodWIga2V5cyIpOworCitpcygkY3JlZC0+e3Bhc3N3b3JkfSwgJ2Nhcm9sa25vd3MnLCAiR290IGNvcnJlY3QgR2l0aHViIHBhc3N3b3JkIik7CitpcygkY3JlZC0+e3VzZXJuYW1lfSwgJ2Nhcm9sJywgIkdvdCBjb3JyZWN0IEdpdGh1YiB1c2VybmFtZSIpOworCitkaWFnICJUZXN0aW5nIG5ldHJjIGZpbGUgZm9yIGEgdXNlcm5hbWUtc3BlY2lmaWMgZW50cnlcbiI7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKFsnLWYnLCAkbmV0cmMsICdnZXQnXSwKKwkJICAgICAgIHsgaG9zdCA9PiAnaW1hcCcsIHVzZXJuYW1lID0+ICdib2InIH0pOworCitvayhzY2FsYXIga2V5cyAlJGNyZWQgPT0gMiwgIkdvdCAyIHVzZXJuYW1lLXNwZWNpZmljIGtleXMiKTsKKworaXMoJGNyZWQtPntwYXNzd29yZH0sICdib2J3aWxsa25vdycsICJHb3QgY29ycmVjdCB1c2VyLXNwZWNpZmljIHBhc3N3b3JkIik7CitpcygkY3JlZC0+e3Byb3RvY29sfSwgJ2ltYXBzJywgIkdvdCBjb3JyZWN0IHVzZXItc3BlY2lmaWMgcHJvdG9jb2wiKTsKKworZGlhZyAiVGVzdGluZyBuZXRyYyBmaWxlIGZvciBhIGhvc3Q6cG9ydC1zcGVjaWZpYyBlbnRyeVxuIjsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICRuZXRyYywgJ2dldCddLAorCQkgICAgICAgeyBob3N0ID0+ICdpbWFwMjoxMDk5JyB9KTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkID09IDIsICJHb3QgMiBob3N0OnBvcnQtc3BlY2lmaWMga2V5cyIpOworCitpcygkY3JlZC0+e3Bhc3N3b3JkfSwgJ3R6emtub3cnLCAiR290IGNvcnJlY3QgaG9zdDpwb3J0LXNwZWNpZmljIHBhc3N3b3JkIik7CitpcygkY3JlZC0+e3VzZXJuYW1lfSwgJ3R6eicsICJHb3QgY29ycmVjdCBob3N0OnBvcnQtc3BlY2lmaWMgdXNlcm5hbWUiKTsKKworZGlhZyAiVGVzdGluZyBuZXRyYyBmaWxlIHRoYXQgJ2hvc3Q6cG9ydCBraWxscyBob3N0JyBlbnRyeVxuIjsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICRuZXRyYywgJ2dldCddLAorCQkgICAgICAgeyBob3N0ID0+ICdpbWFwMicgfSk7CisKK29rKHNjYWxhciBrZXlzICUkY3JlZCA9PSAyLCAiR290IDIgJ2hvc3Q6cG9ydCBraWxscyBob3N0JyBrZXlzIik7CisKK2lzKCRjcmVkLT57cGFzc3dvcmR9LCAnYm9id2lsbGtub3cnLCAiR290IGNvcnJlY3QgJ2hvc3Q6cG9ydCBraWxscyBob3N0JyBwYXNzd29yZCIpOworaXMoJGNyZWQtPnt1c2VybmFtZX0sICdib2InLCAiR290IGNvcnJlY3QgJ2hvc3Q6cG9ydCBraWxscyBob3N0JyB1c2VybmFtZSIpOworCitkaWFnICdUZXN0aW5nIG5ldHJjIGZpbGUgZGVjcnlwdGlvbiBieSBnaXQgY29uZmlnIGdwZy5wcm9ncmFtIHNldHRpbmdcbic7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKCBbJy1mJywgJG5ldHJjR3BnLCAnZ2V0J10KKyAgICAgICAgICAgICAgICAgICAgICAsIHsgaG9zdCA9PiAnZ2l0LWNvbmZpZy1ncGcnIH0KKyAgICAgICAgICAgICAgICAgICAgICApOworCitvayhzY2FsYXIga2V5cyAlJGNyZWQgPT0gMiwgJ0dvdCBrZXlzIGRlY3J5cHRlZCBieSBnaXQgY29uZmlnIG9wdGlvbicpOworCitkaWFnICdUZXN0aW5nIG5ldHJjIGZpbGUgZGVjcnlwdGlvbiBieSBncGcgb3B0aW9uXG4nOworJGNyZWQgPSBydW5fY3JlZGVudGlhbCggWyctZicsICRuZXRyY0dwZywgJy1nJywgJ3Rlc3QuY29tbWFuZC1vcHRpb24tZ3BnJywgJ2dldCddCisgICAgICAgICAgICAgICAgICAgICAgLCB7IGhvc3QgPT4gJ2NvbW1hbmQtb3B0aW9uLWdwZycgfQorICAgICAgICAgICAgICAgICAgICAgICk7CisKK29rKHNjYWxhciBrZXlzICUkY3JlZCA9PSAyLCAnR290IGtleXMgZGVjcnlwdGVkIGJ5IGNvbW1hbmQgb3B0aW9uJyk7CisKK215ICRpc19wYXNzaW5nID0gZXZhbCB7IFRlc3Q6Ok1vcmUtPmlzX3Bhc3NpbmcgfTsKK2V4aXQoJGlzX3Bhc3NpbmcgPyAwIDogMSkgdW5sZXNzICRAID1+IC9DYW4ndCBsb2NhdGUgb2JqZWN0IG1ldGhvZC87CisKK3N1YiBydW5fY3JlZGVudGlhbAoreworCW15ICRhcmdzID0gc2hpZnQgQF87CisJbXkgJGRhdGEgPSBzaGlmdCBAXzsKKwlteSAkcGlkID0gb3BlbjIobXkgJGNobGRfb3V0LCBteSAkY2hsZF9pbiwKKwkJCSRnY05ldHJjLCBAZ2xvYmFsX2NyZWRlbnRpYWxfYXJncywKKwkJCUAkYXJncyk7CisKKwlkaWUgIkNvdWxkbid0IG9wZW4gcGlwZSB0byBuZXRyYyBjcmVkZW50aWFsIGhlbHBlcjogJCEiIHVubGVzcyAkcGlkOworCisJaWYgKHJlZiAkZGF0YSBlcSAnSEFTSCcpCisJeworCQlwcmludCAkY2hsZF9pbiAiJF89JGRhdGEtPnskX31cbiIgZm9yZWFjaCBzb3J0IGtleXMgJSRkYXRhOworCX0KKwllbHNlCisJeworCQlwcmludCAkY2hsZF9pbiAiJGRhdGFcbiI7CisJfQorCisJY2xvc2UgJGNobGRfaW47CisJbXkgJXJldDsKKworCXdoaWxlICg8JGNobGRfb3V0PikKKwl7CisJCWNob21wOworCQluZXh0IHVubGVzcyBtL14oW149XSspPSguKykvOworCisJCSRyZXR7JDF9ID0gJDI7CisJfQorCisJcmV0dXJuIFwlcmV0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluLy5naXRpZ25vcmUgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzViNzAyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9vc3hrZXljaGFpbi9NYWtlZmlsZSBiL2NvbnRyaWIvY3JlZGVudGlhbC9vc3hrZXljaGFpbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjNhMDhhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL01ha2VmaWxlCkBAIC0wLDAgKzEsMTcgQEAKK2FsbDo6IGdpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluCisKK0NDID0gZ2NjCitSTSA9IHJtIC1mCitDRkxBR1MgPSAtZyAtTzIgLVdhbGwKKworLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrCisKK2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluOiBnaXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbi5vCisJJChDQykgJChDRkxBR1MpIC1vICRAICQ8ICQoTERGTEFHUykgLVdsLC1mcmFtZXdvcmsgLVdsLFNlY3VyaXR5CisKK2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLm86IGdpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLmMKKwkkKENDKSAtYyAkKENGTEFHUykgJDwKKworY2xlYW46CisJJChSTSkgZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4gZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4ubwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLmMgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2QzZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL2dpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLmMKQEAgLTAsMCArMSwxODMgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+CisKK3N0YXRpYyBTZWNQcm90b2NvbFR5cGUgcHJvdG9jb2w7CitzdGF0aWMgY2hhciAqaG9zdDsKK3N0YXRpYyBjaGFyICpwYXRoOworc3RhdGljIGNoYXIgKnVzZXJuYW1lOworc3RhdGljIGNoYXIgKnBhc3N3b3JkOworc3RhdGljIFVJbnQxNiBwb3J0OworCitzdGF0aWMgdm9pZCBkaWUoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJY2hhciBtc2dbNDA5Nl07CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXZzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCBlcnIsIHBhcmFtcyk7CisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCAqeHN0cmR1cChjb25zdCBjaGFyICpzMSkKK3sKKwl2b2lkICpyZXQgPSBzdHJkdXAoczEpOworCWlmICghcmV0KQorCQlkaWUoIk91dCBvZiBtZW1vcnkiKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEtFWUNIQUlOX0lURU0oeCkgKHggPyBzdHJsZW4oeCkgOiAwKSwgeAorI2RlZmluZSBLRVlDSEFJTl9BUkdTIFwKKwlOVUxMLCAvKiBkZWZhdWx0IGtleWNoYWluICovIFwKKwlLRVlDSEFJTl9JVEVNKGhvc3QpLCBcCisJMCwgTlVMTCwgLyogYWNjb3VudCBkb21haW4gKi8gXAorCUtFWUNIQUlOX0lURU0odXNlcm5hbWUpLCBcCisJS0VZQ0hBSU5fSVRFTShwYXRoKSwgXAorCXBvcnQsIFwKKwlwcm90b2NvbCwgXAorCWtTZWNBdXRoZW50aWNhdGlvblR5cGVEZWZhdWx0CisKK3N0YXRpYyB2b2lkIHdyaXRlX2l0ZW0oY29uc3QgY2hhciAqd2hhdCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXByaW50ZigiJXM9Iiwgd2hhdCk7CisJZndyaXRlKGJ1ZiwgMSwgbGVuLCBzdGRvdXQpOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfdXNlcm5hbWVfaW5faXRlbShTZWNLZXljaGFpbkl0ZW1SZWYgaXRlbSkKK3sKKwlTZWNLZXljaGFpbkF0dHJpYnV0ZUxpc3QgbGlzdDsKKwlTZWNLZXljaGFpbkF0dHJpYnV0ZSBhdHRyOworCisJbGlzdC5jb3VudCA9IDE7CisJbGlzdC5hdHRyID0gJmF0dHI7CisJYXR0ci50YWcgPSBrU2VjQWNjb3VudEl0ZW1BdHRyOworCisJaWYgKFNlY0tleWNoYWluSXRlbUNvcHlDb250ZW50KGl0ZW0sIE5VTEwsICZsaXN0LCBOVUxMLCBOVUxMKSkKKwkJcmV0dXJuOworCisJd3JpdGVfaXRlbSgidXNlcm5hbWUiLCBhdHRyLmRhdGEsIGF0dHIubGVuZ3RoKTsKKwlTZWNLZXljaGFpbkl0ZW1GcmVlQ29udGVudCgmbGlzdCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfaW50ZXJuZXRfcGFzc3dvcmQodm9pZCkKK3sKKwl2b2lkICpidWY7CisJVUludDMyIGxlbjsKKwlTZWNLZXljaGFpbkl0ZW1SZWYgaXRlbTsKKworCWlmIChTZWNLZXljaGFpbkZpbmRJbnRlcm5ldFBhc3N3b3JkKEtFWUNIQUlOX0FSR1MsICZsZW4sICZidWYsICZpdGVtKSkKKwkJcmV0dXJuOworCisJd3JpdGVfaXRlbSgicGFzc3dvcmQiLCBidWYsIGxlbik7CisJaWYgKCF1c2VybmFtZSkKKwkJZmluZF91c2VybmFtZV9pbl9pdGVtKGl0ZW0pOworCisJU2VjS2V5Y2hhaW5JdGVtRnJlZUNvbnRlbnQoTlVMTCwgYnVmKTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlX2ludGVybmV0X3Bhc3N3b3JkKHZvaWQpCit7CisJU2VjS2V5Y2hhaW5JdGVtUmVmIGl0ZW07CisKKwkvKgorCSAqIFJlcXVpcmUgYXQgbGVhc3QgYSBwcm90b2NvbCBhbmQgaG9zdCBmb3IgcmVtb3ZhbCwgd2hpY2ggaXMgd2hhdCBnaXQKKwkgKiB3aWxsIGdpdmUgdXM7IGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBtb3JlIGZhbmN5LCB1c2UgdGhlCisJICogS2V5Y2hhaW4gbWFuYWdlci4KKwkgKi8KKwlpZiAoIXByb3RvY29sIHx8ICFob3N0KQorCQlyZXR1cm47CisKKwlpZiAoU2VjS2V5Y2hhaW5GaW5kSW50ZXJuZXRQYXNzd29yZChLRVlDSEFJTl9BUkdTLCAwLCBOVUxMLCAmaXRlbSkpCisJCXJldHVybjsKKworCVNlY0tleWNoYWluSXRlbURlbGV0ZShpdGVtKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2ludGVybmV0X3Bhc3N3b3JkKHZvaWQpCit7CisJLyogT25seSBzdG9yZSBjb21wbGV0ZSBjcmVkZW50aWFscyAqLworCWlmICghcHJvdG9jb2wgfHwgIWhvc3QgfHwgIXVzZXJuYW1lIHx8ICFwYXNzd29yZCkKKwkJcmV0dXJuOworCisJaWYgKFNlY0tleWNoYWluQWRkSW50ZXJuZXRQYXNzd29yZCgKKwkgICAgICBLRVlDSEFJTl9BUkdTLAorCSAgICAgIEtFWUNIQUlOX0lURU0ocGFzc3dvcmQpLAorCSAgICAgIE5VTEwpKQorCQlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfY3JlZGVudGlhbCh2b2lkKQoreworCWNoYXIgYnVmWzEwMjRdOworCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworCQljaGFyICp2OworCisJCWlmICghc3RyY21wKGJ1ZiwgIlxuIikpCisJCQlicmVhazsKKwkJYnVmW3N0cmxlbihidWYpLTFdID0gJ1wwJzsKKworCQl2ID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKwkJaWYgKCF2KQorCQkJZGllKCJiYWQgaW5wdXQ6ICVzIiwgYnVmKTsKKwkJKnYrKyA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAicHJvdG9jb2wiKSkgeworCQkJaWYgKCFzdHJjbXAodiwgImltYXAiKSkKKwkJCQlwcm90b2NvbCA9IGtTZWNQcm90b2NvbFR5cGVJTUFQOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiaW1hcHMiKSkKKwkJCQlwcm90b2NvbCA9IGtTZWNQcm90b2NvbFR5cGVJTUFQUzsKKwkJCWVsc2UgaWYgKCFzdHJjbXAodiwgImZ0cCIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUZUUDsKKwkJCWVsc2UgaWYgKCFzdHJjbXAodiwgImZ0cHMiKSkKKwkJCQlwcm90b2NvbCA9IGtTZWNQcm90b2NvbFR5cGVGVFBTOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiaHR0cHMiKSkKKwkJCQlwcm90b2NvbCA9IGtTZWNQcm90b2NvbFR5cGVIVFRQUzsKKwkJCWVsc2UgaWYgKCFzdHJjbXAodiwgImh0dHAiKSkKKwkJCQlwcm90b2NvbCA9IGtTZWNQcm90b2NvbFR5cGVIVFRQOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAic210cCIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZVNNVFA7CisJCQllbHNlIC8qIHdlIGRvbid0IHlldCBoYW5kbGUgb3RoZXIgcHJvdG9jb2xzICovCisJCQkJZXhpdCgwKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKGJ1ZiwgImhvc3QiKSkgeworCQkJY2hhciAqY29sb24gPSBzdHJjaHIodiwgJzonKTsKKwkJCWlmIChjb2xvbikgeworCQkJCSpjb2xvbisrID0gJ1wwJzsKKwkJCQlwb3J0ID0gYXRvaShjb2xvbik7CisJCQl9CisJCQlob3N0ID0geHN0cmR1cCh2KTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKGJ1ZiwgInBhdGgiKSkKKwkJCXBhdGggPSB4c3RyZHVwKHYpOworCQllbHNlIGlmICghc3RyY21wKGJ1ZiwgInVzZXJuYW1lIikpCisJCQl1c2VybmFtZSA9IHhzdHJkdXAodik7CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAicGFzc3dvcmQiKSkKKwkJCXBhc3N3b3JkID0geHN0cmR1cCh2KTsKKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9CisJCSJ1c2FnZTogZ2l0IGNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4gPGdldHxzdG9yZXxlcmFzZT4iOworCisJaWYgKCFhcmd2WzFdKQorCQlkaWUodXNhZ2UpOworCisJcmVhZF9jcmVkZW50aWFsKCk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZ2V0IikpCisJCWZpbmRfaW50ZXJuZXRfcGFzc3dvcmQoKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzdG9yZSIpKQorCQlhZGRfaW50ZXJuZXRfcGFzc3dvcmQoKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJlcmFzZSIpKQorCQlkZWxldGVfaW50ZXJuZXRfcGFzc3dvcmQoKTsKKwkvKiBvdGhlcndpc2UsIGlnbm9yZSB1bmtub3duIGFjdGlvbiAqLworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvd2luY3JlZC9NYWtlZmlsZSBiL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOTkyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvd2luY3JlZC9NYWtlZmlsZQpAQCAtMCwwICsxLDIyIEBACithbGw6IGdpdC1jcmVkZW50aWFsLXdpbmNyZWQuZXhlCisKKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1haworCitDQyA/PSBnY2MKK1JNID89IHJtIC1mCitDRkxBR1MgPz0gLU8yIC1XYWxsCisKK3ByZWZpeCA/PSAvdXNyL2xvY2FsCitsaWJleGVjZGlyID89ICQocHJlZml4KS9saWJleGVjL2dpdC1jb3JlCisKK0lOU1RBTEwgPz0gaW5zdGFsbAorCitnaXQtY3JlZGVudGlhbC13aW5jcmVkLmV4ZSA6IGdpdC1jcmVkZW50aWFsLXdpbmNyZWQuYworCSQoTElOSy5jKSAkXiAkKExPQURMSUJFUykgJChMRExJQlMpIC1vICRACisKK2luc3RhbGw6IGdpdC1jcmVkZW50aWFsLXdpbmNyZWQuZXhlCisJJChJTlNUQUxMKSAtbSA3NTUgJF4gJChsaWJleGVjZGlyKQorCitjbGVhbjoKKwkkKFJNKSBnaXQtY3JlZGVudGlhbC13aW5jcmVkLmV4ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL3dpbmNyZWQvZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5jIGIvY29udHJpYi9jcmVkZW50aWFsL3dpbmNyZWQvZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZGFkNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvd2luY3JlZC9naXQtY3JlZGVudGlhbC13aW5jcmVkLmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBBIGdpdCBjcmVkZW50aWFsIGhlbHBlciB0aGF0IGludGVyZmFjZSB3aXRoIFdpbmRvd3MnIENyZWRlbnRpYWwgTWFuYWdlcgorICoKKyAqLworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLyogY29tbW9uIGhlbHBlcnMgKi8KKworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkvc2l6ZW9mKHhbMF0pKQorCitzdGF0aWMgdm9pZCBkaWUoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJY2hhciBtc2dbNDA5Nl07CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXZzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCBlcnIsIHBhcmFtcyk7CisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCAqeG1hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICpyZXQgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFyZXQgJiYgIXNpemUpCisJCXJldCA9IG1hbGxvYygxKTsKKwlpZiAoIXJldCkKKwkJIGRpZSgiT3V0IG9mIG1lbW9yeSIpOworCXJldHVybiByZXQ7Cit9CisKKy8qIE1pbkdXIGRvZXNuJ3QgaGF2ZSB3aW5jcmVkLmgsIHNvIHdlIG5lZWQgdG8gZGVmaW5lIHN0dWZmICovCisKK3R5cGVkZWYgc3RydWN0IF9DUkVERU5USUFMX0FUVFJJQlVURVcgeworCUxQV1NUUiBLZXl3b3JkOworCURXT1JEICBGbGFnczsKKwlEV09SRCAgVmFsdWVTaXplOworCUxQQllURSBWYWx1ZTsKK30gQ1JFREVOVElBTF9BVFRSSUJVVEVXLCAqUENSRURFTlRJQUxfQVRUUklCVVRFVzsKKwordHlwZWRlZiBzdHJ1Y3QgX0NSRURFTlRJQUxXIHsKKwlEV09SRCAgICAgICAgICAgICAgICAgIEZsYWdzOworCURXT1JEICAgICAgICAgICAgICAgICAgVHlwZTsKKwlMUFdTVFIgICAgICAgICAgICAgICAgIFRhcmdldE5hbWU7CisJTFBXU1RSICAgICAgICAgICAgICAgICBDb21tZW50OworCUZJTEVUSU1FICAgICAgICAgICAgICAgTGFzdFdyaXR0ZW47CisJRFdPUkQgICAgICAgICAgICAgICAgICBDcmVkZW50aWFsQmxvYlNpemU7CisJTFBCWVRFICAgICAgICAgICAgICAgICBDcmVkZW50aWFsQmxvYjsKKwlEV09SRCAgICAgICAgICAgICAgICAgIFBlcnNpc3Q7CisJRFdPUkQgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVDb3VudDsKKwlQQ1JFREVOVElBTF9BVFRSSUJVVEVXIEF0dHJpYnV0ZXM7CisJTFBXU1RSICAgICAgICAgICAgICAgICBUYXJnZXRBbGlhczsKKwlMUFdTVFIgICAgICAgICAgICAgICAgIFVzZXJOYW1lOworfSBDUkVERU5USUFMVywgKlBDUkVERU5USUFMVzsKKworI2RlZmluZSBDUkVEX1RZUEVfR0VORVJJQyAxCisjZGVmaW5lIENSRURfUEVSU0lTVF9MT0NBTF9NQUNISU5FIDIKKyNkZWZpbmUgQ1JFRF9NQVhfQVRUUklCVVRFUyA2NAorCit0eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ3JlZFdyaXRlV1QpKFBDUkVERU5USUFMVywgRFdPUkQpOwordHlwZWRlZiBCT09MIChXSU5BUEkgKkNyZWRFbnVtZXJhdGVXVCkoTFBDV1NUUiwgRFdPUkQsIERXT1JEICosCisgICAgUENSRURFTlRJQUxXICoqKTsKK3R5cGVkZWYgVk9JRCAoV0lOQVBJICpDcmVkRnJlZVQpKFBWT0lEKTsKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpDcmVkRGVsZXRlV1QpKExQQ1dTVFIsIERXT1JELCBEV09SRCk7CisKK3N0YXRpYyBITU9EVUxFIGFkdmFwaTsKK3N0YXRpYyBDcmVkV3JpdGVXVCBDcmVkV3JpdGVXOworc3RhdGljIENyZWRFbnVtZXJhdGVXVCBDcmVkRW51bWVyYXRlVzsKK3N0YXRpYyBDcmVkRnJlZVQgQ3JlZEZyZWU7CitzdGF0aWMgQ3JlZERlbGV0ZVdUIENyZWREZWxldGVXOworCitzdGF0aWMgdm9pZCBsb2FkX2NyZWRfZnVuY3Modm9pZCkKK3sKKwkvKiBsb2FkIERMTHMgKi8KKwlhZHZhcGkgPSBMb2FkTGlicmFyeUV4QSgiYWR2YXBpMzIuZGxsIiwgTlVMTCwKKwkJCQlMT0FEX0xJQlJBUllfU0VBUkNIX1NZU1RFTTMyKTsKKwlpZiAoIWFkdmFwaSkKKwkJZGllKCJmYWlsZWQgdG8gbG9hZCBhZHZhcGkzMi5kbGwiKTsKKworCS8qIGdldCBmdW5jdGlvbiBwb2ludGVycyAqLworCUNyZWRXcml0ZVcgPSAoQ3JlZFdyaXRlV1QpR2V0UHJvY0FkZHJlc3MoYWR2YXBpLCAiQ3JlZFdyaXRlVyIpOworCUNyZWRFbnVtZXJhdGVXID0gKENyZWRFbnVtZXJhdGVXVClHZXRQcm9jQWRkcmVzcyhhZHZhcGksCisJICAgICJDcmVkRW51bWVyYXRlVyIpOworCUNyZWRGcmVlID0gKENyZWRGcmVlVClHZXRQcm9jQWRkcmVzcyhhZHZhcGksICJDcmVkRnJlZSIpOworCUNyZWREZWxldGVXID0gKENyZWREZWxldGVXVClHZXRQcm9jQWRkcmVzcyhhZHZhcGksICJDcmVkRGVsZXRlVyIpOworCWlmICghQ3JlZFdyaXRlVyB8fCAhQ3JlZEVudW1lcmF0ZVcgfHwgIUNyZWRGcmVlIHx8ICFDcmVkRGVsZXRlVykKKwkJZGllKCJmYWlsZWQgdG8gbG9hZCBmdW5jdGlvbnMiKTsKK30KKworc3RhdGljIFdDSEFSICp3dXNlcm5hbWUsICpwYXNzd29yZCwgKnByb3RvY29sLCAqaG9zdCwgKnBhdGgsIHRhcmdldFsxMDI0XTsKKworc3RhdGljIHZvaWQgd3JpdGVfaXRlbShjb25zdCBjaGFyICp3aGF0LCBMUENXU1RSIHdidWYsIGludCB3bGVuKQoreworCWNoYXIgKmJ1ZjsKKworCWlmICghd2J1ZiB8fCAhd2xlbikgeworCQlwcmludGYoIiVzPVxuIiwgd2hhdCk7CisJCXJldHVybjsKKwl9CisKKwlpbnQgbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCB3YnVmLCB3bGVuLCBOVUxMLCAwLCBOVUxMLAorCSAgICBGQUxTRSk7CisJYnVmID0geG1hbGxvYyhsZW4pOworCisJaWYgKCFXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHdidWYsIHdsZW4sIGJ1ZiwgbGVuLCBOVUxMLCBGQUxTRSkpCisJCWRpZSgiV2lkZUNoYXJUb011bHRpQnl0ZSBmYWlsZWQhIik7CisKKwlwcmludGYoIiVzPSIsIHdoYXQpOworCWZ3cml0ZShidWYsIDEsIGxlbiwgc3Rkb3V0KTsKKwlwdXRjaGFyKCdcbicpOworCWZyZWUoYnVmKTsKK30KKworLyoKKyAqIE1hdGNoIGFuIChvcHRpb25hbCkgZXhwZWN0ZWQgc3RyaW5nIGFuZCBhIGRlbGltaXRlciBpbiB0aGUgdGFyZ2V0IHN0cmluZywKKyAqIGNvbnN1bWluZyB0aGUgbWF0Y2hlZCB0ZXh0IGJ5IHVwZGF0aW5nIHRoZSB0YXJnZXQgcG9pbnRlci4KKyAqLworCitzdGF0aWMgTFBDV1NUUiB3Y3NzdHJfbGFzdChMUENXU1RSIHN0ciwgTFBDV1NUUiBmaW5kKQoreworCUxQQ1dTVFIgcmVzID0gTlVMTCwgcG9zOworCWZvciAocG9zID0gd2Nzc3RyKHN0ciwgZmluZCk7IHBvczsgcG9zID0gd2Nzc3RyKHBvcyArIDEsIGZpbmQpKQorCQlyZXMgPSBwb3M7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBtYXRjaF9wYXJ0X3dpdGhfbGFzdChMUENXU1RSICpwdGFyZ2V0LCBMUENXU1RSIHdhbnQsIExQQ1dTVFIgZGVsaW0sIGludCBsYXN0KQoreworCUxQQ1dTVFIgZGVsaW1fcG9zLCBzdGFydCA9ICpwdGFyZ2V0OworCWludCBsZW47CisKKwkvKiBmaW5kIHN0YXJ0IG9mIGRlbGltaXRlciAob3IgZW5kLW9mLXN0cmluZyBpZiBkZWxpbSBpcyBlbXB0eSkgKi8KKwlpZiAoKmRlbGltKQorCQlkZWxpbV9wb3MgPSBsYXN0ID8gd2Nzc3RyX2xhc3Qoc3RhcnQsIGRlbGltKSA6IHdjc3N0cihzdGFydCwgZGVsaW0pOworCWVsc2UKKwkJZGVsaW1fcG9zID0gc3RhcnQgKyB3Y3NsZW4oc3RhcnQpOworCisJLyoKKwkgKiBtYXRjaCB0ZXh0IHVwIHRvIGRlbGltaXRlciwgb3IgZW5kIG9mIHN0cmluZyAoZS5nLiB0aGUgJy8nIGFmdGVyCisJICogaG9zdCBpcyBvcHRpb25hbCBpZiBub3QgZm9sbG93ZWQgYnkgYSBwYXRoKQorCSAqLworCWlmIChkZWxpbV9wb3MpCisJCWxlbiA9IGRlbGltX3BvcyAtIHN0YXJ0OworCWVsc2UKKwkJbGVuID0gd2NzbGVuKHN0YXJ0KTsKKworCS8qIHVwZGF0ZSBwdGFyZ2V0IGlmIHdlIGVpdGhlciBmb3VuZCBhIGRlbGltaXRlciBvciBuZWVkIGEgbWF0Y2ggKi8KKwlpZiAoZGVsaW1fcG9zIHx8IHdhbnQpCisJCSpwdGFyZ2V0ID0gZGVsaW1fcG9zID8gZGVsaW1fcG9zICsgd2NzbGVuKGRlbGltKSA6IHN0YXJ0ICsgbGVuOworCisJcmV0dXJuICF3YW50IHx8ICghd2NzbmNtcCh3YW50LCBzdGFydCwgbGVuKSAmJiAhd2FudFtsZW5dKTsKK30KKworc3RhdGljIGludCBtYXRjaF9wYXJ0KExQQ1dTVFIgKnB0YXJnZXQsIExQQ1dTVFIgd2FudCwgTFBDV1NUUiBkZWxpbSkKK3sKKwlyZXR1cm4gbWF0Y2hfcGFydF93aXRoX2xhc3QocHRhcmdldCwgd2FudCwgZGVsaW0sIDApOworfQorCitzdGF0aWMgaW50IG1hdGNoX3BhcnRfbGFzdChMUENXU1RSICpwdGFyZ2V0LCBMUENXU1RSIHdhbnQsIExQQ1dTVFIgZGVsaW0pCit7CisJcmV0dXJuIG1hdGNoX3BhcnRfd2l0aF9sYXN0KHB0YXJnZXQsIHdhbnQsIGRlbGltLCAxKTsKK30KKworc3RhdGljIGludCBtYXRjaF9jcmVkKGNvbnN0IENSRURFTlRJQUxXICpjcmVkKQoreworCUxQQ1dTVFIgdGFyZ2V0ID0gY3JlZC0+VGFyZ2V0TmFtZTsKKwlpZiAod3VzZXJuYW1lICYmIHdjc2NtcCh3dXNlcm5hbWUsIGNyZWQtPlVzZXJOYW1lID8gY3JlZC0+VXNlck5hbWUgOiBMIiIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtYXRjaF9wYXJ0KCZ0YXJnZXQsIEwiZ2l0IiwgTCI6IikgJiYKKwkJbWF0Y2hfcGFydCgmdGFyZ2V0LCBwcm90b2NvbCwgTCI6Ly8iKSAmJgorCQltYXRjaF9wYXJ0X2xhc3QoJnRhcmdldCwgd3VzZXJuYW1lLCBMIkAiKSAmJgorCQltYXRjaF9wYXJ0KCZ0YXJnZXQsIGhvc3QsIEwiLyIpICYmCisJCW1hdGNoX3BhcnQoJnRhcmdldCwgcGF0aCwgTCIiKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2NyZWRlbnRpYWwodm9pZCkKK3sKKwlDUkVERU5USUFMVyAqKmNyZWRzOworCURXT1JEIG51bV9jcmVkczsKKwlpbnQgaTsKKworCWlmICghQ3JlZEVudW1lcmF0ZVcoTCJnaXQ6KiIsIDAsICZudW1fY3JlZHMsICZjcmVkcykpCisJCXJldHVybjsKKworCS8qIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGNyZWRlbnRpYWwgdGhhdCBtYXRjaGVzIHVzZXJuYW1lICovCisJZm9yIChpID0gMDsgaSA8IG51bV9jcmVkczsgKytpKQorCQlpZiAobWF0Y2hfY3JlZChjcmVkc1tpXSkpIHsKKwkJCXdyaXRlX2l0ZW0oInVzZXJuYW1lIiwgY3JlZHNbaV0tPlVzZXJOYW1lLAorCQkJCWNyZWRzW2ldLT5Vc2VyTmFtZSA/IHdjc2xlbihjcmVkc1tpXS0+VXNlck5hbWUpIDogMCk7CisJCQl3cml0ZV9pdGVtKCJwYXNzd29yZCIsCisJCQkJKExQQ1dTVFIpY3JlZHNbaV0tPkNyZWRlbnRpYWxCbG9iLAorCQkJCWNyZWRzW2ldLT5DcmVkZW50aWFsQmxvYlNpemUgLyBzaXplb2YoV0NIQVIpKTsKKwkJCWJyZWFrOworCQl9CisKKwlDcmVkRnJlZShjcmVkcyk7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX2NyZWRlbnRpYWwodm9pZCkKK3sKKwlDUkVERU5USUFMVyBjcmVkOworCisJaWYgKCF3dXNlcm5hbWUgfHwgIXBhc3N3b3JkKQorCQlyZXR1cm47CisKKwljcmVkLkZsYWdzID0gMDsKKwljcmVkLlR5cGUgPSBDUkVEX1RZUEVfR0VORVJJQzsKKwljcmVkLlRhcmdldE5hbWUgPSB0YXJnZXQ7CisJY3JlZC5Db21tZW50ID0gTCJzYXZlZCBieSBnaXQtY3JlZGVudGlhbC13aW5jcmVkIjsKKwljcmVkLkNyZWRlbnRpYWxCbG9iU2l6ZSA9ICh3Y3NsZW4ocGFzc3dvcmQpKSAqIHNpemVvZihXQ0hBUik7CisJY3JlZC5DcmVkZW50aWFsQmxvYiA9IChMUFZPSUQpcGFzc3dvcmQ7CisJY3JlZC5QZXJzaXN0ID0gQ1JFRF9QRVJTSVNUX0xPQ0FMX01BQ0hJTkU7CisJY3JlZC5BdHRyaWJ1dGVDb3VudCA9IDA7CisJY3JlZC5BdHRyaWJ1dGVzID0gTlVMTDsKKwljcmVkLlRhcmdldEFsaWFzID0gTlVMTDsKKwljcmVkLlVzZXJOYW1lID0gd3VzZXJuYW1lOworCisJaWYgKCFDcmVkV3JpdGVXKCZjcmVkLCAwKSkKKwkJZGllKCJDcmVkV3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB2b2lkIGVyYXNlX2NyZWRlbnRpYWwodm9pZCkKK3sKKwlDUkVERU5USUFMVyAqKmNyZWRzOworCURXT1JEIG51bV9jcmVkczsKKwlpbnQgaTsKKworCWlmICghQ3JlZEVudW1lcmF0ZVcoTCJnaXQ6KiIsIDAsICZudW1fY3JlZHMsICZjcmVkcykpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY3JlZHM7ICsraSkgeworCQlpZiAobWF0Y2hfY3JlZChjcmVkc1tpXSkpCisJCQlDcmVkRGVsZXRlVyhjcmVkc1tpXS0+VGFyZ2V0TmFtZSwgY3JlZHNbaV0tPlR5cGUsIDApOworCX0KKworCUNyZWRGcmVlKGNyZWRzKTsKK30KKworc3RhdGljIFdDSEFSICp1dGY4X3RvX3V0ZjE2X2R1cChjb25zdCBjaGFyICpzdHIpCit7CisJaW50IHdsZW4gPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsIDAsIHN0ciwgLTEsIE5VTEwsIDApOworCVdDSEFSICp3c3RyID0geG1hbGxvYyhzaXplb2YoV0NIQVIpICogd2xlbik7CisJTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBzdHIsIC0xLCB3c3RyLCB3bGVuKTsKKwlyZXR1cm4gd3N0cjsKK30KKworc3RhdGljIHZvaWQgcmVhZF9jcmVkZW50aWFsKHZvaWQpCit7CisJY2hhciBidWZbMTAyNF07CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisJCWNoYXIgKnY7CisJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKwkJLyogc3RyaXAgdHJhaWxpbmcgQ1IgLyBMRiAqLworCQl3aGlsZSAobGVuICYmIHN0cmNocigiXHJcbiIsIGJ1ZltsZW4gLSAxXSkpCisJCQlidWZbLS1sZW5dID0gMDsKKworCQlpZiAoISpidWYpCisJCQlicmVhazsKKworCQl2ID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKwkJaWYgKCF2KQorCQkJZGllKCJiYWQgaW5wdXQ6ICVzIiwgYnVmKTsKKwkJKnYrKyA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAicHJvdG9jb2wiKSkKKwkJCXByb3RvY29sID0gdXRmOF90b191dGYxNl9kdXAodik7CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiaG9zdCIpKQorCQkJaG9zdCA9IHV0ZjhfdG9fdXRmMTZfZHVwKHYpOworCQllbHNlIGlmICghc3RyY21wKGJ1ZiwgInBhdGgiKSkKKwkJCXBhdGggPSB1dGY4X3RvX3V0ZjE2X2R1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJ1c2VybmFtZSIpKSB7CisJCQl3dXNlcm5hbWUgPSB1dGY4X3RvX3V0ZjE2X2R1cCh2KTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgInBhc3N3b3JkIikpCisJCQlwYXNzd29yZCA9IHV0ZjhfdG9fdXRmMTZfZHVwKHYpOworCQllbHNlCisJCQlkaWUoInVucmVjb2duaXplZCBpbnB1dCIpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9CisJICAgICJ1c2FnZTogZ2l0IGNyZWRlbnRpYWwtd2luY3JlZCA8Z2V0fHN0b3JlfGVyYXNlPlxuIjsKKworCWlmICghYXJndlsxXSkKKwkJZGllKHVzYWdlKTsKKworCS8qIGdpdCB1c2UgYmluYXJ5IHBpcGVzIHRvIGF2b2lkIENSTEYtaXNzdWVzICovCisJX3NldG1vZGUoX2ZpbGVubyhzdGRpbiksIF9PX0JJTkFSWSk7CisJX3NldG1vZGUoX2ZpbGVubyhzdGRvdXQpLCBfT19CSU5BUlkpOworCisJcmVhZF9jcmVkZW50aWFsKCk7CisKKwlsb2FkX2NyZWRfZnVuY3MoKTsKKworCWlmICghcHJvdG9jb2wgfHwgIShob3N0IHx8IHBhdGgpKQorCQlyZXR1cm4gMDsKKworCS8qIHByZXBhcmUgJ3RhcmdldCcsIHRoZSB1bmlxdWUga2V5IGZvciB0aGUgY3JlZGVudGlhbCAqLworCXdjc2NweSh0YXJnZXQsIEwiZ2l0OiIpOworCXdjc25jYXQodGFyZ2V0LCBwcm90b2NvbCwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwl3Y3NuY2F0KHRhcmdldCwgTCI6Ly8iLCBBUlJBWV9TSVpFKHRhcmdldCkpOworCWlmICh3dXNlcm5hbWUpIHsKKwkJd2NzbmNhdCh0YXJnZXQsIHd1c2VybmFtZSwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwkJd2NzbmNhdCh0YXJnZXQsIEwiQCIsIEFSUkFZX1NJWkUodGFyZ2V0KSk7CisJfQorCWlmIChob3N0KQorCQl3Y3NuY2F0KHRhcmdldCwgaG9zdCwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwlpZiAocGF0aCkgeworCQl3Y3NuY2F0KHRhcmdldCwgTCIvIiwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwkJd2NzbmNhdCh0YXJnZXQsIHBhdGgsIEFSUkFZX1NJWkUodGFyZ2V0KSk7CisJfQorCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgImdldCIpKQorCQlnZXRfY3JlZGVudGlhbCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInN0b3JlIikpCisJCXN0b3JlX2NyZWRlbnRpYWwoKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJlcmFzZSIpKQorCQllcmFzZV9jcmVkZW50aWFsKCk7CisJLyogb3RoZXJ3aXNlLCBpZ25vcmUgdW5rbm93biBhY3Rpb24gKi8KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvLmdpdGlnbm9yZSBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDc0NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorc2hlYmFuZy5wZXJsCitkaWZmLWhpZ2hsaWdodApkaWZmIC0tZ2l0IGEvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9EaWZmSGlnaGxpZ2h0LnBtIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9EaWZmSGlnaGxpZ2h0LnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNTg5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L0RpZmZIaWdobGlnaHQucG0KQEAgLTAsMCArMSwyODUgQEAKK3BhY2thZ2UgRGlmZkhpZ2hsaWdodDsKKwordXNlIDUuMDA4OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIHN0cmljdDsKKworIyBVc2UgdGhlIGNvcnJlY3QgdmFsdWUgZm9yIGJvdGggVU5JWCBhbmQgV2luZG93cyAoL2Rldi9udWxsIHZzIG51bCkKK3VzZSBGaWxlOjpTcGVjOworCitteSAkTlVMTCA9IEZpbGU6OlNwZWMtPmRldm51bGwoKTsKKworIyBIaWdobGlnaHQgYnkgcmV2ZXJzaW5nIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQuIFlvdSBjb3VsZCBkbworIyBvdGhlciB0aGluZ3MgbGlrZSBib2xkIG9yIHVuZGVybGluZSBpZiB5b3UgcHJlZmVyLgorbXkgQE9MRF9ISUdITElHSFQgPSAoCisJY29sb3JfY29uZmlnKCdjb2xvci5kaWZmLWhpZ2hsaWdodC5vbGRub3JtYWwnKSwKKwljb2xvcl9jb25maWcoJ2NvbG9yLmRpZmYtaGlnaGxpZ2h0Lm9sZGhpZ2hsaWdodCcsICJceDFiWzdtIiksCisJY29sb3JfY29uZmlnKCdjb2xvci5kaWZmLWhpZ2hsaWdodC5vbGRyZXNldCcsICJceDFiWzI3bSIpCispOworbXkgQE5FV19ISUdITElHSFQgPSAoCisJY29sb3JfY29uZmlnKCdjb2xvci5kaWZmLWhpZ2hsaWdodC5uZXdub3JtYWwnLCAkT0xEX0hJR0hMSUdIVFswXSksCisJY29sb3JfY29uZmlnKCdjb2xvci5kaWZmLWhpZ2hsaWdodC5uZXdoaWdobGlnaHQnLCAkT0xEX0hJR0hMSUdIVFsxXSksCisJY29sb3JfY29uZmlnKCdjb2xvci5kaWZmLWhpZ2hsaWdodC5uZXdyZXNldCcsICRPTERfSElHSExJR0hUWzJdKQorKTsKKworbXkgJFJFU0VUID0gIlx4MWJbbSI7CitteSAkQ09MT1IgPSBxci9ceDFiXFtbMC05O10qbS87CitteSAkQk9SSU5HID0gcXIvJENPTE9SfFxzLzsKKworbXkgQHJlbW92ZWQ7CitteSBAYWRkZWQ7CitteSAkaW5faHVuazsKK215ICRncmFwaF9pbmRlbnQgPSAwOworCitvdXIgJGxpbmVfY2IgPSBzdWIgeyBwcmludCBAXyB9Oworb3VyICRmbHVzaF9jYiA9IHN1YiB7IGxvY2FsICR8ID0gMSB9OworCisjIENvdW50IHRoZSB2aXNpYmxlIHdpZHRoIG9mIGEgc3RyaW5nLCBleGNsdWRpbmcgYW55IHRlcm1pbmFsIGNvbG9yIHNlcXVlbmNlcy4KK3N1YiB2aXNpYmxlX3dpZHRoIHsKKwlsb2NhbCAkXyA9IHNoaWZ0OworCW15ICRyZXQgPSAwOworCXdoaWxlIChsZW5ndGgpIHsKKwkJaWYgKHMvXiRDT0xPUi8vKSB7CisJCQkjIHNraXAgY29sb3JzCisJCX0gZWxzaWYgKHMvXi4vLykgeworCQkJJHJldCsrOworCQl9CisJfQorCXJldHVybiAkcmV0OworfQorCisjIFJldHVybiBhIHN1YnN0cmluZyBvZiAkc3RyLCBvbWl0dGluZyAkbGVuIHZpc2libGUgY2hhcmFjdGVycyBmcm9tIHRoZQorIyBiZWdpbm5pbmcsIHdoZXJlIHRlcm1pbmFsIGNvbG9yIHNlcXVlbmNlcyBkbyBub3QgY291bnQgYXMgdmlzaWJsZS4KK3N1YiB2aXNpYmxlX3N1YnN0ciB7CisJbXkgKCRzdHIsICRsZW4pID0gQF87CisJd2hpbGUgKCRsZW4gPiAwKSB7CisJCWlmICgkc3RyID1+IHMvXiRDT0xPUi8vKSB7CisJCQluZXh0CisJCX0KKwkJJHN0ciA9fiBzL14uLy87CisJCSRsZW4tLTsKKwl9CisJcmV0dXJuICRzdHI7Cit9CisKK3N1YiBoYW5kbGVfbGluZSB7CisJbXkgJG9yaWcgPSBzaGlmdDsKKwlsb2NhbCAkXyA9ICRvcmlnOworCisJIyBtYXRjaCBhIGdyYXBoIGxpbmUgdGhhdCBiZWdpbnMgYSBjb21taXQKKwlpZiAoL14oPzokQ09MT1I/XHwkQ09MT1I/WyBdKSogIyB6ZXJvIG9yIG1vcmUgbGVhZGluZyAifCIgd2l0aCBzcGFjZQorCSAgICAgICAgICRDT0xPUj9cKiRDT0xPUj9bIF0gICAjIGEgIioiIHdpdGggaXRzIHRyYWlsaW5nIHNwYWNlCisJICAgICAgKD86JENPTE9SP1x8JENPTE9SP1sgXSkqICMgemVybyBvciBtb3JlIHRyYWlsaW5nICJ8IgorCSAgICAgICAgICAgICAgICAgICAgICAgICBbIF0qICAjIHRyYWlsaW5nIHdoaXRlc3BhY2UgZm9yIG1lcmdlcworCSAgICAveCkgeworCQlteSAkZ3JhcGhfcHJlZml4ID0gJCY7CisKKwkJIyBXZSBtdXN0IGZsdXNoIGJlZm9yZSBzZXR0aW5nIGdyYXBoIGluZGVudCwgc2luY2UgdGhlCisJCSMgbmV3IGNvbW1pdCBtYXkgYmUgaW5kZW50ZWQgZGlmZmVyZW50bHkgZnJvbSB3aGF0IHdlCisJCSMgcXVldWVkLgorCQlmbHVzaCgpOworCQkkZ3JhcGhfaW5kZW50ID0gdmlzaWJsZV93aWR0aCgkZ3JhcGhfcHJlZml4KTsKKworCX0gZWxzaWYgKCRncmFwaF9pbmRlbnQpIHsKKwkJaWYgKGxlbmd0aCgkXykgPCAkZ3JhcGhfaW5kZW50KSB7CisJCQkkZ3JhcGhfaW5kZW50ID0gMDsKKwkJfSBlbHNlIHsKKwkJCSRfID0gdmlzaWJsZV9zdWJzdHIoJF8sICRncmFwaF9pbmRlbnQpOworCQl9CisJfQorCisJaWYgKCEkaW5faHVuaykgeworCQkkbGluZV9jYi0+KCRvcmlnKTsKKwkJJGluX2h1bmsgPSAvXiRDT0xPUipcQFxAIC87CisJfQorCWVsc2lmICgvXiRDT0xPUiotLykgeworCQlwdXNoIEByZW1vdmVkLCAkb3JpZzsKKwl9CisJZWxzaWYgKC9eJENPTE9SKlwrLykgeworCQlwdXNoIEBhZGRlZCwgJG9yaWc7CisJfQorCWVsc2UgeworCQlmbHVzaCgpOworCQkkbGluZV9jYi0+KCRvcmlnKTsKKwkJJGluX2h1bmsgPSAvXiRDT0xPUipbXEAgXS87CisJfQorCisJIyBNb3N0IG9mIHRoZSB0aW1lIHRoZXJlIGlzIGVub3VnaCBvdXRwdXQgdG8ga2VlcCB0aGluZ3Mgc3RyZWFtaW5nLAorCSMgYnV0IGZvciBzb21ldGhpbmcgbGlrZSAiZ2l0IGxvZyAtU2ZvbyIsIHlvdSBjYW4gZ2V0IG9uZSBlYXJseQorCSMgY29tbWl0IGFuZCB0aGVuIG1hbnkgc2Vjb25kcyBvZiBub3RoaW5nLiBXZSB3YW50IHRvIHNob3cKKwkjIHRoYXQgb25lIGNvbW1pdCBhcyBzb29uIGFzIHBvc3NpYmxlLgorCSMKKwkjIFNpbmNlIHdlIGNhbiByZWNlaXZlIGFyYml0cmFyeSBpbnB1dCwgdGhlcmUncyBubyBvcHRpbWFsCisJIyBwbGFjZSB0byBmbHVzaC4gRmx1c2hpbmcgb24gYSBibGFuayBsaW5lIGlzIGEgaGV1cmlzdGljIHRoYXQKKwkjIGhhcHBlbnMgdG8gbWF0Y2ggZ2l0LWxvZyBvdXRwdXQuCisJaWYgKCFsZW5ndGgpIHsKKwkJJGZsdXNoX2NiLT4oKTsKKwl9Cit9CisKK3N1YiBmbHVzaCB7CisJIyBGbHVzaCBhbnkgcXVldWVkIGh1bmsgKHRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZXJlIGlzIG5vIHRyYWlsaW5nCisJIyBjb250ZXh0IGluIHRoZSBmaW5hbCBkaWZmIG9mIHRoZSBpbnB1dCkuCisJc2hvd19odW5rKFxAcmVtb3ZlZCwgXEBhZGRlZCk7CisJQHJlbW92ZWQgPSAoKTsKKwlAYWRkZWQgPSAoKTsKK30KKworc3ViIGhpZ2hsaWdodF9zdGRpbiB7CisJd2hpbGUgKDxTVERJTj4pIHsKKwkJaGFuZGxlX2xpbmUoJF8pOworCX0KKwlmbHVzaCgpOworfQorCisjIElkZWFsbHkgd2Ugd291bGQgZmVlZCB0aGUgZGVmYXVsdCBhcyBhIGh1bWFuLXJlYWRhYmxlIGNvbG9yIHRvCisjIGdpdC1jb25maWcgYXMgdGhlIGZhbGxiYWNrIHZhbHVlLiBCdXQgZGlmZi1oaWdobGlnaHQgZG9lcworIyBub3Qgb3RoZXJ3aXNlIGRlcGVuZCBvbiBnaXQgYXQgYWxsLCBhbmQgdGhlcmUgYXJlIHJlcG9ydHMKKyMgb2YgaXQgYmVpbmcgdXNlZCBpbiBvdGhlciBzZXR0aW5ncy4gTGV0J3MgaGFuZGxlIG91ciBvd24KKyMgZmFsbGJhY2ssIHdoaWNoIG1lYW5zIHdlIHdpbGwgd29yayBldmVuIGlmIGdpdCBjYW4ndCBiZSBydW4uCitzdWIgY29sb3JfY29uZmlnIHsKKwlteSAoJGtleSwgJGRlZmF1bHQpID0gQF87CisJbXkgJHMgPSBgZ2l0IGNvbmZpZyAtLWdldC1jb2xvciAka2V5IDI+JE5VTExgOworCXJldHVybiBsZW5ndGgoJHMpID8gJHMgOiAkZGVmYXVsdDsKK30KKworc3ViIHNob3dfaHVuayB7CisJbXkgKCRhLCAkYikgPSBAXzsKKworCSMgSWYgb25lIHNpZGUgaXMgZW1wdHksIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBjb21wYXJlIG9yIGhpZ2hsaWdodC4KKwlpZiAoIUAkYSB8fCAhQCRiKSB7CisJCSRsaW5lX2NiLT4oQCRhLCBAJGIpOworCQlyZXR1cm47CisJfQorCisJIyBJZiB3ZSBoYXZlIG1pc21hdGNoZWQgbnVtYmVycyBvZiBsaW5lcyBvbiBlYWNoIHNpZGUsIHdlIGNvdWxkIHRyeSB0bworCSMgYmUgY2xldmVyIGFuZCBtYXRjaCB1cCBzaW1pbGFyIGxpbmVzLiBCdXQgZm9yIG5vdyB3ZSBhcmUgc2ltcGxlIGFuZAorCSMgc3R1cGlkLCBhbmQgb25seSBoYW5kbGUgbXVsdGktbGluZSBodW5rcyB0aGF0IHJlbW92ZSBhbmQgYWRkIHRoZSBzYW1lCisJIyBudW1iZXIgb2YgbGluZXMuCisJaWYgKEAkYSAhPSBAJGIpIHsKKwkJJGxpbmVfY2ItPihAJGEsIEAkYik7CisJCXJldHVybjsKKwl9CisKKwlteSBAcXVldWU7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgQCRhOyAkaSsrKSB7CisJCW15ICgkcm0sICRhZGQpID0gaGlnaGxpZ2h0X3BhaXIoJGEtPlskaV0sICRiLT5bJGldKTsKKwkJJGxpbmVfY2ItPigkcm0pOworCQlwdXNoIEBxdWV1ZSwgJGFkZDsKKwl9CisJJGxpbmVfY2ItPihAcXVldWUpOworfQorCitzdWIgaGlnaGxpZ2h0X3BhaXIgeworCW15IEBhID0gc3BsaXRfbGluZShzaGlmdCk7CisJbXkgQGIgPSBzcGxpdF9saW5lKHNoaWZ0KTsKKworCSMgRmluZCBjb21tb24gcHJlZml4LCB0YWtpbmcgY2FyZSB0byBza2lwIGFueSBhbnNpCisJIyBjb2xvciBjb2Rlcy4KKwlteSAkc2Vlbl9wbHVzbWludXM7CisJbXkgKCRwYSwgJHBiKSA9ICgwLCAwKTsKKwl3aGlsZSAoJHBhIDwgQGEgJiYgJHBiIDwgQGIpIHsKKwkJaWYgKCRhWyRwYV0gPX4gLyRDT0xPUi8pIHsKKwkJCSRwYSsrOworCQl9CisJCWVsc2lmICgkYlskcGJdID1+IC8kQ09MT1IvKSB7CisJCQkkcGIrKzsKKwkJfQorCQllbHNpZiAoJGFbJHBhXSBlcSAkYlskcGJdKSB7CisJCQkkcGErKzsKKwkJCSRwYisrOworCQl9CisJCWVsc2lmICghJHNlZW5fcGx1c21pbnVzICYmICRhWyRwYV0gZXEgJy0nICYmICRiWyRwYl0gZXEgJysnKSB7CisJCQkkc2Vlbl9wbHVzbWludXMgPSAxOworCQkJJHBhKys7CisJCQkkcGIrKzsKKwkJfQorCQllbHNlIHsKKwkJCWxhc3Q7CisJCX0KKwl9CisKKwkjIEZpbmQgY29tbW9uIHN1ZmZpeCwgaWdub3JpbmcgY29sb3JzLgorCW15ICgkc2EsICRzYikgPSAoJCNhLCAkI2IpOworCXdoaWxlICgkc2EgPj0gJHBhICYmICRzYiA+PSAkcGIpIHsKKwkJaWYgKCRhWyRzYV0gPX4gLyRDT0xPUi8pIHsKKwkJCSRzYS0tOworCQl9CisJCWVsc2lmICgkYlskc2JdID1+IC8kQ09MT1IvKSB7CisJCQkkc2ItLTsKKwkJfQorCQllbHNpZiAoJGFbJHNhXSBlcSAkYlskc2JdKSB7CisJCQkkc2EtLTsKKwkJCSRzYi0tOworCQl9CisJCWVsc2UgeworCQkJbGFzdDsKKwkJfQorCX0KKworCWlmIChpc19wYWlyX2ludGVyZXN0aW5nKFxAYSwgJHBhLCAkc2EsIFxAYiwgJHBiLCAkc2IpKSB7CisJCXJldHVybiBoaWdobGlnaHRfbGluZShcQGEsICRwYSwgJHNhLCBcQE9MRF9ISUdITElHSFQpLAorCQkgICAgICAgaGlnaGxpZ2h0X2xpbmUoXEBiLCAkcGIsICRzYiwgXEBORVdfSElHSExJR0hUKTsKKwl9CisJZWxzZSB7CisJCXJldHVybiBqb2luKCcnLCBAYSksCisJCSAgICAgICBqb2luKCcnLCBAYik7CisJfQorfQorCisjIHdlIHNwbGl0IGVpdGhlciBieSAkQ09MT1Igb3IgYnkgY2hhcmFjdGVyLiBUaGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YKKyMgbGVhdmluZyBpbiBncmFwaCBjcnVmdC4gSXQgd29ya3MgYmVjYXVzZSB0aGUgZ3JhcGggY3J1ZnQgZG9lcyBub3QgY29udGFpbiAiLSIKKyMgb3IgIisiCitzdWIgc3BsaXRfbGluZSB7CisJbG9jYWwgJF8gPSBzaGlmdDsKKwlyZXR1cm4gdXRmODo6ZGVjb2RlKCRfKSA/CisJCW1hcCB7IHV0Zjg6OmVuY29kZSgkXyk7ICRfIH0KKwkJCW1hcCB7IC8kQ09MT1IvID8gJF8gOiAoc3BsaXQgLy8pIH0KKwkJCXNwbGl0IC8oJENPTE9SKykvIDoKKwkJbWFwIHsgLyRDT0xPUi8gPyAkXyA6IChzcGxpdCAvLykgfQorCQlzcGxpdCAvKCRDT0xPUispLzsKK30KKworc3ViIGhpZ2hsaWdodF9saW5lIHsKKwlteSAoJGxpbmUsICRwcmVmaXgsICRzdWZmaXgsICR0aGVtZSkgPSBAXzsKKworCW15ICRzdGFydCA9IGpvaW4oJycsIEB7JGxpbmV9WzAuLigkcHJlZml4LTEpXSk7CisJbXkgJG1pZCA9IGpvaW4oJycsIEB7JGxpbmV9WyRwcmVmaXguLiRzdWZmaXhdKTsKKwlteSAkZW5kID0gam9pbignJywgQHskbGluZX1bKCRzdWZmaXgrMSkuLiQjJGxpbmVdKTsKKworCSMgSWYgd2UgaGF2ZSBhICJub3JtYWwiIGNvbG9yIHNwZWNpZmllZCwgdGhlbiB0YWtlIG92ZXIgdGhlIHdob2xlIGxpbmUuCisJIyBPdGhlcndpc2UsIHdlIHRyeSB0byBqdXN0IG1hbmlwdWxhdGUgdGhlIGhpZ2hsaWdodGVkIGJpdHMuCisJaWYgKGRlZmluZWQgJHRoZW1lLT5bMF0pIHsKKwkJcy8kQ09MT1IvL2cgZm9yICgkc3RhcnQsICRtaWQsICRlbmQpOworCQljaG9tcCAkZW5kOworCQlyZXR1cm4gam9pbignJywKKwkJCSR0aGVtZS0+WzBdLCAkc3RhcnQsICRSRVNFVCwKKwkJCSR0aGVtZS0+WzFdLCAkbWlkLCAkUkVTRVQsCisJCQkkdGhlbWUtPlswXSwgJGVuZCwgJFJFU0VULAorCQkJIlxuIgorCQkpOworCX0gZWxzZSB7CisJCXJldHVybiBqb2luKCcnLAorCQkJJHN0YXJ0LAorCQkJJHRoZW1lLT5bMV0sICRtaWQsICR0aGVtZS0+WzJdLAorCQkJJGVuZAorCQkpOworCX0KK30KKworIyBQYWlycyBhcmUgaW50ZXJlc3RpbmcgdG8gaGlnaGxpZ2h0IG9ubHkgaWYgd2UgYXJlIGdvaW5nIHRvIGVuZCB1cAorIyBoaWdobGlnaHRpbmcgYSBzdWJzZXQgKGkuZS4sIG5vdCB0aGUgd2hvbGUgbGluZSkuIE90aGVyd2lzZSwgdGhlIGhpZ2hsaWdodGluZworIyBpcyBqdXN0IHVzZWxlc3Mgbm9pc2UuIFdlIGNhbiBkZXRlY3QgdGhpcyBieSBmaW5kaW5nIGVpdGhlciBhIG1hdGNoaW5nIHByZWZpeAorIyBvciBzdWZmaXggKGRpc3JlZ2FyZGluZyBib3JpbmcgYml0cyBsaWtlIHdoaXRlc3BhY2UgYW5kIGNvbG9yaXphdGlvbikuCitzdWIgaXNfcGFpcl9pbnRlcmVzdGluZyB7CisJbXkgKCRhLCAkcGEsICRzYSwgJGIsICRwYiwgJHNiKSA9IEBfOworCW15ICRwcmVmaXhfYSA9IGpvaW4oJycsIEAkYVswLi4oJHBhLTEpXSk7CisJbXkgJHByZWZpeF9iID0gam9pbignJywgQCRiWzAuLigkcGItMSldKTsKKwlteSAkc3VmZml4X2EgPSBqb2luKCcnLCBAJGFbKCRzYSsxKS4uJCMkYV0pOworCW15ICRzdWZmaXhfYiA9IGpvaW4oJycsIEAkYlsoJHNiKzEpLi4kIyRiXSk7CisKKwlyZXR1cm4gdmlzaWJsZV9zdWJzdHIoJHByZWZpeF9hLCAkZ3JhcGhfaW5kZW50KSAhfiAvXiRDT0xPUiotJEJPUklORyokLyB8fAorCSAgICAgICB2aXNpYmxlX3N1YnN0cigkcHJlZml4X2IsICRncmFwaF9pbmRlbnQpICF+IC9eJENPTE9SKlwrJEJPUklORyokLyB8fAorCSAgICAgICAkc3VmZml4X2EgIX4gL14kQk9SSU5HKiQvIHx8CisJICAgICAgICRzdWZmaXhfYiAhfiAvXiRCT1JJTkcqJC87Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L01ha2VmaWxlIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmJlN2NjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9NYWtlZmlsZQpAQCAtMCwwICsxLDIzIEBACithbGw6IGRpZmYtaGlnaGxpZ2h0CisKK1BFUkxfUEFUSCA9IC91c3IvYmluL3BlcmwKKy1pbmNsdWRlIC4uLy4uL2NvbmZpZy5tYWsKKworUEVSTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKQorCitkaWZmLWhpZ2hsaWdodDogc2hlYmFuZy5wZXJsIERpZmZIaWdobGlnaHQucG0gZGlmZi1oaWdobGlnaHQucGVybAorCWNhdCAkXiA+JEArCisJY2htb2QgK3ggJEArCisJbXYgJEArICRACisKK3NoZWJhbmcucGVybDogRk9SQ0UKKwlAZWNobyAnIyEkKFBFUkxfUEFUSF9TUSknID4kQCsKKwlAY21wICRAKyAkQCA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IG12ICRAKyAkQAorCit0ZXN0OiBhbGwKKwkkKE1BS0UpIC1DIHQKKworY2xlYW46CisJJChSTSkgZGlmZi1oaWdobGlnaHQKKworLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9SRUFETUUgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGMyMzQzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9SRUFETUUKQEAgLTAsMCArMSwyMjMgQEAKK2RpZmYtaGlnaGxpZ2h0Cis9PT09PT09PT09PT09PQorCitMaW5lIG9yaWVudGVkIGRpZmZzIGFyZSBncmVhdCBmb3IgcmV2aWV3aW5nIGNvZGUsIGJlY2F1c2UgZm9yIG1vc3QKK2h1bmtzLCB5b3Ugd2FudCB0byBzZWUgdGhlIG9sZCBhbmQgdGhlIG5ldyBzZWdtZW50cyBvZiBjb2RlIG5leHQgdG8gZWFjaAorb3RoZXIuIFNvbWV0aW1lcywgdGhvdWdoLCB3aGVuIGFuIG9sZCBsaW5lIGFuZCBhIG5ldyBsaW5lIGFyZSB2ZXJ5CitzaW1pbGFyLCBpdCdzIGhhcmQgdG8gaW1tZWRpYXRlbHkgc2VlIHRoZSBkaWZmZXJlbmNlLgorCitZb3UgY2FuIHVzZSAiLS1jb2xvci13b3JkcyIgdG8gaGlnaGxpZ2h0IG9ubHkgdGhlIGNoYW5nZWQgcG9ydGlvbnMgb2YKK2xpbmVzLiBIb3dldmVyLCB0aGlzIGNhbiBvZnRlbiBiZSBoYXJkIHRvIHJlYWQgZm9yIGNvZGUsIGFzIGl0IGxvc2VzCit0aGUgbGluZSBzdHJ1Y3R1cmUsIGFuZCB5b3UgZW5kIHVwIHdpdGggb2RkbHkgZm9ybWF0dGVkIGJpdHMuCisKK0luc3RlYWQsIHRoaXMgc2NyaXB0IHBvc3QtcHJvY2Vzc2VzIHRoZSBsaW5lLW9yaWVudGVkIGRpZmYsIGZpbmRzIHBhaXJzCitvZiBsaW5lcywgYW5kIGhpZ2hsaWdodHMgdGhlIGRpZmZlcmluZyBzZWdtZW50cy4gIEl0J3MgY3VycmVudGx5IHZlcnkKK3NpbXBsZSBhbmQgc3R1cGlkIGFib3V0IGRvaW5nIHRoZXNlIHRhc2tzLiBJbiBwYXJ0aWN1bGFyOgorCisgIDEuIEl0IHdpbGwgb25seSBoaWdobGlnaHQgaHVua3MgaW4gd2hpY2ggdGhlIG51bWJlciBvZiByZW1vdmVkIGFuZAorICAgICBhZGRlZCBsaW5lcyBpcyB0aGUgc2FtZSwgYW5kIGl0IHdpbGwgcGFpciBsaW5lcyB3aXRoaW4gdGhlIGh1bmsgYnkKKyAgICAgcG9zaXRpb24gKHNvIHRoZSBmaXJzdCByZW1vdmVkIGxpbmUgaXMgY29tcGFyZWQgdG8gdGhlIGZpcnN0IGFkZGVkCisgICAgIGxpbmUsIGFuZCBzbyBmb3J0aCkuIFRoaXMgaXMgc2ltcGxlIGFuZCB0ZW5kcyB0byB3b3JrIHdlbGwgaW4KKyAgICAgcHJhY3RpY2UuIE1vcmUgY29tcGxleCBjaGFuZ2VzIGRvbid0IGhpZ2hsaWdodCB3ZWxsLCBzbyB3ZSB0ZW5kIHRvCisgICAgIGV4Y2x1ZGUgdGhlbSBkdWUgdG8gdGhlICJzYW1lIG51bWJlciBvZiByZW1vdmVkIGFuZCBhZGRlZCBsaW5lcyIKKyAgICAgcmVzdHJpY3Rpb24uIE9yIGV2ZW4gaWYgd2UgZG8gdHJ5IHRvIGhpZ2hsaWdodCB0aGVtLCB0aGV5IGVuZCB1cAorICAgICBub3QgaGlnaGxpZ2h0aW5nIGJlY2F1c2Ugb2Ygb3VyICJkb24ndCBoaWdobGlnaHQgaWYgdGhlIHdob2xlIGxpbmUKKyAgICAgd291bGQgYmUgaGlnaGxpZ2h0ZWQiIHJ1bGUuCisKKyAgMi4gSXQgd2lsbCBmaW5kIHRoZSBjb21tb24gcHJlZml4IGFuZCBzdWZmaXggb2YgdHdvIGxpbmVzLCBhbmQKKyAgICAgY29uc2lkZXIgZXZlcnl0aGluZyBpbiB0aGUgbWlkZGxlIHRvIGJlICJkaWZmZXJlbnQiLiBJdCBjb3VsZAorICAgICBpbnN0ZWFkIGRvIGEgcmVhbCBkaWZmIG9mIHRoZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIHR3byBsaW5lcyBhbmQKKyAgICAgZmluZCBjb21tb24gc3Vic2VxdWVuY2VzLiBIb3dldmVyLCB0aGUgcG9pbnQgb2YgdGhlIGhpZ2hsaWdodCBpcyB0bworICAgICBjYWxsIGF0dGVudGlvbiB0byBhIGNlcnRhaW4gYXJlYS4gRXZlbiBpZiBzb21lIHNtYWxsIHN1YnNldCBvZiB0aGUKKyAgICAgaGlnaGxpZ2h0ZWQgYXJlYSBhY3R1YWxseSBkaWRuJ3QgY2hhbmdlLCB0aGF0J3MgT0suIEluIHByYWN0aWNlIGl0CisgICAgIGVuZHMgdXAgYmVpbmcgbW9yZSByZWFkYWJsZSB0byBqdXN0IGhhdmUgYSBzaW5nbGUgYmxvYiBvbiB0aGUgbGluZQorICAgICBzaG93aW5nIHRoZSBpbnRlcmVzdGluZyBiaXQuCisKK1RoZSBnb2FsIG9mIHRoZSBzY3JpcHQgaXMgdGhlcmVmb3JlIG5vdCB0byBiZSBleGFjdCBhYm91dCBoaWdobGlnaHRpbmcKK2NoYW5nZXMsIGJ1dCB0byBjYWxsIGF0dGVudGlvbiB0byBhcmVhcyBvZiBpbnRlcmVzdCB3aXRob3V0IGJlaW5nCit2aXN1YWxseSBkaXN0cmFjdGluZy4gIE5vbi1kaWZmIGxpbmVzIGFuZCBleGlzdGluZyBkaWZmIGNvbG9yYXRpb24gaXMKK3ByZXNlcnZlZDsgdGhlIGludGVudCBpcyB0aGF0IHRoZSBvdXRwdXQgc2hvdWxkIGxvb2sgZXhhY3RseSB0aGUgc2FtZSBhcwordGhlIGlucHV0LCBleGNlcHQgZm9yIHRoZSBvY2Nhc2lvbmFsIGhpZ2hsaWdodC4KKworVXNlCistLS0KKworWW91IGNhbiB0cnkgb3V0IHRoZSBkaWZmLWhpZ2hsaWdodCBwcm9ncmFtIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGxvZyAtcCAtLWNvbG9yIHwgL3BhdGgvdG8vZGlmZi1oaWdobGlnaHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byB1c2UgaXQgYWxsIHRoZSB0aW1lLCBkcm9wIGl0IGluIHlvdXIgJFBBVEggYW5kIHB1dCB0aGUKK2ZvbGxvd2luZyBpbiB5b3VyIGdpdCBjb25maWd1cmF0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1twYWdlcl0KKwlsb2cgPSBkaWZmLWhpZ2hsaWdodCB8IGxlc3MKKwlzaG93ID0gZGlmZi1oaWdobGlnaHQgfCBsZXNzCisJZGlmZiA9IGRpZmYtaGlnaGxpZ2h0IHwgbGVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQ29sb3IgQ29uZmlnCistLS0tLS0tLS0tLS0KKworWW91IGNhbiBjb25maWd1cmUgdGhlIGhpZ2hsaWdodCBjb2xvcnMgYW5kIGF0dHJpYnV0ZXMgdXNpbmcgZ2l0J3MKK2NvbmZpZy4gVGhlIGNvbG9ycyBmb3IgIm9sZCIgYW5kICJuZXciIGxpbmVzIGNhbiBiZSBzcGVjaWZpZWQKK2luZGVwZW5kZW50bHkuIFRoZXJlIGFyZSB0d28gIm1vZGVzIiBvZiBjb25maWd1cmF0aW9uOgorCisgIDEuIFlvdSBjYW4gc3BlY2lmeSBhICJoaWdobGlnaHQiIGNvbG9yIGFuZCBhIG1hdGNoaW5nICJyZXNldCIgY29sb3IuCisgICAgIFRoaXMgd2lsbCByZXRhaW4gYW55IGV4aXN0aW5nIGNvbG9ycyBpbiB0aGUgZGlmZiwgYW5kIGFwcGx5IHRoZQorICAgICAiaGlnaGxpZ2h0IiBhbmQgInJlc2V0IiBjb2xvcnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgaGlnaGxpZ2h0ZWQKKyAgICAgcG9ydGlvbi4KKworICAyLiBZb3UgY2FuIHNwZWNpZnkgYSAibm9ybWFsIiBjb2xvciBhbmQgYSAiaGlnaGxpZ2h0IiBjb2xvci4gSW4gdGhpcworICAgICBjYXNlLCBleGlzdGluZyBjb2xvcnMgYXJlIGRyb3BwZWQgZnJvbSB0aGF0IGxpbmUuIFRoZSBub24taGlnaGxpZ2h0ZWQKKyAgICAgYml0cyBvZiB0aGUgbGluZSBnZXQgdGhlICJub3JtYWwiIGNvbG9yLCBhbmQgdGhlIGhpZ2hsaWdodHMgZ2V0IHRoZQorICAgICAiaGlnaGxpZ2h0IiBjb2xvci4KKworSWYgbm8gIm5ldyIgY29sb3JzIGFyZSBzcGVjaWZpZWQsIHRoZXkgZGVmYXVsdCB0byB0aGUgIm9sZCIgY29sb3JzLiBJZgorbm8gIm9sZCIgY29sb3JzIGFyZSBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHJldmVyc2UgdGhlIGZvcmVncm91bmQKK2FuZCBiYWNrZ3JvdW5kIGZvciBoaWdobGlnaHRlZCBwb3J0aW9ucy4KKworRXhhbXBsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVbmRlcmxpbmUgaGlnaGxpZ2h0ZWQgcG9ydGlvbnMKK1tjb2xvciAiZGlmZi1oaWdobGlnaHQiXQorb2xkSGlnaGxpZ2h0ID0gdWwKK29sZFJlc2V0ID0gbm91bAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBWYXJ5aW5nIGJhY2tncm91bmQgaW50ZW5zaXRpZXMKK1tjb2xvciAiZGlmZi1oaWdobGlnaHQiXQorb2xkTm9ybWFsID0gImJsYWNrICNmOGNiY2IiCitvbGRIaWdobGlnaHQgPSAiYmxhY2sgI2ZmYWFhYSIKK25ld05vcm1hbCA9ICJibGFjayAjY2JlZWNiIgorbmV3SGlnaGxpZ2h0ID0gImJsYWNrICNhYWZmYWEiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitVc2luZyBkaWZmLWhpZ2hsaWdodCBhcyBhIG1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgdG8gcHJlLSBvciBwb3N0LSBwcm9jZXNzIHRoZSBoaWdobGlnaHRlZCBsaW5lcyBhcyBwYXJ0IG9mCithbm90aGVyIHBlcmwgc2NyaXB0LCB5b3UgY2FuIHVzZSB0aGUgRGlmZkhpZ2hsaWdodCBtb2R1bGUuIFlvdSBjYW4KK2VpdGhlciAicmVxdWlyZSIgaXQgb3IganVzdCBjYXQgdGhlIG1vZHVsZSB0b2dldGhlciB3aXRoIHlvdXIgc2NyaXB0ICh0bworYXZvaWQgcnVuLXRpbWUgZGVwZW5kZW5jaWVzKS4KKworWW91ciBzY3JpcHQgbWF5IHNldCB1cCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKworICAtICREaWZmSGlnaGxpZ2h0OjpsaW5lX2NiIC0gdGhpcyBzaG91bGQgcG9pbnQgdG8gYSBmdW5jdGlvbiB3aGljaCBpcworICAgIGNhbGxlZCB3aGVuZXZlciBEaWZmSGlnaGxpZ2h0IGhhcyBsaW5lcyAod2hpY2ggbWF5IGNvbnRhaW4KKyAgICBoaWdobGlnaHRzKSB0byBvdXRwdXQuIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHByaW50cyBlYWNoIGxpbmUgdG8KKyAgICBzdGRvdXQuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCB3aXRoIG11bHRpcGxlIGxpbmVzLgorCisgIC0gJERpZmZIaWdobGlnaHQ6OmZsdXNoX2NiIC0gdGhpcyBzaG91bGQgcG9pbnQgdG8gYSBmdW5jdGlvbiB3aGljaAorICAgIGZsdXNoZXMgdGhlIG91dHB1dCAoYmVjYXVzZSBEaWZmSGlnaGxpZ2h0IGJlbGlldmVzIGl0IGhhcyBjb21wbGV0ZWQKKyAgICBwcm9jZXNzaW5nIGEgbG9naWNhbCBjaHVuayBvZiBpbnB1dCkuIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIGZsdXNoZXMKKyAgICBzdGRvdXQuCisKK1RoZSBzY3JpcHQgbWF5IHRoZW4gZmVlZCBsaW5lcywgb25lIGF0IGEgdGltZSwgdG8gRGlmZkhpZ2hsaWdodDo6aGFuZGxlX2xpbmUoKS4KK1doZW4gbGluZXMgYXJlIGRvbmUgcHJvY2Vzc2luZywgdGhleSB3aWxsIGJlIGZlZCB0byAkbGluZV9jYi4gTm90ZSB0aGF0CitEaWZmSGlnaGxpZ2h0IG1heSBxdWV1ZSB1cCBtYW55IGlucHV0IGxpbmVzICh0byBhbmFseXplIGEgd2hvbGUgaHVuaykKK2JlZm9yZSBjYWxsaW5nICRsaW5lX2NiLiBBZnRlciBwcm92aWRpbmcgYWxsIGxpbmVzLCBjYWxsCitEaWZmSGlnaGxpZ2h0OjpmbHVzaCgpIHRvIGZsdXNoIGFueSB1bnByb2Nlc3NlZCBsaW5lcy4KKworSWYgeW91IGp1c3Qgd2FudCB0byBwcm9jZXNzIHN0ZGluLCBEaWZmSGlnaGxpZ2h0OjpoaWdobGlnaHRfc3RkaW4oKQoraXMgYSBjb252ZW5pZW5jZSBoZWxwZXIgd2hpY2ggd2lsbCBsb29wIGFuZCBmbHVzaCBmb3IgeW91LgorCisKK0J1Z3MKKy0tLS0KKworQmVjYXVzZSBkaWZmLWhpZ2hsaWdodCByZWxpZXMgb24gaGV1cmlzdGljcyB0byBndWVzcyB3aGljaCBwYXJ0cyBvZgorY2hhbmdlcyBhcmUgaW1wb3J0YW50LCB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB0aGUgaGlnaGxpZ2h0aW5nIGlzCittb3JlIGRpc3RyYWN0aW5nIHRoYW4gdXNlZnVsLiBGb3J0dW5hdGVseSwgdGhlc2UgY2FzZXMgYXJlIHJhcmUgaW4KK3ByYWN0aWNlLCBhbmQgd2hlbiB0aGV5IGRvIG9jY3VyLCB0aGUgd29yc3QgY2FzZSBpcyBzaW1wbHkgYSBsaXR0bGUKK2V4dHJhIGhpZ2hsaWdodGluZy4gVGhpcyBzZWN0aW9uIGRvY3VtZW50cyBzb21lIGNhc2VzIGtub3duIHRvIGJlCitzdWItb3B0aW1hbCwgaW4gY2FzZSBzb21lYm9keSBmZWVscyBsaWtlIHdvcmtpbmcgb24gaW1wcm92aW5nIHRoZQoraGV1cmlzdGljcy4KKworMS4gVHdvIGNoYW5nZXMgb24gdGhlIHNhbWUgbGluZSBnZXQgaGlnaGxpZ2h0ZWQgaW4gYSBibG9iLiBGb3IgZXhhbXBsZSwKKyAgIGhpZ2hsaWdodGluZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWZvbyhidWYsIHNpemUpOworK2ZvbyhvYmotPmJ1Ziwgb2JqLT5zaXplKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgeWllbGRzICh3aGVyZSB0aGUgaW5zaWRlIG9mICIre30iIHdvdWxkIGJlIGhpZ2hsaWdodGVkKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLWZvbyhidWYsIHNpemUpOworK2Zvbygre29iai0+YnVmLCBvYmotPn1zaXplKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2hlcmVhcyBhIG1vcmUgc2VtYW50aWNhbGx5IG1lYW5pbmdmdWwgb3V0cHV0IHdvdWxkIGJlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZm9vKGJ1Ziwgc2l6ZSk7CisrZm9vKCt7b2JqLT59YnVmLCAre29iai0+fXNpemUpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBOb3RlIHRoYXQgZG9pbmcgdGhpcyByaWdodCB3b3VsZCBwcm9iYWJseSBpbnZvbHZlIGEgc2V0IG9mCisgICBjb250ZW50LXNwZWNpZmljIGJvdW5kYXJ5IHBhdHRlcm5zLCBzaW1pbGFyIHRvIHdvcmQtZGlmZi4gT3RoZXJ3aXNlCisgICB5b3UgZ2V0IGp1bmsgbGlrZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy10aGlzIGxpbmUgaGFzIHNvbWUgLXtpfW50LXtlcmV9c3RpLXtuZ30gdGV4dCBvbiBpdAorK3RoaXMgbGluZSBoYXMgc29tZSAre2ZhfW50K3thfXN0aSt7Y30gdGV4dCBvbiBpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2hpY2ggaXMgbGVzcyByZWFkYWJsZSB0aGFuIHRoZSBjdXJyZW50IG91dHB1dC4KKworMi4gVGhlIG11bHRpLWxpbmUgbWF0Y2hpbmcgYXNzdW1lcyB0aGF0IGxpbmVzIGluIHRoZSBwcmUtIGFuZCBwb3N0LWltYWdlCisgICBtYXRjaCBieSBwb3NpdGlvbi4gVGhpcyBpcyBvZnRlbiB0aGUgY2FzZSwgYnV0IGNhbiBiZSBmb29sZWQgd2hlbiBhCisgICBsaW5lIGlzIHJlbW92ZWQgZnJvbSB0aGUgdG9wIGFuZCBhIG5ldyBvbmUgYWRkZWQgYXQgdGhlIGJvdHRvbSAob3IKKyAgIHZpY2UgdmVyc2EpLiBVbmxlc3MgdGhlIGxpbmVzIGluIHRoZSBtaWRkbGUgYXJlIGFsc28gY2hhbmdlZCwgZGlmZnMKKyAgIHdpbGwgc2hvdyB0aGlzIGFzIHR3byBodW5rcywgYW5kIGl0IHdpbGwgbm90IGdldCBoaWdobGlnaHRlZCBhdCBhbGwKKyAgICh3aGljaCBpcyBnb29kKS4gQnV0IGlmIHRoZSBsaW5lcyBpbiB0aGUgbWlkZGxlIGFyZSBjaGFuZ2VkLCB0aGUKKyAgIGhpZ2hsaWdodGluZyBjYW4gYmUgbWlzbGVhZGluZy4gSGVyZSdzIGEgcGF0aG9sb2dpY2FsIGNhc2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistb25lCistdHdvCistdGhyZWUKKy1mb3VyCisrdHdvIDIKKyt0aHJlZSAzCisrZm91ciA0CisrZml2ZSA1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aGljaCBnZXRzIGhpZ2hsaWdodGVkIGFzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW9uZQorLXQte3dvfQorLXRocmVlCistZi17b3VyfQorK3R3byAyCisrdCt7aHJlZSAzfQorK2ZvdXIgNAorK2Yre2l2ZSA1fQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgYmVjYXVzZSBpdCBtYXRjaGVzICJ0d28iIHRvICJ0aHJlZSAzIiwgYW5kIHNvIGZvcnRoLiBJdCB3b3VsZCBiZQorICAgbmljZXIgYXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistb25lCistdHdvCistdGhyZWUKKy1mb3VyCisrdHdvICt7Mn0KKyt0aHJlZSArezN9CisrZm91ciArezR9CisrZml2ZSA1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aGljaCB3b3VsZCBwcm9iYWJseSBpbnZvbHZlIHByZS1tYXRjaGluZyB0aGUgbGluZXMgaW50byBwYWlycworICAgYWNjb3JkaW5nIHRvIHNvbWUgaGV1cmlzdGljLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9kaWZmLWhpZ2hsaWdodC5wZXJsIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9kaWZmLWhpZ2hsaWdodC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliM2U5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L2RpZmYtaGlnaGxpZ2h0LnBlcmwKQEAgLTAsMCArMSw4IEBACitwYWNrYWdlIG1haW47CisKKyMgU29tZSBzY3JpcHRzIG1heSBub3QgcmVhbGl6ZSB0aGF0IFNJR1BJUEUgaXMgYmVpbmcgaWdub3JlZCB3aGVuIGxhdW5jaGluZyB0aGUKKyMgcGFnZXItLWZvciBpbnN0YW5jZSBzY3JpcHRzIHdyaXR0ZW4gaW4gUHl0aG9uLgorJFNJR3tQSVBFfSA9ICdERUZBVUxUJzsKKworRGlmZkhpZ2hsaWdodDo6aGlnaGxpZ2h0X3N0ZGluKCk7CitleGl0IDA7CmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L3QvLmdpdGlnbm9yZSBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkY2JiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKy90cmFzaCBkaXJlY3RvcnkqCisvdGVzdC1yZXN1bHRzCmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L3QvTWFrZWZpbGUgYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmNTI3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC9NYWtlZmlsZQpAQCAtMCwwICsxLDIyIEBACistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworIyBjb3BpZWQgZnJvbSAuLi8uLi90L01ha2VmaWxlCitTSEVMTF9QQVRIID89ICQoU0hFTEwpCitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKK1QgPSAkKHdpbGRjYXJkIHRbMC05XVswLTldWzAtOV1bMC05XS0qLnNoKQorCithbGw6IHRlc3QKK3Rlc3Q6ICQoVCkKKworLlBIT05ZOiBoZWxwIGNsZWFuIGFsbCB0ZXN0ICQoVCkKKworaGVscDoKKwlAZWNobyAnUnVuICIkKE1BS0UpIHRlc3QiIHRvIGxhdW5jaCB0ZXN0IHNjcmlwdHMnCisJQGVjaG8gJ1J1biAiJChNQUtFKSBjbGVhbiIgdG8gcmVtb3ZlIHRyYXNoIGZvbGRlcnMnCisKKyQoVCk6CisJQGVjaG8gIioqKiAkQCAqKioiOyAnJChTSEVMTF9QQVRIX1NRKScgJEAgJChHSVRfVEVTVF9PUFRTKQorCitjbGVhbjoKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qCmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L3QvdDk0MDAtZGlmZi1oaWdobGlnaHQuc2ggYi9jb250cmliL2RpZmYtaGlnaGxpZ2h0L3QvdDk0MDAtZGlmZi1oaWdobGlnaHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjZmNTE5NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvdC90OTQwMC1kaWZmLWhpZ2hsaWdodC5zaApAQCAtMCwwICsxLDM0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZGlmZi1oaWdobGlnaHQnCisKK0NVUlJfRElSPSQocHdkKQorVEVTVF9PVVRQVVRfRElSRUNUT1JZPSQocHdkKQorVEVTVF9ESVJFQ1RPUlk9IiRDVVJSX0RJUiIvLi4vLi4vLi4vdAorRElGRl9ISUdITElHSFQ9IiRDVVJSX0RJUiIvLi4vZGlmZi1oaWdobGlnaHQKKworQ1c9IiQocHJpbnRmICJcMDMzWzdtIikiCSMgd2hpdGUKK0NSPSIkKHByaW50ZiAiXDAzM1syN20iKSIJIyByZXNldAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGRpZmYtaGlnaGxpZ2h0IHRlc3RzOyBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCisjIGRoX3Rlc3QgaXMgYSB0ZXN0IGhlbHBlciBmdW5jdGlvbiB3aGljaCB0YWtlcyAzIGZpbGUgbmFtZXMgYXMgcGFyYW1ldGVycy4gVGhlCisjIGZpcnN0IDIgZmlsZXMgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgZGlmZiBhbmQgY29tbWl0IG91dHB1dCwgd2hpY2ggaXMgdGhlbgorIyBwaXBlZCB0aHJvdWdoIGRpZmYtaGlnaGxpZ2h0LiBUaGUgM3JkIGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGV4cGVjdGVkIG91dHB1dAorIyBvZiBkaWZmLWhpZ2hsaWdodCAobWludXMgdGhlIGRpZmYvY29tbWl0IGhlYWRlciwgaWUuIGV2ZXJ5dGhpbmcgYWZ0ZXIgYW5kCisjIGluY2x1ZGluZyB0aGUgZmlyc3QgQEAgbGluZSkuCitkaF90ZXN0ICgpIHsKKwlhPSIkMSIgYj0iJDIiICYmCisKKwljYXQgPnBhdGNoLmV4cCAmJgorCisJeworCQljYXQgIiRhIiA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGEgZmlsZSIgJiYKKworCQljYXQgIiRiIiA+ZmlsZSAmJgorCQlnaXQgZGlmZiBmaWxlID5kaWZmLnJhdyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJVcGRhdGUgYSBmaWxlIiAmJgorCQlnaXQgc2hvdyA+Y29tbWl0LnJhdworCX0gPi9kZXYvbnVsbCAmJgorCisJIiRESUZGX0hJR0hMSUdIVCIgPGRpZmYucmF3IHwgdGVzdF9zdHJpcF9wYXRjaF9oZWFkZXIgPmRpZmYuYWN0ICYmCisJIiRESUZGX0hJR0hMSUdIVCIgPGNvbW1pdC5yYXcgfCB0ZXN0X3N0cmlwX3BhdGNoX2hlYWRlciA+Y29tbWl0LmFjdCAmJgorCXRlc3RfY21wIHBhdGNoLmV4cCBkaWZmLmFjdCAmJgorCXRlc3RfY21wIHBhdGNoLmV4cCBjb21taXQuYWN0Cit9CisKK3Rlc3Rfc3RyaXBfcGF0Y2hfaGVhZGVyICgpIHsKKwlzZWQgLW4gJy9eQEAvLCRwJyAkKgorfQorCisjIGRoX3Rlc3Rfc2V0dXBfaGlzdG9yeSBnZW5lcmF0ZXMgYSBjb250cml2ZWQgZ3JhcGggc3VjaCB0aGF0IHdlIGhhdmUgYXQgbGVhc3QKKyMgMSBuZXN0aW5nIChFKSBhbmQgMiBuZXN0aW5ncyAoRikuCisjCisjCSAgQS0tLUIgbWFzdGVyCisjCSAvCisjCUQtLS1FLS0tRiBicmFuY2gKKyMKKyMJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoCisjCSogY29tbWl0CisjCXwgICAgQgorIwl8ICogY29tbWl0CisjCXwgfCAgICBGCisjCSogfCBjb21taXQKKyMJfCB8ICAgIEEKKyMJfCAqIGNvbW1pdAorIwl8LworIwl8ICAgIEUKKyMJKiBjb21taXQKKyMJICAgICBECisjCitkaF90ZXN0X3NldHVwX2hpc3RvcnkgKCkgeworCWVjaG8gZmlsZTEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJEIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCWVjaG8gZmlsZTIgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJFIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gZmlsZTIgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJBIiAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaCAmJgorCWVjaG8gZmlsZTMgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJGIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gZmlsZTMgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJCIgorfQorCitsZWZ0X3RyaW0gKCkgeworCSIkUEVSTF9QQVRIIiAtcGUgJ3MvXlxzKy8vJworfQorCit0cmltX2dyYXBoICgpIHsKKwkjIGdyYXBocyBzdGFydCB3aXRoICogb3IgfAorCSMgZm9sbG93ZWQgYnkgYSBzcGFjZSBvciAvIG9yIFwKKwkiJFBFUkxfUEFUSCIgLXBlICdzQF4oKFwqfFx8KSggfC98XFwpKStAQCcKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgaGlnaGxpZ2h0cyB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZScgJworCWNhdCA+YSA8PC1cRU9GICYmCisJCWFhYQorCQliYmIKKwkJY2NjCisJRU9GCisKKwljYXQgPmIgPDwtXEVPRiAmJgorCQlhYWEKKwkJMGJiCisJCWNjYworCUVPRgorCisJZGhfdGVzdCBhIGIgPDwtRU9GCisJCUBAIC0xLDMgKzEsMyBAQAorCQkgYWFhCisJCS0ke0NXfWIke0NSfWJiCisJCSske0NXfTAke0NSfWJiCisJCSBjY2MKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgaGlnaGxpZ2h0cyB0aGUgZW5kIG9mIGEgbGluZScgJworCWNhdCA+YSA8PC1cRU9GICYmCisJCWFhYQorCQliYmIKKwkJY2NjCisJRU9GCisKKwljYXQgPmIgPDwtXEVPRiAmJgorCQlhYWEKKwkJYmIwCisJCWNjYworCUVPRgorCisJZGhfdGVzdCBhIGIgPDwtRU9GCisJCUBAIC0xLDMgKzEsMyBAQAorCQkgYWFhCisJCS1iYiR7Q1d9YiR7Q1J9CisJCStiYiR7Q1d9MCR7Q1J9CisJCSBjY2MKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgaGlnaGxpZ2h0cyB0aGUgbWlkZGxlIG9mIGEgbGluZScgJworCWNhdCA+YSA8PC1cRU9GICYmCisJCWFhYQorCQliYmIKKwkJY2NjCisJRU9GCisKKwljYXQgPmIgPDwtXEVPRiAmJgorCQlhYWEKKwkJYjBiCisJCWNjYworCUVPRgorCisJZGhfdGVzdCBhIGIgPDwtRU9GCisJCUBAIC0xLDMgKzEsMyBAQAorCQkgYWFhCisJCS1iJHtDV31iJHtDUn1iCisJCStiJHtDV30wJHtDUn1iCisJCSBjY2MKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgZG9lcyBub3QgaGlnaGxpZ2h0IHdob2xlIGxpbmUnICcKKwljYXQgPmEgPDwtXEVPRiAmJgorCQlhYWEKKwkJYmJiCisJCWNjYworCUVPRgorCisJY2F0ID5iIDw8LVxFT0YgJiYKKwkJYWFhCisJCTAwMAorCQljY2MKKwlFT0YKKworCWRoX3Rlc3QgYSBiIDw8LUVPRgorCQlAQCAtMSwzICsxLDMgQEAKKwkJIGFhYQorCQktYmJiCisJCSswMDAKKwkJIGNjYworCUVPRgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkaWZmLWhpZ2hsaWdodCBoaWdobGlnaHRzIG1pc21hdGNoZWQgaHVuayBzaXplJyAnCisJY2F0ID5hIDw8LVxFT0YgJiYKKwkJYWFhCisJCWJiYgorCUVPRgorCisJY2F0ID5iIDw8LVxFT0YgJiYKKwkJYWFhCisJCWIwYgorCQljY2MKKwlFT0YKKworCWRoX3Rlc3QgYSBiIDw8LUVPRgorCQlAQCAtMSwzICsxLDMgQEAKKwkJIGFhYQorCQktYiR7Q1d9YiR7Q1J9YgorCQkrYiR7Q1d9MCR7Q1J9YgorCQkrY2NjCisJRU9GCisnCisKKyMgVGhlc2UgdHdvIGNvZGUgcG9pbnRzIHNoYXJlIHRoZSBzYW1lIGxlYWRpbmcgYnl0ZSBpbiBVVEYtOCByZXByZXNlbnRhdGlvbjsKKyMgYSBuYWl2ZSBieXRlLXdpc2UgZGlmZiB3b3VsZCBoaWdobGlnaHQgb25seSB0aGUgc2Vjb25kIGJ5dGUuCisjCisjICAgLSBVKzAwZjMgKCJvIiB3aXRoIGFjdXRlKQorb19hY2NlbnQ9JChwcmludGYgJ1wzMDNcMjYzJykKKyMgICAtIFUrMDBmOCAoIm8iIHdpdGggc3Ryb2tlKQorb19zdHJva2U9JChwcmludGYgJ1wzMDNcMjcwJykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgdHJlYXRzIG11bHRpYnl0ZSB1dGYtOCBhcyBhIHVuaXQnICcKKwllY2hvICJ1bmljJHtvX2FjY2VudH1kZSIgPmEgJiYKKwllY2hvICJ1bmljJHtvX3N0cm9rZX1kZSIgPmIgJiYKKwlkaF90ZXN0IGEgYiA8PC1FT0YKKwkJQEAgLTEgKzEgQEAKKwkJLXVuaWMke0NXfSR7b19hY2NlbnR9JHtDUn1kZQorCQkrdW5pYyR7Q1d9JHtvX3N0cm9rZX0ke0NSfWRlCisJRU9GCisnCisKKyMgVW5saWtlIHRoZSBVVEYtOCBhYm92ZSwgdGhlc2UgYXJlIGNvbWJpbmluZyBjb2RlIHBvaW50cyB3aGljaCBhcmUgbWVhbnQKKyMgdG8gbW9kaWZ5IHRoZSBjaGFyYWN0ZXIgcHJlY2VkaW5nIHRoZW06CisjCisjICAgLSBVKzAzMDEgKGNvbWJpbmluZyBhY3V0ZSBhY2NlbnQpCitjb21iaW5lX2FjY2VudD0kKHByaW50ZiAnXDMxNFwyMDEnKQorIyAgIC0gVSswMzAyIChjb21iaW5pbmcgY2lyY3VtZmxleCkKK2NvbWJpbmVfY2lyY3VtPSQocHJpbnRmICdcMzE0XDIwMicpCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RpZmYtaGlnaGxpZ2h0IHRyZWF0cyBjb21iaW5pbmcgY29kZSBwb2ludHMgYXMgYSB1bml0JyAnCisJZWNobyAidW5pY28ke2NvbWJpbmVfYWNjZW50fWRlIiA+YSAmJgorCWVjaG8gInVuaWNvJHtjb21iaW5lX2NpcmN1bX1kZSIgPmIgJiYKKwlkaF90ZXN0IGEgYiA8PC1FT0YKKwkJQEAgLTEgKzEgQEAKKwkJLXVuaWMke0NXfW8ke2NvbWJpbmVfYWNjZW50fSR7Q1J9ZGUKKwkJK3VuaWMke0NXfW8ke2NvbWJpbmVfY2lyY3VtfSR7Q1J9ZGUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgd29ya3Mgd2l0aCB0aGUgLS1ncmFwaCBvcHRpb24nICcKKwlkaF90ZXN0X3NldHVwX2hpc3RvcnkgJiYKKworCSMgZGF0ZS1vcmRlciBzbyB0aGF0IHRoZSBjb21taXRzIGFyZSBpbnRlcmxlYXZlZCBmb3IgYm90aAorCSMgdHJpbSBncmFwaCBlbGVtZW50cyBzbyB3ZSBjYW4gZG8gYSBkaWZmCisJIyB0cmltIGxlYWRpbmcgc3BhY2UgYmVjYXVzZSBvdXIgdHJpbV9ncmFwaCBpcyBub3QgcGVyZmVjdAorCWdpdCBsb2cgLS1icmFuY2hlcyAtcCAtLWRhdGUtb3JkZXIgfAorCQkiJERJRkZfSElHSExJR0hUIiB8IGxlZnRfdHJpbSA+Z3JhcGguZXhwICYmCisJZ2l0IGxvZyAtLWJyYW5jaGVzIC1wIC0tZGF0ZS1vcmRlciAtLWdyYXBoIHwKKwkJIiRESUZGX0hJR0hMSUdIVCIgfCB0cmltX2dyYXBoIHwgbGVmdF90cmltID5ncmFwaC5hY3QgJiYKKwl0ZXN0X2NtcCBncmFwaC5leHAgZ3JhcGguYWN0CisnCisKKyMgSnVzdCByZXVzZSB0aGUgcHJldmlvdXMgZ3JhcGggdGVzdCwgYnV0IHdpdGggLS1jb2xvci4gIE91ciB0cmltbWluZworIyBkb2Vzbid0IGtub3cgYWJvdXQgY29sb3IsIHNvIGp1c3Qgc2FuaXR5IGNoZWNrIHRoYXQgc29tZXRoaW5nIGdvdAorIyBoaWdobGlnaHRlZC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaGlnaGxpZ2h0IHdvcmtzIHdpdGggY29sb3IgZ3JhcGgnICcKKwlnaXQgbG9nIC0tYnJhbmNoZXMgLXAgLS1kYXRlLW9yZGVyIC0tZ3JhcGggLS1jb2xvciB8CisJCSIkRElGRl9ISUdITElHSFQiIHwgdHJpbV9ncmFwaCB8IGxlZnRfdHJpbSA+Z3JhcGggJiYKKwlncmVwICJcWzdtIiBncmFwaAorJworCisjIE1vc3QgY29tYmluZWQgZGlmZnMgd29uJ3QgbWVldCBkaWZmLWhpZ2hsaWdodCdzIGxpbmUtbnVtYmVyIGZpbHRlci4gU28gd2UKKyMgY3JlYXRlIG9uZSBoZXJlIHdoZXJlIG9uZSBzaWRlIGRyb3BzIGEgbGluZSBhbmQgdGhlIG90aGVyIG1vZGlmaWVzIGl0LiBUaGF0CisjIHNob3VsZCByZXN1bHQgaW4gYSBkaWZmIGxpa2U6CisjCisjICAgIC0gbW9kaWZpZWQgY29udGVudAorIyAgICArK3Jlc29sdmVkIGNvbnRlbnQKKyMKKyMgd2hpY2ggbmFpdmVseSBsb29rcyBsaWtlIG9uZSBzaWRlIGFkZGVkICIrcmVzb2x2ZWQiLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1oaWdobGlnaHQgaWdub3JlcyBjb21iaW5lZCBkaWZmcycgJworCWVjaG8gImNvbnRlbnQiID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisKKwk+ZmlsZSAmJgorCWdpdCBjb21taXQgLWFtIG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQUReICYmCisJZWNobyAibW9kaWZpZWQgY29udGVudCIgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hbSBvdGhlciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWVjaG8gInJlc29sdmVkIGNvbnRlbnQiID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYW0gcmVzb2x2ZWQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAQCAtMSwxIC0xLDAgKzEsMSBAQEAKKwktIG1vZGlmaWVkIGNvbnRlbnQKKwkrK3Jlc29sdmVkIGNvbnRlbnQKKwlFT0YKKworCWdpdCBzaG93IC1jIHwgIiRESUZGX0hJR0hMSUdIVCIgPmFjdHVhbC5yYXcgJiYKKwlzZWQgLW4gIi9eLS0tLyxcJHAiIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaGlnaGxpZ2h0IGhhbmRsZXMgLS1ncmFwaCB3aXRoIGxlYWRpbmcgZGFzaCcgJworCWNhdCA+ZmlsZSA8PC1cRU9GICYmCisJYmVmb3JlCisJdGhlIG9sZCBsaW5lCisJLWxlYWRpbmcgZGFzaAorCUVPRgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYmVmb3JlICYmCisKKwlzZWQgcy9vbGQvbmV3LyA8ZmlsZSA+ZmlsZS50bXAgJiYKKwltdiBmaWxlLnRtcCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBhZnRlciAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSwzICsxLDMgQEAKKwkgYmVmb3JlCisJLXRoZSAke0NXfW9sZCR7Q1J9IGxpbmUKKwkrdGhlICR7Q1d9bmV3JHtDUn0gbGluZQorCSAtbGVhZGluZyBkYXNoCisJRU9GCisJZ2l0IGxvZyAtLWdyYXBoIC1wIC0xIHwgIiRESUZGX0hJR0hMSUdIVCIgPmFjdHVhbC5yYXcgJiYKKwl0cmltX2dyYXBoIDxhY3R1YWwucmF3IHwgc2VkIC1uICIvXi0tLS8sXCRwIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZW1hY3MvUkVBRE1FIGIvY29udHJpYi9lbWFjcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3YTE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZW1hY3MvUkVBRE1FCkBAIC0wLDAgKzEsMzMgQEAKK1RoaXMgZGlyZWN0b3J5IHVzZWQgdG8gY29udGFpbiB2YXJpb3VzIG1vZHVsZXMgZm9yIEVtYWNzIHN1cHBvcnQuCisKK1RoZXNlIHdlcmUgYWRkZWQgc2hvcnRseSBhZnRlciBHaXQgd2FzIGZpcnN0IHJlbGVhc2VkLiBTaW5jZSB0aGVuCitFbWFjcydzIG93biBzdXBwb3J0IGZvciBHaXQgZ290IGJldHRlciB0aGFuIHdoYXQgd2FzIG9mZmVyZWQgYnkgdGhlc2UKK21vZGVzLiBUaGVyZSBhcmUgYWxzbyBwb3B1bGFyIDNyZC1wYXJ0eSBHaXQgbW9kZXMgc3VjaCBhcyBNYWdpdCB3aGljaAorb2ZmZXIgcmVwbGFjZW1lbnRzIGZvciB0aGVzZS4KKworVGhlIGZvbGxvd2luZyBtb2R1bGVzIHdlcmUgYXZhaWxhYmxlLCBhbmQgY2FuIGJlIGR1ZyB1cCBmcm9tIHRoZSBHaXQKK2hpc3Rvcnk6CisKKyogZ2l0LmVsOgorCisgIFdyYXBwZXIgZm9yICJnaXQgc3RhdHVzIiB0aGF0IHByb3ZpZGVkIGFjY2VzcyB0byBvdGhlciBnaXQgY29tbWFuZHMuCisKKyAgTW9kZXJuIGFsdGVybmF0aXZlcyB0byB0aGlzIGluY2x1ZGUgTWFnaXQsIGFuZCBWQyBtb2RlIHRoYXQgc2hpcHMKKyAgd2l0aCBFbWFjcy4KKworKiBnaXQtYmxhbWUuZWw6CisKKyAgQSB3cmFwcGVyIGZvciAiZ2l0IGJsYW1lIiB3cml0dGVuIGJlZm9yZSBFbWFjcydzIG93biB2Yy1hbm5vdGF0ZQorICBtb2RlIGxlYXJuZWQgdG8gaW52b2tlIGdpdC1ibGFtZSwgd2hpY2ggY2FuIGJlIGRvbmUgdmlhIEMteCB2IGcuCisKKyogdmMtZ2l0LmVsOgorCisgIFRoaXMgZmlsZSB1c2VkIHRvIGNvbnRhaW4gdGhlIFZDLW1vZGUgYmFja2VuZCBmb3IgZ2l0LCBidXQgaXQgaXMgbm8KKyAgbG9uZ2VyIGRpc3RyaWJ1dGVkIHdpdGggZ2l0LiBJdCBpcyBub3cgbWFpbnRhaW5lZCBhcyBwYXJ0IG9mIEVtYWNzCisgIGFuZCBpbmNsdWRlZCBpbiBzdGFuZGFyZCBFbWFjcyBkaXN0cmlidXRpb25zIHN0YXJ0aW5nIGZyb20gdmVyc2lvbgorICAyMi4yLgorCisgIElmIHlvdSBoYXZlIGFuIGVhcmxpZXIgRW1hY3MgdmVyc2lvbiwgdXBncmFkaW5nIHRvIEVtYWNzIDIyIGlzCisgIHJlY29tbWVuZGVkLCBzaW5jZSB0aGUgVkMgbW9kZSBpbiBvbGRlciBFbWFjcyBpcyBub3QgZ2VuZXJpYyBlbm91Z2gKKyAgdG8gYmUgYWJsZSB0byBzdXBwb3J0IGdpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyLCBhbmQgbm8gYXR0ZW1wdCBoYXMKKyAgYmVlbiBtYWRlIHRvIGJhY2twb3J0IHZjLWdpdC5lbC4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZW1hY3MvZ2l0LWJsYW1lLmVsIGIvY29udHJpYi9lbWFjcy9naXQtYmxhbWUuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE4YTJiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZW1hY3MvZ2l0LWJsYW1lLmVsCkBAIC0wLDAgKzEsNiBAQAorKGVycm9yICJnaXQtYmxhbWUuZWwgbm8gbG9uZ2VyIHNoaXBzIHdpdGggZ2l0LiBJdCdzIHJlY29tbWVuZGVkCit0byByZXBsYWNlIGl0cyB1c2Ugd2l0aCBFbWFjcydzIG93biB2Yy1hbm5vdGF0ZS4gU2VlCitjb250cmliL2VtYWNzL1JFQURNRSBpbiBnaXQncworc291cmNlcyAoaHR0cHM6Ly9naXRodWIuY29tL2dpdC9naXQvYmxvYi9tYXN0ZXIvY29udHJpYi9lbWFjcy9SRUFETUUpCitmb3IgbW9yZSBpbmZvIG9uIHN1Z2dlc3RlZCBhbHRlcm5hdGl2ZXMgYW5kIGZvciB3aHkgdGhpcworaGFwcGVuZWQuIikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZW1hY3MvZ2l0LmVsIGIvY29udHJpYi9lbWFjcy9naXQuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmOTI2MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCkBAIC0wLDAgKzEsNiBAQAorKGVycm9yICJnaXQuZWwgbm8gbG9uZ2VyIHNoaXBzIHdpdGggZ2l0LiBJdCdzIHJlY29tbWVuZGVkIHRvCityZXBsYWNlIGl0cyB1c2Ugd2l0aCBNYWdpdCwgb3Igc2ltcGx5IGRlbGV0ZSByZWZlcmVuY2VzIHRvIGdpdC5lbAoraW4geW91ciBpbml0aWFsaXphdGlvbiBmaWxlKHMpLiBTZWUgY29udHJpYi9lbWFjcy9SRUFETUUgaW4gZ2l0J3MKK3NvdXJjZXMgKGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0L2Jsb2IvbWFzdGVyL2NvbnRyaWIvZW1hY3MvUkVBRE1FKQorZm9yIHN1Z2dlc3RlZCBhbHRlcm5hdGl2ZXMgYW5kIGZvciB3aHkgdGhpcyBoYXBwZW5lZC4gRW1hY3MncyBvd24KK1ZDIG1vZGUgYW5kIE1hZ2l0IGFyZSB2aWFibGUgYWx0ZXJuYXRpdmVzLiIpCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL1JFQURNRSBiL2NvbnRyaWIvZXhhbXBsZXMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YmM2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL1JFQURNRQpAQCAtMCwwICsxLDIwIEBACitUaGlzIGRpcmVjdG9yeSB1c2VkIHRvIGNvbnRhaW4gc2NyaXB0ZWQgaW1wbGVtZW50YXRpb25zIG9mIGJ1aWx0aW5zCit0aGF0IGhhdmUgc2luY2UgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworVGhleSBoYXZlIG5vdyBiZWVuIHJlbW92ZWQsIGJ1dCBjYW4gYmUgcmV0cmlldmVkIGZyb20gYW4gb2xkZXIgY29tbWl0Cit0aGF0IHJlbW92ZWQgdGhlbSBmcm9tIHRoaXMgZGlyZWN0b3J5LgorCitUaGV5J3JlIGludGVyZXN0aW5nIGZvciB0aGVpciByZWZlcmVuY2UgdmFsdWUgdG8gYW55IGFzcGlyaW5nIHBsdW1iaW5nCit1c2VycyB3aG8gd2FudCB0byBsZWFybiBob3cgcGllY2VzIGNhbiBiZSBmaXQgdG9nZXRoZXIsIGJ1dCBpbiBtYW55CitjYXNlcyBoYXZlIGRyaWZ0ZWQgZW5vdWdoIGZyb20gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbnMgR2l0IHVzZXMgdG8KK2JlIGluc3RydWN0aXZlLgorCitPdGhlciB0aGluZ3MgdGhhdCBjYW4gYmUgdXNlZnVsOgorCisgKiBTb21lIGNvbW1hbmRzIHN1Y2ggYXMgZ2l0LWdjIHdyYXAgb3RoZXIgY29tbWFuZHMsIGFuZCB3aGF0IHRoZXkncmUKKyAgIGRvaW5nIGJlaGluZCB0aGUgc2NlbmVzIGNhbiBiZSBzZWVuIGJ5IHJ1bm5pbmcgdGhlbSB1bmRlcgorICAgR0lUX1RSQUNFPTEKKworICogRG9pbmcgYGdpdCBsb2dgIG9uIHBhdGhzIG1hdGNoaW5nICcqLS1oZWxwZXIuYycgd2lsbCBzaG93CisgICBpbmNyZW1lbnRhbCBlZmZvcnQgaW4gdGhlIGRpcmVjdGlvbiBvZiBtb3ZpbmcgZXhpc3Rpbmcgc2hlbGwKKyAgIHNjcmlwdHMgdG8gQy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LWltcG9ydC5wZXJsIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDg5MWI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LWltcG9ydC5wZXJsCkBAIC0wLDAgKzEsNjQgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBQZXJmb3JtcyBhbiBpbml0aWFsIGltcG9ydCBvZiBhIGRpcmVjdG9yeS4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudAorIyBvZiBkb2luZyAnZ2l0IGluaXQ7IGdpdCBhZGQgLjsgZ2l0IGNvbW1pdCcuIEl0J3MgYSBsaXR0bGUgc2xvd2VyLAorIyBidXQgaXMgbWVhbnQgdG8gYmUgYSBzaW1wbGUgZmFzdC1pbXBvcnQgZXhhbXBsZS4KKwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpGaW5kOworCitteSAkVVNBR0UgPSAndXNhZ2U6IGdpdC1pbXBvcnQgYnJhbmNoIGltcG9ydC1tZXNzYWdlJzsKK215ICRicmFuY2ggPSBzaGlmdCBvciBkaWUgIiRVU0FHRVxuIjsKK215ICRtZXNzYWdlID0gc2hpZnQgb3IgZGllICIkVVNBR0VcbiI7CisKK2Nob21wKG15ICR1c2VybmFtZSA9IGBnaXQgY29uZmlnIHVzZXIubmFtZWApOworY2hvbXAobXkgJGVtYWlsID0gYGdpdCBjb25maWcgdXNlci5lbWFpbGApOworZGllICdZb3UgbmVlZCB0byBzZXQgdXNlciBuYW1lIGFuZCBlbWFpbCcKKyAgdW5sZXNzICR1c2VybmFtZSAmJiAkZW1haWw7CisKK3N5c3RlbSgnZ2l0IGluaXQnKTsKK29wZW4obXkgJGZpLCAnfC0nLCBxdyhnaXQgZmFzdC1pbXBvcnQgLS1kYXRlLWZvcm1hdD1ub3cpKQorICBvciBkaWUgInVuYWJsZSB0byBzcGF3biBmYXN0LWltcG9ydDogJCEiOworCitwcmludCAkZmkgPDxFT0Y7Citjb21taXQgcmVmcy9oZWFkcy8kYnJhbmNoCitjb21taXR0ZXIgJHVzZXJuYW1lIDwkZW1haWw+IG5vdworZGF0YSA8PE1TR0VPRgorJG1lc3NhZ2UKK01TR0VPRgorCitFT0YKKworZmluZCgKKyAgc3ViIHsKKyAgICBpZigkRmlsZTo6RmluZDo6bmFtZSBlcSAnLi8uZ2l0JykgeworICAgICAgJEZpbGU6OkZpbmQ6OnBydW5lID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmV0dXJuIHVubGVzcyAtZiAkXzsKKworICAgIG15ICRmbiA9ICRGaWxlOjpGaW5kOjpuYW1lOworICAgICRmbiA9fiBzI14uXC8jIzsKKworICAgIG9wZW4obXkgJGluLCAnPCcsICRfKQorICAgICAgb3IgZGllICJ1bmFibGUgdG8gb3BlbiAkZm46ICQhIjsKKyAgICBteSBAc3QgPSBzdGF0KCRpbikKKyAgICAgIG9yIGRpZSAidW5hYmxlIHRvIHN0YXQgJGZuOiAkISI7CisgICAgbXkgJGxlbiA9ICRzdFs3XTsKKworICAgIHByaW50ICRmaSAiTSA2NDQgaW5saW5lICRmblxuIjsKKyAgICBwcmludCAkZmkgImRhdGEgJGxlblxuIjsKKyAgICB3aGlsZSgkbGVuID4gMCkgeworICAgICAgbXkgJHIgPSByZWFkKCRpbiwgbXkgJGJ1ZiwgJGxlbiA8IDQwOTYgPyAkbGVuIDogNDA5Nik7CisgICAgICBkZWZpbmVkKCRyKSBvciBkaWUgInJlYWQgZXJyb3IgZnJvbSAkZm46ICQhIjsKKyAgICAgICRyID4gMCBvciBkaWUgInByZW1hdHVyZSBFT0YgZnJvbSAkZm46ICQhIjsKKyAgICAgIHByaW50ICRmaSAkYnVmOworICAgICAgJGxlbiAtPSAkcjsKKyAgICB9CisgICAgcHJpbnQgJGZpICJcbiI7CisKKyAgfSwgJy4nCispOworCitjbG9zZSgkZmkpOworZXhpdCAkPzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LWltcG9ydC5zaCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LWltcG9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOGQ4MDNjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorIworIyBQZXJmb3JtcyBhbiBpbml0aWFsIGltcG9ydCBvZiBhIGRpcmVjdG9yeS4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudAorIyBvZiBkb2luZyAnZ2l0IGluaXQ7IGdpdCBhZGQgLjsgZ2l0IGNvbW1pdCcuIEl0J3MgYSBsb3Qgc2xvd2VyLAorIyBidXQgaXMgbWVhbnQgdG8gYmUgYSBzaW1wbGUgZmFzdC1pbXBvcnQgZXhhbXBsZS4KKworaWYgWyAteiAiJDEiIC1vIC16ICIkMiIgXTsgdGhlbgorCWVjaG8gInVzYWdlOiBnaXQtaW1wb3J0IGJyYW5jaCBpbXBvcnQtbWVzc2FnZSIKKwlleGl0IDEKK2ZpCisKK1VTRVJOQU1FPSIkKGdpdCBjb25maWcgdXNlci5uYW1lKSIKK0VNQUlMPSIkKGdpdCBjb25maWcgdXNlci5lbWFpbCkiCisKK2lmIFsgLXogIiRVU0VSTkFNRSIgLW8gLXogIiRFTUFJTCIgXTsgdGhlbgorCWVjaG8gIllvdSBuZWVkIHRvIHNldCB1c2VyIG5hbWUgYW5kIGVtYWlsIgorCWV4aXQgMQorZmkKKworZ2l0IGluaXQKKworKAorCWNhdCA8PEVPRgorY29tbWl0IHJlZnMvaGVhZHMvJDEKK2NvbW1pdHRlciAkVVNFUk5BTUUgPCRFTUFJTD4gbm93CitkYXRhIDw8TVNHRU9GCiskMgorTVNHRU9GCisKK0VPRgorCWZpbmQgKiAtdHlwZSBmfHdoaWxlIHJlYWQgaTtkbworCQllY2hvICJNIDEwMDY0NCBpbmxpbmUgJGkiCisJCWVjaG8gZGF0YSAkKHN0YXQgLWMgJyVzJyAiJGkiKQorCQljYXQgIiRpIgorCQllY2hvCisJZG9uZQorCWVjaG8KKykgfCBnaXQgZmFzdC1pbXBvcnQgLS1kYXRlLWZvcm1hdD1ub3cKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0LlJFQURNRSBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvZ2l0LXA0LlJFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWM1ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQuUkVBRE1FCkBAIC0wLDAgKzEsMTIgQEAKK1RoZSBnaXQtcDQgc2NyaXB0IG1vdmVkIHRvIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIGdpdCBzb3VyY2UgZGlyZWN0b3J5LgorCitJbnZva2UgaXQgYXMgYW55IG90aGVyIGdpdCBjb21tYW5kLCBsaWtlICJnaXQgcDQgY2xvbmUiLCBmb3IgaW5zdGFuY2UuCisKK05vdGUgdGhhdCB0aGUgdG9wLWxldmVsIGdpdC1wNC5weSBzY3JpcHQgaXMgbm93IHRoZSBzb3VyY2UuICBJdCBpcworYnVpbHQgdXNpbmcgbWFrZSB0byBnaXQtcDQsIHdoaWNoIHdpbGwgYmUgaW5zdGFsbGVkLgorCitXaW5kb3dzIHVzZXJzIGNhbiBjb3B5IHRoZSBnaXQtcDQucHkgc291cmNlIHNjcmlwdCBkaXJlY3RseSwgcG9zc2libHkKK2ludm9raW5nIGl0IHRocm91Z2ggYSBiYXRjaCBmaWxlIGNhbGxlZCAiZ2l0LXA0LmJhdCIgaW4gdGhlIHNhbWUgZm9sZGVyLgorSXQgc2hvdWxkIGNvbnRhaW4ganVzdCBvbmUgbGluZToKKworICAgIEBweXRob24gIiV+ZDAlfnAwZ2l0LXA0LnB5IiAlKgpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtZGlyZWN0b3JpZXMucGVybCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LWRpcmVjdG9yaWVzLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTE2Zjc5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LWRpcmVjdG9yaWVzLnBlcmwKQEAgLTAsMCArMSw0MTYgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgMjAwOC0yMDA5IFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz1wb2QKKworPWhlYWQxIE5BTUUKKworaW1wb3J0LWRpcmVjdG9yaWVzIC0gSW1wb3J0IGJpdHMgYW5kIHBpZWNlcyB0byBHaXQuCisKKz1oZWFkMSBTWU5PUFNJUworCitCPGltcG9ydC1kaXJlY3Rvcmllcy5wZXJsPiBGPGNvbmZpZ2ZpbGU+IEY8b3V0cHV0ZmlsZT4KKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1NjcmlwdCB0byBpbXBvcnQgYXJiaXRyYXJ5IHByb2plY3RzIHZlcnNpb24gY29udHJvbGxlZCBieSB0aGUgImNvcHkgdGhlCitzb3VyY2UgZGlyZWN0b3J5IHRvIGEgbmV3IGxvY2F0aW9uIGFuZCBlZGl0IGl0IHRoZXJlIi12ZXJzaW9uIGNvbnRyb2xsZWQKK3Byb2plY3RzIGludG8gdmVyc2lvbiBjb250cm9sLiBIYW5kbGVzIHByb2plY3RzIHdpdGggYXJiaXRyYXJ5IGJyYW5jaGluZworYW5kIHZlcnNpb24gdHJlZXMsIHRha2luZyBhIGZpbGUgZGVzY3JpYmluZyB0aGUgaW5wdXRzIGFuZCBnZW5lcmF0aW5nIGEKK2ZpbGUgY29tcGF0aWJsZSB3aXRoIHRoZSBMPGdpdC1mYXN0LWltcG9ydCgxKT4gZm9ybWF0LgorCis9aGVhZDEgQ09ORklHVVJBVElPTiBGSUxFCisKKz1oZWFkMiBGb3JtYXQKKworVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBiYXNlZCBvbiB0aGUgc3RhbmRhcmQgSTwuaW5pPiBmb3JtYXQuCisKKyA7IENvbW1lbnRzIHN0YXJ0IHdpdGggc2VtaS1jb2xvbnMKKyBbc2VjdGlvbl0KKyBrZXk9dmFsdWUKKworUGxlYXNlIHNlZSBiZWxvdyBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMuCisKKz1oZWFkMiBHbG9iYWwgY29uZmlndXJhdGlvbgorCitHbG9iYWwgY29uZmlndXJhdGlvbiBpcyBkb25lIGluIHRoZSBCPFtjb25maWddPiBzZWN0aW9uLCB3aGljaCBzaG91bGQgYmUKK3RoZSBmaXJzdCBzZWN0aW9uIGluIHRoZSBmaWxlLiBDb25maWd1cmF0aW9uIGNhbiBiZSBjaGFuZ2VkIGJ5CityZXBlYXRpbmcgY29uZmlndXJhdGlvbiBzZWN0aW9ucyBsYXRlciBvbi4KKworIFtjb25maWddCisgOyBjb25maWd1cmUgY29udmVyc2lvbiBvZiBDUkxGcy4gImNvbnZlcnQiIG1lYW5zIHRoYXQgYWxsIENSTEZzCisgOyBzaG91bGQgYmUgY29udmVydGVkIGludG8gTEZzIChzdWl0YWJsZSBmb3IgdGhlIGNvcmUuYXV0b2NybGYKKyA7IHNldHRpbmcgc2V0IHRvIHRydWUgaW4gR2l0KS4gIm5vbmUiIG1lYW5zIHRoYXQgYWxsIGRhdGEgaXMKKyA7IHRyZWF0ZWQgYXMgYmluYXJ5LgorIGNybGY9Y29udmVydAorCis9aGVhZDIgUmV2aXNpb24gY29uZmlndXJhdGlvbgorCitFYWNoIHJldmlzaW9uIHRoYXQgaXMgdG8gYmUgaW1wb3J0ZWQgaXMgZGVzY3JpYmVkIGluIHRocmVlCitzZWN0aW9ucy4gUmV2aXNpb25zIHNob3VsZCBiZSBkZWZpbmVkIGluIHRvcG9sb2dpY2FsIG9yZGVyLCBzbwordGhhdCBhIHJldmlzaW9uJ3MgcGFyZW50IGhhcyBhbHdheXMgYmVlbiBkZWZpbmVkIHdoZW4gYSBuZXcgcmV2aXNpb24KK2lzIGludHJvZHVjZWQuIEFsbCB0aGUgc2VjdGlvbnMgZm9yIG9uZSByZXZpc2lvbiBtdXN0IGJlIGRlZmluZWQKK2JlZm9yZSBkZWZpbmluZyB0aGUgbmV4dCByZXZpc2lvbi4KKworRWFjaCByZXZpc2lvbiBpcyBhc3NpZ25lZCBhIHVuaXF1ZSBudW1lcmljYWwgaWRlbnRpZmllci4gVGhlCitudW1iZXJzIGRvIG5vdCBuZWVkIHRvIGJlIGNvbnNlY3V0aXZlLCBub3IgbW9ub3RvbmljYWxseQoraW5jcmVhc2luZy4KKworRm9yIGluc3RhbmNlLCBpZiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250YWlucyBvbmx5IHRoZSB0d28KK3JldmlzaW9ucyA0NzExIGFuZCA0Miwgd2hlcmUgNDcxMSBpcyB0aGUgaW5pdGlhbCBjb21taXQsIHRoZQorb25seSByZXF1aXJlbWVudCBpcyB0aGF0IDQ3MTEgaXMgY29tcGxldGVseSBkZWZpbmVkIGJlZm9yZSA0Mi4KKworPXBvZAorCis9aGVhZDMgUmV2aXNpb24gZGVzY3JpcHRpb24gc2VjdGlvbgorCitBIHNlY3Rpb24gd2hvc2Ugc2VjdGlvbiBuYW1lIGlzIGp1c3QgYW4gaW50ZWdlciBnaXZlcyBtZXRhLWRhdGEKK2Fib3V0IHRoZSByZXZpc2lvbi4KKworIFszXQorIDsgYXV0aG9yIHNldHMgdGhlIGF1dGhvciBvZiB0aGUgcmV2aXNpb25zCisgYXV0aG9yPVBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorIDsgYnJhbmNoIHNldHMgdGhlIGJyYW5jaCB0aGF0IHRoZSByZXZpc2lvbiBzaG91bGQgYmUgY29tbWl0dGVkIHRvCisgYnJhbmNoPW1hc3RlcgorIDsgcGFyZW50IGRlc2NyaWJlcyB0aGUgcmV2aXNpb24gdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMgY29tbWl0CisgOyAob3B0aW9uYWwpCisgcGFyZW50PTEKKyA7IG1lcmdlcyBkZXNjcmliZXMgYSByZXZpc2lvbiB0aGF0IGlzIG1lcmdlZCBpbnRvIHRoaXMgY29tbWl0CisgOyAob3B0aW9uYWw7IGNhbiBiZSByZXBlYXRlZCkKKyBtZXJnZXM9MgorIDsgc2VsZWN0cyBvbmUgZmlsZSB0byB0YWtlIHRoZSB0aW1lc3RhbXAgZnJvbQorIDsgKG9wdGlvbmFsOyBpZiB1bnNwZWNpZmllZCwgdGhlIG1vc3QgcmVjZW50IGZpbGUgZnJvbSB0aGUgLmZpbGVzCisgOyAgc2VjdGlvbiBpcyB1c2VkKQorIHRpbWVzdGFtcD0zL3NvdXJjZS5jCisKKz1oZWFkMyBSZXZpc2lvbiBjb250ZW50cyBzZWN0aW9uCisKK0Egc2VjdGlvbiB3aG9zZSBzZWN0aW9uIG5hbWUgaXMgYW4gaW50ZWdlciBmb2xsb3dlZCBieSBCPC5maWxlcz4KK2Rlc2NyaWJlIGFsbCB0aGUgZmlsZXMgaW5jbHVkZWQgaW4gdGhpcyByZXZpc2lvbi4gSWYgYSBmaWxlIHRoYXQKK3dhcyBhdmFpbGFibGUgcHJldmlvdXNseSBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyByZXZpc2lvbiwgaXQgd2lsbAorYmUgcmVtb3ZlZC4KKworSWYgYW4gb24tZGlzayByZXZpc2lvbiBpcyBpbmNvbXBsZXRlLCB5b3UgY2FuIHBvaW50IHRvIGZpbGVzIGZyb20KK2EgcHJldmlvdXMgcmV2aXNpb24uIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gd2hlcmUgdGhlIHNvdXJjZQorZmlsZXMgYXJlIGxvY2F0ZWQsIG5vciBvbiB0aGVpciBuYW1lcy4KKworIFszLmZpbGVzXQorIDsgdGhlIGtleSBpcyB0aGUgcGF0aCBpbnNpZGUgdGhlIHJlcG9zaXRvcnksIHRoZSB2YWx1ZSBpcyB0aGUgcGF0aAorIDsgYXMgc2VlbiBmcm9tIHRoZSBpbXBvcnRlciBzY3JpcHQuCisgc291cmNlLmM9dmVyLTMuMDAvc291cmNlLmMKKyBzb3VyY2UuaD12ZXItMi45OS9zb3VyY2UuaAorIHJlYWRtZS50eHQ9dmVyLTMuMDAvaW50cm9kdWN0aW9uIHRvIHRoZSBwcm9qZWN0LnR4dAorCitGaWxlIG5hbWVzIGFyZSB0cmVhdGVkIGFzIGJ5dGUgc3RyaW5ncyAoYnV0IHBsZWFzZSBzZWUgYmVsb3cgb24KK3F1b3RpbmcgcnVsZXMpLCBhbmQgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluCit0aGUgZW5jb2RpbmcgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIHJlcG9zaXRvcnkuCisKKz1oZWFkMyBSZXZpc2lvbiBjb21taXQgbWVzc2FnZSBzZWN0aW9uCisKK0Egc2VjdGlvbiB3aG9zZSBzZWN0aW9uIG5hbWUgaXMgYW4gaW50ZWdlciBmb2xsb3dlZCBieSBCPC5tZXNzYWdlPgorZ2l2ZXMgdGhlIGNvbW1pdCBtZXNzYWdlLiBUaGlzIHNlY3Rpb24gaXMgcmVhZCB2ZXJiYXRpbSwgdXAgdW50aWwKK3RoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgc2VjdGlvbi4gQXMgc3VjaCwgYSBjb21taXQgbWVzc2FnZSBtYXkgbm90Citjb250YWluIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIGFuIG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQgKCJbIikgYW5kCitlbmRzIHdpdGggYSBjbG9zaW5nIHNxdWFyZSBicmFja2V0ICgiXSIpLCB1bmxlc3MgdGhleSBhcmUgc3Vycm91bmRlZAorYnkgd2hpdGVzcGFjZSBvciBvdGhlciBjaGFyYWN0ZXJzLgorCisgWzMubWVzc2FnZV0KKyBJbXBsZW1lbnQgZm9vYmFyLgorIDsgdHJhaWxpbmcgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuCisKKz1jdXQKKworIyBHbG9iYWxzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIGludGVnZXI7CitteSAkY3JsZm1vZGUgPSAwOworbXkgQHJldnM7CitteSAoJXJldm1hcCwgJW1lc3NhZ2UsICVmaWxlcywgJWF1dGhvciwgJWJyYW5jaCwgJXBhcmVudCwgJW1lcmdlcywgJXRpbWUsICV0aW1lc291cmNlKTsKK215ICRzZWN0aW9udHlwZSA9IDA7CitteSAkcmV2ID0gMDsKK215ICRtYXJrID0gMTsKKworIyBDaGVjayBjb21tYW5kIGxpbmUKK2lmICgkI0FSR1YgPCAxIHx8ICRBUkdWWzBdID1+IC9eLS0/aC8pCit7CisgICAgZXhlYygncGVybGRvYycsICQwKTsKKyAgICBleGl0IDE7Cit9CisKKyMgT3BlbiBjb25maWd1cmF0aW9uCitteSAkY29uZmlnID0gJEFSR1ZbMF07CitvcGVuIENGRywgJzwnLCAkY29uZmlnIG9yIGRpZSAiQ2Fubm90IG9wZW4gY29uZmlndXJhdGlvbiBmaWxlIFwiJGNvbmZpZ1wiOiAiOworCisjIE9wZW4gb3V0cHV0CitteSAkb3V0cHV0ID0gJEFSR1ZbMV07CitvcGVuIE9VVCwgJz4nLCAkb3V0cHV0IG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvdXRwdXQgZmlsZSBcIiRvdXRwdXRcIjogIjsKK2Jpbm1vZGUgT1VUOworCitMSU5FOiB3aGlsZSAobXkgJGxpbmUgPSA8Q0ZHPikKK3sKKwkkbGluZSA9fiBzL1xyP1xuJC8vOworCW5leHQgTElORSBpZiAkc2VjdGlvbnR5cGUgIT0gNCAmJiAkbGluZSBlcSAnJzsKKwluZXh0IExJTkUgaWYgJGxpbmUgPX4gL147LzsKKwlteSAkb2xkc2VjdGlvbnR5cGUgPSAkc2VjdGlvbnR5cGU7CisJbXkgJG9sZHJldiA9ICRyZXY7CisKKwkjIFNlY3Rpb25zCisJaWYgKCRsaW5lID1+IG0iXlxbKGNvbmZpZ3woXGQrKSh8XC5maWxlc3xcLm1lc3NhZ2UpKVxdJCIpCisJeworCQlpZiAoJDEgZXEgJ2NvbmZpZycpCisJCXsKKwkJCSRzZWN0aW9udHlwZSA9IDE7CisJCX0KKwkJZWxzaWYgKCQzIGVxICcnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSAyOworCQkJJHJldiA9ICQyOworCQkJIyBDcmVhdGUgYSBuZXcgcmV2aXNpb24KKwkJCWRpZSAiRHVwbGljYXRlIHJldjogJGxpbmVcbiAiIGlmIGRlZmluZWQgJHJldm1hcHskcmV2fTsKKwkJCXByaW50ICJSZWFkaW5nIHJldmlzaW9uICRyZXZcbiI7CisJCQlwdXNoIEByZXZzLCAkcmV2OworCQkJJHJldm1hcHskcmV2fSA9ICRtYXJrICsrOworCQkJJHRpbWV7JHJldm1hcHskcmV2fX0gPSAwOworCQl9CisJCWVsc2lmICgkMyBlcSAnLmZpbGVzJykKKwkJeworCQkJJHNlY3Rpb250eXBlID0gMzsKKwkJCSRyZXYgPSAkMjsKKwkJCWRpZSAiUmV2aXNpb24gbWlzbWF0Y2g6ICRsaW5lXG4gIiB1bmxlc3MgJHJldiA9PSAkb2xkcmV2OworCQl9CisJCWVsc2lmICgkMyBlcSAnLm1lc3NhZ2UnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSA0OworCQkJJHJldiA9ICQyOworCQkJZGllICJSZXZpc2lvbiBtaXNtYXRjaDogJGxpbmVcbiAiIHVubGVzcyAkcmV2ID09ICRvbGRyZXY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlkaWUgIkludGVybmFsIHBhcnNlIGVycm9yOiAkbGluZVxuICI7CisJCX0KKwkJbmV4dCBMSU5FOworCX0KKworCSMgUGFyc2UgZGF0YQorCWlmICgkc2VjdGlvbnR5cGUgIT0gNCkKKwl7CisJCSMgS2V5IGFuZCB2YWx1ZQorCQlpZiAoJGxpbmUgPX4gbSJeXHMqKFteXHNdLio9LipbXlxzXSlccyokIikKKwkJeworCQkJbXkgKCRrZXksICR2YWx1ZSkgPSAmcGFyc2VrZXl2YWx1ZXBhaXIoJDEpOworCQkJIyBHbG9iYWwgY29uZmlndXJhdGlvbgorCQkJaWYgKDEgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCWlmICgka2V5IGVxICdjcmxmJykKKwkJCQl7CisJCQkJCSRjcmxmbW9kZSA9IDEsIG5leHQgTElORSBpZiAkdmFsdWUgZXEgJ2NvbnZlcnQnOworCQkJCQkkY3JsZm1vZGUgPSAwLCBuZXh0IExJTkUgaWYgJHZhbHVlIGVxICdub25lJzsKKwkJCQl9CisJCQkJZGllICJVbmtub3duIGNvbmZpZ3VyYXRpb24gb3B0aW9uOiAkbGluZVxuICI7CisJCQl9CisJCQkjIFJldmlzaW9uIHNwZWNpZmljYXRpb24KKwkJCWlmICgyID09ICRzZWN0aW9udHlwZSkKKwkJCXsKKwkJCQlteSAkY3VycmVudCA9ICRyZXZtYXB7JHJldn07CisJCQkJJGF1dGhvcnskY3VycmVudH0gPSAkdmFsdWUsIG5leHQgTElORSBpZiAka2V5IGVxICdhdXRob3InOworCQkJCSRicmFuY2h7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAnYnJhbmNoJzsKKwkJCQkkcGFyZW50eyRjdXJyZW50fSA9ICR2YWx1ZSwgbmV4dCBMSU5FIGlmICRrZXkgZXEgJ3BhcmVudCc7CisJCQkJJHRpbWVzb3VyY2V7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAndGltZXN0YW1wJzsKKwkJCQlwdXNoKEB7JG1lcmdlc3skY3VycmVudH19LCAkdmFsdWUpLCBuZXh0IExJTkUgaWYgJGtleSBlcSAnbWVyZ2VzJzsKKwkJCQlkaWUgIlVua25vd24gcmV2aXNpb24gb3B0aW9uOiAkbGluZVxuICI7CisJCQl9CisJCQkjIEZpbGVzcGVjcworCQkJaWYgKDMgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCSMgQWRkIHRoZSBmaWxlIGFuZCBjcmVhdGUgYSBtYXJrZXIKKwkJCQlkaWUgIkZpbGUgbm90IGZvdW5kOiAkbGluZVxuICIgdW5sZXNzIC1mICR2YWx1ZTsKKwkJCQlteSAkY3VycmVudCA9ICRyZXZtYXB7JHJldn07CisJCQkJJHskZmlsZXN7JGN1cnJlbnR9fXska2V5fSA9ICRtYXJrOworCQkJCW15ICR0aW1lID0gJmZpbGVibG9iKCR2YWx1ZSwgJGNybGZtb2RlLCAkbWFyayArKyk7CisKKwkJCQkjIFVwZGF0ZSByZXZpc2lvbiB0aW1lc3RhbXAgaWYgbW9yZSByZWNlbnQgdGhhbiBvdGhlcgorCQkJCSMgZmlsZXMgc2Vlbiwgb3IgaWYgdGhpcyBpcyB0aGUgZmlsZSB3ZSBoYXZlIHNlbGVjdGVkCisJCQkJIyB0byB0YWtlIHRoZSB0aW1lIHN0YW1wIGZyb20gdXNpbmcgdGhlICJ0aW1lc3RhbXAiCisJCQkJIyBkaXJlY3RpdmUuCisJCQkJaWYgKChkZWZpbmVkICR0aW1lc291cmNleyRjdXJyZW50fSAmJiAkdGltZXNvdXJjZXskY3VycmVudH0gZXEgJHZhbHVlKQorCQkJCSAgICB8fCAkdGltZSA+ICR0aW1leyRjdXJyZW50fSkKKwkJCQl7CisJCQkJCSR0aW1leyRjdXJyZW50fSA9ICR0aW1lOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWRpZSAiUGFyc2UgZXJyb3I6ICRsaW5lXG4gIjsKKwkJfQorCX0KKwllbHNlCisJeworCQkjIENvbW1pdCBtZXNzYWdlCisJCW15ICRjdXJyZW50ID0gJHJldm1hcHskcmV2fTsKKwkJaWYgKGRlZmluZWQgJG1lc3NhZ2V7JGN1cnJlbnR9KQorCQl7CisJCQkkbWVzc2FnZXskY3VycmVudH0gLj0gIlxuIjsKKwkJfQorCQkkbWVzc2FnZXskY3VycmVudH0gLj0gJGxpbmU7CisJfQorfQorY2xvc2UgQ0ZHOworCisjIFN0YXJ0IHNwZXdpbmcgb3V0IGRhdGEgZm9yIGdpdC1mYXN0LWltcG9ydAorZm9yZWFjaCBteSAkY29tbWl0IChAcmV2cykKK3sKKwkjIFByb2dyZXNzCisJcHJpbnQgT1VUICJwcm9ncmVzcyBDcmVhdGluZyByZXZpc2lvbiAkY29tbWl0XG4iOworCisJIyBDcmVhdGUgY29tbWl0IGhlYWRlcgorCW15ICRtYXJrID0gJHJldm1hcHskY29tbWl0fTsKKworCSMgQnJhbmNoIGFuZCBjb21taXQgaWQKKwlwcmludCBPVVQgImNvbW1pdCByZWZzL2hlYWRzLyIsICRicmFuY2h7JG1hcmt9LCAiXG5tYXJrIDoiLCAkbWFyaywgIlxuIjsKKworCSMgQXV0aG9yIGFuZCB0aW1lc3RhbXAKKwlkaWUgIk5vIHRpbWVzdGFtcCBkZWZpbmVkIGZvciAkY29tbWl0IChubyBmaWxlcz8pXG4iIHVubGVzcyBkZWZpbmVkICR0aW1leyRtYXJrfTsKKwlwcmludCBPVVQgImNvbW1pdHRlciAiLCAkYXV0aG9yeyRtYXJrfSwgIiAiLCAkdGltZXskbWFya30sICIgKzAxMDBcbiI7CisKKwkjIENvbW1pdCBtZXNzYWdlCisJZGllICJObyBtZXNzYWdlIGRlZmluZWQgZm9yICRjb21taXRcbiIgdW5sZXNzIGRlZmluZWQgJG1lc3NhZ2V7JG1hcmt9OworCW15ICRtZXNzYWdlID0gJG1lc3NhZ2V7JG1hcmt9OworCSRtZXNzYWdlID1+IHMvXG4kLy87ICMgS2lsbCB0cmFpbGluZyBlbXB0eSBsaW5lCisJcHJpbnQgT1VUICJkYXRhICIsIGxlbmd0aCgkbWVzc2FnZSksICJcbiIsICRtZXNzYWdlLCAiXG4iOworCisJIyBQYXJlbnQgYW5kIGFueSBtZXJnZXMKKwlwcmludCBPVVQgImZyb20gOiIsICRyZXZtYXB7JHBhcmVudHskbWFya319LCAiXG4iIGlmIGRlZmluZWQgJHBhcmVudHskbWFya307CisJaWYgKGRlZmluZWQgJG1lcmdlc3skbWFya30pCisJeworCQlmb3JlYWNoIG15ICRtZXJnZSAoQHskbWVyZ2VzeyRtYXJrfX0pCisJCXsKKwkJCXByaW50IE9VVCAibWVyZ2UgOiIsICRyZXZtYXB7JG1lcmdlfSwgIlxuIjsKKwkJfQorCX0KKworCSMgT3V0cHV0IGZpbGUgbWFya3MKKwlwcmludCBPVVQgImRlbGV0ZWFsbFxuIjsgIyBzdGFydCBmcm9tIHNjcmF0Y2gKKwlmb3JlYWNoIG15ICRmaWxlIChzb3J0IGtleXMgJXskZmlsZXN7JG1hcmt9fSkKKwl7CisJCXByaW50IE9VVCAiTSA2NDQgOiIsICR7JGZpbGVzeyRtYXJrfX17JGZpbGV9LCAiICRmaWxlXG4iOworCX0KKwlwcmludCBPVVQgIlxuIjsKK30KKworIyBDcmVhdGUgb25lIGZpbGUgYmxvYgorc3ViIGZpbGVibG9iCit7CisJbXkgKCRmaWxlbmFtZSwgJGNybGZtb2RlLCAkbWFyaykgPSBAXzsKKworCSMgSW1wb3J0IHRoZSBmaWxlCisJcHJpbnQgT1VUICJwcm9ncmVzcyBJbXBvcnRpbmcgJGZpbGVuYW1lXG5ibG9iXG5tYXJrIDokbWFya1xuIjsKKwlvcGVuIEZJTEUsICc8JywgJGZpbGVuYW1lIG9yIGRpZSAiQ2Fubm90IHJlYWQgJGZpbGVuYW1lXG4gIjsKKwliaW5tb2RlIEZJTEU7CisJbXkgKCRzaXplLCAkbXRpbWUpID0gKHN0YXQoRklMRSkpWzcsOV07CisJbXkgJGZpbGU7CisJcmVhZCBGSUxFLCAkZmlsZSwgJHNpemU7CisJY2xvc2UgRklMRTsKKwkkZmlsZSA9fiBzL1xyXG4vXG4vZyBpZiAkY3JsZm1vZGU7CisJcHJpbnQgT1VUICJkYXRhICIsIGxlbmd0aCgkZmlsZSksICJcbiIsICRmaWxlLCAiXG4iOworCisJcmV0dXJuICRtdGltZTsKK30KKworIyBQYXJzZSBhIGtleT12YWx1ZSBwYWlyCitzdWIgcGFyc2VrZXl2YWx1ZXBhaXIKK3sKKz1wb2QKKworPWhlYWQyIEVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycworCitLZXkgYW5kIHZhbHVlIHN0cmluZ3MgbWF5IGJlIGVuY2xvc2VkIGluIHF1b3RlcywgaW4gd2hpY2ggY2FzZQord2hpdGVzcGFjZSBpbnNpZGUgdGhlIHF1b3RlcyBpcyBwcmVzZXJ2ZWQuIEFkZGl0aW9uYWxseSwgYW4gZXF1YWwKK3NpZ24gbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBrZXkgYnkgcHJlY2VkaW5nIGl0IHdpdGggYSBiYWNrc2xhc2guCitGb3IgZXhhbXBsZToKKworICJrZXkxICI9dmFsdWUxCisga2V5Mj0iIHZhbHVlMiIKKyBrZXlcPTM9dmFsdWUzCisga2V5ND12YWx1ZT00CisgImtleTUiIj12YWx1ZTUKKworSGVyZSB0aGUgZmlyc3Qga2V5IGlzICJrZXkxICIgKG5vdGUgdGhlIHRyYWlsaW5nIHdoaXRlLXNwYWNlKSBhbmQgdGhlCitzZWNvbmQgdmFsdWUgaXMgIiB2YWx1ZTIiIChub3RlIHRoZSBsZWFkaW5nIHdoaXRlLXNwYWNlKS4gVGhlIHRoaXJkCitrZXkgY29udGFpbnMgYW4gZXF1YWwgc2lnbiAia2V5PTMiIGFuZCBzbyBkb2VzIHRoZSBmb3VydGggdmFsdWUsIHdoaWNoCitkb2VzIG5vdCBuZWVkIHRvIGJlIGVzY2FwZWQuIFRoZSBmaWZ0aCBrZXkgY29udGFpbnMgYSB0cmFpbGluZyBxdW90ZSwKK3doaWNoIGRvZXMgbm90IG5lZWQgdG8gYmUgZXNjYXBlZCBzaW5jZSBpdCBpcyBpbnNpZGUgYSBzdXJyb3VuZGluZworcXVvdGUuCisKKz1jdXQKKwlteSAkcGFpciA9IHNoaWZ0OworCisJIyBTZXBhcmF0ZSBrZXkgYW5kIHZhbHVlIGJ5IHRoZSBmaXJzdCBub24tcXVvdGVkIGVxdWFsIHNpZ24KKwlteSAoJGtleSwgJHZhbHVlKTsKKwlpZiAoJHBhaXIgPX4gL14oLipbXlxcXSk9KC4qKSQvKQorCXsKKwkJKCRrZXksICR2YWx1ZSkgPSAoJDEsICQyKQorCX0KKwllbHNlCisJeworCQlkaWUgIlBhcnNlIGVycm9yOiAkcGFpclxuICI7CisJfQorCisJIyBVbnF1b3RlIGFuZCB1bmVzY2FwZSB0aGUga2V5IGFuZCB2YWx1ZSBzZXBhcmF0ZWx5CisJcmV0dXJuICgmdW5lc2NhcGUoJGtleSksICZ1bmVzY2FwZSgkdmFsdWUpKTsKK30KKworIyBVbnF1b3RlIGFuZCB1bmVzY2FwZQorc3ViIHVuZXNjYXBlCit7CisJbXkgJHN0cmluZyA9IHNoaWZ0OworCisJIyBGaXJzdCByZW1vdmUgZW5jbG9zaW5nIHF1b3Rlcy4gQmFja3NsYXNoIGJlZm9yZSB0aGUgdHJhaWxpbmcKKwkjIHF1b3RlIGxlYXZlcyBib3RoLgorCWlmICgkc3RyaW5nID1+IC9eIiguKlteXFxdKSIkLykKKwl7CisJCSRzdHJpbmcgPSAkMTsKKwl9CisKKwkjIFNlY29uZCByZW1vdmUgYW55IGJhY2tzbGFzaGVzIGluc2lkZSB0aGUgdW5xdW90ZWQgc3RyaW5nLgorCSMgRm9yIGxhdGVyOiBIYW5kbGUgc3BlY2lhbCBzZXF1ZW5jZXMgbGlrZSBcdCA/CisJJHN0cmluZyA9fiBzL1xcKC4pLyQxL2c7CisKKwlyZXR1cm4gJHN0cmluZzsKK30KKworX19FTkRfXworCis9cG9kCisKKz1oZWFkMSBFWEFNUExFUworCitCPGltcG9ydC1kaXJlY3Rvcmllcy5wZXJsPiBGPHByb2plY3QuaW1wb3J0PgorCis9aGVhZDEgQVVUSE9SCisKK0NvcHlyaWdodCAyMDA4LTIwMDkgUGV0ZXIgS3JlZnRpbmcgRTxsdD5wZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKz1jdXQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lODAwZDlmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsCkBAIC0wLDAgKzEsMjI1IEBACisjIS91c3IvYmluL3BlcmwKKworIyMgdGFyIGFyY2hpdmUgZnJvbnRlbmQgZm9yIGdpdC1mYXN0LWltcG9ydAorIyMKKyMjIEZvciBleGFtcGxlOgorIyMKKyMjICBta2RpciBwcm9qZWN0OyBjZCBwcm9qZWN0OyBnaXQgaW5pdAorIyMgIHBlcmwgaW1wb3J0LXRhcnMucGVybCAqLnRhci5iejIKKyMjICBnaXQgd2hhdGNoYW5nZWQgaW1wb3J0LXRhcnMKKyMjCisjIyBVc2UgLS1tZXRhaW5mbyB0byBzcGVjaWZ5IHRoZSBleHRlbnNpb24gZm9yIGEgbWV0YSBkYXRhIGZpbGUsIHdoZXJlCisjIyBpbXBvcnQtdGFycyBjYW4gcmVhZCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIG9wdGlvbmFsbHkgYXV0aG9yIGFuZAorIyMgY29tbWl0dGVyIGluZm9ybWF0aW9uLgorIyMKKyMjICBlY2hvICdUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZScgPiBteWZpbGUudGFyLmJ6Mi5tc2cKKyMjICBwZXJsIGltcG9ydC10YXJzLnBlcmwgLS1tZXRhaW5mbz1tc2cgbXlmaWxlLnRhci5iejIKKwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRtZXRhZXh0ID0gJyc7CisKK2RpZSAidXNhZ2U6IGltcG9ydC10YXJzIFstLW1ldGFpbmZvPWV4dGVuc2lvbl0gKi50YXIue2d6LGJ6Mixsem1hLHh6LFp9XG4iCisJdW5sZXNzIEdldE9wdGlvbnMoJ21ldGFpbmZvPXMnID0+IFwkbWV0YWV4dCkgJiYgQEFSR1Y7CisKK215ICRicmFuY2hfbmFtZSA9ICdpbXBvcnQtdGFycyc7CitteSAkYnJhbmNoX3JlZiA9ICJyZWZzL2hlYWRzLyRicmFuY2hfbmFtZSI7CitteSAkYXV0aG9yX25hbWUgPSAkRU5WeydHSVRfQVVUSE9SX05BTUUnfSB8fCAnVCBBciBDcmVhdG9yJzsKK215ICRhdXRob3JfZW1haWwgPSAkRU5WeydHSVRfQVVUSE9SX0VNQUlMJ30gfHwgJ3RhckBleGFtcGxlLmNvbSc7CitteSAkY29tbWl0dGVyX25hbWUgPSAkRU5WeydHSVRfQ09NTUlUVEVSX05BTUUnfSB8fCBgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWVgOworbXkgJGNvbW1pdHRlcl9lbWFpbCA9ICRFTlZ7J0dJVF9DT01NSVRURVJfRU1BSUwnfSB8fCBgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLmVtYWlsYDsKKworY2hvbXAoJGNvbW1pdHRlcl9uYW1lLCAkY29tbWl0dGVyX2VtYWlsKTsKKworb3BlbihGSSwgJ3wtJywgJ2dpdCcsICdmYXN0LWltcG9ydCcsICctLXF1aWV0JykKKwlvciBkaWUgIlVuYWJsZSB0byBzdGFydCBnaXQgZmFzdC1pbXBvcnQ6ICQhXG4iOworZm9yZWFjaCBteSAkdGFyX2ZpbGUgKEBBUkdWKQoreworCW15ICRjb21taXRfdGltZSA9IHRpbWU7CisJJHRhcl9maWxlID1+IG0sKFteL10rKSQsOworCW15ICR0YXJfbmFtZSA9ICQxOworCisJaWYgKCR0YXJfbmFtZSA9fiBzL1wuKHRhclwuZ3p8dGd6KSQvLykgeworCQlvcGVuKEksICctfCcsICdndW56aXAnLCAnLWMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byBndW56aXAgLWMgJHRhcl9maWxlOiAkIVxuIjsKKwl9IGVsc2lmICgkdGFyX25hbWUgPX4gcy9cLih0YXJcLmJ6Mnx0YnoyKSQvLykgeworCQlvcGVuKEksICctfCcsICdidW56aXAyJywgJy1jJywgJHRhcl9maWxlKQorCQkJb3IgZGllICJVbmFibGUgdG8gYnVuemlwMiAtYyAkdGFyX2ZpbGU6ICQhXG4iOworCX0gZWxzaWYgKCR0YXJfbmFtZSA9fiBzL1wudGFyXC5aJC8vKSB7CisJCW9wZW4oSSwgJy18JywgJ3VuY29tcHJlc3MnLCAnLWMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byB1bmNvbXByZXNzIC1jICR0YXJfZmlsZTogJCFcbiI7CisJfSBlbHNpZiAoJHRhcl9uYW1lID1+IHMvXC4odGFyXC4obHptYXx4eil8KHRsenx0eHopKSQvLykgeworCQlvcGVuKEksICctfCcsICd4eicsICctZGMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byB4eiAtZGMgJHRhcl9maWxlOiAkIVxuIjsKKwl9IGVsc2lmICgkdGFyX25hbWUgPX4gcy9cLnRhciQvLykgeworCQlvcGVuKEksICR0YXJfZmlsZSkgb3IgZGllICJVbmFibGUgdG8gb3BlbiAkdGFyX2ZpbGU6ICQhXG4iOworCX0gZWxzZSB7CisJCWRpZSAiVW5yZWNvZ25pemVkIGNvbXByZXNzaW9uIGZvcm1hdDogJHRhcl9maWxlXG4iOworCX0KKworCW15ICRhdXRob3JfdGltZSA9IDA7CisJbXkgJG5leHRfbWFyayA9IDE7CisJbXkgJGhhdmVfdG9wX2RpciA9IDE7CisJbXkgKCR0b3BfZGlyLCAlZmlsZXMpOworCisJbXkgJG5leHRfcGF0aCA9ICcnOworCisJd2hpbGUgKHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7CisJCW15ICgkbmFtZSwgJG1vZGUsICR1aWQsICRnaWQsICRzaXplLCAkbXRpbWUsCisJCQkkY2hrc3VtLCAkdHlwZWZsYWcsICRsaW5rbmFtZSwgJG1hZ2ljLAorCQkJJHZlcnNpb24sICR1bmFtZSwgJGduYW1lLCAkZGV2bWFqb3IsICRkZXZtaW5vciwKKwkJCSRwcmVmaXgpID0gdW5wYWNrICdaMTAwIFo4IFo4IFo4IFoxMiBaMTIKKwkJCVo4IFoxIFoxMDAgWjYKKwkJCVoyIFozMiBaMzIgWjggWjggWionLCAkXzsKKworCQl1bmxlc3MgKCRuZXh0X3BhdGggZXEgJycpIHsKKwkJCSMgUmVjb3ZlciBuYW1lIGZyb20gcHJldmlvdXMgZXh0ZW5kZWQgaGVhZGVyCisJCQkkbmFtZSA9ICRuZXh0X3BhdGg7CisJCQkkbmV4dF9wYXRoID0gJyc7CisJCX0KKworCQlsYXN0IHVubGVzcyBsZW5ndGgoJG5hbWUpOworCQlpZiAoJG5hbWUgZXEgJy4vLi9ATG9uZ0xpbmsnKSB7CisJCQkjIEdOVSB0YXIgZXh0ZW5zaW9uCisJCQlpZiAocmVhZChJLCAkXywgNTEyKSAhPSA1MTIpIHsKKwkJCQlkaWUgKCdTaG9ydCBhcmNoaXZlJyk7CisJCQl9CisJCQkkbmFtZSA9IHVucGFjayAnWjI1NycsICRfOworCQkJbmV4dCB1bmxlc3MgJG5hbWU7CisKKwkJCW15ICRkdW1teTsKKwkJCWlmIChyZWFkKEksICRfLCA1MTIpICE9IDUxMikgeworCQkJCWRpZSAoJ1Nob3J0IGFyY2hpdmUnKTsKKwkJCX0KKwkJCSgkZHVtbXksICRtb2RlLCAkdWlkLCAkZ2lkLCAkc2l6ZSwgJG10aW1lLAorCQkJJGNoa3N1bSwgJHR5cGVmbGFnLCAkbGlua25hbWUsICRtYWdpYywKKwkJCSR2ZXJzaW9uLCAkdW5hbWUsICRnbmFtZSwgJGRldm1ham9yLCAkZGV2bWlub3IsCisJCQkkcHJlZml4KSA9IHVucGFjayAnWjEwMCBaOCBaOCBaOCBaMTIgWjEyCisJCQlaOCBaMSBaMTAwIFo2CisJCQlaMiBaMzIgWjMyIFo4IFo4IFoqJywgJF87CisJCX0KKwkJJG1vZGUgPSBvY3QgJG1vZGU7CisJCSRzaXplID0gb2N0ICRzaXplOworCQkkbXRpbWUgPSBvY3QgJG10aW1lOworCQluZXh0IGlmICR0eXBlZmxhZyA9PSA1OyAjIGRpcmVjdG9yeQorCisJCWlmICgkdHlwZWZsYWcgZXEgJ3gnKSB7ICMgZXh0ZW5kZWQgaGVhZGVyCisJCQkjIElmIGV4dGVuZGVkIGhlYWRlciwgY2hlY2sgZm9yIHBhdGgKKwkJCW15ICRwYXhfaGVhZGVyID0gJyc7CisJCQl3aGlsZSAoJHNpemUgPiAwICYmIHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7CisJCQkJJHBheF9oZWFkZXIgPSAkcGF4X2hlYWRlciAuIHN1YnN0cigkXywgMCwgJHNpemUpOworCQkJCSRzaXplIC09IDUxMjsKKwkJCX0KKworCQkJbXkgQGxpbmVzID0gc3BsaXQgL1xuLywgJHBheF9oZWFkZXI7CisJCQlmb3JlYWNoIG15ICRsaW5lIChAbGluZXMpIHsKKwkJCQlteSAoJGxlbiwgJGVudHJ5KSA9IHNwbGl0IC8gLywgJGxpbmU7CisJCQkJbXkgKCRrZXksICR2YWx1ZSkgPSBzcGxpdCAvPS8sICRlbnRyeTsKKwkJCQlpZiAoJGtleSBlcSAncGF0aCcpIHsKKwkJCQkJJG5leHRfcGF0aCA9ICR2YWx1ZTsKKwkJCQl9CisJCQl9CisJCQluZXh0OworCQl9IGVsc2lmICgkbmFtZSA9fiBtey9cen0pIHsgIyBkaXJlY3RvcnkKKwkJCW5leHQ7CisJCX0gZWxzaWYgKCR0eXBlZmxhZyAhPSAxKSB7ICMgaGFuZGxlIGhhcmQgbGlua3MgbGF0ZXIKKwkJCXByaW50IEZJICJibG9iXG4iLCAibWFyayA6JG5leHRfbWFya1xuIjsKKwkJCWlmICgkdHlwZWZsYWcgPT0gMikgeyAjIHN5bWJvbGljIGxpbmsKKwkJCQlwcmludCBGSSAiZGF0YSAiLCBsZW5ndGgoJGxpbmtuYW1lKSwgIlxuIiwKKwkJCQkJJGxpbmtuYW1lOworCQkJCSRtb2RlID0gMDEyMDAwMDsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgRkkgImRhdGEgJHNpemVcbiI7CisJCQkJd2hpbGUgKCRzaXplID4gMCAmJiByZWFkKEksICRfLCA1MTIpID09IDUxMikgeworCQkJCQlwcmludCBGSSBzdWJzdHIoJF8sIDAsICRzaXplKTsKKwkJCQkJJHNpemUgLT0gNTEyOworCQkJCX0KKwkJCX0KKwkJCXByaW50IEZJICJcbiI7CisJCX0KKworCQlteSAkcGF0aDsKKwkJaWYgKCRwcmVmaXgpIHsKKwkJCSRwYXRoID0gIiRwcmVmaXgvJG5hbWUiOworCQl9IGVsc2UgeworCQkJJHBhdGggPSAiJG5hbWUiOworCQl9CisKKwkJaWYgKCR0eXBlZmxhZyA9PSAxKSB7ICMgaGFyZCBsaW5rCisJCQkkbGlua25hbWUgPSAiJHByZWZpeC8kbGlua25hbWUiIGlmICRwcmVmaXg7CisJCQkkZmlsZXN7JHBhdGh9ID0gWyAkZmlsZXN7JGxpbmtuYW1lfS0+WzBdLCAkbW9kZSBdOworCQl9IGVsc2UgeworCQkJJGZpbGVzeyRwYXRofSA9IFskbmV4dF9tYXJrKyssICRtb2RlXTsKKwkJfQorCisJCSRhdXRob3JfdGltZSA9ICRtdGltZSBpZiAkbXRpbWUgPiAkYXV0aG9yX3RpbWU7CisJCSRwYXRoID1+IG0sXihbXi9dKykvLDsKKwkJJHRvcF9kaXIgPSAkMSB1bmxlc3MgJHRvcF9kaXI7CisJCSRoYXZlX3RvcF9kaXIgPSAwIGlmICR0b3BfZGlyIG5lICQxOworCX0KKworCW15ICRjb21taXRfbXNnID0gIkltcG9ydGVkIGZyb20gJHRhcl9maWxlLiI7CisJbXkgJHRoaXNfY29tbWl0dGVyX25hbWUgPSAkY29tbWl0dGVyX25hbWU7CisJbXkgJHRoaXNfY29tbWl0dGVyX2VtYWlsID0gJGNvbW1pdHRlcl9lbWFpbDsKKwlteSAkdGhpc19hdXRob3JfbmFtZSA9ICRhdXRob3JfbmFtZTsKKwlteSAkdGhpc19hdXRob3JfZW1haWwgPSAkYXV0aG9yX2VtYWlsOworCWlmICgkbWV0YWV4dCBuZSAnJykgeworCQkjIE9wdGlvbmFsbHkgcmVhZCBhIGNvbW1pdCBtZXNzYWdlIGZyb20gPGZpbGVuYW1lLnRhcj4ubXNnCisJCSMgQWRkIGEgbGluZSBvbiB0aGUgZm9ybSAiQ29tbWl0dGVyOiBuYW1lIDxlLW1haWw+IiB0byBvdmVycmlkZQorCQkjIHRoZSBjb21taXR0ZXIgYW5kICJBdXRob3I6IG5hbWUgPGUtbWFpbD4iIHRvIG92ZXJyaWRlIHRoZQorCQkjIGF1dGhvciBmb3IgdGhpcyB0YXIgYmFsbC4KKwkJaWYgKG9wZW4gTVNHLCAnPCcsICIke3Rhcl9maWxlfS4ke21ldGFleHR9IikgeworCQkJbXkgJGhlYWRlcl9kb25lID0gMDsKKwkJCSRjb21taXRfbXNnID0gJyc7CisJCQl3aGlsZSAoPE1TRz4pIHsKKwkJCQlpZiAoISRoZWFkZXJfZG9uZSAmJiAvXkNvbW1pdHRlcjpccysoW148Pl0qKVxzKzwoLiopPlxzKiQvaSkgeworCQkJCQkkdGhpc19jb21taXR0ZXJfbmFtZSA9ICQxOworCQkJCQkkdGhpc19jb21taXR0ZXJfZW1haWwgPSAkMjsKKwkJCQl9IGVsc2lmICghJGhlYWRlcl9kb25lICYmIC9eQXV0aG9yOlxzKyhbXjw+XSopXHMrPCguKik+XHMqJC9pKSB7CisJCQkJCSR0aGlzX2F1dGhvcl9uYW1lID0gJDE7CisJCQkJCSR0aGlzX2F1dGhvcl9lbWFpbCA9ICQyOworCQkJCX0gZWxzaWYgKCEkaGVhZGVyX2RvbmUgJiYgL14kLykgeyAjIGVtcHR5IGxpbmUgZW5kcyBoZWFkZXIuCisJCQkJCSRoZWFkZXJfZG9uZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJJGNvbW1pdF9tc2cgLj0gJF87CisJCQkJCSRoZWFkZXJfZG9uZSA9IDE7CisJCQkJfQorCQkJfQorCQkJY2xvc2UgTVNHOworCQl9CisJfQorCisJcHJpbnQgRkkgPDxFT0Y7Citjb21taXQgJGJyYW5jaF9yZWYKK2F1dGhvciAkdGhpc19hdXRob3JfbmFtZSA8JHRoaXNfYXV0aG9yX2VtYWlsPiAkYXV0aG9yX3RpbWUgKzAwMDAKK2NvbW1pdHRlciAkdGhpc19jb21taXR0ZXJfbmFtZSA8JHRoaXNfY29tbWl0dGVyX2VtYWlsPiAkY29tbWl0X3RpbWUgKzAwMDAKK2RhdGEgPDxFTkRfT0ZfQ09NTUlUX01FU1NBR0UKKyRjb21taXRfbXNnCitFTkRfT0ZfQ09NTUlUX01FU1NBR0UKKworZGVsZXRlYWxsCitFT0YKKworCWZvcmVhY2ggbXkgJHBhdGggKGtleXMgJWZpbGVzKQorCXsKKwkJbXkgKCRtYXJrLCAkbW9kZSkgPSBAeyRmaWxlc3skcGF0aH19OworCQkkcGF0aCA9fiBzLF4oW14vXSspLywsIGlmICRoYXZlX3RvcF9kaXI7CisJCSRtb2RlID0gJG1vZGUgJiAwMTExID8gMDc1NSA6IDA2NDQgdW5sZXNzICRtb2RlID09IDAxMjAwMDA7CisJCXByaW50ZiBGSSAiTSAlbyA6JWkgJXNcbiIsICRtb2RlLCAkbWFyaywgJHBhdGg7CisJfQorCXByaW50IEZJICJcbiI7CisKKwlwcmludCBGSSA8PEVPRjsKK3RhZyAkdGFyX25hbWUKK2Zyb20gJGJyYW5jaF9yZWYKK3RhZ2dlciAkYXV0aG9yX25hbWUgPCRhdXRob3JfZW1haWw+ICRhdXRob3JfdGltZSArMDAwMAorZGF0YSA8PEVORF9PRl9UQUdfTUVTU0FHRQorUGFja2FnZSAkdGFyX25hbWUKK0VORF9PRl9UQUdfTUVTU0FHRQorCitFT0YKKworCWNsb3NlIEk7Cit9CitjbG9zZSBGSTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXppcHMucHkgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC16aXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxMmMyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC16aXBzLnB5CkBAIC0wLDAgKzEsNzggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIyB6aXAgYXJjaGl2ZSBmcm9udGVuZCBmb3IgZ2l0LWZhc3QtaW1wb3J0CisjIworIyMgRm9yIGV4YW1wbGU6CisjIworIyMgIG1rZGlyIHByb2plY3Q7IGNkIHByb2plY3Q7IGdpdCBpbml0CisjIyAgcHl0aG9uIGltcG9ydC16aXBzLnB5ICouemlwCisjIyAgZ2l0IGxvZyAtLXN0YXQgaW1wb3J0LXppcHMKKworZnJvbSBvcyBpbXBvcnQgcG9wZW4sIHBhdGgKK2Zyb20gc3lzIGltcG9ydCBhcmd2LCBleGl0LCBoZXh2ZXJzaW9uLCBzdGRlcnIKK2Zyb20gdGltZSBpbXBvcnQgbWt0aW1lCitmcm9tIHppcGZpbGUgaW1wb3J0IFppcEZpbGUKKworaWYgaGV4dmVyc2lvbiA8IDB4MDEwNjAwMDA6CisgICAgIyBUaGUgbGltaXRlciBpcyB0aGUgemlwZmlsZSBtb2R1bGUKKyAgICBzdGRlcnIud3JpdGUoImltcG9ydC16aXBzLnB5OiByZXF1aXJlcyBQeXRob24gMS42LjAgb3IgbGF0ZXIuXG4iKQorICAgIGV4aXQoMSkKKworaWYgbGVuKGFyZ3YpIDwgMjoKKyAgICBwcmludCAndXNhZ2U6JywgYXJndlswXSwgJzx6aXBmaWxlPi4uLicKKyAgICBleGl0KDEpCisKK2JyYW5jaF9yZWYgPSAncmVmcy9oZWFkcy9pbXBvcnQtemlwcycKK2NvbW1pdHRlcl9uYW1lID0gJ1ogSXAgQ3JlYXRvcicKK2NvbW1pdHRlcl9lbWFpbCA9ICd6aXBAZXhhbXBsZS5jb20nCisKK2Zhc3RfaW1wb3J0ID0gcG9wZW4oJ2dpdCBmYXN0LWltcG9ydCAtLXF1aWV0JywgJ3cnKQorZGVmIHByaW50bGluZXMobGlzdCk6CisgICAgZm9yIHN0ciBpbiBsaXN0OgorICAgICAgICBmYXN0X2ltcG9ydC53cml0ZShzdHIgKyAiXG4iKQorCitmb3IgemlwZmlsZSBpbiBhcmd2WzE6XToKKyAgICBjb21taXRfdGltZSA9IDAKKyAgICBuZXh0X21hcmsgPSAxCisgICAgY29tbW9uX3ByZWZpeCA9IE5vbmUKKyAgICBtYXJrID0gZGljdCgpCisKKyAgICB6aXAgPSBaaXBGaWxlKHppcGZpbGUsICdyJykKKyAgICBmb3IgbmFtZSBpbiB6aXAubmFtZWxpc3QoKToKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaW5mbyA9IHppcC5nZXRpbmZvKG5hbWUpCisKKyAgICAgICAgaWYgY29tbWl0X3RpbWUgPCBpbmZvLmRhdGVfdGltZToKKyAgICAgICAgICAgIGNvbW1pdF90aW1lID0gaW5mby5kYXRlX3RpbWUKKyAgICAgICAgaWYgY29tbW9uX3ByZWZpeCA9PSBOb25lOgorICAgICAgICAgICAgY29tbW9uX3ByZWZpeCA9IG5hbWVbOm5hbWUucmZpbmQoJy8nKSArIDFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aGlsZSBub3QgbmFtZS5zdGFydHN3aXRoKGNvbW1vbl9wcmVmaXgpOgorICAgICAgICAgICAgICAgIGxhc3Rfc2xhc2ggPSBjb21tb25fcHJlZml4WzotMV0ucmZpbmQoJy8nKSArIDEKKyAgICAgICAgICAgICAgICBjb21tb25fcHJlZml4ID0gY29tbW9uX3ByZWZpeFs6bGFzdF9zbGFzaF0KKworICAgICAgICBtYXJrW25hbWVdID0gJzonICsgc3RyKG5leHRfbWFyaykKKyAgICAgICAgbmV4dF9tYXJrICs9IDEKKworICAgICAgICBwcmludGxpbmVzKCgnYmxvYicsICdtYXJrICcgKyBtYXJrW25hbWVdLCBcCisgICAgICAgICAgICAgICAgICAgICdkYXRhICcgKyBzdHIoaW5mby5maWxlX3NpemUpKSkKKyAgICAgICAgZmFzdF9pbXBvcnQud3JpdGUoemlwLnJlYWQobmFtZSkgKyAiXG4iKQorCisgICAgY29tbWl0dGVyID0gY29tbWl0dGVyX25hbWUgKyAnIDwnICsgY29tbWl0dGVyX2VtYWlsICsgJz4gJWQgKzAwMDAnICUgXAorICAgICAgICBta3RpbWUoY29tbWl0X3RpbWUgKyAoMCwgMCwgMCkpCisKKyAgICBwcmludGxpbmVzKCgnY29tbWl0ICcgKyBicmFuY2hfcmVmLCAnY29tbWl0dGVyICcgKyBjb21taXR0ZXIsIFwKKyAgICAgICAgJ2RhdGEgPDxFT00nLCAnSW1wb3J0ZWQgZnJvbSAnICsgemlwZmlsZSArICcuJywgJ0VPTScsIFwKKyAgICAgICAgJycsICdkZWxldGVhbGwnKSkKKworICAgIGZvciBuYW1lIGluIG1hcmsua2V5cygpOgorICAgICAgICBmYXN0X2ltcG9ydC53cml0ZSgnTSAxMDA2NDQgJyArIG1hcmtbbmFtZV0gKyAnICcgKworICAgICAgICAgICAgbmFtZVtsZW4oY29tbW9uX3ByZWZpeCk6XSArICJcbiIpCisKKyAgICBwcmludGxpbmVzKCgnJywgICd0YWcgJyArIHBhdGguYmFzZW5hbWUoemlwZmlsZSksIFwKKyAgICAgICAgJ2Zyb20gJyArIGJyYW5jaF9yZWYsICd0YWdnZXIgJyArIGNvbW1pdHRlciwgXAorICAgICAgICAnZGF0YSA8PEVPTScsICdQYWNrYWdlICcgKyB6aXBmaWxlLCAnRU9NJywgJycpKQorCitpZiBmYXN0X2ltcG9ydC5jbG9zZSgpOgorICAgIGV4aXQoMSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LWp1bXAvUkVBRE1FIGIvY29udHJpYi9naXQtanVtcC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2MThhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0LWp1bXAvUkVBRE1FCkBAIC0wLDAgKzEsMTEyIEBACitnaXQtanVtcAorPT09PT09PT0KKworR2l0LWp1bXAgaXMgYSBzY3JpcHQgZm9yIGhlbHBpbmcgeW91IGp1bXAgdG8gImludGVyZXN0aW5nIiBwYXJ0cyBvZiB5b3VyCitwcm9qZWN0IGluIHlvdXIgZWRpdG9yLiBJdCB3b3JrcyBieSBvdXRwdXR0aW5nIGEgc2V0IG9mIGludGVyZXN0aW5nCitzcG90cyBpbiB0aGUgInF1aWNrZml4IiBmb3JtYXQsIHdoaWNoIGVkaXRvcnMgbGlrZSB2aW0gY2FuIHVzZSBhcyBhCitxdWV1ZSBvZiBwbGFjZXMgdG8gdmlzaXQgKHRoaXMgZmVhdHVyZSBpcyB1c3VhbGx5IHVzZWQgdG8ganVtcCB0byBlcnJvcnMKK3Byb2R1Y2VkIGJ5IGEgY29tcGlsZXIpLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBkaWZmIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkaWZmIC0tZ2l0IGEvZm9vLmMgYi9mb28uYworaW5kZXggYTY1NTU0MC4uNWE1OTA0NCAxMDA2NDQKKy0tLSBhL2Zvby5jCisrKysgYi9mb28uYworQEAgLTEsMyArMSwzIEBACisgaW50IG1haW4odm9pZCkgeworLSAgcHJpbnRmKCJoZWxsbyB3b3JkIVxuIik7CisrICBwcmludGYoImhlbGxvIHdvcmxkIVxuIik7CisgfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2l0LWp1bXAgd2lsbCBmZWVkIHRoaXMgdG8gdGhlIGVkaXRvcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Zvby5jOjI6IHByaW50ZigiaGVsbG8gd29yZCFcbiIpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IsIHdoZW4gcnVubmluZyAnZ2l0IGp1bXAgZ3JlcCcsIGNvbHVtbiBudW1iZXJzIHdpbGwgYWxzbyBiZSBlbWl0dGVkLAorZS5nLiBgZ2l0IGp1bXAgZ3JlcCAiaGVsbG8iYCB3b3VsZCByZXR1cm46CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitmb28uYzoyOjk6IHByaW50ZigiaGVsbG8gd29yZCFcbiIpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT2J2aW91c2x5IHRoaXMgdHJpdmlhbCBjYXNlIGlzbid0IHRoYXQgaW50ZXJlc3Rpbmc7IHlvdSBjb3VsZCBqdXN0IG9wZW4KK2Bmb28uY2AgeW91cnNlbGYuIEJ1dCB3aGVuIHlvdSBoYXZlIG1hbnkgY2hhbmdlcyBzY2F0dGVyZWQgYWNyb3NzIGEKK3Byb2plY3QsIHlvdSBjYW4gdXNlIHRoZSBlZGl0b3IncyBzdXBwb3J0IHRvICJqdW1wIiBmcm9tIHBvaW50IHRvIHBvaW50LgorCitHaXQtanVtcCBjYW4gZ2VuZXJhdGUgZm91ciB0eXBlcyBvZiBpbnRlcmVzdGluZyBsaXN0czoKKworICAxLiBUaGUgYmVnaW5uaW5nIG9mIGFueSBkaWZmIGh1bmtzLgorCisgIDIuIFRoZSBiZWdpbm5pbmcgb2YgYW55IG1lcmdlIGNvbmZsaWN0IG1hcmtlcnMuCisKKyAgMy4gQW55IGdyZXAgbWF0Y2hlcywgaW5jbHVkaW5nIHRoZSBjb2x1bW4gb2YgdGhlIGZpcnN0IG1hdGNoIG9uIGEKKyAgICAgbGluZS4KKworICA0LiBBbnkgd2hpdGVzcGFjZSBlcnJvcnMgZGV0ZWN0ZWQgYnkgYGdpdCBkaWZmIC0tY2hlY2tgLgorCisKK1VzaW5nIGdpdC1qdW1wCistLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgaXQsIGp1c3QgZHJvcCBnaXQtanVtcCBpbiB5b3VyIFBBVEgsIGFuZCB0aGVuIGludm9rZSBpdCBsaWtlCit0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBqdW1wIHRvIGNoYW5nZXMgbm90IHlldCBzdGFnZWQgZm9yIGNvbW1pdAorZ2l0IGp1bXAgZGlmZgorCisjIGp1bXAgdG8gY2hhbmdlcyB0aGF0IGFyZSBzdGFnZWQgZm9yIGNvbW1pdDsgeW91IGNhbiBnaXZlCisjIGFyYml0cmFyeSBkaWZmIG9wdGlvbnMKK2dpdCBqdW1wIGRpZmYgLS1jYWNoZWQKKworIyBqdW1wIHRvIG1lcmdlIGNvbmZsaWN0cworZ2l0IGp1bXAgbWVyZ2UKKworIyBqdW1wIHRvIGFsbCBpbnN0YW5jZXMgb2YgZm9vX2JhcgorZ2l0IGp1bXAgZ3JlcCBmb29fYmFyCisKKyMgc2FtZSBhcyBhYm92ZSwgYnV0IGNhc2UtaW5zZW5zaXRpdmU7IHlvdSBjYW4gZ2l2ZQorIyBhcmJpdHJhcnkgZ3JlcCBvcHRpb25zCitnaXQganVtcCBncmVwIC1pIGZvb19iYXIKKworIyB1c2UgdGhlIHNpbHZlciBzZWFyY2hlciBmb3IgZ2l0IGp1bXAgZ3JlcAorZ2l0IGNvbmZpZyBqdW1wLmdyZXBDbWQgImFnIC0tY29sdW1uIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitSZWxhdGVkIFByb2dyYW1zCistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWNjb21wbGlzaCBzb21lIG9mIHRoZSBzYW1lIHRoaW5ncyB3aXRoIGluZGl2aWR1YWwgdG9vbHMuIEZvcgorZXhhbXBsZSwgeW91IGNhbiB1c2UgYGdpdCBtZXJnZXRvb2xgIHRvIHN0YXJ0IHZpbWRpZmYgb24gZWFjaCB1bm1lcmdlZAorZmlsZS4gYGdpdCBqdW1wIG1lcmdlYCBpcyBmb3IgdGhlIHZpbS13aWVsZGluZyBsdWRkaXRlIHdobyBqdXN0IHdhbnRzIHRvCitqdW1wIHN0cmFpZ2h0IHRvIHRoZSBjb25mbGljdCB0ZXh0IHdpdGggbm8gZmFuZmFyZS4KKworQXMgb2YgZ2l0IHYxLjcuMiwgYGdpdCBncmVwYCBrbm93cyB0aGUgYC0tb3Blbi1maWxlcy1pbi1wYWdlcmAgb3B0aW9uLAord2hpY2ggZG9lcyBzb21ldGhpbmcgc2ltaWxhciB0byBgZ2l0IGp1bXAgZ3JlcGAuIEhvd2V2ZXIsIGl0IGlzIGxpbWl0ZWQKK3RvIHBvc2l0aW9uaW5nIHRoZSBjdXJzb3IgdG8gdGhlIGNvcnJlY3QgbGluZSBpbiBvbmx5IHRoZSBmaXJzdCBmaWxlLAorbGVhdmluZyB5b3UgdG8gbG9jYXRlIHN1YnNlcXVlbnQgaGl0cyBpbiB0aGF0IGZpbGUgb3Igb3RoZXIgZmlsZXMgdXNpbmcKK3RoZSBlZGl0b3Igb3IgcGFnZXIuIEJ5IGNvbnRyYXN0LCBnaXQtanVtcCBwcm92aWRlcyB0aGUgZWRpdG9yIHdpdGggYQorY29tcGxldGUgbGlzdCBvZiBmaWxlcywgbGluZXMsIGFuZCBhIGNvbHVtbiBudW1iZXIgZm9yIGVhY2ggbWF0Y2guCisKKworTGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tCisKK1RoaXMgc2NyaXB0IHdhcyB3cml0dGVuIGFuZCB0ZXN0ZWQgd2l0aCB2aW0uIEdpdmVuIHRoYXQgdGhlIHF1aWNrZml4Citmb3JtYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCBnY2MgcHJvZHVjZXMsIEkgZXhwZWN0IGVtYWNzIHVzZXJzIGhhdmUgYQorc2ltaWxhciBmZWF0dXJlIGZvciBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbGlzdCwgYnV0IEkga25vdyBub3RoaW5nIGFib3V0Citob3cgdG8gYWN0aXZhdGUgaXQuCisKK1RoZSBzaGVsbCBzbmlwcGV0cyB0byBnZW5lcmF0ZSB0aGUgcXVpY2tmaXggbGluZXMgd2lsbCBhbG1vc3QgY2VydGFpbmx5CitjaG9rZSBvbiBmaWxlbmFtZXMgd2l0aCBleG90aWMgY2hhcmFjdGVycyAobGlrZSBuZXdsaW5lcykuCisKK0NvbnRyaWJ1dGluZworLS0tLS0tLS0tLS0tCisKK0J1ZyBmaXhlcywgYnVnIHJlcG9ydHMsIGFuZCBmZWF0dXJlIHJlcXVlc3RzIHNob3VsZCBiZSBkaXNjdXNzZWQgb24gdGhlCitHaXQgbWFpbGluZyBsaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPiwgYW5kIGNjJ2QgdG8gdGhlIGdpdC1qdW1wCittYWludGFpbmVyLCBKZWZmIEtpbmcgPHBlZmZAcGVmZi5uZXQ+LgpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtanVtcC9naXQtanVtcCBiL2NvbnRyaWIvZ2l0LWp1bXAvZ2l0LWp1bXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTMxYjBmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0LWp1bXAvZ2l0LWp1bXAKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisKK3VzYWdlKCkgeworCWNhdCA8PFxFT0YKK3VzYWdlOiBnaXQganVtcCA8bW9kZT4gWzxhcmdzPl0KKworSnVtcCB0byBpbnRlcmVzdGluZyBlbGVtZW50cyBpbiBhbiBlZGl0b3IuCitUaGUgPG1vZGU+IHBhcmFtZXRlciBpcyBvbmUgb2Y6CisKK2RpZmY6IGVsZW1lbnRzIGFyZSBkaWZmIGh1bmtzLiBBcmd1bWVudHMgYXJlIGdpdmVuIHRvIGRpZmYuCisKK21lcmdlOiBlbGVtZW50cyBhcmUgbWVyZ2UgY29uZmxpY3RzLiBBcmd1bWVudHMgYXJlIGlnbm9yZWQuCisKK2dyZXA6IGVsZW1lbnRzIGFyZSBncmVwIGhpdHMuIEFyZ3VtZW50cyBhcmUgZ2l2ZW4gdG8gZ2l0IGdyZXAgb3IsIGlmCisgICAgICBjb25maWd1cmVkLCB0byB0aGUgY29tbWFuZCBpbiBganVtcC5ncmVwQ21kYC4KKword3M6IGVsZW1lbnRzIGFyZSB3aGl0ZXNwYWNlIGVycm9ycy4gQXJndW1lbnRzIGFyZSBnaXZlbiB0byBkaWZmIC0tY2hlY2suCitFT0YKK30KKworb3Blbl9lZGl0b3IoKSB7CisJZWRpdG9yPWBnaXQgdmFyIEdJVF9FRElUT1JgCisJZXZhbCAiJGVkaXRvciAtcSBcJDEiCit9CisKK21vZGVfZGlmZigpIHsKKwlnaXQgZGlmZiAtLW5vLXByZWZpeCAtLXJlbGF0aXZlICIkQCIgfAorCXBlcmwgLW5lICcKKwlpZiAobXteXCtcK1wrICguKil9KSB7ICRmaWxlID0gJDE7IG5leHQgfQorCWRlZmluZWQoJGZpbGUpIG9yIG5leHQ7CisJaWYgKG0vXkBAIC4qP1wrKFxkKykvKSB7ICRsaW5lID0gJDE7IG5leHQgfQorCWRlZmluZWQoJGxpbmUpIG9yIG5leHQ7CisJaWYgKC9eIC8pIHsgJGxpbmUrKzsgbmV4dCB9CisJaWYgKC9eWy0rXVxzKiguKikvKSB7CisJCXByaW50ICIkZmlsZTokbGluZTogJDFcbiI7CisJCSRsaW5lID0gdW5kZWY7CisJfQorCScKK30KKworbW9kZV9tZXJnZSgpIHsKKwlnaXQgbHMtZmlsZXMgLXUgfAorCXBlcmwgLXBlICdzL14uKj9cdC8vJyB8CisJc29ydCAtdSB8CisJd2hpbGUgSUZTPSByZWFkIGZuOyBkbworCQlncmVwIC1IbiAnXjw8PDw8PDwnICIkZm4iCisJZG9uZQorfQorCisjIEdyZXAgLW4gZ2VuZXJhdGVzIG5pY2UgcXVpY2tmaXgtbG9va2luZyBsaW5lcyBieSBpdHNlbGYsCisjIGJ1dCBsZXQncyBjbGVhbiB1cCBleHRyYSB3aGl0ZXNwYWNlLCBzbyB0aGV5IGxvb2sgYmV0dGVyIGlmIHRoZQorIyBlZGl0b3Igc2hvd3MgdGhlbSB0byB1cyBpbiB0aGUgc3RhdHVzIGJhci4KK21vZGVfZ3JlcCgpIHsKKwljbWQ9JChnaXQgY29uZmlnIGp1bXAuZ3JlcENtZCkKKwl0ZXN0IC1uICIkY21kIiB8fCBjbWQ9ImdpdCBncmVwIC1uIC0tY29sdW1uIgorCSRjbWQgIiRAIiB8CisJcGVybCAtcGUgJworCXMvWyBcdF0rLyAvZzsKKwlzL14gKi8vOworCScKK30KKworbW9kZV93cygpIHsKKwlnaXQgZGlmZiAtLWNoZWNrICIkQCIKK30KKworaWYgdGVzdCAkIyAtbHQgMTsgdGhlbgorCXVzYWdlID4mMgorCWV4aXQgMQorZmkKK21vZGU9JDE7IHNoaWZ0CisKK3RyYXAgJ3JtIC1mICIkdG1wIicgMCAxIDIgMyAxNQordG1wPWBta3RlbXAgLXQgZ2l0LWp1bXAuWFhYWFhYYCB8fCBleGl0IDEKK3R5cGUgIm1vZGVfJG1vZGUiID4vZGV2L251bGwgMj4mMSB8fCB7IHVzYWdlID4mMjsgZXhpdCAxOyB9CisibW9kZV8kbW9kZSIgIiRAIiA+IiR0bXAiCit0ZXN0IC1zICIkdG1wIiB8fCBleGl0IDAKK29wZW5fZWRpdG9yICIkdG1wIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtcmVzdXJyZWN0LnNoIGIvY29udHJpYi9naXQtcmVzdXJyZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjMTcxZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1yZXN1cnJlY3Quc2gKQEAgLTAsMCArMSwxODIgQEAKKyMhL2Jpbi9zaAorCitVU0FHRT0iWy1hXSBbLXJdIFstbV0gWy10XSBbLW5dIFstYiA8bmV3bmFtZT5dIDxuYW1lPiIKK0xPTkdfVVNBR0U9ImdpdC1yZXN1cnJlY3QgYXR0ZW1wdHMgdG8gZmluZCB0cmFjZXMgb2YgYSBicmFuY2ggdGlwCitjYWxsZWQgPG5hbWU+LCBhbmQgdHJpZXMgdG8gcmVzdXJyZWN0IGl0LiAgQ3VycmVudGx5LCB0aGUgcmVmbG9nIGlzCitzZWFyY2hlZCBmb3IgY2hlY2tvdXQgbWVzc2FnZXMsIGFuZCB3aXRoIC1yIGFsc28gbWVyZ2UgbWVzc2FnZXMuICBXaXRoCistbSBhbmQgLXQsIHRoZSBoaXN0b3J5IG9mIGFsbCByZWZzIGlzIHNjYW5uZWQgZm9yIE1lcmdlIDxuYW1lPiBpbnRvCitvdGhlci9NZXJnZSA8b3RoZXI+IGludG8gPG5hbWU+IChyZXNwZWN0aXZlbHkpIGNvbW1pdCBzdWJqZWN0cywgd2hpY2gKK2lzIHJhdGhlciBzbG93IGJ1dCBhbGxvd3MgeW91IHRvIHJlc3VycmVjdCBvdGhlciBwZW9wbGUncyB0b3BpYworYnJhbmNoZXMuIgorCitPUFRJT05TX0tFRVBEQVNIREFTSD0KK09QVElPTlNfU1RVQ0tMT05HPQorT1BUSU9OU19TUEVDPSJcCitnaXQgcmVzdXJyZWN0ICRVU0FHRQorLS0KK2IsYnJhbmNoPSAgICAgICAgICAgIHNhdmUgYnJhbmNoIGFzIDxuZXduYW1lPiBpbnN0ZWFkIG9mIDxuYW1lPgorYSxhbGwgICAgICAgICAgICAgICAgc2FtZSBhcyAtbCAtciAtbSAtdAorayxrZWVwLWdvaW5nICAgICAgICAgZnVsbCByZXYtbGlzdCBzY2FuIChpbnN0ZWFkIG9mIGZpcnN0IG1hdGNoKQorbCxyZWZsb2cgICAgICAgICAgICAgc2NhbiByZWZsb2cgZm9yIGNoZWNrb3V0cyAoZW5hYmxlZCBieSBkZWZhdWx0KQorcixyZWZsb2ctbWVyZ2VzICAgICAgc2NhbiBmb3IgbWVyZ2VzIHJlY29yZGVkIGluIHJlZmxvZworbSxtZXJnZXMgICAgICAgICAgICAgc2NhbiBmb3IgbWVyZ2VzIGludG8gb3RoZXIgYnJhbmNoZXMgKHNsb3cpCit0LG1lcmdlLXRhcmdldHMgICAgICBzY2FuIGZvciBtZXJnZXMgb2Ygb3RoZXIgYnJhbmNoZXMgaW50byA8bmFtZT4KK24sZHJ5LXJ1biAgICAgICAgICAgIGRvbid0IHJlY3JlYXRlIHRoZSBicmFuY2giCisKKy4gZ2l0LXNoLXNldHVwCisKK3NlYXJjaF9yZWZsb2cgKCkgeworCXNlZCAtbmUgJ3N+XlwoW14gXSpcKSAuKgljaGVja291dDogbW92aW5nIGZyb20gJyIkMSInIC4qflwxfnAnIFwKKyAgICAgICAgICAgICAgICA8ICIkR0lUX0RJUiIvbG9ncy9IRUFECit9CisKK3NlYXJjaF9yZWZsb2dfbWVyZ2VzICgpIHsKKwlnaXQgcmV2LXBhcnNlICQoCisJCXNlZCAtbmUgJ3N+XlteIF0qIFwoW14gXSpcKSAuKgltZXJnZSAnIiQxIic6Lip+XDFeMn5wJyBcCisJCQk8ICIkR0lUX0RJUiIvbG9ncy9IRUFECisJKQorfQorCitfeDQwPSJbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdIgorX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKKworc2VhcmNoX21lcmdlcyAoKSB7CisgICAgICAgIGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Ik1lcmdlIGJyYW5jaCAnJDEnIiBcCisgICAgICAgICAgICAgICAgLS1wcmV0dHk9dGZvcm1hdDoiJVAgJXMiIHwKKyAgICAgICAgc2VkIC1uZSAiL14kX3g0MCBcKCRfeDQwXCkgTWVyZ2UgLiovIHtzLy9cMS9wOyRlYXJseV9leGl0fSIKK30KKworc2VhcmNoX21lcmdlX3RhcmdldHMgKCkgeworCWdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Ik1lcmdlIGJyYW5jaCAnW14nXSonIGludG8gJGJyYW5jaFwkIiBcCisJCS0tcHJldHR5PXRmb3JtYXQ6IiVIICVzIiAtLWFsbCB8CisJc2VkIC1uZSAiL15cKCRfeDQwXCkgTWVyZ2UgLiovIHtzLy9cMS9wOyRlYXJseV9leGl0fSAiCit9CisKK2RyeV9ydW49CitlYXJseV9leGl0PXEKK3NjYW5fcmVmbG9nPXQKK3NjYW5fcmVmbG9nX21lcmdlcz0KK3NjYW5fbWVyZ2VzPQorc2Nhbl9tZXJnZV90YXJnZXRzPQorbmV3X25hbWU9CisKK3doaWxlIHRlc3QgIiQjIiAhPSAwOyBkbworCWNhc2UgIiQxIiBpbgorCSAgICAtYnwtLWJyYW5jaCkKKwkJc2hpZnQKKwkJbmV3X25hbWU9IiQxIgorCQk7OworCSAgICAtbnwtLWRyeS1ydW4pCisJCWRyeV9ydW49dAorCQk7OworCSAgICAtLW5vLWRyeS1ydW4pCisJCWRyeV9ydW49CisJCTs7CisJICAgIC1rfC0ta2VlcC1nb2luZykKKwkJZWFybHlfZXhpdD0KKwkJOzsKKwkgICAgLS1uby1rZWVwLWdvaW5nKQorCQllYXJseV9leGl0PXEKKwkJOzsKKwkgICAgLW18LS1tZXJnZXMpCisJCXNjYW5fbWVyZ2VzPXQKKwkJOzsKKwkgICAgLS1uby1tZXJnZXMpCisJCXNjYW5fbWVyZ2VzPQorCQk7OworCSAgICAtbHwtLXJlZmxvZykKKwkJc2Nhbl9yZWZsb2c9dAorCQk7OworCSAgICAtLW5vLXJlZmxvZykKKwkJc2Nhbl9yZWZsb2c9CisJCTs7CisJICAgIC1yfC0tcmVmbG9nX21lcmdlcykKKwkJc2Nhbl9yZWZsb2dfbWVyZ2VzPXQKKwkJOzsKKwkgICAgLS1uby1yZWZsb2dfbWVyZ2VzKQorCQlzY2FuX3JlZmxvZ19tZXJnZXM9CisJCTs7CisJICAgIC10fC0tbWVyZ2UtdGFyZ2V0cykKKwkJc2Nhbl9tZXJnZV90YXJnZXRzPXQKKwkJOzsKKwkgICAgLS1uby1tZXJnZS10YXJnZXRzKQorCQlzY2FuX21lcmdlX3RhcmdldHM9CisJCTs7CisJICAgIC1hfC0tYWxsKQorCQlzY2FuX3JlZmxvZz10CisJCXNjYW5fcmVmbG9nX21lcmdlcz10CisJCXNjYW5fbWVyZ2VzPXQKKwkJc2Nhbl9tZXJnZV90YXJnZXRzPXQKKwkJOzsKKwkgICAgLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJICAgICopCisJCXVzYWdlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK3Rlc3QgIiQjIiA9IDEgfHwgdXNhZ2UKKworYWxsX3N0cmF0ZWdpZXM9IiRzY2FuX3JlZmxvZyRzY2FuX3JlZmxvZ19tZXJnZXMkc2Nhbl9tZXJnZXMkc2Nhbl9tZXJnZV90YXJnZXRzIgoraWYgdGVzdCAteiAiJGFsbF9zdHJhdGVnaWVzIjsgdGhlbgorCWRpZSAibXVzdCBlbmFibGUgYXQgbGVhc3Qgb25lIG9mIC1scm10IgorZmkKKworYnJhbmNoPSIkMSIKK3Rlc3QgLXogIiRuZXdfbmFtZSIgJiYgbmV3X25hbWU9IiRicmFuY2giCisKK2lmIHRlc3QgISAteiAiJHNjYW5fcmVmbG9nIjsgdGhlbgorCWlmIHRlc3QgLXIgIiRHSVRfRElSIi9sb2dzL0hFQUQ7IHRoZW4KKwkJY2FuZGlkYXRlcz0iJChzZWFyY2hfcmVmbG9nICRicmFuY2gpIgorCWVsc2UKKwkJZGllICdyZWZsb2cgc2Nhbm5pbmcgcmVxdWVzdGVkLCBidXQnIFwKKwkJCSckR0lUX0RJUi9sb2dzL0hFQUQgbm90IHJlYWRhYmxlJworCWZpCitmaQoraWYgdGVzdCAhIC16ICIkc2Nhbl9yZWZsb2dfbWVyZ2VzIjsgdGhlbgorCWlmIHRlc3QgLXIgIiRHSVRfRElSIi9sb2dzL0hFQUQ7IHRoZW4KKwkJY2FuZGlkYXRlcz0iJGNhbmRpZGF0ZXMgJChzZWFyY2hfcmVmbG9nX21lcmdlcyAkYnJhbmNoKSIKKwllbHNlCisJCWRpZSAncmVmbG9nIHNjYW5uaW5nIHJlcXVlc3RlZCwgYnV0JyBcCisJCQknJEdJVF9ESVIvbG9ncy9IRUFEIG5vdCByZWFkYWJsZScKKwlmaQorZmkKK2lmIHRlc3QgISAteiAiJHNjYW5fbWVyZ2VzIjsgdGhlbgorCWNhbmRpZGF0ZXM9IiRjYW5kaWRhdGVzICQoc2VhcmNoX21lcmdlcyAkYnJhbmNoKSIKK2ZpCitpZiB0ZXN0ICEgLXogIiRzY2FuX21lcmdlX3RhcmdldHMiOyB0aGVuCisJY2FuZGlkYXRlcz0iJGNhbmRpZGF0ZXMgJChzZWFyY2hfbWVyZ2VfdGFyZ2V0cyAkYnJhbmNoKSIKK2ZpCisKK2NhbmRpZGF0ZXM9IiQoZ2l0IHJldi1wYXJzZSAkY2FuZGlkYXRlcyB8IHNvcnQgLXUpIgorCitpZiB0ZXN0IC16ICIkY2FuZGlkYXRlcyI7IHRoZW4KKwloaW50PQorCXRlc3QgInokYWxsX3N0cmF0ZWdpZXMiICE9ICJ6dHR0dCIgXAorCQkmJiBoaW50PSIgKG1heWJlIHRyeSBhZ2FpbiB3aXRoIC1hKSIKKwlkaWUgIm5vIGNhbmRpZGF0ZXMgZm9yICRicmFuY2ggZm91bmQkaGludCIKK2ZpCisKK2VjaG8gIioqIENhbmRpZGF0ZXMgZm9yICRicmFuY2ggKioiCitmb3IgY210IGluICRjYW5kaWRhdGVzOyBkbworCWdpdCAtLW5vLXBhZ2VyIGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlY3Q6JWggWyVjcl0gJXMiIC0tYWJicmV2LWNvbW1pdCAtMSAkY210Citkb25lIFwKK3wgc29ydCAtbiB8IGN1dCAtZDogLWYyLQorCituZXdlc3Q9IiQoZ2l0IHJldi1saXN0IC0xICRjYW5kaWRhdGVzKSIKK2lmIHRlc3QgISAteiAiJGRyeV9ydW4iOyB0aGVuCisJcHJpbnRmICIqKiBNb3N0IHJlY2VudDogIgorCWdpdCAtLW5vLXBhZ2VyIGxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiIlaCAlcyIgJG5ld2VzdAorZWxpZiAhIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAkbmV3X25hbWUgPi9kZXYvbnVsbDsgdGhlbgorCXByaW50ZiAiKiogUmVzdG9yaW5nICRuZXdfbmFtZSB0byAiCisJZ2l0IC0tbm8tcGFnZXIgbG9nIC0xIC0tcHJldHR5PXRmb3JtYXQ6IiVoICVzIiAkbmV3ZXN0CisJZ2l0IGJyYW5jaCAkbmV3X25hbWUgJG5ld2VzdAorZWxzZQorCXByaW50ZiAiTW9zdCByZWNlbnQ6ICIKKwlnaXQgLS1uby1wYWdlciBsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDoiJWggJXMiICRuZXdlc3QKKwllY2hvICIqKiAkbmV3X25hbWUgYWxyZWFkeSBleGlzdHMsIGRvaW5nIG5vdGhpbmciCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvUkVBRE1FIGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzODQ2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9SRUFETUUKQEAgLTAsMCArMSwxOCBAQAorU2FtcGxlIHByb2dyYW1zIGNhbGxhYmxlIHRocm91Z2ggZ2l0LXNoZWxsLiAgUGxhY2UgYSBkaXJlY3RvcnkgbmFtZWQKKydnaXQtc2hlbGwtY29tbWFuZHMnIGluIHRoZSBob21lIGRpcmVjdG9yeSBvZiBhIHVzZXIgd2hvc2Ugc2hlbGwgaXMKK2dpdC1zaGVsbC4gIFRoZW4gYW55b25lIGxvZ2dpbmcgaW4gYXMgdGhhdCB1c2VyIHdpbGwgYmUgYWJsZSB0byBydW4KK2V4ZWN1dGFibGVzIGluIHRoZSAnZ2l0LXNoZWxsLWNvbW1hbmRzJyBkaXJlY3RvcnkuCisKK1Byb3ZpZGVkIGNvbW1hbmRzOgorCitoZWxwOiBQcmludHMgb3V0IHRoZSBuYW1lcyBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaGVuIHJ1bgoraW50ZXJhY3RpdmVseSwgZ2l0LXNoZWxsIHdpbGwgYXV0b21hdGljYWxseSBydW4gJ2hlbHAnIG9uIHN0YXJ0dXAsCitwcm92aWRlZCBpdCBleGlzdHMuCisKK2xpc3Q6IERpc3BsYXlzIGFueSBiYXJlIHJlcG9zaXRvcnkgd2hvc2UgbmFtZSBlbmRzIHdpdGggIi5naXQiIHVuZGVyCit1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICBObyBvdGhlciBnaXQgcmVwb3NpdG9yaWVzIGFyZSB2aXNpYmxlLAorYWx0aG91Z2ggdGhleSBtaWdodCBiZSBjbG9uYWJsZSB0aHJvdWdoIGdpdC1zaGVsbC4gICdsaXN0JyBpcyBkZXNpZ25lZAordG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjYWxscyB0byBnaXQgdGhhdCBtdXN0IGJlIG1hZGUgaW4gZmluZGluZworYXZhaWxhYmxlIHJlcG9zaXRvcmllczsgaWYgeW91ciBzZXR1cCBoYXMgYWRkaXRpb25hbCByZXBvc2l0b3JpZXMgdGhhdAorc2hvdWxkIGJlIHVzZXItZGlzY292ZXJhYmxlLCB5b3UgbWF5IHdpc2ggdG8gbW9kaWZ5ICdsaXN0JworYWNjb3JkaW5nbHkuCmRpZmYgLS1naXQgYS9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9oZWxwIGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvaGVscApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzU3NzBjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvaGVscApAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworaWYgdHR5IC1zCit0aGVuCisJZWNobyAiUnVuICdoZWxwJyBmb3IgaGVscCwgb3IgJ2V4aXQnIHRvIGxlYXZlLiAgQXZhaWxhYmxlIGNvbW1hbmRzOiIKK2Vsc2UKKwllY2hvICJSdW4gJ2hlbHAnIGZvciBoZWxwLiAgQXZhaWxhYmxlIGNvbW1hbmRzOiIKK2ZpCisKK2NkICIkKGRpcm5hbWUgIiQwIikiCisKK2ZvciBjbWQgaW4gKgorZG8KKwljYXNlICIkY21kIiBpbgorCWhlbHApIDs7CisJKikgWyAtZiAiJGNtZCIgXSAmJiBbIC14ICIkY21kIiBdICYmIGVjaG8gIiRjbWQiIDs7CisJZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvbGlzdCBiL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmY4OTkzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL2xpc3QKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK3ByaW50X2lmX2JhcmVfcmVwbz0nCisJaWYgIiQoZ2l0IC0tZ2l0LWRpcj0iJDEiIHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiID0gdHJ1ZQorCXRoZW4KKwkJcHJpbnRmICIlc1xuIiAiJHsxIy4vfSIKKwlmaQorJworCitmaW5kIC10eXBlIGQgLW5hbWUgIiouZ2l0IiAtZXhlYyBzaCAtYyAiJHByaW50X2lmX2JhcmVfcmVwbyIgLS0gXHt9IFw7IC1wcnVuZSAyPi9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5IGIvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlYjFiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkKQEAgLTAsMCArMSwyNTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiIgaGctdG8tZ2l0LnB5IC0gQSBNZXJjdXJpYWwgdG8gR0lUIGNvbnZlcnRlcgorCisgICAgQ29weXJpZ2h0IChDKTIwMDcgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIiIiCisKK2ltcG9ydCBvcywgb3MucGF0aCwgc3lzCitpbXBvcnQgdGVtcGZpbGUsIHBpY2tsZSwgZ2V0b3B0CitpbXBvcnQgcmUKKworaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDMwMDAwOgorICAgIyBUaGUgYmVoYXZpb3Igb2YgdGhlIHBpY2tsZSBtb2R1bGUgY2hhbmdlZCBzaWduaWZpY2FudGx5IGluIDIuMworICAgc3lzLnN0ZGVyci53cml0ZSgiaGctdG8tZ2l0LnB5OiByZXF1aXJlcyBQeXRob24gMi4zIG9yIGxhdGVyLlxuIikKKyAgIHN5cy5leGl0KDEpCisKKyMgTWFwcyBoZyB2ZXJzaW9uIC0+IGdpdCB2ZXJzaW9uCitoZ3ZlcnMgPSB7fQorIyBMaXN0IG9mIGNoaWxkcmVuIGZvciBlYWNoIGhnIHJldmlzaW9uCitoZ2NoaWxkcmVuID0ge30KKyMgTGlzdCBvZiBwYXJlbnRzIGZvciBlYWNoIGhnIHJldmlzaW9uCitoZ3BhcmVudHMgPSB7fQorIyBDdXJyZW50IGJyYW5jaCBmb3IgZWFjaCBoZyByZXZpc2lvbgoraGdicmFuY2ggPSB7fQorIyBOdW1iZXIgb2YgbmV3IGNoYW5nZXNldHMgY29udmVydGVkIGZyb20gaGcKK2hnbmV3Y3NldHMgPSAwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHVzYWdlKCk6CisKKyAgICAgICAgcHJpbnQoIiIiXAorJXM6IFtPUFRJT05TXSA8aGdwcmo+CisKK29wdGlvbnM6CisgICAgLXMsIC0tZ2l0c3RhdGU9RklMRTogbmFtZSBvZiB0aGUgc3RhdGUgdG8gYmUgc2F2ZWQvcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmNyZW1lbnRhbHMKKyAgICAtbiwgLS1ucmVwYWNrPUlOVDogICBudW1iZXIgb2YgY2hhbmdlc2V0cyB0aGF0IHdpbGwgdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVwYWNrIChkZWZhdWx0PTAsIC0xIHRvIGRlYWN0aXZhdGUpCisgICAgLXYsIC0tdmVyYm9zZTogICAgICAgYmUgdmVyYm9zZQorCityZXF1aXJlZDoKKyAgICBoZ3ByajogIG5hbWUgb2YgdGhlIEhHIHByb2plY3QgdG8gaW1wb3J0IChkaXJlY3RvcnkpCisiIiIgJSBzeXMuYXJndlswXSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgZ2V0Z2l0ZW52KHVzZXIsIGRhdGUpOgorICAgIGVudiA9ICcnCisgICAgZWxlbXMgPSByZS5jb21waWxlKCcoLio/KVxzKzwoLiopPicpLm1hdGNoKHVzZXIpCisgICAgaWYgZWxlbXM6CisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9BVVRIT1JfTkFNRT0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMSkKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FPSIlcyIgOycgJSBlbGVtcy5ncm91cCgxKQorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX0VNQUlMPSIlcyIgOycgJSBlbGVtcy5ncm91cCgyKQorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMPSIlcyIgOycgJSBlbGVtcy5ncm91cCgyKQorICAgIGVsc2U6CisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9BVVRIT1JfTkFNRT0iJXMiIDsnICUgdXNlcgorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlUVEVSX05BTUU9IiVzIiA7JyAlIHVzZXIKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0gOycKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTD0gOycKKworICAgIGVudiArPSAnZXhwb3J0IEdJVF9BVVRIT1JfREFURT0iJXMiIDsnICUgZGF0ZQorICAgIGVudiArPSAnZXhwb3J0IEdJVF9DT01NSVRURVJfREFURT0iJXMiIDsnICUgZGF0ZQorICAgIHJldHVybiBlbnYKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdGF0ZSA9ICcnCitvcHRfbnJlcGFjayA9IDAKK3ZlcmJvc2UgPSBGYWxzZQorCit0cnk6CisgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnczp0Om46dicsIFsnZ2l0c3RhdGU9JywgJ3RlbXBkaXI9JywgJ25yZXBhY2s9JywgJ3ZlcmJvc2UnXSkKKyAgICBmb3IgbywgYSBpbiBvcHRzOgorICAgICAgICBpZiBvIGluICgnLXMnLCAnLS1naXRzdGF0ZScpOgorICAgICAgICAgICAgc3RhdGUgPSBhCisgICAgICAgICAgICBzdGF0ZSA9IG9zLnBhdGguYWJzcGF0aChzdGF0ZSkKKyAgICAgICAgaWYgbyBpbiAoJy1uJywgJy0tbnJlcGFjaycpOgorICAgICAgICAgICAgb3B0X25yZXBhY2sgPSBpbnQoYSkKKyAgICAgICAgaWYgbyBpbiAoJy12JywgJy0tdmVyYm9zZScpOgorICAgICAgICAgICAgdmVyYm9zZSA9IFRydWUKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdwYXJhbXMnKQorZXhjZXB0OgorICAgIHVzYWdlKCkKKyAgICBzeXMuZXhpdCgxKQorCitoZ3ByaiA9IGFyZ3NbMF0KK29zLmNoZGlyKGhncHJqKQorCitpZiBzdGF0ZToKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdGF0ZSk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RhdGUgZG9lcyBleGlzdCwgcmVhZGluZycpCisgICAgICAgIGYgPSBvcGVuKHN0YXRlLCAncicpCisgICAgICAgIGhndmVycyA9IHBpY2tsZS5sb2FkKGYpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoJ1N0YXRlIGRvZXMgbm90IGV4aXN0LCBmaXJzdCBydW4nKQorCitzb2NrID0gb3MucG9wZW4oJ2hnIHRpcCAtLXRlbXBsYXRlICJ7cmV2fSInKQordGlwID0gc29jay5yZWFkKCkKK2lmIHNvY2suY2xvc2UoKToKKyAgICBzeXMuZXhpdCgxKQoraWYgdmVyYm9zZToKKyAgICBwcmludCgndGlwIGlzJywgdGlwKQorCisjIENhbGN1bGF0ZSB0aGUgYnJhbmNoZXMKK2lmIHZlcmJvc2U6CisgICAgcHJpbnQoJ2FuYWx5c2luZyB0aGUgYnJhbmNoZXMuLi4nKQoraGdjaGlsZHJlblsiMCJdID0gKCkKK2hncGFyZW50c1siMCJdID0gKE5vbmUsIE5vbmUpCitoZ2JyYW5jaFsiMCJdID0gIm1hc3RlciIKK2ZvciBjc2V0IGluIHJhbmdlKDEsIGludCh0aXApICsgMSk6CisgICAgaGdjaGlsZHJlbltzdHIoY3NldCldID0gKCkKKyAgICBwcm50cyA9IG9zLnBvcGVuKCdoZyBsb2cgLXIgJWQgLS10ZW1wbGF0ZSAie3BhcmVudHN9IicgJSBjc2V0KS5yZWFkKCkuc3RyaXAoKS5zcGxpdCgnICcpCisgICAgcHJudHMgPSBtYXAobGFtYmRhIHg6IHhbOnguZmluZCgnOicpXSwgcHJudHMpCisgICAgaWYgcHJudHNbMF0gIT0gJyc6CisgICAgICAgIHBhcmVudCA9IHBybnRzWzBdLnN0cmlwKCkKKyAgICBlbHNlOgorICAgICAgICBwYXJlbnQgPSBzdHIoY3NldCAtIDEpCisgICAgaGdjaGlsZHJlbltwYXJlbnRdICs9ICggc3RyKGNzZXQpLCApCisgICAgaWYgbGVuKHBybnRzKSA+IDE6CisgICAgICAgIG1wYXJlbnQgPSBwcm50c1sxXS5zdHJpcCgpCisgICAgICAgIGhnY2hpbGRyZW5bbXBhcmVudF0gKz0gKCBzdHIoY3NldCksICkKKyAgICBlbHNlOgorICAgICAgICBtcGFyZW50ID0gTm9uZQorCisgICAgaGdwYXJlbnRzW3N0cihjc2V0KV0gPSAocGFyZW50LCBtcGFyZW50KQorCisgICAgaWYgbXBhcmVudDoKKyAgICAgICAgIyBGb3IgbWVyZ2UgY2hhbmdlc2V0cywgdGFrZSBlaXRoZXIgb25lLCBwcmVmZXJhYmx5IHRoZSAnbWFzdGVyJyBicmFuY2gKKyAgICAgICAgaWYgaGdicmFuY2hbbXBhcmVudF0gPT0gJ21hc3Rlcic6CisgICAgICAgICAgICBoZ2JyYW5jaFtzdHIoY3NldCldID0gJ21hc3RlcicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhnYnJhbmNoW3N0cihjc2V0KV0gPSBoZ2JyYW5jaFtwYXJlbnRdCisgICAgZWxzZToKKyAgICAgICAgIyBOb3JtYWwgY2hhbmdlc2V0cworICAgICAgICAjIEZvciBmaXJzdCBjaGlsZHJlbiwgdGFrZSB0aGUgcGFyZW50IGJyYW5jaCwgZm9yIHRoZSBvdGhlcnMgY3JlYXRlIGEgbmV3IGJyYW5jaAorICAgICAgICBpZiBoZ2NoaWxkcmVuW3BhcmVudF1bMF0gPT0gc3RyKGNzZXQpOgorICAgICAgICAgICAgaGdicmFuY2hbc3RyKGNzZXQpXSA9IGhnYnJhbmNoW3BhcmVudF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhnYnJhbmNoW3N0cihjc2V0KV0gPSAiYnJhbmNoLSIgKyBzdHIoY3NldCkKKworaWYgIjAiIG5vdCBpbiBoZ3ZlcnM6CisgICAgcHJpbnQoJ2NyZWF0aW5nIHJlcG9zaXRvcnknKQorICAgIG9zLnN5c3RlbSgnZ2l0IGluaXQnKQorCisjIGxvb3AgdGhyb3VnaCBldmVyeSBoZyBjaGFuZ2VzZXQKK2ZvciBjc2V0IGluIHJhbmdlKGludCh0aXApICsgMSk6CisKKyAgICAjIGluY3JlbWVudGFsLCBhbHJlYWR5IHNlZW4KKyAgICBpZiBzdHIoY3NldCkgaW4gaGd2ZXJzOgorICAgICAgICBjb250aW51ZQorICAgIGhnbmV3Y3NldHMgKz0gMQorCisgICAgIyBnZXQgaW5mbworICAgIGxvZ19kYXRhID0gb3MucG9wZW4oJ2hnIGxvZyAtciAlZCAtLXRlbXBsYXRlICJ7dGFnc31cbntkYXRlfGRhdGV9XG57YXV0aG9yfVxuIicgJSBjc2V0KS5yZWFkbGluZXMoKQorICAgIHRhZyA9IGxvZ19kYXRhWzBdLnN0cmlwKCkKKyAgICBkYXRlID0gbG9nX2RhdGFbMV0uc3RyaXAoKQorICAgIHVzZXIgPSBsb2dfZGF0YVsyXS5zdHJpcCgpCisgICAgcGFyZW50ID0gaGdwYXJlbnRzW3N0cihjc2V0KV1bMF0KKyAgICBtcGFyZW50ID0gaGdwYXJlbnRzW3N0cihjc2V0KV1bMV0KKworICAgICNnZXQgY29tbWVudAorICAgIChmZGNvbW1lbnQsIGZpbGVjb21tZW50KSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgIGNzZXRjb21tZW50ID0gb3MucG9wZW4oJ2hnIGxvZyAtciAlZCAtLXRlbXBsYXRlICJ7ZGVzY30iJyAlIGNzZXQpLnJlYWQoKS5zdHJpcCgpCisgICAgb3Mud3JpdGUoZmRjb21tZW50LCBjc2V0Y29tbWVudCkKKyAgICBvcy5jbG9zZShmZGNvbW1lbnQpCisKKyAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKQorICAgIHByaW50KCdjc2V0OicsIGNzZXQpCisgICAgcHJpbnQoJ2JyYW5jaDonLCBoZ2JyYW5jaFtzdHIoY3NldCldKQorICAgIHByaW50KCd1c2VyOicsIHVzZXIpCisgICAgcHJpbnQoJ2RhdGU6JywgZGF0ZSkKKyAgICBwcmludCgnY29tbWVudDonLCBjc2V0Y29tbWVudCkKKyAgICBpZiBwYXJlbnQ6CisgICAgICAgIHByaW50KCdwYXJlbnQ6JywgcGFyZW50KQorICAgIGlmIG1wYXJlbnQ6CisgICAgICAgIHByaW50KCdtcGFyZW50OicsIG1wYXJlbnQpCisgICAgaWYgdGFnOgorICAgICAgICBwcmludCgndGFnOicsIHRhZykKKyAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKQorCisgICAgIyBjaGVja291dCB0aGUgcGFyZW50IGlmIG5lY2Vzc2FyeQorICAgIGlmIGNzZXQgIT0gMDoKKyAgICAgICAgaWYgaGdicmFuY2hbc3RyKGNzZXQpXSA9PSAiYnJhbmNoLSIgKyBzdHIoY3NldCk6CisgICAgICAgICAgICBwcmludCgnY3JlYXRpbmcgbmV3IGJyYW5jaCcsIGhnYnJhbmNoW3N0cihjc2V0KV0pCisgICAgICAgICAgICBvcy5zeXN0ZW0oJ2dpdCBjaGVja291dCAtYiAlcyAlcycgJSAoaGdicmFuY2hbc3RyKGNzZXQpXSwgaGd2ZXJzW3BhcmVudF0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoJ2NoZWNraW5nIG91dCBicmFuY2gnLCBoZ2JyYW5jaFtzdHIoY3NldCldKQorICAgICAgICAgICAgb3Muc3lzdGVtKCdnaXQgY2hlY2tvdXQgJXMnICUgaGdicmFuY2hbc3RyKGNzZXQpXSkKKworICAgICMgbWVyZ2UKKyAgICBpZiBtcGFyZW50OgorICAgICAgICBpZiBoZ2JyYW5jaFtwYXJlbnRdID09IGhnYnJhbmNoW3N0cihjc2V0KV06CisgICAgICAgICAgICBvdGhlcmJyYW5jaCA9IGhnYnJhbmNoW21wYXJlbnRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdGhlcmJyYW5jaCA9IGhnYnJhbmNoW3BhcmVudF0KKyAgICAgICAgcHJpbnQoJ21lcmdpbmcnLCBvdGhlcmJyYW5jaCwgJ2ludG8nLCBoZ2JyYW5jaFtzdHIoY3NldCldKQorICAgICAgICBvcy5zeXN0ZW0oZ2V0Z2l0ZW52KHVzZXIsIGRhdGUpICsgJ2dpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzICIiICVzICVzJyAlIChoZ2JyYW5jaFtzdHIoY3NldCldLCBvdGhlcmJyYW5jaCkpCisKKyAgICAjIHJlbW92ZSBldmVyeXRoaW5nIGV4Y2VwdCAuZ2l0IGFuZCAuaGcgZGlyZWN0b3JpZXMKKyAgICBvcy5zeXN0ZW0oJ2ZpbmQgLiBcKCAtcGF0aCAiLi8uaGciIC1vIC1wYXRoICIuLy5naXQiIFwpIC1wcnVuZSAtbyAhIC1uYW1lICIuIiAtcHJpbnQgfCB4YXJncyBybSAtcmYnKQorCisgICAgIyByZXBvcHVsYXRlIHdpdGggY2hlY2tvdXRlZCBmaWxlcworICAgIG9zLnN5c3RlbSgnaGcgdXBkYXRlIC1DICVkJyAlIGNzZXQpCisKKyAgICAjIGFkZCBuZXcgZmlsZXMKKyAgICBvcy5zeXN0ZW0oJ2dpdCBscy1maWxlcyAteCAuaGcgLS1vdGhlcnMgfCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tc3RkaW4nKQorICAgICMgZGVsZXRlIHJlbW92ZWQgZmlsZXMKKyAgICBvcy5zeXN0ZW0oJ2dpdCBscy1maWxlcyAteCAuaGcgLS1kZWxldGVkIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAtLXN0ZGluJykKKworICAgICMgY29tbWl0CisgICAgb3Muc3lzdGVtKGdldGdpdGVudih1c2VyLCBkYXRlKSArICdnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1hIC1GICVzJyAlIGZpbGVjb21tZW50KQorICAgIG9zLnVubGluayhmaWxlY29tbWVudCkKKworICAgICMgdGFnCisgICAgaWYgdGFnIGFuZCB0YWcgIT0gJ3RpcCc6CisgICAgICAgIG9zLnN5c3RlbShnZXRnaXRlbnYodXNlciwgZGF0ZSkgKyAnZ2l0IHRhZyAlcycgJSB0YWcpCisKKyAgICAjIGRlbGV0ZSBicmFuY2ggaWYgbm90IHVzZWQgYW55bW9yZS4uLgorICAgIGlmIG1wYXJlbnQgYW5kIGxlbihoZ2NoaWxkcmVuW3N0cihjc2V0KV0pOgorICAgICAgICBwcmludCgiRGVsZXRpbmcgdW51c2VkIGJyYW5jaDoiLCBvdGhlcmJyYW5jaCkKKyAgICAgICAgb3Muc3lzdGVtKCdnaXQgYnJhbmNoIC1kICVzJyAlIG90aGVyYnJhbmNoKQorCisgICAgIyByZXRyaWV2ZSBhbmQgcmVjb3JkIHRoZSB2ZXJzaW9uCisgICAgdnZ2ID0gb3MucG9wZW4oJ2dpdCBzaG93IC0tcXVpZXQgLS1wcmV0dHk9Zm9ybWF0OiVIJykucmVhZCgpCisgICAgcHJpbnQoJ3JlY29yZCcsIGNzZXQsICctPicsIHZ2dikKKyAgICBoZ3ZlcnNbc3RyKGNzZXQpXSA9IHZ2dgorCitpZiBoZ25ld2NzZXRzID49IG9wdF9ucmVwYWNrIGFuZCBvcHRfbnJlcGFjayAhPSAtMToKKyAgICBvcy5zeXN0ZW0oJ2dpdCByZXBhY2sgLWEgLWQnKQorCisjIHdyaXRlIHRoZSBzdGF0ZSBmb3IgaW5jcmVtZW50YWxzCitpZiBzdGF0ZToKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCgnV3JpdGluZyBzdGF0ZScpCisgICAgZiA9IG9wZW4oc3RhdGUsICd3JykKKyAgICBwaWNrbGUuZHVtcChoZ3ZlcnMsIGYpCisKKyMgdmltOiBldCB0cz04IHN3PTQgc3RzPTQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC50eHQgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZjhmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQudHh0CkBAIC0wLDAgKzEsMjEgQEAKK2hnLXRvLWdpdC5weSBpcyBhYmxlIHRvIGNvbnZlcnQgYSBNZXJjdXJpYWwgcmVwb3NpdG9yeSBpbnRvIGEgZ2l0IG9uZSwKK2FuZCBwcmVzZXJ2ZXMgdGhlIGJyYW5jaGVzIGluIHRoZSBwcm9jZXNzICh1bmxpa2UgdGFpbG9yKQorCitoZy10by1naXQucHkgY2FuIHByb2JhYmx5IGJlIGdyZWF0bHkgaW1wcm92ZWQgKGl0J3MgYSByYXRoZXIgY3J1ZGUKK2NvbWJpbmF0aW9uIG9mIHNoZWxsIGFuZCBweXRob24pIGJ1dCBpdCBkb2VzIGFscmVhZHkgd29yayBxdWl0ZSB3ZWxsIGZvcgorbWUuIEZlYXR1cmVzOgorCS0gc3VwcG9ydHMgaW5jcmVtZW50YWwgY29udmVyc2lvbgorCSAgKGZvciBrZWVwaW5nIGEgZ2l0IHJlcG8gaW4gc3luYyB3aXRoIGEgaGcgb25lKQorICAgICAgICAtIHN1cHBvcnRzIGhnIGJyYW5jaGVzCisgICAgICAgIC0gY29udmVydHMgaGcgdGFncworCitOb3RlIHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IHdpbGwgYmUgY3JlYXRlZCAnaW4gcGxhY2UnIChhdCB0aGUgc2FtZQorbG9jYXRpb24gYXMgdGhlIHNvdXJjZSBoZyByZXBvKS4gWW91IHdpbGwgaGF2ZSB0byBtYW51YWxseSByZW1vdmUgdGhlCisnLmhnJyBkaXJlY3RvcnkgYWZ0ZXIgdGhlIGNvbnZlcnNpb24uCisKK0Fsc28gbm90ZSB0aGF0IHRoZSBpbmNyZW1lbnRhbCBjb252ZXJzaW9uIHVzZXMgJ3NpbXBsZScgaGcgY2hhbmdlc2V0cworaWRlbnRpZmllcnMgKG9yZGluYWxzLCBhcyBvcHBvc2VkIHRvIFNIQS0xIGlkcyksIGFuZCBzaW5jZSB0aGVzZSBpZHMKK2FyZSBub3Qgc3RhYmxlIGFjcm9zcyBkaWZmZXJlbnQgcmVwb3NpdG9yaWVzIHRoZSBoZy10by1naXQucHkgc3RhdGUgZmlsZQoraXMgZm9yZXZlciB0aWVkIHRvIG9uZSBoZyByZXBvc2l0b3J5LgorCitTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvQ0hBTkdFUyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL0NIQU5HRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3OTFmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL0NIQU5HRVMKQEAgLTAsMCArMSwyODUgQEAKK1JlbGVhc2UgMS41LjAKKz09PT09PT09PT09PT0KKworQmFja3dhcmQtaW5jb21wYXRpYmxlIGNoYW5nZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbmFtZSBvZiBjbGFzc2VzIGZvciBlbnZpcm9ubWVudCB3YXMgbWlzbmFtZWQgYXMgYCpFbnZpcm9uZW1lbnRgLgorSXQgaXMgbm93IGAqRW52aXJvbm1lbnRgLgorCitOZXcgZmVhdHVyZXMKKy0tLS0tLS0tLS0tLQorCisqIEEgVGhyZWFkLUluZGV4IGhlYWRlciBpcyBub3cgYWRkZWQgdG8gZWFjaCBlbWFpbCBzZW50IChleGNlcHQgZm9yCisgIGNvbWJpbmVkIGVtYWlscyB3aGVyZSBpdCB3b3VsZCBub3QgbWFrZSBzZW5zZSksIHNvIHRoYXQgTVMgT3V0bG9vaworICBwcm9wZXJseSBncm91cHMgbWVzc2FnZXMgYnkgdGhyZWFkcyBldmVuIHRob3VnaCB0aGV5IGhhdmUgYQorICBkaWZmZXJlbnQgc3ViamVjdCBsaW5lLiBVbmZvcnR1bmF0ZWx5LCBldmVuIGFkZGluZyB0aGlzIGhlYWRlciB0aGUKKyAgdGhyZWFkaW5nIHN0aWxsIHNlZW1zIHRvIGJlIHVucmVsaWFibGUsIGJ1dCBpdCBpcyB1bmNsZWFyIHdoZXRoZXIKKyAgdGhpcyBpcyBhbiBpc3N1ZSBvbiBvdXIgc2lkZSBvciBvbiBNUyBPdXRsb29rJ3Mgc2lkZSAoc2VlIGRpc2N1c3Npb24KKyAgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9wdWxsLzE5NCkuCisKKyogQSBuZXcgdmFyaWFibGUgbXVsdGltYWlsaG9vay5FeGNsdWRlTWVyZ2VSZXZpc2lvbnMgd2FzIGFkZGVkIHRvIHNlbmQKKyAgbm90aWZpY2F0aW9uIGVtYWlscyBvbmx5IGZvciBub24tbWVyZ2UgY29tbWl0cy4KKworKiBGb3IgZ2l0b2xpdGUgZW52aXJvbm1lbnQsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBtYWlsIG1hcAorICBpbiBhIHNlcGFyYXRlIGZpbGUgaW4gYWRkaXRpb24gdG8gZ2l0b2xpdGUuY29uZiwgdXNpbmcgdGhlIHZhcmlhYmxlCisgIG11bHRpbWFpbGhvb2suTWFpbGFkZHJlc3NNYXAuCisKK0ludGVybmFsIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgdGVzdHN1aXRlIG5vdyB1c2VzIEdJVF9QUklOVF9TSEExX0VMTElQU0lTIHdoZXJlIG5lZWRlZCBmb3IKKyAgY29tcGF0aWJpbGl0eSB3aXRoIHJlY2VudCBHaXQgdmVyc2lvbnMuIE9ubHkgdGVzdHMgYXJlIGFmZmVjdGVkLgorCisqIFdlIGRvbid0IHRyeSB0byBpbnN0YWxsIHB5Zmxha2VzIGluIHRoZSBjb250aW51b3VzIGludGVncmF0aW9uIGpvYgorICBmb3Igb2xkIFB5dGhvbiB2ZXJzaW9ucyB3aGVyZSBpdCdzIG5vIGxvbmdlciBhdmFpbGFibGUuCisKKyogU3RvcCB1c2luZyB0aGUgZGVwcmVjYXRlZCBjZ2kuZXNjYXBlIGluIFB5dGhvbiAzLgorCisqIE5ldyBmbGFrZTggd2FybmluZ3MgaGF2ZSBiZWVuIGZpeGVkLgorCisqIFB5dGhvbiAzLjYgaXMgbm93IHRlc3RlZCBhZ2FpbnN0IG9uIFRyYXZpcy1DSS4KKworKiBBIGJ1bmNoIG9mIGxndG0uY29tIHdhcm5pbmdzIGhhdmUgYmVlbiBmaXhlZC4KKworQnVnIGZpeGVzCistLS0tLS0tLS0KKworKiBTTVRQTWFpbGVyIGxvZ3MgaW4gb25seSBvbmNlIG5vdy4gSXQgdXNlZCB0byByZS1sb2dpbiBmb3IgZWFjaCBlbWFpbAorICBzZW50IHdoaWNoIHRyaWdnZXJlZCBlcnJvcnMgZm9yIHNvbWUgU01UUCBzZXJ2ZXJzLgorCisqIG1pZ3JhdGUtbWFpbGhvb2stY29uZmlnIHdhcyBicm9rZW4gYnkgaW50ZXJuYWwgcmVmYWN0b3JpbmcsIGl0CisgIHNob3VsZCBub3cgd29yayBhZ2Fpbi4KKworVGhpcyB2ZXJzaW9uIHdhcyB0ZXN0ZWQgd2l0aCBQeXRob24gMi42IHRvIDMuNy4gSXQgd2FzIHRlc3RlZCB3aXRoIEdpdAorMS43LjEwLjQwNi5nZGM4MDEsIDIuMTUuMSBhbmQgMi4yMC4xLjk4LmdlY2JkYWYwLgorCitSZWxlYXNlIDEuNC4wCis9PT09PT09PT09PT09CisKK05ldyBmZWF0dXJlcyB0byB0cm91Ymxlc2hvb3QgYSBnaXQtbXVsdGltYWlsIGluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogT25lIGNhbiBub3cgcGVyZm9ybSBhIGJhc2ljIGNoZWNrIG9mIGdpdC1tdWx0aW1haWwncyBzZXR1cCBieQorICBydW5uaW5nIHRoZSBob29rIHdpdGggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgIEdJVF9NVUxUSU1BSUxfQ0hFQ0tfU0VUVVAgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZy4gU2VlCisgIGRvYy90cm91Ymxlc2hvb3RpbmcucnN0IGZvciBkZXRhaWxzLgorCisqIEEgbmV3IGxvZyBmaWxlcyBzeXN0ZW0gd2FzIGFkZGVkLiBTZWUgdGhlIG11bHRpbWFpbGhvb2subG9nRmlsZSwKKyAgbXVsdGltYWlsaG9vay5lcnJvckxvZ0ZpbGUgYW5kIG11bHRpbWFpbGhvb2suZGVidWdMb2dGaWxlIHZhcmlhYmxlcy4KKworKiBnaXRfbXVsdGltYWlsLnB5IGNhbiBub3cgYmUgbWFkZSBtb3JlIHZlcmJvc2UgdXNpbmcKKyAgbXVsdGltYWlsaG9vay52ZXJib3NlLgorCisqIEEgbmV3IG9wdGlvbiAtLWNoZWNrLXJlZi1maWx0ZXIgaXMgbm93IGF2YWlsYWJsZSB0byBoZWxwIGRlYnVnZ2luZworICB0aGUgcmVmRmlsdGVyKiBvcHRpb25zLgorCitGb3JtYXR0aW5nIGVtYWlscworLS0tLS0tLS0tLS0tLS0tLS0KKworKiBGb3JtYXR0aW5nIG9mIGVtYWlscyB3YXMgbWFkZSBzbGlnaHRseSBtb3JlIGNvbXBhY3QsIHRvIHJlZHVjZSB0aGUKKyAgb2RkcyBvZiBoYXZpbmcgbG9uZyBzdWJqZWN0IGxpbmVzIHRydW5jYXRlZCBvciB3cmFwcGVkIGluIHNob3J0IGxpc3QKKyAgb2YgY29tbWl0cy4KKworKiBtdWx0aW1haWxob29rLmVtYWlsUHJlZml4IG1heSBub3cgdXNlIHRoZSAnJShyZXBvX3Nob3J0bmFtZSlzJworICBwbGFjZWhvbGRlciBmb3IgdGhlIHJlcG9zaXRvcnkncyBzaG9ydCBuYW1lLgorCisqIEEgbmV3IG9wdGlvbiBtdWx0aW1haWxob29rLnN1YmplY3RNYXhMZW5ndGggaXMgYXZhaWxhYmxlIHRvIHRydW5jYXRlCisgIG92ZXJseSBsb25nIHN1YmplY3QgbGluZXMuCisKK0J1ZyBmaXhlcyBhbmQgbWlub3IgY2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogT3B0aW9ucyByZWZGaWx0ZXJEb1NlbmRSZWdleCBhbmQgcmVmRmlsdGVyRG9udFNlbmRSZWdleCB3ZXJlCisgIGVzc2VudGlhbGx5IGJyb2tlbi4gVGhleSBzaG91bGQgd29yayBub3cuCisKKyogVGhlIGJlaGF2aW9yIHdoZW4gYm90aCByZWZGaWx0ZXJ7RG8sRG9udH1TZW5kUmVnZXggYW5kCisgIHJlZkZpbHRlcntFeGNsdXNpb24sSW5jbHVzaW9ufVJlZ2V4IGFyZSBzZXQgaGF2ZSBiZWVuIHNsaWdodGx5CisgIGNoYW5nZWQuIEV4Y2x1c2lvbi9JbmNsdXNpb24gaXMgbm93IHN0cmljdGx5IHN0cm9uZ2VyIHRoYW4KKyAgRG9TZW5kL0RvbnRTZW5kLgorCisqIFRoZSBtYW5hZ2VtZW50IG9mIHByZWNlZGVuY2Ugd2hlbiBhIHNldHRpbmcgY2FuIGJlIGNvbXB1dGVkIGluCisgIG11bHRpcGxlIHdheXMgaGFzIGJlZW4gY29uc2lkZXJhYmx5IHJlZmFjdG9yZWQgYW5kIG1vZGlmaWVkLgorICBtdWx0aW1haWxob29rLmZyb20gYW5kIG11bHRpbWFpbGhvb2sucmVwb25hbWUgbm93IGhhdmUgcHJlY2VkZW5jZQorICBvdmVyIHRoZSBlbnZpcm9ubWVudC1zcGVjaWZpYyBzZXR0aW5ncyAoJEdMX1JFUE8vJEdMX1VTRVIgZm9yCisgIGdpdG9saXRlLCAtLXN0YXNoLXVzZXIvcmVwbyBmb3IgU3Rhc2gsIC0tc3VibWl0dGVyLy0tcHJvamVjdCBmb3IKKyAgR2Vycml0KS4KKworKiBUaGUgY292ZXJhZ2Ugb2YgdGhlIHRlc3RzdWl0ZSBoYXMgYmVlbiBjb25zaWRlcmFibHkgaW1wcm92ZWQuIEFsbAorICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBub3cgYXBwZWFyIGF0IGxlYXN0IG9uY2UgaW4gdGhlIHRlc3RzdWl0ZS4KKworVGhpcyB2ZXJzaW9uIHdhcyB0ZXN0ZWQgd2l0aCBQeXRob24gMi42IHRvIDMuNS4gSXQgYWxzbyBtb3N0bHkgd29ya3MKK3dpdGggUHl0aG9uIDIuNCwgYnV0IHRoZXJlIGlzIG9uZSBrbm93biBicmVha2FnZSBpbiB0aGUgdGVzdHN1aXRlCityZWxhdGVkIHRvIG5vbi1hc2NpaSBjaGFyYWN0ZXJzLiBJdCB3YXMgdGVzdGVkIHdpdGggR2l0CisxLjcuMTAuNDA2LmdkYzgwMSwgMS44LjUuNiwgMi4xLjQsIGFuZCAyLjEwLjAucmMwLjEuZzA3YzkyOTIuCisKK1JlbGVhc2UgMS4zLjEgKGJ1Z2ZpeC1vbmx5IHJlbGVhc2UpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIEdlbmVyYXRlIGxpbmtzIHRvIGNvbW1pdHMgaW4gY29tYmluZWQgZW1haWxzIChpdCB3YXMgZG9uZSBvbmx5IGZvcgorICBjb21taXQgZW1haWxzIGluIDEuMy4wKS4KKworKiBGaXggYnJva2VuIGxpbmtzIG9uIFB5UGkuCisKK1JlbGVhc2UgMS4zLjAKKz09PT09PT09PT09PT0KKworKiBOZXcgb3B0aW9ucyBtdWx0aW1haWxob29rLmh0bWxJbkludHJvIGFuZCBtdWx0aW1haWxob29rLmh0bWxJbkZvb3RlcgorICBub3cgYWxsb3cgdXNpbmcgSFRNTCBpbiB0aGUgaW50cm9kdWN0aW9uIGFuZCBmb290ZXIgb2YgZW1haWxzIChlLmcuCisgIGZvciBhIG1vcmUgcGxlYXNhbnQgZm9ybWF0dGluZyBvciB0byBpbnNlcnQgYSBsaW5rIHRvIHRoZSBjb21taXQgb24KKyAgYSB3ZWIgaW50ZXJmYWNlKS4KKworKiBBIG5ldyBvcHRpb24gbXVsdGltYWlsaG9vay5jb21taXRCcm93c2VVUkwgZ2l2ZXMgYSBzaW1wbGVyIChhbmQgbGVzcworICBmbGV4aWJsZSkgd2F5IHRvIGFkZCBhIGxpbmsgdG8gYSB3ZWIgaW50ZXJmYWNlIGZvciBjb21taXQgZW1haWxzCisgIHRoYW4gbXVsdGltYWlsaG9vay5odG1sSW5JbnRybyBhbmQgbXVsdGltYWlsaG9vay5odG1sSW5Gb290ZXIuCisKKyogQSBuZXcgcHVibGljIGZ1bmN0aW9uIGNvbmZpZy5hZGRfY29uZmlnX3BhcmFtZXRlcnMgd2FzIGFkZGVkIHRvCisgIGFsbG93IGN1c3RvbSBob29rcyB0byBzZXQgc3BlY2lmaWMgR2l0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBTZWUgYW4gZXhhbXBsZSBpbgorICBwb3N0LXJlY2VpdmUuZXhhbXBsZS4KKworKiBFcnJvciBoYW5kbGluZyBmb3IgU01UUCBoYXMgYmVlbiBpbXByb3ZlZCAod2UgdXNlZCB0byBwcmludCBQeXRob24KKyAgYmFja3RyYWNlcyBmb3IgbGVnaXRpbWF0ZSBlcnJvcnMpLgorCisqIFRoZSBTTVRQIG1haWxlciBjYW4gbm93IGNoZWNrIFRMUyBjZXJ0aWZpY2F0ZXMgd2hlbiB0aGUgbmV3bHkgYWRkZWQKKyAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBtdWx0aW1haWxob29rLnNtdHBDQUNlcnRzLgorCisqIFB5dGhvbiAzIHBvcnRhYmlsaXR5IGhhcyBiZWVuIGltcHJvdmVkLgorCisqIFRoZSBkb2N1bWVudGF0aW9uJ3MgZm9ybWF0dGluZyBoYXMgYmVlbiBpbXByb3ZlZC4KKworKiBUaGUgdGVzdHN1aXRlIGhhcyBiZWVuIGltcHJvdmVkICh3ZSBub3cgdXNlIHB5Zmxha2VzIHRvIGNoZWNrIGZvcgorICBlcnJvcnMgaW4gdGhlIGNvZGUpLgorCitUaGlzIHZlcnNpb24gaGFzIGJlZW4gdGVzdGVkIHdpdGggUHl0aG9uIDIuNCBhbmQgMi42IHRvIDMuNSwgYW5kIEdpdAordjEuNy4xMC00MDYtZ2RjODAxZTcsIDIuMS40IGFuZCAyLjguMS4zMzkuZzNhZDE1ZmQuCisKK05vIGNoYW5nZSBzaW5jZSAxLjMgUkMxLgorCitSZWxlYXNlIDEuMi4wCis9PT09PT09PT09PT09CisKKyogSXQgaXMgbm93IHBvc3NpYmxlIHRvIGV4Y2x1ZGUgc29tZSByZWZzIChlLmcuIGV4Y2x1ZGUgc29tZSBicmFuY2hlcworICBvciB0YWdzKS4gU2VlIHJlZkZpbHRlckRvU2VuZFJlZ2V4LCByZWZGaWx0ZXJEb250U2VuZFJlZ2V4LAorICByZWZGaWx0ZXJJbmNsdXNpb25SZWdleCBhbmQgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXguCisKKyogTmV3IGNvbW1pdEVtYWlsRm9ybWF0IG9wdGlvbiB3aGljaCBjYW4gYmUgc2V0IHRvICJodG1sIiB0byBnZW5lcmF0ZQorICBzaW1wbGUgY29sb3JpemVkIGRpZmZzIHVzaW5nIEhUTUwgZm9yIHRoZSBjb21taXQgZW1haWxzLgorCisqIGdpdC1tdWx0aW1haWwgY2FuIG5vdyBiZSByYW4gYXMgYSBHZXJyaXQgcmVmLXVwZGF0ZWQgaG9vaywgb3IgZnJvbQorICBBdGxhc3NpYW4gQml0QnVja2V0IFNlcnZlciAoZm9ybWVybHkga25vd24gYXMgQXRsYXNzaWFuIFN0YXNoKS4KKworKiBUaGUgRnJvbTogZmllbGQgaXMgbm93IG1vcmUgY3VzdG9taXplYWJsZS4gSXQgY2FuIGJlIHNldAorICBpbmRlcGVuZGVudGx5IGZvciByZWZjaGFuZ2UgZW1haWxzIGFuZCBjb21taXQgZW1haWxzIChzZWUKKyAgZnJvbUNvbW1pdCwgZnJvbVJlZkNoYW5nZSkuIFRoZSBzcGVjaWFsIHZhbHVlcyBwdXNoZXIgYW5kIGF1dGhvciBjYW4KKyAgYmUgdXNlZCBpbiB0aGVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisqIEEgbmV3IGNvbW1hbmQtbGluZSBvcHRpb24sIC0tdmVyc2lvbiwgd2FzIGFkZGVkLiBUaGUgdmVyc2lvbiBpcyBhbHNvCisgIGF2YWlsYWJsZSBpbiB0aGUgWC1HaXQtTXVsdGltYWlsLVZlcnNpb24gaGVhZGVyIG9mIHNlbnQgZW1haWxzLgorCisqIFNldCBYLUdpdC1Ob3RpZmljYXRpb25UeXBlIGhlYWRlciB0byBkaWZmZXJlbnRpYXRlIHRoZSB2YXJpb3VzIHR5cGVzCisgIG9mIG5vdGlmaWNhdGlvbnMuIEN1cnJlbnQgdmFsdWVzIGFyZTogZGlmZiwgcmVmX2NoYW5nZWRfcGx1c19kaWZmLAorICByZWZfY2hhbmdlZC4KKworKiBQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBQeXRob24gMy4gVGhlIHRlc3RzdWl0ZSBwYXNzZXMgd2l0aCBQeXRob24gMywKKyAgYnV0IGl0IGhhcyBub3QgcmVjZWl2ZWQgYXMgbXVjaCB0ZXN0aW5nIGFzIHRoZSBQeXRob24gMiB2ZXJzaW9uIHlldC4KKworKiBTZXZlcmFsIGVuY29kaW5nLXJlbGF0ZWQgZml4ZXMuIFVURi04IGNoYXJhY3RlcnMgd29yayBpbiBtb3JlCisgIHNpdHVhdGlvbnMgKGJ1dCBub24tYXNjaWkgY2hhcmFjdGVycyBpbiBlbWFpbCBhZGRyZXNzIGFyZSBzdGlsbCBub3QKKyAgc3VwcG9ydGVkKS4KKworKiBUaGUgdGVzdHN1aXRlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiBncmVhdGx5IGltcHJvdmVkLgorCitQbHVzIGFsbCB0aGUgYnVnZml4ZXMgZnJvbSB2ZXJzaW9uIDEuMS4xLgorCitUaGlzIHZlcnNpb24gaGFzIGJlZW4gdGVzdGVkIHdpdGggUHl0aG9uIDIuNCBhbmQgMi42IHRvIDMuNSwgYW5kIEdpdAordjEuNy4xMC00MDYtZ2RjODAxZTcsIGdpdC0xLjguMi4zIGFuZCAyLjYuMC4gR2l0IHZlcnNpb25zIHByaW9yIHRvCit2MS43LjEwLTQwNi1nZGM4MDFlNyBwcm9iYWJseSB3b3JrLCBidXQgY2Fubm90IHJ1biB0aGUgdGVzdHN1aXRlCitwcm9wZXJseS4KKworUmVsZWFzZSAxLjEuMSAoYnVnZml4LW9ubHkgcmVsZWFzZSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogVGhlIFNNVFAgbWFpbGVyIHdhcyBub3Qgd29ya2luZyB3aXRoIFB5dGhvbiAyLjQuCisKK1JlbGVhc2UgMS4xLjAKKz09PT09PT09PT09PT0KKworKiBXaGVuIGEgc2luZ2xlIGNvbW1pdCBpcyBwdXNoZWQsIG9taXQgdGhlIHJlZmVyZW5jZSBjaGFuZ2VkIGVtYWlsLgorICBTZXQgbXVsdGltYWlsaG9vay5jb21iaW5lV2hlblNpbmdsZUNvbW1pdCB0byBmYWxzZSB0byBkaXNhYmxlIHRoaXMKKyAgbmV3IGZlYXR1cmUuCisKKyogSW4gZ2l0b2xpdGUgZW52aXJvbm1lbnRzLCB0aGUgcHVzaGVyJ3MgZW1haWwgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcworICB0aGUgRnJvbSBhZGRyZXNzIGJ5IGNyZWF0aW5nIGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBjb21tZW50IGJsb2NrIGluCisgIGdpdG9saXRlLmNvbmYgKHNlZSBtdWx0aW1haWxob29rLmZyb20gaW4gUkVBRE1FKS4KKworKiBTdXBwb3J0IGZvciBTTVRQIGF1dGhlbnRpY2F0aW9uIGFuZCBTU0wvVExTIGVuY3J5cHRpb24gd2FzIGFkZGVkLAorICBzZWUgc210cFVzZXIsIHNtdHBQYXNzLCBzbXRwRW5jcnlwdGlvbiBpbiBSRUFETUUuCisKKyogQSBuZXcgb3B0aW9uIHNjYW5Db21taXRGb3JDYyB3YXMgYWRkZWQgdG8gYWxsb3cgZ2l0LW11bHRpbWFpbCB0bworICBzZWFyY2ggdGhlIGNvbW1pdCBtZXNzYWdlIGZvciAnQ2M6IC4uLicgbGluZXMsIGFuZCBhZGQgdGhlCisgIGNvcnJlc3BvbmRpbmcgZW1haWxzIGluIENjLgorCisqIElmICRVU0VSIGlzIG5vdCBzZXQsIHVzZSB0aGUgdmFyaWFibGUgJFVTRVJOQU1FLiBUaGlzIGlzIG5lZWRlZCBvbgorICBXaW5kb3dzIHBsYXRmb3JtIHRvIHJlY29nbml6ZSB0aGUgcHVzaGVyLgorCisqIFRoZSBlbWFpbFByZWZpeCB2YXJpYWJsZSBjYW4gbm93IGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gcmVtb3ZlCisgIHRoZSBwcmVmaXguCisKKyogQSBzaG9ydCB0dXRvcmlhbCB3YXMgYWRkZWQgaW4gZG9jL2dpdG9saXRlLnJzdCB0byBzZXQgdXAKKyAgZ2l0LW11bHRpbWFpbCB3aXRoIGdpdG9saXRlLgorCisqIFRoZSBwb3N0LXJlY2VpdmUgZmlsZSB3YXMgcmVuYW1lZCB0byBwb3N0LXJlY2VpdmUuZXhhbXBsZS4gSXQgaGFzCisgIGFsd2F5cyBiZWVuIGFuIGV4YW1wbGUgKHRoZSBzdGFuZGFyZCB3YXkgdG8gY2FsbCBnaXQtbXVsdGltYWlsIGlzIHRvCisgIGNhbGwgZ2l0X211bHRpbWFpbC5weSksIGJ1dCBpdCB3YXMgdW5jbGVhciB0byBtYW55IHVzZXJzLgorCisqIEEgbmV3IHJlZmNoYW5nZVNob3dHcmFwaCBvcHRpb24gd2FzIGFkZGVkIHRvIG1ha2UgaXQgcG9zc2libGUgdG8KKyAgaW5jbHVkZSBib3RoIGEgZ3JhcGggYW5kIGEgbG9nIGluIHRoZSBzdW1tYXJ5IGVtYWlscy4gIFRoZSBvcHRpb25zCisgIHRvIGNvbnRyb2wgdGhlIGdyYXBoIGZvcm1hdHRpbmcgY2FuIGJlIHNldCB2aWEgdGhlIG5ldyBncmFwaE9wdHMKKyAgb3B0aW9uLgorCisqIE5ldyBvcHRpb24gLS1mb3JjZS1zZW5kIHdhcyBhZGRlZCB0byBkaXNhYmxlIG5ldyBjb21taXQgZGV0ZWN0aW9uCisgIGZvciB1cGRhdGUgaG9vay4gT25lIHVzZS1jYXNlIGlzIHRvIHJ1biBnaXRfbXVsdGltYWlsLnB5IGFmdGVyCisgIHJ1bm5pbmcgImdpdCBmZXRjaCIgdG8gc2VuZCBlbWFpbHMgYWJvdXQgY29tbWl0cyB0aGF0IGhhdmUganVzdCBiZWVuCisgIGZldGNoZWQgKHRoZSBkZXRlY3Rpb24gb2YgbmV3IGNvbW1pdHMgd2FzIHVucmVsaWFibGUgaW4gdGhpcyBtb2RlKS4KKworKiBUaGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSB3YXMgY29uc2lkZXJhYmx5IGltcHJvdmVkIChjb250aW51b3VzCisgIGludGVncmF0aW9uIHdpdGggdHJhdmlzLWNpLCBhdXRvbWF0aWMgY2hlY2sgb2YgUEVQOCBhbmQgUlNUIHN5bnRheCwKKyAgbWFueSBpbXByb3ZlbWVudHMgdG8gdGhlIHRlc3Qgc2NyaXB0cykuCisKK1RoaXMgdmVyc2lvbiBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBQeXRob24gMi40IHRvIDIuNywgYW5kIEdpdCAxLjcuMSB0bworMi40LgorCitSZWxlYXNlIDEuMC4wCis9PT09PT09PT09PT09CisKKyogRml4IGVuY29kaW5nIG9mIG5vbi1BU0NJSSBlbWFpbCBhZGRyZXNzZXMgaW4gZW1haWwgaGVhZGVycy4KKworKiBGaXggYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgYnVncyBmb3Igb2xkZXIgUHl0aG9uIDIueCB2ZXJzaW9ucy4KKworKiBGaXggYSBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBidWcgZm9yIEdpdCAxLjcuMS4KKworKiBBZGQgYW4gb3B0aW9uIGNvbW1pdERpZmZPcHRzIHRvIGN1c3RvbWl6ZSBsb2dzIGZvciByZXZpc2lvbnMuCisKKyogUGFzcyAiLW9pIiB0byBzZW5kbWFpbCBieSBkZWZhdWx0IHRvIHByZXZlbnQgcHJlbWF0dXJlIHRlcm1pbmF0aW9uCisgIG9uIGEgbGluZSBjb250YWluaW5nIG9ubHkgIi4iLgorCisqIFN0YWdnZXIgZW1haWwgIkRhdGU6IiB2YWx1ZXMgaW4gYW4gYXR0ZW1wdCB0byBoZWxwIG1haWwgY2xpZW50cworICB0aHJlYWQgdGhlIGVtYWlscyBpbiB0aGUgcmlnaHQgb3JkZXIuCisKKyogSWYgYSBtYWlsaW5nIGxpc3Qgc2V0dGluZyBpcyBtaXNzaW5nLCBqdXN0IHNraXAgc2VuZGluZyB0aGUKKyAgY29ycmVzcG9uZGluZyBlbWFpbCAod2l0aCBhIHdhcm5pbmcpIGluc3RlYWQgb2YgZmFpbGluZy4KKworKiBBZGQgYSBYLUdpdC1Ib3N0IGhlYWRlciB0aGF0IGNhbiBiZSB1c2VkIGZvciBlbWFpbCBmaWx0ZXJpbmcuCisKKyogQWxsb3cgdGhlIHNlbmRlcidzIGZ1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSB0byBiZSBjb25maWd1cmVkLgorCisqIE1pbm9yIGRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnRzLgorCisqIEFkZCB0aGlzIENIQU5HRVMgZmlsZS4KKworCitSZWxlYXNlIDAuOS4wCis9PT09PT09PT09PT09CisKKyogSW5pdGlhbCByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvQ09OVFJJQlVUSU5HLnJzdCBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL0NPTlRSSUJVVElORy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyMGE1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL0NPTlRSSUJVVElORy5yc3QKQEAgLTAsMCArMSw2MCBAQAorQ29udHJpYnV0aW5nCis9PT09PT09PT09PT0KKworZ2l0LW11bHRpbWFpbCBpcyBhbiBvcGVuLXNvdXJjZSBwcm9qZWN0LCBidWlsdCBieSB2b2x1bnRlZXJzLiBXZSB3b3VsZAord2VsY29tZSB5b3VyIGhlbHAhCisKK1RoZSBjdXJyZW50IG1haW50YWluZXJzIGFyZSBgTWF0dGhpZXUgTW95IDxodHRwOi8vbWF0dGhpZXUtbW95LmZyPmBfXyBhbmQKK2BNaWNoYWVsIEhhZ2dlcnR5IDxodHRwczovL2dpdGh1Yi5jb20vbWhhZ2dlcj5gX18uCisKK1BsZWFzZSBub3RlIHRoYXQgYWx0aG91Z2ggYSBjb3B5IG9mIGdpdC1tdWx0aW1haWwgaXMgZGlzdHJpYnV0ZWQgaW4KK3RoZSAiY29udHJpYiIgc2VjdGlvbiBvZiB0aGUgbWFpbiBHaXQgcHJvamVjdCwgZGV2ZWxvcG1lbnQgdGFrZXMgcGxhY2UKK2luIGEgc2VwYXJhdGUgYGdpdC1tdWx0aW1haWwgcmVwb3NpdG9yeSBvbiBHaXRIdWJgXy4KKworV2hlbmV2ZXIgZW5vdWdoIGNoYW5nZXMgdG8gZ2l0LW11bHRpbWFpbCBoYXZlIGFjY3VtdWxhdGVkLCBhIG5ldworY29kZS1kcm9wIG9mIGdpdC1tdWx0aW1haWwgd2lsbCBiZSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgR2l0Citwcm9qZWN0LgorCitXZSB1c2UgdGhlIEdpdEh1YiBpc3N1ZSB0cmFja2VyIHRvIGtlZXAgdHJhY2sgb2YgYnVncyBhbmQgZmVhdHVyZQorcmVxdWVzdHMsIGFuZCB3ZSB1c2UgR2l0SHViIHB1bGwgcmVxdWVzdHMgdG8gZXhjaGFuZ2UgcGF0Y2hlcyAodGhvdWdoLAoraWYgeW91IHByZWZlciwgeW91IGNhbiBzZW5kIHBhdGNoZXMgdmlhIHRoZSBHaXQgbWFpbGluZyBsaXN0IHdpdGggQ0MKK3RvIHRoZSBtYWludGFpbmVycykuIFBsZWFzZSBzaWduIG9mZiB5b3VyIHBhdGNoZXMgYXMgcGVyIHRoZSBgR2l0Citwcm9qZWN0IHByYWN0aWNlCis8aHR0cHM6Ly9naXRodWIuY29tL2dpdC9naXQvYmxvYi9tYXN0ZXIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyNMMjM0PmBfXy4KKworUGxlYXNlIHZvdGUgZm9yIGlzc3VlcyB5b3Ugd291bGQgbGlrZSB0byBiZSBhZGRyZXNzZWQgaW4gcHJpb3JpdHkKKyhjbGljayAiYWRkIHlvdXIgcmVhY3Rpb24iIGFuZCB0aGVuIHRoZSAiKzEiIHRodW1icy11cCBidXR0b24gb24gdGhlCitHaXRIdWIgaXNzdWUpLgorCitHZW5lcmFsIGRpc2N1c3Npb24gb2YgZ2l0LW11bHRpbWFpbCBjYW4gdGFrZSBwbGFjZSBvbiB0aGUgbWFpbiBgR2l0CittYWlsaW5nIGxpc3RgXy4KKworUGxlYXNlIENDIGVtYWlscyByZWdhcmRpbmcgZ2l0LW11bHRpbWFpbCB0byB0aGUgbWFpbnRhaW5lcnMgc28gdGhhdCB3ZQorZG9uJ3Qgb3Zlcmxvb2sgdGhlbS4KKworSGVscCBuZWVkZWQ6IHRlc3RlcnMvbWFpbnRhaW5lciBmb3Igc3BlY2lmaWMgZW52aXJvbm1lbnRzL09TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGN1cnJlbnQgbWFpbnRhaW5lciB1c2VzIGFuZCB0ZXN0cyBnaXQtbXVsdGltYWlsIG9uIExpbnV4IHdpdGggdGhlCitHZW5lcmljIGVudmlyb25tZW50LiBNb3JlIHRlc3RlcnMsIG9yIGJldHRlciBjb250cmlidXRvcnMgYXJlIG5lZWRlZAordG8gdGVzdCBnaXQtbXVsdGltYWlsIG9uIG90aGVyIHJlYWwtbGlmZSBzZXR1cHM6CisKKyogTWFjIE9TIFgsIFdpbmRvd3M6IGdpdC1tdWx0aW1haWwgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gdGhlc2UKKyAgcGxhdGZvcm1zLiBCdXQgc2luY2Ugd2UgaGF2ZSBubyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYW5kIHRyeSB0bworICB3cml0ZSBjb2RlIGFzIHBvcnRhYmxlIGFzIHBvc3NpYmxlLCBpdCBpcyBwb3NzaWJsZSB0aGF0CisgIGdpdC1tdWx0aW1haWwgYWxyZWFkeSBydW5zIHRoZXJlIGFuZCBpZiBub3QsIGl0IGlzIGxpa2VseSB0aGF0IGl0CisgIGNvdWxkIGJlIHBvcnRlZCBlYXNpbHkuCisKKyAgUGF0Y2hlcyB0byBpbXByb3ZlIHN1cHBvcnQgZm9yIFdpbmRvd3MgYW5kIE9TIFggYXJlIHdlbGNvbWUuCisgIElkZWFsbHksIHRoZXJlIHdvdWxkIGJlIGEgc3ViLW1haW50YWluZXIgZm9yIGVhY2ggT1Mgd2hvIHdvdWxkIHRlc3QKKyAgYXQgbGVhc3Qgb25jZSBiZWZvcmUgZWFjaCByZWxlYXNlIChhcm91bmQgdHdpY2UgYSB5ZWFyKS4KKworKiBHZXJyaXQsIFN0YXNoLCBHaXRvbGl0ZSBlbnZpcm9ubWVudHM6IGFsdGhvdWdoIHRoZSB0ZXN0c3VpdGUKKyAgY29udGFpbnMgdGVzdHMgZm9yIHRoZXNlIGVudmlyb25tZW50cywgYSB0ZXN0ZXIvbWFpbnRhaW5lciBmb3IgZWFjaAorICBlbnZpcm9ubWVudCB3b3VsZCBiZSB3ZWxjb21lIHRvIHRlc3QgYW5kIHJlcG9ydCBmYWlsdXJlIChvciBzdWNjZXNzKQorICBvbiByZWFsLWxpZmUgZW52aXJvbm1lbnRzIHBlcmlvZGljYWxseSAoaGVyZSBhbHNvLCBmZWVkYmFjayBiZWZvcmUKKyAgZWFjaCByZWxlYXNlIHdvdWxkIGJlIGhpZ2hseSBhcHByZWNpYXRlZCkuCisKKworLi4gX2BnaXQtbXVsdGltYWlsIHJlcG9zaXRvcnkgb24gR2l0SHViYDogaHR0cHM6Ly9naXRodWIuY29tL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbAorLi4gX2BHaXQgbWFpbGluZyBsaXN0YDogZ2l0QHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvUkVBRE1FLkdpdCBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5HaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0NDQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5HaXQKQEAgLTAsMCArMSwxNSBAQAorVGhpcyBjb3B5IG9mIGdpdC1tdWx0aW1haWwgaXMgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgImNvbnRyaWIiCitzZWN0aW9uIG9mIHRoZSBHaXQgcHJvamVjdCBhcyBhIGNvbnZlbmllbmNlIHRvIEdpdCB1c2Vycy4KK2dpdC1tdWx0aW1haWwgaXMgZGV2ZWxvcGVkIGFzIGFuIGluZGVwZW5kZW50IHByb2plY3QgYXQgdGhlIGZvbGxvd2luZword2Vic2l0ZToKKworICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwKKworVGhlIHZlcnNpb24gaW4gdGhpcyBkaXJlY3Rvcnkgd2FzIG9idGFpbmVkIGZyb20gdGhlIHVwc3RyZWFtIHByb2plY3QKK29uIEphbnVhcnkgMDcgMjAxOSBhbmQgY29uc2lzdHMgb2YgdGhlICJnaXQtbXVsdGltYWlsIiBzdWJkaXJlY3RvcnkgZnJvbQorcmV2aXNpb24KKworICAgIDA0ZTgwZTZjNDBiZTQ2NWNjNjJiNmMyNDZmMGZjYjhmZDJjZmQ0NTQgcmVmcy90YWdzLzEuNS4wCisKK1BsZWFzZSBzZWUgdGhlIFJFQURNRSBmaWxlIGluIHRoaXMgZGlyZWN0b3J5IGZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cKK3RvIHJlcG9ydCBidWdzIG9yIGNvbnRyaWJ1dGUgdG8gZ2l0LW11bHRpbWFpbC4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5taWdyYXRlLWZyb20tcG9zdC1yZWNlaXZlLWVtYWlsIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvUkVBRE1FLm1pZ3JhdGUtZnJvbS1wb3N0LXJlY2VpdmUtZW1haWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2YTk3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5taWdyYXRlLWZyb20tcG9zdC1yZWNlaXZlLWVtYWlsCkBAIC0wLDAgKzEsMTQ1IEBACitnaXQtbXVsdGltYWlsIGlzIGNsb3NlIHRvLCBidXQgbm90IGV4YWN0bHksIGEgcGx1Zy1pbiByZXBsYWNlbWVudCBmb3IKK3RoZSBvbGQgR2l0IHByb2plY3Qgc2NyaXB0IGNvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsLiAgVGhpcworZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkaWZmZXJlbmNlcyBhbmQgZXhwbGFpbnMgaG93IHRvIGNvbmZpZ3VyZQorZ2l0LW11bHRpbWFpbCB0byBnZXQgYmVoYXZpb3IgY2xvc2VzdCB0byB0aGF0IG9mIHBvc3QtcmVjZWl2ZS1lbWFpbC4KKworSWYgeW91IGFyZSBpbiBhIGh1cnJ5Cis9PT09PT09PT09PT09PT09PT09PT0KKworQSBzY3JpcHQgY2FsbGVkIG1pZ3JhdGUtbWFpbGhvb2stY29uZmlnIGlzIGluY2x1ZGVkIHdpdGgKK2dpdC1tdWx0aW1haWwuICBJZiB5b3UgcnVuIHRoaXMgc2NyaXB0IHdpdGhpbiBhIEdpdCByZXBvc2l0b3J5IHRoYXQgaXMKK2NvbmZpZ3VyZWQgdG8gdXNlIHBvc3QtcmVjZWl2ZS1lbWFpbCwgaXQgd2lsbCBjb252ZXJ0IHRoZQorY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbnRvIHRoZSBhcHByb3hpbWF0ZSBlcXVpdmFsZW50IHNldHRpbmdzIGZvcgorZ2l0LW11bHRpbWFpbC4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBydW4KKworICAgIG1pZ3JhdGUtbWFpbGhvb2stY29uZmlnIC0taGVscAorCisKK0NvbmZpZ3VyYXRpb24gZGlmZmVyZW5jZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBUaGUgbmFtZXMgb2YgdGhlIGNvbmZpZyBvcHRpb25zIGZvciBnaXQtbXVsdGltYWlsIGFyZSBpbiBuYW1lc3BhY2UKKyAgIm11bHRpbWFpbGhvb2suKiIgaW5zdGVhZCBvZiAiaG9va3MuKiIuICAoRWRpdG9yaWFsIGNvbW1lbnQ6CisgIHBvc3QtcmVjZWl2ZS1lbWFpbCBzaG91bGQgbmV2ZXIgaGF2ZSB1c2VkIHN1Y2ggYSBnZW5lcmljIHRvcC1sZXZlbAorICBuYW1lc3BhY2UuKQorCisqIEluIGVtYWlscyBhYm91dCBuZXcgYW5ub3RhdGVkIHRhZ3MsIHBvc3QtcmVjZWl2ZS1lbWFpbCBpbmNsdWRlcyBhCisgIHNob3J0bG9nIG9mIGFsbCBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyBhbm5vdGF0ZWQgdGFnLiAgVG8gZ2V0CisgIHRoaXMgYmVoYXZpb3Igd2l0aCBnaXQtbXVsdGltYWlsLCB5b3UgbmVlZCB0byBzZXQKKyAgbXVsdGltYWlsaG9vay5hbm5vdW5jZXNob3J0bG9nIHRvIHRydWU6CisKKyAgICAgIGdpdCBjb25maWcgbXVsdGltYWlsaG9vay5hbm5vdW5jZXNob3J0bG9nIHRydWUKKworKiBtdWx0aW1haWxob29rLmNvbW1pdGxpc3QgLS0gVGhpcyBpcyBhIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorICBSZWNpcGllbnRzIGxpc3RlZCBoZXJlIHdpbGwgcmVjZWl2ZSBhIHNlcGFyYXRlIGVtYWlsIGZvciBlYWNoIG5ldworICBjb21taXQuICBIb3dldmVyLCBpZiB0aGlzIHZhcmlhYmxlIGlzICpub3QqIHNldCwgaXQgZGVmYXVsdHMgdG8gdGhlCisgIHZhbHVlIG9mIG11bHRpbWFpbGhvb2subWFpbGluZ2xpc3QuICBUaGVyZWZvcmUsIGlmIHlvdSAqZG9uJ3QqIHdhbnQKKyAgdGhlIG1lbWJlcnMgb2YgbXVsdGltYWlsaG9vay5tYWlsaW5nbGlzdCB0byByZWNlaXZlIG9uZSBlbWFpbCBwZXIKKyAgY29tbWl0LCB0aGVuIHNldCB0aGlzIHZhbHVlIHRvIHRoZSBlbXB0eSBzdHJpbmc6CisKKyAgICAgIGdpdCBjb25maWcgbXVsdGltYWlsaG9vay5jb21taXRsaXN0ICcnCisKKyogbXVsdGltYWlsaG9vay5lbWFpbHByZWZpeCAtLSBJZiB0aGlzIHZhbHVlIGlzIG5vdCBzZXQsIHRoZW4gdGhlCisgIHN1YmplY3RzIG9mIGdlbmVyYXRlZCBlbWFpbHMgYXJlIHByZWZpeGVkIHdpdGggdGhlIHNob3J0IG5hbWUgb2YgdGhlCisgIHJlcG9zaXRvcnkgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzOyBlLmcuLCAiW215cmVwb10iLgorICBwb3N0LXJlY2VpdmUtZW1haWwgZGVmYXVsdHMgdG8gcHJlZml4ICJbU0NNXSIgaWYgdGhpcyBvcHRpb24gaXMgbm90CisgIHNldC4gIFNvIGlmIHlvdSB3ZXJlIHVzaW5nIHRoZSBvbGQgZGVmYXVsdCBhbmQgd2FudCB0byByZXRhaW4gaXQKKyAgKGZvciBleGFtcGxlLCB0byBhdm9pZCBoYXZpbmcgdG8gY2hhbmdlIHlvdXIgZW1haWwgZmlsdGVycyksIHNldAorICB0aGlzIHZhcmlhYmxlIGV4cGxpY2l0bHkgdG8gdGhlIG9sZCB2YWx1ZToKKworICAgICAgZ2l0IGNvbmZpZyBtdWx0aW1haWxob29rLmVtYWlscHJlZml4ICJbU0NNXSIKKworKiBUaGUgIm11bHRpbWFpbGhvb2suc2hvd3JldiIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgbm90IHN1cHBvcnRlZC4KKyAgSXRzIG1haW4gdXNlIGlzIG9ic29sZXRlZCBieSB0aGUgb25lLWVtYWlsLXBlci1jb21taXQgZmVhdHVyZSBvZgorICBnaXQtbXVsdGltYWlsLgorCisKK090aGVyIGRpZmZlcmVuY2VzCis9PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIG90aGVyIGRpZmZlcmVuY2VzIGluIHRoZSBiZWhhdmlvciBvZgorZ2l0LW11bHRpbWFpbCB2cy4gcG9zdC1yZWNlaXZlLWVtYWlsLiAgRm9yIGZ1bGwgZGV0YWlscywgcGxlYXNlIHJlZmVyCit0byB0aGUgbWFpbiBSRUFETUUgZmlsZToKKworKiBPbmUgZW1haWwgcGVyIGNvbW1pdC4gIEZvciBlYWNoIHJlZmVyZW5jZSBjaGFuZ2UsIHRoZSBzY3JpcHQgZmlyc3QKKyAgb3V0cHV0cyBvbmUgZW1haWwgc3VtbWFyaXppbmcgdGhlIHJlZmVyZW5jZSBjaGFuZ2UgKGluY2x1ZGluZworICBvbmUtbGluZSBzdW1tYXJpZXMgb2YgdGhlIG5ldyBjb21taXRzKSwgdGhlbiBpdCBvdXRwdXRzIGEgc2VwYXJhdGUKKyAgZW1haWwgZm9yIGVhY2ggbmV3IGNvbW1pdCB0aGF0IHdhcyBpbnRyb2R1Y2VkLCBpbmNsdWRpbmcgcGF0Y2hlcy4KKyAgVGhlc2Ugb25lLWVtYWlsLXBlci1jb21taXQgZW1haWxzIGdvIHRvIHRoZSBhZGRyZXNzZXMgbGlzdGVkIGluCisgIG11bHRpbWFpbGhvb2suY29tbWl0bGlzdC4gIHBvc3QtcmVjZWl2ZS1lbWFpbCBzZW5kcyBvbmx5IG9uZSBlbWFpbAorICBmb3IgZWFjaCAqcmVmZXJlbmNlKiB0aGF0IGlzIGNoYW5nZWQsIG5vIG1hdHRlciBob3cgbWFueSBjb21taXRzCisgIHdlcmUgYWRkZWQgdG8gdGhlIHJlZmVyZW5jZS4KKworKiBCZXR0ZXIgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgbmV3IGNvbW1pdHMuICBwb3N0LXJlY2VpdmUtZW1haWwKKyAgcHJvY2Vzc2VzIG9uZSByZWZlcmVuY2UgY2hhbmdlIGF0IGEgdGltZSwgd2hpY2ggY2F1c2VzIGl0IHRvIGZhaWwgdG8KKyAgZGVzY3JpYmUgbmV3IGNvbW1pdHMgdGhhdCB3ZXJlIGluY2x1ZGVkIGluIG11bHRpcGxlIGJyYW5jaGVzLiAgRm9yCisgIGV4YW1wbGUsIGlmIGEgc2luZ2xlIHB1c2ggYWRkcyB0aGUgIioiIGNvbW1pdHMgaW4gdGhlIGRpYWdyYW0gYmVsb3csCisgIHRoZW4gcG9zdC1yZWNlaXZlLWVtYWlsIHdvdWxkIG5ldmVyIGluY2x1ZGUgdGhlIGRldGFpbHMgb2YgdGhlIHR3bworICBjb21taXRzIHRoYXQgYXJlIGNvbW1vbiB0byAibWFzdGVyIiBhbmQgImJyYW5jaCIgaW4gaXRzCisgIG5vdGlmaWNhdGlvbnMuCisKKyAgICAgIG8tLS1vLS0tby0tLSotLS0qLS0tKiAgICA8LS0gbWFzdGVyCisgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICotLS0qICA8LS0gYnJhbmNoCisKKyAgZ2l0LW11bHRpbWFpbCBhbmFseXplcyBhbGwgcmVmZXJlbmNlIG1vZGlmaWNhdGlvbnMgdG8gZGV0ZXJtaW5lCisgIHdoaWNoIGNvbW1pdHMgd2VyZSBub3QgcHJlc2VudCBiZWZvcmUgdGhlIGNoYW5nZSwgdGhlcmVmb3JlIGF2b2lkaW5nCisgIHRoYXQgZXJyb3IuCisKKyogSW4gcmVmZXJlbmNlIGNoYW5nZSBlbWFpbHMsIGdpdC1tdWx0aW1haWwgdGVsbHMgd2hpY2ggY29tbWl0cyBoYXZlCisgIGJlZW4gYWRkZWQgdG8gdGhlIHJlZmVyZW5jZSB2cy4gYXJlIGVudGlyZWx5IG5ldyB0byB0aGUgcmVwb3NpdG9yeSwKKyAgYW5kIHdoaWNoIGNvbW1pdHMgdGhhdCBoYXZlIGJlZW4gb21pdHRlZCBmcm9tIHRoZSByZWZlcmVuY2UKKyAgdnMuIGVudGlyZWx5IGRpc2NhcmRlZCBmcm9tIHRoZSByZXBvc2l0b3J5LgorCisqIFRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBHaXQgaXMgcnVubmluZyBjYW4gYmUgY29uZmlndXJlZCB2aWEgYW4KKyAgIkVudmlyb25tZW50IiBhYnN0cmFjdGlvbi4KKworKiBCdWlsdC1pbiBzdXBwb3J0IGZvciBHaXRvbGl0ZS1tYW5hZ2VkIHJlcG9zaXRvcmllcy4KKworKiBJbnN0ZWFkIG9mIHVzaW5nIGZ1bGwgU0hBMSBvYmplY3QgbmFtZXMgaW4gZW1haWxzLCBnaXQtbXVsdGltYWlsCisgIG1vc3RseSB1c2VzIGFiYnJldmlhdGVkIFNIQTFzLCBwbHVzIG9uZS1saW5lIGxvZyBtZXNzYWdlIHN1bW1hcmllcworICB3aGVyZSBhcHByb3ByaWF0ZS4KKworKiBJbiB0aGUgc2NoZW1hdGljIGRpYWdyYW1zIHRoYXQgZXhwbGFpbiBub24tZmFzdC1mb3J3YXJkIGNvbW1pdHMsCisgIGdpdC1tdWx0aW1haWwgc2hvd3MgdGhlIG5hbWVzIG9mIHRoZSBicmFuY2hlcyBpbnZvbHZlZC4KKworKiBUaGUgZW1haWxzIGdlbmVyYXRlZCBieSBnaXQtbXVsdGltYWlsIGluY2x1ZGUgdGhlIG5hbWUgb2YgdGhlIEdpdAorICByZXBvc2l0b3J5IHRoYXQgd2FzIG1vZGlmaWVkOyB0aGlzIGlzIGNvbnZlbmllbnQgZm9yIHJlY2lwaWVudHMgd2hvCisgIGFyZSBtb25pdG9yaW5nIG11bHRpcGxlIHJlcG9zaXRvcmllcy4KKworKiBnaXQtbXVsdGltYWlsIGFsbG93cyB0aGUgZW1haWwgIkZyb20iIGFkZHJlc3NlcyB0byBiZSBjb25maWd1cmVkLgorCisqIFRoZSByZWNpcGllbnRzIGxpc3RzIChtdWx0aW1haWxob29rLm1haWxpbmdsaXN0LAorICBtdWx0aW1haWxob29rLnJlZmNoYW5nZWxpc3QsIG11bHRpbWFpbGhvb2suYW5ub3VuY2VsaXN0LCBhbmQKKyAgbXVsdGltYWlsaG9vay5jb21taXRsaXN0KSBjYW4gYmUgY29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhbmQvb3IKKyAgbXVsdGl2YWx1ZWQgc2V0dGluZ3MgaW4gdGhlIGNvbmZpZyBmaWxlOyBlLmcuLAorCisgICAgICBbbXVsdGltYWlsaG9va10KKyAgICAgICAgICAgICAgbWFpbGluZ2xpc3QgPSBtci5icm93bkBleGFtcGxlLmNvbSwgbXIuYmxhY2tAZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgYW5ub3VuY2VsaXN0ID0gSGltIDxoaW1AZXhhbXBsZS5jb20+CisgICAgICAgICAgICAgIGFubm91bmNlbGlzdCA9IEppbSA8amltQGV4YW1wbGUuY29tPgorICAgICAgICAgICAgICBhbm5vdW5jZWxpc3QgPSBwb3BAZXhhbXBsZS5jb20KKworICBUaGlzIG1pZ2h0IG1ha2UgaXQgZWFzaWVyIHRvIG1haW50YWluIHNob3J0IHJlY2lwaWVudHMgbGlzdHMgd2l0aG91dAorICByZXF1aXJpbmcgZnVsbC1mbGVkZ2VkIG1haWxpbmcgbGlzdCBzb2Z0d2FyZS4KKworKiBCeSBkZWZhdWx0LCBnaXQtbXVsdGltYWlsIHNldHMgZW1haWwgIlJlcGx5LVRvIiBoZWFkZXJzIHRvIHJlcGx5IHRvCisgIHRoZSBwdXNoZXIgKGZvciByZWZlcmVuY2UgdXBkYXRlcykgYW5kIHRvIHRoZSBhdXRob3IgKGZvciBjb21taXQKKyAgbm90aWZpY2F0aW9ucykuICBCeSBkZWZhdWx0LCB0aGUgcHVzaGVyJ3MgZW1haWwgYWRkcmVzcyBpcworICBjb25zdHJ1Y3RlZCBieSBhcHBlbmRpbmcgIm11bHRpbWFpbGhvb2suZW1haWxkb21haW4iIHRvIHRoZSBwdXNoZXIncworICB1c2VybmFtZS4KKworKiBUaGUgZ2VuZXJhdGVkIGVtYWlscyBjb250YWluIGEgY29uZmlndXJhYmxlIGZvb3Rlci4gIEJ5IGRlZmF1bHQsIGl0CisgIGxpc3RzIHRoZSBuYW1lIG9mIHRoZSBhZG1pbmlzdHJhdG9yIHdobyBzaG91bGQgYmUgY29udGFjdGVkIHRvCisgIHVuc3Vic2NyaWJlIGZyb20gbm90aWZpY2F0aW9uIGVtYWlscy4KKworKiBOZXcgb3B0aW9uIG11bHRpbWFpbGhvb2suZW1haWxtYXhsaW5lbGVuZ3RoIHRvIGxpbWl0IHRoZSBsZW5ndGggb2YKKyAgbGluZXMgaW4gdGhlIG1haW4gcGFydCBvZiB0aGUgZW1haWwgYm9keS4gIFRoZSBkZWZhdWx0IGxpbWl0IGlzIDUwMAorICBjaGFyYWN0ZXJzLgorCisqIE5ldyBvcHRpb24gbXVsdGltYWlsaG9vay5lbWFpbHN0cmljdHV0ZjggdG8gZW5zdXJlIHRoYXQgdGhlIG1haW4KKyAgcGFydCBvZiB0aGUgZW1haWwgYm9keSBpcyB2YWxpZCBVVEYtOC4gIEludmFsaWQgY2hhcmFjdGVycyBhcmUKKyAgdHVybmVkIGludG8gdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLCBVK0ZGRkQuICBCeSBkZWZhdWx0CisgIHRoaXMgb3B0aW9uIGlzIHR1cm5lZCBvbi4KKworKiBXcml0dGVuIGluIFB5dGhvbi4gIEVhc2llciB0byBhZGQgbmV3IGZlYXR1cmVzLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvUkVBRE1FLnJzdCBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwZmM0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5yc3QKQEAgLTAsMCArMSw3NzQgQEAKK2dpdC1tdWx0aW1haWwgdmVyc2lvbiAxLjUuMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC5zdmc/YnJhbmNoPW1hc3RlcgorICAgIDp0YXJnZXQ6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwKKworZ2l0LW11bHRpbWFpbCBpcyBhIHRvb2wgZm9yIHNlbmRpbmcgbm90aWZpY2F0aW9uIGVtYWlscyBvbiBwdXNoZXMgdG8gYQorR2l0IHJlcG9zaXRvcnkuICBJdCBpbmNsdWRlcyBhIFB5dGhvbiBtb2R1bGUgY2FsbGVkIGBgZ2l0X211bHRpbWFpbC5weWBgLAord2hpY2ggY2FuIGVpdGhlciBiZSB1c2VkIGFzIGEgaG9vayBzY3JpcHQgZGlyZWN0bHkgb3IgY2FuIGJlIGltcG9ydGVkCithcyBhIFB5dGhvbiBtb2R1bGUgaW50byBhbm90aGVyIHNjcmlwdC4KKworZ2l0LW11bHRpbWFpbCBpcyBkZXJpdmVkIGZyb20gdGhlIEdpdCBwcm9qZWN0J3Mgb2xkCitjb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbCwgYW5kIGlzIG1vc3RseSBjb21wYXRpYmxlIHdpdGggdGhhdAorc2NyaXB0LiAgU2VlIFJFQURNRS5taWdyYXRlLWZyb20tcG9zdC1yZWNlaXZlLWVtYWlsIGZvciBkZXRhaWxzIGFib3V0Cit0aGUgZGlmZmVyZW5jZXMgYW5kIGZvciBob3cgdG8gbWlncmF0ZSBmcm9tIHBvc3QtcmVjZWl2ZS1lbWFpbCB0bworZ2l0LW11bHRpbWFpbC4KKworZ2l0LW11bHRpbWFpbCwgbGlrZSB0aGUgcmVzdCBvZiB0aGUgR2l0IHByb2plY3QsIGlzIGxpY2Vuc2VkIHVuZGVyCitHUEx2MiAoc2VlIHRoZSBDT1BZSU5HIGZpbGUgZm9yIGRldGFpbHMpLgorCitQbGVhc2Ugbm90ZTogYWx0aG91Z2gsIGFzIGEgY29udmVuaWVuY2UsIGdpdC1tdWx0aW1haWwgbWF5IGJlCitkaXN0cmlidXRlZCBhbG9uZyB3aXRoIHRoZSBtYWluIEdpdCBwcm9qZWN0LCBkZXZlbG9wbWVudCBvZgorZ2l0LW11bHRpbWFpbCB0YWtlcyBwbGFjZSBpbiBpdHMgb3duLCBzZXBhcmF0ZSBwcm9qZWN0LiAgUGxlYXNlLCByZWFkCitgPENPTlRSSUJVVElORy5yc3Q+YF9fIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK0J5IGRlZmF1bHQsIGZvciBlYWNoIHB1c2ggcmVjZWl2ZWQgYnkgdGhlIHJlcG9zaXRvcnksIGdpdC1tdWx0aW1haWw6CisKKzEuIE91dHB1dHMgb25lIGVtYWlsIHN1bW1hcml6aW5nIGVhY2ggcmVmZXJlbmNlIHRoYXQgd2FzIGNoYW5nZWQuCisgICBUaGVzZSAicmVmZXJlbmNlIGNoYW5nZSIgKGNhbGxlZCAicmVmY2hhbmdlIiBiZWxvdykgZW1haWxzIGRlc2NyaWJlCisgICB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgKGUuZy4sIHdhcyB0aGUgcmVmZXJlbmNlIGNyZWF0ZWQsIGRlbGV0ZWQsCisgICBmYXN0LWZvcndhcmRlZCwgZXRjLikgYW5kIGluY2x1ZGUgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIGVhY2ggY29tbWl0CisgICB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcmVmZXJlbmNlLgorCisyLiBPdXRwdXRzIG9uZSBlbWFpbCBmb3IgZWFjaCBuZXcgY29tbWl0IHRoYXQgd2FzIGludHJvZHVjZWQgYnkgdGhlCisgICByZWZlcmVuY2UgY2hhbmdlLiAgVGhlc2UgImNvbW1pdCIgZW1haWxzIGluY2x1ZGUgYSBsaXN0IG9mIHRoZQorICAgZmlsZXMgY2hhbmdlZCBieSB0aGUgY29tbWl0LCBmb2xsb3dlZCBieSB0aGUgZGlmZnMgb2YgZmlsZXMKKyAgIG1vZGlmaWVkIGJ5IHRoZSBjb21taXQuICBUaGUgY29tbWl0IGVtYWlscyBhcmUgdGhyZWFkZWQgdG8gdGhlCisgICBjb3JyZXNwb25kaW5nIHJlZmVyZW5jZSBjaGFuZ2UgZW1haWwgdmlhICJJbi1SZXBseS1UbyIuICBUaGlzIHN0eWxlCisgICAoc2ltaWxhciB0byB0aGUgImdpdCBmb3JtYXQtcGF0Y2giIHN0eWxlIHVzZWQgb24gdGhlIEdpdCBtYWlsaW5nCisgICBsaXN0KSBtYWtlcyBpdCBlYXN5IHRvIHNjYW4gdGhyb3VnaCB0aGUgZW1haWxzLCBqdW1wIHRvIHBhdGNoZXMKKyAgIHRoYXQgbmVlZCBmdXJ0aGVyIGF0dGVudGlvbiwgYW5kIHdyaXRlIGNvbW1lbnRzIGFib3V0IHNwZWNpZmljCisgICBjb21taXRzLiAgQ29tbWl0cyBhcmUgaGFuZGxlZCBpbiByZXZlcnNlIHRvcG9sb2dpY2FsIG9yZGVyIChpLmUuLAorICAgcGFyZW50cyBzaG93biBiZWZvcmUgY2hpbGRyZW4pLiAgRm9yIGV4YW1wbGU6OgorCisgICAgIFtnaXRdIGJyYW5jaCBtYXN0ZXIgdXBkYXRlZAorICAgICArIFtnaXRdIDAxLzA4OiBkb2M6IGZpeCB4cmVmIGxpbmsgZnJvbSBhcGkgZG9jcyB0byBtYW51YWwgcGFnZXMKKyAgICAgKyBbZ2l0XSAwMi8wODogYXBpLWNyZWRlbnRpYWxzLnR4dDogc2hvdyB0aGUgYmlnIHBpY3R1cmUgZmlyc3QKKyAgICAgKyBbZ2l0XSAwMy8wODogYXBpLWNyZWRlbnRpYWxzLnR4dDogbWVudGlvbiBjcmVkZW50aWFsLmhlbHBlciBleHBsaWNpdGx5CisgICAgICsgW2dpdF0gMDQvMDg6IGFwaS1jcmVkZW50aWFscy50eHQ6IGFkZCAic2VlIGFsc28iIHNlY3Rpb24KKyAgICAgKyBbZ2l0XSAwNS8wODogdDM1MTAgKGNoZXJyeS1waWNrLXNlcXVlbmNlKTogYWRkIG1pc3NpbmcgJyYmJworICAgICArIFtnaXRdIDA2LzA4OiBNZXJnZSBicmFuY2ggJ3JyL21haW50LXQzNTEwLWNhc2NhZGUtZml4JworICAgICArIFtnaXRdIDA3LzA4OiBNZXJnZSBicmFuY2ggJ21tL2FwaS1jcmVkZW50aWFscy1kb2MnCisgICAgICsgW2dpdF0gMDgvMDg6IEdpdCAxLjcuMTEtcmMyCisKKyAgIEJ5IGRlZmF1bHQsIGVhY2ggY29tbWl0IGFwcGVhcnMgaW4gZXhhY3RseSBvbmUgY29tbWl0IGVtYWlsLCB0aGUKKyAgIGZpcnN0IHRpbWUgdGhhdCBpdCBpcyBwdXNoZWQgdG8gdGhlIHJlcG9zaXRvcnkuICBJZiBhIGNvbW1pdCBpcyBsYXRlcgorICAgbWVyZ2VkIGludG8gYW5vdGhlciBicmFuY2gsIHRoZW4gYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRoZSBjb21taXQKKyAgIGlzIGluY2x1ZGVkIGluIHRoZSByZWZlcmVuY2UgY2hhbmdlIGVtYWlsIChhcyB1c3VhbCksIGJ1dCBubworICAgYWRkaXRpb25hbCBjb21taXQgZW1haWwgaXMgZ2VuZXJhdGVkLiBTZWUKKyAgIGBtdWx0aW1haWxob29rLnJlZkZpbHRlcihJbmNsdXNpb258RXhjbHVzaW9ufERvU2VuZHxEb250U2VuZClSZWdleGAKKyAgIGJlbG93IHRvIGNvbmZpZ3VyZSB3aGljaCBicmFuY2hlcyBhbmQgdGFncyBhcmUgd2F0Y2hlZCBieSB0aGUgaG9vay4KKworICAgQnkgZGVmYXVsdCwgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbHMgaGF2ZSB0aGVpciAiUmVwbHktVG8iIGZpZWxkIHNldAorICAgdG8gdGhlIHBlcnNvbiB3aG8gcHVzaGVkIHRoZSBjaGFuZ2UsIGFuZCBjb21taXQgZW1haWxzIGhhdmUgdGhlaXIKKyAgICJSZXBseS1UbyIgZmllbGQgc2V0IHRvIHRoZSBhdXRob3Igb2YgdGhlIGNvbW1pdC4KKworMy4gT3V0cHV0IG9uZSAiYW5ub3VuY2UiIG1haWwgZm9yIGVhY2ggbmV3IGFubm90YXRlZCB0YWcsIGluY2x1ZGluZworICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhZyBhbmQgb3B0aW9uYWxseSBhIHNob3J0bG9nIGRlc2NyaWJpbmcgdGhlCisgICBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyB0YWcuICBTdWNoIGVtYWlscyBtaWdodCBiZSB1c2VmdWwgaWYgeW91CisgICB1c2UgYW5ub3RhdGVkIHRhZ3MgdG8gbWFyayByZWxlYXNlcyBvZiB5b3VyIHByb2plY3QuCisKKworUmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0KKworKiBQeXRob24gMi54LCB2ZXJzaW9uIDIuNCBvciBsYXRlci4gIE5vIG5vbi1zdGFuZGFyZCBQeXRob24gbW9kdWxlcworICBhcmUgcmVxdWlyZWQuICBnaXQtbXVsdGltYWlsIGhhcyBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBQeXRob24gMworICAoYnV0IGl0IGhhcyBiZWVuIGJldHRlciB0ZXN0ZWQgd2l0aCBQeXRob24gMikuCisKKyogVGhlIGBgZ2l0YGAgY29tbWFuZCBtdXN0IGJlIGluIHlvdXIgUEFUSC4gIGdpdC1tdWx0aW1haWwgaXMga25vd24gdG8KKyAgd29yayB3aXRoIEdpdCB2ZXJzaW9ucyBiYWNrIHRvIDEuNy4xLiAgKEVhcmxpZXIgdmVyc2lvbnMgaGF2ZSBub3QKKyAgYmVlbiB0ZXN0ZWQ7IGlmIHlvdSBkbyBzbywgcGxlYXNlIHJlcG9ydCB5b3VyIHJlc3VsdHMuKQorCisqIFRvIHNlbmQgZW1haWxzIHVzaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGEgc3RhbmRhcmQgc2VuZG1haWwKKyAgcHJvZ3JhbSBtdXN0IGJlIGxvY2F0ZWQgYXQgJy91c3Ivc2Jpbi9zZW5kbWFpbCcgb3IKKyAgJy91c3IvbGliL3NlbmRtYWlsJyBhbmQgbXVzdCBiZSBjb25maWd1cmVkIGNvcnJlY3RseSB0byBzZW5kIGVtYWlscy4KKyAgSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHNldCBtdWx0aW1haWxob29rLnNlbmRtYWlsQ29tbWFuZCwgb3Igc2VlCisgIHRoZSBtdWx0aW1haWxob29rLm1haWxlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGJlbG93IGZvciBob3cgdG8KKyAgY29uZmlndXJlIGdpdC1tdWx0aW1haWwgdG8gc2VuZCBlbWFpbHMgdmlhIGFuIFNNVFAgc2VydmVyLgorCisqIGdpdC1tdWx0aW1haWwgaXMgY3VycmVudGx5IHRlc3RlZCBvbmx5IG9uIExpbnV4LiBJdCBtYXkgb3IgbWF5IG5vdAorICB3b3JrIG9uIG90aGVyIHBsYXRmb3JtcyBzdWNoIGFzIFdpbmRvd3MgYW5kIE1hYyBPUy4gU2VlCisgIGA8Q09OVFJJQlVUSU5HLnJzdD5gX18gdG8gaW1wcm92ZSB0aGUgc2l0dWF0aW9uLgorCisKK0ludm9jYXRpb24KKy0tLS0tLS0tLS0KKworYGBnaXRfbXVsdGltYWlsLnB5YGAgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGBgcG9zdC1yZWNlaXZlYGAgaG9vayBpbiBhCitHaXQgcmVwb3NpdG9yeSAoc2VlIGdpdGhvb2tzKDUpKS4gIExpbmsgb3IgY29weSBpdCB0bworJEdJVF9ESVIvaG9va3MvcG9zdC1yZWNlaXZlIHdpdGhpbiB0aGUgcmVwb3NpdG9yeSBmb3Igd2hpY2ggZW1haWwKK25vdGlmaWNhdGlvbnMgYXJlIGRlc2lyZWQuICBVc3VhbGx5IGl0IHNob3VsZCBiZSBpbnN0YWxsZWQgb24gdGhlCitjZW50cmFsIHJlcG9zaXRvcnkgZm9yIGEgcHJvamVjdCwgdG8gd2hpY2ggYWxsIGNvbW1pdHMgYXJlIGV2ZW50dWFsbHkKK3B1c2hlZC4KKworRm9yIHVzZSBvbiBwcmUtdjEuNS4xIEdpdCBzZXJ2ZXJzLCBgYGdpdF9tdWx0aW1haWwucHlgYCBjYW4gYWxzbyB3b3JrIGFzCithbiBgYHVwZGF0ZWBgIGhvb2ssIHRha2luZyBpdHMgYXJndW1lbnRzIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUbyB1c2UKK3RoaXMgc2NyaXB0IGluIHRoaXMgbWFubmVyLCBsaW5rIG9yIGNvcHkgaXQgdG8gJEdJVF9ESVIvaG9va3MvdXBkYXRlLgorUGxlYXNlIG5vdGUgdGhhdCB0aGUgc2NyaXB0IGlzIG5vdCBjb21wbGV0ZWx5IHJlbGlhYmxlIGluIHRoaXMgbW9kZQorWzFdXy4KKworQWx0ZXJuYXRpdmVseSwgYGBnaXRfbXVsdGltYWlsLnB5YGAgY2FuIGJlIGltcG9ydGVkIGFzIGEgUHl0aG9uIG1vZHVsZQoraW50byB5b3VyIG93biBQeXRob24gcG9zdC1yZWNlaXZlIHNjcmlwdC4gIFRoaXMgbWV0aG9kIGlzIGEgYml0IG1vcmUKK3dvcmssIGJ1dCBhbGxvd3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBob29rIHRvIGJlIGN1c3RvbWl6ZWQgdXNpbmcKK2FyYml0cmFyeSBQeXRob24gY29kZS4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBlbnZpcm9ubWVudAorKHBlcmhhcHMgaW5oZXJpdGluZyBmcm9tIEdlbmVyaWNFbnZpcm9ubWVudCBvciBHaXRvbGl0ZUVudmlyb25tZW50KSB0bworCisqIGNoYW5nZSBob3cgdGhlIHVzZXIgd2hvIGRpZCB0aGUgcHVzaCBpcyBkZXRlcm1pbmVkCisKKyogcmVhZCB1c2VycycgZW1haWwgYWRkcmVzc2VzIGZyb20gYW4gTERBUCBzZXJ2ZXIgb3IgZnJvbSBhIGRhdGFiYXNlCisKKyogZGVjaWRlIHdoaWNoIHVzZXJzIHNob3VsZCBiZSBub3RpZmllZCBhYm91dCB3aGljaCBjb21taXRzIGJhc2VkIG9uCisgIHRoZSBjb250ZW50cyBvZiB0aGUgY29tbWl0cyAoZS5nLiwgZm9yIHVzZXJzIHdobyB3YW50IHRvIGJlIG5vdGlmaWVkCisgIG9ubHkgYWJvdXQgY2hhbmdlcyBhZmZlY3RpbmcgcGFydGljdWxhciBmaWxlcyBvciBzdWJkaXJlY3RvcmllcykKKworT3IgeW91IGNhbiBjaGFuZ2UgaG93IGVtYWlscyBhcmUgc2VudCBieSB3cml0aW5nIHlvdXIgb3duIE1haWxlcgorY2xhc3MuICBUaGUgYGBwb3N0LXJlY2VpdmVgYCBzY3JpcHQgaW4gdGhpcyBkaXJlY3RvcnkgZGVtb25zdHJhdGVzIGhvdwordG8gdXNlIGBgZ2l0X211bHRpbWFpbC5weWBgIGFzIGEgUHl0aG9uIG1vZHVsZS4gIChJZiB5b3UgbWFrZSBpbnRlcmVzdGluZworY2hhbmdlcyBvZiB0aGlzIHR5cGUsIHBsZWFzZSBjb25zaWRlciBzaGFyaW5nIHRoZW0gd2l0aCB0aGUKK2NvbW11bml0eS4pCisKKworVHJvdWJsZXNob290aW5nL0ZBUQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQbGVhc2UgcmVhZCBgPGRvYy90cm91Ymxlc2hvb3RpbmcucnN0PmBfXyBmb3IgZnJlcXVlbnRseSBhc2tlZAorcXVlc3Rpb25zIGFuZCBjb21tb24gaXNzdWVzIHdpdGggZ2l0LW11bHRpbWFpbC4KKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGdpdC1tdWx0aW1haWwgbW9zdGx5IHRha2VzIGl0cyBjb25maWd1cmF0aW9uIGZyb20gdGhlCitmb2xsb3dpbmcgYGBnaXQgY29uZmlnYGAgc2V0dGluZ3M6CisKK211bHRpbWFpbGhvb2suZW52aXJvbm1lbnQKKyAgICBUaGlzIGRlc2NyaWJlcyB0aGUgZ2VuZXJhbCBlbnZpcm9ubWVudCBvZiB0aGUgcmVwb3NpdG9yeS4gSW4gbW9zdAorICAgIGNhc2VzLCB5b3UgZG8gbm90IG5lZWQgdG8gc3BlY2lmeSBhIHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlOgorICAgIGBnaXQtbXVsdGltYWlsYCB3aWxsIGF1dG9kZXRlY3Qgd2hpY2ggZW52aXJvbm1lbnQgdG8gdXNlLgorICAgIEN1cnJlbnRseSBzdXBwb3J0ZWQgdmFsdWVzOgorCisgICAgZ2VuZXJpYworICAgICAgdGhlIHVzZXJuYW1lIG9mIHRoZSBwdXNoZXIgaXMgcmVhZCBmcm9tICRVU0VSIG9yICRVU0VSTkFNRSBhbmQKKyAgICAgIHRoZSByZXBvc2l0b3J5IG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSByZXBvc2l0b3J5J3MgcGF0aC4KKworICAgIGdpdG9saXRlCisgICAgICBFbnZpcm9ubWVudCB0byB1c2Ugd2hlbiBgYGdpdC1tdWx0aW1haWxgYCBpcyByYW4gYXMgYSBnaXRvbGl0ZV8KKyAgICAgIGhvb2suCisKKyAgICAgIFRoZSB1c2VybmFtZSBvZiB0aGUgcHVzaGVyIGlzIHJlYWQgZnJvbSAkR0xfVVNFUiwgdGhlIHJlcG9zaXRvcnkKKyAgICAgIG5hbWUgaXMgcmVhZCBmcm9tICRHTF9SRVBPLCBhbmQgdGhlIEZyb206IGhlYWRlciB2YWx1ZSBpcworICAgICAgb3B0aW9uYWxseSByZWFkIGZyb20gZ2l0b2xpdGUuY29uZiAoc2VlIG11bHRpbWFpbGhvb2suZnJvbSkuCisKKyAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGdpdG9saXRlIGFuZCBnaXQtbXVsdGltYWlsLCByZWFkCisgICAgICBgPGRvYy9naXRvbGl0ZS5yc3Q+YF9fCisKKyAgICBzdGFzaAorICAgICAgRW52aXJvbm1lbnQgdG8gdXNlIHdoZW4gYGBnaXQtbXVsdGltYWlsYGAgaXMgcmFuIGFzIGFuIEF0bGFzc2lhbgorICAgICAgQml0QnVja2V0IFNlcnZlciAoZm9ybWVybHkga25vd24gYXMgQXRsYXNzaWFuIFN0YXNoKSBob29rLgorCisgICAgICAqKldhcm5pbmc6KiogdGhpcyBtb2RlIHdhcyBwcm92aWRlZCBieSBhIHRoaXJkLXBhcnR5IGNvbnRyaWJ1dG9yCisgICAgICBhbmQgbmV2ZXIgdGVzdGVkIGJ5IHRoZSBnaXQtbXVsdGltYWlsIG1haW50YWluZXJzLiBJdCBpcworICAgICAgcHJvdmlkZWQgYXMtaXMgYW5kIG1heSBvciBtYXkgbm90IHdvcmsgZm9yIHlvdS4KKworICAgICAgVGhpcyB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGFzc3VtZWQgd2hlbiB0aGUgc3Rhc2gtc3BlY2lmaWMKKyAgICAgIGZsYWdzIChgYC0tc3Rhc2gtdXNlcmBgIGFuZCBgYC0tc3Rhc2gtcmVwb2BgKSBhcmUgc3BlY2lmaWVkIG9uCisgICAgICB0aGUgY29tbWFuZCBsaW5lLiBXaGVuIHRoaXMgZW52aXJvbm1lbnQgaXMgYWN0aXZlLCB0aGUgdXNlcm5hbWUKKyAgICAgIGFuZCByZXBvIGNvbWUgZnJvbSB0aGVzZSB0d28gY29tbWFuZCBsaW5lIGZsYWdzLCB3aGljaCBtdXN0IGJlCisgICAgICBzcGVjaWZpZWQuCisKKyAgICBnZXJyaXQKKyAgICAgIEVudmlyb25tZW50IHRvIHVzZSB3aGVuIGBgZ2l0LW11bHRpbWFpbGBgIGlzIHJhbiBhcyBhCisgICAgICBgYHJlZi11cGRhdGVkYGAgR2Vycml0IGhvb2suCisKKyAgICAgIFRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIHRoZSBnZXJyaXQtc3BlY2lmaWMgY29tbWFuZCBsaW5lIGZsYWdzCisgICAgICAoYGAtLW9sZHJldmBgLCBgYC0tbmV3cmV2YGAsIGBgLS1yZWZuYW1lYGAsIGBgLS1wcm9qZWN0YGApIGZvcgorICAgICAgZ2Vycml0J3MgcmVmLXVwZGF0ZWQgaG9vayBhcmUgcHJlc2VudC4gV2hlbiB0aGlzIGVudmlyb25tZW50IGlzCisgICAgICBhY3RpdmUsIHRoZSB1c2VybmFtZSBvZiB0aGUgcHVzaGVyIGlzIHRha2VuIGZyb20gdGhlCisgICAgICBgYC0tc3VibWl0dGVyYGAgYXJndW1lbnQgaWYgdGhhdCBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIHBhc3NlZCwKKyAgICAgIG90aGVyd2lzZSAnR2Vycml0JyBpcyB1c2VkLiBUaGUgcmVwb3NpdG9yeSBuYW1lIGlzIHRha2VuIGZyb20KKyAgICAgIHRoZSBgYC0tcHJvamVjdGBgIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLCB3aGljaCBtdXN0IGJlIHBhc3NlZC4KKworICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZ2Vycml0IGFuZCBnaXQtbXVsdGltYWlsLCByZWFkCisgICAgICBgPGRvYy9nZXJyaXQucnN0PmBfXworCisgICAgSWYgbm9uZSBvZiB0aGVzZSBlbnZpcm9ubWVudHMgaXMgc3VpdGFibGUgZm9yIHlvdXIgc2V0dXAsIHRoZW4geW91CisgICAgY2FuIGltcGxlbWVudCBhIFB5dGhvbiBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gRW52aXJvbm1lbnQgYW5kCisgICAgaW5zdGFudGlhdGUgaXQgdmlhIGEgc2NyaXB0IHRoYXQgbG9va3MgbGlrZSB0aGUgZXhhbXBsZQorICAgIHBvc3QtcmVjZWl2ZSBzY3JpcHQuCisKKyAgICBUaGUgZW52aXJvbm1lbnQgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHVzaW5nCisgICAgdGhlIGBgLS1lbnZpcm9ubWVudGBgIG9wdGlvbi4gSWYgaXQgaXMgbm90IHNwZWNpZmllZCBvbiB0aGUKKyAgICBjb21tYW5kIGxpbmUgb3IgYnkgYGBtdWx0aW1haWxob29rLmVudmlyb25tZW50YGAsIHRoZSB2YWx1ZSBpcworICAgIGd1ZXNzZWQgYXMgZm9sbG93czoKKworICAgICogSWYgc3Rhc2gtc3BlY2lmaWMgKHJlc3BlY3RpdmVseSBnZXJyaXQtc3BlY2lmaWMpIGNvbW1hbmQgZmxhZ3MKKyAgICAgIGFyZSBwcmVzZW50IG9uIHRoZSBjb21tYW5kLWxpbmUsIHRoZW4gYGBzdGFzaGBgIChyZXNwZWN0aXZlbHkKKyAgICAgIGBgZ2Vycml0YGApIGlzIHVzZWQuCisKKyAgICAqIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJEdMX1VTRVIgYW5kICRHTF9SRVBPIGFyZSBzZXQsIHRoZW4KKyAgICAgIGBgZ2l0b2xpdGVgYCBpcyB1c2VkLgorCisgICAgKiBJZiBub25lIG9mIHRoZSBhYm92ZSBhcHBseSwgdGhlbiBgYGdlbmVyaWNgYCBpcyB1c2VkLgorCittdWx0aW1haWxob29rLnJlcG9OYW1lCisgICAgQSBzaG9ydCBuYW1lIG9mIHRoaXMgR2l0IHJlcG9zaXRvcnksIHRvIGJlIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMKKyAgICBpbiB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRleHQuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgJEdMX1JFUE8KKyAgICBmb3IgZ2l0b2xpdGUgcmVwb3NpdG9yaWVzLCBvciBvdGhlcndpc2UgdG8gZGVyaXZlIHRoaXMgdmFsdWUgZnJvbQorICAgIHRoZSByZXBvc2l0b3J5IHBhdGggbmFtZS4KKworbXVsdGltYWlsaG9vay5tYWlsaW5nTGlzdAorICAgIFRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBub3RpZmljYXRpb24gZW1haWxzIHNob3VsZCBiZQorICAgIHNlbnQsIGFzIFJGQyAyODIyIGVtYWlsIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhpcworICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbiBiZSBtdWx0aXZhbHVlZC4gIExlYXZlIGl0IHVuc2V0IG9yIHNldCBpdAorICAgIHRvIHRoZSBlbXB0eSBzdHJpbmcgdG8gbm90IHNlbmQgZW1haWxzIGJ5IGRlZmF1bHQuICBUaGUgbmV4dCBmZXcKKyAgICBzZXR0aW5ncyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgc3BlY2lmaWMgYWRkcmVzcyBsaXN0cyBmb3IKKyAgICBzcGVjaWZpYyB0eXBlcyBvZiBub3RpZmljYXRpb24gZW1haWwuCisKK211bHRpbWFpbGhvb2sucmVmY2hhbmdlTGlzdAorICAgIFRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBzdW1tYXJ5IGVtYWlscyBhYm91dAorICAgIHJlZmVyZW5jZSBjaGFuZ2VzIHNob3VsZCBiZSBzZW50LCBhcyBSRkMgMjgyMiBlbWFpbCBhZGRyZXNzZXMKKyAgICBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gYmUKKyAgICBtdWx0aXZhbHVlZC4gIFRoZSBkZWZhdWx0IGlzIHRoZSB2YWx1ZSBpbgorICAgIG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3QuICBTZXQgdGhpcyB2YWx1ZSB0byAibm9uZSIgKG9yIHRoZSBlbXB0eQorICAgIHN0cmluZykgdG8gcHJldmVudCByZWZlcmVuY2UgY2hhbmdlIGVtYWlscyBmcm9tIGJlaW5nIHNlbnQgZXZlbiBpZgorICAgIG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3QgaXMgc2V0LgorCittdWx0aW1haWxob29rLmFubm91bmNlTGlzdAorICAgIFRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBlbWFpbHMgYWJvdXQgbmV3IGFubm90YXRlZAorICAgIHRhZ3Mgc2hvdWxkIGJlIHNlbnQsIGFzIFJGQyAyODIyIGVtYWlsIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkKKyAgICBjb21tYXMuICBUaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbiBiZSBtdWx0aXZhbHVlZC4gIFRoZQorICAgIGRlZmF1bHQgaXMgdGhlIHZhbHVlIGluIG11bHRpbWFpbGhvb2sucmVmY2hhbmdlTGlzdCBvcgorICAgIG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3QuICBTZXQgdGhpcyB2YWx1ZSB0byAibm9uZSIgKG9yIHRoZSBlbXB0eQorICAgIHN0cmluZykgdG8gcHJldmVudCBhbm5vdGF0ZWQgdGFnIGFubm91bmNlbWVudCBlbWFpbHMgZnJvbSBiZWluZyBzZW50CisgICAgZXZlbiBpZiBvbmUgb2YgdGhlIG90aGVyIHZhbHVlcyBpcyBzZXQuCisKK211bHRpbWFpbGhvb2suY29tbWl0TGlzdAorICAgIFRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBlbWFpbHMgYWJvdXQgaW5kaXZpZHVhbCBuZXcKKyAgICBjb21taXRzIHNob3VsZCBiZSBzZW50LCBhcyBSRkMgMjgyMiBlbWFpbCBhZGRyZXNzZXMgc2VwYXJhdGVkIGJ5CisgICAgY29tbWFzLiAgVGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gYmUgbXVsdGl2YWx1ZWQuICBUaGUKKyAgICBkZWZhdWx0IGlzIHRoZSB2YWx1ZSBpbiBtdWx0aW1haWxob29rLm1haWxpbmdMaXN0LiAgU2V0IHRoaXMgdmFsdWUKKyAgICB0byAibm9uZSIgKG9yIHRoZSBlbXB0eSBzdHJpbmcpIHRvIHByZXZlbnQgbm90aWZpY2F0aW9uIGVtYWlscyBhYm91dAorICAgIGluZGl2aWR1YWwgY29tbWl0cyBmcm9tIGJlaW5nIHNlbnQgZXZlbiBpZgorICAgIG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3QgaXMgc2V0LgorCittdWx0aW1haWxob29rLmFubm91bmNlU2hvcnRsb2cKKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBlbWFpbHMgYWJvdXQgY2hhbmdlcyB0bworICAgIGFubm90YXRlZCB0YWdzIGluY2x1ZGUgYSBzaG9ydGxvZyBvZiBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cworICAgIHRhZy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgYW5ub3RhdGVkIHRhZ3MgcmVwcmVzZW50IHJlbGVhc2VzOworICAgIHRoZW4gdGhlIHNob3J0bG9nIHdpbGwgYmUgYSBraW5kIG9mIHJvdWdoIHN1bW1hcnkgb2Ygd2hhdCBoYXMKKyAgICBoYXBwZW5lZCBzaW5jZSB0aGUgbGFzdCByZWxlYXNlLiAgQnV0IGlmIHlvdXIgdGFnZ2luZyBwb2xpY3kgaXMKKyAgICBub3Qgc28gc3RyYWlnaHRmb3J3YXJkLCB0aGVuIHRoZSBzaG9ydGxvZyBtaWdodCBiZSBjb25mdXNpbmcKKyAgICByYXRoZXIgdGhhbiB1c2VmdWwuICBEZWZhdWx0IGlzIGZhbHNlLgorCittdWx0aW1haWxob29rLmNvbW1pdEVtYWlsRm9ybWF0CisgICAgVGhlIGZvcm1hdCBvZiBlbWFpbCBtZXNzYWdlcyBmb3IgdGhlIGluZGl2aWR1YWwgY29tbWl0cywgY2FuIGJlICJ0ZXh0IiBvcgorICAgICJodG1sIi4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgZW1haWxzIHdpbGwgaW5jbHVkZSBkaWZmcyB1c2luZyBjb2xvcml6ZWQKKyAgICBIVE1MIGluc3RlYWQgb2YgcGxhaW4gdGV4dCB1c2VkIGJ5IGRlZmF1bHQuIE5vdGUgdGhhdCB0aGlzICBjdXJyZW50bHkgdGhlCisgICAgcmVmIGNoYW5nZSBlbWFpbHMgYXJlIGFsd2F5cyBzZW50IGluIHBsYWluIHRleHQuCisKKyAgICBOb3RlIHRoYXQgd2hlbiB1c2luZyAiaHRtbCIsIHRoZSBmb3JtYXR0aW5nIGlzIGRvbmUgYnkgcGFyc2luZyB0aGUKKyAgICBvdXRwdXQgb2YgYGBnaXQgbG9nYGAgd2l0aCBgYC1wYGAuIFdoZW4gdXNpbmcKKyAgICBgYG11bHRpbWFpbGhvb2suY29tbWl0TG9nT3B0c2BgIHRvIHNwZWNpZnkgYSBgYC0tZm9ybWF0YGAgZm9yCisgICAgYGBnaXQgbG9nYGAsIG9uZSBtYXkgZ2V0IGZhbHNlIHBvc2l0aXZlIChlLmcuIGxpbmVzIGluIHRoZSBib2R5IG9mCisgICAgdGhlIG1lc3NhZ2Ugc3RhcnRpbmcgd2l0aCBgYCsrK2BgIG9yIGBgLS0tYGAgY29sb3JlZCBpbiByZWQgb3IKKyAgICBncmVlbikuCisKKyAgICBCeSBkZWZhdWx0LCBhbGwgdGhlIG1lc3NhZ2UgaXMgSFRNTC1lc2NhcGVkLiBTZWUKKyAgICBgYG11bHRpbWFpbGhvb2suaHRtbEluSW50cm9gYCB0byBjaGFuZ2UgdGhpcyBiZWhhdmlvci4KKworbXVsdGltYWlsaG9vay5jb21taXRCcm93c2VVUkwKKyAgICBVc2VkIHRvIGdlbmVyYXRlIGEgbGluayB0byBhbiBvbmxpbmUgcmVwb3NpdG9yeSBicm93c2VyIGluIGNvbW1pdAorICAgIGVtYWlscy4gVGhpcyB2YXJpYWJsZSBtdXN0IGJlIGEgc3RyaW5nLiBGb3JtYXQgZGlyZWN0aXZlcyBsaWtlCisgICAgYGAlKDx2YXJpYWJsZT4pc2BgIHdpbGwgYmUgZXhwYW5kZWQgdGhlIHNhbWUgd2F5IGFzIHRlbXBsYXRlCisgICAgc3RyaW5ncy4gSW4gcGFydGljdWxhciwgYGAlKGlkKXNgYCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBmdWxsCisgICAgR2l0IGNvbW1pdCBpZGVudGlmaWVyICg0MC1jaGFycyBoZXhhZGVjaW1hbCkuCisKKyAgICBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYW55IGZvcm1hdCBkaXJlY3RpdmUsIHRoZW4KKyAgICBgYCUoaWQpc2BgIHdpbGwgYmUgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgc3RyaW5nLiBJZiB5b3UgZG9uJ3QKKyAgICB3YW50IGBgJShpZClzYGAgdG8gYmUgYXV0b21hdGljYWxseSBhZGRlZCwgdXNlIHRoZSBlbXB0eSBmb3JtYXQKKyAgICBkaXJlY3RpdmUgYGAlKClzYGAgYW55d2hlcmUgaW4gdGhlIHN0cmluZy4KKworICAgIEZvciBleGFtcGxlLCBhIHN1aXRhYmxlIHZhbHVlIGZvciB0aGUgZ2l0LW11bHRpbWFpbCBwcm9qZWN0IGl0c2VsZgorICAgIHdvdWxkIGJlCisgICAgYGBodHRwczovL2dpdGh1Yi5jb20vZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsL2NvbW1pdC8lKGlkKXNgYC4KKworbXVsdGltYWlsaG9vay5odG1sSW5JbnRybywgbXVsdGltYWlsaG9vay5odG1sSW5Gb290ZXIKKyAgICBXaGVuIGdlbmVyYXRpbmcgYW4gSFRNTCBtZXNzYWdlLCBnaXQtbXVsdGltYWlsIGVzY2FwZXMgYW55IEhUTUwKKyAgICBzZXF1ZW5jZSBieSBkZWZhdWx0LiBUaGlzIG1lYW5zIHRoYXQgaWYgYSB0ZW1wbGF0ZSBjb250YWlucyBIVE1MCisgICAgbGlrZSBgYDxhIGhyZWY9ImZvbyI+bGluazwvYT5gYCwgdGhlIHJlYWRlciB3aWxsIHNlZSB0aGUgSFRNTAorICAgIHNvdXJjZSBjb2RlIGFuZCBub3QgYSBwcm9wZXIgbGluay4KKworICAgIFNldCBgYG11bHRpbWFpbGhvb2suaHRtbEluSW50cm9gYCB0byB0cnVlIHRvIGFsbG93IHdyaXRpbmcgSFRNTAorICAgIGZvcm1hdHRpbmcgaW4gaW50cm9kdWN0aW9uIHRlbXBsYXRlcy4gU2ltaWxhcmx5LCBzZXQKKyAgICBgYG11bHRpbWFpbGhvb2suaHRtbEluRm9vdGVyYGAgZm9yIEhUTUwgaW4gdGhlIGZvb3Rlci4KKworICAgIFZhcmlhYmxlcyBleHBhbmRlZCBpbiB0aGUgdGVtcGxhdGUgYXJlIHN0aWxsIGVzY2FwZWQuIEZvciBleGFtcGxlLAorICAgIGlmIGEgcmVwb3NpdG9yeSdzIHBhdGggY29udGFpbnMgYSBgYDxgYCwgaXQgd2lsbCBiZSByZW5kZXJlZCBhcworICAgIHN1Y2ggaW4gdGhlIG1lc3NhZ2UuCisKKyAgICBSZWFkIGA8ZG9jL2N1c3RvbWl6aW5nLWVtYWlscy5yc3Q+YF9fIGZvciBtb3JlIGRldGFpbHMgYW5kCisgICAgZXhhbXBsZXMuCisKK211bHRpbWFpbGhvb2sucmVmY2hhbmdlU2hvd0dyYXBoCisgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoZW4gc3VtbWFyeSBlbWFpbHMgYWJvdXQgcmVmZXJlbmNlCisgICAgY2hhbmdlcyB3aWxsIGFkZGl0aW9uYWxseSBpbmNsdWRlOgorCisgICAgKiBhIGdyYXBoIG9mIHRoZSBhZGRlZCBjb21taXRzIChpZiBhbnkpCisKKyAgICAqIGEgZ3JhcGggb2YgdGhlIGRpc2NhcmRlZCBjb21taXRzIChpZiBhbnkpCisKKyAgICBUaGUgbG9nIGlzIGdlbmVyYXRlZCBieSBydW5uaW5nIGBgZ2l0IGxvZyAtLWdyYXBoYGAgd2l0aCB0aGUgb3B0aW9ucworICAgIHNwZWNpZmllZCBpbiBncmFwaE9wdHMuICBUaGUgZGVmYXVsdCBpcyBmYWxzZS4KKworbXVsdGltYWlsaG9vay5yZWZjaGFuZ2VTaG93TG9nCisgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoZW4gc3VtbWFyeSBlbWFpbHMgYWJvdXQgcmVmZXJlbmNlCisgICAgY2hhbmdlcyB3aWxsIGluY2x1ZGUgYSBkZXRhaWxlZCBsb2cgb2YgdGhlIGFkZGVkIGNvbW1pdHMgaW4KKyAgICBhZGRpdGlvbiB0byB0aGUgb25lIGxpbmUgc3VtbWFyeS4gIFRoZSBsb2cgaXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcKKyAgICBgYGdpdCBsb2dgYCB3aXRoIHRoZSBvcHRpb25zIHNwZWNpZmllZCBpbiBtdWx0aW1haWxob29rLmxvZ09wdHMuCisgICAgRGVmYXVsdCBpcyBmYWxzZS4KKworbXVsdGltYWlsaG9vay5tYWlsZXIKKyAgICBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSB3YXkgZW1haWxzIGFyZSBzZW50LiAgQWNjZXB0ZWQgdmFsdWVzIGFyZToKKworICAgICogKipzZW5kbWFpbCAodGhlIGRlZmF1bHQpKio6IHVzZSB0aGUgY29tbWFuZCBgYC91c3Ivc2Jpbi9zZW5kbWFpbGBgIG9yCisgICAgICBgYC91c3IvbGliL3NlbmRtYWlsYGAgKG9yIHNlbmRtYWlsQ29tbWFuZCwgaWYgY29uZmlndXJlZCkuICBUaGlzCisgICAgICBtb2RlIGNhbiBiZSBmdXJ0aGVyIGN1c3RvbWl6ZWQgdmlhIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworICAgICAgbXVsdGltYWlsaG9vay5zZW5kbWFpbENvbW1hbmQKKyAgICAgICAgICBUaGUgY29tbWFuZCB1c2VkIGJ5IG1haWxlciBgYHNlbmRtYWlsYGAgdG8gc2VuZCBlbWFpbHMuICBTaGVsbAorICAgICAgICAgIHF1b3RpbmcgaXMgYWxsb3dlZCBpbiB0aGUgdmFsdWUgb2YgdGhpcyBzZXR0aW5nLCBidXQgcmVtZW1iZXIgdGhhdAorICAgICAgICAgIEdpdCByZXF1aXJlcyBkb3VibGUtcXVvdGVzIHRvIGJlIGVzY2FwZWQ7IGUuZy46OgorCisgICAgICAgICAgICAgIGdpdCBjb25maWcgbXVsdGltYWlsaG9vay5zZW5kbWFpbGNvbW1hbmQgJy91c3Ivc2Jpbi9zZW5kbWFpbCAtb2kgLXQgLUYgXCJHaXQgUmVwb1wiJworCisgICAgICAgICAgRGVmYXVsdCBpcyAnL3Vzci9zYmluL3NlbmRtYWlsIC1vaSAtdCcgb3IKKyAgICAgICAgICAnL3Vzci9saWIvc2VuZG1haWwgLW9pIC10JyAoZGVwZW5kaW5nIG9uIHdoaWNoIGZpbGUgaXMKKyAgICAgICAgICBwcmVzZW50IGFuZCBleGVjdXRhYmxlKS4KKworICAgICAgbXVsdGltYWlsaG9vay5lbnZlbG9wZVNlbmRlcgorICAgICAgICAgIElmIHNldCB0aGVuIHBhc3MgdGhpcyB2YWx1ZSB0byBzZW5kbWFpbCB2aWEgdGhlIC1mIG9wdGlvbiB0byBzZXQKKyAgICAgICAgICB0aGUgZW52ZWxvcGUgc2VuZGVyIGFkZHJlc3MuCisKKyAgICAqICoqc210cCoqOiB1c2UgUHl0aG9uJ3Mgc210cGxpYi4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHNlbmRtYWlsCisgICAgICBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4gIFRoaXMgbW9kZSBjYW4gYmUKKyAgICAgIGZ1cnRoZXIgY3VzdG9taXplZCB2aWEgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgICAgICBtdWx0aW1haWxob29rLnNtdHBTZXJ2ZXIKKyAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgU01UUCBzZXJ2ZXIgdG8gY29ubmVjdCB0by4gIFRoZSB2YWx1ZSBjYW4KKyAgICAgICAgICBhbHNvIGluY2x1ZGUgYSBjb2xvbiBhbmQgYSBwb3J0IG51bWJlcjsgZS5nLiwKKyAgICAgICAgICBgYG1haWwuZXhhbXBsZS5jb206MjVgYC4gIERlZmF1bHQgaXMgJ2xvY2FsaG9zdCcgdXNpbmcgcG9ydCAyNS4KKworICAgICAgbXVsdGltYWlsaG9vay5zbXRwVXNlciwgbXVsdGltYWlsaG9vay5zbXRwUGFzcworICAgICAgICAgIFNlcnZlciB1c2VybmFtZSBhbmQgcGFzc3dvcmQuIFJlcXVpcmVkIGlmIHNtdHBFbmNyeXB0aW9uIGlzICdzc2wnLgorICAgICAgICAgIE5vdGUgdGhhdCB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGN1cnJlbnRseSBuZWVkIHRvIGJlCisgICAgICAgICAgc2V0IGNsZWFydGV4dCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBpcyBub3QKKyAgICAgICAgICByZWNvbW1lbmRlZC4gSWYgeW91IG5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uLCBiZSBzdXJlIHlvdXIKKyAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgaXMgcmVhZC1vbmx5LgorCisgICAgICBtdWx0aW1haWxob29rLmVudmVsb3BlU2VuZGVyCisgICAgICAgIFRoZSBzZW5kZXIgYWRkcmVzcyB0byBiZSBwYXNzZWQgdG8gdGhlIFNNVFAgc2VydmVyLiAgSWYKKyAgICAgICAgdW5zZXQsIHRoZW4gdGhlIHZhbHVlIG9mIG11bHRpbWFpbGhvb2suZnJvbSBpcyB1c2VkLgorCisgICAgICBtdWx0aW1haWxob29rLnNtdHBTZXJ2ZXJUaW1lb3V0CisgICAgICAgIFRpbWVvdXQgaW4gc2Vjb25kcy4gRGVmYXVsdCBpcyAxMC4KKworICAgICAgbXVsdGltYWlsaG9vay5zbXRwRW5jcnlwdGlvbgorICAgICAgICBTZXQgdGhlIHNlY3VyaXR5IHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBgYG5vbmVgYCwgYGBzc2xgYCwgYGB0bHNgYCAoc3RhcnR0bHMpLgorICAgICAgICBEZWZhdWx0IGlzIGBgbm9uZWBgLgorCisgICAgICBtdWx0aW1haWxob29rLnNtdHBDQUNlcnRzCisgICAgICAgIFNldCB0aGUgcGF0aCB0byBhIGxpc3Qgb2YgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZSB0byB2ZXJpZnkgdGhlCisgICAgICAgIHNlcnZlciBjZXJ0aWZpY2F0ZSwgb25seSBzdXBwb3J0ZWQgd2hlbiBgYHNtdHBFbmNyeXB0aW9uYGAgaXMKKyAgICAgICAgYGB0bHNgYC4gSWYgdW5zZXQgb3IgZW1wdHksIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgaXMgbm90CisgICAgICAgIHZlcmlmaWVkLiBJZiBpdCB0YXJnZXRzIGEgZmlsZSBjb250YWluaW5nIGEgbGlzdCBvZiB0cnVzdGVkIENBCisgICAgICAgIGNlcnRpZmljYXRlcyAoUEVNIGZvcm1hdCkgdGhlc2UgQ0FzIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgdGhlCisgICAgICAgIHNlcnZlciBjZXJ0aWZpY2F0ZS4gRm9yIGRlYmlhbiwgeW91IGNhbiBzZXQKKyAgICAgICAgYGAvZXRjL3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0YGAgZm9yIHVzaW5nIHRoZSBzeXN0ZW0KKyAgICAgICAgdHJ1c3RlZCBDQXMuIEZvciBzZWxmLXNpZ25lZCBzZXJ2ZXIsIHlvdSBjYW4gYWRkIHlvdXIgc2VydmVyCisgICAgICAgIGNlcnRpZmljYXRlIHRvIHRoZSBzeXN0ZW0gc3RvcmU6OgorCisgICAgICAgICAgICBjZCAvdXNyL2xvY2FsL3NoYXJlL2NhLWNlcnRpZmljYXRlcy8KKyAgICAgICAgICAgIG9wZW5zc2wgc19jbGllbnQgLXN0YXJ0dGxzIHNtdHAgXAorICAgICAgICAgICAgICAgICAgIC1jb25uZWN0IG1haWwuZXhhbXBsZS5uZXQ6NTg3IC1zaG93Y2VydHMgXAorICAgICAgICAgICAgICAgICAgIDwvZGV2L251bGwgMj4vZGV2L251bGwgXAorICAgICAgICAgICAgICAgICB8IG9wZW5zc2wgeDUwOSAtb3V0Zm9ybSBQRU0gPm1haWwuZXhhbXBsZS5uZXQuY3J0CisgICAgICAgICAgICB1cGRhdGUtY2EtY2VydGlmaWNhdGVzCisKKyAgICAgICAgYW5kIHVzZWQgdGhlIHVwZGF0ZWQgYGAvZXRjL3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0YGAuIE9yCisgICAgICAgIGRpcmVjdGx5IHVzZSB5b3VyIGBgL3BhdGgvdG8vbWFpbC5leGFtcGxlLm5ldC5jcnRgYC4gRGVmYXVsdCBpcworICAgICAgICB1bnNldC4KKworICAgICAgbXVsdGltYWlsaG9vay5zbXRwU2VydmVyRGVidWdMZXZlbAorICAgICAgICBJbnRlZ2VyIG51bWJlci4gU2V0IHRvIGdyZWF0ZXIgdGhhbiAwIHRvIGFjdGl2YXRlIGRlYnVnZ2luZy4KKworbXVsdGltYWlsaG9vay5mcm9tLCBtdWx0aW1haWxob29rLmZyb21Db21taXQsIG11bHRpbWFpbGhvb2suZnJvbVJlZmNoYW5nZQorICAgIElmIHNldCwgdXNlIHRoaXMgdmFsdWUgaW4gdGhlIEZyb206IGZpZWxkIG9mIGdlbmVyYXRlZCBlbWFpbHMuCisgICAgYGBmcm9tQ29tbWl0YGAgaXMgdXNlZCBmb3IgY29tbWl0IGVtYWlscywgYGBmcm9tUmVmY2hhbmdlYGAgaXMKKyAgICB1c2VkIGZvciByZWZjaGFuZ2UgZW1haWxzLCBhbmQgYGBmcm9tYGAgaXMgdXNlZCBhcyBmYWxsLWJhY2sgaW4KKyAgICBhbGwgY2FzZXMuCisKKyAgICBUaGUgdmFsdWUgZm9yIHRoZXNlIHZhcmlhYmxlcyBjYW4gYmUgZWl0aGVyOgorCisgICAgLSBBbiBlbWFpbCBhZGRyZXNzLCB3aGljaCB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCisKKyAgICAtIFRoZSB2YWx1ZSBgYHB1c2hlcmBgLCBpbiB3aGljaCBjYXNlIHRoZSBwdXNoZXIncyBhZGRyZXNzIChpZgorICAgICAgYXZhaWxhYmxlKSB3aWxsIGJlIHVzZWQuCisKKyAgICAtIFRoZSB2YWx1ZSBgYGF1dGhvcmBgIChtZWFuaW5nZnVsIG9ubHkgZm9yIGBgZnJvbUNvbW1pdGBgKSwgaW4gd2hpY2gKKyAgICAgIGNhc2UgdGhlIGNvbW1pdCBhdXRob3IncyBhZGRyZXNzIHdpbGwgYmUgdXNlZC4KKworICAgIElmIGNvbmZpZyB2YWx1ZXMgYXJlIHVuc2V0LCB0aGUgdmFsdWUgb2YgdGhlIEZyb206IGhlYWRlciBpcworICAgIGRldGVybWluZWQgYXMgZm9sbG93czoKKworICAgIDEuIChnaXRvbGl0ZSBlbnZpcm9ubWVudCBvbmx5KQorICAgICAgIDEuYSkgSWYgYGBtdWx0aW1haWxob29rLk1haWxhZGRyZXNzTWFwYGAgaXMgc2V0LCBhbmQgaXMgYSBwYXRoCisgICAgICAgdG8gYW4gZXhpc3RpbmcgZmlsZSAoaWYgcmVsYXRpdmUsIGl0IGlzIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8KKyAgICAgICB0aGUgcGxhY2Ugd2hlcmUgYGBnaXRvbGl0ZS5jb25mYGAgaXMgbG9jYXRlZCksIHRoZW4gdGhpcyBmaWxlCisgICAgICAgc2hvdWxkIGNvbnRhaW4gbGluZXMgbGlrZTo6CisKKyAgICAgICAgICAgdXNlcm5hbWUgRmlyc3RuYW1lIExhc3RuYW1lIDxlbWFpbEBleGFtcGxlLmNvbT4KKworICAgICAgIGdpdC1tdWx0aW1haWwgd2lsbCB0aGVuIGxvb2sgZm9yIGEgbGluZSB3aGVyZSBgYCRHTF9VU0VSYGAKKyAgICAgICBtYXRjaGVzIHRoZSBgYHVzZXJuYW1lYGAgcGFydCwgYW5kIHVzZSB0aGUgcmVzdCBvZiB0aGUgbGluZSBmb3IKKyAgICAgICB0aGUgYGBGcm9tOmBgIGhlYWRlci4KKworICAgICAgIDEuYikgUGFyc2UgZ2l0b2xpdGUuY29uZiwgbG9va2luZyBmb3IgYSBibG9jayBvZiBjb21tZW50cyB0aGF0CisgICAgICAgbG9va3MgbGlrZSB0aGlzOjoKKworICAgICAgICAgICAjIEJFR0lOIFVTRVIgRU1BSUxTCisgICAgICAgICAgICMgdXNlcm5hbWUgRmlyc3RuYW1lIExhc3RuYW1lIDxlbWFpbEBleGFtcGxlLmNvbT4KKyAgICAgICAgICAgIyBFTkQgVVNFUiBFTUFJTFMKKworICAgICAgIElmIHRoYXQgYmxvY2sgZXhpc3RzLCBhbmQgdGhlcmUgaXMgYSBsaW5lIGJldHdlZW4gdGhlIEJFR0lOCisgICAgICAgVVNFUiBFTUFJTFMgYW5kIEVORCBVU0VSIEVNQUlMUyBsaW5lcyB3aGVyZSB0aGUgZmlyc3QgZmllbGQKKyAgICAgICBtYXRjaGVzIHRoZSBnaXRvbGl0ZSB1c2VybmFtZSAoJEdMX1VTRVIpLCB1c2UgdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgbGluZSBmb3IgdGhlIEZyb206IGhlYWRlci4KKworICAgIDIuIElmIHRoZSB1c2VyLmVtYWlsIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBzZXQsIHVzZSBpdHMgdmFsdWUKKyAgICAgICAoYW5kIHRoZSB2YWx1ZSBvZiB1c2VyLm5hbWUsIGlmIHNldCkuCisKKyAgICAzLiBVc2UgdGhlIHZhbHVlIG9mIG11bHRpbWFpbGhvb2suZW52ZWxvcGVTZW5kZXIuCisKK211bHRpbWFpbGhvb2suTWFpbGFkZHJlc3NNYXAKKyAgICAoZ2l0b2xpdGUgZW52aXJvbm1lbnQgb25seSkKKyAgICBGaWxlIHRvIGxvb2sgZm9yIGEgYGBGcm9tOmBgIGFkZHJlc3MgYmFzZWQgb24gdGhlIHVzZXIgZG9pbmcgdGhlCisgICAgcHVzaC4gRGVmYXVsdHMgdG8gdW5zZXQuIFNlZSBgYG11bHRpbWFpbGhvb2suZnJvbWBgIGZvciBkZXRhaWxzLgorCittdWx0aW1haWxob29rLmFkbWluaXN0cmF0b3IKKyAgICBUaGUgbmFtZSBhbmQvb3IgZW1haWwgYWRkcmVzcyBvZiB0aGUgYWRtaW5pc3RyYXRvciBvZiB0aGUgR2l0CisgICAgcmVwb3NpdG9yeTsgdXNlZCBpbiBGT09URVJfVEVNUExBVEUuICBEZWZhdWx0IGlzCisgICAgbXVsdGltYWlsaG9vay5lbnZlbG9wZXNlbmRlciBpZiBpdCBpcyBzZXQ7IG90aGVyd2lzZSBhIGdlbmVyaWMKKyAgICBzdHJpbmcgaXMgdXNlZC4KKworbXVsdGltYWlsaG9vay5lbWFpbFByZWZpeAorICAgIEFsbCBlbWFpbHMgaGF2ZSB0aGlzIHN0cmluZyBwcmVwZW5kZWQgdG8gdGhlaXIgc3ViamVjdHMsIHRvIGFpZAorICAgIGVtYWlsIGZpbHRlcmluZyAodGhvdWdoIGZpbHRlcmluZyBiYXNlZCBvbiB0aGUgWC1HaXQtKiBlbWFpbAorICAgIGhlYWRlcnMgaXMgcHJvYmFibHkgbW9yZSByb2J1c3QpLiAgRGVmYXVsdCBpcyB0aGUgc2hvcnQgbmFtZSBvZgorICAgIHRoZSByZXBvc2l0b3J5IGluIHNxdWFyZSBicmFja2V0czsgZS5nLiwgYGBbbXlyZXBvXWBgLiAgU2V0IHRoaXMKKyAgICB2YWx1ZSB0byB0aGUgZW1wdHkgc3RyaW5nIHRvIHN1cHByZXNzIHRoZSBlbWFpbCBwcmVmaXguIFlvdSBtYXkKKyAgICB1c2UgdGhlIHBsYWNlaG9sZGVyIGBgJShyZXBvX3Nob3J0bmFtZSlzYGAgZm9yIHRoZSBzaG9ydCBuYW1lIG9mCisgICAgdGhlIHJlcG9zaXRvcnkuCisKK211bHRpbWFpbGhvb2suZW1haWxNYXhMaW5lcworICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgYm9keSBvZgorICAgIGEgZ2VuZXJhdGVkIGVtYWlsLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbGltaXQuICBMaW5lcworICAgIGJleW9uZCB0aGUgbGltaXQgYXJlIHN1cHByZXNzZWQgYW5kIGNvdW50ZWQsIGFuZCBhIGZpbmFsIGxpbmUgaXMKKyAgICBhZGRlZCBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2Ygc3VwcHJlc3NlZCBsaW5lcy4KKworbXVsdGltYWlsaG9vay5lbWFpbE1heExpbmVMZW5ndGgKKyAgICBUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBsaW5lIGluIHRoZSBlbWFpbCBib2R5LiAgTGluZXMgbG9uZ2VyIHRoYW4KKyAgICB0aGlzIGxpbWl0IGFyZSB0cnVuY2F0ZWQgdG8gdGhpcyBsZW5ndGggd2l0aCBhIHRyYWlsaW5nIGBgWy4uLl1gYAorICAgIGFkZGVkIHRvIGluZGljYXRlIHRoZSBtaXNzaW5nIHRleHQuICBUaGUgZGVmYXVsdCBpcyA1MDAsIGJlY2F1c2UKKyAgICAoYSkgZGlmZnMgd2l0aCBsb25nZXIgbGluZXMgYXJlIHByb2JhYmx5IGZyb20gYmluYXJ5IGZpbGVzLCBmb3IKKyAgICB3aGljaCBhIGRpZmYgaXMgdXNlbGVzcywgYW5kIChiKSBldmVuIGlmIGEgdGV4dCBmaWxlIGhhcyBzdWNoIGxvbmcKKyAgICBsaW5lcywgdGhlIGRpZmZzIGFyZSBwcm9iYWJseSB1bnJlYWRhYmxlIGFueXdheS4gIFRvIGRpc2FibGUgbGluZQorICAgIHRydW5jYXRpb24sIHNldCB0aGlzIG9wdGlvbiB0byAwLgorCittdWx0aW1haWxob29rLnN1YmplY3RNYXhMZW5ndGgKKyAgICBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHN1YmplY3QgbGluZSAoaS5lLiB0aGUgYGBvbmVsaW5lYGAgZmllbGQKKyAgICBpbiB0ZW1wbGF0ZXMsIG5vdCBpbmNsdWRpbmcgdGhlIHByZWZpeCkuIExpbmVzIGxvbmdlciB0aGFuIHRoaXMKKyAgICBsaW1pdCBhcmUgdHJ1bmNhdGVkIHRvIHRoaXMgbGVuZ3RoIHdpdGggYSB0cmFpbGluZyBgYFsuLi5dYGAgYWRkZWQKKyAgICB0byBpbmRpY2F0ZSB0aGUgbWlzc2luZyB0ZXh0LiBUaGlzIG9wdGlvbiBUaGUgZGVmYXVsdCBpcyB0byB1c2UKKyAgICBgYG11bHRpbWFpbGhvb2suZW1haWxNYXhMaW5lTGVuZ3RoYGAuIFRoaXMgb3B0aW9uIGF2b2lkcyBzZW5kaW5nCisgICAgZW1haWxzIHdpdGggb3Zlcmx5IGxvbmcgc3ViamVjdCBsaW5lcywgYnV0IHNob3VsZCBub3QgYmUgbmVlZGVkIGlmCisgICAgdGhlIGNvbW1pdCBtZXNzYWdlcyBmb2xsb3cgdGhlIEdpdCBjb252ZW50aW9uIChvbmUgc2hvcnQgc3ViamVjdAorICAgIGxpbmUsIHRoZW4gYSBibGFuayBsaW5lLCB0aGVuIHRoZSBtZXNzYWdlIGJvZHkpLiBUbyBkaXNhYmxlIGxpbmUKKyAgICB0cnVuY2F0aW9uLCBzZXQgdGhpcyBvcHRpb24gdG8gMC4KKworbXVsdGltYWlsaG9vay5tYXhDb21taXRFbWFpbHMKKyAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29tbWl0IGVtYWlscyB0byBzZW5kIGZvciBhIGdpdmVuIGNoYW5nZS4KKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgcGF0Y2hlcyBpcyBsYXJnZXIgdGhhdCB0aGlzIHZhbHVlLCBvbmx5IHRoZQorICAgIHN1bW1hcnkgcmVmY2hhbmdlIGVtYWlsIGlzIHNlbnQuICBUaGlzIGNhbiBhdm9pZCBhY2NpZGVudGFsCisgICAgbWFpbGJvbWJpbmcsIGZvciBleGFtcGxlIG9uIGFuIGluaXRpYWwgcHVzaC4gIFRvIGRpc2FibGUgY29tbWl0CisgICAgZW1haWxzIGxpbWl0LCBzZXQgdGhpcyBvcHRpb24gdG8gMC4gIFRoZSBkZWZhdWx0IGlzIDUwMC4KKworbXVsdGltYWlsaG9vay5leGNsdWRlTWVyZ2VSZXZpc2lvbnMKKyAgICBXaGVuIHNlbmRpbmcgb3V0IHJldmlzaW9uIGVtYWlscywgZG8gbm90IGNvbnNpZGVyIG1lcmdlIGNvbW1pdHMgKHRoZQorICAgIGZ1bmN0aW9uYWwgZXF1aXZhbGVudCBvZiBgcmV2LWxpc3QgLS1uby1tZXJnZXNgKS4KKyAgICBUaGUgZGVmYXVsdCBpcyBgZmFsc2VgIChzZW5kIG1lcmdlIGNvbW1pdCBlbWFpbHMpLgorCittdWx0aW1haWxob29rLmVtYWlsU3RyaWN0VVRGOAorICAgIElmIHRoaXMgYm9vbGVhbiBvcHRpb24gaXMgc2V0IHRvIGB0cnVlYCwgdGhlbiB0aGUgbWFpbiBwYXJ0IG9mIHRoZQorICAgIGVtYWlsIGJvZHkgaXMgZm9yY2VkIHRvIGJlIHZhbGlkIFVURi04LiAgQW55IGNoYXJhY3RlcnMgdGhhdCBhcmUKKyAgICBub3QgdmFsaWQgVVRGLTggYXJlIGNvbnZlcnRlZCB0byB0aGUgVW5pY29kZSByZXBsYWNlbWVudAorICAgIGNoYXJhY3RlciwgVStGRkZELiAgVGhlIGRlZmF1bHQgaXMgYHRydWVgLgorCisgICAgVGhpcyBvcHRpb24gaXMgaW5lZmZlY3RpdmUgd2l0aCBQeXRob24gMywgd2hlcmUgbm9uLVVURi04CisgICAgY2hhcmFjdGVycyBhcmUgdW5jb25kaXRpb25hbGx5IHJlcGxhY2VkLgorCittdWx0aW1haWxob29rLmRpZmZPcHRzCisgICAgT3B0aW9ucyBwYXNzZWQgdG8gYGBnaXQgZGlmZi10cmVlYGAgd2hlbiBnZW5lcmF0aW5nIHRoZSBzdW1tYXJ5CisgICAgaW5mb3JtYXRpb24gZm9yIFJlZmVyZW5jZUNoYW5nZSBlbWFpbHMuICBEZWZhdWx0IGlzIGBgLS1zdGF0CisgICAgLS1zdW1tYXJ5IC0tZmluZC1jb3BpZXMtaGFyZGVyYGAuICBBZGQgLXAgdG8gdGhvc2Ugb3B0aW9ucyB0bworICAgIGluY2x1ZGUgYSB1bmlmaWVkIGRpZmYgb2YgY2hhbmdlcyBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgc3VtbWFyeQorICAgIG91dHB1dC4gIFNoZWxsIHF1b3RpbmcgaXMgYWxsb3dlZDsgc2VlIGBgbXVsdGltYWlsaG9vay5sb2dPcHRzYGAgZm9yCisgICAgZGV0YWlscy4KKworbXVsdGltYWlsaG9vay5ncmFwaE9wdHMKKyAgICBPcHRpb25zIHBhc3NlZCB0byBgYGdpdCBsb2cgLS1ncmFwaGBgIHdoZW4gZ2VuZXJhdGluZyBncmFwaHMgZm9yIHRoZQorICAgIHJlZmVyZW5jZSBjaGFuZ2Ugc3VtbWFyeSBlbWFpbHMgKHVzZWQgb25seSBpZiByZWZjaGFuZ2VTaG93R3JhcGgKKyAgICBpcyB0cnVlKS4gIFRoZSBkZWZhdWx0IGlzICctLW9uZWxpbmUgLS1kZWNvcmF0ZScuCisKKyAgICBTaGVsbCBxdW90aW5nIGlzIGFsbG93ZWQ7IHNlZSBsb2dPcHRzIGZvciBkZXRhaWxzLgorCittdWx0aW1haWxob29rLmxvZ09wdHMKKyAgICBPcHRpb25zIHBhc3NlZCB0byBgYGdpdCBsb2dgYCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGluZm8gZm9yCisgICAgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbHMgKHVzZWQgb25seSBpZiByZWZjaGFuZ2VTaG93TG9nIGlzIHNldCkuCisgICAgRm9yIGV4YW1wbGUsIGFkZGluZyAtcCB3aWxsIHNob3cgZWFjaCBjb21taXQncyBjb21wbGV0ZSBkaWZmLiAgVGhlCisgICAgZGVmYXVsdCBpcyBlbXB0eS4KKworICAgIFNoZWxsIHF1b3RpbmcgaXMgYWxsb3dlZDsgZm9yIGV4YW1wbGUsIGEgbG9nIGZvcm1hdCB0aGF0IGNvbnRhaW5zCisgICAgc3BhY2VzIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgc29tZXRoaW5nIGxpa2U6OgorCisgICAgICBnaXQgY29uZmlnIG11bHRpbWFpbGhvb2subG9nb3B0cyAnLS1wcmV0dHk9Zm9ybWF0OiIlaCAlYU4gPCVhRT4lbiVzJW4lbiViJW4iJworCisgICAgSWYgeW91IHdhbnQgdG8gc2V0IHRoaXMgYnkgZWRpdGluZyB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgIGRpcmVjdGx5LCByZW1lbWJlciB0aGF0IEdpdCByZXF1aXJlcyBkb3VibGUtcXVvdGVzIHRvIGJlIGVzY2FwZWQKKyAgICAoc2VlIGdpdC1jb25maWcoMSkgZm9yIG1vcmUgaW5mb3JtYXRpb24pOjoKKworICAgICAgW211bHRpbWFpbGhvb2tdCisgICAgICAgICAgICAgIGxvZ29wdHMgPSAtLXByZXR0eT1mb3JtYXQ6XCIlaCAlYU4gPCVhRT4lbiVzJW4lbiViJW5cIgorCittdWx0aW1haWxob29rLmNvbW1pdExvZ09wdHMKKyAgICBPcHRpb25zIHBhc3NlZCB0byBgYGdpdCBsb2dgYCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGluZm8gZm9yCisgICAgcmV2aXNpb24gY2hhbmdlIGVtYWlscy4gIEZvciBleGFtcGxlLCBhZGRpbmcgLS1pZ25vcmUtYWxsLXNwYWNlcworICAgIHdpbGwgc3VwcHJlc3Mgd2hpdGVzcGFjZSBjaGFuZ2VzLiAgVGhlIGRlZmF1bHQgb3B0aW9ucyBhcmUgYGAtQworICAgIC0tc3RhdCAtcCAtLWNjYGAuICBTaGVsbCBxdW90aW5nIGlzIGFsbG93ZWQ7IHNlZQorICAgIG11bHRpbWFpbGhvb2subG9nT3B0cyBmb3IgZGV0YWlscy4KKworbXVsdGltYWlsaG9vay5kYXRlU3Vic3RpdHV0ZQorICAgIFN0cmluZyB0byB1c2UgYXMgYSBzdWJzdGl0dXRlIGZvciBgYERhdGU6YGAgaW4gdGhlIG91dHB1dCBvZiBgYGdpdAorICAgIGxvZ2BgIHdoaWxlIGZvcm1hdHRpbmcgY29tbWl0IG1lc3NhZ2VzLiBUaGlzIGlzIHVzZWZ1bCB0byBhdm9pZAorICAgIGVtaXR0aW5nIGEgbGluZSB0aGF0IGNhbiBiZSBpbnRlcnByZXRlZCBieSBtYWlsZXJzIGFzIHRoZSBzdGFydCBvZgorICAgIGEgY2l0ZWQgbWVzc2FnZSAoWmltYnJhIHdlYm1haWwgaW4gcGFydGljdWxhcikuIERlZmF1bHRzIHRvCisgICAgYGBDb21taXREYXRlOmBgLiBTZXQgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGBgbm9uZWBgIHRvIGRlYWN0aXZhdGUKKyAgICB0aGUgYmVoYXZpb3IuCisKK211bHRpbWFpbGhvb2suZW1haWxEb21haW4KKyAgICBEb21haW4gbmFtZSBhcHBlbmRlZCB0byB0aGUgdXNlcm5hbWUgb2YgdGhlIHBlcnNvbiBkb2luZyB0aGUgcHVzaAorICAgIHRvIGNvbnZlcnQgaXQgaW50byBhbiBlbWFpbCBhZGRyZXNzCisgICAgKHZpYSBgYCIlc0AlcyIgJSAodXNlcm5hbWUsIGVtYWlsZG9tYWluKWBgKS4gTW9yZSBjb21wbGljYXRlZAorICAgIHNjaGVtZXMgY2FuIGJlIGltcGxlbWVudGVkIGJ5IG92ZXJyaWRpbmcgRW52aXJvbm1lbnQgYW5kCisgICAgb3ZlcnJpZGluZyBpdHMgZ2V0X3B1c2hlcl9lbWFpbCgpIG1ldGhvZC4KKworbXVsdGltYWlsaG9vay5yZXBseVRvLCBtdWx0aW1haWxob29rLnJlcGx5VG9Db21taXQsIG11bHRpbWFpbGhvb2sucmVwbHlUb1JlZmNoYW5nZQorICAgIEFkZHJlc3NlcyB0byB1c2UgaW4gdGhlIFJlcGx5LVRvOiBmaWVsZCBmb3IgY29tbWl0IGVtYWlscworICAgIChyZXBseVRvQ29tbWl0KSBhbmQgcmVmY2hhbmdlIGVtYWlscyAocmVwbHlUb1JlZmNoYW5nZSkuCisgICAgbXVsdGltYWlsaG9vay5yZXBseVRvIGlzIHVzZWQgYXMgZGVmYXVsdCB3aGVuIHJlcGx5VG9Db21taXQgb3IKKyAgICByZXBseVRvUmVmY2hhbmdlIGlzIG5vdCBzZXQuIFRoZSBzaG9ydGN1dHMgYGBwdXNoZXJgYCBhbmQKKyAgICBgYGF1dGhvcmBgIGFyZSBhbGxvd2VkIHdpdGggdGhlIHNhbWUgc2VtYW50aWNzIGFzIGZvcgorICAgIGBgbXVsdGltYWlsaG9vay5mcm9tYGAuIEluIGFkZGl0aW9uLCB0aGUgdmFsdWUgYGBub25lYGAgY2FuIGJlCisgICAgdXNlZCB0byBvbWl0IHRoZSBgYFJlcGx5LVRvOmBgIGZpZWxkLgorCisgICAgVGhlIGRlZmF1bHQgaXMgYGBwdXNoZXJgYCBmb3IgcmVmY2hhbmdlIGVtYWlscywgYW5kIGBgYXV0aG9yYGAgZm9yCisgICAgY29tbWl0IGVtYWlscy4KKworbXVsdGltYWlsaG9vay5xdWlldAorICAgIERvIG5vdCBvdXRwdXQgdGhlIGxpc3Qgb2YgZW1haWwgcmVjaXBpZW50cyBmcm9tIHRoZSBob29rCisKK211bHRpbWFpbGhvb2suc3Rkb3V0CisgICAgRm9yIGRlYnVnZ2luZywgc2VuZCBlbWFpbHMgdG8gc3Rkb3V0IHJhdGhlciB0aGFuIHRvIHRoZQorICAgIG1haWxlci4gIEVxdWl2YWxlbnQgdG8gdGhlIC0tc3Rkb3V0IGNvbW1hbmQgbGluZSBvcHRpb24KKworbXVsdGltYWlsaG9vay5zY2FuQ29tbWl0Rm9yQ2MKKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSwgdGhhbiByZWNpcGllbnRzIGZyb20gbGluZXMgaW4gY29tbWl0IGJvZHkKKyAgICB0aGF0IHN0YXJ0cyB3aXRoIGBgQ0M6YGAgd2lsbCBiZSBhZGRlZCB0byBDQyBsaXN0LgorICAgIERlZmF1bHQ6IGZhbHNlCisKK211bHRpbWFpbGhvb2suY29tYmluZVdoZW5TaW5nbGVDb21taXQKKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBhbmQgYSBzaW5nbGUgbmV3IGNvbW1pdCBpcyBwdXNoZWQgdG8KKyAgICBhIGJyYW5jaCwgY29tYmluZSB0aGUgc3VtbWFyeSBhbmQgY29tbWl0IGVtYWlsIG1lc3NhZ2VzIGludG8gYQorICAgIHNpbmdsZSBlbWFpbC4KKyAgICBEZWZhdWx0OiB0cnVlCisKK211bHRpbWFpbGhvb2sucmVmRmlsdGVySW5jbHVzaW9uUmVnZXgsIG11bHRpbWFpbGhvb2sucmVmRmlsdGVyRXhjbHVzaW9uUmVnZXgsIG11bHRpbWFpbGhvb2sucmVmRmlsdGVyRG9TZW5kUmVnZXgsIG11bHRpbWFpbGhvb2sucmVmRmlsdGVyRG9udFNlbmRSZWdleAorICAgICoqV2FybmluZzoqKiB0aGVzZSBvcHRpb25zIGFyZSBleHBlcmltZW50YWwuIFRoZXkgc2hvdWxkIHdvcmssIGJ1dAorICAgIHRoZSB1c2VyLWludGVyZmFjZSBpcyBub3Qgc3RhYmxlIHlldCAoaW4gcGFydGljdWxhciwgdGhlIG9wdGlvbgorICAgIG5hbWVzIG1heSBjaGFuZ2UpLiBJZiB5b3Ugd2FudCB0byBwYXJ0aWNpcGF0ZSBpbiBzdGFiaWxpemluZyB0aGUKKyAgICBmZWF0dXJlLCBwbGVhc2UgY29udGFjdCB0aGUgbWFpbnRhaW5lcnMgYW5kL29yIHNlbmQgcHVsbC1yZXF1ZXN0cy4KKyAgICBJZiB5b3UgYXJlIGhhcHB5IHdpdGggdGhlIGN1cnJlbnQgc2hhcGUgb2YgdGhlIGZlYXR1cmUsIHBsZWFzZQorICAgIHJlcG9ydCBpdCB0b28uCisKKyAgICBSZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gbGltaXQgcmVmcyBmb3Igd2hpY2ggZW1haWwKKyAgICB1cGRhdGVzIHdpbGwgYmUgc2VudC4gIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgYm90aCBhbiBpbmNsdXNpb24KKyAgICBhbmQgYW4gZXhjbHVzaW9uIHJlZ2V4LiAgSWYgYSBgYHJlZkZpbHRlckluY2x1c2lvblJlZ2V4YGAgaXMKKyAgICBzcGVjaWZpZWQsIGVtYWlscyB3aWxsIG9ubHkgYmUgc2VudCBmb3IgcmVmcyB3aGljaCBtYXRjaCB0aGlzCisgICAgcmVnZXguICBJZiBhIGBgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXhgYCByZWdleCBpcyBzcGVjaWZpZWQsCisgICAgZW1haWxzIHdpbGwgYmUgc2VudCBmb3IgYWxsIHJlZnMgZXhjZXB0IHRob3NlIHRoYXQgbWF0Y2ggdGhpcworICAgIHJlZ2V4IChvciB0aGF0IG1hdGNoIGEgcHJlZGVmaW5lZCByZWdleCBzcGVjaWZpYyB0byB0aGUKKyAgICBlbnZpcm9ubWVudCwgc3VjaCBhcyAiXnJlZnMvbm90ZXMiIGZvciBtb3N0IGVudmlyb25tZW50cyBhbmQKKyAgICAiXnJlZnMvbm90ZXN8XnJlZnMvY2hhbmdlcyIgZm9yIHRoZSBnZXJyaXQgZW52aXJvbm1lbnQpLgorCisgICAgVGhlIGV4cHJlc3Npb25zIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIGNvbXBsZXRlIHJlZm5hbWUsIGFuZCBpcworICAgIGNvbnNpZGVyZWQgdG8gbWF0Y2ggaWYgYW55IHN1YnN0cmluZyBtYXRjaGVzLiBGb3IgZXhhbXBsZSwgdG8KKyAgICBmaWx0ZXItb3V0IGFsbCB0YWdzLCBzZXQgYGByZWZGaWx0ZXJFeGNsdXNpb25SZWdleGBgIHRvCisgICAgYGBecmVmcy90YWdzL2BgIChub3RlIHRoZSBsZWFkaW5nIGBgXmBgIGJ1dCBubyB0cmFpbGluZyBgYCRgYCkuIElmCisgICAgeW91IHNldCBgYHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4YGAgdG8gYGBtYXN0ZXJgYCwgdGhlbiBhbnkgcmVmCisgICAgY29udGFpbmluZyBgYG1hc3RlcmBgIHdpbGwgYmUgZXhjbHVkZWQgKHRoZSBgYG1hc3RlcmBgIGJyYW5jaCwgYnV0CisgICAgYWxzbyBgYHJlZnMvdGFncy9tYXN0ZXJgYCBvciBgYHJlZnMvaGVhZHMvZm9vLW1hc3Rlci1iYXJgYCkuCisKKyAgICBgYHJlZkZpbHRlckRvU2VuZFJlZ2V4YGAgYW5kIGBgcmVmRmlsdGVyRG9udFNlbmRSZWdleGBgIGFyZQorICAgIGFuYWxvZ291cyB0byBgYHJlZkZpbHRlckluY2x1c2lvblJlZ2V4YGAgYW5kCisgICAgYGByZWZGaWx0ZXJFeGNsdXNpb25SZWdleGBgIHdpdGggb25lIGRpZmZlcmVuY2U6IHdpdGgKKyAgICBgYHJlZkZpbHRlckRvU2VuZFJlZ2V4YGAgYW5kIGBgcmVmRmlsdGVyRG9udFNlbmRSZWdleGBgLCBjb21taXRzCisgICAgaW50cm9kdWNlZCBieSBvbmUgZXhjbHVkZWQgcmVmIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYXMgbmV3IHdoZW4KKyAgICB0aGV5IHJlYWNoIGFuIGluY2x1ZGVkIHJlZi4gVHlwaWNhbGx5LCBpZiB5b3UgYWRkIGEgYnJhbmNoIGBgZm9vYGAKKyAgICB0byAgYGByZWZGaWx0ZXJEb250U2VuZFJlZ2V4YGAsIHB1c2ggY29tbWl0cyB0byB0aGlzIGJyYW5jaCwgYW5kCisgICAgbGF0ZXIgbWVyZ2UgYnJhbmNoIGBgZm9vYGAgaW50byBgYG1hc3RlcmBgLCB0aGVuIHRoZSBub3RpZmljYXRpb24KKyAgICBlbWFpbCBmb3IgYGBtYXN0ZXJgYCB3aWxsIGNvbnRhaW4gYSBjb21taXQgZW1haWwgb25seSBmb3IgdGhlCisgICAgbWVyZ2UgY29tbWl0LiBJZiB5b3UgaW5jbHVkZSBgYGZvb2BgIGluCisgICAgYGByZWZGaWx0ZXJFeGNsdXNpb25SZWdleGBgLCB0aGVuIGF0IHRoZSB0aW1lIG9mIG1lcmdlLCB5b3Ugd2lsbAorICAgIHJlY2VpdmUgb25lIGNvbW1pdCBlbWFpbCBwZXIgY29tbWl0IGluIHRoZSBicmFuY2guCisKKyAgICBUaGVzZSB2YXJpYWJsZXMgY2FuIGJlIG11bHRpLXZhbHVlZCwgbGlrZTo6CisKKyAgICAgIFttdWx0aW1haWxob29rXQorICAgICAgICAgICAgICByZWZGaWx0ZXJFeGNsdXNpb25SZWdleCA9IF5yZWZzL3RhZ3MvCisgICAgICAgICAgICAgIHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4ID0gXnJlZnMvaGVhZHMvbWFzdGVyJAorCisgICAgWW91IGNhbiBhbHNvIHByb3ZpZGUgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IGxpa2U6OgorCisgICAgICBbbXVsdGltYWlsaG9va10KKyAgICAgICAgICAgICAgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXggPSBecmVmcy90YWdzLyBecmVmcy9oZWFkcy9tYXN0ZXIkCisKKyAgICBCb3RoIGV4YW1wbGVzIGV4Y2x1ZGUgdGFncyBhbmQgdGhlIG1hc3RlciBicmFuY2gsIGFuZCBhcmUKKyAgICBlcXVpdmFsZW50IHRvOjoKKworICAgICAgW211bHRpbWFpbGhvb2tdCisgICAgICAgICAgICAgIHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4ID0gXnJlZnMvdGFncy98XnJlZnMvaGVhZHMvbWFzdGVyJAorCisgICAgYGByZWZGaWx0ZXJJbmNsdXNpb25SZWdleGBgIGFuZCBgYHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4YGAgYXJlCisgICAgc3RyaWN0bHkgc3Ryb25nZXIgdGhhbiBgYHJlZkZpbHRlckRvU2VuZFJlZ2V4YGAgYW5kCisgICAgYGByZWZGaWx0ZXJEb250U2VuZFJlZ2V4YGAuIEluIG90aGVyIHdvcmRzLCBhZGRpbmcgYSByZWYgdG8gYQorICAgIERvU2VuZC9Eb250U2VuZCByZWdleCBoYXMgbm8gZWZmZWN0IGlmIGl0IGlzIGFscmVhZHkgZXhjbHVkZWQgYnkgYQorICAgIEV4Y2x1c2lvbi9JbmNsdXNpb24gcmVnZXguCisKK211bHRpbWFpbGhvb2subG9nRmlsZSwgbXVsdGltYWlsaG9vay5lcnJvckxvZ0ZpbGUsIG11bHRpbWFpbGhvb2suZGVidWdMb2dGaWxlCisKKyAgICBXaGVuIHNldCwgdGhlc2UgdmFyaWFibGUgZGVzaWduYXRlIHBhdGggdG8gZmlsZXMgd2hlcmUKKyAgICBnaXQtbXVsdGltYWlsIHdpbGwgbG9nIHNvbWUgbWVzc2FnZXMuIE5vcm1hbCBtZXNzYWdlcyBhbmQgZXJyb3IKKyAgICBtZXNzYWdlcyBhcmUgc2VudCB0byBgYGxvZ0ZpbGVgYCwgYW5kIGVycm9yIG1lc3NhZ2VzIGFyZSBhbHNvIHNlbnQKKyAgICB0byBgYGVycm9yTG9nRmlsZWBgLiBEZWJ1ZyBtZXNzYWdlcyBhbmQgYWxsIG90aGVyIG1lc3NhZ2VzIGFyZQorICAgIHNlbnQgdG8gYGBkZWJ1Z0xvZ0ZpbGVgYC4gVGhlIHJlY29tbWVuZGVkIHdheSBpcyB0byBzZXQgb25seSBvbmUKKyAgICBvZiB0aGVzZSB2YXJpYWJsZXMsIGJ1dCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNldCBzZXZlcmFsIG9mIHRoZW0KKyAgICAocGFydCBvZiB0aGUgaW5mb3JtYXRpb24gaXMgdGhlbiBkdXBsaWNhdGVkIGluIHNldmVyYWwgbG9nIGZpbGVzLAorICAgIGZvciBleGFtcGxlIGVycm9ycyBhcmUgZHVwbGljYXRlZCB0byBhbGwgbG9nIGZpbGVzKS4KKworICAgIFJlbGF0aXZlIHBhdGggYXJlIHJlbGF0aXZlIHRvIHRoZSBHaXQgcmVwb3NpdG9yeSB3aGVyZSB0aGUgcHVzaCBpcworICAgIGRvbmUuCisKK211bHRpbWFpbGhvb2sudmVyYm9zZQorCisgICAgVmVyYm9zaXR5IGxldmVsIG9mIGdpdC1tdWx0aW1haWwgb24gaXRzIHN0YW5kYXJkIG91dHB1dC4gQnkKKyAgICBkZWZhdWx0LCBzaG93IG9ubHkgZXJyb3IgYW5kIGluZm8gbWVzc2FnZXMuIElmIHNldCB0byB0cnVlLCBzaG93CisgICAgYWxzbyBkZWJ1ZyBtZXNzYWdlcy4KKworRW1haWwgZmlsdGVyaW5nIGFpZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBlbWFpbHMgaW5jbHVkZSBleHRyYSBoZWFkZXJzIHRvIGVuYWJsZSBmaW5lIHR1bmVkIGZpbHRlcmluZyBhbmQKK2dpdmUgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZy4gIEFsbCBlbWFpbHMgaW5jbHVkZSB0aGUgaGVhZGVycworYGBYLUdpdC1Ib3N0YGAsIGBgWC1HaXQtUmVwb2BgLCBgYFgtR2l0LVJlZm5hbWVgYCwgYW5kIGBgWC1HaXQtUmVmdHlwZWBgLgorUmVmZXJlbmNlQ2hhbmdlIGVtYWlscyBhbHNvIGluY2x1ZGUgaGVhZGVycyBgYFgtR2l0LU9sZHJldmBgIGFuZCBgYFgtR2l0LU5ld3JldmBgOworUmV2aXNpb24gZW1haWxzIGFsc28gaW5jbHVkZSBoZWFkZXIgYGBYLUdpdC1SZXZgYC4KKworCitDdXN0b21pemluZyBlbWFpbCBjb250ZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2l0LW11bHRpbWFpbCBtb3N0bHkgZ2VuZXJhdGVzIGVtYWlscyBieSBleHBhbmRpbmcgdGVtcGxhdGVzLiAgVGhlCit0ZW1wbGF0ZXMgY2FuIGJlIGN1c3RvbWl6ZWQuICBUbyBhdm9pZCB0aGUgbmVlZCB0byBlZGl0CitgYGdpdF9tdWx0aW1haWwucHlgYCBkaXJlY3RseSwgdGhlIHByZWZlcnJlZCB3YXkgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZXMKK2lzIHRvIHdyaXRlIGEgc2VwYXJhdGUgUHl0aG9uIHNjcmlwdCB0aGF0IGltcG9ydHMgYGBnaXRfbXVsdGltYWlsLnB5YGAgYXMKK2EgbW9kdWxlLCB0aGVuIHJlcGxhY2VzIHRoZSB0ZW1wbGF0ZXMgaW4gcGxhY2UuICBTZWUgdGhlIHByb3ZpZGVkCitwb3N0LXJlY2VpdmUgc2NyaXB0IGZvciBhbiBleGFtcGxlIG9mIGhvdyB0aGlzIGlzIGRvbmUuCisKKworQ3VzdG9taXppbmcgZ2l0LW11bHRpbWFpbCBmb3IgeW91ciBlbnZpcm9ubWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnaXQtbXVsdGltYWlsIGlzIG1vc3RseSBjdXN0b21pemVkIHZpYSBhbiAiZW52aXJvbm1lbnQiIHRoYXQgZGVzY3JpYmVzCit0aGUgbG9jYWwgZW52aXJvbm1lbnQgaW4gd2hpY2ggR2l0IGlzIHJ1bm5pbmcuICBUd28gdHlwZXMgb2YKK2Vudmlyb25tZW50IGFyZSBidWlsdCBpbjoKKworR2VuZXJpY0Vudmlyb25tZW50CisgICAgYSBzdGFuZC1hbG9uZSBHaXQgcmVwb3NpdG9yeS4KKworR2l0b2xpdGVFbnZpcm9ubWVudAorICAgIGEgR2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBtYW5hZ2VkIGJ5IGdpdG9saXRlXy4gIEZvciBzdWNoCisgICAgcmVwb3NpdG9yaWVzLCB0aGUgaWRlbnRpdHkgb2YgdGhlIHB1c2hlciBpcyByZWFkIGZyb20KKyAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSAkR0xfVVNFUiwgdGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgaXMgcmVhZAorICAgIGZyb20gJEdMX1JFUE8gKGlmIGl0IGlzIG5vdCBvdmVycmlkZGVuIGJ5IG11bHRpbWFpbGhvb2sucmVwb25hbWUpLAorICAgIGFuZCB0aGUgRnJvbTogaGVhZGVyIHZhbHVlIGlzIG9wdGlvbmFsbHkgcmVhZCBmcm9tIGdpdG9saXRlLmNvbmYKKyAgICAoc2VlIG11bHRpbWFpbGhvb2suZnJvbSkuCisKK0J5IGRlZmF1bHQsIGdpdC1tdWx0aW1haWwgYXNzdW1lcyBHaXRvbGl0ZUVudmlyb25tZW50IGlmICRHTF9VU0VSIGFuZAorJEdMX1JFUE8gYXJlIHNldCwgYW5kIG90aGVyd2lzZSBhc3N1bWVzIEdlbmVyaWNFbnZpcm9ubWVudC4KK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gY2hvb3NlIG9uZSBvZiB0aGVzZSB0d28gZW52aXJvbm1lbnRzIGV4cGxpY2l0bHkKK2J5IHNldHRpbmcgYSBgYG11bHRpbWFpbGhvb2suZW52aXJvbm1lbnRgYCBjb25maWcgc2V0dGluZyAod2hpY2ggY2FuCitoYXZlIHRoZSB2YWx1ZSBgZ2VuZXJpY2Agb3IgYGdpdG9saXRlYCkgb3IgYnkgcGFzc2luZyBhbiAtLWVudmlyb25tZW50CitvcHRpb24gdG8gdGhlIHNjcmlwdC4KKworSWYgeW91IG5lZWQgdG8gY3VzdG9taXplIHRoZSBzY3JpcHQgaW4gd2F5cyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5Cit0aGUgZXhpc3RpbmcgZW52aXJvbm1lbnRzLCB5b3UgY2FuIGRlZmluZSB5b3VyIG93biBlbnZpcm9ubWVudCBjbGFzcworY2xhc3MgdXNpbmcgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLiAgVG8gZG8gc28sIHlvdSBuZWVkIHRvIGltcG9ydAorYGBnaXRfbXVsdGltYWlsLnB5YGAgYXMgYSBQeXRob24gbW9kdWxlLCBhcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGV4YW1wbGUKK3Bvc3QtcmVjZWl2ZSBzY3JpcHQuICBUaGVuIGltcGxlbWVudCB5b3VyIGVudmlyb25tZW50IGNsYXNzOyBpdCBzaG91bGQKK3VzdWFsbHkgaW5oZXJpdCBmcm9tIG9uZSBvZiB0aGUgZXhpc3RpbmcgRW52aXJvbm1lbnQgY2xhc3NlcyBhbmQKK3Bvc3NpYmx5IG9uZSBvciBtb3JlIG9mIHRoZSBFbnZpcm9ubWVudE1peGluIGNsYXNzZXMuICBUaGVuIHNldCB0aGUKK2BgZW52aXJvbm1lbnRgYCB2YXJpYWJsZSB0byBhbiBpbnN0YW5jZSBvZiB5b3VyIG93biBlbnZpcm9ubWVudCBjbGFzcworYW5kIHBhc3MgaXQgdG8gYGBydW5fYXNfcG9zdF9yZWNlaXZlX2hvb2soKWBgLgorCitUaGUgc3RhbmRhcmQgZW52aXJvbm1lbnQgY2xhc3NlcywgR2VuZXJpY0Vudmlyb25tZW50IGFuZAorR2l0b2xpdGVFbnZpcm9ubWVudCwgYXJlIGluIGZhY3QgdGhlbXNlbHZlcyBwdXQgdG9nZXRoZXIgb3V0IG9mIGEKK251bWJlciBvZiBtaXhpbiBjbGFzc2VzLCBlYWNoIG9mIHdoaWNoIGhhbmRsZXMgb25lIGFzcGVjdCBvZiB0aGUKK2N1c3RvbWl6YXRpb24uICBGb3IgdGhlIGZpbmVzdCBjb250cm9sIG92ZXIgeW91ciBjb25maWd1cmF0aW9uLCB5b3UKK2NhbiBzcGVjaWZ5IGV4YWN0bHkgd2hpY2ggbWl4aW4gY2xhc3NlcyB5b3VyIG93biBlbnZpcm9ubWVudCBjbGFzcworc2hvdWxkIGluaGVyaXQgZnJvbSwgYW5kIG92ZXJyaWRlIGluZGl2aWR1YWwgbWV0aG9kcyAob3IgZXZlbiBhZGQgeW91cgorb3duIG1peGluIGNsYXNzZXMpIHRvIGltcGxlbWVudCBlbnRpcmVseSBuZXcgYmVoYXZpb3JzLiAgSWYgeW91CitpbXBsZW1lbnQgYW55IG1peGlucyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCB0byBvdGhlciBwZW9wbGUsIHBsZWFzZQorY29uc2lkZXIgc2hhcmluZyB0aGVtIHdpdGggdGhlIGNvbW11bml0eSEKKworCitHZXR0aW5nIGludm9sdmVkCistLS0tLS0tLS0tLS0tLS0tCisKK1BsZWFzZSwgcmVhZCBgPENPTlRSSUJVVElORy5yc3Q+YF9fIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvCitjb250cmlidXRlIHRvIGdpdC1tdWx0aW1haWwuCisKKworRm9vdG5vdGVzCistLS0tLS0tLS0KKworLi4gWzFdIEJlY2F1c2Ugb2YgdGhlIHdheSBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgdG8gdXBkYXRlIGhvb2tzLCB0aGUKKyAgICAgICBzY3JpcHQncyBtZXRob2Qgb2YgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGNvbW1pdCBoYXMgYWxyZWFkeQorICAgICAgIGJlZW4gc2VlbiBkb2VzIG5vdCB3b3JrIHdoZW4gaXQgaXMgdXNlZCBhcyBhbiBgYHVwZGF0ZWBgIHNjcmlwdC4KKyAgICAgICBJbiBwYXJ0aWN1bGFyLCBubyBub3RpZmljYXRpb24gZW1haWwgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGEKKyAgICAgICBuZXcgY29tbWl0IHRoYXQgaXMgYWRkZWQgdG8gbXVsdGlwbGUgcmVmZXJlbmNlcyBpbiB0aGUgc2FtZQorICAgICAgIHB1c2guIEEgd29ya2Fyb3VuZCBpcyB0byB1c2UgLS1mb3JjZS1zZW5kIHRvIGZvcmNlIHNlbmRpbmcgdGhlCisgICAgICAgZW1haWxzLgorCisuLiBfZ2l0b2xpdGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaXRhcmFtYy9naXRvbGl0ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL2N1c3RvbWl6aW5nLWVtYWlscy5yc3QgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9kb2MvY3VzdG9taXppbmctZW1haWxzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjViNjdmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL2N1c3RvbWl6aW5nLWVtYWlscy5yc3QKQEAgLTAsMCArMSw1NiBAQAorQ3VzdG9taXppbmcgdGhlIGNvbnRlbnQgYW5kIGZvcm1hdHRpbmcgb2YgZW1haWxzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT3ZlcmxvYWRpbmcgdGVtcGxhdGUgc3RyaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29udGVudCBvZiBlbWFpbHMgaXMgZ2VuZXJhdGVkIGJhc2VkIG9uIHRlbXBsYXRlIHN0cmluZ3MgZGVmaW5lZAoraW4gYGBnaXRfbXVsdGltYWlsLnB5YGAuIFlvdSBjYW4gY3VzdG9taXplIHRoZXNlIHRlbXBsYXRlIHN0cmluZ3MKK3dpdGhvdXQgY2hhbmdpbmcgdGhlIHNjcmlwdCBpdHNlbGYsIGJ5IGRlZmluaW5nIGEgUHl0aG9uIHdyYXBwZXIKK2Fyb3VuZCBpdC4gVGhlIHB5dGhvbiB3cmFwcGVyIHNob3VsZCBgYGltcG9ydCBnaXRfbXVsdGltYWlsYGAgYW5kIHRoZW4KK292ZXJyaWRlIHRoZSBgYGdpdF9tdWx0aW1haWwuKmBgIHN0cmluZ3MgbGlrZSB0aGlzOjoKKworICBpbXBvcnQgc3lzICAjIG5lZWRlZCBmb3Igc3lzLmFyZ3YKKworICAjIEltcG9ydCBhbmQgY3VzdG9taXplIGdpdF9tdWx0aW1haWw6CisgIGltcG9ydCBnaXRfbXVsdGltYWlsCisgIGdpdF9tdWx0aW1haWwuUkVWSVNJT05fSU5UUk9fVEVNUExBVEUgPSAiIiIuLi4iIiIKKyAgZ2l0X211bHRpbWFpbC5DT01CSU5FRF9JTlRST19URU1QTEFURSA9IGdpdF9tdWx0aW1haWwuUkVWSVNJT05fSU5UUk9fVEVNUExBVEUKKworICAjIHN0YXJ0IGdpdF9tdWx0aW1haWwgaXRzZWxmOgorICBnaXRfbXVsdGltYWlsLm1haW4oc3lzLmFyZ3ZbMTpdKQorCitUaGUgdGVtcGxhdGUgc3RyaW5ncyBjYW4gdXNlIGFueSB2YWx1ZSBhbHJlYWR5IHVzZWQgaW4gdGhlIGV4aXN0aW5nCit0ZW1wbGF0ZXMgKHJlYWQgdGhlIHNvdXJjZSBjb2RlKS4KKworVXNpbmcgSFRNTCBpbiB0ZW1wbGF0ZSBzdHJpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYGBtdWx0aW1haWxob29rLmNvbW1pdEVtYWlsRm9ybWF0YGAgaXMgc2V0IHRvIEhUTUwsIHRoZW4KK2dpdC1tdWx0aW1haWwgd2lsbCBnZW5lcmF0ZSBIVE1MIGVtYWlscyBmb3IgY29tbWl0IG5vdGlmaWNhdGlvbnMuIFRoZQorbG9nIGFuZCBkaWZmIHdpbGwgYmUgZm9ybWF0dGVkIGF1dG9tYXRpY2FsbHkgYnkgZ2l0LW11bHRpbWFpbC4gQnkKK2RlZmF1bHQsIGFueSBIVE1MIHNwZWNpYWwgY2hhcmFjdGVyIGluIHRoZSB0ZW1wbGF0ZXMgd2lsbCBiZSBlc2NhcGVkLgorCitUbyB1c2UgSFRNTCBmb3JtYXR0aW5nIGluIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGVtYWlsLCBzZXQKK2BgbXVsdGltYWlsaG9vay5odG1sSW5JbnRyb2BgIHRvIGBgdHJ1ZWBgLiBUaGVuLCB0aGUgdGVtcGxhdGUgY2FuCitjb250YWluIGFueSBIVE1MIHRhZ3MsIHRoYXQgd2lsbCBiZSBzZW50IGFzLWlzIGluIHRoZSBlbWFpbC4gRm9yCitleGFtcGxlLCB0byBhZGQgc29tZSBmb3JtYXR0aW5nIGFuZCBhIGxpbmsgdG8gdGhlIG9ubGluZSBjb21taXQsIHVzZQorYSBmb3JtYXQgbGlrZTo6CisKKyAgZ2l0X211bHRpbWFpbC5SRVZJU0lPTl9JTlRST19URU1QTEFURSA9ICIiIlwKKyAgPHNwYW4gc3R5bGU9ImNvbG9yOiM4MDgwODAiPlRoaXMgaXMgYW4gYXV0b21hdGVkIGVtYWlsIGZyb20gdGhlIGdpdCBob29rcy9wb3N0LXJlY2VpdmUgc2NyaXB0Ljwvc3Bhbj48YnIgLz48YnIgLz4KKworICA8c3Ryb25nPiUocHVzaGVyKXM8L3N0cm9uZz4gcHVzaGVkIGEgY29tbWl0IHRvICUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMKKyAgaW4gcmVwb3NpdG9yeSAlKHJlcG9fc2hvcnRuYW1lKXMuPGJyIC8+CisKKyAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9jb21taXQvJShuZXdyZXYpcyI+VmlldyBvbiBHaXRIdWI8L2E+LgorICAiIiIKKworTm90ZSB0aGF0IHRoZSB2YWx1ZXMgZXhwYW5kZWQgZnJvbSBgYCUodmFyaWFibGUpc2BgIGluIHRoZSBmb3JtYXQKK3N0cmluZ3Mgd2lsbCBzdGlsbCBiZSBlc2NhcGVkLgorCitGb3IgYSBsZXNzIGZsZXhpYmxlIGJ1dCBlYXNpZXIgdG8gc2V0IHVwIHdheSB0byBhZGQgYSBsaW5rIHRvIGNvbW1pdAorZW1haWxzLCBzZWUgYGBtdWx0aW1haWxob29rLmNvbW1pdEJyb3dzZVVSTGBgLgorCitTaW1pbGFybHksIG9uZSBjYW4gc2V0IGBgbXVsdGltYWlsaG9vay5odG1sSW5Gb290ZXJgYCBhbmQgb3ZlcnJpZGUgYW55CitvZiB0aGUgYGAqX0ZPT1RFUipgYCB0ZW1wbGF0ZSBzdHJpbmdzLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL2dlcnJpdC5yc3QgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9kb2MvZ2Vycml0LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDExZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL2dlcnJpdC5yc3QKQEAgLTAsMCArMSw1NiBAQAorU2V0dGluZyB1cCBnaXQtbXVsdGltYWlsIG9uIEdlcnJpdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitHZXJyaXQgaGFzIGl0cyBvd24gZW1haWwtc2VuZGluZyBzeXN0ZW0sIGJ1dCB5b3UgbWF5IHByZWZlciB1c2luZworYGBnaXQtbXVsdGltYWlsYGAgaW5zdGVhZC4gSXQgc3VwcG9ydHMgR2Vycml0IG5hdGl2ZWx5IGFzIGEgR2Vycml0CitgYHJlZi11cGRhdGVkYGAgaG9vayAoV2FybmluZzogYEdlcnJpdCBob29rcworPGh0dHBzOi8vZ2Vycml0LXJldmlldy5nb29nbGVzb3VyY2UuY29tL0RvY3VtZW50YXRpb24vY29uZmlnLWhvb2tzLmh0bWw+YF9fCithcmUgZGlzdGluY3QgZnJvbSBHaXQgaG9va3MpLiBTZXR0aW5nIHVwIGBgZ2l0LW11bHRpbWFpbGBgIG9uIGEgR2Vycml0CitpbnN0YWxsYXRpb24gY2FuIGJlIGRvbmUgZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgYmVsb3cuCisKK1RoZSBleHBsYW5hdGlvbnMgc2hvdyBhbiBlYXN5IHdheSB0byBzZXQgdXAgYGBnaXQtbXVsdGltYWlsYGAsCitidXQgbGVhdmUgYGBnaXQtbXVsdGltYWlsYGAgaW5zdGFsbGVkIGFuZCB1bmNvbmZpZ3VyZWQgZm9yIGEgd2hpbGUuIElmCit5b3UgcnVuIEdlcnJpdCBvbiBhIHByb2R1Y3Rpb24gc2VydmVyLCBpdCBpcyBhZHZpc2VkIHRoYXQgeW91CitleGVjdXRlIHRoZSBzdGVwICJTZXQgdXAgdGhlIGhvb2siIGxhc3QgdG8gYXZvaWQgY29uZnVzaW5nIHlvdXIgdXNlcnMKK2luIHRoZSBtZWFudGltZS4KKworU2V0IHVwIHRoZSBob29rCistLS0tLS0tLS0tLS0tLS0KKworQ3JlYXRlIGEgZGlyZWN0b3J5IGBgJHNpdGVfcGF0aC9ob29rcy9gYCBpZiBpdCBkb2VzIG5vdCBleGlzdCAoaWYgeW91Citkb24ndCBrbm93IHdoYXQgYGAkc2l0ZV9wYXRoYGAgaXMsIHJ1biBgYGdlcnJpdC5zaCBzdGF0dXNgYCBhbmQgbG9vaworZm9yIGEgYGBHRVJSSVRfU0lURWBgIGxpbmUpLiBFaXRoZXIgY29weSBgYGdpdF9tdWx0aW1haWwucHlgYCB0bworYGAkc2l0ZV9wYXRoL2hvb2tzL3JlZi11cGRhdGVkYGAgb3IgY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQgbGlrZQordGhpczo6CisKKyAgIyEgL2Jpbi9zaAorICBleGVjIC9wYXRoL3RvL2dpdF9tdWx0aW1haWwucHkgIiRAIgorCitJbiBib3RoIGNhc2VzLCBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgbmFtZWQgZXhhY3RseQorYGAkc2l0ZV9wYXRoL2hvb2tzL3JlZi11cGRhdGVkYGAgYW5kIGlzIGV4ZWN1dGFibGUuCisKKyhBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGNvbmZpZ3VyZSB0aGUgYGBbaG9va3NdYGAgc2VjdGlvbiBvZgorZ2Vycml0LmNvbmZpZykKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitMb2cgb24gdGhlIGdlcnJpdCBzZXJ2ZXIgYW5kIGVkaXQgYGAkc2l0ZV9wYXRoL2dpdC8kcHJvamVjdC9jb25maWdgYAordG8gY29uZmlndXJlIGBgZ2l0LW11bHRpbWFpbGBgLgorCitUcm91Ymxlc2hvb3RpbmcKKy0tLS0tLS0tLS0tLS0tLQorCitXYXJuaW5nOiB0aGlzIHdpbGwgZGlzYWJsZSBgYGdpdC1tdWx0aW1haWxgYCBkdXJpbmcgdGhlIGRlYnVnLCBhbmQKK2NvdWxkIGNvbmZ1c2UgeW91ciB1c2Vycy4gRG9uJ3QgcnVuIG9uIGEgcHJvZHVjdGlvbiBzZXJ2ZXIuCisKK1RvIGRlYnVnIGNvbmZpZ3VyYXRpb24gaXNzdWVzIHdpdGggYGBnaXQtbXVsdGltYWlsYGAsIHlvdSBjYW4gYWRkIHRoZQorYGAtLXN0ZG91dGBgIG9wdGlvbiB3aGVuIGNhbGxpbmcgYGBnaXRfbXVsdGltYWlsLnB5YGAgbGlrZSB0aGlzOjoKKworICAjIS9iaW4vc2gKKyAgZXhlYyAvcGF0aC90by9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weSBcCisgICAgLS1zdGRvdXQgIiRAIiA+PiAvdG1wL2xvZy50eHQKKworYW5kIHRyeSBwdXNoaW5nIGZyb20gYSB0ZXN0IHJlcG9zaXRvcnkuIFlvdSBzaG91bGQgc2VlIHRoZSBzb3VyY2Ugb2YKK3RoZSBlbWFpbCB0aGF0IHdvdWxkIGhhdmUgYmVlbiBzZW50IGluIHRoZSBvdXRwdXQgb2YgYGBnaXQgcHVzaGBgIGluCit0aGUgZmlsZSBgYC90bXAvbG9nLnR4dGBgLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL2dpdG9saXRlLnJzdCBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9naXRvbGl0ZS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1NDgzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9naXRvbGl0ZS5yc3QKQEAgLTAsMCArMSwxMTggQEAKK1NldHRpbmcgdXAgZ2l0LW11bHRpbWFpbCBvbiBnaXRvbGl0ZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2BgZ2l0LW11bHRpbWFpbGBgIHN1cHBvcnRzIGdpdG9saXRlIDMgbmF0aXZlbHkuCitUaGUgZXhwbGFuYXRpb25zIGJlbG93IHNob3cgYW4gZWFzeSB3YXkgdG8gc2V0IHVwIGBgZ2l0LW11bHRpbWFpbGBgLAorYnV0IGxlYXZlIGBgZ2l0LW11bHRpbWFpbGBgIGluc3RhbGxlZCBhbmQgdW5jb25maWd1cmVkIGZvciBhIHdoaWxlLiBJZgoreW91IHJ1biBnaXRvbGl0ZSBvbiBhIHByb2R1Y3Rpb24gc2VydmVyLCBpdCBpcyBhZHZpc2VkIHRoYXQgeW91CitleGVjdXRlIHRoZSBzdGVwICJTZXQgdXAgdGhlIGhvb2siIGxhc3QgdG8gYXZvaWQgY29uZnVzaW5nIHlvdXIgdXNlcnMKK2luIHRoZSBtZWFudGltZS4KKworU2V0IHVwIHRoZSBob29rCistLS0tLS0tLS0tLS0tLS0KKworTG9nIGluIGFzIHlvdXIgZ2l0b2xpdGUgdXNlci4KKworQ3JlYXRlIGEgZmlsZSBgYC5naXRvbGl0ZS9ob29rcy9jb21tb24vcG9zdC1yZWNlaXZlYGAgb24geW91ciBnaXRvbGl0ZQorYWNjb3VudCBjb250YWluaW5nIChhZGFwdCB0aGUgcGF0aCwgb2J2aW91c2x5KTo6CisKKyAgIyEvYmluL3NoCisgIGV4ZWMgL3BhdGgvdG8vZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkgIiRAIgorCitNYWtlIHN1cmUgaXQncyBleGVjdXRhYmxlIChgYGNobW9kICt4YGApLiBSZWNvcmQgdGhlIGhvb2sgaW4KK2dpdG9saXRlOjoKKworICBnaXRvbGl0ZSBzZXR1cAorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK0ZpcnN0LCB5b3UgaGF2ZSB0byBhbGxvdyB0aGUgYWRtaW4gdG8gc2V0IEdpdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKworQXMgZ2l0b2xpdGUgdXNlciwgZWRpdCB0aGUgbGluZSBjb250YWluaW5nIGBgR0lUX0NPTkZJR19LRVlTYGAgaW4gZmlsZQorYGAuZ2l0b2xpdGUucmNgYCwgdG8gbWFrZSBpdCBsb29rIGxpa2U6OgorCisgIEdJVF9DT05GSUdfS0VZUyAgICAgICAgICAgICAgICAgPT4gICdtdWx0aW1haWxob29rXC4uKicsCisKK1lvdSBjYW4gbm93IGxvZyBvdXQgYW5kIHJldHVybiB0byB5b3VyIG5vcm1hbCB1c2VyLgorCitJbiB0aGUgYGBnaXRvbGl0ZS1hZG1pbmBgIGNsb25lLCBlZGl0IHRoZSBmaWxlIGBgY29uZi9naXRvbGl0ZS5jb25mYGAKK2FuZCBhZGQ6OgorCisgIHJlcG8gQGFsbAorICAgICAgIyBOb3Qgc3RyaWN0bHkgbmVlZGVkIGFzIGdpdF9tdWx0aW1haWwucHkgd2lsbCBjaG9zZSBnaXRvbGl0ZSBpZgorICAgICAgIyAkR0xfVVNFUiBpcyBzZXQuCisgICAgICBjb25maWcgbXVsdGltYWlsaG9vay5lbnZpcm9ubWVudCA9IGdpdG9saXRlCisgICAgICBjb25maWcgbXVsdGltYWlsaG9vay5tYWlsaW5nTGlzdCA9ICMgV2hlcmUgZW1haWxzIHNob3VsZCBiZSBzZW50CisgICAgICBjb25maWcgbXVsdGltYWlsaG9vay5mcm9tID0gIyBGcm9tIGFkZHJlc3MgdG8gdXNlCisKK05vdGUgdGhhdCBieSBkZWZhdWx0LCBnaXRvbGl0ZSBmb3JiaWRzIGBgPGBgIGFuZCBgYD5gYCBpbiB2YXJpYWJsZQordmFsdWVzIChmb3Igc2VjdXJpdHkvcGFyYW5vaWEgcmVhc29ucywgc2VlCitgY29tcGVuc2F0aW5nIGZvciBVTlNBRkVfUEFUVAorPGh0dHA6Ly9naXRvbGl0ZS5jb20vZ2l0b2xpdGUvZ2l0LWNvbmZpZy9pbmRleC5odG1sI2NvbXBlbnNhdGluZy1mb3ItdW5zYWZlOTVwYXR0PmBfXworaW4gZ2l0b2xpdGUncyBkb2N1bWVudGF0aW9uIGZvciBleHBsYW5hdGlvbnMgYW5kIGEgd2F5IHRvIGRpc2FibGUKK3RoaXMpLiBBcyBhIGNvbnNlcXVlbmNlLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgYGBGaXJzdCBMYXN0Cis8Rmlyc3QuTGFzdEBleGFtcGxlLmNvbT5gYCBhcyByZWNpcGllbnQgZW1haWwsIGJ1dCBzcGVjaWZ5aW5nCitgYEZpcnN0Lkxhc3RAZXhhbXBsZS5jb21gYCBhbG9uZSB3b3Jrcy4KKworT2J2aW91c2x5LCB5b3UgY2FuIGN1c3RvbWl6ZSBhbGwgcGFyYW1ldGVycyBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIGJ5CithZGRpbmcgdGhlc2UgYGBjb25maWcgbXVsdGltYWlsaG9vay4qYGAgbGluZXMgaW4gdGhlIHNlY3Rpb24KK2NvcnJlc3BvbmRpbmcgdG8gYSByZXBvc2l0b3J5IG9yIHNldCBvZiByZXBvc2l0b3JpZXMuCisKK1RvIGFjdGl2YXRlIGBgZ2l0LW11bHRpbWFpbGBgIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMsIGRvIG5vdCBzZXQKK2BgbXVsdGltYWlsaG9vay5tYWlsaW5nTGlzdGBgIGluIHRoZSBgYEBhbGxgYCBzZWN0aW9uIGFuZCBzZXQgaXQgb25seQorZm9yIHJlcG9zaXRvcmllcyBmb3Igd2hpY2ggeW91IHdhbnQgYGBnaXQtbXVsdGltYWlsYGAuCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IHVwIHRoZSBgYEZyb206YGAgZmllbGQgb24gYSBwZXItdXNlciBiYXNpcworYnkgYWRkaW5nIGEgYGBCRUdJTiBVU0VSIEVNQUlMU2BgL2BgRU5EIFVTRVIgRU1BSUxTYGAgc2VjdGlvbiAoc2VlCitgYC4uL1JFQURNRWBgKS4KKworU3BlY2lmaWNpdGllcyBvZiBHaXRvbGl0ZSBmb3IgQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbXB0eSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworV2l0aCBnaXRvbGl0ZSwgdGhlIHN5bnRheCBgYGNvbmZpZyBtdWx0aW1haWxob29rLmNvbW1pdExpc3QgPSAiImBgCit1bnNldHMgdGhlIHZhcmlhYmxlIGluc3RlYWQgb2Ygc2V0dGluZyBpdCB0byBhbiBlbXB0eSBzdHJpbmcgKHNlZQorYGhlcmUKKzxodHRwOi8vZ2l0b2xpdGUuY29tL2dpdG9saXRlL2dpdC1jb25maWcuaHRtbCNhbi1pbXBvcnRhbnQtd2FybmluZy1hYm91dC1kZWxldGluZy1hLWNvbmZpZy1saW5lPmBfXykuCitBcyBhIHJlc3VsdCwgdGhlcmUgaXMgbm8gd2F5IHRvIHNldCBhIHZhcmlhYmxlIHRvIHRoZSBlbXB0eSBzdHJpbmcuCitJbiBhbGwgbW9zdCBwbGFjZXMgd2hlcmUgYW4gZW1wdHkgdmFsdWUgaXMgcmVxdWlyZWQsIGdpdC1tdWx0aW1haWwKK25vdyBhbGxvd3MgdG8gc3BlY2lmeSBzcGVjaWFsIGBgIm5vbmUiYGAgdmFsdWUgKGNhc2Utc2Vuc2l0aXZlKSB0bworbWVhbiB0aGUgc2FtZS4KKworQWx0ZXJuYXRpdmVseSwgb25lIGNhbiB1c2UgYGAiICJgYCAoYSBzaW5nbGUgc3BhY2UpIGluc3RlYWQgb2YgYGAiImBgLgorSW4gbW9zdCBjYXNlcyAoaW4gcGFydGljdWxhciBgYG11bHRpbWFpbGhvb2suKkxpc3RgYCB2YXJpYWJsZXMpLCB0aGlzCit3aWxsIGJlIGVxdWl2YWxlbnQgdG8gYW4gZW1wdHkgc3RyaW5nLgorCitJZiB5b3UgaGF2ZSBhIHVzZS1jYXNlIHdoZXJlIGBgIm5vbmUiYGAgaXMgbm90IGFuIGFjY2VwdGFibGUgdmFsdWUgYW5kCit5b3UgbmVlZCBgYCIgImBgIG9yICBgYCIiYGAgaW5zdGVhZCwgcGxlYXNlIHJlcG9ydCBpdCBhcyBhIGJ1ZyB0bworZ2l0LW11bHRpbWFpbC4KKworQWxsb3dpbmcgUmVndWxhciBFeHByZXNzaW9ucyBpbiBDb25maWd1cmF0aW9uCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworZ2l0b2xpdGUgaGFzIGEgbWVjaGFuaXNtIHRvIHByZXZlbnQgdW5zYWZlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK3ZhbHVlcywgd2hpY2ggcHJldmVudCBjaGFyYWN0ZXJzIGxpa2UgYGB8YGAgY29tbW9ubHkgdXNlZCBpbiByZWd1bGFyCitleHByZXNzaW9ucy4gSWYgeW91IGRvIG5vdCBuZWVkIHRoZSBzYWZldHkgZmVhdHVyZSBvZiBnaXRvbGl0ZSBhbmQKK25lZWQgdG8gdXNlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4geW91ciBjb25maWd1cmF0aW9uIChlLmcuIGZvcgorYGBtdWx0aW1haWxob29rLnJlZkZpbHRlcipgYCB2YXJpYWJsZXMpLCBzZXQKK2BVTlNBRkVfUEFUVAorPGh0dHA6Ly9naXRvbGl0ZS5jb20vZ2l0b2xpdGUvZ2l0LWNvbmZpZy5odG1sI3Vuc2FmZS1wYXR0PmBfXyB0byBhCitsZXNzIHJlc3RyaWN0aXZlIHZhbHVlLgorCitUcm91Ymxlc2hvb3RpbmcKKy0tLS0tLS0tLS0tLS0tLQorCitXYXJuaW5nOiB0aGlzIHdpbGwgZGlzYWJsZSBgYGdpdC1tdWx0aW1haWxgYCBkdXJpbmcgdGhlIGRlYnVnLCBhbmQKK2NvdWxkIGNvbmZ1c2UgeW91ciB1c2Vycy4gRG9uJ3QgcnVuIG9uIGEgcHJvZHVjdGlvbiBzZXJ2ZXIuCisKK1RvIGRlYnVnIGNvbmZpZ3VyYXRpb24gaXNzdWVzIHdpdGggYGBnaXQtbXVsdGltYWlsYGAsIHlvdSBjYW4gYWRkIHRoZQorYGAtLXN0ZG91dGBgIG9wdGlvbiB3aGVuIGNhbGxpbmcgYGBnaXRfbXVsdGltYWlsLnB5YGAgbGlrZSB0aGlzOjoKKworICAjIS9iaW4vc2gKKyAgZXhlYyAvcGF0aC90by9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weSAtLXN0ZG91dCAiJEAiCisKK2FuZCB0cnkgcHVzaGluZyBmcm9tIGEgdGVzdCByZXBvc2l0b3J5LiBZb3Ugc2hvdWxkIHNlZSB0aGUgc291cmNlIG9mCit0aGUgZW1haWwgdGhhdCB3b3VsZCBoYXZlIGJlZW4gc2VudCBpbiB0aGUgb3V0cHV0IG9mIGBgZ2l0IHB1c2hgYC4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy90cm91Ymxlc2hvb3RpbmcucnN0IGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL3Ryb3VibGVzaG9vdGluZy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxYjUwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy90cm91Ymxlc2hvb3RpbmcucnN0CkBAIC0wLDAgKzEsNzggQEAKK1Ryb3VibGVzaG9vdGluZyBpc3N1ZXMgd2l0aCBnaXQtbXVsdGltYWlsOiBhIEZBUQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0hvdyB0byBjaGVjayB0aGF0IGdpdC1tdWx0aW1haWwgaXMgcHJvcGVybHkgc2V0IHVwPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIHZlcnNpb24gMS40LjAsIGdpdC1tdWx0aW1haWwgYWxsb3dzIGEgc2ltcGxlIHNlbGYtY2hlY2tpbmcgb2YKK2l0cyBjb25maWd1cmF0aW9uOiBydW4gaXQgd2l0aCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK2BgR0lUX01VTFRJTUFJTF9DSEVDS19TRVRVUGBgIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuIFlvdSBzaG91bGQKK2dldCBzb21ldGhpbmcgbGlrZSB0aGlzOjoKKworICAkIEdJVF9NVUxUSU1BSUxfQ0hFQ0tfU0VUVVA9dHJ1ZSAvaG9tZS9tb3kvZGV2L2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5CisgIEVudmlyb25tZW50IHZhbHVlczoKKyAgICAgIGFkbWluaXN0cmF0b3IgOiAndGhlIGFkbWluaXN0cmF0b3Igb2YgdGhpcyByZXBvc2l0b3J5JworICAgICAgY2hhcnNldCA6ICd1dGYtOCcKKyAgICAgIGVtYWlscHJlZml4IDogJ1tnaXQtbXVsdGltYWlsXSAnCisgICAgICBmcWRuIDogJ2FuaWUnCisgICAgICBwcm9qZWN0ZGVzYyA6ICdVTk5BTUVEIFBST0pFQ1QnCisgICAgICBwdXNoZXIgOiAnbW95JworICAgICAgcmVwb19wYXRoIDogJy9ob21lL21veS9kZXYvZ2l0LW11bHRpbWFpbCcKKyAgICAgIHJlcG9fc2hvcnRuYW1lIDogJ2dpdC1tdWx0aW1haWwnCisKKyAgTm93LCBjaGVja2luZyB0aGF0IGdpdC1tdWx0aW1haWwncyBzdGFuZGFyZCBpbnB1dCBpcyBwcm9wZXJseSBzZXQgLi4uCisgIFBsZWFzZSB0eXBlIHNvbWUgdGV4dCBhbmQgdGhlbiBwcmVzcyBSZXR1cm4KKyAgZm9vCisgIFlvdSBoYXZlIGp1c3QgZW50ZXJlZDoKKyAgZm9vCisgIGdpdC1tdWx0aW1haWwgc2VlbXMgcHJvcGVybHkgc2V0IHVwLgorCitJZiB5b3UgZm9yZ290IHRvIHNldCBhbiBpbXBvcnRhbnQgdmFyaWFibGUsIHlvdSBtYXkgZ2V0IGluc3RlYWQ6OgorCisgICQgR0lUX01VTFRJTUFJTF9DSEVDS19TRVRVUD10cnVlIC9ob21lL21veS9kZXYvZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkKKyAgTm8gZW1haWwgcmVjaXBpZW50cyBjb25maWd1cmVkIQorCitEbyBub3Qgc2V0IGBgJEdJVF9NVUxUSU1BSUxfQ0hFQ0tfU0VUVVBgYCBvdGhlciB0aGFuIGZvciB0ZXN0aW5nIHlvdXIKK2NvbmZpZ3VyYXRpb246IGl0IHdvdWxkIGRpc2FibGUgdGhlIGhvb2sgY29tcGxldGVseS4KKworR2l0IGlzIG5vdCB1c2luZyB0aGUgcmlnaHQgYWRkcmVzcyBpbiB0aGUgRnJvbS9Uby9SZXBseS1UbyBmaWVsZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXJzdCwgbWFrZSBzdXJlIHRoYXQgZ2l0LW11bHRpbWFpbCBhY3R1YWxseSB1c2VzIHdoYXQgeW91IHRoaW5rIGl0IGlzCit1c2luZy4gQSBsb3QgaGFwcGVucyB0byB5b3VyIGVtYWlsIChlc3BlY2lhbGx5IHdoZW4gcG9zdGluZyB0byBhCittYWlsaW5nLWxpc3QpIGJldHdlZW4gdGhlIHRpbWUgYGdpdF9tdWx0aW1haWwucHlgIHNlbmRzIGl0IGFuZCB0aGUKK3RpbWUgaXQgcmVhY2hlcyB5b3VyIGluYm94LgorCitBIHNpbXBsZSB0ZXN0ICh0byBkbyBvbiBhIHRlc3QgcmVwb3NpdG9yeSwgZG8gbm90IHVzZSBpbiBwcm9kdWN0aW9uIGFzCitpdCB3b3VsZCBkaXNhYmxlIGVtYWlsIHNlbmRpbmcpOiBjaGFuZ2UgeW91ciBwb3N0LXJlY2VpdmUgaG9vayB0byBjYWxsCitgZ2l0X211bHRpbWFpbC5weWAgd2l0aCB0aGUgYC0tc3Rkb3V0YCBvcHRpb24sIGFuZCB0cnkgdG8gcHVzaCB0byB0aGUKK3JlcG9zaXRvcnkuIFlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlOjoKKworICBDb3VudGluZyBvYmplY3RzOiAzLCBkb25lLgorICBXcml0aW5nIG9iamVjdHM6IDEwMCUgKDMvMyksIDI2MyBieXRlcyB8IDAgYnl0ZXMvcywgZG9uZS4KKyAgVG90YWwgMyAoZGVsdGEgMCksIHJldXNlZCAwIChkZWx0YSAwKQorICByZW1vdGU6IFNlbmRpbmcgbm90aWZpY2F0aW9uIGVtYWlscyB0bzogZm9vLmJhckBleGFtcGxlLmNvbQorICByZW1vdGU6ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICByZW1vdGU6IERhdGU6IE1vbiwgMjUgQXByIDIwMTYgMTg6Mzk6NTkgKzAyMDAKKyAgcmVtb3RlOiBUbzogZm9vLmJhckBleGFtcGxlLmNvbQorICByZW1vdGU6IFN1YmplY3Q6IFtnaXRdIGJyYW5jaCBtYXN0ZXIgdXBkYXRlZDogZm9vCisgIHJlbW90ZTogTUlNRS1WZXJzaW9uOiAxLjAKKyAgcmVtb3RlOiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKKyAgcmVtb3RlOiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisgIHJlbW90ZTogTWVzc2FnZS1JRDogPDIwMTYwNDI1MTYzOTU5LjIzMTEuMjA0OThAYW5pZT4KKyAgcmVtb3RlOiBGcm9tOiBBdXRoIE9yIDxGb28uQmFyQGV4YW1wbGUuY29tPgorICByZW1vdGU6IFJlcGx5LVRvOiBBdXRoIE9yIDxGb28uQmFyQGV4YW1wbGUuY29tPgorICByZW1vdGU6IFgtR2l0LUhvc3Q6IGV4YW1wbGUKKyAgLi4uCisgIHJlbW90ZTogLS0KKyAgcmVtb3RlOiBUbyBzdG9wIHJlY2VpdmluZyBub3RpZmljYXRpb24gZW1haWxzIGxpa2UgdGhpcyBvbmUsIHBsZWFzZSBjb250YWN0CisgIHJlbW90ZTogdGhlIGFkbWluaXN0cmF0b3Igb2YgdGhpcyByZXBvc2l0b3J5LgorICByZW1vdGU6ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBUbyAvcGF0aC90by9yZXBvCisgICAgIDYyNzhmMDQuLmUxNzNmMjAgIG1hc3RlciAtPiBtYXN0ZXIKKworTm90ZTogdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzZW5kZXIgKFJldHVybi1QYXRoOiBoZWFkZXIpLCBhcyBpdCBpcworbm90IHBhcnQgb2YgdGhlIG1lc3NhZ2UgY29udGVudCBidXQgcGFzc2VkIHRvIHRoZSBtYWlsZXIuIFNvbWUgbWFpbGVyCitzaG93IHRoZSBgYFNlbmRlcjpgYCBmaWVsZCBpbnN0ZWFkIG9mIHRoZSBgYEZyb206YGAgZmllbGQgKGZvcgorZXhhbXBsZSwgWmltYnJhIFdlYm1haWwgc2hvd3MgYGBGcm9tOiA8c2VuZGVyLWZpZWxkPiBvbiBiZWhhbGYgb2YKKzxmcm9tLWZpZWxkPmBgKS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1NjNiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5CkBAIC0wLDAgKzEsNDM0NiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCitfX3ZlcnNpb25fXyA9ICcxLjUuMCcKKworIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNiBNYXR0aGlldSBNb3kgYW5kIG90aGVycworIyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBNaWNoYWVsIEhhZ2dlcnR5IGFuZCBvdGhlcnMKKyMgRGVyaXZlZCBmcm9tIGNvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsLCB3aGljaCBpcworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQW5keSBQYXJraW5zCisjIGFuZCBhbHNvIGluY2x1ZGVzIGNvbnRyaWJ1dGlvbnMgYnkgb3RoZXIgYXV0aG9ycy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZ2l0LW11bHRpbWFpbC4KKyMKKyMgZ2l0LW11bHRpbWFpbCBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorIyAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIiIiR2VuZXJhdGUgbm90aWZpY2F0aW9uIGVtYWlscyBmb3IgcHVzaGVzIHRvIGEgZ2l0IHJlcG9zaXRvcnkuCisKK1RoaXMgaG9vayBzZW5kcyBlbWFpbHMgZGVzY3JpYmluZyBjaGFuZ2VzIGludHJvZHVjZWQgYnkgcHVzaGVzIHRvIGEKK2dpdCByZXBvc2l0b3J5LiAgRm9yIGVhY2ggcmVmZXJlbmNlIHRoYXQgd2FzIGNoYW5nZWQsIGl0IGVtaXRzIG9uZQorUmVmZXJlbmNlQ2hhbmdlIGVtYWlsIHN1bW1hcml6aW5nIGhvdyB0aGUgcmVmZXJlbmNlIHdhcyBjaGFuZ2VkLAorZm9sbG93ZWQgYnkgb25lIFJldmlzaW9uIGVtYWlsIGZvciBlYWNoIG5ldyBjb21taXQgdGhhdCB3YXMgaW50cm9kdWNlZAorYnkgdGhlIHJlZmVyZW5jZSBjaGFuZ2UuCisKK0VhY2ggY29tbWl0IGlzIGFubm91bmNlZCBpbiBleGFjdGx5IG9uZSBSZXZpc2lvbiBlbWFpbC4gIElmIHRoZSBzYW1lCitjb21taXQgaXMgbWVyZ2VkIGludG8gYW5vdGhlciBicmFuY2ggaW4gdGhlIHNhbWUgb3IgYSBsYXRlciBwdXNoLCB0aGVuCit0aGUgUmVmZXJlbmNlQ2hhbmdlIGVtYWlsIHdpbGwgbGlzdCB0aGUgY29tbWl0J3MgU0hBMSBhbmQgaXRzIG9uZS1saW5lCitzdW1tYXJ5LCBidXQgbm8gbmV3IFJldmlzaW9uIGVtYWlsIHdpbGwgYmUgZ2VuZXJhdGVkLgorCitUaGlzIHNjcmlwdCBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgInBvc3QtcmVjZWl2ZSIgaG9vayBpbiBhIGdpdAorcmVwb3NpdG9yeSAoc2VlIGdpdGhvb2tzKDUpKS4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYW4gInVwZGF0ZSIKK3NjcmlwdCwgYnV0IHRoaXMgdXNhZ2UgaXMgbm90IGNvbXBsZXRlbHkgcmVsaWFibGUgYW5kIGlzIGRlcHJlY2F0ZWQuCisKK1RvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcsIHRoaXMgc2NyaXB0IGFjY2VwdHMgYSAtLXN0ZG91dCBvcHRpb24sIHdoaWNoCitjYXVzZXMgdGhlIGVtYWlscyB0byBiZSB3cml0dGVuIHRvIHN0YW5kYXJkIG91dHB1dCByYXRoZXIgdGhhbiBzZW50Cit1c2luZyBzZW5kbWFpbC4KKworU2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUgZm9yIHRoZSBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLgorCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBiaXNlY3QKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzbXRwbGliCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgUHl0aG9uIDwgMi42IGRvIG5vdCBoYXZlIHNzbCwgYnV0IHRoYXQncyBPSyBpZiB3ZSBkb24ndCB1c2UgaXQuCisgICAgcGFzcworaW1wb3J0IHRpbWUKKworaW1wb3J0IHV1aWQKK2ltcG9ydCBiYXNlNjQKKworUFlUSE9OMyA9IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDApCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPD0gKDIsIDUpOgorICAgIGRlZiBhbGwoaXRlcmFibGUpOgorICAgICAgICBmb3IgZWxlbWVudCBpbiBpdGVyYWJsZToKKyAgICAgICAgICAgIGlmIG5vdCBlbGVtZW50OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBpc19hc2NpaShzKToKKyAgICByZXR1cm4gYWxsKG9yZChjKSA8IDEyOCBhbmQgb3JkKGMpID4gMCBmb3IgYyBpbiBzKQorCisKK2lmIFBZVEhPTjM6CisgICAgZGVmIGlzX3N0cmluZyhzKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uocywgc3RyKQorCisgICAgZGVmIHN0cl90b19ieXRlcyhzKToKKyAgICAgICAgcmV0dXJuIHMuZW5jb2RlKEVOQ09ESU5HKQorCisgICAgZGVmIGJ5dGVzX3RvX3N0cihzLCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gcy5kZWNvZGUoRU5DT0RJTkcsIGVycm9ycykKKworICAgIHVuaWNvZGUgPSBzdHIKKworICAgIGRlZiB3cml0ZV9zdHIoZiwgbXNnKToKKyAgICAgICAgIyBUcnkgb3V0cHV0dGluZyB3aXRoIHRoZSBkZWZhdWx0IGVuY29kaW5nLiBJZiBpdCBmYWlscywKKyAgICAgICAgIyB0cnkgVVRGLTguCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuYnVmZmVyLndyaXRlKG1zZy5lbmNvZGUoc3lzLmdldGRlZmF1bHRlbmNvZGluZygpKSkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIGYuYnVmZmVyLndyaXRlKG1zZy5lbmNvZGUoRU5DT0RJTkcpKQorCisgICAgZGVmIHJlYWRfbGluZShmKToKKyAgICAgICAgIyBUcnkgcmVhZGluZyB3aXRoIHRoZSBkZWZhdWx0IGVuY29kaW5nLiBJZiBpdCBmYWlscywKKyAgICAgICAgIyB0cnkgVVRGLTguCisgICAgICAgIG91dCA9IGYuYnVmZmVyLnJlYWRsaW5lKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIG91dC5kZWNvZGUoc3lzLmdldGRlZmF1bHRlbmNvZGluZygpKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIG91dC5kZWNvZGUoRU5DT0RJTkcpCisKKyAgICBpbXBvcnQgaHRtbAorCisgICAgZGVmIGh0bWxfZXNjYXBlKHMpOgorICAgICAgICByZXR1cm4gaHRtbC5lc2NhcGUocykKKworZWxzZToKKyAgICBkZWYgaXNfc3RyaW5nKHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShzLCBiYXNlc3RyaW5nKQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOiAgIyBTaWxlbmNlIFB5Zmxha2VzIHdhcm5pbmcKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgc3RyX3RvX2J5dGVzKHMpOgorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGJ5dGVzX3RvX3N0cihzLCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIHdyaXRlX3N0cihmLCBtc2cpOgorICAgICAgICBmLndyaXRlKG1zZykKKworICAgIGRlZiByZWFkX2xpbmUoZik6CisgICAgICAgIHJldHVybiBmLnJlYWRsaW5lKCkKKworICAgIGRlZiBuZXh0KGl0KToKKyAgICAgICAgcmV0dXJuIGl0Lm5leHQoKQorCisgICAgaW1wb3J0IGNnaQorCisgICAgZGVmIGh0bWxfZXNjYXBlKHMpOgorICAgICAgICByZXR1cm4gY2dpLmVzY2FwZShzLCBUcnVlKQorCit0cnk6CisgICAgZnJvbSBlbWFpbC5jaGFyc2V0IGltcG9ydCBDaGFyc2V0CisgICAgZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgbWFrZV9tc2dpZAorICAgIGZyb20gZW1haWwudXRpbHMgaW1wb3J0IGdldGFkZHJlc3NlcworICAgIGZyb20gZW1haWwudXRpbHMgaW1wb3J0IGZvcm1hdGFkZHIKKyAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBmb3JtYXRkYXRlCisgICAgZnJvbSBlbWFpbC5oZWFkZXIgaW1wb3J0IEhlYWRlcgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgUHJpb3IgdG8gUHl0aG9uIDIuNSwgdGhlIGVtYWlsIG1vZHVsZSB1c2VkIGRpZmZlcmVudCBuYW1lczoKKyAgICBmcm9tIGVtYWlsLkNoYXJzZXQgaW1wb3J0IENoYXJzZXQKKyAgICBmcm9tIGVtYWlsLlV0aWxzIGltcG9ydCBtYWtlX21zZ2lkCisgICAgZnJvbSBlbWFpbC5VdGlscyBpbXBvcnQgZ2V0YWRkcmVzc2VzCisgICAgZnJvbSBlbWFpbC5VdGlscyBpbXBvcnQgZm9ybWF0YWRkcgorICAgIGZyb20gZW1haWwuVXRpbHMgaW1wb3J0IGZvcm1hdGRhdGUKKyAgICBmcm9tIGVtYWlsLkhlYWRlciBpbXBvcnQgSGVhZGVyCisKKworREVCVUcgPSBGYWxzZQorCitaRVJPUyA9ICcwJyAqIDQwCitMT0dCRUdJTiA9ICctIExvZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJworTE9HRU5EID0gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4nCisKK0FERFJfSEVBREVSUyA9IHNldChbJ2Zyb20nLCAndG8nLCAnY2MnLCAnYmNjJywgJ3JlcGx5LXRvJywgJ3NlbmRlciddKQorCisjIEl0IGlzIGFzc3VtZWQgaW4gbWFueSBwbGFjZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMgdW5pZm9ybWx5IFVURi04LAorIyBzbyBjaGFuZ2luZyB0aGVzZSBjb25zdGFudHMgaXMgdW5zdXBwb3J0ZWQuICBCdXQgZGVmaW5lIHRoZW0gaGVyZQorIyBhbnl3YXksIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgKGF0IGxlYXN0IG1vc3Qgb2YpIHRoZSBwbGFjZXMKKyMgd2hlcmUgdGhlIGVuY29kaW5nIGlzIGltcG9ydGFudC4KKyhFTkNPRElORywgQ0hBUlNFVCkgPSAoJ1VURi04JywgJ3V0Zi04JykKKworCitSRUZfQ1JFQVRFRF9TVUJKRUNUX1RFTVBMQVRFID0gKAorICAgICclKGVtYWlscHJlZml4KXMlKHJlZm5hbWVfdHlwZSlzICUoc2hvcnRfcmVmbmFtZSlzIGNyZWF0ZWQnCisgICAgJyAobm93ICUobmV3cmV2X3Nob3J0KXMpJworICAgICkKK1JFRl9VUERBVEVEX1NVQkpFQ1RfVEVNUExBVEUgPSAoCisgICAgJyUoZW1haWxwcmVmaXgpcyUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMgdXBkYXRlZCcKKyAgICAnICglKG9sZHJldl9zaG9ydClzIC0+ICUobmV3cmV2X3Nob3J0KXMpJworICAgICkKK1JFRl9ERUxFVEVEX1NVQkpFQ1RfVEVNUExBVEUgPSAoCisgICAgJyUoZW1haWxwcmVmaXgpcyUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMgZGVsZXRlZCcKKyAgICAnICh3YXMgJShvbGRyZXZfc2hvcnQpcyknCisgICAgKQorCitDT01CSU5FRF9SRUZDSEFOR0VfUkVWSVNJT05fU1VCSkVDVF9URU1QTEFURSA9ICgKKyAgICAnJShlbWFpbHByZWZpeClzJShyZWZuYW1lX3R5cGUpcyAlKHNob3J0X3JlZm5hbWUpcyB1cGRhdGVkOiAlKG9uZWxpbmUpcycKKyAgICApCisKK1JFRkNIQU5HRV9IRUFERVJfVEVNUExBVEUgPSAiIiJcCitEYXRlOiAlKHNlbmRfZGF0ZSlzCitUbzogJShyZWNpcGllbnRzKXMKK1N1YmplY3Q6ICUoc3ViamVjdClzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0LyUoY29udGVudHR5cGUpczsgY2hhcnNldD0lKGNoYXJzZXQpcworQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorTWVzc2FnZS1JRDogJShtc2dpZClzCitGcm9tOiAlKGZyb21hZGRyKXMKK1JlcGx5LVRvOiAlKHJlcGx5X3RvKXMKK1RocmVhZC1JbmRleDogJSh0aHJlYWRfaW5kZXgpcworWC1HaXQtSG9zdDogJShmcWRuKXMKK1gtR2l0LVJlcG86ICUocmVwb19zaG9ydG5hbWUpcworWC1HaXQtUmVmbmFtZTogJShyZWZuYW1lKXMKK1gtR2l0LVJlZnR5cGU6ICUocmVmbmFtZV90eXBlKXMKK1gtR2l0LU9sZHJldjogJShvbGRyZXYpcworWC1HaXQtTmV3cmV2OiAlKG5ld3JldilzCitYLUdpdC1Ob3RpZmljYXRpb25UeXBlOiByZWZfY2hhbmdlZAorWC1HaXQtTXVsdGltYWlsLVZlcnNpb246ICUobXVsdGltYWlsX3ZlcnNpb24pcworQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkCisiIiIKKworUkVGQ0hBTkdFX0lOVFJPX1RFTVBMQVRFID0gIiIiXAorVGhpcyBpcyBhbiBhdXRvbWF0ZWQgZW1haWwgZnJvbSB0aGUgZ2l0IGhvb2tzL3Bvc3QtcmVjZWl2ZSBzY3JpcHQuCisKKyUocHVzaGVyKXMgcHVzaGVkIGEgY2hhbmdlIHRvICUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMKK2luIHJlcG9zaXRvcnkgJShyZXBvX3Nob3J0bmFtZSlzLgorCisiIiIKKworCitGT09URVJfVEVNUExBVEUgPSAiIiJcCisKKy0tIFxuXAorVG8gc3RvcCByZWNlaXZpbmcgbm90aWZpY2F0aW9uIGVtYWlscyBsaWtlIHRoaXMgb25lLCBwbGVhc2UgY29udGFjdAorJShhZG1pbmlzdHJhdG9yKXMuCisiIiIKKworCitSRVdJTkRfT05MWV9URU1QTEFURSA9ICIiIlwKK1RoaXMgdXBkYXRlIHJlbW92ZWQgZXhpc3RpbmcgcmV2aXNpb25zIGZyb20gdGhlIHJlZmVyZW5jZSwgbGVhdmluZyB0aGUKK3JlZmVyZW5jZSBwb2ludGluZyBhdCBhIHByZXZpb3VzIHBvaW50IGluIHRoZSByZXBvc2l0b3J5IGhpc3RvcnkuCisKKyAqIC0tICogLS0gTiAgICUocmVmbmFtZSlzICglKG5ld3Jldl9zaG9ydClzKQorICAgICAgICAgICAgXFwKKyAgICAgICAgICAgICBPIC0tIE8gLS0gTyAgICglKG9sZHJldl9zaG9ydClzKQorCitBbnkgcmV2aXNpb25zIG1hcmtlZCAib21pdCIgYXJlIG5vdCBnb25lOyBvdGhlciByZWZlcmVuY2VzIHN0aWxsCityZWZlciB0byB0aGVtLiAgQW55IHJldmlzaW9ucyBtYXJrZWQgImRpc2NhcmQiIGFyZSBnb25lIGZvcmV2ZXIuCisiIiIKKworCitOT05fRkZfVEVNUExBVEUgPSAiIiJcCitUaGlzIHVwZGF0ZSBhZGRlZCBuZXcgcmV2aXNpb25zIGFmdGVyIHVuZG9pbmcgZXhpc3RpbmcgcmV2aXNpb25zLgorVGhhdCBpcyB0byBzYXksIHNvbWUgcmV2aXNpb25zIHRoYXQgd2VyZSBpbiB0aGUgb2xkIHZlcnNpb24gb2YgdGhlCislKHJlZm5hbWVfdHlwZSlzIGFyZSBub3QgaW4gdGhlIG5ldyB2ZXJzaW9uLiAgVGhpcyBzaXR1YXRpb24gb2NjdXJzCit3aGVuIGEgdXNlciAtLWZvcmNlIHB1c2hlcyBhIGNoYW5nZSBhbmQgZ2VuZXJhdGVzIGEgcmVwb3NpdG9yeQorY29udGFpbmluZyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisgKiAtLSAqIC0tIEIgLS0gTyAtLSBPIC0tIE8gICAoJShvbGRyZXZfc2hvcnQpcykKKyAgICAgICAgICAgIFxcCisgICAgICAgICAgICAgTiAtLSBOIC0tIE4gICAlKHJlZm5hbWUpcyAoJShuZXdyZXZfc2hvcnQpcykKKworWW91IHNob3VsZCBhbHJlYWR5IGhhdmUgcmVjZWl2ZWQgbm90aWZpY2F0aW9uIGVtYWlscyBmb3IgYWxsIG9mIHRoZSBPCityZXZpc2lvbnMsIGFuZCBzbyB0aGUgZm9sbG93aW5nIGVtYWlscyBkZXNjcmliZSBvbmx5IHRoZSBOIHJldmlzaW9ucworZnJvbSB0aGUgY29tbW9uIGJhc2UsIEIuCisKK0FueSByZXZpc2lvbnMgbWFya2VkICJvbWl0IiBhcmUgbm90IGdvbmU7IG90aGVyIHJlZmVyZW5jZXMgc3RpbGwKK3JlZmVyIHRvIHRoZW0uICBBbnkgcmV2aXNpb25zIG1hcmtlZCAiZGlzY2FyZCIgYXJlIGdvbmUgZm9yZXZlci4KKyIiIgorCisKK05PX05FV19SRVZJU0lPTlNfVEVNUExBVEUgPSAiIiJcCitObyBuZXcgcmV2aXNpb25zIHdlcmUgYWRkZWQgYnkgdGhpcyB1cGRhdGUuCisiIiIKKworCitESVNDQVJERURfUkVWSVNJT05TX1RFTVBMQVRFID0gIiIiXAorVGhpcyBjaGFuZ2UgcGVybWFuZW50bHkgZGlzY2FyZHMgdGhlIGZvbGxvd2luZyByZXZpc2lvbnM6CisiIiIKKworCitOT19ESVNDQVJERURfUkVWSVNJT05TX1RFTVBMQVRFID0gIiIiXAorVGhlIHJldmlzaW9ucyB0aGF0IHdlcmUgb24gdGhpcyAlKHJlZm5hbWVfdHlwZSlzIGFyZSBzdGlsbCBjb250YWluZWQgaW4KK290aGVyIHJlZmVyZW5jZXM7IHRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgZGlzY2FyZCBhbnkgY29tbWl0cworZnJvbSB0aGUgcmVwb3NpdG9yeS4KKyIiIgorCisKK05FV19SRVZJU0lPTlNfVEVNUExBVEUgPSAiIiJcCitUaGUgJSh0b3QpcyByZXZpc2lvbnMgbGlzdGVkIGFib3ZlIGFzICJuZXciIGFyZSBlbnRpcmVseSBuZXcgdG8gdGhpcworcmVwb3NpdG9yeSBhbmQgd2lsbCBiZSBkZXNjcmliZWQgaW4gc2VwYXJhdGUgZW1haWxzLiAgVGhlIHJldmlzaW9ucworbGlzdGVkIGFzICJhZGQiIHdlcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSByZXBvc2l0b3J5IGFuZCBoYXZlIG9ubHkKK2JlZW4gYWRkZWQgdG8gdGhpcyByZWZlcmVuY2UuCisKKyIiIgorCisKK1RBR19DUkVBVEVEX1RFTVBMQVRFID0gIiIiXAorICAgICAgYXQgJShuZXdyZXZfc2hvcnQpLThzICglKG5ld3Jldl90eXBlKXMpCisiIiIKKworCitUQUdfVVBEQVRFRF9URU1QTEFURSA9ICIiIlwKKyoqKiBXQVJOSU5HOiB0YWcgJShzaG9ydF9yZWZuYW1lKXMgd2FzIG1vZGlmaWVkISAqKioKKworICAgIGZyb20gJShvbGRyZXZfc2hvcnQpLThzICglKG9sZHJldl90eXBlKXMpCisgICAgICB0byAlKG5ld3Jldl9zaG9ydCktOHMgKCUobmV3cmV2X3R5cGUpcykKKyIiIgorCisKK1RBR19ERUxFVEVEX1RFTVBMQVRFID0gIiIiXAorKioqIFdBUk5JTkc6IHRhZyAlKHNob3J0X3JlZm5hbWUpcyB3YXMgZGVsZXRlZCEgKioqCisKKyIiIgorCisKKyMgVGhlIHRlbXBsYXRlIHVzZWQgaW4gc3VtbWFyeSB0YWJsZXMuICBJdCBsb29rcyBiZXN0IGlmIHRoaXMgdXNlcyB0aGUKKyMgc2FtZSBhbGlnbm1lbnQgYXMgVEFHX0NSRUFURURfVEVNUExBVEUgYW5kIFRBR19VUERBVEVEX1RFTVBMQVRFLgorQlJJRUZfU1VNTUFSWV9URU1QTEFURSA9ICIiIlwKKyUoYWN0aW9uKThzICUocmV2X3Nob3J0KS04cyAlKHRleHQpcworIiIiCisKKworTk9OX0NPTU1JVF9VUERBVEVfVEVNUExBVEUgPSAiIiJcCitUaGlzIGlzIGFuIHVudXN1YWwgcmVmZXJlbmNlIGNoYW5nZSBiZWNhdXNlIHRoZSByZWZlcmVuY2UgZGlkIG5vdAorcmVmZXIgdG8gYSBjb21taXQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgY2hhbmdlLiAgV2UgZG8gbm90IGtub3cKK2hvdyB0byBwcm92aWRlIGZ1bGwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyByZWZlcmVuY2UgY2hhbmdlLgorIiIiCisKKworUkVWSVNJT05fSEVBREVSX1RFTVBMQVRFID0gIiIiXAorRGF0ZTogJShzZW5kX2RhdGUpcworVG86ICUocmVjaXBpZW50cylzCitDYzogJShjY19yZWNpcGllbnRzKXMKK1N1YmplY3Q6ICUoZW1haWxwcmVmaXgpcyUobnVtKTAyZC8lKHRvdCkwMmQ6ICUob25lbGluZSlzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0LyUoY29udGVudHR5cGUpczsgY2hhcnNldD0lKGNoYXJzZXQpcworQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorRnJvbTogJShmcm9tYWRkcilzCitSZXBseS1UbzogJShyZXBseV90bylzCitJbi1SZXBseS1UbzogJShyZXBseV90b19tc2dpZClzCitSZWZlcmVuY2VzOiAlKHJlcGx5X3RvX21zZ2lkKXMKK1RocmVhZC1JbmRleDogJSh0aHJlYWRfaW5kZXgpcworWC1HaXQtSG9zdDogJShmcWRuKXMKK1gtR2l0LVJlcG86ICUocmVwb19zaG9ydG5hbWUpcworWC1HaXQtUmVmbmFtZTogJShyZWZuYW1lKXMKK1gtR2l0LVJlZnR5cGU6ICUocmVmbmFtZV90eXBlKXMKK1gtR2l0LVJldjogJShyZXYpcworWC1HaXQtTm90aWZpY2F0aW9uVHlwZTogZGlmZgorWC1HaXQtTXVsdGltYWlsLVZlcnNpb246ICUobXVsdGltYWlsX3ZlcnNpb24pcworQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkCisiIiIKKworUkVWSVNJT05fSU5UUk9fVEVNUExBVEUgPSAiIiJcCitUaGlzIGlzIGFuIGF1dG9tYXRlZCBlbWFpbCBmcm9tIHRoZSBnaXQgaG9va3MvcG9zdC1yZWNlaXZlIHNjcmlwdC4KKworJShwdXNoZXIpcyBwdXNoZWQgYSBjb21taXQgdG8gJShyZWZuYW1lX3R5cGUpcyAlKHNob3J0X3JlZm5hbWUpcworaW4gcmVwb3NpdG9yeSAlKHJlcG9fc2hvcnRuYW1lKXMuCisKKyIiIgorCitMSU5LX1RFWFRfVEVNUExBVEUgPSAiIiJcCitWaWV3IHRoZSBjb21taXQgb25saW5lOgorJShicm93c2VfdXJsKXMKKworIiIiCisKK0xJTktfSFRNTF9URU1QTEFURSA9ICIiIlwKKzxwPjxhIGhyZWY9IiUoYnJvd3NlX3VybClzIj5WaWV3IHRoZSBjb21taXQgb25saW5lPC9hPi48L3A+CisiIiIKKworCitSRVZJU0lPTl9GT09URVJfVEVNUExBVEUgPSBGT09URVJfVEVNUExBVEUKKworCisjIENvbWJpbmVkLCBtZWFuaW5nIHJlZmNoYW5nZStyZXZpc2lvbiBlbWFpbCAoZm9yIHNpbmdsZS1jb21taXQgYWRkaXRpb25zKQorQ09NQklORURfSEVBREVSX1RFTVBMQVRFID0gIiIiXAorRGF0ZTogJShzZW5kX2RhdGUpcworVG86ICUocmVjaXBpZW50cylzCitTdWJqZWN0OiAlKHN1YmplY3QpcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC8lKGNvbnRlbnR0eXBlKXM7IGNoYXJzZXQ9JShjaGFyc2V0KXMKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK01lc3NhZ2UtSUQ6ICUobXNnaWQpcworRnJvbTogJShmcm9tYWRkcilzCitSZXBseS1UbzogJShyZXBseV90bylzCitYLUdpdC1Ib3N0OiAlKGZxZG4pcworWC1HaXQtUmVwbzogJShyZXBvX3Nob3J0bmFtZSlzCitYLUdpdC1SZWZuYW1lOiAlKHJlZm5hbWUpcworWC1HaXQtUmVmdHlwZTogJShyZWZuYW1lX3R5cGUpcworWC1HaXQtT2xkcmV2OiAlKG9sZHJldilzCitYLUdpdC1OZXdyZXY6ICUobmV3cmV2KXMKK1gtR2l0LVJldjogJShyZXYpcworWC1HaXQtTm90aWZpY2F0aW9uVHlwZTogcmVmX2NoYW5nZWRfcGx1c19kaWZmCitYLUdpdC1NdWx0aW1haWwtVmVyc2lvbjogJShtdWx0aW1haWxfdmVyc2lvbilzCitBdXRvLVN1Ym1pdHRlZDogYXV0by1nZW5lcmF0ZWQKKyIiIgorCitDT01CSU5FRF9JTlRST19URU1QTEFURSA9ICIiIlwKK1RoaXMgaXMgYW4gYXV0b21hdGVkIGVtYWlsIGZyb20gdGhlIGdpdCBob29rcy9wb3N0LXJlY2VpdmUgc2NyaXB0LgorCislKHB1c2hlcilzIHB1c2hlZCBhIGNvbW1pdCB0byAlKHJlZm5hbWVfdHlwZSlzICUoc2hvcnRfcmVmbmFtZSlzCitpbiByZXBvc2l0b3J5ICUocmVwb19zaG9ydG5hbWUpcy4KKworIiIiCisKK0NPTUJJTkVEX0ZPT1RFUl9URU1QTEFURSA9IEZPT1RFUl9URU1QTEFURQorCisKK2NsYXNzIENvbW1hbmRFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWQsIHJldGNvZGUpOgorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLnJldGNvZGUgPSByZXRjb2RlCisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICAnQ29tbWFuZCAiJXMiIGZhaWxlZCB3aXRoIHJldGNvZGUgJXMnICUgKCcgJy5qb2luKGNtZCksIHJldGNvZGUsKQorICAgICAgICAgICAgKQorCisKK2NsYXNzIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworIyBUaGUgImdpdCIgcHJvZ3JhbSAodGhpcyBjb3VsZCBiZSBjaGFuZ2VkIHRvIGluY2x1ZGUgYSBmdWxsIHBhdGgpOgorR0lUX0VYRUNVVEFCTEUgPSAnZ2l0JworCisKKyMgSG93ICJnaXQiIHNob3VsZCBiZSBpbnZva2VkIChpbmNsdWRpbmcgZ2xvYmFsIGFyZ3VtZW50cyksIGFzIGEgbGlzdAorIyBvZiB3b3Jkcy4gIFRoaXMgdmFyaWFibGUgaXMgdXN1YWxseSBpbml0aWFsaXplZCBhdXRvbWF0aWNhbGx5IGJ5CisjIHJlYWRfZ2l0X291dHB1dCgpIHZpYSBjaG9vc2VfZ2l0X2NvbW1hbmQoKSwgYnV0IGlmIGEgdmFsdWUgaXMgc2V0CisjIGhlcmUgdGhlbiBpdCB3aWxsIGJlIHVzZWQgdW5jb25kaXRpb25hbGx5LgorR0lUX0NNRCA9IE5vbmUKKworCitkZWYgY2hvb3NlX2dpdF9jb21tYW5kKCk6CisgICAgIiIiRGVjaWRlIGhvdyB0byBpbnZva2UgZ2l0LCBhbmQgcmVjb3JkIHRoZSBjaG9pY2UgaW4gR0lUX0NNRC4iIiIKKworICAgIGdsb2JhbCBHSVRfQ01ECisKKyAgICBpZiBHSVRfQ01EIGlzIE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgQ2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhlICItYyIgb3B0aW9uIGlzIGFjY2VwdGVkIChpdCB3YXMKKyAgICAgICAgICAgICMgb25seSBhZGRlZCBpbiBHaXQgMS43LjIpLiAgV2UgZG9uJ3QgYWN0dWFsbHkgdXNlIHRoZQorICAgICAgICAgICAgIyBvdXRwdXQgb2YgImdpdCAtLXZlcnNpb24iLCB0aG91Z2ggaWYgd2UgbmVlZGVkIG1vcmUKKyAgICAgICAgICAgICMgc3BlY2lmaWMgdmVyc2lvbiBpbmZvcm1hdGlvbiB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0bworICAgICAgICAgICAgIyBkbyBpdC4KKyAgICAgICAgICAgIGNtZCA9IFtHSVRfRVhFQ1VUQUJMRSwgJy1jJywgJ2Zvby5iYXI9YmF6JywgJy0tdmVyc2lvbiddCisgICAgICAgICAgICByZWFkX291dHB1dChjbWQpCisgICAgICAgICAgICBHSVRfQ01EID0gW0dJVF9FWEVDVVRBQkxFLCAnLWMnLCAnaTE4bi5sb2dvdXRwdXRlbmNvZGluZz0lcycgJSAoRU5DT0RJTkcsKV0KKyAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgICAgIEdJVF9DTUQgPSBbR0lUX0VYRUNVVEFCTEVdCisKKworZGVmIHJlYWRfZ2l0X291dHB1dChhcmdzLCBpbnB1dD1Ob25lLCBrZWVwZW5kcz1GYWxzZSwgKiprdyk6CisgICAgIiIiUmVhZCB0aGUgb3V0cHV0IG9mIGEgR2l0IGNvbW1hbmQuIiIiCisKKyAgICBpZiBHSVRfQ01EIGlzIE5vbmU6CisgICAgICAgIGNob29zZV9naXRfY29tbWFuZCgpCisKKyAgICByZXR1cm4gcmVhZF9vdXRwdXQoR0lUX0NNRCArIGFyZ3MsIGlucHV0PWlucHV0LCBrZWVwZW5kcz1rZWVwZW5kcywgKiprdykKKworCitkZWYgcmVhZF9vdXRwdXQoY21kLCBpbnB1dD1Ob25lLCBrZWVwZW5kcz1GYWxzZSwgKiprdyk6CisgICAgaWYgaW5wdXQ6CisgICAgICAgIHN0ZGluID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgIGlucHV0ID0gc3RyX3RvX2J5dGVzKGlucHV0KQorICAgIGVsc2U6CisgICAgICAgIHN0ZGluID0gTm9uZQorICAgIGVycm9ycyA9ICdzdHJpY3QnCisgICAgaWYgJ2Vycm9ycycgaW4ga3c6CisgICAgICAgIGVycm9ycyA9IGt3WydlcnJvcnMnXQorICAgICAgICBkZWwga3dbJ2Vycm9ycyddCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgIHR1cGxlKHN0cl90b19ieXRlcyh3KSBmb3IgdyBpbiBjbWQpLAorICAgICAgICBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgKiprdworICAgICAgICApCisgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoaW5wdXQpCisgICAgb3V0ID0gYnl0ZXNfdG9fc3RyKG91dCwgZXJyb3JzPWVycm9ycykKKyAgICByZXRjb2RlID0gcC53YWl0KCkKKyAgICBpZiByZXRjb2RlOgorICAgICAgICByYWlzZSBDb21tYW5kRXJyb3IoY21kLCByZXRjb2RlKQorICAgIGlmIG5vdCBrZWVwZW5kczoKKyAgICAgICAgb3V0ID0gb3V0LnJzdHJpcCgnXG5ccicpCisgICAgcmV0dXJuIG91dAorCisKK2RlZiByZWFkX2dpdF9saW5lcyhhcmdzLCBrZWVwZW5kcz1GYWxzZSwgKiprdyk6CisgICAgIiIiUmV0dXJuIHRoZSBsaW5lcyBvdXRwdXQgYnkgR2l0IGNvbW1hbmQuCisKKyAgICBSZXR1cm4gYXMgc2luZ2xlIGxpbmVzLCB3aXRoIG5ld2xpbmVzIHN0cmlwcGVkIG9mZi4iIiIKKworICAgIHJldHVybiByZWFkX2dpdF9vdXRwdXQoYXJncywga2VlcGVuZHM9VHJ1ZSwgKiprdykuc3BsaXRsaW5lcyhrZWVwZW5kcykKKworCitkZWYgZ2l0X3Jldl9saXN0X2lzaChjbWQsIHNwZWMsIGFyZ3M9Tm9uZSwgKiprdyk6CisgICAgIiIiQ29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGludm9raW5nIGEgJ2dpdCByZXYtbGlzdCctbGlrZSBjb21tYW5kLgorCisgICAgUGFyYW1ldGVyczoKKyAgICAgICogY21kIGlzIHRoZSBHaXQgY29tbWFuZCB0byBydW4sIGUuZy4sICdyZXYtbGlzdCcgb3IgJ2xvZycuCisgICAgICAqIHNwZWMgaXMgYSBsaXN0IG9mIHJldmlzaW9uIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBuYW1lZAorICAgICAgICBjb21tYW5kLiAgSWYgTm9uZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IGxpc3QuCisgICAgICAqIGFyZ3MgaXMgYSBsaXN0IG9mIGV4dHJhIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIG5hbWVkIGNvbW1hbmQuCisgICAgICAqIEFsbCBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyAoaWYgYW55KSBhcmUgcGFzc2VkIHRvIHRoZQorICAgICAgICB1bmRlcmx5aW5nIHJlYWRfZ2l0X2xpbmVzKCkgZnVuY3Rpb24uCisKKyAgICBSZXR1cm4gdGhlIG91dHB1dCBvZiB0aGUgR2l0IGNvbW1hbmQgaW4gdGhlIGZvcm0gb2YgYSBsaXN0LCBvbmUKKyAgICBlbnRyeSBwZXIgb3V0cHV0IGxpbmUuCisgICAgIiIiCisgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICByZXR1cm4gW10KKyAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgIGFyZ3MgPSBbXQorICAgIGFyZ3MgPSBbY21kLCAnLS1zdGRpbiddICsgYXJncworICAgIHNwZWNfc3RkaW4gPSAnJy5qb2luKHMgKyAnXG4nIGZvciBzIGluIHNwZWMpCisgICAgcmV0dXJuIHJlYWRfZ2l0X2xpbmVzKGFyZ3MsIGlucHV0PXNwZWNfc3RkaW4sICoqa3cpCisKKworZGVmIGdpdF9yZXZfbGlzdChzcGVjLCAqKmt3KToKKyAgICAiIiJSdW4gJ2dpdCByZXYtbGlzdCcgd2l0aCB0aGUgZ2l2ZW4gbGlzdCBvZiByZXZpc2lvbiBhcmd1bWVudHMuCisKKyAgICBTZWUgZ2l0X3Jldl9saXN0X2lzaCgpIGZvciBwYXJhbWV0ZXIgYW5kIHJldHVybiB2YWx1ZQorICAgIGRvY3VtZW50YXRpb24uCisgICAgIiIiCisgICAgcmV0dXJuIGdpdF9yZXZfbGlzdF9pc2goJ3Jldi1saXN0Jywgc3BlYywgKiprdykKKworCitkZWYgZ2l0X2xvZyhzcGVjLCAqKmt3KToKKyAgICAiIiJSdW4gJ2dpdCBsb2cnIHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgcmV2aXNpb24gYXJndW1lbnRzLgorCisgICAgU2VlIGdpdF9yZXZfbGlzdF9pc2goKSBmb3IgcGFyYW1ldGVyIGFuZCByZXR1cm4gdmFsdWUKKyAgICBkb2N1bWVudGF0aW9uLgorICAgICIiIgorICAgIHJldHVybiBnaXRfcmV2X2xpc3RfaXNoKCdsb2cnLCBzcGVjLCAqKmt3KQorCisKK2RlZiBoZWFkZXJfZW5jb2RlKHRleHQsIGhlYWRlcl9uYW1lPU5vbmUpOgorICAgICIiIkVuY29kZSBhbmQgbGluZS13cmFwIHRoZSB2YWx1ZSBvZiBhbiBlbWFpbCBoZWFkZXIgZmllbGQuIiIiCisKKyAgICAjIENvbnZlcnQgdG8gdW5pY29kZSwgaWYgcmVxdWlyZWQuCisgICAgaWYgbm90IGlzaW5zdGFuY2UodGV4dCwgdW5pY29kZSk6CisgICAgICAgIHRleHQgPSB1bmljb2RlKHRleHQsICd1dGYtOCcpCisKKyAgICBpZiBpc19hc2NpaSh0ZXh0KToKKyAgICAgICAgY2hhcnNldCA9ICdhc2NpaScKKyAgICBlbHNlOgorICAgICAgICBjaGFyc2V0ID0gJ3V0Zi04JworCisgICAgcmV0dXJuIEhlYWRlcih0ZXh0LCBoZWFkZXJfbmFtZT1oZWFkZXJfbmFtZSwgY2hhcnNldD1DaGFyc2V0KGNoYXJzZXQpKS5lbmNvZGUoKQorCisKK2RlZiBhZGRyX2hlYWRlcl9lbmNvZGUodGV4dCwgaGVhZGVyX25hbWU9Tm9uZSk6CisgICAgIiIiRW5jb2RlIGFuZCBsaW5lLXdyYXAgdGhlIHZhbHVlIG9mIGFuIGVtYWlsIGhlYWRlciBmaWVsZCBjb250YWluaW5nCisgICAgZW1haWwgYWRkcmVzc2VzLiIiIgorCisgICAgIyBDb252ZXJ0IHRvIHVuaWNvZGUsIGlmIHJlcXVpcmVkLgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHRleHQsIHVuaWNvZGUpOgorICAgICAgICB0ZXh0ID0gdW5pY29kZSh0ZXh0LCAndXRmLTgnKQorCisgICAgdGV4dCA9ICcsICcuam9pbigKKyAgICAgICAgZm9ybWF0YWRkcigoaGVhZGVyX2VuY29kZShuYW1lKSwgZW1haWxhZGRyKSkKKyAgICAgICAgZm9yIG5hbWUsIGVtYWlsYWRkciBpbiBnZXRhZGRyZXNzZXMoW3RleHRdKQorICAgICAgICApCisKKyAgICBpZiBpc19hc2NpaSh0ZXh0KToKKyAgICAgICAgY2hhcnNldCA9ICdhc2NpaScKKyAgICBlbHNlOgorICAgICAgICBjaGFyc2V0ID0gJ3V0Zi04JworCisgICAgcmV0dXJuIEhlYWRlcih0ZXh0LCBoZWFkZXJfbmFtZT1oZWFkZXJfbmFtZSwgY2hhcnNldD1DaGFyc2V0KGNoYXJzZXQpKS5lbmNvZGUoKQorCisKK2NsYXNzIENvbmZpZyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWN0aW9uLCBnaXRfY29uZmlnPU5vbmUpOgorICAgICAgICAiIiJSZXByZXNlbnQgYSBzZWN0aW9uIG9mIHRoZSBnaXQgY29uZmlndXJhdGlvbi4KKworICAgICAgICBJZiBnaXRfY29uZmlnIGlzIHNwZWNpZmllZCwgaXQgaXMgcGFzc2VkIHRvICJnaXQgY29uZmlnIiBpbgorICAgICAgICB0aGUgR0lUX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgbWVhbmluZyB0aGF0ICJnaXQgY29uZmlnIgorICAgICAgICB3aWxsIHJlYWQgdGhlIHNwZWNpZmllZCBwYXRoIHJhdGhlciB0aGFuIHRoZSBHaXQgZGVmYXVsdAorICAgICAgICBjb25maWcgcGF0aHMuIiIiCisKKyAgICAgICAgc2VsZi5zZWN0aW9uID0gc2VjdGlvbgorICAgICAgICBpZiBnaXRfY29uZmlnOgorICAgICAgICAgICAgc2VsZi5lbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5lbnZbJ0dJVF9DT05GSUcnXSA9IGdpdF9jb25maWcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW52ID0gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc3BsaXQocyk6CisgICAgICAgICIiIlNwbGl0IE5VTC10ZXJtaW5hdGVkIHZhbHVlcy4iIiIKKworICAgICAgICB3b3JkcyA9IHMuc3BsaXQoJ1wwJykKKyAgICAgICAgYXNzZXJ0IHdvcmRzWy0xXSA9PSAnJworICAgICAgICByZXR1cm4gd29yZHNbOi0xXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhZGRfY29uZmlnX3BhcmFtZXRlcnMoYyk6CisgICAgICAgICIiIkFkZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdG8gR2l0LgorCisgICAgICAgIGMgaXMgZWl0aGVyIGFuIHN0ciBvciBhIGxpc3Qgb2Ygc3RyLCBlYWNoIGVsZW1lbnQgYmVpbmcgb2YgdGhlCisgICAgICAgIGZvcm0gJ3Zhcj12YWwnIG9yICd2YXInLCB3aXRoIHRoZSBzYW1lIHN5bnRheCBhbmQgbWVhbmluZyBhcworICAgICAgICB0aGUgYXJndW1lbnQgb2YgJ2dpdCAtYyB2YXI9dmFsJy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYywgc3RyKToKKyAgICAgICAgICAgIGMgPSAoYywpCisgICAgICAgIHBhcmFtZXRlcnMgPSBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTkZJR19QQVJBTUVURVJTJywgJycpCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICcgJworICAgICAgICAjIGdpdCBleHBlY3RzIEdJVF9DT05GSUdfUEFSQU1FVEVSUyB0byBiZSBvZiB0aGUgZm9ybQorICAgICAgICAjICAgICInbmFtZTE9dmFsdWUxJyAnbmFtZTI9dmFsdWUyJyAnbmFtZTM9dmFsdWUzJyIKKyAgICAgICAgIyBpbmNsdWRpbmcgZXZlcnl0aGluZyBpbnNpZGUgdGhlIGRvdWJsZSBxdW90ZXMgKGJ1dCBub3QgdGhlIGRvdWJsZQorICAgICAgICAjIHF1b3RlcyB0aGVtc2VsdmVzKS4gIFNwYWNpbmcgaXMgY3JpdGljYWwuICBBbHNvLCBpZiBhIHZhbHVlIGNvbnRhaW5zCisgICAgICAgICMgYSBsaXRlcmFsIHNpbmdsZSBxdW90ZSB0aGF0IHF1b3RlIG11c3QgYmUgcmVwcmVzZW50ZWQgdXNpbmcgdGhlCisgICAgICAgICMgZm91ciBjaGFyYWN0ZXIgc2VxdWVuY2U6ICdcJycKKyAgICAgICAgcGFyYW1ldGVycyArPSAnICcuam9pbigiJyIgKyB4LnJlcGxhY2UoIiciLCAiJ1xcJyciKSArICInIiBmb3IgeCBpbiBjKQorICAgICAgICBvcy5lbnZpcm9uWydHSVRfQ09ORklHX1BBUkFNRVRFUlMnXSA9IHBhcmFtZXRlcnMKKworICAgIGRlZiBnZXQoc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWVzID0gc2VsZi5fc3BsaXQocmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgICAgIFsnY29uZmlnJywgJy0tZ2V0JywgJy0tbnVsbCcsICclcy4lcycgJSAoc2VsZi5zZWN0aW9uLCBuYW1lKV0sCisgICAgICAgICAgICAgICAgZW52PXNlbGYuZW52LCBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICBhc3NlcnQgbGVuKHZhbHVlcykgPT0gMQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1swXQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIGRlZiBnZXRfYm9vbChzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICBbJ2NvbmZpZycsICctLWdldCcsICctLWJvb2wnLCAnJXMuJXMnICUgKHNlbGYuc2VjdGlvbiwgbmFtZSldLAorICAgICAgICAgICAgICAgIGVudj1zZWxmLmVudiwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICByZXR1cm4gdmFsdWUgPT0gJ3RydWUnCisKKyAgICBkZWYgZ2V0X2FsbChzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJSZWFkIGEgKHBvc3NpYmx5IG11bHRpdmFsdWVkKSBzZXR0aW5nIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgUmV0dXJuIHRoZSByZXN1bHQgYXMgYSBsaXN0IG9mIHZhbHVlcywgb3IgZGVmYXVsdCBpZiB0aGUgbmFtZQorICAgICAgICBpcyB1bnNldC4iIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXQocmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgICAgIFsnY29uZmlnJywgJy0tZ2V0LWFsbCcsICctLW51bGwnLCAnJXMuJXMnICUgKHNlbGYuc2VjdGlvbiwgbmFtZSldLAorICAgICAgICAgICAgICAgIGVudj1zZWxmLmVudiwga2VlcGVuZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICApKQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgdCwgZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGUucmV0Y29kZSA9PSAxOgorICAgICAgICAgICAgICAgICMgInRoZSBzZWN0aW9uIG9yIGtleSBpcyBpbnZhbGlkIjsgaS5lLiwgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgICAgICAjIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGtleS4KKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHNldChzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgIFsnY29uZmlnJywgJyVzLiVzJyAlIChzZWxmLnNlY3Rpb24sIG5hbWUpLCB2YWx1ZV0sCisgICAgICAgICAgICBlbnY9c2VsZi5lbnYsCisgICAgICAgICAgICApCisKKyAgICBkZWYgYWRkKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgcmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgWydjb25maWcnLCAnLS1hZGQnLCAnJXMuJXMnICUgKHNlbGYuc2VjdGlvbiwgbmFtZSksIHZhbHVlXSwKKyAgICAgICAgICAgIGVudj1zZWxmLmVudiwKKyAgICAgICAgICAgICkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdldF9hbGwobmFtZSwgZGVmYXVsdD1Ob25lKSBpcyBub3QgTm9uZQorCisgICAgIyBXZSBkb24ndCB1c2UgdGhpcyBtZXRob2QgYW55bW9yZSBpbnRlcm5hbGx5LCBidXQga2VlcCBpdCBoZXJlIGluCisgICAgIyBjYXNlIHNvbWVib2R5IGlzIGNhbGxpbmcgaXQgZnJvbSB0aGVpciBvd24gY29kZToKKyAgICBkZWYgaGFzX2tleShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2VsZgorCisgICAgZGVmIHVuc2V0X2FsbChzZWxmLCBuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgICAgIFsnY29uZmlnJywgJy0tdW5zZXQtYWxsJywgJyVzLiVzJyAlIChzZWxmLnNlY3Rpb24sIG5hbWUpXSwKKyAgICAgICAgICAgICAgICBlbnY9c2VsZi5lbnYsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgdCwgZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGUucmV0Y29kZSA9PSA1OgorICAgICAgICAgICAgICAgICMgVGhlIG5hbWUgZG9lc24ndCBleGlzdCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50ZWQgYW55d2F5Li4uCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHNldF9yZWNpcGllbnRzKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgc2VsZi51bnNldF9hbGwobmFtZSkKKyAgICAgICAgZm9yIHBhaXIgaW4gZ2V0YWRkcmVzc2VzKFt2YWx1ZV0pOgorICAgICAgICAgICAgc2VsZi5hZGQobmFtZSwgZm9ybWF0YWRkcihwYWlyKSkKKworCitkZWYgZ2VuZXJhdGVfc3VtbWFyaWVzKCpsb2dfYXJncyk6CisgICAgIiIiR2VuZXJhdGUgYSBicmllZiBzdW1tYXJ5IGZvciBlYWNoIHJldmlzaW9uIHJlcXVlc3RlZC4KKworICAgIGxvZ19hcmdzIGFyZSBzdHJpbmdzIHRoYXQgd2lsbCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gImdpdCBsb2ciIGFzCisgICAgcmV2aXNpb24gc2VsZWN0b3JzLiAgSXRlcmF0ZSBvdmVyIChzaGExX3Nob3J0LCBzdWJqZWN0KSBmb3IgZWFjaAorICAgIGNvbW1pdCBzcGVjaWZpZWQgYnkgbG9nX2FyZ3MgKHN1YmplY3QgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlCisgICAgY29tbWl0IG1lc3NhZ2UgYXMgYSBzdHJpbmcgd2l0aG91dCBFT0xzKS4iIiIKKworICAgIGNtZCA9IFsKKyAgICAgICAgJ2xvZycsICctLWFiYnJldicsICctLWZvcm1hdD0laCAlcycsCisgICAgICAgIF0gKyBsaXN0KGxvZ19hcmdzKSArIFsnLS0nXQorICAgIGZvciBsaW5lIGluIHJlYWRfZ2l0X2xpbmVzKGNtZCk6CisgICAgICAgIHlpZWxkIHR1cGxlKGxpbmUuc3BsaXQoJyAnLCAxKSkKKworCitkZWYgbGltaXRfbGluZXMobGluZXMsIG1heF9saW5lcyk6CisgICAgZm9yIChpbmRleCwgbGluZSkgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgaWYgaW5kZXggPCBtYXhfbGluZXM6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBpZiBpbmRleCA+PSBtYXhfbGluZXM6CisgICAgICAgIHlpZWxkICcuLi4gJWQgbGluZXMgc3VwcHJlc3NlZCAuLi5cbicgJSAoaW5kZXggKyAxIC0gbWF4X2xpbmVzLCkKKworCitkZWYgbGltaXRfbGluZWxlbmd0aChsaW5lcywgbWF4X2xpbmVsZW5ndGgpOgorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAjIERvbid0IGZvcmdldCB0aGF0IGxpbmVzIGFsd2F5cyBpbmNsdWRlIGEgdHJhaWxpbmcgbmV3bGluZS4KKyAgICAgICAgaWYgbGVuKGxpbmUpID4gbWF4X2xpbmVsZW5ndGggKyAxOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOm1heF9saW5lbGVuZ3RoIC0gN10gKyAnIFsuLi5dXG4nCisgICAgICAgIHlpZWxkIGxpbmUKKworCitjbGFzcyBDb21taXRTZXQob2JqZWN0KToKKyAgICAiIiJBIChjb25zdGFudCkgc2V0IG9mIG9iamVjdCBuYW1lcy4KKworICAgIFRoZSBzZXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggZnVsbCBTSEExIG9iamVjdCBuYW1lcy4gIFRoZQorICAgIF9fY29udGFpbnNfXygpIG1ldGhvZCByZXR1cm5zIFRydWUgaWZmIGl0cyBhcmd1bWVudCBpcyBhbgorICAgIGFiYnJldmlhdGlvbiBvZiBhbnkgdGhlIG5hbWVzIGluIHRoZSBzZXQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZXMpOgorICAgICAgICBzZWxmLl9uYW1lcyA9IHNvcnRlZChuYW1lcykKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX25hbWVzKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBzaGExX2FiYnJldik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmZiB0aGlzIHNldCBjb250YWlucyBzaGExX2FiYnJldiAod2hpY2ggbWlnaHQgYmUgYWJicmV2aWF0ZWQpLiIiIgorCisgICAgICAgIGkgPSBiaXNlY3QuYmlzZWN0X2xlZnQoc2VsZi5fbmFtZXMsIHNoYTFfYWJicmV2KQorICAgICAgICByZXR1cm4gaSA8IGxlbihzZWxmKSBhbmQgc2VsZi5fbmFtZXNbaV0uc3RhcnRzd2l0aChzaGExX2FiYnJldikKKworCitjbGFzcyBHaXRPYmplY3Qob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hhMSwgdHlwZT1Ob25lKToKKyAgICAgICAgaWYgc2hhMSA9PSBaRVJPUzoKKyAgICAgICAgICAgIHNlbGYuc2hhMSA9IHNlbGYudHlwZSA9IHNlbGYuY29tbWl0X3NoYTEgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNoYTEgPSBzaGExCisgICAgICAgICAgICBzZWxmLnR5cGUgPSB0eXBlIG9yIHJlYWRfZ2l0X291dHB1dChbJ2NhdC1maWxlJywgJy10Jywgc2VsZi5zaGExXSkKKworICAgICAgICAgICAgaWYgc2VsZi50eXBlID09ICdjb21taXQnOgorICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0X3NoYTEgPSBzZWxmLnNoYTEKKyAgICAgICAgICAgIGVsaWYgc2VsZi50eXBlID09ICd0YWcnOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfc2hhMSA9IHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsncmV2LXBhcnNlJywgJy0tdmVyaWZ5JywgJyVzXjAnICUgKHNlbGYuc2hhMSwpXQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgQ2Fubm90IGRlcmVmIHRhZyB0byBkZXRlcm1pbmUgY29tbWl0X3NoYTEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfc2hhMSA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfc2hhMSA9IE5vbmUKKworICAgICAgICBzZWxmLnNob3J0ID0gcmVhZF9naXRfb3V0cHV0KFsncmV2LXBhcnNlJywgJy0tc2hvcnQnLCBzaGExXSkKKworICAgIGRlZiBnZXRfc3VtbWFyeShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIChzaGExX3Nob3J0LCBzdWJqZWN0KSBmb3IgdGhpcyBjb21taXQuIiIiCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2hhMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VtcHR5IGNvbW1pdCBoYXMgbm8gc3VtbWFyeScpCisKKyAgICAgICAgcmV0dXJuIG5leHQoaXRlcihnZW5lcmF0ZV9zdW1tYXJpZXMoJy0tbm8td2FsaycsIHNlbGYuc2hhMSkpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBHaXRPYmplY3QpIGFuZCBzZWxmLnNoYTEgPT0gb3RoZXIuc2hhMQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLnNoYTEpCisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgIHJldHVybiBib29sKHNlbGYuc2hhMSkKKworICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgIiIiUHl0aG9uIDIgYmFja3dhcmQgY29tcGF0aWJpbGl0eSIiIgorICAgICAgICByZXR1cm4gc2VsZi5fX25vbnplcm9fXygpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2hhMSBvciBaRVJPUworCisKK2NsYXNzIENoYW5nZShvYmplY3QpOgorICAgICIiIkEgQ2hhbmdlIHRoYXQgaGFzIGJlZW4gbWFkZSB0byB0aGUgR2l0IHJlcG9zaXRvcnkuCisKKyAgICBBYnN0cmFjdCBjbGFzcyBmcm9tIHdoaWNoIGJvdGggUmV2aXNpb25zIGFuZCBSZWZlcmVuY2VDaGFuZ2VzIGFyZQorICAgIGRlcml2ZWQuICBBIENoYW5nZSBrbm93cyBob3cgdG8gZ2VuZXJhdGUgYSBub3RpZmljYXRpb24gZW1haWwKKyAgICBkZXNjcmliaW5nIGl0c2VsZi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCk6CisgICAgICAgIHNlbGYuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLl92YWx1ZXMgPSBOb25lCisgICAgICAgIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZiA9IEZhbHNlCisKKyAgICBkZWYgX2NvbnRhaW5zX2RpZmYoc2VsZik6CisgICAgICAgICMgV2UgZG8gY29udGFpbiBhIGRpZmYsIHNob3VsZCBpdCBiZSByZW5kZXJlZCBpbiBIVE1MPworICAgICAgICBpZiBzZWxmLmVudmlyb25tZW50LmNvbW1pdF9lbWFpbF9mb3JtYXQgPT0gImh0bWwiOgorICAgICAgICAgICAgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmID0gVHJ1ZQorCisgICAgZGVmIF9jb21wdXRlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSB7a2V5d29yZDogZXhwYW5zaW9ufSBmb3IgdGhpcyBDaGFuZ2UuCisKKyAgICAgICAgRGVyaXZlZCBjbGFzc2VzIG92ZXJsb2FkIHRoaXMgbWV0aG9kIHRvIGFkZCBtb3JlIGVudHJpZXMgdG8KKyAgICAgICAgdGhlIHJldHVybiB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW50ZXJuYWxseSBieQorICAgICAgICBnZXRfdmFsdWVzKCkuICBUaGUgcmV0dXJuIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgYSBuZXcKKyAgICAgICAgZGljdGlvbmFyeS4iIiIKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLmVudmlyb25tZW50LmdldF92YWx1ZXMoKQorICAgICAgICBmcm9tYWRkciA9IHNlbGYuZW52aXJvbm1lbnQuZ2V0X2Zyb21hZGRyKGNoYW5nZT1zZWxmKQorICAgICAgICBpZiBmcm9tYWRkciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlc1snZnJvbWFkZHInXSA9IGZyb21hZGRyCisgICAgICAgIHZhbHVlc1snbXVsdGltYWlsX3ZlcnNpb24nXSA9IGdldF92ZXJzaW9uKCkKKyAgICAgICAgcmV0dXJuIHZhbHVlcworCisgICAgIyBBbGlhc2VzIHVzYWJsZSBpbiB0ZW1wbGF0ZSBzdHJpbmdzLiBUdXBsZSBvZiBwYWlycyAoZGVzdGluYXRpb24sCisgICAgIyBzb3VyY2UpLgorICAgIFZBTFVFU19BTElBUyA9ICgKKyAgICAgICAgKCJpZCIsICJuZXdyZXYiKSwKKyAgICAgICAgKQorCisgICAgZGVmIGdldF92YWx1ZXMoc2VsZiwgKipleHRyYV92YWx1ZXMpOgorICAgICAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IHtrZXl3b3JkOiBleHBhbnNpb259IGZvciB0aGlzIENoYW5nZS4KKworICAgICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IG1hcHBpbmcga2V5d29yZHMgdG8gdGhlIHZhbHVlcyB0aGF0IHRoZXkKKyAgICAgICAgc2hvdWxkIGJlIGV4cGFuZGVkIHRvIGZvciB0aGlzIENoYW5nZSAodXNlZCB3aGVuIGludGVycG9sYXRpbmcKKyAgICAgICAgdGVtcGxhdGUgc3RyaW5ncykuICBJZiBhbnkga2V5d29yZCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLCBhZGQKKyAgICAgICAgdGhvc2UgdG8gdGhlIHJldHVybiB2YWx1ZSBhcyB3ZWxsLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMKKyAgICAgICAgYSBuZXcgZGljdGlvbmFyeS4iIiIKKworICAgICAgICBpZiBzZWxmLl92YWx1ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlcyA9IHNlbGYuX2NvbXB1dGVfdmFsdWVzKCkKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLl92YWx1ZXMuY29weSgpCisgICAgICAgIGlmIGV4dHJhX3ZhbHVlczoKKyAgICAgICAgICAgIHZhbHVlcy51cGRhdGUoZXh0cmFfdmFsdWVzKQorCisgICAgICAgIGZvciBhbGlhcywgdmFsIGluIHNlbGYuVkFMVUVTX0FMSUFTOgorICAgICAgICAgICAgdmFsdWVzW2FsaWFzXSA9IHZhbHVlc1t2YWxdCisgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgIGRlZiBleHBhbmQoc2VsZiwgdGVtcGxhdGUsICoqZXh0cmFfdmFsdWVzKToKKyAgICAgICAgIiIiRXhwYW5kIHRlbXBsYXRlLgorCisgICAgICAgIEV4cGFuZCB0aGUgdGVtcGxhdGUgKHdoaWNoIHNob3VsZCBiZSBhIHN0cmluZykgdXNpbmcgc3RyaW5nCisgICAgICAgIGludGVycG9sYXRpb24gb2YgdGhlIHZhbHVlcyBmb3IgdGhpcyBDaGFuZ2UuICBJZiBhbnkga2V5d29yZAorICAgICAgICBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCBhbHNvIGluY2x1ZGUgdGhvc2UgaW4gdGhlIGtleXdvcmRzCisgICAgICAgIGF2YWlsYWJsZSBmb3IgaW50ZXJwb2xhdGlvbi4iIiIKKworICAgICAgICByZXR1cm4gdGVtcGxhdGUgJSBzZWxmLmdldF92YWx1ZXMoKipleHRyYV92YWx1ZXMpCisKKyAgICBkZWYgZXhwYW5kX2xpbmVzKHNlbGYsIHRlbXBsYXRlLCBodG1sX2VzY2FwZV92YWw9RmFsc2UsICoqZXh0cmFfdmFsdWVzKToKKyAgICAgICAgIiIiQnJlYWsgdGVtcGxhdGUgaW50byBsaW5lcyBhbmQgZXhwYW5kIGVhY2ggbGluZS4iIiIKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLmdldF92YWx1ZXMoKipleHRyYV92YWx1ZXMpCisgICAgICAgIGlmIGh0bWxfZXNjYXBlX3ZhbDoKKyAgICAgICAgICAgIGZvciBrIGluIHZhbHVlczoKKyAgICAgICAgICAgICAgICBpZiBpc19zdHJpbmcodmFsdWVzW2tdKToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2tdID0gaHRtbF9lc2NhcGUodmFsdWVzW2tdKQorICAgICAgICBmb3IgbGluZSBpbiB0ZW1wbGF0ZS5zcGxpdGxpbmVzKFRydWUpOgorICAgICAgICAgICAgeWllbGQgbGluZSAlIHZhbHVlcworCisgICAgZGVmIGV4cGFuZF9oZWFkZXJfbGluZXMoc2VsZiwgdGVtcGxhdGUsICoqZXh0cmFfdmFsdWVzKToKKyAgICAgICAgIiIiQnJlYWsgdGVtcGxhdGUgaW50byBsaW5lcyBhbmQgZXhwYW5kIGVhY2ggbGluZSBhcyBhbiBSRkMgMjgyMiBoZWFkZXIuCisKKyAgICAgICAgRW5jb2RlIHZhbHVlcyBhbmQgc3BsaXQgdXAgbGluZXMgdGhhdCBhcmUgdG9vIGxvbmcuICBTaWxlbnRseQorICAgICAgICBza2lwIGxpbmVzIHRoYXQgY29udGFpbiByZWZlcmVuY2VzIHRvIHVua25vd24gdmFyaWFibGVzLiIiIgorCisgICAgICAgIHZhbHVlcyA9IHNlbGYuZ2V0X3ZhbHVlcygqKmV4dHJhX3ZhbHVlcykKKyAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmOgorICAgICAgICAgICAgc2VsZi5fY29udGVudF90eXBlID0gJ2h0bWwnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jb250ZW50X3R5cGUgPSAncGxhaW4nCisgICAgICAgIHZhbHVlc1snY29udGVudHR5cGUnXSA9IHNlbGYuX2NvbnRlbnRfdHlwZQorCisgICAgICAgIGZvciBsaW5lIGluIHRlbXBsYXRlLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIChuYW1lLCB2YWx1ZSkgPSBsaW5lLnNwbGl0KCc6ICcsIDEpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICUgdmFsdWVzCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgdCwgZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBpZiBERUJVRzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5sb2dfd2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICdXYXJuaW5nOiB1bmtub3duIHZhcmlhYmxlICVyIGluIHRoZSBmb2xsb3dpbmcgbGluZTsgbGluZSBza2lwcGVkOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAlc1xuJworICAgICAgICAgICAgICAgICAgICAgICAgJSAoZS5hcmdzWzBdLCBsaW5lLCkKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpIGluIEFERFJfSEVBREVSUzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhZGRyX2hlYWRlcl9lbmNvZGUodmFsdWUsIG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBoZWFkZXJfZW5jb2RlKHZhbHVlLCBuYW1lKQorICAgICAgICAgICAgICAgIGZvciBzcGxpdGxpbmUgaW4gKCclczogJXNcbicgJSAobmFtZSwgdmFsdWUpKS5zcGxpdGxpbmVzKFRydWUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzcGxpdGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9oZWFkZXIoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIHRoZSBSRkMgMjgyMiBlbWFpbCBoZWFkZXJzIGZvciB0aGlzIENoYW5nZSwgYSBsaW5lIGF0IGEgdGltZS4KKworICAgICAgICBUaGUgb3V0cHV0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgdHJhaWxpbmcgYmxhbmsgbGluZS4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBnZW5lcmF0ZV9icm93c2VfbGluayhzZWxmLCBiYXNlX3VybCk6CisgICAgICAgICIiIkdlbmVyYXRlIGEgbGluayB0byBhbiBvbmxpbmUgcmVwb3NpdG9yeSBicm93c2VyLiIiIgorICAgICAgICByZXR1cm4gaXRlcigoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9pbnRybyhzZWxmLCBodG1sX2VzY2FwZV92YWw9RmFsc2UpOgorICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgZW1haWwgaW50cm8gZm9yIHRoaXMgQ2hhbmdlLCBhIGxpbmUgYXQgYSB0aW1lLgorCisgICAgICAgIFRoZSBvdXRwdXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBzdGFuZGFyZCBib2lsZXJwbGF0ZSBhdCB0aGUgdG9wCisgICAgICAgIG9mIHRoZSBlbWFpbCBib2R5LiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2JvZHkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkdlbmVyYXRlIHRoZSBtYWluIHBhcnQgb2YgdGhlIGVtYWlsIGJvZHksIGEgbGluZSBhdCBhIHRpbWUuCisKKyAgICAgICAgVGhlIHRleHQgaW4gdGhlIGJvZHkgbWlnaHQgYmUgdHJ1bmNhdGVkIGFmdGVyIGEgc3BlY2lmaWVkCisgICAgICAgIG51bWJlciBvZiBsaW5lcyAoc2VlIG11bHRpbWFpbGhvb2suZW1haWxtYXhsaW5lcykuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfZm9vdGVyKHNlbGYsIGh0bWxfZXNjYXBlX3ZhbCk6CisgICAgICAgICIiIkdlbmVyYXRlIHRoZSBmb290ZXIgb2YgdGhlIGVtYWlsLCBhIGxpbmUgYXQgYSB0aW1lLgorCisgICAgICAgIFRoZSBmb290ZXIgaXMgYWx3YXlzIGluY2x1ZGVkLCBpcnJlc3BlY3RpdmUgb2YKKyAgICAgICAgbXVsdGltYWlsaG9vay5lbWFpbG1heGxpbmVzLiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF93cmFwX2Zvcl9odG1sKHNlbGYsIGxpbmVzKToKKyAgICAgICAgIiIiV3JhcCB0aGUgbGluZXMgaW4gSFRNTCA8cHJlPiB0YWcgd2hlbiB1c2luZyBIVE1MIGZvcm1hdC4KKworICAgICAgICBFc2NhcGUgc3BlY2lhbCBIVE1MIGNoYXJhY3RlcnMgYW5kIGFkZCA8cHJlPiBhbmQgPC9wcmU+IHRhZ3MgYXJvdW5kCisgICAgICAgIHRoZSBnaXZlbiBsaW5lcyBpZiB3ZSBzaG91bGQgYmUgZ2VuZXJhdGluZyBIVE1MIGFzIGluZGljYXRlZCBieQorICAgICAgICBzZWxmLl9jb250YWluc19odG1sX2RpZmYgYmVpbmcgc2V0IHRvIHRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jb250YWluc19odG1sX2RpZmY6CisgICAgICAgICAgICB5aWVsZCAiPHByZSBzdHlsZT0nbWFyZ2luOjAnPlxuIgorCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICB5aWVsZCBodG1sX2VzY2FwZShsaW5lKQorCisgICAgICAgICAgICB5aWVsZCAnPC9wcmU+XG4nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWwoc2VsZiwgcHVzaCwgYm9keV9maWx0ZXI9Tm9uZSwgZXh0cmFfaGVhZGVyX3ZhbHVlcz17fSk6CisgICAgICAgICIiIkdlbmVyYXRlIGFuIGVtYWlsIGRlc2NyaWJpbmcgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgSXRlcmF0ZSBvdmVyIHRoZSBsaW5lcyAoaW5jbHVkaW5nIHRoZSBoZWFkZXIgbGluZXMpIG9mIGFuCisgICAgICAgIGVtYWlsIGRlc2NyaWJpbmcgdGhpcyBjaGFuZ2UuICBJZiBib2R5X2ZpbHRlciBpcyBub3QgTm9uZSwKKyAgICAgICAgdGhlbiB1c2UgaXQgdG8gZmlsdGVyIHRoZSBsaW5lcyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgdGhlCisgICAgICAgIGVtYWlsIGJvZHkuCisKKyAgICAgICAgVGhlIGV4dHJhX2hlYWRlcl92YWx1ZXMgZmllbGQgaXMgcmVjZWl2ZWQgYXMgYSBkaWN0IGFuZCBub3QgYXMKKyAgICAgICAgKiprd2FyZ3MsIHRvIGFsbG93IHBhc3Npbmcgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgaW4gdGhlCisgICAgICAgIGZ1dHVyZSAoZS5nLiBwYXNzaW5nIGV4dHJhIHZhbHVlcyB0byBnZW5lcmF0ZV9lbWFpbF9pbnRybygpIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5nZW5lcmF0ZV9lbWFpbF9oZWFkZXIoKipleHRyYV9oZWFkZXJfdmFsdWVzKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgJ1xuJworICAgICAgICBodG1sX2VzY2FwZV92YWwgPSAoc2VsZi5lbnZpcm9ubWVudC5odG1sX2luX2ludHJvIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmKQorICAgICAgICBpbnRybyA9IHNlbGYuZ2VuZXJhdGVfZW1haWxfaW50cm8oaHRtbF9lc2NhcGVfdmFsKQorICAgICAgICBpZiBub3Qgc2VsZi5lbnZpcm9ubWVudC5odG1sX2luX2ludHJvOgorICAgICAgICAgICAgaW50cm8gPSBzZWxmLl93cmFwX2Zvcl9odG1sKGludHJvKQorICAgICAgICBmb3IgbGluZSBpbiBpbnRybzoKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBpZiBzZWxmLmVudmlyb25tZW50LmNvbW1pdEJyb3dzZVVSTDoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfYnJvd3NlX2xpbmsoc2VsZi5lbnZpcm9ubWVudC5jb21taXRCcm93c2VVUkwpOgorICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBib2R5ID0gc2VsZi5nZW5lcmF0ZV9lbWFpbF9ib2R5KHB1c2gpCisgICAgICAgIGlmIGJvZHlfZmlsdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYm9keSA9IGJvZHlfZmlsdGVyKGJvZHkpCisKKyAgICAgICAgZGlmZl9zdGFydGVkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmOgorICAgICAgICAgICAgIyAid2hpdGUtc3BhY2U6IHByZSIgaXMgdGhlIGRlZmF1bHQsIGJ1dCB3ZSBuZWVkIHRvCisgICAgICAgICAgICAjIHNwZWNpZnkgaXQgYWdhaW4gaW4gY2FzZSB0aGUgbWVzc2FnZSBpcyB2aWV3ZWQgaW4gYQorICAgICAgICAgICAgIyB3ZWJtYWlsIHdoaWNoIHdyYXBzIGl0IGluIGFuIGVsZW1lbnQgc2V0dGluZyB3aGl0ZS1zcGFjZQorICAgICAgICAgICAgIyB0byBzb21ldGhpbmcgZWxzZSAoWmltYnJhIGRvZXMgdGhpcyBhbmQgc2V0cworICAgICAgICAgICAgIyB3aGl0ZS1zcGFjZTogcHJlLWxpbmUpLgorICAgICAgICAgICAgeWllbGQgJzxwcmUgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmU7IGJhY2tncm91bmQ6ICNGOEY4RjgiPicKKyAgICAgICAgZm9yIGxpbmUgaW4gYm9keToKKyAgICAgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdmVyeSwgdmVyeSBuYWl2ZS4gSXQgd291bGQgYmUgbXVjaCBiZXR0ZXIgdG8gcmVhbGx5CisgICAgICAgICAgICAgICAgIyBwYXJzZSB0aGUgZGlmZiwgaS5lLiBsb29rIGF0IGhvdyBtYW55IGxpbmVzIGRvIHdlIGhhdmUgaW4KKyAgICAgICAgICAgICAgICAjIHRoZSBodW5rIGhlYWRlcnMgaW5zdGVhZCBvZiBibGluZGx5IGhpZ2hsaWdodGluZyBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgIyB0aGF0IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgcGFydCBvZiBhIGRpZmYuCisgICAgICAgICAgICAgICAgYmdjb2xvciA9ICcnCisgICAgICAgICAgICAgICAgZmdjb2xvciA9ICcnCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCctLS0gYS8nKToKKyAgICAgICAgICAgICAgICAgICAgZGlmZl9zdGFydGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gJ2UwZTBmZicKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnZGlmZiAnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ2luZGV4ICcpOgorICAgICAgICAgICAgICAgICAgICBkaWZmX3N0YXJ0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGZnY29sb3IgPSAnODA4MDgwJworICAgICAgICAgICAgICAgIGVsaWYgZGlmZl9zdGFydGVkOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJysrKyAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAnZTBlMGZmJworICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnQEAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAnZTBlMGUwJworICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICdlMGZmZTAnCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCctJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gJ2ZmZTBlMCcKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnY29tbWl0ICcpOgorICAgICAgICAgICAgICAgICAgICBmZ2NvbG9yID0gJzgwODAwMCcKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnICAgICcpOgorICAgICAgICAgICAgICAgICAgICBmZ2NvbG9yID0gJzQwNDA0MCcKKworICAgICAgICAgICAgICAgICMgQ2hvcCB0aGUgdHJhaWxpbmcgTEYsIHdlIGRvbid0IHdhbnQgaXQgaW5zaWRlIDxwcmU+LgorICAgICAgICAgICAgICAgIGxpbmUgPSBodG1sX2VzY2FwZShsaW5lWzotMV0pCisKKyAgICAgICAgICAgICAgICBpZiBiZ2NvbG9yIG9yIGZnY29sb3I6CisgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gJ2Rpc3BsYXk6YmxvY2s7IHdoaXRlLXNwYWNlOnByZTsnCisgICAgICAgICAgICAgICAgICAgIGlmIGJnY29sb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSArPSAnYmFja2dyb3VuZDojJyArIGJnY29sb3IgKyAnOycKKyAgICAgICAgICAgICAgICAgICAgaWYgZmdjb2xvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlICs9ICdjb2xvcjojJyArIGZnY29sb3IgKyAnOycKKyAgICAgICAgICAgICAgICAgICAgIyBVc2UgYSA8c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jaz4gdG8gY29sb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICMgd2hvbGUgbGluZS4gVGhlIG5ld2xpbmUgbXVzdCBiZSBpbnNpZGUgdGhlIHNwYW4KKyAgICAgICAgICAgICAgICAgICAgIyB0byBkaXNwbGF5IHByb3Blcmx5IGJvdGggaW4gRmlyZWZveCBhbmQgaW4KKyAgICAgICAgICAgICAgICAgICAgIyB0ZXh0LWJhc2VkIGJyb3dzZXIuCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSAiPHNwYW4gc3R5bGU9JyVzJz4lc1xuPC9zcGFuPiIgJSAoc3R5bGUsIGxpbmUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnXG4nCisKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmOgorICAgICAgICAgICAgeWllbGQgJzwvcHJlPicKKyAgICAgICAgaHRtbF9lc2NhcGVfdmFsID0gKHNlbGYuZW52aXJvbm1lbnQuaHRtbF9pbl9mb290ZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb250YWluc19odG1sX2RpZmYpCisgICAgICAgIGZvb3RlciA9IHNlbGYuZ2VuZXJhdGVfZW1haWxfZm9vdGVyKGh0bWxfZXNjYXBlX3ZhbCkKKyAgICAgICAgaWYgbm90IHNlbGYuZW52aXJvbm1lbnQuaHRtbF9pbl9mb290ZXI6CisgICAgICAgICAgICBmb290ZXIgPSBzZWxmLl93cmFwX2Zvcl9odG1sKGZvb3RlcikKKyAgICAgICAgZm9yIGxpbmUgaW4gZm9vdGVyOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdldF9zcGVjaWZpY19mcm9tYWRkcihzZWxmKToKKyAgICAgICAgIiIiRm9yIGtpbmRzIG9mIENoYW5nZXMgd2hpY2ggc3BlY2lmeSBpdCwgcmV0dXJuIHRoZSBraW5kLXNwZWNpZmljCisgICAgICAgIEZyb20gYWRkcmVzcyB0byB1c2UuIiIiCisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgUmV2aXNpb24oQ2hhbmdlKToKKyAgICAiIiJBIENoYW5nZSBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGdpdCBjb21taXQuIiIiCisKKyAgICBDQ19SRSA9IHJlLmNvbXBpbGUocideXHMqQ1tDY106XHMqKD9QPHRvPlteI10rQFteXHMjXSopXHMqKCMuKik/JCcpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVmZXJlbmNlX2NoYW5nZSwgcmV2LCBudW0sIHRvdCk6CisgICAgICAgIENoYW5nZS5fX2luaXRfXyhzZWxmLCByZWZlcmVuY2VfY2hhbmdlLmVudmlyb25tZW50KQorICAgICAgICBzZWxmLnJlZmVyZW5jZV9jaGFuZ2UgPSByZWZlcmVuY2VfY2hhbmdlCisgICAgICAgIHNlbGYucmV2ID0gcmV2CisgICAgICAgIHNlbGYuY2hhbmdlX3R5cGUgPSBzZWxmLnJlZmVyZW5jZV9jaGFuZ2UuY2hhbmdlX3R5cGUKKyAgICAgICAgc2VsZi5yZWZuYW1lID0gc2VsZi5yZWZlcmVuY2VfY2hhbmdlLnJlZm5hbWUKKyAgICAgICAgc2VsZi5udW0gPSBudW0KKyAgICAgICAgc2VsZi50b3QgPSB0b3QKKyAgICAgICAgc2VsZi5hdXRob3IgPSByZWFkX2dpdF9vdXRwdXQoWydsb2cnLCAnLS1uby13YWxrJywgJy0tZm9ybWF0PSVhTiA8JWFFPicsIHNlbGYucmV2LnNoYTFdKQorICAgICAgICBzZWxmLnJlY2lwaWVudHMgPSBzZWxmLmVudmlyb25tZW50LmdldF9yZXZpc2lvbl9yZWNpcGllbnRzKHNlbGYpCisKKyAgICAgICAgIyAtcyBpcyBzaG9ydCBmb3IgLS1uby1wYXRjaCwgYnV0IC1zIHdvcmtzIG9uIG9sZGVyIGdpdCdzIChlLmcuIDEuNykKKyAgICAgICAgc2VsZi5wYXJlbnRzID0gcmVhZF9naXRfbGluZXMoWydzaG93JywgJy1zJywgJy0tZm9ybWF0PSVQJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXYuc2hhMV0pWzBdLnNwbGl0KCkKKworICAgICAgICBzZWxmLmNjX3JlY2lwaWVudHMgPSAnJworICAgICAgICBpZiBzZWxmLmVudmlyb25tZW50LmdldF9zY2FuY29tbWl0Zm9yY2MoKToKKyAgICAgICAgICAgIHNlbGYuY2NfcmVjaXBpZW50cyA9ICcsICcuam9pbih0by5zdHJpcCgpIGZvciB0byBpbiBzZWxmLl9jY19yZWNpcGllbnRzKCkpCisgICAgICAgICAgICBpZiBzZWxmLmNjX3JlY2lwaWVudHM6CisgICAgICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5sb2dfbXNnKAorICAgICAgICAgICAgICAgICAgICAnQWRkICVzIHRvIENDIGZvciAlcycgJSAoc2VsZi5jY19yZWNpcGllbnRzLCBzZWxmLnJldi5zaGExKSkKKworICAgIGRlZiBfY2NfcmVjaXBpZW50cyhzZWxmKToKKyAgICAgICAgY2NfcmVjaXBpZW50cyA9IFtdCisgICAgICAgIG1lc3NhZ2UgPSByZWFkX2dpdF9vdXRwdXQoWydsb2cnLCAnLS1uby13YWxrJywgJy0tZm9ybWF0PSViJywgc2VsZi5yZXYuc2hhMV0pCisgICAgICAgIGxpbmVzID0gbWVzc2FnZS5zdHJpcCgpLnNwbGl0KCdcbicpCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHNlbGYuQ0NfUkUsIGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGNjX3JlY2lwaWVudHMuYXBwZW5kKG0uZ3JvdXAoJ3RvJykpCisKKyAgICAgICAgcmV0dXJuIGNjX3JlY2lwaWVudHMKKworICAgIGRlZiBfY29tcHV0ZV92YWx1ZXMoc2VsZik6CisgICAgICAgIHZhbHVlcyA9IENoYW5nZS5fY29tcHV0ZV92YWx1ZXMoc2VsZikKKworICAgICAgICBvbmVsaW5lID0gcmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgWydsb2cnLCAnLS1mb3JtYXQ9JXMnLCAnLS1uby13YWxrJywgc2VsZi5yZXYuc2hhMV0KKyAgICAgICAgICAgICkKKworICAgICAgICBtYXhfc3ViamVjdF9sZW5ndGggPSBzZWxmLmVudmlyb25tZW50LmdldF9tYXhfc3ViamVjdF9sZW5ndGgoKQorICAgICAgICBpZiBtYXhfc3ViamVjdF9sZW5ndGggPiAwIGFuZCBsZW4ob25lbGluZSkgPiBtYXhfc3ViamVjdF9sZW5ndGg6CisgICAgICAgICAgICBvbmVsaW5lID0gb25lbGluZVs6bWF4X3N1YmplY3RfbGVuZ3RoIC0gNl0gKyAnIFsuLi5dJworCisgICAgICAgIHZhbHVlc1sncmV2J10gPSBzZWxmLnJldi5zaGExCisgICAgICAgIHZhbHVlc1sncGFyZW50cyddID0gJyAnLmpvaW4oc2VsZi5wYXJlbnRzKQorICAgICAgICB2YWx1ZXNbJ3Jldl9zaG9ydCddID0gc2VsZi5yZXYuc2hvcnQKKyAgICAgICAgdmFsdWVzWydjaGFuZ2VfdHlwZSddID0gc2VsZi5jaGFuZ2VfdHlwZQorICAgICAgICB2YWx1ZXNbJ3JlZm5hbWUnXSA9IHNlbGYucmVmbmFtZQorICAgICAgICB2YWx1ZXNbJ25ld3JldiddID0gc2VsZi5yZXYuc2hhMQorICAgICAgICB2YWx1ZXNbJ3Nob3J0X3JlZm5hbWUnXSA9IHNlbGYucmVmZXJlbmNlX2NoYW5nZS5zaG9ydF9yZWZuYW1lCisgICAgICAgIHZhbHVlc1sncmVmbmFtZV90eXBlJ10gPSBzZWxmLnJlZmVyZW5jZV9jaGFuZ2UucmVmbmFtZV90eXBlCisgICAgICAgIHZhbHVlc1sncmVwbHlfdG9fbXNnaWQnXSA9IHNlbGYucmVmZXJlbmNlX2NoYW5nZS5tc2dpZAorICAgICAgICB2YWx1ZXNbJ3RocmVhZF9pbmRleCddID0gc2VsZi5yZWZlcmVuY2VfY2hhbmdlLnRocmVhZF9pbmRleAorICAgICAgICB2YWx1ZXNbJ251bSddID0gc2VsZi5udW0KKyAgICAgICAgdmFsdWVzWyd0b3QnXSA9IHNlbGYudG90CisgICAgICAgIHZhbHVlc1sncmVjaXBpZW50cyddID0gc2VsZi5yZWNpcGllbnRzCisgICAgICAgIGlmIHNlbGYuY2NfcmVjaXBpZW50czoKKyAgICAgICAgICAgIHZhbHVlc1snY2NfcmVjaXBpZW50cyddID0gc2VsZi5jY19yZWNpcGllbnRzCisgICAgICAgIHZhbHVlc1snb25lbGluZSddID0gb25lbGluZQorICAgICAgICB2YWx1ZXNbJ2F1dGhvciddID0gc2VsZi5hdXRob3IKKworICAgICAgICByZXBseV90byA9IHNlbGYuZW52aXJvbm1lbnQuZ2V0X3JlcGx5X3RvX2NvbW1pdChzZWxmKQorICAgICAgICBpZiByZXBseV90bzoKKyAgICAgICAgICAgIHZhbHVlc1sncmVwbHlfdG8nXSA9IHJlcGx5X3RvCisKKyAgICAgICAgcmV0dXJuIHZhbHVlcworCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2hlYWRlcihzZWxmLCAqKmV4dHJhX3ZhbHVlcyk6CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2hlYWRlcl9saW5lcygKKyAgICAgICAgICAgICAgICBSRVZJU0lPTl9IRUFERVJfVEVNUExBVEUsICoqZXh0cmFfdmFsdWVzCisgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9icm93c2VfbGluayhzZWxmLCBiYXNlX3VybCk6CisgICAgICAgIGlmICclKCcgbm90IGluIGJhc2VfdXJsOgorICAgICAgICAgICAgYmFzZV91cmwgKz0gJyUoaWQpcycKKyAgICAgICAgdXJsID0gIiIuam9pbihzZWxmLmV4cGFuZF9saW5lcyhiYXNlX3VybCkpCisgICAgICAgIGlmIHNlbGYuX2NvbnRlbnRfdHlwZSA9PSAnaHRtbCc6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhMSU5LX0hUTUxfVEVNUExBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2VzY2FwZV92YWw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZV91cmw9dXJsKToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIGVsaWYgc2VsZi5fY29udGVudF90eXBlID09ICdwbGFpbic6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhMSU5LX1RFWFRfVEVNUExBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2VzY2FwZV92YWw9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VfdXJsPXVybCk6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiQ29udGVudC10eXBlICVzIHVuc3VwcG9ydGVkLiBQbGVhc2UgcmVwb3J0IGl0IGFzIGEgYnVnLiIpCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfaW50cm8oc2VsZiwgaHRtbF9lc2NhcGVfdmFsPUZhbHNlKToKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoUkVWSVNJT05fSU5UUk9fVEVNUExBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfZXNjYXBlX3ZhbD1odG1sX2VzY2FwZV92YWwpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2JvZHkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIlNob3cgdGhpcyByZXZpc2lvbi4iIiIKKworICAgICAgICBmb3IgbGluZSBpbiByZWFkX2dpdF9saW5lcygKKyAgICAgICAgICAgICAgICBbJ2xvZyddICsgc2VsZi5lbnZpcm9ubWVudC5jb21taXRsb2dvcHRzICsgWyctMScsIHNlbGYucmV2LnNoYTFdLAorICAgICAgICAgICAgICAgIGtlZXBlbmRzPVRydWUsCisgICAgICAgICAgICAgICAgZXJyb3JzPSdyZXBsYWNlJyk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RhdGU6ICAgJykgYW5kIHNlbGYuZW52aXJvbm1lbnQuZGF0ZV9zdWJzdGl0dXRlOgorICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuZW52aXJvbm1lbnQuZGF0ZV9zdWJzdGl0dXRlICsgbGluZVtsZW4oJ0RhdGU6ICAgJyk6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfZm9vdGVyKHNlbGYsIGh0bWxfZXNjYXBlX3ZhbCk6CisgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF9saW5lcyhSRVZJU0lPTl9GT09URVJfVEVNUExBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2VzY2FwZV92YWw9aHRtbF9lc2NhcGVfdmFsKQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsKHNlbGYsIHB1c2gsIGJvZHlfZmlsdGVyPU5vbmUsIGV4dHJhX2hlYWRlcl92YWx1ZXM9e30pOgorICAgICAgICBzZWxmLl9jb250YWluc19kaWZmKCkKKyAgICAgICAgcmV0dXJuIENoYW5nZS5nZW5lcmF0ZV9lbWFpbChzZWxmLCBwdXNoLCBib2R5X2ZpbHRlciwgZXh0cmFfaGVhZGVyX3ZhbHVlcykKKworICAgIGRlZiBnZXRfc3BlY2lmaWNfZnJvbWFkZHIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmVudmlyb25tZW50LmZyb21fY29tbWl0CisKKworY2xhc3MgUmVmZXJlbmNlQ2hhbmdlKENoYW5nZSk6CisgICAgIiIiQSBDaGFuZ2UgdG8gYSBHaXQgcmVmZXJlbmNlLgorCisgICAgQW4gYWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIGEgY3JlYXRlLCB1cGRhdGUsIG9yIGRlbGV0ZSBvZiBhCisgICAgR2l0IHJlZmVyZW5jZS4gIERlcml2ZWQgY2xhc3NlcyBoYW5kbGUgc3BlY2lmaWMgdHlwZXMgb2YgcmVmZXJlbmNlCisgICAgKGUuZy4sIHRhZ3MgdnMuIGJyYW5jaGVzKS4gIFRoZXNlIGNsYXNzZXMgZ2VuZXJhdGUgdGhlIG1haW4KKyAgICByZWZlcmVuY2UgY2hhbmdlIGVtYWlsIHN1bW1hcml6aW5nIHRoZSByZWZlcmVuY2UgY2hhbmdlIGFuZAorICAgIHdoZXRoZXIgaXQgY2F1c2VkIGFueSBhbnkgY29tbWl0cyB0byBiZSBhZGRlZCBvciByZW1vdmVkLgorCisgICAgUmVmZXJlbmNlQ2hhbmdlIG9iamVjdHMgYXJlIHVzdWFsbHkgY3JlYXRlZCB1c2luZyB0aGUgc3RhdGljCisgICAgY3JlYXRlKCkgbWV0aG9kLCB3aGljaCBoYXMgdGhlIGxvZ2ljIHRvIGRlY2lkZSB3aGljaCBkZXJpdmVkIGNsYXNzCisgICAgdG8gaW5zdGFudGlhdGUuIiIiCisKKyAgICBSRUZfUkUgPSByZS5jb21waWxlKHInXnJlZnNcLyg/UDxhcmVhPlteXC9dKylcLyg/UDxzaG9ydG5hbWU+LiopJCcpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZShlbnZpcm9ubWVudCwgb2xkcmV2LCBuZXdyZXYsIHJlZm5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gYSBSZWZlcmVuY2VDaGFuZ2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY2hhbmdlLgorCisgICAgICAgIFJldHVybiBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGNoYW5nZSB0aGF0IGlzIGJlaW5nCisgICAgICAgIG1hZGUuIG9sZHJldiBhbmQgbmV3cmV2IHNob3VsZCBiZSBTSEExcyBvciBaRVJPUy4iIiIKKworICAgICAgICBvbGQgPSBHaXRPYmplY3Qob2xkcmV2KQorICAgICAgICBuZXcgPSBHaXRPYmplY3QobmV3cmV2KQorICAgICAgICByZXYgPSBuZXcgb3Igb2xkCisKKyAgICAgICAgIyBUaGUgcmV2aXNpb24gdHlwZSB0ZWxscyB1cyB3aGF0IHR5cGUgdGhlIGNvbW1pdCBpcywgY29tYmluZWQgd2l0aAorICAgICAgICAjIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVmIHdlIGNhbiBkZWNpZGUgYmV0d2VlbgorICAgICAgICAjICAtIHdvcmtpbmcgYnJhbmNoCisgICAgICAgICMgIC0gdHJhY2tpbmcgYnJhbmNoCisgICAgICAgICMgIC0gdW5hbm5vdGF0ZWQgdGFnCisgICAgICAgICMgIC0gYW5ub3RhdGVkIHRhZworICAgICAgICBtID0gUmVmZXJlbmNlQ2hhbmdlLlJFRl9SRS5tYXRjaChyZWZuYW1lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgYXJlYSA9IG0uZ3JvdXAoJ2FyZWEnKQorICAgICAgICAgICAgc2hvcnRfcmVmbmFtZSA9IG0uZ3JvdXAoJ3Nob3J0bmFtZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmVhID0gJycKKyAgICAgICAgICAgIHNob3J0X3JlZm5hbWUgPSByZWZuYW1lCisKKyAgICAgICAgaWYgcmV2LnR5cGUgPT0gJ3RhZyc6CisgICAgICAgICAgICAjIEFubm90YXRlZCB0YWc6CisgICAgICAgICAgICBrbGFzcyA9IEFubm90YXRlZFRhZ0NoYW5nZQorICAgICAgICBlbGlmIHJldi50eXBlID09ICdjb21taXQnOgorICAgICAgICAgICAgaWYgYXJlYSA9PSAndGFncyc6CisgICAgICAgICAgICAgICAgIyBOb24tYW5ub3RhdGVkIHRhZzoKKyAgICAgICAgICAgICAgICBrbGFzcyA9IE5vbkFubm90YXRlZFRhZ0NoYW5nZQorICAgICAgICAgICAgZWxpZiBhcmVhID09ICdoZWFkcyc6CisgICAgICAgICAgICAgICAgIyBCcmFuY2g6CisgICAgICAgICAgICAgICAga2xhc3MgPSBCcmFuY2hDaGFuZ2UKKyAgICAgICAgICAgIGVsaWYgYXJlYSA9PSAncmVtb3Rlcyc6CisgICAgICAgICAgICAgICAgIyBUcmFja2luZyBicmFuY2g6CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQubG9nX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICcqKiogUHVzaC11cGRhdGUgb2YgdHJhY2tpbmcgYnJhbmNoICVyXG4nCisgICAgICAgICAgICAgICAgICAgICcqKiogIC0gaW5jb21wbGV0ZSBlbWFpbCBnZW5lcmF0ZWQuJworICAgICAgICAgICAgICAgICAgICAlIChyZWZuYW1lLCkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGtsYXNzID0gT3RoZXJSZWZlcmVuY2VDaGFuZ2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBTb21lIG90aGVyIHJlZmVyZW5jZSBuYW1lc3BhY2U6CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQubG9nX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICcqKiogUHVzaC11cGRhdGUgb2Ygc3RyYW5nZSByZWZlcmVuY2UgJXJcbicKKyAgICAgICAgICAgICAgICAgICAgJyoqKiAgLSBpbmNvbXBsZXRlIGVtYWlsIGdlbmVyYXRlZC4nCisgICAgICAgICAgICAgICAgICAgICUgKHJlZm5hbWUsKQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAga2xhc3MgPSBPdGhlclJlZmVyZW5jZUNoYW5nZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBbnl0aGluZyBlbHNlIChpcyB0aGVyZSBhbnl0aGluZyBlbHNlPykKKyAgICAgICAgICAgIGVudmlyb25tZW50LmxvZ193YXJuaW5nKAorICAgICAgICAgICAgICAgICcqKiogVW5rbm93biB0eXBlIG9mIHVwZGF0ZSB0byAlciAoJXMpXG4nCisgICAgICAgICAgICAgICAgJyoqKiAgLSBpbmNvbXBsZXRlIGVtYWlsIGdlbmVyYXRlZC4nCisgICAgICAgICAgICAgICAgJSAocmVmbmFtZSwgcmV2LnR5cGUsKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGtsYXNzID0gT3RoZXJSZWZlcmVuY2VDaGFuZ2UKKworICAgICAgICByZXR1cm4ga2xhc3MoCisgICAgICAgICAgICBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIHJlZm5hbWU9cmVmbmFtZSwgc2hvcnRfcmVmbmFtZT1zaG9ydF9yZWZuYW1lLAorICAgICAgICAgICAgb2xkPW9sZCwgbmV3PW5ldywgcmV2PXJldiwKKyAgICAgICAgICAgICkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWFrZV90aHJlYWRfaW5kZXgoKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGFwcHJvcHJpYXRlIGZvciB0aGUgVGhyZWFkLUluZGV4IGhlYWRlciwKKyAgICAgICAgbmVlZGVkIGJ5IE1TIE91dGxvb2sgdG8gZ2V0IHRocmVhZGluZyByaWdodC4KKworICAgICAgICBUaGUgZm9ybWF0IGlzIChiYXNlNjQtZW5jb2RlZCk6CisgICAgICAgIC0gMSBieXRlIG11c3QgYmUgMQorICAgICAgICAtIDUgYnl0ZXMgZW5jb2RlIGEgZGF0ZSAoaGFyZGNvZGVkIGhlcmUpCisgICAgICAgIC0gMTYgYnl0ZXMgZm9yIGEgZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIKKworICAgICAgICBGSVhNRTogVW5mb3J0dW5hdGVseSwgZXZlbiB3aXRoIHRoZSBUaHJlYWQtSW5kZXggZmllbGQsIE1TCisgICAgICAgIE91dGxvb2sgZG9lc24ndCBzZWVtIHRvIGRvIHRoZSB0aHJlYWRpbmcgcmVsaWFibHkgKHNlZQorICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsL3B1bGwvMTk0KS4KKyAgICAgICAgIiIiCisgICAgICAgIHRocmVhZF9pbmRleCA9IGInXHgwMVx4MDBceDAwXHgxMlx4MzRceDU2JyArIHV1aWQudXVpZDQoKS5ieXRlcworICAgICAgICByZXR1cm4gYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSh0aHJlYWRfaW5kZXgpLmRlY29kZSgnYXNjaWknKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50LCByZWZuYW1lLCBzaG9ydF9yZWZuYW1lLCBvbGQsIG5ldywgcmV2KToKKyAgICAgICAgQ2hhbmdlLl9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50KQorICAgICAgICBzZWxmLmNoYW5nZV90eXBlID0geworICAgICAgICAgICAgKEZhbHNlLCBUcnVlKTogJ2NyZWF0ZScsCisgICAgICAgICAgICAoVHJ1ZSwgVHJ1ZSk6ICd1cGRhdGUnLAorICAgICAgICAgICAgKFRydWUsIEZhbHNlKTogJ2RlbGV0ZScsCisgICAgICAgICAgICB9W2Jvb2wob2xkKSwgYm9vbChuZXcpXQorICAgICAgICBzZWxmLnJlZm5hbWUgPSByZWZuYW1lCisgICAgICAgIHNlbGYuc2hvcnRfcmVmbmFtZSA9IHNob3J0X3JlZm5hbWUKKyAgICAgICAgc2VsZi5vbGQgPSBvbGQKKyAgICAgICAgc2VsZi5uZXcgPSBuZXcKKyAgICAgICAgc2VsZi5yZXYgPSByZXYKKyAgICAgICAgc2VsZi5tc2dpZCA9IG1ha2VfbXNnaWQoKQorICAgICAgICBzZWxmLnRocmVhZF9pbmRleCA9IHNlbGYubWFrZV90aHJlYWRfaW5kZXgoKQorICAgICAgICBzZWxmLmRpZmZvcHRzID0gZW52aXJvbm1lbnQuZGlmZm9wdHMKKyAgICAgICAgc2VsZi5ncmFwaG9wdHMgPSBlbnZpcm9ubWVudC5ncmFwaG9wdHMKKyAgICAgICAgc2VsZi5sb2dvcHRzID0gZW52aXJvbm1lbnQubG9nb3B0cworICAgICAgICBzZWxmLmNvbW1pdGxvZ29wdHMgPSBlbnZpcm9ubWVudC5jb21taXRsb2dvcHRzCisgICAgICAgIHNlbGYuc2hvd2dyYXBoID0gZW52aXJvbm1lbnQucmVmY2hhbmdlX3Nob3dncmFwaAorICAgICAgICBzZWxmLnNob3dsb2cgPSBlbnZpcm9ubWVudC5yZWZjaGFuZ2Vfc2hvd2xvZworCisgICAgICAgIHNlbGYuaGVhZGVyX3RlbXBsYXRlID0gUkVGQ0hBTkdFX0hFQURFUl9URU1QTEFURQorICAgICAgICBzZWxmLmludHJvX3RlbXBsYXRlID0gUkVGQ0hBTkdFX0lOVFJPX1RFTVBMQVRFCisgICAgICAgIHNlbGYuZm9vdGVyX3RlbXBsYXRlID0gRk9PVEVSX1RFTVBMQVRFCisKKyAgICBkZWYgX2NvbXB1dGVfdmFsdWVzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBDaGFuZ2UuX2NvbXB1dGVfdmFsdWVzKHNlbGYpCisKKyAgICAgICAgdmFsdWVzWydjaGFuZ2VfdHlwZSddID0gc2VsZi5jaGFuZ2VfdHlwZQorICAgICAgICB2YWx1ZXNbJ3JlZm5hbWVfdHlwZSddID0gc2VsZi5yZWZuYW1lX3R5cGUKKyAgICAgICAgdmFsdWVzWydyZWZuYW1lJ10gPSBzZWxmLnJlZm5hbWUKKyAgICAgICAgdmFsdWVzWydzaG9ydF9yZWZuYW1lJ10gPSBzZWxmLnNob3J0X3JlZm5hbWUKKyAgICAgICAgdmFsdWVzWydtc2dpZCddID0gc2VsZi5tc2dpZAorICAgICAgICB2YWx1ZXNbJ3RocmVhZF9pbmRleCddID0gc2VsZi50aHJlYWRfaW5kZXgKKyAgICAgICAgdmFsdWVzWydyZWNpcGllbnRzJ10gPSBzZWxmLnJlY2lwaWVudHMKKyAgICAgICAgdmFsdWVzWydvbGRyZXYnXSA9IHN0cihzZWxmLm9sZCkKKyAgICAgICAgdmFsdWVzWydvbGRyZXZfc2hvcnQnXSA9IHNlbGYub2xkLnNob3J0CisgICAgICAgIHZhbHVlc1snbmV3cmV2J10gPSBzdHIoc2VsZi5uZXcpCisgICAgICAgIHZhbHVlc1snbmV3cmV2X3Nob3J0J10gPSBzZWxmLm5ldy5zaG9ydAorCisgICAgICAgIGlmIHNlbGYub2xkOgorICAgICAgICAgICAgdmFsdWVzWydvbGRyZXZfdHlwZSddID0gc2VsZi5vbGQudHlwZQorICAgICAgICBpZiBzZWxmLm5ldzoKKyAgICAgICAgICAgIHZhbHVlc1snbmV3cmV2X3R5cGUnXSA9IHNlbGYubmV3LnR5cGUKKworICAgICAgICByZXBseV90byA9IHNlbGYuZW52aXJvbm1lbnQuZ2V0X3JlcGx5X3RvX3JlZmNoYW5nZShzZWxmKQorICAgICAgICBpZiByZXBseV90bzoKKyAgICAgICAgICAgIHZhbHVlc1sncmVwbHlfdG8nXSA9IHJlcGx5X3RvCisKKyAgICAgICAgcmV0dXJuIHZhbHVlcworCisgICAgZGVmIHNlbmRfc2luZ2xlX2NvbWJpbmVkX2VtYWlsKHNlbGYsIGtub3duX2FkZGVkX3NoYTFzKToKKyAgICAgICAgIiIiRGV0ZXJtaW5lIGlmIGEgY29tYmluZWQgcmVmY2hhbmdlL3JldmlzaW9uIGVtYWlsIHNob3VsZCBiZSBzZW50CisKKyAgICAgICAgSWYgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBuZXcgKG5vbi1tZXJnZSkgY29tbWl0IGFkZGVkIGJ5IGEKKyAgICAgICAgY2hhbmdlLCBpdCBpcyB1c2VmdWwgdG8gY29tYmluZSB0aGUgUmVmZXJlbmNlQ2hhbmdlIGFuZAorICAgICAgICBSZXZpc2lvbiBlbWFpbHMgaW50byBvbmUuICBJbiBzdWNoIGEgY2FzZSwgcmV0dXJuIHRoZSBzaW5nbGUKKyAgICAgICAgcmV2aXNpb247IG90aGVyd2lzZSwgcmV0dXJuIE5vbmUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBpbiBCcmFuY2hDaGFuZ2UuIiIiCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZW5lcmF0ZV9jb21iaW5lZF9lbWFpbChzZWxmLCBwdXNoLCByZXZpc2lvbiwgYm9keV9maWx0ZXI9Tm9uZSwgZXh0cmFfaGVhZGVyX3ZhbHVlcz17fSk6CisgICAgICAgICIiIkdlbmVyYXRlIGFuIGVtYWlsIGRlc2NyaWJpbmcgdGhpcyBjaGFuZ2UgQU5EIHNwZWNpZmllZCByZXZpc2lvbi4KKworICAgICAgICBJdGVyYXRlIG92ZXIgdGhlIGxpbmVzIChpbmNsdWRpbmcgdGhlIGhlYWRlciBsaW5lcykgb2YgYW4KKyAgICAgICAgZW1haWwgZGVzY3JpYmluZyB0aGlzIGNoYW5nZS4gIElmIGJvZHlfZmlsdGVyIGlzIG5vdCBOb25lLAorICAgICAgICB0aGVuIHVzZSBpdCB0byBmaWx0ZXIgdGhlIGxpbmVzIHRoYXQgYXJlIGludGVuZGVkIGZvciB0aGUKKyAgICAgICAgZW1haWwgYm9keS4KKworICAgICAgICBUaGUgZXh0cmFfaGVhZGVyX3ZhbHVlcyBmaWVsZCBpcyByZWNlaXZlZCBhcyBhIGRpY3QgYW5kIG5vdCBhcworICAgICAgICAqKmt3YXJncywgdG8gYWxsb3cgcGFzc2luZyBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyBpbiB0aGUKKyAgICAgICAgZnV0dXJlIChlLmcuIHBhc3NpbmcgZXh0cmEgdmFsdWVzIHRvIGdlbmVyYXRlX2VtYWlsX2ludHJvKCkKKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGluIEJyYW5jaENoYW5nZS4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3N1YmplY3Qoc2VsZik6CisgICAgICAgIHRlbXBsYXRlID0geworICAgICAgICAgICAgJ2NyZWF0ZSc6IFJFRl9DUkVBVEVEX1NVQkpFQ1RfVEVNUExBVEUsCisgICAgICAgICAgICAndXBkYXRlJzogUkVGX1VQREFURURfU1VCSkVDVF9URU1QTEFURSwKKyAgICAgICAgICAgICdkZWxldGUnOiBSRUZfREVMRVRFRF9TVUJKRUNUX1RFTVBMQVRFLAorICAgICAgICAgICAgfVtzZWxmLmNoYW5nZV90eXBlXQorICAgICAgICByZXR1cm4gc2VsZi5leHBhbmQodGVtcGxhdGUpCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfaGVhZGVyKHNlbGYsICoqZXh0cmFfdmFsdWVzKToKKyAgICAgICAgaWYgJ3N1YmplY3QnIG5vdCBpbiBleHRyYV92YWx1ZXM6CisgICAgICAgICAgICBleHRyYV92YWx1ZXNbJ3N1YmplY3QnXSA9IHNlbGYuZ2V0X3N1YmplY3QoKQorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2hlYWRlcl9saW5lcygKKyAgICAgICAgICAgICAgICBzZWxmLmhlYWRlcl90ZW1wbGF0ZSwgKipleHRyYV92YWx1ZXMKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2ludHJvKHNlbGYsIGh0bWxfZXNjYXBlX3ZhbD1GYWxzZSk6CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKHNlbGYuaW50cm9fdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfZXNjYXBlX3ZhbD1odG1sX2VzY2FwZV92YWwpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2JvZHkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkNhbGwgdGhlIGFwcHJvcHJpYXRlIGJvZHktZ2VuZXJhdGlvbiByb3V0aW5lLgorCisgICAgICAgIENhbGwgb25lIG9mIGdlbmVyYXRlX2NyZWF0ZV9zdW1tYXJ5KCkgLworICAgICAgICBnZW5lcmF0ZV91cGRhdGVfc3VtbWFyeSgpIC8gZ2VuZXJhdGVfZGVsZXRlX3N1bW1hcnkoKS4iIiIKKworICAgICAgICBjaGFuZ2Vfc3VtbWFyeSA9IHsKKyAgICAgICAgICAgICdjcmVhdGUnOiBzZWxmLmdlbmVyYXRlX2NyZWF0ZV9zdW1tYXJ5LAorICAgICAgICAgICAgJ2RlbGV0ZSc6IHNlbGYuZ2VuZXJhdGVfZGVsZXRlX3N1bW1hcnksCisgICAgICAgICAgICAndXBkYXRlJzogc2VsZi5nZW5lcmF0ZV91cGRhdGVfc3VtbWFyeSwKKyAgICAgICAgICAgIH1bc2VsZi5jaGFuZ2VfdHlwZV0ocHVzaCkKKyAgICAgICAgZm9yIGxpbmUgaW4gY2hhbmdlX3N1bW1hcnk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5nZW5lcmF0ZV9yZXZpc2lvbl9jaGFuZ2Vfc3VtbWFyeShwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9mb290ZXIoc2VsZiwgaHRtbF9lc2NhcGVfdmFsKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kX2xpbmVzKHNlbGYuZm9vdGVyX3RlbXBsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9lc2NhcGVfdmFsPWh0bWxfZXNjYXBlX3ZhbCkKKworICAgIGRlZiBnZW5lcmF0ZV9yZXZpc2lvbl9jaGFuZ2VfZ3JhcGgoc2VsZiwgcHVzaCk6CisgICAgICAgIGlmIHNlbGYuc2hvd2dyYXBoOgorICAgICAgICAgICAgYXJncyA9IFsnLS1ncmFwaCddICsgc2VsZi5ncmFwaG9wdHMKKyAgICAgICAgICAgIGZvciBuZXdvbGQgaW4gKCduZXcnLCAnb2xkJyk6CisgICAgICAgICAgICAgICAgaGFzX25ld29sZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc3BlYyA9IHB1c2guZ2V0X2NvbW1pdHNfc3BlYyhuZXdvbGQsIHNlbGYpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZ2l0X2xvZyhzcGVjLCBhcmdzPWFyZ3MsIGtlZXBlbmRzPVRydWUpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaGFzX25ld29sZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19uZXdvbGQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCAnR3JhcGggb2YgJXMgY29tbWl0czpcblxuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J25ldyc6ICduZXcnLCAnb2xkJzogJ2Rpc2NhcmRlZCd9W25ld29sZF0sKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCAnICAnICsgbGluZQorICAgICAgICAgICAgICAgIGlmIGhhc19uZXdvbGQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkICdcbicKKworICAgIGRlZiBnZW5lcmF0ZV9yZXZpc2lvbl9jaGFuZ2VfbG9nKHNlbGYsIG5ld19jb21taXRzX2xpc3QpOgorICAgICAgICBpZiBzZWxmLnNob3dsb2c6CisgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICB5aWVsZCAnRGV0YWlsZWQgbG9nIG9mIG5ldyBjb21taXRzOlxuXG4nCisgICAgICAgICAgICBmb3IgbGluZSBpbiByZWFkX2dpdF9saW5lcygKKyAgICAgICAgICAgICAgICAgICAgWydsb2cnLCAnLS1uby13YWxrJ10gKworICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ29wdHMgKworICAgICAgICAgICAgICAgICAgICBuZXdfY29tbWl0c19saXN0ICsKKyAgICAgICAgICAgICAgICAgICAgWyctLSddLAorICAgICAgICAgICAgICAgICAgICBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9uZXdfcmV2aXNpb25fc3VtbWFyeShzZWxmLCB0b3QsIG5ld19jb21taXRzX2xpc3QsIHB1c2gpOgorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhORVdfUkVWSVNJT05TX1RFTVBMQVRFLCB0b3Q9dG90KToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5nZW5lcmF0ZV9yZXZpc2lvbl9jaGFuZ2VfZ3JhcGgocHVzaCk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX2xvZyhuZXdfY29tbWl0c19saXN0KToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9yZXZpc2lvbl9jaGFuZ2Vfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYSBzdW1tYXJ5IG9mIHRoZSByZXZpc2lvbnMgYWRkZWQvcmVtb3ZlZCBieSB0aGlzIGNoYW5nZS4iIiIKKworICAgICAgICBpZiBzZWxmLm5ldy5jb21taXRfc2hhMSBhbmQgbm90IHNlbGYub2xkLmNvbW1pdF9zaGExOgorICAgICAgICAgICAgIyBBIG5ldyByZWZlcmVuY2Ugd2FzIGNyZWF0ZWQuICBMaXN0IHRoZSBuZXcgcmV2aXNpb25zCisgICAgICAgICAgICAjIGJyb3VnaHQgYnkgdGhlIG5ldyByZWZlcmVuY2UgKGkuZS4sIHRob3NlIHJldmlzaW9ucyB0aGF0CisgICAgICAgICAgICAjIHdlcmUgbm90IGluIHRoZSByZXBvc2l0b3J5IGJlZm9yZSB0aGlzIHJlZmVyZW5jZQorICAgICAgICAgICAgIyBjaGFuZ2UpLgorICAgICAgICAgICAgc2hhMXMgPSBsaXN0KHB1c2guZ2V0X25ld19jb21taXRzKHNlbGYpKQorICAgICAgICAgICAgc2hhMXMucmV2ZXJzZSgpCisgICAgICAgICAgICB0b3QgPSBsZW4oc2hhMXMpCisgICAgICAgICAgICBuZXdfcmV2aXNpb25zID0gWworICAgICAgICAgICAgICAgIFJldmlzaW9uKHNlbGYsIEdpdE9iamVjdChzaGExKSwgbnVtPWkgKyAxLCB0b3Q9dG90KQorICAgICAgICAgICAgICAgIGZvciAoaSwgc2hhMSkgaW4gZW51bWVyYXRlKHNoYTFzKQorICAgICAgICAgICAgICAgIF0KKworICAgICAgICAgICAgaWYgbmV3X3JldmlzaW9uczoKKyAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgnVGhpcyAlKHJlZm5hbWVfdHlwZSlzIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbmV3IGNvbW1pdHM6XG4nKQorICAgICAgICAgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgICAgICAgICBmb3IgciBpbiBuZXdfcmV2aXNpb25zOgorICAgICAgICAgICAgICAgICAgICAoc2hhMSwgc3ViamVjdCkgPSByLnJldi5nZXRfc3VtbWFyeSgpCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHIuZXhwYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgQlJJRUZfU1VNTUFSWV9URU1QTEFURSwgYWN0aW9uPSduZXcnLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgeWllbGQgJ1xuJworICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfbmV3X3JldmlzaW9uX3N1bW1hcnkoCisgICAgICAgICAgICAgICAgICAgICAgICB0b3QsIFtyLnJldi5zaGExIGZvciByIGluIG5ld19yZXZpc2lvbnNdLCBwdXNoKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhOT19ORVdfUkVWSVNJT05TX1RFTVBMQVRFKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgIGVsaWYgc2VsZi5uZXcuY29tbWl0X3NoYTEgYW5kIHNlbGYub2xkLmNvbW1pdF9zaGExOgorICAgICAgICAgICAgIyBBIHJlZmVyZW5jZSB3YXMgY2hhbmdlZCB0byBwb2ludCBhdCBhIGRpZmZlcmVudCBjb21taXQuCisgICAgICAgICAgICAjIExpc3QgdGhlIHJldmlzaW9ucyB0aGF0IHdlcmUgcmVtb3ZlZCBhbmQvb3IgYWRkZWQgKmZyb20KKyAgICAgICAgICAgICMgdGhhdCByZWZlcmVuY2UqIGJ5IHRoaXMgcmVmZXJlbmNlIGNoYW5nZSwgYWxvbmcgd2l0aCBhCisgICAgICAgICAgICAjIGRpZmYgYmV0d2VlbiB0aGUgdHJlZXMgZm9yIGl0cyBvbGQgYW5kIG5ldyB2YWx1ZXMuCisKKyAgICAgICAgICAgICMgTGlzdCBvZiB0aGUgcmV2aXNpb25zIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgYnJhbmNoIGJ5CisgICAgICAgICAgICAjIHRoaXMgdXBkYXRlLiAgTm90ZSB0aGlzIGxpc3QgY2FuIGluY2x1ZGUgcmV2aXNpb25zIHRoYXQKKyAgICAgICAgICAgICMgaGF2ZSBhbHJlYWR5IGhhZCBub3RpZmljYXRpb24gZW1haWxzOyB3ZSB3YW50IHN1Y2gKKyAgICAgICAgICAgICMgcmV2aXNpb25zIGluIHRoZSBzdW1tYXJ5IGV2ZW4gdGhvdWdoIHdlIHdpbGwgbm90IHNlbmQKKyAgICAgICAgICAgICMgbmV3IG5vdGlmaWNhdGlvbiBlbWFpbHMgZm9yIHRoZW0uCisgICAgICAgICAgICBhZGRzID0gbGlzdChnZW5lcmF0ZV9zdW1tYXJpZXMoCisgICAgICAgICAgICAgICAgJy0tdG9wby1vcmRlcicsICctLXJldmVyc2UnLCAnJXMuLiVzJworICAgICAgICAgICAgICAgICUgKHNlbGYub2xkLmNvbW1pdF9zaGExLCBzZWxmLm5ldy5jb21taXRfc2hhMSwpCisgICAgICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgIyBMaXN0IG9mIHRoZSByZXZpc2lvbnMgdGhhdCB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgYnJhbmNoCisgICAgICAgICAgICAjIGJ5IHRoaXMgdXBkYXRlLiAgVGhpcyB3aWxsIGJlIGVtcHR5IGV4Y2VwdCBmb3IKKyAgICAgICAgICAgICMgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzLgorICAgICAgICAgICAgZGlzY2FyZHMgPSBsaXN0KGdlbmVyYXRlX3N1bW1hcmllcygKKyAgICAgICAgICAgICAgICAnJXMuLiVzJyAlIChzZWxmLm5ldy5jb21taXRfc2hhMSwgc2VsZi5vbGQuY29tbWl0X3NoYTEsKQorICAgICAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGlmIGFkZHM6CisgICAgICAgICAgICAgICAgbmV3X2NvbW1pdHNfbGlzdCA9IHB1c2guZ2V0X25ld19jb21taXRzKHNlbGYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld19jb21taXRzX2xpc3QgPSBbXQorICAgICAgICAgICAgbmV3X2NvbW1pdHMgPSBDb21taXRTZXQobmV3X2NvbW1pdHNfbGlzdCkKKworICAgICAgICAgICAgaWYgZGlzY2FyZHM6CisgICAgICAgICAgICAgICAgZGlzY2FyZGVkX2NvbW1pdHMgPSBDb21taXRTZXQocHVzaC5nZXRfZGlzY2FyZGVkX2NvbW1pdHMoc2VsZikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRpc2NhcmRlZF9jb21taXRzID0gQ29tbWl0U2V0KFtdKQorCisgICAgICAgICAgICBpZiBkaXNjYXJkcyBhbmQgYWRkczoKKyAgICAgICAgICAgICAgICBmb3IgKHNoYTEsIHN1YmplY3QpIGluIGRpc2NhcmRzOgorICAgICAgICAgICAgICAgICAgICBpZiBzaGExIGluIGRpc2NhcmRlZF9jb21taXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gJ2Rpc2NhcmQnCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnb21pdCcKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249YWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBmb3IgKHNoYTEsIHN1YmplY3QpIGluIGFkZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNoYTEgaW4gbmV3X2NvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnbmV3JworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gJ2FkZCcKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249YWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoTk9OX0ZGX1RFTVBMQVRFKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgICAgICBlbGlmIGRpc2NhcmRzOgorICAgICAgICAgICAgICAgIGZvciAoc2hhMSwgc3ViamVjdCkgaW4gZGlzY2FyZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNoYTEgaW4gZGlzY2FyZGVkX2NvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnZGlzY2FyZCcKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICdvbWl0JworICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj1hY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICByZXZfc2hvcnQ9c2hhMSwgdGV4dD1zdWJqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhSRVdJTkRfT05MWV9URU1QTEFURSk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICAgICAgZWxpZiBhZGRzOgorICAgICAgICAgICAgICAgIChzaGExLCBzdWJqZWN0KSA9IHNlbGYub2xkLmdldF9zdW1tYXJ5KCkKKyAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgICAgICAgICAgQlJJRUZfU1VNTUFSWV9URU1QTEFURSwgYWN0aW9uPSdmcm9tJywKKyAgICAgICAgICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGZvciAoc2hhMSwgc3ViamVjdCkgaW4gYWRkczoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2hhMSBpbiBuZXdfY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICduZXcnCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnYWRkJworICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj1hY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICByZXZfc2hvcnQ9c2hhMSwgdGV4dD1zdWJqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICB5aWVsZCAnXG4nCisKKyAgICAgICAgICAgIGlmIG5ld19jb21taXRzOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfbmV3X3JldmlzaW9uX3N1bW1hcnkoCisgICAgICAgICAgICAgICAgICAgICAgICBsZW4obmV3X2NvbW1pdHMpLCBuZXdfY29tbWl0c19saXN0LCBwdXNoKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhOT19ORVdfUkVWSVNJT05TX1RFTVBMQVRFKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX2dyYXBoKHB1c2gpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgICAgICMgVGhlIGRpZmZzdGF0IGlzIHNob3duIGZyb20gdGhlIG9sZCByZXZpc2lvbiB0byB0aGUgbmV3CisgICAgICAgICAgICAjIHJldmlzaW9uLiAgVGhpcyBpcyB0byBzaG93IHRoZSB0cnV0aCBvZiB3aGF0IGhhcHBlbmVkIGluCisgICAgICAgICAgICAjIHRoaXMgY2hhbmdlLiAgVGhlcmUncyBubyBwb2ludCBzaG93aW5nIHRoZSBzdGF0IGZyb20gdGhlCisgICAgICAgICAgICAjIGJhc2UgdG8gdGhlIG5ldyByZXZpc2lvbiBiZWNhdXNlIHRoZSBiYXNlIGlzIGVmZmVjdGl2ZWx5IGEKKyAgICAgICAgICAgICMgcmFuZG9tIHJldmlzaW9uIGF0IHRoaXMgcG9pbnQgLSB0aGUgdXNlciB3aWxsIGJlIGludGVyZXN0ZWQKKyAgICAgICAgICAgICMgaW4gd2hhdCB0aGlzIHJldmlzaW9uIGNoYW5nZWQgLSBpbmNsdWRpbmcgdGhlIHVuZG9pbmcgb2YKKyAgICAgICAgICAgICMgcHJldmlvdXMgcmV2aXNpb25zIGluIHRoZSBjYXNlIG9mIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcy4KKyAgICAgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgICAgIHlpZWxkICdTdW1tYXJ5IG9mIGNoYW5nZXM6XG4nCisgICAgICAgICAgICBmb3IgbGluZSBpbiByZWFkX2dpdF9saW5lcygKKyAgICAgICAgICAgICAgICAgICAgWydkaWZmLXRyZWUnXSArCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlmZm9wdHMgKworICAgICAgICAgICAgICAgICAgICBbJyVzLi4lcycgJSAoc2VsZi5vbGQuY29tbWl0X3NoYTEsIHNlbGYubmV3LmNvbW1pdF9zaGExLCldLAorICAgICAgICAgICAgICAgICAgICBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBlbGlmIHNlbGYub2xkLmNvbW1pdF9zaGExIGFuZCBub3Qgc2VsZi5uZXcuY29tbWl0X3NoYTE6CisgICAgICAgICAgICAjIEEgcmVmZXJlbmNlIHdhcyBkZWxldGVkLiAgTGlzdCB0aGUgcmV2aXNpb25zIHRoYXQgd2VyZQorICAgICAgICAgICAgIyByZW1vdmVkIGZyb20gdGhlIHJlcG9zaXRvcnkgYnkgdGhpcyByZWZlcmVuY2UgY2hhbmdlLgorCisgICAgICAgICAgICBzaGExcyA9IGxpc3QocHVzaC5nZXRfZGlzY2FyZGVkX2NvbW1pdHMoc2VsZikpCisgICAgICAgICAgICB0b3QgPSBsZW4oc2hhMXMpCisgICAgICAgICAgICBkaXNjYXJkZWRfcmV2aXNpb25zID0gWworICAgICAgICAgICAgICAgIFJldmlzaW9uKHNlbGYsIEdpdE9iamVjdChzaGExKSwgbnVtPWkgKyAxLCB0b3Q9dG90KQorICAgICAgICAgICAgICAgIGZvciAoaSwgc2hhMSkgaW4gZW51bWVyYXRlKHNoYTFzKQorICAgICAgICAgICAgICAgIF0KKworICAgICAgICAgICAgaWYgZGlzY2FyZGVkX3JldmlzaW9uczoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhESVNDQVJERURfUkVWSVNJT05TX1RFTVBMQVRFKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgICAgICAgICBmb3IgciBpbiBkaXNjYXJkZWRfcmV2aXNpb25zOgorICAgICAgICAgICAgICAgICAgICAoc2hhMSwgc3ViamVjdCkgPSByLnJldi5nZXRfc3VtbWFyeSgpCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHIuZXhwYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgQlJJRUZfU1VNTUFSWV9URU1QTEFURSwgYWN0aW9uPSdkaXNjYXJkJywgdGV4dD1zdWJqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX2dyYXBoKHB1c2gpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKE5PX0RJU0NBUkRFRF9SRVZJU0lPTlNfVEVNUExBVEUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5vbGQuY29tbWl0X3NoYTEgYW5kIG5vdCBzZWxmLm5ldy5jb21taXRfc2hhMToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKE5PTl9DT01NSVRfVVBEQVRFX1RFTVBMQVRFKToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfY3JlYXRlX3N1bW1hcnkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkNhbGxlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVmZXJlbmNlLiIiIgorCisgICAgICAgICMgVGhpcyBpcyBhIG5ldyByZWZlcmVuY2UgYW5kIHNvIG9sZHJldiBpcyBub3QgdmFsaWQKKyAgICAgICAgKHNoYTEsIHN1YmplY3QpID0gc2VsZi5uZXcuZ2V0X3N1bW1hcnkoKQorICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nYXQnLAorICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICkKKyAgICAgICAgeWllbGQgJ1xuJworCisgICAgZGVmIGdlbmVyYXRlX3VwZGF0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgZm9yIHRoZSBjaGFuZ2Ugb2YgYSBwcmUtZXhpc3RpbmcgYnJhbmNoLiIiIgorCisgICAgICAgIHJldHVybiBpdGVyKFtdKQorCisgICAgZGVmIGdlbmVyYXRlX2RlbGV0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgZm9yIHRoZSBkZWxldGlvbiBvZiBhbnkgdHlwZSBvZiByZWZlcmVuY2UuIiIiCisKKyAgICAgICAgKHNoYTEsIHN1YmplY3QpID0gc2VsZi5vbGQuZ2V0X3N1bW1hcnkoKQorICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nd2FzJywKKyAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICApCisgICAgICAgIHlpZWxkICdcbicKKworICAgIGRlZiBnZXRfc3BlY2lmaWNfZnJvbWFkZHIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmVudmlyb25tZW50LmZyb21fcmVmY2hhbmdlCisKKworY2xhc3MgQnJhbmNoQ2hhbmdlKFJlZmVyZW5jZUNoYW5nZSk6CisgICAgcmVmbmFtZV90eXBlID0gJ2JyYW5jaCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCwgcmVmbmFtZSwgc2hvcnRfcmVmbmFtZSwgb2xkLCBuZXcsIHJldik6CisgICAgICAgIFJlZmVyZW5jZUNoYW5nZS5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIGVudmlyb25tZW50LAorICAgICAgICAgICAgcmVmbmFtZT1yZWZuYW1lLCBzaG9ydF9yZWZuYW1lPXNob3J0X3JlZm5hbWUsCisgICAgICAgICAgICBvbGQ9b2xkLCBuZXc9bmV3LCByZXY9cmV2LAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLnJlY2lwaWVudHMgPSBlbnZpcm9ubWVudC5nZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMoc2VsZikKKyAgICAgICAgc2VsZi5fc2luZ2xlX3JldmlzaW9uID0gTm9uZQorCisgICAgZGVmIHNlbmRfc2luZ2xlX2NvbWJpbmVkX2VtYWlsKHNlbGYsIGtub3duX2FkZGVkX3NoYTFzKToKKyAgICAgICAgaWYgbm90IHNlbGYuZW52aXJvbm1lbnQuY29tYmluZV93aGVuX3NpbmdsZV9jb21taXQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgSW4gdGhlIHNhZGx5LWFsbC10b28tZnJlcXVlbnQgdXNlY2FzZSBvZiBwZW9wbGUgcHVzaGluZyBvbmx5CisgICAgICAgICMgb25lIG9mIHRoZWlyIGNvbW1pdHMgYXQgYSB0aW1lIHRvIGEgcmVwb3NpdG9yeSwgdXNlcnMgZmVlbAorICAgICAgICAjIHRoZSByZWZlcmVuY2UgY2hhbmdlIHN1bW1hcnkgZW1haWxzIGFyZSBub2lzZSByYXRoZXIgdGhhbgorICAgICAgICAjIGltcG9ydGFudCBzaWduYWwuICBUaGlzIGlzIGJlY2F1c2UsIGluIHRoaXMgcGFydGljdWxhcgorICAgICAgICAjIHVzZWNhc2UsIHRoZXJlIGlzIGEgcmVmZXJlbmNlIGNoYW5nZSBzdW1tYXJ5IGVtYWlsIGZvciBlYWNoCisgICAgICAgICMgbmV3IGNvbW1pdCwgYW5kIGFsbCB0aGVzZSBzdW1tYXJpZXMgZG8gaXMgcG9pbnQgb3V0IHRoYXQKKyAgICAgICAgIyB0aGVyZSBpcyBvbmUgbmV3IGNvbW1pdCAod2hpY2ggY2FuIHJlYWRpbHkgYmUgaW5mZXJyZWQgYnkKKyAgICAgICAgIyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBpbmRpdmlkdWFsIHJldmlzaW9uIGVtYWlsIHRoYXQgaXMgYWxzbworICAgICAgICAjIHNlbnQpLiAgSW4gc3VjaCBjYXNlcywgb3VyIHVzZXJzIHByZWZlciB0aGVyZSB0byBiZSBhIGNvbWJpbmVkCisgICAgICAgICMgcmVmZXJlbmNlIGNoYW5nZSBzdW1tYXJ5L25ldyByZXZpc2lvbiBlbWFpbC4KKyAgICAgICAgIworICAgICAgICAjIFNvLCBpZiB0aGUgY2hhbmdlIGlzIGFuIHVwZGF0ZSBhbmQgaXQgZG9lc24ndCBkaXNjYXJkIGFueQorICAgICAgICAjIGNvbW1pdHMsIGFuZCBpdCBhZGRzIGV4YWN0bHkgb25lIG5vbi1tZXJnZSBjb21taXQgKGdlcnJpdAorICAgICAgICAjIGZvcmNlcyBhIHdvcmtmbG93IHdoZXJlIGV2ZXJ5IGNvbW1pdCBpcyBpbmRpdmlkdWFsbHkgbWVyZ2VkCisgICAgICAgICMgYW5kIHRoZSBnaXQtbXVsdGltYWlsIGhvb2sgZmlyZWQgb2ZmIGZvciBqdXN0IHRoaXMgb25lCisgICAgICAgICMgY2hhbmdlKSwgdGhlbiB3ZSBzZW5kIGEgY29tYmluZWQgcmVmY2hhbmdlL3JldmlzaW9uIGVtYWlsLgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIElmIHRoaXMgY2hhbmdlIGlzIGEgcmVmZXJlbmNlIHVwZGF0ZSB0aGF0IGRvZXNuJ3QgZGlzY2FyZAorICAgICAgICAgICAgIyBhbnkgY29tbWl0cy4uLgorICAgICAgICAgICAgaWYgc2VsZi5jaGFuZ2VfdHlwZSAhPSAndXBkYXRlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBpZiByZWFkX2dpdF9saW5lcygKKyAgICAgICAgICAgICAgICAgICAgWydtZXJnZS1iYXNlJywgc2VsZi5vbGQuc2hhMSwgc2VsZi5uZXcuc2hhMV0KKyAgICAgICAgICAgICAgICAgICAgKSAhPSBbc2VsZi5vbGQuc2hhMV06CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgIyBDaGVjayBpZiB0aGlzIHVwZGF0ZSBpbnRyb2R1Y2VkIGV4YWN0bHkgb25lIG5vbi1tZXJnZQorICAgICAgICAgICAgIyBjb21taXQ6CisKKyAgICAgICAgICAgIGRlZiBzcGxpdF9saW5lKGxpbmUpOgorICAgICAgICAgICAgICAgICIiIlNwbGl0IGxpbmUgaW50byAoc2hhMSwgW3BhcmVudCwuLi5dKS4iIiIKKworICAgICAgICAgICAgICAgIHdvcmRzID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgcmV0dXJuICh3b3Jkc1swXSwgd29yZHNbMTpdKQorCisgICAgICAgICAgICAjIEdldCB0aGUgbmV3IGNvbW1pdHMgaW50cm9kdWNlZCBieSB0aGUgcHVzaCBhcyBhIGxpc3Qgb2YKKyAgICAgICAgICAgICMgKHNoYTEsIFtwYXJlbnQsLi4uXSkKKyAgICAgICAgICAgIG5ld19jb21taXRzID0gWworICAgICAgICAgICAgICAgIHNwbGl0X2xpbmUobGluZSkKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiByZWFkX2dpdF9saW5lcygKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZycsICctMycsICctLWZvcm1hdD0lSCAlUCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnJXMuLiVzJyAlIChzZWxmLm9sZC5zaGExLCBzZWxmLm5ldy5zaGExKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIF0KKworICAgICAgICAgICAgaWYgbm90IG5ld19jb21taXRzOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgSWYgdGhlIG5ld2VzdCBjb21taXQgaXMgYSBtZXJnZSwgc2F2ZSBpdCBmb3IgYSBsYXRlciBjaGVjaworICAgICAgICAgICAgIyBidXQgb3RoZXJ3aXNlIGlnbm9yZSBpdAorICAgICAgICAgICAgbWVyZ2UgPSBOb25lCisgICAgICAgICAgICB0b3QgPSBsZW4obmV3X2NvbW1pdHMpCisgICAgICAgICAgICBpZiBsZW4obmV3X2NvbW1pdHNbMF1bMV0pID4gMToKKyAgICAgICAgICAgICAgICBtZXJnZSA9IG5ld19jb21taXRzWzBdWzBdCisgICAgICAgICAgICAgICAgZGVsIG5ld19jb21taXRzWzBdCisKKyAgICAgICAgICAgICMgT3VyIHByaW1hcnkgY2hlY2s6IHdlIGNhbid0IGNvbWJpbmUgaWYgbW9yZSB0aGFuIG9uZSBjb21taXQKKyAgICAgICAgICAgICMgaXMgaW50cm9kdWNlZC4gIFdlIGFsc28gY3VycmVudGx5IG9ubHkgY29tYmluZSBpZiB0aGUgbmV3CisgICAgICAgICAgICAjIGNvbW1pdCBpcyBhIG5vbi1tZXJnZSBjb21taXQsIHRob3VnaCBpdCBtYXkgbWFrZSBzZW5zZSB0bworICAgICAgICAgICAgIyBjb21iaW5lIGlmIGl0IGlzIGEgbWVyZ2UgYXMgd2VsbC4KKyAgICAgICAgICAgIGlmIG5vdCAoCisgICAgICAgICAgICAgICAgICAgIGxlbihuZXdfY29tbWl0cykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbGVuKG5ld19jb21taXRzWzBdWzFdKSA9PSAxIGFuZAorICAgICAgICAgICAgICAgICAgICBuZXdfY29tbWl0c1swXVswXSBpbiBrbm93bl9hZGRlZF9zaGExcworICAgICAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgV2UgZG8gbm90IHdhbnQgdG8gY29tYmluZSByZXZpc2lvbiBhbmQgcmVmY2hhbmdlIGVtYWlscyBpZgorICAgICAgICAgICAgIyB0aG9zZSBnbyB0byBzZXBhcmF0ZSBsb2NhdGlvbnMuCisgICAgICAgICAgICByZXYgPSBSZXZpc2lvbihzZWxmLCBHaXRPYmplY3QobmV3X2NvbW1pdHNbMF1bMF0pLCAxLCB0b3QpCisgICAgICAgICAgICBpZiByZXYucmVjaXBpZW50cyAhPSBzZWxmLnJlY2lwaWVudHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgIyBXZSBpZ25vcmVkIHRoZSBuZXdlc3QgY29tbWl0IGlmIGl0IHdhcyBqdXN0IGEgbWVyZ2Ugb2YgdGhlIG9uZQorICAgICAgICAgICAgIyBjb21taXQgYmVpbmcgaW50cm9kdWNlZC4gIEJ1dCB3ZSBkb24ndCB3YW50IHRvIGlnbm9yZSB0aGF0CisgICAgICAgICAgICAjIG1lcmdlIGNvbW1pdCBpdCBpdCBpbnZvbHZlZCBjb25mbGljdCByZXNvbHV0aW9ucy4gIENoZWNrIHRoYXQuCisgICAgICAgICAgICBpZiBtZXJnZSBhbmQgbWVyZ2UgIT0gcmVhZF9naXRfb3V0cHV0KFsnZGlmZi10cmVlJywgJy0tY2MnLCBtZXJnZV0pOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgV2UgY2FuIGNvbWJpbmUgdGhlIHJlZmNoYW5nZSBhbmQgb25lIG5ldyByZXZpc2lvbiBlbWFpbHMKKyAgICAgICAgICAgICMgaW50byBvbmUuICBSZXR1cm4gdGhlIFJldmlzaW9uIHRoYXQgYSBjb21iaW5lZCBlbWFpbCBzaG91bGQKKyAgICAgICAgICAgICMgYmUgc2VudCBhYm91dC4KKyAgICAgICAgICAgIHJldHVybiByZXYKKyAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgICAgICMgQ2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY29tbWl0cyBpbiBvbGQuLm5ldyBvciBuZXcuLm9sZDsKKyAgICAgICAgICAgICMgZG9uJ3QgY29tYmluZSByZWZlcmVuY2UvcmV2aXNpb24gZW1haWxzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZW5lcmF0ZV9jb21iaW5lZF9lbWFpbChzZWxmLCBwdXNoLCByZXZpc2lvbiwgYm9keV9maWx0ZXI9Tm9uZSwgZXh0cmFfaGVhZGVyX3ZhbHVlcz17fSk6CisgICAgICAgIHZhbHVlcyA9IHJldmlzaW9uLmdldF92YWx1ZXMoKQorICAgICAgICBpZiBleHRyYV9oZWFkZXJfdmFsdWVzOgorICAgICAgICAgICAgdmFsdWVzLnVwZGF0ZShleHRyYV9oZWFkZXJfdmFsdWVzKQorICAgICAgICBpZiAnc3ViamVjdCcgbm90IGluIGV4dHJhX2hlYWRlcl92YWx1ZXM6CisgICAgICAgICAgICB2YWx1ZXNbJ3N1YmplY3QnXSA9IHNlbGYuZXhwYW5kKENPTUJJTkVEX1JFRkNIQU5HRV9SRVZJU0lPTl9TVUJKRUNUX1RFTVBMQVRFLCAqKnZhbHVlcykKKworICAgICAgICBzZWxmLl9zaW5nbGVfcmV2aXNpb24gPSByZXZpc2lvbgorICAgICAgICBzZWxmLl9jb250YWluc19kaWZmKCkKKyAgICAgICAgc2VsZi5oZWFkZXJfdGVtcGxhdGUgPSBDT01CSU5FRF9IRUFERVJfVEVNUExBVEUKKyAgICAgICAgc2VsZi5pbnRyb190ZW1wbGF0ZSA9IENPTUJJTkVEX0lOVFJPX1RFTVBMQVRFCisgICAgICAgIHNlbGYuZm9vdGVyX3RlbXBsYXRlID0gQ09NQklORURfRk9PVEVSX1RFTVBMQVRFCisKKyAgICAgICAgZGVmIHJldmlzaW9uX2dlbl9saW5rKGJhc2VfdXJsKToKKyAgICAgICAgICAgICMgcmV2aXNpb24gaXMgdXNlZCBvbmx5IHRvIGdlbmVyYXRlIHRoZSBib2R5LCBhbmQKKyAgICAgICAgICAgICMgX2NvbnRlbnRfdHlwZSBpcyBzZXQgd2hpbGUgZ2VuZXJhdGluZyBoZWFkZXJzLiBHZXQgaXQKKyAgICAgICAgICAgICMgZnJvbSB0aGUgQnJhbmNoQ2hhbmdlIG9iamVjdC4KKyAgICAgICAgICAgIHJldmlzaW9uLl9jb250ZW50X3R5cGUgPSBzZWxmLl9jb250ZW50X3R5cGUKKyAgICAgICAgICAgIHJldHVybiByZXZpc2lvbi5nZW5lcmF0ZV9icm93c2VfbGluayhiYXNlX3VybCkKKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9icm93c2VfbGluayA9IHJldmlzaW9uX2dlbl9saW5rCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfZW1haWwocHVzaCwgYm9keV9maWx0ZXIsIHZhbHVlcyk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfYm9keShzZWxmLCBwdXNoKToKKyAgICAgICAgJycnQ2FsbCB0aGUgYXBwcm9wcmlhdGUgYm9keSBnZW5lcmF0aW9uIHJvdXRpbmUuCisKKyAgICAgICAgSWYgdGhpcyBpcyBhIGNvbWJpbmVkIHJlZmNoYW5nZS9yZXZpc2lvbiBlbWFpbCwgdGhlIHNwZWNpYWwgbG9naWMKKyAgICAgICAgZm9yIGhhbmRsaW5nIHRoaXMgY29tYmluZWQgZW1haWwgY29tZXMgZnJvbSB0aGlzIGZ1bmN0aW9uLiAgRm9yCisgICAgICAgIG90aGVyIGNhc2VzLCB3ZSBqdXN0IHVzZSB0aGUgbm9ybWFsIGhhbmRsaW5nLicnJworCisgICAgICAgICMgSWYgc2VsZi5fc2luZ2xlX3JldmlzaW9uIGlzbid0IHNldDsgZG9uJ3Qgb3ZlcnJpZGUKKyAgICAgICAgaWYgbm90IHNlbGYuX3NpbmdsZV9yZXZpc2lvbjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN1cGVyKEJyYW5jaENoYW5nZSwgc2VsZikuZ2VuZXJhdGVfZW1haWxfYm9keShwdXNoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFRoaXMgaXMgYSBjb21iaW5lZCByZWZjaGFuZ2UvcmV2aXNpb24gZW1haWw7IHdlIGZpcnN0IHByb3ZpZGUKKyAgICAgICAgIyBzb21lIGluZm8gZnJvbSB0aGUgcmVmY2hhbmdlIHBvcnRpb24sIGFuZCB0aGVuIGNhbGwgdGhlIHJldmlzaW9uCisgICAgICAgICMgZ2VuZXJhdGVfZW1haWxfYm9keSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIHJldmlzaW9uIHBvcnRpb24uCisgICAgICAgIGFkZHMgPSBsaXN0KGdlbmVyYXRlX3N1bW1hcmllcygKKyAgICAgICAgICAgICctLXRvcG8tb3JkZXInLCAnLS1yZXZlcnNlJywgJyVzLi4lcycKKyAgICAgICAgICAgICUgKHNlbGYub2xkLmNvbW1pdF9zaGExLCBzZWxmLm5ldy5jb21taXRfc2hhMSwpCisgICAgICAgICAgICApKQorCisgICAgICAgIHlpZWxkIHNlbGYuZXhwYW5kKCJUaGUgZm9sbG93aW5nIGNvbW1pdChzKSB3ZXJlIGFkZGVkIHRvICUocmVmbmFtZSlzIGJ5IHRoaXMgcHVzaDpcbiIpCisgICAgICAgIGZvciAoc2hhMSwgc3ViamVjdCkgaW4gYWRkczoKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuZXhwYW5kKAorICAgICAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nbmV3JywKKyAgICAgICAgICAgICAgICByZXZfc2hvcnQ9c2hhMSwgdGV4dD1zdWJqZWN0LAorICAgICAgICAgICAgICAgICkKKworICAgICAgICB5aWVsZCBzZWxmLl9zaW5nbGVfcmV2aXNpb24ucmV2LnNob3J0ICsgIiBpcyBkZXNjcmliZWQgYmVsb3dcbiIKKyAgICAgICAgeWllbGQgJ1xuJworCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3NpbmdsZV9yZXZpc2lvbi5nZW5lcmF0ZV9lbWFpbF9ib2R5KHB1c2gpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisKK2NsYXNzIEFubm90YXRlZFRhZ0NoYW5nZShSZWZlcmVuY2VDaGFuZ2UpOgorICAgIHJlZm5hbWVfdHlwZSA9ICdhbm5vdGF0ZWQgdGFnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50LCByZWZuYW1lLCBzaG9ydF9yZWZuYW1lLCBvbGQsIG5ldywgcmV2KToKKyAgICAgICAgUmVmZXJlbmNlQ2hhbmdlLl9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwgZW52aXJvbm1lbnQsCisgICAgICAgICAgICByZWZuYW1lPXJlZm5hbWUsIHNob3J0X3JlZm5hbWU9c2hvcnRfcmVmbmFtZSwKKyAgICAgICAgICAgIG9sZD1vbGQsIG5ldz1uZXcsIHJldj1yZXYsCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYucmVjaXBpZW50cyA9IGVudmlyb25tZW50LmdldF9hbm5vdW5jZV9yZWNpcGllbnRzKHNlbGYpCisgICAgICAgIHNlbGYuc2hvd19zaG9ydGxvZyA9IGVudmlyb25tZW50LmFubm91bmNlX3Nob3dfc2hvcnRsb2cKKworICAgIEFOTk9UQVRFRF9UQUdfRk9STUFUID0gKAorICAgICAgICAnJSgqb2JqZWN0bmFtZSlcbicKKyAgICAgICAgJyUoKm9iamVjdHR5cGUpXG4nCisgICAgICAgICclKHRhZ2dlcm5hbWUpXG4nCisgICAgICAgICclKHRhZ2dlcmRhdGUpJworICAgICAgICApCisKKyAgICBkZWYgZGVzY3JpYmVfdGFnKHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJEZXNjcmliZSB0aGUgbmV3IHZhbHVlIG9mIGFuIGFubm90YXRlZCB0YWcuIiIiCisKKyAgICAgICAgIyBVc2UgZ2l0IGZvci1lYWNoLXJlZiB0byBwdWxsIG91dCB0aGUgaW5kaXZpZHVhbCBmaWVsZHMgZnJvbQorICAgICAgICAjIHRoZSB0YWcKKyAgICAgICAgW3RhZ29iamVjdCwgdGFndHlwZSwgdGFnZ2VyLCB0YWdnZWRdID0gcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICBbJ2Zvci1lYWNoLXJlZicsICctLWZvcm1hdD0lcycgJSAoc2VsZi5BTk5PVEFURURfVEFHX0ZPUk1BVCwpLCBzZWxmLnJlZm5hbWVdLAorICAgICAgICAgICAgKQorCisgICAgICAgIHlpZWxkIHNlbGYuZXhwYW5kKAorICAgICAgICAgICAgQlJJRUZfU1VNTUFSWV9URU1QTEFURSwgYWN0aW9uPSd0YWdnaW5nJywKKyAgICAgICAgICAgIHJldl9zaG9ydD10YWdvYmplY3QsIHRleHQ9JyglcyknICUgKHRhZ3R5cGUsKSwKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgdGFndHlwZSA9PSAnY29tbWl0JzoKKyAgICAgICAgICAgICMgSWYgdGhlIHRhZ2dlZCBvYmplY3QgaXMgYSBjb21taXQsIHRoZW4gd2UgYXNzdW1lIHRoaXMgaXMgYQorICAgICAgICAgICAgIyByZWxlYXNlLCBhbmQgc28gd2UgY2FsY3VsYXRlIHdoaWNoIHRhZyB0aGlzIHRhZyBpcworICAgICAgICAgICAgIyByZXBsYWNpbmcKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwcmV2dGFnID0gcmVhZF9naXRfb3V0cHV0KFsnZGVzY3JpYmUnLCAnLS1hYmJyZXY9MCcsICclc14nICUgKHNlbGYubmV3LCldKQorICAgICAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgICAgICAgICBwcmV2dGFnID0gTm9uZQorICAgICAgICAgICAgaWYgcHJldnRhZzoKKyAgICAgICAgICAgICAgICB5aWVsZCAnIHJlcGxhY2VzICVzXG4nICUgKHByZXZ0YWcsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJldnRhZyA9IE5vbmUKKyAgICAgICAgICAgIHlpZWxkICcgIGxlbmd0aCAlcyBieXRlc1xuJyAlIChyZWFkX2dpdF9vdXRwdXQoWydjYXQtZmlsZScsICctcycsIHRhZ29iamVjdF0pLCkKKworICAgICAgICB5aWVsZCAnICAgICAgYnkgJXNcbicgJSAodGFnZ2VyLCkKKyAgICAgICAgeWllbGQgJyAgICAgIG9uICVzXG4nICUgKHRhZ2dlZCwpCisgICAgICAgIHlpZWxkICdcbicKKworICAgICAgICAjIFNob3cgdGhlIGNvbnRlbnQgb2YgdGhlIHRhZyBtZXNzYWdlOyB0aGlzIG1pZ2h0IGNvbnRhaW4gYQorICAgICAgICAjIGNoYW5nZSBsb2cgb3IgcmVsZWFzZSBub3RlcyBzbyBpcyB3b3J0aCBkaXNwbGF5aW5nLgorICAgICAgICB5aWVsZCBMT0dCRUdJTgorICAgICAgICBjb250ZW50cyA9IGxpc3QocmVhZF9naXRfbGluZXMoWydjYXQtZmlsZScsICd0YWcnLCBzZWxmLm5ldy5zaGExXSwga2VlcGVuZHM9VHJ1ZSkpCisgICAgICAgIGNvbnRlbnRzID0gY29udGVudHNbY29udGVudHMuaW5kZXgoJ1xuJykgKyAxOl0KKyAgICAgICAgaWYgY29udGVudHMgYW5kIGNvbnRlbnRzWy0xXVstMTpdICE9ICdcbic6CisgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoJ1xuJykKKyAgICAgICAgZm9yIGxpbmUgaW4gY29udGVudHM6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgaWYgc2VsZi5zaG93X3Nob3J0bG9nIGFuZCB0YWd0eXBlID09ICdjb21taXQnOgorICAgICAgICAgICAgIyBPbmx5IGNvbW1pdCB0YWdzIG1ha2Ugc2Vuc2UgdG8gaGF2ZSByZXYtbGlzdCBvcGVyYXRpb25zCisgICAgICAgICAgICAjIHBlcmZvcm1lZCBvbiB0aGVtCisgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICBpZiBwcmV2dGFnOgorICAgICAgICAgICAgICAgICMgU2hvdyBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyByZWxlYXNlCisgICAgICAgICAgICAgICAgcmV2bGlzdCA9IHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgWydyZXYtbGlzdCcsICctLXByZXR0eT1zaG9ydCcsICclcy4uJXMnICUgKHByZXZ0YWcsIHNlbGYubmV3LCldLAorICAgICAgICAgICAgICAgICAgICBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTm8gcHJldmlvdXMgdGFnLCBzaG93IGFsbCB0aGUgY2hhbmdlcyBzaW5jZSB0aW1lCisgICAgICAgICAgICAgICAgIyBiZWdhbgorICAgICAgICAgICAgICAgIHJldmxpc3QgPSByZWFkX2dpdF9vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIFsncmV2LWxpc3QnLCAnLS1wcmV0dHk9c2hvcnQnLCAnJXMnICUgKHNlbGYubmV3LCldLAorICAgICAgICAgICAgICAgICAgICBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBmb3IgbGluZSBpbiByZWFkX2dpdF9saW5lcyhbJ3Nob3J0bG9nJ10sIGlucHV0PXJldmxpc3QsIGtlZXBlbmRzPVRydWUpOgorICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICB5aWVsZCBMT0dFTkQKKyAgICAgICAgeWllbGQgJ1xuJworCisgICAgZGVmIGdlbmVyYXRlX2NyZWF0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhbiBhbm5vdGF0ZWQgdGFnLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19DUkVBVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmRlc2NyaWJlX3RhZyhwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV91cGRhdGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIGZvciB0aGUgdXBkYXRlIG9mIGFuIGFubm90YXRlZCB0YWcuCisKKyAgICAgICAgVGhpcyBpcyBwcm9iYWJseSBhIHJhcmUgZXZlbnQgYW5kIG1heSBub3QgZXZlbiBiZSBhbGxvd2VkLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19VUERBVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmRlc2NyaWJlX3RhZyhwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9kZWxldGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBub24tYW5ub3RhdGVkIHJlZmVyZW5jZSBpcyB1cGRhdGVkLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19ERUxFVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgnICAgdGFnIHdhcyAgJShvbGRyZXZfc2hvcnQpc1xuJykKKyAgICAgICAgeWllbGQgJ1xuJworCisKK2NsYXNzIE5vbkFubm90YXRlZFRhZ0NoYW5nZShSZWZlcmVuY2VDaGFuZ2UpOgorICAgIHJlZm5hbWVfdHlwZSA9ICd0YWcnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQsIHJlZm5hbWUsIHNob3J0X3JlZm5hbWUsIG9sZCwgbmV3LCByZXYpOgorICAgICAgICBSZWZlcmVuY2VDaGFuZ2UuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIHJlZm5hbWU9cmVmbmFtZSwgc2hvcnRfcmVmbmFtZT1zaG9ydF9yZWZuYW1lLAorICAgICAgICAgICAgb2xkPW9sZCwgbmV3PW5ldywgcmV2PXJldiwKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5yZWNpcGllbnRzID0gZW52aXJvbm1lbnQuZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKHNlbGYpCisKKyAgICBkZWYgZ2VuZXJhdGVfY3JlYXRlX3N1bW1hcnkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkNhbGxlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGFuIGFubm90YXRlZCB0YWcuIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoVEFHX0NSRUFURURfVEVNUExBVEUpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX3VwZGF0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIG5vbi1hbm5vdGF0ZWQgcmVmZXJlbmNlIGlzIHVwZGF0ZWQuIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoVEFHX1VQREFURURfVEVNUExBVEUpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2RlbGV0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIG5vbi1hbm5vdGF0ZWQgcmVmZXJlbmNlIGlzIHVwZGF0ZWQuIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoVEFHX0RFTEVURURfVEVNUExBVEUpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgIGZvciBsaW5lIGluIFJlZmVyZW5jZUNoYW5nZS5nZW5lcmF0ZV9kZWxldGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworCitjbGFzcyBPdGhlclJlZmVyZW5jZUNoYW5nZShSZWZlcmVuY2VDaGFuZ2UpOgorICAgIHJlZm5hbWVfdHlwZSA9ICdyZWZlcmVuY2UnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQsIHJlZm5hbWUsIHNob3J0X3JlZm5hbWUsIG9sZCwgbmV3LCByZXYpOgorICAgICAgICAjIFdlIHVzZSB0aGUgZnVsbCByZWZuYW1lIGFzIHNob3J0X3JlZm5hbWUsIGJlY2F1c2Ugb3RoZXJ3aXNlCisgICAgICAgICMgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgcmVmZXJlbmNlIHdvdWxkIG5vdCBiZSBvYnZpb3VzIGZyb20gdGhlCisgICAgICAgICMgdGV4dCBvZiB0aGUgZW1haWwuCisgICAgICAgIFJlZmVyZW5jZUNoYW5nZS5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIGVudmlyb25tZW50LAorICAgICAgICAgICAgcmVmbmFtZT1yZWZuYW1lLCBzaG9ydF9yZWZuYW1lPXJlZm5hbWUsCisgICAgICAgICAgICBvbGQ9b2xkLCBuZXc9bmV3LCByZXY9cmV2LAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLnJlY2lwaWVudHMgPSBlbnZpcm9ubWVudC5nZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMoc2VsZikKKworCitjbGFzcyBNYWlsZXIob2JqZWN0KToKKyAgICAiIiJBbiBvYmplY3QgdGhhdCBjYW4gc2VuZCBlbWFpbHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQpOgorICAgICAgICBzZWxmLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNlbmQoc2VsZiwgbGluZXMsIHRvX2FkZHJzKToKKyAgICAgICAgIiIiU2VuZCBhbiBlbWFpbCBjb25zaXN0aW5nIG9mIGxpbmVzLgorCisgICAgICAgIGxpbmVzIG11c3QgYmUgYW4gaXRlcmFibGUgb3ZlciB0aGUgbGluZXMgY29uc3RpdHV0aW5nIHRoZQorICAgICAgICBoZWFkZXIgYW5kIGJvZHkgb2YgdGhlIGVtYWlsLiAgdG9fYWRkcnMgaXMgYSBsaXN0IG9mIHJlY2lwaWVudAorICAgICAgICBhZGRyZXNzZXMgKGNhbiBiZSBuZWVkZWQgZXZlbiBpZiBsaW5lcyBhbHJlYWR5IGNvbnRhaW5zIGEKKyAgICAgICAgIlRvOiIgZmllbGQpLiAgSXQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyAoY29tbWEtc2VwYXJhdGVkIGxpc3QKKyAgICAgICAgb2YgZW1haWwgYWRkcmVzc2VzKSBvciBhIFB5dGhvbiBsaXN0IG9mIGluZGl2aWR1YWwgZW1haWwKKyAgICAgICAgYWRkcmVzc2VzLgorCisgICAgICAgICIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisKK2NsYXNzIFNlbmRNYWlsZXIoTWFpbGVyKToKKyAgICAiIiJTZW5kIGVtYWlscyB1c2luZyAnc2VuZG1haWwgLW9pIC10Jy4iIiIKKworICAgIFNFTkRNQUlMX0NBTkRJREFURVMgPSBbCisgICAgICAgICcvdXNyL3NiaW4vc2VuZG1haWwnLAorICAgICAgICAnL3Vzci9saWIvc2VuZG1haWwnLAorICAgICAgICBdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZpbmRfc2VuZG1haWwoKToKKyAgICAgICAgZm9yIHBhdGggaW4gU2VuZE1haWxlci5TRU5ETUFJTF9DQU5ESURBVEVTOgorICAgICAgICAgICAgaWYgb3MuYWNjZXNzKHBhdGgsIG9zLlhfT0spOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdObyBzZW5kbWFpbCBleGVjdXRhYmxlIGZvdW5kLiAgJworICAgICAgICAgICAgICAgICdUcnkgc2V0dGluZyBtdWx0aW1haWxob29rLnNlbmRtYWlsQ29tbWFuZC4nCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50LCBjb21tYW5kPU5vbmUsIGVudmVsb3Blc2VuZGVyPU5vbmUpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBTZW5kTWFpbGVyIGluc3RhbmNlLgorCisgICAgICAgIGNvbW1hbmQgc2hvdWxkIGJlIHRoZSBjb21tYW5kIGFuZCBhcmd1bWVudHMgdXNlZCB0byBpbnZva2UKKyAgICAgICAgc2VuZG1haWwsIGFzIGEgbGlzdCBvZiBzdHJpbmdzLiAgSWYgYW4gZW52ZWxvcGVzZW5kZXIgaXMKKyAgICAgICAgcHJvdmlkZWQsIGl0IHdpbGwgYWxzbyBiZSBwYXNzZWQgdG8gdGhlIGNvbW1hbmQsIHZpYSAnLWYKKyAgICAgICAgZW52ZWxvcGVzZW5kZXInLiIiIgorICAgICAgICBzdXBlcihTZW5kTWFpbGVyLCBzZWxmKS5fX2luaXRfXyhlbnZpcm9ubWVudCkKKyAgICAgICAgaWYgY29tbWFuZDoKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9IGNvbW1hbmRbOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9IFtzZWxmLmZpbmRfc2VuZG1haWwoKSwgJy1vaScsICctdCddCisKKyAgICAgICAgaWYgZW52ZWxvcGVzZW5kZXI6CisgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZXh0ZW5kKFsnLWYnLCBlbnZlbG9wZXNlbmRlcl0pCisKKyAgICBkZWYgc2VuZChzZWxmLCBsaW5lcywgdG9fYWRkcnMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLmNvbW1hbmQsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBzZWxmLmVudmlyb25tZW50LmdldF9sb2dnZXIoKS5lcnJvcigKKyAgICAgICAgICAgICAgICAnKioqIENhbm5vdCBleGVjdXRlIGNvbW1hbmQ6ICVzXG4nICUgJyAnLmpvaW4oc2VsZi5jb21tYW5kKSArCisgICAgICAgICAgICAgICAgJyoqKiAlc1xuJyAlIHN5cy5leGNfaW5mbygpWzFdICsKKyAgICAgICAgICAgICAgICAnKioqIFRyeSBzZXR0aW5nIG11bHRpbWFpbGhvb2subWFpbGVyIHRvICJzbXRwIlxuJyArCisgICAgICAgICAgICAgICAgJyoqKiB0byBzZW5kIGVtYWlscyB3aXRob3V0IHVzaW5nIHRoZSBzZW5kbWFpbCBjb21tYW5kLlxuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpbmVzID0gKHN0cl90b19ieXRlcyhsaW5lKSBmb3IgbGluZSBpbiBsaW5lcykKKyAgICAgICAgICAgIHAuc3RkaW4ud3JpdGVsaW5lcyhsaW5lcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmVycm9yKAorICAgICAgICAgICAgICAgICcqKiogRXJyb3Igd2hpbGUgZ2VuZXJhdGluZyBjb21taXQgZW1haWxcbicKKyAgICAgICAgICAgICAgICAnKioqICAtIG1haWwgc2VuZGluZyBhYm9ydGVkLlxuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocCwgJ3Rlcm1pbmF0ZScpOgorICAgICAgICAgICAgICAgICMgc3VicHJvY2Vzcy50ZXJtaW5hdGUoKSBpcyBub3QgYXZhaWxhYmxlIGluIFB5dGhvbiAyLjQKKyAgICAgICAgICAgICAgICBwLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgICAgICAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHJldGNvZGUgPSBwLndhaXQoKQorICAgICAgICAgICAgaWYgcmV0Y29kZToKKyAgICAgICAgICAgICAgICByYWlzZSBDb21tYW5kRXJyb3Ioc2VsZi5jb21tYW5kLCByZXRjb2RlKQorCisKK2NsYXNzIFNNVFBNYWlsZXIoTWFpbGVyKToKKyAgICAiIiJTZW5kIGVtYWlscyB1c2luZyBQeXRob24ncyBzbXRwbGliLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50LAorICAgICAgICAgICAgICAgICBlbnZlbG9wZXNlbmRlciwgc210cHNlcnZlciwKKyAgICAgICAgICAgICAgICAgc210cHNlcnZlcnRpbWVvdXQ9MTAuMCwgc210cHNlcnZlcmRlYnVnbGV2ZWw9MCwKKyAgICAgICAgICAgICAgICAgc210cGVuY3J5cHRpb249J25vbmUnLAorICAgICAgICAgICAgICAgICBzbXRwdXNlcj0nJywgc210cHBhc3M9JycsCisgICAgICAgICAgICAgICAgIHNtdHBjYWNlcnRzPScnCisgICAgICAgICAgICAgICAgICk6CisgICAgICAgIHN1cGVyKFNNVFBNYWlsZXIsIHNlbGYpLl9faW5pdF9fKGVudmlyb25tZW50KQorICAgICAgICBpZiBub3QgZW52ZWxvcGVzZW5kZXI6CisgICAgICAgICAgICBzZWxmLmVudmlyb25tZW50LmdldF9sb2dnZXIoKS5lcnJvcigKKyAgICAgICAgICAgICAgICAnZmF0YWw6IGdpdF9tdWx0aW1haWw6IGNhbm5vdCB1c2UgU01UUE1haWxlciB3aXRob3V0IGEgc2VuZGVyIGFkZHJlc3MuXG4nCisgICAgICAgICAgICAgICAgJ3BsZWFzZSBzZXQgZWl0aGVyIG11bHRpbWFpbGhvb2suZW52ZWxvcGVTZW5kZXIgb3IgdXNlci5lbWFpbFxuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIHNtdHBlbmNyeXB0aW9uID09ICdzc2wnIGFuZCBub3QgKHNtdHB1c2VyIGFuZCBzbXRwcGFzcyk6CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdDYW5ub3QgdXNlIFNNVFBNYWlsZXIgd2l0aCBzZWN1cml0eSBvcHRpb24gc3NsICcKKyAgICAgICAgICAgICAgICAnd2l0aG91dCBvcHRpb25zIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4nCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmVudmVsb3Blc2VuZGVyID0gZW52ZWxvcGVzZW5kZXIKKyAgICAgICAgc2VsZi5zbXRwc2VydmVyID0gc210cHNlcnZlcgorICAgICAgICBzZWxmLnNtdHBzZXJ2ZXJ0aW1lb3V0ID0gc210cHNlcnZlcnRpbWVvdXQKKyAgICAgICAgc2VsZi5zbXRwc2VydmVyZGVidWdsZXZlbCA9IHNtdHBzZXJ2ZXJkZWJ1Z2xldmVsCisgICAgICAgIHNlbGYuc2VjdXJpdHkgPSBzbXRwZW5jcnlwdGlvbgorICAgICAgICBzZWxmLnVzZXJuYW1lID0gc210cHVzZXIKKyAgICAgICAgc2VsZi5wYXNzd29yZCA9IHNtdHBwYXNzCisgICAgICAgIHNlbGYuc210cGNhY2VydHMgPSBzbXRwY2FjZXJ0cworICAgICAgICBzZWxmLmxvZ2dlZGluID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmIGNhbGwoa2xhc3MsIHNlcnZlciwgdGltZW91dCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2xhc3Moc2VydmVyLCB0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBPbGQgUHl0aG9uIHZlcnNpb25zIGRvIG5vdCBoYXZlIHRpbWVvdXQ9IGFyZ3VtZW50LgorICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2xhc3Moc2VydmVyKQorICAgICAgICAgICAgaWYgc2VsZi5zZWN1cml0eSA9PSAnbm9uZSc6CisgICAgICAgICAgICAgICAgc2VsZi5zbXRwID0gY2FsbChzbXRwbGliLlNNVFAsIHNlbGYuc210cHNlcnZlciwgdGltZW91dD1zZWxmLnNtdHBzZXJ2ZXJ0aW1lb3V0KQorICAgICAgICAgICAgZWxpZiBzZWxmLnNlY3VyaXR5ID09ICdzc2wnOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc210cGNhY2VydHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNtdHBsaWIuU01UUEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJDaGVja2luZyBjZXJ0aWZpY2F0ZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBzc2wsIHByZWZlciBzdGFydHRscyIKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAgPSBjYWxsKHNtdHBsaWIuU01UUF9TU0wsIHNlbGYuc210cHNlcnZlciwgdGltZW91dD1zZWxmLnNtdHBzZXJ2ZXJ0aW1lb3V0KQorICAgICAgICAgICAgZWxpZiBzZWxmLnNlY3VyaXR5ID09ICd0bHMnOgorICAgICAgICAgICAgICAgIGlmICdzc2wnIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAnKioqIFlvdXIgUHl0aG9uIHZlcnNpb24gZG9lcyBub3QgaGF2ZSB0aGUgc3NsIGxpYnJhcnkgaW5zdGFsbGVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnKioqIHNtdHBFbmNyeXB0aW9uPXRscyBpcyBub3QgYXZhaWxhYmxlLlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiBFaXRoZXIgdXBncmFkZSBQeXRob24gdG8gMi42IG9yIGxhdGVyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnICAgIG9yIHVzZSBnaXRfbXVsdGltYWlsLnB5IHZlcnNpb24gMS4yLlxuJykKKyAgICAgICAgICAgICAgICBpZiAnOicgbm90IGluIHNlbGYuc210cHNlcnZlcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zbXRwc2VydmVyICs9ICc6NTg3JyAgIyBkZWZhdWx0IHBvcnQgZm9yIFRMUworICAgICAgICAgICAgICAgIHNlbGYuc210cCA9IGNhbGwoc210cGxpYi5TTVRQLCBzZWxmLnNtdHBzZXJ2ZXIsIHRpbWVvdXQ9c2VsZi5zbXRwc2VydmVydGltZW91dCkKKyAgICAgICAgICAgICAgICAjIHN0YXJ0OiBlaGxvICsgc3RhcnR0bHMKKyAgICAgICAgICAgICAgICAjIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAgICAgICAjICAgICBzZWxmLnNtdHAuZWhsbygpCisgICAgICAgICAgICAgICAgIyAgICAgc2VsZi5zbXRwLnN0YXJ0dGxzKCkKKyAgICAgICAgICAgICAgICAjIHdpdGggYWNjZXNzIHRvIHRoZSBzc2wgbGF5ZXIKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAuZWhsbygpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc210cC5oYXNfZXh0bigic3RhcnR0bHMiKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc210cGxpYi5TTVRQRXhjZXB0aW9uKCJTVEFSVFRMUyBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIiKQorICAgICAgICAgICAgICAgIHJlc3AsIHJlcGx5ID0gc2VsZi5zbXRwLmRvY21kKCJTVEFSVFRMUyIpCisgICAgICAgICAgICAgICAgaWYgcmVzcCAhPSAyMjA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNtdHBsaWIuU01UUEV4Y2VwdGlvbigiV3JvbmcgYW5zd2VyIHRvIHRoZSBTVEFSVFRMUyBjb21tYW5kIikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNtdHBjYWNlcnRzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNtdHAuc29jayA9IHNzbC53cmFwX3NvY2tldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc210cC5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9c2VsZi5zbXRwY2FjZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc210cC5zb2NrID0gc3NsLndyYXBfc29ja2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zbXRwLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudmlyb25tZW50LmdldF9sb2dnZXIoKS5lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICcqKiogV2FybmluZywgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBub3QgdmVyaWZpZWQgKHNtdHApICoqKlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiAgICAgICAgICBzZXQgdGhlIG9wdGlvbiBzbXRwQ0FDZXJ0cyAgICAgICAgICAgICAgICAgICAqKipcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNtdHAuc29jaywgInJlYWQiKToKKyAgICAgICAgICAgICAgICAgICAgIyB1c2luZyBodHRwbGliLkZha2VTb2NrZXQgd2l0aCBQeXRob24gMi41Lnggb3IgZWFybGllcgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNtdHAuc29jay5yZWFkID0gc2VsZi5zbXRwLnNvY2sucmVjdgorICAgICAgICAgICAgICAgIHNlbGYuc210cC5maWxlID0gc210cGxpYi5TU0xGYWtlRmlsZShzZWxmLnNtdHAuc29jaykKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAuaGVsb19yZXNwID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuc210cC5laGxvX3Jlc3AgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5zbXRwLmVzbXRwX2ZlYXR1cmVzID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAuZG9lc19lc210cCA9IDAKKyAgICAgICAgICAgICAgICAjIGVuZDogICBlaGxvICsgc3RhcnR0bHMKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAuZWhsbygpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyoqKiBFcnJvcjogQ29udHJvbCByZWFjaGVkIGFuIGludmFsaWQgb3B0aW9uLiAqKionKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBpZiBzZWxmLnNtdHBzZXJ2ZXJkZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAiKioqIFNldHRpbmcgZGVidWcgb24gZm9yIFNNVFAgc2VydmVyIGNvbm5lY3Rpb24gKCVzKSAqKipcbiIKKyAgICAgICAgICAgICAgICAgICAgJSBzZWxmLnNtdHBzZXJ2ZXJkZWJ1Z2xldmVsKQorICAgICAgICAgICAgICAgIHNlbGYuc210cC5zZXRfZGVidWdsZXZlbChzZWxmLnNtdHBzZXJ2ZXJkZWJ1Z2xldmVsKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IoCisgICAgICAgICAgICAgICAgJyoqKiBFcnJvciBlc3RhYmxpc2hpbmcgU01UUCBjb25uZWN0aW9uIHRvICVzICoqKlxuJworICAgICAgICAgICAgICAgICcqKiogJXNcbicKKyAgICAgICAgICAgICAgICAlIChzZWxmLnNtdHBzZXJ2ZXIsIHN5cy5leGNfaW5mbygpWzFdKSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NtdHAnKToKKyAgICAgICAgICAgIHNlbGYuc210cC5xdWl0KCkKKyAgICAgICAgICAgIGRlbCBzZWxmLnNtdHAKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGxpbmVzLCB0b19hZGRycyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYudXNlcm5hbWUgb3Igc2VsZi5wYXNzd29yZDoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5sb2dnZWRpbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zbXRwLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VkaW4gPSBUcnVlCisgICAgICAgICAgICBtc2cgPSAnJy5qb2luKGxpbmVzKQorICAgICAgICAgICAgIyB0dXJuIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGludG8gUHl0aG9uIGxpc3QgaWYgbmVlZGVkLgorICAgICAgICAgICAgaWYgaXNfc3RyaW5nKHRvX2FkZHJzKToKKyAgICAgICAgICAgICAgICB0b19hZGRycyA9IFtlbWFpbCBmb3IgKG5hbWUsIGVtYWlsKSBpbiBnZXRhZGRyZXNzZXMoW3RvX2FkZHJzXSldCisgICAgICAgICAgICBzZWxmLnNtdHAuc2VuZG1haWwoc2VsZi5lbnZlbG9wZXNlbmRlciwgdG9fYWRkcnMsIG1zZykKKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IoCisgICAgICAgICAgICAgICAgJyoqKiBFcnJvciBzZW5kaW5nIGVtYWlsICoqKlxuJworICAgICAgICAgICAgICAgICcqKiogU01UUCBzZXJ2ZXIgdGltZWQgb3V0ICh0aW1lb3V0IGlzICVzKVxuJworICAgICAgICAgICAgICAgICUgc2VsZi5zbXRwc2VydmVydGltZW91dCkKKyAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUFJlc3BvbnNlRXhjZXB0aW9uOgorICAgICAgICAgICAgZXJyID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmVycm9yKAorICAgICAgICAgICAgICAgICcqKiogRXJyb3Igc2VuZGluZyBlbWFpbCAqKipcbicKKyAgICAgICAgICAgICAgICAnKioqIEVycm9yICVkOiAlc1xuJworICAgICAgICAgICAgICAgICUgKGVyci5zbXRwX2NvZGUsIGJ5dGVzX3RvX3N0cihlcnIuc210cF9lcnJvcikpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNtdHAgPSBzZWxmLnNtdHAKKyAgICAgICAgICAgICAgICAjIGRlbGV0ZSB0aGUgZmllbGQgYmVmb3JlIHF1aXQoKSBzbyB0aGF0IGluIGNhc2Ugb2YKKyAgICAgICAgICAgICAgICAjIGVycm9yLCBzZWxmLnNtdHAgaXMgZGVsZXRlZCBhbnl3YXkuCisgICAgICAgICAgICAgICAgZGVsIHNlbGYuc210cAorICAgICAgICAgICAgICAgIHNtdHAucXVpdCgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IoCisgICAgICAgICAgICAgICAgICAgICcqKiogRXJyb3IgY2xvc2luZyB0aGUgU01UUCBjb25uZWN0aW9uICoqKlxuJworICAgICAgICAgICAgICAgICAgICAnKioqIEV4aXRpbmcgYW55d2F5IC4uLiAqKipcbicKKyAgICAgICAgICAgICAgICAgICAgJyoqKiAlc1xuJyAlIHN5cy5leGNfaW5mbygpWzFdKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworCitjbGFzcyBPdXRwdXRNYWlsZXIoTWFpbGVyKToKKyAgICAiIiJXcml0ZSBlbWFpbHMgdG8gYW4gb3V0cHV0IHN0cmVhbSwgYnJhY2tldGVkIGJ5IGxpbmVzIG9mICc9JyBjaGFyYWN0ZXJzLgorCisgICAgVGhpcyBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIiIgorCisgICAgU0VQQVJBVE9SID0gJz0nICogNzUgKyAnXG4nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZiwgZW52aXJvbm1lbnQ9Tm9uZSk6CisgICAgICAgIHN1cGVyKE91dHB1dE1haWxlciwgc2VsZikuX19pbml0X18oZW52aXJvbm1lbnQ9ZW52aXJvbm1lbnQpCisgICAgICAgIHNlbGYuZiA9IGYKKworICAgIGRlZiBzZW5kKHNlbGYsIGxpbmVzLCB0b19hZGRycyk6CisgICAgICAgIHdyaXRlX3N0cihzZWxmLmYsIHNlbGYuU0VQQVJBVE9SKQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIHdyaXRlX3N0cihzZWxmLmYsIGxpbmUpCisgICAgICAgIHdyaXRlX3N0cihzZWxmLmYsIHNlbGYuU0VQQVJBVE9SKQorCisKK2RlZiBnZXRfZ2l0X2RpcigpOgorICAgICIiIkRldGVybWluZSBHSVRfRElSLgorCisgICAgRGV0ZXJtaW5lIEdJVF9ESVIgZWl0aGVyIGZyb20gdGhlIEdJVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IKKyAgICBmcm9tIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgdXNpbmcgR2l0J3MgdXN1YWwgcnVsZXMuIiIiCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiByZWFkX2dpdF9vdXRwdXQoWydyZXYtcGFyc2UnLCAnLS1naXQtZGlyJ10pCisgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnZmF0YWw6IGdpdF9tdWx0aW1haWw6IG5vdCBpbiBhIGdpdCBkaXJlY3RvcnlcbicpCisgICAgICAgIHN5cy5leGl0KDEpCisKKworY2xhc3MgRW52aXJvbm1lbnQob2JqZWN0KToKKyAgICAiIiJEZXNjcmliZXMgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBwdXNoIGlzIG9jY3VycmluZy4KKworICAgIEFuIEVudmlyb25tZW50IG9iamVjdCBlbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2FsCisgICAgZW52aXJvbm1lbnQuICBGb3IgZXhhbXBsZSwgaXQga25vd3MgaG93IHRvIGRldGVybWluZToKKworICAgICogdGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgdG8gd2hpY2ggdGhlIHB1c2ggb2NjdXJyZWQKKworICAgICogd2hhdCB1c2VyIGRpZCB0aGUgcHVzaAorCisgICAgKiB3aGF0IHVzZXJzIHdhbnQgdG8gYmUgaW5mb3JtZWQgYWJvdXQgdmFyaW91cyB0eXBlcyBvZiBjaGFuZ2VzLgorCisgICAgQW4gRW52aXJvbm1lbnQgb2JqZWN0IGlzIGV4cGVjdGVkIHRvIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCisgICAgICAgIGdldF9yZXBvX3Nob3J0bmFtZSgpCisKKyAgICAgICAgICAgIFJldHVybiBhIHNob3J0IG5hbWUgZm9yIHRoZSByZXBvc2l0b3J5LCBmb3IgZGlzcGxheQorICAgICAgICAgICAgcHVycG9zZXMuCisKKyAgICAgICAgZ2V0X3JlcG9fcGF0aCgpCisKKyAgICAgICAgICAgIFJldHVybiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgR2l0IHJlcG9zaXRvcnkuCisKKyAgICAgICAgZ2V0X2VtYWlscHJlZml4KCkKKworICAgICAgICAgICAgUmV0dXJuIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSBwcmVmaXhlZCB0byBldmVyeSBlbWFpbCdzCisgICAgICAgICAgICBzdWJqZWN0LgorCisgICAgICAgIGdldF9wdXNoZXIoKQorCisgICAgICAgICAgICBSZXR1cm4gdGhlIHVzZXJuYW1lIG9mIHRoZSBwZXJzb24gd2hvIHB1c2hlZCB0aGUgY2hhbmdlcy4KKyAgICAgICAgICAgIFRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgZW1haWwgYm9keSB0byBpbmRpY2F0ZSB3aG8KKyAgICAgICAgICAgIHB1c2hlZCB0aGUgY2hhbmdlLgorCisgICAgICAgIGdldF9wdXNoZXJfZW1haWwoKSAobWF5IHJldHVybiBOb25lKQorCisgICAgICAgICAgICBSZXR1cm4gdGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHBlcnNvbiB3aG8gcHVzaGVkIHRoZQorICAgICAgICAgICAgY2hhbmdlcy4gIFRoZSB2YWx1ZSBzaG91bGQgYmUgYSBzaW5nbGUgUkZDIDI4MjIgZW1haWwKKyAgICAgICAgICAgIGFkZHJlc3MgYXMgYSBzdHJpbmc7IGUuZy4sICJKb2UgVXNlciA8dXNlckBleGFtcGxlLmNvbT4iCisgICAgICAgICAgICBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSAidXNlckBleGFtcGxlLmNvbSIuICBJZiBzZXQsIHRoZQorICAgICAgICAgICAgdmFsdWUgaXMgdXNlZCBhcyB0aGUgUmVwbHktVG8gYWRkcmVzcyBmb3IgcmVmY2hhbmdlCisgICAgICAgICAgICBlbWFpbHMuICBJZiBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgcHVzaGVyJ3MKKyAgICAgICAgICAgIGVtYWlsLCB0aGlzIGF0dHJpYnV0ZSBzaG91bGQgYmUgc2V0IHRvIE5vbmUgKGluIHdoaWNoIGNhc2UKKyAgICAgICAgICAgIG5vIFJlcGx5LVRvIGhlYWRlciB3aWxsIGJlIG91dHB1dCkuCisKKyAgICAgICAgZ2V0X3NlbmRlcigpCisKKyAgICAgICAgICAgIFJldHVybiB0aGUgYWRkcmVzcyB0byBiZSB1c2VkIGFzIHRoZSAnRnJvbScgZW1haWwgYWRkcmVzcworICAgICAgICAgICAgaW4gdGhlIGVtYWlsIGVudmVsb3BlLgorCisgICAgICAgIGdldF9mcm9tYWRkcihjaGFuZ2U9Tm9uZSkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSAnRnJvbScgZW1haWwgYWRkcmVzcyB1c2VkIGluIHRoZSBlbWFpbCAnRnJvbTonCisgICAgICAgICAgICBoZWFkZXJzLiAgSWYgdGhlIGNoYW5nZSBpcyBrbm93biB3aGVuIHRoaXMgZnVuY3Rpb24gaXMKKyAgICAgICAgICAgIGNhbGxlZCwgaXQgaXMgcGFzc2VkIGluIGFzIHRoZSAnY2hhbmdlJyBwYXJhbWV0ZXIuICAoTWF5CisgICAgICAgICAgICBiZSBhIGZ1bGwgUkZDIDI4MjIgZW1haWwgYWRkcmVzcyBsaWtlICdKb2UgVXNlcgorICAgICAgICAgICAgPHVzZXJAZXhhbXBsZS5jb20+Jy4pCisKKyAgICAgICAgZ2V0X2FkbWluaXN0cmF0b3IoKQorCisgICAgICAgICAgICBSZXR1cm4gdGhlIG5hbWUgYW5kL29yIGVtYWlsIG9mIHRoZSByZXBvc2l0b3J5CisgICAgICAgICAgICBhZG1pbmlzdHJhdG9yLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGluIHRoZSBmb290ZXIgYXMgdGhlCisgICAgICAgICAgICBwZXJzb24gdG8gd2hvbSByZXF1ZXN0cyB0byBiZSByZW1vdmVkIGZyb20gdGhlCisgICAgICAgICAgICBub3RpZmljYXRpb24gbGlzdCBzaG91bGQgYmUgc2VudC4gIElkZWFsbHksIGl0IHNob3VsZAorICAgICAgICAgICAgaW5jbHVkZSBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuCisKKyAgICAgICAgZ2V0X3JlcGx5X3RvX3JlZmNoYW5nZSgpCisgICAgICAgIGdldF9yZXBseV90b19jb21taXQoKQorCisgICAgICAgICAgICBSZXR1cm4gdGhlIGFkZHJlc3MgdG8gdXNlIGluIHRoZSBlbWFpbCAiUmVwbHktVG8iIGhlYWRlciwKKyAgICAgICAgICAgIGFzIGEgc3RyaW5nLiAgVGhlc2UgY2FuIGJlIGFuIFJGQyAyODIyIGVtYWlsIGFkZHJlc3MsIG9yCisgICAgICAgICAgICBOb25lIHRvIG9taXQgdGhlICJSZXBseS1UbyIgaGVhZGVyLgorICAgICAgICAgICAgZ2V0X3JlcGx5X3RvX3JlZmNoYW5nZSgpIGlzIHVzZWQgZm9yIHJlZmNoYW5nZSBlbWFpbHM7CisgICAgICAgICAgICBnZXRfcmVwbHlfdG9fY29tbWl0KCkgaXMgdXNlZCBmb3IgaW5kaXZpZHVhbCBjb21taXQKKyAgICAgICAgICAgIGVtYWlscy4KKworICAgICAgICBnZXRfcmVmX2ZpbHRlcl9yZWdleCgpCisKKyAgICAgICAgICAgIFJldHVybiBhIHR1cGxlIC0tIGEgY29tcGlsZWQgcmVnZXgsIGFuZCBhIGJvb2xlYW4gaW5kaWNhdGluZworICAgICAgICAgICAgd2hldGhlciB0aGUgcmVnZXggcGlja3MgcmVmcyB0byBpbmNsdWRlIChpZiBGYWxzZSwgdGhlIHJlZ2V4CisgICAgICAgICAgICBtYXRjaGVzIG9uIHJlZnMgdG8gZXhjbHVkZSkuCisKKyAgICAgICAgZ2V0X2RlZmF1bHRfcmVmX2lnbm9yZV9yZWdleCgpCisKKyAgICAgICAgICAgIFJldHVybiBhIHJlZ2V4IHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgZm9yIGJvdGggd2hhdCBlbWFpbHMKKyAgICAgICAgICAgIHRvIHNlbmQgYW5kIHdoZW4gY29tcHV0aW5nIHdoYXQgY29tbWl0cyBhcmUgY29uc2lkZXJlZCBuZXcKKyAgICAgICAgICAgIHRvIHRoZSByZXBvc2l0b3J5LiAgRGVmYXVsdCBpcyAiXnJlZnMvbm90ZXMvIi4KKworICAgICAgICBnZXRfbWF4X3N1YmplY3RfbGVuZ3RoKCkKKworICAgICAgICAgICAgUmV0dXJuIGFuIGludCBnaXZpbmcgdGhlIG1heGltYWwgbGVuZ3RoIGZvciB0aGUgc3ViamVjdAorICAgICAgICAgICAgKGdpdCBsb2cgLS1vbmVsaW5lKS4KKworICAgIFRoZXkgc2hvdWxkIGFsc28gZGVmaW5lIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworICAgICAgICBhbm5vdW5jZV9zaG93X3Nob3J0bG9nIChib29sKQorCisgICAgICAgICAgICBUcnVlIGlmZiBhbm5vdW5jZSBlbWFpbHMgc2hvdWxkIGluY2x1ZGUgYSBzaG9ydGxvZy4KKworICAgICAgICBjb21taXRfZW1haWxfZm9ybWF0IChzdHJpbmcpCisKKyAgICAgICAgICAgIElmICJodG1sIiwgZ2VuZXJhdGUgY29tbWl0IGVtYWlscyBpbiBIVE1MIGluc3RlYWQgb2YgcGxhaW4gdGV4dAorICAgICAgICAgICAgdXNlZCBieSBkZWZhdWx0LgorCisgICAgICAgIGh0bWxfaW5faW50cm8gKGJvb2wpCisgICAgICAgIGh0bWxfaW5fZm9vdGVyIChib29sKQorCisgICAgICAgICAgICBXaGVuIGdlbmVyYXRpbmcgSFRNTCBlbWFpbHMsIHRoZSBpbnRyb2R1Y3Rpb24gKHJlc3BlY3RpdmVseSwKKyAgICAgICAgICAgIHRoZSBmb290ZXIpIHdpbGwgYmUgSFRNTC1lc2NhcGVkIGlmZiBodG1sX2luX2ludHJvIChyZXNwZWN0aXZlbHksCisgICAgICAgICAgICB0aGUgZm9vdGVyKSBpcyB0cnVlLiBXaGVuIGZhbHNlLCBvbmx5IHRoZSB2YWx1ZXMgdXNlZCB0byBleHBhbmQKKyAgICAgICAgICAgIHRoZSB0ZW1wbGF0ZSBhcmUgZXNjYXBlZC4KKworICAgICAgICByZWZjaGFuZ2Vfc2hvd2dyYXBoIChib29sKQorCisgICAgICAgICAgICBUcnVlIGlmZiByZWZjaGFuZ2VzIGVtYWlscyBzaG91bGQgaW5jbHVkZSBhIGRldGFpbGVkIGdyYXBoLgorCisgICAgICAgIHJlZmNoYW5nZV9zaG93bG9nIChib29sKQorCisgICAgICAgICAgICBUcnVlIGlmZiByZWZjaGFuZ2VzIGVtYWlscyBzaG91bGQgaW5jbHVkZSBhIGRldGFpbGVkIGxvZy4KKworICAgICAgICBkaWZmb3B0cyAobGlzdCBvZiBzdHJpbmdzKQorCisgICAgICAgICAgICBUaGUgb3B0aW9ucyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gJ2dpdCBkaWZmJyBmb3IgdGhlCisgICAgICAgICAgICBzdW1tYXJ5IGVtYWlsLiAgVGhlIHZhbHVlIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3RyaW5ncworICAgICAgICAgICAgcmVwcmVzZW50aW5nIHdvcmRzIHRvIGJlIHBhc3NlZCB0byB0aGUgY29tbWFuZC4KKworICAgICAgICBncmFwaG9wdHMgKGxpc3Qgb2Ygc3RyaW5ncykKKworICAgICAgICAgICAgQW5hbG9nb3VzIHRvIGRpZmZvcHRzLCBidXQgY29udGFpbnMgb3B0aW9ucyBwYXNzZWQgdG8KKyAgICAgICAgICAgICdnaXQgbG9nIC0tZ3JhcGgnIHdoZW4gZ2VuZXJhdGluZyB0aGUgZGV0YWlsZWQgZ3JhcGggZm9yCisgICAgICAgICAgICBhIHNldCBvZiBjb21taXRzIChzZWUgcmVmY2hhbmdlX3Nob3dncmFwaCkKKworICAgICAgICBsb2dvcHRzIChsaXN0IG9mIHN0cmluZ3MpCisKKyAgICAgICAgICAgIEFuYWxvZ291cyB0byBkaWZmb3B0cywgYnV0IGNvbnRhaW5zIG9wdGlvbnMgcGFzc2VkIHRvCisgICAgICAgICAgICAnZ2l0IGxvZycgd2hlbiBnZW5lcmF0aW5nIHRoZSBkZXRhaWxlZCBsb2cgZm9yIGEgc2V0IG9mCisgICAgICAgICAgICBjb21taXRzIChzZWUgcmVmY2hhbmdlX3Nob3dsb2cpCisKKyAgICAgICAgY29tbWl0bG9nb3B0cyAobGlzdCBvZiBzdHJpbmdzKQorCisgICAgICAgICAgICBUaGUgb3B0aW9ucyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gJ2dpdCBsb2cnIGZvciBlYWNoCisgICAgICAgICAgICBjb21taXQgbWFpbC4gIFRoZSB2YWx1ZSBzaG91bGQgYmUgYSBsaXN0IG9mIHN0cmluZ3MKKyAgICAgICAgICAgIHJlcHJlc2VudGluZyB3b3JkcyB0byBiZSBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuCisKKyAgICAgICAgZGF0ZV9zdWJzdGl0dXRlIChzdHJpbmcpCisKKyAgICAgICAgICAgIFN0cmluZyB0byBiZSB1c2VkIGluIHN1YnN0aXR1dGlvbiBmb3IgJ0RhdGU6JyBhdCBzdGFydCBvZgorICAgICAgICAgICAgbGluZSBpbiB0aGUgb3V0cHV0IG9mICdnaXQgbG9nJy4KKworICAgICAgICBxdWlldCAoYm9vbCkKKyAgICAgICAgICAgIE9uIHN1Y2Nlc3MgZG8gbm90IHdyaXRlIHRvIHN0ZGVycgorCisgICAgICAgIHN0ZG91dCAoYm9vbCkKKyAgICAgICAgICAgIFdyaXRlIGVtYWlsIHRvIHN0ZG91dCByYXRoZXIgdGhhbiBlbWFpbGluZy4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcKKworICAgICAgICBjb21iaW5lX3doZW5fc2luZ2xlX2NvbW1pdCAoYm9vbCkKKworICAgICAgICAgICAgVHJ1ZSBpZiBhIGNvbWJpbmVkIGVtYWlsIHNob3VsZCBiZSBwcm9kdWNlZCB3aGVuIGEgc2luZ2xlCisgICAgICAgICAgICBuZXcgY29tbWl0IGlzIHB1c2hlZCB0byBhIGJyYW5jaCwgRmFsc2Ugb3RoZXJ3aXNlLgorCisgICAgICAgIGZyb21fcmVmY2hhbmdlLCBmcm9tX2NvbW1pdCAoc3RyaW5ncykKKworICAgICAgICAgICAgQWRkcmVzc2VzIHRvIHVzZSBmb3IgdGhlIEZyb206IGZpZWxkIGZvciByZWZjaGFuZ2UgZW1haWxzCisgICAgICAgICAgICBhbmQgY29tbWl0IGVtYWlscyByZXNwZWN0aXZlbHkuICBTZXQgZnJvbQorICAgICAgICAgICAgbXVsdGltYWlsaG9vay5mcm9tUmVmY2hhbmdlIGFuZCBtdWx0aW1haWxob29rLmZyb21Db21taXQKKyAgICAgICAgICAgIGJ5IENvbmZpZ0Vudmlyb25tZW50TWl4aW4uCisKKyAgICAgICAgbG9nX2ZpbGUsIGVycm9yX2xvZ19maWxlLCBkZWJ1Z19sb2dfZmlsZSAoc3RyaW5nKQorCisgICAgICAgICAgICBOYW1lIG9mIGEgZmlsZSB0byB3aGljaCBsb2dzIHNob3VsZCBiZSBzZW50LgorCisgICAgICAgIHZlcmJvc2UgKGludCkKKworICAgICAgICAgICAgSG93IHZlcmJvc2UgdGhlIHN5c3RlbSBzaG91bGQgYmUuCisgICAgICAgICAgICAtIDAgKGRlZmF1bHQpOiBzaG93IGluZm8sIGVycm9ycywgLi4uCisgICAgICAgICAgICAtIDEgOiBzaG93IGJhc2ljIGRlYnVnIGluZm8KKyAgICAiIiIKKworICAgIFJFUE9fTkFNRV9SRSA9IHJlLmNvbXBpbGUocideKD9QPG5hbWU+Lis/KSg/OlwuZ2l0KSQnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zZW52PU5vbmUpOgorICAgICAgICBzZWxmLm9zZW52ID0gb3NlbnYgb3Igb3MuZW52aXJvbgorICAgICAgICBzZWxmLmFubm91bmNlX3Nob3dfc2hvcnRsb2cgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbW1pdF9lbWFpbF9mb3JtYXQgPSAidGV4dCIKKyAgICAgICAgc2VsZi5odG1sX2luX2ludHJvID0gRmFsc2UKKyAgICAgICAgc2VsZi5odG1sX2luX2Zvb3RlciA9IEZhbHNlCisgICAgICAgIHNlbGYuY29tbWl0QnJvd3NlVVJMID0gTm9uZQorICAgICAgICBzZWxmLm1heGNvbW1pdGVtYWlscyA9IDUwMAorICAgICAgICBzZWxmLmV4Y2x1ZGVtZXJnZXJldmlzaW9ucyA9IEZhbHNlCisgICAgICAgIHNlbGYuZGlmZm9wdHMgPSBbJy0tc3RhdCcsICctLXN1bW1hcnknLCAnLS1maW5kLWNvcGllcy1oYXJkZXInXQorICAgICAgICBzZWxmLmdyYXBob3B0cyA9IFsnLS1vbmVsaW5lJywgJy0tZGVjb3JhdGUnXQorICAgICAgICBzZWxmLmxvZ29wdHMgPSBbXQorICAgICAgICBzZWxmLnJlZmNoYW5nZV9zaG93Z3JhcGggPSBGYWxzZQorICAgICAgICBzZWxmLnJlZmNoYW5nZV9zaG93bG9nID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb21taXRsb2dvcHRzID0gWyctQycsICctLXN0YXQnLCAnLXAnLCAnLS1jYyddCisgICAgICAgIHNlbGYuZGF0ZV9zdWJzdGl0dXRlID0gJ0F1dGhvckRhdGU6ICcKKyAgICAgICAgc2VsZi5xdWlldCA9IEZhbHNlCisgICAgICAgIHNlbGYuc3Rkb3V0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb21iaW5lX3doZW5fc2luZ2xlX2NvbW1pdCA9IFRydWUKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBOb25lCisKKyAgICAgICAgc2VsZi5DT01QVVRFRF9LRVlTID0gWworICAgICAgICAgICAgJ2FkbWluaXN0cmF0b3InLAorICAgICAgICAgICAgJ2NoYXJzZXQnLAorICAgICAgICAgICAgJ2VtYWlscHJlZml4JywKKyAgICAgICAgICAgICdwdXNoZXInLAorICAgICAgICAgICAgJ3B1c2hlcl9lbWFpbCcsCisgICAgICAgICAgICAncmVwb19wYXRoJywKKyAgICAgICAgICAgICdyZXBvX3Nob3J0bmFtZScsCisgICAgICAgICAgICAnc2VuZGVyJywKKyAgICAgICAgICAgIF0KKworICAgICAgICBzZWxmLl92YWx1ZXMgPSBOb25lCisKKyAgICBkZWYgZ2V0X2xvZ2dlcihzZWxmKToKKyAgICAgICAgIiIiR2V0IChwb3NzaWJseSBjcmVhdGVzKSB0aGUgbG9nZ2VyIGFzc29jaWF0ZWQgdG8gdGhpcyBlbnZpcm9ubWVudC4iIiIKKyAgICAgICAgaWYgc2VsZi5sb2dnZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyID0gTG9nZ2VyKHNlbGYpCisgICAgICAgIHJldHVybiBzZWxmLmxvZ2dlcgorCisgICAgZGVmIGdldF9yZXBvX3Nob3J0bmFtZShzZWxmKToKKyAgICAgICAgIiIiVXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhlIHJlcG8gcGF0aCwgd2l0aCAiLmdpdCIgc3RyaXBwZWQgb2ZmIGlmIHByZXNlbnQuIiIiCisKKyAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguYWJzcGF0aChzZWxmLmdldF9yZXBvX3BhdGgoKSkpCisgICAgICAgIG0gPSBzZWxmLlJFUE9fTkFNRV9SRS5tYXRjaChiYXNlbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKCduYW1lJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZQorCisgICAgZGVmIGdldF9wdXNoZXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGdldF9wdXNoZXJfZW1haWwoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2Zyb21hZGRyKHNlbGYsIGNoYW5nZT1Ob25lKToKKyAgICAgICAgY29uZmlnID0gQ29uZmlnKCd1c2VyJykKKyAgICAgICAgZnJvbW5hbWUgPSBjb25maWcuZ2V0KCduYW1lJywgZGVmYXVsdD0nJykKKyAgICAgICAgZnJvbWVtYWlsID0gY29uZmlnLmdldCgnZW1haWwnLCBkZWZhdWx0PScnKQorICAgICAgICBpZiBmcm9tZW1haWw6CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0YWRkcihbZnJvbW5hbWUsIGZyb21lbWFpbF0pCisgICAgICAgIHJldHVybiBzZWxmLmdldF9zZW5kZXIoKQorCisgICAgZGVmIGdldF9hZG1pbmlzdHJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3RoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcmVwb3NpdG9yeScKKworICAgIGRlZiBnZXRfZW1haWxwcmVmaXgoc2VsZik6CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIGdldF9yZXBvX3BhdGgoc2VsZik6CisgICAgICAgIGlmIHJlYWRfZ2l0X291dHB1dChbJ3Jldi1wYXJzZScsICctLWlzLWJhcmUtcmVwb3NpdG9yeSddKSA9PSAndHJ1ZSc6CisgICAgICAgICAgICBwYXRoID0gZ2V0X2dpdF9kaXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0aCA9IHJlYWRfZ2l0X291dHB1dChbJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwnXSkKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChwYXRoKQorCisgICAgZGVmIGdldF9jaGFyc2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gQ0hBUlNFVAorCisgICAgZGVmIGdldF92YWx1ZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGRpY3Rpb25hcnkge2tleXdvcmQ6IGV4cGFuc2lvbn0gZm9yIHRoaXMgRW52aXJvbm1lbnQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IENoYW5nZS5fY29tcHV0ZV92YWx1ZXMoKS4gIFRoZSBrZXlzCisgICAgICAgIGluIHRoZSByZXR1cm5lZCBkaWN0aW9uYXJ5IGFyZSBhdmFpbGFibGUgdG8gYmUgdXNlZCBpbiBhbnkgb2YKKyAgICAgICAgdGhlIHRlbXBsYXRlcy4gIFRoZSBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQgYnkgY2FsbGluZworICAgICAgICBzZWxmLmdldF9OQU1FKCkgZm9yIGVhY2ggb2YgdGhlIGF0dHJpYnV0ZXMgbmFtZWQgaW4KKyAgICAgICAgQ09NUFVURURfS0VZUyBhbmQgcmVjb3JkaW5nIHRob3NlIHRoYXQgZG8gbm90IHJldHVybiBOb25lLgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBhIG5ldyBkaWN0aW9uYXJ5LiIiIgorCisgICAgICAgIGlmIHNlbGYuX3ZhbHVlcyBpcyBOb25lOgorICAgICAgICAgICAgdmFsdWVzID0geycnOiAnJ30gICMgJSgpcyBleHBhbmRzIHRvIHRoZSBlbXB0eSBzdHJpbmcuCisKKyAgICAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5DT01QVVRFRF9LRVlTOgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihzZWxmLCAnZ2V0XyVzJyAlIChrZXksKSkoKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNba2V5XSA9IHZhbHVlCisKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlcyA9IHZhbHVlcworCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZXMuY29weSgpCisKKyAgICBkZWYgZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKHNlbGYsIHJlZmNoYW5nZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVjaXBpZW50cyBmb3Igbm90aWZpY2F0aW9ucyBhYm91dCByZWZjaGFuZ2UuCisKKyAgICAgICAgUmV0dXJuIHRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBub3RpZmljYXRpb25zCisgICAgICAgIGFib3V0IHRoZSBzcGVjaWZpZWQgUmVmZXJlbmNlQ2hhbmdlIHNob3VsZCBiZSBzZW50LiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGdldF9hbm5vdW5jZV9yZWNpcGllbnRzKHNlbGYsIGFubm90YXRlZF90YWdfY2hhbmdlKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWNpcGllbnRzIGZvciBub3RpZmljYXRpb25zIGFib3V0IGFubm90YXRlZF90YWdfY2hhbmdlLgorCisgICAgICAgIFJldHVybiB0aGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggbm90aWZpY2F0aW9ucworICAgICAgICBhYm91dCB0aGUgc3BlY2lmaWVkIEFubm90YXRlZFRhZ0NoYW5nZSBzaG91bGQgYmUgc2VudC4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBnZXRfcmVwbHlfdG9fcmVmY2hhbmdlKHNlbGYsIHJlZmNoYW5nZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdldF9wdXNoZXJfZW1haWwoKQorCisgICAgZGVmIGdldF9yZXZpc2lvbl9yZWNpcGllbnRzKHNlbGYsIHJldmlzaW9uKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWNpcGllbnRzIGZvciBtZXNzYWdlcyBhYm91dCByZXZpc2lvbi4KKworICAgICAgICBSZXR1cm4gdGhlIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzIHRvIHdoaWNoIG5vdGlmaWNhdGlvbnMKKyAgICAgICAgYWJvdXQgdGhlIHNwZWNpZmllZCBSZXZpc2lvbiBzaG91bGQgYmUgc2VudC4gIFRoaXMgbWV0aG9kCisgICAgICAgIGNvdWxkIGJlIG92ZXJyaWRkZW4sIGZvciBleGFtcGxlLCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUKKyAgICAgICAgY29udGVudHMgb2YgdGhlIHJldmlzaW9uIHdoZW4gZGVjaWRpbmcgd2hvbSB0byBub3RpZnkgYWJvdXQKKyAgICAgICAgaXQuICBGb3IgZXhhbXBsZSwgdGhlcmUgY291bGQgYmUgYSBzY2hlbWUgZm9yIHVzZXJzIHRvIGV4cHJlc3MKKyAgICAgICAgaW50ZXJlc3QgaW4gcGFydGljdWxhciBmaWxlcyBvciBzdWJkaXJlY3RvcmllcywgYW5kIG9ubHkKKyAgICAgICAgcmVjZWl2ZSBub3RpZmljYXRpb24gZW1haWxzIGZvciByZXZpc2lvbnMgdGhhdCBhZmZlY3RpbmcgdGhvc2UKKyAgICAgICAgZmlsZXMuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgZ2V0X3JlcGx5X3RvX2NvbW1pdChzZWxmLCByZXZpc2lvbik6CisgICAgICAgIHJldHVybiByZXZpc2lvbi5hdXRob3IKKworICAgIGRlZiBnZXRfZGVmYXVsdF9yZWZfaWdub3JlX3JlZ2V4KHNlbGYpOgorICAgICAgICAjIFRoZSBjb21taXQgbWVzc2FnZXMgb2YgZ2l0IG5vdGVzIGFyZSBlc3NlbnRpYWxseSBtZWFuaW5nbGVzcworICAgICAgICAjIGFuZCAiZmlsZW5hbWVzIiBpbiBnaXQgbm90ZXMgY29tbWl0cyBhcmUgYW4gaW1wbGVtZW50YXRpb25hbAorICAgICAgICAjIGRldGFpbCB0aGF0IG1pZ2h0IHN1cnByaXNlIHVzZXJzIGF0IGZpcnN0LiAgQXMgc3VjaCwgd2UKKyAgICAgICAgIyB3b3VsZCBuZWVkIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbWV0aG9kIGZvciBoYW5kbGluZyBlbWFpbHMKKyAgICAgICAgIyBvZiBnaXQgbm90ZXMgaW4gb3JkZXIgZm9yIHRoZW0gdG8gYmUgb2YgYmVuZWZpdCBmb3IgdXNlcnMsCisgICAgICAgICMgd2hpY2ggd2Ugc2ltcGx5IGRvIG5vdCBoYXZlIHJpZ2h0IG5vdy4KKyAgICAgICAgcmV0dXJuICJecmVmcy9ub3Rlcy8iCisKKyAgICBkZWYgZ2V0X21heF9zdWJqZWN0X2xlbmd0aChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBtYXhpbWFsIHN1YmplY3QgbGluZSAoZ2l0IGxvZyAtLW9uZWxpbmUpIGxlbmd0aC4KKyAgICAgICAgTG9uZ2VyIHN1YmplY3QgbGluZXMgd2lsbCBiZSB0cnVuY2F0ZWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGZpbHRlcl9ib2R5KHNlbGYsIGxpbmVzKToKKyAgICAgICAgIiIiRmlsdGVyIHRoZSBsaW5lcyBpbnRlbmRlZCBmb3IgYW4gZW1haWwgYm9keS4KKworICAgICAgICBsaW5lcyBpcyBhbiBpdGVyYWJsZSBvdmVyIHRoZSBsaW5lcyB0aGF0IHdvdWxkIGdvIGludG8gdGhlCisgICAgICAgIGVtYWlsIGJvZHkuICBGaWx0ZXIgaXQgKGUuZy4sIGxpbWl0IHRoZSBudW1iZXIgb2YgbGluZXMsIHRoZQorICAgICAgICBsaW5lIGxlbmd0aCwgY2hhcmFjdGVyIHNldCwgZXRjLiksIHJldHVybmluZyBhbm90aGVyIGl0ZXJhYmxlLgorICAgICAgICBTZWUgRmlsdGVyTGluZXNFbnZpcm9ubWVudE1peGluIGFuZCBNYXhsaW5lc0Vudmlyb25tZW50TWl4aW4KKyAgICAgICAgZm9yIGNsYXNzZXMgaW1wbGVtZW50aW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4iIiIKKworICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBsb2dfbXNnKHNlbGYsIG1zZyk6CisgICAgICAgICIiIldyaXRlIHRoZSBzdHJpbmcgbXNnIG9uIGEgbG9nIGZpbGUgb3Igb24gc3RkZXJyLgorCisgICAgICAgIFNlbmRzIHRoZSB0ZXh0IHRvIHN0ZGVyciBieSBkZWZhdWx0LCBvdmVycmlkZSB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yLiIiIgorICAgICAgICBzZWxmLmdldF9sb2dnZXIoKS5pbmZvKG1zZykKKworICAgIGRlZiBsb2dfd2FybmluZyhzZWxmLCBtc2cpOgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RyaW5nIG1zZyBvbiBhIGxvZyBmaWxlIG9yIG9uIHN0ZGVyci4KKworICAgICAgICBTZW5kcyB0aGUgdGV4dCB0byBzdGRlcnIgYnkgZGVmYXVsdCwgb3ZlcnJpZGUgdG8gY2hhbmdlIHRoZSBiZWhhdmlvci4iIiIKKyAgICAgICAgc2VsZi5nZXRfbG9nZ2VyKCkud2FybmluZyhtc2cpCisKKyAgICBkZWYgbG9nX2Vycm9yKHNlbGYsIG1zZyk6CisgICAgICAgICIiIldyaXRlIHRoZSBzdHJpbmcgbXNnIG9uIGEgbG9nIGZpbGUgb3Igb24gc3RkZXJyLgorCisgICAgICAgIFNlbmRzIHRoZSB0ZXh0IHRvIHN0ZGVyciBieSBkZWZhdWx0LCBvdmVycmlkZSB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yLiIiIgorICAgICAgICBzZWxmLmdldF9sb2dnZXIoKS5lcnJvcihtc2cpCisKKyAgICBkZWYgY2hlY2soc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBDb25maWdFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJBIG1peGluIHRoYXQgc2V0cyBzZWxmLmNvbmZpZyB0byBpdHMgY29uc3RydWN0b3IncyBjb25maWcgYXJndW1lbnQuCisKKyAgICBUaGlzIGNsYXNzJ3MgY29uc3RydWN0b3IgY29uc3VtZXMgdGhlICJjb25maWciIGFyZ3VtZW50LgorCisgICAgTWl4aW5zIHRoYXQgbmVlZCB0byBpbnNwZWN0IHRoZSBjb25maWcgc2hvdWxkIGluaGVyaXQgZnJvbSB0aGlzCisgICAgY2xhc3MgKDEpIHRvIG1ha2Ugc3VyZSB0aGF0ICJjb25maWciIGlzIHN0aWxsIGluIHRoZSBjb25zdHJ1Y3RvcgorICAgIGFyZ3VtZW50cyB3aXRoIGl0cyBvd24gY29uc3RydWN0b3IgcnVucyBhbmQvb3IgKDIpIHRvIGJlIHN1cmUgdGhhdAorICAgIHNlbGYuY29uZmlnIGlzIHNldCBhZnRlciBjb25zdHJ1Y3Rpb24uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCAqKmt3KToKKyAgICAgICAgc3VwZXIoQ29uZmlnRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKKworCitjbGFzcyBDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbihDb25maWdFbnZpcm9ubWVudE1peGluKToKKyAgICAiIiJBbiBFbnZpcm9ubWVudCB0aGF0IHJlYWRzIG1vc3Qgb2YgaXRzIGluZm9ybWF0aW9uIGZyb20gImdpdCBjb25maWciLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmb3JiaWRfZmllbGRfdmFsdWVzKG5hbWUsIHZhbHVlLCBmb3JiaWRkZW4pOgorICAgICAgICBmb3IgZm9yYmlkZGVuX3ZhbCBpbiBmb3JiaWRkZW46CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZSBhbmQgdmFsdWUubG93ZXIoKSA9PSBmb3JiaWRkZW46CisgICAgICAgICAgICAgICAgcmFpc2UgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgJyIlcyIgaXMgbm90IGFuIGFsbG93ZWQgc2V0dGluZyBmb3IgJXMnICUgKHZhbHVlLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCAqKmt3KToKKyAgICAgICAgc3VwZXIoQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgY29uZmlnPWNvbmZpZywgKiprdworICAgICAgICAgICAgKQorCisgICAgICAgIGZvciB2YXIsIGNmZyBpbiAoCisgICAgICAgICAgICAgICAgKCdhbm5vdW5jZV9zaG93X3Nob3J0bG9nJywgJ2Fubm91bmNlc2hvcnRsb2cnKSwKKyAgICAgICAgICAgICAgICAoJ3JlZmNoYW5nZV9zaG93Z3JhcGgnLCAncmVmY2hhbmdlU2hvd0dyYXBoJyksCisgICAgICAgICAgICAgICAgKCdyZWZjaGFuZ2Vfc2hvd2xvZycsICdyZWZjaGFuZ2VzaG93bG9nJyksCisgICAgICAgICAgICAgICAgKCdxdWlldCcsICdxdWlldCcpLAorICAgICAgICAgICAgICAgICgnc3Rkb3V0JywgJ3N0ZG91dCcpLAorICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICB2YWwgPSBjb25maWcuZ2V0X2Jvb2woY2ZnKQorICAgICAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgdmFyLCB2YWwpCisKKyAgICAgICAgY29tbWl0X2VtYWlsX2Zvcm1hdCA9IGNvbmZpZy5nZXQoJ2NvbW1pdEVtYWlsRm9ybWF0JykKKyAgICAgICAgaWYgY29tbWl0X2VtYWlsX2Zvcm1hdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGNvbW1pdF9lbWFpbF9mb3JtYXQgIT0gImh0bWwiIGFuZCBjb21taXRfZW1haWxfZm9ybWF0ICE9ICJ0ZXh0IjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ193YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAnKioqIFVua25vd24gdmFsdWUgZm9yIG11bHRpbWFpbGhvb2suY29tbWl0RW1haWxGb3JtYXQ6ICVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0X2VtYWlsX2Zvcm1hdCArCisgICAgICAgICAgICAgICAgICAgICcqKiogRXhwZWN0ZWQgZWl0aGVyICJ0ZXh0IiBvciAiaHRtbCIuICBJZ25vcmluZy5cbicKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdF9lbWFpbF9mb3JtYXQgPSBjb21taXRfZW1haWxfZm9ybWF0CisKKyAgICAgICAgaHRtbF9pbl9pbnRybyA9IGNvbmZpZy5nZXRfYm9vbCgnaHRtbEluSW50cm8nKQorICAgICAgICBpZiBodG1sX2luX2ludHJvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5odG1sX2luX2ludHJvID0gaHRtbF9pbl9pbnRybworCisgICAgICAgIGh0bWxfaW5fZm9vdGVyID0gY29uZmlnLmdldF9ib29sKCdodG1sSW5Gb290ZXInKQorICAgICAgICBpZiBodG1sX2luX2Zvb3RlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaHRtbF9pbl9mb290ZXIgPSBodG1sX2luX2Zvb3RlcgorCisgICAgICAgIHNlbGYuY29tbWl0QnJvd3NlVVJMID0gY29uZmlnLmdldCgnY29tbWl0QnJvd3NlVVJMJykKKworICAgICAgICBzZWxmLmV4Y2x1ZGVtZXJnZXJldmlzaW9ucyA9IGNvbmZpZy5nZXQoJ2V4Y2x1ZGVNZXJnZVJldmlzaW9ucycpCisKKyAgICAgICAgbWF4Y29tbWl0ZW1haWxzID0gY29uZmlnLmdldCgnbWF4Y29tbWl0ZW1haWxzJykKKyAgICAgICAgaWYgbWF4Y29tbWl0ZW1haWxzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubWF4Y29tbWl0ZW1haWxzID0gaW50KG1heGNvbW1pdGVtYWlscykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYubG9nX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICcqKiogTWFsZm9ybWVkIHZhbHVlIGZvciBtdWx0aW1haWxob29rLm1heENvbW1pdEVtYWlsczogJXNcbicKKyAgICAgICAgICAgICAgICAgICAgJSBtYXhjb21taXRlbWFpbHMgKworICAgICAgICAgICAgICAgICAgICAnKioqIEV4cGVjdGVkIGEgbnVtYmVyLiAgSWdub3JpbmcuXG4nCisgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBkaWZmb3B0cyA9IGNvbmZpZy5nZXQoJ2RpZmZvcHRzJykKKyAgICAgICAgaWYgZGlmZm9wdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRpZmZvcHRzID0gc2hsZXguc3BsaXQoZGlmZm9wdHMpCisKKyAgICAgICAgZ3JhcGhvcHRzID0gY29uZmlnLmdldCgnZ3JhcGhPcHRzJykKKyAgICAgICAgaWYgZ3JhcGhvcHRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5ncmFwaG9wdHMgPSBzaGxleC5zcGxpdChncmFwaG9wdHMpCisKKyAgICAgICAgbG9nb3B0cyA9IGNvbmZpZy5nZXQoJ2xvZ29wdHMnKQorICAgICAgICBpZiBsb2dvcHRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5sb2dvcHRzID0gc2hsZXguc3BsaXQobG9nb3B0cykKKworICAgICAgICBjb21taXRsb2dvcHRzID0gY29uZmlnLmdldCgnY29tbWl0bG9nb3B0cycpCisgICAgICAgIGlmIGNvbW1pdGxvZ29wdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNvbW1pdGxvZ29wdHMgPSBzaGxleC5zcGxpdChjb21taXRsb2dvcHRzKQorCisgICAgICAgIGRhdGVfc3Vic3RpdHV0ZSA9IGNvbmZpZy5nZXQoJ2RhdGVTdWJzdGl0dXRlJykKKyAgICAgICAgaWYgZGF0ZV9zdWJzdGl0dXRlID09ICdub25lJzoKKyAgICAgICAgICAgIHNlbGYuZGF0ZV9zdWJzdGl0dXRlID0gTm9uZQorICAgICAgICBlbGlmIGRhdGVfc3Vic3RpdHV0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGF0ZV9zdWJzdGl0dXRlID0gZGF0ZV9zdWJzdGl0dXRlCisKKyAgICAgICAgcmVwbHlfdG8gPSBjb25maWcuZ2V0KCdyZXBseVRvJykKKyAgICAgICAgc2VsZi5fX3JlcGx5X3RvX3JlZmNoYW5nZSA9IGNvbmZpZy5nZXQoJ3JlcGx5VG9SZWZjaGFuZ2UnLCBkZWZhdWx0PXJlcGx5X3RvKQorICAgICAgICBzZWxmLmZvcmJpZF9maWVsZF92YWx1ZXMoJ3JlcGx5VG9SZWZjaGFuZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3JlcGx5X3RvX3JlZmNoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYXV0aG9yJ10pCisgICAgICAgIHNlbGYuX19yZXBseV90b19jb21taXQgPSBjb25maWcuZ2V0KCdyZXBseVRvQ29tbWl0JywgZGVmYXVsdD1yZXBseV90bykKKworICAgICAgICBzZWxmLmZyb21fcmVmY2hhbmdlID0gY29uZmlnLmdldCgnZnJvbVJlZmNoYW5nZScpCisgICAgICAgIHNlbGYuZm9yYmlkX2ZpZWxkX3ZhbHVlcygnZnJvbVJlZmNoYW5nZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZyb21fcmVmY2hhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydhdXRob3InLCAnbm9uZSddKQorICAgICAgICBzZWxmLmZyb21fY29tbWl0ID0gY29uZmlnLmdldCgnZnJvbUNvbW1pdCcpCisgICAgICAgIHNlbGYuZm9yYmlkX2ZpZWxkX3ZhbHVlcygnZnJvbUNvbW1pdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZyb21fY29tbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydub25lJ10pCisKKyAgICAgICAgY29tYmluZSA9IGNvbmZpZy5nZXRfYm9vbCgnY29tYmluZVdoZW5TaW5nbGVDb21taXQnKQorICAgICAgICBpZiBjb21iaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jb21iaW5lX3doZW5fc2luZ2xlX2NvbW1pdCA9IGNvbWJpbmUKKworICAgICAgICBzZWxmLmxvZ19maWxlID0gY29uZmlnLmdldCgnbG9nRmlsZScsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgc2VsZi5lcnJvcl9sb2dfZmlsZSA9IGNvbmZpZy5nZXQoJ2Vycm9yTG9nRmlsZScsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgc2VsZi5kZWJ1Z19sb2dfZmlsZSA9IGNvbmZpZy5nZXQoJ2RlYnVnTG9nRmlsZScsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgaWYgY29uZmlnLmdldF9ib29sKCdWZXJib3NlJywgZGVmYXVsdD1GYWxzZSk6CisgICAgICAgICAgICBzZWxmLnZlcmJvc2UgPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnZlcmJvc2UgPSAwCisKKyAgICBkZWYgZ2V0X2FkbWluaXN0cmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICBzZWxmLmNvbmZpZy5nZXQoJ2FkbWluaXN0cmF0b3InKSBvcgorICAgICAgICAgICAgc2VsZi5nZXRfc2VuZGVyKCkgb3IKKyAgICAgICAgICAgIHN1cGVyKENvbmZpZ09wdGlvbnNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5nZXRfYWRtaW5pc3RyYXRvcigpCisgICAgICAgICAgICApCisKKyAgICBkZWYgZ2V0X3JlcG9fc2hvcnRuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgc2VsZi5jb25maWcuZ2V0KCdyZXBvbmFtZScpIG9yCisgICAgICAgICAgICBzdXBlcihDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X3JlcG9fc2hvcnRuYW1lKCkKKyAgICAgICAgICAgICkKKworICAgIGRlZiBnZXRfZW1haWxwcmVmaXgoc2VsZik6CisgICAgICAgIGVtYWlscHJlZml4ID0gc2VsZi5jb25maWcuZ2V0KCdlbWFpbHByZWZpeCcpCisgICAgICAgIGlmIGVtYWlscHJlZml4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW1haWxwcmVmaXggPSBlbWFpbHByZWZpeC5zdHJpcCgpCisgICAgICAgICAgICBpZiBlbWFpbHByZWZpeDoKKyAgICAgICAgICAgICAgICBlbWFpbHByZWZpeCArPSAnICcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVtYWlscHJlZml4ID0gJ1slKHJlcG9fc2hvcnRuYW1lKXNdICcKKyAgICAgICAgc2hvcnRfbmFtZSA9IHNlbGYuZ2V0X3JlcG9fc2hvcnRuYW1lKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGVtYWlscHJlZml4ICUgeydyZXBvX3Nob3J0bmFtZSc6IHNob3J0X25hbWV9CisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZ2V0X2xvZ2dlcigpLmVycm9yKAorICAgICAgICAgICAgICAgICcqKiogSW52YWxpZCBtdWx0aW1haWxob29rLmVtYWlsUHJlZml4OiAlc1xuJyAlIGVtYWlscHJlZml4ICsKKyAgICAgICAgICAgICAgICAnKioqICVzXG4nICUgc3lzLmV4Y19pbmZvKClbMV0gKworICAgICAgICAgICAgICAgICIqKiogT25seSB0aGUgJyUocmVwb19zaG9ydG5hbWUpcycgcGxhY2Vob2xkZXIgaXMgYWxsb3dlZFxuIgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJyIlcyIgaXMgbm90IGFuIGFsbG93ZWQgc2V0dGluZyBmb3IgZW1haWxQcmVmaXgnICUgZW1haWxwcmVmaXgKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgZ2V0X3NlbmRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLmdldCgnZW52ZWxvcGVzZW5kZXInKQorCisgICAgZGVmIHByb2Nlc3NfYWRkcihzZWxmLCBhZGRyLCBjaGFuZ2UpOgorICAgICAgICBpZiBhZGRyLmxvd2VyKCkgPT0gJ2F1dGhvcic6CisgICAgICAgICAgICBpZiBoYXNhdHRyKGNoYW5nZSwgJ2F1dGhvcicpOgorICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2UuYXV0aG9yCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsaWYgYWRkci5sb3dlcigpID09ICdwdXNoZXInOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3B1c2hlcl9lbWFpbCgpCisgICAgICAgIGVsaWYgYWRkci5sb3dlcigpID09ICdub25lJzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gYWRkcgorCisgICAgZGVmIGdldF9mcm9tYWRkcihzZWxmLCBjaGFuZ2U9Tm9uZSk6CisgICAgICAgIGZyb21hZGRyID0gc2VsZi5jb25maWcuZ2V0KCdmcm9tJykKKyAgICAgICAgaWYgY2hhbmdlOgorICAgICAgICAgICAgc3BlY2lmaWNfZnJvbWFkZHIgPSBjaGFuZ2UuZ2V0X3NwZWNpZmljX2Zyb21hZGRyKCkKKyAgICAgICAgICAgIGlmIHNwZWNpZmljX2Zyb21hZGRyOgorICAgICAgICAgICAgICAgIGZyb21hZGRyID0gc3BlY2lmaWNfZnJvbWFkZHIKKyAgICAgICAgaWYgZnJvbWFkZHI6CisgICAgICAgICAgICBmcm9tYWRkciA9IHNlbGYucHJvY2Vzc19hZGRyKGZyb21hZGRyLCBjaGFuZ2UpCisgICAgICAgIGlmIGZyb21hZGRyOgorICAgICAgICAgICAgcmV0dXJuIGZyb21hZGRyCisgICAgICAgIHJldHVybiBzdXBlcihDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X2Zyb21hZGRyKGNoYW5nZSkKKworICAgIGRlZiBnZXRfcmVwbHlfdG9fcmVmY2hhbmdlKHNlbGYsIHJlZmNoYW5nZSk6CisgICAgICAgIGlmIHNlbGYuX19yZXBseV90b19yZWZjaGFuZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X3JlcGx5X3RvX3JlZmNoYW5nZShyZWZjaGFuZ2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2FkZHIoc2VsZi5fX3JlcGx5X3RvX3JlZmNoYW5nZSwgcmVmY2hhbmdlKQorCisgICAgZGVmIGdldF9yZXBseV90b19jb21taXQoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICBpZiBzZWxmLl9fcmVwbHlfdG9fY29tbWl0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmdldF9yZXBseV90b19jb21taXQocmV2aXNpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2FkZHIoc2VsZi5fX3JlcGx5X3RvX2NvbW1pdCwgcmV2aXNpb24pCisKKyAgICBkZWYgZ2V0X3NjYW5jb21taXRmb3JjYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLmdldCgnc2NhbmNvbW1pdGZvcmNjJykKKworCitjbGFzcyBGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgICIiIkhhbmRsZSBlbmNvZGluZyBhbmQgbWF4aW11bSBsaW5lIGxlbmd0aCBvZiBib2R5IGxpbmVzLgorCisgICAgICAgIGVtYWlsX21heF9saW5lX2xlbmd0aCAoaW50IG9yIE5vbmUpCisKKyAgICAgICAgICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbnkgc2luZ2xlIGxpbmUgaW4gdGhlIGVtYWlsIGJvZHkuCisgICAgICAgICAgICBMb25nZXIgbGluZXMgYXJlIHRydW5jYXRlZCBhdCB0aGF0IGxlbmd0aCB3aXRoICcgWy4uLl0nCisgICAgICAgICAgICBhcHBlbmRlZC4KKworICAgICAgICBzdHJpY3RfdXRmOCAoYm9vbCkKKworICAgICAgICAgICAgSWYgdGhpcyBmaWVsZCBpcyBzZXQgdG8gVHJ1ZSwgdGhlbiB0aGUgZW1haWwgYm9keSB0ZXh0IGlzCisgICAgICAgICAgICBleHBlY3RlZCB0byBiZSBVVEYtOC4gIEFueSBpbnZhbGlkIGNoYXJhY3RlcnMgYXJlCisgICAgICAgICAgICBjb252ZXJ0ZWQgdG8gVStGRkZELCB0aGUgVW5pY29kZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIKKyAgICAgICAgICAgIChlbmNvZGVkIGFzIFVURi04LCBvZiBjb3Vyc2UpLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyaWN0X3V0Zjg9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgZW1haWxfbWF4X2xpbmVfbGVuZ3RoPTUwMCwgbWF4X3N1YmplY3RfbGVuZ3RoPTUwMCwKKyAgICAgICAgICAgICAgICAgKiprdyk6CisgICAgICAgIHN1cGVyKEZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5fX3N0cmljdF91dGY4ID0gc3RyaWN0X3V0ZjgKKyAgICAgICAgc2VsZi5fX2VtYWlsX21heF9saW5lX2xlbmd0aCA9IGVtYWlsX21heF9saW5lX2xlbmd0aAorICAgICAgICBzZWxmLl9fbWF4X3N1YmplY3RfbGVuZ3RoID0gbWF4X3N1YmplY3RfbGVuZ3RoCisKKyAgICBkZWYgZmlsdGVyX2JvZHkoc2VsZiwgbGluZXMpOgorICAgICAgICBsaW5lcyA9IHN1cGVyKEZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZmlsdGVyX2JvZHkobGluZXMpCisgICAgICAgIGlmIHNlbGYuX19zdHJpY3RfdXRmODoKKyAgICAgICAgICAgIGlmIG5vdCBQWVRIT04zOgorICAgICAgICAgICAgICAgIGxpbmVzID0gKGxpbmUuZGVjb2RlKEVOQ09ESU5HLCAncmVwbGFjZScpIGZvciBsaW5lIGluIGxpbmVzKQorICAgICAgICAgICAgIyBMaW1pdCB0aGUgbGluZSBsZW5ndGggaW4gVW5pY29kZS1zcGFjZSB0byBhdm9pZAorICAgICAgICAgICAgIyBzcGxpdHRpbmcgY2hhcmFjdGVyczoKKyAgICAgICAgICAgIGlmIHNlbGYuX19lbWFpbF9tYXhfbGluZV9sZW5ndGggPiAwOgorICAgICAgICAgICAgICAgIGxpbmVzID0gbGltaXRfbGluZWxlbmd0aChsaW5lcywgc2VsZi5fX2VtYWlsX21heF9saW5lX2xlbmd0aCkKKyAgICAgICAgICAgIGlmIG5vdCBQWVRIT04zOgorICAgICAgICAgICAgICAgIGxpbmVzID0gKGxpbmUuZW5jb2RlKEVOQ09ESU5HLCAncmVwbGFjZScpIGZvciBsaW5lIGluIGxpbmVzKQorICAgICAgICBlbGlmIHNlbGYuX19lbWFpbF9tYXhfbGluZV9sZW5ndGg6CisgICAgICAgICAgICBsaW5lcyA9IGxpbWl0X2xpbmVsZW5ndGgobGluZXMsIHNlbGYuX19lbWFpbF9tYXhfbGluZV9sZW5ndGgpCisKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgZ2V0X21heF9zdWJqZWN0X2xlbmd0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19tYXhfc3ViamVjdF9sZW5ndGgKKworCitjbGFzcyBDb25maWdGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4oCisgICAgICAgIENvbmZpZ0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIEZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgKToKKyAgICAiIiJIYW5kbGUgZW5jb2RpbmcgYW5kIG1heGltdW0gbGluZSBsZW5ndGggYmFzZWQgb24gY29uZmlnLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIHN0cmljdF91dGY4ID0gY29uZmlnLmdldF9ib29sKCdlbWFpbHN0cmljdHV0ZjgnLCBkZWZhdWx0PU5vbmUpCisgICAgICAgIGlmIHN0cmljdF91dGY4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dbJ3N0cmljdF91dGY4J10gPSBzdHJpY3RfdXRmOAorCisgICAgICAgIGVtYWlsX21heF9saW5lX2xlbmd0aCA9IGNvbmZpZy5nZXQoJ2VtYWlsbWF4bGluZWxlbmd0aCcpCisgICAgICAgIGlmIGVtYWlsX21heF9saW5lX2xlbmd0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3WydlbWFpbF9tYXhfbGluZV9sZW5ndGgnXSA9IGludChlbWFpbF9tYXhfbGluZV9sZW5ndGgpCisKKyAgICAgICAgbWF4X3N1YmplY3RfbGVuZ3RoID0gY29uZmlnLmdldCgnc3ViamVjdE1heExlbmd0aCcsIGRlZmF1bHQ9ZW1haWxfbWF4X2xpbmVfbGVuZ3RoKQorICAgICAgICBpZiBtYXhfc3ViamVjdF9sZW5ndGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd1snbWF4X3N1YmplY3RfbGVuZ3RoJ10gPSBpbnQobWF4X3N1YmplY3RfbGVuZ3RoKQorCisgICAgICAgIHN1cGVyKENvbmZpZ0ZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBjb25maWc9Y29uZmlnLCAqKmt3CisgICAgICAgICAgICApCisKKworY2xhc3MgTWF4bGluZXNFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJMaW1pdCB0aGUgZW1haWwgYm9keSB0byBhIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW1haWxtYXhsaW5lcywgKiprdyk6CisgICAgICAgIHN1cGVyKE1heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5fX2VtYWlsbWF4bGluZXMgPSBlbWFpbG1heGxpbmVzCisKKyAgICBkZWYgZmlsdGVyX2JvZHkoc2VsZiwgbGluZXMpOgorICAgICAgICBsaW5lcyA9IHN1cGVyKE1heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZmlsdGVyX2JvZHkobGluZXMpCisgICAgICAgIGlmIHNlbGYuX19lbWFpbG1heGxpbmVzID4gMDoKKyAgICAgICAgICAgIGxpbmVzID0gbGltaXRfbGluZXMobGluZXMsIHNlbGYuX19lbWFpbG1heGxpbmVzKQorICAgICAgICByZXR1cm4gbGluZXMKKworCitjbGFzcyBDb25maWdNYXhsaW5lc0Vudmlyb25tZW50TWl4aW4oCisgICAgICAgIENvbmZpZ0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIE1heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgKToKKyAgICAiIiJMaW1pdCB0aGUgZW1haWwgYm9keSB0byB0aGUgbnVtYmVyIG9mIGxpbmVzIHNwZWNpZmllZCBpbiBjb25maWcuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCAqKmt3KToKKyAgICAgICAgZW1haWxtYXhsaW5lcyA9IGludChjb25maWcuZ2V0KCdlbWFpbG1heGxpbmVzJywgZGVmYXVsdD0nMCcpKQorICAgICAgICBzdXBlcihDb25maWdNYXhsaW5lc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgY29uZmlnPWNvbmZpZywKKyAgICAgICAgICAgIGVtYWlsbWF4bGluZXM9ZW1haWxtYXhsaW5lcywKKyAgICAgICAgICAgICoqa3cKKyAgICAgICAgICAgICkKKworCitjbGFzcyBGUURORW52aXJvbm1lbnRNaXhpbihFbnZpcm9ubWVudCk6CisgICAgIiIiQSBtaXhpbiB0aGF0IHNldHMgdGhlIGhvc3QncyBGUUROIHRvIGl0cyBjb25zdHJ1Y3RvciBhcmd1bWVudC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcWRuLCAqKmt3KToKKyAgICAgICAgc3VwZXIoRlFETkVudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuQ09NUFVURURfS0VZUyArPSBbJ2ZxZG4nXQorICAgICAgICBzZWxmLl9fZnFkbiA9IGZxZG4KKworICAgIGRlZiBnZXRfZnFkbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgZm9yIHRoaXMgaG9zdC4KKworICAgICAgICBSZXR1cm4gTm9uZSBpZiBpdCBpcyB1bmF2YWlsYWJsZSBvciB1bndhbnRlZC4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fX2ZxZG4KKworCitjbGFzcyBDb25maWdGUURORW52aXJvbm1lbnRNaXhpbigKKyAgICAgICAgQ29uZmlnRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgRlFETkVudmlyb25tZW50TWl4aW4sCisgICAgICAgICk6CisgICAgIiIiUmVhZCB0aGUgRlFETiBmcm9tIHRoZSBjb25maWcuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCAqKmt3KToKKyAgICAgICAgZnFkbiA9IGNvbmZpZy5nZXQoJ2ZxZG4nKQorICAgICAgICBzdXBlcihDb25maWdGUURORW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBjb25maWc9Y29uZmlnLAorICAgICAgICAgICAgZnFkbj1mcWRuLAorICAgICAgICAgICAgKiprdworICAgICAgICAgICAgKQorCisKK2NsYXNzIENvbXB1dGVGUURORW52aXJvbm1lbnRNaXhpbihGUURORW52aXJvbm1lbnRNaXhpbik6CisgICAgIiIiR2V0IHRoZSBGUUROIGJ5IGNhbGxpbmcgc29ja2V0LmdldGZxZG4oKS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKKyAgICAgICAgc3VwZXIoQ29tcHV0ZUZRRE5FbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIGZxZG49c29ja2V0LmdldGZxZG4oKSwKKyAgICAgICAgICAgICoqa3cKKyAgICAgICAgICAgICkKKworCitjbGFzcyBQdXNoZXJEb21haW5FbnZpcm9ubWVudE1peGluKENvbmZpZ0Vudmlyb25tZW50TWl4aW4pOgorICAgICIiIkRlZHVjZSBwdXNoZXJfZW1haWwgZnJvbSBwdXNoZXIgYnkgYXBwZW5kaW5nIGFuIGVtYWlsZG9tYWluLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3cpOgorICAgICAgICBzdXBlcihQdXNoZXJEb21haW5FbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygqKmt3KQorICAgICAgICBzZWxmLl9fZW1haWxkb21haW4gPSBzZWxmLmNvbmZpZy5nZXQoJ2VtYWlsZG9tYWluJykKKworICAgIGRlZiBnZXRfcHVzaGVyX2VtYWlsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9fZW1haWxkb21haW46CisgICAgICAgICAgICAjIERlcml2ZSB0aGUgcHVzaGVyJ3MgZnVsbCBlbWFpbCBhZGRyZXNzIGluIHRoZSBkZWZhdWx0IHdheToKKyAgICAgICAgICAgIHJldHVybiAnJXNAJXMnICUgKHNlbGYuZ2V0X3B1c2hlcigpLCBzZWxmLl9fZW1haWxkb21haW4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoUHVzaGVyRG9tYWluRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X3B1c2hlcl9lbWFpbCgpCisKKworY2xhc3MgU3RhdGljUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgICIiIlNldCByZWNpcGllbnRzIHN0YXRpY2FsbHkgYmFzZWQgb24gY29uc3RydWN0b3IgcGFyYW1ldGVycy4iIiIKKworICAgIGRlZiBfX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICByZWZjaGFuZ2VfcmVjaXBpZW50cywgYW5ub3VuY2VfcmVjaXBpZW50cywgcmV2aXNpb25fcmVjaXBpZW50cywgc2NhbmNvbW1pdGZvcmNjLAorICAgICAgICAgICAgKiprdworICAgICAgICAgICAgKToKKyAgICAgICAgc3VwZXIoU3RhdGljUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisKKyAgICAgICAgIyBUaGUgcmVjaXBpZW50cyBmb3IgdmFyaW91cyB0eXBlcyBvZiBub3RpZmljYXRpb24gZW1haWxzLCBhcworICAgICAgICAjIFJGQyAyODIyIGVtYWlsIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkgY29tbWFzIChvciB0aGUgZW1wdHkKKyAgICAgICAgIyBzdHJpbmcgaWYgbm8gcmVjaXBpZW50cyBhcmUgY29uZmlndXJlZCkuICBBbHRob3VnaCB0aGVyZSBpcworICAgICAgICAjIGEgbWVjaGFuaXNtIHRvIGNob29zZSB0aGUgcmVjaXBpZW50IGxpc3RzIGJhc2VkIG9uIG9uIHRoZQorICAgICAgICAjIGFjdHVhbCAqY29udGVudHMqIG9mIHRoZSBjaGFuZ2UgYmVpbmcgcmVwb3J0ZWQsIHdlIG9ubHkKKyAgICAgICAgIyBjaG9vc2UgYmFzZWQgb24gdGhlICp0eXBlKiBvZiB0aGUgY2hhbmdlLiAgVGhlcmVmb3JlIHdlIGNhbgorICAgICAgICAjIGNvbXB1dGUgdGhlbSBvbmNlIGFuZCBmb3IgYWxsOgorICAgICAgICBzZWxmLl9fcmVmY2hhbmdlX3JlY2lwaWVudHMgPSByZWZjaGFuZ2VfcmVjaXBpZW50cworICAgICAgICBzZWxmLl9fYW5ub3VuY2VfcmVjaXBpZW50cyA9IGFubm91bmNlX3JlY2lwaWVudHMKKyAgICAgICAgc2VsZi5fX3JldmlzaW9uX3JlY2lwaWVudHMgPSByZXZpc2lvbl9yZWNpcGllbnRzCisKKyAgICBkZWYgY2hlY2soc2VsZik6CisgICAgICAgIGlmIG5vdCAoc2VsZi5nZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMoTm9uZSkgb3IKKyAgICAgICAgICAgICAgICBzZWxmLmdldF9hbm5vdW5jZV9yZWNpcGllbnRzKE5vbmUpIG9yCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfcmV2aXNpb25fcmVjaXBpZW50cyhOb25lKSBvcgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3NjYW5jb21taXRmb3JjYygpKToKKyAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oJ05vIGVtYWlsIHJlY2lwaWVudHMgY29uZmlndXJlZCEnKQorICAgICAgICBzdXBlcihTdGF0aWNSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuY2hlY2soKQorCisgICAgZGVmIGdldF9yZWZjaGFuZ2VfcmVjaXBpZW50cyhzZWxmLCByZWZjaGFuZ2UpOgorICAgICAgICBpZiBzZWxmLl9fcmVmY2hhbmdlX3JlY2lwaWVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihTdGF0aWNSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5nZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMocmVmY2hhbmdlKQorICAgICAgICByZXR1cm4gc2VsZi5fX3JlZmNoYW5nZV9yZWNpcGllbnRzCisKKyAgICBkZWYgZ2V0X2Fubm91bmNlX3JlY2lwaWVudHMoc2VsZiwgYW5ub3RhdGVkX3RhZ19jaGFuZ2UpOgorICAgICAgICBpZiBzZWxmLl9fYW5ub3VuY2VfcmVjaXBpZW50cyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFN0YXRpY1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpLmdldF9yZWZjaGFuZ2VfcmVjaXBpZW50cyhhbm5vdGF0ZWRfdGFnX2NoYW5nZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19hbm5vdW5jZV9yZWNpcGllbnRzCisKKyAgICBkZWYgZ2V0X3JldmlzaW9uX3JlY2lwaWVudHMoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICBpZiBzZWxmLl9fcmV2aXNpb25fcmVjaXBpZW50cyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFN0YXRpY1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpLmdldF9yZWZjaGFuZ2VfcmVjaXBpZW50cyhyZXZpc2lvbikKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZXZpc2lvbl9yZWNpcGllbnRzCisKKworY2xhc3MgQ0xJUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgICIiIk1peGluIHN0b3JpbmcgcmVjaXBpZW50cyBpbmZvcm1hdGlvbiBjb21pbmcgZnJvbSB0aGUKKyAgICBjb21tYW5kLWxpbmUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpX3JlY2lwaWVudHM9Tm9uZSwgKiprdyk6CisgICAgICAgIHN1cGVyKENMSVJlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygqKmt3KQorICAgICAgICBzZWxmLl9fY2xpX3JlY2lwaWVudHMgPSBjbGlfcmVjaXBpZW50cworCisgICAgZGVmIGdldF9yZWZjaGFuZ2VfcmVjaXBpZW50cyhzZWxmLCByZWZjaGFuZ2UpOgorICAgICAgICBpZiBzZWxmLl9fY2xpX3JlY2lwaWVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihDTElSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5nZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMocmVmY2hhbmdlKQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsaV9yZWNpcGllbnRzCisKKyAgICBkZWYgZ2V0X2Fubm91bmNlX3JlY2lwaWVudHMoc2VsZiwgYW5ub3RhdGVkX3RhZ19jaGFuZ2UpOgorICAgICAgICBpZiBzZWxmLl9fY2xpX3JlY2lwaWVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihDTElSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5nZXRfYW5ub3VuY2VfcmVjaXBpZW50cyhhbm5vdGF0ZWRfdGFnX2NoYW5nZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGlfcmVjaXBpZW50cworCisgICAgZGVmIGdldF9yZXZpc2lvbl9yZWNpcGllbnRzKHNlbGYsIHJldmlzaW9uKToKKyAgICAgICAgaWYgc2VsZi5fX2NsaV9yZWNpcGllbnRzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoQ0xJUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikuZ2V0X3JldmlzaW9uX3JlY2lwaWVudHMocmV2aXNpb24pCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xpX3JlY2lwaWVudHMKKworCitjbGFzcyBDb25maWdSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbigKKyAgICAgICAgQ29uZmlnRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgU3RhdGljUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4KKyAgICAgICAgKToKKyAgICAiIiJEZXRlcm1pbmUgcmVjaXBpZW50cyBzdGF0aWNhbGx5IGJhc2VkIG9uIGNvbmZpZy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsICoqa3cpOgorICAgICAgICBzdXBlcihDb25maWdSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBjb25maWc9Y29uZmlnLAorICAgICAgICAgICAgcmVmY2hhbmdlX3JlY2lwaWVudHM9c2VsZi5fZ2V0X3JlY2lwaWVudHMoCisgICAgICAgICAgICAgICAgY29uZmlnLCAncmVmY2hhbmdlbGlzdCcsICdtYWlsaW5nbGlzdCcsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGFubm91bmNlX3JlY2lwaWVudHM9c2VsZi5fZ2V0X3JlY2lwaWVudHMoCisgICAgICAgICAgICAgICAgY29uZmlnLCAnYW5ub3VuY2VsaXN0JywgJ3JlZmNoYW5nZWxpc3QnLCAnbWFpbGluZ2xpc3QnLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICByZXZpc2lvbl9yZWNpcGllbnRzPXNlbGYuX2dldF9yZWNpcGllbnRzKAorICAgICAgICAgICAgICAgIGNvbmZpZywgJ2NvbW1pdGxpc3QnLCAnbWFpbGluZ2xpc3QnLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICBzY2FuY29tbWl0Zm9yY2M9Y29uZmlnLmdldCgnc2NhbmNvbW1pdGZvcmNjJyksCisgICAgICAgICAgICAqKmt3CisgICAgICAgICAgICApCisKKyAgICBkZWYgX2dldF9yZWNpcGllbnRzKHNlbGYsIGNvbmZpZywgKm5hbWVzKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWNpcGllbnRzIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBvZiBtZXNzYWdlLgorCisgICAgICAgIFJldHVybiB0aGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggYSBwYXJ0aWN1bGFyIHR5cGUKKyAgICAgICAgb2Ygbm90aWZpY2F0aW9uIGVtYWlsIHNob3VsZCBiZSBzZW50LCBieSBsb29raW5nIGF0IHRoZSBjb25maWcKKyAgICAgICAgdmFsdWUgZm9yICJtdWx0aW1haWxob29rLiRuYW1lIiBmb3IgZWFjaCBvZiBuYW1lcy4gIFVzZSB0aGUKKyAgICAgICAgdmFsdWUgZnJvbSB0aGUgZmlyc3QgbmFtZSB0aGF0IGlzIGNvbmZpZ3VyZWQuICBUaGUgcmV0dXJuCisgICAgICAgIHZhbHVlIGlzIGEgKHBvc3NpYmx5IGVtcHR5KSBzdHJpbmcgY29udGFpbmluZyBSRkMgMjgyMiBlbWFpbAorICAgICAgICBhZGRyZXNzZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIElmIG5vIGNvbmZpZ3VyYXRpb24gY291bGQgYmUKKyAgICAgICAgZm91bmQsIHJhaXNlIGEgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi4iIiIKKworICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIGxpbmVzID0gY29uZmlnLmdldF9hbGwobmFtZSkKKyAgICAgICAgICAgIGlmIGxpbmVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVzID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBsaW5lc10KKyAgICAgICAgICAgICAgICAjIFNpbmdsZSAibm9uZSIgaXMgYSBzcGVjaWFsIHZhbHVlIGVxdWl2YWxlbiB0byBlbXB0eSBzdHJpbmcuCisgICAgICAgICAgICAgICAgaWYgbGluZXMgPT0gWydub25lJ106CisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gWycnXQorICAgICAgICAgICAgICAgIHJldHVybiAnLCAnLmpvaW4obGluZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycKKworCitjbGFzcyBTdGF0aWNSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJTZXQgYnJhbmNoIGZpbHRlciBzdGF0aWNhbGx5IGJhc2VkIG9uIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVmX2ZpbHRlcl9pbmNsX3JlZ2V4LCByZWZfZmlsdGVyX2V4Y2xfcmVnZXgsCisgICAgICAgICAgICAgICAgIHJlZl9maWx0ZXJfZG9fc2VuZF9yZWdleCwgcmVmX2ZpbHRlcl9kb250X3NlbmRfcmVnZXgsCisgICAgICAgICAgICAgICAgICoqa3cpOgorICAgICAgICBzdXBlcihTdGF0aWNSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygqKmt3KQorCisgICAgICAgIGlmIHJlZl9maWx0ZXJfaW5jbF9yZWdleCBhbmQgcmVmX2ZpbHRlcl9leGNsX3JlZ2V4OgorICAgICAgICAgICAgcmFpc2UgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgYm90aCBhIHJlZiBpbmNsdXNpb24gYW5kIGV4Y2x1c2lvbiByZWdleC4iKQorICAgICAgICBzZWxmLl9faXNfaW5jbHVzaW9uX2ZpbHRlciA9IGJvb2wocmVmX2ZpbHRlcl9pbmNsX3JlZ2V4KQorICAgICAgICBkZWZhdWx0X2V4Y2x1ZGUgPSBzZWxmLmdldF9kZWZhdWx0X3JlZl9pZ25vcmVfcmVnZXgoKQorICAgICAgICBpZiByZWZfZmlsdGVyX2luY2xfcmVnZXg6CisgICAgICAgICAgICByZWZfZmlsdGVyX3JlZ2V4ID0gcmVmX2ZpbHRlcl9pbmNsX3JlZ2V4CisgICAgICAgIGVsaWYgcmVmX2ZpbHRlcl9leGNsX3JlZ2V4OgorICAgICAgICAgICAgcmVmX2ZpbHRlcl9yZWdleCA9IHJlZl9maWx0ZXJfZXhjbF9yZWdleCArICd8JyArIGRlZmF1bHRfZXhjbHVkZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVmX2ZpbHRlcl9yZWdleCA9IGRlZmF1bHRfZXhjbHVkZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9fY29tcGlsZWRfcmVnZXggPSByZS5jb21waWxlKHJlZl9maWx0ZXJfcmVnZXgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdJbnZhbGlkIFJlZiBGaWx0ZXIgUmVnZXggIiVzIjogJXMnICUgKHJlZl9maWx0ZXJfcmVnZXgsIHN5cy5leGNfaW5mbygpWzFdKSkKKworICAgICAgICBpZiByZWZfZmlsdGVyX2RvX3NlbmRfcmVnZXggYW5kIHJlZl9maWx0ZXJfZG9udF9zZW5kX3JlZ2V4OgorICAgICAgICAgICAgcmFpc2UgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgYm90aCBhIHJlZiBkb1NlbmQgYW5kIGRvbnRTZW5kIHJlZ2V4LiIpCisgICAgICAgIHNlbGYuX19pc19kb19zZW5kX2ZpbHRlciA9IGJvb2wocmVmX2ZpbHRlcl9kb19zZW5kX3JlZ2V4KQorICAgICAgICBpZiByZWZfZmlsdGVyX2RvX3NlbmRfcmVnZXg6CisgICAgICAgICAgICByZWZfZmlsdGVyX3NlbmRfcmVnZXggPSByZWZfZmlsdGVyX2RvX3NlbmRfcmVnZXgKKyAgICAgICAgZWxpZiByZWZfZmlsdGVyX2RvbnRfc2VuZF9yZWdleDoKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfc2VuZF9yZWdleCA9IHJlZl9maWx0ZXJfZG9udF9zZW5kX3JlZ2V4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWZfZmlsdGVyX3NlbmRfcmVnZXggPSAnLionCisgICAgICAgICAgICBzZWxmLl9faXNfZG9fc2VuZF9maWx0ZXIgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX19zZW5kX2NvbXBpbGVkX3JlZ2V4ID0gcmUuY29tcGlsZShyZWZfZmlsdGVyX3NlbmRfcmVnZXgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdJbnZhbGlkIFJlZiBGaWx0ZXIgUmVnZXggIiVzIjogJXMnICUKKyAgICAgICAgICAgICAgICAocmVmX2ZpbHRlcl9zZW5kX3JlZ2V4LCBzeXMuZXhjX2luZm8oKVsxXSkpCisKKyAgICBkZWYgZ2V0X3JlZl9maWx0ZXJfcmVnZXgoc2VsZiwgc2VuZF9maWx0ZXI9RmFsc2UpOgorICAgICAgICBpZiBzZW5kX2ZpbHRlcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2VuZF9jb21waWxlZF9yZWdleCwgc2VsZi5fX2lzX2RvX3NlbmRfZmlsdGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NvbXBpbGVkX3JlZ2V4LCBzZWxmLl9faXNfaW5jbHVzaW9uX2ZpbHRlcgorCisKK2NsYXNzIENvbmZpZ1JlZkZpbHRlckVudmlyb25tZW50TWl4aW4oCisgICAgICAgIENvbmZpZ0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIFN0YXRpY1JlZkZpbHRlckVudmlyb25tZW50TWl4aW4KKyAgICAgICAgKToKKyAgICAiIiJEZXRlcm1pbmUgYnJhbmNoIGZpbHRlcmluZyBzdGF0aWNhbGx5IGJhc2VkIG9uIGNvbmZpZy4iIiIKKworICAgIGRlZiBfZ2V0X3JlZ2V4KHNlbGYsIGNvbmZpZywga2V5KToKKyAgICAgICAgIiIiR2V0IGEgbGlzdCBvZiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCByZWdleC4gVGhlIHJlZkZpbHRlciogY29uZmlnCisgICAgICAgIHZhcmlhYmxlcyBhcmUgbXVsdGl2YWx1ZWQgKGhlbmNlIHRoZSB1c2Ugb2YgZ2V0X2FsbCksIGFuZCB3ZQorICAgICAgICBhbGxvdyBlYWNoIGVudHJ5IHRvIGJlIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCAoaGVuY2UgdGhlCisgICAgICAgIHNwbGl0IG9uIGVhY2ggbGluZSkuIFRoZSB3aG9sZSB0aGluZyBpcyBnbHVlZCBpbnRvIGEgc2luZ2xlIHJlZ2V4LiIiIgorICAgICAgICB2YWx1ZXMgPSBjb25maWcuZ2V0X2FsbChrZXkpCisgICAgICAgIGlmIHZhbHVlcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlcworICAgICAgICBpdGVtcyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIHZhbHVlczoKKyAgICAgICAgICAgIGZvciBpIGluIGxpbmUuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoaSkKKyAgICAgICAgaWYgaXRlbXMgPT0gW106CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gJ3wnLmpvaW4oaXRlbXMpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnLCAqKmt3KToKKyAgICAgICAgc3VwZXIoQ29uZmlnUmVmRmlsdGVyRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBjb25maWc9Y29uZmlnLAorICAgICAgICAgICAgcmVmX2ZpbHRlcl9pbmNsX3JlZ2V4PXNlbGYuX2dldF9yZWdleChjb25maWcsICdyZWZGaWx0ZXJJbmNsdXNpb25SZWdleCcpLAorICAgICAgICAgICAgcmVmX2ZpbHRlcl9leGNsX3JlZ2V4PXNlbGYuX2dldF9yZWdleChjb25maWcsICdyZWZGaWx0ZXJFeGNsdXNpb25SZWdleCcpLAorICAgICAgICAgICAgcmVmX2ZpbHRlcl9kb19zZW5kX3JlZ2V4PXNlbGYuX2dldF9yZWdleChjb25maWcsICdyZWZGaWx0ZXJEb1NlbmRSZWdleCcpLAorICAgICAgICAgICAgcmVmX2ZpbHRlcl9kb250X3NlbmRfcmVnZXg9c2VsZi5fZ2V0X3JlZ2V4KGNvbmZpZywgJ3JlZkZpbHRlckRvbnRTZW5kUmVnZXgnKSwKKyAgICAgICAgICAgICoqa3cKKyAgICAgICAgICAgICkKKworCitjbGFzcyBQcm9qZWN0ZGVzY0Vudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgICIiIk1ha2UgYSAicHJvamVjdGRlc2MiIHZhbHVlIGF2YWlsYWJsZSBmb3IgdGVtcGxhdGVzLgorCisgICAgQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIHRoZSBmaXJzdCBsaW5lIG9mICRHSVRfRElSL2Rlc2NyaXB0aW9uCisgICAgKGlmIHRoYXQgZmlsZSBpcyBwcmVzZW50IGFuZCBhcHBlYXJzIHRvIGJlIHNldCBtZWFuaW5nZnVsbHkpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3cpOgorICAgICAgICBzdXBlcihQcm9qZWN0ZGVzY0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuQ09NUFVURURfS0VZUyArPSBbJ3Byb2plY3RkZXNjJ10KKworICAgIGRlZiBnZXRfcHJvamVjdGRlc2Moc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0LiIiIgorCisgICAgICAgIGdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2plY3RkZXNjID0gb3Blbihvcy5wYXRoLmpvaW4oZ2l0X2RpciwgJ2Rlc2NyaXB0aW9uJykpLnJlYWRsaW5lKCkuc3RyaXAoKQorICAgICAgICAgICAgaWYgcHJvamVjdGRlc2MgYW5kIG5vdCBwcm9qZWN0ZGVzYy5zdGFydHN3aXRoKCdVbm5hbWVkIHJlcG9zaXRvcnknKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJvamVjdGRlc2MKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuICdVTk5BTUVEIFBST0pFQ1QnCisKKworY2xhc3MgR2VuZXJpY0Vudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgIGRlZiBnZXRfcHVzaGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vc2Vudi5nZXQoJ1VTRVInLCBzZWxmLm9zZW52LmdldCgnVVNFUk5BTUUnLCAndW5rbm93biB1c2VyJykpCisKKworY2xhc3MgR2l0b2xpdGVFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4oRW52aXJvbm1lbnQpOgorICAgIGRlZiBnZXRfcHVzaGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vc2Vudi5nZXQoJ0dMX1VTRVInLCAndW5rbm93biB1c2VyJykKKworCitjbGFzcyBHaXRvbGl0ZUVudmlyb25tZW50TG93UHJlY01peGluKAorICAgICAgICBDb25maWdFbnZpcm9ubWVudE1peGluLAorICAgICAgICBFbnZpcm9ubWVudCk6CisKKyAgICBkZWYgZ2V0X3JlcG9fc2hvcnRuYW1lKHNlbGYpOgorICAgICAgICAjIFRoZSBnaXRvbGl0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkR0xfUkVQTyBpcyBhIHByZXR0eSBnb29kCisgICAgICAgICMgcmVwb19zaG9ydG5hbWUgKHRob3VnaCBpdCdzIHByb2JhYmx5IG5vdCBhcyBnb29kIGFzIGEgdmFsdWUKKyAgICAgICAgIyB0aGUgdXNlciBtaWdodCBoYXZlIGV4cGxpY2l0bHkgcHV0IGluIGhpcyBjb25maWcpLgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgc2VsZi5vc2Vudi5nZXQoJ0dMX1JFUE8nLCBOb25lKSBvcgorICAgICAgICAgICAgc3VwZXIoR2l0b2xpdGVFbnZpcm9ubWVudExvd1ByZWNNaXhpbiwgc2VsZikuZ2V0X3JlcG9fc2hvcnRuYW1lKCkKKyAgICAgICAgICAgICkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2NvbXBpbGVfcmVnZXgocmVfdGVtcGxhdGUpOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgcmUuY29tcGlsZShyZV90ZW1wbGF0ZSAlIHgpCisgICAgICAgICAgICBmb3IgeCBpbiAoCisgICAgICAgICAgICAgICAgcidCRUdJTlxzK1VTRVJccytFTUFJTFMnLAorICAgICAgICAgICAgICAgIHInKFteXHNdKylccysoLiopJywKKyAgICAgICAgICAgICAgICByJ0VORFxzK1VTRVJccytFTUFJTFMnLAorICAgICAgICAgICAgICAgICkpCisKKyAgICBkZWYgZ2V0X2Zyb21hZGRyKHNlbGYsIGNoYW5nZT1Ob25lKToKKyAgICAgICAgR0xfVVNFUiA9IHNlbGYub3NlbnYuZ2V0KCdHTF9VU0VSJykKKyAgICAgICAgaWYgR0xfVVNFUiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgRmluZCB0aGUgcGF0aCB0byBnaXRvbGl0ZS5jb25mLiAgTm90ZSB0aGF0IGdpdG9saXRlIHYzCisgICAgICAgICAgICAjIGRpZCBhd2F5IHdpdGggdGhlIEdMX0FETUlORElSIGFuZCBHTF9DT05GIGVudmlyb25tZW50CisgICAgICAgICAgICAjIHZhcmlhYmxlcyAodGhleSBhcmUgbm93IGhhcmQtY29kZWQpLgorICAgICAgICAgICAgR0xfQURNSU5ESVIgPSBzZWxmLm9zZW52LmdldCgKKyAgICAgICAgICAgICAgICAnR0xfQURNSU5ESVInLAorICAgICAgICAgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oJ34nLCAnLmdpdG9saXRlJykpKQorICAgICAgICAgICAgR0xfQ09ORiA9IHNlbGYub3NlbnYuZ2V0KAorICAgICAgICAgICAgICAgICdHTF9DT05GJywKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oR0xfQURNSU5ESVIsICdjb25mJywgJ2dpdG9saXRlLmNvbmYnKSkKKworICAgICAgICAgICAgbWFpbGFkZHJlc3NfbWFwID0gc2VsZi5jb25maWcuZ2V0KCdNYWlsYWRkcmVzc01hcCcpCisgICAgICAgICAgICAjIElmIHJlbGF0aXZlLCBjb25zaWRlciByZWxhdGl2ZSB0byBHTF9DT05GOgorICAgICAgICAgICAgaWYgbWFpbGFkZHJlc3NfbWFwOgorICAgICAgICAgICAgICAgIG1haWxhZGRyZXNzX21hcCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoR0xfQ09ORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haWxhZGRyZXNzX21hcCkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShtYWlsYWRkcmVzc19tYXApOgorICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihtYWlsYWRkcmVzc19tYXAsICdyVScpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTGVhZGluZyAnIycgaXMgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlX2JlZ2luLCByZV91c2VyLCByZV9lbmQgPSBzZWxmLl9jb21waWxlX3JlZ2V4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInXig/OlxzKiMpP1xzKiVzXHMqJCcpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbCBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsLnJzdHJpcCgnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlX2JlZ2luLm1hdGNoKGwpIG9yIHJlX2VuZC5tYXRjaChsKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgICMgSWdub3JlIHRoZXNlIGxpbmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlX3VzZXIubWF0Y2gobCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtLmdyb3VwKDEpID09IEdMX1VTRVI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgICMgTm90IHRoaXMgdXNlciwgYnV0IG5vdCBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTeW50YXggZXJyb3IgaW4gbWFpbCBhZGRyZXNzIG1hcC5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoZWNrIGZpbGUge30uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMaW5lOiB7fSIuZm9ybWF0KG1haWxhZGRyZXNzX21hcCwgbCkpCisKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShHTF9DT05GKToKKyAgICAgICAgICAgICAgICBmID0gb3BlbihHTF9DT05GLCAnclUnKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaW5fdXNlcl9lbWFpbHNfc2VjdGlvbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHJlX2JlZ2luLCByZV91c2VyLCByZV9lbmQgPSBzZWxmLl9jb21waWxlX3JlZ2V4KAorICAgICAgICAgICAgICAgICAgICAgICAgcideXHMqI1xzKiVzXHMqJCcpCisgICAgICAgICAgICAgICAgICAgIGZvciBsIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBsID0gbC5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpbl91c2VyX2VtYWlsc19zZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlX2JlZ2luLm1hdGNoKGwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl91c2VyX2VtYWlsc19zZWN0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZV9lbmQubWF0Y2gobCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSByZV91c2VyLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtIGFuZCBtLmdyb3VwKDEpID09IEdMX1VTRVI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMikKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKEdpdG9saXRlRW52aXJvbm1lbnRMb3dQcmVjTWl4aW4sIHNlbGYpLmdldF9mcm9tYWRkcihjaGFuZ2UpCisKKworY2xhc3MgSW5jcmVtZW50YWxEYXRlVGltZShvYmplY3QpOgorICAgICIiIlNpbXBsZSB3cmFwcGVyIHRvIGdpdmUgaW5jcmVtZW50YWwgZGF0ZS90aW1lcy4KKworICAgIEVhY2ggY2FsbCB3aWxsIHJlc3VsdCBpbiBhIGRhdGUvdGltZSBhIHNlY29uZCBsYXRlciB0aGFuIHRoZQorICAgIHByZXZpb3VzIGNhbGwuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGZhbHNpZnkgZW1haWwgaGVhZGVycywgdG8KKyAgICBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGVtYWlsIGNsaWVudHMgc29ydCB0aGUgZW1haWxzCisgICAgY29ycmVjdGx5LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLm5leHQgPSBzZWxmLl9fbmV4dF9fICAjIFB5dGhvbiAyIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgZm9ybWF0dGVkID0gZm9ybWF0ZGF0ZShzZWxmLnRpbWUsIFRydWUpCisgICAgICAgIHNlbGYudGltZSArPSAxCisgICAgICAgIHJldHVybiBmb3JtYXR0ZWQKKworCitjbGFzcyBTdGFzaEVudmlyb25tZW50SGlnaFByZWNNaXhpbihFbnZpcm9ubWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZXI9Tm9uZSwgcmVwbz1Ob25lLCAqKmt3KToKKyAgICAgICAgc3VwZXIoU3Rhc2hFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4sCisgICAgICAgICAgICAgIHNlbGYpLl9faW5pdF9fKHVzZXI9dXNlciwgcmVwbz1yZXBvLCAqKmt3KQorICAgICAgICBzZWxmLl9fdXNlciA9IHVzZXIKKyAgICAgICAgc2VsZi5fX3JlcG8gPSByZXBvCisKKyAgICBkZWYgZ2V0X3B1c2hlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlLm1hdGNoKHInKC4qPylccyo8Jywgc2VsZi5fX3VzZXIpLmdyb3VwKDEpCisKKyAgICBkZWYgZ2V0X3B1c2hlcl9lbWFpbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX191c2VyCisKKworY2xhc3MgU3Rhc2hFbnZpcm9ubWVudExvd1ByZWNNaXhpbihFbnZpcm9ubWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZXI9Tm9uZSwgcmVwbz1Ob25lLCAqKmt3KToKKyAgICAgICAgc3VwZXIoU3Rhc2hFbnZpcm9ubWVudExvd1ByZWNNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5fX3JlcG8gPSByZXBvCisgICAgICAgIHNlbGYuX191c2VyID0gdXNlcgorCisgICAgZGVmIGdldF9yZXBvX3Nob3J0bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZXBvCisKKyAgICBkZWYgZ2V0X2Zyb21hZGRyKHNlbGYsIGNoYW5nZT1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX191c2VyCisKKworY2xhc3MgR2Vycml0RW52aXJvbm1lbnRIaWdoUHJlY01peGluKEVudmlyb25tZW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdD1Ob25lLCBzdWJtaXR0ZXI9Tm9uZSwgdXBkYXRlX21ldGhvZD1Ob25lLCAqKmt3KToKKyAgICAgICAgc3VwZXIoR2Vycml0RW52aXJvbm1lbnRIaWdoUHJlY01peGluLAorICAgICAgICAgICAgICBzZWxmKS5fX2luaXRfXyhzdWJtaXR0ZXI9c3VibWl0dGVyLCBwcm9qZWN0PXByb2plY3QsICoqa3cpCisgICAgICAgIHNlbGYuX19wcm9qZWN0ID0gcHJvamVjdAorICAgICAgICBzZWxmLl9fc3VibWl0dGVyID0gc3VibWl0dGVyCisgICAgICAgIHNlbGYuX191cGRhdGVfbWV0aG9kID0gdXBkYXRlX21ldGhvZAorICAgICAgICAiTWFrZSBhbiAndXBkYXRlX21ldGhvZCcgdmFsdWUgYXZhaWxhYmxlIGZvciB0ZW1wbGF0ZXMuIgorICAgICAgICBzZWxmLkNPTVBVVEVEX0tFWVMgKz0gWyd1cGRhdGVfbWV0aG9kJ10KKworICAgIGRlZiBnZXRfcHVzaGVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9fc3VibWl0dGVyOgorICAgICAgICAgICAgaWYgc2VsZi5fX3N1Ym1pdHRlci5maW5kKCc8JykgIT0gLTE6CisgICAgICAgICAgICAgICAgIyBTdWJtaXR0ZXIgaGFzIGEgY29uZmlndXJlZCBlbWFpbCwgd2UgdHJhbnNmb3JtZWQKKyAgICAgICAgICAgICAgICAjIF9fc3VibWl0dGVyIGludG8gYW4gUkZDIDI4MjIgc3RyaW5nIGFscmVhZHkuCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlLm1hdGNoKHInKC4qPylccyo8Jywgc2VsZi5fX3N1Ym1pdHRlcikuZ3JvdXAoMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBTdWJtaXR0ZXIgaGFzIG5vIGNvbmZpZ3VyZWQgZW1haWwsIGl0J3MganVzdCBoaXMgbmFtZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3N1Ym1pdHRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiB3ZSBhcnJpdmUgaGVyZSwgdGhpcyBtZWFucyBzb21lb25lIHB1c2hlZCAiU3VibWl0IiBmcm9tCisgICAgICAgICAgICAjIHRoZSBnZXJyaXQgd2ViIFVJIGZvciB0aGUgQ1IgKG9yIHVzZWQgb25lIG9mIHRoZSBwcm9ncmFtbWF0aWMKKyAgICAgICAgICAgICMgQVBJcyB0byBkbyB0aGUgc2FtZSwgc3VjaCBhcyBnZXJyaXQgcmV2aWV3KSBhbmQgdGhlCisgICAgICAgICAgICAjIG1lcmdlL3B1c2ggd2FzIGRvbmUgYnkgdGhlIEdlcnJpdCB1c2VyLiAgSXQgd2FzIHRlY2huaWNhbGx5CisgICAgICAgICAgICAjIHRyaWdnZXJlZCBieSBzb21lb25lIGVsc2UsIGJ1dCBzYWRseSB3ZSBoYXZlIG5vIHdheSBvZgorICAgICAgICAgICAgIyBkZXRlcm1pbmluZyB3aG8gdGhhdCBzb21lb25lIGVsc2UgaXMgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgICAgIHJldHVybiAnR2Vycml0JyAgIyAndW5rbm93biB1c2VyJz8KKworICAgIGRlZiBnZXRfcHVzaGVyX2VtYWlsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9fc3VibWl0dGVyOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zdWJtaXR0ZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihHZXJyaXRFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4sIHNlbGYpLmdldF9wdXNoZXJfZW1haWwoKQorCisgICAgZGVmIGdldF9kZWZhdWx0X3JlZl9pZ25vcmVfcmVnZXgoc2VsZik6CisgICAgICAgIGRlZmF1bHQgPSBzdXBlcihHZXJyaXRFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4sIHNlbGYpLmdldF9kZWZhdWx0X3JlZl9pZ25vcmVfcmVnZXgoKQorICAgICAgICByZXR1cm4gZGVmYXVsdCArICd8XnJlZnMvY2hhbmdlcy98XnJlZnMvY2FjaGUtYXV0b21lcmdlL3xecmVmcy9tZXRhLycKKworICAgIGRlZiBnZXRfcmV2aXNpb25fcmVjaXBpZW50cyhzZWxmLCByZXZpc2lvbik6CisgICAgICAgICMgTWVyZ2UgY29tbWl0cyBjcmVhdGVkIGJ5IEdlcnJpdCB3aGVuIHVzZXJzIGhpdCAiU3VibWl0IHRoaXMgcGF0Y2hzZXQiCisgICAgICAgICMgaW4gdGhlIFdlYiBVSSAob3IgZG8gZXF1aXZhbGVudGx5IHdpdGggUkVTVCBBUElzIG9yIHRoZSBnZXJyaXQgcmV2aWV3CisgICAgICAgICMgY29tbWFuZCkgYXJlIG5vdCBzb21ldGhpbmcgdXNlcnMgd2FudCB0byBzZWUgYW4gaW5kaXZpZHVhbCBlbWFpbCBmb3IuCisgICAgICAgICMgRmlsdGVyIHRoZW0gb3V0LgorICAgICAgICBjb21taXR0ZXIgPSByZWFkX2dpdF9vdXRwdXQoWydsb2cnLCAnLS1uby13YWxrJywgJy0tZm9ybWF0PSVjTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24ucmV2LnNoYTFdKQorICAgICAgICBpZiBjb21taXR0ZXIgPT0gJ0dlcnJpdCBDb2RlIFJldmlldyc6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihHZXJyaXRFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4sIHNlbGYpLmdldF9yZXZpc2lvbl9yZWNpcGllbnRzKHJldmlzaW9uKQorCisgICAgZGVmIGdldF91cGRhdGVfbWV0aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3VwZGF0ZV9tZXRob2QKKworCitjbGFzcyBHZXJyaXRFbnZpcm9ubWVudExvd1ByZWNNaXhpbihFbnZpcm9ubWVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3Q9Tm9uZSwgc3VibWl0dGVyPU5vbmUsICoqa3cpOgorICAgICAgICBzdXBlcihHZXJyaXRFbnZpcm9ubWVudExvd1ByZWNNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5fX3Byb2plY3QgPSBwcm9qZWN0CisgICAgICAgIHNlbGYuX19zdWJtaXR0ZXIgPSBzdWJtaXR0ZXIKKworICAgIGRlZiBnZXRfcmVwb19zaG9ydG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fcHJvamVjdAorCisgICAgZGVmIGdldF9mcm9tYWRkcihzZWxmLCBjaGFuZ2U9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuX19zdWJtaXR0ZXIgYW5kIHNlbGYuX19zdWJtaXR0ZXIuZmluZCgnPCcpICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zdWJtaXR0ZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihHZXJyaXRFbnZpcm9ubWVudExvd1ByZWNNaXhpbiwgc2VsZikuZ2V0X2Zyb21hZGRyKGNoYW5nZSkKKworCitjbGFzcyBQdXNoKG9iamVjdCk6CisgICAgIiIiUmVwcmVzZW50IGFuIGVudGlyZSBwdXNoIChpLmUuLCBhIGdyb3VwIG9mIFJlZmVyZW5jZUNoYW5nZXMpLgorCisgICAgSXQgaXMgZWFzeSB0byBmaWd1cmUgb3V0IHdoYXQgY29tbWl0cyB3ZXJlIGFkZGVkIHRvIGEgKmJyYW5jaCogYnkKKyAgICBhIFJlZmVyZW5jZSBjaGFuZ2U6CisKKyAgICAgICAgZ2l0IHJldi1saXN0IGNoYW5nZS5vbGQuLmNoYW5nZS5uZXcKKworICAgIG9yIHJlbW92ZWQgZnJvbSBhICpicmFuY2gqOgorCisgICAgICAgIGdpdCByZXYtbGlzdCBjaGFuZ2UubmV3Li5jaGFuZ2Uub2xkCisKKyAgICBCdXQgaXQgaXMgbm90IHF1aXRlIHNvIHRyaXZpYWwgdG8gZGV0ZXJtaW5lIHdoaWNoIGVudGlyZWx5IG5ldworICAgIGNvbW1pdHMgd2VyZSBhZGRlZCB0byB0aGUgKnJlcG9zaXRvcnkqIGJ5IGEgcHVzaCBhbmQgd2hpY2ggb2xkCisgICAgY29tbWl0cyB3ZXJlIGRpc2NhcmRlZCBieSBhIHB1c2guICBBIGJpZyBwYXJ0IG9mIHRoZSBqb2Igb2YgdGhpcworICAgIGNsYXNzIGlzIHRvIGZpZ3VyZSBvdXQgdGhlc2UgdGhpbmdzLCBhbmQgdG8gbWFrZSBzdXJlIHRoYXQgbmV3CisgICAgY29tbWl0cyBhcmUgb25seSBkZXRhaWxlZCBvbmNlIGV2ZW4gaWYgdGhleSB3ZXJlIGFkZGVkIHRvIG11bHRpcGxlCisgICAgcmVmZXJlbmNlcy4KKworICAgIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGRldGVybWluZSB0aGUgIm90aGVyIiByZWZlcmVuY2VzLS10aG9zZQorICAgIHVuYWZmZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcHVzaC4gIFRoZXkgYXJlIGNvbXB1dGVkIGJ5IGxpc3RpbmcgYWxsCisgICAgcmVmZXJlbmNlcyB0aGVuIHJlbW92aW5nIGFueSBhZmZlY3RlZCBieSB0aGlzIHB1c2guICBUaGUgcmVzdWx0cworICAgIGFyZSBzdG9yZWQgaW4gUHVzaC5fb3RoZXJfcmVmX3NoYTFzLgorCisgICAgVGhlIGNvbW1pdHMgY29udGFpbmVkIGluIHRoZSByZXBvc2l0b3J5IGJlZm9yZSB0aGlzIHB1c2ggd2VyZQorCisgICAgICAgIGdpdCByZXYtbGlzdCBvdGhlcjEgb3RoZXIyIG90aGVyMyAuLi4gY2hhbmdlMS5vbGQgY2hhbmdlMi5vbGQgLi4uCisKKyAgICBXaGVyZSAiY2hhbmdlTi5vbGQiIGlzIHRoZSBvbGQgdmFsdWUgb2Ygb25lIG9mIHRoZSByZWZlcmVuY2VzCisgICAgYWZmZWN0ZWQgYnkgdGhpcyBwdXNoLgorCisgICAgVGhlIGNvbW1pdHMgY29udGFpbmVkIGluIHRoZSByZXBvc2l0b3J5IGFmdGVyIHRoaXMgcHVzaCBhcmUKKworICAgICAgICBnaXQgcmV2LWxpc3Qgb3RoZXIxIG90aGVyMiBvdGhlcjMgLi4uIGNoYW5nZTEubmV3IGNoYW5nZTIubmV3IC4uLgorCisgICAgVGhlIGNvbW1pdHMgYWRkZWQgYnkgdGhpcyBwdXNoIGFyZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlCisgICAgdHdvIHNldHMsIHdoaWNoIGNhbiBiZSB3cml0dGVuCisKKyAgICAgICAgZ2l0IHJldi1saXN0IFwKKyAgICAgICAgICAgIF5vdGhlcjEgXm90aGVyMiAuLi4gXAorICAgICAgICAgICAgXmNoYW5nZTEub2xkIF5jaGFuZ2UyLm9sZCAuLi4gXAorICAgICAgICAgICAgY2hhbmdlMS5uZXcgY2hhbmdlMi5uZXcgLi4uCisKKyAgICBUaGUgY29tbWl0cyByZW1vdmVkIGJ5IHRoaXMgcHVzaCBjYW4gYmUgY29tcHV0ZWQgYnkKKworICAgICAgICBnaXQgcmV2LWxpc3QgXAorICAgICAgICAgICAgXm90aGVyMSBeb3RoZXIyIC4uLiBcCisgICAgICAgICAgICBeY2hhbmdlMS5uZXcgXmNoYW5nZTIubmV3IC4uLiBcCisgICAgICAgICAgICBjaGFuZ2UxLm9sZCBjaGFuZ2UyLm9sZCAuLi4KKworICAgIFRoZSBsYXN0IHBvaW50IGlzIHRoYXQgaXQgaXMgcG9zc2libGUgdGhhdCBvdGhlciBwdXNoZXMgYXJlCisgICAgb2NjdXJyaW5nIHNpbXVsdGFuZW91c2x5IHRvIHRoaXMgb25lLCBzbyByZWZlcmVuY2UgdmFsdWVzIGNhbgorICAgIGNoYW5nZSBhdCBhbnkgdGltZS4gIEl0IGlzIGltcG9zc2libGUgdG8gZWxpbWluYXRlIGFsbCByYWNlCisgICAgY29uZGl0aW9ucywgYnV0IHdlIHJlZHVjZSB0aGUgd2luZG93IG9mIHRpbWUgZHVyaW5nIHdoaWNoIHByb2JsZW1zCisgICAgY2FuIG9jY3VyIGJ5IHRyYW5zbGF0aW5nIHJlZmVyZW5jZSBuYW1lcyB0byBTSEExcyBhcyBzb29uIGFzCisgICAgcG9zc2libGUgYW5kIHdvcmtpbmcgd2l0aCBTSEExcyB0aGVyZWFmdGVyIChiZWNhdXNlIFNIQTFzIGFyZQorICAgIGltbXV0YWJsZSkuIiIiCisKKyAgICAjIEEgbWFwIHsoY2hhbmdlY2xhc3MsIGNoYW5nZXR5cGUpOiBpbnRlZ2VyfSBzcGVjaWZ5aW5nIHRoZSBvcmRlcgorICAgICMgdGhhdCByZWZlcmVuY2UgY2hhbmdlcyB3aWxsIGJlIHByb2Nlc3NlZCBpZiBtdWx0aXBsZSByZWZlcmVuY2UKKyAgICAjIGNoYW5nZXMgYXJlIGluY2x1ZGVkIGluIGEgc2luZ2xlIHB1c2guICBUaGUgb3JkZXIgaXMgc2lnbmlmaWNhbnQKKyAgICAjIG1vc3RseSBiZWNhdXNlIG5ldyBjb21taXQgbm90aWZpY2F0aW9ucyBhcmUgdGhyZWFkZWQgdG9nZXRoZXIKKyAgICAjIHdpdGggdGhlIGZpcnN0IHJlZmVyZW5jZSBjaGFuZ2UgdGhhdCBpbmNsdWRlcyB0aGUgY29tbWl0LiAgVGhlCisgICAgIyBmb2xsb3dpbmcgb3JkZXIgdGh1cyBjYXVzZXMgY29tbWl0cyB0byBiZSBncm91cGVkIHdpdGggYnJhbmNoCisgICAgIyBjaGFuZ2VzIChhcyBvcHBvc2VkIHRvIHRhZyBjaGFuZ2VzKSBpZiBwb3NzaWJsZS4KKyAgICBTT1JUX09SREVSID0gZGljdCgKKyAgICAgICAgKHZhbHVlLCBpKSBmb3IgKGksIHZhbHVlKSBpbiBlbnVtZXJhdGUoWworICAgICAgICAgICAgKEJyYW5jaENoYW5nZSwgJ3VwZGF0ZScpLAorICAgICAgICAgICAgKEJyYW5jaENoYW5nZSwgJ2NyZWF0ZScpLAorICAgICAgICAgICAgKEFubm90YXRlZFRhZ0NoYW5nZSwgJ3VwZGF0ZScpLAorICAgICAgICAgICAgKEFubm90YXRlZFRhZ0NoYW5nZSwgJ2NyZWF0ZScpLAorICAgICAgICAgICAgKE5vbkFubm90YXRlZFRhZ0NoYW5nZSwgJ3VwZGF0ZScpLAorICAgICAgICAgICAgKE5vbkFubm90YXRlZFRhZ0NoYW5nZSwgJ2NyZWF0ZScpLAorICAgICAgICAgICAgKEJyYW5jaENoYW5nZSwgJ2RlbGV0ZScpLAorICAgICAgICAgICAgKEFubm90YXRlZFRhZ0NoYW5nZSwgJ2RlbGV0ZScpLAorICAgICAgICAgICAgKE5vbkFubm90YXRlZFRhZ0NoYW5nZSwgJ2RlbGV0ZScpLAorICAgICAgICAgICAgKE90aGVyUmVmZXJlbmNlQ2hhbmdlLCAndXBkYXRlJyksCisgICAgICAgICAgICAoT3RoZXJSZWZlcmVuY2VDaGFuZ2UsICdjcmVhdGUnKSwKKyAgICAgICAgICAgIChPdGhlclJlZmVyZW5jZUNoYW5nZSwgJ2RlbGV0ZScpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmlyb25tZW50LCBjaGFuZ2VzLCBpZ25vcmVfb3RoZXJfcmVmcz1GYWxzZSk6CisgICAgICAgIHNlbGYuY2hhbmdlcyA9IHNvcnRlZChjaGFuZ2VzLCBrZXk9c2VsZi5fc29ydF9rZXkpCisgICAgICAgIHNlbGYuX19vdGhlcl9yZWZfc2hhMXMgPSBOb25lCisgICAgICAgIHNlbGYuX19jYWNoZWRfY29tbWl0c19zcGVjID0ge30KKyAgICAgICAgc2VsZi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50CisKKyAgICAgICAgaWYgaWdub3JlX290aGVyX3JlZnM6CisgICAgICAgICAgICBzZWxmLl9fb3RoZXJfcmVmX3NoYTFzID0gc2V0KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc29ydF9rZXkoa2xhc3MsIGNoYW5nZSk6CisgICAgICAgIHJldHVybiAoa2xhc3MuU09SVF9PUkRFUltjaGFuZ2UuX19jbGFzc19fLCBjaGFuZ2UuY2hhbmdlX3R5cGVdLCBjaGFuZ2UucmVmbmFtZSwpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX290aGVyX3JlZl9zaGExcyhzZWxmKToKKyAgICAgICAgIiIiVGhlIEdpdE9iamVjdHMgcmVmZXJyZWQgdG8gYnkgcmVmZXJlbmNlcyB1bmFmZmVjdGVkIGJ5IHRoaXMgcHVzaC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX19vdGhlcl9yZWZfc2hhMXMgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhlIHJlZm5hbWVzIGJlaW5nIGNoYW5nZWQgYnkgdGhpcyBwdXNoOgorICAgICAgICAgICAgdXBkYXRlZF9yZWZzID0gc2V0KAorICAgICAgICAgICAgICAgIGNoYW5nZS5yZWZuYW1lCisgICAgICAgICAgICAgICAgZm9yIGNoYW5nZSBpbiBzZWxmLmNoYW5nZXMKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgVGhlIFNIQS0xcyBvZiBjb21taXRzIHJlZmVycmVkIHRvIGJ5IGFsbCByZWZlcmVuY2VzIGluIHRoaXMKKyAgICAgICAgICAgICMgcmVwb3NpdG9yeSAqZXhjZXB0KiB1cGRhdGVkX3JlZnM6CisgICAgICAgICAgICBzaGExcyA9IHNldCgpCisgICAgICAgICAgICBmbXQgPSAoCisgICAgICAgICAgICAgICAgJyUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKSAlKHJlZm5hbWUpXG4nCisgICAgICAgICAgICAgICAgJyUoKm9iamVjdG5hbWUpICUoKm9iamVjdHR5cGUpICUocmVmbmFtZSknCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcmVmX2ZpbHRlcl9yZWdleCwgaXNfaW5jbHVzaW9uX2ZpbHRlciA9IFwKKyAgICAgICAgICAgICAgICBzZWxmLmVudmlyb25tZW50LmdldF9yZWZfZmlsdGVyX3JlZ2V4KCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHJlYWRfZ2l0X2xpbmVzKAorICAgICAgICAgICAgICAgICAgICBbJ2Zvci1lYWNoLXJlZicsICctLWZvcm1hdD0lcycgJSAoZm10LCldKToKKyAgICAgICAgICAgICAgICAoc2hhMSwgdHlwZSwgbmFtZSkgPSBsaW5lLnNwbGl0KCcgJywgMikKKyAgICAgICAgICAgICAgICBpZiAoc2hhMSBhbmQgdHlwZSA9PSAnY29tbWl0JyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgbm90IGluIHVwZGF0ZWRfcmVmcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfcmVmKG5hbWUsIHJlZl9maWx0ZXJfcmVnZXgsIGlzX2luY2x1c2lvbl9maWx0ZXIpKToKKyAgICAgICAgICAgICAgICAgICAgc2hhMXMuYWRkKHNoYTEpCisKKyAgICAgICAgICAgIHNlbGYuX19vdGhlcl9yZWZfc2hhMXMgPSBzaGExcworCisgICAgICAgIHJldHVybiBzZWxmLl9fb3RoZXJfcmVmX3NoYTFzCisKKyAgICBkZWYgX2dldF9jb21taXRzX3NwZWNfaW5jbChzZWxmLCBuZXdfb3Jfb2xkLCByZWZlcmVuY2VfY2hhbmdlPU5vbmUpOgorICAgICAgICAiIiJHZXQgbmV3IG9yIG9sZCBTSEEtMSBmcm9tIG9uZSBvciBlYWNoIG9mIHRoZSBjaGFuZ2VkIHJlZnMuCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBTSEEtMSBjb21taXQgaWRlbnRpZmllciBzdHJpbmdzIHN1aXRhYmxlIGFzCisgICAgICAgIGFyZ3VtZW50cyB0byAnZ2l0IHJldi1saXN0JyAob3IgJ2dpdCBsb2cnIG9yIC4uLikuICBUaGUKKyAgICAgICAgcmV0dXJuZWQgaWRlbnRpZmllcnMgYXJlIGVpdGhlciB0aGUgb2xkIG9yIG5ldyB2YWx1ZXMgZnJvbSBvbmUKKyAgICAgICAgb3IgYWxsIG9mIHRoZSBjaGFuZ2VkIHJlZmVyZW5jZXMsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mCisgICAgICAgIG5ld19vcl9vbGQgYW5kIHJlZmVyZW5jZV9jaGFuZ2UuCisKKyAgICAgICAgbmV3X29yX29sZCBpcyBlaXRoZXIgdGhlIHN0cmluZyAnbmV3JyBvciB0aGUgc3RyaW5nICdvbGQnLiAgSWYKKyAgICAgICAgJ25ldycsIHRoZSByZXR1cm5lZCBTSEEtMSBpZGVudGlmaWVycyBhcmUgdGhlIG5ldyB2YWx1ZXMgZnJvbQorICAgICAgICBlYWNoIGNoYW5nZWQgcmVmZXJlbmNlLiAgSWYgJ29sZCcsIHRoZSBTSEEtMSBpZGVudGlmaWVycyBhcmUKKyAgICAgICAgdGhlIG9sZCB2YWx1ZXMgZnJvbSBlYWNoIGNoYW5nZWQgcmVmZXJlbmNlLgorCisgICAgICAgIElmIHJlZmVyZW5jZV9jaGFuZ2UgaXMgc3BlY2lmaWVkIGFuZCBub3QgTm9uZSwgb25seSB0aGUgbmV3IG9yCisgICAgICAgIG9sZCByZWZlcmVuY2UgZnJvbSB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZSBpcyBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgcmV0dXJuIHZhbHVlLgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBOb25lIGlmIHRoZXJlIGFyZSBubyBtYXRjaGluZyByZXZpc2lvbnMKKyAgICAgICAgKGUuZy4sIGJlY2F1c2UgYSBicmFuY2ggd2FzIGRlbGV0ZWQgYW5kIG5ld19vcl9vbGQgaXMgJ25ldycpLgorICAgICAgICAiIiIKKworICAgICAgICBpZiBub3QgcmVmZXJlbmNlX2NoYW5nZToKKyAgICAgICAgICAgIGluY2xfc3BlYyA9IHNvcnRlZCgKKyAgICAgICAgICAgICAgICBnZXRhdHRyKGNoYW5nZSwgbmV3X29yX29sZCkuc2hhMQorICAgICAgICAgICAgICAgIGZvciBjaGFuZ2UgaW4gc2VsZi5jaGFuZ2VzCisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihjaGFuZ2UsIG5ld19vcl9vbGQpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgaWYgbm90IGluY2xfc3BlYzoKKyAgICAgICAgICAgICAgICBpbmNsX3NwZWMgPSBOb25lCisgICAgICAgIGVsaWYgbm90IGdldGF0dHIocmVmZXJlbmNlX2NoYW5nZSwgbmV3X29yX29sZCkuY29tbWl0X3NoYTE6CisgICAgICAgICAgICBpbmNsX3NwZWMgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmNsX3NwZWMgPSBbZ2V0YXR0cihyZWZlcmVuY2VfY2hhbmdlLCBuZXdfb3Jfb2xkKS5jb21taXRfc2hhMV0KKyAgICAgICAgcmV0dXJuIGluY2xfc3BlYworCisgICAgZGVmIF9nZXRfY29tbWl0c19zcGVjX2V4Y2woc2VsZiwgbmV3X29yX29sZCk6CisgICAgICAgICIiIkdldCBleGNsdXNpb24gcmV2aXNpb25zIGZvciBkZXRlcm1pbmluZyBuZXcgb3IgZGlzY2FyZGVkIGNvbW1pdHMuCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBzdHJpbmdzIHN1aXRhYmxlIGFzIGFyZ3VtZW50cyB0byAnZ2l0CisgICAgICAgIHJldi1saXN0JyAob3IgJ2dpdCBsb2cnIG9yIC4uLikgdGhhdCB3aWxsIGV4Y2x1ZGUgYWxsCisgICAgICAgIGNvbW1pdHMgdGhhdCwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBuZXdfb3Jfb2xkLCB3ZXJlCisgICAgICAgIGVpdGhlciBwcmV2aW91c2x5IGluIHRoZSByZXBvc2l0b3J5ICh1c2VmdWwgZm9yIGRldGVybWluaW5nCisgICAgICAgIHdoaWNoIGNvbW1pdHMgYXJlIG5ldyB0byB0aGUgcmVwb3NpdG9yeSkgb3IgY3VycmVudGx5IGluIHRoZQorICAgICAgICByZXBvc2l0b3J5ICh1c2VmdWwgZm9yIGRldGVybWluaW5nIHdoaWNoIGNvbW1pdHMgd2VyZQorICAgICAgICBkaXNjYXJkZWQgZnJvbSB0aGUgcmVwb3NpdG9yeSkuCisKKyAgICAgICAgbmV3X29yX29sZCBpcyBlaXRoZXIgdGhlIHN0cmluZyAnbmV3JyBvciB0aGUgc3RyaW5nICdvbGQnLiAgSWYKKyAgICAgICAgJ25ldycsIHRoZSBjb21taXRzIHRvIGJlIGV4Y2x1ZGVkIGFyZSB0aG9zZSB0aGF0IHdlcmUgaW4gdGhlCisgICAgICAgIHJlcG9zaXRvcnkgYmVmb3JlIHRoZSBwdXNoLiAgSWYgJ29sZCcsIHRoZSBjb21taXRzIHRvIGJlCisgICAgICAgIGV4Y2x1ZGVkIGFyZSB0aG9zZSB0aGF0IGFyZSBjdXJyZW50bHkgaW4gdGhlIHJlcG9zaXRvcnkuICAiIiIKKworICAgICAgICBvbGRfb3JfbmV3ID0geydvbGQnOiAnbmV3JywgJ25ldyc6ICdvbGQnfVtuZXdfb3Jfb2xkXQorICAgICAgICBleGNsX3JldnMgPSBzZWxmLl9vdGhlcl9yZWZfc2hhMXMudW5pb24oCisgICAgICAgICAgICBnZXRhdHRyKGNoYW5nZSwgb2xkX29yX25ldykuc2hhMQorICAgICAgICAgICAgZm9yIGNoYW5nZSBpbiBzZWxmLmNoYW5nZXMKKyAgICAgICAgICAgIGlmIGdldGF0dHIoY2hhbmdlLCBvbGRfb3JfbmV3KS50eXBlIGluIFsnY29tbWl0JywgJ3RhZyddCisgICAgICAgICAgICApCisgICAgICAgIHJldHVybiBbJ14nICsgc2hhMSBmb3Igc2hhMSBpbiBzb3J0ZWQoZXhjbF9yZXZzKV0KKworICAgIGRlZiBnZXRfY29tbWl0c19zcGVjKHNlbGYsIG5ld19vcl9vbGQsIHJlZmVyZW5jZV9jaGFuZ2U9Tm9uZSk6CisgICAgICAgICIiIkdldCByZXYtbGlzdCBhcmd1bWVudHMgZm9yIGFkZGVkIG9yIGRpc2NhcmRlZCBjb21taXRzLgorCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2Ygc3RyaW5ncyBzdWl0YWJsZSBhcyBhcmd1bWVudHMgdG8gJ2dpdAorICAgICAgICByZXYtbGlzdCcgKG9yICdnaXQgbG9nJyBvciAuLi4pIHRoYXQgc2VsZWN0IHRob3NlIGNvbW1pdHMKKyAgICAgICAgdGhhdCwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBuZXdfb3Jfb2xkLCBhcmUgZWl0aGVyIG5ldyB0bworICAgICAgICB0aGUgcmVwb3NpdG9yeSBvciB3ZXJlIGRpc2NhcmRlZCBmcm9tIHRoZSByZXBvc2l0b3J5LgorCisgICAgICAgIG5ld19vcl9vbGQgaXMgZWl0aGVyIHRoZSBzdHJpbmcgJ25ldycgb3IgdGhlIHN0cmluZyAnb2xkJy4gIElmCisgICAgICAgICduZXcnLCB0aGUgcmV0dXJuZWQgbGlzdCBpcyB1c2VkIHRvIHNlbGVjdCBjb21taXRzIHRoYXQgYXJlCisgICAgICAgIG5ldyB0byB0aGUgcmVwb3NpdG9yeS4gIElmICdvbGQnLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdXNlZAorICAgICAgICB0byBzZWxlY3QgdGhlIGNvbW1pdHMgdGhhdCBoYXZlIGJlZW4gZGlzY2FyZGVkIGZyb20gdGhlCisgICAgICAgIHJlcG9zaXRvcnkuCisKKyAgICAgICAgSWYgcmVmZXJlbmNlX2NoYW5nZSBpcyBzcGVjaWZpZWQgYW5kIG5vdCBOb25lLCB0aGUgbmV3IG9yCisgICAgICAgIGRpc2NhcmRlZCBjb21taXRzIGFyZSBsaW1pdGVkIHRvIHRob3NlIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tCisgICAgICAgIHRoZSBuZXcgb3Igb2xkIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBOb25lIGlmIHRoZXJlIGFyZSBubyBhZGRlZCAob3IgZGlzY2FyZGVkKQorICAgICAgICByZXZpc2lvbnMuCisgICAgICAgICIiIgorICAgICAgICBrZXkgPSAobmV3X29yX29sZCwgcmVmZXJlbmNlX2NoYW5nZSkKKyAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLl9fY2FjaGVkX2NvbW1pdHNfc3BlYzoKKyAgICAgICAgICAgIHJldCA9IHNlbGYuX2dldF9jb21taXRzX3NwZWNfaW5jbChuZXdfb3Jfb2xkLCByZWZlcmVuY2VfY2hhbmdlKQorICAgICAgICAgICAgaWYgcmV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldC5leHRlbmQoc2VsZi5fZ2V0X2NvbW1pdHNfc3BlY19leGNsKG5ld19vcl9vbGQpKQorICAgICAgICAgICAgc2VsZi5fX2NhY2hlZF9jb21taXRzX3NwZWNba2V5XSA9IHJldAorICAgICAgICByZXR1cm4gc2VsZi5fX2NhY2hlZF9jb21taXRzX3NwZWNba2V5XQorCisgICAgZGVmIGdldF9uZXdfY29tbWl0cyhzZWxmLCByZWZlcmVuY2VfY2hhbmdlPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGNvbW1pdHMgYWRkZWQgYnkgdGhpcyBwdXNoLgorCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIG9iamVjdCBuYW1lcyBvZiBjb21taXRzIHRoYXQgd2VyZSBhZGRlZAorICAgICAgICBieSB0aGUgcGFydCBvZiB0aGlzIHB1c2ggcmVwcmVzZW50ZWQgYnkgcmVmZXJlbmNlX2NoYW5nZS4gIElmCisgICAgICAgIHJlZmVyZW5jZV9jaGFuZ2UgaXMgTm9uZSwgdGhlbiByZXR1cm4gYSBsaXN0IG9mICphbGwqIGNvbW1pdHMKKyAgICAgICAgYWRkZWQgYnkgdGhpcyBwdXNoLiIiIgorCisgICAgICAgIHNwZWMgPSBzZWxmLmdldF9jb21taXRzX3NwZWMoJ25ldycsIHJlZmVyZW5jZV9jaGFuZ2UpCisgICAgICAgIHJldHVybiBnaXRfcmV2X2xpc3Qoc3BlYykKKworICAgIGRlZiBnZXRfZGlzY2FyZGVkX2NvbW1pdHMoc2VsZiwgcmVmZXJlbmNlX2NoYW5nZSk6CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBkaXNjYXJkZWQgYnkgdGhpcyBwdXNoLgorCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIG9iamVjdCBuYW1lcyBvZiBjb21taXRzIHRoYXQgd2VyZQorICAgICAgICBlbnRpcmVseSBkaXNjYXJkZWQgZnJvbSB0aGUgcmVwb3NpdG9yeSBieSB0aGUgcGFydCBvZiB0aGlzCisgICAgICAgIHB1c2ggcmVwcmVzZW50ZWQgYnkgcmVmZXJlbmNlX2NoYW5nZS4iIiIKKworICAgICAgICBzcGVjID0gc2VsZi5nZXRfY29tbWl0c19zcGVjKCdvbGQnLCByZWZlcmVuY2VfY2hhbmdlKQorICAgICAgICByZXR1cm4gZ2l0X3Jldl9saXN0KHNwZWMpCisKKyAgICBkZWYgc2VuZF9lbWFpbHMoc2VsZiwgbWFpbGVyLCBib2R5X2ZpbHRlcj1Ob25lKToKKyAgICAgICAgIiIiVXNlIHNlbmQgYWxsIG9mIHRoZSBub3RpZmljYXRpb24gZW1haWxzIG5lZWRlZCBmb3IgdGhpcyBwdXNoLgorCisgICAgICAgIFVzZSBzZW5kIGFsbCBvZiB0aGUgbm90aWZpY2F0aW9uIGVtYWlscyAoaW5jbHVkaW5nIHJlZmVyZW5jZQorICAgICAgICBjaGFuZ2UgZW1haWxzIGFuZCBjb21taXQgZW1haWxzKSBuZWVkZWQgZm9yIHRoaXMgcHVzaC4gIFNlbmQKKyAgICAgICAgdGhlIGVtYWlscyB1c2luZyBtYWlsZXIuICBJZiBib2R5X2ZpbHRlciBpcyBub3QgTm9uZSwgdGhlbiB1c2UKKyAgICAgICAgaXQgdG8gZmlsdGVyIHRoZSBsaW5lcyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgdGhlIGVtYWlsCisgICAgICAgIGJvZHkuIiIiCisKKyAgICAgICAgIyBUaGUgc2hhMXMgb2YgY29tbWl0cyB0aGF0IHdlcmUgaW50cm9kdWNlZCBieSB0aGlzIHB1c2guCisgICAgICAgICMgVGhleSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGlzIHNldCBhcyB0aGV5IGFyZSBwcm9jZXNzZWQsIHRvCisgICAgICAgICMgZ3VhcmFudGVlIHRoYXQgb25lIChhbmQgb25seSBvbmUpIGVtYWlsIGlzIGdlbmVyYXRlZCBmb3IKKyAgICAgICAgIyBlYWNoIG5ldyBjb21taXQuCisgICAgICAgIHVuaGFuZGxlZF9zaGExcyA9IHNldChzZWxmLmdldF9uZXdfY29tbWl0cygpKQorICAgICAgICBzZW5kX2RhdGUgPSBJbmNyZW1lbnRhbERhdGVUaW1lKCkKKyAgICAgICAgZm9yIGNoYW5nZSBpbiBzZWxmLmNoYW5nZXM6CisgICAgICAgICAgICBzaGExcyA9IFtdCisgICAgICAgICAgICBmb3Igc2hhMSBpbiByZXZlcnNlZChsaXN0KHNlbGYuZ2V0X25ld19jb21taXRzKGNoYW5nZSkpKToKKyAgICAgICAgICAgICAgICBpZiBzaGExIGluIHVuaGFuZGxlZF9zaGExczoKKyAgICAgICAgICAgICAgICAgICAgc2hhMXMuYXBwZW5kKHNoYTEpCisgICAgICAgICAgICAgICAgICAgIHVuaGFuZGxlZF9zaGExcy5yZW1vdmUoc2hhMSkKKworICAgICAgICAgICAgIyBDaGVjayBpZiB3ZSd2ZSBnb3QgYW55b25lIHRvIHNlbmQgdG8KKyAgICAgICAgICAgIGlmIG5vdCBjaGFuZ2UucmVjaXBpZW50czoKKyAgICAgICAgICAgICAgICBjaGFuZ2UuZW52aXJvbm1lbnQubG9nX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICcqKiogbm8gcmVjaXBpZW50cyBjb25maWd1cmVkIHNvIG5vIGVtYWlsIHdpbGwgYmUgc2VudFxuJworICAgICAgICAgICAgICAgICAgICAnKioqIGZvciAlciB1cGRhdGUgJXMtPiVzJworICAgICAgICAgICAgICAgICAgICAlIChjaGFuZ2UucmVmbmFtZSwgY2hhbmdlLm9sZC5zaGExLCBjaGFuZ2UubmV3LnNoYTEsKQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjaGFuZ2UuZW52aXJvbm1lbnQucXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZS5lbnZpcm9ubWVudC5sb2dfbXNnKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1NlbmRpbmcgbm90aWZpY2F0aW9uIGVtYWlscyB0bzogJXMnICUgKGNoYW5nZS5yZWNpcGllbnRzLCkpCisgICAgICAgICAgICAgICAgZXh0cmFfdmFsdWVzID0geydzZW5kX2RhdGUnOiBuZXh0KHNlbmRfZGF0ZSl9CisKKyAgICAgICAgICAgICAgICByZXYgPSBjaGFuZ2Uuc2VuZF9zaW5nbGVfY29tYmluZWRfZW1haWwoc2hhMXMpCisgICAgICAgICAgICAgICAgaWYgcmV2OgorICAgICAgICAgICAgICAgICAgICBtYWlsZXIuc2VuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZS5nZW5lcmF0ZV9jb21iaW5lZF9lbWFpbChzZWxmLCByZXYsIGJvZHlfZmlsdGVyLCBleHRyYV92YWx1ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2LnJlY2lwaWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBjaGFuZ2UgaXMgbm93IGZ1bGx5IGhhbmRsZWQ7IG5vIG5lZWQgdG8gaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICMgaW5kaXZpZHVhbCByZXZpc2lvbnMgYW55IGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWFpbGVyLnNlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuZ2VuZXJhdGVfZW1haWwoc2VsZiwgYm9keV9maWx0ZXIsIGV4dHJhX3ZhbHVlcyksCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UucmVjaXBpZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgbWF4X2VtYWlscyA9IGNoYW5nZS5lbnZpcm9ubWVudC5tYXhjb21taXRlbWFpbHMKKyAgICAgICAgICAgIGlmIG1heF9lbWFpbHMgYW5kIGxlbihzaGExcykgPiBtYXhfZW1haWxzOgorICAgICAgICAgICAgICAgIGNoYW5nZS5lbnZpcm9ubWVudC5sb2dfd2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBUb28gbWFueSBuZXcgY29tbWl0cyAoJWQpLCBub3Qgc2VuZGluZyBjb21taXQgZW1haWxzLlxuJyAlIGxlbihzaGExcykgKworICAgICAgICAgICAgICAgICAgICAnKioqIFRyeSBzZXR0aW5nIG11bHRpbWFpbGhvb2subWF4Q29tbWl0RW1haWxzIHRvIGEgZ3JlYXRlciB2YWx1ZVxuJyArCisgICAgICAgICAgICAgICAgICAgICcqKiogQ3VycmVudGx5LCBtdWx0aW1haWxob29rLm1heENvbW1pdEVtYWlscz0lZCcgJSBtYXhfZW1haWxzCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgZm9yIChudW0sIHNoYTEpIGluIGVudW1lcmF0ZShzaGExcyk6CisgICAgICAgICAgICAgICAgcmV2ID0gUmV2aXNpb24oY2hhbmdlLCBHaXRPYmplY3Qoc2hhMSksIG51bT1udW0gKyAxLCB0b3Q9bGVuKHNoYTFzKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4ocmV2LnBhcmVudHMpID4gMSBhbmQgY2hhbmdlLmVudmlyb25tZW50LmV4Y2x1ZGVtZXJnZXJldmlzaW9uczoKKyAgICAgICAgICAgICAgICAgICAgIyBza2lwcGluZyBhIG1lcmdlIGNvbW1pdAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXYucmVjaXBpZW50cyBhbmQgcmV2LmNjX3JlY2lwaWVudHM6CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZS5lbnZpcm9ubWVudC5sb2dfbXNnKCcqKiogUmVwbGFjaW5nIENjOiB3aXRoIFRvOicpCisgICAgICAgICAgICAgICAgICAgIHJldi5yZWNpcGllbnRzID0gcmV2LmNjX3JlY2lwaWVudHMKKyAgICAgICAgICAgICAgICAgICAgcmV2LmNjX3JlY2lwaWVudHMgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgcmV2LnJlY2lwaWVudHM6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ZhbHVlcyA9IHsnc2VuZF9kYXRlJzogbmV4dChzZW5kX2RhdGUpfQorICAgICAgICAgICAgICAgICAgICBtYWlsZXIuc2VuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldi5nZW5lcmF0ZV9lbWFpbChzZWxmLCBib2R5X2ZpbHRlciwgZXh0cmFfdmFsdWVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldi5yZWNpcGllbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICMgQ29uc2lzdGVuY3kgY2hlY2s6CisgICAgICAgIGlmIHVuaGFuZGxlZF9zaGExczoKKyAgICAgICAgICAgIGNoYW5nZS5lbnZpcm9ubWVudC5sb2dfZXJyb3IoCisgICAgICAgICAgICAgICAgJ0VSUk9SOiBObyBlbWFpbHMgd2VyZSBzZW50IGZvciB0aGUgZm9sbG93aW5nIG5ldyBjb21taXRzOlxuJworICAgICAgICAgICAgICAgICcgICAgJXMnCisgICAgICAgICAgICAgICAgJSAoJ1xuICAgICcuam9pbihzb3J0ZWQodW5oYW5kbGVkX3NoYTFzKSksKQorICAgICAgICAgICAgICAgICkKKworCitkZWYgaW5jbHVkZV9yZWYocmVmbmFtZSwgcmVmX2ZpbHRlcl9yZWdleCwgaXNfaW5jbHVzaW9uX2ZpbHRlcik6CisgICAgZG9lc19tYXRjaCA9IGJvb2wocmVmX2ZpbHRlcl9yZWdleC5zZWFyY2gocmVmbmFtZSkpCisgICAgaWYgaXNfaW5jbHVzaW9uX2ZpbHRlcjoKKyAgICAgICAgcmV0dXJuIGRvZXNfbWF0Y2gKKyAgICBlbHNlOiAgIyBleGNsdXNpb24gZmlsdGVyIC0tIHdlIGluY2x1ZGUgdGhlIHJlZiBpZiB0aGUgcmVnZXggZG9lc24ndCBtYXRjaAorICAgICAgICByZXR1cm4gbm90IGRvZXNfbWF0Y2gKKworCitkZWYgcnVuX2FzX3Bvc3RfcmVjZWl2ZV9ob29rKGVudmlyb25tZW50LCBtYWlsZXIpOgorICAgIGVudmlyb25tZW50LmNoZWNrKCkKKyAgICBzZW5kX2ZpbHRlcl9yZWdleCwgc2VuZF9pc19pbmNsdXNpb25fZmlsdGVyID0gZW52aXJvbm1lbnQuZ2V0X3JlZl9maWx0ZXJfcmVnZXgoVHJ1ZSkKKyAgICByZWZfZmlsdGVyX3JlZ2V4LCBpc19pbmNsdXNpb25fZmlsdGVyID0gZW52aXJvbm1lbnQuZ2V0X3JlZl9maWx0ZXJfcmVnZXgoRmFsc2UpCisgICAgY2hhbmdlcyA9IFtdCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgbGluZSA9IHJlYWRfbGluZShzeXMuc3RkaW4pCisgICAgICAgIGlmIGxpbmUgPT0gJyc6CisgICAgICAgICAgICBicmVhaworICAgICAgICAob2xkcmV2LCBuZXdyZXYsIHJlZm5hbWUpID0gbGluZS5zdHJpcCgpLnNwbGl0KCcgJywgMikKKyAgICAgICAgZW52aXJvbm1lbnQuZ2V0X2xvZ2dlcigpLmRlYnVnKAorICAgICAgICAgICAgInJ1bl9hc19wb3N0X3JlY2VpdmVfaG9vazogb2xkcmV2PSVzLCBuZXdyZXY9JXMsIHJlZm5hbWU9JXMiICUKKyAgICAgICAgICAgIChvbGRyZXYsIG5ld3JldiwgcmVmbmFtZSkpCisKKyAgICAgICAgaWYgbm90IGluY2x1ZGVfcmVmKHJlZm5hbWUsIHJlZl9maWx0ZXJfcmVnZXgsIGlzX2luY2x1c2lvbl9maWx0ZXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IGluY2x1ZGVfcmVmKHJlZm5hbWUsIHNlbmRfZmlsdGVyX3JlZ2V4LCBzZW5kX2lzX2luY2x1c2lvbl9maWx0ZXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgY2hhbmdlcy5hcHBlbmQoCisgICAgICAgICAgICBSZWZlcmVuY2VDaGFuZ2UuY3JlYXRlKGVudmlyb25tZW50LCBvbGRyZXYsIG5ld3JldiwgcmVmbmFtZSkKKyAgICAgICAgICAgICkKKyAgICBpZiBub3QgY2hhbmdlczoKKyAgICAgICAgbWFpbGVyLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuCisgICAgcHVzaCA9IFB1c2goZW52aXJvbm1lbnQsIGNoYW5nZXMpCisgICAgdHJ5OgorICAgICAgICBwdXNoLnNlbmRfZW1haWxzKG1haWxlciwgYm9keV9maWx0ZXI9ZW52aXJvbm1lbnQuZmlsdGVyX2JvZHkpCisgICAgZmluYWxseToKKyAgICAgICAgbWFpbGVyLmNsb3NlKCkKKworCitkZWYgcnVuX2FzX3VwZGF0ZV9ob29rKGVudmlyb25tZW50LCBtYWlsZXIsIHJlZm5hbWUsIG9sZHJldiwgbmV3cmV2LCBmb3JjZV9zZW5kPUZhbHNlKToKKyAgICBlbnZpcm9ubWVudC5jaGVjaygpCisgICAgc2VuZF9maWx0ZXJfcmVnZXgsIHNlbmRfaXNfaW5jbHVzaW9uX2ZpbHRlciA9IGVudmlyb25tZW50LmdldF9yZWZfZmlsdGVyX3JlZ2V4KFRydWUpCisgICAgcmVmX2ZpbHRlcl9yZWdleCwgaXNfaW5jbHVzaW9uX2ZpbHRlciA9IGVudmlyb25tZW50LmdldF9yZWZfZmlsdGVyX3JlZ2V4KEZhbHNlKQorICAgIGlmIG5vdCBpbmNsdWRlX3JlZihyZWZuYW1lLCByZWZfZmlsdGVyX3JlZ2V4LCBpc19pbmNsdXNpb25fZmlsdGVyKToKKyAgICAgICAgcmV0dXJuCisgICAgaWYgbm90IGluY2x1ZGVfcmVmKHJlZm5hbWUsIHNlbmRfZmlsdGVyX3JlZ2V4LCBzZW5kX2lzX2luY2x1c2lvbl9maWx0ZXIpOgorICAgICAgICByZXR1cm4KKyAgICBjaGFuZ2VzID0gWworICAgICAgICBSZWZlcmVuY2VDaGFuZ2UuY3JlYXRlKAorICAgICAgICAgICAgZW52aXJvbm1lbnQsCisgICAgICAgICAgICByZWFkX2dpdF9vdXRwdXQoWydyZXYtcGFyc2UnLCAnLS12ZXJpZnknLCBvbGRyZXZdKSwKKyAgICAgICAgICAgIHJlYWRfZ2l0X291dHB1dChbJ3Jldi1wYXJzZScsICctLXZlcmlmeScsIG5ld3Jldl0pLAorICAgICAgICAgICAgcmVmbmFtZSwKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKyAgICBpZiBub3QgY2hhbmdlczoKKyAgICAgICAgbWFpbGVyLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuCisgICAgcHVzaCA9IFB1c2goZW52aXJvbm1lbnQsIGNoYW5nZXMsIGZvcmNlX3NlbmQpCisgICAgdHJ5OgorICAgICAgICBwdXNoLnNlbmRfZW1haWxzKG1haWxlciwgYm9keV9maWx0ZXI9ZW52aXJvbm1lbnQuZmlsdGVyX2JvZHkpCisgICAgZmluYWxseToKKyAgICAgICAgbWFpbGVyLmNsb3NlKCkKKworCitkZWYgY2hlY2tfcmVmX2ZpbHRlcihlbnZpcm9ubWVudCk6CisgICAgc2VuZF9maWx0ZXJfcmVnZXgsIHNlbmRfaXNfaW5jbHVzaW9uID0gZW52aXJvbm1lbnQuZ2V0X3JlZl9maWx0ZXJfcmVnZXgoVHJ1ZSkKKyAgICByZWZfZmlsdGVyX3JlZ2V4LCByZWZfaXNfaW5jbHVzaW9uID0gZW52aXJvbm1lbnQuZ2V0X3JlZl9maWx0ZXJfcmVnZXgoRmFsc2UpCisKKyAgICBkZWYgaW5jX2V4Y19sdXNpb24oYik6CisgICAgICAgIGlmIGI6CisgICAgICAgICAgICByZXR1cm4gJ2luY2x1c2lvbicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnZXhjbHVzaW9uJworCisgICAgaWYgc2VuZF9maWx0ZXJfcmVnZXg6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIkRvU2VuZC9Eb250U2VuZCBmaWx0ZXIgcmVnZXggKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgIChpbmNfZXhjX2x1c2lvbihzZW5kX2lzX2luY2x1c2lvbikpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKTogJyArIHNlbmRfZmlsdGVyX3JlZ2V4LnBhdHRlcm4gKworICAgICAgICAgICAgICAgICAgICAgICAgICdcbicpCisgICAgaWYgc2VuZF9maWx0ZXJfcmVnZXg6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIkluY2x1ZGUvRXhjbHVkZSBmaWx0ZXIgcmVnZXggKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgIChpbmNfZXhjX2x1c2lvbihyZWZfaXNfaW5jbHVzaW9uKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICcpOiAnICsgcmVmX2ZpbHRlcl9yZWdleC5wYXR0ZXJuICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nKQorICAgIHN5cy5zdGRvdXQud3JpdGUob3MubGluZXNlcCkKKworICAgIHN5cy5zdGRvdXQud3JpdGUoCisgICAgICAgICJSZWZzIG1hcmtlZCBhcyBFWENMVURFIGFyZSBleGNsdWRlZCBieSBlaXRoZXIgcmVmRmlsdGVySW5jbHVzaW9uUmVnZXhcbiIKKyAgICAgICAgIm9yIHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4LiBObyBlbWFpbHMgd2lsbCBiZSBzZW50IGZvciBjb21taXRzIGluY2x1ZGVkXG4iCisgICAgICAgICJpbiB0aGVzZSByZWZzLlxuIgorICAgICAgICAiUmVmcyBtYXJrZWQgYXMgRE9OVC1TRU5EIGFyZSBleGNsdWRlZCBieSBlaXRoZXIgcmVmRmlsdGVyRG9TZW5kUmVnZXggb3JcbiIKKyAgICAgICAgInJlZkZpbHRlckRvbnRTZW5kUmVnZXgsIGJ1dCBub3QgYnkgZWl0aGVyIHJlZkZpbHRlckluY2x1c2lvblJlZ2V4IG9yXG4iCisgICAgICAgICJyZWZGaWx0ZXJFeGNsdXNpb25SZWdleC4gRW1haWxzIHdpbGwgYmUgc2VudCBmb3IgY29tbWl0cyBpbmNsdWRlZCBpbiB0aGVzZVxuIgorICAgICAgICAicmVmcyBvbmx5IHdoZW4gdGhlIGNvbW1pdCByZWFjaGVzIGEgcmVmIHdoaWNoIGlzbid0IGV4Y2x1ZGVkLlxuIgorICAgICAgICAiUmVmcyBtYXJrZWQgYXMgRE8tU0VORCBhcmUgbm90IGV4Y2x1ZGVkIGJ5IGFueSBmaWx0ZXIuIEVtYWlscyB3aWxsXG4iCisgICAgICAgICJiZSBzZW50IG5vcm1hbGx5IGZvciBjb21taXRzIGluY2x1ZGVkIGluIHRoZXNlIHJlZnMuXG4iKQorCisgICAgc3lzLnN0ZG91dC53cml0ZShvcy5saW5lc2VwKQorCisgICAgZm9yIHJlZm5hbWUgaW4gcmVhZF9naXRfbGluZXMoWydmb3ItZWFjaC1yZWYnLCAnLS1mb3JtYXQnLCAnJShyZWZuYW1lKSddKToKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZShyZWZuYW1lKQorICAgICAgICBpZiBub3QgaW5jbHVkZV9yZWYocmVmbmFtZSwgcmVmX2ZpbHRlcl9yZWdleCwgcmVmX2lzX2luY2x1c2lvbik6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcgRVhDTFVERScpCisgICAgICAgIGVsaWYgbm90IGluY2x1ZGVfcmVmKHJlZm5hbWUsIHNlbmRfZmlsdGVyX3JlZ2V4LCBzZW5kX2lzX2luY2x1c2lvbik6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcgRE9OVC1TRU5EJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyBETy1TRU5EJykKKworICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKG9zLmxpbmVzZXApCisKKworZGVmIHNob3dfZW52KGVudmlyb25tZW50LCBvdXQpOgorICAgIG91dC53cml0ZSgnRW52aXJvbm1lbnQgdmFsdWVzOlxuJykKKyAgICBmb3IgKGssIHYpIGluIHNvcnRlZChlbnZpcm9ubWVudC5nZXRfdmFsdWVzKCkuaXRlbXMoKSk6CisgICAgICAgIGlmIGs6ICAjIERvbid0IHNob3cgdGhlIHsnJyA6ICcnfSBwYWlyLgorICAgICAgICAgICAgb3V0LndyaXRlKCcgICAgJXMgOiAlclxuJyAlIChrLCB2KSkKKyAgICBvdXQud3JpdGUoJ1xuJykKKyAgICAjIEZsdXNoIHRvIGF2b2lkIGludGVybGVhdmluZyB3aXRoIGZ1cnRoZXIgbG9nIG91dHB1dAorICAgIG91dC5mbHVzaCgpCisKKworZGVmIGNoZWNrX3NldHVwKGVudmlyb25tZW50KToKKyAgICBlbnZpcm9ubWVudC5jaGVjaygpCisgICAgc2hvd19lbnYoZW52aXJvbm1lbnQsIHN5cy5zdGRvdXQpCisgICAgc3lzLnN0ZG91dC53cml0ZSgiTm93LCBjaGVja2luZyB0aGF0IGdpdC1tdWx0aW1haWwncyBzdGFuZGFyZCBpbnB1dCAiCisgICAgICAgICAgICAgICAgICAgICAiaXMgcHJvcGVybHkgc2V0IC4uLiIgKyBvcy5saW5lc2VwKQorICAgIHN5cy5zdGRvdXQud3JpdGUoIlBsZWFzZSB0eXBlIHNvbWUgdGV4dCBhbmQgdGhlbiBwcmVzcyBSZXR1cm4iICsgb3MubGluZXNlcCkKKyAgICBzdGRpbiA9IHN5cy5zdGRpbi5yZWFkbGluZSgpCisgICAgc3lzLnN0ZG91dC53cml0ZSgiWW91IGhhdmUganVzdCBlbnRlcmVkOiIgKyBvcy5saW5lc2VwKQorICAgIHN5cy5zdGRvdXQud3JpdGUoc3RkaW4pCisgICAgc3lzLnN0ZG91dC53cml0ZSgiZ2l0LW11bHRpbWFpbCBzZWVtcyBwcm9wZXJseSBzZXQgdXAuIiArIG9zLmxpbmVzZXApCisKKworZGVmIGNob29zZV9tYWlsZXIoY29uZmlnLCBlbnZpcm9ubWVudCk6CisgICAgbWFpbGVyID0gY29uZmlnLmdldCgnbWFpbGVyJywgZGVmYXVsdD0nc2VuZG1haWwnKQorCisgICAgaWYgbWFpbGVyID09ICdzbXRwJzoKKyAgICAgICAgc210cHNlcnZlciA9IGNvbmZpZy5nZXQoJ3NtdHBzZXJ2ZXInLCBkZWZhdWx0PSdsb2NhbGhvc3QnKQorICAgICAgICBzbXRwc2VydmVydGltZW91dCA9IGZsb2F0KGNvbmZpZy5nZXQoJ3NtdHBzZXJ2ZXJ0aW1lb3V0JywgZGVmYXVsdD0xMC4wKSkKKyAgICAgICAgc210cHNlcnZlcmRlYnVnbGV2ZWwgPSBpbnQoY29uZmlnLmdldCgnc210cHNlcnZlcmRlYnVnbGV2ZWwnLCBkZWZhdWx0PTApKQorICAgICAgICBzbXRwZW5jcnlwdGlvbiA9IGNvbmZpZy5nZXQoJ3NtdHBlbmNyeXB0aW9uJywgZGVmYXVsdD0nbm9uZScpCisgICAgICAgIHNtdHB1c2VyID0gY29uZmlnLmdldCgnc210cHVzZXInLCBkZWZhdWx0PScnKQorICAgICAgICBzbXRwcGFzcyA9IGNvbmZpZy5nZXQoJ3NtdHBwYXNzJywgZGVmYXVsdD0nJykKKyAgICAgICAgc210cGNhY2VydHMgPSBjb25maWcuZ2V0KCdzbXRwY2FjZXJ0cycsIGRlZmF1bHQ9JycpCisgICAgICAgIG1haWxlciA9IFNNVFBNYWlsZXIoCisgICAgICAgICAgICBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIGVudmVsb3Blc2VuZGVyPShlbnZpcm9ubWVudC5nZXRfc2VuZGVyKCkgb3IgZW52aXJvbm1lbnQuZ2V0X2Zyb21hZGRyKCkpLAorICAgICAgICAgICAgc210cHNlcnZlcj1zbXRwc2VydmVyLCBzbXRwc2VydmVydGltZW91dD1zbXRwc2VydmVydGltZW91dCwKKyAgICAgICAgICAgIHNtdHBzZXJ2ZXJkZWJ1Z2xldmVsPXNtdHBzZXJ2ZXJkZWJ1Z2xldmVsLAorICAgICAgICAgICAgc210cGVuY3J5cHRpb249c210cGVuY3J5cHRpb24sCisgICAgICAgICAgICBzbXRwdXNlcj1zbXRwdXNlciwKKyAgICAgICAgICAgIHNtdHBwYXNzPXNtdHBwYXNzLAorICAgICAgICAgICAgc210cGNhY2VydHM9c210cGNhY2VydHMKKyAgICAgICAgICAgICkKKyAgICBlbGlmIG1haWxlciA9PSAnc2VuZG1haWwnOgorICAgICAgICBjb21tYW5kID0gY29uZmlnLmdldCgnc2VuZG1haWxjb21tYW5kJykKKyAgICAgICAgaWYgY29tbWFuZDoKKyAgICAgICAgICAgIGNvbW1hbmQgPSBzaGxleC5zcGxpdChjb21tYW5kKQorICAgICAgICBtYWlsZXIgPSBTZW5kTWFpbGVyKGVudmlyb25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9Y29tbWFuZCwgZW52ZWxvcGVzZW5kZXI9ZW52aXJvbm1lbnQuZ2V0X3NlbmRlcigpKQorICAgIGVsc2U6CisgICAgICAgIGVudmlyb25tZW50LmxvZ19lcnJvcigKKyAgICAgICAgICAgICdmYXRhbDogbXVsdGltYWlsaG9vay5tYWlsZXIgaXMgc2V0IHRvIGFuIGluY29ycmVjdCB2YWx1ZTogIiVzIlxuJyAlIG1haWxlciArCisgICAgICAgICAgICAncGxlYXNlIHVzZSBvbmUgb2YgInNtdHAiIG9yICJzZW5kbWFpbCIuJworICAgICAgICAgICAgKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHJldHVybiBtYWlsZXIKKworCitLTk9XTl9FTlZJUk9OTUVOVFMgPSB7CisgICAgJ2dlbmVyaWMnOiB7J2hpZ2hwcmVjJzogR2VuZXJpY0Vudmlyb25tZW50TWl4aW59LAorICAgICdnaXRvbGl0ZSc6IHsnaGlnaHByZWMnOiBHaXRvbGl0ZUVudmlyb25tZW50SGlnaFByZWNNaXhpbiwKKyAgICAgICAgICAgICAgICAgJ2xvd3ByZWMnOiBHaXRvbGl0ZUVudmlyb25tZW50TG93UHJlY01peGlufSwKKyAgICAnc3Rhc2gnOiB7J2hpZ2hwcmVjJzogU3Rhc2hFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4sCisgICAgICAgICAgICAgICdsb3dwcmVjJzogU3Rhc2hFbnZpcm9ubWVudExvd1ByZWNNaXhpbn0sCisgICAgJ2dlcnJpdCc6IHsnaGlnaHByZWMnOiBHZXJyaXRFbnZpcm9ubWVudEhpZ2hQcmVjTWl4aW4sCisgICAgICAgICAgICAgICAnbG93cHJlYyc6IEdlcnJpdEVudmlyb25tZW50TG93UHJlY01peGlufSwKKyAgICB9CisKKworZGVmIGNob29zZV9lbnZpcm9ubWVudChjb25maWcsIG9zZW52PU5vbmUsIGVudj1Ob25lLCByZWNpcGllbnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGhvb2tfaW5mbz1Ob25lKToKKyAgICBlbnZfbmFtZSA9IGNob29zZV9lbnZpcm9ubWVudF9uYW1lKGNvbmZpZywgZW52LCBvc2VudikKKyAgICBlbnZpcm9ubWVudF9rbGFzcyA9IGJ1aWxkX2Vudmlyb25tZW50X2tsYXNzKGVudl9uYW1lKQorICAgIGVudiA9IGJ1aWxkX2Vudmlyb25tZW50KGVudmlyb25tZW50X2tsYXNzLCBlbnZfbmFtZSwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zZW52LCByZWNpcGllbnRzLCBob29rX2luZm8pCisgICAgcmV0dXJuIGVudgorCisKK2RlZiBjaG9vc2VfZW52aXJvbm1lbnRfbmFtZShjb25maWcsIGVudiwgb3NlbnYpOgorICAgIGlmIG5vdCBvc2VudjoKKyAgICAgICAgb3NlbnYgPSBvcy5lbnZpcm9uCisKKyAgICBpZiBub3QgZW52OgorICAgICAgICBlbnYgPSBjb25maWcuZ2V0KCdlbnZpcm9ubWVudCcpCisKKyAgICBpZiBub3QgZW52OgorICAgICAgICBpZiAnR0xfVVNFUicgaW4gb3NlbnYgYW5kICdHTF9SRVBPJyBpbiBvc2VudjoKKyAgICAgICAgICAgIGVudiA9ICdnaXRvbGl0ZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudiA9ICdnZW5lcmljJworICAgIHJldHVybiBlbnYKKworCitDT01NT05fRU5WSVJPTk1FTlRfTUlYSU5TID0gWworICAgIENvbmZpZ1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLAorICAgIENMSVJlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLAorICAgIENvbmZpZ1JlZkZpbHRlckVudmlyb25tZW50TWl4aW4sCisgICAgUHJvamVjdGRlc2NFbnZpcm9ubWVudE1peGluLAorICAgIENvbmZpZ01heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICBDb21wdXRlRlFETkVudmlyb25tZW50TWl4aW4sCisgICAgQ29uZmlnRmlsdGVyTGluZXNFbnZpcm9ubWVudE1peGluLAorICAgIFB1c2hlckRvbWFpbkVudmlyb25tZW50TWl4aW4sCisgICAgQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4sCisgICAgXQorCisKK2RlZiBidWlsZF9lbnZpcm9ubWVudF9rbGFzcyhlbnZfbmFtZSk6CisgICAgaWYgJ2NsYXNzJyBpbiBLTk9XTl9FTlZJUk9OTUVOVFNbZW52X25hbWVdOgorICAgICAgICByZXR1cm4gS05PV05fRU5WSVJPTk1FTlRTW2Vudl9uYW1lXVsnY2xhc3MnXQorCisgICAgZW52aXJvbm1lbnRfbWl4aW5zID0gW10KKyAgICBrbm93bl9lbnYgPSBLTk9XTl9FTlZJUk9OTUVOVFNbZW52X25hbWVdCisgICAgaWYgJ2hpZ2hwcmVjJyBpbiBrbm93bl9lbnY6CisgICAgICAgIGhpZ2hfcHJlY19taXhpbiA9IGtub3duX2VudlsnaGlnaHByZWMnXQorICAgICAgICBlbnZpcm9ubWVudF9taXhpbnMuYXBwZW5kKGhpZ2hfcHJlY19taXhpbikKKyAgICBlbnZpcm9ubWVudF9taXhpbnMgPSBlbnZpcm9ubWVudF9taXhpbnMgKyBDT01NT05fRU5WSVJPTk1FTlRfTUlYSU5TCisgICAgaWYgJ2xvd3ByZWMnIGluIGtub3duX2VudjoKKyAgICAgICAgbG93X3ByZWNfbWl4aW4gPSBrbm93bl9lbnZbJ2xvd3ByZWMnXQorICAgICAgICBlbnZpcm9ubWVudF9taXhpbnMuYXBwZW5kKGxvd19wcmVjX21peGluKQorICAgIGVudmlyb25tZW50X21peGlucy5hcHBlbmQoRW52aXJvbm1lbnQpCisgICAga2xhc3NfbmFtZSA9IGVudl9uYW1lLmNhcGl0YWxpemUoKSArICdFbnZpcm9ubWVudCcKKyAgICBlbnZpcm9ubWVudF9rbGFzcyA9IHR5cGUoCisgICAgICAgIGtsYXNzX25hbWUsCisgICAgICAgIHR1cGxlKGVudmlyb25tZW50X21peGlucyksCisgICAgICAgIHt9LAorICAgICAgICApCisgICAgS05PV05fRU5WSVJPTk1FTlRTW2Vudl9uYW1lXVsnY2xhc3MnXSA9IGVudmlyb25tZW50X2tsYXNzCisgICAgcmV0dXJuIGVudmlyb25tZW50X2tsYXNzCisKKworR2Vycml0RW52aXJvbm1lbnQgPSBidWlsZF9lbnZpcm9ubWVudF9rbGFzcygnZ2Vycml0JykKK1N0YXNoRW52aXJvbm1lbnQgPSBidWlsZF9lbnZpcm9ubWVudF9rbGFzcygnc3Rhc2gnKQorR2l0b2xpdGVFbnZpcm9ubWVudCA9IGJ1aWxkX2Vudmlyb25tZW50X2tsYXNzKCdnaXRvbGl0ZScpCitHZW5lcmljRW52aXJvbm1lbnQgPSBidWlsZF9lbnZpcm9ubWVudF9rbGFzcygnZ2VuZXJpYycpCisKKworZGVmIGJ1aWxkX2Vudmlyb25tZW50KGVudmlyb25tZW50X2tsYXNzLCBlbnYsIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICBvc2VudiwgcmVjaXBpZW50cywgaG9va19pbmZvKToKKyAgICBlbnZpcm9ubWVudF9rdyA9IHsKKyAgICAgICAgJ29zZW52Jzogb3NlbnYsCisgICAgICAgICdjb25maWcnOiBjb25maWcsCisgICAgICAgIH0KKworICAgIGlmIGVudiA9PSAnc3Rhc2gnOgorICAgICAgICBlbnZpcm9ubWVudF9rd1sndXNlciddID0gaG9va19pbmZvWydzdGFzaF91c2VyJ10KKyAgICAgICAgZW52aXJvbm1lbnRfa3dbJ3JlcG8nXSA9IGhvb2tfaW5mb1snc3Rhc2hfcmVwbyddCisgICAgZWxpZiBlbnYgPT0gJ2dlcnJpdCc6CisgICAgICAgIGVudmlyb25tZW50X2t3Wydwcm9qZWN0J10gPSBob29rX2luZm9bJ3Byb2plY3QnXQorICAgICAgICBlbnZpcm9ubWVudF9rd1snc3VibWl0dGVyJ10gPSBob29rX2luZm9bJ3N1Ym1pdHRlciddCisgICAgICAgIGVudmlyb25tZW50X2t3Wyd1cGRhdGVfbWV0aG9kJ10gPSBob29rX2luZm9bJ3VwZGF0ZV9tZXRob2QnXQorCisgICAgZW52aXJvbm1lbnRfa3dbJ2NsaV9yZWNpcGllbnRzJ10gPSByZWNpcGllbnRzCisKKyAgICByZXR1cm4gZW52aXJvbm1lbnRfa2xhc3MoKiplbnZpcm9ubWVudF9rdykKKworCitkZWYgZ2V0X3ZlcnNpb24oKToKKyAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSkKKyAgICAgICAgICAgIGdpdF92ZXJzaW9uID0gcmVhZF9naXRfb3V0cHV0KFsnZGVzY3JpYmUnLCAnLS10YWdzJywgJ0hFQUQnXSkKKyAgICAgICAgICAgIGlmIGdpdF92ZXJzaW9uID09IF9fdmVyc2lvbl9fOgorICAgICAgICAgICAgICAgIHJldHVybiBnaXRfdmVyc2lvbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzICglcyknICUgKF9fdmVyc2lvbl9fLCBnaXRfdmVyc2lvbikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNoZGlyKG9sZGN3ZCkKKyAgICByZXR1cm4gX192ZXJzaW9uX18KKworCitkZWYgY29tcHV0ZV9nZXJyaXRfb3B0aW9ucyhvcHRpb25zLCBhcmdzLCByZXF1aXJlZF9nZXJyaXRfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19yZWZuYW1lKToKKyAgICBpZiBOb25lIGluIHJlcXVpcmVkX2dlcnJpdF9vcHRpb25zOgorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJFcnJvcjogU3BlY2lmeSBhbGwgb2YgLS1vbGRyZXYsIC0tbmV3cmV2LCAtLXJlZm5hbWUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIC0tcHJvamVjdDsgb3Igbm9uZSBvZiB0aGVtLiIpCisKKyAgICBpZiBvcHRpb25zLmVudmlyb25tZW50IG5vdCBpbiAoTm9uZSwgJ2dlcnJpdCcpOgorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJOb24tZ2Vycml0IGVudmlyb25tZW50cyBpbmNvbXBhdGlibGUgd2l0aCAtLW9sZHJldiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICItLW5ld3JldiwgLS1yZWZuYW1lLCBhbmQgLS1wcm9qZWN0IikKKyAgICBvcHRpb25zLmVudmlyb25tZW50ID0gJ2dlcnJpdCcKKworICAgIGlmIGFyZ3M6CisgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoIkVycm9yOiBQb3NpdGlvbmFsIHBhcmFtZXRlcnMgbm90IGFsbG93ZWQgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb2xkcmV2LCAtLW5ld3JldiwgYW5kIC0tcmVmbmFtZS4iKQorCisgICAgIyBHZXJyaXQgb2RkbHkgb21pdHMgJ3JlZnMvaGVhZHMvJyBpbiB0aGUgcmVmbmFtZSB3aGVuIGNhbGxpbmcKKyAgICAjIHJlZi11cGRhdGVkIGhvb2s7IHB1dCBpdCBiYWNrLgorICAgIGdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpCisgICAgaWYgKG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZ2l0X2RpciwgcmF3X3JlZm5hbWUpKSBhbmQKKyAgICAgICAgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGdpdF9kaXIsICdyZWZzJywgJ2hlYWRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19yZWZuYW1lKSkpOgorICAgICAgICBvcHRpb25zLnJlZm5hbWUgPSAncmVmcy9oZWFkcy8nICsgb3B0aW9ucy5yZWZuYW1lCisKKyAgICAjIE5ldyByZXZpc2lvbnMgY2FuIGFwcGVhciBpbiBhIGdlcnJpdCByZXBvc2l0b3J5IGVpdGhlciBkdWUgdG8gc29tZW9uZQorICAgICMgcHVzaGluZyBkaXJlY3RseSAoaW4gd2hpY2ggY2FzZSBvcHRpb25zLnN1Ym1pdHRlciB3aWxsIGJlIHNldCksIG9yIHRoZXkKKyAgICAjIGNhbiBwcmVzcyAiU3VibWl0IHRoaXMgcGF0Y2hzZXQiIGluIHRoZSB3ZWIgVUkgZm9yIHNvbWUgQ1IgKGluIHdoaWNoCisgICAgIyBjYXNlIG9wdGlvbnMuc3VibWl0dGVyIHdpbGwgbm90IGJlIHNldCBhbmQgZ2Vycml0IHdpbGwgbm90IGhhdmUgcHJvdmlkZWQKKyAgICAjIHVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB3aG8gcHJlc3NlZCB0aGUgYnV0dG9uKS4KKyAgICAjCisgICAgIyBOb3RlIGZvciB0aGUgbml0LXBpY2t5OiBJJ20gbHVtcGluZyBpbiBSRVNUIEFQSSBjYWxscyBhbmQgdGhlIHNzaAorICAgICMgZ2Vycml0IHJldmlldyBjb21tYW5kIGluIHdpdGggIlN1Ym1pdCB0aGlzIHBhdGNoc2V0IiBidXR0b24sIHNpbmNlIHRoZXkKKyAgICAjIGhhdmUgdGhlIHNhbWUgZWZmZWN0LgorICAgIGlmIG9wdGlvbnMuc3VibWl0dGVyOgorICAgICAgICB1cGRhdGVfbWV0aG9kID0gJ3B1c2hlZCcKKyAgICAgICAgIyBUaGUgc3VibWl0dGVyIGFyZ3VtZW50IGlzIGFsbW9zdCBhbiBSRkMgMjgyMiBlbWFpbCBhZGRyZXNzOyBjaGFuZ2UgaXQKKyAgICAgICAgIyBmcm9tICdVc2VyIE5hbWUgKGVtYWlsQGRvbWFpbiknIHRvICdVc2VyIE5hbWUgPGVtYWlsQGRvbWFpbj4nIHNvIGl0IGlzCisgICAgICAgIG9wdGlvbnMuc3VibWl0dGVyID0gb3B0aW9ucy5zdWJtaXR0ZXIucmVwbGFjZSgnKCcsICc8JykucmVwbGFjZSgnKScsICc+JykKKyAgICBlbHNlOgorICAgICAgICB1cGRhdGVfbWV0aG9kID0gJ3N1Ym1pdHRlZCcKKyAgICAgICAgIyBHZXJyaXQga25ldyB3aG8gc3VibWl0dGVkIHRoaXMgcGF0Y2hzZXQsIGJ1dCB0aHJldyB0aGF0IGluZm9ybWF0aW9uCisgICAgICAgICMgYXdheSB3aGVuIGl0IGludm9rZWQgdGhpcyBob29rLiAgSG93ZXZlciwgKklGKiBHZXJyaXQgY3JlYXRlZCBhCisgICAgICAgICMgbWVyZ2UgdG8gYnJpbmcgdGhlIHBhdGNoc2V0IGluIChwcm9qZWN0ICdTdWJtaXQgVHlwZScgaXMgZWl0aGVyCisgICAgICAgICMgIkFsd2F5cyBNZXJnZSIsIG9yIGlzICJNZXJnZSBpZiBOZWNlc3NhcnkiIGFuZCBoYXBwZW5zIHRvIGJlCisgICAgICAgICMgbmVjZXNzYXJ5IGZvciB0aGlzIHBhcnRpY3VsYXIgQ1IpLCB0aGVuIGl0IHdpbGwgaGF2ZSB0aGUgY29tbWl0dGVyCisgICAgICAgICMgb2YgdGhhdCBtZXJnZSBiZSAnR2Vycml0IENvZGUgUmV2aWV3JyBhbmQgdGhlIGF1dGhvciB3aWxsIGJlIHRoZQorICAgICAgICAjIHBlcnNvbiB3aG8gcmVxdWVzdGVkIHRoZSBzdWJtaXNzaW9uIG9mIHRoZSBDUi4gIFNpbmNlIHRoaXMgaXMgZmFpcmx5CisgICAgICAgICMgbGlrZWx5IGZvciBtb3N0IGdlcnJpdCBpbnN0YWxsYXRpb25zIChvZiBhIHJlYXNvbmFibGUgc2l6ZSksIGl0J3MKKyAgICAgICAgIyB3b3J0aCB0aGUgZXh0cmEgZWZmb3J0IHRvIHRyeSB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBzdWJtaXR0ZXIuCisgICAgICAgIHJldl9pbmZvID0gcmVhZF9naXRfbGluZXMoWydsb2cnLCAnLS1uby13YWxrJywgJy0tbWVyZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tZm9ybWF0PSVjTiVuJWFOIDwlYUU+Jywgb3B0aW9ucy5uZXdyZXZdKQorICAgICAgICBpZiByZXZfaW5mbyBhbmQgcmV2X2luZm9bMF0gPT0gJ0dlcnJpdCBDb2RlIFJldmlldyc6CisgICAgICAgICAgICBvcHRpb25zLnN1Ym1pdHRlciA9IHJldl9pbmZvWzFdCisKKyAgICAjIFdlIHBhc3MgYmFjayByZWZuYW1lLCBvbGRyZXYsIG5ld3JldiBhcyBhcmdzIGJlY2F1c2UgdGhlbiB0aGUKKyAgICAjIGdlcnJpdCByZWYtdXBkYXRlZCBob29rIGlzIG11Y2ggbGlrZSB0aGUgZ2l0IHVwZGF0ZSBob29rCisgICAgcmV0dXJuIChvcHRpb25zLAorICAgICAgICAgICAgW29wdGlvbnMucmVmbmFtZSwgb3B0aW9ucy5vbGRyZXYsIG9wdGlvbnMubmV3cmV2XSwKKyAgICAgICAgICAgIHsncHJvamVjdCc6IG9wdGlvbnMucHJvamVjdCwgJ3N1Ym1pdHRlcic6IG9wdGlvbnMuc3VibWl0dGVyLAorICAgICAgICAgICAgICd1cGRhdGVfbWV0aG9kJzogdXBkYXRlX21ldGhvZH0pCisKKworZGVmIGNoZWNrX2hvb2tfc3BlY2lmaWNfYXJncyhvcHRpb25zLCBhcmdzKToKKyAgICByYXdfcmVmbmFtZSA9IG9wdGlvbnMucmVmbmFtZQorICAgICMgQ29udmVydCBlYWNoIHN0cmluZyBvcHRpb24gdW5pY29kZSBmb3IgUHl0aG9uMy4KKyAgICBpZiBQWVRIT04zOgorICAgICAgICBvcHRzID0gWydlbnZpcm9ubWVudCcsICdyZWNpcGllbnRzJywgJ29sZHJldicsICduZXdyZXYnLCAncmVmbmFtZScsCisgICAgICAgICAgICAgICAgJ3Byb2plY3QnLCAnc3VibWl0dGVyJywgJ3N0YXNoX3VzZXInLCAnc3Rhc2hfcmVwbyddCisgICAgICAgIGZvciBvcHQgaW4gb3B0czoKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9wdGlvbnMsIG9wdCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIob3B0aW9ucywgb3B0KQorICAgICAgICAgICAgaWYgb2JqOgorICAgICAgICAgICAgICAgIGVuYyA9IG9iai5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgICAgICAgICAgZGVjID0gZW5jLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpCisgICAgICAgICAgICAgICAgc2V0YXR0cihvcHRpb25zLCBvcHQsIGRlYykKKworICAgICMgRmlyc3QgY2hlY2sgZm9yIHN0YXNoIGFyZ3VtZW50cworICAgIGlmIChvcHRpb25zLnN0YXNoX3VzZXIgaXMgTm9uZSkgIT0gKG9wdGlvbnMuc3Rhc2hfcmVwbyBpcyBOb25lKToKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiRXJyb3I6IFNwZWNpZnkgYm90aCBvZiAtLXN0YXNoLXVzZXIgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiLS1zdGFzaC1yZXBvIG9yIG5laXRoZXIuIikKKyAgICBpZiBvcHRpb25zLnN0YXNoX3VzZXI6CisgICAgICAgIG9wdGlvbnMuZW52aXJvbm1lbnQgPSAnc3Rhc2gnCisgICAgICAgIHJldHVybiBvcHRpb25zLCBhcmdzLCB7J3N0YXNoX3VzZXInOiBvcHRpb25zLnN0YXNoX3VzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXNoX3JlcG8nOiBvcHRpb25zLnN0YXNoX3JlcG99CisKKyAgICAjIEZpbmFsbHksIGNoZWNrIGZvciBnZXJyaXQgc3BlY2lmaWMgYXJndW1lbnRzCisgICAgcmVxdWlyZWRfZ2Vycml0X29wdGlvbnMgPSAob3B0aW9ucy5vbGRyZXYsIG9wdGlvbnMubmV3cmV2LCBvcHRpb25zLnJlZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm9qZWN0KQorICAgIGlmIHJlcXVpcmVkX2dlcnJpdF9vcHRpb25zICE9IChOb25lLCkgKiA0OgorICAgICAgICByZXR1cm4gY29tcHV0ZV9nZXJyaXRfb3B0aW9ucyhvcHRpb25zLCBhcmdzLCByZXF1aXJlZF9nZXJyaXRfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3X3JlZm5hbWUpCisKKyAgICAjIE5vIHNwZWNpYWwgb3B0aW9ucyBpbiB1c2UsIGp1c3QgcmV0dXJuIHdoYXQgd2Ugc3RhcnRlZCB3aXRoCisgICAgcmV0dXJuIG9wdGlvbnMsIGFyZ3MsIHt9CisKKworY2xhc3MgTG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIHBhcnNlX3ZlcmJvc2Uoc2VsZiwgdmVyYm9zZSk6CisgICAgICAgIGlmIHZlcmJvc2UgPiAwOgorICAgICAgICAgICAgcmV0dXJuIGxvZ2dpbmcuREVCVUcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBsb2dnaW5nLklORk8KKworICAgIGRlZiBjcmVhdGVfbG9nX2ZpbGUoc2VsZiwgZW52aXJvbm1lbnQsIG5hbWUsIHBhdGgsIHZlcmJvc2l0eSk6CisgICAgICAgIGxvZ19maWxlID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKKyAgICAgICAgZmlsZV9oYW5kbGVyID0gbG9nZ2luZy5GaWxlSGFuZGxlcihwYXRoKQorICAgICAgICBsb2dfZm10ID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUoYXNjdGltZSlzIFslKGxldmVsbmFtZSktNS41c10gICUobWVzc2FnZSlzIikKKyAgICAgICAgZmlsZV9oYW5kbGVyLnNldEZvcm1hdHRlcihsb2dfZm10KQorICAgICAgICBsb2dfZmlsZS5hZGRIYW5kbGVyKGZpbGVfaGFuZGxlcikKKyAgICAgICAgbG9nX2ZpbGUuc2V0TGV2ZWwodmVyYm9zaXR5KQorICAgICAgICByZXR1cm4gbG9nX2ZpbGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCk6CisgICAgICAgIHNlbGYuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLmxvZ2dlcnMgPSBbXQorICAgICAgICBzdGRlcnJfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dpdF9tdWx0aW1haWwuc3RkZXJyJykKKworICAgICAgICBjbGFzcyBFbmNvZGVkU3RkZXJyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgd3JpdGVfc3RyKHN5cy5zdGRlcnIsIHgpCisKKyAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgICAgICBzdGRlcnJfaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihFbmNvZGVkU3RkZXJyKCkpCisgICAgICAgIHN0ZGVycl9sb2cuYWRkSGFuZGxlcihzdGRlcnJfaGFuZGxlcikKKyAgICAgICAgc3RkZXJyX2xvZy5zZXRMZXZlbChzZWxmLnBhcnNlX3ZlcmJvc2UoZW52aXJvbm1lbnQudmVyYm9zZSkpCisgICAgICAgIHNlbGYubG9nZ2Vycy5hcHBlbmQoc3RkZXJyX2xvZykKKworICAgICAgICBpZiBlbnZpcm9ubWVudC5kZWJ1Z19sb2dfZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlYnVnX2xvZ19maWxlID0gc2VsZi5jcmVhdGVfbG9nX2ZpbGUoCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsICdnaXRfbXVsdGltYWlsLmRlYnVnJywgZW52aXJvbm1lbnQuZGVidWdfbG9nX2ZpbGUsIGxvZ2dpbmcuREVCVUcpCisgICAgICAgICAgICBzZWxmLmxvZ2dlcnMuYXBwZW5kKGRlYnVnX2xvZ19maWxlKQorCisgICAgICAgIGlmIGVudmlyb25tZW50LmxvZ19maWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9nX2ZpbGUgPSBzZWxmLmNyZWF0ZV9sb2dfZmlsZSgKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgJ2dpdF9tdWx0aW1haWwuZmlsZScsIGVudmlyb25tZW50LmxvZ19maWxlLCBsb2dnaW5nLklORk8pCisgICAgICAgICAgICBzZWxmLmxvZ2dlcnMuYXBwZW5kKGxvZ19maWxlKQorCisgICAgICAgIGlmIGVudmlyb25tZW50LmVycm9yX2xvZ19maWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZXJyb3JfbG9nX2ZpbGUgPSBzZWxmLmNyZWF0ZV9sb2dfZmlsZSgKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgJ2dpdF9tdWx0aW1haWwuZXJyb3InLCBlbnZpcm9ubWVudC5lcnJvcl9sb2dfZmlsZSwgbG9nZ2luZy5FUlJPUikKKyAgICAgICAgICAgIHNlbGYubG9nZ2Vycy5hcHBlbmQoZXJyb3JfbG9nX2ZpbGUpCisKKyAgICBkZWYgaW5mbyhzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGZvciBsIGluIHNlbGYubG9nZ2VyczoKKyAgICAgICAgICAgIGwuaW5mbyhtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGZvciBsIGluIHNlbGYubG9nZ2VyczoKKyAgICAgICAgICAgIGwuZGVidWcobXNnLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgd2FybmluZyhzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGZvciBsIGluIHNlbGYubG9nZ2VyczoKKyAgICAgICAgICAgIGwud2FybmluZyhtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBlcnJvcihzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGZvciBsIGluIHNlbGYubG9nZ2VyczoKKyAgICAgICAgICAgIGwuZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpCisKKworZGVmIG1haW4oYXJncyk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbj1fX2RvY19fLAorICAgICAgICB1c2FnZT0nJXByb2cgW09QVElPTlNdXG4gICBvcjogJXByb2cgW09QVElPTlNdIFJFRk5BTUUgT0xEUkVWIE5FV1JFVicsCisgICAgICAgICkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAnLS1lbnZpcm9ubWVudCcsICctLWVudicsIGFjdGlvbj0nc3RvcmUnLCB0eXBlPSdjaG9pY2UnLAorICAgICAgICBjaG9pY2VzPWxpc3QoS05PV05fRU5WSVJPTk1FTlRTLmtleXMoKSksIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnQ2hvb3NlIHR5cGUgb2YgZW52aXJvbm1lbnQgaXMgaW4gdXNlLiAgRGVmYXVsdCBpcyB0YWtlbiBmcm9tICcKKyAgICAgICAgICAgICdtdWx0aW1haWxob29rLmVudmlyb25tZW50IGlmIHNldDsgb3RoZXJ3aXNlICJnZW5lcmljIi4nCisgICAgICAgICAgICApLAorICAgICAgICApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctLXN0ZG91dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9J091dHB1dCBlbWFpbHMgdG8gc3Rkb3V0IHJhdGhlciB0aGFuIHNlbmRpbmcgdGhlbS4nLAorICAgICAgICApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctLXJlY2lwaWVudHMnLCBhY3Rpb249J3N0b3JlJywgZGVmYXVsdD1Ob25lLAorICAgICAgICBoZWxwPSdTZXQgbGlzdCBvZiBlbWFpbCByZWNpcGllbnRzIGZvciBhbGwgdHlwZXMgb2YgZW1haWxzLicsCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tc2hvdy1lbnYnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdXcml0ZSB0byBzdGRlcnIgdGhlIHZhbHVlcyBkZXRlcm1pbmVkIGZvciB0aGUgZW52aXJvbm1lbnQgJworICAgICAgICAgICAgJyhpbnRlbmRlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKSwgdGhlbiBwcm9jZWVkIG5vcm1hbGx5LicKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tZm9yY2Utc2VuZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KAorICAgICAgICAgICAgJ0ZvcmNlIHNlbmRpbmcgcmVmY2hhbmdlIGVtYWlsIHdoZW4gdXNpbmcgYXMgYW4gdXBkYXRlIGhvb2suICcKKyAgICAgICAgICAgICdUaGlzIGlzIHVzZWZ1bCB0byB3b3JrIGFyb3VuZCB0aGUgdW5yZWxpYWJsZSBuZXcgY29tbWl0cyAnCisgICAgICAgICAgICAnZGV0ZWN0aW9uIGluIHRoaXMgbW9kZS4nCisgICAgICAgICAgICApLAorICAgICAgICApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctYycsIG1ldGF2YXI9IjxuYW1lPj08dmFsdWU+IiwgYWN0aW9uPSdhcHBlbmQnLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdQYXNzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGhyb3VnaCB0byBnaXQuICBUaGUgdmFsdWUgZ2l2ZW4gJworICAgICAgICAgICAgJ3dpbGwgb3ZlcnJpZGUgdmFsdWVzIGZyb20gY29uZmlndXJhdGlvbiBmaWxlcy4gIFNlZSB0aGUgLWMgb3B0aW9uICcKKyAgICAgICAgICAgICdvZiBnaXQoMSkgZm9yIG1vcmUgZGV0YWlscy4gIChPbmx5IHdvcmtzIHdpdGggZ2l0ID49IDEuNy4zKScKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tdmVyc2lvbicsICctdicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KAorICAgICAgICAgICAgIkRpc3BsYXkgZ2l0LW11bHRpbWFpbCdzIHZlcnNpb24iCisgICAgICAgICAgICApLAorICAgICAgICApCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tcHl0aG9uLXZlcnNpb24nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICJEaXNwbGF5IHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB1c2VkIGJ5IGdpdC1tdWx0aW1haWwiCisgICAgICAgICAgICApLAorICAgICAgICApCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tY2hlY2stcmVmLWZpbHRlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KAorICAgICAgICAgICAgJ0xpc3QgcmVmcyBhbmQgc2hvdyBpbmZvcm1hdGlvbiBvbiBob3cgZ2l0LW11bHRpbWFpbCAnCisgICAgICAgICAgICAnd2lsbCBwcm9jZXNzIHRoZW0uJworICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICAjIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBwZXJtaXQgdGhpcyBzY3JpcHQgdG8gYmUgcnVuIGFzIGEgZ2Vycml0CisgICAgIyByZWYtdXBkYXRlZCBob29rLiAgU2VlIGUuZy4KKyAgICAjIGNvZGUuZ29vZ2xlLmNvbS9wL2dlcnJpdC9zb3VyY2UvYnJvd3NlL0RvY3VtZW50YXRpb24vY29uZmlnLWhvb2tzLnR4dAorICAgICMgV2Ugc3VwcHJlc3MgaGVscCBmb3IgdGhlc2UgaXRlbXMsIHNpbmNlIHRoZXNlIGFyZSBzcGVjaWZpYyB0byBnZXJyaXQsCisgICAgIyBhbmQgd2UgZG9uJ3Qgd2FudCB1c2VycyBkaXJlY3RseSB1c2luZyB0aGVtIGFueSB3YXkgb3RoZXIgdGhhbiBob3cgdGhlCisgICAgIyBnZXJyaXQgcmVmLXVwZGF0ZWQgaG9vayBpcyBjYWxsZWQuCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tb2xkcmV2JywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1uZXdyZXYnLCBhY3Rpb249J3N0b3JlJywgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLXJlZm5hbWUnLCBhY3Rpb249J3N0b3JlJywgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLXByb2plY3QnLCBhY3Rpb249J3N0b3JlJywgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLXN1Ym1pdHRlcicsIGFjdGlvbj0nc3RvcmUnLCBoZWxwPW9wdHBhcnNlLlNVUFBSRVNTX0hFTFApCisKKyAgICAjIFRoZSBmb2xsb3dpbmcgYWxsb3cgdGhpcyB0byBiZSBydW4gYXMgYSBzdGFzaCBhc3luY2hyb25vdXMgcG9zdC1yZWNlaXZlCisgICAgIyBob29rIChhbG1vc3QgaWRlbnRpY2FsIHRvIGEgZ2l0IHBvc3QtcmVjZWl2ZSBob29rIGJ1dCB0cmlnZ2VyZWQgYWxzbyBmb3IKKyAgICAjIG1lcmdlcyBvZiBwdWxsIHJlcXVlc3RzIGZyb20gdGhlIFVJKS4gIFdlIHN1cHByZXNzIGhlbHAgZm9yIHRoZXNlIGl0ZW1zLAorICAgICMgc2luY2UgdGhlc2UgYXJlIHNwZWNpZmljIHRvIHN0YXNoLgorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLXN0YXNoLXVzZXInLCBhY3Rpb249J3N0b3JlJywgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLXN0YXNoLXJlcG8nLCBhY3Rpb249J3N0b3JlJywgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKyAgICAob3B0aW9ucywgYXJncywgaG9va19pbmZvKSA9IGNoZWNrX2hvb2tfc3BlY2lmaWNfYXJncyhvcHRpb25zLCBhcmdzKQorCisgICAgaWYgb3B0aW9ucy52ZXJzaW9uOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdnaXQtbXVsdGltYWlsIHZlcnNpb24gJyArIGdldF92ZXJzaW9uKCkgKyAnXG4nKQorICAgICAgICByZXR1cm4KKworICAgIGlmIG9wdGlvbnMucHl0aG9uX3ZlcnNpb246CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1B5dGhvbiB2ZXJzaW9uICcgKyBzeXMudmVyc2lvbiArICdcbicpCisgICAgICAgIHJldHVybgorCisgICAgaWYgb3B0aW9ucy5jOgorICAgICAgICBDb25maWcuYWRkX2NvbmZpZ19wYXJhbWV0ZXJzKG9wdGlvbnMuYykKKworICAgIGNvbmZpZyA9IENvbmZpZygnbXVsdGltYWlsaG9vaycpCisKKyAgICBlbnZpcm9ubWVudCA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGVudmlyb25tZW50ID0gY2hvb3NlX2Vudmlyb25tZW50KAorICAgICAgICAgICAgY29uZmlnLCBvc2Vudj1vcy5lbnZpcm9uLAorICAgICAgICAgICAgZW52PW9wdGlvbnMuZW52aXJvbm1lbnQsCisgICAgICAgICAgICByZWNpcGllbnRzPW9wdGlvbnMucmVjaXBpZW50cywKKyAgICAgICAgICAgIGhvb2tfaW5mbz1ob29rX2luZm8sCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgb3B0aW9ucy5zaG93X2VudjoKKyAgICAgICAgICAgIHNob3dfZW52KGVudmlyb25tZW50LCBzeXMuc3RkZXJyKQorCisgICAgICAgIGlmIG9wdGlvbnMuc3Rkb3V0IG9yIGVudmlyb25tZW50LnN0ZG91dDoKKyAgICAgICAgICAgIG1haWxlciA9IE91dHB1dE1haWxlcihzeXMuc3Rkb3V0LCBlbnZpcm9ubWVudCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1haWxlciA9IGNob29zZV9tYWlsZXIoY29uZmlnLCBlbnZpcm9ubWVudCkKKworICAgICAgICBtdXN0X2NoZWNrX3NldHVwID0gb3MuZW52aXJvbi5nZXQoJ0dJVF9NVUxUSU1BSUxfQ0hFQ0tfU0VUVVAnKQorICAgICAgICBpZiBtdXN0X2NoZWNrX3NldHVwID09ICcnOgorICAgICAgICAgICAgbXVzdF9jaGVja19zZXR1cCA9IEZhbHNlCisgICAgICAgIGlmIG9wdGlvbnMuY2hlY2tfcmVmX2ZpbHRlcjoKKyAgICAgICAgICAgIGNoZWNrX3JlZl9maWx0ZXIoZW52aXJvbm1lbnQpCisgICAgICAgIGVsaWYgbXVzdF9jaGVja19zZXR1cDoKKyAgICAgICAgICAgIGNoZWNrX3NldHVwKGVudmlyb25tZW50KQorICAgICAgICAjIER1YWwgbW9kZTogaWYgYXJndW1lbnRzIHdlcmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHJ1bgorICAgICAgICAjIGxpa2UgYW4gdXBkYXRlIGhvb2s7IG90aGVyd2lzZSwgcnVuIGFzIGEgcG9zdC1yZWNlaXZlIGhvb2suCisgICAgICAgIGVsaWYgYXJnczoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSAhPSAzOgorICAgICAgICAgICAgICAgIHBhcnNlci5lcnJvcignTmVlZCB6ZXJvIG9yIHRocmVlIG5vbi1vcHRpb24gYXJndW1lbnRzJykKKyAgICAgICAgICAgIChyZWZuYW1lLCBvbGRyZXYsIG5ld3JldikgPSBhcmdzCisgICAgICAgICAgICBlbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZGVidWcoCisgICAgICAgICAgICAgICAgInJ1bl9hc191cGRhdGVfaG9vazogcmVmbmFtZT0lcywgb2xkcmV2PSVzLCBuZXdyZXY9JXMsIGZvcmNlX3NlbmQ9JXMiICUKKyAgICAgICAgICAgICAgICAocmVmbmFtZSwgb2xkcmV2LCBuZXdyZXYsIG9wdGlvbnMuZm9yY2Vfc2VuZCkpCisgICAgICAgICAgICBydW5fYXNfdXBkYXRlX2hvb2soZW52aXJvbm1lbnQsIG1haWxlciwgcmVmbmFtZSwgb2xkcmV2LCBuZXdyZXYsIG9wdGlvbnMuZm9yY2Vfc2VuZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJ1bl9hc19wb3N0X3JlY2VpdmVfaG9vayhlbnZpcm9ubWVudCwgbWFpbGVyKQorICAgIGV4Y2VwdCBDb25maWd1cmF0aW9uRXhjZXB0aW9uOgorICAgICAgICBzeXMuZXhpdChzeXMuZXhjX2luZm8oKVsxXSkKKyAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICB0LCBlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG4nKSAgIyBBdm9pZCBtaXhpbmcgbWVzc2FnZSB3aXRoIHByZXZpb3VzIG91dHB1dAorICAgICAgICBtc2cgPSAoCisgICAgICAgICAgICAnRXhjZXB0aW9uIFwnJyArIHQuX19uYW1lX18gKworICAgICAgICAgICAgJ1wnIHJhaXNlZC4gUGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIHRvXG4nCisgICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9pc3N1ZXNcbicKKyAgICAgICAgICAgICd3aXRoIHRoZSBpbmZvcm1hdGlvbiBiZWxvdzpcblxuJworICAgICAgICAgICAgJ2dpdC1tdWx0aW1haWwgdmVyc2lvbiAnICsgZ2V0X3ZlcnNpb24oKSArICdcbicKKyAgICAgICAgICAgICdQeXRob24gdmVyc2lvbiAnICsgc3lzLnZlcnNpb24gKyAnXG4nICsKKyAgICAgICAgICAgIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVudmlyb25tZW50LmdldF9sb2dnZXIoKS5lcnJvcihtc2cpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUobXNnKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbihzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9taWdyYXRlLW1haWxob29rLWNvbmZpZyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL21pZ3JhdGUtbWFpbGhvb2stY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI0MWJhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9taWdyYXRlLW1haWxob29rLWNvbmZpZwpAQCAtMCwwICsxLDI3NCBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiJNaWdyYXRlIGEgcG9zdC1yZWNlaXZlLWVtYWlsIGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNhYmxlIHdpdGggZ2l0X211bHRpbWFpbC5weS4KKworU2VlIFJFQURNRS5taWdyYXRlLWZyb20tcG9zdC1yZWNlaXZlLWVtYWlsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9wdHBhcnNlCisKK2Zyb20gZ2l0X211bHRpbWFpbCBpbXBvcnQgQ29tbWFuZEVycm9yCitmcm9tIGdpdF9tdWx0aW1haWwgaW1wb3J0IENvbmZpZworZnJvbSBnaXRfbXVsdGltYWlsIGltcG9ydCByZWFkX291dHB1dAorCisKK09MRF9OQU1FUyA9IFsKKyAgICAnbWFpbGluZ2xpc3QnLAorICAgICdhbm5vdW5jZWxpc3QnLAorICAgICdlbnZlbG9wZXNlbmRlcicsCisgICAgJ2VtYWlscHJlZml4JywKKyAgICAnc2hvd3JldicsCisgICAgJ2VtYWlsbWF4bGluZXMnLAorICAgICdkaWZmb3B0cycsCisgICAgJ3NjYW5jb21taXRmb3JjYycsCisgICAgXQorCitORVdfTkFNRVMgPSBbCisgICAgJ2Vudmlyb25tZW50JywKKyAgICAncmVwb25hbWUnLAorICAgICdtYWlsaW5nbGlzdCcsCisgICAgJ3JlZmNoYW5nZWxpc3QnLAorICAgICdjb21taXRsaXN0JywKKyAgICAnYW5ub3VuY2VsaXN0JywKKyAgICAnYW5ub3VuY2VzaG9ydGxvZycsCisgICAgJ2VudmVsb3Blc2VuZGVyJywKKyAgICAnYWRtaW5pc3RyYXRvcicsCisgICAgJ2VtYWlscHJlZml4JywKKyAgICAnZW1haWxtYXhsaW5lcycsCisgICAgJ2RpZmZvcHRzJywKKyAgICAnZW1haWxkb21haW4nLAorICAgICdzY2FuY29tbWl0Zm9yY2MnLAorICAgIF0KKworCitJTkZPID0gIiIiXAorCitTVUNDRVNTIQorCitZb3VyIHBvc3QtcmVjZWl2ZS1lbWFpbCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNvbnZlcnRlZCB0bworZ2l0LW11bHRpbWFpbCBmb3JtYXQuICBQbGVhc2Ugc2VlIFJFQURNRSBhbmQKK1JFQURNRS5taWdyYXRlLWZyb20tcG9zdC1yZWNlaXZlLWVtYWlsIHRvIGxlYXJuIGFib3V0IG90aGVyCitnaXQtbXVsdGltYWlsIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcy4KKworRm9yIGV4YW1wbGUsIGdpdC1tdWx0aW1haWwgaGFzIHRoZSBmb2xsb3dpbmcgbmV3IG9wdGlvbnMgd2l0aCBubworZXF1aXZhbGVudCBpbiBwb3N0LXJlY2VpdmUtZW1haWwuICBZb3UgbWlnaHQgd2FudCB0byByZWFkIGFib3V0IHRoZW0KK3RvIHNlZSBpZiB0aGV5IHdvdWxkIGJlIHVzZWZ1bCBpbiB5b3VyIHNpdHVhdGlvbjoKKworIiIiCisKKworZGVmIF9jaGVja19vbGRfY29uZmlnX2V4aXN0cyhvbGQpOgorICAgICIiIkNoZWNrIHRoYXQgYXQgbGVhc3Qgb25lIG9sZCBjb25maWd1cmF0aW9uIHZhbHVlIGlzIHNldC4iIiIKKworICAgIGZvciBuYW1lIGluIE9MRF9OQU1FUzoKKyAgICAgICAgaWYgbmFtZSBpbiBvbGQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIF9jaGVja19uZXdfY29uZmlnX2NsZWFyKG5ldyk6CisgICAgIiIiQ2hlY2sgdGhhdCBub25lIG9mIHRoZSBuZXcgY29uZmlndXJhdGlvbiBuYW1lcyBhcmUgc2V0LiIiIgorCisgICAgcmV0dmFsID0gVHJ1ZQorICAgIGZvciBuYW1lIGluIE5FV19OQU1FUzoKKyAgICAgICAgaWYgbmFtZSBpbiBuZXc6CisgICAgICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSU5GTzogVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHZhbHVlcyBhbHJlYWR5IGV4aXN0OlxuXG4nKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnICAgICIlcy4lcyJcbicgJSAobmV3LnNlY3Rpb24sIG5hbWUpKQorICAgICAgICAgICAgcmV0dmFsID0gRmFsc2UKKworICAgIHJldHVybiByZXR2YWwKKworCitkZWYgZXJhc2VfdmFsdWVzKGNvbmZpZywgbmFtZXMpOgorICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICBpZiBuYW1lIGluIGNvbmZpZzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcuLi51bnNldHRpbmcgIiVzLiVzIlxuJyAlIChjb25maWcuc2VjdGlvbiwgbmFtZSkpCisgICAgICAgICAgICAgICAgY29uZmlnLnVuc2V0X2FsbChuYW1lKQorICAgICAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgICAgICAgICAnXG5XQVJOSU5HOiBjb3VsZCBub3QgdW5zZXQgIiVzLiVzIi4gICcKKyAgICAgICAgICAgICAgICAgICAgJ1BlcmhhcHMgaXQgaXMgbm90IHNldCBhdCB0aGUgLS1sb2NhbCBsZXZlbD9cblxuJworICAgICAgICAgICAgICAgICAgICAlIChjb25maWcuc2VjdGlvbiwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgKQorCisKK2RlZiBpc19zZWN0aW9uX2VtcHR5KHNlY3Rpb24sIGxvY2FsKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZmYgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHNlY3Rpb24gaXMgZW1wdHkuCisKKyAgICBJZmYgbG9jYWwgaXMgVHJ1ZSwgdXNlIHRoZSAtLWxvY2FsIG9wdGlvbiB3aGVuIGludm9raW5nICdnaXQKKyAgICBjb25maWcnLiIiIgorCisgICAgaWYgbG9jYWw6CisgICAgICAgIGxvY2FsX29wdGlvbiA9IFsnLS1sb2NhbCddCisgICAgZWxzZToKKyAgICAgICAgbG9jYWxfb3B0aW9uID0gW10KKworICAgIHRyeToKKyAgICAgICAgcmVhZF9vdXRwdXQoCisgICAgICAgICAgICBbJ2dpdCcsICdjb25maWcnXSArCisgICAgICAgICAgICBsb2NhbF9vcHRpb24gKworICAgICAgICAgICAgWyctLWdldC1yZWdleHAnLCAnXiVzXC4nICUgKHNlY3Rpb24sKV0KKyAgICAgICAgICAgICkKKyAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICB0LCBlLCB0cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBpZiBlLnJldGNvZGUgPT0gMToKKyAgICAgICAgICAgICMgVGhpcyBtZWFucyB0aGF0IG5vIHNldHRpbmdzIHdlcmUgZm91bmQuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgcmVtb3ZlX3NlY3Rpb25faWZfZW1wdHkoc2VjdGlvbik6CisgICAgIiIiSWYgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHNlY3Rpb24gaXMgZW1wdHksIGRlbGV0ZSBpdC4iIiIKKworICAgIHRyeToKKyAgICAgICAgZW1wdHkgPSBpc19zZWN0aW9uX2VtcHR5KHNlY3Rpb24sIGxvY2FsPVRydWUpCisgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgIyBPbGRlciB2ZXJzaW9ucyBvZiBnaXQgZG8gbm90IHN1cHBvcnQgdGhlIC0tbG9jYWwgb3B0aW9uLCBzbworICAgICAgICAjIGlmIHRoZSBmaXJzdCBhdHRlbXB0IGZhaWxzLCB0cnkgd2l0aG91dCAtLWxvY2FsLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbXB0eSA9IGlzX3NlY3Rpb25fZW1wdHkoc2VjdGlvbiwgbG9jYWw9RmFsc2UpCisgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgICAgICdcbklORk86IElmIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiAiJXMuKiIgaXMgZW1wdHksIHlvdSBtaWdodCB3YW50ICcKKyAgICAgICAgICAgICAgICAndG8gZGVsZXRlIGl0LlxuXG4nCisgICAgICAgICAgICAgICAgJSAoc2VjdGlvbiwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBpZiBlbXB0eToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLi4ucmVtb3Zpbmcgc2VjdGlvbiAiJXMuKiJcbicgJSAoc2VjdGlvbiwpKQorICAgICAgICByZWFkX291dHB1dChbJ2dpdCcsICdjb25maWcnLCAnLS1yZW1vdmUtc2VjdGlvbicsIHNlY3Rpb25dKQorICAgIGVsc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICAgICAnXG5JTkZPOiBDb25maWd1cmF0aW9uIHNlY3Rpb24gIiVzLioiIHN0aWxsIGhhcyBjb250ZW50cy4gICcKKyAgICAgICAgICAgICdJdCB3aWxsIG5vdCBiZSBkZWxldGVkLlxuXG4nCisgICAgICAgICAgICAlIChzZWN0aW9uLCkKKyAgICAgICAgICAgICkKKworCitkZWYgbWlncmF0ZV9jb25maWcoc3RyaWN0PUZhbHNlLCByZXRhaW49RmFsc2UsIG92ZXJ3cml0ZT1GYWxzZSk6CisgICAgb2xkID0gQ29uZmlnKCdob29rcycpCisgICAgbmV3ID0gQ29uZmlnKCdtdWx0aW1haWxob29rJykKKyAgICBpZiBub3QgX2NoZWNrX29sZF9jb25maWdfZXhpc3RzKG9sZCk6CisgICAgICAgIHN5cy5leGl0KAorICAgICAgICAgICAgJ1lvdXIgcmVwb3NpdG9yeSBoYXMgbm8gcG9zdC1yZWNlaXZlLWVtYWlsIGNvbmZpZ3VyYXRpb24uICAnCisgICAgICAgICAgICAnTm90aGluZyB0byBkby4nCisgICAgICAgICAgICApCisgICAgaWYgbm90IF9jaGVja19uZXdfY29uZmlnX2NsZWFyKG5ldyk6CisgICAgICAgIGlmIG92ZXJ3cml0ZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuV0FSTklORzogRXJhc2luZyB0aGUgYWJvdmUgdmFsdWVzLi4uXG5cbicpCisgICAgICAgICAgICBlcmFzZV92YWx1ZXMobmV3LCBORVdfTkFNRVMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMuZXhpdCgKKyAgICAgICAgICAgICAgICAnXG5FUlJPUjogUmVmdXNpbmcgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIHZhbHVlcy4gIFVzZSB0aGUgLS1vdmVyd3JpdGVcbicKKyAgICAgICAgICAgICAgICAnb3B0aW9uIHRvIGNvbnRpbnVlIGFueXdheS4nCisgICAgICAgICAgICAgICAgKQorCisgICAgbmFtZSA9ICdzaG93cmV2JworICAgIGlmIG5hbWUgaW4gb2xkOgorICAgICAgICBtc2cgPSAnZ2l0LW11bHRpbWFpbCBkb2VzIG5vdCBzdXBwb3J0ICIlcy4lcyInICUgKG9sZC5zZWN0aW9uLCBuYW1lLCkKKyAgICAgICAgaWYgc3RyaWN0OgorICAgICAgICAgICAgc3lzLmV4aXQoCisgICAgICAgICAgICAgICAgJ0VSUk9SOiAlcy5cbicKKyAgICAgICAgICAgICAgICAnUGxlYXNlIHVuc2V0IHRoYXQgdmFsdWUgdGhlbiB0cnkgYWdhaW4sIG9yIHJ1biB3aXRob3V0IC0tc3RyaWN0LicKKyAgICAgICAgICAgICAgICAlIChtc2csKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuV0FSTklORzogJXMgKGlnbm9yaW5nKS5cblxuJyAlIChtc2csKSkKKworICAgIGZvciBuYW1lIGluIFsnbWFpbGluZ2xpc3QnLCAnYW5ub3VuY2VsaXN0J106CisgICAgICAgIGlmIG5hbWUgaW4gb2xkOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICAgICAnLi4uY29weWluZyAiJXMuJXMiIHRvICIlcy4lcyJcbicgJSAob2xkLnNlY3Rpb24sIG5hbWUsIG5ldy5zZWN0aW9uLCBuYW1lKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIG9sZF9yZWNpcGllbnRzID0gb2xkLmdldF9hbGwobmFtZSwgZGVmYXVsdD1Ob25lKQorICAgICAgICAgICAgb2xkX3JlY2lwaWVudHMgPSAnLCAnLmpvaW4oby5zdHJpcCgpIGZvciBvIGluIG9sZF9yZWNpcGllbnRzKQorICAgICAgICAgICAgbmV3LnNldF9yZWNpcGllbnRzKG5hbWUsIG9sZF9yZWNpcGllbnRzKQorCisgICAgaWYgc3RyaWN0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgJy4uLnNldHRpbmcgIiVzLmNvbW1pdGxpc3QiIHRvIHRoZSBlbXB0eSBzdHJpbmdcbicgJSAobmV3LnNlY3Rpb24sKQorICAgICAgICAgICAgKQorICAgICAgICBuZXcuc2V0X3JlY2lwaWVudHMoJ2NvbW1pdGxpc3QnLCAnJykKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICcuLi5zZXR0aW5nICIlcy5hbm5vdW5jZXNob3J0bG9nIiB0byAidHJ1ZSJcbicgJSAobmV3LnNlY3Rpb24sKQorICAgICAgICAgICAgKQorICAgICAgICBuZXcuc2V0KCdhbm5vdW5jZXNob3J0bG9nJywgJ3RydWUnKQorCisgICAgZm9yIG5hbWUgaW4gWydlbnZlbG9wZXNlbmRlcicsICdlbWFpbG1heGxpbmVzJywgJ2RpZmZvcHRzJywgJ3NjYW5jb21taXRmb3JjYyddOgorICAgICAgICBpZiBuYW1lIGluIG9sZDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICAgICAgICAgJy4uLmNvcHlpbmcgIiVzLiVzIiB0byAiJXMuJXMiXG4nICUgKG9sZC5zZWN0aW9uLCBuYW1lLCBuZXcuc2VjdGlvbiwgbmFtZSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBuZXcuc2V0KG5hbWUsIG9sZC5nZXQobmFtZSkpCisKKyAgICBuYW1lID0gJ2VtYWlscHJlZml4JworICAgIGlmIG5hbWUgaW4gb2xkOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgJy4uLmNvcHlpbmcgIiVzLiVzIiB0byAiJXMuJXMiXG4nICUgKG9sZC5zZWN0aW9uLCBuYW1lLCBuZXcuc2VjdGlvbiwgbmFtZSkKKyAgICAgICAgICAgICkKKyAgICAgICAgbmV3LnNldChuYW1lLCBvbGQuZ2V0KG5hbWUpKQorICAgIGVsaWYgc3RyaWN0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgJy4uLnNldHRpbmcgIiVzLiVzIiB0byAiW1NDTV0iIHRvIHByZXNlcnZlIG9sZCBzdWJqZWN0IGxpbmVzXG4nCisgICAgICAgICAgICAlIChuZXcuc2VjdGlvbiwgbmFtZSkKKyAgICAgICAgICAgICkKKyAgICAgICAgbmV3LnNldChuYW1lLCAnW1NDTV0nKQorCisgICAgaWYgbm90IHJldGFpbjoKKyAgICAgICAgZXJhc2VfdmFsdWVzKG9sZCwgT0xEX05BTUVTKQorICAgICAgICByZW1vdmVfc2VjdGlvbl9pZl9lbXB0eShvbGQuc2VjdGlvbikKKworICAgIHN5cy5zdGRlcnIud3JpdGUoSU5GTykKKyAgICBmb3IgbmFtZSBpbiBORVdfTkFNRVM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIE9MRF9OQU1FUzoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyAgICAiJXMuJXMiXG4nICUgKG5ldy5zZWN0aW9uLCBuYW1lLCkpCisgICAgc3lzLnN0ZGVyci53cml0ZSgnXG4nKQorCisKK2RlZiBtYWluKGFyZ3MpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb249X19kb2NfXywKKyAgICAgICAgdXNhZ2U9JyVwcm9nIFtPUFRJT05TXScsCisgICAgICAgICkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAnLS1zdHJpY3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdTbGF2aXNobHkgY29uZmlndXJlIGdpdC1tdWx0aW1haWwgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB0byAnCisgICAgICAgICAgICAndGhlIHBvc3QtcmVjZWl2ZS1lbWFpbCBjb25maWd1cmF0aW9uLiAgRGVmYXVsdCBpcyB0byB0dXJuICcKKyAgICAgICAgICAgICdvbiBzb21lIG5ldyBmZWF0dXJlcyB0aGF0IGhhdmUgbm8gZXF1aXZhbGVudCBpbiBwb3N0LXJlY2VpdmUtZW1haWwuJworICAgICAgICAgICAgKSwKKyAgICAgICAgKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAnLS1yZXRhaW4nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdSZXRhaW4gdGhlIHBvc3QtcmVjZWl2ZS1lbWFpbCBjb25maWd1cmF0aW9uIHZhbHVlcy4gICcKKyAgICAgICAgICAgICdEZWZhdWx0IGlzIHRvIGRlbGV0ZSB0aGVtIGFmdGVyIHRoZSBuZXcgdmFsdWVzIGFyZSBzZXQuJworICAgICAgICAgICAgKSwKKyAgICAgICAgKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAnLS1vdmVyd3JpdGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdPdmVyd3JpdGUgYW55IGV4aXN0aW5nIGdpdC1tdWx0aW1haWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gICcKKyAgICAgICAgICAgICdEZWZhdWx0IGlzIHRvIGFib3J0IGlmIHN1Y2ggc2V0dGluZ3MgYWxyZWFkeSBleGlzdC4nCisgICAgICAgICAgICApLAorICAgICAgICApCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgYXJnczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCdVbmV4cGVjdGVkIGFyZ3VtZW50czogJXMnICUgKCcgJy5qb2luKGFyZ3MpLCkpCisKKyAgICBtaWdyYXRlX2NvbmZpZyhzdHJpY3Q9b3B0aW9ucy5zdHJpY3QsIHJldGFpbj1vcHRpb25zLnJldGFpbiwgb3ZlcndyaXRlPW9wdGlvbnMub3ZlcndyaXRlKQorCisKK21haW4oc3lzLmFyZ3ZbMTpdKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvcG9zdC1yZWNlaXZlLmV4YW1wbGUgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9wb3N0LXJlY2VpdmUuZXhhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjk4YzVhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvcG9zdC1yZWNlaXZlLmV4YW1wbGUKQEAgLTAsMCArMSwxMDEgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIiIiRXhhbXBsZSBwb3N0LXJlY2VpdmUgaG9vayBiYXNlZCBvbiBnaXQtbXVsdGltYWlsLgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIHVzZSBnaXQtbXVsdGltYWlsIGlzIHRvIHVzZSB0aGUgc2NyaXB0CitnaXRfbXVsdGltYWlsLnB5IGRpcmVjdGx5IGFzIGEgcG9zdC1yZWNlaXZlIGhvb2ssIGFuZCB0byBjb25maWd1cmUgaXQKK3VzaW5nIEdpdCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLiAgWW91IGNhbgorYWxzbyB3cml0ZSB5b3VyIG93biBQeXRob24gd3JhcHBlciBmb3IgbW9yZSBhZHZhbmNlZCBjb25maWd1cmFiaWxpdHksCit1c2luZyBnaXRfbXVsdGltYWlsLnB5IGFzIGEgUHl0aG9uIG1vZHVsZS4KKworVGhpcyBzY3JpcHQgaXMgYSBzaW1wbGUgZXhhbXBsZSBvZiBzdWNoIGEgcG9zdC1yZWNlaXZlIGhvb2suICBJdCBpcworaW50ZW5kZWQgdG8gYmUgY3VzdG9taXplZCBiZWZvcmUgdXNlOyBzZWUgdGhlIGNvbW1lbnRzIGluIHRoZSBzY3JpcHQKK3RvIGhlbHAgeW91IGdldCBzdGFydGVkLgorCitVc2luZyBnaXQtbXVsdGltYWlsIGFzIGEgUHl0aG9uIG1vZHVsZSBhcyBkb25lIGhlcmUgcHJvdmlkZXMgbW9yZQorZmxleGliaWxpdHkuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBhZHZhbnRhZ2VzOgorCisqIFRoZSB0b29sJ3MgYmVoYXZpb3IgY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLAorICB3aXRob3V0IGhhdmluZyB0byBlZGl0IGdpdF9tdWx0aW1haWwucHkuCisKKyogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBjYW4gYmUgcmVhZCBmcm9tIG90aGVyIHNvdXJjZXM7IGZvciBleGFtcGxlLAorICB1c2VyIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgY291bGQgYmUgcmVhZCBmcm9tIExEQVAgb3IgZnJvbSBhCisgIGRhdGFiYXNlLiAgT3IgdGhlIHNldHRpbmdzIGNhbiBldmVuIGJlIGhhcmRjb2RlZCBpbiB0aGUgaW1wb3J0aW5nCisgIFB5dGhvbiBzY3JpcHQsIGlmIHRoaXMgaXMgcHJlZmVycmVkLgorCitUaGlzIHNjcmlwdCBpcyBhIHZlcnkgYmFzaWMgZXhhbXBsZSBvZiBob3cgdG8gdXNlIGdpdF9tdWx0aW1haWwucHkgYXMKK2EgbW9kdWxlLiAgVGhlIGNvbW1lbnRzIGJlbG93IGV4cGxhaW4gc29tZSBvZiB0aGUgcG9pbnRzIGF0IHdoaWNoIHRoZQorc2NyaXB0J3MgYmVoYXZpb3IgY291bGQgYmUgY2hhbmdlZCBvciBjdXN0b21pemVkLgorCisiIiIKKworaW1wb3J0IHN5cworCisjIElmIG5lY2Vzc2FyeSwgYWRkIHRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZworIyBnaXRfbXVsdGltYWlsLnB5IHRvIHRoZSBQeXRob24gcGF0aCBhcyBmb2xsb3dzLiAgKFRoaXMgaXMgbm90CisjIG5lY2Vzc2FyeSBpZiBnaXRfbXVsdGltYWlsLnB5IGlzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGlzCisjIHNjcmlwdCk6CisKKyNMSUJESVIgPSAncGF0aC90by9kaXJlY3RvcnkvY29udGFpbmluZy9tb2R1bGUnCisjc3lzLnBhdGguaW5zZXJ0KDAsIExJQkRJUikKKworaW1wb3J0IGdpdF9tdWx0aW1haWwKKworIyBJdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIG91dHB1dCB0ZW1wbGF0ZXMgaGVyZTsgZS5nLjoKKworI2dpdF9tdWx0aW1haWwuRk9PVEVSX1RFTVBMQVRFID0gIiIiXAorIworIy0tIFxuXAorI1RoaXMgZW1haWwgd2FzIGdlbmVyYXRlZCBieSB0aGUgd29uZGVyZnVsIGdpdC1tdWx0aW1haWwgdG9vbC4KKyMiIiIKKworCisjIFNwZWNpZnkgd2hpY2ggImdpdCBjb25maWciIHNlY3Rpb24gY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yCisjIGdpdC1tdWx0aW1haWw6Citjb25maWcgPSBnaXRfbXVsdGltYWlsLkNvbmZpZygnbXVsdGltYWlsaG9vaycpCisKKyMgU2V0IHNvbWUgR2l0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBFcXVpdmFsZW50IHRvIHBhc3NpbmcgdmFyPXZhbAorIyB0byAiZ2l0IC1jIHZhcj12YWwiIGVhY2ggdGltZSBnaXQgaXMgY2FsbGVkLCBvciB0byBhZGRpbmcgdGhlCisjIGNvbmZpZ3VyYXRpb24gaW4gLmdpdC9jb25maWcgKG11c3QgY29tZSBiZWZvcmUgaW5zdGFudGlhdGluZyB0aGUKKyMgZW52aXJvbm1lbnQpIDoKKyNnaXRfbXVsdGltYWlsLkNvbmZpZy5hZGRfY29uZmlnX3BhcmFtZXRlcnMoJ211bHRpbWFpbGhvb2suY29tbWl0RW1haWxGb3JtYXQ9aHRtbCcpCisjZ2l0X211bHRpbWFpbC5Db25maWcuYWRkX2NvbmZpZ19wYXJhbWV0ZXJzKCgndXNlci5uYW1lPWZvbycsICd1c2VyLmVtYWlsPWZvb0BleGFtcGxlLmNvbScpKQorCisjIFNlbGVjdCB0aGUgdHlwZSBvZiBlbnZpcm9ubWVudDoKK3RyeToKKyAgICBlbnZpcm9ubWVudCA9IGdpdF9tdWx0aW1haWwuR2VuZXJpY0Vudmlyb25tZW50KGNvbmZpZz1jb25maWcpCisgICAgI2Vudmlyb25tZW50ID0gZ2l0X211bHRpbWFpbC5HaXRvbGl0ZUVudmlyb25tZW50KGNvbmZpZz1jb25maWcpCitleGNlcHQgZ2l0X211bHRpbWFpbC5Db25maWd1cmF0aW9uRXhjZXB0aW9uOgorICAgIHN5cy5zdGRlcnIud3JpdGUoJyoqKiAlc1xuJyAlIHN5cy5leGNfaW5mbygpWzFdKQorICAgIHN5cy5leGl0KDEpCisKKworIyBDaG9vc2UgdGhlIG1ldGhvZCBvZiBzZW5kaW5nIGVtYWlscyBiYXNlZCBvbiB0aGUgZ2l0IGNvbmZpZzoKK21haWxlciA9IGdpdF9tdWx0aW1haWwuY2hvb3NlX21haWxlcihjb25maWcsIGVudmlyb25tZW50KQorCisjIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgaGFyZGNvZGUgdGhlIG1haWxlciB1c2luZyBjb2RlIGxpa2Ugb25lIG9mCisjIHRoZSBmb2xsb3dpbmc6CisKKyMgVXNlICIvdXNyL3NiaW4vc2VuZG1haWwgLW9pIC10IiB0byBzZW5kIGVtYWlscy4gIFRoZSBlbnZlbG9wZXNlbmRlcgorIyBhcmd1bWVudCBpcyBvcHRpb25hbDoKKyNtYWlsZXIgPSBnaXRfbXVsdGltYWlsLlNlbmRNYWlsZXIoCisjICAgIGNvbW1hbmQ9WycvdXNyL3NiaW4vc2VuZG1haWwnLCAnLW9pJywgJy10J10sCisjICAgIGVudmVsb3Blc2VuZGVyPSdnaXQtcmVwb0BleGFtcGxlLmNvbScsCisjICAgICkKKworIyBVc2UgUHl0aG9uJ3Mgc210cGxpYiB0byBzZW5kIGVtYWlscy4gIEJvdGggYXJndW1lbnRzIGFyZSByZXF1aXJlZC4KKyNtYWlsZXIgPSBnaXRfbXVsdGltYWlsLlNNVFBNYWlsZXIoCisjICAgIGVudmlyb25tZW50PWVudmlyb25tZW50LAorIyAgICBlbnZlbG9wZXNlbmRlcj0nZ2l0LXJlcG9AZXhhbXBsZS5jb20nLAorIyAgICAjIFRoZSBzbXRwc2VydmVyIGFyZ3VtZW50IGNhbiBhbHNvIGluY2x1ZGUgYSBwb3J0IG51bWJlcjsgZS5nLiwKKyMgICAgIyAgICAgc210cHNlcnZlcj0nbWFpbC5leGFtcGxlLmNvbToyNScKKyMgICAgc210cHNlcnZlcj0nbWFpbC5leGFtcGxlLmNvbScsCisjICAgICkKKworIyBPdXRwdXRNYWlsZXIgaXMgaW50ZW5kZWQgb25seSBmb3IgdGVzdGluZzsgaXQgd3JpdGVzIHRoZSBlbWFpbHMgdG8KKyMgdGhlIHNwZWNpZmllZCBmaWxlIHN0cmVhbS4KKyNtYWlsZXIgPSBnaXRfbXVsdGltYWlsLk91dHB1dE1haWxlcihzeXMuc3Rkb3V0KQorCisKKyMgUmVhZCBjaGFuZ2VzIGZyb20gc3RkaW4gYW5kIHNlbmQgbm90aWZpY2F0aW9uIGVtYWlsczoKK2dpdF9tdWx0aW1haWwucnVuX2FzX3Bvc3RfcmVjZWl2ZV9ob29rKGVudmlyb25tZW50LCBtYWlsZXIpCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbCBiL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmNTY1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbApAQCAtMCwwICsxLDc1OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBBbmR5IFBhcmtpbnMKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBtYWlsIG91dCBjb21taXQgdXBkYXRlIGluZm9ybWF0aW9uLgorIworIyBOT1RFOiBUaGlzIHNjcmlwdCBpcyBubyBsb25nZXIgdW5kZXIgYWN0aXZlIGRldmVsb3BtZW50LiAgVGhlcmUKKyMgaXMgYW5vdGhlciBzY3JpcHQsIGdpdC1tdWx0aW1haWwsIHdoaWNoIGlzIG1vcmUgY2FwYWJsZSBhbmQKKyMgY29uZmlndXJhYmxlIGFuZCBpcyBsYXJnZWx5IGJhY2t3YXJkcy1jb21wYXRpYmxlIHdpdGggdGhpcyBzY3JpcHQ7CisjIHBsZWFzZSBzZWUgImNvbnRyaWIvaG9va3MvbXVsdGltYWlsLyIuICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworIyBtaWdyYXRlIGZyb20gcG9zdC1yZWNlaXZlLWVtYWlsIHRvIGdpdC1tdWx0aW1haWwsIHBsZWFzZSBzZWUKKyMgIlJFQURNRS5taWdyYXRlLWZyb20tcG9zdC1yZWNlaXZlLWVtYWlsIiBpbiB0aGF0IGRpcmVjdG9yeS4KKyMKKyMgVGhpcyBob29rIHNlbmRzIGVtYWlscyBsaXN0aW5nIG5ldyByZXZpc2lvbnMgdG8gdGhlIHJlcG9zaXRvcnkKKyMgaW50cm9kdWNlZCBieSB0aGUgY2hhbmdlIGJlaW5nIHJlcG9ydGVkLiAgVGhlIHJ1bGUgaXMgdGhhdCAoZm9yCisjIGJyYW5jaCB1cGRhdGVzKSBlYWNoIGNvbW1pdCB3aWxsIGFwcGVhciBvbiBvbmUgZW1haWwgYW5kIG9uZSBlbWFpbAorIyBvbmx5LgorIworIyBUaGlzIGhvb2sgaXMgc3RvcmVkIGluIHRoZSBjb250cmliL2hvb2tzIGRpcmVjdG9yeS4gIFlvdXIgZGlzdHJpYnV0aW9uCisjIHdpbGwgaGF2ZSBwdXQgdGhpcyBzb21ld2hlcmUgc3RhbmRhcmQuICBZb3Ugc2hvdWxkIG1ha2UgdGhpcyBzY3JpcHQKKyMgZXhlY3V0YWJsZSB0aGVuIGxpbmsgdG8gaXQgaW4gdGhlIHJlcG9zaXRvcnkgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGl0IGluLgorIyBGb3IgZXhhbXBsZSwgb24gZGViaWFuIHRoZSBob29rIGlzIHN0b3JlZCBpbgorIyAvdXNyL3NoYXJlL2dpdC1jb3JlL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsOgorIworIyAgY2QgL3BhdGgvdG8veW91ci9yZXBvc2l0b3J5LmdpdAorIyAgbG4gLXNmIC91c3Ivc2hhcmUvZ2l0LWNvcmUvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwgaG9va3MvcG9zdC1yZWNlaXZlCisjCisjIFRoaXMgaG9vayBzY3JpcHQgYXNzdW1lcyBpdCBpcyBlbmFibGVkIG9uIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgb2YgYQorIyBwcm9qZWN0LCB3aXRoIGFsbCB1c2VycyBwdXNoaW5nIG9ubHkgdG8gaXQgYW5kIG5vdCBiZXR3ZWVuIGVhY2ggb3RoZXIuICBJdAorIyB3aWxsIHN0aWxsIHdvcmsgaWYgeW91IGRvbid0IG9wZXJhdGUgaW4gdGhhdCBzdHlsZSwgYnV0IGl0IHdvdWxkIGJlY29tZQorIyBwb3NzaWJsZSBmb3IgdGhlIGVtYWlsIHRvIGJlIGZyb20gc29tZW9uZSBvdGhlciB0aGFuIHRoZSBwZXJzb24gZG9pbmcgdGhlCisjIHB1c2guCisjCisjIFRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcgYW5kIHVzZSBvbiBwcmUtdjEuNS4xIGdpdCBzZXJ2ZXJzLCB0aGlzIHNjcmlwdCB3aWxsCisjIGFsc28gb2JleSB0aGUgaW50ZXJmYWNlIG9mIGhvb2tzL3VwZGF0ZSwgdGFraW5nIGl0cyBhcmd1bWVudHMgb24gdGhlCisjIGNvbW1hbmQgbGluZS4gIFVuZm9ydHVuYXRlbHksIGhvb2tzL3VwZGF0ZSBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCByZWYuCisjIFRvIGF2b2lkIGZpcmluZyBvbmUgZW1haWwgcGVyIHJlZiwgdGhpcyBzY3JpcHQganVzdCBwcmludHMgaXRzIG91dHB1dCB0bworIyB0aGUgc2NyZWVuIHdoZW4gdXNlZCBpbiB0aGlzIG1vZGUuICBUaGUgb3V0cHV0IGNhbiB0aGVuIGJlIHJlZGlyZWN0ZWQgaWYKKyMgd2FudGVkLgorIworIyBDb25maWcKKyMgLS0tLS0tCisjIGhvb2tzLm1haWxpbmdsaXN0CisjICAgVGhpcyBpcyB0aGUgbGlzdCB0aGF0IGFsbCBwdXNoZXMgd2lsbCBnbyB0bzsgbGVhdmUgaXQgYmxhbmsgdG8gbm90IHNlbmQKKyMgICBlbWFpbHMgZm9yIGV2ZXJ5IHJlZiB1cGRhdGUuCisjIGhvb2tzLmFubm91bmNlbGlzdAorIyAgIFRoaXMgaXMgdGhlIGxpc3QgdGhhdCBhbGwgcHVzaGVzIG9mIGFubm90YXRlZCB0YWdzIHdpbGwgZ28gdG8uICBMZWF2ZSBpdAorIyAgIGJsYW5rIHRvIGRlZmF1bHQgdG8gdGhlIG1haWxpbmdsaXN0IGZpZWxkLiAgVGhlIGFubm91bmNlIGVtYWlscyBsaXN0cworIyAgIHRoZSBzaG9ydCBsb2cgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgbGFzdCBhbm5vdGF0ZWQgdGFnLgorIyBob29rcy5lbnZlbG9wZXNlbmRlcgorIyAgIElmIHNldCB0aGVuIHRoZSAtZiBvcHRpb24gaXMgcGFzc2VkIHRvIHNlbmRtYWlsIHRvIGFsbG93IHRoZSBlbnZlbG9wZQorIyAgIHNlbmRlciBhZGRyZXNzIHRvIGJlIHNldAorIyBob29rcy5lbWFpbHByZWZpeAorIyAgIEFsbCBlbWFpbHMgaGF2ZSB0aGVpciBzdWJqZWN0cyBwcmVmaXhlZCB3aXRoIHRoaXMgcHJlZml4LCBvciAiW1NDTV0iCisjICAgaWYgZW1haWxwcmVmaXggaXMgdW5zZXQsIHRvIGFpZCBmaWx0ZXJpbmcKKyMgaG9va3Muc2hvd3JldgorIyAgIFRoZSBzaGVsbCBjb21tYW5kIHVzZWQgdG8gZm9ybWF0IGVhY2ggcmV2aXNpb24gaW4gdGhlIGVtYWlsLCB3aXRoCisjICAgIiVzIiByZXBsYWNlZCB3aXRoIHRoZSBjb21taXQgaWQuICBEZWZhdWx0cyB0byAiZ2l0IHJldi1saXN0IC0xCisjICAgLS1wcmV0dHkgJXMiLCBkaXNwbGF5aW5nIHRoZSBjb21taXQgaWQsIGF1dGhvciwgZGF0ZSBhbmQgbG9nCisjICAgbWVzc2FnZS4gIFRvIGxpc3QgZnVsbCBwYXRjaGVzIHNlcGFyYXRlZCBieSBhIGJsYW5rIGxpbmUsIHlvdQorIyAgIGNvdWxkIHNldCB0aGlzIHRvICJnaXQgc2hvdyAtQyAlczsgZWNobyIuCisjICAgVG8gbGlzdCBhIGdpdHdlYi9jZ2l0IFVSTCAqYW5kKiBhIGZ1bGwgcGF0Y2ggZm9yIGVhY2ggY2hhbmdlIHNldCwgdXNlIHRoaXM6CisjICAgICAidD0lczsgcHJpbnRmICdodHRwOi8vLi4uLz9pZD0lJXMnIFwkdDsgZWNobztlY2hvOyBnaXQgc2hvdyAtQyBcJHQ7IGVjaG8iCisjICAgQmUgY2FyZWZ1bCBpZiAiLi4uIiBjb250YWlucyB0aGluZ3MgdGhhdCB3aWxsIGJlIGV4cGFuZGVkIGJ5IHNoZWxsICJldmFsIgorIyAgIG9yIHByaW50Zi4KKyMgaG9va3MuZW1haWxtYXhsaW5lcworIyAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgZ2VuZXJhdGVkCisjICAgZW1haWwgYm9keS4gSWYgbm90IHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbGltaXQuCisjICAgTGluZXMgYmV5b25kIHRoZSBsaW1pdCBhcmUgc3VwcHJlc3NlZCBhbmQgY291bnRlZCwgYW5kIGEgZmluYWwKKyMgICBsaW5lIGlzIGFkZGVkIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBzdXBwcmVzc2VkIGxpbmVzLgorIyBob29rcy5kaWZmb3B0cworIyAgIEFsdGVybmF0ZSBvcHRpb25zIGZvciB0aGUgZ2l0IGRpZmYtdHJlZSBpbnZvY2F0aW9uIHRoYXQgc2hvd3MgY2hhbmdlcy4KKyMgICBEZWZhdWx0IGlzICItLXN0YXQgLS1zdW1tYXJ5IC0tZmluZC1jb3BpZXMtaGFyZGVyIi4gQWRkIC1wIHRvIHRob3NlCisjICAgb3B0aW9ucyB0byBpbmNsdWRlIGEgdW5pZmllZCBkaWZmIG9mIGNoYW5nZXMgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsCisjICAgc3VtbWFyeSBvdXRwdXQuCisjCisjIE5vdGVzCisjIC0tLS0tCisjIEFsbCBlbWFpbHMgaW5jbHVkZSB0aGUgaGVhZGVycyAiWC1HaXQtUmVmbmFtZSIsICJYLUdpdC1PbGRyZXYiLAorIyAiWC1HaXQtTmV3cmV2IiwgYW5kICJYLUdpdC1SZWZ0eXBlIiB0byBlbmFibGUgZmluZSB0dW5lZCBmaWx0ZXJpbmcgYW5kCisjIGdpdmUgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZy4KKyMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucworCisjCisjIEZ1bmN0aW9uIHRvIHByZXBhcmUgZm9yIGVtYWlsIGdlbmVyYXRpb24uIFRoaXMgZGVjaWRlcyB3aGF0IHR5cGUKKyMgb2YgdXBkYXRlIHRoaXMgaXMgYW5kIHdoZXRoZXIgYW4gZW1haWwgc2hvdWxkIGV2ZW4gYmUgZ2VuZXJhdGVkLgorIworcHJlcF9mb3JfZW1haWwoKQoreworCSMgLS0tIEFyZ3VtZW50cworCW9sZHJldj0kKGdpdCByZXYtcGFyc2UgJDEpCisJbmV3cmV2PSQoZ2l0IHJldi1wYXJzZSAkMikKKwlyZWZuYW1lPSIkMyIKKworCSMgLS0tIEludGVycHJldAorCSMgMDAwMC0+MTIzNCAoY3JlYXRlKQorCSMgMTIzNC0+MjM0NSAodXBkYXRlKQorCSMgMjM0NS0+MDAwMCAoZGVsZXRlKQorCWlmIGV4cHIgIiRvbGRyZXYiIDogJzAqJCcgPi9kZXYvbnVsbAorCXRoZW4KKwkJY2hhbmdlX3R5cGU9ImNyZWF0ZSIKKwllbHNlCisJCWlmIGV4cHIgIiRuZXdyZXYiIDogJzAqJCcgPi9kZXYvbnVsbAorCQl0aGVuCisJCQljaGFuZ2VfdHlwZT0iZGVsZXRlIgorCQllbHNlCisJCQljaGFuZ2VfdHlwZT0idXBkYXRlIgorCQlmaQorCWZpCisKKwkjIC0tLSBHZXQgdGhlIHJldmlzaW9uIHR5cGVzCisJbmV3cmV2X3R5cGU9JChnaXQgY2F0LWZpbGUgLXQgJG5ld3JldiAyPiAvZGV2L251bGwpCisJb2xkcmV2X3R5cGU9JChnaXQgY2F0LWZpbGUgLXQgIiRvbGRyZXYiIDI+IC9kZXYvbnVsbCkKKwljYXNlICIkY2hhbmdlX3R5cGUiIGluCisJY3JlYXRlfHVwZGF0ZSkKKwkJcmV2PSIkbmV3cmV2IgorCQlyZXZfdHlwZT0iJG5ld3Jldl90eXBlIgorCQk7OworCWRlbGV0ZSkKKwkJcmV2PSIkb2xkcmV2IgorCQlyZXZfdHlwZT0iJG9sZHJldl90eXBlIgorCQk7OworCWVzYWMKKworCSMgVGhlIHJldmlzaW9uIHR5cGUgdGVsbHMgdXMgd2hhdCB0eXBlIHRoZSBjb21taXQgaXMsIGNvbWJpbmVkIHdpdGgKKwkjIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVmIHdlIGNhbiBkZWNpZGUgYmV0d2VlbgorCSMgIC0gd29ya2luZyBicmFuY2gKKwkjICAtIHRyYWNraW5nIGJyYW5jaAorCSMgIC0gdW5hbm5vdGVkIHRhZworCSMgIC0gYW5ub3RhdGVkIHRhZworCWNhc2UgIiRyZWZuYW1lIiwiJHJldl90eXBlIiBpbgorCQlyZWZzL3RhZ3MvKixjb21taXQpCisJCQkjIHVuLWFubm90YXRlZCB0YWcKKwkJCXJlZm5hbWVfdHlwZT0idGFnIgorCQkJc2hvcnRfcmVmbmFtZT0ke3JlZm5hbWUjI3JlZnMvdGFncy99CisJCQk7OworCQlyZWZzL3RhZ3MvKix0YWcpCisJCQkjIGFubm90YXRlZCB0YWcKKwkJCXJlZm5hbWVfdHlwZT0iYW5ub3RhdGVkIHRhZyIKKwkJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL3RhZ3MvfQorCQkJIyBjaGFuZ2UgcmVjaXBpZW50cworCQkJaWYgWyAtbiAiJGFubm91bmNlcmVjaXBpZW50cyIgXTsgdGhlbgorCQkJCXJlY2lwaWVudHM9IiRhbm5vdW5jZXJlY2lwaWVudHMiCisJCQlmaQorCQkJOzsKKwkJcmVmcy9oZWFkcy8qLGNvbW1pdCkKKwkJCSMgYnJhbmNoCisJCQlyZWZuYW1lX3R5cGU9ImJyYW5jaCIKKwkJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL2hlYWRzL30KKwkJCTs7CisJCXJlZnMvcmVtb3Rlcy8qLGNvbW1pdCkKKwkJCSMgdHJhY2tpbmcgYnJhbmNoCisJCQlyZWZuYW1lX3R5cGU9InRyYWNraW5nIGJyYW5jaCIKKwkJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL3JlbW90ZXMvfQorCQkJZWNobyA+JjIgIioqKiBQdXNoLXVwZGF0ZSBvZiB0cmFja2luZyBicmFuY2gsICRyZWZuYW1lIgorCQkJZWNobyA+JjIgIioqKiAgLSBubyBlbWFpbCBnZW5lcmF0ZWQuIgorCQkJcmV0dXJuIDEKKwkJCTs7CisJCSopCisJCQkjIEFueXRoaW5nIGVsc2UgKGlzIHRoZXJlIGFueXRoaW5nIGVsc2U/KQorCQkJZWNobyA+JjIgIioqKiBVbmtub3duIHR5cGUgb2YgdXBkYXRlIHRvICRyZWZuYW1lICgkcmV2X3R5cGUpIgorCQkJZWNobyA+JjIgIioqKiAgLSBubyBlbWFpbCBnZW5lcmF0ZWQiCisJCQlyZXR1cm4gMQorCQkJOzsKKwllc2FjCisKKwkjIENoZWNrIGlmIHdlJ3ZlIGdvdCBhbnlvbmUgdG8gc2VuZCB0bworCWlmIFsgLXogIiRyZWNpcGllbnRzIiBdOyB0aGVuCisJCWNhc2UgIiRyZWZuYW1lX3R5cGUiIGluCisJCQkiYW5ub3RhdGVkIHRhZyIpCisJCQkJY29uZmlnX25hbWU9Imhvb2tzLmFubm91bmNlbGlzdCIKKwkJCQk7OworCQkJKikKKwkJCQljb25maWdfbmFtZT0iaG9va3MubWFpbGluZ2xpc3QiCisJCQkJOzsKKwkJZXNhYworCQllY2hvID4mMiAiKioqICRjb25maWdfbmFtZSBpcyBub3Qgc2V0IHNvIG5vIGVtYWlsIHdpbGwgYmUgc2VudCIKKwkJZWNobyA+JjIgIioqKiBmb3IgJHJlZm5hbWUgdXBkYXRlICRvbGRyZXYtPiRuZXdyZXYiCisJCXJldHVybiAxCisJZmkKKworCXJldHVybiAwCit9CisKKyMKKyMgVG9wIGxldmVsIGVtYWlsIGdlbmVyYXRpb24gZnVuY3Rpb24uICBUaGlzIGNhbGxzIHRoZSBhcHByb3ByaWF0ZQorIyBib2R5LWdlbmVyYXRpb24gcm91dGluZSBhZnRlciBvdXRwdXR0aW5nIHRoZSBjb21tb24gaGVhZGVyLgorIworIyBOb3RlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhbnkgZW1haWwgb3V0cHV0LCB0aGF0IGlzCisjIHRha2VuIGNhcmUgb2YgYnkgdGhlIGZ1bmN0aW9ucyBpdCBjYWxsczoKKyMgIC0gZ2VuZXJhdGVfZW1haWxfaGVhZGVyCisjICAtIGdlbmVyYXRlX2NyZWF0ZV9YWFhYX2VtYWlsCisjICAtIGdlbmVyYXRlX3VwZGF0ZV9YWFhYX2VtYWlsCisjICAtIGdlbmVyYXRlX2RlbGV0ZV9YWFhYX2VtYWlsCisjICAtIGdlbmVyYXRlX2VtYWlsX2Zvb3RlcgorIworIyBOb3RlIGFsc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbm5vdCAnZXhpdCcgZnJvbSB0aGUgc2NyaXB0OyB3aGVuIHRoaXMKKyMgZnVuY3Rpb24gaXMgcnVubmluZyAoaW4gaG9vayBzY3JpcHQgbW9kZSksIHRoZSBzZW5kX21haWwoKSBmdW5jdGlvbgorIyBpcyBhbHJlYWR5IGV4ZWN1dGluZyBpbiBhbm90aGVyIHByb2Nlc3MsIGNvbm5lY3RlZCB2aWEgYSBwaXBlLCBhbmQKKyMgaWYgdGhpcyBmdW5jdGlvbiBleGl0cyB3aXRob3V0LCB3aGF0ZXZlciBoYXMgYmVlbiBnZW5lcmF0ZWQgdG8gdGhhdAorIyBwb2ludCB3aWxsIGJlIHNlbnQgYXMgYW4gZW1haWwuLi4gZXZlbiBpZiBub3RoaW5nIGhhcyBiZWVuIGdlbmVyYXRlZC4KKyMKK2dlbmVyYXRlX2VtYWlsKCkKK3sKKwkjIEVtYWlsIHBhcmFtZXRlcnMKKwkjIFRoZSBlbWFpbCBzdWJqZWN0IHdpbGwgY29udGFpbiB0aGUgYmVzdCBkZXNjcmlwdGlvbiBvZiB0aGUgcmVmCisJIyB0aGF0IHdlIGNhbiBidWlsZCBmcm9tIHRoZSBwYXJhbWV0ZXJzCisJZGVzY3JpYmU9JChnaXQgZGVzY3JpYmUgJHJldiAyPi9kZXYvbnVsbCkKKwlpZiBbIC16ICIkZGVzY3JpYmUiIF07IHRoZW4KKwkJZGVzY3JpYmU9JHJldgorCWZpCisKKwlnZW5lcmF0ZV9lbWFpbF9oZWFkZXIKKworCSMgQ2FsbCB0aGUgY29ycmVjdCBib2R5IGdlbmVyYXRpb24gZnVuY3Rpb24KKwlmbl9uYW1lPWdlbmVyYWwKKwljYXNlICIkcmVmbmFtZV90eXBlIiBpbgorCSJ0cmFja2luZyBicmFuY2gifGJyYW5jaCkKKwkJZm5fbmFtZT1icmFuY2gKKwkJOzsKKwkiYW5ub3RhdGVkIHRhZyIpCisJCWZuX25hbWU9YXRhZworCQk7OworCWVzYWMKKworCWlmIFsgLXogIiRtYXhsaW5lcyIgXTsgdGhlbgorCQlnZW5lcmF0ZV8ke2NoYW5nZV90eXBlfV8ke2ZuX25hbWV9X2VtYWlsCisJZWxzZQorCQlnZW5lcmF0ZV8ke2NoYW5nZV90eXBlfV8ke2ZuX25hbWV9X2VtYWlsIHwgbGltaXRfbGluZXMgJG1heGxpbmVzCisJZmkKKworCWdlbmVyYXRlX2VtYWlsX2Zvb3RlcgorfQorCitnZW5lcmF0ZV9lbWFpbF9oZWFkZXIoKQoreworCSMgLS0tIEVtYWlsIChhbGwgc3Rkb3V0IHdpbGwgYmUgdGhlIGVtYWlsKQorCSMgR2VuZXJhdGUgaGVhZGVyCisJY2F0IDw8LUVPRgorCVRvOiAkcmVjaXBpZW50cworCVN1YmplY3Q6ICR7ZW1haWxwcmVmaXh9JHByb2plY3RkZXNjICRyZWZuYW1lX3R5cGUgJHNob3J0X3JlZm5hbWUgJHtjaGFuZ2VfdHlwZX1kLiAkZGVzY3JpYmUKKwlNSU1FLVZlcnNpb246IDEuMAorCUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOAorCUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKwlYLUdpdC1SZWZuYW1lOiAkcmVmbmFtZQorCVgtR2l0LVJlZnR5cGU6ICRyZWZuYW1lX3R5cGUKKwlYLUdpdC1PbGRyZXY6ICRvbGRyZXYKKwlYLUdpdC1OZXdyZXY6ICRuZXdyZXYKKwlBdXRvLVN1Ym1pdHRlZDogYXV0by1nZW5lcmF0ZWQKKworCVRoaXMgaXMgYW4gYXV0b21hdGVkIGVtYWlsIGZyb20gdGhlIGdpdCBob29rcy9wb3N0LXJlY2VpdmUgc2NyaXB0LiBJdCB3YXMKKwlnZW5lcmF0ZWQgYmVjYXVzZSBhIHJlZiBjaGFuZ2Ugd2FzIHB1c2hlZCB0byB0aGUgcmVwb3NpdG9yeSBjb250YWluaW5nCisJdGhlIHByb2plY3QgIiRwcm9qZWN0ZGVzYyIuCisKKwlUaGUgJHJlZm5hbWVfdHlwZSwgJHNob3J0X3JlZm5hbWUgaGFzIGJlZW4gJHtjaGFuZ2VfdHlwZX1kCisJRU9GCit9CisKK2dlbmVyYXRlX2VtYWlsX2Zvb3RlcigpCit7CisJU1BBQ0U9IiAiCisJY2F0IDw8LUVPRgorCisKKwlob29rcy9wb3N0LXJlY2VpdmUKKwktLSR7U1BBQ0V9CisJJHByb2plY3RkZXNjCisJRU9GCit9CisKKyMgLS0tLS0tLS0tLS0tLS0tIEJyYW5jaGVzCisKKyMKKyMgQ2FsbGVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSBicmFuY2gKKyMKK2dlbmVyYXRlX2NyZWF0ZV9icmFuY2hfZW1haWwoKQoreworCSMgVGhpcyBpcyBhIG5ldyBicmFuY2ggYW5kIHNvIG9sZHJldiBpcyBub3QgdmFsaWQKKwllY2hvICIgICAgICAgIGF0ICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCWVjaG8gIiIKKworCWVjaG8gJExPR0JFR0lOCisJc2hvd19uZXdfcmV2aXNpb25zCisJZWNobyAkTE9HRU5ECit9CisKKyMKKyMgQ2FsbGVkIGZvciB0aGUgY2hhbmdlIG9mIGEgcHJlLWV4aXN0aW5nIGJyYW5jaAorIworZ2VuZXJhdGVfdXBkYXRlX2JyYW5jaF9lbWFpbCgpCit7CisJIyBDb25zaWRlciB0aGlzOgorCSMgICAxIC0tLSAyIC0tLSBPIC0tLSBYIC0tLSAzIC0tLSA0IC0tLSBOCisJIworCSMgTyBpcyAkb2xkcmV2IGZvciAkcmVmbmFtZQorCSMgTiBpcyAkbmV3cmV2IGZvciAkcmVmbmFtZQorCSMgWCBpcyBhIHJldmlzaW9uIHBvaW50ZWQgdG8gYnkgc29tZSBvdGhlciByZWYsIGZvciB3aGljaCB3ZSBtYXkKKwkjICAgYXNzdW1lIHRoYXQgYW4gZW1haWwgaGFzIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQuCisJIyBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBpc3N1ZSBhbiBlbWFpbCBjb250YWluaW5nIG9ubHkgcmV2aXNpb25zCisJIyAzLCA0LCBhbmQgTi4gIEdpdmVuIChhbG1vc3QpIGJ5CisJIworCSMgIGdpdCByZXYtbGlzdCBOIF5PIC0tbm90IC0tYWxsCisJIworCSMgVGhlIHJlYXNvbiBmb3IgdGhlICJhbG1vc3QiLCBpcyB0aGF0IHRoZSAiLS1ub3QgLS1hbGwiIHdpbGwgdGFrZQorCSMgcHJlY2VkZW5jZSBvdmVyIHRoZSAiTiIsIGFuZCBlZmZlY3RpdmVseSB3aWxsIHRyYW5zbGF0ZSB0bworCSMKKwkjICBnaXQgcmV2LWxpc3QgTiBeTyBeWCBeTgorCSMKKwkjIFNvLCB3ZSBuZWVkIHRvIGJ1aWxkIHVwIHRoZSBsaXN0IG1vcmUgY2FyZWZ1bGx5LiAgZ2l0IHJldi1wYXJzZQorCSMgd2lsbCBnZW5lcmF0ZSBhIGxpc3Qgb2YgcmV2cyB0aGF0IG1heSBiZSBmZWQgaW50byBnaXQgcmV2LWxpc3QuCisJIyBXZSBjYW4gZ2V0IGl0IHRvIG1ha2UgdGhlICItLW5vdCAtLWFsbCIgcGFydCBhbmQgdGhlbiBmaWx0ZXIgb3V0CisJIyB0aGUgIl5OIiB3aXRoOgorCSMKKwkjICBnaXQgcmV2LXBhcnNlIC0tbm90IC0tYWxsIHwgZ3JlcCAtdiBOCisJIworCSMgVGhlbiwgdXNpbmcgdGhlIC0tc3RkaW4gc3dpdGNoIHRvIGdpdCByZXYtbGlzdCB3ZSBoYXZlIGVmZmVjdGl2ZWx5CisJIyBtYW51ZmFjdHVyZWQKKwkjCisJIyAgZ2l0IHJldi1saXN0IE4gXk8gXlgKKwkjCisJIyBUaGlzIGxlYXZlcyBhIHByb2JsZW0gd2hlbiBzb21lb25lIGVsc2UgdXBkYXRlcyB0aGUgcmVwb3NpdG9yeQorCSMgd2hpbGUgdGhpcyBzY3JpcHQgaXMgcnVubmluZy4gIFRoZWlyIG5ldyB2YWx1ZSBvZiB0aGUgcmVmIHdlJ3JlCisJIyB3b3JraW5nIG9uIHdvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSAiLS1ub3QgLS1hbGwiIG91dHB1dDsgYW5kIGFzCisJIyBvdXIgJG5ld3JldiB3b3VsZCBiZSBhbiBhbmNlc3RvciBvZiB0aGF0IGNvbW1pdCwgaXQgd291bGQgZXhjbHVkZQorCSMgYWxsIG9mIG91ciBjb21taXRzLiAgV2hhdCB3ZSByZWFsbHkgd2FudCBpcyB0byBleGNsdWRlIHRoZSBjdXJyZW50CisJIyB2YWx1ZSBvZiAkcmVmbmFtZSBmcm9tIHRoZSAtLW5vdCBsaXN0LCByYXRoZXIgdGhhbiBOIGl0c2VsZi4gIFNvOgorCSMKKwkjICBnaXQgcmV2LXBhcnNlIC0tbm90IC0tYWxsIHwgZ3JlcCAtdiAkKGdpdCByZXYtcGFyc2UgJHJlZm5hbWUpCisJIworCSMgR2V0cyB1cyB0byBzb21ldGhpbmcgcHJldHR5IHNhZmUgKGFwYXJ0IGZyb20gdGhlIHNtYWxsIHRpbWUKKwkjIGJldHdlZW4gcmVmbmFtZSBiZWluZyByZWFkLCBhbmQgZ2l0IHJldi1wYXJzZSBydW5uaW5nIC0gZm9yIHRoYXQsCisJIyBJIGdpdmUgdXApCisJIworCSMKKwkjIE5leHQgcHJvYmxlbSwgY29uc2lkZXIgdGhpczoKKwkjICAgKiAtLS0gQiAtLS0gKiAtLS0gTyAoJG9sZHJldikKKwkjICAgICAgICAgIFwKKwkjICAgICAgICAgICAqIC0tLSBYIC0tLSAqIC0tLSBOICgkbmV3cmV2KQorCSMKKwkjIFRoYXQgaXMgdG8gc2F5LCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBvbGRyZXYgaXMgYSBzdHJpY3QKKwkjIHN1YnNldCBvZiBuZXdyZXYgKGl0IHdvdWxkIGhhdmUgcmVxdWlyZWQgYSAtLWZvcmNlLCBidXQgdGhhdCdzCisJIyBhbGxvd2VkKS4gIFNvLCB3ZSBjYW4ndCBzaW1wbHkgc2F5IHJldi1saXN0ICRvbGRyZXYuLiRuZXdyZXYuCisJIyBJbnN0ZWFkIHdlIGZpbmQgdGhlIGNvbW1vbiBiYXNlIG9mIHRoZSB0d28gcmV2cyBhbmQgbGlzdCBmcm9tCisJIyB0aGVyZS4KKwkjCisJIyBBcyBhYm92ZSwgd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgcHJlc2VuY2Ugb2YgWDsgaWYKKwkjIGFub3RoZXIgYnJhbmNoIGlzIGFscmVhZHkgaW4gdGhlIHJlcG9zaXRvcnkgYW5kIHBvaW50cyBhdCBzb21lIG9mCisJIyB0aGUgcmV2aXNpb25zIHRoYXQgd2UgYXJlIGFib3V0IHRvIG91dHB1dCAtIHdlIGRvbid0IHdhbnQgdGhlbS4KKwkjIFRoZSBzb2x1dGlvbiBpcyBhcyBiZWZvcmU6IGdpdCByZXYtcGFyc2Ugb3V0cHV0IGZpbHRlcmVkLgorCSMKKwkjIEZpbmFsbHksIHRhZ3M6IDEgLS0tIDIgLS0tIE8gLS0tIFQgLS0tIDMgLS0tIDQgLS0tIE4KKwkjCisJIyBUYWdzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IGdlbmVyYXRlIG5pY2Ugc2hvcnRsb2cgZW1haWxzIHRoYXQKKwkjIHN1bW1hcmlzZSB0aGUgY29tbWl0cyBiZXR3ZWVuIHRoZW0gYW5kIHRoZSBwcmV2aW91cyB0YWcuICBIb3dldmVyLAorCSMgdGhvc2UgZW1haWxzIGRvbid0IGluY2x1ZGUgdGhlIGZ1bGwgY29tbWl0IG1lc3NhZ2VzIHRoYXQgd2Ugb3V0cHV0CisJIyBmb3IgYSBicmFuY2ggdXBkYXRlLiAgVGhlcmVmb3JlIHdlIHN0aWxsIHdhbnQgdG8gb3V0cHV0IHJldmlzaW9ucworCSMgdGhhdCBoYXZlIGJlZW4gb3V0cHV0IG9uIGEgdGFnIGVtYWlsLgorCSMKKwkjIEx1Y2tpbHksIGdpdCByZXYtcGFyc2UgaW5jbHVkZXMganVzdCB0aGUgdG9vbC4gIEluc3RlYWQgb2YgdXNpbmcKKwkjICItLWFsbCIgd2UgdXNlICItLWJyYW5jaGVzIjsgdGhpcyBoYXMgdGhlIGFkZGVkIGJlbmVmaXQgdGhhdAorCSMgInJlbW90ZXMvIiB3aWxsIGJlIGlnbm9yZWQgYXMgd2VsbC4KKworCSMgTGlzdCBhbGwgb2YgdGhlIHJldmlzaW9ucyB0aGF0IHdlcmUgcmVtb3ZlZCBieSB0aGlzIHVwZGF0ZSwgaW4gYQorCSMgZmFzdC1mb3J3YXJkIHVwZGF0ZSwgdGhpcyBsaXN0IHdpbGwgYmUgZW1wdHksIGJlY2F1c2UgcmV2LWxpc3QgTworCSMgXk4gaXMgZW1wdHkuICBGb3IgYSBub24tZmFzdC1mb3J3YXJkLCBPIF5OIGlzIHRoZSBsaXN0IG9mIHJlbW92ZWQKKwkjIHJldmlzaW9ucworCWZhc3RfZm9yd2FyZD0iIgorCXJldj0iIgorCWZvciByZXYgaW4gJChnaXQgcmV2LWxpc3QgJG5ld3Jldi4uJG9sZHJldikKKwlkbworCQlyZXZ0eXBlPSQoZ2l0IGNhdC1maWxlIC10ICIkcmV2IikKKwkJZWNobyAiICBkaXNjYXJkcyAgJHJldiAoJHJldnR5cGUpIgorCWRvbmUKKwlpZiBbIC16ICIkcmV2IiBdOyB0aGVuCisJCWZhc3RfZm9yd2FyZD0xCisJZmkKKworCSMgTGlzdCBhbGwgdGhlIHJldmlzaW9ucyBmcm9tIGJhc2VyZXYgdG8gbmV3cmV2IGluIGEga2luZCBvZgorCSMgInRhYmxlLW9mLWNvbnRlbnRzIjsgbm90ZSB0aGlzIGxpc3QgY2FuIGluY2x1ZGUgcmV2aXNpb25zIHRoYXQKKwkjIGhhdmUgYWxyZWFkeSBoYWQgbm90aWZpY2F0aW9uIGVtYWlscyBhbmQgaXMgcHJlc2VudCB0byBzaG93IHRoZQorCSMgZnVsbCBkZXRhaWwgb2YgdGhlIGNoYW5nZSBmcm9tIHJvbGxpbmcgYmFjayB0aGUgb2xkIHJldmlzaW9uIHRvCisJIyB0aGUgYmFzZSByZXZpc2lvbiBhbmQgdGhlbiBmb3J3YXJkIHRvIHRoZSBuZXcgcmV2aXNpb24KKwlmb3IgcmV2IGluICQoZ2l0IHJldi1saXN0ICRvbGRyZXYuLiRuZXdyZXYpCisJZG8KKwkJcmV2dHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAiJHJldiIpCisJCWVjaG8gIiAgICAgICB2aWEgICRyZXYgKCRyZXZ0eXBlKSIKKwlkb25lCisKKwlpZiBbICIkZmFzdF9mb3J3YXJkIiBdOyB0aGVuCisJCWVjaG8gIiAgICAgIGZyb20gICRvbGRyZXYgKCRvbGRyZXZfdHlwZSkiCisJZWxzZQorCQkjICAxLiBFeGlzdGluZyByZXZpc2lvbnMgd2VyZSByZW1vdmVkLiAgSW4gdGhpcyBjYXNlIG5ld3JldgorCQkjICAgICBpcyBhIHN1YnNldCBvZiBvbGRyZXYgLSB0aGlzIGlzIHRoZSByZXZlcnNlIG9mIGEKKwkJIyAgICAgZmFzdC1mb3J3YXJkLCBhIHJld2luZAorCQkjICAyLiBOZXcgcmV2aXNpb25zIHdlcmUgYWRkZWQgb24gdG9wIG9mIGFuIG9sZCByZXZpc2lvbiwKKwkJIyAgICAgdGhpcyBpcyBhIHJld2luZCBhbmQgYWRkaXRpb24uCisKKwkJIyAoMSkgY2VydGFpbmx5IGhhcHBlbmVkLCAoMikgcG9zc2libHkuICBXaGVuICgyKSBoYXNuJ3QKKwkJIyBoYXBwZW5lZCwgd2Ugc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IG5vIGxvZyBwcmludG91dAorCQkjIGlzIHJlcXVpcmVkLgorCisJCWVjaG8gIiIKKworCQkjIEZpbmQgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgb2xkIGFuZCBuZXcgcmV2aXNpb25zIGFuZAorCQkjIGNvbXBhcmUgaXQgd2l0aCBuZXdyZXYKKwkJYmFzZXJldj0kKGdpdCBtZXJnZS1iYXNlICRvbGRyZXYgJG5ld3JldikKKwkJcmV3aW5kX29ubHk9IiIKKwkJaWYgWyAiJGJhc2VyZXYiID0gIiRuZXdyZXYiIF07IHRoZW4KKwkJCWVjaG8gIlRoaXMgdXBkYXRlIGRpc2NhcmRlZCBleGlzdGluZyByZXZpc2lvbnMgYW5kIGxlZnQgdGhlIGJyYW5jaCBwb2ludGluZyBhdCIKKwkJCWVjaG8gImEgcHJldmlvdXMgcG9pbnQgaW4gdGhlIHJlcG9zaXRvcnkgaGlzdG9yeS4iCisJCQllY2hvICIiCisJCQllY2hvICIgKiAtLSAqIC0tIE4gKCRuZXdyZXYpIgorCQkJZWNobyAiICAgICAgICAgICAgXFwiCisJCQllY2hvICIgICAgICAgICAgICAgTyAtLSBPIC0tIE8gKCRvbGRyZXYpIgorCQkJZWNobyAiIgorCQkJZWNobyAiVGhlIHJlbW92ZWQgcmV2aXNpb25zIGFyZSBub3QgbmVjZXNzYXJpbHkgZ29uZSAtIGlmIGFub3RoZXIgcmVmZXJlbmNlIgorCQkJZWNobyAic3RpbGwgcmVmZXJzIHRvIHRoZW0gdGhleSB3aWxsIHN0YXkgaW4gdGhlIHJlcG9zaXRvcnkuIgorCQkJcmV3aW5kX29ubHk9MQorCQllbHNlCisJCQllY2hvICJUaGlzIHVwZGF0ZSBhZGRlZCBuZXcgcmV2aXNpb25zIGFmdGVyIHVuZG9pbmcgZXhpc3RpbmcgcmV2aXNpb25zLiAgVGhhdCBpcyIKKwkJCWVjaG8gInRvIHNheSwgdGhlIG9sZCByZXZpc2lvbiBpcyBub3QgYSBzdHJpY3Qgc3Vic2V0IG9mIHRoZSBuZXcgcmV2aXNpb24uICBUaGlzIgorCQkJZWNobyAic2l0dWF0aW9uIG9jY3VycyB3aGVuIHlvdSAtLWZvcmNlIHB1c2ggYSBjaGFuZ2UgYW5kIGdlbmVyYXRlIGEgcmVwb3NpdG9yeSIKKwkJCWVjaG8gImNvbnRhaW5pbmcgc29tZXRoaW5nIGxpa2UgdGhpczoiCisJCQllY2hvICIiCisJCQllY2hvICIgKiAtLSAqIC0tIEIgLS0gTyAtLSBPIC0tIE8gKCRvbGRyZXYpIgorCQkJZWNobyAiICAgICAgICAgICAgXFwiCisJCQllY2hvICIgICAgICAgICAgICAgTiAtLSBOIC0tIE4gKCRuZXdyZXYpIgorCQkJZWNobyAiIgorCQkJZWNobyAiV2hlbiB0aGlzIGhhcHBlbnMgd2UgYXNzdW1lIHRoYXQgeW91J3ZlIGFscmVhZHkgaGFkIGFsZXJ0IGVtYWlscyBmb3IgYWxsIgorCQkJZWNobyAib2YgdGhlIE8gcmV2aXNpb25zLCBhbmQgc28gd2UgaGVyZSByZXBvcnQgb25seSB0aGUgcmV2aXNpb25zIGluIHRoZSBOIgorCQkJZWNobyAiYnJhbmNoIGZyb20gdGhlIGNvbW1vbiBiYXNlLCBCLiIKKwkJZmkKKwlmaQorCisJZWNobyAiIgorCWlmIFsgLXogIiRyZXdpbmRfb25seSIgXTsgdGhlbgorCQllY2hvICJUaG9zZSByZXZpc2lvbnMgbGlzdGVkIGFib3ZlIHRoYXQgYXJlIG5ldyB0byB0aGlzIHJlcG9zaXRvcnkgaGF2ZSIKKwkJZWNobyAibm90IGFwcGVhcmVkIG9uIGFueSBvdGhlciBub3RpZmljYXRpb24gZW1haWw7IHNvIHdlIGxpc3QgdGhvc2UiCisJCWVjaG8gInJldmlzaW9ucyBpbiBmdWxsLCBiZWxvdy4iCisKKwkJZWNobyAiIgorCQllY2hvICRMT0dCRUdJTgorCQlzaG93X25ld19yZXZpc2lvbnMKKworCQkjIFhYWDogTmVlZCBhIHdheSBvZiBkZXRlY3Rpbmcgd2hldGhlciBnaXQgcmV2LWxpc3QgYWN0dWFsbHkKKwkJIyBvdXRwdXR0ZWQgYW55dGhpbmcsIHNvIHRoYXQgd2UgY2FuIGlzc3VlIGEgIm5vIG5ldworCQkjIHJldmlzaW9ucyBhZGRlZCBieSB0aGlzIHVwZGF0ZSIgbWVzc2FnZQorCisJCWVjaG8gJExPR0VORAorCWVsc2UKKwkJZWNobyAiTm8gbmV3IHJldmlzaW9ucyB3ZXJlIGFkZGVkIGJ5IHRoaXMgdXBkYXRlLiIKKwlmaQorCisJIyBUaGUgZGlmZnN0YXQgaXMgc2hvd24gZnJvbSB0aGUgb2xkIHJldmlzaW9uIHRvIHRoZSBuZXcgcmV2aXNpb24uCisJIyBUaGlzIGlzIHRvIHNob3cgdGhlIHRydXRoIG9mIHdoYXQgaGFwcGVuZWQgaW4gdGhpcyBjaGFuZ2UuCisJIyBUaGVyZSdzIG5vIHBvaW50IHNob3dpbmcgdGhlIHN0YXQgZnJvbSB0aGUgYmFzZSB0byB0aGUgbmV3CisJIyByZXZpc2lvbiBiZWNhdXNlIHRoZSBiYXNlIGlzIGVmZmVjdGl2ZWx5IGEgcmFuZG9tIHJldmlzaW9uIGF0IHRoaXMKKwkjIHBvaW50IC0gdGhlIHVzZXIgd2lsbCBiZSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyByZXZpc2lvbiBjaGFuZ2VkCisJIyAtIGluY2x1ZGluZyB0aGUgdW5kb2luZyBvZiBwcmV2aW91cyByZXZpc2lvbnMgaW4gdGhlIGNhc2Ugb2YKKwkjIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcy4KKwllY2hvICIiCisJZWNobyAiU3VtbWFyeSBvZiBjaGFuZ2VzOiIKKwlnaXQgZGlmZi10cmVlICRkaWZmb3B0cyAkb2xkcmV2Li4kbmV3cmV2Cit9CisKKyMKKyMgQ2FsbGVkIGZvciB0aGUgZGVsZXRpb24gb2YgYSBicmFuY2gKKyMKK2dlbmVyYXRlX2RlbGV0ZV9icmFuY2hfZW1haWwoKQoreworCWVjaG8gIiAgICAgICB3YXMgICRvbGRyZXYiCisJZWNobyAiIgorCWVjaG8gJExPR0JFR0lOCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWFsd2F5cyAtLWVuY29kaW5nPVVURi04IC0tcHJldHR5PW9uZWxpbmUgJG9sZHJldgorCWVjaG8gJExPR0VORAorfQorCisjIC0tLS0tLS0tLS0tLS0tLSBBbm5vdGF0ZWQgdGFncworCisjCisjIENhbGxlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGFuIGFubm90YXRlZCB0YWcKKyMKK2dlbmVyYXRlX2NyZWF0ZV9hdGFnX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgIGF0ICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCisJZ2VuZXJhdGVfYXRhZ19lbWFpbAorfQorCisjCisjIENhbGxlZCBmb3IgdGhlIHVwZGF0ZSBvZiBhbiBhbm5vdGF0ZWQgdGFnICh0aGlzIGlzIHByb2JhYmx5IGEgcmFyZSBldmVudAorIyBhbmQgbWF5IG5vdCBldmVuIGJlIGFsbG93ZWQpCisjCitnZW5lcmF0ZV91cGRhdGVfYXRhZ19lbWFpbCgpCit7CisJZWNobyAiICAgICAgICB0byAgJG5ld3JldiAoJG5ld3Jldl90eXBlKSIKKwllY2hvICIgICAgICBmcm9tICAkb2xkcmV2ICh3aGljaCBpcyBub3cgb2Jzb2xldGUpIgorCisJZ2VuZXJhdGVfYXRhZ19lbWFpbAorfQorCisjCisjIENhbGxlZCB3aGVuIGFuIGFubm90YXRlZCB0YWcgaXMgY3JlYXRlZCBvciBjaGFuZ2VkCisjCitnZW5lcmF0ZV9hdGFnX2VtYWlsKCkKK3sKKwkjIFVzZSBnaXQgZm9yLWVhY2gtcmVmIHRvIHB1bGwgb3V0IHRoZSBpbmRpdmlkdWFsIGZpZWxkcyBmcm9tIHRoZQorCSMgdGFnCisJZXZhbCAkKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0nCisJdGFnb2JqZWN0PSUoKm9iamVjdG5hbWUpCisJdGFndHlwZT0lKCpvYmplY3R0eXBlKQorCXRhZ2dlcj0lKHRhZ2dlcm5hbWUpCisJdGFnZ2VkPSUodGFnZ2VyZGF0ZSknICRyZWZuYW1lCisJKQorCisJZWNobyAiICAgdGFnZ2luZyAgJHRhZ29iamVjdCAoJHRhZ3R5cGUpIgorCWNhc2UgIiR0YWd0eXBlIiBpbgorCWNvbW1pdCkKKworCQkjIElmIHRoZSB0YWdnZWQgb2JqZWN0IGlzIGEgY29tbWl0LCB0aGVuIHdlIGFzc3VtZSB0aGlzIGlzIGEKKwkJIyByZWxlYXNlLCBhbmQgc28gd2UgY2FsY3VsYXRlIHdoaWNoIHRhZyB0aGlzIHRhZyBpcworCQkjIHJlcGxhY2luZworCQlwcmV2dGFnPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTAgJG5ld3Jldl4gMj4vZGV2L251bGwpCisKKwkJaWYgWyAtbiAiJHByZXZ0YWciIF07IHRoZW4KKwkJCWVjaG8gIiAgcmVwbGFjZXMgICRwcmV2dGFnIgorCQlmaQorCQk7OworCSopCisJCWVjaG8gIiAgICBsZW5ndGggICQoZ2l0IGNhdC1maWxlIC1zICR0YWdvYmplY3QpIGJ5dGVzIgorCQk7OworCWVzYWMKKwllY2hvICIgdGFnZ2VkIGJ5ICAkdGFnZ2VyIgorCWVjaG8gIiAgICAgICAgb24gICR0YWdnZWQiCisKKwllY2hvICIiCisJZWNobyAkTE9HQkVHSU4KKworCSMgU2hvdyB0aGUgY29udGVudCBvZiB0aGUgdGFnIG1lc3NhZ2U7IHRoaXMgbWlnaHQgY29udGFpbiBhIGNoYW5nZQorCSMgbG9nIG9yIHJlbGVhc2Ugbm90ZXMgc28gaXMgd29ydGggZGlzcGxheWluZy4KKwlnaXQgY2F0LWZpbGUgdGFnICRuZXdyZXYgfCBzZWQgLWUgJzEsL14kL2QnCisKKwllY2hvICIiCisJY2FzZSAiJHRhZ3R5cGUiIGluCisJY29tbWl0KQorCQkjIE9ubHkgY29tbWl0IHRhZ3MgbWFrZSBzZW5zZSB0byBoYXZlIHJldi1saXN0IG9wZXJhdGlvbnMKKwkJIyBwZXJmb3JtZWQgb24gdGhlbQorCQlpZiBbIC1uICIkcHJldnRhZyIgXTsgdGhlbgorCQkJIyBTaG93IGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHJlbGVhc2UKKwkJCWdpdCBzaG9ydGxvZyAiJHByZXZ0YWcuLiRuZXdyZXYiCisJCWVsc2UKKwkJCSMgTm8gcHJldmlvdXMgdGFnLCBzaG93IGFsbCB0aGUgY2hhbmdlcyBzaW5jZSB0aW1lCisJCQkjIGJlZ2FuCisJCQlnaXQgc2hvcnRsb2cgJG5ld3JldgorCQlmaQorCQk7OworCSopCisJCSMgWFhYOiBJcyB0aGVyZSBhbnl0aGluZyB1c2VmdWwgd2UgY2FuIGRvIGZvciBub24tY29tbWl0CisJCSMgb2JqZWN0cz8KKwkJOzsKKwllc2FjCisKKwllY2hvICRMT0dFTkQKK30KKworIworIyBDYWxsZWQgZm9yIHRoZSBkZWxldGlvbiBvZiBhbiBhbm5vdGF0ZWQgdGFnCisjCitnZW5lcmF0ZV9kZWxldGVfYXRhZ19lbWFpbCgpCit7CisJZWNobyAiICAgICAgIHdhcyAgJG9sZHJldiIKKwllY2hvICIiCisJZWNobyAkTE9HQkVHSU4KKwlnaXQgZGlmZi10cmVlIC1zIC0tYWx3YXlzIC0tZW5jb2Rpbmc9VVRGLTggLS1wcmV0dHk9b25lbGluZSAkb2xkcmV2CisJZWNobyAkTE9HRU5ECit9CisKKyMgLS0tLS0tLS0tLS0tLS0tIEdlbmVyYWwgcmVmZXJlbmNlcworCisjCisjIENhbGxlZCB3aGVuIGFueSBvdGhlciB0eXBlIG9mIHJlZmVyZW5jZSBpcyBjcmVhdGVkIChtb3N0IGxpa2VseSBhCisjIG5vbi1hbm5vdGF0ZWQgdGFnKQorIworZ2VuZXJhdGVfY3JlYXRlX2dlbmVyYWxfZW1haWwoKQoreworCWVjaG8gIiAgICAgICAgYXQgICRuZXdyZXYgKCRuZXdyZXZfdHlwZSkiCisKKwlnZW5lcmF0ZV9nZW5lcmFsX2VtYWlsCit9CisKKyMKKyMgQ2FsbGVkIHdoZW4gYW55IG90aGVyIHR5cGUgb2YgcmVmZXJlbmNlIGlzIHVwZGF0ZWQgKG1vc3QgbGlrZWx5IGEKKyMgbm9uLWFubm90YXRlZCB0YWcpCisjCitnZW5lcmF0ZV91cGRhdGVfZ2VuZXJhbF9lbWFpbCgpCit7CisJZWNobyAiICAgICAgICB0byAgJG5ld3JldiAoJG5ld3Jldl90eXBlKSIKKwllY2hvICIgICAgICBmcm9tICAkb2xkcmV2IgorCisJZ2VuZXJhdGVfZ2VuZXJhbF9lbWFpbAorfQorCisjCisjIENhbGxlZCBmb3IgY3JlYXRpb24gb3IgdXBkYXRlIG9mIGFueSBvdGhlciB0eXBlIG9mIHJlZmVyZW5jZQorIworZ2VuZXJhdGVfZ2VuZXJhbF9lbWFpbCgpCit7CisJIyBVbmFubm90YXRlZCB0YWdzIGFyZSBtb3JlIGFib3V0IG1hcmtpbmcgYSBwb2ludCB0aGFuIHJlbGVhc2luZyBhCisJIyB2ZXJzaW9uOyB0aGVyZWZvcmUgd2UgZG9uJ3QgZG8gdGhlIHNob3J0bG9nIHN1bW1hcnkgdGhhdCB3ZSBkbyBmb3IKKwkjIGFubm90YXRlZCB0YWdzIGFib3ZlIC0gd2Ugc2ltcGx5IHNob3cgdGhhdCB0aGUgcG9pbnQgaGFzIGJlZW4KKwkjIG1hcmtlZCwgYW5kIHByaW50IHRoZSBsb2cgbWVzc2FnZSBmb3IgdGhlIG1hcmtlZCBwb2ludCBmb3IKKwkjIHJlZmVyZW5jZSBwdXJwb3NlcworCSMKKwkjIE5vdGUgdGhpcyBzZWN0aW9uIGFsc28gY2F0Y2hlcyBhbnkgb3RoZXIgcmVmZXJlbmNlIHR5cGUgKGFsdGhvdWdoCisJIyB0aGVyZSBhcmVuJ3QgYW55KSBhbmQgZGVhbHMgd2l0aCB0aGVtIGluIHRoZSBzYW1lIHdheS4KKworCWVjaG8gIiIKKwlpZiBbICIkbmV3cmV2X3R5cGUiID0gImNvbW1pdCIgXTsgdGhlbgorCQllY2hvICRMT0dCRUdJTgorCQlnaXQgZGlmZi10cmVlIC1zIC0tYWx3YXlzIC0tZW5jb2Rpbmc9VVRGLTggLS1wcmV0dHk9bWVkaXVtICRuZXdyZXYKKwkJZWNobyAkTE9HRU5ECisJZWxzZQorCQkjIFdoYXQgY2FuIHdlIGRvIGhlcmU/ICBUaGUgdGFnIG1hcmtzIGFuIG9iamVjdCB0aGF0IGlzIG5vdAorCQkjIGEgY29tbWl0LCBzbyB0aGVyZSBpcyBubyBsb2cgZm9yIHVzIHRvIGRpc3BsYXkuICBJdCdzCisJCSMgcHJvYmFibHkgbm90IHdpc2UgdG8gb3V0cHV0IGdpdCBjYXQtZmlsZSBhcyBpdCBjb3VsZCBiZSBhCisJCSMgYmluYXJ5IGJsb2IuICBXZSdsbCBqdXN0IHNheSBob3cgYmlnIGl0IGlzCisJCWVjaG8gIiRuZXdyZXYgaXMgYSAkbmV3cmV2X3R5cGUsIGFuZCBpcyAkKGdpdCBjYXQtZmlsZSAtcyAkbmV3cmV2KSBieXRlcyBsb25nLiIKKwlmaQorfQorCisjCisjIENhbGxlZCBmb3IgdGhlIGRlbGV0aW9uIG9mIGFueSBvdGhlciB0eXBlIG9mIHJlZmVyZW5jZQorIworZ2VuZXJhdGVfZGVsZXRlX2dlbmVyYWxfZW1haWwoKQoreworCWVjaG8gIiAgICAgICB3YXMgICRvbGRyZXYiCisJZWNobyAiIgorCWVjaG8gJExPR0JFR0lOCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWFsd2F5cyAtLWVuY29kaW5nPVVURi04IC0tcHJldHR5PW9uZWxpbmUgJG9sZHJldgorCWVjaG8gJExPR0VORAorfQorCisKKyMgLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzCisKKyMKKyMgU2hvdyBuZXcgcmV2aXNpb25zIGFzIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gc2VlIHRoZW0gaW4gdGhlIGVtYWlsLgorIworc2hvd19uZXdfcmV2aXNpb25zKCkKK3sKKwkjIFRoaXMgc2hvd3MgYWxsIGxvZyBlbnRyaWVzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGNvdmVyZWQgYnkKKwkjIGFub3RoZXIgcmVmIC0gaS5lLiBjb21taXRzIHRoYXQgYXJlIG5vdyBhY2Nlc3NpYmxlIGZyb20gdGhpcworCSMgcmVmIHRoYXQgd2VyZSBwcmV2aW91c2x5IG5vdCBhY2Nlc3NpYmxlCisJIyAoc2VlIGdlbmVyYXRlX3VwZGF0ZV9icmFuY2hfZW1haWwgZm9yIHRoZSBleHBsYW5hdGlvbiBvZiB0aGlzCisJIyBjb21tYW5kKQorCisJIyBSZXZpc2lvbiByYW5nZSBwYXNzZWQgdG8gcmV2LWxpc3QgZGlmZmVycyBmb3IgbmV3IHZzLiB1cGRhdGVkCisJIyBicmFuY2hlcy4KKwlpZiBbICIkY2hhbmdlX3R5cGUiID0gY3JlYXRlIF0KKwl0aGVuCisJCSMgU2hvdyBhbGwgcmV2aXNpb25zIGV4Y2x1c2l2ZSB0byB0aGlzIChuZXcpIGJyYW5jaC4KKwkJcmV2c3BlYz0kbmV3cmV2CisJZWxzZQorCQkjIEJyYW5jaCB1cGRhdGU7IHNob3cgcmV2aXNpb25zIG5vdCBwYXJ0IG9mICRvbGRyZXYuCisJCXJldnNwZWM9JG9sZHJldi4uJG5ld3JldgorCWZpCisKKwlvdGhlcl9icmFuY2hlcz0kKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSknIHJlZnMvaGVhZHMvIHwKKwkgICAgZ3JlcCAtRiAtdiAkcmVmbmFtZSkKKwlnaXQgcmV2LXBhcnNlIC0tbm90ICRvdGhlcl9icmFuY2hlcyB8CisJaWYgWyAteiAiJGN1c3RvbV9zaG93cmV2IiBdCisJdGhlbgorCQlnaXQgcmV2LWxpc3QgLS1wcmV0dHkgLS1zdGRpbiAkcmV2c3BlYworCWVsc2UKKwkJZ2l0IHJldi1saXN0IC0tc3RkaW4gJHJldnNwZWMgfAorCQl3aGlsZSByZWFkIG9uZXJldgorCQlkbworCQkJZXZhbCAkKHByaW50ZiAiJGN1c3RvbV9zaG93cmV2IiAkb25lcmV2KQorCQlkb25lCisJZmkKK30KKworCitsaW1pdF9saW5lcygpCit7CisJbGluZXM9MAorCXNraXBwZWQ9MAorCXdoaWxlIElGUz0iIiByZWFkIC1yIGxpbmU7IGRvCisJCWxpbmVzPSQoKGxpbmVzICsgMSkpCisJCWlmIFsgJGxpbmVzIC1ndCAkMSBdOyB0aGVuCisJCQlza2lwcGVkPSQoKHNraXBwZWQgKyAxKSkKKwkJZWxzZQorCQkJcHJpbnRmICIlc1xuIiAiJGxpbmUiCisJCWZpCisJZG9uZQorCWlmIFsgJHNraXBwZWQgLW5lIDAgXTsgdGhlbgorCQllY2hvICIuLi4gJHNraXBwZWQgbGluZXMgc3VwcHJlc3NlZCAuLi4iCisJZmkKK30KKworCitzZW5kX21haWwoKQoreworCWlmIFsgLW4gIiRlbnZlbG9wZXNlbmRlciIgXTsgdGhlbgorCQkvdXNyL3NiaW4vc2VuZG1haWwgLXQgLWYgIiRlbnZlbG9wZXNlbmRlciIKKwllbHNlCisJCS91c3Ivc2Jpbi9zZW5kbWFpbCAtdAorCWZpCit9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWluKCkKKworIyAtLS0gQ29uc3RhbnRzCitMT0dCRUdJTj0iLSBMb2cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitMT0dFTkQ9Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCisjIC0tLSBDb25maWcKKyMgU2V0IEdJVF9ESVIgZWl0aGVyIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBvciBmcm9tIHRoZSBlbnZpcm9ubWVudAorIyB2YXJpYWJsZS4KK0dJVF9ESVI9JChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkKK2lmIFsgLXogIiRHSVRfRElSIiBdOyB0aGVuCisJZWNobyA+JjIgImZhdGFsOiBwb3N0LXJlY2VpdmU6IEdJVF9ESVIgbm90IHNldCIKKwlleGl0IDEKK2ZpCisKK3Byb2plY3RkZXNjPSQoc2VkIC1uZSAnMXAnICIkR0lUX0RJUi9kZXNjcmlwdGlvbiIgMj4vZGV2L251bGwpCisjIENoZWNrIGlmIHRoZSBkZXNjcmlwdGlvbiBpcyB1bmNoYW5nZWQgZnJvbSBpdCdzIGRlZmF1bHQsIGFuZCBzaG9ydGVuIGl0IHRvCisjIGEgbW9yZSBtYW5hZ2VhYmxlIGxlbmd0aCBpZiBpdCBpcworaWYgZXhwciAiJHByb2plY3RkZXNjIiA6ICJVbm5hbWVkIHJlcG9zaXRvcnkuKiQiID4vZGV2L251bGwKK3RoZW4KKwlwcm9qZWN0ZGVzYz0iVU5OQU1FRCBQUk9KRUNUIgorZmkKKworcmVjaXBpZW50cz0kKGdpdCBjb25maWcgaG9va3MubWFpbGluZ2xpc3QpCithbm5vdW5jZXJlY2lwaWVudHM9JChnaXQgY29uZmlnIGhvb2tzLmFubm91bmNlbGlzdCkKK2VudmVsb3Blc2VuZGVyPSQoZ2l0IGNvbmZpZyBob29rcy5lbnZlbG9wZXNlbmRlcikKK2VtYWlscHJlZml4PSQoZ2l0IGNvbmZpZyBob29rcy5lbWFpbHByZWZpeCB8fCBlY2hvICdbU0NNXSAnKQorY3VzdG9tX3Nob3dyZXY9JChnaXQgY29uZmlnIGhvb2tzLnNob3dyZXYpCittYXhsaW5lcz0kKGdpdCBjb25maWcgaG9va3MuZW1haWxtYXhsaW5lcykKK2RpZmZvcHRzPSQoZ2l0IGNvbmZpZyBob29rcy5kaWZmb3B0cykKKzogJHtkaWZmb3B0czo9Ii0tc3RhdCAtLXN1bW1hcnkgLS1maW5kLWNvcGllcy1oYXJkZXIifQorCisjIC0tLSBNYWluIGxvb3AKKyMgQWxsb3cgZHVhbCBtb2RlOiBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lIGp1c3QgbGlrZSB0aGUgdXBkYXRlIGhvb2ssIG9yCisjIGlmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4gdGhlbiBydW4gYXMgYSBob29rIHNjcmlwdAoraWYgWyAtbiAiJDEiIC1hIC1uICIkMiIgLWEgLW4gIiQzIiBdOyB0aGVuCisJIyBPdXRwdXQgdG8gdGhlIHRlcm1pbmFsIGluIGNvbW1hbmQgbGluZSBtb2RlIC0gaWYgc29tZW9uZSB3YW50ZWQgdG8KKwkjIHJlc2VuZCBhbiBlbWFpbDsgdGhleSBjb3VsZCByZWRpcmVjdCB0aGUgb3V0cHV0IHRvIHNlbmRtYWlsCisJIyB0aGVtc2VsdmVzCisJcHJlcF9mb3JfZW1haWwgJDIgJDMgJDEgJiYgUEFHRVI9IGdlbmVyYXRlX2VtYWlsCitlbHNlCisJd2hpbGUgcmVhZCBvbGRyZXYgbmV3cmV2IHJlZm5hbWUKKwlkbworCQlwcmVwX2Zvcl9lbWFpbCAkb2xkcmV2ICRuZXdyZXYgJHJlZm5hbWUgfHwgY29udGludWUKKwkJZ2VuZXJhdGVfZW1haWwgJG1heGxpbmVzIHwgc2VuZF9tYWlsCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeSBiL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YmE3OGM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9wcmUtYXV0by1nYy1iYXR0ZXJ5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHZlcmlmeSBpZiB5b3UgYXJlIG9uIGJhdHRlcnksIGluIGNhc2UgeW91CisjIGFyZSBydW5uaW5nIExpbnV4IG9yIE9TIFguIENhbGxlZCBieSBnaXQtZ2MgLS1hdXRvIHdpdGggbm8gYXJndW1lbnRzLgorIyBUaGUgaG9vayBzaG91bGQgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBhZnRlciBpc3N1aW5nIGFuIGFwcHJvcHJpYXRlCisjIG1lc3NhZ2UgaWYgaXQgd2FudHMgdG8gc3RvcCB0aGUgYXV0byByZXBhY2tpbmcuCisjCisjIFRoaXMgaG9vayBpcyBzdG9yZWQgaW4gdGhlIGNvbnRyaWIvaG9va3MgZGlyZWN0b3J5LiBZb3VyIGRpc3RyaWJ1dGlvbgorIyBtYXkgaGF2ZSBwdXQgdGhpcyBzb21ld2hlcmUgZWxzZS4gSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgaG9vaywgeW91CisjIHNob3VsZCBtYWtlIHRoaXMgc2NyaXB0IGV4ZWN1dGFibGUgdGhlbiBsaW5rIHRvIGl0IGluIHRoZSByZXBvc2l0b3J5CisjIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBpdCBpbi4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIHRoZSBob29rIGlzIHN0b3JlZCBpbgorIyAvdXNyL3NoYXJlL2dpdC1jb3JlL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeToKKyMKKyMgY2QgL3BhdGgvdG8veW91ci9yZXBvc2l0b3J5LmdpdAorIyBsbiAtc2YgL3Vzci9zaGFyZS9naXQtY29yZS9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnkgXAorIwlob29rcy9wcmUtYXV0by1nYworCitpZiB0ZXN0IC14IC9zYmluL29uX2FjX3Bvd2VyICYmICgvc2Jpbi9vbl9hY19wb3dlcjt0ZXN0ICQ/IC1uZSAxKQordGhlbgorCWV4aXQgMAorZWxpZiB0ZXN0ICIkKGNhdCAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9BQy9vbmxpbmUgMj4vZGV2L251bGwpIiA9IDEKK3RoZW4KKwlleGl0IDAKK2VsaWYgZ3JlcCAtcSAnb24tbGluZScgL3Byb2MvYWNwaS9hY19hZGFwdGVyL0FDL3N0YXRlIDI+L2Rldi9udWxsCit0aGVuCisJZXhpdCAwCitlbGlmIGdyZXAgLXEgJzB4MDEkJyAvcHJvYy9hcG0gMj4vZGV2L251bGwKK3RoZW4KKwlleGl0IDAKK2VsaWYgZ3JlcCAtcSAiQUMgUG93ZXIgXCs6IDEiIC9wcm9jL3BtdS9pbmZvIDI+L2Rldi9udWxsCit0aGVuCisJZXhpdCAwCitlbGlmIHRlc3QgLXggL3Vzci9iaW4vcG1zZXQgJiYgL3Vzci9iaW4vcG1zZXQgLWcgYmF0dCB8CisJZ3JlcCAtcSAiZHJhd2luZyBmcm9tICdBQyBQb3dlciciCit0aGVuCisJZXhpdCAwCitmaQorCitlY2hvICJBdXRvIHBhY2tpbmcgZGVmZXJyZWQ7IG5vdCBvbiBBQyIKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsIGIvY29udHJpYi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI3NzBhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL3NldGdpdHBlcm1zLnBlcmwKQEAgLTAsMCArMSwyMTQgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9zaCBFbmdsYW5kCisjCisjIFRoaXMgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIHNhdmUvcmVzdG9yZSBmdWxsIHBlcm1pc3Npb25zIGFuZCBvd25lcnNoaXAgZGF0YQorIyB3aXRoaW4gYSBnaXQgd29ya2luZyB0cmVlLgorIworIyBUbyBzYXZlIHBlcm1pc3Npb25zL293bmVyc2hpcCBkYXRhLCBwbGFjZSB0aGlzIHNjcmlwdCBpbiB5b3VyIC5naXQvaG9va3MKKyMgZGlyZWN0b3J5IGFuZCBlbmFibGUgYSBgcHJlLWNvbW1pdGAgaG9vayB3aXRoIHRoZSBmb2xsb3dpbmcgbGluZXM6CisjICAgICAgIyEvYmluL3NoCisjICAgICBTVUJESVJFQ1RPUllfT0s9MSAuIGdpdC1zaC1zZXR1cAorIyAgICAgJEdJVF9ESVIvaG9va3Mvc2V0Z2l0cGVybXMucGVybCAtcgorIworIyBUbyByZXN0b3JlIHBlcm1pc3Npb25zL293bmVyc2hpcCBkYXRhLCBwbGFjZSB0aGlzIHNjcmlwdCBpbiB5b3VyIC5naXQvaG9va3MKKyMgZGlyZWN0b3J5IGFuZCBlbmFibGUgYSBgcG9zdC1tZXJnZWAgYW5kIGBwb3N0LWNoZWNrb3V0YCBob29rIHdpdGggdGhlCisjIGZvbGxvd2luZyBsaW5lczoKKyMgICAgICAjIS9iaW4vc2gKKyMgICAgIFNVQkRJUkVDVE9SWV9PSz0xIC4gZ2l0LXNoLXNldHVwCisjICAgICAkR0lUX0RJUi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsIC13CisjCit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBGaWxlOjpGaW5kOwordXNlIEZpbGU6OkJhc2VuYW1lOworCitteSAkdXNhZ2UgPQorInVzYWdlOiBzZXRnaXRwZXJtcy5wZXJsIFtPUFRJT05dLi4uIDwtLXJlYWR8LS13cml0ZT4KK1RoaXMgcHJvZ3JhbSB1c2VzIGEgZmlsZSBgLmdpdG1ldGFgIHRvIHN0b3JlL3Jlc3RvcmUgcGVybWlzc2lvbnMgYW5kIHVpZC9naWQKK2luZm8gZm9yIGFsbCBmaWxlcy9kaXJzIHRyYWNrZWQgYnkgZ2l0IGluIHRoZSByZXBvc2l0b3J5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1SZWFkIE1vZGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistciwgIC0tcmVhZCAgICAgICAgIFJlYWRzIHBlcm1zL2V0YyBmcm9tIHdvcmtpbmcgZGlyIGludG8gYSAuZ2l0bWV0YSBmaWxlCistcywgIC0tc3Rkb3V0ICAgICAgIE91dHB1dCB0byBzdGRvdXQgaW5zdGVhZCBvZiAuZ2l0bWV0YQorLWQsICAtLWRpZmYgICAgICAgICBTaG93IHVuaWZpZWQgZGlmZiBvZiBwZXJtcyBmaWxlIChYT1Igd2l0aCAtLXN0ZG91dCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tV3JpdGUgTW9kZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLXcsICAtLXdyaXRlICAgICAgICBNb2RpZnkgcGVybXMvZXRjIGluIHdvcmtpbmcgZGlyIHRvIG1hdGNoIHRoZSAuZ2l0bWV0YSBmaWxlCistdiwgIC0tdmVyYm9zZSAgICAgIEJlIHZlcmJvc2UKKworXG4iOworCitteSAoJHN0ZG91dCwgJHNob3dkaWZmLCAkdmVyYm9zZSwgJHJlYWRfbW9kZSwgJHdyaXRlX21vZGUpOworCitpZiAoKEBBUkdWIDwgMCkgfHwgIUdldE9wdGlvbnMoCisJCQkgICAgICAgInN0ZG91dCIsICAgICAgICAgXCRzdGRvdXQsCisJCQkgICAgICAgImRpZmYiLCAgICAgICAgICAgXCRzaG93ZGlmZiwKKwkJCSAgICAgICAicmVhZCIsICAgICAgICAgICBcJHJlYWRfbW9kZSwKKwkJCSAgICAgICAid3JpdGUiLCAgICAgICAgICBcJHdyaXRlX21vZGUsCisJCQkgICAgICAgInZlcmJvc2UiLCAgICAgICAgXCR2ZXJib3NlLAorCQkJICAgICAgKSkgeyBkaWUgJHVzYWdlOyB9CitkaWUgJHVzYWdlIHVubGVzcyAoJHJlYWRfbW9kZSB4b3IgJHdyaXRlX21vZGUpOworCitteSAkdG9wZGlyID0gYGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXBgIG9yIGRpZSAiXG4iOyBjaG9tcCAkdG9wZGlyOworbXkgJGdpdGRpciA9ICR0b3BkaXIgLiAnLmdpdCc7CitteSAkZ2l0bWV0YSA9ICR0b3BkaXIgLiAnLmdpdG1ldGEnOworCitpZiAoJHdyaXRlX21vZGUpIHsKKyAgICAjIFVwZGF0ZSB0aGUgd29ya2luZyBkaXIgcGVybWlzc2lvbnMvb3duZXJzaGlwIGJhc2VkIG9uIGRhdGEgZnJvbSAuZ2l0bWV0YQorICAgIG9wZW4gKElOLCAiPCRnaXRtZXRhIikgb3IgZGllICJDb3VsZCBub3Qgb3BlbiAkZ2l0bWV0YSBmb3IgcmVhZGluZzogJCFcbiI7CisgICAgd2hpbGUgKGRlZmluZWQgKCRfID0gPElOPikpIHsKKwljaG9tcDsKKwlpZiAoL14oLiopICBtb2RlPShcUyspXHMrdWlkPShcZCspXHMrZ2lkPShcZCspLykgeworCSAgICAjIENvbXBhcmUgcmVjb3JkZWQgcGVybXMgdG8gYWN0dWFsIHBlcm1zIGluIHRoZSB3b3JraW5nIGRpcgorCSAgICBteSAoJHBhdGgsICRtb2RlLCAkdWlkLCAkZ2lkKSA9ICgkMSwgJDIsICQzLCAkNCk7CisJICAgIG15ICRmdWxscGF0aCA9ICR0b3BkaXIgLiAkcGF0aDsKKwkgICAgbXkgKHVuZGVmLHVuZGVmLCR3bW9kZSx1bmRlZiwkd3VpZCwkd2dpZCkgPSBsc3RhdCgkZnVsbHBhdGgpOworCSAgICAkd21vZGUgPSBzcHJpbnRmICIlMDRvIiwgJHdtb2RlICYgMDc3Nzc7CisJICAgIGlmICgkbW9kZSBuZSAkd21vZGUpIHsKKwkJJHZlcmJvc2UgJiYgcHJpbnQgIlVwZGF0aW5nIHBlcm1pc3Npb25zIG9uICRwYXRoOiBvbGQ9JHdtb2RlLCBuZXc9JG1vZGVcbiI7CisJCWNobW9kIG9jdCgkbW9kZSksICRmdWxscGF0aDsKKwkgICAgfQorCSAgICBpZiAoJHVpZCAhPSAkd3VpZCB8fCAkZ2lkICE9ICR3Z2lkKSB7CisJCWlmICgkdmVyYm9zZSkgeworCQkgICAgIyBQcmludCBvdXQgdXNlci9ncm91cCBuYW1lcyBpbnN0ZWFkIG9mIHVpZC9naWQKKwkJICAgIG15ICRwd25hbWUgID0gZ2V0cHd1aWQoJHVpZCk7CisJCSAgICBteSAkZ3JwbmFtZSAgPSBnZXRncmdpZCgkZ2lkKTsKKwkJICAgIG15ICR3cHduYW1lICA9IGdldHB3dWlkKCR3dWlkKTsKKwkJICAgIG15ICR3Z3JwbmFtZSAgPSBnZXRncmdpZCgkd2dpZCk7CisJCSAgICAkcHduYW1lID0gJHVpZCBpZiAhZGVmaW5lZCAkcHduYW1lOworCQkgICAgJGdycG5hbWUgPSAkZ2lkIGlmICFkZWZpbmVkICRncnBuYW1lOworCQkgICAgJHdwd25hbWUgPSAkd3VpZCBpZiAhZGVmaW5lZCAkd3B3bmFtZTsKKwkJICAgICR3Z3JwbmFtZSA9ICR3Z2lkIGlmICFkZWZpbmVkICR3Z3JwbmFtZTsKKworCQkgICAgcHJpbnQgIlVwZGF0aW5nIHVpZC9naWQgb24gJHBhdGg6IG9sZD0kd3B3bmFtZS8kd2dycG5hbWUsIG5ldz0kcHduYW1lLyRncnBuYW1lXG4iOworCQl9CisJCWNob3duICR1aWQsICRnaWQsICRmdWxscGF0aDsKKwkgICAgfQorCX0KKwllbHNlIHsKKwkgICAgd2FybiAiSW52YWxpZCBpbnB1dCBmb3JtYXQgaW4gJGdpdG1ldGE6XG5cdCRfXG4iOworCX0KKyAgICB9CisgICAgY2xvc2UgSU47Cit9CitlbHNpZiAoJHJlYWRfbW9kZSkgeworICAgICMgSGFuZGxlIG1lcmdlIGNvbmZsaWN0cyBpbiB0aGUgLmdpdHBlcm1zIGZpbGUKKyAgICBpZiAoLWUgIiRnaXRkaXIvTUVSR0VfTVNHIikgeworCWlmIChgZ3JlcCA9PT09PT0gJGdpdG1ldGFgKSB7CisJICAgICMgQ29uZmxpY3Qgbm90IHJlc29sdmVkIC0tIGFib3J0IHRoZSBjb21taXQKKwkgICAgcHJpbnQgIlBFUk1JU1NJT05TL09XTkVSU0hJUCBDT05GTElDVFxuIjsKKwkgICAgcHJpbnQgIiAgICBSZXNvbHZlIHRoZSBjb25mbGljdCBpbiB0aGUgJGdpdG1ldGEgZmlsZSBhbmQgdGhlbiBydW5cbiI7CisJICAgIHByaW50ICIgICAgYC5naXQvaG9va3Mvc2V0Z2l0cGVybXMucGVybCAtLXdyaXRlYCB0byByZWNvbmNpbGUuXG4iOworCSAgICBleGl0IDE7CisJfQorCWVsc2lmIChgZ3JlcCAkZ2l0bWV0YSAkZ2l0ZGlyL01FUkdFX01TR2ApIHsKKwkgICAgIyBBIGNvbmZsaWN0IGluIC5naXRtZXRhIGhhcyBiZWVuIG1hbnVhbGx5IHJlc29sdmVkLiBWZXJpZnkgdGhhdAorCSAgICAjIHRoZSB3b3JraW5nIGRpciBwZXJtcyBtYXRjaGVzIHRoZSBjdXJyZW50IC5naXRtZXRhIHBlcm1zIGZvcgorCSAgICAjIGVhY2ggZmlsZS9kaXIgdGhhdCBjb25mbGljdGVkLgorCSAgICAjIFRoaXMgaXMgaGVyZSBiZWNhdXNlIGEgYHNldGdpdHBlcm1zLnBlcmwgLS13cml0ZWAgd2FzIG5vdAorCSAgICAjIHBlcmZvcm1lZCBkdWUgdG8gYSBtZXJnZSBjb25mbGljdCwgc28gcGVybWlzc2lvbnMvb3duZXJzaGlwCisJICAgICMgbWF5IG5vdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIG1hbnVhbGx5IG1lcmdlZCAuZ2l0bWV0YSBmaWxlLgorCSAgICBteSBAY29uZmxpY3RfZGlmZiA9IGBnaXQgc2hvdyBcJChjYXQgJGdpdGRpci9NRVJHRV9IRUFEKWA7CisJICAgIG15IEBjb25mbGljdF9maWxlczsKKwkgICAgbXkgJG1ldGFkaWZmID0gMDsKKworCSAgICAjIEJ1aWxkIGEgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbmZsaWN0ZWQgZnJvbSB0aGUgLmdpdG1ldGEgZGlmZgorCSAgICBmb3JlYWNoIG15ICRsaW5lIChAY29uZmxpY3RfZGlmZikgeworCQlpZiAoJGxpbmUgPX4gbXxeZGlmZiAtLWdpdCBhLyRnaXRtZXRhIGIvJGdpdG1ldGF8KSB7CisJCSAgICAkbWV0YWRpZmYgPSAxOworCQl9CisJCWVsc2lmICgkbGluZSA9fiAvXmRpZmYgLS1naXQvKSB7CisJCSAgICAkbWV0YWRpZmYgPSAwOworCQl9CisJCWVsc2lmICgkbWV0YWRpZmYgJiYgJGxpbmUgPX4gL15cKyguKikgIG1vZGU9LykgeworCQkgICAgcHVzaCBAY29uZmxpY3RfZmlsZXMsICQxOworCQl9CisJICAgIH0KKworCSAgICAjIFZlcmlmeSB0aGF0IGVhY2ggY29uZmxpY3QgZmlsZSBub3cgaGFzIHBlcm1pc3Npb25zIGNvbnNpc3RlbnQKKwkgICAgIyB3aXRoIHRoZSAuZ2l0bWV0YSBmaWxlCisJICAgIGZvcmVhY2ggbXkgJGZpbGUgKEBjb25mbGljdF9maWxlcykgeworCQlteSAkYWJzZmlsZSA9ICR0b3BkaXIgLiAkZmlsZTsKKwkJbXkgJGdtX2VudHJ5ID0gYGdyZXAgIl4kZmlsZSAgbW9kZT0iICRnaXRtZXRhYDsKKwkJaWYgKCRnbV9lbnRyeSA9fiAvbW9kZT0oXGQrKSAgdWlkPShcZCspICBnaWQ9KFxkKykvKSB7CisJCSAgICBteSAoJGdtX21vZGUsICRnbV91aWQsICRnbV9naWQpID0gKCQxLCAkMiwgJDMpOworCQkgICAgbXkgKHVuZGVmLHVuZGVmLCRtb2RlLHVuZGVmLCR1aWQsJGdpZCkgPSBsc3RhdCgiJGFic2ZpbGUiKTsKKwkJICAgICRtb2RlID0gc3ByaW50ZigiJTA0byIsICRtb2RlICYgMDc3NzcpOworCQkgICAgaWYgKCgkZ21fbW9kZSBuZSAkbW9kZSkgfHwgKCRnbV91aWQgIT0gJHVpZCkKKwkJCXx8ICgkZ21fZ2lkICE9ICRnaWQpKSB7CisJCQlwcmludCAiUEVSTUlTU0lPTlMvT1dORVJTSElQIENPTkZMSUNUXG4iOworCQkJcHJpbnQgIiAgICBNaXNtYXRjaCBmb3VuZCBmb3IgZmlsZTogJGZpbGVcbiI7CisJCQlwcmludCAiICAgIFJ1biBgLmdpdC9ob29rcy9zZXRnaXRwZXJtcy5wZXJsIC0td3JpdGVgIHRvIHJlY29uY2lsZS5cbiI7CisJCQlleGl0IDE7CisJCSAgICB9CisJCX0KKwkJZWxzZSB7CisJCSAgICBwcmludCAiV2FybmluZyEgUGVybWlzc2lvbnMvb3duZXJzaGlwIG5vIGxvbmdlciBiZWluZyB0cmFja2VkIGZvciBmaWxlOiAkZmlsZVxuIjsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAgICMgTm8gbWVyZ2UgY29uZmxpY3RzIC0tIHdyaXRlIG91dCBwZXJtcy9vd25lcnNoaXAgZGF0YSB0byAuZ2l0bWV0YSBmaWxlCisgICAgdW5sZXNzICgkc3Rkb3V0KSB7CisJb3BlbiAoT1VULCAiPiRnaXRtZXRhLnRtcCIpIG9yIGRpZSAiQ291bGQgbm90IG9wZW4gJGdpdG1ldGEudG1wIGZvciB3cml0aW5nOiAkIVxuIjsKKyAgICB9CisKKyAgICBteSBAZmlsZXMgPSBgZ2l0IGxzLWZpbGVzYDsKKyAgICBteSAlZGlyczsKKworICAgIGZvcmVhY2ggbXkgJHBhdGggKEBmaWxlcykgeworCWNob21wICRwYXRoOworCSMgV2UgaGF2ZSB0byBtYW51YWxseSBhZGQgc3RhdHMgZm9yIHBhcmVudCBkaXJlY3RvcmllcworCW15ICRwYXJlbnQgPSBkaXJuYW1lKCRwYXRoKTsKKwl3aGlsZSAoIWV4aXN0cyAkZGlyc3skcGFyZW50fSkgeworCSAgICAkZGlyc3skcGFyZW50fSA9IDE7CisJICAgIG5leHQgaWYgJHBhcmVudCBlcSAnLic7CisJICAgIHByaW50c3RhdHMoJHBhcmVudCk7CisJICAgICRwYXJlbnQgPSBkaXJuYW1lKCRwYXJlbnQpOworCX0KKwkjIE5vdyB0aGUgZ2l0LXRyYWNrZWQgZmlsZQorCXByaW50c3RhdHMoJHBhdGgpOworICAgIH0KKworICAgICMgZGlmZiB0aGUgdGVtcG9yYXJ5IG1ldGFkYXRhIGZpbGUgdG8gc2VlIGlmIGFueXRoaW5nIGhhcyBjaGFuZ2VkCisgICAgIyBJZiBubyBtZXRhZGF0YSBoYXMgY2hhbmdlZCwgZG9uJ3Qgb3ZlcndyaXRlIHRoZSByZWFsIGZpbGUKKyAgICAjIFRoaXMgaXMganVzdCBzbyBgZ2l0IGNvbW1pdCAtYWAgZG9lc24ndCB0cnkgdG8gY29tbWl0IGEgYm9ndXMgdXBkYXRlCisgICAgdW5sZXNzICgkc3Rkb3V0KSB7CisJaWYgKCEgLWUgJGdpdG1ldGEpIHsKKwkgICAgcmVuYW1lICIkZ2l0bWV0YS50bXAiLCAkZ2l0bWV0YTsKKwl9CisJZWxzZSB7CisJICAgIG15ICRkaWZmID0gYGRpZmYgLVUgMCAkZ2l0bWV0YSAkZ2l0bWV0YS50bXBgOworCSAgICBpZiAoJGRpZmYgbmUgJycpIHsKKwkJcmVuYW1lICIkZ2l0bWV0YS50bXAiLCAkZ2l0bWV0YTsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkJdW5saW5rICIkZ2l0bWV0YS50bXAiOworCSAgICB9CisJICAgIGlmICgkc2hvd2RpZmYpIHsKKwkJcHJpbnQgJGRpZmY7CisJICAgIH0KKwl9CisJY2xvc2UgT1VUOworICAgIH0KKyAgICAjIE1ha2Ugc3VyZSB0aGUgLmdpdG1ldGEgZmlsZSBpcyB0cmFja2VkCisgICAgc3lzdGVtKCJnaXQgYWRkICRnaXRtZXRhIik7Cit9CisKKworc3ViIHByaW50c3RhdHMgeworICAgIG15ICRwYXRoID0gJF9bMF07CisgICAgJHBhdGggPX4gcy9AL1xAL2c7CisgICAgbXkgKHVuZGVmLHVuZGVmLCRtb2RlLHVuZGVmLCR1aWQsJGdpZCkgPSBsc3RhdCgkcGF0aCk7CisgICAgJHBhdGggPX4gcy8lL1wlL2c7CisgICAgaWYgKCRzdGRvdXQpIHsKKwlwcmludCAkcGF0aDsKKwlwcmludGYgIiAgbW9kZT0lMDRvICB1aWQ9JHVpZCAgZ2lkPSRnaWRcbiIsICRtb2RlICYgMDc3Nzc7CisgICAgfQorICAgIGVsc2UgeworCXByaW50IE9VVCAkcGF0aDsKKwlwcmludGYgT1VUICIgIG1vZGU9JTA0byAgdWlkPSR1aWQgIGdpZD0kZ2lkXG4iLCAkbW9kZSAmIDA3Nzc3OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkIGIvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDA5MmQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkCkBAIC0wLDAgKzEsNDIxIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpTcGVjOworCiskRU5We1BBVEh9ICAgICA9ICcvb3B0L2dpdC9iaW4nOworbXkgJGFjbF9naXQgICAgPSAnL3Zjcy9hY2xzLmdpdCc7CitteSAkYWNsX2JyYW5jaCA9ICdyZWZzL2hlYWRzL21hc3Rlcic7CitteSAkZGVidWcgICAgICA9IDA7CisKKz1kb2MKK0ludm9rZWQgYXM6IHVwZGF0ZSByZWZuYW1lIG9sZC1zaGExIG5ldy1zaGExCisKK1RoaXMgc2NyaXB0IGlzIHJ1biBieSBnaXQtcmVjZWl2ZS1wYWNrIG9uY2UgZm9yIGVhY2ggcmVmIHRoYXQgdGhlCitjbGllbnQgaXMgdHJ5aW5nIHRvIG1vZGlmeS4gIElmIHdlIGV4aXQgd2l0aCBhIG5vbi16ZXJvIGV4aXQgdmFsdWUKK3RoZW4gdGhlIHVwZGF0ZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIHJlZiBpcyBkZW5pZWQsIGJ1dCB1cGRhdGVzIGZvcgorb3RoZXIgcmVmcyBpbiB0aGUgc2FtZSBydW4gb2YgcmVjZWl2ZS1wYWNrIG1heSBzdGlsbCBiZSBhbGxvd2VkLgorCitXZSBhcmUgcnVuIGFmdGVyIHRoZSBvYmplY3RzIGhhdmUgYmVlbiB1cGxvYWRlZCwgYnV0IGJlZm9yZSB0aGUKK3JlZiBpcyBhY3R1YWxseSBtb2RpZmllZC4gIFdlIHRha2UgYWR2YW50YWdlIG9mIHRoYXQgZmFjdCB3aGVuIHdlCitsb29rIGZvciAibmV3IiBjb21taXRzIGFuZCB0YWdzICh0aGUgbmV3IG9iamVjdHMgd29uJ3Qgc2hvdyB1cCBpbgorYHJldi1saXN0IC0tYWxsYCkuCisKK1RoaXMgc2NyaXB0IGxvYWRzIGFuZCBwYXJzZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbmZpZyBmaWxlCisidXNlcnMvJHRoaXNfdXNlci5hY2wiIGZyb20gdGhlICRhY2xfYnJhbmNoIGNvbW1pdCBvZiAkYWNsX2dpdCBPREIuCitUaGUgYWNsIGZpbGUgaXMgYSBnaXQtY29uZmlnIHN0eWxlIGZpbGUsIGJ1dCB1c2VzIGEgc2xpZ2h0bHkgbW9yZQorcmVzdHJpY3RlZCBzeW50YXggYXMgdGhlIFBlcmwgcGFyc2VyIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBzY3JpcHQKK2lzIG5vdCBuZWFybHkgYXMgcGVybWlzc2l2ZSBhcyBnaXQtY29uZmlnLgorCitFeGFtcGxlOgorCisgIFt1c2VyXQorICAgIGNvbW1pdHRlciA9IEpvaG4gRG9lIDxqb2huLmRvZUBleGFtcGxlLmNvbT4KKyAgICBjb21taXR0ZXIgPSBKb2huIFIuIERvZSA8am9obi5kb2VAZXhhbXBsZS5jb20+CisKKyAgW3JlcG9zaXRvcnkgImFjbHMiXQorICAgIGFsbG93ID0gaGVhZHMvbWFzdGVyCisgICAgYWxsb3cgPSBDRFVSIGZvciBoZWFkcy9qZC8KKyAgICBhbGxvdyA9IEMgICAgZm9yIF50YWdzL3ZcXGQrJAorCitGb3IgYWxsIG5ldyBjb21taXQgb3IgdGFnIG9iamVjdHMgdGhlIGNvbW1pdHRlciAob3IgdGFnZ2VyKSBsaW5lCit3aXRoaW4gdGhlIG9iamVjdCBtdXN0IGV4YWN0bHkgbWF0Y2ggb25lIG9mIHRoZSB1c2VyLmNvbW1pdHRlcgordmFsdWVzIGxpc3RlZCBpbiB0aGUgYWNsIGZpbGUgKCJIRUFEOnVzZXJzLyR0aGlzX3VzZXIuYWNsIikuCisKK0ZvciBhIGJyYW5jaCB0byBiZSBtb2RpZmllZCBhbiBhbGxvdyBsaW5lIHdpdGhpbiB0aGUgbWF0Y2hpbmcKK3JlcG9zaXRvcnkgc2VjdGlvbiBtdXN0IGJlIG1hdGNoZWQgZm9yIGJvdGggdGhlIHJlZm5hbWUgYW5kIHRoZQorb3Bjb2RlLgorCitSZXBvc2l0b3J5IHNlY3Rpb25zIGFyZSBtYXRjaGVkIG9uIHRoZSBiYXNlbmFtZSBvZiB0aGUgcmVwb3NpdG9yeQorKGFmdGVyIHJlbW92aW5nIHRoZSAuZ2l0IHN1ZmZpeCkuCisKK1RoZSBvcGNvZGUgYWJicmV2aWF0aW9ucyBhcmU6CisKKyAgQzogY3JlYXRlIG5ldyByZWYKKyAgRDogZGVsZXRlIGV4aXN0aW5nIHJlZgorICBVOiBmYXN0LWZvcndhcmQgZXhpc3RpbmcgcmVmIChubyBjb21taXQgbG9zcykKKyAgUjogcmV3aW5kL3JlYmFzZSBleGlzdGluZyByZWYgKGNvbW1pdCBsb3NzKQorCitpZiBubyBvcGNvZGVzIGFyZSBsaXN0ZWQgYmVmb3JlIHRoZSAiZm9yIiBrZXl3b3JkIHRoZW4gIlUiIChmb3IKK2Zhc3QtZm9yd2FyZCB1cGRhdGUgb25seSkgaXMgYXNzdW1lZCBhcyB0aGlzIGlzIHRoZSBtb3N0IGNvbW1vbgordXNhZ2UuCisKK1JlZm5hbWVzIGFyZSBtYXRjaGVkIGJ5IGFsd2F5cyBhc3N1bWluZyBhIHByZWZpeCBvZiAicmVmcy8iLgorVGhpcyBob29rIGZvcmJpZHMgcHVzaGluZyBvciBkZWxldGluZyBhbnl0aGluZyBub3QgdW5kZXIgInJlZnMvIi4KKworUmVmbmFtZXMgdGhhdCBzdGFydCB3aXRoIF4gYXJlIFBlcmwgcmVndWxhciBleHByZXNzaW9ucywgYW5kIHRoZSBeCitpcyBrZXB0IGFzIHBhcnQgb2YgdGhlIHJlZ2V4cC4gIFxcIGlzIG5lZWRlZCB0byBnZXQganVzdCBvbmUgXCwgc28KK1xcZCBleHBhbmRzIHRvIFxkIGluIFBlcmwuICBUaGUgM3JkIGFsbG93IGxpbmUgYWJvdmUgaXMgYW4gZXhhbXBsZS4KKworUmVmbmFtZXMgdGhhdCBkb24ndCBzdGFydCB3aXRoIF4gYnV0IHRoYXQgZW5kIHdpdGggLyBhcmUgcHJlZml4CittYXRjaGVzICgybmQgYWxsb3cgbGluZSBhYm92ZSk7IGFsbCBvdGhlciByZWZuYW1lcyBhcmUgc3RyaWN0CitlcXVhbGl0eSBtYXRjaGVzICgxc3QgYWxsb3cgbGluZSkuCisKK0FueXRoaW5nIHB1c2hlZCB0byAiaGVhZHMvIiAob2ssIHJlYWxseSAicmVmcy9oZWFkcy8iKSBtdXN0IGJlCithIGNvbW1pdC4gIFRhZ3MgYXJlIG5vdCBwZXJtaXR0ZWQgaGVyZS4KKworQW55dGhpbmcgcHVzaGVkIHRvICJ0YWdzLyIgKGVyciwgcmVhbGx5ICJyZWZzL3RhZ3MvIikgbXVzdCBiZSBhbgorYW5ub3RhdGVkIHRhZy4gIENvbW1pdHMsIGJsb2JzLCB0cmVlcywgZXRjLiBhcmUgbm90IHBlcm1pdHRlZCBoZXJlLgorQW5ub3RhdGVkIHRhZyBzaWduYXR1cmVzIGFyZW4ndCBjaGVja2VkLCBub3IgYXJlIHRoZXkgcmVxdWlyZWQuCisKK1RoZSBzcGVjaWFsIHN1YnJlcG9zaXRvcnkgb2YgJ2luZm8vbmV3LWNvbW1pdC1jaGVjaycgY2FuCitiZSBjcmVhdGVkIGFuZCB1c2VkIHRvIGFsbG93IHVzZXJzIHRvIHB1c2ggbmV3IGNvbW1pdHMgYW5kCit0YWdzIGZyb20gYW5vdGhlciBsb2NhbCByZXBvc2l0b3J5IHRvIHRoaXMgb25lLCBldmVuIGlmIHRoZXkKK2FyZW4ndCB0aGUgY29tbWl0dGVyL3RhZ2dlciBvZiB0aG9zZSBvYmplY3RzLiAgSW4gYSBudXQgc2hlbGwKK3RoZSBpbmZvL25ldy1jb21taXQtY2hlY2sgZGlyZWN0b3J5IGlzIGEgR2l0IHJlcG9zaXRvcnkgd2hvc2UKK29iamVjdHMvaW5mby9hbHRlcm5hdGVzIGZpbGUgbGlzdHMgdGhpcyByZXBvc2l0b3J5IGFuZCBhbGwgb3RoZXIKK3Bvc3NpYmxlIHNvdXJjZXMsIGFuZCB3aG9zZSByZWZzIHN1YmRpcmVjdG9yeSBjb250YWlucyBzeW1saW5rcwordG8gdGhpcyByZXBvc2l0b3J5J3MgcmVmcyBzdWJkaXJlY3RvcnksIGFuZCB0byBhbGwgb3RoZXIgcG9zc2libGUKK3NvdXJjZXMgcmVmcyBzdWJkaXJlY3Rvcmllcy4gIFllcywgdGhpcyBtZWFucyB0aGF0IHlvdSBjYW5ub3QKK3VzZSBwYWNrZWQtcmVmcyBpbiB0aG9zZSByZXBvc2l0b3JpZXMgYXMgdGhleSB3b24ndCBiZSByZXNvbHZlZAorY29ycmVjdGx5LgorCis9Y3V0CisKK215ICRnaXRfZGlyID0gJEVOVntHSVRfRElSfTsKK215ICRuZXdfY29tbWl0X2NoZWNrID0gIiRnaXRfZGlyL2luZm8vbmV3LWNvbW1pdC1jaGVjayI7CitteSAkcmVmID0gJEFSR1ZbMF07CitteSAkb2xkID0gJEFSR1ZbMV07CitteSAkbmV3ID0gJEFSR1ZbMl07CitteSAkbmV3X3R5cGU7CitteSAoJHRoaXNfdXNlcikgPSBnZXRwd3VpZCAkPDsgIyBSRUFMX1VTRVJfSUQKK215ICRyZXBvc2l0b3J5X25hbWU7CitteSAldXNlcl9jb21taXR0ZXI7CitteSBAYWxsb3dfcnVsZXM7CitteSBAcGF0aF9ydWxlczsKK215ICVkaWZmX2NhY2hlOworCitzdWIgZGVueSAoJCkgeworCXByaW50IFNUREVSUiAiLURlbnktICAgICRfWzBdXG4iIGlmICRkZWJ1ZzsKKwlwcmludCBTVERFUlIgIlxuZGVuaWVkOiAkX1swXVxuXG4iOworCWV4aXQgMTsKK30KKworc3ViIGdyYW50ICgkKSB7CisJcHJpbnQgU1RERVJSICItR3JhbnQtICAgJF9bMF1cbiIgaWYgJGRlYnVnOworCWV4aXQgMDsKK30KKworc3ViIGluZm8gKCQpIHsKKwlwcmludCBTVERFUlIgIi1JbmZvLSAgICAkX1swXVxuIiBpZiAkZGVidWc7Cit9CisKK3N1YiBnaXRfdmFsdWUgKEApIHsKKwlvcGVuKFQsJy18JywnZ2l0JyxAXyk7IGxvY2FsICRfID0gPFQ+OyBjaG9wOyBjbG9zZSBUOyAkXzsKK30KKworc3ViIG1hdGNoX3N0cmluZyAoJCQpIHsKKwlteSAoJGFjbF9uLCAkcmVmKSA9IEBfOworCSAgICgkYWNsX24gZXEgJHJlZikKKwl8fCAoJGFjbF9uID1+IG0sLyQsICYmIHN1YnN0cigkcmVmLDAsbGVuZ3RoICRhY2xfbikgZXEgJGFjbF9uKQorCXx8ICgkYWNsX24gPX4gbSxeXF4sICYmICRyZWYgPX4gbTokYWNsX246KTsKK30KKworc3ViIHBhcnNlX2NvbmZpZyAoJCQkJCkgeworCW15ICRkYXRhID0gc2hpZnQ7CisJbG9jYWwgJEVOVntHSVRfRElSfSA9IHNoaWZ0OworCW15ICRiciA9IHNoaWZ0OworCW15ICRmbiA9IHNoaWZ0OworCXJldHVybiB1bmxlc3MgZ2l0X3ZhbHVlKCdyZXYtbGlzdCcsJy0tbWF4LWNvdW50PTEnLCRiciwnLS0nLCRmbik7CisJaW5mbyAiTG9hZGluZyAkYnI6JGZuIjsKKwlvcGVuKEksJy18JywnZ2l0JywnY2F0LWZpbGUnLCdibG9iJywiJGJyOiRmbiIpOworCW15ICRzZWN0aW9uID0gJyc7CisJd2hpbGUgKDxJPikgeworCQljaG9tcDsKKwkJaWYgKC9eXHMqJC8gfHwgL15ccyojLykgeworCQl9IGVsc2lmICgvXlxbKFthLXpdKylcXSQvaSkgeworCQkJJHNlY3Rpb24gPSBsYyAkMTsKKwkJfSBlbHNpZiAoL15cWyhbYS16XSspXHMrIiguKikiXF0kL2kpIHsKKwkJCSRzZWN0aW9uID0gam9pbignLicsbGMgJDEsJDIpOworCQl9IGVsc2lmICgvXlxzKihbYS16XVthLXowLTldKylccyo9XHMqKC4qPylccyokL2kpIHsKKwkJCXB1c2ggQHskZGF0YS0+e2pvaW4oJy4nLCRzZWN0aW9uLGxjICQxKX19LCAkMjsKKwkJfSBlbHNlIHsKKwkJCWRlbnkgImJhZCBjb25maWcgZmlsZSBsaW5lICQuIGluICRicjokZm4iOworCQl9CisJfQorCWNsb3NlIEk7Cit9CisKK3N1YiBhbGxfbmV3X2NvbW1pdHRlcnMgKCkgeworCWxvY2FsICRFTlZ7R0lUX0RJUn0gPSAkZ2l0X2RpcjsKKwkkRU5We0dJVF9ESVJ9ID0gJG5ld19jb21taXRfY2hlY2sgaWYgLWQgJG5ld19jb21taXRfY2hlY2s7CisKKwlpbmZvICJHZXR0aW5nIGNvbW1pdHRlcnMgb2YgbmV3IGNvbW1pdHMuIjsKKwlteSAldXNlZDsKKwlvcGVuKFQsJy18JywnZ2l0JywncmV2LWxpc3QnLCctLXByZXR0eT1yYXcnLCRuZXcsJy0tbm90JywnLS1hbGwnKTsKKwl3aGlsZSAoPFQ+KSB7CisJCW5leHQgdW5sZXNzIHMvXmNvbW1pdHRlciAvLzsKKwkJY2hvcDsKKwkJcy8+LiokLz4vOworCQlpbmZvICJGb3VuZCAkXy4iIHVubGVzcyAkdXNlZHskX30rKzsKKwl9CisJY2xvc2UgVDsKKwlpbmZvICJObyBuZXcgY29tbWl0cy4iIHVubGVzcyAldXNlZDsKKwlrZXlzICV1c2VkOworfQorCitzdWIgYWxsX25ld190YWdnZXJzICgpIHsKKwlteSAlZXhpc3RzOworCW9wZW4oVCwnLXwnLCdnaXQnLCdmb3ItZWFjaC1yZWYnLCctLWZvcm1hdD0lKG9iamVjdG5hbWUpJywncmVmcy90YWdzJyk7CisJd2hpbGUgKDxUPikgeworCQljaG9wOworCQkkZXhpc3RzeyRffSA9IDE7CisJfQorCWNsb3NlIFQ7CisKKwlpbmZvICJHZXR0aW5nIHRhZ2dlcnMgb2YgbmV3IHRhZ3MuIjsKKwlteSAldXNlZDsKKwlteSAkb2JqID0gJG5ldzsKKwlteSAkb2JqX3R5cGUgPSAkbmV3X3R5cGU7CisJd2hpbGUgKCRvYmpfdHlwZSBlcSAndGFnJykgeworCQlsYXN0IGlmICRleGlzdHN7JG9ian07CisJCSRvYmpfdHlwZSA9ICcnOworCQlvcGVuKFQsJy18JywnZ2l0JywnY2F0LWZpbGUnLCd0YWcnLCRvYmopOworCQl3aGlsZSAoPFQ+KSB7CisJCQljaG9wOworCQkJaWYgKC9eb2JqZWN0IChbYS16MC05XXs0MH0pJC8pIHsKKwkJCQkkb2JqID0gJDE7CisJCQl9IGVsc2lmICgvXnR5cGUgKC4rKSQvKSB7CisJCQkJJG9ial90eXBlID0gJDE7CisJCQl9IGVsc2lmIChzL150YWdnZXIgLy8pIHsKKwkJCQlzLz4uKiQvPi87CisJCQkJaW5mbyAiRm91bmQgJF8uIiB1bmxlc3MgJHVzZWR7JF99Kys7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQljbG9zZSBUOworCX0KKwlpbmZvICJObyBuZXcgdGFncy4iIHVubGVzcyAldXNlZDsKKwlrZXlzICV1c2VkOworfQorCitzdWIgY2hlY2tfY29tbWl0dGVycyAoQCkgeworCW15IEBiYWQ7CisJZm9yZWFjaCAoQF8pIHsgcHVzaCBAYmFkLCAkXyB1bmxlc3MgJHVzZXJfY29tbWl0dGVyeyRffTsgfQorCWlmIChAYmFkKSB7CisJCXByaW50IFNUREVSUiAiXG4iOworCQlwcmludCBTVERFUlIgIllvdSBhcmUgbm90ICRfLlxuIiBmb3JlYWNoIChzb3J0IEBiYWQpOworCQlkZW55ICJZb3UgY2Fubm90IHB1c2ggY2hhbmdlcyBub3QgY29tbWl0dGVkIGJ5IHlvdS4iOworCX0KK30KKworc3ViIGxvYWRfZGlmZiAoJCkgeworCW15ICRiYXNlID0gc2hpZnQ7CisJbXkgJGQgPSAkZGlmZl9jYWNoZXskYmFzZX07CisJdW5sZXNzICgkZCkgeworCQlsb2NhbCAkLyA9ICJcMCI7CisJCW15ICV0aGlzX2RpZmY7CisJCWlmICgkYmFzZSA9fiAvXjB7NDB9JC8pIHsKKwkJCSMgRG9uJ3QgbG9hZCB0aGUgZGlmZiBhdCBhbGw7IHdlIGFyZSBtYWtpbmcgdGhlCisJCQkjIGJyYW5jaCBhbmQgaGF2ZSBubyBiYXNlIHRvIGNvbXBhcmUgdG8gaW4gdGhpcworCQkJIyBjYXNlLiAgQSBmaWxlIGxldmVsIEFDTCBtYWtlcyBubyBzZW5zZSBpbiB0aGlzCisJCQkjIGNvbnRleHQuICBIYXZpbmcgYW4gZW1wdHkgZGlmZiB3aWxsIGFsbG93IHRoZQorCQkJIyBicmFuY2ggY3JlYXRpb24uCisJCQkjCisJCX0gZWxzZSB7CisJCQlvcGVuKFQsJy18JywnZ2l0JywnZGlmZi10cmVlJywKKwkJCQknLXInLCctLW5hbWUtc3RhdHVzJywnLXonLAorCQkJCSRiYXNlLCRuZXcpIG9yIHJldHVybiB1bmRlZjsKKwkJCXdoaWxlICg8VD4pIHsKKwkJCQlteSAkb3AgPSAkXzsKKwkJCQljaG9wICRvcDsKKworCQkJCW15ICRwYXRoID0gPFQ+OworCQkJCWNob3AgJHBhdGg7CisKKwkJCQkkdGhpc19kaWZmeyRwYXRofSA9ICRvcDsKKwkJCX0KKwkJCWNsb3NlIFQgb3IgcmV0dXJuIHVuZGVmOworCQl9CisJCSRkID0gXCV0aGlzX2RpZmY7CisJCSRkaWZmX2NhY2hleyRiYXNlfSA9ICRkOworCX0KKwlyZXR1cm4gJGQ7Cit9CisKK2RlbnkgIk5vIEdJVF9ESVIgaW5oZXJpdGVkIGZyb20gY2FsbGVyIiB1bmxlc3MgJGdpdF9kaXI7CitkZW55ICJOZWVkIGEgcmVmIG5hbWUiIHVubGVzcyAkcmVmOworZGVueSAiUmVmdXNpbmcgZnVubnkgcmVmICRyZWYiIHVubGVzcyAkcmVmID1+IHMsXnJlZnMvLCw7CitkZW55ICJCYWQgb2xkIHZhbHVlICRvbGQiIHVubGVzcyAkb2xkID1+IC9eW2EtejAtOV17NDB9JC87CitkZW55ICJCYWQgbmV3IHZhbHVlICRuZXciIHVubGVzcyAkbmV3ID1+IC9eW2EtejAtOV17NDB9JC87CitkZW55ICJDYW5ub3QgZGV0ZXJtaW5lIHdobyB5b3UgYXJlLiIgdW5sZXNzICR0aGlzX3VzZXI7CitncmFudCAiTm8gY2hhbmdlIHJlcXVlc3RlZC4iIGlmICRvbGQgZXEgJG5ldzsKKworJHJlcG9zaXRvcnlfbmFtZSA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJGdpdF9kaXIpOworJHJlcG9zaXRvcnlfbmFtZSA9fiBtLC8oW14vXSspKD86XC5naXR8L1wuZ2l0KSQsOworJHJlcG9zaXRvcnlfbmFtZSA9ICQxOworaW5mbyAiVXBkYXRpbmcgaW4gJyRyZXBvc2l0b3J5X25hbWUnLiI7CisKK215ICRvcDsKK2lmICAgICgkb2xkID1+IC9eMHs0MH0kLykgeyAkb3AgPSAnQyc7IH0KK2Vsc2lmICgkbmV3ID1+IC9eMHs0MH0kLykgeyAkb3AgPSAnRCc7IH0KK2Vsc2UgICAgICAgICAgICAgICAgICAgICAgeyAkb3AgPSAnUic7IH0KKworIyBUaGlzIGlzIHJlYWxseSBhbiB1cGRhdGUgKGZhc3QtZm9yd2FyZCkgaWYgdGhlCisjIG1lcmdlIGJhc2Ugb2YgJG9sZCBhbmQgJG5ldyBpcyAkb2xkLgorIworJG9wID0gJ1UnIGlmICgkb3AgZXEgJ1InCisJJiYgJHJlZiA9fiBtLF5oZWFkcy8sCisJJiYgJG9sZCBlcSBnaXRfdmFsdWUoJ21lcmdlLWJhc2UnLCRvbGQsJG5ldykpOworCisjIExvYWQgdGhlIHVzZXIncyBBQ0wgZmlsZS4gRXhwYW5kIGdyb3VwcyAodXNlci5tZW1iZXJvZikgb25lIGxldmVsLgoreworCW15ICVkYXRhID0gKCd1c2VyLmNvbW1pdHRlcicgPT4gW10pOworCXBhcnNlX2NvbmZpZyhcJWRhdGEsJGFjbF9naXQsJGFjbF9icmFuY2gsImV4dGVybmFsLyRyZXBvc2l0b3J5X25hbWUuYWNsIik7CisKKwklZGF0YSA9ICgKKwkJJ3VzZXIuY29tbWl0dGVyJyA9PiAkZGF0YXsndXNlci5jb21taXR0ZXInfSwKKwkJJ3VzZXIubWVtYmVyb2YnID0+IFtdLAorCSk7CisJcGFyc2VfY29uZmlnKFwlZGF0YSwkYWNsX2dpdCwkYWNsX2JyYW5jaCwidXNlcnMvJHRoaXNfdXNlci5hY2wiKTsKKworCSV1c2VyX2NvbW1pdHRlciA9IG1hcCB7JF8gPT4gJF99IEB7JGRhdGF7J3VzZXIuY29tbWl0dGVyJ319OworCW15ICRydWxlX2tleSA9ICJyZXBvc2l0b3J5LiRyZXBvc2l0b3J5X25hbWUuYWxsb3ciOworCW15ICRydWxlcyA9ICRkYXRheyRydWxlX2tleX0gfHwgW107CisKKwlmb3JlYWNoIG15ICRncm91cCAoQHskZGF0YXsndXNlci5tZW1iZXJvZid9fSkgeworCQlteSAlZzsKKwkJcGFyc2VfY29uZmlnKFwlZywkYWNsX2dpdCwkYWNsX2JyYW5jaCwiZ3JvdXBzLyRncm91cC5hY2wiKTsKKwkJbXkgJGdyb3VwX3J1bGVzID0gJGd7JHJ1bGVfa2V5fTsKKwkJcHVzaCBAJHJ1bGVzLCBAJGdyb3VwX3J1bGVzIGlmICRncm91cF9ydWxlczsKKwl9CisKK1JVTEU6CisJZm9yZWFjaCAoQCRydWxlcykgeworCQl3aGlsZSAoL1wke3VzZXJcLihbYS16XVthLXpBLVowLTldKyl9LykgeworCQkJbXkgJGsgPSBsYyAkMTsKKwkJCW15ICR2ID0gJGRhdGF7InVzZXIuJGsifTsKKwkJCW5leHQgUlVMRSB1bmxlc3MgZGVmaW5lZCAkdjsKKwkJCW5leHQgUlVMRSBpZiBAJHYgIT0gMTsKKwkJCW5leHQgUlVMRSB1bmxlc3MgZGVmaW5lZCAkdi0+WzBdOworCQkJcy9cJHt1c2VyXC4ka30vJHYtPlswXS9nOworCQl9CisKKwkJaWYgKC9eKFtBTUQgXSspXHMrb2ZccysoW15cc10rKVxzK2ZvclxzKyhbXlxzXSspXHMrZGlmZlxzKyhbXlxzXSspJC8pIHsKKwkJCW15ICgkb3BzLCAkcHRoLCAkcmVmLCAkYnN0KSA9ICgkMSwgJDIsICQzLCAkNCk7CisJCQkkb3BzID1+IHMvIC8vZzsKKwkJCSRwdGggPX4gcy9cXFxcL1xcL2c7CisJCQkkcmVmID1+IHMvXFxcXC9cXC9nOworCQkJcHVzaCBAcGF0aF9ydWxlcywgWyRvcHMsICRwdGgsICRyZWYsICRic3RdOworCQl9IGVsc2lmICgvXihbQU1EIF0rKVxzK29mXHMrKFteXHNdKylccytmb3JccysoW15cc10rKSQvKSB7CisJCQlteSAoJG9wcywgJHB0aCwgJHJlZikgPSAoJDEsICQyLCAkMyk7CisJCQkkb3BzID1+IHMvIC8vZzsKKwkJCSRwdGggPX4gcy9cXFxcL1xcL2c7CisJCQkkcmVmID1+IHMvXFxcXC9cXC9nOworCQkJcHVzaCBAcGF0aF9ydWxlcywgWyRvcHMsICRwdGgsICRyZWYsICRvbGRdOworCQl9IGVsc2lmICgvXihbQ0RSVSBdKylccytmb3JccysoW15cc10rKSQvKSB7CisJCQlteSAkb3BzID0gJDE7CisJCQlteSAkcmVmID0gJDI7CisJCQkkb3BzID1+IHMvIC8vZzsKKwkJCSRyZWYgPX4gcy9cXFxcL1xcL2c7CisJCQlwdXNoIEBhbGxvd19ydWxlcywgWyRvcHMsICRyZWZdOworCQl9IGVsc2lmICgvXmZvclxzKyhbXlxzXSspJC8pIHsKKwkJCSMgTWVudGlvbmVkLCBidXQgbm90aGluZyBncmFudGVkPworCQl9IGVsc2lmICgvXlteXHNdKyQvKSB7CisJCQlzL1xcXFwvXFwvZzsKKwkJCXB1c2ggQGFsbG93X3J1bGVzLCBbJ1UnLCAkX107CisJCX0KKwl9Cit9CisKK2lmICgkb3AgbmUgJ0QnKSB7CisJJG5ld190eXBlID0gZ2l0X3ZhbHVlKCdjYXQtZmlsZScsJy10JywkbmV3KTsKKworCWlmICgkcmVmID1+IG0sXmhlYWRzLywpIHsKKwkJZGVueSAiJHJlZiBtdXN0IGJlIGEgY29tbWl0LiIgdW5sZXNzICRuZXdfdHlwZSBlcSAnY29tbWl0JzsKKwl9IGVsc2lmICgkcmVmID1+IG0sXnRhZ3MvLCkgeworCQlkZW55ICIkcmVmIG11c3QgYmUgYW4gYW5ub3RhdGVkIHRhZy4iIHVubGVzcyAkbmV3X3R5cGUgZXEgJ3RhZyc7CisJfQorCisJY2hlY2tfY29tbWl0dGVycyAoYWxsX25ld19jb21taXR0ZXJzKTsKKwljaGVja19jb21taXR0ZXJzIChhbGxfbmV3X3RhZ2dlcnMpIGlmICRuZXdfdHlwZSBlcSAndGFnJzsKK30KKworaW5mbyAiJHRoaXNfdXNlciB3YW50cyAkb3AgZm9yICRyZWYiOworZm9yZWFjaCBteSAkYWNsX2VudHJ5IChAYWxsb3dfcnVsZXMpIHsKKwlteSAoJGFjbF9vcHMsICRhY2xfbikgPSBAJGFjbF9lbnRyeTsKKwluZXh0IHVubGVzcyAkYWNsX29wcyA9fiAvXltDRFJVXSskLzsgIyBVaGguLi4uIHNob3VsZG4ndCBoYXBwZW4uCisJbmV4dCB1bmxlc3MgJGFjbF9uOworCW5leHQgdW5sZXNzICRvcCA9fiAvXlskYWNsX29wc10kLzsKKwluZXh0IHVubGVzcyBtYXRjaF9zdHJpbmcgJGFjbF9uLCAkcmVmOworCisJIyBEb24ndCB0ZXN0IHBhdGggcnVsZXMgb24gYnJhbmNoIGRlbGV0ZXMuCisJIworCWdyYW50ICJBbGxvd2VkIGJ5OiAkYWNsX29wcyBmb3IgJGFjbF9uIiBpZiAkb3AgZXEgJ0QnOworCisJIyBBZ2dyZWdhdGUgbWF0Y2hpbmcgcGF0aCBydWxlczsgYWxsb3cgaWYgdGhlcmUgYXJlbid0CisJIyBhbnkgbWF0Y2hpbmcgdGhpcyByZWYuCisJIworCW15ICVwcjsKKwlmb3JlYWNoIG15ICRwX2VudHJ5IChAcGF0aF9ydWxlcykgeworCQlteSAoJHBfb3BzLCAkcF9uLCAkcF9yZWYsICRwX2JzdCkgPSBAJHBfZW50cnk7CisJCW5leHQgdW5sZXNzICRwX3JlZjsKKwkJcHVzaCBAeyRwcnskcF9ic3R9fSwgJHBfZW50cnkgaWYgbWF0Y2hfc3RyaW5nICRwX3JlZiwgJHJlZjsKKwl9CisJZ3JhbnQgIkFsbG93ZWQgYnk6ICRhY2xfb3BzIGZvciAkYWNsX24iIHVubGVzcyAlcHI7CisKKwkjIEFsbG93IG9ubHkgaWYgYWxsIGNoYW5nZXMgYWdhaW5zdCBhIHNpbmdsZSBiYXNlIGFyZQorCSMgYWxsb3dlZCBieSBmaWxlIHBhdGggcnVsZXMuCisJIworCW15IEBiYWQ7CisJZm9yZWFjaCBteSAkcF9ic3QgKGtleXMgJXByKSB7CisJCW15ICRkaWZmX3JlZiA9IGxvYWRfZGlmZiAkcF9ic3Q7CisJCWRlbnkgIkNhbm5vdCBkaWZmZXJlbmNlIHRyZWVzLiIgdW5sZXNzIHJlZiAkZGlmZl9yZWY7CisKKwkJbXkgJWZkID0gJSRkaWZmX3JlZjsKKwkJZm9yZWFjaCBteSAkcF9lbnRyeSAoQHskcHJ7JHBfYnN0fX0pIHsKKwkJCW15ICgkcF9vcHMsICRwX24sICRwX3JlZiwgJHBfYnN0KSA9IEAkcF9lbnRyeTsKKwkJCW5leHQgdW5sZXNzICRwX29wcyA9fiAvXltBTURdKyQvOworCQkJbmV4dCB1bmxlc3MgJHBfbjsKKworCQkJZm9yZWFjaCBteSAkZl9uIChrZXlzICVmZCkgeworCQkJCW15ICRmX29wID0gJGZkeyRmX259OworCQkJCW5leHQgdW5sZXNzICRmX29wOworCQkJCW5leHQgdW5sZXNzICRmX29wID1+IC9eWyRwX29wc10kLzsKKwkJCQlkZWxldGUgJGZkeyRmX259IGlmIG1hdGNoX3N0cmluZyAkcF9uLCAkZl9uOworCQkJfQorCQkJbGFzdCB1bmxlc3MgJWZkOworCQl9CisKKwkJaWYgKCVmZCkgeworCQkJcHVzaCBAYmFkLCBbJHBfYnN0LCBcJWZkXTsKKwkJfSBlbHNlIHsKKwkJCSMgQWxsIGNoYW5nZXMgcmVsYXRpdmUgdG8gJHBfYnN0IHdlcmUgYWxsb3dlZC4KKwkJCSMKKwkJCWdyYW50ICJBbGxvd2VkIGJ5OiAkYWNsX29wcyBmb3IgJGFjbF9uIGRpZmYgJHBfYnN0IjsKKwkJfQorCX0KKworCWZvcmVhY2ggbXkgJGJhZF9yZWYgKEBiYWQpIHsKKwkJbXkgKCRwX2JzdCwgJGZkKSA9IEAkYmFkX3JlZjsKKwkJcHJpbnQgU1RERVJSICJcbiI7CisJCXByaW50IFNUREVSUiAiTm90IGFsbG93ZWQgdG8gbWFrZSB0aGUgZm9sbG93aW5nIGNoYW5nZXM6XG4iOworCQlwcmludCBTVERFUlIgIihiYXNlOiAkcF9ic3QpXG4iOworCQlmb3JlYWNoIG15ICRmX24gKHNvcnQga2V5cyAlJGZkKSB7CisJCQlwcmludCBTVERFUlIgIiAgJGZkLT57JGZfbn0gJGZfblxuIjsKKwkJfQorCX0KKwlkZW55ICJZb3UgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gJG9wICRyZWYiOworfQorY2xvc2UgQTsKK2RlbnkgIllvdSBhcmUgbm90IHBlcm1pdHRlZCB0byAkb3AgJHJlZiI7CmRpZmYgLS1naXQgYS9jb250cmliL2xvbmctcnVubmluZy1maWx0ZXIvZXhhbXBsZS5wbCBiL2NvbnRyaWIvbG9uZy1ydW5uaW5nLWZpbHRlci9leGFtcGxlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2Nzc1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2xvbmctcnVubmluZy1maWx0ZXIvZXhhbXBsZS5wbApAQCAtMCwwICsxLDEzMiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIEV4YW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBHaXQgZmlsdGVyIHByb3RvY29sIHZlcnNpb24gMgorIyBTZWUgRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dCwgc2VjdGlvbiAiRmlsdGVyIFByb3RvY29sIgorIworIyBQbGVhc2Ugbm90ZSwgdGhpcyBwYXNzLXRocnUgZmlsdGVyIGlzIGEgbWluaW1hbCBza2VsZXRvbi4gTm8gcHJvcGVyCisjIGVycm9yIGhhbmRsaW5nIHdhcyBpbXBsZW1lbnRlZC4KKyMKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworbXkgJE1BWF9QQUNLRVRfQ09OVEVOVF9TSVpFID0gNjU1MTY7CisKK3N1YiBwYWNrZXRfYmluX3JlYWQgeworCW15ICRidWZmZXI7CisJbXkgJGJ5dGVzX3JlYWQgPSByZWFkIFNURElOLCAkYnVmZmVyLCA0OworCWlmICggJGJ5dGVzX3JlYWQgPT0gMCApIHsKKworCQkjIEVPRiAtIEdpdCBzdG9wcGVkIHRhbGtpbmcgdG8gdXMhCisJCWV4aXQoKTsKKwl9CisJZWxzaWYgKCAkYnl0ZXNfcmVhZCAhPSA0ICkgeworCQlkaWUgImludmFsaWQgcGFja2V0OiAnJGJ1ZmZlciciOworCX0KKwlteSAkcGt0X3NpemUgPSBoZXgoJGJ1ZmZlcik7CisJaWYgKCAkcGt0X3NpemUgPT0gMCApIHsKKwkJcmV0dXJuICggMSwgIiIgKTsKKwl9CisJZWxzaWYgKCAkcGt0X3NpemUgPiA0ICkgeworCQlteSAkY29udGVudF9zaXplID0gJHBrdF9zaXplIC0gNDsKKwkJJGJ5dGVzX3JlYWQgPSByZWFkIFNURElOLCAkYnVmZmVyLCAkY29udGVudF9zaXplOworCQlpZiAoICRieXRlc19yZWFkICE9ICRjb250ZW50X3NpemUgKSB7CisJCQlkaWUgImludmFsaWQgcGFja2V0ICgkY29udGVudF9zaXplIGJ5dGVzIGV4cGVjdGVkOyAkYnl0ZXNfcmVhZCBieXRlcyByZWFkKSI7CisJCX0KKwkJcmV0dXJuICggMCwgJGJ1ZmZlciApOworCX0KKwllbHNlIHsKKwkJZGllICJpbnZhbGlkIHBhY2tldCBzaXplOiAkcGt0X3NpemUiOworCX0KK30KKworc3ViIHBhY2tldF90eHRfcmVhZCB7CisJbXkgKCAkcmVzLCAkYnVmICkgPSBwYWNrZXRfYmluX3JlYWQoKTsKKwl1bmxlc3MgKCAkYnVmID1+IHMvXG4kLy8gKSB7CisJCWRpZSAiQSBub24tYmluYXJ5IGxpbmUgTVVTVCBiZSB0ZXJtaW5hdGVkIGJ5IGFuIExGLiI7CisJfQorCXJldHVybiAoICRyZXMsICRidWYgKTsKK30KKworc3ViIHBhY2tldF9iaW5fd3JpdGUgeworCW15ICRidWYgPSBzaGlmdDsKKwlwcmludCBTVERPVVQgc3ByaW50ZiggIiUwNHgiLCBsZW5ndGgoJGJ1ZikgKyA0ICk7CisJcHJpbnQgU1RET1VUICRidWY7CisJU1RET1VULT5mbHVzaCgpOworfQorCitzdWIgcGFja2V0X3R4dF93cml0ZSB7CisJcGFja2V0X2Jpbl93cml0ZSggJF9bMF0gLiAiXG4iICk7Cit9CisKK3N1YiBwYWNrZXRfZmx1c2ggeworCXByaW50IFNURE9VVCBzcHJpbnRmKCAiJTA0eCIsIDAgKTsKKwlTVERPVVQtPmZsdXNoKCk7Cit9CisKKyggcGFja2V0X3R4dF9yZWFkKCkgZXEgKCAwLCAiZ2l0LWZpbHRlci1jbGllbnQiICkgKSB8fCBkaWUgImJhZCBpbml0aWFsaXplIjsKKyggcGFja2V0X3R4dF9yZWFkKCkgZXEgKCAwLCAidmVyc2lvbj0yIiApICkgICAgICAgICB8fCBkaWUgImJhZCB2ZXJzaW9uIjsKKyggcGFja2V0X2Jpbl9yZWFkKCkgZXEgKCAxLCAiIiApICkgICAgICAgICAgICAgICAgICB8fCBkaWUgImJhZCB2ZXJzaW9uIGVuZCI7CisKK3BhY2tldF90eHRfd3JpdGUoImdpdC1maWx0ZXItc2VydmVyIik7CitwYWNrZXRfdHh0X3dyaXRlKCJ2ZXJzaW9uPTIiKTsKK3BhY2tldF9mbHVzaCgpOworCisoIHBhY2tldF90eHRfcmVhZCgpIGVxICggMCwgImNhcGFiaWxpdHk9Y2xlYW4iICkgKSAgfHwgZGllICJiYWQgY2FwYWJpbGl0eSI7CisoIHBhY2tldF90eHRfcmVhZCgpIGVxICggMCwgImNhcGFiaWxpdHk9c211ZGdlIiApICkgfHwgZGllICJiYWQgY2FwYWJpbGl0eSI7CisoIHBhY2tldF9iaW5fcmVhZCgpIGVxICggMSwgIiIgKSApICAgICAgICAgICAgICAgICAgfHwgZGllICJiYWQgY2FwYWJpbGl0eSBlbmQiOworCitwYWNrZXRfdHh0X3dyaXRlKCJjYXBhYmlsaXR5PWNsZWFuIik7CitwYWNrZXRfdHh0X3dyaXRlKCJjYXBhYmlsaXR5PXNtdWRnZSIpOworcGFja2V0X2ZsdXNoKCk7CisKK3doaWxlICgxKSB7CisJbXkgKCRjb21tYW5kKSAgPSBwYWNrZXRfdHh0X3JlYWQoKSA9fiAvXmNvbW1hbmQ9KC4rKSQvOworCW15ICgkcGF0aG5hbWUpID0gcGFja2V0X3R4dF9yZWFkKCkgPX4gL15wYXRobmFtZT0oLispJC87CisKKwlpZiAoICRwYXRobmFtZSBlcSAiIiApIHsKKwkJZGllICJiYWQgcGF0aG5hbWUgJyRwYXRobmFtZSciOworCX0KKworCXBhY2tldF9iaW5fcmVhZCgpOworCisJbXkgJGlucHV0ID0gIiI7CisJeworCQliaW5tb2RlKFNURElOKTsKKwkJbXkgJGJ1ZmZlcjsKKwkJbXkgJGRvbmUgPSAwOworCQl3aGlsZSAoICEkZG9uZSApIHsKKwkJCSggJGRvbmUsICRidWZmZXIgKSA9IHBhY2tldF9iaW5fcmVhZCgpOworCQkJJGlucHV0IC49ICRidWZmZXI7CisJCX0KKwl9CisKKwlteSAkb3V0cHV0OworCWlmICggJGNvbW1hbmQgZXEgImNsZWFuIiApIHsKKwkJIyMjIFBlcmZvcm0gY2xlYW4gaGVyZSAjIyMKKwkJJG91dHB1dCA9ICRpbnB1dDsKKwl9CisJZWxzaWYgKCAkY29tbWFuZCBlcSAic211ZGdlIiApIHsKKwkJIyMjIFBlcmZvcm0gc211ZGdlIGhlcmUgIyMjCisJCSRvdXRwdXQgPSAkaW5wdXQ7CisJfQorCWVsc2UgeworCQlkaWUgImJhZCBjb21tYW5kICckY29tbWFuZCciOworCX0KKworCXBhY2tldF90eHRfd3JpdGUoInN0YXR1cz1zdWNjZXNzIik7CisJcGFja2V0X2ZsdXNoKCk7CisJd2hpbGUgKCBsZW5ndGgoJG91dHB1dCkgPiAwICkgeworCQlteSAkcGFja2V0ID0gc3Vic3RyKCAkb3V0cHV0LCAwLCAkTUFYX1BBQ0tFVF9DT05URU5UX1NJWkUgKTsKKwkJcGFja2V0X2Jpbl93cml0ZSgkcGFja2V0KTsKKwkJaWYgKCBsZW5ndGgoJG91dHB1dCkgPiAkTUFYX1BBQ0tFVF9DT05URU5UX1NJWkUgKSB7CisJCQkkb3V0cHV0ID0gc3Vic3RyKCAkb3V0cHV0LCAkTUFYX1BBQ0tFVF9DT05URU5UX1NJWkUgKTsKKwkJfQorCQllbHNlIHsKKwkJCSRvdXRwdXQgPSAiIjsKKwkJfQorCX0KKwlwYWNrZXRfZmx1c2goKTsgICAgIyBmbHVzaCBjb250ZW50IQorCXBhY2tldF9mbHVzaCgpOyAgICAjIGVtcHR5IGxpc3QsIGtlZXAgInN0YXR1cz1zdWNjZXNzIiB1bmNoYW5nZWQhCisKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0Ly5naXRpZ25vcmUgYi9jb250cmliL213LXRvLWdpdC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTQ1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorZ2l0LXJlbW90ZS1tZWRpYXdpa2kKK2dpdC1tdwpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYyBiL2NvbnRyaWIvbXctdG8tZ2l0Ly5wZXJsY3JpdGljcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczMzMyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0Ly5wZXJsY3JpdGljcmMKQEAgLTAsMCArMSwyOCBAQAorIyBUaGVzZSAzIHJ1bGVzIGRlbWFuZCB0byBhZGQgdGhlIHMsIG0gYW5kIHggZmxhZyB0byAqZXZlcnkqIHJlZ2V4cC4gVGhpcyBpcworIyBvdmVya2lsbCBhbmQgd291bGQgYmUgaGFybWZ1bCBmb3IgcmVhZGFiaWxpdHkuCitbLVJlZ3VsYXJFeHByZXNzaW9uczo6UmVxdWlyZUV4dGVuZGVkRm9ybWF0dGluZ10KK1stUmVndWxhckV4cHJlc3Npb25zOjpSZXF1aXJlRG90TWF0Y2hBbnl0aGluZ10KK1stUmVndWxhckV4cHJlc3Npb25zOjpSZXF1aXJlTGluZUJvdW5kYXJ5TWF0Y2hpbmddCisKKyMgVGhpcyBydWxlIHNheXMgdGhhdCBidWlsdGluIGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIHBhcmVudGhlc2VzCisjIGUuZy46ICh0YWtlbiBmcm9tIENQQU4ncyBkb2N1bWVudGF0aW9uKQorIyBvcGVuKCRoYW5kbGUsICc+JywgJGZpbGVuYW1lKTsgI25vdCBvaworIyBvcGVuICRoYW5kbGUsICc+JywgJGZpbGVuYW1lOyAgI29rCisjIEFwcGx5aW5nIHN1Y2ggYSBydWxlIHdvdWxkIG1lYW4gbW9kaWZ5aW5nIGEgaHVnZSBudW1iZXIgb2YgbGluZXMgZm9yIGEKKyMgcXVlc3Rpb24gb2Ygc3R5bGUuCitbLUNvZGVMYXlvdXQ6OlByb2hpYml0UGFyZW5zV2l0aEJ1aWx0aW5zXQorCisjIFRoaXMgcnVsZSBzdGF0ZXMgdGhhdCBlYWNoIHN5c3RlbSBjYWxsIHNob3VsZCBoYXZlIGl0cyByZXR1cm4gdmFsdWUgY2hlY2tlZAorIyBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGluY2x1ZGVzIHRoZSBwcmludCBjYWxsLiBDaGVja2luZyBldmVyeSBwcmludCBjYWxsJ3MKKyMgcmV0dXJuIHZhbHVlIHdvdWxkIGJlIGhhcm1mdWwgdG8gdGhlIGNvZGUgcmVhZGFiaWxpdHkuCisjIFRoaXMgY29uZmlndXJhdGlvbiBrZWVwcyBhbGwgZGVmYXVsdCBmdW5jdGlvbiBidXQgcHJpbnQuCitbSW5wdXRPdXRwdXQ6OlJlcXVpcmVDaGVja2VkU3lzY2FsbHNdCitmdW5jdGlvbnMgPSBvcGVuIHNheSBjbG9zZQorCisjIFRoaXMgcnVsZSBkZW1hbmRzIHRvIGFkZCBhIGRlcGVuZGVuY3kgZm9yIHRoZSBSZWFkb25seSBtb2R1bGUuIFRoaXMgaXMgbm90CisjIHdpc2hlZC4KK1stVmFsdWVzQW5kRXhwcmVzc2lvbnM6OlByb2hpYml0Q29uc3RhbnRQcmFnbWFdCisKKyMgVGhpcyBydWxlIGlzIG5vdCByZWFsbHkgdXNlZnVsIChyYXRoZXIgYSBxdWVzdGlvbiBvZiBzdHlsZSkgYW5kIHByb2R1Y2VzIG1hbnkKKyMgd2FybmluZ3MgYW1vbmcgdGhlIGNvZGUuCitbLVZhbHVlc0FuZEV4cHJlc3Npb25zOjpQcm9oaWJpdE5vaXN5UXVvdGVzXQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvR2l0L01lZGlhd2lraS5wbSBiL2NvbnRyaWIvbXctdG8tZ2l0L0dpdC9NZWRpYXdpa2kucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE3ZDllMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L0dpdC9NZWRpYXdpa2kucG0KQEAgLTAsMCArMSwxMDEgQEAKK3BhY2thZ2UgR2l0OjpNZWRpYXdpa2k7CisKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2UgUE9TSVg7Cit1c2UgR2l0OworCitCRUdJTiB7CisKK291ciAoJFZFUlNJT04sIEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0spOworCisjIFRvdGFsbHkgdW5zdGFibGUgQVBJLgorJFZFUlNJT04gPSAnMC4wMSc7CisKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK0BFWFBPUlQgPSAoKTsKKworIyBNZXRob2RzIHdoaWNoIGNhbiBiZSBjYWxsZWQgYXMgc3RhbmRhbG9uZSBmdW5jdGlvbnMgYXMgd2VsbDoKK0BFWFBPUlRfT0sgPSBxdyhjbGVhbl9maWxlbmFtZSBzbXVkZ2VfZmlsZW5hbWUgY29ubmVjdF9tYXliZQorCQkJCUVNUFRZIEhUVFBfQ09ERV9PSyBIVFRQX0NPREVfUEFHRV9OT1RfRk9VTkQpOworfQorCisjIE1lZGlhd2lraSBmaWxlbmFtZXMgY2FuIGNvbnRhaW4gZm9yd2FyZCBzbGFzaGVzLiBUaGlzIHZhcmlhYmxlIGRlY2lkZXMgYnkgd2hpY2ggcGF0dGVybiB0aGV5IHNob3VsZCBiZSByZXBsYWNlZAordXNlIGNvbnN0YW50IFNMQVNIX1JFUExBQ0VNRU5UID0+ICclMkYnOworCisjIFVzZWQgdG8gdGVzdCBmb3IgZW1wdHkgc3RyaW5ncwordXNlIGNvbnN0YW50IEVNUFRZID0+IHF7fTsKKworIyBIVFRQIGNvZGVzCit1c2UgY29uc3RhbnQgSFRUUF9DT0RFX09LID0+IDIwMDsKK3VzZSBjb25zdGFudCBIVFRQX0NPREVfUEFHRV9OT1RfRk9VTkQgPT4gNDA0OworCitzdWIgY2xlYW5fZmlsZW5hbWUgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCSRmaWxlbmFtZSA9fiBze0B7W1NMQVNIX1JFUExBQ0VNRU5UXX19ey99ZzsKKwkjIFssIF0sIHwsIHssIGFuZCB9IGFyZSBmb3JiaWRkZW4gYnkgTWVkaWFXaWtpLCBldmVuIFVSTC1lbmNvZGVkLgorCSMgRG8gYSB2YXJpYW50IG9mIFVSTC1lbmNvZGluZywgaS5lLiBsb29rcyBsaWtlIFVSTC1lbmNvZGluZywKKwkjIGJ1dCB3aXRoIF8gYWRkZWQgdG8gcHJldmVudCBNZWRpYVdpa2kgZnJvbSB0aGlua2luZyB0aGlzIGlzCisJIyBhbiBhY3R1YWwgc3BlY2lhbCBjaGFyYWN0ZXIuCisJJGZpbGVuYW1lID1+IHMvW1xbXF1ce1x9XHxdL3NwcmludGYoIl8lJV8leCIsIG9yZCgkJikpL2dlOworCSMgSWYgd2UgdXNlIHRoZSB1cmkgZXNjYXBlIGJlZm9yZQorCSMgd2Ugc2hvdWxkIHVuZXNjYXBlIGhlcmUsIGJlZm9yZSBhbnl0aGluZworCisJcmV0dXJuICRmaWxlbmFtZTsKK30KKworc3ViIHNtdWRnZV9maWxlbmFtZSB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJJGZpbGVuYW1lID1+IHN7L317QHtbU0xBU0hfUkVQTEFDRU1FTlRdfX1nOworCSRmaWxlbmFtZSA9fiBzLyAvXy9nOworCSMgRGVjb2RlIGZvcmJpZGRlbiBjaGFyYWN0ZXJzIGVuY29kZWQgaW4gY2xlYW5fZmlsZW5hbWUKKwkkZmlsZW5hbWUgPX4gcy9fJV8oWzAtOWEtZkEtRl1bMC05YS1mQS1GXSkvc3ByaW50ZignJWMnLCBoZXgoJDEpKS9nZTsKKwlyZXR1cm4gc3Vic3RyKCRmaWxlbmFtZSwgMCwgTkFNRV9NQVgtbGVuZ3RoKCcubXcnKSk7Cit9CisKK3N1YiBjb25uZWN0X21heWJlIHsKKwlteSAkd2lraSA9IHNoaWZ0OworCWlmICgkd2lraSkgeworCQlyZXR1cm4gJHdpa2k7CisJfQorCisJbXkgJHJlbW90ZV9uYW1lID0gc2hpZnQ7CisJbXkgJHJlbW90ZV91cmwgPSBzaGlmdDsKKwlteSAoJHdpa2lfbG9naW4sICR3aWtpX3Bhc3N3b3JkLCAkd2lraV9kb21haW4pOworCisJJHdpa2lfbG9naW4gPSBHaXQ6OmNvbmZpZygicmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13TG9naW4iKTsKKwkkd2lraV9wYXNzd29yZCA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGVfbmFtZX0ubXdQYXNzd29yZCIpOworCSR3aWtpX2RvbWFpbiA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGVfbmFtZX0ubXdEb21haW4iKTsKKworCSR3aWtpID0gTWVkaWFXaWtpOjpBUEktPm5ldzsKKwkkd2lraS0+e2NvbmZpZ30tPnthcGlfdXJsfSA9ICIke3JlbW90ZV91cmx9L2FwaS5waHAiOworCWlmICgkd2lraV9sb2dpbikgeworCQlteSAlY3JlZGVudGlhbCA9ICgKKwkJCSd1cmwnID0+ICRyZW1vdGVfdXJsLAorCQkJJ3VzZXJuYW1lJyA9PiAkd2lraV9sb2dpbiwKKwkJCSdwYXNzd29yZCcgPT4gJHdpa2lfcGFzc3dvcmQKKwkJKTsKKwkJR2l0OjpjcmVkZW50aWFsKFwlY3JlZGVudGlhbCk7CisJCW15ICRyZXF1ZXN0ID0ge2xnbmFtZSA9PiAkY3JlZGVudGlhbHt1c2VybmFtZX0sCisJCQkgICAgICAgbGdwYXNzd29yZCA9PiAkY3JlZGVudGlhbHtwYXNzd29yZH0sCisJCQkgICAgICAgbGdkb21haW4gPT4gJHdpa2lfZG9tYWlufTsKKwkJaWYgKCR3aWtpLT5sb2dpbigkcmVxdWVzdCkpIHsKKwkJCUdpdDo6Y3JlZGVudGlhbChcJWNyZWRlbnRpYWwsICdhcHByb3ZlJyk7CisJCQlwcmludCB7KlNUREVSUn0gcXEoTG9nZ2VkIGluIG1lZGlhd2lraSB1c2VyICIkY3JlZGVudGlhbHt1c2VybmFtZX0iLlxuKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50IHsqU1RERVJSfSBxcShGYWlsZWQgdG8gbG9nIGluIG1lZGlhd2lraSB1c2VyICIkY3JlZGVudGlhbHt1c2VybmFtZX0iIG9uICR7cmVtb3RlX3VybH1cbik7CisJCQlwcmludCB7KlNUREVSUn0gJyAgKGVycm9yICcgLgorCQkJCSR3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnIC4KKwkJCQkkd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4gIilcbiI7CisJCQlHaXQ6OmNyZWRlbnRpYWwoXCVjcmVkZW50aWFsLCAncmVqZWN0Jyk7CisJCQlleGl0IDE7CisJCX0KKwl9CisKKwlyZXR1cm4gJHdpa2k7Cit9CisKKzE7ICMgRmFtb3VzIGxhc3Qgd29yZHMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L01ha2VmaWxlIGIvY29udHJpYi9tdy10by1naXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2MDM1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L01ha2VmaWxlCkBAIC0wLDAgKzEsNTggQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzCisjICAgICBNYXR0aGlldSBNb3kgPE1hdHRoaWV1Lk1veUBpbWFnLmZyPgorIworIyBUbyBidWlsZCBhbmQgdGVzdDoKKyMKKyMgICBtYWtlCisjICAgYmluLXdyYXBwZXIvZ2l0IG13IHByZXZpZXcgU29tZV9wYWdlLm13CisjICAgYmluLXdyYXBwZXIvZ2l0IGNsb25lIG1lZGlhd2lraTo6aHR0cDovL2V4YW1wbGUuY29tL3dpa2kvCisjCisjIFRvIGluc3RhbGwsIHJ1biBHaXQncyB0b3BsZXZlbCAnbWFrZSBpbnN0YWxsJyB0aGVuIHJ1bjoKKyMKKyMgICBtYWtlIGluc3RhbGwKKworR0lUX01FRElBV0lLSV9QTT1HaXQvTWVkaWF3aWtpLnBtCitTQ1JJUFRfUEVSTD1naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCitTQ1JJUFRfUEVSTCs9Z2l0LW13LnBlcmwKK0dJVF9ST09UX0RJUj0uLi8uLgorSEVSRT1jb250cmliL213LXRvLWdpdC8KKworSU5TVEFMTCA9IGluc3RhbGwKKworU0NSSVBUX1BFUkxfRlVMTD0kKHBhdHN1YnN0ICUsJChIRVJFKS8lLCQoU0NSSVBUX1BFUkwpKQorSU5TVExJQkRJUj0kKHNoZWxsICQoTUFLRSkgLUMgJChHSVRfUk9PVF9ESVIpLyBcCisgICAgICAgICAgICAgICAgLXMgLS1uby1wcmludC1kaXJlY3RvcnkgcHJlZml4PSQocHJlZml4KSBcCisgICAgICAgICAgICAgICAgcGVybGxpYmRpcj0kKHBlcmxsaWJkaXIpIHBlcmxsaWJkaXIpCitERVNURElSX1NRID0gJChzdWJzdCAnLCdcJycsJChERVNURElSKSkKK0lOU1RMSUJESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKElOU1RMSUJESVIpKQorCithbGw6IGJ1aWxkCisKK3Rlc3Q6IGFsbAorCSQoTUFLRSkgLUMgdAorCitjaGVjazogcGVybGNyaXRpYyB0ZXN0CisKK2luc3RhbGxfcG06CisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKElOU1RMSUJESVJfU1EpL0dpdCcKKwkkKElOU1RBTEwpIC1tIDY0NCAkKEdJVF9NRURJQVdJS0lfUE0pIFwKKwkJJyQoREVTVERJUl9TUSkkKElOU1RMSUJESVJfU1EpLyQoR0lUX01FRElBV0lLSV9QTSknCisKK2J1aWxkOgorCSQoTUFLRSkgLUMgJChHSVRfUk9PVF9ESVIpIFNDUklQVF9QRVJMPSIkKFNDUklQVF9QRVJMX0ZVTEwpIiBcCisgICAgICAgICAgICAgICAgYnVpbGQtcGVybC1zY3JpcHQKKworaW5zdGFsbDogaW5zdGFsbF9wbQorCSQoTUFLRSkgLUMgJChHSVRfUk9PVF9ESVIpIFNDUklQVF9QRVJMPSIkKFNDUklQVF9QRVJMX0ZVTEwpIiBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC1wZXJsLXNjcmlwdAorCitjbGVhbjoKKwkkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKSBTQ1JJUFRfUEVSTD0iJChTQ1JJUFRfUEVSTF9GVUxMKSIgXAorICAgICAgICAgICAgICAgIGNsZWFuLXBlcmwtc2NyaXB0CisKK3Blcmxjcml0aWM6CisJcGVybGNyaXRpYyAtNSAkKFNDUklQVF9QRVJMKQorCS1wZXJsY3JpdGljIC0yICQoU0NSSVBUX1BFUkwpCisKKy5QSE9OWTogYWxsIHRlc3QgY2hlY2sgaW5zdGFsbF9wbSBpbnN0YWxsIGNsZWFuIHBlcmxjcml0aWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L2Jpbi13cmFwcGVyL2dpdCBiL2NvbnRyaWIvbXctdG8tZ2l0L2Jpbi13cmFwcGVyL2dpdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NjYzYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvYmluLXdyYXBwZXIvZ2l0CkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorCisjIGdpdCBleGVjdXRhYmxlIHdyYXBwZXIgc2NyaXB0IGZvciBHaXQtTWVkaWF3aWtpIHRvIHJ1biB0ZXN0cyB3aXRob3V0CisjIGluc3RhbGxpbmcgYWxsIHRoZSBzY3JpcHRzIGFuZCBwZXJsIHBhY2thZ2VzLgorCitHSVRfUk9PVF9ESVI9Li4vLi4vLi4KK0dJVF9FWEVDX1BBVEg9JChjZCAiJChkaXJuYW1lICIkMCIpIiAmJiBjZCAke0dJVF9ST09UX0RJUn0gJiYgcHdkKQorCitHSVRQRVJMTElCPSIkR0lUX0VYRUNfUEFUSCInL2NvbnRyaWIvbXctdG8tZ2l0JyIke0dJVFBFUkxMSUI6KzokR0lUUEVSTExJQn0iCitQQVRIPSIkR0lUX0VYRUNfUEFUSCInL2NvbnRyaWIvbXctdG8tZ2l0OiciJFBBVEgiCisKK2V4cG9ydCBHSVRQRVJMTElCIFBBVEgKKworZXhlYyAiJHtHSVRfRVhFQ19QQVRIfS9iaW4td3JhcHBlcnMvZ2l0IiAiJEAiCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9naXQtbXcucGVybCBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1tdy5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ZGYzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC9naXQtbXcucGVybApAQCAtMCwwICsxLDM2OCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgQ29weXJpZ2h0IChDKSAyMDEzCisjICAgICBCZW5vaXQgUGVyc29uIDxiZW5vaXQucGVyc29uQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIENlbGVzdGluIE1hdHRlIDxjZWxlc3Rpbi5tYXR0ZUBlbnNpbWFnLmltYWcuZnI+CisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIFNldCBvZiB0b29scyBmb3IgZ2l0IHJlcG8gd2l0aCBhIG1lZGlhd2lraSByZW1vdGUuCisjIERvY3VtZW50YXRpb24gJiBidWd0cmFja2VyOiBodHRwczovL2dpdGh1Yi5jb20vbW95L0dpdC1NZWRpYXdpa2kvCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgVVJJOjpVUkwgcXcodXJsKTsKK3VzZSBMV1A6OlVzZXJBZ2VudDsKK3VzZSBIVE1MOjpUcmVlQnVpbGRlcjsKKwordXNlIEdpdDsKK3VzZSBNZWRpYVdpa2k6OkFQSTsKK3VzZSBHaXQ6Ok1lZGlhd2lraSBxdyhjbGVhbl9maWxlbmFtZSBjb25uZWN0X21heWJlCisJCQkJCUVNUFRZIEhUVFBfQ09ERV9QQUdFX05PVF9GT1VORCk7CisKKyMgQnkgZGVmYXVsdCwgdXNlIFVURi04IHRvIGNvbW11bmljYXRlIHdpdGggR2l0IGFuZCB0aGUgdXNlcgorYmlubW9kZSBTVERFUlIsICc6ZW5jb2RpbmcoVVRGLTgpJzsKK2Jpbm1vZGUgU1RET1VULCAnOmVuY29kaW5nKFVURi04KSc7CisKKyMgR2xvYmFsIHBhcmFtZXRlcnMKK215ICR2ZXJib3NlID0gMDsKK3N1YiB2X3ByaW50IHsKKwlpZiAoJHZlcmJvc2UpIHsKKwkJcmV0dXJuIHByaW50IHsqU1RERVJSfSBAXzsKKwl9CisJcmV0dXJuOworfQorCisjIFByZXZpZXcgcGFyYW1ldGVycworbXkgJGZpbGVfbmFtZSA9IEVNUFRZOworbXkgJHJlbW90ZV9uYW1lID0gRU1QVFk7CitteSAkcHJldmlld19maWxlX25hbWUgPSBFTVBUWTsKK215ICRhdXRvbG9hZCA9IDA7CitzdWIgZmlsZSB7CisJJGZpbGVfbmFtZSA9IHNoaWZ0OworCXJldHVybiAkZmlsZV9uYW1lOworfQorCitteSAlY29tbWFuZHMgPSAoCisJJ2hlbHAnID0+CisJCVtcJmhlbHAsIHt9LCBcJmhlbHBdLAorCSdwcmV2aWV3JyA9PgorCQlbXCZwcmV2aWV3LCB7CisJCQknPD4nID0+IFwmZmlsZSwKKwkJCSdvdXRwdXR8bz1zJyA9PiBcJHByZXZpZXdfZmlsZV9uYW1lLAorCQkJJ3JlbW90ZXxyPXMnID0+IFwkcmVtb3RlX25hbWUsCisJCQknYXV0b2xvYWR8YScgPT4gXCRhdXRvbG9hZAorCQl9LCBcJnByZXZpZXdfaGVscF0KKyk7CisKKyMgU2VhcmNoIGZvciBzdWItY29tbWFuZAorbXkgJGNtZCA9ICRjb21tYW5kc3snaGVscCd9OworZm9yICgwLi5AQVJHVi0xKSB7CisJaWYgKGRlZmluZWQgJGNvbW1hbmRzeyRBUkdWWyRfXX0pIHsKKwkJJGNtZCA9ICRjb21tYW5kc3skQVJHVlskX119OworCQlzcGxpY2UgQEFSR1YsICRfLCAxOworCQlsYXN0OworCX0KK307CitHZXRPcHRpb25zKCAleyRjbWQtPlsxXX0sCisJJ2hlbHB8aCcgPT4gXCZ7JGNtZC0+WzJdfSwKKwkndmVyYm9zZXx2JyAgPT4gXCR2ZXJib3NlKTsKKworIyBMYXVuY2ggY29tbWFuZAorJnskY21kLT5bMF19OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBQcmV2aWV3IEZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzdWIgcHJldmlld19oZWxwIHsKKwlwcmludCB7KlNURE9VVH0gPDwnRU5EJzsKK1VTQUdFOiBnaXQgbXcgcHJldmlldyBbLS1yZW1vdGV8LXIgPHJlbW90ZSBuYW1lPl0gWy0tYXV0b2xvYWR8LWFdCisgICAgICAgICAgICAgICAgICAgICAgWy0tb3V0cHV0fC1vIDxvdXRwdXQgZmlsZW5hbWU+XSBbLS12ZXJib3NlfC12XQorICAgICAgICAgICAgICAgICAgICAgIDxibG9iPiB8IDxmaWxlbmFtZT4KKworREVTQ1JJUFRJT046CitQcmV2aWV3IGlzIGFuIHV0aWxpeSB0byBwcmV2aWV3IGxvY2FsIGNvbnRlbnQgb2YgYSBtZWRpYXdpa2kgcmVwbyBhcyBpZiBpdCB3YXMKK3B1c2hlZCBvbiB0aGUgcmVtb3RlLgorCitGb3IgdGhhdCwgcHJldmlldyBzZWFyY2hlcyBmb3IgdGhlIHJlbW90ZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCdzCit1cHN0cmVhbSBpZiAtLXJlbW90ZSBpcyBub3Qgc2V0LiBJZiB0aGF0IHJlbW90ZSBpcyBub3QgZm91bmQgb3IgaWYgaXQKK2lzIG5vdCBhIG1lZGlhd2lraSwgaXQgbGlzdHMgYWxsIG1lZGlhd2lraSByZW1vdGVzIGNvbmZpZ3VyZWQgYW5kIGFza3MKK3lvdSB0byByZXBsYXkgeW91ciBjb21tYW5kIHdpdGggdGhlIC0tcmVtb3RlIG9wdGlvbiBzZXQgcHJvcGVybHkuCisKK1RoZW4sIGl0IHNlYXJjaGVzIGZvciBhIGZpbGUgbmFtZWQgJ2ZpbGVuYW1lJy4gSWYgaXQncyBub3QgZm91bmQgaW4KK3RoZSBjdXJyZW50IGRpciwgaXQgd2lsbCBhc3N1bWUgaXQncyBhIGJsb2IuCisKK1RoZSBjb250ZW50IHJldHJpZXZlZCBpbiB0aGUgZmlsZSAob3IgaW4gdGhlIGJsb2IpIHdpbGwgdGhlbiBiZSBwYXJzZWQKK2J5IHRoZSByZW1vdGUgbWVkaWF3aWtpIGFuZCBjb21iaW5lZCB3aXRoIGEgdGVtcGxhdGUgcmV0cmlldmVkIGZyb20KK3RoZSBtZWRpYXdpa2kuCisKK0ZpbmFsbHksIHByZXZpZXcgd2lsbCBzYXZlIHRoZSBIVE1MIHJlc3VsdCBpbiBhIGZpbGUuIGFuZCBhdXRvbG9hZCBpdAoraW4geW91ciBkZWZhdWx0IHdlYiBicm93c2VyIGlmIHRoZSBvcHRpb24gLS1hdXRvbG9hZCBpcyBwcmVzZW50LgorCitPUFRJT05TOgorICAgIC1yIDxyZW1vdGUgbmFtZT4sIC0tcmVtb3RlIDxyZW1vdGUgbmFtZT4KKyAgICAgICAgSWYgdGhlIHJlbW90ZSBpcyBhIG1lZGlhd2lraSwgdGhlIHRlbXBsYXRlIGFuZCB0aGUgcGFyc2UgZW5naW5lCisgICAgICAgIHVzZWQgZm9yIHRoZSBwcmV2aWV3IHdpbGwgYmUgdGhvc2Ugb2YgdGhhdCByZW1vdGUuCisgICAgICAgIElmIG5vdCwgYSBsaXN0IG9mIHZhbGlkIHJlbW90ZXMgd2lsbCBiZSBzaG93bi4KKworICAgIC1hLCAtLWF1dG9sb2FkCisgICAgICAgIFRyeSB0byBsb2FkIHRoZSBIVE1MIG91dHB1dCBpbiBhIG5ldyB0YWIgKG9yIG5ldyB3aW5kb3cpIG9mIHlvdXIKKyAgICAgICAgZGVmYXVsdCB3ZWIgYnJvd3Nlci4KKworICAgIC1vIDxvdXRwdXQgZmlsZW5hbWU+LCAtLW91dHB1dCA8b3V0cHV0IGZpbGVuYW1lPgorICAgICAgICBDaGFuZ2UgdGhlIEhUTUwgb3V0cHV0IGZpbGVuYW1lLiBEZWZhdWx0IGZpbGVuYW1lIGlzIGJhc2VkIG9uIHRoZQorICAgICAgICBpbnB1dCBmaWxlbmFtZSB3aXRoIGl0cyBleHRlbnNpb24gcmVwbGFjZWQgYnkgJy5odG1sJy4KKworICAgIC12LCAtLXZlcmJvc2UKKyAgICAgICAgU2hvdyBtb3JlIGluZm9ybWF0aW9uIG9uIHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4KK0VORAorCWV4aXQ7Cit9CisKK3N1YiBwcmV2aWV3IHsKKwlteSAkd2lraTsKKwlteSAoJHJlbW90ZV91cmwsICR3aWtpX3BhZ2VfbmFtZSk7CisJbXkgKCRuZXdfY29udGVudCwgJHRlbXBsYXRlKTsKKwlteSAkZmlsZV9jb250ZW50OworCisJaWYgKCRmaWxlX25hbWUgZXEgRU1QVFkpIHsKKwkJZGllICJNaXNzaW5nIGZpbGUgYXJndW1lbnQsIHNlZSBgZ2l0IG13IGhlbHBgXG4iOworCX0KKworCXZfcHJpbnQoIiMjIyBTZWxlY3RpbmcgcmVtb3RlXG4iKTsKKwlpZiAoJHJlbW90ZV9uYW1lIGVxIEVNUFRZKSB7CisJCSRyZW1vdGVfbmFtZSA9IGZpbmRfdXBzdHJlYW1fcmVtb3RlX25hbWUoKTsKKwkJaWYgKCRyZW1vdGVfbmFtZSkgeworCQkJJHJlbW90ZV91cmwgPSBtZWRpYXdpa2lfcmVtb3RlX3VybF9tYXliZSgkcmVtb3RlX25hbWUpOworCQl9CisKKwkJaWYgKCEgJHJlbW90ZV91cmwpIHsKKwkJCW15IEB2YWxpZF9yZW1vdGVzID0gZmluZF9tZWRpYXdpa2lfcmVtb3RlcygpOworCisJCQlpZiAoJCN2YWxpZF9yZW1vdGVzID09IDApIHsKKwkJCQlwcmludCB7KlNUREVSUn0gIk5vIG1lZGlhd2lraSByZW1vdGUgaW4gdGhpcyByZXBvLiBcbiI7CisJCQkJZXhpdCAxOworCQkJfSBlbHNlIHsKKwkJCQlteSAkcmVtb3Rlc19saXN0ID0gam9pbigiXG5cdCIsIEB2YWxpZF9yZW1vdGVzKTsKKwkJCQlwcmludCB7KlNUREVSUn0gPDwiTUVTU0FHRSI7CitUaGVyZSBhcmUgbXVsdGlwbGUgbWVkaWF3aWtpIHJlbW90ZXMsIHdoaWNoIG9mOgorCSR7cmVtb3Rlc19saXN0fQorZG8geW91IHdhbnQgPyBVc2UgdGhlIC1yIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSByZW1vdGUuCitNRVNTQUdFCisJCQl9CisKKwkJCWV4aXQgMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghaXNfdmFsaWRfcmVtb3RlKCRyZW1vdGVfbmFtZSkpIHsKKwkJCWRpZSAiJHtyZW1vdGVfbmFtZX0gaXMgbm90IGEgcmVtb3RlXG4iOworCQl9CisKKwkJJHJlbW90ZV91cmwgPSBtZWRpYXdpa2lfcmVtb3RlX3VybF9tYXliZSgkcmVtb3RlX25hbWUpOworCQlpZiAoISAkcmVtb3RlX3VybCkgeworCQkJZGllICIke3JlbW90ZV9uYW1lfSBpcyBub3QgYSBtZWRpYXdpa2kgcmVtb3RlXG4iOworCQl9CisJfQorCXZfcHJpbnQoInNlbGVjdGVkIHJlbW90ZTpcblx0bmFtZTogJHtyZW1vdGVfbmFtZX1cblx0dXJsOiAke3JlbW90ZV91cmx9XG4iKTsKKworCSR3aWtpID0gY29ubmVjdF9tYXliZSgkd2lraSwgJHJlbW90ZV9uYW1lLCAkcmVtb3RlX3VybCk7CisKKwkjIFJlYWQgZmlsZSBjb250ZW50CisJaWYgKCEgLWUgJGZpbGVfbmFtZSkgeworCQkkZmlsZV9jb250ZW50ID0gZ2l0X2NtZF90cnkgeworCQkJR2l0Ojpjb21tYW5kKCdjYXQtZmlsZScsICdibG9iJywgJGZpbGVfbmFtZSk7IH0KKwkJCSIlcyBmYWlsZWQgdy8gY29kZSAlZCI7CisKKwkJaWYgKCRmaWxlX25hbWUgPX4gLyguKyk6KC4rKS8pIHsKKwkJCSRmaWxlX25hbWUgPSAkMjsKKwkJfQorCX0gZWxzZSB7CisJCW9wZW4gbXkgJHJlYWRfZmgsICI8IiwgJGZpbGVfbmFtZQorCQkJb3IgZGllICJjb3VsZCBub3Qgb3BlbiAke2ZpbGVfbmFtZX06ICQhXG4iOworCQkkZmlsZV9jb250ZW50ID0gZG8geyBsb2NhbCAkLyA9IHVuZGVmOyA8JHJlYWRfZmg+IH07CisJCWNsb3NlICRyZWFkX2ZoCisJCQlvciBkaWUgInVuYWJsZSB0byBjbG9zZTogJCFcbiI7CisJfQorCisJdl9wcmludCgiIyMjIFJldHJpZXZpbmcgdGVtcGxhdGVcbiIpOworCSgkd2lraV9wYWdlX25hbWUgPSBjbGVhbl9maWxlbmFtZSgkZmlsZV9uYW1lKSkgPX4gcy9cLlteLl0rJC8vOworCSR0ZW1wbGF0ZSA9IGdldF90ZW1wbGF0ZSgkcmVtb3RlX3VybCwgJHdpa2lfcGFnZV9uYW1lKTsKKworCXZfcHJpbnQoIiMjIyBQYXJzaW5nIGxvY2FsIGNvbnRlbnRcbiIpOworCSRuZXdfY29udGVudCA9ICR3aWtpLT5hcGkoeworCQlhY3Rpb24gPT4gJ3BhcnNlJywKKwkJdGV4dCA9PiAkZmlsZV9jb250ZW50LAorCQl0aXRsZSA9PiAkd2lraV9wYWdlX25hbWUKKwl9LCB7CisJCXNraXBfZW5jb2RpbmcgPT4gMQorCX0pIG9yIGRpZSAiTm8gcmVzcG9uc2UgZnJvbSByZW1vdGUgbWVkaWF3aWtpXG4iOworCSRuZXdfY29udGVudCA9ICRuZXdfY29udGVudC0+eydwYXJzZSd9LT57J3RleHQnfS0+eycqJ307CisKKwl2X3ByaW50KCIjIyMgTWVyZ2luZyBjb250ZW50c1xuIik7CisJaWYgKCRwcmV2aWV3X2ZpbGVfbmFtZSBlcSBFTVBUWSkgeworCQkoJHByZXZpZXdfZmlsZV9uYW1lID0gJGZpbGVfbmFtZSkgPX4gcy9cLlteLl0rJC8uaHRtbC87CisJfQorCW9wZW4obXkgJHNhdmVfZmgsICc+OmVuY29kaW5nKFVURi04KScsICRwcmV2aWV3X2ZpbGVfbmFtZSkKKwkJb3IgZGllICJDb3VsZCBub3Qgb3BlbjogJCFcbiI7CisJcHJpbnQgeyRzYXZlX2ZofSBtZXJnZV9jb250ZW50cygkdGVtcGxhdGUsICRuZXdfY29udGVudCwgJHJlbW90ZV91cmwpOworCWNsb3NlKCRzYXZlX2ZoKQorCQlvciBkaWUgIkNvdWxkIG5vdCBjbG9zZTogJCFcbiI7CisKKwl2X3ByaW50KCIjIyMgUmVzdWx0c1xuIik7CisJaWYgKCRhdXRvbG9hZCkgeworCQl2X3ByaW50KCJMYXVuY2hpbmcgYnJvd3NlciB3LyBmaWxlOiAke3ByZXZpZXdfZmlsZV9uYW1lfSIpOworCQlzeXN0ZW0oJ2dpdCcsICd3ZWItLWJyb3dzZScsICRwcmV2aWV3X2ZpbGVfbmFtZSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJQcmV2aWV3IGZpbGUgc2F2ZWQgYXM6ICR7cHJldmlld19maWxlX25hbWV9XG4iOworCX0KKworCWV4aXQ7Cit9CisKKyMgdXNlcyBnbG9iYWwgc2NvcGUgdmFyaWFibGU6ICRyZW1vdGVfbmFtZQorc3ViIG1lcmdlX2NvbnRlbnRzIHsKKwlteSAkdGVtcGxhdGUgPSBzaGlmdDsKKwlteSAkY29udGVudCA9IHNoaWZ0OworCW15ICRyZW1vdGVfdXJsID0gc2hpZnQ7CisJbXkgKCRjb250ZW50X3RyZWUsICRodG1sX3RyZWUsICRtd19jb250ZW50X3RleHQpOworCW15ICR0ZW1wbGF0ZV9jb250ZW50X2lkID0gJ2JvZHlDb250ZW50JzsKKworCSRodG1sX3RyZWUgPSBIVE1MOjpUcmVlQnVpbGRlci0+bmV3OworCSRodG1sX3RyZWUtPnBhcnNlKCR0ZW1wbGF0ZSk7CisKKwkkY29udGVudF90cmVlID0gSFRNTDo6VHJlZUJ1aWxkZXItPm5ldzsKKwkkY29udGVudF90cmVlLT5wYXJzZSgkY29udGVudCk7CisKKwkkdGVtcGxhdGVfY29udGVudF9pZCA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGVfbmFtZX0ubXdJRGNvbnRlbnQiKQorCQl8fCAkdGVtcGxhdGVfY29udGVudF9pZDsKKwl2X3ByaW50KCJVc2luZyAnJHt0ZW1wbGF0ZV9jb250ZW50X2lkfScgYXMgdGhlIGNvbnRlbnQgSURcbiIpOworCisJJG13X2NvbnRlbnRfdGV4dCA9ICRodG1sX3RyZWUtPmxvb2tfZG93bignaWQnLCAkdGVtcGxhdGVfY29udGVudF9pZCk7CisJaWYgKCFkZWZpbmVkICRtd19jb250ZW50X3RleHQpIHsKKwkJcHJpbnQgeypTVERFUlJ9IDw8IkNPTkZJRyI7CitDb3VsZCBub3QgY29tYmluZSB0aGUgbmV3IGNvbnRlbnQgd2l0aCB0aGUgdGVtcGxhdGUuIFlvdSBtaWdodCB3YW50IHRvCitjb25maWd1cmUgYG1lZGlhd2lraS5JRENvbnRlbnRgIGluIHlvdXIgY29uZmlnOgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13SURjb250ZW50IDxpZD4KK2FuZCByZS1ydW4gdGhlIGNvbW1hbmQgYWZ0ZXJ3YXJkLgorQ09ORklHCisJCWV4aXQgMTsKKwl9CisJJG13X2NvbnRlbnRfdGV4dC0+ZGVsZXRlX2NvbnRlbnQoKTsKKwkkbXdfY29udGVudF90ZXh0LT5wdXNoX2NvbnRlbnQoJGNvbnRlbnRfdHJlZSk7CisKKwltYWtlX2xpbmtzX2Fic29sdXRlKCRodG1sX3RyZWUsICRyZW1vdGVfdXJsKTsKKworCXJldHVybiAkaHRtbF90cmVlLT5hc19IVE1MOworfQorCitzdWIgbWFrZV9saW5rc19hYnNvbHV0ZSB7CisJbXkgJGh0bWxfdHJlZSA9IHNoaWZ0OworCW15ICRyZW1vdGVfdXJsID0gc2hpZnQ7CisJZm9yIChAeyAkaHRtbF90cmVlLT5leHRyYWN0X2xpbmtzKCkgfSkgeworCQlteSAoJGxpbmssICRlbGVtZW50LCAkYXR0cikgPSBAeyAkXyB9OworCQlteSAkdXJsID0gdXJsKCRsaW5rKS0+Y2Fub25pY2FsOworCQlpZiAoJHVybCAhfiAvIy8pIHsKKwkJCSRlbGVtZW50LT5hdHRyKCRhdHRyLCBVUkktPm5ld19hYnMoJHVybCwgJHJlbW90ZV91cmwpKTsKKwkJfQorCX0KKwlyZXR1cm4gJGh0bWxfdHJlZTsKK30KKworc3ViIGlzX3ZhbGlkX3JlbW90ZSB7CisJbXkgJHJlbW90ZSA9IHNoaWZ0OworCW15IEByZW1vdGVzID0gZ2l0X2NtZF90cnkgeworCQlHaXQ6OmNvbW1hbmQoJ3JlbW90ZScpIH0KKwkJIiVzIGZhaWxlZCB3LyBjb2RlICVkIjsKKwlteSAkZm91bmRfcmVtb3RlID0gMDsKKwlmb3JlYWNoIG15ICRyZW1vdGUgKEByZW1vdGVzKSB7CisJCWlmICgkcmVtb3RlIGVxICRyZW1vdGUpIHsKKwkJCSRmb3VuZF9yZW1vdGUgPSAxOworCQkJbGFzdDsKKwkJfQorCX0KKwlyZXR1cm4gJGZvdW5kX3JlbW90ZTsKK30KKworc3ViIGZpbmRfbWVkaWF3aWtpX3JlbW90ZXMgeworCW15IEByZW1vdGVzID0gZ2l0X2NtZF90cnkgeworCQlHaXQ6OmNvbW1hbmQoJ3JlbW90ZScpOyB9CisJCSIlcyBmYWlsZWQgdy8gY29kZSAlZCI7CisJbXkgJHJlbW90ZV91cmw7CisJbXkgQHZhbGlkX3JlbW90ZXMgPSAoKTsKKwlmb3JlYWNoIG15ICRyZW1vdGUgKEByZW1vdGVzKSB7CisJCSRyZW1vdGVfdXJsID0gbWVkaWF3aWtpX3JlbW90ZV91cmxfbWF5YmUoJHJlbW90ZSk7CisJCWlmICgkcmVtb3RlX3VybCkgeworCQkJcHVzaChAdmFsaWRfcmVtb3RlcywgJHJlbW90ZSk7CisJCX0KKwl9CisJcmV0dXJuIEB2YWxpZF9yZW1vdGVzOworfQorCitzdWIgZmluZF91cHN0cmVhbV9yZW1vdGVfbmFtZSB7CisJbXkgJGN1cnJlbnRfYnJhbmNoID0gZ2l0X2NtZF90cnkgeworCQlHaXQ6OmNvbW1hbmRfb25lbGluZSgnc3ltYm9saWMtcmVmJywgJy0tc2hvcnQnLCAnSEVBRCcpIH0KKwkJIiVzIGZhaWxlZCB3LyBjb2RlICVkIjsKKwlyZXR1cm4gR2l0Ojpjb25maWcoImJyYW5jaC4ke2N1cnJlbnRfYnJhbmNofS5yZW1vdGUiKTsKK30KKworc3ViIG1lZGlhd2lraV9yZW1vdGVfdXJsX21heWJlIHsKKwlteSAkcmVtb3RlID0gc2hpZnQ7CisKKwkjIEZpbmQgcmVtb3RlIHVybAorCW15ICRyZW1vdGVfdXJsID0gR2l0Ojpjb25maWcoInJlbW90ZS4ke3JlbW90ZX0udXJsIik7CisJaWYgKCRyZW1vdGVfdXJsID1+IHMvbWVkaWF3aWtpOjooLiopLyQxLykgeworCQlyZXR1cm4gdXJsKCRyZW1vdGVfdXJsKS0+Y2Fub25pY2FsOworCX0KKworCXJldHVybjsKK30KKworc3ViIGdldF90ZW1wbGF0ZSB7CisJbXkgJHVybCA9IHNoaWZ0OworCW15ICRwYWdlX25hbWUgPSBzaGlmdDsKKwlteSAoJHJlcSwgJHJlcywgJGNvZGUsICR1cmxfYWZ0ZXIpOworCisJJHJlcSA9IExXUDo6VXNlckFnZW50LT5uZXc7CisJaWYgKCR2ZXJib3NlKSB7CisJCSRyZXEtPnNob3dfcHJvZ3Jlc3MoMSk7CisJfQorCisJJHJlcyA9ICRyZXEtPmdldCgiJHt1cmx9L2luZGV4LnBocD90aXRsZT0ke3BhZ2VfbmFtZX0iKTsKKwlpZiAoISRyZXMtPmlzX3N1Y2Nlc3MpIHsKKwkJJGNvZGUgPSAkcmVzLT5jb2RlOworCQkkdXJsX2FmdGVyID0gJHJlcy0+cmVxdWVzdCgpLT51cmkoKTsgIyByZXNvbHZlIGFsbCByZWRpcmVjdGlvbnMKKwkJaWYgKCRjb2RlID09IEhUVFBfQ09ERV9QQUdFX05PVF9GT1VORCkgeworCQkJaWYgKCR2ZXJib3NlKSB7CisJCQkJcHJpbnQgeypTVERFUlJ9IDw8IldBUk5JTkciOworV2FybmluZzogRmFpbGVkIHRvIHJldHJpZXZlICckcGFnZV9uYW1lJy4gQ3JlYXRlIGl0IG9uIHRoZSBtZWRpYXdpa2kgaWYgeW91IHdhbnQKK2FsbCB0aGUgbGlua3MgdG8gd29yayBwcm9wZXJseS4KK1RyeWluZyB0byB1c2UgdGhlIG1lZGlhd2lraSBob21lcGFnZSBhcyBhIGZhbGxiYWNrIHRlbXBsYXRlIC4uLgorV0FSTklORworCQkJfQorCisJCQkjIExXUCBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0cyBHRVQgcmVxdWVzdAorCQkJJHJlcyA9ICRyZXEtPmdldCgiJHt1cmx9L2luZGV4LnBocCIpOworCQkJaWYgKCEkcmVzLT5pc19zdWNjZXNzKSB7CisJCQkJJHVybF9hZnRlciA9ICRyZXMtPnJlcXVlc3QoKS0+dXJpKCk7ICMgcmVzb2x2ZSBhbGwgcmVkaXJlY3Rpb25zCisJCQkJZGllICJGYWlsZWQgdG8gZ2V0IGhvbWVwYWdlIEAgJHt1cmxfYWZ0ZXJ9IHcvIGNvZGUgJHtjb2RlfVxuIjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRpZSAiRmFpbGVkIHRvIGdldCAnJHtwYWdlX25hbWV9JyBAICR7dXJsX2FmdGVyfSB3LyBjb2RlICR7Y29kZX1cbiI7CisJCX0KKwl9CisKKwlyZXR1cm4gJHJlcy0+ZGVjb2RlZF9jb250ZW50OworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSGVscCBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzdWIgaGVscCB7CisJcHJpbnQgeypTVERPVVR9IDw8J0VORCc7Cit1c2FnZTogZ2l0IG13IDxjb21tYW5kPiA8YXJncz4KKworZ2l0IG13IGNvbW1hbmRzIGFyZToKKyAgICBoZWxwICAgICAgICBEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgZ2l0IG13CisgICAgcHJldmlldyAgICAgUGFyc2UgYW5kIHJlbmRlciBsb2NhbCBmaWxlIGludG8gSFRNTAorRU5ECisJZXhpdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4ZmYyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCkBAIC0wLDAgKzEsMTM3NCBAQAorIyEgL3Vzci9iaW4vcGVybAorCisjIENvcHlyaWdodCAoQykgMjAxMQorIyAgICAgSsOpcsOpbWllIE5pa2FlcyA8amVyZW1pZS5uaWthZXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgQXJuYXVkIExhY3VyaWUgPGFybmF1ZC5sYWN1cmllQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIENsYWlyZSBGb3Vzc2UgPGNsYWlyZS5mb3Vzc2VAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgRGF2aWQgQW1vdXlhbCA8ZGF2aWQuYW1vdXlhbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBNYXR0aGlldSBNb3kgPG1hdHRoaWV1Lm1veUBncmVub2JsZS1pbnAuZnI+CisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIEdhdGV3YXkgYmV0d2VlbiBHaXQgYW5kIE1lZGlhV2lraS4KKyMgRG9jdW1lbnRhdGlvbiAmIGJ1Z3RyYWNrZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3kvR2l0LU1lZGlhd2lraS8KKwordXNlIHN0cmljdDsKK3VzZSBNZWRpYVdpa2k6OkFQSTsKK3VzZSBHaXQ7Cit1c2UgR2l0OjpNZWRpYXdpa2kgcXcoY2xlYW5fZmlsZW5hbWUgc211ZGdlX2ZpbGVuYW1lIGNvbm5lY3RfbWF5YmUKKwkJCQkJRU1QVFkgSFRUUF9DT0RFX09LKTsKK3VzZSBEYXRlVGltZTo6Rm9ybWF0OjpJU084NjAxOwordXNlIHdhcm5pbmdzOworCisjIEJ5IGRlZmF1bHQsIHVzZSBVVEYtOCB0byBjb21tdW5pY2F0ZSB3aXRoIEdpdCBhbmQgdGhlIHVzZXIKK2Jpbm1vZGUgU1RERVJSLCAnOmVuY29kaW5nKFVURi04KSc7CitiaW5tb2RlIFNURE9VVCwgJzplbmNvZGluZyhVVEYtOCknOworCit1c2UgVVJJOjpFc2NhcGU7CisKKyMgSXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRlbGV0ZSBwYWdlcyAobWF5IHJlcXVpcmUgc29tZQorIyBwcml2aWxlZ2VzKS4gRGVsZXRlZCBwYWdlcyBhcmUgcmVwbGFjZWQgd2l0aCB0aGlzIGNvbnRlbnQuCit1c2UgY29uc3RhbnQgREVMRVRFRF9DT05URU5UID0+ICJbW0NhdGVnb3J5OkRlbGV0ZWRdXVxuIjsKKworIyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgZW1wdHkgcGFnZXMuIE5ldyBlbXB0eSBmaWxlcyBpbiBHaXQgYXJlCisjIHNlbnQgd2l0aCB0aGlzIGNvbnRlbnQgaW5zdGVhZC4KK3VzZSBjb25zdGFudCBFTVBUWV9DT05URU5UID0+ICI8IS0tIGVtcHR5IHBhZ2UgLS0+XG4iOworCisjIHVzZWQgdG8gcmVmbGVjdCBmaWxlIGNyZWF0aW9uIG9yIGRlbGV0aW9uIGluIGRpZmYuCit1c2UgY29uc3RhbnQgTlVMTF9TSEExID0+ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJzsKKworIyBVc2VkIG9uIEdpdCdzIHNpZGUgdG8gcmVmbGVjdCBlbXB0eSBlZGl0IG1lc3NhZ2VzIG9uIHRoZSB3aWtpCit1c2UgY29uc3RhbnQgRU1QVFlfTUVTU0FHRSA9PiAnKkVtcHR5IE1lZGlhV2lraSBNZXNzYWdlKic7CisKKyMgTnVtYmVyIG9mIHBhZ2VzIHRha2VuIGludG8gYWNjb3VudCBhdCBvbmNlIGluIHN1Ym1vZHVsZSBnZXRfbXdfcGFnZV9saXN0Cit1c2UgY29uc3RhbnQgU0xJQ0VfU0laRSA9PiA1MDsKKworIyBOdW1iZXIgb2YgbGlua2VkIG1lZGlhZmlsZSB0byBnZXQgYXQgb25jZSBpbiBnZXRfbGlua2VkX21lZGlhZmlsZXMKKyMgVGhlIHF1ZXJ5IGlzIHNwbGl0IGluIHNtYWxsIGJhdGNoZXMgYmVjYXVzZSBvZiB0aGUgTVcgQVBJIGxpbWl0IG9mCisjIHRoZSBudW1iZXIgb2YgbGlua3MgdG8gYmUgcmV0dXJuZWQgKDUwMCBsaW5rcyBtYXgpLgordXNlIGNvbnN0YW50IEJBVENIX1NJWkUgPT4gMTA7CisKK2lmIChAQVJHViAhPSAyKSB7CisJZXhpdF9lcnJvcl91c2FnZSgpOworfQorCitteSAkcmVtb3RlbmFtZSA9ICRBUkdWWzBdOworbXkgJHVybCA9ICRBUkdWWzFdOworCisjIEFjY2VwdCBib3RoIHNwYWNlLXNlcGFyYXRlZCBhbmQgbXVsdGlwbGUga2V5cyBpbiBjb25maWcgZmlsZS4KKyMgU3BhY2VzIHNob3VsZCBiZSB3cml0dGVuIGFzIF8gYW55d2F5IGJlY2F1c2Ugd2UnbGwgdXNlIGNob21wLgorbXkgQHRyYWNrZWRfcGFnZXMgPSBzcGxpdCgvWyBcbl0vLCBydW5fZ2l0KCJjb25maWcgLS1nZXQtYWxsIHJlbW90ZS4ke3JlbW90ZW5hbWV9LnBhZ2VzIikpOworY2hvbXAoQHRyYWNrZWRfcGFnZXMpOworCisjIEp1c3QgbGlrZSBAdHJhY2tlZF9wYWdlcywgYnV0IGZvciBNZWRpYVdpa2kgY2F0ZWdvcmllcy4KK215IEB0cmFja2VkX2NhdGVnb3JpZXMgPSBzcGxpdCgvWyBcbl0vLCBydW5fZ2l0KCJjb25maWcgLS1nZXQtYWxsIHJlbW90ZS4ke3JlbW90ZW5hbWV9LmNhdGVnb3JpZXMiKSk7CitjaG9tcChAdHJhY2tlZF9jYXRlZ29yaWVzKTsKKworIyBKdXN0IGxpa2UgQHRyYWNrZWRfY2F0ZWdvcmllcywgYnV0IGZvciBNZWRpYVdpa2kgbmFtZXNwYWNlcy4KK215IEB0cmFja2VkX25hbWVzcGFjZXMgPSBzcGxpdCgvWyBcbl0vLCBydW5fZ2l0KCJjb25maWcgLS1nZXQtYWxsIHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm5hbWVzcGFjZXMiKSk7Citmb3IgKEB0cmFja2VkX25hbWVzcGFjZXMpIHsgcy9fLyAvZzsgfQorY2hvbXAoQHRyYWNrZWRfbmFtZXNwYWNlcyk7CisKKyMgSW1wb3J0IG1lZGlhIGZpbGVzIG9uIHB1bGwKK215ICRpbXBvcnRfbWVkaWEgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgLS1ib29sIHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm1lZGlhaW1wb3J0Iik7CitjaG9tcCgkaW1wb3J0X21lZGlhKTsKKyRpbXBvcnRfbWVkaWEgPSAoJGltcG9ydF9tZWRpYSBlcSAndHJ1ZScpOworCisjIEV4cG9ydCBtZWRpYSBmaWxlcyBvbiBwdXNoCitteSAkZXhwb3J0X21lZGlhID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IC0tYm9vbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5tZWRpYWV4cG9ydCIpOworY2hvbXAoJGV4cG9ydF9tZWRpYSk7CiskZXhwb3J0X21lZGlhID0gISgkZXhwb3J0X21lZGlhIGVxICdmYWxzZScpOworCitteSAkd2lraV9sb2dpbiA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuJHtyZW1vdGVuYW1lfS5td0xvZ2luIik7CisjIE5vdGU6IG13UGFzc3dvcmQgaXMgZGlzY291cmFnZWQuIFVzZSB0aGUgY3JlZGVudGlhbCBzeXN0ZW0gaW5zdGVhZC4KK215ICR3aWtpX3Bhc3N3ZCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuJHtyZW1vdGVuYW1lfS5td1Bhc3N3b3JkIik7CitteSAkd2lraV9kb21haW4gPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdEb21haW4iKTsKK2Nob21wKCR3aWtpX2xvZ2luKTsKK2Nob21wKCR3aWtpX3Bhc3N3ZCk7CitjaG9tcCgkd2lraV9kb21haW4pOworCisjIEltcG9ydCBvbmx5IGxhc3QgcmV2aXNpb25zIChib3RoIGZvciBjbG9uZSBhbmQgZmV0Y2gpCitteSAkc2hhbGxvd19pbXBvcnQgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgLS1ib29sIHJlbW90ZS4ke3JlbW90ZW5hbWV9LnNoYWxsb3ciKTsKK2Nob21wKCRzaGFsbG93X2ltcG9ydCk7Ciskc2hhbGxvd19pbXBvcnQgPSAoJHNoYWxsb3dfaW1wb3J0IGVxICd0cnVlJyk7CisKKyMgRmV0Y2ggKGNsb25lIGFuZCBwdWxsKSBieSByZXZpc2lvbnMgaW5zdGVhZCBvZiBieSBwYWdlcy4gVGhpcyBiZWhhdmlvcgorIyBpcyBtb3JlIGVmZmljaWVudCB3aGVuIHdlIGhhdmUgYSB3aWtpIHdpdGggbG90cyBvZiBwYWdlcyBhbmQgd2UgZmV0Y2gKKyMgdGhlIHJldmlzaW9ucyBxdWl0ZSBvZnRlbiBzbyB0aGF0IHRoZXkgY29uY2VybiBvbmx5IGZldyBwYWdlcy4KKyMgUG9zc2libGUgdmFsdWVzOgorIyAtIGJ5X3JldjogcGVyZm9ybSBvbmUgcXVlcnkgcGVyIG5ldyByZXZpc2lvbiBvbiB0aGUgcmVtb3RlIHdpa2kKKyMgLSBieV9wYWdlOiBxdWVyeSBlYWNoIHRyYWNrZWQgcGFnZSBmb3IgbmV3IHJldmlzaW9uCitteSAkZmV0Y2hfc3RyYXRlZ3kgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0uZmV0Y2hTdHJhdGVneSIpOworaWYgKCEkZmV0Y2hfc3RyYXRlZ3kpIHsKKwkkZmV0Y2hfc3RyYXRlZ3kgPSBydW5fZ2l0KCdjb25maWcgLS1nZXQgbWVkaWF3aWtpLmZldGNoU3RyYXRlZ3knKTsKK30KK2Nob21wKCRmZXRjaF9zdHJhdGVneSk7CitpZiAoISRmZXRjaF9zdHJhdGVneSkgeworCSRmZXRjaF9zdHJhdGVneSA9ICdieV9wYWdlJzsKK30KKworIyBSZW1lbWJlciB0aGUgdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gYSByZXZpc2lvbiBpZC4KK215ICViYXNldGltZXN0YW1wczsKKworIyBEdW1iIHB1c2g6IGRvbid0IHVwZGF0ZSBub3RlcyBhbmQgbWVkaWF3aWtpIHJlZiB0byByZWZsZWN0IHRoZSBsYXN0IHB1c2guCisjCisjIENvbmZpZ3VyYWJsZSB3aXRoIG1lZGlhd2lraS5kdW1iUHVzaCwgb3IgcGVyLXJlbW90ZSB3aXRoCisjIHJlbW90ZS48cmVtb3RlbmFtZT4uZHVtYlB1c2guCisjCisjIFRoaXMgbWVhbnMgdGhlIHVzZXIgd2lsbCBoYXZlIHRvIHJlLWltcG9ydCB0aGUganVzdC1wdXNoZWQKKyMgcmV2aXNpb25zLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBtZWFucyB0aGF0IHRoZSBHaXQgcmV2aXNpb25zCisjIGNvcnJlc3BvbmRpbmcgdG8gTWVkaWFXaWtpIHJldmlzaW9ucyBhcmUgYWxsIGltcG9ydGVkIGZyb20gdGhlIHdpa2ksCisjIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IHdlcmUgaW5pdGlhbGx5IGNyZWF0ZWQgaW4gR2l0IG9yIGZyb20gdGhlCisjIHdlYiBpbnRlcmZhY2UsIGhlbmNlIGFsbCB1c2VycyB3aWxsIGdldCB0aGUgc2FtZSBoaXN0b3J5IChpLmUuIGlmCisjIHRoZSBwdXNoIGZyb20gR2l0IHRvIE1lZGlhV2lraSBsb3NlcyBzb21lIGluZm9ybWF0aW9uLCBldmVyeWJvZHkKKyMgd2lsbCBnZXQgdGhlIGhpc3Rvcnkgd2l0aCBpbmZvcm1hdGlvbiBsb3N0KS4gSWYgdGhlIGltcG9ydCBpcworIyBkZXRlcm1pbmlzdGljLCB0aGlzIG1lYW5zIGV2ZXJ5Ym9keSBnZXRzIHRoZSBzYW1lIHNoYTEgZm9yIGVhY2gKKyMgTWVkaWFXaWtpIHJldmlzaW9uLgorbXkgJGR1bWJfcHVzaCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiR7cmVtb3RlbmFtZX0uZHVtYlB1c2giKTsKK2lmICghJGR1bWJfcHVzaCkgeworCSRkdW1iX3B1c2ggPSBydW5fZ2l0KCdjb25maWcgLS1nZXQgLS1ib29sIG1lZGlhd2lraS5kdW1iUHVzaCcpOworfQorY2hvbXAoJGR1bWJfcHVzaCk7CiskZHVtYl9wdXNoID0gKCRkdW1iX3B1c2ggZXEgJ3RydWUnKTsKKworbXkgJHdpa2lfbmFtZSA9ICR1cmw7Ciskd2lraV9uYW1lID1+IHN7W14vXSo6Ly99e307CisjIElmIFVSTCBpcyBsaWtlIGh0dHA6Ly91c2VyOnBhc3N3b3JkQGV4YW1wbGUuY29tLywgd2UgY2xlYXJseSBkb24ndAorIyB3YW50IHRoZSBwYXNzd29yZCBpbiAkd2lraV9uYW1lLiBXaGlsZSB3ZSdyZSB0aGVyZSwgYWxzbyByZW1vdmUgdXNlcgorIyBhbmQgJ0AnIHNpZ24sIHRvIGF2b2lkIGF1dGhvciBsaWtlIE1XVXNlckBIVFRQVXNlckBob3N0LmNvbQorJHdpa2lfbmFtZSA9fiBzL14uKkAvLzsKKworIyBDb21tYW5kcyBwYXJzZXIKK3doaWxlICg8U1RESU4+KSB7CisJY2hvbXA7CisKKwlpZiAoIXBhcnNlX2NvbW1hbmQoJF8pKSB7CisJCWxhc3Q7CisJfQorCisJQkVHSU4geyAkfCA9IDEgfSAjIGZsdXNoIFNURE9VVCwgdG8gbWFrZSBzdXJlIHRoZSBwcmV2aW91cworCQkJICMgY29tbWFuZCBpcyBmdWxseSBwcm9jZXNzZWQuCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMgZXJyb3IgaGFuZGxpbmcKK3N1YiBleGl0X2Vycm9yX3VzYWdlIHsKKwlkaWUgIkVSUk9SOiBnaXQtcmVtb3RlLW1lZGlhd2lraSBtb2R1bGUgd2FzIG5vdCBjYWxsZWQgd2l0aCBhIGNvcnJlY3QgbnVtYmVyIG9mXG4iIC4KKwkgICAgInBhcmFtZXRlcnNcbiIgLgorCSAgICAiWW91IG1heSBvYnRhaW4gdGhpcyBlcnJvciBiZWNhdXNlIHlvdSBhdHRlbXB0ZWQgdG8gcnVuIHRoZSBnaXQtcmVtb3RlLW1lZGlhd2lraVxuIiAuCisgICAgICAgICAgICAibW9kdWxlIGRpcmVjdGx5LlxuIiAuCisJICAgICJUaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB0aGUgZm9sbG93aW5nIHdheTpcbiIgLgorCSAgICAiXHRnaXQgY2xvbmUgbWVkaWF3aWtpOi8vPGFkZHJlc3Mgb2YgYSBtZWRpYXdpa2k+XG4iIC4KKwkgICAgIlRoZW4sIHVzZSBnaXQgY29tbWl0LCBwdXNoIGFuZCBwdWxsIGFzIHdpdGggZXZlcnkgbm9ybWFsIGdpdCByZXBvc2l0b3J5LlxuIjsKK30KKworc3ViIHBhcnNlX2NvbW1hbmQgeworCW15ICgkbGluZSkgPSBAXzsKKwlteSBAY21kID0gc3BsaXQoLyAvLCAkbGluZSk7CisJaWYgKCFkZWZpbmVkICRjbWRbMF0pIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgkY21kWzBdIGVxICdjYXBhYmlsaXRpZXMnKSB7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBjYXBhYmlsaXRpZXNcbiIpCisJCSAgICBpZiAoZGVmaW5lZCgkY21kWzFdKSk7CisJCW13X2NhcGFiaWxpdGllcygpOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ2xpc3QnKSB7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBsaXN0XG4iKSBpZiAoZGVmaW5lZCgkY21kWzJdKSk7CisJCW13X2xpc3QoJGNtZFsxXSk7CisJfSBlbHNpZiAoJGNtZFswXSBlcSAnaW1wb3J0JykgeworCQlkaWUoIkludmFsaWQgYXJndW1lbnQgZm9yIGltcG9ydFxuIikKKwkJICAgIGlmICgkY21kWzFdIGVxIEVNUFRZKTsKKwkJZGllKCJUb28gbWFueSBhcmd1bWVudHMgZm9yIGltcG9ydFxuIikKKwkJICAgIGlmIChkZWZpbmVkKCRjbWRbMl0pKTsKKwkJbXdfaW1wb3J0KCRjbWRbMV0pOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ29wdGlvbicpIHsKKwkJZGllKCJJbnZhbGlkIGFyZ3VtZW50cyBmb3Igb3B0aW9uXG4iKQorCQkgICAgaWYgKCRjbWRbMV0gZXEgRU1QVFkgfHwgJGNtZFsyXSBlcSBFTVBUWSk7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBvcHRpb25cbiIpCisJCSAgICBpZiAoZGVmaW5lZCgkY21kWzNdKSk7CisJCW13X29wdGlvbigkY21kWzFdLCRjbWRbMl0pOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ3B1c2gnKSB7CisJCW13X3B1c2goJGNtZFsxXSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJVbmtub3duIGNvbW1hbmQuIEFib3J0aW5nLi4uXG4iOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKyMgTWVkaWFXaWtpIEFQSSBpbnN0YW5jZSwgY3JlYXRlZCBsYXppbHkuCitteSAkbWVkaWF3aWtpOworCitzdWIgZmF0YWxfbXdfZXJyb3IgeworCW15ICRhY3Rpb24gPSBzaGlmdDsKKwlwcmludCBTVERFUlIgImZhdGFsOiBjb3VsZCBub3QgJGFjdGlvbi5cbiI7CisJcHJpbnQgU1RERVJSICJmYXRhbDogJyR1cmwnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIG1lZGlhd2lraVxuIjsKKwlpZiAoJHVybCA9fiAvXmh0dHBzLykgeworCQlwcmludCBTVERFUlIgImZhdGFsOiBtYWtlIHN1cmUgJyR1cmwvYXBpLnBocCcgaXMgYSB2YWxpZCBwYWdlXG4iOworCQlwcmludCBTVERFUlIgImZhdGFsOiBhbmQgdGhlIFNTTCBjZXJ0aWZpY2F0ZSBpcyBjb3JyZWN0LlxuIjsKKwl9IGVsc2UgeworCQlwcmludCBTVERFUlIgImZhdGFsOiBtYWtlIHN1cmUgJyR1cmwvYXBpLnBocCcgaXMgYSB2YWxpZCBwYWdlLlxuIjsKKwl9CisJcHJpbnQgU1RERVJSICJmYXRhbDogKGVycm9yICIgLgorCSAgICAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnIC4KKwkgICAgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4gIilcbiI7CisJZXhpdCAxOworfQorCisjIyBGdW5jdGlvbnMgZm9yIGxpc3RpbmcgcGFnZXMgb24gdGhlIHJlbW90ZSB3aWtpCitzdWIgZ2V0X213X3RyYWNrZWRfcGFnZXMgeworCW15ICRwYWdlcyA9IHNoaWZ0OworCWdldF9td19wYWdlX2xpc3QoXEB0cmFja2VkX3BhZ2VzLCAkcGFnZXMpOworCXJldHVybjsKK30KKworc3ViIGdldF9td19wYWdlX2xpc3QgeworCW15ICRwYWdlX2xpc3QgPSBzaGlmdDsKKwlteSAkcGFnZXMgPSBzaGlmdDsKKwlteSBAc29tZV9wYWdlcyA9IEB7JHBhZ2VfbGlzdH07CisJd2hpbGUgKEBzb21lX3BhZ2VzKSB7CisJCW15ICRsYXN0X3BhZ2UgPSBTTElDRV9TSVpFOworCQlpZiAoJCNzb21lX3BhZ2VzIDwgJGxhc3RfcGFnZSkgeworCQkJJGxhc3RfcGFnZSA9ICQjc29tZV9wYWdlczsKKwkJfQorCQlteSBAc2xpY2UgPSBAc29tZV9wYWdlc1swLi4kbGFzdF9wYWdlXTsKKwkJZ2V0X213X2ZpcnN0X3BhZ2VzKFxAc2xpY2UsICRwYWdlcyk7CisJCUBzb21lX3BhZ2VzID0gQHNvbWVfcGFnZXNbKFNMSUNFX1NJWkUgKyAxKS4uJCNzb21lX3BhZ2VzXTsKKwl9CisJcmV0dXJuOworfQorCitzdWIgZ2V0X213X3RyYWNrZWRfY2F0ZWdvcmllcyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJZm9yZWFjaCBteSAkY2F0ZWdvcnkgKEB0cmFja2VkX2NhdGVnb3JpZXMpIHsKKwkJaWYgKGluZGV4KCRjYXRlZ29yeSwgJzonKSA8IDApIHsKKwkJCSMgTWVkaWF3aWtpIHJlcXVpcmVzIHRoZSBDYXRlZ29yeQorCQkJIyBwcmVmaXgsIGJ1dCBsZXQncyBub3QgZm9yY2UgdGhlIHVzZXIKKwkJCSMgdG8gc3BlY2lmeSBpdC4KKwkJCSRjYXRlZ29yeSA9ICJDYXRlZ29yeToke2NhdGVnb3J5fSI7CisJCX0KKwkJbXkgJG13X3BhZ2VzID0gJG1lZGlhd2lraS0+bGlzdCggeworCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQlsaXN0ID0+ICdjYXRlZ29yeW1lbWJlcnMnLAorCQkJY210aXRsZSA9PiAkY2F0ZWdvcnksCisJCQljbWxpbWl0ID0+ICdtYXgnIH0gKQorCQkJfHwgZGllICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuICc6ICcKKwkJCQkuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICJcbiI7CisJCWZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgeworCQkJJHBhZ2VzLT57JHBhZ2UtPnt0aXRsZX19ID0gJHBhZ2U7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdWIgZ2V0X213X3RyYWNrZWRfbmFtZXNwYWNlcyB7CisgICAgbXkgJHBhZ2VzID0gc2hpZnQ7CisgICAgZm9yZWFjaCBteSAkbG9jYWxfbmFtZXNwYWNlIChzb3J0IEB0cmFja2VkX25hbWVzcGFjZXMpIHsKKyAgICAgICAgbXkgJG5hbWVzcGFjZV9pZDsKKyAgICAgICAgaWYgKCRsb2NhbF9uYW1lc3BhY2UgZXEgIihNYWluKSIpIHsKKyAgICAgICAgICAgICRuYW1lc3BhY2VfaWQgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJG5hbWVzcGFjZV9pZCA9IGdldF9td19uYW1lc3BhY2VfaWQoJGxvY2FsX25hbWVzcGFjZSk7CisgICAgICAgIH0KKyAgICAgICAgIyB2aXJ0dWFsIG5hbWVzcGFjZXMgZG9uJ3Qgc3VwcG9ydCBhbGxwYWdlcworICAgICAgICBuZXh0IGlmICFkZWZpbmVkKCRuYW1lc3BhY2VfaWQpIHx8ICRuYW1lc3BhY2VfaWQgPCAwOworICAgICAgICBteSAkbXdfcGFnZXMgPSAkbWVkaWF3aWtpLT5saXN0KCB7CisgICAgICAgICAgICBhY3Rpb24gPT4gJ3F1ZXJ5JywKKyAgICAgICAgICAgIGxpc3QgPT4gJ2FsbHBhZ2VzJywKKyAgICAgICAgICAgIGFwbmFtZXNwYWNlID0+ICRuYW1lc3BhY2VfaWQsCisgICAgICAgICAgICBhcGxpbWl0ID0+ICdtYXgnIH0gKQorICAgICAgICAgICAgfHwgZGllICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuICc6ICcKKyAgICAgICAgICAgICAgICAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICJcbiI7CisgICAgICAgIHByaW50IHsqU1RERVJSfSAiJCN7JG13X3BhZ2VzfSBmb3VuZCBpbiBuYW1lc3BhY2UgJGxvY2FsX25hbWVzcGFjZSAoJG5hbWVzcGFjZV9pZClcbiI7CisgICAgICAgIGZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgeworICAgICAgICAgICAgJHBhZ2VzLT57JHBhZ2UtPnt0aXRsZX19ID0gJHBhZ2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuOworfQorCitzdWIgZ2V0X213X2FsbF9wYWdlcyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJIyBObyB1c2VyLXByb3ZpZGVkIGxpc3QsIGdldCB0aGUgbGlzdCBvZiBwYWdlcyBmcm9tIHRoZSBBUEkuCisJbXkgJG13X3BhZ2VzID0gJG1lZGlhd2lraS0+bGlzdCh7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQlsaXN0ID0+ICdhbGxwYWdlcycsCisJCWFwbGltaXQgPT4gJ21heCcKKwl9KTsKKwlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgeworCQlmYXRhbF9td19lcnJvcigiZ2V0IHRoZSBsaXN0IG9mIHdpa2kgcGFnZXMiKTsKKwl9CisJZm9yZWFjaCBteSAkcGFnZSAoQHskbXdfcGFnZXN9KSB7CisJCSRwYWdlcy0+eyRwYWdlLT57dGl0bGV9fSA9ICRwYWdlOworCX0KKwlyZXR1cm47Cit9CisKKyMgcXVlcmllcyB0aGUgd2lraSBmb3IgYSBzZXQgb2YgcGFnZXMuIE1lYW50IHRvIGJlIHVzZWQgd2l0aGluIGEgbG9vcAorIyBxdWVyeWluZyB0aGUgd2lraSBmb3Igc2xpY2VzIG9mIHBhZ2UgbGlzdC4KK3N1YiBnZXRfbXdfZmlyc3RfcGFnZXMgeworCW15ICRzb21lX3BhZ2VzID0gc2hpZnQ7CisJbXkgQHNvbWVfcGFnZXMgPSBAeyRzb21lX3BhZ2VzfTsKKworCW15ICRwYWdlcyA9IHNoaWZ0OworCisJIyBwYXR0ZXJuICdwYWdlMXxwYWdlMnwuLi4nIHJlcXVpcmVkIGJ5IHRoZSBBUEkKKwlteSAkdGl0bGVzID0gam9pbignfCcsIEBzb21lX3BhZ2VzKTsKKworCW15ICRtd19wYWdlcyA9ICRtZWRpYXdpa2ktPmFwaSh7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQl0aXRsZXMgPT4gJHRpdGxlcywKKwl9KTsKKwlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgeworCQlmYXRhbF9td19lcnJvcigicXVlcnkgdGhlIGxpc3Qgb2Ygd2lraSBwYWdlcyIpOworCX0KKwl3aGlsZSAobXkgKCRpZCwgJHBhZ2UpID0gZWFjaCgleyRtd19wYWdlcy0+e3F1ZXJ5fS0+e3BhZ2VzfX0pKSB7CisJCWlmICgkaWQgPCAwKSB7CisJCQlwcmludCB7KlNUREVSUn0gIldhcm5pbmc6IHBhZ2UgJHBhZ2UtPnt0aXRsZX0gbm90IGZvdW5kIG9uIHdpa2lcbiI7CisJCX0gZWxzZSB7CisJCQkkcGFnZXMtPnskcGFnZS0+e3RpdGxlfX0gPSAkcGFnZTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyMgR2V0IHRoZSBsaXN0IG9mIHBhZ2VzIHRvIGJlIGZldGNoZWQgYWNjb3JkaW5nIHRvIGNvbmZpZ3VyYXRpb24uCitzdWIgZ2V0X213X3BhZ2VzIHsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisKKwlwcmludCB7KlNUREVSUn0gIkxpc3RpbmcgcGFnZXMgb24gcmVtb3RlIHdpa2kuLi5cbiI7CisKKwlteSAlcGFnZXM7ICMgaGFzaCBvbiBwYWdlIHRpdGxlcyB0byBhdm9pZCBkdXBsaWNhdGVzCisJbXkgJHVzZXJfZGVmaW5lZDsKKwlpZiAoQHRyYWNrZWRfcGFnZXMpIHsKKwkJJHVzZXJfZGVmaW5lZCA9IDE7CisJCSMgVGhlIHVzZXIgcHJvdmlkZWQgYSBsaXN0IG9mIHBhZ2VzIHRpdGxlcywgYnV0IHdlCisJCSMgc3RpbGwgbmVlZCB0byBxdWVyeSB0aGUgQVBJIHRvIGdldCB0aGUgcGFnZSBJRHMuCisJCWdldF9td190cmFja2VkX3BhZ2VzKFwlcGFnZXMpOworCX0KKwlpZiAoQHRyYWNrZWRfY2F0ZWdvcmllcykgeworCQkkdXNlcl9kZWZpbmVkID0gMTsKKwkJZ2V0X213X3RyYWNrZWRfY2F0ZWdvcmllcyhcJXBhZ2VzKTsKKwl9CisJaWYgKEB0cmFja2VkX25hbWVzcGFjZXMpIHsKKwkJJHVzZXJfZGVmaW5lZCA9IDE7CisJCWdldF9td190cmFja2VkX25hbWVzcGFjZXMoXCVwYWdlcyk7CisJfQorCWlmICghJHVzZXJfZGVmaW5lZCkgeworCQlnZXRfbXdfYWxsX3BhZ2VzKFwlcGFnZXMpOworCX0KKwlpZiAoJGltcG9ydF9tZWRpYSkgeworCQlwcmludCB7KlNUREVSUn0gIkdldHRpbmcgbWVkaWEgZmlsZXMgZm9yIHNlbGVjdGVkIHBhZ2VzLi4uXG4iOworCQlpZiAoJHVzZXJfZGVmaW5lZCkgeworCQkJZ2V0X2xpbmtlZF9tZWRpYWZpbGVzKFwlcGFnZXMpOworCQl9IGVsc2UgeworCQkJZ2V0X2FsbF9tZWRpYWZpbGVzKFwlcGFnZXMpOworCQl9CisJfQorCXByaW50IHsqU1RERVJSfSAoc2NhbGFyIGtleXMgJXBhZ2VzKSAuICIgcGFnZXMgZm91bmQuXG4iOworCXJldHVybiAlcGFnZXM7Cit9CisKKyMgdXNhZ2U6ICRvdXQgPSBydW5fZ2l0KCJjb21tYW5kIGFyZ3MiKTsKKyMgICAgICAgICRvdXQgPSBydW5fZ2l0KCJjb21tYW5kIGFyZ3MiLCAicmF3Iik7ICMgZG9uJ3QgaW50ZXJwcmV0IG91dHB1dCBhcyBVVEYtOC4KK3N1YiBydW5fZ2l0IHsKKwlteSAkYXJncyA9IHNoaWZ0OworCW15ICRlbmNvZGluZyA9IChzaGlmdCB8fCAnZW5jb2RpbmcoVVRGLTgpJyk7CisJb3BlbihteSAkZ2l0LCAiLXw6JHtlbmNvZGluZ30iLCAiZ2l0ICR7YXJnc30iKQorCSAgICBvciBkaWUgIlVuYWJsZSB0byBmb3JrOiAkIVxuIjsKKwlteSAkcmVzID0gZG8geworCQlsb2NhbCAkLyA9IHVuZGVmOworCQk8JGdpdD4KKwl9OworCWNsb3NlKCRnaXQpOworCisJcmV0dXJuICRyZXM7Cit9CisKKworc3ViIGdldF9hbGxfbWVkaWFmaWxlcyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJIyBBdHRhY2ggbGlzdCBvZiBhbGwgcGFnZXMgZm9yIG1lZGlhIGZpbGVzIGZyb20gdGhlIEFQSSwKKwkjIHRoZXkgYXJlIGluIGEgZGlmZmVyZW50IG5hbWVzcGFjZSwgb25seSBvbmUgbmFtZXNwYWNlCisJIyBjYW4gYmUgcXVlcmllZCBhdCB0aGUgc2FtZSBtb21lbnQKKwlteSAkbXdfcGFnZXMgPSAkbWVkaWF3aWtpLT5saXN0KHsKKwkJYWN0aW9uID0+ICdxdWVyeScsCisJCWxpc3QgPT4gJ2FsbHBhZ2VzJywKKwkJYXBuYW1lc3BhY2UgPT4gZ2V0X213X25hbWVzcGFjZV9pZCgnRmlsZScpLAorCQlhcGxpbWl0ID0+ICdtYXgnCisJfSk7CisJaWYgKCFkZWZpbmVkKCRtd19wYWdlcykpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJmYXRhbDogY291bGQgbm90IGdldCB0aGUgbGlzdCBvZiBwYWdlcyBmb3IgbWVkaWEgZmlsZXMuXG4iOworCQlwcmludCB7KlNUREVSUn0gImZhdGFsOiAnJHVybCcgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgbWVkaWF3aWtpXG4iOworCQlwcmludCB7KlNUREVSUn0gImZhdGFsOiBtYWtlIHN1cmUgJyR1cmwvYXBpLnBocCcgaXMgYSB2YWxpZCBwYWdlLlxuIjsKKwkJZXhpdCAxOworCX0KKwlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKKwkJJHBhZ2VzLT57JHBhZ2UtPnt0aXRsZX19ID0gJHBhZ2U7CisJfQorCXJldHVybjsKK30KKworc3ViIGdldF9saW5rZWRfbWVkaWFmaWxlcyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJbXkgQHRpdGxlcyA9IG1hcCB7ICRfLT57dGl0bGV9IH0gdmFsdWVzKCV7JHBhZ2VzfSk7CisKKwlteSAkYmF0Y2ggPSBCQVRDSF9TSVpFOworCXdoaWxlIChAdGl0bGVzKSB7CisJCWlmICgkI3RpdGxlcyA8ICRiYXRjaCkgeworCQkJJGJhdGNoID0gJCN0aXRsZXM7CisJCX0KKwkJbXkgQHNsaWNlID0gQHRpdGxlc1swLi4kYmF0Y2hdOworCisJCSMgcGF0dGVybiAncGFnZTF8cGFnZTJ8Li4uJyByZXF1aXJlZCBieSB0aGUgQVBJCisJCW15ICRtd190aXRsZXMgPSBqb2luKCd8JywgQHNsaWNlKTsKKworCQkjIE1lZGlhIGZpbGVzIGNvdWxkIGJlIGluY2x1ZGVkIG9yIGxpbmtlZCBmcm9tCisJCSMgYSBwYWdlLCBnZXQgYWxsIHJlbGF0ZWQKKwkJbXkgJHF1ZXJ5ID0geworCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQlwcm9wID0+ICdsaW5rc3xpbWFnZXMnLAorCQkJdGl0bGVzID0+ICRtd190aXRsZXMsCisJCQlwbG5hbWVzcGFjZSA9PiBnZXRfbXdfbmFtZXNwYWNlX2lkKCdGaWxlJyksCisJCQlwbGxpbWl0ID0+ICdtYXgnCisJCX07CisJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCQl3aGlsZSAobXkgKCRpZCwgJHBhZ2UpID0gZWFjaCgleyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc319KSkgeworCQkJbXkgQG1lZGlhX3RpdGxlczsKKwkJCWlmIChkZWZpbmVkKCRwYWdlLT57bGlua3N9KSkgeworCQkJCW15IEBsaW5rX3RpdGxlcworCQkJCSAgICA9IG1hcCB7ICRfLT57dGl0bGV9IH0gQHskcGFnZS0+e2xpbmtzfX07CisJCQkJcHVzaChAbWVkaWFfdGl0bGVzLCBAbGlua190aXRsZXMpOworCQkJfQorCQkJaWYgKGRlZmluZWQoJHBhZ2UtPntpbWFnZXN9KSkgeworCQkJCW15IEBpbWFnZV90aXRsZXMKKwkJCQkgICAgPSBtYXAgeyAkXy0+e3RpdGxlfSB9IEB7JHBhZ2UtPntpbWFnZXN9fTsKKwkJCQlwdXNoKEBtZWRpYV90aXRsZXMsIEBpbWFnZV90aXRsZXMpOworCQkJfQorCQkJaWYgKEBtZWRpYV90aXRsZXMpIHsKKwkJCQlnZXRfbXdfcGFnZV9saXN0KFxAbWVkaWFfdGl0bGVzLCAkcGFnZXMpOworCQkJfQorCQl9CisKKwkJQHRpdGxlcyA9IEB0aXRsZXNbKCRiYXRjaCsxKS4uJCN0aXRsZXNdOworCX0KKwlyZXR1cm47Cit9CisKK3N1YiBnZXRfbXdfbWVkaWFmaWxlX2Zvcl9wYWdlX3JldmlzaW9uIHsKKwkjIE5hbWUgb2YgdGhlIGZpbGUgb24gV2lraSwgd2l0aCB0aGUgcHJlZml4LgorCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCW15ICR0aW1lc3RhbXAgPSBzaGlmdDsKKwlteSAlbWVkaWFmaWxlOworCisJIyBTZWFyY2ggaWYgb24gYSBtZWRpYSBmaWxlIHdpdGggZ2l2ZW4gdGltZXN0YW1wIGV4aXN0cyBvbgorCSMgTWVkaWFXaWtpLiBJbiB0aGF0IGNhc2UgZG93bmxvYWQgdGhlIGZpbGUuCisJbXkgJHF1ZXJ5ID0geworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJcHJvcCA9PiAnaW1hZ2VpbmZvJywKKwkJdGl0bGVzID0+ICJGaWxlOiR7ZmlsZW5hbWV9IiwKKwkJaWlzdGFydCA9PiAkdGltZXN0YW1wLAorCQlpaWVuZCA9PiAkdGltZXN0YW1wLAorCQlpaXByb3AgPT4gJ3RpbWVzdGFtcHxhcmNoaXZlbmFtZXx1cmwnLAorCQlpaWxpbWl0ID0+IDEKKwl9OworCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCW15ICgkZmlsZWlkLCAkZmlsZSkgPSBlYWNoKCAleyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc319ICk7CisJIyBJZiBub3QgZGVmaW5lZCBpdCBtZWFucyB0aGVyZSBpcyBubyByZXZpc2lvbiBvZiB0aGUgZmlsZSBmb3IKKwkjIGdpdmVuIHRpbWVzdGFtcC4KKwlpZiAoZGVmaW5lZCgkZmlsZS0+e2ltYWdlaW5mb30pKSB7CisJCSRtZWRpYWZpbGV7dGl0bGV9ID0gJGZpbGVuYW1lOworCisJCW15ICRmaWxlaW5mbyA9IHBvcChAeyRmaWxlLT57aW1hZ2VpbmZvfX0pOworCQkkbWVkaWFmaWxle3RpbWVzdGFtcH0gPSAkZmlsZWluZm8tPnt0aW1lc3RhbXB9OworCQkjIE1lZGlhd2lraTo6QVBJJ3MgZG93bmxvYWQgZnVuY3Rpb24gZG9lc24ndCBzdXBwb3J0IGh0dHBzIFVSTHMKKwkJIyBhbmQgY2FuJ3QgZG93bmxvYWQgb2xkIHZlcnNpb25zIG9mIGZpbGVzLgorCQlwcmludCB7KlNUREVSUn0gIlx0RG93bmxvYWRpbmcgZmlsZSAkbWVkaWFmaWxle3RpdGxlfSwgdmVyc2lvbiAkbWVkaWFmaWxle3RpbWVzdGFtcH1cbiI7CisJCSRtZWRpYWZpbGV7Y29udGVudH0gPSBkb3dubG9hZF9td19tZWRpYWZpbGUoJGZpbGVpbmZvLT57dXJsfSk7CisJfQorCXJldHVybiAlbWVkaWFmaWxlOworfQorCitzdWIgZG93bmxvYWRfbXdfbWVkaWFmaWxlIHsKKwlteSAkZG93bmxvYWRfdXJsID0gc2hpZnQ7CisKKwlteSAkcmVzcG9uc2UgPSAkbWVkaWF3aWtpLT57dWF9LT5nZXQoJGRvd25sb2FkX3VybCk7CisJaWYgKCRyZXNwb25zZS0+Y29kZSA9PSBIVFRQX0NPREVfT0spIHsKKwkJIyBJdCBpcyB0ZW1wdGluZyB0byByZXR1cm4KKwkJIyAkcmVzcG9uc2UtPmRlY29kZWRfY29udGVudCh7Y2hhcnNldCA9PiAibm9uZSJ9KSwgYnV0CisJCSMgd2hlbiBkb2luZyBzbywgdXRmODo6ZG93bmdyYWRlKCRjb250ZW50KSBmYWlscyB3aXRoCisJCSMgIldpZGUgY2hhcmFjdGVyIGluIHN1YnJvdXRpbmUgZW50cnkiLgorCQkkcmVzcG9uc2UtPmRlY29kZSgpOworCQlyZXR1cm4gJHJlc3BvbnNlLT5jb250ZW50KCk7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJFcnJvciBkb3dubG9hZGluZyBtZWRpYWZpbGUgZnJvbSA6XG4iOworCQlwcmludCB7KlNUREVSUn0gIlVSTDogJHtkb3dubG9hZF91cmx9XG4iOworCQlwcmludCB7KlNUREVSUn0gJ1NlcnZlciByZXNwb25zZTogJyAuICRyZXNwb25zZS0+Y29kZSAuIHF7IH0gLiAkcmVzcG9uc2UtPm1lc3NhZ2UgLiAiXG4iOworCQlleGl0IDE7CisJfQorfQorCitzdWIgZ2V0X2xhc3RfbG9jYWxfcmV2aXNpb24geworCSMgR2V0IG5vdGUgcmVnYXJkaW5nIGxhc3QgbWVkaWF3aWtpIHJldmlzaW9uCisJbXkgJG5vdGUgPSBydW5fZ2l0KCJub3RlcyAtLXJlZj0ke3JlbW90ZW5hbWV9L21lZGlhd2lraSBzaG93IHJlZnMvbWVkaWF3aWtpLyR7cmVtb3RlbmFtZX0vbWFzdGVyIDI+L2Rldi9udWxsIik7CisJbXkgQG5vdGVfaW5mbyA9IHNwbGl0KC8gLywgJG5vdGUpOworCisJbXkgJGxhc3RyZXZpc2lvbl9udW1iZXI7CisJaWYgKCEoZGVmaW5lZCgkbm90ZV9pbmZvWzBdKSAmJiAkbm90ZV9pbmZvWzBdIGVxICdtZWRpYXdpa2lfcmV2aXNpb246JykpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICdObyBwcmV2aW91cyBtZWRpYXdpa2kgcmV2aXNpb24gZm91bmQnOworCQkkbGFzdHJldmlzaW9uX251bWJlciA9IDA7CisJfSBlbHNlIHsKKwkJIyBOb3RlcyBhcmUgZm9ybWF0dGVkIDogbWVkaWF3aWtpX3JldmlzaW9uOiAjbnVtYmVyCisJCSRsYXN0cmV2aXNpb25fbnVtYmVyID0gJG5vdGVfaW5mb1sxXTsKKwkJY2hvbXAoJGxhc3RyZXZpc2lvbl9udW1iZXIpOworCQlwcmludCB7KlNUREVSUn0gIkxhc3QgbG9jYWwgbWVkaWF3aWtpIHJldmlzaW9uIGZvdW5kIGlzICR7bGFzdHJldmlzaW9uX251bWJlcn0iOworCX0KKwlyZXR1cm4gJGxhc3RyZXZpc2lvbl9udW1iZXI7Cit9CisKKyMgR2V0IHRoZSBsYXN0IHJlbW90ZSByZXZpc2lvbiB3aXRob3V0IHRha2luZyBpbiBhY2NvdW50IHdoaWNoIHBhZ2VzIGFyZQorIyB0cmFja2VkIG9yIG5vdC4gVGhpcyBmdW5jdGlvbiBtYWtlcyBhIHNpbmdsZSByZXF1ZXN0IHRvIHRoZSB3aWtpIHRodXMKKyMgYXZvaWQgYSBsb29wIG9udG8gYWxsIHRyYWNrZWQgcGFnZXMuIFRoaXMgaXMgdXNlZnVsIGZvciB0aGUgZmV0Y2gtYnktcmV2CisjIG9wdGlvbi4KK3N1YiBnZXRfbGFzdF9nbG9iYWxfcmVtb3RlX3JldiB7CisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCisJbXkgJHF1ZXJ5ID0geworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJbGlzdCA9PiAncmVjZW50Y2hhbmdlcycsCisJCXByb3AgPT4gJ3JldmlzaW9ucycsCisJCXJjbGltaXQgPT4gJzEnLAorCQlyY2RpciA9PiAnb2xkZXInLAorCX07CisJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCXJldHVybiAkcmVzdWx0LT57cXVlcnl9LT57cmVjZW50Y2hhbmdlc31bMF0tPntyZXZpZH07Cit9CisKKyMgR2V0IHRoZSBsYXN0IHJlbW90ZSByZXZpc2lvbiBjb25jZXJuaW5nIHRoZSB0cmFja2VkIHBhZ2VzIGFuZCB0aGUgdHJhY2tlZAorIyBjYXRlZ29yaWVzLgorc3ViIGdldF9sYXN0X3JlbW90ZV9yZXZpc2lvbiB7CisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCisJbXkgJXBhZ2VzX2hhc2ggPSBnZXRfbXdfcGFnZXMoKTsKKwlteSBAcGFnZXMgPSB2YWx1ZXMoJXBhZ2VzX2hhc2gpOworCisJbXkgJG1heF9yZXZfbnVtID0gMDsKKworCXByaW50IHsqU1RERVJSfSAiR2V0dGluZyBsYXN0IHJldmlzaW9uIGlkIG9uIHRyYWNrZWQgcGFnZXMuLi5cbiI7CisKKwlmb3JlYWNoIG15ICRwYWdlIChAcGFnZXMpIHsKKwkJbXkgJGlkID0gJHBhZ2UtPntwYWdlaWR9OworCisJCW15ICRxdWVyeSA9IHsKKwkJCWFjdGlvbiA9PiAncXVlcnknLAorCQkJcHJvcCA9PiAncmV2aXNpb25zJywKKwkJCXJ2cHJvcCA9PiAnaWRzfHRpbWVzdGFtcCcsCisJCQlwYWdlaWRzID0+ICRpZCwKKwkJfTsKKworCQlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisKKwkJbXkgJGxhc3RyZXYgPSBwb3AoQHskcmVzdWx0LT57cXVlcnl9LT57cGFnZXN9LT57JGlkfS0+e3JldmlzaW9uc319KTsKKworCQkkYmFzZXRpbWVzdGFtcHN7JGxhc3RyZXYtPntyZXZpZH19ID0gJGxhc3RyZXYtPnt0aW1lc3RhbXB9OworCisJCSRtYXhfcmV2X251bSA9ICgkbGFzdHJldi0+e3JldmlkfSA+ICRtYXhfcmV2X251bSA/ICRsYXN0cmV2LT57cmV2aWR9IDogJG1heF9yZXZfbnVtKTsKKwl9CisKKwlwcmludCB7KlNUREVSUn0gIkxhc3QgcmVtb3RlIHJldmlzaW9uIGZvdW5kIGlzICRtYXhfcmV2X251bS5cbiI7CisJcmV0dXJuICRtYXhfcmV2X251bTsKK30KKworIyBDbGVhbiBjb250ZW50IGJlZm9yZSBzZW5kaW5nIGl0IHRvIE1lZGlhV2lraQorc3ViIG1lZGlhd2lraV9jbGVhbiB7CisJbXkgJHN0cmluZyA9IHNoaWZ0OworCW15ICRwYWdlX2NyZWF0ZWQgPSBzaGlmdDsKKwkjIE1lZGlhd2lraSBkb2VzIG5vdCBhbGxvdyBibGFuayBzcGFjZSBhdCB0aGUgZW5kIG9mIGEgcGFnZSBhbmQgZW5kcyB3aXRoIGEgc2luZ2xlIFxuLgorCSMgVGhpcyBmdW5jdGlvbiByaWdodCB0cmltcyBhIHN0cmluZyBhbmQgYWRkcyBhIFxuIGF0IHRoZSBlbmQgdG8gZm9sbG93IHRoaXMgcnVsZQorCSRzdHJpbmcgPX4gcy9ccyskLy87CisJaWYgKCRzdHJpbmcgZXEgRU1QVFkgJiYgJHBhZ2VfY3JlYXRlZCkgeworCQkjIENyZWF0aW5nIGVtcHR5IHBhZ2VzIGlzIGZvcmJpZGRlbi4KKwkJJHN0cmluZyA9IEVNUFRZX0NPTlRFTlQ7CisJfQorCXJldHVybiAkc3RyaW5nLiJcbiI7Cit9CisKKyMgRmlsdGVyIGFwcGxpZWQgb24gTWVkaWFXaWtpIGRhdGEgYmVmb3JlIGFkZGluZyB0aGVtIHRvIEdpdAorc3ViIG1lZGlhd2lraV9zbXVkZ2UgeworCW15ICRzdHJpbmcgPSBzaGlmdDsKKwlpZiAoJHN0cmluZyBlcSBFTVBUWV9DT05URU5UKSB7CisJCSRzdHJpbmcgPSBFTVBUWTsKKwl9CisJIyBUaGlzIFxuIGlzIGltcG9ydGFudC4gVGhpcyBpcyBkdWUgdG8gbWVkaWF3aWtpJ3Mgd2F5IHRvIGhhbmRsZSBlbmQgb2YgZmlsZXMuCisJcmV0dXJuICIke3N0cmluZ31cbiI7Cit9CisKK3N1YiBsaXRlcmFsX2RhdGEgeworCW15ICgkY29udGVudCkgPSBAXzsKKwlwcmludCB7KlNURE9VVH0gJ2RhdGEgJywgYnl0ZXM6Omxlbmd0aCgkY29udGVudCksICJcbiIsICRjb250ZW50OworCXJldHVybjsKK30KKworc3ViIGxpdGVyYWxfZGF0YV9yYXcgeworCSMgT3V0cHV0IHBvc3NpYmx5IGJpbmFyeSBjb250ZW50LgorCW15ICgkY29udGVudCkgPSBAXzsKKwkjIEF2b2lkIGNvbmZ1c2lvbiBiZXR3ZWVuIHNpemUgaW4gYnl0ZXMgYW5kIGluIGNoYXJhY3RlcnMKKwl1dGY4Ojpkb3duZ3JhZGUoJGNvbnRlbnQpOworCWJpbm1vZGUgU1RET1VULCAnOnJhdyc7CisJcHJpbnQgeypTVERPVVR9ICdkYXRhICcsIGJ5dGVzOjpsZW5ndGgoJGNvbnRlbnQpLCAiXG4iLCAkY29udGVudDsKKwliaW5tb2RlIFNURE9VVCwgJzplbmNvZGluZyhVVEYtOCknOworCXJldHVybjsKK30KKworc3ViIG13X2NhcGFiaWxpdGllcyB7CisJIyBSZXZpc2lvbnMgYXJlIGltcG9ydGVkIHRvIHRoZSBwcml2YXRlIG5hbWVzcGFjZQorCSMgcmVmcy9tZWRpYXdpa2kvJHJlbW90ZW5hbWUvIGJ5IHRoZSBoZWxwZXIgYW5kIGZldGNoZWQgaW50bworCSMgcmVmcy9yZW1vdGVzLyRyZW1vdGVuYW1lIGxhdGVyIGJ5IGZldGNoLgorCXByaW50IHsqU1RET1VUfSAicmVmc3BlYyByZWZzL2hlYWRzLyo6cmVmcy9tZWRpYXdpa2kvJHtyZW1vdGVuYW1lfS8qXG4iOworCXByaW50IHsqU1RET1VUfSAiaW1wb3J0XG4iOworCXByaW50IHsqU1RET1VUfSAibGlzdFxuIjsKKwlwcmludCB7KlNURE9VVH0gInB1c2hcbiI7CisJaWYgKCRkdW1iX3B1c2gpIHsKKwkJcHJpbnQgeypTVERPVVR9ICJuby1wcml2YXRlLXVwZGF0ZVxuIjsKKwl9CisJcHJpbnQgeypTVERPVVR9ICJcbiI7CisJcmV0dXJuOworfQorCitzdWIgbXdfbGlzdCB7CisJIyBNZWRpYVdpa2kgZG8gbm90IGhhdmUgYnJhbmNoZXMsIHdlIGNvbnNpZGVyIG9uZSBicmFuY2ggYXJiaXRyYXJpbHkKKwkjIGNhbGxlZCBtYXN0ZXIsIGFuZCBIRUFEIHBvaW50aW5nIHRvIGl0LgorCXByaW50IHsqU1RET1VUfSAiPyByZWZzL2hlYWRzL21hc3RlclxuIjsKKwlwcmludCB7KlNURE9VVH0gIlxAcmVmcy9oZWFkcy9tYXN0ZXIgSEVBRFxuIjsKKwlwcmludCB7KlNURE9VVH0gIlxuIjsKKwlyZXR1cm47Cit9CisKK3N1YiBtd19vcHRpb24geworCXByaW50IHsqU1RERVJSfSAicmVtb3RlLWhlbHBlciBjb21tYW5kICdvcHRpb24gJF9bMF0nIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiI7CisJcHJpbnQgeypTVERPVVR9ICJ1bnN1cHBvcnRlZFxuIjsKKwlyZXR1cm47Cit9CisKK3N1YiBmZXRjaF9td19yZXZpc2lvbnNfZm9yX3BhZ2UgeworCW15ICRwYWdlID0gc2hpZnQ7CisJbXkgJGlkID0gc2hpZnQ7CisJbXkgJGZldGNoX2Zyb20gPSBzaGlmdDsKKwlteSBAcGFnZV9yZXZzID0gKCk7CisJbXkgJHF1ZXJ5ID0geworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJcHJvcCA9PiAncmV2aXNpb25zJywKKwkJcnZwcm9wID0+ICdpZHMnLAorCQlydmRpciA9PiAnbmV3ZXInLAorCQlydnN0YXJ0aWQgPT4gJGZldGNoX2Zyb20sCisJCXJ2bGltaXQgPT4gNTAwLAorCQlwYWdlaWRzID0+ICRpZCwKKworCQkjIExldCBNZWRpYVdpa2kga25vdyB0aGF0IHdlIHN1cHBvcnQgdGhlIGxhdGVzdCBBUEkuCisJCWNvbnRpbnVlID0+ICcnLAorCX07CisKKwlteSAkcmV2bnVtID0gMDsKKwkjIEdldCA1MDAgcmV2aXNpb25zIGF0IGEgdGltZSBkdWUgdG8gdGhlIG1lZGlhd2lraSBhcGkgbGltaXQKKwl3aGlsZSAoMSkgeworCQlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisKKwkJIyBQYXJzZSBlYWNoIG9mIHRob3NlIDUwMCByZXZpc2lvbnMKKwkJZm9yZWFjaCBteSAkcmV2aXNpb24gKEB7JHJlc3VsdC0+e3F1ZXJ5fS0+e3BhZ2VzfS0+eyRpZH0tPntyZXZpc2lvbnN9fSkgeworCQkJbXkgJHBhZ2VfcmV2X2lkczsKKwkJCSRwYWdlX3Jldl9pZHMtPntwYWdlaWR9ID0gJHBhZ2UtPntwYWdlaWR9OworCQkJJHBhZ2VfcmV2X2lkcy0+e3JldmlkfSA9ICRyZXZpc2lvbi0+e3JldmlkfTsKKwkJCXB1c2goQHBhZ2VfcmV2cywgJHBhZ2VfcmV2X2lkcyk7CisJCQkkcmV2bnVtKys7CisJCX0KKworCQlpZiAoJHJlc3VsdC0+eydxdWVyeS1jb250aW51ZSd9KSB7ICMgRm9yIGxlZ2FjeSBBUElzCisJCQkkcXVlcnktPntydnN0YXJ0aWR9ID0gJHJlc3VsdC0+eydxdWVyeS1jb250aW51ZSd9LT57cmV2aXNpb25zfS0+e3J2c3RhcnRpZH07CisJCX0gZWxzaWYgKCRyZXN1bHQtPntjb250aW51ZX0pIHsgIyBGb3IgbmV3ZXIgQVBJcworCQkJJHF1ZXJ5LT57cnZzdGFydGlkfSA9ICRyZXN1bHQtPntjb250aW51ZX0tPntydmNvbnRpbnVlfTsKKwkJCSRxdWVyeS0+e2NvbnRpbnVlfSA9ICRyZXN1bHQtPntjb250aW51ZX0tPntjb250aW51ZX07CisJCX0gZWxzZSB7CisJCQlsYXN0OworCQl9CisJfQorCWlmICgkc2hhbGxvd19pbXBvcnQgJiYgQHBhZ2VfcmV2cykgeworCQlwcmludCB7KlNUREVSUn0gIiAgRm91bmQgMSByZXZpc2lvbiAoc2hhbGxvdyBpbXBvcnQpLlxuIjsKKwkJQHBhZ2VfcmV2cyA9IHNvcnQgeyRiLT57cmV2aWR9IDw9PiAkYS0+e3JldmlkfX0gKEBwYWdlX3JldnMpOworCQlyZXR1cm4gJHBhZ2VfcmV2c1swXTsKKwl9CisJcHJpbnQgeypTVERFUlJ9ICIgIEZvdW5kICR7cmV2bnVtfSByZXZpc2lvbihzKS5cbiI7CisJcmV0dXJuIEBwYWdlX3JldnM7Cit9CisKK3N1YiBmZXRjaF9td19yZXZpc2lvbnMgeworCW15ICRwYWdlcyA9IHNoaWZ0OyBteSBAcGFnZXMgPSBAeyRwYWdlc307CisJbXkgJGZldGNoX2Zyb20gPSBzaGlmdDsKKworCW15IEByZXZpc2lvbnMgPSAoKTsKKwlteSAkbiA9IDE7CisJZm9yZWFjaCBteSAkcGFnZSAoQHBhZ2VzKSB7CisJCW15ICRpZCA9ICRwYWdlLT57cGFnZWlkfTsKKwkJcHJpbnQgeypTVERFUlJ9ICJwYWdlICR7bn0vIiwgc2NhbGFyKEBwYWdlcyksICc6ICcsICRwYWdlLT57dGl0bGV9LCAiXG4iOworCQkkbisrOworCQlteSBAcGFnZV9yZXZzID0gZmV0Y2hfbXdfcmV2aXNpb25zX2Zvcl9wYWdlKCRwYWdlLCAkaWQsICRmZXRjaF9mcm9tKTsKKwkJQHJldmlzaW9ucyA9IChAcGFnZV9yZXZzLCBAcmV2aXNpb25zKTsKKwl9CisKKwlyZXR1cm4gKCRuLCBAcmV2aXNpb25zKTsKK30KKworc3ViIGZlX2VzY2FwZV9wYXRoIHsKKyAgICBteSAkcGF0aCA9IHNoaWZ0OworICAgICRwYXRoID1+IHMvXFwvXFxcXC9nOworICAgICRwYXRoID1+IHMvIi9cXCIvZzsKKyAgICAkcGF0aCA9fiBzL1xuL1xcbi9nOworICAgIHJldHVybiBxcSgiJHtwYXRofSIpOworfQorCitzdWIgaW1wb3J0X2ZpbGVfcmV2aXNpb24geworCW15ICRjb21taXQgPSBzaGlmdDsKKwlteSAlY29tbWl0ID0gJXskY29tbWl0fTsKKwlteSAkZnVsbF9pbXBvcnQgPSBzaGlmdDsKKwlteSAkbiA9IHNoaWZ0OworCW15ICRtZWRpYWZpbGUgPSBzaGlmdDsKKwlteSAlbWVkaWFmaWxlOworCWlmICgkbWVkaWFmaWxlKSB7CisJCSVtZWRpYWZpbGUgPSAleyRtZWRpYWZpbGV9OworCX0KKworCW15ICR0aXRsZSA9ICRjb21taXR7dGl0bGV9OworCW15ICRjb21tZW50ID0gJGNvbW1pdHtjb21tZW50fTsKKwlteSAkY29udGVudCA9ICRjb21taXR7Y29udGVudH07CisJbXkgJGF1dGhvciA9ICRjb21taXR7YXV0aG9yfTsKKwlteSAkZGF0ZSA9ICRjb21taXR7ZGF0ZX07CisKKwlwcmludCB7KlNURE9VVH0gImNvbW1pdCByZWZzL21lZGlhd2lraS8ke3JlbW90ZW5hbWV9L21hc3RlclxuIjsKKwlwcmludCB7KlNURE9VVH0gIm1hcmsgOiR7bn1cbiI7CisJcHJpbnQgeypTVERPVVR9ICJjb21taXR0ZXIgJHthdXRob3J9IDwke2F1dGhvcn1cQCR7d2lraV9uYW1lfT4gIiAuICRkYXRlLT5lcG9jaCAuICIgKzAwMDBcbiI7CisJbGl0ZXJhbF9kYXRhKCRjb21tZW50KTsKKworCSMgSWYgaXQncyBub3QgYSBjbG9uZSwgd2UgbmVlZCB0byBrbm93IHdoZXJlIHRvIHN0YXJ0IGZyb20KKwlpZiAoISRmdWxsX2ltcG9ydCAmJiAkbiA9PSAxKSB7CisJCXByaW50IHsqU1RET1VUfSAiZnJvbSByZWZzL21lZGlhd2lraS8ke3JlbW90ZW5hbWV9L21hc3Rlcl4wXG4iOworCX0KKwlpZiAoJGNvbnRlbnQgbmUgREVMRVRFRF9DT05URU5UKSB7CisJCXByaW50IHsqU1RET1VUfSAnTSA2NDQgaW5saW5lICcgLgorCQkgICAgZmVfZXNjYXBlX3BhdGgoIiR7dGl0bGV9Lm13IikgLiAiXG4iOworCQlsaXRlcmFsX2RhdGEoJGNvbnRlbnQpOworCQlpZiAoJW1lZGlhZmlsZSkgeworCQkJcHJpbnQgeypTVERPVVR9ICdNIDY0NCBpbmxpbmUgJworCQkJICAgIC4gZmVfZXNjYXBlX3BhdGgoJG1lZGlhZmlsZXt0aXRsZX0pIC4gIlxuIjsKKwkJCWxpdGVyYWxfZGF0YV9yYXcoJG1lZGlhZmlsZXtjb250ZW50fSk7CisJCX0KKwkJcHJpbnQgeypTVERPVVR9ICJcblxuIjsKKwl9IGVsc2UgeworCQlwcmludCB7KlNURE9VVH0gJ0QgJyAuIGZlX2VzY2FwZV9wYXRoKCIke3RpdGxlfS5tdyIpIC4gIlxuIjsKKwl9CisKKwkjIG1lZGlhd2lraSByZXZpc2lvbiBudW1iZXIgaW4gdGhlIGdpdCBub3RlCisJaWYgKCRmdWxsX2ltcG9ydCAmJiAkbiA9PSAxKSB7CisJCXByaW50IHsqU1RET1VUfSAicmVzZXQgcmVmcy9ub3Rlcy8ke3JlbW90ZW5hbWV9L21lZGlhd2lraVxuIjsKKwl9CisJcHJpbnQgeypTVERPVVR9ICJjb21taXQgcmVmcy9ub3Rlcy8ke3JlbW90ZW5hbWV9L21lZGlhd2lraVxuIjsKKwlwcmludCB7KlNURE9VVH0gImNvbW1pdHRlciAke2F1dGhvcn0gPCR7YXV0aG9yfVxAJHt3aWtpX25hbWV9PiAiIC4gJGRhdGUtPmVwb2NoIC4gIiArMDAwMFxuIjsKKwlsaXRlcmFsX2RhdGEoJ05vdGUgYWRkZWQgYnkgZ2l0LW1lZGlhd2lraSBkdXJpbmcgaW1wb3J0Jyk7CisJaWYgKCEkZnVsbF9pbXBvcnQgJiYgJG4gPT0gMSkgeworCQlwcmludCB7KlNURE9VVH0gImZyb20gcmVmcy9ub3Rlcy8ke3JlbW90ZW5hbWV9L21lZGlhd2lraV4wXG4iOworCX0KKwlwcmludCB7KlNURE9VVH0gIk4gaW5saW5lIDoke259XG4iOworCWxpdGVyYWxfZGF0YSgibWVkaWF3aWtpX3JldmlzaW9uOiAkY29tbWl0e213X3JldmlzaW9ufSIpOworCXByaW50IHsqU1RET1VUfSAiXG5cbiI7CisJcmV0dXJuOworfQorCisjIHBhcnNlIGEgc2VxdWVuY2Ugb2YKKyMgPGNtZD4gPGFyZzE+CisjIDxjbWQ+IDxhcmcyPgorIyBcbgorIyAobGlrZSBiYXRjaCBzZXF1ZW5jZSBvZiBpbXBvcnQgYW5kIHNlcXVlbmNlIG9mIHB1c2ggc3RhdGVtZW50cykKK3N1YiBnZXRfbW9yZV9yZWZzIHsKKwlteSAkY21kID0gc2hpZnQ7CisJbXkgQHJlZnM7CisJd2hpbGUgKDEpIHsKKwkJbXkgJGxpbmUgPSA8U1RESU4+OworCQlpZiAoJGxpbmUgPX4gL14kY21kICguKikkLykgeworCQkJcHVzaChAcmVmcywgJDEpOworCQl9IGVsc2lmICgkbGluZSBlcSAiXG4iKSB7CisJCQlyZXR1cm4gQHJlZnM7CisJCX0gZWxzZSB7CisJCQlkaWUoIkludmFsaWQgY29tbWFuZCBpbiBhICckY21kJyBiYXRjaDogJF9cbiIpOworCQl9CisJfQorCXJldHVybjsKK30KKworc3ViIG13X2ltcG9ydCB7CisJIyBtdWx0aXBsZSBpbXBvcnQgY29tbWFuZHMgY2FuIGZvbGxvdyBlYWNoIG90aGVyLgorCW15IEByZWZzID0gKHNoaWZ0LCBnZXRfbW9yZV9yZWZzKCdpbXBvcnQnKSk7CisJZm9yZWFjaCBteSAkcmVmIChAcmVmcykgeworCQltd19pbXBvcnRfcmVmKCRyZWYpOworCX0KKwlwcmludCB7KlNURE9VVH0gImRvbmVcbiI7CisJcmV0dXJuOworfQorCitzdWIgbXdfaW1wb3J0X3JlZiB7CisJbXkgJHJlZiA9IHNoaWZ0OworCSMgVGhlIHJlbW90ZSBoZWxwZXIgd2lsbCBjYWxsICJpbXBvcnQgSEVBRCIgYW5kCisJIyAiaW1wb3J0IHJlZnMvaGVhZHMvbWFzdGVyIi4KKwkjIFNpbmNlIEhFQUQgaXMgYSBzeW1ib2xpYyByZWYgdG8gbWFzdGVyIChieSBjb252ZW50aW9uLAorCSMgZm9sbG93ZWQgYnkgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCAibGlzdCIgdGhhdCB3ZSBnYXZlKSwKKwkjIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaW4gdGhpcyBjYXNlLgorCWlmICgkcmVmIGVxICdIRUFEJykgeworCQlyZXR1cm47CisJfQorCisJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCisJcHJpbnQgeypTVERFUlJ9ICJTZWFyY2hpbmcgcmV2aXNpb25zLi4uXG4iOworCW15ICRsYXN0X2xvY2FsID0gZ2V0X2xhc3RfbG9jYWxfcmV2aXNpb24oKTsKKwlteSAkZmV0Y2hfZnJvbSA9ICRsYXN0X2xvY2FsICsgMTsKKwlpZiAoJGZldGNoX2Zyb20gPT0gMSkgeworCQlwcmludCB7KlNUREVSUn0gIiwgZmV0Y2hpbmcgZnJvbSBiZWdpbm5pbmcuXG4iOworCX0gZWxzZSB7CisJCXByaW50IHsqU1RERVJSfSAiLCBmZXRjaGluZyBmcm9tIGhlcmUuXG4iOworCX0KKworCW15ICRuID0gMDsKKwlpZiAoJGZldGNoX3N0cmF0ZWd5IGVxICdieV9yZXYnKSB7CisJCXByaW50IHsqU1RERVJSfSAiRmV0Y2hpbmcgJiB3cml0aW5nIGV4cG9ydCBkYXRhIGJ5IHJldnMuLi5cbiI7CisJCSRuID0gbXdfaW1wb3J0X3JlZl9ieV9yZXZzKCRmZXRjaF9mcm9tKTsKKwl9IGVsc2lmICgkZmV0Y2hfc3RyYXRlZ3kgZXEgJ2J5X3BhZ2UnKSB7CisJCXByaW50IHsqU1RERVJSfSAiRmV0Y2hpbmcgJiB3cml0aW5nIGV4cG9ydCBkYXRhIGJ5IHBhZ2VzLi4uXG4iOworCQkkbiA9IG13X2ltcG9ydF9yZWZfYnlfcGFnZXMoJGZldGNoX2Zyb20pOworCX0gZWxzZSB7CisJCXByaW50IHsqU1RERVJSfSBxcShmYXRhbDogaW52YWxpZCBmZXRjaCBzdHJhdGVneSAiJHtmZXRjaF9zdHJhdGVneX0iLlxuKTsKKwkJcHJpbnQgeypTVERFUlJ9ICJDaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHJlbW90ZS4ke3JlbW90ZW5hbWV9LmZldGNoU3RyYXRlZ3kgYW5kIG1lZGlhd2lraS5mZXRjaFN0cmF0ZWd5XG4iOworCQlleGl0IDE7CisJfQorCisJaWYgKCRmZXRjaF9mcm9tID09IDEgJiYgJG4gPT0gMCkgeworCQlwcmludCB7KlNUREVSUn0gIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgTWVkaWFXaWtpLlxuIjsKKwkJIyBTb21ldGhpbmcgaGFzIHRvIGJlIGRvbmUgcmVtb3RlLWhlbHBlciBzaWRlLiBJZiBub3RoaW5nIGlzIGRvbmUsIGFuIGVycm9yIGlzCisJCSMgdGhyb3duIHNheWluZyB0aGF0IEhFQUQgaXMgcmVmZXJyaW5nIHRvIHVua25vd24gb2JqZWN0IDAwMDAwMDAwMDAwMDAwMDAwMDAKKwkJIyBhbmQgdGhlIGNsb25lIGZhaWxzLgorCX0KKwlyZXR1cm47Cit9CisKK3N1YiBtd19pbXBvcnRfcmVmX2J5X3BhZ2VzIHsKKworCW15ICRmZXRjaF9mcm9tID0gc2hpZnQ7CisJbXkgJXBhZ2VzX2hhc2ggPSBnZXRfbXdfcGFnZXMoKTsKKwlteSBAcGFnZXMgPSB2YWx1ZXMoJXBhZ2VzX2hhc2gpOworCisJbXkgKCRuLCBAcmV2aXNpb25zKSA9IGZldGNoX213X3JldmlzaW9ucyhcQHBhZ2VzLCAkZmV0Y2hfZnJvbSk7CisKKwlAcmV2aXNpb25zID0gc29ydCB7JGEtPntyZXZpZH0gPD0+ICRiLT57cmV2aWR9fSBAcmV2aXNpb25zOworCW15IEByZXZpc2lvbl9pZHMgPSBtYXAgeyAkXy0+e3JldmlkfSB9IEByZXZpc2lvbnM7CisKKwlyZXR1cm4gbXdfaW1wb3J0X3JldmlkcygkZmV0Y2hfZnJvbSwgXEByZXZpc2lvbl9pZHMsIFwlcGFnZXNfaGFzaCk7Cit9CisKK3N1YiBtd19pbXBvcnRfcmVmX2J5X3JldnMgeworCisJbXkgJGZldGNoX2Zyb20gPSBzaGlmdDsKKwlteSAlcGFnZXNfaGFzaCA9IGdldF9td19wYWdlcygpOworCisJbXkgJGxhc3RfcmVtb3RlID0gZ2V0X2xhc3RfZ2xvYmFsX3JlbW90ZV9yZXYoKTsKKwlteSBAcmV2aXNpb25faWRzID0gJGZldGNoX2Zyb20uLiRsYXN0X3JlbW90ZTsKKwlyZXR1cm4gbXdfaW1wb3J0X3JldmlkcygkZmV0Y2hfZnJvbSwgXEByZXZpc2lvbl9pZHMsIFwlcGFnZXNfaGFzaCk7Cit9CisKKyMgSW1wb3J0IHJldmlzaW9ucyBnaXZlbiBpbiBzZWNvbmQgYXJndW1lbnQgKGFycmF5IG9mIGludGVnZXJzKS4KKyMgT25seSBwYWdlcyBhcHBlYXJpbmcgaW4gdGhlIHRoaXJkIGFyZ3VtZW50IChoYXNoIGluZGV4ZWQgYnkgcGFnZSB0aXRsZXMpCisjIHdpbGwgYmUgaW1wb3J0ZWQuCitzdWIgbXdfaW1wb3J0X3JldmlkcyB7CisJbXkgJGZldGNoX2Zyb20gPSBzaGlmdDsKKwlteSAkcmV2aXNpb25faWRzID0gc2hpZnQ7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisKKwlteSAkbiA9IDA7CisJbXkgJG5fYWN0dWFsID0gMDsKKwlteSAkbGFzdF90aW1lc3RhbXAgPSAwOyAjIFBsYWNlaG9sZGVyIGluIGNhc2UgJHJldi0+dGltZXN0YW1wIGlzIHVuZGVmaW5lZAorCisJZm9yZWFjaCBteSAkcGFnZXJldmlkIChAeyRyZXZpc2lvbl9pZHN9KSB7CisJICAgICAgICAjIENvdW50IHBhZ2UgZXZlbiBpZiB3ZSBza2lwIGl0LCBzaW5jZSB3ZSBkaXNwbGF5CisJCSMgJG4vJHRvdGFsIGFuZCAkdG90YWwgaW5jbHVkZXMgc2tpcHBlZCBwYWdlcy4KKwkJJG4rKzsKKworCQkjIGZldGNoIHRoZSBjb250ZW50IG9mIHRoZSBwYWdlcworCQlteSAkcXVlcnkgPSB7CisJCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJCXByb3AgPT4gJ3JldmlzaW9ucycsCisJCQlydnByb3AgPT4gJ2NvbnRlbnR8dGltZXN0YW1wfGNvbW1lbnR8dXNlcnxpZHMnLAorCQkJcmV2aWRzID0+ICRwYWdlcmV2aWQsCisJCX07CisKKwkJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCisJCWlmICghJHJlc3VsdCkgeworCQkJZGllICJGYWlsZWQgdG8gcmV0cmlldmUgbW9kaWZpZWQgcGFnZSBmb3IgcmV2aXNpb24gJHBhZ2VyZXZpZFxuIjsKKwkJfQorCisJCWlmIChkZWZpbmVkKCRyZXN1bHQtPntxdWVyeX0tPntiYWRyZXZpZHN9LT57JHBhZ2VyZXZpZH0pKSB7CisJCQkjIFRoZSByZXZpc2lvbiBpZCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgcmVtb3RlIHdpa2kuCisJCQluZXh0OworCQl9CisKKwkJaWYgKCFkZWZpbmVkKCRyZXN1bHQtPntxdWVyeX0tPntwYWdlc30pKSB7CisJCQlkaWUgIkludmFsaWQgcmV2aXNpb24gJHtwYWdlcmV2aWR9LlxuIjsKKwkJfQorCisJCW15IEByZXN1bHRfcGFnZXMgPSB2YWx1ZXMoJXskcmVzdWx0LT57cXVlcnl9LT57cGFnZXN9fSk7CisJCW15ICRyZXN1bHRfcGFnZSA9ICRyZXN1bHRfcGFnZXNbMF07CisJCW15ICRyZXYgPSAkcmVzdWx0X3BhZ2VzWzBdLT57cmV2aXNpb25zfS0+WzBdOworCisJCW15ICRwYWdlX3RpdGxlID0gJHJlc3VsdF9wYWdlLT57dGl0bGV9OworCisJCWlmICghZXhpc3RzKCRwYWdlcy0+eyRwYWdlX3RpdGxlfSkpIHsKKwkJCXByaW50IHsqU1RERVJSfSAiJHtufS8iLCBzY2FsYXIoQHskcmV2aXNpb25faWRzfSksCisJCQkJIjogU2tpcHBpbmcgcmV2aXNpb24gIyRyZXYtPntyZXZpZH0gb2YgJHtwYWdlX3RpdGxlfVxuIjsKKwkJCW5leHQ7CisJCX0KKworCQkkbl9hY3R1YWwrKzsKKworCQlteSAlY29tbWl0OworCQkkY29tbWl0e2F1dGhvcn0gPSAkcmV2LT57dXNlcn0gfHwgJ0Fub255bW91cyc7CisJCSRjb21taXR7Y29tbWVudH0gPSAkcmV2LT57Y29tbWVudH0gfHwgRU1QVFlfTUVTU0FHRTsKKwkJJGNvbW1pdHt0aXRsZX0gPSBzbXVkZ2VfZmlsZW5hbWUoJHBhZ2VfdGl0bGUpOworCQkkY29tbWl0e213X3JldmlzaW9ufSA9ICRyZXYtPntyZXZpZH07CisJCSRjb21taXR7Y29udGVudH0gPSBtZWRpYXdpa2lfc211ZGdlKCRyZXYtPnsnKid9KTsKKworCQlpZiAoIWRlZmluZWQoJHJldi0+e3RpbWVzdGFtcH0pKSB7CisJCQkkbGFzdF90aW1lc3RhbXArKzsKKwkJfSBlbHNlIHsKKwkJCSRsYXN0X3RpbWVzdGFtcCA9ICRyZXYtPnt0aW1lc3RhbXB9OworCQl9CisJCSRjb21taXR7ZGF0ZX0gPSBEYXRlVGltZTo6Rm9ybWF0OjpJU084NjAxLT5wYXJzZV9kYXRldGltZSgkbGFzdF90aW1lc3RhbXApOworCisJCSMgRGlmZmVyZW50aWF0ZXMgY2xhc3NpYyBwYWdlcyBhbmQgbWVkaWEgZmlsZXMuCisJCW15ICgkbmFtZXNwYWNlLCAkZmlsZW5hbWUpID0gJHBhZ2VfdGl0bGUgPX4gL14oW146XSopOiguKikkLzsKKwkJbXkgJW1lZGlhZmlsZTsKKwkJaWYgKCRuYW1lc3BhY2UpIHsKKwkJCW15ICRpZCA9IGdldF9td19uYW1lc3BhY2VfaWQoJG5hbWVzcGFjZSk7CisJCQlpZiAoJGlkICYmICRpZCA9PSBnZXRfbXdfbmFtZXNwYWNlX2lkKCdGaWxlJykpIHsKKwkJCQklbWVkaWFmaWxlID0gZ2V0X213X21lZGlhZmlsZV9mb3JfcGFnZV9yZXZpc2lvbigkZmlsZW5hbWUsICRyZXYtPnt0aW1lc3RhbXB9KTsKKwkJCX0KKwkJfQorCQkjIElmIHRoaXMgaXMgYSByZXZpc2lvbiBvZiB0aGUgbWVkaWEgcGFnZSBmb3IgbmV3IHZlcnNpb24KKwkJIyBvZiBhIGZpbGUgZG8gb25lIGNvbW1vbiBjb21taXQgZm9yIGJvdGggZmlsZSBhbmQgbWVkaWEgcGFnZS4KKwkJIyBFbHNlIGRvIGNvbW1pdCBvbmx5IGZvciB0aGF0IHBhZ2UuCisJCXByaW50IHsqU1RERVJSfSAiJHtufS8iLCBzY2FsYXIoQHskcmV2aXNpb25faWRzfSksICI6IFJldmlzaW9uICMkcmV2LT57cmV2aWR9IG9mICRjb21taXR7dGl0bGV9XG4iOworCQlpbXBvcnRfZmlsZV9yZXZpc2lvbihcJWNvbW1pdCwgKCRmZXRjaF9mcm9tID09IDEpLCAkbl9hY3R1YWwsIFwlbWVkaWFmaWxlKTsKKwl9CisKKwlyZXR1cm4gJG5fYWN0dWFsOworfQorCitzdWIgZXJyb3Jfbm9uX2Zhc3RfZm9yd2FyZCB7CisJbXkgJGFkdmljZSA9IHJ1bl9naXQoJ2NvbmZpZyAtLWJvb2wgYWR2aWNlLnB1c2hOb25GYXN0Rm9yd2FyZCcpOworCWNob21wKCRhZHZpY2UpOworCWlmICgkYWR2aWNlIG5lICdmYWxzZScpIHsKKwkJIyBOYXRpdmUgZ2l0LXB1c2ggd291bGQgc2hvdyB0aGlzIGFmdGVyIHRoZSBzdW1tYXJ5LgorCQkjIFdlIGNhbid0IGFzayBpdCB0byBkaXNwbGF5IGl0IGNsZWFubHksIHNvIHByaW50IGl0CisJCSMgb3Vyc2VsdmVzIGJlZm9yZS4KKwkJcHJpbnQgeypTVERFUlJ9ICJUbyBwcmV2ZW50IHlvdSBmcm9tIGxvc2luZyBoaXN0b3J5LCBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMgd2VyZSByZWplY3RlZFxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJNZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy4gJ2dpdCBwdWxsJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uIFNlZSB0aGVcbiI7CisJCXByaW50IHsqU1RERVJSfSAiJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgc2VjdGlvbiBvZiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy5cbiI7CisJfQorCXByaW50IHsqU1RET1VUfSBxcShlcnJvciAkX1swXSAibm9uLWZhc3QtZm9yd2FyZCJcbik7CisJcmV0dXJuIDA7Cit9CisKK3N1YiBtd191cGxvYWRfZmlsZSB7CisJbXkgJGNvbXBsZXRlX2ZpbGVfbmFtZSA9IHNoaWZ0OworCW15ICRuZXdfc2hhMSA9IHNoaWZ0OworCW15ICRleHRlbnNpb24gPSBzaGlmdDsKKwlteSAkZmlsZV9kZWxldGVkID0gc2hpZnQ7CisJbXkgJHN1bW1hcnkgPSBzaGlmdDsKKwlteSAkbmV3cmV2aWQ7CisJbXkgJHBhdGggPSAiRmlsZToke2NvbXBsZXRlX2ZpbGVfbmFtZX0iOworCW15ICVoYXNoRmlsZXMgPSBnZXRfYWxsb3dlZF9maWxlX2V4dGVuc2lvbnMoKTsKKwlpZiAoIWV4aXN0cygkaGFzaEZpbGVzeyRleHRlbnNpb259KSkgeworCQlwcmludCB7KlNUREVSUn0gIiR7Y29tcGxldGVfZmlsZV9uYW1lfSBpcyBub3QgYSBwZXJtaXR0ZWQgZmlsZSBvbiB0aGlzIHdpa2kuXG4iOworCQlwcmludCB7KlNUREVSUn0gIkNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGZpbGUgdXBsb2FkcyBpbiB5b3VyIG1lZGlhd2lraS5cbiI7CisJCXJldHVybiAkbmV3cmV2aWQ7CisJfQorCSMgRGVsZXRpbmcgYW5kIHVwbG9hZGluZyBhIGZpbGUgcmVxdWlyZXMgYSBwcml2aWxlZ2VkIHVzZXIKKwlpZiAoJGZpbGVfZGVsZXRlZCkgeworCQkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisJCW15ICRxdWVyeSA9IHsKKwkJCWFjdGlvbiA9PiAnZGVsZXRlJywKKwkJCXRpdGxlID0+ICRwYXRoLAorCQkJcmVhc29uID0+ICRzdW1tYXJ5CisJCX07CisJCWlmICghJG1lZGlhd2lraS0+ZWRpdCgkcXVlcnkpKSB7CisJCQlwcmludCB7KlNUREVSUn0gIkZhaWxlZCB0byBkZWxldGUgZmlsZSBvbiByZW1vdGUgd2lraVxuIjsKKwkJCXByaW50IHsqU1RERVJSfSAiQ2hlY2sgeW91ciBwZXJtaXNzaW9ucyBvbiB0aGUgcmVtb3RlIHNpdGUuIEVycm9yIGNvZGU6XG4iOworCQkJcHJpbnQgeypTVERFUlJ9ICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuICc6JyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfTsKKwkJCWV4aXQgMTsKKwkJfQorCX0gZWxzZSB7CisJCSMgRG9uJ3QgbGV0IHBlcmwgdHJ5IHRvIGludGVycHJldCBmaWxlIGNvbnRlbnQgYXMgVVRGLTggPT4gdXNlICJyYXciCisJCW15ICRjb250ZW50ID0gcnVuX2dpdCgiY2F0LWZpbGUgYmxvYiAke25ld19zaGExfSIsICdyYXcnKTsKKwkJaWYgKCRjb250ZW50IG5lIEVNUFRZKSB7CisJCQkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisJCQkkbWVkaWF3aWtpLT57Y29uZmlnfS0+e3VwbG9hZF91cmx9ID0KKwkJCQkiJHt1cmx9L2luZGV4LnBocC9TcGVjaWFsOlVwbG9hZCI7CisJCQkkbWVkaWF3aWtpLT5lZGl0KHsKKwkJCQlhY3Rpb24gPT4gJ3VwbG9hZCcsCisJCQkJZmlsZW5hbWUgPT4gJGNvbXBsZXRlX2ZpbGVfbmFtZSwKKwkJCQljb21tZW50ID0+ICRzdW1tYXJ5LAorCQkJCWZpbGUgPT4gW3VuZGVmLAorCQkJCQkgJGNvbXBsZXRlX2ZpbGVfbmFtZSwKKwkJCQkJIENvbnRlbnQgPT4gJGNvbnRlbnRdLAorCQkJCWlnbm9yZXdhcm5pbmdzID0+IDEsCisJCQl9LCB7CisJCQkJc2tpcF9lbmNvZGluZyA9PiAxCisJCQl9ICkgfHwgZGllICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuICc6JworCQkJCSAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICJcbiI7CisJCQlteSAkbGFzdF9maWxlX3BhZ2UgPSAkbWVkaWF3aWtpLT5nZXRfcGFnZSh7dGl0bGUgPT4gJHBhdGh9KTsKKwkJCSRuZXdyZXZpZCA9ICRsYXN0X2ZpbGVfcGFnZS0+e3JldmlkfTsKKwkJCXByaW50IHsqU1RERVJSfSAiUHVzaGVkIGZpbGU6ICR7bmV3X3NoYTF9IC0gJHtjb21wbGV0ZV9maWxlX25hbWV9LlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50IHsqU1RERVJSfSAiRW1wdHkgZmlsZSAke2NvbXBsZXRlX2ZpbGVfbmFtZX0gbm90IHB1c2hlZC5cbiI7CisJCX0KKwl9CisJcmV0dXJuICRuZXdyZXZpZDsKK30KKworc3ViIG13X3B1c2hfZmlsZSB7CisJbXkgJGRpZmZfaW5mbyA9IHNoaWZ0OworCSMgJGRpZmZfaW5mbyBjb250YWlucyBhIHN0cmluZyBpbiB0aGlzIGZvcm1hdDoKKwkjIDEwMDY0NCAxMDA2NDQgPHNoYTFfb2ZfYmxvYl9iZWZvcmVfY29tbWl0PiA8c2hhMV9vZl9ibG9iX25vdz4gPHN0YXR1cz4KKwlteSBAZGlmZl9pbmZvX3NwbGl0ID0gc3BsaXQoL1sgXHRdLywgJGRpZmZfaW5mbyk7CisKKwkjIEZpbGVuYW1lLCBpbmNsdWRpbmcgLm13IGV4dGVuc2lvbgorCW15ICRjb21wbGV0ZV9maWxlX25hbWUgPSBzaGlmdDsKKwkjIENvbW1pdCBtZXNzYWdlCisJbXkgJHN1bW1hcnkgPSBzaGlmdDsKKwkjIE1lZGlhV2lraSByZXZpc2lvbiBudW1iZXIuIEtlZXAgdGhlIHByZXZpb3VzIG9uZSBieSBkZWZhdWx0LAorCSMgaW4gY2FzZSB0aGVyZSdzIG5vIGVkaXQgdG8gcGVyZm9ybS4KKwlteSAkb2xkcmV2aWQgPSBzaGlmdDsKKwlteSAkbmV3cmV2aWQ7CisKKwlpZiAoJHN1bW1hcnkgZXEgRU1QVFlfTUVTU0FHRSkgeworCQkkc3VtbWFyeSA9IEVNUFRZOworCX0KKworCW15ICRuZXdfc2hhMSA9ICRkaWZmX2luZm9fc3BsaXRbM107CisJbXkgJG9sZF9zaGExID0gJGRpZmZfaW5mb19zcGxpdFsyXTsKKwlteSAkcGFnZV9jcmVhdGVkID0gKCRvbGRfc2hhMSBlcSBOVUxMX1NIQTEpOworCW15ICRwYWdlX2RlbGV0ZWQgPSAoJG5ld19zaGExIGVxIE5VTExfU0hBMSk7CisJJGNvbXBsZXRlX2ZpbGVfbmFtZSA9IGNsZWFuX2ZpbGVuYW1lKCRjb21wbGV0ZV9maWxlX25hbWUpOworCisJbXkgKCR0aXRsZSwgJGV4dGVuc2lvbikgPSAkY29tcGxldGVfZmlsZV9uYW1lID1+IC9eKC4qKVwuKFteXC5dKikkLzsKKwlpZiAoIWRlZmluZWQoJGV4dGVuc2lvbikpIHsKKwkJJGV4dGVuc2lvbiA9IEVNUFRZOworCX0KKwlpZiAoJGV4dGVuc2lvbiBlcSAnbXcnKSB7CisJCW15ICRucyA9IGdldF9td19uYW1lc3BhY2VfaWRfZm9yX3BhZ2UoJGNvbXBsZXRlX2ZpbGVfbmFtZSk7CisJCWlmICgkbnMgJiYgJG5zID09IGdldF9td19uYW1lc3BhY2VfaWQoJ0ZpbGUnKSAmJiAoISRleHBvcnRfbWVkaWEpKSB7CisJCQlwcmludCB7KlNUREVSUn0gIklnbm9yaW5nIG1lZGlhIGZpbGUgcmVsYXRlZCBwYWdlOiAke2NvbXBsZXRlX2ZpbGVfbmFtZX1cbiI7CisJCQlyZXR1cm4gKCRvbGRyZXZpZCwgJ29rJyk7CisJCX0KKwkJbXkgJGZpbGVfY29udGVudDsKKwkJaWYgKCRwYWdlX2RlbGV0ZWQpIHsKKwkJCSMgRGVsZXRpbmcgYSBwYWdlIHVzdWFsbHkgcmVxdWlyZXMKKwkJCSMgc3BlY2lhbCBwcml2aWxlZ2VzLiBBIGNvbW1vbgorCQkJIyBjb252ZW50aW9uIGlzIHRvIHJlcGxhY2UgdGhlIHBhZ2UKKwkJCSMgd2l0aCB0aGlzIGNvbnRlbnQgaW5zdGVhZDoKKwkJCSRmaWxlX2NvbnRlbnQgPSBERUxFVEVEX0NPTlRFTlQ7CisJCX0gZWxzZSB7CisJCQkkZmlsZV9jb250ZW50ID0gcnVuX2dpdCgiY2F0LWZpbGUgYmxvYiAke25ld19zaGExfSIpOworCQl9CisKKwkJJG1lZGlhd2lraSA9IGNvbm5lY3RfbWF5YmUoJG1lZGlhd2lraSwgJHJlbW90ZW5hbWUsICR1cmwpOworCisJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5lZGl0KCB7CisJCQlhY3Rpb24gPT4gJ2VkaXQnLAorCQkJc3VtbWFyeSA9PiAkc3VtbWFyeSwKKwkJCXRpdGxlID0+ICR0aXRsZSwKKwkJCWJhc2V0aW1lc3RhbXAgPT4gJGJhc2V0aW1lc3RhbXBzeyRvbGRyZXZpZH0sCisJCQl0ZXh0ID0+IG1lZGlhd2lraV9jbGVhbigkZmlsZV9jb250ZW50LCAkcGFnZV9jcmVhdGVkKSwKKwkJCQkgIH0sIHsKKwkJCQkJICBza2lwX2VuY29kaW5nID0+IDEgIyBIZWxwcyB3aXRoIG5hbWVzIHdpdGggYWNjZW50dWF0ZWQgY2hhcmFjdGVycworCQkJCSAgfSk7CisJCWlmICghJHJlc3VsdCkgeworCQkJaWYgKCRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSA9PSAzKSB7CisJCQkJIyBlZGl0IGNvbmZsaWN0cywgY29uc2lkZXJlZCBhcyBub24tZmFzdC1mb3J3YXJkCisJCQkJcHJpbnQgeypTVERFUlJ9ICdXYXJuaW5nOiBFcnJvciAnIC4KKwkJCQkgICAgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4KKwkJCQkgICAgJyBmcm9tIG1lZGlhd2lraTogJyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuCisJCQkJICAgICIuXG4iOworCQkJCXJldHVybiAoJG9sZHJldmlkLCAnbm9uLWZhc3QtZm9yd2FyZCcpOworCQkJfSBlbHNlIHsKKwkJCQkjIE90aGVyIGVycm9ycy4gU2hvdWxkbid0IGhhcHBlbiA9PiBqdXN0IGRpZSgpCisJCQkJZGllICdGYXRhbDogRXJyb3IgJyAuCisJCQkJICAgICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuCisJCQkJICAgICcgZnJvbSBtZWRpYXdpa2k6ICcgLiAkbWVkaWF3aWtpLT57ZXJyb3J9LT57ZGV0YWlsc30gLiAiXG4iOworCQkJfQorCQl9CisJCSRuZXdyZXZpZCA9ICRyZXN1bHQtPntlZGl0fS0+e25ld3JldmlkfTsKKwkJcHJpbnQgeypTVERFUlJ9ICJQdXNoZWQgZmlsZTogJHtuZXdfc2hhMX0gLSAke3RpdGxlfVxuIjsKKwl9IGVsc2lmICgkZXhwb3J0X21lZGlhKSB7CisJCSRuZXdyZXZpZCA9IG13X3VwbG9hZF9maWxlKCRjb21wbGV0ZV9maWxlX25hbWUsICRuZXdfc2hhMSwKKwkJCQkJICAgJGV4dGVuc2lvbiwgJHBhZ2VfZGVsZXRlZCwKKwkJCQkJICAgJHN1bW1hcnkpOworCX0gZWxzZSB7CisJCXByaW50IHsqU1RERVJSfSAiSWdub3JpbmcgbWVkaWEgZmlsZSAke3RpdGxlfVxuIjsKKwl9CisJJG5ld3JldmlkID0gKCRuZXdyZXZpZCBvciAkb2xkcmV2aWQpOworCXJldHVybiAoJG5ld3JldmlkLCAnb2snKTsKK30KKworc3ViIG13X3B1c2ggeworCSMgbXVsdGlwbGUgcHVzaCBzdGF0ZW1lbnRzIGNhbiBmb2xsb3cgZWFjaCBvdGhlcgorCW15IEByZWZzc3BlY3MgPSAoc2hpZnQsIGdldF9tb3JlX3JlZnMoJ3B1c2gnKSk7CisJbXkgJHB1c2hlZDsKKwlmb3IgbXkgJHJlZnNwZWMgKEByZWZzc3BlY3MpIHsKKwkJbXkgKCRmb3JjZSwgJGxvY2FsLCAkcmVtb3RlKSA9ICRyZWZzcGVjID1+IC9eKFwrKT8oW146XSopOihbXjpdKikkLworCQkgICAgb3IgZGllKCJJbnZhbGlkIHJlZnNwZWMgZm9yIHB1c2guIEV4cGVjdGVkIDxzcmM+Ojxkc3Q+IG9yICs8c3JjPjo8ZHN0PlxuIik7CisJCWlmICgkZm9yY2UpIHsKKwkJCXByaW50IHsqU1RERVJSfSAiV2FybmluZzogZm9yY2VkIHB1c2ggbm90IGFsbG93ZWQgb24gYSBNZWRpYVdpa2kuXG4iOworCQl9CisJCWlmICgkbG9jYWwgZXEgRU1QVFkpIHsKKwkJCXByaW50IHsqU1RERVJSfSAiQ2Fubm90IGRlbGV0ZSByZW1vdGUgYnJhbmNoIG9uIGEgTWVkaWFXaWtpXG4iOworCQkJcHJpbnQgeypTVERPVVR9ICJlcnJvciAke3JlbW90ZX0gY2Fubm90IGRlbGV0ZVxuIjsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRyZW1vdGUgbmUgJ3JlZnMvaGVhZHMvbWFzdGVyJykgeworCQkJcHJpbnQgeypTVERFUlJ9ICJPbmx5IHB1c2ggdG8gdGhlIGJyYW5jaCAnbWFzdGVyJyBpcyBzdXBwb3J0ZWQgb24gYSBNZWRpYVdpa2lcbiI7CisJCQlwcmludCB7KlNURE9VVH0gImVycm9yICR7cmVtb3RlfSBvbmx5IG1hc3RlciBhbGxvd2VkXG4iOworCQkJbmV4dDsKKwkJfQorCQlpZiAobXdfcHVzaF9yZXZpc2lvbigkbG9jYWwsICRyZW1vdGUpKSB7CisJCQkkcHVzaGVkID0gMTsKKwkJfQorCX0KKworCSMgTm90aWZ5IEdpdCB0aGF0IHRoZSBwdXNoIGlzIGRvbmUKKwlwcmludCB7KlNURE9VVH0gIlxuIjsKKworCWlmICgkcHVzaGVkICYmICRkdW1iX3B1c2gpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJKdXN0IHB1c2hlZCBzb21lIHJldmlzaW9ucyB0byBNZWRpYVdpa2kuXG4iOworCQlwcmludCB7KlNUREVSUn0gIlRoZSBwdXNoZWQgcmV2aXNpb25zIG5vdyBoYXZlIHRvIGJlIHJlLWltcG9ydGVkLCBhbmQgeW91ciBjdXJyZW50IGJyYW5jaFxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJuZWVkcyB0byBiZSB1cGRhdGVkIHdpdGggdGhlc2UgcmUtaW1wb3J0ZWQgY29tbWl0cy4gWW91IGNhbiBkbyB0aGlzIHdpdGhcbiI7CisJCXByaW50IHsqU1RERVJSfSAiXG4iOworCQlwcmludCB7KlNUREVSUn0gIiAgZ2l0IHB1bGwgLS1yZWJhc2VcbiI7CisJCXByaW50IHsqU1RERVJSfSAiXG4iOworCX0KKwlyZXR1cm47Cit9CisKK3N1YiBtd19wdXNoX3JldmlzaW9uIHsKKwlteSAkbG9jYWwgPSBzaGlmdDsKKwlteSAkcmVtb3RlID0gc2hpZnQ7ICMgYWN0dWFsbHksIHRoaXMgaGFzIHRvIGJlICJyZWZzL2hlYWRzL21hc3RlciIgYXQgdGhpcyBwb2ludC4KKwlteSAkbGFzdF9sb2NhbF9yZXZpZCA9IGdldF9sYXN0X2xvY2FsX3JldmlzaW9uKCk7CisJcHJpbnQgeypTVERFUlJ9ICIuXG4iOyAjIEZpbmlzaCBzZW50ZW5jZSBzdGFydGVkIGJ5IGdldF9sYXN0X2xvY2FsX3JldmlzaW9uKCkKKwlteSAkbGFzdF9yZW1vdGVfcmV2aWQgPSBnZXRfbGFzdF9yZW1vdGVfcmV2aXNpb24oKTsKKwlteSAkbXdfcmV2aXNpb24gPSAkbGFzdF9yZW1vdGVfcmV2aWQ7CisKKwkjIEdldCBzaGExIG9mIGNvbW1pdCBwb2ludGVkIGJ5IGxvY2FsIEhFQUQKKwlteSAkSEVBRF9zaGExID0gcnVuX2dpdCgicmV2LXBhcnNlICR7bG9jYWx9IDI+L2Rldi9udWxsIik7CisJY2hvbXAoJEhFQURfc2hhMSk7CisJIyBHZXQgc2hhMSBvZiBjb21taXQgcG9pbnRlZCBieSByZW1vdGVzLyRyZW1vdGVuYW1lL21hc3RlcgorCW15ICRyZW1vdGVvcmlnaW5fc2hhMSA9IHJ1bl9naXQoInJldi1wYXJzZSByZWZzL3JlbW90ZXMvJHtyZW1vdGVuYW1lfS9tYXN0ZXIgMj4vZGV2L251bGwiKTsKKwljaG9tcCgkcmVtb3Rlb3JpZ2luX3NoYTEpOworCisJaWYgKCRsYXN0X2xvY2FsX3JldmlkID4gMCAmJgorCSAgICAkbGFzdF9sb2NhbF9yZXZpZCA8ICRsYXN0X3JlbW90ZV9yZXZpZCkgeworCQlyZXR1cm4gZXJyb3Jfbm9uX2Zhc3RfZm9yd2FyZCgkcmVtb3RlKTsKKwl9CisKKwlpZiAoJEhFQURfc2hhMSBlcSAkcmVtb3Rlb3JpZ2luX3NoYTEpIHsKKwkJIyBub3RoaW5nIHRvIHB1c2gKKwkJcmV0dXJuIDA7CisJfQorCisJIyBHZXQgZXZlcnkgY29tbWl0IGluIGJldHdlZW4gSEVBRCBhbmQgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIsCisJIyBpbmNsdWRpbmcgSEVBRCBhbmQgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKwlteSBAY29tbWl0X3BhaXJzID0gKCk7CisJaWYgKCRsYXN0X2xvY2FsX3JldmlkID4gMCkgeworCQlteSAkcGFyc2VkX3NoYTEgPSAkcmVtb3Rlb3JpZ2luX3NoYTE7CisJCSMgRmluZCBhIHBhdGggZnJvbSBsYXN0IE1lZGlhV2lraSBjb21taXQgdG8gcHVzaGVkIGNvbW1pdAorCQlwcmludCB7KlNUREVSUn0gIkNvbXB1dGluZyBwYXRoIGZyb20gbG9jYWwgdG8gcmVtb3RlIC4uLlxuIjsKKwkJbXkgQGxvY2FsX2FuY2VzdHJ5ID0gc3BsaXQoL1xuLywgcnVuX2dpdCgicmV2LWxpc3QgLS1ib3VuZGFyeSAtLXBhcmVudHMgJHtsb2NhbH0gXiR7cGFyc2VkX3NoYTF9IikpOworCQlteSAlbG9jYWxfYW5jZXN0cnk7CisJCWZvcmVhY2ggbXkgJGxpbmUgKEBsb2NhbF9hbmNlc3RyeSkgeworCQkJaWYgKG15ICgkY2hpbGQsICRwYXJlbnRzKSA9ICRsaW5lID1+IC9eLT8oW2EtZjAtOV0rKSAoW2EtZjAtOSBdKykvKSB7CisJCQkJZm9yZWFjaCBteSAkcGFyZW50IChzcGxpdCgvIC8sICRwYXJlbnRzKSkgeworCQkJCQkkbG9jYWxfYW5jZXN0cnl7JHBhcmVudH0gPSAkY2hpbGQ7CisJCQkJfQorCQkJfSBlbHNpZiAoISRsaW5lID1+IC9eKFthLWYwLTldKykvKSB7CisJCQkJZGllICJVbmV4cGVjdGVkIG91dHB1dCBmcm9tIGdpdCByZXYtbGlzdDogJHtsaW5lfVxuIjsKKwkJCX0KKwkJfQorCQl3aGlsZSAoJHBhcnNlZF9zaGExIG5lICRIRUFEX3NoYTEpIHsKKwkJCW15ICRjaGlsZCA9ICRsb2NhbF9hbmNlc3RyeXskcGFyc2VkX3NoYTF9OworCQkJaWYgKCEkY2hpbGQpIHsKKwkJCQlwcmludCB7KlNUREVSUn0gIkNhbm5vdCBmaW5kIGEgcGF0aCBpbiBoaXN0b3J5IGZyb20gcmVtb3RlIGNvbW1pdCB0byBsYXN0IGNvbW1pdFxuIjsKKwkJCQlyZXR1cm4gZXJyb3Jfbm9uX2Zhc3RfZm9yd2FyZCgkcmVtb3RlKTsKKwkJCX0KKwkJCXB1c2goQGNvbW1pdF9wYWlycywgWyRwYXJzZWRfc2hhMSwgJGNoaWxkXSk7CisJCQkkcGFyc2VkX3NoYTEgPSAkY2hpbGQ7CisJCX0KKwl9IGVsc2UgeworCQkjIE5vIHJlbW90ZSBtZWRpYXdpa2kgcmV2aXNpb24uIEV4cG9ydCB0aGUgd2hvbGUKKwkJIyBoaXN0b3J5IChsaW5lYXJpemVkIHdpdGggLS1maXJzdC1wYXJlbnQpCisJCXByaW50IHsqU1RERVJSfSAiV2FybmluZzogbm8gY29tbW9uIGFuY2VzdG9yLCBwdXNoaW5nIGNvbXBsZXRlIGhpc3RvcnlcbiI7CisJCW15ICRoaXN0b3J5ID0gcnVuX2dpdCgicmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1jaGlsZHJlbiAke2xvY2FsfSIpOworCQlteSBAaGlzdG9yeSA9IHNwbGl0KC9cbi8sICRoaXN0b3J5KTsKKwkJQGhpc3RvcnkgPSBAaGlzdG9yeVsxLi4kI2hpc3RvcnldOworCQlmb3JlYWNoIG15ICRsaW5lIChyZXZlcnNlIEBoaXN0b3J5KSB7CisJCQlteSBAY29tbWl0X2luZm9fc3BsaXQgPSBzcGxpdCgvWyBcbl0vLCAkbGluZSk7CisJCQlwdXNoKEBjb21taXRfcGFpcnMsIFxAY29tbWl0X2luZm9fc3BsaXQpOworCQl9CisJfQorCisJZm9yZWFjaCBteSAkY29tbWl0X2luZm9fc3BsaXQgKEBjb21taXRfcGFpcnMpIHsKKwkJbXkgJHNoYTFfY2hpbGQgPSBAeyRjb21taXRfaW5mb19zcGxpdH1bMF07CisJCW15ICRzaGExX2NvbW1pdCA9IEB7JGNvbW1pdF9pbmZvX3NwbGl0fVsxXTsKKwkJbXkgJGRpZmZfaW5mb3MgPSBydW5fZ2l0KCJkaWZmLXRyZWUgLXIgLS1yYXcgLXogJHtzaGExX2NoaWxkfSAke3NoYTFfY29tbWl0fSIpOworCQkjIFRPRE86IHdlIGNvdWxkIGRldGVjdCByZW5hbWUsIGFuZCBlbmNvZGUgdGhlbSB3aXRoIGEgI3JlZGlyZWN0IG9uIHRoZSB3aWtpLgorCQkjIFRPRE86IGZvciBub3csIGl0J3MganVzdCBhIGRlbGV0ZSthZGQKKwkJbXkgQGRpZmZfaW5mb19saXN0ID0gc3BsaXQoL1wwLywgJGRpZmZfaW5mb3MpOworCQkjIEtlZXAgdGhlIHN1YmplY3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgYXMgbWVkaWF3aWtpIGNvbW1lbnQgZm9yIHRoZSByZXZpc2lvbgorCQlteSAkY29tbWl0X21zZyA9IHJ1bl9naXQocXEobG9nIC0tbm8td2FsayAtLWZvcm1hdD0iJXMiICR7c2hhMV9jb21taXR9KSk7CisJCWNob21wKCRjb21taXRfbXNnKTsKKwkJIyBQdXNoIGV2ZXJ5IGJsb2IKKwkJd2hpbGUgKEBkaWZmX2luZm9fbGlzdCkgeworCQkJbXkgJHN0YXR1czsKKwkJCSMgZ2l0IGRpZmYtdHJlZSAteiBnaXZlcyBhbiBvdXRwdXQgbGlrZQorCQkJIyA8bWV0YWRhdGE+XDA8ZmlsZW5hbWUxPlwwCisJCQkjIDxtZXRhZGF0YT5cMDxmaWxlbmFtZTI+XDAKKwkJCSMgYW5kIHdlJ3ZlIHNwbGl0IG9uIFwwLgorCQkJbXkgJGluZm8gPSBzaGlmdChAZGlmZl9pbmZvX2xpc3QpOworCQkJbXkgJGZpbGUgPSBzaGlmdChAZGlmZl9pbmZvX2xpc3QpOworCQkJKCRtd19yZXZpc2lvbiwgJHN0YXR1cykgPSBtd19wdXNoX2ZpbGUoJGluZm8sICRmaWxlLCAkY29tbWl0X21zZywgJG13X3JldmlzaW9uKTsKKwkJCWlmICgkc3RhdHVzIGVxICdub24tZmFzdC1mb3J3YXJkJykgeworCQkJCSMgd2UgbWF5IGFscmVhZHkgaGF2ZSBzZW50IHBhcnQgb2YgdGhlCisJCQkJIyBjb21taXQgdG8gTWVkaWFXaWtpLCBidXQgaXQncyB0b28KKwkJCQkjIGxhdGUgdG8gY2FuY2VsIGl0LiBTdG9wIHRoZSBwdXNoIGluCisJCQkJIyB0aGUgbWlkZGxlLCBidXQgc3RpbGwgZ2l2ZSBhbgorCQkJCSMgYWNjdXJhdGUgZXJyb3IgbWVzc2FnZS4KKwkJCQlyZXR1cm4gZXJyb3Jfbm9uX2Zhc3RfZm9yd2FyZCgkcmVtb3RlKTsKKwkJCX0KKwkJCWlmICgkc3RhdHVzIG5lICdvaycpIHsKKwkJCQlkaWUoIlVua25vd24gZXJyb3IgZnJvbSBtd19wdXNoX2ZpbGUoKVxuIik7CisJCQl9CisJCX0KKwkJaWYgKCEkZHVtYl9wdXNoKSB7CisJCQlydW5fZ2l0KHFxKG5vdGVzIC0tcmVmPSR7cmVtb3RlbmFtZX0vbWVkaWF3aWtpIGFkZCAtZiAtbSAibWVkaWF3aWtpX3JldmlzaW9uOiAke213X3JldmlzaW9ufSIgJHtzaGExX2NvbW1pdH0pKTsKKwkJfQorCX0KKworCXByaW50IHsqU1RET1VUfSAib2sgJHtyZW1vdGV9XG4iOworCXJldHVybiAxOworfQorCitzdWIgZ2V0X2FsbG93ZWRfZmlsZV9leHRlbnNpb25zIHsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisKKwlteSAkcXVlcnkgPSB7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQltZXRhID0+ICdzaXRlaW5mbycsCisJCXNpcHJvcCA9PiAnZmlsZWV4dGVuc2lvbnMnCisJCX07CisJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCW15IEBmaWxlX2V4dGVuc2lvbnMgPSBtYXAgeyAkXy0+e2V4dH19IEB7JHJlc3VsdC0+e3F1ZXJ5fS0+e2ZpbGVleHRlbnNpb25zfX07CisJbXkgJWhhc2hGaWxlID0gbWFwIHsgJF8gPT4gMSB9IEBmaWxlX2V4dGVuc2lvbnM7CisKKwlyZXR1cm4gJWhhc2hGaWxlOworfQorCisjIEluIG1lbW9yeSBjYWNoZSBmb3IgTWVkaWFXaWtpIG5hbWVzcGFjZSBpZHMuCitteSAlbmFtZXNwYWNlX2lkOworCisjIE5hbWVzcGFjZXMgd2hvc2UgaWQgaXMgY2FjaGVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKyMgKHRvIGF2b2lkIGR1cGxpY2F0ZXMpCitteSAlY2FjaGVkX213X25hbWVzcGFjZV9pZDsKKworIyBSZXR1cm4gTWVkaWFXaWtpIGlkIGZvciBhIGNhbm9uaWNhbCBuYW1lc3BhY2UgbmFtZS4KKyMgRXguOiAiRmlsZSIsICJQcm9qZWN0Ii4KK3N1YiBnZXRfbXdfbmFtZXNwYWNlX2lkIHsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisJbXkgJG5hbWUgPSBzaGlmdDsKKworCWlmICghZXhpc3RzICRuYW1lc3BhY2VfaWR7JG5hbWV9KSB7CisJCSMgTG9vayBhdCBjb25maWd1cmF0aW9uIGZpbGUsIGlmIHRoZSByZWNvcmQgZm9yIHRoYXQgbmFtZXNwYWNlIGlzCisJCSMgYWxyZWFkeSBjYWNoZWQuIE5hbWVzcGFjZXMgYXJlIHN0b3JlZCBpbiBmb3JtOgorCQkjICJOYW1lX29mX25hbWVzcGFjZTpJZF9uYW1lc3BhY2UiLCBleC46ICJGaWxlOjYiLgorCQlteSBAdGVtcCA9IHNwbGl0KC9cbi8sCisJCQkJIHJ1bl9naXQoImNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubmFtZXNwYWNlQ2FjaGUiKSk7CisJCWNob21wKEB0ZW1wKTsKKwkJZm9yZWFjaCBteSAkbnMgKEB0ZW1wKSB7CisJCQlteSAoJG4sICRpZCkgPSBzcGxpdCgvOi8sICRucyk7CisJCQlpZiAoJGlkIGVxICdub3RBTmFtZVNwYWNlJykgeworCQkJCSRuYW1lc3BhY2VfaWR7JG59ID0ge2lzX25hbWVzcGFjZSA9PiAwfTsKKwkJCX0gZWxzZSB7CisJCQkJJG5hbWVzcGFjZV9pZHskbn0gPSB7aXNfbmFtZXNwYWNlID0+IDEsIGlkID0+ICRpZH07CisJCQl9CisJCQkkY2FjaGVkX213X25hbWVzcGFjZV9pZHskbn0gPSAxOworCQl9CisJfQorCisJaWYgKCFleGlzdHMgJG5hbWVzcGFjZV9pZHskbmFtZX0pIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJOYW1lc3BhY2UgJHtuYW1lfSBub3QgZm91bmQgaW4gY2FjaGUsIHF1ZXJ5aW5nIHRoZSB3aWtpIC4uLlxuIjsKKwkJIyBOUyBub3QgZm91bmQgPT4gZ2V0IG5hbWVzcGFjZSBpZCBmcm9tIE1XIGFuZCBzdG9yZSBpdCBpbgorCSAgICAgICAgIyBjb25maWd1cmF0aW9uIGZpbGUuCisJICAgICAgICBteSAkcXVlcnkgPSB7CisJICAgICAgICAgICAgICAgIGFjdGlvbiA9PiAncXVlcnknLAorCSAgICAgICAgICAgICAgICBtZXRhID0+ICdzaXRlaW5mbycsCisJICAgICAgICAgICAgICAgIHNpcHJvcCA9PiAnbmFtZXNwYWNlcycKKwkgICAgICAgIH07CisJICAgICAgICBteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisKKwkgICAgICAgIHdoaWxlIChteSAoJGlkLCAkbnMpID0gZWFjaCgleyRyZXN1bHQtPntxdWVyeX0tPntuYW1lc3BhY2VzfX0pKSB7CisJICAgICAgICAgICAgICAgIGlmIChkZWZpbmVkKCRucy0+e2lkfSkgJiYgZGVmaW5lZCgkbnMtPntjYW5vbmljYWx9KSkgeworCQkJCSRuYW1lc3BhY2VfaWR7JG5zLT57Y2Fub25pY2FsfX0gPSB7aXNfbmFtZXNwYWNlID0+IDEsIGlkID0+ICRucy0+e2lkfX07CisJCQkJaWYgKCRucy0+eycqJ30pIHsKKwkJCQkJIyBhbGlhcyAoZS5nLiBmcmVuY2ggRmljaGllcjogYXMgYWxpYXMgZm9yIGNhbm9uaWNhbCBGaWxlOikKKwkJCQkJJG5hbWVzcGFjZV9pZHskbnMtPnsnKid9fSA9IHtpc19uYW1lc3BhY2UgPT4gMSwgaWQgPT4gJG5zLT57aWR9fTsKKwkJCQl9CisJCQl9CisJICAgICAgICB9CisJfQorCisJbXkgJG5zID0gJG5hbWVzcGFjZV9pZHskbmFtZX07CisJbXkgJGlkOworCisJaWYgKCFkZWZpbmVkICRucykgeworCQlteSBAbmFtZXNwYWNlcyA9IG1hcCB7IHMvIC9fL2c7ICRfOyB9IHNvcnQga2V5cyAlbmFtZXNwYWNlX2lkOworCQlwcmludCB7KlNUREVSUn0gIk5vIHN1Y2ggbmFtZXNwYWNlICR7bmFtZX0gb24gTWVkaWFXaWtpLCBrbm93biBuYW1lc3BhY2VzOiBAbmFtZXNwYWNlc1xuIjsKKwkJJG5zID0ge2lzX25hbWVzcGFjZSA9PiAwfTsKKwkJJG5hbWVzcGFjZV9pZHskbmFtZX0gPSAkbnM7CisJfQorCisJaWYgKCRucy0+e2lzX25hbWVzcGFjZX0pIHsKKwkJJGlkID0gJG5zLT57aWR9OworCX0KKworCSMgU3RvcmUgIm5vdEFOYW1lU3BhY2UiIGFzIHNwZWNpYWwgdmFsdWUgZm9yIGluZXhpc3RpbmcgbmFtZXNwYWNlcworCW15ICRzdG9yZV9pZCA9ICgkaWQgfHwgJ25vdEFOYW1lU3BhY2UnKTsKKworCSMgU3RvcmUgZXhwbGljaXRseSByZXF1ZXN0ZWQgbmFtZXNwYWNlcyBvbiBkaXNrCisJaWYgKCFleGlzdHMgJGNhY2hlZF9td19uYW1lc3BhY2VfaWR7JG5hbWV9KSB7CisJCXJ1bl9naXQocXEoY29uZmlnIC0tYWRkIHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm5hbWVzcGFjZUNhY2hlICIke25hbWV9OiR7c3RvcmVfaWR9IikpOworCQkkY2FjaGVkX213X25hbWVzcGFjZV9pZHskbmFtZX0gPSAxOworCX0KKwlyZXR1cm4gJGlkOworfQorCitzdWIgZ2V0X213X25hbWVzcGFjZV9pZF9mb3JfcGFnZSB7CisJbXkgJG5hbWVzcGFjZSA9IHNoaWZ0OworCWlmICgkbmFtZXNwYWNlID1+IC9eKFteOl0qKTovKSB7CisJCXJldHVybiBnZXRfbXdfbmFtZXNwYWNlX2lkKCRuYW1lc3BhY2UpOworCX0gZWxzZSB7CisJCXJldHVybjsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS50eHQgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiN2VmOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnR4dApAQCAtMCwwICsxLDcgQEAKK0dpdC1NZWRpYXdpa2kgaXMgYSBwcm9qZWN0IHdoaWNoIGFpbXMgdGhlIGNyZWF0aW9uIG9mIGEgZ2F0ZQorYmV0d2VlbiBnaXQgYW5kIG1lZGlhd2lraSwgYWxsb3dpbmcgZ2l0IHVzZXJzIHRvIHB1c2ggYW5kIHB1bGwKK29iamVjdHMgZnJvbSBtZWRpYXdpa2kganVzdCBhcyBvbmUgd291bGQgZG8gd2l0aCBhIGNsYXNzaWMgZ2l0CityZXBvc2l0b3J5IHRoYW5rcyB0byByZW1vdGUtaGVscGVycy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSB3aWtpIGF0CitodHRwczovL2dpdGh1Yi5jb20vbW95L0dpdC1NZWRpYXdpa2kvd2lraQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC8uZ2l0aWdub3JlIGIvY29udHJpYi9tdy10by1naXQvdC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTQwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90Ly5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACitXRUIvCit3aWtpLwordHJhc2ggZGlyZWN0b3J5LnQqLwordGVzdC1yZXN1bHRzLwpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC9NYWtlZmlsZSBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyMjIwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvTWFrZWZpbGUKQEAgLTAsMCArMSwzMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIworIyMgVGVzdCBnaXQtcmVtb3RlLW1lZGlhd2lraQorCithbGw6IHRlc3QKKworLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrCisKK1QgPSAkKHdpbGRjYXJkIHRbMC05XVswLTldWzAtOV1bMC05XS0qLnNoKQorCisuUEhPTlk6IGhlbHAgdGVzdCBjbGVhbiBhbGwKKworaGVscDoKKwlAZWNobyAnUnVuICIkKE1BS0UpIHRlc3QiIHRvIGxhdW5jaCB0ZXN0IHNjcmlwdHMnCisJQGVjaG8gJ1J1biAiJChNQUtFKSBjbGVhbiIgdG8gcmVtb3ZlIHRyYXNoIGZvbGRlcnMnCisKK3Rlc3Q6CisJQGZvciB0IGluICQoVCk7IGRvIFwKKwkJZWNobyAiJCR0IjsgXAorCQkiLi8kJHQiIHx8IGV4aXQgMTsgXAorCWRvbmUKKworY2xlYW46CisJJChSTSkgLXIgJ3RyYXNoIGRpcmVjdG9yeScuKgpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC9SRUFETUUgYi9jb250cmliL213LXRvLWdpdC90L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWUzNGJlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9SRUFETUUKQEAgLTAsMCArMSwxMjQgQEAKK1Rlc3RzIGZvciBNZWRpYXdpa2ktdG8tR2l0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorVGhpcyBtYW51YWwgZGVzY3JpYmVzIGhvdyB0byBpbnN0YWxsIHRoZSBnaXQtcmVtb3RlLW1lZGlhd2lraSB0ZXN0CitlbnZpcm9ubWVudCBvbiBhIG1hY2hpbmUgd2l0aCBnaXQgaW5zdGFsbGVkIG9uIGl0LgorCitQcmVyZXF1aXNpdGUKKy0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byBydW4gdGhpcyB0ZXN0IGVudmlyb25tZW50IGNvcnJlY3RseSwgeW91IHdpbGwgbmVlZCB0bworaW5zdGFsbCB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIChEZWJpYW4vVWJ1bnR1IG5hbWVzLCBtYXkgbmVlZCB0byBiZQorYWRhcHRlZCBmb3IgYW5vdGhlciBkaXN0cmlidXRpb24pOgorCisqIGxpZ2h0dHBkCisqIHBocDUKKyogcGhwNS1jZ2kKKyogcGhwNS1jbGkKKyogcGhwNS1jdXJsCisqIHBocDUtc3FsaXRlCisKK1ByaW5jaXBsZXMgYW5kIFRlY2huaWNhbCBDaG9pY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGVzdCBlbnZpcm9ubWVudCBtYWtlcyBpdCBlYXN5IHRvIGluc3RhbGwgYW5kIG1hbmlwdWxhdGUgb25lIG9yCitzZXZlcmFsIE1lZGlhV2lraSBpbnN0YW5jZXMuIFRvIGFsbG93IGRldmVsb3BlcnMgdG8gcnVuIHRoZSB0ZXN0c3VpdGUKK2Vhc2lseSwgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHJlcXVpcmUgcm9vdCBwcml2aWxlZ2UgKGV4Y2VwdCB0bworaW5zdGFsbCB0aGUgcmVxdWlyZWQgcGFja2FnZXMgaWYgbmVlZGVkKS4gSXQgc3RhcnRzIGEgd2Vic2VydmVyCitpbnN0YW5jZSBvbiB0aGUgdXNlcidzIGFjY291bnQgKHVzaW5nIGxpZ2h0dHBkIGdyZWF0bHkgaGVscHMgZm9yCit0aGF0KSwgYW5kIGRvZXMgbm90IG5lZWQgYSBzZXBhcmF0ZSBkYXRhYmFzZSBkYWVtb24gKHRoYW5rcyB0byB0aGUgdXNlCitvZiBzcWxpdGUpLgorCitSdW4gdGhlIHRlc3QgZW52aXJvbm1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnN0YWxsIGEgbmV3IHdpa2kKK35+fn5+fn5+fn5+fn5+fn5+fgorCitPbmNlIHlvdSBoYXZlIGFsbCB0aGUgcHJlcmVxdWlzaXRlLCB5b3UgbmVlZCB0byBpbnN0YWxsIGEgTWVkaWFXaWtpCitpbnN0YW5jZSBvbiB5b3VyIG1hY2hpbmUuIElmIHlvdSBhbHJlYWR5IGhhdmUgb25lLCBpdCBpcyBzdGlsbAorc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gaW5zdGFsbCBvbmUgd2l0aCB0aGUgc2NyaXB0IHByb3ZpZGVkLiBIZXJlJ3MKK2hvdyB0byB3b3JrIGl0OgorCithLiBjaGFuZ2UgZGlyZWN0b3J5IHRvIGNvbnRyaWIvbXctdG8tZ2l0L3QvCitiLiBpZiBuZWVkZWQsIGVkaXQgdGVzdC5jb25maWcgdG8gY2hvb3NlIHlvdXIgaW5zdGFsbGF0aW9uIHBhcmFtZXRlcnMKK2MuIHJ1biBgLi9pbnN0YWxsLXdpa2kuc2ggaW5zdGFsbGAKK2QuIGNoZWNrIG9uIHlvdXIgZmF2b3VyaXRlIHdlYiBicm93c2VyIGlmIHlvdXIgd2lraSBpcyBjb3JyZWN0bHkKKyAgIGluc3RhbGxlZC4KKworUmVtb3ZlIGFuIGV4aXN0aW5nIHdpa2kKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0VkaXQgdGhlIGZpbGUgdGVzdC5jb25maWcgdG8gZml0IHRoZSB3aWtpIHlvdSB3YW50IHRvIGRlbGV0ZSwgYW5kIHRoZW4KK2V4ZWN1dGUgdGhlIGNvbW1hbmQgYC4vaW5zdGFsbC13aWtpLnNoIGRlbGV0ZWAgZnJvbSB0aGUKK2NvbnRyaWIvbXctdG8tZ2l0L3QgZGlyZWN0b3J5LgorCitSdW4gdGhlIGV4aXN0aW5nIHRlc3RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBwcm92aWRlZCB0ZXN0cyBhcmUgY3VycmVudGx5IGluIHRoZSBgY29udHJpYi9tdy10by1naXQvdGAgZGlyZWN0b3J5LgorVGhlIGZpbGVzIGFyZSBhbGwgdGhlIHQ5MzZbMC05XS0qLnNoIHNoZWxsIHNjcmlwdHMuCisKK2EuIFJ1biBhbGwgdGVzdHM6CitUbyBkbyBzbywgcnVuICJtYWtlIHRlc3QiIGZyb20gdGhlIGNvbnRyaWIvbXctdG8tZ2l0LyBkaXJlY3RvcnkuCisKK2IuIFJ1biBhIHNwZWNpZmljIHRlc3Q6CitUbyBydW4gYSBnaXZlbiB0ZXN0IDx0ZXN0X25hbWU+LCBydW4gLi88dGVzdF9uYW1lPiBmcm9tIHRoZQorY29udHJpYi9tdy10by1naXQvdCBkaXJlY3RvcnkuCisKK0hvdyB0byBjcmVhdGUgbmV3IHRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBdmFpbGFibGUgZnVuY3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSB0ZXN0IGVudmlyb25tZW50IG9mIGdpdC1yZW1vdGUtbWVkaWF3aWtpIHByb3ZpZGVzIHNvbWUgZnVuY3Rpb25zCit1c2VmdWwgdG8gdGVzdCBpdHMgYmVoYXZpb3VyLiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBmdW5jdGlvbnMnCitwYXJhbWV0ZXJzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGB0ZXN0LWdpdG13LWxpYi5zaGAgYW5kCitgdGVzdC1naXRtdy5wbGAgZmlsZXMuCisKKyoqIGB0ZXN0X2NoZWNrX3dpa2lfcHJlY29uZGA6CitDaGVjayBpZiB0aGUgdGVzdHMgbXVzdCBiZSBza2lwcGVkIG9yIG5vdC4gUGxlYXNlIHVzZSB0aGlzIGZ1bmN0aW9uCithdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbmV3IHRlc3QgZmlsZS4KKworKiogYHdpa2lfZ2V0cGFnZWA6CitGZXRjaCBhIGdpdmVuIHBhZ2UgZnJvbSB0aGUgd2lraSBhbmQgcHV0cyBpdHMgY29udGVudCBpbiB0aGUKK2RpcmVjdG9yeSBpbiBwYXJhbWV0ZXIuCisKKyoqIGB3aWtpX2RlbGV0ZV9wYWdlYDoKK0RlbGV0ZSBhIGdpdmVuIHBhZ2UgZnJvbSB0aGUgd2lraS4KKworKiogYHdpa2lfZWRpdF9wYWdlYDoKK0NyZWF0ZSBvciBtb2RpZnkgYSBnaXZlbiBwYWdlIGluIHRoZSB3aWtpLiBZb3UgY2FuIHNwZWNpZnkgc2V2ZXJhbAorcGFyYW1ldGVycyBsaWtlIGEgc3VtbWFyeSBmb3IgdGhlIHBhZ2UgZWRpdGlvbiwgb3IgYWRkIHRoZSBwYWdlIHRvIGEKK2dpdmVuIGNhdGVnb3J5LgorU2VlIHRlc3QtZ2l0bXcucGwgZm9yIG1vcmUgZGV0YWlscy4KKworKiogYHdpa2lfZ2V0YWxscGFnZWA6CitGZXRjaCBhbGwgcGFnZXMgZnJvbSB0aGUgd2lraSBpbnRvIGEgZ2l2ZW4gZGlyZWN0b3J5LiBUaGUgZGlyZWN0b3J5CitpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGV4aXN0cy4KKworKiogYHRlc3RfZGlmZl9kaXJlY3Rvcmllc2A6CitDb21wYXJlIHRoZSBjb250ZW50IG9mIHR3byBkaXJlY3Rvcmllcy4gVGhlIGNvbnRlbnQgbXVzdCBiZSB0aGUgc2FtZS4KK1VzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbXBhcmUgdGhlIGNvbnRlbnQgb2YgYSBnaXQgZGlyZWN0b3J5IGFuZCBhIHdpa2kKK29uZSBjcmVhdGVkIGJ5IHdpa2lfZ2V0YWxscGFnZS4KKworKiogYHRlc3RfY29udGFpbnNfTl9maWxlc2A6CitDaGVjayBpZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGNvbnRhaW5zIGEgZ2l2ZW4gbnVtYmVyIG9mIGZpbGUuCisKKyoqIGB3aWtpX3BhZ2VfZXhpc3RzYDoKK1Rlc3RzIGlmIGEgZ2l2ZW4gcGFnZSBleGlzdHMgb24gdGhlIHdpa2kuCisKKyoqIGB3aWtpX3Jlc2V0YDoKK1Jlc2V0IHRoZSB3aWtpLCBpLmUuIGZsdXNoIHRoZSBkYXRhYmFzZS4gVXNlIHRoaXMgZnVuY3Rpb24gYXQgdGhlCitiZWdpbm5pbmcgb2YgZWFjaCBuZXcgdGVzdCwgZXhjZXB0IGlmIHRoZSB0ZXN0IHJlLXVzZXMgdGhlIHNhbWUgd2lraQorKGFuZCBoaXN0b3J5KSBhcyB0aGUgcHJldmlvdXMgdGVzdC4KKworSG93IHRvIHdyaXRlIGEgbmV3IHRlc3QKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1BsZWFzZSwgZm9sbG93IHRoZSBzdGFuZGFyZHMgZ2l2ZW4gYnkgZ2l0LiBTZWUgZ2l0L3QvUkVBRE1FLgorTmV3IGZpbGUgc2hvdWxkIGJlIG5hbWVkIGFzIHQ5MzZbMC05XS0qLnNoLgorQmUgc3VyZSB0byByZXNldCB5b3VyIHdpa2kgcmVndWxhcmx5IHdpdGggdGhlIGZ1bmN0aW9uIGB3aWtpX3Jlc2V0YC4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpLnNoIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzIxNTIxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpLnNoCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCisjIFRoaXMgc2NyaXB0IGluc3RhbGxzIG9yIGRlbGV0ZXMgYSBNZWRpYVdpa2kgb24geW91ciBjb21wdXRlci4KKyMgSXQgcmVxdWlyZXMgYSB3ZWIgc2VydmVyIHdpdGggUEhQIGFuZCBTUUxpdGUgcnVubmluZy4gSW4gYWRkaXRpb24sIGlmIHlvdQorIyBkbyBub3QgaGF2ZSBNZWRpYVdpa2kgc291cmNlcyBvbiB5b3VyIGNvbXB1dGVyLCB0aGUgb3B0aW9uICdpbnN0YWxsJworIyBkb3dubG9hZHMgdGhlbSBmb3IgeW91LgorIyBQbGVhc2Ugc2V0IHRoZSBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBpbiAuL3Rlc3QtZ2l0bXctbGliLnNoCisKK1dJS0lfVEVTVF9ESVI9JChjZCAiJChkaXJuYW1lICIkMCIpIiAmJiBwd2QpCisKK2lmIHRlc3QgLXogIiRXSUtJX1RFU1RfRElSIgordGhlbgorCVdJS0lfVEVTVF9ESVI9LgorZmkKKworLiAiJFdJS0lfVEVTVF9ESVIiL3Rlc3QtZ2l0bXctbGliLnNoCit1c2FnZSAoKSB7CisJZWNobyAidXNhZ2U6ICIKKwllY2hvICIJLi9pbnN0YWxsLXdpa2kuc2ggPGluc3RhbGwgfCBkZWxldGUgfCAtLWhlbHA+IgorCWVjaG8gIgkJaW5zdGFsbCB8IC1pIDoJSW5zdGFsbCBhIHdpa2kgb24geW91ciBjb21wdXRlci4iCisJZWNobyAiCQlkZWxldGUgfCAtZCA6IERlbGV0ZSB0aGUgd2lraSBhbmQgYWxsIGl0cyBwYWdlcyBhbmQgIgorCWVjaG8gIgkJCWNvbnRlbnQuIgorCWVjaG8gIgkJc3RhcnQgIHwgLXMgOiBTdGFydCB0aGUgcHJldmlvdXNseSBjb25maWd1cmVkIGxpZ2h0dHBkIGRhZW1vbiIKKwllY2hvICIJCXN0b3AgICAgICAgIDogU3RvcCBsaWdodHRwZCBkYWVtb24uIgorfQorCisKKyMgQXJndW1lbnQ6IGluc3RhbGwsIGRlbGV0ZSwgLS1oZWxwIHwgLWgKK2Nhc2UgIiQxIiBpbgorCSJpbnN0YWxsIiB8ICItaSIpCisJCXdpa2lfaW5zdGFsbAorCQlleGl0IDAKKwkJOzsKKwkiZGVsZXRlIiB8ICItZCIpCisJCXdpa2lfZGVsZXRlCisJCWV4aXQgMAorCQk7OworCSJzdGFydCIgfCAiLXMiKQorCQlzdGFydF9saWdodHRwZAorCQlleGl0CisJCTs7CisJInN0b3AiKQorCQlzdG9wX2xpZ2h0dHBkCisJCWV4aXQKKwkJOzsKKwkiLS1oZWxwIiB8ICItaCIpCisJCXVzYWdlCisJCWV4aXQgMAorCQk7OworCSopCisJCWVjaG8gIkludmFsaWQgYXJndW1lbnQ6ICQxIgorCQl1c2FnZQorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpLy5naXRpZ25vcmUgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTJhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3dpa2lkYi5zcWxpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL0xvY2FsU2V0dGluZ3MucGhwIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvTG9jYWxTZXR0aW5ncy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1ZTQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL0xvY2FsU2V0dGluZ3MucGhwCkBAIC0wLDAgKzEsMTI5IEBACis8P3BocAorIyBUaGlzIGZpbGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZSBNZWRpYVdpa2kgMS4xOS4wCisjIGluc3RhbGxlci4gSWYgeW91IG1ha2UgbWFudWFsIGNoYW5nZXMsIHBsZWFzZSBrZWVwIHRyYWNrIGluIGNhc2UgeW91CisjIG5lZWQgdG8gcmVjcmVhdGUgdGhlbSBsYXRlci4KKyMKKyMgU2VlIGluY2x1ZGVzL0RlZmF1bHRTZXR0aW5ncy5waHAgZm9yIGFsbCBjb25maWd1cmFibGUgc2V0dGluZ3MKKyMgYW5kIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBidXQgZG9uJ3QgZm9yZ2V0IHRvIG1ha2UgY2hhbmdlcyBpbiBfdGhpc18KKyMgZmlsZSwgbm90IHRoZXJlLgorIworIyBGdXJ0aGVyIGRvY3VtZW50YXRpb24gZm9yIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgbWF5IGJlIGZvdW5kIGF0OgorIyBodHRwOi8vd3d3Lm1lZGlhd2lraS5vcmcvd2lraS9NYW51YWw6Q29uZmlndXJhdGlvbl9zZXR0aW5ncworCisjIFByb3RlY3QgYWdhaW5zdCB3ZWIgZW50cnkKK2lmICggIWRlZmluZWQoICdNRURJQVdJS0knICkgKSB7CisJZXhpdDsKK30KKworIyMgVW5jb21tZW50IHRoaXMgdG8gZGlzYWJsZSBvdXRwdXQgY29tcHJlc3Npb24KKyMgJHdnRGlzYWJsZU91dHB1dENvbXByZXNzaW9uID0gdHJ1ZTsKKworJHdnU2l0ZW5hbWUgICAgICA9ICJHaXQtTWVkaWFXaWtpLVRlc3QiOworJHdnTWV0YU5hbWVzcGFjZSA9ICJHaXQtTWVkaWFXaWtpLVRlc3QiOworCisjIyBUaGUgVVJMIGJhc2UgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHdpa2k7CisjIyBkZWZhdWx0cyBmb3IgYWxsIHJ1bnRpbWUgVVJMIHBhdGhzIGFyZSBiYXNlZCBvZmYgb2YgdGhpcy4KKyMjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGN1c3RvbWl6aW5nIHRoZSBVUkxzIHBsZWFzZSBzZWU6CisjIyBodHRwOi8vd3d3Lm1lZGlhd2lraS5vcmcvd2lraS9NYW51YWw6U2hvcnRfVVJMCiskd2dTY3JpcHRQYXRoICAgICAgID0gIkBXR19TQ1JJUFRfUEFUSEAiOworJHdnU2NyaXB0RXh0ZW5zaW9uICA9ICIucGhwIjsKKworIyMgVGhlIHByb3RvY29sIGFuZCBzZXJ2ZXIgbmFtZSB0byB1c2UgaW4gZnVsbHktcXVhbGlmaWVkIFVSTHMKKyR3Z1NlcnZlciAgICAgICAgICAgPSAiQFdHX1NFUlZFUkAiOworCisjIyBUaGUgcmVsYXRpdmUgVVJMIHBhdGggdG8gdGhlIHNraW5zIGRpcmVjdG9yeQorJHdnU3R5bGVQYXRoICAgICAgICA9ICIkd2dTY3JpcHRQYXRoL3NraW5zIjsKKworIyMgVGhlIHJlbGF0aXZlIFVSTCBwYXRoIHRvIHRoZSBsb2dvLiAgTWFrZSBzdXJlIHlvdSBjaGFuZ2UgdGhpcyBmcm9tIHRoZSBkZWZhdWx0LAorIyMgb3IgZWxzZSB5b3UnbGwgb3ZlcndyaXRlIHlvdXIgbG9nbyB3aGVuIHlvdSB1cGdyYWRlIQorJHdnTG9nbyAgICAgICAgICAgICA9ICIkd2dTdHlsZVBhdGgvY29tbW9uL2ltYWdlcy93aWtpLnBuZyI7CisKKyMjIFVQTyBtZWFuczogdGhpcyBpcyBhbHNvIGEgdXNlciBwcmVmZXJlbmNlIG9wdGlvbgorCiskd2dFbmFibGVFbWFpbCAgICAgID0gdHJ1ZTsKKyR3Z0VuYWJsZVVzZXJFbWFpbCAgPSB0cnVlOyAjIFVQTworCiskd2dFbWVyZ2VuY3lDb250YWN0ID0gImFwYWNoZUBsb2NhbGhvc3QiOworJHdnUGFzc3dvcmRTZW5kZXIgICA9ICJhcGFjaGVAbG9jYWxob3N0IjsKKworJHdnRW5vdGlmVXNlclRhbGsgICAgICA9IGZhbHNlOyAjIFVQTworJHdnRW5vdGlmV2F0Y2hsaXN0ICAgICA9IGZhbHNlOyAjIFVQTworJHdnRW1haWxBdXRoZW50aWNhdGlvbiA9IHRydWU7CisKKyMjIERhdGFiYXNlIHNldHRpbmdzCiskd2dEQnR5cGUgICAgICAgICAgID0gInNxbGl0ZSI7Ciskd2dEQnNlcnZlciAgICAgICAgID0gIiI7Ciskd2dEQm5hbWUgICAgICAgICAgID0gIkBXR19TUUxJVEVfREFUQUZJTEVAIjsKKyR3Z0RCdXNlciAgICAgICAgICAgPSAiIjsKKyR3Z0RCcGFzc3dvcmQgICAgICAgPSAiIjsKKworIyBTUUxpdGUtc3BlY2lmaWMgc2V0dGluZ3MKKyR3Z1NRTGl0ZURhdGFEaXIgICAgPSAiQFdHX1NRTElURV9EQVRBRElSQCI7CisKKworIyMgU2hhcmVkIG1lbW9yeSBzZXR0aW5ncworJHdnTWFpbkNhY2hlVHlwZSAgICA9IENBQ0hFX05PTkU7Ciskd2dNZW1DYWNoZWRTZXJ2ZXJzID0gYXJyYXkoKTsKKworIyMgVG8gZW5hYmxlIGltYWdlIHVwbG9hZHMsIG1ha2Ugc3VyZSB0aGUgJ2ltYWdlcycgZGlyZWN0b3J5CisjIyBpcyB3cml0YWJsZSwgdGhlbiBzZXQgdGhpcyB0byB0cnVlOgorJHdnRW5hYmxlVXBsb2FkcyAgPSB0cnVlOworJHdnVXNlSW1hZ2VNYWdpY2sgPSB0cnVlOworJHdnSW1hZ2VNYWdpY2tDb252ZXJ0Q29tbWFuZCA9IkBDT05WRVJUQCI7Ciskd2dGaWxlRXh0ZW5zaW9uc1tdID0gJ3R4dCc7CisKKyMgSW5zdGFudENvbW1vbnMgYWxsb3dzIHdpa2kgdG8gdXNlIGltYWdlcyBmcm9tIGh0dHA6Ly9jb21tb25zLndpa2ltZWRpYS5vcmcKKyR3Z1VzZUluc3RhbnRDb21tb25zICA9IGZhbHNlOworCisjIyBJZiB5b3UgdXNlIEltYWdlTWFnaWNrIChvciBhbnkgb3RoZXIgc2hlbGwgY29tbWFuZCkgb24gYQorIyMgTGludXggc2VydmVyLCB0aGlzIHdpbGwgbmVlZCB0byBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgYW4KKyMjIGF2YWlsYWJsZSBVVEYtOCBsb2NhbGUKKyR3Z1NoZWxsTG9jYWxlID0gImVuX1VTLnV0ZjgiOworCisjIyBJZiB5b3Ugd2FudCB0byB1c2UgaW1hZ2UgdXBsb2FkcyB1bmRlciBzYWZlIG1vZGUsCisjIyBjcmVhdGUgdGhlIGRpcmVjdG9yaWVzIGltYWdlcy9hcmNoaXZlLCBpbWFnZXMvdGh1bWIgYW5kCisjIyBpbWFnZXMvdGVtcCwgYW5kIG1ha2UgdGhlbSBhbGwgd3JpdGFibGUuIFRoZW4gdW5jb21tZW50CisjIyB0aGlzLCBpZiBpdCdzIG5vdCBhbHJlYWR5IHVuY29tbWVudGVkOgorIyR3Z0hhc2hlZFVwbG9hZERpcmVjdG9yeSA9IGZhbHNlOworCisjIyBTZXQgJHdnQ2FjaGVEaXJlY3RvcnkgdG8gYSB3cml0YWJsZSBkaXJlY3Rvcnkgb24gdGhlIHdlYiBzZXJ2ZXIKKyMjIHRvIG1ha2UgeW91ciB3aWtpIGdvIHNsaWdodGx5IGZhc3Rlci4gVGhlIGRpcmVjdG9yeSBzaG91bGQgbm90CisjIyBiZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZyb20gdGhlIHdlYi4KKyMkd2dDYWNoZURpcmVjdG9yeSA9ICIkSVAvY2FjaGUiOworCisjIFNpdGUgbGFuZ3VhZ2UgY29kZSwgc2hvdWxkIGJlIG9uZSBvZiB0aGUgbGlzdCBpbiAuL2xhbmd1YWdlcy9OYW1lcy5waHAKKyR3Z0xhbmd1YWdlQ29kZSA9ICJlbiI7CisKKyR3Z1NlY3JldEtleSA9ICIxYzkxMmJmZTM1MTlmYjcwZjVkYzUyM2VjYzY5ODExMWNkNDNkODFhMTFjNTg1YjNlZWZiMjhmMjljMjY5OWI3IjsKKyMkd2dTZWNyZXRLZXkgPSAiQFNFQ1JFVEtFWUAiOworCisKKyMgU2l0ZSB1cGdyYWRlIGtleS4gTXVzdCBiZSBzZXQgdG8gYSBzdHJpbmcgKGRlZmF1bHQgcHJvdmlkZWQpIHRvIHR1cm4gb24gdGhlCisjIHdlYiBpbnN0YWxsZXIgd2hpbGUgTG9jYWxTZXR0aW5ncy5waHAgaXMgaW4gcGxhY2UKKyR3Z1VwZ3JhZGVLZXkgPSAiZGRhZTdkYzg3Y2QwYTY0NSI7CisKKyMjIERlZmF1bHQgc2tpbjogeW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgc2tpbi4gVXNlIHRoZSBpbnRlcm5hbCBzeW1ib2xpYworIyMgbmFtZXMsIGllICdzdGFuZGFyZCcsICdub3N0YWxnaWEnLCAnY29sb2duZWJsdWUnLCAnbW9ub2Jvb2snLCAndmVjdG9yJzoKKyR3Z0RlZmF1bHRTa2luID0gInZlY3RvciI7CisKKyMjIEZvciBhdHRhY2hpbmcgbGljZW5zaW5nIG1ldGFkYXRhIHRvIHBhZ2VzLCBhbmQgZGlzcGxheWluZyBhbgorIyMgYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSAvIGljb24uIEdOVSBGcmVlIERvY3VtZW50YXRpb24KKyMjIExpY2Vuc2UgYW5kIENyZWF0aXZlIENvbW1vbnMgbGljZW5zZXMgYXJlIHN1cHBvcnRlZCBzbyBmYXIuCiskd2dSaWdodHNQYWdlID0gIiI7ICMgU2V0IHRvIHRoZSB0aXRsZSBvZiBhIHdpa2kgcGFnZSB0aGF0IGRlc2NyaWJlcyB5b3VyIGxpY2Vuc2UvY29weXJpZ2h0Ciskd2dSaWdodHNVcmwgID0gIiI7Ciskd2dSaWdodHNUZXh0ID0gIiI7Ciskd2dSaWdodHNJY29uID0gIiI7CisKKyMgUGF0aCB0byB0aGUgR05VIGRpZmYzIHV0aWxpdHkuIFVzZWQgZm9yIGNvbmZsaWN0IHJlc29sdXRpb24uCiskd2dEaWZmMyA9ICIvdXNyL2Jpbi9kaWZmMyI7CisKKyMgUXVlcnkgc3RyaW5nIGxlbmd0aCBsaW1pdCBmb3IgUmVzb3VyY2VMb2FkZXIuIFlvdSBzaG91bGQgb25seSBzZXQgdGhpcyBpZgorIyB5b3VyIHdlYiBzZXJ2ZXIgaGFzIGEgcXVlcnkgc3RyaW5nIGxlbmd0aCBsaW1pdCAodGhlbiBzZXQgaXQgdG8gdGhhdCBsaW1pdCksCisjIG9yIGlmIHlvdSBoYXZlIHN1aG9zaW4uZ2V0Lm1heF92YWx1ZV9sZW5ndGggc2V0IGluIHBocC5pbmkgKHRoZW4gc2V0IGl0IHRvCisjIHRoYXQgdmFsdWUpCiskd2dSZXNvdXJjZUxvYWRlck1heFF1ZXJ5TGVuZ3RoID0gLTE7CisKKworCisjIEVuZCBvZiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBzZXR0aW5ncy4KKyMgQWRkIG1vcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlbG93LgpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvZGJfaW5zdGFsbC5waHAgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9kYl9pbnN0YWxsLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMzODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvZGJfaW5zdGFsbC5waHAKQEAgLTAsMCArMSwxMjAgQEAKKzw/cGhwCisvKioKKyAqIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyBhIFNRTGl0ZSBkYXRhYmFzZSBmb3IgYSBNZWRpYVdpa2kgdmVyc2lvbiAxLjE5LjAKKyAqIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGxvZ2luIG9mIHRoZSBhZG1pbiAoYXJndW1lbnQgMSkgYW5kIGl0cworICogcGFzc3dvcmQgKGFyZ3VtZW50IDIpIGFuZCB0aGUgZm9sZGVyIHdoZXJlIHRoZSBkYXRhYmFzZSBmaWxlCisgKiBpcyBsb2NhdGVkIChhYnNvbHV0ZSBwYXRoIGluIGFyZ3VtZW50IDMpLgorICogSXQgaXMgdXNlZCBieSB0aGUgc2NyaXB0IGluc3RhbGwtd2lraS5zaCBpbiBvcmRlciB0byBtYWtlIGVhc3kgdGhlCisgKiBpbnN0YWxsYXRpb24gb2YgYSBNZWRpYVdpa2kuCisgKgorICogSW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBTUUxpdGUgZGF0YWJhc2UgZmlsZSwgTWVkaWFXaWtpIGFzayB0aGUgdXNlcgorICogdG8gc3VibWl0IHNvbWUgZm9ybXMgaW4gaXRzIHdlYiBicm93c2VyLiBUaGlzIHNjcmlwdCBzaW11bGF0ZXMgdGhpcworICogYmVoYXZpb3IgdGhvdWdoIHRoZSBmdW5jdGlvbnMgPGdldD4gYW5kIDxzdWJtaXQ+CisgKgorICovCiskYXJnYyA9ICRfU0VSVkVSWydhcmdjJ107CiskYXJndiA9ICRfU0VSVkVSWydhcmd2J107CisKKyRsb2dpbiA9ICRhcmd2WzJdOworJHBhc3MgPSAkYXJndlszXTsKKyR0bXAgPSAkYXJndls0XTsKKyRwb3J0ID0gJGFyZ3ZbNV07CisKKyR1cmwgPSAnaHR0cDovL2xvY2FsaG9zdDonLiRwb3J0Licvd2lraS9tdy1jb25maWcvaW5kZXgucGhwJzsKKyRkYl9kaXIgPSB1cmxlbmNvZGUoJHRtcCk7CiskdG1wX2Nvb2tpZSA9IHRlbXBuYW0oJHRtcCwgIkNPT0tJRV8iKTsKKy8qCisgKiBGZXRjaGVzIGEgcGFnZSB3aXRoIGNVUkwuCisgKi8KK2Z1bmN0aW9uIGdldCgkcGFnZV9uYW1lID0gIiIpIHsKKwkkY3VybCA9IGN1cmxfaW5pdCgpOworCSRwYWdlX25hbWVfYWRkID0gIiI7CisJaWYgKCRwYWdlX25hbWUgIT0gIiIpIHsKKwkJJHBhZ2VfbmFtZV9hZGQgPSAnP3BhZ2U9Jy4kcGFnZV9uYW1lOworCX0KKwkkdXJsID0gJEdMT0JBTFNbJ3VybCddLiRwYWdlX25hbWVfYWRkOworCSR0bXBfY29va2llID0gJEdMT0JBTFNbJ3RtcF9jb29raWUnXTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsICR0bXBfY29va2llKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIHRydWUpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0NPT0tJRUZJTEUsICR0bXBfY29va2llKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IRUFERVIsIHRydWUpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwgJHVybCk7CisKKwkkcGFnZSA9IGN1cmxfZXhlYygkY3VybCk7CisJaWYgKCEkcGFnZSkgeworCQlkaWUoIkNvdWxkIG5vdCBnZXQgcGFnZTogJHVybFxuIik7CisJfQorCWN1cmxfY2xvc2UoJGN1cmwpOworCXJldHVybiAkcGFnZTsKK30KKworLyoKKyAqIFN1Ym1pdHMgYSBmb3JtIHdpdGggY1VSTC4KKyAqLworZnVuY3Rpb24gc3VibWl0KCRwYWdlX25hbWUsICRvcHRpb24gPSAiIikgeworCSRjdXJsID0gY3VybF9pbml0KCk7CisJJGRhdGFwb3N0ID0gJ3N1Ym1pdC1jb250aW51ZT1Db250aW51ZSslRTIlODYlOTInOworCWlmICgkb3B0aW9uICE9ICIiKSB7CisJCSRkYXRhcG9zdCA9ICRvcHRpb24uJyYnLiRkYXRhcG9zdDsKKwl9CisJJHVybCA9ICRHTE9CQUxTWyd1cmwnXS4nP3BhZ2U9Jy4kcGFnZV9uYW1lOworCSR0bXBfY29va2llID0gJEdMT0JBTFNbJ3RtcF9jb29raWUnXTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR1cmwpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1BPU1QsIHRydWUpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCAkZGF0YXBvc3QpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsICR0bXBfY29va2llKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAkdG1wX2Nvb2tpZSk7CisKKwkkcGFnZSA9IGN1cmxfZXhlYygkY3VybCk7CisJaWYgKCEkcGFnZSkgeworCQlkaWUoIkNvdWxkIG5vdCBnZXQgcGFnZTogJHVybFxuIik7CisJfQorCWN1cmxfY2xvc2UoJGN1cmwpOworCXJldHVybiAiJHBhZ2UiOworfQorCisvKgorICogSGVyZSBzdGFydHMgdGhpcyBzY3JpcHQ6IHNpbXVsYXRlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHVzZXIKKyAqIHN1Ym1pdHRpbmcgZm9ybXMgdG8gZ2VuZXJhdGVzIHRoZSBkYXRhYmFzZSBmaWxlLgorICogTm90ZSB0aGlzIHNpbXVsYXRpb24gd2FzIG1hZGUgZm9yIHRoZSBNZWRpYVdpa2kgdmVyc2lvbiAxLjE5LjAsCisgKiB3ZSBjYW4ndCBhc3N1bWUgaXQgd29ya3Mgd2l0aCBvdGhlciB2ZXJzaW9ucy4KKyAqCisgKi8KKworJHBhZ2UgPSBnZXQoKTsKK2lmICghcHJlZ19tYXRjaCgnL2lucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IihbMC05XSspIiBuYW1lPSJMYW5ndWFnZVJlcXVlc3RUaW1lIi8nLAorCQkkcGFnZSwgJG1hdGNoZXMpKSB7CisJZWNobyAiVW5leHBlY3RlZCBjb250ZW50IGZvciBwYWdlIGRvd25sb2FkZWQ6XG4iOworCWVjaG8gIiRwYWdlIjsKKwlkaWU7Cit9OworJHRpbWVzdGFtcCA9ICRtYXRjaGVzWzFdOworJGxhbmd1YWdlID0gIkxhbmd1YWdlUmVxdWVzdFRpbWU9JHRpbWVzdGFtcCZ1c2VsYW5nPWVuJkNvbnRMYW5nPWVuIjsKKyRwYWdlID0gc3VibWl0KCdMYW5ndWFnZScsICRsYW5ndWFnZSk7CisKK3N1Ym1pdCgnV2VsY29tZScpOworCiskZGJfY29uZmlnID0gJ0RCVHlwZT1zcWxpdGUnOworJGRiX2NvbmZpZyA9ICRkYl9jb25maWcuJyZzcWxpdGVfd2dTUUxpdGVEYXRhRGlyPScuJGRiX2RpcjsKKyRkYl9jb25maWcgPSAkZGJfY29uZmlnLicmc3FsaXRlX3dnREJuYW1lPScuJGFyZ3ZbMV07CitzdWJtaXQoJ0RCQ29ubmVjdCcsICRkYl9jb25maWcpOworCiskd2lraV9jb25maWcgPSAnY29uZmlnX3dnU2l0ZW5hbWU9VEVTVCc7Ciskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfX05hbWVzcGFjZVR5cGU9c2l0ZS1uYW1lJzsKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJmNvbmZpZ193Z01ldGFOYW1lc3BhY2U9TXlXaWtpJzsKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJmNvbmZpZ19fQWRtaW5OYW1lPScuJGxvZ2luOworCiskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfX0FkbWluUGFzc3dvcmQ9Jy4kcGFzczsKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJmNvbmZpZ19fQWRtaW5QYXNzd29yZDI9Jy4kcGFzczsKKworJHdpa2lfY29uZmlnID0gJHdpa2lfY29uZmlnLicmd2lraV9fY29uZmlnRW1haWw9ZW1haWwlNDBlbWFpbC5vcmcnOworJHdpa2lfY29uZmlnID0gJHdpa2lfY29uZmlnLicmY29uZmlnX19Ta2lwT3B0aW9uYWw9c2tpcCc7CitzdWJtaXQoJ05hbWUnLCAkd2lraV9jb25maWcpOworc3VibWl0KCdJbnN0YWxsJyk7CitzdWJtaXQoJ0luc3RhbGwnKTsKKwordW5saW5rKCR0bXBfY29va2llKTsKKz8+CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3B1c2gtcHVsbC10ZXN0cy5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvcHVzaC1wdWxsLXRlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTJkYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3B1c2gtcHVsbC10ZXN0cy5zaApAQCAtMCwwICsxLDE0NCBAQAordGVzdF9wdXNoX3B1bGwgKCkgeworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IHB1bGwgd29ya3MgYWZ0ZXIgYWRkaW5nIGEgbmV3IHdpa2kgcGFnZScgJworCQl3aWtpX3Jlc2V0ICYmCisKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMSAmJgorCQl3aWtpX2VkaXRwYWdlIEZvbyAicGFnZSBjcmVhdGVkIGFmdGVyIHRoZSBnaXQgY2xvbmUiIGZhbHNlICYmCisKKwkJKAorCQkJY2QgbXdfZGlyXzEgJiYKKwkJCWdpdCBwdWxsCisJCSkgJiYKKworCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMSAmJgorCQl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEgcmVmX3BhZ2VfMQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdWxsIHdvcmtzIGFmdGVyIGVkaXRpbmcgYSB3aWtpIHBhZ2UnICcKKwkJd2lraV9yZXNldCAmJgorCisJCXdpa2lfZWRpdHBhZ2UgRm9vICJwYWdlIGNyZWF0ZWQgYmVmb3JlIHRoZSBnaXQgY2xvbmUiIGZhbHNlICYmCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIgJiYKKwkJd2lraV9lZGl0cGFnZSBGb28gIm5ldyBsaW5lIGFkZGVkIG9uIHRoZSB3aWtpIiB0cnVlICYmCisKKwkJKAorCQkJY2QgbXdfZGlyXzIgJiYKKwkJCWdpdCBwdWxsCisJCSkgJiYKKworCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMiAmJgorCQl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzIgcmVmX3BhZ2VfMgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIHdvcmtzIG9uIGNvbmZsaWN0IGhhbmRsZWQgYnkgYXV0by1tZXJnZScgJworCQl3aWtpX3Jlc2V0ICYmCisKKwkJd2lraV9lZGl0cGFnZSBGb28gIjEgaW5pdAorMworNQorCSIgZmFsc2UgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMyAmJgorCisJCXdpa2lfZWRpdHBhZ2UgRm9vICIxIGluaXQKKzIgY29udGVudCBhZGRlZCBvbiB3aWtpIGFmdGVyIGNsb25lCiszCis1CisJIiBmYWxzZSAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl8zICYmCisJCWVjaG8gIjEgaW5pdAorMworNCBjb250ZW50IGFkZGVkIG9uIGdpdCBhZnRlciBjbG9uZQorNQorIiA+Rm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29uZmxpY3RpbmcgY2hhbmdlIG9uIGZvbyIgJiYKKwkJCWdpdCBwdWxsICYmCisJCQlnaXQgcHVzaAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IHB1c2ggd29ya3MgYWZ0ZXIgYWRkaW5nIGEgZmlsZSAubXcnICcKKwkJd2lraV9yZXNldCAmJgorCQlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl80ICYmCisJCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV80ICYmCisJCSgKKwkJCWNkIG13X2Rpcl80ICYmCisJCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28ubXcgJiYKKwkJCXRvdWNoIEZvby5tdyAmJgorCQkJZWNobyAiaGVsbG8gd29ybGQiID4+Rm9vLm13ICYmCisJCQlnaXQgYWRkIEZvby5tdyAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiRm9vIiAmJgorCQkJZ2l0IHB1c2gKKwkJKSAmJgorCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNCAmJgorCQl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzQgcmVmX3BhZ2VfNAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdXNoIHdvcmtzIGFmdGVyIGVkaXRpbmcgYSBmaWxlIC5tdycgJworCQl3aWtpX3Jlc2V0ICYmCisJCXdpa2lfZWRpdHBhZ2UgIkZvbyIgInBhZ2UgY3JlYXRlZCBiZWZvcmUgdGhlIGdpdCBjbG9uZSIgZmFsc2UgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNSAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl81ICYmCisJCQllY2hvICJuZXcgbGluZSBhZGRlZCBpbiB0aGUgZmlsZSBGb28ubXciID4+Rm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1hbSAiZWRpdCBmaWxlIEZvby5tdyIgJiYKKwkJCWdpdCBwdXNoCisJCSkgJiYKKworCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNSAmJgorCQl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzUgcmVmX3BhZ2VfNQorCScKKworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ0dpdCBwdXNoIHdvcmtzIGFmdGVyIGRlbGV0aW5nIGEgZmlsZScgJworCQl3aWtpX3Jlc2V0ICYmCisJCXdpa2lfZWRpdHBhZ2UgRm9vICJ3aWtpIHBhZ2UgYWRkZWQgYmVmb3JlIGdpdCBjbG9uZSIgZmFsc2UgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNiAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl82ICYmCisJCQlnaXQgcm0gRm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1hbSAicGFnZSBGb28ubXcgZGVsZXRlZCIgJiYKKwkJCWdpdCBwdXNoCisJCSkgJiYKKworCQl0ZXN0X211c3RfZmFpbCB3aWtpX3BhZ2VfZXhpc3QgRm9vCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2UgY29uZmxpY3QgZXhwZWN0ZWQgYW5kIHNvbHZpbmcgaXQnICcKKwkJd2lraV9yZXNldCAmJgorCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzcgJiYKKwkJd2lraV9lZGl0cGFnZSBGb28gIjEgY29uZmxpY3QKKzMgd2lraQorNCIgZmFsc2UgJiYKKworCQkoCisJCQljZCBtd19kaXJfNyAmJgorCQllY2hvICIxIGNvbmZsaWN0CisyIGdpdAorNCIgPkZvby5tdyAmJgorCQkJZ2l0IGFkZCBGb28ubXcgJiYKKwkJCWdpdCBjb21taXQgLW0gImNvbmZsaWN0IGNyZWF0ZWQiICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAmJgorCQkJIiRQRVJMX1BBVEgiIC1waSAtZSAicy9bPD0+XS4qLy9nIiBGb28ubXcgJiYKKwkJCWdpdCBjb21taXQgLWFtICJtZXJnZSBjb25mbGljdCBzb2x2ZWQiICYmCisJCQlnaXQgcHVzaAorCQkpCisJJworCisJdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0IHB1bGwgd29ya3MgYWZ0ZXIgZGVsZXRpbmcgYSB3aWtpIHBhZ2UnICcKKwkJd2lraV9yZXNldCAmJgorCQl3aWtpX2VkaXRwYWdlIEZvbyAid2lraSBwYWdlIGFkZGVkIGJlZm9yZSB0aGUgZ2l0IGNsb25lIiBmYWxzZSAmJgorCQlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl84ICYmCisKKwkJd2lraV9kZWxldGVfcGFnZSBGb28gJiYKKwkJKAorCQkJY2QgbXdfZGlyXzggJiYKKwkJCWdpdCBwdWxsICYmCisJCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28ubXcKKwkJKQorCScKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2MC1tdy10by1naXQtY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTEwNjgzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoCkBAIC0wLDAgKzEsMjU3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMKKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCisKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgR2l0IE1lZGlhd2lraSByZW1vdGUgaGVscGVyOiBnaXQgY2xvbmUnCisKKy4gLi90ZXN0LWdpdG13LWxpYi5zaAorLiAkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWIuc2gKKworCit0ZXN0X2NoZWNrX3ByZWNvbmQKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgY3JlYXRlcyB0aGUgZXhwZWN0ZWQgZ2l0IGxvZyB3aXRoIG9uZSBmaWxlJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIGlzIG5vdCBpbXBvcnRhbnQiIGZhbHNlIC1jIGNhdCAtcyAidGhpcyBtdXN0IGJlIHRoZSBzYW1lIiAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEgJiYKKwkoCisJCWNkIG13X2Rpcl8xICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9JXMgSEVBRF4uLkhFQUQgPmxvZy50bXAKKwkpICYmCisJZWNobyAidGhpcyBtdXN0IGJlIHRoZSBzYW1lIiA+bXNnLnRtcCAmJgorCWRpZmYgLWIgbXdfZGlyXzEvbG9nLnRtcCBtc2cudG1wCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIGNyZWF0ZXMgdGhlIGV4cGVjdGVkIGdpdCBsb2cgd2l0aCBtdWx0aXBsZSBmaWxlcycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGRhZGR5ICJ0aGlzIGlzIG5vdCBpbXBvcnRhbnQiIGZhbHNlIC1zPSJ0aGlzIG11c3QgYmUgdGhlIHNhbWUiICYmCisJd2lraV9lZGl0cGFnZSBkYWRkeSAibmVpdGhlciBpcyB0aGlzIiB0cnVlIC1zPSJ0aGlzIG11c3QgYWxzbyBiZSB0aGUgc2FtZSIgJiYKKwl3aWtpX2VkaXRwYWdlIGRhZGR5ICJuZWl0aGVyIGlzIHRoaXMiIHRydWUgLXM9InNhbWUgc2FtZSBzYW1lIiAmJgorCXdpa2lfZWRpdHBhZ2UgZGogImRvbnQgY2FyZSIgZmFsc2UgLXM9ImlkZW50aWNhbCIgJiYKKwl3aWtpX2VkaXRwYWdlIGRqICJkb250IGNhcmUgZWl0aGVyIiB0cnVlIC1zPSJpZGVudGljYWwgdG9vIiAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIgJiYKKwkoCisJCWNkIG13X2Rpcl8yICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9JXMgRGFkZHkubXcgID5sb2dEYWRkeS50bXAgJiYKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lcyBEai5tdyA+bG9nRGoudG1wCisJKSAmJgorCWVjaG8gInNhbWUgc2FtZSBzYW1lIiA+bXNnRGFkZHkudG1wICYmCisJZWNobyAidGhpcyBtdXN0IGFsc28gYmUgdGhlIHNhbWUiID4+bXNnRGFkZHkudG1wICYmCisJZWNobyAidGhpcyBtdXN0IGJlIHRoZSBzYW1lIiA+Pm1zZ0RhZGR5LnRtcCAmJgorCWVjaG8gImlkZW50aWNhbCB0b28iID5tc2dEai50bXAgJiYKKwllY2hvICJpZGVudGljYWwiID4+bXNnRGoudG1wICYmCisJZGlmZiAtYiBtd19kaXJfMi9sb2dEYWRkeS50bXAgbXNnRGFkZHkudG1wICYmCisJZGlmZiAtYiBtd19kaXJfMi9sb2dEai50bXAgbXNnRGoudG1wCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIGNyZWF0ZXMgb25seSBNYWluX1BhZ2UubXcgd2l0aCBhbiBlbXB0eSB3aWtpJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzMgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzMgMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8zL01haW5fUGFnZS5tdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgZG9lcyBub3QgZmV0Y2ggYSBkZWxldGVkIHBhZ2UnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSBtdXN0IGJlIGRlbGV0ZWQgYmVmb3JlIHRoZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIGZvbyAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzQgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzQgMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl80L01haW5fUGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl80L0Zvby5tdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBwYWdlIGFkZGVkJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICIgSSB3aWxsIGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiSSB3aWxsIGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl81ICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzUgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzUgcmVmX3BhZ2VfNSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgZm9vICYmCisJd2lraV9kZWxldGVfcGFnZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggYW4gZWRpdGVkIHBhZ2UgJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIHBhZ2Ugd2lsbCBiZSBlZGl0ZWQiIFwKKwkJZmFsc2UgLXMgImZpcnN0IGVkaXRpb24gb2YgcGFnZSBmb28iJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBwYWdlIGhhcyBiZWVuIGVkaXRlZCBhbmQgbXVzdCBiZSBvbiB0aGUgY2xvbmUgIiB0cnVlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNiAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl82L0Zvby5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl82L01haW5fUGFnZS5tdyAmJgorCXdpa2lfZ2V0YWxscGFnZSBtd19kaXJfNi9wYWdlX3JlZl82ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl82IG13X2Rpcl82L3BhZ2VfcmVmXzYgJiYKKwkoCisJCWNkIG13X2Rpcl82ICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9JXMgSEVBRF4gRm9vLm13ID4gLi4vRm9vLmxvZworCSkgJiYKKwllY2hvICJmaXJzdCBlZGl0aW9uIG9mIHBhZ2UgZm9vIiA+IEZvb0V4cGVjdC5sb2cgJiYKKwlkaWZmIEZvb0V4cGVjdC5sb2cgRm9vLmxvZworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIHNldmVyYWwgcGFnZXMgYW5kIHNvbWUgZGVsZXRlZCAnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSB3aWxsIG5vdCBiZSBkZWxldGVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICJJIG11c3Qgbm90IGJlIGVyYXNlZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG5hbW5hbSAiSSB3aWxsIG5vdCBiZSB0aGVyZSBhdCB0aGUgZW5kIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbmNhdCAibnlhbiBueWFuIG55YW4gZGVsZXRlIG1lIiBmYWxzZSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgbmFtbmFtICYmCisJd2lraV9kZWxldGVfcGFnZSBueWFuY2F0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl83L0Zvby5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl83L0Jhci5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl83L05hbW5hbS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl83L055YW5jYXQubXcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgbXdfZGlyXzcvcGFnZV9yZWZfNyAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfNyBtd19kaXJfNy9wYWdlX3JlZl83CisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggb25lIHNwZWNpZmljIHBhZ2UgY2xvbmVkICcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiSSB3aWxsIG5vdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBiYXIgIkRvIG5vdCBjbG9uZSBtZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG5hbW5hbSAiSSB3aWxsIGJlIGNsb25lZCA6KSIgZmFsc2UgIC1zPSJ0aGlzIGxvZyBtdXN0IHN0YXkiICYmCisJd2lraV9lZGl0cGFnZSBueWFuY2F0ICJueWFuIG55YW4gbnlhbiB5b3UgY2FudCBjbG9uZSBtZSIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz1uYW1uYW0gXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzggJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzggMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl84L05hbW5hbS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl84L01haW5fUGFnZS5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzggJiYKKwkJZWNobyAidGhpcyBsb2cgbXVzdCBzdGF5IiA+bXNnLnRtcCAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSVzID5sb2cudG1wICYmCisJCWRpZmYgLWIgbXNnLnRtcCBsb2cudG1wCisJKSAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfOC9OYW1uYW0ubXcgTmFtbmFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIG11bHRpcGxlIHNwZWNpZmljIHBhZ2UgY2xvbmVkICcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiSSB3aWxsIGJlIHRoZXJlIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICJJIHdpbGwgbm90IGRpc2FwcGVhciIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG5hbW5hbSAiSSBiZSBlcmFzZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBueWFuY2F0ICJueWFuIG55YW4gbnlhbiB5b3Ugd2lsbCBub3QgZXJhc2UgbWUiIGZhbHNlICYmCisJd2lraV9kZWxldGVfcGFnZSBuYW1uYW0gJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz0iZm9vIGJhciBueWFuY2F0IG5hbW5hbSIgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzkgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzkgMyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl85L05hbW5hbS5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl85L0Zvby5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl85L055YW5jYXQubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfOS9CYXIubXcgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzkvRm9vLm13IEZvbyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfOS9CYXIubXcgQmFyICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl85L055YW5jYXQubXcgTnlhbmNhdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZWRpYXdpa2ktY2xvbmUgb2Ygc2V2ZXJhbCBzcGVjaWZpYyBwYWdlcyBvbiB3aWtpJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJmb28gMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiYmFyIDEiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBkdW1teSAiZHVtbXkgMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGNsb25lZF8xICJjbG9uZWRfMSAxIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgY2xvbmVkXzIgImNsb25lZF8yIDIiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBjbG9uZWRfMyAiY2xvbmVkXzMgMyIgZmFsc2UgJiYKKwlta2RpciAtcCByZWZfcGFnZV8xMCAmJgorCXdpa2lfZ2V0cGFnZSBjbG9uZWRfMSByZWZfcGFnZV8xMCAmJgorCXdpa2lfZ2V0cGFnZSBjbG9uZWRfMiByZWZfcGFnZV8xMCAmJgorCXdpa2lfZ2V0cGFnZSBjbG9uZWRfMyByZWZfcGFnZV8xMCAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLnBhZ2VzPSJjbG9uZWRfMSBjbG9uZWRfMiBjbG9uZWRfMyIgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEwICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xMCByZWZfcGFnZV8xMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCB0aGUgc2hhbGxvdyBvcHRpb24nICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gIjFzdCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiMXN0IHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbiAiMXN0IHJldmlzaW9uLCBzaG91bGQgbm90IGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW4gIjJuZCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgLWMgcmVtb3RlLm9yaWdpbi5zaGFsbG93PXRydWUgY2xvbmUgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzExICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8xMSA0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL055YW4ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEvRm9vLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL0Jhci5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS9NYWluX1BhZ2UubXcgJiYKKwkoCisJCWNkIG13X2Rpcl8xMSAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgTnlhbi5tdyB8IHdjIC1sKSAtZXEgMSAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgRm9vLm13IHwgd2MgLWwpIC1lcSAxICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBCYXIubXcgfCB3YyAtbCkgLWVxIDEgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIE1haW5fUGFnZS5tdyB8IHdjIC1sICkgLWVxIDEKKwkpICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xMS9OeWFuLm13IE55YW4gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzExL0Zvby5tdyBGb28gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzExL0Jhci5tdyBCYXIgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzExL01haW5fUGFnZS5tdyBNYWluX1BhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggdGhlIHNoYWxsb3cgb3B0aW9uIHdpdGggYSBkZWxldGUgcGFnZScgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiMXN0IHJldmlzaW9uLCB3aWxsIGJlIGRlbGV0ZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBiYXIgIjFzdCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW4gIjFzdCByZXZpc2lvbiwgc2hvdWxkIG5vdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBueWFuICIybmQgcmV2aXNpb24sIHNob3VsZCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9kZWxldGVfcGFnZSBmb28gJiYKKwlnaXQgLWMgcmVtb3RlLm9yaWdpbi5zaGFsbG93PXRydWUgY2xvbmUgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEyICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8xMiAzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzEyL055YW4ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTIvRm9vLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzEyL0Jhci5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMi9NYWluX1BhZ2UubXcgJiYKKwkoCisJCWNkIG13X2Rpcl8xMiAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgTnlhbi5tdyB8IHdjIC1sKSAtZXEgMSAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgQmFyLm13IHwgd2MgLWwpIC1lcSAxICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBNYWluX1BhZ2UubXcgfCB3YyAtbCApIC1lcSAxCisJKSAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTIvTnlhbi5tdyBOeWFuICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xMi9CYXIubXcgQmFyICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xMi9NYWluX1BhZ2UubXcgTWFpbl9QYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Rlc3Qgb2YgZmV0Y2hpbmcgYSBjYXRlZ29yeScgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIEZvbyAiSSB3aWxsIGJlIGNsb25lZCIgZmFsc2UgLWM9Q2F0ZWdvcnkgJiYKKwl3aWtpX2VkaXRwYWdlIEJhciAiTWVldCBtZSBvbiB0aGUgcmVwb3NpdG9yeSIgZmFsc2UgLWM9Q2F0ZWdvcnkgJiYKKwl3aWtpX2VkaXRwYWdlIER1bW15ICJJIHdpbGwgbm90IGNvbWUiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBCYXJXcm9uZyAiSSB3aWxsIHN0YXkgb25saW5lIG9ubHkiIGZhbHNlIC1jPU5vdENhdGVnb3J5ICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4uY2F0ZWdvcmllcz0iQ2F0ZWdvcnkiIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMyAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xMyBDYXRlZ29yeSAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMTMgcmVmX3BhZ2VfMTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCBvZiByZXNpc3RhbmNlIHRvIG1vZGlmaWNhdGlvbiBvZiBjYXRlZ29yeSBvbiB3aWtpIGZvciBjbG9uZScgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIFRvYmVkZWxldGVkICJ0aGlzIHBhZ2Ugd2lsbCBiZSBkZWxldGVkIiBmYWxzZSAtYz1DYXRvbmUgJiYKKwl3aWtpX2VkaXRwYWdlIFRvYmVlZGl0ZWQgInRoaXMgcGFnZSB3aWxsIGJlIG1vZGlmaWVkIiBmYWxzZSAtYz1DYXRvbmUgJiYKKwl3aWtpX2VkaXRwYWdlIE5vcm1hbG9uZSAidGhpcyBwYWdlIHdvbnQgYmUgbW9kaWZpZWQgYW5kIHdpbGwgYmUgb24gZ2l0IiBmYWxzZSAtYz1DYXRvbmUgJiYKKwl3aWtpX2VkaXRwYWdlIE5vdGNvbnNpZGVyZWQgInRoaXMgcGFnZSB3aWxsIG5vdCBhcHBlYXIgb24gbG9jYWwiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBPdGhlcmNhdGVnb3J5ICJ0aGlzIHBhZ2Ugd2lsbCBub3QgYXBwZWFyIG9uIGxvY2FsIiBmYWxzZSAtYz1DYXR0d28gJiYKKwl3aWtpX2VkaXRwYWdlIFRvYmVlZGl0ZWQgInRoaXMgcGFnZSBoYXZlIGJlZW4gbW9kaWZpZWQiIHRydWUgLWM9Q2F0b25lICYmCisJd2lraV9kZWxldGVfcGFnZSBUb2JlZGVsZXRlZCAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLmNhdGVnb3JpZXM9IkNhdG9uZSIgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE0ICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzE0IENhdG9uZSAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMTQgcmVmX3BhZ2VfMTQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYxLW13LXRvLWdpdC1wdXNoLXB1bGwuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYxLW13LXRvLWdpdC1wdXNoLXB1bGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWVhMjAxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjEtbXctdG8tZ2l0LXB1c2gtcHVsbC5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMKKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCisKKyMgdGVzdHMgZm9yIGdpdC1yZW1vdGUtbWVkaWF3aWtpCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIEdpdCBNZWRpYXdpa2kgcmVtb3RlIGhlbHBlcjogZ2l0IHB1c2ggYW5kIGdpdCBwdWxsIHNpbXBsZSB0ZXN0IGNhc2VzJworCisuIC4vdGVzdC1naXRtdy1saWIuc2gKKy4gLi9wdXNoLXB1bGwtdGVzdHMuc2gKKy4gJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLnNoCisKK3Rlc3RfY2hlY2tfcHJlY29uZAorCit0ZXN0X3B1c2hfcHVsbAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjItbXctdG8tZ2l0LXV0Zjguc2ggYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYyLW13LXRvLWdpdC11dGY4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiMGRiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYyLW13LXRvLWdpdC11dGY4LnNoCkBAIC0wLDAgKzEsMzQ3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMKKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCisKKyMgdGVzdHMgZm9yIGdpdC1yZW1vdGUtbWVkaWF3aWtpCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0LW1lZGlhd2lraSB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMnCisKKy4gLi90ZXN0LWdpdG13LWxpYi5zaAorLiAkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWIuc2gKKworCit0ZXN0X2NoZWNrX3ByZWNvbmQKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3MgZm9yIGEgd2lraSB3aXRoIGFjY2VudHMgaW4gdGhlIHBhZ2UgbmFtZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmw6nDqSAiVGhpcyBwYWdlIG11c3QgYmUgZMOpbMOpdMOpZCBiZWZvcmUgY2xvbmUiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBrw6jDqCAiVGhpcyBwYWdlIG11c3QgYmUgZGVsZXRlZCBiZWZvcmUgY2xvbmUiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBow6DDoCAiVGhpcyBwYWdlIG11c3QgYmUgZGVsZXRlZCBiZWZvcmUgY2xvbmUiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBrw67DriAiVGhpcyBwYWdlIG11c3QgYmUgZGVsZXRlZCBiZWZvcmUgY2xvbmUiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBmb28gIlRoaXMgcGFnZSBtdXN0IGJlIGRlbGV0ZWQgYmVmb3JlIGNsb25lIiBmYWxzZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMSAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMSByZWZfcGFnZV8xCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IHB1bGwgd29ya3Mgd2l0aCBhIHdpa2kgd2l0aCBhY2NlbnRzIGluIHRoZSBwYWdlcyBuYW1lcycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGvDrsOuICJ0aGlzIHBhZ2UgbXVzdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8yICYmCisJd2lraV9lZGl0cGFnZSDDqcOgw67DtMO7ICJUaGlzIHBhZ2UgbXVzdCBiZSBwdWxsZWQiIGZhbHNlICYmCisJKAorCQljZCBtd19kaXJfMiAmJgorCQlnaXQgcHVsbAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMiAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMiByZWZfcGFnZV8yCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmluZyBhIGNob3NlbiBwYWdlIHdvcmtzIHdpdGggYWNjZW50cycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGvDrsOuICJ0aGlzIHBhZ2UgbXVzdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9a8Ouw64gXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzMgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzMvS8Ouw64ubXcgS8Ouw64gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMy9Lw67Dri5tdyAmJgorCXJtIC1yZiBtd19kaXJfMworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RoZSBzaGFsbG93IG9wdGlvbiB3b3JrcyB3aXRoIGFjY2VudHMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBuw6lvw6AgIjFzdCByZXZpc2lvbiwgc2hvdWxkIG5vdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBuw6lvw6AgIjJuZCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgLWMgcmVtb3RlLm9yaWdpbi5zaGFsbG93PXRydWUgY2xvbmUgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzQgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzQgMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl80L07DqW/DoC5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl80L01haW5fUGFnZS5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzQgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIE7DqW/DoC5tdyB8IHdjIC1sKSAtZXEgMSAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgTWFpbl9QYWdlLm13IHwgd2MgLWwgKSAtZXEgMQorCSkgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzQvTsOpb8OgLm13IE7DqW/DoCAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfNC9NYWluX1BhZ2UubXcgTWFpbl9QYWdlCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmluZyB3b3JrcyB3aGVuIHBhZ2UgbmFtZSBmaXJzdCBsZXR0ZXIgaGFzIGFuIGFjY2VudCcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIMOuw64gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz3DrsOuIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl81ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzUvw47Dri5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfNS/DjsOuLm13IMOOw64KKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgcHVzaCB3b3JrcyB3aXRoIGEgd2lraSB3aXRoIGFjY2VudHMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmw6nDqSAibG90cyBvZiBhY2NlbnRzIDogw6nDqMOgw5YiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl82ICYmCisJKAorCQljZCBtd19kaXJfNiAmJgorCQllY2hvICJBIHdpbGQgUMOua8OkY2jDuyBhcHBlYXJzIG9uIHRoZSB3aWtpIiA+UMOua8OkY2jDuy5tdyAmJgorCQlnaXQgYWRkIFDDrmvDpGNow7subXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSBuZXcgcGFnZSBhcHBlYXJzIiAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNiAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfNiByZWZfcGFnZV82CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIGFjY2VudHNhbmQgc3BhY2VzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgIsOpIMOgIMOuIiAidGhpcyBwYWdlIG11c3QgYmUgZMOpbMOpdMOpIGJlZm9yZSB0aGUgY2xvbmUiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNyAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV83ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl83IHJlZl9wYWdlXzcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhcmFjdGVyICQgaW4gcGFnZSBuYW1lIChtdyAtPiBnaXQpJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZmlsZV9cJF9mb28gImV4cGVjdCB0byBiZSBjYWxsZWQgZmlsZV8kX2ZvbyIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl84ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzgvRmlsZV9cJF9mb28ubXcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfOCAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfOCByZWZfcGFnZV84CisnCisKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFyYWN0ZXIgJCBpbiBmaWxlIG5hbWUgKGdpdCAtPiBtdykgJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzkgJiYKKwkoCisJCWNkIG13X2Rpcl85ICYmCisJCWVjaG8gInRoaXMgZmlsZSBpcyBjYWxsZWQgRmlsZV9cJF9mb28ubXciID5GaWxlX1wkX2Zvby5tdyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYW0gImZpbGUgRmlsZV9cJF9mb28ubXciICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV85ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl85IHJlZl9wYWdlXzkKKycKKworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjYXBpdGFsIGF0IHRoZSBiZWdpbm5pbmcgb2YgZmlsZSBuYW1lcycgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMCAmJgorCSgKKwkJY2QgbXdfZGlyXzEwICYmCisJCWVjaG8gIm15IG5ldyBmaWxlIGZvbyIgPmZvby5tdyAmJgorCQllY2hvICJteSBuZXcgZmlsZSBGb28uLi4gRmluZ2VyIGNyb3NzZWQiID5Gb28ubXcgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLWFtICJmaWxlIGZvby5tdyIgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEwICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xMCByZWZfcGFnZV8xMAorJworCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3NwZWNpYWwgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgZmlsZSBuYW1lIGZyb20gbXcgdG8gZ2l0JyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzExICYmCisJd2lraV9lZGl0cGFnZSB7Y2hhcl8xICJleHBlY3QgdG8gYmUgcmVuYW1lZCB7Y2hhcl8xIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgW2NoYXJfMiAiZXhwZWN0IHRvIGJlIHJlbmFtZWQgW2NoYXJfMiIgZmFsc2UgJiYKKwkoCisJCWNkIG13X2Rpcl8xMSAmJgorCQlnaXQgcHVsbAorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEve2NoYXJfMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS9bY2hhcl8yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1B1bGwgcGFnZSB3aXRoIHRpdGxlIGNvbnRhaW5pbmcgIjoiIG90aGVyIHRoYW4gbmFtZXNwYWNlIHNlcGFyYXRvcicgJworCXdpa2lfZWRpdHBhZ2UgRm9vOkJhciBjb250ZW50IGZhbHNlICYmCisJKAorCQljZCBtd19kaXJfMTEgJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL0ZvbzpCYXIubXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHVzaCBwYWdlIHdpdGggdGl0bGUgY29udGFpbmluZyAiOiIgb3RoZXIgdGhhbiBuYW1lc3BhY2Ugc2VwYXJhdG9yJyAnCisJKAorCQljZCBtd19kaXJfMTEgJiYKKwkJZWNobyBjb250ZW50ID5Ob3RBTmFtZVNwYWNlOlBhZ2UubXcgJiYKKwkJZ2l0IGFkZCBOb3RBTmFtZVNwYWNlOlBhZ2UubXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHBhZ2Ugd2l0aCBjb2xvbiIgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9wYWdlX2V4aXN0IE5vdEFOYW1lU3BhY2U6UGFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG9mIGNvcnJlY3QgZm9ybWF0dGluZyBmb3IgZmlsZSBuYW1lIGZyb20gbXcgdG8gZ2l0JyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEyICYmCisJd2lraV9lZGl0cGFnZSBjaGFyXyVfN2JfMSAiZXhwZWN0IHRvIGJlIHJlbmFtZWQgY2hhcntfMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGNoYXJfJV81Yl8yICJleHBlY3QgdG8gYmUgcmVuYW1lZCBjaGFye18yIiBmYWxzZSAmJgorCSgKKwkJY2QgbXdfZGlyXzEyICYmCisJCWdpdCBwdWxsCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMi9DaGFyXHtfMS5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMi9DaGFyXFtfMi5tdyAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xMiAmJgorCW12IHJlZl9wYWdlXzEyL0NoYXJfJV83Yl8xLm13IHJlZl9wYWdlXzEyL0NoYXJce18xLm13ICYmCisJbXYgcmVmX3BhZ2VfMTIvQ2hhcl8lXzViXzIubXcgcmVmX3BhZ2VfMTIvQ2hhclxbXzIubXcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEyIHJlZl9wYWdlXzEyCisnCisKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndGVzdCBvZiBjb3JyZWN0IGZvcm1hdHRpbmcgZm9yIGZpbGUgbmFtZSBiZWdpbm5pbmcgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcicgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xMyAmJgorCSgKKwkJY2QgbXdfZGlyXzEzICYmCisJCWVjaG8gIm15IG5ldyBmaWxlIHtjaGFyXzEiID5ce2NoYXJfMS5tdyAmJgorCQllY2hvICJteSBuZXcgZmlsZSBbY2hhcl8yIiA+XFtjaGFyXzIubXcgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLWFtICJjb21taXR0aW5nIHNvbWUgZXhvdGljIGZpbGUgbmFtZS4uLiIgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVmX3BhZ2VfMTMve2NoYXJfMS5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIHJlZl9wYWdlXzEzL1tjaGFyXzIubXcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEzIHJlZl9wYWdlXzEzCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBvZiBjb3JyZWN0IGZvcm1hdHRpbmcgZm9yIGZpbGUgbmFtZSBmcm9tIGdpdCB0byBtdycgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNCAmJgorCSgKKwkJY2QgbXdfZGlyXzE0ICYmCisJCWVjaG8gIm15IG5ldyBmaWxlIGNoYXJ7XzEiID5DaGFyXHtfMS5tdyAmJgorCQllY2hvICJteSBuZXcgZmlsZSBjaGFyW18yIiA+Q2hhclxbXzIubXcgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gImNvbW1pdHRpbmcgc29tZSBleG90aWMgZmlsZSBuYW1lLi4uIiAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMTQgJiYKKwltdiBtd19kaXJfMTQvQ2hhclx7XzEubXcgbXdfZGlyXzE0L0NoYXJfJV83Yl8xLm13ICYmCisJbXYgbXdfZGlyXzE0L0NoYXJcW18yLm13IG13X2Rpcl8xNC9DaGFyXyVfNWJfMi5tdyAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMTQgcmVmX3BhZ2VfMTQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd2l0aCAvJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgXC9mb1wvbyAidGhpcyBpcyBub3QgaW1wb3J0YW50IiBmYWxzZSAtYz1EZWxldGVkICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTUvJTJGZm8lMkZvLm13ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xNS8lMkZmbyUyRm8ubXcgXC9mb1wvbworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoIHdpdGggLycgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNiAmJgorCWVjaG8gIkkgd2lsbCBiZSBvbiB0aGUgd2lraSIgPm13X2Rpcl8xNi8lMkZmbyUyRm8ubXcgJiYKKwkoCisJCWNkIG13X2Rpcl8xNiAmJgorCQlnaXQgYWRkICUyRmZvJTJGby5tdyAmJgorCQlnaXQgY29tbWl0IC1tICIgJTJGZm8lMkZvIGFkZGVkIiAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX3BhZ2VfZXhpc3QgXC9mb1wvbyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTYvJTJGZm8lMkZvLm13IFwvZm9cL28KKworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3aXRoIFwnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBcXGtvXFxvICJ0aGlzIGlzIG5vdCBpbXBvcnRhbnQiIGZhbHNlIC1jPURlbGV0ZWQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNy9cXGtvXFxvLm13ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xNy9cXGtvXFxvLm13IFxca29cXG8KKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCB3aXRoIFwnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTggJiYKKwllY2hvICJJIHdpbGwgYmUgb24gdGhlIHdpa2kiID5td19kaXJfMTgvXFxrb1xcby5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzE4ICYmCisJCWdpdCBhZGQgXFxrb1xcby5tdyAmJgorCQlnaXQgY29tbWl0IC1tICIgXFxrb1xcbyBhZGRlZCIgJiYKKwkJZ2l0IHB1c2gKKwkpJiYKKwl3aWtpX3BhZ2VfZXhpc3QgXFxrb1xcbyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTgvXFxrb1xcby5tdyBcXGtvXFxvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdpdGggXCBpbiBmb3JtYXQgY29udHJvbCcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIFxcbm9cXG8gInRoaXMgaXMgbm90IGltcG9ydGFudCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xOSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xOS9cXG5vXFxvLm13ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xOS9cXG5vXFxvLm13IFxcbm9cXG8KKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCB3aXRoIFwgaW4gZm9ybWF0IGNvbnRyb2wnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMjAgJiYKKwllY2hvICJJIHdpbGwgYmUgb24gdGhlIHdpa2kiID5td19kaXJfMjAvXFxmb1xcby5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzIwICYmCisJCWdpdCBhZGQgXFxmb1xcby5tdyAmJgorCQlnaXQgY29tbWl0IC1tICIgXFxmb1xcbyBhZGRlZCIgJiYKKwkJZ2l0IHB1c2gKKwkpJiYKKwl3aWtpX3BhZ2VfZXhpc3QgXFxmb1xcbyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMjAvXFxmb1xcby5tdyBcXGZvXFxvCisKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWltcG9ydCBtZXRhLWNoYXJhY3RlcnMgaW4gcGFnZSBuYW1lIChtdyAtPiBnaXQpJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgXCJmaWxlXCJfXFxfZm9vICJleHBlY3QgdG8gYmUgY2FsbGVkIFwiZmlsZVwiX1xcX2ZvbyIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8yMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8yMS9cImZpbGVcIl9cXF9mb28ubXcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMjEgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzIxIHJlZl9wYWdlXzIxCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1pbXBvcnQgbWV0YS1jaGFyYWN0ZXJzIGluIHBhZ2UgbmFtZSAoZ2l0IC0+IG13KSAnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMjIgJiYKKwkoCisJCWNkIG13X2Rpcl8yMiAmJgorCQllY2hvICJ0aGlzIGZpbGUgaXMgY2FsbGVkIFwiZmlsZVwiX1xcX2Zvby5tdyIgPlwiZmlsZVwiX1xcX2ZvbyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYW0gImZpbGUgXCJmaWxlXCJfXFxfZm9vIiAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMjIgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzIyIHJlZl9wYWdlXzIyCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYzLW13LXRvLWdpdC1leHBvcnQtaW1wb3J0LnNoIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2My1tdy10by1naXQtZXhwb3J0LWltcG9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZmYzYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2My1tdy10by1naXQtZXhwb3J0LWltcG9ydC5zaApAQCAtMCwwICsxLDIxNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjCisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIHRlc3RzIGZvciBnaXQtcmVtb3RlLW1lZGlhd2lraQorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBHaXQgTWVkaWF3aWtpIHJlbW90ZSBoZWxwZXI6IGdpdCBwdXNoIGFuZCBnaXQgcHVsbCBzaW1wbGUgdGVzdCBjYXNlcycKKworLiAuL3Rlc3QtZ2l0bXctbGliLnNoCisuICRURVNUX0RJUkVDVE9SWS90ZXN0LWxpYi5zaAorCisKK3Rlc3RfY2hlY2tfcHJlY29uZAorCisKK3Rlc3RfZ2l0X3JlaW1wb3J0ICgpIHsKKwlnaXQgLWMgcmVtb3RlLm9yaWdpbi5kdW1iUHVzaD10cnVlIHB1c2ggJiYKKwlnaXQgLWMgcmVtb3RlLm9yaWdpbi5tZWRpYUltcG9ydD10cnVlIHB1bGwgLS1yZWJhc2UKK30KKworIyBEb24ndCBib3RoZXIgd2l0aCBwZXJtaXNzaW9ucywgYmUgYWRtaW5pc3RyYXRvciBieSBkZWZhdWx0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb25maWcnICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHJlbW90ZS5vcmlnaW4ubXdMb2dpbiBXaWtpQWRtaW4gJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHJlbW90ZS5vcmlnaW4ubXdQYXNzd29yZCBBZG1pblBhc3MgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLXVuc2V0IHJlbW90ZS5vcmlnaW4ubWVkaWFJbXBvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggY2FuIHVwbG9hZCBtZWRpYSAoRmlsZTopIGZpbGVzJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5Gb28udHh0ICYmCisJCWdpdCBhZGQgRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSB0ZXh0IGZpbGUiICYmCisJCWdpdCBwdXNoICYmCisJCSIkUEVSTF9QQVRIIiAtZSAicHJpbnQgU1RET1VUIFwiYmluYXJ5IGNvbnRlbnQ6IFwiLmNocigyNTUpOyIgPkZvby50eHQgJiYKKwkJZ2l0IGFkZCBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhIHRleHQgZmlsZSB3aXRoIGJpbmFyeSBjb250ZW50IiAmJgorCQlnaXQgcHVzaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdvcmtzIG9uIHByZXZpb3VzbHkgY3JlYXRlZCB3aWtpIHdpdGggbWVkaWEgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtd19kaXIgbXdfZGlyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLm1lZGlhaW1wb3J0PXRydWUgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyX2Nsb25lICYmCisJdGVzdF9jbXAgbXdfZGlyX2Nsb25lL0Zvby50eHQgbXdfZGlyL0Zvby50eHQgJiYKKwkoY2QgbXdfZGlyX2Nsb25lICYmIGdpdCBjaGVja291dCBIRUFEXikgJiYKKwkoY2QgbXdfZGlyICYmIGdpdCBjaGVja291dCBIRUFEXikgJiYKKwl0ZXN0X2NtcCBtd19kaXJfY2xvbmUvRm9vLnR4dCBtd19kaXIvRm9vLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCBjYW4gdXBsb2FkIG1lZGlhIChGaWxlOikgZmlsZXMgY29udGFpbmluZyB2YWxpZCBVVEYtOCcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpciAmJgorCSgKKwkJY2QgbXdfZGlyICYmCisJCSIkUEVSTF9QQVRIIiAtZSAicHJpbnQgU1RET1VUIFwiVVRGLTggY29udGVudDogw6nDqMOgw6nDquKCrC5cIjsiID5CYXIudHh0ICYmCisJCWdpdCBhZGQgQmFyLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSB0ZXh0IGZpbGUgd2l0aCBVVEYtOCBjb250ZW50IiAmJgorCQlnaXQgcHVzaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdvcmtzIG9uIHByZXZpb3VzbHkgY3JlYXRlZCB3aWtpIHdpdGggbWVkaWEgZmlsZXMgY29udGFpbmluZyB2YWxpZCBVVEYtOCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG13X2RpciBtd19kaXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ubWVkaWFpbXBvcnQ9dHJ1ZSBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfY2xvbmUgJiYKKwl0ZXN0X2NtcCBtd19kaXJfY2xvbmUvQmFyLnR4dCBtd19kaXIvQmFyLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCAmIHB1bGwgd29yayB3aXRoIGxvY2FsbHkgcmVuYW1lZCBtZWRpYSBmaWxlcycgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIG13X2RpciIgJiYKKwkoCisJCWNkIG13X2RpciAmJgorCQllY2hvICJBIEZpbGUiID5Gb28udHh0ICYmCisJCWdpdCBhZGQgRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSBmaWxlIiAmJgorCQlnaXQgbXYgRm9vLnR4dCBCYXIudHh0ICYmCisJCWdpdCBjb21taXQgLW0gIlJlbmFtZSBhIGZpbGUiICYmCisJCXRlc3RfZ2l0X3JlaW1wb3J0ICYmCisJCWVjaG8gIkEgRmlsZSIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgQmFyLnR4dCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28udHh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCBjYW4gcHJvcGFnYXRlIGxvY2FsIHBhZ2UgZGVsZXRpb24nICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXIiICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLm13ICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+Rm9vLm13ICYmCisJCWdpdCBhZGQgRm9vLm13ICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCB0aGUgcGFnZSBGb28iICYmCisJCWdpdCBwdXNoICYmCisJCXJtIC1mIEZvby5tdyAmJgorCQlnaXQgY29tbWl0IC1hbSAiRGVsZXRlIHRoZSBwYWdlIEZvbyIgJiYKKwkJdGVzdF9naXRfcmVpbXBvcnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLm13CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCBjYW4gcHJvcGFnYXRlIGxvY2FsIG1lZGlhIGZpbGUgZGVsZXRpb24nICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXIiICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5Gb28udHh0ICYmCisJCWdpdCBhZGQgRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgdGhlIHRleHQgZmlsZSBGb28iICYmCisJCWdpdCBybSBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gIkRlbGV0ZSB0aGUgZmlsZSBGb28iICYmCisJCXRlc3RfZ2l0X3JlaW1wb3J0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEZvby50eHQKKwkpCisnCisKKyMgdGVzdCBmYWlsdXJlOiB0aGUgZmlsZSBpcyBjb3JyZWN0bHkgdXBsb2FkZWQsIGFuZCB0aGVuIGRlbGV0ZWQgYnV0CisjIGFzIG5vIHBhZ2UgbGluayB0byBpdCwgdGhlIGltcG9ydCAod2hpY2ggbG9va3MgYXQgcGFnZSByZXZpc2lvbnMpCisjIGRvZXNuJ3Qgbm90aWNlIHRoZSBmaWxlIGRlbGV0aW9uIG9uIHRoZSB3aWtpLiBXZSBmZXRjaCB0aGUgbGlzdCBvZgorIyBmaWxlcyBmcm9tIHRoZSB3aWtpLCBidXQgYXMgdGhlIGZpbGUgaXMgZGVsZXRlZCwgaXQgZG9lc24ndCBhcHBlYXIuCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQgcHVsbCBjb3JyZWN0bHkgaW1wb3J0cyBtZWRpYSBmaWxlIGRlbGV0aW9uIHdoZW4gbm8gcGFnZSBsaW5rIHRvIGl0JyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgbXdfZGlyIiAmJgorCSgKKwkJY2QgbXdfZGlyICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+Rm9vLnR4dCAmJgorCQlnaXQgYWRkIEZvby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIHRoZSB0ZXh0IGZpbGUgRm9vIiAmJgorCQlnaXQgcHVzaCAmJgorCQlnaXQgcm0gRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJEZWxldGUgdGhlIGZpbGUgRm9vIiAmJgorCQl0ZXN0X2dpdF9yZWltcG9ydCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28udHh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCBwcm9wZXJseSB3YXJucyBhYm91dCBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXIiICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJZWNobyAiQSBGaWxlIiA+Zm9vLmZvcmJpZGRlbiAmJgorCQlnaXQgYWRkIGZvby5mb3JiaWRkZW4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgZmlsZSIgJiYKKwkJZ2l0IHB1c2ggMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAiZm9vLmZvcmJpZGRlbiBpcyBub3QgYSBwZXJtaXR0ZWQgZmlsZSIgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHJlcG9zaXRvcnkgd2l0aCBtZWRpYSBmaWxlcycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIHRlc3RwYWdlICJJIGFtIGxpbmtpbmcgYSBmaWxlIFtbRmlsZTpGaWxlLnR4dF1dIiBmYWxzZSAmJgorCWVjaG8gIkZpbGUgY29udGVudCIgPkZpbGUudHh0ICYmCisJd2lraV91cGxvYWRfZmlsZSBGaWxlLnR4dCAmJgorCWVjaG8gIkFub3RoZXIgZmlsZSBjb250ZW50IiA+QW5vdGhlckZpbGUudHh0ICYmCisJd2lraV91cGxvYWRfZmlsZSBBbm90aGVyRmlsZS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdvcmtzIHdpdGggb25lIHNwZWNpZmljIHBhZ2UgY2xvbmVkIGFuZCBtZWRpYWltcG9ydD10cnVlJyAnCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9dGVzdHBhZ2UgXAorCQkgIC1jIHJlbW90ZS5vcmlnaW4ubWVkaWFpbXBvcnQ9dHJ1ZSBcCisJCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE1ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXdfZGlyXzE1IiAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfMTUgMyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNS9UZXN0cGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNS9GaWxlOkZpbGUudHh0Lm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE1L0ZpbGUudHh0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE1L01haW5fUGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNS9GaWxlOkFub3RoZXJGaWxlLnR4dC5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNS9Bbm90aGV0RmlsZS50eHQgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE1L1Rlc3RwYWdlLm13IFRlc3RwYWdlICYmCisJdGVzdF9jbXAgbXdfZGlyXzE1L0ZpbGUudHh0IEZpbGUudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3b3JrcyB3aXRoIG9uZSBzcGVjaWZpYyBwYWdlIGNsb25lZCBhbmQgbWVkaWFpbXBvcnQ9ZmFsc2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtd19kaXJfMTYiICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9dGVzdHBhZ2UgXAorCQkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNiAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfMTYgMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNi9UZXN0cGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNi9GaWxlOkZpbGUudHh0Lm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE2L0ZpbGUudHh0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE2L01haW5fUGFnZS5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTYvVGVzdHBhZ2UubXcgVGVzdHBhZ2UKKycKKworIyBzaG91bGQgYmVoYXZlIGxpa2UgbWVkaWFpbXBvcnQ9ZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3b3JrcyB3aXRoIG9uZSBzcGVjaWZpYyBwYWdlIGNsb25lZCBhbmQgbWVkaWFpbXBvcnQgdW5zZXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXJfMTciICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9dGVzdHBhZ2UgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE3ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8xNyAxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE3L1Rlc3RwYWdlLm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE3L0ZpbGU6RmlsZS50eHQubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTcvRmlsZS50eHQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTcvTWFpbl9QYWdlLm13ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xNy9UZXN0cGFnZS5tdyBUZXN0cGFnZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjQtcHVsbC1ieS1yZXYuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Q5MzY0LXB1bGwtYnktcmV2LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVjMjI0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzY0LXB1bGwtYnktcmV2LnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBHaXQgTWVkaWF3aWtpIHJlbW90ZSBoZWxwZXI6IGdpdCBwdWxsIGJ5IHJldmlzaW9uJworCisuIC4vdGVzdC1naXRtdy1saWIuc2gKKy4gLi9wdXNoLXB1bGwtdGVzdHMuc2gKKy4gJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLnNoCisKK3Rlc3RfY2hlY2tfcHJlY29uZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBtZWRpYXdpa2kuZmV0Y2hTdHJhdGVneSBieV9yZXYKKycKKwordGVzdF9wdXNoX3B1bGwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzY1LWNvbnRpbnVpbmctcXVlcmllcy5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjUtY29udGludWluZy1xdWVyaWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxNjQ1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzY1LWNvbnRpbnVpbmctcXVlcmllcy5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgR2l0IE1lZGlhd2lraSByZW1vdGUgaGVscGVyOiBxdWVyaWVzIHcvIG1vcmUgdGhhbiA1MDAgcmVzdWx0cycKKworLiAuL3Rlc3QtZ2l0bXctbGliLnNoCisuICRURVNUX0RJUkVDVE9SWS90ZXN0LWxpYi5zaAorCit0ZXN0X2NoZWNrX3ByZWNvbmQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgcGFnZSB3LyA+NTAwIHJldmlzaW9ucycgJworCXdpa2lfcmVzZXQgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDUwMSkKKwlkbworCQllY2hvICJjcmVhdGluZyByZXZpc2lvbiAkaSIgJiYKKwkJd2lraV9lZGl0cGFnZSBmb28gInJldmlzaW9uICRpPGJyLz4iIHRydWUKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgcGFnZSB3LyA+NTAwIHJldmlzaW9ucycgJworCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzk0OGEwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy1saWIuc2gKQEAgLTAsMCArMSw0MzIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCisKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKyMgWW91IG1pZ2h0IHdhbnQgdG8gY2hhbmdlIHRoZXNlIG9uZXMKKyMKKworLiAuL3Rlc3QuY29uZmlnCisKK1dJS0lfVVJMPWh0dHA6Ly8iJFNFUlZFUl9BRERSOiRQT1JULyRXSUtJX0RJUl9OQU1FIgorQ1VSUl9ESVI9JChwd2QpCitURVNUX09VVFBVVF9ESVJFQ1RPUlk9JChwd2QpCitURVNUX0RJUkVDVE9SWT0iJENVUlJfRElSIi8uLi8uLi8uLi90CisKK2V4cG9ydCBURVNUX09VVFBVVF9ESVJFQ1RPUlkgVEVTVF9ESVJFQ1RPUlkgQ1VSUl9ESVIKKworaWYgdGVzdCAiJExJR0hUVFBEIiA9ICJmYWxzZSIgOyB0aGVuCisJUE9SVD04MAorZWxzZQorCVdJS0lfRElSX0lOU1Q9IiRDVVJSX0RJUi8kV0VCX1dXVyIKK2ZpCisKK3dpa2lfdXBsb2FkX2ZpbGUgKCkgeworCSIkQ1VSUl9ESVIiL3Rlc3QtZ2l0bXcucGwgdXBsb2FkX2ZpbGUgIiRAIgorfQorCit3aWtpX2dldHBhZ2UgKCkgeworCSIkQ1VSUl9ESVIiL3Rlc3QtZ2l0bXcucGwgZ2V0X3BhZ2UgIiRAIgorfQorCit3aWtpX2RlbGV0ZV9wYWdlICgpIHsKKwkiJENVUlJfRElSIi90ZXN0LWdpdG13LnBsIGRlbGV0ZV9wYWdlICIkQCIKK30KKword2lraV9lZGl0cGFnZSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCBlZGl0X3BhZ2UgIiRAIgorfQorCitkaWUgKCkgeworCWRpZV93aXRoX3N0YXR1cyAxICIkQCIKK30KKworZGllX3dpdGhfc3RhdHVzICgpIHsKKwlzdGF0dXM9JDEKKwlzaGlmdAorCWVjaG8gPiYyICIkKiIKKwlleGl0ICIkc3RhdHVzIgorfQorCisKKyMgQ2hlY2sgdGhlIHByZWNvbmRpdGlvbnMgdG8gcnVuIGdpdC1yZW1vdGUtbWVkaWF3aWtpJ3MgdGVzdHMKK3Rlc3RfY2hlY2tfcHJlY29uZCAoKSB7CisJaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKKwl0aGVuCisJCXNraXBfYWxsPSdza2lwcGluZyBnYXRld2F5IGdpdC1tdyB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCQl0ZXN0X2RvbmUKKwlmaQorCisJR0lUX0VYRUNfUEFUSD0kKGNkICIkKGRpcm5hbWUgIiQwIikiICYmIGNkICIuLi8uLiIgJiYgcHdkKQorCVBBVEg9IiRHSVRfRVhFQ19QQVRIIicvYmluLXdyYXBwZXI6JyIkUEFUSCIKKworCWlmIFsgISAtZCAiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiIF07CisJdGhlbgorCQlza2lwX2FsbD0nc2tpcHBpbmcgZ2F0ZXdheSBnaXQtbXcgdGVzdHMsIG5vIG1lZGlhd2lraSBmb3VuZCcKKwkJdGVzdF9kb25lCisJZmkKK30KKworIyB0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgPGRpcl9naXQ+IDxkaXJfd2lraT4KKyMKKyMgQ29tcGFyZSB0aGUgY29udGVudHMgb2YgZGlyZWN0b3JpZXMgPGRpcl9naXQ+IGFuZCA8ZGlyX3dpa2k+IHdpdGggZGlmZgorIyBhbmQgZXJyb3JzIGlmIHRoZXkgZG8gbm90IG1hdGNoLiBUaGUgcHJvZ3JhbSB3aWxsCisjIG5vdCBsb29rIGludG8gLmdpdCBpbiB0aGUgcHJvY2Vzcy4KKyMgV2FybmluZzogdGhlIGZpcnN0IGFyZ3VtZW50IE1VU1QgYmUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBnaXQgZGF0YQordGVzdF9kaWZmX2RpcmVjdG9yaWVzICgpIHsKKwlybSAtcmYgIiQxX3RtcCIKKwlta2RpciAtcCAiJDFfdG1wIgorCWNwICIkMSIvKi5tdyAiJDFfdG1wIgorCWRpZmYgLXIgLWIgIiQxX3RtcCIgIiQyIgorfQorCisjICQxPTxkaXI+CisjICQyPTxOPgorIworIyBDaGVjayB0aGF0IDxkaXI+IGNvbnRhaW5zIGV4YWN0bHkgPE4+IGZpbGVzCit0ZXN0X2NvbnRhaW5zX05fZmlsZXMgKCkgeworCWlmIHRlc3QgJChscyAtLSAiJDEiIHwgd2MgLWwpIC1uZSAiJDIiOyB0aGVuCisJCWVjaG8gImRpcmVjdG9yeSAkMSBzaG91bGQgY29udGFpbiAkMiBmaWxlcyIKKwkJZWNobyAiaXQgY29udGFpbnMgdGhlc2UgZmlsZXM6IgorCQlscyAiJDEiCisJCWZhbHNlCisJZmkKK30KKworCisjIHdpa2lfY2hlY2tfY29udGVudCA8ZmlsZV9uYW1lPiA8cGFnZV9uYW1lPgorIworIyBDb21wYXJlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgPGZpbGVfbmFtZT4gYW5kIHRoZSB3aWtpIHBhZ2UKKyMgPHBhZ2VfbmFtZT4gYW5kIGV4aXRzIHdpdGggZXJyb3IgMSBpZiB0aGV5IGRvIG5vdCBtYXRjaC4KK3dpa2lfY2hlY2tfY29udGVudCAoKSB7CisJbWtkaXIgLXAgd2lraV90bXAKKwl3aWtpX2dldHBhZ2UgIiQyIiB3aWtpX3RtcAorCSMgcmVwbGFjZW1lbnQgb2YgZm9yYmlkZGVuIGNoYXJhY3RlciBpbiBmaWxlIG5hbWUKKwlwYWdlX25hbWU9JChwcmludGYgIiVzXG4iICIkMiIgfCBzZWQgLWUgInMvXC8vJTJGL2ciKQorCisJZGlmZiAtYiAiJDEiIHdpa2lfdG1wLyIkcGFnZV9uYW1lIi5tdworCWlmIHRlc3QgJD8gLW5lIDAKKwl0aGVuCisJCXJtIC1yZiB3aWtpX3RtcAorCQllcnJvciAiRVJST1I6IGZpbGUgJDIgbm90IGZvdW5kIG9uIHdpa2kiCisJZmkKKwlybSAtcmYgd2lraV90bXAKK30KKworIyB3aWtpX3BhZ2VfZXhpc3QgPHBhZ2VfbmFtZT4KKyMKKyMgQ2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgcGFnZSA8cGFnZV9uYW1lPiBvbiB0aGUgd2lraSBhbmQgZXhpdHMKKyMgd2l0aCBlcnJvciBpZiBpdCBpcyBhYnNlbnQgZnJvbSBpdC4KK3dpa2lfcGFnZV9leGlzdCAoKSB7CisJbWtkaXIgLXAgd2lraV90bXAKKwl3aWtpX2dldHBhZ2UgIiQxIiB3aWtpX3RtcAorCXBhZ2VfbmFtZT0kKHByaW50ZiAiJXNcbiIgIiQxIiB8IHNlZCAicy9cLy8lMkYvZyIpCisJaWYgdGVzdCAtZiB3aWtpX3RtcC8iJHBhZ2VfbmFtZSIubXcgOyB0aGVuCisJCXJtIC1yZiB3aWtpX3RtcAorCWVsc2UKKwkJcm0gLXJmIHdpa2lfdG1wCisJCWVycm9yICJ0ZXN0IGZhaWxlZDogZmlsZSAkMSBub3QgZm91bmQgb24gd2lraSIKKwlmaQorfQorCisjIHdpa2lfZ2V0YWxscGFnZW5hbWUKKyMKKyMgRmV0Y2ggdGhlIG5hbWUgb2YgZWFjaCBwYWdlIG9uIHRoZSB3aWtpLgord2lraV9nZXRhbGxwYWdlbmFtZSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCBnZXRhbGxwYWdlbmFtZQorfQorCisjIHdpa2lfZ2V0YWxscGFnZWNhdGVnb3J5IDxjYXRlZ29yeT4KKyMKKyMgRmV0Y2ggdGhlIG5hbWUgb2YgZWFjaCBwYWdlIGJlbG9uZ2luZyB0byA8Y2F0ZWdvcnk+IG9uIHRoZSB3aWtpLgord2lraV9nZXRhbGxwYWdlY2F0ZWdvcnkgKCkgeworCSIkQ1VSUl9ESVIiL3Rlc3QtZ2l0bXcucGwgZ2V0YWxscGFnZW5hbWUgIiRAIgorfQorCisjIHdpa2lfZ2V0YWxscGFnZSA8ZGVzdF9kaXI+IFs8Y2F0ZWdvcnk+XQorIworIyBGZXRjaCBhbGwgdGhlIHBhZ2VzIGZyb20gdGhlIHdpa2kgYW5kIHBsYWNlIHRoZW0gaW4gdGhlIGRpcmVjdG9yeQorIyA8ZGVzdF9kaXI+LgorIyBJZiA8Y2F0ZWdvcnk+IGlzIGRlZmluZSwgdGhlbiB3aWtpX2dldGFsbHBhZ2UgZmV0Y2ggdGhlIHBhZ2VzIGluY2x1ZGVkCisjIGluIDxjYXRlZ29yeT4uCit3aWtpX2dldGFsbHBhZ2UgKCkgeworCWlmIHRlc3QgLXogIiQyIjsKKwl0aGVuCisJCXdpa2lfZ2V0YWxscGFnZW5hbWUKKwllbHNlCisJCXdpa2lfZ2V0YWxscGFnZWNhdGVnb3J5ICIkMiIKKwlmaQorCW1rZGlyIC1wICIkMSIKKwl3aGlsZSByZWFkIC1yIGxpbmU7IGRvCisJCXdpa2lfZ2V0cGFnZSAiJGxpbmUiICQxOworCWRvbmUgPCBhbGwudHh0Cit9CisKKyMgPT09PT09PT09PT09PT09PT0gSW5zdGFsbCBwYXJ0ID09PT09PT09PT09PT09PT09CisKK2Vycm9yICgpIHsKKwllY2hvICIkQCIgPiYyCisJZXhpdCAxCit9CisKKyMgY29uZmlnX2xpZ2h0dHBkCisjCisjIENyZWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgdGhlIGZvbGRlcnMgbmVjZXNzYXJ5IHRvIHN0YXJ0IGxpZ2h0dHBkLgorIyBPdmVyd3JpdGUgYW55IGV4aXN0aW5nIGZpbGUuCitjb25maWdfbGlnaHR0cGQgKCkgeworCW1rZGlyIC1wICRXRUIKKwlta2RpciAtcCAkV0VCX1RNUAorCW1rZGlyIC1wICRXRUJfV1dXCisJY2F0ID4gJFdFQi9saWdodHRwZC5jb25mIDw8RU9GCisJc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiJENVUlJfRElSLyRXRUJfV1dXIgorCXNlcnZlci5wb3J0ID0gJFBPUlQKKwlzZXJ2ZXIucGlkLWZpbGUgPSAiJENVUlJfRElSLyRXRUJfVE1QL3BpZCIKKworCXNlcnZlci5tb2R1bGVzID0gKAorCSJtb2RfcmV3cml0ZSIsCisJIm1vZF9yZWRpcmVjdCIsCisJIm1vZF9hY2Nlc3MiLAorCSJtb2RfYWNjZXNzbG9nIiwKKwkibW9kX2Zhc3RjZ2kiCisJKQorCisJaW5kZXgtZmlsZS5uYW1lcyA9ICgiaW5kZXgucGhwIiAsICJpbmRleC5odG1sIikKKworCW1pbWV0eXBlLmFzc2lnbgkJICAgID0gKAorCSIucGRmIgkJPT4JImFwcGxpY2F0aW9uL3BkZiIsCisJIi5zaWciCQk9PgkiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZSIsCisJIi5zcGwiCQk9PgkiYXBwbGljYXRpb24vZnV0dXJlc3BsYXNoIiwKKwkiLmNsYXNzIgk9PgkiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKKwkiLnBzIgkJPT4JImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLAorCSIudG9ycmVudCIJPT4JImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIsCisJIi5kdmkiCQk9PgkiYXBwbGljYXRpb24veC1kdmkiLAorCSIuZ3oiCQk9PgkiYXBwbGljYXRpb24veC1nemlwIiwKKwkiLnBhYyIJCT0+CSJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWciLAorCSIuc3dmIgkJPT4JImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiwKKwkiLnRhci5neiIJPT4JImFwcGxpY2F0aW9uL3gtdGd6IiwKKwkiLnRneiIJCT0+CSJhcHBsaWNhdGlvbi94LXRneiIsCisJIi50YXIiCQk9PgkiYXBwbGljYXRpb24veC10YXIiLAorCSIuemlwIgkJPT4JImFwcGxpY2F0aW9uL3ppcCIsCisJIi5tcDMiCQk9PgkiYXVkaW8vbXBlZyIsCisJIi5tM3UiCQk9PgkiYXVkaW8veC1tcGVndXJsIiwKKwkiLndtYSIJCT0+CSJhdWRpby94LW1zLXdtYSIsCisJIi53YXgiCQk9PgkiYXVkaW8veC1tcy13YXgiLAorCSIub2dnIgkJPT4JImFwcGxpY2F0aW9uL29nZyIsCisJIi53YXYiCQk9PgkiYXVkaW8veC13YXYiLAorCSIuZ2lmIgkJPT4JImltYWdlL2dpZiIsCisJIi5qcGciCQk9PgkiaW1hZ2UvanBlZyIsCisJIi5qcGVnIgkJPT4JImltYWdlL2pwZWciLAorCSIucG5nIgkJPT4JImltYWdlL3BuZyIsCisJIi54Ym0iCQk9PgkiaW1hZ2UveC14Yml0bWFwIiwKKwkiLnhwbSIJCT0+CSJpbWFnZS94LXhwaXhtYXAiLAorCSIueHdkIgkJPT4JImltYWdlL3gteHdpbmRvd2R1bXAiLAorCSIuY3NzIgkJPT4JInRleHQvY3NzIiwKKwkiLmh0bWwiCQk9PgkidGV4dC9odG1sIiwKKwkiLmh0bSIJCT0+CSJ0ZXh0L2h0bWwiLAorCSIuanMiCQk9PgkidGV4dC9qYXZhc2NyaXB0IiwKKwkiLmFzYyIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLmMiCQk9PgkidGV4dC9wbGFpbiIsCisJIi5jcHAiCQk9PgkidGV4dC9wbGFpbiIsCisJIi5sb2ciCQk9PgkidGV4dC9wbGFpbiIsCisJIi5jb25mIgkJPT4JInRleHQvcGxhaW4iLAorCSIudGV4dCIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLnR4dCIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLmR0ZCIJCT0+CSJ0ZXh0L3htbCIsCisJIi54bWwiCQk9PgkidGV4dC94bWwiLAorCSIubXBlZyIJCT0+CSJ2aWRlby9tcGVnIiwKKwkiLm1wZyIJCT0+CSJ2aWRlby9tcGVnIiwKKwkiLm1vdiIJCT0+CSJ2aWRlby9xdWlja3RpbWUiLAorCSIucXQiCQk9PgkidmlkZW8vcXVpY2t0aW1lIiwKKwkiLmF2aSIJCT0+CSJ2aWRlby94LW1zdmlkZW8iLAorCSIuYXNmIgkJPT4JInZpZGVvL3gtbXMtYXNmIiwKKwkiLmFzeCIJCT0+CSJ2aWRlby94LW1zLWFzZiIsCisJIi53bXYiCQk9PgkidmlkZW8veC1tcy13bXYiLAorCSIuYnoyIgkJPT4JImFwcGxpY2F0aW9uL3gtYnppcCIsCisJIi50YnoiCQk9PgkiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKwkiLnRhci5iejIiCT0+CSJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiLAorCSIiCQk9PgkidGV4dC9wbGFpbiIKKwkpCisKKwlmYXN0Y2dpLnNlcnZlciA9ICggIi5waHAiID0+CisJKCJsb2NhbGhvc3QiID0+CisJKCAic29ja2V0IiA9PiAiJENVUlJfRElSLyRXRUJfVE1QL3BocC5zb2NrZXQiLAorCSJiaW4tcGF0aCIgPT4gIiRQSFBfRElSL3BocC1jZ2kgLWMgJENVUlJfRElSLyRXRUIvcGhwLmluaSIKKworCSkKKwkpCisJKQorRU9GCisKKwljYXQgPiAkV0VCL3BocC5pbmkgPDxFT0YKKwlzZXNzaW9uLnNhdmVfcGF0aCA9JyRDVVJSX0RJUi8kV0VCX1RNUCcKK0VPRgorfQorCisjIHN0YXJ0X2xpZ2h0dHBkCisjCisjIFN0YXJ0IG9yIHJlc3RhcnQgZGFlbW9uIGxpZ2h0dHBkLiBJZiByZXN0YXJ0LCByZXdyaXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCitzdGFydF9saWdodHRwZCAoKSB7CisJaWYgdGVzdCAtZiAiJFdFQl9UTVAvcGlkIjsgdGhlbgorCQllY2hvICJJbnN0YW5jZSBhbHJlYWR5IHJ1bm5pbmcuIFJlc3RhcnRpbmcuLi4iCisJCXN0b3BfbGlnaHR0cGQKKwlmaQorCWNvbmZpZ19saWdodHRwZAorCSIkTElHSFRUUERfRElSIi9saWdodHRwZCAtZiAiJFdFQiIvbGlnaHR0cGQuY29uZgorCisJaWYgdGVzdCAkPyAtbmUgMCA7IHRoZW4KKwkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkYWVtb24gbGlnaHR0cGQiCisJCWV4aXQgMQorCWZpCit9CisKKyMgc3RvcF9saWdodHRwZAorIworIyBLaWxsIGRhZW1vbiBsaWdodHRwZCBhbmQgcmVtb3ZlcyBmaWxlcyBhbmQgZm9sZGVycyBhc3NvY2lhdGVkLgorc3RvcF9saWdodHRwZCAoKSB7CisJdGVzdCAtZiAiJFdFQl9UTVAvcGlkIiAmJiBraWxsICQoY2F0ICIkV0VCX1RNUC9waWQiKQorfQorCisjIENyZWF0ZSB0aGUgU1FMaXRlIGRhdGFiYXNlIG9mIHRoZSBNZWRpYVdpa2kuIElmIHRoZSBkYXRhYmFzZSBmaWxlIGFscmVhZHkKKyMgZXhpc3RzLCBpdCB3aWxsIGJlIGRlbGV0ZWQuCisjIFRoaXMgc2NyaXB0IHNob3VsZCBiZSBydW5uZWQgZnJvbSB0aGUgZGlyZWN0b3J5IHdoZXJlICRGSUxFU19GT0xERVIgaXMKKyMgbG9jYXRlZC4KK2NyZWF0ZV9kYiAoKSB7CisJcm0gLWYgIiRUTVAvJERCX0ZJTEUiCisKKwllY2hvICJHZW5lcmF0aW5nIHRoZSBTUUxpdGUgZGF0YWJhc2UgZmlsZS4gSXQgY2FuIHRha2Ugc29tZSB0aW1lIC4uLiIKKwkjIFJ1biB0aGUgcGhwIHNjcmlwdCB0byBnZW5lcmF0ZSB0aGUgU1FMaXRlIGRhdGFiYXNlIGZpbGUKKwkjIHdpdGggY1VSTCBjYWxscy4KKwlwaHAgIiRGSUxFU19GT0xERVIvJERCX0lOU1RBTExfU0NSSVBUIiAkKGJhc2VuYW1lICIkREJfRklMRSIgLnNxbGl0ZSkgXAorCQkiJFdJS0lfQURNSU4iICIkV0lLSV9QQVNTVyIgIiRUTVAiICIkUE9SVCIKKworCWlmIFsgISAtZiAiJFRNUC8kREJfRklMRSIgXSA7IHRoZW4KKwkJZXJyb3IgIkNhbid0IGNyZWF0ZSBkYXRhYmFzZSBmaWxlICRUTVAvJERCX0ZJTEUuIFRyeSB0byBydW4gLi9pbnN0YWxsLXdpa2kuc2ggZGVsZXRlIGZpcnN0LiIKKwlmaQorCisJIyBDb3B5IHRoZSBnZW5lcmF0ZWQgZGF0YWJhc2UgZmlsZSBpbnRvIHRoZSBkaXJlY3RvcnkgdGhlCisJIyB1c2VyIGluZGljYXRlZC4KKwljcCAiJFRNUC8kREJfRklMRSIgIiRGSUxFU19GT0xERVIiIHx8CisJCWVycm9yICJVbmFibGUgdG8gY29weSAkVE1QLyREQl9GSUxFIHRvICRGSUxFU19GT0xERVIiCit9CisKKyMgSW5zdGFsbCBhIHdpa2kgaW4geW91ciB3ZWIgc2VydmVyIGRpcmVjdG9yeS4KK3dpa2lfaW5zdGFsbCAoKSB7CisJaWYgdGVzdCAkTElHSFRUUEQgPSAidHJ1ZSIgOyB0aGVuCisJCXN0YXJ0X2xpZ2h0dHBkCisJZmkKKworCVNFUlZFUl9BRERSPSRTRVJWRVJfQUREUjokUE9SVAorCSMgSW4gdGhpcyBwYXJ0LCB3ZSBjaGFuZ2UgZGlyZWN0b3J5IHRvICRUTVAgaW4gb3JkZXIgdG8gZG93bmxvYWQsCisJIyB1bnBhY2sgYW5kIGNvcHkgdGhlIGZpbGVzIG9mIE1lZGlhV2lraQorCSgKKwlta2RpciAtcCAiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiCisJaWYgWyAhIC1kICIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIgXSA7IHRoZW4KKwkJZXJyb3IgIkZvbGRlciAkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSBkb2Vzbid0IGV4aXN0LgorCQlQbGVhc2UgY3JlYXRlIGl0IGFuZCBsYXVuY2ggdGhlIHNjcmlwdCBhZ2Fpbi4iCisJZmkKKworCSMgRmV0Y2ggTWVkaWFXaWtpJ3MgYXJjaGl2ZSBpZiBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBUTVAgZGlyZWN0b3J5CisJTVdfRklMRU5BTUU9Im1lZGlhd2lraS0kTVdfVkVSU0lPTl9NQUpPUi4kTVdfVkVSU0lPTl9NSU5PUi50YXIuZ3oiCisJY2QgIiRUTVAiCisJaWYgWyAhIC1mICRNV19GSUxFTkFNRSBdIDsgdGhlbgorCQllY2hvICJEb3dubG9hZGluZyAkTVdfVkVSU0lPTl9NQUpPUi4kTVdfVkVSU0lPTl9NSU5PUiBzb3VyY2VzIC4uLiIKKwkJd2dldCAiaHR0cDovL2Rvd25sb2FkLndpa2ltZWRpYS5vcmcvbWVkaWF3aWtpLyRNV19WRVJTSU9OX01BSk9SLyRNV19GSUxFTkFNRSIgfHwKKwkJCWVycm9yICJVbmFibGUgdG8gZG93bmxvYWQgIlwKKwkJCSJodHRwOi8vZG93bmxvYWQud2lraW1lZGlhLm9yZy9tZWRpYXdpa2kvJE1XX1ZFUlNJT05fTUFKT1IvIlwKKwkJCSIkTVdfRklMRU5BTUUuICJcCisJCQkiUGxlYXNlIGZpeCB5b3VyIGNvbm5lY3Rpb24gYW5kIGxhdW5jaCB0aGUgc2NyaXB0IGFnYWluLiIKKwkJZWNobyAiJE1XX0ZJTEVOQU1FIGRvd25sb2FkZWQgaW4gJChwd2QpLiAiXAorCQkJIllvdSBjYW4gZGVsZXRlIGl0IGxhdGVyIGlmIHlvdSB3YW50LiIKKwllbHNlCisJCWVjaG8gIlJldXNpbmcgZXhpc3RpbmcgJE1XX0ZJTEVOQU1FIGRvd25sb2FkZWQgaW4gJChwd2QpLiIKKwlmaQorCWFyY2hpdmVfYWJzX3BhdGg9JChwd2QpLyRNV19GSUxFTkFNRQorCWNkICIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRS8iIHx8CisJCWVycm9yICJjYW4ndCBjZCB0byAkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRS8iCisJdGFyIHh6ZiAiJGFyY2hpdmVfYWJzX3BhdGgiIC0tc3RyaXAtY29tcG9uZW50cz0xIHx8CisJCWVycm9yICJVbmFibGUgdG8gZXh0cmFjdCBXaWtpTWVkaWEncyBmaWxlcyBmcm9tICRhcmNoaXZlX2Fic19wYXRoIHRvICJcCisJCQkiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiCisJKSB8fCBleGl0IDEKKworCWNyZWF0ZV9kYgorCisJIyBDb3B5IHRoZSBnZW5lcmljIExvY2FsU2V0dGluZ3MucGhwIGluIHRoZSB3ZWIgc2VydmVyJ3MgZGlyZWN0b3J5CisJIyBBbmQgbW9kaWZ5IHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvIHRoZSBvbmVzIHNldCBhdCB0aGUgdG9wCisJIyBvZiB0aGlzIHNjcmlwdC4KKwkjIE5vdGUgdGhhdCBMb2NhbFNldHRpbmdzLnBocCBpcyBuZXZlciBtb2RpZmllZC4KKwlpZiBbICEgLWYgIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy5waHAiIF0gOyB0aGVuCisJCWVycm9yICJDYW4ndCBmaW5kICRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy5waHAgIiBcCisJCQkiaW4gdGhlIGN1cnJlbnQgZm9sZGVyLiAiXAorCQkiUGxlYXNlIHJ1biB0aGUgc2NyaXB0IGluc2lkZSBpdHMgZm9sZGVyLiIKKwlmaQorCWNwICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MucGhwIiBcCisJCSIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgfHwKKwkJZXJyb3IgIlVuYWJsZSB0byBjb3B5ICRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy5waHAgIiBcCisJCSJ0byAkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIKKworCSMgUGFyc2UgYW5kIHNldCB0aGUgTG9jYWxTZXR0aW5ncyBmaWxlIG9mIHRoZSB1c2VyIGFjY29yZGluZyB0byB0aGUKKwkjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIHNlY3Rpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNjcmlwdAorCWZpbGVfc3dhcD0iJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXN3YXAucGhwIgorCXNlZCAicyxAV0dfU0NSSVBUX1BBVEhALC8kV0lLSV9ESVJfTkFNRSwiIFwKKwkJIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiA+ICIkZmlsZV9zd2FwIgorCW12ICIkZmlsZV9zd2FwIiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiCisJc2VkICJzLEBXR19TRVJWRVJALGh0dHA6Ly8kU0VSVkVSX0FERFIsIiBcCisJCSIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgPiAiJGZpbGVfc3dhcCIKKwltdiAiJGZpbGVfc3dhcCIgIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIgorCXNlZCAicyxAV0dfU1FMSVRFX0RBVEFESVJALCRUTVAsIiBcCisJCSIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgPiAiJGZpbGVfc3dhcCIKKwltdiAiJGZpbGVfc3dhcCIgIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIgorCXNlZCAicyxAV0dfU1FMSVRFX0RBVEFGSUxFQCwkKCBiYXNlbmFtZSAkREJfRklMRSAuc3FsaXRlKSwiIFwKKwkJIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiA+ICIkZmlsZV9zd2FwIgorCW12ICIkZmlsZV9zd2FwIiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiCisKKwltdiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiIFwKKwkJIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FL0xvY2FsU2V0dGluZ3MucGhwIiB8fAorCQllcnJvciAiVW5hYmxlIHRvIG1vdmUgJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiIFwKKwkJImluICRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIgorCWVjaG8gIkZpbGUgJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLnBocCBpcyBzZXQgaW4iIFwKKwkJIiAkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIKKworCWVjaG8gIllvdXIgd2lraSBoYXMgYmVlbiBpbnN0YWxsZWQuIFlvdSBjYW4gY2hlY2sgaXQgYXQKKwkJaHR0cDovLyRTRVJWRVJfQUREUi8kV0lLSV9ESVJfTkFNRSIKK30KKworIyBSZXNldCB0aGUgZGF0YWJhc2Ugb2YgdGhlIHdpa2kgYW5kIHRoZSBwYXNzd29yZCBvZiB0aGUgYWRtaW4KKyMKKyMgV2FybmluZzogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBvbmx5IGluIGEgc3ViZGlyZWN0b3J5IG9mIHQvIGRpcmVjdG9yeQord2lraV9yZXNldCAoKSB7CisJIyBDb3B5IGluaXRpYWwgZGF0YWJhc2Ugb2YgdGhlIHdpa2kKKwlpZiBbICEgLWYgIi4uLyRGSUxFU19GT0xERVIvJERCX0ZJTEUiIF0gOyB0aGVuCisJCWVycm9yICJDYW4ndCBmaW5kIC4uLyRGSUxFU19GT0xERVIvJERCX0ZJTEUgaW4gdGhlIGN1cnJlbnQgZm9sZGVyLiIKKwlmaQorCWNwICIuLi8kRklMRVNfRk9MREVSLyREQl9GSUxFIiAiJFRNUCIgfHwKKwkJZXJyb3IgIkNhbid0IGNvcHkgLi4vJEZJTEVTX0ZPTERFUi8kREJfRklMRSBpbiAkVE1QIgorCWVjaG8gIkZpbGUgJEZJTEVTX0ZPTERFUi8kREJfRklMRSBpcyBzZXQgaW4gJFRNUCIKK30KKworIyBEZWxldGUgdGhlIHdpa2kgY3JlYXRlZCBpbiB0aGUgd2ViIHNlcnZlcidzIGRpcmVjdG9yeSBhbmQgYWxsIGl0cyBjb250ZW50CisjIHNhdmVkIGluIHRoZSBkYXRhYmFzZS4KK3dpa2lfZGVsZXRlICgpIHsKKwlpZiB0ZXN0ICRMSUdIVFRQRCA9ICJ0cnVlIjsgdGhlbgorCQlzdG9wX2xpZ2h0dHBkCisJCXJtIC1mciAiJFdFQiIKKwllbHNlCisJCSMgRGVsZXRlIHRoZSB3aWtpJ3MgZGlyZWN0b3J5LgorCQlybSAtcmYgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIiB8fAorCQkJZXJyb3IgIldpa2kncyBkaXJlY3RvcnkgJFdJS0lfRElSX0lOU1QvIiBcCisJCQkiJFdJS0lfRElSX05BTUUgY291bGQgbm90IGJlIGRlbGV0ZWQiCisJCSMgRGVsZXRlIHRoZSB3aWtpJ3MgU1FMaXRlIGRhdGFiYXNlLgorCQlybSAtZiAiJFRNUC8kREJfRklMRSIgfHwKKwkJCWVycm9yICJEYXRhYmFzZSAkVE1QLyREQl9GSUxFIGNvdWxkIG5vdCBiZSBkZWxldGVkLiIKKwlmaQorCisJIyBEZWxldGUgdGhlIHdpa2kncyBTUUxpdGUgZGF0YWJhc2UKKwlybSAtZiAiJFRNUC8kREJfRklMRSIgfHwgZXJyb3IgIkRhdGFiYXNlICRUTVAvJERCX0ZJTEUgY291bGQgbm90IGJlIGRlbGV0ZWQuIgorCXJtIC1mICIkRklMRVNfRk9MREVSLyREQl9GSUxFIgorCXJtIC1yZiAiJFRNUC9tZWRpYXdpa2ktJE1XX1ZFUlNJT05fTUFKT1IuJE1XX1ZFUlNJT05fTUlOT1IudGFyLmd6IgorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LnBsIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmZjc2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXcucGwKQEAgLTAsMCArMSwyMjUgQEAKKyMhL3Vzci9iaW4vcGVybCAtdyAtcworIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyBVc2FnZToKKyMgICAgICAgLi90ZXN0LWdpdG13LnBsIDxjb21tYW5kPiBbYXJndW1lbnRdKgorIyBFeGVjdXRlIGluIHRlcm1pbmFsIHVzaW5nIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGFzIGZpcnN0CisjIHBhcmFtZXRlciwgYW5kIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cyBhcyBmb2xsb3dpbmcgcGFyYW1ldGVycworIworIyBFeGFtcGxlOgorIyAgICAgLi90ZXN0LWdpdG13LnBsICJnZXRfcGFnZSIgZm9vIC4KKyMgd2lsbCBjYWxsIDx3aWtpX2dldHBhZ2U+IHdpdGggYXJndW1lbnRzIDxmb28+IGFuZCA8Lj4KKyMKKyMgQXZhaWxhYmxlIGZ1bmN0aW9ucyBhcmU6CisjICAgICAiZ2V0X3BhZ2UiCisjICAgICAiZGVsZXRlX3BhZ2UiCisjICAgICAiZWRpdF9wYWdlIgorIyAgICAgImdldGFsbHBhZ2VuYW1lIgorCit1c2UgTWVkaWFXaWtpOjpBUEk7Cit1c2UgR2V0b3B0OjpMb25nOwordXNlIGVuY29kaW5nICd1dGY4JzsKK3VzZSBEYXRlVGltZTo6Rm9ybWF0OjpJU084NjAxOwordXNlIG9wZW4gJzplbmNvZGluZyh1dGY4KSc7Cit1c2UgY29uc3RhbnQgU0xBU0hfUkVQTEFDRU1FTlQgPT4gIiUyRiI7CisKKyNQYXJzaW5nIG9mIHRoZSBjb25maWcgZmlsZQorCitteSAkY29uZmlnZmlsZSA9ICIkRU5WeydDVVJSX0RJUid9L3Rlc3QuY29uZmlnIjsKK215ICVjb25maWc7CitvcGVuIG15ICRDT05GSUcsICI8IiwgICRjb25maWdmaWxlIG9yIGRpZSAiY2FuJ3Qgb3BlbiAkY29uZmlnZmlsZTogJCEiOword2hpbGUgKDwkQ09ORklHPikKK3sKKwljaG9tcDsKKwlzLyMuKi8vOworCXMvXlxzKy8vOworCXMvXHMrJC8vOworCW5leHQgdW5sZXNzIGxlbmd0aDsKKwlteSAoJGtleSwgJHZhbHVlKSA9IHNwbGl0ICgvXHMqPVxzKi8sJF8sIDIpOworCSRjb25maWd7JGtleX0gPSAkdmFsdWU7CisJbGFzdCBpZiAoJGtleSBlcSAnTElHSFRUUEQnIGFuZCAkdmFsdWUgZXEgJ2ZhbHNlJyk7CisJbGFzdCBpZiAoJGtleSBlcSAnUE9SVCcpOworfQorY2xvc2UgJENPTkZJRyBvciBkaWUgImNhbid0IGNsb3NlICRjb25maWdmaWxlOiAkISI7CisKK215ICR3aWtpX2FkZHJlc3MgPSAiaHR0cDovLyRjb25maWd7J1NFUlZFUl9BRERSJ30iLiI6Ii4iJGNvbmZpZ3snUE9SVCd9IjsKK215ICR3aWtpX3VybCA9ICIkd2lraV9hZGRyZXNzLyRjb25maWd7J1dJS0lfRElSX05BTUUnfS9hcGkucGhwIjsKK215ICR3aWtpX2FkbWluID0gIiRjb25maWd7J1dJS0lfQURNSU4nfSI7CitteSAkd2lraV9hZG1pbl9wYXNzID0gIiRjb25maWd7J1dJS0lfUEFTU1cnfSI7CitteSAkbXcgPSBNZWRpYVdpa2k6OkFQSS0+bmV3OworJG13LT57Y29uZmlnfS0+e2FwaV91cmx9ID0gJHdpa2lfdXJsOworCisKKyMgd2lraV9sb2dpbiA8bmFtZT4gPHBhc3N3b3JkPgorIworIyBMb2dzIHRoZSB1c2VyIHdpdGggPG5hbWU+IGFuZCA8cGFzc3dvcmQ+IGluIHRoZSBnbG9iYWwgdmFyaWFibGUKKyMgb2YgdGhlIG1lZGlhd2lraSAkbXcKK3N1YiB3aWtpX2xvZ2luIHsKKwkkbXctPmxvZ2luKCB7IGxnbmFtZSA9PiAiJF9bMF0iLGxncGFzc3dvcmQgPT4gIiRfWzFdIiB9ICkKKwl8fCBkaWUgImdldHBhZ2U6IGxvZ2luIGZhaWxlZCI7Cit9CisKKyMgd2lraV9nZXRwYWdlIDx3aWtpX3BhZ2U+IDxkZXN0X3BhdGg+CisjCisjIGZldGNoIGEgcGFnZSA8d2lraV9wYWdlPiBmcm9tIHRoZSB3aWtpIHJlZmVyZW5jZWQgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZQorIyAkbXcgYW5kIGNvcGllcyBpdHMgY29udGVudCBpbiBkaXJlY3RvcnkgZGVzdF9wYXRoCitzdWIgd2lraV9nZXRwYWdlIHsKKwlteSAkcGFnZW5hbWUgPSAkX1swXTsKKwlteSAkZGVzdGRpciA9ICRfWzFdOworCisJbXkgJHBhZ2UgPSAkbXctPmdldF9wYWdlKCB7IHRpdGxlID0+ICRwYWdlbmFtZSB9ICk7CisJaWYgKCFkZWZpbmVkKCRwYWdlKSkgeworCQlkaWUgImdldHBhZ2U6IHdpa2kgZG9lcyBub3QgZXhpc3QiOworCX0KKworCW15ICRjb250ZW50ID0gJHBhZ2UtPnsnKid9OworCWlmICghZGVmaW5lZCgkY29udGVudCkpIHsKKwkJZGllICJnZXRwYWdlOiBwYWdlIGRvZXMgbm90IGV4aXN0IjsKKwl9CisKKwkkcGFnZW5hbWU9JHBhZ2UtPnsndGl0bGUnfTsKKwkjIFJlcGxhY2Ugc3BhY2VzIGJ5IHVuZGVyc2NvcmUgaW4gdGhlIHBhZ2UgbmFtZQorCSRwYWdlbmFtZSA9fiBzLyAvXy9nOworCSRwYWdlbmFtZSA9fiBzL1wvLyUyRi9nOworCW9wZW4obXkgJGZpbGUsICI+JGRlc3RkaXIvJHBhZ2VuYW1lLm13Iik7CisJcHJpbnQgJGZpbGUgIiRjb250ZW50IjsKKwljbG9zZSAoJGZpbGUpOworCit9CisKKyMgd2lraV9kZWxldGVfcGFnZSA8cGFnZV9uYW1lPgorIworIyBkZWxldGUgdGhlIHBhZ2Ugd2l0aCBuYW1lIDxwYWdlX25hbWU+IGZyb20gdGhlIHdpa2kgcmVmZXJlbmNlZAorIyBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlICRtdworc3ViIHdpa2lfZGVsZXRlX3BhZ2UgeworCW15ICRwYWdlbmFtZSA9ICRfWzBdOworCisJbXkgJGV4aXN0PSRtdy0+Z2V0X3BhZ2Uoe3RpdGxlID0+ICRwYWdlbmFtZX0pOworCisJaWYgKGRlZmluZWQoJGV4aXN0LT57JyonfSkpeworCQkkbXctPmVkaXQoeyBhY3Rpb24gPT4gJ2RlbGV0ZScsCisJCQkJdGl0bGUgPT4gJHBhZ2VuYW1lfSkKKwkJfHwgZGllICRtdy0+e2Vycm9yfS0+e2NvZGV9IC4gIjogIiAuICRtdy0+e2Vycm9yfS0+e2RldGFpbHN9OworCX0gZWxzZSB7CisJCWRpZSAibm8gcGFnZSB3aXRoIHN1Y2ggbmFtZSBmb3VuZDogJHBhZ2VuYW1lXG4iOworCX0KK30KKworIyB3aWtpX2VkaXRwYWdlIDx3aWtpX3BhZ2U+IDx3aWtpX2NvbnRlbnQ+IDx3aWtpX2FwcGVuZD4gWy1jPTxjYXRlZ29yeT5dIFstcz08c3VtbWFyeT5dCisjCisjIEVkaXQgYSBwYWdlIG5hbWVkIDx3aWtpX3BhZ2U+IHdpdGggY29udGVudCA8d2lraV9jb250ZW50PiBvbiB0aGUgd2lraQorIyByZWZlcmVuY2VkIHdpdGggdGhlIGdsb2JhbCB2YXJpYWJsZSAkbXcKKyMgSWYgPHdpa2lfYXBwZW5kPiA9PSB0cnVlIDogYXBwZW5kIDx3aWtpX2NvbnRlbnQ+IGF0IHRoZSBlbmQgb2YgdGhlIGFjdHVhbAorIyBjb250ZW50IG9mIHRoZSBwYWdlIDx3aWtpX3BhZ2U+CisjIElmIDx3aWtfcGFnZT4gZG9lc24ndCBleGlzdCwgdGhhdCBwYWdlIGlzIGNyZWF0ZWQgd2l0aCB0aGUgPHdpa2lfY29udGVudD4KK3N1YiB3aWtpX2VkaXRwYWdlIHsKKwlteSAkd2lraV9wYWdlID0gJF9bMF07CisJbXkgJHdpa2lfY29udGVudCA9ICRfWzFdOworCW15ICR3aWtpX2FwcGVuZCA9ICRfWzJdOworCW15ICRzdW1tYXJ5ID0gIiI7CisJbXkgKCRzdW1tLCAkY2F0KSA9ICgpOworCUdldE9wdGlvbnMoJ3M9cycgPT4gXCRzdW1tLCAnYz1zJyA9PiBcJGNhdCk7CisKKwlteSAkYXBwZW5kID0gMDsKKwlpZiAoZGVmaW5lZCgkd2lraV9hcHBlbmQpICYmICR3aWtpX2FwcGVuZCBlcSAndHJ1ZScpIHsKKwkJJGFwcGVuZD0xOworCX0KKworCW15ICRwcmV2aW91c190ZXh0ID0iIjsKKworCWlmICgkYXBwZW5kKSB7CisJCW15ICRyZWYgPSAkbXctPmdldF9wYWdlKCB7IHRpdGxlID0+ICR3aWtpX3BhZ2UgfSApOworCQkkcHJldmlvdXNfdGV4dCA9ICRyZWYtPnsnKid9OworCX0KKworCW15ICR0ZXh0ID0gJHdpa2lfY29udGVudDsKKwlpZiAoZGVmaW5lZCgkcHJldmlvdXNfdGV4dCkpIHsKKwkJJHRleHQ9IiRwcmV2aW91c190ZXh0JHRleHQiOworCX0KKworCSMgRXZlbnR1YWxseSwgYWRkIHRoaXMgcGFnZSB0byBhIGNhdGVnb3J5LgorCWlmIChkZWZpbmVkKCRjYXQpKSB7CisJCW15ICRjYXRlZ29yeV9uYW1lPSJbW0NhdGVnb3J5OiRjYXRdXSI7CisJCSR0ZXh0PSIkdGV4dFxuICRjYXRlZ29yeV9uYW1lIjsKKwl9CisJaWYoZGVmaW5lZCgkc3VtbSkpeworCQkkc3VtbWFyeT0kc3VtbTsKKwl9CisKKwkkbXctPmVkaXQoIHsgYWN0aW9uID0+ICdlZGl0JywgdGl0bGUgPT4gJHdpa2lfcGFnZSwgc3VtbWFyeSA9PiAkc3VtbWFyeSwgdGV4dCA9PiAiJHRleHQifSApOworfQorCisjIHdpa2lfZ2V0YWxscGFnZW5hbWUgWzxjYXRlZ29yeT5dCisjCisjIEZldGNoIGFsbCBwYWdlcyBvZiB0aGUgd2lraSByZWZlcmVuY2VkIGJ5IHRoZSBnbG9iYWwgdmFyaWFibGUgJG13CisjIGFuZCBwcmludCB0aGUgbmFtZXMgb2YgZWFjaCBvbmUgaW4gdGhlIGZpbGUgYWxsLnR4dCB3aXRoIGEgbmV3IGxpbmUKKyMgKCJcbiIpIGJldHdlZW4gdGhlc2UuCisjIElmIHRoZSBhcmd1bWVudCA8Y2F0ZWdvcnk+IGlzIGRlZmluZWQsIHRoZW4gdGhpcyBmdW5jdGlvbiBnZXQgb25seSB0aGUgcGFnZXMKKyMgYmVsb25naW5nIHRvIDxjYXRlZ29yeT4uCitzdWIgd2lraV9nZXRhbGxwYWdlbmFtZSB7CisJIyBmZXRjaCB0aGUgcGFnZXMgb2YgdGhlIHdpa2kKKwlpZiAoZGVmaW5lZCgkX1swXSkpIHsKKwkJbXkgJG13X3BhZ2VzID0gJG13LT5saXN0ICggeyBhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJCQlsaXN0ID0+ICdjYXRlZ29yeW1lbWJlcnMnLAorCQkJCWNtdGl0bGUgPT4gIkNhdGVnb3J5OiRfWzBdIiwKKwkJCQljbW5hbWVzcGFjZSA9PiAwLAorCQkJCWNtbGltaXQgPT4gNTAwIH0sCisJCSkKKwkJfHwgZGllICRtdy0+e2Vycm9yfS0+e2NvZGV9LiI6ICIuJG13LT57ZXJyb3J9LT57ZGV0YWlsc307CisJCW9wZW4obXkgJGZpbGUsICI+YWxsLnR4dCIpOworCQlmb3JlYWNoIG15ICRwYWdlIChAeyRtd19wYWdlc30pIHsKKwkJCXByaW50ICRmaWxlICIkcGFnZS0+e3RpdGxlfVxuIjsKKwkJfQorCQljbG9zZSAoJGZpbGUpOworCisJfSBlbHNlIHsKKwkJbXkgJG13X3BhZ2VzID0gJG13LT5saXN0KHsKKwkJCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJCQlsaXN0ID0+ICdhbGxwYWdlcycsCisJCQkJYXBsaW1pdCA9PiA1MDAsCisJCQl9KQorCQl8fCBkaWUgJG13LT57ZXJyb3J9LT57Y29kZX0uIjogIi4kbXctPntlcnJvcn0tPntkZXRhaWxzfTsKKwkJb3BlbihteSAkZmlsZSwgIj5hbGwudHh0Iik7CisJCWZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgeworCQkJcHJpbnQgJGZpbGUgIiRwYWdlLT57dGl0bGV9XG4iOworCQl9CisJCWNsb3NlICgkZmlsZSk7CisJfQorfQorCitzdWIgd2lraV91cGxvYWRfZmlsZSB7CisJbXkgJGZpbGVfbmFtZSA9ICRfWzBdOworCW15ICRyZXN1bHRhdCA9ICRtdy0+ZWRpdCAoIHsKKwkJYWN0aW9uID0+ICd1cGxvYWQnLAorCQlmaWxlbmFtZSA9PiAkZmlsZV9uYW1lLAorCQljb21tZW50ID0+ICd1cGxvYWQgYSBmaWxlJywKKwkJZmlsZSA9PiBbICRmaWxlX25hbWUgXSwKKwkJaWdub3Jld2FybmluZ3M9PjEsCisJfSwgeworCQlza2lwX2VuY29kaW5nID0+IDEKKwl9ICkgfHwgZGllICRtdy0+e2Vycm9yfS0+e2NvZGV9IC4gJyA6ICcgLiAkbXctPntlcnJvcn0tPntkZXRhaWxzfTsKK30KKworCisKKyMgTWFpbiBwYXJ0IG9mIHRoaXMgc2NyaXB0OiBwYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworIyBhbmQgc2VsZWN0IHdoaWNoIGZ1bmN0aW9uIHRvIGV4ZWN1dGUKK215ICRmY3RfdG9fY2FsbCA9IHNoaWZ0OworCit3aWtpX2xvZ2luKCR3aWtpX2FkbWluLCAkd2lraV9hZG1pbl9wYXNzKTsKKworbXkgJWZ1bmN0aW9uc190b19jYWxsID0gcXcoCisJdXBsb2FkX2ZpbGUgICAgd2lraV91cGxvYWRfZmlsZQorCWdldF9wYWdlICAgICAgIHdpa2lfZ2V0cGFnZQorCWRlbGV0ZV9wYWdlICAgIHdpa2lfZGVsZXRlX3BhZ2UKKwllZGl0X3BhZ2UgICAgICB3aWtpX2VkaXRwYWdlCisJZ2V0YWxscGFnZW5hbWUgd2lraV9nZXRhbGxwYWdlbmFtZQorKTsKK2RpZSAiJDAgRVJST1I6IHdyb25nIGFyZ3VtZW50IiB1bmxlc3MgZXhpc3RzICRmdW5jdGlvbnNfdG9fY2FsbHskZmN0X3RvX2NhbGx9OworJnskZnVuY3Rpb25zX3RvX2NhbGx7JGZjdF90b19jYWxsfX0oQEFSR1YpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90ZXN0LmNvbmZpZyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhMDY4NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC5jb25maWcKQEAgLTAsMCArMSwzNyBAQAorIyBOYW1lIG9mIHRoZSB3ZWIgc2VydmVyJ3MgZGlyZWN0b3J5IGRlZGljYXRlZCB0byB0aGUgd2lraSBpcyBXSUtJX0RJUl9OQU1FCitXSUtJX0RJUl9OQU1FPXdpa2kKKworIyBMb2dpbiBhbmQgcGFzc3dvcmQgb2YgdGhlIHdpa2kncyBhZG1pbgorV0lLSV9BRE1JTj1XaWtpQWRtaW4KK1dJS0lfUEFTU1c9QWRtaW5QYXNzCisKKyMgQWRkcmVzcyBvZiB0aGUgd2ViIHNlcnZlcgorU0VSVkVSX0FERFI9bG9jYWxob3N0CisKKyMgU1FMaXRlIGRhdGFiYXNlIG9mIHRoZSB3aWtpLCBuYW1lZCBEQl9GSUxFLCBpcyBsb2NhdGVkIGluIFRNUAorVE1QPS90bXAKK0RCX0ZJTEU9d2lraWRiLnNxbGl0ZQorCisjIElmIExJR0hUVFBEIGlzIG5vdCBzZXQgdG8gdHJ1ZSwgdGhlIHNjcmlwdCB3aWxsIHVzZSB0aGUgZGVmYXVsdAorIyB3ZWIgc2VydmVyIHJ1bm5pbmcgaW4gV0lLSV9ESVJfSU5TVC4KK1dJS0lfRElSX0lOU1Q9L3Zhci93d3cKKworIyBJZiBMSUdIVFRQRCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHNjcmlwdCB3aWxsIHVzZSBMaWdodHRwZCB0byBydW4KKyMgdGhlIHdpa2kuCitMSUdIVFRQRD10cnVlCisKKyMgVGhlIHZhcmlhYmxlcyBiZWxvdyBhcmUgdXNlZnVsIG9ubHkgaWYgTElHSFRUUEQgaXMgc2V0IHRvIHRydWUuCitQT1JUPTEyMzQKK1BIUF9ESVI9L3Vzci9iaW4KK0xJR0hUVFBEX0RJUj0vdXNyL3NiaW4KK1dFQj1XRUIKK1dFQl9UTVA9JFdFQi90bXAKK1dFQl9XV1c9JFdFQi93d3cKKworIyBUaGUgdmFyaWFibGVzIGJlbG93IGFyZSB1c2VkIGJ5IHRoZSBzY3JpcHQgdG8gaW5zdGFsbCBhIHdpa2kuCisjIFlvdSBzaG91bGQgbm90IG1vZGlmeSB0aGVzZSB1bmxlc3MgeW91IGFyZSBtb2RpZnlpbmcgdGhlIHNjcmlwdCBpdHNlbGYuCisjIHRlc3RlZCB2ZXJzaW9uczogMS4xOS5YIC0+IDEuMjEuMQorTVdfVkVSU0lPTl9NQUpPUj0xLjIxCitNV19WRVJTSU9OX01JTk9SPTEKK0ZJTEVTX0ZPTERFUj1pbnN0YWxsLXdpa2kKK0RCX0lOU1RBTExfU0NSSVBUPWRiX2luc3RhbGwucGhwCmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTElDRU5TRSBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDU2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTElDRU5TRQpAQCAtMCwwICsxLDIwMiBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9NYWtlZmlsZSBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmI4NGJhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL01ha2VmaWxlCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworQlVJTERfTEFCRUw9JChzaGVsbCBjdXQgLWQiICIgLWYzIC4uLy4uL0dJVC1WRVJTSU9OLUZJTEUpCitUQVJfT1VUPSQoc2hlbGwgZ28gZW52IEdPT1MpXyQoc2hlbGwgZ28gZW52IEdPQVJDSCkudGFyLmd6CisKK2FsbDogZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHkgXAorCWdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwCisKK2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHk6IGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcworCWxuIC1mIC1zIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5CisKK2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwOiBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMKKwlsbiAtZiAtcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAKKworZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzOgorCWNhc2UgJCQoZ28gdmVyc2lvbikgaW4gXAorCSJnbyB2ZXJzaW9uIGdvIjEuWzAtNV0uKikgRVE9IiAiIDs7ICopIEVRPSI9IiA7OyBlc2FjICYmIFwKKwlnbyBidWlsZCAtbyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgXAorCQktbGRmbGFncyAiLVggbWFpbi5fQlVJTERfRU1CRURfTEFCRUwkJHtFUX0kKEJVSUxEX0xBQkVMKSIKKworY2xlYW46CisJcm0gLWYgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAqICoudGFyLmd6CisKK3RhcjogY2xlYW4gYWxsCisJQGNobW9kIDU1NSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMKKwlAdGFyIC1jemYgJChUQVJfT1VUKSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cCogUkVBRE1FIExJQ0VOU0UKKwlAZWNobworCUBlY2hvICJDcmVhdGVkICQoVEFSX09VVCkiCmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvUkVBRE1FIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzRjZDhkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL1JFQURNRQpAQCAtMCwwICsxLDcyIEBACitnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMKKworVGhlIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcyBiaW5hcnkgc3BlZWRzIHVwIFNTTCBvcGVyYXRpb25zCitieSBydW5uaW5nIGEgZGFlbW9uIGpvYiAoZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzLS1wcm94eSkgdGhhdAora2VlcHMgYSBjb25uZWN0aW9uIG9wZW4gdG8gYSBzZXJ2ZXIuCisKKworUFJFLUJVSUxUIEJJTkFSSUVTCisKK0RhcndpbiBhbWQ2NDoKK2h0dHBzOi8vY29tbW9uZGF0YXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzL2Rhcndpbl9hbWQ2NC50YXIuZ3oKKworTGludXggYW1kNjQ6CitodHRwczovL2NvbW1vbmRhdGFzdG9yYWdlLmdvb2dsZWFwaXMuY29tL2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy9saW51eF9hbWQ2NC50YXIuZ3oKKworCitJTlNUQUxMSU5HCisKK01vdmUgYWxsIG9mIHRoZSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cCogYmluYXJpZXMgdG8gYSBkaXJlY3RvcnkKK2luIFBBVEguCisKKworVVNBR0UKKworSFRUUFMgcmVxdWVzdHMgY2FuIGJlIGRlbGVnYXRlZCB0byB0aGUgcHJveHkgYnkgdXNpbmcgdGhlCisicGVyc2lzdGVudC1odHRwcyIgc2NoZW1lLCBlLmcuCisKK2dpdCBjbG9uZSBwZXJzaXN0ZW50LWh0dHBzOi8va2VybmVsLmdvb2dsZXNvdXJjZS5jb20vcHViL3NjbS9naXQvZ2l0CisKK0xpa2V3aXNlLCAuZ2l0Y29uZmlnIGNhbiBiZSB1cGRhdGVkIGFzIGZvbGxvd3MgdG8gcmV3cml0ZSBodHRwcyB1cmxzCit0byB1c2UgcGVyc2lzdGVudC1odHRwczoKKworW3VybCAicGVyc2lzdGVudC1odHRwcyJdCisJaW5zdGVhZG9mID0gaHR0cHMKK1t1cmwgInBlcnNpc3RlbnQtaHR0cCJdCisJaW5zdGVhZG9mID0gaHR0cAorCitZb3UgbWF5IGFsc28gd2FudCB0byBhbGxvdyB0aGUgdXNlIG9mIHRoZSBwZXJzaXN0ZW50LWh0dHBzIGhlbHBlciBmb3IKK3N1Ym1vZHVsZSBVUkxzIChzaW5jZSBhbnkgaHR0cHMgVVJMcyBwb2ludGluZyB0byBzdWJtb2R1bGVzIHdpbGwgYmUKK3Jld3JpdHRlbiwgYW5kIEdpdCdzIG91dC1vZi10aGUtYm94IGRlZmF1bHRzIGZvcmJpZCBzdWJtb2R1bGVzIGZyb20KK3VzaW5nIHVua25vd24gcmVtb3RlIGhlbHBlcnMpOgorCitbcHJvdG9jb2wgInBlcnNpc3RlbnQtaHR0cHMiXQorCWFsbG93ID0gYWx3YXlzCitbcHJvdG9jb2wgInBlcnNpc3RlbnQtaHR0cCJdCisJYWxsb3cgPSBhbHdheXMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQlVJTERJTkcgRlJPTSBTT1VSQ0UKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitMT0NBVElPTgorCitUaGUgc291cmNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzIGRpcmVjdG9yeSBvZgordGhlIEdpdCBzb3VyY2UgcmVwb3NpdG9yeS4gVGhlIEdpdCBzb3VyY2UgcmVwb3NpdG9yeSBpcyBhdmFpbGFibGUgYXQKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvCitodHRwczovL2tlcm5lbC5nb29nbGVzb3VyY2UuY29tL3B1Yi9zY20vZ2l0L2dpdAorCisKK1BSRVJFUVVJU0lURVMKKworVGhlIGNvZGUgaXMgd3JpdHRlbiBpbiBHbyAoaHR0cDovL2dvbGFuZy5vcmcvKSBhbmQgdGhlIEdvIGNvbXBpbGVyIGlzCityZXF1aXJlZC4gQ3VycmVudGx5LCB0aGUgY29tcGlsZXIgbXVzdCBiZSBidWlsdCBhbmQgaW5zdGFsbGVkIGZyb20gdGlwCitvZiBzb3VyY2UsIGluIG9yZGVyIHRvIGluY2x1ZGUgYSBmaXggaW4gdGhlIHJldmVyc2UgaHR0cCBwcm94eToKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nby9zb3VyY2UvZGV0YWlsP3I9YTYxNWI3OTY1NzBhMmNkODU5MTg4NDc2N2E3ZDY3ZWRlNzRmNjY0OAorCisKK0JVSUxESU5HCisKK1J1biAibWFrZSIgdG8gYnVpbGQgdGhlIGJpbmFyaWVzLiBTZWUgdGhlIHNlY3Rpb24gb24KK0lOU1RBTExJTkcgYWJvdmUuCmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvY2xpZW50LmdvIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL2NsaWVudC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTEyNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL2NsaWVudC5nbwpAQCAtMCwwICsxLDE4OSBAQAorLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJImJ1ZmlvIgorCSJlcnJvcnMiCisJImZtdCIKKwkibmV0IgorCSJuZXQvdXJsIgorCSJvcyIKKwkib3MvZXhlYyIKKwkic3RyaW5ncyIKKwkic3lzY2FsbCIKKwkidGltZSIKKykKKwordHlwZSBDbGllbnQgc3RydWN0IHsKKwlQcm94eUJpbiBzdHJpbmcKKwlBcmdzICAgICBbXXN0cmluZworCisJaW5zZWN1cmUgYm9vbAorfQorCitmdW5jIChjICpDbGllbnQpIFJ1bigpIGVycm9yIHsKKwlpZiBlcnIgOj0gYy5yZXNvbHZlQXJncygpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoInJlc29sdmVBcmdzKCkgZ290IGVycm9yOiAldiIsIGVycikKKwl9CisKKwkvLyBDb25uZWN0IHRvIHRoZSBwcm94eS4KKwl1Y29ubiwgaGNvbm4sIGFkZHIsIGVyciA6PSBjLmNvbm5lY3QoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZm10LkVycm9yZigiY29ubmVjdCgpIGdvdCBlcnJvcjogJXYiLCBlcnIpCisJfQorCS8vIEtlZXAgdGhlIHVuaXggc29ja2V0IGNvbm5lY3Rpb24gb3BlbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXF1ZXN0LgorCWRlZmVyIHVjb25uLkNsb3NlKCkKKwkvLyBLZWVwIGEgY29ubmVjdGlvbiB0byB0aGUgSFRUUCBzZXJ2ZXIgb3Blbiwgc28gbm8gb3RoZXIgdXNlciBjYW4KKwkvLyBiaW5kIG9uIHRoZSBzYW1lIGFkZHJlc3Mgc28gbG9uZyBhcyB0aGUgcHJvY2VzcyBpcyBydW5uaW5nLgorCWRlZmVyIGhjb25uLkNsb3NlKCkKKworCS8vIFN0YXJ0IHRoZSBnaXQtcmVtb3RlLWh0dHAgc3VicHJvY2Vzcy4KKwljYXJncyA6PSBbXXN0cmluZ3siLWMiLCBmbXQuU3ByaW50ZigiaHR0cC5wcm94eT0ldiIsIGFkZHIpLCAicmVtb3RlLWh0dHAifQorCWNhcmdzID0gYXBwZW5kKGNhcmdzLCBjLkFyZ3MuLi4pCisJY21kIDo9IGV4ZWMuQ29tbWFuZCgiZ2l0IiwgY2FyZ3MuLi4pCisKKwlmb3IgXywgdiA6PSByYW5nZSBvcy5FbnZpcm9uKCkgeworCQlpZiAhc3RyaW5ncy5IYXNQcmVmaXgodiwgIkdJVF9QRVJTSVNURU5UX0hUVFBTX1NFQ1VSRT0iKSB7CisJCQljbWQuRW52ID0gYXBwZW5kKGNtZC5FbnYsIHYpCisJCX0KKwl9CisJLy8gU2V0IHRoZSBHSVRfUEVSU0lTVEVOVF9IVFRQU19TRUNVUkUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbgorCS8vIHRoZSBwcm94eSBpcyB1c2luZyBhIFNTTCBjb25uZWN0aW9uLiAgVGhpcyBhbGxvd3MgY3JlZGVudGlhbCBoZWxwZXJzCisJLy8gdG8gaWRlbnRpZnkgc2VjdXJlIHByb3h5IGNvbm5lY3Rpb25zLCBkZXNwaXRlIGJlaW5nIHBhc3NlZCBhbiBIVFRQCisJLy8gc2NoZW1lLgorCWlmICFjLmluc2VjdXJlIHsKKwkJY21kLkVudiA9IGFwcGVuZChjbWQuRW52LCAiR0lUX1BFUlNJU1RFTlRfSFRUUFNfU0VDVVJFPTEiKQorCX0KKworCWNtZC5TdGRpbiA9IG9zLlN0ZGluCisJY21kLlN0ZG91dCA9IG9zLlN0ZG91dAorCWNtZC5TdGRlcnIgPSBvcy5TdGRlcnIKKwlpZiBlcnIgOj0gY21kLlJ1bigpOyBlcnIgIT0gbmlsIHsKKwkJaWYgZWVyciwgb2sgOj0gZXJyLigqZXhlYy5FeGl0RXJyb3IpOyBvayB7CisJCQlpZiBzdGF0LCBvayA6PSBlZXJyLlByb2Nlc3NTdGF0ZS5TeXMoKS4oc3lzY2FsbC5XYWl0U3RhdHVzKTsgb2sgJiYgc3RhdC5FeGl0U3RhdHVzKCkgIT0gMCB7CisJCQkJb3MuRXhpdChzdGF0LkV4aXRTdGF0dXMoKSkKKwkJCX0KKwkJfQorCQlyZXR1cm4gZm10LkVycm9yZigiZ2l0LXJlbW90ZS1odHRwIHN1YnByb2Nlc3MgZ290IGVycm9yOiAldiIsIGVycikKKwl9CisJcmV0dXJuIG5pbAorfQorCitmdW5jIChjICpDbGllbnQpIGNvbm5lY3QoKSAodWNvbm4gbmV0LkNvbm4sIGhjb25uIG5ldC5Db25uLCBhZGRyIHN0cmluZywgZXJyIGVycm9yKSB7CisJdWNvbm4sIGVyciA9IERlZmF1bHRTb2NrZXQuRGlhbCgpCisJaWYgZXJyICE9IG5pbCB7CisJCWlmIGUsIG9rIDo9IGVyci4oKm5ldC5PcEVycm9yKTsgb2sgJiYgKG9zLklzTm90RXhpc3QoZS5FcnIpIHx8IGUuRXJyID09IHN5c2NhbGwuRUNPTk5SRUZVU0VEKSB7CisJCQlpZiBlcnIgPSBjLnN0YXJ0UHJveHkoKTsgZXJyID09IG5pbCB7CisJCQkJdWNvbm4sIGVyciA9IERlZmF1bHRTb2NrZXQuRGlhbCgpCisJCQl9CisJCX0KKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4KKwkJfQorCX0KKworCWlmIGFkZHIsIGVyciA9IGMucmVhZEFkZHIodWNvbm4pOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCisJLy8gT3BlbiBhIHRjcCBjb25uZWN0aW9uIHRvIHRoZSBwcm94eS4KKwlpZiBoY29ubiwgZXJyID0gbmV0LkRpYWwoInRjcCIsIGFkZHIpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCisJLy8gVmVyaWZ5IHRoZSBhZGRyZXNzIGhhc24ndCBjaGFuZ2VkIG93bmVyc2hpcC4KKwl2YXIgYWRkcjIgc3RyaW5nCisJaWYgYWRkcjIsIGVyciA9IGMucmVhZEFkZHIodWNvbm4pOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfSBlbHNlIGlmIGFkZHIgIT0gYWRkcjIgeworCQllcnIgPSBmbXQuRXJyb3JmKCJhZGRyZXNzIGNoYW5nZWQgYWZ0ZXIgY29ubmVjdC4gZ290ICVxLCB3YW50ICVxIiwgYWRkcjIsIGFkZHIpCisJCXJldHVybgorCX0KKwlyZXR1cm4KK30KKworZnVuYyAoYyAqQ2xpZW50KSByZWFkQWRkcihjb25uIG5ldC5Db25uKSAoc3RyaW5nLCBlcnJvcikgeworCWNvbm4uU2V0RGVhZGxpbmUodGltZS5Ob3coKS5BZGQoNSAqIHRpbWUuU2Vjb25kKSkKKwlkYXRhIDo9IG1ha2UoW11ieXRlLCAxMDApCisJbiwgZXJyIDo9IGNvbm4uUmVhZChkYXRhKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gIiIsIGZtdC5FcnJvcmYoImVycm9yIHJlYWRpbmcgdW5peCBzb2NrZXQ6ICV2IiwgZXJyKQorCX0gZWxzZSBpZiBuID09IDAgeworCQlyZXR1cm4gIiIsIGVycm9ycy5OZXcoImVtcHR5IGRhdGEgcmVzcG9uc2UiKQorCX0KKwljb25uLldyaXRlKFtdYnl0ZXsxfSkgLy8gQWNrCisKKwl2YXIgYWRkciBzdHJpbmcKKwlpZiBhZGRycyA6PSBzdHJpbmdzLlNwbGl0KHN0cmluZyhkYXRhWzpuXSksICJcbiIpOyBsZW4oYWRkcnMpICE9IDIgeworCQlyZXR1cm4gIiIsIGZtdC5FcnJvcmYoImdvdCAlcSwgd2FudGVkIDIgYWRkcmVzc2VzIiwgZGF0YVs6bl0pCisJfSBlbHNlIGlmIGMuaW5zZWN1cmUgeworCQlhZGRyID0gYWRkcnNbMV0KKwl9IGVsc2UgeworCQlhZGRyID0gYWRkcnNbMF0KKwl9CisJcmV0dXJuIGFkZHIsIG5pbAorfQorCitmdW5jIChjICpDbGllbnQpIHN0YXJ0UHJveHkoKSBlcnJvciB7CisJY21kIDo9IGV4ZWMuQ29tbWFuZChjLlByb3h5QmluKQorCWNtZC5TeXNQcm9jQXR0ciA9ICZzeXNjYWxsLlN5c1Byb2NBdHRye1NldHBnaWQ6IHRydWV9CisJc3Rkb3V0LCBlcnIgOj0gY21kLlN0ZG91dFBpcGUoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCWRlZmVyIHN0ZG91dC5DbG9zZSgpCisJaWYgZXJyIDo9IGNtZC5TdGFydCgpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlyZXN1bHQgOj0gbWFrZShjaGFuIGVycm9yKQorCWdvIGZ1bmMoKSB7CisJCWJ5dGVzLCBfLCBlcnIgOj0gYnVmaW8uTmV3UmVhZGVyKHN0ZG91dCkuUmVhZExpbmUoKQorCQlpZiBsaW5lIDo9IHN0cmluZyhieXRlcyk7IGVyciA9PSBuaWwgJiYgbGluZSAhPSAiT0siIHsKKwkJCWVyciA9IGZtdC5FcnJvcmYoInByb3h5IHJldHVybmVkICVxLCB3YW50IFwiT0tcIiIsIGxpbmUpCisJCX0KKwkJcmVzdWx0IDwtIGVycgorCX0oKQorCXNlbGVjdCB7CisJY2FzZSBlcnIgOj0gPC1yZXN1bHQ6CisJCXJldHVybiBlcnIKKwljYXNlIDwtdGltZS5BZnRlcig1ICogdGltZS5TZWNvbmQpOgorCQlyZXR1cm4gZXJyb3JzLk5ldygidGltZW91dCB3YWl0aW5nIGZvciBwcm94eSB0byBzdGFydCIpCisJfQorCXBhbmljKCJub3QgcmVhY2hhYmxlIikKK30KKworZnVuYyAoYyAqQ2xpZW50KSByZXNvbHZlQXJncygpIGVycm9yIHsKKwlpZiBuYXJncyA6PSBsZW4oYy5BcmdzKTsgbmFyZ3MgPT0gMCB7CisJCXJldHVybiBlcnJvcnMuTmV3KCJyZW1vdGUgbmVlZGVkIikKKwl9IGVsc2UgaWYgbmFyZ3MgPiAyIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoIndhbnQgYXQgbW9zdCAyIGFyZ3MsIGdvdCAldiIsIGMuQXJncykKKwl9CisKKwkvLyBSZXdyaXRlIHRoZSB1cmwgc2NoZW1lIHRvIGJlIGh0dHAuCisJaWR4IDo9IGxlbihjLkFyZ3MpIC0gMQorCXJhd3VybCA6PSBjLkFyZ3NbaWR4XQorCXJ1cmwsIGVyciA6PSB1cmwuUGFyc2UocmF3dXJsKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZm10LkVycm9yZigiaW52YWxpZCByZW1vdGU6ICV2IiwgZXJyKQorCX0KKwljLmluc2VjdXJlID0gcnVybC5TY2hlbWUgPT0gInBlcnNpc3RlbnQtaHR0cCIKKwlydXJsLlNjaGVtZSA9ICJodHRwIgorCWMuQXJnc1tpZHhdID0gcnVybC5TdHJpbmcoKQorCWlmIGlkeCAhPSAwICYmIGMuQXJnc1swXSA9PSByYXd1cmwgeworCQljLkFyZ3NbMF0gPSBjLkFyZ3NbaWR4XQorCX0KKwlyZXR1cm4gbmlsCit9CmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvbWFpbi5nbyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9tYWluLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMWIxMDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvbWFpbi5nbwpAQCAtMCwwICsxLDgyIEBACisvLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBUaGUgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzIGJpbmFyeSBzcGVlZHMgdXAgU1NMIG9wZXJhdGlvbnMgYnkgcnVubmluZworLy8gYSBkYWVtb24gam9iIHRoYXQga2VlcHMgYSBjb25uZWN0aW9uIG9wZW4gdG8gYSBHaXQgc2VydmVyLiBUaGlzIGVuc3VyZXMgdGhlCisvLyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5IGlzIHJ1bm5pbmcgYW5kIGRlbGVnYXRpbmcgZXhlY3V0aW9uCisvLyB0byB0aGUgZ2l0LXJlbW90ZS1odHRwIGJpbmFyeSB3aXRoIHRoZSBodHRwX3Byb3h5IHNldCB0byB0aGUgZGFlbW9uIGpvYi4KKy8vIEEgdW5peCBzb2NrZXQgaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhlIHByb3h5IGFuZCBkaXNjb3ZlciB0aGUKKy8vIEhUVFAgYWRkcmVzcy4gTm90ZSwgYm90aCB0aGUgY2xpZW50IGFuZCBwcm94eSBhcmUgaW5jbHVkZWQgaW4gdGhlIHNhbWUKKy8vIGJpbmFyeS4KK3BhY2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJmbGFnIgorCSJmbXQiCisJImxvZyIKKwkib3MiCisJInN0cmluZ3MiCisJInRpbWUiCispCisKK3ZhciAoCisJZm9yY2VQcm94eSA9IGZsYWcuQm9vbCgicHJveHkiLCBmYWxzZSwgIldoZXRoZXIgdG8gc3RhcnQgdGhlIGJpbmFyeSBpbiBwcm94eSBtb2RlIikKKwlwcm94eUJpbiAgID0gZmxhZy5TdHJpbmcoInByb3h5X2JpbiIsICJnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5IiwgIlBhdGggdG8gdGhlIHByb3h5IGJpbmFyeSIpCisJcHJpbnRMYWJlbCA9IGZsYWcuQm9vbCgicHJpbnRfbGFiZWwiLCBmYWxzZSwgIlByaW50cyB0aGUgYnVpbGQgbGFiZWwgZm9yIHRoZSBiaW5hcnkiKQorCisJLy8gVmFyaWFibGUgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCB0aHJvdWdoIHRoZSAtWCBsaW5rZXIgZmxhZy4KKwlfQlVJTERfRU1CRURfTEFCRUwgc3RyaW5nCispCisKK2NvbnN0ICgKKwlkZWZhdWx0TWF4SWRsZUR1cmF0aW9uICAgID0gMjQgKiB0aW1lLkhvdXIKKwlkZWZhdWx0UG9sbFVwZGF0ZUludGVydmFsID0gMTUgKiB0aW1lLk1pbnV0ZQorKQorCitmdW5jIG1haW4oKSB7CisJZmxhZy5QYXJzZSgpCisJaWYgKnByaW50TGFiZWwgeworCQkvLyBTaG9ydCBjaXJjdWl0IGV4ZWN1dGlvbiB0byBwcmludCB0aGUgYnVpbGQgbGFiZWwKKwkJZm10LlByaW50bG4oYnVpbGRMYWJlbCgpKQorCQlyZXR1cm4KKwl9CisKKwl2YXIgZXJyIGVycm9yCisJaWYgKmZvcmNlUHJveHkgfHwgc3RyaW5ncy5IYXNTdWZmaXgob3MuQXJnc1swXSwgIi0tcHJveHkiKSB7CisJCWxvZy5TZXRQcmVmaXgoImdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHk6ICIpCisJCXByb3h5IDo9ICZQcm94eXsKKwkJCUJ1aWxkTGFiZWw6ICAgICAgICAgYnVpbGRMYWJlbCgpLAorCQkJTWF4SWRsZUR1cmF0aW9uOiAgICBkZWZhdWx0TWF4SWRsZUR1cmF0aW9uLAorCQkJUG9sbFVwZGF0ZUludGVydmFsOiBkZWZhdWx0UG9sbFVwZGF0ZUludGVydmFsLAorCQl9CisJCWVyciA9IHByb3h5LlJ1bigpCisJfSBlbHNlIHsKKwkJbG9nLlNldFByZWZpeCgiZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzOiAiKQorCQljbGllbnQgOj0gJkNsaWVudHsKKwkJCVByb3h5QmluOiAqcHJveHlCaW4sCisJCQlBcmdzOiAgICAgZmxhZy5BcmdzKCksCisJCX0KKwkJZXJyID0gY2xpZW50LlJ1bigpCisJfQorCWlmIGVyciAhPSBuaWwgeworCQlsb2cuRmF0YWxsbihlcnIpCisJfQorfQorCitmdW5jIGJ1aWxkTGFiZWwoKSBzdHJpbmcgeworCWlmIF9CVUlMRF9FTUJFRF9MQUJFTCA9PSAiIiB7CisJCWxvZy5QcmludGxuKGB1bmxhYmVsZWQgYnVpbGQ7IGJ1aWxkIHdpdGggIm1ha2UiIHRvIGxhYmVsYCkKKwl9CisJcmV0dXJuIF9CVUlMRF9FTUJFRF9MQUJFTAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3Byb3h5LmdvIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3Byb3h5LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGNkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvcHJveHkuZ28KQEAgLTAsMCArMSwxOTAgQEAKKy8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3BhY2thZ2UgbWFpbgorCitpbXBvcnQgKAorCSJmbXQiCisJImxvZyIKKwkibmV0IgorCSJuZXQvaHR0cCIKKwkibmV0L2h0dHAvaHR0cHV0aWwiCisJIm9zIgorCSJvcy9leGVjIgorCSJvcy9zaWduYWwiCisJInN5bmMiCisJInN5c2NhbGwiCisJInRpbWUiCispCisKK3R5cGUgUHJveHkgc3RydWN0IHsKKwlCdWlsZExhYmVsICAgICAgICAgc3RyaW5nCisJTWF4SWRsZUR1cmF0aW9uICAgIHRpbWUuRHVyYXRpb24KKwlQb2xsVXBkYXRlSW50ZXJ2YWwgdGltZS5EdXJhdGlvbgorCisJdWwgICAgICAgIG5ldC5MaXN0ZW5lcgorCWh0dHBBZGRyICBzdHJpbmcKKwlodHRwc0FkZHIgc3RyaW5nCit9CisKK2Z1bmMgKHAgKlByb3h5KSBSdW4oKSBlcnJvciB7CisJaGwsIGVyciA6PSBuZXQuTGlzdGVuKCJ0Y3AiLCAiMTI3LjAuMC4xOjAiKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZm10LkVycm9yZigiaHR0cCBsaXN0ZW4gZmFpbGVkOiAldiIsIGVycikKKwl9CisJZGVmZXIgaGwuQ2xvc2UoKQorCisJaHNsLCBlcnIgOj0gbmV0Lkxpc3RlbigidGNwIiwgIjEyNy4wLjAuMTowIikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoImh0dHBzIGxpc3RlbiBmYWlsZWQ6ICV2IiwgZXJyKQorCX0KKwlkZWZlciBoc2wuQ2xvc2UoKQorCisJcC51bCwgZXJyID0gRGVmYXVsdFNvY2tldC5MaXN0ZW4oKQorCWlmIGVyciAhPSBuaWwgeworCQljLCBkZXJyIDo9IERlZmF1bHRTb2NrZXQuRGlhbCgpCisJCWlmIGRlcnIgPT0gbmlsIHsKKwkJCWMuQ2xvc2UoKQorCQkJZm10LlByaW50bG4oIk9LXG5BIHByb3h5IGlzIGFscmVhZHkgcnVubmluZy4uLiBleGl0aW5nIikKKwkJCXJldHVybiBuaWwKKwkJfSBlbHNlIGlmIGUsIG9rIDo9IGRlcnIuKCpuZXQuT3BFcnJvcik7IG9rICYmIGUuRXJyID09IHN5c2NhbGwuRUNPTk5SRUZVU0VEIHsKKwkJCS8vIE5vdGhpbmcgaXMgbGlzdGVuaW5nIG9uIHRoZSBzb2NrZXQsIHVubGluayBpdCBhbmQgdHJ5IGFnYWluLgorCQkJc3lzY2FsbC5VbmxpbmsoRGVmYXVsdFNvY2tldC5QYXRoKCkpCisJCQlwLnVsLCBlcnIgPSBEZWZhdWx0U29ja2V0Lkxpc3RlbigpCisJCX0KKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gZm10LkVycm9yZigidW5peCBsaXN0ZW4gZmFpbGVkIG9uICV2OiAldiIsIERlZmF1bHRTb2NrZXQuUGF0aCgpLCBlcnIpCisJCX0KKwl9CisJZGVmZXIgcC51bC5DbG9zZSgpCisJZ28gcC5jbG9zZU9uU2lnbmFsKCkKKwlnbyBwLmNsb3NlT25VcGRhdGUoKQorCisJcC5odHRwQWRkciA9IGhsLkFkZHIoKS5TdHJpbmcoKQorCXAuaHR0cHNBZGRyID0gaHNsLkFkZHIoKS5TdHJpbmcoKQorCWZtdC5QcmludGYoIk9LXG5MaXN0ZW5pbmcgb24gdW5peCBzb2NrZXQ9JXYgaHR0cD0ldiBodHRwcz0ldlxuIiwKKwkJcC51bC5BZGRyKCksIHAuaHR0cEFkZHIsIHAuaHR0cHNBZGRyKQorCisJcmVzdWx0IDo9IG1ha2UoY2hhbiBlcnJvciwgMikKKwlnbyBwLnNlcnZlVW5peChyZXN1bHQpCisJZ28gZnVuYygpIHsKKwkJcmVzdWx0IDwtIGh0dHAuU2VydmUoaGwsICZodHRwdXRpbC5SZXZlcnNlUHJveHl7CisJCQlGbHVzaEludGVydmFsOiA1MDAgKiB0aW1lLk1pbGxpc2Vjb25kLAorCQkJRGlyZWN0b3I6ICAgICAgZnVuYyhyICpodHRwLlJlcXVlc3QpIHt9LAorCQl9KQorCX0oKQorCWdvIGZ1bmMoKSB7CisJCXJlc3VsdCA8LSBodHRwLlNlcnZlKGhzbCwgJmh0dHB1dGlsLlJldmVyc2VQcm94eXsKKwkJCUZsdXNoSW50ZXJ2YWw6IDUwMCAqIHRpbWUuTWlsbGlzZWNvbmQsCisJCQlEaXJlY3RvcjogZnVuYyhyICpodHRwLlJlcXVlc3QpIHsKKwkJCQlyLlVSTC5TY2hlbWUgPSAiaHR0cHMiCisJCQl9LAorCQl9KQorCX0oKQorCXJldHVybiA8LXJlc3VsdAorfQorCit0eXBlIHNvY2tldENvbnRleHQgc3RydWN0IHsKKwlzeW5jLldhaXRHcm91cAorCW11dGV4IHN5bmMuTXV0ZXgKKwlsYXN0ICB0aW1lLlRpbWUKK30KKworZnVuYyAoc2MgKnNvY2tldENvbnRleHQpIERvbmUoKSB7CisJc2MubXV0ZXguTG9jaygpCisJZGVmZXIgc2MubXV0ZXguVW5sb2NrKCkKKwlzYy5sYXN0ID0gdGltZS5Ob3coKQorCXNjLldhaXRHcm91cC5Eb25lKCkKK30KKworZnVuYyAocCAqUHJveHkpIHNlcnZlVW5peChyZXN1bHQgY2hhbjwtIGVycm9yKSB7CisJc29ja0N0eCA6PSAmc29ja2V0Q29udGV4dHt9CisJZ28gcC5jbG9zZU9uSWRsZShzb2NrQ3R4KQorCisJdmFyIGVyciBlcnJvcgorCWZvciB7CisJCXZhciB1Y29ubiBuZXQuQ29ubgorCQl1Y29ubiwgZXJyID0gcC51bC5BY2NlcHQoKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCWVyciA9IGZtdC5FcnJvcmYoImFjY2VwdCBmYWlsZWQ6ICV2IiwgZXJyKQorCQkJYnJlYWsKKwkJfQorCQlzb2NrQ3R4LkFkZCgxKQorCQlnbyBwLmhhbmRsZVVuaXhDb25uKHNvY2tDdHgsIHVjb25uKQorCX0KKwlzb2NrQ3R4LldhaXQoKQorCXJlc3VsdCA8LSBlcnIKK30KKworZnVuYyAocCAqUHJveHkpIGhhbmRsZVVuaXhDb25uKHNvY2tDdHggKnNvY2tldENvbnRleHQsIHVjb25uIG5ldC5Db25uKSB7CisJZGVmZXIgc29ja0N0eC5Eb25lKCkKKwlkZWZlciB1Y29ubi5DbG9zZSgpCisJZGF0YSA6PSBbXWJ5dGUoZm10LlNwcmludGYoIiV2XG4ldiIsIHAuaHR0cHNBZGRyLCBwLmh0dHBBZGRyKSkKKwl1Y29ubi5TZXREZWFkbGluZSh0aW1lLk5vdygpLkFkZCg1ICogdGltZS5TZWNvbmQpKQorCWZvciBpIDo9IDA7IGkgPCAyOyBpKysgeworCQlpZiBuLCBlcnIgOj0gdWNvbm4uV3JpdGUoZGF0YSk7IGVyciAhPSBuaWwgeworCQkJbG9nLlByaW50ZigiZXJyb3Igc2VuZGluZyBodHRwIGFkZHJlc3NlczogJSt2XG4iLCBlcnIpCisJCQlyZXR1cm4KKwkJfSBlbHNlIGlmIG4gIT0gbGVuKGRhdGEpIHsKKwkJCWxvZy5QcmludGYoInNlbnQgJWQgZGF0YSBieXRlcywgd2FudGVkICVkXG4iLCBuLCBsZW4oZGF0YSkpCisJCQlyZXR1cm4KKwkJfQorCQlpZiBfLCBlcnIgOj0gdWNvbm4uUmVhZChbXWJ5dGV7MCwgMCwgMCwgMH0pOyBlcnIgIT0gbmlsIHsKKwkJCWxvZy5QcmludGYoImVycm9yIHdhaXRpbmcgZm9yIEFjazogJSt2XG4iLCBlcnIpCisJCQlyZXR1cm4KKwkJfQorCX0KKwkvLyBXYWl0IHdpdGhvdXQgYSBkZWFkbGluZSBmb3IgdGhlIGNsaWVudCB0byBmaW5pc2ggdmlhIEVPRgorCXVjb25uLlNldERlYWRsaW5lKHRpbWUuVGltZXt9KQorCXVjb25uLlJlYWQoW11ieXRlezAsIDAsIDAsIDB9KQorfQorCitmdW5jIChwICpQcm94eSkgY2xvc2VPbklkbGUoc29ja0N0eCAqc29ja2V0Q29udGV4dCkgeworCWZvciBkIDo9IHAuTWF4SWRsZUR1cmF0aW9uOyBkID4gMDsgeworCQl0aW1lLlNsZWVwKGQpCisJCXNvY2tDdHguV2FpdCgpCisJCXNvY2tDdHgubXV0ZXguTG9jaygpCisJCWlmIGQgPSBzb2NrQ3R4Lmxhc3QuQWRkKHAuTWF4SWRsZUR1cmF0aW9uKS5TdWIodGltZS5Ob3coKSk7IGQgPD0gMCB7CisJCQlsb2cuUHJpbnRsbigiZ3JhY2VmdWwgc2h1dGRvd24gZnJvbSBpZGxlIHRpbWVvdXQiKQorCQkJcC51bC5DbG9zZSgpCisJCX0KKwkJc29ja0N0eC5tdXRleC5VbmxvY2soKQorCX0KK30KKworZnVuYyAocCAqUHJveHkpIGNsb3NlT25VcGRhdGUoKSB7CisJZm9yIHsKKwkJdGltZS5TbGVlcChwLlBvbGxVcGRhdGVJbnRlcnZhbCkKKwkJaWYgb3V0LCBlcnIgOj0gZXhlYy5Db21tYW5kKG9zLkFyZ3NbMF0sICItLXByaW50X2xhYmVsIikuT3V0cHV0KCk7IGVyciAhPSBuaWwgeworCQkJbG9nLlByaW50ZigiZXJyb3IgcG9sbGluZyBmb3IgdXBkYXRlZCBiaW5hcnk6ICV2XG4iLCBlcnIpCisJCX0gZWxzZSBpZiBzIDo9IHN0cmluZyhvdXRbOmxlbihvdXQpLTFdKTsgcC5CdWlsZExhYmVsICE9IHMgeworCQkJbG9nLlByaW50ZigiZ3JhY2VmdWwgc2h1dGRvd24gZnJvbSB1cGRhdGVkIGJpbmFyeTogJXEgLS0+ICVxXG4iLCBwLkJ1aWxkTGFiZWwsIHMpCisJCQlwLnVsLkNsb3NlKCkKKwkJCWJyZWFrCisJCX0KKwl9Cit9CisKK2Z1bmMgKHAgKlByb3h5KSBjbG9zZU9uU2lnbmFsKCkgeworCWNoIDo9IG1ha2UoY2hhbiBvcy5TaWduYWwsIDEwKQorCXNpZ25hbC5Ob3RpZnkoY2gsIG9zLkludGVycnVwdCwgb3MuS2lsbCwgb3MuU2lnbmFsKHN5c2NhbGwuU0lHVEVSTSksIG9zLlNpZ25hbChzeXNjYWxsLlNJR0hVUCkpCisJc2lnIDo9IDwtY2gKKwlwLnVsLkNsb3NlKCkKKwlzd2l0Y2ggc2lnIHsKKwljYXNlIG9zLlNpZ25hbChzeXNjYWxsLlNJR0hVUCk6CisJCWxvZy5QcmludGYoImdyYWNlZnVsIHNodXRkb3duIGZyb20gc2lnbmFsOiAldlxuIiwgc2lnKQorCWRlZmF1bHQ6CisJCWxvZy5GYXRhbGYoImV4aXRpbmcgZnJvbSBzaWduYWw6ICV2XG4iLCBzaWcpCisJfQorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3NvY2tldC5nbyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9zb2NrZXQuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYjkxMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9zb2NrZXQuZ28KQEAgLTAsMCArMSw5NyBAQAorLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJImZtdCIKKwkibG9nIgorCSJuZXQiCisJIm9zIgorCSJwYXRoL2ZpbGVwYXRoIgorCSJzeXNjYWxsIgorKQorCisvLyBBIFNvY2tldCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgVW5peCBzb2NrZXQgdGhhdCB2ZXJpZmllcyBkaXJlY3RvcnkKKy8vIHBlcm1pc3Npb25zLgordHlwZSBTb2NrZXQgc3RydWN0IHsKKwlEaXIgc3RyaW5nCit9CisKK2Z1bmMgZGVmYXVsdERpcigpIHN0cmluZyB7CisJc29ja1BhdGggOj0gIi5naXQtY3JlZGVudGlhbC1jYWNoZSIKKwlpZiBob21lIDo9IG9zLkdldGVudigiSE9NRSIpOyBob21lICE9ICIiIHsKKwkJcmV0dXJuIGZpbGVwYXRoLkpvaW4oaG9tZSwgc29ja1BhdGgpCisJfQorCWxvZy5QcmludGYoInNvY2tldDogY2Fubm90IGZpbmQgSE9NRSBwYXRoLiB1c2luZyByZWxhdGl2ZSBkaXJlY3RvcnkgJXEgZm9yIHNvY2tldCIsIHNvY2tQYXRoKQorCXJldHVybiBzb2NrUGF0aAorfQorCisvLyBEZWZhdWx0U29ja2V0IGlzIGEgU29ja2V0IGluIHRoZSAkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUgZGlyZWN0b3J5LgordmFyIERlZmF1bHRTb2NrZXQgPSBTb2NrZXR7RGlyOiBkZWZhdWx0RGlyKCl9CisKKy8vIExpc3RlbiBhbm5vdW5jZXMgdGhlIGxvY2FsIG5ldHdvcmsgYWRkcmVzcyBvZiB0aGUgdW5peCBzb2NrZXQuIFRoZQorLy8gcGVybWlzc2lvbnMgb24gdGhlIHNvY2tldCBkaXJlY3RvcnkgYXJlIHZlcmlmaWVkIGJlZm9yZSBhdHRlbXB0aW5nCisvLyB0aGUgYWN0dWFsIGxpc3Rlbi4KK2Z1bmMgKHMgU29ja2V0KSBMaXN0ZW4oKSAobmV0Lkxpc3RlbmVyLCBlcnJvcikgeworCW5ldHdvcmssIGFkZHIgOj0gInVuaXgiLCBzLlBhdGgoKQorCWlmIGVyciA6PSBzLm1rZGlyKCk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCAmbmV0Lk9wRXJyb3J7T3A6ICJsaXN0ZW4iLCBOZXQ6IG5ldHdvcmssIEFkZHI6ICZuZXQuVW5peEFkZHJ7TmFtZTogYWRkciwgTmV0OiBuZXR3b3JrfSwgRXJyOiBlcnJ9CisJfQorCXJldHVybiBuZXQuTGlzdGVuKG5ldHdvcmssIGFkZHIpCit9CisKKy8vIERpYWwgY29ubmVjdHMgdG8gdGhlIHVuaXggc29ja2V0LiBUaGUgcGVybWlzc2lvbnMgb24gdGhlIHNvY2tldCBkaXJlY3RvcnkKKy8vIGFyZSB2ZXJpZmllZCBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgYWN0dWFsIGRpYWwuCitmdW5jIChzIFNvY2tldCkgRGlhbCgpIChuZXQuQ29ubiwgZXJyb3IpIHsKKwluZXR3b3JrLCBhZGRyIDo9ICJ1bml4Iiwgcy5QYXRoKCkKKwlpZiBlcnIgOj0gcy5jaGVja1Blcm1pc3Npb25zKCk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCAmbmV0Lk9wRXJyb3J7T3A6ICJkaWFsIiwgTmV0OiBuZXR3b3JrLCBBZGRyOiAmbmV0LlVuaXhBZGRye05hbWU6IGFkZHIsIE5ldDogbmV0d29ya30sIEVycjogZXJyfQorCX0KKwlyZXR1cm4gbmV0LkRpYWwobmV0d29yaywgYWRkcikKK30KKworLy8gUGF0aCByZXR1cm5zIHRoZSBmdWxseSBzcGVjaWZpZWQgZmlsZSBuYW1lIG9mIHRoZSB1bml4IHNvY2tldC4KK2Z1bmMgKHMgU29ja2V0KSBQYXRoKCkgc3RyaW5nIHsKKwlyZXR1cm4gZmlsZXBhdGguSm9pbihzLkRpciwgInBlcnNpc3RlbnQtaHR0cHMtcHJveHktc29ja2V0IikKK30KKworZnVuYyAocyBTb2NrZXQpIG1rZGlyKCkgZXJyb3IgeworCWlmIGVyciA6PSBzLmNoZWNrUGVybWlzc2lvbnMoKTsgZXJyID09IG5pbCB7CisJCXJldHVybiBuaWwKKwl9IGVsc2UgaWYgIW9zLklzTm90RXhpc3QoZXJyKSB7CisJCXJldHVybiBlcnIKKwl9CisJaWYgZXJyIDo9IG9zLk1rZGlyQWxsKHMuRGlyLCAwNzAwKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJcmV0dXJuIHMuY2hlY2tQZXJtaXNzaW9ucygpCit9CisKK2Z1bmMgKHMgU29ja2V0KSBjaGVja1Blcm1pc3Npb25zKCkgZXJyb3IgeworCWZpLCBlcnIgOj0gb3MuU3RhdChzLkRpcikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlpZiAhZmkuSXNEaXIoKSB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJzb2NrZXQ6IGdvdCBmaWxlLCB3YW50IGRpcmVjdG9yeSBmb3IgJXEiLCBzLkRpcikKKwl9CisJaWYgZmkuTW9kZSgpLlBlcm0oKSAhPSAwNzAwIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoInNvY2tldDogZ290IHBlcm0gJW8sIHdhbnQgNzAwIGZvciAlcSIsIGZpLk1vZGUoKS5QZXJtKCksIHMuRGlyKQorCX0KKwlpZiBzdCA6PSBmaS5TeXMoKS4oKnN5c2NhbGwuU3RhdF90KTsgaW50KHN0LlVpZCkgIT0gb3MuR2V0dWlkKCkgeworCQlyZXR1cm4gZm10LkVycm9yZigic29ja2V0OiBnb3QgdWlkICVkLCB3YW50ICVkIGZvciAlcSIsIHN0LlVpZCwgb3MuR2V0dWlkKCksIHMuRGlyKQorCX0KKwlyZXR1cm4gbmlsCit9CmRpZmYgLS1naXQgYS9jb250cmliL3JlbW90ZS1oZWxwZXJzL1JFQURNRSBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzIzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL1JFQURNRQpAQCAtMCwwICsxLDE1IEBACitUaGUgcmVtb3RlLWhlbHBlciBicmlkZ2VzIHRvIGFjY2VzcyBkYXRhIHN0b3JlZCBpbiBNZXJjdXJpYWwgYW5kCitCYXphYXIgYXJlIG1haW50YWluZWQgb3V0c2lkZSB0aGUgZ2l0LmdpdCB0cmVlIGluIHRoZSByZXBvc2l0b3JpZXMKK29mIHRoZWlyIHByaW1hcnkgYXV0aG9yOgorCisgICAgaHR0cHM6Ly9naXRodWIuY29tL2ZlbGlwZWMvZ2l0LXJlbW90ZS1oZyAoZm9yIE1lcmN1cmlhbCkKKyAgICBodHRwczovL2dpdGh1Yi5jb20vZmVsaXBlYy9naXQtcmVtb3RlLWJ6ciAoZm9yIEJhemFhcikKKworWW91IGNhbiBwaWNrIGEgZGlyZWN0b3J5IG9uIHlvdXIgJFBBVEggYW5kIGRvd25sb2FkIHRoZW0gZnJvbSB0aGVzZQorcmVwb3NpdG9yaWVzLCBlLmcuOgorCisgICQgd2dldCAtTyAkSE9NRS9iaW4vZ2l0LXJlbW90ZS1oZyBcCisgICAgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtaGcvbWFzdGVyL2dpdC1yZW1vdGUtaGcKKyAgJCB3Z2V0IC1PICRIT01FL2Jpbi9naXQtcmVtb3RlLWJ6ciBcCisgICAgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtYnpyL21hc3Rlci9naXQtcmVtb3RlLWJ6cgorICAkIGNobW9kICt4ICRIT01FL2Jpbi9naXQtcmVtb3RlLWhnICRIT01FL2Jpbi9naXQtcmVtb3RlLWJ6cgpkaWZmIC0tZ2l0IGEvY29udHJpYi9yZW1vdGUtaGVscGVycy9naXQtcmVtb3RlLWJ6ciBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1ienIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWMzZDg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1ienIKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCisKK2NhdCA+JjIgPDwnRU9UJworV0FSTklORzogZ2l0LXJlbW90ZS1ienIgaXMgbm93IG1haW50YWluZWQgaW5kZXBlbmRlbnRseS4KK1dBUk5JTkc6IEZvciBtb3JlIGluZm9ybWF0aW9uIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtYnpyCitXQVJOSU5HOgorV0FSTklORzogWW91IGNhbiBwaWNrIGEgZGlyZWN0b3J5IG9uIHlvdXIgJFBBVEggYW5kIGRvd25sb2FkIGl0LCBlLmcuOgorV0FSTklORzogICAkIHdnZXQgLU8gJEhPTUUvYmluL2dpdC1yZW1vdGUtYnpyIFwKK1dBUk5JTkc6ICAgICBodHRwczovL3Jhdy5naXRodWIuY29tL2ZlbGlwZWMvZ2l0LXJlbW90ZS1ienIvbWFzdGVyL2dpdC1yZW1vdGUtYnpyCitXQVJOSU5HOiAgICQgY2htb2QgK3ggJEhPTUUvYmluL2dpdC1yZW1vdGUtYnpyCitFT1QKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1oZyBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1oZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTkxODgzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy9naXQtcmVtb3RlLWhnCkBAIC0wLDAgKzEsMTEgQEAKKyMhL2Jpbi9zaAorCitjYXQgPiYyIDw8J0VPVCcKK1dBUk5JTkc6IGdpdC1yZW1vdGUtaGcgaXMgbm93IG1haW50YWluZWQgaW5kZXBlbmRlbnRseS4KK1dBUk5JTkc6IEZvciBtb3JlIGluZm9ybWF0aW9uIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtaGcKK1dBUk5JTkc6CitXQVJOSU5HOiBZb3UgY2FuIHBpY2sgYSBkaXJlY3Rvcnkgb24geW91ciAkUEFUSCBhbmQgZG93bmxvYWQgaXQsIGUuZy46CitXQVJOSU5HOiAgICQgd2dldCAtTyAkSE9NRS9iaW4vZ2l0LXJlbW90ZS1oZyBcCitXQVJOSU5HOiAgICAgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtaGcvbWFzdGVyL2dpdC1yZW1vdGUtaGcKK1dBUk5JTkc6ICAgJCBjaG1vZCAreCAkSE9NRS9iaW4vZ2l0LXJlbW90ZS1oZworRU9UCmRpZmYgLS1naXQgYS9jb250cmliL3JlbW90ZXMyY29uZmlnLnNoIGIvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xY2RhMTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKworIyBVc2UgdGhpcyB0b29sIHRvIHJld3JpdGUgeW91ciAuZ2l0L3JlbW90ZXMvIGZpbGVzIGludG8gdGhlIGNvbmZpZy4KKworLiBnaXQtc2gtc2V0dXAKKworaWYgWyAtZCAiJEdJVF9ESVIiL3JlbW90ZXMgXTsgdGhlbgorCWVjaG8gIlJld3JpdGluZyAkR0lUX0RJUi9yZW1vdGVzIiA+JjIKKwllcnJvcj0wCisJIyByZXdyaXRlIGludG8gY29uZmlnCisJeworCQljZCAiJEdJVF9ESVIiL3JlbW90ZXMKKwkJbHMgfCB3aGlsZSByZWFkIGY7IGRvCisJCQluYW1lPSQocHJpbnRmICIkZiIgfCB0ciAtYyAiQS1aYS16MC05LSIgIi4iKQorCQkJc2VkIC1uIFwKKwkJCS1lICJzL15VUkw6WyAJXSpcKC4qXCkkL3JlbW90ZS4kbmFtZS51cmwgXDEgLi9wIiBcCisJCQktZSAicy9eUHVsbDpbIAldKlwoLipcKSQvcmVtb3RlLiRuYW1lLmZldGNoIFwxIF4kIC9wIiBcCisJCQktZSAicy9eUHVzaDpbIAldKlwoLipcKSQvcmVtb3RlLiRuYW1lLnB1c2ggXDEgXiQgL3AiIFwKKwkJCTwgIiRmIgorCQlkb25lCisJCWVjaG8gZG9uZQorCX0gfCB3aGlsZSByZWFkIGtleSB2YWx1ZSByZWdleDsgZG8KKwkJY2FzZSAka2V5IGluCisJCWRvbmUpCisJCQlpZiBbICRlcnJvciA9IDAgXTsgdGhlbgorCQkJCW12ICIkR0lUX0RJUiIvcmVtb3RlcyAiJEdJVF9ESVIiL3JlbW90ZXMub2xkCisJCQlmaSA7OworCQkqKQorCQkJZWNobyAiZ2l0IGNvbmZpZyAka2V5ICIkdmFsdWUiICRyZWdleCIKKwkJCWdpdCBjb25maWcgJGtleSAiJHZhbHVlIiAkcmVnZXggfHwgZXJyb3I9MSA7OworCQllc2FjCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVyZXJlLXRyYWluLnNoIGIvY29udHJpYi9yZXJlcmUtdHJhaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWVlZTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmVyZXJlLXRyYWluLnNoCkBAIC0wLDAgKzEsMTAyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA4LCBOYW5ha28gU2hpcmFpc2hpCisjIFByaW1lIHJlcmVyZSBkYXRhYmFzZSBmcm9tIGV4aXN0aW5nIG1lcmdlIGNvbW1pdHMKKworbWU9cmVyZXJlLXRyYWluCitVU0FHRT0kKGNhdCA8PC1FT0YKK3VzYWdlOiAkbWUgWy0tb3ZlcndyaXRlXSA8cmV2LWxpc3QtYXJncz4KKworICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoZSBoZWxwCisgICAgLW8sIC0tb3ZlcndyaXRlICAgICAgIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcmVyZXJlIGNhY2hlCitFT0YKKykKKworU1VCRElSRUNUT1JZX09LPVllcworCitvdmVyd3JpdGU9MAorCit3aGlsZSB0ZXN0ICQjIC1ndCAwCitkbworCW9wdD0iJDEiCisJY2FzZSAiJG9wdCIgaW4KKwktaHwtLWhlbHApCisJCWVjaG8gIiRVU0FHRSIKKwkJZXhpdCAwCisJCTs7CisJLW98LS1vdmVyd3JpdGUpCisJCW92ZXJ3cml0ZT0xCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCitkb25lCisKKyMgT3ZlcndyaXRlIG9yIGhlbHAgb3B0aW9ucyBhcmUgbm90IHZhbGlkIGV4Y2VwdCBhcyBmaXJzdCBhcmcKK2ZvciBvcHQgaW4gIiRAIgorZG8KKwljYXNlICIkb3B0IiBpbgorCS1ofC0taGVscCkKKwkJZWNobyAiJFVTQUdFIgorCQlleGl0IDAKKwkJOzsKKwktb3wtLW92ZXJ3cml0ZSkKKwkJZWNobyAiJFVTQUdFIgorCQlleGl0IDAKKwkJOzsKKwllc2FjCitkb25lCisKKy4gIiQoZ2l0IC0tZXhlYy1wYXRoKS9naXQtc2gtc2V0dXAiCityZXF1aXJlX3dvcmtfdHJlZQorY2RfdG9fdG9wbGV2ZWwKKworIyBSZW1lbWJlciBvcmlnaW5hbCBicmFuY2gKK2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkgfHwKK29yaWdpbmFsX0hFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8IHsKKwllY2hvID4mMiAiTm90IG9uIGFueSBicmFuY2ggYW5kIG5vIGNvbW1pdCB5ZXQ/IgorCWV4aXQgMQorfQorCitta2RpciAtcCAiJEdJVF9ESVIvcnItY2FjaGUiIHx8IGV4aXQKKworZ2l0IHJldi1saXN0IC0tcGFyZW50cyAiJEAiIHwKK3doaWxlIHJlYWQgY29tbWl0IHBhcmVudDEgb3RoZXJfcGFyZW50cworZG8KKwlpZiB0ZXN0IC16ICIkb3RoZXJfcGFyZW50cyIKKwl0aGVuCisJCSMgU2tpcCBub24tbWVyZ2VzCisJCWNvbnRpbnVlCisJZmkKKwlnaXQgY2hlY2tvdXQgLXEgIiRwYXJlbnQxXjAiCisJaWYgZ2l0IG1lcmdlICRvdGhlcl9wYXJlbnRzID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJIyBDbGVhbmx5IG1lcmdlcworCQljb250aW51ZQorCWZpCisJaWYgdGVzdCAkb3ZlcndyaXRlID0gMQorCXRoZW4KKwkJZ2l0IHJlcmVyZSBmb3JnZXQgLgorCWZpCisJaWYgdGVzdCAtcyAiJEdJVF9ESVIvTUVSR0VfUlIiCisJdGhlbgorCQlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IkxlYXJuaW5nIGZyb20gJWggJXMiICIkY29tbWl0IgorCQlnaXQgcmVyZXJlCisJCWdpdCBjaGVja291dCAtcSAkY29tbWl0IC0tIC4KKwkJZ2l0IHJlcmVyZQorCWZpCisJZ2l0IHJlc2V0IC1xIC0taGFyZAorZG9uZQorCitpZiB0ZXN0IC16ICIkYnJhbmNoIgordGhlbgorCWdpdCBjaGVja291dCAiJG9yaWdpbmFsX0hFQUQiCitlbHNlCisJZ2l0IGNoZWNrb3V0ICIke2JyYW5jaCNyZWZzL2hlYWRzL30iCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdGF0cy9naXQtY29tbW9uLWhhc2ggYi9jb250cmliL3N0YXRzL2dpdC1jb21tb24taGFzaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjdmZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdGF0cy9naXQtY29tbW9uLWhhc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBzY3JpcHQgZGlzcGxheXMgdGhlIGRpc3RyaWJ1dGlvbiBvZiBsb25nZXN0IGNvbW1vbiBoYXNoIHByZWZpeGVzLgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgbWluaW11bSBwcmVmaXggbGVuZ3RoIHRvIHVzZQorIyBmb3Igb2JqZWN0IG5hbWVzIHRvIGJlIHVuaXF1ZS4KKworZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCB8IHNvcnQgfCBwZXJsIC1sbmUgJworICBzdWJzdHIoJF8sIDQwKSA9ICIiOworICAjIHVuY29tbWVudCBuZXh0IGxpbmUgZm9yIGEgZGlzdHJpYnV0aW9uIG9mIGJpdHMgaW5zdGVhZCBvZiBoZXggY2hhcnMKKyAgIyAkXyA9IHVucGFjaygiQioiLHBhY2soIkgqIiwkXykpOworICBpZiAoZGVmaW5lZCAkcCkgeworICAgICgkcCBeICRfKSA9fiAvXihcMCopLzsKKyAgICAkY29tbW9uID0gbGVuZ3RoICQxOworICAgIGlmIChkZWZpbmVkICRwY29tbW9uKSB7CisgICAgICAkY291bnRbJHBjb21tb24gPiAkY29tbW9uID8gJHBjb21tb24gOiAkY29tbW9uXSsrOworICAgIH0gZWxzZSB7CisgICAgICAkY291bnRbJGNvbW1vbl0rKzsgIyBmaXJzdCBpdGVtCisgICAgfQorICB9CisgICRwID0gJF87CisgICRwY29tbW9uID0gJGNvbW1vbjsKKyAgRU5EIHsKKyAgICAkY291bnRbJGNvbW1vbl0rKzsgIyBsYXN0IGl0ZW0KKyAgICBwcmludCAiJF86ICRjb3VudFskX10iIGZvciAwLi4kI2NvdW50OworICB9CisnCmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRzL21haWxtYXAucGwgYi9jb250cmliL3N0YXRzL21haWxtYXAucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTUxM2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3RhdHMvbWFpbG1hcC5wbApAQCAtMCwwICsxLDcwIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHdhcm5pbmdzICdhbGwnOwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRtYXRjaF9lbWFpbHM7CitteSAkbWF0Y2hfbmFtZXM7CitteSAkb3JkZXJfYnkgPSAnY291bnQnOworR2V0b3B0OjpMb25nOjpDb25maWd1cmUocXcoYnVuZGxpbmcpKTsKK0dldE9wdGlvbnMoCisJJ2VtYWlsc3xlIScgPT4gXCRtYXRjaF9lbWFpbHMsCisJJ25hbWVzfG4hJyAgPT4gXCRtYXRjaF9uYW1lcywKKwknY291bnR8YycgICA9PiBzdWIgeyAkb3JkZXJfYnkgPSAnY291bnQnIH0sCisJJ3RpbWV8dCcgICAgPT4gc3ViIHsgJG9yZGVyX2J5ID0gJ3N0YW1wJyB9LAorKSBvciBleGl0IDE7CiskbWF0Y2hfZW1haWxzID0gMSB1bmxlc3MgJG1hdGNoX25hbWVzOworCitteSAkZW1haWwgPSB7fTsKK215ICRuYW1lID0ge307CisKK29wZW4obXkgJGZoLCAnLXwnLCAiZ2l0IGxvZyAtLWZvcm1hdD0nJWF0IDwlYUU+ICVhTiciKTsKK3doaWxlKDwkZmg+KSB7CisJbXkgKCR0LCAkZSwgJG4pID0gLyhcUyspIDwoXFMrKT4gKC4qKS87CisJbWFyaygkZW1haWwsICRlLCAkbiwgJHQpOworCW1hcmsoJG5hbWUsICRuLCAkZSwgJHQpOworfQorY2xvc2UoJGZoKTsKKworaWYgKCRtYXRjaF9lbWFpbHMpIHsKKwlmb3JlYWNoIG15ICRlIChkdXBzKCRlbWFpbCkpIHsKKwkJZm9yZWFjaCBteSAkbiAodmFscygkZW1haWwtPnskZX0pKSB7CisJCQlzaG93KCRuLCAkZSwgJGVtYWlsLT57JGV9LT57JG59KTsKKwkJfQorCQlwcmludCAiXG4iOworCX0KK30KK2lmICgkbWF0Y2hfbmFtZXMpIHsKKwlmb3JlYWNoIG15ICRuIChkdXBzKCRuYW1lKSkgeworCQlmb3JlYWNoIG15ICRlICh2YWxzKCRuYW1lLT57JG59KSkgeworCQkJc2hvdygkbiwgJGUsICRuYW1lLT57JG59LT57JGV9KTsKKwkJfQorCQlwcmludCAiXG4iOworCX0KK30KK2V4aXQgMDsKKworc3ViIG1hcmsgeworCW15ICgkaCwgJGssICR2LCAkdCkgPSBAXzsKKwlteSAkZSA9ICRoLT57JGt9LT57JHZ9IHx8PSB7IGNvdW50ID0+IDAsIHN0YW1wID0+IDAgfTsKKwkkZS0+e2NvdW50fSsrOworCSRlLT57c3RhbXB9ID0gJHQgdW5sZXNzICR0IDwgJGUtPntzdGFtcH07Cit9CisKK3N1YiBkdXBzIHsKKwlteSAkaCA9IHNoaWZ0OworCXJldHVybiBncmVwIHsga2V5cygkaC0+eyRffSkgPiAxIH0ga2V5cygkaCk7Cit9CisKK3N1YiB2YWxzIHsKKwlteSAkaCA9IHNoaWZ0OworCXJldHVybiBzb3J0IHsKKwkJJGgtPnskYn0tPnskb3JkZXJfYnl9IDw9PiAkaC0+eyRhfS0+eyRvcmRlcl9ieX0KKwl9IGtleXMoJGgpOworfQorCitzdWIgc2hvdyB7CisJbXkgKCRuLCAkZSwgJGgpID0gQF87CisJcHJpbnQgIiRuIDwkZT4gKCRoLT57JG9yZGVyX2J5fSlcbiI7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRzL3BhY2tpbmZvLnBsIGIvY29udHJpYi9zdGF0cy9wYWNraW5mby5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZTE4OGMwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdGF0cy9wYWNraW5mby5wbApAQCAtMCwwICsxLDIxMiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIFRoaXMgdG9vbCB3aWxsIHByaW50IHZhZ3VlbHkgcHJldHR5IGluZm9ybWF0aW9uIGFib3V0IGEgcGFjay4gIEl0CisjIGV4cGVjdHMgdGhlIG91dHB1dCBvZiAiZ2l0IHZlcmlmeS1wYWNrIC12IiBhcyBpbnB1dCBvbiBzdGRpbi4KKyMKKyMgJCBnaXQgdmVyaWZ5LXBhY2sgLXYgfCBwYWNraW5mby5wbAorIworIyBUaGlzIHByaW50cyBzb21lIGZ1bGwtcGFjayBzdGF0aXN0aWNzOyBjdXJyZW50bHkgImFsbCBzaXplcyIsICJhbGwKKyMgcGF0aCBzaXplcyIsICJ0cmVlIHNpemVzIiwgInRyZWUgcGF0aCBzaXplcyIsIGFuZCAiZGVwdGhzIi4KKyMKKyMgKiAiYWxsIHNpemVzIiBzdGF0cyBhcmUgYWNyb3NzIGV2ZXJ5IG9iamVjdCBzaXplIGluIHRoZSBmaWxlOworIyAgIGZ1bGwgc2l6ZXMgZm9yIGJhc2Ugb2JqZWN0cywgYW5kIGRlbHRhIHNpemUgZm9yIGRlbHRhcy4KKyMgKiAiYWxsIHBhdGggc2l6ZXMiIHN0YXRzIGFyZSBhY3Jvc3MgYWxsIG9iamVjdCdzICJwYXRoIHNpemVzIi4KKyMgICBBIHBhdGggc2l6ZSBpcyB0aGUgc3VtIG9mIHRoZSBzaXplIG9mIHRoZSBkZWx0YSBjaGFpbiwgaW5jbHVkaW5nIHRoZQorIyAgIGJhc2Ugb2JqZWN0LiAgSW4gb3RoZXIgd29yZHMsIGl0J3MgaG93IG1hbnkgYnl0ZXMgbmVlZCBiZSByZWFkIHRvCisjICAgcmVhc3NlbWJsZSB0aGUgZmlsZSBmcm9tIGRlbHRhcy4KKyMgKiAidHJlZSBzaXplcyIgYXJlIG9iamVjdCBzaXplcyBncm91cGVkIGludG8gZGVsdGEgdHJlZXMuCisjICogInRyZWUgcGF0aCBzaXplcyIgYXJlIHBhdGggc2l6ZXMgZ3JvdXBlZCBpbnRvIGRlbHRhIHRyZWVzLgorIyAqICJkZXB0aHMiIHNob3VsZCBiZSBvYnZpb3VzLgorIworIyBXaGVuIHJ1biBhczoKKyMKKyMgJCBnaXQgdmVyaWZ5LXBhY2sgLXYgfCBwYWNraW5mby5wbCAtdHJlZQorIworIyB0aGUgdHJlZXMgb2Ygb2JqZWN0cyBhcmUgb3V0cHV0IGFsb25nIHdpdGggdGhlIHN0YXRzLiAgVGhpcyBsb29rcworIyBsaWtlOgorIworIyAgIDAgY29tbWl0IDAzMTMyMWM2Li4uICAgICAgODAzICAgICAgODAzCisjCisjICAgMCAgIGJsb2IgMDMxNTZmMjEuLi4gICAgIDE3NjcgICAgIDE3NjcKKyMgICAxICAgIGJsb2IgZjUyYTlkN2YuLi4gICAgICAgMTAgICAgIDE3NzcKKyMgICAyICAgICBibG9iIGE4Y2M1NzM5Li4uICAgICAgIDUxICAgICAxODI4CisjICAgMyAgICAgIGJsb2IgNjYwZTkwYjEuLi4gICAgICAgMTUgICAgIDE4NDMKKyMgICA0ICAgICAgIGJsb2IgMGNiOGUzYmIuLi4gICAgICAgMzMgICAgIDE4NzYKKyMgICAyICAgICBibG9iIGU0ODYwN2YwLi4uICAgICAgMzExICAgICAyMDg4CisjICAgICAgc2l6ZTogY291bnQgNiB0b3RhbCAyMTg3IG1pbiAxMCBtYXggMTc2NyBtZWFuIDM2NC41MCBtZWRpYW4gNTEgc3RkX2RldiA2MzUuODUKKyMgcGF0aCBzaXplOiBjb3VudCA2IHRvdGFsIDExMTc5IG1pbiAxNzY3IG1heCAyMDg4IG1lYW4gMTg2My4xNyBtZWRpYW4gMTg0MyBzdGRfZGV2IDEwNy4yNgorIworIyBUaGUgZmlyc3QgbnVtYmVyIGFmdGVyIHRoZSBzaGExIGlzIHRoZSBvYmplY3Qgc2l6ZSwgdGhlIHNlY29uZAorIyBudW1iZXIgaXMgdGhlIHBhdGggc2l6ZS4gIFRoZSBzdGF0aXN0aWNzIGFyZSBhY3Jvc3MgYWxsIG9iamVjdHMgaW4KKyMgdGhlIHByZXZpb3VzIGRlbHRhIHRyZWUuICBPYnZpb3VzbHkgdGhleSBhcmUgb21pdHRlZCBmb3IgdHJlZXMgb2YKKyMgb25lIG9iamVjdC4KKyMKKyMgV2hlbiBydW4gYXM6CisjCisjICQgZ2l0IHZlcmlmeS1wYWNrIC12IHwgcGFja2luZm8ucGwgLXRyZWUgLWZpbGVuYW1lcworIworIyBpdCBhZGRzIGZpbGVuYW1lcyB0byB0aGUgdHJlZS4gIEdldHRpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyBzbG93OgorIworIyAgIDAgICBibG9iIDAzMTU2ZjIxLi4uICAgICAxNzY3ICAgICAxNzY3IERvY3VtZW50YXRpb24vZ2l0LWxvc3QtZm91bmQudHh0IEAgdGFncy92MS4yLjB+MTQyCisjICAgMSAgICBibG9iIGY1MmE5ZDdmLi4uICAgICAgIDEwICAgICAxNzc3IERvY3VtZW50YXRpb24vZ2l0LWxvc3QtZm91bmQudHh0IEAgdGFncy92MS41LjAtcmMxfjc0CisjICAgMiAgICAgYmxvYiBhOGNjNTczOS4uLiAgICAgICA1MSAgICAgMTgyOCBEb2N1bWVudGF0aW9uL2dpdC1sb3N0K2ZvdW5kLnR4dCBAIHRhZ3MvdjAuOTkuOWheMAorIyAgIDMgICAgICBibG9iIDY2MGU5MGIxLi4uICAgICAgIDE1ICAgICAxODQzIERvY3VtZW50YXRpb24vZ2l0LWxvc3QrZm91bmQudHh0IEAgbWFzdGVyfjMyMjJeMn4yCisjICAgNCAgICAgICBibG9iIDBjYjhlM2JiLi4uICAgICAgIDMzICAgICAxODc2IERvY3VtZW50YXRpb24vZ2l0LWxvc3QrZm91bmQudHh0IEAgbWFzdGVyfjMyMjJeMn4zCisjICAgMiAgICAgYmxvYiBlNDg2MDdmMC4uLiAgICAgIDMxMSAgICAgMjA4OCBEb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dCBAIHRhZ3MvdjEuNS4yLXJjM340CisjICAgICAgc2l6ZTogY291bnQgNiB0b3RhbCAyMTg3IG1pbiAxMCBtYXggMTc2NyBtZWFuIDM2NC41MCBtZWRpYW4gNTEgc3RkX2RldiA2MzUuODUKKyMgcGF0aCBzaXplOiBjb3VudCA2IHRvdGFsIDExMTc5IG1pbiAxNzY3IG1heCAyMDg4IG1lYW4gMTg2My4xNyBtZWRpYW4gMTg0MyBzdGRfZGV2IDEwNy4yNgorIworIyBXaGVuIHJ1biBhczoKKyMKKyMgJCBnaXQgdmVyaWZ5LXBhY2sgLXYgfCBwYWNraW5mby5wbCAtZHVtcAorIworIyBpdCBwcmludHMgb3V0ICJzaGExIHNpemUgcGF0aHNpemUgZGVwdGgiIGZvciBlYWNoIHNoYTEgaW4gbGV4aWNhbAorIyBvcmRlci4KKyMKKyMgMDAwMDc5YTJlYWVmMTdiN2VhZTcwZTFmMGY2MzU1NTdlYTY3YjY0NCAzMCA0NzIgNworIyAwMDAxM2NhZmU2OTgwNDExYWE2ZmRkOTQwNzg0OTE3YjVmZjUwZjBhIDQ0IDE1NDIgNAorIyAwMDAxODJlYWNmOTljZGUyN2Q1OTE2YWE0MTU5MjE5MjRiODI5NzJjIDQ5OSA0OTkgMAorIyAuLi4KKyMKKyMgVGhpcyBpcyBoYW5keSBmb3IgY29tcGFyaW5nIHR3byBwYWNrcy4gIEFkZGluZyAiLWZpbGVuYW1lcyIgd2lsbCBhZGQKKyMgZmlsZW5hbWVzLCBhcyBwZXIgIi10cmVlIC1maWxlbmFtZXMiIGFib3ZlLgorCit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKKworbXkgJGZpbGVuYW1lcyA9IDA7CitteSAkdHJlZSA9IDA7CitteSAkZHVtcCA9IDA7CitHZXRPcHRpb25zKCJ0cmVlIiA9PiBcJHRyZWUsCisgICAgICAgICAgICJmaWxlbmFtZXMiID0+IFwkZmlsZW5hbWVzLAorICAgICAgICAgICAiZHVtcCIgPT4gXCRkdW1wKTsKKworbXkgJXBhcmVudHM7CitteSAlY2hpbGRyZW47CitteSAlc2l6ZXM7CitteSBAcm9vdHM7CitteSAlcGF0aHM7CitteSAldHlwZXM7CitteSBAY29tbWl0czsKK215ICVuYW1lczsKK215ICVkZXB0aHM7CitteSBAZGVwdGhzOworCit3aGlsZSAoPFNURElOPikgeworICAgIG15ICgkc2hhMSwgJHR5cGUsICRzaXplLCAkc3BhY2UsICRvZmZzZXQsICRkZXB0aCwgJHBhcmVudCkgPSBzcGxpdCgvXHMrLywgJF8pOworICAgIG5leHQgdW5sZXNzICgkc2hhMSA9fiAvXlswLTlhLWZdezQwfSQvKTsKKyAgICAkZGVwdGhzeyRzaGExfSA9ICRkZXB0aCB8fCAwOworICAgIHB1c2goQGRlcHRocywgJGRlcHRoIHx8IDApOworICAgIHB1c2goQGNvbW1pdHMsICRzaGExKSBpZiAoJHR5cGUgZXEgJ2NvbW1pdCcpOworICAgIHB1c2goQHJvb3RzLCAkc2hhMSkgdW5sZXNzICRwYXJlbnQ7CisgICAgJHBhcmVudHN7JHNoYTF9ID0gJHBhcmVudDsKKyAgICAkdHlwZXN7JHNoYTF9ID0gJHR5cGU7CisgICAgcHVzaChAeyRjaGlsZHJlbnskcGFyZW50fX0sICRzaGExKTsKKyAgICAkc2l6ZXN7JHNoYTF9ID0gJHNpemU7Cit9CisKK2lmICgkZmlsZW5hbWVzICYmICgkdHJlZSB8fCAkZHVtcCkpIHsKKyAgICBvcGVuKE5BTUVTLCAiZ2l0IG5hbWUtcmV2IC0tYWxsfCIpOworICAgIHdoaWxlICg8TkFNRVM+KSB7CisgICAgICAgIGlmICgvXihcUyspXHMrKC4qKSQvKSB7CisgICAgICAgICAgICBteSAoJHNoYTEsICRuYW1lKSA9ICgkMSwgJDIpOworICAgICAgICAgICAgJG5hbWVzeyRzaGExfSA9ICRuYW1lOworICAgICAgICB9CisgICAgfQorICAgIGNsb3NlIE5BTUVTOworCisgICAgZm9yIG15ICRjb21taXQgKEBjb21taXRzKSB7CisgICAgICAgIG15ICRuYW1lID0gJG5hbWVzeyRjb21taXR9OworICAgICAgICBvcGVuKFRSRUUsICJnaXQgbHMtdHJlZSAtdCAtciAkY29tbWl0fCIpOworICAgICAgICBwcmludCBTVERFUlIgIlBsdW1iaW5nIHRyZWUgJG5hbWVcbiI7CisgICAgICAgIHdoaWxlICg8VFJFRT4pIHsKKyAgICAgICAgICAgIGlmICgvXihcUyspXHMrKFxTKylccysoXFMrKVxzKyguKikkLykgeworICAgICAgICAgICAgICAgIG15ICgkbW9kZSwgJHR5cGUsICRzaGExLCAkcGF0aCkgPSAoJDEsICQyLCAkMywgJDQpOworICAgICAgICAgICAgICAgICRwYXRoc3skc2hhMX0gPSAiJHBhdGggQCAkbmFtZSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UgVFJFRTsKKyAgICB9Cit9CisKK3N1YiBzdGF0cyB7CisgICAgbXkgQGRhdGEgPSBzb3J0IHskYSA8PT4gJGJ9IEBfOworICAgIG15ICRtaW4gPSAkZGF0YVswXTsKKyAgICBteSAkbWF4ID0gJGRhdGFbJCNkYXRhXTsKKyAgICBteSAkdG90YWwgPSAwOworICAgIG15ICRjb3VudCA9IHNjYWxhciBAZGF0YTsKKyAgICBmb3IgbXkgJGRhdHVtIChAZGF0YSkgeworICAgICAgICAkdG90YWwgKz0gJGRhdHVtOworICAgIH0KKyAgICBteSAkbWVhbiA9ICR0b3RhbCAvICRjb3VudDsKKyAgICBteSAkbWVkaWFuID0gJGRhdGFbaW50KEBkYXRhIC8gMildOworICAgIG15ICRkaWZmX3N1bSA9IDA7CisgICAgZm9yIG15ICRkYXR1bSAoQGRhdGEpIHsKKyAgICAgICAgJGRpZmZfc3VtICs9ICgkZGF0dW0gLSAkbWVhbikqKjI7CisgICAgfQorICAgIG15ICRzdGRfZGV2ID0gc3FydCgkZGlmZl9zdW0gLyAkY291bnQpOworICAgIHJldHVybiAoJGNvdW50LCAkdG90YWwsICRtaW4sICRtYXgsICRtZWFuLCAkbWVkaWFuLCAkc3RkX2Rldik7Cit9CisKK3N1YiBwcmludF9zdGF0cyB7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAoJGNvdW50LCAkdG90YWwsICRtaW4sICRtYXgsICRtZWFuLCAkbWVkaWFuLCAkc3RkX2RldikgPSBzdGF0cyhAXyk7CisgICAgcHJpbnRmKCIlczogY291bnQgJXMgdG90YWwgJXMgbWluICVzIG1heCAlcyBtZWFuICUuMmYgbWVkaWFuICVzIHN0ZF9kZXYgJS4yZlxuIiwKKyAgICAgICAgICAgJG5hbWUsICRjb3VudCwgJHRvdGFsLCAkbWluLCAkbWF4LCAkbWVhbiwgJG1lZGlhbiwgJHN0ZF9kZXYpOworfQorCitteSBAc2l6ZXM7CitteSBAcGF0aF9zaXplczsKK215IEBhbGxfc2l6ZXM7CitteSBAYWxsX3BhdGhfc2l6ZXM7CitteSAlcGF0aF9zaXplczsKKworc3ViIGRpZyB7CisgICAgbXkgKCRzaGExLCAkZGVwdGgsICRwYXRoX3NpemUpID0gQF87CisgICAgJHBhdGhfc2l6ZSArPSAkc2l6ZXN7JHNoYTF9OworICAgIHB1c2goQHNpemVzLCAkc2l6ZXN7JHNoYTF9KTsKKyAgICBwdXNoKEBhbGxfc2l6ZXMsICRzaXplc3skc2hhMX0pOworICAgIHB1c2goQHBhdGhfc2l6ZXMsICRwYXRoX3NpemUpOworICAgIHB1c2goQGFsbF9wYXRoX3NpemVzLCAkcGF0aF9zaXplKTsKKyAgICAkcGF0aF9zaXplc3skc2hhMX0gPSAkcGF0aF9zaXplOworICAgIGlmICgkdHJlZSkgeworICAgICAgICBwcmludGYoIiUzZCVzICU2cyAlcyAlOGQgJThkICVzXG4iLAorICAgICAgICAgICAgICAgJGRlcHRoLCAoIiAiIHggJGRlcHRoKSwgJHR5cGVzeyRzaGExfSwKKyAgICAgICAgICAgICAgICRzaGExLCAkc2l6ZXN7JHNoYTF9LCAkcGF0aF9zaXplLCAkcGF0aHN7JHNoYTF9KTsKKyAgICB9CisgICAgZm9yIG15ICRjaGlsZCAoQHskY2hpbGRyZW57JHNoYTF9fSkgeworICAgICAgICBkaWcoJGNoaWxkLCAkZGVwdGggKyAxLCAkcGF0aF9zaXplKTsKKyAgICB9Cit9CisKK215IEB0cmVlX3NpemVzOworbXkgQHRyZWVfcGF0aF9zaXplczsKKworZm9yIG15ICRyb290IChAcm9vdHMpIHsKKyAgICB1bmRlZiBAc2l6ZXM7CisgICAgdW5kZWYgQHBhdGhfc2l6ZXM7CisgICAgZGlnKCRyb290LCAwLCAwKTsKKyAgICBteSAoJGFhLCAkc3pfdG90YWwpID0gc3RhdHMoQHNpemVzKTsKKyAgICBteSAoJGJiLCAkcHN6X3RvdGFsKSA9IHN0YXRzKEBwYXRoX3NpemVzKTsKKyAgICBwdXNoKEB0cmVlX3NpemVzLCAkc3pfdG90YWwpOworICAgIHB1c2goQHRyZWVfcGF0aF9zaXplcywgJHBzel90b3RhbCk7CisgICAgaWYgKCR0cmVlKSB7CisgICAgICAgIGlmIChAc2l6ZXMgPiAxKSB7CisgICAgICAgICAgICBwcmludF9zdGF0cygiICAgICBzaXplIiwgQHNpemVzKTsKKyAgICAgICAgICAgIHByaW50X3N0YXRzKCJwYXRoIHNpemUiLCBAcGF0aF9zaXplcyk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIlxuIjsKKyAgICB9Cit9CisKK2lmICgkZHVtcCkgeworICAgIGZvciBteSAkc2hhMSAoc29ydCBrZXlzICVzaXplcykgeworICAgICAgICBwcmludCAiJHNoYTEgJHNpemVzeyRzaGExfSAkcGF0aF9zaXplc3skc2hhMX0gJGRlcHRoc3skc2hhMX0gJHBhdGhzeyRzaGExfVxuIjsKKyAgICB9Cit9IGVsc2UgeworICAgIHByaW50X3N0YXRzKCIgICAgICBhbGwgc2l6ZXMiLCBAYWxsX3NpemVzKTsKKyAgICBwcmludF9zdGF0cygiIGFsbCBwYXRoIHNpemVzIiwgQGFsbF9wYXRoX3NpemVzKTsKKyAgICBwcmludF9zdGF0cygiICAgICB0cmVlIHNpemVzIiwgQHRyZWVfc2l6ZXMpOworICAgIHByaW50X3N0YXRzKCJ0cmVlIHBhdGggc2l6ZXMiLCBAdHJlZV9wYXRoX3NpemVzKTsKKyAgICBwcmludF9zdGF0cygiICAgICAgICAgZGVwdGhzIiwgQGRlcHRocyk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvLmdpdGlnbm9yZSBiL2NvbnRyaWIvc3VidHJlZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTM4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDcgQEAKKyp+CitnaXQtc3VidHJlZQorZ2l0LXN1YnRyZWUuMQorZ2l0LXN1YnRyZWUuaHRtbAorZ2l0LXN1YnRyZWUueG1sCittYWlubGluZQorc3VicHJvagpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL0NPUFlJTkcgYi9jb250cmliL3N1YnRyZWUvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL0NPUFlJTkcKQEAgLTAsMCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL0lOU1RBTEwgYi9jb250cmliL3N1YnRyZWUvSU5TVEFMTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWIwY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL0lOU1RBTEwKQEAgLTAsMCArMSwyOCBAQAorSE9XIFRPIElOU1RBTEwgZ2l0LXN1YnRyZWUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpcnN0LCBidWlsZCBmcm9tIHRoZSB0b3Agc291cmNlIGRpcmVjdG9yeS4KKworVGhlbiwgaW4gY29udHJpYi9zdWJ0cmVlLCBydW46CisKKyAgbWFrZQorICBtYWtlIGluc3RhbGwKKyAgbWFrZSBpbnN0YWxsLWRvYworCitJZiB5b3UgdXNlZCBjb25maWd1cmUgdG8gZG8gdGhlIG1haW4gYnVpbGQgdGhlIGdpdC1zdWJ0cmVlIGJ1aWxkIHdpbGwKK3BpY2sgdXAgdGhvc2Ugc2V0dGluZ3MuICBJZiBub3QsIHlvdSB3aWxsIGxpa2VseSBoYXZlIHRvIHByb3ZpZGUgYQordmFsdWUgZm9yIHByZWZpeDoKKworICBtYWtlIHByZWZpeD08c29tZSBkaXI+CisgIG1ha2UgcHJlZml4PTxzb21lIGRpcj4gaW5zdGFsbAorICBtYWtlIHByZWZpeD08c29tZSBkaXI+IGluc3RhbGwtZG9jCisKK1RvIHJ1biB0ZXN0cyBmaXJzdCBjb3B5IGdpdC1zdWJ0cmVlIHRvIHRoZSBtYWluIGJ1aWxkIGFyZWEgc28gdGhlCituZXdseS1idWlsdCBnaXQgY2FuIGZpbmQgaXQ6CisKKyAgY3AgZ2l0LXN1YnRyZWUgLi4vLi4KKworVGhlbjoKKworICBtYWtlIHRlc3QKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL01ha2VmaWxlIGIvY29udHJpYi9zdWJ0cmVlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MDZhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvTWFrZWZpbGUKQEAgLTAsMCArMSwxMDEgQEAKKyMgVGhlIGRlZmF1bHQgdGFyZ2V0IG9mIHRoaXMgTWFrZWZpbGUgaXMuLi4KK2FsbDo6CisKKy1pbmNsdWRlIC4uLy4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1haworCitwcmVmaXggPz0gL3Vzci9sb2NhbAorZ2l0ZXhlY2RpciA/PSAkKHByZWZpeCkvbGliZXhlYy9naXQtY29yZQorbWFuZGlyID89ICQocHJlZml4KS9zaGFyZS9tYW4KK21hbjFkaXIgPz0gJChtYW5kaXIpL21hbjEKK2h0bWxkaXIgPz0gJChwcmVmaXgpL3NoYXJlL2RvYy9naXQtZG9jCisKKy4uLy4uL0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCisJJChNQUtFKSAtQyAuLi8uLi8gR0lULVZFUlNJT04tRklMRQorCistaW5jbHVkZSAuLi8uLi9HSVQtVkVSU0lPTi1GSUxFCisKKyMgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGEgJ3N0YW5kYXJkJyBic2QtdHlwZSBpbnN0YWxsIHByb2dyYW0KK0lOU1RBTEwgID89IGluc3RhbGwKK1JNICAgICAgID89IHJtIC1mCisKK0FTQ0lJRE9DICAgICAgICAgPSBhc2NpaWRvYworQVNDSUlET0NfQ09ORiAgICA9IC1mIC4uLy4uL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZgorQVNDSUlET0NfSFRNTCAgICA9IHhodG1sMTEKK0FTQ0lJRE9DX0RPQ0JPT0sgPSBkb2Nib29rCitBU0NJSURPQ19FWFRSQSAgID0KK1hNTFRPICAgICAgICAgICAgPSB4bWx0bworCitpZmRlZiBVU0VfQVNDSUlET0NUT1IKK0FTQ0lJRE9DICAgICAgICAgPSBhc2NpaWRvY3RvcgorQVNDSUlET0NfQ09ORiAgICA9CitBU0NJSURPQ19IVE1MICAgID0geGh0bWw1CitBU0NJSURPQ19ET0NCT09LID0gZG9jYm9vazQ1CitBU0NJSURPQ19FWFRSQSAgKz0gLUkuLi8uLi9Eb2N1bWVudGF0aW9uIC1yYXNjaWlkb2N0b3ItZXh0ZW5zaW9ucworQVNDSUlET0NfRVhUUkEgICs9IC1hbGl0ZGQ9JyZcI3gyZDsmXCN4MmQ7JworZW5kaWYKKworaWZuZGVmIFNIRUxMX1BBVEgKKwlTSEVMTF9QQVRIID0gL2Jpbi9zaAorZW5kaWYKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorCitNQU5QQUdFX1hTTCAgID0gLi4vLi4vRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wKKworR0lUX1NVQlRSRUVfU0ggOj0gZ2l0LXN1YnRyZWUuc2gKK0dJVF9TVUJUUkVFICAgIDo9IGdpdC1zdWJ0cmVlCisKK0dJVF9TVUJUUkVFX0RPQyA6PSBnaXQtc3VidHJlZS4xCitHSVRfU1VCVFJFRV9YTUwgOj0gZ2l0LXN1YnRyZWUueG1sCitHSVRfU1VCVFJFRV9UWFQgOj0gZ2l0LXN1YnRyZWUudHh0CitHSVRfU1VCVFJFRV9IVE1MIDo9IGdpdC1zdWJ0cmVlLmh0bWwKK0dJVF9TVUJUUkVFX1RFU1QgOj0gLi4vLi4vZ2l0LXN1YnRyZWUKKworYWxsOjogJChHSVRfU1VCVFJFRSkKKworJChHSVRfU1VCVFJFRSk6ICQoR0lUX1NVQlRSRUVfU0gpCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnICQ8ID4kQAorCWNobW9kICt4ICRACisKK2RvYzogJChHSVRfU1VCVFJFRV9ET0MpICQoR0lUX1NVQlRSRUVfSFRNTCkKKworbWFuOiAkKEdJVF9TVUJUUkVFX0RPQykKKworaHRtbDogJChHSVRfU1VCVFJFRV9IVE1MKQorCitpbnN0YWxsOiAkKEdJVF9TVUJUUkVFKQorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKGdpdGV4ZWNkaXIpCisJJChJTlNUQUxMKSAtbSA3NTUgJChHSVRfU1VCVFJFRSkgJChERVNURElSKSQoZ2l0ZXhlY2RpcikKKworaW5zdGFsbC1kb2M6IGluc3RhbGwtbWFuIGluc3RhbGwtaHRtbAorCitpbnN0YWxsLW1hbjogJChHSVRfU1VCVFJFRV9ET0MpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuMWRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkXiAkKERFU1RESVIpJChtYW4xZGlyKQorCitpbnN0YWxsLWh0bWw6ICQoR0lUX1NVQlRSRUVfSFRNTCkKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChodG1sZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0ICReICQoREVTVERJUikkKGh0bWxkaXIpCisKKyQoR0lUX1NVQlRSRUVfRE9DKTogJChHSVRfU1VCVFJFRV9YTUwpCisJJChYTUxUTykgLW0gJChNQU5QQUdFX1hTTCkgbWFuICReCisKKyQoR0lUX1NVQlRSRUVfWE1MKTogJChHSVRfU1VCVFJFRV9UWFQpCisJJChBU0NJSURPQykgLWIgJChBU0NJSURPQ19ET0NCT09LKSAtZCBtYW5wYWdlICQoQVNDSUlET0NfQ09ORikgXAorCQktYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pICQoQVNDSUlET0NfRVhUUkEpICReCisKKyQoR0lUX1NVQlRSRUVfSFRNTCk6ICQoR0lUX1NVQlRSRUVfVFhUKQorCSQoQVNDSUlET0MpIC1iICQoQVNDSUlET0NfSFRNTCkgLWQgbWFucGFnZSAkKEFTQ0lJRE9DX0NPTkYpIFwKKwkJLWFnaXRfdmVyc2lvbj0kKEdJVF9WRVJTSU9OKSAkKEFTQ0lJRE9DX0VYVFJBKSAkXgorCiskKEdJVF9TVUJUUkVFX1RFU1QpOiAkKEdJVF9TVUJUUkVFKQorCWNwICQ8ICRACisKK3Rlc3Q6ICQoR0lUX1NVQlRSRUVfVEVTVCkKKwkkKE1BS0UpIC1DIHQvIHRlc3QKKworY2xlYW46CisJJChSTSkgJChHSVRfU1VCVFJFRSkKKwkkKFJNKSAqLnhtbCAqLmh0bWwgKi4xCisKKy5QSE9OWTogRk9SQ0UKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS9SRUFETUUgYi9jb250cmliL3N1YnRyZWUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODZiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvUkVBRE1FCkBAIC0wLDAgKzEsOCBAQAorCitQbGVhc2UgcmVhZCBnaXQtc3VidHJlZS50eHQgZm9yIGRvY3VtZW50YXRpb24uCisKK1BsZWFzZSBkb24ndCBjb250YWN0IG1lIHVzaW5nIGdpdGh1YiBtYWlsOyBpdCdzIHNsb3csIHVnbHksIGFuZCB3b3JzdCBvZgorYWxsLCByZWR1bmRhbnQuIEVtYWlsIG1lIGluc3RlYWQgYXQgYXBlbndhcnJAZ21haWwuY29tIGFuZCBJJ2xsIGJlIGhhcHB5IHRvCitoZWxwLgorCitBdmVyeQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnNoIGIvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2OGUxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUuc2gKQEAgLTAsMCArMSw5MDEgQEAKKyMhL2Jpbi9zaAorIworIyBnaXQtc3VidHJlZS5zaDogc3BsaXQvam9pbiBnaXQgcmVwb3NpdG9yaWVzIGluIHN1YmRpcmVjdG9yaWVzIG9mIHRoaXMgb25lCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBBdmVyeSBQZW5uYXJ1biA8YXBlbndhcnJAZ21haWwuY29tPgorIworaWYgdGVzdCAkIyAtZXEgMAordGhlbgorCXNldCAtLSAtaAorZmkKK09QVFNfU1BFQz0iXAorZ2l0IHN1YnRyZWUgYWRkICAgLS1wcmVmaXg9PHByZWZpeD4gPGNvbW1pdD4KK2dpdCBzdWJ0cmVlIGFkZCAgIC0tcHJlZml4PTxwcmVmaXg+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+L2Rldi9udWxsKSB8fAorICBkaWUgIk5vdCBhIGdpdCByZXBvc2l0b3J5OiBcIiRvcmlnX2dpdFwiIgorCitjYXNlICIkZ2l0X2RpciIgaW4KKy5naXQpCisJZ2l0X2Rpcj0iJG9yaWdfZ2l0Ly5naXQiCisJOzsKKy4pCisJZ2l0X2Rpcj0kb3JpZ19naXQKKwk7OworZXNhYworCisjIGRvbid0IGxpbmsgdG8gYSBjb25maWd1cmVkIGJhcmUgcmVwb3NpdG9yeQoraXNiYXJlPSQoZ2l0IC0tZ2l0LWRpcj0iJGdpdF9kaXIiIGNvbmZpZyAtLWJvb2wgLS1nZXQgY29yZS5iYXJlKQoraWYgdGVzdCB6dHJ1ZSA9ICJ6JGlzYmFyZSIKK3RoZW4KKwlkaWUgIlwiJGdpdF9kaXJcIiBoYXMgY29yZS5iYXJlIHNldCB0byB0cnVlLCIgXAorCQkiIHJlbW92ZSBmcm9tIFwiJGdpdF9kaXIvY29uZmlnXCIgdG8gdXNlICQwIgorZmkKKworIyBkb24ndCBsaW5rIHRvIGEgd29ya2RpcgoraWYgdGVzdCAtaCAiJGdpdF9kaXIvY29uZmlnIgordGhlbgorCWRpZSAiXCIkb3JpZ19naXRcIiBpcyBhIHdvcmtpbmcgZGlyZWN0b3J5IG9ubHksIHBsZWFzZSBzcGVjaWZ5IiBcCisJCSJhIGNvbXBsZXRlIHJlcG9zaXRvcnkuIgorZmkKKworIyBtYWtlIHN1cmUgdGhlIGxpbmtzIGluIHRoZSB3b3JrZGlyIGhhdmUgZnVsbCBwYXRocyB0byB0aGUgb3JpZ2luYWwgcmVwbworZ2l0X2Rpcj0kKGNkICIkZ2l0X2RpciIgJiYgcHdkKSB8fCBleGl0IDEKKworIyBkb24ndCByZWNyZWF0ZSBhIHdvcmtkaXIgb3ZlciBhbiBleGlzdGluZyBkaXJlY3RvcnksIHVubGVzcyBpdCdzIGVtcHR5CitpZiB0ZXN0IC1kICIkbmV3X3dvcmtkaXIiCit0aGVuCisJaWYgdGVzdCAkKGxzIC1hMSAiJG5ld193b3JrZGlyLy4iIHwgd2MgLWwpIC1uZSAyCisJdGhlbgorCQlkaWUgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSAnJG5ld193b3JrZGlyJyBpcyBub3QgZW1wdHkuIgorCWZpCisJY2xlYW5kaXI9IiRuZXdfd29ya2Rpci8uZ2l0IgorZWxzZQorCWNsZWFuZGlyPSIkbmV3X3dvcmtkaXIiCitmaQorCitta2RpciAtcCAiJG5ld193b3JrZGlyLy5naXQiIHx8IGZhaWxlZAorY2xlYW5kaXI9JChjZCAiJGNsZWFuZGlyIiAmJiBwd2QpIHx8IGZhaWxlZAorCitjbGVhbnVwICgpIHsKKwlybSAtcmYgIiRjbGVhbmRpciIKK30KK3NpZ2xpc3Q9IjAgMSAyIDE1IgordHJhcCBjbGVhbnVwICRzaWdsaXN0CisKKyMgY3JlYXRlIHRoZSBsaW5rcyB0byB0aGUgb3JpZ2luYWwgcmVwby4gIGV4cGxpY2l0bHkgZXhjbHVkZSBpbmRleCwgSEVBRCBhbmQKKyMgbG9ncy9IRUFEIGZyb20gdGhlIGxpc3Qgc2luY2UgdGhleSBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgd29ya2luZworIyBkaXJlY3RvcnksIGFuZCBzaG91bGQgbm90IGJlIHNoYXJlZC4KK2ZvciB4IGluIGNvbmZpZyByZWZzIGxvZ3MvcmVmcyBvYmplY3RzIGluZm8gaG9va3MgcGFja2VkLXJlZnMgcmVtb3RlcyByci1jYWNoZSBzdm4KK2RvCisJIyBjcmVhdGUgYSBjb250YWluaW5nIGRpcmVjdG9yeSBpZiBuZWVkZWQKKwljYXNlICR4IGluCisJKi8qKQorCQlta2RpciAtcCAiJG5ld193b3JrZGlyLy5naXQvJHt4JS8qfSIKKwkJOzsKKwllc2FjCisKKwlsbiAtcyAiJGdpdF9kaXIvJHgiICIkbmV3X3dvcmtkaXIvLmdpdC8keCIgfHwgZmFpbGVkCitkb25lCisKKyMgY29tbWFuZHMgYmVsb3cgdGhpcyBhcmUgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgd29ya2RpcgorY2QgIiRuZXdfd29ya2RpciIgfHwgZmFpbGVkCisKKyMgY29weSB0aGUgSEVBRCBmcm9tIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IGFzIGEgZGVmYXVsdCBicmFuY2gKK2NwICIkZ2l0X2Rpci9IRUFEIiAuZ2l0L0hFQUQgfHwgZmFpbGVkCisKKyMgdGhlIHdvcmtkaXIgaXMgc2V0IHVwLiAgaWYgdGhlIGNoZWNrb3V0IGZhaWxzLCB0aGUgdXNlciBjYW4gZml4IGl0LgordHJhcCAtICRzaWdsaXN0CisKKyMgY2hlY2tvdXQgdGhlIGJyYW5jaCAoZWl0aGVyIHRoZSBzYW1lIGFzIEhFQUQgZnJvbSB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSwKKyMgb3IgdGhlIG9uZSB0aGF0IHdhcyBhc2tlZCBmb3IpCitnaXQgY2hlY2tvdXQgLWYgJGJyYW5jaApkaWZmIC0tZ2l0IGEvY29udmVydC5jIGIvY29udmVydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYWQzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb252ZXJ0LmMKQEAgLTAsMCArMSwxOTg0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzdWItcHJvY2Vzcy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorCisvKgorICogY29udmVydC5jIC0gY29udmVydCBhIGZpbGUgd2hlbiBjaGVja2luZyBpdCBvdXQgYW5kIGNoZWNraW5nIGl0IGluLgorICoKKyAqIFRoaXMgc2hvdWxkIHVzZSB0aGUgcGF0aG5hbWUgdG8gZGVjaWRlIG9uIHdoZXRoZXIgaXQgd2FudHMgdG8gZG8gc29tZQorICogbW9yZSBpbnRlcmVzdGluZyBjb252ZXJzaW9ucyAoYXV0b21hdGljIGd6aXAvdW56aXAsIGdlbmVyYWwgZm9ybWF0CisgKiBjb252ZXJzaW9ucyBldGMgZXRjKSwgYnV0IGJ5IGRlZmF1bHQgaXQganVzdCBkb2VzIGF1dG9tYXRpYyBDUkxGPC0+TEYKKyAqIHRyYW5zbGF0aW9uIHdoZW4gdGhlICJ0ZXh0IiBhdHRyaWJ1dGUgb3IgImF1dG9fY3JsZiIgb3B0aW9uIGlzIHNldC4KKyAqLworCisvKiBTdGF0IGJpdHM6IFdoZW4gQklOIGlzIHNldCwgdGhlIHR4dCBiaXRzIGFyZSB1bnNldCAqLworI2RlZmluZSBDT05WRVJUX1NUQVRfQklUU19UWFRfTEYgICAgMHgxCisjZGVmaW5lIENPTlZFUlRfU1RBVF9CSVRTX1RYVF9DUkxGICAweDIKKyNkZWZpbmUgQ09OVkVSVF9TVEFUX0JJVFNfQklOICAgICAgIDB4NAorCitlbnVtIGNybGZfYWN0aW9uIHsKKwlDUkxGX1VOREVGSU5FRCwKKwlDUkxGX0JJTkFSWSwKKwlDUkxGX1RFWFQsCisJQ1JMRl9URVhUX0lOUFVULAorCUNSTEZfVEVYVF9DUkxGLAorCUNSTEZfQVVUTywKKwlDUkxGX0FVVE9fSU5QVVQsCisJQ1JMRl9BVVRPX0NSTEYKK307CisKK3N0cnVjdCB0ZXh0X3N0YXQgeworCS8qIE5VTCwgQ1IsIExGIGFuZCBDUkxGIGNvdW50cyAqLworCXVuc2lnbmVkIG51bCwgbG9uZWNyLCBsb25lbGYsIGNybGY7CisKKwkvKiBUaGVzZSBhcmUganVzdCBhcHByb3hpbWF0aW9ucyEgKi8KKwl1bnNpZ25lZCBwcmludGFibGUsIG5vbnByaW50YWJsZTsKK307CisKK3N0YXRpYyB2b2lkIGdhdGhlcl9zdGF0cyhjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHRleHRfc3RhdCAqc3RhdHMpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IGJ1ZltpXTsKKwkJaWYgKGMgPT0gJ1xyJykgeworCQkJaWYgKGkrMSA8IHNpemUgJiYgYnVmW2krMV0gPT0gJ1xuJykgeworCQkJCXN0YXRzLT5jcmxmKys7CisJCQkJaSsrOworCQkJfSBlbHNlCisJCQkJc3RhdHMtPmxvbmVjcisrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gJ1xuJykgeworCQkJc3RhdHMtPmxvbmVsZisrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gMTI3KQorCQkJLyogREVMICovCisJCQlzdGF0cy0+bm9ucHJpbnRhYmxlKys7CisJCWVsc2UgaWYgKGMgPCAzMikgeworCQkJc3dpdGNoIChjKSB7CisJCQkJLyogQlMsIEhULCBFU0MgYW5kIEZGICovCisJCQljYXNlICdcYic6IGNhc2UgJ1x0JzogY2FzZSAnXDAzMyc6IGNhc2UgJ1wwMTQnOgorCQkJCXN0YXRzLT5wcmludGFibGUrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQlzdGF0cy0+bnVsKys7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCXN0YXRzLT5ub25wcmludGFibGUrKzsKKwkJCX0KKwkJfQorCQllbHNlCisJCQlzdGF0cy0+cHJpbnRhYmxlKys7CisJfQorCisJLyogSWYgZmlsZSBlbmRzIHdpdGggRU9GIHRoZW4gZG9uJ3QgY291bnQgdGhpcyBFT0YgYXMgbm9uLXByaW50YWJsZS4gKi8KKwlpZiAoc2l6ZSA+PSAxICYmIGJ1ZltzaXplLTFdID09ICdcMDMyJykKKwkJc3RhdHMtPm5vbnByaW50YWJsZS0tOworfQorCisvKgorICogVGhlIHNhbWUgaGV1cmlzdGljcyBhcyBkaWZmLmM6Om1tZmlsZV9pc19iaW5hcnkoKQorICogV2UgdHJlYXQgZmlsZXMgd2l0aCBiYXJlIENSIGFzIGJpbmFyeQorICovCitzdGF0aWMgaW50IGNvbnZlcnRfaXNfYmluYXJ5KGNvbnN0IHN0cnVjdCB0ZXh0X3N0YXQgKnN0YXRzKQoreworCWlmIChzdGF0cy0+bG9uZWNyKQorCQlyZXR1cm4gMTsKKwlpZiAoc3RhdHMtPm51bCkKKwkJcmV0dXJuIDE7CisJaWYgKChzdGF0cy0+cHJpbnRhYmxlID4+IDcpIDwgc3RhdHMtPm5vbnByaW50YWJsZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2F0aGVyX2NvbnZlcnRfc3RhdHMoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCB0ZXh0X3N0YXQgc3RhdHM7CisJaW50IHJldCA9IDA7CisJaWYgKCFkYXRhIHx8ICFzaXplKQorCQlyZXR1cm4gMDsKKwlnYXRoZXJfc3RhdHMoZGF0YSwgc2l6ZSwgJnN0YXRzKTsKKwlpZiAoY29udmVydF9pc19iaW5hcnkoJnN0YXRzKSkKKwkJcmV0IHw9IENPTlZFUlRfU1RBVF9CSVRTX0JJTjsKKwlpZiAoc3RhdHMuY3JsZikKKwkJcmV0IHw9IENPTlZFUlRfU1RBVF9CSVRTX1RYVF9DUkxGOworCWlmIChzdGF0cy5sb25lbGYpCisJCXJldCB8PSAgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0xGOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdhdGhlcl9jb252ZXJ0X3N0YXRzX2FzY2lpKGNvbnN0IGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY29udmVydF9zdGF0cyA9IGdhdGhlcl9jb252ZXJ0X3N0YXRzKGRhdGEsIHNpemUpOworCisJaWYgKGNvbnZlcnRfc3RhdHMgJiBDT05WRVJUX1NUQVRfQklUU19CSU4pCisJCXJldHVybiAiLXRleHQiOworCXN3aXRjaCAoY29udmVydF9zdGF0cykgeworCWNhc2UgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0xGOgorCQlyZXR1cm4gImxmIjsKKwljYXNlIENPTlZFUlRfU1RBVF9CSVRTX1RYVF9DUkxGOgorCQlyZXR1cm4gImNybGYiOworCWNhc2UgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0xGIHwgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0NSTEY6CisJCXJldHVybiAibWl4ZWQiOworCWRlZmF1bHQ6CisJCXJldHVybiAibm9uZSI7CisJfQorfQorCitjb25zdCBjaGFyICpnZXRfY2FjaGVkX2NvbnZlcnRfc3RhdHNfYXNjaWkoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcmV0OworCXVuc2lnbmVkIGxvbmcgc3o7CisJdm9pZCAqZGF0YSA9IHJlYWRfYmxvYl9kYXRhX2Zyb21faW5kZXgoaXN0YXRlLCBwYXRoLCAmc3opOworCXJldCA9IGdhdGhlcl9jb252ZXJ0X3N0YXRzX2FzY2lpKGRhdGEsIHN6KTsKKwlmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKmdldF93dF9jb252ZXJ0X3N0YXRzX2FzY2lpKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcmV0ID0gIiI7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgcGF0aCwgMCkgPj0gMCkKKwkJcmV0ID0gZ2F0aGVyX2NvbnZlcnRfc3RhdHNfYXNjaWkoc2IuYnVmLCBzYi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0ZXh0X2VvbF9pc19jcmxmKHZvaWQpCit7CisJaWYgKGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfVFJVRSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYXV0b19jcmxmID09IEFVVE9fQ1JMRl9JTlBVVCkKKwkJcmV0dXJuIDA7CisJaWYgKGNvcmVfZW9sID09IEVPTF9DUkxGKQorCQlyZXR1cm4gMTsKKwlpZiAoY29yZV9lb2wgPT0gRU9MX1VOU0VUICYmIEVPTF9OQVRJVkUgPT0gRU9MX0NSTEYpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBlb2wgb3V0cHV0X2VvbChlbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uKQoreworCXN3aXRjaCAoY3JsZl9hY3Rpb24pIHsKKwljYXNlIENSTEZfQklOQVJZOgorCQlyZXR1cm4gRU9MX1VOU0VUOworCWNhc2UgQ1JMRl9URVhUX0NSTEY6CisJCXJldHVybiBFT0xfQ1JMRjsKKwljYXNlIENSTEZfVEVYVF9JTlBVVDoKKwkJcmV0dXJuIEVPTF9MRjsKKwljYXNlIENSTEZfVU5ERUZJTkVEOgorCWNhc2UgQ1JMRl9BVVRPX0NSTEY6CisJCXJldHVybiBFT0xfQ1JMRjsKKwljYXNlIENSTEZfQVVUT19JTlBVVDoKKwkJcmV0dXJuIEVPTF9MRjsKKwljYXNlIENSTEZfVEVYVDoKKwljYXNlIENSTEZfQVVUTzoKKwkJLyogZmFsbCB0aHJvdWdoICovCisJCXJldHVybiB0ZXh0X2VvbF9pc19jcmxmKCkgPyBFT0xfQ1JMRiA6IEVPTF9MRjsKKwl9CisJd2FybmluZyhfKCJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIiksIChpbnQpY3JsZl9hY3Rpb24pOworCXJldHVybiBjb3JlX2VvbDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZ2xvYmFsX2NvbnZfZmxhZ3NfZW9sKGNvbnN0IGNoYXIgKnBhdGgsIGVudW0gY3JsZl9hY3Rpb24gY3JsZl9hY3Rpb24sCisJCQkgICAgc3RydWN0IHRleHRfc3RhdCAqb2xkX3N0YXRzLCBzdHJ1Y3QgdGV4dF9zdGF0ICpuZXdfc3RhdHMsCisJCQkgICAgaW50IGNvbnZfZmxhZ3MpCit7CisJaWYgKG9sZF9zdGF0cy0+Y3JsZiAmJiAhbmV3X3N0YXRzLT5jcmxmICkgeworCQkvKgorCQkgKiBDUkxGcyB3b3VsZCBub3QgYmUgcmVzdG9yZWQgYnkgY2hlY2tvdXQKKwkJICovCisJCWlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX0RJRSkKKwkJCWRpZShfKCJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzIiksIHBhdGgpOworCQllbHNlIGlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX1dBUk4pCisJCQl3YXJuaW5nKF8oIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKwkJCQkgICJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUiCisJCQkJICAiIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIpLCBwYXRoKTsKKwl9IGVsc2UgaWYgKG9sZF9zdGF0cy0+bG9uZWxmICYmICFuZXdfc3RhdHMtPmxvbmVsZiApIHsKKwkJLyoKKwkJICogQ1JMRnMgd291bGQgYmUgYWRkZWQgYnkgY2hlY2tvdXQKKwkJICovCisJCWlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX0RJRSkKKwkJCWRpZShfKCJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIiksIHBhdGgpOworCQllbHNlIGlmIChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX1dBUk4pCisJCQl3YXJuaW5nKF8oIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKwkJCQkgICJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUiCisJCQkJICAiIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIpLCBwYXRoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGFzX2NybGZfaW5faW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJdW5zaWduZWQgbG9uZyBzejsKKwl2b2lkICpkYXRhOworCWNvbnN0IGNoYXIgKmNycDsKKwlpbnQgaGFzX2NybGYgPSAwOworCisJZGF0YSA9IHJlYWRfYmxvYl9kYXRhX2Zyb21faW5kZXgoaXN0YXRlLCBwYXRoLCAmc3opOworCWlmICghZGF0YSkKKwkJcmV0dXJuIDA7CisKKwljcnAgPSBtZW1jaHIoZGF0YSwgJ1xyJywgc3opOworCWlmIChjcnApIHsKKwkJdW5zaWduZWQgaW50IHJldF9zdGF0czsKKwkJcmV0X3N0YXRzID0gZ2F0aGVyX2NvbnZlcnRfc3RhdHMoZGF0YSwgc3opOworCQlpZiAoIShyZXRfc3RhdHMgJiBDT05WRVJUX1NUQVRfQklUU19CSU4pICYmCisJCSAgICAocmV0X3N0YXRzICYgQ09OVkVSVF9TVEFUX0JJVFNfVFhUX0NSTEYpKQorCQkJaGFzX2NybGYgPSAxOworCX0KKwlmcmVlKGRhdGEpOworCXJldHVybiBoYXNfY3JsZjsKK30KKworc3RhdGljIGludCB3aWxsX2NvbnZlcnRfbGZfdG9fY3JsZihzdHJ1Y3QgdGV4dF9zdGF0ICpzdGF0cywKKwkJCQkgICBlbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uKQoreworCWlmIChvdXRwdXRfZW9sKGNybGZfYWN0aW9uKSAhPSBFT0xfQ1JMRikKKwkJcmV0dXJuIDA7CisJLyogTm8gIm5ha2VkIiBMRj8gTm90aGluZyB0byBjb252ZXJ0LCByZWdhcmRsZXNzLiAqLworCWlmICghc3RhdHMtPmxvbmVsZikKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPIHx8IGNybGZfYWN0aW9uID09IENSTEZfQVVUT19JTlBVVCB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE9fQ1JMRikgeworCQkvKiBJZiB3ZSBoYXZlIGFueSBDUiBvciBDUkxGIGxpbmUgZW5kaW5ncywgd2UgZG8gbm90IHRvdWNoIGl0ICovCisJCS8qIFRoaXMgaXMgdGhlIG5ldyBzYWZlciBhdXRvY3JsZi1oYW5kbGluZyAqLworCQlpZiAoc3RhdHMtPmxvbmVjciB8fCBzdGF0cy0+Y3JsZikKKwkJCXJldHVybiAwOworCisJCWlmIChjb252ZXJ0X2lzX2JpbmFyeShzdGF0cykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7CisKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9lbmNvZGluZyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICplbmMsCisJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sIGludCBkaWVfb25fZXJyb3IpCit7CisJY29uc3QgY2hhciAqc3RyaXBwZWQ7CisKKwkvKiBXZSBvbmx5IGNoZWNrIGZvciBVVEYgaGVyZSBhcyBVVEY/PyBjYW4gYmUgYW4gYWxpYXMgZm9yIFVURi0/PyAqLworCWlmIChza2lwX2lwcmVmaXgoZW5jLCAiVVRGIiwgJnN0cmlwcGVkKSkgeworCQlza2lwX3ByZWZpeChzdHJpcHBlZCwgIi0iLCAmc3RyaXBwZWQpOworCisJCS8qCisJCSAqIENoZWNrIGZvciBkZXRlY3RhYmxlIGVycm9ycyBpbiBVVEYgZW5jb2RpbmdzCisJCSAqLworCQlpZiAoaGFzX3Byb2hpYml0ZWRfdXRmX2JvbShlbmMsIGRhdGEsIGxlbikpIHsKKwkJCWNvbnN0IGNoYXIgKmVycm9yX21zZyA9IF8oCisJCQkJIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIpOworCQkJLyoKKwkJCSAqIFRoaXMgYWR2aWNlIGlzIHNob3duIGZvciBVVEYtPz9CRSBhbmQgVVRGLT8/TEUgZW5jb2RpbmdzLgorCQkJICogV2UgY3V0IG9mZiB0aGUgbGFzdCB0d28gY2hhcmFjdGVycyBvZiB0aGUgZW5jb2RpbmcgbmFtZQorCQkJICogdG8gZ2VuZXJhdGUgdGhlIGVuY29kaW5nIG5hbWUgc3VpdGFibGUgZm9yIEJPTXMuCisJCQkgKi8KKwkJCWNvbnN0IGNoYXIgKmFkdmlzZV9tc2cgPSBfKAorCQkJCSJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciAiCisJCQkJIm1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSUuKnMgYXMgIgorCQkJCSJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIik7CisJCQlpbnQgc3RyaXBwZWRfbGVuID0gc3RybGVuKHN0cmlwcGVkKSAtIHN0cmxlbigiQkUiKTsKKwkJCWFkdmlzZShhZHZpc2VfbXNnLCBwYXRoLCBzdHJpcHBlZF9sZW4sIHN0cmlwcGVkKTsKKwkJCWlmIChkaWVfb25fZXJyb3IpCisJCQkJZGllKGVycm9yX21zZywgcGF0aCwgZW5jKTsKKwkJCWVsc2UgeworCQkJCXJldHVybiBlcnJvcihlcnJvcl9tc2csIHBhdGgsIGVuYyk7CisJCQl9CisKKwkJfSBlbHNlIGlmIChpc19taXNzaW5nX3JlcXVpcmVkX3V0Zl9ib20oZW5jLCBkYXRhLCBsZW4pKSB7CisJCQljb25zdCBjaGFyICplcnJvcl9tc2cgPSBfKAorCQkJCSJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIik7CisJCQljb25zdCBjaGFyICphZHZpc2VfbXNnID0gXygKKwkJCQkiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciAiCisJCQkJIm1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSVzTEUgIgorCQkJCSIoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyAiCisJCQkJIndvcmtpbmctdHJlZS1lbmNvZGluZy4iKTsKKwkJCWFkdmlzZShhZHZpc2VfbXNnLCBwYXRoLCBzdHJpcHBlZCwgc3RyaXBwZWQpOworCQkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCQlkaWUoZXJyb3JfbXNnLCBwYXRoLCBlbmMpOworCQkJZWxzZSB7CisJCQkJcmV0dXJuIGVycm9yKGVycm9yX21zZywgcGF0aCwgZW5jKTsKKwkJCX0KKwkJfQorCisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0cmFjZV9lbmNvZGluZyhjb25zdCBjaGFyICpjb250ZXh0LCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdGF0aWMgc3RydWN0IHRyYWNlX2tleSBjb2UgPSBUUkFDRV9LRVlfSU5JVChXT1JLSU5HX1RSRUVfRU5DT0RJTkcpOworCXN0cnVjdCBzdHJidWYgdHJhY2UgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaTsKKworCXN0cmJ1Zl9hZGRmKCZ0cmFjZSwgIiVzICglcywgY29uc2lkZXJlZCAlcyk6XG4iLCBjb250ZXh0LCBwYXRoLCBlbmNvZGluZyk7CisJZm9yIChpID0gMDsgaSA8IGxlbiAmJiBidWY7ICsraSkgeworCQlzdHJidWZfYWRkZigKKwkJCSZ0cmFjZSwgInwgXDAzM1sybSUyaTpcMDMzWzBtICUyeCBcMDMzWzJtJWNcMDMzWzBtJWMiLAorCQkJaSwKKwkJCSh1bnNpZ25lZCBjaGFyKSBidWZbaV0sCisJCQkoYnVmW2ldID4gMzIgJiYgYnVmW2ldIDwgMTI3ID8gYnVmW2ldIDogJyAnKSwKKwkJCSgoaSsxKSAlIDggJiYgKGkrMSkgPCBsZW4gPyAnICcgOiAnXG4nKQorCQkpOworCX0KKwlzdHJidWZfYWRkY2hhcnMoJnRyYWNlLCAnXG4nLCAxKTsKKworCXRyYWNlX3N0cmJ1ZigmY29lLCAmdHJhY2UpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0cmFjZSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcm91bmR0cmlwKGNvbnN0IGNoYXIgKmVuY19uYW1lKQoreworCS8qCisJICogY2hlY2tfcm91bmR0cmlwX2VuY29kaW5nIGNvbnRhaW5zIGEgc3RyaW5nIG9mIGNvbW1hIGFuZC9vcgorCSAqIHNwYWNlIHNlcGFyYXRlZCBlbmNvZGluZ3MgKGVnLiAiVVRGLTE2LCBBU0NJSSwgQ1AxMTI1IikuCisJICogU2VhcmNoIGZvciB0aGUgZ2l2ZW4gZW5jb2RpbmcgaW4gdGhhdCBzdHJpbmcuCisJICovCisJY29uc3QgY2hhciAqZm91bmQgPSBzdHJjYXNlc3RyKGNoZWNrX3JvdW5kdHJpcF9lbmNvZGluZywgZW5jX25hbWUpOworCWNvbnN0IGNoYXIgKm5leHQ7CisJaW50IGxlbjsKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gMDsKKwluZXh0ID0gZm91bmQgKyBzdHJsZW4oZW5jX25hbWUpOworCWxlbiA9IHN0cmxlbihjaGVja19yb3VuZHRyaXBfZW5jb2RpbmcpOworCXJldHVybiAoZm91bmQgJiYgKAorCQkJLyoKKwkJCSAqIGNoZWNrIHRoYXQgdGhlIGZvdW5kIGVuY29kaW5nIGlzIGF0IHRoZQorCQkJICogYmVnaW5uaW5nIG9mIGNoZWNrX3JvdW5kdHJpcF9lbmNvZGluZyBvcgorCQkJICogdGhhdCBpdCBpcyBwcmVmaXhlZCB3aXRoIGEgc3BhY2Ugb3IgY29tbWEKKwkJCSAqLworCQkJZm91bmQgPT0gY2hlY2tfcm91bmR0cmlwX2VuY29kaW5nIHx8ICgKKwkJCQkoaXNzcGFjZShmb3VuZFstMV0pIHx8IGZvdW5kWy0xXSA9PSAnLCcpCisJCQkpCisJCSkgJiYgKAorCQkJLyoKKwkJCSAqIGNoZWNrIHRoYXQgdGhlIGZvdW5kIGVuY29kaW5nIGlzIGF0IHRoZQorCQkJICogZW5kIG9mIGNoZWNrX3JvdW5kdHJpcF9lbmNvZGluZyBvcgorCQkJICogdGhhdCBpdCBpcyBzdWZmaXhlZCB3aXRoIGEgc3BhY2Ugb3IgY29tbWEKKwkJCSAqLworCQkJbmV4dCA9PSBjaGVja19yb3VuZHRyaXBfZW5jb2RpbmcgKyBsZW4gfHwgKAorCQkJCW5leHQgPCBjaGVja19yb3VuZHRyaXBfZW5jb2RpbmcgKyBsZW4gJiYKKwkJCQkoaXNzcGFjZShuZXh0WzBdKSB8fCBuZXh0WzBdID09ICcsJykKKwkJCSkKKwkJKSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2VuY29kaW5nID0gIlVURi04IjsKKworc3RhdGljIGludCBlbmNvZGVfdG9fZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4sCisJCQkgc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICplbmMsIGludCBjb252X2ZsYWdzKQoreworCWNoYXIgKmRzdDsKKwlzaXplX3QgZHN0X2xlbjsKKwlpbnQgZGllX29uX2Vycm9yID0gY29udl9mbGFncyAmIENPTlZfV1JJVEVfT0JKRUNUOworCisJLyoKKwkgKiBObyBlbmNvZGluZyBpcyBzcGVjaWZpZWQgb3IgdGhlcmUgaXMgbm90aGluZyB0byBlbmNvZGUuCisJICogVGVsbCB0aGUgY2FsbGVyIHRoYXQgdGhlIGNvbnRlbnQgd2FzIG5vdCBtb2RpZmllZC4KKwkgKi8KKwlpZiAoIWVuYyB8fCAoc3JjICYmICFzcmNfbGVuKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIExvb2tzIGxpa2Ugd2UgZ290IGNhbGxlZCBmcm9tICJ3b3VsZF9jb252ZXJ0X3RvX2dpdCgpIi4KKwkgKiBUaGlzIG1lYW5zIEdpdCB3YW50cyB0byBrbm93IGlmIGl0IHdvdWxkIGVuY29kZSAoPSBtb2RpZnkhKQorCSAqIHRoZSBjb250ZW50LiBMZXQncyBhbnN3ZXIgd2l0aCAieWVzIiwgc2luY2UgYW4gZW5jb2Rpbmcgd2FzCisJICogc3BlY2lmaWVkLgorCSAqLworCWlmICghYnVmICYmICFzcmMpCisJCXJldHVybiAxOworCisJaWYgKHZhbGlkYXRlX2VuY29kaW5nKHBhdGgsIGVuYywgc3JjLCBzcmNfbGVuLCBkaWVfb25fZXJyb3IpKQorCQlyZXR1cm4gMDsKKworCXRyYWNlX2VuY29kaW5nKCJzb3VyY2UiLCBwYXRoLCBlbmMsIHNyYywgc3JjX2xlbik7CisJZHN0ID0gcmVlbmNvZGVfc3RyaW5nX2xlbihzcmMsIHNyY19sZW4sIGRlZmF1bHRfZW5jb2RpbmcsIGVuYywKKwkJCQkgICZkc3RfbGVuKTsKKwlpZiAoIWRzdCkgeworCQkvKgorCQkgKiBXZSBjb3VsZCBhZGQgdGhlIGJsb2IgImFzLWlzIiB0byBHaXQuIEhvd2V2ZXIsIG9uIGNoZWNrb3V0CisJCSAqIHdlIHdvdWxkIHRyeSB0byByZS1lbmNvZGUgdG8gdGhlIG9yaWdpbmFsIGVuY29kaW5nLiBUaGlzCisJCSAqIHdvdWxkIGZhaWwgYW5kIHdlIHdvdWxkIGxlYXZlIHRoZSB1c2VyIHdpdGggYSBtZXNzZWQtdXAKKwkJICogd29ya2luZyB0cmVlLiBMZXQncyB0cnkgdG8gYXZvaWQgdGhpcyBieSBzY3JlYW1pbmcgbG91ZC4KKwkJICovCisJCWNvbnN0IGNoYXIqIG1zZyA9IF8oImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIik7CisJCWlmIChkaWVfb25fZXJyb3IpCisJCQlkaWUobXNnLCBwYXRoLCBlbmMsIGRlZmF1bHRfZW5jb2RpbmcpOworCQllbHNlIHsKKwkJCWVycm9yKG1zZywgcGF0aCwgZW5jLCBkZWZhdWx0X2VuY29kaW5nKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXRyYWNlX2VuY29kaW5nKCJkZXN0aW5hdGlvbiIsIHBhdGgsIGRlZmF1bHRfZW5jb2RpbmcsIGRzdCwgZHN0X2xlbik7CisKKwkvKgorCSAqIFVURiBzdXBwb3J0cyBsb3NzbGVzcyBjb252ZXJzaW9uIHJvdW5kIHRyaXBwaW5nIFsxXSBhbmQgY29udmVyc2lvbnMKKwkgKiBiZXR3ZWVuIFVURiBhbmQgb3RoZXIgZW5jb2RpbmdzIGFyZSBtb3N0bHkgcm91bmQgdHJpcCBzYWZlIGFzCisJICogVW5pY29kZSBhaW1zIHRvIGJlIGEgc3VwZXJzZXQgb2YgYWxsIG90aGVyIGNoYXJhY3RlciBlbmNvZGluZ3MuCisJICogSG93ZXZlciwgY2VydGFpbiBlbmNvZGluZ3MgKGUuZy4gU0hJRlQtSklTKSBhcmUga25vd24gdG8gaGF2ZSByb3VuZAorCSAqIHRyaXAgaXNzdWVzIFsyXS4gQ2hlY2sgdGhlIHJvdW5kIHRyaXAgY29udmVyc2lvbiBmb3IgYWxsIGVuY29kaW5ncworCSAqIGxpc3RlZCBpbiBjb3JlLmNoZWNrUm91bmR0cmlwRW5jb2RpbmcuCisJICoKKwkgKiBUaGUgcm91bmQgdHJpcCBjaGVjayBpcyBvbmx5IHBlcmZvcm1lZCBpZiBjb250ZW50IGlzIHdyaXR0ZW4gdG8gR2l0LgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGxvc3QgZHVyaW5nIGNvbnZlcnNpb24gdG8vZnJvbQorCSAqIHRoZSBpbnRlcm5hbCBVVEYtOCByZXByZXNlbnRhdGlvbi4KKwkgKgorCSAqIFBsZWFzZSBub3RlLCB0aGUgY29kZSBiZWxvdyBpcyBub3QgdGVzdGVkIGJlY2F1c2UgSSB3YXMgbm90IGFibGUgdG8KKwkgKiBnZW5lcmF0ZSBhIGZhdWx0eSByb3VuZCB0cmlwIHdpdGhvdXQgYW4gaWNvbnYgZXJyb3IuIEljb252IGVycm9ycworCSAqIGFyZSBhbHJlYWR5IGNhdWdodCBhYm92ZS4KKwkgKgorCSAqIFsxXSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCNnZW4yCisJICogWzJdIGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2VuLXVzL2hlbHAvMTcwNTU5L3ByYi1jb252ZXJzaW9uLXByb2JsZW0tYmV0d2Vlbi1zaGlmdC1qaXMtYW5kLXVuaWNvZGUKKwkgKi8KKwlpZiAoZGllX29uX2Vycm9yICYmIGNoZWNrX3JvdW5kdHJpcChlbmMpKSB7CisJCWNoYXIgKnJlX3NyYzsKKwkJc2l6ZV90IHJlX3NyY19sZW47CisKKwkJcmVfc3JjID0gcmVlbmNvZGVfc3RyaW5nX2xlbihkc3QsIGRzdF9sZW4sCisJCQkJCSAgICAgZW5jLCBkZWZhdWx0X2VuY29kaW5nLAorCQkJCQkgICAgICZyZV9zcmNfbGVuKTsKKworCQl0cmFjZV9wcmludGYoIkNoZWNraW5nIHJvdW5kdHJpcCBlbmNvZGluZyBmb3IgJXMuLi5cbiIsIGVuYyk7CisJCXRyYWNlX2VuY29kaW5nKCJyZWVuY29kZWQgc291cmNlIiwgcGF0aCwgZW5jLAorCQkJICAgICAgIHJlX3NyYywgcmVfc3JjX2xlbik7CisKKwkJaWYgKCFyZV9zcmMgfHwgc3JjX2xlbiAhPSByZV9zcmNfbGVuIHx8CisJCSAgICBtZW1jbXAoc3JjLCByZV9zcmMsIHNyY19sZW4pKSB7CisJCQljb25zdCBjaGFyKiBtc2cgPSBfKCJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kICIKKwkJCQkJICAgICJiYWNrIGlzIG5vdCB0aGUgc2FtZSIpOworCQkJZGllKG1zZywgcGF0aCwgZW5jLCBkZWZhdWx0X2VuY29kaW5nKTsKKwkJfQorCisJCWZyZWUocmVfc3JjKTsKKwl9CisKKwlzdHJidWZfYXR0YWNoKGJ1ZiwgZHN0LCBkc3RfbGVuLCBkc3RfbGVuICsgMSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZW5jb2RlX3RvX3dvcmt0cmVlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4sCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmVuYykKK3sKKwljaGFyICpkc3Q7CisJc2l6ZV90IGRzdF9sZW47CisKKwkvKgorCSAqIE5vIGVuY29kaW5nIGlzIHNwZWNpZmllZCBvciB0aGVyZSBpcyBub3RoaW5nIHRvIGVuY29kZS4KKwkgKiBUZWxsIHRoZSBjYWxsZXIgdGhhdCB0aGUgY29udGVudCB3YXMgbm90IG1vZGlmaWVkLgorCSAqLworCWlmICghZW5jIHx8IChzcmMgJiYgIXNyY19sZW4pKQorCQlyZXR1cm4gMDsKKworCWRzdCA9IHJlZW5jb2RlX3N0cmluZ19sZW4oc3JjLCBzcmNfbGVuLCBlbmMsIGRlZmF1bHRfZW5jb2RpbmcsCisJCQkJICAmZHN0X2xlbik7CisJaWYgKCFkc3QpIHsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiKSwKKwkJICAgICAgcGF0aCwgZGVmYXVsdF9lbmNvZGluZywgZW5jKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RyYnVmX2F0dGFjaChidWYsIGRzdCwgZHN0X2xlbiwgZHN0X2xlbiArIDEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNybGZfdG9fZ2l0KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkgICAgICAgZW51bSBjcmxmX2FjdGlvbiBjcmxmX2FjdGlvbiwgaW50IGNvbnZfZmxhZ3MpCit7CisJc3RydWN0IHRleHRfc3RhdCBzdGF0czsKKwljaGFyICpkc3Q7CisJaW50IGNvbnZlcnRfY3JsZl9pbnRvX2xmOworCisJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQklOQVJZIHx8CisJICAgIChzcmMgJiYgIWxlbikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgYSBkcnktcnVuIGFuZCBoYXZlIG5vIHNvdXJjZSBidWZmZXIsIHRoZXJlIGlzCisJICogbm90aGluZyB0byBhbmFseXplOyB3ZSBtdXN0IGFzc3VtZSB3ZSB3b3VsZCBjb252ZXJ0LgorCSAqLworCWlmICghYnVmICYmICFzcmMpCisJCXJldHVybiAxOworCisJZ2F0aGVyX3N0YXRzKHNyYywgbGVuLCAmc3RhdHMpOworCS8qIE9wdGltaXphdGlvbjogTm8gQ1JMRj8gTm90aGluZyB0byBjb252ZXJ0LCByZWdhcmRsZXNzLiAqLworCWNvbnZlcnRfY3JsZl9pbnRvX2xmID0gISFzdGF0cy5jcmxmOworCisJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQVVUTyB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE9fSU5QVVQgfHwgY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPX0NSTEYpIHsKKwkJaWYgKGNvbnZlcnRfaXNfYmluYXJ5KCZzdGF0cykpCisJCQlyZXR1cm4gMDsKKwkJLyoKKwkJICogSWYgdGhlIGZpbGUgaW4gdGhlIGluZGV4IGhhcyBhbnkgQ1IgaW4gaXQsIGRvIG5vdAorCQkgKiBjb252ZXJ0LiAgVGhpcyBpcyB0aGUgbmV3IHNhZmVyIGF1dG9jcmxmIGhhbmRsaW5nLAorCQkgKiB1bmxlc3Mgd2Ugd2FudCB0byByZW5vcm1hbGl6ZSBpbiBhIG1lcmdlIG9yCisJCSAqIGNoZXJyeS1waWNrLgorCQkgKi8KKwkJaWYgKCghKGNvbnZfZmxhZ3MgJiBDT05WX0VPTF9SRU5PUk1BTElaRSkpICYmCisJCSAgICBoYXNfY3JsZl9pbl9pbmRleChpc3RhdGUsIHBhdGgpKQorCQkJY29udmVydF9jcmxmX2ludG9fbGYgPSAwOworCX0KKwlpZiAoKChjb252X2ZsYWdzICYgQ09OVl9FT0xfUk5EVFJQX1dBUk4pIHx8CisJICAgICAoKGNvbnZfZmxhZ3MgJiBDT05WX0VPTF9STkRUUlBfRElFKSAmJiBsZW4pKSkgeworCQlzdHJ1Y3QgdGV4dF9zdGF0IG5ld19zdGF0czsKKwkJbWVtY3B5KCZuZXdfc3RhdHMsICZzdGF0cywgc2l6ZW9mKG5ld19zdGF0cykpOworCQkvKiBzaW11bGF0ZSAiZ2l0IGFkZCIgKi8KKwkJaWYgKGNvbnZlcnRfY3JsZl9pbnRvX2xmKSB7CisJCQluZXdfc3RhdHMubG9uZWxmICs9IG5ld19zdGF0cy5jcmxmOworCQkJbmV3X3N0YXRzLmNybGYgPSAwOworCQl9CisJCS8qIHNpbXVsYXRlICJnaXQgY2hlY2tvdXQiICovCisJCWlmICh3aWxsX2NvbnZlcnRfbGZfdG9fY3JsZigmbmV3X3N0YXRzLCBjcmxmX2FjdGlvbikpIHsKKwkJCW5ld19zdGF0cy5jcmxmICs9IG5ld19zdGF0cy5sb25lbGY7CisJCQluZXdfc3RhdHMubG9uZWxmID0gMDsKKwkJfQorCQljaGVja19nbG9iYWxfY29udl9mbGFnc19lb2wocGF0aCwgY3JsZl9hY3Rpb24sICZzdGF0cywgJm5ld19zdGF0cywgY29udl9mbGFncyk7CisJfQorCWlmICghY29udmVydF9jcmxmX2ludG9fbGYpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IGFsbCBvZiBvdXIgc291cmNlIGFuYWx5c2lzIGlzIGRvbmUsIGFuZCB3ZSBhcmUgc3VyZSB3ZQorCSAqIHdvdWxkIGNvbnZlcnQuIElmIHdlIGFyZSBpbiBkcnktcnVuIG1vZGUsIHdlIGNhbiBnaXZlIGFuIGFuc3dlci4KKwkgKi8KKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDE7CisKKwkvKiBvbmx5IGdyb3cgaWYgbm90IGluIHBsYWNlICovCisJaWYgKHN0cmJ1Zl9hdmFpbChidWYpICsgYnVmLT5sZW4gPCBsZW4pCisJCXN0cmJ1Zl9ncm93KGJ1ZiwgbGVuIC0gYnVmLT5sZW4pOworCWRzdCA9IGJ1Zi0+YnVmOworCWlmIChjcmxmX2FjdGlvbiA9PSBDUkxGX0FVVE8gfHwgY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPX0lOUFVUIHx8IGNybGZfYWN0aW9uID09IENSTEZfQVVUT19DUkxGKSB7CisJCS8qCisJCSAqIElmIHdlIGd1ZXNzZWQsIHdlIGFscmVhZHkga25vdyB3ZSByZWplY3RlZCBhIGZpbGUgd2l0aAorCQkgKiBsb25lIENSLCBhbmQgd2UgY2FuIHN0cmlwIGEgQ1Igd2l0aG91dCBsb29raW5nIGF0IHdoYXQKKwkJICogZm9sbG93IGl0LgorCQkgKi8KKwkJZG8geworCQkJdW5zaWduZWQgY2hhciBjID0gKnNyYysrOworCQkJaWYgKGMgIT0gJ1xyJykKKwkJCQkqZHN0KysgPSBjOworCQl9IHdoaWxlICgtLWxlbik7CisJfSBlbHNlIHsKKwkJZG8geworCQkJdW5zaWduZWQgY2hhciBjID0gKnNyYysrOworCQkJaWYgKCEgKGMgPT0gJ1xyJyAmJiAoMSA8IGxlbiAmJiAqc3JjID09ICdcbicpKSkKKwkJCQkqZHN0KysgPSBjOworCQl9IHdoaWxlICgtLWxlbik7CisJfQorCXN0cmJ1Zl9zZXRsZW4oYnVmLCBkc3QgLSBidWYtPmJ1Zik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY3JsZl90b193b3JrdHJlZShjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBlbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCXN0cnVjdCB0ZXh0X3N0YXQgc3RhdHM7CisKKwlpZiAoIWxlbiB8fCBvdXRwdXRfZW9sKGNybGZfYWN0aW9uKSAhPSBFT0xfQ1JMRikKKwkJcmV0dXJuIDA7CisKKwlnYXRoZXJfc3RhdHMoc3JjLCBsZW4sICZzdGF0cyk7CisJaWYgKCF3aWxsX2NvbnZlcnRfbGZfdG9fY3JsZigmc3RhdHMsIGNybGZfYWN0aW9uKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBhcmUgd2UgImZha2luZyIgaW4gcGxhY2UgZWRpdGluZyA/ICovCisJaWYgKHNyYyA9PSBidWYtPmJ1ZikKKwkJdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goYnVmLCBOVUxMKTsKKworCXN0cmJ1Zl9ncm93KGJ1ZiwgbGVuICsgc3RhdHMubG9uZWxmKTsKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKm5sID0gbWVtY2hyKHNyYywgJ1xuJywgbGVuKTsKKwkJaWYgKCFubCkKKwkJCWJyZWFrOworCQlpZiAobmwgPiBzcmMgJiYgbmxbLTFdID09ICdccicpIHsKKwkJCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIG5sICsgMSAtIHNyYyk7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBubCAtIHNyYyk7CisJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIlxyXG4iKTsKKwkJfQorCQlsZW4gLT0gbmwgKyAxIC0gc3JjOworCQlzcmMgID0gbmwgKyAxOworCX0KKwlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBsZW4pOworCisJZnJlZSh0b19mcmVlKTsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IGZpbHRlcl9wYXJhbXMgeworCWNvbnN0IGNoYXIgKnNyYzsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGZkOworCWNvbnN0IGNoYXIgKmNtZDsKKwljb25zdCBjaGFyICpwYXRoOworfTsKKworc3RhdGljIGludCBmaWx0ZXJfYnVmZmVyX29yX2ZkKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSkKK3sKKwkvKgorCSAqIFNwYXduIGNtZCBhbmQgZmVlZCB0aGUgYnVmZmVyIGNvbnRlbnRzIHRocm91Z2ggaXRzIHN0ZGluLgorCSAqLworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkX3Byb2Nlc3MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGZpbHRlcl9wYXJhbXMgKnBhcmFtcyA9IChzdHJ1Y3QgZmlsdGVyX3BhcmFtcyAqKWRhdGE7CisJaW50IHdyaXRlX2Vyciwgc3RhdHVzOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgTlVMTCwgTlVMTCB9OworCisJLyogYXBwbHkgJSBzdWJzdGl0dXRpb24gdG8gY21kICovCisJc3RydWN0IHN0cmJ1ZiBjbWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2VudHJ5IGRpY3RbXSA9IHsKKwkJeyAiZiIsIE5VTEwsIH0sCisJCXsgTlVMTCwgTlVMTCwgfSwKKwl9OworCisJLyogcXVvdGUgdGhlIHBhdGggdG8gcHJlc2VydmUgc3BhY2VzLCBldGMuICovCisJc3FfcXVvdGVfYnVmKCZwYXRoLCBwYXJhbXMtPnBhdGgpOworCWRpY3RbMF0udmFsdWUgPSBwYXRoLmJ1ZjsKKworCS8qIGV4cGFuZCBhbGwgJWYgd2l0aCB0aGUgcXVvdGVkIHBhdGggKi8KKwlzdHJidWZfZXhwYW5kKCZjbWQsIHBhcmFtcy0+Y21kLCBzdHJidWZfZXhwYW5kX2RpY3RfY2IsICZkaWN0KTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisKKwlhcmd2WzBdID0gY21kLmJ1ZjsKKworCWNoaWxkX3Byb2Nlc3MuYXJndiA9IGFyZ3Y7CisJY2hpbGRfcHJvY2Vzcy51c2Vfc2hlbGwgPSAxOworCWNoaWxkX3Byb2Nlc3MuaW4gPSAtMTsKKwljaGlsZF9wcm9jZXNzLm91dCA9IG91dDsKKworCWlmIChzdGFydF9jb21tYW5kKCZjaGlsZF9wcm9jZXNzKSkgeworCQlzdHJidWZfcmVsZWFzZSgmY21kKTsKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIpLAorCQkJICAgICBwYXJhbXMtPmNtZCk7CisJfQorCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCWlmIChwYXJhbXMtPnNyYykgeworCQl3cml0ZV9lcnIgPSAod3JpdGVfaW5fZnVsbChjaGlsZF9wcm9jZXNzLmluLAorCQkJCQkgICBwYXJhbXMtPnNyYywgcGFyYW1zLT5zaXplKSA8IDApOworCQlpZiAoZXJybm8gPT0gRVBJUEUpCisJCQl3cml0ZV9lcnIgPSAwOworCX0gZWxzZSB7CisJCXdyaXRlX2VyciA9IGNvcHlfZmQocGFyYW1zLT5mZCwgY2hpbGRfcHJvY2Vzcy5pbik7CisJCWlmICh3cml0ZV9lcnIgPT0gQ09QWV9XUklURV9FUlJPUiAmJiBlcnJubyA9PSBFUElQRSkKKwkJCXdyaXRlX2VyciA9IDA7CisJfQorCisJaWYgKGNsb3NlKGNoaWxkX3Byb2Nlc3MuaW4pKQorCQl3cml0ZV9lcnIgPSAxOworCWlmICh3cml0ZV9lcnIpCisJCWVycm9yKF8oImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJyVzJyIpLAorCQkgICAgICBwYXJhbXMtPmNtZCk7CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlzdGF0dXMgPSBmaW5pc2hfY29tbWFuZCgmY2hpbGRfcHJvY2Vzcyk7CisJaWYgKHN0YXR1cykKKwkJZXJyb3IoXygiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkICVkIiksIHBhcmFtcy0+Y21kLCBzdGF0dXMpOworCisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJcmV0dXJuICh3cml0ZV9lcnIgfHwgc3RhdHVzKTsKK30KKworc3RhdGljIGludCBhcHBseV9zaW5nbGVfZmlsZV9maWx0ZXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZmQsCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqY21kKQoreworCS8qCisJICogQ3JlYXRlIGEgcGlwZWxpbmUgdG8gaGF2ZSB0aGUgY29tbWFuZCBmaWx0ZXIgdGhlIGJ1ZmZlcidzCisJICogY29udGVudHMuCisJICoKKwkgKiAoY2hpbGQgLS0+IGNtZCkgLS0+IHVzCisJICovCisJaW50IGVyciA9IDA7CisJc3RydWN0IHN0cmJ1ZiBuYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFzeW5jIGFzeW5jOworCXN0cnVjdCBmaWx0ZXJfcGFyYW1zIHBhcmFtczsKKworCW1lbXNldCgmYXN5bmMsIDAsIHNpemVvZihhc3luYykpOworCWFzeW5jLnByb2MgPSBmaWx0ZXJfYnVmZmVyX29yX2ZkOworCWFzeW5jLmRhdGEgPSAmcGFyYW1zOworCWFzeW5jLm91dCA9IC0xOworCXBhcmFtcy5zcmMgPSBzcmM7CisJcGFyYW1zLnNpemUgPSBsZW47CisJcGFyYW1zLmZkID0gZmQ7CisJcGFyYW1zLmNtZCA9IGNtZDsKKwlwYXJhbXMucGF0aCA9IHBhdGg7CisKKwlmZmx1c2goTlVMTCk7CisJaWYgKHN0YXJ0X2FzeW5jKCZhc3luYykpCisJCXJldHVybiAwOwkvKiBlcnJvciB3YXMgYWxyZWFkeSByZXBvcnRlZCAqLworCisJaWYgKHN0cmJ1Zl9yZWFkKCZuYnVmLCBhc3luYy5vdXQsIDApIDwgMCkgeworCQllcnIgPSBlcnJvcihfKCJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIiksIGNtZCk7CisJfQorCWlmIChjbG9zZShhc3luYy5vdXQpKSB7CisJCWVyciA9IGVycm9yKF8oInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiKSwgY21kKTsKKwl9CisJaWYgKGZpbmlzaF9hc3luYygmYXN5bmMpKSB7CisJCWVyciA9IGVycm9yKF8oImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIpLCBjbWQpOworCX0KKworCWlmICghZXJyKSB7CisJCXN0cmJ1Zl9zd2FwKGRzdCwgJm5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbmJ1Zik7CisJcmV0dXJuICFlcnI7Cit9CisKKyNkZWZpbmUgQ0FQX0NMRUFOICAgICgxdTw8MCkKKyNkZWZpbmUgQ0FQX1NNVURHRSAgICgxdTw8MSkKKyNkZWZpbmUgQ0FQX0RFTEFZICAgICgxdTw8MikKKworc3RydWN0IGNtZDJwcm9jZXNzIHsKKwlzdHJ1Y3Qgc3VicHJvY2Vzc19lbnRyeSBzdWJwcm9jZXNzOyAvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIhICovCisJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9jYXBhYmlsaXRpZXM7Cit9OworCitzdGF0aWMgaW50IHN1YnByb2Nlc3NfbWFwX2luaXRpYWxpemVkOworc3RhdGljIHN0cnVjdCBoYXNobWFwIHN1YnByb2Nlc3NfbWFwOworCitzdGF0aWMgaW50IHN0YXJ0X211bHRpX2ZpbGVfZmlsdGVyX2ZuKHN0cnVjdCBzdWJwcm9jZXNzX2VudHJ5ICpzdWJwcm9jZXNzKQoreworCXN0YXRpYyBpbnQgdmVyc2lvbnNbXSA9IHsyLCAwfTsKKwlzdGF0aWMgc3RydWN0IHN1YnByb2Nlc3NfY2FwYWJpbGl0eSBjYXBhYmlsaXRpZXNbXSA9IHsKKwkJeyAiY2xlYW4iLCAgQ0FQX0NMRUFOICB9LAorCQl7ICJzbXVkZ2UiLCBDQVBfU01VREdFIH0sCisJCXsgImRlbGF5IiwgIENBUF9ERUxBWSAgfSwKKwkJeyBOVUxMLCAwIH0KKwl9OworCXN0cnVjdCBjbWQycHJvY2VzcyAqZW50cnkgPSAoc3RydWN0IGNtZDJwcm9jZXNzICopc3VicHJvY2VzczsKKwlyZXR1cm4gc3VicHJvY2Vzc19oYW5kc2hha2Uoc3VicHJvY2VzcywgImdpdC1maWx0ZXIiLCB2ZXJzaW9ucywgTlVMTCwKKwkJCQkgICAgY2FwYWJpbGl0aWVzLAorCQkJCSAgICAmZW50cnktPnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmlsdGVyX2Vycm9yKGNvbnN0IHN0cnVjdCBzdHJidWYgKmZpbHRlcl9zdGF0dXMsCisJCQkJc3RydWN0IGNtZDJwcm9jZXNzICplbnRyeSwKKwkJCQljb25zdCB1bnNpZ25lZCBpbnQgd2FudGVkX2NhcGFiaWxpdHkpCit7CisJaWYgKCFzdHJjbXAoZmlsdGVyX3N0YXR1cy0+YnVmLCAiZXJyb3IiKSkKKwkJOyAvKiBUaGUgZmlsdGVyIHNpZ25hbGVkIGEgcHJvYmxlbSB3aXRoIHRoZSBmaWxlLiAqLworCWVsc2UgaWYgKCFzdHJjbXAoZmlsdGVyX3N0YXR1cy0+YnVmLCAiYWJvcnQiKSAmJiB3YW50ZWRfY2FwYWJpbGl0eSkgeworCQkvKgorCQkgKiBUaGUgZmlsdGVyIHNpZ25hbGVkIGEgcGVybWFuZW50IHByb2JsZW0uIERvbid0IHRyeSB0byBmaWx0ZXIKKwkJICogZmlsZXMgd2l0aCB0aGUgc2FtZSBjb21tYW5kIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGN1cnJlbnQKKwkJICogR2l0IHByb2Nlc3MuCisJCSAqLworCQkgZW50cnktPnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMgJj0gfndhbnRlZF9jYXBhYmlsaXR5OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIHByb3RvY29sIGZpbHRlci4KKwkJICogRm9yY2Ugc2h1dGRvd24gYW5kIHJlc3RhcnQgaWYgYW5vdGhlciBibG9iIHJlcXVpcmVzIGZpbHRlcmluZy4KKwkJICovCisJCWVycm9yKF8oImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIpLCBlbnRyeS0+c3VicHJvY2Vzcy5jbWQpOworCQlzdWJwcm9jZXNzX3N0b3AoJnN1YnByb2Nlc3NfbWFwLCAmZW50cnktPnN1YnByb2Nlc3MpOworCQlmcmVlKGVudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfbXVsdGlfZmlsZV9maWx0ZXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkJCSAgIGludCBmZCwgc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBjaGFyICpjbWQsCisJCQkJICAgY29uc3QgdW5zaWduZWQgaW50IHdhbnRlZF9jYXBhYmlsaXR5LAorCQkJCSAgIHN0cnVjdCBkZWxheWVkX2NoZWNrb3V0ICpkY28pCit7CisJaW50IGVycjsKKwlpbnQgY2FuX2RlbGF5ID0gMDsKKwlzdHJ1Y3QgY21kMnByb2Nlc3MgKmVudHJ5OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzOworCXN0cnVjdCBzdHJidWYgbmJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZmlsdGVyX3N0YXR1cyA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmZpbHRlcl90eXBlOworCisJaWYgKCFzdWJwcm9jZXNzX21hcF9pbml0aWFsaXplZCkgeworCQlzdWJwcm9jZXNzX21hcF9pbml0aWFsaXplZCA9IDE7CisJCWhhc2htYXBfaW5pdCgmc3VicHJvY2Vzc19tYXAsIGNtZDJwcm9jZXNzX2NtcCwgTlVMTCwgMCk7CisJCWVudHJ5ID0gTlVMTDsKKwl9IGVsc2UgeworCQllbnRyeSA9IChzdHJ1Y3QgY21kMnByb2Nlc3MgKilzdWJwcm9jZXNzX2ZpbmRfZW50cnkoJnN1YnByb2Nlc3NfbWFwLCBjbWQpOworCX0KKworCWZmbHVzaChOVUxMKTsKKworCWlmICghZW50cnkpIHsKKwkJZW50cnkgPSB4bWFsbG9jKHNpemVvZigqZW50cnkpKTsKKwkJZW50cnktPnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMgPSAwOworCisJCWlmIChzdWJwcm9jZXNzX3N0YXJ0KCZzdWJwcm9jZXNzX21hcCwgJmVudHJ5LT5zdWJwcm9jZXNzLCBjbWQsIHN0YXJ0X211bHRpX2ZpbGVfZmlsdGVyX2ZuKSkgeworCQkJZnJlZShlbnRyeSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlwcm9jZXNzID0gJmVudHJ5LT5zdWJwcm9jZXNzLnByb2Nlc3M7CisKKwlpZiAoIShlbnRyeS0+c3VwcG9ydGVkX2NhcGFiaWxpdGllcyAmIHdhbnRlZF9jYXBhYmlsaXR5KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAod2FudGVkX2NhcGFiaWxpdHkgJiBDQVBfQ0xFQU4pCisJCWZpbHRlcl90eXBlID0gImNsZWFuIjsKKwllbHNlIGlmICh3YW50ZWRfY2FwYWJpbGl0eSAmIENBUF9TTVVER0UpCisJCWZpbHRlcl90eXBlID0gInNtdWRnZSI7CisJZWxzZQorCQlkaWUoXygidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIpKTsKKworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisKKwlhc3NlcnQoc3RybGVuKGZpbHRlcl90eXBlKSA8IExBUkdFX1BBQ0tFVF9EQVRBX01BWCAtIHN0cmxlbigiY29tbWFuZD1cbiIpKTsKKwllcnIgPSBwYWNrZXRfd3JpdGVfZm10X2dlbnRseShwcm9jZXNzLT5pbiwgImNvbW1hbmQ9JXNcbiIsIGZpbHRlcl90eXBlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwllcnIgPSBzdHJsZW4ocGF0aCkgPiBMQVJHRV9QQUNLRVRfREFUQV9NQVggLSBzdHJsZW4oInBhdGhuYW1lPVxuIik7CisJaWYgKGVycikgeworCQllcnJvcihfKCJwYXRoIG5hbWUgdG9vIGxvbmcgZm9yIGV4dGVybmFsIGZpbHRlciIpKTsKKwkJZ290byBkb25lOworCX0KKworCWVyciA9IHBhY2tldF93cml0ZV9mbXRfZ2VudGx5KHByb2Nlc3MtPmluLCAicGF0aG5hbWU9JXNcbiIsIHBhdGgpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWlmICgoZW50cnktPnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMgJiBDQVBfREVMQVkpICYmCisJICAgIGRjbyAmJiBkY28tPnN0YXRlID09IENFX0NBTl9ERUxBWSkgeworCQljYW5fZGVsYXkgPSAxOworCQllcnIgPSBwYWNrZXRfd3JpdGVfZm10X2dlbnRseShwcm9jZXNzLT5pbiwgImNhbi1kZWxheT0xXG4iKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwllcnIgPSBwYWNrZXRfZmx1c2hfZ2VudGx5KHByb2Nlc3MtPmluKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoZmQgPj0gMCkKKwkJZXJyID0gd3JpdGVfcGFja2V0aXplZF9mcm9tX2ZkKGZkLCBwcm9jZXNzLT5pbik7CisJZWxzZQorCQllcnIgPSB3cml0ZV9wYWNrZXRpemVkX2Zyb21fYnVmKHNyYywgbGVuLCBwcm9jZXNzLT5pbik7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gc3VicHJvY2Vzc19yZWFkX3N0YXR1cyhwcm9jZXNzLT5vdXQsICZmaWx0ZXJfc3RhdHVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoY2FuX2RlbGF5ICYmICFzdHJjbXAoZmlsdGVyX3N0YXR1cy5idWYsICJkZWxheWVkIikpIHsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZkY28tPmZpbHRlcnMsIGNtZCk7CisJCXN0cmluZ19saXN0X2luc2VydCgmZGNvLT5wYXRocywgcGF0aCk7CisJfSBlbHNlIHsKKwkJLyogVGhlIGZpbHRlciBnb3QgdGhlIGJsb2IgYW5kIHdhbnRzIHRvIHNlbmQgdXMgYSByZXNwb25zZS4gKi8KKwkJZXJyID0gc3RyY21wKGZpbHRlcl9zdGF0dXMuYnVmLCAic3VjY2VzcyIpOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCisJCWVyciA9IHJlYWRfcGFja2V0aXplZF90b19zdHJidWYocHJvY2Vzcy0+b3V0LCAmbmJ1ZikgPCAwOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCisJCWVyciA9IHN1YnByb2Nlc3NfcmVhZF9zdGF0dXMocHJvY2Vzcy0+b3V0LCAmZmlsdGVyX3N0YXR1cyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGRvbmU7CisKKwkJZXJyID0gc3RyY21wKGZpbHRlcl9zdGF0dXMuYnVmLCAic3VjY2VzcyIpOworCX0KKworZG9uZToKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlpZiAoZXJyKQorCQloYW5kbGVfZmlsdGVyX2Vycm9yKCZmaWx0ZXJfc3RhdHVzLCBlbnRyeSwgd2FudGVkX2NhcGFiaWxpdHkpOworCWVsc2UKKwkJc3RyYnVmX3N3YXAoZHN0LCAmbmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJm5idWYpOworCXJldHVybiAhZXJyOworfQorCisKK2ludCBhc3luY19xdWVyeV9hdmFpbGFibGVfYmxvYnMoY29uc3QgY2hhciAqY21kLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmF2YWlsYWJsZV9wYXRocykKK3sKKwlpbnQgZXJyOworCWNoYXIgKmxpbmU7CisJc3RydWN0IGNtZDJwcm9jZXNzICplbnRyeTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqcHJvY2VzczsKKwlzdHJ1Y3Qgc3RyYnVmIGZpbHRlcl9zdGF0dXMgPSBTVFJCVUZfSU5JVDsKKworCWFzc2VydChzdWJwcm9jZXNzX21hcF9pbml0aWFsaXplZCk7CisJZW50cnkgPSAoc3RydWN0IGNtZDJwcm9jZXNzICopc3VicHJvY2Vzc19maW5kX2VudHJ5KCZzdWJwcm9jZXNzX21hcCwgY21kKTsKKwlpZiAoIWVudHJ5KSB7CisJCWVycm9yKF8oImV4dGVybmFsIGZpbHRlciAnJXMnIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZSBhbHRob3VnaCAiCisJCQkibm90IGFsbCBwYXRocyBoYXZlIGJlZW4gZmlsdGVyZWQiKSwgY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCXByb2Nlc3MgPSAmZW50cnktPnN1YnByb2Nlc3MucHJvY2VzczsKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJZXJyID0gcGFja2V0X3dyaXRlX2ZtdF9nZW50bHkoCisJCXByb2Nlc3MtPmluLCAiY29tbWFuZD1saXN0X2F2YWlsYWJsZV9ibG9ic1xuIik7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gcGFja2V0X2ZsdXNoX2dlbnRseShwcm9jZXNzLT5pbik7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJd2hpbGUgKChsaW5lID0gcGFja2V0X3JlYWRfbGluZShwcm9jZXNzLT5vdXQsIE5VTEwpKSkgeworCQljb25zdCBjaGFyICpwYXRoOworCQlpZiAoc2tpcF9wcmVmaXgobGluZSwgInBhdGhuYW1lPSIsICZwYXRoKSkKKwkJCXN0cmluZ19saXN0X2luc2VydChhdmFpbGFibGVfcGF0aHMsIHhzdHJkdXAocGF0aCkpOworCQllbHNlCisJCQk7IC8qIGlnbm9yZSB1bmtub3duIGtleXMgKi8KKwl9CisKKwllcnIgPSBzdWJwcm9jZXNzX3JlYWRfc3RhdHVzKHByb2Nlc3MtPm91dCwgJmZpbHRlcl9zdGF0dXMpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWVyciA9IHN0cmNtcChmaWx0ZXJfc3RhdHVzLmJ1ZiwgInN1Y2Nlc3MiKTsKKworZG9uZToKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlpZiAoZXJyKQorCQloYW5kbGVfZmlsdGVyX2Vycm9yKCZmaWx0ZXJfc3RhdHVzLCBlbnRyeSwgMCk7CisJcmV0dXJuICFlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29udmVydF9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpuZXh0OworCWNvbnN0IGNoYXIgKnNtdWRnZTsKKwljb25zdCBjaGFyICpjbGVhbjsKKwljb25zdCBjaGFyICpwcm9jZXNzOworCWludCByZXF1aXJlZDsKK30gKnVzZXJfY29udmVydCwgKip1c2VyX2NvbnZlcnRfdGFpbDsKKworc3RhdGljIGludCBhcHBseV9maWx0ZXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkJaW50IGZkLCBzdHJ1Y3Qgc3RyYnVmICpkc3QsIHN0cnVjdCBjb252ZXJ0X2RyaXZlciAqZHJ2LAorCQkJY29uc3QgdW5zaWduZWQgaW50IHdhbnRlZF9jYXBhYmlsaXR5LAorCQkJc3RydWN0IGRlbGF5ZWRfY2hlY2tvdXQgKmRjbykKK3sKKwljb25zdCBjaGFyICpjbWQgPSBOVUxMOworCisJaWYgKCFkcnYpCisJCXJldHVybiAwOworCisJaWYgKCFkc3QpCisJCXJldHVybiAxOworCisJaWYgKCh3YW50ZWRfY2FwYWJpbGl0eSAmIENBUF9DTEVBTikgJiYgIWRydi0+cHJvY2VzcyAmJiBkcnYtPmNsZWFuKQorCQljbWQgPSBkcnYtPmNsZWFuOworCWVsc2UgaWYgKCh3YW50ZWRfY2FwYWJpbGl0eSAmIENBUF9TTVVER0UpICYmICFkcnYtPnByb2Nlc3MgJiYgZHJ2LT5zbXVkZ2UpCisJCWNtZCA9IGRydi0+c211ZGdlOworCisJaWYgKGNtZCAmJiAqY21kKQorCQlyZXR1cm4gYXBwbHlfc2luZ2xlX2ZpbGVfZmlsdGVyKHBhdGgsIHNyYywgbGVuLCBmZCwgZHN0LCBjbWQpOworCWVsc2UgaWYgKGRydi0+cHJvY2VzcyAmJiAqZHJ2LT5wcm9jZXNzKQorCQlyZXR1cm4gYXBwbHlfbXVsdGlfZmlsZV9maWx0ZXIocGF0aCwgc3JjLCBsZW4sIGZkLCBkc3QsCisJCQlkcnYtPnByb2Nlc3MsIHdhbnRlZF9jYXBhYmlsaXR5LCBkY28pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9jb252ZXJ0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICprZXksICpuYW1lOworCWludCBuYW1lbGVuOworCXN0cnVjdCBjb252ZXJ0X2RyaXZlciAqZHJ2OworCisJLyoKKwkgKiBFeHRlcm5hbCBjb252ZXJzaW9uIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQgdXNpbmcKKwkgKiAiZmlsdGVyLjxuYW1lPi52YXJpYWJsZSIuCisJICovCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAiZmlsdGVyIiwgJm5hbWUsICZuYW1lbGVuLCAma2V5KSA8IDAgfHwgIW5hbWUpCisJCXJldHVybiAwOworCWZvciAoZHJ2ID0gdXNlcl9jb252ZXJ0OyBkcnY7IGRydiA9IGRydi0+bmV4dCkKKwkJaWYgKCFzdHJuY21wKGRydi0+bmFtZSwgbmFtZSwgbmFtZWxlbikgJiYgIWRydi0+bmFtZVtuYW1lbGVuXSkKKwkJCWJyZWFrOworCWlmICghZHJ2KSB7CisJCWRydiA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb252ZXJ0X2RyaXZlcikpOworCQlkcnYtPm5hbWUgPSB4bWVtZHVweihuYW1lLCBuYW1lbGVuKTsKKwkJKnVzZXJfY29udmVydF90YWlsID0gZHJ2OworCQl1c2VyX2NvbnZlcnRfdGFpbCA9ICYoZHJ2LT5uZXh0KTsKKwl9CisKKwkvKgorCSAqIGZpbHRlci48bmFtZT4uc211ZGdlIGFuZCBmaWx0ZXIuPG5hbWU+LmNsZWFuIHNwZWNpZmllcworCSAqIHRoZSBjb21tYW5kIGxpbmU6CisJICoKKwkgKgljb21tYW5kLWxpbmUKKwkgKgorCSAqIFRoZSBjb21tYW5kLWxpbmUgd2lsbCBub3QgYmUgaW50ZXJwb2xhdGVkIGluIGFueSB3YXkuCisJICovCisKKwlpZiAoIXN0cmNtcCgic211ZGdlIiwga2V5KSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZkcnYtPnNtdWRnZSwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCgiY2xlYW4iLCBrZXkpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+Y2xlYW4sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoInByb2Nlc3MiLCBrZXkpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+cHJvY2VzcywgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCgicmVxdWlyZWQiLCBrZXkpKSB7CisJCWRydi0+cmVxdWlyZWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvdW50X2lkZW50KGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJLyoKKwkgKiAiJElkOiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICQiIDw9PiAiJElkJCIKKwkgKi8KKwlpbnQgY250ID0gMDsKKwljaGFyIGNoOworCisJd2hpbGUgKHNpemUpIHsKKwkJY2ggPSAqY3ArKzsKKwkJc2l6ZS0tOworCQlpZiAoY2ggIT0gJyQnKQorCQkJY29udGludWU7CisJCWlmIChzaXplIDwgMykKKwkJCWJyZWFrOworCQlpZiAobWVtY21wKCJJZCIsIGNwLCAyKSkKKwkJCWNvbnRpbnVlOworCQljaCA9IGNwWzJdOworCQljcCArPSAzOworCQlzaXplIC09IDM7CisJCWlmIChjaCA9PSAnJCcpCisJCQljbnQrKzsgLyogJElkJCAqLworCQlpZiAoY2ggIT0gJzonKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogIiRJZDogLi4uICI7IHNjYW4gdXAgdG8gdGhlIGNsb3NpbmcgZG9sbGFyIHNpZ24gYW5kIGRpc2NhcmQuCisJCSAqLworCQl3aGlsZSAoc2l6ZSkgeworCQkJY2ggPSAqY3ArKzsKKwkJCXNpemUtLTsKKwkJCWlmIChjaCA9PSAnJCcpIHsKKwkJCQljbnQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjaCA9PSAnXG4nKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlbnRfdG9fZ2l0KGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJCXN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IGlkZW50KQoreworCWNoYXIgKmRzdCwgKmRvbGxhcjsKKworCWlmICghaWRlbnQgfHwgKHNyYyAmJiAhY291bnRfaWRlbnQoc3JjLCBsZW4pKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDE7CisKKwkvKiBvbmx5IGdyb3cgaWYgbm90IGluIHBsYWNlICovCisJaWYgKHN0cmJ1Zl9hdmFpbChidWYpICsgYnVmLT5sZW4gPCBsZW4pCisJCXN0cmJ1Zl9ncm93KGJ1ZiwgbGVuIC0gYnVmLT5sZW4pOworCWRzdCA9IGJ1Zi0+YnVmOworCWZvciAoOzspIHsKKwkJZG9sbGFyID0gbWVtY2hyKHNyYywgJyQnLCBsZW4pOworCQlpZiAoIWRvbGxhcikKKwkJCWJyZWFrOworCQltZW1tb3ZlKGRzdCwgc3JjLCBkb2xsYXIgKyAxIC0gc3JjKTsKKwkJZHN0ICs9IGRvbGxhciArIDEgLSBzcmM7CisJCWxlbiAtPSBkb2xsYXIgKyAxIC0gc3JjOworCQlzcmMgID0gZG9sbGFyICsgMTsKKworCQlpZiAobGVuID4gMyAmJiAhbWVtY21wKHNyYywgIklkOiIsIDMpKSB7CisJCQlkb2xsYXIgPSBtZW1jaHIoc3JjICsgMywgJyQnLCBsZW4gLSAzKTsKKwkJCWlmICghZG9sbGFyKQorCQkJCWJyZWFrOworCQkJaWYgKG1lbWNocihzcmMgKyAzLCAnXG4nLCBkb2xsYXIgLSBzcmMgLSAzKSkgeworCQkJCS8qIExpbmUgYnJlYWsgYmVmb3JlIHRoZSBuZXh0IGRvbGxhci4gKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbWVtY3B5KGRzdCwgIklkJCIsIDMpOworCQkJZHN0ICs9IDM7CisJCQlsZW4gLT0gZG9sbGFyICsgMSAtIHNyYzsKKwkJCXNyYyAgPSBkb2xsYXIgKyAxOworCQl9CisJfQorCW1lbW1vdmUoZHN0LCBzcmMsIGxlbik7CisJc3RyYnVmX3NldGxlbihidWYsIGRzdCArIGxlbiAtIGJ1Zi0+YnVmKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpZGVudF90b193b3JrdHJlZShjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IGlkZW50KQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMLCAqZG9sbGFyLCAqc3BjOworCWludCBjbnQ7CisKKwlpZiAoIWlkZW50KQorCQlyZXR1cm4gMDsKKworCWNudCA9IGNvdW50X2lkZW50KHNyYywgbGVuKTsKKwlpZiAoIWNudCkKKwkJcmV0dXJuIDA7CisKKwkvKiBhcmUgd2UgImZha2luZyIgaW4gcGxhY2UgZWRpdGluZyA/ICovCisJaWYgKHNyYyA9PSBidWYtPmJ1ZikKKwkJdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goYnVmLCBOVUxMKTsKKwloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIHNyYywgbGVuLCAiYmxvYiIsICZvaWQpOworCisJc3RyYnVmX2dyb3coYnVmLCBsZW4gKyBjbnQgKiAodGhlX2hhc2hfYWxnby0+aGV4c3ogKyAzKSk7CisJZm9yICg7OykgeworCQkvKiBzdGVwIDE6IHJ1biB0byB0aGUgbmV4dCAnJCcgKi8KKwkJZG9sbGFyID0gbWVtY2hyKHNyYywgJyQnLCBsZW4pOworCQlpZiAoIWRvbGxhcikKKwkJCWJyZWFrOworCQlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBkb2xsYXIgKyAxIC0gc3JjKTsKKwkJbGVuIC09IGRvbGxhciArIDEgLSBzcmM7CisJCXNyYyAgPSBkb2xsYXIgKyAxOworCisJCS8qIHN0ZXAgMjogZG9lcyBpdCBsb29rcyBsaWtlIGEgYml0IGxpa2UgSWQ6eHh4JCBvciBJZCQgPyAqLworCQlpZiAobGVuIDwgMyB8fCBtZW1jbXAoIklkIiwgc3JjLCAyKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHN0ZXAgMzogc2tpcCBvdmVyIElkJCBvciBJZDp4eHh4eCQgKi8KKwkJaWYgKHNyY1syXSA9PSAnJCcpIHsKKwkJCXNyYyArPSAzOworCQkJbGVuIC09IDM7CisJCX0gZWxzZSBpZiAoc3JjWzJdID09ICc6JykgeworCQkJLyoKKwkJCSAqIEl0J3MgcG9zc2libGUgdGhhdCBhbiBleHBhbmRlZCBJZCBoYXMgY3JlcHQgaXRzIHdheSBpbnRvIHRoZQorCQkJICogcmVwb3NpdG9yeSwgd2UgY29wZSB3aXRoIHRoYXQgYnkgc3RyaXBwaW5nIHRoZSBleHBhbnNpb24gb3V0LgorCQkJICogVGhpcyBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGl0IHdpbGwgY2F1c2UgY2hhbmdlcworCQkJICogb24gY2hlY2tvdXQsIHdoaWNoIHdvbid0IGdvIGF3YXkgYnkgc3Rhc2gsIGJ1dCBsZXQncyBrZWVwIGl0CisJCQkgKiBmb3IgZ2l0LXN0eWxlIGlkcy4KKwkJCSAqLworCQkJZG9sbGFyID0gbWVtY2hyKHNyYyArIDMsICckJywgbGVuIC0gMyk7CisJCQlpZiAoIWRvbGxhcikgeworCQkJCS8qIGluY29tcGxldGUga2V5d29yZCwgbm8gbW9yZSAnJCcsIHNvIGp1c3QgcXVpdCB0aGUgbG9vcCAqLworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAobWVtY2hyKHNyYyArIDMsICdcbicsIGRvbGxhciAtIHNyYyAtIDMpKSB7CisJCQkJLyogTGluZSBicmVhayBiZWZvcmUgdGhlIG5leHQgZG9sbGFyLiAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlzcGMgPSBtZW1jaHIoc3JjICsgNCwgJyAnLCBkb2xsYXIgLSBzcmMgLSA0KTsKKwkJCWlmIChzcGMgJiYgc3BjIDwgZG9sbGFyLTEpIHsKKwkJCQkvKiBUaGVyZSBhcmUgc3BhY2VzIGluIHVuZXhwZWN0ZWQgcGxhY2VzLgorCQkJCSAqIFRoaXMgaXMgcHJvYmFibHkgYW4gaWQgZnJvbSBzb21lIG90aGVyCisJCQkJICogdmVyc2lvbmluZyBzeXN0ZW0uIEtlZXAgaXQgZm9yIG5vdy4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbGVuIC09IGRvbGxhciArIDEgLSBzcmM7CisJCQlzcmMgID0gZG9sbGFyICsgMTsKKwkJfSBlbHNlIHsKKwkJCS8qIGl0IHdhc24ndCBhICJJZCQiIG9yICJJZDp4eHh4JCIgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogc3RlcCA0OiBzdWJzdGl0dXRlICovCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiSWQ6ICIpOworCQlzdHJidWZfYWRkc3RyKGJ1Ziwgb2lkX3RvX2hleCgmb2lkKSk7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiICQiKTsKKwl9CisJc3RyYnVmX2FkZChidWYsIHNyYywgbGVuKTsKKworCWZyZWUodG9fZnJlZSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnaXRfcGF0aF9jaGVja19lbmNvZGluZyhzdHJ1Y3QgYXR0cl9jaGVja19pdGVtICpjaGVjaykKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrLT52YWx1ZTsKKworCWlmIChBVFRSX1VOU0VUKHZhbHVlKSB8fCAhc3RybGVuKHZhbHVlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoQVRUUl9UUlVFKHZhbHVlKSB8fCBBVFRSX0ZBTFNFKHZhbHVlKSkgeworCQlkaWUoXygidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIpKTsKKwl9CisKKwkvKiBEb24ndCBlbmNvZGUgdG8gdGhlIGRlZmF1bHQgZW5jb2RpbmcgKi8KKwlpZiAoc2FtZV9lbmNvZGluZyh2YWx1ZSwgZGVmYXVsdF9lbmNvZGluZykpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgZW51bSBjcmxmX2FjdGlvbiBnaXRfcGF0aF9jaGVja19jcmxmKHN0cnVjdCBhdHRyX2NoZWNrX2l0ZW0gKmNoZWNrKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2stPnZhbHVlOworCisJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCXJldHVybiBDUkxGX1RFWFQ7CisJZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpCisJCXJldHVybiBDUkxGX0JJTkFSWTsKKwllbHNlIGlmIChBVFRSX1VOU0VUKHZhbHVlKSkKKwkJOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKQorCQlyZXR1cm4gQ1JMRl9URVhUX0lOUFVUOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJhdXRvIikpCisJCXJldHVybiBDUkxGX0FVVE87CisJcmV0dXJuIENSTEZfVU5ERUZJTkVEOworfQorCitzdGF0aWMgZW51bSBlb2wgZ2l0X3BhdGhfY2hlY2tfZW9sKHN0cnVjdCBhdHRyX2NoZWNrX2l0ZW0gKmNoZWNrKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2stPnZhbHVlOworCisJaWYgKEFUVFJfVU5TRVQodmFsdWUpKQorCQk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImxmIikpCisJCXJldHVybiBFT0xfTEY7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImNybGYiKSkKKwkJcmV0dXJuIEVPTF9DUkxGOworCXJldHVybiBFT0xfVU5TRVQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29udmVydF9kcml2ZXIgKmdpdF9wYXRoX2NoZWNrX2NvbnZlcnQoc3RydWN0IGF0dHJfY2hlY2tfaXRlbSAqY2hlY2spCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+dmFsdWU7CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpkcnY7CisKKwlpZiAoQVRUUl9UUlVFKHZhbHVlKSB8fCBBVFRSX0ZBTFNFKHZhbHVlKSB8fCBBVFRSX1VOU0VUKHZhbHVlKSkKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChkcnYgPSB1c2VyX2NvbnZlcnQ7IGRydjsgZHJ2ID0gZHJ2LT5uZXh0KQorCQlpZiAoIXN0cmNtcCh2YWx1ZSwgZHJ2LT5uYW1lKSkKKwkJCXJldHVybiBkcnY7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhdGhfY2hlY2tfaWRlbnQoc3RydWN0IGF0dHJfY2hlY2tfaXRlbSAqY2hlY2spCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+dmFsdWU7CisKKwlyZXR1cm4gISFBVFRSX1RSVUUodmFsdWUpOworfQorCitzdHJ1Y3QgY29udl9hdHRycyB7CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpkcnY7CisJZW51bSBjcmxmX2FjdGlvbiBhdHRyX2FjdGlvbjsgLyogV2hhdCBhdHRyIHNheXMgKi8KKwllbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uOyAvKiBXaGVuIG5vIGF0dHIgaXMgc2V0LCB1c2UgY29yZS5hdXRvY3JsZiAqLworCWludCBpZGVudDsKKwljb25zdCBjaGFyICp3b3JraW5nX3RyZWVfZW5jb2Rpbmc7IC8qIFN1cHBvcnRlZCBlbmNvZGluZyBvciBkZWZhdWx0IGVuY29kaW5nIGlmIE5VTEwgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfYXR0cnMoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgIHN0cnVjdCBjb252X2F0dHJzICpjYSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgYXR0cl9jaGVja19pdGVtICpjY2hlY2sgPSBOVUxMOworCisJaWYgKCFjaGVjaykgeworCQljaGVjayA9IGF0dHJfY2hlY2tfaW5pdGwoImNybGYiLCAiaWRlbnQiLCAiZmlsdGVyIiwKKwkJCQkJICJlb2wiLCAidGV4dCIsICJ3b3JraW5nLXRyZWUtZW5jb2RpbmciLAorCQkJCQkgTlVMTCk7CisJCXVzZXJfY29udmVydF90YWlsID0gJnVzZXJfY29udmVydDsKKwkJZ2l0X2NvbmZpZyhyZWFkX2NvbnZlcnRfY29uZmlnLCBOVUxMKTsKKwl9CisKKwlnaXRfY2hlY2tfYXR0cihpc3RhdGUsIHBhdGgsIGNoZWNrKTsKKwljY2hlY2sgPSBjaGVjay0+aXRlbXM7CisJY2EtPmNybGZfYWN0aW9uID0gZ2l0X3BhdGhfY2hlY2tfY3JsZihjY2hlY2sgKyA0KTsKKwlpZiAoY2EtPmNybGZfYWN0aW9uID09IENSTEZfVU5ERUZJTkVEKQorCQljYS0+Y3JsZl9hY3Rpb24gPSBnaXRfcGF0aF9jaGVja19jcmxmKGNjaGVjayArIDApOworCWNhLT5pZGVudCA9IGdpdF9wYXRoX2NoZWNrX2lkZW50KGNjaGVjayArIDEpOworCWNhLT5kcnYgPSBnaXRfcGF0aF9jaGVja19jb252ZXJ0KGNjaGVjayArIDIpOworCWlmIChjYS0+Y3JsZl9hY3Rpb24gIT0gQ1JMRl9CSU5BUlkpIHsKKwkJZW51bSBlb2wgZW9sX2F0dHIgPSBnaXRfcGF0aF9jaGVja19lb2woY2NoZWNrICsgMyk7CisJCWlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPICYmIGVvbF9hdHRyID09IEVPTF9MRikKKwkJCWNhLT5jcmxmX2FjdGlvbiA9IENSTEZfQVVUT19JTlBVVDsKKwkJZWxzZSBpZiAoY2EtPmNybGZfYWN0aW9uID09IENSTEZfQVVUTyAmJiBlb2xfYXR0ciA9PSBFT0xfQ1JMRikKKwkJCWNhLT5jcmxmX2FjdGlvbiA9IENSTEZfQVVUT19DUkxGOworCQllbHNlIGlmIChlb2xfYXR0ciA9PSBFT0xfTEYpCisJCQljYS0+Y3JsZl9hY3Rpb24gPSBDUkxGX1RFWFRfSU5QVVQ7CisJCWVsc2UgaWYgKGVvbF9hdHRyID09IEVPTF9DUkxGKQorCQkJY2EtPmNybGZfYWN0aW9uID0gQ1JMRl9URVhUX0NSTEY7CisJfQorCWNhLT53b3JraW5nX3RyZWVfZW5jb2RpbmcgPSBnaXRfcGF0aF9jaGVja19lbmNvZGluZyhjY2hlY2sgKyA1KTsKKworCS8qIFNhdmUgYXR0ciBhbmQgbWFrZSBhIGRlY2lzaW9uIGZvciBhY3Rpb24gKi8KKwljYS0+YXR0cl9hY3Rpb24gPSBjYS0+Y3JsZl9hY3Rpb247CisJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBDUkxGX1RFWFQpCisJCWNhLT5jcmxmX2FjdGlvbiA9IHRleHRfZW9sX2lzX2NybGYoKSA/IENSTEZfVEVYVF9DUkxGIDogQ1JMRl9URVhUX0lOUFVUOworCWlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gQ1JMRl9VTkRFRklORUQgJiYgYXV0b19jcmxmID09IEFVVE9fQ1JMRl9GQUxTRSkKKwkJY2EtPmNybGZfYWN0aW9uID0gQ1JMRl9CSU5BUlk7CisJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBDUkxGX1VOREVGSU5FRCAmJiBhdXRvX2NybGYgPT0gQVVUT19DUkxGX1RSVUUpCisJCWNhLT5jcmxmX2FjdGlvbiA9IENSTEZfQVVUT19DUkxGOworCWlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gQ1JMRl9VTkRFRklORUQgJiYgYXV0b19jcmxmID09IEFVVE9fQ1JMRl9JTlBVVCkKKwkJY2EtPmNybGZfYWN0aW9uID0gQ1JMRl9BVVRPX0lOUFVUOworfQorCit2b2lkIHJlc2V0X3BhcnNlZF9hdHRyaWJ1dGVzKHZvaWQpCit7CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpkcnYsICpuZXh0OworCisJYXR0cl9jaGVja19mcmVlKGNoZWNrKTsKKwljaGVjayA9IE5VTEw7CisJcmVzZXRfbWVyZ2VfYXR0cmlidXRlcygpOworCisJZm9yIChkcnYgPSB1c2VyX2NvbnZlcnQ7IGRydjsgZHJ2ID0gbmV4dCkgeworCQluZXh0ID0gZHJ2LT5uZXh0OworCQlmcmVlKCh2b2lkICopZHJ2LT5uYW1lKTsKKwkJZnJlZShkcnYpOworCX0KKwl1c2VyX2NvbnZlcnQgPSBOVUxMOworCXVzZXJfY29udmVydF90YWlsID0gTlVMTDsKK30KKworaW50IHdvdWxkX2NvbnZlcnRfdG9fZ2l0X2ZpbHRlcl9mZChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgY29udl9hdHRycyBjYTsKKworCWNvbnZlcnRfYXR0cnMoaXN0YXRlLCAmY2EsIHBhdGgpOworCWlmICghY2EuZHJ2KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQXBwbHkgYSBmaWx0ZXIgdG8gYW4gZmQgb25seSBpZiB0aGUgZmlsdGVyIGlzIHJlcXVpcmVkIHRvIHN1Y2NlZWQuCisJICogV2UgbXVzdCBkaWUgaWYgdGhlIGZpbHRlciBmYWlscywgYmVjYXVzZSB0aGUgb3JpZ2luYWwgZGF0YSBiZWZvcmUKKwkgKiBmaWx0ZXJpbmcgaXMgbm90IGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoIWNhLmRydi0+cmVxdWlyZWQpCisJCXJldHVybiAwOworCisJcmV0dXJuIGFwcGx5X2ZpbHRlcihwYXRoLCBOVUxMLCAwLCAtMSwgTlVMTCwgY2EuZHJ2LCBDQVBfQ0xFQU4sIE5VTEwpOworfQorCitjb25zdCBjaGFyICpnZXRfY29udmVydF9hdHRyX2FzY2lpKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBjb252X2F0dHJzIGNhOworCisJY29udmVydF9hdHRycyhpc3RhdGUsICZjYSwgcGF0aCk7CisJc3dpdGNoIChjYS5hdHRyX2FjdGlvbikgeworCWNhc2UgQ1JMRl9VTkRFRklORUQ6CisJCXJldHVybiAiIjsKKwljYXNlIENSTEZfQklOQVJZOgorCQlyZXR1cm4gIi10ZXh0IjsKKwljYXNlIENSTEZfVEVYVDoKKwkJcmV0dXJuICJ0ZXh0IjsKKwljYXNlIENSTEZfVEVYVF9JTlBVVDoKKwkJcmV0dXJuICJ0ZXh0IGVvbD1sZiI7CisJY2FzZSBDUkxGX1RFWFRfQ1JMRjoKKwkJcmV0dXJuICJ0ZXh0IGVvbD1jcmxmIjsKKwljYXNlIENSTEZfQVVUTzoKKwkJcmV0dXJuICJ0ZXh0PWF1dG8iOworCWNhc2UgQ1JMRl9BVVRPX0NSTEY6CisJCXJldHVybiAidGV4dD1hdXRvIGVvbD1jcmxmIjsKKwljYXNlIENSTEZfQVVUT19JTlBVVDoKKwkJcmV0dXJuICJ0ZXh0PWF1dG8gZW9sPWxmIjsKKwl9CisJcmV0dXJuICIiOworfQorCitpbnQgY29udmVydF90b19naXQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJICAgc3RydWN0IHN0cmJ1ZiAqZHN0LCBpbnQgY29udl9mbGFncykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgY29udl9hdHRycyBjYTsKKworCWNvbnZlcnRfYXR0cnMoaXN0YXRlLCAmY2EsIHBhdGgpOworCisJcmV0IHw9IGFwcGx5X2ZpbHRlcihwYXRoLCBzcmMsIGxlbiwgLTEsIGRzdCwgY2EuZHJ2LCBDQVBfQ0xFQU4sIE5VTEwpOworCWlmICghcmV0ICYmIGNhLmRydiAmJiBjYS5kcnYtPnJlcXVpcmVkKQorCQlkaWUoXygiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIpLCBwYXRoLCBjYS5kcnYtPm5hbWUpOworCisJaWYgKHJldCAmJiBkc3QpIHsKKwkJc3JjID0gZHN0LT5idWY7CisJCWxlbiA9IGRzdC0+bGVuOworCX0KKworCXJldCB8PSBlbmNvZGVfdG9fZ2l0KHBhdGgsIHNyYywgbGVuLCBkc3QsIGNhLndvcmtpbmdfdHJlZV9lbmNvZGluZywgY29udl9mbGFncyk7CisJaWYgKHJldCAmJiBkc3QpIHsKKwkJc3JjID0gZHN0LT5idWY7CisJCWxlbiA9IGRzdC0+bGVuOworCX0KKworCWlmICghKGNvbnZfZmxhZ3MgJiBDT05WX0VPTF9LRUVQX0NSTEYpKSB7CisJCXJldCB8PSBjcmxmX3RvX2dpdChpc3RhdGUsIHBhdGgsIHNyYywgbGVuLCBkc3QsIGNhLmNybGZfYWN0aW9uLCBjb252X2ZsYWdzKTsKKwkJaWYgKHJldCAmJiBkc3QpIHsKKwkJCXNyYyA9IGRzdC0+YnVmOworCQkJbGVuID0gZHN0LT5sZW47CisJCX0KKwl9CisJcmV0dXJuIHJldCB8IGlkZW50X3RvX2dpdChzcmMsIGxlbiwgZHN0LCBjYS5pZGVudCk7Cit9CisKK3ZvaWQgY29udmVydF90b19naXRfZmlsdGVyX2ZkKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBzdHJ1Y3Qgc3RyYnVmICpkc3QsCisJCQkgICAgICBpbnQgY29udl9mbGFncykKK3sKKwlzdHJ1Y3QgY29udl9hdHRycyBjYTsKKwljb252ZXJ0X2F0dHJzKGlzdGF0ZSwgJmNhLCBwYXRoKTsKKworCWFzc2VydChjYS5kcnYpOworCWFzc2VydChjYS5kcnYtPmNsZWFuIHx8IGNhLmRydi0+cHJvY2Vzcyk7CisKKwlpZiAoIWFwcGx5X2ZpbHRlcihwYXRoLCBOVUxMLCAwLCBmZCwgZHN0LCBjYS5kcnYsIENBUF9DTEVBTiwgTlVMTCkpCisJCWRpZShfKCIlczogY2xlYW4gZmlsdGVyICclcycgZmFpbGVkIiksIHBhdGgsIGNhLmRydi0+bmFtZSk7CisKKwllbmNvZGVfdG9fZ2l0KHBhdGgsIGRzdC0+YnVmLCBkc3QtPmxlbiwgZHN0LCBjYS53b3JraW5nX3RyZWVfZW5jb2RpbmcsIGNvbnZfZmxhZ3MpOworCWNybGZfdG9fZ2l0KGlzdGF0ZSwgcGF0aCwgZHN0LT5idWYsIGRzdC0+bGVuLCBkc3QsIGNhLmNybGZfYWN0aW9uLCBjb252X2ZsYWdzKTsKKwlpZGVudF90b19naXQoZHN0LT5idWYsIGRzdC0+bGVuLCBkc3QsIGNhLmlkZW50KTsKK30KKworc3RhdGljIGludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZV9pbnRlcm5hbChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJICAgIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCwKKwkJCQkJICAgIGludCBub3JtYWxpemluZywgc3RydWN0IGRlbGF5ZWRfY2hlY2tvdXQgKmRjbykKK3sKKwlpbnQgcmV0ID0gMCwgcmV0X2ZpbHRlciA9IDA7CisJc3RydWN0IGNvbnZfYXR0cnMgY2E7CisKKwljb252ZXJ0X2F0dHJzKGlzdGF0ZSwgJmNhLCBwYXRoKTsKKworCXJldCB8PSBpZGVudF90b193b3JrdHJlZShzcmMsIGxlbiwgZHN0LCBjYS5pZGVudCk7CisJaWYgKHJldCkgeworCQlzcmMgPSBkc3QtPmJ1ZjsKKwkJbGVuID0gZHN0LT5sZW47CisJfQorCS8qCisJICogQ1JMRiBjb252ZXJzaW9uIGNhbiBiZSBza2lwcGVkIGlmIG5vcm1hbGl6aW5nLCB1bmxlc3MgdGhlcmUKKwkgKiBpcyBhIHNtdWRnZSBvciBwcm9jZXNzIGZpbHRlciAoZXZlbiBpZiB0aGUgcHJvY2VzcyBmaWx0ZXIgZG9lc24ndAorCSAqIHN1cHBvcnQgc211ZGdlKS4gIFRoZSBmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBDUkxGcy4KKwkgKi8KKwlpZiAoKGNhLmRydiAmJiAoY2EuZHJ2LT5zbXVkZ2UgfHwgY2EuZHJ2LT5wcm9jZXNzKSkgfHwgIW5vcm1hbGl6aW5nKSB7CisJCXJldCB8PSBjcmxmX3RvX3dvcmt0cmVlKHNyYywgbGVuLCBkc3QsIGNhLmNybGZfYWN0aW9uKTsKKwkJaWYgKHJldCkgeworCQkJc3JjID0gZHN0LT5idWY7CisJCQlsZW4gPSBkc3QtPmxlbjsKKwkJfQorCX0KKworCXJldCB8PSBlbmNvZGVfdG9fd29ya3RyZWUocGF0aCwgc3JjLCBsZW4sIGRzdCwgY2Eud29ya2luZ190cmVlX2VuY29kaW5nKTsKKwlpZiAocmV0KSB7CisJCXNyYyA9IGRzdC0+YnVmOworCQlsZW4gPSBkc3QtPmxlbjsKKwl9CisKKwlyZXRfZmlsdGVyID0gYXBwbHlfZmlsdGVyKAorCQlwYXRoLCBzcmMsIGxlbiwgLTEsIGRzdCwgY2EuZHJ2LCBDQVBfU01VREdFLCBkY28pOworCWlmICghcmV0X2ZpbHRlciAmJiBjYS5kcnYgJiYgY2EuZHJ2LT5yZXF1aXJlZCkKKwkJZGllKF8oIiVzOiBzbXVkZ2UgZmlsdGVyICVzIGZhaWxlZCIpLCBwYXRoLCBjYS5kcnYtPm5hbWUpOworCisJcmV0dXJuIHJldCB8IHJldF9maWx0ZXI7Cit9CisKK2ludCBhc3luY19jb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkgIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCwKKwkJCQkgIHZvaWQgKmRjbykKK3sKKwlyZXR1cm4gY29udmVydF90b193b3JraW5nX3RyZWVfaW50ZXJuYWwoaXN0YXRlLCBwYXRoLCBzcmMsIGxlbiwgZHN0LCAwLCBkY28pOworfQorCitpbnQgY29udmVydF90b193b3JraW5nX3RyZWUoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLAorCQkJICAgIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCkKK3sKKwlyZXR1cm4gY29udmVydF90b193b3JraW5nX3RyZWVfaW50ZXJuYWwoaXN0YXRlLCBwYXRoLCBzcmMsIGxlbiwgZHN0LCAwLCBOVUxMKTsKK30KKworaW50IHJlbm9ybWFsaXplX2J1ZmZlcihjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwgc3RydWN0IHN0cmJ1ZiAqZHN0KQoreworCWludCByZXQgPSBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZV9pbnRlcm5hbChpc3RhdGUsIHBhdGgsIHNyYywgbGVuLCBkc3QsIDEsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJc3JjID0gZHN0LT5idWY7CisJCWxlbiA9IGRzdC0+bGVuOworCX0KKwlyZXR1cm4gcmV0IHwgY29udmVydF90b19naXQoaXN0YXRlLCBwYXRoLCBzcmMsIGxlbiwgZHN0LCBDT05WX0VPTF9SRU5PUk1BTElaRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0cmVhbWluZyBjb252ZXJzaW9uIHN1cHBvcnQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgaW50ICgqZmlsdGVyX2ZuKShzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqLAorCQkJIGNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9zaXplX3ApOwordHlwZWRlZiB2b2lkICgqZnJlZV9mbikoc3RydWN0IHN0cmVhbV9maWx0ZXIgKik7CisKK3N0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgeworCWZpbHRlcl9mbiBmaWx0ZXI7CisJZnJlZV9mbiBmcmVlOworfTsKKworc3RydWN0IHN0cmVhbV9maWx0ZXIgeworCXN0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgKnZ0Ymw7Cit9OworCitzdGF0aWMgaW50IG51bGxfZmlsdGVyX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCQkgIGNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXNpemVfdCBjb3VudDsKKworCWlmICghaW5wdXQpCisJCXJldHVybiAwOyAvKiB3ZSBkbyBub3Qga2VlcCBhbnkgc3RhdGVzICovCisJY291bnQgPSAqaXNpemVfcDsKKwlpZiAoKm9zaXplX3AgPCBjb3VudCkKKwkJY291bnQgPSAqb3NpemVfcDsKKwlpZiAoY291bnQpIHsKKwkJbWVtbW92ZShvdXRwdXQsIGlucHV0LCBjb3VudCk7CisJCSppc2l6ZV9wIC09IGNvdW50OworCQkqb3NpemVfcCAtPSBjb3VudDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfZnJlZV9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCTsgLyogbm90aGluZyAtLSBudWxsIGluc3RhbmNlcyBhcmUgc2hhcmVkICovCit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsIG51bGxfdnRibCA9IHsKKwludWxsX2ZpbHRlcl9mbiwKKwludWxsX2ZyZWVfZm4sCit9OworCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXIgbnVsbF9maWx0ZXJfc2luZ2xldG9uID0geworCSZudWxsX3Z0YmwsCit9OworCitpbnQgaXNfbnVsbF9zdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJcmV0dXJuIGZpbHRlciA9PSAmbnVsbF9maWx0ZXJfc2luZ2xldG9uOworfQorCisKKy8qCisgKiBMRi10by1DUkxGIGZpbHRlcgorICovCisKK3N0cnVjdCBsZl90b19jcmxmX2ZpbHRlciB7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgZmlsdGVyOworCXVuc2lnbmVkIGhhc19oZWxkOjE7CisJY2hhciBoZWxkOworfTsKKworc3RhdGljIGludCBsZl90b19jcmxmX2ZpbHRlcl9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkJCWNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkJY2hhciAqb3V0cHV0LCBzaXplX3QgKm9zaXplX3ApCit7CisJc2l6ZV90IGNvdW50LCBvID0gMDsKKwlzdHJ1Y3QgbGZfdG9fY3JsZl9maWx0ZXIgKmxmX3RvX2NybGYgPSAoc3RydWN0IGxmX3RvX2NybGZfZmlsdGVyICopZmlsdGVyOworCisJLyoKKwkgKiBXZSBtYXkgYmUgaG9sZGluZyBvbnRvIHRoZSBDUiB0byBzZWUgaWYgaXQgaXMgZm9sbG93ZWQgYnkgYQorCSAqIExGLCBpbiB3aGljaCBjYXNlIHdlIHdvdWxkIG5lZWQgdG8gZ28gdG8gdGhlIG1haW4gbG9vcC4KKwkgKiBPdGhlcndpc2UsIGp1c3QgZW1pdCBpdCB0byB0aGUgb3V0cHV0IHN0cmVhbS4KKwkgKi8KKwlpZiAobGZfdG9fY3JsZi0+aGFzX2hlbGQgJiYgKGxmX3RvX2NybGYtPmhlbGQgIT0gJ1xyJyB8fCAhaW5wdXQpKSB7CisJCW91dHB1dFtvKytdID0gbGZfdG9fY3JsZi0+aGVsZDsKKwkJbGZfdG9fY3JsZi0+aGFzX2hlbGQgPSAwOworCX0KKworCS8qIFdlIGFyZSB0b2xkIHRvIGRyYWluICovCisJaWYgKCFpbnB1dCkgeworCQkqb3NpemVfcCAtPSBvOworCQlyZXR1cm4gMDsKKwl9CisKKwljb3VudCA9ICppc2l6ZV9wOworCWlmIChjb3VudCB8fCBsZl90b19jcmxmLT5oYXNfaGVsZCkgeworCQlzaXplX3QgaTsKKwkJaW50IHdhc19jciA9IDA7CisKKwkJaWYgKGxmX3RvX2NybGYtPmhhc19oZWxkKSB7CisJCQl3YXNfY3IgPSAxOworCQkJbGZfdG9fY3JsZi0+aGFzX2hlbGQgPSAwOworCQl9CisKKwkJZm9yIChpID0gMDsgbyA8ICpvc2l6ZV9wICYmIGkgPCBjb3VudDsgaSsrKSB7CisJCQljaGFyIGNoID0gaW5wdXRbaV07CisKKwkJCWlmIChjaCA9PSAnXG4nKSB7CisJCQkJb3V0cHV0W28rK10gPSAnXHInOworCQkJfSBlbHNlIGlmICh3YXNfY3IpIHsKKwkJCQkvKgorCQkJCSAqIFByZXZpb3VzIHJvdW5kIHNhdyBDUiBhbmQgaXQgaXMgbm90IGZvbGxvd2VkCisJCQkJICogYnkgYSBMRjsgZW1pdCB0aGUgQ1IgYmVmb3JlIHByb2Nlc3NpbmcgdGhlCisJCQkJICogY3VycmVudCBjaGFyYWN0ZXIuCisJCQkJICovCisJCQkJb3V0cHV0W28rK10gPSAnXHInOworCQkJfQorCisJCQkvKgorCQkJICogV2UgbWF5IGhhdmUgY29uc3VtZWQgdGhlIGxhc3Qgb3V0cHV0IHNsb3QsCisJCQkgKiBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYnJlYWsgb3V0IG9mIHRoaXMKKwkJCSAqIGxvb3A7IGhvbGQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGJlZm9yZQorCQkJICogcmV0dXJuaW5nLgorCQkJICovCisJCQlpZiAoKm9zaXplX3AgPD0gbykgeworCQkJCWxmX3RvX2NybGYtPmhhc19oZWxkID0gMTsKKwkJCQlsZl90b19jcmxmLT5oZWxkID0gY2g7CisJCQkJY29udGludWU7IC8qIGJyZWFrIGJ1dCBpbmNyZW1lbnQgaSAqLworCQkJfQorCisJCQlpZiAoY2ggPT0gJ1xyJykgeworCQkJCXdhc19jciA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXdhc19jciA9IDA7CisJCQlvdXRwdXRbbysrXSA9IGNoOworCQl9CisKKwkJKm9zaXplX3AgLT0gbzsKKwkJKmlzaXplX3AgLT0gaTsKKworCQlpZiAoIWxmX3RvX2NybGYtPmhhc19oZWxkICYmIHdhc19jcikgeworCQkJbGZfdG9fY3JsZi0+aGFzX2hlbGQgPSAxOworCQkJbGZfdG9fY3JsZi0+aGVsZCA9ICdccic7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxmX3RvX2NybGZfZnJlZV9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCWZyZWUoZmlsdGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgbGZfdG9fY3JsZl92dGJsID0geworCWxmX3RvX2NybGZfZmlsdGVyX2ZuLAorCWxmX3RvX2NybGZfZnJlZV9mbiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqbGZfdG9fY3JsZl9maWx0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgbGZfdG9fY3JsZl9maWx0ZXIgKmxmX3RvX2NybGYgPSB4Y2FsbG9jKDEsIHNpemVvZigqbGZfdG9fY3JsZikpOworCisJbGZfdG9fY3JsZi0+ZmlsdGVyLnZ0YmwgPSAmbGZfdG9fY3JsZl92dGJsOworCXJldHVybiAoc3RydWN0IHN0cmVhbV9maWx0ZXIgKilsZl90b19jcmxmOworfQorCisvKgorICogQ2FzY2FkZSBmaWx0ZXIKKyAqLworI2RlZmluZSBGSUxURVJfQlVGRkVSIDEwMjQKK3N0cnVjdCBjYXNjYWRlX2ZpbHRlciB7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgZmlsdGVyOworCXN0cnVjdCBzdHJlYW1fZmlsdGVyICpvbmU7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgKnR3bzsKKwljaGFyIGJ1ZltGSUxURVJfQlVGRkVSXTsKKwlpbnQgZW5kLCBwdHI7Cit9OworCitzdGF0aWMgaW50IGNhc2NhZGVfZmlsdGVyX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkgICAgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXN0cnVjdCBjYXNjYWRlX2ZpbHRlciAqY2FzID0gKHN0cnVjdCBjYXNjYWRlX2ZpbHRlciAqKSBmaWx0ZXI7CisJc2l6ZV90IGZpbGxlZCA9IDA7CisJc2l6ZV90IHN6ID0gKm9zaXplX3A7CisJc2l6ZV90IHRvX2ZlZWQsIHJlbWFpbmluZzsKKworCS8qCisJICogaW5wdXQgLS0gKG9uZSkgLS0+IGJ1ZiAtLSAodHdvKSAtLT4gb3V0cHV0CisJICovCisJd2hpbGUgKGZpbGxlZCA8IHN6KSB7CisJCXJlbWFpbmluZyA9IHN6IC0gZmlsbGVkOworCisJCS8qIGRvIHdlIGFscmVhZHkgaGF2ZSBzb21ldGhpbmcgdG8gZmVlZCB0d28gd2l0aD8gKi8KKwkJaWYgKGNhcy0+cHRyIDwgY2FzLT5lbmQpIHsKKwkJCXRvX2ZlZWQgPSBjYXMtPmVuZCAtIGNhcy0+cHRyOworCQkJaWYgKHN0cmVhbV9maWx0ZXIoY2FzLT50d28sCisJCQkJCSAgY2FzLT5idWYgKyBjYXMtPnB0ciwgJnRvX2ZlZWQsCisJCQkJCSAgb3V0cHV0ICsgZmlsbGVkLCAmcmVtYWluaW5nKSkKKwkJCQlyZXR1cm4gLTE7CisJCQljYXMtPnB0ciArPSAoY2FzLT5lbmQgLSBjYXMtPnB0cikgLSB0b19mZWVkOworCQkJZmlsbGVkID0gc3ogLSByZW1haW5pbmc7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGZlZWQgb25lIGZyb20gdXBzdHJlYW0gYW5kIGhhdmUgaXQgZW1pdCBpbnRvIG91ciBidWZmZXIgKi8KKwkJdG9fZmVlZCA9IGlucHV0ID8gKmlzaXplX3AgOiAwOworCQlpZiAoaW5wdXQgJiYgIXRvX2ZlZWQpCisJCQlicmVhazsKKwkJcmVtYWluaW5nID0gc2l6ZW9mKGNhcy0+YnVmKTsKKwkJaWYgKHN0cmVhbV9maWx0ZXIoY2FzLT5vbmUsCisJCQkJICBpbnB1dCwgJnRvX2ZlZWQsCisJCQkJICBjYXMtPmJ1ZiwgJnJlbWFpbmluZykpCisJCQlyZXR1cm4gLTE7CisJCWNhcy0+ZW5kID0gc2l6ZW9mKGNhcy0+YnVmKSAtIHJlbWFpbmluZzsKKwkJY2FzLT5wdHIgPSAwOworCQlpZiAoaW5wdXQpIHsKKwkJCXNpemVfdCBmZWQgPSAqaXNpemVfcCAtIHRvX2ZlZWQ7CisJCQkqaXNpemVfcCAtPSBmZWQ7CisJCQlpbnB1dCArPSBmZWQ7CisJCX0KKworCQkvKiBkbyB3ZSBrbm93IHRoYXQgd2UgZHJhaW5lZCBvbmUgY29tcGxldGVseT8gKi8KKwkJaWYgKGlucHV0IHx8IGNhcy0+ZW5kKQorCQkJY29udGludWU7CisKKwkJLyogdGVsbCB0d28gdG8gZHJhaW47IHdlIGhhdmUgbm90aGluZyBtb3JlIHRvIGdpdmUgaXQgKi8KKwkJdG9fZmVlZCA9IDA7CisJCXJlbWFpbmluZyA9IHN6IC0gZmlsbGVkOworCQlpZiAoc3RyZWFtX2ZpbHRlcihjYXMtPnR3bywKKwkJCQkgIE5VTEwsICZ0b19mZWVkLAorCQkJCSAgb3V0cHV0ICsgZmlsbGVkLCAmcmVtYWluaW5nKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKHJlbWFpbmluZyA9PSAoc3ogLSBmaWxsZWQpKQorCQkJYnJlYWs7IC8qIGNvbXBsZXRlbHkgZHJhaW5lZCB0d28gKi8KKwkJZmlsbGVkID0gc3ogLSByZW1haW5pbmc7CisJfQorCSpvc2l6ZV9wIC09IGZpbGxlZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2FzY2FkZV9mcmVlX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IGNhc2NhZGVfZmlsdGVyICpjYXMgPSAoc3RydWN0IGNhc2NhZGVfZmlsdGVyICopZmlsdGVyOworCWZyZWVfc3RyZWFtX2ZpbHRlcihjYXMtPm9uZSk7CisJZnJlZV9zdHJlYW1fZmlsdGVyKGNhcy0+dHdvKTsKKwlmcmVlKGZpbHRlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsIGNhc2NhZGVfdnRibCA9IHsKKwljYXNjYWRlX2ZpbHRlcl9mbiwKKwljYXNjYWRlX2ZyZWVfZm4sCit9OworCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmNhc2NhZGVfZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpvbmUsCisJCQkJCSAgICBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqdHdvKQoreworCXN0cnVjdCBjYXNjYWRlX2ZpbHRlciAqY2FzY2FkZTsKKworCWlmICghb25lIHx8IGlzX251bGxfc3RyZWFtX2ZpbHRlcihvbmUpKQorCQlyZXR1cm4gdHdvOworCWlmICghdHdvIHx8IGlzX251bGxfc3RyZWFtX2ZpbHRlcih0d28pKQorCQlyZXR1cm4gb25lOworCisJY2FzY2FkZSA9IHhtYWxsb2Moc2l6ZW9mKCpjYXNjYWRlKSk7CisJY2FzY2FkZS0+b25lID0gb25lOworCWNhc2NhZGUtPnR3byA9IHR3bzsKKwljYXNjYWRlLT5lbmQgPSBjYXNjYWRlLT5wdHIgPSAwOworCWNhc2NhZGUtPmZpbHRlci52dGJsID0gJmNhc2NhZGVfdnRibDsKKwlyZXR1cm4gKHN0cnVjdCBzdHJlYW1fZmlsdGVyICopY2FzY2FkZTsKK30KKworLyoKKyAqIGlkZW50IGZpbHRlcgorICovCisjZGVmaW5lIElERU5UX0RSQUlOSU5HICgtMSkKKyNkZWZpbmUgSURFTlRfU0tJUFBJTkcgKC0yKQorc3RydWN0IGlkZW50X2ZpbHRlciB7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgZmlsdGVyOworCXN0cnVjdCBzdHJidWYgbGVmdDsKKwlpbnQgc3RhdGU7CisJY2hhciBpZGVudFtHSVRfTUFYX0hFWFNaICsgNV07IC8qICI6IHg0MCAkIiAqLworfTsKKworc3RhdGljIGludCBpc19mb3JlaWduX2lkZW50KGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgaTsKKworCWlmICghc2tpcF9wcmVmaXgoc3RyLCAiJElkOiAiLCAmc3RyKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgc3RyW2ldOyBpKyspIHsKKwkJaWYgKGlzc3BhY2Uoc3RyW2ldKSAmJiBzdHJbaSsxXSAhPSAnJCcpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlkZW50X2RyYWluKHN0cnVjdCBpZGVudF9maWx0ZXIgKmlkZW50LCBjaGFyICoqb3V0cHV0X3AsIHNpemVfdCAqb3NpemVfcCkKK3sKKwlzaXplX3QgdG9fZHJhaW4gPSBpZGVudC0+bGVmdC5sZW47CisKKwlpZiAoKm9zaXplX3AgPCB0b19kcmFpbikKKwkJdG9fZHJhaW4gPSAqb3NpemVfcDsKKwlpZiAodG9fZHJhaW4pIHsKKwkJbWVtY3B5KCpvdXRwdXRfcCwgaWRlbnQtPmxlZnQuYnVmLCB0b19kcmFpbik7CisJCXN0cmJ1Zl9yZW1vdmUoJmlkZW50LT5sZWZ0LCAwLCB0b19kcmFpbik7CisJCSpvdXRwdXRfcCArPSB0b19kcmFpbjsKKwkJKm9zaXplX3AgLT0gdG9fZHJhaW47CisJfQorCWlmICghaWRlbnQtPmxlZnQubGVuKQorCQlpZGVudC0+c3RhdGUgPSAwOworfQorCitzdGF0aWMgaW50IGlkZW50X2ZpbHRlcl9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkJICAgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJCSAgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXN0cnVjdCBpZGVudF9maWx0ZXIgKmlkZW50ID0gKHN0cnVjdCBpZGVudF9maWx0ZXIgKilmaWx0ZXI7CisJc3RhdGljIGNvbnN0IGNoYXIgaGVhZFtdID0gIiRJZCI7CisKKwlpZiAoIWlucHV0KSB7CisJCS8qIGRyYWluIHVwb24gZW9mICovCisJCXN3aXRjaCAoaWRlbnQtPnN0YXRlKSB7CisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkKCZpZGVudC0+bGVmdCwgaGVhZCwgaWRlbnQtPnN0YXRlKTsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgSURFTlRfU0tJUFBJTkc6CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIElERU5UX0RSQUlOSU5HOgorCQkJaWRlbnRfZHJhaW4oaWRlbnQsICZvdXRwdXQsIG9zaXplX3ApOworCQl9CisJCXJldHVybiAwOworCX0KKworCXdoaWxlICgqaXNpemVfcCB8fCAoaWRlbnQtPnN0YXRlID09IElERU5UX0RSQUlOSU5HKSkgeworCQlpbnQgY2g7CisKKwkJaWYgKGlkZW50LT5zdGF0ZSA9PSBJREVOVF9EUkFJTklORykgeworCQkJaWRlbnRfZHJhaW4oaWRlbnQsICZvdXRwdXQsIG9zaXplX3ApOworCQkJaWYgKCEqb3NpemVfcCkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY2ggPSAqKGlucHV0KyspOworCQkoKmlzaXplX3ApLS07CisKKwkJaWYgKGlkZW50LT5zdGF0ZSA9PSBJREVOVF9TS0lQUElORykgeworCQkJLyoKKwkJCSAqIFNraXBwaW5nIHVudGlsICckJyBvciBMRiwgYnV0IGtlZXBpbmcgdGhlbQorCQkJICogaW4gY2FzZSBpdCBpcyBhIGZvcmVpZ24gaWRlbnQuCisJCQkgKi8KKwkJCXN0cmJ1Zl9hZGRjaCgmaWRlbnQtPmxlZnQsIGNoKTsKKwkJCWlmIChjaCAhPSAnXG4nICYmIGNoICE9ICckJykKKwkJCQljb250aW51ZTsKKwkJCWlmIChjaCA9PSAnJCcgJiYgIWlzX2ZvcmVpZ25faWRlbnQoaWRlbnQtPmxlZnQuYnVmKSkgeworCQkJCXN0cmJ1Zl9zZXRsZW4oJmlkZW50LT5sZWZ0LCBzaXplb2YoaGVhZCkgLSAxKTsKKwkJCQlzdHJidWZfYWRkc3RyKCZpZGVudC0+bGVmdCwgaWRlbnQtPmlkZW50KTsKKwkJCX0KKwkJCWlkZW50LT5zdGF0ZSA9IElERU5UX0RSQUlOSU5HOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaWRlbnQtPnN0YXRlIDwgc2l6ZW9mKGhlYWQpICYmCisJCSAgICBoZWFkW2lkZW50LT5zdGF0ZV0gPT0gY2gpIHsKKwkJCWlkZW50LT5zdGF0ZSsrOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaWRlbnQtPnN0YXRlKQorCQkJc3RyYnVmX2FkZCgmaWRlbnQtPmxlZnQsIGhlYWQsIGlkZW50LT5zdGF0ZSk7CisJCWlmIChpZGVudC0+c3RhdGUgPT0gc2l6ZW9mKGhlYWQpIC0gMSkgeworCQkJaWYgKGNoICE9ICc6JyAmJiBjaCAhPSAnJCcpIHsKKwkJCQlzdHJidWZfYWRkY2goJmlkZW50LT5sZWZ0LCBjaCk7CisJCQkJaWRlbnQtPnN0YXRlID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKGNoID09ICc6JykgeworCQkJCXN0cmJ1Zl9hZGRjaCgmaWRlbnQtPmxlZnQsIGNoKTsKKwkJCQlpZGVudC0+c3RhdGUgPSBJREVOVF9TS0lQUElORzsKKwkJCX0gZWxzZSB7CisJCQkJc3RyYnVmX2FkZHN0cigmaWRlbnQtPmxlZnQsIGlkZW50LT5pZGVudCk7CisJCQkJaWRlbnQtPnN0YXRlID0gSURFTlRfRFJBSU5JTkc7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9hZGRjaCgmaWRlbnQtPmxlZnQsIGNoKTsKKwkJaWRlbnQtPnN0YXRlID0gSURFTlRfRFJBSU5JTkc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZGVudF9mcmVlX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IGlkZW50X2ZpbHRlciAqaWRlbnQgPSAoc3RydWN0IGlkZW50X2ZpbHRlciAqKWZpbHRlcjsKKwlzdHJidWZfcmVsZWFzZSgmaWRlbnQtPmxlZnQpOworCWZyZWUoZmlsdGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgaWRlbnRfdnRibCA9IHsKKwlpZGVudF9maWx0ZXJfZm4sCisJaWRlbnRfZnJlZV9mbiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqaWRlbnRfZmlsdGVyKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgaWRlbnRfZmlsdGVyICppZGVudCA9IHhtYWxsb2Moc2l6ZW9mKCppZGVudCkpOworCisJeHNucHJpbnRmKGlkZW50LT5pZGVudCwgc2l6ZW9mKGlkZW50LT5pZGVudCksCisJCSAgIjogJXMgJCIsIG9pZF90b19oZXgob2lkKSk7CisJc3RyYnVmX2luaXQoJmlkZW50LT5sZWZ0LCAwKTsKKwlpZGVudC0+ZmlsdGVyLnZ0YmwgPSAmaWRlbnRfdnRibDsKKwlpZGVudC0+c3RhdGUgPSAwOworCXJldHVybiAoc3RydWN0IHN0cmVhbV9maWx0ZXIgKilpZGVudDsKK30KKworLyoKKyAqIFJldHVybiBhbiBhcHByb3ByaWF0ZWx5IGNvbnN0cnVjdGVkIGZpbHRlciBmb3IgdGhlIHBhdGgsIG9yIE5VTEwgaWYKKyAqIHRoZSBjb250ZW50cyBjYW5ub3QgYmUgZmlsdGVyZWQgd2l0aG91dCByZWFkaW5nIHRoZSB3aG9sZSB0aGluZworICogaW4tY29yZS4KKyAqCisgKiBOb3RlIHRoYXQgeW91IHdvdWxkIGJlIGNyYXp5IHRvIHNldCBDUkxGLCBzbXVkZ2UvY2xlYW4gb3IgaWRlbnQgdG8gYQorICogbGFyZ2UgYmluYXJ5IGJsb2IgeW91IHdvdWxkIHdhbnQgdXMgbm90IHRvIHNsdXJwIGludG8gdGhlIG1lbW9yeSEKKyAqLworc3RydWN0IHN0cmVhbV9maWx0ZXIgKmdldF9zdHJlYW1fZmlsdGVyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQljb25zdCBjaGFyICpwYXRoLAorCQkJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGNvbnZfYXR0cnMgY2E7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciA9IE5VTEw7CisKKwljb252ZXJ0X2F0dHJzKGlzdGF0ZSwgJmNhLCBwYXRoKTsKKwlpZiAoY2EuZHJ2ICYmIChjYS5kcnYtPnByb2Nlc3MgfHwgY2EuZHJ2LT5zbXVkZ2UgfHwgY2EuZHJ2LT5jbGVhbikpCisJCXJldHVybiBOVUxMOworCisJaWYgKGNhLndvcmtpbmdfdHJlZV9lbmNvZGluZykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY2EuY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPIHx8IGNhLmNybGZfYWN0aW9uID09IENSTEZfQVVUT19DUkxGKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjYS5pZGVudCkKKwkJZmlsdGVyID0gaWRlbnRfZmlsdGVyKG9pZCk7CisKKwlpZiAob3V0cHV0X2VvbChjYS5jcmxmX2FjdGlvbikgPT0gRU9MX0NSTEYpCisJCWZpbHRlciA9IGNhc2NhZGVfZmlsdGVyKGZpbHRlciwgbGZfdG9fY3JsZl9maWx0ZXIoKSk7CisJZWxzZQorCQlmaWx0ZXIgPSBjYXNjYWRlX2ZpbHRlcihmaWx0ZXIsICZudWxsX2ZpbHRlcl9zaW5nbGV0b24pOworCisJcmV0dXJuIGZpbHRlcjsKK30KKwordm9pZCBmcmVlX3N0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlmaWx0ZXItPnZ0YmwtPmZyZWUoZmlsdGVyKTsKK30KKworaW50IHN0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJICBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXJldHVybiBmaWx0ZXItPnZ0YmwtPmZpbHRlcihmaWx0ZXIsIGlucHV0LCBpc2l6ZV9wLCBvdXRwdXQsIG9zaXplX3ApOworfQpkaWZmIC0tZ2l0IGEvY29udmVydC5oIGIvY29udmVydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MTA5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb252ZXJ0LmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuCisgKi8KKyNpZm5kZWYgQ09OVkVSVF9ICisjZGVmaW5lIENPTlZFUlRfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IGluZGV4X3N0YXRlOworc3RydWN0IG9iamVjdF9pZDsKK3N0cnVjdCBzdHJidWY7CisKKyNkZWZpbmUgQ09OVl9FT0xfUk5EVFJQX0RJRSAgICgxPDwwKSAvKiBEaWUgaWYgQ1JMRiB0byBMRiB0byBDUkxGIGlzIGRpZmZlcmVudCAqLworI2RlZmluZSBDT05WX0VPTF9STkRUUlBfV0FSTiAgKDE8PDEpIC8qIFdhcm4gaWYgQ1JMRiB0byBMRiB0byBDUkxGIGlzIGRpZmZlcmVudCAqLworI2RlZmluZSBDT05WX0VPTF9SRU5PUk1BTElaRSAgKDE8PDIpIC8qIENvbnZlcnQgQ1JMRiB0byBMRiAqLworI2RlZmluZSBDT05WX0VPTF9LRUVQX0NSTEYgICAgKDE8PDMpIC8qIEtlZXAgQ1JMRiBsaW5lIGVuZGluZ3MgYXMgaXMgKi8KKyNkZWZpbmUgQ09OVl9XUklURV9PQkpFQ1QgICAgICgxPDw0KSAvKiBDb250ZW50IGlzIHdyaXR0ZW4gdG8gdGhlIGluZGV4ICovCisKK2V4dGVybiBpbnQgZ2xvYmFsX2NvbnZfZmxhZ3NfZW9sOworCitlbnVtIGF1dG9fY3JsZiB7CisJQVVUT19DUkxGX0ZBTFNFID0gMCwKKwlBVVRPX0NSTEZfVFJVRSA9IDEsCisJQVVUT19DUkxGX0lOUFVUID0gLTEKK307CisKK2V4dGVybiBlbnVtIGF1dG9fY3JsZiBhdXRvX2NybGY7CisKK2VudW0gZW9sIHsKKwlFT0xfVU5TRVQsCisJRU9MX0NSTEYsCisJRU9MX0xGLAorI2lmZGVmIE5BVElWRV9DUkxGCisJRU9MX05BVElWRSA9IEVPTF9DUkxGCisjZWxzZQorCUVPTF9OQVRJVkUgPSBFT0xfTEYKKyNlbmRpZgorfTsKKworZW51bSBjZV9kZWxheV9zdGF0ZSB7CisJQ0VfTk9fREVMQVkgPSAwLAorCUNFX0NBTl9ERUxBWSA9IDEsCisJQ0VfUkVUUlkgPSAyCit9OworCitzdHJ1Y3QgZGVsYXllZF9jaGVja291dCB7CisJLyoKKwkgKiBTdGF0ZSBvZiB0aGUgY3VycmVudGx5IHByb2Nlc3NlZCBjYWNoZSBlbnRyeS4gSWYgdGhlIHN0YXRlIGlzCisJICogQ0VfQ0FOX0RFTEFZLCB0aGVuIHRoZSBmaWx0ZXIgY2FuIGRlbGF5IHRoZSBjdXJyZW50IGNhY2hlIGVudHJ5LgorCSAqIElmIHRoZSBzdGF0ZSBpcyBDRV9SRVRSWSwgdGhlbiB0aGlzIHNpZ25hbHMgdGhlIGZpbHRlciB0aGF0IHRoZQorCSAqIGNhY2hlIGVudHJ5IHdhcyByZXF1ZXN0ZWQgYmVmb3JlLgorCSAqLworCWVudW0gY2VfZGVsYXlfc3RhdGUgc3RhdGU7CisJLyogTGlzdCBvZiBmaWx0ZXIgZHJpdmVycyB0aGF0IHNpZ25hbGVkIGRlbGF5ZWQgYmxvYnMuICovCisJc3RydWN0IHN0cmluZ19saXN0IGZpbHRlcnM7CisJLyogTGlzdCBvZiBkZWxheWVkIGJsb2JzIGlkZW50aWZpZWQgYnkgdGhlaXIgcGF0aC4gKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcGF0aHM7Cit9OworCitleHRlcm4gZW51bSBlb2wgY29yZV9lb2w7CitleHRlcm4gY2hhciAqY2hlY2tfcm91bmR0cmlwX2VuY29kaW5nOworY29uc3QgY2hhciAqZ2V0X2NhY2hlZF9jb252ZXJ0X3N0YXRzX2FzY2lpKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgICBjb25zdCBjaGFyICpwYXRoKTsKK2NvbnN0IGNoYXIgKmdldF93dF9jb252ZXJ0X3N0YXRzX2FzY2lpKGNvbnN0IGNoYXIgKnBhdGgpOworY29uc3QgY2hhciAqZ2V0X2NvbnZlcnRfYXR0cl9hc2NpaShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgICBjb25zdCBjaGFyICpwYXRoKTsKKworLyogcmV0dXJucyAxIGlmICpkc3Qgd2FzIHVzZWQgKi8KK2ludCBjb252ZXJ0X3RvX2dpdChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkgICBzdHJ1Y3Qgc3RyYnVmICpkc3QsIGludCBjb252X2ZsYWdzKTsKK2ludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsCisJCQkgICAgc2l6ZV90IGxlbiwgc3RydWN0IHN0cmJ1ZiAqZHN0KTsKK2ludCBhc3luY19jb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkgIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCwKKwkJCQkgIHZvaWQgKmRjbyk7CitpbnQgYXN5bmNfcXVlcnlfYXZhaWxhYmxlX2Jsb2JzKGNvbnN0IGNoYXIgKmNtZCwKKwkJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmF2YWlsYWJsZV9wYXRocyk7CitpbnQgcmVub3JtYWxpemVfYnVmZmVyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqZHN0KTsKK3N0YXRpYyBpbmxpbmUgaW50IHdvdWxkX2NvbnZlcnRfdG9fZ2l0KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiBjb252ZXJ0X3RvX2dpdChpc3RhdGUsIHBhdGgsIE5VTEwsIDAsIE5VTEwsIDApOworfQorLyogUHJlY29uZGl0aW9uOiB3b3VsZF9jb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQocGF0aCkgPT0gdHJ1ZSAqLwordm9pZCBjb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpkc3QsCisJCQkgICAgICBpbnQgY29udl9mbGFncyk7CitpbnQgd291bGRfY29udmVydF90b19naXRfZmlsdGVyX2ZkKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogUmVzZXQgdGhlIGludGVybmFsIGxpc3Qgb2YgYXR0cmlidXRlcyB1c2VkIGJ5IGNvbnZlcnRfdG9fZ2l0IGFuZAorICogY29udmVydF90b193b3JraW5nX3RyZWUuCisgKi8KK3ZvaWQgcmVzZXRfcGFyc2VkX2F0dHJpYnV0ZXModm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0cmVhbWluZyBjb252ZXJzaW9uIHN1cHBvcnQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBzdHJlYW1fZmlsdGVyOyAvKiBvcGFxdWUgKi8KKworc3RydWN0IHN0cmVhbV9maWx0ZXIgKmdldF9zdHJlYW1fZmlsdGVyKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQljb25zdCBjaGFyICpwYXRoLAorCQkJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopOwordm9pZCBmcmVlX3N0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKik7CitpbnQgaXNfbnVsbF9zdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICopOworCisvKgorICogVXNlIGFzIG11Y2ggaW5wdXQgdXAgdG8gKmlzaXplX3AgYW5kIGZpbGwgb3V0cHV0IHVwIHRvICpvc2l6ZV9wOworICogdXBkYXRlIGlzaXplX3AgYW5kIG9zaXplX3AgdG8gaW5kaWNhdGUgaG93IG11Y2ggYnVmZmVyIHNwYWNlIHdhcworICogY29uc3VtZWQgYW5kIGZpbGxlZC4gUmV0dXJuIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZXJyb3IuCisgKgorICogU29tZSBmaWx0ZXJzIG1heSBuZWVkIHRvIGJ1ZmZlciB0aGUgaW5wdXQgYW5kIGxvb2stYWhlYWQgaW5zaWRlIGl0CisgKiB0byBkZWNpZGUgd2hhdCB0byBvdXRwdXQsIGFuZCB0aGV5IG1heSBjb25zdW1lIG1vcmUgdGhhbiB6ZXJvIGJ5dGVzCisgKiBvZiBpbnB1dCBhbmQgc3RpbGwgbm90IHByb2R1Y2UgYW55IG91dHB1dC4gQWZ0ZXIgZmVlZGluZyBhbGwgdGhlCisgKiBpbnB1dCwgcGFzcyBOVUxMIGFzIGlucHV0IGFuZCBrZWVwIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdG8gbGV0CisgKiBzdWNoIGZpbHRlcnMga25vdyB0aGVyZSBpcyBubyBtb3JlIGlucHV0IGNvbWluZyBhbmQgaXQgaXMgdGltZSBmb3IKKyAqIHRoZW0gdG8gcHJvZHVjZSB0aGUgcmVtYWluaW5nIG91dHB1dCBiYXNlZCBvbiB0aGUgYnVmZmVyZWQgaW5wdXQuCisgKi8KK2ludCBzdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICosCisJCSAgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJICBjaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCk7CisKKyNlbmRpZiAvKiBDT05WRVJUX0ggKi8KZGlmZiAtLWdpdCBhL2NvcHkuYyBiL2NvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU2YTExCi0tLSAvZGV2L251bGwKKysrIGIvY29weS5jCkBAIC0wLDAgKzEsNjcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY29weV9mZChpbnQgaWZkLCBpbnQgb2ZkKQoreworCXdoaWxlICgxKSB7CisJCWNoYXIgYnVmZmVyWzgxOTJdOworCQlzc2l6ZV90IGxlbiA9IHhyZWFkKGlmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmICghbGVuKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCAwKQorCQkJcmV0dXJuIENPUFlfUkVBRF9FUlJPUjsKKwkJaWYgKHdyaXRlX2luX2Z1bGwob2ZkLCBidWZmZXIsIGxlbikgPCAwKQorCQkJcmV0dXJuIENPUFlfV1JJVEVfRVJST1I7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcHlfdGltZXMoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHV0aW1idWYgdGltZXM7CisJaWYgKHN0YXQoc3JjLCAmc3QpIDwgMCkKKwkJcmV0dXJuIC0xOworCXRpbWVzLmFjdGltZSA9IHN0LnN0X2F0aW1lOworCXRpbWVzLm1vZHRpbWUgPSBzdC5zdF9tdGltZTsKKwlpZiAodXRpbWUoZHN0LCAmdGltZXMpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgY29weV9maWxlKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSkKK3sKKwlpbnQgZmRpLCBmZG8sIHN0YXR1czsKKworCW1vZGUgPSAobW9kZSAmIDAxMTEpID8gMDc3NyA6IDA2NjY7CisJaWYgKChmZGkgPSBvcGVuKHNyYywgT19SRE9OTFkpKSA8IDApCisJCXJldHVybiBmZGk7CisJaWYgKChmZG8gPSBvcGVuKGRzdCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCBtb2RlKSkgPCAwKSB7CisJCWNsb3NlKGZkaSk7CisJCXJldHVybiBmZG87CisJfQorCXN0YXR1cyA9IGNvcHlfZmQoZmRpLCBmZG8pOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBDT1BZX1JFQURfRVJST1I6CisJCWVycm9yX2Vycm5vKCJjb3B5LWZkOiByZWFkIHJldHVybmVkIik7CisJCWJyZWFrOworCWNhc2UgQ09QWV9XUklURV9FUlJPUjoKKwkJZXJyb3JfZXJybm8oImNvcHktZmQ6IHdyaXRlIHJldHVybmVkIik7CisJCWJyZWFrOworCX0KKwljbG9zZShmZGkpOworCWlmIChjbG9zZShmZG8pICE9IDApCisJCXJldHVybiBlcnJvcl9lcnJubygiJXM6IGNsb3NlIGVycm9yIiwgZHN0KTsKKworCWlmICghc3RhdHVzICYmIGFkanVzdF9zaGFyZWRfcGVybShkc3QpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgY29weV9maWxlX3dpdGhfdGltZShjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IG1vZGUpCit7CisJaW50IHN0YXR1cyA9IGNvcHlfZmlsZShkc3QsIHNyYywgbW9kZSk7CisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBjb3B5X3RpbWVzKGRzdCwgc3JjKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmMgYi9jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzEyNzFmCi0tLSAvZGV2L251bGwKKysrIGIvY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmMKQEAgLTAsMCArMSwyOTcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRlbXBmaWxlLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgInVuaXgtc29ja2V0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdHJ1Y3QgY3JlZGVudGlhbF9jYWNoZV9lbnRyeSB7CisJc3RydWN0IGNyZWRlbnRpYWwgaXRlbTsKKwl0aW1lc3RhbXBfdCBleHBpcmF0aW9uOworfTsKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbF9jYWNoZV9lbnRyeSAqZW50cmllczsKK3N0YXRpYyBpbnQgZW50cmllc19ucjsKK3N0YXRpYyBpbnQgZW50cmllc19hbGxvYzsKKworc3RhdGljIHZvaWQgY2FjaGVfY3JlZGVudGlhbChzdHJ1Y3QgY3JlZGVudGlhbCAqYywgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgKmU7CisKKwlBTExPQ19HUk9XKGVudHJpZXMsIGVudHJpZXNfbnIgKyAxLCBlbnRyaWVzX2FsbG9jKTsKKwllID0gJmVudHJpZXNbZW50cmllc19ucisrXTsKKworCS8qIHRha2Ugb3duZXJzaGlwIG9mIHBvaW50ZXJzICovCisJbWVtY3B5KCZlLT5pdGVtLCBjLCBzaXplb2YoKmMpKTsKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJZS0+ZXhwaXJhdGlvbiA9IHRpbWUoTlVMTCkgKyB0aW1lb3V0OworfQorCitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgKmxvb2t1cF9jcmVkZW50aWFsKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzX25yOyBpKyspIHsKKwkJc3RydWN0IGNyZWRlbnRpYWwgKmUgPSAmZW50cmllc1tpXS5pdGVtOworCQlpZiAoY3JlZGVudGlhbF9tYXRjaChjLCBlKSkKKwkJCXJldHVybiAmZW50cmllc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9jcmVkZW50aWFsKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXN0cnVjdCBjcmVkZW50aWFsX2NhY2hlX2VudHJ5ICplOworCisJZSA9IGxvb2t1cF9jcmVkZW50aWFsKGMpOworCWlmIChlKQorCQllLT5leHBpcmF0aW9uID0gMDsKK30KKworc3RhdGljIHRpbWVzdGFtcF90IGNoZWNrX2V4cGlyYXRpb25zKHZvaWQpCit7CisJc3RhdGljIHRpbWVzdGFtcF90IHdhaXRfZm9yX2VudHJ5X3VudGlsOworCWludCBpID0gMDsKKwl0aW1lc3RhbXBfdCBub3cgPSB0aW1lKE5VTEwpOworCXRpbWVzdGFtcF90IG5leHQgPSBUSU1FX01BWDsKKworCS8qCisJICogSW5pdGlhbGx5IGdpdmUgdGhlIGNsaWVudCAzMCBzZWNvbmRzIHRvIGFjdHVhbGx5IGNvbnRhY3QgdXMKKwkgKiBhbmQgc3RvcmUgYSBjcmVkZW50aWFsIGJlZm9yZSB3ZSBkZWNpZGUgdGhlcmUncyBubyBwb2ludCBpbgorCSAqIGtlZXBpbmcgdGhlIGRhZW1vbiBhcm91bmQuCisJICovCisJaWYgKCF3YWl0X2Zvcl9lbnRyeV91bnRpbCkKKwkJd2FpdF9mb3JfZW50cnlfdW50aWwgPSBub3cgKyAzMDsKKworCXdoaWxlIChpIDwgZW50cmllc19ucikgeworCQlpZiAoZW50cmllc1tpXS5leHBpcmF0aW9uIDw9IG5vdykgeworCQkJZW50cmllc19uci0tOworCQkJY3JlZGVudGlhbF9jbGVhcigmZW50cmllc1tpXS5pdGVtKTsKKwkJCWlmIChpICE9IGVudHJpZXNfbnIpCisJCQkJbWVtY3B5KCZlbnRyaWVzW2ldLCAmZW50cmllc1tlbnRyaWVzX25yXSwgc2l6ZW9mKCplbnRyaWVzKSk7CisJCQkvKgorCQkJICogU3RpY2sgYXJvdW5kIDMwIHNlY29uZHMgaW4gY2FzZSBhIG5ldyBjcmVkZW50aWFsCisJCQkgKiBzaG93cyB1cCAoZS5nLiwgYmVjYXVzZSB3ZSBqdXN0IHJlbW92ZWQgYSBmYWlsZWQKKwkJCSAqIG9uZSwgYW5kIHdlIHdpbGwgc29vbiBnZXQgdGhlIGNvcnJlY3Qgb25lKS4KKwkJCSAqLworCQkJd2FpdF9mb3JfZW50cnlfdW50aWwgPSBub3cgKyAzMDsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChlbnRyaWVzW2ldLmV4cGlyYXRpb24gPCBuZXh0KQorCQkJCW5leHQgPSBlbnRyaWVzW2ldLmV4cGlyYXRpb247CisJCQlpKys7CisJCX0KKwl9CisKKwlpZiAoIWVudHJpZXNfbnIpIHsKKwkJaWYgKHdhaXRfZm9yX2VudHJ5X3VudGlsIDw9IG5vdykKKwkJCXJldHVybiAwOworCQluZXh0ID0gd2FpdF9mb3JfZW50cnlfdW50aWw7CisJfQorCisJcmV0dXJuIG5leHQgLSBub3c7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9yZXF1ZXN0KEZJTEUgKmZoLCBzdHJ1Y3QgY3JlZGVudGlhbCAqYywKKwkJCXN0cnVjdCBzdHJidWYgKmFjdGlvbiwgaW50ICp0aW1lb3V0KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGl0ZW0gPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwOworCisJc3RyYnVmX2dldGxpbmVfbGYoJml0ZW0sIGZoKTsKKwlpZiAoIXNraXBfcHJlZml4KGl0ZW0uYnVmLCAiYWN0aW9uPSIsICZwKSkKKwkJcmV0dXJuIGVycm9yKCJjbGllbnQgc2VudCBib2d1cyBhY3Rpb24gbGluZTogJXMiLCBpdGVtLmJ1Zik7CisJc3RyYnVmX2FkZHN0cihhY3Rpb24sIHApOworCisJc3RyYnVmX2dldGxpbmVfbGYoJml0ZW0sIGZoKTsKKwlpZiAoIXNraXBfcHJlZml4KGl0ZW0uYnVmLCAidGltZW91dD0iLCAmcCkpCisJCXJldHVybiBlcnJvcigiY2xpZW50IHNlbnQgYm9ndXMgdGltZW91dCBsaW5lOiAlcyIsIGl0ZW0uYnVmKTsKKwkqdGltZW91dCA9IGF0b2kocCk7CisKKwlpZiAoY3JlZGVudGlhbF9yZWFkKGMsIGZoKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2VydmVfb25lX2NsaWVudChGSUxFICppbiwgRklMRSAqb3V0KQoreworCXN0cnVjdCBjcmVkZW50aWFsIGMgPSBDUkVERU5USUFMX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBhY3Rpb24gPSBTVFJCVUZfSU5JVDsKKwlpbnQgdGltZW91dCA9IC0xOworCisJaWYgKHJlYWRfcmVxdWVzdChpbiwgJmMsICZhY3Rpb24sICZ0aW1lb3V0KSA8IDApCisJCS8qIGlnbm9yZSBlcnJvciAqLyA7CisJZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24uYnVmLCAiZ2V0IikpIHsKKwkJc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgKmUgPSBsb29rdXBfY3JlZGVudGlhbCgmYyk7CisJCWlmIChlKSB7CisJCQlmcHJpbnRmKG91dCwgInVzZXJuYW1lPSVzXG4iLCBlLT5pdGVtLnVzZXJuYW1lKTsKKwkJCWZwcmludGYob3V0LCAicGFzc3dvcmQ9JXNcbiIsIGUtPml0ZW0ucGFzc3dvcmQpOworCQl9CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYWN0aW9uLmJ1ZiwgImV4aXQiKSkgeworCQkvKgorCQkgKiBJdCdzIGltcG9ydGFudCB0aGF0IHdlIGNsZWFuIHVwIG91ciBzb2NrZXQgZmlyc3QsIGFuZCB0aGVuCisJCSAqIHNpZ25hbCB0aGUgY2xpZW50IG9ubHkgb25jZSB3ZSBoYXZlIGZpbmlzaGVkIHRoZSBjbGVhbnVwLgorCQkgKiBDYWxsaW5nIGV4aXQoKSBkaXJlY3RseSBkb2VzIHRoaXMsIGJlY2F1c2Ugd2UgY2xlYW4gdXAgaW4KKwkJICogb3VyIGF0ZXhpdCgpIGhhbmRsZXIsIGFuZCB0aGVuIHNpZ25hbCB0aGUgY2xpZW50IHdoZW4gb3VyCisJCSAqIHByb2Nlc3MgYWN0dWFsbHkgZW5kcywgd2hpY2ggY2xvc2VzIHRoZSBzb2NrZXQgYW5kIGdpdmVzCisJCSAqIHRoZW0gRU9GLgorCQkgKi8KKwkJZXhpdCgwKTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24uYnVmLCAiZXJhc2UiKSkKKwkJcmVtb3ZlX2NyZWRlbnRpYWwoJmMpOworCWVsc2UgaWYgKCFzdHJjbXAoYWN0aW9uLmJ1ZiwgInN0b3JlIikpIHsKKwkJaWYgKHRpbWVvdXQgPCAwKQorCQkJd2FybmluZygiY2FjaGUgY2xpZW50IGRpZG4ndCBzcGVjaWZ5IGEgdGltZW91dCIpOworCQllbHNlIGlmICghYy51c2VybmFtZSB8fCAhYy5wYXNzd29yZCkKKwkJCXdhcm5pbmcoImNhY2hlIGNsaWVudCBnYXZlIHVzIGEgcGFydGlhbCBjcmVkZW50aWFsIik7CisJCWVsc2UgeworCQkJcmVtb3ZlX2NyZWRlbnRpYWwoJmMpOworCQkJY2FjaGVfY3JlZGVudGlhbCgmYywgdGltZW91dCk7CisJCX0KKwl9CisJZWxzZQorCQl3YXJuaW5nKCJjYWNoZSBjbGllbnQgc2VudCB1bmtub3duIGFjdGlvbjogJXMiLCBhY3Rpb24uYnVmKTsKKworCWNyZWRlbnRpYWxfY2xlYXIoJmMpOworCXN0cmJ1Zl9yZWxlYXNlKCZhY3Rpb24pOworfQorCitzdGF0aWMgaW50IHNlcnZlX2NhY2hlX2xvb3AoaW50IGZkKQoreworCXN0cnVjdCBwb2xsZmQgcGZkOworCXRpbWVzdGFtcF90IHdha2V1cDsKKworCXdha2V1cCA9IGNoZWNrX2V4cGlyYXRpb25zKCk7CisJaWYgKCF3YWtldXApCisJCXJldHVybiAwOworCisJcGZkLmZkID0gZmQ7CisJcGZkLmV2ZW50cyA9IFBPTExJTjsKKwlpZiAocG9sbCgmcGZkLCAxLCAxMDAwICogd2FrZXVwKSA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVJTlRSKQorCQkJZGllX2Vycm5vKCJwb2xsIGZhaWxlZCIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAocGZkLnJldmVudHMgJiBQT0xMSU4pIHsKKwkJaW50IGNsaWVudCwgY2xpZW50MjsKKwkJRklMRSAqaW4sICpvdXQ7CisKKwkJY2xpZW50ID0gYWNjZXB0KGZkLCBOVUxMLCBOVUxMKTsKKwkJaWYgKGNsaWVudCA8IDApIHsKKwkJCXdhcm5pbmdfZXJybm8oImFjY2VwdCBmYWlsZWQiKTsKKwkJCXJldHVybiAxOworCQl9CisJCWNsaWVudDIgPSBkdXAoY2xpZW50KTsKKwkJaWYgKGNsaWVudDIgPCAwKSB7CisJCQl3YXJuaW5nX2Vycm5vKCJkdXAgZmFpbGVkIik7CisJCQljbG9zZShjbGllbnQpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpbiA9IHhmZG9wZW4oY2xpZW50LCAiciIpOworCQlvdXQgPSB4ZmRvcGVuKGNsaWVudDIsICJ3Iik7CisJCXNlcnZlX29uZV9jbGllbnQoaW4sIG91dCk7CisJCWZjbG9zZShpbik7CisJCWZjbG9zZShvdXQpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc2VydmVfY2FjaGUoY29uc3QgY2hhciAqc29ja2V0X3BhdGgsIGludCBkZWJ1ZykKK3sKKwlpbnQgZmQ7CisKKwlmZCA9IHVuaXhfc3RyZWFtX2xpc3Rlbihzb2NrZXRfcGF0aCk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gYmluZCB0byAnJXMnIiwgc29ja2V0X3BhdGgpOworCisJcHJpbnRmKCJva1xuIik7CisJZmNsb3NlKHN0ZG91dCk7CisJaWYgKCFkZWJ1ZykgeworCQlpZiAoIWZyZW9wZW4oIi9kZXYvbnVsbCIsICJ3Iiwgc3RkZXJyKSkKKwkJCWRpZV9lcnJubygidW5hYmxlIHRvIHBvaW50IHN0ZGVyciB0byAvZGV2L251bGwiKTsKKwl9CisKKwl3aGlsZSAoc2VydmVfY2FjaGVfbG9vcChmZCkpCisJCTsgLyogbm90aGluZyAqLworCisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBwZXJtaXNzaW9uc19hZHZpY2VbXSA9IE5fKAorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIgljaG1vZCAwNzAwICVzIik7CitzdGF0aWMgdm9pZCBpbml0X3NvY2tldF9kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpwYXRoX2NvcHkgPSB4c3RyZHVwKHBhdGgpOworCWNoYXIgKmRpciA9IGRpcm5hbWUocGF0aF9jb3B5KTsKKworCWlmICghc3RhdChkaXIsICZzdCkpIHsKKwkJaWYgKHN0LnN0X21vZGUgJiAwNzcpCisJCQlkaWUoXyhwZXJtaXNzaW9uc19hZHZpY2UpLCBkaXIpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIG11c3QgYmUgc3VyZSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSB3aXRoIHRoZSBjb3JyZWN0IG1vZGUsCisJCSAqIG5vdCBqdXN0IGNobW9kIGl0IGFmdGVyIHRoZSBmYWN0OyBvdGhlcndpc2UsIHRoZXJlIGlzIGEgcmFjZQorCQkgKiBjb25kaXRpb24gaW4gd2hpY2ggc29tZWJvZHkgY2FuIGNoZGlyIHRvIGl0LCBzbGVlcCwgdGhlbiB0cnkgdG8gb3BlbgorCQkgKiBvdXIgcHJvdGVjdGVkIHNvY2tldC4KKwkJICovCisJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGRpcikgPCAwKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAnJXMnIiwgZGlyKTsKKwkJaWYgKG1rZGlyKGRpciwgMDcwMCkgPCAwKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWtkaXIgJyVzJyIsIGRpcik7CisJfQorCisJaWYgKGNoZGlyKGRpcikpCisJCS8qCisJCSAqIFdlIGRvbid0IGFjdHVhbGx5IGNhcmUgd2hhdCBvdXIgY3dkIGlzOyB3ZSBjaGRpciBoZXJlIGp1c3QgdG8KKwkJICogYmUgYSBmcmllbmRseSBkYWVtb24gYW5kIGF2b2lkIHR5aW5nIHVwIG91ciBvcmlnaW5hbCBjd2QuCisJCSAqIElmIHRoaXMgZmFpbHMsIGl0J3MgT0sgdG8ganVzdCBjb250aW51ZSB3aXRob3V0IHRoYXQgYmVuZWZpdC4KKwkJICovCisJCTsKKworCWZyZWUocGF0aF9jb3B5KTsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdGVtcGZpbGUgKnNvY2tldF9maWxlOworCWNvbnN0IGNoYXIgKnNvY2tldF9wYXRoOworCWludCBpZ25vcmVfc2lnaHVwID0gMDsKKwlzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKKwkJImdpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24gW29wdHNdIDxzb2NrZXRfcGF0aD4iLAorCQlOVUxMCisJfTsKKwlpbnQgZGVidWcgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAiZGVidWciLCAmZGVidWcsCisJCQkgTl8oInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnX2dldF9ib29sKCJjcmVkZW50aWFsY2FjaGUuaWdub3Jlc2lnaHVwIiwgJmlnbm9yZV9zaWdodXApOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2UsIDApOworCXNvY2tldF9wYXRoID0gYXJndlswXTsKKworCWlmICghc29ja2V0X3BhdGgpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgoc29ja2V0X3BhdGgpKQorCQlkaWUoInNvY2tldCBkaXJlY3RvcnkgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoIik7CisKKwlpbml0X3NvY2tldF9kaXJlY3Rvcnkoc29ja2V0X3BhdGgpOworCXNvY2tldF9maWxlID0gcmVnaXN0ZXJfdGVtcGZpbGUoc29ja2V0X3BhdGgpOworCisJaWYgKGlnbm9yZV9zaWdodXApCisJCXNpZ25hbChTSUdIVVAsIFNJR19JR04pOworCisJc2VydmVfY2FjaGUoc29ja2V0X3BhdGgsIGRlYnVnKTsKKwlkZWxldGVfdGVtcGZpbGUoJnNvY2tldF9maWxlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC1jYWNoZS5jIGIvY3JlZGVudGlhbC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjY2NjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLWNhY2hlLmMKQEAgLTAsMCArMSwxMzYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1bml4LXNvY2tldC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKKyNkZWZpbmUgRkxBR19TUEFXTiAweDEKKyNkZWZpbmUgRkxBR19SRUxBWSAweDIKKworc3RhdGljIGludCBzZW5kX3JlcXVlc3QoY29uc3QgY2hhciAqc29ja2V0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJaW50IGdvdF9kYXRhID0gMDsKKwlpbnQgZmQgPSB1bml4X3N0cmVhbV9jb25uZWN0KHNvY2tldCk7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgb3V0LT5idWYsIG91dC0+bGVuKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRvIGNhY2hlIGRhZW1vbiIpOworCXNodXRkb3duKGZkLCBTSFVUX1dSKTsKKworCXdoaWxlICgxKSB7CisJCWNoYXIgaW5bMTAyNF07CisJCWludCByOworCisJCXIgPSByZWFkX2luX2Z1bGwoZmQsIGluLCBzaXplb2YoaW4pKTsKKwkJaWYgKHIgPT0gMCB8fCAociA8IDAgJiYgZXJybm8gPT0gRUNPTk5SRVNFVCkpCisJCQlicmVhazsKKwkJaWYgKHIgPCAwKQorCQkJZGllX2Vycm5vKCJyZWFkIGVycm9yIGZyb20gY2FjaGUgZGFlbW9uIik7CisJCXdyaXRlX29yX2RpZSgxLCBpbiwgcik7CisJCWdvdF9kYXRhID0gMTsKKwl9CisJY2xvc2UoZmQpOworCXJldHVybiBnb3RfZGF0YTsKK30KKworc3RhdGljIHZvaWQgc3Bhd25fZGFlbW9uKGNvbnN0IGNoYXIgKnNvY2tldCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBkYWVtb24gPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndltdID0geyBOVUxMLCBOVUxMLCBOVUxMIH07CisJY2hhciBidWZbMTI4XTsKKwlpbnQgcjsKKworCWFyZ3ZbMF0gPSAiZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiI7CisJYXJndlsxXSA9IHNvY2tldDsKKwlkYWVtb24uYXJndiA9IGFyZ3Y7CisJZGFlbW9uLm5vX3N0ZGluID0gMTsKKwlkYWVtb24ub3V0ID0gLTE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmZGFlbW9uKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gc3RhcnQgY2FjaGUgZGFlbW9uIik7CisJciA9IHJlYWRfaW5fZnVsbChkYWVtb24ub3V0LCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAociA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlYWQgcmVzdWx0IGNvZGUgZnJvbSBjYWNoZSBkYWVtb24iKTsKKwlpZiAociAhPSAzIHx8IG1lbWNtcChidWYsICJva1xuIiwgMykpCisJCWRpZSgiY2FjaGUgZGFlbW9uIGRpZCBub3Qgc3RhcnQ6ICUuKnMiLCByLCBidWYpOworCWNsb3NlKGRhZW1vbi5vdXQpOworfQorCitzdGF0aWMgdm9pZCBkb19jYWNoZShjb25zdCBjaGFyICpzb2NrZXQsIGNvbnN0IGNoYXIgKmFjdGlvbiwgaW50IHRpbWVvdXQsCisJCSAgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiYWN0aW9uPSVzXG4iLCBhY3Rpb24pOworCXN0cmJ1Zl9hZGRmKCZidWYsICJ0aW1lb3V0PSVkXG4iLCB0aW1lb3V0KTsKKwlpZiAoZmxhZ3MgJiBGTEFHX1JFTEFZKSB7CisJCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byByZWxheSBjcmVkZW50aWFsIik7CisJfQorCisJaWYgKHNlbmRfcmVxdWVzdChzb2NrZXQsICZidWYpIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGVycm5vICE9IEVDT05OUkVGVVNFRCkKKwkJCWRpZV9lcnJubygidW5hYmxlIHRvIGNvbm5lY3QgdG8gY2FjaGUgZGFlbW9uIik7CisJCWlmIChmbGFncyAmIEZMQUdfU1BBV04pIHsKKwkJCXNwYXduX2RhZW1vbihzb2NrZXQpOworCQkJaWYgKHNlbmRfcmVxdWVzdChzb2NrZXQsICZidWYpIDwgMCkKKwkJCQlkaWVfZXJybm8oInVuYWJsZSB0byBjb25uZWN0IHRvIGNhY2hlIGRhZW1vbiIpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgY2hhciAqZ2V0X3NvY2tldF9wYXRoKHZvaWQpCit7CisJc3RydWN0IHN0YXQgc2I7CisJY2hhciAqb2xkX2RpciwgKnNvY2tldDsKKwlvbGRfZGlyID0gZXhwYW5kX3VzZXJfcGF0aCgifi8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUiLCAwKTsKKwlpZiAob2xkX2RpciAmJiAhc3RhdChvbGRfZGlyLCAmc2IpICYmIFNfSVNESVIoc2Iuc3RfbW9kZSkpCisJCXNvY2tldCA9IHhzdHJmbXQoIiVzL3NvY2tldCIsIG9sZF9kaXIpOworCWVsc2UKKwkJc29ja2V0ID0geGRnX2NhY2hlX2hvbWUoImNyZWRlbnRpYWwvc29ja2V0Iik7CisJZnJlZShvbGRfZGlyKTsKKwlyZXR1cm4gc29ja2V0OworfQorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNoYXIgKnNvY2tldF9wYXRoID0gTlVMTDsKKwlpbnQgdGltZW91dCA9IDkwMDsKKwljb25zdCBjaGFyICpvcDsKKwljb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSA9IHsKKwkJImdpdCBjcmVkZW50aWFsLWNhY2hlIFs8b3B0aW9ucz5dIDxhY3Rpb24+IiwKKwkJTlVMTAorCX07CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9JTlRFR0VSKDAsICJ0aW1lb3V0IiwgJnRpbWVvdXQsCisJCQkgICAgIm51bWJlciBvZiBzZWNvbmRzIHRvIGNhY2hlIGNyZWRlbnRpYWxzIiksCisJCU9QVF9TVFJJTkcoMCwgInNvY2tldCIsICZzb2NrZXRfcGF0aCwgInBhdGgiLAorCQkJICAgInBhdGggb2YgY2FjaGUtZGFlbW9uIHNvY2tldCIpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2UsIDApOworCWlmICghYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlLCBvcHRpb25zKTsKKwlvcCA9IGFyZ3ZbMF07CisKKwlpZiAoIXNvY2tldF9wYXRoKQorCQlzb2NrZXRfcGF0aCA9IGdldF9zb2NrZXRfcGF0aCgpOworCWlmICghc29ja2V0X3BhdGgpCisJCWRpZSgidW5hYmxlIHRvIGZpbmQgYSBzdWl0YWJsZSBzb2NrZXQgcGF0aDsgdXNlIC0tc29ja2V0Iik7CisKKwlpZiAoIXN0cmNtcChvcCwgImV4aXQiKSkKKwkJZG9fY2FjaGUoc29ja2V0X3BhdGgsIG9wLCB0aW1lb3V0LCAwKTsKKwllbHNlIGlmICghc3RyY21wKG9wLCAiZ2V0IikgfHwgIXN0cmNtcChvcCwgImVyYXNlIikpCisJCWRvX2NhY2hlKHNvY2tldF9wYXRoLCBvcCwgdGltZW91dCwgRkxBR19SRUxBWSk7CisJZWxzZSBpZiAoIXN0cmNtcChvcCwgInN0b3JlIikpCisJCWRvX2NhY2hlKHNvY2tldF9wYXRoLCBvcCwgdGltZW91dCwgRkxBR19SRUxBWXxGTEFHX1NQQVdOKTsKKwllbHNlCisJCTsgLyogaWdub3JlIHVua25vd24gb3BlcmF0aW9uICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwtc3RvcmUuYyBiL2NyZWRlbnRpYWwtc3RvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDEwNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvY3JlZGVudGlhbC1zdG9yZS5jCkBAIC0wLDAgKzEsMTk1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgY3JlZGVudGlhbF9sb2NrOworCitzdGF0aWMgaW50IHBhcnNlX2NyZWRlbnRpYWxfZmlsZShjb25zdCBjaGFyICpmbiwKKwkJCQkgIHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCSAgdm9pZCAoKm1hdGNoX2NiKShzdHJ1Y3QgY3JlZGVudGlhbCAqKSwKKwkJCQkgIHZvaWQgKCpvdGhlcl9jYikoc3RydWN0IHN0cmJ1ZiAqKSkKK3sKKwlGSUxFICpmaDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBlbnRyeSA9IENSRURFTlRJQUxfSU5JVDsKKwlpbnQgZm91bmRfY3JlZGVudGlhbCA9IDA7CisKKwlmaCA9IGZvcGVuKGZuLCAiciIpOworCWlmICghZmgpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFQUNDRVMpCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBvcGVuICVzIiwgZm4pOworCQlyZXR1cm4gZm91bmRfY3JlZGVudGlhbDsKKwl9CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmVfbGYoJmxpbmUsIGZoKSAhPSBFT0YpIHsKKwkJY3JlZGVudGlhbF9mcm9tX3VybCgmZW50cnksIGxpbmUuYnVmKTsKKwkJaWYgKGVudHJ5LnVzZXJuYW1lICYmIGVudHJ5LnBhc3N3b3JkICYmCisJCSAgICBjcmVkZW50aWFsX21hdGNoKGMsICZlbnRyeSkpIHsKKwkJCWZvdW5kX2NyZWRlbnRpYWwgPSAxOworCQkJaWYgKG1hdGNoX2NiKSB7CisJCQkJbWF0Y2hfY2IoJmVudHJ5KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChvdGhlcl9jYikKKwkJCW90aGVyX2NiKCZsaW5lKTsKKwl9CisKKwljcmVkZW50aWFsX2NsZWFyKCZlbnRyeSk7CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWZjbG9zZShmaCk7CisJcmV0dXJuIGZvdW5kX2NyZWRlbnRpYWw7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2VudHJ5KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXByaW50ZigidXNlcm5hbWU9JXNcbiIsIGMtPnVzZXJuYW1lKTsKKwlwcmludGYoInBhc3N3b3JkPSVzXG4iLCBjLT5wYXNzd29yZCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCXdyaXRlX29yX2RpZShnZXRfbG9ja19maWxlX2ZkKCZjcmVkZW50aWFsX2xvY2spLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOworfQorCitzdGF0aWMgdm9pZCByZXdyaXRlX2NyZWRlbnRpYWxfZmlsZShjb25zdCBjaGFyICpmbiwgc3RydWN0IGNyZWRlbnRpYWwgKmMsCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmV4dHJhKQoreworCWlmIChob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZjcmVkZW50aWFsX2xvY2ssIGZuLCAwKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIGdldCBjcmVkZW50aWFsIHN0b3JhZ2UgbG9jayIpOworCWlmIChleHRyYSkKKwkJcHJpbnRfbGluZShleHRyYSk7CisJcGFyc2VfY3JlZGVudGlhbF9maWxlKGZuLCBjLCBOVUxMLCBwcmludF9saW5lKTsKKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmY3JlZGVudGlhbF9sb2NrKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIGNyZWRlbnRpYWwgc3RvcmUiKTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfY3JlZGVudGlhbF9maWxlKGNvbnN0IGNoYXIgKmZuLCBzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzOi8vIiwgYy0+cHJvdG9jb2wpOworCXN0cmJ1Zl9hZGRzdHJfdXJsZW5jb2RlKCZidWYsIGMtPnVzZXJuYW1lLCBpc19yZmMzOTg2X3VucmVzZXJ2ZWQpOworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnOicpOworCXN0cmJ1Zl9hZGRzdHJfdXJsZW5jb2RlKCZidWYsIGMtPnBhc3N3b3JkLCBpc19yZmMzOTg2X3VucmVzZXJ2ZWQpOworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnQCcpOworCWlmIChjLT5ob3N0KQorCQlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCBjLT5ob3N0LCBpc19yZmMzOTg2X3VucmVzZXJ2ZWQpOworCWlmIChjLT5wYXRoKSB7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnLycpOworCQlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCBjLT5wYXRoLAorCQkJCQlpc19yZmMzOTg2X3Jlc2VydmVkX29yX3VucmVzZXJ2ZWQpOworCX0KKworCXJld3JpdGVfY3JlZGVudGlhbF9maWxlKGZuLCBjLCAmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfY3JlZGVudGlhbChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZucywgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmZuOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgdGhhdCB3aGF0IHdlIGFyZSBzdG9yaW5nIGlzIGFjdHVhbGx5IHNlbnNpYmxlLgorCSAqIEluIHBhcnRpY3VsYXIsIHdlIGNhbid0IG1ha2UgYSBVUkwgd2l0aG91dCBhIHByb3RvY29sIGZpZWxkLgorCSAqIFdpdGhvdXQgZWl0aGVyIGEgaG9zdCBvciBwYXRobmFtZSAoZGVwZW5kaW5nIG9uIHRoZSBzY2hlbWUpLAorCSAqIHdlIGhhdmUgbm8gcHJpbWFyeSBrZXkuIEFuZCB3aXRob3V0IGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLAorCSAqIHdlIGFyZSBub3QgYWN0dWFsbHkgc3RvcmluZyBhIGNyZWRlbnRpYWwuCisJICovCisJaWYgKCFjLT5wcm90b2NvbCB8fCAhKGMtPmhvc3QgfHwgYy0+cGF0aCkgfHwgIWMtPnVzZXJuYW1lIHx8ICFjLT5wYXNzd29yZCkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShmbiwgZm5zKQorCQlpZiAoIWFjY2Vzcyhmbi0+c3RyaW5nLCBGX09LKSkgeworCQkJc3RvcmVfY3JlZGVudGlhbF9maWxlKGZuLT5zdHJpbmcsIGMpOworCQkJcmV0dXJuOworCQl9CisJLyoKKwkgKiBXcml0ZSBjcmVkZW50aWFsIHRvIHRoZSBmaWxlbmFtZSBzcGVjaWZpZWQgYnkgZm5zLT5pdGVtc1swXSwgdGh1cworCSAqIGNyZWF0aW5nIGl0CisJICovCisJaWYgKGZucy0+bnIpCisJCXN0b3JlX2NyZWRlbnRpYWxfZmlsZShmbnMtPml0ZW1zWzBdLnN0cmluZywgYyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9jcmVkZW50aWFsKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZm5zLCBzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZm47CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIHRvIG1hdGNoCisJICogYWdhaW5zdC4gVGhlIGlucHV0IHdlIGdldCBpcyBhIHJlc3RyaWN0aXZlIHBhdHRlcm4sCisJICogc28gdGVjaG5pY2FsbHkgYSBibGFuayBjcmVkZW50aWFsIG1lYW5zICJlcmFzZSBldmVyeXRoaW5nIi4KKwkgKiBCdXQgaXQgaXMgdG9vIGVhc3kgdG8gYWNjaWRlbnRhbGx5IHNlbmQgdGhpcywgc2luY2UgaXQgaXMgZXF1aXZhbGVudAorCSAqIHRvIGVtcHR5IGlucHV0LiBTbyBleHBsaWNpdGx5IGRpc2FsbG93IGl0LCBhbmQgcmVxdWlyZSB0aGF0IHRoZQorCSAqIHBhdHRlcm4gaGF2ZSBzb21lIGFjdHVhbCBjb250ZW50IHRvIG1hdGNoLgorCSAqLworCWlmICghYy0+cHJvdG9jb2wgJiYgIWMtPmhvc3QgJiYgIWMtPnBhdGggJiYgIWMtPnVzZXJuYW1lKQorCQlyZXR1cm47CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShmbiwgZm5zKQorCQlpZiAoIWFjY2Vzcyhmbi0+c3RyaW5nLCBGX09LKSkKKwkJCXJld3JpdGVfY3JlZGVudGlhbF9maWxlKGZuLT5zdHJpbmcsIGMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBsb29rdXBfY3JlZGVudGlhbChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZucywgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmZuOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShmbiwgZm5zKQorCQlpZiAocGFyc2VfY3JlZGVudGlhbF9maWxlKGZuLT5zdHJpbmcsIGMsIHByaW50X2VudHJ5LCBOVUxMKSkKKwkJCXJldHVybjsgLyogRm91bmQgY3JlZGVudGlhbCAqLworfQorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdID0geworCQkiZ2l0IGNyZWRlbnRpYWwtc3RvcmUgWzxvcHRpb25zPl0gPGFjdGlvbj4iLAorCQlOVUxMCisJfTsKKwljb25zdCBjaGFyICpvcDsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBjID0gQ1JFREVOVElBTF9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBmbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwljaGFyICpmaWxlID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAiZmlsZSIsICZmaWxlLCAicGF0aCIsCisJCQkgICAiZmV0Y2ggYW5kIHN0b3JlIGNyZWRlbnRpYWxzIGluIDxwYXRoPiIpLAorCQlPUFRfRU5EKCkKKwl9OworCisJdW1hc2soMDc3KTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIChjb25zdCBjaGFyICoqKWFyZ3YsIE5VTEwsIG9wdGlvbnMsIHVzYWdlLCAwKTsKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2UsIG9wdGlvbnMpOworCW9wID0gYXJndlswXTsKKworCWlmIChmaWxlKSB7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZm5zLCBmaWxlKTsKKwl9IGVsc2UgeworCQlpZiAoKGZpbGUgPSBleHBhbmRfdXNlcl9wYXRoKCJ+Ly5naXQtY3JlZGVudGlhbHMiLCAwKSkpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoJmZucywgZmlsZSk7CisJCWZpbGUgPSB4ZGdfY29uZmlnX2hvbWUoImNyZWRlbnRpYWxzIik7CisJCWlmIChmaWxlKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKCZmbnMsIGZpbGUpOworCX0KKwlpZiAoIWZucy5ucikKKwkJZGllKCJ1bmFibGUgdG8gc2V0IHVwIGRlZmF1bHQgcGF0aDsgdXNlIC0tZmlsZSIpOworCisJaWYgKGNyZWRlbnRpYWxfcmVhZCgmYywgc3RkaW4pIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBjcmVkZW50aWFsIik7CisKKwlpZiAoIXN0cmNtcChvcCwgImdldCIpKQorCQlsb29rdXBfY3JlZGVudGlhbCgmZm5zLCAmYyk7CisJZWxzZSBpZiAoIXN0cmNtcChvcCwgImVyYXNlIikpCisJCXJlbW92ZV9jcmVkZW50aWFsKCZmbnMsICZjKTsKKwllbHNlIGlmICghc3RyY21wKG9wLCAic3RvcmUiKSkKKwkJc3RvcmVfY3JlZGVudGlhbCgmZm5zLCAmYyk7CisJZWxzZQorCQk7IC8qIElnbm9yZSB1bmtub3duIG9wZXJhdGlvbi4gKi8KKworCXN0cmluZ19saXN0X2NsZWFyKCZmbnMsIDApOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC5jIGIvY3JlZGVudGlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZGZkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLmMKQEAgLTAsMCArMSw0MDkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJ1cmxtYXRjaC5oIgorCit2b2lkIGNyZWRlbnRpYWxfaW5pdChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJYy0+aGVscGVycy5zdHJkdXBfc3RyaW5ncyA9IDE7Cit9CisKK3ZvaWQgY3JlZGVudGlhbF9jbGVhcihzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlmcmVlKGMtPnByb3RvY29sKTsKKwlmcmVlKGMtPmhvc3QpOworCWZyZWUoYy0+cGF0aCk7CisJZnJlZShjLT51c2VybmFtZSk7CisJZnJlZShjLT5wYXNzd29yZCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmMtPmhlbHBlcnMsIDApOworCisJY3JlZGVudGlhbF9pbml0KGMpOworfQorCitpbnQgY3JlZGVudGlhbF9tYXRjaChjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqd2FudCwKKwkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqaGF2ZSkKK3sKKyNkZWZpbmUgQ0hFQ0soeCkgKCF3YW50LT54IHx8IChoYXZlLT54ICYmICFzdHJjbXAod2FudC0+eCwgaGF2ZS0+eCkpKQorCXJldHVybiBDSEVDSyhwcm90b2NvbCkgJiYKKwkgICAgICAgQ0hFQ0soaG9zdCkgJiYKKwkgICAgICAgQ0hFQ0socGF0aCkgJiYKKwkgICAgICAgQ0hFQ0sodXNlcm5hbWUpOworI3VuZGVmIENIRUNLCit9CisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9jb25maWdfY2FsbGJhY2soY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCQkgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjcmVkZW50aWFsICpjID0gZGF0YTsKKwljb25zdCBjaGFyICprZXk7CisKKwlpZiAoIXNraXBfcHJlZml4KHZhciwgImNyZWRlbnRpYWwuIiwgJmtleSkpCisJCXJldHVybiAwOworCisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisKKwlpZiAoIXN0cmNtcChrZXksICJoZWxwZXIiKSkgeworCQlpZiAoKnZhbHVlKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZjLT5oZWxwZXJzLCB2YWx1ZSk7CisJCWVsc2UKKwkJCXN0cmluZ19saXN0X2NsZWFyKCZjLT5oZWxwZXJzLCAwKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAidXNlcm5hbWUiKSkgeworCQlpZiAoIWMtPnVzZXJuYW1lX2Zyb21fcHJvdG8pIHsKKwkJCWZyZWUoYy0+dXNlcm5hbWUpOworCQkJYy0+dXNlcm5hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfQorCX0KKwllbHNlIGlmICghc3RyY21wKGtleSwgInVzZWh0dHBwYXRoIikpCisJCWMtPnVzZV9odHRwX3BhdGggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm90b19pc19odHRwKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIXN0cmNtcChzLCAiaHR0cHMiKSB8fCAhc3RyY21wKHMsICJodHRwIik7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWRlbnRpYWxfZGVzY3JpYmUoc3RydWN0IGNyZWRlbnRpYWwgKmMsIHN0cnVjdCBzdHJidWYgKm91dCk7CitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2Zvcm1hdChzdHJ1Y3QgY3JlZGVudGlhbCAqYywgc3RydWN0IHN0cmJ1ZiAqb3V0KTsKKworc3RhdGljIGludCBzZWxlY3RfYWxsKGNvbnN0IHN0cnVjdCB1cmxtYXRjaF9pdGVtICphLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqYikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9hcHBseV9jb25maWcoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJY2hhciAqbm9ybWFsaXplZF91cmw7CisJc3RydWN0IHVybG1hdGNoX2NvbmZpZyBjb25maWcgPSB7IFNUUklOR19MSVNUX0lOSVRfRFVQIH07CisJc3RydWN0IHN0cmJ1ZiB1cmwgPSBTVFJCVUZfSU5JVDsKKworCWlmIChjLT5jb25maWd1cmVkKQorCQlyZXR1cm47CisKKwljb25maWcuc2VjdGlvbiA9ICJjcmVkZW50aWFsIjsKKwljb25maWcua2V5ID0gTlVMTDsKKwljb25maWcuY29sbGVjdF9mbiA9IGNyZWRlbnRpYWxfY29uZmlnX2NhbGxiYWNrOworCWNvbmZpZy5jYXNjYWRlX2ZuID0gTlVMTDsKKwljb25maWcuc2VsZWN0X2ZuID0gc2VsZWN0X2FsbDsKKwljb25maWcuY2IgPSBjOworCisJY3JlZGVudGlhbF9mb3JtYXQoYywgJnVybCk7CisJbm9ybWFsaXplZF91cmwgPSB1cmxfbm9ybWFsaXplKHVybC5idWYsICZjb25maWcudXJsKTsKKworCWdpdF9jb25maWcodXJsbWF0Y2hfY29uZmlnX2VudHJ5LCAmY29uZmlnKTsKKwlmcmVlKG5vcm1hbGl6ZWRfdXJsKTsKKwlzdHJidWZfcmVsZWFzZSgmdXJsKTsKKworCWMtPmNvbmZpZ3VyZWQgPSAxOworCisJaWYgKCFjLT51c2VfaHR0cF9wYXRoICYmIHByb3RvX2lzX2h0dHAoYy0+cHJvdG9jb2wpKSB7CisJCUZSRUVfQU5EX05VTEwoYy0+cGF0aCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2Rlc2NyaWJlKHN0cnVjdCBjcmVkZW50aWFsICpjLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJaWYgKCFjLT5wcm90b2NvbCkKKwkJcmV0dXJuOworCXN0cmJ1Zl9hZGRmKG91dCwgIiVzOi8vIiwgYy0+cHJvdG9jb2wpOworCWlmIChjLT51c2VybmFtZSAmJiAqYy0+dXNlcm5hbWUpCisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzQCIsIGMtPnVzZXJuYW1lKTsKKwlpZiAoYy0+aG9zdCkKKwkJc3RyYnVmX2FkZHN0cihvdXQsIGMtPmhvc3QpOworCWlmIChjLT5wYXRoKQorCQlzdHJidWZfYWRkZihvdXQsICIvJXMiLCBjLT5wYXRoKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9mb3JtYXQoc3RydWN0IGNyZWRlbnRpYWwgKmMsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpZiAoIWMtPnByb3RvY29sKQorCQlyZXR1cm47CisJc3RyYnVmX2FkZGYob3V0LCAiJXM6Ly8iLCBjLT5wcm90b2NvbCk7CisJaWYgKGMtPnVzZXJuYW1lICYmICpjLT51c2VybmFtZSkgeworCQlzdHJidWZfYWRkX3BlcmNlbnRlbmNvZGUob3V0LCBjLT51c2VybmFtZSk7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICdAJyk7CisJfQorCWlmIChjLT5ob3N0KQorCQlzdHJidWZfYWRkc3RyKG91dCwgYy0+aG9zdCk7CisJaWYgKGMtPnBhdGgpIHsKKwkJc3RyYnVmX2FkZGNoKG91dCwgJy8nKTsKKwkJc3RyYnVmX2FkZF9wZXJjZW50ZW5jb2RlKG91dCwgYy0+cGF0aCk7CisJfQorfQorCitzdGF0aWMgY2hhciAqY3JlZGVudGlhbF9hc2tfb25lKGNvbnN0IGNoYXIgKndoYXQsIHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCWludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2MgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHByb21wdCA9IFNUUkJVRl9JTklUOworCWNoYXIgKnI7CisKKwljcmVkZW50aWFsX2Rlc2NyaWJlKGMsICZkZXNjKTsKKwlpZiAoZGVzYy5sZW4pCisJCXN0cmJ1Zl9hZGRmKCZwcm9tcHQsICIlcyBmb3IgJyVzJzogIiwgd2hhdCwgZGVzYy5idWYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoJnByb21wdCwgIiVzOiAiLCB3aGF0KTsKKworCXIgPSBnaXRfcHJvbXB0KHByb21wdC5idWYsIGZsYWdzKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZkZXNjKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJvbXB0KTsKKwlyZXR1cm4geHN0cmR1cChyKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9nZXRwYXNzKHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWlmICghYy0+dXNlcm5hbWUpCisJCWMtPnVzZXJuYW1lID0gY3JlZGVudGlhbF9hc2tfb25lKCJVc2VybmFtZSIsIGMsCisJCQkJCQkgUFJPTVBUX0FTS1BBU1N8UFJPTVBUX0VDSE8pOworCWlmICghYy0+cGFzc3dvcmQpCisJCWMtPnBhc3N3b3JkID0gY3JlZGVudGlhbF9hc2tfb25lKCJQYXNzd29yZCIsIGMsCisJCQkJCQkgUFJPTVBUX0FTS1BBU1MpOworfQorCitpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICpjLCBGSUxFICpmcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZnApICE9IEVPRikgeworCQljaGFyICprZXkgPSBsaW5lLmJ1ZjsKKwkJY2hhciAqdmFsdWUgPSBzdHJjaHIoa2V5LCAnPScpOworCisJCWlmICghbGluZS5sZW4pCisJCQlicmVhazsKKworCQlpZiAoIXZhbHVlKSB7CisJCQl3YXJuaW5nKCJpbnZhbGlkIGNyZWRlbnRpYWwgbGluZTogJXMiLCBrZXkpOworCQkJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCSp2YWx1ZSsrID0gJ1wwJzsKKworCQlpZiAoIXN0cmNtcChrZXksICJ1c2VybmFtZSIpKSB7CisJCQlmcmVlKGMtPnVzZXJuYW1lKTsKKwkJCWMtPnVzZXJuYW1lID0geHN0cmR1cCh2YWx1ZSk7CisJCQljLT51c2VybmFtZV9mcm9tX3Byb3RvID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhc3N3b3JkIikpIHsKKwkJCWZyZWUoYy0+cGFzc3dvcmQpOworCQkJYy0+cGFzc3dvcmQgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInByb3RvY29sIikpIHsKKwkJCWZyZWUoYy0+cHJvdG9jb2wpOworCQkJYy0+cHJvdG9jb2wgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgImhvc3QiKSkgeworCQkJZnJlZShjLT5ob3N0KTsKKwkJCWMtPmhvc3QgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhdGgiKSkgeworCQkJZnJlZShjLT5wYXRoKTsKKwkJCWMtPnBhdGggPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInVybCIpKSB7CisJCQljcmVkZW50aWFsX2Zyb21fdXJsKGMsIHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInF1aXQiKSkgeworCQkJYy0+cXVpdCA9ICEhZ2l0X2NvbmZpZ19ib29sKCJxdWl0IiwgdmFsdWUpOworCQl9CisJCS8qCisJCSAqIElnbm9yZSBvdGhlciBsaW5lczsgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZXkgbWVhbiwgYnV0CisJCSAqIHRoaXMgZnV0dXJlLXByb29mcyB1cyB3aGVuIGxhdGVyIHZlcnNpb25zIG9mIGdpdCBkbworCQkgKiBsZWFybiBuZXcgbGluZXMsIGFuZCB0aGUgaGVscGVycyBhcmUgdXBkYXRlZCB0byBtYXRjaC4KKwkJICovCisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX3dyaXRlX2l0ZW0oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuOworCWZwcmludGYoZnAsICIlcz0lc1xuIiwga2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQgY3JlZGVudGlhbF93cml0ZShjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqYywgRklMRSAqZnApCit7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKGZwLCAicHJvdG9jb2wiLCBjLT5wcm90b2NvbCk7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKGZwLCAiaG9zdCIsIGMtPmhvc3QpOworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShmcCwgInBhdGgiLCBjLT5wYXRoKTsKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oZnAsICJ1c2VybmFtZSIsIGMtPnVzZXJuYW1lKTsKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oZnAsICJwYXNzd29yZCIsIGMtPnBhc3N3b3JkKTsKK30KKworc3RhdGljIGludCBydW5fY3JlZGVudGlhbF9oZWxwZXIoc3RydWN0IGNyZWRlbnRpYWwgKmMsCisJCQkJIGNvbnN0IGNoYXIgKmNtZCwKKwkJCQkgaW50IHdhbnRfb3V0cHV0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGhlbHBlciA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7IE5VTEwsIE5VTEwgfTsKKwlGSUxFICpmcDsKKworCWFyZ3ZbMF0gPSBjbWQ7CisJaGVscGVyLmFyZ3YgPSBhcmd2OworCWhlbHBlci51c2Vfc2hlbGwgPSAxOworCWhlbHBlci5pbiA9IC0xOworCWlmICh3YW50X291dHB1dCkKKwkJaGVscGVyLm91dCA9IC0xOworCWVsc2UKKwkJaGVscGVyLm5vX3N0ZG91dCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmaGVscGVyKSA8IDApCisJCXJldHVybiAtMTsKKworCWZwID0geGZkb3BlbihoZWxwZXIuaW4sICJ3Iik7CisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKwljcmVkZW50aWFsX3dyaXRlKGMsIGZwKTsKKwlmY2xvc2UoZnApOworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCWlmICh3YW50X291dHB1dCkgeworCQlpbnQgcjsKKwkJZnAgPSB4ZmRvcGVuKGhlbHBlci5vdXQsICJyIik7CisJCXIgPSBjcmVkZW50aWFsX3JlYWQoYywgZnApOworCQlmY2xvc2UoZnApOworCQlpZiAociA8IDApIHsKKwkJCWZpbmlzaF9jb21tYW5kKCZoZWxwZXIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGZpbmlzaF9jb21tYW5kKCZoZWxwZXIpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9kbyhzdHJ1Y3QgY3JlZGVudGlhbCAqYywgY29uc3QgY2hhciAqaGVscGVyLAorCQkJIGNvbnN0IGNoYXIgKm9wZXJhdGlvbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNtZCA9IFNUUkJVRl9JTklUOworCWludCByOworCisJaWYgKGhlbHBlclswXSA9PSAnIScpCisJCXN0cmJ1Zl9hZGRzdHIoJmNtZCwgaGVscGVyICsgMSk7CisJZWxzZSBpZiAoaXNfYWJzb2x1dGVfcGF0aChoZWxwZXIpKQorCQlzdHJidWZfYWRkc3RyKCZjbWQsIGhlbHBlcik7CisJZWxzZQorCQlzdHJidWZfYWRkZigmY21kLCAiZ2l0IGNyZWRlbnRpYWwtJXMiLCBoZWxwZXIpOworCisJc3RyYnVmX2FkZGYoJmNtZCwgIiAlcyIsIG9wZXJhdGlvbik7CisJciA9IHJ1bl9jcmVkZW50aWFsX2hlbHBlcihjLCBjbWQuYnVmLCAhc3RyY21wKG9wZXJhdGlvbiwgImdldCIpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworCXJldHVybiByOworfQorCit2b2lkIGNyZWRlbnRpYWxfZmlsbChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpbnQgaTsKKworCWlmIChjLT51c2VybmFtZSAmJiBjLT5wYXNzd29yZCkKKwkJcmV0dXJuOworCisJY3JlZGVudGlhbF9hcHBseV9jb25maWcoYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+aGVscGVycy5ucjsgaSsrKSB7CisJCWNyZWRlbnRpYWxfZG8oYywgYy0+aGVscGVycy5pdGVtc1tpXS5zdHJpbmcsICJnZXQiKTsKKwkJaWYgKGMtPnVzZXJuYW1lICYmIGMtPnBhc3N3b3JkKQorCQkJcmV0dXJuOworCQlpZiAoYy0+cXVpdCkKKwkJCWRpZSgiY3JlZGVudGlhbCBoZWxwZXIgJyVzJyB0b2xkIHVzIHRvIHF1aXQiLAorCQkJICAgIGMtPmhlbHBlcnMuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwljcmVkZW50aWFsX2dldHBhc3MoYyk7CisJaWYgKCFjLT51c2VybmFtZSAmJiAhYy0+cGFzc3dvcmQpCisJCWRpZSgidW5hYmxlIHRvIGdldCBwYXNzd29yZCBmcm9tIHVzZXIiKTsKK30KKwordm9pZCBjcmVkZW50aWFsX2FwcHJvdmUoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaW50IGk7CisKKwlpZiAoYy0+YXBwcm92ZWQpCisJCXJldHVybjsKKwlpZiAoIWMtPnVzZXJuYW1lIHx8ICFjLT5wYXNzd29yZCkKKwkJcmV0dXJuOworCisJY3JlZGVudGlhbF9hcHBseV9jb25maWcoYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+aGVscGVycy5ucjsgaSsrKQorCQljcmVkZW50aWFsX2RvKGMsIGMtPmhlbHBlcnMuaXRlbXNbaV0uc3RyaW5nLCAic3RvcmUiKTsKKwljLT5hcHByb3ZlZCA9IDE7Cit9CisKK3ZvaWQgY3JlZGVudGlhbF9yZWplY3Qoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaW50IGk7CisKKwljcmVkZW50aWFsX2FwcGx5X2NvbmZpZyhjKTsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5oZWxwZXJzLm5yOyBpKyspCisJCWNyZWRlbnRpYWxfZG8oYywgYy0+aGVscGVycy5pdGVtc1tpXS5zdHJpbmcsICJlcmFzZSIpOworCisJRlJFRV9BTkRfTlVMTChjLT51c2VybmFtZSk7CisJRlJFRV9BTkRfTlVMTChjLT5wYXNzd29yZCk7CisJYy0+YXBwcm92ZWQgPSAwOworfQorCit2b2lkIGNyZWRlbnRpYWxfZnJvbV91cmwoc3RydWN0IGNyZWRlbnRpYWwgKmMsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwljb25zdCBjaGFyICphdCwgKmNvbG9uLCAqY3AsICpzbGFzaCwgKmhvc3QsICpwcm90b19lbmQ7CisKKwljcmVkZW50aWFsX2NsZWFyKGMpOworCisJLyoKKwkgKiBNYXRjaCBvbmUgb2Y6CisJICogICAoMSkgcHJvdG86Ly88aG9zdD4vLi4uCisJICogICAoMikgcHJvdG86Ly88dXNlcj5APGhvc3Q+Ly4uLgorCSAqICAgKDMpIHByb3RvOi8vPHVzZXI+OjxwYXNzPkA8aG9zdD4vLi4uCisJICovCisJcHJvdG9fZW5kID0gc3Ryc3RyKHVybCwgIjovLyIpOworCWlmICghcHJvdG9fZW5kKQorCQlyZXR1cm47CisJY3AgPSBwcm90b19lbmQgKyAzOworCWF0ID0gc3RyY2hyKGNwLCAnQCcpOworCWNvbG9uID0gc3RyY2hyKGNwLCAnOicpOworCXNsYXNoID0gc3RyY2hybnVsKGNwLCAnLycpOworCisJaWYgKCFhdCB8fCBzbGFzaCA8PSBhdCkgeworCQkvKiBDYXNlICgxKSAqLworCQlob3N0ID0gY3A7CisJfQorCWVsc2UgaWYgKCFjb2xvbiB8fCBhdCA8PSBjb2xvbikgeworCQkvKiBDYXNlICgyKSAqLworCQljLT51c2VybmFtZSA9IHVybF9kZWNvZGVfbWVtKGNwLCBhdCAtIGNwKTsKKwkJaWYgKGMtPnVzZXJuYW1lICYmICpjLT51c2VybmFtZSkKKwkJCWMtPnVzZXJuYW1lX2Zyb21fcHJvdG8gPSAxOworCQlob3N0ID0gYXQgKyAxOworCX0gZWxzZSB7CisJCS8qIENhc2UgKDMpICovCisJCWMtPnVzZXJuYW1lID0gdXJsX2RlY29kZV9tZW0oY3AsIGNvbG9uIC0gY3ApOworCQlpZiAoYy0+dXNlcm5hbWUgJiYgKmMtPnVzZXJuYW1lKQorCQkJYy0+dXNlcm5hbWVfZnJvbV9wcm90byA9IDE7CisJCWMtPnBhc3N3b3JkID0gdXJsX2RlY29kZV9tZW0oY29sb24gKyAxLCBhdCAtIChjb2xvbiArIDEpKTsKKwkJaG9zdCA9IGF0ICsgMTsKKwl9CisKKwlpZiAocHJvdG9fZW5kIC0gdXJsID4gMCkKKwkJYy0+cHJvdG9jb2wgPSB4bWVtZHVweih1cmwsIHByb3RvX2VuZCAtIHVybCk7CisJaWYgKHNsYXNoIC0gaG9zdCA+IDApCisJCWMtPmhvc3QgPSB1cmxfZGVjb2RlX21lbShob3N0LCBzbGFzaCAtIGhvc3QpOworCS8qIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHBhdGggKi8KKwl3aGlsZSAoKnNsYXNoID09ICcvJykKKwkJc2xhc2grKzsKKwlpZiAoKnNsYXNoKSB7CisJCWNoYXIgKnA7CisJCWMtPnBhdGggPSB1cmxfZGVjb2RlKHNsYXNoKTsKKwkJcCA9IGMtPnBhdGggKyBzdHJsZW4oYy0+cGF0aCkgLSAxOworCQl3aGlsZSAocCA+IGMtPnBhdGggJiYgKnAgPT0gJy8nKQorCQkJKnAtLSA9ICdcMCc7CisJfQorfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC5oIGIvY3JlZGVudGlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYzc4MTUKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLmgKQEAgLTAsMCArMSwxODIgQEAKKyNpZm5kZWYgQ1JFREVOVElBTF9ICisjZGVmaW5lIENSRURFTlRJQUxfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyoqCisgKiBUaGUgY3JlZGVudGlhbHMgQVBJIHByb3ZpZGVzIGFuIGFic3RyYWN0ZWQgd2F5IG9mIGdhdGhlcmluZyB1c2VybmFtZSBhbmQKKyAqIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHVzZXIuCisgKgorICogVHlwaWNhbCBzZXR1cAorICogLS0tLS0tLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLQorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCBHaXQgY29kZSAoQykgICAgICAgICAgfC0tLSB0byBzZXJ2ZXIgcmVxdWlyaW5nIC0tLT4KKyAqIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIGF1dGhlbnRpY2F0aW9uCisgKiB8Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi58CisgKiB8IEMgY3JlZGVudGlhbCBBUEkgICAgICB8LS0tIHByb21wdCAtLS0+IFVzZXIKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIAleICAgICAgfAorICogCXwgcGlwZSB8CisgKiAJfCAgICAgIHYKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgR2l0IGNyZWRlbnRpYWwgaGVscGVyIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBHaXQgY29kZSAodHlwaWNhbGx5IGEgcmVtb3RlLWhlbHBlcikgd2lsbCBjYWxsIHRoZSBDIEFQSSB0byBvYnRhaW4KKyAqIGNyZWRlbnRpYWwgZGF0YSBsaWtlIGEgbG9naW4vcGFzc3dvcmQgcGFpciAoY3JlZGVudGlhbF9maWxsKS4gVGhlCisgKiBBUEkgd2lsbCBpdHNlbGYgY2FsbCBhIHJlbW90ZSBoZWxwZXIgKGUuZy4gImdpdCBjcmVkZW50aWFsLWNhY2hlIiBvcgorICogImdpdCBjcmVkZW50aWFsLXN0b3JlIikgdGhhdCBtYXkgcmV0cmlldmUgY3JlZGVudGlhbCBkYXRhIGZyb20gYQorICogc3RvcmUuIElmIHRoZSBjcmVkZW50aWFsIGhlbHBlciBjYW5ub3QgZmluZCB0aGUgaW5mb3JtYXRpb24sIHRoZSBDIEFQSQorICogd2lsbCBwcm9tcHQgdGhlIHVzZXIuIFRoZW4sIHRoZSBjYWxsZXIgb2YgdGhlIEFQSSB0YWtlcyBjYXJlIG9mCisgKiBjb250YWN0aW5nIHRoZSBzZXJ2ZXIsIGFuZCBkb2VzIHRoZSBhY3R1YWwgYXV0aGVudGljYXRpb24uCisgKgorICogQyBBUEkKKyAqIC0tLS0tCisgKgorICogVGhlIGNyZWRlbnRpYWwgQyBBUEkgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IEdpdCBjb2RlIHdoaWNoIG5lZWRzIHRvCisgKiBhY3F1aXJlIG9yIHN0b3JlIGEgY3JlZGVudGlhbC4gSXQgaXMgY2VudGVyZWQgYXJvdW5kIGFuIG9iamVjdAorICogcmVwcmVzZW50aW5nIGEgc2luZ2xlIGNyZWRlbnRpYWwgYW5kIHByb3ZpZGVzIHRocmVlIGJhc2ljIG9wZXJhdGlvbnM6CisgKiBmaWxsIChhY3F1aXJlIGNyZWRlbnRpYWxzIGJ5IGNhbGxpbmcgaGVscGVycyBhbmQvb3IgcHJvbXB0aW5nIHRoZSB1c2VyKSwKKyAqIGFwcHJvdmUgKG1hcmsgYSBjcmVkZW50aWFsIGFzIHN1Y2Nlc3NmdWxseSB1c2VkIHNvIHRoYXQgaXQgY2FuIGJlIHN0b3JlZAorICogZm9yIGxhdGVyIHVzZSksIGFuZCByZWplY3QgKG1hcmsgYSBjcmVkZW50aWFsIGFzIHVuc3VjY2Vzc2Z1bCBzbyB0aGF0IGl0CisgKiBjYW4gYmUgZXJhc2VkIGZyb20gYW55IHBlcnNpc3RlbnQgc3RvcmFnZSkuCisgKgorICogRXhhbXBsZQorICogfn5+fn5+fgorICoKKyAqIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyB0aGUgZnVuY3Rpb25zIG9mIHRoZSBjcmVkZW50aWFsIEFQSSBjb3VsZCBiZQorICogdXNlZCB0byBsb2dpbiB0byBhIGZpY3RpdGlvdXMgImZvbyIgc2VydmljZSBvbiBhIHJlbW90ZSBob3N0OgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBpbnQgZm9vX2xvZ2luKHN0cnVjdCBmb29fY29ubmVjdGlvbiAqZikKKyAqIHsKKyAqIAlpbnQgc3RhdHVzOworICogCS8vIENyZWF0ZSBhIGNyZWRlbnRpYWwgd2l0aCBzb21lIGNvbnRleHQ7IHdlIGRvbid0IHlldCBrbm93IHRoZQorICogCS8vIHVzZXJuYW1lIG9yIHBhc3N3b3JkLgorICoKKyAqIHN0cnVjdCBjcmVkZW50aWFsIGMgPSBDUkVERU5USUFMX0lOSVQ7CisgKiBjLnByb3RvY29sID0geHN0cmR1cCgiZm9vIik7CisgKiBjLmhvc3QgPSB4c3RyZHVwKGYtPmhvc3RuYW1lKTsKKyAqCisgKiAvLyBGaWxsIGluIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIGJ5IGNvbnRhY3RpbmcKKyAqIC8vIGhlbHBlcnMgYW5kL29yIGFza2luZyB0aGUgdXNlci4gVGhlIGZ1bmN0aW9uIHdpbGwgZGllIGlmIGl0CisgKiAvLyBmYWlscy4KKyAqIGNyZWRlbnRpYWxfZmlsbCgmYyk7CisgKgorICogLy8gT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiBUcnkgdG8gdXNlIGl0LgorICoKKyAqIHN0YXR1cyA9IHNlbmRfZm9vX2xvZ2luKGYsIGMudXNlcm5hbWUsIGMucGFzc3dvcmQpOworICogc3dpdGNoIChzdGF0dXMpIHsKKyAqIGNhc2UgRk9PX09LOgorICogLy8gSXQgd29ya2VkLiBTdG9yZSB0aGUgY3JlZGVudGlhbCBmb3IgbGF0ZXIgdXNlLgorICogY3JlZGVudGlhbF9hY2NlcHQoJmMpOworICogYnJlYWs7CisgKiBjYXNlIEZPT19CQURfTE9HSU46CisgKiAvLyBFcmFzZSB0aGUgY3JlZGVudGlhbCBmcm9tIHN0b3JhZ2Ugc28gd2UgZG9uJ3QgdHJ5IGl0IGFnYWluLgorICogY3JlZGVudGlhbF9yZWplY3QoJmMpOworICogYnJlYWs7CisgKiBkZWZhdWx0OgorICogLy8gU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZC4gV2UgZG9uJ3Qga25vdyBpZiB0aGUKKyAqIC8vIGNyZWRlbnRpYWwgaXMgZ29vZCBvciBiYWQsIHNvIHJlcG9ydCBub3RoaW5nIHRvIHRoZQorICogLy8gY3JlZGVudGlhbCBzdWJzeXN0ZW0uCisgKiB9CisgKgorICogLy8gRnJlZSBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgKiBjcmVkZW50aWFsX2NsZWFyKCZjKTsKKyAqCisgKiByZXR1cm4gc3RhdHVzOworICogfQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisKKy8qKgorICogVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyBhIHNpbmdsZSB1c2VybmFtZS9wYXNzd29yZCBjb21iaW5hdGlvbgorICogYWxvbmcgd2l0aCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0LiBBbGwgc3RyaW5nIGZpZWxkcyBzaG91bGQgYmUKKyAqIGhlYXAtYWxsb2NhdGVkIChvciBOVUxMIGlmIHRoZXkgYXJlIG5vdCBrbm93biBvciBub3QgYXBwbGljYWJsZSkuCisgKiBUaGUgbWVhbmluZyBvZiB0aGUgaW5kaXZpZHVhbCBjb250ZXh0IGZpZWxkcyBpcyB0aGUgc2FtZSBhcworICogdGhlaXIgY291bnRlcnBhcnRzIGluIHRoZSBoZWxwZXIgcHJvdG9jb2wuCisgKgorICogVGhpcyBzdHJ1Y3Qgc2hvdWxkIGFsd2F5cyBiZSBpbml0aWFsaXplZCB3aXRoIGBDUkVERU5USUFMX0lOSVRgIG9yCisgKiBgY3JlZGVudGlhbF9pbml0YC4KKyAqLworc3RydWN0IGNyZWRlbnRpYWwgeworCisJLyoqCisJICogQSBgc3RyaW5nX2xpc3RgIG9mIGhlbHBlcnMuIEVhY2ggc3RyaW5nIHNwZWNpZmllcyBhbiBleHRlcm5hbAorCSAqIGhlbHBlciB3aGljaCB3aWxsIGJlIHJ1biwgaW4gb3JkZXIsIHRvIGVpdGhlciBhY3F1aXJlIG9yIHN0b3JlCisJICogY3JlZGVudGlhbHMuIFRoaXMgbGlzdCBpcyBmaWxsZWQtaW4gYnkgdGhlIEFQSSBmdW5jdGlvbnMKKwkgKiBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYmVmb3JlCisJICogY29uc3VsdGluZyBoZWxwZXJzLCBzbyB0aGVyZSB1c3VhbGx5IGlzIG5vIG5lZWQgZm9yIGEgY2FsbGVyIHRvCisJICogbW9kaWZ5IHRoZSBoZWxwZXJzIGZpZWxkIGF0IGFsbC4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaGVscGVyczsKKworCXVuc2lnbmVkIGFwcHJvdmVkOjEsCisJCSBjb25maWd1cmVkOjEsCisJCSBxdWl0OjEsCisJCSB1c2VfaHR0cF9wYXRoOjEsCisJCSB1c2VybmFtZV9mcm9tX3Byb3RvOjE7CisKKwljaGFyICp1c2VybmFtZTsKKwljaGFyICpwYXNzd29yZDsKKwljaGFyICpwcm90b2NvbDsKKwljaGFyICpob3N0OworCWNoYXIgKnBhdGg7Cit9OworCisjZGVmaW5lIENSRURFTlRJQUxfSU5JVCB7IFNUUklOR19MSVNUX0lOSVRfRFVQIH0KKworLyogSW5pdGlhbGl6ZSBhIGNyZWRlbnRpYWwgc3RydWN0dXJlLCBzZXR0aW5nIGFsbCBmaWVsZHMgdG8gZW1wdHkuICovCit2b2lkIGNyZWRlbnRpYWxfaW5pdChzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKworLyoqCisgKiBGcmVlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjcmVkZW50aWFsIHN0cnVjdHVyZSwgcmV0dXJuaW5nCisgKiBpdCB0byBhIHByaXN0aW5lIGluaXRpYWxpemVkIHN0YXRlLgorICovCit2b2lkIGNyZWRlbnRpYWxfY2xlYXIoc3RydWN0IGNyZWRlbnRpYWwgKik7CisKKy8qKgorICogSW5zdHJ1Y3QgdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRvIGZpbGwgdGhlIHVzZXJuYW1lIGFuZAorICogcGFzc3dvcmQgZmllbGRzIG9mIHRoZSBwYXNzZWQgY3JlZGVudGlhbCBzdHJ1Y3QgYnkgZmlyc3QKKyAqIGNvbnN1bHRpbmcgaGVscGVycywgdGhlbiBhc2tpbmcgdGhlIHVzZXIuIEFmdGVyIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMsIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIG9mIHRoZSBjcmVkZW50aWFsIGFyZQorICogZ3VhcmFudGVlZCB0byBiZSBub24tTlVMTC4gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgZnVuY3Rpb24gd2lsbAorICogZGllKCkuCisgKi8KK3ZvaWQgY3JlZGVudGlhbF9maWxsKHN0cnVjdCBjcmVkZW50aWFsICopOworCisvKioKKyAqIEluZm9ybSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdGhhdCB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMKKyAqIHdlcmUgc3VjY2Vzc2Z1bGx5IHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLiAgVGhpcyB3aWxsIGNhdXNlIHRoZQorICogY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8gbm90aWZ5IGFueSBoZWxwZXJzIG9mIHRoZSBhcHByb3ZhbCwgc28KKyAqIHRoYXQgdGhleSBtYXkgc3RvcmUgdGhlIHJlc3VsdCB0byBiZSB1c2VkIGFnYWluLiAgQW55IGVycm9ycworICogZnJvbSBoZWxwZXJzIGFyZSBpZ25vcmVkLgorICovCit2b2lkIGNyZWRlbnRpYWxfYXBwcm92ZShzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKKworLyoqCisgKiBJbmZvcm0gdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRoYXQgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzCisgKiBoYXZlIGJlZW4gcmVqZWN0ZWQuIFRoaXMgd2lsbCBjYXVzZSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8KKyAqIG5vdGlmeSBhbnkgaGVscGVycyBvZiB0aGUgcmVqZWN0aW9uICh3aGljaCBhbGxvd3MgdGhlbSwgZm9yCisgKiBleGFtcGxlLCB0byBwdXJnZSB0aGUgaW52YWxpZCBjcmVkZW50aWFscyBmcm9tIHN0b3JhZ2UpLiBJdAorICogd2lsbCBhbHNvIGZyZWUoKSB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUKKyAqIGNyZWRlbnRpYWwgYW5kIHNldCB0aGVtIHRvIE5VTEwgKHJlYWR5aW5nIHRoZSBjcmVkZW50aWFsIGZvcgorICogYW5vdGhlciBjYWxsIHRvIGBjcmVkZW50aWFsX2ZpbGxgKS4gQW55IGVycm9ycyBmcm9tIGhlbHBlcnMgYXJlCisgKiBpZ25vcmVkLgorICovCit2b2lkIGNyZWRlbnRpYWxfcmVqZWN0KHN0cnVjdCBjcmVkZW50aWFsICopOworCitpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICosIEZJTEUgKik7Cit2b2lkIGNyZWRlbnRpYWxfd3JpdGUoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKiwgRklMRSAqKTsKKworLyogUGFyc2UgYSBVUkwgaW50byBicm9rZW4tZG93biBjcmVkZW50aWFsIGZpZWxkcy4gKi8KK3ZvaWQgY3JlZGVudGlhbF9mcm9tX3VybChzdHJ1Y3QgY3JlZGVudGlhbCAqLCBjb25zdCBjaGFyICp1cmwpOworCitpbnQgY3JlZGVudGlhbF9tYXRjaChjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqaGF2ZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqd2FudCk7CisKKyNlbmRpZiAvKiBDUkVERU5USUFMX0ggKi8KZGlmZiAtLWdpdCBhL2NzdW0tZmlsZS5jIGIvY3N1bS1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjZTM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NzdW0tZmlsZS5jCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogY3N1bS1maWxlLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTGludXMgVG9ydmFsZHMKKyAqCisgKiBTaW1wbGUgZmlsZSB3cml0ZSBpbmZyYXN0cnVjdHVyZSBmb3Igd3JpdGluZyBTSEExLXN1bW1lZAorICogZmlsZXMuIFVzZWZ1bCB3aGVuIHlvdSB3cml0ZSBhIGZpbGUgdGhhdCB5b3Ugd2FudCB0byBiZQorICogYWJsZSB0byB2ZXJpZnkgaGFzbid0IGJlZW4gbWVzc2VkIHdpdGggYWZ0ZXJ3YXJkcy4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKworc3RhdGljIHZvaWQgZmx1c2goc3RydWN0IGhhc2hmaWxlICpmLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlpZiAoMCA8PSBmLT5jaGVja19mZCAmJiBjb3VudCkgIHsKKwkJdW5zaWduZWQgY2hhciBjaGVja19idWZmZXJbODE5Ml07CisJCXNzaXplX3QgcmV0ID0gcmVhZF9pbl9mdWxsKGYtPmNoZWNrX2ZkLCBjaGVja19idWZmZXIsIGNvdW50KTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWRpZV9lcnJubygiJXM6IHNoYTEgZmlsZSByZWFkIGVycm9yIiwgZi0+bmFtZSk7CisJCWlmIChyZXQgIT0gY291bnQpCisJCQlkaWUoIiVzOiBzaGExIGZpbGUgdHJ1bmNhdGVkIiwgZi0+bmFtZSk7CisJCWlmIChtZW1jbXAoYnVmLCBjaGVja19idWZmZXIsIGNvdW50KSkKKwkJCWRpZSgic2hhMSBmaWxlICclcycgdmFsaWRhdGlvbiBlcnJvciIsIGYtPm5hbWUpOworCX0KKworCWZvciAoOzspIHsKKwkJaW50IHJldCA9IHh3cml0ZShmLT5mZCwgYnVmLCBjb3VudCk7CisJCWlmIChyZXQgPiAwKSB7CisJCQlmLT50b3RhbCArPSByZXQ7CisJCQlkaXNwbGF5X3Rocm91Z2hwdXQoZi0+dHAsIGYtPnRvdGFsKTsKKwkJCWJ1ZiA9IChjaGFyICopIGJ1ZiArIHJldDsKKwkJCWNvdW50IC09IHJldDsKKwkJCWlmIChjb3VudCkKKwkJCQljb250aW51ZTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIXJldCkKKwkJCWRpZSgic2hhMSBmaWxlICclcycgd3JpdGUgZXJyb3IuIE91dCBvZiBkaXNrc3BhY2UiLCBmLT5uYW1lKTsKKwkJZGllX2Vycm5vKCJzaGExIGZpbGUgJyVzJyB3cml0ZSBlcnJvciIsIGYtPm5hbWUpOworCX0KK30KKwordm9pZCBoYXNoZmx1c2goc3RydWN0IGhhc2hmaWxlICpmKQoreworCXVuc2lnbmVkIG9mZnNldCA9IGYtPm9mZnNldDsKKworCWlmIChvZmZzZXQpIHsKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZmLT5jdHgsIGYtPmJ1ZmZlciwgb2Zmc2V0KTsKKwkJZmx1c2goZiwgZi0+YnVmZmVyLCBvZmZzZXQpOworCQlmLT5vZmZzZXQgPSAwOworCX0KK30KKworaW50IGZpbmFsaXplX2hhc2hmaWxlKHN0cnVjdCBoYXNoZmlsZSAqZiwgdW5zaWduZWQgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGZkOworCisJaGFzaGZsdXNoKGYpOworCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKGYtPmJ1ZmZlciwgJmYtPmN0eCk7CisJaWYgKHJlc3VsdCkKKwkJaGFzaGNweShyZXN1bHQsIGYtPmJ1ZmZlcik7CisJaWYgKGZsYWdzICYgQ1NVTV9IQVNIX0lOX1NUUkVBTSkKKwkJZmx1c2goZiwgZi0+YnVmZmVyLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJaWYgKGZsYWdzICYgQ1NVTV9GU1lOQykKKwkJZnN5bmNfb3JfZGllKGYtPmZkLCBmLT5uYW1lKTsKKwlpZiAoZmxhZ3MgJiBDU1VNX0NMT1NFKSB7CisJCWlmIChjbG9zZShmLT5mZCkpCisJCQlkaWVfZXJybm8oIiVzOiBzaGExIGZpbGUgZXJyb3Igb24gY2xvc2UiLCBmLT5uYW1lKTsKKwkJZmQgPSAwOworCX0gZWxzZQorCQlmZCA9IGYtPmZkOworCWlmICgwIDw9IGYtPmNoZWNrX2ZkKSB7CisJCWNoYXIgZGlzY2FyZDsKKwkJaW50IGNudCA9IHJlYWRfaW5fZnVsbChmLT5jaGVja19mZCwgJmRpc2NhcmQsIDEpOworCQlpZiAoY250IDwgMCkKKwkJCWRpZV9lcnJubygiJXM6IGVycm9yIHdoZW4gcmVhZGluZyB0aGUgdGFpbCBvZiBzaGExIGZpbGUiLAorCQkJCSAgZi0+bmFtZSk7CisJCWlmIChjbnQpCisJCQlkaWUoIiVzOiBzaGExIGZpbGUgaGFzIHRyYWlsaW5nIGdhcmJhZ2UiLCBmLT5uYW1lKTsKKwkJaWYgKGNsb3NlKGYtPmNoZWNrX2ZkKSkKKwkJCWRpZV9lcnJubygiJXM6IHNoYTEgZmlsZSBlcnJvciBvbiBjbG9zZSIsIGYtPm5hbWUpOworCX0KKwlmcmVlKGYpOworCXJldHVybiBmZDsKK30KKwordm9pZCBoYXNod3JpdGUoc3RydWN0IGhhc2hmaWxlICpmLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJdW5zaWduZWQgb2Zmc2V0ID0gZi0+b2Zmc2V0OworCQl1bnNpZ25lZCBsZWZ0ID0gc2l6ZW9mKGYtPmJ1ZmZlcikgLSBvZmZzZXQ7CisJCXVuc2lnbmVkIG5yID0gY291bnQgPiBsZWZ0ID8gbGVmdCA6IGNvdW50OworCQljb25zdCB2b2lkICpkYXRhOworCisJCWlmIChmLT5kb19jcmMpCisJCQlmLT5jcmMzMiA9IGNyYzMyKGYtPmNyYzMyLCBidWYsIG5yKTsKKworCQlpZiAobnIgPT0gc2l6ZW9mKGYtPmJ1ZmZlcikpIHsKKwkJCS8qIHByb2Nlc3MgZnVsbCBidWZmZXIgZGlyZWN0bHkgd2l0aG91dCBjb3B5ICovCisJCQlkYXRhID0gYnVmOworCQl9IGVsc2UgeworCQkJbWVtY3B5KGYtPmJ1ZmZlciArIG9mZnNldCwgYnVmLCBucik7CisJCQlkYXRhID0gZi0+YnVmZmVyOworCQl9CisKKwkJY291bnQgLT0gbnI7CisJCW9mZnNldCArPSBucjsKKwkJYnVmID0gKGNoYXIgKikgYnVmICsgbnI7CisJCWxlZnQgLT0gbnI7CisJCWlmICghbGVmdCkgeworCQkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZmLT5jdHgsIGRhdGEsIG9mZnNldCk7CisJCQlmbHVzaChmLCBkYXRhLCBvZmZzZXQpOworCQkJb2Zmc2V0ID0gMDsKKwkJfQorCQlmLT5vZmZzZXQgPSBvZmZzZXQ7CisJfQorfQorCitzdHJ1Y3QgaGFzaGZpbGUgKmhhc2hmZChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGhhc2hmZF90aHJvdWdocHV0KGZkLCBuYW1lLCBOVUxMKTsKK30KKworc3RydWN0IGhhc2hmaWxlICpoYXNoZmRfY2hlY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgc2luaywgY2hlY2s7CisJc3RydWN0IGhhc2hmaWxlICpmOworCisJc2luayA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fV1JPTkxZKTsKKwlpZiAoc2luayA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG9wZW4gL2Rldi9udWxsIik7CisJY2hlY2sgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoY2hlY2sgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBvcGVuICclcyciLCBuYW1lKTsKKwlmID0gaGFzaGZkKHNpbmssIG5hbWUpOworCWYtPmNoZWNrX2ZkID0gY2hlY2s7CisJcmV0dXJuIGY7Cit9CisKK3N0cnVjdCBoYXNoZmlsZSAqaGFzaGZkX3Rocm91Z2hwdXQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcHJvZ3Jlc3MgKnRwKQoreworCXN0cnVjdCBoYXNoZmlsZSAqZiA9IHhtYWxsb2Moc2l6ZW9mKCpmKSk7CisJZi0+ZmQgPSBmZDsKKwlmLT5jaGVja19mZCA9IC0xOworCWYtPm9mZnNldCA9IDA7CisJZi0+dG90YWwgPSAwOworCWYtPnRwID0gdHA7CisJZi0+bmFtZSA9IG5hbWU7CisJZi0+ZG9fY3JjID0gMDsKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZmLT5jdHgpOworCXJldHVybiBmOworfQorCit2b2lkIGhhc2hmaWxlX2NoZWNrcG9pbnQoc3RydWN0IGhhc2hmaWxlICpmLCBzdHJ1Y3QgaGFzaGZpbGVfY2hlY2twb2ludCAqY2hlY2twb2ludCkKK3sKKwloYXNoZmx1c2goZik7CisJY2hlY2twb2ludC0+b2Zmc2V0ID0gZi0+dG90YWw7CisJY2hlY2twb2ludC0+Y3R4ID0gZi0+Y3R4OworfQorCitpbnQgaGFzaGZpbGVfdHJ1bmNhdGUoc3RydWN0IGhhc2hmaWxlICpmLCBzdHJ1Y3QgaGFzaGZpbGVfY2hlY2twb2ludCAqY2hlY2twb2ludCkKK3sKKwlvZmZfdCBvZmZzZXQgPSBjaGVja3BvaW50LT5vZmZzZXQ7CisKKwlpZiAoZnRydW5jYXRlKGYtPmZkLCBvZmZzZXQpIHx8CisJICAgIGxzZWVrKGYtPmZkLCBvZmZzZXQsIFNFRUtfU0VUKSAhPSBvZmZzZXQpCisJCXJldHVybiAtMTsKKwlmLT50b3RhbCA9IG9mZnNldDsKKwlmLT5jdHggPSBjaGVja3BvaW50LT5jdHg7CisJZi0+b2Zmc2V0ID0gMDsgLyogaGFzaGZsdXNoKCkgd2FzIGNhbGxlZCBpbiBjaGVja3BvaW50ICovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3JjMzJfYmVnaW4oc3RydWN0IGhhc2hmaWxlICpmKQoreworCWYtPmNyYzMyID0gY3JjMzIoMCwgTlVMTCwgMCk7CisJZi0+ZG9fY3JjID0gMTsKK30KKwordWludDMyX3QgY3JjMzJfZW5kKHN0cnVjdCBoYXNoZmlsZSAqZikKK3sKKwlmLT5kb19jcmMgPSAwOworCXJldHVybiBmLT5jcmMzMjsKK30KZGlmZiAtLWdpdCBhL2NzdW0tZmlsZS5oIGIvY3N1bS1maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljYmQzMQotLS0gL2Rldi9udWxsCisrKyBiL2NzdW0tZmlsZS5oCkBAIC0wLDAgKzEsNjUgQEAKKyNpZm5kZWYgQ1NVTV9GSUxFX0gKKyNkZWZpbmUgQ1NVTV9GSUxFX0gKKworI2luY2x1ZGUgImhhc2guaCIKKworc3RydWN0IHByb2dyZXNzOworCisvKiBBIFNIQTEtcHJvdGVjdGVkIGZpbGUgKi8KK3N0cnVjdCBoYXNoZmlsZSB7CisJaW50IGZkOworCWludCBjaGVja19mZDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWdpdF9oYXNoX2N0eCBjdHg7CisJb2ZmX3QgdG90YWw7CisJc3RydWN0IHByb2dyZXNzICp0cDsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkb19jcmM7CisJdWludDMyX3QgY3JjMzI7CisJdW5zaWduZWQgY2hhciBidWZmZXJbODE5Ml07Cit9OworCisvKiBDaGVja3BvaW50ICovCitzdHJ1Y3QgaGFzaGZpbGVfY2hlY2twb2ludCB7CisJb2ZmX3Qgb2Zmc2V0OworCWdpdF9oYXNoX2N0eCBjdHg7Cit9OworCit2b2lkIGhhc2hmaWxlX2NoZWNrcG9pbnQoc3RydWN0IGhhc2hmaWxlICosIHN0cnVjdCBoYXNoZmlsZV9jaGVja3BvaW50ICopOworaW50IGhhc2hmaWxlX3RydW5jYXRlKHN0cnVjdCBoYXNoZmlsZSAqLCBzdHJ1Y3QgaGFzaGZpbGVfY2hlY2twb2ludCAqKTsKKworLyogZmluYWxpemVfaGFzaGZpbGUgZmxhZ3MgKi8KKyNkZWZpbmUgQ1NVTV9DTE9TRQkJMQorI2RlZmluZSBDU1VNX0ZTWU5DCQkyCisjZGVmaW5lIENTVU1fSEFTSF9JTl9TVFJFQU0JNAorCitzdHJ1Y3QgaGFzaGZpbGUgKmhhc2hmZChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpOworc3RydWN0IGhhc2hmaWxlICpoYXNoZmRfY2hlY2soY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgaGFzaGZpbGUgKmhhc2hmZF90aHJvdWdocHV0KGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2dyZXNzICp0cCk7CitpbnQgZmluYWxpemVfaGFzaGZpbGUoc3RydWN0IGhhc2hmaWxlICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKK3ZvaWQgaGFzaHdyaXRlKHN0cnVjdCBoYXNoZmlsZSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGludCk7Cit2b2lkIGhhc2hmbHVzaChzdHJ1Y3QgaGFzaGZpbGUgKmYpOwordm9pZCBjcmMzMl9iZWdpbihzdHJ1Y3QgaGFzaGZpbGUgKik7Cit1aW50MzJfdCBjcmMzMl9lbmQoc3RydWN0IGhhc2hmaWxlICopOworCisvKgorICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGZlZCB0byB0aGUgaGFzaGZpbGUgc28gZmFyIChpbmNsdWRpbmcgb25lcworICogdGhhdCBoYXZlIG5vdCBiZWVuIHdyaXR0ZW4gb3V0IHRvIHRoZSBkZXNjcmlwdG9yIHlldCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgb2ZmX3QgaGFzaGZpbGVfdG90YWwoc3RydWN0IGhhc2hmaWxlICpmKQoreworCXJldHVybiBmLT50b3RhbCArIGYtPm9mZnNldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhhc2h3cml0ZV91OChzdHJ1Y3QgaGFzaGZpbGUgKmYsIHVpbnQ4X3QgZGF0YSkKK3sKKwloYXNod3JpdGUoZiwgJmRhdGEsIHNpemVvZihkYXRhKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYXNod3JpdGVfYmUzMihzdHJ1Y3QgaGFzaGZpbGUgKmYsIHVpbnQzMl90IGRhdGEpCit7CisJZGF0YSA9IGh0b25sKGRhdGEpOworCWhhc2h3cml0ZShmLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jdHlwZS5jIGIvY3R5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzAyMjVjCi0tLSAvZGV2L251bGwKKysrIGIvY3R5cGUuYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogU2FuZSBsb2NhbGUtaW5kZXBlbmRlbnQsIEFTQ0lJIGN0eXBlLgorICoKKyAqIE5vIHN1cnByaXNlcywgYW5kIHdvcmtzIHdpdGggc2lnbmVkIGFuZCB1bnNpZ25lZCBjaGFycy4KKyAqLworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorCitlbnVtIHsKKwlTID0gR0lUX1NQQUNFLAorCUEgPSBHSVRfQUxQSEEsCisJRCA9IEdJVF9ESUdJVCwKKwlHID0gR0lUX0dMT0JfU1BFQ0lBTCwJLyogKiwgPywgWywgXFwgKi8KKwlSID0gR0lUX1JFR0VYX1NQRUNJQUwsCS8qICQsICgsICksICssIC4sIF4sIHssIHwgKi8KKwlQID0gR0lUX1BBVEhTUEVDX01BR0lDLCAvKiBvdGhlciBub24tYWxudW0sIGV4Y2VwdCBmb3IgXSBhbmQgfSAqLworCVggPSBHSVRfQ05UUkwsCisJVSA9IEdJVF9QVU5DVCwKKwlaID0gR0lUX0NOVFJMIHwgR0lUX1NQQUNFCit9OworCitjb25zdCB1bnNpZ25lZCBjaGFyIHNhbmVfY3R5cGVbMjU2XSA9IHsKKwlYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBaLCBaLCBYLCBYLCBaLCBYLCBYLAkJLyogICAwLi4gMTUgKi8KKwlYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLCBYLAkJLyogIDE2Li4gMzEgKi8KKwlTLCBQLCBQLCBQLCBSLCBQLCBQLCBQLCBSLCBSLCBHLCBSLCBQLCBQLCBSLCBQLAkJLyogIDMyLi4gNDcgKi8KKwlELCBELCBELCBELCBELCBELCBELCBELCBELCBELCBQLCBQLCBQLCBQLCBQLCBHLAkJLyogIDQ4Li4gNjMgKi8KKwlQLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLAkJLyogIDY0Li4gNzkgKi8KKwlBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBHLCBHLCBVLCBSLCBQLAkJLyogIDgwLi4gOTUgKi8KKwlQLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLAkJLyogIDk2Li4xMTEgKi8KKwlBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBBLCBSLCBSLCBVLCBQLCBYLAkJLyogMTEyLi4xMjcgKi8KKwkvKiBOb3RoaW5nIGluIHRoZSAxMjguLiByYW5nZSAqLworfTsKKworLyogRm9yIGNhc2UtaW5zZW5zaXRpdmUga3dzZXQgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgdG9sb3dlcl90cmFuc190YmxbMjU2XSA9IHsKKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisJMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKwkweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAorCSAnICcsICAnIScsICAnIicsICAnIycsICAnJCcsICAnJScsICAnJicsIDB4MjcsCisJICcoJywgICcpJywgICcqJywgICcrJywgICcsJywgICctJywgICcuJywgICcvJywKKwkgJzAnLCAgJzEnLCAgJzInLCAgJzMnLCAgJzQnLCAgJzUnLCAgJzYnLCAgJzcnLAorCSAnOCcsICAnOScsICAnOicsICAnOycsICAnPCcsICAnPScsICAnPicsICAnPycsCisJICdAJywgICdhJywgICdiJywgICdjJywgICdkJywgICdlJywgICdmJywgICdnJywKKwkgJ2gnLCAgJ2knLCAgJ2onLCAgJ2snLCAgJ2wnLCAgJ20nLCAgJ24nLCAgJ28nLAorCSAncCcsICAncScsICAncicsICAncycsICAndCcsICAndScsICAndicsICAndycsCisJICd4JywgICd5JywgICd6JywgICdbJywgMHg1YywgICddJywgICdeJywgICdfJywKKwkgJ2AnLCAgJ2EnLCAgJ2InLCAgJ2MnLCAgJ2QnLCAgJ2UnLCAgJ2YnLCAgJ2cnLAorCSAnaCcsICAnaScsICAnaicsICAnaycsICAnbCcsICAnbScsICAnbicsICAnbycsCisJICdwJywgICdxJywgICdyJywgICdzJywgICd0JywgICd1JywgICd2JywgICd3JywKKwkgJ3gnLCAgJ3knLCAgJ3onLCAgJ3snLCAgJ3wnLCAgJ30nLCAgJ34nLCAweDdmLAorCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCisJMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywKKwkweGE4LCAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLAorCTB4YjAsIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsCisJMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKKwkweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAorCTB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCisJMHhkMCwgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywKKwkweGQ4LCAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLAorCTB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsCisJMHhlOCwgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwgMHhlZSwgMHhlZiwKKwkweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAorCTB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmYsCit9OwpkaWZmIC0tZ2l0IGEvZGFlbW9uLmMgYi9kYWVtb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDY2OWVkCi0tLSAvZGV2L251bGwKKysrIGIvZGFlbW9uLmMKQEAgLTAsMCArMSwxNDg1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworI2lmZGVmIE5PX0lOSVRHUk9VUFMKKyNkZWZpbmUgaW5pdGdyb3Vwcyh4LCB5KSAoMCkgLyogbm90aGluZyAqLworI2VuZGlmCisKK3N0YXRpYyBlbnVtIGxvZ19kZXN0aW5hdGlvbiB7CisJTE9HX0RFU1RJTkFUSU9OX1VOU0VUID0gLTEsCisJTE9HX0RFU1RJTkFUSU9OX05PTkUgPSAwLAorCUxPR19ERVNUSU5BVElPTl9TVERFUlIgPSAxLAorCUxPR19ERVNUSU5BVElPTl9TWVNMT0cgPSAyLAorfSBsb2dfZGVzdGluYXRpb24gPSBMT0dfREVTVElOQVRJT05fVU5TRVQ7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IHJldXNlYWRkcjsKK3N0YXRpYyBpbnQgaW5mb3JtYXRpdmVfZXJyb3JzOworCitzdGF0aWMgY29uc3QgY2hhciBkYWVtb25fdXNhZ2VbXSA9CisiZ2l0IGRhZW1vbiBbLS12ZXJib3NlXSBbLS1zeXNsb2ddIFstLWV4cG9ydC1hbGxdXG4iCisiICAgICAgICAgICBbLS10aW1lb3V0PTxuPl0gWy0taW5pdC10aW1lb3V0PTxuPl0gWy0tbWF4LWNvbm5lY3Rpb25zPTxuPl1cbiIKKyIgICAgICAgICAgIFstLXN0cmljdC1wYXRoc10gWy0tYmFzZS1wYXRoPTxwYXRoPl0gWy0tYmFzZS1wYXRoLXJlbGF4ZWRdXG4iCisiICAgICAgICAgICBbLS11c2VyLXBhdGggfCAtLXVzZXItcGF0aD08cGF0aD5dXG4iCisiICAgICAgICAgICBbLS1pbnRlcnBvbGF0ZWQtcGF0aD08cGF0aD5dXG4iCisiICAgICAgICAgICBbLS1yZXVzZWFkZHJdIFstLXBpZC1maWxlPTxmaWxlPl1cbiIKKyIgICAgICAgICAgIFstLShlbmFibGV8ZGlzYWJsZXxhbGxvdy1vdmVycmlkZXxmb3JiaWQtb3ZlcnJpZGUpPTxzZXJ2aWNlPl1cbiIKKyIgICAgICAgICAgIFstLWFjY2Vzcy1ob29rPTxwYXRoPl1cbiIKKyIgICAgICAgICAgIFstLWluZXRkIHwgWy0tbGlzdGVuPTxob3N0X29yX2lwYWRkcj5dIFstLXBvcnQ9PG4+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgICBbLS1kZXRhY2hdIFstLXVzZXI9PHVzZXI+IFstLWdyb3VwPTxncm91cD5dXVxuIgorIiAgICAgICAgICAgWy0tbG9nLWRlc3RpbmF0aW9uPShzdGRlcnJ8c3lzbG9nfG5vbmUpXVxuIgorIiAgICAgICAgICAgWzxkaXJlY3Rvcnk+Li4uXSI7CisKKy8qIExpc3Qgb2YgYWNjZXB0YWJsZSBwYXRobmFtZSBwcmVmaXhlcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKipva19wYXRoczsKK3N0YXRpYyBpbnQgc3RyaWN0X3BhdGhzOworCisvKiBJZiB0aGlzIGlzIHNldCwgZ2l0LWRhZW1vbi1leHBvcnQtb2sgaXMgbm90IHJlcXVpcmVkICovCitzdGF0aWMgaW50IGV4cG9ydF9hbGxfdHJlZXM7CisKKy8qIFRha2UgYWxsIHBhdGhzIHJlbGF0aXZlIHRvIHRoaXMgb25lIGlmIG5vbi1OVUxMICovCitzdGF0aWMgY29uc3QgY2hhciAqYmFzZV9wYXRoOworc3RhdGljIGNvbnN0IGNoYXIgKmludGVycG9sYXRlZF9wYXRoOworc3RhdGljIGludCBiYXNlX3BhdGhfcmVsYXhlZDsKKworLyogSWYgZGVmaW5lZCwgfnVzZXIgbm90YXRpb24gaXMgYWxsb3dlZCBhbmQgdGhlIHN0cmluZyBpcyBpbnNlcnRlZAorICogYWZ0ZXIgfnVzZXIvLiAgRS5nLiBhIHJlcXVlc3QgdG8gZ2l0Oi8vaG9zdC9+YWxpY2UvZnJvdHogd291bGQKKyAqIGdvIHRvIC9ob21lL2FsaWNlL3B1Yl9naXQvZnJvdHogd2l0aCAtLXVzZXItcGF0aD1wdWJfZ2l0LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqdXNlcl9wYXRoOworCisvKiBUaW1lb3V0LCBhbmQgaW5pdGlhbCB0aW1lb3V0ICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRpbWVvdXQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGluaXRfdGltZW91dDsKKworc3RydWN0IGhvc3RpbmZvIHsKKwlzdHJ1Y3Qgc3RyYnVmIGhvc3RuYW1lOworCXN0cnVjdCBzdHJidWYgY2Fub25faG9zdG5hbWU7CisJc3RydWN0IHN0cmJ1ZiBpcF9hZGRyZXNzOworCXN0cnVjdCBzdHJidWYgdGNwX3BvcnQ7CisJdW5zaWduZWQgaW50IGhvc3RuYW1lX2xvb2t1cF9kb25lOjE7CisJdW5zaWduZWQgaW50IHNhd19leHRlbmRlZF9hcmdzOjE7Cit9OworCitzdGF0aWMgdm9pZCBsb29rdXBfaG9zdG5hbWUoc3RydWN0IGhvc3RpbmZvICpoaSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfY2Fub25faG9zdG5hbWUoc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwlsb29rdXBfaG9zdG5hbWUoaGkpOworCXJldHVybiBoaS0+Y2Fub25faG9zdG5hbWUuYnVmOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2lwX2FkZHJlc3Moc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwlsb29rdXBfaG9zdG5hbWUoaGkpOworCXJldHVybiBoaS0+aXBfYWRkcmVzcy5idWY7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ3JlcG9ydChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJc3dpdGNoIChsb2dfZGVzdGluYXRpb24pIHsKKwljYXNlIExPR19ERVNUSU5BVElPTl9TWVNMT0c6IHsKKwkJY2hhciBidWZbMTAyNF07CisJCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBlcnIsIHBhcmFtcyk7CisJCXN5c2xvZyhwcmlvcml0eSwgIiVzIiwgYnVmKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgTE9HX0RFU1RJTkFUSU9OX1NUREVSUjoKKwkJLyoKKwkJICogU2luY2Ugc3RkZXJyIGlzIHNldCB0byBidWZmZXJlZCBtb2RlLCB0aGUKKwkJICogbG9nZ2luZyBvZiBkaWZmZXJlbnQgcHJvY2Vzc2VzIHdpbGwgbm90IG92ZXJsYXAKKwkJICogdW5sZXNzIHRoZXkgb3ZlcmZsb3cgdGhlIChyYXRoZXIgYmlnKSBidWZmZXJzLgorCQkgKi8KKwkJZnByaW50ZihzdGRlcnIsICJbJSJQUkl1TUFYIl0gIiwgKHVpbnRtYXhfdClnZXRwaWQoKSk7CisJCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBwYXJhbXMpOworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmZmx1c2goc3RkZXJyKTsKKwkJYnJlYWs7CisJY2FzZSBMT0dfREVTVElOQVRJT05fTk9ORToKKwkJYnJlYWs7CisJY2FzZSBMT0dfREVTVElOQVRJT05fVU5TRVQ6CisJCUJVRygibG9nIGRlc3RpbmF0aW9uIG5vdCBpbml0aWFsaXplZCBjb3JyZWN0bHkiKTsKKwl9Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCBsb2dlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJbG9ncmVwb3J0KExPR19FUlIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3N0YXRpYyB2b2lkIGxvZ2luZm8oY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWxvZ3JlcG9ydChMT0dfSU5GTywgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitzdGF0aWMgdm9pZCBOT1JFVFVSTiBkYWVtb25fZGllKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJbG9ncmVwb3J0KExPR19FUlIsIGVyciwgcGFyYW1zKTsKKwlleGl0KDEpOworfQorCitzdHJ1Y3QgZXhwYW5kX3BhdGhfY29udGV4dCB7CisJY29uc3QgY2hhciAqZGlyZWN0b3J5OworCXN0cnVjdCBob3N0aW5mbyAqaG9zdGluZm87Cit9OworCitzdGF0aWMgc2l6ZV90IGV4cGFuZF9wYXRoKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwgdm9pZCAqY3R4KQoreworCXN0cnVjdCBleHBhbmRfcGF0aF9jb250ZXh0ICpjb250ZXh0ID0gY3R4OworCXN0cnVjdCBob3N0aW5mbyAqaGkgPSBjb250ZXh0LT5ob3N0aW5mbzsKKworCXN3aXRjaCAocGxhY2Vob2xkZXJbMF0pIHsKKwljYXNlICdIJzoKKwkJc3RyYnVmX2FkZGJ1ZihzYiwgJmhpLT5ob3N0bmFtZSk7CisJCXJldHVybiAxOworCWNhc2UgJ0MnOgorCQlpZiAocGxhY2Vob2xkZXJbMV0gPT0gJ0gnKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBnZXRfY2Fub25faG9zdG5hbWUoaGkpKTsKKwkJCXJldHVybiAyOworCQl9CisJCWJyZWFrOworCWNhc2UgJ0knOgorCQlpZiAocGxhY2Vob2xkZXJbMV0gPT0gJ1AnKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBnZXRfaXBfYWRkcmVzcyhoaSkpOworCQkJcmV0dXJuIDI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAnUCc6CisJCXN0cmJ1Zl9hZGRidWYoc2IsICZoaS0+dGNwX3BvcnQpOworCQlyZXR1cm4gMTsKKwljYXNlICdEJzoKKwkJc3RyYnVmX2FkZHN0cihzYiwgY29udGV4dC0+ZGlyZWN0b3J5KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9vayhjb25zdCBjaGFyICpkaXJlY3RvcnksIHN0cnVjdCBob3N0aW5mbyAqaGkpCit7CisJc3RhdGljIGNoYXIgcnBhdGhbUEFUSF9NQVhdOworCXN0YXRpYyBjaGFyIGludGVycF9wYXRoW1BBVEhfTUFYXTsKKwlzaXplX3QgcmxlbjsKKwljb25zdCBjaGFyICpwYXRoOworCWNvbnN0IGNoYXIgKmRpcjsKKworCWRpciA9IGRpcmVjdG9yeTsKKworCWlmIChkYWVtb25fYXZvaWRfYWxpYXMoZGlyKSkgeworCQlsb2dlcnJvcigiJyVzJzogYWxpYXNlZCIsIGRpcik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICgqZGlyID09ICd+JykgeworCQlpZiAoIXVzZXJfcGF0aCkgeworCQkJbG9nZXJyb3IoIiclcyc6IFVzZXItcGF0aCBub3QgYWxsb3dlZCIsIGRpcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpZiAoKnVzZXJfcGF0aCkgeworCQkJLyogR290IGVpdGhlciAifmFsaWNlIiBvciAifmFsaWNlL2ZvbyI7CisJCQkgKiByZXdyaXRlIHRoZW0gdG8gIn5hbGljZS8lcyIgb3IKKwkJCSAqICJ+YWxpY2UvJXMvZm9vIi4KKwkJCSAqLworCQkJaW50IG5hbWxlbiwgcmVzdGxlbiA9IHN0cmxlbihkaXIpOworCQkJY29uc3QgY2hhciAqc2xhc2ggPSBzdHJjaHIoZGlyLCAnLycpOworCQkJaWYgKCFzbGFzaCkKKwkJCQlzbGFzaCA9IGRpciArIHJlc3RsZW47CisJCQluYW1sZW4gPSBzbGFzaCAtIGRpcjsKKwkJCXJlc3RsZW4gLT0gbmFtbGVuOworCQkJbG9naW5mbygidXNlcnBhdGggPCVzPiwgcmVxdWVzdCA8JXM+LCBuYW1sZW4gJWQsIHJlc3RsZW4gJWQsIHNsYXNoIDwlcz4iLCB1c2VyX3BhdGgsIGRpciwgbmFtbGVuLCByZXN0bGVuLCBzbGFzaCk7CisJCQlybGVuID0gc25wcmludGYocnBhdGgsIHNpemVvZihycGF0aCksICIlLipzLyVzJS4qcyIsCisJCQkJCW5hbWxlbiwgZGlyLCB1c2VyX3BhdGgsIHJlc3RsZW4sIHNsYXNoKTsKKwkJCWlmIChybGVuID49IHNpemVvZihycGF0aCkpIHsKKwkJCQlsb2dlcnJvcigidXNlci1wYXRoIHRvbyBsYXJnZTogJXMiLCBycGF0aCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlkaXIgPSBycGF0aDsKKwkJfQorCX0KKwllbHNlIGlmIChpbnRlcnBvbGF0ZWRfcGF0aCAmJiBoaS0+c2F3X2V4dGVuZGVkX2FyZ3MpIHsKKwkJc3RydWN0IHN0cmJ1ZiBleHBhbmRlZF9wYXRoID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBleHBhbmRfcGF0aF9jb250ZXh0IGNvbnRleHQ7CisKKwkJY29udGV4dC5kaXJlY3RvcnkgPSBkaXJlY3Rvcnk7CisJCWNvbnRleHQuaG9zdGluZm8gPSBoaTsKKworCQlpZiAoKmRpciAhPSAnLycpIHsKKwkJCS8qIEFsbG93IG9ubHkgYWJzb2x1dGUgKi8KKwkJCWxvZ2Vycm9yKCInJXMnOiBOb24tYWJzb2x1dGUgcGF0aCBkZW5pZWQgKGludGVycG9sYXRlZC1wYXRoIGFjdGl2ZSkiLCBkaXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlzdHJidWZfZXhwYW5kKCZleHBhbmRlZF9wYXRoLCBpbnRlcnBvbGF0ZWRfcGF0aCwKKwkJCSAgICAgIGV4cGFuZF9wYXRoLCAmY29udGV4dCk7CisKKwkJcmxlbiA9IHN0cmxjcHkoaW50ZXJwX3BhdGgsIGV4cGFuZGVkX3BhdGguYnVmLAorCQkJICAgICAgIHNpemVvZihpbnRlcnBfcGF0aCkpOworCQlpZiAocmxlbiA+PSBzaXplb2YoaW50ZXJwX3BhdGgpKSB7CisJCQlsb2dlcnJvcigiaW50ZXJwb2xhdGVkIHBhdGggdG9vIGxhcmdlOiAlcyIsCisJCQkJIGludGVycF9wYXRoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJmV4cGFuZGVkX3BhdGgpOworCQlsb2dpbmZvKCJJbnRlcnBvbGF0ZWQgZGlyICclcyciLCBpbnRlcnBfcGF0aCk7CisKKwkJZGlyID0gaW50ZXJwX3BhdGg7CisJfQorCWVsc2UgaWYgKGJhc2VfcGF0aCkgeworCQlpZiAoKmRpciAhPSAnLycpIHsKKwkJCS8qIEFsbG93IG9ubHkgYWJzb2x1dGUgKi8KKwkJCWxvZ2Vycm9yKCInJXMnOiBOb24tYWJzb2x1dGUgcGF0aCBkZW5pZWQgKGJhc2UtcGF0aCBhY3RpdmUpIiwgZGlyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXJsZW4gPSBzbnByaW50ZihycGF0aCwgc2l6ZW9mKHJwYXRoKSwgIiVzJXMiLCBiYXNlX3BhdGgsIGRpcik7CisJCWlmIChybGVuID49IHNpemVvZihycGF0aCkpIHsKKwkJCWxvZ2Vycm9yKCJiYXNlLXBhdGggdG9vIGxhcmdlOiAlcyIsIHJwYXRoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWRpciA9IHJwYXRoOworCX0KKworCXBhdGggPSBlbnRlcl9yZXBvKGRpciwgc3RyaWN0X3BhdGhzKTsKKwlpZiAoIXBhdGggJiYgYmFzZV9wYXRoICYmIGJhc2VfcGF0aF9yZWxheGVkKSB7CisJCS8qCisJCSAqIGlmIHdlIGZhaWwgYW5kIGJhc2VfcGF0aF9yZWxheGVkIGlzIGVuYWJsZWQsIHRyeSB3aXRob3V0CisJCSAqIHByZWZpeGluZyB0aGUgYmFzZSBwYXRoCisJCSAqLworCQlkaXIgPSBkaXJlY3Rvcnk7CisJCXBhdGggPSBlbnRlcl9yZXBvKGRpciwgc3RyaWN0X3BhdGhzKTsKKwl9CisKKwlpZiAoIXBhdGgpIHsKKwkJbG9nZXJyb3IoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBkaXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIG9rX3BhdGhzICYmICpva19wYXRocyApIHsKKwkJY29uc3QgY2hhciAqKnBwOworCQlpbnQgcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKKworCQkvKiBUaGUgdmFsaWRhdGlvbiBpcyBkb25lIG9uIHRoZSBwYXRocyBhZnRlciBlbnRlcl9yZXBvCisJCSAqIGFwcGVuZHMgb3B0aW9uYWwgey5naXQsLmdpdC8uZ2l0fSBhbmQgZnJpZW5kcywgYnV0CisJCSAqIGl0IGRvZXMgbm90IHVzZSBnZXRjd2QoKS4gIFNvIGlmIHlvdXIgL3B1YiBpcworCQkgKiBhIHN5bWxpbmsgdG8gL21udC9wdWIsIHlvdSBjYW4gd2hpdGVsaXN0IC9wdWIgYW5kCisJCSAqIGRvIG5vdCBoYXZlIHRvIHNheSAvbW50L3B1Yi4KKwkJICogRG8gbm90IHNheSAvcHViLy4KKwkJICovCisJCWZvciAoIHBwID0gb2tfcGF0aHMgOyAqcHAgOyBwcCsrICkgeworCQkJaW50IGxlbiA9IHN0cmxlbigqcHApOworCQkJaWYgKGxlbiA8PSBwYXRobGVuICYmCisJCQkgICAgIW1lbWNtcCgqcHAsIHBhdGgsIGxlbikgJiYKKwkJCSAgICAocGF0aFtsZW5dID09ICdcMCcgfHwKKwkJCSAgICAgKCFzdHJpY3RfcGF0aHMgJiYgcGF0aFtsZW5dID09ICcvJykpKQorCQkJCXJldHVybiBwYXRoOworCQl9CisJfQorCWVsc2UgeworCQkvKiBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSAqLworCQlpZiAoIXN0cmljdF9wYXRocykKKwkJCXJldHVybiBwYXRoOworCX0KKworCWxvZ2Vycm9yKCInJXMnOiBub3QgaW4gd2hpdGVsaXN0IiwgcGF0aCk7CisJcmV0dXJuIE5VTEw7CQkvKiBGYWxsdGhyb3VnaC4gRGVueSBieSBkZWZhdWx0ICovCit9CisKK3R5cGVkZWYgaW50ICgqZGFlbW9uX3NlcnZpY2VfZm4pKGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICplbnYpOworc3RydWN0IGRhZW1vbl9zZXJ2aWNlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmNvbmZpZ19uYW1lOworCWRhZW1vbl9zZXJ2aWNlX2ZuIGZuOworCWludCBlbmFibGVkOworCWludCBvdmVycmlkYWJsZTsKK307CisKK3N0YXRpYyBpbnQgZGFlbW9uX2Vycm9yKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqbXNnKQoreworCWlmICghaW5mb3JtYXRpdmVfZXJyb3JzKQorCQltc2cgPSAiYWNjZXNzIGRlbmllZCBvciByZXBvc2l0b3J5IG5vdCBleHBvcnRlZCI7CisJcGFja2V0X3dyaXRlX2ZtdCgxLCAiRVJSICVzOiAlcyIsIG1zZywgZGlyKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphY2Nlc3NfaG9vazsKKworc3RhdGljIGludCBydW5fYWNjZXNzX2hvb2soc3RydWN0IGRhZW1vbl9zZXJ2aWNlICpzZXJ2aWNlLCBjb25zdCBjaGFyICpkaXIsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgaG9zdGluZm8gKmhpKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndls4XTsKKwljb25zdCBjaGFyICoqYXJnID0gYXJndjsKKwljaGFyICplb2w7CisJaW50IHNlZW5fZXJyb3JzID0gMDsKKworCSphcmcrKyA9IGFjY2Vzc19ob29rOworCSphcmcrKyA9IHNlcnZpY2UtPm5hbWU7CisJKmFyZysrID0gcGF0aDsKKwkqYXJnKysgPSBoaS0+aG9zdG5hbWUuYnVmOworCSphcmcrKyA9IGdldF9jYW5vbl9ob3N0bmFtZShoaSk7CisJKmFyZysrID0gZ2V0X2lwX2FkZHJlc3MoaGkpOworCSphcmcrKyA9IGhpLT50Y3BfcG9ydC5idWY7CisJKmFyZyA9IE5VTEw7CisKKwljaGlsZC51c2Vfc2hlbGwgPSAxOworCWNoaWxkLmFyZ3YgPSBhcmd2OworCWNoaWxkLm5vX3N0ZGluID0gMTsKKwljaGlsZC5ub19zdGRlcnIgPSAxOworCWNoaWxkLm91dCA9IC0xOworCWlmIChzdGFydF9jb21tYW5kKCZjaGlsZCkpIHsKKwkJbG9nZXJyb3IoImRhZW1vbiBhY2Nlc3MgaG9vayAnJXMnIGZhaWxlZCB0byBzdGFydCIsCisJCQkgYWNjZXNzX2hvb2spOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIGNoaWxkLm91dCwgMCkgPCAwKSB7CisJCWxvZ2Vycm9yKCJmYWlsZWQgdG8gcmVhZCBmcm9tIHBpcGUgdG8gZGFlbW9uIGFjY2VzcyBob29rICclcyciLAorCQkJIGFjY2Vzc19ob29rKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzZWVuX2Vycm9ycyA9IDE7CisJfQorCWlmIChjbG9zZShjaGlsZC5vdXQpIDwgMCkgeworCQlsb2dlcnJvcigiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gZGFlbW9uIGFjY2VzcyBob29rICclcyciLAorCQkJIGFjY2Vzc19ob29rKTsKKwkJc2Vlbl9lcnJvcnMgPSAxOworCX0KKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNoaWxkKSkKKwkJc2Vlbl9lcnJvcnMgPSAxOworCisJaWYgKCFzZWVuX2Vycm9ycykgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCitlcnJvcl9yZXR1cm46CisJc3RyYnVmX2x0cmltKCZidWYpOworCWlmICghYnVmLmxlbikKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAic2VydmljZSByZWplY3RlZCIpOworCWVvbCA9IHN0cmNocihidWYuYnVmLCAnXG4nKTsKKwlpZiAoZW9sKQorCQkqZW9sID0gJ1wwJzsKKwllcnJubyA9IEVBQ0NFUzsKKwlkYWVtb25fZXJyb3IoZGlyLCBidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NlcnZpY2UoY29uc3QgY2hhciAqZGlyLCBzdHJ1Y3QgZGFlbW9uX3NlcnZpY2UgKnNlcnZpY2UsCisJCSAgICAgICBzdHJ1Y3QgaG9zdGluZm8gKmhpLCBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqZW52KQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJaW50IGVuYWJsZWQgPSBzZXJ2aWNlLT5lbmFibGVkOworCXN0cnVjdCBzdHJidWYgdmFyID0gU1RSQlVGX0lOSVQ7CisKKwlsb2dpbmZvKCJSZXF1ZXN0ICVzIGZvciAnJXMnIiwgc2VydmljZS0+bmFtZSwgZGlyKTsKKworCWlmICghZW5hYmxlZCAmJiAhc2VydmljZS0+b3ZlcnJpZGFibGUpIHsKKwkJbG9nZXJyb3IoIiclcyc6IHNlcnZpY2Ugbm90IGVuYWJsZWQuIiwgc2VydmljZS0+bmFtZSk7CisJCWVycm5vID0gRUFDQ0VTOworCQlyZXR1cm4gZGFlbW9uX2Vycm9yKGRpciwgInNlcnZpY2Ugbm90IGVuYWJsZWQiKTsKKwl9CisKKwlpZiAoIShwYXRoID0gcGF0aF9vayhkaXIsIGhpKSkpCisJCXJldHVybiBkYWVtb25fZXJyb3IoZGlyLCAibm8gc3VjaCByZXBvc2l0b3J5Iik7CisKKwkvKgorCSAqIFNlY3VyaXR5IG9uIHRoZSBjaGVhcC4KKwkgKgorCSAqIFdlIHdhbnQgYSByZWFkYWJsZSBIRUFELCB1c2FibGUgIm9iamVjdHMiIGRpcmVjdG9yeSwgYW5kCisJICogYSAiZ2l0LWRhZW1vbi1leHBvcnQtb2siIGZsYWcgdGhhdCBzYXlzIHRoYXQgdGhlIG90aGVyIHNpZGUKKwkgKiBpcyBvayB3aXRoIHVzIGRvaW5nIHRoaXMuCisJICoKKwkgKiBwYXRoX29rKCkgdXNlcyBlbnRlcl9yZXBvKCkgYW5kIGRvZXMgd2hpdGVsaXN0IGNoZWNraW5nLgorCSAqIFdlIG9ubHkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlcG9zaXRvcnkgaXMgZXhwb3J0ZWQuCisJICovCisKKwlpZiAoIWV4cG9ydF9hbGxfdHJlZXMgJiYgYWNjZXNzKCJnaXQtZGFlbW9uLWV4cG9ydC1vayIsIEZfT0spKSB7CisJCWxvZ2Vycm9yKCInJXMnOiByZXBvc2l0b3J5IG5vdCBleHBvcnRlZC4iLCBwYXRoKTsKKwkJZXJybm8gPSBFQUNDRVM7CisJCXJldHVybiBkYWVtb25fZXJyb3IoZGlyLCAicmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQiKTsKKwl9CisKKwlpZiAoc2VydmljZS0+b3ZlcnJpZGFibGUpIHsKKwkJc3RyYnVmX2FkZGYoJnZhciwgImRhZW1vbi4lcyIsIHNlcnZpY2UtPmNvbmZpZ19uYW1lKTsKKwkJZ2l0X2NvbmZpZ19nZXRfYm9vbCh2YXIuYnVmLCAmZW5hYmxlZCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZ2YXIpOworCX0KKwlpZiAoIWVuYWJsZWQpIHsKKwkJbG9nZXJyb3IoIiclcyc6IHNlcnZpY2Ugbm90IGVuYWJsZWQgZm9yICclcyciLAorCQkJIHNlcnZpY2UtPm5hbWUsIHBhdGgpOworCQllcnJubyA9IEVBQ0NFUzsKKwkJcmV0dXJuIGRhZW1vbl9lcnJvcihkaXIsICJzZXJ2aWNlIG5vdCBlbmFibGVkIik7CisJfQorCisJLyoKKwkgKiBPcHRpb25hbGx5LCBhIGhvb2sgY2FuIGNob29zZSB0byBkZW55IGFjY2VzcyB0byB0aGUKKwkgKiByZXBvc2l0b3J5IGRlcGVuZGluZyBvbiB0aGUgcGhhc2Ugb2YgdGhlIG1vb24uCisJICovCisJaWYgKGFjY2Vzc19ob29rICYmIHJ1bl9hY2Nlc3NfaG9vayhzZXJ2aWNlLCBkaXIsIHBhdGgsIGhpKSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBXZSdsbCBpZ25vcmUgU0lHVEVSTSBmcm9tIG5vdyBvbiwgd2UgaGF2ZSBhCisJICogZ29vZCBjbGllbnQuCisJICovCisJc2lnbmFsKFNJR1RFUk0sIFNJR19JR04pOworCisJcmV0dXJuIHNlcnZpY2UtPmZuKGVudik7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfdG9fbG9nKGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcDsKKworCWZwID0gZmRvcGVuKGZkLCAiciIpOworCWlmIChmcCA9PSBOVUxMKSB7CisJCWxvZ2Vycm9yKCJmZG9wZW4gb2YgZXJyb3IgY2hhbm5lbCBmYWlsZWQiKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZsaW5lLCBmcCkgIT0gRU9GKSB7CisJCWxvZ2Vycm9yKCIlcyIsIGxpbmUuYnVmKTsKKwkJc3RyYnVmX3NldGxlbigmbGluZSwgMCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NlcnZpY2VfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY2xkKQoreworCWFyZ3ZfYXJyYXlfcHVzaCgmY2xkLT5hcmdzLCAiLiIpOworCWNsZC0+Z2l0X2NtZCA9IDE7CisJY2xkLT5lcnIgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZChjbGQpKQorCQlyZXR1cm4gLTE7CisKKwljbG9zZSgwKTsKKwljbG9zZSgxKTsKKworCWNvcHlfdG9fbG9nKGNsZC0+ZXJyKTsKKworCXJldHVybiBmaW5pc2hfY29tbWFuZChjbGQpOworfQorCitzdGF0aWMgaW50IHVwbG9hZF9wYWNrKGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICplbnYpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNsZC5hcmdzLCAidXBsb2FkLXBhY2siLCAiLS1zdHJpY3QiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjbGQuYXJncywgIi0tdGltZW91dD0ldSIsIHRpbWVvdXQpOworCisJYXJndl9hcnJheV9wdXNodigmY2xkLmVudl9hcnJheSwgZW52LT5hcmd2KTsKKworCXJldHVybiBydW5fc2VydmljZV9jb21tYW5kKCZjbGQpOworfQorCitzdGF0aWMgaW50IHVwbG9hZF9hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICplbnYpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWFyZ3ZfYXJyYXlfcHVzaCgmY2xkLmFyZ3MsICJ1cGxvYWQtYXJjaGl2ZSIpOworCisJYXJndl9hcnJheV9wdXNodigmY2xkLmVudl9hcnJheSwgZW52LT5hcmd2KTsKKworCXJldHVybiBydW5fc2VydmljZV9jb21tYW5kKCZjbGQpOworfQorCitzdGF0aWMgaW50IHJlY2VpdmVfcGFjayhjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqZW52KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlhcmd2X2FycmF5X3B1c2goJmNsZC5hcmdzLCAicmVjZWl2ZS1wYWNrIik7CisKKwlhcmd2X2FycmF5X3B1c2h2KCZjbGQuZW52X2FycmF5LCBlbnYtPmFyZ3YpOworCisJcmV0dXJuIHJ1bl9zZXJ2aWNlX2NvbW1hbmQoJmNsZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3NlcnZpY2UgZGFlbW9uX3NlcnZpY2VbXSA9IHsKKwl7ICJ1cGxvYWQtYXJjaGl2ZSIsICJ1cGxvYWRhcmNoIiwgdXBsb2FkX2FyY2hpdmUsIDAsIDEgfSwKKwl7ICJ1cGxvYWQtcGFjayIsICJ1cGxvYWRwYWNrIiwgdXBsb2FkX3BhY2ssIDEsIDEgfSwKKwl7ICJyZWNlaXZlLXBhY2siLCAicmVjZWl2ZXBhY2siLCByZWNlaXZlX3BhY2ssIDAsIDEgfSwKK307CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9zZXJ2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBlbmEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFlbW9uX3NlcnZpY2UpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoZGFlbW9uX3NlcnZpY2VbaV0ubmFtZSwgbmFtZSkpIHsKKwkJCWRhZW1vbl9zZXJ2aWNlW2ldLmVuYWJsZWQgPSBlbmE7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZGllKCJObyBzdWNoIHNlcnZpY2UgJXMiLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9zZXJ2aWNlX292ZXJyaWRhYmxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBlbmEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFlbW9uX3NlcnZpY2UpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoZGFlbW9uX3NlcnZpY2VbaV0ubmFtZSwgbmFtZSkpIHsKKwkJCWRhZW1vbl9zZXJ2aWNlW2ldLm92ZXJyaWRhYmxlID0gZW5hOworCQkJcmV0dXJuOworCQl9CisJfQorCWRpZSgiTm8gc3VjaCBzZXJ2aWNlICVzIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2hvc3RfYW5kX3BvcnQoY2hhciAqaG9zdHBvcnQsIGNoYXIgKipob3N0LAorCWNoYXIgKipwb3J0KQoreworCWlmICgqaG9zdHBvcnQgPT0gJ1snKSB7CisJCWNoYXIgKmVuZDsKKworCQllbmQgPSBzdHJjaHIoaG9zdHBvcnQsICddJyk7CisJCWlmICghZW5kKQorCQkJZGllKCJJbnZhbGlkIHJlcXVlc3QgKCdbJyB3aXRob3V0ICddJykiKTsKKwkJKmVuZCA9ICdcMCc7CisJCSpob3N0ID0gaG9zdHBvcnQgKyAxOworCQlpZiAoIWVuZFsxXSkKKwkJCSpwb3J0ID0gTlVMTDsKKwkJZWxzZSBpZiAoZW5kWzFdID09ICc6JykKKwkJCSpwb3J0ID0gZW5kICsgMjsKKwkJZWxzZQorCQkJZGllKCJHYXJiYWdlIGFmdGVyIGVuZCBvZiBob3N0IHBhcnQiKTsKKwl9IGVsc2UgeworCQkqaG9zdCA9IGhvc3Rwb3J0OworCQkqcG9ydCA9IHN0cnJjaHIoaG9zdHBvcnQsICc6Jyk7CisJCWlmICgqcG9ydCkgeworCQkJKipwb3J0ID0gJ1wwJzsKKwkJCSsrKnBvcnQ7CisJCX0KKwl9Cit9CisKKy8qCisgKiBTYW5pdGl6ZSBhIHN0cmluZyBmcm9tIHRoZSBjbGllbnQgc28gdGhhdCBpdCdzIE9LIHRvIGJlIGluc2VydGVkIGludG8gYQorICogZmlsZXN5c3RlbSBwYXRoLiBTcGVjaWZpY2FsbHksIHdlIGRpc2FsbG93IHNsYXNoZXMsIHJ1bnMgb2YgIi4uIiwgYW5kCisgKiB0cmFpbGluZyBhbmQgbGVhZGluZyBkb3RzLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjbGllbnQgY2Fubm90IGVzY2FwZQorICogb3VyIGJhc2UgcGF0aCB2aWEgIi4uIiB0cmF2ZXJzYWwuCisgKi8KK3N0YXRpYyB2b2lkIHNhbml0aXplX2NsaWVudChzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKmluKQoreworCWZvciAoOyAqaW47IGluKyspIHsKKwkJaWYgKCppbiA9PSAnLycpCisJCQljb250aW51ZTsKKwkJaWYgKCppbiA9PSAnLicgJiYgKCFvdXQtPmxlbiB8fCBvdXQtPmJ1ZltvdXQtPmxlbiAtIDFdID09ICcuJykpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZGNoKG91dCwgKmluKTsKKwl9CisKKwl3aGlsZSAob3V0LT5sZW4gJiYgb3V0LT5idWZbb3V0LT5sZW4gLSAxXSA9PSAnLicpCisJCXN0cmJ1Zl9zZXRsZW4ob3V0LCBvdXQtPmxlbiAtIDEpOworfQorCisvKgorICogTGlrZSBzYW5pdGl6ZV9jbGllbnQsIGJ1dCB3ZSBhbHNvIHBlcmZvcm0gYW55IGNhbm9uaWNhbGl6YXRpb24KKyAqIHRvIG1ha2UgbGlmZSBlYXNpZXIgb24gdGhlIGFkbWluLgorICovCitzdGF0aWMgdm9pZCBjYW5vbmljYWxpemVfY2xpZW50KHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqaW4pCit7CisJc2FuaXRpemVfY2xpZW50KG91dCwgaW4pOworCXN0cmJ1Zl90b2xvd2VyKG91dCk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBob3N0IGFzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgY29ubmVjdGlvbi4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBOVUwgYnl0ZSB0ZXJtaW5hdGluZyB0aGUgaG9zdAorICogYXJndW1lbnQsIG9yICdleHRyYV9hcmdzJyBpZiB0aGVyZSBpcyBubyBob3N0IGFyZ3VtZW50LgorICovCitzdGF0aWMgY2hhciAqcGFyc2VfaG9zdF9hcmcoc3RydWN0IGhvc3RpbmZvICpoaSwgY2hhciAqZXh0cmFfYXJncywgaW50IGJ1ZmxlbikKK3sKKwljaGFyICp2YWw7CisJaW50IHZhbGxlbjsKKwljaGFyICplbmQgPSBleHRyYV9hcmdzICsgYnVmbGVuOworCisJaWYgKGV4dHJhX2FyZ3MgPCBlbmQgJiYgKmV4dHJhX2FyZ3MpIHsKKwkJaGktPnNhd19leHRlbmRlZF9hcmdzID0gMTsKKwkJaWYgKHN0cm5jYXNlY21wKCJob3N0PSIsIGV4dHJhX2FyZ3MsIDUpID09IDApIHsKKwkJCXZhbCA9IGV4dHJhX2FyZ3MgKyA1OworCQkJdmFsbGVuID0gc3RybGVuKHZhbCkgKyAxOworCQkJbG9naW5mbygiRXh0ZW5kZWQgYXR0cmlidXRlIFwiaG9zdFwiOiAlcyIsIHZhbCk7CisJCQlpZiAoKnZhbCkgeworCQkJCS8qIFNwbGl0IDxob3N0Pjo8cG9ydD4gYXQgY29sb24uICovCisJCQkJY2hhciAqaG9zdDsKKwkJCQljaGFyICpwb3J0OworCQkJCXBhcnNlX2hvc3RfYW5kX3BvcnQodmFsLCAmaG9zdCwgJnBvcnQpOworCQkJCWlmIChwb3J0KQorCQkJCQlzYW5pdGl6ZV9jbGllbnQoJmhpLT50Y3BfcG9ydCwgcG9ydCk7CisJCQkJY2Fub25pY2FsaXplX2NsaWVudCgmaGktPmhvc3RuYW1lLCBob3N0KTsKKwkJCQloaS0+aG9zdG5hbWVfbG9va3VwX2RvbmUgPSAwOworCQkJfQorCisJCQkvKiBPbiB0byB0aGUgbmV4dCBvbmUgKi8KKwkJCWV4dHJhX2FyZ3MgPSB2YWwgKyB2YWxsZW47CisJCX0KKwkJaWYgKGV4dHJhX2FyZ3MgPCBlbmQgJiYgKmV4dHJhX2FyZ3MpCisJCQlkaWUoIkludmFsaWQgcmVxdWVzdCIpOworCX0KKworCXJldHVybiBleHRyYV9hcmdzOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9leHRyYV9hcmdzKHN0cnVjdCBob3N0aW5mbyAqaGksIHN0cnVjdCBhcmd2X2FycmF5ICplbnYsCisJCQkgICAgIGNoYXIgKmV4dHJhX2FyZ3MsIGludCBidWZsZW4pCit7CisJY29uc3QgY2hhciAqZW5kID0gZXh0cmFfYXJncyArIGJ1ZmxlbjsKKwlzdHJ1Y3Qgc3RyYnVmIGdpdF9wcm90b2NvbCA9IFNUUkJVRl9JTklUOworCisJLyogRmlyc3QgbG9vayBmb3IgdGhlIGhvc3QgYXJndW1lbnQgKi8KKwlleHRyYV9hcmdzID0gcGFyc2VfaG9zdF9hcmcoaGksIGV4dHJhX2FyZ3MsIGJ1Zmxlbik7CisKKwkvKiBMb29rIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwbGFjZXMgYWZ0ZXIgYSBzZWNvbmQgTlVMIGJ5dGUgKi8KKwlmb3IgKDsgZXh0cmFfYXJncyA8IGVuZDsgZXh0cmFfYXJncyArPSBzdHJsZW4oZXh0cmFfYXJncykgKyAxKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGV4dHJhX2FyZ3M7CisKKwkJLyoKKwkJICogUGFyc2UgdGhlIGV4dHJhIGFyZ3VtZW50cywgYWRkaW5nIG1vc3QgdG8gJ2dpdF9wcm90b2NvbCcKKwkJICogd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHNldCB0aGUgJ0dJVF9QUk9UT0NPTCcgZW52dmFyIGluIHRoZQorCQkgKiBzZXJ2aWNlIHRoYXQgd2lsbCBiZSBydW4uCisJCSAqCisJCSAqIElmIHRoZXJlIGVuZHMgdXAgYmVpbmcgYSBwYXJ0aWN1bGFyIGFyZyBpbiB0aGUgZnV0dXJlIHRoYXQKKwkJICogZ2l0LWRhZW1vbiBuZWVkcyB0byBwYXJzZSBzcGVjaWZpY2FsbHkgKGxpa2UgdGhlICdob3N0JyBhcmcpCisJCSAqIHRoZW4gaXQgY2FuIGJlIHBhcnNlZCBoZXJlIGFuZCBub3QgYWRkZWQgdG8gJ2dpdF9wcm90b2NvbCcuCisJCSAqLworCQlpZiAoKmFyZykgeworCQkJaWYgKGdpdF9wcm90b2NvbC5sZW4gPiAwKQorCQkJCXN0cmJ1Zl9hZGRjaCgmZ2l0X3Byb3RvY29sLCAnOicpOworCQkJc3RyYnVmX2FkZHN0cigmZ2l0X3Byb3RvY29sLCBhcmcpOworCQl9CisJfQorCisJaWYgKGdpdF9wcm90b2NvbC5sZW4gPiAwKSB7CisJCWxvZ2luZm8oIkV4dGVuZGVkIGF0dHJpYnV0ZSBcInByb3RvY29sXCI6ICVzIiwgZ2l0X3Byb3RvY29sLmJ1Zik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoZW52LCBHSVRfUFJPVE9DT0xfRU5WSVJPTk1FTlQgIj0lcyIsCisJCQkJIGdpdF9wcm90b2NvbC5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZ2l0X3Byb3RvY29sKTsKK30KKworLyoKKyAqIExvY2F0ZSBjYW5vbmljYWwgaG9zdG5hbWUgYW5kIGl0cyBJUCBhZGRyZXNzLgorICovCitzdGF0aWMgdm9pZCBsb29rdXBfaG9zdG5hbWUoc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwlpZiAoIWhpLT5ob3N0bmFtZV9sb29rdXBfZG9uZSAmJiBoaS0+aG9zdG5hbWUubGVuKSB7CisjaWZuZGVmIE5PX0lQVjYKKwkJc3RydWN0IGFkZHJpbmZvIGhpbnRzOworCQlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCQlpbnQgZ2FpOworCQlzdGF0aWMgY2hhciBhZGRyYnVmW0hPU1RfTkFNRV9NQVggKyAxXTsKKworCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwkJaGludHMuYWlfZmxhZ3MgPSBBSV9DQU5PTk5BTUU7CisKKwkJZ2FpID0gZ2V0YWRkcmluZm8oaGktPmhvc3RuYW1lLmJ1ZiwgTlVMTCwgJmhpbnRzLCAmYWkpOworCQlpZiAoIWdhaSkgeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYWRkciA9ICh2b2lkICopYWktPmFpX2FkZHI7CisKKwkJCWluZXRfbnRvcChBRl9JTkVULCAmc2luX2FkZHItPnNpbl9hZGRyLAorCQkJCSAgYWRkcmJ1Ziwgc2l6ZW9mKGFkZHJidWYpKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmhpLT5pcF9hZGRyZXNzLCBhZGRyYnVmKTsKKworCQkJaWYgKGFpLT5haV9jYW5vbm5hbWUpCisJCQkJc2FuaXRpemVfY2xpZW50KCZoaS0+Y2Fub25faG9zdG5hbWUsCisJCQkJCQlhaS0+YWlfY2Fub25uYW1lKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkYnVmKCZoaS0+Y2Fub25faG9zdG5hbWUsCisJCQkJCSAgICAgICZoaS0+aXBfYWRkcmVzcyk7CisKKwkJCWZyZWVhZGRyaW5mbyhhaSk7CisJCX0KKyNlbHNlCisJCXN0cnVjdCBob3N0ZW50ICpoZW50OworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2E7CisJCWNoYXIgKiphcDsKKwkJc3RhdGljIGNoYXIgYWRkcmJ1ZltIT1NUX05BTUVfTUFYICsgMV07CisKKwkJaGVudCA9IGdldGhvc3RieW5hbWUoaGktPmhvc3RuYW1lLmJ1Zik7CisJCWlmIChoZW50KSB7CisJCQlhcCA9IGhlbnQtPmhfYWRkcl9saXN0OworCQkJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mIHNhKTsKKwkJCXNhLnNpbl9mYW1pbHkgPSBoZW50LT5oX2FkZHJ0eXBlOworCQkJc2Euc2luX3BvcnQgPSBodG9ucygwKTsKKwkJCW1lbWNweSgmc2Euc2luX2FkZHIsICphcCwgaGVudC0+aF9sZW5ndGgpOworCisJCQlpbmV0X250b3AoaGVudC0+aF9hZGRydHlwZSwgJnNhLnNpbl9hZGRyLAorCQkJCSAgYWRkcmJ1Ziwgc2l6ZW9mKGFkZHJidWYpKTsKKworCQkJc2FuaXRpemVfY2xpZW50KCZoaS0+Y2Fub25faG9zdG5hbWUsIGhlbnQtPmhfbmFtZSk7CisJCQlzdHJidWZfYWRkc3RyKCZoaS0+aXBfYWRkcmVzcywgYWRkcmJ1Zik7CisJCX0KKyNlbmRpZgorCQloaS0+aG9zdG5hbWVfbG9va3VwX2RvbmUgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgaG9zdGluZm9faW5pdChzdHJ1Y3QgaG9zdGluZm8gKmhpKQoreworCW1lbXNldChoaSwgMCwgc2l6ZW9mKCpoaSkpOworCXN0cmJ1Zl9pbml0KCZoaS0+aG9zdG5hbWUsIDApOworCXN0cmJ1Zl9pbml0KCZoaS0+Y2Fub25faG9zdG5hbWUsIDApOworCXN0cmJ1Zl9pbml0KCZoaS0+aXBfYWRkcmVzcywgMCk7CisJc3RyYnVmX2luaXQoJmhpLT50Y3BfcG9ydCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGhvc3RpbmZvX2NsZWFyKHN0cnVjdCBob3N0aW5mbyAqaGkpCit7CisJc3RyYnVmX3JlbGVhc2UoJmhpLT5ob3N0bmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmhpLT5jYW5vbl9ob3N0bmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmhpLT5pcF9hZGRyZXNzKTsKKwlzdHJidWZfcmVsZWFzZSgmaGktPnRjcF9wb3J0KTsKK30KKworc3RhdGljIHZvaWQgc2V0X2tlZXBfYWxpdmUoaW50IHNvY2tmZCkKK3sKKwlpbnQga2EgPSAxOworCisJaWYgKHNldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsICZrYSwgc2l6ZW9mKGthKSkgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFTk9UU09DSykKKwkJCWxvZ2Vycm9yKCJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQ6ICVzIiwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCX0KK30KKworc3RhdGljIGludCBleGVjdXRlKHZvaWQpCit7CisJY2hhciAqbGluZSA9IHBhY2tldF9idWZmZXI7CisJaW50IHBrdGxlbiwgbGVuLCBpOworCWNoYXIgKmFkZHIgPSBnZXRlbnYoIlJFTU9URV9BRERSIiksICpwb3J0ID0gZ2V0ZW52KCJSRU1PVEVfUE9SVCIpOworCXN0cnVjdCBob3N0aW5mbyBoaTsKKwlzdHJ1Y3QgYXJndl9hcnJheSBlbnYgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlob3N0aW5mb19pbml0KCZoaSk7CisKKwlpZiAoYWRkcikKKwkJbG9naW5mbygiQ29ubmVjdGlvbiBmcm9tICVzOiVzIiwgYWRkciwgcG9ydCk7CisKKwlzZXRfa2VlcF9hbGl2ZSgwKTsKKwlhbGFybShpbml0X3RpbWVvdXQgPyBpbml0X3RpbWVvdXQgOiB0aW1lb3V0KTsKKwlwa3RsZW4gPSBwYWNrZXRfcmVhZCgwLCBOVUxMLCBOVUxMLCBwYWNrZXRfYnVmZmVyLCBzaXplb2YocGFja2V0X2J1ZmZlciksIDApOworCWFsYXJtKDApOworCisJbGVuID0gc3RybGVuKGxpbmUpOworCWlmIChsZW4gJiYgbGluZVtsZW4tMV0gPT0gJ1xuJykKKwkJbGluZVtsZW4tMV0gPSAwOworCisJLyogcGFyc2UgYWRkaXRpb25hbCBhcmdzIGhpZGRlbiBiZWhpbmQgYSBOVUwgYnl0ZSAqLworCWlmIChsZW4gIT0gcGt0bGVuKQorCQlwYXJzZV9leHRyYV9hcmdzKCZoaSwgJmVudiwgbGluZSArIGxlbiArIDEsIHBrdGxlbiAtIGxlbiAtIDEpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFlbW9uX3NlcnZpY2UpOyBpKyspIHsKKwkJc3RydWN0IGRhZW1vbl9zZXJ2aWNlICpzID0gJihkYWVtb25fc2VydmljZVtpXSk7CisJCWNvbnN0IGNoYXIgKmFyZzsKKworCQlpZiAoc2tpcF9wcmVmaXgobGluZSwgImdpdC0iLCAmYXJnKSAmJgorCQkgICAgc2tpcF9wcmVmaXgoYXJnLCBzLT5uYW1lLCAmYXJnKSAmJgorCQkgICAgKmFyZysrID09ICcgJykgeworCQkJLyoKKwkJCSAqIE5vdGU6IFRoZSBkaXJlY3RvcnkgaGVyZSBpcyBwcm9iYWJseSBjb250ZXh0IHNlbnNpdGl2ZSwKKwkJCSAqIGFuZCBtaWdodCBkZXBlbmQgb24gdGhlIGFjdHVhbCBzZXJ2aWNlIGJlaW5nIHBlcmZvcm1lZC4KKwkJCSAqLworCQkJaW50IHJjID0gcnVuX3NlcnZpY2UoYXJnLCBzLCAmaGksICZlbnYpOworCQkJaG9zdGluZm9fY2xlYXIoJmhpKTsKKwkJCWFyZ3ZfYXJyYXlfY2xlYXIoJmVudik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlob3N0aW5mb19jbGVhcigmaGkpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmVudik7CisJbG9nZXJyb3IoIlByb3RvY29sIGVycm9yOiAnJXMnIiwgbGluZSk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGFkZHJjbXAoY29uc3Qgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnMxLAorICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzMikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSBzMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSBzMjsKKworCWlmIChzYTEtPnNhX2ZhbWlseSAhPSBzYTItPnNhX2ZhbWlseSkKKwkJcmV0dXJuIHNhMS0+c2FfZmFtaWx5IC0gc2EyLT5zYV9mYW1pbHk7CisJaWYgKHNhMS0+c2FfZmFtaWx5ID09IEFGX0lORVQpCisJCXJldHVybiBtZW1jbXAoJigoc3RydWN0IHNvY2thZGRyX2luICopczEpLT5zaW5fYWRkciwKKwkJICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXMyKS0+c2luX2FkZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyNpZm5kZWYgTk9fSVBWNgorCWlmIChzYTEtPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJcmV0dXJuIG1lbWNtcCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopczEpLT5zaW42X2FkZHIsCisJCSAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopczIpLT5zaW42X2FkZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXhfY29ubmVjdGlvbnMgPSAzMjsKKworc3RhdGljIHVuc2lnbmVkIGludCBsaXZlX2NoaWxkcmVuOworCitzdGF0aWMgc3RydWN0IGNoaWxkIHsKKwlzdHJ1Y3QgY2hpbGQgKm5leHQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJlc3M7Cit9ICpmaXJzdGJvcm47CisKK3N0YXRpYyB2b2lkIGFkZF9jaGlsZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY2xkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhZGRybGVuKQoreworCXN0cnVjdCBjaGlsZCAqbmV3Ym9ybiwgKipjcmFkbGU7CisKKwluZXdib3JuID0geGNhbGxvYygxLCBzaXplb2YoKm5ld2Jvcm4pKTsKKwlsaXZlX2NoaWxkcmVuKys7CisJbWVtY3B5KCZuZXdib3JuLT5jbGQsIGNsZCwgc2l6ZW9mKCpjbGQpKTsKKwltZW1jcHkoJm5ld2Jvcm4tPmFkZHJlc3MsIGFkZHIsIGFkZHJsZW4pOworCWZvciAoY3JhZGxlID0gJmZpcnN0Ym9ybjsgKmNyYWRsZTsgY3JhZGxlID0gJigqY3JhZGxlKS0+bmV4dCkKKwkJaWYgKCFhZGRyY21wKCYoKmNyYWRsZSktPmFkZHJlc3MsICZuZXdib3JuLT5hZGRyZXNzKSkKKwkJCWJyZWFrOworCW5ld2Jvcm4tPm5leHQgPSAqY3JhZGxlOworCSpjcmFkbGUgPSBuZXdib3JuOworfQorCisvKgorICogVGhpcyBnZXRzIGNhbGxlZCBpZiB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGdyb3dzCisgKiBwYXN0ICJtYXhfY29ubmVjdGlvbnMiLgorICoKKyAqIFdlIGtpbGwgdGhlIG5ld2VzdCBjb25uZWN0aW9uIGZyb20gYSBkdXBsaWNhdGUgSVAuCisgKi8KK3N0YXRpYyB2b2lkIGtpbGxfc29tZV9jaGlsZCh2b2lkKQoreworCWNvbnN0IHN0cnVjdCBjaGlsZCAqYmxhbmtldCwgKm5leHQ7CisKKwlpZiAoIShibGFua2V0ID0gZmlyc3Rib3JuKSkKKwkJcmV0dXJuOworCisJZm9yICg7IChuZXh0ID0gYmxhbmtldC0+bmV4dCk7IGJsYW5rZXQgPSBuZXh0KQorCQlpZiAoIWFkZHJjbXAoJmJsYW5rZXQtPmFkZHJlc3MsICZuZXh0LT5hZGRyZXNzKSkgeworCQkJa2lsbChibGFua2V0LT5jbGQucGlkLCBTSUdURVJNKTsKKwkJCWJyZWFrOworCQl9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2RlYWRfY2hpbGRyZW4odm9pZCkKK3sKKwlpbnQgc3RhdHVzOworCXBpZF90IHBpZDsKKworCXN0cnVjdCBjaGlsZCAqKmNyYWRsZSwgKmJsYW5rZXQ7CisJZm9yIChjcmFkbGUgPSAmZmlyc3Rib3JuOyAoYmxhbmtldCA9ICpjcmFkbGUpOykKKwkJaWYgKChwaWQgPSB3YWl0cGlkKGJsYW5rZXQtPmNsZC5waWQsICZzdGF0dXMsIFdOT0hBTkcpKSA+IDEpIHsKKwkJCWNvbnN0IGNoYXIgKmRlYWQgPSAiIjsKKwkJCWlmIChzdGF0dXMpCisJCQkJZGVhZCA9ICIgKHdpdGggZXJyb3IpIjsKKwkJCWxvZ2luZm8oIlslIlBSSXVNQVgiXSBEaXNjb25uZWN0ZWQlcyIsICh1aW50bWF4X3QpcGlkLCBkZWFkKTsKKworCQkJLyogcmVtb3ZlIHRoZSBjaGlsZCAqLworCQkJKmNyYWRsZSA9IGJsYW5rZXQtPm5leHQ7CisJCQlsaXZlX2NoaWxkcmVuLS07CisJCQljaGlsZF9wcm9jZXNzX2NsZWFyKCZibGFua2V0LT5jbGQpOworCQkJZnJlZShibGFua2V0KTsKKwkJfSBlbHNlCisJCQljcmFkbGUgPSAmYmxhbmtldC0+bmV4dDsKK30KKworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IGNsZF9hcmd2ID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIHZvaWQgaGFuZGxlKGludCBpbmNvbWluZywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwlpZiAobWF4X2Nvbm5lY3Rpb25zICYmIGxpdmVfY2hpbGRyZW4gPj0gbWF4X2Nvbm5lY3Rpb25zKSB7CisJCWtpbGxfc29tZV9jaGlsZCgpOworCQlzbGVlcCgxKTsgIC8qIGdpdmUgaXQgc29tZSB0aW1lIHRvIGRpZSAqLworCQljaGVja19kZWFkX2NoaWxkcmVuKCk7CisJCWlmIChsaXZlX2NoaWxkcmVuID49IG1heF9jb25uZWN0aW9ucykgeworCQkJY2xvc2UoaW5jb21pbmcpOworCQkJbG9nZXJyb3IoIlRvbyBtYW55IGNoaWxkcmVuLCBkcm9wcGluZyBjb25uZWN0aW9uIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJY2hhciBidWZbMTI4XSA9ICIiOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbl9hZGRyID0gKHZvaWQgKikgYWRkcjsKKwkJaW5ldF9udG9wKGFkZHItPnNhX2ZhbWlseSwgJnNpbl9hZGRyLT5zaW5fYWRkciwgYnVmLCBzaXplb2YoYnVmKSk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNsZC5lbnZfYXJyYXksICJSRU1PVEVfQUREUj0lcyIsIGJ1Zik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNsZC5lbnZfYXJyYXksICJSRU1PVEVfUE9SVD0lZCIsCisJCQkJIG50b2hzKHNpbl9hZGRyLT5zaW5fcG9ydCkpOworI2lmbmRlZiBOT19JUFY2CisJfSBlbHNlIGlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJY2hhciBidWZbMTI4XSA9ICIiOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42X2FkZHIgPSAodm9pZCAqKSBhZGRyOworCQlpbmV0X250b3AoQUZfSU5FVDYsICZzaW42X2FkZHItPnNpbjZfYWRkciwgYnVmLCBzaXplb2YoYnVmKSk7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNsZC5lbnZfYXJyYXksICJSRU1PVEVfQUREUj1bJXNdIiwgYnVmKTsKKwkJYXJndl9hcnJheV9wdXNoZigmY2xkLmVudl9hcnJheSwgIlJFTU9URV9QT1JUPSVkIiwKKwkJCQkgbnRvaHMoc2luNl9hZGRyLT5zaW42X3BvcnQpKTsKKyNlbmRpZgorCX0KKworCWNsZC5hcmd2ID0gY2xkX2FyZ3YuYXJndjsKKwljbGQuaW4gPSBpbmNvbWluZzsKKwljbGQub3V0ID0gZHVwKGluY29taW5nKTsKKworCWlmIChzdGFydF9jb21tYW5kKCZjbGQpKQorCQlsb2dlcnJvcigidW5hYmxlIHRvIGZvcmsiKTsKKwllbHNlCisJCWFkZF9jaGlsZCgmY2xkLCBhZGRyLCBhZGRybGVuKTsKK30KKworc3RhdGljIHZvaWQgY2hpbGRfaGFuZGxlcihpbnQgc2lnbm8pCit7CisJLyoKKwkgKiBPdGhlcndpc2UgZW1wdHkgaGFuZGxlciBiZWNhdXNlIHN5c3RlbWNhbGxzIHdpbGwgZ2V0IGludGVycnVwdGVkCisJICogdXBvbiBzaWduYWwgcmVjZWlwdAorCSAqIFN5c1YgbmVlZHMgdGhlIGhhbmRsZXIgdG8gYmUgcmVhcm1lZAorCSAqLworCXNpZ25hbChTSUdDSExELCBjaGlsZF9oYW5kbGVyKTsKK30KKworc3RhdGljIGludCBzZXRfcmV1c2VfYWRkcihpbnQgc29ja2ZkKQoreworCWludCBvbiA9IDE7CisKKwlpZiAoIXJldXNlYWRkcikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsCisJCQkgICZvbiwgc2l6ZW9mKG9uKSk7Cit9CisKK3N0cnVjdCBzb2NrZXRsaXN0IHsKKwlpbnQgKmxpc3Q7CisJc2l6ZV90IG5yOworCXNpemVfdCBhbGxvYzsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppcDJzdHIoaW50IGZhbWlseSwgc3RydWN0IHNvY2thZGRyICpzaW4sIHNvY2tsZW5fdCBsZW4pCit7CisjaWZkZWYgTk9fSVBWNgorCXN0YXRpYyBjaGFyIGlwW0lORVRfQUREUlNUUkxFTl07CisjZWxzZQorCXN0YXRpYyBjaGFyIGlwW0lORVQ2X0FERFJTVFJMRU5dOworI2VuZGlmCisKKwlzd2l0Y2ggKGZhbWlseSkgeworI2lmbmRlZiBOT19JUFY2CisJY2FzZSBBRl9JTkVUNjoKKwkJaW5ldF9udG9wKGZhbWlseSwgJigoc3RydWN0IHNvY2thZGRyX2luNiopc2luKS0+c2luNl9hZGRyLCBpcCwgbGVuKTsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIEFGX0lORVQ6CisJCWluZXRfbnRvcChmYW1pbHksICYoKHN0cnVjdCBzb2NrYWRkcl9pbiopc2luKS0+c2luX2FkZHIsIGlwLCBsZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl4c25wcmludGYoaXAsIHNpemVvZihpcCksICI8dW5rbm93bj4iKTsKKwl9CisJcmV0dXJuIGlwOworfQorCisjaWZuZGVmIE5PX0lQVjYKKworc3RhdGljIGludCBzZXR1cF9uYW1lZF9zb2NrKGNoYXIgKmxpc3Rlbl9hZGRyLCBpbnQgbGlzdGVuX3BvcnQsIHN0cnVjdCBzb2NrZXRsaXN0ICpzb2NrbGlzdCkKK3sKKwlpbnQgc29ja251bSA9IDA7CisJY2hhciBwYnVmW05JX01BWFNFUlZdOworCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpMCwgKmFpOworCWludCBnYWk7CisJbG9uZyBmbGFnczsKKworCXhzbnByaW50ZihwYnVmLCBzaXplb2YocGJ1ZiksICIlZCIsIGxpc3Rlbl9wb3J0KTsKKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwloaW50cy5haV9mYW1pbHkgPSBBRl9VTlNQRUM7CisJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKwloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRTsKKworCWdhaSA9IGdldGFkZHJpbmZvKGxpc3Rlbl9hZGRyLCBwYnVmLCAmaGludHMsICZhaTApOworCWlmIChnYWkpIHsKKwkJbG9nZXJyb3IoImdldGFkZHJpbmZvKCkgZm9yICVzIGZhaWxlZDogJXMiLCBsaXN0ZW5fYWRkciwgZ2FpX3N0cmVycm9yKGdhaSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGFpID0gYWkwOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkgeworCQlpbnQgc29ja2ZkOworCisJCXNvY2tmZCA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsIGFpLT5haV9wcm90b2NvbCk7CisJCWlmIChzb2NrZmQgPCAwKQorCQkJY29udGludWU7CisJCWlmIChzb2NrZmQgPj0gRkRfU0VUU0laRSkgeworCQkJbG9nZXJyb3IoIlNvY2tldCBkZXNjcmlwdG9yIHRvbyBsYXJnZSIpOworCQkJY2xvc2Uoc29ja2ZkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKyNpZmRlZiBJUFY2X1Y2T05MWQorCQlpZiAoYWktPmFpX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJaW50IG9uID0gMTsKKwkJCXNldHNvY2tvcHQoc29ja2ZkLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLAorCQkJCSAgICZvbiwgc2l6ZW9mKG9uKSk7CisJCQkvKiBOb3RlOiBlcnJvciBpcyBub3QgZmF0YWwgKi8KKwkJfQorI2VuZGlmCisKKwkJaWYgKHNldF9yZXVzZV9hZGRyKHNvY2tmZCkpIHsKKwkJCWxvZ2Vycm9yKCJDb3VsZCBub3Qgc2V0IFNPX1JFVVNFQUREUjogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2Uoc29ja2ZkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc2V0X2tlZXBfYWxpdmUoc29ja2ZkKTsKKworCQlpZiAoYmluZChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSB7CisJCQlsb2dlcnJvcigiQ291bGQgbm90IGJpbmQgdG8gJXM6ICVzIiwKKwkJCQkgaXAyc3RyKGFpLT5haV9mYW1pbHksIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiksCisJCQkJIHN0cmVycm9yKGVycm5vKSk7CisJCQljbG9zZShzb2NrZmQpOworCQkJY29udGludWU7CS8qIG5vdCBmYXRhbCAqLworCQl9CisJCWlmIChsaXN0ZW4oc29ja2ZkLCA1KSA8IDApIHsKKwkJCWxvZ2Vycm9yKCJDb3VsZCBub3QgbGlzdGVuIHRvICVzOiAlcyIsCisJCQkJIGlwMnN0cihhaS0+YWlfZmFtaWx5LCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pLAorCQkJCSBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2Uoc29ja2ZkKTsKKwkJCWNvbnRpbnVlOwkvKiBub3QgZmF0YWwgKi8KKwkJfQorCisJCWZsYWdzID0gZmNudGwoc29ja2ZkLCBGX0dFVEZELCAwKTsKKwkJaWYgKGZsYWdzID49IDApCisJCQlmY250bChzb2NrZmQsIEZfU0VURkQsIGZsYWdzIHwgRkRfQ0xPRVhFQyk7CisKKwkJQUxMT0NfR1JPVyhzb2NrbGlzdC0+bGlzdCwgc29ja2xpc3QtPm5yICsgMSwgc29ja2xpc3QtPmFsbG9jKTsKKwkJc29ja2xpc3QtPmxpc3Rbc29ja2xpc3QtPm5yKytdID0gc29ja2ZkOworCQlzb2NrbnVtKys7CisJfQorCisJZnJlZWFkZHJpbmZvKGFpMCk7CisKKwlyZXR1cm4gc29ja251bTsKK30KKworI2Vsc2UgLyogTk9fSVBWNiAqLworCitzdGF0aWMgaW50IHNldHVwX25hbWVkX3NvY2soY2hhciAqbGlzdGVuX2FkZHIsIGludCBsaXN0ZW5fcG9ydCwgc3RydWN0IHNvY2tldGxpc3QgKnNvY2tsaXN0KQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJaW50IHNvY2tmZDsKKwlsb25nIGZsYWdzOworCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZiBzaW4pOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhsaXN0ZW5fcG9ydCk7CisKKwlpZiAobGlzdGVuX2FkZHIpIHsKKwkJLyogV2VsbCwgaG9zdCBiZXR0ZXIgYmUgYW4gSVAgYWRkcmVzcyBoZXJlLiAqLworCQlpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGxpc3Rlbl9hZGRyLCAmc2luLnNpbl9hZGRyLnNfYWRkcikgPD0gMCkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKwl9CisKKwlzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOworCWlmIChzb2NrZmQgPCAwKQorCQlyZXR1cm4gMDsKKworCWlmIChzZXRfcmV1c2VfYWRkcihzb2NrZmQpKSB7CisJCWxvZ2Vycm9yKCJDb3VsZCBub3Qgc2V0IFNPX1JFVVNFQUREUjogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShzb2NrZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXRfa2VlcF9hbGl2ZShzb2NrZmQpOworCisJaWYgKCBiaW5kKHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZiBzaW4pIDwgMCApIHsKKwkJbG9nZXJyb3IoIkNvdWxkIG5vdCBiaW5kIHRvICVzOiAlcyIsCisJCQkgaXAyc3RyKEFGX0lORVQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSksCisJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2Uoc29ja2ZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxpc3Rlbihzb2NrZmQsIDUpIDwgMCkgeworCQlsb2dlcnJvcigiQ291bGQgbm90IGxpc3RlbiB0byAlczogJXMiLAorCQkJIGlwMnN0cihBRl9JTkVULCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHNpbikpLAorCQkJIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKHNvY2tmZCk7CisJCXJldHVybiAwOworCX0KKworCWZsYWdzID0gZmNudGwoc29ja2ZkLCBGX0dFVEZELCAwKTsKKwlpZiAoZmxhZ3MgPj0gMCkKKwkJZmNudGwoc29ja2ZkLCBGX1NFVEZELCBmbGFncyB8IEZEX0NMT0VYRUMpOworCisJQUxMT0NfR1JPVyhzb2NrbGlzdC0+bGlzdCwgc29ja2xpc3QtPm5yICsgMSwgc29ja2xpc3QtPmFsbG9jKTsKKwlzb2NrbGlzdC0+bGlzdFtzb2NrbGlzdC0+bnIrK10gPSBzb2NrZmQ7CisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzb2Nrc2V0dXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ZW5fYWRkciwgaW50IGxpc3Rlbl9wb3J0LCBzdHJ1Y3Qgc29ja2V0bGlzdCAqc29ja2xpc3QpCit7CisJaWYgKCFsaXN0ZW5fYWRkci0+bnIpCisJCXNldHVwX25hbWVkX3NvY2soTlVMTCwgbGlzdGVuX3BvcnQsIHNvY2tsaXN0KTsKKwllbHNlIHsKKwkJaW50IGksIHNvY2tudW07CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0ZW5fYWRkci0+bnI7IGkrKykgeworCQkJc29ja251bSA9IHNldHVwX25hbWVkX3NvY2sobGlzdGVuX2FkZHItPml0ZW1zW2ldLnN0cmluZywKKwkJCQkJCSAgIGxpc3Rlbl9wb3J0LCBzb2NrbGlzdCk7CisKKwkJCWlmIChzb2NrbnVtID09IDApCisJCQkJbG9nZXJyb3IoInVuYWJsZSB0byBhbGxvY2F0ZSBhbnkgbGlzdGVuIHNvY2tldHMgZm9yIGhvc3QgJXMgb24gcG9ydCAldSIsCisJCQkJCSBsaXN0ZW5fYWRkci0+aXRlbXNbaV0uc3RyaW5nLCBsaXN0ZW5fcG9ydCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc2VydmljZV9sb29wKHN0cnVjdCBzb2NrZXRsaXN0ICpzb2NrbGlzdCkKK3sKKwlzdHJ1Y3QgcG9sbGZkICpwZmQ7CisJaW50IGk7CisKKwlwZmQgPSB4Y2FsbG9jKHNvY2tsaXN0LT5uciwgc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2NrbGlzdC0+bnI7IGkrKykgeworCQlwZmRbaV0uZmQgPSBzb2NrbGlzdC0+bGlzdFtpXTsKKwkJcGZkW2ldLmV2ZW50cyA9IFBPTExJTjsKKwl9CisKKwlzaWduYWwoU0lHQ0hMRCwgY2hpbGRfaGFuZGxlcik7CisKKwlmb3IgKDs7KSB7CisJCWludCBpOworCisJCWNoZWNrX2RlYWRfY2hpbGRyZW4oKTsKKworCQlpZiAocG9sbChwZmQsIHNvY2tsaXN0LT5uciwgLTEpIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQkJbG9nZXJyb3IoIlBvbGwgZmFpbGVkLCByZXN1bWluZzogJXMiLAorCQkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJc2xlZXAoMSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBzb2NrbGlzdC0+bnI7IGkrKykgeworCQkJaWYgKHBmZFtpXS5yZXZlbnRzICYgUE9MTElOKSB7CisJCQkJdW5pb24geworCQkJCQlzdHJ1Y3Qgc29ja2FkZHIgc2E7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiBzYWk7CisjaWZuZGVmIE5PX0lQVjYKKwkJCQkJc3RydWN0IHNvY2thZGRyX2luNiBzYWk2OworI2VuZGlmCisJCQkJfSBzczsKKwkJCQlzb2NrbGVuX3Qgc3NsZW4gPSBzaXplb2Yoc3MpOworCQkJCWludCBpbmNvbWluZyA9IGFjY2VwdChwZmRbaV0uZmQsICZzcy5zYSwgJnNzbGVuKTsKKwkJCQlpZiAoaW5jb21pbmcgPCAwKSB7CisJCQkJCXN3aXRjaCAoZXJybm8pIHsKKwkJCQkJY2FzZSBFQUdBSU46CisJCQkJCWNhc2UgRUlOVFI6CisJCQkJCWNhc2UgRUNPTk5BQk9SVEVEOgorCQkJCQkJY29udGludWU7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlkaWVfZXJybm8oImFjY2VwdCByZXR1cm5lZCIpOworCQkJCQl9CisJCQkJfQorCQkJCWhhbmRsZShpbmNvbWluZywgJnNzLnNhLCBzc2xlbik7CisJCQl9CisJCX0KKwl9Cit9CisKKyNpZmRlZiBOT19QT1NJWF9HT09ESUVTCisKK3N0cnVjdCBjcmVkZW50aWFsczsKKworc3RhdGljIHZvaWQgZHJvcF9wcml2aWxlZ2VzKHN0cnVjdCBjcmVkZW50aWFscyAqY3JlZCkKK3sKKwkvKiBub3RoaW5nICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbHMgKnByZXBhcmVfY3JlZGVudGlhbHMoY29uc3QgY2hhciAqdXNlcl9uYW1lLAorICAgIGNvbnN0IGNoYXIgKmdyb3VwX25hbWUpCit7CisJZGllKCItLXVzZXIgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7Cit9CisKKyNlbHNlCisKK3N0cnVjdCBjcmVkZW50aWFscyB7CisJc3RydWN0IHBhc3N3ZCAqcGFzczsKKwlnaWRfdCBnaWQ7Cit9OworCitzdGF0aWMgdm9pZCBkcm9wX3ByaXZpbGVnZXMoc3RydWN0IGNyZWRlbnRpYWxzICpjcmVkKQoreworCWlmIChjcmVkICYmIChpbml0Z3JvdXBzKGNyZWQtPnBhc3MtPnB3X25hbWUsIGNyZWQtPmdpZCkgfHwKKwkgICAgc2V0Z2lkIChjcmVkLT5naWQpIHx8IHNldHVpZChjcmVkLT5wYXNzLT5wd191aWQpKSkKKwkJZGllKCJjYW5ub3QgZHJvcCBwcml2aWxlZ2VzIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbHMgKnByZXBhcmVfY3JlZGVudGlhbHMoY29uc3QgY2hhciAqdXNlcl9uYW1lLAorICAgIGNvbnN0IGNoYXIgKmdyb3VwX25hbWUpCit7CisJc3RhdGljIHN0cnVjdCBjcmVkZW50aWFscyBjOworCisJYy5wYXNzID0gZ2V0cHduYW0odXNlcl9uYW1lKTsKKwlpZiAoIWMucGFzcykKKwkJZGllKCJ1c2VyIG5vdCBmb3VuZCAtICVzIiwgdXNlcl9uYW1lKTsKKworCWlmICghZ3JvdXBfbmFtZSkKKwkJYy5naWQgPSBjLnBhc3MtPnB3X2dpZDsKKwllbHNlIHsKKwkJc3RydWN0IGdyb3VwICpncm91cCA9IGdldGdybmFtKGdyb3VwX25hbWUpOworCQlpZiAoIWdyb3VwKQorCQkJZGllKCJncm91cCBub3QgZm91bmQgLSAlcyIsIGdyb3VwX25hbWUpOworCisJCWMuZ2lkID0gZ3JvdXAtPmdyX2dpZDsKKwl9CisKKwlyZXR1cm4gJmM7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzZXJ2ZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3Rlbl9hZGRyLCBpbnQgbGlzdGVuX3BvcnQsCisgICAgc3RydWN0IGNyZWRlbnRpYWxzICpjcmVkKQoreworCXN0cnVjdCBzb2NrZXRsaXN0IHNvY2tsaXN0ID0geyBOVUxMLCAwLCAwIH07CisKKwlzb2Nrc2V0dXAobGlzdGVuX2FkZHIsIGxpc3Rlbl9wb3J0LCAmc29ja2xpc3QpOworCWlmIChzb2NrbGlzdC5uciA9PSAwKQorCQlkaWUoInVuYWJsZSB0byBhbGxvY2F0ZSBhbnkgbGlzdGVuIHNvY2tldHMgb24gcG9ydCAldSIsCisJCSAgICBsaXN0ZW5fcG9ydCk7CisKKwlkcm9wX3ByaXZpbGVnZXMoY3JlZCk7CisKKwlsb2dpbmZvKCJSZWFkeSB0byBydW1ibGUiKTsKKworCXJldHVybiBzZXJ2aWNlX2xvb3AoJnNvY2tsaXN0KTsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgbGlzdGVuX3BvcnQgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ZW5fYWRkciA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IHNlcnZlX21vZGUgPSAwLCBpbmV0ZF9tb2RlID0gMDsKKwljb25zdCBjaGFyICpwaWRfZmlsZSA9IE5VTEwsICp1c2VyX25hbWUgPSBOVUxMLCAqZ3JvdXBfbmFtZSA9IE5VTEw7CisJaW50IGRldGFjaCA9IDA7CisJc3RydWN0IGNyZWRlbnRpYWxzICpjcmVkID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJY29uc3QgY2hhciAqdjsKKworCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1saXN0ZW49IiwgJnYpKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3Rlbl9hZGRyLCB4c3RyZHVwX3RvbG93ZXIodikpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tcG9ydD0iLCAmdikpIHsKKwkJCWNoYXIgKmVuZDsKKwkJCXVuc2lnbmVkIGxvbmcgbjsKKwkJCW4gPSBzdHJ0b3VsKHYsICZlbmQsIDApOworCQkJaWYgKCp2ICYmICEqZW5kKSB7CisJCQkJbGlzdGVuX3BvcnQgPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tc2VydmUiKSkgeworCQkJc2VydmVfbW9kZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWluZXRkIikpIHsKKwkJCWluZXRkX21vZGUgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpIHsKKwkJCXZlcmJvc2UgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zeXNsb2ciKSkgeworCQkJbG9nX2Rlc3RpbmF0aW9uID0gTE9HX0RFU1RJTkFUSU9OX1NZU0xPRzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWxvZy1kZXN0aW5hdGlvbj0iLCAmdikpIHsKKwkJCWlmICghc3RyY21wKHYsICJzeXNsb2ciKSkgeworCQkJCWxvZ19kZXN0aW5hdGlvbiA9IExPR19ERVNUSU5BVElPTl9TWVNMT0c7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAodiwgInN0ZGVyciIpKSB7CisJCQkJbG9nX2Rlc3RpbmF0aW9uID0gTE9HX0RFU1RJTkFUSU9OX1NUREVSUjsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCh2LCAibm9uZSIpKSB7CisJCQkJbG9nX2Rlc3RpbmF0aW9uID0gTE9HX0RFU1RJTkFUSU9OX05PTkU7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UKKwkJCQlkaWUoInVua25vd24gbG9nIGRlc3RpbmF0aW9uICclcyciLCB2KTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWV4cG9ydC1hbGwiKSkgeworCQkJZXhwb3J0X2FsbF90cmVlcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1hY2Nlc3MtaG9vaz0iLCAmdikpIHsKKwkJCWFjY2Vzc19ob29rID0gdjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLXRpbWVvdXQ9IiwgJnYpKSB7CisJCQl0aW1lb3V0ID0gYXRvaSh2KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWluaXQtdGltZW91dD0iLCAmdikpIHsKKwkJCWluaXRfdGltZW91dCA9IGF0b2kodik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1tYXgtY29ubmVjdGlvbnM9IiwgJnYpKSB7CisJCQltYXhfY29ubmVjdGlvbnMgPSBhdG9pKHYpOworCQkJaWYgKG1heF9jb25uZWN0aW9ucyA8IDApCisJCQkJbWF4X2Nvbm5lY3Rpb25zID0gMDsJICAgICAgICAvKiB1bmxpbWl0ZWQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tc3RyaWN0LXBhdGhzIikpIHsKKwkJCXN0cmljdF9wYXRocyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1iYXNlLXBhdGg9IiwgJnYpKSB7CisJCQliYXNlX3BhdGggPSB2OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iYXNlLXBhdGgtcmVsYXhlZCIpKSB7CisJCQliYXNlX3BhdGhfcmVsYXhlZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1pbnRlcnBvbGF0ZWQtcGF0aD0iLCAmdikpIHsKKwkJCWludGVycG9sYXRlZF9wYXRoID0gdjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tcmV1c2VhZGRyIikpIHsKKwkJCXJldXNlYWRkciA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXVzZXItcGF0aCIpKSB7CisJCQl1c2VyX3BhdGggPSAiIjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLXVzZXItcGF0aD0iLCAmdikpIHsKKwkJCXVzZXJfcGF0aCA9IHY7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1waWQtZmlsZT0iLCAmdikpIHsKKwkJCXBpZF9maWxlID0gdjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tZGV0YWNoIikpIHsKKwkJCWRldGFjaCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS11c2VyPSIsICZ2KSkgeworCQkJdXNlcl9uYW1lID0gdjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWdyb3VwPSIsICZ2KSkgeworCQkJZ3JvdXBfbmFtZSA9IHY7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1lbmFibGU9IiwgJnYpKSB7CisJCQllbmFibGVfc2VydmljZSh2LCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWRpc2FibGU9IiwgJnYpKSB7CisJCQllbmFibGVfc2VydmljZSh2LCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWFsbG93LW92ZXJyaWRlPSIsICZ2KSkgeworCQkJbWFrZV9zZXJ2aWNlX292ZXJyaWRhYmxlKHYsIDEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tZm9yYmlkLW92ZXJyaWRlPSIsICZ2KSkgeworCQkJbWFrZV9zZXJ2aWNlX292ZXJyaWRhYmxlKHYsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pbmZvcm1hdGl2ZS1lcnJvcnMiKSkgeworCQkJaW5mb3JtYXRpdmVfZXJyb3JzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tbm8taW5mb3JtYXRpdmUtZXJyb3JzIikpIHsKKwkJCWluZm9ybWF0aXZlX2Vycm9ycyA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlva19wYXRocyA9ICZhcmd2W2krMV07CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChhcmdbMF0gIT0gJy0nKSB7CisJCQlva19wYXRocyA9ICZhcmd2W2ldOworCQkJYnJlYWs7CisJCX0KKworCQl1c2FnZShkYWVtb25fdXNhZ2UpOworCX0KKworCWlmIChsb2dfZGVzdGluYXRpb24gPT0gTE9HX0RFU1RJTkFUSU9OX1VOU0VUKSB7CisJCWlmIChpbmV0ZF9tb2RlIHx8IGRldGFjaCkKKwkJCWxvZ19kZXN0aW5hdGlvbiA9IExPR19ERVNUSU5BVElPTl9TWVNMT0c7CisJCWVsc2UKKwkJCWxvZ19kZXN0aW5hdGlvbiA9IExPR19ERVNUSU5BVElPTl9TVERFUlI7CisJfQorCisJaWYgKGxvZ19kZXN0aW5hdGlvbiA9PSBMT0dfREVTVElOQVRJT05fU1lTTE9HKSB7CisJCW9wZW5sb2coImdpdC1kYWVtb24iLCBMT0dfUElELCBMT0dfREFFTU9OKTsKKwkJc2V0X2RpZV9yb3V0aW5lKGRhZW1vbl9kaWUpOworCX0gZWxzZQorCQkvKiBhdm9pZCBzcGxpdHRpbmcgYSBtZXNzYWdlIGluIHRoZSBtaWRkbGUgKi8KKwkJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT0ZCRiwgNDA5Nik7CisKKwlpZiAoaW5ldGRfbW9kZSAmJiAoZGV0YWNoIHx8IGdyb3VwX25hbWUgfHwgdXNlcl9uYW1lKSkKKwkJZGllKCItLWRldGFjaCwgLS11c2VyIGFuZCAtLWdyb3VwIGFyZSBpbmNvbXBhdGlibGUgd2l0aCAtLWluZXRkIik7CisKKwlpZiAoaW5ldGRfbW9kZSAmJiAobGlzdGVuX3BvcnQgfHwgKGxpc3Rlbl9hZGRyLm5yID4gMCkpKQorCQlkaWUoIi0tbGlzdGVuPSBhbmQgLS1wb3J0PSBhcmUgaW5jb21wYXRpYmxlIHdpdGggLS1pbmV0ZCIpOworCWVsc2UgaWYgKGxpc3Rlbl9wb3J0ID09IDApCisJCWxpc3Rlbl9wb3J0ID0gREVGQVVMVF9HSVRfUE9SVDsKKworCWlmIChncm91cF9uYW1lICYmICF1c2VyX25hbWUpCisJCWRpZSgiLS1ncm91cCBzdXBwbGllZCB3aXRob3V0IC0tdXNlciIpOworCisJaWYgKHVzZXJfbmFtZSkKKwkJY3JlZCA9IHByZXBhcmVfY3JlZGVudGlhbHModXNlcl9uYW1lLCBncm91cF9uYW1lKTsKKworCWlmIChzdHJpY3RfcGF0aHMgJiYgKCFva19wYXRocyB8fCAhKm9rX3BhdGhzKSkKKwkJZGllKCJvcHRpb24gLS1zdHJpY3QtcGF0aHMgcmVxdWlyZXMgYSB3aGl0ZWxpc3QiKTsKKworCWlmIChiYXNlX3BhdGggJiYgIWlzX2RpcmVjdG9yeShiYXNlX3BhdGgpKQorCQlkaWUoImJhc2UtcGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIsCisJCSAgICBiYXNlX3BhdGgpOworCisJaWYgKGxvZ19kZXN0aW5hdGlvbiAhPSBMT0dfREVTVElOQVRJT05fU1RERVJSKSB7CisJCWlmICghZnJlb3BlbigiL2Rldi9udWxsIiwgInciLCBzdGRlcnIpKQorCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbCIpOworCX0KKworCWlmIChpbmV0ZF9tb2RlIHx8IHNlcnZlX21vZGUpCisJCXJldHVybiBleGVjdXRlKCk7CisKKwlpZiAoZGV0YWNoKSB7CisJCWlmIChkYWVtb25pemUoKSkKKwkJCWRpZSgiLS1kZXRhY2ggbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CisJfQorCisJaWYgKHBpZF9maWxlKQorCQl3cml0ZV9maWxlKHBpZF9maWxlLCAiJSJQUkl1TUFYLCAodWludG1heF90KSBnZXRwaWQoKSk7CisKKwkvKiBwcmVwYXJlIGFyZ3YgZm9yIHNlcnZpbmctcHJvY2Vzc2VzICovCisJYXJndl9hcnJheV9wdXNoKCZjbGRfYXJndiwgYXJndlswXSk7IC8qIGdpdC1kYWVtb24gKi8KKwlhcmd2X2FycmF5X3B1c2goJmNsZF9hcmd2LCAiLS1zZXJ2ZSIpOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyArK2kpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2xkX2FyZ3YsIGFyZ3ZbaV0pOworCisJcmV0dXJuIHNlcnZlKCZsaXN0ZW5fYWRkciwgbGlzdGVuX3BvcnQsIGNyZWQpOworfQpkaWZmIC0tZ2l0IGEvZGF0ZS5jIGIvZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZDlhODQKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRlLmMKQEAgLTAsMCArMSwxMzM2IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisvKgorICogVGhpcyBpcyBsaWtlIG1rdGltZSwgYnV0IHdpdGhvdXQgbm9ybWFsaXphdGlvbiBvZiB0bV93ZGF5IGFuZCB0bV95ZGF5LgorICovCitzdGF0aWMgdGltZV90IHRtX3RvX3RpbWVfdChjb25zdCBzdHJ1Y3QgdG0gKnRtKQoreworCXN0YXRpYyBjb25zdCBpbnQgbWRheXNbXSA9IHsKKwkgICAgMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQKKwl9OworCWludCB5ZWFyID0gdG0tPnRtX3llYXIgLSA3MDsKKwlpbnQgbW9udGggPSB0bS0+dG1fbW9uOworCWludCBkYXkgPSB0bS0+dG1fbWRheTsKKworCWlmICh5ZWFyIDwgMCB8fCB5ZWFyID4gMTI5KSAvKiBhbGdvIG9ubHkgd29ya3MgZm9yIDE5NzAtMjA5OSAqLworCQlyZXR1cm4gLTE7CisJaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKSAvKiBhcnJheSBib3VuZHMgKi8KKwkJcmV0dXJuIC0xOworCWlmIChtb250aCA8IDIgfHwgKHllYXIgKyAyKSAlIDQpCisJCWRheS0tOworCWlmICh0bS0+dG1faG91ciA8IDAgfHwgdG0tPnRtX21pbiA8IDAgfHwgdG0tPnRtX3NlYyA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gKHllYXIgKiAzNjUgKyAoeWVhciArIDEpIC8gNCArIG1kYXlzW21vbnRoXSArIGRheSkgKiAyNCo2MCo2MFVMICsKKwkJdG0tPnRtX2hvdXIgKiA2MCo2MCArIHRtLT50bV9taW4gKiA2MCArIHRtLT50bV9zZWM7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICptb250aF9uYW1lc1tdID0geworCSJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwKKwkiSnVseSIsICJBdWd1c3QiLCAiU2VwdGVtYmVyIiwgIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqd2Vla2RheV9uYW1lc1tdID0geworCSJTdW5kYXlzIiwgIk1vbmRheXMiLCAiVHVlc2RheXMiLCAiV2VkbmVzZGF5cyIsICJUaHVyc2RheXMiLCAiRnJpZGF5cyIsICJTYXR1cmRheXMiCit9OworCitzdGF0aWMgdGltZV90IGdtX3RpbWVfdCh0aW1lc3RhbXBfdCB0aW1lLCBpbnQgdHopCit7CisJaW50IG1pbnV0ZXM7CisKKwltaW51dGVzID0gdHogPCAwID8gLXR6IDogdHo7CisJbWludXRlcyA9IChtaW51dGVzIC8gMTAwKSo2MCArIChtaW51dGVzICUgMTAwKTsKKwltaW51dGVzID0gdHogPCAwID8gLW1pbnV0ZXMgOiBtaW51dGVzOworCisJaWYgKG1pbnV0ZXMgPiAwKSB7CisJCWlmICh1bnNpZ25lZF9hZGRfb3ZlcmZsb3dzKHRpbWUsIG1pbnV0ZXMgKiA2MCkpCisJCQlkaWUoIlRpbWVzdGFtcCt0eiB0b28gbGFyZ2U6ICUiUFJJdGltZSIgKyUwNGQiLAorCQkJICAgIHRpbWUsIHR6KTsKKwl9IGVsc2UgaWYgKHRpbWUgPCAtbWludXRlcyAqIDYwKQorCQlkaWUoIlRpbWVzdGFtcCBiZWZvcmUgVW5peCBlcG9jaDogJSJQUkl0aW1lIiAlMDRkIiwgdGltZSwgdHopOworCXRpbWUgKz0gbWludXRlcyAqIDYwOworCWlmIChkYXRlX292ZXJmbG93cyh0aW1lKSkKKwkJZGllKCJUaW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJSJQUkl0aW1lLCB0aW1lKTsKKwlyZXR1cm4gKHRpbWVfdCl0aW1lOworfQorCisvKgorICogVGhlICJ0eiIgdGhpbmcgaXMgcGFzc2VkIGluIGFzIHRoaXMgc3RyYW5nZSAiZGVjaW1hbCBwYXJzZSBvZiB0eiIKKyAqIHRoaW5nLCB3aGljaCBtZWFucyB0aGF0IHR6IC0wMTAwIGlzIHBhc3NlZCBpbiBhcyB0aGUgaW50ZWdlciAtMTAwLAorICogZXZlbiB0aG91Z2ggaXQgbWVhbnMgInNpeHR5IG1pbnV0ZXMgb2ZmIgorICovCitzdGF0aWMgc3RydWN0IHRtICp0aW1lX3RvX3RtKHRpbWVzdGFtcF90IHRpbWUsIGludCB0eiwgc3RydWN0IHRtICp0bSkKK3sKKwl0aW1lX3QgdCA9IGdtX3RpbWVfdCh0aW1lLCB0eik7CisJcmV0dXJuIGdtdGltZV9yKCZ0LCB0bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdG0gKnRpbWVfdG9fdG1fbG9jYWwodGltZXN0YW1wX3QgdGltZSwgc3RydWN0IHRtICp0bSkKK3sKKwl0aW1lX3QgdCA9IHRpbWU7CisJcmV0dXJuIGxvY2FsdGltZV9yKCZ0LCB0bSk7Cit9CisKKy8qCisgKiBGaWxsIGluIHRoZSBsb2NhbHRpbWUgJ3N0cnVjdCB0bScgZm9yIHRoZSBzdXBwbGllZCB0aW1lLAorICogYW5kIHJldHVybiB0aGUgbG9jYWwgdHouCisgKi8KK3N0YXRpYyBpbnQgbG9jYWxfdGltZV90em9mZnNldCh0aW1lX3QgdCwgc3RydWN0IHRtICp0bSkKK3sKKwl0aW1lX3QgdF9sb2NhbDsKKwlpbnQgb2Zmc2V0LCBlYXN0d2VzdDsKKworCWxvY2FsdGltZV9yKCZ0LCB0bSk7CisJdF9sb2NhbCA9IHRtX3RvX3RpbWVfdCh0bSk7CisJaWYgKHRfbG9jYWwgPT0gLTEpCisJCXJldHVybiAwOyAvKiBlcnJvcjsganVzdCB1c2UgKzAwMDAgKi8KKwlpZiAodF9sb2NhbCA8IHQpIHsKKwkJZWFzdHdlc3QgPSAtMTsKKwkJb2Zmc2V0ID0gdCAtIHRfbG9jYWw7CisJfSBlbHNlIHsKKwkJZWFzdHdlc3QgPSAxOworCQlvZmZzZXQgPSB0X2xvY2FsIC0gdDsKKwl9CisJb2Zmc2V0IC89IDYwOyAvKiBpbiBtaW51dGVzICovCisJb2Zmc2V0ID0gKG9mZnNldCAlIDYwKSArICgob2Zmc2V0IC8gNjApICogMTAwKTsKKwlyZXR1cm4gb2Zmc2V0ICogZWFzdHdlc3Q7Cit9CisKKy8qCisgKiBXaGF0IHZhbHVlIG9mICJ0eiIgd2FzIGluIGVmZmVjdCBiYWNrIHRoZW4gYXQgInRpbWUiIGluIHRoZQorICogbG9jYWwgdGltZXpvbmU/CisgKi8KK3N0YXRpYyBpbnQgbG9jYWxfdHpvZmZzZXQodGltZXN0YW1wX3QgdGltZSkKK3sKKwlzdHJ1Y3QgdG0gdG07CisKKwlpZiAoZGF0ZV9vdmVyZmxvd3ModGltZSkpCisJCWRpZSgiVGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICUiUFJJdGltZSwgdGltZSk7CisKKwlyZXR1cm4gbG9jYWxfdGltZV90em9mZnNldCgodGltZV90KXRpbWUsICZ0bSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF90aW1lKHN0cnVjdCB0aW1ldmFsICpub3cpCit7CisJY29uc3QgY2hhciAqeDsKKworCXggPSBnZXRlbnYoIkdJVF9URVNUX0RBVEVfTk9XIik7CisJaWYgKHgpIHsKKwkJbm93LT50dl9zZWMgPSBhdG9pKHgpOworCQlub3ctPnR2X3VzZWMgPSAwOworCX0KKwllbHNlCisJCWdldHRpbWVvZmRheShub3csIE5VTEwpOworfQorCit2b2lkIHNob3dfZGF0ZV9yZWxhdGl2ZSh0aW1lc3RhbXBfdCB0aW1lLCBzdHJ1Y3Qgc3RyYnVmICp0aW1lYnVmKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwl0aW1lc3RhbXBfdCBkaWZmOworCisJZ2V0X3RpbWUoJm5vdyk7CisJaWYgKG5vdy50dl9zZWMgPCB0aW1lKSB7CisJCXN0cmJ1Zl9hZGRzdHIodGltZWJ1ZiwgXygiaW4gdGhlIGZ1dHVyZSIpKTsKKwkJcmV0dXJuOworCX0KKwlkaWZmID0gbm93LnR2X3NlYyAtIHRpbWU7CisJaWYgKGRpZmYgPCA5MCkgeworCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJIFFfKCIlIlBSSXRpbWUiIHNlY29uZCBhZ28iLCAiJSJQUkl0aW1lIiBzZWNvbmRzIGFnbyIsIGRpZmYpLCBkaWZmKTsKKwkJcmV0dXJuOworCX0KKwkvKiBUdXJuIGl0IGludG8gbWludXRlcyAqLworCWRpZmYgPSAoZGlmZiArIDMwKSAvIDYwOworCWlmIChkaWZmIDwgOTApIHsKKwkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCSBRXygiJSJQUkl0aW1lIiBtaW51dGUgYWdvIiwgIiUiUFJJdGltZSIgbWludXRlcyBhZ28iLCBkaWZmKSwgZGlmZik7CisJCXJldHVybjsKKwl9CisJLyogVHVybiBpdCBpbnRvIGhvdXJzICovCisJZGlmZiA9IChkaWZmICsgMzApIC8gNjA7CisJaWYgKGRpZmYgPCAzNikgeworCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJIFFfKCIlIlBSSXRpbWUiIGhvdXIgYWdvIiwgIiUiUFJJdGltZSIgaG91cnMgYWdvIiwgZGlmZiksIGRpZmYpOworCQlyZXR1cm47CisJfQorCS8qIFdlIGRlYWwgd2l0aCBudW1iZXIgb2YgZGF5cyBmcm9tIGhlcmUgb24gKi8KKwlkaWZmID0gKGRpZmYgKyAxMikgLyAyNDsKKwlpZiAoZGlmZiA8IDE0KSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiUiUFJJdGltZSIgZGF5IGFnbyIsICIlIlBSSXRpbWUiIGRheXMgYWdvIiwgZGlmZiksIGRpZmYpOworCQlyZXR1cm47CisJfQorCS8qIFNheSB3ZWVrcyBmb3IgdGhlIHBhc3QgMTAgd2Vla3Mgb3Igc28gKi8KKwlpZiAoZGlmZiA8IDcwKSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiUiUFJJdGltZSIgd2VlayBhZ28iLCAiJSJQUkl0aW1lIiB3ZWVrcyBhZ28iLCAoZGlmZiArIDMpIC8gNyksCisJCQkgKGRpZmYgKyAzKSAvIDcpOworCQlyZXR1cm47CisJfQorCS8qIFNheSBtb250aHMgZm9yIHRoZSBwYXN0IDEyIG1vbnRocyBvciBzbyAqLworCWlmIChkaWZmIDwgMzY1KSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiUiUFJJdGltZSIgbW9udGggYWdvIiwgIiUiUFJJdGltZSIgbW9udGhzIGFnbyIsIChkaWZmICsgMTUpIC8gMzApLAorCQkJIChkaWZmICsgMTUpIC8gMzApOworCQlyZXR1cm47CisJfQorCS8qIEdpdmUgeWVhcnMgYW5kIG1vbnRocyBmb3IgNSB5ZWFycyBvciBzbyAqLworCWlmIChkaWZmIDwgMTgyNSkgeworCQl0aW1lc3RhbXBfdCB0b3RhbG1vbnRocyA9IChkaWZmICogMTIgKiAyICsgMzY1KSAvICgzNjUgKiAyKTsKKwkJdGltZXN0YW1wX3QgeWVhcnMgPSB0b3RhbG1vbnRocyAvIDEyOworCQl0aW1lc3RhbXBfdCBtb250aHMgPSB0b3RhbG1vbnRocyAlIDEyOworCQlpZiAobW9udGhzKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkZigmc2IsIFFfKCIlIlBSSXRpbWUiIHllYXIiLCAiJSJQUkl0aW1lIiB5ZWFycyIsIHllYXJzKSwgeWVhcnMpOworCQkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCQkgLyogVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIgKi8KKwkJCQkgUV8oIiVzLCAlIlBSSXRpbWUiIG1vbnRoIGFnbyIsICIlcywgJSJQUkl0aW1lIiBtb250aHMgYWdvIiwgbW9udGhzKSwKKwkJCQkgc2IuYnVmLCBtb250aHMpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJfSBlbHNlCisJCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJCSBRXygiJSJQUkl0aW1lIiB5ZWFyIGFnbyIsICIlIlBSSXRpbWUiIHllYXJzIGFnbyIsIHllYXJzKSwgeWVhcnMpOworCQlyZXR1cm47CisJfQorCS8qIE90aGVyd2lzZSwganVzdCB5ZWFycy4gQ2VudHVyaWVzIGlzIHByb2JhYmx5IG92ZXJraWxsLiAqLworCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCSBRXygiJSJQUkl0aW1lIiB5ZWFyIGFnbyIsICIlIlBSSXRpbWUiIHllYXJzIGFnbyIsIChkaWZmICsgMTgzKSAvIDM2NSksCisJCSAoZGlmZiArIDE4MykgLyAzNjUpOworfQorCitzdHJ1Y3QgZGF0ZV9tb2RlICpkYXRlX21vZGVfZnJvbV90eXBlKGVudW0gZGF0ZV9tb2RlX3R5cGUgdHlwZSkKK3sKKwlzdGF0aWMgc3RydWN0IGRhdGVfbW9kZSBtb2RlOworCWlmICh0eXBlID09IERBVEVfU1RSRlRJTUUpCisJCUJVRygiY2Fubm90IGNyZWF0ZSBhbm9ueW1vdXMgc3RyZnRpbWUgZGF0ZV9tb2RlIHN0cnVjdCIpOworCW1vZGUudHlwZSA9IHR5cGU7CisJbW9kZS5sb2NhbCA9IDA7CisJcmV0dXJuICZtb2RlOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RhdGVfbm9ybWFsKHN0cnVjdCBzdHJidWYgKmJ1ZiwgdGltZXN0YW1wX3QgdGltZSwgc3RydWN0IHRtICp0bSwgaW50IHR6LCBzdHJ1Y3QgdG0gKmh1bWFuX3RtLCBpbnQgaHVtYW5fdHosIGludCBsb2NhbCkKK3sKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQJeWVhcjoxLAorCQkJCWRhdGU6MSwKKwkJCQl3ZGF5OjEsCisJCQkJdGltZToxLAorCQkJCXNlY29uZHM6MSwKKwkJCQl0ejoxOworCX0gaGlkZSA9IHsgMCB9OworCisJaGlkZS50eiA9IGxvY2FsIHx8IHR6ID09IGh1bWFuX3R6OworCWhpZGUueWVhciA9IHRtLT50bV95ZWFyID09IGh1bWFuX3RtLT50bV95ZWFyOworCWlmIChoaWRlLnllYXIpIHsKKwkJaWYgKHRtLT50bV9tb24gPT0gaHVtYW5fdG0tPnRtX21vbikgeworCQkJaWYgKHRtLT50bV9tZGF5ID4gaHVtYW5fdG0tPnRtX21kYXkpIHsKKwkJCQkvKiBGdXR1cmUgZGF0ZTogdGhpbmsgdGltZXpvbmVzICovCisJCQl9IGVsc2UgaWYgKHRtLT50bV9tZGF5ID09IGh1bWFuX3RtLT50bV9tZGF5KSB7CisJCQkJaGlkZS5kYXRlID0gaGlkZS53ZGF5ID0gMTsKKwkJCX0gZWxzZSBpZiAodG0tPnRtX21kYXkgKyA1ID4gaHVtYW5fdG0tPnRtX21kYXkpIHsKKwkJCQkvKiBMZWF2ZSBqdXN0IHdlZWtkYXkgaWYgaXQgd2FzIGEgZmV3IGRheXMgYWdvICovCisJCQkJaGlkZS5kYXRlID0gMTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFNob3cgInRvZGF5IiB0aW1lcyBhcyBqdXN0IHJlbGF0aXZlIHRpbWVzICovCisJaWYgKGhpZGUud2RheSkgeworCQlzaG93X2RhdGVfcmVsYXRpdmUodGltZSwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogQWx3YXlzIGhpZGUgc2Vjb25kcyBmb3IgaHVtYW4tcmVhZGFibGUuCisJICogSGlkZSB0aW1lem9uZSBpZiBzaG93aW5nIGRhdGUuCisJICogSGlkZSB3ZWVrZGF5IGFuZCB0aW1lIGlmIHNob3dpbmcgeWVhci4KKwkgKgorCSAqIFRoZSBsb2dpYyBoZXJlIGlzIHR3by1mb2xkOgorCSAqICAoYSkgb25seSBzaG93IGRldGFpbHMgd2hlbiByZWNlbnQgZW5vdWdoIHRvIG1hdHRlcgorCSAqICAoYikga2VlcCB0aGUgbWF4aW11bSBsZW5ndGggInNpbWlsYXIiLCBhbmQgaW4gY2hlY2sKKwkgKi8KKwlpZiAoaHVtYW5fdG0tPnRtX3llYXIpIHsKKwkJaGlkZS5zZWNvbmRzID0gMTsKKwkJaGlkZS50eiB8PSAhaGlkZS5kYXRlOworCQloaWRlLndkYXkgPSBoaWRlLnRpbWUgPSAhaGlkZS55ZWFyOworCX0KKworCWlmICghaGlkZS53ZGF5KQorCQlzdHJidWZfYWRkZihidWYsICIlLjNzICIsIHdlZWtkYXlfbmFtZXNbdG0tPnRtX3dkYXldKTsKKwlpZiAoIWhpZGUuZGF0ZSkKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJS4zcyAlZCAiLCBtb250aF9uYW1lc1t0bS0+dG1fbW9uXSwgdG0tPnRtX21kYXkpOworCisJLyogRG8gd2Ugd2FudCBBTS9QTSBkZXBlbmRpbmcgb24gbG9jYWxlPyAqLworCWlmICghaGlkZS50aW1lKSB7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUwMmQ6JTAyZCIsIHRtLT50bV9ob3VyLCB0bS0+dG1fbWluKTsKKwkJaWYgKCFoaWRlLnNlY29uZHMpCisJCQlzdHJidWZfYWRkZihidWYsICI6JTAyZCIsIHRtLT50bV9zZWMpOworCX0gZWxzZQorCQlzdHJidWZfcnRyaW0oYnVmKTsKKworCWlmICghaGlkZS55ZWFyKQorCQlzdHJidWZfYWRkZihidWYsICIgJWQiLCB0bS0+dG1feWVhciArIDE5MDApOworCisJaWYgKCFoaWRlLnR6KQorCQlzdHJidWZfYWRkZihidWYsICIgJSswNWQiLCB0eik7Cit9CisKK2NvbnN0IGNoYXIgKnNob3dfZGF0ZSh0aW1lc3RhbXBfdCB0aW1lLCBpbnQgdHosIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKm1vZGUpCit7CisJc3RydWN0IHRtICp0bTsKKwlzdHJ1Y3QgdG0gdG1idWYgPSB7IDAgfTsKKwlzdHJ1Y3QgdG0gaHVtYW5fdG0gPSB7IDAgfTsKKwlpbnQgaHVtYW5fdHogPSAtMTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB0aW1lYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAobW9kZS0+dHlwZSA9PSBEQVRFX1VOSVgpIHsKKwkJc3RyYnVmX3Jlc2V0KCZ0aW1lYnVmKTsKKwkJc3RyYnVmX2FkZGYoJnRpbWVidWYsICIlIlBSSXRpbWUsIHRpbWUpOworCQlyZXR1cm4gdGltZWJ1Zi5idWY7CisJfQorCisJaWYgKG1vZGUtPnR5cGUgPT0gREFURV9IVU1BTikgeworCQlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwkJZ2V0X3RpbWUoJm5vdyk7CisKKwkJLyogRmlsbCBpbiB0aGUgZGF0YSBmb3IgImN1cnJlbnQgdGltZSIgaW4gaHVtYW5fdHogYW5kIGh1bWFuX3RtICovCisJCWh1bWFuX3R6ID0gbG9jYWxfdGltZV90em9mZnNldChub3cudHZfc2VjLCAmaHVtYW5fdG0pOworCX0KKworCWlmIChtb2RlLT5sb2NhbCkKKwkJdHogPSBsb2NhbF90em9mZnNldCh0aW1lKTsKKworCWlmIChtb2RlLT50eXBlID09IERBVEVfUkFXKSB7CisJCXN0cmJ1Zl9yZXNldCgmdGltZWJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJSJQUkl0aW1lIiAlKzA1ZCIsIHRpbWUsIHR6KTsKKwkJcmV0dXJuIHRpbWVidWYuYnVmOworCX0KKworCWlmIChtb2RlLT50eXBlID09IERBVEVfUkVMQVRJVkUpIHsKKwkJc3RyYnVmX3Jlc2V0KCZ0aW1lYnVmKTsKKwkJc2hvd19kYXRlX3JlbGF0aXZlKHRpbWUsICZ0aW1lYnVmKTsKKwkJcmV0dXJuIHRpbWVidWYuYnVmOworCX0KKworCWlmIChtb2RlLT5sb2NhbCkKKwkJdG0gPSB0aW1lX3RvX3RtX2xvY2FsKHRpbWUsICZ0bWJ1Zik7CisJZWxzZQorCQl0bSA9IHRpbWVfdG9fdG0odGltZSwgdHosICZ0bWJ1Zik7CisJaWYgKCF0bSkgeworCQl0bSA9IHRpbWVfdG9fdG0oMCwgMCwgJnRtYnVmKTsKKwkJdHogPSAwOworCX0KKworCXN0cmJ1Zl9yZXNldCgmdGltZWJ1Zik7CisJaWYgKG1vZGUtPnR5cGUgPT0gREFURV9TSE9SVCkKKwkJc3RyYnVmX2FkZGYoJnRpbWVidWYsICIlMDRkLSUwMmQtJTAyZCIsIHRtLT50bV95ZWFyICsgMTkwMCwKKwkJCQl0bS0+dG1fbW9uICsgMSwgdG0tPnRtX21kYXkpOworCWVsc2UgaWYgKG1vZGUtPnR5cGUgPT0gREFURV9JU084NjAxKQorCQlzdHJidWZfYWRkZigmdGltZWJ1ZiwgIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkICUrMDVkIiwKKwkJCQl0bS0+dG1feWVhciArIDE5MDAsCisJCQkJdG0tPnRtX21vbiArIDEsCisJCQkJdG0tPnRtX21kYXksCisJCQkJdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsCisJCQkJdHopOworCWVsc2UgaWYgKG1vZGUtPnR5cGUgPT0gREFURV9JU084NjAxX1NUUklDVCkgeworCQljaGFyIHNpZ24gPSAodHogPj0gMCkgPyAnKycgOiAnLSc7CisJCXR6ID0gYWJzKHR6KTsKKwkJc3RyYnVmX2FkZGYoJnRpbWVidWYsICIlMDRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZCVjJTAyZDolMDJkIiwKKwkJCQl0bS0+dG1feWVhciArIDE5MDAsCisJCQkJdG0tPnRtX21vbiArIDEsCisJCQkJdG0tPnRtX21kYXksCisJCQkJdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsCisJCQkJc2lnbiwgdHogLyAxMDAsIHR6ICUgMTAwKTsKKwl9IGVsc2UgaWYgKG1vZGUtPnR5cGUgPT0gREFURV9SRkMyODIyKQorCQlzdHJidWZfYWRkZigmdGltZWJ1ZiwgIiUuM3MsICVkICUuM3MgJWQgJTAyZDolMDJkOiUwMmQgJSswNWQiLAorCQkJd2Vla2RheV9uYW1lc1t0bS0+dG1fd2RheV0sIHRtLT50bV9tZGF5LAorCQkJbW9udGhfbmFtZXNbdG0tPnRtX21vbl0sIHRtLT50bV95ZWFyICsgMTkwMCwKKwkJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjLCB0eik7CisJZWxzZSBpZiAobW9kZS0+dHlwZSA9PSBEQVRFX1NUUkZUSU1FKQorCQlzdHJidWZfYWRkZnRpbWUoJnRpbWVidWYsIG1vZGUtPnN0cmZ0aW1lX2ZtdCwgdG0sIHR6LAorCQkJCSFtb2RlLT5sb2NhbCk7CisJZWxzZQorCQlzaG93X2RhdGVfbm9ybWFsKCZ0aW1lYnVmLCB0aW1lLCB0bSwgdHosICZodW1hbl90bSwgaHVtYW5fdHosIG1vZGUtPmxvY2FsKTsKKwlyZXR1cm4gdGltZWJ1Zi5idWY7Cit9CisKKy8qCisgKiBDaGVjayB0aGVzZS4gQW5kIG5vdGUgaG93IGl0IGRvZXNuJ3QgZG8gdGhlIHN1bW1lci10aW1lIGNvbnZlcnNpb24uCisgKgorICogSW4gbXkgd29ybGQsIGl0J3MgYWx3YXlzIHN1bW1lciwgYW5kIHRoaW5ncyBhcmUgcHJvYmFibHkgYSBiaXQgb2ZmCisgKiBpbiBvdGhlciB3YXlzIHRvby4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgb2Zmc2V0OworCWludCBkc3Q7Cit9IHRpbWV6b25lX25hbWVzW10gPSB7CisJeyAiSURMVyIsIC0xMiwgMCwgfSwJLyogSW50ZXJuYXRpb25hbCBEYXRlIExpbmUgV2VzdCAqLworCXsgIk5UIiwgICAtMTEsIDAsIH0sCS8qIE5vbWUgKi8KKwl7ICJDQVQiLCAgLTEwLCAwLCB9LAkvKiBDZW50cmFsIEFsYXNrYSAqLworCXsgIkhTVCIsICAtMTAsIDAsIH0sCS8qIEhhd2FpaSBTdGFuZGFyZCAqLworCXsgIkhEVCIsICAtMTAsIDEsIH0sCS8qIEhhd2FpaSBEYXlsaWdodCAqLworCXsgIllTVCIsICAgLTksIDAsIH0sCS8qIFl1a29uIFN0YW5kYXJkICovCisJeyAiWURUIiwgICAtOSwgMSwgfSwJLyogWXVrb24gRGF5bGlnaHQgKi8KKwl7ICJQU1QiLCAgIC04LCAwLCB9LAkvKiBQYWNpZmljIFN0YW5kYXJkICovCisJeyAiUERUIiwgICAtOCwgMSwgfSwJLyogUGFjaWZpYyBEYXlsaWdodCAqLworCXsgIk1TVCIsICAgLTcsIDAsIH0sCS8qIE1vdW50YWluIFN0YW5kYXJkICovCisJeyAiTURUIiwgICAtNywgMSwgfSwJLyogTW91bnRhaW4gRGF5bGlnaHQgKi8KKwl7ICJDU1QiLCAgIC02LCAwLCB9LAkvKiBDZW50cmFsIFN0YW5kYXJkICovCisJeyAiQ0RUIiwgICAtNiwgMSwgfSwJLyogQ2VudHJhbCBEYXlsaWdodCAqLworCXsgIkVTVCIsICAgLTUsIDAsIH0sCS8qIEVhc3Rlcm4gU3RhbmRhcmQgKi8KKwl7ICJFRFQiLCAgIC01LCAxLCB9LAkvKiBFYXN0ZXJuIERheWxpZ2h0ICovCisJeyAiQVNUIiwgICAtMywgMCwgfSwJLyogQXRsYW50aWMgU3RhbmRhcmQgKi8KKwl7ICJBRFQiLCAgIC0zLCAxLCB9LAkvKiBBdGxhbnRpYyBEYXlsaWdodCAqLworCXsgIldBVCIsICAgLTEsIDAsIH0sCS8qIFdlc3QgQWZyaWNhICovCisKKwl7ICJHTVQiLCAgICAwLCAwLCB9LAkvKiBHcmVlbndpY2ggTWVhbiAqLworCXsgIlVUQyIsICAgIDAsIDAsIH0sCS8qIFVuaXZlcnNhbCAoQ29vcmRpbmF0ZWQpICovCisJeyAiWiIsICAgICAgMCwgMCwgfSwgICAgLyogWnVsdSwgYWxpYXMgZm9yIFVUQyAqLworCisJeyAiV0VUIiwgICAgMCwgMCwgfSwJLyogV2VzdGVybiBFdXJvcGVhbiAqLworCXsgIkJTVCIsICAgIDAsIDEsIH0sCS8qIEJyaXRpc2ggU3VtbWVyICovCisJeyAiQ0VUIiwgICArMSwgMCwgfSwJLyogQ2VudHJhbCBFdXJvcGVhbiAqLworCXsgIk1FVCIsICAgKzEsIDAsIH0sCS8qIE1pZGRsZSBFdXJvcGVhbiAqLworCXsgIk1FV1QiLCAgKzEsIDAsIH0sCS8qIE1pZGRsZSBFdXJvcGVhbiBXaW50ZXIgKi8KKwl7ICJNRVNUIiwgICsxLCAxLCB9LAkvKiBNaWRkbGUgRXVyb3BlYW4gU3VtbWVyICovCisJeyAiQ0VTVCIsICArMSwgMSwgfSwJLyogQ2VudHJhbCBFdXJvcGVhbiBTdW1tZXIgKi8KKwl7ICJNRVNaIiwgICsxLCAxLCB9LAkvKiBNaWRkbGUgRXVyb3BlYW4gU3VtbWVyICovCisJeyAiRldUIiwgICArMSwgMCwgfSwJLyogRnJlbmNoIFdpbnRlciAqLworCXsgIkZTVCIsICAgKzEsIDEsIH0sCS8qIEZyZW5jaCBTdW1tZXIgKi8KKwl7ICJFRVQiLCAgICsyLCAwLCB9LAkvKiBFYXN0ZXJuIEV1cm9wZSwgVVNTUiBab25lIDEgKi8KKwl7ICJFRVNUIiwgICsyLCAxLCB9LAkvKiBFYXN0ZXJuIEV1cm9wZWFuIERheWxpZ2h0ICovCisJeyAiV0FTVCIsICArNywgMCwgfSwJLyogV2VzdCBBdXN0cmFsaWFuIFN0YW5kYXJkICovCisJeyAiV0FEVCIsICArNywgMSwgfSwJLyogV2VzdCBBdXN0cmFsaWFuIERheWxpZ2h0ICovCisJeyAiQ0NUIiwgICArOCwgMCwgfSwJLyogQ2hpbmEgQ29hc3QsIFVTU1IgWm9uZSA3ICovCisJeyAiSlNUIiwgICArOSwgMCwgfSwJLyogSmFwYW4gU3RhbmRhcmQsIFVTU1IgWm9uZSA4ICovCisJeyAiRUFTVCIsICsxMCwgMCwgfSwJLyogRWFzdGVybiBBdXN0cmFsaWFuIFN0YW5kYXJkICovCisJeyAiRUFEVCIsICsxMCwgMSwgfSwJLyogRWFzdGVybiBBdXN0cmFsaWFuIERheWxpZ2h0ICovCisJeyAiR1NUIiwgICsxMCwgMCwgfSwJLyogR3VhbSBTdGFuZGFyZCwgVVNTUiBab25lIDkgKi8KKwl7ICJOWlQiLCAgKzEyLCAwLCB9LAkvKiBOZXcgWmVhbGFuZCAqLworCXsgIk5aU1QiLCArMTIsIDAsIH0sCS8qIE5ldyBaZWFsYW5kIFN0YW5kYXJkICovCisJeyAiTlpEVCIsICsxMiwgMSwgfSwJLyogTmV3IFplYWxhbmQgRGF5bGlnaHQgKi8KKwl7ICJJRExFIiwgKzEyLCAwLCB9LAkvKiBJbnRlcm5hdGlvbmFsIERhdGUgTGluZSBFYXN0ICovCit9OworCitzdGF0aWMgaW50IG1hdGNoX3N0cmluZyhjb25zdCBjaGFyICpkYXRlLCBjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gMDsgKmRhdGU7IGRhdGUrKywgc3RyKyssIGkrKykgeworCQlpZiAoKmRhdGUgPT0gKnN0cikKKwkJCWNvbnRpbnVlOworCQlpZiAodG91cHBlcigqZGF0ZSkgPT0gdG91cHBlcigqc3RyKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzYWxudW0oKmRhdGUpKQorCQkJYnJlYWs7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBza2lwX2FscGhhKGNvbnN0IGNoYXIgKmRhdGUpCit7CisJaW50IGkgPSAwOworCWRvIHsKKwkJaSsrOworCX0gd2hpbGUgKGlzYWxwaGEoZGF0ZVtpXSkpOworCXJldHVybiBpOworfQorCisvKgorKiBQYXJzZSBtb250aCwgd2Vla2RheSwgb3IgdGltZXpvbmUgbmFtZQorKi8KK3N0YXRpYyBpbnQgbWF0Y2hfYWxwaGEoY29uc3QgY2hhciAqZGF0ZSwgc3RydWN0IHRtICp0bSwgaW50ICpvZmZzZXQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgbW9udGhfbmFtZXNbaV0pOworCQlpZiAobWF0Y2ggPj0gMykgeworCQkJdG0tPnRtX21vbiA9IGk7CisJCQlyZXR1cm4gbWF0Y2g7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCWludCBtYXRjaCA9IG1hdGNoX3N0cmluZyhkYXRlLCB3ZWVrZGF5X25hbWVzW2ldKTsKKwkJaWYgKG1hdGNoID49IDMpIHsKKwkJCXRtLT50bV93ZGF5ID0gaTsKKwkJCXJldHVybiBtYXRjaDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRpbWV6b25lX25hbWVzKTsgaSsrKSB7CisJCWludCBtYXRjaCA9IG1hdGNoX3N0cmluZyhkYXRlLCB0aW1lem9uZV9uYW1lc1tpXS5uYW1lKTsKKwkJaWYgKG1hdGNoID49IDMgfHwgbWF0Y2ggPT0gc3RybGVuKHRpbWV6b25lX25hbWVzW2ldLm5hbWUpKSB7CisJCQlpbnQgb2ZmID0gdGltZXpvbmVfbmFtZXNbaV0ub2Zmc2V0OworCisJCQkvKiBUaGlzIGlzIGJvZ3VzLCBidXQgd2UgbGlrZSBzdW1tZXIgKi8KKwkJCW9mZiArPSB0aW1lem9uZV9uYW1lc1tpXS5kc3Q7CisKKwkJCS8qIE9ubHkgdXNlIHRoZSB0eiBuYW1lIG9mZnNldCBpZiB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIGJldHRlciAqLworCQkJaWYgKCpvZmZzZXQgPT0gLTEpCisJCQkJKm9mZnNldCA9IDYwKm9mZjsKKworCQkJcmV0dXJuIG1hdGNoOworCQl9CisJfQorCisJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCAiUE0iKSA9PSAyKSB7CisJCXRtLT50bV9ob3VyID0gKHRtLT50bV9ob3VyICUgMTIpICsgMTI7CisJCXJldHVybiAyOworCX0KKworCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgIkFNIikgPT0gMikgeworCQl0bS0+dG1faG91ciA9ICh0bS0+dG1faG91ciAlIDEyKSArIDA7CisJCXJldHVybiAyOworCX0KKworCS8qIEJBRCBDUkFQICovCisJcmV0dXJuIHNraXBfYWxwaGEoZGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfZGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBzdHJ1Y3QgdG0gKm5vd190bSwgdGltZV90IG5vdywgc3RydWN0IHRtICp0bSkKK3sKKwlpZiAobW9udGggPiAwICYmIG1vbnRoIDwgMTMgJiYgZGF5ID4gMCAmJiBkYXkgPCAzMikgeworCQlzdHJ1Y3QgdG0gY2hlY2sgPSAqdG07CisJCXN0cnVjdCB0bSAqciA9IChub3dfdG0gPyAmY2hlY2sgOiB0bSk7CisJCXRpbWVfdCBzcGVjaWZpZWQ7CisKKwkJci0+dG1fbW9uID0gbW9udGggLSAxOworCQlyLT50bV9tZGF5ID0gZGF5OworCQlpZiAoeWVhciA9PSAtMSkgeworCQkJaWYgKCFub3dfdG0pCisJCQkJcmV0dXJuIDE7CisJCQlyLT50bV95ZWFyID0gbm93X3RtLT50bV95ZWFyOworCQl9CisJCWVsc2UgaWYgKHllYXIgPj0gMTk3MCAmJiB5ZWFyIDwgMjEwMCkKKwkJCXItPnRtX3llYXIgPSB5ZWFyIC0gMTkwMDsKKwkJZWxzZSBpZiAoeWVhciA+IDcwICYmIHllYXIgPCAxMDApCisJCQlyLT50bV95ZWFyID0geWVhcjsKKwkJZWxzZSBpZiAoeWVhciA8IDM4KQorCQkJci0+dG1feWVhciA9IHllYXIgKyAxMDA7CisJCWVsc2UKKwkJCXJldHVybiAwOworCQlpZiAoIW5vd190bSkKKwkJCXJldHVybiAxOworCisJCXNwZWNpZmllZCA9IHRtX3RvX3RpbWVfdChyKTsKKworCQkvKiBCZSBpdCBjb21taXQgdGltZSBvciBhdXRob3IgdGltZSwgaXQgZG9lcyBub3QgbWFrZQorCQkgKiBzZW5zZSB0byBzcGVjaWZ5IHRpbWVzdGFtcCB3YXkgaW50byB0aGUgZnV0dXJlLiAgTWFrZQorCQkgKiBzdXJlIGl0IGlzIG5vdCBsYXRlciB0aGFuIHRlbiBkYXlzIGZyb20gbm93Li4uCisJCSAqLworCQlpZiAoKHNwZWNpZmllZCAhPSAtMSkgJiYgKG5vdyArIDEwKjI0KjM2MDAgPCBzcGVjaWZpZWQpKQorCQkJcmV0dXJuIDA7CisJCXRtLT50bV9tb24gPSByLT50bV9tb247CisJCXRtLT50bV9tZGF5ID0gci0+dG1fbWRheTsKKwkJaWYgKHllYXIgIT0gLTEpCisJCQl0bS0+dG1feWVhciA9IHItPnRtX3llYXI7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXRjaF9tdWx0aV9udW1iZXIodGltZXN0YW1wX3QgbnVtLCBjaGFyIGMsIGNvbnN0IGNoYXIgKmRhdGUsCisJCQkgICAgICBjaGFyICplbmQsIHN0cnVjdCB0bSAqdG0sIHRpbWVfdCBub3cpCit7CisJc3RydWN0IHRtIG5vd190bTsKKwlzdHJ1Y3QgdG0gKnJlZnVzZV9mdXR1cmU7CisJbG9uZyBudW0yLCBudW0zOworCisJbnVtMiA9IHN0cnRvbChlbmQrMSwgJmVuZCwgMTApOworCW51bTMgPSAtMTsKKwlpZiAoKmVuZCA9PSBjICYmIGlzZGlnaXQoZW5kWzFdKSkKKwkJbnVtMyA9IHN0cnRvbChlbmQrMSwgJmVuZCwgMTApOworCisJLyogVGltZT8gRGF0ZT8gKi8KKwlzd2l0Y2ggKGMpIHsKKwljYXNlICc6JzoKKwkJaWYgKG51bTMgPCAwKQorCQkJbnVtMyA9IDA7CisJCWlmIChudW0gPCAyNSAmJiBudW0yID49IDAgJiYgbnVtMiA8IDYwICYmIG51bTMgPj0gMCAmJiBudW0zIDw9IDYwKSB7CisJCQl0bS0+dG1faG91ciA9IG51bTsKKwkJCXRtLT50bV9taW4gPSBudW0yOworCQkJdG0tPnRtX3NlYyA9IG51bTM7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgJy0nOgorCWNhc2UgJy8nOgorCWNhc2UgJy4nOgorCQlpZiAoIW5vdykKKwkJCW5vdyA9IHRpbWUoTlVMTCk7CisJCXJlZnVzZV9mdXR1cmUgPSBOVUxMOworCQlpZiAoZ210aW1lX3IoJm5vdywgJm5vd190bSkpCisJCQlyZWZ1c2VfZnV0dXJlID0gJm5vd190bTsKKworCQlpZiAobnVtID4gNzApIHsKKwkJCS8qIHl5eXktbW0tZGQ/ICovCisJCQlpZiAoaXNfZGF0ZShudW0sIG51bTIsIG51bTMsIE5VTEwsIG5vdywgdG0pKQorCQkJCWJyZWFrOworCQkJLyogeXl5eS1kZC1tbT8gKi8KKwkJCWlmIChpc19kYXRlKG51bSwgbnVtMywgbnVtMiwgTlVMTCwgbm93LCB0bSkpCisJCQkJYnJlYWs7CisJCX0KKwkJLyogT3VyIGVhc3Rlcm4gRXVyb3BlYW4gZnJpZW5kcyBzYXkgZGQubW0ueXlbeXldCisJCSAqIGlzIHRoZSBub3JtIHRoZXJlLCBzbyBnaXZpbmcgcHJlY2VkZW5jZSB0bworCQkgKiBtbS9kZC95eVt5eV0gZm9ybSBvbmx5IHdoZW4gc2VwYXJhdG9yIGlzIG5vdCAnLicKKwkJICovCisJCWlmIChjICE9ICcuJyAmJgorCQkgICAgaXNfZGF0ZShudW0zLCBudW0sIG51bTIsIHJlZnVzZV9mdXR1cmUsIG5vdywgdG0pKQorCQkJYnJlYWs7CisJCS8qIEV1cm9wZWFuIGRkLm1tLnl5W3l5XSBvciBmdW5ueSBVUyBkZC9tbS95eVt5eV0gKi8KKwkJaWYgKGlzX2RhdGUobnVtMywgbnVtMiwgbnVtLCByZWZ1c2VfZnV0dXJlLCBub3csIHRtKSkKKwkJCWJyZWFrOworCQkvKiBGdW5ueSBFdXJvcGVhbiBtbS5kZC55eSAqLworCQlpZiAoYyA9PSAnLicgJiYKKwkJICAgIGlzX2RhdGUobnVtMywgbnVtLCBudW0yLCByZWZ1c2VfZnV0dXJlLCBub3csIHRtKSkKKwkJCWJyZWFrOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGVuZCAtIGRhdGU7Cit9CisKKy8qCisgKiBIYXZlIHdlIGZpbGxlZCBpbiBhbnkgcGFydCBvZiB0aGUgdGltZS9kYXRlIHlldD8KKyAqIFdlIGp1c3QgZG8gYSBiaW5hcnkgJ2FuZCcgdG8gc2VlIGlmIHRoZSBzaWduIGJpdAorICogaXMgc2V0IGluIGFsbCB0aGUgdmFsdWVzLgorICovCitzdGF0aWMgaW5saW5lIGludCBub2RhdGUoc3RydWN0IHRtICp0bSkKK3sKKwlyZXR1cm4gKHRtLT50bV95ZWFyICYKKwkJdG0tPnRtX21vbiAmCisJCXRtLT50bV9tZGF5ICYKKwkJdG0tPnRtX2hvdXIgJgorCQl0bS0+dG1fbWluICYKKwkJdG0tPnRtX3NlYykgPCAwOworfQorCisvKgorICogV2UndmUgc2VlbiBhIGRpZ2l0LiBUaW1lPyBZZWFyPyBEYXRlPworICovCitzdGF0aWMgaW50IG1hdGNoX2RpZ2l0KGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIGludCAqb2Zmc2V0LCBpbnQgKnRtX2dtdCkKK3sKKwlpbnQgbjsKKwljaGFyICplbmQ7CisJdGltZXN0YW1wX3QgbnVtOworCisJbnVtID0gcGFyc2VfdGltZXN0YW1wKGRhdGUsICZlbmQsIDEwKTsKKworCS8qCisJICogU2Vjb25kcyBzaW5jZSAxOTcwPyBXZSB0cmlnZ2VyIG9uIHRoYXQgZm9yIGFueSBudW1iZXJzIHdpdGgKKwkgKiBtb3JlIHRoYW4gOCBkaWdpdHMuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJ1bGUgb3V0CisJICogbnVtYmVycyBsaWtlIDIwMDcwNjA2IGFzIGEgWVlZWU1NREQgZGF0ZS4KKwkgKi8KKwlpZiAobnVtID49IDEwMDAwMDAwMCAmJiBub2RhdGUodG0pKSB7CisJCXRpbWVfdCB0aW1lID0gbnVtOworCQlpZiAoZ210aW1lX3IoJnRpbWUsIHRtKSkgeworCQkJKnRtX2dtdCA9IDE7CisJCQlyZXR1cm4gZW5kIC0gZGF0ZTsKKwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgZm9yIHNwZWNpYWwgZm9ybWF0czogbnVtWy0uOi9dbnVtW3NhbWVdbnVtCisJICovCisJc3dpdGNoICgqZW5kKSB7CisJY2FzZSAnOic6CisJY2FzZSAnLic6CisJY2FzZSAnLyc6CisJY2FzZSAnLSc6CisJCWlmIChpc2RpZ2l0KGVuZFsxXSkpIHsKKwkJCWludCBtYXRjaCA9IG1hdGNoX211bHRpX251bWJlcihudW0sICplbmQsIGRhdGUsIGVuZCwgdG0sIDApOworCQkJaWYgKG1hdGNoKQorCQkJCXJldHVybiBtYXRjaDsKKwkJfQorCX0KKworCS8qCisJICogTm9uZSBvZiB0aGUgc3BlY2lhbCBmb3JtYXRzPyBUcnkgdG8gZ3Vlc3Mgd2hhdAorCSAqIHRoZSBudW1iZXIgbWVhbnQuIFdlIHVzZSB0aGUgbnVtYmVyIG9mIGRpZ2l0cworCSAqIHRvIG1ha2UgYSBtb3JlIGVkdWNhdGVkIGd1ZXNzLi4KKwkgKi8KKwluID0gMDsKKwlkbyB7CisJCW4rKzsKKwl9IHdoaWxlIChpc2RpZ2l0KGRhdGVbbl0pKTsKKworCS8qIEZvdXItZGlnaXQgeWVhciBvciBhIHRpbWV6b25lPyAqLworCWlmIChuID09IDQpIHsKKwkJaWYgKG51bSA8PSAxNDAwICYmICpvZmZzZXQgPT0gLTEpIHsKKwkJCXVuc2lnbmVkIGludCBtaW51dGVzID0gbnVtICUgMTAwOworCQkJdW5zaWduZWQgaW50IGhvdXJzID0gbnVtIC8gMTAwOworCQkJKm9mZnNldCA9IGhvdXJzKjYwICsgbWludXRlczsKKwkJfSBlbHNlIGlmIChudW0gPiAxOTAwICYmIG51bSA8IDIxMDApCisJCQl0bS0+dG1feWVhciA9IG51bSAtIDE5MDA7CisJCXJldHVybiBuOworCX0KKworCS8qCisJICogSWdub3JlIGxvdHMgb2YgbnVtZXJhbHMuIFdlIHRvb2sgY2FyZSBvZiA0LWRpZ2l0IHllYXJzIGFib3ZlLgorCSAqIERheXMgb3IgbW9udGhzIG11c3QgYmUgb25lIG9yIHR3byBkaWdpdHMuCisJICovCisJaWYgKG4gPiAyKQorCQlyZXR1cm4gbjsKKworCS8qCisJICogTk9URSEgV2Ugd2lsbCBnaXZlIHByZWNlZGVuY2UgdG8gZGF5LW9mLW1vbnRoIG92ZXIgbW9udGggb3IKKwkgKiB5ZWFyIG51bWJlcnMgaW4gdGhlIDEtMTIgcmFuZ2UuIFNvIDA1IGlzIGFsd2F5cyAibWRheSA1IiwKKwkgKiB1bmxlc3Mgd2UgYWxyZWFkeSBoYXZlIGEgbWRheS4uCisJICoKKwkgKiBJT1csIDAxIEFwciAwNSBwYXJzZXMgYXMgIkFwcmlsIDFzdCwgMjAwNSIuCisJICovCisJaWYgKG51bSA+IDAgJiYgbnVtIDwgMzIgJiYgdG0tPnRtX21kYXkgPCAwKSB7CisJCXRtLT50bV9tZGF5ID0gbnVtOworCQlyZXR1cm4gbjsKKwl9CisKKwkvKiBUd28tZGlnaXQgeWVhcj8gKi8KKwlpZiAobiA9PSAyICYmIHRtLT50bV95ZWFyIDwgMCkgeworCQlpZiAobnVtIDwgMTAgJiYgdG0tPnRtX21kYXkgPj0gMCkgeworCQkJdG0tPnRtX3llYXIgPSBudW0gKyAxMDA7CisJCQlyZXR1cm4gbjsKKwkJfQorCQlpZiAobnVtID49IDcwKSB7CisJCQl0bS0+dG1feWVhciA9IG51bTsKKwkJCXJldHVybiBuOworCQl9CisJfQorCisJaWYgKG51bSA+IDAgJiYgbnVtIDwgMTMgJiYgdG0tPnRtX21vbiA8IDApCisJCXRtLT50bV9tb24gPSBudW0tMTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IG1hdGNoX3R6KGNvbnN0IGNoYXIgKmRhdGUsIGludCAqb2ZmcCkKK3sKKwljaGFyICplbmQ7CisJaW50IGhvdXIgPSBzdHJ0b3VsKGRhdGUgKyAxLCAmZW5kLCAxMCk7CisJaW50IG4gPSBlbmQgLSAoZGF0ZSArIDEpOworCWludCBtaW4gPSAwOworCisJaWYgKG4gPT0gNCkgeworCQkvKiBoaG1tICovCisJCW1pbiA9IGhvdXIgJSAxMDA7CisJCWhvdXIgPSBob3VyIC8gMTAwOworCX0gZWxzZSBpZiAobiAhPSAyKSB7CisJCW1pbiA9IDk5OyAvKiByYW5kb20gY3JhcCAqLworCX0gZWxzZSBpZiAoKmVuZCA9PSAnOicpIHsKKwkJLyogaGg6bW0/ICovCisJCW1pbiA9IHN0cnRvdWwoZW5kICsgMSwgJmVuZCwgMTApOworCQlpZiAoZW5kIC0gKGRhdGUgKyAxKSAhPSA1KQorCQkJbWluID0gOTk7IC8qIHJhbmRvbSBjcmFwICovCisJfSAvKiBvdGhlcndpc2Ugd2UgcGFyc2VkICJoaCIgKi8KKworCS8qCisJICogRG9uJ3QgYWNjZXB0IGFueSByYW5kb20gY3JhcC4gRXZlbiB0aG91Z2ggc29tZSBwbGFjZXMgaGF2ZQorCSAqIG9mZnNldCBsYXJnZXIgdGhhbiAxMiBob3VycyAoZS5nLiBQYWNpZmljL0tpcml0aW1hdGkgaXMgYXQKKwkgKiBVVEMrMTQpLCB0aGVyZSBpcyBzb21ldGhpbmcgd3JvbmcgaWYgaG91ciBwYXJ0IGlzIG11Y2gKKwkgKiBsYXJnZXIgdGhhbiB0aGF0LiBXZSBtaWdodCBhbHNvIHdhbnQgdG8gY2hlY2sgdGhhdCB0aGUKKwkgKiBtaW51dGVzIGFyZSBkaXZpc2libGUgYnkgMTUgb3Igc29tZXRoaW5nIHRvby4gKE9mZnNldCBvZgorCSAqIEthdGhtYW5kdSwgTmVwYWwgaXMgVVRDKzU6NDUpCisJICovCisJaWYgKG1pbiA8IDYwICYmIGhvdXIgPCAyNCkgeworCQlpbnQgb2Zmc2V0ID0gaG91ciAqIDYwICsgbWluOworCQlpZiAoKmRhdGUgPT0gJy0nKQorCQkJb2Zmc2V0ID0gLW9mZnNldDsKKwkJKm9mZnAgPSBvZmZzZXQ7CisJfQorCXJldHVybiBlbmQgLSBkYXRlOworfQorCitzdGF0aWMgdm9pZCBkYXRlX3N0cmluZyh0aW1lc3RhbXBfdCBkYXRlLCBpbnQgb2Zmc2V0LCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaW50IHNpZ24gPSAnKyc7CisKKwlpZiAob2Zmc2V0IDwgMCkgeworCQlvZmZzZXQgPSAtb2Zmc2V0OworCQlzaWduID0gJy0nOworCX0KKwlzdHJidWZfYWRkZihidWYsICIlIlBSSXRpbWUiICVjJTAyZCUwMmQiLCBkYXRlLCBzaWduLCBvZmZzZXQgLyA2MCwgb2Zmc2V0ICUgNjApOworfQorCisvKgorICogUGFyc2UgYSBzdHJpbmcgbGlrZSAiMCArMDAwMCIgYXMgYW5jaWVudCB0aW1lc3RhbXAgbmVhciBlcG9jaCwgYnV0CisgKiBvbmx5IHdoZW4gaXQgYXBwZWFycyBub3QgYXMgcGFydCBvZiBhbnkgb3RoZXIgc3RyaW5nLgorICovCitzdGF0aWMgaW50IG1hdGNoX29iamVjdF9oZWFkZXJfZGF0ZShjb25zdCBjaGFyICpkYXRlLCB0aW1lc3RhbXBfdCAqdGltZXN0YW1wLCBpbnQgKm9mZnNldCkKK3sKKwljaGFyICplbmQ7CisJdGltZXN0YW1wX3Qgc3RhbXA7CisJaW50IG9mczsKKworCWlmICgqZGF0ZSA8ICcwJyB8fCAnOScgPCAqZGF0ZSkKKwkJcmV0dXJuIC0xOworCXN0YW1wID0gcGFyc2VfdGltZXN0YW1wKGRhdGUsICZlbmQsIDEwKTsKKwlpZiAoKmVuZCAhPSAnICcgfHwgc3RhbXAgPT0gVElNRV9NQVggfHwgKGVuZFsxXSAhPSAnKycgJiYgZW5kWzFdICE9ICctJykpCisJCXJldHVybiAtMTsKKwlkYXRlID0gZW5kICsgMjsKKwlvZnMgPSBzdHJ0b2woZGF0ZSwgJmVuZCwgMTApOworCWlmICgoKmVuZCAhPSAnXDAnICYmICgqZW5kICE9ICdcbicpKSB8fCBlbmQgIT0gZGF0ZSArIDQpCisJCXJldHVybiAtMTsKKwlvZnMgPSAob2ZzIC8gMTAwKSAqIDYwICsgKG9mcyAlIDEwMCk7CisJaWYgKGRhdGVbLTFdID09ICctJykKKwkJb2ZzID0gLW9mczsKKwkqdGltZXN0YW1wID0gc3RhbXA7CisJKm9mZnNldCA9IG9mczsKKwlyZXR1cm4gMDsKK30KKworLyogR3IuIHN0cnB0aW1lIGlzIGNyYXAgZm9yIHRoaXM7IGl0IGRvZXNuJ3QgaGF2ZSBhIHdheSB0byByZXF1aXJlIFJGQzI4MjIKKyAgIChpLmUuIEVuZ2xpc2gpIGRheS9tb250aCBuYW1lcywgYW5kIGl0IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCAlei4gKi8KK2ludCBwYXJzZV9kYXRlX2Jhc2ljKGNvbnN0IGNoYXIgKmRhdGUsIHRpbWVzdGFtcF90ICp0aW1lc3RhbXAsIGludCAqb2Zmc2V0KQoreworCXN0cnVjdCB0bSB0bTsKKwlpbnQgdG1fZ210OworCXRpbWVzdGFtcF90IGR1bW15X3RpbWVzdGFtcDsKKwlpbnQgZHVtbXlfb2Zmc2V0OworCisJaWYgKCF0aW1lc3RhbXApCisJCXRpbWVzdGFtcCA9ICZkdW1teV90aW1lc3RhbXA7CisJaWYgKCFvZmZzZXQpCisJCW9mZnNldCA9ICZkdW1teV9vZmZzZXQ7CisKKwltZW1zZXQoJnRtLCAwLCBzaXplb2YodG0pKTsKKwl0bS50bV95ZWFyID0gLTE7CisJdG0udG1fbW9uID0gLTE7CisJdG0udG1fbWRheSA9IC0xOworCXRtLnRtX2lzZHN0ID0gLTE7CisJdG0udG1faG91ciA9IC0xOworCXRtLnRtX21pbiA9IC0xOworCXRtLnRtX3NlYyA9IC0xOworCSpvZmZzZXQgPSAtMTsKKwl0bV9nbXQgPSAwOworCisJaWYgKCpkYXRlID09ICdAJyAmJgorCSAgICAhbWF0Y2hfb2JqZWN0X2hlYWRlcl9kYXRlKGRhdGUgKyAxLCB0aW1lc3RhbXAsIG9mZnNldCkpCisJCXJldHVybiAwOyAvKiBzdWNjZXNzICovCisJZm9yICg7OykgeworCQlpbnQgbWF0Y2ggPSAwOworCQl1bnNpZ25lZCBjaGFyIGMgPSAqZGF0ZTsKKworCQkvKiBTdG9wIGF0IGVuZCBvZiBzdHJpbmcgb3IgbmV3bGluZSAqLworCQlpZiAoIWMgfHwgYyA9PSAnXG4nKQorCQkJYnJlYWs7CisKKwkJaWYgKGlzYWxwaGEoYykpCisJCQltYXRjaCA9IG1hdGNoX2FscGhhKGRhdGUsICZ0bSwgb2Zmc2V0KTsKKwkJZWxzZSBpZiAoaXNkaWdpdChjKSkKKwkJCW1hdGNoID0gbWF0Y2hfZGlnaXQoZGF0ZSwgJnRtLCBvZmZzZXQsICZ0bV9nbXQpOworCQllbHNlIGlmICgoYyA9PSAnLScgfHwgYyA9PSAnKycpICYmIGlzZGlnaXQoZGF0ZVsxXSkpCisJCQltYXRjaCA9IG1hdGNoX3R6KGRhdGUsIG9mZnNldCk7CisKKwkJaWYgKCFtYXRjaCkgeworCQkJLyogQkFEIENSQVAgKi8KKwkJCW1hdGNoID0gMTsKKwkJfQorCisJCWRhdGUgKz0gbWF0Y2g7CisJfQorCisJLyogZG8gbm90IHVzZSBta3RpbWUoKSwgd2hpY2ggdXNlcyBsb2NhbCB0aW1lem9uZSwgaGVyZSAqLworCSp0aW1lc3RhbXAgPSB0bV90b190aW1lX3QoJnRtKTsKKwlpZiAoKnRpbWVzdGFtcCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCpvZmZzZXQgPT0gLTEpIHsKKwkJdGltZV90IHRlbXBfdGltZTsKKworCQkvKiBnbXRpbWVfcigpIGluIG1hdGNoX2RpZ2l0KCkgbWF5IGhhdmUgY2xvYmJlcmVkIGl0ICovCisJCXRtLnRtX2lzZHN0ID0gLTE7CisJCXRlbXBfdGltZSA9IG1rdGltZSgmdG0pOworCQlpZiAoKHRpbWVfdCkqdGltZXN0YW1wID4gdGVtcF90aW1lKSB7CisJCQkqb2Zmc2V0ID0gKCh0aW1lX3QpKnRpbWVzdGFtcCAtIHRlbXBfdGltZSkgLyA2MDsKKwkJfSBlbHNlIHsKKwkJCSpvZmZzZXQgPSAtKGludCkoKHRlbXBfdGltZSAtICh0aW1lX3QpKnRpbWVzdGFtcCkgLyA2MCk7CisJCX0KKwl9CisKKwlpZiAoIXRtX2dtdCkKKwkJKnRpbWVzdGFtcCAtPSAqb2Zmc2V0ICogNjA7CisJcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KK30KKworaW50IHBhcnNlX2V4cGlyeV9kYXRlKGNvbnN0IGNoYXIgKmRhdGUsIHRpbWVzdGFtcF90ICp0aW1lc3RhbXApCit7CisJaW50IGVycm9ycyA9IDA7CisKKwlpZiAoIXN0cmNtcChkYXRlLCAibmV2ZXIiKSB8fCAhc3RyY21wKGRhdGUsICJmYWxzZSIpKQorCQkqdGltZXN0YW1wID0gMDsKKwllbHNlIGlmICghc3RyY21wKGRhdGUsICJhbGwiKSB8fCAhc3RyY21wKGRhdGUsICJub3ciKSkKKwkJLyoKKwkJICogV2UgdGFrZSBvdmVyICJub3ciIGhlcmUsIHdoaWNoIHVzdWFsbHkgdHJhbnNsYXRlcworCQkgKiB0byB0aGUgY3VycmVudCB0aW1lc3RhbXAuICBUaGlzIGlzIGJlY2F1c2UgdGhlIHVzZXIKKwkJICogcmVhbGx5IG1lYW5zIHRvIGV4cGlyZSBldmVyeXRoaW5nIHNoZSBoYXMgZG9uZSBpbgorCQkgKiB0aGUgcGFzdCwgYW5kIGJ5IGRlZmluaXRpb24gcmVmbG9ncyBhcmUgdGhlIHJlY29yZAorCQkgKiBvZiB0aGUgcGFzdCwgYW5kIHRoZXJlIGlzIG5vdGhpbmcgZnJvbSB0aGUgZnV0dXJlCisJCSAqIHRvIGJlIGtlcHQuCisJCSAqLworCQkqdGltZXN0YW1wID0gVElNRV9NQVg7CisJZWxzZQorCQkqdGltZXN0YW1wID0gYXBwcm94aWRhdGVfY2FyZWZ1bChkYXRlLCAmZXJyb3JzKTsKKworCXJldHVybiBlcnJvcnM7Cit9CisKK2ludCBwYXJzZV9kYXRlKGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCkKK3sKKwl0aW1lc3RhbXBfdCB0aW1lc3RhbXA7CisJaW50IG9mZnNldDsKKwlpZiAocGFyc2VfZGF0ZV9iYXNpYyhkYXRlLCAmdGltZXN0YW1wLCAmb2Zmc2V0KSkKKwkJcmV0dXJuIC0xOworCWRhdGVfc3RyaW5nKHRpbWVzdGFtcCwgb2Zmc2V0LCByZXN1bHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBkYXRlX21vZGVfdHlwZSBwYXJzZV9kYXRlX3R5cGUoY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBjaGFyICoqZW5kKQoreworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJyZWxhdGl2ZSIsIGVuZCkpCisJCXJldHVybiBEQVRFX1JFTEFUSVZFOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJpc284NjAxLXN0cmljdCIsIGVuZCkgfHwKKwkgICAgc2tpcF9wcmVmaXgoZm9ybWF0LCAiaXNvLXN0cmljdCIsIGVuZCkpCisJCXJldHVybiBEQVRFX0lTTzg2MDFfU1RSSUNUOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJpc284NjAxIiwgZW5kKSB8fAorCSAgICBza2lwX3ByZWZpeChmb3JtYXQsICJpc28iLCBlbmQpKQorCQlyZXR1cm4gREFURV9JU084NjAxOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJyZmMyODIyIiwgZW5kKSB8fAorCSAgICBza2lwX3ByZWZpeChmb3JtYXQsICJyZmMiLCBlbmQpKQorCQlyZXR1cm4gREFURV9SRkMyODIyOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJzaG9ydCIsIGVuZCkpCisJCXJldHVybiBEQVRFX1NIT1JUOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJkZWZhdWx0IiwgZW5kKSkKKwkJcmV0dXJuIERBVEVfTk9STUFMOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJodW1hbiIsIGVuZCkpCisJCXJldHVybiBEQVRFX0hVTUFOOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJyYXciLCBlbmQpKQorCQlyZXR1cm4gREFURV9SQVc7CisJaWYgKHNraXBfcHJlZml4KGZvcm1hdCwgInVuaXgiLCBlbmQpKQorCQlyZXR1cm4gREFURV9VTklYOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJmb3JtYXQiLCBlbmQpKQorCQlyZXR1cm4gREFURV9TVFJGVElNRTsKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgJF9fZ2l0X2xvZ19kYXRlX2Zvcm1hdHMgaW4KKwkgKiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91IGFkZCBuZXcgZm9ybWF0cy4KKwkgKi8KKworCWRpZSgidW5rbm93biBkYXRlIGZvcm1hdCAlcyIsIGZvcm1hdCk7Cit9CisKK3ZvaWQgcGFyc2VfZGF0ZV9mb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0LCBzdHJ1Y3QgZGF0ZV9tb2RlICptb2RlKQoreworCWNvbnN0IGNoYXIgKnA7CisKKwkvKiAiYXV0bzpmb28iIGlzICJpZiB0dHkvcGFnZXIsIHRoZW4gZm9vLCBvdGhlcndpc2Ugbm9ybWFsIiAqLworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJhdXRvOiIsICZwKSkgeworCQlpZiAoaXNhdHR5KDEpIHx8IHBhZ2VyX2luX3VzZSgpKQorCQkJZm9ybWF0ID0gcDsKKwkJZWxzZQorCQkJZm9ybWF0ID0gImRlZmF1bHQiOworCX0KKworCS8qIGhpc3RvcmljYWwgYWxpYXMgKi8KKwlpZiAoIXN0cmNtcChmb3JtYXQsICJsb2NhbCIpKQorCQlmb3JtYXQgPSAiZGVmYXVsdC1sb2NhbCI7CisKKwltb2RlLT50eXBlID0gcGFyc2VfZGF0ZV90eXBlKGZvcm1hdCwgJnApOworCW1vZGUtPmxvY2FsID0gMDsKKworCWlmIChza2lwX3ByZWZpeChwLCAiLWxvY2FsIiwgJnApKQorCQltb2RlLT5sb2NhbCA9IDE7CisKKwlpZiAobW9kZS0+dHlwZSA9PSBEQVRFX1NUUkZUSU1FKSB7CisJCWlmICghc2tpcF9wcmVmaXgocCwgIjoiLCAmcCkpCisJCQlkaWUoImRhdGUgZm9ybWF0IG1pc3NpbmcgY29sb24gc2VwYXJhdG9yOiAlcyIsIGZvcm1hdCk7CisJCW1vZGUtPnN0cmZ0aW1lX2ZtdCA9IHhzdHJkdXAocCk7CisJfSBlbHNlIGlmICgqcCkKKwkJZGllKCJ1bmtub3duIGRhdGUgZm9ybWF0ICVzIiwgZm9ybWF0KTsKK30KKwordm9pZCBkYXRlc3RhbXAoc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCXRpbWVfdCBub3c7CisJaW50IG9mZnNldDsKKwlzdHJ1Y3QgdG0gdG0gPSB7IDAgfTsKKworCXRpbWUoJm5vdyk7CisKKwlvZmZzZXQgPSB0bV90b190aW1lX3QobG9jYWx0aW1lX3IoJm5vdywgJnRtKSkgLSBub3c7CisJb2Zmc2V0IC89IDYwOworCisJZGF0ZV9zdHJpbmcobm93LCBvZmZzZXQsIG91dCk7Cit9CisKKy8qCisgKiBSZWxhdGl2ZSB0aW1lIHVwZGF0ZSAoZWcgIjIgZGF5cyBhZ28iKS4gIElmIHdlIGhhdmVuJ3Qgc2V0IHRoZSB0aW1lCisgKiB5ZXQsIHdlIG5lZWQgdG8gc2V0IGl0IGZyb20gY3VycmVudCB0aW1lLgorICovCitzdGF0aWMgdGltZV90IHVwZGF0ZV90bShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgdGltZV90IHNlYykKK3sKKwl0aW1lX3QgbjsKKworCWlmICh0bS0+dG1fbWRheSA8IDApCisJCXRtLT50bV9tZGF5ID0gbm93LT50bV9tZGF5OworCWlmICh0bS0+dG1fbW9uIDwgMCkKKwkJdG0tPnRtX21vbiA9IG5vdy0+dG1fbW9uOworCWlmICh0bS0+dG1feWVhciA8IDApIHsKKwkJdG0tPnRtX3llYXIgPSBub3ctPnRtX3llYXI7CisJCWlmICh0bS0+dG1fbW9uID4gbm93LT50bV9tb24pCisJCQl0bS0+dG1feWVhci0tOworCX0KKworCW4gPSBta3RpbWUodG0pIC0gc2VjOworCWxvY2FsdGltZV9yKCZuLCB0bSk7CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBEbyB3ZSBoYXZlIGEgcGVuZGluZyBudW1iZXIgYXQgdGhlIGVuZCwgb3Igd2hlbgorICogd2Ugc2VlIGEgbmV3IG9uZT8gTGV0J3MgYXNzdW1lIGl0J3MgYSBtb250aCBkYXksCisgKiBhcyBpbiAiRGVjIDYsIDE5OTIiCisgKi8KK3N0YXRpYyB2b2lkIHBlbmRpbmdfbnVtYmVyKHN0cnVjdCB0bSAqdG0sIGludCAqbnVtKQoreworCWludCBudW1iZXIgPSAqbnVtOworCisJaWYgKG51bWJlcikgeworCQkqbnVtID0gMDsKKwkJaWYgKHRtLT50bV9tZGF5IDwgMCAmJiBudW1iZXIgPCAzMikKKwkJCXRtLT50bV9tZGF5ID0gbnVtYmVyOworCQllbHNlIGlmICh0bS0+dG1fbW9uIDwgMCAmJiBudW1iZXIgPCAxMykKKwkJCXRtLT50bV9tb24gPSBudW1iZXItMTsKKwkJZWxzZSBpZiAodG0tPnRtX3llYXIgPCAwKSB7CisJCQlpZiAobnVtYmVyID4gMTk2OSAmJiBudW1iZXIgPCAyMTAwKQorCQkJCXRtLT50bV95ZWFyID0gbnVtYmVyIC0gMTkwMDsKKwkJCWVsc2UgaWYgKG51bWJlciA+IDY5ICYmIG51bWJlciA8IDEwMCkKKwkJCQl0bS0+dG1feWVhciA9IG51bWJlcjsKKwkJCWVsc2UgaWYgKG51bWJlciA8IDM4KQorCQkJCXRtLT50bV95ZWFyID0gMTAwICsgbnVtYmVyOworCQkJLyogV2Ugc2NyZXcgdXAgZm9yIG51bWJlciA9IDAwID8gKi8KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZGF0ZV9ub3coc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCSpudW0gPSAwOworCXVwZGF0ZV90bSh0bSwgbm93LCAwKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV95ZXN0ZXJkYXkoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCSpudW0gPSAwOworCXVwZGF0ZV90bSh0bSwgbm93LCAyNCo2MCo2MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfdGltZShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50IGhvdXIpCit7CisJaWYgKHRtLT50bV9ob3VyIDwgaG91cikKKwkJdXBkYXRlX3RtKHRtLCBub3csIDI0KjYwKjYwKTsKKwl0bS0+dG1faG91ciA9IGhvdXI7CisJdG0tPnRtX21pbiA9IDA7CisJdG0tPnRtX3NlYyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfbWlkbmlnaHQoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCXBlbmRpbmdfbnVtYmVyKHRtLCBudW0pOworCWRhdGVfdGltZSh0bSwgbm93LCAwKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV9ub29uKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKK3sKKwlwZW5kaW5nX251bWJlcih0bSwgbnVtKTsKKwlkYXRlX3RpbWUodG0sIG5vdywgMTIpOworfQorCitzdGF0aWMgdm9pZCBkYXRlX3RlYShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJcGVuZGluZ19udW1iZXIodG0sIG51bSk7CisJZGF0ZV90aW1lKHRtLCBub3csIDE3KTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV9wbShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJaW50IGhvdXIsIG4gPSAqbnVtOworCSpudW0gPSAwOworCisJaG91ciA9IHRtLT50bV9ob3VyOworCWlmIChuKSB7CisJCWhvdXIgPSBuOworCQl0bS0+dG1fbWluID0gMDsKKwkJdG0tPnRtX3NlYyA9IDA7CisJfQorCXRtLT50bV9ob3VyID0gKGhvdXIgJSAxMikgKyAxMjsKK30KKworc3RhdGljIHZvaWQgZGF0ZV9hbShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJaW50IGhvdXIsIG4gPSAqbnVtOworCSpudW0gPSAwOworCisJaG91ciA9IHRtLT50bV9ob3VyOworCWlmIChuKSB7CisJCWhvdXIgPSBuOworCQl0bS0+dG1fbWluID0gMDsKKwkJdG0tPnRtX3NlYyA9IDA7CisJfQorCXRtLT50bV9ob3VyID0gKGhvdXIgJSAxMik7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfbmV2ZXIoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCXRpbWVfdCBuID0gMDsKKwlsb2NhbHRpbWVfcigmbiwgdG0pOworCSpudW0gPSAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwZWNpYWwgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdm9pZCAoKmZuKShzdHJ1Y3QgdG0gKiwgc3RydWN0IHRtICosIGludCAqKTsKK30gc3BlY2lhbFtdID0geworCXsgInllc3RlcmRheSIsIGRhdGVfeWVzdGVyZGF5IH0sCisJeyAibm9vbiIsIGRhdGVfbm9vbiB9LAorCXsgIm1pZG5pZ2h0IiwgZGF0ZV9taWRuaWdodCB9LAorCXsgInRlYSIsIGRhdGVfdGVhIH0sCisJeyAiUE0iLCBkYXRlX3BtIH0sCisJeyAiQU0iLCBkYXRlX2FtIH0sCisJeyAibmV2ZXIiLCBkYXRlX25ldmVyIH0sCisJeyAibm93IiwgZGF0ZV9ub3cgfSwKKwl7IE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm51bWJlcl9uYW1lW10gPSB7CisJInplcm8iLCAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwKKwkiZml2ZSIsICJzaXgiLCAic2V2ZW4iLCAiZWlnaHQiLCAibmluZSIsICJ0ZW4iLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0eXBlbGVuIHsKKwljb25zdCBjaGFyICp0eXBlOworCWludCBsZW5ndGg7Cit9IHR5cGVsZW5bXSA9IHsKKwl7ICJzZWNvbmRzIiwgMSB9LAorCXsgIm1pbnV0ZXMiLCA2MCB9LAorCXsgImhvdXJzIiwgNjAqNjAgfSwKKwl7ICJkYXlzIiwgMjQqNjAqNjAgfSwKKwl7ICJ3ZWVrcyIsIDcqMjQqNjAqNjAgfSwKKwl7IE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFwcHJveGlkYXRlX2FscGhhKGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSwgaW50ICp0b3VjaGVkKQoreworCWNvbnN0IHN0cnVjdCB0eXBlbGVuICp0bDsKKwljb25zdCBzdHJ1Y3Qgc3BlY2lhbCAqczsKKwljb25zdCBjaGFyICplbmQgPSBkYXRlOworCWludCBpOworCisJd2hpbGUgKGlzYWxwaGEoKisrZW5kKSkKKwkJOworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJaW50IG1hdGNoID0gbWF0Y2hfc3RyaW5nKGRhdGUsIG1vbnRoX25hbWVzW2ldKTsKKwkJaWYgKG1hdGNoID49IDMpIHsKKwkJCXRtLT50bV9tb24gPSBpOworCQkJKnRvdWNoZWQgPSAxOworCQkJcmV0dXJuIGVuZDsKKwkJfQorCX0KKworCWZvciAocyA9IHNwZWNpYWw7IHMtPm5hbWU7IHMrKykgeworCQlpbnQgbGVuID0gc3RybGVuKHMtPm5hbWUpOworCQlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsIHMtPm5hbWUpID09IGxlbikgeworCQkJcy0+Zm4odG0sIG5vdywgbnVtKTsKKwkJCSp0b3VjaGVkID0gMTsKKwkJCXJldHVybiBlbmQ7CisJCX0KKwl9CisKKwlpZiAoISpudW0pIHsKKwkJZm9yIChpID0gMTsgaSA8IDExOyBpKyspIHsKKwkJCWludCBsZW4gPSBzdHJsZW4obnVtYmVyX25hbWVbaV0pOworCQkJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCBudW1iZXJfbmFtZVtpXSkgPT0gbGVuKSB7CisJCQkJKm51bSA9IGk7CisJCQkJKnRvdWNoZWQgPSAxOworCQkJCXJldHVybiBlbmQ7CisJCQl9CisJCX0KKwkJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCAibGFzdCIpID09IDQpIHsKKwkJCSpudW0gPSAxOworCQkJKnRvdWNoZWQgPSAxOworCQl9CisJCXJldHVybiBlbmQ7CisJfQorCisJdGwgPSB0eXBlbGVuOworCXdoaWxlICh0bC0+dHlwZSkgeworCQlpbnQgbGVuID0gc3RybGVuKHRsLT50eXBlKTsKKwkJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCB0bC0+dHlwZSkgPj0gbGVuLTEpIHsKKwkJCXVwZGF0ZV90bSh0bSwgbm93LCB0bC0+bGVuZ3RoICogKm51bSk7CisJCQkqbnVtID0gMDsKKwkJCSp0b3VjaGVkID0gMTsKKwkJCXJldHVybiBlbmQ7CisJCX0KKwkJdGwrKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCWludCBtYXRjaCA9IG1hdGNoX3N0cmluZyhkYXRlLCB3ZWVrZGF5X25hbWVzW2ldKTsKKwkJaWYgKG1hdGNoID49IDMpIHsKKwkJCWludCBkaWZmLCBuID0gKm51bSAtMTsKKwkJCSpudW0gPSAwOworCisJCQlkaWZmID0gdG0tPnRtX3dkYXkgLSBpOworCQkJaWYgKGRpZmYgPD0gMCkKKwkJCQluKys7CisJCQlkaWZmICs9IDcqbjsKKworCQkJdXBkYXRlX3RtKHRtLCBub3csIGRpZmYgKiAyNCAqIDYwICogNjApOworCQkJKnRvdWNoZWQgPSAxOworCQkJcmV0dXJuIGVuZDsKKwkJfQorCX0KKworCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgIm1vbnRocyIpID49IDUpIHsKKwkJaW50IG47CisJCXVwZGF0ZV90bSh0bSwgbm93LCAwKTsgLyogZmlsbCBpbiBkYXRlIGZpZWxkcyBpZiBuZWVkZWQgKi8KKwkJbiA9IHRtLT50bV9tb24gLSAqbnVtOworCQkqbnVtID0gMDsKKwkJd2hpbGUgKG4gPCAwKSB7CisJCQluICs9IDEyOworCQkJdG0tPnRtX3llYXItLTsKKwkJfQorCQl0bS0+dG1fbW9uID0gbjsKKwkJKnRvdWNoZWQgPSAxOworCQlyZXR1cm4gZW5kOworCX0KKworCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgInllYXJzIikgPj0gNCkgeworCQl1cGRhdGVfdG0odG0sIG5vdywgMCk7IC8qIGZpbGwgaW4gZGF0ZSBmaWVsZHMgaWYgbmVlZGVkICovCisJCXRtLT50bV95ZWFyIC09ICpudW07CisJCSpudW0gPSAwOworCQkqdG91Y2hlZCA9IDE7CisJCXJldHVybiBlbmQ7CisJfQorCisJcmV0dXJuIGVuZDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFwcHJveGlkYXRlX2RpZ2l0KGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIGludCAqbnVtLAorCQkJCSAgICAgdGltZV90IG5vdykKK3sKKwljaGFyICplbmQ7CisJdGltZXN0YW1wX3QgbnVtYmVyID0gcGFyc2VfdGltZXN0YW1wKGRhdGUsICZlbmQsIDEwKTsKKworCXN3aXRjaCAoKmVuZCkgeworCWNhc2UgJzonOgorCWNhc2UgJy4nOgorCWNhc2UgJy8nOgorCWNhc2UgJy0nOgorCQlpZiAoaXNkaWdpdChlbmRbMV0pKSB7CisJCQlpbnQgbWF0Y2ggPSBtYXRjaF9tdWx0aV9udW1iZXIobnVtYmVyLCAqZW5kLCBkYXRlLCBlbmQsCisJCQkJCQkgICAgICAgdG0sIG5vdyk7CisJCQlpZiAobWF0Y2gpCisJCQkJcmV0dXJuIGRhdGUgKyBtYXRjaDsKKwkJfQorCX0KKworCS8qIEFjY2VwdCB6ZXJvLXBhZGRpbmcgb25seSBmb3Igc21hbGwgbnVtYmVycyAoIkRlYyAwMiIsIG5ldmVyICJEZWMgMDAwMiIpICovCisJaWYgKGRhdGVbMF0gIT0gJzAnIHx8IGVuZCAtIGRhdGUgPD0gMikKKwkJKm51bSA9IG51bWJlcjsKKwlyZXR1cm4gZW5kOworfQorCitzdGF0aWMgdGltZXN0YW1wX3QgYXBwcm94aWRhdGVfc3RyKGNvbnN0IGNoYXIgKmRhdGUsCisJCQkJICAgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2LAorCQkJCSAgIGludCAqZXJyb3JfcmV0KQoreworCWludCBudW1iZXIgPSAwOworCWludCB0b3VjaGVkID0gMDsKKwlzdHJ1Y3QgdG0gdG0sIG5vdzsKKwl0aW1lX3QgdGltZV9zZWM7CisKKwl0aW1lX3NlYyA9IHR2LT50dl9zZWM7CisJbG9jYWx0aW1lX3IoJnRpbWVfc2VjLCAmdG0pOworCW5vdyA9IHRtOworCisJdG0udG1feWVhciA9IC0xOworCXRtLnRtX21vbiA9IC0xOworCXRtLnRtX21kYXkgPSAtMTsKKworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKmRhdGU7CisJCWlmICghYykKKwkJCWJyZWFrOworCQlkYXRlKys7CisJCWlmIChpc2RpZ2l0KGMpKSB7CisJCQlwZW5kaW5nX251bWJlcigmdG0sICZudW1iZXIpOworCQkJZGF0ZSA9IGFwcHJveGlkYXRlX2RpZ2l0KGRhdGUtMSwgJnRtLCAmbnVtYmVyLCB0aW1lX3NlYyk7CisJCQl0b3VjaGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpc2FscGhhKGMpKQorCQkJZGF0ZSA9IGFwcHJveGlkYXRlX2FscGhhKGRhdGUtMSwgJnRtLCAmbm93LCAmbnVtYmVyLCAmdG91Y2hlZCk7CisJfQorCXBlbmRpbmdfbnVtYmVyKCZ0bSwgJm51bWJlcik7CisJaWYgKCF0b3VjaGVkKQorCQkqZXJyb3JfcmV0ID0gMTsKKwlyZXR1cm4gKHRpbWVzdGFtcF90KXVwZGF0ZV90bSgmdG0sICZub3csIDApOworfQorCit0aW1lc3RhbXBfdCBhcHByb3hpZGF0ZV9yZWxhdGl2ZShjb25zdCBjaGFyICpkYXRlKQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworCXRpbWVzdGFtcF90IHRpbWVzdGFtcDsKKwlpbnQgb2Zmc2V0OworCWludCBlcnJvcnMgPSAwOworCisJaWYgKCFwYXJzZV9kYXRlX2Jhc2ljKGRhdGUsICZ0aW1lc3RhbXAsICZvZmZzZXQpKQorCQlyZXR1cm4gdGltZXN0YW1wOworCisJZ2V0X3RpbWUoJnR2KTsKKwlyZXR1cm4gYXBwcm94aWRhdGVfc3RyKGRhdGUsIChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKSAmdHYsICZlcnJvcnMpOworfQorCit0aW1lc3RhbXBfdCBhcHByb3hpZGF0ZV9jYXJlZnVsKGNvbnN0IGNoYXIgKmRhdGUsIGludCAqZXJyb3JfcmV0KQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworCXRpbWVzdGFtcF90IHRpbWVzdGFtcDsKKwlpbnQgb2Zmc2V0OworCWludCBkdW1teSA9IDA7CisJaWYgKCFlcnJvcl9yZXQpCisJCWVycm9yX3JldCA9ICZkdW1teTsKKworCWlmICghcGFyc2VfZGF0ZV9iYXNpYyhkYXRlLCAmdGltZXN0YW1wLCAmb2Zmc2V0KSkgeworCQkqZXJyb3JfcmV0ID0gMDsKKwkJcmV0dXJuIHRpbWVzdGFtcDsKKwl9CisKKwlnZXRfdGltZSgmdHYpOworCXJldHVybiBhcHByb3hpZGF0ZV9zdHIoZGF0ZSwgJnR2LCBlcnJvcl9yZXQpOworfQorCitpbnQgZGF0ZV9vdmVyZmxvd3ModGltZXN0YW1wX3QgdCkKK3sKKwl0aW1lX3Qgc3lzOworCisJLyogSWYgd2Ugb3ZlcmZsb3dlZCBvdXIgdGltZXN0YW1wIGRhdGEgdHlwZSwgdGhhdCdzIGJhZC4uLiAqLworCWlmICgodWludG1heF90KXQgPj0gVElNRV9NQVgpCisJCXJldHVybiAxOworCisJLyoKKwkgKiAuLi5idXQgd2UgYWxzbyBhcmUgZ29pbmcgdG8gZmVlZCB0aGUgcmVzdWx0IHRvIHN5c3RlbQorCSAqIGZ1bmN0aW9ucyB0aGF0IGV4cGVjdCB0aW1lX3QsIHdoaWNoIGlzIG9mdGVuICJzaWduZWQgbG9uZyIuCisJICogTWFrZSBzdXJlIHRoYXQgd2UgZml0IGludG8gdGltZV90LCBhcyB3ZWxsLgorCSAqLworCXN5cyA9IHQ7CisJcmV0dXJuIHQgIT0gc3lzIHx8ICh0IDwgMSkgIT0gKHN5cyA8IDEpOworfQpkaWZmIC0tZ2l0IGEvZGVjb3JhdGUuYyBiL2RlY29yYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwNWIxYgotLS0gL2Rldi9udWxsCisrKyBiL2RlY29yYXRlLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIGRlY29yYXRlLmMgLSBkZWNvcmF0ZSBhIGdpdCBvYmplY3Qgd2l0aCBzb21lIGFyYml0cmFyeQorICogZGF0YS4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX29iaihjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHVuc2lnbmVkIGludCBuKQoreworCXJldHVybiBvaWRoYXNoKCZvYmotPm9pZCkgJSBuOworfQorCitzdGF0aWMgdm9pZCAqaW5zZXJ0X2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKmJhc2UsIHZvaWQgKmRlY29yYXRpb24pCit7CisJaW50IHNpemUgPSBuLT5zaXplOworCXN0cnVjdCBkZWNvcmF0aW9uX2VudHJ5ICplbnRyaWVzID0gbi0+ZW50cmllczsKKwl1bnNpZ25lZCBpbnQgaiA9IGhhc2hfb2JqKGJhc2UsIHNpemUpOworCisJd2hpbGUgKGVudHJpZXNbal0uYmFzZSkgeworCQlpZiAoZW50cmllc1tqXS5iYXNlID09IGJhc2UpIHsKKwkJCXZvaWQgKm9sZCA9IGVudHJpZXNbal0uZGVjb3JhdGlvbjsKKwkJCWVudHJpZXNbal0uZGVjb3JhdGlvbiA9IGRlY29yYXRpb247CisJCQlyZXR1cm4gb2xkOworCQl9CisJCWlmICgrK2ogPj0gc2l6ZSkKKwkJCWogPSAwOworCX0KKwllbnRyaWVzW2pdLmJhc2UgPSBiYXNlOworCWVudHJpZXNbal0uZGVjb3JhdGlvbiA9IGRlY29yYXRpb247CisJbi0+bnIrKzsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZ3Jvd19kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuKQoreworCWludCBpOworCWludCBvbGRfc2l6ZSA9IG4tPnNpemU7CisJc3RydWN0IGRlY29yYXRpb25fZW50cnkgKm9sZF9lbnRyaWVzID0gbi0+ZW50cmllczsKKworCW4tPnNpemUgPSAob2xkX3NpemUgKyAxMDAwKSAqIDMgLyAyOworCW4tPmVudHJpZXMgPSB4Y2FsbG9jKG4tPnNpemUsIHNpemVvZihzdHJ1Y3QgZGVjb3JhdGlvbl9lbnRyeSkpOworCW4tPm5yID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBvbGRfc2l6ZTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBvYmplY3QgKmJhc2UgPSBvbGRfZW50cmllc1tpXS5iYXNlOworCQl2b2lkICpkZWNvcmF0aW9uID0gb2xkX2VudHJpZXNbaV0uZGVjb3JhdGlvbjsKKworCQlpZiAoIWRlY29yYXRpb24pCisJCQljb250aW51ZTsKKwkJaW5zZXJ0X2RlY29yYXRpb24obiwgYmFzZSwgZGVjb3JhdGlvbik7CisJfQorCWZyZWUob2xkX2VudHJpZXMpOworfQorCit2b2lkICphZGRfZGVjb3JhdGlvbihzdHJ1Y3QgZGVjb3JhdGlvbiAqbiwgY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqLAorCQl2b2lkICpkZWNvcmF0aW9uKQoreworCWludCBuciA9IG4tPm5yICsgMTsKKworCWlmIChuciA+IG4tPnNpemUgKiAyIC8gMykKKwkJZ3Jvd19kZWNvcmF0aW9uKG4pOworCXJldHVybiBpbnNlcnRfZGVjb3JhdGlvbihuLCBvYmosIGRlY29yYXRpb24pOworfQorCit2b2lkICpsb29rdXBfZGVjb3JhdGlvbihzdHJ1Y3QgZGVjb3JhdGlvbiAqbiwgY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqKQoreworCXVuc2lnbmVkIGludCBqOworCisJLyogbm90aGluZyB0byBsb29rdXAgKi8KKwlpZiAoIW4tPnNpemUpCisJCXJldHVybiBOVUxMOworCWogPSBoYXNoX29iaihvYmosIG4tPnNpemUpOworCWZvciAoOzspIHsKKwkJc3RydWN0IGRlY29yYXRpb25fZW50cnkgKnJlZiA9IG4tPmVudHJpZXMgKyBqOworCQlpZiAocmVmLT5iYXNlID09IG9iaikKKwkJCXJldHVybiByZWYtPmRlY29yYXRpb247CisJCWlmICghcmVmLT5iYXNlKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICgrK2ogPT0gbi0+c2l6ZSkKKwkJCWogPSAwOworCX0KK30KZGlmZiAtLWdpdCBhL2RlY29yYXRlLmggYi9kZWNvcmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDNkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kZWNvcmF0ZS5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgREVDT1JBVEVfSAorI2RlZmluZSBERUNPUkFURV9ICisKKy8qCisgKiBBIGRhdGEgc3RydWN0dXJlIHRoYXQgYXNzb2NpYXRlcyBHaXQgb2JqZWN0cyB0byB2b2lkIHBvaW50ZXJzLiBTZWUKKyAqIHQvaGVscGVyL3Rlc3QtZXhhbXBsZS1kZWNvcmF0ZS5jIGZvciBhIGRlbW9uc3RyYXRpb24gb2YgaG93IHRvIHVzZSB0aGVzZQorICogZnVuY3Rpb25zLgorICovCisKKy8qCisgKiBBbiBlbnRyeSBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBkZWNvcmF0aW9uX2VudHJ5IHsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0ICpiYXNlOworCXZvaWQgKmRlY29yYXRpb247Cit9OworCisvKgorICogVGhlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgbXVzdCBiZSB6ZXJvLWluaXRpYWxpemVkLgorICovCitzdHJ1Y3QgZGVjb3JhdGlvbiB7CisJLyoKKwkgKiBOb3QgdXNlZCBieSB0aGUgZGVjb3JhdGlvbiBtZWNoYW5pc20uIENsaWVudHMgbWF5IHVzZSB0aGlzIGZvcgorCSAqIHdoYXRldmVyIHRoZXkgd2FudC4KKwkgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyoKKwkgKiBUaGUgY2FwYWNpdHkgb2YgImVudHJpZXMiLgorCSAqLworCXVuc2lnbmVkIGludCBzaXplOworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIHJlYWwgR2l0IG9iamVjdHMgKHRoYXQgaXMsIGVudHJpZXMgd2l0aCBub24tTlVMTAorCSAqICJiYXNlIikuCisJICovCisJdW5zaWduZWQgaW50IG5yOworCisJLyoKKwkgKiBUaGUgZW50cmllcy4gVGhpcyBpcyBhbiBhcnJheSBvZiBzaXplICJzaXplIiwgY29udGFpbmluZyBuciBlbnRyaWVzCisJICogd2l0aCBub24tTlVMTCAiYmFzZSIgYW5kIChzaXplIC0gbnIpIGVudHJpZXMgd2l0aCBOVUxMICJiYXNlIi4KKwkgKi8KKwlzdHJ1Y3QgZGVjb3JhdGlvbl9lbnRyeSAqZW50cmllczsKK307CisKKy8qCisgKiBBZGQgYW4gYXNzb2NpYXRpb24gZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBnaXZlbiBwb2ludGVyICh3aGljaCBtYXkgYmUKKyAqIE5VTEwpLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzbHkgYXNzb2NpYXRlZCBwb2ludGVyLiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cworICogYXNzb2NpYXRpb24sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgorICovCit2b2lkICphZGRfZGVjb3JhdGlvbihzdHJ1Y3QgZGVjb3JhdGlvbiAqbiwgY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkZWNvcmF0aW9uKTsKKworLyoKKyAqIFJldHVybiB0aGUgcG9pbnRlciBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBvYmplY3QuIElmIHRoZXJlIGlzIG5vCisgKiBhc3NvY2lhdGlvbiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCisgKi8KK3ZvaWQgKmxvb2t1cF9kZWNvcmF0aW9uKHN0cnVjdCBkZWNvcmF0aW9uICpuLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RlbHRhLWlzbGFuZHMuYyBiL2RlbHRhLWlzbGFuZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWRiZDNjCi0tLSAvZGV2L251bGwKKysrIGIvZGVsdGEtaXNsYW5kcy5jCkBAIC0wLDAgKzEsNTA3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJraGFzaC5oIgorI2luY2x1ZGUgInBhY2stYml0bWFwLmgiCisjaW5jbHVkZSAicGFjay1vYmplY3RzLmgiCisjaW5jbHVkZSAiZGVsdGEtaXNsYW5kcy5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworS0hBU0hfSU5JVChzdHIsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCAxLCBraF9zdHJfaGFzaF9mdW5jLCBraF9zdHJfaGFzaF9lcXVhbCkKKworc3RhdGljIGtoX29pZF9tYXBfdCAqaXNsYW5kX21hcmtzOworc3RhdGljIHVuc2lnbmVkIGlzbGFuZF9jb3VudGVyOworc3RhdGljIHVuc2lnbmVkIGlzbGFuZF9jb3VudGVyX2NvcmU7CisKK3N0YXRpYyBraF9zdHJfdCAqcmVtb3RlX2lzbGFuZHM7CisKK3N0cnVjdCByZW1vdGVfaXNsYW5kIHsKKwl1aW50NjRfdCBoYXNoOworCXN0cnVjdCBvaWRfYXJyYXkgb2lkczsKK307CisKK3N0cnVjdCBpc2xhbmRfYml0bWFwIHsKKwl1aW50MzJfdCByZWZjb3VudDsKKwl1aW50MzJfdCBiaXRzW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIHVpbnQzMl90IGlzbGFuZF9iaXRtYXBfc2l6ZTsKKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGJpdG1hcDsgaWYgIm9sZCIgaXMgbm90IE5VTEwsIHRoZSBuZXcgYml0bWFwIHdpbGwgYmUgYSBjb3B5CisgKiBvZiAib2xkIi4gT3RoZXJ3aXNlLCB0aGUgbmV3IGJpdG1hcCBpcyBlbXB0eS4KKyAqLworc3RhdGljIHN0cnVjdCBpc2xhbmRfYml0bWFwICppc2xhbmRfYml0bWFwX25ldyhjb25zdCBzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqb2xkKQoreworCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpc2xhbmRfYml0bWFwKSArIChpc2xhbmRfYml0bWFwX3NpemUgKiA0KTsKKwlzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqYiA9IHhjYWxsb2MoMSwgc2l6ZSk7CisKKwlpZiAob2xkKQorCQltZW1jcHkoYiwgb2xkLCBzaXplKTsKKworCWItPnJlZmNvdW50ID0gMTsKKwlyZXR1cm4gYjsKK30KKworc3RhdGljIHZvaWQgaXNsYW5kX2JpdG1hcF9vcihzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqYSwgY29uc3Qgc3RydWN0IGlzbGFuZF9iaXRtYXAgKmIpCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpc2xhbmRfYml0bWFwX3NpemU7ICsraSkKKwkJYS0+Yml0c1tpXSB8PSBiLT5iaXRzW2ldOworfQorCitzdGF0aWMgaW50IGlzbGFuZF9iaXRtYXBfaXNfc3Vic2V0KHN0cnVjdCBpc2xhbmRfYml0bWFwICpzZWxmLAorCQlzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqc3VwZXIpCit7CisJdWludDMyX3QgaTsKKworCWlmIChzZWxmID09IHN1cGVyKQorCQlyZXR1cm4gMTsKKworCWZvciAoaSA9IDA7IGkgPCBpc2xhbmRfYml0bWFwX3NpemU7ICsraSkgeworCQlpZiAoKHNlbGYtPmJpdHNbaV0gJiBzdXBlci0+Yml0c1tpXSkgIT0gc2VsZi0+Yml0c1tpXSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisjZGVmaW5lIElTTEFORF9CSVRNQVBfQkxPQ0soeCkgKHggLyAzMikKKyNkZWZpbmUgSVNMQU5EX0JJVE1BUF9NQVNLKHgpICgxIDw8ICh4ICUgMzIpKQorCitzdGF0aWMgdm9pZCBpc2xhbmRfYml0bWFwX3NldChzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqc2VsZiwgdWludDMyX3QgaSkKK3sKKwlzZWxmLT5iaXRzW0lTTEFORF9CSVRNQVBfQkxPQ0soaSldIHw9IElTTEFORF9CSVRNQVBfTUFTSyhpKTsKK30KKworc3RhdGljIGludCBpc2xhbmRfYml0bWFwX2dldChzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqc2VsZiwgdWludDMyX3QgaSkKK3sKKwlyZXR1cm4gKHNlbGYtPmJpdHNbSVNMQU5EX0JJVE1BUF9CTE9DSyhpKV0gJiBJU0xBTkRfQklUTUFQX01BU0soaSkpICE9IDA7Cit9CisKK2ludCBpbl9zYW1lX2lzbGFuZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmdfb2lkLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpzcmNfb2lkKQoreworCWtoaXRlcl90IHRyZ19wb3MsIHNyY19wb3M7CisKKwkvKiBJZiB3ZSBhcmVuJ3QgdXNpbmcgaXNsYW5kcywgYXNzdW1lIGV2ZXJ5dGhpbmcgZ29lcyB0b2dldGhlci4gKi8KKwlpZiAoIWlzbGFuZF9tYXJrcykKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgYSBiaXRtYXAgZm9yIHRoZSB0YXJnZXQsIHdlIGNhbiBkZWx0YSBpdAorCSAqIGFnYWluc3QgYW55dGhpbmcgLS0gaXQncyBub3QgYW4gaW1wb3J0YW50IG9iamVjdAorCSAqLworCXRyZ19wb3MgPSBraF9nZXRfb2lkX21hcChpc2xhbmRfbWFya3MsICp0cmdfb2lkKTsKKwlpZiAodHJnX3BvcyA+PSBraF9lbmQoaXNsYW5kX21hcmtzKSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIGlmIHRoZSBzb3VyY2UgKG91ciBkZWx0YSBiYXNlKSBkb2Vzbid0IGhhdmUgYSBiaXRtYXAsCisJICogd2UgZG9uJ3Qgd2FudCB0byBiYXNlIGFueSBkZWx0YXMgb24gaXQhCisJICovCisJc3JjX3BvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgKnNyY19vaWQpOworCWlmIChzcmNfcG9zID49IGtoX2VuZChpc2xhbmRfbWFya3MpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpc2xhbmRfYml0bWFwX2lzX3N1YnNldChraF92YWx1ZShpc2xhbmRfbWFya3MsIHRyZ19wb3MpLAorCQkJCWtoX3ZhbHVlKGlzbGFuZF9tYXJrcywgc3JjX3BvcykpOworfQorCitpbnQgaXNsYW5kX2RlbHRhX2NtcChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICphLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiKQoreworCWtoaXRlcl90IGFfcG9zLCBiX3BvczsKKwlzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqYV9iaXRtYXAgPSBOVUxMLCAqYl9iaXRtYXAgPSBOVUxMOworCisJaWYgKCFpc2xhbmRfbWFya3MpCisJCXJldHVybiAwOworCisJYV9wb3MgPSBraF9nZXRfb2lkX21hcChpc2xhbmRfbWFya3MsICphKTsKKwlpZiAoYV9wb3MgPCBraF9lbmQoaXNsYW5kX21hcmtzKSkKKwkJYV9iaXRtYXAgPSBraF92YWx1ZShpc2xhbmRfbWFya3MsIGFfcG9zKTsKKworCWJfcG9zID0ga2hfZ2V0X29pZF9tYXAoaXNsYW5kX21hcmtzLCAqYik7CisJaWYgKGJfcG9zIDwga2hfZW5kKGlzbGFuZF9tYXJrcykpCisJCWJfYml0bWFwID0ga2hfdmFsdWUoaXNsYW5kX21hcmtzLCBiX3Bvcyk7CisKKwlpZiAoYV9iaXRtYXApIHsKKwkJaWYgKCFiX2JpdG1hcCB8fCAhaXNsYW5kX2JpdG1hcF9pc19zdWJzZXQoYV9iaXRtYXAsIGJfYml0bWFwKSkKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKGJfYml0bWFwKSB7CisJCWlmICghYV9iaXRtYXAgfHwgIWlzbGFuZF9iaXRtYXBfaXNfc3Vic2V0KGJfYml0bWFwLCBhX2JpdG1hcCkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpc2xhbmRfYml0bWFwICpjcmVhdGVfb3JfZ2V0X2lzbGFuZF9tYXJrcyhzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJa2hpdGVyX3QgcG9zOworCWludCBoYXNoX3JldDsKKworCXBvcyA9IGtoX3B1dF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgb2JqLT5vaWQsICZoYXNoX3JldCk7CisJaWYgKGhhc2hfcmV0KQorCQlraF92YWx1ZShpc2xhbmRfbWFya3MsIHBvcykgPSBpc2xhbmRfYml0bWFwX25ldyhOVUxMKTsKKworCXJldHVybiBraF92YWx1ZShpc2xhbmRfbWFya3MsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9pc2xhbmRfbWFya3Moc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqbWFya3MpCit7CisJc3RydWN0IGlzbGFuZF9iaXRtYXAgKmI7CisJa2hpdGVyX3QgcG9zOworCWludCBoYXNoX3JldDsKKworCXBvcyA9IGtoX3B1dF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgb2JqLT5vaWQsICZoYXNoX3JldCk7CisJaWYgKGhhc2hfcmV0KSB7CisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgb25lIHlldDsgbWFrZSBhIGNvcHktb24td3JpdGUgb2YgdGhlCisJCSAqIHBhcmVudC4KKwkJICovCisJCW1hcmtzLT5yZWZjb3VudCsrOworCQlraF92YWx1ZShpc2xhbmRfbWFya3MsIHBvcykgPSBtYXJrczsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogV2UgZG8gaGF2ZSBpdC4gTWFrZSBzdXJlIHdlIHNwbGl0IGFueSBjb3B5LW9uLXdyaXRlIGJlZm9yZQorCSAqIHVwZGF0aW5nLgorCSAqLworCWIgPSBraF92YWx1ZShpc2xhbmRfbWFya3MsIHBvcyk7CisJaWYgKGItPnJlZmNvdW50ID4gMSkgeworCQliLT5yZWZjb3VudC0tOworCQliID0ga2hfdmFsdWUoaXNsYW5kX21hcmtzLCBwb3MpID0gaXNsYW5kX2JpdG1hcF9uZXcoYik7CisJfQorCWlzbGFuZF9iaXRtYXBfb3IoYiwgbWFya3MpOworfQorCitzdGF0aWMgdm9pZCBtYXJrX3JlbW90ZV9pc2xhbmRfMShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgc3RydWN0IHJlbW90ZV9pc2xhbmQgKnJsLAorCQkJCSBpbnQgaXNfY29yZV9pc2xhbmQpCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBybC0+b2lkcy5ucjsgKytpKSB7CisJCXN0cnVjdCBpc2xhbmRfYml0bWFwICptYXJrczsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcGFyc2Vfb2JqZWN0KHIsICZybC0+b2lkcy5vaWRbaV0pOworCisJCWlmICghb2JqKQorCQkJY29udGludWU7CisKKwkJbWFya3MgPSBjcmVhdGVfb3JfZ2V0X2lzbGFuZF9tYXJrcyhvYmopOworCQlpc2xhbmRfYml0bWFwX3NldChtYXJrcywgaXNsYW5kX2NvdW50ZXIpOworCisJCWlmIChpc19jb3JlX2lzbGFuZCAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCW9iai0+ZmxhZ3MgfD0gTkVFRFNfQklUTUFQOworCisJCS8qIElmIGl0IHdhcyBhIHRhZywgYWxzbyBtYWtlIHN1cmUgd2UgaGl0IHRoZSB1bmRlcmx5aW5nIG9iamVjdC4gKi8KKwkJd2hpbGUgKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQkJb2JqID0gKChzdHJ1Y3QgdGFnICopb2JqKS0+dGFnZ2VkOworCQkJaWYgKG9iaikgeworCQkJCXBhcnNlX29iamVjdChyLCAmb2JqLT5vaWQpOworCQkJCW1hcmtzID0gY3JlYXRlX29yX2dldF9pc2xhbmRfbWFya3Mob2JqKTsKKwkJCQlpc2xhbmRfYml0bWFwX3NldChtYXJrcywgaXNsYW5kX2NvdW50ZXIpOworCQkJfQorCQl9CisJfQorCisJaWYgKGlzX2NvcmVfaXNsYW5kKQorCQlpc2xhbmRfY291bnRlcl9jb3JlID0gaXNsYW5kX2NvdW50ZXI7CisKKwlpc2xhbmRfY291bnRlcisrOworfQorCitzdHJ1Y3QgdHJlZV9pc2xhbmRzX3RvZG8geworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGludCBkZXB0aDsKK307CisKK3N0YXRpYyBpbnQgdHJlZV9kZXB0aF9jb21wYXJlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IHRyZWVfaXNsYW5kc190b2RvICp0b2RvX2EgPSBhOworCWNvbnN0IHN0cnVjdCB0cmVlX2lzbGFuZHNfdG9kbyAqdG9kb19iID0gYjsKKworCXJldHVybiB0b2RvX2EtPmRlcHRoIC0gdG9kb19iLT5kZXB0aDsKK30KKwordm9pZCByZXNvbHZlX3RyZWVfaXNsYW5kcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgaW50IHByb2dyZXNzLAorCQkJICBzdHJ1Y3QgcGFja2luZ19kYXRhICp0b19wYWNrKQoreworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3Nfc3RhdGUgPSBOVUxMOworCXN0cnVjdCB0cmVlX2lzbGFuZHNfdG9kbyAqdG9kbzsKKwlpbnQgbnIgPSAwOworCWludCBpOworCisJaWYgKCFpc2xhbmRfbWFya3MpCisJCXJldHVybjsKKworCS8qCisJICogV2UgcHJvY2VzcyBvbmx5IHRyZWVzLCBhcyBjb21taXRzIGFuZCB0YWdzIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQKKwkgKiAoYW5kIHBhc3NlZCB0aGVpciBtYXJrcyBvbiB0byByb290IHRyZWVzLCBhcyB3ZWxsLiBXZSBtdXN0IG1ha2Ugc3VyZQorCSAqIHRvIHByb2Nlc3MgdGhlbSBpbiBkZXNjZW5kaW5nIHRyZWUtZGVwdGggb3JkZXIgc28gdGhhdCBtYXJrcworCSAqIHByb3BhZ2F0ZSBkb3duIHRoZSB0cmVlIHByb3Blcmx5LCBldmVuIGlmIGEgc3ViLXRyZWUgaXMgZm91bmQgaW4KKwkgKiBtdWx0aXBsZSBwYXJlbnQgdHJlZXMuCisJICovCisJQUxMT0NfQVJSQVkodG9kbywgdG9fcGFjay0+bnJfb2JqZWN0cyk7CisJZm9yIChpID0gMDsgaSA8IHRvX3BhY2stPm5yX29iamVjdHM7IGkrKykgeworCQlpZiAob2VfdHlwZSgmdG9fcGFjay0+b2JqZWN0c1tpXSkgPT0gT0JKX1RSRUUpIHsKKwkJCXRvZG9bbnJdLmVudHJ5ID0gJnRvX3BhY2stPm9iamVjdHNbaV07CisJCQl0b2RvW25yXS5kZXB0aCA9IG9lX3RyZWVfZGVwdGgodG9fcGFjaywgJnRvX3BhY2stPm9iamVjdHNbaV0pOworCQkJbnIrKzsKKwkJfQorCX0KKwlRU09SVCh0b2RvLCBuciwgdHJlZV9kZXB0aF9jb21wYXJlKTsKKworCWlmIChwcm9ncmVzcykKKwkJcHJvZ3Jlc3Nfc3RhdGUgPSBzdGFydF9wcm9ncmVzcyhfKCJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiKSwgbnIpOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50ID0gdG9kb1tpXS5lbnRyeTsKKwkJc3RydWN0IGlzbGFuZF9iaXRtYXAgKnJvb3RfbWFya3M7CisJCXN0cnVjdCB0cmVlICp0cmVlOworCQlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCQlraGl0ZXJfdCBwb3M7CisKKwkJcG9zID0ga2hfZ2V0X29pZF9tYXAoaXNsYW5kX21hcmtzLCBlbnQtPmlkeC5vaWQpOworCQlpZiAocG9zID49IGtoX2VuZChpc2xhbmRfbWFya3MpKQorCQkJY29udGludWU7CisKKwkJcm9vdF9tYXJrcyA9IGtoX3ZhbHVlKGlzbGFuZF9tYXJrcywgcG9zKTsKKworCQl0cmVlID0gbG9va3VwX3RyZWUociwgJmVudC0+aWR4Lm9pZCk7CisJCWlmICghdHJlZSB8fCBwYXJzZV90cmVlKHRyZWUpIDwgMCkKKwkJCWRpZShfKCJiYWQgdHJlZSBvYmplY3QgJXMiKSwgb2lkX3RvX2hleCgmZW50LT5pZHgub2lkKSk7CisKKwkJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwkJCWlmIChTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkKKwkJCQljb250aW51ZTsKKworCQkJb2JqID0gbG9va3VwX29iamVjdChyLCAmZW50cnkub2lkKTsKKwkJCWlmICghb2JqKQorCQkJCWNvbnRpbnVlOworCisJCQlzZXRfaXNsYW5kX21hcmtzKG9iaiwgcm9vdF9tYXJrcyk7CisJCX0KKworCQlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworCisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsIGkrMSk7CisJfQorCisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3Nfc3RhdGUpOworCWZyZWUodG9kbyk7Cit9CisKK3N0YXRpYyByZWdleF90ICppc2xhbmRfcmVnZXhlczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNsYW5kX3JlZ2V4ZXNfYWxsb2MsIGlzbGFuZF9yZWdleGVzX25yOworc3RhdGljIGNvbnN0IGNoYXIgKmNvcmVfaXNsYW5kX25hbWU7CisKK3N0YXRpYyBpbnQgaXNsYW5kX2NvbmZpZ19jYWxsYmFjayhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcChrLCAicGFjay5pc2xhbmQiKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHJlID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKCF2KQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCisJCUFMTE9DX0dST1coaXNsYW5kX3JlZ2V4ZXMsIGlzbGFuZF9yZWdleGVzX25yICsgMSwgaXNsYW5kX3JlZ2V4ZXNfYWxsb2MpOworCisJCWlmICgqdiAhPSAnXicpCisJCQlzdHJidWZfYWRkY2goJnJlLCAnXicpOworCQlzdHJidWZfYWRkc3RyKCZyZSwgdik7CisKKwkJaWYgKHJlZ2NvbXAoJmlzbGFuZF9yZWdleGVzW2lzbGFuZF9yZWdleGVzX25yXSwgcmUuYnVmLCBSRUdfRVhURU5ERUQpKQorCQkJZGllKF8oImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiKSwgaywgcmUuYnVmKTsKKworCQlzdHJidWZfcmVsZWFzZSgmcmUpOworCQlpc2xhbmRfcmVnZXhlc19ucisrOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcChrLCAicGFjay5pc2xhbmRjb3JlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY29yZV9pc2xhbmRfbmFtZSwgaywgdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlZl90b19pc2xhbmQoY29uc3QgY2hhciAqaXNsYW5kX25hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwl1aW50NjRfdCBzaGFfY29yZTsKKwlzdHJ1Y3QgcmVtb3RlX2lzbGFuZCAqcmwgPSBOVUxMOworCisJaW50IGhhc2hfcmV0OworCWtoaXRlcl90IHBvcyA9IGtoX3B1dF9zdHIocmVtb3RlX2lzbGFuZHMsIGlzbGFuZF9uYW1lLCAmaGFzaF9yZXQpOworCisJaWYgKGhhc2hfcmV0KSB7CisJCWtoX2tleShyZW1vdGVfaXNsYW5kcywgcG9zKSA9IHhzdHJkdXAoaXNsYW5kX25hbWUpOworCQlraF92YWx1ZShyZW1vdGVfaXNsYW5kcywgcG9zKSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZW1vdGVfaXNsYW5kKSk7CisJfQorCisJcmwgPSBraF92YWx1ZShyZW1vdGVfaXNsYW5kcywgcG9zKTsKKwlvaWRfYXJyYXlfYXBwZW5kKCZybC0+b2lkcywgb2lkKTsKKworCW1lbWNweSgmc2hhX2NvcmUsIG9pZC0+aGFzaCwgc2l6ZW9mKHVpbnQ2NF90KSk7CisJcmwtPmhhc2ggKz0gc2hhX2NvcmU7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9pc2xhbmRfZm9yX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgaW50IGZsYWdzLCB2b2lkICpkYXRhKQoreworCS8qCisJICogV2Ugc2hvdWxkIGFkdmVydGlzZSAnQVJSQVlfU0laRShtYXRjaGVzKSAtIDInIGFzIHRoZSBtYXgsCisJICogc28gd2UgY2FuIGRpYWdub3NlIGJlbG93IGEgY29uZmlnIHdpdGggbW9yZSBjYXB0dXJlIGdyb3VwcworCSAqIHRoYW4gd2Ugc3VwcG9ydC4KKwkgKi8KKwlyZWdtYXRjaF90IG1hdGNoZXNbMTZdOworCWludCBpLCBtOworCXN0cnVjdCBzdHJidWYgaXNsYW5kX25hbWUgPSBTVFJCVUZfSU5JVDsKKworCS8qIHdhbGsgYmFja3dhcmRzIHRvIGdldCBsYXN0LW9uZS13aW5zIG9yZGVyaW5nICovCisJZm9yIChpID0gaXNsYW5kX3JlZ2V4ZXNfbnIgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoIXJlZ2V4ZWMoJmlzbGFuZF9yZWdleGVzW2ldLCByZWZuYW1lLAorCQkJICAgICBBUlJBWV9TSVpFKG1hdGNoZXMpLCBtYXRjaGVzLCAwKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobWF0Y2hlc1tBUlJBWV9TSVpFKG1hdGNoZXMpIC0gMV0ucm1fc28gIT0gLTEpCisJCXdhcm5pbmcoXygiaXNsYW5kIHJlZ2V4IGZyb20gY29uZmlnIGhhcyAiCisJCQkgICJ0b28gbWFueSBjYXB0dXJlIGdyb3VwcyAobWF4PSVkKSIpLAorCQkJKGludClBUlJBWV9TSVpFKG1hdGNoZXMpIC0gMik7CisKKwlmb3IgKG0gPSAxOyBtIDwgQVJSQVlfU0laRShtYXRjaGVzKTsgbSsrKSB7CisJCXJlZ21hdGNoX3QgKm1hdGNoID0gJm1hdGNoZXNbbV07CisKKwkJaWYgKG1hdGNoLT5ybV9zbyA9PSAtMSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc2xhbmRfbmFtZS5sZW4pCisJCQlzdHJidWZfYWRkY2goJmlzbGFuZF9uYW1lLCAnLScpOworCisJCXN0cmJ1Zl9hZGQoJmlzbGFuZF9uYW1lLCByZWZuYW1lICsgbWF0Y2gtPnJtX3NvLCBtYXRjaC0+cm1fZW8gLSBtYXRjaC0+cm1fc28pOworCX0KKworCWFkZF9yZWZfdG9faXNsYW5kKGlzbGFuZF9uYW1lLmJ1Ziwgb2lkKTsKKwlzdHJidWZfcmVsZWFzZSgmaXNsYW5kX25hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJlbW90ZV9pc2xhbmQgKmdldF9jb3JlX2lzbGFuZCh2b2lkKQoreworCWlmIChjb3JlX2lzbGFuZF9uYW1lKSB7CisJCWtoaXRlcl90IHBvcyA9IGtoX2dldF9zdHIocmVtb3RlX2lzbGFuZHMsIGNvcmVfaXNsYW5kX25hbWUpOworCQlpZiAocG9zIDwga2hfZW5kKHJlbW90ZV9pc2xhbmRzKSkKKwkJCXJldHVybiBraF92YWx1ZShyZW1vdGVfaXNsYW5kcywgcG9zKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZGVkdXBsaWNhdGVfaXNsYW5kcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3QgcmVtb3RlX2lzbGFuZCAqaXNsYW5kLCAqY29yZSA9IE5VTEwsICoqbGlzdDsKKwl1bnNpZ25lZCBpbnQgaXNsYW5kX2NvdW50LCBkc3QsIHNyYywgcmVmLCBpID0gMDsKKworCWlzbGFuZF9jb3VudCA9IGtoX3NpemUocmVtb3RlX2lzbGFuZHMpOworCUFMTE9DX0FSUkFZKGxpc3QsIGlzbGFuZF9jb3VudCk7CisKKwlraF9mb3JlYWNoX3ZhbHVlKHJlbW90ZV9pc2xhbmRzLCBpc2xhbmQsIHsKKwkJbGlzdFtpKytdID0gaXNsYW5kOworCX0pOworCisJZm9yIChyZWYgPSAwOyByZWYgKyAxIDwgaXNsYW5kX2NvdW50OyByZWYrKykgeworCQlmb3IgKHNyYyA9IHJlZiArIDEsIGRzdCA9IHNyYzsgc3JjIDwgaXNsYW5kX2NvdW50OyBzcmMrKykgeworCQkJaWYgKGxpc3RbcmVmXS0+aGFzaCA9PSBsaXN0W3NyY10tPmhhc2gpCisJCQkJY29udGludWU7CisKKwkJCWlmIChzcmMgIT0gZHN0KQorCQkJCWxpc3RbZHN0XSA9IGxpc3Rbc3JjXTsKKworCQkJZHN0Kys7CisJCX0KKwkJaXNsYW5kX2NvdW50ID0gZHN0OworCX0KKworCWlzbGFuZF9iaXRtYXBfc2l6ZSA9IChpc2xhbmRfY291bnQgLyAzMikgKyAxOworCWNvcmUgPSBnZXRfY29yZV9pc2xhbmQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBpc2xhbmRfY291bnQ7ICsraSkgeworCQltYXJrX3JlbW90ZV9pc2xhbmRfMShyLCBsaXN0W2ldLCBjb3JlICYmIGxpc3RbaV0tPmhhc2ggPT0gY29yZS0+aGFzaCk7CisJfQorCisJZnJlZShsaXN0KTsKK30KKwordm9pZCBsb2FkX2RlbHRhX2lzbGFuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCBwcm9ncmVzcykKK3sKKwlpc2xhbmRfbWFya3MgPSBraF9pbml0X29pZF9tYXAoKTsKKwlyZW1vdGVfaXNsYW5kcyA9IGtoX2luaXRfc3RyKCk7CisKKwlnaXRfY29uZmlnKGlzbGFuZF9jb25maWdfY2FsbGJhY2ssIE5VTEwpOworCWZvcl9lYWNoX3JlZihmaW5kX2lzbGFuZF9mb3JfcmVmLCBOVUxMKTsKKwlkZWR1cGxpY2F0ZV9pc2xhbmRzKHIpOworCisJaWYgKHByb2dyZXNzKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiTWFya2VkICVkIGlzbGFuZHMsIGRvbmUuXG4iKSwgaXNsYW5kX2NvdW50ZXIpOworfQorCit2b2lkIHByb3BhZ2F0ZV9pc2xhbmRfbWFya3Moc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgY29tbWl0LT5vYmplY3Qub2lkKTsKKworCWlmIChwb3MgPCBraF9lbmQoaXNsYW5kX21hcmtzKSkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJCXN0cnVjdCBpc2xhbmRfYml0bWFwICpyb290X21hcmtzID0ga2hfdmFsdWUoaXNsYW5kX21hcmtzLCBwb3MpOworCisJCXBhcnNlX2NvbW1pdChjb21taXQpOworCQlzZXRfaXNsYW5kX21hcmtzKCZnZXRfY29tbWl0X3RyZWUoY29tbWl0KS0+b2JqZWN0LCByb290X21hcmtzKTsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkKKwkJCXNldF9pc2xhbmRfbWFya3MoJnAtPml0ZW0tPm9iamVjdCwgcm9vdF9tYXJrcyk7CisJfQorfQorCitpbnQgY29tcHV0ZV9wYWNrX2xheWVycyhzdHJ1Y3QgcGFja2luZ19kYXRhICp0b19wYWNrKQoreworCXVpbnQzMl90IGk7CisKKwlpZiAoIWNvcmVfaXNsYW5kX25hbWUgfHwgIWlzbGFuZF9tYXJrcykKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgdG9fcGFjay0+bnJfb2JqZWN0czsgKytpKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gJnRvX3BhY2stPm9iamVjdHNbaV07CisJCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWRfbWFwKGlzbGFuZF9tYXJrcywgZW50cnktPmlkeC5vaWQpOworCisJCW9lX3NldF9sYXllcih0b19wYWNrLCBlbnRyeSwgMSk7CisKKwkJaWYgKHBvcyA8IGtoX2VuZChpc2xhbmRfbWFya3MpKSB7CisJCQlzdHJ1Y3QgaXNsYW5kX2JpdG1hcCAqYml0bWFwID0ga2hfdmFsdWUoaXNsYW5kX21hcmtzLCBwb3MpOworCisJCQlpZiAoaXNsYW5kX2JpdG1hcF9nZXQoYml0bWFwLCBpc2xhbmRfY291bnRlcl9jb3JlKSkKKwkJCQlvZV9zZXRfbGF5ZXIodG9fcGFjaywgZW50cnksIDApOworCQl9CisJfQorCisJcmV0dXJuIDI7Cit9CmRpZmYgLS1naXQgYS9kZWx0YS1pc2xhbmRzLmggYi9kZWx0YS1pc2xhbmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwZjk1MgotLS0gL2Rldi9udWxsCisrKyBiL2RlbHRhLWlzbGFuZHMuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIERFTFRBX0lTTEFORFNfSAorI2RlZmluZSBERUxUQV9JU0xBTkRTX0gKKworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3QgcGFja2luZ19kYXRhOworc3RydWN0IHJlcG9zaXRvcnk7CisKK2ludCBpc2xhbmRfZGVsdGFfY21wKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmEsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmIpOworaW50IGluX3NhbWVfaXNsYW5kKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKTsKK3ZvaWQgcmVzb2x2ZV90cmVlX2lzbGFuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgIGludCBwcm9ncmVzcywKKwkJCSAgc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjayk7Cit2b2lkIGxvYWRfZGVsdGFfaXNsYW5kcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgaW50IHByb2dyZXNzKTsKK3ZvaWQgcHJvcGFnYXRlX2lzbGFuZF9tYXJrcyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworaW50IGNvbXB1dGVfcGFja19sYXllcnMoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjayk7CisKKyNlbmRpZiAvKiBERUxUQV9JU0xBTkRTX0ggKi8KZGlmZiAtLWdpdCBhL2RlbHRhLmggYi9kZWx0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZjVmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kZWx0YS5oCkBAIC0wLDAgKzEsMTA0IEBACisjaWZuZGVmIERFTFRBX0gKKyNkZWZpbmUgREVMVEFfSAorCisvKiBvcGFxdWUgb2JqZWN0IGZvciBkZWx0YSBpbmRleCAqLworc3RydWN0IGRlbHRhX2luZGV4OworCisvKgorICogY3JlYXRlX2RlbHRhX2luZGV4OiBjb21wdXRlIGluZGV4IGRhdGEgZnJvbSBnaXZlbiBidWZmZXIKKyAqCisgKiBUaGlzIHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRlbHRhX2luZGV4IHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0bworICogc3Vic2VxdWVudCBjcmVhdGVfZGVsdGEoKSBjYWxscywgb3IgdG8gZnJlZV9kZWx0YV9pbmRleCgpLiAgQSBOVUxMIHBvaW50ZXIKKyAqIGlzIHJldHVybmVkIG9uIGZhaWx1cmUuICBUaGUgZ2l2ZW4gYnVmZmVyIG11c3Qgbm90IGJlIGZyZWVkIG9yIGFsdGVyZWQKKyAqIGJlZm9yZSBmcmVlX2RlbHRhX2luZGV4KCkgaXMgY2FsbGVkLiAgVGhlIHJldHVybmVkIHBvaW50ZXIgbXVzdCBiZSBmcmVlZAorICogdXNpbmcgZnJlZV9kZWx0YV9pbmRleCgpLgorICovCitzdHJ1Y3QgZGVsdGFfaW5kZXggKgorY3JlYXRlX2RlbHRhX2luZGV4KGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBidWZzaXplKTsKKworLyoKKyAqIGZyZWVfZGVsdGFfaW5kZXg6IGZyZWUgdGhlIGluZGV4IGNyZWF0ZWQgYnkgY3JlYXRlX2RlbHRhX2luZGV4KCkKKyAqCisgKiBHaXZlbiBwb2ludGVyIG11c3QgYmUgd2hhdCBjcmVhdGVfZGVsdGFfaW5kZXgoKSByZXR1cm5lZCwgb3IgTlVMTC4KKyAqLwordm9pZCBmcmVlX2RlbHRhX2luZGV4KHN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXgpOworCisvKgorICogc2l6ZW9mX2RlbHRhX2luZGV4OiByZXR1cm5zIG1lbW9yeSB1c2FnZSBvZiBkZWx0YSBpbmRleAorICoKKyAqIEdpdmVuIHBvaW50ZXIgbXVzdCBiZSB3aGF0IGNyZWF0ZV9kZWx0YV9pbmRleCgpIHJldHVybmVkLCBvciBOVUxMLgorICovCit1bnNpZ25lZCBsb25nIHNpemVvZl9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KTsKKworLyoKKyAqIGNyZWF0ZV9kZWx0YTogY3JlYXRlIGEgZGVsdGEgZnJvbSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBidWZmZXJzIHVzaW5nCisgKiB0aGUgc2FtZSBkZWx0YV9pbmRleCBwb2ludGVyLiAgSWYgbWF4X2RlbHRhX3NpemUgaXMgbm9uLXplcm8gYW5kIHRoZQorICogcmVzdWx0aW5nIGRlbHRhIGlzIHRvIGJlIGxhcmdlciB0aGFuIG1heF9kZWx0YV9zaXplIHRoZW4gTlVMTCBpcyByZXR1cm5lZC4KKyAqIE9uIHN1Y2Nlc3MsIGEgbm9uLU5VTEwgcG9pbnRlciB0byB0aGUgYnVmZmVyIHdpdGggdGhlIGRlbHRhIGRhdGEgaXMKKyAqIHJldHVybmVkIGFuZCAqZGVsdGFfc2l6ZSBpcyB1cGRhdGVkIHdpdGggaXRzIHNpemUuICBUaGUgcmV0dXJuZWQgYnVmZmVyCisgKiBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQgKgorY3JlYXRlX2RlbHRhKGNvbnN0IHN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXgsCisJICAgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSwKKwkgICAgIHVuc2lnbmVkIGxvbmcgKmRlbHRhX3NpemUsIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhX3NpemUpOworCisvKgorICogZGlmZl9kZWx0YTogY3JlYXRlIGEgZGVsdGEgZnJvbSBzb3VyY2UgYnVmZmVyIHRvIHRhcmdldCBidWZmZXIKKyAqCisgKiBJZiBtYXhfZGVsdGFfc2l6ZSBpcyBub24temVybyBhbmQgdGhlIHJlc3VsdGluZyBkZWx0YSBpcyB0byBiZSBsYXJnZXIKKyAqIHRoYW4gbWF4X2RlbHRhX3NpemUgdGhlbiBOVUxMIGlzIHJldHVybmVkLiAgT24gc3VjY2VzcywgYSBub24tTlVMTAorICogcG9pbnRlciB0byB0aGUgYnVmZmVyIHdpdGggdGhlIGRlbHRhIGRhdGEgaXMgcmV0dXJuZWQgYW5kICpkZWx0YV9zaXplIGlzCisgKiB1cGRhdGVkIHdpdGggaXRzIHNpemUuICBUaGUgcmV0dXJuZWQgYnVmZmVyIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICoKK2RpZmZfZGVsdGEoY29uc3Qgdm9pZCAqc3JjX2J1ZiwgdW5zaWduZWQgbG9uZyBzcmNfYnVmc2l6ZSwKKwkgICBjb25zdCB2b2lkICp0cmdfYnVmLCB1bnNpZ25lZCBsb25nIHRyZ19idWZzaXplLAorCSAgIHVuc2lnbmVkIGxvbmcgKmRlbHRhX3NpemUsIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhX3NpemUpCit7CisJc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCA9IGNyZWF0ZV9kZWx0YV9pbmRleChzcmNfYnVmLCBzcmNfYnVmc2l6ZSk7CisJaWYgKGluZGV4KSB7CisJCXZvaWQgKmRlbHRhID0gY3JlYXRlX2RlbHRhKGluZGV4LCB0cmdfYnVmLCB0cmdfYnVmc2l6ZSwKKwkJCQkJICAgZGVsdGFfc2l6ZSwgbWF4X2RlbHRhX3NpemUpOworCQlmcmVlX2RlbHRhX2luZGV4KGluZGV4KTsKKwkJcmV0dXJuIGRlbHRhOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHBhdGNoX2RlbHRhOiByZWNyZWF0ZSB0YXJnZXQgYnVmZmVyIGdpdmVuIHNvdXJjZSBidWZmZXIgYW5kIGRlbHRhIGRhdGEKKyAqCisgKiBPbiBzdWNjZXNzLCBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBidWZmZXIgaXMgcmV0dXJuZWQgYW5kCisgKiAqdHJnX2J1ZnNpemUgaXMgdXBkYXRlZCB3aXRoIGl0cyBzaXplLiAgT24gZmFpbHVyZSBhIE5VTEwgcG9pbnRlciBpcworICogcmV0dXJuZWQuICBUaGUgcmV0dXJuZWQgYnVmZmVyIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKyAqLwordm9pZCAqcGF0Y2hfZGVsdGEoY29uc3Qgdm9pZCAqc3JjX2J1ZiwgdW5zaWduZWQgbG9uZyBzcmNfc2l6ZSwKKwkJICBjb25zdCB2b2lkICpkZWx0YV9idWYsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSwKKwkJICB1bnNpZ25lZCBsb25nICpkc3Rfc2l6ZSk7CisKKy8qIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBkZWx0YSBzaXplIGlzIDQgYnl0ZXMgKi8KKyNkZWZpbmUgREVMVEFfU0laRV9NSU4JNAorCisvKgorICogVGhpcyBtdXN0IGJlIGNhbGxlZCB0d2ljZSBvbiB0aGUgZGVsdGEgZGF0YSBidWZmZXIsIGZpcnN0IHRvIGdldCB0aGUKKyAqIGV4cGVjdGVkIHNvdXJjZSBidWZmZXIgc2l6ZSwgYW5kIGFnYWluIHRvIGdldCB0aGUgdGFyZ2V0IGJ1ZmZlciBzaXplLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2RlbHRhX2hkcl9zaXplKGNvbnN0IHVuc2lnbmVkIGNoYXIgKipkYXRhcCwKKwkJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRvcCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gKmRhdGFwOworCXVuc2lnbmVkIGxvbmcgY21kLCBzaXplID0gMDsKKwlpbnQgaSA9IDA7CisJZG8geworCQljbWQgPSAqZGF0YSsrOworCQlzaXplIHw9IChjbWQgJiAweDdmKSA8PCBpOworCQlpICs9IDc7CisJfSB3aGlsZSAoY21kICYgMHg4MCAmJiBkYXRhIDwgdG9wKTsKKwkqZGF0YXAgPSBkYXRhOworCXJldHVybiBzaXplOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RldGVjdC1jb21waWxlciBiL2RldGVjdC1jb21waWxlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MGI3NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZGV0ZWN0LWNvbXBpbGVyCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorIworIyBQcm9iZSB0aGUgY29tcGlsZXIgZm9yIHZpbnRhZ2UsIHZlcnNpb24sIGV0Yy4gVGhpcyBpcyB1c2VkIGZvciBzZXR0aW5nCisjIG9wdGlvbmFsIG1ha2Uga25vYnMgdW5kZXIgdGhlIERFVkVMT1BFUiBrbm9iLgorCitDQz0iJCoiCisKKyMgd2UgZ2V0IHNvbWV0aGluZyBsaWtlICh0aGlzIGlzIGF0IGxlYXN0IHRydWUgZm9yIGdjYyBhbmQgY2xhbmcpCisjCisjIEZyZWVCU0QgY2xhbmcgdmVyc2lvbiAzLjQuMSAodGFncy9SRUxFQVNFLi4uKQorZ2V0X3ZlcnNpb25fbGluZSgpIHsKKwkkQ0MgLXYgMj4mMSB8IGdyZXAgJyB2ZXJzaW9uICcKK30KKworZ2V0X2ZhbWlseSgpIHsKKwlnZXRfdmVyc2lvbl9saW5lIHwgc2VkICdzL15cKC4qXCkgdmVyc2lvbiBbMC05XVteIF0qIC4qL1wxLycKK30KKworZ2V0X3ZlcnNpb24oKSB7CisJZ2V0X3ZlcnNpb25fbGluZSB8IHNlZCAncy9eLiogdmVyc2lvbiBcKFswLTldW14gXSpcKSAuKi9cMS8nCit9CisKK3ByaW50X2ZsYWdzKCkgeworCWZhbWlseT0kMQorCXZlcnNpb249JChnZXRfdmVyc2lvbiB8IGN1dCAtZiAxIC1kIC4pCisKKwkjIFByaW50IGEgZmVhdHVyZSBmbGFnIG5vdCBvbmx5IGZvciB0aGUgY3VycmVudCB2ZXJzaW9uLCBidXQgYWxzbworCSMgZm9yIGFueSBwcmlvciB2ZXJzaW9ucyB3ZSBlbmNvbXBhc3MuIFRoaXMgYXZvaWRzIG5lZWRpbmcgdG8gZG8KKwkjIG51bWVyaWMgY29tcGFyaXNvbnMgaW4gbWFrZSwgd2hpY2ggYXJlIGF3a3dhcmQuCisJd2hpbGUgdGVzdCAiJHZlcnNpb24iIC1ndCAwCisJZG8KKwkJZWNobyAkZmFtaWx5JHZlcnNpb24KKwkJdmVyc2lvbj0kKCh2ZXJzaW9uIC0gMSkpCisJZG9uZQorfQorCitjYXNlICIkKGdldF9mYW1pbHkpIiBpbgorZ2NjKQorCXByaW50X2ZsYWdzIGdjYworCTs7CitjbGFuZykKKwlwcmludF9mbGFncyBjbGFuZworCTs7CisiRnJlZUJTRCBjbGFuZyIpCisJcHJpbnRfZmxhZ3MgY2xhbmcKKwk7OworIkFwcGxlIExMVk0iKQorCXByaW50X2ZsYWdzIGNsYW5nCisJOzsKKyopCisJOiB1bmtub3duIGNvbXBpbGVyIGZhbWlseQorCTs7Citlc2FjCmRpZmYgLS1naXQgYS9kaWZmLWRlbHRhLmMgYi9kaWZmLWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZWEwOAotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYtZGVsdGEuYwpAQCAtMCwwICsxLDQ5NiBAQAorLyoKKyAqIGRpZmYtZGVsdGEuYzogZ2VuZXJhdGUgYSBkZWx0YSBiZXR3ZWVuIHR3byBidWZmZXJzCisgKgorICogVGhpcyBjb2RlIHdhcyBncmVhdGx5IGluc3BpcmVkIGJ5IHBhcnRzIG9mIExpYlhEaWZmIGZyb20gRGF2aWRlIExpYmVuemkKKyAqIGh0dHA6Ly93d3cueG1haWxzZXJ2ZXIub3JnL3hkaWZmLWxpYi5odG1sCisgKgorICogUmV3cml0dGVuIGZvciBHSVQgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4sIChDKSAyMDA1LTIwMDcKKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorCisvKiBtYXhpbXVtIGhhc2ggZW50cnkgbGlzdCBmb3IgdGhlIHNhbWUgaGFzaCBidWNrZXQgKi8KKyNkZWZpbmUgSEFTSF9MSU1JVCA2NAorCisjZGVmaW5lIFJBQklOX1NISUZUIDIzCisjZGVmaW5lIFJBQklOX1dJTkRPVyAxNgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRbMjU2XSA9IHsKKwkweDAwMDAwMDAwLCAweGFiNTliNGQxLCAweDU2YjM2OWEyLCAweGZkZWFkZDczLCAweDA2M2Y2Nzk1LCAweGFkNjZkMzQ0LAorCTB4NTA4YzBlMzcsIDB4ZmJkNWJhZTYsIDB4MGM3ZWNmMmEsIDB4YTcyNzdiZmIsIDB4NWFjZGE2ODgsIDB4ZjE5NDEyNTksCisJMHgwYTQxYThiZiwgMHhhMTE4MWM2ZSwgMHg1Y2YyYzExZCwgMHhmN2FiNzVjYywgMHgxOGZkOWU1NCwgMHhiM2E0MmE4NSwKKwkweDRlNGVmN2Y2LCAweGU1MTc0MzI3LCAweDFlYzJmOWMxLCAweGI1OWI0ZDEwLCAweDQ4NzE5MDYzLCAweGUzMjgyNGIyLAorCTB4MTQ4MzUxN2UsIDB4YmZkYWU1YWYsIDB4NDIzMDM4ZGMsIDB4ZTk2OThjMGQsIDB4MTJiYzM2ZWIsIDB4YjllNTgyM2EsCisJMHg0NDBmNWY0OSwgMHhlZjU2ZWI5OCwgMHgzMWZiM2NhOCwgMHg5YWEyODg3OSwgMHg2NzQ4NTUwYSwgMHhjYzExZTFkYiwKKwkweDM3YzQ1YjNkLCAweDljOWRlZmVjLCAweDYxNzczMjlmLCAweGNhMmU4NjRlLCAweDNkODVmMzgyLCAweDk2ZGM0NzUzLAorCTB4NmIzNjlhMjAsIDB4YzA2ZjJlZjEsIDB4M2JiYTk0MTcsIDB4OTBlMzIwYzYsIDB4NmQwOWZkYjUsIDB4YzY1MDQ5NjQsCisJMHgyOTA2YTJmYywgMHg4MjVmMTYyZCwgMHg3ZmI1Y2I1ZSwgMHhkNGVjN2Y4ZiwgMHgyZjM5YzU2OSwgMHg4NDYwNzFiOCwKKwkweDc5OGFhY2NiLCAweGQyZDMxODFhLCAweDI1Nzg2ZGQ2LCAweDhlMjFkOTA3LCAweDczY2IwNDc0LCAweGQ4OTJiMGE1LAorCTB4MjM0NzBhNDMsIDB4ODgxZWJlOTIsIDB4NzVmNDYzZTEsIDB4ZGVhZGQ3MzAsIDB4NjNmNjc5NTAsIDB4YzhhZmNkODEsCisJMHgzNTQ1MTBmMiwgMHg5ZTFjYTQyMywgMHg2NWM5MWVjNSwgMHhjZTkwYWExNCwgMHgzMzdhNzc2NywgMHg5ODIzYzNiNiwKKwkweDZmODhiNjdhLCAweGM0ZDEwMmFiLCAweDM5M2JkZmQ4LCAweDkyNjI2YjA5LCAweDY5YjdkMWVmLCAweGMyZWU2NTNlLAorCTB4M2YwNGI4NGQsIDB4OTQ1ZDBjOWMsIDB4N2IwYmU3MDQsIDB4ZDA1MjUzZDUsIDB4MmRiODhlYTYsIDB4ODZlMTNhNzcsCisJMHg3ZDM0ODA5MSwgMHhkNjZkMzQ0MCwgMHgyYjg3ZTkzMywgMHg4MGRlNWRlMiwgMHg3Nzc1MjgyZSwgMHhkYzJjOWNmZiwKKwkweDIxYzY0MThjLCAweDhhOWZmNTVkLCAweDcxNGE0ZmJiLCAweGRhMTNmYjZhLCAweDI3ZjkyNjE5LCAweDhjYTA5MmM4LAorCTB4NTIwZDQ1ZjgsIDB4Zjk1NGYxMjksIDB4MDRiZTJjNWEsIDB4YWZlNzk4OGIsIDB4NTQzMjIyNmQsIDB4ZmY2Yjk2YmMsCisJMHgwMjgxNGJjZiwgMHhhOWQ4ZmYxZSwgMHg1ZTczOGFkMiwgMHhmNTJhM2UwMywgMHgwOGMwZTM3MCwgMHhhMzk5NTdhMSwKKwkweDU4NGNlZDQ3LCAweGYzMTU1OTk2LCAweDBlZmY4NGU1LCAweGE1YTYzMDM0LCAweDRhZjBkYmFjLCAweGUxYTk2ZjdkLAorCTB4MWM0M2IyMGUsIDB4YjcxYTA2ZGYsIDB4NGNjZmJjMzksIDB4ZTc5NjA4ZTgsIDB4MWE3Y2Q1OWIsIDB4YjEyNTYxNGEsCisJMHg0NjhlMTQ4NiwgMHhlZGQ3YTA1NywgMHgxMDNkN2QyNCwgMHhiYjY0YzlmNSwgMHg0MGIxNzMxMywgMHhlYmU4YzdjMiwKKwkweDE2MDIxYWIxLCAweGJkNWJhZTYwLCAweDZjYjU0NjcxLCAweGM3ZWNmMmEwLCAweDNhMDYyZmQzLCAweDkxNWY5YjAyLAorCTB4NmE4YTIxZTQsIDB4YzFkMzk1MzUsIDB4M2MzOTQ4NDYsIDB4OTc2MGZjOTcsIDB4NjBjYjg5NWIsIDB4Y2I5MjNkOGEsCisJMHgzNjc4ZTBmOSwgMHg5ZDIxNTQyOCwgMHg2NmY0ZWVjZSwgMHhjZGFkNWExZiwgMHgzMDQ3ODc2YywgMHg5YjFlMzNiZCwKKwkweDc0NDhkODI1LCAweGRmMTE2Y2Y0LCAweDIyZmJiMTg3LCAweDg5YTIwNTU2LCAweDcyNzdiZmIwLCAweGQ5MmUwYjYxLAorCTB4MjRjNGQ2MTIsIDB4OGY5ZDYyYzMsIDB4NzgzNjE3MGYsIDB4ZDM2ZmEzZGUsIDB4MmU4NTdlYWQsIDB4ODVkY2NhN2MsCisJMHg3ZTA5NzA5YSwgMHhkNTUwYzQ0YiwgMHgyOGJhMTkzOCwgMHg4M2UzYWRlOSwgMHg1ZDRlN2FkOSwgMHhmNjE3Y2UwOCwKKwkweDBiZmQxMzdiLCAweGEwYTRhN2FhLCAweDViNzExZDRjLCAweGYwMjhhOTlkLCAweDBkYzI3NGVlLCAweGE2OWJjMDNmLAorCTB4NTEzMGI1ZjMsIDB4ZmE2OTAxMjIsIDB4MDc4M2RjNTEsIDB4YWNkYTY4ODAsIDB4NTcwZmQyNjYsIDB4ZmM1NjY2YjcsCisJMHgwMWJjYmJjNCwgMHhhYWU1MGYxNSwgMHg0NWIzZTQ4ZCwgMHhlZWVhNTA1YywgMHgxMzAwOGQyZiwgMHhiODU5MzlmZSwKKwkweDQzOGM4MzE4LCAweGU4ZDUzN2M5LCAweDE1M2ZlYWJhLCAweGJlNjY1ZTZiLCAweDQ5Y2QyYmE3LCAweGUyOTQ5Zjc2LAorCTB4MWY3ZTQyMDUsIDB4YjQyN2Y2ZDQsIDB4NGZmMjRjMzIsIDB4ZTRhYmY4ZTMsIDB4MTk0MTI1OTAsIDB4YjIxODkxNDEsCisJMHgwZjQzM2YyMSwgMHhhNDFhOGJmMCwgMHg1OWYwNTY4MywgMHhmMmE5ZTI1MiwgMHgwOTdjNThiNCwgMHhhMjI1ZWM2NSwKKwkweDVmY2YzMTE2LCAweGY0OTY4NWM3LCAweDAzM2RmMDBiLCAweGE4NjQ0NGRhLCAweDU1OGU5OWE5LCAweGZlZDcyZDc4LAorCTB4MDUwMjk3OWUsIDB4YWU1YjIzNGYsIDB4NTNiMWZlM2MsIDB4ZjhlODRhZWQsIDB4MTdiZWExNzUsIDB4YmNlNzE1YTQsCisJMHg0MTBkYzhkNywgMHhlYTU0N2MwNiwgMHgxMTgxYzZlMCwgMHhiYWQ4NzIzMSwgMHg0NzMyYWY0MiwgMHhlYzZiMWI5MywKKwkweDFiYzA2ZTVmLCAweGIwOTlkYThlLCAweDRkNzMwN2ZkLCAweGU2MmFiMzJjLCAweDFkZmYwOWNhLCAweGI2YTZiZDFiLAorCTB4NGI0YzYwNjgsIDB4ZTAxNWQ0YjksIDB4M2ViODAzODksIDB4OTVlMWI3NTgsIDB4NjgwYjZhMmIsIDB4YzM1MmRlZmEsCisJMHgzODg3NjQxYywgMHg5M2RlZDBjZCwgMHg2ZTM0MGRiZSwgMHhjNTZkYjk2ZiwgMHgzMmM2Y2NhMywgMHg5OTlmNzg3MiwKKwkweDY0NzVhNTAxLCAweGNmMmMxMWQwLCAweDM0ZjlhYjM2LCAweDlmYTAxZmU3LCAweDYyNGFjMjk0LCAweGM5MTM3NjQ1LAorCTB4MjY0NTlkZGQsIDB4OGQxYzI5MGMsIDB4NzBmNmY0N2YsIDB4ZGJhZjQwYWUsIDB4MjA3YWZhNDgsIDB4OGIyMzRlOTksCisJMHg3NmM5OTNlYSwgMHhkZDkwMjczYiwgMHgyYTNiNTJmNywgMHg4MTYyZTYyNiwgMHg3Yzg4M2I1NSwgMHhkN2QxOGY4NCwKKwkweDJjMDQzNTYyLCAweDg3NWQ4MWIzLCAweDdhYjc1Y2MwLCAweGQxZWVlODExCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFVbMjU2XSA9IHsKKwkweDAwMDAwMDAwLCAweDdlYjUyMDBkLCAweDU2MzNmNGNiLCAweDI4ODZkNGM2LCAweDA3M2U1ZDQ3LCAweDc5OGI3ZDRhLAorCTB4NTEwZGE5OGMsIDB4MmZiODg5ODEsIDB4MGU3Y2JhOGUsIDB4NzBjOTlhODMsIDB4NTg0ZjRlNDUsIDB4MjZmYTZlNDgsCisJMHgwOTQyZTdjOSwgMHg3N2Y3YzdjNCwgMHg1ZjcxMTMwMiwgMHgyMWM0MzMwZiwgMHgxY2Y5NzUxYywgMHg2MjRjNTUxMSwKKwkweDRhY2E4MWQ3LCAweDM0N2ZhMWRhLCAweDFiYzcyODViLCAweDY1NzIwODU2LCAweDRkZjRkYzkwLCAweDMzNDFmYzlkLAorCTB4MTI4NWNmOTIsIDB4NmMzMGVmOWYsIDB4NDRiNjNiNTksIDB4M2EwMzFiNTQsIDB4MTViYjkyZDUsIDB4NmIwZWIyZDgsCisJMHg0Mzg4NjYxZSwgMHgzZDNkNDYxMywgMHgzOWYyZWEzOCwgMHg0NzQ3Y2EzNSwgMHg2ZmMxMWVmMywgMHgxMTc0M2VmZSwKKwkweDNlY2NiNzdmLCAweDQwNzk5NzcyLCAweDY4ZmY0M2I0LCAweDE2NGE2M2I5LCAweDM3OGU1MGI2LCAweDQ5M2I3MGJiLAorCTB4NjFiZGE0N2QsIDB4MWYwODg0NzAsIDB4MzBiMDBkZjEsIDB4NGUwNTJkZmMsIDB4NjY4M2Y5M2EsIDB4MTgzNmQ5MzcsCisJMHgyNTBiOWYyNCwgMHg1YmJlYmYyOSwgMHg3MzM4NmJlZiwgMHgwZDhkNGJlMiwgMHgyMjM1YzI2MywgMHg1YzgwZTI2ZSwKKwkweDc0MDYzNmE4LCAweDBhYjMxNmE1LCAweDJiNzcyNWFhLCAweDU1YzIwNWE3LCAweDdkNDRkMTYxLCAweDAzZjFmMTZjLAorCTB4MmM0OTc4ZWQsIDB4NTJmYzU4ZTAsIDB4N2E3YThjMjYsIDB4MDRjZmFjMmIsIDB4NzNlNWQ0NzAsIDB4MGQ1MGY0N2QsCisJMHgyNWQ2MjBiYiwgMHg1YjYzMDBiNiwgMHg3NGRiODkzNywgMHgwYTZlYTkzYSwgMHgyMmU4N2RmYywgMHg1YzVkNWRmMSwKKwkweDdkOTk2ZWZlLCAweDAzMmM0ZWYzLCAweDJiYWE5YTM1LCAweDU1MWZiYTM4LCAweDdhYTczM2I5LCAweDA0MTIxM2I0LAorCTB4MmM5NGM3NzIsIDB4NTIyMWU3N2YsIDB4NmYxY2ExNmMsIDB4MTFhOTgxNjEsIDB4MzkyZjU1YTcsIDB4NDc5YTc1YWEsCisJMHg2ODIyZmMyYiwgMHgxNjk3ZGMyNiwgMHgzZTExMDhlMCwgMHg0MGE0MjhlZCwgMHg2MTYwMWJlMiwgMHgxZmQ1M2JlZiwKKwkweDM3NTNlZjI5LCAweDQ5ZTZjZjI0LCAweDY2NWU0NmE1LCAweDE4ZWI2NmE4LCAweDMwNmRiMjZlLCAweDRlZDg5MjYzLAorCTB4NGExNzNlNDgsIDB4MzRhMjFlNDUsIDB4MWMyNGNhODMsIDB4NjI5MWVhOGUsIDB4NGQyOTYzMGYsIDB4MzM5YzQzMDIsCisJMHgxYjFhOTdjNCwgMHg2NWFmYjdjOSwgMHg0NDZiODRjNiwgMHgzYWRlYTRjYiwgMHgxMjU4NzAwZCwgMHg2Y2VkNTAwMCwKKwkweDQzNTVkOTgxLCAweDNkZTBmOThjLCAweDE1NjYyZDRhLCAweDZiZDMwZDQ3LCAweDU2ZWU0YjU0LCAweDI4NWI2YjU5LAorCTB4MDBkZGJmOWYsIDB4N2U2ODlmOTIsIDB4NTFkMDE2MTMsIDB4MmY2NTM2MWUsIDB4MDdlM2UyZDgsIDB4Nzk1NmMyZDUsCisJMHg1ODkyZjFkYSwgMHgyNjI3ZDFkNywgMHgwZWExMDUxMSwgMHg3MDE0MjUxYywgMHg1ZmFjYWM5ZCwgMHgyMTE5OGM5MCwKKwkweDA5OWY1ODU2LCAweDc3MmE3ODViLCAweDRjOTIxYzMxLCAweDMyMjczYzNjLCAweDFhYTFlOGZhLCAweDY0MTRjOGY3LAorCTB4NGJhYzQxNzYsIDB4MzUxOTYxN2IsIDB4MWQ5ZmI1YmQsIDB4NjMyYTk1YjAsIDB4NDJlZWE2YmYsIDB4M2M1Yjg2YjIsCisJMHgxNGRkNTI3NCwgMHg2YTY4NzI3OSwgMHg0NWQwZmJmOCwgMHgzYjY1ZGJmNSwgMHgxM2UzMGYzMywgMHg2ZDU2MmYzZSwKKwkweDUwNmI2OTJkLCAweDJlZGU0OTIwLCAweDA2NTg5ZGU2LCAweDc4ZWRiZGViLCAweDU3NTUzNDZhLCAweDI5ZTAxNDY3LAorCTB4MDE2NmMwYTEsIDB4N2ZkM2UwYWMsIDB4NWUxN2QzYTMsIDB4MjBhMmYzYWUsIDB4MDgyNDI3NjgsIDB4NzY5MTA3NjUsCisJMHg1OTI5OGVlNCwgMHgyNzljYWVlOSwgMHgwZjFhN2EyZiwgMHg3MWFmNWEyMiwgMHg3NTYwZjYwOSwgMHgwYmQ1ZDYwNCwKKwkweDIzNTMwMmMyLCAweDVkZTYyMmNmLCAweDcyNWVhYjRlLCAweDBjZWI4YjQzLCAweDI0NmQ1Zjg1LCAweDVhZDg3Zjg4LAorCTB4N2IxYzRjODcsIDB4MDVhOTZjOGEsIDB4MmQyZmI4NGMsIDB4NTM5YTk4NDEsIDB4N2MyMjExYzAsIDB4MDI5NzMxY2QsCisJMHgyYTExZTUwYiwgMHg1NGE0YzUwNiwgMHg2OTk5ODMxNSwgMHgxNzJjYTMxOCwgMHgzZmFhNzdkZSwgMHg0MTFmNTdkMywKKwkweDZlYTdkZTUyLCAweDEwMTJmZTVmLCAweDM4OTQyYTk5LCAweDQ2MjEwYTk0LCAweDY3ZTUzOTliLCAweDE5NTAxOTk2LAorCTB4MzFkNmNkNTAsIDB4NGY2M2VkNWQsIDB4NjBkYjY0ZGMsIDB4MWU2ZTQ0ZDEsIDB4MzZlODkwMTcsIDB4NDg1ZGIwMWEsCisJMHgzZjc3Yzg0MSwgMHg0MWMyZTg0YywgMHg2OTQ0M2M4YSwgMHgxN2YxMWM4NywgMHgzODQ5OTUwNiwgMHg0NmZjYjUwYiwKKwkweDZlN2E2MWNkLCAweDEwY2Y0MWMwLCAweDMxMGI3MmNmLCAweDRmYmU1MmMyLCAweDY3Mzg4NjA0LCAweDE5OGRhNjA5LAorCTB4MzYzNTJmODgsIDB4NDg4MDBmODUsIDB4NjAwNmRiNDMsIDB4MWViM2ZiNGUsIDB4MjM4ZWJkNWQsIDB4NWQzYjlkNTAsCisJMHg3NWJkNDk5NiwgMHgwYjA4Njk5YiwgMHgyNGIwZTAxYSwgMHg1YTA1YzAxNywgMHg3MjgzMTRkMSwgMHgwYzM2MzRkYywKKwkweDJkZjIwN2QzLCAweDUzNDcyN2RlLCAweDdiYzFmMzE4LCAweDA1NzRkMzE1LCAweDJhY2M1YTk0LCAweDU0Nzk3YTk5LAorCTB4N2NmZmFlNWYsIDB4MDI0YThlNTIsIDB4MDY4NTIyNzksIDB4NzgzMDAyNzQsIDB4NTBiNmQ2YjIsIDB4MmUwM2Y2YmYsCisJMHgwMWJiN2YzZSwgMHg3ZjBlNWYzMywgMHg1Nzg4OGJmNSwgMHgyOTNkYWJmOCwgMHgwOGY5OThmNywgMHg3NjRjYjhmYSwKKwkweDVlY2E2YzNjLCAweDIwN2Y0YzMxLCAweDBmYzdjNWIwLCAweDcxNzJlNWJkLCAweDU5ZjQzMTdiLCAweDI3NDExMTc2LAorCTB4MWE3YzU3NjUsIDB4NjRjOTc3NjgsIDB4NGM0ZmEzYWUsIDB4MzJmYTgzYTMsIDB4MWQ0MjBhMjIsIDB4NjNmNzJhMmYsCisJMHg0YjcxZmVlOSwgMHgzNWM0ZGVlNCwgMHgxNDAwZWRlYiwgMHg2YWI1Y2RlNiwgMHg0MjMzMTkyMCwgMHgzYzg2MzkyZCwKKwkweDEzM2ViMGFjLCAweDZkOGI5MGExLCAweDQ1MGQ0NDY3LCAweDNiYjg2NDZhCit9OworCitzdHJ1Y3QgaW5kZXhfZW50cnkgeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cjsKKwl1bnNpZ25lZCBpbnQgdmFsOworfTsKKworc3RydWN0IHVucGFja2VkX2luZGV4X2VudHJ5IHsKKwlzdHJ1Y3QgaW5kZXhfZW50cnkgZW50cnk7CisJc3RydWN0IHVucGFja2VkX2luZGV4X2VudHJ5ICpuZXh0OworfTsKKworc3RydWN0IGRlbHRhX2luZGV4IHsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisJY29uc3Qgdm9pZCAqc3JjX2J1ZjsKKwl1bnNpZ25lZCBsb25nIHNyY19zaXplOworCXVuc2lnbmVkIGludCBoYXNoX21hc2s7CisJc3RydWN0IGluZGV4X2VudHJ5ICpoYXNoW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IGRlbHRhX2luZGV4ICogY3JlYXRlX2RlbHRhX2luZGV4KGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBidWZzaXplKQoreworCXVuc2lnbmVkIGludCBpLCBoc2l6ZSwgaG1hc2ssIGVudHJpZXMsIHByZXZfdmFsLCAqaGFzaF9jb3VudDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmZmVyID0gYnVmOworCXN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXg7CisJc3RydWN0IHVucGFja2VkX2luZGV4X2VudHJ5ICplbnRyeSwgKipoYXNoOworCXN0cnVjdCBpbmRleF9lbnRyeSAqcGFja2VkX2VudHJ5LCAqKnBhY2tlZF9oYXNoOworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisKKwlpZiAoIWJ1ZiB8fCAhYnVmc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBEZXRlcm1pbmUgaW5kZXggaGFzaCBzaXplLiAgTm90ZSB0aGF0IGluZGV4aW5nIHNraXBzIHRoZQorCSAgIGZpcnN0IGJ5dGUgdG8gYWxsb3cgZm9yIG9wdGltaXppbmcgdGhlIFJhYmluJ3MgcG9seW5vbWlhbAorCSAgIGluaXRpYWxpemF0aW9uIGluIGNyZWF0ZV9kZWx0YSgpLiAqLworCWVudHJpZXMgPSAoYnVmc2l6ZSAtIDEpIC8gUkFCSU5fV0lORE9XOworCWlmIChidWZzaXplID49IDB4ZmZmZmZmZmZVTCkgeworCQkvKgorCQkgKiBDdXJyZW50IGRlbHRhIGZvcm1hdCBjYW4ndCBlbmNvZGUgb2Zmc2V0cyBpbnRvCisJCSAqIHJlZmVyZW5jZSBidWZmZXIgd2l0aCBtb3JlIHRoYW4gMzIgYml0cy4KKwkJICovCisJCWVudHJpZXMgPSAweGZmZmZmZmZlVSAvIFJBQklOX1dJTkRPVzsKKwl9CisJaHNpemUgPSBlbnRyaWVzIC8gNDsKKwlmb3IgKGkgPSA0OyAoMXUgPDwgaSkgPCBoc2l6ZTsgaSsrKTsKKwloc2l6ZSA9IDEgPDwgaTsKKwlobWFzayA9IGhzaXplIC0gMTsKKworCS8qIGFsbG9jYXRlIGxvb2t1cCBpbmRleCAqLworCW1lbXNpemUgPSBzaXplb2YoKmhhc2gpICogaHNpemUgKworCQkgIHNpemVvZigqZW50cnkpICogZW50cmllczsKKwltZW0gPSBtYWxsb2MobWVtc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCWhhc2ggPSBtZW07CisJbWVtID0gaGFzaCArIGhzaXplOworCWVudHJ5ID0gbWVtOworCisJbWVtc2V0KGhhc2gsIDAsIGhzaXplICogc2l6ZW9mKCpoYXNoKSk7CisKKwkvKiBhbGxvY2F0ZSBhbiBhcnJheSB0byBjb3VudCBoYXNoIGVudHJpZXMgKi8KKwloYXNoX2NvdW50ID0gY2FsbG9jKGhzaXplLCBzaXplb2YoKmhhc2hfY291bnQpKTsKKwlpZiAoIWhhc2hfY291bnQpIHsKKwkJZnJlZShoYXNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogdGhlbiBwb3B1bGF0ZSB0aGUgaW5kZXggKi8KKwlwcmV2X3ZhbCA9IH4wOworCWZvciAoZGF0YSA9IGJ1ZmZlciArIGVudHJpZXMgKiBSQUJJTl9XSU5ET1cgLSBSQUJJTl9XSU5ET1c7CisJICAgICBkYXRhID49IGJ1ZmZlcjsKKwkgICAgIGRhdGEgLT0gUkFCSU5fV0lORE9XKSB7CisJCXVuc2lnbmVkIGludCB2YWwgPSAwOworCQlmb3IgKGkgPSAxOyBpIDw9IFJBQklOX1dJTkRPVzsgaSsrKQorCQkJdmFsID0gKCh2YWwgPDwgOCkgfCBkYXRhW2ldKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwkJaWYgKHZhbCA9PSBwcmV2X3ZhbCkgeworCQkJLyoga2VlcCB0aGUgbG93ZXN0IG9mIGNvbnNlY3V0aXZlIGlkZW50aWNhbCBibG9ja3MgKi8KKwkJCWVudHJ5Wy0xXS5lbnRyeS5wdHIgPSBkYXRhICsgUkFCSU5fV0lORE9XOworCQkJLS1lbnRyaWVzOworCQl9IGVsc2UgeworCQkJcHJldl92YWwgPSB2YWw7CisJCQlpID0gdmFsICYgaG1hc2s7CisJCQllbnRyeS0+ZW50cnkucHRyID0gZGF0YSArIFJBQklOX1dJTkRPVzsKKwkJCWVudHJ5LT5lbnRyeS52YWwgPSB2YWw7CisJCQllbnRyeS0+bmV4dCA9IGhhc2hbaV07CisJCQloYXNoW2ldID0gZW50cnkrKzsKKwkJCWhhc2hfY291bnRbaV0rKzsKKwkJfQorCX0KKworCS8qCisJICogRGV0ZXJtaW5lIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzYW1lIGhhc2gKKwkgKiBidWNrZXQuICBUaGlzIGd1YXJkcyB1cyBhZ2FpbnN0IHBhdGhvbG9naWNhbCBkYXRhIHNldHMgY2F1c2luZworCSAqIHJlYWxseSBiYWQgaGFzaCBkaXN0cmlidXRpb24gd2l0aCBtb3N0IGVudHJpZXMgaW4gdGhlIHNhbWUgaGFzaAorCSAqIGJ1Y2tldCB0aGF0IHdvdWxkIGJyaW5nIHVzIHRvIE8obSpuKSBjb21wdXRpbmcgY29zdHMgKG0gYW5kIG4KKwkgKiBjb3JyZXNwb25kaW5nIHRvIHJlZmVyZW5jZSBhbmQgdGFyZ2V0IGJ1ZmZlciBzaXplcykuCisJICoKKwkgKiBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgaGFzaCBidWNrZXRzIGhhcyBtb3JlIGVudHJpZXMgdGhhbgorCSAqIHdlJ3JlIHdpbGxpbmcgdG8gdGVzdC4gIE90aGVyd2lzZSB3ZSBjdWxsIHRoZSBlbnRyeSBsaXN0CisJICogdW5pZm9ybWx5IHRvIHN0aWxsIHByZXNlcnZlIGEgZ29vZCByZXBhcnRpdGlvbiBhY3Jvc3MKKwkgKiB0aGUgcmVmZXJlbmNlIGJ1ZmZlci4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHNpemU7IGkrKykgeworCQlpbnQgYWNjOworCisJCWlmIChoYXNoX2NvdW50W2ldIDw9IEhBU0hfTElNSVQpCisJCQljb250aW51ZTsKKworCQkvKiBXZSBsZWF2ZSBleGFjdGx5IEhBU0hfTElNSVQgZW50cmllcyBpbiB0aGUgYnVja2V0ICovCisJCWVudHJpZXMgLT0gaGFzaF9jb3VudFtpXSAtIEhBU0hfTElNSVQ7CisKKwkJZW50cnkgPSBoYXNoW2ldOworCQlhY2MgPSAwOworCisJCS8qCisJCSAqIEFzc3VtZSB0aGF0IHRoaXMgbG9vcCBpcyBnb25lIHRocm91Z2ggZXhhY3RseQorCQkgKiBIQVNIX0xJTUlUIHRpbWVzIGFuZCBpcyBlbnRlcmVkIGFuZCBsZWZ0IHdpdGgKKwkJICogYWNjPT0wLiAgU28gdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgbG9vcAorCQkgKiBjb250cmlidXRlcyAoaGFzaF9jb3VudFtpXS1IQVNIX0xJTUlUKSpIQVNIX0xJTUlUCisJCSAqIHRvIHRoZSBhY2N1bXVsYXRvciwgYW5kIHRoZSBpbm5lciBsb29wIGNvbnNlcXVlbnRseQorCQkgKiBpcyBydW4gKGhhc2hfY291bnRbaV0tSEFTSF9MSU1JVCkgdGltZXMsIHJlbW92aW5nCisJCSAqIG9uZSBlbGVtZW50IGZyb20gdGhlIGxpc3QgZWFjaCB0aW1lLiAgU2luY2UgYWNjCisJCSAqIGJhbGFuY2VzIG91dCB0byAwIGF0IHRoZSBmaW5hbCBydW4sIHRoZSBpbm5lciBsb29wCisJCSAqIGJvZHkgY2FuJ3QgYmUgbGVmdCB3aXRoIGVudHJ5PT1OVUxMLiAgU28gd2UgaW5kZWVkCisJCSAqIGVuY291bnRlciBlbnRyeT09TlVMTCBpbiB0aGUgb3V0ZXIgbG9vcCBvbmx5LgorCQkgKi8KKwkJZG8geworCQkJYWNjICs9IGhhc2hfY291bnRbaV0gLSBIQVNIX0xJTUlUOworCQkJaWYgKGFjYyA+IDApIHsKKwkJCQlzdHJ1Y3QgdW5wYWNrZWRfaW5kZXhfZW50cnkgKmtlZXAgPSBlbnRyeTsKKwkJCQlkbyB7CisJCQkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCQkJCWFjYyAtPSBIQVNIX0xJTUlUOworCQkJCX0gd2hpbGUgKGFjYyA+IDApOworCQkJCWtlZXAtPm5leHQgPSBlbnRyeS0+bmV4dDsKKwkJCX0KKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCX0gd2hpbGUgKGVudHJ5KTsKKwl9CisJZnJlZShoYXNoX2NvdW50KTsKKworCS8qCisJICogTm93IGNyZWF0ZSB0aGUgcGFja2VkIGluZGV4IGluIGFycmF5IGZvcm0KKwkgKiByYXRoZXIgdGhhbiBsaW5rZWQgbGlzdHMuCisJICovCisJbWVtc2l6ZSA9IHNpemVvZigqaW5kZXgpCisJCSsgc2l6ZW9mKCpwYWNrZWRfaGFzaCkgKiAoaHNpemUrMSkKKwkJKyBzaXplb2YoKnBhY2tlZF9lbnRyeSkgKiBlbnRyaWVzOworCW1lbSA9IG1hbGxvYyhtZW1zaXplKTsKKwlpZiAoIW1lbSkgeworCQlmcmVlKGhhc2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleCA9IG1lbTsKKwlpbmRleC0+bWVtc2l6ZSA9IG1lbXNpemU7CisJaW5kZXgtPnNyY19idWYgPSBidWY7CisJaW5kZXgtPnNyY19zaXplID0gYnVmc2l6ZTsKKwlpbmRleC0+aGFzaF9tYXNrID0gaG1hc2s7CisKKwltZW0gPSBpbmRleC0+aGFzaDsKKwlwYWNrZWRfaGFzaCA9IG1lbTsKKwltZW0gPSBwYWNrZWRfaGFzaCArIChoc2l6ZSsxKTsKKwlwYWNrZWRfZW50cnkgPSBtZW07CisKKwlmb3IgKGkgPSAwOyBpIDwgaHNpemU7IGkrKykgeworCQkvKgorCQkgKiBDb2FsZXNjZSBhbGwgZW50cmllcyBiZWxvbmdpbmcgdG8gb25lIGxpbmtlZCBsaXN0CisJCSAqIGludG8gY29uc2VjdXRpdmUgYXJyYXkgZW50cmllcy4KKwkJICovCisJCXBhY2tlZF9oYXNoW2ldID0gcGFja2VkX2VudHJ5OworCQlmb3IgKGVudHJ5ID0gaGFzaFtpXTsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpCisJCQkqcGFja2VkX2VudHJ5KysgPSBlbnRyeS0+ZW50cnk7CisJfQorCisJLyogU2VudGluZWwgdmFsdWUgdG8gaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgbGFzdCBoYXNoIGJ1Y2tldCAqLworCXBhY2tlZF9oYXNoW2hzaXplXSA9IHBhY2tlZF9lbnRyeTsKKworCWFzc2VydChwYWNrZWRfZW50cnkgLSAoc3RydWN0IGluZGV4X2VudHJ5ICopbWVtID09IGVudHJpZXMpOworCWZyZWUoaGFzaCk7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3ZvaWQgZnJlZV9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KQoreworCWZyZWUoaW5kZXgpOworfQorCit1bnNpZ25lZCBsb25nIHNpemVvZl9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KQoreworCWlmIChpbmRleCkKKwkJcmV0dXJuIGluZGV4LT5tZW1zaXplOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgbWF4aW11bSBzaXplIGZvciBhbnkgb3Bjb2RlIHNlcXVlbmNlLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgaGVhZGVyCisgKiBwbHVzIFJhYmluIHdpbmRvdyBwbHVzIGJpZ2dlc3QgY29weS4KKyAqLworI2RlZmluZSBNQVhfT1BfU0laRQkoNSArIDUgKyAxICsgUkFCSU5fV0lORE9XICsgNykKKwordm9pZCAqCitjcmVhdGVfZGVsdGEoY29uc3Qgc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCwKKwkgICAgIGNvbnN0IHZvaWQgKnRyZ19idWYsIHVuc2lnbmVkIGxvbmcgdHJnX3NpemUsCisJICAgICB1bnNpZ25lZCBsb25nICpkZWx0YV9zaXplLCB1bnNpZ25lZCBsb25nIG1heF9zaXplKQoreworCXVuc2lnbmVkIGludCBpLCB2YWw7CisJb2ZmX3Qgb3V0cG9zLCBtb2ZmOworCXNpemVfdCBsLCBvdXRzaXplLCBtc2l6ZTsKKwlpbnQgaW5zY250OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlZl9kYXRhLCAqcmVmX3RvcCwgKmRhdGEsICp0b3A7CisJdW5zaWduZWQgY2hhciAqb3V0OworCisJKmRlbHRhX3NpemUgPSAwOworCisJaWYgKCF0cmdfYnVmIHx8ICF0cmdfc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlvdXRwb3MgPSAwOworCW91dHNpemUgPSA4MTkyOworCWlmIChtYXhfc2l6ZSAmJiBvdXRzaXplID49IG1heF9zaXplKQorCQlvdXRzaXplID0gbWF4X3NpemUgKyBNQVhfT1BfU0laRSArIDE7CisJb3V0ID0gbWFsbG9jKG91dHNpemUpOworCWlmICghb3V0KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHN0b3JlIHJlZmVyZW5jZSBidWZmZXIgc2l6ZSAqLworCWwgPSBpbmRleC0+c3JjX3NpemU7CisJd2hpbGUgKGwgPj0gMHg4MCkgeworCQlvdXRbb3V0cG9zKytdID0gbCB8IDB4ODA7CisJCWwgPj49IDc7CisJfQorCW91dFtvdXRwb3MrK10gPSBsOworCisJLyogc3RvcmUgdGFyZ2V0IGJ1ZmZlciBzaXplICovCisJbCA9IHRyZ19zaXplOworCXdoaWxlIChsID49IDB4ODApIHsKKwkJb3V0W291dHBvcysrXSA9IGwgfCAweDgwOworCQlsID4+PSA3OworCX0KKwlvdXRbb3V0cG9zKytdID0gbDsKKworCXJlZl9kYXRhID0gaW5kZXgtPnNyY19idWY7CisJcmVmX3RvcCA9IHJlZl9kYXRhICsgaW5kZXgtPnNyY19zaXplOworCWRhdGEgPSB0cmdfYnVmOworCXRvcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHRyZ19idWYgKyB0cmdfc2l6ZTsKKworCW91dHBvcysrOworCXZhbCA9IDA7CisJZm9yIChpID0gMDsgaSA8IFJBQklOX1dJTkRPVyAmJiBkYXRhIDwgdG9wOyBpKyssIGRhdGErKykgeworCQlvdXRbb3V0cG9zKytdID0gKmRhdGE7CisJCXZhbCA9ICgodmFsIDw8IDgpIHwgKmRhdGEpIF4gVFt2YWwgPj4gUkFCSU5fU0hJRlRdOworCX0KKwlpbnNjbnQgPSBpOworCisJbW9mZiA9IDA7CisJbXNpemUgPSAwOworCXdoaWxlIChkYXRhIDwgdG9wKSB7CisJCWlmIChtc2l6ZSA8IDQwOTYpIHsKKwkJCXN0cnVjdCBpbmRleF9lbnRyeSAqZW50cnk7CisJCQl2YWwgXj0gVVtkYXRhWy1SQUJJTl9XSU5ET1ddXTsKKwkJCXZhbCA9ICgodmFsIDw8IDgpIHwgKmRhdGEpIF4gVFt2YWwgPj4gUkFCSU5fU0hJRlRdOworCQkJaSA9IHZhbCAmIGluZGV4LT5oYXNoX21hc2s7CisJCQlmb3IgKGVudHJ5ID0gaW5kZXgtPmhhc2hbaV07IGVudHJ5IDwgaW5kZXgtPmhhc2hbaSsxXTsgZW50cnkrKykgeworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlZiA9IGVudHJ5LT5wdHI7CisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc3JjID0gZGF0YTsKKwkJCQl1bnNpZ25lZCBpbnQgcmVmX3NpemUgPSByZWZfdG9wIC0gcmVmOworCQkJCWlmIChlbnRyeS0+dmFsICE9IHZhbCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHJlZl9zaXplID4gdG9wIC0gc3JjKQorCQkJCQlyZWZfc2l6ZSA9IHRvcCAtIHNyYzsKKwkJCQlpZiAocmVmX3NpemUgPD0gbXNpemUpCisJCQkJCWJyZWFrOworCQkJCXdoaWxlIChyZWZfc2l6ZS0tICYmICpzcmMrKyA9PSAqcmVmKQorCQkJCQlyZWYrKzsKKwkJCQlpZiAobXNpemUgPCByZWYgLSBlbnRyeS0+cHRyKSB7CisJCQkJCS8qIHRoaXMgaXMgb3VyIGJlc3QgbWF0Y2ggc28gZmFyICovCisJCQkJCW1zaXplID0gcmVmIC0gZW50cnktPnB0cjsKKwkJCQkJbW9mZiA9IGVudHJ5LT5wdHIgLSByZWZfZGF0YTsKKwkJCQkJaWYgKG1zaXplID49IDQwOTYpIC8qIGdvb2QgZW5vdWdoICovCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAobXNpemUgPCA0KSB7CisJCQlpZiAoIWluc2NudCkKKwkJCQlvdXRwb3MrKzsKKwkJCW91dFtvdXRwb3MrK10gPSAqZGF0YSsrOworCQkJaW5zY250Kys7CisJCQlpZiAoaW5zY250ID09IDB4N2YpIHsKKwkJCQlvdXRbb3V0cG9zIC0gaW5zY250IC0gMV0gPSBpbnNjbnQ7CisJCQkJaW5zY250ID0gMDsKKwkJCX0KKwkJCW1zaXplID0gMDsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGludCBsZWZ0OworCQkJdW5zaWduZWQgY2hhciAqb3A7CisKKwkJCWlmIChpbnNjbnQpIHsKKwkJCQl3aGlsZSAobW9mZiAmJiByZWZfZGF0YVttb2ZmLTFdID09IGRhdGFbLTFdKSB7CisJCQkJCS8qIHdlIGNhbiBtYXRjaCBvbmUgYnl0ZSBiYWNrICovCisJCQkJCW1zaXplKys7CisJCQkJCW1vZmYtLTsKKwkJCQkJZGF0YS0tOworCQkJCQlvdXRwb3MtLTsKKwkJCQkJaWYgKC0taW5zY250KQorCQkJCQkJY29udGludWU7CisJCQkJCW91dHBvcy0tOyAgLyogcmVtb3ZlIGNvdW50IHNsb3QgKi8KKwkJCQkJaW5zY250LS07ICAvKiBtYWtlIGl0IC0xICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlvdXRbb3V0cG9zIC0gaW5zY250IC0gMV0gPSBpbnNjbnQ7CisJCQkJaW5zY250ID0gMDsKKwkJCX0KKworCQkJLyogQSBjb3B5IG9wIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIDY0S0IgKHBhY2sgdjIpICovCisJCQlsZWZ0ID0gKG1zaXplIDwgMHgxMDAwMCkgPyAwIDogKG1zaXplIC0gMHgxMDAwMCk7CisJCQltc2l6ZSAtPSBsZWZ0OworCisJCQlvcCA9IG91dCArIG91dHBvcysrOworCQkJaSA9IDB4ODA7CisKKwkJCWlmIChtb2ZmICYgMHgwMDAwMDBmZikKKwkJCQlvdXRbb3V0cG9zKytdID0gbW9mZiA+PiAwLCAgaSB8PSAweDAxOworCQkJaWYgKG1vZmYgJiAweDAwMDBmZjAwKQorCQkJCW91dFtvdXRwb3MrK10gPSBtb2ZmID4+IDgsICBpIHw9IDB4MDI7CisJCQlpZiAobW9mZiAmIDB4MDBmZjAwMDApCisJCQkJb3V0W291dHBvcysrXSA9IG1vZmYgPj4gMTYsIGkgfD0gMHgwNDsKKwkJCWlmIChtb2ZmICYgMHhmZjAwMDAwMCkKKwkJCQlvdXRbb3V0cG9zKytdID0gbW9mZiA+PiAyNCwgaSB8PSAweDA4OworCisJCQlpZiAobXNpemUgJiAweDAwZmYpCisJCQkJb3V0W291dHBvcysrXSA9IG1zaXplID4+IDAsIGkgfD0gMHgxMDsKKwkJCWlmIChtc2l6ZSAmIDB4ZmYwMCkKKwkJCQlvdXRbb3V0cG9zKytdID0gbXNpemUgPj4gOCwgaSB8PSAweDIwOworCisJCQkqb3AgPSBpOworCisJCQlkYXRhICs9IG1zaXplOworCQkJbW9mZiArPSBtc2l6ZTsKKwkJCW1zaXplID0gbGVmdDsKKworCQkJaWYgKG1vZmYgPiAweGZmZmZmZmZmKQorCQkJCW1zaXplID0gMDsKKworCQkJaWYgKG1zaXplIDwgNDA5NikgeworCQkJCWludCBqOworCQkJCXZhbCA9IDA7CisJCQkJZm9yIChqID0gLVJBQklOX1dJTkRPVzsgaiA8IDA7IGorKykKKwkJCQkJdmFsID0gKCh2YWwgPDwgOCkgfCBkYXRhW2pdKQorCQkJCQkgICAgICBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwkJCX0KKwkJfQorCisJCWlmIChvdXRwb3MgPj0gb3V0c2l6ZSAtIE1BWF9PUF9TSVpFKSB7CisJCQl2b2lkICp0bXAgPSBvdXQ7CisJCQlvdXRzaXplID0gb3V0c2l6ZSAqIDMgLyAyOworCQkJaWYgKG1heF9zaXplICYmIG91dHNpemUgPj0gbWF4X3NpemUpCisJCQkJb3V0c2l6ZSA9IG1heF9zaXplICsgTUFYX09QX1NJWkUgKyAxOworCQkJaWYgKG1heF9zaXplICYmIG91dHBvcyA+IG1heF9zaXplKQorCQkJCWJyZWFrOworCQkJb3V0ID0gcmVhbGxvYyhvdXQsIG91dHNpemUpOworCQkJaWYgKCFvdXQpIHsKKwkJCQlmcmVlKHRtcCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoaW5zY250KQorCQlvdXRbb3V0cG9zIC0gaW5zY250IC0gMV0gPSBpbnNjbnQ7CisKKwlpZiAobWF4X3NpemUgJiYgb3V0cG9zID4gbWF4X3NpemUpIHsKKwkJZnJlZShvdXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkqZGVsdGFfc2l6ZSA9IG91dHBvczsKKwlyZXR1cm4gb3V0OworfQpkaWZmIC0tZ2l0IGEvZGlmZi1saWIuYyBiL2RpZmYtbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4MTJmNAotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYtbGliLmMKQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiZnNtb25pdG9yLmgiCisKKy8qCisgKiBkaWZmLWZpbGVzCisgKi8KKworLyoKKyAqIEhhcyB0aGUgd29yayB0cmVlIGVudGl0eSBiZWVuIHJlbW92ZWQ/CisgKgorICogUmV0dXJuIDEgaWYgaXQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgd29yayB0cmVlLCAwIGlmIGFuIGVudGl0eSB0byBiZQorICogY29tcGFyZWQgd2l0aCB0aGUgY2FjaGUgZW50cnkgY2Ugc3RpbGwgZXhpc3RzICh0aGUgbGF0dGVyIGluY2x1ZGVzCisgKiB0aGUgY2FzZSB3aGVyZSBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBhIHN1Ym1vZHVsZSByZXBvc2l0b3J5CisgKiBleGlzdHMgZm9yIGNlIHRoYXQgaXMgYSBzdWJtb2R1bGUgLS0gaXQgaXMgYSBzdWJtb2R1bGUgdGhhdCBpcyBub3QKKyAqIGNoZWNrZWQgb3V0KS4gIFJldHVybiBuZWdhdGl2ZSBmb3IgYW4gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcmVtb3ZlZChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaWYgKGxzdGF0KGNlLT5uYW1lLCBzdCkgPCAwKSB7CisJCWlmICghaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycm5vKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKKwkJcmV0dXJuIDE7CisJaWYgKFNfSVNESVIoc3QtPnN0X21vZGUpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgc3ViOworCisJCS8qCisJCSAqIElmIGNlIGlzIGFscmVhZHkgYSBnaXRsaW5rLCB3ZSBjYW4gaGF2ZSBhIHBsYWluCisJCSAqIGRpcmVjdG9yeSAoaS5lLiB0aGUgc3VibW9kdWxlIGlzIG5vdCBjaGVja2VkIG91dCksCisJCSAqIG9yIGEgY2hlY2tlZCBvdXQgc3VibW9kdWxlLiAgRWl0aGVyIGNhc2UgdGhpcyBpcyBub3QKKwkJICogYSBjYXNlIHdoZXJlIHNvbWV0aGluZyB3YXMgcmVtb3ZlZCBmcm9tIHRoZSB3b3JrIHRyZWUsCisJCSAqIHNvIHdlIHdpbGwgcmV0dXJuIDAuCisJCSAqCisJCSAqIE90aGVyd2lzZSwgaWYgdGhlIGRpcmVjdG9yeSBpcyBub3QgYSBzdWJtb2R1bGUKKwkJICogcmVwb3NpdG9yeSwgdGhhdCBtZWFucyBjZSB3aGljaCB3YXMgYSBibG9iIHR1cm5lZCBpbnRvCisJCSAqIGEgZGlyZWN0b3J5IC0tLSB0aGUgYmxvYiB3YXMgcmVtb3ZlZCEKKwkJICovCisJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJCSAgICByZXNvbHZlX2dpdGxpbmtfcmVmKGNlLT5uYW1lLCAiSEVBRCIsICZzdWIpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogSGFzIGEgZmlsZSBjaGFuZ2VkIG9yIGhhcyBhIHN1Ym1vZHVsZSBuZXcgY29tbWl0cyBvciBhIGRpcnR5IHdvcmsgdHJlZT8KKyAqCisgKiBSZXR1cm4gMSB3aGVuIGNoYW5nZXMgYXJlIGRldGVjdGVkLCAwIG90aGVyd2lzZS4gSWYgdGhlIERJUlRZX1NVQk1PRFVMRVMKKyAqIG9wdGlvbiBpcyBzZXQsIHRoZSBjYWxsZXIgZG9lcyBub3Qgb25seSB3YW50IHRvIGtub3cgaWYgYSBzdWJtb2R1bGUgaXMKKyAqIG1vZGlmaWVkIGF0IGFsbCBidXQgd2FudHMgdG8ga25vdyBhbGwgdGhlIGNvbmRpdGlvbnMgdGhhdCBhcmUgbWV0IChuZXcKKyAqIGNvbW1pdHMsIHVudHJhY2tlZCBjb250ZW50IGFuZC9vciBtb2RpZmllZCBjb250ZW50KS4KKyAqLworc3RhdGljIGludCBtYXRjaF9zdGF0X3dpdGhfc3VibW9kdWxlKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSAgICAgc3RydWN0IHN0YXQgKnN0LCB1bnNpZ25lZCBjZV9vcHRpb24sCisJCQkJICAgICB1bnNpZ25lZCAqZGlydHlfc3VibW9kdWxlKQoreworCWludCBjaGFuZ2VkID0gaWVfbWF0Y2hfc3RhdChkaWZmb3B0LT5yZXBvLT5pbmRleCwgY2UsIHN0LCBjZV9vcHRpb24pOworCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKKwkJc3RydWN0IGRpZmZfZmxhZ3Mgb3JpZ19mbGFncyA9IGRpZmZvcHQtPmZsYWdzOworCQlpZiAoIWRpZmZvcHQtPmZsYWdzLm92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWcpCisJCQlzZXRfZGlmZm9wdF9mbGFnc19mcm9tX3N1Ym1vZHVsZV9jb25maWcoZGlmZm9wdCwgY2UtPm5hbWUpOworCQlpZiAoZGlmZm9wdC0+ZmxhZ3MuaWdub3JlX3N1Ym1vZHVsZXMpCisJCQljaGFuZ2VkID0gMDsKKwkJZWxzZSBpZiAoIWRpZmZvcHQtPmZsYWdzLmlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzICYmCisJCQkgKCFjaGFuZ2VkIHx8IGRpZmZvcHQtPmZsYWdzLmRpcnR5X3N1Ym1vZHVsZXMpKQorCQkJKmRpcnR5X3N1Ym1vZHVsZSA9IGlzX3N1Ym1vZHVsZV9tb2RpZmllZChjZS0+bmFtZSwKKwkJCQkJCQkJIGRpZmZvcHQtPmZsYWdzLmlnbm9yZV91bnRyYWNrZWRfaW5fc3VibW9kdWxlcyk7CisJCWRpZmZvcHQtPmZsYWdzID0gb3JpZ19mbGFnczsKKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2ludCBydW5fZGlmZl9maWxlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGludCBvcHRpb24pCit7CisJaW50IGVudHJpZXMsIGk7CisJaW50IGRpZmZfdW5tZXJnZWRfc3RhZ2UgPSByZXZzLT5tYXhfY291bnQ7CisJdW5zaWduZWQgY2Vfb3B0aW9uID0gKChvcHRpb24gJiBESUZGX1JBQ1lfSVNfTU9ESUZJRUQpCisJCQkgICAgICA/IENFX01BVENIX1JBQ1lfSVNfRElSVFkgOiAwKTsKKwl1aW50NjRfdCBzdGFydCA9IGdldG5hbm90aW1lKCk7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSByZXZzLT5kaWZmb3B0LnJlcG8tPmluZGV4OworCisJZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KCZyZXZzLT5kaWZmb3B0LCAiaS8iLCAidy8iKTsKKworCWlmIChkaWZmX3VubWVyZ2VkX3N0YWdlIDwgMCkKKwkJZGlmZl91bm1lcmdlZF9zdGFnZSA9IDI7CisJZW50cmllcyA9IGlzdGF0ZS0+Y2FjaGVfbnI7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgb2xkbW9kZSwgbmV3bW9kZTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWludCBjaGFuZ2VkOworCQl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgPSAwOworCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLCAqbmV3X29pZDsKKworCQlpZiAoZGlmZl9jYW5fcXVpdF9lYXJseSgmcmV2cy0+ZGlmZm9wdCkpCisJCQlicmVhazsKKworCQlpZiAoIWNlX3BhdGhfbWF0Y2goaXN0YXRlLCBjZSwgJnJldnMtPnBydW5lX2RhdGEsIE5VTEwpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNlX3N0YWdlKGNlKSkgeworCQkJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpkcGF0aDsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworCQkJdW5zaWduZWQgaW50IHd0X21vZGUgPSAwOworCQkJaW50IG51bV9jb21wYXJlX3N0YWdlcyA9IDA7CisJCQlzaXplX3QgcGF0aF9sZW47CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQkJcGF0aF9sZW4gPSBjZV9uYW1lbGVuKGNlKTsKKworCQkJZHBhdGggPSB4bWFsbG9jKGNvbWJpbmVfZGlmZl9wYXRoX3NpemUoNSwgcGF0aF9sZW4pKTsKKwkJCWRwYXRoLT5wYXRoID0gKGNoYXIgKikgJihkcGF0aC0+cGFyZW50WzVdKTsKKworCQkJZHBhdGgtPm5leHQgPSBOVUxMOworCQkJbWVtY3B5KGRwYXRoLT5wYXRoLCBjZS0+bmFtZSwgcGF0aF9sZW4pOworCQkJZHBhdGgtPnBhdGhbcGF0aF9sZW5dID0gJ1wwJzsKKwkJCW9pZGNscigmZHBhdGgtPm9pZCk7CisJCQltZW1zZXQoJihkcGF0aC0+cGFyZW50WzBdKSwgMCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXJlbnQpKjUpOworCisJCQljaGFuZ2VkID0gY2hlY2tfcmVtb3ZlZChjZSwgJnN0KTsKKwkJCWlmICghY2hhbmdlZCkKKwkJCQl3dF9tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOworCQkJZWxzZSB7CisJCQkJaWYgKGNoYW5nZWQgPCAwKSB7CisJCQkJCXBlcnJvcihjZS0+bmFtZSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQl3dF9tb2RlID0gMDsKKwkJCX0KKwkJCWRwYXRoLT5tb2RlID0gd3RfbW9kZTsKKworCQkJd2hpbGUgKGkgPCBlbnRyaWVzKSB7CisJCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpuY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQkJCWludCBzdGFnZTsKKworCQkJCWlmIChzdHJjbXAoY2UtPm5hbWUsIG5jZS0+bmFtZSkpCisJCQkJCWJyZWFrOworCisJCQkJLyogU3RhZ2UgIzIgKG91cnMpIGlzIHRoZSBmaXJzdCBwYXJlbnQsCisJCQkJICogc3RhZ2UgIzMgKHRoZWlycykgaXMgdGhlIHNlY29uZC4KKwkJCQkgKi8KKwkJCQlzdGFnZSA9IGNlX3N0YWdlKG5jZSk7CisJCQkJaWYgKDIgPD0gc3RhZ2UpIHsKKwkJCQkJaW50IG1vZGUgPSBuY2UtPmNlX21vZGU7CisJCQkJCW51bV9jb21wYXJlX3N0YWdlcysrOworCQkJCQlvaWRjcHkoJmRwYXRoLT5wYXJlbnRbc3RhZ2UgLSAyXS5vaWQsCisJCQkJCSAgICAgICAmbmNlLT5vaWQpOworCQkJCQlkcGF0aC0+cGFyZW50W3N0YWdlLTJdLm1vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChuY2UsIG1vZGUpOworCQkJCQlkcGF0aC0+cGFyZW50W3N0YWdlLTJdLnN0YXR1cyA9CisJCQkJCQlESUZGX1NUQVRVU19NT0RJRklFRDsKKwkJCQl9CisKKwkJCQkvKiBkaWZmIGFnYWluc3QgdGhlIHByb3BlciB1bm1lcmdlZCBzdGFnZSAqLworCQkJCWlmIChzdGFnZSA9PSBkaWZmX3VubWVyZ2VkX3N0YWdlKQorCQkJCQljZSA9IG5jZTsKKwkJCQlpKys7CisJCQl9CisJCQkvKgorCQkJICogQ29tcGVuc2F0ZSBmb3IgbG9vcCB1cGRhdGUKKwkJCSAqLworCQkJaS0tOworCisJCQlpZiAocmV2cy0+Y29tYmluZV9tZXJnZXMgJiYgbnVtX2NvbXBhcmVfc3RhZ2VzID09IDIpIHsKKwkJCQlzaG93X2NvbWJpbmVkX2RpZmYoZHBhdGgsIDIsCisJCQkJCQkgICByZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMsCisJCQkJCQkgICByZXZzKTsKKwkJCQlmcmVlKGRwYXRoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCUZSRUVfQU5EX05VTEwoZHBhdGgpOworCisJCQkvKgorCQkJICogU2hvdyB0aGUgZGlmZiBmb3IgdGhlICdjZScgaWYgd2UgZm91bmQgdGhlIG9uZQorCQkJICogZnJvbSB0aGUgZGVzaXJlZCBzdGFnZS4KKwkJCSAqLworCQkJcGFpciA9IGRpZmZfdW5tZXJnZSgmcmV2cy0+ZGlmZm9wdCwgY2UtPm5hbWUpOworCQkJaWYgKHd0X21vZGUpCisJCQkJcGFpci0+dHdvLT5tb2RlID0gd3RfbW9kZTsKKwkJCWlmIChjZV9zdGFnZShjZSkgIT0gZGlmZl91bm1lcmdlZF9zdGFnZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjZV91cHRvZGF0ZShjZSkgfHwgY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQljb250aW51ZTsKKworCQkvKiBJZiBDRV9WQUxJRCBpcyBzZXQsIGRvbid0IGxvb2sgYXQgd29ya2RpciBmb3IgZmlsZSByZW1vdmFsICovCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkgeworCQkJY2hhbmdlZCA9IDA7CisJCQluZXdtb2RlID0gY2UtPmNlX21vZGU7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CisJCQlpZiAoY2hhbmdlZCkgeworCQkJCWlmIChjaGFuZ2VkIDwgMCkgeworCQkJCQlwZXJyb3IoY2UtPm5hbWUpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZGlmZl9hZGRyZW1vdmUoJnJldnMtPmRpZmZvcHQsICctJywgY2UtPmNlX21vZGUsCisJCQkJCSAgICAgICAmY2UtPm9pZCwKKwkJCQkJICAgICAgICFpc19udWxsX29pZCgmY2UtPm9pZCksCisJCQkJCSAgICAgICBjZS0+bmFtZSwgMCk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKHJldnMtPmRpZmZvcHQuaXRhX2ludmlzaWJsZV9pbl9pbmRleCAmJgorCQkJCSAgIGNlX2ludGVudF90b19hZGQoY2UpKSB7CisJCQkJZGlmZl9hZGRyZW1vdmUoJnJldnMtPmRpZmZvcHQsICcrJywgY2UtPmNlX21vZGUsCisJCQkJCSAgICAgICB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLCAwLAorCQkJCQkgICAgICAgY2UtPm5hbWUsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljaGFuZ2VkID0gbWF0Y2hfc3RhdF93aXRoX3N1Ym1vZHVsZSgmcmV2cy0+ZGlmZm9wdCwgY2UsICZzdCwKKwkJCQkJCQkgICAgY2Vfb3B0aW9uLCAmZGlydHlfc3VibW9kdWxlKTsKKwkJCW5ld21vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChjZSwgc3Quc3RfbW9kZSk7CisJCX0KKworCQlpZiAoIWNoYW5nZWQgJiYgIWRpcnR5X3N1Ym1vZHVsZSkgeworCQkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCQltYXJrX2ZzbW9uaXRvcl92YWxpZChpc3RhdGUsIGNlKTsKKwkJCWlmICghcmV2cy0+ZGlmZm9wdC5mbGFncy5maW5kX2NvcGllc19oYXJkZXIpCisJCQkJY29udGludWU7CisJCX0KKwkJb2xkbW9kZSA9IGNlLT5jZV9tb2RlOworCQlvbGRfb2lkID0gJmNlLT5vaWQ7CisJCW5ld19vaWQgPSBjaGFuZ2VkID8gJm51bGxfb2lkIDogJmNlLT5vaWQ7CisJCWRpZmZfY2hhbmdlKCZyZXZzLT5kaWZmb3B0LCBvbGRtb2RlLCBuZXdtb2RlLAorCQkJICAgIG9sZF9vaWQsIG5ld19vaWQsCisJCQkgICAgIWlzX251bGxfb2lkKG9sZF9vaWQpLAorCQkJICAgICFpc19udWxsX29pZChuZXdfb2lkKSwKKwkJCSAgICBjZS0+bmFtZSwgMCwgZGlydHlfc3VibW9kdWxlKTsKKworCX0KKwlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOworCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOworCXRyYWNlX3BlcmZvcm1hbmNlX3NpbmNlKHN0YXJ0LCAiZGlmZi1maWxlcyIpOworCXJldHVybiAwOworfQorCisvKgorICogZGlmZi1pbmRleAorICovCisKKy8qIEEgZmlsZSBlbnRyeSB3ZW50IGF3YXkgb3IgYXBwZWFyZWQgKi8KK3N0YXRpYyB2b2lkIGRpZmZfaW5kZXhfc2hvd19maWxlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBvaWRfdmFsaWQsCisJCQkJIHVuc2lnbmVkIGludCBtb2RlLAorCQkJCSB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpCit7CisJZGlmZl9hZGRyZW1vdmUoJnJldnMtPmRpZmZvcHQsIHByZWZpeFswXSwgbW9kZSwKKwkJICAgICAgIG9pZCwgb2lkX3ZhbGlkLCBjZS0+bmFtZSwgZGlydHlfc3VibW9kdWxlKTsKK30KKworc3RhdGljIGludCBnZXRfc3RhdF9kYXRhKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKm9pZHAsCisJCQkgdW5zaWduZWQgaW50ICptb2RlcCwKKwkJCSBpbnQgY2FjaGVkLCBpbnQgbWF0Y2hfbWlzc2luZywKKwkJCSB1bnNpZ25lZCAqZGlydHlfc3VibW9kdWxlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZjZS0+b2lkOworCXVuc2lnbmVkIGludCBtb2RlID0gY2UtPmNlX21vZGU7CisKKwlpZiAoIWNhY2hlZCAmJiAhY2VfdXB0b2RhdGUoY2UpKSB7CisJCWludCBjaGFuZ2VkOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CisJCWlmIChjaGFuZ2VkIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJZWxzZSBpZiAoY2hhbmdlZCkgeworCQkJaWYgKG1hdGNoX21pc3NpbmcpIHsKKwkJCQkqb2lkcCA9IG9pZDsKKwkJCQkqbW9kZXAgPSBtb2RlOworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmV0dXJuIC0xOworCQl9CisJCWNoYW5nZWQgPSBtYXRjaF9zdGF0X3dpdGhfc3VibW9kdWxlKGRpZmZvcHQsIGNlLCAmc3QsCisJCQkJCQkgICAgMCwgZGlydHlfc3VibW9kdWxlKTsKKwkJaWYgKGNoYW5nZWQpIHsKKwkJCW1vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChjZSwgc3Quc3RfbW9kZSk7CisJCQlvaWQgPSAmbnVsbF9vaWQ7CisJCX0KKwl9CisKKwkqb2lkcCA9IG9pZDsKKwkqbW9kZXAgPSBtb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X25ld19maWxlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXdfZmlsZSwKKwkJCSAgaW50IGNhY2hlZCwgaW50IG1hdGNoX21pc3NpbmcpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCXVuc2lnbmVkIGludCBtb2RlOworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA9IDA7CisKKwkvKgorCSAqIE5ldyBmaWxlIGluIHRoZSBpbmRleDogaXQgbWlnaHQgYWN0dWFsbHkgYmUgZGlmZmVyZW50IGluCisJICogdGhlIHdvcmtpbmcgdHJlZS4KKwkgKi8KKwlpZiAoZ2V0X3N0YXRfZGF0YShuZXdfZmlsZSwgJm9pZCwgJm1vZGUsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZywKKwkgICAgJmRpcnR5X3N1Ym1vZHVsZSwgJnJldnMtPmRpZmZvcHQpIDwgMCkKKwkJcmV0dXJuOworCisJZGlmZl9pbmRleF9zaG93X2ZpbGUocmV2cywgIisiLCBuZXdfZmlsZSwgb2lkLCAhaXNfbnVsbF9vaWQob2lkKSwgbW9kZSwgZGlydHlfc3VibW9kdWxlKTsKK30KKworc3RhdGljIGludCBzaG93X21vZGlmaWVkKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZF9lbnRyeSwKKwkJCSBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ld19lbnRyeSwKKwkJCSBpbnQgcmVwb3J0X21pc3NpbmcsCisJCQkgaW50IGNhY2hlZCwgaW50IG1hdGNoX21pc3NpbmcpCit7CisJdW5zaWduZWQgaW50IG1vZGUsIG9sZG1vZGU7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA9IDA7CisKKwlpZiAoZ2V0X3N0YXRfZGF0YShuZXdfZW50cnksICZvaWQsICZtb2RlLCBjYWNoZWQsIG1hdGNoX21pc3NpbmcsCisJCQkgICZkaXJ0eV9zdWJtb2R1bGUsICZyZXZzLT5kaWZmb3B0KSA8IDApIHsKKwkJaWYgKHJlcG9ydF9taXNzaW5nKQorCQkJZGlmZl9pbmRleF9zaG93X2ZpbGUocmV2cywgIi0iLCBvbGRfZW50cnksCisJCQkJCSAgICAgJm9sZF9lbnRyeS0+b2lkLCAxLCBvbGRfZW50cnktPmNlX21vZGUsCisJCQkJCSAgICAgMCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmV2cy0+Y29tYmluZV9tZXJnZXMgJiYgIWNhY2hlZCAmJgorCSAgICAoIW9pZGVxKG9pZCwgJm9sZF9lbnRyeS0+b2lkKSB8fCAhb2lkZXEoJm9sZF9lbnRyeS0+b2lkLCAmbmV3X2VudHJ5LT5vaWQpKSkgeworCQlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnA7CisJCWludCBwYXRobGVuID0gY2VfbmFtZWxlbihuZXdfZW50cnkpOworCisJCXAgPSB4bWFsbG9jKGNvbWJpbmVfZGlmZl9wYXRoX3NpemUoMiwgcGF0aGxlbikpOworCQlwLT5wYXRoID0gKGNoYXIgKikgJnAtPnBhcmVudFsyXTsKKwkJcC0+bmV4dCA9IE5VTEw7CisJCW1lbWNweShwLT5wYXRoLCBuZXdfZW50cnktPm5hbWUsIHBhdGhsZW4pOworCQlwLT5wYXRoW3BhdGhsZW5dID0gMDsKKwkJcC0+bW9kZSA9IG1vZGU7CisJCW9pZGNscigmcC0+b2lkKTsKKwkJbWVtc2V0KHAtPnBhcmVudCwgMCwgMiAqIHNpemVvZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhcmVudCkpOworCQlwLT5wYXJlbnRbMF0uc3RhdHVzID0gRElGRl9TVEFUVVNfTU9ESUZJRUQ7CisJCXAtPnBhcmVudFswXS5tb2RlID0gbmV3X2VudHJ5LT5jZV9tb2RlOworCQlvaWRjcHkoJnAtPnBhcmVudFswXS5vaWQsICZuZXdfZW50cnktPm9pZCk7CisJCXAtPnBhcmVudFsxXS5zdGF0dXMgPSBESUZGX1NUQVRVU19NT0RJRklFRDsKKwkJcC0+cGFyZW50WzFdLm1vZGUgPSBvbGRfZW50cnktPmNlX21vZGU7CisJCW9pZGNweSgmcC0+cGFyZW50WzFdLm9pZCwgJm9sZF9lbnRyeS0+b2lkKTsKKwkJc2hvd19jb21iaW5lZF9kaWZmKHAsIDIsIHJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcywgcmV2cyk7CisJCWZyZWUocCk7CisJCXJldHVybiAwOworCX0KKworCW9sZG1vZGUgPSBvbGRfZW50cnktPmNlX21vZGU7CisJaWYgKG1vZGUgPT0gb2xkbW9kZSAmJiBvaWRlcShvaWQsICZvbGRfZW50cnktPm9pZCkgJiYgIWRpcnR5X3N1Ym1vZHVsZSAmJgorCSAgICAhcmV2cy0+ZGlmZm9wdC5mbGFncy5maW5kX2NvcGllc19oYXJkZXIpCisJCXJldHVybiAwOworCisJZGlmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsIG9sZG1vZGUsIG1vZGUsCisJCSAgICAmb2xkX2VudHJ5LT5vaWQsIG9pZCwgMSwgIWlzX251bGxfb2lkKG9pZCksCisJCSAgICBvbGRfZW50cnktPm5hbWUsIDAsIGRpcnR5X3N1Ym1vZHVsZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGdldHMgYSBtaXggb2YgYW4gZXhpc3RpbmcgaW5kZXggYW5kIGEgdHJlZSwgb25lIHBhdGhuYW1lIGVudHJ5CisgKiBhdCBhIHRpbWUuIFRoZSBpbmRleCBlbnRyeSBtYXkgYmUgYSBzaW5nbGUgc3RhZ2UtMCBvbmUsIGJ1dCBpdCBjb3VsZAorICogYWxzbyBiZSBtdWx0aXBsZSB1bm1lcmdlZCBlbnRyaWVzIChpbiB3aGljaCBjYXNlIGlkeF9wb3MvaWR4X25yIHdpbGwKKyAqIGdpdmUgeW91IHRoZSBwb3NpdGlvbiBhbmQgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGluZGV4KS4KKyAqLworc3RhdGljIHZvaWQgZG9fb25ld2F5X2RpZmYoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLAorCQkJICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICppZHgsCisJCQkgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnRyZWUpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gby0+dW5wYWNrX2RhdGE7CisJaW50IG1hdGNoX21pc3NpbmcsIGNhY2hlZDsKKworCS8qCisJICogaS10LWEgZW50cmllcyBkbyBub3QgYWN0dWFsbHkgZXhpc3QgaW4gdGhlIGluZGV4IChpZiB3ZSdyZQorCSAqIGxvb2tpbmcgYXQgaXRzIGNvbnRlbnQpCisJICovCisJaWYgKG8tPmluZGV4X29ubHkgJiYKKwkgICAgcmV2cy0+ZGlmZm9wdC5pdGFfaW52aXNpYmxlX2luX2luZGV4ICYmCisJICAgIGlkeCAmJiBjZV9pbnRlbnRfdG9fYWRkKGlkeCkpIHsKKwkJaWR4ID0gTlVMTDsKKwkJaWYgKCF0cmVlKQorCQkJcmV0dXJuOwkvKiBub3RoaW5nIHRvIGRpZmYuLiAqLworCX0KKworCS8qIGlmIHRoZSBlbnRyeSBpcyBub3QgY2hlY2tlZCBvdXQsIGRvbid0IGV4YW1pbmUgd29yayB0cmVlICovCisJY2FjaGVkID0gby0+aW5kZXhfb25seSB8fAorCQkoaWR4ICYmICgoaWR4LT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fCBjZV9za2lwX3dvcmt0cmVlKGlkeCkpKTsKKwkvKgorCSAqIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2FydCAtICJkaWZmLWluZGV4IC1tIiBkb2VzCisJICogbm90IG1lYW4gImRvIG5vdCBpZ25vcmUgbWVyZ2VzIiwgYnV0ICJtYXRjaF9taXNzaW5nIi4KKwkgKgorCSAqIEJ1dCB3aXRoIHRoZSByZXZpc2lvbiBmbGFnIHBhcnNpbmcsIHRoYXQncyBmb3VuZCBpbgorCSAqICIhcmV2cy0+aWdub3JlX21lcmdlcyIuCisJICovCisJbWF0Y2hfbWlzc2luZyA9ICFyZXZzLT5pZ25vcmVfbWVyZ2VzOworCisJaWYgKGNhY2hlZCAmJiBpZHggJiYgY2Vfc3RhZ2UoaWR4KSkgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwkJcGFpciA9IGRpZmZfdW5tZXJnZSgmcmV2cy0+ZGlmZm9wdCwgaWR4LT5uYW1lKTsKKwkJaWYgKHRyZWUpCisJCQlmaWxsX2ZpbGVzcGVjKHBhaXItPm9uZSwgJnRyZWUtPm9pZCwgMSwKKwkJCQkgICAgICB0cmVlLT5jZV9tb2RlKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU29tZXRoaW5nIGFkZGVkIHRvIHRoZSB0cmVlPworCSAqLworCWlmICghdHJlZSkgeworCQlzaG93X25ld19maWxlKHJldnMsIGlkeCwgY2FjaGVkLCBtYXRjaF9taXNzaW5nKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU29tZXRoaW5nIHJlbW92ZWQgZnJvbSB0aGUgdHJlZT8KKwkgKi8KKwlpZiAoIWlkeCkgeworCQlkaWZmX2luZGV4X3Nob3dfZmlsZShyZXZzLCAiLSIsIHRyZWUsICZ0cmVlLT5vaWQsIDEsCisJCQkJICAgICB0cmVlLT5jZV9tb2RlLCAwKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNob3cgZGlmZmVyZW5jZSBiZXR3ZWVuIG9sZCBhbmQgbmV3ICovCisJc2hvd19tb2RpZmllZChyZXZzLCB0cmVlLCBpZHgsIDEsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZyk7Cit9CisKKy8qCisgKiBUaGUgdW5wYWNrX3RyZWVzKCkgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIGZvciBtZXJnaW5nLCBzbworICogdGhlIGRpZmZlcmVudCBzb3VyY2UgZW50cmllcyBhcmUgZGVzaWduZWQgcHJpbWFyaWx5IGZvcgorICogdGhlIHNvdXJjZSB0cmVlcywgd2l0aCB0aGUgb2xkIGluZGV4IGJlaW5nIHJlYWxseSBtYWlubHkKKyAqIHVzZWQgZm9yIGJlaW5nIHJlcGxhY2VkIGJ5IHRoZSByZXN1bHQuCisgKgorICogRm9yIGRpZmZpbmcsIHRoZSBpbmRleCBpcyBtb3JlIGltcG9ydGFudCwgYW5kIHdlIG9ubHkgaGF2ZSBhCisgKiBzaW5nbGUgdHJlZS4KKyAqCisgKiBXZSdyZSBzdXBwb3NlZCB0byBhZHZhbmNlIG8tPnBvcyB0byBza2lwIHdoYXQgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZC4KKyAqCisgKiBUaGlzIHdyYXBwZXIgbWFrZXMgaXQgYWxsIG1vcmUgcmVhZGFibGUsIGFuZCB0YWtlcyBjYXJlIG9mIGFsbAorICogdGhlIGZhaXJseSBjb21wbGV4IHVucGFja190cmVlcygpIHNlbWFudGljIHJlcXVpcmVtZW50cywgaW5jbHVkaW5nCisgKiB0aGUgc2tpcHBpbmcsIHRoZSBwYXRoIG1hdGNoaW5nLCB0aGUgdHlwZSBjb25mbGljdCBjYXNlcyBldGMuCisgKi8KK3N0YXRpYyBpbnQgb25ld2F5X2RpZmYoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKKwkJICAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmlkeCA9IHNyY1swXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnRyZWUgPSBzcmNbMV07CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gby0+dW5wYWNrX2RhdGE7CisKKwkvKgorCSAqIFVucGFjay10cmVlcyBnZW5lcmF0ZXMgYSBERi9jb25mbGljdCBlbnRyeSBpZgorCSAqIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBpbiB0aGUgaW5kZXggYW5kIGEgdHJlZQorCSAqIGluIHRoZSB0cmVlLiBGcm9tIGEgZGlmZiBzdGFuZHBvaW50LCB0aGF0J3MgYQorCSAqIGRlbGV0ZSBvZiB0aGUgdHJlZSBhbmQgYSBjcmVhdGUgb2YgdGhlIGZpbGUuCisJICovCisJaWYgKHRyZWUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCXRyZWUgPSBOVUxMOworCisJaWYgKGNlX3BhdGhfbWF0Y2gocmV2cy0+ZGlmZm9wdC5yZXBvLT5pbmRleCwKKwkJCSAgaWR4ID8gaWR4IDogdHJlZSwKKwkJCSAgJnJldnMtPnBydW5lX2RhdGEsIE5VTEwpKSB7CisJCWRvX29uZXdheV9kaWZmKG8sIGlkeCwgdHJlZSk7CisJCWlmIChkaWZmX2Nhbl9xdWl0X2Vhcmx5KCZyZXZzLT5kaWZmb3B0KSkgeworCQkJby0+ZXhpdGluZ19lYXJseSA9IDE7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX2NhY2hlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZV9vaWQsCisJCSAgICAgIGNvbnN0IGNoYXIgKnRyZWVfbmFtZSwKKwkJICAgICAgaW50IGNhY2hlZCkKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHQ7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCh0cmVlX29pZCk7CisJaWYgKCF0cmVlKQorCQlyZXR1cm4gZXJyb3IoImJhZCB0cmVlIG9iamVjdCAlcyIsCisJCQkgICAgIHRyZWVfbmFtZSA/IHRyZWVfbmFtZSA6IG9pZF90b19oZXgodHJlZV9vaWQpKTsKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IDE7CisJb3B0cy5pbmRleF9vbmx5ID0gY2FjaGVkOworCW9wdHMuZGlmZl9pbmRleF9jYWNoZWQgPSAoY2FjaGVkICYmCisJCQkJICAhcmV2cy0+ZGlmZm9wdC5mbGFncy5maW5kX2NvcGllc19oYXJkZXIpOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuZm4gPSBvbmV3YXlfZGlmZjsKKwlvcHRzLnVucGFja19kYXRhID0gcmV2czsKKwlvcHRzLnNyY19pbmRleCA9IHJldnMtPmRpZmZvcHQucmVwby0+aW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSBOVUxMOworCW9wdHMucGF0aHNwZWMgPSAmcmV2cy0+ZGlmZm9wdC5wYXRoc3BlYzsKKwlvcHRzLnBhdGhzcGVjLT5yZWN1cnNpdmUgPSAxOworCisJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJcmV0dXJuIHVucGFja190cmVlcygxLCAmdCwgJm9wdHMpOworfQorCitpbnQgcnVuX2RpZmZfaW5kZXgoc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgY2FjaGVkKQoreworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmVudDsKKworCWlmIChyZXZzLT5wZW5kaW5nLm5yICE9IDEpCisJCUJVRygicnVuX2RpZmZfaW5kZXggbXVzdCBiZSBwYXNzZWQgZXhhY3RseSBvbmUgdHJlZSIpOworCisJdHJhY2VfcGVyZm9ybWFuY2VfZW50ZXIoKTsKKwllbnQgPSByZXZzLT5wZW5kaW5nLm9iamVjdHM7CisJaWYgKGRpZmZfY2FjaGUocmV2cywgJmVudC0+aXRlbS0+b2lkLCBlbnQtPm5hbWUsIGNhY2hlZCkpCisJCWV4aXQoMTI4KTsKKworCWRpZmZfc2V0X21uZW1vbmljX3ByZWZpeCgmcmV2cy0+ZGlmZm9wdCwgImMvIiwgY2FjaGVkID8gImkvIiA6ICJ3LyIpOworCWRpZmZjb3JlX2ZpeF9kaWZmX2luZGV4KCk7CisJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKKwlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKKwl0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgiZGlmZi1pbmRleCIpOworCXJldHVybiAwOworfQorCitpbnQgZG9fZGlmZl9jYWNoZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCisJcmVwb19pbml0X3JldmlzaW9ucyhvcHQtPnJlcG8sICZyZXZzLCBOVUxMKTsKKwljb3B5X3BhdGhzcGVjKCZyZXZzLnBydW5lX2RhdGEsICZvcHQtPnBhdGhzcGVjKTsKKwlyZXZzLmRpZmZvcHQgPSAqb3B0OworCisJaWYgKGRpZmZfY2FjaGUoJnJldnMsIHRyZWVfb2lkLCBOVUxMLCAxKSkKKwkJZXhpdCgxMjgpOworCXJldHVybiAwOworfQorCitpbnQgaW5kZXhfZGlmZmVyc19mcm9tKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgICAgY29uc3QgY2hhciAqZGVmLCBjb25zdCBzdHJ1Y3QgZGlmZl9mbGFncyAqZmxhZ3MsCisJCSAgICAgICBpbnQgaXRhX2ludmlzaWJsZV9pbl9pbmRleCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJcmVwb19pbml0X3JldmlzaW9ucyhyLCAmcmV2LCBOVUxMKTsKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSBkZWY7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsICZvcHQpOworCXJldi5kaWZmb3B0LmZsYWdzLnF1aWNrID0gMTsKKwlyZXYuZGlmZm9wdC5mbGFncy5leGl0X3dpdGhfc3RhdHVzID0gMTsKKwlpZiAoZmxhZ3MpCisJCWRpZmZfZmxhZ3Nfb3IoJnJldi5kaWZmb3B0LmZsYWdzLCBmbGFncyk7CisJcmV2LmRpZmZvcHQuaXRhX2ludmlzaWJsZV9pbl9pbmRleCA9IGl0YV9pbnZpc2libGVfaW5faW5kZXg7CisJcnVuX2RpZmZfaW5kZXgoJnJldiwgMSk7CisJb2JqZWN0X2FycmF5X2NsZWFyKCZyZXYucGVuZGluZyk7CisJcmV0dXJuIChyZXYuZGlmZm9wdC5mbGFncy5oYXNfY2hhbmdlcyAhPSAwKTsKK30KZGlmZiAtLWdpdCBhL2RpZmYtbm8taW5kZXguYyBiL2RpZmYtbm8taW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODE0ZWFiCi0tLSAvZGV2L251bGwKKysrIGIvZGlmZi1uby1pbmRleC5jCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogImRpZmYgLS1uby1pbmRleCIgc3VwcG9ydAorICogQ29weXJpZ2h0IChjKSAyMDA3IGJ5IEpvaGFubmVzIFNjaGluZGVsaW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBieSBKdW5pbyBDIEhhbWFubworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfY29udGVudHMoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisKKwlpZiAoIShkaXIgPSBvcGVuZGlyKHBhdGgpKSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJXMiLCBwYXRoKTsKKworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkpCisJCWlmICghaXNfZG90X29yX2RvdGRvdChlLT5kX25hbWUpKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGxpc3QsIGUtPmRfbmFtZSk7CisKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBzaG91bGQgYmUgIihzdGFuZGFyZCBpbnB1dCkiIG9yIHNvbWV0aGluZywgYnV0IGl0IHdpbGwKKyAqIHByb2JhYmx5IGV4cG9zZSBtYW55IG1vcmUgYnJlYWthZ2VzIGluIHRoZSB3YXkgbm8taW5kZXggY29kZQorICogaXMgYm9sdGVkIG9udG8gdGhlIGRpZmYgY2FsbGNoYWluLgorICovCitzdGF0aWMgY29uc3QgY2hhciBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXRbXSA9ICItIjsKKworc3RhdGljIGludCBnZXRfbW9kZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1vZGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXBhdGggfHwgIXN0cmNtcChwYXRoLCAiL2Rldi9udWxsIikpCisJCSptb2RlID0gMDsKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwllbHNlIGlmICghc3RyY2FzZWNtcChwYXRoLCAibnVsIikpCisJCSptb2RlID0gMDsKKyNlbmRpZgorCWVsc2UgaWYgKHBhdGggPT0gZmlsZV9mcm9tX3N0YW5kYXJkX2lucHV0KQorCQkqbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKDA2NjYpOworCWVsc2UgaWYgKGxzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGFjY2VzcyAnJXMnIiwgcGF0aCk7CisJZWxzZQorCQkqbW9kZSA9IHN0LnN0X21vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9wdWxhdGVfZnJvbV9zdGRpbihzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBzaXplID0gMDsKKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubygiZXJyb3Igd2hpbGUgcmVhZGluZyBmcm9tIHN0ZGluIik7CisKKwlzLT5zaG91bGRfbXVubWFwID0gMDsKKwlzLT5kYXRhID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJcy0+c2l6ZSA9IHNpemU7CisJcy0+c2hvdWxkX2ZyZWUgPSAxOworCXMtPmlzX3N0ZGluID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpub2luZGV4X2ZpbGVzcGVjKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzOworCisJaWYgKCFuYW1lKQorCQluYW1lID0gIi9kZXYvbnVsbCI7CisJcyA9IGFsbG9jX2ZpbGVzcGVjKG5hbWUpOworCWZpbGxfZmlsZXNwZWMocywgJm51bGxfb2lkLCAwLCBtb2RlKTsKKwlpZiAobmFtZSA9PSBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXQpCisJCXBvcHVsYXRlX2Zyb21fc3RkaW4ocyk7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbnQgcXVldWVfZGlmZihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lMSwgY29uc3QgY2hhciAqbmFtZTIpCit7CisJaW50IG1vZGUxID0gMCwgbW9kZTIgPSAwOworCisJaWYgKGdldF9tb2RlKG5hbWUxLCAmbW9kZTEpIHx8IGdldF9tb2RlKG5hbWUyLCAmbW9kZTIpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobW9kZTEgJiYgbW9kZTIgJiYgU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmQxLCAqZDI7CisKKwkJaWYgKFNfSVNESVIobW9kZTEpKSB7CisJCQkvKiAyIGlzIGZpbGUgdGhhdCBpcyBjcmVhdGVkICovCisJCQlkMSA9IG5vaW5kZXhfZmlsZXNwZWMoTlVMTCwgMCk7CisJCQlkMiA9IG5vaW5kZXhfZmlsZXNwZWMobmFtZTIsIG1vZGUyKTsKKwkJCW5hbWUyID0gTlVMTDsKKwkJCW1vZGUyID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIDEgaXMgZmlsZSB0aGF0IGlzIGRlbGV0ZWQgKi8KKwkJCWQxID0gbm9pbmRleF9maWxlc3BlYyhuYW1lMSwgbW9kZTEpOworCQkJZDIgPSBub2luZGV4X2ZpbGVzcGVjKE5VTEwsIDApOworCQkJbmFtZTEgPSBOVUxMOworCQkJbW9kZTEgPSAwOworCQl9CisJCS8qIGVtaXQgdGhhdCBmaWxlICovCisJCWRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIGQxLCBkMik7CisKKwkJLyogYW5kIHRoZW4gbGV0IHRoZSBlbnRpcmUgZGlyZWN0b3J5IGJlIGNyZWF0ZWQgb3IgZGVsZXRlZCAqLworCX0KKworCWlmIChTX0lTRElSKG1vZGUxKSB8fCBTX0lTRElSKG1vZGUyKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlcjEgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBidWZmZXIyID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBwMSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcDIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJaW50IGkxLCBpMiwgcmV0ID0gMDsKKwkJc2l6ZV90IGxlbjEgPSAwLCBsZW4yID0gMDsKKworCQlpZiAobmFtZTEgJiYgcmVhZF9kaXJlY3RvcnlfY29udGVudHMobmFtZTEsICZwMSkpCisJCQlyZXR1cm4gLTE7CisJCWlmIChuYW1lMiAmJiByZWFkX2RpcmVjdG9yeV9jb250ZW50cyhuYW1lMiwgJnAyKSkgeworCQkJc3RyaW5nX2xpc3RfY2xlYXIoJnAxLCAwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChuYW1lMSkgeworCQkJc3RyYnVmX2FkZHN0cigmYnVmZmVyMSwgbmFtZTEpOworCQkJc3RyYnVmX2NvbXBsZXRlKCZidWZmZXIxLCAnLycpOworCQkJbGVuMSA9IGJ1ZmZlcjEubGVuOworCQl9CisKKwkJaWYgKG5hbWUyKSB7CisJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIyLCBuYW1lMik7CisJCQlzdHJidWZfY29tcGxldGUoJmJ1ZmZlcjIsICcvJyk7CisJCQlsZW4yID0gYnVmZmVyMi5sZW47CisJCX0KKworCQlmb3IgKGkxID0gaTIgPSAwOyAhcmV0ICYmIChpMSA8IHAxLm5yIHx8IGkyIDwgcDIubnIpOyApIHsKKwkJCWNvbnN0IGNoYXIgKm4xLCAqbjI7CisJCQlpbnQgY29tcDsKKworCQkJc3RyYnVmX3NldGxlbigmYnVmZmVyMSwgbGVuMSk7CisJCQlzdHJidWZfc2V0bGVuKCZidWZmZXIyLCBsZW4yKTsKKworCQkJaWYgKGkxID09IHAxLm5yKQorCQkJCWNvbXAgPSAxOworCQkJZWxzZSBpZiAoaTIgPT0gcDIubnIpCisJCQkJY29tcCA9IC0xOworCQkJZWxzZQorCQkJCWNvbXAgPSBzdHJjbXAocDEuaXRlbXNbaTFdLnN0cmluZywgcDIuaXRlbXNbaTJdLnN0cmluZyk7CisKKwkJCWlmIChjb21wID4gMCkKKwkJCQluMSA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIxLCBwMS5pdGVtc1tpMSsrXS5zdHJpbmcpOworCQkJCW4xID0gYnVmZmVyMS5idWY7CisJCQl9CisKKwkJCWlmIChjb21wIDwgMCkKKwkJCQluMiA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIyLCBwMi5pdGVtc1tpMisrXS5zdHJpbmcpOworCQkJCW4yID0gYnVmZmVyMi5idWY7CisJCQl9CisKKwkJCXJldCA9IHF1ZXVlX2RpZmYobywgbjEsIG4yKTsKKwkJfQorCQlzdHJpbmdfbGlzdF9jbGVhcigmcDEsIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmcDIsIDApOworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyMSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIyKTsKKworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkMSwgKmQyOworCisJCWlmIChvLT5mbGFncy5yZXZlcnNlX2RpZmYpIHsKKwkJCVNXQVAobW9kZTEsIG1vZGUyKTsKKwkJCVNXQVAobmFtZTEsIG5hbWUyKTsKKwkJfQorCisJCWQxID0gbm9pbmRleF9maWxlc3BlYyhuYW1lMSwgbW9kZTEpOworCQlkMiA9IG5vaW5kZXhfZmlsZXNwZWMobmFtZTIsIG1vZGUyKTsKKwkJZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgZDEsIGQyKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKiBhcHBlbmQgYmFzZW5hbWUgb2YgRiB0byBEICovCitzdGF0aWMgdm9pZCBhcHBlbmRfYmFzZW5hbWUoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQoreworCWNvbnN0IGNoYXIgKnRhaWwgPSBzdHJyY2hyKGZpbGUsICcvJyk7CisKKwlzdHJidWZfYWRkc3RyKHBhdGgsIGRpcik7CisJd2hpbGUgKHBhdGgtPmxlbiAmJiBwYXRoLT5idWZbcGF0aC0+bGVuIC0gMV0gPT0gJy8nKQorCQlwYXRoLT5sZW4tLTsKKwlzdHJidWZfYWRkY2gocGF0aCwgJy8nKTsKKwlzdHJidWZfYWRkc3RyKHBhdGgsIHRhaWwgPyB0YWlsICsgMSA6IGZpbGUpOworfQorCisvKgorICogRFdJTSAiZGlmZiBEIEYiIGludG8gImRpZmYgRC9GIEYiIGFuZCAiZGlmZiBGIEQiIGludG8gImRpZmYgRiBEL0YiCisgKiBOb3RlIHRoYXQgd2UgYXBwZW5kIHRoZSBiYXNlbmFtZSBvZiBGIHRvIEQvLCBzbyAiZGlmZiBhL2IvZmlsZSBEIgorICogYmVjb21lcyAiZGlmZiBhL2IvZmlsZSBEL2ZpbGUiLCBub3QgImRpZmYgYS9iL2ZpbGUgRC9hL2IvZmlsZSIuCisgKi8KK3N0YXRpYyB2b2lkIGZpeHVwX3BhdGhzKGNvbnN0IGNoYXIgKipwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpyZXBsYWNlbWVudCkKK3sKKwl1bnNpZ25lZCBpbnQgaXNkaXIwLCBpc2RpcjE7CisKKwlpZiAocGF0aFswXSA9PSBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXQgfHwKKwkgICAgcGF0aFsxXSA9PSBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXQpCisJCXJldHVybjsKKwlpc2RpcjAgPSBpc19kaXJlY3RvcnkocGF0aFswXSk7CisJaXNkaXIxID0gaXNfZGlyZWN0b3J5KHBhdGhbMV0pOworCWlmIChpc2RpcjAgPT0gaXNkaXIxKQorCQlyZXR1cm47CisJaWYgKGlzZGlyMCkgeworCQlhcHBlbmRfYmFzZW5hbWUocmVwbGFjZW1lbnQsIHBhdGhbMF0sIHBhdGhbMV0pOworCQlwYXRoWzBdID0gcmVwbGFjZW1lbnQtPmJ1ZjsKKwl9IGVsc2UgeworCQlhcHBlbmRfYmFzZW5hbWUocmVwbGFjZW1lbnQsIHBhdGhbMV0sIHBhdGhbMF0pOworCQlwYXRoWzFdID0gcmVwbGFjZW1lbnQtPmJ1ZjsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGlmZl9ub19pbmRleF91c2FnZVtdID0geworCU5fKCJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iKSwKKwlOVUxMCit9OworCitpbnQgZGlmZl9ub19pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCSAgaW50IGltcGxpY2l0X25vX2luZGV4LAorCQkgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgbm9faW5kZXg7CisJY29uc3QgY2hhciAqcGF0aHNbMl07CisJc3RydWN0IHN0cmJ1ZiByZXBsYWNlbWVudCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IHJldnMtPnByZWZpeDsKKwlzdHJ1Y3Qgb3B0aW9uIG5vX2luZGV4X29wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0xfRigwLCAibm8taW5kZXgiLCAmbm9faW5kZXgsICIiLAorCQkJICAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX0hJRERFTiksCisJCU9QVF9FTkQoKSwKKwl9OworCXN0cnVjdCBvcHRpb24gKm9wdGlvbnM7CisKKwlvcHRpb25zID0gcGFyc2Vfb3B0aW9uc19jb25jYXQobm9faW5kZXhfb3B0aW9ucywKKwkJCQkgICAgICAgcmV2cy0+ZGlmZm9wdC5wYXJzZW9wdHMpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHJldnMtPnByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZGlmZl9ub19pbmRleF91c2FnZSwgMCk7CisJaWYgKGFyZ2MgIT0gMikgeworCQlpZiAoaW1wbGljaXRfbm9faW5kZXgpCisJCQl3YXJuaW5nKF8oIk5vdCBhIGdpdCByZXBvc2l0b3J5LiBVc2UgLS1uby1pbmRleCB0byAiCisJCQkJICAiY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgdHJlZSIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGRpZmZfbm9faW5kZXhfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlGUkVFX0FORF9OVUxMKG9wdGlvbnMpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcCA9IGFyZ3ZbYXJnYyAtIDIgKyBpXTsKKwkJaWYgKCFzdHJjbXAocCwgIi0iKSkKKwkJCS8qCisJCQkgKiBzdGRpbiBzaG91bGQgYmUgc3BlbGxlZCBhcyAiLSI7IGlmIHlvdSBoYXZlCisJCQkgKiBwYXRoIHRoYXQgaXMgIi0iLCBzcGVsbCBpdCBhcyAiLi8tIi4KKwkJCSAqLworCQkJcCA9IGZpbGVfZnJvbV9zdGFuZGFyZF9pbnB1dDsKKwkJZWxzZSBpZiAocHJlZml4KQorCQkJcCA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHApOworCQlwYXRoc1tpXSA9IHA7CisJfQorCisJZml4dXBfcGF0aHMocGF0aHMsICZyZXBsYWNlbWVudCk7CisKKwlyZXZzLT5kaWZmb3B0LnNraXBfc3RhdF91bm1hdGNoID0gMTsKKwlpZiAoIXJldnMtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2cy0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisKKwlyZXZzLT5kaWZmb3B0LmZsYWdzLm5vX2luZGV4ID0gMTsKKworCXJldnMtPmRpZmZvcHQuZmxhZ3MucmVsYXRpdmVfbmFtZSA9IDE7CisJcmV2cy0+ZGlmZm9wdC5wcmVmaXggPSBwcmVmaXg7CisKKwlyZXZzLT5tYXhfY291bnQgPSAtMjsKKwlkaWZmX3NldHVwX2RvbmUoJnJldnMtPmRpZmZvcHQpOworCisJc2V0dXBfZGlmZl9wYWdlcigmcmV2cy0+ZGlmZm9wdCk7CisJcmV2cy0+ZGlmZm9wdC5mbGFncy5leGl0X3dpdGhfc3RhdHVzID0gMTsKKworCWlmIChxdWV1ZV9kaWZmKCZyZXZzLT5kaWZmb3B0LCBwYXRoc1swXSwgcGF0aHNbMV0pKQorCQlyZXR1cm4gMTsKKwlkaWZmX3NldF9tbmVtb25pY19wcmVmaXgoJnJldnMtPmRpZmZvcHQsICIxLyIsICIyLyIpOworCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZl9mbHVzaCgmcmV2cy0+ZGlmZm9wdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVwbGFjZW1lbnQpOworCisJLyoKKwkgKiBUaGUgcmV0dXJuIGNvZGUgZm9yIC0tbm8taW5kZXggaW1pdGF0ZXMgZGlmZigxKToKKwkgKiAwID0gbm8gY2hhbmdlcywgMSA9IGNoYW5nZXMsIGVsc2UgZXJyb3IKKwkgKi8KKwlyZXR1cm4gZGlmZl9yZXN1bHRfY29kZSgmcmV2cy0+ZGlmZm9wdCwgMCk7Cit9CmRpZmYgLS1naXQgYS9kaWZmLmMgYi9kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjZmJmMgotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYuYwpAQCAtMCwwICsxLDY4NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAicHJvbWlzb3ItcmVtb3RlLmgiCisKKyNpZmRlZiBOT19GQVNUX1dPUktJTkdfRElSRUNUT1JZCisjZGVmaW5lIEZBU1RfV09SS0lOR19ESVJFQ1RPUlkgMAorI2Vsc2UKKyNkZWZpbmUgRkFTVF9XT1JLSU5HX0RJUkVDVE9SWSAxCisjZW5kaWYKKworc3RhdGljIGludCBkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdDsKK3N0YXRpYyBpbnQgZGlmZl9pbmRlbnRfaGV1cmlzdGljID0gMTsKK3N0YXRpYyBpbnQgZGlmZl9yZW5hbWVfbGltaXRfZGVmYXVsdCA9IDQwMDsKK3N0YXRpYyBpbnQgZGlmZl9zdXBwcmVzc19ibGFua19lbXB0eTsKK3N0YXRpYyBpbnQgZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9IC0xOworc3RhdGljIGludCBkaWZmX2NvbG9yX21vdmVkX2RlZmF1bHQ7CitzdGF0aWMgaW50IGRpZmZfY29sb3JfbW92ZWRfd3NfZGVmYXVsdDsKK3N0YXRpYyBpbnQgZGlmZl9jb250ZXh0X2RlZmF1bHQgPSAzOworc3RhdGljIGludCBkaWZmX2ludGVyaHVua19jb250ZXh0X2RlZmF1bHQ7CitzdGF0aWMgY29uc3QgY2hhciAqZGlmZl93b3JkX3JlZ2V4X2NmZzsKK3N0YXRpYyBjb25zdCBjaGFyICpleHRlcm5hbF9kaWZmX2NtZF9jZmc7CitzdGF0aWMgY29uc3QgY2hhciAqZGlmZl9vcmRlcl9maWxlX2NmZzsKK2ludCBkaWZmX2F1dG9fcmVmcmVzaF9pbmRleCA9IDE7CitzdGF0aWMgaW50IGRpZmZfbW5lbW9uaWNfcHJlZml4Oworc3RhdGljIGludCBkaWZmX25vX3ByZWZpeDsKK3N0YXRpYyBpbnQgZGlmZl9zdGF0X2dyYXBoX3dpZHRoOworc3RhdGljIGludCBkaWZmX2RpcnN0YXRfcGVybWlsbGVfZGVmYXVsdCA9IDMwOworc3RhdGljIHN0cnVjdCBkaWZmX29wdGlvbnMgZGVmYXVsdF9kaWZmX29wdGlvbnM7CitzdGF0aWMgbG9uZyBkaWZmX2FsZ29yaXRobTsKK3N0YXRpYyB1bnNpZ25lZCB3c19lcnJvcl9oaWdobGlnaHRfZGVmYXVsdCA9IFdTRUhfTkVXOworCitzdGF0aWMgY2hhciBkaWZmX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX1JFU0VULAorCUdJVF9DT0xPUl9OT1JNQUwsCS8qIENPTlRFWFQgKi8KKwlHSVRfQ09MT1JfQk9MRCwJCS8qIE1FVEFJTkZPICovCisJR0lUX0NPTE9SX0NZQU4sCQkvKiBGUkFHSU5GTyAqLworCUdJVF9DT0xPUl9SRUQsCQkvKiBPTEQgKi8KKwlHSVRfQ09MT1JfR1JFRU4sCS8qIE5FVyAqLworCUdJVF9DT0xPUl9ZRUxMT1csCS8qIENPTU1JVCAqLworCUdJVF9DT0xPUl9CR19SRUQsCS8qIFdISVRFU1BBQ0UgKi8KKwlHSVRfQ09MT1JfTk9STUFMLAkvKiBGVU5DSU5GTyAqLworCUdJVF9DT0xPUl9CT0xEX01BR0VOVEEsCS8qIE9MRF9NT1ZFRCAqLworCUdJVF9DT0xPUl9CT0xEX0JMVUUsCS8qIE9MRF9NT1ZFRCBBTFRFUk5BVElWRSAqLworCUdJVF9DT0xPUl9GQUlOVCwJLyogT0xEX01PVkVEX0RJTSAqLworCUdJVF9DT0xPUl9GQUlOVF9JVEFMSUMsCS8qIE9MRF9NT1ZFRF9BTFRFUk5BVElWRV9ESU0gKi8KKwlHSVRfQ09MT1JfQk9MRF9DWUFOLAkvKiBORVdfTU9WRUQgKi8KKwlHSVRfQ09MT1JfQk9MRF9ZRUxMT1csCS8qIE5FV19NT1ZFRCBBTFRFUk5BVElWRSAqLworCUdJVF9DT0xPUl9GQUlOVCwJLyogTkVXX01PVkVEX0RJTSAqLworCUdJVF9DT0xPUl9GQUlOVF9JVEFMSUMsCS8qIE5FV19NT1ZFRF9BTFRFUk5BVElWRV9ESU0gKi8KKwlHSVRfQ09MT1JfRkFJTlQsCS8qIENPTlRFWFRfRElNICovCisJR0lUX0NPTE9SX0ZBSU5UX1JFRCwJLyogT0xEX0RJTSAqLworCUdJVF9DT0xPUl9GQUlOVF9HUkVFTiwJLyogTkVXX0RJTSAqLworCUdJVF9DT0xPUl9CT0xELAkJLyogQ09OVEVYVF9CT0xEICovCisJR0lUX0NPTE9SX0JPTERfUkVELAkvKiBPTERfQk9MRCAqLworCUdJVF9DT0xPUl9CT0xEX0dSRUVOLAkvKiBORVdfQk9MRCAqLworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbG9yX2RpZmZfc2xvdHNbXSA9IHsKKwlbRElGRl9DT05URVhUXQkJICAgICAgPSAiY29udGV4dCIsCisJW0RJRkZfTUVUQUlORk9dCQkgICAgICA9ICJtZXRhIiwKKwlbRElGRl9GUkFHSU5GT10JCSAgICAgID0gImZyYWciLAorCVtESUZGX0ZJTEVfT0xEXQkJICAgICAgPSAib2xkIiwKKwlbRElGRl9GSUxFX05FV10JCSAgICAgID0gIm5ldyIsCisJW0RJRkZfQ09NTUlUXQkJICAgICAgPSAiY29tbWl0IiwKKwlbRElGRl9XSElURVNQQUNFXQkgICAgICA9ICJ3aGl0ZXNwYWNlIiwKKwlbRElGRl9GVU5DSU5GT10JCSAgICAgID0gImZ1bmMiLAorCVtESUZGX0ZJTEVfT0xEX01PVkVEXQkgICAgICA9ICJvbGRNb3ZlZCIsCisJW0RJRkZfRklMRV9PTERfTU9WRURfQUxUXSAgICAgPSAib2xkTW92ZWRBbHRlcm5hdGl2ZSIsCisJW0RJRkZfRklMRV9PTERfTU9WRURfRElNXSAgICAgPSAib2xkTW92ZWREaW1tZWQiLAorCVtESUZGX0ZJTEVfT0xEX01PVkVEX0FMVF9ESU1dID0gIm9sZE1vdmVkQWx0ZXJuYXRpdmVEaW1tZWQiLAorCVtESUZGX0ZJTEVfTkVXX01PVkVEXQkgICAgICA9ICJuZXdNb3ZlZCIsCisJW0RJRkZfRklMRV9ORVdfTU9WRURfQUxUXSAgICAgPSAibmV3TW92ZWRBbHRlcm5hdGl2ZSIsCisJW0RJRkZfRklMRV9ORVdfTU9WRURfRElNXSAgICAgPSAibmV3TW92ZWREaW1tZWQiLAorCVtESUZGX0ZJTEVfTkVXX01PVkVEX0FMVF9ESU1dID0gIm5ld01vdmVkQWx0ZXJuYXRpdmVEaW1tZWQiLAorCVtESUZGX0NPTlRFWFRfRElNXQkgICAgICA9ICJjb250ZXh0RGltbWVkIiwKKwlbRElGRl9GSUxFX09MRF9ESU1dCSAgICAgID0gIm9sZERpbW1lZCIsCisJW0RJRkZfRklMRV9ORVdfRElNXQkgICAgICA9ICJuZXdEaW1tZWQiLAorCVtESUZGX0NPTlRFWFRfQk9MRF0JICAgICAgPSAiY29udGV4dEJvbGQiLAorCVtESUZGX0ZJTEVfT0xEX0JPTERdCSAgICAgID0gIm9sZEJvbGQiLAorCVtESUZGX0ZJTEVfTkVXX0JPTERdCSAgICAgID0gIm5ld0JvbGQiLAorfTsKKworZGVmaW5lX2xpc3RfY29uZmlnX2FycmF5X2V4dHJhKGNvbG9yX2RpZmZfc2xvdHMsIHsicGxhaW4ifSk7CisKK3N0YXRpYyBpbnQgcGFyc2VfZGlmZl9jb2xvcl9zbG90KGNvbnN0IGNoYXIgKnZhcikKK3sKKwlpZiAoIXN0cmNhc2VjbXAodmFyLCAicGxhaW4iKSkKKwkJcmV0dXJuIERJRkZfQ09OVEVYVDsKKwlyZXR1cm4gTE9PS1VQX0NPTkZJRyhjb2xvcl9kaWZmX3Nsb3RzLCB2YXIpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2RpcnN0YXRfcGFyYW1zKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnBhcmFtc19zdHJpbmcsCisJCQkJc3RydWN0IHN0cmJ1ZiAqZXJybXNnKQoreworCWNoYXIgKnBhcmFtc19jb3B5ID0geHN0cmR1cChwYXJhbXNfc3RyaW5nKTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcGFyYW1zID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWlmICgqcGFyYW1zX2NvcHkpCisJCXN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCZwYXJhbXMsIHBhcmFtc19jb3B5LCAnLCcsIC0xKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcCA9IHBhcmFtcy5pdGVtc1tpXS5zdHJpbmc7CisJCWlmICghc3RyY21wKHAsICJjaGFuZ2VzIikpIHsKKwkJCW9wdGlvbnMtPmZsYWdzLmRpcnN0YXRfYnlfbGluZSA9IDA7CisJCQlvcHRpb25zLT5mbGFncy5kaXJzdGF0X2J5X2ZpbGUgPSAwOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocCwgImxpbmVzIikpIHsKKwkJCW9wdGlvbnMtPmZsYWdzLmRpcnN0YXRfYnlfbGluZSA9IDE7CisJCQlvcHRpb25zLT5mbGFncy5kaXJzdGF0X2J5X2ZpbGUgPSAwOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocCwgImZpbGVzIikpIHsKKwkJCW9wdGlvbnMtPmZsYWdzLmRpcnN0YXRfYnlfbGluZSA9IDA7CisJCQlvcHRpb25zLT5mbGFncy5kaXJzdGF0X2J5X2ZpbGUgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocCwgIm5vbmN1bXVsYXRpdmUiKSkgeworCQkJb3B0aW9ucy0+ZmxhZ3MuZGlyc3RhdF9jdW11bGF0aXZlID0gMDsKKwkJfSBlbHNlIGlmICghc3RyY21wKHAsICJjdW11bGF0aXZlIikpIHsKKwkJCW9wdGlvbnMtPmZsYWdzLmRpcnN0YXRfY3VtdWxhdGl2ZSA9IDE7CisJCX0gZWxzZSBpZiAoaXNkaWdpdCgqcCkpIHsKKwkJCWNoYXIgKmVuZDsKKwkJCWludCBwZXJtaWxsZSA9IHN0cnRvdWwocCwgJmVuZCwgMTApICogMTA7CisJCQlpZiAoKmVuZCA9PSAnLicgJiYgaXNkaWdpdCgqKytlbmQpKSB7CisJCQkJLyogb25seSB1c2UgZmlyc3QgZGlnaXQgKi8KKwkJCQlwZXJtaWxsZSArPSAqZW5kIC0gJzAnOworCQkJCS8qIC4uIGFuZCBpZ25vcmUgYW55IGZ1cnRoZXIgZGlnaXRzICovCisJCQkJd2hpbGUgKGlzZGlnaXQoKisrZW5kKSkKKwkJCQkJOyAvKiBub3RoaW5nICovCisJCQl9CisJCQlpZiAoISplbmQpCisJCQkJb3B0aW9ucy0+ZGlyc3RhdF9wZXJtaWxsZSA9IHBlcm1pbGxlOworCQkJZWxzZSB7CisJCQkJc3RyYnVmX2FkZGYoZXJybXNnLCBfKCIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iKSwKKwkJCQkJICAgIHApOworCQkJCXJldCsrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZGYoZXJybXNnLCBfKCIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIiksIHApOworCQkJcmV0Kys7CisJCX0KKworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmcGFyYW1zLCAwKTsKKwlmcmVlKHBhcmFtc19jb3B5KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhcnNlX3N1Ym1vZHVsZV9wYXJhbXMoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFsdWUsICJsb2ciKSkKKwkJb3B0aW9ucy0+c3VibW9kdWxlX2Zvcm1hdCA9IERJRkZfU1VCTU9EVUxFX0xPRzsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAic2hvcnQiKSkKKwkJb3B0aW9ucy0+c3VibW9kdWxlX2Zvcm1hdCA9IERJRkZfU1VCTU9EVUxFX1NIT1JUOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJkaWZmIikpCisJCW9wdGlvbnMtPnN1Ym1vZHVsZV9mb3JtYXQgPSBESUZGX1NVQk1PRFVMRV9JTkxJTkVfRElGRjsKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgJF9fZ2l0X2RpZmZfc3VibW9kdWxlX2Zvcm1hdHMgaW4KKwkgKiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91IGFkZCBuZXcgZm9ybWF0cy4KKwkgKi8KKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9jb25maWdfcmVuYW1lKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIERJRkZfREVURUNUX1JFTkFNRTsKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJjb3BpZXMiKSB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgImNvcHkiKSkKKwkJcmV0dXJuICBESUZGX0RFVEVDVF9DT1BZOworCXJldHVybiBnaXRfY29uZmlnX2Jvb2wodmFyLHZhbHVlKSA/IERJRkZfREVURUNUX1JFTkFNRSA6IDA7Cit9CisKK2xvbmcgcGFyc2VfYWxnb3JpdGhtX3ZhbHVlKGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIm15ZXJzIikgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJkZWZhdWx0IikpCisJCXJldHVybiAwOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAibWluaW1hbCIpKQorCQlyZXR1cm4gWERGX05FRURfTUlOSU1BTDsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInBhdGllbmNlIikpCisJCXJldHVybiBYREZfUEFUSUVOQ0VfRElGRjsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImhpc3RvZ3JhbSIpKQorCQlyZXR1cm4gWERGX0hJU1RPR1JBTV9ESUZGOworCS8qCisJICogUGxlYXNlIHVwZGF0ZSAkX19naXRfZGlmZl9hbGdvcml0aG1zIGluIGdpdC1jb21wbGV0aW9uLmJhc2gKKwkgKiB3aGVuIHlvdSBhZGQgbmV3IGFsZ29yaXRobXMuCisJICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHBhcnNlX29uZV90b2tlbihjb25zdCBjaGFyICoqYXJnLCBjb25zdCBjaGFyICp0b2tlbikKK3sKKwljb25zdCBjaGFyICpyZXN0OworCWlmIChza2lwX3ByZWZpeCgqYXJnLCB0b2tlbiwgJnJlc3QpICYmICghKnJlc3QgfHwgKnJlc3QgPT0gJywnKSkgeworCQkqYXJnID0gcmVzdDsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3dzX2Vycm9yX2hpZ2hsaWdodChjb25zdCBjaGFyICphcmcpCit7CisJY29uc3QgY2hhciAqb3JpZ19hcmcgPSBhcmc7CisJdW5zaWduZWQgdmFsID0gMDsKKworCXdoaWxlICgqYXJnKSB7CisJCWlmIChwYXJzZV9vbmVfdG9rZW4oJmFyZywgIm5vbmUiKSkKKwkJCXZhbCA9IDA7CisJCWVsc2UgaWYgKHBhcnNlX29uZV90b2tlbigmYXJnLCAiZGVmYXVsdCIpKQorCQkJdmFsID0gV1NFSF9ORVc7CisJCWVsc2UgaWYgKHBhcnNlX29uZV90b2tlbigmYXJnLCAiYWxsIikpCisJCQl2YWwgPSBXU0VIX05FVyB8IFdTRUhfT0xEIHwgV1NFSF9DT05URVhUOworCQllbHNlIGlmIChwYXJzZV9vbmVfdG9rZW4oJmFyZywgIm5ldyIpKQorCQkJdmFsIHw9IFdTRUhfTkVXOworCQllbHNlIGlmIChwYXJzZV9vbmVfdG9rZW4oJmFyZywgIm9sZCIpKQorCQkJdmFsIHw9IFdTRUhfT0xEOworCQllbHNlIGlmIChwYXJzZV9vbmVfdG9rZW4oJmFyZywgImNvbnRleHQiKSkKKwkJCXZhbCB8PSBXU0VIX0NPTlRFWFQ7CisJCWVsc2UgeworCQkJcmV0dXJuIC0xIC0gKGludCkoYXJnIC0gb3JpZ19hcmcpOworCQl9CisJCWlmICgqYXJnKQorCQkJYXJnKys7CisJfQorCXJldHVybiB2YWw7Cit9CisKKy8qCisgKiBUaGVzZSBhcmUgdG8gZ2l2ZSBVSSBsYXllciBkZWZhdWx0cy4KKyAqIFRoZSBjb3JlLWxldmVsIGNvbW1hbmRzIHN1Y2ggYXMgZ2l0LWRpZmYtZmlsZXMgc2hvdWxkCisgKiBuZXZlciBiZSBhZmZlY3RlZCBieSB0aGUgc2V0dGluZyBvZiBkaWZmLnJlbmFtZXMKKyAqIHRoZSB1c2VyIGhhcHBlbnMgdG8gaGF2ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorICovCit2b2lkIGluaXRfZGlmZl91aV9kZWZhdWx0cyh2b2lkKQoreworCWRpZmZfZGV0ZWN0X3JlbmFtZV9kZWZhdWx0ID0gRElGRl9ERVRFQ1RfUkVOQU1FOworfQorCitpbnQgZ2l0X2RpZmZfaGV1cmlzdGljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmluZGVudGhldXJpc3RpYyIpKQorCQlkaWZmX2luZGVudF9oZXVyaXN0aWMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29sb3JfbW92ZWQoY29uc3QgY2hhciAqYXJnKQoreworCXN3aXRjaCAoZ2l0X3BhcnNlX21heWJlX2Jvb2woYXJnKSkgeworCWNhc2UgMDoKKwkJcmV0dXJuIENPTE9SX01PVkVEX05POworCWNhc2UgMToKKwkJcmV0dXJuIENPTE9SX01PVkVEX0RFRkFVTFQ7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKCFzdHJjbXAoYXJnLCAibm8iKSkKKwkJcmV0dXJuIENPTE9SX01PVkVEX05POworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAicGxhaW4iKSkKKwkJcmV0dXJuIENPTE9SX01PVkVEX1BMQUlOOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiYmxvY2tzIikpCisJCXJldHVybiBDT0xPUl9NT1ZFRF9CTE9DS1M7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ6ZWJyYSIpKQorCQlyZXR1cm4gQ09MT1JfTU9WRURfWkVCUkE7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkZWZhdWx0IikpCisJCXJldHVybiBDT0xPUl9NT1ZFRF9ERUZBVUxUOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGltbWVkLXplYnJhIikpCisJCXJldHVybiBDT0xPUl9NT1ZFRF9aRUJSQV9ESU07CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkaW1tZWRfemVicmEiKSkKKwkJcmV0dXJuIENPTE9SX01PVkVEX1pFQlJBX0RJTTsKKwllbHNlCisJCXJldHVybiBlcnJvcihfKCJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICdkaW1tZWQtemVicmEnLCAncGxhaW4nIikpOworfQorCitzdGF0aWMgdW5zaWduZWQgcGFyc2VfY29sb3JfbW92ZWRfd3MoY29uc3QgY2hhciAqYXJnKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBsID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmk7CisKKwlzdHJpbmdfbGlzdF9zcGxpdCgmbCwgYXJnLCAnLCcsIC0xKTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaSwgJmwpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkc3RyKCZzYiwgaS0+c3RyaW5nKTsKKwkJc3RyYnVmX3RyaW0oJnNiKTsKKworCQlpZiAoIXN0cmNtcChzYi5idWYsICJubyIpKQorCQkJcmV0ID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcChzYi5idWYsICJpZ25vcmUtc3BhY2UtY2hhbmdlIikpCisJCQlyZXQgfD0gWERGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRTsKKwkJZWxzZSBpZiAoIXN0cmNtcChzYi5idWYsICJpZ25vcmUtc3BhY2UtYXQtZW9sIikpCisJCQlyZXQgfD0gWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTDsKKwkJZWxzZSBpZiAoIXN0cmNtcChzYi5idWYsICJpZ25vcmUtYWxsLXNwYWNlIikpCisJCQlyZXQgfD0gWERGX0lHTk9SRV9XSElURVNQQUNFOworCQllbHNlIGlmICghc3RyY21wKHNiLmJ1ZiwgImFsbG93LWluZGVudGF0aW9uLWNoYW5nZSIpKQorCQkJcmV0IHw9IENPTE9SX01PVkVEX1dTX0FMTE9XX0lOREVOVEFUSU9OX0NIQU5HRTsKKwkJZWxzZSB7CisJCQlyZXQgfD0gQ09MT1JfTU9WRURfV1NfRVJST1I7CisJCQllcnJvcihfKCJ1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJywgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlLXNwYWNlLWNoYW5nZScsICdpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIpLCBzYi5idWYpOworCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisKKwlpZiAoKHJldCAmIENPTE9SX01PVkVEX1dTX0FMTE9XX0lOREVOVEFUSU9OX0NIQU5HRSkgJiYKKwkgICAgKHJldCAmIFhERl9XSElURVNQQUNFX0ZMQUdTKSkgeworCQllcnJvcihfKCJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHdoaXRlc3BhY2UgbW9kZXMiKSk7CisJCXJldCB8PSBDT0xPUl9NT1ZFRF9XU19FUlJPUjsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbCwgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ2l0X2RpZmZfdWlfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLmRpZmYiKSkgeworCQlkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmNvbG9ybW92ZWQiKSkgeworCQlpbnQgY20gPSBwYXJzZV9jb2xvcl9tb3ZlZCh2YWx1ZSk7CisJCWlmIChjbSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWRpZmZfY29sb3JfbW92ZWRfZGVmYXVsdCA9IGNtOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5jb2xvcm1vdmVkd3MiKSkgeworCQl1bnNpZ25lZCBjbSA9IHBhcnNlX2NvbG9yX21vdmVkX3dzKHZhbHVlKTsKKwkJaWYgKGNtICYgQ09MT1JfTU9WRURfV1NfRVJST1IpCisJCQlyZXR1cm4gLTE7CisJCWRpZmZfY29sb3JfbW92ZWRfd3NfZGVmYXVsdCA9IGNtOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5jb250ZXh0IikpIHsKKwkJZGlmZl9jb250ZXh0X2RlZmF1bHQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKGRpZmZfY29udGV4dF9kZWZhdWx0IDwgMCkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuaW50ZXJodW5rY29udGV4dCIpKSB7CisJCWRpZmZfaW50ZXJodW5rX2NvbnRleHRfZGVmYXVsdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlpZiAoZGlmZl9pbnRlcmh1bmtfY29udGV4dF9kZWZhdWx0IDwgMCkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYucmVuYW1lcyIpKSB7CisJCWRpZmZfZGV0ZWN0X3JlbmFtZV9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19yZW5hbWUodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmF1dG9yZWZyZXNoaW5kZXgiKSkgeworCQlkaWZmX2F1dG9fcmVmcmVzaF9pbmRleCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYubW5lbW9uaWNwcmVmaXgiKSkgeworCQlkaWZmX21uZW1vbmljX3ByZWZpeCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYubm9wcmVmaXgiKSkgeworCQlkaWZmX25vX3ByZWZpeCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuc3RhdGdyYXBod2lkdGgiKSkgeworCQlkaWZmX3N0YXRfZ3JhcGhfd2lkdGggPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuZXh0ZXJuYWwiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZleHRlcm5hbF9kaWZmX2NtZF9jZmcsIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKHZhciwgImRpZmYud29yZHJlZ2V4IikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZGlmZl93b3JkX3JlZ2V4X2NmZywgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5vcmRlcmZpbGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJmRpZmZfb3JkZXJfZmlsZV9jZmcsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5pZ25vcmVzdWJtb2R1bGVzIikpCisJCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcoJmRlZmF1bHRfZGlmZl9vcHRpb25zLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnN1Ym1vZHVsZSIpKSB7CisJCWlmIChwYXJzZV9zdWJtb2R1bGVfcGFyYW1zKCZkZWZhdWx0X2RpZmZfb3B0aW9ucywgdmFsdWUpKQorCQkJd2FybmluZyhfKCJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIpLAorCQkJCXZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5hbGdvcml0aG0iKSkgeworCQlkaWZmX2FsZ29yaXRobSA9IHBhcnNlX2FsZ29yaXRobV92YWx1ZSh2YWx1ZSk7CisJCWlmIChkaWZmX2FsZ29yaXRobSA8IDApCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKworCWlmIChnaXRfY29sb3JfY29uZmlnKHZhciwgdmFsdWUsIGNiKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBnaXRfZGlmZl9iYXNpY19jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgZ2l0X2RpZmZfYmFzaWNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnJlbmFtZWxpbWl0IikpIHsKKwkJZGlmZl9yZW5hbWVfbGltaXRfZGVmYXVsdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHNraXBfcHJlZml4KHZhciwgImRpZmYuY29sb3IuIiwgJm5hbWUpIHx8CisJICAgIHNraXBfcHJlZml4KHZhciwgImNvbG9yLmRpZmYuIiwgJm5hbWUpKSB7CisJCWludCBzbG90ID0gcGFyc2VfZGlmZl9jb2xvcl9zbG90KG5hbWUpOworCQlpZiAoc2xvdCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyZXR1cm4gY29sb3JfcGFyc2UodmFsdWUsIGRpZmZfY29sb3JzW3Nsb3RdKTsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLndzZXJyb3JoaWdobGlnaHQiKSkgeworCQlpbnQgdmFsID0gcGFyc2Vfd3NfZXJyb3JfaGlnaGxpZ2h0KHZhbHVlKTsKKwkJaWYgKHZhbCA8IDApCisJCQlyZXR1cm4gLTE7CisJCXdzX2Vycm9yX2hpZ2hsaWdodF9kZWZhdWx0ID0gdmFsOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBsaWtlIEdOVSBkaWZmJ3MgLS1zdXBwcmVzcy1ibGFuay1lbXB0eSBvcHRpb24gICovCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5zdXBwcmVzc2JsYW5rZW1wdHkiKSB8fAorCQkJLyogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQkhc3RyY21wKHZhciwgImRpZmYuc3VwcHJlc3MtYmxhbmstZW1wdHkiKSkgeworCQlkaWZmX3N1cHByZXNzX2JsYW5rX2VtcHR5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmRpcnN0YXQiKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGVycm1zZyA9IFNUUkJVRl9JTklUOworCQlkZWZhdWx0X2RpZmZfb3B0aW9ucy5kaXJzdGF0X3Blcm1pbGxlID0gZGlmZl9kaXJzdGF0X3Blcm1pbGxlX2RlZmF1bHQ7CisJCWlmIChwYXJzZV9kaXJzdGF0X3BhcmFtcygmZGVmYXVsdF9kaWZmX29wdGlvbnMsIHZhbHVlLCAmZXJybXNnKSkKKwkJCXdhcm5pbmcoXygiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiVzIiksCisJCQkJZXJybXNnLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnJtc2cpOworCQlkaWZmX2RpcnN0YXRfcGVybWlsbGVfZGVmYXVsdCA9IGRlZmF1bHRfZGlmZl9vcHRpb25zLmRpcnN0YXRfcGVybWlsbGU7CisJCXJldHVybiAwOworCX0KKworCWlmIChnaXRfZGlmZl9oZXVyaXN0aWNfY29uZmlnKHZhciwgdmFsdWUsIGNiKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgY2hhciAqcXVvdGVfdHdvKGNvbnN0IGNoYXIgKm9uZSwgY29uc3QgY2hhciAqdHdvKQoreworCWludCBuZWVkX29uZSA9IHF1b3RlX2Nfc3R5bGUob25lLCBOVUxMLCBOVUxMLCAxKTsKKwlpbnQgbmVlZF90d28gPSBxdW90ZV9jX3N0eWxlKHR3bywgTlVMTCwgTlVMTCwgMSk7CisJc3RydWN0IHN0cmJ1ZiByZXMgPSBTVFJCVUZfSU5JVDsKKworCWlmIChuZWVkX29uZSArIG5lZWRfdHdvKSB7CisJCXN0cmJ1Zl9hZGRjaCgmcmVzLCAnIicpOworCQlxdW90ZV9jX3N0eWxlKG9uZSwgJnJlcywgTlVMTCwgMSk7CisJCXF1b3RlX2Nfc3R5bGUodHdvLCAmcmVzLCBOVUxMLCAxKTsKKwkJc3RyYnVmX2FkZGNoKCZyZXMsICciJyk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cigmcmVzLCBvbmUpOworCQlzdHJidWZfYWRkc3RyKCZyZXMsIHR3byk7CisJfQorCXJldHVybiBzdHJidWZfZGV0YWNoKCZyZXMsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZih2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpleHRlcm5hbF9kaWZmX2NtZCA9IE5VTEw7CisJc3RhdGljIGludCBkb25lX3ByZXBhcmluZyA9IDA7CisKKwlpZiAoZG9uZV9wcmVwYXJpbmcpCisJCXJldHVybiBleHRlcm5hbF9kaWZmX2NtZDsKKwlleHRlcm5hbF9kaWZmX2NtZCA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoIkdJVF9FWFRFUk5BTF9ESUZGIikpOworCWlmICghZXh0ZXJuYWxfZGlmZl9jbWQpCisJCWV4dGVybmFsX2RpZmZfY21kID0gZXh0ZXJuYWxfZGlmZl9jbWRfY2ZnOworCWRvbmVfcHJlcGFyaW5nID0gMTsKKwlyZXR1cm4gZXh0ZXJuYWxfZGlmZl9jbWQ7Cit9CisKKy8qCisgKiBLZWVwIHRyYWNrIG9mIGZpbGVzIHVzZWQgZm9yIGRpZmZpbmcuIFNvbWV0aW1lcyBzdWNoIGFuIGVudHJ5CisgKiByZWZlcnMgdG8gYSB0ZW1wb3JhcnkgZmlsZSwgc29tZXRpbWVzIHRvIGFuIGV4aXN0aW5nIGZpbGUsIGFuZAorICogc29tZXRpbWVzIHRvICIvZGV2L251bGwiLgorICovCitzdGF0aWMgc3RydWN0IGRpZmZfdGVtcGZpbGUgeworCS8qCisJICogZmlsZW5hbWUgZXh0ZXJuYWwgZGlmZiBzaG91bGQgcmVhZCBmcm9tLCBvciBOVUxMIGlmIHRoaXMKKwkgKiBlbnRyeSBpcyBjdXJyZW50bHkgbm90IGluIHVzZToKKwkgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJY2hhciBoZXhbR0lUX01BWF9IRVhTWiArIDFdOworCWNoYXIgbW9kZVsxMF07CisKKwkvKgorCSAqIElmIHRoaXMgZGlmZl90ZW1wZmlsZSBpbnN0YW5jZSByZWZlcnMgdG8gYSB0ZW1wb3JhcnkgZmlsZSwKKwkgKiB0aGlzIHRlbXBmaWxlIG9iamVjdCBpcyB1c2VkIHRvIG1hbmFnZSBpdHMgbGlmZXRpbWUuCisJICovCisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZTsKK30gZGlmZl90ZW1wWzJdOworCitzdHJ1Y3QgZW1pdF9jYWxsYmFjayB7CisJaW50IGNvbG9yX2RpZmY7CisJdW5zaWduZWQgd3NfcnVsZTsKKwlpbnQgYmxhbmtfYXRfZW9mX2luX3ByZWltYWdlOworCWludCBibGFua19hdF9lb2ZfaW5fcG9zdGltYWdlOworCWludCBsbm9faW5fcHJlaW1hZ2U7CisJaW50IGxub19pbl9wb3N0aW1hZ2U7CisJY29uc3QgY2hhciAqKmxhYmVsX3BhdGg7CisJc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkczsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQ7CisJc3RydWN0IHN0cmJ1ZiAqaGVhZGVyOworfTsKKworc3RhdGljIGludCBjb3VudF9saW5lcyhjb25zdCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlpbnQgY291bnQsIGNoLCBjb21wbGV0ZWx5X2VtcHR5ID0gMSwgbmxfanVzdF9zZWVuID0gMDsKKwljb3VudCA9IDA7CisJd2hpbGUgKDAgPCBzaXplLS0pIHsKKwkJY2ggPSAqZGF0YSsrOworCQlpZiAoY2ggPT0gJ1xuJykgeworCQkJY291bnQrKzsKKwkJCW5sX2p1c3Rfc2VlbiA9IDE7CisJCQljb21wbGV0ZWx5X2VtcHR5ID0gMDsKKwkJfQorCQllbHNlIHsKKwkJCW5sX2p1c3Rfc2VlbiA9IDA7CisJCQljb21wbGV0ZWx5X2VtcHR5ID0gMDsKKwkJfQorCX0KKwlpZiAoY29tcGxldGVseV9lbXB0eSkKKwkJcmV0dXJuIDA7CisJaWYgKCFubF9qdXN0X3NlZW4pCisJCWNvdW50Kys7IC8qIG5vIHRyYWlsaW5nIG5ld2xpbmUgKi8KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9tbWZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIG1tZmlsZV90ICptZiwKKwkJICAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJaWYgKCFESUZGX0ZJTEVfVkFMSUQob25lKSkgeworCQltZi0+cHRyID0gKGNoYXIgKikiIjsgLyogZG9lcyBub3QgbWF0dGVyICovCisJCW1mLT5zaXplID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgb25lLCAwKSkKKwkJcmV0dXJuIC0xOworCisJbWYtPnB0ciA9IG9uZS0+ZGF0YTsKKwltZi0+c2l6ZSA9IG9uZS0+c2l6ZTsKKwlyZXR1cm4gMDsKK30KKworLyogbGlrZSBmaWxsX21tZmlsZSwgYnV0IG9ubHkgZm9yIHNpemUsIHNvIHdlIGNhbiBhdm9pZCByZXRyaWV2aW5nIGJsb2IgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRpZmZfZmlsZXNwZWNfc2l6ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKK3sKKwlpZiAoIURJRkZfRklMRV9WQUxJRChvbmUpKQorCQlyZXR1cm4gMDsKKwlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHIsIG9uZSwgQ0hFQ0tfU0laRV9PTkxZKTsKKwlyZXR1cm4gb25lLT5zaXplOworfQorCitzdGF0aWMgaW50IGNvdW50X3RyYWlsaW5nX2JsYW5rKG1tZmlsZV90ICptZiwgdW5zaWduZWQgd3NfcnVsZSkKK3sKKwljaGFyICpwdHIgPSBtZi0+cHRyOworCWxvbmcgc2l6ZSA9IG1mLT5zaXplOworCWludCBjbnQgPSAwOworCisJaWYgKCFzaXplKQorCQlyZXR1cm4gY250OworCXB0ciArPSBzaXplIC0gMTsgLyogcG9pbnRpbmcgYXQgdGhlIHZlcnkgZW5kICovCisJaWYgKCpwdHIgIT0gJ1xuJykKKwkJOyAvKiBpbmNvbXBsZXRlIGxpbmUgKi8KKwllbHNlCisJCXB0ci0tOyAvKiBza2lwIHRoZSBsYXN0IExGICovCisJd2hpbGUgKG1mLT5wdHIgPCBwdHIpIHsKKwkJY2hhciAqcHJldl9lb2w7CisJCWZvciAocHJldl9lb2wgPSBwdHI7IG1mLT5wdHIgPD0gcHJldl9lb2w7IHByZXZfZW9sLS0pCisJCQlpZiAoKnByZXZfZW9sID09ICdcbicpCisJCQkJYnJlYWs7CisJCWlmICghd3NfYmxhbmtfbGluZShwcmV2X2VvbCArIDEsIHB0ciAtIHByZXZfZW9sLCB3c19ydWxlKSkKKwkJCWJyZWFrOworCQljbnQrKzsKKwkJcHRyID0gcHJldl9lb2wgLSAxOworCX0KKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgdm9pZCBjaGVja19ibGFua19hdF9lb2YobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwKKwkJCSAgICAgICBzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSkKK3sKKwlpbnQgbDEsIGwyLCBhdDsKKwl1bnNpZ25lZCB3c19ydWxlID0gZWNiZGF0YS0+d3NfcnVsZTsKKwlsMSA9IGNvdW50X3RyYWlsaW5nX2JsYW5rKG1mMSwgd3NfcnVsZSk7CisJbDIgPSBjb3VudF90cmFpbGluZ19ibGFuayhtZjIsIHdzX3J1bGUpOworCWlmIChsMiA8PSBsMSkgeworCQllY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcHJlaW1hZ2UgPSAwOworCQllY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcG9zdGltYWdlID0gMDsKKwkJcmV0dXJuOworCX0KKwlhdCA9IGNvdW50X2xpbmVzKG1mMS0+cHRyLCBtZjEtPnNpemUpOworCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZSA9IChhdCAtIGwxKSArIDE7CisKKwlhdCA9IGNvdW50X2xpbmVzKG1mMi0+cHRyLCBtZjItPnNpemUpOworCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgPSAoYXQgLSBsMikgKyAxOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2xpbmVfMChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJY29uc3QgY2hhciAqc2V0X3NpZ24sIGNvbnN0IGNoYXIgKnNldCwgdW5zaWduZWQgcmV2ZXJzZSwgY29uc3QgY2hhciAqcmVzZXQsCisJCQlpbnQgZmlyc3QsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJaW50IGhhc190cmFpbGluZ19uZXdsaW5lLCBoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuOworCWludCBuZWVkc19yZXNldCA9IDA7IC8qIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgKi8KKwlGSUxFICpmaWxlID0gby0+ZmlsZTsKKworCWZwdXRzKGRpZmZfbGluZV9wcmVmaXgobyksIGZpbGUpOworCisJaGFzX3RyYWlsaW5nX25ld2xpbmUgPSAobGVuID4gMCAmJiBsaW5lW2xlbi0xXSA9PSAnXG4nKTsKKwlpZiAoaGFzX3RyYWlsaW5nX25ld2xpbmUpCisJCWxlbi0tOworCisJaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9IChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdccicpOworCWlmIChoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuKQorCQlsZW4tLTsKKworCWlmICghbGVuICYmICFmaXJzdCkKKwkJZ290byBlbmRfb2ZfbGluZTsKKworCWlmIChyZXZlcnNlICYmIHdhbnRfY29sb3Ioby0+dXNlX2NvbG9yKSkgeworCQlmcHV0cyhHSVRfQ09MT1JfUkVWRVJTRSwgZmlsZSk7CisJCW5lZWRzX3Jlc2V0ID0gMTsKKwl9CisKKwlpZiAoc2V0X3NpZ24pIHsKKwkJZnB1dHMoc2V0X3NpZ24sIGZpbGUpOworCQluZWVkc19yZXNldCA9IDE7CisJfQorCisJaWYgKGZpcnN0KQorCQlmcHV0YyhmaXJzdCwgZmlsZSk7CisKKwlpZiAoIWxlbikKKwkJZ290byBlbmRfb2ZfbGluZTsKKworCWlmIChzZXQpIHsKKwkJaWYgKHNldF9zaWduICYmIHNldCAhPSBzZXRfc2lnbikKKwkJCWZwdXRzKHJlc2V0LCBmaWxlKTsKKwkJZnB1dHMoc2V0LCBmaWxlKTsKKwkJbmVlZHNfcmVzZXQgPSAxOworCX0KKwlmd3JpdGUobGluZSwgbGVuLCAxLCBmaWxlKTsKKwluZWVkc19yZXNldCA9IDE7IC8qICdsaW5lJyBtYXkgY29udGFpbiBjb2xvciBjb2Rlcy4gKi8KKworZW5kX29mX2xpbmU6CisJaWYgKG5lZWRzX3Jlc2V0KQorCQlmcHV0cyhyZXNldCwgZmlsZSk7CisJaWYgKGhhc190cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4pCisJCWZwdXRjKCdccicsIGZpbGUpOworCWlmIChoYXNfdHJhaWxpbmdfbmV3bGluZSkKKwkJZnB1dGMoJ1xuJywgZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfbGluZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpzZXQsIGNvbnN0IGNoYXIgKnJlc2V0LAorCQkgICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWVtaXRfbGluZV8wKG8sIHNldCwgTlVMTCwgMCwgcmVzZXQsIDAsIGxpbmUsIGxlbik7Cit9CisKK2VudW0gZGlmZl9zeW1ib2wgeworCURJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0hFQURFUiwKKwlESUZGX1NZTUJPTF9CSU5BUllfRElGRl9IRUFERVJfREVMVEEsCisJRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfSEVBREVSX0xJVEVSQUwsCisJRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfQk9EWSwKKwlESUZGX1NZTUJPTF9CSU5BUllfRElGRl9GT09URVIsCisJRElGRl9TWU1CT0xfU1RBVFNfU1VNTUFSWV9OT19GSUxFUywKKwlESUZGX1NZTUJPTF9TVEFUU19TVU1NQVJZX0FCQlJFViwKKwlESUZGX1NZTUJPTF9TVEFUU19TVU1NQVJZX0lOU0VSVFNfREVMRVRFUywKKwlESUZGX1NZTUJPTF9TVEFUU19MSU5FLAorCURJRkZfU1lNQk9MX1dPUkRfRElGRiwKKwlESUZGX1NZTUJPTF9TVEFUX1NFUCwKKwlESUZGX1NZTUJPTF9TVU1NQVJZLAorCURJRkZfU1lNQk9MX1NVQk1PRFVMRV9BREQsCisJRElGRl9TWU1CT0xfU1VCTU9EVUxFX0RFTCwKKwlESUZGX1NZTUJPTF9TVUJNT0RVTEVfVU5UUkFDS0VELAorCURJRkZfU1lNQk9MX1NVQk1PRFVMRV9NT0RJRklFRCwKKwlESUZGX1NZTUJPTF9TVUJNT0RVTEVfSEVBREVSLAorCURJRkZfU1lNQk9MX1NVQk1PRFVMRV9FUlJPUiwKKwlESUZGX1NZTUJPTF9TVUJNT0RVTEVfUElQRVRIUk9VR0gsCisJRElGRl9TWU1CT0xfUkVXUklURV9ESUZGLAorCURJRkZfU1lNQk9MX0JJTkFSWV9GSUxFUywKKwlESUZGX1NZTUJPTF9IRUFERVIsCisJRElGRl9TWU1CT0xfRklMRVBBSVJfUExVUywKKwlESUZGX1NZTUJPTF9GSUxFUEFJUl9NSU5VUywKKwlESUZGX1NZTUJPTF9XT1JEU19QT1JDRUxBSU4sCisJRElGRl9TWU1CT0xfV09SRFMsCisJRElGRl9TWU1CT0xfQ09OVEVYVCwKKwlESUZGX1NZTUJPTF9DT05URVhUX0lOQ09NUExFVEUsCisJRElGRl9TWU1CT0xfUExVUywKKwlESUZGX1NZTUJPTF9NSU5VUywKKwlESUZGX1NZTUJPTF9OT19MRl9FT0YsCisJRElGRl9TWU1CT0xfQ09OVEVYVF9GUkFHSU5GTywKKwlESUZGX1NZTUJPTF9DT05URVhUX01BUktFUiwKKwlESUZGX1NZTUJPTF9TRVBBUkFUT1IKK307CisvKgorICogRmxhZ3MgZm9yIGNvbnRlbnQgbGluZXM6CisgKiAwLi4xMiBhcmUgd2hpdGVzcGFjZSBydWxlcworICogMTMtMTUgYXJlIFdTRUhfTkVXIHwgV1NFSF9PTEQgfCBXU0VIX0NPTlRFWFQKKyAqIDE2IGlzIG1hcmtpbmcgaWYgdGhlIGxpbmUgaXMgYmxhbmsgYXQgRU9GCisgKi8KKyNkZWZpbmUgRElGRl9TWU1CT0xfQ09OVEVOVF9CTEFOS19MSU5FX0VPRgkoMTw8MTYpCisjZGVmaW5lIERJRkZfU1lNQk9MX01PVkVEX0xJTkUJCQkoMTw8MTcpCisjZGVmaW5lIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfQUxUCQkoMTw8MTgpCisjZGVmaW5lIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfVU5JTlRFUkVTVElORwkoMTw8MTkpCisjZGVmaW5lIERJRkZfU1lNQk9MX0NPTlRFTlRfV1NfTUFTSyAoV1NFSF9ORVcgfCBXU0VIX09MRCB8IFdTRUhfQ09OVEVYVCB8IFdTX1JVTEVfTUFTSykKKworLyoKKyAqIFRoaXMgc3RydWN0IGlzIHVzZWQgd2hlbiB3ZSBuZWVkIHRvIGJ1ZmZlciB0aGUgb3V0cHV0IG9mIHRoZSBkaWZmIG91dHB1dC4KKyAqCisgKiBORUVEU1dPUks6IEluc3RlYWQgb2Ygc3RvcmluZyBhIGNvcHkgb2YgdGhlIGxpbmUsIGFkZCBhbiBvZmZzZXQgcG9pbnRlcgorICogaW50byB0aGUgcHJlL3Bvc3QgaW1hZ2UgZmlsZS4gVGhpcyBwb2ludGVyIGNvdWxkIGJlIGEgdW5pb24gd2l0aCB0aGUKKyAqIGxpbmUgcG9pbnRlci4gQnkgc3RvcmluZyBhbiBvZmZzZXQgaW50byB0aGUgZmlsZSBpbnN0ZWFkIG9mIHRoZSBsaXRlcmFsIGxpbmUsCisgKiB3ZSBjYW4gZGVjcmVhc2UgdGhlIG1lbW9yeSBmb290cHJpbnQgZm9yIHRoZSBidWZmZXJlZCBvdXRwdXQuIEF0IGZpcnN0IHdlCisgKiBtYXkgd2FudCB0byBvbmx5IGhhdmUgaW5kaXJlY3Rpb24gZm9yIHRoZSBjb250ZW50IGxpbmVzLCBidXQgd2UgY291bGQgYWxzbworICogZW5oYW5jZSB0aGUgc3RhdGUgZm9yIGVtaXR0aW5nIHByZWZhYnJpY2F0ZWQgbGluZXMsIGUuZy4gdGhlIHNpbWlsYXJpdHkKKyAqIHNjb3JlIGxpbmUgb3IgaHVuay9maWxlIGhlYWRlcnMgd291bGQgb25seSBuZWVkIHRvIHN0b3JlIGEgbnVtYmVyIG9yIHBhdGgKKyAqIGFuZCB0aGVuIHRoZSBvdXRwdXQgY2FuIGJlIGNvbnN0cnVjdGVkIGxhdGVyIG9uIGRlcGVuZGluZyBvbiBzdGF0ZS4KKyAqLworc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgeworCWNvbnN0IGNoYXIgKmxpbmU7CisJaW50IGxlbjsKKwlpbnQgZmxhZ3M7CisJaW50IGluZGVudF9vZmY7ICAgLyogT2Zmc2V0IHRvIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciAqLworCWludCBpbmRlbnRfd2lkdGg7IC8qIFRoZSB2aXN1YWwgd2lkdGggb2YgdGhlIGluZGVudGF0aW9uICovCisJZW51bSBkaWZmX3N5bWJvbCBzOworfTsKKyNkZWZpbmUgRU1JVFRFRF9ESUZGX1NZTUJPTF9JTklUIHtOVUxMfQorCitzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbHMgeworCXN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICpidWY7CisJaW50IG5yLCBhbGxvYzsKK307CisjZGVmaW5lIEVNSVRURURfRElGRl9TWU1CT0xTX0lOSVQge05VTEwsIDAsIDB9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9lbWl0dGVkX2RpZmZfc3ltYm9sKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkJICAgICAgIHN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICplKQoreworCXN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICpmOworCisJQUxMT0NfR1JPVyhvLT5lbWl0dGVkX3N5bWJvbHMtPmJ1ZiwKKwkJICAgby0+ZW1pdHRlZF9zeW1ib2xzLT5uciArIDEsCisJCSAgIG8tPmVtaXR0ZWRfc3ltYm9scy0+YWxsb2MpOworCWYgPSAmby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbby0+ZW1pdHRlZF9zeW1ib2xzLT5ucisrXTsKKworCW1lbWNweShmLCBlLCBzaXplb2Yoc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wpKTsKKwlmLT5saW5lID0gZS0+bGluZSA/IHhtZW1kdXB6KGUtPmxpbmUsIGUtPmxlbikgOiBOVUxMOworfQorCitzdHJ1Y3QgbW92ZWRfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwljb25zdCBzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCAqZXM7CisJc3RydWN0IG1vdmVkX2VudHJ5ICpuZXh0X2xpbmU7Cit9OworCitzdHJ1Y3QgbW92ZWRfYmxvY2sgeworCXN0cnVjdCBtb3ZlZF9lbnRyeSAqbWF0Y2g7CisJaW50IHdzZDsgLyogVGhlIHdoaXRlc3BhY2UgZGVsdGEgb2YgdGhpcyBibG9jayAqLworfTsKKworc3RhdGljIHZvaWQgbW92ZWRfYmxvY2tfY2xlYXIoc3RydWN0IG1vdmVkX2Jsb2NrICpiKQoreworCW1lbXNldChiLCAwLCBzaXplb2YoKmIpKTsKK30KKworI2RlZmluZSBJTkRFTlRfQkxBTktMSU5FIElOVF9NSU4KKworc3RhdGljIHZvaWQgZmlsbF9lc19pbmRlbnRfZGF0YShzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCAqZXMpCit7CisJdW5zaWduZWQgaW50IG9mZiA9IDAsIGk7CisJaW50IHdpZHRoID0gMCwgdGFiX3dpZHRoID0gZXMtPmZsYWdzICYgV1NfVEFCX1dJRFRIX01BU0s7CisJY29uc3QgY2hhciAqcyA9IGVzLT5saW5lOworCWNvbnN0IGludCBsZW4gPSBlcy0+bGVuOworCisJLyogc2tpcCBhbnkgXHYgXGYgXHIgYXQgc3RhcnQgb2YgaW5kZW50YXRpb24gKi8KKwl3aGlsZSAoc1tvZmZdID09ICdcZicgfHwgc1tvZmZdID09ICdcdicgfHwKKwkgICAgICAgKHNbb2ZmXSA9PSAnXHInICYmIG9mZiA8IGxlbiAtIDEpKQorCQlvZmYrKzsKKworCS8qIGNhbGN1bGF0ZSB0aGUgdmlzdWFsIHdpZHRoIG9mIGluZGVudGF0aW9uICovCisJd2hpbGUoMSkgeworCQlpZiAoc1tvZmZdID09ICcgJykgeworCQkJd2lkdGgrKzsKKwkJCW9mZisrOworCQl9IGVsc2UgaWYgKHNbb2ZmXSA9PSAnXHQnKSB7CisJCQl3aWR0aCArPSB0YWJfd2lkdGggLSAod2lkdGggJSB0YWJfd2lkdGgpOworCQkJd2hpbGUgKHNbKytvZmZdID09ICdcdCcpCisJCQkJd2lkdGggKz0gdGFiX3dpZHRoOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBjaGVjayBpZiB0aGlzIGxpbmUgaXMgYmxhbmsgKi8KKwlmb3IgKGkgPSBvZmY7IGkgPCBsZW47IGkrKykKKwkJaWYgKCFpc3NwYWNlKHNbaV0pKQorCQkgICAgYnJlYWs7CisKKwlpZiAoaSA9PSBsZW4pIHsKKwkJZXMtPmluZGVudF93aWR0aCA9IElOREVOVF9CTEFOS0xJTkU7CisJCWVzLT5pbmRlbnRfb2ZmID0gbGVuOworCX0gZWxzZSB7CisJCWVzLT5pbmRlbnRfb2ZmID0gb2ZmOworCQllcy0+aW5kZW50X3dpZHRoID0gd2lkdGg7CisJfQorfQorCitzdGF0aWMgaW50IGNvbXB1dGVfd3NfZGVsdGEoY29uc3Qgc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmEsCisJCQkgICAgY29uc3Qgc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmIsCisJCQkgICAgaW50ICpvdXQpCit7CisJaW50IGFfbGVuID0gYS0+bGVuLAorCSAgICBiX2xlbiA9IGItPmxlbiwKKwkgICAgYV9vZmYgPSBhLT5pbmRlbnRfb2ZmLAorCSAgICBhX3dpZHRoID0gYS0+aW5kZW50X3dpZHRoLAorCSAgICBiX29mZiA9IGItPmluZGVudF9vZmYsCisJICAgIGJfd2lkdGggPSBiLT5pbmRlbnRfd2lkdGg7CisJaW50IGRlbHRhOworCisJaWYgKGFfd2lkdGggPT0gSU5ERU5UX0JMQU5LTElORSAmJiBiX3dpZHRoID09IElOREVOVF9CTEFOS0xJTkUpIHsKKwkJKm91dCA9IElOREVOVF9CTEFOS0xJTkU7CisJCXJldHVybiAxOworCX0KKworCWlmIChhLT5zID09IERJRkZfU1lNQk9MX1BMVVMpCisJCWRlbHRhID0gYV93aWR0aCAtIGJfd2lkdGg7CisJZWxzZQorCQlkZWx0YSA9IGJfd2lkdGggLSBhX3dpZHRoOworCisJaWYgKGFfbGVuIC0gYV9vZmYgIT0gYl9sZW4gLSBiX29mZiB8fAorCSAgICBtZW1jbXAoYS0+bGluZSArIGFfb2ZmLCBiLT5saW5lICsgYl9vZmYsIGFfbGVuIC0gYV9vZmYpKQorCQlyZXR1cm4gMDsKKworCSpvdXQgPSBkZWx0YTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNtcF9pbl9ibG9ja193aXRoX3dzZChjb25zdCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCSBjb25zdCBzdHJ1Y3QgbW92ZWRfZW50cnkgKmN1ciwKKwkJCQkgY29uc3Qgc3RydWN0IG1vdmVkX2VudHJ5ICptYXRjaCwKKwkJCQkgc3RydWN0IG1vdmVkX2Jsb2NrICpwbWIsCisJCQkJIGludCBuKQoreworCXN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICpsID0gJm8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmW25dOworCWludCBhbCA9IGN1ci0+ZXMtPmxlbiwgYmwgPSBtYXRjaC0+ZXMtPmxlbiwgY2wgPSBsLT5sZW47CisJY29uc3QgY2hhciAqYSA9IGN1ci0+ZXMtPmxpbmUsCisJCSAgICpiID0gbWF0Y2gtPmVzLT5saW5lLAorCQkgICAqYyA9IGwtPmxpbmU7CisJaW50IGFfb2ZmID0gY3VyLT5lcy0+aW5kZW50X29mZiwKKwkgICAgYV93aWR0aCA9IGN1ci0+ZXMtPmluZGVudF93aWR0aCwKKwkgICAgY19vZmYgPSBsLT5pbmRlbnRfb2ZmLAorCSAgICBjX3dpZHRoID0gbC0+aW5kZW50X3dpZHRoOworCWludCBkZWx0YTsKKworCS8qCisJICogV2UgbmVlZCB0byBjaGVjayBpZiAnY3VyJyBpcyBlcXVhbCB0byAnbWF0Y2gnLiAgQXMgdGhvc2UKKwkgKiBhcmUgZnJvbSB0aGUgc2FtZSAoKy8tKSBzaWRlLCB3ZSBkbyBub3QgbmVlZCB0byBhZGp1c3QgZm9yCisJICogaW5kZW50IGNoYW5nZXMuIEhvd2V2ZXIgdGhlc2Ugd2VyZSBmb3VuZCB1c2luZyBmdXp6eQorCSAqIG1hdGNoaW5nIHNvIHdlIGRvIGhhdmUgdG8gY2hlY2sgaWYgdGhleSBhcmUgZXF1YWwuIEhlcmUgd2UKKwkgKiBqdXN0IGNoZWNrIHRoZSBsZW5ndGhzLiBXZSBkZWxheSBjYWxsaW5nIG1lbWNtcCgpIHRvIGNoZWNrCisJICogdGhlIGNvbnRlbnRzIHVudGlsIGxhdGVyIGFzIGlmIHRoZSBsZW5ndGggY29tcGFyaXNvbiBmb3IgYQorCSAqIGFuZCBjIGZhaWxzIHdlIGNhbiBhdm9pZCB0aGUgY2FsbCBhbGwgdG9nZXRoZXIuCisJICovCisJaWYgKGFsICE9IGJsKQorCQlyZXR1cm4gMTsKKworCS8qIElmICdsJyBhbmQgJ2N1cicgYXJlIGJvdGggYmxhbmsgdGhlbiB0aGV5IG1hdGNoLiAqLworCWlmIChhX3dpZHRoID09IElOREVOVF9CTEFOS0xJTkUgJiYgY193aWR0aCA9PSBJTkRFTlRfQkxBTktMSU5FKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhlIGluZGVudCBjaGFuZ2VzIG9mIHRoZSBibG9jayBhcmUga25vd24gYW5kIHN0b3JlZCBpbiBwbWItPndzZDsKKwkgKiBob3dldmVyIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGluZGVudCBjaGFuZ2VzIG9mIHRoZSBjdXJyZW50IGxpbmUKKwkgKiBtYXRjaCB0aG9zZSBvZiB0aGUgY3VycmVudCBibG9jayBhbmQgdGhhdCB0aGUgdGV4dCBvZiAnbCcgYW5kICdjdXInCisJICogYWZ0ZXIgdGhlIGluZGVudGF0aW9uIG1hdGNoLgorCSAqLworCWlmIChjdXItPmVzLT5zID09IERJRkZfU1lNQk9MX1BMVVMpCisJCWRlbHRhID0gYV93aWR0aCAtIGNfd2lkdGg7CisJZWxzZQorCQlkZWx0YSA9IGNfd2lkdGggLSBhX3dpZHRoOworCisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgbGluZXMgb2YgdGhpcyBibG9jayB3ZXJlIGFsbCBibGFuayB0aGVuIHNldCBpdHMKKwkgKiB3aGl0ZXNwYWNlIGRlbHRhLgorCSAqLworCWlmIChwbWItPndzZCA9PSBJTkRFTlRfQkxBTktMSU5FKQorCQlwbWItPndzZCA9IGRlbHRhOworCisJcmV0dXJuICEoZGVsdGEgPT0gcG1iLT53c2QgJiYgYWwgLSBhX29mZiA9PSBjbCAtIGNfb2ZmICYmCisJCSAhbWVtY21wKGEsIGIsIGFsKSAmJiAhCisJCSBtZW1jbXAoYSArIGFfb2ZmLCBjICsgY19vZmYsIGFsIC0gYV9vZmYpKTsKK30KKworc3RhdGljIGludCBtb3ZlZF9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqaGFzaG1hcF9jbXBfZm5fZGF0YSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCA9IGhhc2htYXBfY21wX2ZuX2RhdGE7CisJY29uc3Qgc3RydWN0IG1vdmVkX2VudHJ5ICphLCAqYjsKKwl1bnNpZ25lZCBmbGFncyA9IGRpZmZvcHQtPmNvbG9yX21vdmVkX3dzX2hhbmRsaW5nCisJCQkgJiBYREZfV0hJVEVTUEFDRV9GTEFHUzsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IG1vdmVkX2VudHJ5LCBlbnQpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgbW92ZWRfZW50cnksIGVudCk7CisKKwlpZiAoZGlmZm9wdC0+Y29sb3JfbW92ZWRfd3NfaGFuZGxpbmcgJgorCSAgICBDT0xPUl9NT1ZFRF9XU19BTExPV19JTkRFTlRBVElPTl9DSEFOR0UpCisJCS8qCisJCSAqIEFzIHRoZXJlIGlzIG5vdCBzcGVjaWZpYyB3aGl0ZSBzcGFjZSBjb25maWcgZ2l2ZW4sCisJCSAqIHdlJ2QgbmVlZCB0byBjaGVjayBmb3IgYSBuZXcgYmxvY2ssIHNvIGlnbm9yZSBhbGwKKwkJICogd2hpdGUgc3BhY2UuIFRoZSBzZXR1cCBvZiB0aGUgd2hpdGUgc3BhY2UKKwkJICogY29uZmlndXJhdGlvbiBmb3IgdGhlIG5leHQgYmxvY2sgaXMgZG9uZSBlbHNlIHdoZXJlCisJCSAqLworCQlmbGFncyB8PSBYREZfSUdOT1JFX1dISVRFU1BBQ0U7CisKKwlyZXR1cm4gIXhkaWZmX2NvbXBhcmVfbGluZXMoYS0+ZXMtPmxpbmUsIGEtPmVzLT5sZW4sCisJCQkJICAgIGItPmVzLT5saW5lLCBiLT5lcy0+bGVuLAorCQkJCSAgICBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW92ZWRfZW50cnkgKnByZXBhcmVfZW50cnkoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCQkJIGludCBsaW5lX25vKQoreworCXN0cnVjdCBtb3ZlZF9lbnRyeSAqcmV0ID0geG1hbGxvYyhzaXplb2YoKnJldCkpOworCXN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICpsID0gJm8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmW2xpbmVfbm9dOworCXVuc2lnbmVkIGZsYWdzID0gby0+Y29sb3JfbW92ZWRfd3NfaGFuZGxpbmcgJiBYREZfV0hJVEVTUEFDRV9GTEFHUzsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IHhkaWZmX2hhc2hfc3RyaW5nKGwtPmxpbmUsIGwtPmxlbiwgZmxhZ3MpOworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZyZXQtPmVudCwgaGFzaCk7CisJcmV0LT5lcyA9IGw7CisJcmV0LT5uZXh0X2xpbmUgPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkX2xpbmVzX3RvX21vdmVfZGV0ZWN0aW9uKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkJCXN0cnVjdCBoYXNobWFwICphZGRfbGluZXMsCisJCQkJCXN0cnVjdCBoYXNobWFwICpkZWxfbGluZXMpCit7CisJc3RydWN0IG1vdmVkX2VudHJ5ICpwcmV2X2xpbmUgPSBOVUxMOworCisJaW50IG47CisJZm9yIChuID0gMDsgbiA8IG8tPmVtaXR0ZWRfc3ltYm9scy0+bnI7IG4rKykgeworCQlzdHJ1Y3QgaGFzaG1hcCAqaG07CisJCXN0cnVjdCBtb3ZlZF9lbnRyeSAqa2V5OworCisJCXN3aXRjaCAoby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbl0ucykgeworCQljYXNlIERJRkZfU1lNQk9MX1BMVVM6CisJCQlobSA9IGFkZF9saW5lczsKKwkJCWJyZWFrOworCQljYXNlIERJRkZfU1lNQk9MX01JTlVTOgorCQkJaG0gPSBkZWxfbGluZXM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByZXZfbGluZSA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChvLT5jb2xvcl9tb3ZlZF93c19oYW5kbGluZyAmCisJCSAgICBDT0xPUl9NT1ZFRF9XU19BTExPV19JTkRFTlRBVElPTl9DSEFOR0UpCisJCQlmaWxsX2VzX2luZGVudF9kYXRhKCZvLT5lbWl0dGVkX3N5bWJvbHMtPmJ1ZltuXSk7CisJCWtleSA9IHByZXBhcmVfZW50cnkobywgbik7CisJCWlmIChwcmV2X2xpbmUgJiYgcHJldl9saW5lLT5lcy0+cyA9PSBvLT5lbWl0dGVkX3N5bWJvbHMtPmJ1ZltuXS5zKQorCQkJcHJldl9saW5lLT5uZXh0X2xpbmUgPSBrZXk7CisKKwkJaGFzaG1hcF9hZGQoaG0sICZrZXktPmVudCk7CisJCXByZXZfbGluZSA9IGtleTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBtYl9hZHZhbmNlX29yX251bGwoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCQlzdHJ1Y3QgbW92ZWRfZW50cnkgKm1hdGNoLAorCQkJCXN0cnVjdCBoYXNobWFwICpobSwKKwkJCQlzdHJ1Y3QgbW92ZWRfYmxvY2sgKnBtYiwKKwkJCQlpbnQgcG1iX25yKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBwbWJfbnI7IGkrKykgeworCQlzdHJ1Y3QgbW92ZWRfZW50cnkgKnByZXYgPSBwbWJbaV0ubWF0Y2g7CisJCXN0cnVjdCBtb3ZlZF9lbnRyeSAqY3VyID0gKHByZXYgJiYgcHJldi0+bmV4dF9saW5lKSA/CisJCQkJcHJldi0+bmV4dF9saW5lIDogTlVMTDsKKwkJaWYgKGN1ciAmJiAhaG0tPmNtcGZuKG8sICZjdXItPmVudCwgJm1hdGNoLT5lbnQsIE5VTEwpKSB7CisJCQlwbWJbaV0ubWF0Y2ggPSBjdXI7CisJCX0gZWxzZSB7CisJCQlwbWJbaV0ubWF0Y2ggPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwbWJfYWR2YW5jZV9vcl9udWxsX211bHRpX21hdGNoKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkJCSAgICBzdHJ1Y3QgbW92ZWRfZW50cnkgKm1hdGNoLAorCQkJCQkgICAgc3RydWN0IGhhc2htYXAgKmhtLAorCQkJCQkgICAgc3RydWN0IG1vdmVkX2Jsb2NrICpwbWIsCisJCQkJCSAgICBpbnQgcG1iX25yLCBpbnQgbikKK3sKKwlpbnQgaTsKKwljaGFyICpnb3RfbWF0Y2ggPSB4Y2FsbG9jKDEsIHBtYl9ucik7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5X2Zyb20oaG0sIG1hdGNoLCBlbnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBtYl9ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgbW92ZWRfZW50cnkgKnByZXYgPSBwbWJbaV0ubWF0Y2g7CisJCQlzdHJ1Y3QgbW92ZWRfZW50cnkgKmN1ciA9IChwcmV2ICYmIHByZXYtPm5leHRfbGluZSkgPworCQkJCQlwcmV2LT5uZXh0X2xpbmUgOiBOVUxMOworCQkJaWYgKCFjdXIpCisJCQkJY29udGludWU7CisJCQlpZiAoIWNtcF9pbl9ibG9ja193aXRoX3dzZChvLCBjdXIsIG1hdGNoLCAmcG1iW2ldLCBuKSkKKwkJCQlnb3RfbWF0Y2hbaV0gfD0gMTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwbWJfbnI7IGkrKykgeworCQlpZiAoZ290X21hdGNoW2ldKSB7CisJCQkvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGxpbmUgKi8KKwkJCXBtYltpXS5tYXRjaCA9IHBtYltpXS5tYXRjaC0+bmV4dF9saW5lOworCQl9IGVsc2UgeworCQkJbW92ZWRfYmxvY2tfY2xlYXIoJnBtYltpXSk7CisJCX0KKwl9CisKKwlmcmVlKGdvdF9tYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgc2hyaW5rX3BvdGVudGlhbF9tb3ZlZF9ibG9ja3Moc3RydWN0IG1vdmVkX2Jsb2NrICpwbWIsCisJCQkJCSBpbnQgcG1iX25yKQoreworCWludCBscCwgcnA7CisKKwkvKiBTaHJpbmsgdGhlIHNldCBvZiBwb3RlbnRpYWwgYmxvY2sgdG8gdGhlIHJlbWFpbmluZyBydW5uaW5nICovCisJZm9yIChscCA9IDAsIHJwID0gcG1iX25yIC0gMTsgbHAgPD0gcnA7KSB7CisJCXdoaWxlIChscCA8IHBtYl9uciAmJiBwbWJbbHBdLm1hdGNoKQorCQkJbHArKzsKKwkJLyogbHAgcG9pbnRzIGF0IHRoZSBmaXJzdCBOVUxMIG5vdyAqLworCisJCXdoaWxlIChycCA+IC0xICYmICFwbWJbcnBdLm1hdGNoKQorCQkJcnAtLTsKKwkJLyogcnAgcG9pbnRzIGF0IHRoZSBsYXN0IG5vbi1OVUxMICovCisKKwkJaWYgKGxwIDwgcG1iX25yICYmIHJwID4gLTEgJiYgbHAgPCBycCkgeworCQkJcG1iW2xwXSA9IHBtYltycF07CisJCQltZW1zZXQoJnBtYltycF0sIDAsIHNpemVvZihwbWJbcnBdKSk7CisJCQlycC0tOworCQkJbHArKzsKKwkJfQorCX0KKworCS8qIFJlbWVtYmVyIHRoZSBudW1iZXIgb2YgcnVubmluZyBzZXRzICovCisJcmV0dXJuIHJwICsgMTsKK30KKworLyoKKyAqIElmIG8tPmNvbG9yX21vdmVkIGlzIENPTE9SX01PVkVEX1BMQUlOLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KKyAqCisgKiBPdGhlcndpc2UsIGlmIHRoZSBsYXN0IGJsb2NrIGhhcyBmZXdlciBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGFuCisgKiBDT0xPUl9NT1ZFRF9NSU5fQUxOVU1fQ09VTlQsIHVuc2V0IERJRkZfU1lNQk9MX01PVkVEX0xJTkUgb24gYWxsIGxpbmVzIGluCisgKiB0aGF0IGJsb2NrLgorICoKKyAqIFRoZSBsYXN0IGJsb2NrIGNvbnNpc3RzIG9mIHRoZSAobiAtIGJsb2NrX2xlbmd0aCkndGggbGluZSB1cCB0byBidXQgbm90CisgKiBpbmNsdWRpbmcgdGhlIG50aCBsaW5lLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgbGFzdCBibG9jayBpcyBlbXB0eSBvciBpcyB1bnNldCBieSB0aGlzIGZ1bmN0aW9uLCBub24gemVybworICogb3RoZXJ3aXNlLgorICoKKyAqIE5FRURTV09SSzogVGhpcyB1c2VzIHRoZSBzYW1lIGhldXJpc3RpYyBhcyBibGFtZV9lbnRyeV9zY29yZSgpIGluIGJsYW1lLmMuCisgKiBUaGluayBvZiBhIHdheSB0byB1bmlmeSB0aGVtLgorICovCitzdGF0aWMgaW50IGFkanVzdF9sYXN0X2Jsb2NrKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGludCBuLCBpbnQgYmxvY2tfbGVuZ3RoKQoreworCWludCBpLCBhbG51bV9jb3VudCA9IDA7CisJaWYgKG8tPmNvbG9yX21vdmVkID09IENPTE9SX01PVkVEX1BMQUlOKQorCQlyZXR1cm4gYmxvY2tfbGVuZ3RoOworCWZvciAoaSA9IDE7IGkgPCBibG9ja19sZW5ndGggKyAxOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYyA9IG8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmW24gLSBpXS5saW5lOworCQlmb3IgKDsgKmM7IGMrKykgeworCQkJaWYgKCFpc2FsbnVtKCpjKSkKKwkJCQljb250aW51ZTsKKwkJCWFsbnVtX2NvdW50Kys7CisJCQlpZiAoYWxudW1fY291bnQgPj0gQ09MT1JfTU9WRURfTUlOX0FMTlVNX0NPVU5UKQorCQkJCXJldHVybiAxOworCQl9CisJfQorCWZvciAoaSA9IDE7IGkgPCBibG9ja19sZW5ndGggKyAxOyBpKyspCisJCW8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmW24gLSBpXS5mbGFncyAmPSB+RElGRl9TWU1CT0xfTU9WRURfTElORTsKKwlyZXR1cm4gMDsKK30KKworLyogRmluZCBibG9ja3Mgb2YgbW92ZWQgY29kZSwgZGVsZWdhdGUgYWN0dWFsIGNvbG9yaW5nIGRlY2lzaW9uIHRvIGhlbHBlciAqLworc3RhdGljIHZvaWQgbWFya19jb2xvcl9hc19tb3ZlZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCXN0cnVjdCBoYXNobWFwICphZGRfbGluZXMsCisJCQkJc3RydWN0IGhhc2htYXAgKmRlbF9saW5lcykKK3sKKwlzdHJ1Y3QgbW92ZWRfYmxvY2sgKnBtYiA9IE5VTEw7IC8qIHBvdGVudGlhbGx5IG1vdmVkIGJsb2NrcyAqLworCWludCBwbWJfbnIgPSAwLCBwbWJfYWxsb2MgPSAwOworCWludCBuLCBmbGlwcGVkX2Jsb2NrID0gMCwgYmxvY2tfbGVuZ3RoID0gMDsKKworCisJZm9yIChuID0gMDsgbiA8IG8tPmVtaXR0ZWRfc3ltYm9scy0+bnI7IG4rKykgeworCQlzdHJ1Y3QgaGFzaG1hcCAqaG0gPSBOVUxMOworCQlzdHJ1Y3QgbW92ZWRfZW50cnkgKmtleTsKKwkJc3RydWN0IG1vdmVkX2VudHJ5ICptYXRjaCA9IE5VTEw7CisJCXN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICpsID0gJm8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmW25dOworCQllbnVtIGRpZmZfc3ltYm9sIGxhc3Rfc3ltYm9sID0gMDsKKworCQlzd2l0Y2ggKGwtPnMpIHsKKwkJY2FzZSBESUZGX1NZTUJPTF9QTFVTOgorCQkJaG0gPSBkZWxfbGluZXM7CisJCQlrZXkgPSBwcmVwYXJlX2VudHJ5KG8sIG4pOworCQkJbWF0Y2ggPSBoYXNobWFwX2dldF9lbnRyeShobSwga2V5LCBlbnQsIE5VTEwpOworCQkJZnJlZShrZXkpOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TWU1CT0xfTUlOVVM6CisJCQlobSA9IGFkZF9saW5lczsKKwkJCWtleSA9IHByZXBhcmVfZW50cnkobywgbik7CisJCQltYXRjaCA9IGhhc2htYXBfZ2V0X2VudHJ5KGhtLCBrZXksIGVudCwgTlVMTCk7CisJCQlmcmVlKGtleSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZsaXBwZWRfYmxvY2sgPSAwOworCQl9CisKKwkJaWYgKCFtYXRjaCkgeworCQkJaW50IGk7CisKKwkJCWFkanVzdF9sYXN0X2Jsb2NrKG8sIG4sIGJsb2NrX2xlbmd0aCk7CisJCQlmb3IoaSA9IDA7IGkgPCBwbWJfbnI7IGkrKykKKwkJCQltb3ZlZF9ibG9ja19jbGVhcigmcG1iW2ldKTsKKwkJCXBtYl9uciA9IDA7CisJCQlibG9ja19sZW5ndGggPSAwOworCQkJZmxpcHBlZF9ibG9jayA9IDA7CisJCQlsYXN0X3N5bWJvbCA9IGwtPnM7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChvLT5jb2xvcl9tb3ZlZCA9PSBDT0xPUl9NT1ZFRF9QTEFJTikgeworCQkJbGFzdF9zeW1ib2wgPSBsLT5zOworCQkJbC0+ZmxhZ3MgfD0gRElGRl9TWU1CT0xfTU9WRURfTElORTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG8tPmNvbG9yX21vdmVkX3dzX2hhbmRsaW5nICYKKwkJICAgIENPTE9SX01PVkVEX1dTX0FMTE9XX0lOREVOVEFUSU9OX0NIQU5HRSkKKwkJCXBtYl9hZHZhbmNlX29yX251bGxfbXVsdGlfbWF0Y2gobywgbWF0Y2gsIGhtLCBwbWIsIHBtYl9uciwgbik7CisJCWVsc2UKKwkJCXBtYl9hZHZhbmNlX29yX251bGwobywgbWF0Y2gsIGhtLCBwbWIsIHBtYl9ucik7CisKKwkJcG1iX25yID0gc2hyaW5rX3BvdGVudGlhbF9tb3ZlZF9ibG9ja3MocG1iLCBwbWJfbnIpOworCisJCWlmIChwbWJfbnIgPT0gMCkgeworCQkJLyoKKwkJCSAqIFRoZSBjdXJyZW50IGxpbmUgaXMgdGhlIHN0YXJ0IG9mIGEgbmV3IGJsb2NrLgorCQkJICogU2V0dXAgdGhlIHNldCBvZiBwb3RlbnRpYWwgYmxvY2tzLgorCQkJICovCisJCQloYXNobWFwX2Zvcl9lYWNoX2VudHJ5X2Zyb20oaG0sIG1hdGNoLCBlbnQpIHsKKwkJCQlBTExPQ19HUk9XKHBtYiwgcG1iX25yICsgMSwgcG1iX2FsbG9jKTsKKwkJCQlpZiAoby0+Y29sb3JfbW92ZWRfd3NfaGFuZGxpbmcgJgorCQkJCSAgICBDT0xPUl9NT1ZFRF9XU19BTExPV19JTkRFTlRBVElPTl9DSEFOR0UpIHsKKwkJCQkJaWYgKGNvbXB1dGVfd3NfZGVsdGEobCwgbWF0Y2gtPmVzLAorCQkJCQkJCSAgICAgJnBtYltwbWJfbnJdLndzZCkpCisJCQkJCQlwbWJbcG1iX25yKytdLm1hdGNoID0gbWF0Y2g7CisJCQkJfSBlbHNlIHsKKwkJCQkJcG1iW3BtYl9ucl0ud3NkID0gMDsKKwkJCQkJcG1iW3BtYl9ucisrXS5tYXRjaCA9IG1hdGNoOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGFkanVzdF9sYXN0X2Jsb2NrKG8sIG4sIGJsb2NrX2xlbmd0aCkgJiYKKwkJCSAgICBwbWJfbnIgJiYgbGFzdF9zeW1ib2wgIT0gbC0+cykKKwkJCQlmbGlwcGVkX2Jsb2NrID0gKGZsaXBwZWRfYmxvY2sgKyAxKSAlIDI7CisJCQllbHNlCisJCQkJZmxpcHBlZF9ibG9jayA9IDA7CisKKwkJCWJsb2NrX2xlbmd0aCA9IDA7CisJCX0KKworCQlpZiAocG1iX25yKSB7CisJCQlibG9ja19sZW5ndGgrKzsKKwkJCWwtPmZsYWdzIHw9IERJRkZfU1lNQk9MX01PVkVEX0xJTkU7CisJCQlpZiAoZmxpcHBlZF9ibG9jayAmJiBvLT5jb2xvcl9tb3ZlZCAhPSBDT0xPUl9NT1ZFRF9CTE9DS1MpCisJCQkJbC0+ZmxhZ3MgfD0gRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQ7CisJCX0KKwkJbGFzdF9zeW1ib2wgPSBsLT5zOworCX0KKwlhZGp1c3RfbGFzdF9ibG9jayhvLCBuLCBibG9ja19sZW5ndGgpOworCisJZm9yKG4gPSAwOyBuIDwgcG1iX25yOyBuKyspCisJCW1vdmVkX2Jsb2NrX2NsZWFyKCZwbWJbbl0pOworCWZyZWUocG1iKTsKK30KKworI2RlZmluZSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1pFQlJBX01BU0sgXAorICAoRElGRl9TWU1CT0xfTU9WRURfTElORSB8IERJRkZfU1lNQk9MX01PVkVEX0xJTkVfQUxUKQorc3RhdGljIHZvaWQgZGltX21vdmVkX2xpbmVzKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJaW50IG47CisJZm9yIChuID0gMDsgbiA8IG8tPmVtaXR0ZWRfc3ltYm9scy0+bnI7IG4rKykgeworCQlzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbCAqcHJldiA9IChuICE9IDApID8KKwkJCQkmby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbiAtIDFdIDogTlVMTDsKKwkJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgKmwgPSAmby0+ZW1pdHRlZF9zeW1ib2xzLT5idWZbbl07CisJCXN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICpuZXh0ID0KKwkJCQkobiA8IG8tPmVtaXR0ZWRfc3ltYm9scy0+bnIgLSAxKSA/CisJCQkJJm8tPmVtaXR0ZWRfc3ltYm9scy0+YnVmW24gKyAxXSA6IE5VTEw7CisKKwkJLyogTm90IGEgcGx1cyBvciBtaW51cyBsaW5lPyAqLworCQlpZiAobC0+cyAhPSBESUZGX1NZTUJPTF9QTFVTICYmIGwtPnMgIT0gRElGRl9TWU1CT0xfTUlOVVMpCisJCQljb250aW51ZTsKKworCQkvKiBOb3QgYSBtb3ZlZCBsaW5lPyAqLworCQlpZiAoIShsLT5mbGFncyAmIERJRkZfU1lNQk9MX01PVkVEX0xJTkUpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgcHJldiBvciBuZXh0IGFyZSBub3QgYSBwbHVzIG9yIG1pbnVzIGxpbmUsCisJCSAqIHByZXRlbmQgdGhleSBkb24ndCBleGlzdAorCQkgKi8KKwkJaWYgKHByZXYgJiYgcHJldi0+cyAhPSBESUZGX1NZTUJPTF9QTFVTICYmCisJCQkgICAgcHJldi0+cyAhPSBESUZGX1NZTUJPTF9NSU5VUykKKwkJCXByZXYgPSBOVUxMOworCQlpZiAobmV4dCAmJiBuZXh0LT5zICE9IERJRkZfU1lNQk9MX1BMVVMgJiYKKwkJCSAgICBuZXh0LT5zICE9IERJRkZfU1lNQk9MX01JTlVTKQorCQkJbmV4dCA9IE5VTEw7CisKKwkJLyogSW5zaWRlIGEgYmxvY2s/ICovCisJCWlmICgocHJldiAmJgorCQkgICAgKHByZXYtPmZsYWdzICYgRElGRl9TWU1CT0xfTU9WRURfTElORV9aRUJSQV9NQVNLKSA9PQorCQkgICAgKGwtPmZsYWdzICYgRElGRl9TWU1CT0xfTU9WRURfTElORV9aRUJSQV9NQVNLKSkgJiYKKwkJICAgIChuZXh0ICYmCisJCSAgICAobmV4dC0+ZmxhZ3MgJiBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1pFQlJBX01BU0spID09CisJCSAgICAobC0+ZmxhZ3MgJiBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1pFQlJBX01BU0spKSkgeworCQkJbC0+ZmxhZ3MgfD0gRElGRl9TWU1CT0xfTU9WRURfTElORV9VTklOVEVSRVNUSU5HOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBDaGVjayBpZiB3ZSBhcmUgYXQgYW4gaW50ZXJlc3RpbmcgYm91bmQ6ICovCisJCWlmIChwcmV2ICYmIChwcmV2LT5mbGFncyAmIERJRkZfU1lNQk9MX01PVkVEX0xJTkUpICYmCisJCSAgICAocHJldi0+ZmxhZ3MgJiBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX0FMVCkgIT0KKwkJICAgICAgIChsLT5mbGFncyAmIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfQUxUKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobmV4dCAmJiAobmV4dC0+ZmxhZ3MgJiBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FKSAmJgorCQkgICAgKG5leHQtPmZsYWdzICYgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQpICE9CisJCSAgICAgICAobC0+ZmxhZ3MgJiBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX0FMVCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUaGUgYm91bmRhcnkgdG8gcHJldiBhbmQgbmV4dCBhcmUgbm90IGludGVyZXN0aW5nLAorCQkgKiBzbyB0aGlzIGxpbmUgaXMgbm90IGludGVyZXN0aW5nIGFzIGEgd2hvbGUKKwkJICovCisJCWwtPmZsYWdzIHw9IERJRkZfU1lNQk9MX01PVkVEX0xJTkVfVU5JTlRFUkVTVElORzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfbGluZV93c19tYXJrdXAoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCQljb25zdCBjaGFyICpzZXRfc2lnbiwgY29uc3QgY2hhciAqc2V0LAorCQkJCWNvbnN0IGNoYXIgKnJlc2V0LAorCQkJCWludCBzaWduX2luZGV4LCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLAorCQkJCXVuc2lnbmVkIHdzX3J1bGUsIGludCBibGFua19hdF9lb2YpCit7CisJY29uc3QgY2hhciAqd3MgPSBOVUxMOworCWludCBzaWduID0gby0+b3V0cHV0X2luZGljYXRvcnNbc2lnbl9pbmRleF07CisKKwlpZiAoby0+d3NfZXJyb3JfaGlnaGxpZ2h0ICYgd3NfcnVsZSkgeworCQl3cyA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1dISVRFU1BBQ0UpOworCQlpZiAoISp3cykKKwkJCXdzID0gTlVMTDsKKwl9CisKKwlpZiAoIXdzICYmICFzZXRfc2lnbikKKwkJZW1pdF9saW5lXzAobywgc2V0LCBOVUxMLCAwLCByZXNldCwgc2lnbiwgbGluZSwgbGVuKTsKKwllbHNlIGlmICghd3MpIHsKKwkJZW1pdF9saW5lXzAobywgc2V0X3NpZ24sIHNldCwgISFzZXRfc2lnbiwgcmVzZXQsIHNpZ24sIGxpbmUsIGxlbik7CisJfSBlbHNlIGlmIChibGFua19hdF9lb2YpCisJCS8qIEJsYW5rIGxpbmUgYXQgRU9GIC0gcGFpbnQgJysnIGFzIHdlbGwgKi8KKwkJZW1pdF9saW5lXzAobywgd3MsIE5VTEwsIDAsIHJlc2V0LCBzaWduLCBsaW5lLCBsZW4pOworCWVsc2UgeworCQkvKiBFbWl0IGp1c3QgdGhlIHByZWZpeCwgdGhlbiB0aGUgcmVzdC4gKi8KKwkJZW1pdF9saW5lXzAobywgc2V0X3NpZ24gPyBzZXRfc2lnbiA6IHNldCwgTlVMTCwgISFzZXRfc2lnbiwgcmVzZXQsCisJCQkgICAgc2lnbiwgIiIsIDApOworCQl3c19jaGVja19lbWl0KGxpbmUsIGxlbiwgd3NfcnVsZSwKKwkJCSAgICAgIG8tPmZpbGUsIHNldCwgcmVzZXQsIHdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfZGlmZl9zeW1ib2xfZnJvbV9zdHJ1Y3Qoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCQkJIHN0cnVjdCBlbWl0dGVkX2RpZmZfc3ltYm9sICplZHMpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKm5uZW9mID0gIiBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iOworCWNvbnN0IGNoYXIgKmNvbnRleHQsICpyZXNldCwgKnNldCwgKnNldF9zaWduLCAqbWV0YSwgKmZyYWdpbmZvOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWVudW0gZGlmZl9zeW1ib2wgcyA9IGVkcy0+czsKKwljb25zdCBjaGFyICpsaW5lID0gZWRzLT5saW5lOworCWludCBsZW4gPSBlZHMtPmxlbjsKKwl1bnNpZ25lZCBmbGFncyA9IGVkcy0+ZmxhZ3M7CisKKwlzd2l0Y2ggKHMpIHsKKwljYXNlIERJRkZfU1lNQk9MX05PX0xGX0VPRjoKKwkJY29udGV4dCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0NPTlRFWFQpOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJcHV0YygnXG4nLCBvLT5maWxlKTsKKwkJZW1pdF9saW5lXzAobywgY29udGV4dCwgTlVMTCwgMCwgcmVzZXQsICdcXCcsCisJCQkgICAgbm5lb2YsIHN0cmxlbihubmVvZikpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9IRUFERVI6CisJY2FzZSBESUZGX1NZTUJPTF9TVUJNT0RVTEVfRVJST1I6CisJY2FzZSBESUZGX1NZTUJPTF9TVUJNT0RVTEVfUElQRVRIUk9VR0g6CisJY2FzZSBESUZGX1NZTUJPTF9TVEFUU19TVU1NQVJZX0lOU0VSVFNfREVMRVRFUzoKKwljYXNlIERJRkZfU1lNQk9MX1NVTU1BUlk6CisJY2FzZSBESUZGX1NZTUJPTF9TVEFUU19MSU5FOgorCWNhc2UgRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfQk9EWToKKwljYXNlIERJRkZfU1lNQk9MX0NPTlRFWFRfRlJBR0lORk86CisJCWVtaXRfbGluZShvLCAiIiwgIiIsIGxpbmUsIGxlbik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfQ09OVEVYVF9JTkNPTVBMRVRFOgorCWNhc2UgRElGRl9TWU1CT0xfQ09OVEVYVF9NQVJLRVI6CisJCWNvbnRleHQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9DT05URVhUKTsKKwkJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJCWVtaXRfbGluZShvLCBjb250ZXh0LCByZXNldCwgbGluZSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9TRVBBUkFUT1I6CisJCWZwcmludGYoby0+ZmlsZSwgIiVzJWMiLAorCQkJZGlmZl9saW5lX3ByZWZpeChvKSwKKwkJCW8tPmxpbmVfdGVybWluYXRpb24pOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX0NPTlRFWFQ6CisJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0NPTlRFWFQpOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJc2V0X3NpZ24gPSBOVUxMOworCQlpZiAoby0+ZmxhZ3MuZHVhbF9jb2xvcl9kaWZmZWRfZGlmZnMpIHsKKwkJCWNoYXIgYyA9ICFsZW4gPyAwIDogbGluZVswXTsKKworCQkJaWYgKGMgPT0gJysnKQorCQkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfTkVXKTsKKwkJCWVsc2UgaWYgKGMgPT0gJ0AnKQorCQkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZSQUdJTkZPKTsKKwkJCWVsc2UgaWYgKGMgPT0gJy0nKQorCQkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfT0xEKTsKKwkJfQorCQllbWl0X2xpbmVfd3NfbWFya3VwKG8sIHNldF9zaWduLCBzZXQsIHJlc2V0LAorCQkJCSAgICBPVVRQVVRfSU5ESUNBVE9SX0NPTlRFWFQsIGxpbmUsIGxlbiwKKwkJCQkgICAgZmxhZ3MgJiAoRElGRl9TWU1CT0xfQ09OVEVOVF9XU19NQVNLKSwgMCk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfUExVUzoKKwkJc3dpdGNoIChmbGFncyAmIChESUZGX1NZTUJPTF9NT1ZFRF9MSU5FIHwKKwkJCQkgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQgfAorCQkJCSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1VOSU5URVJFU1RJTkcpKSB7CisJCWNhc2UgRElGRl9TWU1CT0xfTU9WRURfTElORSB8CisJCSAgICAgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQgfAorCQkgICAgIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfVU5JTlRFUkVTVElORzoKKwkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfTkVXX01PVkVEX0FMVF9ESU0pOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TWU1CT0xfTU9WRURfTElORSB8CisJCSAgICAgRElGRl9TWU1CT0xfTU9WRURfTElORV9BTFQ6CisJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FV19NT1ZFRF9BTFQpOworCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TWU1CT0xfTU9WRURfTElORSB8CisJCSAgICAgRElGRl9TWU1CT0xfTU9WRURfTElORV9VTklOVEVSRVNUSU5HOgorCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9ORVdfTU9WRURfRElNKTsKKwkJCWJyZWFrOworCQljYXNlIERJRkZfU1lNQk9MX01PVkVEX0xJTkU6CisJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FV19NT1ZFRCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfTkVXKTsKKwkJfQorCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJaWYgKCFvLT5mbGFncy5kdWFsX2NvbG9yX2RpZmZlZF9kaWZmcykKKwkJCXNldF9zaWduID0gTlVMTDsKKwkJZWxzZSB7CisJCQljaGFyIGMgPSAhbGVuID8gMCA6IGxpbmVbMF07CisKKwkJCXNldF9zaWduID0gc2V0OworCQkJaWYgKGMgPT0gJy0nKQorCQkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfT0xEX0JPTEQpOworCQkJZWxzZSBpZiAoYyA9PSAnQCcpCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRlJBR0lORk8pOworCQkJZWxzZSBpZiAoYyA9PSAnKycpCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9ORVdfQk9MRCk7CisJCQllbHNlCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfQ09OVEVYVF9CT0xEKTsKKwkJCWZsYWdzICY9IH5ESUZGX1NZTUJPTF9DT05URU5UX1dTX01BU0s7CisJCX0KKwkJZW1pdF9saW5lX3dzX21hcmt1cChvLCBzZXRfc2lnbiwgc2V0LCByZXNldCwKKwkJCQkgICAgT1VUUFVUX0lORElDQVRPUl9ORVcsIGxpbmUsIGxlbiwKKwkJCQkgICAgZmxhZ3MgJiBESUZGX1NZTUJPTF9DT05URU5UX1dTX01BU0ssCisJCQkJICAgIGZsYWdzICYgRElGRl9TWU1CT0xfQ09OVEVOVF9CTEFOS19MSU5FX0VPRik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfTUlOVVM6CisJCXN3aXRjaCAoZmxhZ3MgJiAoRElGRl9TWU1CT0xfTU9WRURfTElORSB8CisJCQkJIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfQUxUIHwKKwkJCQkgRElGRl9TWU1CT0xfTU9WRURfTElORV9VTklOVEVSRVNUSU5HKSkgeworCQljYXNlIERJRkZfU1lNQk9MX01PVkVEX0xJTkUgfAorCQkgICAgIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfQUxUIHwKKwkJICAgICBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FX1VOSU5URVJFU1RJTkc6CisJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX09MRF9NT1ZFRF9BTFRfRElNKTsKKwkJCWJyZWFrOworCQljYXNlIERJRkZfU1lNQk9MX01PVkVEX0xJTkUgfAorCQkgICAgIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfQUxUOgorCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTERfTU9WRURfQUxUKTsKKwkJCWJyZWFrOworCQljYXNlIERJRkZfU1lNQk9MX01PVkVEX0xJTkUgfAorCQkgICAgIERJRkZfU1lNQk9MX01PVkVEX0xJTkVfVU5JTlRFUkVTVElORzoKKwkJCXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0ZJTEVfT0xEX01PVkVEX0RJTSk7CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NZTUJPTF9NT1ZFRF9MSU5FOgorCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTERfTU9WRUQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX09MRCk7CisJCX0KKwkJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJCWlmICghby0+ZmxhZ3MuZHVhbF9jb2xvcl9kaWZmZWRfZGlmZnMpCisJCQlzZXRfc2lnbiA9IE5VTEw7CisJCWVsc2UgeworCQkJY2hhciBjID0gIWxlbiA/IDAgOiBsaW5lWzBdOworCisJCQlzZXRfc2lnbiA9IHNldDsKKwkJCWlmIChjID09ICcrJykKKwkJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FV19ESU0pOworCQkJZWxzZSBpZiAoYyA9PSAnQCcpCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRlJBR0lORk8pOworCQkJZWxzZSBpZiAoYyA9PSAnLScpCisJCQkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTERfRElNKTsKKwkJCWVsc2UKKwkJCQlzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9DT05URVhUX0RJTSk7CisJCX0KKwkJZW1pdF9saW5lX3dzX21hcmt1cChvLCBzZXRfc2lnbiwgc2V0LCByZXNldCwKKwkJCQkgICAgT1VUUFVUX0lORElDQVRPUl9PTEQsIGxpbmUsIGxlbiwKKwkJCQkgICAgZmxhZ3MgJiBESUZGX1NZTUJPTF9DT05URU5UX1dTX01BU0ssIDApOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX1dPUkRTX1BPUkNFTEFJTjoKKwkJY29udGV4dCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX0NPTlRFWFQpOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJZW1pdF9saW5lKG8sIGNvbnRleHQsIHJlc2V0LCBsaW5lLCBsZW4pOworCQlmcHV0cygiflxuIiwgby0+ZmlsZSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfV09SRFM6CisJCWNvbnRleHQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9DT05URVhUKTsKKwkJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJCS8qCisJCSAqIFNraXAgdGhlIHByZWZpeCBjaGFyYWN0ZXIsIGlmIGFueS4gIFdpdGgKKwkJICogZGlmZl9zdXBwcmVzc19ibGFua19lbXB0eSwgdGhlcmUgbWF5IGJlCisJCSAqIG5vbmUuCisJCSAqLworCQlpZiAobGluZVswXSAhPSAnXG4nKSB7CisJCQlsaW5lKys7CisJCQlsZW4tLTsKKwkJfQorCQllbWl0X2xpbmUobywgY29udGV4dCwgcmVzZXQsIGxpbmUsIGxlbik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfRklMRVBBSVJfUExVUzoKKwkJbWV0YSA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX01FVEFJTkZPKTsKKwkJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJCWZwcmludGYoby0+ZmlsZSwgIiVzJXMrKysgJXMlcyVzXG4iLCBkaWZmX2xpbmVfcHJlZml4KG8pLCBtZXRhLAorCQkJbGluZSwgcmVzZXQsCisJCQlzdHJjaHIobGluZSwgJyAnKSA/ICJcdCIgOiAiIik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfRklMRVBBSVJfTUlOVVM6CisJCW1ldGEgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9NRVRBSU5GTyk7CisJCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfUkVTRVQpOworCQlmcHJpbnRmKG8tPmZpbGUsICIlcyVzLS0tICVzJXMlc1xuIiwgZGlmZl9saW5lX3ByZWZpeChvKSwgbWV0YSwKKwkJCWxpbmUsIHJlc2V0LAorCQkJc3RyY2hyKGxpbmUsICcgJykgPyAiXHQiIDogIiIpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX0JJTkFSWV9GSUxFUzoKKwljYXNlIERJRkZfU1lNQk9MX0hFQURFUjoKKwkJZnByaW50ZihvLT5maWxlLCAiJXMiLCBsaW5lKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9CSU5BUllfRElGRl9IRUFERVI6CisJCWZwcmludGYoby0+ZmlsZSwgIiVzR0lUIGJpbmFyeSBwYXRjaFxuIiwgZGlmZl9saW5lX3ByZWZpeChvKSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfSEVBREVSX0RFTFRBOgorCQlmcHJpbnRmKG8tPmZpbGUsICIlc2RlbHRhICVzXG4iLCBkaWZmX2xpbmVfcHJlZml4KG8pLCBsaW5lKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9CSU5BUllfRElGRl9IRUFERVJfTElURVJBTDoKKwkJZnByaW50ZihvLT5maWxlLCAiJXNsaXRlcmFsICVzXG4iLCBkaWZmX2xpbmVfcHJlZml4KG8pLCBsaW5lKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9CSU5BUllfRElGRl9GT09URVI6CisJCWZwdXRzKGRpZmZfbGluZV9wcmVmaXgobyksIG8tPmZpbGUpOworCQlmcHV0YygnXG4nLCBvLT5maWxlKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9SRVdSSVRFX0RJRkY6CisJCWZyYWdpbmZvID0gZGlmZl9nZXRfY29sb3Ioby0+dXNlX2NvbG9yLCBESUZGX0ZSQUdJTkZPKTsKKwkJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJCWVtaXRfbGluZShvLCBmcmFnaW5mbywgcmVzZXQsIGxpbmUsIGxlbik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfU1VCTU9EVUxFX0FERDoKKwkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9ORVcpOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJZW1pdF9saW5lKG8sIHNldCwgcmVzZXQsIGxpbmUsIGxlbik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfU1VCTU9EVUxFX0RFTDoKKwkJc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTEQpOworCQlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdChvLCBESUZGX1JFU0VUKTsKKwkJZW1pdF9saW5lKG8sIHNldCwgcmVzZXQsIGxpbmUsIGxlbik7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfU1VCTU9EVUxFX1VOVFJBQ0tFRDoKKwkJZnByaW50ZihvLT5maWxlLCAiJXNTdWJtb2R1bGUgJXMgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnRcbiIsCisJCQlkaWZmX2xpbmVfcHJlZml4KG8pLCBsaW5lKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9TVUJNT0RVTEVfTU9ESUZJRUQ6CisJCWZwcmludGYoby0+ZmlsZSwgIiVzU3VibW9kdWxlICVzIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnRcbiIsCisJCQlkaWZmX2xpbmVfcHJlZml4KG8pLCBsaW5lKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9TVEFUU19TVU1NQVJZX05PX0ZJTEVTOgorCQllbWl0X2xpbmUobywgIiIsICIiLCAiIDAgZmlsZXMgY2hhbmdlZFxuIiwKKwkJCSAgc3RybGVuKCIgMCBmaWxlcyBjaGFuZ2VkXG4iKSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TWU1CT0xfU1RBVFNfU1VNTUFSWV9BQkJSRVY6CisJCWVtaXRfbGluZShvLCAiIiwgIiIsICIgLi4uXG4iLCBzdHJsZW4oIiAuLi5cbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NZTUJPTF9XT1JEX0RJRkY6CisJCWZwcmludGYoby0+ZmlsZSwgIiUuKnMiLCBsZW4sIGxpbmUpOworCQlicmVhazsKKwljYXNlIERJRkZfU1lNQk9MX1NUQVRfU0VQOgorCQlmcHV0cyhvLT5zdGF0X3NlcCwgby0+ZmlsZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygidW5rbm93biBkaWZmIHN5bWJvbCIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2RpZmZfc3ltYm9sKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGVudW0gZGlmZl9zeW1ib2wgcywKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2wgZSA9IHtsaW5lLCBsZW4sIGZsYWdzLCAwLCAwLCBzfTsKKworCWlmIChvLT5lbWl0dGVkX3N5bWJvbHMpCisJCWFwcGVuZF9lbWl0dGVkX2RpZmZfc3ltYm9sKG8sICZlKTsKKwllbHNlCisJCWVtaXRfZGlmZl9zeW1ib2xfZnJvbV9zdHJ1Y3QobywgJmUpOworfQorCit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfZGVsKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKmxpbmUpCit7CisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9TVUJNT0RVTEVfREVMLCBsaW5lLCBzdHJsZW4obGluZSksIDApOworfQorCit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfYWRkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKmxpbmUpCit7CisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9TVUJNT0RVTEVfQURELCBsaW5lLCBzdHJsZW4obGluZSksIDApOworfQorCit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfdW50cmFja2VkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9TVUJNT0RVTEVfVU5UUkFDS0VELAorCQkJIHBhdGgsIHN0cmxlbihwYXRoKSwgMCk7Cit9CisKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9tb2RpZmllZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpwYXRoKQoreworCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfU1VCTU9EVUxFX01PRElGSUVELAorCQkJIHBhdGgsIHN0cmxlbihwYXRoKSwgMCk7Cit9CisKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9oZWFkZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqaGVhZGVyKQoreworCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfU1VCTU9EVUxFX0hFQURFUiwKKwkJCSBoZWFkZXIsIHN0cmxlbihoZWFkZXIpLCAwKTsKK30KKwordm9pZCBkaWZmX2VtaXRfc3VibW9kdWxlX2Vycm9yKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKmVycikKK3sKKwllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9FUlJPUiwgZXJyLCBzdHJsZW4oZXJyKSwgMCk7Cit9CisKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9waXBldGhyb3VnaChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCSAgICAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX1NVQk1PRFVMRV9QSVBFVEhST1VHSCwgbGluZSwgbGVuLCAwKTsKK30KKworc3RhdGljIGludCBuZXdfYmxhbmtfbGluZV9hdF9lb2Yoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJaWYgKCEoKGVjYmRhdGEtPndzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpICYmCisJICAgICAgZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3ByZWltYWdlICYmCisJICAgICAgZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZSAmJgorCSAgICAgIGVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZSA8PSBlY2JkYXRhLT5sbm9faW5fcHJlaW1hZ2UgJiYKKwkgICAgICBlY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcG9zdGltYWdlIDw9IGVjYmRhdGEtPmxub19pbl9wb3N0aW1hZ2UpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gd3NfYmxhbmtfbGluZShsaW5lLCBsZW4sIGVjYmRhdGEtPndzX3J1bGUpOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2FkZF9saW5lKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLAorCQkJICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGZsYWdzID0gV1NFSF9ORVcgfCBlY2JkYXRhLT53c19ydWxlOworCWlmIChuZXdfYmxhbmtfbGluZV9hdF9lb2YoZWNiZGF0YSwgbGluZSwgbGVuKSkKKwkJZmxhZ3MgfD0gRElGRl9TWU1CT0xfQ09OVEVOVF9CTEFOS19MSU5FX0VPRjsKKworCWVtaXRfZGlmZl9zeW1ib2woZWNiZGF0YS0+b3B0LCBESUZGX1NZTUJPTF9QTFVTLCBsaW5lLCBsZW4sIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9kZWxfbGluZShzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwKKwkJCSAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBmbGFncyA9IFdTRUhfT0xEIHwgZWNiZGF0YS0+d3NfcnVsZTsKKwllbWl0X2RpZmZfc3ltYm9sKGVjYmRhdGEtPm9wdCwgRElGRl9TWU1CT0xfTUlOVVMsIGxpbmUsIGxlbiwgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2NvbnRleHRfbGluZShzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJdW5zaWduZWQgZmxhZ3MgPSBXU0VIX0NPTlRFWFQgfCBlY2JkYXRhLT53c19ydWxlOworCWVtaXRfZGlmZl9zeW1ib2woZWNiZGF0YS0+b3B0LCBESUZGX1NZTUJPTF9DT05URVhULCBsaW5lLCBsZW4sIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9odW5rX2hlYWRlcihzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwKKwkJCSAgICAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwljb25zdCBjaGFyICpjb250ZXh0ID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9DT05URVhUKTsKKwljb25zdCBjaGFyICpmcmFnID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9GUkFHSU5GTyk7CisJY29uc3QgY2hhciAqZnVuYyA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfRlVOQ0lORk8pOworCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9SRVNFVCk7CisJY29uc3QgY2hhciAqcmV2ZXJzZSA9IGVjYmRhdGEtPmNvbG9yX2RpZmYgPyBHSVRfQ09MT1JfUkVWRVJTRSA6ICIiOworCXN0YXRpYyBjb25zdCBjaGFyIGF0YXRbMl0gPSB7ICdAJywgJ0AnIH07CisJY29uc3QgY2hhciAqY3AsICplcDsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCWludCBvcmdfbGVuID0gbGVuOworCWludCBpID0gMTsKKworCS8qCisJICogQXMgYSBodW5rIGhlYWRlciBtdXN0IGJlZ2luIHdpdGggIkBAIC08b2xkPiwgKzxuZXc+IEBAIiwKKwkgKiBpdCBhbHdheXMgaXMgYXQgbGVhc3QgMTAgYnl0ZXMgbG9uZy4KKwkgKi8KKwlpZiAobGVuIDwgMTAgfHwKKwkgICAgbWVtY21wKGxpbmUsIGF0YXQsIDIpIHx8CisJICAgICEoZXAgPSBtZW1tZW0obGluZSArIDIsIGxlbiAtIDIsIGF0YXQsIDIpKSkgeworCQllbWl0X2RpZmZfc3ltYm9sKGVjYmRhdGEtPm9wdCwKKwkJCQkgRElGRl9TWU1CT0xfQ09OVEVYVF9NQVJLRVIsIGxpbmUsIGxlbiwgMCk7CisJCXJldHVybjsKKwl9CisJZXAgKz0gMjsgLyogc2tpcCBvdmVyIEBAICovCisKKwkvKiBUaGUgaHVuayBoZWFkZXIgaW4gZnJhZ2luZm8gY29sb3IgKi8KKwlpZiAoZWNiZGF0YS0+b3B0LT5mbGFncy5kdWFsX2NvbG9yX2RpZmZlZF9kaWZmcykKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCByZXZlcnNlKTsKKwlzdHJidWZfYWRkc3RyKCZtc2didWYsIGZyYWcpOworCWlmIChlY2JkYXRhLT5vcHQtPmZsYWdzLnN1cHByZXNzX2h1bmtfaGVhZGVyX2xpbmVfY291bnQpCisJCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgYXRhdCwgc2l6ZW9mKGF0YXQpKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgbGluZSwgZXAgLSBsaW5lKTsKKwlzdHJidWZfYWRkc3RyKCZtc2didWYsIHJlc2V0KTsKKworCS8qCisJICogdHJhaWxpbmcgIlxyXG4iCisJICovCisJZm9yICggOyBpIDwgMzsgaSsrKQorCQlpZiAobGluZVtsZW4gLSBpXSA9PSAnXHInIHx8IGxpbmVbbGVuIC0gaV0gPT0gJ1xuJykKKwkJCWxlbi0tOworCisJLyogYmxhbmsgYmVmb3JlIHRoZSBmdW5jIGhlYWRlciAqLworCWZvciAoY3AgPSBlcDsgZXAgLSBsaW5lIDwgbGVuOyBlcCsrKQorCQlpZiAoKmVwICE9ICcgJyAmJiAqZXAgIT0gJ1x0JykKKwkJCWJyZWFrOworCWlmIChlcCAhPSBjcCkgeworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIGNvbnRleHQpOworCQlzdHJidWZfYWRkKCZtc2didWYsIGNwLCBlcCAtIGNwKTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCByZXNldCk7CisJfQorCisJaWYgKGVwIDwgbGluZSArIGxlbikgeworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIGZ1bmMpOworCQlzdHJidWZfYWRkKCZtc2didWYsIGVwLCBsaW5lICsgbGVuIC0gZXApOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHJlc2V0KTsKKwl9CisKKwlzdHJidWZfYWRkKCZtc2didWYsIGxpbmUgKyBsZW4sIG9yZ19sZW4gLSBsZW4pOworCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKCZtc2didWYpOworCWVtaXRfZGlmZl9zeW1ib2woZWNiZGF0YS0+b3B0LAorCQkJIERJRkZfU1lNQk9MX0NPTlRFWFRfRlJBR0lORk8sIG1zZ2J1Zi5idWYsIG1zZ2J1Zi5sZW4sIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfdGVtcGZpbGUgKmNsYWltX2RpZmZfdGVtcGZpbGUodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaWZmX3RlbXApOyBpKyspCisJCWlmICghZGlmZl90ZW1wW2ldLm5hbWUpCisJCQlyZXR1cm4gZGlmZl90ZW1wICsgaTsKKwlCVUcoImRpZmYgaXMgZmFpbGluZyB0byBjbGVhbiB1cCBpdHMgdGVtcGZpbGVzIik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wZmlsZSh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpZmZfdGVtcCk7IGkrKykgeworCQlpZiAoaXNfdGVtcGZpbGVfYWN0aXZlKGRpZmZfdGVtcFtpXS50ZW1wZmlsZSkpCisJCQlkZWxldGVfdGVtcGZpbGUoJmRpZmZfdGVtcFtpXS50ZW1wZmlsZSk7CisJCWRpZmZfdGVtcFtpXS5uYW1lID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9saW5lX2NvdW50KHN0cnVjdCBzdHJidWYgKm91dCwgaW50IGNvdW50KQoreworCXN3aXRjaCAoY291bnQpIHsKKwljYXNlIDA6CisJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiMCwwIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJc3RyYnVmX2FkZHN0cihvdXQsICIxIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0cmJ1Zl9hZGRmKG91dCwgIjEsJWQiLCBjb3VudCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZW1pdF9yZXdyaXRlX2xpbmVzKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2IsCisJCQkgICAgICAgaW50IHByZWZpeCwgY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisJY29uc3QgY2hhciAqZW5kcCA9IE5VTEw7CisKKwl3aGlsZSAoMCA8IHNpemUpIHsKKwkJaW50IGxlbjsKKworCQllbmRwID0gbWVtY2hyKGRhdGEsICdcbicsIHNpemUpOworCQlsZW4gPSBlbmRwID8gKGVuZHAgLSBkYXRhICsgMSkgOiBzaXplOworCQlpZiAocHJlZml4ICE9ICcrJykgeworCQkJZWNiLT5sbm9faW5fcHJlaW1hZ2UrKzsKKwkJCWVtaXRfZGVsX2xpbmUoZWNiLCBkYXRhLCBsZW4pOworCQl9IGVsc2UgeworCQkJZWNiLT5sbm9faW5fcG9zdGltYWdlKys7CisJCQllbWl0X2FkZF9saW5lKGVjYiwgZGF0YSwgbGVuKTsKKwkJfQorCQlzaXplIC09IGxlbjsKKwkJZGF0YSArPSBsZW47CisJfQorCWlmICghZW5kcCkKKwkJZW1pdF9kaWZmX3N5bWJvbChlY2ItPm9wdCwgRElGRl9TWU1CT0xfTk9fTEZfRU9GLCBOVUxMLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9yZXdyaXRlX2RpZmYoY29uc3QgY2hhciAqbmFtZV9hLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZV9iLAorCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28sCisJCQkgICAgICBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl9vbmUsCisJCQkgICAgICBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl90d28sCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWludCBsY19hLCBsY19iOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGFfbmFtZSA9IFNUUkJVRl9JTklULCBiX25hbWUgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphX3ByZWZpeCwgKmJfcHJlZml4OworCWNoYXIgKmRhdGFfb25lLCAqZGF0YV90d287CisJc2l6ZV90IHNpemVfb25lLCBzaXplX3R3bzsKKwlzdHJ1Y3QgZW1pdF9jYWxsYmFjayBlY2JkYXRhOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZGlmZl9tbmVtb25pY19wcmVmaXggJiYgby0+ZmxhZ3MucmV2ZXJzZV9kaWZmKSB7CisJCWFfcHJlZml4ID0gby0+Yl9wcmVmaXg7CisJCWJfcHJlZml4ID0gby0+YV9wcmVmaXg7CisJfSBlbHNlIHsKKwkJYV9wcmVmaXggPSBvLT5hX3ByZWZpeDsKKwkJYl9wcmVmaXggPSBvLT5iX3ByZWZpeDsKKwl9CisKKwluYW1lX2EgKz0gKCpuYW1lX2EgPT0gJy8nKTsKKwluYW1lX2IgKz0gKCpuYW1lX2IgPT0gJy8nKTsKKworCXN0cmJ1Zl9yZXNldCgmYV9uYW1lKTsKKwlzdHJidWZfcmVzZXQoJmJfbmFtZSk7CisJcXVvdGVfdHdvX2Nfc3R5bGUoJmFfbmFtZSwgYV9wcmVmaXgsIG5hbWVfYSwgMCk7CisJcXVvdGVfdHdvX2Nfc3R5bGUoJmJfbmFtZSwgYl9wcmVmaXgsIG5hbWVfYiwgMCk7CisKKwlzaXplX29uZSA9IGZpbGxfdGV4dGNvbnYoby0+cmVwbywgdGV4dGNvbnZfb25lLCBvbmUsICZkYXRhX29uZSk7CisJc2l6ZV90d28gPSBmaWxsX3RleHRjb252KG8tPnJlcG8sIHRleHRjb252X3R3bywgdHdvLCAmZGF0YV90d28pOworCisJbWVtc2V0KCZlY2JkYXRhLCAwLCBzaXplb2YoZWNiZGF0YSkpOworCWVjYmRhdGEuY29sb3JfZGlmZiA9IHdhbnRfY29sb3Ioby0+dXNlX2NvbG9yKTsKKwllY2JkYXRhLndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUoby0+cmVwby0+aW5kZXgsIG5hbWVfYik7CisJZWNiZGF0YS5vcHQgPSBvOworCWlmIChlY2JkYXRhLndzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpIHsKKwkJbW1maWxlX3QgbWYxLCBtZjI7CisJCW1mMS5wdHIgPSAoY2hhciAqKWRhdGFfb25lOworCQltZjIucHRyID0gKGNoYXIgKilkYXRhX3R3bzsKKwkJbWYxLnNpemUgPSBzaXplX29uZTsKKwkJbWYyLnNpemUgPSBzaXplX3R3bzsKKwkJY2hlY2tfYmxhbmtfYXRfZW9mKCZtZjEsICZtZjIsICZlY2JkYXRhKTsKKwl9CisJZWNiZGF0YS5sbm9faW5fcHJlaW1hZ2UgPSAxOworCWVjYmRhdGEubG5vX2luX3Bvc3RpbWFnZSA9IDE7CisKKwlsY19hID0gY291bnRfbGluZXMoZGF0YV9vbmUsIHNpemVfb25lKTsKKwlsY19iID0gY291bnRfbGluZXMoZGF0YV90d28sIHNpemVfdHdvKTsKKworCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfRklMRVBBSVJfTUlOVVMsCisJCQkgYV9uYW1lLmJ1ZiwgYV9uYW1lLmxlbiwgMCk7CisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9GSUxFUEFJUl9QTFVTLAorCQkJIGJfbmFtZS5idWYsIGJfbmFtZS5sZW4sIDApOworCisJc3RyYnVmX2FkZHN0cigmb3V0LCAiQEAgLSIpOworCWlmICghby0+aXJyZXZlcnNpYmxlX2RlbGV0ZSkKKwkJYWRkX2xpbmVfY291bnQoJm91dCwgbGNfYSk7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKCZvdXQsICI/LD8iKTsKKwlzdHJidWZfYWRkc3RyKCZvdXQsICIgKyIpOworCWFkZF9saW5lX2NvdW50KCZvdXQsIGxjX2IpOworCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIiBAQFxuIik7CisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9SRVdSSVRFX0RJRkYsIG91dC5idWYsIG91dC5sZW4sIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCisJaWYgKGxjX2EgJiYgIW8tPmlycmV2ZXJzaWJsZV9kZWxldGUpCisJCWVtaXRfcmV3cml0ZV9saW5lcygmZWNiZGF0YSwgJy0nLCBkYXRhX29uZSwgc2l6ZV9vbmUpOworCWlmIChsY19iKQorCQllbWl0X3Jld3JpdGVfbGluZXMoJmVjYmRhdGEsICcrJywgZGF0YV90d28sIHNpemVfdHdvKTsKKwlpZiAodGV4dGNvbnZfb25lKQorCQlmcmVlKChjaGFyICopZGF0YV9vbmUpOworCWlmICh0ZXh0Y29udl90d28pCisJCWZyZWUoKGNoYXIgKilkYXRhX3R3byk7Cit9CisKK3N0cnVjdCBkaWZmX3dvcmRzX2J1ZmZlciB7CisJbW1maWxlX3QgdGV4dDsKKwl1bnNpZ25lZCBsb25nIGFsbG9jOworCXN0cnVjdCBkaWZmX3dvcmRzX29yaWcgeworCQljb25zdCBjaGFyICpiZWdpbiwgKmVuZDsKKwl9ICpvcmlnOworCWludCBvcmlnX25yLCBvcmlnX2FsbG9jOworfTsKKworc3RhdGljIHZvaWQgZGlmZl93b3Jkc19hcHBlbmQoY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyBsZW4sCisJCXN0cnVjdCBkaWZmX3dvcmRzX2J1ZmZlciAqYnVmZmVyKQoreworCUFMTE9DX0dST1coYnVmZmVyLT50ZXh0LnB0ciwgYnVmZmVyLT50ZXh0LnNpemUgKyBsZW4sIGJ1ZmZlci0+YWxsb2MpOworCWxpbmUrKzsKKwlsZW4tLTsKKwltZW1jcHkoYnVmZmVyLT50ZXh0LnB0ciArIGJ1ZmZlci0+dGV4dC5zaXplLCBsaW5lLCBsZW4pOworCWJ1ZmZlci0+dGV4dC5zaXplICs9IGxlbjsKKwlidWZmZXItPnRleHQucHRyW2J1ZmZlci0+dGV4dC5zaXplXSA9ICdcMCc7Cit9CisKK3N0cnVjdCBkaWZmX3dvcmRzX3N0eWxlX2VsZW0geworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwljb25zdCBjaGFyICpzdWZmaXg7CisJY29uc3QgY2hhciAqY29sb3I7IC8qIE5VTEw7IGZpbGxlZCBpbiBieSB0aGUgc2V0dXAgY29kZSBpZgorCQkJICAgICogY29sb3IgaXMgZW5hYmxlZCAqLworfTsKKworc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgeworCWVudW0gZGlmZl93b3Jkc190eXBlIHR5cGU7CisJc3RydWN0IGRpZmZfd29yZHNfc3R5bGVfZWxlbSBuZXdfd29yZCwgb2xkX3dvcmQsIGN0eDsKKwljb25zdCBjaGFyICpuZXdsaW5lOworfTsKKworc3RhdGljIHN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlIGRpZmZfd29yZHNfc3R5bGVzW10gPSB7CisJeyBESUZGX1dPUkRTX1BPUkNFTEFJTiwgeyIrIiwgIlxuIn0sIHsiLSIsICJcbiJ9LCB7IiAiLCAiXG4ifSwgIn5cbiIgfSwKKwl7IERJRkZfV09SRFNfUExBSU4sIHsieysiLCAiK30ifSwgeyJbLSIsICItXSJ9LCB7IiIsICIifSwgIlxuIiB9LAorCXsgRElGRl9XT1JEU19DT0xPUiwgeyIiLCAiIn0sIHsiIiwgIiJ9LCB7IiIsICIifSwgIlxuIiB9Cit9OworCitzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhIHsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgbWludXMsIHBsdXM7CisJY29uc3QgY2hhciAqY3VycmVudF9wbHVzOworCWludCBsYXN0X21pbnVzOworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdDsKKwlyZWdleF90ICp3b3JkX3JlZ2V4OworCWVudW0gZGlmZl93b3Jkc190eXBlIHR5cGU7CisJc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgKnN0eWxlOworfTsKKworc3RhdGljIGludCBmbl9vdXRfZGlmZl93b3Jkc193cml0ZV9oZWxwZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCQkJICBzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZV9lbGVtICpzdF9lbCwKKwkJCQkJICBjb25zdCBjaGFyICpuZXdsaW5lLAorCQkJCQkgIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqYnVmKQoreworCWludCBwcmludCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKGNvdW50KSB7CisJCWNoYXIgKnAgPSBtZW1jaHIoYnVmLCAnXG4nLCBjb3VudCk7CisJCWlmIChwcmludCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBkaWZmX2xpbmVfcHJlZml4KG8pKTsKKworCQlpZiAocCAhPSBidWYpIHsKKwkJCWNvbnN0IGNoYXIgKnJlc2V0ID0gc3RfZWwtPmNvbG9yICYmICpzdF9lbC0+Y29sb3IgPworCQkJCQkgICAgR0lUX0NPTE9SX1JFU0VUIDogTlVMTDsKKwkJCWlmIChzdF9lbC0+Y29sb3IgJiYgKnN0X2VsLT5jb2xvcikKKwkJCQlzdHJidWZfYWRkc3RyKCZzYiwgc3RfZWwtPmNvbG9yKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBzdF9lbC0+cHJlZml4KTsKKwkJCXN0cmJ1Zl9hZGQoJnNiLCBidWYsIHAgPyBwIC0gYnVmIDogY291bnQpOworCQkJc3RyYnVmX2FkZHN0cigmc2IsIHN0X2VsLT5zdWZmaXgpOworCQkJaWYgKHJlc2V0KQorCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCByZXNldCk7CisJCX0KKwkJaWYgKCFwKQorCQkJZ290byBvdXQ7CisKKwkJc3RyYnVmX2FkZHN0cigmc2IsIG5ld2xpbmUpOworCQljb3VudCAtPSBwICsgMSAtIGJ1ZjsKKwkJYnVmID0gcCArIDE7CisJCXByaW50ID0gMTsKKwkJaWYgKGNvdW50KSB7CisJCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX1dPUkRfRElGRiwKKwkJCQkJIHNiLmJ1Ziwgc2IubGVuLCAwKTsKKwkJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQl9CisJfQorCitvdXQ6CisJaWYgKHNiLmxlbikKKwkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9XT1JEX0RJRkYsCisJCQkJIHNiLmJ1Ziwgc2IubGVuLCAwKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCisvKgorICogJy0tY29sb3Itd29yZHMnIGFsZ29yaXRobSBjYW4gYmUgZGVzY3JpYmVkIGFzOgorICoKKyAqICAgMS4gY29sbGVjdCB0aGUgbWludXMvcGx1cyBsaW5lcyBvZiBhIGRpZmYgaHVuaywgZGl2aWRlZCBpbnRvCisgKiAgICAgIG1pbnVzLWxpbmVzIGFuZCBwbHVzLWxpbmVzOworICoKKyAqICAgMi4gYnJlYWsgYm90aCBtaW51cy1saW5lcyBhbmQgcGx1cy1saW5lcyBpbnRvIHdvcmRzIGFuZAorICogICAgICBwbGFjZSB0aGVtIGludG8gdHdvIG1tZmlsZV90IHdpdGggb25lIHdvcmQgZm9yIGVhY2ggbGluZTsKKyAqCisgKiAgIDMuIHVzZSB4ZGlmZiB0byBydW4gZGlmZiBvbiB0aGUgdHdvIG1tZmlsZV90IHRvIGdldCB0aGUgd29yZHMgbGV2ZWwgZGlmZjsKKyAqCisgKiBBbmQgZm9yIHRoZSBjb21tb24gcGFydHMgb2YgdGhlIGJvdGggZmlsZSwgd2Ugb3V0cHV0IHRoZSBwbHVzIHNpZGUgdGV4dC4KKyAqIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyBpcyB1c2VkIHRvIHRyYWNlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBwbHVzIGZpbGUKKyAqIHdoaWNoIHByaW50ZWQuIGRpZmZfd29yZHMtPmxhc3RfbWludXMgaXMgdXNlZCB0byB0cmFjZSB0aGUgbGFzdCBtaW51cyB3b3JkCisgKiBwcmludGVkLgorICoKKyAqIEZvciAnLS1ncmFwaCcgdG8gd29yayB3aXRoICctLWNvbG9yLXdvcmRzJywgd2UgbmVlZCB0byBvdXRwdXQgdGhlIGdyYXBoIHByZWZpeAorICogb24gZWFjaCBsaW5lIG9mIGNvbG9yIHdvcmRzIG91dHB1dC4gR2VuZXJhbGx5LCB0aGVyZSBhcmUgdHdvIGNvbmRpdGlvbnMgb24KKyAqIHdoaWNoIHdlIHNob3VsZCBvdXRwdXQgdGhlIHByZWZpeC4KKyAqCisgKiAgIDEuIGRpZmZfd29yZHMtPmxhc3RfbWludXMgPT0gMCAmJgorICogICAgICBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPT0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cgorICoKKyAqICAgICAgdGhhdCBpczogdGhlIHBsdXMgdGV4dCBtdXN0IHN0YXJ0IGFzIGEgbmV3IGxpbmUsIGFuZCBpZiB0aGVyZSBpcyBubyBtaW51cworICogICAgICB3b3JkIHByaW50ZWQsIGEgZ3JhcGggcHJlZml4IG11c3QgYmUgcHJpbnRlZC4KKyAqCisgKiAgIDIuIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyA+IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgJiYKKyAqICAgICAgKihkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgLSAxKSA9PSAnXG4nCisgKgorICogICAgICB0aGF0IGlzOiBhIGdyYXBoIHByZWZpeCBtdXN0IGJlIHByaW50ZWQgZm9sbG93aW5nIGEgJ1xuJworICovCitzdGF0aWMgaW50IGNvbG9yX3dvcmRzX291dHB1dF9ncmFwaF9wcmVmaXgoc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkcykKK3sKKwlpZiAoKGRpZmZfd29yZHMtPmxhc3RfbWludXMgPT0gMCAmJgorCQlkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPT0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cikgfHwKKwkJKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyA+IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgJiYKKwkJKihkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgLSAxKSA9PSAnXG4nKSkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZuX291dF9kaWZmX3dvcmRzX2F1eCh2b2lkICpwcml2LAorCQkJCSAgbG9uZyBtaW51c19maXJzdCwgbG9uZyBtaW51c19sZW4sCisJCQkJICBsb25nIHBsdXNfZmlyc3QsIGxvbmcgcGx1c19sZW4sCisJCQkJICBjb25zdCBjaGFyICpmdW5jLCBsb25nIGZ1bmNsZW4pCit7CisJc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkcyA9IHByaXY7CisJc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgKnN0eWxlID0gZGlmZl93b3Jkcy0+c3R5bGU7CisJY29uc3QgY2hhciAqbWludXNfYmVnaW4sICptaW51c19lbmQsICpwbHVzX2JlZ2luLCAqcGx1c19lbmQ7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gZGlmZl93b3Jkcy0+b3B0OworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4OworCisJYXNzZXJ0KG9wdCk7CisJbGluZV9wcmVmaXggPSBkaWZmX2xpbmVfcHJlZml4KG9wdCk7CisKKwkvKiBQT1NJWCByZXF1aXJlcyB0aGF0IGZpcnN0IGJlIGRlY3JlbWVudGVkIGJ5IG9uZSBpZiBsZW4gPT0gMC4uLiAqLworCWlmIChtaW51c19sZW4pIHsKKwkJbWludXNfYmVnaW4gPSBkaWZmX3dvcmRzLT5taW51cy5vcmlnW21pbnVzX2ZpcnN0XS5iZWdpbjsKKwkJbWludXNfZW5kID0KKwkJCWRpZmZfd29yZHMtPm1pbnVzLm9yaWdbbWludXNfZmlyc3QgKyBtaW51c19sZW4gLSAxXS5lbmQ7CisJfSBlbHNlCisJCW1pbnVzX2JlZ2luID0gbWludXNfZW5kID0KKwkJCWRpZmZfd29yZHMtPm1pbnVzLm9yaWdbbWludXNfZmlyc3RdLmVuZDsKKworCWlmIChwbHVzX2xlbikgeworCQlwbHVzX2JlZ2luID0gZGlmZl93b3Jkcy0+cGx1cy5vcmlnW3BsdXNfZmlyc3RdLmJlZ2luOworCQlwbHVzX2VuZCA9IGRpZmZfd29yZHMtPnBsdXMub3JpZ1twbHVzX2ZpcnN0ICsgcGx1c19sZW4gLSAxXS5lbmQ7CisJfSBlbHNlCisJCXBsdXNfYmVnaW4gPSBwbHVzX2VuZCA9IGRpZmZfd29yZHMtPnBsdXMub3JpZ1twbHVzX2ZpcnN0XS5lbmQ7CisKKwlpZiAoY29sb3Jfd29yZHNfb3V0cHV0X2dyYXBoX3ByZWZpeChkaWZmX3dvcmRzKSkgeworCQlmcHV0cyhsaW5lX3ByZWZpeCwgZGlmZl93b3Jkcy0+b3B0LT5maWxlKTsKKwl9CisJaWYgKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyAhPSBwbHVzX2JlZ2luKSB7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQsCisJCQkJJnN0eWxlLT5jdHgsIHN0eWxlLT5uZXdsaW5lLAorCQkJCXBsdXNfYmVnaW4gLSBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMsCisJCQkJZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzKTsKKwl9CisJaWYgKG1pbnVzX2JlZ2luICE9IG1pbnVzX2VuZCkgeworCQlmbl9vdXRfZGlmZl93b3Jkc193cml0ZV9oZWxwZXIoZGlmZl93b3Jkcy0+b3B0LAorCQkJCSZzdHlsZS0+b2xkX3dvcmQsIHN0eWxlLT5uZXdsaW5lLAorCQkJCW1pbnVzX2VuZCAtIG1pbnVzX2JlZ2luLCBtaW51c19iZWdpbik7CisJfQorCWlmIChwbHVzX2JlZ2luICE9IHBsdXNfZW5kKSB7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQsCisJCQkJJnN0eWxlLT5uZXdfd29yZCwgc3R5bGUtPm5ld2xpbmUsCisJCQkJcGx1c19lbmQgLSBwbHVzX2JlZ2luLCBwbHVzX2JlZ2luKTsKKwl9CisKKwlkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPSBwbHVzX2VuZDsKKwlkaWZmX3dvcmRzLT5sYXN0X21pbnVzID0gbWludXNfZmlyc3Q7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc3RhcnRzIGxvb2tpbmcgYXQgKmJlZ2luLCBhbmQgcmV0dXJucyAwIGlmZiBhIHdvcmQgd2FzIGZvdW5kLiAqLworc3RhdGljIGludCBmaW5kX3dvcmRfYm91bmRhcmllcyhtbWZpbGVfdCAqYnVmZmVyLCByZWdleF90ICp3b3JkX3JlZ2V4LAorCQlpbnQgKmJlZ2luLCBpbnQgKmVuZCkKK3sKKwlpZiAod29yZF9yZWdleCAmJiAqYmVnaW4gPCBidWZmZXItPnNpemUpIHsKKwkJcmVnbWF0Y2hfdCBtYXRjaFsxXTsKKwkJaWYgKCFyZWdleGVjX2J1Zih3b3JkX3JlZ2V4LCBidWZmZXItPnB0ciArICpiZWdpbiwKKwkJCQkgYnVmZmVyLT5zaXplIC0gKmJlZ2luLCAxLCBtYXRjaCwgMCkpIHsKKwkJCWNoYXIgKnAgPSBtZW1jaHIoYnVmZmVyLT5wdHIgKyAqYmVnaW4gKyBtYXRjaFswXS5ybV9zbywKKwkJCQkJJ1xuJywgbWF0Y2hbMF0ucm1fZW8gLSBtYXRjaFswXS5ybV9zbyk7CisJCQkqZW5kID0gcCA/IHAgLSBidWZmZXItPnB0ciA6IG1hdGNoWzBdLnJtX2VvICsgKmJlZ2luOworCQkJKmJlZ2luICs9IG1hdGNoWzBdLnJtX3NvOworCQkJcmV0dXJuICpiZWdpbiA+PSAqZW5kOworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBmaW5kIHRoZSBuZXh0IHdvcmQgKi8KKwl3aGlsZSAoKmJlZ2luIDwgYnVmZmVyLT5zaXplICYmIGlzc3BhY2UoYnVmZmVyLT5wdHJbKmJlZ2luXSkpCisJCSgqYmVnaW4pKys7CisJaWYgKCpiZWdpbiA+PSBidWZmZXItPnNpemUpCisJCXJldHVybiAtMTsKKworCS8qIGZpbmQgdGhlIGVuZCBvZiB0aGUgd29yZCAqLworCSplbmQgPSAqYmVnaW4gKyAxOworCXdoaWxlICgqZW5kIDwgYnVmZmVyLT5zaXplICYmICFpc3NwYWNlKGJ1ZmZlci0+cHRyWyplbmRdKSkKKwkJKCplbmQpKys7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSB3b3JkcyBpbiBidWZmZXItPnRleHQsIHN0b3JlcyB0aGUgbGlzdCB3aXRoCisgKiBuZXdsaW5lIHNlcGFyYXRvciBpbnRvIG91dCwgYW5kIHNhdmVzIHRoZSBvZmZzZXRzIG9mIHRoZSBvcmlnaW5hbCB3b3JkcworICogaW4gYnVmZmVyLT5vcmlnLgorICovCitzdGF0aWMgdm9pZCBkaWZmX3dvcmRzX2ZpbGwoc3RydWN0IGRpZmZfd29yZHNfYnVmZmVyICpidWZmZXIsIG1tZmlsZV90ICpvdXQsCisJCXJlZ2V4X3QgKndvcmRfcmVnZXgpCit7CisJaW50IGksIGo7CisJbG9uZyBhbGxvYyA9IDA7CisKKwlvdXQtPnNpemUgPSAwOworCW91dC0+cHRyID0gTlVMTDsKKworCS8qIGZha2UgYW4gZW1wdHkgIjB0aCIgd29yZCAqLworCUFMTE9DX0dST1coYnVmZmVyLT5vcmlnLCAxLCBidWZmZXItPm9yaWdfYWxsb2MpOworCWJ1ZmZlci0+b3JpZ1swXS5iZWdpbiA9IGJ1ZmZlci0+b3JpZ1swXS5lbmQgPSBidWZmZXItPnRleHQucHRyOworCWJ1ZmZlci0+b3JpZ19uciA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyLT50ZXh0LnNpemU7IGkrKykgeworCQlpZiAoZmluZF93b3JkX2JvdW5kYXJpZXMoJmJ1ZmZlci0+dGV4dCwgd29yZF9yZWdleCwgJmksICZqKSkKKwkJCXJldHVybjsKKworCQkvKiBzdG9yZSBvcmlnaW5hbCBib3VuZGFyaWVzICovCisJCUFMTE9DX0dST1coYnVmZmVyLT5vcmlnLCBidWZmZXItPm9yaWdfbnIgKyAxLAorCQkJCWJ1ZmZlci0+b3JpZ19hbGxvYyk7CisJCWJ1ZmZlci0+b3JpZ1tidWZmZXItPm9yaWdfbnJdLmJlZ2luID0gYnVmZmVyLT50ZXh0LnB0ciArIGk7CisJCWJ1ZmZlci0+b3JpZ1tidWZmZXItPm9yaWdfbnJdLmVuZCA9IGJ1ZmZlci0+dGV4dC5wdHIgKyBqOworCQlidWZmZXItPm9yaWdfbnIrKzsKKworCQkvKiBzdG9yZSBvbmUgd29yZCAqLworCQlBTExPQ19HUk9XKG91dC0+cHRyLCBvdXQtPnNpemUgKyBqIC0gaSArIDEsIGFsbG9jKTsKKwkJbWVtY3B5KG91dC0+cHRyICsgb3V0LT5zaXplLCBidWZmZXItPnRleHQucHRyICsgaSwgaiAtIGkpOworCQlvdXQtPnB0cltvdXQtPnNpemUgKyBqIC0gaV0gPSAnXG4nOworCQlvdXQtPnNpemUgKz0gaiAtIGkgKyAxOworCisJCWkgPSBqIC0gMTsKKwl9Cit9CisKKy8qIHRoaXMgZXhlY3V0ZXMgdGhlIHdvcmQgZGlmZiBvbiB0aGUgYWNjdW11bGF0ZWQgYnVmZmVycyAqLworc3RhdGljIHZvaWQgZGlmZl93b3Jkc19zaG93KHN0cnVjdCBkaWZmX3dvcmRzX2RhdGEgKmRpZmZfd29yZHMpCit7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJbW1maWxlX3QgbWludXMsIHBsdXM7CisJc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgKnN0eWxlID0gZGlmZl93b3Jkcy0+c3R5bGU7CisKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSBkaWZmX3dvcmRzLT5vcHQ7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXg7CisKKwlhc3NlcnQob3B0KTsKKwlsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgob3B0KTsKKworCS8qIHNwZWNpYWwgY2FzZTogb25seSByZW1vdmFsICovCisJaWYgKCFkaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZSkgeworCQllbWl0X2RpZmZfc3ltYm9sKGRpZmZfd29yZHMtPm9wdCwgRElGRl9TWU1CT0xfV09SRF9ESUZGLAorCQkJCSBsaW5lX3ByZWZpeCwgc3RybGVuKGxpbmVfcHJlZml4KSwgMCk7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQsCisJCQkmc3R5bGUtPm9sZF93b3JkLCBzdHlsZS0+bmV3bGluZSwKKwkJCWRpZmZfd29yZHMtPm1pbnVzLnRleHQuc2l6ZSwKKwkJCWRpZmZfd29yZHMtPm1pbnVzLnRleHQucHRyKTsKKwkJZGlmZl93b3Jkcy0+bWludXMudGV4dC5zaXplID0gMDsKKwkJcmV0dXJuOworCX0KKworCWRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyA9IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHI7CisJZGlmZl93b3Jkcy0+bGFzdF9taW51cyA9IDA7CisKKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCWRpZmZfd29yZHNfZmlsbCgmZGlmZl93b3Jkcy0+bWludXMsICZtaW51cywgZGlmZl93b3Jkcy0+d29yZF9yZWdleCk7CisJZGlmZl93b3Jkc19maWxsKCZkaWZmX3dvcmRzLT5wbHVzLCAmcGx1cywgZGlmZl93b3Jkcy0+d29yZF9yZWdleCk7CisJeHBwLmZsYWdzID0gMDsKKwkvKiBhcyBvbmx5IHRoZSBodW5rIGhlYWRlciB3aWxsIGJlIHBhcnNlZCwgd2UgbmVlZCBhIDAtY29udGV4dCAqLworCXhlY2ZnLmN0eGxlbiA9IDA7CisJaWYgKHhkaV9kaWZmX291dGYoJm1pbnVzLCAmcGx1cywgZm5fb3V0X2RpZmZfd29yZHNfYXV4LCBOVUxMLAorCQkJICBkaWZmX3dvcmRzLCAmeHBwLCAmeGVjZmcpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSB3b3JkIGRpZmYiKTsKKwlmcmVlKG1pbnVzLnB0cik7CisJZnJlZShwbHVzLnB0cik7CisJaWYgKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyAhPSBkaWZmX3dvcmRzLT5wbHVzLnRleHQucHRyICsKKwkJCWRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplKSB7CisJCWlmIChjb2xvcl93b3Jkc19vdXRwdXRfZ3JhcGhfcHJlZml4KGRpZmZfd29yZHMpKQorCQkJZW1pdF9kaWZmX3N5bWJvbChkaWZmX3dvcmRzLT5vcHQsIERJRkZfU1lNQk9MX1dPUkRfRElGRiwKKwkJCQkJIGxpbmVfcHJlZml4LCBzdHJsZW4obGluZV9wcmVmaXgpLCAwKTsKKwkJZm5fb3V0X2RpZmZfd29yZHNfd3JpdGVfaGVscGVyKGRpZmZfd29yZHMtPm9wdCwKKwkJCSZzdHlsZS0+Y3R4LCBzdHlsZS0+bmV3bGluZSwKKwkJCWRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgKyBkaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZQorCQkJLSBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMsIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyk7CisJfQorCWRpZmZfd29yZHMtPm1pbnVzLnRleHQuc2l6ZSA9IGRpZmZfd29yZHMtPnBsdXMudGV4dC5zaXplID0gMDsKK30KKworLyogSW4gImNvbG9yLXdvcmRzIiBtb2RlLCBzaG93IHdvcmQtZGlmZiBvZiB3b3JkcyBhY2N1bXVsYXRlZCBpbiB0aGUgYnVmZmVyICovCitzdGF0aWMgdm9pZCBkaWZmX3dvcmRzX2ZsdXNoKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgKndvID0gZWNiZGF0YS0+ZGlmZl93b3Jkcy0+b3B0OworCisJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMtPm1pbnVzLnRleHQuc2l6ZSB8fAorCSAgICBlY2JkYXRhLT5kaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZSkKKwkJZGlmZl93b3Jkc19zaG93KGVjYmRhdGEtPmRpZmZfd29yZHMpOworCisJaWYgKHdvLT5lbWl0dGVkX3N5bWJvbHMpIHsKKwkJc3RydWN0IGRpZmZfb3B0aW9ucyAqbyA9IGVjYmRhdGEtPm9wdDsKKwkJc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2xzICp3b2wgPSB3by0+ZW1pdHRlZF9zeW1ib2xzOworCQlpbnQgaTsKKworCQkvKgorCQkgKiBORUVEU1dPUks6CisJCSAqIEluc3RlYWQgb2YgYXBwZW5kaW5nIGVhY2gsIGNvbmNhdCBhbGwgd29yZHMgdG8gYSBsaW5lPworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHdvbC0+bnI7IGkrKykKKwkJCWFwcGVuZF9lbWl0dGVkX2RpZmZfc3ltYm9sKG8sICZ3b2wtPmJ1ZltpXSk7CisKKwkJZm9yIChpID0gMDsgaSA8IHdvbC0+bnI7IGkrKykKKwkJCWZyZWUoKHZvaWQgKil3b2wtPmJ1ZltpXS5saW5lKTsKKworCQl3b2wtPm5yID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZfZmlsZXNwZWNfbG9hZF9kcml2ZXIoc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCQkgICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwkvKiBVc2UgYWxyZWFkeS1sb2FkZWQgZHJpdmVyICovCisJaWYgKG9uZS0+ZHJpdmVyKQorCQlyZXR1cm47CisKKwlpZiAoU19JU1JFRyhvbmUtPm1vZGUpKQorCQlvbmUtPmRyaXZlciA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChpc3RhdGUsIG9uZS0+cGF0aCk7CisKKwkvKiBGYWxsYmFjayB0byBkZWZhdWx0IHNldHRpbmdzICovCisJaWYgKCFvbmUtPmRyaXZlcikKKwkJb25lLT5kcml2ZXIgPSB1c2VyZGlmZl9maW5kX2J5X25hbWUoImRlZmF1bHQiKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJkaWZmX3dvcmRfcmVnZXgoc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCQkgICAgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJZGlmZl9maWxlc3BlY19sb2FkX2RyaXZlcihvbmUsIGlzdGF0ZSk7CisJcmV0dXJuIG9uZS0+ZHJpdmVyLT53b3JkX3JlZ2V4OworfQorCitzdGF0aWMgdm9pZCBpbml0X2RpZmZfd29yZHNfZGF0YShzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwKKwkJCQkgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3JpZ19vcHRzLAorCQkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJCSBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCWludCBpOworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm8gPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlmZl9vcHRpb25zKSk7CisJbWVtY3B5KG8sIG9yaWdfb3B0cywgc2l6ZW9mKHN0cnVjdCBkaWZmX29wdGlvbnMpKTsKKworCWVjYmRhdGEtPmRpZmZfd29yZHMgPQorCQl4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhKSk7CisJZWNiZGF0YS0+ZGlmZl93b3Jkcy0+dHlwZSA9IG8tPndvcmRfZGlmZjsKKwllY2JkYXRhLT5kaWZmX3dvcmRzLT5vcHQgPSBvOworCisJaWYgKG9yaWdfb3B0cy0+ZW1pdHRlZF9zeW1ib2xzKQorCQlvLT5lbWl0dGVkX3N5bWJvbHMgPQorCQkJeGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGVtaXR0ZWRfZGlmZl9zeW1ib2xzKSk7CisKKwlpZiAoIW8tPndvcmRfcmVnZXgpCisJCW8tPndvcmRfcmVnZXggPSB1c2VyZGlmZl93b3JkX3JlZ2V4KG9uZSwgby0+cmVwby0+aW5kZXgpOworCWlmICghby0+d29yZF9yZWdleCkKKwkJby0+d29yZF9yZWdleCA9IHVzZXJkaWZmX3dvcmRfcmVnZXgodHdvLCBvLT5yZXBvLT5pbmRleCk7CisJaWYgKCFvLT53b3JkX3JlZ2V4KQorCQlvLT53b3JkX3JlZ2V4ID0gZGlmZl93b3JkX3JlZ2V4X2NmZzsKKwlpZiAoby0+d29yZF9yZWdleCkgeworCQllY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4ID0gKHJlZ2V4X3QgKikKKwkJCXhtYWxsb2Moc2l6ZW9mKHJlZ2V4X3QpKTsKKwkJaWYgKHJlZ2NvbXAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+d29yZF9yZWdleCwKKwkJCSAgICBvLT53b3JkX3JlZ2V4LAorCQkJICAgIFJFR19FWFRFTkRFRCB8IFJFR19ORVdMSU5FKSkKKwkJCWRpZSgiaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICVzIiwKKwkJCSAgICBvLT53b3JkX3JlZ2V4KTsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlmZl93b3Jkc19zdHlsZXMpOyBpKyspIHsKKwkJaWYgKG8tPndvcmRfZGlmZiA9PSBkaWZmX3dvcmRzX3N0eWxlc1tpXS50eXBlKSB7CisJCQllY2JkYXRhLT5kaWZmX3dvcmRzLT5zdHlsZSA9CisJCQkJJmRpZmZfd29yZHNfc3R5bGVzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHdhbnRfY29sb3Ioby0+dXNlX2NvbG9yKSkgeworCQlzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZSAqc3QgPSBlY2JkYXRhLT5kaWZmX3dvcmRzLT5zdHlsZTsKKwkJc3QtPm9sZF93b3JkLmNvbG9yID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTEQpOworCQlzdC0+bmV3X3dvcmQuY29sb3IgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FVyk7CisJCXN0LT5jdHguY29sb3IgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9DT05URVhUKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZGlmZl93b3Jkc19kYXRhKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzKSB7CisJCWRpZmZfd29yZHNfZmx1c2goZWNiZGF0YSk7CisJCWZyZWUgKGVjYmRhdGEtPmRpZmZfd29yZHMtPm9wdC0+ZW1pdHRlZF9zeW1ib2xzKTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+b3B0KTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+bWludXMudGV4dC5wdHIpOworCQlmcmVlIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cy5vcmlnKTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cik7CisJCWZyZWUgKGVjYmRhdGEtPmRpZmZfd29yZHMtPnBsdXMub3JpZyk7CisJCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4KSB7CisJCQlyZWdmcmVlKGVjYmRhdGEtPmRpZmZfd29yZHMtPndvcmRfcmVnZXgpOworCQkJZnJlZShlY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwkJfQorCQlGUkVFX0FORF9OVUxMKGVjYmRhdGEtPmRpZmZfd29yZHMpOworCX0KK30KKworY29uc3QgY2hhciAqZGlmZl9nZXRfY29sb3IoaW50IGRpZmZfdXNlX2NvbG9yLCBlbnVtIGNvbG9yX2RpZmYgaXgpCit7CisJaWYgKHdhbnRfY29sb3IoZGlmZl91c2VfY29sb3IpKQorCQlyZXR1cm4gZGlmZl9jb2xvcnNbaXhdOworCXJldHVybiAiIjsKK30KKworY29uc3QgY2hhciAqZGlmZl9saW5lX3ByZWZpeChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IHN0cmJ1ZiAqbXNnYnVmOworCWlmICghb3B0LT5vdXRwdXRfcHJlZml4KQorCQlyZXR1cm4gIiI7CisKKwltc2didWYgPSBvcHQtPm91dHB1dF9wcmVmaXgob3B0LCBvcHQtPm91dHB1dF9wcmVmaXhfZGF0YSk7CisJcmV0dXJuIG1zZ2J1Zi0+YnVmOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYW5lX3RydW5jYXRlX2xpbmUoY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJY29uc3QgY2hhciAqY3A7CisJdW5zaWduZWQgbG9uZyBhbGxvdDsKKwlzaXplX3QgbCA9IGxlbjsKKworCWNwID0gbGluZTsKKwlhbGxvdCA9IGw7CisJd2hpbGUgKDAgPCBsKSB7CisJCSh2b2lkKSB1dGY4X3dpZHRoKCZjcCwgJmwpOworCQlpZiAoIWNwKQorCQkJYnJlYWs7IC8qIHRydW5jYXRlZCBpbiB0aGUgbWlkZGxlPyAqLworCX0KKwlyZXR1cm4gYWxsb3QgLSBsOworfQorCitzdGF0aWMgdm9pZCBmaW5kX2xubyhjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSkKK3sKKwljb25zdCBjaGFyICpwOworCWVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSA9IDA7CisJZWNiZGF0YS0+bG5vX2luX3Bvc3RpbWFnZSA9IDA7CisJcCA9IHN0cmNocihsaW5lLCAnLScpOworCWlmICghcCkKKwkJcmV0dXJuOyAvKiBjYW5ub3QgaGFwcGVuICovCisJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlID0gc3RydG9sKHAgKyAxLCBOVUxMLCAxMCk7CisJcCA9IHN0cmNocihwLCAnKycpOworCWlmICghcCkKKwkJcmV0dXJuOyAvKiBjYW5ub3QgaGFwcGVuICovCisJZWNiZGF0YS0+bG5vX2luX3Bvc3RpbWFnZSA9IHN0cnRvbChwICsgMSwgTlVMTCwgMTApOworfQorCitzdGF0aWMgdm9pZCBmbl9vdXRfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSA9IHByaXY7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqbyA9IGVjYmRhdGEtPm9wdDsKKworCW8tPmZvdW5kX2NoYW5nZXMgPSAxOworCisJaWYgKGVjYmRhdGEtPmhlYWRlcikgeworCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0hFQURFUiwKKwkJCQkgZWNiZGF0YS0+aGVhZGVyLT5idWYsIGVjYmRhdGEtPmhlYWRlci0+bGVuLCAwKTsKKwkJc3RyYnVmX3Jlc2V0KGVjYmRhdGEtPmhlYWRlcik7CisJCWVjYmRhdGEtPmhlYWRlciA9IE5VTEw7CisJfQorCisJaWYgKGVjYmRhdGEtPmxhYmVsX3BhdGhbMF0pIHsKKwkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9GSUxFUEFJUl9NSU5VUywKKwkJCQkgZWNiZGF0YS0+bGFiZWxfcGF0aFswXSwKKwkJCQkgc3RybGVuKGVjYmRhdGEtPmxhYmVsX3BhdGhbMF0pLCAwKTsKKwkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9GSUxFUEFJUl9QTFVTLAorCQkJCSBlY2JkYXRhLT5sYWJlbF9wYXRoWzFdLAorCQkJCSBzdHJsZW4oZWNiZGF0YS0+bGFiZWxfcGF0aFsxXSksIDApOworCQllY2JkYXRhLT5sYWJlbF9wYXRoWzBdID0gZWNiZGF0YS0+bGFiZWxfcGF0aFsxXSA9IE5VTEw7CisJfQorCisJaWYgKGRpZmZfc3VwcHJlc3NfYmxhbmtfZW1wdHkKKwkgICAgJiYgbGVuID09IDIgJiYgbGluZVswXSA9PSAnICcgJiYgbGluZVsxXSA9PSAnXG4nKSB7CisJCWxpbmVbMF0gPSAnXG4nOworCQlsZW4gPSAxOworCX0KKworCWlmIChsaW5lWzBdID09ICdAJykgeworCQlpZiAoZWNiZGF0YS0+ZGlmZl93b3JkcykKKwkJCWRpZmZfd29yZHNfZmx1c2goZWNiZGF0YSk7CisJCWxlbiA9IHNhbmVfdHJ1bmNhdGVfbGluZShsaW5lLCBsZW4pOworCQlmaW5kX2xubyhsaW5lLCBlY2JkYXRhKTsKKwkJZW1pdF9odW5rX2hlYWRlcihlY2JkYXRhLCBsaW5lLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMpIHsKKwkJZW51bSBkaWZmX3N5bWJvbCBzID0KKwkJCWVjYmRhdGEtPmRpZmZfd29yZHMtPnR5cGUgPT0gRElGRl9XT1JEU19QT1JDRUxBSU4gPworCQkJRElGRl9TWU1CT0xfV09SRFNfUE9SQ0VMQUlOIDogRElGRl9TWU1CT0xfV09SRFM7CisJCWlmIChsaW5lWzBdID09ICctJykgeworCQkJZGlmZl93b3Jkc19hcHBlbmQobGluZSwgbGVuLAorCQkJCQkgICZlY2JkYXRhLT5kaWZmX3dvcmRzLT5taW51cyk7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAobGluZVswXSA9PSAnKycpIHsKKwkJCWRpZmZfd29yZHNfYXBwZW5kKGxpbmUsIGxlbiwKKwkJCQkJICAmZWNiZGF0YS0+ZGlmZl93b3Jkcy0+cGx1cyk7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgIlxcICIpKSB7CisJCQkvKgorCQkJICogRWF0IHRoZSAibm8gbmV3bGluZSBhdCBlb2YiIG1hcmtlciBhcyBpZiB3ZQorCQkJICogc2F3IGEgIisiIG9yICItIiBsaW5lIHdpdGggbm90aGluZyBvbiBpdCwKKwkJCSAqIGFuZCByZXR1cm4gd2l0aG91dCBkaWZmX3dvcmRzX2ZsdXNoKCkgdG8KKwkJCSAqIGRlZmVyIHByb2Nlc3NpbmcuIElmIHRoaXMgaXMgdGhlIGVuZCBvZgorCQkJICogcHJlaW1hZ2UsIG1vcmUgIisiIGxpbmVzIG1heSBjb21lIGFmdGVyIGl0LgorCQkJICovCisJCQlyZXR1cm47CisJCX0KKwkJZGlmZl93b3Jkc19mbHVzaChlY2JkYXRhKTsKKwkJZW1pdF9kaWZmX3N5bWJvbChvLCBzLCBsaW5lLCBsZW4sIDApOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChsaW5lWzBdKSB7CisJY2FzZSAnKyc6CisJCWVjYmRhdGEtPmxub19pbl9wb3N0aW1hZ2UrKzsKKwkJZW1pdF9hZGRfbGluZShlY2JkYXRhLCBsaW5lICsgMSwgbGVuIC0gMSk7CisJCWJyZWFrOworCWNhc2UgJy0nOgorCQllY2JkYXRhLT5sbm9faW5fcHJlaW1hZ2UrKzsKKwkJZW1pdF9kZWxfbGluZShlY2JkYXRhLCBsaW5lICsgMSwgbGVuIC0gMSk7CisJCWJyZWFrOworCWNhc2UgJyAnOgorCQllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlKys7CisJCWVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSsrOworCQllbWl0X2NvbnRleHRfbGluZShlY2JkYXRhLCBsaW5lICsgMSwgbGVuIC0gMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kICovCisJCWVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSsrOworCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0NPTlRFWFRfSU5DT01QTEVURSwKKwkJCQkgbGluZSwgbGVuLCAwKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcHJpbnRfcmVuYW1lKHN0cnVjdCBzdHJidWYgKm5hbWUsIGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJY29uc3QgY2hhciAqb2xkX25hbWUgPSBhOworCWNvbnN0IGNoYXIgKm5ld19uYW1lID0gYjsKKwlpbnQgcGZ4X2xlbmd0aCwgc2Z4X2xlbmd0aDsKKwlpbnQgcGZ4X2FkanVzdF9mb3Jfc2xhc2g7CisJaW50IGxlbl9hID0gc3RybGVuKGEpOworCWludCBsZW5fYiA9IHN0cmxlbihiKTsKKwlpbnQgYV9taWRsZW4sIGJfbWlkbGVuOworCWludCBxbGVuX2EgPSBxdW90ZV9jX3N0eWxlKGEsIE5VTEwsIE5VTEwsIDApOworCWludCBxbGVuX2IgPSBxdW90ZV9jX3N0eWxlKGIsIE5VTEwsIE5VTEwsIDApOworCisJaWYgKHFsZW5fYSB8fCBxbGVuX2IpIHsKKwkJcXVvdGVfY19zdHlsZShhLCBuYW1lLCBOVUxMLCAwKTsKKwkJc3RyYnVmX2FkZHN0cihuYW1lLCAiID0+ICIpOworCQlxdW90ZV9jX3N0eWxlKGIsIG5hbWUsIE5VTEwsIDApOworCQlyZXR1cm47CisJfQorCisJLyogRmluZCBjb21tb24gcHJlZml4ICovCisJcGZ4X2xlbmd0aCA9IDA7CisJd2hpbGUgKCpvbGRfbmFtZSAmJiAqbmV3X25hbWUgJiYgKm9sZF9uYW1lID09ICpuZXdfbmFtZSkgeworCQlpZiAoKm9sZF9uYW1lID09ICcvJykKKwkJCXBmeF9sZW5ndGggPSBvbGRfbmFtZSAtIGEgKyAxOworCQlvbGRfbmFtZSsrOworCQluZXdfbmFtZSsrOworCX0KKworCS8qIEZpbmQgY29tbW9uIHN1ZmZpeCAqLworCW9sZF9uYW1lID0gYSArIGxlbl9hOworCW5ld19uYW1lID0gYiArIGxlbl9iOworCXNmeF9sZW5ndGggPSAwOworCS8qCisJICogSWYgdGhlcmUgaXMgYSBjb21tb24gcHJlZml4LCBpdCBtdXN0IGVuZCBpbiBhIHNsYXNoLiAgSW4KKwkgKiB0aGF0IGNhc2Ugd2UgbGV0IHRoaXMgbG9vcCBydW4gMSBpbnRvIHRoZSBwcmVmaXggdG8gc2VlIHRoZQorCSAqIHNhbWUgc2xhc2guCisJICoKKwkgKiBJZiB0aGVyZSBpcyBubyBjb21tb24gcHJlZml4LCB3ZSBjYW5ub3QgZG8gdGhpcyBhcyBpdCB3b3VsZAorCSAqIHVuZGVycnVuIHRoZSBpbnB1dCBzdHJpbmdzLgorCSAqLworCXBmeF9hZGp1c3RfZm9yX3NsYXNoID0gKHBmeF9sZW5ndGggPyAxIDogMCk7CisJd2hpbGUgKGEgKyBwZnhfbGVuZ3RoIC0gcGZ4X2FkanVzdF9mb3Jfc2xhc2ggPD0gb2xkX25hbWUgJiYKKwkgICAgICAgYiArIHBmeF9sZW5ndGggLSBwZnhfYWRqdXN0X2Zvcl9zbGFzaCA8PSBuZXdfbmFtZSAmJgorCSAgICAgICAqb2xkX25hbWUgPT0gKm5ld19uYW1lKSB7CisJCWlmICgqb2xkX25hbWUgPT0gJy8nKQorCQkJc2Z4X2xlbmd0aCA9IGxlbl9hIC0gKG9sZF9uYW1lIC0gYSk7CisJCW9sZF9uYW1lLS07CisJCW5ld19uYW1lLS07CisJfQorCisJLyoKKwkgKiBwZnh7bWlkLWEgPT4gbWlkLWJ9c2Z4CisJICoge3BmeC1hID0+IHBmeC1ifXNmeAorCSAqIHBmeHtzZngtYSA9PiBzZngtYn0KKwkgKiBuYW1lLWEgPT4gbmFtZS1iCisJICovCisJYV9taWRsZW4gPSBsZW5fYSAtIHBmeF9sZW5ndGggLSBzZnhfbGVuZ3RoOworCWJfbWlkbGVuID0gbGVuX2IgLSBwZnhfbGVuZ3RoIC0gc2Z4X2xlbmd0aDsKKwlpZiAoYV9taWRsZW4gPCAwKQorCQlhX21pZGxlbiA9IDA7CisJaWYgKGJfbWlkbGVuIDwgMCkKKwkJYl9taWRsZW4gPSAwOworCisJc3RyYnVmX2dyb3cobmFtZSwgcGZ4X2xlbmd0aCArIGFfbWlkbGVuICsgYl9taWRsZW4gKyBzZnhfbGVuZ3RoICsgNyk7CisJaWYgKHBmeF9sZW5ndGggKyBzZnhfbGVuZ3RoKSB7CisJCXN0cmJ1Zl9hZGQobmFtZSwgYSwgcGZ4X2xlbmd0aCk7CisJCXN0cmJ1Zl9hZGRjaChuYW1lLCAneycpOworCX0KKwlzdHJidWZfYWRkKG5hbWUsIGEgKyBwZnhfbGVuZ3RoLCBhX21pZGxlbik7CisJc3RyYnVmX2FkZHN0cihuYW1lLCAiID0+ICIpOworCXN0cmJ1Zl9hZGQobmFtZSwgYiArIHBmeF9sZW5ndGgsIGJfbWlkbGVuKTsKKwlpZiAocGZ4X2xlbmd0aCArIHNmeF9sZW5ndGgpIHsKKwkJc3RyYnVmX2FkZGNoKG5hbWUsICd9Jyk7CisJCXN0cmJ1Zl9hZGQobmFtZSwgYSArIGxlbl9hIC0gc2Z4X2xlbmd0aCwgc2Z4X2xlbmd0aCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmRpZmZzdGF0X2FkZChzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCisJCQkJCSAgY29uc3QgY2hhciAqbmFtZV9hLAorCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWVfYikKK3sKKwlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqeDsKKwl4ID0geGNhbGxvYygxLCBzaXplb2YoKngpKTsKKwlBTExPQ19HUk9XKGRpZmZzdGF0LT5maWxlcywgZGlmZnN0YXQtPm5yICsgMSwgZGlmZnN0YXQtPmFsbG9jKTsKKwlkaWZmc3RhdC0+ZmlsZXNbZGlmZnN0YXQtPm5yKytdID0geDsKKwlpZiAobmFtZV9iKSB7CisJCXgtPmZyb21fbmFtZSA9IHhzdHJkdXAobmFtZV9hKTsKKwkJeC0+bmFtZSA9IHhzdHJkdXAobmFtZV9iKTsKKwkJeC0+aXNfcmVuYW1lZCA9IDE7CisJfQorCWVsc2UgeworCQl4LT5mcm9tX25hbWUgPSBOVUxMOworCQl4LT5uYW1lID0geHN0cmR1cChuYW1lX2EpOworCX0KKwlyZXR1cm4geDsKK30KKworc3RhdGljIHZvaWQgZGlmZnN0YXRfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQgPSBwcml2OworCXN0cnVjdCBkaWZmc3RhdF9maWxlICp4ID0gZGlmZnN0YXQtPmZpbGVzW2RpZmZzdGF0LT5uciAtIDFdOworCisJaWYgKGxpbmVbMF0gPT0gJysnKQorCQl4LT5hZGRlZCsrOworCWVsc2UgaWYgKGxpbmVbMF0gPT0gJy0nKQorCQl4LT5kZWxldGVkKys7Cit9CisKK2NvbnN0IGNoYXIgbWltZV9ib3VuZGFyeV9sZWFkZXJbXSA9ICItLS0tLS0tLS0tLS0iOworCitzdGF0aWMgaW50IHNjYWxlX2xpbmVhcihpbnQgaXQsIGludCB3aWR0aCwgaW50IG1heF9jaGFuZ2UpCit7CisJaWYgKCFpdCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBtYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgJy0nIG9yICcrJyBpcyBwcmludGVkIGlmCisJICogdGhlcmUgaXMgYW55IGNoYW5nZSB0byB0aGlzIHBhdGguIFRoZSBlYXNpZXN0IHdheSBpcyB0bworCSAqIHNjYWxlIGxpbmVhcmx5IGFzIGlmIHRoZSBhbGxvdHRlZCB3aWR0aCBpcyBvbmUgY29sdW1uIHNob3J0ZXIKKwkgKiB0aGFuIGl0IGlzLCBhbmQgdGhlbiBhZGQgMSB0byB0aGUgcmVzdWx0LgorCSAqLworCXJldHVybiAxICsgKGl0ICogKHdpZHRoIC0gMSkgLyBtYXhfY2hhbmdlKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19ncmFwaChzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNoYXIgY2gsIGludCBjbnQsCisJCSAgICAgICBjb25zdCBjaGFyICpzZXQsIGNvbnN0IGNoYXIgKnJlc2V0KQoreworCWlmIChjbnQgPD0gMCkKKwkJcmV0dXJuOworCXN0cmJ1Zl9hZGRzdHIob3V0LCBzZXQpOworCXN0cmJ1Zl9hZGRjaGFycyhvdXQsIGNoLCBjbnQpOworCXN0cmJ1Zl9hZGRzdHIob3V0LCByZXNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfcHJpbnRfbmFtZShzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZmlsZS0+cHJpbnRfbmFtZSkKKwkJcmV0dXJuOworCisJaWYgKGZpbGUtPmlzX3JlbmFtZWQpCisJCXBwcmludF9yZW5hbWUoJnBuYW1lLCBmaWxlLT5mcm9tX25hbWUsIGZpbGUtPm5hbWUpOworCWVsc2UKKwkJcXVvdGVfY19zdHlsZShmaWxlLT5uYW1lLCAmcG5hbWUsIE5VTEwsIDApOworCisJaWYgKGZpbGUtPmNvbW1lbnRzKQorCQlzdHJidWZfYWRkZigmcG5hbWUsICIgKCVzKSIsIGZpbGUtPmNvbW1lbnRzKTsKKworCWZpbGUtPnByaW50X25hbWUgPSBzdHJidWZfZGV0YWNoKCZwbmFtZSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N0YXRfc3VtbWFyeV9pbnNlcnRzX2RlbGV0ZXMoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJaW50IGZpbGVzLCBpbnQgaW5zZXJ0aW9ucywgaW50IGRlbGV0aW9ucykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWZpbGVzKSB7CisJCWFzc2VydChpbnNlcnRpb25zID09IDAgJiYgZGVsZXRpb25zID09IDApOworCQllbWl0X2RpZmZfc3ltYm9sKG9wdGlvbnMsIERJRkZfU1lNQk9MX1NUQVRTX1NVTU1BUllfTk9fRklMRVMsCisJCQkJIE5VTEwsIDAsIDApOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2FkZGYoJnNiLAorCQkgICAgKGZpbGVzID09IDEpID8gIiAlZCBmaWxlIGNoYW5nZWQiIDogIiAlZCBmaWxlcyBjaGFuZ2VkIiwKKwkJICAgIGZpbGVzKTsKKworCS8qCisJICogRm9yIGJpbmFyeSBkaWZmLCB0aGUgY2FsbGVyIG1heSB3YW50IHRvIHByaW50ICJ4IGZpbGVzCisJICogY2hhbmdlZCIgd2l0aCBpbnNlcnRpb25zID09IDAgJiYgZGVsZXRpb25zID09IDAuCisJICoKKwkgKiBOb3Qgb21pdHRpbmcgIjAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkiIGluIHRoaXMgY2FzZQorCSAqIGlzIHByb2JhYmx5IGxlc3MgY29uZnVzaW5nIChpLmUgc2tpcCBvdmVyICIyIGZpbGVzIGNoYW5nZWQKKwkgKiBidXQgbm90aGluZyBhYm91dCBhZGRlZC9yZW1vdmVkIGxpbmVzPyBJcyB0aGlzIGEgYnVnIGluIEdpdD8iKS4KKwkgKi8KKwlpZiAoaW5zZXJ0aW9ucyB8fCBkZWxldGlvbnMgPT0gMCkgeworCQlzdHJidWZfYWRkZigmc2IsCisJCQkgICAgKGluc2VydGlvbnMgPT0gMSkgPyAiLCAlZCBpbnNlcnRpb24oKykiIDogIiwgJWQgaW5zZXJ0aW9ucygrKSIsCisJCQkgICAgaW5zZXJ0aW9ucyk7CisJfQorCisJaWYgKGRlbGV0aW9ucyB8fCBpbnNlcnRpb25zID09IDApIHsKKwkJc3RyYnVmX2FkZGYoJnNiLAorCQkJICAgIChkZWxldGlvbnMgPT0gMSkgPyAiLCAlZCBkZWxldGlvbigtKSIgOiAiLCAlZCBkZWxldGlvbnMoLSkiLAorCQkJICAgIGRlbGV0aW9ucyk7CisJfQorCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCWVtaXRfZGlmZl9zeW1ib2wob3B0aW9ucywgRElGRl9TWU1CT0xfU1RBVFNfU1VNTUFSWV9JTlNFUlRTX0RFTEVURVMsCisJCQkgc2IuYnVmLCBzYi5sZW4sIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3ZvaWQgcHJpbnRfc3RhdF9zdW1tYXJ5KEZJTEUgKmZwLCBpbnQgZmlsZXMsCisJCQlpbnQgaW5zZXJ0aW9ucywgaW50IGRlbGV0aW9ucykKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG87CisJbWVtc2V0KCZvLCAwLCBzaXplb2YobykpOworCW8uZmlsZSA9IGZwOworCisJcHJpbnRfc3RhdF9zdW1tYXJ5X2luc2VydHNfZGVsZXRlcygmbywgZmlsZXMsIGluc2VydGlvbnMsIGRlbGV0aW9ucyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc3RhdHMoc3RydWN0IGRpZmZzdGF0X3QgKmRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGksIGxlbiwgYWRkLCBkZWwsIGFkZHMgPSAwLCBkZWxzID0gMDsKKwl1aW50bWF4X3QgbWF4X2NoYW5nZSA9IDAsIG1heF9sZW4gPSAwOworCWludCB0b3RhbF9maWxlcyA9IGRhdGEtPm5yLCBjb3VudDsKKwlpbnQgd2lkdGgsIG5hbWVfd2lkdGgsIGdyYXBoX3dpZHRoLCBudW1iZXJfd2lkdGggPSAwLCBiaW5fd2lkdGggPSAwOworCWNvbnN0IGNoYXIgKnJlc2V0LCAqYWRkX2MsICpkZWxfYzsKKwlpbnQgZXh0cmFfc2hvd24gPSAwOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvcHRpb25zKTsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCisJaWYgKGRhdGEtPm5yID09IDApCisJCXJldHVybjsKKworCWNvdW50ID0gb3B0aW9ucy0+c3RhdF9jb3VudCA/IG9wdGlvbnMtPnN0YXRfY291bnQgOiBkYXRhLT5ucjsKKworCXJlc2V0ID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdGlvbnMsIERJRkZfUkVTRVQpOworCWFkZF9jID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdGlvbnMsIERJRkZfRklMRV9ORVcpOworCWRlbF9jID0gZGlmZl9nZXRfY29sb3Jfb3B0KG9wdGlvbnMsIERJRkZfRklMRV9PTEQpOworCisJLyoKKwkgKiBGaW5kIHRoZSBsb25nZXN0IGZpbGVuYW1lIGFuZCBtYXggbnVtYmVyIG9mIGNoYW5nZXMKKwkgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IGNvdW50KSAmJiAoaSA8IGRhdGEtPm5yKTsgaSsrKSB7CisJCXN0cnVjdCBkaWZmc3RhdF9maWxlICpmaWxlID0gZGF0YS0+ZmlsZXNbaV07CisJCXVpbnRtYXhfdCBjaGFuZ2UgPSBmaWxlLT5hZGRlZCArIGZpbGUtPmRlbGV0ZWQ7CisKKwkJaWYgKCFmaWxlLT5pc19pbnRlcmVzdGluZyAmJiAoY2hhbmdlID09IDApKSB7CisJCQljb3VudCsrOyAvKiBub3Qgc2hvd24gPT0gcm9vbSBmb3Igb25lIG1vcmUgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWZpbGxfcHJpbnRfbmFtZShmaWxlKTsKKwkJbGVuID0gc3RybGVuKGZpbGUtPnByaW50X25hbWUpOworCQlpZiAobWF4X2xlbiA8IGxlbikKKwkJCW1heF9sZW4gPSBsZW47CisKKwkJaWYgKGZpbGUtPmlzX3VubWVyZ2VkKSB7CisJCQkvKiAiVW5tZXJnZWQiIGlzIDggY2hhcmFjdGVycyAqLworCQkJYmluX3dpZHRoID0gYmluX3dpZHRoIDwgOCA/IDggOiBiaW5fd2lkdGg7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmlsZS0+aXNfYmluYXJ5KSB7CisJCQkvKiAiQmluIFhYWCAtPiBZWVkgYnl0ZXMiICovCisJCQlpbnQgdyA9IDE0ICsgZGVjaW1hbF93aWR0aChmaWxlLT5hZGRlZCkKKwkJCQkrIGRlY2ltYWxfd2lkdGgoZmlsZS0+ZGVsZXRlZCk7CisJCQliaW5fd2lkdGggPSBiaW5fd2lkdGggPCB3ID8gdyA6IGJpbl93aWR0aDsKKwkJCS8qIERpc3BsYXkgY2hhbmdlIGNvdW50cyBhbGlnbmVkIHdpdGggIkJpbiIgKi8KKwkJCW51bWJlcl93aWR0aCA9IDM7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtYXhfY2hhbmdlIDwgY2hhbmdlKQorCQkJbWF4X2NoYW5nZSA9IGNoYW5nZTsKKwl9CisJY291bnQgPSBpOyAvKiB3aGVyZSB3ZSBjYW4gc3RvcCBzY2FubmluZyBpbiBkYXRhLT5maWxlc1tdICovCisKKwkvKgorCSAqIFdlIGhhdmUgd2lkdGggPSBzdGF0X3dpZHRoIG9yIHRlcm1fY29sdW1ucygpIGNvbHVtbnMgdG90YWwuCisJICogV2Ugd2FudCBhIG1heGltdW0gb2YgbWluKG1heF9sZW4sIHN0YXRfbmFtZV93aWR0aCkgZm9yIHRoZSBuYW1lIHBhcnQuCisJICogV2Ugd2FudCBhIG1heGltdW0gb2YgbWluKG1heF9jaGFuZ2UsIHN0YXRfZ3JhcGhfd2lkdGgpIGZvciB0aGUgKy0gcGFydC4KKwkgKiBXZSBhbHNvIG5lZWQgMSBmb3IgIiAiIGFuZCA0ICsgZGVjaW1hbF93aWR0aChtYXhfY2hhbmdlKQorCSAqIGZvciAiIHwgTk5OTiAiIGFuZCBvbmUgdGhlIGVtcHR5IGNvbHVtbiBhdCB0aGUgZW5kLCBhbHRvZ2V0aGVyCisJICogNiArIGRlY2ltYWxfd2lkdGgobWF4X2NoYW5nZSkuCisJICoKKwkgKiBJZiB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UsIHdlIHdpbGwgdXNlIHRoZSBzbWFsbGVyIG9mCisJICogc3RhdF9uYW1lX3dpZHRoIChpZiBzZXQpIGFuZCA1Lzgqd2lkdGggZm9yIHRoZSBmaWxlbmFtZSwKKwkgKiBhbmQgdGhlIHJlc3QgZm9yIGNvbnN0YW50IGVsZW1lbnRzICsgZ3JhcGggcGFydCwgYnV0IG5vIG1vcmUKKwkgKiB0aGFuIHN0YXRfZ3JhcGhfd2lkdGggZm9yIHRoZSBncmFwaCBwYXJ0LgorCSAqICg1LzggZ2l2ZXMgNTAgZm9yIGZpbGVuYW1lIGFuZCAzMCBmb3IgdGhlIGNvbnN0YW50IHBhcnRzICsgZ3JhcGgKKwkgKiBmb3IgdGhlIHN0YW5kYXJkIHRlcm1pbmFsIHNpemUpLgorCSAqCisJICogSW4gb3RoZXIgd29yZHM6IHN0YXRfd2lkdGggbGltaXRzIHRoZSBtYXhpbXVtIHdpZHRoLCBhbmQKKwkgKiBzdGF0X25hbWVfd2lkdGggZml4ZXMgdGhlIG1heGltdW0gd2lkdGggb2YgdGhlIGZpbGVuYW1lLAorCSAqIGFuZCBpcyBhbHNvIHVzZWQgdG8gZGl2aWRlIGF2YWlsYWJsZSBjb2x1bW5zIGlmIHRoZXJlCisJICogYXJlbid0IGVub3VnaC4KKwkgKgorCSAqIEJpbmFyeSBmaWxlcyBhcmUgZGlzcGxheWVkIHdpdGggIkJpbiBYWFggLT4gWVlZIGJ5dGVzIgorCSAqIGluc3RlYWQgb2YgdGhlIGNoYW5nZSBjb3VudCBhbmQgZ3JhcGguIFRoaXMgcGFydCBpcyB0cmVhdGVkCisJICogc2ltaWxhcmx5IHRvIHRoZSBncmFwaCBwYXJ0LCBleGNlcHQgdGhhdCBpdCBpcyBub3QKKwkgKiAic2NhbGVkIi4gSWYgdG90YWwgd2lkdGggaXMgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIHRoZQorCSAqIGd1YXJhbnRlZWQgbWluaW11bSB3aWR0aCBvZiB0aGUgZmlsZW5hbWUgcGFydCBhbmQgdGhlCisJICogc2VwYXJhdG9ycyBhbmQgdGhpcyBtZXNzYWdlLCB0aGlzIG1lc3NhZ2Ugd2lsbCAib3ZlcmZsb3ciCisJICogbWFraW5nIHRoZSBsaW5lIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIHdpZHRoLgorCSAqLworCisJaWYgKG9wdGlvbnMtPnN0YXRfd2lkdGggPT0gLTEpCisJCXdpZHRoID0gdGVybV9jb2x1bW5zKCkgLSBzdHJsZW4obGluZV9wcmVmaXgpOworCWVsc2UKKwkJd2lkdGggPSBvcHRpb25zLT5zdGF0X3dpZHRoID8gb3B0aW9ucy0+c3RhdF93aWR0aCA6IDgwOworCW51bWJlcl93aWR0aCA9IGRlY2ltYWxfd2lkdGgobWF4X2NoYW5nZSkgPiBudW1iZXJfd2lkdGggPworCQlkZWNpbWFsX3dpZHRoKG1heF9jaGFuZ2UpIDogbnVtYmVyX3dpZHRoOworCisJaWYgKG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggPT0gLTEpCisJCW9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggPSBkaWZmX3N0YXRfZ3JhcGhfd2lkdGg7CisKKwkvKgorCSAqIEd1YXJhbnRlZSAzLzgqMTY9PTYgZm9yIHRoZSBncmFwaCBwYXJ0CisJICogYW5kIDUvOCoxNj09MTAgZm9yIHRoZSBmaWxlbmFtZSBwYXJ0CisJICovCisJaWYgKHdpZHRoIDwgMTYgKyA2ICsgbnVtYmVyX3dpZHRoKQorCQl3aWR0aCA9IDE2ICsgNiArIG51bWJlcl93aWR0aDsKKworCS8qCisJICogRmlyc3QgYXNzaWduIHNpemVzIHRoYXQgYXJlIHdhbnRlZCwgaWdub3JpbmcgYXZhaWxhYmxlIHdpZHRoLgorCSAqIHN0cmxlbigiQmluIFhYWCAtPiBZWVkgYnl0ZXMiKSA9PSBiaW5fd2lkdGgsIGFuZCB0aGUgcGFydAorCSAqIHN0YXJ0aW5nIGZyb20gIlhYWCIgc2hvdWxkIGZpdCBpbiBncmFwaF93aWR0aC4KKwkgKi8KKwlncmFwaF93aWR0aCA9IG1heF9jaGFuZ2UgKyA0ID4gYmluX3dpZHRoID8gbWF4X2NoYW5nZSA6IGJpbl93aWR0aCAtIDQ7CisJaWYgKG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggJiYKKwkgICAgb3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aCA8IGdyYXBoX3dpZHRoKQorCQlncmFwaF93aWR0aCA9IG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGg7CisKKwluYW1lX3dpZHRoID0gKG9wdGlvbnMtPnN0YXRfbmFtZV93aWR0aCA+IDAgJiYKKwkJICAgICAgb3B0aW9ucy0+c3RhdF9uYW1lX3dpZHRoIDwgbWF4X2xlbikgPworCQlvcHRpb25zLT5zdGF0X25hbWVfd2lkdGggOiBtYXhfbGVuOworCisJLyoKKwkgKiBBZGp1c3QgYWRqdXN0YWJsZSB3aWR0aHMgbm90IHRvIGV4Y2VlZCBtYXhpbXVtIHdpZHRoCisJICovCisJaWYgKG5hbWVfd2lkdGggKyBudW1iZXJfd2lkdGggKyA2ICsgZ3JhcGhfd2lkdGggPiB3aWR0aCkgeworCQlpZiAoZ3JhcGhfd2lkdGggPiB3aWR0aCAqIDMvOCAtIG51bWJlcl93aWR0aCAtIDYpIHsKKwkJCWdyYXBoX3dpZHRoID0gd2lkdGggKiAzLzggLSBudW1iZXJfd2lkdGggLSA2OworCQkJaWYgKGdyYXBoX3dpZHRoIDwgNikKKwkJCQlncmFwaF93aWR0aCA9IDY7CisJCX0KKworCQlpZiAob3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aCAmJgorCQkgICAgZ3JhcGhfd2lkdGggPiBvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoKQorCQkJZ3JhcGhfd2lkdGggPSBvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoOworCQlpZiAobmFtZV93aWR0aCA+IHdpZHRoIC0gbnVtYmVyX3dpZHRoIC0gNiAtIGdyYXBoX3dpZHRoKQorCQkJbmFtZV93aWR0aCA9IHdpZHRoIC0gbnVtYmVyX3dpZHRoIC0gNiAtIGdyYXBoX3dpZHRoOworCQllbHNlCisJCQlncmFwaF93aWR0aCA9IHdpZHRoIC0gbnVtYmVyX3dpZHRoIC0gNiAtIG5hbWVfd2lkdGg7CisJfQorCisJLyoKKwkgKiBGcm9tIGhlcmUgbmFtZV93aWR0aCBpcyB0aGUgd2lkdGggb2YgdGhlIG5hbWUgYXJlYSwKKwkgKiBhbmQgZ3JhcGhfd2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBncmFwaCBhcmVhLgorCSAqIG1heF9jaGFuZ2UgaXMgdXNlZCB0byBzY2FsZSBncmFwaCBwcm9wZXJseS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQljb25zdCBjaGFyICpwcmVmaXggPSAiIjsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUgPSBkYXRhLT5maWxlc1tpXTsKKwkJY2hhciAqbmFtZSA9IGZpbGUtPnByaW50X25hbWU7CisJCXVpbnRtYXhfdCBhZGRlZCA9IGZpbGUtPmFkZGVkOworCQl1aW50bWF4X3QgZGVsZXRlZCA9IGZpbGUtPmRlbGV0ZWQ7CisJCWludCBuYW1lX2xlbjsKKworCQlpZiAoIWZpbGUtPmlzX2ludGVyZXN0aW5nICYmIChhZGRlZCArIGRlbGV0ZWQgPT0gMCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiAic2NhbGUiIHRoZSBmaWxlbmFtZQorCQkgKi8KKwkJbGVuID0gbmFtZV93aWR0aDsKKwkJbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuYW1lX3dpZHRoIDwgbmFtZV9sZW4pIHsKKwkJCWNoYXIgKnNsYXNoOworCQkJcHJlZml4ID0gIi4uLiI7CisJCQlsZW4gLT0gMzsKKwkJCW5hbWUgKz0gbmFtZV9sZW4gLSBsZW47CisJCQlzbGFzaCA9IHN0cmNocihuYW1lLCAnLycpOworCQkJaWYgKHNsYXNoKQorCQkJCW5hbWUgPSBzbGFzaDsKKwkJfQorCisJCWlmIChmaWxlLT5pc19iaW5hcnkpIHsKKwkJCXN0cmJ1Zl9hZGRmKCZvdXQsICIgJXMlLSpzIHwiLCBwcmVmaXgsIGxlbiwgbmFtZSk7CisJCQlzdHJidWZfYWRkZigmb3V0LCAiICUqcyIsIG51bWJlcl93aWR0aCwgIkJpbiIpOworCQkJaWYgKCFhZGRlZCAmJiAhZGVsZXRlZCkgeworCQkJCXN0cmJ1Zl9hZGRjaCgmb3V0LCAnXG4nKTsKKwkJCQllbWl0X2RpZmZfc3ltYm9sKG9wdGlvbnMsIERJRkZfU1lNQk9MX1NUQVRTX0xJTkUsCisJCQkJCQkgb3V0LmJ1Ziwgb3V0LmxlbiwgMCk7CisJCQkJc3RyYnVmX3Jlc2V0KCZvdXQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RyYnVmX2FkZGYoJm91dCwgIiAlcyUiUFJJdU1BWCIlcyIsCisJCQkJZGVsX2MsIGRlbGV0ZWQsIHJlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIiAtPiAiKTsKKwkJCXN0cmJ1Zl9hZGRmKCZvdXQsICIlcyUiUFJJdU1BWCIlcyIsCisJCQkJYWRkX2MsIGFkZGVkLCByZXNldCk7CisJCQlzdHJidWZfYWRkc3RyKCZvdXQsICIgYnl0ZXNcbiIpOworCQkJZW1pdF9kaWZmX3N5bWJvbChvcHRpb25zLCBESUZGX1NZTUJPTF9TVEFUU19MSU5FLAorCQkJCQkgb3V0LmJ1Ziwgb3V0LmxlbiwgMCk7CisJCQlzdHJidWZfcmVzZXQoJm91dCk7CisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChmaWxlLT5pc191bm1lcmdlZCkgeworCQkJc3RyYnVmX2FkZGYoJm91dCwgIiAlcyUtKnMgfCIsIHByZWZpeCwgbGVuLCBuYW1lKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIiBVbm1lcmdlZFxuIik7CisJCQllbWl0X2RpZmZfc3ltYm9sKG9wdGlvbnMsIERJRkZfU1lNQk9MX1NUQVRTX0xJTkUsCisJCQkJCSBvdXQuYnVmLCBvdXQubGVuLCAwKTsKKwkJCXN0cmJ1Zl9yZXNldCgmb3V0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogc2NhbGUgdGhlIGFkZC9kZWxldGUKKwkJICovCisJCWFkZCA9IGFkZGVkOworCQlkZWwgPSBkZWxldGVkOworCisJCWlmIChncmFwaF93aWR0aCA8PSBtYXhfY2hhbmdlKSB7CisJCQlpbnQgdG90YWwgPSBzY2FsZV9saW5lYXIoYWRkICsgZGVsLCBncmFwaF93aWR0aCwgbWF4X2NoYW5nZSk7CisJCQlpZiAodG90YWwgPCAyICYmIGFkZCAmJiBkZWwpCisJCQkJLyogd2lkdGggPj0gMiBkdWUgdG8gdGhlIHNhbml0eSBjaGVjayAqLworCQkJCXRvdGFsID0gMjsKKwkJCWlmIChhZGQgPCBkZWwpIHsKKwkJCQlhZGQgPSBzY2FsZV9saW5lYXIoYWRkLCBncmFwaF93aWR0aCwgbWF4X2NoYW5nZSk7CisJCQkJZGVsID0gdG90YWwgLSBhZGQ7CisJCQl9IGVsc2UgeworCQkJCWRlbCA9IHNjYWxlX2xpbmVhcihkZWwsIGdyYXBoX3dpZHRoLCBtYXhfY2hhbmdlKTsKKwkJCQlhZGQgPSB0b3RhbCAtIGRlbDsKKwkJCX0KKwkJfQorCQlzdHJidWZfYWRkZigmb3V0LCAiICVzJS0qcyB8IiwgcHJlZml4LCBsZW4sIG5hbWUpOworCQlzdHJidWZfYWRkZigmb3V0LCAiICUqIlBSSXVNQVgiJXMiLAorCQkJbnVtYmVyX3dpZHRoLCBhZGRlZCArIGRlbGV0ZWQsCisJCQlhZGRlZCArIGRlbGV0ZWQgPyAiICIgOiAiIik7CisJCXNob3dfZ3JhcGgoJm91dCwgJysnLCBhZGQsIGFkZF9jLCByZXNldCk7CisJCXNob3dfZ3JhcGgoJm91dCwgJy0nLCBkZWwsIGRlbF9jLCByZXNldCk7CisJCXN0cmJ1Zl9hZGRjaCgmb3V0LCAnXG4nKTsKKwkJZW1pdF9kaWZmX3N5bWJvbChvcHRpb25zLCBESUZGX1NZTUJPTF9TVEFUU19MSU5FLAorCQkJCSBvdXQuYnVmLCBvdXQubGVuLCAwKTsKKwkJc3RyYnVmX3Jlc2V0KCZvdXQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmc3RhdF9maWxlICpmaWxlID0gZGF0YS0+ZmlsZXNbaV07CisJCXVpbnRtYXhfdCBhZGRlZCA9IGZpbGUtPmFkZGVkOworCQl1aW50bWF4X3QgZGVsZXRlZCA9IGZpbGUtPmRlbGV0ZWQ7CisKKwkJaWYgKGZpbGUtPmlzX3VubWVyZ2VkIHx8CisJCSAgICAoIWZpbGUtPmlzX2ludGVyZXN0aW5nICYmIChhZGRlZCArIGRlbGV0ZWQgPT0gMCkpKSB7CisJCQl0b3RhbF9maWxlcy0tOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWZpbGUtPmlzX2JpbmFyeSkgeworCQkJYWRkcyArPSBhZGRlZDsKKwkJCWRlbHMgKz0gZGVsZXRlZDsKKwkJfQorCQlpZiAoaSA8IGNvdW50KQorCQkJY29udGludWU7CisJCWlmICghZXh0cmFfc2hvd24pCisJCQllbWl0X2RpZmZfc3ltYm9sKG9wdGlvbnMsCisJCQkJCSBESUZGX1NZTUJPTF9TVEFUU19TVU1NQVJZX0FCQlJFViwKKwkJCQkJIE5VTEwsIDAsIDApOworCQlleHRyYV9zaG93biA9IDE7CisJfQorCisJcHJpbnRfc3RhdF9zdW1tYXJ5X2luc2VydHNfZGVsZXRlcyhvcHRpb25zLCB0b3RhbF9maWxlcywgYWRkcywgZGVscyk7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc2hvcnRzdGF0cyhzdHJ1Y3QgZGlmZnN0YXRfdCAqZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaSwgYWRkcyA9IDAsIGRlbHMgPSAwLCB0b3RhbF9maWxlcyA9IGRhdGEtPm5yOworCisJaWYgKGRhdGEtPm5yID09IDApCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucjsgaSsrKSB7CisJCWludCBhZGRlZCA9IGRhdGEtPmZpbGVzW2ldLT5hZGRlZDsKKwkJaW50IGRlbGV0ZWQgPSBkYXRhLT5maWxlc1tpXS0+ZGVsZXRlZDsKKworCQlpZiAoZGF0YS0+ZmlsZXNbaV0tPmlzX3VubWVyZ2VkIHx8CisJCSAgICAoIWRhdGEtPmZpbGVzW2ldLT5pc19pbnRlcmVzdGluZyAmJiAoYWRkZWQgKyBkZWxldGVkID09IDApKSkgeworCQkJdG90YWxfZmlsZXMtLTsKKwkJfSBlbHNlIGlmICghZGF0YS0+ZmlsZXNbaV0tPmlzX2JpbmFyeSkgeyAvKiBkb24ndCBjb3VudCBieXRlcyAqLworCQkJYWRkcyArPSBhZGRlZDsKKwkJCWRlbHMgKz0gZGVsZXRlZDsKKwkJfQorCX0KKwlwcmludF9zdGF0X3N1bW1hcnlfaW5zZXJ0c19kZWxldGVzKG9wdGlvbnMsIHRvdGFsX2ZpbGVzLCBhZGRzLCBkZWxzKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19udW1zdGF0KHN0cnVjdCBkaWZmc3RhdF90ICpkYXRhLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpOworCisJaWYgKGRhdGEtPm5yID09IDApCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmc3RhdF9maWxlICpmaWxlID0gZGF0YS0+ZmlsZXNbaV07CisKKwkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJXMiLCBkaWZmX2xpbmVfcHJlZml4KG9wdGlvbnMpKTsKKworCQlpZiAoZmlsZS0+aXNfYmluYXJ5KQorCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiLVx0LVx0Iik7CisJCWVsc2UKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwKKwkJCQkiJSJQUkl1TUFYIlx0JSJQUkl1TUFYIlx0IiwKKwkJCQlmaWxlLT5hZGRlZCwgZmlsZS0+ZGVsZXRlZCk7CisJCWlmIChvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uKSB7CisJCQlmaWxsX3ByaW50X25hbWUoZmlsZSk7CisJCQlpZiAoIWZpbGUtPmlzX3JlbmFtZWQpCisJCQkJd3JpdGVfbmFtZV9xdW90ZWQoZmlsZS0+bmFtZSwgb3B0aW9ucy0+ZmlsZSwKKwkJCQkJCSAgb3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbik7CisJCQllbHNlIHsKKwkJCQlmcHV0cyhmaWxlLT5wcmludF9uYW1lLCBvcHRpb25zLT5maWxlKTsKKwkJCQlwdXRjKG9wdGlvbnMtPmxpbmVfdGVybWluYXRpb24sIG9wdGlvbnMtPmZpbGUpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGZpbGUtPmlzX3JlbmFtZWQpIHsKKwkJCQlwdXRjKCdcMCcsIG9wdGlvbnMtPmZpbGUpOworCQkJCXdyaXRlX25hbWVfcXVvdGVkKGZpbGUtPmZyb21fbmFtZSwgb3B0aW9ucy0+ZmlsZSwgJ1wwJyk7CisJCQl9CisJCQl3cml0ZV9uYW1lX3F1b3RlZChmaWxlLT5uYW1lLCBvcHRpb25zLT5maWxlLCAnXDAnKTsKKwkJfQorCX0KK30KKworc3RydWN0IGRpcnN0YXRfZmlsZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIGNoYW5nZWQ7Cit9OworCitzdHJ1Y3QgZGlyc3RhdF9kaXIgeworCXN0cnVjdCBkaXJzdGF0X2ZpbGUgKmZpbGVzOworCWludCBhbGxvYywgbnIsIHBlcm1pbGxlLCBjdW11bGF0aXZlOworfTsKKworc3RhdGljIGxvbmcgZ2F0aGVyX2RpcnN0YXQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCBzdHJ1Y3QgZGlyc3RhdF9kaXIgKmRpciwKKwkJdW5zaWduZWQgbG9uZyBjaGFuZ2VkLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbikKK3sKKwl1bnNpZ25lZCBsb25nIHN1bV9jaGFuZ2VzID0gMDsKKwl1bnNpZ25lZCBpbnQgc291cmNlcyA9IDA7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXggPSBkaWZmX2xpbmVfcHJlZml4KG9wdCk7CisKKwl3aGlsZSAoZGlyLT5ucikgeworCQlzdHJ1Y3QgZGlyc3RhdF9maWxlICpmID0gZGlyLT5maWxlczsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4oZi0+bmFtZSk7CisJCXVuc2lnbmVkIGxvbmcgY2hhbmdlczsKKwkJY2hhciAqc2xhc2g7CisKKwkJaWYgKG5hbWVsZW4gPCBiYXNlbGVuKQorCQkJYnJlYWs7CisJCWlmIChtZW1jbXAoZi0+bmFtZSwgYmFzZSwgYmFzZWxlbikpCisJCQlicmVhazsKKwkJc2xhc2ggPSBzdHJjaHIoZi0+bmFtZSArIGJhc2VsZW4sICcvJyk7CisJCWlmIChzbGFzaCkgeworCQkJaW50IG5ld2Jhc2VsZW4gPSBzbGFzaCArIDEgLSBmLT5uYW1lOworCQkJY2hhbmdlcyA9IGdhdGhlcl9kaXJzdGF0KG9wdCwgZGlyLCBjaGFuZ2VkLCBmLT5uYW1lLCBuZXdiYXNlbGVuKTsKKwkJCXNvdXJjZXMrKzsKKwkJfSBlbHNlIHsKKwkJCWNoYW5nZXMgPSBmLT5jaGFuZ2VkOworCQkJZGlyLT5maWxlcysrOworCQkJZGlyLT5uci0tOworCQkJc291cmNlcyArPSAyOworCQl9CisJCXN1bV9jaGFuZ2VzICs9IGNoYW5nZXM7CisJfQorCisJLyoKKwkgKiBXZSBkb24ndCByZXBvcnQgZGlyc3RhdCdzIGZvcgorCSAqICAtIHRoZSB0b3AgbGV2ZWwKKwkgKiAgLSBvciBjYXNlcyB3aGVyZSBldmVyeXRoaW5nIGNhbWUgZnJvbSBhIHNpbmdsZSBkaXJlY3RvcnkKKwkgKiAgICB1bmRlciB0aGlzIGRpcmVjdG9yeSAoc291cmNlcyA9PSAxKS4KKwkgKi8KKwlpZiAoYmFzZWxlbiAmJiBzb3VyY2VzICE9IDEpIHsKKwkJaWYgKHN1bV9jaGFuZ2VzKSB7CisJCQlpbnQgcGVybWlsbGUgPSBzdW1fY2hhbmdlcyAqIDEwMDAgLyBjaGFuZ2VkOworCQkJaWYgKHBlcm1pbGxlID49IGRpci0+cGVybWlsbGUpIHsKKwkJCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzJTRkLiUwMWQlJSAlLipzXG4iLCBsaW5lX3ByZWZpeCwKKwkJCQkJcGVybWlsbGUgLyAxMCwgcGVybWlsbGUgJSAxMCwgYmFzZWxlbiwgYmFzZSk7CisJCQkJaWYgKCFkaXItPmN1bXVsYXRpdmUpCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXJldHVybiBzdW1fY2hhbmdlczsKK30KKworc3RhdGljIGludCBkaXJzdGF0X2NvbXBhcmUoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBkaXJzdGF0X2ZpbGUgKmEgPSBfYTsKKwljb25zdCBzdHJ1Y3QgZGlyc3RhdF9maWxlICpiID0gX2I7CisJcmV0dXJuIHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19kaXJzdGF0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjaGFuZ2VkOworCXN0cnVjdCBkaXJzdGF0X2RpciBkaXI7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisKKwlkaXIuZmlsZXMgPSBOVUxMOworCWRpci5hbGxvYyA9IDA7CisJZGlyLm5yID0gMDsKKwlkaXIucGVybWlsbGUgPSBvcHRpb25zLT5kaXJzdGF0X3Blcm1pbGxlOworCWRpci5jdW11bGF0aXZlID0gb3B0aW9ucy0+ZmxhZ3MuZGlyc3RhdF9jdW11bGF0aXZlOworCisJY2hhbmdlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgbG9uZyBjb3BpZWQsIGFkZGVkLCBkYW1hZ2U7CisKKwkJbmFtZSA9IHAtPnR3by0+cGF0aCA/IHAtPnR3by0+cGF0aCA6IHAtPm9uZS0+cGF0aDsKKworCQlpZiAocC0+b25lLT5vaWRfdmFsaWQgJiYgcC0+dHdvLT5vaWRfdmFsaWQgJiYKKwkJICAgIG9pZGVxKCZwLT5vbmUtPm9pZCwgJnAtPnR3by0+b2lkKSkgeworCQkJLyoKKwkJCSAqIFRoZSBTSEExIGhhcyBub3QgY2hhbmdlZCwgc28gcHJlLS9wb3N0LWNvbnRlbnQgaXMKKwkJCSAqIGlkZW50aWNhbC4gV2UgY2FuIHRoZXJlZm9yZSBza2lwIGxvb2tpbmcgYXQgdGhlCisJCQkgKiBmaWxlIGNvbnRlbnRzIGFsdG9nZXRoZXIuCisJCQkgKi8KKwkJCWRhbWFnZSA9IDA7CisJCQlnb3RvIGZvdW5kX2RhbWFnZTsKKwkJfQorCisJCWlmIChvcHRpb25zLT5mbGFncy5kaXJzdGF0X2J5X2ZpbGUpIHsKKwkJCS8qCisJCQkgKiBJbiAtLWRpcnN0YXQtYnktZmlsZSBtb2RlLCB3ZSBkb24ndCByZWFsbHkgbmVlZCB0bworCQkJICogbG9vayBhdCB0aGUgYWN0dWFsIGZpbGUgY29udGVudHMgYXQgYWxsLgorCQkJICogVGhlIGZhY3QgdGhhdCB0aGUgU0hBMSBjaGFuZ2VkIGlzIGVub3VnaCBmb3IgdXMgdG8KKwkJCSAqIGFkZCB0aGlzIGZpbGUgdG8gdGhlIGxpc3Qgb2YgcmVzdWx0cworCQkJICogKHdpdGggZWFjaCBmaWxlIGNvbnRyaWJ1dGluZyBlcXVhbCBkYW1hZ2UpLgorCQkJICovCisJCQlkYW1hZ2UgPSAxOworCQkJZ290byBmb3VuZF9kYW1hZ2U7CisJCX0KKworCQlpZiAoRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgJiYgRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob3B0aW9ucy0+cmVwbywgcC0+b25lLCAwKTsKKwkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob3B0aW9ucy0+cmVwbywgcC0+dHdvLCAwKTsKKwkJCWRpZmZjb3JlX2NvdW50X2NoYW5nZXMob3B0aW9ucy0+cmVwbywKKwkJCQkJICAgICAgIHAtPm9uZSwgcC0+dHdvLCBOVUxMLCBOVUxMLAorCQkJCQkgICAgICAgJmNvcGllZCwgJmFkZGVkKTsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPm9uZSk7CisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT50d28pOworCQl9IGVsc2UgaWYgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpKSB7CisJCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG9wdGlvbnMtPnJlcG8sIHAtPm9uZSwgQ0hFQ0tfU0laRV9PTkxZKTsKKwkJCWNvcGllZCA9IGFkZGVkID0gMDsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPm9uZSk7CisJCX0gZWxzZSBpZiAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob3B0aW9ucy0+cmVwbywgcC0+dHdvLCBDSEVDS19TSVpFX09OTFkpOworCQkJY29waWVkID0gMDsKKwkJCWFkZGVkID0gcC0+dHdvLT5zaXplOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKwkJfSBlbHNlCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBPcmlnaW5hbCBtaW51cyBjb3BpZWQgaXMgdGhlIHJlbW92ZWQgbWF0ZXJpYWwsCisJCSAqIGFkZGVkIGlzIHRoZSBuZXcgbWF0ZXJpYWwuICBUaGV5IGFyZSBib3RoIGRhbWFnZXMKKwkJICogbWFkZSB0byB0aGUgcHJlaW1hZ2UuCisJCSAqIElmIHRoZSByZXN1bHRpbmcgZGFtYWdlIGlzIHplcm8sIHdlIGtub3cgdGhhdAorCQkgKiBkaWZmY29yZV9jb3VudF9jaGFuZ2VzKCkgY29uc2lkZXJzIHRoZSB0d28gZW50cmllcyB0bworCQkgKiBiZSBpZGVudGljYWwsIGJ1dCBzaW5jZSB0aGUgb2lkIGNoYW5nZWQsIHdlCisJCSAqIGtub3cgdGhhdCB0aGVyZSBtdXN0IGhhdmUgYmVlbiBfc29tZV8ga2luZCBvZiBjaGFuZ2UsCisJCSAqIHNvIHdlIGZvcmNlIGFsbCBlbnRyaWVzIHRvIGhhdmUgZGFtYWdlID4gMC4KKwkJICovCisJCWRhbWFnZSA9IChwLT5vbmUtPnNpemUgLSBjb3BpZWQpICsgYWRkZWQ7CisJCWlmICghZGFtYWdlKQorCQkJZGFtYWdlID0gMTsKKworZm91bmRfZGFtYWdlOgorCQlBTExPQ19HUk9XKGRpci5maWxlcywgZGlyLm5yICsgMSwgZGlyLmFsbG9jKTsKKwkJZGlyLmZpbGVzW2Rpci5ucl0ubmFtZSA9IG5hbWU7CisJCWRpci5maWxlc1tkaXIubnJdLmNoYW5nZWQgPSBkYW1hZ2U7CisJCWNoYW5nZWQgKz0gZGFtYWdlOworCQlkaXIubnIrKzsKKwl9CisKKwkvKiBUaGlzIGNhbiBoYXBwZW4gZXZlbiB3aXRoIG1hbnkgZmlsZXMsIGlmIGV2ZXJ5dGhpbmcgd2FzIHJlbmFtZXMgKi8KKwlpZiAoIWNoYW5nZWQpCisJCXJldHVybjsKKworCS8qIFNob3cgYWxsIGRpcmVjdG9yaWVzIHdpdGggbW9yZSB0aGFuIHglIG9mIHRoZSBjaGFuZ2VzICovCisJUVNPUlQoZGlyLmZpbGVzLCBkaXIubnIsIGRpcnN0YXRfY29tcGFyZSk7CisJZ2F0aGVyX2RpcnN0YXQob3B0aW9ucywgJmRpciwgY2hhbmdlZCwgIiIsIDApOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RpcnN0YXRfYnlfbGluZShzdHJ1Y3QgZGlmZnN0YXRfdCAqZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGNoYW5nZWQ7CisJc3RydWN0IGRpcnN0YXRfZGlyIGRpcjsKKworCWlmIChkYXRhLT5uciA9PSAwKQorCQlyZXR1cm47CisKKwlkaXIuZmlsZXMgPSBOVUxMOworCWRpci5hbGxvYyA9IDA7CisJZGlyLm5yID0gMDsKKwlkaXIucGVybWlsbGUgPSBvcHRpb25zLT5kaXJzdGF0X3Blcm1pbGxlOworCWRpci5jdW11bGF0aXZlID0gb3B0aW9ucy0+ZmxhZ3MuZGlyc3RhdF9jdW11bGF0aXZlOworCisJY2hhbmdlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUgPSBkYXRhLT5maWxlc1tpXTsKKwkJdW5zaWduZWQgbG9uZyBkYW1hZ2UgPSBmaWxlLT5hZGRlZCArIGZpbGUtPmRlbGV0ZWQ7CisJCWlmIChmaWxlLT5pc19iaW5hcnkpCisJCQkvKgorCQkJICogYmluYXJ5IGZpbGVzIGNvdW50cyBieXRlcywgbm90IGxpbmVzLiBNdXN0IGZpbmQgc29tZQorCQkJICogd2F5IHRvIG5vcm1hbGl6ZSBiaW5hcnkgYnl0ZXMgdnMuIHRleHR1YWwgbGluZXMuCisJCQkgKiBUaGUgZm9sbG93aW5nIGhldXJpc3RpYyBhc3N1bWVzIHRoYXQgdGhlcmUgYXJlIDY0CisJCQkgKiBieXRlcyBwZXIgImxpbmUiLgorCQkJICogVGhpcyBpcyBzdHVwaWQgYW5kIHVnbHksIGJ1dCB2ZXJ5IGNoZWFwLi4uCisJCQkgKi8KKwkJCWRhbWFnZSA9IERJVl9ST1VORF9VUChkYW1hZ2UsIDY0KTsKKwkJQUxMT0NfR1JPVyhkaXIuZmlsZXMsIGRpci5uciArIDEsIGRpci5hbGxvYyk7CisJCWRpci5maWxlc1tkaXIubnJdLm5hbWUgPSBmaWxlLT5uYW1lOworCQlkaXIuZmlsZXNbZGlyLm5yXS5jaGFuZ2VkID0gZGFtYWdlOworCQljaGFuZ2VkICs9IGRhbWFnZTsKKwkJZGlyLm5yKys7CisJfQorCisJLyogVGhpcyBjYW4gaGFwcGVuIGV2ZW4gd2l0aCBtYW55IGZpbGVzLCBpZiBldmVyeXRoaW5nIHdhcyByZW5hbWVzICovCisJaWYgKCFjaGFuZ2VkKQorCQlyZXR1cm47CisKKwkvKiBTaG93IGFsbCBkaXJlY3RvcmllcyB3aXRoIG1vcmUgdGhhbiB4JSBvZiB0aGUgY2hhbmdlcyAqLworCVFTT1JUKGRpci5maWxlcywgZGlyLm5yLCBkaXJzdGF0X2NvbXBhcmUpOworCWdhdGhlcl9kaXJzdGF0KG9wdGlvbnMsICZkaXIsIGNoYW5nZWQsICIiLCAwKTsKK30KKwordm9pZCBmcmVlX2RpZmZzdGF0X2luZm8oc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkaWZmc3RhdC0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZiA9IGRpZmZzdGF0LT5maWxlc1tpXTsKKwkJZnJlZShmLT5wcmludF9uYW1lKTsKKwkJZnJlZShmLT5uYW1lKTsKKwkJZnJlZShmLT5mcm9tX25hbWUpOworCQlmcmVlKGYpOworCX0KKwlmcmVlKGRpZmZzdGF0LT5maWxlcyk7Cit9CisKK3N0cnVjdCBjaGVja2RpZmZfdCB7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJaW50IGxpbmVubzsKKwlpbnQgY29uZmxpY3RfbWFya2VyX3NpemU7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqbzsKKwl1bnNpZ25lZCB3c19ydWxlOworCXVuc2lnbmVkIHN0YXR1czsKK307CisKK3N0YXRpYyBpbnQgaXNfY29uZmxpY3RfbWFya2VyKGNvbnN0IGNoYXIgKmxpbmUsIGludCBtYXJrZXJfc2l6ZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJY2hhciBmaXJzdGNoYXI7CisJaW50IGNudDsKKworCWlmIChsZW4gPCBtYXJrZXJfc2l6ZSArIDEpCisJCXJldHVybiAwOworCWZpcnN0Y2hhciA9IGxpbmVbMF07CisJc3dpdGNoIChmaXJzdGNoYXIpIHsKKwljYXNlICc9JzogY2FzZSAnPic6IGNhc2UgJzwnOiBjYXNlICd8JzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCWZvciAoY250ID0gMTsgY250IDwgbWFya2VyX3NpemU7IGNudCsrKQorCQlpZiAobGluZVtjbnRdICE9IGZpcnN0Y2hhcikKKwkJCXJldHVybiAwOworCS8qIGxpbmVbMV0gdGhyb3VnaCBsaW5lW21hcmtlcl9zaXplLTFdIGFyZSBzYW1lIGFzIGZpcnN0Y2hhciAqLworCWlmIChsZW4gPCBtYXJrZXJfc2l6ZSArIDEgfHwgIWlzc3BhY2UobGluZVttYXJrZXJfc2l6ZV0pKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tkaWZmX2NvbnN1bWVfaHVuayh2b2lkICpwcml2LAorCQkJCSAgIGxvbmcgb2IsIGxvbmcgb24sIGxvbmcgbmIsIGxvbmcgbm4sCisJCQkJICAgY29uc3QgY2hhciAqZnVuYywgbG9uZyBmdW5jbGVuKQorCit7CisJc3RydWN0IGNoZWNrZGlmZl90ICpkYXRhID0gcHJpdjsKKwlkYXRhLT5saW5lbm8gPSBuYiAtIDE7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrZGlmZl9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBjaGVja2RpZmZfdCAqZGF0YSA9IHByaXY7CisJaW50IG1hcmtlcl9zaXplID0gZGF0YS0+Y29uZmxpY3RfbWFya2VyX3NpemU7CisJY29uc3QgY2hhciAqd3MgPSBkaWZmX2dldF9jb2xvcihkYXRhLT5vLT51c2VfY29sb3IsIERJRkZfV0hJVEVTUEFDRSk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcihkYXRhLT5vLT51c2VfY29sb3IsIERJRkZfUkVTRVQpOworCWNvbnN0IGNoYXIgKnNldCA9IGRpZmZfZ2V0X2NvbG9yKGRhdGEtPm8tPnVzZV9jb2xvciwgRElGRl9GSUxFX05FVyk7CisJY2hhciAqZXJyOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4OworCisJYXNzZXJ0KGRhdGEtPm8pOworCWxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChkYXRhLT5vKTsKKworCWlmIChsaW5lWzBdID09ICcrJykgeworCQl1bnNpZ25lZCBiYWQ7CisJCWRhdGEtPmxpbmVubysrOworCQlpZiAoaXNfY29uZmxpY3RfbWFya2VyKGxpbmUgKyAxLCBtYXJrZXJfc2l6ZSwgbGVuIC0gMSkpIHsKKwkJCWRhdGEtPnN0YXR1cyB8PSAxOworCQkJZnByaW50ZihkYXRhLT5vLT5maWxlLAorCQkJCSIlcyVzOiVkOiBsZWZ0b3ZlciBjb25mbGljdCBtYXJrZXJcbiIsCisJCQkJbGluZV9wcmVmaXgsIGRhdGEtPmZpbGVuYW1lLCBkYXRhLT5saW5lbm8pOworCQl9CisJCWJhZCA9IHdzX2NoZWNrKGxpbmUgKyAxLCBsZW4gLSAxLCBkYXRhLT53c19ydWxlKTsKKwkJaWYgKCFiYWQpCisJCQlyZXR1cm47CisJCWRhdGEtPnN0YXR1cyB8PSBiYWQ7CisJCWVyciA9IHdoaXRlc3BhY2VfZXJyb3Jfc3RyaW5nKGJhZCk7CisJCWZwcmludGYoZGF0YS0+by0+ZmlsZSwgIiVzJXM6JWQ6ICVzLlxuIiwKKwkJCWxpbmVfcHJlZml4LCBkYXRhLT5maWxlbmFtZSwgZGF0YS0+bGluZW5vLCBlcnIpOworCQlmcmVlKGVycik7CisJCWVtaXRfbGluZShkYXRhLT5vLCBzZXQsIHJlc2V0LCBsaW5lLCAxKTsKKwkJd3NfY2hlY2tfZW1pdChsaW5lICsgMSwgbGVuIC0gMSwgZGF0YS0+d3NfcnVsZSwKKwkJCSAgICAgIGRhdGEtPm8tPmZpbGUsIHNldCwgcmVzZXQsIHdzKTsKKwl9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJyAnKSB7CisJCWRhdGEtPmxpbmVubysrOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRlZmxhdGVfaXQoY2hhciAqZGF0YSwKKwkJCQkgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSB1bnNpZ25lZCBsb25nICpyZXN1bHRfc2l6ZSkKK3sKKwlpbnQgYm91bmQ7CisJdW5zaWduZWQgY2hhciAqZGVmbGF0ZWQ7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCisJZ2l0X2RlZmxhdGVfaW5pdCgmc3RyZWFtLCB6bGliX2NvbXByZXNzaW9uX2xldmVsKTsKKwlib3VuZCA9IGdpdF9kZWZsYXRlX2JvdW5kKCZzdHJlYW0sIHNpemUpOworCWRlZmxhdGVkID0geG1hbGxvYyhib3VuZCk7CisJc3RyZWFtLm5leHRfb3V0ID0gZGVmbGF0ZWQ7CisJc3RyZWFtLmF2YWlsX291dCA9IGJvdW5kOworCisJc3RyZWFtLm5leHRfaW4gPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisJc3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKKwl3aGlsZSAoZ2l0X2RlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpID09IFpfT0spCisJCTsgLyogbm90aGluZyAqLworCWdpdF9kZWZsYXRlX2VuZCgmc3RyZWFtKTsKKwkqcmVzdWx0X3NpemUgPSBzdHJlYW0udG90YWxfb3V0OworCXJldHVybiBkZWZsYXRlZDsKK30KKworc3RhdGljIHZvaWQgZW1pdF9iaW5hcnlfZGlmZl9ib2R5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkJICBtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvKQoreworCXZvaWQgKmNwOworCXZvaWQgKmRlbHRhOworCXZvaWQgKmRlZmxhdGVkOworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBvcmlnX3NpemU7CisJdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplOworCXVuc2lnbmVkIGxvbmcgZGVmbGF0ZV9zaXplOworCXVuc2lnbmVkIGxvbmcgZGF0YV9zaXplOworCisJLyogV2UgY291bGQgZG8gZGVmbGF0ZWQgZGVsdGEsIG9yIHdlIGNvdWxkIGRvIGp1c3QgZGVmbGF0ZWQgdHdvLAorCSAqIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorCSAqLworCWRlbHRhID0gTlVMTDsKKwlkZWZsYXRlZCA9IGRlZmxhdGVfaXQodHdvLT5wdHIsIHR3by0+c2l6ZSwgJmRlZmxhdGVfc2l6ZSk7CisJaWYgKG9uZS0+c2l6ZSAmJiB0d28tPnNpemUpIHsKKwkJZGVsdGEgPSBkaWZmX2RlbHRhKG9uZS0+cHRyLCBvbmUtPnNpemUsCisJCQkJICAgdHdvLT5wdHIsIHR3by0+c2l6ZSwKKwkJCQkgICAmZGVsdGFfc2l6ZSwgZGVmbGF0ZV9zaXplKTsKKwkJaWYgKGRlbHRhKSB7CisJCQl2b2lkICp0b19mcmVlID0gZGVsdGE7CisJCQlvcmlnX3NpemUgPSBkZWx0YV9zaXplOworCQkJZGVsdGEgPSBkZWZsYXRlX2l0KGRlbHRhLCBkZWx0YV9zaXplLCAmZGVsdGFfc2l6ZSk7CisJCQlmcmVlKHRvX2ZyZWUpOworCQl9CisJfQorCisJaWYgKGRlbHRhICYmIGRlbHRhX3NpemUgPCBkZWZsYXRlX3NpemUpIHsKKwkJY2hhciAqcyA9IHhzdHJmbXQoIiUiUFJJdU1BWCAsICh1aW50bWF4X3Qpb3JpZ19zaXplKTsKKwkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9CSU5BUllfRElGRl9IRUFERVJfREVMVEEsCisJCQkJIHMsIHN0cmxlbihzKSwgMCk7CisJCWZyZWUocyk7CisJCWZyZWUoZGVmbGF0ZWQpOworCQlkYXRhID0gZGVsdGE7CisJCWRhdGFfc2l6ZSA9IGRlbHRhX3NpemU7CisJfSBlbHNlIHsKKwkJY2hhciAqcyA9IHhzdHJmbXQoIiVsdSIsIHR3by0+c2l6ZSk7CisJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfSEVBREVSX0xJVEVSQUwsCisJCQkJIHMsIHN0cmxlbihzKSwgMCk7CisJCWZyZWUocyk7CisJCWZyZWUoZGVsdGEpOworCQlkYXRhID0gZGVmbGF0ZWQ7CisJCWRhdGFfc2l6ZSA9IGRlZmxhdGVfc2l6ZTsKKwl9CisKKwkvKiBlbWl0IGRhdGEgZW5jb2RlZCBpbiBiYXNlODUgKi8KKwljcCA9IGRhdGE7CisJd2hpbGUgKGRhdGFfc2l6ZSkgeworCQlpbnQgbGVuOworCQlpbnQgYnl0ZXMgPSAoNTIgPCBkYXRhX3NpemUpID8gNTIgOiBkYXRhX3NpemU7CisJCWNoYXIgbGluZVs3MV07CisJCWRhdGFfc2l6ZSAtPSBieXRlczsKKwkJaWYgKGJ5dGVzIDw9IDI2KQorCQkJbGluZVswXSA9IGJ5dGVzICsgJ0EnIC0gMTsKKwkJZWxzZQorCQkJbGluZVswXSA9IGJ5dGVzIC0gMjYgKyAnYScgLSAxOworCQllbmNvZGVfODUobGluZSArIDEsIGNwLCBieXRlcyk7CisJCWNwID0gKGNoYXIgKikgY3AgKyBieXRlczsKKworCQlsZW4gPSBzdHJsZW4obGluZSk7CisJCWxpbmVbbGVuKytdID0gJ1xuJzsKKwkJbGluZVtsZW5dID0gJ1wwJzsKKworCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0JJTkFSWV9ESUZGX0JPRFksCisJCQkJIGxpbmUsIGxlbiwgMCk7CisJfQorCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfQklOQVJZX0RJRkZfRk9PVEVSLCBOVUxMLCAwLCAwKTsKKwlmcmVlKGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2JpbmFyeV9kaWZmKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgICAgIG1tZmlsZV90ICpvbmUsIG1tZmlsZV90ICp0d28pCit7CisJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9CSU5BUllfRElGRl9IRUFERVIsIE5VTEwsIDAsIDApOworCWVtaXRfYmluYXJ5X2RpZmZfYm9keShvLCBvbmUsIHR3byk7CisJZW1pdF9iaW5hcnlfZGlmZl9ib2R5KG8sIHR3bywgb25lKTsKK30KKworaW50IGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJaWYgKG9uZS0+aXNfYmluYXJ5ID09IC0xKSB7CisJCWRpZmZfZmlsZXNwZWNfbG9hZF9kcml2ZXIob25lLCByLT5pbmRleCk7CisJCWlmIChvbmUtPmRyaXZlci0+YmluYXJ5ICE9IC0xKQorCQkJb25lLT5pc19iaW5hcnkgPSBvbmUtPmRyaXZlci0+YmluYXJ5OworCQllbHNlIHsKKwkJCWlmICghb25lLT5kYXRhICYmIERJRkZfRklMRV9WQUxJRChvbmUpKQorCQkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgb25lLCBDSEVDS19CSU5BUlkpOworCQkJaWYgKG9uZS0+aXNfYmluYXJ5ID09IC0xICYmIG9uZS0+ZGF0YSkKKwkJCQlvbmUtPmlzX2JpbmFyeSA9IGJ1ZmZlcl9pc19iaW5hcnkob25lLT5kYXRhLAorCQkJCQkJb25lLT5zaXplKTsKKwkJCWlmIChvbmUtPmlzX2JpbmFyeSA9PSAtMSkKKwkJCQlvbmUtPmlzX2JpbmFyeSA9IDA7CisJCX0KKwl9CisJcmV0dXJuIG9uZS0+aXNfYmluYXJ5OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lICoKK2RpZmZfZnVuY25hbWVfcGF0dGVybihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWRpZmZfZmlsZXNwZWNfbG9hZF9kcml2ZXIob25lLCBvLT5yZXBvLT5pbmRleCk7CisJcmV0dXJuIG9uZS0+ZHJpdmVyLT5mdW5jbmFtZS5wYXR0ZXJuID8gJm9uZS0+ZHJpdmVyLT5mdW5jbmFtZSA6IE5VTEw7Cit9CisKK3ZvaWQgZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJaWYgKCFvcHRpb25zLT5hX3ByZWZpeCkKKwkJb3B0aW9ucy0+YV9wcmVmaXggPSBhOworCWlmICghb3B0aW9ucy0+Yl9wcmVmaXgpCisJCW9wdGlvbnMtPmJfcHJlZml4ID0gYjsKK30KKworc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZ2V0X3RleHRjb252KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKK3sKKwlpZiAoIURJRkZfRklMRV9WQUxJRChvbmUpKQorCQlyZXR1cm4gTlVMTDsKKworCWRpZmZfZmlsZXNwZWNfbG9hZF9kcml2ZXIob25lLCByLT5pbmRleCk7CisJcmV0dXJuIHVzZXJkaWZmX2dldF90ZXh0Y29udihyLCBvbmUtPmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWx0aW5fZGlmZihjb25zdCBjaGFyICpuYW1lX2EsCisJCQkgY29uc3QgY2hhciAqbmFtZV9iLAorCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSBjb25zdCBjaGFyICp4ZnJtX21zZywKKwkJCSBpbnQgbXVzdF9zaG93X2hlYWRlciwKKwkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJIGludCBjb21wbGV0ZV9yZXdyaXRlKQoreworCW1tZmlsZV90IG1mMSwgbWYyOworCWNvbnN0IGNoYXIgKmxibFsyXTsKKwljaGFyICphX29uZSwgKmJfdHdvOworCWNvbnN0IGNoYXIgKm1ldGEgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJY29uc3QgY2hhciAqYV9wcmVmaXgsICpiX3ByZWZpeDsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl9vbmUgPSBOVUxMOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X3R3byA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBoZWFkZXIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgobyk7CisKKwlkaWZmX3NldF9tbmVtb25pY19wcmVmaXgobywgImEvIiwgImIvIik7CisJaWYgKG8tPmZsYWdzLnJldmVyc2VfZGlmZikgeworCQlhX3ByZWZpeCA9IG8tPmJfcHJlZml4OworCQliX3ByZWZpeCA9IG8tPmFfcHJlZml4OworCX0gZWxzZSB7CisJCWFfcHJlZml4ID0gby0+YV9wcmVmaXg7CisJCWJfcHJlZml4ID0gby0+Yl9wcmVmaXg7CisJfQorCisJaWYgKG8tPnN1Ym1vZHVsZV9mb3JtYXQgPT0gRElGRl9TVUJNT0RVTEVfTE9HICYmCisJICAgICghb25lLT5tb2RlIHx8IFNfSVNHSVRMSU5LKG9uZS0+bW9kZSkpICYmCisJICAgICghdHdvLT5tb2RlIHx8IFNfSVNHSVRMSU5LKHR3by0+bW9kZSkpKSB7CisJCXNob3dfc3VibW9kdWxlX3N1bW1hcnkobywgb25lLT5wYXRoID8gb25lLT5wYXRoIDogdHdvLT5wYXRoLAorCQkJCSZvbmUtPm9pZCwgJnR3by0+b2lkLAorCQkJCXR3by0+ZGlydHlfc3VibW9kdWxlKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoby0+c3VibW9kdWxlX2Zvcm1hdCA9PSBESUZGX1NVQk1PRFVMRV9JTkxJTkVfRElGRiAmJgorCQkgICAoIW9uZS0+bW9kZSB8fCBTX0lTR0lUTElOSyhvbmUtPm1vZGUpKSAmJgorCQkgICAoIXR3by0+bW9kZSB8fCBTX0lTR0lUTElOSyh0d28tPm1vZGUpKSkgeworCQlzaG93X3N1Ym1vZHVsZV9pbmxpbmVfZGlmZihvLCBvbmUtPnBhdGggPyBvbmUtPnBhdGggOiB0d28tPnBhdGgsCisJCQkJJm9uZS0+b2lkLCAmdHdvLT5vaWQsCisJCQkJdHdvLT5kaXJ0eV9zdWJtb2R1bGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKG8tPmZsYWdzLmFsbG93X3RleHRjb252KSB7CisJCXRleHRjb252X29uZSA9IGdldF90ZXh0Y29udihvLT5yZXBvLCBvbmUpOworCQl0ZXh0Y29udl90d28gPSBnZXRfdGV4dGNvbnYoby0+cmVwbywgdHdvKTsKKwl9CisKKwkvKiBOZXZlciB1c2UgYSBub24tdmFsaWQgZmlsZW5hbWUgYW55d2hlcmUgaWYgYXQgYWxsIHBvc3NpYmxlICovCisJbmFtZV9hID0gRElGRl9GSUxFX1ZBTElEKG9uZSkgPyBuYW1lX2EgOiBuYW1lX2I7CisJbmFtZV9iID0gRElGRl9GSUxFX1ZBTElEKHR3bykgPyBuYW1lX2IgOiBuYW1lX2E7CisKKwlhX29uZSA9IHF1b3RlX3R3byhhX3ByZWZpeCwgbmFtZV9hICsgKCpuYW1lX2EgPT0gJy8nKSk7CisJYl90d28gPSBxdW90ZV90d28oYl9wcmVmaXgsIG5hbWVfYiArICgqbmFtZV9iID09ICcvJykpOworCWxibFswXSA9IERJRkZfRklMRV9WQUxJRChvbmUpID8gYV9vbmUgOiAiL2Rldi9udWxsIjsKKwlsYmxbMV0gPSBESUZGX0ZJTEVfVkFMSUQodHdvKSA/IGJfdHdvIDogIi9kZXYvbnVsbCI7CisJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzJXNkaWZmIC0tZ2l0ICVzICVzJXNcbiIsIGxpbmVfcHJlZml4LCBtZXRhLCBhX29uZSwgYl90d28sIHJlc2V0KTsKKwlpZiAobGJsWzBdWzBdID09ICcvJykgeworCQkvKiAvZGV2L251bGwgKi8KKwkJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzJXNuZXcgZmlsZSBtb2RlICUwNm8lc1xuIiwgbGluZV9wcmVmaXgsIG1ldGEsIHR3by0+bW9kZSwgcmVzZXQpOworCQlpZiAoeGZybV9tc2cpCisJCQlzdHJidWZfYWRkc3RyKCZoZWFkZXIsIHhmcm1fbXNnKTsKKwkJbXVzdF9zaG93X2hlYWRlciA9IDE7CisJfQorCWVsc2UgaWYgKGxibFsxXVswXSA9PSAnLycpIHsKKwkJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzJXNkZWxldGVkIGZpbGUgbW9kZSAlMDZvJXNcbiIsIGxpbmVfcHJlZml4LCBtZXRhLCBvbmUtPm1vZGUsIHJlc2V0KTsKKwkJaWYgKHhmcm1fbXNnKQorCQkJc3RyYnVmX2FkZHN0cigmaGVhZGVyLCB4ZnJtX21zZyk7CisJCW11c3Rfc2hvd19oZWFkZXIgPSAxOworCX0KKwllbHNlIHsKKwkJaWYgKG9uZS0+bW9kZSAhPSB0d28tPm1vZGUpIHsKKwkJCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsICIlcyVzb2xkIG1vZGUgJTA2byVzXG4iLCBsaW5lX3ByZWZpeCwgbWV0YSwgb25lLT5tb2RlLCByZXNldCk7CisJCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlc25ldyBtb2RlICUwNm8lc1xuIiwgbGluZV9wcmVmaXgsIG1ldGEsIHR3by0+bW9kZSwgcmVzZXQpOworCQkJbXVzdF9zaG93X2hlYWRlciA9IDE7CisJCX0KKwkJaWYgKHhmcm1fbXNnKQorCQkJc3RyYnVmX2FkZHN0cigmaGVhZGVyLCB4ZnJtX21zZyk7CisKKwkJLyoKKwkJICogd2UgZG8gbm90IHJ1biBkaWZmIGJldHdlZW4gZGlmZmVyZW50IGtpbmQKKwkJICogb2Ygb2JqZWN0cy4KKwkJICovCisJCWlmICgob25lLT5tb2RlIF4gdHdvLT5tb2RlKSAmIFNfSUZNVCkKKwkJCWdvdG8gZnJlZV9hYl9hbmRfcmV0dXJuOworCQlpZiAoY29tcGxldGVfcmV3cml0ZSAmJgorCQkgICAgKHRleHRjb252X29uZSB8fCAhZGlmZl9maWxlc3BlY19pc19iaW5hcnkoby0+cmVwbywgb25lKSkgJiYKKwkJICAgICh0ZXh0Y29udl90d28gfHwgIWRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG8tPnJlcG8sIHR3bykpKSB7CisJCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0hFQURFUiwKKwkJCQkJIGhlYWRlci5idWYsIGhlYWRlci5sZW4sIDApOworCQkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQkJZW1pdF9yZXdyaXRlX2RpZmYobmFtZV9hLCBuYW1lX2IsIG9uZSwgdHdvLAorCQkJCQkgIHRleHRjb252X29uZSwgdGV4dGNvbnZfdHdvLCBvKTsKKwkJCW8tPmZvdW5kX2NoYW5nZXMgPSAxOworCQkJZ290byBmcmVlX2FiX2FuZF9yZXR1cm47CisJCX0KKwl9CisKKwlpZiAoby0+aXJyZXZlcnNpYmxlX2RlbGV0ZSAmJiBsYmxbMV1bMF0gPT0gJy8nKSB7CisJCWVtaXRfZGlmZl9zeW1ib2wobywgRElGRl9TWU1CT0xfSEVBREVSLCBoZWFkZXIuYnVmLAorCQkJCSBoZWFkZXIubGVuLCAwKTsKKwkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwl9IGVsc2UgaWYgKCFvLT5mbGFncy50ZXh0ICYmCisJCSAgICggKCF0ZXh0Y29udl9vbmUgJiYgZGlmZl9maWxlc3BlY19pc19iaW5hcnkoby0+cmVwbywgb25lKSkgfHwKKwkJICAgICAoIXRleHRjb252X3R3byAmJiBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvLT5yZXBvLCB0d28pKSApKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKCFvbmUtPmRhdGEgJiYgIXR3by0+ZGF0YSAmJgorCQkgICAgU19JU1JFRyhvbmUtPm1vZGUpICYmIFNfSVNSRUcodHdvLT5tb2RlKSAmJgorCQkgICAgIW8tPmZsYWdzLmJpbmFyeSkgeworCQkJaWYgKG9pZGVxKCZvbmUtPm9pZCwgJnR3by0+b2lkKSkgeworCQkJCWlmIChtdXN0X3Nob3dfaGVhZGVyKQorCQkJCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0hFQURFUiwKKwkJCQkJCQkgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbiwKKwkJCQkJCQkgMCk7CisJCQkJZ290byBmcmVlX2FiX2FuZF9yZXR1cm47CisJCQl9CisJCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0hFQURFUiwKKwkJCQkJIGhlYWRlci5idWYsIGhlYWRlci5sZW4sIDApOworCQkJc3RyYnVmX2FkZGYoJnNiLCAiJXNCaW5hcnkgZmlsZXMgJXMgYW5kICVzIGRpZmZlclxuIiwKKwkJCQkgICAgZGlmZl9saW5lX3ByZWZpeChvKSwgbGJsWzBdLCBsYmxbMV0pOworCQkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9CSU5BUllfRklMRVMsCisJCQkJCSBzYi5idWYsIHNiLmxlbiwgMCk7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQkJZ290byBmcmVlX2FiX2FuZF9yZXR1cm47CisJCX0KKwkJaWYgKGZpbGxfbW1maWxlKG8tPnJlcG8sICZtZjEsIG9uZSkgPCAwIHx8CisJCSAgICBmaWxsX21tZmlsZShvLT5yZXBvLCAmbWYyLCB0d28pIDwgMCkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgZmlsZXMgdG8gZGlmZiIpOworCQkvKiBRdWl0ZSBjb21tb24gY29uZnVzaW5nIGNhc2UgKi8KKwkJaWYgKG1mMS5zaXplID09IG1mMi5zaXplICYmCisJCSAgICAhbWVtY21wKG1mMS5wdHIsIG1mMi5wdHIsIG1mMS5zaXplKSkgeworCQkJaWYgKG11c3Rfc2hvd19oZWFkZXIpCisJCQkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9IRUFERVIsCisJCQkJCQkgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbiwgMCk7CisJCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwkJfQorCQllbWl0X2RpZmZfc3ltYm9sKG8sIERJRkZfU1lNQk9MX0hFQURFUiwgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbiwgMCk7CisJCXN0cmJ1Zl9yZXNldCgmaGVhZGVyKTsKKwkJaWYgKG8tPmZsYWdzLmJpbmFyeSkKKwkJCWVtaXRfYmluYXJ5X2RpZmYobywgJm1mMSwgJm1mMik7CisJCWVsc2UgeworCQkJc3RyYnVmX2FkZGYoJnNiLCAiJXNCaW5hcnkgZmlsZXMgJXMgYW5kICVzIGRpZmZlclxuIiwKKwkJCQkgICAgZGlmZl9saW5lX3ByZWZpeChvKSwgbGJsWzBdLCBsYmxbMV0pOworCQkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9CSU5BUllfRklMRVMsCisJCQkJCSBzYi5idWYsIHNiLmxlbiwgMCk7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQl9CisJCW8tPmZvdW5kX2NoYW5nZXMgPSAxOworCX0gZWxzZSB7CisJCS8qIENyYXp5IHhkbCBpbnRlcmZhY2VzLi4gKi8KKwkJY29uc3QgY2hhciAqZGlmZm9wdHM7CisJCWNvbnN0IGNoYXIgKnY7CisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwkJc3RydWN0IGVtaXRfY2FsbGJhY2sgZWNiZGF0YTsKKwkJY29uc3Qgc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lICpwZTsKKworCQlpZiAobXVzdF9zaG93X2hlYWRlcikgeworCQkJZW1pdF9kaWZmX3N5bWJvbChvLCBESUZGX1NZTUJPTF9IRUFERVIsCisJCQkJCSBoZWFkZXIuYnVmLCBoZWFkZXIubGVuLCAwKTsKKwkJCXN0cmJ1Zl9yZXNldCgmaGVhZGVyKTsKKwkJfQorCisJCW1mMS5zaXplID0gZmlsbF90ZXh0Y29udihvLT5yZXBvLCB0ZXh0Y29udl9vbmUsIG9uZSwgJm1mMS5wdHIpOworCQltZjIuc2l6ZSA9IGZpbGxfdGV4dGNvbnYoby0+cmVwbywgdGV4dGNvbnZfdHdvLCB0d28sICZtZjIucHRyKTsKKworCQlwZSA9IGRpZmZfZnVuY25hbWVfcGF0dGVybihvLCBvbmUpOworCQlpZiAoIXBlKQorCQkJcGUgPSBkaWZmX2Z1bmNuYW1lX3BhdHRlcm4obywgdHdvKTsKKworCQltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCQltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwkJbWVtc2V0KCZlY2JkYXRhLCAwLCBzaXplb2YoZWNiZGF0YSkpOworCQlpZiAoby0+ZmxhZ3Muc3VwcHJlc3NfZGlmZl9oZWFkZXJzKQorCQkJbGJsWzBdID0gTlVMTDsKKwkJZWNiZGF0YS5sYWJlbF9wYXRoID0gbGJsOworCQllY2JkYXRhLmNvbG9yX2RpZmYgPSB3YW50X2NvbG9yKG8tPnVzZV9jb2xvcik7CisJCWVjYmRhdGEud3NfcnVsZSA9IHdoaXRlc3BhY2VfcnVsZShvLT5yZXBvLT5pbmRleCwgbmFtZV9iKTsKKwkJaWYgKGVjYmRhdGEud3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikKKwkJCWNoZWNrX2JsYW5rX2F0X2VvZigmbWYxLCAmbWYyLCAmZWNiZGF0YSk7CisJCWVjYmRhdGEub3B0ID0gbzsKKwkJaWYgKGhlYWRlci5sZW4gJiYgIW8tPmZsYWdzLnN1cHByZXNzX2RpZmZfaGVhZGVycykKKwkJCWVjYmRhdGEuaGVhZGVyID0gJmhlYWRlcjsKKwkJeHBwLmZsYWdzID0gby0+eGRsX29wdHM7CisJCXhwcC5hbmNob3JzID0gby0+YW5jaG9yczsKKwkJeHBwLmFuY2hvcnNfbnIgPSBvLT5hbmNob3JzX25yOworCQl4ZWNmZy5jdHhsZW4gPSBvLT5jb250ZXh0OworCQl4ZWNmZy5pbnRlcmh1bmtjdHhsZW4gPSBvLT5pbnRlcmh1bmtjb250ZXh0OworCQl4ZWNmZy5mbGFncyA9IFhETF9FTUlUX0ZVTkNOQU1FUzsKKwkJaWYgKG8tPmZsYWdzLmZ1bmNjb250ZXh0KQorCQkJeGVjZmcuZmxhZ3MgfD0gWERMX0VNSVRfRlVOQ0NPTlRFWFQ7CisJCWlmIChwZSkKKwkJCXhkaWZmX3NldF9maW5kX2Z1bmMoJnhlY2ZnLCBwZS0+cGF0dGVybiwgcGUtPmNmbGFncyk7CisKKwkJZGlmZm9wdHMgPSBnZXRlbnYoIkdJVF9ESUZGX09QVFMiKTsKKwkJaWYgKCFkaWZmb3B0cykKKwkJCTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoZGlmZm9wdHMsICItLXVuaWZpZWQ9IiwgJnYpKQorCQkJeGVjZmcuY3R4bGVuID0gc3RydG91bCh2LCBOVUxMLCAxMCk7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGRpZmZvcHRzLCAiLXUiLCAmdikpCisJCQl4ZWNmZy5jdHhsZW4gPSBzdHJ0b3VsKHYsIE5VTEwsIDEwKTsKKworCQlpZiAoby0+d29yZF9kaWZmKQorCQkJaW5pdF9kaWZmX3dvcmRzX2RhdGEoJmVjYmRhdGEsIG8sIG9uZSwgdHdvKTsKKwkJaWYgKHhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgTlVMTCwgZm5fb3V0X2NvbnN1bWUsCisJCQkJICAmZWNiZGF0YSwgJnhwcCwgJnhlY2ZnKSkKKwkJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICVzIiwgb25lLT5wYXRoKTsKKwkJaWYgKG8tPndvcmRfZGlmZikKKwkJCWZyZWVfZGlmZl93b3Jkc19kYXRhKCZlY2JkYXRhKTsKKwkJaWYgKHRleHRjb252X29uZSkKKwkJCWZyZWUobWYxLnB0cik7CisJCWlmICh0ZXh0Y29udl90d28pCisJCQlmcmVlKG1mMi5wdHIpOworCQl4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoJnhlY2ZnKTsKKwl9CisKKyBmcmVlX2FiX2FuZF9yZXR1cm46CisJc3RyYnVmX3JlbGVhc2UoJmhlYWRlcik7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEob25lKTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YSh0d28pOworCWZyZWUoYV9vbmUpOworCWZyZWUoYl90d28pOworCXJldHVybjsKK30KKworc3RhdGljIGNoYXIgKmdldF9jb21wYWN0X3N1bW1hcnkoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIGludCBpc19yZW5hbWVkKQoreworCWlmICghaXNfcmVuYW1lZCkgeworCQlpZiAocC0+c3RhdHVzID09IERJRkZfU1RBVFVTX0FEREVEKSB7CisJCQlpZiAoU19JU0xOSyhwLT50d28tPm1vZGUpKQorCQkJCXJldHVybiAibmV3ICtsIjsKKwkJCWVsc2UgaWYgKChwLT50d28tPm1vZGUgJiAwNzc3KSA9PSAwNzU1KQorCQkJCXJldHVybiAibmV3ICt4IjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gIm5ldyI7CisJCX0gZWxzZSBpZiAocC0+c3RhdHVzID09IERJRkZfU1RBVFVTX0RFTEVURUQpCisJCQlyZXR1cm4gImdvbmUiOworCX0KKwlpZiAoU19JU0xOSyhwLT5vbmUtPm1vZGUpICYmICFTX0lTTE5LKHAtPnR3by0+bW9kZSkpCisJCXJldHVybiAibW9kZSAtbCI7CisJZWxzZSBpZiAoIVNfSVNMTksocC0+b25lLT5tb2RlKSAmJiBTX0lTTE5LKHAtPnR3by0+bW9kZSkpCisJCXJldHVybiAibW9kZSArbCI7CisJZWxzZSBpZiAoKHAtPm9uZS0+bW9kZSAmIDA3NzcpID09IDA2NDQgJiYKKwkJIChwLT50d28tPm1vZGUgJiAwNzc3KSA9PSAwNzU1KQorCQlyZXR1cm4gIm1vZGUgK3giOworCWVsc2UgaWYgKChwLT5vbmUtPm1vZGUgJiAwNzc3KSA9PSAwNzU1ICYmCisJCSAocC0+dHdvLT5tb2RlICYgMDc3NykgPT0gMDY0NCkKKwkJcmV0dXJuICJtb2RlIC14IjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYnVpbHRpbl9kaWZmc3RhdChjb25zdCBjaGFyICpuYW1lX2EsIGNvbnN0IGNoYXIgKm5hbWVfYiwKKwkJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSAgICAgc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0LAorCQkJICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCkKK3sKKwltbWZpbGVfdCBtZjEsIG1mMjsKKwlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZGF0YTsKKwlpbnQgc2FtZV9jb250ZW50czsKKwlpbnQgY29tcGxldGVfcmV3cml0ZSA9IDA7CisKKwlpZiAoIURJRkZfUEFJUl9VTk1FUkdFRChwKSkgeworCQlpZiAocC0+c3RhdHVzID09IERJRkZfU1RBVFVTX01PRElGSUVEICYmIHAtPnNjb3JlKQorCQkJY29tcGxldGVfcmV3cml0ZSA9IDE7CisJfQorCisJZGF0YSA9IGRpZmZzdGF0X2FkZChkaWZmc3RhdCwgbmFtZV9hLCBuYW1lX2IpOworCWRhdGEtPmlzX2ludGVyZXN0aW5nID0gcC0+c3RhdHVzICE9IERJRkZfU1RBVFVTX1VOS05PV047CisJaWYgKG8tPmZsYWdzLnN0YXRfd2l0aF9zdW1tYXJ5KQorCQlkYXRhLT5jb21tZW50cyA9IGdldF9jb21wYWN0X3N1bW1hcnkocCwgZGF0YS0+aXNfcmVuYW1lZCk7CisKKwlpZiAoIW9uZSB8fCAhdHdvKSB7CisJCWRhdGEtPmlzX3VubWVyZ2VkID0gMTsKKwkJcmV0dXJuOworCX0KKworCXNhbWVfY29udGVudHMgPSBvaWRlcSgmb25lLT5vaWQsICZ0d28tPm9pZCk7CisKKwlpZiAoZGlmZl9maWxlc3BlY19pc19iaW5hcnkoby0+cmVwbywgb25lKSB8fAorCSAgICBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvLT5yZXBvLCB0d28pKSB7CisJCWRhdGEtPmlzX2JpbmFyeSA9IDE7CisJCWlmIChzYW1lX2NvbnRlbnRzKSB7CisJCQlkYXRhLT5hZGRlZCA9IDA7CisJCQlkYXRhLT5kZWxldGVkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRhdGEtPmFkZGVkID0gZGlmZl9maWxlc3BlY19zaXplKG8tPnJlcG8sIHR3byk7CisJCQlkYXRhLT5kZWxldGVkID0gZGlmZl9maWxlc3BlY19zaXplKG8tPnJlcG8sIG9uZSk7CisJCX0KKwl9CisKKwllbHNlIGlmIChjb21wbGV0ZV9yZXdyaXRlKSB7CisJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoby0+cmVwbywgb25lLCAwKTsKKwkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhvLT5yZXBvLCB0d28sIDApOworCQlkYXRhLT5kZWxldGVkID0gY291bnRfbGluZXMob25lLT5kYXRhLCBvbmUtPnNpemUpOworCQlkYXRhLT5hZGRlZCA9IGNvdW50X2xpbmVzKHR3by0+ZGF0YSwgdHdvLT5zaXplKTsKKwl9CisKKwllbHNlIGlmICghc2FtZV9jb250ZW50cykgeworCQkvKiBDcmF6eSB4ZGwgaW50ZXJmYWNlcy4uICovCisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKworCQlpZiAoZmlsbF9tbWZpbGUoby0+cmVwbywgJm1mMSwgb25lKSA8IDAgfHwKKwkJICAgIGZpbGxfbW1maWxlKG8tPnJlcG8sICZtZjIsIHR3bykgPCAwKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisKKwkJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwkJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJCXhwcC5mbGFncyA9IG8tPnhkbF9vcHRzOworCQl4cHAuYW5jaG9ycyA9IG8tPmFuY2hvcnM7CisJCXhwcC5hbmNob3JzX25yID0gby0+YW5jaG9yc19ucjsKKwkJeGVjZmcuY3R4bGVuID0gby0+Y29udGV4dDsKKwkJeGVjZmcuaW50ZXJodW5rY3R4bGVuID0gby0+aW50ZXJodW5rY29udGV4dDsKKwkJaWYgKHhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgZGlzY2FyZF9odW5rX2xpbmUsCisJCQkJICBkaWZmc3RhdF9jb25zdW1lLCBkaWZmc3RhdCwgJnhwcCwgJnhlY2ZnKSkKKwkJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmZzdGF0IGZvciAlcyIsIG9uZS0+cGF0aCk7CisJfQorCisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEob25lKTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YSh0d28pOworfQorCitzdGF0aWMgdm9pZCBidWlsdGluX2NoZWNrZGlmZihjb25zdCBjaGFyICpuYW1lX2EsIGNvbnN0IGNoYXIgKm5hbWVfYiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmF0dHJfcGF0aCwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwltbWZpbGVfdCBtZjEsIG1mMjsKKwlzdHJ1Y3QgY2hlY2tkaWZmX3QgZGF0YTsKKworCWlmICghdHdvKQorCQlyZXR1cm47CisKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS5maWxlbmFtZSA9IG5hbWVfYiA/IG5hbWVfYiA6IG5hbWVfYTsKKwlkYXRhLmxpbmVubyA9IDA7CisJZGF0YS5vID0gbzsKKwlkYXRhLndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUoby0+cmVwby0+aW5kZXgsIGF0dHJfcGF0aCk7CisJZGF0YS5jb25mbGljdF9tYXJrZXJfc2l6ZSA9IGxsX21lcmdlX21hcmtlcl9zaXplKG8tPnJlcG8tPmluZGV4LCBhdHRyX3BhdGgpOworCisJaWYgKGZpbGxfbW1maWxlKG8tPnJlcG8sICZtZjEsIG9uZSkgPCAwIHx8CisJICAgIGZpbGxfbW1maWxlKG8tPnJlcG8sICZtZjIsIHR3bykgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKworCS8qCisJICogQWxsIHRoZSBvdGhlciBjb2RlcGF0aHMgY2hlY2sgYm90aCBzaWRlcywgYnV0IG5vdCBjaGVja2luZworCSAqIHRoZSAib2xkIiBzaWRlIGhlcmUgaXMgZGVsaWJlcmF0ZS4gIFdlIGFyZSBjaGVja2luZyB0aGUgbmV3bHkKKwkgKiBpbnRyb2R1Y2VkIGNoYW5nZXMsIGFuZCBhcyBsb25nIGFzIHRoZSAibmV3IiBzaWRlIGlzIHRleHQsIHdlCisJICogY2FuIGFuZCBzaG91bGQgY2hlY2sgd2hhdCBpdCBpbnRyb2R1Y2VzLgorCSAqLworCWlmIChkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvLT5yZXBvLCB0d28pKQorCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKKwllbHNlIHsKKwkJLyogQ3JhenkgeGRsIGludGVyZmFjZXMuLiAqLworCQl4cHBhcmFtX3QgeHBwOworCQl4ZGVtaXRjb25mX3QgeGVjZmc7CisKKwkJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwkJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJCXhlY2ZnLmN0eGxlbiA9IDE7IC8qIGF0IGxlYXN0IG9uZSBjb250ZXh0IGxpbmUgKi8KKwkJeHBwLmZsYWdzID0gMDsKKwkJaWYgKHhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgY2hlY2tkaWZmX2NvbnN1bWVfaHVuaywKKwkJCQkgIGNoZWNrZGlmZl9jb25zdW1lLCAmZGF0YSwKKwkJCQkgICZ4cHAsICZ4ZWNmZykpCisJCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBjaGVja2RpZmYgZm9yICVzIiwgb25lLT5wYXRoKTsKKworCQlpZiAoZGF0YS53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSB7CisJCQlzdHJ1Y3QgZW1pdF9jYWxsYmFjayBlY2JkYXRhOworCQkJaW50IGJsYW5rX2F0X2VvZjsKKworCQkJZWNiZGF0YS53c19ydWxlID0gZGF0YS53c19ydWxlOworCQkJY2hlY2tfYmxhbmtfYXRfZW9mKCZtZjEsICZtZjIsICZlY2JkYXRhKTsKKwkJCWJsYW5rX2F0X2VvZiA9IGVjYmRhdGEuYmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZTsKKworCQkJaWYgKGJsYW5rX2F0X2VvZikgeworCQkJCXN0YXRpYyBjaGFyICplcnI7CisJCQkJaWYgKCFlcnIpCisJCQkJCWVyciA9IHdoaXRlc3BhY2VfZXJyb3Jfc3RyaW5nKFdTX0JMQU5LX0FUX0VPRik7CisJCQkJZnByaW50ZihvLT5maWxlLCAiJXM6JWQ6ICVzLlxuIiwKKwkJCQkJZGF0YS5maWxlbmFtZSwgYmxhbmtfYXRfZW9mLCBlcnIpOworCQkJCWRhdGEuc3RhdHVzID0gMTsgLyogcmVwb3J0IGVycm9ycyAqLworCQkJfQorCQl9CisJfQorIGZyZWVfYW5kX3JldHVybjoKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShvbmUpOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHR3byk7CisJaWYgKGRhdGEuc3RhdHVzKQorCQlvLT5mbGFncy5jaGVja19mYWlsZWQgPSAxOworfQorCitzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYWxsb2NfZmlsZXNwZWMoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYzsKKworCUZMRVhQVFJfQUxMT0NfU1RSKHNwZWMsIHBhdGgsIHBhdGgpOworCXNwZWMtPmNvdW50ID0gMTsKKwlzcGVjLT5pc19iaW5hcnkgPSAtMTsKKwlyZXR1cm4gc3BlYzsKK30KKwordm9pZCBmcmVlX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjKQoreworCWlmICghLS1zcGVjLT5jb3VudCkgeworCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShzcGVjKTsKKwkJZnJlZShzcGVjKTsKKwl9Cit9CisKK3ZvaWQgZmlsbF9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYywgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICBpbnQgb2lkX3ZhbGlkLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworCWlmIChtb2RlKSB7CisJCXNwZWMtPm1vZGUgPSBjYW5vbl9tb2RlKG1vZGUpOworCQlvaWRjcHkoJnNwZWMtPm9pZCwgb2lkKTsKKwkJc3BlYy0+b2lkX3ZhbGlkID0gb2lkX3ZhbGlkOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgbmFtZSBhbmQgc2hhMSBwYWlyLCBpZiB0aGUgaW5kZXggdGVsbHMgdXMgdGhlIGZpbGUgaW4KKyAqIHRoZSB3b3JrIHRyZWUgaGFzIHRoYXQgb2JqZWN0IGNvbnRlbnRzLCByZXR1cm4gdHJ1ZSwgc28gdGhhdAorICogcHJlcGFyZV90ZW1wX2ZpbGUoKSBkb2VzIG5vdCBoYXZlIHRvIGluZmxhdGUgYW5kIGV4dHJhY3QuCisgKi8KK3N0YXRpYyBpbnQgcmV1c2Vfd29ya3RyZWVfZmlsZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgICBpbnQgd2FudF9maWxlKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IHBvcywgbGVuOworCisJLyoKKwkgKiBXZSBkbyBub3QgcmVhZCB0aGUgY2FjaGUgb3Vyc2VsdmVzIGhlcmUsIGJlY2F1c2UgdGhlCisJICogYmVuY2htYXJrIHdpdGggbXkgcHJldmlvdXMgdmVyc2lvbiB0aGF0IGFsd2F5cyByZWFkcyBjYWNoZQorCSAqIHNob3dzIHRoYXQgaXQgbWFrZXMgdGhpbmdzIHdvcnNlIGZvciBkaWZmLXRyZWUgY29tcGFyaW5nCisJICogdHdvIGxpbnV4LTIuNiBrZXJuZWwgdHJlZXMgaW4gYW4gYWxyZWFkeSBjaGVja2VkIG91dCB3b3JrCisJICogdHJlZS4gIFRoaXMgaXMgYmVjYXVzZSBtb3N0IGRpZmYtdHJlZSBjb21wYXJpc29ucyBkZWFsIHdpdGgKKwkgKiBvbmx5IGEgc21hbGwgbnVtYmVyIG9mIGZpbGVzLCB3aGlsZSByZWFkaW5nIHRoZSBjYWNoZSBpcworCSAqIGV4cGVuc2l2ZSBmb3IgYSBsYXJnZSBwcm9qZWN0LCBhbmQgaXRzIGNvc3Qgb3V0d2VpZ2hzIHRoZQorCSAqIHNhdmluZ3Mgd2UgZ2V0IGJ5IG5vdCBpbmZsYXRpbmcgdGhlIG9iamVjdCB0byBhIHRlbXBvcmFyeQorCSAqIGZpbGUuICBQcmFjdGljYWxseSwgdGhpcyBjb2RlIG9ubHkgaGVscHMgd2hlbiB3ZSBhcmUgdXNlZAorCSAqIGJ5IGRpZmYtY2FjaGUgLS1jYWNoZWQsIHdoaWNoIGRvZXMgcmVhZCB0aGUgY2FjaGUgYmVmb3JlCisJICogY2FsbGluZyB1cy4KKwkgKi8KKwlpZiAoIWlzdGF0ZS0+Y2FjaGUpCisJCXJldHVybiAwOworCisJLyogV2Ugd2FudCB0byBhdm9pZCB0aGUgd29ya2luZyBkaXJlY3RvcnkgaWYgb3VyIGNhbGxlcgorCSAqIGRvZXNuJ3QgbmVlZCB0aGUgZGF0YSBpbiBhIG5vcm1hbCBmaWxlLCB0aGlzIHN5c3RlbQorCSAqIGlzIHJhdGhlciBzbG93IHdpdGggaXRzIHN0YXQvb3Blbi9tbWFwL2Nsb3NlIHN5c2NhbGxzLAorCSAqIGFuZCB0aGUgb2JqZWN0IGlzIGNvbnRhaW5lZCBpbiBhIHBhY2sgZmlsZS4gIFRoZSBwYWNrCisJICogaXMgcHJvYmFibHkgYWxyZWFkeSBvcGVuIGFuZCB3aWxsIGJlIGZhc3RlciB0byBvYnRhaW4KKwkgKiB0aGUgZGF0YSB0aHJvdWdoIHRoYW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiAgTG9vc2UKKwkgKiBvYmplY3RzIGhvd2V2ZXIgd291bGQgdGVuZCB0byBiZSBzbG93ZXIgYXMgdGhleSBuZWVkCisJICogdG8gYmUgaW5kaXZpZHVhbGx5IG9wZW5lZCBhbmQgaW5mbGF0ZWQuCisJICovCisJaWYgKCFGQVNUX1dPUktJTkdfRElSRUNUT1JZICYmICF3YW50X2ZpbGUgJiYgaGFzX29iamVjdF9wYWNrKG9pZCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBTaW1pbGFybHksIGlmIHdlJ2QgaGF2ZSB0byBjb252ZXJ0IHRoZSBmaWxlIGNvbnRlbnRzIGFueXdheSwgdGhhdAorCSAqIG1ha2VzIHRoZSBvcHRpbWl6YXRpb24gbm90IHdvcnRod2hpbGUuCisJICovCisJaWYgKCF3YW50X2ZpbGUgJiYgd291bGRfY29udmVydF90b19naXQoaXN0YXRlLCBuYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsZW4obmFtZSk7CisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBuYW1lLCBsZW4pOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gMDsKKwljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKworCS8qCisJICogVGhpcyBpcyBub3QgdGhlIHNoYTEgd2UgYXJlIGxvb2tpbmcgZm9yLCBvcgorCSAqIHVucmV1c2FibGUgYmVjYXVzZSBpdCBpcyBub3QgYSByZWd1bGFyIGZpbGUuCisJICovCisJaWYgKCFvaWRlcShvaWQsICZjZS0+b2lkKSB8fCAhU19JU1JFRyhjZS0+Y2VfbW9kZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiBjZSBpcyBtYXJrZWQgYXMgImFzc3VtZSB1bmNoYW5nZWQiLCB0aGVyZSBpcyBubworCSAqIGd1YXJhbnRlZSB0aGF0IHdvcmsgdHJlZSBtYXRjaGVzIHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLgorCSAqLworCWlmICgoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpIHx8IGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgY2UgbWF0Y2hlcyB0aGUgZmlsZSBpbiB0aGUgd29yayB0cmVlLCB3ZSBjYW4gcmV1c2UgaXQuCisJICovCisJaWYgKGNlX3VwdG9kYXRlKGNlKSB8fAorCSAgICAoIWxzdGF0KG5hbWUsICZzdCkgJiYgIWllX21hdGNoX3N0YXQoaXN0YXRlLCBjZSwgJnN0LCAwKSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9wb3B1bGF0ZV9naXRsaW5rKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzLCBpbnQgc2l6ZV9vbmx5KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqZGlydHkgPSAiIjsKKworCS8qIEFyZSB3ZSBsb29raW5nIGF0IHRoZSB3b3JrIHRyZWU/ICovCisJaWYgKHMtPmRpcnR5X3N1Ym1vZHVsZSkKKwkJZGlydHkgPSAiLWRpcnR5IjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJTdWJwcm9qZWN0IGNvbW1pdCAlcyVzXG4iLAorCQkgICAgb2lkX3RvX2hleCgmcy0+b2lkKSwgZGlydHkpOworCXMtPnNpemUgPSBidWYubGVuOworCWlmIChzaXplX29ubHkpIHsKKwkJcy0+ZGF0YSA9IE5VTEw7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0gZWxzZSB7CisJCXMtPmRhdGEgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCQlzLT5zaG91bGRfZnJlZSA9IDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogV2hpbGUgZG9pbmcgcmVuYW1lIGRldGVjdGlvbiBhbmQgcGlja2F4ZSBvcGVyYXRpb24sIHdlIG1heSBuZWVkIHRvCisgKiBncmFiIHRoZSBkYXRhIGZvciB0aGUgYmxvYiAob3IgZmlsZSkgZm9yIG91ciBvd24gaW4tY29yZSBjb21wYXJpc29uLgorICogZGlmZl9maWxlc3BlYyBoYXMgZGF0YSBhbmQgc2l6ZSBmaWVsZHMgZm9yIHRoaXMgcHVycG9zZS4KKyAqLworaW50IGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcywKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgc2l6ZV9vbmx5ID0gZmxhZ3MgJiBDSEVDS19TSVpFX09OTFk7CisJaW50IGVyciA9IDA7CisJaW50IGNvbnZfZmxhZ3MgPSBnbG9iYWxfY29udl9mbGFnc19lb2w7CisJLyoKKwkgKiBkZW1vdGUgRkFJTCB0byBXQVJOIHRvIGFsbG93IGluc3BlY3RpbmcgdGhlIHNpdHVhdGlvbgorCSAqIGluc3RlYWQgb2YgcmVmdXNpbmcuCisJICovCisJaWYgKGNvbnZfZmxhZ3MgJiBDT05WX0VPTF9STkRUUlBfRElFKQorCQljb252X2ZsYWdzID0gQ09OVl9FT0xfUk5EVFJQX1dBUk47CisKKwlpZiAoIURJRkZfRklMRV9WQUxJRChzKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogYXNraW5nIHRvIHBvcHVsYXRlIGludmFsaWQgZmlsZS4iKTsKKwlpZiAoU19JU0RJUihzLT5tb2RlKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHMtPmRhdGEpCisJCXJldHVybiAwOworCisJaWYgKHNpemVfb25seSAmJiAwIDwgcy0+c2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoU19JU0dJVExJTksocy0+bW9kZSkpCisJCXJldHVybiBkaWZmX3BvcHVsYXRlX2dpdGxpbmsocywgc2l6ZV9vbmx5KTsKKworCWlmICghcy0+b2lkX3ZhbGlkIHx8CisJICAgIHJldXNlX3dvcmt0cmVlX2ZpbGUoci0+aW5kZXgsIHMtPnBhdGgsICZzLT5vaWQsIDApKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpbnQgZmQ7CisKKwkJaWYgKGxzdGF0KHMtPnBhdGgsICZzdCkgPCAwKSB7CisJCWVycl9lbXB0eToKKwkJCWVyciA9IC0xOworCQllbXB0eToKKwkJCXMtPmRhdGEgPSAoY2hhciAqKSIiOworCQkJcy0+c2l6ZSA9IDA7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCXMtPnNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQlpZiAoIXMtPnNpemUpCisJCQlnb3RvIGVtcHR5OworCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgcy0+cGF0aCwgcy0+c2l6ZSkpCisJCQkJZ290byBlcnJfZW1wdHk7CisJCQlzLT5zaXplID0gc2IubGVuOworCQkJcy0+ZGF0YSA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJCXMtPnNob3VsZF9mcmVlID0gMTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyoKKwkJICogRXZlbiBpZiB0aGUgY2FsbGVyIHdvdWxkIGJlIGhhcHB5IHdpdGggZ2V0dGluZworCQkgKiBvbmx5IHRoZSBzaXplLCB3ZSBjYW5ub3QgcmV0dXJuIGVhcmx5IGF0IHRoaXMKKwkJICogcG9pbnQgaWYgdGhlIHBhdGggcmVxdWlyZXMgdXMgdG8gcnVuIHRoZSBjb250ZW50CisJCSAqIGNvbnZlcnNpb24uCisJCSAqLworCQlpZiAoc2l6ZV9vbmx5ICYmICF3b3VsZF9jb252ZXJ0X3RvX2dpdChyLT5pbmRleCwgcy0+cGF0aCkpCisJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBOb3RlOiB0aGlzIGNoZWNrIHVzZXMgeHNpemVfdChzdC5zdF9zaXplKSB0aGF0IG1heQorCQkgKiBub3QgYmUgdGhlIHRydWUgc2l6ZSBvZiB0aGUgYmxvYiBhZnRlciBpdCBnb2VzCisJCSAqIHRocm91Z2ggY29udmVydF90b19naXQoKS4gIFRoaXMgbWF5IG5vdCBzdHJpY3RseSBiZQorCQkgKiBjb3JyZWN0LCBidXQgdGhlIHdob2xlIHBvaW50IG9mIGJpZ19maWxlX3RocmVzaG9sZAorCQkgKiBhbmQgaXNfYmluYXJ5IGNoZWNrIGJlaW5nIHRoYXQgd2Ugd2FudCB0byBhdm9pZAorCQkgKiBvcGVuaW5nIHRoZSBmaWxlIGFuZCBpbnNwZWN0aW5nIHRoZSBjb250ZW50cywgdGhpcworCQkgKiBpcyBwcm9iYWJseSBmaW5lLgorCQkgKi8KKwkJaWYgKChmbGFncyAmIENIRUNLX0JJTkFSWSkgJiYKKwkJICAgIHMtPnNpemUgPiBiaWdfZmlsZV90aHJlc2hvbGQgJiYgcy0+aXNfYmluYXJ5ID09IC0xKSB7CisJCQlzLT5pc19iaW5hcnkgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZmQgPSBvcGVuKHMtPnBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWdvdG8gZXJyX2VtcHR5OworCQlzLT5kYXRhID0geG1tYXAoTlVMTCwgcy0+c2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCQljbG9zZShmZCk7CisJCXMtPnNob3VsZF9tdW5tYXAgPSAxOworCisJCS8qCisJCSAqIENvbnZlcnQgZnJvbSB3b3JraW5nIHRyZWUgZm9ybWF0IHRvIGNhbm9uaWNhbCBnaXQgZm9ybWF0CisJCSAqLworCQlpZiAoY29udmVydF90b19naXQoci0+aW5kZXgsIHMtPnBhdGgsIHMtPmRhdGEsIHMtPnNpemUsICZidWYsIGNvbnZfZmxhZ3MpKSB7CisJCQlzaXplX3Qgc2l6ZSA9IDA7CisJCQltdW5tYXAocy0+ZGF0YSwgcy0+c2l6ZSk7CisJCQlzLT5zaG91bGRfbXVubWFwID0gMDsKKwkJCXMtPmRhdGEgPSBzdHJidWZfZGV0YWNoKCZidWYsICZzaXplKTsKKwkJCXMtPnNpemUgPSBzaXplOworCQkJcy0+c2hvdWxkX2ZyZWUgPSAxOworCQl9CisJfQorCWVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWlmIChzaXplX29ubHkgfHwgKGZsYWdzICYgQ0hFQ0tfQklOQVJZKSkgeworCQkJdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhyLCAmcy0+b2lkLCAmcy0+c2l6ZSk7CisJCQlpZiAodHlwZSA8IDApCisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsCisJCQkJICAgIG9pZF90b19oZXgoJnMtPm9pZCkpOworCQkJaWYgKHNpemVfb25seSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChzLT5zaXplID4gYmlnX2ZpbGVfdGhyZXNob2xkICYmIHMtPmlzX2JpbmFyeSA9PSAtMSkgeworCQkJCXMtPmlzX2JpbmFyeSA9IDE7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJcy0+ZGF0YSA9IHJlcG9fcmVhZF9vYmplY3RfZmlsZShyLCAmcy0+b2lkLCAmdHlwZSwgJnMtPnNpemUpOworCQlpZiAoIXMtPmRhdGEpCisJCQlkaWUoInVuYWJsZSB0byByZWFkICVzIiwgb2lkX3RvX2hleCgmcy0+b2lkKSk7CisJCXMtPnNob3VsZF9mcmVlID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2Ioc3RydWN0IGRpZmZfZmlsZXNwZWMgKnMpCit7CisJaWYgKHMtPnNob3VsZF9mcmVlKQorCQlmcmVlKHMtPmRhdGEpOworCWVsc2UgaWYgKHMtPnNob3VsZF9tdW5tYXApCisJCW11bm1hcChzLT5kYXRhLCBzLT5zaXplKTsKKworCWlmIChzLT5zaG91bGRfZnJlZSB8fCBzLT5zaG91bGRfbXVubWFwKSB7CisJCXMtPnNob3VsZF9mcmVlID0gcy0+c2hvdWxkX211bm1hcCA9IDA7CisJCXMtPmRhdGEgPSBOVUxMOworCX0KK30KKwordm9pZCBkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcykKK3sKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihzKTsKKwlGUkVFX0FORF9OVUxMKHMtPmNudF9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgcHJlcF90ZW1wX2Jsb2Ioc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZGlmZl90ZW1wZmlsZSAqdGVtcCwKKwkJCSAgIHZvaWQgKmJsb2IsCisJCQkgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdGVtcGZpbGUgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpwYXRoX2R1cCA9IHhzdHJkdXAocGF0aCk7CisJY29uc3QgY2hhciAqYmFzZSA9IGJhc2VuYW1lKHBhdGhfZHVwKTsKKworCS8qIEdlbmVyYXRlICJYWFhYWFhfYmFzZW5hbWUuZXh0IiAqLworCXN0cmJ1Zl9hZGRzdHIoJnRlbXBmaWxlLCAiWFhYWFhYXyIpOworCXN0cmJ1Zl9hZGRzdHIoJnRlbXBmaWxlLCBiYXNlKTsKKworCXRlbXAtPnRlbXBmaWxlID0gbWtzX3RlbXBmaWxlX3RzKHRlbXBmaWxlLmJ1Ziwgc3RybGVuKGJhc2UpICsgMSk7CisJaWYgKCF0ZW1wLT50ZW1wZmlsZSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXAtZmlsZSIpOworCWlmIChjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShpc3RhdGUsIHBhdGgsCisJCQkoY29uc3QgY2hhciAqKWJsb2IsIChzaXplX3Qpc2l6ZSwgJmJ1ZikpIHsKKwkJYmxvYiA9IGJ1Zi5idWY7CisJCXNpemUgPSBidWYubGVuOworCX0KKwlpZiAod3JpdGVfaW5fZnVsbCh0ZW1wLT50ZW1wZmlsZS0+ZmQsIGJsb2IsIHNpemUpIDwgMCB8fAorCSAgICBjbG9zZV90ZW1wZmlsZV9nZW50bHkodGVtcC0+dGVtcGZpbGUpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0ZW1wLWZpbGUiKTsKKwl0ZW1wLT5uYW1lID0gZ2V0X3RlbXBmaWxlX3BhdGgodGVtcC0+dGVtcGZpbGUpOworCW9pZF90b19oZXhfcih0ZW1wLT5oZXgsIG9pZCk7CisJeHNucHJpbnRmKHRlbXAtPm1vZGUsIHNpemVvZih0ZW1wLT5tb2RlKSwgIiUwNm8iLCBtb2RlKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdGVtcGZpbGUpOworCWZyZWUocGF0aF9kdXApOworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfdGVtcGZpbGUgKnByZXBhcmVfdGVtcF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXAgPSBjbGFpbV9kaWZmX3RlbXBmaWxlKCk7CisKKwlpZiAoIURJRkZfRklMRV9WQUxJRChvbmUpKSB7CisJbm90X2FfdmFsaWRfZmlsZToKKwkJLyogQSAnLScgZW50cnkgcHJvZHVjZXMgdGhpcyBmb3IgZmlsZS0yLCBhbmQKKwkJICogYSAnKycgZW50cnkgcHJvZHVjZXMgdGhpcyBmb3IgZmlsZS0xLgorCQkgKi8KKwkJdGVtcC0+bmFtZSA9ICIvZGV2L251bGwiOworCQl4c25wcmludGYodGVtcC0+aGV4LCBzaXplb2YodGVtcC0+aGV4KSwgIi4iKTsKKwkJeHNucHJpbnRmKHRlbXAtPm1vZGUsIHNpemVvZih0ZW1wLT5tb2RlKSwgIi4iKTsKKwkJcmV0dXJuIHRlbXA7CisJfQorCisJaWYgKCFTX0lTR0lUTElOSyhvbmUtPm1vZGUpICYmCisJICAgICghb25lLT5vaWRfdmFsaWQgfHwKKwkgICAgIHJldXNlX3dvcmt0cmVlX2ZpbGUoci0+aW5kZXgsIG5hbWUsICZvbmUtPm9pZCwgMSkpKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpZiAobHN0YXQobmFtZSwgJnN0KSA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQkJZ290byBub3RfYV92YWxpZF9maWxlOworCQkJZGllX2Vycm5vKCJzdGF0KCVzKSIsIG5hbWUpOworCQl9CisJCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgbmFtZSwgc3Quc3Rfc2l6ZSkgPCAwKQorCQkJCWRpZV9lcnJubygicmVhZGxpbmsoJXMpIiwgbmFtZSk7CisJCQlwcmVwX3RlbXBfYmxvYihyLT5pbmRleCwgbmFtZSwgdGVtcCwgc2IuYnVmLCBzYi5sZW4sCisJCQkJICAgICAgIChvbmUtPm9pZF92YWxpZCA/CisJCQkJCSZvbmUtPm9pZCA6ICZudWxsX29pZCksCisJCQkJICAgICAgIChvbmUtPm9pZF92YWxpZCA/CisJCQkJCW9uZS0+bW9kZSA6IFNfSUZMTkspKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCX0KKwkJZWxzZSB7CisJCQkvKiB3ZSBjYW4gYm9ycm93IGZyb20gdGhlIGZpbGUgaW4gdGhlIHdvcmsgdHJlZSAqLworCQkJdGVtcC0+bmFtZSA9IG5hbWU7CisJCQlpZiAoIW9uZS0+b2lkX3ZhbGlkKQorCQkJCW9pZF90b19oZXhfcih0ZW1wLT5oZXgsICZudWxsX29pZCk7CisJCQllbHNlCisJCQkJb2lkX3RvX2hleF9yKHRlbXAtPmhleCwgJm9uZS0+b2lkKTsKKwkJCS8qIEV2ZW4gdGhvdWdoIHdlIG1heSBzb21ldGltZXMgYm9ycm93IHRoZQorCQkJICogY29udGVudHMgZnJvbSB0aGUgd29yayB0cmVlLCB3ZSBhbHdheXMgd2FudAorCQkJICogb25lLT5tb2RlLiAgbW9kZSBpcyB0cnVzdHdvcnRoeSBldmVuIHdoZW4KKwkJCSAqICEob25lLT5vaWRfdmFsaWQpLCBhcyBsb25nIGFzCisJCQkgKiBESUZGX0ZJTEVfVkFMSUQob25lKS4KKwkJCSAqLworCQkJeHNucHJpbnRmKHRlbXAtPm1vZGUsIHNpemVvZih0ZW1wLT5tb2RlKSwgIiUwNm8iLCBvbmUtPm1vZGUpOworCQl9CisJCXJldHVybiB0ZW1wOworCX0KKwllbHNlIHsKKwkJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgb25lLCAwKSkKKwkJCWRpZSgiY2Fubm90IHJlYWQgZGF0YSBibG9iIGZvciAlcyIsIG9uZS0+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+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChtYXRjaF9maWx0ZXIob3B0aW9ucywgcCkpCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJCWVsc2UKKwkJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJCX0KKwl9CisJZnJlZShxLT5xdWV1ZSk7CisJKnEgPSBvdXRxOworfQorCisvKiBDaGVjayB3aGV0aGVyIHR3byBmaWxlc3BlY3Mgd2l0aCB0aGUgc2FtZSBtb2RlIGFuZCBzaXplIGFyZSBpZGVudGljYWwgKi8KK3N0YXRpYyBpbnQgZGlmZl9maWxlc3BlY19pc19pZGVudGljYWwoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCWlmIChTX0lTR0lUTElOSyhvbmUtPm1vZGUpKQorCQlyZXR1cm4gMDsKKwlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBvbmUsIDApKQorCQlyZXR1cm4gMDsKKwlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCB0d28sIDApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIW1lbWNtcChvbmUtPmRhdGEsIHR3by0+ZGF0YSwgb25lLT5zaXplKTsKK30KKworc3RhdGljIGludCBkaWZmX2ZpbGVzcGVjX2NoZWNrX3N0YXRfdW5tYXRjaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCWlmIChwLT5kb25lX3NraXBfc3RhdF91bm1hdGNoKQorCQlyZXR1cm4gcC0+c2tpcF9zdGF0X3VubWF0Y2hfcmVzdWx0OworCisJcC0+ZG9uZV9za2lwX3N0YXRfdW5tYXRjaCA9IDE7CisJcC0+c2tpcF9zdGF0X3VubWF0Y2hfcmVzdWx0ID0gMDsKKwkvKgorCSAqIDEuIEVudHJpZXMgdGhhdCBjb21lIGZyb20gc3RhdCBpbmZvIGRpcnRpbmVzcworCSAqICAgIGFsd2F5cyBoYXZlIGJvdGggc2lkZXMgKGlvdywgbm90IGNyZWF0ZS9kZWxldGUpLAorCSAqICAgIG9uZSBzaWRlIG9mIHRoZSBvYmplY3QgbmFtZSBpcyB1bmtub3duLCB3aXRoCisJICogICAgdGhlIHNhbWUgbW9kZSBhbmQgc2l6ZS4gIEtlZXAgdGhlIG9uZXMgdGhhdAorCSAqICAgIGRvIG5vdCBtYXRjaCB0aGVzZSBjcml0ZXJpYS4gIFRoZXkgaGF2ZSByZWFsCisJICogICAgZGlmZmVyZW5jZXMuCisJICoKKwkgKiAyLiBBdCB0aGlzIHBvaW50LCB0aGUgZmlsZSBpcyBrbm93biB0byBiZSBtb2RpZmllZCwKKwkgKiAgICB3aXRoIHRoZSBzYW1lIG1vZGUgYW5kIHNpemUsIGFuZCB0aGUgb2JqZWN0CisJICogICAgbmFtZSBvZiBvbmUgc2lkZSBpcyB1bmtub3duLiAgTmVlZCB0byBpbnNwZWN0CisJICogICAgdGhlIGlkZW50aWNhbCBjb250ZW50cy4KKwkgKi8KKwlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpIHx8IC8qICgxKSAqLworCSAgICAhRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgfHwKKwkgICAgKHAtPm9uZS0+b2lkX3ZhbGlkICYmIHAtPnR3by0+b2lkX3ZhbGlkKSB8fAorCSAgICAocC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSkgfHwKKwkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBwLT5vbmUsIENIRUNLX1NJWkVfT05MWSkgfHwKKwkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBwLT50d28sIENIRUNLX1NJWkVfT05MWSkgfHwKKwkgICAgKHAtPm9uZS0+c2l6ZSAhPSBwLT50d28tPnNpemUpIHx8CisJICAgICFkaWZmX2ZpbGVzcGVjX2lzX2lkZW50aWNhbChyLCBwLT5vbmUsIHAtPnR3bykpIC8qICgyKSAqLworCQlwLT5za2lwX3N0YXRfdW5tYXRjaF9yZXN1bHQgPSAxOworCXJldHVybiBwLT5za2lwX3N0YXRfdW5tYXRjaF9yZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZjb3JlX3NraXBfc3RhdF91bm1hdGNoKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQpCit7CisJaW50IGk7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IG91dHE7CisJRElGRl9RVUVVRV9DTEVBUigmb3V0cSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCisJCWlmIChkaWZmX2ZpbGVzcGVjX2NoZWNrX3N0YXRfdW5tYXRjaChkaWZmb3B0LT5yZXBvLCBwKSkKKwkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIFRoZSBjYWxsZXIgY2FuIHN1YnRyYWN0IDEgZnJvbSBza2lwX3N0YXRfdW5tYXRjaAorCQkJICogdG8gZGV0ZXJtaW5lIGhvdyBtYW55IHBhdGhzIHdlcmUgZGlydHkgb25seQorCQkJICogZHVlIHRvIHN0YXQgaW5mbyBtaXNtYXRjaC4KKwkJCSAqLworCQkJaWYgKCFkaWZmb3B0LT5mbGFncy5ub19pbmRleCkKKwkJCQlkaWZmb3B0LT5za2lwX3N0YXRfdW5tYXRjaCsrOworCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCQl9CisJfQorCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKK30KKworc3RhdGljIGludCBkaWZmbmFtZWNtcChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmEgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKilhXyk7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmIgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKiliXyk7CisJY29uc3QgY2hhciAqbmFtZV9hLCAqbmFtZV9iOworCisJbmFtZV9hID0gYS0+b25lID8gYS0+b25lLT5wYXRoIDogYS0+dHdvLT5wYXRoOworCW5hbWVfYiA9IGItPm9uZSA/IGItPm9uZS0+cGF0aCA6IGItPnR3by0+cGF0aDsKKwlyZXR1cm4gc3RyY21wKG5hbWVfYSwgbmFtZV9iKTsKK30KKwordm9pZCBkaWZmY29yZV9maXhfZGlmZl9pbmRleCh2b2lkKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCVFTT1JUKHEtPnF1ZXVlLCBxLT5uciwgZGlmZm5hbWVjbXApOworfQorCitzdGF0aWMgdm9pZCBhZGRfaWZfbWlzc2luZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgIHN0cnVjdCBvaWRfYXJyYXkgKnRvX2ZldGNoLAorCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjKQoreworCWlmIChmaWxlc3BlYyAmJiBmaWxlc3BlYy0+b2lkX3ZhbGlkICYmCisJICAgICFTX0lTR0lUTElOSyhmaWxlc3BlYy0+bW9kZSkgJiYKKwkgICAgb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHIsICZmaWxlc3BlYy0+b2lkLCBOVUxMLAorCQkJCSAgICAgT0JKRUNUX0lORk9fRk9SX1BSRUZFVENIKSkKKwkJb2lkX2FycmF5X2FwcGVuZCh0b19mZXRjaCwgJmZpbGVzcGVjLT5vaWQpOworfQorCit2b2lkIGRpZmZjb3JlX3N0ZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWlmIChvcHRpb25zLT5yZXBvID09IHRoZV9yZXBvc2l0b3J5ICYmIGhhc19wcm9taXNvcl9yZW1vdGUoKSkgeworCQkvKgorCQkgKiBQcmVmZXRjaCB0aGUgZGlmZiBwYWlycyB0aGF0IGFyZSBhYm91dCB0byBiZSBmbHVzaGVkLgorCQkgKi8KKwkJaW50IGk7CisJCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCQlzdHJ1Y3Qgb2lkX2FycmF5IHRvX2ZldGNoID0gT0lEX0FSUkFZX0lOSVQ7CisKKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlhZGRfaWZfbWlzc2luZyhvcHRpb25zLT5yZXBvLCAmdG9fZmV0Y2gsIHAtPm9uZSk7CisJCQlhZGRfaWZfbWlzc2luZyhvcHRpb25zLT5yZXBvLCAmdG9fZmV0Y2gsIHAtPnR3byk7CisJCX0KKwkJaWYgKHRvX2ZldGNoLm5yKQorCQkJLyoKKwkJCSAqIE5FRURTV09SSzogQ29uc2lkZXIgZGVkdXBsaWNhdGluZyB0aGUgT0lEcyBzZW50LgorCQkJICovCisJCQlwcm9taXNvcl9yZW1vdGVfZ2V0X2RpcmVjdChvcHRpb25zLT5yZXBvLAorCQkJCQkJICAgdG9fZmV0Y2gub2lkLCB0b19mZXRjaC5ucik7CisJCW9pZF9hcnJheV9jbGVhcigmdG9fZmV0Y2gpOworCX0KKworCS8qIE5PVEUgcGxlYXNlIGtlZXAgdGhlIGZvbGxvd2luZyBpbiBzeW5jIHdpdGggZGlmZl90cmVlX2NvbWJpbmVkKCkgKi8KKwlpZiAob3B0aW9ucy0+c2tpcF9zdGF0X3VubWF0Y2gpCisJCWRpZmZjb3JlX3NraXBfc3RhdF91bm1hdGNoKG9wdGlvbnMpOworCWlmICghb3B0aW9ucy0+Zm91bmRfZm9sbG93KSB7CisJCS8qIFNlZSB0cnlfdG9fZm9sbG93X3JlbmFtZXMoKSBpbiB0cmVlLWRpZmYuYyAqLworCQlpZiAob3B0aW9ucy0+YnJlYWtfb3B0ICE9IC0xKQorCQkJZGlmZmNvcmVfYnJlYWsob3B0aW9ucy0+cmVwbywKKwkJCQkgICAgICAgb3B0aW9ucy0+YnJlYWtfb3B0KTsKKwkJaWYgKG9wdGlvbnMtPmRldGVjdF9yZW5hbWUpCisJCQlkaWZmY29yZV9yZW5hbWUob3B0aW9ucyk7CisJCWlmIChvcHRpb25zLT5icmVha19vcHQgIT0gLTEpCisJCQlkaWZmY29yZV9tZXJnZV9icm9rZW4oKTsKKwl9CisJaWYgKG9wdGlvbnMtPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9LSU5EU19NQVNLKQorCQlkaWZmY29yZV9waWNrYXhlKG9wdGlvbnMpOworCWlmIChvcHRpb25zLT5vcmRlcmZpbGUpCisJCWRpZmZjb3JlX29yZGVyKG9wdGlvbnMtPm9yZGVyZmlsZSk7CisJaWYgKCFvcHRpb25zLT5mb3VuZF9mb2xsb3cpCisJCS8qIFNlZSB0cnlfdG9fZm9sbG93X3JlbmFtZXMoKSBpbiB0cmVlLWRpZmYuYyAqLworCQlkaWZmX3Jlc29sdmVfcmVuYW1lX2NvcHkoKTsKKwlkaWZmY29yZV9hcHBseV9maWx0ZXIob3B0aW9ucyk7CisKKwlpZiAoZGlmZl9xdWV1ZWRfZGlmZi5uciAmJiAhb3B0aW9ucy0+ZmxhZ3MuZGlmZl9mcm9tX2NvbnRlbnRzKQorCQlvcHRpb25zLT5mbGFncy5oYXNfY2hhbmdlcyA9IDE7CisJZWxzZQorCQlvcHRpb25zLT5mbGFncy5oYXNfY2hhbmdlcyA9IDA7CisKKwlvcHRpb25zLT5mb3VuZF9mb2xsb3cgPSAwOworfQorCitpbnQgZGlmZl9yZXN1bHRfY29kZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIGludCBzdGF0dXMpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkaWZmX3dhcm5fcmVuYW1lX2xpbWl0KCJkaWZmLnJlbmFtZUxpbWl0IiwKKwkJCSAgICAgICBvcHQtPm5lZWRlZF9yZW5hbWVfbGltaXQsCisJCQkgICAgICAgb3B0LT5kZWdyYWRlZF9jY190b19jKTsKKwlpZiAoIW9wdC0+ZmxhZ3MuZXhpdF93aXRoX3N0YXR1cyAmJgorCSAgICAhKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRikpCisJCXJldHVybiBzdGF0dXM7CisJaWYgKG9wdC0+ZmxhZ3MuZXhpdF93aXRoX3N0YXR1cyAmJgorCSAgICBvcHQtPmZsYWdzLmhhc19jaGFuZ2VzKQorCQlyZXN1bHQgfD0gMDE7CisJaWYgKChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DSEVDS0RJRkYpICYmCisJICAgIG9wdC0+ZmxhZ3MuY2hlY2tfZmFpbGVkKQorCQlyZXN1bHQgfD0gMDI7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGRpZmZfY2FuX3F1aXRfZWFybHkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXJldHVybiAob3B0LT5mbGFncy5xdWljayAmJgorCQkhb3B0LT5maWx0ZXIgJiYKKwkJb3B0LT5mbGFncy5oYXNfY2hhbmdlcyk7Cit9CisKKy8qCisgKiBTaGFsbCBjaGFuZ2VzIHRvIHRoaXMgc3VibW9kdWxlIGJlIGlnbm9yZWQ/CisgKgorICogU3VibW9kdWxlIGNoYW5nZXMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYmUgaWdub3JlZCBzZXBhcmF0ZWx5IGZvciBlYWNoIHBhdGgsCisgKiBidXQgdGhhdCBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAqLworc3RhdGljIGludCBpc19zdWJtb2R1bGVfaWdub3JlZChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpZ25vcmVkID0gMDsKKwlzdHJ1Y3QgZGlmZl9mbGFncyBvcmlnX2ZsYWdzID0gb3B0aW9ucy0+ZmxhZ3M7CisJaWYgKCFvcHRpb25zLT5mbGFncy5vdmVycmlkZV9zdWJtb2R1bGVfY29uZmlnKQorCQlzZXRfZGlmZm9wdF9mbGFnc19mcm9tX3N1Ym1vZHVsZV9jb25maWcob3B0aW9ucywgcGF0aCk7CisJaWYgKG9wdGlvbnMtPmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzKQorCQlpZ25vcmVkID0gMTsKKwlvcHRpb25zLT5mbGFncyA9IG9yaWdfZmxhZ3M7CisJcmV0dXJuIGlnbm9yZWQ7Cit9CisKK3ZvaWQgY29tcHV0ZV9kaWZmc3RhdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgICBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQsCisJCSAgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSkKK3sKKwlpbnQgaTsKKworCW1lbXNldChkaWZmc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBkaWZmc3RhdF90KSk7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJaWYgKGNoZWNrX3BhaXJfc3RhdHVzKHApKQorCQkJZGlmZl9mbHVzaF9zdGF0KHAsIG9wdGlvbnMsIGRpZmZzdGF0KTsKKwl9Cit9CisKK3ZvaWQgZGlmZl9hZGRyZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICBpbnQgb2lkX3ZhbGlkLAorCQkgICAgY29uc3QgY2hhciAqY29uY2F0cGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsICp0d287CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkgJiYgaXNfc3VibW9kdWxlX2lnbm9yZWQoY29uY2F0cGF0aCwgb3B0aW9ucykpCisJCXJldHVybjsKKworCS8qIFRoaXMgbWF5IGxvb2sgb2RkLCBidXQgaXQgaXMgYSBwcmVwYXJhdGlvbiBmb3IKKwkgKiBmZWVkaW5nICJ0aGVyZSBhcmUgdW5jaGFuZ2VkIGZpbGVzIHdoaWNoIHNob3VsZAorCSAqIG5vdCBwcm9kdWNlIGRpZmZzLCBidXQgd2hlbiB5b3UgYXJlIGRvaW5nIGNvcHkKKwkgKiBkZXRlY3Rpb24geW91IHdvdWxkIG5lZWQgdGhlbSwgc28gaGVyZSB0aGV5IGFyZSIKKwkgKiBlbnRyaWVzIHRvIHRoZSBkaWZmLWNvcmUuICBUaGV5IHdpbGwgYmUgcHJlZml4ZWQKKwkgKiB3aXRoIHNvbWV0aGluZyBsaWtlICc9JyBvciAnKicgKEkgaGF2ZW4ndCBkZWNpZGVkCisJICogd2hpY2ggYnV0IHNob3VsZCBub3QgbWFrZSBhbnkgZGlmZmVyZW5jZSkuCisJICogRmVlZGluZyB0aGUgc2FtZSBuZXcgYW5kIG9sZCB0byBkaWZmX2NoYW5nZSgpCisJICogYWxzbyBoYXMgdGhlIHNhbWUgZWZmZWN0LgorCSAqIEJlZm9yZSB0aGUgZmluYWwgb3V0cHV0IGhhcHBlbnMsIHRoZXkgYXJlIHBydW5lZCBhZnRlcgorCSAqIG1lcmdlZCBpbnRvIHJlbmFtZS9jb3B5IHBhaXJzIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCWlmIChvcHRpb25zLT5mbGFncy5yZXZlcnNlX2RpZmYpCisJCWFkZHJlbW92ZSA9IChhZGRyZW1vdmUgPT0gJysnID8gJy0nIDoKKwkJCSAgICAgYWRkcmVtb3ZlID09ICctJyA/ICcrJyA6IGFkZHJlbW92ZSk7CisKKwlpZiAob3B0aW9ucy0+cHJlZml4ICYmCisJICAgIHN0cm5jbXAoY29uY2F0cGF0aCwgb3B0aW9ucy0+cHJlZml4LCBvcHRpb25zLT5wcmVmaXhfbGVuZ3RoKSkKKwkJcmV0dXJuOworCisJb25lID0gYWxsb2NfZmlsZXNwZWMoY29uY2F0cGF0aCk7CisJdHdvID0gYWxsb2NfZmlsZXNwZWMoY29uY2F0cGF0aCk7CisKKwlpZiAoYWRkcmVtb3ZlICE9ICcrJykKKwkJZmlsbF9maWxlc3BlYyhvbmUsIG9pZCwgb2lkX3ZhbGlkLCBtb2RlKTsKKwlpZiAoYWRkcmVtb3ZlICE9ICctJykgeworCQlmaWxsX2ZpbGVzcGVjKHR3bywgb2lkLCBvaWRfdmFsaWQsIG1vZGUpOworCQl0d28tPmRpcnR5X3N1Ym1vZHVsZSA9IGRpcnR5X3N1Ym1vZHVsZTsKKwl9CisKKwlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvbmUsIHR3byk7CisJaWYgKCFvcHRpb25zLT5mbGFncy5kaWZmX2Zyb21fY29udGVudHMpCisJCW9wdGlvbnMtPmZsYWdzLmhhc19jaGFuZ2VzID0gMTsKK30KKwordm9pZCBkaWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCSBpbnQgb2xkX29pZF92YWxpZCwgaW50IG5ld19vaWRfdmFsaWQsCisJCSBjb25zdCBjaGFyICpjb25jYXRwYXRoLAorCQkgdW5zaWduZWQgb2xkX2RpcnR5X3N1Ym1vZHVsZSwgdW5zaWduZWQgbmV3X2RpcnR5X3N1Ym1vZHVsZSkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCisJaWYgKFNfSVNHSVRMSU5LKG9sZF9tb2RlKSAmJiBTX0lTR0lUTElOSyhuZXdfbW9kZSkgJiYKKwkgICAgaXNfc3VibW9kdWxlX2lnbm9yZWQoY29uY2F0cGF0aCwgb3B0aW9ucykpCisJCXJldHVybjsKKworCWlmIChvcHRpb25zLT5mbGFncy5yZXZlcnNlX2RpZmYpIHsKKwkJU1dBUChvbGRfbW9kZSwgbmV3X21vZGUpOworCQlTV0FQKG9sZF9vaWQsIG5ld19vaWQpOworCQlTV0FQKG9sZF9vaWRfdmFsaWQsIG5ld19vaWRfdmFsaWQpOworCQlTV0FQKG9sZF9kaXJ0eV9zdWJtb2R1bGUsIG5ld19kaXJ0eV9zdWJtb2R1bGUpOworCX0KKworCWlmIChvcHRpb25zLT5wcmVmaXggJiYKKwkgICAgc3RybmNtcChjb25jYXRwYXRoLCBvcHRpb25zLT5wcmVmaXgsIG9wdGlvbnMtPnByZWZpeF9sZW5ndGgpKQorCQlyZXR1cm47CisKKwlvbmUgPSBhbGxvY19maWxlc3BlYyhjb25jYXRwYXRoKTsKKwl0d28gPSBhbGxvY19maWxlc3BlYyhjb25jYXRwYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKG9uZSwgb2xkX29pZCwgb2xkX29pZF92YWxpZCwgb2xkX21vZGUpOworCWZpbGxfZmlsZXNwZWModHdvLCBuZXdfb2lkLCBuZXdfb2lkX3ZhbGlkLCBuZXdfbW9kZSk7CisJb25lLT5kaXJ0eV9zdWJtb2R1bGUgPSBvbGRfZGlydHlfc3VibW9kdWxlOworCXR3by0+ZGlydHlfc3VibW9kdWxlID0gbmV3X2RpcnR5X3N1Ym1vZHVsZTsKKwlwID0gZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgb25lLCB0d28pOworCisJaWYgKG9wdGlvbnMtPmZsYWdzLmRpZmZfZnJvbV9jb250ZW50cykKKwkJcmV0dXJuOworCisJaWYgKG9wdGlvbnMtPmZsYWdzLnF1aWNrICYmIG9wdGlvbnMtPnNraXBfc3RhdF91bm1hdGNoICYmCisJICAgICFkaWZmX2ZpbGVzcGVjX2NoZWNrX3N0YXRfdW5tYXRjaChvcHRpb25zLT5yZXBvLCBwKSkKKwkJcmV0dXJuOworCisJb3B0aW9ucy0+ZmxhZ3MuaGFzX2NoYW5nZXMgPSAxOworfQorCitzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl91bm1lcmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXI7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKKworCWlmIChvcHRpb25zLT5wcmVmaXggJiYKKwkgICAgc3RybmNtcChwYXRoLCBvcHRpb25zLT5wcmVmaXgsIG9wdGlvbnMtPnByZWZpeF9sZW5ndGgpKQorCQlyZXR1cm4gTlVMTDsKKworCW9uZSA9IGFsbG9jX2ZpbGVzcGVjKHBhdGgpOworCXR3byA9IGFsbG9jX2ZpbGVzcGVjKHBhdGgpOworCXBhaXIgPSBkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvbmUsIHR3byk7CisJcGFpci0+aXNfdW5tZXJnZWQgPSAxOworCXJldHVybiBwYWlyOworfQorCitzdGF0aWMgY2hhciAqcnVuX3RleHRjb252KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBjb25zdCBjaGFyICpwZ20sCisJCQkgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjLAorCQkJICBzaXplX3QgKm91dHNpemUpCit7CisJc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXA7CisJY29uc3QgY2hhciAqYXJndlszXTsKKwljb25zdCBjaGFyICoqYXJnID0gYXJndjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBlcnIgPSAwOworCisJdGVtcCA9IHByZXBhcmVfdGVtcF9maWxlKHIsIHNwZWMtPnBhdGgsIHNwZWMpOworCSphcmcrKyA9IHBnbTsKKwkqYXJnKysgPSB0ZW1wLT5uYW1lOworCSphcmcgPSBOVUxMOworCisJY2hpbGQudXNlX3NoZWxsID0gMTsKKwljaGlsZC5hcmd2ID0gYXJndjsKKwljaGlsZC5vdXQgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpKSB7CisJCXJlbW92ZV90ZW1wZmlsZSgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgY2hpbGQub3V0LCAwKSA8IDApCisJCWVyciA9IGVycm9yKCJlcnJvciByZWFkaW5nIGZyb20gdGV4dGNvbnYgY29tbWFuZCAnJXMnIiwgcGdtKTsKKwljbG9zZShjaGlsZC5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjaGlsZCkgfHwgZXJyKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZW1vdmVfdGVtcGZpbGUoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJlbW92ZV90ZW1wZmlsZSgpOworCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1Ziwgb3V0c2l6ZSk7Cit9CisKK3NpemVfdCBmaWxsX3RleHRjb252KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlciwKKwkJICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYsCisJCSAgICAgY2hhciAqKm91dGJ1ZikKK3sKKwlzaXplX3Qgc2l6ZTsKKworCWlmICghZHJpdmVyKSB7CisJCWlmICghRElGRl9GSUxFX1ZBTElEKGRmKSkgeworCQkJKm91dGJ1ZiA9ICIiOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgZGYsIDApKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisJCSpvdXRidWYgPSBkZi0+ZGF0YTsKKwkJcmV0dXJuIGRmLT5zaXplOworCX0KKworCWlmICghZHJpdmVyLT50ZXh0Y29udikKKwkJQlVHKCJmaWxsX3RleHRjb252IGNhbGxlZCB3aXRoIG5vbi10ZXh0Y29udiBkcml2ZXIiKTsKKworCWlmIChkcml2ZXItPnRleHRjb252X2NhY2hlICYmIGRmLT5vaWRfdmFsaWQpIHsKKwkJKm91dGJ1ZiA9IG5vdGVzX2NhY2hlX2dldChkcml2ZXItPnRleHRjb252X2NhY2hlLAorCQkJCQkgICZkZi0+b2lkLAorCQkJCQkgICZzaXplKTsKKwkJaWYgKCpvdXRidWYpCisJCQlyZXR1cm4gc2l6ZTsKKwl9CisKKwkqb3V0YnVmID0gcnVuX3RleHRjb252KHIsIGRyaXZlci0+dGV4dGNvbnYsIGRmLCAmc2l6ZSk7CisJaWYgKCEqb3V0YnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKworCWlmIChkcml2ZXItPnRleHRjb252X2NhY2hlICYmIGRmLT5vaWRfdmFsaWQpIHsKKwkJLyogaWdub3JlIGVycm9ycywgYXMgd2UgbWlnaHQgYmUgaW4gYSByZWFkb25seSByZXBvc2l0b3J5ICovCisJCW5vdGVzX2NhY2hlX3B1dChkcml2ZXItPnRleHRjb252X2NhY2hlLCAmZGYtPm9pZCwgKm91dGJ1ZiwKKwkJCQlzaXplKTsKKwkJLyoKKwkJICogd2UgY291bGQgc2F2ZSB1cCBjaGFuZ2VzIGFuZCBmbHVzaCB0aGVtIGFsbCBhdCB0aGUgZW5kLAorCQkgKiBidXQgd2Ugd291bGQgbmVlZCBhbiBleHRyYSBjYWxsIGFmdGVyIGFsbCBkaWZmaW5nIGlzIGRvbmUuCisJCSAqIFNpbmNlIGdlbmVyYXRpbmcgYSBjYWNoZSBlbnRyeSBpcyB0aGUgc2xvdyBwYXRoIGFueXdheSwKKwkJICogdGhpcyBleHRyYSBvdmVyaGVhZCBwcm9iYWJseSBpc24ndCBhIGJpZyBkZWFsLgorCQkgKi8KKwkJbm90ZXNfY2FjaGVfd3JpdGUoZHJpdmVyLT50ZXh0Y29udl9jYWNoZSk7CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKK2ludCB0ZXh0Y29udl9vYmplY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgdW5zaWduZWQgbW9kZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBvaWRfdmFsaWQsCisJCSAgICBjaGFyICoqYnVmLAorCQkgICAgdW5zaWduZWQgbG9uZyAqYnVmX3NpemUpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252OworCisJZGYgPSBhbGxvY19maWxlc3BlYyhwYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKGRmLCBvaWQsIG9pZF92YWxpZCwgbW9kZSk7CisJdGV4dGNvbnYgPSBnZXRfdGV4dGNvbnYociwgZGYpOworCWlmICghdGV4dGNvbnYpIHsKKwkJZnJlZV9maWxlc3BlYyhkZik7CisJCXJldHVybiAwOworCX0KKworCSpidWZfc2l6ZSA9IGZpbGxfdGV4dGNvbnYociwgdGV4dGNvbnYsIGRmLCBidWYpOworCWZyZWVfZmlsZXNwZWMoZGYpOworCXJldHVybiAxOworfQorCit2b2lkIHNldHVwX2RpZmZfcGFnZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCS8qCisJICogSWYgdGhlIHVzZXIgYXNrZWQgZm9yIG91ciBleGl0IGNvZGUsIHRoZW4gZWl0aGVyIHRoZXkgd2FudCAtLXF1aWV0CisJICogb3IgLS1leGl0LWNvZGUuIFdlIHNob3VsZCBkZWZpbml0ZWx5IG5vdCBib3RoZXIgd2l0aCBhIHBhZ2VyIGluIHRoZQorCSAqIGZvcm1lciBjYXNlLCBhcyB3ZSB3aWxsIGdlbmVyYXRlIG5vIG91dHB1dC4gU2luY2Ugd2Ugc3RpbGwgcHJvcGVybHkKKwkgKiByZXBvcnQgb3VyIGV4aXQgY29kZSBldmVuIHdoZW4gYSBwYWdlciBpcyBydW4sIHdlIF9jb3VsZF8gcnVuIGEKKwkgKiBwYWdlciB3aXRoIC0tZXhpdC1jb2RlLiBCdXQgc2luY2Ugd2UgaGF2ZSBub3QgZG9uZSBzbyBoaXN0b3JpY2FsbHksCisJICogYW5kIGJlY2F1c2UgaXQgaXMgZWFzeSB0byBmaW5kIHBlb3BsZSBvbmVsaW5lIGFkdmlzaW5nICJnaXQgZGlmZgorCSAqIC0tZXhpdC1jb2RlIiBpbiBob29rcyBhbmQgb3RoZXIgc2NyaXB0cywgd2UgZG8gbm90IGRvIHNvLgorCSAqLworCWlmICghb3B0LT5mbGFncy5leGl0X3dpdGhfc3RhdHVzICYmCisJICAgIGNoZWNrX3BhZ2VyX2NvbmZpZygiZGlmZiIpICE9IDApCisJCXNldHVwX3BhZ2VyKCk7Cit9CmRpZmYgLS1naXQgYS9kaWZmLmggYi9kaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlYmU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYuaApAQCAtMCwwICsxLDY0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubworICovCisjaWZuZGVmIERJRkZfSAorI2RlZmluZSBESUZGX0gKKworI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAib2lkc2V0LmgiCisKKy8qKgorICogVGhlIGRpZmYgQVBJIGlzIGZvciBwcm9ncmFtcyB0aGF0IGNvbXBhcmUgdHdvIHNldHMgb2YgZmlsZXMgKGUuZy4gdHdvIHRyZWVzLAorICogb25lIHRyZWUgYW5kIHRoZSBpbmRleCkgYW5kIHByZXNlbnQgdGhlIGZvdW5kIGRpZmZlcmVuY2UgaW4gdmFyaW91cyB3YXlzLgorICogVGhlIGNhbGxpbmcgcHJvZ3JhbSBpcyByZXNwb25zaWJsZSBmb3IgZmVlZGluZyB0aGUgQVBJIHBhaXJzIG9mIGZpbGVzLCBvbmUKKyAqIGZyb20gdGhlICJvbGQiIHNldCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb25lIGZyb20gIm5ldyIgc2V0LCB0aGF0IGFyZQorICogZGlmZmVyZW50LgorICogVGhlIGxpYnJhcnkgY2FsbGVkIHRocm91Z2ggdGhpcyBBUEkgaXMgY2FsbGVkIGRpZmZjb3JlLCBhbmQgaXMgcmVzcG9uc2libGUKKyAqIGZvciB0d28gdGhpbmdzLgorICoKKyAqIC0gZmluZGluZyB0b3RhbCByZXdyaXRlcyAoYC1CYCksIHJlbmFtZXMgKGAtTWApIGFuZCBjb3BpZXMgKGAtQ2ApLCBhbmQKKyAqIGNoYW5nZXMgdGhhdCB0b3VjaCBhIHN0cmluZyAoYC1TYCksIGFzIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIC0gb3V0cHV0dGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gdmFyaW91cyBmb3JtYXRzLCBhcyBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogLSBQcmVwYXJlIGBzdHJ1Y3QgZGlmZl9vcHRpb25zYCB0byByZWNvcmQgdGhlIHNldCBvZiBkaWZmIG9wdGlvbnMsIGFuZCB0aGVuCisgKiBjYWxsIGByZXBvX2RpZmZfc2V0dXAoKWAgdG8gaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZS4gIFRoaXMgc2V0cyB1cCB0aGUKKyAqIHZhbmlsbGEgZGVmYXVsdC4KKyAqCisgKiAtIEZpbGwgaW4gdGhlIG9wdGlvbnMgc3RydWN0dXJlIHRvIHNwZWNpZnkgZGVzaXJlZCBvdXRwdXQgZm9ybWF0LCByZW5hbWUKKyAqIGRldGVjdGlvbiwgZXRjLiAgYGRpZmZfb3B0X3BhcnNlKClgIGNhbiBiZSB1c2VkIHRvIHBhcnNlIG9wdGlvbnMgZ2l2ZW4KKyAqIGZyb20gdGhlIGNvbW1hbmQgbGluZSBpbiBhIHdheSBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcgZ2l0LWRpZmYgZmFtaWx5CisgKiBvZiBwcm9ncmFtcy4KKyAqCisgKiAtIENhbGwgYGRpZmZfc2V0dXBfZG9uZSgpYDsgdGhpcyBpbnNwZWN0cyB0aGUgb3B0aW9ucyBzZXQgdXAgc28gZmFyIGZvcgorICogaW50ZXJuYWwgY29uc2lzdGVuY3kgYW5kIG1ha2UgbmVjZXNzYXJ5IHR3ZWFraW5nIHRvIGl0IChlLmcuIGlmIHRleHR1YWwKKyAqIHBhdGNoIG91dHB1dCB3YXMgYXNrZWQsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgaXMgdHVybmVkIG9uKTsgdGhlIGNhbGxiYWNrCisgKiBzZXRfZGVmYXVsdCBpbiBkaWZmX29wdGlvbnMgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhpcyBtb3JlLgorICoKKyAqIC0gQXMgeW91IGZpbmQgZGlmZmVyZW50IHBhaXJzIG9mIGZpbGVzLCBjYWxsIGBkaWZmX2NoYW5nZSgpYCB0byBmZWVkCisgKiBtb2RpZmllZCBmaWxlcywgYGRpZmZfYWRkcmVtb3ZlKClgIHRvIGZlZWQgY3JlYXRlZCBvciBkZWxldGVkIGZpbGVzLCBvcgorICogYGRpZmZfdW5tZXJnZSgpYCB0byBmZWVkIGEgZmlsZSB3aG9zZSBzdGF0ZSBpcyAndW5tZXJnZWQnIHRvIHRoZSBBUEkuCisgKiBUaGVzZSBhcmUgdGhpbiB3cmFwcGVycyB0byBhIGxvd2VyLWxldmVsIGBkaWZmX3F1ZXVlKClgIGZ1bmN0aW9uIHRoYXQgaXMKKyAqIGZsZXhpYmxlIGVub3VnaCB0byByZWNvcmQgYW55IG9mIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMuCisgKgorICogLSBPbmNlIHlvdSBmaW5pc2ggZmVlZGluZyB0aGUgcGFpcnMgb2YgZmlsZXMsIGNhbGwgYGRpZmZjb3JlX3N0ZCgpYC4KKyAqIFRoaXMgd2lsbCB0ZWxsIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRvIGdvIGFoZWFkIGFuZCBkbyBpdHMgd29yay4KKyAqCisgKiAtIENhbGxpbmcgYGRpZmZfZmx1c2goKWAgd2lsbCBwcm9kdWNlIHRoZSBvdXRwdXQuCisgKi8KKworc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoOworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCBkaWZmX2ZpbGVzcGVjOworc3RydWN0IGRpZmZfb3B0aW9uczsKK3N0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdDsKK3N0cnVjdCBvaWRfYXJyYXk7CitzdHJ1Y3Qgb3B0aW9uOworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3QgcmV2X2luZm87CitzdHJ1Y3Qgc3RyYnVmOworc3RydWN0IHVzZXJkaWZmX2RyaXZlcjsKKwordHlwZWRlZiBpbnQgKCpwYXRoY2hhbmdlX2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnBhdGgpOworCit0eXBlZGVmIHZvaWQgKCpjaGFuZ2VfZm5fdCkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKKwkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQkgaW50IG9sZF9vaWRfdmFsaWQsIGludCBuZXdfb2lkX3ZhbGlkLAorCQkgY29uc3QgY2hhciAqZnVsbHBhdGgsCisJCSB1bnNpZ25lZCBvbGRfZGlydHlfc3VibW9kdWxlLCB1bnNpZ25lZCBuZXdfZGlydHlfc3VibW9kdWxlKTsKKwordHlwZWRlZiB2b2lkICgqYWRkX3JlbW92ZV9mbl90KShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgaW50IGFkZHJlbW92ZSwgdW5zaWduZWQgbW9kZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBvaWRfdmFsaWQsCisJCSAgICBjb25zdCBjaGFyICpmdWxscGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKTsKKwordHlwZWRlZiB2b2lkICgqZGlmZl9mb3JtYXRfZm5fdCkoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCB2b2lkICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3Qgc3RyYnVmICooKmRpZmZfcHJlZml4X2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSk7CisKKyNkZWZpbmUgRElGRl9GT1JNQVRfUkFXCQkweDAwMDEKKyNkZWZpbmUgRElGRl9GT1JNQVRfRElGRlNUQVQJMHgwMDAyCisjZGVmaW5lIERJRkZfRk9STUFUX05VTVNUQVQJMHgwMDA0CisjZGVmaW5lIERJRkZfRk9STUFUX1NVTU1BUlkJMHgwMDA4CisjZGVmaW5lIERJRkZfRk9STUFUX1BBVENICTB4MDAxMAorI2RlZmluZSBESUZGX0ZPUk1BVF9TSE9SVFNUQVQJMHgwMDIwCisjZGVmaW5lIERJRkZfRk9STUFUX0RJUlNUQVQJMHgwMDQwCisKKy8qIFRoZXNlIG92ZXJyaWRlIGFsbCBhYm92ZSAqLworI2RlZmluZSBESUZGX0ZPUk1BVF9OQU1FCTB4MDEwMAorI2RlZmluZSBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUwkweDAyMDAKKyNkZWZpbmUgRElGRl9GT1JNQVRfQ0hFQ0tESUZGCTB4MDQwMAorCisvKiBTYW1lIGFzIG91dHB1dF9mb3JtYXQgPSAwIGJ1dCB3ZSBrbm93IHRoYXQgLXMgZmxhZyB3YXMgZ2l2ZW4KKyAqIGFuZCB3ZSBzaG91bGQgbm90IGdpdmUgZGVmYXVsdCB2YWx1ZSB0byBvdXRwdXRfZm9ybWF0LgorICovCisjZGVmaW5lIERJRkZfRk9STUFUX05PX09VVFBVVAkweDA4MDAKKworI2RlZmluZSBESUZGX0ZPUk1BVF9DQUxMQkFDSwkweDEwMDAKKworI2RlZmluZSBESUZGX0ZMQUdTX0lOSVQgeyAwIH0KK3N0cnVjdCBkaWZmX2ZsYWdzIHsKKworCS8qKgorCSAqIFRlbGxzIGlmIHRyZWUgdHJhdmVyc2FsIGRvbmUgYnkgdHJlZS1kaWZmIHNob3VsZCByZWN1cnNpdmVseSBkZXNjZW5kCisJICogaW50byBhIHRyZWUgb2JqZWN0IHBhaXIgdGhhdCBhcmUgZGlmZmVyZW50IGluIHByZWltYWdlIGFuZCBwb3N0aW1hZ2Ugc2V0LgorCSAqLworCXVuc2lnbmVkIHJlY3Vyc2l2ZTsKKwl1bnNpZ25lZCB0cmVlX2luX3JlY3Vyc2l2ZTsKKworCS8qIEFmZmVjdHMgdGhlIHdheSBob3cgYSBmaWxlIHRoYXQgaXMgc2VlbWluZ2x5IGJpbmFyeSBpcyB0cmVhdGVkLiAqLworCXVuc2lnbmVkIGJpbmFyeTsKKwl1bnNpZ25lZCB0ZXh0OworCisJLyoqCisJICogVGVsbHMgdGhlIHBhdGNoIG91dHB1dCBmb3JtYXQgbm90IHRvIHVzZSBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMgb24gdGhlCisJICogImluZGV4IiBsaW5lcy4KKwkgKi8KKwl1bnNpZ25lZCBmdWxsX2luZGV4OworCisJLyogQWZmZWN0cyBpZiBkaWZmLWZpbGVzIHNob3dzIHJlbW92ZWQgZmlsZXMuICovCisJdW5zaWduZWQgc2lsZW50X29uX3JlbW92ZTsKKworCS8qKgorCSAqIFRlbGxzIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRoYXQgdGhlIGNhbGxlciBpcyBmZWVkaW5nIHVuY2hhbmdlZAorCSAqIGZpbGVwYWlycyB0byBhbGxvdyBjb3BpZXMgZnJvbSB1bm1vZGlmaWVkIGZpbGVzIGJlIGRldGVjdGVkLgorCSAqLworCXVuc2lnbmVkIGZpbmRfY29waWVzX2hhcmRlcjsKKworCXVuc2lnbmVkIGZvbGxvd19yZW5hbWVzOworCXVuc2lnbmVkIHJlbmFtZV9lbXB0eTsKKworCS8qIEludGVybmFsOyB1c2VkIGZvciBvcHRpbWl6YXRpb24gdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjaGFuZ2UuICovCisJdW5zaWduZWQgaGFzX2NoYW5nZXM7CisKKwl1bnNpZ25lZCBxdWljazsKKworCS8qKgorCSAqIFRlbGxzIGRpZmYtZmlsZXMgdGhhdCB0aGUgaW5wdXQgaXMgbm90IHRyYWNrZWQgZmlsZXMgYnV0IGZpbGVzIGluIHJhbmRvbQorCSAqIGxvY2F0aW9ucyBvbiB0aGUgZmlsZXN5c3RlbS4KKwkgKi8KKwl1bnNpZ25lZCBub19pbmRleDsKKworCS8qKgorCSAqIFRlbGxzIG91dHB1dCByb3V0aW5lIHRoYXQgaXQgaXMgT2sgdG8gY2FsbCB1c2VyIHNwZWNpZmllZCBwYXRjaCBvdXRwdXQKKwkgKiByb3V0aW5lLiAgUGx1bWJpbmcgZGlzYWJsZXMgdGhpcyB0byBlbnN1cmUgc3RhYmxlIG91dHB1dC4KKwkgKi8KKwl1bnNpZ25lZCBhbGxvd19leHRlcm5hbDsKKworCS8qKgorCSAqIEZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGNhbGxpbmcgcHJvZ3JhbSBhbmQgdGhlIG9wdGlvbnMgcGFyc2VyOworCSAqIHRlbGwgdGhlIGNhbGxpbmcgcHJvZ3JhbSB0byBzaWduYWwgdGhlIHByZXNlbmNlIG9mIGRpZmZlcmVuY2UgdXNpbmcKKwkgKiBwcm9ncmFtIGV4aXQgY29kZS4KKwkgKi8KKwl1bnNpZ25lZCBleGl0X3dpdGhfc3RhdHVzOworCisJLyoqCisJICogVGVsbHMgdGhlIGxpYnJhcnkgdGhhdCB0aGUgY2FsbGluZyBwcm9ncmFtIGlzIGZlZWRpbmcgdGhlIGZpbGVwYWlycworCSAqIHJldmVyc2VkOyBgb25lYCBpcyB0d28sIGFuZCBgdHdvYCBpcyBvbmUuCisJICovCisJdW5zaWduZWQgcmV2ZXJzZV9kaWZmOworCisJdW5zaWduZWQgY2hlY2tfZmFpbGVkOworCXVuc2lnbmVkIHJlbGF0aXZlX25hbWU7CisJdW5zaWduZWQgaWdub3JlX3N1Ym1vZHVsZXM7CisJdW5zaWduZWQgZGlyc3RhdF9jdW11bGF0aXZlOworCXVuc2lnbmVkIGRpcnN0YXRfYnlfZmlsZTsKKwl1bnNpZ25lZCBhbGxvd190ZXh0Y29udjsKKwl1bnNpZ25lZCB0ZXh0Y29udl9zZXRfdmlhX2NtZGxpbmU7CisJdW5zaWduZWQgZGlmZl9mcm9tX2NvbnRlbnRzOworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZXM7CisJdW5zaWduZWQgaWdub3JlX3VudHJhY2tlZF9pbl9zdWJtb2R1bGVzOworCXVuc2lnbmVkIGlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzOworCXVuc2lnbmVkIG92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWc7CisJdW5zaWduZWQgZGlyc3RhdF9ieV9saW5lOworCXVuc2lnbmVkIGZ1bmNjb250ZXh0OworCXVuc2lnbmVkIGRlZmF1bHRfZm9sbG93X3JlbmFtZXM7CisJdW5zaWduZWQgc3RhdF93aXRoX3N1bW1hcnk7CisJdW5zaWduZWQgc3VwcHJlc3NfZGlmZl9oZWFkZXJzOworCXVuc2lnbmVkIGR1YWxfY29sb3JfZGlmZmVkX2RpZmZzOworCXVuc2lnbmVkIHN1cHByZXNzX2h1bmtfaGVhZGVyX2xpbmVfY291bnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZGlmZl9mbGFnc19vcihzdHJ1Y3QgZGlmZl9mbGFncyAqYSwKKwkJCQkgY29uc3Qgc3RydWN0IGRpZmZfZmxhZ3MgKmIpCit7CisJY2hhciAqdG1wX2EgPSAoY2hhciAqKWE7CisJY29uc3QgY2hhciAqdG1wX2IgPSAoY29uc3QgY2hhciAqKWI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBkaWZmX2ZsYWdzKTsgaSsrKQorCQl0bXBfYVtpXSB8PSB0bXBfYltpXTsKK30KKworI2RlZmluZSBESUZGX1hETF9UU1Qob3B0cywgZmxhZykgICAgKChvcHRzKS0+eGRsX29wdHMgJiBYREZfIyNmbGFnKQorI2RlZmluZSBESUZGX1hETF9TRVQob3B0cywgZmxhZykgICAgKChvcHRzKS0+eGRsX29wdHMgfD0gWERGXyMjZmxhZykKKyNkZWZpbmUgRElGRl9YRExfQ0xSKG9wdHMsIGZsYWcpICAgICgob3B0cyktPnhkbF9vcHRzICY9IH5YREZfIyNmbGFnKQorCisjZGVmaW5lIERJRkZfV0lUSF9BTEcob3B0cywgZmxhZykgICAoKChvcHRzKS0+eGRsX29wdHMgJiB+WERGX0RJRkZfQUxHT1JJVEhNX01BU0spIHwgWERGXyMjZmxhZykKKworZW51bSBkaWZmX3dvcmRzX3R5cGUgeworCURJRkZfV09SRFNfTk9ORSA9IDAsCisJRElGRl9XT1JEU19QT1JDRUxBSU4sCisJRElGRl9XT1JEU19QTEFJTiwKKwlESUZGX1dPUkRTX0NPTE9SCit9OworCitlbnVtIGRpZmZfc3VibW9kdWxlX2Zvcm1hdCB7CisJRElGRl9TVUJNT0RVTEVfU0hPUlQgPSAwLAorCURJRkZfU1VCTU9EVUxFX0xPRywKKwlESUZGX1NVQk1PRFVMRV9JTkxJTkVfRElGRgorfTsKKworLyoqCisgKiB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZgorICogZGlmZmNvcmUgbGlicmFyeSB3aXRoLgorICovCitzdHJ1Y3QgZGlmZl9vcHRpb25zIHsKKwljb25zdCBjaGFyICpvcmRlcmZpbGU7CisKKwkvKioKKwkgKiBBIGNvbnN0YW50IHN0cmluZyAoY2FuIGFuZCB0eXBpY2FsbHkgZG9lcyBjb250YWluIG5ld2xpbmVzIHRvIGxvb2sgZm9yCisJICogYSBibG9jayBvZiB0ZXh0LCBub3QganVzdCBhIHNpbmdsZSBsaW5lKSB0byBmaWx0ZXIgb3V0IHRoZSBmaWxlcGFpcnMKKwkgKiB0aGF0IGRvIG5vdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBzdHJpbmdzIGNvbnRhaW5lZCBpbiBpdHMgcHJlaW1hZ2UgYW5kCisJICogcG9zdGltYWdlIG9mIHRoZSBkaWZmX3F1ZXVlLgorCSAqLworCWNvbnN0IGNoYXIgKnBpY2theGU7CisKKwljb25zdCBjaGFyICpzaW5nbGVfZm9sbG93OworCWNvbnN0IGNoYXIgKmFfcHJlZml4LCAqYl9wcmVmaXg7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXg7CisJc2l6ZV90IGxpbmVfcHJlZml4X2xlbmd0aDsKKworCS8qKgorCSAqIGNvbGxlY3Rpb24gb2YgYm9vbGVhbiBvcHRpb25zIHRoYXQgYWZmZWN0cyB0aGUgb3BlcmF0aW9uLCBidXQgc29tZSBkbworCSAqIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGRpZmZjb3JlIGxpYnJhcnkuCisJICovCisJc3RydWN0IGRpZmZfZmxhZ3MgZmxhZ3M7CisKKwkvKiBkaWZmLWZpbHRlciBiaXRzICovCisJdW5zaWduZWQgaW50IGZpbHRlcjsKKworCWludCB1c2VfY29sb3I7CisKKwkvKiBOdW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byBnZW5lcmF0ZSBpbiBwYXRjaCBvdXRwdXQuICovCisJaW50IGNvbnRleHQ7CisKKwlpbnQgaW50ZXJodW5rY29udGV4dDsKKworCS8qIEFmZmVjdHMgdGhlIHdheSBkZXRlY3Rpb24gbG9naWMgZm9yIGNvbXBsZXRlIHJld3JpdGVzLCByZW5hbWVzIGFuZAorCSAqIGNvcGllcy4KKwkgKi8KKwlpbnQgYnJlYWtfb3B0OworCWludCBkZXRlY3RfcmVuYW1lOworCisJaW50IGlycmV2ZXJzaWJsZV9kZWxldGU7CisJaW50IHNraXBfc3RhdF91bm1hdGNoOworCWludCBsaW5lX3Rlcm1pbmF0aW9uOworCisJLyogVGhlIG91dHB1dCBmb3JtYXQgdXNlZCB3aGVuIGBkaWZmX2ZsdXNoKClgIGlzIHJ1bi4gKi8KKwlpbnQgb3V0cHV0X2Zvcm1hdDsKKworCXVuc2lnbmVkIHBpY2theGVfb3B0czsKKworCS8qIEFmZmVjdHMgdGhlIHdheSBkZXRlY3Rpb24gbG9naWMgZm9yIGNvbXBsZXRlIHJld3JpdGVzLCByZW5hbWVzIGFuZAorCSAqIGNvcGllcy4KKwkgKi8KKwlpbnQgcmVuYW1lX3Njb3JlOworCWludCByZW5hbWVfbGltaXQ7CisKKwlpbnQgbmVlZGVkX3JlbmFtZV9saW1pdDsKKwlpbnQgZGVncmFkZWRfY2NfdG9fYzsKKwlpbnQgc2hvd19yZW5hbWVfcHJvZ3Jlc3M7CisJaW50IGRpcnN0YXRfcGVybWlsbGU7CisJaW50IHNldHVwOworCisJLyogTnVtYmVyIG9mIGhleGRpZ2l0cyB0byBhYmJyZXZpYXRlIHJhdyBmb3JtYXQgb3V0cHV0IHRvLiAqLworCWludCBhYmJyZXY7CisKKwlpbnQgaXRhX2ludmlzaWJsZV9pbl9pbmRleDsKKy8qIHdoaXRlLXNwYWNlIGVycm9yIGhpZ2hsaWdodGluZyAqLworI2RlZmluZSBXU0VIX05FVyAoMTw8MTIpCisjZGVmaW5lIFdTRUhfQ09OVEVYVCAoMTw8MTMpCisjZGVmaW5lIFdTRUhfT0xEICgxPDwxNCkKKwl1bnNpZ25lZCB3c19lcnJvcl9oaWdobGlnaHQ7CisJY29uc3QgY2hhciAqcHJlZml4OworCWludCBwcmVmaXhfbGVuZ3RoOworCWNvbnN0IGNoYXIgKnN0YXRfc2VwOworCWludCB4ZGxfb3B0czsKKworCS8qIHNlZSBEb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQgKi8KKwljaGFyICoqYW5jaG9yczsKKwlzaXplX3QgYW5jaG9yc19uciwgYW5jaG9yc19hbGxvYzsKKworCWludCBzdGF0X3dpZHRoOworCWludCBzdGF0X25hbWVfd2lkdGg7CisJaW50IHN0YXRfZ3JhcGhfd2lkdGg7CisJaW50IHN0YXRfY291bnQ7CisJY29uc3QgY2hhciAqd29yZF9yZWdleDsKKwllbnVtIGRpZmZfd29yZHNfdHlwZSB3b3JkX2RpZmY7CisJZW51bSBkaWZmX3N1Ym1vZHVsZV9mb3JtYXQgc3VibW9kdWxlX2Zvcm1hdDsKKworCXN0cnVjdCBvaWRzZXQgKm9iamZpbmQ7CisKKwkvKiB0aGlzIGlzIHNldCBieSBkaWZmY29yZSBmb3IgRElGRl9GT1JNQVRfUEFUQ0ggKi8KKwlpbnQgZm91bmRfY2hhbmdlczsKKworCS8qIHRvIHN1cHBvcnQgaW50ZXJuYWwgZGlmZiByZWN1cnNpb24gYnkgLS1mb2xsb3cgaGFjayovCisJaW50IGZvdW5kX2ZvbGxvdzsKKworCS8qIENhbGxiYWNrIHdoaWNoIGFsbG93cyB0d2Vha2luZyB0aGUgb3B0aW9ucyBpbiBkaWZmX3NldHVwX2RvbmUoKS4gKi8KKwl2b2lkICgqc2V0X2RlZmF1bHQpKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CisKKwlGSUxFICpmaWxlOworCWludCBjbG9zZV9maWxlOworCisjZGVmaW5lIE9VVFBVVF9JTkRJQ0FUT1JfTkVXIDAKKyNkZWZpbmUgT1VUUFVUX0lORElDQVRPUl9PTEQgMQorI2RlZmluZSBPVVRQVVRfSU5ESUNBVE9SX0NPTlRFWFQgMgorCWNoYXIgb3V0cHV0X2luZGljYXRvcnNbM107CisKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJcGF0aGNoYW5nZV9mbl90IHBhdGhjaGFuZ2U7CisJY2hhbmdlX2ZuX3QgY2hhbmdlOworCWFkZF9yZW1vdmVfZm5fdCBhZGRfcmVtb3ZlOworCXZvaWQgKmNoYW5nZV9mbl9kYXRhOworCWRpZmZfZm9ybWF0X2ZuX3QgZm9ybWF0X2NhbGxiYWNrOworCXZvaWQgKmZvcm1hdF9jYWxsYmFja19kYXRhOworCWRpZmZfcHJlZml4X2ZuX3Qgb3V0cHV0X3ByZWZpeDsKKwl2b2lkICpvdXRwdXRfcHJlZml4X2RhdGE7CisKKwlpbnQgZGlmZl9wYXRoX2NvdW50ZXI7CisKKwlzdHJ1Y3QgZW1pdHRlZF9kaWZmX3N5bWJvbHMgKmVtaXR0ZWRfc3ltYm9sczsKKwllbnVtIHsKKwkJQ09MT1JfTU9WRURfTk8gPSAwLAorCQlDT0xPUl9NT1ZFRF9QTEFJTiA9IDEsCisJCUNPTE9SX01PVkVEX0JMT0NLUyA9IDIsCisJCUNPTE9SX01PVkVEX1pFQlJBID0gMywKKwkJQ09MT1JfTU9WRURfWkVCUkFfRElNID0gNCwKKwl9IGNvbG9yX21vdmVkOworCSNkZWZpbmUgQ09MT1JfTU9WRURfREVGQVVMVCBDT0xPUl9NT1ZFRF9aRUJSQQorCSNkZWZpbmUgQ09MT1JfTU9WRURfTUlOX0FMTlVNX0NPVU5UIDIwCisKKwkvKiBYREZfV0hJVEVTUEFDRV9GTEFHUyByZWdhcmRpbmcgYmxvY2sgZGV0ZWN0aW9uIGFyZSBzZXQgYXQgMiwgMywgNCAqLworCSNkZWZpbmUgQ09MT1JfTU9WRURfV1NfQUxMT1dfSU5ERU5UQVRJT05fQ0hBTkdFICgxPDw1KQorCSNkZWZpbmUgQ09MT1JfTU9WRURfV1NfRVJST1IgKDE8PDApCisJdW5zaWduZWQgY29sb3JfbW92ZWRfd3NfaGFuZGxpbmc7CisKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlzdHJ1Y3Qgb3B0aW9uICpwYXJzZW9wdHM7Cit9OworCit1bnNpZ25lZCBkaWZmX2ZpbHRlcl9iaXQoY2hhciBzdGF0dXMpOworCit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfZGVsKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKmxpbmUpOwordm9pZCBkaWZmX2VtaXRfc3VibW9kdWxlX2FkZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpsaW5lKTsKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV91bnRyYWNrZWQoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfbW9kaWZpZWQoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfaGVhZGVyKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKmhlYWRlcik7Cit2b2lkIGRpZmZfZW1pdF9zdWJtb2R1bGVfZXJyb3Ioc3RydWN0IGRpZmZfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqZXJyKTsKK3ZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9waXBldGhyb3VnaChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJCSAgICAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbik7CisKK3N0cnVjdCBkaWZmc3RhdF90IHsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCXN0cnVjdCBkaWZmc3RhdF9maWxlIHsKKwkJY2hhciAqZnJvbV9uYW1lOworCQljaGFyICpuYW1lOworCQljaGFyICpwcmludF9uYW1lOworCQljb25zdCBjaGFyICpjb21tZW50czsKKwkJdW5zaWduZWQgaXNfdW5tZXJnZWQ6MTsKKwkJdW5zaWduZWQgaXNfYmluYXJ5OjE7CisJCXVuc2lnbmVkIGlzX3JlbmFtZWQ6MTsKKwkJdW5zaWduZWQgaXNfaW50ZXJlc3Rpbmc6MTsKKwkJdWludG1heF90IGFkZGVkLCBkZWxldGVkOworCX0gKipmaWxlczsKK307CisKK2VudW0gY29sb3JfZGlmZiB7CisJRElGRl9SRVNFVCA9IDAsCisJRElGRl9DT05URVhUID0gMSwKKwlESUZGX01FVEFJTkZPID0gMiwKKwlESUZGX0ZSQUdJTkZPID0gMywKKwlESUZGX0ZJTEVfT0xEID0gNCwKKwlESUZGX0ZJTEVfTkVXID0gNSwKKwlESUZGX0NPTU1JVCA9IDYsCisJRElGRl9XSElURVNQQUNFID0gNywKKwlESUZGX0ZVTkNJTkZPID0gOCwKKwlESUZGX0ZJTEVfT0xEX01PVkVEID0gOSwKKwlESUZGX0ZJTEVfT0xEX01PVkVEX0FMVCA9IDEwLAorCURJRkZfRklMRV9PTERfTU9WRURfRElNID0gMTEsCisJRElGRl9GSUxFX09MRF9NT1ZFRF9BTFRfRElNID0gMTIsCisJRElGRl9GSUxFX05FV19NT1ZFRCA9IDEzLAorCURJRkZfRklMRV9ORVdfTU9WRURfQUxUID0gMTQsCisJRElGRl9GSUxFX05FV19NT1ZFRF9ESU0gPSAxNSwKKwlESUZGX0ZJTEVfTkVXX01PVkVEX0FMVF9ESU0gPSAxNiwKKwlESUZGX0NPTlRFWFRfRElNID0gMTcsCisJRElGRl9GSUxFX09MRF9ESU0gPSAxOCwKKwlESUZGX0ZJTEVfTkVXX0RJTSA9IDE5LAorCURJRkZfQ09OVEVYVF9CT0xEID0gMjAsCisJRElGRl9GSUxFX09MRF9CT0xEID0gMjEsCisJRElGRl9GSUxFX05FV19CT0xEID0gMjIsCit9OworCitjb25zdCBjaGFyICpkaWZmX2dldF9jb2xvcihpbnQgZGlmZl91c2VfY29sb3IsIGVudW0gY29sb3JfZGlmZiBpeCk7CisjZGVmaW5lIGRpZmZfZ2V0X2NvbG9yX29wdChvLCBpeCkgXAorCWRpZmZfZ2V0X2NvbG9yKChvKS0+dXNlX2NvbG9yLCBpeCkKKworCitjb25zdCBjaGFyICpkaWZmX2xpbmVfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CisKKworZXh0ZXJuIGNvbnN0IGNoYXIgbWltZV9ib3VuZGFyeV9sZWFkZXJbXTsKKworc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpkaWZmX3RyZWVfcGF0aHMoCisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKnBhcmVudHNfb2lkLCBpbnQgbnBhcmVudCwKKwlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworaW50IGRpZmZfdHJlZV9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQkgIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CitpbnQgZGlmZl9yb290X3RyZWVfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsIGNvbnN0IGNoYXIgKmJhc2UsCisJCSAgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworCitzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggeworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqbmV4dDsKKwljaGFyICpwYXRoOworCXVuc2lnbmVkIGludCBtb2RlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50IHsKKwkJY2hhciBzdGF0dXM7CisJCXVuc2lnbmVkIGludCBtb2RlOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IHN0cmJ1ZiBwYXRoOworCX0gcGFyZW50W0ZMRVhfQVJSQVldOworfTsKKyNkZWZpbmUgY29tYmluZV9kaWZmX3BhdGhfc2l6ZShuLCBsKSBcCisJc3RfYWRkNChzaXplb2Yoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoKSwgKGwpLCAxLCBcCisJCXN0X211bHQoc2l6ZW9mKHN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50KSwgKG4pKSkKKwordm9pZCBzaG93X2NvbWJpbmVkX2RpZmYoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICplbGVtLCBpbnQgbnVtX3BhcmVudCwKKwkJCWludCBkZW5zZSwgc3RydWN0IHJldl9pbmZvICopOworCit2b2lkIGRpZmZfdHJlZV9jb21iaW5lZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKnBhcmVudHMsIGludCBkZW5zZSwgc3RydWN0IHJldl9pbmZvICpyZXYpOworCit2b2lkIGRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBkZW5zZSwgc3RydWN0IHJldl9pbmZvICpyZXYpOworCit2b2lkIGRpZmZfc2V0X21uZW1vbmljX3ByZWZpeChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKKworaW50IGRpZmZfY2FuX3F1aXRfZWFybHkoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKKwordm9pZCBkaWZmX2FkZHJlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCisJCSAgICBpbnQgYWRkcmVtb3ZlLAorCQkgICAgdW5zaWduZWQgbW9kZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBvaWRfdmFsaWQsCisJCSAgICBjb25zdCBjaGFyICpmdWxscGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKTsKKwordm9pZCBkaWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCisJCSB1bnNpZ25lZCBtb2RlMSwgdW5zaWduZWQgbW9kZTIsCisJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJIGludCBvbGRfb2lkX3ZhbGlkLCBpbnQgbmV3X29pZF92YWxpZCwKKwkJIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLAorCQkgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlMSwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlMik7CisKK3N0cnVjdCBkaWZmX2ZpbGVwYWlyICpkaWZmX3VubWVyZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBjb25zdCBjaGFyICpwYXRoKTsKKwordm9pZCBjb21wdXRlX2RpZmZzdGF0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCwKKwkJICAgICAgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxKTsKK3ZvaWQgZnJlZV9kaWZmc3RhdF9pbmZvKHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCk7CisKKyNkZWZpbmUgRElGRl9TRVRVUF9SRVZFUlNFICAgICAgCTEKKyNkZWZpbmUgRElGRl9TRVRVUF9VU0VfU0laRV9DQUNIRQk0CisKKy8qCisgKiBQb29yIG1hbidzIGFsdGVybmF0aXZlIHRvIHBhcnNlLW9wdGlvbiwgdG8gYWxsb3cgYm90aCBzdHVjayBmb3JtCisgKiAoLS1vcHRpb249dmFsdWUpIGFuZCBzZXBhcmF0ZSBmb3JtICgtLW9wdGlvbiB2YWx1ZSkuCisgKi8KK2ludCBwYXJzZV9sb25nX29wdChjb25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICBjb25zdCBjaGFyICoqb3B0YXJnKTsKKworaW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitpbnQgZ2l0X2RpZmZfaGV1cmlzdGljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7Cit2b2lkIGluaXRfZGlmZl91aV9kZWZhdWx0cyh2b2lkKTsKK2ludCBnaXRfZGlmZl91aV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSBkaWZmX3NldHVwKGRpZmZvcHRzKSByZXBvX2RpZmZfc2V0dXAodGhlX3JlcG9zaXRvcnksIGRpZmZvcHRzKQorI2VuZGlmCit2b2lkIHJlcG9fZGlmZl9zZXR1cChzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworaW50IGRpZmZfb3B0X3BhcnNlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgY29uc3QgY2hhciAqKiwgaW50LCBjb25zdCBjaGFyICopOwordm9pZCBkaWZmX3NldHVwX2RvbmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK2ludCBnaXRfY29uZmlnX3JlbmFtZShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworI2RlZmluZSBESUZGX0RFVEVDVF9SRU5BTUUJMQorI2RlZmluZSBESUZGX0RFVEVDVF9DT1BZCTIKKworI2RlZmluZSBESUZGX1BJQ0tBWEVfQUxMCTEKKyNkZWZpbmUgRElGRl9QSUNLQVhFX1JFR0VYCTIKKworI2RlZmluZSBESUZGX1BJQ0tBWEVfS0lORF9TCTQgLyogdHJhZGl0aW9uYWwgcGx1bWJpbmcgY291bnRlciAqLworI2RlZmluZSBESUZGX1BJQ0tBWEVfS0lORF9HCTggLyogZ3JlcCBpbiB0aGUgcGF0Y2ggKi8KKyNkZWZpbmUgRElGRl9QSUNLQVhFX0tJTkRfT0JKRklORAkxNiAvKiBzcGVjaWZpYyBvYmplY3QgSURzICovCisKKyNkZWZpbmUgRElGRl9QSUNLQVhFX0tJTkRTX01BU0sgKERJRkZfUElDS0FYRV9LSU5EX1MgfCBcCisJCQkJIERJRkZfUElDS0FYRV9LSU5EX0cgfCBcCisJCQkJIERJRkZfUElDS0FYRV9LSU5EX09CSkZJTkQpCisKKyNkZWZpbmUgRElGRl9QSUNLQVhFX0lHTk9SRV9DQVNFCTMyCisKK3ZvaWQgZGlmZmNvcmVfc3RkKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7Cit2b2lkIGRpZmZjb3JlX2ZpeF9kaWZmX2luZGV4KHZvaWQpOworCisjZGVmaW5lIENPTU1PTl9ESUZGX09QVElPTlNfSEVMUCBcCisiXG5jb21tb24gZGlmZiBvcHRpb25zOlxuIiBcCisiICAteiAgICAgICAgICAgIG91dHB1dCBkaWZmLXJhdyB3aXRoIGxpbmVzIHRlcm1pbmF0ZWQgd2l0aCBOVUwuXG4iIFwKKyIgIC1wICAgICAgICAgICAgb3V0cHV0IHBhdGNoIGZvcm1hdC5cbiIgXAorIiAgLXUgICAgICAgICAgICBzeW5vbnltIGZvciAtcC5cbiIgXAorIiAgLS1wYXRjaC13aXRoLXJhd1xuIiBcCisiICAgICAgICAgICAgICAgIG91dHB1dCBib3RoIGEgcGF0Y2ggYW5kIHRoZSBkaWZmLXJhdyBmb3JtYXQuXG4iIFwKKyIgIC0tc3RhdCAgICAgICAgc2hvdyBkaWZmc3RhdCBpbnN0ZWFkIG9mIHBhdGNoLlxuIiBcCisiICAtLW51bXN0YXQgICAgIHNob3cgbnVtZXJpYyBkaWZmc3RhdCBpbnN0ZWFkIG9mIHBhdGNoLlxuIiBcCisiICAtLXBhdGNoLXdpdGgtc3RhdFxuIiBcCisiICAgICAgICAgICAgICAgIG91dHB1dCBhIHBhdGNoIGFuZCBwcmVwZW5kIGl0cyBkaWZmc3RhdC5cbiIgXAorIiAgLS1uYW1lLW9ubHkgICBzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcy5cbiIgXAorIiAgLS1uYW1lLXN0YXR1cyBzaG93IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcy5cbiIgXAorIiAgLS1mdWxsLWluZGV4ICBzaG93IGZ1bGwgb2JqZWN0IG5hbWUgb24gaW5kZXggbGluZXMuXG4iIFwKKyIgIC0tYWJicmV2PTxuPiAgYWJicmV2aWF0ZSBvYmplY3QgbmFtZXMgaW4gZGlmZi10cmVlIGhlYWRlciBhbmQgZGlmZi1yYXcuXG4iIFwKKyIgIC1SICAgICAgICAgICAgc3dhcCBpbnB1dCBmaWxlIHBhaXJzLlxuIiBcCisiICAtQiAgICAgICAgICAgIGRldGVjdCBjb21wbGV0ZSByZXdyaXRlcy5cbiIgXAorIiAgLU0gICAgICAgICAgICBkZXRlY3QgcmVuYW1lcy5cbiIgXAorIiAgLUMgICAgICAgICAgICBkZXRlY3QgY29waWVzLlxuIiBcCisiICAtLWZpbmQtY29waWVzLWhhcmRlclxuIiBcCisiICAgICAgICAgICAgICAgIHRyeSB1bmNoYW5nZWQgZmlsZXMgYXMgY2FuZGlkYXRlIGZvciBjb3B5IGRldGVjdGlvbi5cbiIgXAorIiAgLWw8bj4gICAgICAgICBsaW1pdCByZW5hbWUgYXR0ZW1wdHMgdXAgdG8gPG4+IHBhdGhzLlxuIiBcCisiICAtTzxmaWxlPiAgICAgIHJlb3JkZXIgZGlmZnMgYWNjb3JkaW5nIHRvIHRoZSA8ZmlsZT4uXG4iIFwKKyIgIC1TPHN0cmluZz4gICAgZmluZCBmaWxlcGFpciB3aG9zZSBvbmx5IG9uZSBzaWRlIGNvbnRhaW5zIHRoZSBzdHJpbmcuXG4iIFwKKyIgIC0tcGlja2F4ZS1hbGxcbiIgXAorIiAgICAgICAgICAgICAgICBzaG93IGFsbCBmaWxlcyBkaWZmIHdoZW4gLVMgaXMgdXNlZCBhbmQgaGl0IGlzIGZvdW5kLlxuIiBcCisiICAtYSAgLS10ZXh0ICAgIHRyZWF0IGFsbCBmaWxlcyBhcyB0ZXh0LlxuIgorCitpbnQgZGlmZl9xdWV1ZV9pc19lbXB0eSh2b2lkKTsKK3ZvaWQgZGlmZl9mbHVzaChzdHJ1Y3QgZGlmZl9vcHRpb25zKik7Cit2b2lkIGRpZmZfd2Fybl9yZW5hbWVfbGltaXQoY29uc3QgY2hhciAqdmFybmFtZSwgaW50IG5lZWRlZCwgaW50IGRlZ3JhZGVkX2NjKTsKKworLyogZGlmZi1yYXcgc3RhdHVzIGxldHRlcnMgKi8KKyNkZWZpbmUgRElGRl9TVEFUVVNfQURERUQJCSdBJworI2RlZmluZSBESUZGX1NUQVRVU19DT1BJRUQJCSdDJworI2RlZmluZSBESUZGX1NUQVRVU19ERUxFVEVECQknRCcKKyNkZWZpbmUgRElGRl9TVEFUVVNfTU9ESUZJRUQJCSdNJworI2RlZmluZSBESUZGX1NUQVRVU19SRU5BTUVECQknUicKKyNkZWZpbmUgRElGRl9TVEFUVVNfVFlQRV9DSEFOR0VECSdUJworI2RlZmluZSBESUZGX1NUQVRVU19VTktOT1dOCQknWCcKKyNkZWZpbmUgRElGRl9TVEFUVVNfVU5NRVJHRUQJCSdVJworCisvKiB0aGVzZSBhcmUgbm90IGRpZmYtcmF3IHN0YXR1cyBsZXR0ZXJzIHByb3BlciwgYnV0IHVzZWQgYnkKKyAqIGRpZmZjb3JlLWZpbHRlciBpbnNuIHRvIHNwZWNpZnkgYWRkaXRpb25hbCByZXN0cmljdGlvbnMuCisgKi8KKyNkZWZpbmUgRElGRl9TVEFUVVNfRklMVEVSX0FPTgkJJyonCisjZGVmaW5lIERJRkZfU1RBVFVTX0ZJTFRFUl9CUk9LRU4JJ0InCisKKy8qCisgKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGZpbmRfdW5pcXVlX2FiYnJldigpIGluIHRoYXQKKyAqIGl0IHN0dWZmcyB0aGUgcmVzdWx0IHdpdGggZG90cyBmb3IgYWxpZ25tZW50LgorICovCitjb25zdCBjaGFyICpkaWZmX2FsaWduZWRfYWJicmV2KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnNoYTEsIGludCk7CisKKy8qIGRvIG5vdCByZXBvcnQgYW55dGhpbmcgb24gcmVtb3ZlZCBwYXRocyAqLworI2RlZmluZSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEIDAxCisvKiByZXBvcnQgcmFjaWx5LWNsZWFuIHBhdGhzIGFzIG1vZGlmaWVkICovCisjZGVmaW5lIERJRkZfUkFDWV9JU19NT0RJRklFRCAwMgoraW50IHJ1bl9kaWZmX2ZpbGVzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgdW5zaWduZWQgaW50IG9wdGlvbik7CitpbnQgcnVuX2RpZmZfaW5kZXgoc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgY2FjaGVkKTsKKworaW50IGRvX2RpZmZfY2FjaGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworaW50IGRpZmZfZmx1c2hfcGF0Y2hfaWQoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGludCwgaW50KTsKK3ZvaWQgZmx1c2hfb25lX2h1bmsoc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCBnaXRfaGFzaF9jdHggKmN0eCk7CisKK2ludCBkaWZmX3Jlc3VsdF9jb2RlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgaW50KTsKKworaW50IGRpZmZfbm9faW5kZXgoc3RydWN0IHJldl9pbmZvICosCisJCSAgaW50IGltcGxpY2l0X25vX2luZGV4LCBpbnQsIGNvbnN0IGNoYXIgKiopOworCitpbnQgaW5kZXhfZGlmZmVyc19mcm9tKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpkZWYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZGlmZl9mbGFncyAqZmxhZ3MsCisJCSAgICAgICBpbnQgaXRhX2ludmlzaWJsZV9pbl9pbmRleCk7CisKKy8qCisgKiBGaWxsIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXNwZWMgImRmIiwgcmVzcGVjdGluZyBhbnkgdGV4dGNvbnYgZGVmaW5lZCBieQorICogaXRzIHVzZXJkaWZmIGRyaXZlci4gIFRoZSAiZHJpdmVyIiBwYXJhbWV0ZXIgbXVzdCBjb21lIGZyb20gYQorICogcHJldmlvdXMgY2FsbCB0byBnZXRfdGV4dGNvbnYoKSwgYW5kIHRoZXJlZm9yZSBzaG91bGQgZWl0aGVyIGJlIE5VTEwgb3IgaGF2ZQorICogdGV4dGNvbnYgZW5hYmxlZC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIG1lbW9yeSBvd25lcnNoaXAgb2YgdGhlIHJlc3VsdGluZyBidWZmZXIgZGVwZW5kcyBvbiB3aGV0aGVyCisgKiB0aGUgZHJpdmVyIGZpZWxkIGlzIE5VTEwuIElmIGl0IGlzLCB0aGVuIHRoZSBtZW1vcnkgYmVsb25ncyB0byB0aGUgZmlsZXNwZWMKKyAqIHN0cnVjdC4gSWYgaXQgaXMgbm9uLU5VTEwsIHRoZW4gIm91dGJ1ZiIgcG9pbnRzIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlcgorICogdGhhdCBzaG91bGQgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKyAqLworc2l6ZV90IGZpbGxfdGV4dGNvbnYoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyLAorCQkgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkZiwKKwkJICAgICBjaGFyICoqb3V0YnVmKTsKKworLyoKKyAqIExvb2sgdXAgdGhlIHVzZXJkaWZmIGRyaXZlciBmb3IgdGhlIGdpdmVuIGZpbGVzcGVjLCBhbmQgcmV0dXJuIGl0IGlmCisgKiBhbmQgb25seSBpZiBpdCBoYXMgdGV4dGNvbnYgZW5hYmxlZCAob3RoZXJ3aXNlIHJldHVybiBOVUxMKS4gVGhlIHJlc3VsdAorICogY2FuIGJlIHBhc3NlZCB0byBmaWxsX3RleHRjb252KCkuCisgKi8KK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmdldF90ZXh0Y29udihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpOworCisvKgorICogUHJlcGFyZSBkaWZmX2ZpbGVzcGVjIGFuZCBjb252ZXJ0IGl0IHVzaW5nIGRpZmYgdGV4dGNvbnYgQVBJCisgKiBpZiB0aGUgdGV4dGNvbnYgZHJpdmVyIGV4aXN0cy4KKyAqIFJldHVybiAxIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2NlZWRzLCAwIG90aGVyd2lzZS4KKyAqLworaW50IHRleHRjb252X29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICB1bnNpZ25lZCBtb2RlLAorCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgb2lkX3ZhbGlkLAorCQkgICAgY2hhciAqKmJ1ZiwgdW5zaWduZWQgbG9uZyAqYnVmX3NpemUpOworCitpbnQgcGFyc2VfcmVuYW1lX3Njb3JlKGNvbnN0IGNoYXIgKipjcF9wKTsKKworbG9uZyBwYXJzZV9hbGdvcml0aG1fdmFsdWUoY29uc3QgY2hhciAqdmFsdWUpOworCit2b2lkIHByaW50X3N0YXRfc3VtbWFyeShGSUxFICpmcCwgaW50IGZpbGVzLAorCQkJaW50IGluc2VydGlvbnMsIGludCBkZWxldGlvbnMpOwordm9pZCBzZXR1cF9kaWZmX3BhZ2VyKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CisKKyNlbmRpZiAvKiBESUZGX0ggKi8KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLWJyZWFrLmMgYi9kaWZmY29yZS1icmVhay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMjBhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmY29yZS1icmVhay5jCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorCitzdGF0aWMgaW50IHNob3VsZF9icmVhayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcmMsCisJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZHN0LAorCQkJaW50IGJyZWFrX3Njb3JlLAorCQkJaW50ICptZXJnZV9zY29yZV9wKQoreworCS8qIGRzdCBpcyByZWNvcmRlZCBhcyBhIG1vZGlmaWNhdGlvbiBvZiBzcmMuICBBcmUgdGhleSBzbworCSAqIGRpZmZlcmVudCB0aGF0IHdlIGFyZSBiZXR0ZXIgb2ZmIHJlY29yZGluZyB0aGlzIGFzIGEgcGFpcgorCSAqIG9mIGRlbGV0ZSBhbmQgY3JlYXRlPworCSAqCisJICogVGhlcmUgYXJlIHR3byBjcml0ZXJpYSB1c2VkIGluIHRoaXMgYWxnb3JpdGhtLiAgRm9yIHRoZQorCSAqIHB1cnBvc2VzIG9mIGhlbHBpbmcgbGF0ZXIgcmVuYW1lL2NvcHksIHdlIHRha2UgYm90aCBkZWxldGUKKwkgKiBhbmQgaW5zZXJ0IGludG8gYWNjb3VudCBhbmQgZXN0aW1hdGUgdGhlIGFtb3VudCBvZiAiZWRpdCIuCisJICogSWYgdGhlIGVkaXQgaXMgdmVyeSBsYXJnZSwgd2UgYnJlYWsgdGhpcyBwYWlyIHNvIHRoYXQKKwkgKiByZW5hbWUvY29weSBjYW4gcGljayB0aGUgcGllY2VzIHVwIHRvIG1hdGNoIHdpdGggb3RoZXIKKwkgKiBmaWxlcy4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCB3ZSB3b3VsZCB3YW50IHRvIGlnbm9yZSBpbnNlcnRzIGZvciB0aGUKKwkgKiBwdXJlICJjb21wbGV0ZSByZXdyaXRlIiBkZXRlY3Rpb24uICBBcyBsb25nIGFzIG1vc3Qgb2YgdGhlCisJICogZXhpc3RpbmcgY29udGVudHMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGZpbGUsIGl0IGlzIGEKKwkgKiBjb21wbGV0ZSByZXdyaXRlLCBhbmQgaWYgc2l6YWJsZSBjaHVuayBmcm9tIHRoZSBvcmlnaW5hbAorCSAqIHN0aWxsIHJlbWFpbnMgaW4gdGhlIHJlc3VsdCwgaXQgaXMgbm90IGEgcmV3cml0ZS4gIEl0IGRvZXMKKwkgKiBub3QgbWF0dGVyIGhvdyBtdWNoIG9yIGhvdyBsaXR0bGUgbmV3IG1hdGVyaWFsIGlzIGFkZGVkIHRvCisJICogdGhlIGZpbGUuCisJICoKKwkgKiBUaGUgc2NvcmUgd2UgbGVhdmUgZm9yIHN1Y2ggYSBicm9rZW4gZmlsZXBhaXIgdXNlcyB0aGUKKwkgKiBsYXR0ZXIgZGVmaW5pdGlvbiBzbyB0aGF0IGxhdGVyIGNsZWFuLXVwIHN0YWdlIGNhbiBmaW5kIHRoZQorCSAqIHBpZWNlcyB0aGF0IHNob3VsZCBub3QgaGF2ZSBiZWVuIGJyb2tlbiBhY2NvcmRpbmcgdG8gdGhlCisJICogbGF0dGVyIGRlZmluaXRpb24gYWZ0ZXIgcmVuYW1lL2NvcHkgcnVucywgYW5kIG1lcmdlIHRoZQorCSAqIGJyb2tlbiBwYWlyIHRoYXQgaGF2ZSBhIHNjb3JlIGxvd2VyIHRoYW4gZ2l2ZW4gY3JpdGVyaWEKKwkgKiBiYWNrIHRvZ2V0aGVyLiAgVGhlIGJyZWFrIG9wZXJhdGlvbiBpdHNlbGYgaGFwcGVucworCSAqIGFjY29yZGluZyB0byB0aGUgZm9ybWVyIGRlZmluaXRpb24uCisJICoKKwkgKiBUaGUgbWluaW11bV9lZGl0IHBhcmFtZXRlciB0ZWxscyB1cyB3aGVuIHRvIGJyZWFrICh0aGUKKwkgKiBhbW91bnQgb2YgImVkaXQiIHJlcXVpcmVkIGZvciB1cyB0byBjb25zaWRlciBicmVha2luZyB0aGUKKwkgKiBwYWlyKS4gIFdlIGxlYXZlIHRoZSBhbW91bnQgb2YgZGVsZXRpb24gaW4gKm1lcmdlX3Njb3JlX3AKKwkgKiB3aGVuIHdlIHJldHVybi4KKwkgKgorCSAqIFRoZSB2YWx1ZSB3ZSByZXR1cm4gaXMgMSBpZiB3ZSB3YW50IHRoZSBwYWlyIHRvIGJlIGJyb2tlbiwKKwkgKiBvciAwIGlmIHdlIGRvIG5vdC4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsIG1heF9zaXplOworCXVuc2lnbmVkIGxvbmcgc3JjX2NvcGllZCwgbGl0ZXJhbF9hZGRlZCwgc3JjX3JlbW92ZWQ7CisKKwkqbWVyZ2Vfc2NvcmVfcCA9IDA7IC8qIGFzc3VtZSBubyBkZWxldGlvbiAtLS0gImRvIG5vdCBicmVhayIKKwkJCSAgICAgKiBpcyB0aGUgZGVmYXVsdC4KKwkJCSAgICAgKi8KKworCWlmIChTX0lTUkVHKHNyYy0+bW9kZSkgIT0gU19JU1JFRyhkc3QtPm1vZGUpKSB7CisJCSptZXJnZV9zY29yZV9wID0gKGludClNQVhfU0NPUkU7CisJCXJldHVybiAxOyAvKiBldmVuIHRoZWlyIHR5cGVzIGFyZSBkaWZmZXJlbnQgKi8KKwl9CisKKwlpZiAoc3JjLT5vaWRfdmFsaWQgJiYgZHN0LT5vaWRfdmFsaWQgJiYKKwkgICAgb2lkZXEoJnNyYy0+b2lkLCAmZHN0LT5vaWQpKQorCQlyZXR1cm4gMDsgLyogdGhleSBhcmUgdGhlIHNhbWUgKi8KKworCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHIsIHNyYywgMCkgfHwKKwkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBkc3QsIDApKQorCQlyZXR1cm4gMDsgLyogZXJyb3IgYnV0IGNhdWdodCBkb3duc3RyZWFtICovCisKKwltYXhfc2l6ZSA9ICgoc3JjLT5zaXplID4gZHN0LT5zaXplKSA/IHNyYy0+c2l6ZSA6IGRzdC0+c2l6ZSk7CisJaWYgKG1heF9zaXplIDwgTUlOSU1VTV9CUkVBS19TSVpFKQorCQlyZXR1cm4gMDsgLyogd2UgZG8gbm90IGJyZWFrIHRvbyBzbWFsbCBmaWxlcGFpciAqLworCisJaWYgKCFzcmMtPnNpemUpCisJCXJldHVybiAwOyAvKiB3ZSBkbyBub3QgbGV0IGVtcHR5IGZpbGVzIGdldCByZW5hbWVkICovCisKKwlpZiAoZGlmZmNvcmVfY291bnRfY2hhbmdlcyhyLCBzcmMsIGRzdCwKKwkJCQkgICAmc3JjLT5jbnRfZGF0YSwgJmRzdC0+Y250X2RhdGEsCisJCQkJICAgJnNyY19jb3BpZWQsICZsaXRlcmFsX2FkZGVkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBzYW5pdHkgKi8KKwlpZiAoc3JjLT5zaXplIDwgc3JjX2NvcGllZCkKKwkJc3JjX2NvcGllZCA9IHNyYy0+c2l6ZTsKKwlpZiAoZHN0LT5zaXplIDwgbGl0ZXJhbF9hZGRlZCArIHNyY19jb3BpZWQpIHsKKwkJaWYgKHNyY19jb3BpZWQgPCBkc3QtPnNpemUpCisJCQlsaXRlcmFsX2FkZGVkID0gZHN0LT5zaXplIC0gc3JjX2NvcGllZDsKKwkJZWxzZQorCQkJbGl0ZXJhbF9hZGRlZCA9IDA7CisJfQorCXNyY19yZW1vdmVkID0gc3JjLT5zaXplIC0gc3JjX2NvcGllZDsKKworCS8qIENvbXB1dGUgbWVyZ2Utc2NvcmUsIHdoaWNoIGlzICJob3cgbXVjaCBpcyByZW1vdmVkCisJICogZnJvbSB0aGUgc291cmNlIG1hdGVyaWFsIi4gIFRoZSBjbGVhbi11cCBzdGFnZSB3aWxsCisJICogbWVyZ2UgdGhlIHN1cnZpdmluZyBwYWlyIHRvZ2V0aGVyIGlmIHRoZSBzY29yZSBpcworCSAqIGxlc3MgdGhhbiB0aGUgbWluaW11bSwgYWZ0ZXIgcmVuYW1lL2NvcHkgcnVucy4KKwkgKi8KKwkqbWVyZ2Vfc2NvcmVfcCA9IChpbnQpKHNyY19yZW1vdmVkICogTUFYX1NDT1JFIC8gc3JjLT5zaXplKTsKKwlpZiAoKm1lcmdlX3Njb3JlX3AgPiBicmVha19zY29yZSkKKwkJcmV0dXJuIDE7CisKKwkvKiBFeHRlbnQgb2YgZGFtYWdlLCB3aGljaCBjb3VudHMgYm90aCBpbnNlcnRzIGFuZAorCSAqIGRlbGV0ZXMuCisJICovCisJZGVsdGFfc2l6ZSA9IHNyY19yZW1vdmVkICsgbGl0ZXJhbF9hZGRlZDsKKwlpZiAoZGVsdGFfc2l6ZSAqIE1BWF9TQ09SRSAvIG1heF9zaXplIDwgYnJlYWtfc2NvcmUpCisJCXJldHVybiAwOworCisJLyogSWYgeW91IHJlbW92ZWQgYSBsb3Qgd2l0aG91dCBhZGRpbmcgbmV3IG1hdGVyaWFsLCB0aGF0IGlzCisJICogbm90IHJlYWxseSBhIHJld3JpdGUuCisJICovCisJaWYgKChzcmMtPnNpemUgKiBicmVha19zY29yZSA8IHNyY19yZW1vdmVkICogTUFYX1NDT1JFKSAmJgorCSAgICAobGl0ZXJhbF9hZGRlZCAqIDIwIDwgc3JjX3JlbW92ZWQpICYmCisJICAgIChsaXRlcmFsX2FkZGVkICogMjAgPCBzcmNfY29waWVkKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBkaWZmY29yZV9icmVhayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgaW50IGJyZWFrX3Njb3JlKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCisJLyogV2hlbiB0aGUgZmlsZXBhaXIgaGFzIHRoaXMgbXVjaCBlZGl0IChpbnNlcnQgYW5kIGRlbGV0ZSksCisJICogaXQgaXMgZmlyc3QgY29uc2lkZXJlZCB0byBiZSBhIHJld3JpdGUgYW5kIGJyb2tlbiBpbnRvIGEKKwkgKiBjcmVhdGUgYW5kIGRlbGV0ZSBmaWxlcGFpci4gIFRoaXMgaXMgdG8gaGVscCBicmVha2luZyBhCisJICogZmlsZSB0aGF0IGhhZCB0b28gbXVjaCBuZXcgc3R1ZmYgYWRkZWQsIHBvc3NpYmx5IGZyb20KKwkgKiBtb3ZpbmcgY29udGVudHMgZnJvbSBhbm90aGVyIGZpbGUsIHNvIHRoYXQgcmVuYW1lL2NvcHkgY2FuCisJICogbWF0Y2ggaXQgd2l0aCB0aGUgb3RoZXIgZmlsZS4KKwkgKgorCSAqIGludCBicmVha19zY29yZTsgd2UgcmV1c2UgaW5jb21pbmcgcGFyYW1ldGVyIGZvciB0aGlzLgorCSAqLworCisJLyogQWZ0ZXIgYSBwYWlyIGlzIGJyb2tlbiBhY2NvcmRpbmcgdG8gYnJlYWtfc2NvcmUgYW5kCisJICogc3ViamVjdGVkIHRvIHJlbmFtZS9jb3B5LCBib3RoIG9mIHRoZW0gbWF5IHN1cnZpdmUgaW50YWN0LAorCSAqIGR1ZSB0byBsYWNrIG9mIHN1aXRhYmxlIHJlbmFtZS9jb3B5IHBlZXIuICBPciwgdGhlIGNhbGxlcgorCSAqIG1heSBiZSBjYWxsaW5nIHVzIHdpdGhvdXQgdXNpbmcgcmVuYW1lL2NvcHkuICBXaGVuIHRoYXQKKwkgKiBoYXBwZW5zLCB3ZSBtZXJnZSB0aGUgYnJva2VuIHBpZWNlcyBiYWNrIGludG8gb25lCisJICogbW9kaWZpY2F0aW9uIHRvZ2V0aGVyIGlmIHRoZSBwYWlyIGRpZCBub3QgaGF2ZSBtb3JlIHRoYW4KKwkgKiB0aGlzIG11Y2ggZGVsZXRlLiAgRm9yIHRoaXMgY29tcHV0YXRpb24sIHdlIGRvIG5vdCB0YWtlCisJICogaW5zZXJ0IGludG8gYWNjb3VudCBhdCBhbGwuICBJZiB5b3Ugc3RhcnQgZnJvbSBhIDEwMC1saW5lCisJICogZmlsZSBhbmQgZGVsZXRlIDk3IGxpbmVzIG9mIGl0LCBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgeW91CisJICogYWRkIDI3IGxpbmVzIHRvIGl0IHRvIG1ha2UgYSBuZXcgMzAtbGluZSBmaWxlIG9yIGlmIHlvdSBhZGQKKwkgKiA5OTcgbGluZXMgdG8gaXQgdG8gbWFrZSBhIDEwMDAtbGluZSBmaWxlLiAgRWl0aGVyIHdheSB3aGF0CisJICogeW91IGRpZCB3YXMgYSByZXdyaXRlIG9mIDk3JS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UKKwkgKiBkZWxldGUgMyBsaW5lcywga2VlcGluZyA5NyBsaW5lcyBpbnRhY3QsIGl0IGRvZXMgbm90IG1hdHRlcgorCSAqIGlmIHlvdSBhZGQgMyBsaW5lcyB0byBpdCB0byBtYWtlIGEgbmV3IDEwMC1saW5lIGZpbGUgb3IgaWYKKwkgKiB5b3UgYWRkIDkwMyBsaW5lcyB0byBpdCB0byBtYWtlIGEgbmV3IDEwMDAtbGluZSBmaWxlLgorCSAqIEVpdGhlciB3YXkgeW91IGRpZCBhIGxvdCBvZiBhZGRpdGlvbnMgYW5kIG5vdCBhIHJld3JpdGUuCisJICogVGhpcyBtZXJnZSBoYXBwZW5zIHRvIGNhdGNoIHRoZSBsYXR0ZXIgY2FzZS4gIEEgbWVyZ2Vfc2NvcmUKKwkgKiBvZiA4MCUgd291bGQgYmUgYSBnb29kIGRlZmF1bHQgdmFsdWUgKGEgYnJva2VuIHBhaXIgdGhhdAorCSAqIGhhcyBzY29yZSBsb3dlciB0aGFuIG1lcmdlX3Njb3JlIHdpbGwgYmUgbWVyZ2VkIGJhY2sKKwkgKiB0b2dldGhlcikuCisJICovCisJaW50IG1lcmdlX3Njb3JlOworCWludCBpOworCisJLyogU2VlIGNvbW1lbnQgb24gREVGQVVMVF9CUkVBS19TQ09SRSBhbmQKKwkgKiBERUZBVUxUX01FUkdFX1NDT1JFIGluIGRpZmZjb3JlLmgKKwkgKi8KKwltZXJnZV9zY29yZSA9IChicmVha19zY29yZSA+PiAxNikgJiAweEZGRkY7CisJYnJlYWtfc2NvcmUgPSAoYnJlYWtfc2NvcmUgJiAweEZGRkYpOworCisJaWYgKCFicmVha19zY29yZSkKKwkJYnJlYWtfc2NvcmUgPSBERUZBVUxUX0JSRUFLX1NDT1JFOworCWlmICghbWVyZ2Vfc2NvcmUpCisJCW1lcmdlX3Njb3JlID0gREVGQVVMVF9NRVJHRV9TQ09SRTsKKworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJaW50IHNjb3JlOworCisJCS8qCisJCSAqIFdlIGRlYWwgb25seSB3aXRoIGluLXBsYWNlIGVkaXQgb2YgYmxvYnMuCisJCSAqIFdlIGRvIG5vdCBicmVhayBhbnl0aGluZyBlbHNlLgorCQkgKi8KKwkJaWYgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmIERJRkZfRklMRV9WQUxJRChwLT50d28pICYmCisJCSAgICBvYmplY3RfdHlwZShwLT5vbmUtPm1vZGUpID09IE9CSl9CTE9CICYmCisJCSAgICBvYmplY3RfdHlwZShwLT50d28tPm1vZGUpID09IE9CSl9CTE9CICYmCisJCSAgICAhc3RyY21wKHAtPm9uZS0+cGF0aCwgcC0+dHdvLT5wYXRoKSkgeworCQkJaWYgKHNob3VsZF9icmVhayhyLCBwLT5vbmUsIHAtPnR3bywKKwkJCQkJIGJyZWFrX3Njb3JlLCAmc2NvcmUpKSB7CisJCQkJLyogU3BsaXQgdGhpcyBpbnRvIGRlbGV0ZSBhbmQgY3JlYXRlICovCisJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm51bGxfb25lLCAqbnVsbF90d287CisJCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRwOworCisJCQkJLyogU2V0IHNjb3JlIHRvIDAgZm9yIHRoZSBwYWlyIHRoYXQKKwkJCQkgKiBuZWVkcyB0byBiZSBtZXJnZWQgYmFjayB0b2dldGhlcgorCQkJCSAqIHNob3VsZCB0aGV5IHN1cnZpdmUgcmVuYW1lL2NvcHkuCisJCQkJICogQWxzbyB3ZSBkbyBub3Qgd2FudCB0byBicmVhayB2ZXJ5CisJCQkJICogc21hbGwgZmlsZXMuCisJCQkJICovCisJCQkJaWYgKHNjb3JlIDwgbWVyZ2Vfc2NvcmUpCisJCQkJCXNjb3JlID0gMDsKKworCQkJCS8qIGRlbGV0aW9uIG9mIG9uZSAqLworCQkJCW51bGxfb25lID0gYWxsb2NfZmlsZXNwZWMocC0+b25lLT5wYXRoKTsKKwkJCQlkcCA9IGRpZmZfcXVldWUoJm91dHEsIHAtPm9uZSwgbnVsbF9vbmUpOworCQkJCWRwLT5zY29yZSA9IHNjb3JlOworCQkJCWRwLT5icm9rZW5fcGFpciA9IDE7CisKKwkJCQkvKiBjcmVhdGlvbiBvZiB0d28gKi8KKwkJCQludWxsX3R3byA9IGFsbG9jX2ZpbGVzcGVjKHAtPnR3by0+cGF0aCk7CisJCQkJZHAgPSBkaWZmX3F1ZXVlKCZvdXRxLCBudWxsX3R3bywgcC0+dHdvKTsKKwkJCQlkcC0+c2NvcmUgPSBzY29yZTsKKwkJCQlkcC0+YnJva2VuX3BhaXIgPSAxOworCisJCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2IocC0+b25lKTsKKwkJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihwLT50d28pOworCQkJCWZyZWUocCk7IC8qIG5vdCBkaWZmX2ZyZWVfZmlsZXBhaXIoKSwgd2UgYXJlCisJCQkJCSAgKiByZXVzaW5nIG9uZSBhbmQgdHdvIGhlcmUuCisJCQkJCSAgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT5vbmUpOworCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT50d28pOworCQlkaWZmX3EoJm91dHEsIHApOworCX0KKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX2Jyb2tlbihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcHAsCisJCQkgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpvdXRxKQoreworCS8qIHAgYW5kIHBwIGFyZSBicm9rZW4gcGFpcnMgd2Ugd2FudCB0byBtZXJnZSAqLworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpjID0gcCwgKmQgPSBwcCwgKmRwOworCWlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSkgeworCQkvKiB0aGlzIG11c3QgYmUgYSBkZWxldGUgaGFsZiAqLworCQlkID0gcDsgYyA9IHBwOworCX0KKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIURJRkZfRklMRV9WQUxJRChkLT5vbmUpKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMxIik7CisJaWYgKERJRkZfRklMRV9WQUxJRChkLT50d28pKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMyIik7CisJaWYgKERJRkZfRklMRV9WQUxJRChjLT5vbmUpKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMzIik7CisJaWYgKCFESUZGX0ZJTEVfVkFMSUQoYy0+dHdvKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBtZXJnZSAjNCIpOworCisJZHAgPSBkaWZmX3F1ZXVlKG91dHEsIGQtPm9uZSwgYy0+dHdvKTsKKwlkcC0+c2NvcmUgPSBwLT5zY29yZTsKKwkvKgorCSAqIFdlIHdpbGwgYmUgb25lIGV4dHJhIHVzZXIgb2YgdGhlIHNhbWUgc3JjIHNpZGUgb2YgdGhlCisJICogYnJva2VuIHBhaXIsIGlmIGl0IHdhcyB1c2VkIGFzIHRoZSByZW5hbWUgc291cmNlIGZvciBvdGhlcgorCSAqIHBhdGhzIGVsc2V3aGVyZS4gIEluY3JlbWVudCB0byBtYXJrIHRoYXQgdGhlIHBhdGggc3RheXMKKwkgKiBpbiB0aGUgcmVzdWx0aW5nIHRyZWUuCisJICovCisJZC0+b25lLT5yZW5hbWVfdXNlZCsrOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKGQtPnR3byk7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEoYy0+b25lKTsKKwlmcmVlKGQpOworCWZyZWUoYyk7Cit9CisKK3ZvaWQgZGlmZmNvcmVfbWVyZ2VfYnJva2VuKHZvaWQpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IG91dHE7CisJaW50IGksIGo7CisKKwlESUZGX1FVRVVFX0NMRUFSKCZvdXRxKTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWlmICghcCkKKwkJCS8qIHdlIGFscmVhZHkgbWVyZ2VkIHRoaXMgd2l0aCBpdHMgcGVlciAqLworCQkJY29udGludWU7CisJCWVsc2UgaWYgKHAtPmJyb2tlbl9wYWlyICYmCisJCQkgIXN0cmNtcChwLT5vbmUtPnBhdGgsIHAtPnR3by0+cGF0aCkpIHsKKwkJCS8qIElmIHRoZSBwZWVyIGFsc28gc3Vydml2ZWQgcmVuYW1lL2NvcHksIHRoZW4KKwkJCSAqIHdlIG1lcmdlIHRoZW0gYmFjayB0b2dldGhlci4KKwkJCSAqLworCQkJZm9yIChqID0gaSArIDE7IGogPCBxLT5ucjsgaisrKSB7CisJCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBwID0gcS0+cXVldWVbal07CisJCQkJaWYgKHBwLT5icm9rZW5fcGFpciAmJgorCQkJCSAgICAhc3RyY21wKHBwLT5vbmUtPnBhdGgsIHBwLT50d28tPnBhdGgpICYmCisJCQkJICAgICFzdHJjbXAocC0+b25lLT5wYXRoLCBwcC0+dHdvLT5wYXRoKSkgeworCQkJCQkvKiBQZWVyIHN1cnZpdmVkLiAgTWVyZ2UgdGhlbSAqLworCQkJCQltZXJnZV9icm9rZW4ocCwgcHAsICZvdXRxKTsKKwkJCQkJcS0+cXVldWVbal0gPSBOVUxMOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQkJLyogVGhlIHBlZXIgZGlkIG5vdCBzdXJ2aXZlLCBzbyB3ZSBrZWVwCisJCQkgKiBpdCBpbiB0aGUgb3V0cHV0LgorCQkJICovCisJCQlkaWZmX3EoJm91dHEsIHApOworCQl9CisJCWVsc2UKKwkJCWRpZmZfcSgmb3V0cSwgcCk7CituZXh0OjsKKwl9CisJZnJlZShxLT5xdWV1ZSk7CisJKnEgPSBvdXRxOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtZGVsdGEuYyBiL2RpZmZjb3JlLWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2OGFjZQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLWRlbHRhLmMKQEAgLTAsMCArMSwyMzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorCisvKgorICogSWRlYSBoZXJlIGlzIHZlcnkgc2ltcGxlLgorICoKKyAqIEFsbW9zdCBhbGwgZGF0YSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBhcmUgdGV4dCwgYnV0IHNvbWV0aW1lcyB3ZSBoYXZlCisgKiB0byBkZWFsIHdpdGggYmluYXJ5IGRhdGEuICBTbyB3ZSBjdXQgdGhlbSBpbnRvIGNodW5rcyBkZWxpbWl0ZWQgYnkKKyAqIExGIGJ5dGUsIG9yIDY0LWJ5dGUgc2VxdWVuY2UsIHdoaWNoZXZlciBjb21lcyBmaXJzdCwgYW5kIGhhc2ggdGhlbS4KKyAqCisgKiBGb3IgdGhvc2UgY2h1bmtzLCBpZiB0aGUgc291cmNlIGJ1ZmZlciBoYXMgbW9yZSBpbnN0YW5jZXMgb2YgaXQKKyAqIHRoYW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgdGhhdCBtZWFucyB0aGUgZGlmZmVyZW5jZSBhcmUgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgbm90IGNvcGllZCBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbi4gIElmIHRoZQorICogY291bnRzIGFyZSB0aGUgc2FtZSwgZXZlcnl0aGluZyB3YXMgY29waWVkIGZyb20gc291cmNlIHRvCisgKiBkZXN0aW5hdGlvbi4gIElmIHRoZSBkZXN0aW5hdGlvbiBoYXMgbW9yZSwgZXZlcnl0aGluZyB3YXMgY29waWVkLAorICogYW5kIGRlc3RpbmF0aW9uIGFkZGVkIG1vcmUuCisgKgorICogV2UgYXJlIGRvaW5nIGFuIGFwcHJveGltYXRpb24gc28gd2UgZG8gbm90IHJlYWxseSBoYXZlIHRvIHdhc3RlCisgKiBtZW1vcnkgYnkgYWN0dWFsbHkgc3RvcmluZyB0aGUgc2VxdWVuY2UuICBXZSBqdXN0IGhhc2ggdGhlbSBpbnRvCisgKiBzb21ld2hlcmUgYXJvdW5kIDJeMTYgaGFzaGJ1Y2tldHMgYW5kIGNvdW50IHRoZSBvY2N1cnJlbmNlcy4KKyAqLworCisvKiBXaWxkIGd1ZXNzIGF0IHRoZSBpbml0aWFsIGhhc2ggc2l6ZSAqLworI2RlZmluZSBJTklUSUFMX0hBU0hfU0laRSA5CisKKy8qIFdlIGxlYXZlIG1vcmUgcm9vbSBpbiBzbWFsbGVyIGhhc2ggYnV0IGRvIG5vdCBsZXQgaXQKKyAqIGdyb3cgdG8gaGF2ZSB1bnVzZWQgaG9sZSB0b28gbXVjaC4KKyAqLworI2RlZmluZSBJTklUSUFMX0ZSRUUoc3pfbG9nMikgKCgxPDwoc3pfbG9nMikpKihzel9sb2cyLTMpLyhzel9sb2cyKSkKKworLyogQSBwcmltZSByYXRoZXIgY2FyZWZ1bGx5IGNob3NlbiBiZXR3ZWVuIDJeMTYuLjJeMTcsIHNvIHRoYXQKKyAqIEhBU0hCQVNFIDwgSU5JVElBTF9GUkVFKDE3KS4gIFdlIHdhbnQgdG8ga2VlcCB0aGUgbWF4aW11bSBoYXNodGFibGUKKyAqIHNpemUgdW5kZXIgdGhlIGN1cnJlbnQgMjw8MTcgbWF4aW11bSwgd2hpY2ggY2FuIGhvbGQgdGhpcyBtYW55CisgKiBkaWZmZXJlbnQgdmFsdWVzIGJlZm9yZSBvdmVyZmxvd2luZyB0byBoYXNodGFibGUgb2Ygc2l6ZSAyPDwxOC4KKyAqLworI2RlZmluZSBIQVNIQkFTRSAxMDc5MjcKKworc3RydWN0IHNwYW5oYXNoIHsKKwl1bnNpZ25lZCBpbnQgaGFzaHZhbDsKKwl1bnNpZ25lZCBpbnQgY250OworfTsKK3N0cnVjdCBzcGFuaGFzaF90b3AgeworCWludCBhbGxvY19sb2cyOworCWludCBmcmVlOworCXN0cnVjdCBzcGFuaGFzaCBkYXRhW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIHN0cnVjdCBzcGFuaGFzaF90b3AgKnNwYW5oYXNoX3JlaGFzaChzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpvcmlnKQoreworCXN0cnVjdCBzcGFuaGFzaF90b3AgKm5ld19zcGFuaGFzaDsKKwlpbnQgaTsKKwlpbnQgb3N6ID0gMSA8PCBvcmlnLT5hbGxvY19sb2cyOworCWludCBzeiA9IG9zeiA8PCAxOworCisJbmV3X3NwYW5oYXNoID0geG1hbGxvYyhzdF9hZGQoc2l6ZW9mKCpvcmlnKSwKKwkJCSAgICAgc3RfbXVsdChzaXplb2Yoc3RydWN0IHNwYW5oYXNoKSwgc3opKSk7CisJbmV3X3NwYW5oYXNoLT5hbGxvY19sb2cyID0gb3JpZy0+YWxsb2NfbG9nMiArIDE7CisJbmV3X3NwYW5oYXNoLT5mcmVlID0gSU5JVElBTF9GUkVFKG5ld19zcGFuaGFzaC0+YWxsb2NfbG9nMik7CisJbWVtc2V0KG5ld19zcGFuaGFzaC0+ZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBzcGFuaGFzaCkgKiBzeik7CisJZm9yIChpID0gMDsgaSA8IG9zejsgaSsrKSB7CisJCXN0cnVjdCBzcGFuaGFzaCAqbyA9ICYob3JpZy0+ZGF0YVtpXSk7CisJCWludCBidWNrZXQ7CisJCWlmICghby0+Y250KQorCQkJY29udGludWU7CisJCWJ1Y2tldCA9IG8tPmhhc2h2YWwgJiAoc3ogLSAxKTsKKwkJd2hpbGUgKDEpIHsKKwkJCXN0cnVjdCBzcGFuaGFzaCAqaCA9ICYobmV3X3NwYW5oYXNoLT5kYXRhW2J1Y2tldCsrXSk7CisJCQlpZiAoIWgtPmNudCkgeworCQkJCWgtPmhhc2h2YWwgPSBvLT5oYXNodmFsOworCQkJCWgtPmNudCA9IG8tPmNudDsKKwkJCQluZXdfc3Bhbmhhc2gtPmZyZWUtLTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzeiA8PSBidWNrZXQpCisJCQkJYnVja2V0ID0gMDsKKwkJfQorCX0KKwlmcmVlKG9yaWcpOworCXJldHVybiBuZXdfc3Bhbmhhc2g7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICphZGRfc3Bhbmhhc2goc3RydWN0IHNwYW5oYXNoX3RvcCAqdG9wLAorCQkJCQkgdW5zaWduZWQgaW50IGhhc2h2YWwsIGludCBjbnQpCit7CisJaW50IGJ1Y2tldCwgbGltOworCXN0cnVjdCBzcGFuaGFzaCAqaDsKKworCWxpbSA9ICgxIDw8IHRvcC0+YWxsb2NfbG9nMik7CisJYnVja2V0ID0gaGFzaHZhbCAmIChsaW0gLSAxKTsKKwl3aGlsZSAoMSkgeworCQloID0gJih0b3AtPmRhdGFbYnVja2V0KytdKTsKKwkJaWYgKCFoLT5jbnQpIHsKKwkJCWgtPmhhc2h2YWwgPSBoYXNodmFsOworCQkJaC0+Y250ID0gY250OworCQkJdG9wLT5mcmVlLS07CisJCQlpZiAodG9wLT5mcmVlIDwgMCkKKwkJCQlyZXR1cm4gc3Bhbmhhc2hfcmVoYXNoKHRvcCk7CisJCQlyZXR1cm4gdG9wOworCQl9CisJCWlmIChoLT5oYXNodmFsID09IGhhc2h2YWwpIHsKKwkJCWgtPmNudCArPSBjbnQ7CisJCQlyZXR1cm4gdG9wOworCQl9CisJCWlmIChsaW0gPD0gYnVja2V0KQorCQkJYnVja2V0ID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3Bhbmhhc2hfY21wKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3Qgc3Bhbmhhc2ggKmEgPSBhXzsKKwljb25zdCBzdHJ1Y3Qgc3Bhbmhhc2ggKmIgPSBiXzsKKworCS8qIEEgY291bnQgb2YgemVybyBjb21wYXJlcyBhdCB0aGUgZW5kLi4gKi8KKwlpZiAoIWEtPmNudCkKKwkJcmV0dXJuICFiLT5jbnQgPyAwIDogMTsKKwlpZiAoIWItPmNudCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBhLT5oYXNodmFsIDwgYi0+aGFzaHZhbCA/IC0xIDoKKwkJYS0+aGFzaHZhbCA+IGItPmhhc2h2YWwgPyAxIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGFuaGFzaF90b3AgKmhhc2hfY2hhcnMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJaW50IGksIG47CisJdW5zaWduZWQgaW50IGFjY3VtMSwgYWNjdW0yLCBoYXNodmFsOworCXN0cnVjdCBzcGFuaGFzaF90b3AgKmhhc2g7CisJdW5zaWduZWQgY2hhciAqYnVmID0gb25lLT5kYXRhOworCXVuc2lnbmVkIGludCBzeiA9IG9uZS0+c2l6ZTsKKwlpbnQgaXNfdGV4dCA9ICFkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShyLCBvbmUpOworCisJaSA9IElOSVRJQUxfSEFTSF9TSVpFOworCWhhc2ggPSB4bWFsbG9jKHN0X2FkZChzaXplb2YoKmhhc2gpLAorCQkJICAgICAgc3RfbXVsdChzaXplb2Yoc3RydWN0IHNwYW5oYXNoKSwgMTw8aSkpKTsKKwloYXNoLT5hbGxvY19sb2cyID0gaTsKKwloYXNoLT5mcmVlID0gSU5JVElBTF9GUkVFKGkpOworCW1lbXNldChoYXNoLT5kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHNwYW5oYXNoKSAqICgxPDxpKSk7CisKKwluID0gMDsKKwlhY2N1bTEgPSBhY2N1bTIgPSAwOworCXdoaWxlIChzeikgeworCQl1bnNpZ25lZCBpbnQgYyA9ICpidWYrKzsKKwkJdW5zaWduZWQgaW50IG9sZF8xID0gYWNjdW0xOworCQlzei0tOworCisJCS8qIElnbm9yZSBDUiBpbiBDUkxGIHNlcXVlbmNlIGlmIHRleHQgKi8KKwkJaWYgKGlzX3RleHQgJiYgYyA9PSAnXHInICYmIHN6ICYmICpidWYgPT0gJ1xuJykKKwkJCWNvbnRpbnVlOworCisJCWFjY3VtMSA9IChhY2N1bTEgPDwgNykgXiAoYWNjdW0yID4+IDI1KTsKKwkJYWNjdW0yID0gKGFjY3VtMiA8PCA3KSBeIChvbGRfMSA+PiAyNSk7CisJCWFjY3VtMSArPSBjOworCQlpZiAoKytuIDwgNjQgJiYgYyAhPSAnXG4nKQorCQkJY29udGludWU7CisJCWhhc2h2YWwgPSAoYWNjdW0xICsgYWNjdW0yICogMHg2MSkgJSBIQVNIQkFTRTsKKwkJaGFzaCA9IGFkZF9zcGFuaGFzaChoYXNoLCBoYXNodmFsLCBuKTsKKwkJbiA9IDA7CisJCWFjY3VtMSA9IGFjY3VtMiA9IDA7CisJfQorCVFTT1JUKGhhc2gtPmRhdGEsIDF1bCA8PCBoYXNoLT5hbGxvY19sb2cyLCBzcGFuaGFzaF9jbXApOworCXJldHVybiBoYXNoOworfQorCitpbnQgZGlmZmNvcmVfY291bnRfY2hhbmdlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcmMsCisJCQkgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZHN0LAorCQkJICAgdm9pZCAqKnNyY19jb3VudF9wLAorCQkJICAgdm9pZCAqKmRzdF9jb3VudF9wLAorCQkJICAgdW5zaWduZWQgbG9uZyAqc3JjX2NvcGllZCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKmxpdGVyYWxfYWRkZWQpCit7CisJc3RydWN0IHNwYW5oYXNoICpzLCAqZDsKKwlzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpzcmNfY291bnQsICpkc3RfY291bnQ7CisJdW5zaWduZWQgbG9uZyBzYywgbGE7CisKKwlzcmNfY291bnQgPSBkc3RfY291bnQgPSBOVUxMOworCWlmIChzcmNfY291bnRfcCkKKwkJc3JjX2NvdW50ID0gKnNyY19jb3VudF9wOworCWlmICghc3JjX2NvdW50KSB7CisJCXNyY19jb3VudCA9IGhhc2hfY2hhcnMociwgc3JjKTsKKwkJaWYgKHNyY19jb3VudF9wKQorCQkJKnNyY19jb3VudF9wID0gc3JjX2NvdW50OworCX0KKwlpZiAoZHN0X2NvdW50X3ApCisJCWRzdF9jb3VudCA9ICpkc3RfY291bnRfcDsKKwlpZiAoIWRzdF9jb3VudCkgeworCQlkc3RfY291bnQgPSBoYXNoX2NoYXJzKHIsIGRzdCk7CisJCWlmIChkc3RfY291bnRfcCkKKwkJCSpkc3RfY291bnRfcCA9IGRzdF9jb3VudDsKKwl9CisJc2MgPSBsYSA9IDA7CisKKwlzID0gc3JjX2NvdW50LT5kYXRhOworCWQgPSBkc3RfY291bnQtPmRhdGE7CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBkc3RfY250LCBzcmNfY250OworCQlpZiAoIXMtPmNudCkKKwkJCWJyZWFrOyAvKiB3ZSBjaGVja2VkIGFsbCBpbiBzcmMgKi8KKwkJd2hpbGUgKGQtPmNudCkgeworCQkJaWYgKGQtPmhhc2h2YWwgPj0gcy0+aGFzaHZhbCkKKwkJCQlicmVhazsKKwkJCWxhICs9IGQtPmNudDsKKwkJCWQrKzsKKwkJfQorCQlzcmNfY250ID0gcy0+Y250OworCQlkc3RfY250ID0gMDsKKwkJaWYgKGQtPmNudCAmJiBkLT5oYXNodmFsID09IHMtPmhhc2h2YWwpIHsKKwkJCWRzdF9jbnQgPSBkLT5jbnQ7CisJCQlkKys7CisJCX0KKwkJaWYgKHNyY19jbnQgPCBkc3RfY250KSB7CisJCQlsYSArPSBkc3RfY250IC0gc3JjX2NudDsKKwkJCXNjICs9IHNyY19jbnQ7CisJCX0KKwkJZWxzZQorCQkJc2MgKz0gZHN0X2NudDsKKwkJcysrOworCX0KKwl3aGlsZSAoZC0+Y250KSB7CisJCWxhICs9IGQtPmNudDsKKwkJZCsrOworCX0KKworCWlmICghc3JjX2NvdW50X3ApCisJCWZyZWUoc3JjX2NvdW50KTsKKwlpZiAoIWRzdF9jb3VudF9wKQorCQlmcmVlKGRzdF9jb3VudCk7CisJKnNyY19jb3BpZWQgPSBzYzsKKwkqbGl0ZXJhbF9hZGRlZCA9IGxhOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtb3JkZXIuYyBiL2RpZmZjb3JlLW9yZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllNzMzMQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLW9yZGVyLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisKK3N0YXRpYyBjaGFyICoqb3JkZXI7CitzdGF0aWMgaW50IG9yZGVyX2NudDsKKworc3RhdGljIHZvaWQgcHJlcGFyZV9vcmRlcihjb25zdCBjaGFyICpvcmRlcmZpbGUpCit7CisJaW50IGNudCwgcGFzczsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJdm9pZCAqbWFwOworCWNoYXIgKmNwLCAqZW5kcDsKKwlzc2l6ZV90IHN6OworCisJaWYgKG9yZGVyKQorCQlyZXR1cm47CisKKwlzeiA9IHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBvcmRlcmZpbGUsIDApOworCWlmIChzeiA8IDApCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIpLCBvcmRlcmZpbGUpOworCW1hcCA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwllbmRwID0gKGNoYXIgKikgbWFwICsgc3o7CisKKwlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisJCWNudCA9IDA7CisJCWNwID0gbWFwOworCQl3aGlsZSAoY3AgPCBlbmRwKSB7CisJCQljaGFyICplcDsKKwkJCWZvciAoZXAgPSBjcDsgZXAgPCBlbmRwICYmICplcCAhPSAnXG4nOyBlcCsrKQorCQkJCTsKKwkJCS8qIGNwIHRvIGVwIGhhcyBvbmUgbGluZSAqLworCQkJaWYgKCpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnIycpCisJCQkJOyAvKiBjb21tZW50ICovCisJCQllbHNlIGlmIChwYXNzID09IDApCisJCQkJY250Kys7CisJCQllbHNlIHsKKwkJCQlpZiAoKmVwID09ICdcbicpIHsKKwkJCQkJKmVwID0gMDsKKwkJCQkJb3JkZXJbY250XSA9IGNwOworCQkJCX0gZWxzZSB7CisJCQkJCW9yZGVyW2NudF0gPSB4bWVtZHVweihjcCwgZXAgLSBjcCk7CisJCQkJfQorCQkJCWNudCsrOworCQkJfQorCQkJaWYgKGVwIDwgZW5kcCkKKwkJCQllcCsrOworCQkJY3AgPSBlcDsKKwkJfQorCQlpZiAocGFzcyA9PSAwKSB7CisJCQlvcmRlcl9jbnQgPSBjbnQ7CisJCQlBTExPQ19BUlJBWShvcmRlciwgY250KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBtYXRjaF9vcmRlcihjb25zdCBjaGFyICpwYXRoKQoreworCWludCBpOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHAgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoaSA9IDA7IGkgPCBvcmRlcl9jbnQ7IGkrKykgeworCQlzdHJidWZfcmVzZXQoJnApOworCQlzdHJidWZfYWRkc3RyKCZwLCBwYXRoKTsKKwkJd2hpbGUgKHAuYnVmWzBdKSB7CisJCQljaGFyICpjcDsKKwkJCWlmICghd2lsZG1hdGNoKG9yZGVyW2ldLCBwLmJ1ZiwgMCkpCisJCQkJcmV0dXJuIGk7CisJCQljcCA9IHN0cnJjaHIocC5idWYsICcvJyk7CisJCQlpZiAoIWNwKQorCQkJCWJyZWFrOworCQkJKmNwID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gb3JkZXJfY250OworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfb2Jqc19vcmRlcihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IG9ial9vcmRlciBjb25zdCAqYSwgKmI7CisJYSA9IChzdHJ1Y3Qgb2JqX29yZGVyIGNvbnN0ICopYV87CisJYiA9IChzdHJ1Y3Qgb2JqX29yZGVyIGNvbnN0ICopYl87CisJaWYgKGEtPm9yZGVyICE9IGItPm9yZGVyKQorCQlyZXR1cm4gYS0+b3JkZXIgLSBiLT5vcmRlcjsKKwlyZXR1cm4gYS0+b3JpZ19vcmRlciAtIGItPm9yaWdfb3JkZXI7Cit9CisKK3ZvaWQgb3JkZXJfb2JqZWN0cyhjb25zdCBjaGFyICpvcmRlcmZpbGUsIG9ial9wYXRoX2ZuX3Qgb2JqX3BhdGgsCisJCSAgIHN0cnVjdCBvYmpfb3JkZXIgKm9ianMsIGludCBucikKK3sKKwlpbnQgaTsKKworCWlmICghbnIpCisJCXJldHVybjsKKworCXByZXBhcmVfb3JkZXIob3JkZXJmaWxlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlvYmpzW2ldLm9yaWdfb3JkZXIgPSBpOworCQlvYmpzW2ldLm9yZGVyID0gbWF0Y2hfb3JkZXIob2JqX3BhdGgob2Jqc1tpXS5vYmopKTsKKwl9CisJUVNPUlQob2JqcywgbnIsIGNvbXBhcmVfb2Jqc19vcmRlcik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWlyX3BhdGh0d28odm9pZCAqb2JqKQoreworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyID0gKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICopb2JqOworCisJcmV0dXJuIHBhaXItPnR3by0+cGF0aDsKK30KKwordm9pZCBkaWZmY29yZV9vcmRlcihjb25zdCBjaGFyICpvcmRlcmZpbGUpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IG9ial9vcmRlciAqbzsKKwlpbnQgaTsKKworCWlmICghcS0+bnIpCisJCXJldHVybjsKKworCUFMTE9DX0FSUkFZKG8sIHEtPm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKKwkJb1tpXS5vYmogPSBxLT5xdWV1ZVtpXTsKKwlvcmRlcl9vYmplY3RzKG9yZGVyZmlsZSwgcGFpcl9wYXRodHdvLCBvLCBxLT5ucik7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCisJCXEtPnF1ZXVlW2ldID0gb1tpXS5vYmo7CisJZnJlZShvKTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kaWZmY29yZS1waWNrYXhlLmMgYi9kaWZmY29yZS1waWNrYXhlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljNmQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLXBpY2theGUuYwpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubworICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImt3c2V0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKwordHlwZWRlZiBpbnQgKCpwaWNrYXhlX2ZuKShtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvLAorCQkJICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJICByZWdleF90ICpyZWdleHAsIGt3c2V0X3Qga3dzKTsKKworc3RydWN0IGRpZmZncmVwX2NiIHsKKwlyZWdleF90ICpyZWdleHA7CisJaW50IGhpdDsKK307CisKK3N0YXRpYyB2b2lkIGRpZmZncmVwX2NvbnN1bWUodm9pZCAqcHJpdiwgY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJc3RydWN0IGRpZmZncmVwX2NiICpkYXRhID0gcHJpdjsKKwlyZWdtYXRjaF90IHJlZ21hdGNoOworCisJaWYgKGxpbmVbMF0gIT0gJysnICYmIGxpbmVbMF0gIT0gJy0nKQorCQlyZXR1cm47CisJaWYgKGRhdGEtPmhpdCkKKwkJLyoKKwkJICogTkVFRFNXT1JLOiB3ZSBzaG91bGQgaGF2ZSBhIHdheSB0byB0ZXJtaW5hdGUgdGhlCisJCSAqIGNhbGxlciBlYXJseS4KKwkJICovCisJCXJldHVybjsKKwlkYXRhLT5oaXQgPSAhcmVnZXhlY19idWYoZGF0YS0+cmVnZXhwLCBsaW5lICsgMSwgbGVuIC0gMSwgMSwKKwkJCQkgJnJlZ21hdGNoLCAwKTsKK30KKworc3RhdGljIGludCBkaWZmX2dyZXAobW1maWxlX3QgKm9uZSwgbW1maWxlX3QgKnR3bywKKwkJICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MpCit7CisJcmVnbWF0Y2hfdCByZWdtYXRjaDsKKwlzdHJ1Y3QgZGlmZmdyZXBfY2IgZWNiZGF0YTsKKwl4cHBhcmFtX3QgeHBwOworCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKworCWlmICghb25lKQorCQlyZXR1cm4gIXJlZ2V4ZWNfYnVmKHJlZ2V4cCwgdHdvLT5wdHIsIHR3by0+c2l6ZSwKKwkJCQkgICAgMSwgJnJlZ21hdGNoLCAwKTsKKwlpZiAoIXR3bykKKwkJcmV0dXJuICFyZWdleGVjX2J1ZihyZWdleHAsIG9uZS0+cHRyLCBvbmUtPnNpemUsCisJCQkJICAgIDEsICZyZWdtYXRjaCwgMCk7CisKKwkvKgorCSAqIFdlIGhhdmUgYm90aCBzaWRlczsgbmVlZCB0byBydW4gdGV4dHVhbCBkaWZmIGFuZCBzZWUgaWYKKwkgKiB0aGUgcGF0dGVybiBhcHBlYXJzIG9uIGFkZGVkL2RlbGV0ZWQgbGluZXMuCisJICovCisJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwllY2JkYXRhLnJlZ2V4cCA9IHJlZ2V4cDsKKwllY2JkYXRhLmhpdCA9IDA7CisJeGVjZmcuY3R4bGVuID0gby0+Y29udGV4dDsKKwl4ZWNmZy5pbnRlcmh1bmtjdHhsZW4gPSBvLT5pbnRlcmh1bmtjb250ZXh0OworCWlmICh4ZGlfZGlmZl9vdXRmKG9uZSwgdHdvLCBkaXNjYXJkX2h1bmtfbGluZSwgZGlmZmdyZXBfY29uc3VtZSwKKwkJCSAgJmVjYmRhdGEsICZ4cHAsICZ4ZWNmZykpCisJCXJldHVybiAwOworCXJldHVybiBlY2JkYXRhLmhpdDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjb250YWlucyhtbWZpbGVfdCAqbWYsIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MpCit7CisJdW5zaWduZWQgaW50IGNudDsKKwl1bnNpZ25lZCBsb25nIHN6OworCWNvbnN0IGNoYXIgKmRhdGE7CisKKwlzeiA9IG1mLT5zaXplOworCWRhdGEgPSBtZi0+cHRyOworCWNudCA9IDA7CisKKwlpZiAocmVnZXhwKSB7CisJCXJlZ21hdGNoX3QgcmVnbWF0Y2g7CisJCWludCBmbGFncyA9IDA7CisKKwkJd2hpbGUgKHN6ICYmICpkYXRhICYmCisJCSAgICAgICAhcmVnZXhlY19idWYocmVnZXhwLCBkYXRhLCBzeiwgMSwgJnJlZ21hdGNoLCBmbGFncykpIHsKKwkJCWZsYWdzIHw9IFJFR19OT1RCT0w7CisJCQlkYXRhICs9IHJlZ21hdGNoLnJtX2VvOworCQkJc3ogLT0gcmVnbWF0Y2gucm1fZW87CisJCQlpZiAoc3ogJiYgKmRhdGEgJiYgcmVnbWF0Y2gucm1fc28gPT0gcmVnbWF0Y2gucm1fZW8pIHsKKwkJCQlkYXRhKys7CisJCQkJc3otLTsKKwkJCX0KKwkJCWNudCsrOworCQl9CisKKwl9IGVsc2UgeyAvKiBDbGFzc2ljIGV4YWN0IHN0cmluZyBtYXRjaCAqLworCQl3aGlsZSAoc3opIHsKKwkJCXN0cnVjdCBrd3NtYXRjaCBrd3NtOworCQkJc2l6ZV90IG9mZnNldCA9IGt3c2V4ZWMoa3dzLCBkYXRhLCBzeiwgJmt3c20pOworCQkJaWYgKG9mZnNldCA9PSAtMSkKKwkJCQlicmVhazsKKwkJCXN6IC09IG9mZnNldCArIGt3c20uc2l6ZVswXTsKKwkJCWRhdGEgKz0gb2Zmc2V0ICsga3dzbS5zaXplWzBdOworCQkJY250Kys7CisJCX0KKwl9CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBoYXNfY2hhbmdlcyhtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvLAorCQkgICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJICAgICAgIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MpCit7CisJdW5zaWduZWQgaW50IG9uZV9jb250YWlucyA9IG9uZSA/IGNvbnRhaW5zKG9uZSwgcmVnZXhwLCBrd3MpIDogMDsKKwl1bnNpZ25lZCBpbnQgdHdvX2NvbnRhaW5zID0gdHdvID8gY29udGFpbnModHdvLCByZWdleHAsIGt3cykgOiAwOworCXJldHVybiBvbmVfY29udGFpbnMgIT0gdHdvX2NvbnRhaW5zOworfQorCitzdGF0aWMgaW50IHBpY2theGVfbWF0Y2goc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cywgcGlja2F4ZV9mbiBmbikKK3sKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl9vbmUgPSBOVUxMOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X3R3byA9IE5VTEw7CisJbW1maWxlX3QgbWYxLCBtZjI7CisJaW50IHJldDsKKworCS8qIGlnbm9yZSB1bm1lcmdlZCAqLworCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgJiYgIURJRkZfRklMRV9WQUxJRChwLT50d28pKQorCQlyZXR1cm4gMDsKKworCWlmIChvLT5vYmpmaW5kKSB7CisJCXJldHVybiAgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmCisJCQkgb2lkc2V0X2NvbnRhaW5zKG8tPm9iamZpbmQsICZwLT5vbmUtPm9pZCkpIHx8CisJCQkoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgJiYKKwkJCSBvaWRzZXRfY29udGFpbnMoby0+b2JqZmluZCwgJnAtPnR3by0+b2lkKSk7CisJfQorCisJaWYgKCFvLT5waWNrYXhlWzBdKQorCQlyZXR1cm4gMDsKKworCWlmIChvLT5mbGFncy5hbGxvd190ZXh0Y29udikgeworCQl0ZXh0Y29udl9vbmUgPSBnZXRfdGV4dGNvbnYoby0+cmVwbywgcC0+b25lKTsKKwkJdGV4dGNvbnZfdHdvID0gZ2V0X3RleHRjb252KG8tPnJlcG8sIHAtPnR3byk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGFuIHVubW9kaWZpZWQgcGFpciwgd2Uga25vdyB0aGF0IHRoZSBjb3VudCB3aWxsIGJlIHRoZQorCSAqIHNhbWUgYW5kIGRvbid0IGV2ZW4gaGF2ZSB0byBsb2FkIHRoZSBibG9icy4gVW5sZXNzIHRleHRjb252IGlzIGluCisJICogcGxheSwgX2FuZF8gd2UgYXJlIHVzaW5nIHR3byBkaWZmZXJlbnQgdGV4dGNvbnYgZmlsdGVycyAoZS5nLiwKKwkgKiBiZWNhdXNlIGEgcGFpciBpcyBhbiBleGFjdCByZW5hbWUgd2l0aCBkaWZmZXJlbnQgdGV4dGNvbnYgYXR0cmlidXRlcworCSAqIGZvciBlYWNoIHNpZGUsIHdoaWNoIG1pZ2h0IGdlbmVyYXRlIGRpZmZlcmVudCBjb250ZW50KS4KKwkgKi8KKwlpZiAodGV4dGNvbnZfb25lID09IHRleHRjb252X3R3byAmJiBkaWZmX3VubW9kaWZpZWRfcGFpcihwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKG8tPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9LSU5EX0cpICYmCisJICAgICFvLT5mbGFncy50ZXh0ICYmCisJICAgICgoIXRleHRjb252X29uZSAmJiBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvLT5yZXBvLCBwLT5vbmUpKSB8fAorCSAgICAgKCF0ZXh0Y29udl90d28gJiYgZGlmZl9maWxlc3BlY19pc19iaW5hcnkoby0+cmVwbywgcC0+dHdvKSkpKQorCQlyZXR1cm4gMDsKKworCW1mMS5zaXplID0gZmlsbF90ZXh0Y29udihvLT5yZXBvLCB0ZXh0Y29udl9vbmUsIHAtPm9uZSwgJm1mMS5wdHIpOworCW1mMi5zaXplID0gZmlsbF90ZXh0Y29udihvLT5yZXBvLCB0ZXh0Y29udl90d28sIHAtPnR3bywgJm1mMi5wdHIpOworCisJcmV0ID0gZm4oRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgPyAmbWYxIDogTlVMTCwKKwkJIERJRkZfRklMRV9WQUxJRChwLT50d28pID8gJm1mMiA6IE5VTEwsCisJCSBvLCByZWdleHAsIGt3cyk7CisKKwlpZiAodGV4dGNvbnZfb25lKQorCQlmcmVlKG1mMS5wdHIpOworCWlmICh0ZXh0Y29udl90d28pCisJCWZyZWUobWYyLnB0cik7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+b25lKTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT50d28pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGlja2F4ZShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCSAgICByZWdleF90ICpyZWdleHAsIGt3c2V0X3Qga3dzLCBwaWNrYXhlX2ZuIGZuKQoreworCWludCBpOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCisJRElGRl9RVUVVRV9DTEVBUigmb3V0cSk7CisKKwlpZiAoby0+cGlja2F4ZV9vcHRzICYgRElGRl9QSUNLQVhFX0FMTCkgeworCQkvKiBTaG93aW5nIHRoZSB3aG9sZSBjaGFuZ2VzZXQgaWYgbmVlZGxlIGV4aXN0cyAqLworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChwaWNrYXhlX21hdGNoKHAsIG8sIHJlZ2V4cCwga3dzLCBmbikpCisJCQkJcmV0dXJuOyAvKiBkbyBub3QgbXVuZ2UgdGhlIHF1ZXVlICovCisJCX0KKworCQkvKgorCQkgKiBPdGhlcndpc2Ugd2Ugd2lsbCBjbGVhciB0aGUgd2hvbGUgcXVldWUgYnkgY29weWluZworCQkgKiB0aGUgZW1wdHkgb3V0cSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIGJ1dAorCQkgKiBmaXJzdCBjbGVhciB0aGUgY3VycmVudCBlbnRyaWVzIGluIHRoZSBxdWV1ZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHEtPnF1ZXVlW2ldKTsKKwl9IGVsc2UgeworCQkvKiBTaG93aW5nIG9ubHkgdGhlIGZpbGVwYWlycyB0aGF0IGhhcyB0aGUgbmVlZGxlICovCisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQkJaWYgKHBpY2theGVfbWF0Y2gocCwgbywgcmVnZXhwLCBrd3MsIGZuKSkKKwkJCQlkaWZmX3EoJm91dHEsIHApOworCQkJZWxzZQorCQkJCWRpZmZfZnJlZV9maWxlcGFpcihwKTsKKwkJfQorCX0KKworCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKK30KKworc3RhdGljIHZvaWQgcmVnY29tcF9vcl9kaWUocmVnZXhfdCAqcmVnZXgsIGNvbnN0IGNoYXIgKm5lZWRsZSwgaW50IGNmbGFncykKK3sKKwlpbnQgZXJyID0gcmVnY29tcChyZWdleCwgbmVlZGxlLCBjZmxhZ3MpOworCWlmIChlcnIpIHsKKwkJLyogVGhlIFBPU0lYLjIgcGVvcGxlIGFyZSBzdXJlbHkgc2ljayAqLworCQljaGFyIGVycmJ1ZlsxMDI0XTsKKwkJcmVnZXJyb3IoZXJyLCByZWdleCwgZXJyYnVmLCAxMDI0KTsKKwkJZGllKCJpbnZhbGlkIHJlZ2V4OiAlcyIsIGVycmJ1Zik7CisJfQorfQorCit2b2lkIGRpZmZjb3JlX3BpY2theGUoc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwljb25zdCBjaGFyICpuZWVkbGUgPSBvLT5waWNrYXhlOworCWludCBvcHRzID0gby0+cGlja2F4ZV9vcHRzOworCXJlZ2V4X3QgcmVnZXgsICpyZWdleHAgPSBOVUxMOworCWt3c2V0X3Qga3dzID0gTlVMTDsKKworCWlmIChvcHRzICYgKERJRkZfUElDS0FYRV9SRUdFWCB8IERJRkZfUElDS0FYRV9LSU5EX0cpKSB7CisJCWludCBjZmxhZ3MgPSBSRUdfRVhURU5ERUQgfCBSRUdfTkVXTElORTsKKwkJaWYgKG8tPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9JR05PUkVfQ0FTRSkKKwkJCWNmbGFncyB8PSBSRUdfSUNBU0U7CisJCXJlZ2NvbXBfb3JfZGllKCZyZWdleCwgbmVlZGxlLCBjZmxhZ3MpOworCQlyZWdleHAgPSAmcmVnZXg7CisJfSBlbHNlIGlmIChvcHRzICYgRElGRl9QSUNLQVhFX0tJTkRfUykgeworCQlpZiAoby0+cGlja2F4ZV9vcHRzICYgRElGRl9QSUNLQVhFX0lHTk9SRV9DQVNFICYmCisJCSAgICBoYXNfbm9uX2FzY2lpKG5lZWRsZSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJCWludCBjZmxhZ3MgPSBSRUdfTkVXTElORSB8IFJFR19JQ0FTRTsKKworCQkJYmFzaWNfcmVnZXhfcXVvdGVfYnVmKCZzYiwgbmVlZGxlKTsKKwkJCXJlZ2NvbXBfb3JfZGllKCZyZWdleCwgc2IuYnVmLCBjZmxhZ3MpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJCXJlZ2V4cCA9ICZyZWdleDsKKwkJfSBlbHNlIHsKKwkJCWt3cyA9IGt3c2FsbG9jKG8tPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9JR05PUkVfQ0FTRQorCQkJCSAgICAgICA/IHRvbG93ZXJfdHJhbnNfdGJsIDogTlVMTCk7CisJCQlrd3NpbmNyKGt3cywgbmVlZGxlLCBzdHJsZW4obmVlZGxlKSk7CisJCQlrd3NwcmVwKGt3cyk7CisJCX0KKwl9CisKKwlwaWNrYXhlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvLCByZWdleHAsIGt3cywKKwkJKG9wdHMgJiBESUZGX1BJQ0tBWEVfS0lORF9HKSA/IGRpZmZfZ3JlcCA6IGhhc19jaGFuZ2VzKTsKKworCWlmIChyZWdleHApCisJCXJlZ2ZyZWUocmVnZXhwKTsKKwlpZiAoa3dzKQorCQlrd3NmcmVlKGt3cyk7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtcmVuYW1lLmMgYi9kaWZmY29yZS1yZW5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg5ZjQwCi0tLSAvZGV2L251bGwKKysrIGIvZGlmZmNvcmUtcmVuYW1lLmMKQEAgLTAsMCArMSw2ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisKKy8qIFRhYmxlIG9mIHJlbmFtZS9jb3B5IGRlc3RpbmF0aW9ucyAqLworCitzdGF0aWMgc3RydWN0IGRpZmZfcmVuYW1lX2RzdCB7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bzsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKK30gKnJlbmFtZV9kc3Q7CitzdGF0aWMgaW50IHJlbmFtZV9kc3RfbnIsIHJlbmFtZV9kc3RfYWxsb2M7CisKK3N0YXRpYyBpbnQgZmluZF9yZW5hbWVfZHN0KHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28pCit7CisJaW50IGZpcnN0LCBsYXN0OworCisJZmlyc3QgPSAwOworCWxhc3QgPSByZW5hbWVfZHN0X25yOworCXdoaWxlIChsYXN0ID4gZmlyc3QpIHsKKwkJaW50IG5leHQgPSBmaXJzdCArICgobGFzdCAtIGZpcnN0KSA+PiAxKTsKKwkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gJihyZW5hbWVfZHN0W25leHRdKTsKKwkJaW50IGNtcCA9IHN0cmNtcCh0d28tPnBhdGgsIGRzdC0+dHdvLT5wYXRoKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbmV4dDsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCXJldHVybiAtZmlyc3QgLSAxOworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqbG9jYXRlX3JlbmFtZV9kc3Qoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bykKK3sKKwlpbnQgb2ZzID0gZmluZF9yZW5hbWVfZHN0KHR3byk7CisJcmV0dXJuIG9mcyA8IDAgPyBOVUxMIDogJnJlbmFtZV9kc3Rbb2ZzXTsKK30KKworLyoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBpZiB3ZSBmb3VuZCBhIGR1cGxpY2F0ZS4KKyAqLworc3RhdGljIGludCBhZGRfcmVuYW1lX2RzdChzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCWludCBmaXJzdCA9IGZpbmRfcmVuYW1lX2RzdCh0d28pOworCisJaWYgKGZpcnN0ID49IDApCisJCXJldHVybiAtMTsKKwlmaXJzdCA9IC1maXJzdCAtIDE7CisKKwkvKiBpbnNlcnQgdG8gbWFrZSBpdCBhdCAiZmlyc3QiICovCisJQUxMT0NfR1JPVyhyZW5hbWVfZHN0LCByZW5hbWVfZHN0X25yICsgMSwgcmVuYW1lX2RzdF9hbGxvYyk7CisJcmVuYW1lX2RzdF9ucisrOworCWlmIChmaXJzdCA8IHJlbmFtZV9kc3RfbnIpCisJCU1PVkVfQVJSQVkocmVuYW1lX2RzdCArIGZpcnN0ICsgMSwgcmVuYW1lX2RzdCArIGZpcnN0LAorCQkJICAgcmVuYW1lX2RzdF9uciAtIGZpcnN0IC0gMSk7CisJcmVuYW1lX2RzdFtmaXJzdF0udHdvID0gYWxsb2NfZmlsZXNwZWModHdvLT5wYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKHJlbmFtZV9kc3RbZmlyc3RdLnR3bywgJnR3by0+b2lkLCB0d28tPm9pZF92YWxpZCwKKwkJICAgICAgdHdvLT5tb2RlKTsKKwlyZW5hbWVfZHN0W2ZpcnN0XS5wYWlyID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworLyogVGFibGUgb2YgcmVuYW1lL2NvcHkgc3JjIGZpbGVzICovCitzdGF0aWMgc3RydWN0IGRpZmZfcmVuYW1lX3NyYyB7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnA7CisJdW5zaWduZWQgc2hvcnQgc2NvcmU7IC8qIHRvIHJlbWVtYmVyIHRoZSBicmVhayBzY29yZSAqLworfSAqcmVuYW1lX3NyYzsKK3N0YXRpYyBpbnQgcmVuYW1lX3NyY19uciwgcmVuYW1lX3NyY19hbGxvYzsKKworc3RhdGljIHN0cnVjdCBkaWZmX3JlbmFtZV9zcmMgKnJlZ2lzdGVyX3JlbmFtZV9zcmMoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJaW50IGZpcnN0LCBsYXN0OworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBwLT5vbmU7CisJdW5zaWduZWQgc2hvcnQgc2NvcmUgPSBwLT5zY29yZTsKKworCWZpcnN0ID0gMDsKKwlsYXN0ID0gcmVuYW1lX3NyY19ucjsKKwl3aGlsZSAobGFzdCA+IGZpcnN0KSB7CisJCWludCBuZXh0ID0gZmlyc3QgKyAoKGxhc3QgLSBmaXJzdCkgPj4gMSk7CisJCXN0cnVjdCBkaWZmX3JlbmFtZV9zcmMgKnNyYyA9ICYocmVuYW1lX3NyY1tuZXh0XSk7CisJCWludCBjbXAgPSBzdHJjbXAob25lLT5wYXRoLCBzcmMtPnAtPm9uZS0+cGF0aCk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIHNyYzsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCisJLyogaW5zZXJ0IHRvIG1ha2UgaXQgYXQgImZpcnN0IiAqLworCUFMTE9DX0dST1cocmVuYW1lX3NyYywgcmVuYW1lX3NyY19uciArIDEsIHJlbmFtZV9zcmNfYWxsb2MpOworCXJlbmFtZV9zcmNfbnIrKzsKKwlpZiAoZmlyc3QgPCByZW5hbWVfc3JjX25yKQorCQlNT1ZFX0FSUkFZKHJlbmFtZV9zcmMgKyBmaXJzdCArIDEsIHJlbmFtZV9zcmMgKyBmaXJzdCwKKwkJCSAgIHJlbmFtZV9zcmNfbnIgLSBmaXJzdCAtIDEpOworCXJlbmFtZV9zcmNbZmlyc3RdLnAgPSBwOworCXJlbmFtZV9zcmNbZmlyc3RdLnNjb3JlID0gc2NvcmU7CisJcmV0dXJuICYocmVuYW1lX3NyY1tmaXJzdF0pOworfQorCitzdGF0aWMgaW50IGJhc2VuYW1lX3NhbWUoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRzdCkKK3sKKwlpbnQgc3JjX2xlbiA9IHN0cmxlbihzcmMtPnBhdGgpLCBkc3RfbGVuID0gc3RybGVuKGRzdC0+cGF0aCk7CisJd2hpbGUgKHNyY19sZW4gJiYgZHN0X2xlbikgeworCQljaGFyIGMxID0gc3JjLT5wYXRoWy0tc3JjX2xlbl07CisJCWNoYXIgYzIgPSBkc3QtPnBhdGhbLS1kc3RfbGVuXTsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIDA7CisJCWlmIChjMSA9PSAnLycpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuICghc3JjX2xlbiB8fCBzcmMtPnBhdGhbc3JjX2xlbiAtIDFdID09ICcvJykgJiYKKwkJKCFkc3RfbGVuIHx8IGRzdC0+cGF0aFtkc3RfbGVuIC0gMV0gPT0gJy8nKTsKK30KKworc3RydWN0IGRpZmZfc2NvcmUgeworCWludCBzcmM7IC8qIGluZGV4IGluIHJlbmFtZV9zcmMgKi8KKwlpbnQgZHN0OyAvKiBpbmRleCBpbiByZW5hbWVfZHN0ICovCisJdW5zaWduZWQgc2hvcnQgc2NvcmU7CisJc2hvcnQgbmFtZV9zY29yZTsKK307CisKK3N0YXRpYyBpbnQgZXN0aW1hdGVfc2ltaWxhcml0eShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLAorCQkJICAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQkgICAgICAgaW50IG1pbmltdW1fc2NvcmUpCit7CisJLyogc3JjIHBvaW50cyBhdCBhIGZpbGUgdGhhdCBleGlzdGVkIGluIHRoZSBvcmlnaW5hbCB0cmVlIChvcgorCSAqIG9wdGlvbmFsbHkgYSBmaWxlIGluIHRoZSBkZXN0aW5hdGlvbiB0cmVlKSBhbmQgZHN0IHBvaW50cworCSAqIGF0IGEgbmV3bHkgY3JlYXRlZCBmaWxlLiAgVGhleSBtYXkgYmUgcXVpdGUgc2ltaWxhciwgaW4gd2hpY2gKKwkgKiBjYXNlIHdlIHdhbnQgdG8gc2F5IHNyYyBpcyByZW5hbWVkIHRvIGRzdCBvciBzcmMgaXMgY29waWVkIGludG8KKwkgKiBkc3QsIGFuZCB0aGVuIHNvbWUgZWRpdCBoYXMgYmVlbiBhcHBsaWVkIHRvIGRzdC4KKwkgKgorCSAqIENvbXBhcmUgdGhlbSBhbmQgcmV0dXJuIGhvdyBzaW1pbGFyIHRoZXkgYXJlLCByZXByZXNlbnRpbmcKKwkgKiB0aGUgc2NvcmUgYXMgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIE1BWF9TQ09SRS4KKwkgKgorCSAqIFdoZW4gdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2gsIGl0IGlzIGNvbnNpZGVyZWQgYSBiZXR0ZXIKKwkgKiBtYXRjaCB0aGFuIGFueXRoaW5nIGVsc2U7IHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBldmVuCisJICogY2FsbCBpbnRvIHRoaXMgZnVuY3Rpb24gaW4gdGhhdCBjYXNlLgorCSAqLworCXVuc2lnbmVkIGxvbmcgbWF4X3NpemUsIGRlbHRhX3NpemUsIGJhc2Vfc2l6ZSwgc3JjX2NvcGllZCwgbGl0ZXJhbF9hZGRlZDsKKwlpbnQgc2NvcmU7CisKKwkvKiBXZSBkZWFsIG9ubHkgd2l0aCByZWd1bGFyIGZpbGVzLiAgU3ltbGluayByZW5hbWVzIGFyZSBoYW5kbGVkCisJICogb25seSB3aGVuIHRoZXkgYXJlIGV4YWN0IG1hdGNoZXMgLS0tIGluIG90aGVyIHdvcmRzLCBubyBlZGl0cworCSAqIGFmdGVyIHJlbmFtaW5nLgorCSAqLworCWlmICghU19JU1JFRyhzcmMtPm1vZGUpIHx8ICFTX0lTUkVHKGRzdC0+bW9kZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBOZWVkIHRvIGNoZWNrIHRoYXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzaXplcyBhcmUKKwkgKiBmaWxsZWQgaW4gYmVmb3JlIGNvbXBhcmluZyB0aGVtLgorCSAqCisJICogSWYgd2UgYWxyZWFkeSBoYXZlICJjbnRfZGF0YSIgZmlsbGVkIGluLCB3ZSBrbm93IGl0J3MKKwkgKiBhbGwgZ29vZCAoYXZvaWQgY2hlY2tpbmcgdGhlIHNpemUgZm9yIHplcm8sIGFzIHRoYXQKKwkgKiBpcyBhIHBvc3NpYmxlIHNpemUgLSB3ZSByZWFsbHkgc2hvdWxkIGhhdmUgYSBmbGFnIHRvCisJICogc2F5IHdoZXRoZXIgdGhlIHNpemUgaXMgdmFsaWQgb3Igbm90ISkKKwkgKi8KKwlpZiAoIXNyYy0+Y250X2RhdGEgJiYKKwkgICAgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBzcmMsIENIRUNLX1NJWkVfT05MWSkpCisJCXJldHVybiAwOworCWlmICghZHN0LT5jbnRfZGF0YSAmJgorCSAgICBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHIsIGRzdCwgQ0hFQ0tfU0laRV9PTkxZKSkKKwkJcmV0dXJuIDA7CisKKwltYXhfc2l6ZSA9ICgoc3JjLT5zaXplID4gZHN0LT5zaXplKSA/IHNyYy0+c2l6ZSA6IGRzdC0+c2l6ZSk7CisJYmFzZV9zaXplID0gKChzcmMtPnNpemUgPCBkc3QtPnNpemUpID8gc3JjLT5zaXplIDogZHN0LT5zaXplKTsKKwlkZWx0YV9zaXplID0gbWF4X3NpemUgLSBiYXNlX3NpemU7CisKKwkvKiBXZSB3b3VsZCBub3QgY29uc2lkZXIgZWRpdHMgdGhhdCBjaGFuZ2UgdGhlIGZpbGUgc2l6ZSBzbworCSAqIGRyYXN0aWNhbGx5LiAgZGVsdGFfc2l6ZSBtdXN0IGJlIHNtYWxsZXIgdGhhbgorCSAqIChNQVhfU0NPUkUtbWluaW11bV9zY29yZSkvTUFYX1NDT1JFICogbWluKHNyYy0+c2l6ZSwgZHN0LT5zaXplKS4KKwkgKgorCSAqIE5vdGUgdGhhdCBiYXNlX3NpemUgPT0gMCBjYXNlIGlzIGhhbmRsZWQgaGVyZSBhbHJlYWR5CisJICogYW5kIHRoZSBmaW5hbCBzY29yZSBjb21wdXRhdGlvbiBiZWxvdyB3b3VsZCBub3QgaGF2ZSBhCisJICogZGl2aWRlLWJ5LXplcm8gaXNzdWUuCisJICovCisJaWYgKG1heF9zaXplICogKE1BWF9TQ09SRS1taW5pbXVtX3Njb3JlKSA8IGRlbHRhX3NpemUgKiBNQVhfU0NPUkUpCisJCXJldHVybiAwOworCisJaWYgKCFzcmMtPmNudF9kYXRhICYmIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgc3JjLCAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFkc3QtPmNudF9kYXRhICYmIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMociwgZHN0LCAwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGlmZmNvcmVfY291bnRfY2hhbmdlcyhyLCBzcmMsIGRzdCwKKwkJCQkgICAmc3JjLT5jbnRfZGF0YSwgJmRzdC0+Y250X2RhdGEsCisJCQkJICAgJnNyY19jb3BpZWQsICZsaXRlcmFsX2FkZGVkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBIb3cgc2ltaWxhciBhcmUgdGhleT8KKwkgKiB3aGF0IHBlcmNlbnRhZ2Ugb2YgbWF0ZXJpYWwgaW4gZHN0IGFyZSBmcm9tIHNvdXJjZT8KKwkgKi8KKwlpZiAoIWRzdC0+c2l6ZSkKKwkJc2NvcmUgPSAwOyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCWVsc2UKKwkJc2NvcmUgPSAoaW50KShzcmNfY29waWVkICogTUFYX1NDT1JFIC8gbWF4X3NpemUpOworCXJldHVybiBzY29yZTsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX3JlbmFtZV9wYWlyKGludCBkc3RfaW5kZXgsIGludCBzcmNfaW5kZXgsIGludCBzY29yZSkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLCAqZHN0OworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkcDsKKworCWlmIChyZW5hbWVfZHN0W2RzdF9pbmRleF0ucGFpcikKKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogZHN0IGFscmVhZHkgbWF0Y2hlZC4iKTsKKworCXNyYyA9IHJlbmFtZV9zcmNbc3JjX2luZGV4XS5wLT5vbmU7CisJc3JjLT5yZW5hbWVfdXNlZCsrOworCXNyYy0+Y291bnQrKzsKKworCWRzdCA9IHJlbmFtZV9kc3RbZHN0X2luZGV4XS50d287CisJZHN0LT5jb3VudCsrOworCisJZHAgPSBkaWZmX3F1ZXVlKE5VTEwsIHNyYywgZHN0KTsKKwlkcC0+cmVuYW1lZF9wYWlyID0gMTsKKwlpZiAoIXN0cmNtcChzcmMtPnBhdGgsIGRzdC0+cGF0aCkpCisJCWRwLT5zY29yZSA9IHJlbmFtZV9zcmNbc3JjX2luZGV4XS5zY29yZTsKKwllbHNlCisJCWRwLT5zY29yZSA9IHNjb3JlOworCXJlbmFtZV9kc3RbZHN0X2luZGV4XS5wYWlyID0gZHA7Cit9CisKKy8qCisgKiBXZSBzb3J0IHRoZSByZW5hbWUgc2ltaWxhcml0eSBtYXRyaXggd2l0aCB0aGUgc2NvcmUsIGluIGRlc2NlbmRpbmcKKyAqIG9yZGVyICh0aGUgbW9zdCBzaW1pbGFyIGZpcnN0KS4KKyAqLworc3RhdGljIGludCBzY29yZV9jb21wYXJlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3QgZGlmZl9zY29yZSAqYSA9IGFfLCAqYiA9IGJfOworCisJLyogc2luayB0aGUgdW51c2VkIG9uZXMgdG8gdGhlIGJvdHRvbSAqLworCWlmIChhLT5kc3QgPCAwKQorCQlyZXR1cm4gKDAgPD0gYi0+ZHN0KTsKKwllbHNlIGlmIChiLT5kc3QgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYS0+c2NvcmUgPT0gYi0+c2NvcmUpCisJCXJldHVybiBiLT5uYW1lX3Njb3JlIC0gYS0+bmFtZV9zY29yZTsKKworCXJldHVybiBiLT5zY29yZSAtIGEtPnNjb3JlOworfQorCitzdHJ1Y3QgZmlsZV9zaW1pbGFyaXR5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwlpbnQgaW5kZXg7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX2ZpbGVzcGVjKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjKQoreworCWlmICghZmlsZXNwZWMtPm9pZF92YWxpZCkgeworCQlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyLCBmaWxlc3BlYywgMCkpCisJCQlyZXR1cm4gMDsKKwkJaGFzaF9vYmplY3RfZmlsZShyLT5oYXNoX2FsZ28sIGZpbGVzcGVjLT5kYXRhLCBmaWxlc3BlYy0+c2l6ZSwKKwkJCQkgImJsb2IiLCAmZmlsZXNwZWMtPm9pZCk7CisJfQorCXJldHVybiBvaWRoYXNoKCZmaWxlc3BlYy0+b2lkKTsKK30KKworc3RhdGljIGludCBmaW5kX2lkZW50aWNhbF9maWxlcyhzdHJ1Y3QgaGFzaG1hcCAqc3JjcywKKwkJCQlpbnQgZHN0X2luZGV4LAorCQkJCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IHJlbmFtZXMgPSAwOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0YXJnZXQgPSByZW5hbWVfZHN0W2RzdF9pbmRleF0udHdvOworCXN0cnVjdCBmaWxlX3NpbWlsYXJpdHkgKnAsICpiZXN0ID0gTlVMTDsKKwlpbnQgaSA9IDEwMCwgYmVzdF9zY29yZSA9IC0xOworCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9maWxlc3BlYyhvcHRpb25zLT5yZXBvLCB0YXJnZXQpOworCisJLyoKKwkgKiBGaW5kIHRoZSBiZXN0IHNvdXJjZSBtYXRjaCBmb3Igc3BlY2lmaWVkIGRlc3RpbmF0aW9uLgorCSAqLworCXAgPSBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2goc3JjcywgaGFzaCwgTlVMTCwKKwkJCQkJc3RydWN0IGZpbGVfc2ltaWxhcml0eSwgZW50cnkpOworCWhhc2htYXBfZm9yX2VhY2hfZW50cnlfZnJvbShzcmNzLCBwLCBlbnRyeSkgeworCQlpbnQgc2NvcmU7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzb3VyY2UgPSBwLT5maWxlc3BlYzsKKworCQkvKiBGYWxzZSBoYXNoIGNvbGxpc2lvbj8gKi8KKwkJaWYgKCFvaWRlcSgmc291cmNlLT5vaWQsICZ0YXJnZXQtPm9pZCkpCisJCQljb250aW51ZTsKKwkJLyogTm9uLXJlZ3VsYXIgZmlsZXM/IElmIHNvLCB0aGUgbW9kZXMgbXVzdCBtYXRjaCEgKi8KKwkJaWYgKCFTX0lTUkVHKHNvdXJjZS0+bW9kZSkgfHwgIVNfSVNSRUcodGFyZ2V0LT5tb2RlKSkgeworCQkJaWYgKHNvdXJjZS0+bW9kZSAhPSB0YXJnZXQtPm1vZGUpCisJCQkJY29udGludWU7CisJCX0KKwkJLyogR2l2ZSBoaWdoZXIgc2NvcmVzIHRvIHNvdXJjZXMgdGhhdCBoYXZlbid0IGJlZW4gdXNlZCBhbHJlYWR5ICovCisJCXNjb3JlID0gIXNvdXJjZS0+cmVuYW1lX3VzZWQ7CisJCWlmIChzb3VyY2UtPnJlbmFtZV91c2VkICYmIG9wdGlvbnMtPmRldGVjdF9yZW5hbWUgIT0gRElGRl9ERVRFQ1RfQ09QWSkKKwkJCWNvbnRpbnVlOworCQlzY29yZSArPSBiYXNlbmFtZV9zYW1lKHNvdXJjZSwgdGFyZ2V0KTsKKwkJaWYgKHNjb3JlID4gYmVzdF9zY29yZSkgeworCQkJYmVzdCA9IHA7CisJCQliZXN0X3Njb3JlID0gc2NvcmU7CisJCQlpZiAoc2NvcmUgPT0gMikKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIFRvbyBtYW55IGlkZW50aWNhbCBhbHRlcm5hdGl2ZXM/IFBpY2sgb25lICovCisJCWlmICghLS1pKQorCQkJYnJlYWs7CisJfQorCWlmIChiZXN0KSB7CisJCXJlY29yZF9yZW5hbWVfcGFpcihkc3RfaW5kZXgsIGJlc3QtPmluZGV4LCBNQVhfU0NPUkUpOworCQlyZW5hbWVzKys7CisJfQorCXJldHVybiByZW5hbWVzOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfZmlsZV90YWJsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgIHN0cnVjdCBoYXNobWFwICp0YWJsZSwgaW50IGluZGV4LAorCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjKQoreworCXN0cnVjdCBmaWxlX3NpbWlsYXJpdHkgKmVudHJ5ID0geG1hbGxvYyhzaXplb2YoKmVudHJ5KSk7CisKKwllbnRyeS0+aW5kZXggPSBpbmRleDsKKwllbnRyeS0+ZmlsZXNwZWMgPSBmaWxlc3BlYzsKKworCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudHJ5LCBoYXNoX2ZpbGVzcGVjKHIsIGZpbGVzcGVjKSk7CisJaGFzaG1hcF9hZGQodGFibGUsICZlbnRyeS0+ZW50cnkpOworfQorCisvKgorICogRmluZCBleGFjdCByZW5hbWVzIGZpcnN0LgorICoKKyAqIFRoZSBmaXJzdCByb3VuZCBtYXRjaGVzIHVwIHRoZSB1cC10by1kYXRlIGVudHJpZXMsCisgKiBhbmQgdGhlbiBkdXJpbmcgdGhlIHNlY29uZCByb3VuZCB3ZSB0cnkgdG8gbWF0Y2gKKyAqIGNhY2hlLWRpcnR5IGVudHJpZXMgYXMgd2VsbC4KKyAqLworc3RhdGljIGludCBmaW5kX2V4YWN0X3JlbmFtZXMoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaSwgcmVuYW1lcyA9IDA7CisJc3RydWN0IGhhc2htYXAgZmlsZV90YWJsZTsKKworCS8qIEFkZCBhbGwgc291cmNlcyB0byB0aGUgaGFzaCB0YWJsZSBpbiByZXZlcnNlIG9yZGVyLCBiZWNhdXNlCisJICogbGF0ZXIgb24gdGhleSB3aWxsIGJlIHJldHJpZXZlZCBpbiBMSUZPIG9yZGVyLgorCSAqLworCWhhc2htYXBfaW5pdCgmZmlsZV90YWJsZSwgTlVMTCwgTlVMTCwgcmVuYW1lX3NyY19ucik7CisJZm9yIChpID0gcmVuYW1lX3NyY19uci0xOyBpID49IDA7IGktLSkKKwkJaW5zZXJ0X2ZpbGVfdGFibGUob3B0aW9ucy0+cmVwbywKKwkJCQkgICZmaWxlX3RhYmxlLCBpLAorCQkJCSAgcmVuYW1lX3NyY1tpXS5wLT5vbmUpOworCisJLyogV2FsayB0aGUgZGVzdGluYXRpb25zIGFuZCBmaW5kIGJlc3Qgc291cmNlIG1hdGNoICovCisJZm9yIChpID0gMDsgaSA8IHJlbmFtZV9kc3RfbnI7IGkrKykKKwkJcmVuYW1lcyArPSBmaW5kX2lkZW50aWNhbF9maWxlcygmZmlsZV90YWJsZSwgaSwgb3B0aW9ucyk7CisKKwkvKiBGcmVlIHRoZSBoYXNoIGRhdGEgc3RydWN0dXJlIGFuZCBlbnRyaWVzICovCisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJmZpbGVfdGFibGUsIHN0cnVjdCBmaWxlX3NpbWlsYXJpdHksIGVudHJ5KTsKKworCXJldHVybiByZW5hbWVzOworfQorCisjZGVmaW5lIE5VTV9DQU5ESURBVEVfUEVSX0RTVCA0CitzdGF0aWMgdm9pZCByZWNvcmRfaWZfYmV0dGVyKHN0cnVjdCBkaWZmX3Njb3JlIG1bXSwgc3RydWN0IGRpZmZfc2NvcmUgKm8pCit7CisJaW50IGksIHdvcnN0OworCisJLyogZmluZCB0aGUgd29yc3Qgb25lICovCisJd29yc3QgPSAwOworCWZvciAoaSA9IDE7IGkgPCBOVU1fQ0FORElEQVRFX1BFUl9EU1Q7IGkrKykKKwkJaWYgKHNjb3JlX2NvbXBhcmUoJm1baV0sICZtW3dvcnN0XSkgPiAwKQorCQkJd29yc3QgPSBpOworCisJLyogaXMgaXQgYmV0dGVyIHRoYW4gdGhlIHdvcnN0IG9uZT8gKi8KKwlpZiAoc2NvcmVfY29tcGFyZSgmbVt3b3JzdF0sIG8pID4gMCkKKwkJbVt3b3JzdF0gPSAqbzsKK30KKworLyoKKyAqIFJldHVybnM6CisgKiAwIGlmIHdlIGFyZSB1bmRlciB0aGUgbGltaXQ7CisgKiAxIGlmIHdlIG5lZWQgdG8gZGlzYWJsZSBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb247CisgKiAyIGlmIHdlIHdvdWxkIGJlIHVuZGVyIHRoZSBsaW1pdCBpZiB3ZSB3ZXJlIGdpdmVuIC1DIGluc3RlYWQgb2YgLUMgLUMuCisgKi8KK3N0YXRpYyBpbnQgdG9vX21hbnlfcmVuYW1lX2NhbmRpZGF0ZXMoaW50IG51bV9jcmVhdGUsCisJCQkJICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgcmVuYW1lX2xpbWl0ID0gb3B0aW9ucy0+cmVuYW1lX2xpbWl0OworCWludCBudW1fc3JjID0gcmVuYW1lX3NyY19ucjsKKwlpbnQgaTsKKworCW9wdGlvbnMtPm5lZWRlZF9yZW5hbWVfbGltaXQgPSAwOworCisJLyoKKwkgKiBUaGlzIGJhc2ljYWxseSBkb2VzIGEgdGVzdCBmb3IgdGhlIHJlbmFtZSBtYXRyaXggbm90CisJICogZ3Jvd2luZyBsYXJnZXIgdGhhbiBhICJyZW5hbWVfbGltaXQiIHNxdWFyZSBtYXRyaXgsIGllOgorCSAqCisJICogICAgbnVtX2NyZWF0ZSAqIG51bV9zcmMgPiByZW5hbWVfbGltaXQgKiByZW5hbWVfbGltaXQKKwkgKi8KKwlpZiAocmVuYW1lX2xpbWl0IDw9IDApCisJCXJlbmFtZV9saW1pdCA9IDMyNzY3OworCWlmICgobnVtX2NyZWF0ZSA8PSByZW5hbWVfbGltaXQgfHwgbnVtX3NyYyA8PSByZW5hbWVfbGltaXQpICYmCisJICAgICgodWludDY0X3QpbnVtX2NyZWF0ZSAqICh1aW50NjRfdCludW1fc3JjCisJICAgICA8PSAodWludDY0X3QpcmVuYW1lX2xpbWl0ICogKHVpbnQ2NF90KXJlbmFtZV9saW1pdCkpCisJCXJldHVybiAwOworCisJb3B0aW9ucy0+bmVlZGVkX3JlbmFtZV9saW1pdCA9CisJCW51bV9zcmMgPiBudW1fY3JlYXRlID8gbnVtX3NyYyA6IG51bV9jcmVhdGU7CisKKwkvKiBBcmUgd2UgcnVubmluZyB1bmRlciAtQyAtQz8gKi8KKwlpZiAoIW9wdGlvbnMtPmZsYWdzLmZpbmRfY29waWVzX2hhcmRlcikKKwkJcmV0dXJuIDE7CisKKwkvKiBXb3VsZCB3ZSBidXN0IHRoZSBsaW1pdCBpZiB3ZSB3ZXJlIHJ1bm5pbmcgdW5kZXIgLUM/ICovCisJZm9yIChudW1fc3JjID0gaSA9IDA7IGkgPCByZW5hbWVfc3JjX25yOyBpKyspIHsKKwkJaWYgKGRpZmZfdW5tb2RpZmllZF9wYWlyKHJlbmFtZV9zcmNbaV0ucCkpCisJCQljb250aW51ZTsKKwkJbnVtX3NyYysrOworCX0KKwlpZiAoKG51bV9jcmVhdGUgPD0gcmVuYW1lX2xpbWl0IHx8IG51bV9zcmMgPD0gcmVuYW1lX2xpbWl0KSAmJgorCSAgICAoKHVpbnQ2NF90KW51bV9jcmVhdGUgKiAodWludDY0X3QpbnVtX3NyYworCSAgICAgPD0gKHVpbnQ2NF90KXJlbmFtZV9saW1pdCAqICh1aW50NjRfdClyZW5hbWVfbGltaXQpKQorCQlyZXR1cm4gMjsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmaW5kX3JlbmFtZXMoc3RydWN0IGRpZmZfc2NvcmUgKm14LCBpbnQgZHN0X2NudCwgaW50IG1pbmltdW1fc2NvcmUsIGludCBjb3BpZXMpCit7CisJaW50IGNvdW50ID0gMCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkc3RfY250ICogTlVNX0NBTkRJREFURV9QRVJfRFNUOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0OworCisJCWlmICgobXhbaV0uZHN0IDwgMCkgfHwKKwkJICAgIChteFtpXS5zY29yZSA8IG1pbmltdW1fc2NvcmUpKQorCQkJYnJlYWs7IC8qIHRoZXJlIGlzIG5vIG1vcmUgdXNhYmxlIHBhaXIuICovCisJCWRzdCA9ICZyZW5hbWVfZHN0W214W2ldLmRzdF07CisJCWlmIChkc3QtPnBhaXIpCisJCQljb250aW51ZTsgLyogYWxyZWFkeSBkb25lLCBlaXRoZXIgZXhhY3Qgb3IgZnV6enkuICovCisJCWlmICghY29waWVzICYmIHJlbmFtZV9zcmNbbXhbaV0uc3JjXS5wLT5vbmUtPnJlbmFtZV91c2VkKQorCQkJY29udGludWU7CisJCXJlY29yZF9yZW5hbWVfcGFpcihteFtpXS5kc3QsIG14W2ldLnNyYywgbXhbaV0uc2NvcmUpOworCQljb3VudCsrOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQgZGlmZmNvcmVfcmVuYW1lKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGRldGVjdF9yZW5hbWUgPSBvcHRpb25zLT5kZXRlY3RfcmVuYW1lOworCWludCBtaW5pbXVtX3Njb3JlID0gb3B0aW9ucy0+cmVuYW1lX3Njb3JlOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCXN0cnVjdCBkaWZmX3Njb3JlICpteDsKKwlpbnQgaSwgaiwgcmVuYW1lX2NvdW50LCBza2lwX3VubW9kaWZpZWQgPSAwOworCWludCBudW1fY3JlYXRlLCBkc3RfY250OworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCisJaWYgKCFtaW5pbXVtX3Njb3JlKQorCQltaW5pbXVtX3Njb3JlID0gREVGQVVMVF9SRU5BTUVfU0NPUkU7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpKSB7CisJCQlpZiAoIURJRkZfRklMRV9WQUxJRChwLT50d28pKQorCQkJCWNvbnRpbnVlOyAvKiB1bm1lcmdlZCAqLworCQkJZWxzZSBpZiAob3B0aW9ucy0+c2luZ2xlX2ZvbGxvdyAmJgorCQkJCSBzdHJjbXAob3B0aW9ucy0+c2luZ2xlX2ZvbGxvdywgcC0+dHdvLT5wYXRoKSkKKwkJCQljb250aW51ZTsgLyogbm90IGludGVyZXN0ZWQgKi8KKwkJCWVsc2UgaWYgKCFvcHRpb25zLT5mbGFncy5yZW5hbWVfZW1wdHkgJiYKKwkJCQkgaXNfZW1wdHlfYmxvYl9vaWQoJnAtPnR3by0+b2lkKSkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UgaWYgKGFkZF9yZW5hbWVfZHN0KHAtPnR3bykgPCAwKSB7CisJCQkJd2FybmluZygic2tpcHBpbmcgcmVuYW1lIGRldGVjdGlvbiwgZGV0ZWN0ZWQiCisJCQkJCSIgZHVwbGljYXRlIGRlc3RpbmF0aW9uICclcyciLAorCQkJCQlwLT50d28tPnBhdGgpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghb3B0aW9ucy0+ZmxhZ3MucmVuYW1lX2VtcHR5ICYmCisJCQkgaXNfZW1wdHlfYmxvYl9vaWQoJnAtPm9uZS0+b2lkKSkKKwkJCWNvbnRpbnVlOworCQllbHNlIGlmICghRElGRl9QQUlSX1VOTUVSR0VEKHApICYmICFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBzb3VyY2UgaXMgYSBicm9rZW4gImRlbGV0ZSIsIGFuZAorCQkJICogdGhleSBkaWQgbm90IHJlYWxseSB3YW50IHRvIGdldCBicm9rZW4sCisJCQkgKiB0aGF0IG1lYW5zIHRoZSBzb3VyY2UgYWN0dWFsbHkgc3RheXMuCisJCQkgKiBTbyB3ZSBpbmNyZW1lbnQgdGhlICJyZW5hbWVfdXNlZCIgc2NvcmUKKwkJCSAqIGJ5IG9uZSwgdG8gaW5kaWNhdGUgb3Vyc2VsdmVzIGFzIGEgdXNlcgorCQkJICovCisJCQlpZiAocC0+YnJva2VuX3BhaXIgJiYgIXAtPnNjb3JlKQorCQkJCXAtPm9uZS0+cmVuYW1lX3VzZWQrKzsKKwkJCXJlZ2lzdGVyX3JlbmFtZV9zcmMocCk7CisJCX0KKwkJZWxzZSBpZiAoZGV0ZWN0X3JlbmFtZSA9PSBESUZGX0RFVEVDVF9DT1BZKSB7CisJCQkvKgorCQkJICogSW5jcmVtZW50IHRoZSAicmVuYW1lX3VzZWQiIHNjb3JlIGJ5CisJCQkgKiBvbmUsIHRvIGluZGljYXRlIG91cnNlbHZlcyBhcyBhIHVzZXIuCisJCQkgKi8KKwkJCXAtPm9uZS0+cmVuYW1lX3VzZWQrKzsKKwkJCXJlZ2lzdGVyX3JlbmFtZV9zcmMocCk7CisJCX0KKwl9CisJaWYgKHJlbmFtZV9kc3RfbnIgPT0gMCB8fCByZW5hbWVfc3JjX25yID09IDApCisJCWdvdG8gY2xlYW51cDsgLyogbm90aGluZyB0byBkbyAqLworCisJLyoKKwkgKiBXZSByZWFsbHkgd2FudCB0byBjdWxsIHRoZSBjYW5kaWRhdGVzIGxpc3QgZWFybHkKKwkgKiB3aXRoIGNoZWFwIHRlc3RzIGluIG9yZGVyIHRvIGF2b2lkIGRvaW5nIGRlbHRhcy4KKwkgKi8KKwlyZW5hbWVfY291bnQgPSBmaW5kX2V4YWN0X3JlbmFtZXMob3B0aW9ucyk7CisKKwkvKiBEaWQgd2Ugb25seSB3YW50IGV4YWN0IHJlbmFtZXM/ICovCisJaWYgKG1pbmltdW1fc2NvcmUgPT0gTUFYX1NDT1JFKQorCQlnb3RvIGNsZWFudXA7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBob3cgbWFueSByZW5hbWVzIGFyZSBsZWZ0IChidXQgYWxsIHRoZSBzb3VyY2UKKwkgKiBmaWxlcyBzdGlsbCByZW1haW4gYXMgb3B0aW9ucyBmb3IgcmVuYW1lL2NvcGllcyEpCisJICovCisJbnVtX2NyZWF0ZSA9IChyZW5hbWVfZHN0X25yIC0gcmVuYW1lX2NvdW50KTsKKworCS8qIEFsbCBkb25lPyAqLworCWlmICghbnVtX2NyZWF0ZSkKKwkJZ290byBjbGVhbnVwOworCisJc3dpdGNoICh0b29fbWFueV9yZW5hbWVfY2FuZGlkYXRlcyhudW1fY3JlYXRlLCBvcHRpb25zKSkgeworCWNhc2UgMToKKwkJZ290byBjbGVhbnVwOworCWNhc2UgMjoKKwkJb3B0aW9ucy0+ZGVncmFkZWRfY2NfdG9fYyA9IDE7CisJCXNraXBfdW5tb2RpZmllZCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChvcHRpb25zLT5zaG93X3JlbmFtZV9wcm9ncmVzcykgeworCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoCisJCQkJXygiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iKSwKKwkJCQkodWludDY0X3QpcmVuYW1lX2RzdF9uciAqICh1aW50NjRfdClyZW5hbWVfc3JjX25yKTsKKwl9CisKKwlteCA9IHhjYWxsb2Moc3RfbXVsdChOVU1fQ0FORElEQVRFX1BFUl9EU1QsIG51bV9jcmVhdGUpLCBzaXplb2YoKm14KSk7CisJZm9yIChkc3RfY250ID0gaSA9IDA7IGkgPCByZW5hbWVfZHN0X25yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3byA9IHJlbmFtZV9kc3RbaV0udHdvOworCQlzdHJ1Y3QgZGlmZl9zY29yZSAqbTsKKworCQlpZiAocmVuYW1lX2RzdFtpXS5wYWlyKQorCQkJY29udGludWU7IC8qIGRlYWx0IHdpdGggZXhhY3QgbWF0Y2ggYWxyZWFkeS4gKi8KKworCQltID0gJm14W2RzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1RdOworCQlmb3IgKGogPSAwOyBqIDwgTlVNX0NBTkRJREFURV9QRVJfRFNUOyBqKyspCisJCQltW2pdLmRzdCA9IC0xOworCisJCWZvciAoaiA9IDA7IGogPCByZW5hbWVfc3JjX25yOyBqKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSByZW5hbWVfc3JjW2pdLnAtPm9uZTsKKwkJCXN0cnVjdCBkaWZmX3Njb3JlIHRoaXNfc3JjOworCisJCQlpZiAoc2tpcF91bm1vZGlmaWVkICYmCisJCQkgICAgZGlmZl91bm1vZGlmaWVkX3BhaXIocmVuYW1lX3NyY1tqXS5wKSkKKwkJCQljb250aW51ZTsKKworCQkJdGhpc19zcmMuc2NvcmUgPSBlc3RpbWF0ZV9zaW1pbGFyaXR5KG9wdGlvbnMtPnJlcG8sCisJCQkJCQkJICAgICBvbmUsIHR3bywKKwkJCQkJCQkgICAgIG1pbmltdW1fc2NvcmUpOworCQkJdGhpc19zcmMubmFtZV9zY29yZSA9IGJhc2VuYW1lX3NhbWUob25lLCB0d28pOworCQkJdGhpc19zcmMuZHN0ID0gaTsKKwkJCXRoaXNfc3JjLnNyYyA9IGo7CisJCQlyZWNvcmRfaWZfYmV0dGVyKG0sICZ0aGlzX3NyYyk7CisJCQkvKgorCQkJICogT25jZSB3ZSBydW4gZXN0aW1hdGVfc2ltaWxhcml0eSwKKwkJCSAqIFdlIGRvIG5vdCBuZWVkIHRoZSB0ZXh0IGFueW1vcmUuCisJCQkgKi8KKwkJCWRpZmZfZnJlZV9maWxlc3BlY19ibG9iKG9uZSk7CisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYih0d28pOworCQl9CisJCWRzdF9jbnQrKzsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKHVpbnQ2NF90KShpKzEpKih1aW50NjRfdClyZW5hbWVfc3JjX25yKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJLyogY29zdCBtYXRyaXggc29ydGVkIGJ5IG1vc3QgdG8gbGVhc3Qgc2ltaWxhciBwYWlyICovCisJU1RBQkxFX1FTT1JUKG14LCBkc3RfY250ICogTlVNX0NBTkRJREFURV9QRVJfRFNULCBzY29yZV9jb21wYXJlKTsKKworCXJlbmFtZV9jb3VudCArPSBmaW5kX3JlbmFtZXMobXgsIGRzdF9jbnQsIG1pbmltdW1fc2NvcmUsIDApOworCWlmIChkZXRlY3RfcmVuYW1lID09IERJRkZfREVURUNUX0NPUFkpCisJCXJlbmFtZV9jb3VudCArPSBmaW5kX3JlbmFtZXMobXgsIGRzdF9jbnQsIG1pbmltdW1fc2NvcmUsIDEpOworCWZyZWUobXgpOworCisgY2xlYW51cDoKKwkvKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGZvdW5kIHNvbWUgcmVuYW1lcyBhbmQgY29waWVzIGFuZCB0aGV5CisJICogYXJlIHJlY29yZGVkIGluIHJlbmFtZV9kc3QuICBUaGUgb3JpZ2luYWwgbGlzdCBpcyBzdGlsbCBpbiAqcS4KKwkgKi8KKwlESUZGX1FVRVVFX0NMRUFSKCZvdXRxKTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcl90b19mcmVlID0gTlVMTDsKKworCQlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKSB7CisJCQlkaWZmX3EoJm91dHEsIHApOworCQl9CisJCWVsc2UgaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJLyoKKwkJCSAqIENyZWF0aW9uCisJCQkgKgorCQkJICogV2Ugd291bGQgb3V0cHV0IHRoaXMgY3JlYXRlIHJlY29yZCBpZiBpdCBoYXMKKwkJCSAqIG5vdCBiZWVuIHR1cm5lZCBpbnRvIGEgcmVuYW1lL2NvcHkgYWxyZWFkeS4KKwkJCSAqLworCQkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gbG9jYXRlX3JlbmFtZV9kc3QocC0+dHdvKTsKKwkJCWlmIChkc3QgJiYgZHN0LT5wYWlyKSB7CisJCQkJZGlmZl9xKCZvdXRxLCBkc3QtPnBhaXIpOworCQkJCXBhaXJfdG9fZnJlZSA9IHA7CisJCQl9CisJCQllbHNlCisJCQkJLyogbm8gbWF0Y2hpbmcgcmVuYW1lL2NvcHkgc291cmNlLCBzbworCQkJCSAqIHJlY29yZCB0aGlzIGFzIGEgY3JlYXRpb24uCisJCQkJICovCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJfQorCQllbHNlIGlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiAhRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCS8qCisJCQkgKiBEZWxldGlvbgorCQkJICoKKwkJCSAqIFdlIHdvdWxkIG91dHB1dCB0aGlzIGRlbGV0ZSByZWNvcmQgaWY6CisJCQkgKgorCQkJICogKDEpIHRoaXMgaXMgYSBicm9rZW4gZGVsZXRlIGFuZCB0aGUgY291bnRlcnBhcnQKKwkJCSAqICAgICBicm9rZW4gY3JlYXRlIHJlbWFpbnMgaW4gdGhlIG91dHB1dDsgb3IKKwkJCSAqICgyKSB0aGlzIGlzIG5vdCBhIGJyb2tlbiBkZWxldGUsIGFuZCByZW5hbWVfZHN0CisJCQkgKiAgICAgZG9lcyBub3QgaGF2ZSBhIHJlbmFtZS9jb3B5IHRvIG1vdmUgcC0+b25lLT5wYXRoCisJCQkgKiAgICAgb3V0IG9mIGV4aXN0ZW5jZS4KKwkJCSAqCisJCQkgKiBPdGhlcndpc2UsIHRoZSBjb3VudGVycGFydCBicm9rZW4gY3JlYXRlCisJCQkgKiBoYXMgYmVlbiB0dXJuZWQgaW50byBhIHJlbmFtZS1lZGl0OyBvcgorCQkJICogZGVsZXRlIGRpZCBub3QgaGF2ZSBhIG1hdGNoaW5nIGNyZWF0ZSB0bworCQkJICogYmVnaW4gd2l0aC4KKwkJCSAqLworCQkJaWYgKERJRkZfUEFJUl9CUk9LRU4ocCkpIHsKKwkJCQkvKiBicm9rZW4gZGVsZXRlICovCisJCQkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gbG9jYXRlX3JlbmFtZV9kc3QocC0+b25lKTsKKwkJCQlpZiAoZHN0ICYmIGRzdC0+cGFpcikKKwkJCQkJLyogY291bnRlcnBhcnQgaXMgbm93IHJlbmFtZS9jb3B5ICovCisJCQkJCXBhaXJfdG9fZnJlZSA9IHA7CisJCQl9CisJCQllbHNlIHsKKwkJCQlpZiAocC0+b25lLT5yZW5hbWVfdXNlZCkKKwkJCQkJLyogdGhpcyBwYXRoIHJlbWFpbnMgKi8KKwkJCQkJcGFpcl90b19mcmVlID0gcDsKKwkJCX0KKworCQkJaWYgKHBhaXJfdG9fZnJlZSkKKwkJCQk7CisJCQllbHNlCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJfQorCQllbHNlIGlmICghZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCQkvKiBhbGwgdGhlIHVzdWFsIG9uZXMgbmVlZCB0byBiZSBrZXB0ICovCisJCQlkaWZmX3EoJm91dHEsIHApOworCQllbHNlCisJCQkvKiBubyBuZWVkIHRvIGtlZXAgdW5tb2RpZmllZCBwYWlycyAqLworCQkJcGFpcl90b19mcmVlID0gcDsKKworCQlpZiAocGFpcl90b19mcmVlKQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHBhaXJfdG9fZnJlZSk7CisJfQorCWRpZmZfZGVidWdfcXVldWUoImRvbmUgY29weWluZyBvcmlnaW5hbCIsICZvdXRxKTsKKworCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKKwlkaWZmX2RlYnVnX3F1ZXVlKCJkb25lIGNvbGxhcHNpbmciLCBxKTsKKworCWZvciAoaSA9IDA7IGkgPCByZW5hbWVfZHN0X25yOyBpKyspCisJCWZyZWVfZmlsZXNwZWMocmVuYW1lX2RzdFtpXS50d28pOworCisJRlJFRV9BTkRfTlVMTChyZW5hbWVfZHN0KTsKKwlyZW5hbWVfZHN0X25yID0gcmVuYW1lX2RzdF9hbGxvYyA9IDA7CisJRlJFRV9BTkRfTlVMTChyZW5hbWVfc3JjKTsKKwlyZW5hbWVfc3JjX25yID0gcmVuYW1lX3NyY19hbGxvYyA9IDA7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUuaCBiL2RpZmZjb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwNzM0NwotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2lmbmRlZiBESUZGQ09SRV9ICisjZGVmaW5lIERJRkZDT1JFX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0cnVjdCBkaWZmX29wdGlvbnM7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXI7CisKKy8qIFRoaXMgaGVhZGVyIGZpbGUgaXMgaW50ZXJuYWwgYmV0d2VlbiBkaWZmLmMgYW5kIGl0cyBkaWZmIHRyYW5zZm9ybWVycworICogKGUuZy4gZGlmZmNvcmUtcmVuYW1lLCBkaWZmY29yZS1waWNrYXhlKS4gIE5ldmVyIGluY2x1ZGUgdGhpcyBoZWFkZXIKKyAqIGluIGFueXRoaW5nIGVsc2UuCisgKi8KKworLyogV2UgaW50ZXJuYWxseSB1c2UgdW5zaWduZWQgc2hvcnQgYXMgdGhlIHNjb3JlIHZhbHVlLAorICogYW5kIHJlbHkgb24gYW4gaW50IGNhcGFibGUgdG8gaG9sZCAzMi1iaXRzLiAgLUIgY2FuIHRha2UKKyAqIC1CbWVyZ2Vfc2NvcmUvYnJlYWtfc2NvcmUgZm9ybWF0IGFuZCB0aGUgdHdvIHNjb3JlcyBhcmUKKyAqIHBhc3NlZCBhcm91bmQgaW4gb25lIGludCAoaGlnaCAxNi1iaXQgZm9yIG1lcmdlIGFuZCBsb3cgMTYtYml0CisgKiBmb3IgYnJlYWspLgorICovCisjZGVmaW5lIE1BWF9TQ09SRSA2MDAwMC4wCisjZGVmaW5lIERFRkFVTFRfUkVOQU1FX1NDT1JFIDMwMDAwIC8qIHJlbmFtZS9jb3B5IHNpbWlsYXJpdHkgbWluaW11bSAoNTAlKSAqLworI2RlZmluZSBERUZBVUxUX0JSRUFLX1NDT1JFICAzMDAwMCAvKiBtaW5pbXVtIGZvciBicmVhayB0byBoYXBwZW4gKDUwJSkgKi8KKyNkZWZpbmUgREVGQVVMVF9NRVJHRV9TQ09SRSAgMzYwMDAgLyogbWF4aW11bSBmb3IgYnJlYWstbWVyZ2UgdG8gaGFwcGVuICg2MCUpICovCisKKyNkZWZpbmUgTUlOSU1VTV9CUkVBS19TSVpFICAgICA0MDAgLyogZG8gbm90IGJyZWFrIGEgZmlsZSBzbWFsbGVyIHRoYW4gdGhpcyAqLworCisvKioKKyAqIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgZmlsZSAoYmxvYikuICBJdCByZWNvcmRzIHRoZSBibG9iCisgKiBvYmplY3QgbmFtZSAoaWYga25vd24gLS0gZm9yIGEgd29yayB0cmVlIGZpbGUgaXQgdHlwaWNhbGx5IGlzIGEgTlVMIFNIQS0xKSwKKyAqIGZpbGVtb2RlIGFuZCBwYXRobmFtZS4gIFRoaXMgaXMgd2hhdCB0aGUgYGRpZmZfYWRkcmVtb3ZlKClgLCBgZGlmZl9jaGFuZ2UoKWAKKyAqIGFuZCBgZGlmZl91bm1lcmdlKClgIHN5bnRoZXNpemUgYW5kIGZlZWQgYGRpZmZfcXVldWUoKWAgZnVuY3Rpb24gd2l0aC4KKyAqLworc3RydWN0IGRpZmZfZmlsZXNwZWMgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgKnBhdGg7CisJdm9pZCAqZGF0YTsKKwl2b2lkICpjbnRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGNvdW50OyAgICAgICAgICAgICAgIC8qIFJlZmVyZW5jZSBjb3VudCAqLworCWludCByZW5hbWVfdXNlZDsgICAgICAgICAvKiBDb3VudCBvZiByZW5hbWUgdXNlcnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RlOwkgLyogZmlsZSBtb2RlICovCisJdW5zaWduZWQgb2lkX3ZhbGlkIDogMTsgIC8qIGlmIHRydWUsIHVzZSBvaWQgYW5kIHRydXN0IG1vZGU7CisJCQkJICAqIGlmIGZhbHNlLCB1c2UgdGhlIG5hbWUgYW5kIHJlYWQgZnJvbQorCQkJCSAgKiB0aGUgZmlsZXN5c3RlbS4KKwkJCQkgICovCisjZGVmaW5lIERJRkZfRklMRV9WQUxJRChzcGVjKSAoKChzcGVjKS0+bW9kZSkgIT0gMCkKKwl1bnNpZ25lZCBzaG91bGRfZnJlZSA6IDE7IC8qIGRhdGEgc2hvdWxkIGJlIGZyZWUoKSdlZCAqLworCXVuc2lnbmVkIHNob3VsZF9tdW5tYXAgOiAxOyAvKiBkYXRhIHNob3VsZCBiZSBtdW5tYXAoKSdlZCAqLworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA6IDI7ICAvKiBGb3Igc3VibW9kdWxlczogaXRzIHdvcmsgdHJlZSBpcyBkaXJ0eSAqLworI2RlZmluZSBESVJUWV9TVUJNT0RVTEVfVU5UUkFDS0VEIDEKKyNkZWZpbmUgRElSVFlfU1VCTU9EVUxFX01PRElGSUVEICAyCisJdW5zaWduZWQgaXNfc3RkaW4gOiAxOworCXVuc2lnbmVkIGhhc19tb3JlX2VudHJpZXMgOiAxOyAvKiBvbmx5IGFwcGVhciBpbiBjb21iaW5lZCBkaWZmICovCisJLyogZGF0YSBzaG91bGQgYmUgY29uc2lkZXJlZCAiYmluYXJ5IjsgLTEgbWVhbnMgImRvbid0IGtub3cgeWV0IiAqLworCXNpZ25lZCBpbnQgaXNfYmluYXJ5IDogMjsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXI7Cit9OworCitzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYWxsb2NfZmlsZXNwZWMoY29uc3QgY2hhciAqKTsKK3ZvaWQgZnJlZV9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKK3ZvaWQgZmlsbF9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosCisJCSAgIGludCwgdW5zaWduZWQgc2hvcnQpOworCisjZGVmaW5lIENIRUNLX1NJWkVfT05MWSAxCisjZGVmaW5lIENIRUNLX0JJTkFSWSAgICAyCitpbnQgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCBkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKK3ZvaWQgZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2Ioc3RydWN0IGRpZmZfZmlsZXNwZWMgKik7CitpbnQgZGlmZl9maWxlc3BlY19pc19iaW5hcnkoc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IGRpZmZfZmlsZXNwZWMgKik7CisKKy8qKgorICogVGhpcyByZWNvcmRzIGEgcGFpciBvZiBgc3RydWN0IGRpZmZfZmlsZXNwZWNgOyB0aGUgZmlsZXNwZWMgZm9yIGEgZmlsZSBpbgorICogdGhlICJvbGQiIHNldCAoaS5lLiBwcmVpbWFnZSkgaXMgY2FsbGVkIGBvbmVgLCBhbmQgdGhlIGZpbGVzcGVjIGZvciBhIGZpbGUKKyAqIGluIHRoZSAibmV3IiBzZXQgKGkuZS4gcG9zdGltYWdlKSBpcyBjYWxsZWQgYHR3b2AuICBBIGNoYW5nZSB0aGF0IHJlcHJlc2VudHMKKyAqIGZpbGUgY3JlYXRpb24gaGFzIE5VTEwgaW4gYG9uZWAsIGFuZCBmaWxlIGRlbGV0aW9uIGhhcyBOVUxMIGluIGB0d29gLgorICoKKyAqIEEgYGZpbGVwYWlyYCBzdGFydHMgcG9pbnRpbmcgYXQgYG9uZWAgYW5kIGB0d29gIHRoYXQgYXJlIGZyb20gdGhlIHNhbWUKKyAqIGZpbGVuYW1lLCBidXQgYGRpZmZjb3JlX3N0ZCgpYCBjYW4gYnJlYWsgcGFpcnMgYW5kIG1hdGNoIGNvbXBvbmVudCBmaWxlc3BlY3MKKyAqIHdpdGggb3RoZXIgZmlsZXNwZWNzIGZyb20gYSBkaWZmZXJlbnQgZmlsZXBhaXIgdG8gZm9ybSBuZXcgZmlsZXBhaXIuIFRoaXMgaXMKKyAqIGNhbGxlZCAncmVuYW1lIGRldGVjdGlvbicuCisgKi8KK3N0cnVjdCBkaWZmX2ZpbGVwYWlyIHsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d287CisJdW5zaWduZWQgc2hvcnQgaW50IHNjb3JlOworCWNoYXIgc3RhdHVzOyAvKiBNIEMgUiBBIEQgVSBldGMuIChzZWUgRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQgb3IgRElGRl9TVEFUVVNfKiBpbiBkaWZmLmgpICovCisJdW5zaWduZWQgYnJva2VuX3BhaXIgOiAxOworCXVuc2lnbmVkIHJlbmFtZWRfcGFpciA6IDE7CisJdW5zaWduZWQgaXNfdW5tZXJnZWQgOiAxOworCXVuc2lnbmVkIGRvbmVfc2tpcF9zdGF0X3VubWF0Y2ggOiAxOworCXVuc2lnbmVkIHNraXBfc3RhdF91bm1hdGNoX3Jlc3VsdCA6IDE7Cit9OworCisjZGVmaW5lIERJRkZfUEFJUl9VTk1FUkdFRChwKSAoKHApLT5pc191bm1lcmdlZCkKKworI2RlZmluZSBESUZGX1BBSVJfUkVOQU1FKHApICgocCktPnJlbmFtZWRfcGFpcikKKworI2RlZmluZSBESUZGX1BBSVJfQlJPS0VOKHApIFwKKwkoICghRElGRl9GSUxFX1ZBTElEKChwKS0+b25lKSAhPSAhRElGRl9GSUxFX1ZBTElEKChwKS0+dHdvKSkgJiYgXAorCSAgKChwKS0+YnJva2VuX3BhaXIgIT0gMCkgKQorCisjZGVmaW5lIERJRkZfUEFJUl9UWVBFX0NIQU5HRUQocCkgXAorCSgoU19JRk1UICYgKHApLT5vbmUtPm1vZGUpICE9IChTX0lGTVQgJiAocCktPnR3by0+bW9kZSkpCisKKyNkZWZpbmUgRElGRl9QQUlSX01PREVfQ0hBTkdFRChwKSAoKHApLT5vbmUtPm1vZGUgIT0gKHApLT50d28tPm1vZGUpCisKK3ZvaWQgZGlmZl9mcmVlX2ZpbGVwYWlyKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICopOworCitpbnQgZGlmZl91bm1vZGlmaWVkX3BhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKik7CisKKy8qKgorICogVGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgZmlsZXBhaXJzLiAgTm90YWJsZSBtZW1iZXJzIGFyZToKKyAqCisgKiAtIGBxdWV1ZWA6CisgKiBBbiBhcnJheSBvZiBwb2ludGVycyB0byBgc3RydWN0IGRpZmZfZmlsZXBhaXJgLiBUaGlzIGR5bmFtaWNhbGx5IGdyb3dzIGFzCisgKiB5b3UgYWRkIGZpbGVwYWlyczsKKyAqCisgKiAtIGBhbGxvY2A6CisgKiBUaGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGBxdWV1ZWAgYXJyYXk7CisgKgorICogLSBgbnJgOgorICogVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYHF1ZXVlYCBhcnJheS4KKyAqLworc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IHsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKnF1ZXVlOworCWludCBhbGxvYzsKKwlpbnQgbnI7Cit9OworCisjZGVmaW5lIERJRkZfUVVFVUVfQ0xFQVIocSkgXAorCWRvIHsgXAorCQkocSktPnF1ZXVlID0gTlVMTDsgXAorCQkocSktPm5yID0gKHEpLT5hbGxvYyA9IDA7IFwKKwl9IHdoaWxlICgwKQorCitleHRlcm4gc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IGRpZmZfcXVldWVkX2RpZmY7CitzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl9xdWV1ZShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKiwKKwkJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKiwKKwkJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKik7Cit2b2lkIGRpZmZfcShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKiwgc3RydWN0IGRpZmZfZmlsZXBhaXIgKik7CisKK3ZvaWQgZGlmZmNvcmVfYnJlYWsoc3RydWN0IHJlcG9zaXRvcnkgKiwgaW50KTsKK3ZvaWQgZGlmZmNvcmVfcmVuYW1lKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7Cit2b2lkIGRpZmZjb3JlX21lcmdlX2Jyb2tlbih2b2lkKTsKK3ZvaWQgZGlmZmNvcmVfcGlja2F4ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICopOwordm9pZCBkaWZmY29yZV9vcmRlcihjb25zdCBjaGFyICpvcmRlcmZpbGUpOworCisvKiBsb3ctbGV2ZWwgaW50ZXJmYWNlIHRvIGRpZmZjb3JlX29yZGVyICovCitzdHJ1Y3Qgb2JqX29yZGVyIHsKKwl2b2lkICpvYmo7CS8qIHNldHVwIGJ5IGNhbGxlciAqLworCisJLyogc2V0dXAvdXNlZCBieSBvcmRlcl9vYmplY3RzKCkgKi8KKwlpbnQgb3JpZ19vcmRlcjsKKwlpbnQgb3JkZXI7Cit9OworCit0eXBlZGVmIGNvbnN0IGNoYXIgKigqb2JqX3BhdGhfZm5fdCkodm9pZCAqb2JqKTsKKwordm9pZCBvcmRlcl9vYmplY3RzKGNvbnN0IGNoYXIgKm9yZGVyZmlsZSwgb2JqX3BhdGhfZm5fdCBvYmpfcGF0aCwKKwkJICAgc3RydWN0IG9ial9vcmRlciAqb2JqcywgaW50IG5yKTsKKworI2RlZmluZSBESUZGX0RFQlVHIDAKKyNpZiBESUZGX0RFQlVHCit2b2lkIGRpZmZfZGVidWdfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKiwgaW50LCBjb25zdCBjaGFyICopOwordm9pZCBkaWZmX2RlYnVnX2ZpbGVwYWlyKGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICosIGludCk7Cit2b2lkIGRpZmZfZGVidWdfcXVldWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKik7CisjZWxzZQorI2RlZmluZSBkaWZmX2RlYnVnX2ZpbGVzcGVjKGEsYixjKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGlmZl9kZWJ1Z19maWxlcGFpcihhLGIpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2RlZmluZSBkaWZmX2RlYnVnX3F1ZXVlKGEsYikgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZW5kaWYKKworaW50IGRpZmZjb3JlX2NvdW50X2NoYW5nZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLAorCQkJICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRzdCwKKwkJCSAgIHZvaWQgKipzcmNfY291bnRfcCwKKwkJCSAgIHZvaWQgKipkc3RfY291bnRfcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKnNyY19jb3BpZWQsCisJCQkgICB1bnNpZ25lZCBsb25nICpsaXRlcmFsX2FkZGVkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kaXItaXRlcmF0b3IuYyBiL2Rpci1pdGVyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxN2U5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXItaXRlcmF0b3IuYwpAQCAtMCwwICsxLDIzNSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJkaXItaXRlcmF0b3IuaCIKKworc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCB7CisJRElSICpkaXI7CisKKwkvKgorCSAqIFRoZSBsZW5ndGggb2YgdGhlIGRpcmVjdG9yeSBwYXJ0IG9mIHBhdGggYXQgdGhpcyBsZXZlbAorCSAqIChpbmNsdWRpbmcgYSB0cmFpbGluZyAnLycpOgorCSAqLworCXNpemVfdCBwcmVmaXhfbGVuOworfTsKKworLyoKKyAqIFRoZSBmdWxsIGRhdGEgc3RydWN0dXJlIHVzZWQgdG8gbWFuYWdlIHRoZSBpbnRlcm5hbCBkaXJlY3RvcnkKKyAqIGl0ZXJhdGlvbiBzdGF0ZS4gSXQgaW5jbHVkZXMgbWVtYmVycyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUKKyAqIHB1YmxpYyBpbnRlcmZhY2UuCisgKi8KK3N0cnVjdCBkaXJfaXRlcmF0b3JfaW50IHsKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yIGJhc2U7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgbGV2ZWxzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2suIEFmdGVyIHRoZSBmaXJzdAorCSAqIGNhbGwgdG8gZGlyX2l0ZXJhdG9yX2JlZ2luKCksIGlmIGl0IHN1Y2NlZWRzIHRvIG9wZW4gdGhlCisJICogZmlyc3QgbGV2ZWwncyBkaXIsIHRoaXMgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3QgMS4gVGhlbiwKKwkgKiB3aGVuIGl0IGNvbWVzIHRvIHplcm8gdGhlIGl0ZXJhdGlvbiBpcyBlbmRlZCBhbmQgdGhpcworCSAqIHN0cnVjdCBpcyBmcmVlZC4KKwkgKi8KKwlzaXplX3QgbGV2ZWxzX25yOworCisJLyogVGhlIG51bWJlciBvZiBsZXZlbHMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIG9uIHRoZSBzdGFjayAqLworCXNpemVfdCBsZXZlbHNfYWxsb2M7CisKKwkvKgorCSAqIEEgc3RhY2sgb2YgbGV2ZWxzLiBsZXZlbHNbMF0gaXMgdGhlIHVwcGVybW9zdCBkaXJlY3RvcnkKKwkgKiB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhpcyBpdGVyYXRpb24uCisJICovCisJc3RydWN0IGRpcl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWxzOworCisJLyogQ29tYmluYXRpb24gb2YgZmxhZ3MgZm9yIHRoaXMgZGlyLWl0ZXJhdG9yICovCisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworLyoKKyAqIFB1c2ggYSBsZXZlbCBpbiB0aGUgaXRlciBzdGFjayBhbmQgaW5pdGlhbGl6ZSBpdCB3aXRoIGluZm9ybWF0aW9uIGZyb20KKyAqIHRoZSBkaXJlY3RvcnkgcG9pbnRlZCBieSBpdGVyLT5iYXNlLT5wYXRoLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhpcworICogc3RyYnVmIHBvaW50cyB0byBhIHZhbGlkIGRpcmVjdG9yeSBwYXRoLiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMQorICogb3RoZXJ3aXNlLCBzZXR0aW5nIGVycm5vIGFjY29yZGluZ2x5IGFuZCBsZWF2aW5nIHRoZSBzdGFjayB1bmNoYW5nZWQuCisgKi8KK3N0YXRpYyBpbnQgcHVzaF9sZXZlbChzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqaXRlcikKK3sKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2xldmVsICpsZXZlbDsKKworCUFMTE9DX0dST1coaXRlci0+bGV2ZWxzLCBpdGVyLT5sZXZlbHNfbnIgKyAxLCBpdGVyLT5sZXZlbHNfYWxsb2MpOworCWxldmVsID0gJml0ZXItPmxldmVsc1tpdGVyLT5sZXZlbHNfbnIrK107CisKKwlpZiAoIWlzX2Rpcl9zZXAoaXRlci0+YmFzZS5wYXRoLmJ1ZltpdGVyLT5iYXNlLnBhdGgubGVuIC0gMV0pKQorCQlzdHJidWZfYWRkY2goJml0ZXItPmJhc2UucGF0aCwgJy8nKTsKKwlsZXZlbC0+cHJlZml4X2xlbiA9IGl0ZXItPmJhc2UucGF0aC5sZW47CisKKwlsZXZlbC0+ZGlyID0gb3BlbmRpcihpdGVyLT5iYXNlLnBhdGguYnVmKTsKKwlpZiAoIWxldmVsLT5kaXIpIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCWlmIChlcnJubyAhPSBFTk9FTlQpIHsKKwkJCXdhcm5pbmdfZXJybm8oImVycm9yIG9wZW5pbmcgZGlyZWN0b3J5ICclcyciLAorCQkJCSAgICAgIGl0ZXItPmJhc2UucGF0aC5idWYpOworCQl9CisJCWl0ZXItPmxldmVsc19uci0tOworCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQb3AgdGhlIHRvcCBsZXZlbCBvbiB0aGUgaXRlciBzdGFjaywgcmVsZWFzaW5nIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZAorICogd2l0aCBpdC4gUmV0dXJuIHRoZSBuZXcgdmFsdWUgb2YgaXRlci0+bGV2ZWxzX25yLgorICovCitzdGF0aWMgaW50IHBvcF9sZXZlbChzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqaXRlcikKK3sKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2xldmVsICpsZXZlbCA9CisJCSZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yIC0gMV07CisKKwlpZiAobGV2ZWwtPmRpciAmJiBjbG9zZWRpcihsZXZlbC0+ZGlyKSkKKwkJd2FybmluZ19lcnJubygiZXJyb3IgY2xvc2luZyBkaXJlY3RvcnkgJyVzJyIsCisJCQkgICAgICBpdGVyLT5iYXNlLnBhdGguYnVmKTsKKwlsZXZlbC0+ZGlyID0gTlVMTDsKKworCXJldHVybiAtLWl0ZXItPmxldmVsc19ucjsKK30KKworLyoKKyAqIFBvcHVsYXRlIGl0ZXItPmJhc2Ugd2l0aCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgorICogZW50cnksIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBkaXJlbnQgZGUuIFJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xCisgKiBvdGhlcndpc2UsIHNldHRpbmcgZXJybm8gYWNjb3JkaW5nbHkuCisgKi8KK3N0YXRpYyBpbnQgcHJlcGFyZV9uZXh0X2VudHJ5X2RhdGEoc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKml0ZXIsCisJCQkJICAgc3RydWN0IGRpcmVudCAqZGUpCit7CisJaW50IGVyciwgc2F2ZWRfZXJybm87CisKKwlzdHJidWZfYWRkc3RyKCZpdGVyLT5iYXNlLnBhdGgsIGRlLT5kX25hbWUpOworCS8qCisJICogV2UgaGF2ZSB0byByZXNldCB0aGVzZSBiZWNhdXNlIHRoZSBwYXRoIHN0cmJ1ZiBtaWdodCBoYXZlCisJICogYmVlbiByZWFsbG9jKCllZCBhdCB0aGUgcHJldmlvdXMgc3RyYnVmX2FkZHN0cigpLgorCSAqLworCWl0ZXItPmJhc2UucmVsYXRpdmVfcGF0aCA9IGl0ZXItPmJhc2UucGF0aC5idWYgKworCQkJCSAgIGl0ZXItPmxldmVsc1swXS5wcmVmaXhfbGVuOworCWl0ZXItPmJhc2UuYmFzZW5hbWUgPSBpdGVyLT5iYXNlLnBhdGguYnVmICsKKwkJCSAgICAgIGl0ZXItPmxldmVsc1tpdGVyLT5sZXZlbHNfbnIgLSAxXS5wcmVmaXhfbGVuOworCisJaWYgKGl0ZXItPmZsYWdzICYgRElSX0lURVJBVE9SX0ZPTExPV19TWU1MSU5LUykKKwkJZXJyID0gc3RhdChpdGVyLT5iYXNlLnBhdGguYnVmLCAmaXRlci0+YmFzZS5zdCk7CisJZWxzZQorCQllcnIgPSBsc3RhdChpdGVyLT5iYXNlLnBhdGguYnVmLCAmaXRlci0+YmFzZS5zdCk7CisKKwlzYXZlZF9lcnJubyA9IGVycm5vOworCWlmIChlcnIgJiYgZXJybm8gIT0gRU5PRU5UKQorCQl3YXJuaW5nX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiwgaXRlci0+YmFzZS5wYXRoLmJ1Zik7CisKKwllcnJubyA9IHNhdmVkX2Vycm5vOworCXJldHVybiBlcnI7Cit9CisKK2ludCBkaXJfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXJfaXRlcmF0b3IpCit7CisJc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKml0ZXIgPQorCQkoc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKilkaXJfaXRlcmF0b3I7CisKKwlpZiAoU19JU0RJUihpdGVyLT5iYXNlLnN0LnN0X21vZGUpICYmIHB1c2hfbGV2ZWwoaXRlcikpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBpdGVyLT5mbGFncyAmIERJUl9JVEVSQVRPUl9QRURBTlRJQykKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlpZiAoaXRlci0+bGV2ZWxzX25yID09IDApCisJCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwkvKiBMb29wIHVudGlsIHdlIGZpbmQgYW4gZW50cnkgdGhhdCB3ZSBjYW4gZ2l2ZSBiYWNrIHRvIHRoZSBjYWxsZXIuICovCisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IGRpcmVudCAqZGU7CisJCXN0cnVjdCBkaXJfaXRlcmF0b3JfbGV2ZWwgKmxldmVsID0KKwkJCSZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yIC0gMV07CisKKwkJc3RyYnVmX3NldGxlbigmaXRlci0+YmFzZS5wYXRoLCBsZXZlbC0+cHJlZml4X2xlbik7CisJCWVycm5vID0gMDsKKwkJZGUgPSByZWFkZGlyKGxldmVsLT5kaXIpOworCisJCWlmICghZGUpIHsKKwkJCWlmIChlcnJubykgeworCQkJCXdhcm5pbmdfZXJybm8oImVycm9yIHJlYWRpbmcgZGlyZWN0b3J5ICclcyciLAorCQkJCQkgICAgICBpdGVyLT5iYXNlLnBhdGguYnVmKTsKKwkJCQlpZiAoaXRlci0+ZmxhZ3MgJiBESVJfSVRFUkFUT1JfUEVEQU5USUMpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJfSBlbHNlIGlmIChwb3BfbGV2ZWwoaXRlcikgPT0gMCkgeworCQkJCXJldHVybiBkaXJfaXRlcmF0b3JfYWJvcnQoZGlyX2l0ZXJhdG9yKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZGUtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlpZiAocHJlcGFyZV9uZXh0X2VudHJ5X2RhdGEoaXRlciwgZGUpKSB7CisJCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGl0ZXItPmZsYWdzICYgRElSX0lURVJBVE9SX1BFREFOVElDKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJY29udGludWU7CisJCX0KKworCQlyZXR1cm4gSVRFUl9PSzsKKwl9CisKK2Vycm9yX291dDoKKwlkaXJfaXRlcmF0b3JfYWJvcnQoZGlyX2l0ZXJhdG9yKTsKKwlyZXR1cm4gSVRFUl9FUlJPUjsKK30KKworaW50IGRpcl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgZGlyX2l0ZXJhdG9yICpkaXJfaXRlcmF0b3IpCit7CisJc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKml0ZXIgPSAoc3RydWN0IGRpcl9pdGVyYXRvcl9pbnQgKilkaXJfaXRlcmF0b3I7CisKKwlmb3IgKDsgaXRlci0+bGV2ZWxzX25yOyBpdGVyLT5sZXZlbHNfbnItLSkgeworCQlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2xldmVsICpsZXZlbCA9CisJCQkmaXRlci0+bGV2ZWxzW2l0ZXItPmxldmVsc19uciAtIDFdOworCisJCWlmIChsZXZlbC0+ZGlyICYmIGNsb3NlZGlyKGxldmVsLT5kaXIpKSB7CisJCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJCXN0cmJ1Zl9zZXRsZW4oJml0ZXItPmJhc2UucGF0aCwgbGV2ZWwtPnByZWZpeF9sZW4pOworCQkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJCXdhcm5pbmdfZXJybm8oImVycm9yIGNsb3NpbmcgZGlyZWN0b3J5ICclcyciLAorCQkJCSAgICAgIGl0ZXItPmJhc2UucGF0aC5idWYpOworCQl9CisJfQorCisJZnJlZShpdGVyLT5sZXZlbHMpOworCXN0cmJ1Zl9yZWxlYXNlKCZpdGVyLT5iYXNlLnBhdGgpOworCWZyZWUoaXRlcik7CisJcmV0dXJuIElURVJfRE9ORTsKK30KKworc3RydWN0IGRpcl9pdGVyYXRvciAqZGlyX2l0ZXJhdG9yX2JlZ2luKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZGlyX2l0ZXJhdG9yX2ludCAqaXRlciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdGVyKSk7CisJc3RydWN0IGRpcl9pdGVyYXRvciAqZGlyX2l0ZXJhdG9yID0gJml0ZXItPmJhc2U7CisJaW50IHNhdmVkX2Vycm5vOworCisJc3RyYnVmX2luaXQoJml0ZXItPmJhc2UucGF0aCwgUEFUSF9NQVgpOworCXN0cmJ1Zl9hZGRzdHIoJml0ZXItPmJhc2UucGF0aCwgcGF0aCk7CisKKwlBTExPQ19HUk9XKGl0ZXItPmxldmVscywgMTAsIGl0ZXItPmxldmVsc19hbGxvYyk7CisJaXRlci0+bGV2ZWxzX25yID0gMDsKKwlpdGVyLT5mbGFncyA9IGZsYWdzOworCisJLyoKKwkgKiBOb3RlOiBzdGF0IGFscmVhZHkgY2hlY2tzIGZvciBOVUxMIG9yIGVtcHR5IHN0cmluZ3MgYW5kCisJICogaW5leGlzdGVudCBwYXRocy4KKwkgKi8KKwlpZiAoc3RhdChpdGVyLT5iYXNlLnBhdGguYnVmLCAmaXRlci0+YmFzZS5zdCkgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCWlmICghU19JU0RJUihpdGVyLT5iYXNlLnN0LnN0X21vZGUpKSB7CisJCXNhdmVkX2Vycm5vID0gRU5PVERJUjsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJcmV0dXJuIGRpcl9pdGVyYXRvcjsKKworZXJyb3Jfb3V0OgorCWRpcl9pdGVyYXRvcl9hYm9ydChkaXJfaXRlcmF0b3IpOworCWVycm5vID0gc2F2ZWRfZXJybm87CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kaXItaXRlcmF0b3IuaCBiL2Rpci1pdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjI5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXItaXRlcmF0b3IuaApAQCAtMCwwICsxLDEyNyBAQAorI2lmbmRlZiBESVJfSVRFUkFUT1JfSAorI2RlZmluZSBESVJfSVRFUkFUT1JfSAorCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKy8qCisgKiBJdGVyYXRlIG92ZXIgYSBkaXJlY3RvcnkgdHJlZS4KKyAqCisgKiBJdGVyYXRlIG92ZXIgYSBkaXJlY3RvcnkgdHJlZSwgcmVjdXJzaXZlbHksIGluY2x1ZGluZyBwYXRocyBvZiBhbGwKKyAqIHR5cGVzIGFuZCBoaWRkZW4gcGF0aHMuIFNraXAgIi4iIGFuZCAiLi4iIGVudHJpZXMgYW5kIGRvbid0IGZvbGxvdworICogc3ltbGlua3MgZXhjZXB0IGZvciB0aGUgb3JpZ2luYWwgcGF0aC4gTm90ZSB0aGF0IHRoZSBvcmlnaW5hbCBwYXRoCisgKiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGl0ZXJhdGlvbi4KKyAqCisgKiBFdmVyeSB0aW1lIGRpcl9pdGVyYXRvcl9hZHZhbmNlKCkgaXMgY2FsbGVkLCB1cGRhdGUgdGhlIG1lbWJlcnMgb2YKKyAqIHRoZSBkaXJfaXRlcmF0b3Igc3RydWN0dXJlIHRvIHJlZmxlY3QgdGhlIG5leHQgcGF0aCBpbiB0aGUKKyAqIGl0ZXJhdGlvbi4gVGhlIG9yZGVyIHRoYXQgcGF0aHMgYXJlIGl0ZXJhdGVkIG92ZXIgd2l0aGluIGEKKyAqIGRpcmVjdG9yeSBpcyB1bmRlZmluZWQsIGRpcmVjdG9yeSBwYXRocyBhcmUgYWx3YXlzIGdpdmVuIGJlZm9yZQorICogdGhlaXIgY29udGVudHMuCisgKgorICogQSB0eXBpY2FsIGl0ZXJhdGlvbiBsb29rcyBsaWtlIHRoaXM6CisgKgorICogICAgIGludCBvazsKKyAqICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSBESVJfSVRFUkFUT1JfUEVEQU5USUM7CisgKiAgICAgc3RydWN0IGRpcl9pdGVyYXRvciAqaXRlciA9IGRpcl9pdGVyYXRvcl9iZWdpbihwYXRoLCBmbGFncyk7CisgKgorICogICAgIGlmICghaXRlcikKKyAqICAgICAgICAgICAgIGdvdG8gZXJyb3JfaGFuZGxlcjsKKyAqCisgKiAgICAgd2hpbGUgKChvayA9IGRpcl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXIpKSA9PSBJVEVSX09LKSB7CisgKiAgICAgICAgICAgICBpZiAod2FudF90b19zdG9wX2l0ZXJhdGlvbigpKSB7CisgKiAgICAgICAgICAgICAgICAgICAgIG9rID0gZGlyX2l0ZXJhdG9yX2Fib3J0KGl0ZXIpOworICogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAqICAgICAgICAgICAgIH0KKyAqCisgKiAgICAgICAgICAgICAvLyBBY2Nlc3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGF0aDoKKyAqICAgICAgICAgICAgIGlmIChTX0lTRElSKGl0ZXItPnN0LnN0X21vZGUpKQorICogICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzIGlzIGEgZGlyZWN0b3J5XG4iLCBpdGVyLT5yZWxhdGl2ZV9wYXRoKTsKKyAqICAgICB9CisgKgorICogICAgIGlmIChvayAhPSBJVEVSX0RPTkUpCisgKiAgICAgICAgICAgICBoYW5kbGVfZXJyb3IoKTsKKyAqCisgKiBDYWxsZXJzIGFyZSBhbGxvd2VkIHRvIG1vZGlmeSBpdGVyLT5wYXRoIHdoaWxlIHRoZXkgYXJlIHdvcmtpbmcsCisgKiBidXQgdGhleSBtdXN0IHJlc3RvcmUgaXQgdG8gaXRzIG9yaWdpbmFsIGNvbnRlbnRzIGJlZm9yZSBjYWxsaW5nCisgKiBkaXJfaXRlcmF0b3JfYWR2YW5jZSgpIGFnYWluLgorICovCisKKy8qCisgKiBGbGFncyBmb3IgZGlyX2l0ZXJhdG9yX2JlZ2luOgorICoKKyAqIC0gRElSX0lURVJBVE9SX1BFREFOVElDOiBvdmVycmlkZSBkaXItaXRlcmF0b3IncyBkZWZhdWx0IGJlaGF2aW9yCisgKiAgIGluIGNhc2Ugb2YgYW4gZXJyb3IgYXQgZGlyX2l0ZXJhdG9yX2FkdmFuY2UoKSwgd2hpY2ggaXMgdG8ga2VlcAorICogICBsb29raW5nIGZvciBhIG5leHQgdmFsaWQgZW50cnkuIFdpdGggdGhpcyBmbGFnLCByZXNvdXJjZXMgYXJlIGZyZWVkCisgKiAgIGFuZCBJVEVSX0VSUk9SIGlzIHJldHVybmVkIGltbWVkaWF0ZWx5LiBJbiBib3RoIGNhc2VzLCBhIG1lYW5pbmdmdWwKKyAqICAgd2FybmluZyBpcyBlbWl0dGVkLiBOb3RlOiBFTk9FTlQgZXJyb3JzIGFyZSBhbHdheXMgaWdub3JlZCBzbyB0aGF0CisgKiAgIHRoZSBBUEkgdXNlcnMgbWF5IHJlbW92ZSBmaWxlcyBkdXJpbmcgaXRlcmF0aW9uLgorICoKKyAqIC0gRElSX0lURVJBVE9SX0ZPTExPV19TWU1MSU5LUzogbWFrZSBkaXItaXRlcmF0b3IgZm9sbG93IHN5bWxpbmtzLgorICogICBpLmUuLCBsaW5rZWQgZGlyZWN0b3JpZXMnIGNvbnRlbnRzIHdpbGwgYmUgaXRlcmF0ZWQgb3ZlciBhbmQKKyAqICAgaXRlci0+YmFzZS5zdCB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gb24gdGhlIHJlZmVycmVkIGZpbGVzLAorICogICBub3QgdGhlIHN5bWxpbmtzIHRoZW1zZWx2ZXMsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBCcm9rZW4KKyAqICAgc3ltbGlua3MgYXJlIGlnbm9yZWQuCisgKgorICogV2FybmluZzogY2lyY3VsYXIgc3ltbGlua3MgYXJlIGFsc28gZm9sbG93ZWQgd2hlbgorICogRElSX0lURVJBVE9SX0ZPTExPV19TWU1MSU5LUyBpcyBzZXQuIFRoZSBpdGVyYXRpb24gbWF5IGVuZCB1cCB3aXRoCisgKiBhbiBFTE9PUCBpZiB0aGV5IGhhcHBlbiBhbmQgRElSX0lURVJBVE9SX1BFREFOVElDIGlzIHNldC4KKyAqLworI2RlZmluZSBESVJfSVRFUkFUT1JfUEVEQU5USUMgKDEgPDwgMCkKKyNkZWZpbmUgRElSX0lURVJBVE9SX0ZPTExPV19TWU1MSU5LUyAoMSA8PCAxKQorCitzdHJ1Y3QgZGlyX2l0ZXJhdG9yIHsKKwkvKiBUaGUgY3VycmVudCBwYXRoOiAqLworCXN0cnVjdCBzdHJidWYgcGF0aDsKKworCS8qCisJICogVGhlIGN1cnJlbnQgcGF0aCByZWxhdGl2ZSB0byB0aGUgc3RhcnRpbmcgcGF0aC4gVGhpcyBwYXJ0CisJICogb2YgdGhlIHBhdGggYWx3YXlzIHVzZXMgIi8iIGNoYXJhY3RlcnMgdG8gc2VwYXJhdGUgcGF0aAorCSAqIGNvbXBvbmVudHM6CisJICovCisJY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aDsKKworCS8qIFRoZSBjdXJyZW50IGJhc2VuYW1lOiAqLworCWNvbnN0IGNoYXIgKmJhc2VuYW1lOworCisJLyoKKwkgKiBUaGUgcmVzdWx0IG9mIGNhbGxpbmcgbHN0YXQoKSBvbiBwYXRoOyBvciBzdGF0KCksIGlmIHRoZQorCSAqIERJUl9JVEVSQVRPUl9GT0xMT1dfU1lNTElOS1MgZmxhZyB3YXMgc2V0IGF0CisJICogZGlyX2l0ZXJhdG9yJ3MgaW5pdGlhbGl6YXRpb24uCisJICovCisJc3RydWN0IHN0YXQgc3Q7Cit9OworCisvKgorICogU3RhcnQgYSBkaXJlY3RvcnkgaXRlcmF0aW9uIG92ZXIgcGF0aCB3aXRoIHRoZSBjb21iaW5hdGlvbiBvZgorICogb3B0aW9ucyBzcGVjaWZpZWQgYnkgZmxhZ3MuIE9uIHN1Y2Nlc3MsIHJldHVybiBhIGRpcl9pdGVyYXRvcgorICogdGhhdCBob2xkcyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGl0ZXJhdGlvbi4gSW4gY2FzZSBvZgorICogZmFpbHVyZSwgcmV0dXJuIE5VTEwgYW5kIHNldCBlcnJubyBhY2NvcmRpbmdseS4KKyAqCisgKiBUaGUgaXRlcmF0aW9uIGluY2x1ZGVzIGFsbCBwYXRocyB1bmRlciBwYXRoLCBub3QgaW5jbHVkaW5nIHBhdGgKKyAqIGl0c2VsZiBhbmQgbm90IGluY2x1ZGluZyAiLiIgb3IgIi4uIiBlbnRyaWVzLgorICoKKyAqIFBhcmFtZXRlcnMgYXJlOgorICogIC0gcGF0aCBpcyB0aGUgc3RhcnRpbmcgZGlyZWN0b3J5LiBBbiBpbnRlcm5hbCBjb3B5IHdpbGwgYmUgbWFkZS4KKyAqICAtIGZsYWdzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHBvc3NpYmxlIGZsYWdzIHRvIGluaXRpYWxpemUgYQorICogICAgZGlyLWl0ZXJhdG9yIG9yIDAgZm9yIGRlZmF1bHQgYmVoYXZpb3IuCisgKi8KK3N0cnVjdCBkaXJfaXRlcmF0b3IgKmRpcl9pdGVyYXRvcl9iZWdpbihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisvKgorICogQWR2YW5jZSB0aGUgaXRlcmF0b3IgdG8gdGhlIGZpcnN0IG9yIG5leHQgaXRlbSBhbmQgcmV0dXJuIElURVJfT0suCisgKiBJZiB0aGUgaXRlcmF0aW9uIGlzIGV4aGF1c3RlZCwgZnJlZSB0aGUgZGlyX2l0ZXJhdG9yIGFuZCBhbnkKKyAqIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIHJldHVybiBJVEVSX0RPTkUuCisgKgorICogSXQgaXMgYSBidWcgdG8gdXNlIGl0ZXJhdG9yIG9yIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiBhZnRlciBpdAorICogaGFzIHJldHVybmVkIElURVJfRE9ORSBvciBJVEVSX0VSUk9SICh3aGljaCBtYXkgYmUgcmV0dXJuZWQgaWZmCisgKiB0aGUgRElSX0lURVJBVE9SX1BFREFOVElDIGZsYWcgd2FzIHNldCkuCisgKi8KK2ludCBkaXJfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgZGlyX2l0ZXJhdG9yICppdGVyYXRvcik7CisKKy8qCisgKiBFbmQgdGhlIGl0ZXJhdGlvbiBiZWZvcmUgaXQgaGFzIGJlZW4gZXhoYXVzdGVkLiBGcmVlIHRoZQorICogZGlyX2l0ZXJhdG9yIGFuZCBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMgYW5kIHJldHVybiBJVEVSX0RPTkUuIE9uCisgKiBlcnJvciwgZnJlZSB0aGUgZGlyX2l0ZXJhdG9yIGFuZCByZXR1cm4gSVRFUl9FUlJPUi4KKyAqLworaW50IGRpcl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgZGlyX2l0ZXJhdG9yICppdGVyYXRvcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZGlyLmMgYi9kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmZiMWIzCi0tLSAvZGV2L251bGwKKysrIGIvZGlyLmMKQEAgLTAsMCArMSwzNDkwIEBACisvKgorICogVGhpcyBoYW5kbGVzIHJlY3Vyc2l2ZSBmaWxlbmFtZSBkZXRlY3Rpb24gd2l0aCBleGNsdWRlCisgKiBmaWxlcywgaW5kZXgga25vd2xlZGdlIGV0Yy4uCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNS0yMDA2CisgKgkJIEp1bmlvIEhhbWFubywgMjAwNS0yMDA2CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAid2lsZG1hdGNoLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidmFyaW50LmgiCisjaW5jbHVkZSAiZXdhaC9ld29rLmgiCisjaW5jbHVkZSAiZnNtb25pdG9yLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorCisvKgorICogVGVsbHMgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlIGhvdyBhIGZpbGUgb3IgZGlyZWN0b3J5IHNob3VsZCBiZSB0cmVhdGVkLgorICogVmFsdWVzIGFyZSBvcmRlcmVkIGJ5IHNpZ25pZmljYW5jZSwgZS5nLiBpZiBhIGRpcmVjdG9yeSBjb250YWlucyBib3RoCisgKiBleGNsdWRlZCBhbmQgdW50cmFja2VkIGZpbGVzLCBpdCBpcyBsaXN0ZWQgYXMgdW50cmFja2VkIGJlY2F1c2UKKyAqIHBhdGhfdW50cmFja2VkID4gcGF0aF9leGNsdWRlZC4KKyAqLworZW51bSBwYXRoX3RyZWF0bWVudCB7CisJcGF0aF9ub25lID0gMCwKKwlwYXRoX3JlY3Vyc2UsCisJcGF0aF9leGNsdWRlZCwKKwlwYXRoX3VudHJhY2tlZAorfTsKKworLyoKKyAqIFN1cHBvcnQgZGF0YSBzdHJ1Y3R1cmUgZm9yIG91ciBvcGVuZGlyL3JlYWRkaXIvY2xvc2VkaXIgd3JhcHBlcnMKKyAqLworc3RydWN0IGNhY2hlZF9kaXIgeworCURJUiAqZmRpcjsKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdW50cmFja2VkOworCWludCBucl9maWxlczsKKwlpbnQgbnJfZGlyczsKKworCWNvbnN0IGNoYXIgKmRfbmFtZTsKKwlpbnQgZF90eXBlOworCWNvbnN0IGNoYXIgKmZpbGU7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVjZDsKK307CisKK3N0YXRpYyBlbnVtIHBhdGhfdHJlYXRtZW50IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLAorCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJaW50IGNoZWNrX29ubHksIGludCBzdG9wX2F0X2ZpcnN0X2ZpbGUsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpOworc3RhdGljIGludCByZXNvbHZlX2R0eXBlKGludCBkdHlwZSwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbik7CisKK2ludCBjb3VudF9zbGFzaGVzKGNvbnN0IGNoYXIgKnMpCit7CisJaW50IGNudCA9IDA7CisJd2hpbGUgKCpzKQorCQlpZiAoKnMrKyA9PSAnLycpCisJCQljbnQrKzsKKwlyZXR1cm4gY250OworfQorCitpbnQgZnNwYXRoY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJcmV0dXJuIGlnbm9yZV9jYXNlID8gc3RyY2FzZWNtcChhLCBiKSA6IHN0cmNtcChhLCBiKTsKK30KKworaW50IGZzcGF0aG5jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBpZ25vcmVfY2FzZSA/IHN0cm5jYXNlY21wKGEsIGIsIGNvdW50KSA6IHN0cm5jbXAoYSwgYiwgY291bnQpOworfQorCitpbnQgZ2l0X2ZubWF0Y2goY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCWNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJaW50IHByZWZpeCkKK3sKKwlpZiAocHJlZml4ID4gMCkgeworCQlpZiAocHNfc3RybmNtcChpdGVtLCBwYXR0ZXJuLCBzdHJpbmcsIHByZWZpeCkpCisJCQlyZXR1cm4gV01fTk9NQVRDSDsKKwkJcGF0dGVybiArPSBwcmVmaXg7CisJCXN0cmluZyArPSBwcmVmaXg7CisJfQorCWlmIChpdGVtLT5mbGFncyAmIFBBVEhTUEVDX09ORVNUQVIpIHsKKwkJaW50IHBhdHRlcm5fbGVuID0gc3RybGVuKCsrcGF0dGVybik7CisJCWludCBzdHJpbmdfbGVuID0gc3RybGVuKHN0cmluZyk7CisJCXJldHVybiBzdHJpbmdfbGVuIDwgcGF0dGVybl9sZW4gfHwKKwkJCXBzX3N0cmNtcChpdGVtLCBwYXR0ZXJuLAorCQkJCSAgc3RyaW5nICsgc3RyaW5nX2xlbiAtIHBhdHRlcm5fbGVuKTsKKwl9CisJaWYgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfR0xPQikKKwkJcmV0dXJuIHdpbGRtYXRjaChwYXR0ZXJuLCBzdHJpbmcsCisJCQkJIFdNX1BBVEhOQU1FIHwKKwkJCQkgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UgPyBXTV9DQVNFRk9MRCA6IDApKTsKKwllbHNlCisJCS8qIHdpbGRtYXRjaCBoYXMgbm90IGxlYXJuZWQgbm8gRk5NX1BBVEhOQU1FIG1vZGUgeWV0ICovCisJCXJldHVybiB3aWxkbWF0Y2gocGF0dGVybiwgc3RyaW5nLAorCQkJCSBpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0lDQVNFID8gV01fQ0FTRUZPTEQgOiAwKTsKK30KKworc3RhdGljIGludCBmbm1hdGNoX2ljYXNlX21lbShjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgcGF0dGVybmxlbiwKKwkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgc3RyaW5nbGVuLAorCQkJICAgICBpbnQgZmxhZ3MpCit7CisJaW50IG1hdGNoX3N0YXR1czsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdF9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0cl9idWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp1c2VfcGF0ID0gcGF0dGVybjsKKwljb25zdCBjaGFyICp1c2Vfc3RyID0gc3RyaW5nOworCisJaWYgKHBhdHRlcm5bcGF0dGVybmxlbl0pIHsKKwkJc3RyYnVmX2FkZCgmcGF0X2J1ZiwgcGF0dGVybiwgcGF0dGVybmxlbik7CisJCXVzZV9wYXQgPSBwYXRfYnVmLmJ1ZjsKKwl9CisJaWYgKHN0cmluZ1tzdHJpbmdsZW5dKSB7CisJCXN0cmJ1Zl9hZGQoJnN0cl9idWYsIHN0cmluZywgc3RyaW5nbGVuKTsKKwkJdXNlX3N0ciA9IHN0cl9idWYuYnVmOworCX0KKworCWlmIChpZ25vcmVfY2FzZSkKKwkJZmxhZ3MgfD0gV01fQ0FTRUZPTEQ7CisJbWF0Y2hfc3RhdHVzID0gd2lsZG1hdGNoKHVzZV9wYXQsIHVzZV9zdHIsIGZsYWdzKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRfYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc3RyX2J1Zik7CisKKwlyZXR1cm4gbWF0Y2hfc3RhdHVzOworfQorCitzdGF0aWMgc2l6ZV90IGNvbW1vbl9wcmVmaXhfbGVuKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJaW50IG47CisJc2l6ZV90IG1heCA9IDA7CisKKwkvKgorCSAqICI6KGljYXNlKXBhdGgiIGlzIHRyZWF0ZWQgYXMgYSBwYXRoc3BlYyBmdWxsIG9mCisJICogd2lsZGNhcmQuIEluIG90aGVyIHdvcmRzLCBvbmx5IHByZWZpeCBpcyBjb25zaWRlcmVkIGNvbW1vbgorCSAqIHByZWZpeC4gSWYgdGhlIHBhdGhzcGVjIGlzIGFiYy9mb28gYWJjL2JhciwgcnVubmluZyBpbgorCSAqIHN1YmRpciB4eXosIHRoZSBjb21tb24gcHJlZml4IGlzIHN0aWxsIHh5eiwgbm90IHh5ei9hYmMgYXMKKwkgKiBpbiBub24tOihpY2FzZSkuCisJICovCisJR1VBUkRfUEFUSFNQRUMocGF0aHNwZWMsCisJCSAgICAgICBQQVRIU1BFQ19GUk9NVE9QIHwKKwkJICAgICAgIFBBVEhTUEVDX01BWERFUFRIIHwKKwkJICAgICAgIFBBVEhTUEVDX0xJVEVSQUwgfAorCQkgICAgICAgUEFUSFNQRUNfR0xPQiB8CisJCSAgICAgICBQQVRIU1BFQ19JQ0FTRSB8CisJCSAgICAgICBQQVRIU1BFQ19FWENMVURFIHwKKwkJICAgICAgIFBBVEhTUEVDX0FUVFIpOworCisJZm9yIChuID0gMDsgbiA8IHBhdGhzcGVjLT5ucjsgbisrKSB7CisJCXNpemVfdCBpID0gMCwgbGVuID0gMCwgaXRlbV9sZW47CisJCWlmIChwYXRoc3BlYy0+aXRlbXNbbl0ubWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKQorCQkJY29udGludWU7CisJCWlmIChwYXRoc3BlYy0+aXRlbXNbbl0ubWFnaWMgJiBQQVRIU1BFQ19JQ0FTRSkKKwkJCWl0ZW1fbGVuID0gcGF0aHNwZWMtPml0ZW1zW25dLnByZWZpeDsKKwkJZWxzZQorCQkJaXRlbV9sZW4gPSBwYXRoc3BlYy0+aXRlbXNbbl0ubm93aWxkY2FyZF9sZW47CisJCXdoaWxlIChpIDwgaXRlbV9sZW4gJiYgKG4gPT0gMCB8fCBpIDwgbWF4KSkgeworCQkJY2hhciBjID0gcGF0aHNwZWMtPml0ZW1zW25dLm1hdGNoW2ldOworCQkJaWYgKGMgIT0gcGF0aHNwZWMtPml0ZW1zWzBdLm1hdGNoW2ldKQorCQkJCWJyZWFrOworCQkJaWYgKGMgPT0gJy8nKQorCQkJCWxlbiA9IGkgKyAxOworCQkJaSsrOworCQl9CisJCWlmIChuID09IDAgfHwgbGVuIDwgbWF4KSB7CisJCQltYXggPSBsZW47CisJCQlpZiAoIW1heCkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gbWF4OworfQorCisvKgorICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIGxvbmdlc3QgbGVhZGluZyBwYXRoIGNvbW1vbiBhbW9uZyBhbGwKKyAqIHBhdGhzcGVjcy4KKyAqLworY2hhciAqY29tbW9uX3ByZWZpeChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCXVuc2lnbmVkIGxvbmcgbGVuID0gY29tbW9uX3ByZWZpeF9sZW4ocGF0aHNwZWMpOworCisJcmV0dXJuIGxlbiA/IHhtZW1kdXB6KHBhdGhzcGVjLT5pdGVtc1swXS5tYXRjaCwgbGVuKSA6IE5VTEw7Cit9CisKK2ludCBmaWxsX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwljb25zdCBjaGFyICpwcmVmaXg7CisJc2l6ZV90IHByZWZpeF9sZW47CisKKwkvKgorCSAqIENhbGN1bGF0ZSBjb21tb24gcHJlZml4IGZvciB0aGUgcGF0aHNwZWMsIGFuZAorCSAqIHVzZSB0aGF0IHRvIG9wdGltaXplIHRoZSBkaXJlY3Rvcnkgd2FsaworCSAqLworCXByZWZpeF9sZW4gPSBjb21tb25fcHJlZml4X2xlbihwYXRoc3BlYyk7CisJcHJlZml4ID0gcHJlZml4X2xlbiA/IHBhdGhzcGVjLT5pdGVtc1swXS5tYXRjaCA6ICIiOworCisJLyogUmVhZCB0aGUgZGlyZWN0b3J5IGFuZCBwcnVuZSBpdCAqLworCXJlYWRfZGlyZWN0b3J5KGRpciwgaXN0YXRlLCBwcmVmaXgsIHByZWZpeF9sZW4sIHBhdGhzcGVjKTsKKworCXJldHVybiBwcmVmaXhfbGVuOworfQorCitpbnQgd2l0aGluX2RlcHRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJaW50IGRlcHRoLCBpbnQgbWF4X2RlcHRoKQoreworCWNvbnN0IGNoYXIgKmNwID0gbmFtZSwgKmNwZSA9IG5hbWUgKyBuYW1lbGVuOworCisJd2hpbGUgKGNwIDwgY3BlKSB7CisJCWlmICgqY3ArKyAhPSAnLycpCisJCQljb250aW51ZTsKKwkJZGVwdGgrKzsKKwkJaWYgKGRlcHRoID4gbWF4X2RlcHRoKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGJsb2Igd2l0aCB0aGUgZ2l2ZW4gT0lEIGludG8gYSBidWZmZXIuCisgKiBBcHBlbmQgYSB0cmFpbGluZyBMRiB0byB0aGUgZW5kIGlmIHRoZSBsYXN0IGxpbmUgZG9lc24ndCBoYXZlIG9uZS4KKyAqCisgKiBSZXR1cm5zOgorICogICAgLTEgd2hlbiB0aGUgT0lEIGlzIGludmFsaWQgb3IgdW5rbm93biBvciBkb2VzIG5vdCByZWZlciB0byBhIGJsb2IuCisgKiAgICAgMCB3aGVuIHRoZSBibG9iIGlzIGVtcHR5LgorICogICAgIDEgYWxvbmcgd2l0aCB7IGRhdGEsIHNpemUgfSBvZiB0aGUgKHBvc3NpYmx5IGF1Z21lbnRlZCkgYnVmZmVyCisgKiAgICAgICB3aGVuIHN1Y2Nlc3NmdWwuCisgKgorICogT3B0aW9uYWxseSB1cGRhdGVzIHRoZSBnaXZlbiBvaWRfc3RhdCB3aXRoIHRoZSBnaXZlbiBPSUQgKHdoZW4gdmFsaWQpLgorICovCitzdGF0aWMgaW50IGRvX3JlYWRfYmxvYihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBvaWRfc3RhdCAqb2lkX3N0YXQsCisJCQlzaXplX3QgKnNpemVfb3V0LCBjaGFyICoqZGF0YV9vdXQpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc3o7CisJY2hhciAqZGF0YTsKKworCSpzaXplX291dCA9IDA7CisJKmRhdGFfb3V0ID0gTlVMTDsKKworCWRhdGEgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzeik7CisJaWYgKCFkYXRhIHx8IHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChvaWRfc3RhdCkgeworCQltZW1zZXQoJm9pZF9zdGF0LT5zdGF0LCAwLCBzaXplb2Yob2lkX3N0YXQtPnN0YXQpKTsKKwkJb2lkY3B5KCZvaWRfc3RhdC0+b2lkLCBvaWQpOworCX0KKworCWlmIChzeiA9PSAwKSB7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChkYXRhW3N6IC0gMV0gIT0gJ1xuJykgeworCQlkYXRhID0geHJlYWxsb2MoZGF0YSwgc3RfYWRkKHN6LCAxKSk7CisJCWRhdGFbc3orK10gPSAnXG4nOworCX0KKworCSpzaXplX291dCA9IHhzaXplX3Qoc3opOworCSpkYXRhX291dCA9IGRhdGE7CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBET19NQVRDSF9FWENMVURFICAgKDE8PDApCisjZGVmaW5lIERPX01BVENIX0RJUkVDVE9SWSAoMTw8MSkKKyNkZWZpbmUgRE9fTUFUQ0hfTEVBRElOR19QQVRIU1BFQyAoMTw8MikKKworLyoKKyAqIERvZXMgdGhlIGdpdmVuIHBhdGhzcGVjIG1hdGNoIHRoZSBnaXZlbiBuYW1lPyAgQSBtYXRjaCBpcyBmb3VuZCBpZgorICoKKyAqICgxKSB0aGUgcGF0aHNwZWMgc3RyaW5nIGlzIGxlYWRpbmcgZGlyZWN0b3J5IG9mICduYW1lJyAoIlJFQ1VSU0lWRUxZIiksIG9yCisgKiAoMikgdGhlIHBhdGhzcGVjIHN0cmluZyBoYXMgYSBsZWFkaW5nIHBhcnQgbWF0Y2hpbmcgJ25hbWUnICgiTEVBRElORyIpLCBvcgorICogKDMpIHRoZSBwYXRoc3BlYyBzdHJpbmcgaXMgYSB3aWxkY2FyZCBhbmQgbWF0Y2hlcyAnbmFtZScgKCJXSUxEQ0FSRCIpLCBvcgorICogKDQpIHRoZSBwYXRoc3BlYyBzdHJpbmcgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyAnbmFtZScgKCJFWEFDVCIpLgorICoKKyAqIFJldHVybiB2YWx1ZSB0ZWxscyB3aGljaCBjYXNlIGl0IHdhcyAoMS00KSwgb3IgMCB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoLgorICoKKyAqIEl0IG1heSBiZSBpbnN0cnVjdGl2ZSB0byBsb29rIGF0IGEgc21hbGwgdGFibGUgb2YgY29uY3JldGUgZXhhbXBsZXMKKyAqIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gMSwgMiwgYW5kIDQ6CisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRoc3BlY3MKKyAqICAgICAgICAgICAgICAgIHwgICAgYS9iICAgIHwgICBhL2IvICAgIHwgICBhL2IvYworICogICAgICAgICAgLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorICogICAgICAgICAgYS9iICAgfCAgRVhBQ1QgICAgfCAgRVhBQ1RbMV0gfCBMRUFESU5HWzJdCisgKiAgTmFtZXMgICBhL2IvICB8IFJFQ1VSU0lWRSB8ICAgRVhBQ1QgICB8IExFQURJTkdbMl0KKyAqICAgICAgICAgIGEvYi9jIHwgUkVDVVJTSVZFIHwgUkVDVVJTSVZFIHwgICBFWEFDVAorICoKKyAqIFsxXSBPbmx5IGlmIERPX01BVENIX0RJUkVDVE9SWSBpcyBwYXNzZWQ7IG90aGVyd2lzZSwgdGhpcyBpcyBOT1QgYSBtYXRjaC4KKyAqIFsyXSBPbmx5IGlmIERPX01BVENIX0xFQURJTkdfUEFUSFNQRUMgaXMgcGFzc2VkOyBvdGhlcndpc2UsIG5vdCBhIG1hdGNoLgorICovCitzdGF0aWMgaW50IG1hdGNoX3BhdGhzcGVjX2l0ZW0oY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sIGludCBwcmVmaXgsCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIHVuc2lnbmVkIGZsYWdzKQoreworCS8qIG5hbWUvbmFtZWxlbiBoYXMgcHJlZml4IGN1dCBvZmYgYnkgY2FsbGVyICovCisJY29uc3QgY2hhciAqbWF0Y2ggPSBpdGVtLT5tYXRjaCArIHByZWZpeDsKKwlpbnQgbWF0Y2hsZW4gPSBpdGVtLT5sZW4gLSBwcmVmaXg7CisKKwkvKgorCSAqIFRoZSBub3JtYWwgY2FsbCBwYXR0ZXJuIGlzOgorCSAqIDEuIHByZWZpeCA9IGNvbW1vbl9wcmVmaXhfbGVuKHBzKTsKKwkgKiAyLiBwcnVuZSBzb21ldGhpbmcsIG9yIGZpbGxfZGlyZWN0b3J5CisJICogMy4gbWF0Y2hfcGF0aHNwZWMoKQorCSAqCisJICogJ3ByZWZpeCcgYXQgIzEgbWF5IGJlIHNob3J0ZXIgdGhhbiB0aGUgY29tbWFuZCdzIHByZWZpeCBhbmQKKwkgKiBpdCdzIG9rIGZvciAjMiB0byBtYXRjaCBleHRyYSBmaWxlcy4gVGhvc2UgZXh0cmFzIHdpbGwgYmUKKwkgKiB0cmltbWVkIGF0ICMzLgorCSAqCisJICogU3VwcG9zZSB0aGUgcGF0aHNwZWMgaXMgJ2ZvbycgYW5kICcuLi9iYXInIHJ1bm5pbmcgZnJvbQorCSAqIHN1YmRpciAneHl6Jy4gVGhlIGNvbW1vbiBwcmVmaXggYXQgIzEgd2lsbCBiZSBlbXB0eSwgdGhhbmtzCisJICogdG8gIi4uLyIuIFdlIG1heSBoYXZlIHh5ei9mb28gX2FuZF8gWFlaL2ZvbyBhZnRlciAjMi4gVGhlCisJICogdXNlciBkb2VzIG5vdCB3YW50IFhZWi9mb28sIG9ubHkgdGhlICJmb28iIHBhcnQgc2hvdWxkIGJlCisJICogY2FzZS1pbnNlbnNpdGl2ZS4gV2UgbmVlZCB0byBmaWx0ZXIgb3V0IFhZWi9mb28gaGVyZS4gSW4KKwkgKiBvdGhlciB3b3Jkcywgd2UgZG8gbm90IHRydXN0IHRoZSBjYWxsZXIgb24gY29tcGFyaW5nIHRoZQorCSAqIHByZWZpeCBwYXJ0IHdoZW4gOihpY2FzZSkgaXMgaW52b2x2ZWQuIFdlIGRvIGV4YWN0CisJICogY29tcGFyaXNvbiBvdXJzZWx2ZXMuCisJICoKKwkgKiBOb3JtYWxseSB0aGUgY2FsbGVyIChjb21tb25fcHJlZml4X2xlbigpIGluIGZhY3QpIGRvZXMKKwkgKiBfZXhhY3RfIG1hdGNoaW5nIG9uIG5hbWVbLXByZWZpeCsxLi4tMV0gYW5kIHdlIGRvIG5vdCBuZWVkCisJICogdG8gY2hlY2sgdGhhdCBwYXJ0LiBCZSBkZWZlbnNpdmUgYW5kIGNoZWNrIGl0IGFueXdheSwgaW4KKwkgKiBjYXNlIGNvbW1vbl9wcmVmaXhfbGVuIGlzIGNoYW5nZWQsIG9yIGEgbmV3IGNhbGxlciBpcworCSAqIGludHJvZHVjZWQgdGhhdCBkb2VzIG5vdCB1c2UgY29tbW9uX3ByZWZpeF9sZW4uCisJICoKKwkgKiBJZiB0aGUgcGVuYWx0eSB0dXJucyBvdXQgdG9vIGhpZ2ggd2hlbiBwcmVmaXggaXMgcmVhbGx5CisJICogbG9uZywgbWF5YmUgY2hhbmdlIGl0IHRvCisJICogc3RybmNtcChtYXRjaCwgbmFtZSwgaXRlbS0+cHJlZml4IC0gcHJlZml4KQorCSAqLworCWlmIChpdGVtLT5wcmVmaXggJiYgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UpICYmCisJICAgIHN0cm5jbXAoaXRlbS0+bWF0Y2gsIG5hbWUgLSBwcmVmaXgsIGl0ZW0tPnByZWZpeCkpCisJCXJldHVybiAwOworCisJaWYgKGl0ZW0tPmF0dHJfbWF0Y2hfbnIgJiYKKwkgICAgIW1hdGNoX3BhdGhzcGVjX2F0dHJzKGlzdGF0ZSwgbmFtZSwgbmFtZWxlbiwgaXRlbSkpCisJCXJldHVybiAwOworCisJLyogSWYgdGhlIG1hdGNoIHdhcyBqdXN0IHRoZSBwcmVmaXgsIHdlIG1hdGNoZWQgKi8KKwlpZiAoISptYXRjaCkKKwkJcmV0dXJuIE1BVENIRURfUkVDVVJTSVZFTFk7CisKKwlpZiAobWF0Y2hsZW4gPD0gbmFtZWxlbiAmJiAhcHNfc3RybmNtcChpdGVtLCBtYXRjaCwgbmFtZSwgbWF0Y2hsZW4pKSB7CisJCWlmIChtYXRjaGxlbiA9PSBuYW1lbGVuKQorCQkJcmV0dXJuIE1BVENIRURfRVhBQ1RMWTsKKworCQlpZiAobWF0Y2hbbWF0Y2hsZW4tMV0gPT0gJy8nIHx8IG5hbWVbbWF0Y2hsZW5dID09ICcvJykKKwkJCXJldHVybiBNQVRDSEVEX1JFQ1VSU0lWRUxZOworCX0gZWxzZSBpZiAoKGZsYWdzICYgRE9fTUFUQ0hfRElSRUNUT1JZKSAmJgorCQkgICBtYXRjaFttYXRjaGxlbiAtIDFdID09ICcvJyAmJgorCQkgICBuYW1lbGVuID09IG1hdGNobGVuIC0gMSAmJgorCQkgICAhcHNfc3RybmNtcChpdGVtLCBtYXRjaCwgbmFtZSwgbmFtZWxlbikpCisJCXJldHVybiBNQVRDSEVEX0VYQUNUTFk7CisKKwlpZiAoaXRlbS0+bm93aWxkY2FyZF9sZW4gPCBpdGVtLT5sZW4gJiYKKwkgICAgIWdpdF9mbm1hdGNoKGl0ZW0sIG1hdGNoLCBuYW1lLAorCQkJIGl0ZW0tPm5vd2lsZGNhcmRfbGVuIC0gcHJlZml4KSkKKwkJcmV0dXJuIE1BVENIRURfRk5NQVRDSDsKKworCS8qIFBlcmZvcm0gY2hlY2tzIHRvIHNlZSBpZiAibmFtZSIgaXMgYSBsZWFkaW5nIHN0cmluZyBvZiB0aGUgcGF0aHNwZWMgKi8KKwlpZiAoZmxhZ3MgJiBET19NQVRDSF9MRUFESU5HX1BBVEhTUEVDKSB7CisJCS8qIG5hbWUgaXMgYSBsaXRlcmFsIHByZWZpeCBvZiB0aGUgcGF0aHNwZWMgKi8KKwkJaW50IG9mZnNldCA9IG5hbWVbbmFtZWxlbi0xXSA9PSAnLycgPyAxIDogMDsKKwkJaWYgKChuYW1lbGVuIDwgbWF0Y2hsZW4pICYmCisJCSAgICAobWF0Y2hbbmFtZWxlbi1vZmZzZXRdID09ICcvJykgJiYKKwkJICAgICFwc19zdHJuY21wKGl0ZW0sIG1hdGNoLCBuYW1lLCBuYW1lbGVuKSkKKwkJCXJldHVybiBNQVRDSEVEX1JFQ1VSU0lWRUxZX0xFQURJTkdfUEFUSFNQRUM7CisKKwkJLyogbmFtZSBkb2Vzbid0IG1hdGNoIHVwIHRvIHRoZSBmaXJzdCB3aWxkIGNoYXJhY3RlciAqLworCQlpZiAoaXRlbS0+bm93aWxkY2FyZF9sZW4gPCBpdGVtLT5sZW4gJiYKKwkJICAgIHBzX3N0cm5jbXAoaXRlbSwgbWF0Y2gsIG5hbWUsCisJCQkgICAgICAgaXRlbS0+bm93aWxkY2FyZF9sZW4gLSBwcmVmaXgpKQorCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogbmFtZSBoYXMgbm8gd2lsZGNhcmQsIGFuZCBpdCBkaWRuJ3QgbWF0Y2ggYXMgYSBsZWFkaW5nCisJCSAqIHBhdGhzcGVjIHNvIHJldHVybi4KKwkJICovCisJCWlmIChpdGVtLT5ub3dpbGRjYXJkX2xlbiA9PSBpdGVtLT5sZW4pCisJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBIZXJlIGlzIHdoZXJlIHdlIHdvdWxkIHBlcmZvcm0gYSB3aWxkbWF0Y2ggdG8gY2hlY2sgaWYKKwkJICogIm5hbWUiIGNhbiBiZSBtYXRjaGVkIGFzIGEgZGlyZWN0b3J5IChvciBhIHByZWZpeCkgYWdhaW5zdAorCQkgKiB0aGUgcGF0aHNwZWMuICBTaW5jZSB3aWxkbWF0Y2ggZG9lc24ndCBoYXZlIHRoaXMgY2FwYWJpbGl0eQorCQkgKiBhdCB0aGUgcHJlc2VudCB3ZSBoYXZlIHRvIHB1bnQgYW5kIHNheSB0aGF0IGl0IGlzIGEgbWF0Y2gsCisJCSAqIHBvdGVudGlhbGx5IHJldHVybmluZyBhIGZhbHNlIHBvc2l0aXZlCisJCSAqIFRoZSBzdWJtb2R1bGVzIHRoZW1zZWx2ZXMgd2lsbCBiZSBhYmxlIHRvIHBlcmZvcm0gbW9yZQorCQkgKiBhY2N1cmF0ZSBtYXRjaGluZyB0byBkZXRlcm1pbmUgaWYgdGhlIHBhdGhzcGVjIG1hdGNoZXMuCisJCSAqLworCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWV9MRUFESU5HX1BBVEhTUEVDOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogR2l2ZW4gYSBuYW1lIGFuZCBhIGxpc3Qgb2YgcGF0aHNwZWNzLCByZXR1cm5zIHRoZSBuYXR1cmUgb2YgdGhlCisgKiBjbG9zZXN0IChpLmUuIG1vc3Qgc3BlY2lmaWMpIG1hdGNoIG9mIHRoZSBuYW1lIHRvIGFueSBvZiB0aGUKKyAqIHBhdGhzcGVjcy4KKyAqCisgKiBUaGUgY2FsbGVyIHR5cGljYWxseSBjYWxscyB0aGlzIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUKKyAqIHBhdGhzcGVjIGFuZCBzZWVuW10gYXJyYXkgYnV0IHdpdGggZGlmZmVyZW50IG5hbWUvbmFtZWxlbgorICogKGUuZy4gZW50cmllcyBmcm9tIHRoZSBpbmRleCkgYW5kIGlzIGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIGFuZAorICogaG93IGVhY2ggcGF0aHNwZWMgbWF0Y2hlcyBhbGwgdGhlIG5hbWVzIGl0IGNhbGxzIHRoaXMgZnVuY3Rpb24KKyAqIHdpdGguICBBIG1hcmsgaXMgbGVmdCBpbiB0aGUgc2VlbltdIGFycmF5IGZvciBlYWNoIHBhdGhzcGVjIGVsZW1lbnQKKyAqIGluZGljYXRpbmcgdGhlIGNsb3Nlc3QgdHlwZSBvZiBtYXRjaCB0aGF0IGVsZW1lbnQgYWNoaWV2ZWQsIHNvIGlmCisgKiBzZWVuW25dIHJlbWFpbnMgemVybyBhZnRlciBtdWx0aXBsZSBpbnZvY2F0aW9ucywgdGhhdCBtZWFucyB0aGUgbnRoCisgKiBwYXRoc3BlYyBkaWQgbm90IG1hdGNoIGFueSBuYW1lcywgd2hpY2ggY291bGQgaW5kaWNhdGUgdGhhdCB0aGUKKyAqIHVzZXIgbWlzdHlwZWQgdGhlIG50aCBwYXRoc3BlYy4KKyAqLworc3RhdGljIGludCBkb19tYXRjaF9wYXRoc3BlYyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkgICAgIGludCBwcmVmaXgsIGNoYXIgKnNlZW4sCisJCQkgICAgIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBpLCByZXR2YWwgPSAwLCBleGNsdWRlID0gZmxhZ3MgJiBET19NQVRDSF9FWENMVURFOworCisJR1VBUkRfUEFUSFNQRUMocHMsCisJCSAgICAgICBQQVRIU1BFQ19GUk9NVE9QIHwKKwkJICAgICAgIFBBVEhTUEVDX01BWERFUFRIIHwKKwkJICAgICAgIFBBVEhTUEVDX0xJVEVSQUwgfAorCQkgICAgICAgUEFUSFNQRUNfR0xPQiB8CisJCSAgICAgICBQQVRIU1BFQ19JQ0FTRSB8CisJCSAgICAgICBQQVRIU1BFQ19FWENMVURFIHwKKwkJICAgICAgIFBBVEhTUEVDX0FUVFIpOworCisJaWYgKCFwcy0+bnIpIHsKKwkJaWYgKCFwcy0+cmVjdXJzaXZlIHx8CisJCSAgICAhKHBzLT5tYWdpYyAmIFBBVEhTUEVDX01BWERFUFRIKSB8fAorCQkgICAgcHMtPm1heF9kZXB0aCA9PSAtMSkKKwkJCXJldHVybiBNQVRDSEVEX1JFQ1VSU0lWRUxZOworCisJCWlmICh3aXRoaW5fZGVwdGgobmFtZSwgbmFtZWxlbiwgMCwgcHMtPm1heF9kZXB0aCkpCisJCQlyZXR1cm4gTUFUQ0hFRF9FWEFDVExZOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisKKwluYW1lICs9IHByZWZpeDsKKwluYW1lbGVuIC09IHByZWZpeDsKKworCWZvciAoaSA9IHBzLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWludCBob3c7CisKKwkJaWYgKCghZXhjbHVkZSAmJiAgIHBzLT5pdGVtc1tpXS5tYWdpYyAmIFBBVEhTUEVDX0VYQ0xVREUpIHx8CisJCSAgICAoIGV4Y2x1ZGUgJiYgIShwcy0+aXRlbXNbaV0ubWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoc2VlbiAmJiBzZWVuW2ldID09IE1BVENIRURfRVhBQ1RMWSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBNYWtlIGV4Y2x1ZGUgcGF0dGVybnMgb3B0aW9uYWwgYW5kIG5ldmVyIHJlcG9ydAorCQkgKiAicGF0aHNwZWMgJzooZXhjbHVkZSlmb28nIG1hdGNoZXMgbm8gZmlsZXMiCisJCSAqLworCQlpZiAoc2VlbiAmJiBwcy0+aXRlbXNbaV0ubWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKQorCQkJc2VlbltpXSA9IE1BVENIRURfRk5NQVRDSDsKKwkJaG93ID0gbWF0Y2hfcGF0aHNwZWNfaXRlbShpc3RhdGUsIHBzLT5pdGVtcytpLCBwcmVmaXgsIG5hbWUsCisJCQkJCSAgbmFtZWxlbiwgZmxhZ3MpOworCQlpZiAocHMtPnJlY3Vyc2l2ZSAmJgorCQkgICAgKHBzLT5tYWdpYyAmIFBBVEhTUEVDX01BWERFUFRIKSAmJgorCQkgICAgcHMtPm1heF9kZXB0aCAhPSAtMSAmJgorCQkgICAgaG93ICYmIGhvdyAhPSBNQVRDSEVEX0ZOTUFUQ0gpIHsKKwkJCWludCBsZW4gPSBwcy0+aXRlbXNbaV0ubGVuOworCQkJaWYgKG5hbWVbbGVuXSA9PSAnLycpCisJCQkJbGVuKys7CisJCQlpZiAod2l0aGluX2RlcHRoKG5hbWUrbGVuLCBuYW1lbGVuLWxlbiwgMCwgcHMtPm1heF9kZXB0aCkpCisJCQkJaG93ID0gTUFUQ0hFRF9FWEFDVExZOworCQkJZWxzZQorCQkJCWhvdyA9IDA7CisJCX0KKwkJaWYgKGhvdykgeworCQkJaWYgKHJldHZhbCA8IGhvdykKKwkJCQlyZXR2YWwgPSBob3c7CisJCQlpZiAoc2VlbiAmJiBzZWVuW2ldIDwgaG93KQorCQkJCXNlZW5baV0gPSBob3c7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IG1hdGNoX3BhdGhzcGVjKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJICAgaW50IHByZWZpeCwgY2hhciAqc2VlbiwgaW50IGlzX2RpcikKK3sKKwlpbnQgcG9zaXRpdmUsIG5lZ2F0aXZlOworCXVuc2lnbmVkIGZsYWdzID0gaXNfZGlyID8gRE9fTUFUQ0hfRElSRUNUT1JZIDogMDsKKwlwb3NpdGl2ZSA9IGRvX21hdGNoX3BhdGhzcGVjKGlzdGF0ZSwgcHMsIG5hbWUsIG5hbWVsZW4sCisJCQkJICAgICBwcmVmaXgsIHNlZW4sIGZsYWdzKTsKKwlpZiAoIShwcy0+bWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKSB8fCAhcG9zaXRpdmUpCisJCXJldHVybiBwb3NpdGl2ZTsKKwluZWdhdGl2ZSA9IGRvX21hdGNoX3BhdGhzcGVjKGlzdGF0ZSwgcHMsIG5hbWUsIG5hbWVsZW4sCisJCQkJICAgICBwcmVmaXgsIHNlZW4sCisJCQkJICAgICBmbGFncyB8IERPX01BVENIX0VYQ0xVREUpOworCXJldHVybiBuZWdhdGl2ZSA/IDAgOiBwb3NpdGl2ZTsKK30KKworLyoqCisgKiBDaGVjayBpZiBhIHN1Ym1vZHVsZSBpcyBhIHN1cGVyc2V0IG9mIHRoZSBwYXRoc3BlYworICovCitpbnQgc3VibW9kdWxlX3BhdGhfbWF0Y2goY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCSBjb25zdCBjaGFyICpzdWJtb2R1bGVfbmFtZSwKKwkJCSBjaGFyICpzZWVuKQoreworCWludCBtYXRjaGVkID0gZG9fbWF0Y2hfcGF0aHNwZWMoaXN0YXRlLCBwcywgc3VibW9kdWxlX25hbWUsCisJCQkJCXN0cmxlbihzdWJtb2R1bGVfbmFtZSksCisJCQkJCTAsIHNlZW4sCisJCQkJCURPX01BVENIX0RJUkVDVE9SWSB8CisJCQkJCURPX01BVENIX0xFQURJTkdfUEFUSFNQRUMpOworCXJldHVybiBtYXRjaGVkOworfQorCitpbnQgcmVwb3J0X3BhdGhfZXJyb3IoY29uc3QgY2hhciAqcHNfbWF0Y2hlZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbGwgcGF0aHNwZWMgbWF0Y2hlZDsgb3RoZXJ3aXNlIGl0IGlzIGFuIGVycm9yLgorCSAqLworCWludCBudW0sIGVycm9ycyA9IDA7CisJZm9yIChudW0gPSAwOyBudW0gPCBwYXRoc3BlYy0+bnI7IG51bSsrKSB7CisJCWludCBvdGhlciwgZm91bmRfZHVwOworCisJCWlmIChwc19tYXRjaGVkW251bV0pCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogVGhlIGNhbGxlciBtaWdodCBoYXZlIGZlZCBpZGVudGljYWwgcGF0aHNwZWMKKwkJICogdHdpY2UuICBEbyBub3QgYmFyZiBvbiBzdWNoIGEgbWlzdGFrZS4KKwkJICogRklYTUU6IHBhcnNlX3BhdGhzcGVjIHNob3VsZCBoYXZlIGVsaW1pbmF0ZWQKKwkJICogZHVwbGljYXRlIHBhdGhzcGVjLgorCQkgKi8KKwkJZm9yIChmb3VuZF9kdXAgPSBvdGhlciA9IDA7CisJCSAgICAgIWZvdW5kX2R1cCAmJiBvdGhlciA8IHBhdGhzcGVjLT5ucjsKKwkJICAgICBvdGhlcisrKSB7CisJCQlpZiAob3RoZXIgPT0gbnVtIHx8ICFwc19tYXRjaGVkW290aGVyXSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghc3RyY21wKHBhdGhzcGVjLT5pdGVtc1tvdGhlcl0ub3JpZ2luYWwsCisJCQkJICAgIHBhdGhzcGVjLT5pdGVtc1tudW1dLm9yaWdpbmFsKSkKKwkJCQkvKgorCQkJCSAqIE9rLCB3ZSBoYXZlIGEgbWF0Y2ggYWxyZWFkeS4KKwkJCQkgKi8KKwkJCQlmb3VuZF9kdXAgPSAxOworCQl9CisJCWlmIChmb3VuZF9kdXApCisJCQljb250aW51ZTsKKworCQllcnJvcihfKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IiksCisJCSAgICAgIHBhdGhzcGVjLT5pdGVtc1tudW1dLm9yaWdpbmFsKTsKKwkJZXJyb3JzKys7CisJfQorCXJldHVybiBlcnJvcnM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgInNpbXBsZSIgcGFydCBvZiBhIHBhdGggbWF0Y2ggbGltaXRlci4KKyAqLworaW50IHNpbXBsZV9sZW5ndGgoY29uc3QgY2hhciAqbWF0Y2gpCit7CisJaW50IGxlbiA9IC0xOworCisJZm9yICg7OykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqbWF0Y2grKzsKKwkJbGVuKys7CisJCWlmIChjID09ICdcMCcgfHwgaXNfZ2xvYl9zcGVjaWFsKGMpKQorCQkJcmV0dXJuIGxlbjsKKwl9Cit9CisKK2ludCBub193aWxkY2FyZChjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIHN0cmluZ1tzaW1wbGVfbGVuZ3RoKHN0cmluZyldID09ICdcMCc7Cit9CisKK3ZvaWQgcGFyc2VfcGF0aF9wYXR0ZXJuKGNvbnN0IGNoYXIgKipwYXR0ZXJuLAorCQkJICAgaW50ICpwYXR0ZXJubGVuLAorCQkJICAgdW5zaWduZWQgKmZsYWdzLAorCQkJICAgaW50ICpub3dpbGRjYXJkbGVuKQoreworCWNvbnN0IGNoYXIgKnAgPSAqcGF0dGVybjsKKwlzaXplX3QgaSwgbGVuOworCisJKmZsYWdzID0gMDsKKwlpZiAoKnAgPT0gJyEnKSB7CisJCSpmbGFncyB8PSBQQVRURVJOX0ZMQUdfTkVHQVRJVkU7CisJCXArKzsKKwl9CisJbGVuID0gc3RybGVuKHApOworCWlmIChsZW4gJiYgcFtsZW4gLSAxXSA9PSAnLycpIHsKKwkJbGVuLS07CisJCSpmbGFncyB8PSBQQVRURVJOX0ZMQUdfTVVTVEJFRElSOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHBbaV0gPT0gJy8nKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IGxlbikKKwkJKmZsYWdzIHw9IFBBVFRFUk5fRkxBR19OT0RJUjsKKwkqbm93aWxkY2FyZGxlbiA9IHNpbXBsZV9sZW5ndGgocCk7CisJLyoKKwkgKiB3ZSBzaG91bGQgaGF2ZSBleGNsdWRlZCB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSAncCcgdG9vLAorCSAqIGJ1dCB0aGF0J3Mgb25lIG1vcmUgYWxsb2NhdGlvbi4gSW5zdGVhZCBqdXN0IG1ha2Ugc3VyZQorCSAqIG5vd2lsZGNhcmRsZW4gZG9lcyBub3QgZXhjZWVkIHJlYWwgcGF0dGVybmxlbgorCSAqLworCWlmICgqbm93aWxkY2FyZGxlbiA+IGxlbikKKwkJKm5vd2lsZGNhcmRsZW4gPSBsZW47CisJaWYgKCpwID09ICcqJyAmJiBub193aWxkY2FyZChwICsgMSkpCisJCSpmbGFncyB8PSBQQVRURVJOX0ZMQUdfRU5EU1dJVEg7CisJKnBhdHRlcm4gPSBwOworCSpwYXR0ZXJubGVuID0gbGVuOworfQorCitpbnQgcGxfaGFzaG1hcF9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqYSwKKwkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmIsCisJCSAgIGNvbnN0IHZvaWQgKmtleSkKK3sKKwljb25zdCBzdHJ1Y3QgcGF0dGVybl9lbnRyeSAqZWUxID0KKwkJCWNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgcGF0dGVybl9lbnRyeSwgZW50KTsKKwljb25zdCBzdHJ1Y3QgcGF0dGVybl9lbnRyeSAqZWUyID0KKwkJCWNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgcGF0dGVybl9lbnRyeSwgZW50KTsKKworCXNpemVfdCBtaW5fbGVuID0gZWUxLT5wYXR0ZXJubGVuIDw9IGVlMi0+cGF0dGVybmxlbgorCQkJID8gZWUxLT5wYXR0ZXJubGVuCisJCQkgOiBlZTItPnBhdHRlcm5sZW47CisKKwlpZiAoaWdub3JlX2Nhc2UpCisJCXJldHVybiBzdHJuY2FzZWNtcChlZTEtPnBhdHRlcm4sIGVlMi0+cGF0dGVybiwgbWluX2xlbik7CisJcmV0dXJuIHN0cm5jbXAoZWUxLT5wYXR0ZXJuLCBlZTItPnBhdHRlcm4sIG1pbl9sZW4pOworfQorCitzdGF0aWMgY2hhciAqZHVwX2FuZF9maWx0ZXJfcGF0dGVybihjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWNoYXIgKnNldCwgKnJlYWQ7CisJc2l6ZV90IGNvdW50ICA9IDA7CisJY2hhciAqcmVzdWx0ID0geHN0cmR1cChwYXR0ZXJuKTsKKworCXNldCA9IHJlc3VsdDsKKwlyZWFkID0gcmVzdWx0OworCisJd2hpbGUgKCpyZWFkKSB7CisJCS8qIHNraXAgZXNjYXBlIGNoYXJhY3RlcnMgKG9uY2UpICovCisJCWlmICgqcmVhZCA9PSAnXFwnKQorCQkJcmVhZCsrOworCisJCSpzZXQgPSAqcmVhZDsKKworCQlzZXQrKzsKKwkJcmVhZCsrOworCQljb3VudCsrOworCX0KKwkqc2V0ID0gMDsKKworCWlmIChjb3VudCA+IDIgJiYKKwkgICAgKihzZXQgLSAxKSA9PSAnKicgJiYKKwkgICAgKihzZXQgLSAyKSA9PSAnLycpCisJCSooc2V0IC0gMikgPSAwOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgYWRkX3BhdHRlcm5fdG9faGFzaHNldHMoc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsIHN0cnVjdCBwYXRoX3BhdHRlcm4gKmdpdmVuKQoreworCXN0cnVjdCBwYXR0ZXJuX2VudHJ5ICp0cmFuc2xhdGVkOworCWNoYXIgKnRydW5jYXRlZDsKKwljaGFyICpkYXRhID0gTlVMTDsKKwljb25zdCBjaGFyICpwcmV2LCAqY3VyLCAqbmV4dDsKKworCWlmICghcGwtPnVzZV9jb25lX3BhdHRlcm5zKQorCQlyZXR1cm47CisKKwlpZiAoZ2l2ZW4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFICYmCisJICAgIGdpdmVuLT5mbGFncyAmIFBBVFRFUk5fRkxBR19NVVNUQkVESVIgJiYKKwkgICAgIXN0cmNtcChnaXZlbi0+cGF0dGVybiwgIi8qIikpIHsKKwkJcGwtPmZ1bGxfY29uZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWdpdmVuLT5mbGFncyAmJiAhc3RyY21wKGdpdmVuLT5wYXR0ZXJuLCAiLyoiKSkgeworCQlwbC0+ZnVsbF9jb25lID0gMTsKKwkJcmV0dXJuOworCX0KKworCWlmIChnaXZlbi0+cGF0dGVybmxlbiA8IDIgfHwKKwkgICAgKmdpdmVuLT5wYXR0ZXJuID09ICcqJyB8fAorCSAgICBzdHJzdHIoZ2l2ZW4tPnBhdHRlcm4sICIqKiIpKSB7CisJCS8qIE5vdCBhIGNvbmUgcGF0dGVybi4gKi8KKwkJd2FybmluZyhfKCJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIpLCBnaXZlbi0+cGF0dGVybik7CisJCWdvdG8gY2xlYXJfaGFzaG1hcHM7CisJfQorCisJcHJldiA9IGdpdmVuLT5wYXR0ZXJuOworCWN1ciA9IGdpdmVuLT5wYXR0ZXJuICsgMTsKKwluZXh0ID0gZ2l2ZW4tPnBhdHRlcm4gKyAyOworCisJd2hpbGUgKCpjdXIpIHsKKwkJLyogV2F0Y2ggZm9yIGdsb2IgY2hhcmFjdGVycyAnKicsICdcJywgJ1snLCAnPycgKi8KKwkJaWYgKCFpc19nbG9iX3NwZWNpYWwoKmN1cikpCisJCQlnb3RvIGluY3JlbWVudDsKKworCQkvKiBCdXQgb25seSBpZiAqcHJldiAhPSAnXFwnICovCisJCWlmICgqcHJldiA9PSAnXFwnKQorCQkJZ290byBpbmNyZW1lbnQ7CisKKwkJLyogQnV0IGFsbG93IHRoZSBpbml0aWFsICdcJyAqLworCQlpZiAoKmN1ciA9PSAnXFwnICYmCisJCSAgICBpc19nbG9iX3NwZWNpYWwoKm5leHQpKQorCQkJZ290byBpbmNyZW1lbnQ7CisKKwkJLyogQnV0IGEgdHJhaWxpbmcgJy8nIHRoZW4gJyonIGlzIGZpbmUgKi8KKwkJaWYgKCpwcmV2ID09ICcvJyAmJgorCQkgICAgKmN1ciA9PSAnKicgJiYKKwkJICAgICpuZXh0ID09IDApCisJCQlnb3RvIGluY3JlbWVudDsKKworCQkvKiBOb3QgYSBjb25lIHBhdHRlcm4uICovCisJCXdhcm5pbmcoXygidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciKSwgZ2l2ZW4tPnBhdHRlcm4pOworCQlnb3RvIGNsZWFyX2hhc2htYXBzOworCisJaW5jcmVtZW50OgorCQlwcmV2Kys7CisJCWN1cisrOworCQluZXh0Kys7CisJfQorCisJaWYgKGdpdmVuLT5wYXR0ZXJubGVuID4gMiAmJgorCSAgICAhc3RyY21wKGdpdmVuLT5wYXR0ZXJuICsgZ2l2ZW4tPnBhdHRlcm5sZW4gLSAyLCAiLyoiKSkgeworCQlpZiAoIShnaXZlbi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTkVHQVRJVkUpKSB7CisJCQkvKiBOb3QgYSBjb25lIHBhdHRlcm4uICovCisJCQl3YXJuaW5nKF8oInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIiksIGdpdmVuLT5wYXR0ZXJuKTsKKwkJCWdvdG8gY2xlYXJfaGFzaG1hcHM7CisJCX0KKworCQl0cnVuY2F0ZWQgPSBkdXBfYW5kX2ZpbHRlcl9wYXR0ZXJuKGdpdmVuLT5wYXR0ZXJuKTsKKworCQl0cmFuc2xhdGVkID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhdHRlcm5fZW50cnkpKTsKKwkJdHJhbnNsYXRlZC0+cGF0dGVybiA9IHRydW5jYXRlZDsKKwkJdHJhbnNsYXRlZC0+cGF0dGVybmxlbiA9IGdpdmVuLT5wYXR0ZXJubGVuIC0gMjsKKwkJaGFzaG1hcF9lbnRyeV9pbml0KCZ0cmFuc2xhdGVkLT5lbnQsCisJCQkJICAgaWdub3JlX2Nhc2UgPworCQkJCSAgIHN0cmloYXNoKHRyYW5zbGF0ZWQtPnBhdHRlcm4pIDoKKwkJCQkgICBzdHJoYXNoKHRyYW5zbGF0ZWQtPnBhdHRlcm4pKTsKKworCQlpZiAoIWhhc2htYXBfZ2V0X2VudHJ5KCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsCisJCQkJICAgICAgIHRyYW5zbGF0ZWQsIGVudCwgTlVMTCkpIHsKKwkJCS8qIFdlIGRpZCBub3Qgc2VlIHRoZSAicGFyZW50IiBpbmNsdWRlZCAqLworCQkJd2FybmluZyhfKCJ1bnJlY29nbml6ZWQgbmVnYXRpdmUgcGF0dGVybjogJyVzJyIpLAorCQkJCWdpdmVuLT5wYXR0ZXJuKTsKKwkJCWZyZWUodHJ1bmNhdGVkKTsKKwkJCWZyZWUodHJhbnNsYXRlZCk7CisJCQlnb3RvIGNsZWFyX2hhc2htYXBzOworCQl9CisKKwkJaGFzaG1hcF9hZGQoJnBsLT5wYXJlbnRfaGFzaG1hcCwgJnRyYW5zbGF0ZWQtPmVudCk7CisJCWhhc2htYXBfcmVtb3ZlKCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsICZ0cmFuc2xhdGVkLT5lbnQsICZkYXRhKTsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChnaXZlbi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTkVHQVRJVkUpIHsKKwkJd2FybmluZyhfKCJ1bnJlY29nbml6ZWQgbmVnYXRpdmUgcGF0dGVybjogJyVzJyIpLAorCQkJZ2l2ZW4tPnBhdHRlcm4pOworCQlnb3RvIGNsZWFyX2hhc2htYXBzOworCX0KKworCXRyYW5zbGF0ZWQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcGF0dGVybl9lbnRyeSkpOworCisJdHJhbnNsYXRlZC0+cGF0dGVybiA9IGR1cF9hbmRfZmlsdGVyX3BhdHRlcm4oZ2l2ZW4tPnBhdHRlcm4pOworCXRyYW5zbGF0ZWQtPnBhdHRlcm5sZW4gPSBnaXZlbi0+cGF0dGVybmxlbjsKKwloYXNobWFwX2VudHJ5X2luaXQoJnRyYW5zbGF0ZWQtPmVudCwKKwkJCSAgIGlnbm9yZV9jYXNlID8KKwkJCSAgIHN0cmloYXNoKHRyYW5zbGF0ZWQtPnBhdHRlcm4pIDoKKwkJCSAgIHN0cmhhc2godHJhbnNsYXRlZC0+cGF0dGVybikpOworCisJaGFzaG1hcF9hZGQoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwgJnRyYW5zbGF0ZWQtPmVudCk7CisKKwlpZiAoaGFzaG1hcF9nZXRfZW50cnkoJnBsLT5wYXJlbnRfaGFzaG1hcCwgdHJhbnNsYXRlZCwgZW50LCBOVUxMKSkgeworCQkvKiB3ZSBhbHJlYWR5IGluY2x1ZGVkIHRoaXMgYXQgdGhlIHBhcmVudCBsZXZlbCAqLworCQl3YXJuaW5nKF8oInlvdXIgc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IGhhdmUgaXNzdWVzOiBwYXR0ZXJuICclcycgaXMgcmVwZWF0ZWQiKSwKKwkJCWdpdmVuLT5wYXR0ZXJuKTsKKwkJaGFzaG1hcF9yZW1vdmUoJnBsLT5wYXJlbnRfaGFzaG1hcCwgJnRyYW5zbGF0ZWQtPmVudCwgJmRhdGEpOworCQlmcmVlKGRhdGEpOworCQlmcmVlKHRyYW5zbGF0ZWQpOworCX0KKworCXJldHVybjsKKworY2xlYXJfaGFzaG1hcHM6CisJd2FybmluZyhfKCJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIikpOworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZwbC0+cGFyZW50X2hhc2htYXAsIHN0cnVjdCBwYXR0ZXJuX2VudHJ5LCBlbnQpOworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsIHN0cnVjdCBwYXR0ZXJuX2VudHJ5LCBlbnQpOworCXBsLT51c2VfY29uZV9wYXR0ZXJucyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgaGFzaG1hcF9jb250YWluc19wYXRoKHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJIHN0cnVjdCBzdHJidWYgKnBhdHRlcm4pCit7CisJc3RydWN0IHBhdHRlcm5fZW50cnkgcDsKKworCS8qIENoZWNrIHN0cmFpZ2h0IG1hcHBpbmcgKi8KKwlwLnBhdHRlcm4gPSBwYXR0ZXJuLT5idWY7CisJcC5wYXR0ZXJubGVuID0gcGF0dGVybi0+bGVuOworCWhhc2htYXBfZW50cnlfaW5pdCgmcC5lbnQsCisJCQkgICBpZ25vcmVfY2FzZSA/CisJCQkgICBzdHJpaGFzaChwLnBhdHRlcm4pIDoKKwkJCSAgIHN0cmhhc2gocC5wYXR0ZXJuKSk7CisJcmV0dXJuICEhaGFzaG1hcF9nZXRfZW50cnkobWFwLCAmcCwgZW50LCBOVUxMKTsKK30KKworaW50IGhhc2htYXBfY29udGFpbnNfcGFyZW50KHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpCit7CisJY2hhciAqc2xhc2hfcG9zOworCisJc3RyYnVmX3NldGxlbihidWZmZXIsIDApOworCisJaWYgKHBhdGhbMF0gIT0gJy8nKQorCQlzdHJidWZfYWRkY2goYnVmZmVyLCAnLycpOworCisJc3RyYnVmX2FkZHN0cihidWZmZXIsIHBhdGgpOworCisJc2xhc2hfcG9zID0gc3RycmNocihidWZmZXItPmJ1ZiwgJy8nKTsKKworCXdoaWxlIChzbGFzaF9wb3MgPiBidWZmZXItPmJ1ZikgeworCQlzdHJidWZfc2V0bGVuKGJ1ZmZlciwgc2xhc2hfcG9zIC0gYnVmZmVyLT5idWYpOworCisJCWlmIChoYXNobWFwX2NvbnRhaW5zX3BhdGgobWFwLCBidWZmZXIpKQorCQkJcmV0dXJuIDE7CisKKwkJc2xhc2hfcG9zID0gc3RycmNocihidWZmZXItPmJ1ZiwgJy8nKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhZGRfcGF0dGVybihjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmJhc2UsCisJCSBpbnQgYmFzZWxlbiwgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsIGludCBzcmNwb3MpCit7CisJc3RydWN0IHBhdGhfcGF0dGVybiAqcGF0dGVybjsKKwlpbnQgcGF0dGVybmxlbjsKKwl1bnNpZ25lZCBmbGFnczsKKwlpbnQgbm93aWxkY2FyZGxlbjsKKworCXBhcnNlX3BhdGhfcGF0dGVybigmc3RyaW5nLCAmcGF0dGVybmxlbiwgJmZsYWdzLCAmbm93aWxkY2FyZGxlbik7CisJaWYgKGZsYWdzICYgUEFUVEVSTl9GTEFHX01VU1RCRURJUikgeworCQlGTEVYUFRSX0FMTE9DX01FTShwYXR0ZXJuLCBwYXR0ZXJuLCBzdHJpbmcsIHBhdHRlcm5sZW4pOworCX0gZWxzZSB7CisJCXBhdHRlcm4gPSB4bWFsbG9jKHNpemVvZigqcGF0dGVybikpOworCQlwYXR0ZXJuLT5wYXR0ZXJuID0gc3RyaW5nOworCX0KKwlwYXR0ZXJuLT5wYXR0ZXJubGVuID0gcGF0dGVybmxlbjsKKwlwYXR0ZXJuLT5ub3dpbGRjYXJkbGVuID0gbm93aWxkY2FyZGxlbjsKKwlwYXR0ZXJuLT5iYXNlID0gYmFzZTsKKwlwYXR0ZXJuLT5iYXNlbGVuID0gYmFzZWxlbjsKKwlwYXR0ZXJuLT5mbGFncyA9IGZsYWdzOworCXBhdHRlcm4tPnNyY3BvcyA9IHNyY3BvczsKKwlBTExPQ19HUk9XKHBsLT5wYXR0ZXJucywgcGwtPm5yICsgMSwgcGwtPmFsbG9jKTsKKwlwbC0+cGF0dGVybnNbcGwtPm5yKytdID0gcGF0dGVybjsKKwlwYXR0ZXJuLT5wbCA9IHBsOworCisJYWRkX3BhdHRlcm5fdG9faGFzaHNldHMocGwsIHBhdHRlcm4pOworfQorCitzdGF0aWMgaW50IHJlYWRfc2tpcF93b3JrdHJlZV9maWxlX2Zyb21faW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgICAgIHNpemVfdCAqc2l6ZV9vdXQsIGNoYXIgKipkYXRhX291dCwKKwkJCQkJICAgICAgc3RydWN0IG9pZF9zdGF0ICpvaWRfc3RhdCkKK3sKKwlpbnQgcG9zLCBsZW47CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBwYXRoLCBsZW4pOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKCFjZV9za2lwX3dvcmt0cmVlKGlzdGF0ZS0+Y2FjaGVbcG9zXSkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBkb19yZWFkX2Jsb2IoJmlzdGF0ZS0+Y2FjaGVbcG9zXS0+b2lkLCBvaWRfc3RhdCwgc2l6ZV9vdXQsIGRhdGFfb3V0KTsKK30KKworLyoKKyAqIEZyZWVzIG1lbW9yeSB3aXRoaW4gcGwgd2hpY2ggd2FzIGFsbG9jYXRlZCBmb3IgZXhjbHVkZSBwYXR0ZXJucyBhbmQKKyAqIHRoZSBmaWxlIGJ1ZmZlci4gIERvZXMgbm90IGZyZWUgcGwgaXRzZWxmLgorICovCit2b2lkIGNsZWFyX3BhdHRlcm5fbGlzdChzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwbC0+bnI7IGkrKykKKwkJZnJlZShwbC0+cGF0dGVybnNbaV0pOworCWZyZWUocGwtPnBhdHRlcm5zKTsKKwlmcmVlKHBsLT5maWxlYnVmKTsKKworCW1lbXNldChwbCwgMCwgc2l6ZW9mKCpwbCkpOworfQorCitzdGF0aWMgdm9pZCB0cmltX3RyYWlsaW5nX3NwYWNlcyhjaGFyICpidWYpCit7CisJY2hhciAqcCwgKmxhc3Rfc3BhY2UgPSBOVUxMOworCisJZm9yIChwID0gYnVmOyAqcDsgcCsrKQorCQlzd2l0Y2ggKCpwKSB7CisJCWNhc2UgJyAnOgorCQkJaWYgKCFsYXN0X3NwYWNlKQorCQkJCWxhc3Rfc3BhY2UgPSBwOworCQkJYnJlYWs7CisJCWNhc2UgJ1xcJzoKKwkJCXArKzsKKwkJCWlmICghKnApCisJCQkJcmV0dXJuOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCWxhc3Rfc3BhY2UgPSBOVUxMOworCQl9CisKKwlpZiAobGFzdF9zcGFjZSkKKwkJKmxhc3Rfc3BhY2UgPSAnXDAnOworfQorCisvKgorICogR2l2ZW4gYSBzdWJkaXJlY3RvcnkgbmFtZSBhbmQgImRpciIgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LAorICogc2VhcmNoIHRoZSBzdWJkaXIgaW4gImRpciIgYW5kIHJldHVybiBpdCwgb3IgY3JlYXRlIGEgbmV3IG9uZSBpZiBpdAorICogZG9lcyBub3QgZXhpc3QgaW4gImRpciIuCisgKgorICogSWYgIm5hbWUiIGhhcyB0aGUgdHJhaWxpbmcgc2xhc2gsIGl0J2xsIGJlIGV4Y2x1ZGVkIGluIHRoZSBzZWFyY2guCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqbG9va3VwX3VudHJhY2tlZChzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YywKKwkJCQkJCSAgICBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZGlyLAorCQkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJaW50IGZpcnN0LCBsYXN0OworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkOworCWlmICghZGlyKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAobGVuICYmIG5hbWVbbGVuIC0gMV0gPT0gJy8nKQorCQlsZW4tLTsKKwlmaXJzdCA9IDA7CisJbGFzdCA9IGRpci0+ZGlyc19ucjsKKwl3aGlsZSAobGFzdCA+IGZpcnN0KSB7CisJCWludCBjbXAsIG5leHQgPSBmaXJzdCArICgobGFzdCAtIGZpcnN0KSA+PiAxKTsKKwkJZCA9IGRpci0+ZGlyc1tuZXh0XTsKKwkJY21wID0gc3RybmNtcChuYW1lLCBkLT5uYW1lLCBsZW4pOworCQlpZiAoIWNtcCAmJiBzdHJsZW4oZC0+bmFtZSkgPiBsZW4pCisJCQljbXAgPSAtMTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gZDsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCisJdWMtPmRpcl9jcmVhdGVkKys7CisJRkxFWF9BTExPQ19NRU0oZCwgbmFtZSwgbmFtZSwgbGVuKTsKKworCUFMTE9DX0dST1coZGlyLT5kaXJzLCBkaXItPmRpcnNfbnIgKyAxLCBkaXItPmRpcnNfYWxsb2MpOworCU1PVkVfQVJSQVkoZGlyLT5kaXJzICsgZmlyc3QgKyAxLCBkaXItPmRpcnMgKyBmaXJzdCwKKwkJICAgZGlyLT5kaXJzX25yIC0gZmlyc3QpOworCWRpci0+ZGlyc19ucisrOworCWRpci0+ZGlyc1tmaXJzdF0gPSBkOworCXJldHVybiBkOworfQorCitzdGF0aWMgdm9pZCBkb19pbnZhbGlkYXRlX2dpdGlnbm9yZShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZGlyKQoreworCWludCBpOworCWRpci0+dmFsaWQgPSAwOworCWRpci0+dW50cmFja2VkX25yID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5kaXJzX25yOyBpKyspCisJCWRvX2ludmFsaWRhdGVfZ2l0aWdub3JlKGRpci0+ZGlyc1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfZ2l0aWdub3JlKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVjLAorCQkJCSBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZGlyKQoreworCXVjLT5naXRpZ25vcmVfaW52YWxpZGF0ZWQrKzsKKwlkb19pbnZhbGlkYXRlX2dpdGlnbm9yZShkaXIpOworfQorCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2RpcmVjdG9yeShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YywKKwkJCQkgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmRpcikKK3sKKwlpbnQgaTsKKworCS8qCisJICogSW52YWxpZGF0aW9uIGluY3JlbWVudCBoZXJlIGlzIGp1c3Qgcm91Z2hseSBjb3JyZWN0LiBJZgorCSAqIHVudHJhY2tlZF9uciBvciBhbnkgb2YgZGlyc1tdLnJlY3Vyc2UgaXMgbm9uLXplcm8sIHdlCisJICogc2hvdWxkIGluY3JlbWVudCBkaXJfaW52YWxpZGF0ZWQgdG9vLiBCdXQgdGhhdCdzIG1vcmUKKwkgKiBleHBlbnNpdmUgdG8gZG8uCisJICovCisJaWYgKGRpci0+dmFsaWQpCisJCXVjLT5kaXJfaW52YWxpZGF0ZWQrKzsKKworCWRpci0+dmFsaWQgPSAwOworCWRpci0+dW50cmFja2VkX25yID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5kaXJzX25yOyBpKyspCisJCWRpci0+ZGlyc1tpXS0+cmVjdXJzZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BhdHRlcm5zX2Zyb21fYnVmZmVyKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJCSAgICBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCk7CisKKy8qCisgKiBHaXZlbiBhIGZpbGUgd2l0aCBuYW1lICJmbmFtZSIsIHJlYWQgaXQgKGVpdGhlciBmcm9tIGRpc2ssIG9yIGZyb20KKyAqIGFuIGluZGV4IGlmICdpc3RhdGUnIGlzIG5vbi1udWxsKSwgcGFyc2UgaXQgYW5kIHN0b3JlIHRoZQorICogZXhjbHVkZSBydWxlcyBpbiAicGwiLgorICoKKyAqIElmICJzcyIgaXMgbm90IE5VTEwsIGNvbXB1dGUgU0hBLTEgb2YgdGhlIGV4Y2x1ZGUgZmlsZSBhbmQgZmlsbAorICogc3RhdCBkYXRhIGZyb20gZGlzayAob25seSB2YWxpZCBpZiBhZGRfcGF0dGVybnMgcmV0dXJucyB6ZXJvKS4gSWYKKyAqIHNzX3ZhbGlkIGlzIG5vbi16ZXJvLCAic3MiIG11c3QgY29udGFpbiBnb29kIHZhbHVlIGFzIGlucHV0LgorICovCitzdGF0aWMgaW50IGFkZF9wYXR0ZXJucyhjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJCQlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQlzdHJ1Y3Qgb2lkX3N0YXQgKm9pZF9zdGF0KQoreworCXN0cnVjdCBzdGF0IHN0OworCWludCByOworCWludCBmZDsKKwlzaXplX3Qgc2l6ZSA9IDA7CisJY2hhciAqYnVmOworCisJZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCB8fCBmc3RhdChmZCwgJnN0KSA8IDApIHsKKwkJaWYgKGZkIDwgMCkKKwkJCXdhcm5fb25fZm9wZW5fZXJyb3JzKGZuYW1lKTsKKwkJZWxzZQorCQkJY2xvc2UoZmQpOworCQlpZiAoIWlzdGF0ZSkKKwkJCXJldHVybiAtMTsKKwkJciA9IHJlYWRfc2tpcF93b3JrdHJlZV9maWxlX2Zyb21faW5kZXgoaXN0YXRlLCBmbmFtZSwKKwkJCQkJCSAgICAgICAmc2l6ZSwgJmJ1ZiwKKwkJCQkJCSAgICAgICBvaWRfc3RhdCk7CisJCWlmIChyICE9IDEpCisJCQlyZXR1cm4gcjsKKwl9IGVsc2UgeworCQlzaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkJaWYgKHNpemUgPT0gMCkgeworCQkJaWYgKG9pZF9zdGF0KSB7CisJCQkJZmlsbF9zdGF0X2RhdGEoJm9pZF9zdGF0LT5zdGF0LCAmc3QpOworCQkJCW9pZGNweSgmb2lkX3N0YXQtPm9pZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfYmxvYik7CisJCQkJb2lkX3N0YXQtPnZhbGlkID0gMTsKKwkJCX0KKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJ1ZiA9IHhtYWxsb2N6KHNpemUpOworCQlpZiAocmVhZF9pbl9mdWxsKGZkLCBidWYsIHNpemUpICE9IHNpemUpIHsKKwkJCWZyZWUoYnVmKTsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlidWZbc2l6ZSsrXSA9ICdcbic7CisJCWNsb3NlKGZkKTsKKwkJaWYgKG9pZF9zdGF0KSB7CisJCQlpbnQgcG9zOworCQkJaWYgKG9pZF9zdGF0LT52YWxpZCAmJgorCQkJICAgICFtYXRjaF9zdGF0X2RhdGFfcmFjeShpc3RhdGUsICZvaWRfc3RhdC0+c3RhdCwgJnN0KSkKKwkJCQk7IC8qIG5vIGNvbnRlbnQgY2hhbmdlLCBzcy0+c2hhMSBzdGlsbCBnb29kICovCisJCQllbHNlIGlmIChpc3RhdGUgJiYKKwkJCQkgKHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgZm5hbWUsIHN0cmxlbihmbmFtZSkpKSA+PSAwICYmCisJCQkJICFjZV9zdGFnZShpc3RhdGUtPmNhY2hlW3Bvc10pICYmCisJCQkJIGNlX3VwdG9kYXRlKGlzdGF0ZS0+Y2FjaGVbcG9zXSkgJiYKKwkJCQkgIXdvdWxkX2NvbnZlcnRfdG9fZ2l0KGlzdGF0ZSwgZm5hbWUpKQorCQkJCW9pZGNweSgmb2lkX3N0YXQtPm9pZCwKKwkJCQkgICAgICAgJmlzdGF0ZS0+Y2FjaGVbcG9zXS0+b2lkKTsKKwkJCWVsc2UKKwkJCQloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGJ1Ziwgc2l6ZSwKKwkJCQkJCSAiYmxvYiIsICZvaWRfc3RhdC0+b2lkKTsKKwkJCWZpbGxfc3RhdF9kYXRhKCZvaWRfc3RhdC0+c3RhdCwgJnN0KTsKKwkJCW9pZF9zdGF0LT52YWxpZCA9IDE7CisJCX0KKwl9CisKKwlhZGRfcGF0dGVybnNfZnJvbV9idWZmZXIoYnVmLCBzaXplLCBiYXNlLCBiYXNlbGVuLCBwbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BhdHRlcm5zX2Zyb21fYnVmZmVyKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJCSAgICBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCkKK3sKKwlpbnQgaSwgbGluZW5vID0gMTsKKwljaGFyICplbnRyeTsKKworCWhhc2htYXBfaW5pdCgmcGwtPnJlY3Vyc2l2ZV9oYXNobWFwLCBwbF9oYXNobWFwX2NtcCwgTlVMTCwgMCk7CisJaGFzaG1hcF9pbml0KCZwbC0+cGFyZW50X2hhc2htYXAsIHBsX2hhc2htYXBfY21wLCBOVUxMLCAwKTsKKworCXBsLT5maWxlYnVmID0gYnVmOworCisJaWYgKHNraXBfdXRmOF9ib20oJmJ1Ziwgc2l6ZSkpCisJCXNpemUgLT0gYnVmIC0gcGwtPmZpbGVidWY7CisKKwllbnRyeSA9IGJ1ZjsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKGJ1ZltpXSA9PSAnXG4nKSB7CisJCQlpZiAoZW50cnkgIT0gYnVmICsgaSAmJiBlbnRyeVswXSAhPSAnIycpIHsKKwkJCQlidWZbaSAtIChpICYmIGJ1ZltpLTFdID09ICdccicpXSA9IDA7CisJCQkJdHJpbV90cmFpbGluZ19zcGFjZXMoZW50cnkpOworCQkJCWFkZF9wYXR0ZXJuKGVudHJ5LCBiYXNlLCBiYXNlbGVuLCBwbCwgbGluZW5vKTsKKwkJCX0KKwkJCWxpbmVubysrOworCQkJZW50cnkgPSBidWYgKyBpICsgMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfdG9fbGlzdChjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqYmFzZSwKKwkJCQkgICBpbnQgYmFzZWxlbiwgc3RydWN0IHBhdHRlcm5fbGlzdCAqcGwsCisJCQkJICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJcmV0dXJuIGFkZF9wYXR0ZXJucyhmbmFtZSwgYmFzZSwgYmFzZWxlbiwgcGwsIGlzdGF0ZSwgTlVMTCk7Cit9CisKK2ludCBhZGRfcGF0dGVybnNfZnJvbV9ibG9iX3RvX2xpc3QoCisJc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCWNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCXN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKQoreworCWNoYXIgKmJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgcjsKKworCXIgPSBkb19yZWFkX2Jsb2Iob2lkLCBOVUxMLCAmc2l6ZSwgJmJ1Zik7CisJaWYgKHIgIT0gMSkKKwkJcmV0dXJuIHI7CisKKwlhZGRfcGF0dGVybnNfZnJvbV9idWZmZXIoYnVmLCBzaXplLCBiYXNlLCBiYXNlbGVuLCBwbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwYXR0ZXJuX2xpc3QgKmFkZF9wYXR0ZXJuX2xpc3Qoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkgICAgICBpbnQgZ3JvdXBfdHlwZSwgY29uc3QgY2hhciAqc3JjKQoreworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsOworCXN0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgKmdyb3VwOworCisJZ3JvdXAgPSAmZGlyLT5leGNsdWRlX2xpc3RfZ3JvdXBbZ3JvdXBfdHlwZV07CisJQUxMT0NfR1JPVyhncm91cC0+cGwsIGdyb3VwLT5uciArIDEsIGdyb3VwLT5hbGxvYyk7CisJcGwgPSAmZ3JvdXAtPnBsW2dyb3VwLT5ucisrXTsKKwltZW1zZXQocGwsIDAsIHNpemVvZigqcGwpKTsKKwlwbC0+c3JjID0gc3JjOworCXJldHVybiBwbDsKK30KKworLyoKKyAqIFVzZWQgdG8gc2V0IHVwIGNvcmUuZXhjbHVkZXNmaWxlIGFuZCAuZ2l0L2luZm8vZXhjbHVkZSBsaXN0cy4KKyAqLworc3RhdGljIHZvaWQgYWRkX3BhdHRlcm5zX2Zyb21fZmlsZV8xKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCSAgICAgc3RydWN0IG9pZF9zdGF0ICpvaWRfc3RhdCkKK3sKKwlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbDsKKwkvKgorCSAqIGNhdGNoIHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCkgdGhhdCdzIGNhbGxlZCBiZWZvcmUKKwkgKiBkaXItPnVudHJhY2tlZCBpcyBhc3NpZ25lZC4gVGhhdCBmdW5jdGlvbiBiZWhhdmVzCisJICogZGlmZmVyZW50bHkgd2hlbiBkaXItPnVudHJhY2tlZCBpcyBub24tTlVMTC4KKwkgKi8KKwlpZiAoIWRpci0+dW50cmFja2VkKQorCQlkaXItPnVubWFuYWdlZF9leGNsdWRlX2ZpbGVzKys7CisJcGwgPSBhZGRfcGF0dGVybl9saXN0KGRpciwgRVhDX0ZJTEUsIGZuYW1lKTsKKwlpZiAoYWRkX3BhdHRlcm5zKGZuYW1lLCAiIiwgMCwgcGwsIE5VTEwsIG9pZF9zdGF0KSA8IDApCisJCWRpZShfKCJjYW5ub3QgdXNlICVzIGFzIGFuIGV4Y2x1ZGUgZmlsZSIpLCBmbmFtZSk7Cit9CisKK3ZvaWQgYWRkX3BhdHRlcm5zX2Zyb21fZmlsZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpmbmFtZSkKK3sKKwlkaXItPnVubWFuYWdlZF9leGNsdWRlX2ZpbGVzKys7IC8qIHNlZSB2YWxpZGF0ZV91bnRyYWNrZWRfY2FjaGUoKSAqLworCWFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfMShkaXIsIGZuYW1lLCBOVUxMKTsKK30KKworaW50IG1hdGNoX2Jhc2VuYW1lKGNvbnN0IGNoYXIgKmJhc2VuYW1lLCBpbnQgYmFzZW5hbWVsZW4sCisJCSAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGludCBwcmVmaXgsIGludCBwYXR0ZXJubGVuLAorCQkgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpZiAocHJlZml4ID09IHBhdHRlcm5sZW4pIHsKKwkJaWYgKHBhdHRlcm5sZW4gPT0gYmFzZW5hbWVsZW4gJiYKKwkJICAgICFmc3BhdGhuY21wKHBhdHRlcm4sIGJhc2VuYW1lLCBiYXNlbmFtZWxlbikpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGZsYWdzICYgUEFUVEVSTl9GTEFHX0VORFNXSVRIKSB7CisJCS8qICIqbGl0ZXJhbCIgbWF0Y2hpbmcgYWdhaW5zdCAiZm9vbGl0ZXJhbCIgKi8KKwkJaWYgKHBhdHRlcm5sZW4gLSAxIDw9IGJhc2VuYW1lbGVuICYmCisJCSAgICAhZnNwYXRobmNtcChwYXR0ZXJuICsgMSwKKwkJCQkgICBiYXNlbmFtZSArIGJhc2VuYW1lbGVuIC0gKHBhdHRlcm5sZW4gLSAxKSwKKwkJCQkgICBwYXR0ZXJubGVuIC0gMSkpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlpZiAoZm5tYXRjaF9pY2FzZV9tZW0ocGF0dGVybiwgcGF0dGVybmxlbiwKKwkJCQkgICAgICBiYXNlbmFtZSwgYmFzZW5hbWVsZW4sCisJCQkJICAgICAgMCkgPT0gMCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG1hdGNoX3BhdGhuYW1lKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgcGF0aGxlbiwKKwkJICAgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJCSAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGludCBwcmVmaXgsIGludCBwYXR0ZXJubGVuLAorCQkgICB1bnNpZ25lZCBmbGFncykKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWludCBuYW1lbGVuOworCisJLyoKKwkgKiBtYXRjaCB3aXRoIEZOTV9QQVRITkFNRTsgdGhlIHBhdHRlcm4gaGFzIGJhc2UgaW1wbGljaXRseQorCSAqIGluIGZyb250IG9mIGl0LgorCSAqLworCWlmICgqcGF0dGVybiA9PSAnLycpIHsKKwkJcGF0dGVybisrOworCQlwYXR0ZXJubGVuLS07CisJCXByZWZpeC0tOworCX0KKworCS8qCisJICogYmFzZWxlbiBkb2VzIG5vdCBjb3VudCB0aGUgdHJhaWxpbmcgc2xhc2guIGJhc2VbXSBtYXkgb3IKKwkgKiBtYXkgbm90IGVuZCB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggdGhvdWdoLgorCSAqLworCWlmIChwYXRobGVuIDwgYmFzZWxlbiArIDEgfHwKKwkgICAgKGJhc2VsZW4gJiYgcGF0aG5hbWVbYmFzZWxlbl0gIT0gJy8nKSB8fAorCSAgICBmc3BhdGhuY21wKHBhdGhuYW1lLCBiYXNlLCBiYXNlbGVuKSkKKwkJcmV0dXJuIDA7CisKKwluYW1lbGVuID0gYmFzZWxlbiA/IHBhdGhsZW4gLSBiYXNlbGVuIC0gMSA6IHBhdGhsZW47CisJbmFtZSA9IHBhdGhuYW1lICsgcGF0aGxlbiAtIG5hbWVsZW47CisKKwlpZiAocHJlZml4KSB7CisJCS8qCisJCSAqIGlmIHRoZSBub24td2lsZGNhcmQgcGFydCBpcyBsb25nZXIgdGhhbiB0aGUKKwkJICogcmVtYWluaW5nIHBhdGhuYW1lLCBzdXJlbHkgaXQgY2Fubm90IG1hdGNoLgorCQkgKi8KKwkJaWYgKHByZWZpeCA+IG5hbWVsZW4pCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZnNwYXRobmNtcChwYXR0ZXJuLCBuYW1lLCBwcmVmaXgpKQorCQkJcmV0dXJuIDA7CisJCXBhdHRlcm4gKz0gcHJlZml4OworCQlwYXR0ZXJubGVuIC09IHByZWZpeDsKKwkJbmFtZSAgICArPSBwcmVmaXg7CisJCW5hbWVsZW4gLT0gcHJlZml4OworCisJCS8qCisJCSAqIElmIHRoZSB3aG9sZSBwYXR0ZXJuIGRpZCBub3QgaGF2ZSBhIHdpbGRjYXJkLAorCQkgKiB0aGVuIG91ciBwcmVmaXggbWF0Y2ggaXMgYWxsIHdlIG5lZWQ7IHdlCisJCSAqIGRvIG5vdCBuZWVkIHRvIGNhbGwgZm5tYXRjaCBhdCBhbGwuCisJCSAqLworCQlpZiAoIXBhdHRlcm5sZW4gJiYgIW5hbWVsZW4pCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gZm5tYXRjaF9pY2FzZV9tZW0ocGF0dGVybiwgcGF0dGVybmxlbiwKKwkJCQkgbmFtZSwgbmFtZWxlbiwKKwkJCQkgV01fUEFUSE5BTUUpID09IDA7Cit9CisKKy8qCisgKiBTY2FuIHRoZSBnaXZlbiBleGNsdWRlIGxpc3QgaW4gcmV2ZXJzZSB0byBzZWUgd2hldGhlciBwYXRobmFtZQorICogc2hvdWxkIGJlIGlnbm9yZWQuICBUaGUgZmlyc3QgbWF0Y2ggKGkuZS4gdGhlIGxhc3Qgb24gdGhlIGxpc3QpLCBpZgorICogYW55LCBkZXRlcm1pbmVzIHRoZSBmYXRlLiAgUmV0dXJucyB0aGUgZXhjbHVkZV9saXN0IGVsZW1lbnQgd2hpY2gKKyAqIG1hdGNoZWQsIG9yIE5VTEwgZm9yIHVuZGVjaWRlZC4KKyAqLworc3RhdGljIHN0cnVjdCBwYXRoX3BhdHRlcm4gKmxhc3RfbWF0Y2hpbmdfcGF0dGVybl9mcm9tX2xpc3QoY29uc3QgY2hhciAqcGF0aG5hbWUsCisJCQkJCQkgICAgICAgaW50IHBhdGhsZW4sCisJCQkJCQkgICAgICAgY29uc3QgY2hhciAqYmFzZW5hbWUsCisJCQkJCQkgICAgICAgaW50ICpkdHlwZSwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpyZXMgPSBOVUxMOyAvKiB1bmRlY2lkZWQgKi8KKwlpbnQgaTsKKworCWlmICghcGwtPm5yKQorCQlyZXR1cm4gTlVMTDsJLyogdW5kZWZpbmVkICovCisKKwlmb3IgKGkgPSBwbC0+bnIgLSAxOyAwIDw9IGk7IGktLSkgeworCQlzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpwYXR0ZXJuID0gcGwtPnBhdHRlcm5zW2ldOworCQljb25zdCBjaGFyICpleGNsdWRlID0gcGF0dGVybi0+cGF0dGVybjsKKwkJaW50IHByZWZpeCA9IHBhdHRlcm4tPm5vd2lsZGNhcmRsZW47CisKKwkJaWYgKHBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX01VU1RCRURJUikgeworCQkJKmR0eXBlID0gcmVzb2x2ZV9kdHlwZSgqZHR5cGUsIGlzdGF0ZSwgcGF0aG5hbWUsIHBhdGhsZW4pOworCQkJaWYgKCpkdHlwZSAhPSBEVF9ESVIpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAocGF0dGVybi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTk9ESVIpIHsKKwkJCWlmIChtYXRjaF9iYXNlbmFtZShiYXNlbmFtZSwKKwkJCQkJICAgcGF0aGxlbiAtIChiYXNlbmFtZSAtIHBhdGhuYW1lKSwKKwkJCQkJICAgZXhjbHVkZSwgcHJlZml4LCBwYXR0ZXJuLT5wYXR0ZXJubGVuLAorCQkJCQkgICBwYXR0ZXJuLT5mbGFncykpIHsKKwkJCQlyZXMgPSBwYXR0ZXJuOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlhc3NlcnQocGF0dGVybi0+YmFzZWxlbiA9PSAwIHx8CisJCSAgICAgICBwYXR0ZXJuLT5iYXNlW3BhdHRlcm4tPmJhc2VsZW4gLSAxXSA9PSAnLycpOworCQlpZiAobWF0Y2hfcGF0aG5hbWUocGF0aG5hbWUsIHBhdGhsZW4sCisJCQkJICAgcGF0dGVybi0+YmFzZSwKKwkJCQkgICBwYXR0ZXJuLT5iYXNlbGVuID8gcGF0dGVybi0+YmFzZWxlbiAtIDEgOiAwLAorCQkJCSAgIGV4Y2x1ZGUsIHByZWZpeCwgcGF0dGVybi0+cGF0dGVybmxlbiwKKwkJCQkgICBwYXR0ZXJuLT5mbGFncykpIHsKKwkJCXJlcyA9IHBhdHRlcm47CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmVzOworfQorCisvKgorICogU2NhbiB0aGUgbGlzdCBvZiBwYXR0ZXJucyB0byBkZXRlcm1pbmUgaWYgdGhlIG9yZGVyZWQgbGlzdAorICogb2YgcGF0dGVybnMgbWF0Y2hlcyBvbiAncGF0aG5hbWUnLgorICoKKyAqIFJldHVybiAxIGZvciBhIG1hdGNoLCAwIGZvciBub3QgbWF0Y2hlZCBhbmQgLTEgZm9yIHVuZGVjaWRlZC4KKyAqLworZW51bSBwYXR0ZXJuX21hdGNoX3Jlc3VsdCBwYXRoX21hdGNoZXNfcGF0dGVybl9saXN0KAorCQkJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgcGF0aGxlbiwKKwkJCQljb25zdCBjaGFyICpiYXNlbmFtZSwgaW50ICpkdHlwZSwKKwkJCQlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCwKKwkJCQlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpwYXR0ZXJuOworCXN0cnVjdCBzdHJidWYgcGFyZW50X3BhdGhuYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlc3VsdCA9IE5PVF9NQVRDSEVEOworCWNvbnN0IGNoYXIgKnNsYXNoX3BvczsKKworCWlmICghcGwtPnVzZV9jb25lX3BhdHRlcm5zKSB7CisJCXBhdHRlcm4gPSBsYXN0X21hdGNoaW5nX3BhdHRlcm5fZnJvbV9saXN0KHBhdGhuYW1lLCBwYXRobGVuLCBiYXNlbmFtZSwKKwkJCQkJCQlkdHlwZSwgcGwsIGlzdGF0ZSk7CisJCWlmIChwYXR0ZXJuKSB7CisJCQlpZiAocGF0dGVybi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTkVHQVRJVkUpCisJCQkJcmV0dXJuIE5PVF9NQVRDSEVEOworCQkJZWxzZQorCQkJCXJldHVybiBNQVRDSEVEOworCQl9CisKKwkJcmV0dXJuIFVOREVDSURFRDsKKwl9CisKKwlpZiAocGwtPmZ1bGxfY29uZSkKKwkJcmV0dXJuIE1BVENIRUQ7CisKKwlzdHJidWZfYWRkY2goJnBhcmVudF9wYXRobmFtZSwgJy8nKTsKKwlzdHJidWZfYWRkKCZwYXJlbnRfcGF0aG5hbWUsIHBhdGhuYW1lLCBwYXRobGVuKTsKKworCWlmIChoYXNobWFwX2NvbnRhaW5zX3BhdGgoJnBsLT5yZWN1cnNpdmVfaGFzaG1hcCwKKwkJCQkgICZwYXJlbnRfcGF0aG5hbWUpKSB7CisJCXJlc3VsdCA9IE1BVENIRURfUkVDVVJTSVZFOworCQlnb3RvIGRvbmU7CisJfQorCisJc2xhc2hfcG9zID0gc3RycmNocihwYXJlbnRfcGF0aG5hbWUuYnVmLCAnLycpOworCisJaWYgKHNsYXNoX3BvcyA9PSBwYXJlbnRfcGF0aG5hbWUuYnVmKSB7CisJCS8qIGluY2x1ZGUgZXZlcnkgZmlsZSBpbiByb290ICovCisJCXJlc3VsdCA9IE1BVENIRUQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzdHJidWZfc2V0bGVuKCZwYXJlbnRfcGF0aG5hbWUsIHNsYXNoX3BvcyAtIHBhcmVudF9wYXRobmFtZS5idWYpOworCisJaWYgKGhhc2htYXBfY29udGFpbnNfcGF0aCgmcGwtPnBhcmVudF9oYXNobWFwLCAmcGFyZW50X3BhdGhuYW1lKSkgeworCQlyZXN1bHQgPSBNQVRDSEVEOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGhhc2htYXBfY29udGFpbnNfcGFyZW50KCZwbC0+cmVjdXJzaXZlX2hhc2htYXAsCisJCQkJICAgIHBhdGhuYW1lLAorCQkJCSAgICAmcGFyZW50X3BhdGhuYW1lKSkKKwkJcmVzdWx0ID0gTUFUQ0hFRF9SRUNVUlNJVkU7CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnBhcmVudF9wYXRobmFtZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCBwYXRoX3BhdHRlcm4gKmxhc3RfbWF0Y2hpbmdfcGF0dGVybl9mcm9tX2xpc3RzKAorCQlzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBwYXRobGVuLAorCQljb25zdCBjaGFyICpiYXNlbmFtZSwgaW50ICpkdHlwZV9wKQoreworCWludCBpLCBqOworCXN0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgKmdyb3VwOworCXN0cnVjdCBwYXRoX3BhdHRlcm4gKnBhdHRlcm47CisJZm9yIChpID0gRVhDX0NNREw7IGkgPD0gRVhDX0ZJTEU7IGkrKykgeworCQlncm91cCA9ICZkaXItPmV4Y2x1ZGVfbGlzdF9ncm91cFtpXTsKKwkJZm9yIChqID0gZ3JvdXAtPm5yIC0gMTsgaiA+PSAwOyBqLS0pIHsKKwkJCXBhdHRlcm4gPSBsYXN0X21hdGNoaW5nX3BhdHRlcm5fZnJvbV9saXN0KAorCQkJCXBhdGhuYW1lLCBwYXRobGVuLCBiYXNlbmFtZSwgZHR5cGVfcCwKKwkJCQkmZ3JvdXAtPnBsW2pdLCBpc3RhdGUpOworCQkJaWYgKHBhdHRlcm4pCisJCQkJcmV0dXJuIHBhdHRlcm47CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBMb2FkcyB0aGUgcGVyLWRpcmVjdG9yeSBleGNsdWRlIGxpc3QgZm9yIHRoZSBzdWJzdHJpbmcgb2YgYmFzZQorICogd2hpY2ggaGFzIGEgY2hhciBsZW5ndGggb2YgYmFzZWxlbi4KKyAqLworc3RhdGljIHZvaWQgcHJlcF9leGNsdWRlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCit7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdF9ncm91cCAqZ3JvdXA7CisJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGw7CisJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKnN0ayA9IE5VTEw7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZDsKKwlpbnQgY3VycmVudDsKKworCWdyb3VwID0gJmRpci0+ZXhjbHVkZV9saXN0X2dyb3VwW0VYQ19ESVJTXTsKKworCS8qCisJICogUG9wIHRoZSBleGNsdWRlIGxpc3RzIGZyb20gdGhlIEVYQ0xfRElSUyBleGNsdWRlX2xpc3RfZ3JvdXAKKwkgKiB3aGljaCBvcmlnaW5hdGUgZnJvbSBkaXJlY3RvcmllcyBub3QgaW4gdGhlIHByZWZpeCBvZiB0aGUKKwkgKiBwYXRoIGJlaW5nIGNoZWNrZWQuCisJICovCisJd2hpbGUgKChzdGsgPSBkaXItPmV4Y2x1ZGVfc3RhY2spICE9IE5VTEwpIHsKKwkJaWYgKHN0ay0+YmFzZWxlbiA8PSBiYXNlbGVuICYmCisJCSAgICAhc3RybmNtcChkaXItPmJhc2VidWYuYnVmLCBiYXNlLCBzdGstPmJhc2VsZW4pKQorCQkJYnJlYWs7CisJCXBsID0gJmdyb3VwLT5wbFtkaXItPmV4Y2x1ZGVfc3RhY2stPmV4Y2x1ZGVfaXhdOworCQlkaXItPmV4Y2x1ZGVfc3RhY2sgPSBzdGstPnByZXY7CisJCWRpci0+cGF0dGVybiA9IE5VTEw7CisJCWZyZWUoKGNoYXIgKilwbC0+c3JjKTsgLyogc2VlIHN0cmJ1Zl9kZXRhY2goKSBiZWxvdyAqLworCQljbGVhcl9wYXR0ZXJuX2xpc3QocGwpOworCQlmcmVlKHN0ayk7CisJCWdyb3VwLT5uci0tOworCX0KKworCS8qIFNraXAgdHJhdmVyc2luZyBpbnRvIHN1YiBkaXJlY3RvcmllcyBpZiB0aGUgcGFyZW50IGlzIGV4Y2x1ZGVkICovCisJaWYgKGRpci0+cGF0dGVybikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBMYXp5IGluaXRpYWxpemF0aW9uLiBBbGwgY2FsbCBzaXRlcyBjdXJyZW50bHkganVzdAorCSAqIG1lbXNldChkaXIsIDAsIHNpemVvZigqZGlyKSkgYmVmb3JlIHVzZS4gQ2hhbmdpbmcgYWxsIG9mCisJICogdGhlbSBzZWVtcyBsb3RzIG9mIHdvcmsgZm9yIGxpdHRsZSBiZW5lZml0LgorCSAqLworCWlmICghZGlyLT5iYXNlYnVmLmJ1ZikKKwkJc3RyYnVmX2luaXQoJmRpci0+YmFzZWJ1ZiwgUEFUSF9NQVgpOworCisJLyogUmVhZCBmcm9tIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgYW5kIHB1c2ggdGhlbSBkb3duLiAqLworCWN1cnJlbnQgPSBzdGsgPyBzdGstPmJhc2VsZW4gOiAtMTsKKwlzdHJidWZfc2V0bGVuKCZkaXItPmJhc2VidWYsIGN1cnJlbnQgPCAwID8gMCA6IGN1cnJlbnQpOworCWlmIChkaXItPnVudHJhY2tlZCkKKwkJdW50cmFja2VkID0gc3RrID8gc3RrLT51Y2QgOiBkaXItPnVudHJhY2tlZC0+cm9vdDsKKwllbHNlCisJCXVudHJhY2tlZCA9IE5VTEw7CisKKwl3aGlsZSAoY3VycmVudCA8IGJhc2VsZW4pIHsKKwkJY29uc3QgY2hhciAqY3A7CisJCXN0cnVjdCBvaWRfc3RhdCBvaWRfc3RhdDsKKworCQlzdGsgPSB4Y2FsbG9jKDEsIHNpemVvZigqc3RrKSk7CisJCWlmIChjdXJyZW50IDwgMCkgeworCQkJY3AgPSBiYXNlOworCQkJY3VycmVudCA9IDA7CisJCX0gZWxzZSB7CisJCQljcCA9IHN0cmNocihiYXNlICsgY3VycmVudCArIDEsICcvJyk7CisJCQlpZiAoIWNwKQorCQkJCWRpZSgib29wcyBpbiBwcmVwX2V4Y2x1ZGUiKTsKKwkJCWNwKys7CisJCQl1bnRyYWNrZWQgPQorCQkJCWxvb2t1cF91bnRyYWNrZWQoZGlyLT51bnRyYWNrZWQsIHVudHJhY2tlZCwKKwkJCQkJCSBiYXNlICsgY3VycmVudCwKKwkJCQkJCSBjcCAtIGJhc2UgLSBjdXJyZW50KTsKKwkJfQorCQlzdGstPnByZXYgPSBkaXItPmV4Y2x1ZGVfc3RhY2s7CisJCXN0ay0+YmFzZWxlbiA9IGNwIC0gYmFzZTsKKwkJc3RrLT5leGNsdWRlX2l4ID0gZ3JvdXAtPm5yOworCQlzdGstPnVjZCA9IHVudHJhY2tlZDsKKwkJcGwgPSBhZGRfcGF0dGVybl9saXN0KGRpciwgRVhDX0RJUlMsIE5VTEwpOworCQlzdHJidWZfYWRkKCZkaXItPmJhc2VidWYsIGJhc2UgKyBjdXJyZW50LCBzdGstPmJhc2VsZW4gLSBjdXJyZW50KTsKKwkJYXNzZXJ0KHN0ay0+YmFzZWxlbiA9PSBkaXItPmJhc2VidWYubGVuKTsKKworCQkvKiBBYm9ydCBpZiB0aGUgZGlyZWN0b3J5IGlzIGV4Y2x1ZGVkICovCisJCWlmIChzdGstPmJhc2VsZW4pIHsKKwkJCWludCBkdCA9IERUX0RJUjsKKwkJCWRpci0+YmFzZWJ1Zi5idWZbc3RrLT5iYXNlbGVuIC0gMV0gPSAwOworCQkJZGlyLT5wYXR0ZXJuID0gbGFzdF9tYXRjaGluZ19wYXR0ZXJuX2Zyb21fbGlzdHMoZGlyLAorCQkJCQkJCQkJaXN0YXRlLAorCQkJCWRpci0+YmFzZWJ1Zi5idWYsIHN0ay0+YmFzZWxlbiAtIDEsCisJCQkJZGlyLT5iYXNlYnVmLmJ1ZiArIGN1cnJlbnQsICZkdCk7CisJCQlkaXItPmJhc2VidWYuYnVmW3N0ay0+YmFzZWxlbiAtIDFdID0gJy8nOworCQkJaWYgKGRpci0+cGF0dGVybiAmJgorCQkJICAgIGRpci0+cGF0dGVybi0+ZmxhZ3MgJiBQQVRURVJOX0ZMQUdfTkVHQVRJVkUpCisJCQkJZGlyLT5wYXR0ZXJuID0gTlVMTDsKKwkJCWlmIChkaXItPnBhdHRlcm4pIHsKKwkJCQlkaXItPmV4Y2x1ZGVfc3RhY2sgPSBzdGs7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJLyogVHJ5IHRvIHJlYWQgcGVyLWRpcmVjdG9yeSBmaWxlICovCisJCW9pZGNscigmb2lkX3N0YXQub2lkKTsKKwkJb2lkX3N0YXQudmFsaWQgPSAwOworCQlpZiAoZGlyLT5leGNsdWRlX3Blcl9kaXIgJiYKKwkJICAgIC8qCisJCSAgICAgKiBJZiB3ZSBrbm93IHRoYXQgbm8gZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIGluCisJCSAgICAgKiB0aGlzIGRpcmVjdG9yeSAoaS5lLiB2YWxpZF9jYWNoZWRfZGlyKCkgaGFzCisJCSAgICAgKiBiZWVuIGV4ZWN1dGVkIGFuZCBzZXQgdW50cmFja2VkLT52YWxpZCkgLi4KKwkJICAgICAqLworCQkgICAgKCF1bnRyYWNrZWQgfHwgIXVudHJhY2tlZC0+dmFsaWQgfHwKKwkJICAgICAvKgorCQkgICAgICAqIC4uIGFuZCAuZ2l0aWdub3JlIGRvZXMgbm90IGV4aXN0IGJlZm9yZQorCQkgICAgICAqIChpLmUuIG51bGwgZXhjbHVkZV9vaWQpLiBUaGVuIHdlIGNhbiBza2lwCisJCSAgICAgICogbG9hZGluZyAuZ2l0aWdub3JlLCB3aGljaCB3b3VsZCByZXN1bHQgaW4KKwkJICAgICAgKiBFTk9FTlQgYW55d2F5LgorCQkgICAgICAqLworCQkgICAgICFpc19udWxsX29pZCgmdW50cmFja2VkLT5leGNsdWRlX29pZCkpKSB7CisJCQkvKgorCQkJICogZGlyLT5iYXNlYnVmIGdldHMgcmV1c2VkIGJ5IHRoZSB0cmF2ZXJzYWwsIGJ1dCB3ZQorCQkJICogbmVlZCBmbmFtZSB0byByZW1haW4gdW5jaGFuZ2VkIHRvIGVuc3VyZSB0aGUgc3JjCisJCQkgKiBtZW1iZXIgb2YgZWFjaCBzdHJ1Y3QgcGF0aF9wYXR0ZXJuIGNvcnJlY3RseQorCQkJICogYmFjay1yZWZlcmVuY2VzIGl0cyBzb3VyY2UgZmlsZS4gIE90aGVyIGludm9jYXRpb25zCisJCQkgKiBvZiBhZGRfcGF0dGVybl9saXN0IHByb3ZpZGUgc3RhYmxlIHN0cmluZ3MsIHNvIHdlCisJCQkgKiBzdHJidWZfZGV0YWNoKCkgYW5kIGZyZWUoKSBoZXJlIGluIHRoZSBjYWxsZXIuCisJCQkgKi8KKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRidWYoJnNiLCAmZGlyLT5iYXNlYnVmKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBkaXItPmV4Y2x1ZGVfcGVyX2Rpcik7CisJCQlwbC0+c3JjID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCQkJYWRkX3BhdHRlcm5zKHBsLT5zcmMsIHBsLT5zcmMsIHN0ay0+YmFzZWxlbiwgcGwsIGlzdGF0ZSwKKwkJCQkgICAgIHVudHJhY2tlZCA/ICZvaWRfc3RhdCA6IE5VTEwpOworCQl9CisJCS8qCisJCSAqIE5FRURTV09SSzogd2hlbiB1bnRyYWNrZWQgY2FjaGUgaXMgZW5hYmxlZCwgcHJlcF9leGNsdWRlKCkKKwkJICogd2lsbCBmaXJzdCBiZSBjYWxsZWQgaW4gdmFsaWRfY2FjaGVkX2RpcigpIHRoZW4gbWF5YmUgbWFueQorCQkgKiB0aW1lcyBtb3JlIGluIGxhc3RfbWF0Y2hpbmdfcGF0dGVybigpLiBXaGVuIHRoZSBjYWNoZSBpcworCQkgKiB1c2VkLCBsYXN0X21hdGNoaW5nX3BhdHRlcm4oKSB3aWxsIG5vdCBiZSBjYWxsZWQgYW5kCisJCSAqIHJlYWRpbmcgLmdpdGlnbm9yZSBjb250ZW50IHdpbGwgYmUgYSB3YXN0ZS4KKwkJICoKKwkJICogU28gd2hlbiBpdCdzIGNhbGxlZCBieSB2YWxpZF9jYWNoZWRfZGlyKCkgYW5kIHdlIGNhbiBnZXQKKwkJICogLmdpdGlnbm9yZSBTSEEtMSBmcm9tIHRoZSBpbmRleCAoaS5lLiAuZ2l0aWdub3JlIGlzIG5vdAorCQkgKiBtb2RpZmllZCBvbiB3b3JrIHRyZWUpLCB3ZSBjb3VsZCBkZWxheSByZWFkaW5nIHRoZQorCQkgKiAuZ2l0aWdub3JlIGNvbnRlbnQgdW50aWwgd2UgYWJzb2x1dGVseSBuZWVkIGl0IGluCisJCSAqIGxhc3RfbWF0Y2hpbmdfcGF0dGVybigpLiBCZSBjYXJlZnVsIGFib3V0IGlnbm9yZSBydWxlCisJCSAqIG9yZGVyLCB0aG91Z2gsIGlmIHlvdSBkbyB0aGF0LgorCQkgKi8KKwkJaWYgKHVudHJhY2tlZCAmJgorCQkgICAgIW9pZGVxKCZvaWRfc3RhdC5vaWQsICZ1bnRyYWNrZWQtPmV4Y2x1ZGVfb2lkKSkgeworCQkJaW52YWxpZGF0ZV9naXRpZ25vcmUoZGlyLT51bnRyYWNrZWQsIHVudHJhY2tlZCk7CisJCQlvaWRjcHkoJnVudHJhY2tlZC0+ZXhjbHVkZV9vaWQsICZvaWRfc3RhdC5vaWQpOworCQl9CisJCWRpci0+ZXhjbHVkZV9zdGFjayA9IHN0azsKKwkJY3VycmVudCA9IHN0ay0+YmFzZWxlbjsKKwl9CisJc3RyYnVmX3NldGxlbigmZGlyLT5iYXNlYnVmLCBiYXNlbGVuKTsKK30KKworLyoKKyAqIExvYWRzIHRoZSBleGNsdWRlIGxpc3RzIGZvciB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcGF0aG5hbWUsIHRoZW4KKyAqIHNjYW5zIGFsbCBleGNsdWRlIGxpc3RzIHRvIGRldGVybWluZSB3aGV0aGVyIHBhdGhuYW1lIGlzIGV4Y2x1ZGVkLgorICogUmV0dXJucyB0aGUgZXhjbHVkZV9saXN0IGVsZW1lbnQgd2hpY2ggbWF0Y2hlZCwgb3IgTlVMTCBmb3IKKyAqIHVuZGVjaWRlZC4KKyAqLworc3RydWN0IHBhdGhfcGF0dGVybiAqbGFzdF9tYXRjaGluZ19wYXR0ZXJuKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsCisJCQkJICAgICAgaW50ICpkdHlwZV9wKQoreworCWludCBwYXRobGVuID0gc3RybGVuKHBhdGhuYW1lKTsKKwljb25zdCBjaGFyICpiYXNlbmFtZSA9IHN0cnJjaHIocGF0aG5hbWUsICcvJyk7CisJYmFzZW5hbWUgPSAoYmFzZW5hbWUpID8gYmFzZW5hbWUrMSA6IHBhdGhuYW1lOworCisJcHJlcF9leGNsdWRlKGRpciwgaXN0YXRlLCBwYXRobmFtZSwgYmFzZW5hbWUtcGF0aG5hbWUpOworCisJaWYgKGRpci0+cGF0dGVybikKKwkJcmV0dXJuIGRpci0+cGF0dGVybjsKKworCXJldHVybiBsYXN0X21hdGNoaW5nX3BhdHRlcm5fZnJvbV9saXN0cyhkaXIsIGlzdGF0ZSwgcGF0aG5hbWUsIHBhdGhsZW4sCisJCQliYXNlbmFtZSwgZHR5cGVfcCk7Cit9CisKKy8qCisgKiBMb2FkcyB0aGUgZXhjbHVkZSBsaXN0cyBmb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHBhdGhuYW1lLCB0aGVuCisgKiBzY2FucyBhbGwgZXhjbHVkZSBsaXN0cyB0byBkZXRlcm1pbmUgd2hldGhlciBwYXRobmFtZSBpcyBleGNsdWRlZC4KKyAqIFJldHVybnMgMSBpZiB0cnVlLCBvdGhlcndpc2UgMC4KKyAqLworaW50IGlzX2V4Y2x1ZGVkKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQljb25zdCBjaGFyICpwYXRobmFtZSwgaW50ICpkdHlwZV9wKQoreworCXN0cnVjdCBwYXRoX3BhdHRlcm4gKnBhdHRlcm4gPQorCQlsYXN0X21hdGNoaW5nX3BhdHRlcm4oZGlyLCBpc3RhdGUsIHBhdGhuYW1lLCBkdHlwZV9wKTsKKwlpZiAocGF0dGVybikKKwkJcmV0dXJuIHBhdHRlcm4tPmZsYWdzICYgUEFUVEVSTl9GTEFHX05FR0FUSVZFID8gMCA6IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfZW50cnlfbmV3KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuKQoreworCXN0cnVjdCBkaXJfZW50cnkgKmVudDsKKworCUZMRVhfQUxMT0NfTUVNKGVudCwgbmFtZSwgcGF0aG5hbWUsIGxlbik7CisJZW50LT5sZW4gPSBsZW47CisJcmV0dXJuIGVudDsKK30KKworc3RhdGljIHN0cnVjdCBkaXJfZW50cnkgKmRpcl9hZGRfbmFtZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCSAgICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuKQoreworCWlmIChpbmRleF9maWxlX2V4aXN0cyhpc3RhdGUsIHBhdGhuYW1lLCBsZW4sIGlnbm9yZV9jYXNlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlBTExPQ19HUk9XKGRpci0+ZW50cmllcywgZGlyLT5ucisxLCBkaXItPmFsbG9jKTsKKwlyZXR1cm4gZGlyLT5lbnRyaWVzW2Rpci0+bnIrK10gPSBkaXJfZW50cnlfbmV3KHBhdGhuYW1lLCBsZW4pOworfQorCitzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfYWRkX2lnbm9yZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBsZW4pCit7CisJaWYgKCFpbmRleF9uYW1lX2lzX290aGVyKGlzdGF0ZSwgcGF0aG5hbWUsIGxlbikpCisJCXJldHVybiBOVUxMOworCisJQUxMT0NfR1JPVyhkaXItPmlnbm9yZWQsIGRpci0+aWdub3JlZF9ucisxLCBkaXItPmlnbm9yZWRfYWxsb2MpOworCXJldHVybiBkaXItPmlnbm9yZWRbZGlyLT5pZ25vcmVkX25yKytdID0gZGlyX2VudHJ5X25ldyhwYXRobmFtZSwgbGVuKTsKK30KKworZW51bSBleGlzdF9zdGF0dXMgeworCWluZGV4X25vbmV4aXN0ZW50ID0gMCwKKwlpbmRleF9kaXJlY3RvcnksCisJaW5kZXhfZ2l0ZGlyCit9OworCisvKgorICogRG8gbm90IHVzZSB0aGUgYWxwaGFiZXRpY2FsbHkgc29ydGVkIGluZGV4IHRvIGxvb2sgdXAKKyAqIHRoZSBkaXJlY3RvcnkgbmFtZTsgaW5zdGVhZCwgdXNlIHRoZSBjYXNlIGluc2Vuc2l0aXZlCisgKiBkaXJlY3RvcnkgaGFzaC4KKyAqLworc3RhdGljIGVudW0gZXhpc3Rfc3RhdHVzIGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXhfaWNhc2Uoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBsZW4pCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmIChpbmRleF9kaXJfZXhpc3RzKGlzdGF0ZSwgZGlybmFtZSwgbGVuKSkKKwkJcmV0dXJuIGluZGV4X2RpcmVjdG9yeTsKKworCWNlID0gaW5kZXhfZmlsZV9leGlzdHMoaXN0YXRlLCBkaXJuYW1lLCBsZW4sIGlnbm9yZV9jYXNlKTsKKwlpZiAoY2UgJiYgU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQlyZXR1cm4gaW5kZXhfZ2l0ZGlyOworCisJcmV0dXJuIGluZGV4X25vbmV4aXN0ZW50OworfQorCisvKgorICogVGhlIGluZGV4IHNvcnRzIGFscGhhYmV0aWNhbGx5IGJ5IGVudHJ5IG5hbWUsIHdoaWNoCisgKiBtZWFucyB0aGF0IGEgZ2l0bGluayBzb3J0cyBhcyAnXDAnIGF0IHRoZSBlbmQsIHdoaWxlCisgKiBhIGRpcmVjdG9yeSAod2hpY2ggaXMgZGVmaW5lZCBub3QgYXMgYW4gZW50cnksIGJ1dCBhcworICogdGhlIGZpbGVzIGl0IGNvbnRhaW5zKSB3aWxsIHNvcnQgd2l0aCB0aGUgJy8nIGF0IHRoZQorICogZW5kLgorICovCitzdGF0aWMgZW51bSBleGlzdF9zdGF0dXMgZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBsZW4pCit7CisJaW50IHBvczsKKworCWlmIChpZ25vcmVfY2FzZSkKKwkJcmV0dXJuIGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXhfaWNhc2UoaXN0YXRlLCBkaXJuYW1lLCBsZW4pOworCisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBkaXJuYW1lLCBsZW4pOworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zKytdOworCQl1bnNpZ25lZCBjaGFyIGVuZGNoYXI7CisKKwkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIGRpcm5hbWUsIGxlbikpCisJCQlicmVhazsKKwkJZW5kY2hhciA9IGNlLT5uYW1lW2xlbl07CisJCWlmIChlbmRjaGFyID4gJy8nKQorCQkJYnJlYWs7CisJCWlmIChlbmRjaGFyID09ICcvJykKKwkJCXJldHVybiBpbmRleF9kaXJlY3Rvcnk7CisJCWlmICghZW5kY2hhciAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gaW5kZXhfZ2l0ZGlyOworCX0KKwlyZXR1cm4gaW5kZXhfbm9uZXhpc3RlbnQ7Cit9CisKKy8qCisgKiBXaGVuIHdlIGZpbmQgYSBkaXJlY3Rvcnkgd2hlbiB0cmF2ZXJzaW5nIHRoZSBmaWxlc3lzdGVtLCB3ZQorICogaGF2ZSB0aHJlZSBkaXN0aW5jdCBjYXNlczoKKyAqCisgKiAgLSBpZ25vcmUgaXQKKyAqICAtIHNlZSBpdCBhcyBhIGRpcmVjdG9yeQorICogIC0gcmVjdXJzZSBpbnRvIGl0CisgKgorICogYW5kIHdoaWNoIG9uZSB3ZSBjaG9vc2UgZGVwZW5kcyBvbiBhIGNvbWJpbmF0aW9uIG9mIGV4aXN0aW5nCisgKiBnaXQgaW5kZXggY29udGVudHMgYW5kIHRoZSBmbGFncyBwYXNzZWQgaW50byB0aGUgZGlyZWN0b3J5CisgKiB0cmF2ZXJzYWwgcm91dGluZS4KKyAqCisgKiBDYXNlIDE6IElmIHdlICphbHJlYWR5KiBoYXZlIGVudHJpZXMgaW4gdGhlIGluZGV4IHVuZGVyIHRoYXQKKyAqIGRpcmVjdG9yeSBuYW1lLCB3ZSBhbHdheXMgcmVjdXJzZSBpbnRvIHRoZSBkaXJlY3RvcnkgdG8gc2VlCisgKiBhbGwgdGhlIGZpbGVzLgorICoKKyAqIENhc2UgMjogSWYgd2UgKmFscmVhZHkqIGhhdmUgdGhhdCBkaXJlY3RvcnkgbmFtZSBhcyBhIGdpdGxpbmssCisgKiB3ZSBhbHdheXMgY29udGludWUgdG8gc2VlIGl0IGFzIGEgZ2l0bGluaywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisgKiB0aGVyZSBpcyBhbiBhY3R1YWwgZ2l0IGRpcmVjdG9yeSB0aGVyZSBvciBub3QgKGl0IG1pZ2h0IG5vdAorICogYmUgY2hlY2tlZCBvdXQgYXMgYSBzdWJwcm9qZWN0ISkKKyAqCisgKiBDYXNlIDM6IGlmIHdlIGRpZG4ndCBoYXZlIGl0IGluIHRoZSBpbmRleCBwcmV2aW91c2x5LCB3ZQorICogaGF2ZSBhIGZldyBzdWItY2FzZXM6CisgKgorICogIChhKSBpZiAic2hvd19vdGhlcl9kaXJlY3RvcmllcyIgaXMgdHJ1ZSwgd2Ugc2hvdyBpdCBhcworICogICAgICBqdXN0IGEgZGlyZWN0b3J5LCB1bmxlc3MgImhpZGVfZW1wdHlfZGlyZWN0b3JpZXMiIGlzCisgKiAgICAgIGFsc28gdHJ1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGNvbnRhaW5zIGFueQorICogICAgICB1bnRyYWNrZWQgYW5kIC8gb3IgaWdub3JlZCBmaWxlcy4KKyAqICAoYikgaWYgaXQgbG9va3MgbGlrZSBhIGdpdCBkaXJlY3RvcnksIGFuZCB3ZSBkb24ndCBoYXZlCisgKiAgICAgICdub19naXRsaW5rcycgc2V0IHdlIHRyZWF0IGl0IGFzIGEgZ2l0bGluaywgYW5kIHNob3cgaXQKKyAqICAgICAgYXMgYSBkaXJlY3RvcnkuCisgKiAgKGMpIG90aGVyd2lzZSwgd2UgcmVjdXJzZSBpbnRvIGl0LgorICovCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdW50cmFja2VkLAorCWNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBsZW4sIGludCBiYXNlbGVuLCBpbnQgZXhjbHVkZSwKKwljb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBuZXN0ZWRfcmVwbyA9IDA7CisKKwkvKiBUaGUgImxlbi0xIiBpcyB0byBzdHJpcCB0aGUgZmluYWwgJy8nICovCisJc3dpdGNoIChkaXJlY3RvcnlfZXhpc3RzX2luX2luZGV4KGlzdGF0ZSwgZGlybmFtZSwgbGVuLTEpKSB7CisJY2FzZSBpbmRleF9kaXJlY3Rvcnk6CisJCXJldHVybiBwYXRoX3JlY3Vyc2U7CisKKwljYXNlIGluZGV4X2dpdGRpcjoKKwkJcmV0dXJuIHBhdGhfbm9uZTsKKworCWNhc2UgaW5kZXhfbm9uZXhpc3RlbnQ6CisJCWlmICgoZGlyLT5mbGFncyAmIERJUl9TS0lQX05FU1RFRF9HSVQpIHx8CisJCSAgICAhKGRpci0+ZmxhZ3MgJiBESVJfTk9fR0lUTElOS1MpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgZGlybmFtZSk7CisJCQluZXN0ZWRfcmVwbyA9IGlzX25vbmJhcmVfcmVwb3NpdG9yeV9kaXIoJnNiKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCX0KKwkJaWYgKG5lc3RlZF9yZXBvKQorCQkJcmV0dXJuICgoZGlyLT5mbGFncyAmIERJUl9TS0lQX05FU1RFRF9HSVQpID8gcGF0aF9ub25lIDoKKwkJCQkoZXhjbHVkZSA/IHBhdGhfZXhjbHVkZWQgOiBwYXRoX3VudHJhY2tlZCkpOworCisJCWlmIChkaXItPmZsYWdzICYgRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMpCisJCQlicmVhazsKKwkJaWYgKGV4Y2x1ZGUgJiYKKwkJCShkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRF9UT08pICYmCisJCQkoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRURfVE9PX01PREVfTUFUQ0hJTkcpKSB7CisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGFuIGV4Y2x1ZGVkIGRpcmVjdG9yeSBhbmQgd2UgYXJlCisJCQkgKiBzaG93aW5nIGlnbm9yZWQgcGF0aHMgdGhhdCBtYXRjaCBhbiBleGNsdWRlCisJCQkgKiBwYXR0ZXJuLiAgKGUuZy4gc2hvdyBkaXJlY3RvcnkgYXMgaWdub3JlZAorCQkJICogb25seSBpZiBpdCBtYXRjaGVzIGFuIGV4Y2x1ZGUgcGF0dGVybikuCisJCQkgKiBUaGlzIHBhdGggd2lsbCBlaXRoZXIgYmUgJ3BhdGhfZXhjbHVkZWRgCisJCQkgKiAoaWYgd2UgYXJlIHNob3dpbmcgZW1wdHkgZGlyZWN0b3JpZXMgb3IgaWYKKwkJCSAqIHRoZSBkaXJlY3RvcnkgaXMgbm90IGVtcHR5KSwgb3Igd2lsbCBiZQorCQkJICogJ3BhdGhfbm9uZScgKGVtcHR5IGRpcmVjdG9yeSwgYW5kIHdlIGFyZQorCQkJICogbm90IHNob3dpbmcgZW1wdHkgZGlyZWN0b3JpZXMpLgorCQkJICovCisJCQlpZiAoIShkaXItPmZsYWdzICYgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMpKQorCQkJCXJldHVybiBwYXRoX2V4Y2x1ZGVkOworCisJCQlpZiAocmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgaXN0YXRlLCBkaXJuYW1lLCBsZW4sCisJCQkJCQkgICAgIHVudHJhY2tlZCwgMSwgMSwgcGF0aHNwZWMpID09IHBhdGhfZXhjbHVkZWQpCisJCQkJcmV0dXJuIHBhdGhfZXhjbHVkZWQ7CisKKwkJCXJldHVybiBwYXRoX25vbmU7CisJCX0KKwkJcmV0dXJuIHBhdGhfcmVjdXJzZTsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSAic2hvd19vdGhlcl9kaXJlY3RvcmllcyIgY2FzZSAqLworCisJaWYgKCEoZGlyLT5mbGFncyAmIERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTKSkKKwkJcmV0dXJuIGV4Y2x1ZGUgPyBwYXRoX2V4Y2x1ZGVkIDogcGF0aF91bnRyYWNrZWQ7CisKKwl1bnRyYWNrZWQgPSBsb29rdXBfdW50cmFja2VkKGRpci0+dW50cmFja2VkLCB1bnRyYWNrZWQsCisJCQkJICAgICBkaXJuYW1lICsgYmFzZWxlbiwgbGVuIC0gYmFzZWxlbik7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gZXhjbHVkZWQgZGlyZWN0b3J5LCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZgorCSAqIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgYW55IGZpbGVzLgorCSAqLworCXJldHVybiByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBpc3RhdGUsIGRpcm5hbWUsIGxlbiwKKwkJCQkJdW50cmFja2VkLCAxLCBleGNsdWRlLCBwYXRoc3BlYyk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGFuIGluZXhhY3QgZWFybHkgcHJ1bmluZyBvZiBhbnkgcmVjdXJzaXZlIGRpcmVjdG9yeQorICogcmVhZGluZyAtIGlmIHRoZSBwYXRoIGNhbm5vdCBwb3NzaWJseSBiZSBpbiB0aGUgcGF0aHNwZWMsCisgKiByZXR1cm4gdHJ1ZSwgYW5kIHdlJ2xsIHNraXAgaXQgZWFybHkuCisgKi8KK3N0YXRpYyBpbnQgc2ltcGxpZnlfYXdheShjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbiwKKwkJCSBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBpOworCisJaWYgKCFwYXRoc3BlYyB8fCAhcGF0aHNwZWMtPm5yKQorCQlyZXR1cm4gMDsKKworCUdVQVJEX1BBVEhTUEVDKHBhdGhzcGVjLAorCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCSAgICAgICBQQVRIU1BFQ19NQVhERVBUSCB8CisJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMIHwKKwkJICAgICAgIFBBVEhTUEVDX0dMT0IgfAorCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkgICAgICAgUEFUSFNQRUNfRVhDTFVERSB8CisJCSAgICAgICBQQVRIU1BFQ19BVFRSKTsKKworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy0+bnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSA9ICZwYXRoc3BlYy0+aXRlbXNbaV07CisJCWludCBsZW4gPSBpdGVtLT5ub3dpbGRjYXJkX2xlbjsKKworCQlpZiAobGVuID4gcGF0aGxlbikKKwkJCWxlbiA9IHBhdGhsZW47CisJCWlmICghcHNfc3RybmNtcChpdGVtLCBpdGVtLT5tYXRjaCwgcGF0aCwgbGVuKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0ZWxscyB1cyB3aGV0aGVyIGFuIGV4Y2x1ZGVkIHBhdGggbWF0Y2hlcyBhCisgKiBsaXN0IG9mICJpbnRlcmVzdGluZyIgcGF0aHNwZWNzLiBUaGF0IGlzLCB3aGV0aGVyIGEgcGF0aCBtYXRjaGVkCisgKiBieSBhbnkgb2YgdGhlIHBhdGhzcGVjcyBjb3VsZCBwb3NzaWJseSBiZSBpZ25vcmVkIGJ5IGV4Y2x1ZGluZworICogdGhlIHNwZWNpZmllZCBwYXRoLiBUaGlzIGNhbiBoYXBwZW4gaWY6CisgKgorICogICAxLiB0aGUgcGF0aCBpcyBtZW50aW9uZWQgZXhwbGljaXRseSBpbiB0aGUgcGF0aHNwZWMKKyAqCisgKiAgIDIuIHRoZSBwYXRoIGlzIGEgZGlyZWN0b3J5IHByZWZpeCBvZiBzb21lIGVsZW1lbnQgaW4gdGhlCisgKiAgICAgIHBhdGhzcGVjCisgKi8KK3N0YXRpYyBpbnQgZXhjbHVkZV9tYXRjaGVzX3BhdGhzcGVjKGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWludCBpOworCisJaWYgKCFwYXRoc3BlYyB8fCAhcGF0aHNwZWMtPm5yKQorCQlyZXR1cm4gMDsKKworCUdVQVJEX1BBVEhTUEVDKHBhdGhzcGVjLAorCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCSAgICAgICBQQVRIU1BFQ19NQVhERVBUSCB8CisJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMIHwKKwkJICAgICAgIFBBVEhTUEVDX0dMT0IgfAorCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkgICAgICAgUEFUSFNQRUNfRVhDTFVERSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMtPm5yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0gPSAmcGF0aHNwZWMtPml0ZW1zW2ldOworCQlpbnQgbGVuID0gaXRlbS0+bm93aWxkY2FyZF9sZW47CisKKwkJaWYgKGxlbiA9PSBwYXRobGVuICYmCisJCSAgICAhcHNfc3RybmNtcChpdGVtLCBpdGVtLT5tYXRjaCwgcGF0aCwgcGF0aGxlbikpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGxlbiA+IHBhdGhsZW4gJiYKKwkJICAgIGl0ZW0tPm1hdGNoW3BhdGhsZW5dID09ICcvJyAmJgorCQkgICAgIXBzX3N0cm5jbXAoaXRlbSwgaXRlbS0+bWF0Y2gsIHBhdGgsIHBhdGhsZW4pKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9pbmRleF9kdHlwZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJaW50IHBvczsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJY2UgPSBpbmRleF9maWxlX2V4aXN0cyhpc3RhdGUsIHBhdGgsIGxlbiwgMCk7CisJaWYgKGNlKSB7CisJCWlmICghY2VfdXB0b2RhdGUoY2UpKQorCQkJcmV0dXJuIERUX1VOS05PV047CisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gRFRfRElSOworCQkvKgorCQkgKiBOb2JvZHkgYWN0dWFsbHkgY2FyZXMgYWJvdXQgdGhlCisJCSAqIGRpZmZlcmVuY2UgYmV0d2VlbiBEVF9MTksgYW5kIERUX1JFRworCQkgKi8KKwkJcmV0dXJuIERUX1JFRzsKKwl9CisKKwkvKiBUcnkgdG8gbG9vayBpdCB1cCBhcyBhIGRpcmVjdG9yeSAqLworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgbGVuKTsKKwlpZiAocG9zID49IDApCisJCXJldHVybiBEVF9VTktOT1dOOworCXBvcyA9IC1wb3MtMTsKKwl3aGlsZSAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zKytdOworCQlpZiAoc3RybmNtcChjZS0+bmFtZSwgcGF0aCwgbGVuKSkKKwkJCWJyZWFrOworCQlpZiAoY2UtPm5hbWVbbGVuXSA+ICcvJykKKwkJCWJyZWFrOworCQlpZiAoY2UtPm5hbWVbbGVuXSA8ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNlX3VwdG9kYXRlKGNlKSkKKwkJCWJyZWFrOwkvKiBjb250aW51ZT8gKi8KKwkJcmV0dXJuIERUX0RJUjsKKwl9CisJcmV0dXJuIERUX1VOS05PV047Cit9CisKK3N0YXRpYyBpbnQgcmVzb2x2ZV9kdHlwZShpbnQgZHR5cGUsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoZHR5cGUgIT0gRFRfVU5LTk9XTikKKwkJcmV0dXJuIGR0eXBlOworCWR0eXBlID0gZ2V0X2luZGV4X2R0eXBlKGlzdGF0ZSwgcGF0aCwgbGVuKTsKKwlpZiAoZHR5cGUgIT0gRFRfVU5LTk9XTikKKwkJcmV0dXJuIGR0eXBlOworCWlmIChsc3RhdChwYXRoLCAmc3QpKQorCQlyZXR1cm4gZHR5cGU7CisJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiBEVF9SRUc7CisJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCXJldHVybiBEVF9ESVI7CisJaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpCisJCXJldHVybiBEVF9MTks7CisJcmV0dXJuIGR0eXBlOworfQorCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9vbmVfcGF0aChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCQkgIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJCQkJCSAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCQkJICBpbnQgYmFzZWxlbiwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJCQkgIGludCBkdHlwZSkKK3sKKwlpbnQgZXhjbHVkZTsKKwlpbnQgaGFzX3BhdGhfaW5faW5kZXggPSAhIWluZGV4X2ZpbGVfZXhpc3RzKGlzdGF0ZSwgcGF0aC0+YnVmLCBwYXRoLT5sZW4sIGlnbm9yZV9jYXNlKTsKKwllbnVtIHBhdGhfdHJlYXRtZW50IHBhdGhfdHJlYXRtZW50OworCisJZHR5cGUgPSByZXNvbHZlX2R0eXBlKGR0eXBlLCBpc3RhdGUsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuKTsKKworCS8qIEFsd2F5cyBleGNsdWRlIGluZGV4ZWQgZmlsZXMgKi8KKwlpZiAoZHR5cGUgIT0gRFRfRElSICYmIGhhc19wYXRoX2luX2luZGV4KQorCQlyZXR1cm4gcGF0aF9ub25lOworCisJLyoKKwkgKiBXaGVuIHdlIGFyZSBsb29raW5nIGF0IGEgZGlyZWN0b3J5IFAgaW4gdGhlIHdvcmtpbmcgdHJlZSwKKwkgKiB0aGVyZSBhcmUgdGhyZWUgY2FzZXM6CisJICoKKwkgKiAoMSkgUCBleGlzdHMgaW4gdGhlIGluZGV4LiAgRXZlcnl0aGluZyBpbnNpZGUgdGhlIGRpcmVjdG9yeSBQIGluCisJICogdGhlIHdvcmtpbmcgdHJlZSBuZWVkcyB0byBnbyB3aGVuIFAgaXMgY2hlY2tlZCBvdXQgZnJvbSB0aGUKKwkgKiBpbmRleC4KKwkgKgorCSAqICgyKSBQIGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleCwgYnV0IHRoZXJlIGlzIFAvUSBpbiB0aGUgaW5kZXguCisJICogV2Uga25vdyBQIHdpbGwgc3RheSBhIGRpcmVjdG9yeSB3aGVuIHdlIGNoZWNrIG91dCB0aGUgY29udGVudHMKKwkgKiBvZiB0aGUgaW5kZXgsIGJ1dCB3ZSBkbyBub3Qga25vdyB5ZXQgaWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkKKwkgKiBQL1EgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byBiZSBraWxsZWQsIHNvIHdlIG5lZWQgdG8gcmVjdXJzZS4KKwkgKgorCSAqICgzKSBQIGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleCwgYW5kIHRoZXJlIGlzIG5vIFAvUSBpbiB0aGUgaW5kZXgKKwkgKiB0byByZXF1aXJlIFAgdG8gYmUgYSBkaXJlY3RvcnksIGVpdGhlci4gIE9ubHkgaW4gdGhpcyBjYXNlLCB3ZQorCSAqIGtub3cgdGhhdCBldmVyeXRoaW5nIGluc2lkZSBQIHdpbGwgbm90IGJlIGtpbGxlZCB3aXRob3V0CisJICogcmVjdXJzaW5nLgorCSAqLworCWlmICgoZGlyLT5mbGFncyAmIERJUl9DT0xMRUNUX0tJTExFRF9PTkxZKSAmJgorCSAgICAoZHR5cGUgPT0gRFRfRElSKSAmJgorCSAgICAhaGFzX3BhdGhfaW5faW5kZXggJiYKKwkgICAgKGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXgoaXN0YXRlLCBwYXRoLT5idWYsIHBhdGgtPmxlbikgPT0gaW5kZXhfbm9uZXhpc3RlbnQpKQorCQlyZXR1cm4gcGF0aF9ub25lOworCisJZXhjbHVkZSA9IGlzX2V4Y2x1ZGVkKGRpciwgaXN0YXRlLCBwYXRoLT5idWYsICZkdHlwZSk7CisKKwkvKgorCSAqIEV4Y2x1ZGVkPyBJZiB3ZSBkb24ndCBleHBsaWNpdGx5IHdhbnQgdG8gc2hvdworCSAqIGlnbm9yZWQgZmlsZXMsIGlnbm9yZSBpdAorCSAqLworCWlmIChleGNsdWRlICYmICEoZGlyLT5mbGFncyAmIChESVJfU0hPV19JR05PUkVEfERJUl9TSE9XX0lHTk9SRURfVE9PKSkpCisJCXJldHVybiBwYXRoX2V4Y2x1ZGVkOworCisJc3dpdGNoIChkdHlwZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiBwYXRoX25vbmU7CisJY2FzZSBEVF9ESVI6CisJCXN0cmJ1Zl9hZGRjaChwYXRoLCAnLycpOworCQlwYXRoX3RyZWF0bWVudCA9IHRyZWF0X2RpcmVjdG9yeShkaXIsIGlzdGF0ZSwgdW50cmFja2VkLAorCQkJCQkJIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuLAorCQkJCQkJIGJhc2VsZW4sIGV4Y2x1ZGUsIHBhdGhzcGVjKTsKKwkJLyoKKwkJICogSWYgMSkgd2Ugb25seSB3YW50IHRvIHJldHVybiBkaXJlY3RvcmllcyB0aGF0CisJCSAqIG1hdGNoIGFuIGV4Y2x1ZGUgcGF0dGVybiBhbmQgMikgdGhpcyBkaXJlY3RvcnkgZG9lcworCQkgKiBub3QgbWF0Y2ggYW4gZXhjbHVkZSBwYXR0ZXJuIGJ1dCBhbGwgb2YgaXRzCisJCSAqIGNvbnRlbnRzIGFyZSBleGNsdWRlZCwgdGhlbiBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZAorCQkgKiByZWN1cnNlIGludG8gdGhpcyBkaXJlY3RvcnkgKGluc3RlYWQgb2YgbWFya2luZyB0aGUKKwkJICogZGlyZWN0b3J5IGl0c2VsZiBhcyBhbiBpZ25vcmVkIHBhdGgpLgorCQkgKi8KKwkJaWYgKCFleGNsdWRlICYmCisJCSAgICBwYXRoX3RyZWF0bWVudCA9PSBwYXRoX2V4Y2x1ZGVkICYmCisJCSAgICAoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRURfVE9PKSAmJgorCQkgICAgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEX1RPT19NT0RFX01BVENISU5HKSkKKwkJCXJldHVybiBwYXRoX3JlY3Vyc2U7CisJCXJldHVybiBwYXRoX3RyZWF0bWVudDsKKwljYXNlIERUX1JFRzoKKwljYXNlIERUX0xOSzoKKwkJcmV0dXJuIGV4Y2x1ZGUgPyBwYXRoX2V4Y2x1ZGVkIDogcGF0aF91bnRyYWNrZWQ7CisJfQorfQorCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9wYXRoX2Zhc3Qoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkJICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwkJCQkJICAgc3RydWN0IGNhY2hlZF9kaXIgKmNkaXIsCisJCQkJCSAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJCQkgICBpbnQgYmFzZWxlbiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlzdHJidWZfc2V0bGVuKHBhdGgsIGJhc2VsZW4pOworCWlmICghY2Rpci0+dWNkKSB7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgY2Rpci0+ZmlsZSk7CisJCXJldHVybiBwYXRoX3VudHJhY2tlZDsKKwl9CisJc3RyYnVmX2FkZHN0cihwYXRoLCBjZGlyLT51Y2QtPm5hbWUpOworCS8qIHRyZWF0X29uZV9wYXRoKCkgZG9lcyB0aGlzIGJlZm9yZSBpdCBjYWxscyB0cmVhdF9kaXJlY3RvcnkoKSAqLworCXN0cmJ1Zl9jb21wbGV0ZShwYXRoLCAnLycpOworCWlmIChjZGlyLT51Y2QtPmNoZWNrX29ubHkpCisJCS8qCisJCSAqIGNoZWNrX29ubHkgaXMgc2V0IGFzIGEgcmVzdWx0IG9mIHRyZWF0X2RpcmVjdG9yeSgpIGdldHRpbmcKKwkJICogdG8gaXRzIGJvdHRvbS4gVmVyaWZ5IGFnYWluIHRoZSBzYW1lIHNldCBvZiBkaXJlY3RvcmllcworCQkgKiB3aXRoIGNoZWNrX29ubHkgc2V0LgorCQkgKi8KKwkJcmV0dXJuIHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIGlzdGF0ZSwgcGF0aC0+YnVmLCBwYXRoLT5sZW4sCisJCQkJCQljZGlyLT51Y2QsIDEsIDAsIHBhdGhzcGVjKTsKKwkvKgorCSAqIFdlIGdldCBwYXRoX3JlY3Vyc2UgaW4gdGhlIGZpcnN0IHJ1biB3aGVuCisJICogZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleCgpIHJldHVybnMgaW5kZXhfbm9uZXhpc3RlbnQuIFdlCisJICogYXJlIHN1cmUgdGhhdCBuZXcgY2hhbmdlcyBpbiB0aGUgaW5kZXggZG9lcyBub3QgaW1wYWN0IHRoZQorCSAqIG91dGNvbWUuIFJldHVybiBub3cuCisJICovCisJcmV0dXJuIHBhdGhfcmVjdXJzZTsKK30KKworc3RhdGljIGVudW0gcGF0aF90cmVhdG1lbnQgdHJlYXRfcGF0aChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCSAgICAgIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJCQkJICAgICAgc3RydWN0IGNhY2hlZF9kaXIgKmNkaXIsCisJCQkJICAgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCQkgICAgICBpbnQgYmFzZWxlbiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWlmICghY2Rpci0+ZF9uYW1lKQorCQlyZXR1cm4gdHJlYXRfcGF0aF9mYXN0KGRpciwgdW50cmFja2VkLCBjZGlyLCBpc3RhdGUsIHBhdGgsCisJCQkJICAgICAgIGJhc2VsZW4sIHBhdGhzcGVjKTsKKwlpZiAoaXNfZG90X29yX2RvdGRvdChjZGlyLT5kX25hbWUpIHx8ICFmc3BhdGhjbXAoY2Rpci0+ZF9uYW1lLCAiLmdpdCIpKQorCQlyZXR1cm4gcGF0aF9ub25lOworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJc3RyYnVmX2FkZHN0cihwYXRoLCBjZGlyLT5kX25hbWUpOworCWlmIChzaW1wbGlmeV9hd2F5KHBhdGgtPmJ1ZiwgcGF0aC0+bGVuLCBwYXRoc3BlYykpCisJCXJldHVybiBwYXRoX25vbmU7CisKKwlyZXR1cm4gdHJlYXRfb25lX3BhdGgoZGlyLCB1bnRyYWNrZWQsIGlzdGF0ZSwgcGF0aCwgYmFzZWxlbiwgcGF0aHNwZWMsCisJCQkgICAgICBjZGlyLT5kX3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBhZGRfdW50cmFja2VkKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFkaXIpCisJCXJldHVybjsKKwlBTExPQ19HUk9XKGRpci0+dW50cmFja2VkLCBkaXItPnVudHJhY2tlZF9uciArIDEsCisJCSAgIGRpci0+dW50cmFja2VkX2FsbG9jKTsKKwlkaXItPnVudHJhY2tlZFtkaXItPnVudHJhY2tlZF9ucisrXSA9IHhzdHJkdXAobmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRfY2FjaGVkX2RpcihzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJICAgIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJCQkgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCSAgICBpbnQgY2hlY2tfb25seSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghdW50cmFja2VkKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2l0aCBmc21vbml0b3IsIHdlIGNhbiB0cnVzdCB0aGUgdW50cmFja2VkIGNhY2hlJ3MgdmFsaWQgZmllbGQuCisJICovCisJcmVmcmVzaF9mc21vbml0b3IoaXN0YXRlKTsKKwlpZiAoIShkaXItPnVudHJhY2tlZC0+dXNlX2ZzbW9uaXRvciAmJiB1bnRyYWNrZWQtPnZhbGlkKSkgeworCQlpZiAobHN0YXQocGF0aC0+bGVuID8gcGF0aC0+YnVmIDogIi4iLCAmc3QpKSB7CisJCQltZW1zZXQoJnVudHJhY2tlZC0+c3RhdF9kYXRhLCAwLCBzaXplb2YodW50cmFja2VkLT5zdGF0X2RhdGEpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICghdW50cmFja2VkLT52YWxpZCB8fAorCQkJbWF0Y2hfc3RhdF9kYXRhX3JhY3koaXN0YXRlLCAmdW50cmFja2VkLT5zdGF0X2RhdGEsICZzdCkpIHsKKwkJCWZpbGxfc3RhdF9kYXRhKCZ1bnRyYWNrZWQtPnN0YXRfZGF0YSwgJnN0KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKHVudHJhY2tlZC0+Y2hlY2tfb25seSAhPSAhIWNoZWNrX29ubHkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBwcmVwX2V4Y2x1ZGUgd2lsbCBiZSBjYWxsZWQgZXZlbnR1YWxseSBvbiB0aGlzIGRpcmVjdG9yeSwKKwkgKiBidXQgaXQncyBjYWxsZWQgbXVjaCBsYXRlciBpbiBsYXN0X21hdGNoaW5nX3BhdHRlcm4oKS4gV2UKKwkgKiBuZWVkIGl0IG5vdyB0byBkZXRlcm1pbmUgdGhlIHZhbGlkaXR5IG9mIHRoZSBjYWNoZSBmb3IgdGhpcworCSAqIHBhdGguIFRoZSBuZXh0IGNhbGxzIHdpbGwgYmUgbmVhcmx5IG5vLW9wLCB0aGUgd2F5CisJICogcHJlcF9leGNsdWRlKCkgaXMgZGVzaWduZWQuCisJICovCisJaWYgKHBhdGgtPmxlbiAmJiBwYXRoLT5idWZbcGF0aC0+bGVuIC0gMV0gIT0gJy8nKSB7CisJCXN0cmJ1Zl9hZGRjaChwYXRoLCAnLycpOworCQlwcmVwX2V4Y2x1ZGUoZGlyLCBpc3RhdGUsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuKTsKKwkJc3RyYnVmX3NldGxlbihwYXRoLCBwYXRoLT5sZW4gLSAxKTsKKwl9IGVsc2UKKwkJcHJlcF9leGNsdWRlKGRpciwgaXN0YXRlLCBwYXRoLT5idWYsIHBhdGgtPmxlbik7CisKKwkvKiBob3BlZnVsbHkgcHJlcF9leGNsdWRlKCkgaGF2ZW4ndCBpbnZhbGlkYXRlZCB0aGlzIGVudHJ5Li4uICovCisJcmV0dXJuIHVudHJhY2tlZC0+dmFsaWQ7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9jYWNoZWRfZGlyKHN0cnVjdCBjYWNoZWRfZGlyICpjZGlyLAorCQkJICAgc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCSAgIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJCQkgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkgICBpbnQgY2hlY2tfb25seSkKK3sKKwljb25zdCBjaGFyICpjX3BhdGg7CisKKwltZW1zZXQoY2RpciwgMCwgc2l6ZW9mKCpjZGlyKSk7CisJY2Rpci0+dW50cmFja2VkID0gdW50cmFja2VkOworCWlmICh2YWxpZF9jYWNoZWRfZGlyKGRpciwgdW50cmFja2VkLCBpc3RhdGUsIHBhdGgsIGNoZWNrX29ubHkpKQorCQlyZXR1cm4gMDsKKwljX3BhdGggPSBwYXRoLT5sZW4gPyBwYXRoLT5idWYgOiAiLiI7CisJY2Rpci0+ZmRpciA9IG9wZW5kaXIoY19wYXRoKTsKKwlpZiAoIWNkaXItPmZkaXIpCisJCXdhcm5pbmdfZXJybm8oXygiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciKSwgY19wYXRoKTsKKwlpZiAoZGlyLT51bnRyYWNrZWQpIHsKKwkJaW52YWxpZGF0ZV9kaXJlY3RvcnkoZGlyLT51bnRyYWNrZWQsIHVudHJhY2tlZCk7CisJCWRpci0+dW50cmFja2VkLT5kaXJfb3BlbmVkKys7CisJfQorCWlmICghY2Rpci0+ZmRpcikKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfY2FjaGVkX2RpcihzdHJ1Y3QgY2FjaGVkX2RpciAqY2RpcikKK3sKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKworCWlmIChjZGlyLT5mZGlyKSB7CisJCWRlID0gcmVhZGRpcihjZGlyLT5mZGlyKTsKKwkJaWYgKCFkZSkgeworCQkJY2Rpci0+ZF9uYW1lID0gTlVMTDsKKwkJCWNkaXItPmRfdHlwZSA9IERUX1VOS05PV047CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY2Rpci0+ZF9uYW1lID0gZGUtPmRfbmFtZTsKKwkJY2Rpci0+ZF90eXBlID0gRFRZUEUoZGUpOworCQlyZXR1cm4gMDsKKwl9CisJd2hpbGUgKGNkaXItPm5yX2RpcnMgPCBjZGlyLT51bnRyYWNrZWQtPmRpcnNfbnIpIHsKKwkJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmQgPSBjZGlyLT51bnRyYWNrZWQtPmRpcnNbY2Rpci0+bnJfZGlyc107CisJCWlmICghZC0+cmVjdXJzZSkgeworCQkJY2Rpci0+bnJfZGlycysrOworCQkJY29udGludWU7CisJCX0KKwkJY2Rpci0+dWNkID0gZDsKKwkJY2Rpci0+bnJfZGlycysrOworCQlyZXR1cm4gMDsKKwl9CisJY2Rpci0+dWNkID0gTlVMTDsKKwlpZiAoY2Rpci0+bnJfZmlsZXMgPCBjZGlyLT51bnRyYWNrZWQtPnVudHJhY2tlZF9ucikgeworCQlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZCA9IGNkaXItPnVudHJhY2tlZDsKKwkJY2Rpci0+ZmlsZSA9IGQtPnVudHJhY2tlZFtjZGlyLT5ucl9maWxlcysrXTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfY2FjaGVkX2RpcihzdHJ1Y3QgY2FjaGVkX2RpciAqY2RpcikKK3sKKwlpZiAoY2Rpci0+ZmRpcikKKwkJY2xvc2VkaXIoY2Rpci0+ZmRpcik7CisJLyoKKwkgKiBXZSBoYXZlIGdvbmUgdGhyb3VnaCB0aGlzIGRpcmVjdG9yeSBhbmQgZm91bmQgbm8gdW50cmFja2VkCisJICogZW50cmllcy4gTWFyayBpdCB2YWxpZC4KKwkgKi8KKwlpZiAoY2Rpci0+dW50cmFja2VkKSB7CisJCWNkaXItPnVudHJhY2tlZC0+dmFsaWQgPSAxOworCQljZGlyLT51bnRyYWNrZWQtPnJlY3Vyc2UgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgYWRkX3BhdGhfdG9fYXBwcm9wcmlhdGVfcmVzdWx0X2xpc3Qoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdW50cmFja2VkLAorCXN0cnVjdCBjYWNoZWRfZGlyICpjZGlyLAorCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCXN0cnVjdCBzdHJidWYgKnBhdGgsCisJaW50IGJhc2VsZW4sCisJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwllbnVtIHBhdGhfdHJlYXRtZW50IHN0YXRlKQoreworCS8qIGFkZCB0aGUgcGF0aCB0byB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0IGxpc3QgKi8KKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBwYXRoX2V4Y2x1ZGVkOgorCQlpZiAoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRUQpCisJCQlkaXJfYWRkX25hbWUoZGlyLCBpc3RhdGUsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuKTsKKwkJZWxzZSBpZiAoKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEX1RPTykgfHwKKwkJCSgoZGlyLT5mbGFncyAmIERJUl9DT0xMRUNUX0lHTk9SRUQpICYmCisJCQlleGNsdWRlX21hdGNoZXNfcGF0aHNwZWMocGF0aC0+YnVmLCBwYXRoLT5sZW4sCisJCQkJCQkgcGF0aHNwZWMpKSkKKwkJCWRpcl9hZGRfaWdub3JlZChkaXIsIGlzdGF0ZSwgcGF0aC0+YnVmLCBwYXRoLT5sZW4pOworCQlicmVhazsKKworCWNhc2UgcGF0aF91bnRyYWNrZWQ6CisJCWlmIChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkKKwkJCWJyZWFrOworCQlkaXJfYWRkX25hbWUoZGlyLCBpc3RhdGUsIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuKTsKKwkJaWYgKGNkaXItPmZkaXIpCisJCQlhZGRfdW50cmFja2VkKHVudHJhY2tlZCwgcGF0aC0+YnVmICsgYmFzZWxlbik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVhZCBhIGRpcmVjdG9yeSB0cmVlLiBXZSBjdXJyZW50bHkgaWdub3JlIGFueXRoaW5nIGJ1dAorICogZGlyZWN0b3JpZXMsIHJlZ3VsYXIgZmlsZXMgYW5kIHN5bWxpbmtzLiBUaGF0J3MgYmVjYXVzZSBnaXQKKyAqIGRvZXNuJ3QgaGFuZGxlIHRoZW0gYXQgYWxsIHlldC4gTWF5YmUgdGhhdCB3aWxsIGNoYW5nZSBzb21lCisgKiBkYXkuCisgKgorICogQWxzbywgd2UgaWdub3JlIHRoZSBuYW1lICIuZ2l0IiAoZXZlbiBpZiBpdCBpcyBub3QgYSBkaXJlY3RvcnkpLgorICogVGhhdCBsaWtlbHkgd2lsbCBub3QgY2hhbmdlLgorICoKKyAqIElmICdzdG9wX2F0X2ZpcnN0X2ZpbGUnIGlzIHNwZWNpZmllZCwgJ3BhdGhfZXhjbHVkZWQnIGlzIHJldHVybmVkCisgKiB0byBzaWduYWwgdGhhdCBhIGZpbGUgd2FzIGZvdW5kLiBUaGlzIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCB2YWx1ZSB0aGF0CisgKiBpbmRpY2F0ZXMgdGhhdCBhIGZpbGUgd2FzIGVuY291bnRlcmVkIHRoYXQgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBvcmRlciBvZgorICogd2hldGhlciBhbiB1bnRyYWNrZWQgb3IgZXhsdWRlZCBwYXRoIHdhcyBlbmNvdW50ZXJlZCBmaXJzdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBtb3N0IHNpZ25pZmljYW50IHBhdGhfdHJlYXRtZW50IHZhbHVlIGVuY291bnRlcmVkIGluIHRoZSBzY2FuLgorICogSWYgJ3N0b3BfYXRfZmlyc3RfZmlsZScgaXMgc3BlY2lmaWVkLCBgcGF0aF9leGNsdWRlZGAgaXMgdGhlIG1vc3QKKyAqIHNpZ25pZmljYW50IHBhdGhfdHJlYXRtZW50IHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZC4KKyAqLworCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwgaW50IGNoZWNrX29ubHksCisJaW50IHN0b3BfYXRfZmlyc3RfZmlsZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwkvKgorCSAqIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HOgorCSAqCisJICogQW55IHVwZGF0ZXMgdG8gdGhlIHRyYXZlcnNhbCBsb2dpYyBoZXJlIG1heSBuZWVkIGNvcnJlc3BvbmRpbmcKKwkgKiB1cGRhdGVzIGluIHRyZWF0X2xlYWRpbmdfcGF0aCgpLiAgU2VlIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlCisJICogY29tbWl0IGFkZGluZyB0aGlzIHdhcm5pbmcgYXMgd2VsbCBhcyB0aGUgY29tbWl0IHByZWNlZGluZyBpdAorCSAqIGZvciBkZXRhaWxzLgorCSAqLworCisJc3RydWN0IGNhY2hlZF9kaXIgY2RpcjsKKwllbnVtIHBhdGhfdHJlYXRtZW50IHN0YXRlLCBzdWJkaXJfc3RhdGUsIGRpcl9zdGF0ZSA9IHBhdGhfbm9uZTsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGQoJnBhdGgsIGJhc2UsIGJhc2VsZW4pOworCisJaWYgKG9wZW5fY2FjaGVkX2RpcigmY2RpciwgZGlyLCB1bnRyYWNrZWQsIGlzdGF0ZSwgJnBhdGgsIGNoZWNrX29ubHkpKQorCQlnb3RvIG91dDsKKworCWlmICh1bnRyYWNrZWQpCisJCXVudHJhY2tlZC0+Y2hlY2tfb25seSA9ICEhY2hlY2tfb25seTsKKworCXdoaWxlICghcmVhZF9jYWNoZWRfZGlyKCZjZGlyKSkgeworCQkvKiBjaGVjayBob3cgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHNob3VsZCBiZSB0cmVhdGVkICovCisJCXN0YXRlID0gdHJlYXRfcGF0aChkaXIsIHVudHJhY2tlZCwgJmNkaXIsIGlzdGF0ZSwgJnBhdGgsCisJCQkJICAgYmFzZWxlbiwgcGF0aHNwZWMpOworCisJCWlmIChzdGF0ZSA+IGRpcl9zdGF0ZSkKKwkJCWRpcl9zdGF0ZSA9IHN0YXRlOworCisJCS8qIHJlY3Vyc2UgaW50byBzdWJkaXIgaWYgaW5zdHJ1Y3RlZCBieSB0cmVhdF9wYXRoICovCisJCWlmICgoc3RhdGUgPT0gcGF0aF9yZWN1cnNlKSB8fAorCQkJKChzdGF0ZSA9PSBwYXRoX3VudHJhY2tlZCkgJiYKKwkJCSAocmVzb2x2ZV9kdHlwZShjZGlyLmRfdHlwZSwgaXN0YXRlLCBwYXRoLmJ1ZiwgcGF0aC5sZW4pID09IERUX0RJUikgJiYKKwkJCSAoKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEX1RPTykgfHwKKwkJCSAgKHBhdGhzcGVjICYmCisJCQkgICBkb19tYXRjaF9wYXRoc3BlYyhpc3RhdGUsIHBhdGhzcGVjLCBwYXRoLmJ1ZiwgcGF0aC5sZW4sCisJCQkJCSAgICAgYmFzZWxlbiwgTlVMTCwgRE9fTUFUQ0hfTEVBRElOR19QQVRIU1BFQykgPT0gTUFUQ0hFRF9SRUNVUlNJVkVMWV9MRUFESU5HX1BBVEhTUEVDKSkpKSB7CisJCQlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdWQ7CisJCQl1ZCA9IGxvb2t1cF91bnRyYWNrZWQoZGlyLT51bnRyYWNrZWQsIHVudHJhY2tlZCwKKwkJCQkJICAgICAgcGF0aC5idWYgKyBiYXNlbGVuLAorCQkJCQkgICAgICBwYXRoLmxlbiAtIGJhc2VsZW4pOworCQkJc3ViZGlyX3N0YXRlID0KKwkJCQlyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBpc3RhdGUsIHBhdGguYnVmLAorCQkJCQkJCSBwYXRoLmxlbiwgdWQsCisJCQkJCQkJIGNoZWNrX29ubHksIHN0b3BfYXRfZmlyc3RfZmlsZSwgcGF0aHNwZWMpOworCQkJaWYgKHN1YmRpcl9zdGF0ZSA+IGRpcl9zdGF0ZSkKKwkJCQlkaXJfc3RhdGUgPSBzdWJkaXJfc3RhdGU7CisKKwkJCWlmIChwYXRoc3BlYyAmJgorCQkJICAgICFtYXRjaF9wYXRoc3BlYyhpc3RhdGUsIHBhdGhzcGVjLCBwYXRoLmJ1ZiwgcGF0aC5sZW4sCisJCQkJCSAgICAwIC8qIHByZWZpeCAqLywgTlVMTCwKKwkJCQkJICAgIDAgLyogZG8gTk9UIHNwZWNpYWwgY2FzZSBkaXJzICovKSkKKwkJCQlzdGF0ZSA9IHBhdGhfbm9uZTsKKwkJfQorCisJCWlmIChjaGVja19vbmx5KSB7CisJCQlpZiAoc3RvcF9hdF9maXJzdF9maWxlKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBzdG9wcGluZyBhdCBmaXJzdCBmaWxlLCB0aGVuCisJCQkJICogc2lnbmFsIHRoYXQgYSBmaWxlIHdhcyBmb3VuZCBieQorCQkJCSAqIHJldHVybmluZyBgcGF0aF9leGNsdWRlZGAuIFRoaXMgaXMKKwkJCQkgKiB0byByZXR1cm4gYSBjb25zaXN0ZW50IHZhbHVlCisJCQkJICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFuIGlnbm9yZWQgb3IKKwkJCQkgKiBleGNsdWRlZCBmaWxlIGhhcHBlbmVkIHRvIGJlCisJCQkJICogZW5jb3VudGVyZWQgMXN0LgorCQkJCSAqCisJCQkJICogSW4gY3VycmVudCB1c2FnZSwgdGhlCisJCQkJICogYHN0b3BfYXRfZmlyc3RfZmlsZWAgaXMgcGFzc2VkIHdoZW4KKwkJCQkgKiBhbiBhbmNlc3RvciBkaXJlY3RvcnkgaGFzIG1hdGNoZWQKKwkJCQkgKiBhbiBleGNsdWRlIHBhdHRlcm4sIHNvIGFueSBmb3VuZAorCQkJCSAqIGZpbGVzIHdpbGwgYmUgZXhjbHVkZWQuCisJCQkJICovCisJCQkJaWYgKGRpcl9zdGF0ZSA+PSBwYXRoX2V4Y2x1ZGVkKSB7CisJCQkJCWRpcl9zdGF0ZSA9IHBhdGhfZXhjbHVkZWQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogYWJvcnQgZWFybHkgaWYgbWF4aW11bSBzdGF0ZSBoYXMgYmVlbiByZWFjaGVkICovCisJCQlpZiAoZGlyX3N0YXRlID09IHBhdGhfdW50cmFja2VkKSB7CisJCQkJaWYgKGNkaXIuZmRpcikKKwkJCQkJYWRkX3VudHJhY2tlZCh1bnRyYWNrZWQsIHBhdGguYnVmICsgYmFzZWxlbik7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBza2lwIHRoZSBkaXJfYWRkXyogcGFydCAqLworCQkJY29udGludWU7CisJCX0KKworCQlhZGRfcGF0aF90b19hcHByb3ByaWF0ZV9yZXN1bHRfbGlzdChkaXIsIHVudHJhY2tlZCwgJmNkaXIsCisJCQkJCQkgICAgaXN0YXRlLCAmcGF0aCwgYmFzZWxlbiwKKwkJCQkJCSAgICBwYXRoc3BlYywgc3RhdGUpOworCX0KKwljbG9zZV9jYWNoZWRfZGlyKCZjZGlyKTsKKyBvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCisJcmV0dXJuIGRpcl9zdGF0ZTsKK30KKworaW50IGNtcF9kaXJfZW50cnkoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQoreworCWNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKmUxID0gKihjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICoqKXAxOworCWNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKmUyID0gKihjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICoqKXAyOworCisJcmV0dXJuIG5hbWVfY29tcGFyZShlMS0+bmFtZSwgZTEtPmxlbiwgZTItPm5hbWUsIGUyLT5sZW4pOworfQorCisvKiBjaGVjayBpZiAqb3V0IGxleGljYWxseSBzdHJpY3RseSBjb250YWlucyAqaW4gKi8KK2ludCBjaGVja19kaXJfZW50cnlfY29udGFpbnMoY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqb3V0LCBjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICppbikKK3sKKwlyZXR1cm4gKG91dC0+bGVuIDwgaW4tPmxlbikgJiYKKwkJKG91dC0+bmFtZVtvdXQtPmxlbiAtIDFdID09ICcvJykgJiYKKwkJIW1lbWNtcChvdXQtPm5hbWUsIGluLT5uYW1lLCBvdXQtPmxlbik7Cit9CisKK3N0YXRpYyBpbnQgdHJlYXRfbGVhZGluZ19wYXRoKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkgICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCS8qCisJICogV0FSTklORyBXQVJOSU5HIFdBUk5JTkc6CisJICoKKwkgKiBBbnkgdXBkYXRlcyB0byB0aGUgdHJhdmVyc2FsIGxvZ2ljIGhlcmUgbWF5IG5lZWQgY29ycmVzcG9uZGluZworCSAqIHVwZGF0ZXMgaW4gcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKCkuICBTZWUgNzc3YjQyMDM0NyAoZGlyOgorCSAqIHN5bmNocm9uaXplIHRyZWF0X2xlYWRpbmdfcGF0aCgpIGFuZCByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoKSwKKwkgKiAyMDE5LTEyLTE5KSBhbmQgaXRzIHBhcmVudCBjb21taXQgZm9yIGRldGFpbHMuCisJICovCisKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzdWJkaXIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcHJldmxlbiwgYmFzZWxlbjsKKwljb25zdCBjaGFyICpjcDsKKwlzdHJ1Y3QgY2FjaGVkX2RpciBjZGlyOworCWVudW0gcGF0aF90cmVhdG1lbnQgc3RhdGUgPSBwYXRoX25vbmU7CisKKwkvKgorCSAqIEZvciBlYWNoIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgcGF0aCwgd2UgYXJlIGdvaW5nIHRvIGNoZWNrIHdoZXRoZXIKKwkgKiB0aGF0IHBhdGggaXMgcmVsZXZhbnQgZ2l2ZW4gdGhlIHBhdGhzcGVjLiAgRm9yIGV4YW1wbGUsIGlmIHBhdGggaXMKKwkgKiAgICBmb28vYmFyL2Jhei8KKwkgKiB0aGVuIHdlIHdpbGwgYXNrIHRyZWF0X3BhdGgoKSB3aGV0aGVyIHdlIHNob3VsZCBnbyBpbnRvIGZvbywgdGhlbgorCSAqIHdoZXRoZXIgd2Ugc2hvdWxkIGdvIGludG8gYmFyLCB0aGVuIHdoZXRoZXIgYmF6IGlzIHJlbGV2YW50LgorCSAqIENoZWNraW5nIGVhY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgZS5nLiBpZiBwYXRoIGlzCisJICogICAgLmdpdC9pbmZvLworCSAqIHRoZW4gd2UgbmVlZCB0byBjaGVjayAuZ2l0IHRvIGtub3cgd2Ugc2hvdWxkbid0IHRyYXZlcnNlIGl0LgorCSAqIElmIHRoZSByZXR1cm4gZnJvbSB0cmVhdF9wYXRoKCkgaXM6CisJICogICAgKiBwYXRoX25vbmUsIGZvciBhbnkgcGF0aCwgd2UgcmV0dXJuIGZhbHNlLgorCSAqICAgICogcGF0aF9yZWN1cnNlLCBmb3IgYWxsIHBhdGggY29tcG9uZW50cywgd2UgcmV0dXJuIHRydWUKKwkgKiAgICAqIDxhbnl0aGluZyBlbHNlPiBmb3Igc29tZSBpbnRlcm1lZGlhdGUgY29tcG9uZW50LCB3ZSBtYWtlIHN1cmUKKwkgKiAgICAgICAgdG8gYWRkIHRoYXQgcGF0aCB0byB0aGUgcmVsZXZhbnQgbGlzdCBidXQgcmV0dXJuIGZhbHNlCisJICogICAgICAgIHNpZ25pZnlpbmcgdGhhdCB3ZSBzaG91bGRuJ3QgcmVjdXJzZSBpbnRvIGl0LgorCSAqLworCisJd2hpbGUgKGxlbiAmJiBwYXRoW2xlbiAtIDFdID09ICcvJykKKwkJbGVuLS07CisJaWYgKCFsZW4pCisJCXJldHVybiAxOworCisJbWVtc2V0KCZjZGlyLCAwLCBzaXplb2YoY2RpcikpOworCWNkaXIuZF90eXBlID0gRFRfRElSOworCWJhc2VsZW4gPSAwOworCXByZXZsZW4gPSAwOworCXdoaWxlICgxKSB7CisJCXByZXZsZW4gPSBiYXNlbGVuICsgISFiYXNlbGVuOworCQljcCA9IHBhdGggKyBwcmV2bGVuOworCQljcCA9IG1lbWNocihjcCwgJy8nLCBwYXRoICsgbGVuIC0gY3ApOworCQlpZiAoIWNwKQorCQkJYmFzZWxlbiA9IGxlbjsKKwkJZWxzZQorCQkJYmFzZWxlbiA9IGNwIC0gcGF0aDsKKwkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCXN0cmJ1Zl9hZGQoJnNiLCBwYXRoLCBiYXNlbGVuKTsKKwkJaWYgKCFpc19kaXJlY3Rvcnkoc2IuYnVmKSkKKwkJCWJyZWFrOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJc3RyYnVmX2FkZCgmc2IsIHBhdGgsIHByZXZsZW4pOworCQlzdHJidWZfcmVzZXQoJnN1YmRpcik7CisJCXN0cmJ1Zl9hZGQoJnN1YmRpciwgcGF0aCtwcmV2bGVuLCBiYXNlbGVuLXByZXZsZW4pOworCQljZGlyLmRfbmFtZSA9IHN1YmRpci5idWY7CisJCXN0YXRlID0gdHJlYXRfcGF0aChkaXIsIE5VTEwsICZjZGlyLCBpc3RhdGUsICZzYiwgcHJldmxlbiwKKwkJCQkgICAgcGF0aHNwZWMpOworCQlpZiAoc3RhdGUgPT0gcGF0aF91bnRyYWNrZWQgJiYKKwkJICAgIHJlc29sdmVfZHR5cGUoY2Rpci5kX3R5cGUsIGlzdGF0ZSwgc2IuYnVmLCBzYi5sZW4pID09IERUX0RJUiAmJgorCQkgICAgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEX1RPTyB8fAorCQkgICAgIGRvX21hdGNoX3BhdGhzcGVjKGlzdGF0ZSwgcGF0aHNwZWMsIHNiLmJ1Ziwgc2IubGVuLAorCQkJCSAgICAgICBiYXNlbGVuLCBOVUxMLCBET19NQVRDSF9MRUFESU5HX1BBVEhTUEVDKSA9PSBNQVRDSEVEX1JFQ1VSU0lWRUxZX0xFQURJTkdfUEFUSFNQRUMpKSB7CisJCQlpZiAoIW1hdGNoX3BhdGhzcGVjKGlzdGF0ZSwgcGF0aHNwZWMsIHNiLmJ1Ziwgc2IubGVuLAorCQkJCQkgICAgMCAvKiBwcmVmaXggKi8sIE5VTEwsCisJCQkJCSAgICAwIC8qIGRvIE5PVCBzcGVjaWFsIGNhc2UgZGlycyAqLykpCisJCQkJc3RhdGUgPSBwYXRoX25vbmU7CisJCQlhZGRfcGF0aF90b19hcHByb3ByaWF0ZV9yZXN1bHRfbGlzdChkaXIsIE5VTEwsICZjZGlyLAorCQkJCQkJCSAgICBpc3RhdGUsCisJCQkJCQkJICAgICZzYiwgYmFzZWxlbiwKKwkJCQkJCQkgICAgcGF0aHNwZWMsIHN0YXRlKTsKKwkJCXN0YXRlID0gcGF0aF9yZWN1cnNlOworCQl9CisKKwkJaWYgKHN0YXRlICE9IHBhdGhfcmVjdXJzZSkKKwkJCWJyZWFrOyAvKiBkbyBub3QgcmVjdXJzZSBpbnRvIGl0ICovCisJCWlmIChsZW4gPD0gYmFzZWxlbikKKwkJCWJyZWFrOyAvKiBmaW5pc2hlZCBjaGVja2luZyAqLworCX0KKwlhZGRfcGF0aF90b19hcHByb3ByaWF0ZV9yZXN1bHRfbGlzdChkaXIsIE5VTEwsICZjZGlyLCBpc3RhdGUsCisJCQkJCSAgICAmc2IsIGJhc2VsZW4sIHBhdGhzcGVjLAorCQkJCQkgICAgc3RhdGUpOworCisJc3RyYnVmX3JlbGVhc2UoJnN1YmRpcik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gc3RhdGUgPT0gcGF0aF9yZWN1cnNlOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2lkZW50X3N0cmluZyh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHV0c25hbWUgdXRzOworCisJaWYgKHNiLmxlbikKKwkJcmV0dXJuIHNiLmJ1ZjsKKwlpZiAodW5hbWUoJnV0cykgPCAwKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iKSk7CisJc3RyYnVmX2FkZGYoJnNiLCAiTG9jYXRpb24gJXMsIHN5c3RlbSAlcyIsIGdldF9naXRfd29ya190cmVlKCksCisJCSAgICB1dHMuc3lzbmFtZSk7CisJcmV0dXJuIHNiLmJ1ZjsKK30KKworc3RhdGljIGludCBpZGVudF9pbl91bnRyYWNrZWQoY29uc3Qgc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWMpCit7CisJLyoKKwkgKiBQcmV2aW91cyBnaXQgdmVyc2lvbnMgbWF5IGhhdmUgc2F2ZWQgbWFueSBOVUwgc2VwYXJhdGVkCisJICogc3RyaW5ncyBpbiB0aGUgImlkZW50IiBmaWVsZCwgYnV0IGl0IGlzIGluc2FuZSB0byBtYW5hZ2UKKwkgKiBtYW55IGxvY2F0aW9ucywgc28ganVzdCB0YWtlIGNhcmUgb2YgdGhlIGZpcnN0IG9uZS4KKwkgKi8KKworCXJldHVybiAhc3RyY21wKHVjLT5pZGVudC5idWYsIGdldF9pZGVudF9zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF91bnRyYWNrZWRfaWRlbnQoc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWMpCit7CisJc3RyYnVmX3Jlc2V0KCZ1Yy0+aWRlbnQpOworCXN0cmJ1Zl9hZGRzdHIoJnVjLT5pZGVudCwgZ2V0X2lkZW50X3N0cmluZygpKTsKKworCS8qCisJICogVGhpcyBzdHJidWYgdXNlZCB0byBjb250YWluIGEgbGlzdCBvZiBOVUwgc2VwYXJhdGVkCisJICogc3RyaW5ncywgc28gc2F2ZSBOVUwgdG9vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCSAqLworCXN0cmJ1Zl9hZGRjaCgmdWMtPmlkZW50LCAwKTsKK30KKworc3RhdGljIHZvaWQgbmV3X3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp1YykpOworCXN0cmJ1Zl9pbml0KCZ1Yy0+aWRlbnQsIDEwMCk7CisJdWMtPmV4Y2x1ZGVfcGVyX2RpciA9ICIuZ2l0aWdub3JlIjsKKwkvKiBzaG91bGQgYmUgdGhlIHNhbWUgZmxhZ3MgdXNlZCBieSBnaXQtc3RhdHVzICovCisJdWMtPmRpcl9mbGFncyA9IERJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTIHwgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVM7CisJc2V0X3VudHJhY2tlZF9pZGVudCh1Yyk7CisJaXN0YXRlLT51bnRyYWNrZWQgPSB1YzsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gVU5UUkFDS0VEX0NIQU5HRUQ7Cit9CisKK3ZvaWQgYWRkX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpZiAoIWlzdGF0ZS0+dW50cmFja2VkKSB7CisJCW5ld191bnRyYWNrZWRfY2FjaGUoaXN0YXRlKTsKKwl9IGVsc2UgeworCQlpZiAoIWlkZW50X2luX3VudHJhY2tlZChpc3RhdGUtPnVudHJhY2tlZCkpIHsKKwkJCWZyZWVfdW50cmFja2VkX2NhY2hlKGlzdGF0ZS0+dW50cmFja2VkKTsKKwkJCW5ld191bnRyYWNrZWRfY2FjaGUoaXN0YXRlKTsKKwkJfQorCX0KK30KKwordm9pZCByZW1vdmVfdW50cmFja2VkX2NhY2hlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmIChpc3RhdGUtPnVudHJhY2tlZCkgeworCQlmcmVlX3VudHJhY2tlZF9jYWNoZShpc3RhdGUtPnVudHJhY2tlZCk7CisJCWlzdGF0ZS0+dW50cmFja2VkID0gTlVMTDsKKwkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IFVOVFJBQ0tFRF9DSEFOR0VEOworCX0KK30KKworc3RhdGljIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp2YWxpZGF0ZV91bnRyYWNrZWRfY2FjaGUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkJCSAgICAgIGludCBiYXNlX2xlbiwKKwkJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnJvb3Q7CisJc3RhdGljIGludCB1bnRyYWNrZWRfY2FjaGVfZGlzYWJsZWQgPSAtMTsKKworCWlmICghZGlyLT51bnRyYWNrZWQpCisJCXJldHVybiBOVUxMOworCWlmICh1bnRyYWNrZWRfY2FjaGVfZGlzYWJsZWQgPCAwKQorCQl1bnRyYWNrZWRfY2FjaGVfZGlzYWJsZWQgPSBnaXRfZW52X2Jvb2woIkdJVF9ESVNBQkxFX1VOVFJBQ0tFRF9DQUNIRSIsIDApOworCWlmICh1bnRyYWNrZWRfY2FjaGVfZGlzYWJsZWQpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgJEdJVF9ESVIvaW5mby9leGNsdWRlIGFuZCBjb3JlLmV4Y2x1ZGVzZmlsZQorCSAqIGFzIHRoZSBnbG9iYWwgaWdub3JlIHJ1bGUgZmlsZXMuIEFueSBvdGhlciBhZGRpdGlvbnMKKwkgKiAoZS5nLiBmcm9tIGNvbW1hbmQgbGluZSkgaW52YWxpZGF0ZSB0aGUgY2FjaGUuIFRoaXMKKwkgKiBjb25kaXRpb24gYWxzbyBjYXRjaGVzIHJ1bm5pbmcgc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoKQorCSAqIGJlZm9yZSBzZXR0aW5nIGRpci0+dW50cmFja2VkIQorCSAqLworCWlmIChkaXItPnVubWFuYWdlZF9leGNsdWRlX2ZpbGVzKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogT3B0aW1pemUgZm9yIHRoZSBtYWluIHVzZSBjYXNlIG9ubHk6IHdob2xlLXRyZWUgZ2l0CisJICogc3RhdHVzLiBNb3JlIHdvcmsgaW52b2x2ZWQgaW4gdHJlYXRfbGVhZGluZ19wYXRoKCkgaWYgd2UKKwkgKiB1c2UgY2FjaGUgb24ganVzdCBhIHN1YnNldCBvZiB0aGUgd29ya3RyZWUuIHBhdGhzcGVjCisJICogc3VwcG9ydCBjb3VsZCBtYWtlIHRoZSBtYXR0ZXIgZXZlbiB3b3JzZS4KKwkgKi8KKwlpZiAoYmFzZV9sZW4gfHwgKHBhdGhzcGVjICYmIHBhdGhzcGVjLT5ucikpCisJCXJldHVybiBOVUxMOworCisJLyogRGlmZmVyZW50IHNldCBvZiBmbGFncyBtYXkgcHJvZHVjZSBkaWZmZXJlbnQgcmVzdWx0cyAqLworCWlmIChkaXItPmZsYWdzICE9IGRpci0+dW50cmFja2VkLT5kaXJfZmxhZ3MgfHwKKwkgICAgLyoKKwkgICAgICogU2VlIHRyZWF0X2RpcmVjdG9yeSgpLCBjYXNlIGluZGV4X25vbmV4aXN0ZW50LiBXaXRob3V0CisJICAgICAqIHRoaXMgZmxhZywgd2UgbWF5IG5lZWQgdG8gYWxzbyBjYWNoZSAuZ2l0IGZpbGUgY29udGVudAorCSAgICAgKiBmb3IgdGhlIHJlc29sdmVfZ2l0bGlua19yZWYoKSBjYWxsLCB3aGljaCB3ZSBkb24ndC4KKwkgICAgICovCisJICAgICEoZGlyLT5mbGFncyAmIERJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTKSB8fAorCSAgICAvKiBXZSBkb24ndCBzdXBwb3J0IGNvbGxlY3RpbmcgaWdub3JlIGZpbGVzICovCisJICAgIChkaXItPmZsYWdzICYgKERJUl9TSE9XX0lHTk9SRUQgfCBESVJfU0hPV19JR05PUkVEX1RPTyB8CisJCQkgICBESVJfQ09MTEVDVF9JR05PUkVEKSkpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBJZiB3ZSB1c2UgLmdpdGlnbm9yZSBpbiB0aGUgY2FjaGUgYW5kIG5vdyB5b3UgY2hhbmdlIGl0IHRvCisJICogLmdpdGV4Y2x1ZGUsIGV2ZXJ5dGhpbmcgd2lsbCBnbyB3cm9uZy4KKwkgKi8KKwlpZiAoZGlyLT5leGNsdWRlX3Blcl9kaXIgIT0gZGlyLT51bnRyYWNrZWQtPmV4Y2x1ZGVfcGVyX2RpciAmJgorCSAgICBzdHJjbXAoZGlyLT5leGNsdWRlX3Blcl9kaXIsIGRpci0+dW50cmFja2VkLT5leGNsdWRlX3Blcl9kaXIpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogRVhDX0NNREwgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIGNhY2hlLiBJZiBwZW9wbGUgc2V0IGl0LAorCSAqIHNraXAgdGhlIGNhY2hlLgorCSAqLworCWlmIChkaXItPmV4Y2x1ZGVfbGlzdF9ncm91cFtFWENfQ01ETF0ubnIpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFpZGVudF9pbl91bnRyYWNrZWQoZGlyLT51bnRyYWNrZWQpKSB7CisJCXdhcm5pbmcoXygidW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtIG9yIGxvY2F0aW9uIikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWRpci0+dW50cmFja2VkLT5yb290KSB7CisJCWNvbnN0IGludCBsZW4gPSBzaXplb2YoKmRpci0+dW50cmFja2VkLT5yb290KTsKKwkJZGlyLT51bnRyYWNrZWQtPnJvb3QgPSB4bWFsbG9jKGxlbik7CisJCW1lbXNldChkaXItPnVudHJhY2tlZC0+cm9vdCwgMCwgbGVuKTsKKwl9CisKKwkvKiBWYWxpZGF0ZSAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUgYW5kIGNvcmUuZXhjbHVkZXNmaWxlICovCisJcm9vdCA9IGRpci0+dW50cmFja2VkLT5yb290OworCWlmICghb2lkZXEoJmRpci0+c3NfaW5mb19leGNsdWRlLm9pZCwKKwkJICAgJmRpci0+dW50cmFja2VkLT5zc19pbmZvX2V4Y2x1ZGUub2lkKSkgeworCQlpbnZhbGlkYXRlX2dpdGlnbm9yZShkaXItPnVudHJhY2tlZCwgcm9vdCk7CisJCWRpci0+dW50cmFja2VkLT5zc19pbmZvX2V4Y2x1ZGUgPSBkaXItPnNzX2luZm9fZXhjbHVkZTsKKwl9CisJaWYgKCFvaWRlcSgmZGlyLT5zc19leGNsdWRlc19maWxlLm9pZCwKKwkJICAgJmRpci0+dW50cmFja2VkLT5zc19leGNsdWRlc19maWxlLm9pZCkpIHsKKwkJaW52YWxpZGF0ZV9naXRpZ25vcmUoZGlyLT51bnRyYWNrZWQsIHJvb3QpOworCQlkaXItPnVudHJhY2tlZC0+c3NfZXhjbHVkZXNfZmlsZSA9IGRpci0+c3NfZXhjbHVkZXNfZmlsZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhpcyBkaXJlY3RvcnkgaXMgbm90IGRyb3BwZWQgb3V0IGF0IHNhdmluZyBwaGFzZSAqLworCXJvb3QtPnJlY3Vyc2UgPSAxOworCXJldHVybiByb290OworfQorCitpbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZDsKKworCXRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKCk7CisKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHBhdGgsIGxlbikpIHsKKwkJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoInJlYWQgZGlyZWN0b3J5ICUuKnMiLCBsZW4sIHBhdGgpOworCQlyZXR1cm4gZGlyLT5ucjsKKwl9CisKKwl1bnRyYWNrZWQgPSB2YWxpZGF0ZV91bnRyYWNrZWRfY2FjaGUoZGlyLCBsZW4sIHBhdGhzcGVjKTsKKwlpZiAoIXVudHJhY2tlZCkKKwkJLyoKKwkJICogbWFrZSBzdXJlIHVudHJhY2tlZCBjYWNoZSBjb2RlIHBhdGggaXMgZGlzYWJsZWQsCisJCSAqIGUuZy4gcHJlcF9leGNsdWRlKCkKKwkJICovCisJCWRpci0+dW50cmFja2VkID0gTlVMTDsKKwlpZiAoIWxlbiB8fCB0cmVhdF9sZWFkaW5nX3BhdGgoZGlyLCBpc3RhdGUsIHBhdGgsIGxlbiwgcGF0aHNwZWMpKQorCQlyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBpc3RhdGUsIHBhdGgsIGxlbiwgdW50cmFja2VkLCAwLCAwLCBwYXRoc3BlYyk7CisJUVNPUlQoZGlyLT5lbnRyaWVzLCBkaXItPm5yLCBjbXBfZGlyX2VudHJ5KTsKKwlRU09SVChkaXItPmlnbm9yZWQsIGRpci0+aWdub3JlZF9uciwgY21wX2Rpcl9lbnRyeSk7CisKKwkvKgorCSAqIElmIERJUl9TSE9XX0lHTk9SRURfVE9PIGlzIHNldCwgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKCkgd2lsbAorCSAqIGFsc28gcGljayB1cCB1bnRyYWNrZWQgY29udGVudHMgb2YgdW50cmFja2VkIGRpcnM7IGJ5IGRlZmF1bHQKKwkgKiB3ZSBkaXNjYXJkIHRoZXNlLCBidXQgZ2l2ZW4gRElSX0tFRVBfVU5UUkFDS0VEX0NPTlRFTlRTIHdlIGRvIG5vdC4KKwkgKi8KKwlpZiAoKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEX1RPTykgJiYKKwkJICAgICAhKGRpci0+ZmxhZ3MgJiBESVJfS0VFUF9VTlRSQUNLRURfQ09OVEVOVFMpKSB7CisJCWludCBpLCBqOworCisJCS8qIHJlbW92ZSBmcm9tIGRpci0+ZW50cmllcyB1bnRyYWNrZWQgY29udGVudHMgb2YgdW50cmFja2VkIGRpcnMgKi8KKwkJZm9yIChpID0gaiA9IDA7IGogPCBkaXItPm5yOyBqKyspIHsKKwkJCWlmIChpICYmCisJCQkgICAgY2hlY2tfZGlyX2VudHJ5X2NvbnRhaW5zKGRpci0+ZW50cmllc1tpIC0gMV0sIGRpci0+ZW50cmllc1tqXSkpIHsKKwkJCQlGUkVFX0FORF9OVUxMKGRpci0+ZW50cmllc1tqXSk7CisJCQl9IGVsc2UgeworCQkJCWRpci0+ZW50cmllc1tpKytdID0gZGlyLT5lbnRyaWVzW2pdOworCQkJfQorCQl9CisKKwkJZGlyLT5uciA9IGk7CisJfQorCisJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoInJlYWQgZGlyZWN0b3J5ICUuKnMiLCBsZW4sIHBhdGgpOworCWlmIChkaXItPnVudHJhY2tlZCkgeworCQlzdGF0aWMgaW50IGZvcmNlX3VudHJhY2tlZF9jYWNoZSA9IC0xOworCQlzdGF0aWMgc3RydWN0IHRyYWNlX2tleSB0cmFjZV91bnRyYWNrZWRfc3RhdHMgPSBUUkFDRV9LRVlfSU5JVChVTlRSQUNLRURfU1RBVFMpOworCisJCWlmIChmb3JjZV91bnRyYWNrZWRfY2FjaGUgPCAwKQorCQkJZm9yY2VfdW50cmFja2VkX2NhY2hlID0KKwkJCQlnaXRfZW52X2Jvb2woIkdJVF9GT1JDRV9VTlRSQUNLRURfQ0FDSEUiLCAwKTsKKwkJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2VfdW50cmFja2VkX3N0YXRzLAorCQkJCSAibm9kZSBjcmVhdGlvbjogJXVcbiIKKwkJCQkgImdpdGlnbm9yZSBpbnZhbGlkYXRpb246ICV1XG4iCisJCQkJICJkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAldVxuIgorCQkJCSAib3BlbmRpcjogJXVcbiIsCisJCQkJIGRpci0+dW50cmFja2VkLT5kaXJfY3JlYXRlZCwKKwkJCQkgZGlyLT51bnRyYWNrZWQtPmdpdGlnbm9yZV9pbnZhbGlkYXRlZCwKKwkJCQkgZGlyLT51bnRyYWNrZWQtPmRpcl9pbnZhbGlkYXRlZCwKKwkJCQkgZGlyLT51bnRyYWNrZWQtPmRpcl9vcGVuZWQpOworCQlpZiAoZm9yY2VfdW50cmFja2VkX2NhY2hlICYmCisJCQlkaXItPnVudHJhY2tlZCA9PSBpc3RhdGUtPnVudHJhY2tlZCAmJgorCQkgICAgKGRpci0+dW50cmFja2VkLT5kaXJfb3BlbmVkIHx8CisJCSAgICAgZGlyLT51bnRyYWNrZWQtPmdpdGlnbm9yZV9pbnZhbGlkYXRlZCB8fAorCQkgICAgIGRpci0+dW50cmFja2VkLT5kaXJfaW52YWxpZGF0ZWQpKQorCQkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IFVOVFJBQ0tFRF9DSEFOR0VEOworCQlpZiAoZGlyLT51bnRyYWNrZWQgIT0gaXN0YXRlLT51bnRyYWNrZWQpIHsKKwkJCUZSRUVfQU5EX05VTEwoZGlyLT51bnRyYWNrZWQpOworCQl9CisJfQorCXJldHVybiBkaXItPm5yOworfQorCitpbnQgZmlsZV9leGlzdHMoY29uc3QgY2hhciAqZikKK3sKKwlzdHJ1Y3Qgc3RhdCBzYjsKKwlyZXR1cm4gbHN0YXQoZiwgJnNiKSA9PSAwOworfQorCitpbnQgcmVwb19maWxlX2V4aXN0cyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAocmVwbyAhPSB0aGVfcmVwb3NpdG9yeSkKKwkJQlVHKCJkbyBub3Qga25vdyBob3cgdG8gY2hlY2sgZmlsZSBleGlzdGVuY2UgaW4gYXJiaXRyYXJ5IHJlcG8iKTsKKworCXJldHVybiBmaWxlX2V4aXN0cyhwYXRoKTsKK30KKworc3RhdGljIGludCBjbXBfaWNhc2UoY2hhciBhLCBjaGFyIGIpCit7CisJaWYgKGEgPT0gYikKKwkJcmV0dXJuIDA7CisJaWYgKGlnbm9yZV9jYXNlKQorCQlyZXR1cm4gdG91cHBlcihhKSAtIHRvdXBwZXIoYik7CisJcmV0dXJuIGEgLSBiOworfQorCisvKgorICogR2l2ZW4gdHdvIG5vcm1hbGl6ZWQgcGF0aHMgKGEgdHJhaWxpbmcgc2xhc2ggaXMgb2spLCBpZiBzdWJkaXIgaXMKKyAqIG91dHNpZGUgZGlyLCByZXR1cm4gLTEuICBPdGhlcndpc2UgcmV0dXJuIHRoZSBvZmZzZXQgaW4gc3ViZGlyIHRoYXQKKyAqIGNhbiBiZSB1c2VkIGFzIHJlbGF0aXZlIHBhdGggdG8gZGlyLgorICovCitpbnQgZGlyX2luc2lkZV9vZihjb25zdCBjaGFyICpzdWJkaXIsIGNvbnN0IGNoYXIgKmRpcikKK3sKKwlpbnQgb2Zmc2V0ID0gMDsKKworCWFzc2VydChkaXIgJiYgc3ViZGlyICYmICpkaXIgJiYgKnN1YmRpcik7CisKKwl3aGlsZSAoKmRpciAmJiAqc3ViZGlyICYmICFjbXBfaWNhc2UoKmRpciwgKnN1YmRpcikpIHsKKwkJZGlyKys7CisJCXN1YmRpcisrOworCQlvZmZzZXQrKzsKKwl9CisKKwkvKiBoZWxbcF0vbWUgdnMgaGVsW2xdL3llYWggKi8KKwlpZiAoKmRpciAmJiAqc3ViZGlyKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoISpzdWJkaXIpCisJCXJldHVybiAhKmRpciA/IG9mZnNldCA6IC0xOyAvKiBzYW1lIGRpciAqLworCisJLyogZm9vL1tiXWFyIHZzIGZvby9bXSAqLworCWlmIChpc19kaXJfc2VwKGRpclstMV0pKQorCQlyZXR1cm4gaXNfZGlyX3NlcChzdWJkaXJbLTFdKSA/IG9mZnNldCA6IC0xOworCisJLyogZm9vWy9dYmFyIHZzIGZvb1tdICovCisJcmV0dXJuIGlzX2Rpcl9zZXAoKnN1YmRpcikgPyBvZmZzZXQgKyAxIDogLTE7Cit9CisKK2ludCBpc19pbnNpZGVfZGlyKGNvbnN0IGNoYXIgKmRpcikKK3sKKwljaGFyICpjd2Q7CisJaW50IHJjOworCisJaWYgKCFkaXIpCisJCXJldHVybiAwOworCisJY3dkID0geGdldGN3ZCgpOworCXJjID0gKGRpcl9pbnNpZGVfb2YoY3dkLCBkaXIpID49IDApOworCWZyZWUoY3dkKTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBpc19lbXB0eV9kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlESVIgKmRpciA9IG9wZW5kaXIocGF0aCk7CisJc3RydWN0IGRpcmVudCAqZTsKKwlpbnQgcmV0ID0gMTsKKworCWlmICghZGlyKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkKKwkJaWYgKCFpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpIHsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJlbW92ZV9kaXJfcmVjdXJzZShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBpbnQgZmxhZywgaW50ICprZXB0X3VwKQoreworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisJaW50IHJldCA9IDAsIG9yaWdpbmFsX2xlbiA9IHBhdGgtPmxlbiwgbGVuLCBrZXB0X2Rvd24gPSAwOworCWludCBvbmx5X2VtcHR5ID0gKGZsYWcgJiBSRU1PVkVfRElSX0VNUFRZX09OTFkpOworCWludCBrZWVwX3RvcGxldmVsID0gKGZsYWcgJiBSRU1PVkVfRElSX0tFRVBfVE9QTEVWRUwpOworCXN0cnVjdCBvYmplY3RfaWQgc3VibW9kdWxlX2hlYWQ7CisKKwlpZiAoKGZsYWcgJiBSRU1PVkVfRElSX0tFRVBfTkVTVEVEX0dJVCkgJiYKKwkgICAgIXJlc29sdmVfZ2l0bGlua19yZWYocGF0aC0+YnVmLCAiSEVBRCIsICZzdWJtb2R1bGVfaGVhZCkpIHsKKwkJLyogRG8gbm90IGRlc2NlbmQgYW5kIG51a2UgYSBuZXN0ZWQgZ2l0IHdvcmsgdHJlZS4gKi8KKwkJaWYgKGtlcHRfdXApCisJCQkqa2VwdF91cCA9IDE7CisJCXJldHVybiAwOworCX0KKworCWZsYWcgJj0gflJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTDsKKwlkaXIgPSBvcGVuZGlyKHBhdGgtPmJ1Zik7CisJaWYgKCFkaXIpIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybiBrZWVwX3RvcGxldmVsID8gLTEgOiAwOworCQllbHNlIGlmIChlcnJubyA9PSBFQUNDRVMgJiYgIWtlZXBfdG9wbGV2ZWwpCisJCQkvKgorCQkJICogQW4gZW1wdHkgZGlyIGNvdWxkIGJlIHJlbW92YWJsZSBldmVuIGlmIGl0CisJCQkgKiBpcyB1bnJlYWRhYmxlOgorCQkJICovCisJCQlyZXR1cm4gcm1kaXIocGF0aC0+YnVmKTsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfY29tcGxldGUocGF0aCwgJy8nKTsKKworCWxlbiA9IHBhdGgtPmxlbjsKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKHBhdGgsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgZS0+ZF9uYW1lKTsKKwkJaWYgKGxzdGF0KHBhdGgtPmJ1ZiwgJnN0KSkgeworCQkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCQkvKgorCQkJCSAqIGZpbGUgZGlzYXBwZWFyZWQsIHdoaWNoIGlzIHdoYXQgd2UKKwkJCQkgKiB3YW50ZWQgYW55d2F5CisJCQkJICovCisJCQkJY29udGludWU7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJfSBlbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQlpZiAoIXJlbW92ZV9kaXJfcmVjdXJzZShwYXRoLCBmbGFnLCAma2VwdF9kb3duKSkKKwkJCQljb250aW51ZTsgLyogaGFwcHkgKi8KKwkJfSBlbHNlIGlmICghb25seV9lbXB0eSAmJgorCQkJICAgKCF1bmxpbmsocGF0aC0+YnVmKSB8fCBlcnJubyA9PSBFTk9FTlQpKSB7CisJCQljb250aW51ZTsgLyogaGFwcHksIHRvbyAqLworCQl9CisKKwkJLyogcGF0aCB0b28gbG9uZywgc3RhdCBmYWlscywgb3Igbm9uLWRpcmVjdG9yeSBzdGlsbCBleGlzdHMgKi8KKwkJcmV0ID0gLTE7CisJCWJyZWFrOworCX0KKwljbG9zZWRpcihkaXIpOworCisJc3RyYnVmX3NldGxlbihwYXRoLCBvcmlnaW5hbF9sZW4pOworCWlmICghcmV0ICYmICFrZWVwX3RvcGxldmVsICYmICFrZXB0X2Rvd24pCisJCXJldCA9ICghcm1kaXIocGF0aC0+YnVmKSB8fCBlcnJubyA9PSBFTk9FTlQpID8gMCA6IC0xOworCWVsc2UgaWYgKGtlcHRfdXApCisJCS8qCisJCSAqIHJlcG9ydCB0aGUgdXBsZXZlbCB0aGF0IGl0IGlzIG5vdCBhbiBlcnJvciB0aGF0IHdlCisJCSAqIGRpZCBub3Qgcm1kaXIoKSBvdXIgZGlyZWN0b3J5LgorCQkgKi8KKwkJKmtlcHRfdXAgPSAhcmV0OworCXJldHVybiByZXQ7Cit9CisKK2ludCByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KHN0cnVjdCBzdHJidWYgKnBhdGgsIGludCBmbGFnKQoreworCXJldHVybiByZW1vdmVfZGlyX3JlY3Vyc2UocGF0aCwgZmxhZywgTlVMTCk7Cit9CisKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2luZm9fZXhjbHVkZSwgImluZm8vZXhjbHVkZSIpCisKK3ZvaWQgc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlkaXItPmV4Y2x1ZGVfcGVyX2RpciA9ICIuZ2l0aWdub3JlIjsKKworCS8qIGNvcmUuZXhjbHVkZXNmaWxlIGRlZmF1bHRpbmcgdG8gJFhER19DT05GSUdfSE9NRS9naXQvaWdub3JlICovCisJaWYgKCFleGNsdWRlc19maWxlKQorCQlleGNsdWRlc19maWxlID0geGRnX2NvbmZpZ19ob21lKCJpZ25vcmUiKTsKKwlpZiAoZXhjbHVkZXNfZmlsZSAmJiAhYWNjZXNzX29yX3dhcm4oZXhjbHVkZXNfZmlsZSwgUl9PSywgMCkpCisJCWFkZF9wYXR0ZXJuc19mcm9tX2ZpbGVfMShkaXIsIGV4Y2x1ZGVzX2ZpbGUsCisJCQkJCSBkaXItPnVudHJhY2tlZCA/ICZkaXItPnNzX2V4Y2x1ZGVzX2ZpbGUgOiBOVUxMKTsKKworCS8qIHBlciByZXBvc2l0b3J5IHVzZXIgcHJlZmVyZW5jZSAqLworCWlmIChzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkgeworCQljb25zdCBjaGFyICpwYXRoID0gZ2l0X3BhdGhfaW5mb19leGNsdWRlKCk7CisJCWlmICghYWNjZXNzX29yX3dhcm4ocGF0aCwgUl9PSywgMCkpCisJCQlhZGRfcGF0dGVybnNfZnJvbV9maWxlXzEoZGlyLCBwYXRoLAorCQkJCQkJIGRpci0+dW50cmFja2VkID8gJmRpci0+c3NfaW5mb19leGNsdWRlIDogTlVMTCk7CisJfQorfQorCitpbnQgcmVtb3ZlX3BhdGgoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyICpzbGFzaDsKKworCWlmICh1bmxpbmsobmFtZSkgJiYgIWlzX21pc3NpbmdfZmlsZV9lcnJvcihlcnJubykpCisJCXJldHVybiAtMTsKKworCXNsYXNoID0gc3RycmNocihuYW1lLCAnLycpOworCWlmIChzbGFzaCkgeworCQljaGFyICpkaXJzID0geHN0cmR1cChuYW1lKTsKKwkJc2xhc2ggPSBkaXJzICsgKHNsYXNoIC0gbmFtZSk7CisJCWRvIHsKKwkJCSpzbGFzaCA9ICdcMCc7CisJCX0gd2hpbGUgKHJtZGlyKGRpcnMpID09IDAgJiYgKHNsYXNoID0gc3RycmNocihkaXJzLCAnLycpKSk7CisJCWZyZWUoZGlycyk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogRnJlZXMgbWVtb3J5IHdpdGhpbiBkaXIgd2hpY2ggd2FzIGFsbG9jYXRlZCBmb3IgZXhjbHVkZSBsaXN0cyBhbmQKKyAqIHRoZSBleGNsdWRlX3N0YWNrLiAgRG9lcyBub3QgZnJlZSBkaXIgaXRzZWxmLgorICovCit2b2lkIGNsZWFyX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQoreworCWludCBpLCBqOworCXN0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgKmdyb3VwOworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsOworCXN0cnVjdCBleGNsdWRlX3N0YWNrICpzdGs7CisKKwlmb3IgKGkgPSBFWENfQ01ETDsgaSA8PSBFWENfRklMRTsgaSsrKSB7CisJCWdyb3VwID0gJmRpci0+ZXhjbHVkZV9saXN0X2dyb3VwW2ldOworCQlmb3IgKGogPSAwOyBqIDwgZ3JvdXAtPm5yOyBqKyspIHsKKwkJCXBsID0gJmdyb3VwLT5wbFtqXTsKKwkJCWlmIChpID09IEVYQ19ESVJTKQorCQkJCWZyZWUoKGNoYXIgKilwbC0+c3JjKTsKKwkJCWNsZWFyX3BhdHRlcm5fbGlzdChwbCk7CisJCX0KKwkJZnJlZShncm91cC0+cGwpOworCX0KKworCXN0ayA9IGRpci0+ZXhjbHVkZV9zdGFjazsKKwl3aGlsZSAoc3RrKSB7CisJCXN0cnVjdCBleGNsdWRlX3N0YWNrICpwcmV2ID0gc3RrLT5wcmV2OworCQlmcmVlKHN0ayk7CisJCXN0ayA9IHByZXY7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZkaXItPmJhc2VidWYpOworfQorCitzdHJ1Y3Qgb25kaXNrX3VudHJhY2tlZF9jYWNoZSB7CisJc3RydWN0IHN0YXRfZGF0YSBpbmZvX2V4Y2x1ZGVfc3RhdDsKKwlzdHJ1Y3Qgc3RhdF9kYXRhIGV4Y2x1ZGVzX2ZpbGVfc3RhdDsKKwl1aW50MzJfdCBkaXJfZmxhZ3M7Cit9OworCisjZGVmaW5lIG91Y19vZmZzZXQoeCkgb2Zmc2V0b2Yoc3RydWN0IG9uZGlza191bnRyYWNrZWRfY2FjaGUsIHgpCisKK3N0cnVjdCB3cml0ZV9kYXRhIHsKKwlpbnQgaW5kZXg7CSAgIC8qIG51bWJlciBvZiB3cml0dGVuIHVudHJhY2tlZF9jYWNoZV9kaXIgKi8KKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmNoZWNrX29ubHk7IC8qIGZyb20gdW50cmFja2VkX2NhY2hlX2RpciAqLworCXN0cnVjdCBld2FoX2JpdG1hcCAqdmFsaWQ7CS8qIGZyb20gdW50cmFja2VkX2NhY2hlX2RpciAqLworCXN0cnVjdCBld2FoX2JpdG1hcCAqc2hhMV92YWxpZDsgLyogc2V0IGlmIGV4Y2x1ZGVfc2hhMSBpcyBub3QgbnVsbCAqLworCXN0cnVjdCBzdHJidWYgb3V0OworCXN0cnVjdCBzdHJidWYgc2Jfc3RhdDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiX3NoYTE7Cit9OworCitzdGF0aWMgdm9pZCBzdGF0X2RhdGFfdG9fZGlzayhzdHJ1Y3Qgc3RhdF9kYXRhICp0bywgY29uc3Qgc3RydWN0IHN0YXRfZGF0YSAqZnJvbSkKK3sKKwl0by0+c2RfY3RpbWUuc2VjICA9IGh0b25sKGZyb20tPnNkX2N0aW1lLnNlYyk7CisJdG8tPnNkX2N0aW1lLm5zZWMgPSBodG9ubChmcm9tLT5zZF9jdGltZS5uc2VjKTsKKwl0by0+c2RfbXRpbWUuc2VjICA9IGh0b25sKGZyb20tPnNkX210aW1lLnNlYyk7CisJdG8tPnNkX210aW1lLm5zZWMgPSBodG9ubChmcm9tLT5zZF9tdGltZS5uc2VjKTsKKwl0by0+c2RfZGV2CSAgPSBodG9ubChmcm9tLT5zZF9kZXYpOworCXRvLT5zZF9pbm8JICA9IGh0b25sKGZyb20tPnNkX2lubyk7CisJdG8tPnNkX3VpZAkgID0gaHRvbmwoZnJvbS0+c2RfdWlkKTsKKwl0by0+c2RfZ2lkCSAgPSBodG9ubChmcm9tLT5zZF9naWQpOworCXRvLT5zZF9zaXplCSAgPSBodG9ubChmcm9tLT5zZF9zaXplKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfb25lX2RpcihzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdW50cmFja2VkLAorCQkJICBzdHJ1Y3Qgd3JpdGVfZGF0YSAqd2QpCit7CisJc3RydWN0IHN0YXRfZGF0YSBzdGF0X2RhdGE7CisJc3RydWN0IHN0cmJ1ZiAqb3V0ID0gJndkLT5vdXQ7CisJdW5zaWduZWQgY2hhciBpbnRidWZbMTZdOworCXVuc2lnbmVkIGludCBpbnRsZW4sIHZhbHVlOworCWludCBpID0gd2QtPmluZGV4Kys7CisKKwkvKgorCSAqIHVudHJhY2tlZF9uciBzaG91bGQgYmUgcmVzZXQgd2hlbmV2ZXIgdmFsaWQgaXMgY2xlYXIsIGJ1dAorCSAqIGZvciBzYWZldHkuLgorCSAqLworCWlmICghdW50cmFja2VkLT52YWxpZCkgeworCQl1bnRyYWNrZWQtPnVudHJhY2tlZF9uciA9IDA7CisJCXVudHJhY2tlZC0+Y2hlY2tfb25seSA9IDA7CisJfQorCisJaWYgKHVudHJhY2tlZC0+Y2hlY2tfb25seSkKKwkJZXdhaF9zZXQod2QtPmNoZWNrX29ubHksIGkpOworCWlmICh1bnRyYWNrZWQtPnZhbGlkKSB7CisJCWV3YWhfc2V0KHdkLT52YWxpZCwgaSk7CisJCXN0YXRfZGF0YV90b19kaXNrKCZzdGF0X2RhdGEsICZ1bnRyYWNrZWQtPnN0YXRfZGF0YSk7CisJCXN0cmJ1Zl9hZGQoJndkLT5zYl9zdGF0LCAmc3RhdF9kYXRhLCBzaXplb2Yoc3RhdF9kYXRhKSk7CisJfQorCWlmICghaXNfbnVsbF9vaWQoJnVudHJhY2tlZC0+ZXhjbHVkZV9vaWQpKSB7CisJCWV3YWhfc2V0KHdkLT5zaGExX3ZhbGlkLCBpKTsKKwkJc3RyYnVmX2FkZCgmd2QtPnNiX3NoYTEsIHVudHJhY2tlZC0+ZXhjbHVkZV9vaWQuaGFzaCwKKwkJCSAgIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwl9CisKKwlpbnRsZW4gPSBlbmNvZGVfdmFyaW50KHVudHJhY2tlZC0+dW50cmFja2VkX25yLCBpbnRidWYpOworCXN0cmJ1Zl9hZGQob3V0LCBpbnRidWYsIGludGxlbik7CisKKwkvKiBza2lwIG5vbi1yZWN1cnNlIGRpcmVjdG9yaWVzICovCisJZm9yIChpID0gMCwgdmFsdWUgPSAwOyBpIDwgdW50cmFja2VkLT5kaXJzX25yOyBpKyspCisJCWlmICh1bnRyYWNrZWQtPmRpcnNbaV0tPnJlY3Vyc2UpCisJCQl2YWx1ZSsrOworCWludGxlbiA9IGVuY29kZV92YXJpbnQodmFsdWUsIGludGJ1Zik7CisJc3RyYnVmX2FkZChvdXQsIGludGJ1ZiwgaW50bGVuKTsKKworCXN0cmJ1Zl9hZGQob3V0LCB1bnRyYWNrZWQtPm5hbWUsIHN0cmxlbih1bnRyYWNrZWQtPm5hbWUpICsgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdW50cmFja2VkLT51bnRyYWNrZWRfbnI7IGkrKykKKwkJc3RyYnVmX2FkZChvdXQsIHVudHJhY2tlZC0+dW50cmFja2VkW2ldLAorCQkJICAgc3RybGVuKHVudHJhY2tlZC0+dW50cmFja2VkW2ldKSArIDEpOworCisJZm9yIChpID0gMDsgaSA8IHVudHJhY2tlZC0+ZGlyc19ucjsgaSsrKQorCQlpZiAodW50cmFja2VkLT5kaXJzW2ldLT5yZWN1cnNlKQorCQkJd3JpdGVfb25lX2Rpcih1bnRyYWNrZWQtPmRpcnNbaV0sIHdkKTsKK30KKwordm9pZCB3cml0ZV91bnRyYWNrZWRfZXh0ZW5zaW9uKHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdW50cmFja2VkKQoreworCXN0cnVjdCBvbmRpc2tfdW50cmFja2VkX2NhY2hlICpvdWM7CisJc3RydWN0IHdyaXRlX2RhdGEgd2Q7CisJdW5zaWduZWQgY2hhciB2YXJidWZbMTZdOworCWludCB2YXJpbnRfbGVuOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJb3VjID0geGNhbGxvYygxLCBzaXplb2YoKm91YykpOworCXN0YXRfZGF0YV90b19kaXNrKCZvdWMtPmluZm9fZXhjbHVkZV9zdGF0LCAmdW50cmFja2VkLT5zc19pbmZvX2V4Y2x1ZGUuc3RhdCk7CisJc3RhdF9kYXRhX3RvX2Rpc2soJm91Yy0+ZXhjbHVkZXNfZmlsZV9zdGF0LCAmdW50cmFja2VkLT5zc19leGNsdWRlc19maWxlLnN0YXQpOworCW91Yy0+ZGlyX2ZsYWdzID0gaHRvbmwodW50cmFja2VkLT5kaXJfZmxhZ3MpOworCisJdmFyaW50X2xlbiA9IGVuY29kZV92YXJpbnQodW50cmFja2VkLT5pZGVudC5sZW4sIHZhcmJ1Zik7CisJc3RyYnVmX2FkZChvdXQsIHZhcmJ1ZiwgdmFyaW50X2xlbik7CisJc3RyYnVmX2FkZGJ1ZihvdXQsICZ1bnRyYWNrZWQtPmlkZW50KTsKKworCXN0cmJ1Zl9hZGQob3V0LCBvdWMsIHNpemVvZigqb3VjKSk7CisJc3RyYnVmX2FkZChvdXQsIHVudHJhY2tlZC0+c3NfaW5mb19leGNsdWRlLm9pZC5oYXNoLCBoYXNoc3opOworCXN0cmJ1Zl9hZGQob3V0LCB1bnRyYWNrZWQtPnNzX2V4Y2x1ZGVzX2ZpbGUub2lkLmhhc2gsIGhhc2hzeik7CisJc3RyYnVmX2FkZChvdXQsIHVudHJhY2tlZC0+ZXhjbHVkZV9wZXJfZGlyLCBzdHJsZW4odW50cmFja2VkLT5leGNsdWRlX3Blcl9kaXIpICsgMSk7CisJRlJFRV9BTkRfTlVMTChvdWMpOworCisJaWYgKCF1bnRyYWNrZWQtPnJvb3QpIHsKKwkJdmFyaW50X2xlbiA9IGVuY29kZV92YXJpbnQoMCwgdmFyYnVmKTsKKwkJc3RyYnVmX2FkZChvdXQsIHZhcmJ1ZiwgdmFyaW50X2xlbik7CisJCXJldHVybjsKKwl9CisKKwl3ZC5pbmRleCAgICAgID0gMDsKKwl3ZC5jaGVja19vbmx5ID0gZXdhaF9uZXcoKTsKKwl3ZC52YWxpZCAgICAgID0gZXdhaF9uZXcoKTsKKwl3ZC5zaGExX3ZhbGlkID0gZXdhaF9uZXcoKTsKKwlzdHJidWZfaW5pdCgmd2Qub3V0LCAxMDI0KTsKKwlzdHJidWZfaW5pdCgmd2Quc2Jfc3RhdCwgMTAyNCk7CisJc3RyYnVmX2luaXQoJndkLnNiX3NoYTEsIDEwMjQpOworCXdyaXRlX29uZV9kaXIodW50cmFja2VkLT5yb290LCAmd2QpOworCisJdmFyaW50X2xlbiA9IGVuY29kZV92YXJpbnQod2QuaW5kZXgsIHZhcmJ1Zik7CisJc3RyYnVmX2FkZChvdXQsIHZhcmJ1ZiwgdmFyaW50X2xlbik7CisJc3RyYnVmX2FkZGJ1ZihvdXQsICZ3ZC5vdXQpOworCWV3YWhfc2VyaWFsaXplX3N0cmJ1Zih3ZC52YWxpZCwgb3V0KTsKKwlld2FoX3NlcmlhbGl6ZV9zdHJidWYod2QuY2hlY2tfb25seSwgb3V0KTsKKwlld2FoX3NlcmlhbGl6ZV9zdHJidWYod2Quc2hhMV92YWxpZCwgb3V0KTsKKwlzdHJidWZfYWRkYnVmKG91dCwgJndkLnNiX3N0YXQpOworCXN0cmJ1Zl9hZGRidWYob3V0LCAmd2Quc2Jfc2hhMSk7CisJc3RyYnVmX2FkZGNoKG91dCwgJ1wwJyk7IC8qIHNhZmUgZ3VhcmQgZm9yIHN0cmluZyBsaXN0cyAqLworCisJZXdhaF9mcmVlKHdkLnZhbGlkKTsKKwlld2FoX2ZyZWUod2QuY2hlY2tfb25seSk7CisJZXdhaF9mcmVlKHdkLnNoYTFfdmFsaWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZ3ZC5vdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZ3ZC5zYl9zdGF0KTsKKwlzdHJidWZfcmVsZWFzZSgmd2Quc2Jfc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdW50cmFja2VkKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1Y2QpCit7CisJaW50IGk7CisJaWYgKCF1Y2QpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgdWNkLT5kaXJzX25yOyBpKyspCisJCWZyZWVfdW50cmFja2VkKHVjZC0+ZGlyc1tpXSk7CisJZm9yIChpID0gMDsgaSA8IHVjZC0+dW50cmFja2VkX25yOyBpKyspCisJCWZyZWUodWNkLT51bnRyYWNrZWRbaV0pOworCWZyZWUodWNkLT51bnRyYWNrZWQpOworCWZyZWUodWNkLT5kaXJzKTsKKwlmcmVlKHVjZCk7Cit9CisKK3ZvaWQgZnJlZV91bnRyYWNrZWRfY2FjaGUoc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWMpCit7CisJaWYgKHVjKQorCQlmcmVlX3VudHJhY2tlZCh1Yy0+cm9vdCk7CisJZnJlZSh1Yyk7Cit9CisKK3N0cnVjdCByZWFkX2RhdGEgeworCWludCBpbmRleDsKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqKnVjZDsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmNoZWNrX29ubHk7CisJc3RydWN0IGV3YWhfYml0bWFwICp2YWxpZDsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNoYTFfdmFsaWQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICplbmQ7Cit9OworCitzdGF0aWMgdm9pZCBzdGF0X2RhdGFfZnJvbV9kaXNrKHN0cnVjdCBzdGF0X2RhdGEgKnRvLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCW1lbWNweSh0bywgZGF0YSwgc2l6ZW9mKCp0bykpOworCXRvLT5zZF9jdGltZS5zZWMgID0gbnRvaGwodG8tPnNkX2N0aW1lLnNlYyk7CisJdG8tPnNkX2N0aW1lLm5zZWMgPSBudG9obCh0by0+c2RfY3RpbWUubnNlYyk7CisJdG8tPnNkX210aW1lLnNlYyAgPSBudG9obCh0by0+c2RfbXRpbWUuc2VjKTsKKwl0by0+c2RfbXRpbWUubnNlYyA9IG50b2hsKHRvLT5zZF9tdGltZS5uc2VjKTsKKwl0by0+c2RfZGV2CSAgPSBudG9obCh0by0+c2RfZGV2KTsKKwl0by0+c2RfaW5vCSAgPSBudG9obCh0by0+c2RfaW5vKTsKKwl0by0+c2RfdWlkCSAgPSBudG9obCh0by0+c2RfdWlkKTsKKwl0by0+c2RfZ2lkCSAgPSBudG9obCh0by0+c2RfZ2lkKTsKKwl0by0+c2Rfc2l6ZQkgID0gbnRvaGwodG8tPnNkX3NpemUpOworfQorCitzdGF0aWMgaW50IHJlYWRfb25lX2RpcihzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqKnVudHJhY2tlZF8sCisJCQlzdHJ1Y3QgcmVhZF9kYXRhICpyZCkKK3sKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciB1ZCwgKnVudHJhY2tlZDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gcmQtPmRhdGEsICplbmQgPSByZC0+ZW5kOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVvczsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJaW50IGk7CisKKwltZW1zZXQoJnVkLCAwLCBzaXplb2YodWQpKTsKKworCXZhbHVlID0gZGVjb2RlX3ZhcmludCgmZGF0YSk7CisJaWYgKGRhdGEgPiBlbmQpCisJCXJldHVybiAtMTsKKwl1ZC5yZWN1cnNlCSAgID0gMTsKKwl1ZC51bnRyYWNrZWRfYWxsb2MgPSB2YWx1ZTsKKwl1ZC51bnRyYWNrZWRfbnIJICAgPSB2YWx1ZTsKKwlpZiAodWQudW50cmFja2VkX25yKQorCQlBTExPQ19BUlJBWSh1ZC51bnRyYWNrZWQsIHVkLnVudHJhY2tlZF9ucik7CisKKwl1ZC5kaXJzX2FsbG9jID0gdWQuZGlyc19uciA9IGRlY29kZV92YXJpbnQoJmRhdGEpOworCWlmIChkYXRhID4gZW5kKQorCQlyZXR1cm4gLTE7CisJQUxMT0NfQVJSQVkodWQuZGlycywgdWQuZGlyc19ucik7CisKKwllb3MgPSBtZW1jaHIoZGF0YSwgJ1wwJywgZW5kIC0gZGF0YSk7CisJaWYgKCFlb3MgfHwgZW9zID09IGVuZCkKKwkJcmV0dXJuIC0xOworCisJKnVudHJhY2tlZF8gPSB1bnRyYWNrZWQgPSB4bWFsbG9jKHN0X2FkZDMoc2l6ZW9mKCp1bnRyYWNrZWQpLCBlb3MgLSBkYXRhLCAxKSk7CisJbWVtY3B5KHVudHJhY2tlZCwgJnVkLCBzaXplb2YodWQpKTsKKwltZW1jcHkodW50cmFja2VkLT5uYW1lLCBkYXRhLCBlb3MgLSBkYXRhICsgMSk7CisJZGF0YSA9IGVvcyArIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgdW50cmFja2VkLT51bnRyYWNrZWRfbnI7IGkrKykgeworCQllb3MgPSBtZW1jaHIoZGF0YSwgJ1wwJywgZW5kIC0gZGF0YSk7CisJCWlmICghZW9zIHx8IGVvcyA9PSBlbmQpCisJCQlyZXR1cm4gLTE7CisJCXVudHJhY2tlZC0+dW50cmFja2VkW2ldID0geG1lbWR1cHooZGF0YSwgZW9zIC0gZGF0YSk7CisJCWRhdGEgPSBlb3MgKyAxOworCX0KKworCXJkLT51Y2RbcmQtPmluZGV4KytdID0gdW50cmFja2VkOworCXJkLT5kYXRhID0gZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCB1bnRyYWNrZWQtPmRpcnNfbnI7IGkrKykgeworCQlpZiAocmVhZF9vbmVfZGlyKHVudHJhY2tlZC0+ZGlycyArIGksIHJkKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfY2hlY2tfb25seShzaXplX3QgcG9zLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcmVhZF9kYXRhICpyZCA9IGNiOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1ZCA9IHJkLT51Y2RbcG9zXTsKKwl1ZC0+Y2hlY2tfb25seSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfc3RhdChzaXplX3QgcG9zLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcmVhZF9kYXRhICpyZCA9IGNiOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1ZCA9IHJkLT51Y2RbcG9zXTsKKwlpZiAocmQtPmRhdGEgKyBzaXplb2Yoc3RydWN0IHN0YXRfZGF0YSkgPiByZC0+ZW5kKSB7CisJCXJkLT5kYXRhID0gcmQtPmVuZCArIDE7CisJCXJldHVybjsKKwl9CisJc3RhdF9kYXRhX2Zyb21fZGlzaygmdWQtPnN0YXRfZGF0YSwgcmQtPmRhdGEpOworCXJkLT5kYXRhICs9IHNpemVvZihzdHJ1Y3Qgc3RhdF9kYXRhKTsKKwl1ZC0+dmFsaWQgPSAxOworfQorCitzdGF0aWMgdm9pZCByZWFkX29pZChzaXplX3QgcG9zLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcmVhZF9kYXRhICpyZCA9IGNiOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1ZCA9IHJkLT51Y2RbcG9zXTsKKwlpZiAocmQtPmRhdGEgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeiA+IHJkLT5lbmQpIHsKKwkJcmQtPmRhdGEgPSByZC0+ZW5kICsgMTsKKwkJcmV0dXJuOworCX0KKwloYXNoY3B5KHVkLT5leGNsdWRlX29pZC5oYXNoLCByZC0+ZGF0YSk7CisJcmQtPmRhdGEgKz0gdGhlX2hhc2hfYWxnby0+cmF3c3o7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfb2lkX3N0YXQoc3RydWN0IG9pZF9zdGF0ICpvaWRfc3RhdCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0X2RhdGFfZnJvbV9kaXNrKCZvaWRfc3RhdC0+c3RhdCwgZGF0YSk7CisJaGFzaGNweShvaWRfc3RhdC0+b2lkLmhhc2gsIHNoYTEpOworCW9pZF9zdGF0LT52YWxpZCA9IDE7Cit9CisKK3N0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnJlYWRfdW50cmFja2VkX2V4dGVuc2lvbihjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHN6KQoreworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVjOworCXN0cnVjdCByZWFkX2RhdGEgcmQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmV4dCA9IGRhdGEsICplbmQgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKWRhdGEgKyBzejsKKwljb25zdCBjaGFyICppZGVudDsKKwlpbnQgaWRlbnRfbGVuOworCXNzaXplX3QgbGVuOworCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfcGVyX2RpcjsKKwljb25zdCB1bnNpZ25lZCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKwljb25zdCB1bnNpZ25lZCBvZmZzZXQgPSBzaXplb2Yoc3RydWN0IG9uZGlza191bnRyYWNrZWRfY2FjaGUpOworCWNvbnN0IHVuc2lnbmVkIGV4Y2x1ZGVfcGVyX2Rpcl9vZmZzZXQgPSBvZmZzZXQgKyAyICogaGFzaHN6OworCisJaWYgKHN6IDw9IDEgfHwgZW5kWy0xXSAhPSAnXDAnKQorCQlyZXR1cm4gTlVMTDsKKwllbmQtLTsKKworCWlkZW50X2xlbiA9IGRlY29kZV92YXJpbnQoJm5leHQpOworCWlmIChuZXh0ICsgaWRlbnRfbGVuID4gZW5kKQorCQlyZXR1cm4gTlVMTDsKKwlpZGVudCA9IChjb25zdCBjaGFyICopbmV4dDsKKwluZXh0ICs9IGlkZW50X2xlbjsKKworCWlmIChuZXh0ICsgZXhjbHVkZV9wZXJfZGlyX29mZnNldCArIDEgPiBlbmQpCisJCXJldHVybiBOVUxMOworCisJdWMgPSB4Y2FsbG9jKDEsIHNpemVvZigqdWMpKTsKKwlzdHJidWZfaW5pdCgmdWMtPmlkZW50LCBpZGVudF9sZW4pOworCXN0cmJ1Zl9hZGQoJnVjLT5pZGVudCwgaWRlbnQsIGlkZW50X2xlbik7CisJbG9hZF9vaWRfc3RhdCgmdWMtPnNzX2luZm9fZXhjbHVkZSwKKwkJICAgICAgbmV4dCArIG91Y19vZmZzZXQoaW5mb19leGNsdWRlX3N0YXQpLAorCQkgICAgICBuZXh0ICsgb2Zmc2V0KTsKKwlsb2FkX29pZF9zdGF0KCZ1Yy0+c3NfZXhjbHVkZXNfZmlsZSwKKwkJICAgICAgbmV4dCArIG91Y19vZmZzZXQoZXhjbHVkZXNfZmlsZV9zdGF0KSwKKwkJICAgICAgbmV4dCArIG9mZnNldCArIGhhc2hzeik7CisJdWMtPmRpcl9mbGFncyA9IGdldF9iZTMyKG5leHQgKyBvdWNfb2Zmc2V0KGRpcl9mbGFncykpOworCWV4Y2x1ZGVfcGVyX2RpciA9IChjb25zdCBjaGFyICopbmV4dCArIGV4Y2x1ZGVfcGVyX2Rpcl9vZmZzZXQ7CisJdWMtPmV4Y2x1ZGVfcGVyX2RpciA9IHhzdHJkdXAoZXhjbHVkZV9wZXJfZGlyKTsKKwkvKiBOVUwgYWZ0ZXIgZXhjbHVkZV9wZXJfZGlyIGlzIGNvdmVyZWQgYnkgc2l6ZW9mKCpvdWMpICovCisJbmV4dCArPSBleGNsdWRlX3Blcl9kaXJfb2Zmc2V0ICsgc3RybGVuKGV4Y2x1ZGVfcGVyX2RpcikgKyAxOworCWlmIChuZXh0ID49IGVuZCkKKwkJZ290byBkb25lMjsKKworCWxlbiA9IGRlY29kZV92YXJpbnQoJm5leHQpOworCWlmIChuZXh0ID4gZW5kIHx8IGxlbiA9PSAwKQorCQlnb3RvIGRvbmUyOworCisJcmQudmFsaWQgICAgICA9IGV3YWhfbmV3KCk7CisJcmQuY2hlY2tfb25seSA9IGV3YWhfbmV3KCk7CisJcmQuc2hhMV92YWxpZCA9IGV3YWhfbmV3KCk7CisJcmQuZGF0YQkgICAgICA9IG5leHQ7CisJcmQuZW5kCSAgICAgID0gZW5kOworCXJkLmluZGV4ICAgICAgPSAwOworCUFMTE9DX0FSUkFZKHJkLnVjZCwgbGVuKTsKKworCWlmIChyZWFkX29uZV9kaXIoJnVjLT5yb290LCAmcmQpIHx8IHJkLmluZGV4ICE9IGxlbikKKwkJZ290byBkb25lOworCisJbmV4dCA9IHJkLmRhdGE7CisJbGVuID0gZXdhaF9yZWFkX21tYXAocmQudmFsaWQsIG5leHQsIGVuZCAtIG5leHQpOworCWlmIChsZW4gPCAwKQorCQlnb3RvIGRvbmU7CisKKwluZXh0ICs9IGxlbjsKKwlsZW4gPSBld2FoX3JlYWRfbW1hcChyZC5jaGVja19vbmx5LCBuZXh0LCBlbmQgLSBuZXh0KTsKKwlpZiAobGVuIDwgMCkKKwkJZ290byBkb25lOworCisJbmV4dCArPSBsZW47CisJbGVuID0gZXdhaF9yZWFkX21tYXAocmQuc2hhMV92YWxpZCwgbmV4dCwgZW5kIC0gbmV4dCk7CisJaWYgKGxlbiA8IDApCisJCWdvdG8gZG9uZTsKKworCWV3YWhfZWFjaF9iaXQocmQuY2hlY2tfb25seSwgc2V0X2NoZWNrX29ubHksICZyZCk7CisJcmQuZGF0YSA9IG5leHQgKyBsZW47CisJZXdhaF9lYWNoX2JpdChyZC52YWxpZCwgcmVhZF9zdGF0LCAmcmQpOworCWV3YWhfZWFjaF9iaXQocmQuc2hhMV92YWxpZCwgcmVhZF9vaWQsICZyZCk7CisJbmV4dCA9IHJkLmRhdGE7CisKK2RvbmU6CisJZnJlZShyZC51Y2QpOworCWV3YWhfZnJlZShyZC52YWxpZCk7CisJZXdhaF9mcmVlKHJkLmNoZWNrX29ubHkpOworCWV3YWhfZnJlZShyZC5zaGExX3ZhbGlkKTsKK2RvbmUyOgorCWlmIChuZXh0ICE9IGVuZCkgeworCQlmcmVlX3VudHJhY2tlZF9jYWNoZSh1Yyk7CisJCXVjID0gTlVMTDsKKwl9CisJcmV0dXJuIHVjOworfQorCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX29uZV9kaXJlY3Rvcnkoc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWMsCisJCQkJICAgICBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdWNkKQoreworCXVjLT5kaXJfaW52YWxpZGF0ZWQrKzsKKwl1Y2QtPnZhbGlkID0gMDsKKwl1Y2QtPnVudHJhY2tlZF9uciA9IDA7Cit9CisKKy8qCisgKiBOb3JtYWxseSB3aGVuIGFuIGVudHJ5IGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBhIGRpcmVjdG9yeSwKKyAqIGludmFsaWRhdGluZyB0aGF0IGRpcmVjdG9yeSBpcyBlbm91Z2guIE5vIG5lZWQgdG8gdG91Y2ggaXRzCisgKiBhbmNlc3RvcnMuIFdoZW4gYSBkaXJlY3RvcnkgaXMgc2hvd24gYXMgImZvby9iYXIvIiBpbiBnaXQtc3RhdHVzCisgKiBob3dldmVyLCBkZWxldGluZyBvciBhZGRpbmcgYW4gZW50cnkgbWF5IGhhdmUgY2FzY2FkaW5nIGVmZmVjdC4KKyAqCisgKiBTYXkgdGhlICJmb28vYmFyL2ZpbGUiIGhhcyBiZWNvbWUgdW50cmFja2VkLCB3ZSBuZWVkIHRvIHRlbGwgdGhlCisgKiB1bnRyYWNrZWRfY2FjaGVfZGlyIG9mICJmb28iIHRoYXQgImJhci8iIGlzIG5vdCBhbiB1bnRyYWNrZWQKKyAqIGRpcmVjdG9yeSBhbnkgbW9yZSAoYmVjYXVzZSAiYmFyIiBpcyBtYW5hZ2VkIGJ5IGZvbyBhcyBhbiB1bnRyYWNrZWQKKyAqICJmaWxlIikuCisgKgorICogU2ltaWxhcmx5LCBpZiAiZm9vL2Jhci9maWxlIiBtb3ZlcyBmcm9tIHVudHJhY2tlZCB0byB0cmFja2VkIGFuZCBpdAorICogd2FzIHRoZSBsYXN0IHVudHJhY2tlZCBlbnRyeSBpbiB0aGUgZW50aXJlICJmb28iLCB3ZSBzaG91bGQgc2hvdworICogImZvby8iIGluc3RlYWQuIFdoaWNoIG1lYW5zIHdlIGhhdmUgdG8gaW52YWxpZGF0ZSBwYXN0ICJiYXIiIHVwIHRvCisgKiAiZm9vIi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyBhbGwgZGlyZWN0b3JpZXMgZnJvbSByb290IHRvIGxlYWYuIElmIHRoZXJlCisgKiBpcyBhIGNoYW5jZSBvZiBvbmUgb2YgdGhlIGFib3ZlIGNhc2VzIGhhcHBlbmluZywgd2UgaW52YWxpZGF0ZSBiYWNrCisgKiB0byByb290LiBPdGhlcndpc2Ugd2UganVzdCBpbnZhbGlkYXRlIHRoZSBsZWFmLiBUaGVyZSBtYXkgYmUgYSBtb3JlCisgKiBzb3BoaXN0aWNhdGVkIHdheSB0aGFuIGNoZWNraW5nIGZvciBTSE9XX09USEVSX0RJUkVDVE9SSUVTIHRvCisgKiBkZXRlY3QgdGhlc2UgY2FzZXMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IGludmFsaWRhdGlvbiwgZm9yIGV4YW1wbGUsCisgKiBjaGVja2luZyBmb3IgdGhlIHVudHJhY2tlZCBlbnRyeSBuYW1lZCAiYmFyLyIgaW4gImZvbyIsIGJ1dCBmb3Igbm93CisgKiBzdGljayB0byBzb21ldGhpbmcgc2FmZSBhbmQgc2ltcGxlLgorICovCitzdGF0aWMgaW50IGludmFsaWRhdGVfb25lX2NvbXBvbmVudChzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YywKKwkJCQkgICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmRpciwKKwkJCQkgICAgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbikKK3sKKwljb25zdCBjaGFyICpyZXN0ID0gc3RyY2hyKHBhdGgsICcvJyk7CisKKwlpZiAocmVzdCkgeworCQlpbnQgY29tcG9uZW50X2xlbiA9IHJlc3QgLSBwYXRoOworCQlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZCA9CisJCQlsb29rdXBfdW50cmFja2VkKHVjLCBkaXIsIHBhdGgsIGNvbXBvbmVudF9sZW4pOworCQlpbnQgcmV0ID0KKwkJCWludmFsaWRhdGVfb25lX2NvbXBvbmVudCh1YywgZCwgcmVzdCArIDEsCisJCQkJCQkgbGVuIC0gKGNvbXBvbmVudF9sZW4gKyAxKSk7CisJCWlmIChyZXQpCisJCQlpbnZhbGlkYXRlX29uZV9kaXJlY3RvcnkodWMsIGRpcik7CisJCXJldHVybiByZXQ7CisJfQorCisJaW52YWxpZGF0ZV9vbmVfZGlyZWN0b3J5KHVjLCBkaXIpOworCXJldHVybiB1Yy0+ZGlyX2ZsYWdzICYgRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVM7Cit9CisKK3ZvaWQgdW50cmFja2VkX2NhY2hlX2ludmFsaWRhdGVfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBzYWZlX3BhdGgpCit7CisJaWYgKCFpc3RhdGUtPnVudHJhY2tlZCB8fCAhaXN0YXRlLT51bnRyYWNrZWQtPnJvb3QpCisJCXJldHVybjsKKwlpZiAoIXNhZmVfcGF0aCAmJiAhdmVyaWZ5X3BhdGgocGF0aCwgMCkpCisJCXJldHVybjsKKwlpbnZhbGlkYXRlX29uZV9jb21wb25lbnQoaXN0YXRlLT51bnRyYWNrZWQsIGlzdGF0ZS0+dW50cmFja2VkLT5yb290LAorCQkJCSBwYXRoLCBzdHJsZW4ocGF0aCkpOworfQorCit2b2lkIHVudHJhY2tlZF9jYWNoZV9yZW1vdmVfZnJvbV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwl1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZSwgcGF0aCwgMSk7Cit9CisKK3ZvaWQgdW50cmFja2VkX2NhY2hlX2FkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJdW50cmFja2VkX2NhY2hlX2ludmFsaWRhdGVfcGF0aChpc3RhdGUsIHBhdGgsIDEpOworfQorCitzdGF0aWMgdm9pZCBjb25uZWN0X3d0X2dpdGRpcl9pbl9uZXN0ZWQoY29uc3QgY2hhciAqc3ViX3dvcmt0cmVlLAorCQkJCQljb25zdCBjaGFyICpzdWJfZ2l0ZGlyKQoreworCWludCBpOworCXN0cnVjdCByZXBvc2l0b3J5IHN1YnJlcG87CisJc3RydWN0IHN0cmJ1ZiBzdWJfd3QgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHN1Yl9nZCA9IFNUUkJVRl9JTklUOworCisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCisJLyogSWYgdGhlIHN1Ym1vZHVsZSBoYXMgbm8gd29ya2luZyB0cmVlLCB3ZSBjYW4gaWdub3JlIGl0LiAqLworCWlmIChyZXBvX2luaXQoJnN1YnJlcG8sIHN1Yl9naXRkaXIsIHN1Yl93b3JrdHJlZSkpCisJCXJldHVybjsKKworCWlmIChyZXBvX3JlYWRfaW5kZXgoJnN1YnJlcG8pIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCBpbiByZXBvICVzIiksIHN1YnJlcG8uZ2l0ZGlyKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdWJyZXBvLmluZGV4LT5jYWNoZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBzdWJyZXBvLmluZGV4LT5jYWNoZVtpXTsKKworCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCXdoaWxlIChpICsgMSA8IHN1YnJlcG8uaW5kZXgtPmNhY2hlX25yICYmCisJCSAgICAgICAhc3RyY21wKGNlLT5uYW1lLCBzdWJyZXBvLmluZGV4LT5jYWNoZVtpICsgMV0tPm5hbWUpKQorCQkJLyoKKwkJCSAqIFNraXAgZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gZGlmZmVyZW50IHN0YWdlcworCQkJICogdG8gbWFrZSBzdXJlIGFuIGVudHJ5IGlzIHJldHVybmVkIG9ubHkgb25jZS4KKwkJCSAqLworCQkJaSsrOworCisJCXN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgoJnN1YnJlcG8sICZudWxsX29pZCwgY2UtPm5hbWUpOworCQlpZiAoIXN1YiB8fCAhaXNfc3VibW9kdWxlX2FjdGl2ZSgmc3VicmVwbywgY2UtPm5hbWUpKQorCQkJLyogLmdpdG1vZHVsZXMgYnJva2VuIG9yIGluYWN0aXZlIHN1YiAqLworCQkJY29udGludWU7CisKKwkJc3RyYnVmX3Jlc2V0KCZzdWJfd3QpOworCQlzdHJidWZfcmVzZXQoJnN1Yl9nZCk7CisJCXN0cmJ1Zl9hZGRmKCZzdWJfd3QsICIlcy8lcyIsIHN1Yl93b3JrdHJlZSwgc3ViLT5wYXRoKTsKKwkJc3RyYnVmX2FkZGYoJnN1Yl9nZCwgIiVzL21vZHVsZXMvJXMiLCBzdWJfZ2l0ZGlyLCBzdWItPm5hbWUpOworCisJCWNvbm5lY3Rfd29ya190cmVlX2FuZF9naXRfZGlyKHN1Yl93dC5idWYsIHN1Yl9nZC5idWYsIDEpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc3ViX3d0KTsKKwlzdHJidWZfcmVsZWFzZSgmc3ViX2dkKTsKKwlyZXBvX2NsZWFyKCZzdWJyZXBvKTsKK30KKwordm9pZCBjb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2Rpcihjb25zdCBjaGFyICp3b3JrX3RyZWVfLAorCQkJCSAgIGNvbnN0IGNoYXIgKmdpdF9kaXJfLAorCQkJCSAgIGludCByZWN1cnNlX2ludG9fbmVzdGVkKQoreworCXN0cnVjdCBzdHJidWYgZ2l0ZmlsZV9zYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgY2ZnX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiByZWxfcGF0aCA9IFNUUkJVRl9JTklUOworCWNoYXIgKmdpdF9kaXIsICp3b3JrX3RyZWU7CisKKwkvKiBQcmVwYXJlIC5naXQgZmlsZSAqLworCXN0cmJ1Zl9hZGRmKCZnaXRmaWxlX3NiLCAiJXMvLmdpdCIsIHdvcmtfdHJlZV8pOworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGdpdGZpbGVfc2IuYnVmKSkKKwkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIiksIGdpdGZpbGVfc2IuYnVmKTsKKworCS8qIFByZXBhcmUgY29uZmlnIGZpbGUgKi8KKwlzdHJidWZfYWRkZigmY2ZnX3NiLCAiJXMvY29uZmlnIiwgZ2l0X2Rpcl8pOworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGNmZ19zYi5idWYpKQorCQlkaWUoXygiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiKSwgY2ZnX3NiLmJ1Zik7CisKKwlnaXRfZGlyID0gcmVhbF9wYXRoZHVwKGdpdF9kaXJfLCAxKTsKKwl3b3JrX3RyZWUgPSByZWFsX3BhdGhkdXAod29ya190cmVlXywgMSk7CisKKwkvKiBXcml0ZSAuZ2l0IGZpbGUgKi8KKwl3cml0ZV9maWxlKGdpdGZpbGVfc2IuYnVmLCAiZ2l0ZGlyOiAlcyIsCisJCSAgIHJlbGF0aXZlX3BhdGgoZ2l0X2Rpciwgd29ya190cmVlLCAmcmVsX3BhdGgpKTsKKwkvKiBVcGRhdGUgY29yZS53b3JrdHJlZSBzZXR0aW5nICovCisJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShjZmdfc2IuYnVmLCAiY29yZS53b3JrdHJlZSIsCisJCQkgICAgICAgcmVsYXRpdmVfcGF0aCh3b3JrX3RyZWUsIGdpdF9kaXIsICZyZWxfcGF0aCkpOworCisJc3RyYnVmX3JlbGVhc2UoJmdpdGZpbGVfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZjZmdfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWxfcGF0aCk7CisKKwlpZiAocmVjdXJzZV9pbnRvX25lc3RlZCkKKwkJY29ubmVjdF93dF9naXRkaXJfaW5fbmVzdGVkKHdvcmtfdHJlZSwgZ2l0X2Rpcik7CisKKwlmcmVlKHdvcmtfdHJlZSk7CisJZnJlZShnaXRfZGlyKTsKK30KKworLyoKKyAqIE1pZ3JhdGUgdGhlIGdpdCBkaXJlY3Rvcnkgb2YgdGhlIGdpdmVuIHBhdGggZnJvbSBvbGRfZ2l0X2RpciB0byBuZXdfZ2l0X2Rpci4KKyAqLwordm9pZCByZWxvY2F0ZV9naXRkaXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqb2xkX2dpdF9kaXIsIGNvbnN0IGNoYXIgKm5ld19naXRfZGlyKQoreworCWlmIChyZW5hbWUob2xkX2dpdF9kaXIsIG5ld19naXRfZGlyKSA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIiksCisJCQlvbGRfZ2l0X2RpciwgbmV3X2dpdF9kaXIpOworCisJY29ubmVjdF93b3JrX3RyZWVfYW5kX2dpdF9kaXIocGF0aCwgbmV3X2dpdF9kaXIsIDApOworfQpkaWZmIC0tZ2l0IGEvZGlyLmggYi9kaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODU1YzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlyLmgKQEAgLTAsMCArMSw1NDMgQEAKKyNpZm5kZWYgRElSX0gKKyNkZWZpbmUgRElSX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisvKioKKyAqIFRoZSBkaXJlY3RvcnkgbGlzdGluZyBBUEkgaXMgdXNlZCB0byBlbnVtZXJhdGUgcGF0aHMgaW4gdGhlIHdvcmsgdHJlZSwKKyAqIG9wdGlvbmFsbHkgdGFraW5nIGAuZ2l0L2luZm8vZXhjbHVkZWAgYW5kIGAuZ2l0aWdub3JlYCBmaWxlcyBwZXIgZGlyZWN0b3J5CisgKiBpbnRvIGFjY291bnQuCisgKi8KKworLyoqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogTm90ZTogVGhlIGluZGV4IG1heSBiZSBjaGVja2VkIGZvciAuZ2l0aWdub3JlIGZpbGVzIHRoYXQgYXJlCisgKiBDRV9TS0lQX1dPUktUUkVFIG1hcmtlZC4gSWYgeW91IHdhbnQgdG8gZXhjbHVkZSBmaWxlcywgbWFrZSBzdXJlIHlvdSBoYXZlCisgKiBsb2FkZWQgdGhlIGluZGV4IGZpcnN0LgorICoKKyAqIC0gUHJlcGFyZSBgc3RydWN0IGRpcl9zdHJ1Y3QgZGlyYCBhbmQgY2xlYXIgaXQgd2l0aCBgbWVtc2V0KCZkaXIsIDAsCisgKiBzaXplb2YoZGlyKSlgLgorICoKKyAqIC0gVG8gYWRkIHNpbmdsZSBleGNsdWRlIHBhdHRlcm4sIGNhbGwgYGFkZF9wYXR0ZXJuX2xpc3QoKWAgYW5kIHRoZW4KKyAqICAgYGFkZF9wYXR0ZXJuKClgLgorICoKKyAqIC0gVG8gYWRkIHBhdHRlcm5zIGZyb20gYSBmaWxlIChlLmcuIGAuZ2l0L2luZm8vZXhjbHVkZWApLCBjYWxsCisgKiAgIGBhZGRfcGF0dGVybnNfZnJvbV9maWxlKClgICwgYW5kL29yIHNldCBgZGlyLmV4Y2x1ZGVfcGVyX2RpcmAuICBBCisgKiAgIHNob3J0LWhhbmQgZnVuY3Rpb24gYHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKClgIGNhbiBiZSB1c2VkIHRvIHNldAorICogICB1cCB0aGUgc3RhbmRhcmQgc2V0IG9mIGV4Y2x1ZGUgc2V0dGluZ3MuCisgKgorICogLSBTZXQgb3B0aW9ucyBkZXNjcmliZWQgaW4gdGhlIERhdGEgU3RydWN0dXJlIHNlY3Rpb24gYWJvdmUuCisgKgorICogLSBDYWxsIGByZWFkX2RpcmVjdG9yeSgpYC4KKyAqCisgKiAtIFVzZSBgZGlyLmVudHJpZXNbXWAuCisgKgorICogLSBDYWxsIGBjbGVhcl9kaXJlY3RvcnkoKWAgd2hlbiBub25lIG9mIHRoZSBjb250YWluZWQgZWxlbWVudHMgYXJlIG5vIGxvbmdlciBpbiB1c2UuCisgKgorICovCisKK3N0cnVjdCBkaXJfZW50cnkgeworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCisjZGVmaW5lIFBBVFRFUk5fRkxBR19OT0RJUiAxCisjZGVmaW5lIFBBVFRFUk5fRkxBR19FTkRTV0lUSCA0CisjZGVmaW5lIFBBVFRFUk5fRkxBR19NVVNUQkVESVIgOAorI2RlZmluZSBQQVRURVJOX0ZMQUdfTkVHQVRJVkUgMTYKKworc3RydWN0IHBhdGhfcGF0dGVybiB7CisJLyoKKwkgKiBUaGlzIGFsbG93cyBjYWxsZXJzIG9mIGxhc3RfbWF0Y2hpbmdfcGF0dGVybigpIGV0Yy4KKwkgKiB0byBkZXRlcm1pbmUgdGhlIG9yaWdpbiBvZiB0aGUgbWF0Y2hpbmcgcGF0dGVybi4KKwkgKi8KKwlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbDsKKworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJaW50IHBhdHRlcm5sZW47CisJaW50IG5vd2lsZGNhcmRsZW47CisJY29uc3QgY2hhciAqYmFzZTsKKwlpbnQgYmFzZWxlbjsKKwl1bnNpZ25lZCBmbGFnczsJCS8qIFBBVFRFUk5fRkxBR18qICovCisKKwkvKgorCSAqIENvdW50aW5nIHN0YXJ0cyBmcm9tIDEgZm9yIGxpbmUgbnVtYmVycyBpbiBpZ25vcmUgZmlsZXMsCisJICogYW5kIGZyb20gLTEgZGVjcmVtZW50aW5nIGZvciBwYXR0ZXJucyBmcm9tIENMSSBhcmdzLgorCSAqLworCWludCBzcmNwb3M7Cit9OworCisvKiB1c2VkIGZvciBoYXNobWFwcyBmb3IgY29uZSBwYXR0ZXJucyAqLworc3RydWN0IHBhdHRlcm5fZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwljaGFyICpwYXR0ZXJuOworCXNpemVfdCBwYXR0ZXJubGVuOworfTsKKworLyoKKyAqIEVhY2ggZXhjbHVkZXMgZmlsZSB3aWxsIGJlIHBhcnNlZCBpbnRvIGEgZnJlc2ggZXhjbHVkZV9saXN0IHdoaWNoCisgKiBpcyBhcHBlbmRlZCB0byB0aGUgcmVsZXZhbnQgZXhjbHVkZV9saXN0X2dyb3VwIChlaXRoZXIgRVhDX0RJUlMgb3IKKyAqIEVYQ19GSUxFKS4gIEFuIGV4Y2x1ZGVfbGlzdCB3aXRoaW4gdGhlIEVYQ19DTURMIGV4Y2x1ZGVfbGlzdF9ncm91cAorICogY2FuIGFsc28gYmUgdXNlZCB0byByZXByZXNlbnQgdGhlIGxpc3Qgb2YgLS1leGNsdWRlIHZhbHVlcyBwYXNzZWQKKyAqIHZpYSBDTEkgYXJncy4KKyAqLworc3RydWN0IHBhdHRlcm5fbGlzdCB7CisJaW50IG5yOworCWludCBhbGxvYzsKKworCS8qIHJlbWVtYmVyIHBvaW50ZXIgdG8gZXhjbHVkZSBmaWxlIGNvbnRlbnRzIHNvIHdlIGNhbiBmcmVlKCkgKi8KKwljaGFyICpmaWxlYnVmOworCisJLyogb3JpZ2luIG9mIGxpc3QsIGUuZy4gcGF0aCB0byBmaWxlbmFtZSwgb3IgZGVzY3JpcHRpdmUgc3RyaW5nICovCisJY29uc3QgY2hhciAqc3JjOworCisJc3RydWN0IHBhdGhfcGF0dGVybiAqKnBhdHRlcm5zOworCisJLyoKKwkgKiBXaGlsZSBzY2FubmluZyB0aGUgZXhjbHVkZXMsIHdlIGF0dGVtcHQgdG8gbWF0Y2ggdGhlIHBhdHRlcm5zCisJICogd2l0aCBhIG1vcmUgcmVzdHJpY3RlZCBzZXQgdGhhdCBhbGxvd3MgdXMgdG8gdXNlIGhhc2hzZXRzIGZvcgorCSAqIG1hdGNoaW5nIGxvZ2ljLCB3aGljaCBpcyBmYXN0ZXIgdGhhbiB0aGUgbGluZWFyIGxvb2t1cCBpbiB0aGUKKwkgKiBleGNsdWRlcyBhcnJheSBhYm92ZS4gSWYgbm9uLXplcm8sIHRoYXQgY2hlY2sgc3VjY2VlZGVkLgorCSAqLworCXVuc2lnbmVkIHVzZV9jb25lX3BhdHRlcm5zOworCXVuc2lnbmVkIGZ1bGxfY29uZTsKKworCS8qCisJICogU3RvcmVzIHBhdGhzIHdoZXJlIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCB0aG9zZSBwYXRocworCSAqIGlzIGluY2x1ZGVkLgorCSAqLworCXN0cnVjdCBoYXNobWFwIHJlY3Vyc2l2ZV9oYXNobWFwOworCisJLyoKKwkgKiBVc2VkIHRvIGNoZWNrIHNpbmdsZS1sZXZlbCBwYXJlbnRzIG9mIGJsb2JzLgorCSAqLworCXN0cnVjdCBoYXNobWFwIHBhcmVudF9oYXNobWFwOworfTsKKworLyoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGUgcGVyLWRpcmVjdG9yeSBleGNsdWRlIGZpbGVzIGFyZSBsYXppbHkgcmVhZCBvbgorICogZGVtYW5kIGFuZCB0aGVuIGNhY2hlZCBpbiBtZW1vcnksIG9uZSBwZXIgZXhjbHVkZV9zdGFjayBzdHJ1Y3QsIGluCisgKiBvcmRlciB0byBhdm9pZCBvcGVuaW5nIGFuZCBwYXJzaW5nIGVhY2ggb25lIGV2ZXJ5IHRpbWUgdGhhdAorICogZGlyZWN0b3J5IGlzIHRyYXZlcnNlZC4KKyAqLworc3RydWN0IGV4Y2x1ZGVfc3RhY2sgeworCXN0cnVjdCBleGNsdWRlX3N0YWNrICpwcmV2OyAvKiB0aGUgc3RydWN0IGV4Y2x1ZGVfc3RhY2sgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5ICovCisJaW50IGJhc2VsZW47CisJaW50IGV4Y2x1ZGVfaXg7IC8qIGluZGV4IG9mIGV4Y2x1ZGVfbGlzdCB3aXRoaW4gRVhDX0RJUlMgZXhjbHVkZV9saXN0X2dyb3VwICovCisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVjZDsKK307CisKK3N0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgeworCWludCBuciwgYWxsb2M7CisJc3RydWN0IHBhdHRlcm5fbGlzdCAqcGw7Cit9OworCitzdHJ1Y3Qgb2lkX3N0YXQgeworCXN0cnVjdCBzdGF0X2RhdGEgc3RhdDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgdmFsaWQ7Cit9OworCisvKgorICogIFVudHJhY2tlZCBjYWNoZQorICoKKyAqICBUaGUgZm9sbG93aW5nIGlucHV0cyBhcmUgc3VmZmljaWVudCB0byBkZXRlcm1pbmUgd2hhdCBmaWxlcyBpbiBhCisgKiAgZGlyZWN0b3J5IGFyZSBleGNsdWRlZDoKKyAqCisgKiAgIC0gVGhlIGxpc3Qgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgaW4gcXVlc3Rpb24KKyAqICAgLSBUaGUgJEdJVF9ESVIvaW5kZXgKKyAqICAgLSBkaXJfc3RydWN0IGZsYWdzCisgKiAgIC0gVGhlIGNvbnRlbnQgb2YgJEdJVF9ESVIvaW5mby9leGNsdWRlCisgKiAgIC0gVGhlIGNvbnRlbnQgb2YgY29yZS5leGNsdWRlc2ZpbGUKKyAqICAgLSBUaGUgY29udGVudCAob3IgdGhlIGxhY2spIG9mIC5naXRpZ25vcmUgb2YgYWxsIHBhcmVudCBkaXJlY3RvcmllcworICogICAgIGZyb20gJEdJVF9XT1JLX1RSRUUKKyAqICAgLSBUaGUgY2hlY2tfb25seSBmbGFnIGluIHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZSAoZm9yCisgKiAgICAgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMpCisgKgorICogIFRoZSBmaXJzdCBpbnB1dCBjYW4gYmUgY2hlY2tlZCB1c2luZyBkaXJlY3RvcnkgbXRpbWUuIEluIG1hbnkKKyAqICBmaWxlc3lzdGVtcywgZGlyZWN0b3J5IG10aW1lIChzdGF0X2RhdGEgZmllbGQpIGlzIHVwZGF0ZWQgd2hlbiBpdHMKKyAqICBmaWxlcyBvciBkaXJlY3Qgc3ViZGlycyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC4KKyAqCisgKiAgVGhlIHNlY29uZCBvbmUgY2FuIGJlIGhvb2tlZCBmcm9tIGNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKCkuCisgKiAgV2hlbmV2ZXIgYSBmaWxlIChvciBhIHN1Ym1vZHVsZSkgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGEKKyAqICBkaXJlY3RvcnksIHdlIGludmFsaWRhdGUgdGhhdCBkaXJlY3RvcnkuCisgKgorICogIFRoZSByZW1haW5pbmcgaW5wdXRzIGFyZSBlYXN5LCB0aGVpciBTSEEtMSBjb3VsZCBiZSB1c2VkIHRvIHZlcmlmeQorICogIHRoZWlyIGNvbnRlbnRzIChleGNsdWRlX3NoYTFbXSwgaW5mb19leGNsdWRlX3NoYTFbXSBhbmQKKyAqICBleGNsdWRlc19maWxlX3NoYTFbXSkKKyAqLworc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgeworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICoqZGlyczsKKwljaGFyICoqdW50cmFja2VkOworCXN0cnVjdCBzdGF0X2RhdGEgc3RhdF9kYXRhOworCXVuc2lnbmVkIGludCB1bnRyYWNrZWRfYWxsb2MsIGRpcnNfbnIsIGRpcnNfYWxsb2M7CisJdW5zaWduZWQgaW50IHVudHJhY2tlZF9ucjsKKwl1bnNpZ25lZCBpbnQgY2hlY2tfb25seSA6IDE7CisJLyogYWxsIGRhdGEgZXhjZXB0ICdkaXJzJyBpbiB0aGlzIHN0cnVjdCBhcmUgZ29vZCAqLworCXVuc2lnbmVkIGludCB2YWxpZCA6IDE7CisJdW5zaWduZWQgaW50IHJlY3Vyc2UgOiAxOworCS8qIG51bGwgb2JqZWN0IElEIG1lYW5zIHRoaXMgZGlyZWN0b3J5IGRvZXMgbm90IGhhdmUgLmdpdGlnbm9yZSAqLworCXN0cnVjdCBvYmplY3RfaWQgZXhjbHVkZV9vaWQ7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IHVudHJhY2tlZF9jYWNoZSB7CisJc3RydWN0IG9pZF9zdGF0IHNzX2luZm9fZXhjbHVkZTsKKwlzdHJ1Y3Qgb2lkX3N0YXQgc3NfZXhjbHVkZXNfZmlsZTsKKwljb25zdCBjaGFyICpleGNsdWRlX3Blcl9kaXI7CisJc3RydWN0IHN0cmJ1ZiBpZGVudDsKKwkvKgorCSAqIGRpcl9zdHJ1Y3QjZmxhZ3MgbXVzdCBtYXRjaCBkaXJfZmxhZ3Mgb3IgdGhlIHVudHJhY2tlZAorCSAqIGNhY2hlIGlzIGlnbm9yZWQuCisJICovCisJdW5zaWduZWQgZGlyX2ZsYWdzOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpyb290OworCS8qIFN0YXRpc3RpY3MgKi8KKwlpbnQgZGlyX2NyZWF0ZWQ7CisJaW50IGdpdGlnbm9yZV9pbnZhbGlkYXRlZDsKKwlpbnQgZGlyX2ludmFsaWRhdGVkOworCWludCBkaXJfb3BlbmVkOworCS8qIGZzbW9uaXRvciBpbnZhbGlkYXRpb24gZGF0YSAqLworCXVuc2lnbmVkIGludCB1c2VfZnNtb25pdG9yIDogMTsKK307CisKKy8qKgorICogc3RydWN0dXJlIGlzIHVzZWQgdG8gcGFzcyBkaXJlY3RvcnkgdHJhdmVyc2FsIG9wdGlvbnMgdG8gdGhlIGxpYnJhcnkgYW5kIHRvCisgKiByZWNvcmQgdGhlIHBhdGhzIGRpc2NvdmVyZWQuIEEgc2luZ2xlIGBzdHJ1Y3QgZGlyX3N0cnVjdGAgaXMgdXNlZCByZWdhcmRsZXNzCisgKiBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgdHJhdmVyc2FsIHJlY3Vyc2l2ZWx5IGRlc2NlbmRzIGludG8gc3ViZGlyZWN0b3JpZXMuCisgKi8KK3N0cnVjdCBkaXJfc3RydWN0IHsKKworCS8qIFRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiBgZW50cmllc1tdYCBhcnJheS4gKi8KKwlpbnQgbnI7CisKKwkvKiBJbnRlcm5hbCB1c2U7IGtlZXBzIHRyYWNrIG9mIGFsbG9jYXRpb24gb2YgYGVudHJpZXNbXWAgYXJyYXkuKi8KKwlpbnQgYWxsb2M7CisKKwkvKiBUaGUgbnVtYmVyIG9mIG1lbWJlcnMgaW4gYGlnbm9yZWRbXWAgYXJyYXkuICovCisJaW50IGlnbm9yZWRfbnI7CisKKwlpbnQgaWdub3JlZF9hbGxvYzsKKworCS8qIGJpdC1maWVsZCBvZiBvcHRpb25zICovCisJZW51bSB7CisKKwkJLyoqCisJCSAqIFJldHVybiBqdXN0IGlnbm9yZWQgZmlsZXMgaW4gYGVudHJpZXNbXWAsIG5vdCB1bnRyYWNrZWQgZmlsZXMuCisJCSAqIFRoaXMgZmxhZyBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgRElSX1NIT1dfSUdOT1JFRF9UT09gLgorCQkgKi8KKwkJRElSX1NIT1dfSUdOT1JFRCA9IDE8PDAsCisKKwkJLyogSW5jbHVkZSBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCB0cmFja2VkLiAqLworCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyA9IDE8PDEsCisKKwkJLyogRG8gbm90IGluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZCBhbmQgaXMgZW1wdHkuICovCisJCURJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTID0gMTw8MiwKKworCQkvKioKKwkJICogSWYgc2V0LCByZWN1cnNlIGludG8gYSBkaXJlY3RvcnkgdGhhdCBsb29rcyBsaWtlIGEgR2l0IGRpcmVjdG9yeS4KKwkJICogT3RoZXJ3aXNlIGl0IGlzIHNob3duIGFzIGEgZGlyZWN0b3J5LgorCQkgKi8KKwkJRElSX05PX0dJVExJTktTID0gMTw8MywKKworCQkvKioKKwkJICogU3BlY2lhbCBtb2RlIGZvciBnaXQtYWRkLiBSZXR1cm4gaWdub3JlZCBmaWxlcyBpbiBgaWdub3JlZFtdYCBhbmQKKwkJICogdW50cmFja2VkIGZpbGVzIGluIGBlbnRyaWVzW11gLiBPbmx5IHJldHVybnMgaWdub3JlZCBmaWxlcyB0aGF0IG1hdGNoCisJCSAqIHBhdGhzcGVjIGV4YWN0bHkgKG5vIHdpbGRjYXJkcykuIERvZXMgbm90IHJlY3Vyc2UgaW50byBpZ25vcmVkCisJCSAqIGRpcmVjdG9yaWVzLgorCQkgKi8KKwkJRElSX0NPTExFQ1RfSUdOT1JFRCA9IDE8PDQsCisKKwkJLyoqCisJCSAqIFNpbWlsYXIgdG8gYERJUl9TSE9XX0lHTk9SRURgLCBidXQgcmV0dXJuIGlnbm9yZWQgZmlsZXMgaW4KKwkJICogYGlnbm9yZWRbXWAgaW4gYWRkaXRpb24gdG8gdW50cmFja2VkIGZpbGVzIGluIGBlbnRyaWVzW11gLgorCQkgKiBUaGlzIGZsYWcgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYERJUl9TSE9XX0lHTk9SRURgLgorCQkgKi8KKwkJRElSX1NIT1dfSUdOT1JFRF9UT08gPSAxPDw1LAorCisJCURJUl9DT0xMRUNUX0tJTExFRF9PTkxZID0gMTw8NiwKKworCQkvKioKKwkJICogT25seSBoYXMgbWVhbmluZyBpZiBgRElSX1NIT1dfSUdOT1JFRF9UT09gIGlzIGFsc28gc2V0OyBpZiB0aGlzIGlzCisJCSAqIHNldCwgdGhlIHVudHJhY2tlZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMgYXJlIGFsc28KKwkJICogcmV0dXJuZWQgaW4gYGVudHJpZXNbXWAuCisJCSAqLworCQlESVJfS0VFUF9VTlRSQUNLRURfQ09OVEVOVFMgPSAxPDw3LAorCisJCS8qKgorCQkgKiBPbmx5IGhhcyBtZWFuaW5nIGlmIGBESVJfU0hPV19JR05PUkVEX1RPT2AgaXMgYWxzbyBzZXQ7IGlmIHRoaXMgaXMKKwkJICogc2V0LCByZXR1cm5zIGlnbm9yZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2ggYW4gZXhjbHVkZQorCQkgKiBwYXR0ZXJuLiBJZiBhIGRpcmVjdG9yeSBtYXRjaGVzIGFuIGV4Y2x1ZGUgcGF0dGVybiwgdGhlbiB0aGUKKwkJICogZGlyZWN0b3J5IGlzIHJldHVybmVkIGFuZCB0aGUgY29udGFpbmVkIHBhdGhzIGFyZSBub3QuIEEgZGlyZWN0b3J5CisJCSAqIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW4gZXhjbHVkZSBwYXR0ZXJuIHdpbGwgbm90IGJlIHJldHVybmVkIGV2ZW4gaWYKKwkJICogYWxsIG9mIGl0cyBjb250ZW50cyBhcmUgaWdub3JlZC4gSW4gdGhpcyBjYXNlLCB0aGUgY29udGVudHMgYXJlCisJCSAqIHJldHVybmVkIGFzIGluZGl2aWR1YWwgZW50cmllcy4KKwkJICoKKwkJICogSWYgdGhpcyBpcyBzZXQsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGV4cGxpY2l0bHkgbWF0Y2ggYW4gaWdub3JlCisJCSAqIHBhdHRlcm4gYXJlIHJlcG9ydGVkLiBJbXBsaWNpdGx5IGlnbm9yZWQgZGlyZWN0b3JpZXMgKGRpcmVjdG9yaWVzIHRoYXQKKwkJICogZG8gbm90IG1hdGNoIGFuIGlnbm9yZSBwYXR0ZXJuLCBidXQgd2hvc2UgY29udGVudHMgYXJlIGFsbCBpZ25vcmVkKQorCQkgKiBhcmUgbm90IHJlcG9ydGVkLCBpbnN0ZWFkIGFsbCBvZiB0aGUgY29udGVudHMgYXJlIHJlcG9ydGVkLgorCQkgKi8KKwkJRElSX1NIT1dfSUdOT1JFRF9UT09fTU9ERV9NQVRDSElORyA9IDE8PDgsCisKKwkJRElSX1NLSVBfTkVTVEVEX0dJVCA9IDE8PDkKKwl9IGZsYWdzOworCisJLyogQW4gYXJyYXkgb2YgYHN0cnVjdCBkaXJfZW50cnlgLCBlYWNoIGVsZW1lbnQgb2Ygd2hpY2ggZGVzY3JpYmVzIGEgcGF0aC4gKi8KKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqZW50cmllczsKKworCS8qKgorCSAqIHVzZWQgZm9yIGlnbm9yZWQgcGF0aHMgd2l0aCB0aGUgYERJUl9TSE9XX0lHTk9SRURfVE9PYCBhbmQKKwkgKiBgRElSX0NPTExFQ1RfSUdOT1JFRGAgZmxhZ3MuCisJICovCisJc3RydWN0IGRpcl9lbnRyeSAqKmlnbm9yZWQ7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSByZWFkIGluIGVhY2ggZGlyZWN0b3J5IGZvciBleGNsdWRlZCBmaWxlcworCSAqICh0eXBpY2FsbHkgYC5naXRpZ25vcmVgKS4KKwkgKi8KKwljb25zdCBjaGFyICpleGNsdWRlX3Blcl9kaXI7CisKKwkvKgorCSAqIFdlIG1haW50YWluIHRocmVlIGdyb3VwcyBvZiBleGNsdWRlIHBhdHRlcm4gbGlzdHM6CisJICoKKwkgKiBFWENfQ01ETCBsaXN0cyBwYXR0ZXJucyBleHBsaWNpdGx5IGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisJICogRVhDX0RJUlMgbGlzdHMgcGF0dGVybnMgb2J0YWluZWQgZnJvbSBwZXItZGlyZWN0b3J5IGlnbm9yZSBmaWxlcy4KKwkgKiBFWENfRklMRSBsaXN0cyBwYXR0ZXJucyBmcm9tIGZhbGxiYWNrIGlnbm9yZSBmaWxlcywgZS5nLgorCSAqICAgLSAuZ2l0L2luZm8vZXhjbHVkZQorCSAqICAgLSBjb3JlLmV4Y2x1ZGVzZmlsZQorCSAqCisJICogRWFjaCBncm91cCBjb250YWlucyBtdWx0aXBsZSBleGNsdWRlIGxpc3RzLCBhIHNpbmdsZSBsaXN0CisJICogcGVyIHNvdXJjZS4KKwkgKi8KKyNkZWZpbmUgRVhDX0NNREwgMAorI2RlZmluZSBFWENfRElSUyAxCisjZGVmaW5lIEVYQ19GSUxFIDIKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0X2dyb3VwIGV4Y2x1ZGVfbGlzdF9ncm91cFszXTsKKworCS8qCisJICogVGVtcG9yYXJ5IHZhcmlhYmxlcyB3aGljaCBhcmUgdXNlZCBkdXJpbmcgbG9hZGluZyBvZiB0aGUKKwkgKiBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgbGlzdHMuCisJICoKKwkgKiBleGNsdWRlX3N0YWNrIHBvaW50cyB0byB0aGUgdG9wIG9mIHRoZSBleGNsdWRlX3N0YWNrLCBhbmQKKwkgKiBiYXNlYnVmIGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGN1cnJlbnQKKwkgKiAoc3ViKWRpcmVjdG9yeSBpbiB0aGUgdHJhdmVyc2FsLiBFeGNsdWRlIHBvaW50cyB0byB0aGUKKwkgKiBtYXRjaGluZyBleGNsdWRlIHN0cnVjdCBpZiB0aGUgZGlyZWN0b3J5IGlzIGV4Y2x1ZGVkLgorCSAqLworCXN0cnVjdCBleGNsdWRlX3N0YWNrICpleGNsdWRlX3N0YWNrOworCXN0cnVjdCBwYXRoX3BhdHRlcm4gKnBhdHRlcm47CisJc3RydWN0IHN0cmJ1ZiBiYXNlYnVmOworCisJLyogRW5hYmxlIHVudHJhY2tlZCBmaWxlIGNhY2hlIGlmIHNldCAqLworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVudHJhY2tlZDsKKwlzdHJ1Y3Qgb2lkX3N0YXQgc3NfaW5mb19leGNsdWRlOworCXN0cnVjdCBvaWRfc3RhdCBzc19leGNsdWRlc19maWxlOworCXVuc2lnbmVkIHVubWFuYWdlZF9leGNsdWRlX2ZpbGVzOworfTsKKworLypDb3VudCB0aGUgbnVtYmVyIG9mIHNsYXNoZXMgZm9yIHN0cmluZyBzKi8KK2ludCBjb3VudF9zbGFzaGVzKGNvbnN0IGNoYXIgKnMpOworCisvKgorICogVGhlIG9yZGVyaW5nIG9mIHRoZXNlIGNvbnN0YW50cyBpcyBzaWduaWZpY2FudCwgd2l0aAorICogaGlnaGVyLW51bWJlcmVkIG1hdGNoIHR5cGVzIHNpZ25pZnlpbmcgImNsb3NlciIgKGkuZS4gbW9yZQorICogc3BlY2lmaWMpIG1hdGNoZXMgd2hpY2ggd2lsbCBvdmVycmlkZSBsb3dlci1udW1iZXJlZCBtYXRjaCB0eXBlcworICogd2hlbiBwb3B1bGF0aW5nIHRoZSBzZWVuW10gYXJyYXkuCisgKi8KKyNkZWZpbmUgTUFUQ0hFRF9SRUNVUlNJVkVMWSAxCisjZGVmaW5lIE1BVENIRURfUkVDVVJTSVZFTFlfTEVBRElOR19QQVRIU1BFQyAyCisjZGVmaW5lIE1BVENIRURfRk5NQVRDSCAzCisjZGVmaW5lIE1BVENIRURfRVhBQ1RMWSA0CitpbnQgc2ltcGxlX2xlbmd0aChjb25zdCBjaGFyICptYXRjaCk7CitpbnQgbm9fd2lsZGNhcmQoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NoYXIgKmNvbW1vbl9wcmVmaXgoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYyk7CitpbnQgbWF0Y2hfcGF0aHNwZWMoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkgICBpbnQgcHJlZml4LCBjaGFyICpzZWVuLCBpbnQgaXNfZGlyKTsKK2ludCByZXBvcnRfcGF0aF9lcnJvcihjb25zdCBjaGFyICpwc19tYXRjaGVkLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKTsKK2ludCB3aXRoaW5fZGVwdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBkZXB0aCwgaW50IG1heF9kZXB0aCk7CisKK2ludCBmaWxsX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYyk7CitpbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKiwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sCisJCSAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpOworCitlbnVtIHBhdHRlcm5fbWF0Y2hfcmVzdWx0IHsKKwlVTkRFQ0lERUQgPSAtMSwKKwlOT1RfTUFUQ0hFRCA9IDAsCisJTUFUQ0hFRCA9IDEsCisJTUFUQ0hFRF9SRUNVUlNJVkUgPSAyLAorfTsKKworLyoKKyAqIFNjYW4gdGhlIGxpc3Qgb2YgcGF0dGVybnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvcmRlcmVkIGxpc3QKKyAqIG9mIHBhdHRlcm5zIG1hdGNoZXMgb24gJ3BhdGhuYW1lJy4KKyAqCisgKiBSZXR1cm4gMSBmb3IgYSBtYXRjaCwgMCBmb3Igbm90IG1hdGNoZWQgYW5kIC0xIGZvciB1bmRlY2lkZWQuCisgKi8KK2VudW0gcGF0dGVybl9tYXRjaF9yZXN1bHQgcGF0aF9tYXRjaGVzX3BhdHRlcm5fbGlzdChjb25zdCBjaGFyICpwYXRobmFtZSwKKwkJCQlpbnQgcGF0aGxlbiwKKwkJCQljb25zdCBjaGFyICpiYXNlbmFtZSwgaW50ICpkdHlwZSwKKwkJCQlzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCwKKwkJCQlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CitzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfYWRkX2lnbm9yZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBsZW4pOworCisvKgorICogdGhlc2UgaW1wbGVtZW50IHRoZSBtYXRjaGluZyBsb2dpYyBmb3IgZGlyLmM6ZXhjbHVkZWRfZnJvbV9saXN0IGFuZAorICogYXR0ci5jOnBhdGhfbWF0Y2hlcygpCisgKi8KK2ludCBtYXRjaF9iYXNlbmFtZShjb25zdCBjaGFyICosIGludCwKKwkJICAgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdW5zaWduZWQpOworaW50IG1hdGNoX3BhdGhuYW1lKGNvbnN0IGNoYXIgKiwgaW50LAorCQkgICBjb25zdCBjaGFyICosIGludCwKKwkJICAgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdW5zaWduZWQpOworCitzdHJ1Y3QgcGF0aF9wYXR0ZXJuICpsYXN0X21hdGNoaW5nX3BhdHRlcm4oc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkJICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZHR5cGUpOworCitpbnQgaXNfZXhjbHVkZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCWNvbnN0IGNoYXIgKm5hbWUsIGludCAqZHR5cGUpOworCitpbnQgcGxfaGFzaG1hcF9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqYSwKKwkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmIsCisJCSAgIGNvbnN0IHZvaWQgKmtleSk7CitpbnQgaGFzaG1hcF9jb250YWluc19wYXJlbnQoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCSAgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcik7CitzdHJ1Y3QgcGF0dGVybl9saXN0ICphZGRfcGF0dGVybl9saXN0KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgICAgaW50IGdyb3VwX3R5cGUsIGNvbnN0IGNoYXIgKnNyYyk7CitpbnQgYWRkX3BhdHRlcm5zX2Zyb21fZmlsZV90b19saXN0KGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCQkgICBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCwgc3RydWN0ICBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3ZvaWQgYWRkX3BhdHRlcm5zX2Zyb21fZmlsZShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICpmbmFtZSk7CitpbnQgYWRkX3BhdHRlcm5zX2Zyb21fYmxvYl90b19saXN0KHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCQkgICBzdHJ1Y3QgcGF0dGVybl9saXN0ICpwbCk7Cit2b2lkIHBhcnNlX3BhdGhfcGF0dGVybihjb25zdCBjaGFyICoqc3RyaW5nLCBpbnQgKnBhdHRlcm5sZW4sIHVuc2lnbmVkICpmbGFncywgaW50ICpub3dpbGRjYXJkbGVuKTsKK3ZvaWQgYWRkX3BhdHRlcm4oY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpiYXNlLAorCQkgaW50IGJhc2VsZW4sIHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsLCBpbnQgc3JjcG9zKTsKK3ZvaWQgY2xlYXJfcGF0dGVybl9saXN0KHN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsKTsKK3ZvaWQgY2xlYXJfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpOworCitpbnQgcmVwb19maWxlX2V4aXN0cyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCk7CitpbnQgZmlsZV9leGlzdHMoY29uc3QgY2hhciAqKTsKKworaW50IGlzX2luc2lkZV9kaXIoY29uc3QgY2hhciAqZGlyKTsKK2ludCBkaXJfaW5zaWRlX29mKGNvbnN0IGNoYXIgKnN1YmRpciwgY29uc3QgY2hhciAqZGlyKTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfZG90X29yX2RvdGRvdChjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAobmFtZVswXSA9PSAnLicgJiYKKwkJKG5hbWVbMV0gPT0gJ1wwJyB8fAorCQkgKG5hbWVbMV0gPT0gJy4nICYmIG5hbWVbMl0gPT0gJ1wwJykpKTsKK30KKworaW50IGlzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpkaXIpOworCit2b2lkIHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpOworCisKKy8qIENvbnN0YW50cyBmb3IgcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseTogKi8KKworLyoKKyAqIElmIGEgbm9uLWRpcmVjdG9yeSBpcyBmb3VuZCB3aXRoaW4gcGF0aCwgc3RvcCBhbmQgcmV0dXJuIGFuIGVycm9yLgorICogKEluIHRoaXMgY2FzZSBzb21lIGVtcHR5IGRpcmVjdG9yaWVzIG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVuCisgKiByZW1vdmVkLikKKyAqLworI2RlZmluZSBSRU1PVkVfRElSX0VNUFRZX09OTFkgMDEKKworLyoKKyAqIElmIGFueSBHaXQgd29yayB0cmVlcyBhcmUgZm91bmQgd2l0aGluIHBhdGgsIHNraXAgdGhlbSB3aXRob3V0CisgKiBjb25zaWRlcmluZyBpdCBhbiBlcnJvci4KKyAqLworI2RlZmluZSBSRU1PVkVfRElSX0tFRVBfTkVTVEVEX0dJVCAwMgorCisvKiBSZW1vdmUgdGhlIGNvbnRlbnRzIG9mIHBhdGgsIGJ1dCBsZWF2ZSBwYXRoIGl0c2VsZi4gKi8KKyNkZWZpbmUgUkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMIDA0CisKKy8qCisgKiBSZW1vdmUgcGF0aCBhbmQgaXRzIGNvbnRlbnRzLCByZWN1cnNpdmVseS4gZmxhZ3MgaXMgYSBjb21iaW5hdGlvbgorICogb2YgdGhlIGFib3ZlIFJFTU9WRV9ESVJfKiBjb25zdGFudHMuIFJldHVybiAwIG9uIHN1Y2Nlc3MuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIHBhdGggYXMgdGVtcG9yYXJ5IHNjcmF0Y2ggc3BhY2UsIGJ1dCByZXN0b3JlcyBpdAorICogYmVmb3JlIHJldHVybmluZy4KKyAqLworaW50IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50IGZsYWcpOworCisvKiB0cmllcyB0byByZW1vdmUgdGhlIHBhdGggd2l0aCBlbXB0eSBkaXJlY3RvcmllcyBhbG9uZyBpdCwgaWdub3JlcyBFTk9FTlQgKi8KK2ludCByZW1vdmVfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKKworaW50IGZzcGF0aGNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKK2ludCBmc3BhdGhuY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHNpemVfdCBjb3VudCk7CisKKy8qCisgKiBUaGUgcHJlZml4IHBhcnQgb2YgcGF0dGVybiBtdXN0IG5vdCBjb250YWlucyB3aWxkY2FyZHMuCisgKi8KK3N0cnVjdCBwYXRoc3BlY19pdGVtOworaW50IGdpdF9mbm1hdGNoKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQljb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsCisJCWludCBwcmVmaXgpOworCitpbnQgc3VibW9kdWxlX3BhdGhfbWF0Y2goY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCSBjb25zdCBjaGFyICpzdWJtb2R1bGVfbmFtZSwKKwkJCSBjaGFyICpzZWVuKTsKKworc3RhdGljIGlubGluZSBpbnQgY2VfcGF0aF9tYXRjaChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCWNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkJY2hhciAqc2VlbikKK3sKKwlyZXR1cm4gbWF0Y2hfcGF0aHNwZWMoaXN0YXRlLCBwYXRoc3BlYywgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwLCBzZWVuLAorCQkJICAgICAgU19JU0RJUihjZS0+Y2VfbW9kZSkgfHwgU19JU0dJVExJTksoY2UtPmNlX21vZGUpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGlyX3BhdGhfbWF0Y2goY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKmVudCwKKwkJCQkgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCQkgaW50IHByZWZpeCwgY2hhciAqc2VlbikKK3sKKwlpbnQgaGFzX3RyYWlsaW5nX2RpciA9IGVudC0+bGVuICYmIGVudC0+bmFtZVtlbnQtPmxlbiAtIDFdID09ICcvJzsKKwlpbnQgbGVuID0gaGFzX3RyYWlsaW5nX2RpciA/IGVudC0+bGVuIC0gMSA6IGVudC0+bGVuOworCXJldHVybiBtYXRjaF9wYXRoc3BlYyhpc3RhdGUsIHBhdGhzcGVjLCBlbnQtPm5hbWUsIGxlbiwgcHJlZml4LCBzZWVuLAorCQkJICAgICAgaGFzX3RyYWlsaW5nX2Rpcik7Cit9CisKK2ludCBjbXBfZGlyX2VudHJ5KGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMik7CitpbnQgY2hlY2tfZGlyX2VudHJ5X2NvbnRhaW5zKGNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKm91dCwgY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqaW4pOworCit2b2lkIHVudHJhY2tlZF9jYWNoZV9pbnZhbGlkYXRlX3BhdGgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKiwgaW50IHNhZmVfcGF0aCk7Cit2b2lkIHVudHJhY2tlZF9jYWNoZV9yZW1vdmVfZnJvbV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQgdW50cmFja2VkX2NhY2hlX2FkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqKTsKKwordm9pZCBmcmVlX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICopOworc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqcmVhZF91bnRyYWNrZWRfZXh0ZW5zaW9uKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc3opOwordm9pZCB3cml0ZV91bnRyYWNrZWRfZXh0ZW5zaW9uKHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdW50cmFja2VkKTsKK3ZvaWQgYWRkX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7Cit2b2lkIHJlbW92ZV91bnRyYWNrZWRfY2FjaGUoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisvKgorICogQ29ubmVjdCBhIHdvcmt0cmVlIHRvIGEgZ2l0IGRpcmVjdG9yeSBieSBjcmVhdGluZyAob3Igb3ZlcndyaXRpbmcpIGEKKyAqICcuZ2l0JyBmaWxlIGNvbnRhaW5pbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBnaXQgZGlyZWN0b3J5LiBJbiB0aGUgZ2l0CisgKiBkaXJlY3Rvcnkgc2V0IHRoZSBjb3JlLndvcmt0cmVlIHNldHRpbmcgdG8gaW5kaWNhdGUgd2hlcmUgdGhlIHdvcmt0cmVlIGlzLgorICogV2hlbiBgcmVjdXJzZV9pbnRvX25lc3RlZGAgaXMgc2V0LCByZWN1cnNlIGludG8gYW55IG5lc3RlZCBzdWJtb2R1bGVzLAorICogY29ubmVjdGluZyB0aGVtIGFzIHdlbGwuCisgKi8KK3ZvaWQgY29ubmVjdF93b3JrX3RyZWVfYW5kX2dpdF9kaXIoY29uc3QgY2hhciAqd29ya190cmVlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmdpdF9kaXIsCisJCQkJICAgaW50IHJlY3Vyc2VfaW50b19uZXN0ZWQpOwordm9pZCByZWxvY2F0ZV9naXRkaXIoY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICBjb25zdCBjaGFyICpvbGRfZ2l0X2RpciwKKwkJICAgICBjb25zdCBjaGFyICpuZXdfZ2l0X2Rpcik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2VkaXRvci5jIGIvZWRpdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3OWFiYgotLS0gL2Rldi9udWxsCisrKyBiL2VkaXRvci5jCkBAIC0wLDAgKzEsMTIxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKKyNpZm5kZWYgREVGQVVMVF9FRElUT1IKKyNkZWZpbmUgREVGQVVMVF9FRElUT1IgInZpIgorI2VuZGlmCisKK2ludCBpc190ZXJtaW5hbF9kdW1iKHZvaWQpCit7CisJY29uc3QgY2hhciAqdGVybWluYWwgPSBnZXRlbnYoIlRFUk0iKTsKKwlyZXR1cm4gIXRlcm1pbmFsIHx8ICFzdHJjbXAodGVybWluYWwsICJkdW1iIik7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9lZGl0b3Iodm9pZCkKK3sKKwljb25zdCBjaGFyICplZGl0b3IgPSBnZXRlbnYoIkdJVF9FRElUT1IiKTsKKwlpbnQgdGVybWluYWxfaXNfZHVtYiA9IGlzX3Rlcm1pbmFsX2R1bWIoKTsKKworCWlmICghZWRpdG9yICYmIGVkaXRvcl9wcm9ncmFtKQorCQllZGl0b3IgPSBlZGl0b3JfcHJvZ3JhbTsKKwlpZiAoIWVkaXRvciAmJiAhdGVybWluYWxfaXNfZHVtYikKKwkJZWRpdG9yID0gZ2V0ZW52KCJWSVNVQUwiKTsKKwlpZiAoIWVkaXRvcikKKwkJZWRpdG9yID0gZ2V0ZW52KCJFRElUT1IiKTsKKworCWlmICghZWRpdG9yICYmIHRlcm1pbmFsX2lzX2R1bWIpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFlZGl0b3IpCisJCWVkaXRvciA9IERFRkFVTFRfRURJVE9SOworCisJcmV0dXJuIGVkaXRvcjsKK30KKworY29uc3QgY2hhciAqZ2l0X3NlcXVlbmNlX2VkaXRvcih2b2lkKQoreworCWNvbnN0IGNoYXIgKmVkaXRvciA9IGdldGVudigiR0lUX1NFUVVFTkNFX0VESVRPUiIpOworCisJaWYgKCFlZGl0b3IpCisJCWdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgic2VxdWVuY2UuZWRpdG9yIiwgJmVkaXRvcik7CisJaWYgKCFlZGl0b3IpCisJCWVkaXRvciA9IGdpdF9lZGl0b3IoKTsKKworCXJldHVybiBlZGl0b3I7Cit9CisKK3N0YXRpYyBpbnQgbGF1bmNoX3NwZWNpZmllZF9lZGl0b3IoY29uc3QgY2hhciAqZWRpdG9yLCBjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgIHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwlpZiAoIWVkaXRvcikKKwkJcmV0dXJuIGVycm9yKCJUZXJtaW5hbCBpcyBkdW1iLCBidXQgRURJVE9SIHVuc2V0Iik7CisKKwlpZiAoc3RyY21wKGVkaXRvciwgIjoiKSkgeworCQljb25zdCBjaGFyICphcmdzW10gPSB7IGVkaXRvciwgcmVhbF9wYXRoKHBhdGgpLCBOVUxMIH07CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHAgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCWludCByZXQsIHNpZzsKKwkJaW50IHByaW50X3dhaXRpbmdfZm9yX2VkaXRvciA9IGFkdmljZV93YWl0aW5nX2Zvcl9lZGl0b3IgJiYgaXNhdHR5KDIpOworCisJCWlmIChwcmludF93YWl0aW5nX2Zvcl9lZGl0b3IpIHsKKwkJCS8qCisJCQkgKiBBIGR1bWIgdGVybWluYWwgY2Fubm90IGVyYXNlIHRoZSBsaW5lIGxhdGVyIG9uLiBBZGQgYQorCQkJICogbmV3bGluZSB0byBzZXBhcmF0ZSB0aGUgaGludCBmcm9tIHN1YnNlcXVlbnQgb3V0cHV0LgorCQkJICoKKwkJCSAqIE1ha2Ugc3VyZSB0aGF0IG91ciBtZXNzYWdlIGlzIHNlcGFyYXRlZCB3aXRoIGEgd2hpdGVzcGFjZQorCQkJICogZnJvbSBmdXJ0aGVyIGNydWZ0IHRoYXQgbWF5IGJlIHdyaXR0ZW4gYnkgdGhlIGVkaXRvci4KKwkJCSAqLworCQkJY29uc3QgY2hhciB0ZXJtID0gaXNfdGVybWluYWxfZHVtYigpID8gJ1xuJyA6ICcgJzsKKworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIpLAorCQkJCXRlcm0pOworCQkJZmZsdXNoKHN0ZGVycik7CisJCX0KKworCQlwLmFyZ3YgPSBhcmdzOworCQlwLmVudiA9IGVudjsKKwkJcC51c2Vfc2hlbGwgPSAxOworCQlwLnRyYWNlMl9jaGlsZF9jbGFzcyA9ICJlZGl0b3IiOworCQlpZiAoc3RhcnRfY29tbWFuZCgmcCkgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gc3RhcnQgZWRpdG9yICclcyciLCBlZGl0b3IpOworCisJCXNpZ2NoYWluX3B1c2goU0lHSU5ULCBTSUdfSUdOKTsKKwkJc2lnY2hhaW5fcHVzaChTSUdRVUlULCBTSUdfSUdOKTsKKwkJcmV0ID0gZmluaXNoX2NvbW1hbmQoJnApOworCQlzaWcgPSByZXQgLSAxMjg7CisJCXNpZ2NoYWluX3BvcChTSUdJTlQpOworCQlzaWdjaGFpbl9wb3AoU0lHUVVJVCk7CisJCWlmIChzaWcgPT0gU0lHSU5UIHx8IHNpZyA9PSBTSUdRVUlUKQorCQkJcmFpc2Uoc2lnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBlcnJvcigiVGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBlZGl0b3IgJyVzJy4iLAorCQkJCQllZGl0b3IpOworCisJCWlmIChwcmludF93YWl0aW5nX2Zvcl9lZGl0b3IgJiYgIWlzX3Rlcm1pbmFsX2R1bWIoKSkKKwkJCS8qCisJCQkgKiBFcmFzZSB0aGUgZW50aXJlIGxpbmUgdG8gYXZvaWQgd2FzdGluZyB0aGUKKwkJCSAqIHZlcnRpY2FsIHNwYWNlLgorCQkJICovCisJCQl0ZXJtX2NsZWFyX2xpbmUoKTsKKwl9CisKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIDA7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoYnVmZmVyLCBwYXRoLCAwKSA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubygiY291bGQgbm90IHJlYWQgZmlsZSAnJXMnIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBsYXVuY2hfZWRpdG9yKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwlyZXR1cm4gbGF1bmNoX3NwZWNpZmllZF9lZGl0b3IoZ2l0X2VkaXRvcigpLCBwYXRoLCBidWZmZXIsIGVudik7Cit9CisKK2ludCBsYXVuY2hfc2VxdWVuY2VfZWRpdG9yKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwKKwkJCSAgIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpCit7CisJcmV0dXJuIGxhdW5jaF9zcGVjaWZpZWRfZWRpdG9yKGdpdF9zZXF1ZW5jZV9lZGl0b3IoKSwgcGF0aCwgYnVmZmVyLCBlbnYpOworfQpkaWZmIC0tZ2l0IGEvZW50cnkuYyBiL2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzODBiYgotLS0gL2Rldi9udWxsCisrKyBiL2VudHJ5LmMKQEAgLTAsMCArMSw1MzggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImZzbW9uaXRvci5oIgorCitzdGF0aWMgdm9pZCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhfbGVuLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUpCit7CisJY2hhciAqYnVmID0geG1hbGxvY3oocGF0aF9sZW4pOworCWludCBsZW4gPSAwOworCisJd2hpbGUgKGxlbiA8IHBhdGhfbGVuKSB7CisJCWRvIHsKKwkJCWJ1ZltsZW5dID0gcGF0aFtsZW5dOworCQkJbGVuKys7CisJCX0gd2hpbGUgKGxlbiA8IHBhdGhfbGVuICYmIHBhdGhbbGVuXSAhPSAnLycpOworCQlpZiAobGVuID49IHBhdGhfbGVuKQorCQkJYnJlYWs7CisJCWJ1ZltsZW5dID0gMDsKKworCQkvKgorCQkgKiBGb3IgJ2NoZWNrb3V0LWluZGV4IC0tcHJlZml4PTxkaXI+JywgPGRpcj4gaXMKKwkJICogYWxsb3dlZCB0byBiZSBhIHN5bWxpbmsgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LAorCQkgKiBhbmQgd2Ugc2V0ICdzdGF0ZS0+YmFzZV9kaXJfbGVuJyBiZWxvdywgc3VjaCB0aGF0CisJCSAqIHdlIHRlc3QgdGhlIHBhdGggY29tcG9uZW50cyBvZiB0aGUgcHJlZml4IHdpdGggdGhlCisJCSAqIHN0YXQoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBsc3RhdCgpIGZ1bmN0aW9uLgorCQkgKi8KKwkJaWYgKGhhc19kaXJzX29ubHlfcGF0aChidWYsIGxlbiwgc3RhdGUtPmJhc2VfZGlyX2xlbikpCisJCQljb250aW51ZTsgLyogb2ssIGl0IGlzIGFscmVhZHkgYSBkaXJlY3RvcnkuICovCisKKwkJLyoKKwkJICogSWYgdGhpcyBta2RpcigpIHdvdWxkIGZhaWwsIGl0IGNvdWxkIGJlIHRoYXQgdGhlcmUKKwkJICogaXMgYWxyZWFkeSBhIHN5bWxpbmsgb3Igc29tZXRoaW5nIGVsc2UgZXhpc3RzCisJCSAqIHRoZXJlLCB0aGVyZWZvcmUgd2UgdGhlbiB0cnkgdG8gdW5saW5rIGl0IGFuZCB0cnkKKwkJICogb25lIG1vcmUgdGltZSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeS4KKwkJICovCisJCWlmIChta2RpcihidWYsIDA3NzcpKSB7CisJCQlpZiAoZXJybm8gPT0gRUVYSVNUICYmIHN0YXRlLT5mb3JjZSAmJgorCQkJICAgICF1bmxpbmtfb3Jfd2FybihidWYpICYmICFta2RpcihidWYsIDA3NzcpKQorCQkJCWNvbnRpbnVlOworCQkJZGllX2Vycm5vKCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBhdCAnJXMnIiwgYnVmKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9zdWJ0cmVlKHN0cnVjdCBzdHJidWYgKnBhdGgpCit7CisJRElSICpkaXIgPSBvcGVuZGlyKHBhdGgtPmJ1Zik7CisJc3RydWN0IGRpcmVudCAqZGU7CisJaW50IG9yaWdsZW4gPSBwYXRoLT5sZW47CisKKwlpZiAoIWRpcikKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbmRpciAnJXMnIiwgcGF0aC0+YnVmKTsKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX2FkZGNoKHBhdGgsICcvJyk7CisJCXN0cmJ1Zl9hZGRzdHIocGF0aCwgZGUtPmRfbmFtZSk7CisJCWlmIChsc3RhdChwYXRoLT5idWYsICZzdCkpCisJCQlkaWVfZXJybm8oImNhbm5vdCBsc3RhdCAnJXMnIiwgcGF0aC0+YnVmKTsKKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQlyZW1vdmVfc3VidHJlZShwYXRoKTsKKwkJZWxzZSBpZiAodW5saW5rKHBhdGgtPmJ1ZikpCisJCQlkaWVfZXJybm8oImNhbm5vdCB1bmxpbmsgJyVzJyIsIHBhdGgtPmJ1Zik7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgb3JpZ2xlbik7CisJfQorCWNsb3NlZGlyKGRpcik7CisJaWYgKHJtZGlyKHBhdGgtPmJ1ZikpCisJCWRpZV9lcnJubygiY2Fubm90IHJtZGlyICclcyciLCBwYXRoLT5idWYpOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBtb2RlKQoreworCW1vZGUgPSAobW9kZSAmIDAxMDApID8gMDc3NyA6IDA2NjY7CisJcmV0dXJuIG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCBtb2RlKTsKK30KKworc3RhdGljIHZvaWQgKnJlYWRfYmxvYl9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpibG9iX2RhdGEgPSByZWFkX29iamVjdF9maWxlKCZjZS0+b2lkLCAmdHlwZSwgc2l6ZSk7CisKKwlpZiAoYmxvYl9kYXRhKSB7CisJCWlmICh0eXBlID09IE9CSl9CTE9CKQorCQkJcmV0dXJuIGJsb2JfZGF0YTsKKwkJZnJlZShibG9iX2RhdGEpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBvcGVuX291dHB1dF9mZChjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgdG9fdGVtcGZpbGUpCit7CisJaW50IHN5bWxpbmsgPSAoY2UtPmNlX21vZGUgJiBTX0lGTVQpICE9IFNfSUZSRUc7CisJaWYgKHRvX3RlbXBmaWxlKSB7CisJCXhzbnByaW50ZihwYXRoLCBURU1QT1JBUllfRklMRU5BTUVfTEVOR1RILCAiJXMiLAorCQkJICBzeW1saW5rID8gIi5tZXJnZV9saW5rX1hYWFhYWCIgOiAiLm1lcmdlX2ZpbGVfWFhYWFhYIik7CisJCXJldHVybiBta3N0ZW1wKHBhdGgpOworCX0gZWxzZSB7CisJCXJldHVybiBjcmVhdGVfZmlsZShwYXRoLCAhc3ltbGluayA/IGNlLT5jZV9tb2RlIDogMDY2Nik7CisJfQorfQorCitzdGF0aWMgaW50IGZzdGF0X291dHB1dChpbnQgZmQsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwkvKiB1c2UgZnN0YXQoKSBvbmx5IHdoZW4gcGF0aCA9PSBjZS0+bmFtZSAqLworCWlmIChmc3RhdF9pc19yZWxpYWJsZSgpICYmCisJICAgIHN0YXRlLT5yZWZyZXNoX2NhY2hlICYmICFzdGF0ZS0+YmFzZV9kaXJfbGVuKSB7CisJCWZzdGF0KGZkLCBzdCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHJlYW1pbmdfd3JpdGVfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY2hhciAqcGF0aCwKKwkJCQkgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJCQkgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50IHRvX3RlbXBmaWxlLAorCQkJCSBpbnQgKmZzdGF0X2RvbmUsIHN0cnVjdCBzdGF0ICpzdGF0YnVmKQoreworCWludCByZXN1bHQgPSAwOworCWludCBmZDsKKworCWZkID0gb3Blbl9vdXRwdXRfZmQocGF0aCwgY2UsIHRvX3RlbXBmaWxlKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXN1bHQgfD0gc3RyZWFtX2Jsb2JfdG9fZmQoZmQsICZjZS0+b2lkLCBmaWx0ZXIsIDEpOworCSpmc3RhdF9kb25lID0gZnN0YXRfb3V0cHV0KGZkLCBzdGF0ZSwgc3RhdGJ1Zik7CisJcmVzdWx0IHw9IGNsb3NlKGZkKTsKKworCWlmIChyZXN1bHQpCisJCXVubGluayhwYXRoKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGVuYWJsZV9kZWxheWVkX2NoZWNrb3V0KHN0cnVjdCBjaGVja291dCAqc3RhdGUpCit7CisJaWYgKCFzdGF0ZS0+ZGVsYXllZF9jaGVja291dCkgeworCQlzdGF0ZS0+ZGVsYXllZF9jaGVja291dCA9IHhtYWxsb2Moc2l6ZW9mKCpzdGF0ZS0+ZGVsYXllZF9jaGVja291dCkpOworCQlzdGF0ZS0+ZGVsYXllZF9jaGVja291dC0+c3RhdGUgPSBDRV9DQU5fREVMQVk7CisJCXN0cmluZ19saXN0X2luaXQoJnN0YXRlLT5kZWxheWVkX2NoZWNrb3V0LT5maWx0ZXJzLCAwKTsKKwkJc3RyaW5nX2xpc3RfaW5pdCgmc3RhdGUtPmRlbGF5ZWRfY2hlY2tvdXQtPnBhdGhzLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2F2YWlsYWJsZV9wYXRocyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmF2YWlsYWJsZV9wYXRocyA9IGNiX2RhdGE7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmF2YWlsYWJsZTsKKworCWF2YWlsYWJsZSA9IHN0cmluZ19saXN0X2xvb2t1cChhdmFpbGFibGVfcGF0aHMsIGl0ZW0tPnN0cmluZyk7CisJaWYgKGF2YWlsYWJsZSkKKwkJYXZhaWxhYmxlLT51dGlsID0gKHZvaWQgKilpdGVtLT5zdHJpbmc7CisJcmV0dXJuICFhdmFpbGFibGU7Cit9CisKK2ludCBmaW5pc2hfZGVsYXllZF9jaGVja291dChzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgKm5yX2NoZWNrb3V0cykKK3sKKwlpbnQgZXJycyA9IDA7CisJdW5zaWduZWQgZGVsYXllZF9vYmplY3RfY291bnQ7CisJb2ZmX3QgZmlsdGVyZWRfYnl0ZXMgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpmaWx0ZXIsICpwYXRoOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisJc3RydWN0IGRlbGF5ZWRfY2hlY2tvdXQgKmRjbyA9IHN0YXRlLT5kZWxheWVkX2NoZWNrb3V0OworCisJaWYgKCFzdGF0ZS0+ZGVsYXllZF9jaGVja291dCkKKwkJcmV0dXJuIGVycnM7CisKKwlkY28tPnN0YXRlID0gQ0VfUkVUUlk7CisJZGVsYXllZF9vYmplY3RfY291bnQgPSBkY28tPnBhdGhzLm5yOworCXByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhfKCJGaWx0ZXJpbmcgY29udGVudCIpLCBkZWxheWVkX29iamVjdF9jb3VudCk7CisJd2hpbGUgKGRjby0+ZmlsdGVycy5uciA+IDApIHsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShmaWx0ZXIsICZkY28tPmZpbHRlcnMpIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdCBhdmFpbGFibGVfcGF0aHMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgZGVsYXllZF9vYmplY3RfY291bnQgLSBkY28tPnBhdGhzLm5yKTsKKworCQkJaWYgKCFhc3luY19xdWVyeV9hdmFpbGFibGVfYmxvYnMoZmlsdGVyLT5zdHJpbmcsICZhdmFpbGFibGVfcGF0aHMpKSB7CisJCQkJLyogRmlsdGVyIHJlcG9ydGVkIGFuIGVycm9yICovCisJCQkJZXJycyA9IDE7CisJCQkJZmlsdGVyLT5zdHJpbmcgPSAiIjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChhdmFpbGFibGVfcGF0aHMubnIgPD0gMCkgeworCQkJCS8qCisJCQkJICogRmlsdGVyIHJlc3BvbmRlZCB3aXRoIG5vIGVudHJpZXMuIFRoYXQgbWVhbnMKKwkJCQkgKiB0aGUgZmlsdGVyIGlzIGRvbmUgYW5kIHdlIGNhbiByZW1vdmUgdGhlCisJCQkJICogZmlsdGVyIGZyb20gdGhlIGxpc3QgKHNlZQorCQkJCSAqICJzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMiIGNhbGwgYmVsb3cpLgorCQkJCSAqLworCQkJCWZpbHRlci0+c3RyaW5nID0gIiI7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBJbiBkY28tPnBhdGhzIHdlIHN0b3JlIGEgbGlzdCBvZiBhbGwgZGVsYXllZCBwYXRocy4KKwkJCSAqIFRoZSBmaWx0ZXIganVzdCBzZW5kIHVzIGEgbGlzdCBvZiBhdmFpbGFibGUgcGF0aHMuCisJCQkgKiBSZW1vdmUgdGhlbSBmcm9tIHRoZSBsaXN0LgorCQkJICovCisJCQlmaWx0ZXJfc3RyaW5nX2xpc3QoJmRjby0+cGF0aHMsIDAsCisJCQkJJnJlbW92ZV9hdmFpbGFibGVfcGF0aHMsICZhdmFpbGFibGVfcGF0aHMpOworCisJCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKHBhdGgsICZhdmFpbGFibGVfcGF0aHMpIHsKKwkJCQlzdHJ1Y3QgY2FjaGVfZW50cnkqIGNlOworCisJCQkJaWYgKCFwYXRoLT51dGlsKSB7CisJCQkJCWVycm9yKCJleHRlcm5hbCBmaWx0ZXIgJyVzJyBzaWduYWxlZCB0aGF0ICclcycgIgorCQkJCQkgICAgICAiaXMgbm93IGF2YWlsYWJsZSBhbHRob3VnaCBpdCBoYXMgbm90IGJlZW4gIgorCQkJCQkgICAgICAiZGVsYXllZCBlYXJsaWVyIiwKKwkJCQkJICAgICAgZmlsdGVyLT5zdHJpbmcsIHBhdGgtPnN0cmluZyk7CisJCQkJCWVycnMgfD0gMTsKKworCQkJCQkvKgorCQkJCQkgKiBEbyBub3QgYXNrIHRoZSBmaWx0ZXIgZm9yIGF2YWlsYWJsZSBibG9icywKKwkJCQkJICogYWdhaW4sIGFzIHRoZSBmaWx0ZXIgaXMgbGlrZWx5IGJ1Z2d5LgorCQkJCQkgKi8KKwkJCQkJZmlsdGVyLT5zdHJpbmcgPSAiIjsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWNlID0gaW5kZXhfZmlsZV9leGlzdHMoc3RhdGUtPmlzdGF0ZSwgcGF0aC0+c3RyaW5nLAorCQkJCQkJICAgICAgIHN0cmxlbihwYXRoLT5zdHJpbmcpLCAwKTsKKwkJCQlpZiAoY2UpIHsKKwkJCQkJZXJycyB8PSBjaGVja291dF9lbnRyeShjZSwgc3RhdGUsIE5VTEwsIG5yX2NoZWNrb3V0cyk7CisJCQkJCWZpbHRlcmVkX2J5dGVzICs9IGNlLT5jZV9zdGF0X2RhdGEuc2Rfc2l6ZTsKKwkJCQkJZGlzcGxheV90aHJvdWdocHV0KHByb2dyZXNzLCBmaWx0ZXJlZF9ieXRlcyk7CisJCQkJfSBlbHNlCisJCQkJCWVycnMgPSAxOworCQkJfQorCQl9CisJCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmZGNvLT5maWx0ZXJzLCAwKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCXN0cmluZ19saXN0X2NsZWFyKCZkY28tPmZpbHRlcnMsIDApOworCisJLyogQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgbm90IGhhdmUgYW55IGRlbGF5ZWQgcGF0aHMgYW55bW9yZS4gKi8KKwllcnJzIHw9IGRjby0+cGF0aHMubnI7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShwYXRoLCAmZGNvLT5wYXRocykgeworCQllcnJvcigiJyVzJyB3YXMgbm90IGZpbHRlcmVkIHByb3Blcmx5IiwgcGF0aC0+c3RyaW5nKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRjby0+cGF0aHMsIDApOworCisJZnJlZShkY28pOworCXN0YXRlLT5kZWxheWVkX2NoZWNrb3V0ID0gTlVMTDsKKworCXJldHVybiBlcnJzOworfQorCitzdGF0aWMgaW50IHdyaXRlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCSAgICAgICBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgdG9fdGVtcGZpbGUpCit7CisJdW5zaWduZWQgaW50IGNlX21vZGVfc19pZm10ID0gY2UtPmNlX21vZGUgJiBTX0lGTVQ7CisJc3RydWN0IGRlbGF5ZWRfY2hlY2tvdXQgKmRjbyA9IHN0YXRlLT5kZWxheWVkX2NoZWNrb3V0OworCWludCBmZCwgcmV0LCBmc3RhdF9kb25lID0gMDsKKwljaGFyICpuZXdfYmxvYjsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzc2l6ZV90IHdyb3RlOworCXNpemVfdCBuZXdzaXplID0gMDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CisKKwlpZiAoY2VfbW9kZV9zX2lmbXQgPT0gU19JRlJFRykgeworCQlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyID0gZ2V0X3N0cmVhbV9maWx0ZXIoc3RhdGUtPmlzdGF0ZSwgY2UtPm5hbWUsCisJCQkJCQkJCSAmY2UtPm9pZCk7CisJCWlmIChmaWx0ZXIgJiYKKwkJICAgICFzdHJlYW1pbmdfd3JpdGVfZW50cnkoY2UsIHBhdGgsIGZpbHRlciwKKwkJCQkJICAgc3RhdGUsIHRvX3RlbXBmaWxlLAorCQkJCQkgICAmZnN0YXRfZG9uZSwgJnN0KSkKKwkJCWdvdG8gZmluaXNoOworCX0KKworCXN3aXRjaCAoY2VfbW9kZV9zX2lmbXQpIHsKKwljYXNlIFNfSUZMTks6CisJCW5ld19ibG9iID0gcmVhZF9ibG9iX2VudHJ5KGNlLCAmc2l6ZSk7CisJCWlmICghbmV3X2Jsb2IpCisJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byByZWFkIHNoYTEgZmlsZSBvZiAlcyAoJXMpIiwKKwkJCQkgICAgIHBhdGgsIG9pZF90b19oZXgoJmNlLT5vaWQpKTsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBtYWtlIGEgcmVhbCBzeW1saW5rOyB3cml0ZSBvdXQgYSByZWd1bGFyIGZpbGUgZW50cnkKKwkJICogd2l0aCB0aGUgc3ltbGluayBkZXN0aW5hdGlvbiBhcyBpdHMgY29udGVudHMuCisJCSAqLworCQlpZiAoIWhhc19zeW1saW5rcyB8fCB0b190ZW1wZmlsZSkKKwkJCWdvdG8gd3JpdGVfZmlsZV9lbnRyeTsKKworCQlyZXQgPSBzeW1saW5rKG5ld19ibG9iLCBwYXRoKTsKKwkJZnJlZShuZXdfYmxvYik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgc3ltbGluayAlcyIsIHBhdGgpOworCQlicmVhazsKKworCWNhc2UgU19JRlJFRzoKKwkJLyoKKwkJICogV2UgZG8gbm90IHNlbmQgdGhlIGJsb2IgaW4gY2FzZSBvZiBhIHJldHJ5LCBzbyBkbyBub3QKKwkJICogYm90aGVyIHJlYWRpbmcgaXQgYXQgYWxsLgorCQkgKi8KKwkJaWYgKGRjbyAmJiBkY28tPnN0YXRlID09IENFX1JFVFJZKSB7CisJCQluZXdfYmxvYiA9IE5VTEw7CisJCQlzaXplID0gMDsKKwkJfSBlbHNlIHsKKwkJCW5ld19ibG9iID0gcmVhZF9ibG9iX2VudHJ5KGNlLCAmc2l6ZSk7CisJCQlpZiAoIW5ld19ibG9iKQorCQkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIG9mICVzICglcykiLAorCQkJCQkgICAgIHBhdGgsIG9pZF90b19oZXgoJmNlLT5vaWQpKTsKKwkJfQorCisJCS8qCisJCSAqIENvbnZlcnQgZnJvbSBnaXQgaW50ZXJuYWwgZm9ybWF0IHRvIHdvcmtpbmcgdHJlZSBmb3JtYXQKKwkJICovCisJCWlmIChkY28gJiYgZGNvLT5zdGF0ZSAhPSBDRV9OT19ERUxBWSkgeworCQkJcmV0ID0gYXN5bmNfY29udmVydF90b193b3JraW5nX3RyZWUoc3RhdGUtPmlzdGF0ZSwgY2UtPm5hbWUsIG5ld19ibG9iLAorCQkJCQkJCSAgICBzaXplLCAmYnVmLCBkY28pOworCQkJaWYgKHJldCAmJiBzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZkY28tPnBhdGhzLCBjZS0+bmFtZSkpIHsKKwkJCQlmcmVlKG5ld19ibG9iKTsKKwkJCQlnb3RvIGRlbGF5ZWQ7CisJCQl9CisJCX0gZWxzZQorCQkJcmV0ID0gY29udmVydF90b193b3JraW5nX3RyZWUoc3RhdGUtPmlzdGF0ZSwgY2UtPm5hbWUsIG5ld19ibG9iLCBzaXplLCAmYnVmKTsKKworCQlpZiAocmV0KSB7CisJCQlmcmVlKG5ld19ibG9iKTsKKwkJCW5ld19ibG9iID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmbmV3c2l6ZSk7CisJCQlzaXplID0gbmV3c2l6ZTsKKwkJfQorCQkvKgorCQkgKiBObyAiZWxzZSIgaGVyZSBhcyBlcnJvcnMgZnJvbSBjb252ZXJ0IGFyZSBPSyBhdCB0aGlzCisJCSAqIHBvaW50LiBJZiB0aGUgZXJyb3Igd291bGQgaGF2ZSBiZWVuIGZhdGFsIChlLmcuCisJCSAqIGZpbHRlciBpcyByZXF1aXJlZCksIHRoZW4gd2Ugd291bGQgaGF2ZSBkaWVkIGFscmVhZHkuCisJCSAqLworCisJd3JpdGVfZmlsZV9lbnRyeToKKwkJZmQgPSBvcGVuX291dHB1dF9mZChwYXRoLCBjZSwgdG9fdGVtcGZpbGUpOworCQlpZiAoZmQgPCAwKSB7CisJCQlmcmVlKG5ld19ibG9iKTsKKwkJCXJldHVybiBlcnJvcl9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSBmaWxlICVzIiwgcGF0aCk7CisJCX0KKworCQl3cm90ZSA9IHdyaXRlX2luX2Z1bGwoZmQsIG5ld19ibG9iLCBzaXplKTsKKwkJaWYgKCF0b190ZW1wZmlsZSkKKwkJCWZzdGF0X2RvbmUgPSBmc3RhdF9vdXRwdXQoZmQsIHN0YXRlLCAmc3QpOworCQljbG9zZShmZCk7CisJCWZyZWUobmV3X2Jsb2IpOworCQlpZiAod3JvdGUgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIsIHBhdGgpOworCQlicmVhazsKKworCWNhc2UgU19JRkdJVExJTks6CisJCWlmICh0b190ZW1wZmlsZSkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IGNyZWF0ZSB0ZW1wb3Jhcnkgc3VibW9kdWxlICVzIiwgcGF0aCk7CisJCWlmIChta2RpcihwYXRoLCAwNzc3KSA8IDApCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBjcmVhdGUgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIsIHBhdGgpOworCQlzdWIgPSBzdWJtb2R1bGVfZnJvbV9jZShjZSk7CisJCWlmIChzdWIpCisJCQlyZXR1cm4gc3VibW9kdWxlX21vdmVfaGVhZChjZS0+bmFtZSwKKwkJCQlOVUxMLCBvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCQlzdGF0ZS0+Zm9yY2UgPyBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFIDogMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKCJ1bmtub3duIGZpbGUgbW9kZSBmb3IgJXMgaW4gaW5kZXgiLCBwYXRoKTsKKwl9CisKK2ZpbmlzaDoKKwlpZiAoc3RhdGUtPnJlZnJlc2hfY2FjaGUpIHsKKwkJYXNzZXJ0KHN0YXRlLT5pc3RhdGUpOworCQlpZiAoIWZzdGF0X2RvbmUpCisJCQlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkgPCAwKQorCQkJCXJldHVybiBlcnJvcl9lcnJubygidW5hYmxlIHRvIHN0YXQganVzdC13cml0dGVuIGZpbGUgJXMiLAorCQkJCQkJICAgY2UtPm5hbWUpOworCQlmaWxsX3N0YXRfY2FjaGVfaW5mbyhzdGF0ZS0+aXN0YXRlLCBjZSwgJnN0KTsKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCQltYXJrX2ZzbW9uaXRvcl9pbnZhbGlkKHN0YXRlLT5pc3RhdGUsIGNlKTsKKwkJc3RhdGUtPmlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBDRV9FTlRSWV9DSEFOR0VEOworCX0KK2RlbGF5ZWQ6CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGlzIGxpa2UgJ2xzdGF0KCknLCBleGNlcHQgaXQgcmVmdXNlcyB0byBmb2xsb3cgc3ltbGlua3MKKyAqIGluIHRoZSBwYXRoLCBhZnRlciBza2lwcGluZyAic2tpcGxlbiIuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcGF0aChjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBza2lwbGVuKQoreworCWNvbnN0IGNoYXIgKnNsYXNoID0gcGF0aCArIGxlbjsKKworCXdoaWxlIChwYXRoIDwgc2xhc2ggJiYgKnNsYXNoICE9ICcvJykKKwkJc2xhc2gtLTsKKwlpZiAoIWhhc19kaXJzX29ubHlfcGF0aChwYXRoLCBzbGFzaCAtIHBhdGgsIHNraXBsZW4pKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBsc3RhdChwYXRoLCBzdCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY29sbGlkaW5nX2VudHJpZXMoY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaW50IGksIHRydXN0X2lubyA9IGNoZWNrX3N0YXQ7CisKKyNpZiBkZWZpbmVkKEdJVF9XSU5ET1dTX05BVElWRSkgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorCXRydXN0X2lubyA9IDA7CisjZW5kaWYKKworCWNlLT5jZV9mbGFncyB8PSBDRV9NQVRDSEVEOworCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5pc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpkdXAgPSBzdGF0ZS0+aXN0YXRlLT5jYWNoZVtpXTsKKworCQlpZiAoZHVwID09IGNlKQorCQkJYnJlYWs7CisKKwkJaWYgKGR1cC0+Y2VfZmxhZ3MgJiAoQ0VfTUFUQ0hFRCB8IENFX1ZBTElEIHwgQ0VfU0tJUF9XT1JLVFJFRSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKHRydXN0X2lubyAmJiAhbWF0Y2hfc3RhdF9kYXRhKCZkdXAtPmNlX3N0YXRfZGF0YSwgc3QpKSB8fAorCQkgICAgKCF0cnVzdF9pbm8gJiYgIWZzcGF0aGNtcChjZS0+bmFtZSwgZHVwLT5uYW1lKSkpIHsKKwkJCWR1cC0+Y2VfZmxhZ3MgfD0gQ0VfTUFUQ0hFRDsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogV3JpdGUgdGhlIGNvbnRlbnRzIGZyb20gY2Ugb3V0IHRvIHRoZSB3b3JraW5nIHRyZWUuCisgKgorICogV2hlbiB0b3BhdGhbXSBpcyBub3QgTlVMTCwgaW5zdGVhZCBvZiB3cml0aW5nIHRvIHRoZSB3b3JraW5nIHRyZWUKKyAqIGZpbGUgbmFtZWQgYnkgY2UsIGEgdGVtcG9yYXJ5IGZpbGUgaXMgY3JlYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGFuZAorICogaXRzIG5hbWUgaXMgcmV0dXJuZWQgaW4gdG9wYXRoW10sIHdoaWNoIG11c3QgYmUgYWJsZSB0byBob2xkIGF0CisgKiBsZWFzdCBURU1QT1JBUllfRklMRU5BTUVfTEVOR1RIIGJ5dGVzIGxvbmcuCisgKi8KK2ludCBjaGVja291dF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLAorCQkgICBjaGFyICp0b3BhdGgsIGludCAqbnJfY2hlY2tvdXRzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9XVF9SRU1PVkUpIHsKKwkJaWYgKHRvcGF0aCkKKwkJCS8qCisJCQkgKiBObyBjb250ZW50IGFuZCB0aHVzIG5vIHBhdGggdG8gY3JlYXRlLCBzbyB3ZSBoYXZlCisJCQkgKiBubyBwYXRobmFtZSB0byByZXR1cm4uCisJCQkgKi8KKwkJCUJVRygiQ2FuJ3QgcmVtb3ZlIGVudHJ5IHRvIGEgcGF0aCIpOworCQl1bmxpbmtfZW50cnkoY2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodG9wYXRoKQorCQlyZXR1cm4gd3JpdGVfZW50cnkoY2UsIHRvcGF0aCwgc3RhdGUsIDEpOworCisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlzdHJidWZfYWRkKCZwYXRoLCBzdGF0ZS0+YmFzZV9kaXIsIHN0YXRlLT5iYXNlX2Rpcl9sZW4pOworCXN0cmJ1Zl9hZGQoJnBhdGgsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSk7CisKKwlpZiAoIWNoZWNrX3BhdGgocGF0aC5idWYsIHBhdGgubGVuLCAmc3QsIHN0YXRlLT5iYXNlX2Rpcl9sZW4pKSB7CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwkJdW5zaWduZWQgY2hhbmdlZCA9IGllX21hdGNoX3N0YXQoc3RhdGUtPmlzdGF0ZSwgY2UsICZzdCwKKwkJCQkJCSBDRV9NQVRDSF9JR05PUkVfVkFMSUQgfCBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSk7CisJCS8qCisJCSAqIE5lZWRzIHRvIGJlIGNoZWNrZWQgYmVmb3JlICFjaGFuZ2VkIHJldHVybnMgZWFybHksCisJCSAqIGFzIHRoZSBwb3NzaWJseSBlbXB0eSBkaXJlY3Rvcnkgd2FzIG5vdCBjaGFuZ2VkCisJCSAqLworCQlzdWIgPSBzdWJtb2R1bGVfZnJvbV9jZShjZSk7CisJCWlmIChzdWIpIHsKKwkJCWludCBlcnI7CisJCQlpZiAoIWlzX3N1Ym1vZHVsZV9wb3B1bGF0ZWRfZ2VudGx5KGNlLT5uYW1lLCAmZXJyKSkgeworCQkJCXN0cnVjdCBzdGF0IHNiOworCQkJCWlmIChsc3RhdChjZS0+bmFtZSwgJnNiKSkKKwkJCQkJZGllKF8oImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIpLCBjZS0+bmFtZSk7CisJCQkJaWYgKCEoc3Quc3RfbW9kZSAmIFNfSUZESVIpKQorCQkJCQl1bmxpbmtfb3Jfd2FybihjZS0+bmFtZSk7CisKKwkJCQlyZXR1cm4gc3VibW9kdWxlX21vdmVfaGVhZChjZS0+bmFtZSwKKwkJCQkJTlVMTCwgb2lkX3RvX2hleCgmY2UtPm9pZCksIDApOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIHN1Ym1vZHVsZV9tb3ZlX2hlYWQoY2UtPm5hbWUsCisJCQkJCSJIRUFEIiwgb2lkX3RvX2hleCgmY2UtPm9pZCksCisJCQkJCXN0YXRlLT5mb3JjZSA/IFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UgOiAwKTsKKwkJfQorCisJCWlmICghY2hhbmdlZCkKKwkJCXJldHVybiAwOworCQlpZiAoIXN0YXRlLT5mb3JjZSkgeworCQkJaWYgKCFzdGF0ZS0+cXVpZXQpCisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIlcyBhbHJlYWR5IGV4aXN0cywgbm8gY2hlY2tvdXRcbiIsCisJCQkJCXBhdGguYnVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChzdGF0ZS0+Y2xvbmUpCisJCQltYXJrX2NvbGxpZGluZ19lbnRyaWVzKHN0YXRlLCBjZSwgJnN0KTsKKworCQkvKgorCQkgKiBXZSB1bmxpbmsgdGhlIG9sZCBmaWxlLCB0byBnZXQgdGhlIG5ldyBvbmUgd2l0aCB0aGUKKwkJICogcmlnaHQgcGVybWlzc2lvbnMgKGluY2x1ZGluZyB1bWFzaywgd2hpY2ggaXMgbmFzdHkKKwkJICogdG8gZW11bGF0ZSBieSBoYW5kIC0gbXVjaCBlYXNpZXIgdG8gbGV0IHRoZSBzeXN0ZW0KKwkJICoganVzdCBkbyB0aGUgcmlnaHQgdGhpbmcpCisJCSAqLworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJLyogSWYgaXQgaXMgYSBnaXRsaW5rLCBsZWF2ZSBpdCBhbG9uZSEgKi8KKwkJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoIXN0YXRlLT5mb3JjZSkKKwkJCQlyZXR1cm4gZXJyb3IoIiVzIGlzIGEgZGlyZWN0b3J5IiwgcGF0aC5idWYpOworCQkJcmVtb3ZlX3N1YnRyZWUoJnBhdGgpOworCQl9IGVsc2UgaWYgKHVubGluayhwYXRoLmJ1ZikpCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oInVuYWJsZSB0byB1bmxpbmsgb2xkICclcyciLCBwYXRoLmJ1Zik7CisJfSBlbHNlIGlmIChzdGF0ZS0+bm90X25ldykKKwkJcmV0dXJuIDA7CisKKwljcmVhdGVfZGlyZWN0b3JpZXMocGF0aC5idWYsIHBhdGgubGVuLCBzdGF0ZSk7CisJaWYgKG5yX2NoZWNrb3V0cykKKwkJKCpucl9jaGVja291dHMpKys7CisJcmV0dXJuIHdyaXRlX2VudHJ5KGNlLCBwYXRoLmJ1Ziwgc3RhdGUsIDApOworfQorCit2b2lkIHVubGlua19lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YiA9IHN1Ym1vZHVsZV9mcm9tX2NlKGNlKTsKKwlpZiAoc3ViKSB7CisJCS8qIHN0YXRlLmZvcmNlIGlzIHNldCBhdCB0aGUgY2FsbGVyLiAqLworCQlzdWJtb2R1bGVfbW92ZV9oZWFkKGNlLT5uYW1lLCAiSEVBRCIsIE5VTEwsCisJCQkJICAgIFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UpOworCX0KKwlpZiAoIWNoZWNrX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpKQorCQlyZXR1cm47CisJaWYgKHJlbW92ZV9vcl93YXJuKGNlLT5jZV9tb2RlLCBjZS0+bmFtZSkpCisJCXJldHVybjsKKwlzY2hlZHVsZV9kaXJfZm9yX3JlbW92YWwoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKTsKK30KZGlmZiAtLWdpdCBhL2Vudmlyb25tZW50LmMgYi9lbnZpcm9ubWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MmEwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9lbnZpcm9ubWVudC5jCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogV2UgcHV0IGFsbCB0aGUgZ2l0IGNvbmZpZyB2YXJpYWJsZXMgaW4gdGhpcyBzYW1lIG9iamVjdAorICogZmlsZSwgc28gdGhhdCBwcm9ncmFtcyBjYW4gbGluayBhZ2FpbnN0IHRoZSBjb25maWcgcGFyc2VyCisgKiB3aXRob3V0IGhhdmluZyB0byBsaW5rIGFnYWluc3QgYWxsIHRoZSByZXN0IG9mIGdpdC4KKyAqCisgKiBJbiBwYXJ0aWN1bGFyLCBubyBuZWVkIHRvIGJyaW5nIGluIGxpYnogZXRjIHVubGVzcyBuZWVkZWQsCisgKiBldmVuIGlmIHlvdSBtaWdodCB3YW50IHRvIGtub3cgd2hlcmUgdGhlIGdpdCBkaXJlY3RvcnkgZXRjCisgKiBhcmUuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZm10LW1lcmdlLW1zZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjaGRpci1ub3RpZnkuaCIKKworaW50IHRydXN0X2V4ZWN1dGFibGVfYml0ID0gMTsKK2ludCB0cnVzdF9jdGltZSA9IDE7CitpbnQgY2hlY2tfc3RhdCA9IDE7CitpbnQgaGFzX3N5bWxpbmtzID0gMTsKK2ludCBtaW5pbXVtX2FiYnJldiA9IDQsIGRlZmF1bHRfYWJicmV2ID0gLTE7CitpbnQgaWdub3JlX2Nhc2U7CitpbnQgYXNzdW1lX3VuY2hhbmdlZDsKK2ludCBwcmVmZXJfc3ltbGlua19yZWZzOworaW50IGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KK2ludCB3YXJuX2FtYmlndW91c19yZWZzID0gMTsKK2ludCB3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eSA9IDE7CitpbnQgcmVmX3BhcmFub2lhID0gLTE7CitpbnQgcmVwb3NpdG9yeV9mb3JtYXRfcHJlY2lvdXNfb2JqZWN0czsKK2ludCByZXBvc2l0b3J5X2Zvcm1hdF93b3JrdHJlZV9jb25maWc7Citjb25zdCBjaGFyICpnaXRfY29tbWl0X2VuY29kaW5nOworY29uc3QgY2hhciAqZ2l0X2xvZ19vdXRwdXRfZW5jb2Rpbmc7Citjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X3doaXRlc3BhY2U7Citjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2U7Citjb25zdCBjaGFyICpnaXRfYXR0cmlidXRlc19maWxlOworY29uc3QgY2hhciAqZ2l0X2hvb2tzX3BhdGg7CitpbnQgemxpYl9jb21wcmVzc2lvbl9sZXZlbCA9IFpfQkVTVF9TUEVFRDsKK2ludCBjb3JlX2NvbXByZXNzaW9uX2xldmVsOworaW50IHBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CitpbnQgZnN5bmNfb2JqZWN0X2ZpbGVzOworc2l6ZV90IHBhY2tlZF9naXRfd2luZG93X3NpemUgPSBERUZBVUxUX1BBQ0tFRF9HSVRfV0lORE9XX1NJWkU7CitzaXplX3QgcGFja2VkX2dpdF9saW1pdCA9IERFRkFVTFRfUEFDS0VEX0dJVF9MSU1JVDsKK3NpemVfdCBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0ID0gOTYgKiAxMDI0ICogMTAyNDsKK3Vuc2lnbmVkIGxvbmcgYmlnX2ZpbGVfdGhyZXNob2xkID0gNTEyICogMTAyNCAqIDEwMjQ7CitpbnQgcGFnZXJfdXNlX2NvbG9yID0gMTsKK2NvbnN0IGNoYXIgKmVkaXRvcl9wcm9ncmFtOworY29uc3QgY2hhciAqYXNrcGFzc19wcm9ncmFtOworY29uc3QgY2hhciAqZXhjbHVkZXNfZmlsZTsKK2VudW0gYXV0b19jcmxmIGF1dG9fY3JsZiA9IEFVVE9fQ1JMRl9GQUxTRTsKK2ludCByZWFkX3JlcGxhY2VfcmVmcyA9IDE7CitjaGFyICpnaXRfcmVwbGFjZV9yZWZfYmFzZTsKK2VudW0gZW9sIGNvcmVfZW9sID0gRU9MX1VOU0VUOworaW50IGdsb2JhbF9jb252X2ZsYWdzX2VvbCA9IENPTlZfRU9MX1JORFRSUF9XQVJOOworY2hhciAqY2hlY2tfcm91bmR0cmlwX2VuY29kaW5nID0gIlNISUZULUpJUyI7Cit1bnNpZ25lZCB3aGl0ZXNwYWNlX3J1bGVfY2ZnID0gV1NfREVGQVVMVF9SVUxFOworZW51bSBicmFuY2hfdHJhY2sgZ2l0X2JyYW5jaF90cmFjayA9IEJSQU5DSF9UUkFDS19SRU1PVEU7CitlbnVtIHJlYmFzZV9zZXR1cF90eXBlIGF1dG9yZWJhc2UgPSBBVVRPUkVCQVNFX05FVkVSOworZW51bSBwdXNoX2RlZmF1bHRfdHlwZSBwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQ7CisjaWZuZGVmIE9CSkVDVF9DUkVBVElPTl9NT0RFCisjZGVmaW5lIE9CSkVDVF9DUkVBVElPTl9NT0RFIE9CSkVDVF9DUkVBVElPTl9VU0VTX0hBUkRMSU5LUworI2VuZGlmCitlbnVtIG9iamVjdF9jcmVhdGlvbl9tb2RlIG9iamVjdF9jcmVhdGlvbl9tb2RlID0gT0JKRUNUX0NSRUFUSU9OX01PREU7CitjaGFyICpub3Rlc19yZWZfbmFtZTsKK2ludCBncmFmdHNfcmVwbGFjZV9wYXJlbnRzID0gMTsKK2ludCBjb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dDsKK2ludCBjb3JlX3NwYXJzZV9jaGVja291dF9jb25lOworaW50IG1lcmdlX2xvZ19jb25maWcgPSAtMTsKK2ludCBwcmVjb21wb3NlZF91bmljb2RlID0gLTE7IC8qIHNlZSBwcm9iZV91dGY4X3BhdGhuYW1lX2NvbXBvc2l0aW9uKCkgKi8KK3Vuc2lnbmVkIGxvbmcgcGFja19zaXplX2xpbWl0X2NmZzsKK2VudW0gbG9nX3JlZnNfY29uZmlnIGxvZ19hbGxfcmVmX3VwZGF0ZXMgPSBMT0dfUkVGU19VTlNFVDsKKworI2lmbmRlZiBQUk9URUNUX0hGU19ERUZBVUxUCisjZGVmaW5lIFBST1RFQ1RfSEZTX0RFRkFVTFQgMAorI2VuZGlmCitpbnQgcHJvdGVjdF9oZnMgPSBQUk9URUNUX0hGU19ERUZBVUxUOworCisjaWZuZGVmIFBST1RFQ1RfTlRGU19ERUZBVUxUCisjZGVmaW5lIFBST1RFQ1RfTlRGU19ERUZBVUxUIDEKKyNlbmRpZgoraW50IHByb3RlY3RfbnRmcyA9IFBST1RFQ1RfTlRGU19ERUZBVUxUOworY29uc3QgY2hhciAqY29yZV9mc21vbml0b3I7CisKKy8qCisgKiBUaGUgY2hhcmFjdGVyIHRoYXQgYmVnaW5zIGEgY29tbWVudGVkIGxpbmUgaW4gdXNlci1lZGl0YWJsZSBmaWxlCisgKiB0aGF0IGlzIHN1YmplY3QgdG8gc3RyaXBzcGFjZS4KKyAqLworY2hhciBjb21tZW50X2xpbmVfY2hhciA9ICcjJzsKK2ludCBhdXRvX2NvbW1lbnRfbGluZV9jaGFyOworCisvKiBQYXJhbGxlbCBpbmRleCBzdGF0IGRhdGEgcHJlbG9hZD8gKi8KK2ludCBjb3JlX3ByZWxvYWRfaW5kZXggPSAxOworCisvKgorICogVGhpcyBpcyBhIGhhY2sgZm9yIHRlc3QgcHJvZ3JhbXMgbGlrZSB0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlIHRvCisgKiBlbnN1cmUgdGhhdCB0aGV5IGRvIG5vdCBtb2RpZnkgdGhlIHVudHJhY2tlZCBjYWNoZSB3aGVuIHJlYWRpbmcgaXQuCisgKiBEbyBub3QgdXNlIGl0IG90aGVyd2lzZSEKKyAqLworaW50IGlnbm9yZV91bnRyYWNrZWRfY2FjaGVfY29uZmlnOworCisvKiBUaGlzIGlzIHNldCBieSBzZXR1cF9naXRfZGlyX2dlbnRseSgpIGFuZC9vciBnaXRfZGVmYXVsdF9jb25maWcoKSAqLworY2hhciAqZ2l0X3dvcmtfdHJlZV9jZmc7CisKK3N0YXRpYyBjaGFyICpnaXRfbmFtZXNwYWNlOworCitzdGF0aWMgY2hhciAqc3VwZXJfcHJlZml4OworCisvKgorICogUmVwb3NpdG9yeS1sb2NhbCBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IHNlZSBjYWNoZS5oIGZvciBkZXRhaWxzLgorICovCitjb25zdCBjaGFyICogY29uc3QgbG9jYWxfcmVwb19lbnZbXSA9IHsKKwlBTFRFUk5BVEVfREJfRU5WSVJPTk1FTlQsCisJQ09ORklHX0VOVklST05NRU5ULAorCUNPTkZJR19EQVRBX0VOVklST05NRU5ULAorCURCX0VOVklST05NRU5ULAorCUdJVF9ESVJfRU5WSVJPTk1FTlQsCisJR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwKKwlHSVRfSU1QTElDSVRfV09SS19UUkVFX0VOVklST05NRU5ULAorCUdSQUZUX0VOVklST05NRU5ULAorCUlOREVYX0VOVklST05NRU5ULAorCU5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCwKKwlHSVRfUkVQTEFDRV9SRUZfQkFTRV9FTlZJUk9OTUVOVCwKKwlHSVRfUFJFRklYX0VOVklST05NRU5ULAorCUdJVF9TVVBFUl9QUkVGSVhfRU5WSVJPTk1FTlQsCisJR0lUX1NIQUxMT1dfRklMRV9FTlZJUk9OTUVOVCwKKwlHSVRfQ09NTU9OX0RJUl9FTlZJUk9OTUVOVCwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhciAqZXhwYW5kX25hbWVzcGFjZShjb25zdCBjaGFyICpyYXdfbmFtZXNwYWNlKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqKmNvbXBvbmVudHMsICoqYzsKKworCWlmICghcmF3X25hbWVzcGFjZSB8fCAhKnJhd19uYW1lc3BhY2UpCisJCXJldHVybiB4c3RyZHVwKCIiKTsKKworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmF3X25hbWVzcGFjZSk7CisJY29tcG9uZW50cyA9IHN0cmJ1Zl9zcGxpdCgmYnVmLCAnLycpOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlmb3IgKGMgPSBjb21wb25lbnRzOyAqYzsgYysrKQorCQlpZiAoc3RyY21wKCgqYyktPmJ1ZiwgIi8iKSAhPSAwKQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvbmFtZXNwYWNlcy8lcyIsICgqYyktPmJ1Zik7CisJc3RyYnVmX2xpc3RfZnJlZShjb21wb25lbnRzKTsKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoYnVmLmJ1ZiwgMCkpCisJCWRpZShfKCJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIpLCByYXdfbmFtZXNwYWNlKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworLyoKKyAqIFdyYXBwZXIgb2YgZ2V0ZW52KCkgdGhhdCByZXR1cm5zIGEgc3RyZHVwIHZhbHVlLiBUaGlzIHZhbHVlIGlzIGtlcHQKKyAqIGluIGFyZ3YgdG8gYmUgZnJlZWQgbGF0ZXIuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpnZXRlbnZfc2FmZShzdHJ1Y3QgYXJndl9hcnJheSAqYXJndiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IGdldGVudihuYW1lKTsKKworCWlmICghdmFsdWUpCisJCXJldHVybiBOVUxMOworCisJYXJndl9hcnJheV9wdXNoKGFyZ3YsIHZhbHVlKTsKKwlyZXR1cm4gYXJndi0+YXJndlthcmd2LT5hcmdjIC0gMV07Cit9CisKK3ZvaWQgc2V0dXBfZ2l0X2Vudihjb25zdCBjaGFyICpnaXRfZGlyKQoreworCWNvbnN0IGNoYXIgKnNoYWxsb3dfZmlsZTsKKwljb25zdCBjaGFyICpyZXBsYWNlX3JlZl9iYXNlOworCXN0cnVjdCBzZXRfZ2l0ZGlyX2FyZ3MgYXJncyA9IHsgTlVMTCB9OworCXN0cnVjdCBhcmd2X2FycmF5IHRvX2ZyZWUgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlhcmdzLmNvbW1vbmRpciA9IGdldGVudl9zYWZlKCZ0b19mcmVlLCBHSVRfQ09NTU9OX0RJUl9FTlZJUk9OTUVOVCk7CisJYXJncy5vYmplY3RfZGlyID0gZ2V0ZW52X3NhZmUoJnRvX2ZyZWUsIERCX0VOVklST05NRU5UKTsKKwlhcmdzLmdyYWZ0X2ZpbGUgPSBnZXRlbnZfc2FmZSgmdG9fZnJlZSwgR1JBRlRfRU5WSVJPTk1FTlQpOworCWFyZ3MuaW5kZXhfZmlsZSA9IGdldGVudl9zYWZlKCZ0b19mcmVlLCBJTkRFWF9FTlZJUk9OTUVOVCk7CisJYXJncy5hbHRlcm5hdGVfZGIgPSBnZXRlbnZfc2FmZSgmdG9fZnJlZSwgQUxURVJOQVRFX0RCX0VOVklST05NRU5UKTsKKwlyZXBvX3NldF9naXRkaXIodGhlX3JlcG9zaXRvcnksIGdpdF9kaXIsICZhcmdzKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZ0b19mcmVlKTsKKworCWlmIChnZXRlbnYoTk9fUkVQTEFDRV9PQkpFQ1RTX0VOVklST05NRU5UKSkKKwkJcmVhZF9yZXBsYWNlX3JlZnMgPSAwOworCXJlcGxhY2VfcmVmX2Jhc2UgPSBnZXRlbnYoR0lUX1JFUExBQ0VfUkVGX0JBU0VfRU5WSVJPTk1FTlQpOworCWZyZWUoZ2l0X3JlcGxhY2VfcmVmX2Jhc2UpOworCWdpdF9yZXBsYWNlX3JlZl9iYXNlID0geHN0cmR1cChyZXBsYWNlX3JlZl9iYXNlID8gcmVwbGFjZV9yZWZfYmFzZQorCQkJCQkJCSAgOiAicmVmcy9yZXBsYWNlLyIpOworCWZyZWUoZ2l0X25hbWVzcGFjZSk7CisJZ2l0X25hbWVzcGFjZSA9IGV4cGFuZF9uYW1lc3BhY2UoZ2V0ZW52KEdJVF9OQU1FU1BBQ0VfRU5WSVJPTk1FTlQpKTsKKwlzaGFsbG93X2ZpbGUgPSBnZXRlbnYoR0lUX1NIQUxMT1dfRklMRV9FTlZJUk9OTUVOVCk7CisJaWYgKHNoYWxsb3dfZmlsZSkKKwkJc2V0X2FsdGVybmF0ZV9zaGFsbG93X2ZpbGUodGhlX3JlcG9zaXRvcnksIHNoYWxsb3dfZmlsZSwgMCk7Cit9CisKK2ludCBpc19iYXJlX3JlcG9zaXRvcnkodm9pZCkKK3sKKwkvKiBpZiBjb3JlLmJhcmUgaXMgbm90ICdmYWxzZScsIGxldCdzIHNlZSBpZiB0aGVyZSBpcyBhIHdvcmsgdHJlZSAqLworCXJldHVybiBpc19iYXJlX3JlcG9zaXRvcnlfY2ZnICYmICFnZXRfZ2l0X3dvcmtfdHJlZSgpOworfQorCitpbnQgaGF2ZV9naXRfZGlyKHZvaWQpCit7CisJcmV0dXJuIHN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5CisJCXx8IHRoZV9yZXBvc2l0b3J5LT5naXRkaXI7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfZGlyKHZvaWQpCit7CisJaWYgKCF0aGVfcmVwb3NpdG9yeS0+Z2l0ZGlyKQorCQlCVUcoImdpdCBlbnZpcm9ubWVudCBoYXNuJ3QgYmVlbiBzZXR1cCIpOworCXJldHVybiB0aGVfcmVwb3NpdG9yeS0+Z2l0ZGlyOworfQorCitjb25zdCBjaGFyICpnZXRfZ2l0X2NvbW1vbl9kaXIodm9pZCkKK3sKKwlpZiAoIXRoZV9yZXBvc2l0b3J5LT5jb21tb25kaXIpCisJCUJVRygiZ2l0IGVudmlyb25tZW50IGhhc24ndCBiZWVuIHNldHVwIik7CisJcmV0dXJuIHRoZV9yZXBvc2l0b3J5LT5jb21tb25kaXI7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfbmFtZXNwYWNlKHZvaWQpCit7CisJaWYgKCFnaXRfbmFtZXNwYWNlKQorCQlCVUcoImdpdCBlbnZpcm9ubWVudCBoYXNuJ3QgYmVlbiBzZXR1cCIpOworCXJldHVybiBnaXRfbmFtZXNwYWNlOworfQorCitjb25zdCBjaGFyICpzdHJpcF9uYW1lc3BhY2UoY29uc3QgY2hhciAqbmFtZXNwYWNlZF9yZWYpCit7CisJY29uc3QgY2hhciAqb3V0OworCWlmIChza2lwX3ByZWZpeChuYW1lc3BhY2VkX3JlZiwgZ2V0X2dpdF9uYW1lc3BhY2UoKSwgJm91dCkpCisJCXJldHVybiBvdXQ7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9zdXBlcl9wcmVmaXgodm9pZCkKK3sKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkOworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJc3VwZXJfcHJlZml4ID0geHN0cmR1cF9vcl9udWxsKGdldGVudihHSVRfU1VQRVJfUFJFRklYX0VOVklST05NRU5UKSk7CisJCWluaXRpYWxpemVkID0gMTsKKwl9CisJcmV0dXJuIHN1cGVyX3ByZWZpeDsKK30KKworc3RhdGljIGludCBnaXRfd29ya190cmVlX2luaXRpYWxpemVkOworCisvKgorICogTm90ZS4gIFRoaXMgd29ya3Mgb25seSBiZWZvcmUgeW91IHVzZWQgYSB3b3JrIHRyZWUuICBUaGlzIHdhcyBhZGRlZAorICogcHJpbWFyaWx5IHRvIHN1cHBvcnQgZ2l0LWNsb25lIHRvIHdvcmsgaW4gYSBuZXcgcmVwb3NpdG9yeSBpdCBqdXN0CisgKiBjcmVhdGVkLCBhbmQgaXMgbm90IG1lYW50IHRvIGZsaXAgYmV0d2VlbiBkaWZmZXJlbnQgd29yayB0cmVlcy4KKyAqLwordm9pZCBzZXRfZ2l0X3dvcmtfdHJlZShjb25zdCBjaGFyICpuZXdfd29ya190cmVlKQoreworCWlmIChnaXRfd29ya190cmVlX2luaXRpYWxpemVkKSB7CisJCW5ld193b3JrX3RyZWUgPSByZWFsX3BhdGgobmV3X3dvcmtfdHJlZSk7CisJCWlmIChzdHJjbXAobmV3X3dvcmtfdHJlZSwgdGhlX3JlcG9zaXRvcnktPndvcmt0cmVlKSkKKwkJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IHdvcmsgdHJlZSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIgorCQkJICAgICJDdXJyZW50IHdvcmt0cmVlOiAlc1xuTmV3IHdvcmt0cmVlOiAlcyIsCisJCQkgICAgdGhlX3JlcG9zaXRvcnktPndvcmt0cmVlLCBuZXdfd29ya190cmVlKTsKKwkJcmV0dXJuOworCX0KKwlnaXRfd29ya190cmVlX2luaXRpYWxpemVkID0gMTsKKwlyZXBvX3NldF93b3JrdHJlZSh0aGVfcmVwb3NpdG9yeSwgbmV3X3dvcmtfdHJlZSk7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfd29ya190cmVlKHZvaWQpCit7CisJcmV0dXJuIHRoZV9yZXBvc2l0b3J5LT53b3JrdHJlZTsKK30KKworY2hhciAqZ2V0X29iamVjdF9kaXJlY3Rvcnkodm9pZCkKK3sKKwlpZiAoIXRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGIpCisJCUJVRygiZ2l0IGVudmlyb25tZW50IGhhc24ndCBiZWVuIHNldHVwIik7CisJcmV0dXJuIHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGItPnBhdGg7Cit9CisKK2ludCBvZGJfbWtzdGVtcChzdHJ1Y3Qgc3RyYnVmICp0ZW1wX2ZpbGVuYW1lLCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWludCBmZDsKKwkvKgorCSAqIHdlIGxldCB0aGUgdW1hc2sgZG8gaXRzIGpvYiwgZG9uJ3QgdHJ5IHRvIGJlIG1vcmUKKwkgKiByZXN0cmljdGl2ZSBleGNlcHQgdG8gcmVtb3ZlIHdyaXRlIHBlcm1pc3Npb24uCisJICovCisJaW50IG1vZGUgPSAwNDQ0OworCWdpdF9wYXRoX2J1Zih0ZW1wX2ZpbGVuYW1lLCAib2JqZWN0cy8lcyIsIHBhdHRlcm4pOworCWZkID0gZ2l0X21rc3RlbXBfbW9kZSh0ZW1wX2ZpbGVuYW1lLT5idWYsIG1vZGUpOworCWlmICgwIDw9IGZkKQorCQlyZXR1cm4gZmQ7CisKKwkvKiBzbG93IHBhdGggKi8KKwkvKiBzb21lIG1rc3RlbXAgaW1wbGVtZW50YXRpb25zIGVyYXNlIHRlbXBfZmlsZW5hbWUgb24gZmFpbHVyZSAqLworCWdpdF9wYXRoX2J1Zih0ZW1wX2ZpbGVuYW1lLCAib2JqZWN0cy8lcyIsIHBhdHRlcm4pOworCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXModGVtcF9maWxlbmFtZS0+YnVmKTsKKwlyZXR1cm4geG1rc3RlbXBfbW9kZSh0ZW1wX2ZpbGVuYW1lLT5idWYsIG1vZGUpOworfQorCitpbnQgb2RiX3BhY2tfa2VlcChjb25zdCBjaGFyICpuYW1lKQoreworCWludCBmZDsKKworCWZkID0gb3BlbihuYW1lLCBPX1JEV1J8T19DUkVBVHxPX0VYQ0wsIDA2MDApOworCWlmICgwIDw9IGZkKQorCQlyZXR1cm4gZmQ7CisKKwkvKiBzbG93IHBhdGggKi8KKwlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KG5hbWUpOworCXJldHVybiBvcGVuKG5hbWUsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTCwgMDYwMCk7Cit9CisKK2NoYXIgKmdldF9pbmRleF9maWxlKHZvaWQpCit7CisJaWYgKCF0aGVfcmVwb3NpdG9yeS0+aW5kZXhfZmlsZSkKKwkJQlVHKCJnaXQgZW52aXJvbm1lbnQgaGFzbid0IGJlZW4gc2V0dXAiKTsKKwlyZXR1cm4gdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGU7Cit9CisKK2NoYXIgKmdldF9ncmFmdF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWlmICghci0+Z3JhZnRfZmlsZSkKKwkJQlVHKCJnaXQgZW52aXJvbm1lbnQgaGFzbid0IGJlZW4gc2V0dXAiKTsKKwlyZXR1cm4gci0+Z3JhZnRfZmlsZTsKK30KKworc3RhdGljIHZvaWQgc2V0X2dpdF9kaXJfMShjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgcGF0aCwgMSkpCisJCWRpZShfKCJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIpLCBwYXRoKTsKKwlzZXR1cF9naXRfZW52KHBhdGgpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmVsYXRpdmVfZ2l0ZGlyKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqb2xkX2N3ZCwKKwkJCQkgICBjb25zdCBjaGFyICpuZXdfY3dkLAorCQkJCSAgIHZvaWQgKmRhdGEpCit7CisJY2hhciAqcGF0aCA9IHJlcGFyZW50X3JlbGF0aXZlX3BhdGgob2xkX2N3ZCwgbmV3X2N3ZCwgZ2V0X2dpdF9kaXIoKSk7CisJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2Vfc2V0dXBfa2V5LAorCQkJICJzZXR1cDogbW92ZSAkR0lUX0RJUiB0byAnJXMnIiwKKwkJCSBwYXRoKTsKKwlzZXRfZ2l0X2Rpcl8xKHBhdGgpOworCWZyZWUocGF0aCk7Cit9CisKK3ZvaWQgc2V0X2dpdF9kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzZXRfZ2l0X2Rpcl8xKHBhdGgpOworCWlmICghaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKKwkJY2hkaXJfbm90aWZ5X3JlZ2lzdGVyKE5VTEwsIHVwZGF0ZV9yZWxhdGl2ZV9naXRkaXIsIE5VTEwpOworfQorCitjb25zdCBjaGFyICpnZXRfbG9nX291dHB1dF9lbmNvZGluZyh2b2lkKQoreworCXJldHVybiBnaXRfbG9nX291dHB1dF9lbmNvZGluZyA/IGdpdF9sb2dfb3V0cHV0X2VuY29kaW5nCisJCTogZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKK30KKworY29uc3QgY2hhciAqZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2Rpbmcodm9pZCkKK3sKKwlyZXR1cm4gZ2l0X2NvbW1pdF9lbmNvZGluZyA/IGdpdF9jb21taXRfZW5jb2RpbmcgOiAiVVRGLTgiOworfQorCitzdGF0aWMgaW50IHRoZV9zaGFyZWRfcmVwb3NpdG9yeSA9IFBFUk1fVU1BU0s7CitzdGF0aWMgaW50IG5lZWRfc2hhcmVkX3JlcG9zaXRvcnlfZnJvbV9jb25maWcgPSAxOworCit2b2lkIHNldF9zaGFyZWRfcmVwb3NpdG9yeShpbnQgdmFsdWUpCit7CisJdGhlX3NoYXJlZF9yZXBvc2l0b3J5ID0gdmFsdWU7CisJbmVlZF9zaGFyZWRfcmVwb3NpdG9yeV9mcm9tX2NvbmZpZyA9IDA7Cit9CisKK2ludCBnZXRfc2hhcmVkX3JlcG9zaXRvcnkodm9pZCkKK3sKKwlpZiAobmVlZF9zaGFyZWRfcmVwb3NpdG9yeV9mcm9tX2NvbmZpZykgeworCQljb25zdCBjaGFyICp2YXIgPSAiY29yZS5zaGFyZWRyZXBvc2l0b3J5IjsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUodmFyLCAmdmFsdWUpKQorCQkJdGhlX3NoYXJlZF9yZXBvc2l0b3J5ID0gZ2l0X2NvbmZpZ19wZXJtKHZhciwgdmFsdWUpOworCQluZWVkX3NoYXJlZF9yZXBvc2l0b3J5X2Zyb21fY29uZmlnID0gMDsKKwl9CisJcmV0dXJuIHRoZV9zaGFyZWRfcmVwb3NpdG9yeTsKK30KKwordm9pZCByZXNldF9zaGFyZWRfcmVwb3NpdG9yeSh2b2lkKQoreworCW5lZWRfc2hhcmVkX3JlcG9zaXRvcnlfZnJvbV9jb25maWcgPSAxOworfQorCitpbnQgdXNlX29wdGlvbmFsX2xvY2tzKHZvaWQpCit7CisJcmV0dXJuIGdpdF9lbnZfYm9vbChHSVRfT1BUSU9OQUxfTE9DS1NfRU5WSVJPTk1FTlQsIDEpOworfQorCitpbnQgcHJpbnRfc2hhMV9lbGxpcHNpcyh2b2lkKQoreworCS8qCisJICogRGV0ZXJtaW5lIGlmIHRoZSBjYWxsaW5nIGVudmlyb25tZW50IGNvbnRhaW5zIHRoZSB2YXJpYWJsZQorCSAqIEdJVF9QUklOVF9TSEExX0VMTElQU0lTIHNldCB0byAieWVzIi4KKwkgKi8KKwlzdGF0aWMgaW50IGNhY2hlZF9yZXN1bHQgPSAtMTsgLyogdW5rbm93biAqLworCisJaWYgKGNhY2hlZF9yZXN1bHQgPCAwKSB7CisJCWNvbnN0IGNoYXIgKnYgPSBnZXRlbnYoIkdJVF9QUklOVF9TSEExX0VMTElQU0lTIik7CisJCWNhY2hlZF9yZXN1bHQgPSAodiAmJiAhc3RyY2FzZWNtcCh2LCAieWVzIikpOworCX0KKwlyZXR1cm4gY2FjaGVkX3Jlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2V3YWgvYml0bWFwLmMgYi9ld2FoL2JpdG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2VjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9ld2FoL2JpdG1hcC5jCkBAIC0wLDAgKzEsMTkzIEBACisvKioKKyAqIENvcHlyaWdodCAyMDEzLCBHaXRIdWIsIEluYworICogQ29weXJpZ2h0IDIwMDktMjAxMywgRGFuaWVsIExlbWlyZSwgQ2xpZmYgTW9vbiwKKyAqCURhdmlkIE1jSW50b3NoLCBSb2JlcnQgQmVjaG8sIEdvb2dsZSBJbmMuIGFuZCBWZXJvbmlrYSBaZW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJld29rLmgiCisKKyNkZWZpbmUgRVdBSF9NQVNLKHgpICgoZXdvcmRfdCkxIDw8ICh4ICUgQklUU19JTl9FV09SRCkpCisjZGVmaW5lIEVXQUhfQkxPQ0soeCkgKHggLyBCSVRTX0lOX0VXT1JEKQorCitzdHJ1Y3QgYml0bWFwICpiaXRtYXBfd29yZF9hbGxvYyhzaXplX3Qgd29yZF9hbGxvYykKK3sKKwlzdHJ1Y3QgYml0bWFwICpiaXRtYXAgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgYml0bWFwKSk7CisJYml0bWFwLT53b3JkcyA9IHhjYWxsb2Mod29yZF9hbGxvYywgc2l6ZW9mKGV3b3JkX3QpKTsKKwliaXRtYXAtPndvcmRfYWxsb2MgPSB3b3JkX2FsbG9jOworCXJldHVybiBiaXRtYXA7Cit9CisKK3N0cnVjdCBiaXRtYXAgKmJpdG1hcF9uZXcodm9pZCkKK3sKKwlyZXR1cm4gYml0bWFwX3dvcmRfYWxsb2MoMzIpOworfQorCit2b2lkIGJpdG1hcF9zZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc2l6ZV90IHBvcykKK3sKKwlzaXplX3QgYmxvY2sgPSBFV0FIX0JMT0NLKHBvcyk7CisKKwlpZiAoYmxvY2sgPj0gc2VsZi0+d29yZF9hbGxvYykgeworCQlzaXplX3Qgb2xkX3NpemUgPSBzZWxmLT53b3JkX2FsbG9jOworCQlzZWxmLT53b3JkX2FsbG9jID0gYmxvY2sgPyBibG9jayAqIDIgOiAxOworCQlSRUFMTE9DX0FSUkFZKHNlbGYtPndvcmRzLCBzZWxmLT53b3JkX2FsbG9jKTsKKwkJbWVtc2V0KHNlbGYtPndvcmRzICsgb2xkX3NpemUsIDB4MCwKKwkJCShzZWxmLT53b3JkX2FsbG9jIC0gb2xkX3NpemUpICogc2l6ZW9mKGV3b3JkX3QpKTsKKwl9CisKKwlzZWxmLT53b3Jkc1tibG9ja10gfD0gRVdBSF9NQVNLKHBvcyk7Cit9CisKK3ZvaWQgYml0bWFwX3Vuc2V0KHN0cnVjdCBiaXRtYXAgKnNlbGYsIHNpemVfdCBwb3MpCit7CisJc2l6ZV90IGJsb2NrID0gRVdBSF9CTE9DSyhwb3MpOworCisJaWYgKGJsb2NrIDwgc2VsZi0+d29yZF9hbGxvYykKKwkJc2VsZi0+d29yZHNbYmxvY2tdICY9IH5FV0FIX01BU0socG9zKTsKK30KKworaW50IGJpdG1hcF9nZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc2l6ZV90IHBvcykKK3sKKwlzaXplX3QgYmxvY2sgPSBFV0FIX0JMT0NLKHBvcyk7CisJcmV0dXJuIGJsb2NrIDwgc2VsZi0+d29yZF9hbGxvYyAmJgorCQkoc2VsZi0+d29yZHNbYmxvY2tdICYgRVdBSF9NQVNLKHBvcykpICE9IDA7Cit9CisKK3N0cnVjdCBld2FoX2JpdG1hcCAqYml0bWFwX3RvX2V3YWgoc3RydWN0IGJpdG1hcCAqYml0bWFwKQoreworCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaCA9IGV3YWhfbmV3KCk7CisJc2l6ZV90IGksIHJ1bm5pbmdfZW1wdHlfd29yZHMgPSAwOworCWV3b3JkX3QgbGFzdF93b3JkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBiaXRtYXAtPndvcmRfYWxsb2M7ICsraSkgeworCQlpZiAoYml0bWFwLT53b3Jkc1tpXSA9PSAwKSB7CisJCQlydW5uaW5nX2VtcHR5X3dvcmRzKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsYXN0X3dvcmQgIT0gMCkKKwkJCWV3YWhfYWRkKGV3YWgsIGxhc3Rfd29yZCk7CisKKwkJaWYgKHJ1bm5pbmdfZW1wdHlfd29yZHMgPiAwKSB7CisJCQlld2FoX2FkZF9lbXB0eV93b3Jkcyhld2FoLCAwLCBydW5uaW5nX2VtcHR5X3dvcmRzKTsKKwkJCXJ1bm5pbmdfZW1wdHlfd29yZHMgPSAwOworCQl9CisKKwkJbGFzdF93b3JkID0gYml0bWFwLT53b3Jkc1tpXTsKKwl9CisKKwlld2FoX2FkZChld2FoLCBsYXN0X3dvcmQpOworCXJldHVybiBld2FoOworfQorCitzdHJ1Y3QgYml0bWFwICpld2FoX3RvX2JpdG1hcChzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWgpCit7CisJc3RydWN0IGJpdG1hcCAqYml0bWFwID0gYml0bWFwX25ldygpOworCXN0cnVjdCBld2FoX2l0ZXJhdG9yIGl0OworCWV3b3JkX3QgYmxvd3VwOworCXNpemVfdCBpID0gMDsKKworCWV3YWhfaXRlcmF0b3JfaW5pdCgmaXQsIGV3YWgpOworCisJd2hpbGUgKGV3YWhfaXRlcmF0b3JfbmV4dCgmYmxvd3VwLCAmaXQpKSB7CisJCUFMTE9DX0dST1coYml0bWFwLT53b3JkcywgaSArIDEsIGJpdG1hcC0+d29yZF9hbGxvYyk7CisJCWJpdG1hcC0+d29yZHNbaSsrXSA9IGJsb3d1cDsKKwl9CisKKwliaXRtYXAtPndvcmRfYWxsb2MgPSBpOworCXJldHVybiBiaXRtYXA7Cit9CisKK3ZvaWQgYml0bWFwX2FuZF9ub3Qoc3RydWN0IGJpdG1hcCAqc2VsZiwgc3RydWN0IGJpdG1hcCAqb3RoZXIpCit7CisJY29uc3Qgc2l6ZV90IGNvdW50ID0gKHNlbGYtPndvcmRfYWxsb2MgPCBvdGhlci0+d29yZF9hbGxvYykgPworCQlzZWxmLT53b3JkX2FsbG9jIDogb3RoZXItPndvcmRfYWxsb2M7CisKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQorCQlzZWxmLT53b3Jkc1tpXSAmPSB+b3RoZXItPndvcmRzW2ldOworfQorCit2b2lkIGJpdG1hcF9vcl9ld2FoKHN0cnVjdCBiaXRtYXAgKnNlbGYsIHN0cnVjdCBld2FoX2JpdG1hcCAqb3RoZXIpCit7CisJc2l6ZV90IG9yaWdpbmFsX3NpemUgPSBzZWxmLT53b3JkX2FsbG9jOworCXNpemVfdCBvdGhlcl9maW5hbCA9IChvdGhlci0+Yml0X3NpemUgLyBCSVRTX0lOX0VXT1JEKSArIDE7CisJc2l6ZV90IGkgPSAwOworCXN0cnVjdCBld2FoX2l0ZXJhdG9yIGl0OworCWV3b3JkX3Qgd29yZDsKKworCWlmIChzZWxmLT53b3JkX2FsbG9jIDwgb3RoZXJfZmluYWwpIHsKKwkJc2VsZi0+d29yZF9hbGxvYyA9IG90aGVyX2ZpbmFsOworCQlSRUFMTE9DX0FSUkFZKHNlbGYtPndvcmRzLCBzZWxmLT53b3JkX2FsbG9jKTsKKwkJbWVtc2V0KHNlbGYtPndvcmRzICsgb3JpZ2luYWxfc2l6ZSwgMHgwLAorCQkJKHNlbGYtPndvcmRfYWxsb2MgLSBvcmlnaW5hbF9zaXplKSAqIHNpemVvZihld29yZF90KSk7CisJfQorCisJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgb3RoZXIpOworCisJd2hpbGUgKGV3YWhfaXRlcmF0b3JfbmV4dCgmd29yZCwgJml0KSkKKwkJc2VsZi0+d29yZHNbaSsrXSB8PSB3b3JkOworfQorCitzaXplX3QgYml0bWFwX3BvcGNvdW50KHN0cnVjdCBiaXRtYXAgKnNlbGYpCit7CisJc2l6ZV90IGksIGNvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzZWxmLT53b3JkX2FsbG9jOyArK2kpCisJCWNvdW50ICs9IGV3YWhfYml0X3BvcGNvdW50NjQoc2VsZi0+d29yZHNbaV0pOworCisJcmV0dXJuIGNvdW50OworfQorCitpbnQgYml0bWFwX2VxdWFscyhzdHJ1Y3QgYml0bWFwICpzZWxmLCBzdHJ1Y3QgYml0bWFwICpvdGhlcikKK3sKKwlzdHJ1Y3QgYml0bWFwICpiaWcsICpzbWFsbDsKKwlzaXplX3QgaTsKKworCWlmIChzZWxmLT53b3JkX2FsbG9jIDwgb3RoZXItPndvcmRfYWxsb2MpIHsKKwkJc21hbGwgPSBzZWxmOworCQliaWcgPSBvdGhlcjsKKwl9IGVsc2UgeworCQlzbWFsbCA9IG90aGVyOworCQliaWcgPSBzZWxmOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzbWFsbC0+d29yZF9hbGxvYzsgKytpKSB7CisJCWlmIChzbWFsbC0+d29yZHNbaV0gIT0gYmlnLT53b3Jkc1tpXSkKKwkJCXJldHVybiAwOworCX0KKworCWZvciAoOyBpIDwgYmlnLT53b3JkX2FsbG9jOyArK2kpIHsKKwkJaWYgKGJpZy0+d29yZHNbaV0gIT0gMCkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCit2b2lkIGJpdG1hcF9yZXNldChzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJbWVtc2V0KGJpdG1hcC0+d29yZHMsIDB4MCwgYml0bWFwLT53b3JkX2FsbG9jICogc2l6ZW9mKGV3b3JkX3QpKTsKK30KKwordm9pZCBiaXRtYXBfZnJlZShzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJaWYgKGJpdG1hcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmcmVlKGJpdG1hcC0+d29yZHMpOworCWZyZWUoYml0bWFwKTsKK30KZGlmZiAtLWdpdCBhL2V3YWgvZXdhaF9iaXRtYXAuYyBiL2V3YWgvZXdhaF9iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTliMWFmCi0tLSAvZGV2L251bGwKKysrIGIvZXdhaC9ld2FoX2JpdG1hcC5jCkBAIC0wLDAgKzEsNDg0IEBACisvKioKKyAqIENvcHlyaWdodCAyMDEzLCBHaXRIdWIsIEluYworICogQ29weXJpZ2h0IDIwMDktMjAxMywgRGFuaWVsIExlbWlyZSwgQ2xpZmYgTW9vbiwKKyAqCURhdmlkIE1jSW50b3NoLCBSb2JlcnQgQmVjaG8sIEdvb2dsZSBJbmMuIGFuZCBWZXJvbmlrYSBaZW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZXdvay5oIgorI2luY2x1ZGUgImV3b2tfcmx3LmgiCisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IG1pbl9zaXplKHNpemVfdCBhLCBzaXplX3QgYikKK3sKKwlyZXR1cm4gYSA8IGIgPyBhIDogYjsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgbWF4X3NpemUoc2l6ZV90IGEsIHNpemVfdCBiKQoreworCXJldHVybiBhID4gYiA/IGEgOiBiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2dyb3coc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBzaXplX3QgbmV3X3NpemUpCit7CisJc2l6ZV90IHJsd19vZmZzZXQgPSAodWludDhfdCAqKXNlbGYtPnJsdyAtICh1aW50OF90ICopc2VsZi0+YnVmZmVyOworCisJaWYgKHNlbGYtPmFsbG9jX3NpemUgPj0gbmV3X3NpemUpCisJCXJldHVybjsKKworCXNlbGYtPmFsbG9jX3NpemUgPSBuZXdfc2l6ZTsKKwlSRUFMTE9DX0FSUkFZKHNlbGYtPmJ1ZmZlciwgc2VsZi0+YWxsb2Nfc2l6ZSk7CisJc2VsZi0+cmx3ID0gc2VsZi0+YnVmZmVyICsgKHJsd19vZmZzZXQgLyBzaXplb2YoZXdvcmRfdCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX3B1c2goc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBld29yZF90IHZhbHVlKQoreworCWlmIChzZWxmLT5idWZmZXJfc2l6ZSArIDEgPj0gc2VsZi0+YWxsb2Nfc2l6ZSkKKwkJYnVmZmVyX2dyb3coc2VsZiwgc2VsZi0+YnVmZmVyX3NpemUgKiAzIC8gMik7CisKKwlzZWxmLT5idWZmZXJbc2VsZi0+YnVmZmVyX3NpemUrK10gPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX3B1c2hfcmx3KHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgZXdvcmRfdCB2YWx1ZSkKK3sKKwlidWZmZXJfcHVzaChzZWxmLCB2YWx1ZSk7CisJc2VsZi0+cmx3ID0gc2VsZi0+YnVmZmVyICsgc2VsZi0+YnVmZmVyX3NpemUgLSAxOworfQorCitzdGF0aWMgc2l6ZV90IGFkZF9lbXB0eV93b3JkcyhzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCB2LCBzaXplX3QgbnVtYmVyKQoreworCXNpemVfdCBhZGRlZCA9IDA7CisJZXdvcmRfdCBydW5sZW4sIGNhbl9hZGQ7CisKKwlpZiAocmx3X2dldF9ydW5fYml0KHNlbGYtPnJsdykgIT0gdiAmJiBybHdfc2l6ZShzZWxmLT5ybHcpID09IDApIHsKKwkJcmx3X3NldF9ydW5fYml0KHNlbGYtPnJsdywgdik7CisJfSBlbHNlIGlmIChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSAhPSAwIHx8CisJCQlybHdfZ2V0X3J1bl9iaXQoc2VsZi0+cmx3KSAhPSB2KSB7CisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKwkJaWYgKHYpIHJsd19zZXRfcnVuX2JpdChzZWxmLT5ybHcsIHYpOworCQlhZGRlZCsrOworCX0KKworCXJ1bmxlbiA9IHJsd19nZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3KTsKKwljYW5fYWRkID0gbWluX3NpemUobnVtYmVyLCBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UIC0gcnVubGVuKTsKKworCXJsd19zZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3LCBydW5sZW4gKyBjYW5fYWRkKTsKKwludW1iZXIgLT0gY2FuX2FkZDsKKworCXdoaWxlIChudW1iZXIgPj0gUkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVCkgeworCQlidWZmZXJfcHVzaF9ybHcoc2VsZiwgMCk7CisJCWFkZGVkKys7CisJCWlmICh2KSBybHdfc2V0X3J1bl9iaXQoc2VsZi0+cmx3LCB2KTsKKwkJcmx3X3NldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcsIFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlQpOworCQludW1iZXIgLT0gUkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVDsKKwl9CisKKwlpZiAobnVtYmVyID4gMCkgeworCQlidWZmZXJfcHVzaF9ybHcoc2VsZiwgMCk7CisJCWFkZGVkKys7CisKKwkJaWYgKHYpIHJsd19zZXRfcnVuX2JpdChzZWxmLT5ybHcsIHYpOworCQlybHdfc2V0X3J1bm5pbmdfbGVuKHNlbGYtPnJsdywgbnVtYmVyKTsKKwl9CisKKwlyZXR1cm4gYWRkZWQ7Cit9CisKK3NpemVfdCBld2FoX2FkZF9lbXB0eV93b3JkcyhzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCB2LCBzaXplX3QgbnVtYmVyKQoreworCWlmIChudW1iZXIgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlzZWxmLT5iaXRfc2l6ZSArPSBudW1iZXIgKiBCSVRTX0lOX0VXT1JEOworCXJldHVybiBhZGRfZW1wdHlfd29yZHMoc2VsZiwgdiwgbnVtYmVyKTsKK30KKworc3RhdGljIHNpemVfdCBhZGRfbGl0ZXJhbChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGV3b3JkX3QgbmV3X2RhdGEpCit7CisJZXdvcmRfdCBjdXJyZW50X251bSA9IHJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpOworCisJaWYgKGN1cnJlbnRfbnVtID49IFJMV19MQVJHRVNUX0xJVEVSQUxfQ09VTlQpIHsKKwkJYnVmZmVyX3B1c2hfcmx3KHNlbGYsIDApOworCisJCXJsd19zZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcsIDEpOworCQlidWZmZXJfcHVzaChzZWxmLCBuZXdfZGF0YSk7CisJCXJldHVybiAyOworCX0KKworCXJsd19zZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcsIGN1cnJlbnRfbnVtICsgMSk7CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlhc3NlcnQocmx3X2dldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdykgPT0gY3VycmVudF9udW0gKyAxKTsKKworCWJ1ZmZlcl9wdXNoKHNlbGYsIG5ld19kYXRhKTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBld2FoX2FkZF9kaXJ0eV93b3JkcygKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGNvbnN0IGV3b3JkX3QgKmJ1ZmZlciwKKwlzaXplX3QgbnVtYmVyLCBpbnQgbmVnYXRlKQoreworCXNpemVfdCBsaXRlcmFscywgY2FuX2FkZDsKKworCXdoaWxlICgxKSB7CisJCWxpdGVyYWxzID0gcmx3X2dldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdyk7CisJCWNhbl9hZGQgPSBtaW5fc2l6ZShudW1iZXIsIFJMV19MQVJHRVNUX0xJVEVSQUxfQ09VTlQgLSBsaXRlcmFscyk7CisKKwkJcmx3X3NldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdywgbGl0ZXJhbHMgKyBjYW5fYWRkKTsKKworCQlpZiAoc2VsZi0+YnVmZmVyX3NpemUgKyBjYW5fYWRkID49IHNlbGYtPmFsbG9jX3NpemUpCisJCQlidWZmZXJfZ3JvdyhzZWxmLCAoc2VsZi0+YnVmZmVyX3NpemUgKyBjYW5fYWRkKSAqIDMgLyAyKTsKKworCQlpZiAobmVnYXRlKSB7CisJCQlzaXplX3QgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjYW5fYWRkOyArK2kpCisJCQkJc2VsZi0+YnVmZmVyW3NlbGYtPmJ1ZmZlcl9zaXplKytdID0gfmJ1ZmZlcltpXTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShzZWxmLT5idWZmZXIgKyBzZWxmLT5idWZmZXJfc2l6ZSwKKwkJCQlidWZmZXIsIGNhbl9hZGQgKiBzaXplb2YoZXdvcmRfdCkpOworCQkJc2VsZi0+YnVmZmVyX3NpemUgKz0gY2FuX2FkZDsKKwkJfQorCisJCXNlbGYtPmJpdF9zaXplICs9IGNhbl9hZGQgKiBCSVRTX0lOX0VXT1JEOworCisJCWlmIChudW1iZXIgLSBjYW5fYWRkID09IDApCisJCQlicmVhazsKKworCQlidWZmZXJfcHVzaF9ybHcoc2VsZiwgMCk7CisJCWJ1ZmZlciArPSBjYW5fYWRkOworCQludW1iZXIgLT0gY2FuX2FkZDsKKwl9Cit9CisKK3N0YXRpYyBzaXplX3QgYWRkX2VtcHR5X3dvcmQoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBpbnQgdikKK3sKKwlpbnQgbm9fbGl0ZXJhbCA9IChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSA9PSAwKTsKKwlld29yZF90IHJ1bl9sZW4gPSBybHdfZ2V0X3J1bm5pbmdfbGVuKHNlbGYtPnJsdyk7CisKKwlpZiAobm9fbGl0ZXJhbCAmJiBydW5fbGVuID09IDApIHsKKwkJcmx3X3NldF9ydW5fYml0KHNlbGYtPnJsdywgdik7CisJCWFzc2VydChybHdfZ2V0X3J1bl9iaXQoc2VsZi0+cmx3KSA9PSB2KTsKKwl9CisKKwlpZiAobm9fbGl0ZXJhbCAmJiBybHdfZ2V0X3J1bl9iaXQoc2VsZi0+cmx3KSA9PSB2ICYmCisJCXJ1bl9sZW4gPCBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UKSB7CisJCXJsd19zZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3LCBydW5fbGVuICsgMSk7CisJCWFzc2VydChybHdfZ2V0X3J1bm5pbmdfbGVuKHNlbGYtPnJsdykgPT0gcnVuX2xlbiArIDEpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlidWZmZXJfcHVzaF9ybHcoc2VsZiwgMCk7CisKKwkJYXNzZXJ0KHJsd19nZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3KSA9PSAwKTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpID09IDApOworCQlhc3NlcnQocmx3X2dldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdykgPT0gMCk7CisKKwkJcmx3X3NldF9ydW5fYml0KHNlbGYtPnJsdywgdik7CisJCWFzc2VydChybHdfZ2V0X3J1bl9iaXQoc2VsZi0+cmx3KSA9PSB2KTsKKworCQlybHdfc2V0X3J1bm5pbmdfbGVuKHNlbGYtPnJsdywgMSk7CisJCWFzc2VydChybHdfZ2V0X3J1bm5pbmdfbGVuKHNlbGYtPnJsdykgPT0gMSk7CisJCWFzc2VydChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSA9PSAwKTsKKwkJcmV0dXJuIDE7CisJfQorfQorCitzaXplX3QgZXdhaF9hZGQoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBld29yZF90IHdvcmQpCit7CisJc2VsZi0+Yml0X3NpemUgKz0gQklUU19JTl9FV09SRDsKKworCWlmICh3b3JkID09IDApCisJCXJldHVybiBhZGRfZW1wdHlfd29yZChzZWxmLCAwKTsKKworCWlmICh3b3JkID09IChld29yZF90KSh+MCkpCisJCXJldHVybiBhZGRfZW1wdHlfd29yZChzZWxmLCAxKTsKKworCXJldHVybiBhZGRfbGl0ZXJhbChzZWxmLCB3b3JkKTsKK30KKwordm9pZCBld2FoX3NldChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIHNpemVfdCBpKQoreworCWNvbnN0IHNpemVfdCBkaXN0ID0KKwkJRElWX1JPVU5EX1VQKGkgKyAxLCBCSVRTX0lOX0VXT1JEKSAtCisJCURJVl9ST1VORF9VUChzZWxmLT5iaXRfc2l6ZSwgQklUU19JTl9FV09SRCk7CisKKwlhc3NlcnQoaSA+PSBzZWxmLT5iaXRfc2l6ZSk7CisKKwlzZWxmLT5iaXRfc2l6ZSA9IGkgKyAxOworCisJaWYgKGRpc3QgPiAwKSB7CisJCWlmIChkaXN0ID4gMSkKKwkJCWFkZF9lbXB0eV93b3JkcyhzZWxmLCAwLCBkaXN0IC0gMSk7CisKKwkJYWRkX2xpdGVyYWwoc2VsZiwgKGV3b3JkX3QpMSA8PCAoaSAlIEJJVFNfSU5fRVdPUkQpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSA9PSAwKSB7CisJCXJsd19zZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3LAorCQkJcmx3X2dldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcpIC0gMSk7CisJCWFkZF9saXRlcmFsKHNlbGYsIChld29yZF90KTEgPDwgKGkgJSBCSVRTX0lOX0VXT1JEKSk7CisJCXJldHVybjsKKwl9CisKKwlzZWxmLT5idWZmZXJbc2VsZi0+YnVmZmVyX3NpemUgLSAxXSB8PQorCQkoKGV3b3JkX3QpMSA8PCAoaSAlIEJJVFNfSU5fRVdPUkQpKTsKKworCS8qIGNoZWNrIGlmIHdlIGp1c3QgY29tcGxldGVkIGEgc3RyZWFtIG9mIDFzICovCisJaWYgKHNlbGYtPmJ1ZmZlcltzZWxmLT5idWZmZXJfc2l6ZSAtIDFdID09IChld29yZF90KSh+MCkpIHsKKwkJc2VsZi0+YnVmZmVyWy0tc2VsZi0+YnVmZmVyX3NpemVdID0gMDsKKwkJcmx3X3NldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdywKKwkJCXJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpIC0gMSk7CisJCWFkZF9lbXB0eV93b3JkKHNlbGYsIDEpOworCX0KK30KKwordm9pZCBld2FoX2VhY2hfYml0KHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgdm9pZCAoKmNhbGxiYWNrKShzaXplX3QsIHZvaWQqKSwgdm9pZCAqcGF5bG9hZCkKK3sKKwlzaXplX3QgcG9zID0gMDsKKwlzaXplX3QgcG9pbnRlciA9IDA7CisJc2l6ZV90IGs7CisKKwl3aGlsZSAocG9pbnRlciA8IHNlbGYtPmJ1ZmZlcl9zaXplKSB7CisJCWV3b3JkX3QgKndvcmQgPSAmc2VsZi0+YnVmZmVyW3BvaW50ZXJdOworCisJCWlmIChybHdfZ2V0X3J1bl9iaXQod29yZCkpIHsKKwkJCXNpemVfdCBsZW4gPSBybHdfZ2V0X3J1bm5pbmdfbGVuKHdvcmQpICogQklUU19JTl9FV09SRDsKKwkJCWZvciAoayA9IDA7IGsgPCBsZW47ICsraywgKytwb3MpCisJCQkJY2FsbGJhY2socG9zLCBwYXlsb2FkKTsKKwkJfSBlbHNlIHsKKwkJCXBvcyArPSBybHdfZ2V0X3J1bm5pbmdfbGVuKHdvcmQpICogQklUU19JTl9FV09SRDsKKwkJfQorCisJCSsrcG9pbnRlcjsKKworCQlmb3IgKGsgPSAwOyBrIDwgcmx3X2dldF9saXRlcmFsX3dvcmRzKHdvcmQpOyArK2spIHsKKwkJCWludCBjOworCisJCQkvKiB0b2RvOiB6ZXJvIGNvdW50IG9wdGltaXphdGlvbiAqLworCQkJZm9yIChjID0gMDsgYyA8IEJJVFNfSU5fRVdPUkQ7ICsrYywgKytwb3MpIHsKKwkJCQlpZiAoKHNlbGYtPmJ1ZmZlcltwb2ludGVyXSAmICgoZXdvcmRfdCkxIDw8IGMpKSAhPSAwKQorCQkJCQljYWxsYmFjayhwb3MsIHBheWxvYWQpOworCQkJfQorCisJCQkrK3BvaW50ZXI7CisJCX0KKwl9Cit9CisKKy8qKgorICogQ2xlYXIgYWxsIHRoZSBiaXRzIGluIHRoZSBiaXRtYXAuIERvZXMgbm90IGZyZWUgb3IgcmVzaXplCisgKiBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2lkIGV3YWhfY2xlYXIoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmKQoreworCXNlbGYtPmJ1ZmZlcl9zaXplID0gMTsKKwlzZWxmLT5idWZmZXJbMF0gPSAwOworCXNlbGYtPmJpdF9zaXplID0gMDsKKwlzZWxmLT5ybHcgPSBzZWxmLT5idWZmZXI7Cit9CisKK3N0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9uZXcodm9pZCkKK3sKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGY7CisKKwlzZWxmID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGV3YWhfYml0bWFwKSk7CisJc2VsZi0+YWxsb2Nfc2l6ZSA9IDMyOworCUFMTE9DX0FSUkFZKHNlbGYtPmJ1ZmZlciwgc2VsZi0+YWxsb2Nfc2l6ZSk7CisKKwlld2FoX2NsZWFyKHNlbGYpOworCXJldHVybiBzZWxmOworfQorCit2b2lkIGV3YWhfZnJlZShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpCit7CisJaWYgKCFzZWxmKQorCQlyZXR1cm47CisKKwlpZiAoc2VsZi0+YWxsb2Nfc2l6ZSkKKwkJZnJlZShzZWxmLT5idWZmZXIpOworCisJZnJlZShzZWxmKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9uZXdfcmx3KHN0cnVjdCBld2FoX2l0ZXJhdG9yICppdCkKK3sKKwljb25zdCBld29yZF90ICp3b3JkID0gTlVMTDsKKworCWl0LT5saXRlcmFscyA9IDA7CisJaXQtPmNvbXByZXNzZWQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJd29yZCA9ICZpdC0+YnVmZmVyW2l0LT5wb2ludGVyXTsKKworCQlpdC0+cmwgPSBybHdfZ2V0X3J1bm5pbmdfbGVuKHdvcmQpOworCQlpdC0+bHcgPSBybHdfZ2V0X2xpdGVyYWxfd29yZHMod29yZCk7CisJCWl0LT5iID0gcmx3X2dldF9ydW5fYml0KHdvcmQpOworCisJCWlmIChpdC0+cmwgfHwgaXQtPmx3KQorCQkJcmV0dXJuOworCisJCWlmIChpdC0+cG9pbnRlciA8IGl0LT5idWZmZXJfc2l6ZSAtIDEpIHsKKwkJCWl0LT5wb2ludGVyKys7CisJCX0gZWxzZSB7CisJCQlpdC0+cG9pbnRlciA9IGl0LT5idWZmZXJfc2l6ZTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworaW50IGV3YWhfaXRlcmF0b3JfbmV4dChld29yZF90ICpuZXh0LCBzdHJ1Y3QgZXdhaF9pdGVyYXRvciAqaXQpCit7CisJaWYgKGl0LT5wb2ludGVyID49IGl0LT5idWZmZXJfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXQtPmNvbXByZXNzZWQgPCBpdC0+cmwpIHsKKwkJaXQtPmNvbXByZXNzZWQrKzsKKwkJKm5leHQgPSBpdC0+YiA/IChld29yZF90KSh+MCkgOiAwOworCX0gZWxzZSB7CisJCWFzc2VydChpdC0+bGl0ZXJhbHMgPCBpdC0+bHcpOworCisJCWl0LT5saXRlcmFscysrOworCQlpdC0+cG9pbnRlcisrOworCisJCWFzc2VydChpdC0+cG9pbnRlciA8IGl0LT5idWZmZXJfc2l6ZSk7CisKKwkJKm5leHQgPSBpdC0+YnVmZmVyW2l0LT5wb2ludGVyXTsKKwl9CisKKwlpZiAoaXQtPmNvbXByZXNzZWQgPT0gaXQtPnJsICYmIGl0LT5saXRlcmFscyA9PSBpdC0+bHcpIHsKKwkJaWYgKCsraXQtPnBvaW50ZXIgPCBpdC0+YnVmZmVyX3NpemUpCisJCQlyZWFkX25ld19ybHcoaXQpOworCX0KKworCXJldHVybiAxOworfQorCit2b2lkIGV3YWhfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgZXdhaF9pdGVyYXRvciAqaXQsIHN0cnVjdCBld2FoX2JpdG1hcCAqcGFyZW50KQoreworCWl0LT5idWZmZXIgPSBwYXJlbnQtPmJ1ZmZlcjsKKwlpdC0+YnVmZmVyX3NpemUgPSBwYXJlbnQtPmJ1ZmZlcl9zaXplOworCWl0LT5wb2ludGVyID0gMDsKKworCWl0LT5sdyA9IDA7CisJaXQtPnJsID0gMDsKKwlpdC0+Y29tcHJlc3NlZCA9IDA7CisJaXQtPmxpdGVyYWxzID0gMDsKKwlpdC0+YiA9IDA7CisKKwlpZiAoaXQtPnBvaW50ZXIgPCBpdC0+YnVmZmVyX3NpemUpCisJCXJlYWRfbmV3X3JsdyhpdCk7Cit9CisKK3ZvaWQgZXdhaF94b3IoCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2ksCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2osCisJc3RydWN0IGV3YWhfYml0bWFwICpvdXQpCit7CisJc3RydWN0IHJsd19pdGVyYXRvciBybHdfaTsKKwlzdHJ1Y3Qgcmx3X2l0ZXJhdG9yIHJsd19qOworCXNpemVfdCBsaXRlcmFsczsKKworCXJsd2l0X2luaXQoJnJsd19pLCBld2FoX2kpOworCXJsd2l0X2luaXQoJnJsd19qLCBld2FoX2opOworCisJd2hpbGUgKHJsd2l0X3dvcmRfc2l6ZSgmcmx3X2kpID4gMCAmJiBybHdpdF93b3JkX3NpemUoJnJsd19qKSA+IDApIHsKKwkJd2hpbGUgKHJsd19pLnJsdy5ydW5uaW5nX2xlbiA+IDAgfHwgcmx3X2oucmx3LnJ1bm5pbmdfbGVuID4gMCkgeworCQkJc3RydWN0IHJsd19pdGVyYXRvciAqcHJleSwgKnByZWRhdG9yOworCQkJc2l6ZV90IGluZGV4OworCQkJaW50IG5lZ2F0ZV93b3JkczsKKworCQkJaWYgKHJsd19pLnJsdy5ydW5uaW5nX2xlbiA8IHJsd19qLnJsdy5ydW5uaW5nX2xlbikgeworCQkJCXByZXkgPSAmcmx3X2k7CisJCQkJcHJlZGF0b3IgPSAmcmx3X2o7CisJCQl9IGVsc2UgeworCQkJCXByZXkgPSAmcmx3X2o7CisJCQkJcHJlZGF0b3IgPSAmcmx3X2k7CisJCQl9CisKKwkJCW5lZ2F0ZV93b3JkcyA9ICEhcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2JpdDsKKwkJCWluZGV4ID0gcmx3aXRfZGlzY2hhcmdlKHByZXksIG91dCwKKwkJCQlwcmVkYXRvci0+cmx3LnJ1bm5pbmdfbGVuLCBuZWdhdGVfd29yZHMpOworCisJCQlld2FoX2FkZF9lbXB0eV93b3JkcyhvdXQsIG5lZ2F0ZV93b3JkcywKKwkJCQlwcmVkYXRvci0+cmx3LnJ1bm5pbmdfbGVuIC0gaW5kZXgpOworCisJCQlybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKHByZWRhdG9yLAorCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4pOworCQl9CisKKwkJbGl0ZXJhbHMgPSBtaW5fc2l6ZSgKKwkJCXJsd19pLnJsdy5saXRlcmFsX3dvcmRzLAorCQkJcmx3X2oucmx3LmxpdGVyYWxfd29yZHMpOworCisJCWlmIChsaXRlcmFscykgeworCQkJc2l6ZV90IGs7CisKKwkJCWZvciAoayA9IDA7IGsgPCBsaXRlcmFsczsgKytrKSB7CisJCQkJZXdhaF9hZGQob3V0LAorCQkJCQlybHdfaS5idWZmZXJbcmx3X2kubGl0ZXJhbF93b3JkX3N0YXJ0ICsga10gXgorCQkJCQlybHdfai5idWZmZXJbcmx3X2oubGl0ZXJhbF93b3JkX3N0YXJ0ICsga10KKwkJCQkpOworCQkJfQorCisJCQlybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKCZybHdfaSwgbGl0ZXJhbHMpOworCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3Jkcygmcmx3X2osIGxpdGVyYWxzKTsKKwkJfQorCX0KKworCWlmIChybHdpdF93b3JkX3NpemUoJnJsd19pKSA+IDApCisJCXJsd2l0X2Rpc2NoYXJnZSgmcmx3X2ksIG91dCwgfjAsIDApOworCWVsc2UKKwkJcmx3aXRfZGlzY2hhcmdlKCZybHdfaiwgb3V0LCB+MCwgMCk7CisKKwlvdXQtPmJpdF9zaXplID0gbWF4X3NpemUoZXdhaF9pLT5iaXRfc2l6ZSwgZXdhaF9qLT5iaXRfc2l6ZSk7Cit9CisKKyNkZWZpbmUgQklUTUFQX1BPT0xfTUFYIDE2CitzdGF0aWMgc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXBfcG9vbFtCSVRNQVBfUE9PTF9NQVhdOworc3RhdGljIHNpemVfdCBiaXRtYXBfcG9vbF9zaXplOworCitzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfcG9vbF9uZXcodm9pZCkKK3sKKwlpZiAoYml0bWFwX3Bvb2xfc2l6ZSkKKwkJcmV0dXJuIGJpdG1hcF9wb29sWy0tYml0bWFwX3Bvb2xfc2l6ZV07CisKKwlyZXR1cm4gZXdhaF9uZXcoKTsKK30KKwordm9pZCBld2FoX3Bvb2xfZnJlZShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpCit7CisJaWYgKHNlbGYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGJpdG1hcF9wb29sX3NpemUgPT0gQklUTUFQX1BPT0xfTUFYIHx8CisJCXNlbGYtPmFsbG9jX3NpemUgPT0gMCkgeworCQlld2FoX2ZyZWUoc2VsZik7CisJCXJldHVybjsKKwl9CisKKwlld2FoX2NsZWFyKHNlbGYpOworCWJpdG1hcF9wb29sW2JpdG1hcF9wb29sX3NpemUrK10gPSBzZWxmOworfQorCit1aW50MzJfdCBld2FoX2NoZWNrc3VtKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZikKK3sKKwljb25zdCB1aW50OF90ICpwID0gKHVpbnQ4X3QgKilzZWxmLT5idWZmZXI7CisJdWludDMyX3QgY3JjID0gKHVpbnQzMl90KXNlbGYtPmJpdF9zaXplOworCXNpemVfdCBzaXplID0gc2VsZi0+YnVmZmVyX3NpemUgKiBzaXplb2YoZXdvcmRfdCk7CisKKwl3aGlsZSAoc2l6ZS0tKQorCQljcmMgPSAoY3JjIDw8IDUpIC0gY3JjICsgKHVpbnQzMl90KSpwKys7CisKKwlyZXR1cm4gY3JjOworfQpkaWZmIC0tZ2l0IGEvZXdhaC9ld2FoX2lvLmMgYi9ld2FoL2V3YWhfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDM1ZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZXdhaC9ld2FoX2lvLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qKgorICogQ29weXJpZ2h0IDIwMTMsIEdpdEh1YiwgSW5jCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEzLCBEYW5pZWwgTGVtaXJlLCBDbGlmZiBNb29uLAorICoJRGF2aWQgTWNJbnRvc2gsIFJvYmVydCBCZWNobywgR29vZ2xlIEluYy4gYW5kIFZlcm9uaWthIFplbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJld29rLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK2ludCBld2FoX3NlcmlhbGl6ZV90byhzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsCisJCSAgICAgIGludCAoKndyaXRlX2Z1bikodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCksCisJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc2l6ZV90IGk7CisJZXdvcmRfdCBkdW1wWzIwNDhdOworCWNvbnN0IHNpemVfdCB3b3Jkc19wZXJfZHVtcCA9IHNpemVvZihkdW1wKSAvIHNpemVvZihld29yZF90KTsKKwl1aW50MzJfdCBiaXRzaXplLCB3b3JkX2NvdW50LCBybHdfcG9zOworCisJY29uc3QgZXdvcmRfdCAqYnVmZmVyOworCXNpemVfdCB3b3Jkc19sZWZ0OworCisJLyogMzIgYml0IC0tIGJpdCBzaXplIGZvciB0aGUgbWFwICovCisJYml0c2l6ZSA9ICBodG9ubCgodWludDMyX3Qpc2VsZi0+Yml0X3NpemUpOworCWlmICh3cml0ZV9mdW4oZGF0YSwgJmJpdHNpemUsIDQpICE9IDQpCisJCXJldHVybiAtMTsKKworCS8qKiAzMiBiaXQgLS0gbnVtYmVyIG9mIGNvbXByZXNzZWQgNjQtYml0IHdvcmRzICovCisJd29yZF9jb3VudCA9ICBodG9ubCgodWludDMyX3Qpc2VsZi0+YnVmZmVyX3NpemUpOworCWlmICh3cml0ZV9mdW4oZGF0YSwgJndvcmRfY291bnQsIDQpICE9IDQpCisJCXJldHVybiAtMTsKKworCS8qKiA2NCBiaXQgeCBOIC0tIGNvbXByZXNzZWQgd29yZHMgKi8KKwlidWZmZXIgPSBzZWxmLT5idWZmZXI7CisJd29yZHNfbGVmdCA9IHNlbGYtPmJ1ZmZlcl9zaXplOworCisJd2hpbGUgKHdvcmRzX2xlZnQgPj0gd29yZHNfcGVyX2R1bXApIHsKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRzX3Blcl9kdW1wOyArK2ksICsrYnVmZmVyKQorCQkJZHVtcFtpXSA9IGh0b25sbCgqYnVmZmVyKTsKKworCQlpZiAod3JpdGVfZnVuKGRhdGEsIGR1bXAsIHNpemVvZihkdW1wKSkgIT0gc2l6ZW9mKGR1bXApKQorCQkJcmV0dXJuIC0xOworCisJCXdvcmRzX2xlZnQgLT0gd29yZHNfcGVyX2R1bXA7CisJfQorCisJaWYgKHdvcmRzX2xlZnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRzX2xlZnQ7ICsraSwgKytidWZmZXIpCisJCQlkdW1wW2ldID0gaHRvbmxsKCpidWZmZXIpOworCisJCWlmICh3cml0ZV9mdW4oZGF0YSwgZHVtcCwgd29yZHNfbGVmdCAqIDgpICE9IHdvcmRzX2xlZnQgKiA4KQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qKiAzMiBiaXQgLS0gcG9zaXRpb24gZm9yIHRoZSBSTFcgKi8KKwlybHdfcG9zID0gKHVpbnQ4X3QqKXNlbGYtPnJsdyAtICh1aW50OF90ICopc2VsZi0+YnVmZmVyOworCXJsd19wb3MgPSBodG9ubChybHdfcG9zIC8gc2l6ZW9mKGV3b3JkX3QpKTsKKworCWlmICh3cml0ZV9mdW4oZGF0YSwgJnJsd19wb3MsIDQpICE9IDQpCisJCXJldHVybiAtMTsKKworCXJldHVybiAoMyAqIDQpICsgKHNlbGYtPmJ1ZmZlcl9zaXplICogOCk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfc3RyYnVmKHZvaWQgKnVzZXJfZGF0YSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpzYiA9IHVzZXJfZGF0YTsKKwlzdHJidWZfYWRkKHNiLCBkYXRhLCBsZW4pOworCXJldHVybiBsZW47Cit9CisKK2ludCBld2FoX3NlcmlhbGl6ZV9zdHJidWYoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlyZXR1cm4gZXdhaF9zZXJpYWxpemVfdG8oc2VsZiwgd3JpdGVfc3RyYnVmLCBzYik7Cit9CisKK3NzaXplX3QgZXdhaF9yZWFkX21tYXAoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBjb25zdCB2b2lkICptYXAsIHNpemVfdCBsZW4pCit7CisJY29uc3QgdWludDhfdCAqcHRyID0gbWFwOworCXNpemVfdCBkYXRhX2xlbjsKKwlzaXplX3QgaTsKKworCWlmIChsZW4gPCBzaXplb2YodWludDMyX3QpKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgZXdhaCBiaXRtYXA6IGVvZiBiZWZvcmUgYml0IHNpemUiKTsKKwlzZWxmLT5iaXRfc2l6ZSA9IGdldF9iZTMyKHB0cik7CisJcHRyICs9IHNpemVvZih1aW50MzJfdCk7CisJbGVuIC09IHNpemVvZih1aW50MzJfdCk7CisKKwlpZiAobGVuIDwgc2l6ZW9mKHVpbnQzMl90KSkKKwkJcmV0dXJuIGVycm9yKCJjb3JydXB0IGV3YWggYml0bWFwOiBlb2YgYmVmb3JlIGxlbmd0aCIpOworCXNlbGYtPmJ1ZmZlcl9zaXplID0gc2VsZi0+YWxsb2Nfc2l6ZSA9IGdldF9iZTMyKHB0cik7CisJcHRyICs9IHNpemVvZih1aW50MzJfdCk7CisJbGVuIC09IHNpemVvZih1aW50MzJfdCk7CisKKwlSRUFMTE9DX0FSUkFZKHNlbGYtPmJ1ZmZlciwgc2VsZi0+YWxsb2Nfc2l6ZSk7CisKKwkvKgorCSAqIENvcHkgdGhlIHJhdyBkYXRhIGZvciB0aGUgYml0bWFwIGFzIGEgd2hvbGUgY2h1bms7CisJICogaWYgd2UncmUgaW4gYSBsaXR0bGUtZW5kaWFuIHBsYXRmb3JtLCB3ZSdsbCBwZXJmb3JtCisJICogdGhlIGVuZGlhbm5lc3MgY29udmVyc2lvbiBpbiBhIHNlcGFyYXRlIHBhc3MgdG8gZW5zdXJlCisJICogd2UncmUgbG9hZGluZyA4LWJ5dGUgYWxpZ25lZCB3b3Jkcy4KKwkgKi8KKwlkYXRhX2xlbiA9IHN0X211bHQoc2VsZi0+YnVmZmVyX3NpemUsIHNpemVvZihld29yZF90KSk7CisJaWYgKGxlbiA8IGRhdGFfbGVuKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgZXdhaCBiaXRtYXA6IGVvZiBpbiBkYXRhICIKKwkJCSAgICAgIiglIlBSSXVNQVgiIGJ5dGVzIHNob3J0KSIsCisJCQkgICAgICh1aW50bWF4X3QpKGRhdGFfbGVuIC0gbGVuKSk7CisJbWVtY3B5KHNlbGYtPmJ1ZmZlciwgcHRyLCBkYXRhX2xlbik7CisJcHRyICs9IGRhdGFfbGVuOworCWxlbiAtPSBkYXRhX2xlbjsKKworCWZvciAoaSA9IDA7IGkgPCBzZWxmLT5idWZmZXJfc2l6ZTsgKytpKQorCQlzZWxmLT5idWZmZXJbaV0gPSBudG9obGwoc2VsZi0+YnVmZmVyW2ldKTsKKworCWlmIChsZW4gPCBzaXplb2YodWludDMyX3QpKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgZXdhaCBiaXRtYXA6IGVvZiBiZWZvcmUgcmx3Iik7CisJc2VsZi0+cmx3ID0gc2VsZi0+YnVmZmVyICsgZ2V0X2JlMzIocHRyKTsKKwlwdHIgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwlsZW4gLT0gc2l6ZW9mKHVpbnQzMl90KTsKKworCXJldHVybiBwdHIgLSAoY29uc3QgdWludDhfdCAqKW1hcDsKK30KZGlmZiAtLWdpdCBhL2V3YWgvZXdhaF9ybHcuYyBiL2V3YWgvZXdhaF9ybHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDkzZDQzCi0tLSAvZGV2L251bGwKKysrIGIvZXdhaC9ld2FoX3Jsdy5jCkBAIC0wLDAgKzEsMTA2IEBACisvKioKKyAqIENvcHlyaWdodCAyMDEzLCBHaXRIdWIsIEluYworICogQ29weXJpZ2h0IDIwMDktMjAxMywgRGFuaWVsIExlbWlyZSwgQ2xpZmYgTW9vbiwKKyAqCURhdmlkIE1jSW50b3NoLCBSb2JlcnQgQmVjaG8sIEdvb2dsZSBJbmMuIGFuZCBWZXJvbmlrYSBaZW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZXdvay5oIgorI2luY2x1ZGUgImV3b2tfcmx3LmgiCisKK3N0YXRpYyBpbmxpbmUgaW50IG5leHRfd29yZChzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCkKK3sKKwlpZiAoaXQtPnBvaW50ZXIgPj0gaXQtPnNpemUpCisJCXJldHVybiAwOworCisJaXQtPnJsdy53b3JkID0gJml0LT5idWZmZXJbaXQtPnBvaW50ZXJdOworCWl0LT5wb2ludGVyICs9IHJsd19nZXRfbGl0ZXJhbF93b3JkcyhpdC0+cmx3LndvcmQpICsgMTsKKworCWl0LT5ybHcubGl0ZXJhbF93b3JkcyA9IHJsd19nZXRfbGl0ZXJhbF93b3JkcyhpdC0+cmx3LndvcmQpOworCWl0LT5ybHcucnVubmluZ19sZW4gPSBybHdfZ2V0X3J1bm5pbmdfbGVuKGl0LT5ybHcud29yZCk7CisJaXQtPnJsdy5ydW5uaW5nX2JpdCA9IHJsd19nZXRfcnVuX2JpdChpdC0+cmx3LndvcmQpOworCWl0LT5ybHcubGl0ZXJhbF93b3JkX29mZnNldCA9IDA7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBybHdpdF9pbml0KHN0cnVjdCBybHdfaXRlcmF0b3IgKml0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKmZyb21fZXdhaCkKK3sKKwlpdC0+YnVmZmVyID0gZnJvbV9ld2FoLT5idWZmZXI7CisJaXQtPnNpemUgPSBmcm9tX2V3YWgtPmJ1ZmZlcl9zaXplOworCWl0LT5wb2ludGVyID0gMDsKKworCW5leHRfd29yZChpdCk7CisKKwlpdC0+bGl0ZXJhbF93b3JkX3N0YXJ0ID0gcmx3aXRfbGl0ZXJhbF93b3JkcyhpdCkgKworCQlpdC0+cmx3LmxpdGVyYWxfd29yZF9vZmZzZXQ7Cit9CisKK3ZvaWQgcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCwgc2l6ZV90IHgpCit7CisJd2hpbGUgKHggPiAwKSB7CisJCXNpemVfdCBkaXNjYXJkOworCisJCWlmIChpdC0+cmx3LnJ1bm5pbmdfbGVuID4geCkgeworCQkJaXQtPnJsdy5ydW5uaW5nX2xlbiAtPSB4OworCQkJcmV0dXJuOworCQl9CisKKwkJeCAtPSBpdC0+cmx3LnJ1bm5pbmdfbGVuOworCQlpdC0+cmx3LnJ1bm5pbmdfbGVuID0gMDsKKworCQlkaXNjYXJkID0gKHggPiBpdC0+cmx3LmxpdGVyYWxfd29yZHMpID8gaXQtPnJsdy5saXRlcmFsX3dvcmRzIDogeDsKKworCQlpdC0+bGl0ZXJhbF93b3JkX3N0YXJ0ICs9IGRpc2NhcmQ7CisJCWl0LT5ybHcubGl0ZXJhbF93b3JkcyAtPSBkaXNjYXJkOworCQl4IC09IGRpc2NhcmQ7CisKKwkJaWYgKHggPiAwIHx8IHJsd2l0X3dvcmRfc2l6ZShpdCkgPT0gMCkgeworCQkJaWYgKCFuZXh0X3dvcmQoaXQpKQorCQkJCWJyZWFrOworCisJCQlpdC0+bGl0ZXJhbF93b3JkX3N0YXJ0ID0KKwkJCQlybHdpdF9saXRlcmFsX3dvcmRzKGl0KSArIGl0LT5ybHcubGl0ZXJhbF93b3JkX29mZnNldDsKKwkJfQorCX0KK30KKworc2l6ZV90IHJsd2l0X2Rpc2NoYXJnZSgKKwlzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCwgc3RydWN0IGV3YWhfYml0bWFwICpvdXQsIHNpemVfdCBtYXgsIGludCBuZWdhdGUpCit7CisJc2l6ZV90IGluZGV4ID0gMDsKKworCXdoaWxlIChpbmRleCA8IG1heCAmJiBybHdpdF93b3JkX3NpemUoaXQpID4gMCkgeworCQlzaXplX3QgcGQsIHBsID0gaXQtPnJsdy5ydW5uaW5nX2xlbjsKKworCQlpZiAoaW5kZXggKyBwbCA+IG1heCkKKwkJCXBsID0gbWF4IC0gaW5kZXg7CisKKwkJZXdhaF9hZGRfZW1wdHlfd29yZHMob3V0LCBpdC0+cmx3LnJ1bm5pbmdfYml0IF4gbmVnYXRlLCBwbCk7CisJCWluZGV4ICs9IHBsOworCisJCXBkID0gaXQtPnJsdy5saXRlcmFsX3dvcmRzOworCQlpZiAocGQgKyBpbmRleCA+IG1heCkKKwkJCXBkID0gbWF4IC0gaW5kZXg7CisKKwkJZXdhaF9hZGRfZGlydHlfd29yZHMob3V0LAorCQkJaXQtPmJ1ZmZlciArIGl0LT5saXRlcmFsX3dvcmRfc3RhcnQsIHBkLCBuZWdhdGUpOworCisJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMoaXQsIHBkICsgcGwpOworCQlpbmRleCArPSBwZDsKKwl9CisKKwlyZXR1cm4gaW5kZXg7Cit9CmRpZmYgLS1naXQgYS9ld2FoL2V3b2suaCBiL2V3YWgvZXdvay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMTg1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9ld2FoL2V3b2suaApAQCAtMCwwICsxLDE5MyBAQAorLyoqCisgKiBDb3B5cmlnaHQgMjAxMywgR2l0SHViLCBJbmMKKyAqIENvcHlyaWdodCAyMDA5LTIwMTMsIERhbmllbCBMZW1pcmUsIENsaWZmIE1vb24sCisgKglEYXZpZCBNY0ludG9zaCwgUm9iZXJ0IEJlY2hvLCBHb29nbGUgSW5jLiBhbmQgVmVyb25pa2EgWmVuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2lmbmRlZiBfX0VXT0tfQklUTUFQX0hfXworI2RlZmluZSBfX0VXT0tfQklUTUFQX0hfXworCitzdHJ1Y3Qgc3RyYnVmOwordHlwZWRlZiB1aW50NjRfdCBld29yZF90OworI2RlZmluZSBCSVRTX0lOX0VXT1JEIChzaXplb2YoZXdvcmRfdCkgKiA4KQorCisvKioKKyAqIERvIG5vdCB1c2UgX19idWlsdGluX3BvcGNvdW50bGwuIFRoZSBHQ0MgaW1wbGVtZW50YXRpb24KKyAqIGlzIG5vdG9yaW91c2x5IHNsb3cgb24gYWxsIHBsYXRmb3Jtcy4KKyAqCisgKiBTZWU6IGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MzYwNDEKKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBld2FoX2JpdF9wb3Bjb3VudDY0KHVpbnQ2NF90IHgpCit7CisJeCA9ICh4ICYgMHg1NTU1NTU1NTU1NTU1NTU1VUxMKSArICgoeCA+PiAgMSkgJiAweDU1NTU1NTU1NTU1NTU1NTVVTEwpOworCXggPSAoeCAmIDB4MzMzMzMzMzMzMzMzMzMzM1VMTCkgKyAoKHggPj4gIDIpICYgMHgzMzMzMzMzMzMzMzMzMzMzVUxMKTsKKwl4ID0gKHggJiAweDBGMEYwRjBGMEYwRjBGMEZVTEwpICsgKCh4ID4+ICA0KSAmIDB4MEYwRjBGMEYwRjBGMEYwRlVMTCk7CisJcmV0dXJuICh4ICogMHgwMTAxMDEwMTAxMDEwMTAxVUxMKSA+PiA1NjsKK30KKworLyogX19idWlsdGluX2N0emxsIHdhcyBub3QgYXZhaWxhYmxlIHVudGlsIDMuNC4wICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAgJiYgX19HTlVDX01JTk9SID4gMykpCisjZGVmaW5lIGV3YWhfYml0X2N0ejY0KHgpIF9fYnVpbHRpbl9jdHpsbCh4KQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGV3YWhfYml0X2N0ejY0KHVpbnQ2NF90IHgpCit7CisJaW50IG4gPSAwOworCWlmICgoeCAmIDB4ZmZmZmZmZmYpID09IDApIHsgeCA+Pj0gMzI7IG4gKz0gMzI7IH0KKwlpZiAoKHggJiAgICAgMHhmZmZmKSA9PSAwKSB7IHggPj49IDE2OyBuICs9IDE2OyB9CisJaWYgKCh4ICYgICAgICAgMHhmZikgPT0gMCkgeyB4ID4+PSAgODsgbiArPSAgODsgfQorCWlmICgoeCAmICAgICAgICAweGYpID09IDApIHsgeCA+Pj0gIDQ7IG4gKz0gIDQ7IH0KKwlpZiAoKHggJiAgICAgICAgMHgzKSA9PSAwKSB7IHggPj49ICAyOyBuICs9ICAyOyB9CisJaWYgKCh4ICYgICAgICAgIDB4MSkgPT0gMCkgeyB4ID4+PSAgMTsgbiArPSAgMTsgfQorCXJldHVybiBuICsgIXg7Cit9CisjZW5kaWYKKworc3RydWN0IGV3YWhfYml0bWFwIHsKKwlld29yZF90ICpidWZmZXI7CisJc2l6ZV90IGJ1ZmZlcl9zaXplOworCXNpemVfdCBhbGxvY19zaXplOworCXNpemVfdCBiaXRfc2l6ZTsKKwlld29yZF90ICpybHc7Cit9OworCit0eXBlZGVmIHZvaWQgKCpld2FoX2NhbGxiYWNrKShzaXplX3QgcG9zLCB2b2lkICopOworCitzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfcG9vbF9uZXcodm9pZCk7Cit2b2lkIGV3YWhfcG9vbF9mcmVlKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZik7CisKKy8qKgorICogQWxsb2NhdGUgYSBuZXcgRVdBSCBDb21wcmVzc2VkIGJpdG1hcAorICovCitzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfbmV3KHZvaWQpOworCisvKioKKyAqIEZyZWUgYWxsIHRoZSBtZW1vcnkgb2YgdGhlIGJpdG1hcAorICovCit2b2lkIGV3YWhfZnJlZShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpOworCitpbnQgZXdhaF9zZXJpYWxpemVfdG8oc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLAorCQkgICAgICBpbnQgKCp3cml0ZV9mdW4pKHZvaWQgKm91dCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKSwKKwkJICAgICAgdm9pZCAqb3V0KTsKK2ludCBld2FoX3NlcmlhbGl6ZV9zdHJidWYoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBzdHJ1Y3Qgc3RyYnVmICopOworCitzc2l6ZV90IGV3YWhfcmVhZF9tbWFwKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgY29uc3Qgdm9pZCAqbWFwLCBzaXplX3QgbGVuKTsKKwordWludDMyX3QgZXdhaF9jaGVja3N1bShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpOworCisvKioKKyAqIENhbGwgdGhlIGdpdmVuIGNhbGxiYWNrIHdpdGggdGhlIHBvc2l0aW9uIG9mIGV2ZXJ5IHNpbmdsZSBiaXQKKyAqIHRoYXQgaGFzIGJlZW4gc2V0IG9uIHRoZSBiaXRtYXAuCisgKgorICogVGhpcyBpcyBhbiBlZmZpY2llbnQgb3BlcmF0aW9uIHRoYXQgZG9lcyBub3QgZnVsbHkgZGVjb21wcmVzcworICogdGhlIGJpdG1hcC4KKyAqLwordm9pZCBld2FoX2VhY2hfYml0KHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgZXdhaF9jYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqcGF5bG9hZCk7CisKKy8qKgorICogU2V0IGEgZ2l2ZW4gYml0IG9uIHRoZSBiaXRtYXAuCisgKgorICogVGhlIGJpdCBhdCBwb3NpdGlvbiBgcG9zYCB3aWxsIGJlIHNldCB0byB0cnVlLiBCZWNhdXNlIG9mIHRoZQorICogd2F5IHRoYXQgdGhlIGJpdG1hcCBpcyBjb21wcmVzc2VkLCBhIHNldCBiaXQgY2Fubm90IGJlIHVuc2V0CisgKiBsYXRlciBvbi4KKyAqCisgKiBGdXJ0aGVybW9yZSwgc2luY2UgdGhlIGJpdG1hcCB1c2VzIHN0cmVhbWluZyBjb21wcmVzc2lvbiwgYml0cworICogY2FuIG9ubHkgc2V0IGluY3JlbWVudGFsbHkuCisgKgorICogRS5nLgorICoJCWV3YWhfc2V0KGJpdG1hcCwgMSk7IC8vIG9rCisgKgkJZXdhaF9zZXQoYml0bWFwLCA3Nik7IC8vIG9rCisgKgkJZXdhaF9zZXQoYml0bWFwLCA3Nyk7IC8vIG9rCisgKgkJZXdhaF9zZXQoYml0bWFwLCA4NzEyODAwMTI3KTsgLy8gb2sKKyAqCQlld2FoX3NldChiaXRtYXAsIDI1KTsgLy8gZmFpbGVkLCBhc3NlcnQgcmFpc2VkCisgKi8KK3ZvaWQgZXdhaF9zZXQoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBzaXplX3QgaSk7CisKK3N0cnVjdCBld2FoX2l0ZXJhdG9yIHsKKwljb25zdCBld29yZF90ICpidWZmZXI7CisJc2l6ZV90IGJ1ZmZlcl9zaXplOworCisJc2l6ZV90IHBvaW50ZXI7CisJZXdvcmRfdCBjb21wcmVzc2VkLCBsaXRlcmFsczsKKwlld29yZF90IHJsLCBsdzsKKwlpbnQgYjsKK307CisKKy8qKgorICogSW5pdGlhbGl6ZSBhIG5ldyBpdGVyYXRvciB0byBydW4gdGhyb3VnaCB0aGUgYml0bWFwIGluIHVuY29tcHJlc3NlZCBmb3JtLgorICoKKyAqIFRoZSBpdGVyYXRvciBjYW4gYmUgc3RhY2sgYWxsb2NhdGVkLiBUaGUgdW5kZXJseWluZyBiaXRtYXAgbXVzdCBub3QgYmUgZnJlZWQKKyAqIGJlZm9yZSB0aGUgaXRlcmF0aW9uIGlzIG92ZXIuCisgKgorICogRS5nLgorICoKKyAqCQlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJpdG1hcCA9IGV3YWhfbmV3KCk7CisgKgkJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisgKgorICoJCWV3YWhfaXRlcmF0b3JfaW5pdCgmaXQsIGJpdG1hcCk7CisgKi8KK3ZvaWQgZXdhaF9pdGVyYXRvcl9pbml0KHN0cnVjdCBld2FoX2l0ZXJhdG9yICppdCwgc3RydWN0IGV3YWhfYml0bWFwICpwYXJlbnQpOworCisvKioKKyAqIFlpZWxkIGV2ZXJ5IHNpbmdsZSB3b3JkIGluIHRoZSBiaXRtYXAgaW4gdW5jb21wcmVzc2VkIGZvcm0uIFRoaXMgaXM6CisgKiB5aWVsZCBzaW5nbGUgd29yZHMgKDMyLTY0IGJpdHMpIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHMgYW4gYWN0dWFsCisgKiBiaXQgZnJvbSB0aGUgYml0bWFwLgorICoKKyAqIFJldHVybjogdHJ1ZSBpZiBhIHdvcmQgd2FzIHlpZWxkLCBmYWxzZSBpZiB0aGVyZSBhcmUgbm8gd29yZHMgbGVmdAorICovCitpbnQgZXdhaF9pdGVyYXRvcl9uZXh0KGV3b3JkX3QgKm5leHQsIHN0cnVjdCBld2FoX2l0ZXJhdG9yICppdCk7CisKK3ZvaWQgZXdhaF94b3IoCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2ksCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2osCisJc3RydWN0IGV3YWhfYml0bWFwICpvdXQpOworCisvKioKKyAqIERpcmVjdCB3b3JkIGFjY2VzcworICovCitzaXplX3QgZXdhaF9hZGRfZW1wdHlfd29yZHMoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBpbnQgdiwgc2l6ZV90IG51bWJlcik7Cit2b2lkIGV3YWhfYWRkX2RpcnR5X3dvcmRzKAorCXN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgY29uc3QgZXdvcmRfdCAqYnVmZmVyLCBzaXplX3QgbnVtYmVyLCBpbnQgbmVnYXRlKTsKK3NpemVfdCBld2FoX2FkZChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGV3b3JkX3Qgd29yZCk7CisKKworLyoqCisgKiBVbmNvbXByZXNzZWQsIG9sZC1zY2hvb2wgYml0bWFwIHRoYXQgY2FuIGJlIGVmZmljaWVudGx5IGNvbXByZXNzZWQKKyAqIGludG8gYW4gYGV3YWhfYml0bWFwYC4KKyAqLworc3RydWN0IGJpdG1hcCB7CisJZXdvcmRfdCAqd29yZHM7CisJc2l6ZV90IHdvcmRfYWxsb2M7Cit9OworCitzdHJ1Y3QgYml0bWFwICpiaXRtYXBfbmV3KHZvaWQpOworc3RydWN0IGJpdG1hcCAqYml0bWFwX3dvcmRfYWxsb2Moc2l6ZV90IHdvcmRfYWxsb2MpOwordm9pZCBiaXRtYXBfc2V0KHN0cnVjdCBiaXRtYXAgKnNlbGYsIHNpemVfdCBwb3MpOwordm9pZCBiaXRtYXBfdW5zZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc2l6ZV90IHBvcyk7CitpbnQgYml0bWFwX2dldChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzaXplX3QgcG9zKTsKK3ZvaWQgYml0bWFwX3Jlc2V0KHN0cnVjdCBiaXRtYXAgKnNlbGYpOwordm9pZCBiaXRtYXBfZnJlZShzdHJ1Y3QgYml0bWFwICpzZWxmKTsKK2ludCBiaXRtYXBfZXF1YWxzKHN0cnVjdCBiaXRtYXAgKnNlbGYsIHN0cnVjdCBiaXRtYXAgKm90aGVyKTsKK2ludCBiaXRtYXBfaXNfc3Vic2V0KHN0cnVjdCBiaXRtYXAgKnNlbGYsIHN0cnVjdCBiaXRtYXAgKnN1cGVyKTsKKworc3RydWN0IGV3YWhfYml0bWFwICogYml0bWFwX3RvX2V3YWgoc3RydWN0IGJpdG1hcCAqYml0bWFwKTsKK3N0cnVjdCBiaXRtYXAgKmV3YWhfdG9fYml0bWFwKHN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaCk7CisKK3ZvaWQgYml0bWFwX2FuZF9ub3Qoc3RydWN0IGJpdG1hcCAqc2VsZiwgc3RydWN0IGJpdG1hcCAqb3RoZXIpOwordm9pZCBiaXRtYXBfb3JfZXdhaChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKm90aGVyKTsKK3ZvaWQgYml0bWFwX29yKHN0cnVjdCBiaXRtYXAgKnNlbGYsIGNvbnN0IHN0cnVjdCBiaXRtYXAgKm90aGVyKTsKKworc2l6ZV90IGJpdG1hcF9wb3Bjb3VudChzdHJ1Y3QgYml0bWFwICpzZWxmKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ld2FoL2V3b2tfcmx3LmggYi9ld2FoL2V3b2tfcmx3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmYTI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2V3YWgvZXdva19ybHcuaApAQCAtMCwwICsxLDExNCBAQAorLyoqCisgKiBDb3B5cmlnaHQgMjAxMywgR2l0SHViLCBJbmMKKyAqIENvcHlyaWdodCAyMDA5LTIwMTMsIERhbmllbCBMZW1pcmUsIENsaWZmIE1vb24sCisgKglEYXZpZCBNY0ludG9zaCwgUm9iZXJ0IEJlY2hvLCBHb29nbGUgSW5jLiBhbmQgVmVyb25pa2EgWmVuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2lmbmRlZiBfX0VXT0tfUkxXX0hfXworI2RlZmluZSBfX0VXT0tfUkxXX0hfXworCisjaW5jbHVkZSAiZXdvay5oIgorCisjZGVmaW5lIFJMV19SVU5OSU5HX0JJVFMgKHNpemVvZihld29yZF90KSAqIDQpCisjZGVmaW5lIFJMV19MSVRFUkFMX0JJVFMgKHNpemVvZihld29yZF90KSAqIDggLSAxIC0gUkxXX1JVTk5JTkdfQklUUykKKworI2RlZmluZSBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UICgoKGV3b3JkX3QpMSA8PCBSTFdfUlVOTklOR19CSVRTKSAtIDEpCisjZGVmaW5lIFJMV19MQVJHRVNUX0xJVEVSQUxfQ09VTlQgKCgoZXdvcmRfdCkxIDw8IFJMV19MSVRFUkFMX0JJVFMpIC0gMSkKKworI2RlZmluZSBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UX1NISUZUIChSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UIDw8IDEpCisKKyNkZWZpbmUgUkxXX1JVTk5JTkdfTEVOX1BMVVNfQklUICgoKGV3b3JkX3QpMSA8PCAoUkxXX1JVTk5JTkdfQklUUyArIDEpKSAtIDEpCisKK3N0YXRpYyBpbmxpbmUgaW50IHJsd19nZXRfcnVuX2JpdChjb25zdCBld29yZF90ICp3b3JkKQoreworCXJldHVybiAqd29yZCAmIChld29yZF90KTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBybHdfc2V0X3J1bl9iaXQoZXdvcmRfdCAqd29yZCwgaW50IGIpCit7CisJaWYgKGIpIHsKKwkJKndvcmQgfD0gKGV3b3JkX3QpMTsKKwl9IGVsc2UgeworCQkqd29yZCAmPSAoZXdvcmRfdCkofjEpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJsd194b3JfcnVuX2JpdChld29yZF90ICp3b3JkKQoreworCWlmICgqd29yZCAmIDEpIHsKKwkJKndvcmQgJj0gKGV3b3JkX3QpKH4xKTsKKwl9IGVsc2UgeworCQkqd29yZCB8PSAoZXdvcmRfdCkxOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJsd19zZXRfcnVubmluZ19sZW4oZXdvcmRfdCAqd29yZCwgZXdvcmRfdCBsKQoreworCSp3b3JkIHw9IFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlRfU0hJRlQ7CisJKndvcmQgJj0gKGwgPDwgMSkgfCAoflJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlRfU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIGV3b3JkX3Qgcmx3X2dldF9ydW5uaW5nX2xlbihjb25zdCBld29yZF90ICp3b3JkKQoreworCXJldHVybiAoKndvcmQgPj4gMSkgJiBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UOworfQorCitzdGF0aWMgaW5saW5lIGV3b3JkX3Qgcmx3X2dldF9saXRlcmFsX3dvcmRzKGNvbnN0IGV3b3JkX3QgKndvcmQpCit7CisJcmV0dXJuICp3b3JkID4+ICgxICsgUkxXX1JVTk5JTkdfQklUUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBybHdfc2V0X2xpdGVyYWxfd29yZHMoZXdvcmRfdCAqd29yZCwgZXdvcmRfdCBsKQoreworCSp3b3JkIHw9IH5STFdfUlVOTklOR19MRU5fUExVU19CSVQ7CisJKndvcmQgJj0gKGwgPDwgKFJMV19SVU5OSU5HX0JJVFMgKyAxKSkgfCBSTFdfUlVOTklOR19MRU5fUExVU19CSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgZXdvcmRfdCBybHdfc2l6ZShjb25zdCBld29yZF90ICpzZWxmKQoreworCXJldHVybiBybHdfZ2V0X3J1bm5pbmdfbGVuKHNlbGYpICsgcmx3X2dldF9saXRlcmFsX3dvcmRzKHNlbGYpOworfQorCitzdHJ1Y3Qgcmx3X2l0ZXJhdG9yIHsKKwljb25zdCBld29yZF90ICpidWZmZXI7CisJc2l6ZV90IHNpemU7CisJc2l6ZV90IHBvaW50ZXI7CisJc2l6ZV90IGxpdGVyYWxfd29yZF9zdGFydDsKKworCXN0cnVjdCB7CisJCWNvbnN0IGV3b3JkX3QgKndvcmQ7CisJCWludCBsaXRlcmFsX3dvcmRzOworCQlpbnQgcnVubmluZ19sZW47CisJCWludCBsaXRlcmFsX3dvcmRfb2Zmc2V0OworCQlpbnQgcnVubmluZ19iaXQ7CisJfSBybHc7Cit9OworCit2b2lkIHJsd2l0X2luaXQoc3RydWN0IHJsd19pdGVyYXRvciAqaXQsIHN0cnVjdCBld2FoX2JpdG1hcCAqYml0bWFwKTsKK3ZvaWQgcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCwgc2l6ZV90IHgpOworc2l6ZV90IHJsd2l0X2Rpc2NoYXJnZSgKKwlzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCwgc3RydWN0IGV3YWhfYml0bWFwICpvdXQsIHNpemVfdCBtYXgsIGludCBuZWdhdGUpOworCitzdGF0aWMgaW5saW5lIHNpemVfdCBybHdpdF93b3JkX3NpemUoc3RydWN0IHJsd19pdGVyYXRvciAqaXQpCit7CisJcmV0dXJuIGl0LT5ybHcucnVubmluZ19sZW4gKyBpdC0+cmx3LmxpdGVyYWxfd29yZHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHJsd2l0X2xpdGVyYWxfd29yZHMoc3RydWN0IHJsd19pdGVyYXRvciAqaXQpCit7CisJcmV0dXJuIGl0LT5wb2ludGVyIC0gaXQtPnJsdy5saXRlcmFsX3dvcmRzOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2V4ZWMtY21kLmMgYi9leGVjLWNtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZWVhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9leGVjLWNtZC5jCkBAIC0wLDAgKzEsMzY3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCisjaWYgZGVmaW5lZChSVU5USU1FX1BSRUZJWCkKKworI2lmIGRlZmluZWQoSEFWRV9OU19HRVRfRVhFQ1VUQUJMRV9QQVRIKQorI2luY2x1ZGUgPG1hY2gtby9keWxkLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9CU0RfS0VSTl9QUk9DX1NZU0NUTCkKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIFJVTlRJTUVfUFJFRklYICovCisKKyNkZWZpbmUgTUFYX0FSR1MgMzIKKworc3RhdGljIGNvbnN0IGNoYXIgKnN5c3RlbV9wcmVmaXgodm9pZCk7CisKKyNpZmRlZiBSVU5USU1FX1BSRUZJWAorCisvKioKKyAqIFdoZW4gdXNpbmcgYSBydW50aW1lIHByZWZpeCwgR2l0IGR5bmFtaWNhbGx5IHJlc29sdmVzIHBhdGhzIHJlbGF0aXZlIHRvIGl0cworICogZXhlY3V0YWJsZS4KKyAqCisgKiBUaGUgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgcGF0aCBvZiB0aGUgZXhlY3V0YWJsZSBpcyBoaWdobHkKKyAqIHBsYXRmb3JtLXNwZWNpZmljLgorICovCisKKy8qKgorICogUGF0aCB0byB0aGUgY3VycmVudCBHaXQgZXhlY3V0YWJsZS4gUmVzb2x2ZWQgb24gc3RhcnR1cCBieQorICogJ2dpdF9yZXNvbHZlX2V4ZWN1dGFibGVfZGlyJy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmV4ZWN1dGFibGVfZGlybmFtZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN5c3RlbV9wcmVmaXgodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4OworCisJYXNzZXJ0KGV4ZWN1dGFibGVfZGlybmFtZSk7CisJYXNzZXJ0KGlzX2Fic29sdXRlX3BhdGgoZXhlY3V0YWJsZV9kaXJuYW1lKSk7CisKKwlpZiAoIXByZWZpeCAmJgorCSAgICAhKHByZWZpeCA9IHN0cmlwX3BhdGhfc3VmZml4KGV4ZWN1dGFibGVfZGlybmFtZSwgR0lUX0VYRUNfUEFUSCkpICYmCisJICAgICEocHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoZXhlY3V0YWJsZV9kaXJuYW1lLCBCSU5ESVIpKSAmJgorCSAgICAhKHByZWZpeCA9IHN0cmlwX3BhdGhfc3VmZml4KGV4ZWN1dGFibGVfZGlybmFtZSwgImdpdCIpKSkgeworCQlwcmVmaXggPSBGQUxMQkFDS19SVU5USU1FX1BSRUZJWDsKKwkJdHJhY2VfcHJpbnRmKCJSVU5USU1FX1BSRUZJWCByZXF1ZXN0ZWQsICIKKwkJCQkiYnV0IHByZWZpeCBjb21wdXRhdGlvbiBmYWlsZWQuICAiCisJCQkJIlVzaW5nIHN0YXRpYyBmYWxsYmFjayAnJXMnLlxuIiwgcHJlZml4KTsKKwl9CisJcmV0dXJuIHByZWZpeDsKK30KKworLyoKKyAqIFJlc29sdmVzIHRoZSBleGVjdXRhYmxlIHBhdGggZnJvbSBhcmd2WzBdLCBvbmx5IGlmIGl0IGlzIGFic29sdXRlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGdpdF9nZXRfZXhlY19wYXRoX2Zyb21fYXJndjAoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICphcmd2MCkKK3sKKwljb25zdCBjaGFyICpzbGFzaDsKKworCWlmICghYXJndjAgfHwgISphcmd2MCkKKwkJcmV0dXJuIC0xOworCisJc2xhc2ggPSBmaW5kX2xhc3RfZGlyX3NlcChhcmd2MCk7CisJaWYgKHNsYXNoKSB7CisJCXRyYWNlX3ByaW50ZigidHJhY2U6IHJlc29sdmVkIGV4ZWN1dGFibGUgcGF0aCBmcm9tIGFyZ3YwOiAlc1xuIiwKKwkJCSAgICAgYXJndjApOworCQlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoYnVmLCBhcmd2MCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKyNpZmRlZiBQUk9DRlNfRVhFQ1VUQUJMRV9QQVRICisvKgorICogUmVzb2x2ZXMgdGhlIGV4ZWN1dGFibGUgcGF0aCBieSBleGFtaW5pbmcgYSBwcm9jZnMgc3ltbGluay4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBnaXRfZ2V0X2V4ZWNfcGF0aF9wcm9jZnMoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWlmIChzdHJidWZfcmVhbHBhdGgoYnVmLCBQUk9DRlNfRVhFQ1VUQUJMRV9QQVRILCAwKSkgeworCQl0cmFjZV9wcmludGYoCisJCQkidHJhY2U6IHJlc29sdmVkIGV4ZWN1dGFibGUgcGF0aCBmcm9tIHByb2NmczogJXNcbiIsCisJCQlidWYtPmJ1Zik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYgLyogUFJPQ0ZTX0VYRUNVVEFCTEVfUEFUSCAqLworCisjaWZkZWYgSEFWRV9CU0RfS0VSTl9QUk9DX1NZU0NUTAorLyoKKyAqIFJlc29sdmVzIHRoZSBleGVjdXRhYmxlIHBhdGggdXNpbmcgS0VSTl9QUk9DX1BBVEhOQU1FIEJTRCBzeXNjdGwuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2l0X2dldF9leGVjX3BhdGhfYnNkX3N5c2N0bChzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaW50IG1pYls0XTsKKwljaGFyIHBhdGhbTUFYUEFUSExFTl07CisJc2l6ZV90IGNiID0gc2l6ZW9mKHBhdGgpOworCisJbWliWzBdID0gQ1RMX0tFUk47CisJbWliWzFdID0gS0VSTl9QUk9DOworCW1pYlsyXSA9IEtFUk5fUFJPQ19QQVRITkFNRTsKKwltaWJbM10gPSAtMTsKKwlpZiAoIXN5c2N0bChtaWIsIDQsIHBhdGgsICZjYiwgTlVMTCwgMCkpIHsKKwkJdHJhY2VfcHJpbnRmKAorCQkJInRyYWNlOiByZXNvbHZlZCBleGVjdXRhYmxlIHBhdGggZnJvbSBzeXNjdGw6ICVzXG4iLAorCQkJcGF0aCk7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBIQVZFX0JTRF9LRVJOX1BST0NfU1lTQ1RMICovCisKKyNpZmRlZiBIQVZFX05TX0dFVF9FWEVDVVRBQkxFX1BBVEgKKy8qCisgKiBSZXNvbHZlcyB0aGUgZXhlY3V0YWJsZSBwYXRoIGJ5IHF1ZXJ5aW5nIERhcndpbiBhcHBsaWNhdGlvbiBzdGFjay4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBnaXRfZ2V0X2V4ZWNfcGF0aF9kYXJ3aW4oc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJdWludDMyX3Qgc2l6ZSA9IHNpemVvZihwYXRoKTsKKwlpZiAoIV9OU0dldEV4ZWN1dGFibGVQYXRoKHBhdGgsICZzaXplKSkgeworCQl0cmFjZV9wcmludGYoCisJCQkidHJhY2U6IHJlc29sdmVkIGV4ZWN1dGFibGUgcGF0aCBmcm9tIERhcndpbiBzdGFjazogJXNcbiIsCisJCQlwYXRoKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsIHBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorI2VuZGlmIC8qIEhBVkVfTlNfR0VUX0VYRUNVVEFCTEVfUEFUSCAqLworCisjaWZkZWYgSEFWRV9XUEdNUFRSCisvKgorICogUmVzb2x2ZXMgdGhlIGV4ZWN1dGFibGUgcGF0aCBieSB1c2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlIF93cGdtcHRyLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGdpdF9nZXRfZXhlY19wYXRoX3dwZ21wdHIoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWludCBsZW4gPSB3Y3NsZW4oX3dwZ21wdHIpICogMyArIDE7CisJc3RyYnVmX2dyb3coYnVmLCBsZW4pOworCWxlbiA9IHh3Y3N0b3V0ZihidWYtPmJ1ZiwgX3dwZ21wdHIsIGxlbik7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtMTsKKwlidWYtPmxlbiArPSBsZW47CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogSEFWRV9XUEdNUFRSICovCisKKy8qCisgKiBSZXNvbHZlcyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgY3VycmVudCBleGVjdXRhYmxlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGdpdF9nZXRfZXhlY19wYXRoKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqYXJndjApCit7CisJLyoKKwkgKiBJZGVudGlmeWluZyB0aGUgZXhlY3V0YWJsZSBwYXRoIGlzIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMuCisJICogU2VsZWN0aXZlbHkgZW1wbG95IGFsbCBhdmFpbGFibGUgbWV0aG9kcyBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLAorCSAqIHByZWZlcnJpbmcgaGlnaGx5LWF2YWlsYWJsZSBhdXRob3JpdGF0aXZlIG1ldGhvZHMgb3ZlcgorCSAqIHNlbGVjdGl2ZWx5LWF2YWlsYWJsZSBvciBub24tYXV0aG9yaXRhdGl2ZSBtZXRob2RzLgorCSAqCisJICogQWxsIGNhc2VzIGZhbGwgYmFjayBvbiByZXNvbHZpbmcgYWdhaW5zdCBhcmd2WzBdIGlmIHRoZXJlIGlzbid0IGEKKwkgKiBiZXR0ZXIgZnVuY3Rpb25hbCBtZXRob2QuIEhvd2V2ZXIsIG5vdGUgdGhhdCBhcmd2WzBdIGNhbiBiZQorCSAqIHVzZWQtc3VwcGxpZWQgb24gbWFueSBvcGVyYXRpbmcgc3lzdGVtcywgYW5kIGlzIG5vdCBhdXRob3JpdGF0aXZlCisJICogaW4gdGhvc2UgY2FzZXMuCisJICoKKwkgKiBFYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm5zIDAgb24gc3VjY2Vzcywgc28gZXZhbHVhdGlvbiB3aWxsIHN0b3AKKwkgKiBhZnRlciB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBtZXRob2QuCisJICovCisJaWYgKAorI2lmZGVmIEhBVkVfQlNEX0tFUk5fUFJPQ19TWVNDVEwKKwkJZ2l0X2dldF9leGVjX3BhdGhfYnNkX3N5c2N0bChidWYpICYmCisjZW5kaWYgLyogSEFWRV9CU0RfS0VSTl9QUk9DX1NZU0NUTCAqLworCisjaWZkZWYgSEFWRV9OU19HRVRfRVhFQ1VUQUJMRV9QQVRICisJCWdpdF9nZXRfZXhlY19wYXRoX2RhcndpbihidWYpICYmCisjZW5kaWYgLyogSEFWRV9OU19HRVRfRVhFQ1VUQUJMRV9QQVRIICovCisKKyNpZmRlZiBQUk9DRlNfRVhFQ1VUQUJMRV9QQVRICisJCWdpdF9nZXRfZXhlY19wYXRoX3Byb2NmcyhidWYpICYmCisjZW5kaWYgLyogUFJPQ0ZTX0VYRUNVVEFCTEVfUEFUSCAqLworCisjaWZkZWYgSEFWRV9XUEdNUFRSCisJCWdpdF9nZXRfZXhlY19wYXRoX3dwZ21wdHIoYnVmKSAmJgorI2VuZGlmIC8qIEhBVkVfV1BHTVBUUiAqLworCisJCWdpdF9nZXRfZXhlY19wYXRoX2Zyb21fYXJndjAoYnVmLCBhcmd2MCkpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChzdHJidWZfbm9ybWFsaXplX3BhdGgoYnVmKSkgeworCQl0cmFjZV9wcmludGYoInRyYWNlOiBjb3VsZCBub3Qgbm9ybWFsaXplIHBhdGg6ICVzXG4iLCBidWYtPmJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisKKwl0cmFjZTJfY21kX3BhdGgoYnVmLT5idWYpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ2l0X3Jlc29sdmVfZXhlY3V0YWJsZV9kaXIoY29uc3QgY2hhciAqYXJndjApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpyZXNvbHZlZDsKKwljb25zdCBjaGFyICpzbGFzaDsKKworCWlmIChnaXRfZ2V0X2V4ZWNfcGF0aCgmYnVmLCBhcmd2MCkpIHsKKwkJdHJhY2VfcHJpbnRmKAorCQkJInRyYWNlOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGV4ZWN1dGFibGUgcGF0aCBmcm9tOiAlc1xuIiwKKwkJCWFyZ3YwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlyZXNvbHZlZCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJc2xhc2ggPSBmaW5kX2xhc3RfZGlyX3NlcChyZXNvbHZlZCk7CisJaWYgKHNsYXNoKQorCQlyZXNvbHZlZFtzbGFzaCAtIHJlc29sdmVkXSA9ICdcMCc7CisKKwlleGVjdXRhYmxlX2Rpcm5hbWUgPSByZXNvbHZlZDsKKwl0cmFjZV9wcmludGYoInRyYWNlOiByZXNvbHZlZCBleGVjdXRhYmxlIGRpcjogJXNcbiIsCisJCSAgICAgZXhlY3V0YWJsZV9kaXJuYW1lKTsKK30KKworI2Vsc2UKKworLyoKKyAqIFdoZW4gbm90IHVzaW5nIGEgcnVudGltZSBwcmVmaXgsIEdpdCB1c2VzIGEgaGFyZC1jb2RlZCBwYXRoLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqc3lzdGVtX3ByZWZpeCh2b2lkKQoreworCXJldHVybiBGQUxMQkFDS19SVU5USU1FX1BSRUZJWDsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYnV0IE5vIHdvcmsgbmVlZHMgdG8gYmUgZG9uZSBoZXJlIHdoZW4KKyAqIHJ1bnRpbWUgcHJlZml4IGlzIG5vdCBiZWluZyB1c2VkLgorICovCit2b2lkIGdpdF9yZXNvbHZlX2V4ZWN1dGFibGVfZGlyKGNvbnN0IGNoYXIgKmFyZ3YwKQoreworfQorCisjZW5kaWYgLyogUlVOVElNRV9QUkVGSVggKi8KKworY2hhciAqc3lzdGVtX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGQgPSBTVFJCVUZfSU5JVDsKKworCWlmIChpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQorCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKworCXN0cmJ1Zl9hZGRmKCZkLCAiJXMvJXMiLCBzeXN0ZW1fcHJlZml4KCksIHBhdGgpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZkLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmV4ZWNfcGF0aF92YWx1ZTsKKwordm9pZCBnaXRfc2V0X2V4ZWNfcGF0aChjb25zdCBjaGFyICpleGVjX3BhdGgpCit7CisJZXhlY19wYXRoX3ZhbHVlID0gZXhlY19wYXRoOworCS8qCisJICogUHJvcGFnYXRlIHRoaXMgc2V0dGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4KKwkgKi8KKwlzZXRlbnYoRVhFQ19QQVRIX0VOVklST05NRU5ULCBleGVjX3BhdGgsIDEpOworfQorCisvKiBSZXR1cm5zIHRoZSBoaWdoZXN0LXByaW9yaXR5IGxvY2F0aW9uIHRvIGxvb2sgZm9yIGdpdCBwcm9ncmFtcy4gKi8KK2NvbnN0IGNoYXIgKmdpdF9leGVjX3BhdGgodm9pZCkKK3sKKwlpZiAoIWV4ZWNfcGF0aF92YWx1ZSkgeworCQljb25zdCBjaGFyICplbnYgPSBnZXRlbnYoRVhFQ19QQVRIX0VOVklST05NRU5UKTsKKwkJaWYgKGVudiAmJiAqZW52KQorCQkJZXhlY19wYXRoX3ZhbHVlID0geHN0cmR1cChlbnYpOworCQllbHNlCisJCQlleGVjX3BhdGhfdmFsdWUgPSBzeXN0ZW1fcGF0aChHSVRfRVhFQ19QQVRIKTsKKwl9CisJcmV0dXJuIGV4ZWNfcGF0aF92YWx1ZTsKK30KKworc3RhdGljIHZvaWQgYWRkX3BhdGgoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChwYXRoICYmICpwYXRoKSB7CisJCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aChvdXQsIHBhdGgpOworCQlzdHJidWZfYWRkY2gob3V0LCBQQVRIX1NFUCk7CisJfQorfQorCit2b2lkIHNldHVwX3BhdGgodm9pZCkKK3sKKwljb25zdCBjaGFyICpleGVjX3BhdGggPSBnaXRfZXhlY19wYXRoKCk7CisJY29uc3QgY2hhciAqb2xkX3BhdGggPSBnZXRlbnYoIlBBVEgiKTsKKwlzdHJ1Y3Qgc3RyYnVmIG5ld19wYXRoID0gU1RSQlVGX0lOSVQ7CisKKwlnaXRfc2V0X2V4ZWNfcGF0aChleGVjX3BhdGgpOworCWFkZF9wYXRoKCZuZXdfcGF0aCwgZXhlY19wYXRoKTsKKworCWlmIChvbGRfcGF0aCkKKwkJc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsIG9sZF9wYXRoKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRzdHIoJm5ld19wYXRoLCBfUEFUSF9ERUZQQVRIKTsKKworCXNldGVudigiUEFUSCIsIG5ld19wYXRoLmJ1ZiwgMSk7CisKKwlzdHJidWZfcmVsZWFzZSgmbmV3X3BhdGgpOworfQorCitjb25zdCBjaGFyICoqcHJlcGFyZV9naXRfY21kKHN0cnVjdCBhcmd2X2FycmF5ICpvdXQsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWFyZ3ZfYXJyYXlfcHVzaChvdXQsICJnaXQiKTsKKwlhcmd2X2FycmF5X3B1c2h2KG91dCwgYXJndik7CisJcmV0dXJuIG91dC0+YXJndjsKK30KKworaW50IGV4ZWN2X2dpdF9jbWQoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgbmFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlwcmVwYXJlX2dpdF9jbWQoJm5hcmd2LCBhcmd2KTsKKwl0cmFjZV9hcmd2X3ByaW50ZihuYXJndi5hcmd2LCAidHJhY2U6IGV4ZWM6Iik7CisKKwkvKiBleGVjdnAoKSBjYW4gb25seSBldmVyIHJldHVybiBpZiBpdCBmYWlscyAqLworCXNhbmVfZXhlY3ZwKCJnaXQiLCAoY2hhciAqKiluYXJndi5hcmd2KTsKKworCXRyYWNlX3ByaW50ZigidHJhY2U6IGV4ZWMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJm5hcmd2KTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBleGVjbF9naXRfY21kKGNvbnN0IGNoYXIgKmNtZCwgLi4uKQoreworCWludCBhcmdjOworCWNvbnN0IGNoYXIgKmFyZ3ZbTUFYX0FSR1MgKyAxXTsKKwljb25zdCBjaGFyICphcmc7CisJdmFfbGlzdCBwYXJhbTsKKworCXZhX3N0YXJ0KHBhcmFtLCBjbWQpOworCWFyZ3ZbMF0gPSBjbWQ7CisJYXJnYyA9IDE7CisJd2hpbGUgKGFyZ2MgPCBNQVhfQVJHUykgeworCQlhcmcgPSBhcmd2W2FyZ2MrK10gPSB2YV9hcmcocGFyYW0sIGNoYXIgKik7CisJCWlmICghYXJnKQorCQkJYnJlYWs7CisJfQorCXZhX2VuZChwYXJhbSk7CisJaWYgKE1BWF9BUkdTIDw9IGFyZ2MpCisJCXJldHVybiBlcnJvcihfKCJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIpLCBjbWQpOworCisJYXJndlthcmdjXSA9IE5VTEw7CisJcmV0dXJuIGV4ZWN2X2dpdF9jbWQoYXJndik7Cit9CmRpZmYgLS1naXQgYS9leGVjLWNtZC5oIGIvZXhlYy1jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2QxZGYyCi0tLSAvZGV2L251bGwKKysrIGIvZXhlYy1jbWQuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIEdJVF9FWEVDX0NNRF9ICisjZGVmaW5lIEdJVF9FWEVDX0NNRF9ICisKK3N0cnVjdCBhcmd2X2FycmF5OworCit2b2lkIGdpdF9zZXRfZXhlY19wYXRoKGNvbnN0IGNoYXIgKmV4ZWNfcGF0aCk7Cit2b2lkIGdpdF9yZXNvbHZlX2V4ZWN1dGFibGVfZGlyKGNvbnN0IGNoYXIgKnBhdGgpOworY29uc3QgY2hhciAqZ2l0X2V4ZWNfcGF0aCh2b2lkKTsKK3ZvaWQgc2V0dXBfcGF0aCh2b2lkKTsKK2NvbnN0IGNoYXIgKipwcmVwYXJlX2dpdF9jbWQoc3RydWN0IGFyZ3ZfYXJyYXkgKm91dCwgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGV4ZWN2X2dpdF9jbWQoY29uc3QgY2hhciAqKmFyZ3YpOyAvKiBOVUxMIHRlcm1pbmF0ZWQgKi8KK0xBU1RfQVJHX01VU1RfQkVfTlVMTAoraW50IGV4ZWNsX2dpdF9jbWQoY29uc3QgY2hhciAqY21kLCAuLi4pOworY2hhciAqc3lzdGVtX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CisKKyNlbmRpZiAvKiBHSVRfRVhFQ19DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZmFzdC1pbXBvcnQuYyBiL2Zhc3QtaW1wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiNjVhOAotLS0gL2Rldi9udWxsCisrKyBiL2Zhc3QtaW1wb3J0LmMKQEAgLTAsMCArMSwzNTA3IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAibWVtLXBvb2wuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworI2RlZmluZSBQQUNLX0lEX0JJVFMgMTYKKyNkZWZpbmUgTUFYX1BBQ0tfSUQgKCgxPDxQQUNLX0lEX0JJVFMpLTEpCisjZGVmaW5lIERFUFRIX0JJVFMgMTMKKyNkZWZpbmUgTUFYX0RFUFRIICgoMTw8REVQVEhfQklUUyktMSkKKworLyoKKyAqIFdlIGFidXNlIHRoZSBzZXR1aWQgYml0IG9uIGRpcmVjdG9yaWVzIHRvIG1lYW4gImRvIG5vdCBkZWx0YSIuCisgKi8KKyNkZWZpbmUgTk9fREVMVEEgU19JU1VJRAorCisvKgorICogVGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsIHNwYWNlIHJlcXVpcmVkIGluIG9yZGVyIHRvIHdyaXRlIGFuIG9iamVjdCBpbnRvIHRoZQorICogY3VycmVudCBwYWNrLiBUaGlzIGlzIHRoZSBoYXNoIGxlbmd0aHMgYXQgdGhlIGVuZCBvZiB0aGUgcGFjaywgcGx1cyB0aGUKKyAqIGxlbmd0aCBvZiBvbmUgb2JqZWN0IElELgorICovCisjZGVmaW5lIFBBQ0tfU0laRV9USFJFU0hPTEQgKHRoZV9oYXNoX2FsZ28tPnJhd3N6ICogMykKKworc3RydWN0IG9iamVjdF9lbnRyeSB7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5IGlkeDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpuZXh0OworCXVpbnQzMl90IHR5cGUgOiBUWVBFX0JJVFMsCisJCXBhY2tfaWQgOiBQQUNLX0lEX0JJVFMsCisJCWRlcHRoIDogREVQVEhfQklUUzsKK307CisKK3N0cnVjdCBvYmplY3RfZW50cnlfcG9vbCB7CisJc3RydWN0IG9iamVjdF9lbnRyeV9wb29sICpuZXh0X3Bvb2w7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqbmV4dF9mcmVlOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVuZDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5IGVudHJpZXNbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0cnVjdCBtYXJrX3NldCB7CisJdW5pb24geworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICptYXJrZWRbMTAyNF07CisJCXN0cnVjdCBtYXJrX3NldCAqc2V0c1sxMDI0XTsKKwl9IGRhdGE7CisJdW5zaWduZWQgaW50IHNoaWZ0OworfTsKKworc3RydWN0IGxhc3Rfb2JqZWN0IHsKKwlzdHJ1Y3Qgc3RyYnVmIGRhdGE7CisJb2ZmX3Qgb2Zmc2V0OworCXVuc2lnbmVkIGludCBkZXB0aDsKKwl1bnNpZ25lZCBub19zd2FwIDogMTsKK307CisKK3N0cnVjdCBhdG9tX3N0ciB7CisJc3RydWN0IGF0b21fc3RyICpuZXh0X2F0b207CisJdW5zaWduZWQgc2hvcnQgc3RyX2xlbjsKKwljaGFyIHN0cl9kYXRbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0cnVjdCB0cmVlX2NvbnRlbnQ7CitzdHJ1Y3QgdHJlZV9lbnRyeSB7CisJc3RydWN0IHRyZWVfY29udGVudCAqdHJlZTsKKwlzdHJ1Y3QgYXRvbV9zdHIgKm5hbWU7CisJc3RydWN0IHRyZWVfZW50cnlfbXMgeworCQl1aW50MTZfdCBtb2RlOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl9IHZlcnNpb25zWzJdOworfTsKKworc3RydWN0IHRyZWVfY29udGVudCB7CisJdW5zaWduZWQgaW50IGVudHJ5X2NhcGFjaXR5OyAvKiBtdXN0IG1hdGNoIGF2YWlsX3RyZWVfY29udGVudCAqLworCXVuc2lnbmVkIGludCBlbnRyeV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgZGVsdGFfZGVwdGg7CisJc3RydWN0IHRyZWVfZW50cnkgKmVudHJpZXNbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQgeworCXVuc2lnbmVkIGludCBlbnRyeV9jYXBhY2l0eTsgLyogbXVzdCBtYXRjaCB0cmVlX2NvbnRlbnQgKi8KKwlzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50ICpuZXh0X2F2YWlsOworfTsKKworc3RydWN0IGJyYW5jaCB7CisJc3RydWN0IGJyYW5jaCAqdGFibGVfbmV4dF9icmFuY2g7CisJc3RydWN0IGJyYW5jaCAqYWN0aXZlX25leHRfYnJhbmNoOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHRyZWVfZW50cnkgYnJhbmNoX3RyZWU7CisJdWludG1heF90IGxhc3RfY29tbWl0OworCXVpbnRtYXhfdCBudW1fbm90ZXM7CisJdW5zaWduZWQgYWN0aXZlIDogMTsKKwl1bnNpZ25lZCBkZWxldGUgOiAxOworCXVuc2lnbmVkIHBhY2tfaWQgOiBQQUNLX0lEX0JJVFM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7Cit9OworCitzdHJ1Y3QgdGFnIHsKKwlzdHJ1Y3QgdGFnICpuZXh0X3RhZzsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBwYWNrX2lkOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworc3RydWN0IGhhc2hfbGlzdCB7CisJc3RydWN0IGhhc2hfbGlzdCAqbmV4dDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKK307CisKK3R5cGVkZWYgZW51bSB7CisJV0hFTlNQRUNfUkFXID0gMSwKKwlXSEVOU1BFQ19SRkMyODIyLAorCVdIRU5TUEVDX05PVworfSB3aGVuc3BlY190eXBlOworCitzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgeworCXN0cnVjdCByZWNlbnRfY29tbWFuZCAqcHJldjsKKwlzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKm5leHQ7CisJY2hhciAqYnVmOworfTsKKworLyogQ29uZmlndXJlZCBsaW1pdHMgb24gb3V0cHV0ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfZGVwdGggPSA1MDsKK3N0YXRpYyBvZmZfdCBtYXhfcGFja3NpemU7CitzdGF0aWMgaW50IHVucGFja19saW1pdCA9IDEwMDsKK3N0YXRpYyBpbnQgZm9yY2VfdXBkYXRlOworCisvKiBTdGF0cyBhbmQgbWlzYy4gY291bnRlcnMgKi8KK3N0YXRpYyB1aW50bWF4X3QgYWxsb2NfY291bnQ7CitzdGF0aWMgdWludG1heF90IG1hcmtzX3NldF9jb3VudDsKK3N0YXRpYyB1aW50bWF4X3Qgb2JqZWN0X2NvdW50X2J5X3R5cGVbMSA8PCBUWVBFX0JJVFNdOworc3RhdGljIHVpbnRtYXhfdCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVsxIDw8IFRZUEVfQklUU107CitzdGF0aWMgdWludG1heF90IGRlbHRhX2NvdW50X2J5X3R5cGVbMSA8PCBUWVBFX0JJVFNdOworc3RhdGljIHVpbnRtYXhfdCBkZWx0YV9jb3VudF9hdHRlbXB0c19ieV90eXBlWzEgPDwgVFlQRV9CSVRTXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9iamVjdF9jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJyYW5jaF9jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJyYW5jaF9sb2FkX2NvdW50Oworc3RhdGljIGludCBmYWlsdXJlOworc3RhdGljIEZJTEUgKnBhY2tfZWRnZXM7CitzdGF0aWMgdW5zaWduZWQgaW50IHNob3dfc3RhdHMgPSAxOworc3RhdGljIGludCBnbG9iYWxfYXJnYzsKK3N0YXRpYyBjb25zdCBjaGFyICoqZ2xvYmFsX2FyZ3Y7CisKKy8qIE1lbW9yeSBwb29scyAqLworc3RhdGljIHN0cnVjdCBtZW1fcG9vbCBmaV9tZW1fcG9vbCA9ICB7TlVMTCwgMioxMDI0KjEwMjQgLQorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1wX2Jsb2NrKSwgMCB9OworCisvKiBBdG9tIG1hbmFnZW1lbnQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRvbV90YWJsZV9zeiA9IDQ0NTE7CitzdGF0aWMgdW5zaWduZWQgaW50IGF0b21fY250Oworc3RhdGljIHN0cnVjdCBhdG9tX3N0ciAqKmF0b21fdGFibGU7CisKKy8qIFRoZSAucGFjayBmaWxlIGJlaW5nIGdlbmVyYXRlZCAqLworc3RhdGljIHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gcGFja19pZHhfb3B0czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja19pZDsKK3N0YXRpYyBzdHJ1Y3QgaGFzaGZpbGUgKnBhY2tfZmlsZTsKK3N0YXRpYyBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja19kYXRhOworc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICoqYWxsX3BhY2tzOworc3RhdGljIG9mZl90IHBhY2tfc2l6ZTsKKworLyogVGFibGUgb2Ygb2JqZWN0cyB3ZSd2ZSB3cml0dGVuLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBvYmplY3RfZW50cnlfYWxsb2MgPSA1MDAwOworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnlfcG9vbCAqYmxvY2tzOworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdF90YWJsZVsxIDw8IDE2XTsKK3N0YXRpYyBzdHJ1Y3QgbWFya19zZXQgKm1hcmtzOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cG9ydF9tYXJrc19maWxlOworc3RhdGljIGNvbnN0IGNoYXIgKmltcG9ydF9tYXJrc19maWxlOworc3RhdGljIGludCBpbXBvcnRfbWFya3NfZmlsZV9mcm9tX3N0cmVhbTsKK3N0YXRpYyBpbnQgaW1wb3J0X21hcmtzX2ZpbGVfaWdub3JlX21pc3Npbmc7CitzdGF0aWMgaW50IGltcG9ydF9tYXJrc19maWxlX2RvbmU7CitzdGF0aWMgaW50IHJlbGF0aXZlX21hcmtzX3BhdGhzOworCisvKiBPdXIgbGFzdCBibG9iICovCitzdGF0aWMgc3RydWN0IGxhc3Rfb2JqZWN0IGxhc3RfYmxvYiA9IHsgU1RSQlVGX0lOSVQsIDAsIDAsIDAgfTsKKworLyogVHJlZSBtYW5hZ2VtZW50ICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRyZWVfZW50cnlfYWxsb2MgPSAxMDAwOworc3RhdGljIHZvaWQgKmF2YWlsX3RyZWVfZW50cnk7CitzdGF0aWMgdW5zaWduZWQgaW50IGF2YWlsX3RyZWVfdGFibGVfc3ogPSAxMDA7CitzdGF0aWMgc3RydWN0IGF2YWlsX3RyZWVfY29udGVudCAqKmF2YWlsX3RyZWVfdGFibGU7CitzdGF0aWMgc2l6ZV90IHRyZWVfZW50cnlfYWxsb2NkOworc3RhdGljIHN0cnVjdCBzdHJidWYgb2xkX3RyZWUgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG5ld190cmVlID0gU1RSQlVGX0lOSVQ7CisKKy8qIEJyYW5jaCBkYXRhICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfYWN0aXZlX2JyYW5jaGVzID0gNTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGN1cl9hY3RpdmVfYnJhbmNoZXM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBicmFuY2hfdGFibGVfc3ogPSAxMDM5Oworc3RhdGljIHN0cnVjdCBicmFuY2ggKipicmFuY2hfdGFibGU7CitzdGF0aWMgc3RydWN0IGJyYW5jaCAqYWN0aXZlX2JyYW5jaGVzOworCisvKiBUYWcgZGF0YSAqLworc3RhdGljIHN0cnVjdCB0YWcgKmZpcnN0X3RhZzsKK3N0YXRpYyBzdHJ1Y3QgdGFnICpsYXN0X3RhZzsKKworLyogSW5wdXQgc3RyZWFtIHBhcnNpbmcgKi8KK3N0YXRpYyB3aGVuc3BlY190eXBlIHdoZW5zcGVjID0gV0hFTlNQRUNfUkFXOworc3RhdGljIHN0cnVjdCBzdHJidWYgY29tbWFuZF9idWYgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBpbnQgdW5yZWFkX2NvbW1hbmRfYnVmOworc3RhdGljIHN0cnVjdCByZWNlbnRfY29tbWFuZCBjbWRfaGlzdCA9IHsmY21kX2hpc3QsICZjbWRfaGlzdCwgTlVMTH07CitzdGF0aWMgc3RydWN0IHJlY2VudF9jb21tYW5kICpjbWRfdGFpbCA9ICZjbWRfaGlzdDsKK3N0YXRpYyBzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKnJjX2ZyZWU7CitzdGF0aWMgdW5zaWduZWQgaW50IGNtZF9zYXZlID0gMTAwOworc3RhdGljIHVpbnRtYXhfdCBuZXh0X21hcms7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBuZXdfZGF0YSA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCBzZWVuX2RhdGFfY29tbWFuZDsKK3N0YXRpYyBpbnQgcmVxdWlyZV9leHBsaWNpdF90ZXJtaW5hdGlvbjsKK3N0YXRpYyBpbnQgYWxsb3dfdW5zYWZlX2ZlYXR1cmVzOworCisvKiBTaWduYWwgaGFuZGxpbmcgKi8KK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgY2hlY2twb2ludF9yZXF1ZXN0ZWQ7CisKKy8qIFdoZXJlIHRvIHdyaXRlIG91dHB1dCBvZiBjYXQtYmxvYiBjb21tYW5kcyAqLworc3RhdGljIGludCBjYXRfYmxvYl9mZCA9IFNURE9VVF9GSUxFTk87CisKK3N0YXRpYyB2b2lkIHBhcnNlX2FyZ3Yodm9pZCk7CitzdGF0aWMgdm9pZCBwYXJzZV9nZXRfbWFyayhjb25zdCBjaGFyICpwKTsKK3N0YXRpYyB2b2lkIHBhcnNlX2NhdF9ibG9iKGNvbnN0IGNoYXIgKnApOworc3RhdGljIHZvaWQgcGFyc2VfbHMoY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYik7CisKK3N0YXRpYyB2b2lkIHdyaXRlX2JyYW5jaF9yZXBvcnQoRklMRSAqcnB0LCBzdHJ1Y3QgYnJhbmNoICpiKQoreworCWZwcmludGYocnB0LCAiJXM6XG4iLCBiLT5uYW1lKTsKKworCWZwcmludGYocnB0LCAiICBzdGF0dXMgICAgICA6Iik7CisJaWYgKGItPmFjdGl2ZSkKKwkJZnB1dHMoIiBhY3RpdmUiLCBycHQpOworCWlmIChiLT5icmFuY2hfdHJlZS50cmVlKQorCQlmcHV0cygiIGxvYWRlZCIsIHJwdCk7CisJaWYgKGlzX251bGxfb2lkKCZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQpKQorCQlmcHV0cygiIGRpcnR5IiwgcnB0KTsKKwlmcHV0YygnXG4nLCBycHQpOworCisJZnByaW50ZihycHQsICIgIHRpcCBjb21taXQgIDogJXNcbiIsIG9pZF90b19oZXgoJmItPm9pZCkpOworCWZwcmludGYocnB0LCAiICBvbGQgdHJlZSAgICA6ICVzXG4iLAorCQlvaWRfdG9faGV4KCZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5vaWQpKTsKKwlmcHJpbnRmKHJwdCwgIiAgY3VyIHRyZWUgICAgOiAlc1xuIiwKKwkJb2lkX3RvX2hleCgmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKSk7CisJZnByaW50ZihycHQsICIgIGNvbW1pdCBjbG9jazogJSIgUFJJdU1BWCAiXG4iLCBiLT5sYXN0X2NvbW1pdCk7CisKKwlmcHV0cygiICBsYXN0IHBhY2sgICA6ICIsIHJwdCk7CisJaWYgKGItPnBhY2tfaWQgPCBNQVhfUEFDS19JRCkKKwkJZnByaW50ZihycHQsICIldSIsIGItPnBhY2tfaWQpOworCWZwdXRjKCdcbicsIHJwdCk7CisKKwlmcHV0YygnXG4nLCBycHQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX21hcmtzX2hlbHBlcihGSUxFICosIHVpbnRtYXhfdCwgc3RydWN0IG1hcmtfc2V0ICopOworCitzdGF0aWMgdm9pZCB3cml0ZV9jcmFzaF9yZXBvcnQoY29uc3QgY2hhciAqZXJyKQoreworCWNoYXIgKmxvYyA9IGdpdF9wYXRoZHVwKCJmYXN0X2ltcG9ydF9jcmFzaF8lIlBSSXVNQVgsICh1aW50bWF4X3QpIGdldHBpZCgpKTsKKwlGSUxFICpycHQgPSBmb3Blbihsb2MsICJ3Iik7CisJc3RydWN0IGJyYW5jaCAqYjsKKwl1bnNpZ25lZCBsb25nIGx1OworCXN0cnVjdCByZWNlbnRfY29tbWFuZCAqcmM7CisKKwlpZiAoIXJwdCkgeworCQllcnJvcl9lcnJubygiY2FuJ3Qgd3JpdGUgY3Jhc2ggcmVwb3J0ICVzIiwgbG9jKTsKKwkJZnJlZShsb2MpOworCQlyZXR1cm47CisJfQorCisJZnByaW50ZihzdGRlcnIsICJmYXN0LWltcG9ydDogZHVtcGluZyBjcmFzaCByZXBvcnQgdG8gJXNcbiIsIGxvYyk7CisKKwlmcHJpbnRmKHJwdCwgImZhc3QtaW1wb3J0IGNyYXNoIHJlcG9ydDpcbiIpOworCWZwcmludGYocnB0LCAiICAgIGZhc3QtaW1wb3J0IHByb2Nlc3M6ICUiUFJJdU1BWCJcbiIsICh1aW50bWF4X3QpIGdldHBpZCgpKTsKKwlmcHJpbnRmKHJwdCwgIiAgICBwYXJlbnQgcHJvY2VzcyAgICAgOiAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KSBnZXRwcGlkKCkpOworCWZwcmludGYocnB0LCAiICAgIGF0ICVzXG4iLCBzaG93X2RhdGUodGltZShOVUxMKSwgMCwgREFURV9NT0RFKElTTzg2MDEpKSk7CisJZnB1dGMoJ1xuJywgcnB0KTsKKworCWZwdXRzKCJmYXRhbDogIiwgcnB0KTsKKwlmcHV0cyhlcnIsIHJwdCk7CisJZnB1dGMoJ1xuJywgcnB0KTsKKworCWZwdXRjKCdcbicsIHJwdCk7CisJZnB1dHMoIk1vc3QgUmVjZW50IENvbW1hbmRzIEJlZm9yZSBDcmFzaFxuIiwgcnB0KTsKKwlmcHV0cygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLCBycHQpOworCWZvciAocmMgPSBjbWRfaGlzdC5uZXh0OyByYyAhPSAmY21kX2hpc3Q7IHJjID0gcmMtPm5leHQpIHsKKwkJaWYgKHJjLT5uZXh0ID09ICZjbWRfaGlzdCkKKwkJCWZwdXRzKCIqICIsIHJwdCk7CisJCWVsc2UKKwkJCWZwdXRzKCIgICIsIHJwdCk7CisJCWZwdXRzKHJjLT5idWYsIHJwdCk7CisJCWZwdXRjKCdcbicsIHJwdCk7CisJfQorCisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiQWN0aXZlIEJyYW5jaCBMUlVcbiIsIHJwdCk7CisJZnB1dHMoIi0tLS0tLS0tLS0tLS0tLS0tXG4iLCBycHQpOworCWZwcmludGYocnB0LCAiICAgIGFjdGl2ZV9icmFuY2hlcyA9ICVsdSBjdXIsICVsdSBtYXhcbiIsCisJCWN1cl9hY3RpdmVfYnJhbmNoZXMsCisJCW1heF9hY3RpdmVfYnJhbmNoZXMpOworCWZwdXRjKCdcbicsIHJwdCk7CisJZnB1dHMoIiAgcG9zICBjbG9jayBuYW1lXG4iLCBycHQpOworCWZwdXRzKCIgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuIiwgcnB0KTsKKwlmb3IgKGIgPSBhY3RpdmVfYnJhbmNoZXMsIGx1ID0gMDsgYjsgYiA9IGItPmFjdGl2ZV9uZXh0X2JyYW5jaCkKKwkJZnByaW50ZihycHQsICIgICUybHUpICU2IiBQUkl1TUFYIiAlc1xuIiwKKwkJCSsrbHUsIGItPmxhc3RfY29tbWl0LCBiLT5uYW1lKTsKKworCWZwdXRjKCdcbicsIHJwdCk7CisJZnB1dHMoIkluYWN0aXZlIEJyYW5jaGVzXG4iLCBycHQpOworCWZwdXRzKCItLS0tLS0tLS0tLS0tLS0tLVxuIiwgcnB0KTsKKwlmb3IgKGx1ID0gMDsgbHUgPCBicmFuY2hfdGFibGVfc3o7IGx1KyspIHsKKwkJZm9yIChiID0gYnJhbmNoX3RhYmxlW2x1XTsgYjsgYiA9IGItPnRhYmxlX25leHRfYnJhbmNoKQorCQkJd3JpdGVfYnJhbmNoX3JlcG9ydChycHQsIGIpOworCX0KKworCWlmIChmaXJzdF90YWcpIHsKKwkJc3RydWN0IHRhZyAqdGc7CisJCWZwdXRjKCdcbicsIHJwdCk7CisJCWZwdXRzKCJBbm5vdGF0ZWQgVGFnc1xuIiwgcnB0KTsKKwkJZnB1dHMoIi0tLS0tLS0tLS0tLS0tXG4iLCBycHQpOworCQlmb3IgKHRnID0gZmlyc3RfdGFnOyB0ZzsgdGcgPSB0Zy0+bmV4dF90YWcpIHsKKwkJCWZwdXRzKG9pZF90b19oZXgoJnRnLT5vaWQpLCBycHQpOworCQkJZnB1dGMoJyAnLCBycHQpOworCQkJZnB1dHModGctPm5hbWUsIHJwdCk7CisJCQlmcHV0YygnXG4nLCBycHQpOworCQl9CisJfQorCisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiTWFya3NcbiIsIHJwdCk7CisJZnB1dHMoIi0tLS0tXG4iLCBycHQpOworCWlmIChleHBvcnRfbWFya3NfZmlsZSkKKwkJZnByaW50ZihycHQsICIgIGV4cG9ydGVkIHRvICVzXG4iLCBleHBvcnRfbWFya3NfZmlsZSk7CisJZWxzZQorCQlkdW1wX21hcmtzX2hlbHBlcihycHQsIDAsIG1hcmtzKTsKKworCWZwdXRjKCdcbicsIHJwdCk7CisJZnB1dHMoIi0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJZnB1dHMoIkVORCBPRiBDUkFTSCBSRVBPUlRcbiIsIHJwdCk7CisJZmNsb3NlKHJwdCk7CisJZnJlZShsb2MpOworfQorCitzdGF0aWMgdm9pZCBlbmRfcGFja2ZpbGUodm9pZCk7CitzdGF0aWMgdm9pZCB1bmtlZXBfYWxsX3BhY2tzKHZvaWQpOworc3RhdGljIHZvaWQgZHVtcF9tYXJrcyh2b2lkKTsKKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX25pY2VseShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCXN0YXRpYyBpbnQgem9tYmllOworCWNoYXIgbWVzc2FnZVsyICogUEFUSF9NQVhdOworCisJdnNucHJpbnRmKG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSwgZXJyLCBwYXJhbXMpOworCWZwdXRzKCJmYXRhbDogIiwgc3RkZXJyKTsKKwlmcHV0cyhtZXNzYWdlLCBzdGRlcnIpOworCWZwdXRjKCdcbicsIHN0ZGVycik7CisKKwlpZiAoIXpvbWJpZSkgeworCQl6b21iaWUgPSAxOworCQl3cml0ZV9jcmFzaF9yZXBvcnQobWVzc2FnZSk7CisJCWVuZF9wYWNrZmlsZSgpOworCQl1bmtlZXBfYWxsX3BhY2tzKCk7CisJCWR1bXBfbWFya3MoKTsKKwl9CisJZXhpdCgxMjgpOworfQorCisjaWZuZGVmIFNJR1VTUjEJLyogV2luZG93cywgZm9yIGV4YW1wbGUgKi8KKworc3RhdGljIHZvaWQgc2V0X2NoZWNrcG9pbnRfc2lnbmFsKHZvaWQpCit7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIGNoZWNrcG9pbnRfc2lnbmFsKGludCBzaWdubykKK3sKKwljaGVja3BvaW50X3JlcXVlc3RlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jaGVja3BvaW50X3NpZ25hbCh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24gc2E7CisKKwltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKKwlzYS5zYV9oYW5kbGVyID0gY2hlY2twb2ludF9zaWduYWw7CisJc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOworCXNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKKwlzaWdhY3Rpb24oU0lHVVNSMSwgJnNhLCBOVUxMKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2b2lkIGFsbG9jX29iamVjdHModW5zaWduZWQgaW50IGNudCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5X3Bvb2wgKmI7CisKKwliID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeV9wb29sKQorCQkrIGNudCAqIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5KSk7CisJYi0+bmV4dF9wb29sID0gYmxvY2tzOworCWItPm5leHRfZnJlZSA9IGItPmVudHJpZXM7CisJYi0+ZW5kID0gYi0+ZW50cmllcyArIGNudDsKKwlibG9ja3MgPSBiOworCWFsbG9jX2NvdW50ICs9IGNudDsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm5ld19vYmplY3Qoc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisKKwlpZiAoYmxvY2tzLT5uZXh0X2ZyZWUgPT0gYmxvY2tzLT5lbmQpCisJCWFsbG9jX29iamVjdHMob2JqZWN0X2VudHJ5X2FsbG9jKTsKKworCWUgPSBibG9ja3MtPm5leHRfZnJlZSsrOworCW9pZGNweSgmZS0+aWR4Lm9pZCwgb2lkKTsKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKmZpbmRfb2JqZWN0KHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaCA9IG9pZC0+aGFzaFswXSA8PCA4IHwgb2lkLT5oYXNoWzFdOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJZm9yIChlID0gb2JqZWN0X3RhYmxlW2hdOyBlOyBlID0gZS0+bmV4dCkKKwkJaWYgKG9pZGVxKG9pZCwgJmUtPmlkeC5vaWQpKQorCQkJcmV0dXJuIGU7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICppbnNlcnRfb2JqZWN0KHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaCA9IG9pZC0+aGFzaFswXSA8PCA4IHwgb2lkLT5oYXNoWzFdOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSBvYmplY3RfdGFibGVbaF07CisKKwl3aGlsZSAoZSkgeworCQlpZiAob2lkZXEob2lkLCAmZS0+aWR4Lm9pZCkpCisJCQlyZXR1cm4gZTsKKwkJZSA9IGUtPm5leHQ7CisJfQorCisJZSA9IG5ld19vYmplY3Qob2lkKTsKKwllLT5uZXh0ID0gb2JqZWN0X3RhYmxlW2hdOworCWUtPmlkeC5vZmZzZXQgPSAwOworCW9iamVjdF90YWJsZVtoXSA9IGU7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfcGFja19pZCh1bnNpZ25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgaW50IGg7CisJdW5zaWduZWQgbG9uZyBsdTsKKwlzdHJ1Y3QgdGFnICp0OworCisJZm9yIChoID0gMDsgaCA8IEFSUkFZX1NJWkUob2JqZWN0X3RhYmxlKTsgaCsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisKKwkJZm9yIChlID0gb2JqZWN0X3RhYmxlW2hdOyBlOyBlID0gZS0+bmV4dCkKKwkJCWlmIChlLT5wYWNrX2lkID09IGlkKQorCQkJCWUtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwl9CisKKwlmb3IgKGx1ID0gMDsgbHUgPCBicmFuY2hfdGFibGVfc3o7IGx1KyspIHsKKwkJc3RydWN0IGJyYW5jaCAqYjsKKworCQlmb3IgKGIgPSBicmFuY2hfdGFibGVbbHVdOyBiOyBiID0gYi0+dGFibGVfbmV4dF9icmFuY2gpCisJCQlpZiAoYi0+cGFja19pZCA9PSBpZCkKKwkJCQliLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJfQorCisJZm9yICh0ID0gZmlyc3RfdGFnOyB0OyB0ID0gdC0+bmV4dF90YWcpCisJCWlmICh0LT5wYWNrX2lkID09IGlkKQorCQkJdC0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhjX3N0cihjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGludCByID0gMDsKKwl3aGlsZSAobGVuLS0gPiAwKQorCQlyID0gciAqIDMxICsgKnMrKzsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGNoYXIgKnBvb2xfc3RyZHVwKGNvbnN0IGNoYXIgKnMpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzKSArIDE7CisJY2hhciAqciA9IG1lbV9wb29sX2FsbG9jKCZmaV9tZW1fcG9vbCwgbGVuKTsKKwltZW1jcHkociwgcywgbGVuKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X21hcmsodWludG1heF90IGlkbnVtLCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSkKK3sKKwlzdHJ1Y3QgbWFya19zZXQgKnMgPSBtYXJrczsKKwl3aGlsZSAoKGlkbnVtID4+IHMtPnNoaWZ0KSA+PSAxMDI0KSB7CisJCXMgPSBtZW1fcG9vbF9jYWxsb2MoJmZpX21lbV9wb29sLCAxLCBzaXplb2Yoc3RydWN0IG1hcmtfc2V0KSk7CisJCXMtPnNoaWZ0ID0gbWFya3MtPnNoaWZ0ICsgMTA7CisJCXMtPmRhdGEuc2V0c1swXSA9IG1hcmtzOworCQltYXJrcyA9IHM7CisJfQorCXdoaWxlIChzLT5zaGlmdCkgeworCQl1aW50bWF4X3QgaSA9IGlkbnVtID4+IHMtPnNoaWZ0OworCQlpZG51bSAtPSBpIDw8IHMtPnNoaWZ0OworCQlpZiAoIXMtPmRhdGEuc2V0c1tpXSkgeworCQkJcy0+ZGF0YS5zZXRzW2ldID0gbWVtX3Bvb2xfY2FsbG9jKCZmaV9tZW1fcG9vbCwgMSwgc2l6ZW9mKHN0cnVjdCBtYXJrX3NldCkpOworCQkJcy0+ZGF0YS5zZXRzW2ldLT5zaGlmdCA9IHMtPnNoaWZ0IC0gMTA7CisJCX0KKwkJcyA9IHMtPmRhdGEuc2V0c1tpXTsKKwl9CisJaWYgKCFzLT5kYXRhLm1hcmtlZFtpZG51bV0pCisJCW1hcmtzX3NldF9jb3VudCsrOworCXMtPmRhdGEubWFya2VkW2lkbnVtXSA9IG9lOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqZmluZF9tYXJrKHVpbnRtYXhfdCBpZG51bSkKK3sKKwl1aW50bWF4X3Qgb3JpZ19pZG51bSA9IGlkbnVtOworCXN0cnVjdCBtYXJrX3NldCAqcyA9IG1hcmtzOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gTlVMTDsKKwlpZiAoKGlkbnVtID4+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+ZmluYWxfZm4ob2lkLmhhc2gsICZjKTsKKwlpZiAob2lkb3V0KQorCQlvaWRjcHkob2lkb3V0LCAmb2lkKTsKKworCWUgPSBpbnNlcnRfb2JqZWN0KCZvaWQpOworCWlmIChtYXJrKQorCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKKwlpZiAoZS0+aWR4Lm9mZnNldCkgeworCQlkdXBsaWNhdGVfY291bnRfYnlfdHlwZVt0eXBlXSsrOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGZpbmRfc2hhMV9wYWNrKG9pZC5oYXNoLAorCQkJCSAgZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSkpKSB7CisJCWUtPnR5cGUgPSB0eXBlOworCQllLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJCWUtPmlkeC5vZmZzZXQgPSAxOyAvKiBqdXN0IG5vdCB6ZXJvISAqLworCQlkdXBsaWNhdGVfY291bnRfYnlfdHlwZVt0eXBlXSsrOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAobGFzdCAmJiBsYXN0LT5kYXRhLmxlbiAmJiBsYXN0LT5kYXRhLmJ1ZiAmJiBsYXN0LT5kZXB0aCA8IG1heF9kZXB0aAorCQkmJiBkYXQtPmxlbiA+IHRoZV9oYXNoX2FsZ28tPnJhd3N6KSB7CisKKwkJZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVt0eXBlXSsrOworCQlkZWx0YSA9IGRpZmZfZGVsdGEobGFzdC0+ZGF0YS5idWYsIGxhc3QtPmRhdGEubGVuLAorCQkJZGF0LT5idWYsIGRhdC0+bGVuLAorCQkJJmRlbHRhbGVuLCBkYXQtPmxlbiAtIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwl9IGVsc2UKKwkJZGVsdGEgPSBOVUxMOworCisJZ2l0X2RlZmxhdGVfaW5pdCgmcywgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisJaWYgKGRlbHRhKSB7CisJCXMubmV4dF9pbiA9IGRlbHRhOworCQlzLmF2YWlsX2luID0gZGVsdGFsZW47CisJfSBlbHNlIHsKKwkJcy5uZXh0X2luID0gKHZvaWQgKilkYXQtPmJ1ZjsKKwkJcy5hdmFpbF9pbiA9IGRhdC0+bGVuOworCX0KKwlzLmF2YWlsX291dCA9IGdpdF9kZWZsYXRlX2JvdW5kKCZzLCBzLmF2YWlsX2luKTsKKwlzLm5leHRfb3V0ID0gb3V0ID0geG1hbGxvYyhzLmF2YWlsX291dCk7CisJd2hpbGUgKGdpdF9kZWZsYXRlKCZzLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJOyAvKiBub3RoaW5nICovCisJZ2l0X2RlZmxhdGVfZW5kKCZzKTsKKworCS8qIERldGVybWluZSBpZiB3ZSBzaG91bGQgYXV0by1jaGVja3BvaW50LiAqLworCWlmICgobWF4X3BhY2tzaXplCisJCSYmIChwYWNrX3NpemUgKyBQQUNLX1NJWkVfVEhSRVNIT0xEICsgcy50b3RhbF9vdXQpID4gbWF4X3BhY2tzaXplKQorCQl8fCAocGFja19zaXplICsgUEFDS19TSVpFX1RIUkVTSE9MRCArIHMudG90YWxfb3V0KSA8IHBhY2tfc2l6ZSkgeworCisJCS8qIFRoaXMgbmV3IG9iamVjdCBuZWVkcyB0byAqbm90KiBoYXZlIHRoZSBjdXJyZW50IHBhY2tfaWQuICovCisJCWUtPnBhY2tfaWQgPSBwYWNrX2lkICsgMTsKKwkJY3ljbGVfcGFja2ZpbGUoKTsKKworCQkvKiBXZSBjYW5ub3QgY2FycnkgYSBkZWx0YSBpbnRvIHRoZSBuZXcgcGFjay4gKi8KKwkJaWYgKGRlbHRhKSB7CisJCQlGUkVFX0FORF9OVUxMKGRlbHRhKTsKKworCQkJZ2l0X2RlZmxhdGVfaW5pdCgmcywgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7CisJCQlzLm5leHRfaW4gPSAodm9pZCAqKWRhdC0+YnVmOworCQkJcy5hdmFpbF9pbiA9IGRhdC0+bGVuOworCQkJcy5hdmFpbF9vdXQgPSBnaXRfZGVmbGF0ZV9ib3VuZCgmcywgcy5hdmFpbF9pbik7CisJCQlzLm5leHRfb3V0ID0gb3V0ID0geHJlYWxsb2Mob3V0LCBzLmF2YWlsX291dCk7CisJCQl3aGlsZSAoZ2l0X2RlZmxhdGUoJnMsIFpfRklOSVNIKSA9PSBaX09LKQorCQkJCTsgLyogbm90aGluZyAqLworCQkJZ2l0X2RlZmxhdGVfZW5kKCZzKTsKKwkJfQorCX0KKworCWUtPnR5cGUgPSB0eXBlOworCWUtPnBhY2tfaWQgPSBwYWNrX2lkOworCWUtPmlkeC5vZmZzZXQgPSBwYWNrX3NpemU7CisJb2JqZWN0X2NvdW50Kys7CisJb2JqZWN0X2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKKworCWNyYzMyX2JlZ2luKHBhY2tfZmlsZSk7CisKKwlpZiAoZGVsdGEpIHsKKwkJb2ZmX3Qgb2ZzID0gZS0+aWR4Lm9mZnNldCAtIGxhc3QtPm9mZnNldDsKKwkJdW5zaWduZWQgcG9zID0gc2l6ZW9mKGhkcikgLSAxOworCisJCWRlbHRhX2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKKwkJZS0+ZGVwdGggPSBsYXN0LT5kZXB0aCArIDE7CisKKwkJaGRybGVuID0gZW5jb2RlX2luX3BhY2tfb2JqZWN0X2hlYWRlcihoZHIsIHNpemVvZihoZHIpLAorCQkJCQkJICAgICAgT0JKX09GU19ERUxUQSwgZGVsdGFsZW4pOworCQloYXNod3JpdGUocGFja19maWxlLCBoZHIsIGhkcmxlbik7CisJCXBhY2tfc2l6ZSArPSBoZHJsZW47CisKKwkJaGRyW3Bvc10gPSBvZnMgJiAxMjc7CisJCXdoaWxlIChvZnMgPj49IDcpCisJCQloZHJbLS1wb3NdID0gMTI4IHwgKC0tb2ZzICYgMTI3KTsKKwkJaGFzaHdyaXRlKHBhY2tfZmlsZSwgaGRyICsgcG9zLCBzaXplb2YoaGRyKSAtIHBvcyk7CisJCXBhY2tfc2l6ZSArPSBzaXplb2YoaGRyKSAtIHBvczsKKwl9IGVsc2UgeworCQllLT5kZXB0aCA9IDA7CisJCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIoaGRyLCBzaXplb2YoaGRyKSwKKwkJCQkJCSAgICAgIHR5cGUsIGRhdC0+bGVuKTsKKwkJaGFzaHdyaXRlKHBhY2tfZmlsZSwgaGRyLCBoZHJsZW4pOworCQlwYWNrX3NpemUgKz0gaGRybGVuOworCX0KKworCWhhc2h3cml0ZShwYWNrX2ZpbGUsIG91dCwgcy50b3RhbF9vdXQpOworCXBhY2tfc2l6ZSArPSBzLnRvdGFsX291dDsKKworCWUtPmlkeC5jcmMzMiA9IGNyYzMyX2VuZChwYWNrX2ZpbGUpOworCisJZnJlZShvdXQpOworCWZyZWUoZGVsdGEpOworCWlmIChsYXN0KSB7CisJCWlmIChsYXN0LT5ub19zd2FwKSB7CisJCQlsYXN0LT5kYXRhID0gKmRhdDsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9zd2FwKCZsYXN0LT5kYXRhLCBkYXQpOworCQl9CisJCWxhc3QtPm9mZnNldCA9IGUtPmlkeC5vZmZzZXQ7CisJCWxhc3QtPmRlcHRoID0gZS0+ZGVwdGg7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0cnVuY2F0ZV9wYWNrKHN0cnVjdCBoYXNoZmlsZV9jaGVja3BvaW50ICpjaGVja3BvaW50KQoreworCWlmIChoYXNoZmlsZV90cnVuY2F0ZShwYWNrX2ZpbGUsIGNoZWNrcG9pbnQpKQorCQlkaWVfZXJybm8oImNhbm5vdCB0cnVuY2F0ZSBwYWNrIHRvIHNraXAgZHVwbGljYXRlIik7CisJcGFja19zaXplID0gY2hlY2twb2ludC0+b2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBzdHJlYW1fYmxvYih1aW50bWF4X3QgbGVuLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRvdXQsIHVpbnRtYXhfdCBtYXJrKQoreworCXNpemVfdCBpbl9zeiA9IDY0ICogMTAyNCwgb3V0X3N6ID0gNjQgKiAxMDI0OworCXVuc2lnbmVkIGNoYXIgKmluX2J1ZiA9IHhtYWxsb2MoaW5fc3opOworCXVuc2lnbmVkIGNoYXIgKm91dF9idWYgPSB4bWFsbG9jKG91dF9zeik7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl1bnNpZ25lZCBsb25nIGhkcmxlbjsKKwlvZmZfdCBvZmZzZXQ7CisJZ2l0X2hhc2hfY3R4IGM7CisJZ2l0X3pzdHJlYW0gczsKKwlzdHJ1Y3QgaGFzaGZpbGVfY2hlY2twb2ludCBjaGVja3BvaW50OworCWludCBzdGF0dXMgPSBaX09LOworCisJLyogRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBhdXRvLWNoZWNrcG9pbnQuICovCisJaWYgKChtYXhfcGFja3NpemUKKwkJJiYgKHBhY2tfc2l6ZSArIFBBQ0tfU0laRV9USFJFU0hPTEQgKyBsZW4pID4gbWF4X3BhY2tzaXplKQorCQl8fCAocGFja19zaXplICsgUEFDS19TSVpFX1RIUkVTSE9MRCArIGxlbikgPCBwYWNrX3NpemUpCisJCWN5Y2xlX3BhY2tmaWxlKCk7CisKKwloYXNoZmlsZV9jaGVja3BvaW50KHBhY2tfZmlsZSwgJmNoZWNrcG9pbnQpOworCW9mZnNldCA9IGNoZWNrcG9pbnQub2Zmc2V0OworCisJaGRybGVuID0geHNucHJpbnRmKChjaGFyICopb3V0X2J1Ziwgb3V0X3N6LCAiYmxvYiAlIiBQUkl1TUFYLCBsZW4pICsgMTsKKworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmMpOworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmYywgb3V0X2J1ZiwgaGRybGVuKTsKKworCWNyYzMyX2JlZ2luKHBhY2tfZmlsZSk7CisKKwlnaXRfZGVmbGF0ZV9pbml0KCZzLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKworCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIob3V0X2J1Ziwgb3V0X3N6LCBPQkpfQkxPQiwgbGVuKTsKKworCXMubmV4dF9vdXQgPSBvdXRfYnVmICsgaGRybGVuOworCXMuYXZhaWxfb3V0ID0gb3V0X3N6IC0gaGRybGVuOworCisJd2hpbGUgKHN0YXR1cyAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJaWYgKDAgPCBsZW4gJiYgIXMuYXZhaWxfaW4pIHsKKwkJCXNpemVfdCBjbnQgPSBpbl9zeiA8IGxlbiA/IGluX3N6IDogKHNpemVfdClsZW47CisJCQlzaXplX3QgbiA9IGZyZWFkKGluX2J1ZiwgMSwgY250LCBzdGRpbik7CisJCQlpZiAoIW4gJiYgZmVvZihzdGRpbikpCisJCQkJZGllKCJFT0YgaW4gZGF0YSAoJSIgUFJJdU1BWCAiIGJ5dGVzIHJlbWFpbmluZykiLCBsZW4pOworCisJCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJmMsIGluX2J1Ziwgbik7CisJCQlzLm5leHRfaW4gPSBpbl9idWY7CisJCQlzLmF2YWlsX2luID0gbjsKKwkJCWxlbiAtPSBuOworCQl9CisKKwkJc3RhdHVzID0gZ2l0X2RlZmxhdGUoJnMsIGxlbiA/IDAgOiBaX0ZJTklTSCk7CisKKwkJaWYgKCFzLmF2YWlsX291dCB8fCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlzaXplX3QgbiA9IHMubmV4dF9vdXQgLSBvdXRfYnVmOworCQkJaGFzaHdyaXRlKHBhY2tfZmlsZSwgb3V0X2J1Ziwgbik7CisJCQlwYWNrX3NpemUgKz0gbjsKKwkJCXMubmV4dF9vdXQgPSBvdXRfYnVmOworCQkJcy5hdmFpbF9vdXQgPSBvdXRfc3o7CisJCX0KKworCQlzd2l0Y2ggKHN0YXR1cykgeworCQljYXNlIFpfT0s6CisJCWNhc2UgWl9CVUZfRVJST1I6CisJCWNhc2UgWl9TVFJFQU1fRU5EOgorCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQlkaWUoInVuZXhwZWN0ZWQgZGVmbGF0ZSBmYWlsdXJlOiAlZCIsIHN0YXR1cyk7CisJCX0KKwl9CisJZ2l0X2RlZmxhdGVfZW5kKCZzKTsKKwl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihvaWQuaGFzaCwgJmMpOworCisJaWYgKG9pZG91dCkKKwkJb2lkY3B5KG9pZG91dCwgJm9pZCk7CisKKwllID0gaW5zZXJ0X29iamVjdCgmb2lkKTsKKworCWlmIChtYXJrKQorCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKKworCWlmIChlLT5pZHgub2Zmc2V0KSB7CisJCWR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW09CSl9CTE9CXSsrOworCQl0cnVuY2F0ZV9wYWNrKCZjaGVja3BvaW50KTsKKworCX0gZWxzZSBpZiAoZmluZF9zaGExX3BhY2sob2lkLmhhc2gsCisJCQkJICBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KSkpIHsKKwkJZS0+dHlwZSA9IE9CSl9CTE9COworCQllLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJCWUtPmlkeC5vZmZzZXQgPSAxOyAvKiBqdXN0IG5vdCB6ZXJvISAqLworCQlkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0rKzsKKwkJdHJ1bmNhdGVfcGFjaygmY2hlY2twb2ludCk7CisKKwl9IGVsc2UgeworCQllLT5kZXB0aCA9IDA7CisJCWUtPnR5cGUgPSBPQkpfQkxPQjsKKwkJZS0+cGFja19pZCA9IHBhY2tfaWQ7CisJCWUtPmlkeC5vZmZzZXQgPSBvZmZzZXQ7CisJCWUtPmlkeC5jcmMzMiA9IGNyYzMyX2VuZChwYWNrX2ZpbGUpOworCQlvYmplY3RfY291bnQrKzsKKwkJb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX0JMT0JdKys7CisJfQorCisJZnJlZShpbl9idWYpOworCWZyZWUob3V0X2J1Zik7Cit9CisKKy8qIEFsbCBjYWxscyBtdXN0IGJlIGd1YXJkZWQgYnkgZmluZF9vYmplY3QoKSBvciBmaW5kX21hcmsoKSB0bworICogZW5zdXJlIHRoZSAnc3RydWN0IG9iamVjdF9lbnRyeScgcGFzc2VkIHdhcyB3cml0dGVuIGJ5IHRoaXMKKyAqIHByb2Nlc3MgaW5zdGFuY2UuICBXZSB1bnBhY2sgdGhlIGVudHJ5IGJ5IHRoZSBvZmZzZXQsIGF2b2lkaW5nCisgKiB0aGUgbmVlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgLmlkeCBmaWxlLiAgVGhpcyB1bnBhY2tpbmcgcnVsZQorICogd29ya3MgYmVjYXVzZSB3ZSBvbmx5IHVzZSBPQkpfUkVGX0RFTFRBIHdpdGhpbiB0aGUgcGFja2ZpbGVzCisgKiBjcmVhdGVkIGJ5IGZhc3QtaW1wb3J0LgorICoKKyAqIG9lIG11c3Qgbm90IGJlIE5VTEwuICBTdWNoIGFuIG9lIHVzdWFsbHkgY29tZXMgZnJvbSBnaXZpbmcKKyAqIGFuIHVua25vd24gU0hBLTEgdG8gZmluZF9vYmplY3QoKSBvciBhbiB1bmRlZmluZWQgbWFyayB0bworICogZmluZF9tYXJrKCkuICBDYWxsZXJzIG11c3QgdGVzdCBmb3IgdGhpcyBjb25kaXRpb24gYW5kIHVzZQorICogdGhlIHN0YW5kYXJkIHJlYWRfc2hhMV9maWxlKCkgd2hlbiBpdCBoYXBwZW5zLgorICoKKyAqIG9lLT5wYWNrX2lkIG11c3Qgbm90IGJlIE1BWF9QQUNLX0lELiAgU3VjaCBhbiBvZSBpcyB1c3VhbGx5IGZyb20KKyAqIGZpbmRfbWFyaygpLCB3aGVyZSB0aGUgbWFyayB3YXMgcmVsb2FkZWQgZnJvbSBhbiBleGlzdGluZyBtYXJrcworICogZmlsZSBhbmQgaXMgcmVmZXJlbmNpbmcgYW4gb2JqZWN0IHRoYXQgdGhpcyBmYXN0LWltcG9ydCBwcm9jZXNzCisgKiBpbnN0YW5jZSBkaWQgbm90IHdyaXRlIG91dCB0byBhIHBhY2tmaWxlLiAgQ2FsbGVycyBtdXN0IHRlc3QgZm9yCisgKiB0aGlzIGNvbmRpdGlvbiBhbmQgdXNlIHJlYWRfc2hhMV9maWxlKCkgaW5zdGVhZC4KKyAqLworc3RhdGljIHZvaWQgKmdmaV91bnBhY2tfZW50cnkoCisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2UsCisJdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gYWxsX3BhY2tzW29lLT5wYWNrX2lkXTsKKwlpZiAocCA9PSBwYWNrX2RhdGEgJiYgcC0+cGFja19zaXplIDwgKHBhY2tfc2l6ZSArIHRoZV9oYXNoX2FsZ28tPnJhd3N6KSkgeworCQkvKiBUaGUgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgcGFja2ZpbGUgd2UgYXJlIHdyaXRpbmcgdG8KKwkJICogYW5kIHdlIGhhdmUgbW9kaWZpZWQgaXQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzY2FubmVkCisJCSAqIGJhY2sgdG8gcmVhZCBhIHByZXZpb3VzbHkgd3JpdHRlbiBvYmplY3QuICBJZiBhbiBvbGQKKwkJICogd2luZG93IGNvdmVyZWQgW3AtPnBhY2tfc2l6ZSwgcC0+cGFja19zaXplICsgcmF3c3opIGl0cworCQkgKiBkYXRhIGlzIHN0YWxlIGFuZCBpcyBub3QgdmFsaWQuICBDbG9zaW5nIGFsbCB3aW5kb3dzCisJCSAqIGFuZCB1cGRhdGluZyB0aGUgcGFja2ZpbGUgbGVuZ3RoIGVuc3VyZXMgd2UgY2FuIHJlYWQKKwkJICogdGhlIG5ld2x5IHdyaXR0ZW4gZGF0YS4KKwkJICovCisJCWNsb3NlX3BhY2tfd2luZG93cyhwKTsKKwkJaGFzaGZsdXNoKHBhY2tfZmlsZSk7CisKKwkJLyogV2UgaGF2ZSB0byBvZmZlciByYXdzeiBieXRlcyBhZGRpdGlvbmFsIG9uIHRoZSBlbmQgb2YKKwkJICogdGhlIHBhY2tmaWxlIGFzIHRoZSBjb3JlIHVucGFja2VyIGNvZGUgYXNzdW1lcyB0aGUKKwkJICogZm9vdGVyIGlzIHByZXNlbnQgYXQgdGhlIGZpbGUgZW5kIGFuZCBtdXN0IHByb21pc2UKKwkJICogYXQgbGVhc3QgcmF3c3ogYnl0ZXMgd2l0aGluIGFueSB3aW5kb3cgaXQgbWFwcy4gIEJ1dAorCQkgKiB3ZSBkb24ndCBhY3R1YWxseSBjcmVhdGUgdGhlIGZvb3RlciBoZXJlLgorCQkgKi8KKwkJcC0+cGFja19zaXplID0gcGFja19zaXplICsgdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJfQorCXJldHVybiB1bnBhY2tfZW50cnkodGhlX3JlcG9zaXRvcnksIHAsIG9lLT5pZHgub2Zmc2V0LCAmdHlwZSwgc2l6ZXApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X21vZGUoY29uc3QgY2hhciAqc3RyLCB1aW50MTZfdCAqbW9kZXApCit7CisJdW5zaWduZWQgY2hhciBjOworCXVpbnQxNl90IG1vZGUgPSAwOworCisJd2hpbGUgKChjID0gKnN0cisrKSAhPSAnICcpIHsKKwkJaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKKwkJCXJldHVybiBOVUxMOworCQltb2RlID0gKG1vZGUgPDwgMykgKyAoYyAtICcwJyk7CisJfQorCSptb2RlcCA9IG1vZGU7CisJcmV0dXJuIHN0cjsKK30KKworc3RhdGljIHZvaWQgbG9hZF90cmVlKHN0cnVjdCB0cmVlX2VudHJ5ICpyb290KQoreworCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZyb290LT52ZXJzaW9uc1sxXS5vaWQ7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqbXlvZTsKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljaGFyICpidWY7CisJY29uc3QgY2hhciAqYzsKKworCXJvb3QtPnRyZWUgPSB0ID0gbmV3X3RyZWVfY29udGVudCg4KTsKKwlpZiAoaXNfbnVsbF9vaWQob2lkKSkKKwkJcmV0dXJuOworCisJbXlvZSA9IGZpbmRfb2JqZWN0KG9pZCk7CisJaWYgKG15b2UgJiYgbXlvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgeworCQlpZiAobXlvZS0+dHlwZSAhPSBPQkpfVFJFRSkKKwkJCWRpZSgiTm90IGEgdHJlZTogJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCQl0LT5kZWx0YV9kZXB0aCA9IG15b2UtPmRlcHRoOworCQlidWYgPSBnZmlfdW5wYWNrX2VudHJ5KG15b2UsICZzaXplKTsKKwkJaWYgKCFidWYpCisJCQlkaWUoIkNhbid0IGxvYWQgdHJlZSAlcyIsIG9pZF90b19oZXgob2lkKSk7CisJfSBlbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlidWYgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWYgfHwgdHlwZSAhPSBPQkpfVFJFRSkKKwkJCWRpZSgiQ2FuJ3QgbG9hZCB0cmVlICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwl9CisKKwljID0gYnVmOworCXdoaWxlIChjICE9IChidWYgKyBzaXplKSkgeworCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSA9IG5ld190cmVlX2VudHJ5KCk7CisKKwkJaWYgKHQtPmVudHJ5X2NvdW50ID09IHQtPmVudHJ5X2NhcGFjaXR5KQorCQkJcm9vdC0+dHJlZSA9IHQgPSBncm93X3RyZWVfY29udGVudCh0LCB0LT5lbnRyeV9jb3VudCk7CisJCXQtPmVudHJpZXNbdC0+ZW50cnlfY291bnQrK10gPSBlOworCisJCWUtPnRyZWUgPSBOVUxMOworCQljID0gZ2V0X21vZGUoYywgJmUtPnZlcnNpb25zWzFdLm1vZGUpOworCQlpZiAoIWMpCisJCQlkaWUoIkNvcnJ1cHQgbW9kZSBpbiAlcyIsIG9pZF90b19oZXgob2lkKSk7CisJCWUtPnZlcnNpb25zWzBdLm1vZGUgPSBlLT52ZXJzaW9uc1sxXS5tb2RlOworCQllLT5uYW1lID0gdG9fYXRvbShjLCBzdHJsZW4oYykpOworCQljICs9IGUtPm5hbWUtPnN0cl9sZW4gKyAxOworCQloYXNoY3B5KGUtPnZlcnNpb25zWzBdLm9pZC5oYXNoLCAodW5zaWduZWQgY2hhciAqKWMpOworCQloYXNoY3B5KGUtPnZlcnNpb25zWzFdLm9pZC5oYXNoLCAodW5zaWduZWQgY2hhciAqKWMpOworCQljICs9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCX0KKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgdGVjbXAwIChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IHRyZWVfZW50cnkgKmEgPSAqKChzdHJ1Y3QgdHJlZV9lbnRyeSoqKV9hKTsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYiA9ICooKHN0cnVjdCB0cmVlX2VudHJ5KiopX2IpOworCXJldHVybiBiYXNlX25hbWVfY29tcGFyZSgKKwkJYS0+bmFtZS0+c3RyX2RhdCwgYS0+bmFtZS0+c3RyX2xlbiwgYS0+dmVyc2lvbnNbMF0ubW9kZSwKKwkJYi0+bmFtZS0+c3RyX2RhdCwgYi0+bmFtZS0+c3RyX2xlbiwgYi0+dmVyc2lvbnNbMF0ubW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgdGVjbXAxIChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IHRyZWVfZW50cnkgKmEgPSAqKChzdHJ1Y3QgdHJlZV9lbnRyeSoqKV9hKTsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYiA9ICooKHN0cnVjdCB0cmVlX2VudHJ5KiopX2IpOworCXJldHVybiBiYXNlX25hbWVfY29tcGFyZSgKKwkJYS0+bmFtZS0+c3RyX2RhdCwgYS0+bmFtZS0+c3RyX2xlbiwgYS0+dmVyc2lvbnNbMV0ubW9kZSwKKwkJYi0+bmFtZS0+c3RyX2RhdCwgYi0+bmFtZS0+c3RyX2xlbiwgYi0+dmVyc2lvbnNbMV0ubW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1rdHJlZShzdHJ1Y3QgdHJlZV9jb250ZW50ICp0LCBpbnQgdiwgc3RydWN0IHN0cmJ1ZiAqYikKK3sKKwlzaXplX3QgbWF4bGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghdikKKwkJUVNPUlQodC0+ZW50cmllcywgdC0+ZW50cnlfY291bnQsIHRlY21wMCk7CisJZWxzZQorCQlRU09SVCh0LT5lbnRyaWVzLCB0LT5lbnRyeV9jb3VudCwgdGVjbXAxKTsKKworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWlmICh0LT5lbnRyaWVzW2ldLT52ZXJzaW9uc1t2XS5tb2RlKQorCQkJbWF4bGVuICs9IHQtPmVudHJpZXNbaV0tPm5hbWUtPnN0cl9sZW4gKyAzNDsKKwl9CisKKwlzdHJidWZfcmVzZXQoYik7CisJc3RyYnVmX2dyb3coYiwgbWF4bGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSA9IHQtPmVudHJpZXNbaV07CisJCWlmICghZS0+dmVyc2lvbnNbdl0ubW9kZSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfYWRkZihiLCAiJW8gJXMlYyIsCisJCQkodW5zaWduZWQgaW50KShlLT52ZXJzaW9uc1t2XS5tb2RlICYgfk5PX0RFTFRBKSwKKwkJCWUtPm5hbWUtPnN0cl9kYXQsICdcMCcpOworCQlzdHJidWZfYWRkKGIsIGUtPnZlcnNpb25zW3ZdLm9pZC5oYXNoLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9yZV90cmVlKHN0cnVjdCB0cmVlX2VudHJ5ICpyb290KQoreworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQ7CisJdW5zaWduZWQgaW50IGksIGosIGRlbDsKKwlzdHJ1Y3QgbGFzdF9vYmplY3QgbG8gPSB7IFNUUkJVRl9JTklULCAwLCAwLCAvKiBub19zd2FwICovIDEgfTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpsZSA9IE5VTEw7CisKKwlpZiAoIWlzX251bGxfb2lkKCZyb290LT52ZXJzaW9uc1sxXS5vaWQpKQorCQlyZXR1cm47CisKKwlpZiAoIXJvb3QtPnRyZWUpCisJCWxvYWRfdHJlZShyb290KTsKKwl0ID0gcm9vdC0+dHJlZTsKKworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWlmICh0LT5lbnRyaWVzW2ldLT50cmVlKQorCQkJc3RvcmVfdHJlZSh0LT5lbnRyaWVzW2ldKTsKKwl9CisKKwlpZiAoIShyb290LT52ZXJzaW9uc1swXS5tb2RlICYgTk9fREVMVEEpKQorCQlsZSA9IGZpbmRfb2JqZWN0KCZyb290LT52ZXJzaW9uc1swXS5vaWQpOworCWlmIChTX0lTRElSKHJvb3QtPnZlcnNpb25zWzBdLm1vZGUpICYmIGxlICYmIGxlLT5wYWNrX2lkID09IHBhY2tfaWQpIHsKKwkJbWt0cmVlKHQsIDAsICZvbGRfdHJlZSk7CisJCWxvLmRhdGEgPSBvbGRfdHJlZTsKKwkJbG8ub2Zmc2V0ID0gbGUtPmlkeC5vZmZzZXQ7CisJCWxvLmRlcHRoID0gdC0+ZGVsdGFfZGVwdGg7CisJfQorCisJbWt0cmVlKHQsIDEsICZuZXdfdHJlZSk7CisJc3RvcmVfb2JqZWN0KE9CSl9UUkVFLCAmbmV3X3RyZWUsICZsbywgJnJvb3QtPnZlcnNpb25zWzFdLm9pZCwgMCk7CisKKwl0LT5kZWx0YV9kZXB0aCA9IGxvLmRlcHRoOworCWZvciAoaSA9IDAsIGogPSAwLCBkZWwgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSA9IHQtPmVudHJpZXNbaV07CisJCWlmIChlLT52ZXJzaW9uc1sxXS5tb2RlKSB7CisJCQllLT52ZXJzaW9uc1swXS5tb2RlID0gZS0+dmVyc2lvbnNbMV0ubW9kZTsKKwkJCW9pZGNweSgmZS0+dmVyc2lvbnNbMF0ub2lkLCAmZS0+dmVyc2lvbnNbMV0ub2lkKTsKKwkJCXQtPmVudHJpZXNbaisrXSA9IGU7CisJCX0gZWxzZSB7CisJCQlyZWxlYXNlX3RyZWVfZW50cnkoZSk7CisJCQlkZWwrKzsKKwkJfQorCX0KKwl0LT5lbnRyeV9jb3VudCAtPSBkZWw7Cit9CisKK3N0YXRpYyB2b2lkIHRyZWVfY29udGVudF9yZXBsYWNlKAorCXN0cnVjdCB0cmVlX2VudHJ5ICpyb290LAorCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwljb25zdCB1aW50MTZfdCBtb2RlLAorCXN0cnVjdCB0cmVlX2NvbnRlbnQgKm5ld3RyZWUpCit7CisJaWYgKCFTX0lTRElSKG1vZGUpKQorCQlkaWUoIlJvb3QgY2Fubm90IGJlIGEgbm9uLWRpcmVjdG9yeSIpOworCW9pZGNscigmcm9vdC0+dmVyc2lvbnNbMF0ub2lkKTsKKwlvaWRjcHkoJnJvb3QtPnZlcnNpb25zWzFdLm9pZCwgb2lkKTsKKwlpZiAocm9vdC0+dHJlZSkKKwkJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKHJvb3QtPnRyZWUpOworCXJvb3QtPnRyZWUgPSBuZXd0cmVlOworfQorCitzdGF0aWMgaW50IHRyZWVfY29udGVudF9zZXQoCisJc3RydWN0IHRyZWVfZW50cnkgKnJvb3QsCisJY29uc3QgY2hhciAqcCwKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJY29uc3QgdWludDE2X3QgbW9kZSwKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICpzdWJ0cmVlKQoreworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQ7CisJY29uc3QgY2hhciAqc2xhc2gxOworCXVuc2lnbmVkIGludCBpLCBuOworCXN0cnVjdCB0cmVlX2VudHJ5ICplOworCisJc2xhc2gxID0gc3RyY2hybnVsKHAsICcvJyk7CisJbiA9IHNsYXNoMSAtIHA7CisJaWYgKCFuKQorCQlkaWUoIkVtcHR5IHBhdGggY29tcG9uZW50IGZvdW5kIGluIGlucHV0Iik7CisJaWYgKCEqc2xhc2gxICYmICFTX0lTRElSKG1vZGUpICYmIHN1YnRyZWUpCisJCWRpZSgiTm9uLWRpcmVjdG9yaWVzIGNhbm5vdCBoYXZlIHN1YnRyZWVzIik7CisKKwlpZiAoIXJvb3QtPnRyZWUpCisJCWxvYWRfdHJlZShyb290KTsKKwl0ID0gcm9vdC0+dHJlZTsKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQllID0gdC0+ZW50cmllc1tpXTsKKwkJaWYgKGUtPm5hbWUtPnN0cl9sZW4gPT0gbiAmJiAhZnNwYXRobmNtcChwLCBlLT5uYW1lLT5zdHJfZGF0LCBuKSkgeworCQkJaWYgKCEqc2xhc2gxKSB7CisJCQkJaWYgKCFTX0lTRElSKG1vZGUpCisJCQkJCQkmJiBlLT52ZXJzaW9uc1sxXS5tb2RlID09IG1vZGUKKwkJCQkJCSYmIG9pZGVxKCZlLT52ZXJzaW9uc1sxXS5vaWQsIG9pZCkpCisJCQkJCXJldHVybiAwOworCQkJCWUtPnZlcnNpb25zWzFdLm1vZGUgPSBtb2RlOworCQkJCW9pZGNweSgmZS0+dmVyc2lvbnNbMV0ub2lkLCBvaWQpOworCQkJCWlmIChlLT50cmVlKQorCQkJCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+dHJlZSk7CisJCQkJZS0+dHJlZSA9IHN1YnRyZWU7CisKKwkJCQkvKgorCQkJCSAqIFdlIG5lZWQgdG8gbGVhdmUgZS0+dmVyc2lvbnNbMF0uc2hhMSBhbG9uZQorCQkJCSAqIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUgcHJlaW1hZ2UgdHJlZSB1c2VkCisJCQkJICogd2hlbiB3cml0aW5nIG91dCB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKwkJCQkgKiBCdXQgYWZ0ZXIgcmVwbGFjaW5nIHRoZSBzdWJkaXIgd2l0aCBhCisJCQkJICogY29tcGxldGVseSBkaWZmZXJlbnQgb25lLCBpdCdzIG5vdCBhIGdvb2QKKwkJCQkgKiBkZWx0YSBiYXNlIGFueSBtb3JlLCBhbmQgYmVzaWRlcywgd2UndmUKKwkJCQkgKiB0aHJvd24gYXdheSB0aGUgdHJlZSBlbnRyaWVzIG5lZWRlZCB0bworCQkJCSAqIG1ha2UgYSBkZWx0YSBhZ2FpbnN0IGl0LgorCQkJCSAqCisJCQkJICogU28gbGV0J3MganVzdCBleHBsaWNpdGx5IGRpc2FibGUgZGVsdGFzCisJCQkJICogZm9yIHRoZSBzdWJ0cmVlLgorCQkJCSAqLworCQkJCWlmIChTX0lTRElSKGUtPnZlcnNpb25zWzBdLm1vZGUpKQorCQkJCQllLT52ZXJzaW9uc1swXS5tb2RlIHw9IE5PX0RFTFRBOworCisJCQkJb2lkY2xyKCZyb290LT52ZXJzaW9uc1sxXS5vaWQpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJaWYgKCFTX0lTRElSKGUtPnZlcnNpb25zWzFdLm1vZGUpKSB7CisJCQkJZS0+dHJlZSA9IG5ld190cmVlX2NvbnRlbnQoOCk7CisJCQkJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IFNfSUZESVI7CisJCQl9CisJCQlpZiAoIWUtPnRyZWUpCisJCQkJbG9hZF90cmVlKGUpOworCQkJaWYgKHRyZWVfY29udGVudF9zZXQoZSwgc2xhc2gxICsgMSwgb2lkLCBtb2RlLCBzdWJ0cmVlKSkgeworCQkJCW9pZGNscigmcm9vdC0+dmVyc2lvbnNbMV0ub2lkKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKHQtPmVudHJ5X2NvdW50ID09IHQtPmVudHJ5X2NhcGFjaXR5KQorCQlyb290LT50cmVlID0gdCA9IGdyb3dfdHJlZV9jb250ZW50KHQsIHQtPmVudHJ5X2NvdW50KTsKKwllID0gbmV3X3RyZWVfZW50cnkoKTsKKwllLT5uYW1lID0gdG9fYXRvbShwLCBuKTsKKwllLT52ZXJzaW9uc1swXS5tb2RlID0gMDsKKwlvaWRjbHIoJmUtPnZlcnNpb25zWzBdLm9pZCk7CisJdC0+ZW50cmllc1t0LT5lbnRyeV9jb3VudCsrXSA9IGU7CisJaWYgKCpzbGFzaDEpIHsKKwkJZS0+dHJlZSA9IG5ld190cmVlX2NvbnRlbnQoOCk7CisJCWUtPnZlcnNpb25zWzFdLm1vZGUgPSBTX0lGRElSOworCQl0cmVlX2NvbnRlbnRfc2V0KGUsIHNsYXNoMSArIDEsIG9pZCwgbW9kZSwgc3VidHJlZSk7CisJfSBlbHNlIHsKKwkJZS0+dHJlZSA9IHN1YnRyZWU7CisJCWUtPnZlcnNpb25zWzFdLm1vZGUgPSBtb2RlOworCQlvaWRjcHkoJmUtPnZlcnNpb25zWzFdLm9pZCwgb2lkKTsKKwl9CisJb2lkY2xyKCZyb290LT52ZXJzaW9uc1sxXS5vaWQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRyZWVfY29udGVudF9yZW1vdmUoCisJc3RydWN0IHRyZWVfZW50cnkgKnJvb3QsCisJY29uc3QgY2hhciAqcCwKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYmFja3VwX2xlYWYsCisJaW50IGFsbG93X3Jvb3QpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwljb25zdCBjaGFyICpzbGFzaDE7CisJdW5zaWduZWQgaW50IGksIG47CisJc3RydWN0IHRyZWVfZW50cnkgKmU7CisKKwlzbGFzaDEgPSBzdHJjaHJudWwocCwgJy8nKTsKKwluID0gc2xhc2gxIC0gcDsKKworCWlmICghcm9vdC0+dHJlZSkKKwkJbG9hZF90cmVlKHJvb3QpOworCisJaWYgKCEqcCAmJiBhbGxvd19yb290KSB7CisJCWUgPSByb290OworCQlnb3RvIGRlbF9lbnRyeTsKKwl9CisKKwl0ID0gcm9vdC0+dHJlZTsKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQllID0gdC0+ZW50cmllc1tpXTsKKwkJaWYgKGUtPm5hbWUtPnN0cl9sZW4gPT0gbiAmJiAhZnNwYXRobmNtcChwLCBlLT5uYW1lLT5zdHJfZGF0LCBuKSkgeworCQkJaWYgKCpzbGFzaDEgJiYgIVNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpCisJCQkJLyoKKwkJCQkgKiBJZiBwIG5hbWVzIGEgZmlsZSBpbiBzb21lIHN1YmRpcmVjdG9yeSwgYW5kIGEKKwkJCQkgKiBmaWxlIG9yIHN5bWxpbmsgbWF0Y2hpbmcgdGhlIG5hbWUgb2YgdGhlCisJCQkJICogcGFyZW50IGRpcmVjdG9yeSBvZiBwIGV4aXN0cywgdGhlbiBwIGNhbm5vdAorCQkJCSAqIGV4aXN0IGFuZCBuZWVkIG5vdCBiZSBkZWxldGVkLgorCQkJCSAqLworCQkJCXJldHVybiAxOworCQkJaWYgKCEqc2xhc2gxIHx8ICFTX0lTRElSKGUtPnZlcnNpb25zWzFdLm1vZGUpKQorCQkJCWdvdG8gZGVsX2VudHJ5OworCQkJaWYgKCFlLT50cmVlKQorCQkJCWxvYWRfdHJlZShlKTsKKwkJCWlmICh0cmVlX2NvbnRlbnRfcmVtb3ZlKGUsIHNsYXNoMSArIDEsIGJhY2t1cF9sZWFmLCAwKSkgeworCQkJCWZvciAobiA9IDA7IG4gPCBlLT50cmVlLT5lbnRyeV9jb3VudDsgbisrKSB7CisJCQkJCWlmIChlLT50cmVlLT5lbnRyaWVzW25dLT52ZXJzaW9uc1sxXS5tb2RlKSB7CisJCQkJCQlvaWRjbHIoJnJvb3QtPnZlcnNpb25zWzFdLm9pZCk7CisJCQkJCQlyZXR1cm4gMTsKKwkJCQkJfQorCQkJCX0KKwkJCQliYWNrdXBfbGVhZiA9IE5VTEw7CisJCQkJZ290byBkZWxfZW50cnk7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworZGVsX2VudHJ5OgorCWlmIChiYWNrdXBfbGVhZikKKwkJbWVtY3B5KGJhY2t1cF9sZWFmLCBlLCBzaXplb2YoKmJhY2t1cF9sZWFmKSk7CisJZWxzZSBpZiAoZS0+dHJlZSkKKwkJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKGUtPnRyZWUpOworCWUtPnRyZWUgPSBOVUxMOworCWUtPnZlcnNpb25zWzFdLm1vZGUgPSAwOworCW9pZGNscigmZS0+dmVyc2lvbnNbMV0ub2lkKTsKKwlvaWRjbHIoJnJvb3QtPnZlcnNpb25zWzFdLm9pZCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdHJlZV9jb250ZW50X2dldCgKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwljb25zdCBjaGFyICpwLAorCXN0cnVjdCB0cmVlX2VudHJ5ICpsZWFmLAorCWludCBhbGxvd19yb290KQoreworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQ7CisJY29uc3QgY2hhciAqc2xhc2gxOworCXVuc2lnbmVkIGludCBpLCBuOworCXN0cnVjdCB0cmVlX2VudHJ5ICplOworCisJc2xhc2gxID0gc3RyY2hybnVsKHAsICcvJyk7CisJbiA9IHNsYXNoMSAtIHA7CisJaWYgKCFuICYmICFhbGxvd19yb290KQorCQlkaWUoIkVtcHR5IHBhdGggY29tcG9uZW50IGZvdW5kIGluIGlucHV0Iik7CisKKwlpZiAoIXJvb3QtPnRyZWUpCisJCWxvYWRfdHJlZShyb290KTsKKworCWlmICghbikgeworCQllID0gcm9vdDsKKwkJZ290byBmb3VuZF9lbnRyeTsKKwl9CisKKwl0ID0gcm9vdC0+dHJlZTsKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQllID0gdC0+ZW50cmllc1tpXTsKKwkJaWYgKGUtPm5hbWUtPnN0cl9sZW4gPT0gbiAmJiAhZnNwYXRobmNtcChwLCBlLT5uYW1lLT5zdHJfZGF0LCBuKSkgeworCQkJaWYgKCEqc2xhc2gxKQorCQkJCWdvdG8gZm91bmRfZW50cnk7CisJCQlpZiAoIVNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoIWUtPnRyZWUpCisJCQkJbG9hZF90cmVlKGUpOworCQkJcmV0dXJuIHRyZWVfY29udGVudF9nZXQoZSwgc2xhc2gxICsgMSwgbGVhZiwgMCk7CisJCX0KKwl9CisJcmV0dXJuIDA7CisKK2ZvdW5kX2VudHJ5OgorCW1lbWNweShsZWFmLCBlLCBzaXplb2YoKmxlYWYpKTsKKwlpZiAoZS0+dHJlZSAmJiBpc19udWxsX29pZCgmZS0+dmVyc2lvbnNbMV0ub2lkKSkKKwkJbGVhZi0+dHJlZSA9IGR1cF90cmVlX2NvbnRlbnQoZS0+dHJlZSk7CisJZWxzZQorCQlsZWFmLT50cmVlID0gTlVMTDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB1cGRhdGVfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmIpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKm1zZyA9ICJmYXN0LWltcG9ydCI7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoaXNfbnVsbF9vaWQoJmItPm9pZCkpIHsKKwkJaWYgKGItPmRlbGV0ZSkKKwkJCWRlbGV0ZV9yZWYoTlVMTCwgYi0+bmFtZSwgTlVMTCwgMCk7CisJCXJldHVybiAwOworCX0KKwlpZiAocmVhZF9yZWYoYi0+bmFtZSwgJm9sZF9vaWQpKQorCQlvaWRjbHIoJm9sZF9vaWQpOworCWlmICghZm9yY2VfdXBkYXRlICYmICFpc19udWxsX29pZCgmb2xkX29pZCkpIHsKKwkJc3RydWN0IGNvbW1pdCAqb2xkX2NtaXQsICpuZXdfY21pdDsKKworCQlvbGRfY21pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkgICZvbGRfb2lkLCAwKTsKKwkJbmV3X2NtaXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJICAmYi0+b2lkLCAwKTsKKwkJaWYgKCFvbGRfY21pdCB8fCAhbmV3X2NtaXQpCisJCQlyZXR1cm4gZXJyb3IoIkJyYW5jaCAlcyBpcyBtaXNzaW5nIGNvbW1pdHMuIiwgYi0+bmFtZSk7CisKKwkJaWYgKCFpbl9tZXJnZV9iYXNlcyhvbGRfY21pdCwgbmV3X2NtaXQpKSB7CisJCQl3YXJuaW5nKCJOb3QgdXBkYXRpbmcgJXMiCisJCQkJIiAobmV3IHRpcCAlcyBkb2VzIG5vdCBjb250YWluICVzKSIsCisJCQkJYi0+bmFtZSwgb2lkX3RvX2hleCgmYi0+b2lkKSwKKwkJCQlvaWRfdG9faGV4KCZvbGRfb2lkKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbiB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCBiLT5uYW1lLCAmYi0+b2lkLCAmb2xkX29pZCwKKwkJCQkgICAwLCBtc2csICZlcnIpIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKSB7CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlyZXR1cm4gLTE7CisJfQorCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHVtcF9icmFuY2hlcyh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBicmFuY2ggKmI7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnJhbmNoX3RhYmxlX3N6OyBpKyspIHsKKwkJZm9yIChiID0gYnJhbmNoX3RhYmxlW2ldOyBiOyBiID0gYi0+dGFibGVfbmV4dF9icmFuY2gpCisJCQlmYWlsdXJlIHw9IHVwZGF0ZV9icmFuY2goYik7CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX3RhZ3Modm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqbXNnID0gImZhc3QtaW1wb3J0IjsKKwlzdHJ1Y3QgdGFnICp0OworCXN0cnVjdCBzdHJidWYgcmVmX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbikgeworCQlmYWlsdXJlIHw9IGVycm9yKCIlcyIsIGVyci5idWYpOworCQlnb3RvIGNsZWFudXA7CisJfQorCWZvciAodCA9IGZpcnN0X3RhZzsgdDsgdCA9IHQtPm5leHRfdGFnKSB7CisJCXN0cmJ1Zl9yZXNldCgmcmVmX25hbWUpOworCQlzdHJidWZfYWRkZigmcmVmX25hbWUsICJyZWZzL3RhZ3MvJXMiLCB0LT5uYW1lKTsKKworCQlpZiAocmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmX25hbWUuYnVmLAorCQkJCQkgICAmdC0+b2lkLCBOVUxMLCAwLCBtc2csICZlcnIpKSB7CisJCQlmYWlsdXJlIHw9IGVycm9yKCIlcyIsIGVyci5idWYpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCWlmIChyZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkKKwkJZmFpbHVyZSB8PSBlcnJvcigiJXMiLCBlcnIuYnVmKTsKKworIGNsZWFudXA6CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZfbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfbWFya3NfaGVscGVyKEZJTEUgKmYsCisJdWludG1heF90IGJhc2UsCisJc3RydWN0IG1hcmtfc2V0ICptKQoreworCXVpbnRtYXhfdCBrOworCWlmIChtLT5zaGlmdCkgeworCQlmb3IgKGsgPSAwOyBrIDwgMTAyNDsgaysrKSB7CisJCQlpZiAobS0+ZGF0YS5zZXRzW2tdKQorCQkJCWR1bXBfbWFya3NfaGVscGVyKGYsIGJhc2UgKyAoayA8PCBtLT5zaGlmdCksCisJCQkJCW0tPmRhdGEuc2V0c1trXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGsgPSAwOyBrIDwgMTAyNDsgaysrKSB7CisJCQlpZiAobS0+ZGF0YS5tYXJrZWRba10pCisJCQkJZnByaW50ZihmLCAiOiUiIFBSSXVNQVggIiAlc1xuIiwgYmFzZSArIGssCisJCQkJCW9pZF90b19oZXgoJm0tPmRhdGEubWFya2VkW2tdLT5pZHgub2lkKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfbWFya3Modm9pZCkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlIG1hcmtfbG9jayA9IExPQ0tfSU5JVDsKKwlGSUxFICpmOworCisJaWYgKCFleHBvcnRfbWFya3NfZmlsZSB8fCAoaW1wb3J0X21hcmtzX2ZpbGUgJiYgIWltcG9ydF9tYXJrc19maWxlX2RvbmUpKQorCQlyZXR1cm47CisKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChleHBvcnRfbWFya3NfZmlsZSkpIHsKKwkJZmFpbHVyZSB8PSBlcnJvcl9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIiwKKwkJCQkgICAgICAgZXhwb3J0X21hcmtzX2ZpbGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJm1hcmtfbG9jaywgZXhwb3J0X21hcmtzX2ZpbGUsIDApIDwgMCkgeworCQlmYWlsdXJlIHw9IGVycm9yX2Vycm5vKCJVbmFibGUgdG8gd3JpdGUgbWFya3MgZmlsZSAlcyIsCisJCQkJICAgICAgIGV4cG9ydF9tYXJrc19maWxlKTsKKwkJcmV0dXJuOworCX0KKworCWYgPSBmZG9wZW5fbG9ja19maWxlKCZtYXJrX2xvY2ssICJ3Iik7CisJaWYgKCFmKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJm1hcmtfbG9jayk7CisJCWZhaWx1cmUgfD0gZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBtYXJrcyBmaWxlICVzOiAlcyIsCisJCQlleHBvcnRfbWFya3NfZmlsZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCWR1bXBfbWFya3NfaGVscGVyKGYsIDAsIG1hcmtzKTsKKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbWFya19sb2NrKSkgeworCQlmYWlsdXJlIHw9IGVycm9yX2Vycm5vKCJVbmFibGUgdG8gd3JpdGUgZmlsZSAlcyIsCisJCQkJICAgICAgIGV4cG9ydF9tYXJrc19maWxlKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9tYXJrcyh2b2lkKQoreworCWNoYXIgbGluZVs1MTJdOworCUZJTEUgKmYgPSBmb3BlbihpbXBvcnRfbWFya3NfZmlsZSwgInIiKTsKKwlpZiAoZikKKwkJOworCWVsc2UgaWYgKGltcG9ydF9tYXJrc19maWxlX2lnbm9yZV9taXNzaW5nICYmIGVycm5vID09IEVOT0VOVCkKKwkJZ290byBkb25lOyAvKiBNYXJrcyBmaWxlIGRvZXMgbm90IGV4aXN0ICovCisJZWxzZQorCQlkaWVfZXJybm8oImNhbm5vdCByZWFkICclcyciLCBpbXBvcnRfbWFya3NfZmlsZSk7CisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKwkJdWludG1heF90IG1hcms7CisJCWNoYXIgKmVuZDsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisKKwkJZW5kID0gc3RyY2hyKGxpbmUsICdcbicpOworCQlpZiAobGluZVswXSAhPSAnOicgfHwgIWVuZCkKKwkJCWRpZSgiY29ycnVwdCBtYXJrIGxpbmU6ICVzIiwgbGluZSk7CisJCSplbmQgPSAwOworCQltYXJrID0gc3RydG91bWF4KGxpbmUgKyAxLCAmZW5kLCAxMCk7CisJCWlmICghbWFyayB8fCBlbmQgPT0gbGluZSArIDEKKwkJCXx8ICplbmQgIT0gJyAnIHx8IGdldF9vaWRfaGV4KGVuZCArIDEsICZvaWQpKQorCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKKwkJZSA9IGZpbmRfb2JqZWN0KCZvaWQpOworCQlpZiAoIWUpIHsKKwkJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkJJm9pZCwgTlVMTCk7CisJCQlpZiAodHlwZSA8IDApCisJCQkJZGllKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIsIG9pZF90b19oZXgoJm9pZCkpOworCQkJZSA9IGluc2VydF9vYmplY3QoJm9pZCk7CisJCQllLT50eXBlID0gdHlwZTsKKwkJCWUtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJCWUtPmlkeC5vZmZzZXQgPSAxOyAvKiBqdXN0IG5vdCB6ZXJvISAqLworCQl9CisJCWluc2VydF9tYXJrKG1hcmssIGUpOworCX0KKwlmY2xvc2UoZik7Citkb25lOgorCWltcG9ydF9tYXJrc19maWxlX2RvbmUgPSAxOworfQorCisKK3N0YXRpYyBpbnQgcmVhZF9uZXh0X2NvbW1hbmQodm9pZCkKK3sKKwlzdGF0aWMgaW50IHN0ZGluX2VvZiA9IDA7CisKKwlpZiAoc3RkaW5fZW9mKSB7CisJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDA7CisJCXJldHVybiBFT0Y7CisJfQorCisJZm9yICg7OykgeworCQlpZiAodW5yZWFkX2NvbW1hbmRfYnVmKSB7CisJCQl1bnJlYWRfY29tbWFuZF9idWYgPSAwOworCQl9IGVsc2UgeworCQkJc3RydWN0IHJlY2VudF9jb21tYW5kICpyYzsKKworCQkJc3RkaW5fZW9mID0gc3RyYnVmX2dldGxpbmVfbGYoJmNvbW1hbmRfYnVmLCBzdGRpbik7CisJCQlpZiAoc3RkaW5fZW9mKQorCQkJCXJldHVybiBFT0Y7CisKKwkJCWlmICghc2Vlbl9kYXRhX2NvbW1hbmQKKwkJCQkmJiAhc3RhcnRzX3dpdGgoY29tbWFuZF9idWYuYnVmLCAiZmVhdHVyZSAiKQorCQkJCSYmICFzdGFydHNfd2l0aChjb21tYW5kX2J1Zi5idWYsICJvcHRpb24gIikpIHsKKwkJCQlwYXJzZV9hcmd2KCk7CisJCQl9CisKKwkJCXJjID0gcmNfZnJlZTsKKwkJCWlmIChyYykKKwkJCQlyY19mcmVlID0gcmMtPm5leHQ7CisJCQllbHNlIHsKKwkJCQlyYyA9IGNtZF9oaXN0Lm5leHQ7CisJCQkJY21kX2hpc3QubmV4dCA9IHJjLT5uZXh0OworCQkJCWNtZF9oaXN0Lm5leHQtPnByZXYgPSAmY21kX2hpc3Q7CisJCQkJZnJlZShyYy0+YnVmKTsKKwkJCX0KKworCQkJcmMtPmJ1ZiA9IHhzdHJkdXAoY29tbWFuZF9idWYuYnVmKTsKKwkJCXJjLT5wcmV2ID0gY21kX3RhaWw7CisJCQlyYy0+bmV4dCA9IGNtZF9oaXN0LnByZXY7CisJCQlyYy0+cHJldi0+bmV4dCA9IHJjOworCQkJY21kX3RhaWwgPSByYzsKKwkJfQorCQlpZiAoY29tbWFuZF9idWYuYnVmWzBdID09ICcjJykKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNraXBfb3B0aW9uYWxfbGYodm9pZCkKK3sKKwlpbnQgdGVybV9jaGFyID0gZmdldGMoc3RkaW4pOworCWlmICh0ZXJtX2NoYXIgIT0gJ1xuJyAmJiB0ZXJtX2NoYXIgIT0gRU9GKQorCQl1bmdldGModGVybV9jaGFyLCBzdGRpbik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX21hcmsodm9pZCkKK3sKKwljb25zdCBjaGFyICp2OworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJtYXJrIDoiLCAmdikpIHsKKwkJbmV4dF9tYXJrID0gc3RydG91bWF4KHYsIE5VTEwsIDEwKTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9CisJZWxzZQorCQluZXh0X21hcmsgPSAwOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9vcmlnaW5hbF9pZGVudGlmaWVyKHZvaWQpCit7CisJY29uc3QgY2hhciAqdjsKKwlpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAib3JpZ2luYWwtb2lkICIsICZ2KSkKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKK30KKworc3RhdGljIGludCBwYXJzZV9kYXRhKHN0cnVjdCBzdHJidWYgKnNiLCB1aW50bWF4X3QgbGltaXQsIHVpbnRtYXhfdCAqbGVuX3JlcykKK3sKKwljb25zdCBjaGFyICpkYXRhOworCXN0cmJ1Zl9yZXNldChzYik7CisKKwlpZiAoIXNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImRhdGEgIiwgJmRhdGEpKQorCQlkaWUoIkV4cGVjdGVkICdkYXRhIG4nIGNvbW1hbmQsIGZvdW5kOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisKKwlpZiAoc2tpcF9wcmVmaXgoZGF0YSwgIjw8IiwgJmRhdGEpKSB7CisJCWNoYXIgKnRlcm0gPSB4c3RyZHVwKGRhdGEpOworCQlzaXplX3QgdGVybV9sZW4gPSBjb21tYW5kX2J1Zi5sZW4gLSAoZGF0YSAtIGNvbW1hbmRfYnVmLmJ1Zik7CisKKwkJZm9yICg7OykgeworCQkJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZjb21tYW5kX2J1Ziwgc3RkaW4pID09IEVPRikKKwkJCQlkaWUoIkVPRiBpbiBkYXRhICh0ZXJtaW5hdG9yICclcycgbm90IGZvdW5kKSIsIHRlcm0pOworCQkJaWYgKHRlcm1fbGVuID09IGNvbW1hbmRfYnVmLmxlbgorCQkJCSYmICFzdHJjbXAodGVybSwgY29tbWFuZF9idWYuYnVmKSkKKwkJCQlicmVhazsKKwkJCXN0cmJ1Zl9hZGRidWYoc2IsICZjb21tYW5kX2J1Zik7CisJCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCQl9CisJCWZyZWUodGVybSk7CisJfQorCWVsc2UgeworCQl1aW50bWF4X3QgbGVuID0gc3RydG91bWF4KGRhdGEsIE5VTEwsIDEwKTsKKwkJc2l6ZV90IG4gPSAwLCBsZW5ndGggPSAoc2l6ZV90KWxlbjsKKworCQlpZiAobGltaXQgJiYgbGltaXQgPCBsZW4pIHsKKwkJCSpsZW5fcmVzID0gbGVuOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGxlbmd0aCA8IGxlbikKKwkJCWRpZSgiZGF0YSBpcyB0b28gbGFyZ2UgdG8gdXNlIGluIHRoaXMgY29udGV4dCIpOworCisJCXdoaWxlIChuIDwgbGVuZ3RoKSB7CisJCQlzaXplX3QgcyA9IHN0cmJ1Zl9mcmVhZChzYiwgbGVuZ3RoIC0gbiwgc3RkaW4pOworCQkJaWYgKCFzICYmIGZlb2Yoc3RkaW4pKQorCQkJCWRpZSgiRU9GIGluIGRhdGEgKCVsdSBieXRlcyByZW1haW5pbmcpIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKGxlbmd0aCAtIG4pKTsKKwkJCW4gKz0gczsKKwkJfQorCX0KKworCXNraXBfb3B0aW9uYWxfbGYoKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9yYXdfZGF0ZShjb25zdCBjaGFyICpzcmMsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCkKK3sKKwljb25zdCBjaGFyICpvcmlnX3NyYyA9IHNyYzsKKwljaGFyICplbmRwOworCXVuc2lnbmVkIGxvbmcgbnVtOworCisJZXJybm8gPSAwOworCisJbnVtID0gc3RydG91bChzcmMsICZlbmRwLCAxMCk7CisJLyogTkVFRFNXT1JLOiBwZXJoYXBzIGNoZWNrIGZvciByZWFzb25hYmxlIHZhbHVlcz8gKi8KKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgfHwgKmVuZHAgIT0gJyAnKQorCQlyZXR1cm4gLTE7CisKKwlzcmMgPSBlbmRwICsgMTsKKwlpZiAoKnNyYyAhPSAnLScgJiYgKnNyYyAhPSAnKycpCisJCXJldHVybiAtMTsKKworCW51bSA9IHN0cnRvdWwoc3JjICsgMSwgJmVuZHAsIDEwKTsKKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBzcmMgKyAxIHx8ICplbmRwIHx8IDE0MDAgPCBudW0pCisJCXJldHVybiAtMTsKKworCXN0cmJ1Zl9hZGRzdHIocmVzdWx0LCBvcmlnX3NyYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpwYXJzZV9pZGVudChjb25zdCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqbHRndDsKKwlzaXplX3QgbmFtZV9sZW47CisJc3RydWN0IHN0cmJ1ZiBpZGVudCA9IFNUUkJVRl9JTklUOworCisJLyogZW5zdXJlIHRoZXJlIGlzIGEgc3BhY2UgZGVsaW1pdGVyIGV2ZW4gaWYgdGhlcmUgaXMgbm8gbmFtZSAqLworCWlmICgqYnVmID09ICc8JykKKwkJLS1idWY7CisKKwlsdGd0ID0gYnVmICsgc3RyY3NwbihidWYsICI8PiIpOworCWlmICgqbHRndCAhPSAnPCcpCisJCWRpZSgiTWlzc2luZyA8IGluIGlkZW50IHN0cmluZzogJXMiLCBidWYpOworCWlmIChsdGd0ICE9IGJ1ZiAmJiBsdGd0Wy0xXSAhPSAnICcpCisJCWRpZSgiTWlzc2luZyBzcGFjZSBiZWZvcmUgPCBpbiBpZGVudCBzdHJpbmc6ICVzIiwgYnVmKTsKKwlsdGd0ID0gbHRndCArIDEgKyBzdHJjc3BuKGx0Z3QgKyAxLCAiPD4iKTsKKwlpZiAoKmx0Z3QgIT0gJz4nKQorCQlkaWUoIk1pc3NpbmcgPiBpbiBpZGVudCBzdHJpbmc6ICVzIiwgYnVmKTsKKwlsdGd0Kys7CisJaWYgKCpsdGd0ICE9ICcgJykKKwkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyID4gaW4gaWRlbnQgc3RyaW5nOiAlcyIsIGJ1Zik7CisJbHRndCsrOworCW5hbWVfbGVuID0gbHRndCAtIGJ1ZjsKKwlzdHJidWZfYWRkKCZpZGVudCwgYnVmLCBuYW1lX2xlbik7CisKKwlzd2l0Y2ggKHdoZW5zcGVjKSB7CisJY2FzZSBXSEVOU1BFQ19SQVc6CisJCWlmICh2YWxpZGF0ZV9yYXdfZGF0ZShsdGd0LCAmaWRlbnQpIDwgMCkKKwkJCWRpZSgiSW52YWxpZCByYXcgZGF0ZSBcIiVzXCIgaW4gaWRlbnQ6ICVzIiwgbHRndCwgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBXSEVOU1BFQ19SRkMyODIyOgorCQlpZiAocGFyc2VfZGF0ZShsdGd0LCAmaWRlbnQpIDwgMCkKKwkJCWRpZSgiSW52YWxpZCByZmMyODIyIGRhdGUgXCIlc1wiIGluIGlkZW50OiAlcyIsIGx0Z3QsIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgV0hFTlNQRUNfTk9XOgorCQlpZiAoc3RyY21wKCJub3ciLCBsdGd0KSkKKwkJCWRpZSgiRGF0ZSBpbiBpZGVudCBtdXN0IGJlICdub3cnOiAlcyIsIGJ1Zik7CisJCWRhdGVzdGFtcCgmaWRlbnQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmaWRlbnQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hbmRfc3RvcmVfYmxvYigKKwlzdHJ1Y3QgbGFzdF9vYmplY3QgKmxhc3QsCisJc3RydWN0IG9iamVjdF9pZCAqb2lkb3V0LAorCXVpbnRtYXhfdCBtYXJrKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVpbnRtYXhfdCBsZW47CisKKwlpZiAocGFyc2VfZGF0YSgmYnVmLCBiaWdfZmlsZV90aHJlc2hvbGQsICZsZW4pKQorCQlzdG9yZV9vYmplY3QoT0JKX0JMT0IsICZidWYsIGxhc3QsIG9pZG91dCwgbWFyayk7CisJZWxzZSB7CisJCWlmIChsYXN0KSB7CisJCQlzdHJidWZfcmVsZWFzZSgmbGFzdC0+ZGF0YSk7CisJCQlsYXN0LT5vZmZzZXQgPSAwOworCQkJbGFzdC0+ZGVwdGggPSAwOworCQl9CisJCXN0cmVhbV9ibG9iKGxlbiwgb2lkb3V0LCBtYXJrKTsKKwkJc2tpcF9vcHRpb25hbF9sZigpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfbmV3X2Jsb2Iodm9pZCkKK3sKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXBhcnNlX21hcmsoKTsKKwlwYXJzZV9vcmlnaW5hbF9pZGVudGlmaWVyKCk7CisJcGFyc2VfYW5kX3N0b3JlX2Jsb2IoJmxhc3RfYmxvYiwgTlVMTCwgbmV4dF9tYXJrKTsKK30KKworc3RhdGljIHZvaWQgdW5sb2FkX29uZV9icmFuY2godm9pZCkKK3sKKwl3aGlsZSAoY3VyX2FjdGl2ZV9icmFuY2hlcworCQkmJiBjdXJfYWN0aXZlX2JyYW5jaGVzID49IG1heF9hY3RpdmVfYnJhbmNoZXMpIHsKKwkJdWludG1heF90IG1pbl9jb21taXQgPSBVTE9OR19NQVg7CisJCXN0cnVjdCBicmFuY2ggKmUsICpsID0gTlVMTCwgKnAgPSBOVUxMOworCisJCWZvciAoZSA9IGFjdGl2ZV9icmFuY2hlczsgZTsgZSA9IGUtPmFjdGl2ZV9uZXh0X2JyYW5jaCkgeworCQkJaWYgKGUtPmxhc3RfY29tbWl0IDwgbWluX2NvbW1pdCkgeworCQkJCXAgPSBsOworCQkJCW1pbl9jb21taXQgPSBlLT5sYXN0X2NvbW1pdDsKKwkJCX0KKwkJCWwgPSBlOworCQl9CisKKwkJaWYgKHApIHsKKwkJCWUgPSBwLT5hY3RpdmVfbmV4dF9icmFuY2g7CisJCQlwLT5hY3RpdmVfbmV4dF9icmFuY2ggPSBlLT5hY3RpdmVfbmV4dF9icmFuY2g7CisJCX0gZWxzZSB7CisJCQllID0gYWN0aXZlX2JyYW5jaGVzOworCQkJYWN0aXZlX2JyYW5jaGVzID0gZS0+YWN0aXZlX25leHRfYnJhbmNoOworCQl9CisJCWUtPmFjdGl2ZSA9IDA7CisJCWUtPmFjdGl2ZV9uZXh0X2JyYW5jaCA9IE5VTEw7CisJCWlmIChlLT5icmFuY2hfdHJlZS50cmVlKSB7CisJCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+YnJhbmNoX3RyZWUudHJlZSk7CisJCQllLT5icmFuY2hfdHJlZS50cmVlID0gTlVMTDsKKwkJfQorCQljdXJfYWN0aXZlX2JyYW5jaGVzLS07CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2JyYW5jaChzdHJ1Y3QgYnJhbmNoICpiKQoreworCWxvYWRfdHJlZSgmYi0+YnJhbmNoX3RyZWUpOworCWlmICghYi0+YWN0aXZlKSB7CisJCWItPmFjdGl2ZSA9IDE7CisJCWItPmFjdGl2ZV9uZXh0X2JyYW5jaCA9IGFjdGl2ZV9icmFuY2hlczsKKwkJYWN0aXZlX2JyYW5jaGVzID0gYjsKKwkJY3VyX2FjdGl2ZV9icmFuY2hlcysrOworCQlicmFuY2hfbG9hZF9jb3VudCsrOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KHVpbnRtYXhfdCBudW1fbm90ZXMpCit7CisJdW5zaWduZWQgY2hhciBmYW5vdXQgPSAwOworCXdoaWxlICgobnVtX25vdGVzID4+PSA4KSkKKwkJZmFub3V0Kys7CisJcmV0dXJuIGZhbm91dDsKK30KKworc3RhdGljIHZvaWQgY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoY29uc3QgY2hhciAqaGV4X3NoYTEsCisJCXVuc2lnbmVkIGNoYXIgZmFub3V0LCBjaGFyICpwYXRoKQoreworCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CisJaWYgKGZhbm91dCA+PSB0aGVfaGFzaF9hbGdvLT5yYXdzeikKKwkJZGllKCJUb28gbGFyZ2UgZmFub3V0ICgldSkiLCBmYW5vdXQpOworCXdoaWxlIChmYW5vdXQpIHsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gJy8nOworCQlmYW5vdXQtLTsKKwl9CisJbWVtY3B5KHBhdGggKyBpLCBoZXhfc2hhMSArIGosIHRoZV9oYXNoX2FsZ28tPmhleHN6IC0gaik7CisJcGF0aFtpICsgdGhlX2hhc2hfYWxnby0+aGV4c3ogLSBqXSA9ICdcMCc7Cit9CisKK3N0YXRpYyB1aW50bWF4X3QgZG9fY2hhbmdlX25vdGVfZmFub3V0KAorCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqb3JpZ19yb290LCBzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwkJY2hhciAqaGV4X29pZCwgdW5zaWduZWQgaW50IGhleF9vaWRfbGVuLAorCQljaGFyICpmdWxscGF0aCwgdW5zaWduZWQgaW50IGZ1bGxwYXRoX2xlbiwKKwkJdW5zaWduZWQgY2hhciBmYW5vdXQpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSwgbGVhZjsKKwl1bnNpZ25lZCBpbnQgaSwgdG1wX2hleF9vaWRfbGVuLCB0bXBfZnVsbHBhdGhfbGVuOworCXVpbnRtYXhfdCBudW1fbm90ZXMgPSAwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCS8qIGhleCBvaWQgKyAnLycgYmV0d2VlbiBlYWNoIHBhaXIgb2YgaGV4IGRpZ2l0cyArIE5VTCAqLworCWNoYXIgcmVhbHBhdGhbR0lUX01BWF9IRVhTWiArICgoR0lUX01BWF9IRVhTWiAvIDIpIC0gMSkgKyAxXTsKKwljb25zdCB1bnNpZ25lZCBoZXhzeiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCisJaWYgKCFyb290LT50cmVlKQorCQlsb2FkX3RyZWUocm9vdCk7CisJdCA9IHJvb3QtPnRyZWU7CisKKwlmb3IgKGkgPSAwOyB0ICYmIGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSB0LT5lbnRyaWVzW2ldOworCQl0bXBfaGV4X29pZF9sZW4gPSBoZXhfb2lkX2xlbiArIGUtPm5hbWUtPnN0cl9sZW47CisJCXRtcF9mdWxscGF0aF9sZW4gPSBmdWxscGF0aF9sZW47CisKKwkJLyoKKwkJICogV2UncmUgaW50ZXJlc3RlZCBpbiBFSVRIRVIgZXhpc3Rpbmcgbm90ZSBlbnRyaWVzIChlbnRyaWVzCisJCSAqIHdpdGggZXhhY3RseSA0MCBoZXggY2hhcnMgaW4gcGF0aCwgbm90IGluY2x1ZGluZyBkaXJlY3RvcnkKKwkJICogc2VwYXJhdG9ycyksIE9SIGRpcmVjdG9yeSBlbnRyaWVzIHRoYXQgbWF5IGNvbnRhaW4gbm90ZQorCQkgKiBlbnRyaWVzICh3aXRoIDwgNDAgaGV4IGNoYXJzIGluIHBhdGgpLgorCQkgKiBBbHNvLCBlYWNoIHBhdGggY29tcG9uZW50IGluIGEgbm90ZSBlbnRyeSBtdXN0IGJlIGEgbXVsdGlwbGUKKwkJICogb2YgMiBjaGFycy4KKwkJICovCisJCWlmICghZS0+dmVyc2lvbnNbMV0ubW9kZSB8fAorCQkgICAgdG1wX2hleF9vaWRfbGVuID4gaGV4c3ogfHwKKwkJICAgIGUtPm5hbWUtPnN0cl9sZW4gJSAyKQorCQkJY29udGludWU7CisKKwkJLyogVGhpcyBfbWF5XyBiZSBhIG5vdGUgZW50cnksIG9yIGEgc3ViZGlyIGNvbnRhaW5pbmcgbm90ZXMgKi8KKwkJbWVtY3B5KGhleF9vaWQgKyBoZXhfb2lkX2xlbiwgZS0+bmFtZS0+c3RyX2RhdCwKKwkJICAgICAgIGUtPm5hbWUtPnN0cl9sZW4pOworCQlpZiAodG1wX2Z1bGxwYXRoX2xlbikKKwkJCWZ1bGxwYXRoW3RtcF9mdWxscGF0aF9sZW4rK10gPSAnLyc7CisJCW1lbWNweShmdWxscGF0aCArIHRtcF9mdWxscGF0aF9sZW4sIGUtPm5hbWUtPnN0cl9kYXQsCisJCSAgICAgICBlLT5uYW1lLT5zdHJfbGVuKTsKKwkJdG1wX2Z1bGxwYXRoX2xlbiArPSBlLT5uYW1lLT5zdHJfbGVuOworCQlmdWxscGF0aFt0bXBfZnVsbHBhdGhfbGVuXSA9ICdcMCc7CisKKwkJaWYgKHRtcF9oZXhfb2lkX2xlbiA9PSBoZXhzeiAmJiAhZ2V0X29pZF9oZXgoaGV4X29pZCwgJm9pZCkpIHsKKwkJCS8qIFRoaXMgaXMgYSBub3RlIGVudHJ5ICovCisJCQlpZiAoZmFub3V0ID09IDB4ZmYpIHsKKwkJCQkvKiBDb3VudGluZyBtb2RlLCBubyByZW5hbWUgKi8KKwkJCQludW1fbm90ZXMrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KGhleF9vaWQsIGZhbm91dCwgcmVhbHBhdGgpOworCQkJaWYgKCFzdHJjbXAoZnVsbHBhdGgsIHJlYWxwYXRoKSkgeworCQkJCS8qIE5vdGUgZW50cnkgaXMgaW4gY29ycmVjdCBsb2NhdGlvbiAqLworCQkJCW51bV9ub3RlcysrOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBSZW5hbWUgZnVsbHBhdGggdG8gcmVhbHBhdGggKi8KKwkJCWlmICghdHJlZV9jb250ZW50X3JlbW92ZShvcmlnX3Jvb3QsIGZ1bGxwYXRoLCAmbGVhZiwgMCkpCisJCQkJZGllKCJGYWlsZWQgdG8gcmVtb3ZlIHBhdGggJXMiLCBmdWxscGF0aCk7CisJCQl0cmVlX2NvbnRlbnRfc2V0KG9yaWdfcm9vdCwgcmVhbHBhdGgsCisJCQkJJmxlYWYudmVyc2lvbnNbMV0ub2lkLAorCQkJCWxlYWYudmVyc2lvbnNbMV0ubW9kZSwKKwkJCQlsZWFmLnRyZWUpOworCQl9IGVsc2UgaWYgKFNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpIHsKKwkJCS8qIFRoaXMgaXMgYSBzdWJkaXIgdGhhdCBtYXkgY29udGFpbiBub3RlIGVudHJpZXMgKi8KKwkJCW51bV9ub3RlcyArPSBkb19jaGFuZ2Vfbm90ZV9mYW5vdXQob3JpZ19yb290LCBlLAorCQkJCWhleF9vaWQsIHRtcF9oZXhfb2lkX2xlbiwKKwkJCQlmdWxscGF0aCwgdG1wX2Z1bGxwYXRoX2xlbiwgZmFub3V0KTsKKwkJfQorCisJCS8qIFRoZSBhYm92ZSBtYXkgaGF2ZSByZWFsbG9jYXRlZCB0aGUgY3VycmVudCB0cmVlX2NvbnRlbnQgKi8KKwkJdCA9IHJvb3QtPnRyZWU7CisJfQorCXJldHVybiBudW1fbm90ZXM7Cit9CisKK3N0YXRpYyB1aW50bWF4X3QgY2hhbmdlX25vdGVfZmFub3V0KHN0cnVjdCB0cmVlX2VudHJ5ICpyb290LAorCQl1bnNpZ25lZCBjaGFyIGZhbm91dCkKK3sKKwkvKgorCSAqIFRoZSBzaXplIG9mIHBhdGggaXMgZHVlIHRvIG9uZSBzbGFzaCBiZXR3ZWVuIGV2ZXJ5IHR3byBoZXggZGlnaXRzLAorCSAqIHBsdXMgdGhlIHRlcm1pbmF0aW5nIE5VTC4gIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBzbGFzaCBhdCB0aGUgZW5kLCBzbworCSAqIHRoZSBudW1iZXIgb2Ygc2xhc2hlcyBpcyBvbmUgbGVzcyB0aGFuIGhhbGYgdGhlIG51bWJlciBvZiBoZXgKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWNoYXIgaGV4X29pZFtHSVRfTUFYX0hFWFNaXSwgcGF0aFtHSVRfTUFYX0hFWFNaICsgKEdJVF9NQVhfSEVYU1ogLyAyKSAtIDEgKyAxXTsKKwlyZXR1cm4gZG9fY2hhbmdlX25vdGVfZmFub3V0KHJvb3QsIHJvb3QsIGhleF9vaWQsIDAsIHBhdGgsIDAsIGZhbm91dCk7Cit9CisKKy8qCisgKiBHaXZlbiBhIHBvaW50ZXIgaW50byBhIHN0cmluZywgcGFyc2UgYSBtYXJrIHJlZmVyZW5jZToKKyAqCisgKiAgIGlkbnVtIDo6PSAnOicgYmlnaW50OworICoKKyAqIFJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSB2YWx1ZSBpbiAqZW5kcHRyLgorICoKKyAqIENvbXBsYWluIGlmIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIG5vdCB3aGF0IGlzIGV4cGVjdGVkLAorICogZWl0aGVyIGEgc3BhY2Ugb3IgZW5kIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB1aW50bWF4X3QgcGFyc2VfbWFya19yZWYoY29uc3QgY2hhciAqcCwgY2hhciAqKmVuZHB0cikKK3sKKwl1aW50bWF4X3QgbWFyazsKKworCWFzc2VydCgqcCA9PSAnOicpOworCXArKzsKKwltYXJrID0gc3RydG91bWF4KHAsIGVuZHB0ciwgMTApOworCWlmICgqZW5kcHRyID09IHApCisJCWRpZSgiTm8gdmFsdWUgYWZ0ZXIgJzonIGluIG1hcms6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwlyZXR1cm4gbWFyazsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBtYXJrIHJlZmVyZW5jZSwgYW5kIGNvbXBsYWluIGlmIHRoaXMgaXMgbm90IHRoZSBlbmQgb2YKKyAqIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB1aW50bWF4X3QgcGFyc2VfbWFya19yZWZfZW9sKGNvbnN0IGNoYXIgKnApCit7CisJY2hhciAqZW5kOworCXVpbnRtYXhfdCBtYXJrOworCisJbWFyayA9IHBhcnNlX21hcmtfcmVmKHAsICZlbmQpOworCWlmICgqZW5kICE9ICdcMCcpCisJCWRpZSgiR2FyYmFnZSBhZnRlciBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJcmV0dXJuIG1hcms7Cit9CisKKy8qCisgKiBQYXJzZSB0aGUgbWFyayByZWZlcmVuY2UsIGRlbWFuZGluZyBhIHRyYWlsaW5nIHNwYWNlLiAgUmV0dXJuIGEKKyAqIHBvaW50ZXIgdG8gdGhlIHNwYWNlLgorICovCitzdGF0aWMgdWludG1heF90IHBhcnNlX21hcmtfcmVmX3NwYWNlKGNvbnN0IGNoYXIgKipwKQoreworCXVpbnRtYXhfdCBtYXJrOworCWNoYXIgKmVuZDsKKworCW1hcmsgPSBwYXJzZV9tYXJrX3JlZigqcCwgJmVuZCk7CisJaWYgKCplbmQrKyAhPSAnICcpCisJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJKnAgPSBlbmQ7CisJcmV0dXJuIG1hcms7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX20oY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYikKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmVuZHA7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2U7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJdWludDE2X3QgbW9kZSwgaW5saW5lX2RhdGEgPSAwOworCisJcCA9IGdldF9tb2RlKHAsICZtb2RlKTsKKwlpZiAoIXApCisJCWRpZSgiQ29ycnVwdCBtb2RlOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwNjQ0OgorCWNhc2UgMDc1NToKKwkJbW9kZSB8PSBTX0lGUkVHOworCWNhc2UgU19JRlJFRyB8IDA2NDQ6CisJY2FzZSBTX0lGUkVHIHwgMDc1NToKKwljYXNlIFNfSUZMTks6CisJY2FzZSBTX0lGRElSOgorCWNhc2UgU19JRkdJVExJTks6CisJCS8qIG9rICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRpZSgiQ29ycnVwdCBtb2RlOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJaWYgKCpwID09ICc6JykgeworCQlvZSA9IGZpbmRfbWFyayhwYXJzZV9tYXJrX3JlZl9zcGFjZSgmcCkpOworCQlvaWRjcHkoJm9pZCwgJm9lLT5pZHgub2lkKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KHAsICJpbmxpbmUgIiwgJnApKSB7CisJCWlubGluZV9kYXRhID0gMTsKKwkJb2UgPSBOVUxMOyAvKiBub3QgdXNlZCB3aXRoIGlubGluZV9kYXRhLCBidXQgbWFrZXMgZ2NjIGhhcHB5ICovCisJfSBlbHNlIHsKKwkJaWYgKHBhcnNlX29pZF9oZXgocCwgJm9pZCwgJnApKQorCQkJZGllKCJJbnZhbGlkIGRhdGFyZWY6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJb2UgPSBmaW5kX29iamVjdCgmb2lkKTsKKwkJaWYgKCpwKysgIT0gJyAnKQorCQkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyIFNIQTE6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwlzdHJidWZfcmVzZXQoJnVxKTsKKwlpZiAoIXVucXVvdGVfY19zdHlsZSgmdXEsIHAsICZlbmRwKSkgeworCQlpZiAoKmVuZHApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgcGF0aCBpbjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlwID0gdXEuYnVmOworCX0KKworCS8qIEdpdCBkb2VzIG5vdCB0cmFjayBlbXB0eSwgbm9uLXRvcGxldmVsIGRpcmVjdG9yaWVzLiAqLworCWlmIChTX0lTRElSKG1vZGUpICYmIGlzX2VtcHR5X3RyZWVfb2lkKCZvaWQpICYmICpwKSB7CisJCXRyZWVfY29udGVudF9yZW1vdmUoJmItPmJyYW5jaF90cmVlLCBwLCBOVUxMLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChTX0lTR0lUTElOSyhtb2RlKSkgeworCQlpZiAoaW5saW5lX2RhdGEpCisJCQlkaWUoIkdpdCBsaW5rcyBjYW5ub3QgYmUgc3BlY2lmaWVkICdpbmxpbmUnOiAlcyIsCisJCQkJY29tbWFuZF9idWYuYnVmKTsKKwkJZWxzZSBpZiAob2UpIHsKKwkJCWlmIChvZS0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJCWRpZSgiTm90IGEgY29tbWl0IChhY3R1YWxseSBhICVzKTogJXMiLAorCQkJCQl0eXBlX25hbWUob2UtPnR5cGUpLCBjb21tYW5kX2J1Zi5idWYpOworCQl9CisJCS8qCisJCSAqIEFjY2VwdCB0aGUgc2hhMSB3aXRob3V0IGNoZWNraW5nOyBpdCBleHBlY3RlZCB0byBiZSBpbgorCQkgKiBhbm90aGVyIHJlcG9zaXRvcnkuCisJCSAqLworCX0gZWxzZSBpZiAoaW5saW5lX2RhdGEpIHsKKwkJaWYgKFNfSVNESVIobW9kZSkpCisJCQlkaWUoIkRpcmVjdG9yaWVzIGNhbm5vdCBiZSBzcGVjaWZpZWQgJ2lubGluZSc6ICVzIiwKKwkJCQljb21tYW5kX2J1Zi5idWYpOworCQlpZiAocCAhPSB1cS5idWYpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnVxLCBwKTsKKwkJCXAgPSB1cS5idWY7CisJCX0KKwkJd2hpbGUgKHJlYWRfbmV4dF9jb21tYW5kKCkgIT0gRU9GKSB7CisJCQljb25zdCBjaGFyICp2OworCQkJaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImNhdC1ibG9iICIsICZ2KSkKKwkJCQlwYXJzZV9jYXRfYmxvYih2KTsKKwkJCWVsc2UgeworCQkJCXBhcnNlX2FuZF9zdG9yZV9ibG9iKCZsYXN0X2Jsb2IsICZvaWQsIDApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSBleHBlY3RlZCA9IFNfSVNESVIobW9kZSkgPworCQkJCQkJT0JKX1RSRUU6IE9CSl9CTE9COworCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvZSA/IG9lLT50eXBlIDoKKwkJCQkJb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCAmb2lkLAorCQkJCQkJCU5VTEwpOworCQlpZiAodHlwZSA8IDApCisJCQlkaWUoIiVzIG5vdCBmb3VuZDogJXMiLAorCQkJCQlTX0lTRElSKG1vZGUpID8gICJUcmVlIiA6ICJCbG9iIiwKKwkJCQkJY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKHR5cGUgIT0gZXhwZWN0ZWQpCisJCQlkaWUoIk5vdCBhICVzIChhY3R1YWxseSBhICVzKTogJXMiLAorCQkJCXR5cGVfbmFtZShleHBlY3RlZCksIHR5cGVfbmFtZSh0eXBlKSwKKwkJCQljb21tYW5kX2J1Zi5idWYpOworCX0KKworCWlmICghKnApIHsKKwkJdHJlZV9jb250ZW50X3JlcGxhY2UoJmItPmJyYW5jaF90cmVlLCAmb2lkLCBtb2RlLCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKwl0cmVlX2NvbnRlbnRfc2V0KCZiLT5icmFuY2hfdHJlZSwgcCwgJm9pZCwgbW9kZSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX2QoY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYikKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmVuZHA7CisKKwlzdHJidWZfcmVzZXQoJnVxKTsKKwlpZiAoIXVucXVvdGVfY19zdHlsZSgmdXEsIHAsICZlbmRwKSkgeworCQlpZiAoKmVuZHApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgcGF0aCBpbjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlwID0gdXEuYnVmOworCX0KKwl0cmVlX2NvbnRlbnRfcmVtb3ZlKCZiLT5icmFuY2hfdHJlZSwgcCwgTlVMTCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX2NyKGNvbnN0IGNoYXIgKnMsIHN0cnVjdCBicmFuY2ggKmIsIGludCByZW5hbWUpCit7CisJY29uc3QgY2hhciAqZDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzX3VxID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgZF91cSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmVuZHA7CisJc3RydWN0IHRyZWVfZW50cnkgbGVhZjsKKworCXN0cmJ1Zl9yZXNldCgmc191cSk7CisJaWYgKCF1bnF1b3RlX2Nfc3R5bGUoJnNfdXEsIHMsICZlbmRwKSkgeworCQlpZiAoKmVuZHAgIT0gJyAnKQorCQkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyIHNvdXJjZTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0gZWxzZSB7CisJCWVuZHAgPSBzdHJjaHIocywgJyAnKTsKKwkJaWYgKCFlbmRwKQorCQkJZGllKCJNaXNzaW5nIHNwYWNlIGFmdGVyIHNvdXJjZTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlzdHJidWZfYWRkKCZzX3VxLCBzLCBlbmRwIC0gcyk7CisJfQorCXMgPSBzX3VxLmJ1ZjsKKworCWVuZHArKzsKKwlpZiAoISplbmRwKQorCQlkaWUoIk1pc3NpbmcgZGVzdDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCisJZCA9IGVuZHA7CisJc3RyYnVmX3Jlc2V0KCZkX3VxKTsKKwlpZiAoIXVucXVvdGVfY19zdHlsZSgmZF91cSwgZCwgJmVuZHApKSB7CisJCWlmICgqZW5kcCkKKwkJCWRpZSgiR2FyYmFnZSBhZnRlciBkZXN0IGluOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCWQgPSBkX3VxLmJ1ZjsKKwl9CisKKwltZW1zZXQoJmxlYWYsIDAsIHNpemVvZihsZWFmKSk7CisJaWYgKHJlbmFtZSkKKwkJdHJlZV9jb250ZW50X3JlbW92ZSgmYi0+YnJhbmNoX3RyZWUsIHMsICZsZWFmLCAxKTsKKwllbHNlCisJCXRyZWVfY29udGVudF9nZXQoJmItPmJyYW5jaF90cmVlLCBzLCAmbGVhZiwgMSk7CisJaWYgKCFsZWFmLnZlcnNpb25zWzFdLm1vZGUpCisJCWRpZSgiUGF0aCAlcyBub3QgaW4gYnJhbmNoIiwgcyk7CisJaWYgKCEqZCkgewkvKiBDICJwYXRoL3RvL3N1YmRpciIgIiIgKi8KKwkJdHJlZV9jb250ZW50X3JlcGxhY2UoJmItPmJyYW5jaF90cmVlLAorCQkJJmxlYWYudmVyc2lvbnNbMV0ub2lkLAorCQkJbGVhZi52ZXJzaW9uc1sxXS5tb2RlLAorCQkJbGVhZi50cmVlKTsKKwkJcmV0dXJuOworCX0KKwl0cmVlX2NvbnRlbnRfc2V0KCZiLT5icmFuY2hfdHJlZSwgZCwKKwkJJmxlYWYudmVyc2lvbnNbMV0ub2lkLAorCQlsZWFmLnZlcnNpb25zWzFdLm1vZGUsCisJCWxlYWYudHJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdGVfY2hhbmdlX24oY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYiwgdW5zaWduZWQgY2hhciAqb2xkX2Zhbm91dCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lOworCXN0cnVjdCBicmFuY2ggKnM7CisJc3RydWN0IG9iamVjdF9pZCBvaWQsIGNvbW1pdF9vaWQ7CisJY2hhciBwYXRoW0dJVF9NQVhfUkFXU1ogKiAzXTsKKwl1aW50MTZfdCBpbmxpbmVfZGF0YSA9IDA7CisJdW5zaWduZWQgY2hhciBuZXdfZmFub3V0OworCisJLyoKKwkgKiBXaGVuIGxvYWRpbmcgYSBicmFuY2gsIHdlIGRvbid0IHRyYXZlcnNlIGl0cyB0cmVlIHRvIGNvdW50IHRoZSByZWFsCisJICogbnVtYmVyIG9mIG5vdGVzICh0b28gZXhwZW5zaXZlIHRvIGRvIHRoaXMgZm9yIGFsbCBub24tbm90ZSByZWZzKS4KKwkgKiBUaGlzIG1lYW5zIHRoYXQgcmVjZW50bHkgbG9hZGVkIG5vdGVzIHJlZnMgbWlnaHQgaW5jb3JyZWN0bHkgaGF2ZQorCSAqIGItPm51bV9ub3RlcyA9PSAwLCBhbmQgY29uc2VxdWVudGx5LCBvbGRfZmFub3V0IG1pZ2h0IGJlIHdyb25nLgorCSAqCisJICogRml4IHRoaXMgYnkgdHJhdmVyc2luZyB0aGUgdHJlZSBhbmQgY291bnRpbmcgdGhlIG51bWJlciBvZiBub3RlcworCSAqIHdoZW4gYi0+bnVtX25vdGVzID09IDAuIElmIHRoZSBub3RlcyB0cmVlIGlzIHRydWx5IGVtcHR5LCB0aGUKKwkgKiBjYWxjdWxhdGlvbiBzaG91bGQgbm90IHRha2UgbG9uZy4KKwkgKi8KKwlpZiAoYi0+bnVtX25vdGVzID09IDAgJiYgKm9sZF9mYW5vdXQgPT0gMCkgeworCQkvKiBJbnZva2UgY2hhbmdlX25vdGVfZmFub3V0KCkgaW4gImNvdW50aW5nIG1vZGUiLiAqLworCQliLT5udW1fbm90ZXMgPSBjaGFuZ2Vfbm90ZV9mYW5vdXQoJmItPmJyYW5jaF90cmVlLCAweGZmKTsKKwkJKm9sZF9mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKwl9CisKKwkvKiBOb3cgcGFyc2UgdGhlIG5vdGVtb2RpZnkgY29tbWFuZC4gKi8KKwkvKiA8ZGF0YXJlZj4gb3IgJ2lubGluZScgKi8KKwlpZiAoKnAgPT0gJzonKSB7CisJCW9lID0gZmluZF9tYXJrKHBhcnNlX21hcmtfcmVmX3NwYWNlKCZwKSk7CisJCW9pZGNweSgmb2lkLCAmb2UtPmlkeC5vaWQpOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgocCwgImlubGluZSAiLCAmcCkpIHsKKwkJaW5saW5lX2RhdGEgPSAxOworCQlvZSA9IE5VTEw7IC8qIG5vdCB1c2VkIHdpdGggaW5saW5lX2RhdGEsIGJ1dCBtYWtlcyBnY2MgaGFwcHkgKi8KKwl9IGVsc2UgeworCQlpZiAocGFyc2Vfb2lkX2hleChwLCAmb2lkLCAmcCkpCisJCQlkaWUoIkludmFsaWQgZGF0YXJlZjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlvZSA9IGZpbmRfb2JqZWN0KCZvaWQpOworCQlpZiAoKnArKyAhPSAnICcpCisJCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgU0hBMTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKworCS8qIDxjb21taXQtaXNoPiAqLworCXMgPSBsb29rdXBfYnJhbmNoKHApOworCWlmIChzKSB7CisJCWlmIChpc19udWxsX29pZCgmcy0+b2lkKSkKKwkJCWRpZSgiQ2FuJ3QgYWRkIGEgbm90ZSBvbiBlbXB0eSBicmFuY2guIik7CisJCW9pZGNweSgmY29tbWl0X29pZCwgJnMtPm9pZCk7CisJfSBlbHNlIGlmICgqcCA9PSAnOicpIHsKKwkJdWludG1heF90IGNvbW1pdF9tYXJrID0gcGFyc2VfbWFya19yZWZfZW9sKHApOworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjb21taXRfb2UgPSBmaW5kX21hcmsoY29tbWl0X21hcmspOworCQlpZiAoY29tbWl0X29lLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBjb21taXRfbWFyayk7CisJCW9pZGNweSgmY29tbWl0X29pZCwgJmNvbW1pdF9vZS0+aWR4Lm9pZCk7CisJfSBlbHNlIGlmICghZ2V0X29pZChwLCAmY29tbWl0X29pZCkpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAgICAgICAmY29tbWl0X29pZCwKKwkJCQkJCSAgICAgICBjb21taXRfdHlwZSwgJnNpemUsCisJCQkJCQkgICAgICAgJmNvbW1pdF9vaWQpOworCQlpZiAoIWJ1ZiB8fCBzaXplIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA2KQorCQkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQ6ICVzIiwgcCk7CisJCWZyZWUoYnVmKTsKKwl9IGVsc2UKKwkJZGllKCJJbnZhbGlkIHJlZiBuYW1lIG9yIFNIQTEgZXhwcmVzc2lvbjogJXMiLCBwKTsKKworCWlmIChpbmxpbmVfZGF0YSkgeworCQlpZiAocCAhPSB1cS5idWYpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnVxLCBwKTsKKwkJCXAgPSB1cS5idWY7CisJCX0KKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwkJcGFyc2VfYW5kX3N0b3JlX2Jsb2IoJmxhc3RfYmxvYiwgJm9pZCwgMCk7CisJfSBlbHNlIGlmIChvZSkgeworCQlpZiAob2UtPnR5cGUgIT0gT0JKX0JMT0IpCisJCQlkaWUoIk5vdCBhIGJsb2IgKGFjdHVhbGx5IGEgJXMpOiAlcyIsCisJCQkJdHlwZV9uYW1lKG9lLT50eXBlKSwgY29tbWFuZF9idWYuYnVmKTsKKwl9IGVsc2UgaWYgKCFpc19udWxsX29pZCgmb2lkKSkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksICZvaWQsCisJCQkJCQkJTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgiQmxvYiBub3QgZm91bmQ6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCQlkaWUoIk5vdCBhIGJsb2IgKGFjdHVhbGx5IGEgJXMpOiAlcyIsCisJCQkgICAgdHlwZV9uYW1lKHR5cGUpLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKworCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KG9pZF90b19oZXgoJmNvbW1pdF9vaWQpLCAqb2xkX2Zhbm91dCwgcGF0aCk7CisJaWYgKHRyZWVfY29udGVudF9yZW1vdmUoJmItPmJyYW5jaF90cmVlLCBwYXRoLCBOVUxMLCAwKSkKKwkJYi0+bnVtX25vdGVzLS07CisKKwlpZiAoaXNfbnVsbF9vaWQoJm9pZCkpCisJCXJldHVybjsgLyogbm90aGluZyB0byBpbnNlcnQgKi8KKworCWItPm51bV9ub3RlcysrOworCW5ld19mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKwljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChvaWRfdG9faGV4KCZjb21taXRfb2lkKSwgbmV3X2Zhbm91dCwgcGF0aCk7CisJdHJlZV9jb250ZW50X3NldCgmYi0+YnJhbmNoX3RyZWUsIHBhdGgsICZvaWQsIFNfSUZSRUcgfCAwNjQ0LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2VfZGVsZXRlYWxsKHN0cnVjdCBicmFuY2ggKmIpCit7CisJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKGItPmJyYW5jaF90cmVlLnRyZWUpOworCW9pZGNscigmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0ub2lkKTsKKwlvaWRjbHIoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLm9pZCk7CisJbG9hZF90cmVlKCZiLT5icmFuY2hfdHJlZSk7CisJYi0+bnVtX25vdGVzID0gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZnJvbV9jb21taXQoc3RydWN0IGJyYW5jaCAqYiwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKCFidWYgfHwgc2l6ZSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgNikKKwkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQ6ICVzIiwgb2lkX3RvX2hleCgmYi0+b2lkKSk7CisJaWYgKG1lbWNtcCgidHJlZSAiLCBidWYsIDUpCisJCXx8IGdldF9vaWRfaGV4KGJ1ZiArIDUsICZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQpKQorCQlkaWUoIlRoZSBjb21taXQgJXMgaXMgY29ycnVwdCIsIG9pZF90b19oZXgoJmItPm9pZCkpOworCW9pZGNweSgmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0ub2lkLAorCSAgICAgICAmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZnJvbV9leGlzdGluZyhzdHJ1Y3QgYnJhbmNoICpiKQoreworCWlmIChpc19udWxsX29pZCgmYi0+b2lkKSkgeworCQlvaWRjbHIoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLm9pZCk7CisJCW9pZGNscigmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWNoYXIgKmJ1ZjsKKworCQlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAmYi0+b2lkLCBjb21taXRfdHlwZSwgJnNpemUsCisJCQkJCQkgJmItPm9pZCk7CisJCXBhcnNlX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb2JqZWN0aXNoKHN0cnVjdCBicmFuY2ggKmIsIGNvbnN0IGNoYXIgKm9iamVjdGlzaCkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpzOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJb2lkY3B5KCZvaWQsICZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQpOworCisJcyA9IGxvb2t1cF9icmFuY2gob2JqZWN0aXNoKTsKKwlpZiAoYiA9PSBzKQorCQlkaWUoIkNhbid0IGNyZWF0ZSBhIGJyYW5jaCBmcm9tIGl0c2VsZjogJXMiLCBiLT5uYW1lKTsKKwllbHNlIGlmIChzKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgKnQgPSAmcy0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkOworCQlvaWRjcHkoJmItPm9pZCwgJnMtPm9pZCk7CisJCW9pZGNweSgmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0ub2lkLCB0KTsKKwkJb2lkY3B5KCZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQsIHQpOworCX0gZWxzZSBpZiAoKm9iamVjdGlzaCA9PSAnOicpIHsKKwkJdWludG1heF90IGlkbnVtID0gcGFyc2VfbWFya19yZWZfZW9sKG9iamVjdGlzaCk7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gZmluZF9tYXJrKGlkbnVtKTsKKwkJaWYgKG9lLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBpZG51bSk7CisJCWlmICghb2lkZXEoJmItPm9pZCwgJm9lLT5pZHgub2lkKSkgeworCQkJb2lkY3B5KCZiLT5vaWQsICZvZS0+aWR4Lm9pZCk7CisJCQlpZiAob2UtPnBhY2tfaWQgIT0gTUFYX1BBQ0tfSUQpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCQkJY2hhciAqYnVmID0gZ2ZpX3VucGFja19lbnRyeShvZSwgJnNpemUpOworCQkJCXBhcnNlX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CisJCQkJZnJlZShidWYpOworCQkJfSBlbHNlCisJCQkJcGFyc2VfZnJvbV9leGlzdGluZyhiKTsKKwkJfQorCX0gZWxzZSBpZiAoIWdldF9vaWQob2JqZWN0aXNoLCAmYi0+b2lkKSkgeworCQlwYXJzZV9mcm9tX2V4aXN0aW5nKGIpOworCQlpZiAoaXNfbnVsbF9vaWQoJmItPm9pZCkpCisJCQliLT5kZWxldGUgPSAxOworCX0KKwllbHNlCisJCWRpZSgiSW52YWxpZCByZWYgbmFtZSBvciBTSEExIGV4cHJlc3Npb246ICVzIiwgb2JqZWN0aXNoKTsKKworCWlmIChiLT5icmFuY2hfdHJlZS50cmVlICYmICFvaWRlcSgmb2lkLCAmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKSkgeworCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoYi0+YnJhbmNoX3RyZWUudHJlZSk7CisJCWItPmJyYW5jaF90cmVlLnRyZWUgPSBOVUxMOworCX0KKworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZnJvbShzdHJ1Y3QgYnJhbmNoICpiKQoreworCWNvbnN0IGNoYXIgKmZyb207CisKKwlpZiAoIXNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImZyb20gIiwgJmZyb20pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBwYXJzZV9vYmplY3Rpc2goYiwgZnJvbSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb2JqZWN0aXNoX3dpdGhfcHJlZml4KHN0cnVjdCBicmFuY2ggKmIsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpiYXNlOworCisJaWYgKCFza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsIHByZWZpeCwgJmJhc2UpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBwYXJzZV9vYmplY3Rpc2goYiwgYmFzZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGFzaF9saXN0ICpwYXJzZV9tZXJnZSh1bnNpZ25lZCBpbnQgKmNvdW50KQoreworCXN0cnVjdCBoYXNoX2xpc3QgKmxpc3QgPSBOVUxMLCAqKnRhaWwgPSAmbGlzdCwgKm47CisJY29uc3QgY2hhciAqZnJvbTsKKwlzdHJ1Y3QgYnJhbmNoICpzOworCisJKmNvdW50ID0gMDsKKwl3aGlsZSAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAibWVyZ2UgIiwgJmZyb20pKSB7CisJCW4gPSB4bWFsbG9jKHNpemVvZigqbikpOworCQlzID0gbG9va3VwX2JyYW5jaChmcm9tKTsKKwkJaWYgKHMpCisJCQlvaWRjcHkoJm4tPm9pZCwgJnMtPm9pZCk7CisJCWVsc2UgaWYgKCpmcm9tID09ICc6JykgeworCQkJdWludG1heF90IGlkbnVtID0gcGFyc2VfbWFya19yZWZfZW9sKGZyb20pOworCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2UgPSBmaW5kX21hcmsoaWRudW0pOworCQkJaWYgKG9lLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQkJZGllKCJNYXJrIDolIiBQUkl1TUFYICIgbm90IGEgY29tbWl0IiwgaWRudW0pOworCQkJb2lkY3B5KCZuLT5vaWQsICZvZS0+aWR4Lm9pZCk7CisJCX0gZWxzZSBpZiAoIWdldF9vaWQoZnJvbSwgJm4tPm9pZCkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJCWNoYXIgKmJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgICAgICAmbi0+b2lkLAorCQkJCQkJCSAgICAgICBjb21taXRfdHlwZSwKKwkJCQkJCQkgICAgICAgJnNpemUsICZuLT5vaWQpOworCQkJaWYgKCFidWYgfHwgc2l6ZSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgNikKKwkJCQlkaWUoIk5vdCBhIHZhbGlkIGNvbW1pdDogJXMiLCBmcm9tKTsKKwkJCWZyZWUoYnVmKTsKKwkJfSBlbHNlCisJCQlkaWUoIkludmFsaWQgcmVmIG5hbWUgb3IgU0hBMSBleHByZXNzaW9uOiAlcyIsIGZyb20pOworCisJCW4tPm5leHQgPSBOVUxMOworCQkqdGFpbCA9IG47CisJCXRhaWwgPSAmbi0+bmV4dDsKKworCQkoKmNvdW50KSsrOworCQlyZWFkX25leHRfY29tbWFuZCgpOworCX0KKwlyZXR1cm4gbGlzdDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbmV3X2NvbW1pdChjb25zdCBjaGFyICphcmcpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGJyYW5jaCAqYjsKKwljaGFyICphdXRob3IgPSBOVUxMOworCWNoYXIgKmNvbW1pdHRlciA9IE5VTEw7CisJY2hhciAqZW5jb2RpbmcgPSBOVUxMOworCXN0cnVjdCBoYXNoX2xpc3QgKm1lcmdlX2xpc3QgPSBOVUxMOworCXVuc2lnbmVkIGludCBtZXJnZV9jb3VudDsKKwl1bnNpZ25lZCBjaGFyIHByZXZfZmFub3V0LCBuZXdfZmFub3V0OworCWNvbnN0IGNoYXIgKnY7CisKKwliID0gbG9va3VwX2JyYW5jaChhcmcpOworCWlmICghYikKKwkJYiA9IG5ld19icmFuY2goYXJnKTsKKworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJcGFyc2VfbWFyaygpOworCXBhcnNlX29yaWdpbmFsX2lkZW50aWZpZXIoKTsKKwlpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiYXV0aG9yICIsICZ2KSkgeworCQlhdXRob3IgPSBwYXJzZV9pZGVudCh2KTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9CisJaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImNvbW1pdHRlciAiLCAmdikpIHsKKwkJY29tbWl0dGVyID0gcGFyc2VfaWRlbnQodik7CisJCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJfQorCWlmICghY29tbWl0dGVyKQorCQlkaWUoIkV4cGVjdGVkIGNvbW1pdHRlciBidXQgZGlkbid0IGdldCBvbmUiKTsKKwlpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiZW5jb2RpbmcgIiwgJnYpKSB7CisJCWVuY29kaW5nID0geHN0cmR1cCh2KTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9CisJcGFyc2VfZGF0YSgmbXNnLCAwLCBOVUxMKTsKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXBhcnNlX2Zyb20oYik7CisJbWVyZ2VfbGlzdCA9IHBhcnNlX21lcmdlKCZtZXJnZV9jb3VudCk7CisKKwkvKiBlbnN1cmUgdGhlIGJyYW5jaCBpcyBhY3RpdmUvbG9hZGVkICovCisJaWYgKCFiLT5icmFuY2hfdHJlZS50cmVlIHx8ICFtYXhfYWN0aXZlX2JyYW5jaGVzKSB7CisJCXVubG9hZF9vbmVfYnJhbmNoKCk7CisJCWxvYWRfYnJhbmNoKGIpOworCX0KKworCXByZXZfZmFub3V0ID0gY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KGItPm51bV9ub3Rlcyk7CisKKwkvKiBmaWxlX2NoYW5nZSogKi8KKwl3aGlsZSAoY29tbWFuZF9idWYubGVuID4gMCkgeworCQlpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiTSAiLCAmdikpCisJCQlmaWxlX2NoYW5nZV9tKHYsIGIpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJEICIsICZ2KSkKKwkJCWZpbGVfY2hhbmdlX2QodiwgYik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIlIgIiwgJnYpKQorCQkJZmlsZV9jaGFuZ2VfY3IodiwgYiwgMSk7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIkMgIiwgJnYpKQorCQkJZmlsZV9jaGFuZ2VfY3IodiwgYiwgMCk7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIk4gIiwgJnYpKQorCQkJbm90ZV9jaGFuZ2Vfbih2LCBiLCAmcHJldl9mYW5vdXQpOworCQllbHNlIGlmICghc3RyY21wKCJkZWxldGVhbGwiLCBjb21tYW5kX2J1Zi5idWYpKQorCQkJZmlsZV9jaGFuZ2VfZGVsZXRlYWxsKGIpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJscyAiLCAmdikpCisJCQlwYXJzZV9scyh2LCBiKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiY2F0LWJsb2IgIiwgJnYpKQorCQkJcGFyc2VfY2F0X2Jsb2Iodik7CisJCWVsc2UgeworCQkJdW5yZWFkX2NvbW1hbmRfYnVmID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZWFkX25leHRfY29tbWFuZCgpID09IEVPRikKKwkJCWJyZWFrOworCX0KKworCW5ld19mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKwlpZiAobmV3X2Zhbm91dCAhPSBwcmV2X2Zhbm91dCkKKwkJYi0+bnVtX25vdGVzID0gY2hhbmdlX25vdGVfZmFub3V0KCZiLT5icmFuY2hfdHJlZSwgbmV3X2Zhbm91dCk7CisKKwkvKiBidWlsZCB0aGUgdHJlZSBhbmQgdGhlIGNvbW1pdCAqLworCXN0b3JlX3RyZWUoJmItPmJyYW5jaF90cmVlKTsKKwlvaWRjcHkoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLm9pZCwKKwkgICAgICAgJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLm9pZCk7CisKKwlzdHJidWZfcmVzZXQoJm5ld19kYXRhKTsKKwlzdHJidWZfYWRkZigmbmV3X2RhdGEsICJ0cmVlICVzXG4iLAorCQlvaWRfdG9faGV4KCZiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5vaWQpKTsKKwlpZiAoIWlzX251bGxfb2lkKCZiLT5vaWQpKQorCQlzdHJidWZfYWRkZigmbmV3X2RhdGEsICJwYXJlbnQgJXNcbiIsCisJCQkgICAgb2lkX3RvX2hleCgmYi0+b2lkKSk7CisJd2hpbGUgKG1lcmdlX2xpc3QpIHsKKwkJc3RydWN0IGhhc2hfbGlzdCAqbmV4dCA9IG1lcmdlX2xpc3QtPm5leHQ7CisJCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwgInBhcmVudCAlc1xuIiwKKwkJCSAgICBvaWRfdG9faGV4KCZtZXJnZV9saXN0LT5vaWQpKTsKKwkJZnJlZShtZXJnZV9saXN0KTsKKwkJbWVyZ2VfbGlzdCA9IG5leHQ7CisJfQorCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKKwkJImF1dGhvciAlc1xuIgorCQkiY29tbWl0dGVyICVzXG4iLAorCQlhdXRob3IgPyBhdXRob3IgOiBjb21taXR0ZXIsIGNvbW1pdHRlcik7CisJaWYgKGVuY29kaW5nKQorCQlzdHJidWZfYWRkZigmbmV3X2RhdGEsCisJCQkiZW5jb2RpbmcgJXNcbiIsCisJCQllbmNvZGluZyk7CisJc3RyYnVmX2FkZGNoKCZuZXdfZGF0YSwgJ1xuJyk7CisJc3RyYnVmX2FkZGJ1ZigmbmV3X2RhdGEsICZtc2cpOworCWZyZWUoYXV0aG9yKTsKKwlmcmVlKGNvbW1pdHRlcik7CisJZnJlZShlbmNvZGluZyk7CisKKwlpZiAoIXN0b3JlX29iamVjdChPQkpfQ09NTUlULCAmbmV3X2RhdGEsIE5VTEwsICZiLT5vaWQsIG5leHRfbWFyaykpCisJCWItPnBhY2tfaWQgPSBwYWNrX2lkOworCWItPmxhc3RfY29tbWl0ID0gb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX0NPTU1JVF07Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX25ld190YWcoY29uc3QgY2hhciAqYXJnKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmZyb207CisJY2hhciAqdGFnZ2VyOworCXN0cnVjdCBicmFuY2ggKnM7CisJc3RydWN0IHRhZyAqdDsKKwl1aW50bWF4X3QgZnJvbV9tYXJrID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY29uc3QgY2hhciAqdjsKKworCXQgPSBtZW1fcG9vbF9hbGxvYygmZmlfbWVtX3Bvb2wsIHNpemVvZihzdHJ1Y3QgdGFnKSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZihzdHJ1Y3QgdGFnKSk7CisJdC0+bmFtZSA9IHBvb2xfc3RyZHVwKGFyZyk7CisJaWYgKGxhc3RfdGFnKQorCQlsYXN0X3RhZy0+bmV4dF90YWcgPSB0OworCWVsc2UKKwkJZmlyc3RfdGFnID0gdDsKKwlsYXN0X3RhZyA9IHQ7CisJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwlwYXJzZV9tYXJrKCk7CisKKwkvKiBmcm9tIC4uLiAqLworCWlmICghc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiZnJvbSAiLCAmZnJvbSkpCisJCWRpZSgiRXhwZWN0ZWQgZnJvbSBjb21tYW5kLCBnb3QgJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCXMgPSBsb29rdXBfYnJhbmNoKGZyb20pOworCWlmIChzKSB7CisJCWlmIChpc19udWxsX29pZCgmcy0+b2lkKSkKKwkJCWRpZSgiQ2FuJ3QgdGFnIGFuIGVtcHR5IGJyYW5jaC4iKTsKKwkJb2lkY3B5KCZvaWQsICZzLT5vaWQpOworCQl0eXBlID0gT0JKX0NPTU1JVDsKKwl9IGVsc2UgaWYgKCpmcm9tID09ICc6JykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZTsKKwkJZnJvbV9tYXJrID0gcGFyc2VfbWFya19yZWZfZW9sKGZyb20pOworCQlvZSA9IGZpbmRfbWFyayhmcm9tX21hcmspOworCQl0eXBlID0gb2UtPnR5cGU7CisJCW9pZGNweSgmb2lkLCAmb2UtPmlkeC5vaWQpOworCX0gZWxzZSBpZiAoIWdldF9vaWQoZnJvbSwgJm9pZCkpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2UgPSBmaW5kX29iamVjdCgmb2lkKTsKKwkJaWYgKCFvZSkgeworCQkJdHlwZSA9IG9pZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgJm9pZCwgTlVMTCk7CisJCQlpZiAodHlwZSA8IDApCisJCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3Q6ICVzIiwgZnJvbSk7CisJCX0gZWxzZQorCQkJdHlwZSA9IG9lLT50eXBlOworCX0gZWxzZQorCQlkaWUoIkludmFsaWQgcmVmIG5hbWUgb3IgU0hBMSBleHByZXNzaW9uOiAlcyIsIGZyb20pOworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisKKwkvKiBvcmlnaW5hbC1vaWQgLi4uICovCisJcGFyc2Vfb3JpZ2luYWxfaWRlbnRpZmllcigpOworCisJLyogdGFnZ2VyIC4uLiAqLworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJ0YWdnZXIgIiwgJnYpKSB7CisJCXRhZ2dlciA9IHBhcnNlX2lkZW50KHYpOworCQlyZWFkX25leHRfY29tbWFuZCgpOworCX0gZWxzZQorCQl0YWdnZXIgPSBOVUxMOworCisJLyogdGFnIHBheWxvYWQvbWVzc2FnZSAqLworCXBhcnNlX2RhdGEoJm1zZywgMCwgTlVMTCk7CisKKwkvKiBidWlsZCB0aGUgdGFnIG9iamVjdCAqLworCXN0cmJ1Zl9yZXNldCgmbmV3X2RhdGEpOworCisJc3RyYnVmX2FkZGYoJm5ld19kYXRhLAorCQkgICAgIm9iamVjdCAlc1xuIgorCQkgICAgInR5cGUgJXNcbiIKKwkJICAgICJ0YWcgJXNcbiIsCisJCSAgICBvaWRfdG9faGV4KCZvaWQpLCB0eXBlX25hbWUodHlwZSksIHQtPm5hbWUpOworCWlmICh0YWdnZXIpCisJCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKKwkJCSAgICAidGFnZ2VyICVzXG4iLCB0YWdnZXIpOworCXN0cmJ1Zl9hZGRjaCgmbmV3X2RhdGEsICdcbicpOworCXN0cmJ1Zl9hZGRidWYoJm5ld19kYXRhLCAmbXNnKTsKKwlmcmVlKHRhZ2dlcik7CisKKwlpZiAoc3RvcmVfb2JqZWN0KE9CSl9UQUcsICZuZXdfZGF0YSwgTlVMTCwgJnQtPm9pZCwgbmV4dF9tYXJrKSkKKwkJdC0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCWVsc2UKKwkJdC0+cGFja19pZCA9IHBhY2tfaWQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3Jlc2V0X2JyYW5jaChjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IGJyYW5jaCAqYjsKKwljb25zdCBjaGFyICp0YWdfbmFtZTsKKworCWIgPSBsb29rdXBfYnJhbmNoKGFyZyk7CisJaWYgKGIpIHsKKwkJb2lkY2xyKCZiLT5vaWQpOworCQlvaWRjbHIoJmItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLm9pZCk7CisJCW9pZGNscigmYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0ub2lkKTsKKwkJaWYgKGItPmJyYW5jaF90cmVlLnRyZWUpIHsKKwkJCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShiLT5icmFuY2hfdHJlZS50cmVlKTsKKwkJCWItPmJyYW5jaF90cmVlLnRyZWUgPSBOVUxMOworCQl9CisJfQorCWVsc2UKKwkJYiA9IG5ld19icmFuY2goYXJnKTsKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXBhcnNlX2Zyb20oYik7CisJaWYgKGItPmRlbGV0ZSAmJiBza2lwX3ByZWZpeChiLT5uYW1lLCAicmVmcy90YWdzLyIsICZ0YWdfbmFtZSkpIHsKKwkJLyoKKwkJICogRWxzZXdoZXJlLCB3ZSBjYWxsIGR1bXBfYnJhbmNoZXMoKSBiZWZvcmUgZHVtcF90YWdzKCksCisJCSAqIGFuZCBkdW1wX2JyYW5jaGVzKCkgd2lsbCBoYW5kbGUgcmVmIGRlbGV0aW9ucyBmaXJzdCwgc28KKwkJICogaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoZSBkZWxldGlvbiBhY3R1YWxseSB0YWtlcyBlZmZlY3QsCisJCSAqIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSB0YWcgZnJvbSBvdXIgbGlzdCBvZiB0YWdzIHRvIHVwZGF0ZS4KKwkJICoKKwkJICogTkVFRFNXT1JLOiByZXBsYWNlIGxpc3Qgb2YgdGFncyB3aXRoIGhhc2htYXAgZm9yIGZhc3RlcgorCQkgKiBkZWxldGlvbj8KKwkJICovCisJCXN0cnVjdCB0YWcgKnQsICpwcmV2ID0gTlVMTDsKKwkJZm9yICh0ID0gZmlyc3RfdGFnOyB0OyB0ID0gdC0+bmV4dF90YWcpIHsKKwkJCWlmICghc3RyY21wKHQtPm5hbWUsIHRhZ19uYW1lKSkKKwkJCQlicmVhazsKKwkJCXByZXYgPSB0OworCQl9CisJCWlmICh0KSB7CisJCQlpZiAocHJldikKKwkJCQlwcmV2LT5uZXh0X3RhZyA9IHQtPm5leHRfdGFnOworCQkJZWxzZQorCQkJCWZpcnN0X3RhZyA9IHQtPm5leHRfdGFnOworCQkJaWYgKCF0LT5uZXh0X3RhZykKKwkJCQlsYXN0X3RhZyA9IHByZXY7CisJCQkvKiBUaGVyZSBpcyBubyBtZW1fcG9vbF9mcmVlKHQpIGZ1bmN0aW9uIHRvIGNhbGwuICovCisJCX0KKwl9CisJaWYgKGNvbW1hbmRfYnVmLmxlbiA+IDApCisJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNhdF9ibG9iX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmICh3cml0ZV9pbl9mdWxsKGNhdF9ibG9iX2ZkLCBidWYsIHNpemUpIDwgMCkKKwkJZGllX2Vycm5vKCJXcml0ZSB0byBmcm9udGVuZCBmYWlsZWQiKTsKK30KKworc3RhdGljIHZvaWQgY2F0X2Jsb2Ioc3RydWN0IG9iamVjdF9lbnRyeSAqb2UsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gMDsKKwljaGFyICpidWY7CisKKwlpZiAoIW9lIHx8IG9lLT5wYWNrX2lkID09IE1BWF9QQUNLX0lEKSB7CisJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCX0gZWxzZSB7CisJCXR5cGUgPSBvZS0+dHlwZTsKKwkJYnVmID0gZ2ZpX3VucGFja19lbnRyeShvZSwgJnNpemUpOworCX0KKworCS8qCisJICogT3V0cHV0IGJhc2VkIG9uIGJhdGNoX29uZV9vYmplY3QoKSBmcm9tIGNhdC1maWxlLmMuCisJICovCisJaWYgKHR5cGUgPD0gMCkgeworCQlzdHJidWZfcmVzZXQoJmxpbmUpOworCQlzdHJidWZfYWRkZigmbGluZSwgIiVzIG1pc3NpbmdcbiIsIG9pZF90b19oZXgob2lkKSk7CisJCWNhdF9ibG9iX3dyaXRlKGxpbmUuYnVmLCBsaW5lLmxlbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJZnJlZShidWYpOworCQlyZXR1cm47CisJfQorCWlmICghYnVmKQorCQlkaWUoIkNhbid0IHJlYWQgb2JqZWN0ICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJPYmplY3QgJXMgaXMgYSAlcyBidXQgYSBibG9iIHdhcyBleHBlY3RlZC4iLAorCQkgICAgb2lkX3RvX2hleChvaWQpLCB0eXBlX25hbWUodHlwZSkpOworCXN0cmJ1Zl9yZXNldCgmbGluZSk7CisJc3RyYnVmX2FkZGYoJmxpbmUsICIlcyAlcyAlIlBSSXVNQVgiXG4iLCBvaWRfdG9faGV4KG9pZCksCisJCSAgICB0eXBlX25hbWUodHlwZSksICh1aW50bWF4X3Qpc2l6ZSk7CisJY2F0X2Jsb2Jfd3JpdGUobGluZS5idWYsIGxpbmUubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJY2F0X2Jsb2Jfd3JpdGUoYnVmLCBzaXplKTsKKwljYXRfYmxvYl93cml0ZSgiXG4iLCAxKTsKKwlpZiAob2UgJiYgb2UtPnBhY2tfaWQgPT0gcGFja19pZCkgeworCQlsYXN0X2Jsb2Iub2Zmc2V0ID0gb2UtPmlkeC5vZmZzZXQ7CisJCXN0cmJ1Zl9hdHRhY2goJmxhc3RfYmxvYi5kYXRhLCBidWYsIHNpemUsIHNpemUpOworCQlsYXN0X2Jsb2IuZGVwdGggPSBvZS0+ZGVwdGg7CisJfSBlbHNlCisJCWZyZWUoYnVmKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZ2V0X21hcmsoY29uc3QgY2hhciAqcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZTsKKwljaGFyIG91dHB1dFtHSVRfTUFYX0hFWFNaICsgMl07CisKKwkvKiBnZXQtbWFyayBTUCA8b2JqZWN0PiBMRiAqLworCWlmICgqcCAhPSAnOicpCisJCWRpZSgiTm90IGEgbWFyazogJXMiLCBwKTsKKworCW9lID0gZmluZF9tYXJrKHBhcnNlX21hcmtfcmVmX2VvbChwKSk7CisJaWYgKCFvZSkKKwkJZGllKCJVbmtub3duIG1hcms6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKworCXhzbnByaW50ZihvdXRwdXQsIHNpemVvZihvdXRwdXQpLCAiJXNcbiIsIG9pZF90b19oZXgoJm9lLT5pZHgub2lkKSk7CisJY2F0X2Jsb2Jfd3JpdGUob3V0cHV0LCB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDEpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9jYXRfYmxvYihjb25zdCBjaGFyICpwKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJLyogY2F0LWJsb2IgU1AgPG9iamVjdD4gTEYgKi8KKwlpZiAoKnAgPT0gJzonKSB7CisJCW9lID0gZmluZF9tYXJrKHBhcnNlX21hcmtfcmVmX2VvbChwKSk7CisJCWlmICghb2UpCisJCQlkaWUoIlVua25vd24gbWFyazogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlvaWRjcHkoJm9pZCwgJm9lLT5pZHgub2lkKTsKKwl9IGVsc2UgeworCQlpZiAocGFyc2Vfb2lkX2hleChwLCAmb2lkLCAmcCkpCisJCQlkaWUoIkludmFsaWQgZGF0YXJlZjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlpZiAoKnApCisJCQlkaWUoIkdhcmJhZ2UgYWZ0ZXIgU0hBMTogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQlvZSA9IGZpbmRfb2JqZWN0KCZvaWQpOworCX0KKworCWNhdF9ibG9iKG9lLCAmb2lkKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKmRlcmVmZXJlbmNlKHN0cnVjdCBvYmplY3RfZW50cnkgKm9lLAorCQkJCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCWlmICghb2UpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsCisJCQkJCQkJTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgib2JqZWN0IG5vdCBmb3VuZDogJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCQkvKiBjYWNoZSBpdCEgKi8KKwkJb2UgPSBpbnNlcnRfb2JqZWN0KG9pZCk7CisJCW9lLT50eXBlID0gdHlwZTsKKwkJb2UtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJb2UtPmlkeC5vZmZzZXQgPSAxOworCX0KKwlzd2l0Y2ggKG9lLT50eXBlKSB7CisJY2FzZSBPQkpfVFJFRToJLyogZWFzeSBjYXNlLiAqLworCQlyZXR1cm4gb2U7CisJY2FzZSBPQkpfQ09NTUlUOgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJOb3QgYSB0cmVlLWlzaDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKworCWlmIChvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgewkvKiBpbiBhIHBhY2sgYmVpbmcgd3JpdHRlbiAqLworCQlidWYgPSBnZmlfdW5wYWNrX2VudHJ5KG9lLCAmc2l6ZSk7CisJfSBlbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSB1bnVzZWQ7CisJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdW51c2VkLCAmc2l6ZSk7CisJfQorCWlmICghYnVmKQorCQlkaWUoIkNhbid0IGxvYWQgb2JqZWN0ICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKworCS8qIFBlZWwgb25lIGxheWVyLiAqLworCXN3aXRjaCAob2UtPnR5cGUpIHsKKwljYXNlIE9CSl9UQUc6CisJCWlmIChzaXplIDwgaGV4c3ogKyBzdHJsZW4oIm9iamVjdCAiKSB8fAorCQkgICAgZ2V0X29pZF9oZXgoYnVmICsgc3RybGVuKCJvYmplY3QgIiksIG9pZCkpCisJCQlkaWUoIkludmFsaWQgU0hBMSBpbiB0YWc6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlpZiAoc2l6ZSA8IGhleHN6ICsgc3RybGVuKCJ0cmVlICIpIHx8CisJCSAgICBnZXRfb2lkX2hleChidWYgKyBzdHJsZW4oInRyZWUgIiksIG9pZCkpCisJCQlkaWUoIkludmFsaWQgU0hBMSBpbiBjb21taXQ6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIGZpbmRfb2JqZWN0KG9pZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpwYXJzZV90cmVlaXNoX2RhdGFyZWYoY29uc3QgY2hhciAqKnApCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKworCWlmICgqKnAgPT0gJzonKSB7CS8qIDxtYXJrPiAqLworCQllID0gZmluZF9tYXJrKHBhcnNlX21hcmtfcmVmX3NwYWNlKHApKTsKKwkJaWYgKCFlKQorCQkJZGllKCJVbmtub3duIG1hcms6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJb2lkY3B5KCZvaWQsICZlLT5pZHgub2lkKTsKKwl9IGVsc2UgewkvKiA8c2hhMT4gKi8KKwkJaWYgKHBhcnNlX29pZF9oZXgoKnAsICZvaWQsIHApKQorCQkJZGllKCJJbnZhbGlkIGRhdGFyZWY6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJZSA9IGZpbmRfb2JqZWN0KCZvaWQpOworCQlpZiAoKigqcCkrKyAhPSAnICcpCisJCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgdHJlZS1pc2g6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwl3aGlsZSAoIWUgfHwgZS0+dHlwZSAhPSBPQkpfVFJFRSkKKwkJZSA9IGRlcmVmZXJlbmNlKGUsICZvaWQpOworCXJldHVybiBlOworfQorCitzdGF0aWMgdm9pZCBwcmludF9scyhpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBTZWUgc2hvd190cmVlKCkuICovCisJY29uc3QgY2hhciAqdHlwZSA9CisJCVNfSVNHSVRMSU5LKG1vZGUpID8gY29tbWl0X3R5cGUgOgorCQlTX0lTRElSKG1vZGUpID8gdHJlZV90eXBlIDoKKwkJYmxvYl90eXBlOworCisJaWYgKCFtb2RlKSB7CisJCS8qIG1pc3NpbmcgU1AgcGF0aCBMRiAqLworCQlzdHJidWZfcmVzZXQoJmxpbmUpOworCQlzdHJidWZfYWRkc3RyKCZsaW5lLCAibWlzc2luZyAiKTsKKwkJcXVvdGVfY19zdHlsZShwYXRoLCAmbGluZSwgTlVMTCwgMCk7CisJCXN0cmJ1Zl9hZGRjaCgmbGluZSwgJ1xuJyk7CisJfSBlbHNlIHsKKwkJLyogbW9kZSBTUCB0eXBlIFNQIG9iamVjdF9uYW1lIFRBQiBwYXRoIExGICovCisJCXN0cmJ1Zl9yZXNldCgmbGluZSk7CisJCXN0cmJ1Zl9hZGRmKCZsaW5lLCAiJTA2byAlcyAlc1x0IiwKKwkJCQltb2RlICYgfk5PX0RFTFRBLCB0eXBlLCBoYXNoX3RvX2hleChoYXNoKSk7CisJCXF1b3RlX2Nfc3R5bGUocGF0aCwgJmxpbmUsIE5VTEwsIDApOworCQlzdHJidWZfYWRkY2goJmxpbmUsICdcbicpOworCX0KKwljYXRfYmxvYl93cml0ZShsaW5lLmJ1ZiwgbGluZS5sZW4pOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9scyhjb25zdCBjaGFyICpwLCBzdHJ1Y3QgYnJhbmNoICpiKQoreworCXN0cnVjdCB0cmVlX2VudHJ5ICpyb290ID0gTlVMTDsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSBsZWFmID0ge05VTEx9OworCisJLyogbHMgU1AgKDx0cmVlLWlzaD4gU1ApPyA8cGF0aD4gKi8KKwlpZiAoKnAgPT0gJyInKSB7CisJCWlmICghYikKKwkJCWRpZSgiTm90IGluIGEgY29tbWl0OiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCXJvb3QgPSAmYi0+YnJhbmNoX3RyZWU7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZSA9IHBhcnNlX3RyZWVpc2hfZGF0YXJlZigmcCk7CisJCXJvb3QgPSBuZXdfdHJlZV9lbnRyeSgpOworCQlvaWRjcHkoJnJvb3QtPnZlcnNpb25zWzFdLm9pZCwgJmUtPmlkeC5vaWQpOworCQlpZiAoIWlzX251bGxfb2lkKCZyb290LT52ZXJzaW9uc1sxXS5vaWQpKQorCQkJcm9vdC0+dmVyc2lvbnNbMV0ubW9kZSA9IFNfSUZESVI7CisJCWxvYWRfdHJlZShyb290KTsKKwl9CisJaWYgKCpwID09ICciJykgeworCQlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICplbmRwOworCQlzdHJidWZfcmVzZXQoJnVxKTsKKwkJaWYgKHVucXVvdGVfY19zdHlsZSgmdXEsIHAsICZlbmRwKSkKKwkJCWRpZSgiSW52YWxpZCBwYXRoOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCWlmICgqZW5kcCkKKwkJCWRpZSgiR2FyYmFnZSBhZnRlciBwYXRoIGluOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCXAgPSB1cS5idWY7CisJfQorCXRyZWVfY29udGVudF9nZXQocm9vdCwgcCwgJmxlYWYsIDEpOworCS8qCisJICogQSBkaXJlY3RvcnkgaW4gcHJlcGFyYXRpb24gd291bGQgaGF2ZSBhIHNoYTEgb2YgemVybworCSAqIHVudGlsIGl0IGlzIHNhdmVkLiAgU2F2ZSwgZm9yIHNpbXBsaWNpdHkuCisJICovCisJaWYgKFNfSVNESVIobGVhZi52ZXJzaW9uc1sxXS5tb2RlKSkKKwkJc3RvcmVfdHJlZSgmbGVhZik7CisKKwlwcmludF9scyhsZWFmLnZlcnNpb25zWzFdLm1vZGUsIGxlYWYudmVyc2lvbnNbMV0ub2lkLmhhc2gsIHApOworCWlmIChsZWFmLnRyZWUpCisJCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShsZWFmLnRyZWUpOworCWlmICghYiB8fCByb290ICE9ICZiLT5icmFuY2hfdHJlZSkKKwkJcmVsZWFzZV90cmVlX2VudHJ5KHJvb3QpOworfQorCitzdGF0aWMgdm9pZCBjaGVja3BvaW50KHZvaWQpCit7CisJY2hlY2twb2ludF9yZXF1ZXN0ZWQgPSAwOworCWlmIChvYmplY3RfY291bnQpIHsKKwkJY3ljbGVfcGFja2ZpbGUoKTsKKwl9CisJZHVtcF9icmFuY2hlcygpOworCWR1bXBfdGFncygpOworCWR1bXBfbWFya3MoKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY2hlY2twb2ludCh2b2lkKQoreworCWNoZWNrcG9pbnRfcmVxdWVzdGVkID0gMTsKKwlza2lwX29wdGlvbmFsX2xmKCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3Byb2dyZXNzKHZvaWQpCit7CisJZndyaXRlKGNvbW1hbmRfYnVmLmJ1ZiwgMSwgY29tbWFuZF9idWYubGVuLCBzdGRvdXQpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJZmZsdXNoKHN0ZG91dCk7CisJc2tpcF9vcHRpb25hbF9sZigpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hbGlhcyh2b2lkKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJc3RydWN0IGJyYW5jaCBiOworCisJc2tpcF9vcHRpb25hbF9sZigpOworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisKKwkvKiBtYXJrIC4uLiAqLworCXBhcnNlX21hcmsoKTsKKwlpZiAoIW5leHRfbWFyaykKKwkJZGllKF8oIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiKSwgY29tbWFuZF9idWYuYnVmKTsKKworCS8qIHRvIC4uLiAqLworCW1lbXNldCgmYiwgMCwgc2l6ZW9mKGIpKTsKKwlpZiAoIXBhcnNlX29iamVjdGlzaF93aXRoX3ByZWZpeCgmYiwgInRvICIpKQorCQlkaWUoXygiRXhwZWN0ZWQgJ3RvJyBjb21tYW5kLCBnb3QgJXMiKSwgY29tbWFuZF9idWYuYnVmKTsKKwllID0gZmluZF9vYmplY3QoJmIub2lkKTsKKwlhc3NlcnQoZSk7CisJaW5zZXJ0X21hcmsobmV4dF9tYXJrLCBlKTsKK30KKworc3RhdGljIGNoYXIqIG1ha2VfZmFzdF9pbXBvcnRfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCWlmICghcmVsYXRpdmVfbWFya3NfcGF0aHMgfHwgaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJcmV0dXJuIGdpdF9wYXRoZHVwKCJpbmZvL2Zhc3QtaW1wb3J0LyVzIiwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9pbXBvcnRfbWFya3MoY29uc3QgY2hhciAqbWFya3MsCisJCQkJCWludCBmcm9tX3N0cmVhbSwgaW50IGlnbm9yZV9taXNzaW5nKQoreworCWlmIChpbXBvcnRfbWFya3NfZmlsZSkgeworCQlpZiAoZnJvbV9zdHJlYW0pCisJCQlkaWUoIk9ubHkgb25lIGltcG9ydC1tYXJrcyBjb21tYW5kIGFsbG93ZWQgcGVyIHN0cmVhbSIpOworCisJCS8qIHJlYWQgcHJldmlvdXMgbWFyayBmaWxlICovCisJCWlmKCFpbXBvcnRfbWFya3NfZmlsZV9mcm9tX3N0cmVhbSkKKwkJCXJlYWRfbWFya3MoKTsKKwl9CisKKwlpbXBvcnRfbWFya3NfZmlsZSA9IG1ha2VfZmFzdF9pbXBvcnRfcGF0aChtYXJrcyk7CisJaW1wb3J0X21hcmtzX2ZpbGVfZnJvbV9zdHJlYW0gPSBmcm9tX3N0cmVhbTsKKwlpbXBvcnRfbWFya3NfZmlsZV9pZ25vcmVfbWlzc2luZyA9IGlnbm9yZV9taXNzaW5nOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fZGF0ZV9mb3JtYXQoY29uc3QgY2hhciAqZm10KQoreworCWlmICghc3RyY21wKGZtdCwgInJhdyIpKQorCQl3aGVuc3BlYyA9IFdIRU5TUEVDX1JBVzsKKwllbHNlIGlmICghc3RyY21wKGZtdCwgInJmYzI4MjIiKSkKKwkJd2hlbnNwZWMgPSBXSEVOU1BFQ19SRkMyODIyOworCWVsc2UgaWYgKCFzdHJjbXAoZm10LCAibm93IikpCisJCXdoZW5zcGVjID0gV0hFTlNQRUNfTk9XOworCWVsc2UKKwkJZGllKCJ1bmtub3duIC0tZGF0ZS1mb3JtYXQgYXJndW1lbnQgJXMiLCBmbXQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bG9uZ19hcmcoY29uc3QgY2hhciAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqZW5kcHRyOworCXVuc2lnbmVkIGxvbmcgcnYgPSBzdHJ0b3VsKGFyZywgJmVuZHB0ciwgMCk7CisJaWYgKHN0cmNocihhcmcsICctJykgfHwgZW5kcHRyID09IGFyZyB8fCAqZW5kcHRyKQorCQlkaWUoIiVzOiBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIiLCBvcHRpb24pOworCXJldHVybiBydjsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2RlcHRoKGNvbnN0IGNoYXIgKmRlcHRoKQoreworCW1heF9kZXB0aCA9IHVsb25nX2FyZygiLS1kZXB0aCIsIGRlcHRoKTsKKwlpZiAobWF4X2RlcHRoID4gTUFYX0RFUFRIKQorCQlkaWUoIi0tZGVwdGggY2Fubm90IGV4Y2VlZCAldSIsIE1BWF9ERVBUSCk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9hY3RpdmVfYnJhbmNoZXMoY29uc3QgY2hhciAqYnJhbmNoZXMpCit7CisJbWF4X2FjdGl2ZV9icmFuY2hlcyA9IHVsb25nX2FyZygiLS1hY3RpdmUtYnJhbmNoZXMiLCBicmFuY2hlcyk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9leHBvcnRfbWFya3MoY29uc3QgY2hhciAqbWFya3MpCit7CisJZXhwb3J0X21hcmtzX2ZpbGUgPSBtYWtlX2Zhc3RfaW1wb3J0X3BhdGgobWFya3MpOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fY2F0X2Jsb2JfZmQoY29uc3QgY2hhciAqZmQpCit7CisJdW5zaWduZWQgbG9uZyBuID0gdWxvbmdfYXJnKCItLWNhdC1ibG9iLWZkIiwgZmQpOworCWlmIChuID4gKHVuc2lnbmVkIGxvbmcpIElOVF9NQVgpCisJCWRpZSgiLS1jYXQtYmxvYi1mZCBjYW5ub3QgZXhjZWVkICVkIiwgSU5UX01BWCk7CisJY2F0X2Jsb2JfZmQgPSAoaW50KSBuOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fZXhwb3J0X3BhY2tfZWRnZXMoY29uc3QgY2hhciAqZWRnZXMpCit7CisJaWYgKHBhY2tfZWRnZXMpCisJCWZjbG9zZShwYWNrX2VkZ2VzKTsKKwlwYWNrX2VkZ2VzID0geGZvcGVuKGVkZ2VzLCAiYSIpOworfQorCitzdGF0aWMgaW50IHBhcnNlX29uZV9vcHRpb24oY29uc3QgY2hhciAqb3B0aW9uKQoreworCWlmIChza2lwX3ByZWZpeChvcHRpb24sICJtYXgtcGFjay1zaXplPSIsICZvcHRpb24pKSB7CisJCXVuc2lnbmVkIGxvbmcgdjsKKwkJaWYgKCFnaXRfcGFyc2VfdWxvbmcob3B0aW9uLCAmdikpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHYgPCA4MTkyKSB7CisJCQl3YXJuaW5nKCJtYXgtcGFjay1zaXplIGlzIG5vdyBpbiBieXRlcywgYXNzdW1pbmcgLS1tYXgtcGFjay1zaXplPSVsdW0iLCB2KTsKKwkJCXYgKj0gMTAyNCAqIDEwMjQ7CisJCX0gZWxzZSBpZiAodiA8IDEwMjQgKiAxMDI0KSB7CisJCQl3YXJuaW5nKCJtaW5pbXVtIG1heC1wYWNrLXNpemUgaXMgMSBNaUIiKTsKKwkJCXYgPSAxMDI0ICogMTAyNDsKKwkJfQorCQltYXhfcGFja3NpemUgPSB2OworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiYmlnLWZpbGUtdGhyZXNob2xkPSIsICZvcHRpb24pKSB7CisJCXVuc2lnbmVkIGxvbmcgdjsKKwkJaWYgKCFnaXRfcGFyc2VfdWxvbmcob3B0aW9uLCAmdikpCisJCQlyZXR1cm4gMDsKKwkJYmlnX2ZpbGVfdGhyZXNob2xkID0gdjsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KG9wdGlvbiwgImRlcHRoPSIsICZvcHRpb24pKSB7CisJCW9wdGlvbl9kZXB0aChvcHRpb24pOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiYWN0aXZlLWJyYW5jaGVzPSIsICZvcHRpb24pKSB7CisJCW9wdGlvbl9hY3RpdmVfYnJhbmNoZXMob3B0aW9uKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KG9wdGlvbiwgImV4cG9ydC1wYWNrLWVkZ2VzPSIsICZvcHRpb24pKSB7CisJCW9wdGlvbl9leHBvcnRfcGFja19lZGdlcyhvcHRpb24pOworCX0gZWxzZSBpZiAoIXN0cmNtcChvcHRpb24sICJxdWlldCIpKSB7CisJCXNob3dfc3RhdHMgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChvcHRpb24sICJzdGF0cyIpKSB7CisJCXNob3dfc3RhdHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChvcHRpb24sICJhbGxvdy11bnNhZmUtZmVhdHVyZXMiKSkgeworCQk7IC8qIGFscmVhZHkgaGFuZGxlZCBkdXJpbmcgZWFybHkgb3B0aW9uIHBhcnNpbmcgKi8KKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdW5zYWZlX2ZlYXR1cmUoY29uc3QgY2hhciAqZmVhdHVyZSwgaW50IGZyb21fc3RyZWFtKQoreworCWlmIChmcm9tX3N0cmVhbSAmJiAhYWxsb3dfdW5zYWZlX2ZlYXR1cmVzKQorCQlkaWUoXygiZmVhdHVyZSAnJXMnIGZvcmJpZGRlbiBpbiBpbnB1dCB3aXRob3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIiksCisJCSAgICBmZWF0dXJlKTsKK30KKworc3RhdGljIGludCBwYXJzZV9vbmVfZmVhdHVyZShjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgZnJvbV9zdHJlYW0pCit7CisJY29uc3QgY2hhciAqYXJnOworCisJaWYgKHNraXBfcHJlZml4KGZlYXR1cmUsICJkYXRlLWZvcm1hdD0iLCAmYXJnKSkgeworCQlvcHRpb25fZGF0ZV9mb3JtYXQoYXJnKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGZlYXR1cmUsICJpbXBvcnQtbWFya3M9IiwgJmFyZykpIHsKKwkJY2hlY2tfdW5zYWZlX2ZlYXR1cmUoImltcG9ydC1tYXJrcyIsIGZyb21fc3RyZWFtKTsKKwkJb3B0aW9uX2ltcG9ydF9tYXJrcyhhcmcsIGZyb21fc3RyZWFtLCAwKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGZlYXR1cmUsICJpbXBvcnQtbWFya3MtaWYtZXhpc3RzPSIsICZhcmcpKSB7CisJCWNoZWNrX3Vuc2FmZV9mZWF0dXJlKCJpbXBvcnQtbWFya3MtaWYtZXhpc3RzIiwgZnJvbV9zdHJlYW0pOworCQlvcHRpb25faW1wb3J0X21hcmtzKGFyZywgZnJvbV9zdHJlYW0sIDEpOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgImV4cG9ydC1tYXJrcz0iLCAmYXJnKSkgeworCQljaGVja191bnNhZmVfZmVhdHVyZShmZWF0dXJlLCBmcm9tX3N0cmVhbSk7CisJCW9wdGlvbl9leHBvcnRfbWFya3MoYXJnKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoZmVhdHVyZSwgImFsaWFzIikpIHsKKwkJOyAvKiBEb24ndCBkaWUgLSB0aGlzIGZlYXR1cmUgaXMgc3VwcG9ydGVkICovCisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJnZXQtbWFyayIpKSB7CisJCTsgLyogRG9uJ3QgZGllIC0gdGhpcyBmZWF0dXJlIGlzIHN1cHBvcnRlZCAqLworCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAiY2F0LWJsb2IiKSkgeworCQk7IC8qIERvbid0IGRpZSAtIHRoaXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwl9IGVsc2UgaWYgKCFzdHJjbXAoZmVhdHVyZSwgInJlbGF0aXZlLW1hcmtzIikpIHsKKwkJcmVsYXRpdmVfbWFya3NfcGF0aHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAibm8tcmVsYXRpdmUtbWFya3MiKSkgeworCQlyZWxhdGl2ZV9tYXJrc19wYXRocyA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJkb25lIikpIHsKKwkJcmVxdWlyZV9leHBsaWNpdF90ZXJtaW5hdGlvbiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJmb3JjZSIpKSB7CisJCWZvcmNlX3VwZGF0ZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJub3RlcyIpIHx8ICFzdHJjbXAoZmVhdHVyZSwgImxzIikpIHsKKwkJOyAvKiBkbyBub3RoaW5nOyB3ZSBoYXZlIHRoZSBmZWF0dXJlICovCisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2ZlYXR1cmUoY29uc3QgY2hhciAqZmVhdHVyZSkKK3sKKwlpZiAoc2Vlbl9kYXRhX2NvbW1hbmQpCisJCWRpZSgiR290IGZlYXR1cmUgY29tbWFuZCAnJXMnIGFmdGVyIGRhdGEgY29tbWFuZCIsIGZlYXR1cmUpOworCisJaWYgKHBhcnNlX29uZV9mZWF0dXJlKGZlYXR1cmUsIDEpKQorCQlyZXR1cm47CisKKwlkaWUoIlRoaXMgdmVyc2lvbiBvZiBmYXN0LWltcG9ydCBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmUgJXMuIiwgZmVhdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKHNlZW5fZGF0YV9jb21tYW5kKQorCQlkaWUoIkdvdCBvcHRpb24gY29tbWFuZCAnJXMnIGFmdGVyIGRhdGEgY29tbWFuZCIsIG9wdGlvbik7CisKKwlpZiAocGFyc2Vfb25lX29wdGlvbihvcHRpb24pKQorCQlyZXR1cm47CisKKwlkaWUoIlRoaXMgdmVyc2lvbiBvZiBmYXN0LWltcG9ydCBkb2VzIG5vdCBzdXBwb3J0IG9wdGlvbjogJXMiLCBvcHRpb24pOworfQorCitzdGF0aWMgdm9pZCBnaXRfcGFja19jb25maWcodm9pZCkKK3sKKwlpbnQgaW5kZXh2ZXJzaW9uX3ZhbHVlOworCWludCBsaW1pdDsKKwl1bnNpZ25lZCBsb25nIHBhY2tzaXplbGltaXRfdmFsdWU7CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X3Vsb25nKCJwYWNrLmRlcHRoIiwgJm1heF9kZXB0aCkpIHsKKwkJaWYgKG1heF9kZXB0aCA+IE1BWF9ERVBUSCkKKwkJCW1heF9kZXB0aCA9IE1BWF9ERVBUSDsKKwl9CisJaWYgKCFnaXRfY29uZmlnX2dldF9pbnQoInBhY2suaW5kZXh2ZXJzaW9uIiwgJmluZGV4dmVyc2lvbl92YWx1ZSkpIHsKKwkJcGFja19pZHhfb3B0cy52ZXJzaW9uID0gaW5kZXh2ZXJzaW9uX3ZhbHVlOworCQlpZiAocGFja19pZHhfb3B0cy52ZXJzaW9uID4gMikKKwkJCWdpdF9kaWVfY29uZmlnKCJwYWNrLmluZGV4dmVyc2lvbiIsCisJCQkJCSJiYWQgcGFjay5pbmRleHZlcnNpb249JSJQUkl1MzIsIHBhY2tfaWR4X29wdHMudmVyc2lvbik7CisJfQorCWlmICghZ2l0X2NvbmZpZ19nZXRfdWxvbmcoInBhY2sucGFja3NpemVsaW1pdCIsICZwYWNrc2l6ZWxpbWl0X3ZhbHVlKSkKKwkJbWF4X3BhY2tzaXplID0gcGFja3NpemVsaW1pdF92YWx1ZTsKKworCWlmICghZ2l0X2NvbmZpZ19nZXRfaW50KCJmYXN0aW1wb3J0LnVucGFja2xpbWl0IiwgJmxpbWl0KSkKKwkJdW5wYWNrX2xpbWl0ID0gbGltaXQ7CisJZWxzZSBpZiAoIWdpdF9jb25maWdfZ2V0X2ludCgidHJhbnNmZXIudW5wYWNrbGltaXQiLCAmbGltaXQpKQorCQl1bnBhY2tfbGltaXQgPSBsaW1pdDsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZmFzdF9pbXBvcnRfdXNhZ2VbXSA9CisiZ2l0IGZhc3QtaW1wb3J0IFstLWRhdGUtZm9ybWF0PTxmPl0gWy0tbWF4LXBhY2stc2l6ZT08bj5dIFstLWJpZy1maWxlLXRocmVzaG9sZD08bj5dIFstLWRlcHRoPTxuPl0gWy0tYWN0aXZlLWJyYW5jaGVzPTxuPl0gWy0tZXhwb3J0LW1hcmtzPTxtYXJrcy5maWxlPl0iOworCitzdGF0aWMgdm9pZCBwYXJzZV9hcmd2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgZ2xvYmFsX2FyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphID0gZ2xvYmFsX2FyZ3ZbaV07CisKKwkJaWYgKCphICE9ICctJyB8fCAhc3RyY21wKGEsICItLSIpKQorCQkJYnJlYWs7CisKKwkJaWYgKCFza2lwX3ByZWZpeChhLCAiLS0iLCAmYSkpCisJCQlkaWUoInVua25vd24gb3B0aW9uICVzIiwgYSk7CisKKwkJaWYgKHBhcnNlX29uZV9vcHRpb24oYSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGFyc2Vfb25lX2ZlYXR1cmUoYSwgMCkpCisJCQljb250aW51ZTsKKworCQlpZiAoc2tpcF9wcmVmaXgoYSwgImNhdC1ibG9iLWZkPSIsICZhKSkgeworCQkJb3B0aW9uX2NhdF9ibG9iX2ZkKGEpOworCQkJY29udGludWU7CisJCX0KKworCQlkaWUoInVua25vd24gb3B0aW9uIC0tJXMiLCBhKTsKKwl9CisJaWYgKGkgIT0gZ2xvYmFsX2FyZ2MpCisJCXVzYWdlKGZhc3RfaW1wb3J0X3VzYWdlKTsKKworCXNlZW5fZGF0YV9jb21tYW5kID0gMTsKKwlpZiAoaW1wb3J0X21hcmtzX2ZpbGUpCisJCXJlYWRfbWFya3MoKTsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UoZmFzdF9pbXBvcnRfdXNhZ2UpOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCXJlc2V0X3BhY2tfaWR4X29wdGlvbigmcGFja19pZHhfb3B0cyk7CisJZ2l0X3BhY2tfY29uZmlnKCk7CisKKwlhbGxvY19vYmplY3RzKG9iamVjdF9lbnRyeV9hbGxvYyk7CisJc3RyYnVmX2luaXQoJmNvbW1hbmRfYnVmLCAwKTsKKwlhdG9tX3RhYmxlID0geGNhbGxvYyhhdG9tX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGF0b21fc3RyKikpOworCWJyYW5jaF90YWJsZSA9IHhjYWxsb2MoYnJhbmNoX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGJyYW5jaCopKTsKKwlhdmFpbF90cmVlX3RhYmxlID0geGNhbGxvYyhhdmFpbF90cmVlX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGF2YWlsX3RyZWVfY29udGVudCopKTsKKwltYXJrcyA9IG1lbV9wb29sX2NhbGxvYygmZmlfbWVtX3Bvb2wsIDEsIHNpemVvZihzdHJ1Y3QgbWFya19zZXQpKTsKKworCS8qCisJICogV2UgZG9uJ3QgcGFyc2UgbW9zdCBvcHRpb25zIHVudGlsIGFmdGVyIHdlJ3ZlIHNlZW4gdGhlIHNldCBvZgorCSAqICJmZWF0dXJlIiBsaW5lcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbSAod2hpY2ggYWxsb3dzIHRoZSBjb21tYW5kCisJICogbGluZSB0byBvdmVycmlkZSBzdHJlYW0gZGF0YSkuIEJ1dCB3ZSBtdXN0IGRvIGFuIGVhcmx5IHBhcnNlIG9mIGFueQorCSAqIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgaW1wYWN0IGhvdyB3ZSBpbnRlcnByZXQgdGhlIGZlYXR1cmUgbGluZXMuCisJICovCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoKmFyZyAhPSAnLScgfHwgIXN0cmNtcChhcmcsICItLSIpKQorCQkJYnJlYWs7CisJCWlmICghc3RyY21wKGFyZywgIi0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIikpCisJCQlhbGxvd191bnNhZmVfZmVhdHVyZXMgPSAxOworCX0KKworCWdsb2JhbF9hcmdjID0gYXJnYzsKKwlnbG9iYWxfYXJndiA9IGFyZ3Y7CisKKwlyY19mcmVlID0gbWVtX3Bvb2xfYWxsb2MoJmZpX21lbV9wb29sLCBjbWRfc2F2ZSAqIHNpemVvZigqcmNfZnJlZSkpOworCWZvciAoaSA9IDA7IGkgPCAoY21kX3NhdmUgLSAxKTsgaSsrKQorCQlyY19mcmVlW2ldLm5leHQgPSAmcmNfZnJlZVtpICsgMV07CisJcmNfZnJlZVtjbWRfc2F2ZSAtIDFdLm5leHQgPSBOVUxMOworCisJc3RhcnRfcGFja2ZpbGUoKTsKKwlzZXRfZGllX3JvdXRpbmUoZGllX25pY2VseSk7CisJc2V0X2NoZWNrcG9pbnRfc2lnbmFsKCk7CisJd2hpbGUgKHJlYWRfbmV4dF9jb21tYW5kKCkgIT0gRU9GKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmICghc3RyY21wKCJibG9iIiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCXBhcnNlX25ld19ibG9iKCk7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImNvbW1pdCAiLCAmdikpCisJCQlwYXJzZV9uZXdfY29tbWl0KHYpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJ0YWcgIiwgJnYpKQorCQkJcGFyc2VfbmV3X3RhZyh2KTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAicmVzZXQgIiwgJnYpKQorCQkJcGFyc2VfcmVzZXRfYnJhbmNoKHYpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJscyAiLCAmdikpCisJCQlwYXJzZV9scyh2LCBOVUxMKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiY2F0LWJsb2IgIiwgJnYpKQorCQkJcGFyc2VfY2F0X2Jsb2Iodik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImdldC1tYXJrICIsICZ2KSkKKwkJCXBhcnNlX2dldF9tYXJrKHYpOworCQllbHNlIGlmICghc3RyY21wKCJjaGVja3BvaW50IiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCXBhcnNlX2NoZWNrcG9pbnQoKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiZG9uZSIsIGNvbW1hbmRfYnVmLmJ1ZikpCisJCQlicmVhazsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiYWxpYXMiLCBjb21tYW5kX2J1Zi5idWYpKQorCQkJcGFyc2VfYWxpYXMoKTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoY29tbWFuZF9idWYuYnVmLCAicHJvZ3Jlc3MgIikpCisJCQlwYXJzZV9wcm9ncmVzcygpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJmZWF0dXJlICIsICZ2KSkKKwkJCXBhcnNlX2ZlYXR1cmUodik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIm9wdGlvbiBnaXQgIiwgJnYpKQorCQkJcGFyc2Vfb3B0aW9uKHYpOworCQllbHNlIGlmIChzdGFydHNfd2l0aChjb21tYW5kX2J1Zi5idWYsICJvcHRpb24gIikpCisJCQkvKiBpZ25vcmUgbm9uLWdpdCBvcHRpb25zKi87CisJCWVsc2UKKwkJCWRpZSgiVW5zdXBwb3J0ZWQgY29tbWFuZDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCisJCWlmIChjaGVja3BvaW50X3JlcXVlc3RlZCkKKwkJCWNoZWNrcG9pbnQoKTsKKwl9CisKKwkvKiBhcmd2IGhhc24ndCBiZWVuIHBhcnNlZCB5ZXQsIGRvIHNvICovCisJaWYgKCFzZWVuX2RhdGFfY29tbWFuZCkKKwkJcGFyc2VfYXJndigpOworCisJaWYgKHJlcXVpcmVfZXhwbGljaXRfdGVybWluYXRpb24gJiYgZmVvZihzdGRpbikpCisJCWRpZSgic3RyZWFtIGVuZHMgZWFybHkiKTsKKworCWVuZF9wYWNrZmlsZSgpOworCisJZHVtcF9icmFuY2hlcygpOworCWR1bXBfdGFncygpOworCXVua2VlcF9hbGxfcGFja3MoKTsKKwlkdW1wX21hcmtzKCk7CisKKwlpZiAocGFja19lZGdlcykKKwkJZmNsb3NlKHBhY2tfZWRnZXMpOworCisJaWYgKHNob3dfc3RhdHMpIHsKKwkJdWludG1heF90IHRvdGFsX2NvdW50ID0gMCwgZHVwbGljYXRlX2NvdW50ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2JqZWN0X2NvdW50X2J5X3R5cGUpOyBpKyspCisJCQl0b3RhbF9jb3VudCArPSBvYmplY3RfY291bnRfYnlfdHlwZVtpXTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHVwbGljYXRlX2NvdW50X2J5X3R5cGUpOyBpKyspCisJCQlkdXBsaWNhdGVfY291bnQgKz0gZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbaV07CisKKwkJZnByaW50ZihzdGRlcnIsICIlcyBzdGF0aXN0aWNzOlxuIiwgYXJndlswXSk7CisJCWZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJZnByaW50ZihzdGRlcnIsICJBbGxvYydkIG9iamVjdHM6ICUxMCIgUFJJdU1BWCAiXG4iLCBhbGxvY19jb3VudCk7CisJCWZwcmludGYoc3RkZXJyLCAiVG90YWwgb2JqZWN0czogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAgICAgICAgICAgICAgICAgIClcbiIsIHRvdGFsX2NvdW50LCBkdXBsaWNhdGVfY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIGJsb2JzICA6ICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIGR1cGxpY2F0ZXMgJTEwIiBQUkl1TUFYICIgZGVsdGFzIG9mICUxMCIgUFJJdU1BWCIgYXR0ZW1wdHMpXG4iLCBvYmplY3RfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0sIGR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW09CSl9CTE9CXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0sIGRlbHRhX2NvdW50X2F0dGVtcHRzX2J5X3R5cGVbT0JKX0JMT0JdKTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgICB0cmVlcyAgOiAgICUxMCIgUFJJdU1BWCAiICglMTAiIFBSSXVNQVggIiBkdXBsaWNhdGVzICUxMCIgUFJJdU1BWCAiIGRlbHRhcyBvZiAlMTAiIFBSSXVNQVgiIGF0dGVtcHRzKVxuIiwgb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX1RSRUVdLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfVFJFRV0sIGRlbHRhX2NvdW50X2J5X3R5cGVbT0JKX1RSRUVdLCBkZWx0YV9jb3VudF9hdHRlbXB0c19ieV90eXBlW09CSl9UUkVFXSk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgY29tbWl0czogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAlMTAiIFBSSXVNQVggIiBkZWx0YXMgb2YgJTEwIiBQUkl1TUFYIiBhdHRlbXB0cylcbiIsIG9iamVjdF9jb3VudF9ieV90eXBlW09CSl9DT01NSVRdLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXSwgZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVtPQkpfQ09NTUlUXSk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgdGFncyAgIDogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAlMTAiIFBSSXVNQVggIiBkZWx0YXMgb2YgJTEwIiBQUkl1TUFYIiBhdHRlbXB0cylcbiIsIG9iamVjdF9jb3VudF9ieV90eXBlW09CSl9UQUddLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfVEFHXSwgZGVsdGFfY291bnRfYnlfdHlwZVtPQkpfVEFHXSwgZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVtPQkpfVEFHXSk7CisJCWZwcmludGYoc3RkZXJyLCAiVG90YWwgYnJhbmNoZXM6ICAlMTBsdSAoJTEwbHUgbG9hZHMgICAgIClcbiIsIGJyYW5jaF9jb3VudCwgYnJhbmNoX2xvYWRfY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIG1hcmtzOiAgICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIHVuaXF1ZSAgICApXG4iLCAoKCh1aW50bWF4X3QpMSkgPDwgbWFya3MtPnNoaWZ0KSAqIDEwMjQsIG1hcmtzX3NldF9jb3VudCk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgYXRvbXM6ICAgICAlMTB1XG4iLCBhdG9tX2NudCk7CisJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IHRvdGFsOiAgICAlMTAiIFBSSXVNQVggIiBLaUJcbiIsICh0cmVlX2VudHJ5X2FsbG9jZCArIGZpX21lbV9wb29sLnBvb2xfYWxsb2MgKyBhbGxvY19jb3VudCpzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSkpLzEwMjQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgICBwb29sczogICAgJTEwbHUgS2lCXG4iLCAodW5zaWduZWQgbG9uZykoKHRyZWVfZW50cnlfYWxsb2NkICsgZmlfbWVtX3Bvb2wucG9vbF9hbGxvYykgLzEwMjQpKTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgIG9iamVjdHM6ICAgICUxMCIgUFJJdU1BWCAiIEtpQlxuIiwgKGFsbG9jX2NvdW50KnNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5KSkvMTAyNCk7CisJCWZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJcGFja19yZXBvcnQoKTsKKwkJZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorCisJcmV0dXJuIGZhaWx1cmUgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL2ZldGNoLW5lZ290aWF0b3IuYyBiL2ZldGNoLW5lZ290aWF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTEzNTdkCi0tLSAvZGV2L251bGwKKysrIGIvZmV0Y2gtbmVnb3RpYXRvci5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJmZXRjaC1uZWdvdGlhdG9yLmgiCisjaW5jbHVkZSAibmVnb3RpYXRvci9kZWZhdWx0LmgiCisjaW5jbHVkZSAibmVnb3RpYXRvci9za2lwcGluZy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKwordm9pZCBmZXRjaF9uZWdvdGlhdG9yX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcikKK3sKKwlwcmVwYXJlX3JlcG9fc2V0dGluZ3Mocik7CisJc3dpdGNoKHItPnNldHRpbmdzLmZldGNoX25lZ290aWF0aW9uX2FsZ29yaXRobSkgeworCWNhc2UgRkVUQ0hfTkVHT1RJQVRJT05fU0tJUFBJTkc6CisJCXNraXBwaW5nX25lZ290aWF0b3JfaW5pdChuZWdvdGlhdG9yKTsKKwkJcmV0dXJuOworCisJY2FzZSBGRVRDSF9ORUdPVElBVElPTl9ERUZBVUxUOgorCWRlZmF1bHQ6CisJCWRlZmF1bHRfbmVnb3RpYXRvcl9pbml0KG5lZ290aWF0b3IpOworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvZmV0Y2gtbmVnb3RpYXRvci5oIGIvZmV0Y2gtbmVnb3RpYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzg4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9mZXRjaC1uZWdvdGlhdG9yLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBGRVRDSF9ORUdPVElBVE9SX0gKKyNkZWZpbmUgRkVUQ0hfTkVHT1RJQVRPUl9ICisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworLyoKKyAqIEFuIG9iamVjdCB0aGF0IHN1cHBsaWVzIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gbmVnb3RpYXRlIHRoZSBjb250ZW50cyBvZgorICogdGhlIHRvLWJlLXNlbnQgcGFja2ZpbGUgZHVyaW5nIGEgZmV0Y2guCisgKgorICogVG8gc2V0IHVwIHRoZSBuZWdvdGlhdG9yLCBjYWxsIGZldGNoX25lZ290aWF0b3JfaW5pdCgpLCB0aGVuIGtub3duX2NvbW1vbigpCisgKiAoMCBvciBtb3JlIHRpbWVzKSwgdGhlbiBhZGRfdGlwKCkgKDAgb3IgbW9yZSB0aW1lcykuCisgKgorICogVGhlbiwgd2hlbiAiaGF2ZSIgbGluZXMgYXJlIHJlcXVpcmVkLCBjYWxsIG5leHQoKS4gQ2FsbCBhY2soKSB0byByZXBvcnQgd2hhdAorICogdGhlIHNlcnZlciB0ZWxscyB1cy4KKyAqCisgKiBPbmNlIG5lZ290aWF0aW9uIGlzIGRvbmUsIGNhbGwgcmVsZWFzZSgpLiBUaGUgbmVnb3RpYXRvciB0aGVuIGNhbm5vdCBiZSB1c2VkCisgKiAodW5sZXNzIHJlaW5pdGlhbGl6ZWQgd2l0aCBmZXRjaF9uZWdvdGlhdG9yX2luaXQoKSkuCisgKi8KK3N0cnVjdCBmZXRjaF9uZWdvdGlhdG9yIHsKKwkvKgorCSAqIEJlZm9yZSBuZWdvdGlhdGlvbiBzdGFydHMsIGluZGljYXRlIHRoYXQgdGhlIHNlcnZlciBpcyBrbm93biB0byBoYXZlCisJICogdGhpcyBjb21taXQuCisJICovCisJdm9pZCAoKmtub3duX2NvbW1vbikoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKiwgc3RydWN0IGNvbW1pdCAqKTsKKworCS8qCisJICogT25jZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQsIGtub3duX2NvbW1vbigpIGNhbm5vdCBiZSBpbnZva2VkIGFueQorCSAqIG1vcmUuCisJICoKKwkgKiBJbmRpY2F0ZSB0aGF0IHRoaXMgY29tbWl0IGFuZCBhbGwgaXRzIGFuY2VzdG9ycyBhcmUgdG8gYmUgY2hlY2tlZAorCSAqIGZvciBjb21tb25hbGl0eSB3aXRoIHRoZSBzZXJ2ZXIuCisJICovCisJdm9pZCAoKmFkZF90aXApKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICosIHN0cnVjdCBjb21taXQgKik7CisKKwkvKgorCSAqIE9uY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLCBrbm93bl9jb21tb24oKSBhbmQgYWRkX3RpcCgpIGNhbm5vdAorCSAqIGJlIGludm9rZWQgYW55IG1vcmUuCisJICoKKwkgKiBSZXR1cm4gdGhlIG5leHQgY29tbWl0IHRoYXQgdGhlIGNsaWVudCBzaG91bGQgc2VuZCBhcyBhICJoYXZlIiBsaW5lLgorCSAqLworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKigqbmV4dCkoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKik7CisKKwkvKgorCSAqIEluZm9ybSB0aGUgbmVnb3RpYXRvciB0aGF0IHRoZSBzZXJ2ZXIgaGFzIHRoZSBnaXZlbiBjb21taXQuIFRoaXMKKwkgKiBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCBvbiBjb21taXRzIHJldHVybmVkIGJ5IG5leHQoKS4KKwkgKi8KKwlpbnQgKCphY2spKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICosIHN0cnVjdCBjb21taXQgKik7CisKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKik7CisKKwkvKiBpbnRlcm5hbCB1c2UgKi8KKwl2b2lkICpkYXRhOworfTsKKwordm9pZCBmZXRjaF9uZWdvdGlhdG9yX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5jIGIvZmV0Y2gtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzRhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9mZXRjaC1wYWNrLmMKQEAgLTAsMCArMSwxODIyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgImZldGNoLXBhY2suaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29ubmVjdGVkLmgiCisjaW5jbHVkZSAiZmV0Y2gtbmVnb3RpYXRvci5oIgorI2luY2x1ZGUgImZzY2suaCIKKworc3RhdGljIGludCB0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSAtMTsKK3N0YXRpYyBpbnQgZmV0Y2hfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IHVucGFja19saW1pdCA9IDEwMDsKK3N0YXRpYyBpbnQgcHJlZmVyX29mc19kZWx0YSA9IDE7CitzdGF0aWMgaW50IG5vX2RvbmU7CitzdGF0aWMgaW50IGRlZXBlbl9zaW5jZV9vazsKK3N0YXRpYyBpbnQgZGVlcGVuX25vdF9vazsKK3N0YXRpYyBpbnQgZmV0Y2hfZnNja19vYmplY3RzID0gLTE7CitzdGF0aWMgaW50IHRyYW5zZmVyX2ZzY2tfb2JqZWN0cyA9IC0xOworc3RhdGljIGludCBhZ2VudF9zdXBwb3J0ZWQ7CitzdGF0aWMgaW50IHNlcnZlcl9zdXBwb3J0c19maWx0ZXJpbmc7CitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBzaGFsbG93X2xvY2s7CitzdGF0aWMgY29uc3QgY2hhciAqYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGZzY2tfbXNnX3R5cGVzID0gU1RSQlVGX0lOSVQ7CisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIENPTVBMRVRFCSgxVSA8PCAwKQorI2RlZmluZSBBTFRFUk5BVEUJKDFVIDw8IDEpCisKKy8qCisgKiBBZnRlciBzZW5kaW5nIHRoaXMgbWFueSAiaGF2ZSJzIGlmIHdlIGRvIG5vdCBnZXQgYW55IG5ldyBBQ0sgLCB3ZQorICogZ2l2ZSB1cCB0cmF2ZXJzaW5nIG91ciBoaXN0b3J5LgorICovCisjZGVmaW5lIE1BWF9JTl9WQUlOIDI1NgorCitzdGF0aWMgaW50IG11bHRpX2FjaywgdXNlX3NpZGViYW5kOworLyogQWxsb3cgc3BlY2lmeWluZyBzaGExIGlmIGl0IGlzIGEgcmVmIHRpcC4gKi8KKyNkZWZpbmUgQUxMT1dfVElQX1NIQTEJMDEKKy8qIEFsbG93IHJlcXVlc3Qgb2YgYSBzaGExIGlmIGl0IGlzIHJlYWNoYWJsZSBmcm9tIGEgcmVmIChwb3NzaWJseSBoaWRkZW4gcmVmKS4gKi8KKyNkZWZpbmUgQUxMT1dfUkVBQ0hBQkxFX1NIQTEJMDIKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0OworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQorc3RhdGljIGlubGluZSB2b2lkIHByaW50X3ZlcmJvc2UoY29uc3Qgc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJCQkgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlpZiAoIWFyZ3MtPnZlcmJvc2UpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm10KTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlmcHV0YygnXG4nLCBzdGRlcnIpOworfQorCitzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9jYWNoZSB7CisJc3RydWN0IG9iamVjdCAqKml0ZW1zOworCXNpemVfdCBuciwgYWxsb2M7Cit9OworCitzdGF0aWMgdm9pZCBjYWNoZV9vbmVfYWx0ZXJuYXRlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQl2b2lkICp2Y2FjaGUpCit7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfY2FjaGUgKmNhY2hlID0gdmNhY2hlOworCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKworCWlmICghb2JqIHx8IChvYmotPmZsYWdzICYgQUxURVJOQVRFKSkKKwkJcmV0dXJuOworCisJb2JqLT5mbGFncyB8PSBBTFRFUk5BVEU7CisJQUxMT0NfR1JPVyhjYWNoZS0+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+bmFtZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfY29tbW9uKHN0cnVjdCBzdHJidWYgKnJlcV9idWYsIHN0cnVjdCBvaWRzZXQgKmNvbW1vbikKK3sKKwlzdHJ1Y3Qgb2lkc2V0X2l0ZXIgaXRlcjsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CisJb2lkc2V0X2l0ZXJfaW5pdChjb21tb24sICZpdGVyKTsKKworCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKSB7CisJCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwgImhhdmUgJXNcbiIsIG9pZF90b19oZXgob2lkKSk7CisJfQorfQorCitzdGF0aWMgaW50IGFkZF9oYXZlcyhzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvciwKKwkJICAgICBzdHJ1Y3Qgc3RyYnVmICpyZXFfYnVmLAorCQkgICAgIGludCAqaGF2ZXNfdG9fc2VuZCwgaW50ICppbl92YWluKQoreworCWludCByZXQgPSAwOworCWludCBoYXZlc19hZGRlZCA9IDA7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCisJd2hpbGUgKChvaWQgPSBuZWdvdGlhdG9yLT5uZXh0KG5lZ290aWF0b3IpKSkgeworCQlwYWNrZXRfYnVmX3dyaXRlKHJlcV9idWYsICJoYXZlICVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCQlpZiAoKytoYXZlc19hZGRlZCA+PSAqaGF2ZXNfdG9fc2VuZCkKKwkJCWJyZWFrOworCX0KKworCSppbl92YWluICs9IGhhdmVzX2FkZGVkOworCWlmICghaGF2ZXNfYWRkZWQgfHwgKmluX3ZhaW4gPj0gTUFYX0lOX1ZBSU4pIHsKKwkJLyogU2VuZCBEb25lICovCisJCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwgImRvbmVcbiIpOworCQlyZXQgPSAxOworCX0KKworCS8qIEluY3JlYXNlIGhhdmVzIHRvIHNlbmQgb24gbmV4dCByb3VuZCAqLworCSpoYXZlc190b19zZW5kID0gbmV4dF9mbHVzaCgxLCAqaGF2ZXNfdG9fc2VuZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNlbmRfZmV0Y2hfcmVxdWVzdChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvciwgaW50IGZkX291dCwKKwkJCSAgICAgIHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVmICp3YW50cywgc3RydWN0IG9pZHNldCAqY29tbW9uLAorCQkJICAgICAgaW50ICpoYXZlc190b19zZW5kLCBpbnQgKmluX3ZhaW4sCisJCQkgICAgICBpbnQgc2lkZWJhbmRfYWxsKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBzdHJidWYgcmVxX2J1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKHNlcnZlcl9zdXBwb3J0c192MigiZmV0Y2giLCAxKSkKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgImNvbW1hbmQ9ZmV0Y2giKTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzX3YyKCJhZ2VudCIsIDApKQorCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiYWdlbnQ9JXMiLCBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CisJaWYgKGFyZ3MtPnNlcnZlcl9vcHRpb25zICYmIGFyZ3MtPnNlcnZlcl9vcHRpb25zLT5uciAmJgorCSAgICBzZXJ2ZXJfc3VwcG9ydHNfdjIoInNlcnZlci1vcHRpb24iLCAxKSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPnNlcnZlcl9vcHRpb25zLT5ucjsgaSsrKQorCQkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgInNlcnZlci1vcHRpb249JXMiLAorCQkJCQkgYXJncy0+c2VydmVyX29wdGlvbnMtPml0ZW1zW2ldLnN0cmluZyk7CisJfQorCisJcGFja2V0X2J1Zl9kZWxpbSgmcmVxX2J1Zik7CisJaWYgKGFyZ3MtPnVzZV90aGluX3BhY2spCisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJ0aGluLXBhY2siKTsKKwlpZiAoYXJncy0+bm9fcHJvZ3Jlc3MpCisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJuby1wcm9ncmVzcyIpOworCWlmIChhcmdzLT5pbmNsdWRlX3RhZykKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgImluY2x1ZGUtdGFnIik7CisJaWYgKHByZWZlcl9vZnNfZGVsdGEpCisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJvZnMtZGVsdGEiKTsKKwlpZiAoc2lkZWJhbmRfYWxsKQorCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAic2lkZWJhbmQtYWxsIik7CisKKwkvKiBBZGQgc2hhbGxvdy1pbmZvIGFuZCBkZWVwZW4gcmVxdWVzdCAqLworCWlmIChzZXJ2ZXJfc3VwcG9ydHNfZmVhdHVyZSgiZmV0Y2giLCAic2hhbGxvdyIsIDApKQorCQlhZGRfc2hhbGxvd19yZXF1ZXN0cygmcmVxX2J1ZiwgYXJncyk7CisJZWxzZSBpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSB8fCBhcmdzLT5kZWVwZW4pCisJCWRpZShfKCJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIikpOworCisJLyogQWRkIGZpbHRlciAqLworCWlmIChzZXJ2ZXJfc3VwcG9ydHNfZmVhdHVyZSgiZmV0Y2giLCAiZmlsdGVyIiwgMCkgJiYKKwkgICAgYXJncy0+ZmlsdGVyX29wdGlvbnMuY2hvaWNlKSB7CisJCWNvbnN0IGNoYXIgKnNwZWMgPQorCQkJZXhwYW5kX2xpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYygmYXJncy0+ZmlsdGVyX29wdGlvbnMpOworCQlwcmludF92ZXJib3NlKGFyZ3MsIF8oIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiKSk7CisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJmaWx0ZXIgJXMiLCBzcGVjKTsKKwl9IGVsc2UgaWYgKGFyZ3MtPmZpbHRlcl9vcHRpb25zLmNob2ljZSkgeworCQl3YXJuaW5nKCJmaWx0ZXJpbmcgbm90IHJlY29nbml6ZWQgYnkgc2VydmVyLCBpZ25vcmluZyIpOworCX0KKworCS8qIGFkZCB3YW50cyAqLworCWFkZF93YW50cyhhcmdzLT5ub19kZXBlbmRlbnRzLCB3YW50cywgJnJlcV9idWYpOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgImRvbmUiKTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgeworCQkvKiBBZGQgYWxsIG9mIHRoZSBjb21tb24gY29tbWl0cyB3ZSd2ZSBmb3VuZCBpbiBwcmV2aW91cyByb3VuZHMgKi8KKwkJYWRkX2NvbW1vbigmcmVxX2J1ZiwgY29tbW9uKTsKKworCQkvKiBBZGQgaW5pdGlhbCBoYXZlcyAqLworCQlyZXQgPSBhZGRfaGF2ZXMobmVnb3RpYXRvciwgJnJlcV9idWYsIGhhdmVzX3RvX3NlbmQsIGluX3ZhaW4pOworCX0KKworCS8qIFNlbmQgcmVxdWVzdCAqLworCXBhY2tldF9idWZfZmx1c2goJnJlcV9idWYpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkX291dCwgcmVxX2J1Zi5idWYsIHJlcV9idWYubGVuKSA8IDApCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiKSk7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVxX2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFByb2Nlc3NlcyBhIHNlY3Rpb24gaGVhZGVyIGluIGEgc2VydmVyJ3MgcmVzcG9uc2UgYW5kIGNoZWNrcyBpZiBpdCBtYXRjaGVzCisgKiBgc2VjdGlvbmAuICBJZiB0aGUgdmFsdWUgb2YgYHBlZWtgIGlzIDEsIHRoZSBoZWFkZXIgbGluZSB3aWxsIGJlIHBlZWtlZCAoYW5kCisgKiBub3QgY29uc3VtZWQpOyBpZiAwLCB0aGUgbGluZSB3aWxsIGJlIGNvbnN1bWVkIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBkaWUgaWYKKyAqIHRoZSBzZWN0aW9uIGhlYWRlciBkb2Vzbid0IG1hdGNoIHdoYXQgd2FzIGV4cGVjdGVkLgorICovCitzdGF0aWMgaW50IHByb2Nlc3Nfc2VjdGlvbl9oZWFkZXIoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwKKwkJCQkgIGNvbnN0IGNoYXIgKnNlY3Rpb24sIGludCBwZWVrKQoreworCWludCByZXQ7CisKKwlpZiAocGFja2V0X3JlYWRlcl9wZWVrKHJlYWRlcikgIT0gUEFDS0VUX1JFQURfTk9STUFMKQorCQlkaWUoXygiZXJyb3IgcmVhZGluZyBzZWN0aW9uIGhlYWRlciAnJXMnIiksIHNlY3Rpb24pOworCisJcmV0ID0gIXN0cmNtcChyZWFkZXItPmxpbmUsIHNlY3Rpb24pOworCisJaWYgKCFwZWVrKSB7CisJCWlmICghcmV0KQorCQkJZGllKF8oImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciKSwKKwkJCSAgICBzZWN0aW9uLCByZWFkZXItPmxpbmUpOworCQlwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfYWNrcyhzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvciwKKwkJCXN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIsCisJCQlzdHJ1Y3Qgb2lkc2V0ICpjb21tb24pCit7CisJLyogcmVjZWl2ZWQgKi8KKwlpbnQgcmVjZWl2ZWRfcmVhZHkgPSAwOworCWludCByZWNlaXZlZF9hY2sgPSAwOworCisJcHJvY2Vzc19zZWN0aW9uX2hlYWRlcihyZWFkZXIsICJhY2tub3dsZWRnbWVudHMiLCAwKTsKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgPT0gUEFDS0VUX1JFQURfTk9STUFMKSB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKworCQlpZiAoIXN0cmNtcChyZWFkZXItPmxpbmUsICJOQUsiKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChza2lwX3ByZWZpeChyZWFkZXItPmxpbmUsICJBQ0sgIiwgJmFyZykpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJaWYgKCFnZXRfb2lkX2hleChhcmcsICZvaWQpKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQkJCW9pZHNldF9pbnNlcnQoY29tbW9uLCAmb2lkKTsKKwkJCQljb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwkJCQlpZiAobmVnb3RpYXRvcikKKwkJCQkJbmVnb3RpYXRvci0+YWNrKG5lZ290aWF0b3IsIGNvbW1pdCk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3RyY21wKHJlYWRlci0+bGluZSwgInJlYWR5IikpIHsKKwkJCXJlY2VpdmVkX3JlYWR5ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGllKF8oInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIpLCByZWFkZXItPmxpbmUpOworCX0KKworCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9GTFVTSCAmJgorCSAgICByZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9ERUxJTSkKKwkJZGllKF8oImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiKSwgcmVhZGVyLT5zdGF0dXMpOworCisJLyoKKwkgKiBJZiBhbiAiYWNrbm93bGVkZ21lbnRzIiBzZWN0aW9uIGlzIHNlbnQsIGEgcGFja2ZpbGUgaXMgc2VudCBpZiBhbmQKKwkgKiBvbmx5IGlmICJyZWFkeSIgd2FzIHNlbnQgaW4gdGhpcyBzZWN0aW9uLiBUaGUgb3RoZXIgc2VjdGlvbnMKKwkgKiAoInNoYWxsb3ctaW5mbyIgYW5kICJ3YW50ZWQtcmVmcyIpIGFyZSBzZW50IG9ubHkgaWYgYSBwYWNrZmlsZSBpcworCSAqIHNlbnQuIFRoZXJlZm9yZSwgYSBERUxJTSBpcyBleHBlY3RlZCBpZiAicmVhZHkiIGlzIHNlbnQsIGFuZCBhIEZMVVNICisJICogb3RoZXJ3aXNlLgorCSAqLworCWlmIChyZWNlaXZlZF9yZWFkeSAmJiByZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9ERUxJTSkKKwkJZGllKF8oImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIpKTsKKwlpZiAoIXJlY2VpdmVkX3JlYWR5ICYmIHJlYWRlci0+c3RhdHVzICE9IFBBQ0tFVF9SRUFEX0ZMVVNIKQorCQlkaWUoXygiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIikpOworCisJLyogcmV0dXJuIDAgaWYgbm8gY29tbW9uLCAxIGlmIHRoZXJlIGFyZSBjb21tb24sIG9yIDIgaWYgcmVhZHkgKi8KKwlyZXR1cm4gcmVjZWl2ZWRfcmVhZHkgPyAyIDogKHJlY2VpdmVkX2FjayA/IDEgOiAwKTsKK30KKworc3RhdGljIHZvaWQgcmVjZWl2ZV9zaGFsbG93X2luZm8oc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJCQkgc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwKKwkJCQkgc3RydWN0IG9pZF9hcnJheSAqc2hhbGxvd3MsCisJCQkJIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCWludCB1bnNoYWxsb3dfcmVjZWl2ZWQgPSAwOworCisJcHJvY2Vzc19zZWN0aW9uX2hlYWRlcihyZWFkZXIsICJzaGFsbG93LWluZm8iLCAwKTsKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgPT0gUEFDS0VUX1JFQURfTk9STUFMKSB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJaWYgKHNraXBfcHJlZml4KHJlYWRlci0+bGluZSwgInNoYWxsb3cgIiwgJmFyZykpIHsKKwkJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQorCQkJCWRpZShfKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiKSwgcmVhZGVyLT5saW5lKTsKKwkJCW9pZF9hcnJheV9hcHBlbmQoc2hhbGxvd3MsICZvaWQpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KHJlYWRlci0+bGluZSwgInVuc2hhbGxvdyAiLCAmYXJnKSkgeworCQkJaWYgKGdldF9vaWRfaGV4KGFyZywgJm9pZCkpCisJCQkJZGllKF8oImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIiksIHJlYWRlci0+bGluZSk7CisJCQlpZiAoIWxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvaWQpKQorCQkJCWRpZShfKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIpLCByZWFkZXItPmxpbmUpOworCQkJLyogbWFrZSBzdXJlIHRoYXQgaXQgaXMgcGFyc2VkIGFzIHNoYWxsb3cgKi8KKwkJCWlmICghcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKSkKKwkJCQlkaWUoXygiZXJyb3IgaW4gb2JqZWN0OiAlcyIpLCByZWFkZXItPmxpbmUpOworCQkJaWYgKHVucmVnaXN0ZXJfc2hhbGxvdygmb2lkKSkKKwkJCQlkaWUoXygibm8gc2hhbGxvdyBmb3VuZDogJXMiKSwgcmVhZGVyLT5saW5lKTsKKwkJCXVuc2hhbGxvd19yZWNlaXZlZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlkaWUoXygiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIpLCByZWFkZXItPmxpbmUpOworCX0KKworCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9GTFVTSCAmJgorCSAgICByZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9ERUxJTSkKKwkJZGllKF8oImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIpLCByZWFkZXItPnN0YXR1cyk7CisKKwlpZiAoYXJncy0+ZGVlcGVuIHx8IHVuc2hhbGxvd19yZWNlaXZlZCkgeworCQkvKgorCQkgKiBUcmVhdCB0aGVzZSBhcyBzaGFsbG93IGxpbmVzIGNhdXNlZCBieSBvdXIgZGVwdGggc2V0dGluZ3MuCisJCSAqIEluIHYwLCB0aGVzZSBsaW5lcyBjYW5ub3QgY2F1c2UgcmVmcyB0byBiZSByZWplY3RlZDsgZG8gdGhlCisJCSAqIHNhbWUuCisJCSAqLworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2hhbGxvd3MtPm5yOyBpKyspCisJCQlyZWdpc3Rlcl9zaGFsbG93KHRoZV9yZXBvc2l0b3J5LCAmc2hhbGxvd3MtPm9pZFtpXSk7CisJCXNldHVwX2FsdGVybmF0ZV9zaGFsbG93KCZzaGFsbG93X2xvY2ssICZhbHRlcm5hdGVfc2hhbGxvd19maWxlLAorCQkJCQlOVUxMKTsKKwkJYXJncy0+ZGVlcGVuID0gMTsKKwl9IGVsc2UgaWYgKHNoYWxsb3dzLT5ucikgeworCQkvKgorCQkgKiBUcmVhdCB0aGVzZSBhcyBzaGFsbG93IGxpbmVzIGNhdXNlZCBieSB0aGUgcmVtb3RlIGJlaW5nCisJCSAqIHNoYWxsb3cuIEluIHYwLCByZW1vdGUgcmVmcyB0aGF0IHJlYWNoIHRoZXNlIG9iamVjdHMgYXJlCisJCSAqIHJlamVjdGVkICh1bmxlc3MgLS11cGRhdGUtc2hhbGxvdyBpcyBzZXQpOyBkbyB0aGUgc2FtZS4KKwkJICovCisJCXByZXBhcmVfc2hhbGxvd19pbmZvKHNpLCBzaGFsbG93cyk7CisJCWlmIChzaS0+bnJfb3VycyB8fCBzaS0+bnJfdGhlaXJzKQorCQkJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9CisJCQkJc2V0dXBfdGVtcG9yYXJ5X3NoYWxsb3coc2ktPnNoYWxsb3cpOworCQllbHNlCisJCQlhbHRlcm5hdGVfc2hhbGxvd19maWxlID0gTlVMTDsKKwl9IGVsc2UgeworCQlhbHRlcm5hdGVfc2hhbGxvd19maWxlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY21wX25hbWVfcmVmKGNvbnN0IHZvaWQgKm5hbWUsIGNvbnN0IHZvaWQgKnJlZikKK3sKKwlyZXR1cm4gc3RyY21wKG5hbWUsICgqKHN0cnVjdCByZWYgKiopcmVmKS0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY2VpdmVfd2FudGVkX3JlZnMoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwKKwkJCQlzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQoreworCXByb2Nlc3Nfc2VjdGlvbl9oZWFkZXIocmVhZGVyLCAid2FudGVkLXJlZnMiLCAwKTsKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgPT0gUEFDS0VUX1JFQURfTk9STUFMKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljb25zdCBjaGFyICplbmQ7CisJCXN0cnVjdCByZWYgKipmb3VuZDsKKworCQlpZiAocGFyc2Vfb2lkX2hleChyZWFkZXItPmxpbmUsICZvaWQsICZlbmQpIHx8ICplbmQrKyAhPSAnICcpCisJCQlkaWUoXygiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciKSwgcmVhZGVyLT5saW5lKTsKKworCQlmb3VuZCA9IGJzZWFyY2goZW5kLCBzb3VnaHQsIG5yX3NvdWdodCwgc2l6ZW9mKCpzb3VnaHQpLAorCQkJCWNtcF9uYW1lX3JlZik7CisJCWlmICghZm91bmQpCisJCQlkaWUoXygidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIiksIHJlYWRlci0+bGluZSk7CisJCW9pZGNweSgmKCpmb3VuZCktPm9sZF9vaWQsICZvaWQpOworCX0KKworCWlmIChyZWFkZXItPnN0YXR1cyAhPSBQQUNLRVRfUkVBRF9ERUxJTSkKKwkJZGllKF8oImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIiksIHJlYWRlci0+c3RhdHVzKTsKK30KKworZW51bSBmZXRjaF9zdGF0ZSB7CisJRkVUQ0hfQ0hFQ0tfTE9DQUwgPSAwLAorCUZFVENIX1NFTkRfUkVRVUVTVCwKKwlGRVRDSF9QUk9DRVNTX0FDS1MsCisJRkVUQ0hfR0VUX1BBQ0ssCisJRkVUQ0hfRE9ORSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpkb19mZXRjaF9wYWNrX3YyKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkJICAgIGludCBmZFsyXSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHJlZiAqb3JpZ19yZWYsCisJCQkJICAgIHN0cnVjdCByZWYgKipzb3VnaHQsIGludCBucl9zb3VnaHQsCisJCQkJICAgIHN0cnVjdCBvaWRfYXJyYXkgKnNoYWxsb3dzLAorCQkJCSAgICBzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSwKKwkJCQkgICAgY2hhciAqKnBhY2tfbG9ja2ZpbGUpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKwlzdHJ1Y3QgcmVmICpyZWYgPSBjb3B5X3JlZl9saXN0KG9yaWdfcmVmKTsKKwllbnVtIGZldGNoX3N0YXRlIHN0YXRlID0gRkVUQ0hfQ0hFQ0tfTE9DQUw7CisJc3RydWN0IG9pZHNldCBjb21tb24gPSBPSURTRVRfSU5JVDsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisJaW50IGluX3ZhaW4gPSAwLCBuZWdvdGlhdGlvbl9zdGFydGVkID0gMDsKKwlpbnQgaGF2ZXNfdG9fc2VuZCA9IElOSVRJQUxfRkxVU0g7CisJc3RydWN0IGZldGNoX25lZ290aWF0b3IgbmVnb3RpYXRvcl9hbGxvYzsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcjsKKworCWlmIChhcmdzLT5ub19kZXBlbmRlbnRzKSB7CisJCW5lZ290aWF0b3IgPSBOVUxMOworCX0gZWxzZSB7CisJCW5lZ290aWF0b3IgPSAmbmVnb3RpYXRvcl9hbGxvYzsKKwkJZmV0Y2hfbmVnb3RpYXRvcl9pbml0KHIsIG5lZ290aWF0b3IpOworCX0KKworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCBmZFswXSwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUgfAorCQkJICAgUEFDS0VUX1JFQURfRElFX09OX0VSUl9QQUNLRVQpOworCWlmIChnaXRfZW52X2Jvb2woIkdJVF9URVNUX1NJREVCQU5EX0FMTCIsIDEpICYmCisJICAgIHNlcnZlcl9zdXBwb3J0c19mZWF0dXJlKCJmZXRjaCIsICJzaWRlYmFuZC1hbGwiLCAwKSkgeworCQlyZWFkZXIudXNlX3NpZGViYW5kID0gMTsKKwkJcmVhZGVyLm1lID0gImZldGNoLXBhY2siOworCX0KKworCXdoaWxlIChzdGF0ZSAhPSBGRVRDSF9ET05FKSB7CisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBGRVRDSF9DSEVDS19MT0NBTDoKKwkJCXNvcnRfcmVmX2xpc3QoJnJlZiwgcmVmX2NvbXBhcmVfbmFtZSk7CisJCQlRU09SVChzb3VnaHQsIG5yX3NvdWdodCwgY21wX3JlZl9ieV9uYW1lKTsKKworCQkJLyogdjIgc3VwcG9ydHMgdGhlc2UgYnkgZGVmYXVsdCAqLworCQkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0IHw9IEFMTE9XX1JFQUNIQUJMRV9TSEExOworCQkJdXNlX3NpZGViYW5kID0gMjsKKwkJCWlmIChhcmdzLT5kZXB0aCA+IDAgfHwgYXJncy0+ZGVlcGVuX3NpbmNlIHx8IGFyZ3MtPmRlZXBlbl9ub3QpCisJCQkJYXJncy0+ZGVlcGVuID0gMTsKKworCQkJLyogRmlsdGVyICdyZWYnIGJ5ICdzb3VnaHQnIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCBsb2NhbCAqLworCQkJaWYgKCFhcmdzLT5ub19kZXBlbmRlbnRzKSB7CisJCQkJbWFya19jb21wbGV0ZV9hbmRfY29tbW9uX3JlZihuZWdvdGlhdG9yLCBhcmdzLCAmcmVmKTsKKwkJCQlmaWx0ZXJfcmVmcyhhcmdzLCAmcmVmLCBzb3VnaHQsIG5yX3NvdWdodCk7CisJCQkJaWYgKGV2ZXJ5dGhpbmdfbG9jYWwoYXJncywgJnJlZikpCisJCQkJCXN0YXRlID0gRkVUQ0hfRE9ORTsKKwkJCQllbHNlCisJCQkJCXN0YXRlID0gRkVUQ0hfU0VORF9SRVFVRVNUOworCisJCQkJbWFya190aXBzKG5lZ290aWF0b3IsIGFyZ3MtPm5lZ290aWF0aW9uX3RpcHMpOworCQkJCWZvcl9lYWNoX2NhY2hlZF9hbHRlcm5hdGUobmVnb3RpYXRvciwKKwkJCQkJCQkgIGluc2VydF9vbmVfYWx0ZXJuYXRlX29iamVjdCk7CisJCQl9IGVsc2UgeworCQkJCWZpbHRlcl9yZWZzKGFyZ3MsICZyZWYsIHNvdWdodCwgbnJfc291Z2h0KTsKKwkJCQlzdGF0ZSA9IEZFVENIX1NFTkRfUkVRVUVTVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZFVENIX1NFTkRfUkVRVUVTVDoKKwkJCWlmICghbmVnb3RpYXRpb25fc3RhcnRlZCkgeworCQkJCW5lZ290aWF0aW9uX3N0YXJ0ZWQgPSAxOworCQkJCXRyYWNlMl9yZWdpb25fZW50ZXIoImZldGNoLXBhY2siLAorCQkJCQkJICAgICJuZWdvdGlhdGlvbl92MiIsCisJCQkJCQkgICAgdGhlX3JlcG9zaXRvcnkpOworCQkJfQorCQkJaWYgKHNlbmRfZmV0Y2hfcmVxdWVzdChuZWdvdGlhdG9yLCBmZFsxXSwgYXJncywgcmVmLAorCQkJCQkgICAgICAgJmNvbW1vbiwKKwkJCQkJICAgICAgICZoYXZlc190b19zZW5kLCAmaW5fdmFpbiwKKwkJCQkJICAgICAgIHJlYWRlci51c2Vfc2lkZWJhbmQpKQorCQkJCXN0YXRlID0gRkVUQ0hfR0VUX1BBQ0s7CisJCQllbHNlCisJCQkJc3RhdGUgPSBGRVRDSF9QUk9DRVNTX0FDS1M7CisJCQlicmVhazsKKwkJY2FzZSBGRVRDSF9QUk9DRVNTX0FDS1M6CisJCQkvKiBQcm9jZXNzIEFDS3MvTkFLcyAqLworCQkJc3dpdGNoIChwcm9jZXNzX2Fja3MobmVnb3RpYXRvciwgJnJlYWRlciwgJmNvbW1vbikpIHsKKwkJCWNhc2UgMjoKKwkJCQlzdGF0ZSA9IEZFVENIX0dFVF9QQUNLOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWluX3ZhaW4gPSAwOworCQkJCS8qIGZhbGx0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCXN0YXRlID0gRkVUQ0hfU0VORF9SRVFVRVNUOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRkVUQ0hfR0VUX1BBQ0s6CisJCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJmZXRjaC1wYWNrIiwKKwkJCQkJICAgICJuZWdvdGlhdGlvbl92MiIsCisJCQkJCSAgICB0aGVfcmVwb3NpdG9yeSk7CisJCQkvKiBDaGVjayBmb3Igc2hhbGxvdy1pbmZvIHNlY3Rpb24gKi8KKwkJCWlmIChwcm9jZXNzX3NlY3Rpb25faGVhZGVyKCZyZWFkZXIsICJzaGFsbG93LWluZm8iLCAxKSkKKwkJCQlyZWNlaXZlX3NoYWxsb3dfaW5mbyhhcmdzLCAmcmVhZGVyLCBzaGFsbG93cywgc2kpOworCisJCQlpZiAocHJvY2Vzc19zZWN0aW9uX2hlYWRlcigmcmVhZGVyLCAid2FudGVkLXJlZnMiLCAxKSkKKwkJCQlyZWNlaXZlX3dhbnRlZF9yZWZzKCZyZWFkZXIsIHNvdWdodCwgbnJfc291Z2h0KTsKKworCQkJLyogZ2V0IHRoZSBwYWNrICovCisJCQlwcm9jZXNzX3NlY3Rpb25faGVhZGVyKCZyZWFkZXIsICJwYWNrZmlsZSIsIDApOworCQkJaWYgKGdldF9wYWNrKGFyZ3MsIGZkLCBwYWNrX2xvY2tmaWxlLCBzb3VnaHQsIG5yX3NvdWdodCkpCisJCQkJZGllKF8oImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIikpOworCisJCQlzdGF0ZSA9IEZFVENIX0RPTkU7CisJCQlicmVhazsKKwkJY2FzZSBGRVRDSF9ET05FOgorCQkJY29udGludWU7CisJCX0KKwl9CisKKwlpZiAobmVnb3RpYXRvcikKKwkJbmVnb3RpYXRvci0+cmVsZWFzZShuZWdvdGlhdG9yKTsKKwlvaWRzZXRfY2xlYXIoJmNvbW1vbik7CisJcmV0dXJuIHJlZjsKK30KKworc3RhdGljIGludCBmZXRjaF9wYWNrX2NvbmZpZ19jYihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoc3RyY21wKHZhciwgImZldGNoLmZzY2suc2tpcGxpc3QiKSA9PSAwKSB7CisJCWNvbnN0IGNoYXIgKnBhdGg7CisKKwkJaWYgKGdpdF9jb25maWdfcGF0aG5hbWUoJnBhdGgsIHZhciwgdmFsdWUpKQorCQkJcmV0dXJuIDE7CisJCXN0cmJ1Zl9hZGRmKCZmc2NrX21zZ190eXBlcywgIiVjc2tpcGxpc3Q9JXMiLAorCQkJZnNja19tc2dfdHlwZXMubGVuID8gJywnIDogJz0nLCBwYXRoKTsKKwkJZnJlZSgoY2hhciAqKXBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiZmV0Y2guZnNjay4iLCAmdmFyKSkgeworCQlpZiAoaXNfdmFsaWRfbXNnX3R5cGUodmFyLCB2YWx1ZSkpCisJCQlzdHJidWZfYWRkZigmZnNja19tc2dfdHlwZXMsICIlYyVzPSVzIiwKKwkJCQlmc2NrX21zZ190eXBlcy5sZW4gPyAnLCcgOiAnPScsIHZhciwgdmFsdWUpOworCQllbHNlCisJCQl3YXJuaW5nKCJTa2lwcGluZyB1bmtub3duIG1zZyBpZCAnJXMnIiwgdmFyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyB2b2lkIGZldGNoX3BhY2tfY29uZmlnKHZvaWQpCit7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJmZXRjaC51bnBhY2tsaW1pdCIsICZmZXRjaF91bnBhY2tfbGltaXQpOworCWdpdF9jb25maWdfZ2V0X2ludCgidHJhbnNmZXIudW5wYWNrbGltaXQiLCAmdHJhbnNmZXJfdW5wYWNrX2xpbWl0KTsKKwlnaXRfY29uZmlnX2dldF9ib29sKCJyZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IiwgJnByZWZlcl9vZnNfZGVsdGEpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woImZldGNoLmZzY2tvYmplY3RzIiwgJmZldGNoX2ZzY2tfb2JqZWN0cyk7CisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgidHJhbnNmZXIuZnNja29iamVjdHMiLCAmdHJhbnNmZXJfZnNja19vYmplY3RzKTsKKworCWdpdF9jb25maWcoZmV0Y2hfcGFja19jb25maWdfY2IsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBmZXRjaF9wYWNrX3NldHVwKHZvaWQpCit7CisJc3RhdGljIGludCBkaWRfc2V0dXA7CisJaWYgKGRpZF9zZXR1cCkKKwkJcmV0dXJuOworCWZldGNoX3BhY2tfY29uZmlnKCk7CisJaWYgKDAgPD0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0KQorCQl1bnBhY2tfbGltaXQgPSB0cmFuc2Zlcl91bnBhY2tfbGltaXQ7CisJZWxzZSBpZiAoMCA8PSBmZXRjaF91bnBhY2tfbGltaXQpCisJCXVucGFja19saW1pdCA9IGZldGNoX3VucGFja19saW1pdDsKKwlkaWRfc2V0dXAgPSAxOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9kdXBsaWNhdGVzX2luX3JlZnMoc3RydWN0IHJlZiAqKnJlZiwgaW50IG5yKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBuYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IHNyYywgZHN0OworCisJZm9yIChzcmMgPSBkc3QgPSAwOyBzcmMgPCBucjsgc3JjKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJm5hbWVzLCByZWZbc3JjXS0+bmFtZSk7CisJCWlmIChpdGVtLT51dGlsKQorCQkJY29udGludWU7IC8qIGFscmVhZHkgaGF2ZSBpdCAqLworCQlpdGVtLT51dGlsID0gcmVmW3NyY107CisJCWlmIChzcmMgIT0gZHN0KQorCQkJcmVmW2RzdF0gPSByZWZbc3JjXTsKKwkJZHN0Kys7CisJfQorCWZvciAoc3JjID0gZHN0OyBzcmMgPCBucjsgc3JjKyspCisJCXJlZltzcmNdID0gTlVMTDsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbmFtZXMsIDApOworCXJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zaGFsbG93KHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0LAorCQkJICAgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IG9pZF9hcnJheSByZWYgPSBPSURfQVJSQVlfSU5JVDsKKwlpbnQgKnN0YXR1czsKKwlpbnQgaTsKKworCWlmIChhcmdzLT5kZWVwZW4gJiYgYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSkgeworCQlpZiAoKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPT0gJ1wwJykgeyAvKiAtLXVuc2hhbGxvdyAqLworCQkJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpOworCQkJcm9sbGJhY2tfbG9ja19maWxlKCZzaGFsbG93X2xvY2spOworCQl9IGVsc2UKKwkJCWNvbW1pdF9sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzaS0+c2hhbGxvdyB8fCAhc2ktPnNoYWxsb3ctPm5yKQorCQlyZXR1cm47CisKKwlpZiAoYXJncy0+Y2xvbmluZykgeworCQkvKgorCQkgKiByZW1vdGUgaXMgc2hhbGxvdywgYnV0IHRoaXMgaXMgYSBjbG9uZSwgdGhlcmUgYXJlCisJCSAqIG5vIG9iamVjdHMgaW4gcmVwbyB0byB3b3JyeSBhYm91dC4gQWNjZXB0IGFueQorCQkgKiBzaGFsbG93IHBvaW50cyB0aGF0IGV4aXN0IGluIHRoZSBwYWNrIChpb3cgaW4gcmVwbworCQkgKiBhZnRlciBnZXRfcGFjaygpIGFuZCByZXByZXBhcmVfcGFja2VkX2dpdCgpKQorCQkgKi8KKwkJc3RydWN0IG9pZF9hcnJheSBleHRyYSA9IE9JRF9BUlJBWV9JTklUOworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBzaS0+c2hhbGxvdy0+b2lkOworCQlmb3IgKGkgPSAwOyBpIDwgc2ktPnNoYWxsb3ctPm5yOyBpKyspCisJCQlpZiAoaGFzX29iamVjdF9maWxlKCZvaWRbaV0pKQorCQkJCW9pZF9hcnJheV9hcHBlbmQoJmV4dHJhLCAmb2lkW2ldKTsKKwkJaWYgKGV4dHJhLm5yKSB7CisJCQlzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygmc2hhbGxvd19sb2NrLAorCQkJCQkJJmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUsCisJCQkJCQkmZXh0cmEpOworCQkJY29tbWl0X2xvY2tfZmlsZSgmc2hhbGxvd19sb2NrKTsKKwkJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBOVUxMOworCQl9CisJCW9pZF9hcnJheV9jbGVhcigmZXh0cmEpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzaS0+bnJfb3VycyAmJiAhc2ktPm5yX3RoZWlycykKKwkJcmV0dXJuOworCisJcmVtb3ZlX25vbmV4aXN0ZW50X3RoZWlyc19zaGFsbG93KHNpKTsKKwlpZiAoIXNpLT5ucl9vdXJzICYmICFzaS0+bnJfdGhlaXJzKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IG5yX3NvdWdodDsgaSsrKQorCQlvaWRfYXJyYXlfYXBwZW5kKCZyZWYsICZzb3VnaHRbaV0tPm9sZF9vaWQpOworCXNpLT5yZWYgPSAmcmVmOworCisJaWYgKGFyZ3MtPnVwZGF0ZV9zaGFsbG93KSB7CisJCS8qCisJCSAqIHJlbW90ZSBpcyBhbHNvIHNoYWxsb3csIC5naXQvc2hhbGxvdyBtYXkgYmUgdXBkYXRlZAorCQkgKiBzbyBhbGwgcmVmcyBjYW4gYmUgYWNjZXB0ZWQuIE1ha2Ugc3VyZSB3ZSBvbmx5IGFkZAorCQkgKiBzaGFsbG93IHJvb3RzIHRoYXQgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSBmcm9tIG5ldworCQkgKiByZWZzLgorCQkgKi8KKwkJc3RydWN0IG9pZF9hcnJheSBleHRyYSA9IE9JRF9BUlJBWV9JTklUOworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBzaS0+c2hhbGxvdy0+b2lkOworCQlhc3NpZ25fc2hhbGxvd19jb21taXRzX3RvX3JlZnMoc2ksIE5VTEwsIE5VTEwpOworCQlpZiAoIXNpLT5ucl9vdXJzICYmICFzaS0+bnJfdGhlaXJzKSB7CisJCQlvaWRfYXJyYXlfY2xlYXIoJnJlZik7CisJCQlyZXR1cm47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNpLT5ucl9vdXJzOyBpKyspCisJCQlvaWRfYXJyYXlfYXBwZW5kKCZleHRyYSwgJm9pZFtzaS0+b3Vyc1tpXV0pOworCQlmb3IgKGkgPSAwOyBpIDwgc2ktPm5yX3RoZWlyczsgaSsrKQorCQkJb2lkX2FycmF5X2FwcGVuZCgmZXh0cmEsICZvaWRbc2ktPnRoZWlyc1tpXV0pOworCQlzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygmc2hhbGxvd19sb2NrLAorCQkJCQkmYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSwKKwkJCQkJJmV4dHJhKTsKKwkJY29tbWl0X2xvY2tfZmlsZSgmc2hhbGxvd19sb2NrKTsKKwkJb2lkX2FycmF5X2NsZWFyKCZleHRyYSk7CisJCW9pZF9hcnJheV9jbGVhcigmcmVmKTsKKwkJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIHJlbW90ZSBpcyBhbHNvIHNoYWxsb3csIGNoZWNrIHdoYXQgcmVmIGlzIHNhZmUgdG8gdXBkYXRlCisJICogd2l0aG91dCB1cGRhdGluZyAuZ2l0L3NoYWxsb3cKKwkgKi8KKwlzdGF0dXMgPSB4Y2FsbG9jKG5yX3NvdWdodCwgc2l6ZW9mKCpzdGF0dXMpKTsKKwlhc3NpZ25fc2hhbGxvd19jb21taXRzX3RvX3JlZnMoc2ksIE5VTEwsIHN0YXR1cyk7CisJaWYgKHNpLT5ucl9vdXJzIHx8IHNpLT5ucl90aGVpcnMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3NvdWdodDsgaSsrKQorCQkJaWYgKHN0YXR1c1tpXSkKKwkJCQlzb3VnaHRbaV0tPnN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX1NIQUxMT1c7CisJfQorCWZyZWUoc3RhdHVzKTsKKwlvaWRfYXJyYXlfY2xlYXIoJnJlZik7Cit9CisKK3N0YXRpYyBpbnQgaXRlcmF0ZV9yZWZfbWFwKHZvaWQgKmNiX2RhdGEsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgcmVmICoqcm0gPSBjYl9kYXRhOworCXN0cnVjdCByZWYgKnJlZiA9ICpybTsKKworCWlmICghcmVmKQorCQlyZXR1cm4gLTE7IC8qIGVuZCBvZiB0aGUgbGlzdCAqLworCSpybSA9IHJlZi0+bmV4dDsKKwlvaWRjcHkob2lkLCAmcmVmLT5vbGRfb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZiAqZmV0Y2hfcGFjayhzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAorCQkgICAgICAgaW50IGZkW10sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZWYsCisJCSAgICAgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0LAorCQkgICAgICAgc3RydWN0IG9pZF9hcnJheSAqc2hhbGxvdywKKwkJICAgICAgIGNoYXIgKipwYWNrX2xvY2tmaWxlLAorCQkgICAgICAgZW51bSBwcm90b2NvbF92ZXJzaW9uIHZlcnNpb24pCit7CisJc3RydWN0IHJlZiAqcmVmX2NweTsKKwlzdHJ1Y3Qgc2hhbGxvd19pbmZvIHNpOworCXN0cnVjdCBvaWRfYXJyYXkgc2hhbGxvd3Nfc2NyYXRjaCA9IE9JRF9BUlJBWV9JTklUOworCisJZmV0Y2hfcGFja19zZXR1cCgpOworCWlmIChucl9zb3VnaHQpCisJCW5yX3NvdWdodCA9IHJlbW92ZV9kdXBsaWNhdGVzX2luX3JlZnMoc291Z2h0LCBucl9zb3VnaHQpOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMgJiYgIWFyZ3MtPmZpbHRlcl9vcHRpb25zLmNob2ljZSkgeworCQkvKgorCQkgKiBUaGUgcHJvdG9jb2wgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0aW5nIHRoYXQgb25seSB0aGUKKwkJICogd2FudGVkIG9iamVjdHMgYmUgc2VudCwgc28gYXBwcm94aW1hdGUgdGhpcyBieSBzZXR0aW5nIGEKKwkJICogImJsb2I6bm9uZSIgZmlsdGVyIGlmIG5vIGZpbHRlciBpcyBhbHJlYWR5IHNldC4gVGhpcyB3b3JrcworCQkgKiBmb3IgYWxsIG9iamVjdCB0eXBlczogbm90ZSB0aGF0IHdhbnRlZCBibG9icyB3aWxsIHN0aWxsIGJlCisJCSAqIHNlbnQgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBzcGVjaWZpZWQgYXMgYSAid2FudCIuCisJCSAqCisJCSAqIE5FRURTV09SSzogQWRkIGFuIG9wdGlvbiBpbiB0aGUgcHJvdG9jb2wgdG8gcmVxdWVzdCB0aGF0CisJCSAqIG9ubHkgdGhlIHdhbnRlZCBvYmplY3RzIGJlIHNlbnQsIGFuZCBpbXBsZW1lbnQgaXQuCisJCSAqLworCQlwYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKCZhcmdzLT5maWx0ZXJfb3B0aW9ucywgImJsb2I6bm9uZSIpOworCX0KKworCWlmICh2ZXJzaW9uICE9IHByb3RvY29sX3YyICYmICFyZWYpIHsKKwkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKKwkJZGllKF8oIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIikpOworCX0KKwlpZiAodmVyc2lvbiA9PSBwcm90b2NvbF92MikgeworCQlpZiAoc2hhbGxvdy0+bnIpCisJCQlCVUcoIlByb3RvY29sIFYyIGRvZXMgbm90IHByb3ZpZGUgc2hhbGxvd3MgYXQgdGhpcyBwb2ludCBpbiB0aGUgZmV0Y2giKTsKKwkJbWVtc2V0KCZzaSwgMCwgc2l6ZW9mKHNpKSk7CisJCXJlZl9jcHkgPSBkb19mZXRjaF9wYWNrX3YyKGFyZ3MsIGZkLCByZWYsIHNvdWdodCwgbnJfc291Z2h0LAorCQkJCQkgICAmc2hhbGxvd3Nfc2NyYXRjaCwgJnNpLAorCQkJCQkgICBwYWNrX2xvY2tmaWxlKTsKKwl9IGVsc2UgeworCQlwcmVwYXJlX3NoYWxsb3dfaW5mbygmc2ksIHNoYWxsb3cpOworCQlyZWZfY3B5ID0gZG9fZmV0Y2hfcGFjayhhcmdzLCBmZCwgcmVmLCBzb3VnaHQsIG5yX3NvdWdodCwKKwkJCQkJJnNpLCBwYWNrX2xvY2tmaWxlKTsKKwl9CisJcmVwcmVwYXJlX3BhY2tlZF9naXQodGhlX3JlcG9zaXRvcnkpOworCisJaWYgKCFhcmdzLT5jbG9uaW5nICYmIGFyZ3MtPmRlZXBlbikgeworCQlzdHJ1Y3QgY2hlY2tfY29ubmVjdGVkX29wdGlvbnMgb3B0ID0gQ0hFQ0tfQ09OTkVDVEVEX0lOSVQ7CisJCXN0cnVjdCByZWYgKml0ZXJhdG9yID0gcmVmX2NweTsKKwkJb3B0LnNoYWxsb3dfZmlsZSA9IGFsdGVybmF0ZV9zaGFsbG93X2ZpbGU7CisJCWlmIChhcmdzLT5kZWVwZW4pCisJCQlvcHQuaXNfZGVlcGVuaW5nX2ZldGNoID0gMTsKKwkJaWYgKGNoZWNrX2Nvbm5lY3RlZChpdGVyYXRlX3JlZl9tYXAsICZpdGVyYXRvciwgJm9wdCkpIHsKKwkJCWVycm9yKF8oInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIikpOworCQkJZnJlZV9yZWZzKHJlZl9jcHkpOworCQkJcmVmX2NweSA9IE5VTEw7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJYXJncy0+Y29ubmVjdGl2aXR5X2NoZWNrZWQgPSAxOworCX0KKworCXVwZGF0ZV9zaGFsbG93KGFyZ3MsIHNvdWdodCwgbnJfc291Z2h0LCAmc2kpOworY2xlYW51cDoKKwljbGVhcl9zaGFsbG93X2luZm8oJnNpKTsKKwlvaWRfYXJyYXlfY2xlYXIoJnNoYWxsb3dzX3NjcmF0Y2gpOworCXJldHVybiByZWZfY3B5OworfQorCitpbnQgcmVwb3J0X3VubWF0Y2hlZF9yZWZzKHN0cnVjdCByZWYgKipzb3VnaHQsIGludCBucl9zb3VnaHQpCit7CisJaW50IGksIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc291Z2h0OyBpKyspIHsKKwkJaWYgKCFzb3VnaHRbaV0pCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChzb3VnaHRbaV0tPm1hdGNoX3N0YXR1cykgeworCQljYXNlIFJFRl9NQVRDSEVEOgorCQkJY29udGludWU7CisJCWNhc2UgUkVGX05PVF9NQVRDSEVEOgorCQkJZXJyb3IoXygibm8gc3VjaCByZW1vdGUgcmVmICVzIiksIHNvdWdodFtpXS0+bmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBSRUZfVU5BRFZFUlRJU0VEX05PVF9BTExPV0VEOgorCQkJZXJyb3IoXygiU2VydmVyIGRvZXMgbm90IGFsbG93IHJlcXVlc3QgZm9yIHVuYWR2ZXJ0aXNlZCBvYmplY3QgJXMiKSwKKwkJCSAgICAgIHNvdWdodFtpXS0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSAxOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5oIGIvZmV0Y2gtcGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjY4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9mZXRjaC1wYWNrLmgKQEAgLTAsMCArMSw5NSBAQAorI2lmbmRlZiBGRVRDSF9QQUNLX0gKKyNkZWZpbmUgRkVUQ0hfUEFDS19ICisKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKworc3RydWN0IG9pZF9hcnJheTsKKworc3RydWN0IGZldGNoX3BhY2tfYXJncyB7CisJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKKwlpbnQgdW5wYWNrbGltaXQ7CisJaW50IGRlcHRoOworCWNvbnN0IGNoYXIgKmRlZXBlbl9zaW5jZTsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmRlZXBlbl9ub3Q7CisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBmaWx0ZXJfb3B0aW9uczsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNlcnZlcl9vcHRpb25zOworCisJLyoKKwkgKiBJZiBub3QgTlVMTCwgZHVyaW5nIHBhY2tmaWxlIG5lZ290aWF0aW9uLCBmZXRjaC1wYWNrIHdpbGwgc2VuZCAiaGF2ZSIKKwkgKiBsaW5lcyBvbmx5IHdpdGggdGhlc2UgdGlwcyBhbmQgdGhlaXIgYW5jZXN0b3JzLgorCSAqLworCWNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKm5lZ290aWF0aW9uX3RpcHM7CisKKwl1bnNpZ25lZCBkZWVwZW5fcmVsYXRpdmU6MTsKKwl1bnNpZ25lZCBxdWlldDoxOworCXVuc2lnbmVkIGtlZXBfcGFjazoxOworCXVuc2lnbmVkIGxvY2tfcGFjazoxOworCXVuc2lnbmVkIHVzZV90aGluX3BhY2s6MTsKKwl1bnNpZ25lZCBmZXRjaF9hbGw6MTsKKwl1bnNpZ25lZCBzdGRpbl9yZWZzOjE7CisJdW5zaWduZWQgZGlhZ191cmw6MTsKKwl1bnNpZ25lZCB2ZXJib3NlOjE7CisJdW5zaWduZWQgbm9fcHJvZ3Jlc3M6MTsKKwl1bnNpZ25lZCBpbmNsdWRlX3RhZzoxOworCXVuc2lnbmVkIHN0YXRlbGVzc19ycGM6MTsKKwl1bnNpZ25lZCBjaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkOjE7CisJdW5zaWduZWQgc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZDoxOworCXVuc2lnbmVkIGNsb25pbmc6MTsKKwl1bnNpZ25lZCB1cGRhdGVfc2hhbGxvdzoxOworCXVuc2lnbmVkIGRlZXBlbjoxOworCXVuc2lnbmVkIGZyb21fcHJvbWlzb3I6MTsKKworCS8qCisJICogQXR0ZW1wdCB0byBmZXRjaCBvbmx5IHRoZSB3YW50ZWQgb2JqZWN0cywgYW5kIG5vdCBhbnkgb2JqZWN0cworCSAqIHJlZmVycmVkIHRvIGJ5IHRoZW0uIER1ZSB0byBwcm90b2NvbCBsaW1pdGF0aW9ucywgZXh0cmFuZW91cworCSAqIG9iamVjdHMgbWF5IHN0aWxsIGJlIGluY2x1ZGVkLiAoV2hlbiBmZXRjaGluZyBub24tYmxvYgorCSAqIG9iamVjdHMsIG9ubHkgYmxvYnMgYXJlIGV4Y2x1ZGVkOyB3aGVuIGZldGNoaW5nIGEgYmxvYiwgdGhlCisJICogYmxvYiBpdHNlbGYgd2lsbCBzdGlsbCBiZSBzZW50LiBUaGUgY2xpZW50IGRvZXMgbm90IG5lZWQgdG8KKwkgKiBrbm93IHdoZXRoZXIgYSB3YW50ZWQgb2JqZWN0IGlzIGEgYmxvYiBvciBub3QuKQorCSAqCisJICogSWYgMSwgZmV0Y2hfcGFjaygpIHdpbGwgYWxzbyBub3QgbW9kaWZ5IGFueSBvYmplY3QgZmxhZ3MuCisJICogVGhpcyBhbGxvd3MgZmV0Y2hfcGFjaygpIHRvIHNhZmVseSBiZSBjYWxsZWQgYnkgYW55IGZ1bmN0aW9uLAorCSAqIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggb2JqZWN0IGZsYWdzIGl0IHVzZXMgKGlmIGFueSkuCisJICovCisJdW5zaWduZWQgbm9fZGVwZW5kZW50czoxOworCisJLyoKKwkgKiBCZWNhdXNlIGZldGNoX3BhY2soKSBvdmVyd3JpdGVzIHRoZSBzaGFsbG93IGZpbGUgdXBvbiBhCisJICogc3VjY2Vzc2Z1bCBkZWVwZW5pbmcgbm9uLWNsb25lIGZldGNoLCBpZiB0aGlzIHN0cnVjdAorCSAqIHNwZWNpZmllcyBzdWNoIGEgZmV0Y2gsIGZldGNoX3BhY2soKSBuZWVkcyB0byBwZXJmb3JtIGEKKwkgKiBjb25uZWN0aXZpdHkgY2hlY2sgYmVmb3JlIGRlY2lkaW5nIGlmIGEgZmV0Y2ggaXMgc3VjY2Vzc2Z1bAorCSAqIChhbmQgb3ZlcndyaXRpbmcgdGhlIHNoYWxsb3cgZmlsZSkuIGZldGNoX3BhY2soKSBzZXRzIHRoaXMKKwkgKiBmaWVsZCB0byAxIGlmIHN1Y2ggYSBjb25uZWN0aXZpdHkgY2hlY2sgd2FzIHBlcmZvcm1lZC4KKwkgKgorCSAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZAorCSAqIGluIHRoYXQgdGhlIGZvcm1lciBhbGxvd3MgZXhpc3Rpbmcgb2JqZWN0cyBpbiB0aGUKKwkgKiByZXBvc2l0b3J5IHRvIHNhdGlzZnkgY29ubmVjdGl2aXR5IG5lZWRzLCB3aGVyZWFzIHRoZQorCSAqIGxhdHRlciBkb2Vzbid0LgorCSAqLworCXVuc2lnbmVkIGNvbm5lY3Rpdml0eV9jaGVja2VkOjE7Cit9OworCisvKgorICogc291Z2h0IHJlcHJlc2VudHMgcmVtb3RlIHJlZmVyZW5jZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBmcm9tLgorICogT24gcmV0dXJuLCB0aGUgbmFtZXMgdGhhdCB3ZXJlIGZvdW5kIG9uIHRoZSByZW1vdGUgd2lsbCBoYXZlIGJlZW4KKyAqIG1hcmtlZCBhcyBzdWNoLgorICovCitzdHJ1Y3QgcmVmICpmZXRjaF9wYWNrKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCSAgICAgICBpbnQgZmRbXSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlZiwKKwkJICAgICAgIHN0cnVjdCByZWYgKipzb3VnaHQsCisJCSAgICAgICBpbnQgbnJfc291Z2h0LAorCQkgICAgICAgc3RydWN0IG9pZF9hcnJheSAqc2hhbGxvdywKKwkJICAgICAgIGNoYXIgKipwYWNrX2xvY2tmaWxlLAorCQkgICAgICAgZW51bSBwcm90b2NvbF92ZXJzaW9uIHZlcnNpb24pOworCisvKgorICogUHJpbnQgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSBmb3IgZWFjaCBzb3VnaHQgcmVmIHRoYXQgd2Fzbid0CisgKiBtYXRjaGVkLiAgUmV0dXJuIDAgaWYgYWxsIHNvdWdodCByZWZzIHdlcmUgbWF0Y2hlZCwgb3RoZXJ3aXNlIDEuCisgKi8KK2ludCByZXBvcnRfdW5tYXRjaGVkX3JlZnMoc3RydWN0IHJlZiAqKnNvdWdodCwgaW50IG5yX3NvdWdodCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZm10LW1lcmdlLW1zZy5oIGIvZm10LW1lcmdlLW1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZTNhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9mbXQtbWVyZ2UtbXNnLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIEZNVF9NRVJHRV9NU0dfSAorI2RlZmluZSBGTVRfTUVSR0VfTVNHX0gKKworZXh0ZXJuIGludCBtZXJnZV9sb2dfY29uZmlnOworaW50IGZtdF9tZXJnZV9tc2dfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKKworI2VuZGlmIC8qIEZNVF9NRVJHRV9NU0dfSCAqLwpkaWZmIC0tZ2l0IGEvZnNjay5jIGIvZnNjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGQ4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9mc2NrLmMKQEAgLTAsMCArMSwxMDczIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJmc2NrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImhlbHAuaCIKKworc3RhdGljIHN0cnVjdCBvaWRzZXQgZ2l0bW9kdWxlc19mb3VuZCA9IE9JRFNFVF9JTklUOworc3RhdGljIHN0cnVjdCBvaWRzZXQgZ2l0bW9kdWxlc19kb25lID0gT0lEU0VUX0lOSVQ7CisKKyNkZWZpbmUgRlNDS19GQVRBTCAtMQorI2RlZmluZSBGU0NLX0lORk8gLTIKKworI2RlZmluZSBGT1JFQUNIX01TR19JRChGVU5DKSBcCisJLyogZmF0YWwgZXJyb3JzICovIFwKKwlGVU5DKE5VTF9JTl9IRUFERVIsIEZBVEFMKSBcCisJRlVOQyhVTlRFUk1JTkFURURfSEVBREVSLCBGQVRBTCkgXAorCS8qIGVycm9ycyAqLyBcCisJRlVOQyhCQURfREFURSwgRVJST1IpIFwKKwlGVU5DKEJBRF9EQVRFX09WRVJGTE9XLCBFUlJPUikgXAorCUZVTkMoQkFEX0VNQUlMLCBFUlJPUikgXAorCUZVTkMoQkFEX05BTUUsIEVSUk9SKSBcCisJRlVOQyhCQURfT0JKRUNUX1NIQTEsIEVSUk9SKSBcCisJRlVOQyhCQURfUEFSRU5UX1NIQTEsIEVSUk9SKSBcCisJRlVOQyhCQURfVEFHX09CSkVDVCwgRVJST1IpIFwKKwlGVU5DKEJBRF9USU1FWk9ORSwgRVJST1IpIFwKKwlGVU5DKEJBRF9UUkVFLCBFUlJPUikgXAorCUZVTkMoQkFEX1RSRUVfU0hBMSwgRVJST1IpIFwKKwlGVU5DKEJBRF9UWVBFLCBFUlJPUikgXAorCUZVTkMoRFVQTElDQVRFX0VOVFJJRVMsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX0FVVEhPUiwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfQ09NTUlUVEVSLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19FTUFJTCwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfTkFNRV9CRUZPUkVfRU1BSUwsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX09CSkVDVCwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1NQQUNFX0JFRk9SRV9FTUFJTCwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfVEFHLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19UQUdfRU5UUlksIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RSRUUsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RSRUVfT0JKRUNULCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19UWVBFLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19UWVBFX0VOVFJZLCBFUlJPUikgXAorCUZVTkMoTVVMVElQTEVfQVVUSE9SUywgRVJST1IpIFwKKwlGVU5DKFRSRUVfTk9UX1NPUlRFRCwgRVJST1IpIFwKKwlGVU5DKFVOS05PV05fVFlQRSwgRVJST1IpIFwKKwlGVU5DKFpFUk9fUEFEREVEX0RBVEUsIEVSUk9SKSBcCisJRlVOQyhHSVRNT0RVTEVTX01JU1NJTkcsIEVSUk9SKSBcCisJRlVOQyhHSVRNT0RVTEVTX0JMT0IsIEVSUk9SKSBcCisJRlVOQyhHSVRNT0RVTEVTX0xBUkdFLCBFUlJPUikgXAorCUZVTkMoR0lUTU9EVUxFU19OQU1FLCBFUlJPUikgXAorCUZVTkMoR0lUTU9EVUxFU19TWU1MSU5LLCBFUlJPUikgXAorCUZVTkMoR0lUTU9EVUxFU19VUkwsIEVSUk9SKSBcCisJRlVOQyhHSVRNT0RVTEVTX1BBVEgsIEVSUk9SKSBcCisJRlVOQyhHSVRNT0RVTEVTX1VQREFURSwgRVJST1IpIFwKKwkvKiB3YXJuaW5ncyAqLyBcCisJRlVOQyhCQURfRklMRU1PREUsIFdBUk4pIFwKKwlGVU5DKEVNUFRZX05BTUUsIFdBUk4pIFwKKwlGVU5DKEZVTExfUEFUSE5BTUUsIFdBUk4pIFwKKwlGVU5DKEhBU19ET1QsIFdBUk4pIFwKKwlGVU5DKEhBU19ET1RET1QsIFdBUk4pIFwKKwlGVU5DKEhBU19ET1RHSVQsIFdBUk4pIFwKKwlGVU5DKE5VTExfU0hBMSwgV0FSTikgXAorCUZVTkMoWkVST19QQURERURfRklMRU1PREUsIFdBUk4pIFwKKwlGVU5DKE5VTF9JTl9DT01NSVQsIFdBUk4pIFwKKwkvKiBpbmZvcyAocmVwb3J0ZWQgYXMgd2FybmluZ3MsIGJ1dCBpZ25vcmVkIGJ5IGRlZmF1bHQpICovIFwKKwlGVU5DKEdJVE1PRFVMRVNfUEFSU0UsIElORk8pIFwKKwlGVU5DKEJBRF9UQUdfTkFNRSwgSU5GTykgXAorCUZVTkMoTUlTU0lOR19UQUdHRVJfRU5UUlksIElORk8pCisKKyNkZWZpbmUgTVNHX0lEKGlkLCBtc2dfdHlwZSkgRlNDS19NU0dfIyNpZCwKK2VudW0gZnNja19tc2dfaWQgeworCUZPUkVBQ0hfTVNHX0lEKE1TR19JRCkKKwlGU0NLX01TR19NQVgKK307CisjdW5kZWYgTVNHX0lECisKKyNkZWZpbmUgU1RSKHgpICN4CisjZGVmaW5lIE1TR19JRChpZCwgbXNnX3R5cGUpIHsgU1RSKGlkKSwgTlVMTCwgTlVMTCwgRlNDS18jI21zZ190eXBlIH0sCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICppZF9zdHJpbmc7CisJY29uc3QgY2hhciAqZG93bmNhc2VkOworCWNvbnN0IGNoYXIgKmNhbWVsY2FzZWQ7CisJaW50IG1zZ190eXBlOworfSBtc2dfaWRfaW5mb1tGU0NLX01TR19NQVggKyAxXSA9IHsKKwlGT1JFQUNIX01TR19JRChNU0dfSUQpCisJeyBOVUxMLCBOVUxMLCBOVUxMLCAtMSB9Cit9OworI3VuZGVmIE1TR19JRAorCitzdGF0aWMgdm9pZCBwcmVwYXJlX21zZ19pZHModm9pZCkKK3sKKwlpbnQgaTsKKworCWlmIChtc2dfaWRfaW5mb1swXS5kb3duY2FzZWQpCisJCXJldHVybjsKKworCS8qIGNvbnZlcnQgaWRfc3RyaW5nIHRvIGxvd2VyIGNhc2UsIHdpdGhvdXQgdW5kZXJzY29yZXMuICovCisJZm9yIChpID0gMDsgaSA8IEZTQ0tfTVNHX01BWDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnAgPSBtc2dfaWRfaW5mb1tpXS5pZF9zdHJpbmc7CisJCWludCBsZW4gPSBzdHJsZW4ocCk7CisJCWNoYXIgKnEgPSB4bWFsbG9jKGxlbik7CisKKwkJbXNnX2lkX2luZm9baV0uZG93bmNhc2VkID0gcTsKKwkJd2hpbGUgKCpwKQorCQkJaWYgKCpwID09ICdfJykKKwkJCQlwKys7CisJCQllbHNlCisJCQkJKihxKSsrID0gdG9sb3dlcigqKHApKyspOworCQkqcSA9ICdcMCc7CisKKwkJcCA9IG1zZ19pZF9pbmZvW2ldLmlkX3N0cmluZzsKKwkJcSA9IHhtYWxsb2MobGVuKTsKKwkJbXNnX2lkX2luZm9baV0uY2FtZWxjYXNlZCA9IHE7CisJCXdoaWxlICgqcCkgeworCQkJaWYgKCpwID09ICdfJykgeworCQkJCXArKzsKKwkJCQlpZiAoKnApCisJCQkJCSpxKysgPSAqcCsrOworCQkJfSBlbHNlIHsKKwkJCQkqcSsrID0gdG9sb3dlcigqcCsrKTsKKwkJCX0KKwkJfQorCQkqcSA9ICdcMCc7CisJfQorfQorCitzdGF0aWMgaW50IHBhcnNlX21zZ19pZChjb25zdCBjaGFyICp0ZXh0KQoreworCWludCBpOworCisJcHJlcGFyZV9tc2dfaWRzKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRlNDS19NU0dfTUFYOyBpKyspCisJCWlmICghc3RyY21wKHRleHQsIG1zZ19pZF9pbmZvW2ldLmRvd25jYXNlZCkpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAtMTsKK30KKwordm9pZCBsaXN0X2NvbmZpZ19mc2NrX21zZ19pZHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisKKwlwcmVwYXJlX21zZ19pZHMoKTsKKworCWZvciAoaSA9IDA7IGkgPCBGU0NLX01TR19NQVg7IGkrKykKKwkJbGlzdF9jb25maWdfaXRlbShsaXN0LCBwcmVmaXgsIG1zZ19pZF9pbmZvW2ldLmNhbWVsY2FzZWQpOworfQorCitzdGF0aWMgaW50IGZzY2tfbXNnX3R5cGUoZW51bSBmc2NrX21zZ19pZCBtc2dfaWQsCisJc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgbXNnX3R5cGU7CisKKwlhc3NlcnQobXNnX2lkID49IDAgJiYgbXNnX2lkIDwgRlNDS19NU0dfTUFYKTsKKworCWlmIChvcHRpb25zLT5tc2dfdHlwZSkKKwkJbXNnX3R5cGUgPSBvcHRpb25zLT5tc2dfdHlwZVttc2dfaWRdOworCWVsc2UgeworCQltc2dfdHlwZSA9IG1zZ19pZF9pbmZvW21zZ19pZF0ubXNnX3R5cGU7CisJCWlmIChvcHRpb25zLT5zdHJpY3QgJiYgbXNnX3R5cGUgPT0gRlNDS19XQVJOKQorCQkJbXNnX3R5cGUgPSBGU0NLX0VSUk9SOworCX0KKworCXJldHVybiBtc2dfdHlwZTsKK30KKworc3RhdGljIGludCBwYXJzZV9tc2dfdHlwZShjb25zdCBjaGFyICpzdHIpCit7CisJaWYgKCFzdHJjbXAoc3RyLCAiZXJyb3IiKSkKKwkJcmV0dXJuIEZTQ0tfRVJST1I7CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJ3YXJuIikpCisJCXJldHVybiBGU0NLX1dBUk47CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJpZ25vcmUiKSkKKwkJcmV0dXJuIEZTQ0tfSUdOT1JFOworCWVsc2UKKwkJZGllKCJVbmtub3duIGZzY2sgbWVzc2FnZSB0eXBlOiAnJXMnIiwgc3RyKTsKK30KKworaW50IGlzX3ZhbGlkX21zZ190eXBlKGNvbnN0IGNoYXIgKm1zZ19pZCwgY29uc3QgY2hhciAqbXNnX3R5cGUpCit7CisJaWYgKHBhcnNlX21zZ19pZChtc2dfaWQpIDwgMCkKKwkJcmV0dXJuIDA7CisJcGFyc2VfbXNnX3R5cGUobXNnX3R5cGUpOworCXJldHVybiAxOworfQorCit2b2lkIGZzY2tfc2V0X21zZ190eXBlKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCWNvbnN0IGNoYXIgKm1zZ19pZCwgY29uc3QgY2hhciAqbXNnX3R5cGUpCit7CisJaW50IGlkID0gcGFyc2VfbXNnX2lkKG1zZ19pZCksIHR5cGU7CisKKwlpZiAoaWQgPCAwKQorCQlkaWUoIlVuaGFuZGxlZCBtZXNzYWdlIGlkOiAlcyIsIG1zZ19pZCk7CisJdHlwZSA9IHBhcnNlX21zZ190eXBlKG1zZ190eXBlKTsKKworCWlmICh0eXBlICE9IEZTQ0tfRVJST1IgJiYgbXNnX2lkX2luZm9baWRdLm1zZ190eXBlID09IEZTQ0tfRkFUQUwpCisJCWRpZSgiQ2Fubm90IGRlbW90ZSAlcyB0byAlcyIsIG1zZ19pZCwgbXNnX3R5cGUpOworCisJaWYgKCFvcHRpb25zLT5tc2dfdHlwZSkgeworCQlpbnQgaTsKKwkJaW50ICptc2dfdHlwZTsKKwkJQUxMT0NfQVJSQVkobXNnX3R5cGUsIEZTQ0tfTVNHX01BWCk7CisJCWZvciAoaSA9IDA7IGkgPCBGU0NLX01TR19NQVg7IGkrKykKKwkJCW1zZ190eXBlW2ldID0gZnNja19tc2dfdHlwZShpLCBvcHRpb25zKTsKKwkJb3B0aW9ucy0+bXNnX3R5cGUgPSBtc2dfdHlwZTsKKwl9CisKKwlvcHRpb25zLT5tc2dfdHlwZVtpZF0gPSB0eXBlOworfQorCit2b2lkIGZzY2tfc2V0X21zZ190eXBlcyhzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICp2YWx1ZXMpCit7CisJY2hhciAqYnVmID0geHN0cmR1cCh2YWx1ZXMpLCAqdG9fZnJlZSA9IGJ1ZjsKKwlpbnQgZG9uZSA9IDA7CisKKwl3aGlsZSAoIWRvbmUpIHsKKwkJaW50IGxlbiA9IHN0cmNzcG4oYnVmLCAiICx8IiksIGVxdWFsOworCisJCWRvbmUgPSAhYnVmW2xlbl07CisJCWlmICghbGVuKSB7CisJCQlidWYrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJ1ZltsZW5dID0gJ1wwJzsKKworCQlmb3IgKGVxdWFsID0gMDsKKwkJICAgICBlcXVhbCA8IGxlbiAmJiBidWZbZXF1YWxdICE9ICc9JyAmJiBidWZbZXF1YWxdICE9ICc6JzsKKwkJICAgICBlcXVhbCsrKQorCQkJYnVmW2VxdWFsXSA9IHRvbG93ZXIoYnVmW2VxdWFsXSk7CisJCWJ1ZltlcXVhbF0gPSAnXDAnOworCisJCWlmICghc3RyY21wKGJ1ZiwgInNraXBsaXN0IikpIHsKKwkJCWlmIChlcXVhbCA9PSBsZW4pCisJCQkJZGllKCJza2lwbGlzdCByZXF1aXJlcyBhIHBhdGgiKTsKKwkJCW9pZHNldF9wYXJzZV9maWxlKCZvcHRpb25zLT5za2lwbGlzdCwgYnVmICsgZXF1YWwgKyAxKTsKKwkJCWJ1ZiArPSBsZW4gKyAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZXF1YWwgPT0gbGVuKQorCQkJZGllKCJNaXNzaW5nICc9JzogJyVzJyIsIGJ1Zik7CisKKwkJZnNja19zZXRfbXNnX3R5cGUob3B0aW9ucywgYnVmLCBidWYgKyBlcXVhbCArIDEpOworCQlidWYgKz0gbGVuICsgMTsKKwl9CisJZnJlZSh0b19mcmVlKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX21zZ19pZChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbXNnX2lkKQoreworCWZvciAoOzspIHsKKwkJY2hhciBjID0gKihtc2dfaWQpKys7CisKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCWlmIChjICE9ICdfJykKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgdG9sb3dlcihjKSk7CisJCWVsc2UgeworCQkJYXNzZXJ0KCptc2dfaWQpOworCQkJc3RyYnVmX2FkZGNoKHNiLCAqKG1zZ19pZCkrKyk7CisJCX0KKwl9CisKKwlzdHJidWZfYWRkc3RyKHNiLCAiOiAiKTsKK30KKworc3RhdGljIGludCBvYmplY3Rfb25fc2tpcGxpc3Qoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0cywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gb3B0cyAmJiBvaWQgJiYgb2lkc2V0X2NvbnRhaW5zKCZvcHRzLT5za2lwbGlzdCwgb2lkKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDUsIDYpKSkKK3N0YXRpYyBpbnQgcmVwb3J0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlLAorCQkgIGVudW0gZnNja19tc2dfaWQgaWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBtc2dfdHlwZSA9IGZzY2tfbXNnX3R5cGUoaWQsIG9wdGlvbnMpLCByZXN1bHQ7CisKKwlpZiAobXNnX3R5cGUgPT0gRlNDS19JR05PUkUpCisJCXJldHVybiAwOworCisJaWYgKG9iamVjdF9vbl9za2lwbGlzdChvcHRpb25zLCBvaWQpKQorCQlyZXR1cm4gMDsKKworCWlmIChtc2dfdHlwZSA9PSBGU0NLX0ZBVEFMKQorCQltc2dfdHlwZSA9IEZTQ0tfRVJST1I7CisJZWxzZSBpZiAobXNnX3R5cGUgPT0gRlNDS19JTkZPKQorCQltc2dfdHlwZSA9IEZTQ0tfV0FSTjsKKworCWFwcGVuZF9tc2dfaWQoJnNiLCBtc2dfaWRfaW5mb1tpZF0uaWRfc3RyaW5nKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgYXApOworCXJlc3VsdCA9IG9wdGlvbnMtPmVycm9yX2Z1bmMob3B0aW9ucywgb2lkLCBvYmplY3RfdHlwZSwKKwkJCQkgICAgIG1zZ190eXBlLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgZnNja19lbmFibGVfb2JqZWN0X25hbWVzKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaWYgKCFvcHRpb25zLT5vYmplY3RfbmFtZXMpCisJCW9wdGlvbnMtPm9iamVjdF9uYW1lcyA9IGtoX2luaXRfb2lkX21hcCgpOworfQorCitjb25zdCBjaGFyICpmc2NrX2dldF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJa2hpdGVyX3QgcG9zOworCWlmICghb3B0aW9ucy0+b2JqZWN0X25hbWVzKQorCQlyZXR1cm4gTlVMTDsKKwlwb3MgPSBraF9nZXRfb2lkX21hcChvcHRpb25zLT5vYmplY3RfbmFtZXMsICpvaWQpOworCWlmIChwb3MgPj0ga2hfZW5kKG9wdGlvbnMtPm9iamVjdF9uYW1lcykpCisJCXJldHVybiBOVUxMOworCXJldHVybiBraF92YWx1ZShvcHRpb25zLT5vYmplY3RfbmFtZXMsIHBvcyk7Cit9CisKK3ZvaWQgZnNja19wdXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJa2hpdGVyX3QgcG9zOworCWludCBoYXNocmV0OworCisJaWYgKCFvcHRpb25zLT5vYmplY3RfbmFtZXMpCisJCXJldHVybjsKKworCXBvcyA9IGtoX3B1dF9vaWRfbWFwKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgKm9pZCwgJmhhc2hyZXQpOworCWlmICghaGFzaHJldCkKKwkJcmV0dXJuOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIGFwKTsKKwlraF92YWx1ZShvcHRpb25zLT5vYmplY3RfbmFtZXMsIHBvcykgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCXZhX2VuZChhcCk7Cit9CisKK2NvbnN0IGNoYXIgKmZzY2tfZGVzY3JpYmVfb2JqZWN0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZzW10gPSB7CisJCVNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklUCisJfTsKKwlzdGF0aWMgaW50IGIgPSAwOworCXN0cnVjdCBzdHJidWYgKmJ1ZjsKKwljb25zdCBjaGFyICpuYW1lID0gZnNja19nZXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkKTsKKworCWJ1ZiA9IGJ1ZnMgKyBiOworCWIgPSAoYiArIDEpICUgQVJSQVlfU0laRShidWZzKTsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkc3RyKGJ1Ziwgb2lkX3RvX2hleChvaWQpKTsKKwlpZiAobmFtZSkKKwkJc3RyYnVmX2FkZGYoYnVmLCAiICglcykiLCBuYW1lKTsKKworCXJldHVybiBidWYtPmJ1ZjsKK30KKworc3RhdGljIGludCBmc2NrX3dhbGtfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IHJlcyA9IDA7CisJY29uc3QgY2hhciAqbmFtZTsKKworCWlmIChwYXJzZV90cmVlKHRyZWUpKQorCQlyZXR1cm4gLTE7CisKKwluYW1lID0gZnNja19nZXRfb2JqZWN0X25hbWUob3B0aW9ucywgJnRyZWUtPm9iamVjdC5vaWQpOworCWlmIChpbml0X3RyZWVfZGVzY19nZW50bHkoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSkpCisJCXJldHVybiAtMTsKKwl3aGlsZSAodHJlZV9lbnRyeV9nZW50bHkoJmRlc2MsICZlbnRyeSkpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqOworCQlpbnQgcmVzdWx0OworCisJCWlmIChTX0lTR0lUTElOSyhlbnRyeS5tb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKSB7CisJCQlvYmogPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF90cmVlKHRoZV9yZXBvc2l0b3J5LCAmZW50cnkub2lkKTsKKwkJCWlmIChuYW1lICYmIG9iaikKKwkJCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCAmZW50cnkub2lkLCAiJXMlcy8iLAorCQkJCQkJICAgICBuYW1lLCBlbnRyeS5wYXRoKTsKKwkJCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsob2JqLCBPQkpfVFJFRSwgZGF0YSwgb3B0aW9ucyk7CisJCX0KKwkJZWxzZSBpZiAoU19JU1JFRyhlbnRyeS5tb2RlKSB8fCBTX0lTTE5LKGVudHJ5Lm1vZGUpKSB7CisJCQlvYmogPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF9ibG9iKHRoZV9yZXBvc2l0b3J5LCAmZW50cnkub2lkKTsKKwkJCWlmIChuYW1lICYmIG9iaikKKwkJCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCAmZW50cnkub2lkLCAiJXMlcyIsCisJCQkJCQkgICAgIG5hbWUsIGVudHJ5LnBhdGgpOworCQkJcmVzdWx0ID0gb3B0aW9ucy0+d2FsayhvYmosIE9CSl9CTE9CLCBkYXRhLCBvcHRpb25zKTsKKwkJfQorCQllbHNlIHsKKwkJCXJlc3VsdCA9IGVycm9yKCJpbiB0cmVlICVzOiBlbnRyeSAlcyBoYXMgYmFkIG1vZGUgJS42byIsCisJCQkJICAgICAgIGZzY2tfZGVzY3JpYmVfb2JqZWN0KG9wdGlvbnMsICZ0cmVlLT5vYmplY3Qub2lkKSwKKwkJCQkgICAgICAgZW50cnkucGF0aCwgZW50cnkubW9kZSk7CisJCX0KKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCQlpZiAoIXJlcykKKwkJCXJlcyA9IHJlc3VsdDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBmc2NrX3dhbGtfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgY291bnRlciA9IDAsIGdlbmVyYXRpb24gPSAwLCBuYW1lX3ByZWZpeF9sZW4gPSAwOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlpbnQgcmVzOworCWludCByZXN1bHQ7CisJY29uc3QgY2hhciAqbmFtZTsKKworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuIC0xOworCisJbmFtZSA9IGZzY2tfZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsICZjb21taXQtPm9iamVjdC5vaWQpOworCWlmIChuYW1lKQorCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCksCisJCQkJICAgICAiJXM6IiwgbmFtZSk7CisKKwlyZXN1bHQgPSBvcHRpb25zLT53YWxrKChzdHJ1Y3Qgb2JqZWN0ICopZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCksCisJCQkgICAgICAgT0JKX1RSRUUsIGRhdGEsIG9wdGlvbnMpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCXJlcyA9IHJlc3VsdDsKKworCXBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJaWYgKG5hbWUgJiYgcGFyZW50cykgeworCQlpbnQgbGVuID0gc3RybGVuKG5hbWUpLCBwb3dlcjsKKworCQlpZiAobGVuICYmIG5hbWVbbGVuIC0gMV0gPT0gJ14nKSB7CisJCQlnZW5lcmF0aW9uID0gMTsKKwkJCW5hbWVfcHJlZml4X2xlbiA9IGxlbiAtIDE7CisJCX0KKwkJZWxzZSB7IC8qIHBhcnNlIH48Z2VuZXJhdGlvbj4gc3VmZml4ICovCisJCQlmb3IgKGdlbmVyYXRpb24gPSAwLCBwb3dlciA9IDE7CisJCQkgICAgIGxlbiAmJiBpc2RpZ2l0KG5hbWVbbGVuIC0gMV0pOworCQkJICAgICBwb3dlciAqPSAxMCkKKwkJCQlnZW5lcmF0aW9uICs9IHBvd2VyICogKG5hbWVbLS1sZW5dIC0gJzAnKTsKKwkJCWlmIChwb3dlciA+IDEgJiYgbGVuICYmIG5hbWVbbGVuIC0gMV0gPT0gJ34nKQorCQkJCW5hbWVfcHJlZml4X2xlbiA9IGxlbiAtIDE7CisJCX0KKwl9CisKKwl3aGlsZSAocGFyZW50cykgeworCQlpZiAobmFtZSkgeworCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQ7CisKKwkJCWlmIChjb3VudGVyKyspCisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkLCAiJXNeJWQiLAorCQkJCQkJICAgICBuYW1lLCBjb3VudGVyKTsKKwkJCWVsc2UgaWYgKGdlbmVyYXRpb24gPiAwKQorCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsIG9pZCwgIiUuKnN+JWQiLAorCQkJCQkJICAgICBuYW1lX3ByZWZpeF9sZW4sIG5hbWUsCisJCQkJCQkgICAgIGdlbmVyYXRpb24gKyAxKTsKKwkJCWVsc2UKKwkJCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvaWQsICIlc14iLCBuYW1lKTsKKwkJfQorCQlyZXN1bHQgPSBvcHRpb25zLT53YWxrKChzdHJ1Y3Qgb2JqZWN0ICopcGFyZW50cy0+aXRlbSwgT0JKX0NPTU1JVCwgZGF0YSwgb3B0aW9ucyk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKCFyZXMpCisJCQlyZXMgPSByZXN1bHQ7CisJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGZzY2tfd2Fsa190YWcoc3RydWN0IHRhZyAqdGFnLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSBmc2NrX2dldF9vYmplY3RfbmFtZShvcHRpb25zLCAmdGFnLT5vYmplY3Qub2lkKTsKKworCWlmIChwYXJzZV90YWcodGFnKSkKKwkJcmV0dXJuIC0xOworCWlmIChuYW1lKQorCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCAmdGFnLT50YWdnZWQtPm9pZCwgIiVzIiwgbmFtZSk7CisJcmV0dXJuIG9wdGlvbnMtPndhbGsodGFnLT50YWdnZWQsIE9CSl9BTlksIGRhdGEsIG9wdGlvbnMpOworfQorCitpbnQgZnNja193YWxrKHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC0xOworCisJaWYgKG9iai0+dHlwZSA9PSBPQkpfTk9ORSkKKwkJcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2JqLT5vaWQpOworCisJc3dpdGNoIChvYmotPnR5cGUpIHsKKwljYXNlIE9CSl9CTE9COgorCQlyZXR1cm4gMDsKKwljYXNlIE9CSl9UUkVFOgorCQlyZXR1cm4gZnNja193YWxrX3RyZWUoKHN0cnVjdCB0cmVlICopb2JqLCBkYXRhLCBvcHRpb25zKTsKKwljYXNlIE9CSl9DT01NSVQ6CisJCXJldHVybiBmc2NrX3dhbGtfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopb2JqLCBkYXRhLCBvcHRpb25zKTsKKwljYXNlIE9CSl9UQUc6CisJCXJldHVybiBmc2NrX3dhbGtfdGFnKChzdHJ1Y3QgdGFnICopb2JqLCBkYXRhLCBvcHRpb25zKTsKKwlkZWZhdWx0OgorCQllcnJvcigiVW5rbm93biBvYmplY3QgdHlwZSBmb3IgJXMiLAorCQkgICAgICBmc2NrX2Rlc2NyaWJlX29iamVjdChvcHRpb25zLCAmb2JqLT5vaWQpKTsKKwkJcmV0dXJuIC0xOworCX0KK30KKworLyoKKyAqIFRoZSBlbnRyaWVzIGluIGEgdHJlZSBhcmUgb3JkZXJlZCBpbiB0aGUgX3BhdGhfIG9yZGVyLAorICogd2hpY2ggbWVhbnMgdGhhdCBhIGRpcmVjdG9yeSBlbnRyeSBpcyBvcmRlcmVkIGJ5IGFkZGluZworICogYSBzbGFzaCB0byB0aGUgZW5kIG9mIGl0LgorICoKKyAqIFNvIGEgZGlyZWN0b3J5IGNhbGxlZCAiYSIgaXMgb3JkZXJlZCBfYWZ0ZXJfIGEgZmlsZQorICogY2FsbGVkICJhLmMiLCBiZWNhdXNlICJhLyIgc29ydHMgYWZ0ZXIgImEuYyIuCisgKi8KKyNkZWZpbmUgVFJFRV9VTk9SREVSRUQgKC0xKQorI2RlZmluZSBUUkVFX0hBU19EVVBTICAoLTIpCisKK3N0YXRpYyBpbnQgdmVyaWZ5X29yZGVyZWQodW5zaWduZWQgbW9kZTEsIGNvbnN0IGNoYXIgKm5hbWUxLCB1bnNpZ25lZCBtb2RlMiwgY29uc3QgY2hhciAqbmFtZTIpCit7CisJaW50IGxlbjEgPSBzdHJsZW4obmFtZTEpOworCWludCBsZW4yID0gc3RybGVuKG5hbWUyKTsKKwlpbnQgbGVuID0gbGVuMSA8IGxlbjIgPyBsZW4xIDogbGVuMjsKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKwlpbnQgY21wOworCisJY21wID0gbWVtY21wKG5hbWUxLCBuYW1lMiwgbGVuKTsKKwlpZiAoY21wIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKGNtcCA+IDApCisJCXJldHVybiBUUkVFX1VOT1JERVJFRDsKKworCS8qCisJICogT2ssIHRoZSBmaXJzdCA8bGVuPiBjaGFyYWN0ZXJzIGFyZSB0aGUgc2FtZS4KKwkgKiBOb3cgd2UgbmVlZCB0byBvcmRlciB0aGUgbmV4dCBvbmUsIGJ1dCB0dXJuCisJICogYSAnXDAnIGludG8gYSAnLycgZm9yIGEgZGlyZWN0b3J5IGVudHJ5LgorCSAqLworCWMxID0gbmFtZTFbbGVuXTsKKwljMiA9IG5hbWUyW2xlbl07CisJaWYgKCFjMSAmJiAhYzIpCisJCS8qCisJCSAqIGdpdC13cml0ZS10cmVlIHVzZWQgdG8gd3JpdGUgb3V0IGEgbm9uc2Vuc2UgdHJlZSB0aGF0IGhhcworCQkgKiBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbmFtZSwgb25lIGJsb2IgYW5kIG9uZSB0cmVlLiAgTWFrZQorCQkgKiBzdXJlIHdlIGRvIG5vdCBoYXZlIGR1cGxpY2F0ZSBlbnRyaWVzLgorCQkgKi8KKwkJcmV0dXJuIFRSRUVfSEFTX0RVUFM7CisJaWYgKCFjMSAmJiBTX0lTRElSKG1vZGUxKSkKKwkJYzEgPSAnLyc7CisJaWYgKCFjMiAmJiBTX0lTRElSKG1vZGUyKSkKKwkJYzIgPSAnLyc7CisJcmV0dXJuIGMxIDwgYzIgPyAwIDogVFJFRV9VTk9SREVSRUQ7Cit9CisKK3N0YXRpYyBpbnQgZnNja190cmVlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICBjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWludCByZXR2YWwgPSAwOworCWludCBoYXNfbnVsbF9zaGExID0gMDsKKwlpbnQgaGFzX2Z1bGxfcGF0aCA9IDA7CisJaW50IGhhc19lbXB0eV9uYW1lID0gMDsKKwlpbnQgaGFzX2RvdCA9IDA7CisJaW50IGhhc19kb3Rkb3QgPSAwOworCWludCBoYXNfZG90Z2l0ID0gMDsKKwlpbnQgaGFzX3plcm9fcGFkID0gMDsKKwlpbnQgaGFzX2JhZF9tb2RlcyA9IDA7CisJaW50IGhhc19kdXBfZW50cmllcyA9IDA7CisJaW50IG5vdF9wcm9wZXJseV9zb3J0ZWQgPSAwOworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwl1bnNpZ25lZCBvX21vZGU7CisJY29uc3QgY2hhciAqb19uYW1lOworCisJaWYgKGluaXRfdHJlZV9kZXNjX2dlbnRseSgmZGVzYywgYnVmZmVyLCBzaXplKSkgeworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0JBRF9UUkVFLCAiY2Fubm90IGJlIHBhcnNlZCBhcyBhIHRyZWUiKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlvX21vZGUgPSAwOworCW9fbmFtZSA9IE5VTEw7CisKKwl3aGlsZSAoZGVzYy5zaXplKSB7CisJCXVuc2lnbmVkIHNob3J0IG1vZGU7CisJCWNvbnN0IGNoYXIgKm5hbWUsICpiYWNrc2xhc2g7CisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKworCQlvaWQgPSB0cmVlX2VudHJ5X2V4dHJhY3QoJmRlc2MsICZuYW1lLCAmbW9kZSk7CisKKwkJaGFzX251bGxfc2hhMSB8PSBpc19udWxsX29pZChvaWQpOworCQloYXNfZnVsbF9wYXRoIHw9ICEhc3RyY2hyKG5hbWUsICcvJyk7CisJCWhhc19lbXB0eV9uYW1lIHw9ICEqbmFtZTsKKwkJaGFzX2RvdCB8PSAhc3RyY21wKG5hbWUsICIuIik7CisJCWhhc19kb3Rkb3QgfD0gIXN0cmNtcChuYW1lLCAiLi4iKTsKKwkJaGFzX2RvdGdpdCB8PSBpc19oZnNfZG90Z2l0KG5hbWUpIHx8IGlzX250ZnNfZG90Z2l0KG5hbWUpOworCQloYXNfemVyb19wYWQgfD0gKihjaGFyICopZGVzYy5idWZmZXIgPT0gJzAnOworCisJCWlmIChpc19oZnNfZG90Z2l0bW9kdWxlcyhuYW1lKSB8fCBpc19udGZzX2RvdGdpdG1vZHVsZXMobmFtZSkpIHsKKwkJCWlmICghU19JU0xOSyhtb2RlKSkKKwkJCQlvaWRzZXRfaW5zZXJ0KCZnaXRtb2R1bGVzX2ZvdW5kLCBvaWQpOworCQkJZWxzZQorCQkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywKKwkJCQkJCSBvaWQsIE9CSl9UUkVFLAorCQkJCQkJIEZTQ0tfTVNHX0dJVE1PRFVMRVNfU1lNTElOSywKKwkJCQkJCSAiLmdpdG1vZHVsZXMgaXMgYSBzeW1ib2xpYyBsaW5rIik7CisJCX0KKworCQlpZiAoKGJhY2tzbGFzaCA9IHN0cmNocihuYW1lLCAnXFwnKSkpIHsKKwkJCXdoaWxlIChiYWNrc2xhc2gpIHsKKwkJCQliYWNrc2xhc2grKzsKKwkJCQloYXNfZG90Z2l0IHw9IGlzX250ZnNfZG90Z2l0KGJhY2tzbGFzaCk7CisJCQkJaWYgKGlzX250ZnNfZG90Z2l0bW9kdWxlcyhiYWNrc2xhc2gpKSB7CisJCQkJCWlmICghU19JU0xOSyhtb2RlKSkKKwkJCQkJCW9pZHNldF9pbnNlcnQoJmdpdG1vZHVsZXNfZm91bmQsIG9pZCk7CisJCQkJCWVsc2UKKwkJCQkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwKKwkJCQkJCQkJIEZTQ0tfTVNHX0dJVE1PRFVMRVNfU1lNTElOSywKKwkJCQkJCQkJICIuZ2l0bW9kdWxlcyBpcyBhIHN5bWJvbGljIGxpbmsiKTsKKwkJCQl9CisJCQkJYmFja3NsYXNoID0gc3RyY2hyKGJhY2tzbGFzaCwgJ1xcJyk7CisJCQl9CisJCX0KKworCQlpZiAodXBkYXRlX3RyZWVfZW50cnlfZ2VudGx5KCZkZXNjKSkgeworCQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19CQURfVFJFRSwgImNhbm5vdCBiZSBwYXJzZWQgYXMgYSB0cmVlIik7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAobW9kZSkgeworCQkvKgorCQkgKiBTdGFuZGFyZCBtb2Rlcy4uCisJCSAqLworCQljYXNlIFNfSUZSRUcgfCAwNzU1OgorCQljYXNlIFNfSUZSRUcgfCAwNjQ0OgorCQljYXNlIFNfSUZMTks6CisJCWNhc2UgU19JRkRJUjoKKwkJY2FzZSBTX0lGR0lUTElOSzoKKwkJCWJyZWFrOworCQkvKgorCQkgKiBUaGlzIGlzIG5vbnN0YW5kYXJkLCBidXQgd2UgaGFkIGEgZmV3IG9mIHRoZXNlCisJCSAqIGVhcmx5IG9uIHdoZW4gd2UgaG9ub3JlZCB0aGUgZnVsbCBzZXQgb2YgbW9kZQorCQkgKiBiaXRzLi4KKwkJICovCisJCWNhc2UgU19JRlJFRyB8IDA2NjQ6CisJCQlpZiAoIW9wdGlvbnMtPnN0cmljdCkKKwkJCQlicmVhazsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQloYXNfYmFkX21vZGVzID0gMTsKKwkJfQorCisJCWlmIChvX25hbWUpIHsKKwkJCXN3aXRjaCAodmVyaWZ5X29yZGVyZWQob19tb2RlLCBvX25hbWUsIG1vZGUsIG5hbWUpKSB7CisJCQljYXNlIFRSRUVfVU5PUkRFUkVEOgorCQkJCW5vdF9wcm9wZXJseV9zb3J0ZWQgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBUUkVFX0hBU19EVVBTOgorCQkJCWhhc19kdXBfZW50cmllcyA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJb19tb2RlID0gbW9kZTsKKwkJb19uYW1lID0gbmFtZTsKKwl9CisKKwlpZiAoaGFzX251bGxfc2hhMSkKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19OVUxMX1NIQTEsICJjb250YWlucyBlbnRyaWVzIHBvaW50aW5nIHRvIG51bGwgc2hhMSIpOworCWlmIChoYXNfZnVsbF9wYXRoKQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0ZVTExfUEFUSE5BTUUsICJjb250YWlucyBmdWxsIHBhdGhuYW1lcyIpOworCWlmIChoYXNfZW1wdHlfbmFtZSkKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19FTVBUWV9OQU1FLCAiY29udGFpbnMgZW1wdHkgcGF0aG5hbWUiKTsKKwlpZiAoaGFzX2RvdCkKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19IQVNfRE9ULCAiY29udGFpbnMgJy4nIik7CisJaWYgKGhhc19kb3Rkb3QpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfSEFTX0RPVERPVCwgImNvbnRhaW5zICcuLiciKTsKKwlpZiAoaGFzX2RvdGdpdCkKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19IQVNfRE9UR0lULCAiY29udGFpbnMgJy5naXQnIik7CisJaWYgKGhhc196ZXJvX3BhZCkKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19aRVJPX1BBRERFRF9GSUxFTU9ERSwgImNvbnRhaW5zIHplcm8tcGFkZGVkIGZpbGUgbW9kZXMiKTsKKwlpZiAoaGFzX2JhZF9tb2RlcykKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19CQURfRklMRU1PREUsICJjb250YWlucyBiYWQgZmlsZSBtb2RlcyIpOworCWlmIChoYXNfZHVwX2VudHJpZXMpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfRFVQTElDQVRFX0VOVFJJRVMsICJjb250YWlucyBkdXBsaWNhdGUgZmlsZSBlbnRyaWVzIik7CisJaWYgKG5vdF9wcm9wZXJseV9zb3J0ZWQpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfVFJFRV9OT1RfU09SVEVELCAibm90IHByb3Blcmx5IHNvcnRlZCIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2hlYWRlcnMoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwljb25zdCBjaGFyICpidWZmZXIgPSAoY29uc3QgY2hhciAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlzd2l0Y2ggKGJ1ZmZlcltpXSkgeworCQljYXNlICdcMCc6CisJCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwKKwkJCQlGU0NLX01TR19OVUxfSU5fSEVBREVSLAorCQkJCSJ1bnRlcm1pbmF0ZWQgaGVhZGVyOiBOVUwgYXQgb2Zmc2V0ICVsZCIsIGkpOworCQljYXNlICdcbic6CisJCQlpZiAoaSArIDEgPCBzaXplICYmIGJ1ZmZlcltpICsgMV0gPT0gJ1xuJykKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qCisJICogV2UgZGlkIG5vdCBmaW5kIGRvdWJsZS1MRiB0aGF0IHNlcGFyYXRlcyB0aGUgaGVhZGVyCisJICogYW5kIHRoZSBib2R5LiAgTm90IGhhdmluZyBhIGJvZHkgaXMgbm90IGEgY3JpbWUgYnV0CisJICogd2UgZG8gd2FudCB0byBzZWUgdGhlIHRlcm1pbmF0aW5nIExGIGZvciB0aGUgbGFzdCBoZWFkZXIKKwkgKiBsaW5lLgorCSAqLworCWlmIChzaXplICYmIGJ1ZmZlcltzaXplIC0gMV0gPT0gJ1xuJykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwKKwkJRlNDS19NU0dfVU5URVJNSU5BVEVEX0hFQURFUiwgInVudGVybWluYXRlZCBoZWFkZXIiKTsKK30KKworc3RhdGljIGludCBmc2NrX2lkZW50KGNvbnN0IGNoYXIgKippZGVudCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJY29uc3QgY2hhciAqcCA9ICppZGVudDsKKwljaGFyICplbmQ7CisKKwkqaWRlbnQgPSBzdHJjaHJudWwoKmlkZW50LCAnXG4nKTsKKwlpZiAoKippZGVudCA9PSAnXG4nKQorCQkoKmlkZW50KSsrOworCisJaWYgKCpwID09ICc8JykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX01JU1NJTkdfTkFNRV9CRUZPUkVfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGVtYWlsIik7CisJcCArPSBzdHJjc3BuKHAsICI8PlxuIik7CisJaWYgKCpwID09ICc+JykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9OQU1FLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgbmFtZSIpOworCWlmICgqcCAhPSAnPCcpCisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19NSVNTSU5HX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIGVtYWlsIik7CisJaWYgKHBbLTFdICE9ICcgJykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOworCXArKzsKKwlwICs9IHN0cmNzcG4ocCwgIjw+XG4iKTsKKwlpZiAoKnAgIT0gJz4nKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZW1haWwiKTsKKwlwKys7CisJaWYgKCpwICE9ICcgJykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGRhdGUiKTsKKwlwKys7CisJaWYgKCpwID09ICcwJyAmJiBwWzFdICE9ICcgJykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIHplcm8tcGFkZGVkIGRhdGUiKTsKKwlpZiAoZGF0ZV9vdmVyZmxvd3MocGFyc2VfdGltZXN0YW1wKHAsICZlbmQsIDEwKSkpCisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19CQURfREFURV9PVkVSRkxPVywgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gZGF0ZSBjYXVzZXMgaW50ZWdlciBvdmVyZmxvdyIpOworCWlmICgoZW5kID09IHAgfHwgKmVuZCAhPSAnICcpKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBkYXRlIik7CisJcCA9IGVuZCArIDE7CisJaWYgKCgqcCAhPSAnKycgJiYgKnAgIT0gJy0nKSB8fAorCSAgICAhaXNkaWdpdChwWzFdKSB8fAorCSAgICAhaXNkaWdpdChwWzJdKSB8fAorCSAgICAhaXNkaWdpdChwWzNdKSB8fAorCSAgICAhaXNkaWdpdChwWzRdKSB8fAorCSAgICAocFs1XSAhPSAnXG4nKSkKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9USU1FWk9ORSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIHRpbWUgem9uZSIpOworCXAgKz0gNjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc2NrX2NvbW1pdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICAgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZCwgcGFyZW50X29pZDsKKwl1bnNpZ25lZCBhdXRob3JfY291bnQ7CisJaW50IGVycjsKKwljb25zdCBjaGFyICpidWZmZXJfYmVnaW4gPSBidWZmZXI7CisJY29uc3QgY2hhciAqcDsKKworCWlmICh2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsIG9pZCwgT0JKX0NPTU1JVCwgb3B0aW9ucykpCisJCXJldHVybiAtMTsKKworCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAidHJlZSAiLCAmYnVmZmVyKSkKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX01JU1NJTkdfVFJFRSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RyZWUnIGxpbmUiKTsKKwlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZ0cmVlX29pZCwgJnApIHx8ICpwICE9ICdcbicpIHsKKwkJZXJyID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfQkFEX1RSRUVfU0hBMSwgImludmFsaWQgJ3RyZWUnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWJ1ZmZlciA9IHAgKyAxOworCXdoaWxlIChza2lwX3ByZWZpeChidWZmZXIsICJwYXJlbnQgIiwgJmJ1ZmZlcikpIHsKKwkJaWYgKHBhcnNlX29pZF9oZXgoYnVmZmVyLCAmcGFyZW50X29pZCwgJnApIHx8ICpwICE9ICdcbicpIHsKKwkJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX0JBRF9QQVJFTlRfU0hBMSwgImludmFsaWQgJ3BhcmVudCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWJ1ZmZlciA9IHAgKyAxOworCX0KKwlhdXRob3JfY291bnQgPSAwOworCXdoaWxlIChza2lwX3ByZWZpeChidWZmZXIsICJhdXRob3IgIiwgJmJ1ZmZlcikpIHsKKwkJYXV0aG9yX2NvdW50Kys7CisJCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgb2lkLCBPQkpfQ09NTUlULCBvcHRpb25zKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChhdXRob3JfY291bnQgPCAxKQorCQllcnIgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19NSVNTSU5HX0FVVEhPUiwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ2F1dGhvcicgbGluZSIpOworCWVsc2UgaWYgKGF1dGhvcl9jb3VudCA+IDEpCisJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX01VTFRJUExFX0FVVEhPUlMsICJpbnZhbGlkIGZvcm1hdCAtIG11bHRpcGxlICdhdXRob3InIGxpbmVzIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgImNvbW1pdHRlciAiLCAmYnVmZmVyKSkKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX01JU1NJTkdfQ09NTUlUVEVSLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnY29tbWl0dGVyJyBsaW5lIik7CisJZXJyID0gZnNja19pZGVudCgmYnVmZmVyLCBvaWQsIE9CSl9DT01NSVQsIG9wdGlvbnMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKG1lbWNocihidWZmZXJfYmVnaW4sICdcMCcsIHNpemUpKSB7CisJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX05VTF9JTl9DT01NSVQsCisJCQkgICAgICJOVUwgYnl0ZSBpbiB0aGUgY29tbWl0IG9iamVjdCBib2R5Iik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc2NrX3RhZyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRhZ2dlZF9vaWQ7CisJaW50IHJldCA9IDA7CisJY2hhciAqZW9sOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwOworCisJcmV0ID0gdmVyaWZ5X2hlYWRlcnMoYnVmZmVyLCBzaXplLCBvaWQsIE9CSl9UQUcsIG9wdGlvbnMpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKworCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAib2JqZWN0ICIsICZidWZmZXIpKSB7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfT0JKRUNULCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnb2JqZWN0JyBsaW5lIik7CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKHBhcnNlX29pZF9oZXgoYnVmZmVyLCAmdGFnZ2VkX29pZCwgJnApIHx8ICpwICE9ICdcbicpIHsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAiaW52YWxpZCAnb2JqZWN0JyBsaW5lIGZvcm1hdCAtIGJhZCBzaGExIik7CisJCWlmIChyZXQpCisJCQlnb3RvIGRvbmU7CisJfQorCWJ1ZmZlciA9IHAgKyAxOworCisJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJ0eXBlICIsICZidWZmZXIpKSB7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfVFlQRV9FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3R5cGUnIGxpbmUiKTsKKwkJZ290byBkb25lOworCX0KKwllb2wgPSBzdHJjaHIoYnVmZmVyLCAnXG4nKTsKKwlpZiAoIWVvbCkgeworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RZUEUsICJpbnZhbGlkIGZvcm1hdCAtIHVuZXhwZWN0ZWQgZW5kIGFmdGVyICd0eXBlJyBsaW5lIik7CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKHR5cGVfZnJvbV9zdHJpbmdfZ2VudGx5KGJ1ZmZlciwgZW9sIC0gYnVmZmVyLCAxKSA8IDApCisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX0JBRF9UWVBFLCAiaW52YWxpZCAndHlwZScgdmFsdWUiKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisJYnVmZmVyID0gZW9sICsgMTsKKworCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAidGFnICIsICZidWZmZXIpKSB7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfVEFHX0VOVFJZLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndGFnJyBsaW5lIik7CisJCWdvdG8gZG9uZTsKKwl9CisJZW9sID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisJaWYgKCFlb2wpIHsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19UQUcsICJpbnZhbGlkIGZvcm1hdCAtIHVuZXhwZWN0ZWQgZW5kIGFmdGVyICd0eXBlJyBsaW5lIik7CisJCWdvdG8gZG9uZTsKKwl9CisJc3RyYnVmX2FkZGYoJnNiLCAicmVmcy90YWdzLyUuKnMiLCAoaW50KShlb2wgLSBidWZmZXIpLCBidWZmZXIpOworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChzYi5idWYsIDApKSB7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsCisJCQkgICAgIEZTQ0tfTVNHX0JBRF9UQUdfTkFNRSwKKwkJCSAgICAgImludmFsaWQgJ3RhZycgbmFtZTogJS4qcyIsCisJCQkgICAgIChpbnQpKGVvbCAtIGJ1ZmZlciksIGJ1ZmZlcik7CisJCWlmIChyZXQpCisJCQlnb3RvIGRvbmU7CisJfQorCWJ1ZmZlciA9IGVvbCArIDE7CisKKwlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInRhZ2dlciAiLCAmYnVmZmVyKSkgeworCQkvKiBlYXJseSB0YWdzIGRvIG5vdCBjb250YWluICd0YWdnZXInIGxpbmVzOyB3YXJuIG9ubHkgKi8KKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19UQUdHRVJfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWdnZXInIGxpbmUiKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZG9uZTsKKwl9CisJZWxzZQorCQlyZXQgPSBmc2NrX2lkZW50KCZidWZmZXIsIG9pZCwgT0JKX1RBRywgb3B0aW9ucyk7CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgZnNja19naXRtb2R1bGVzX2RhdGEgeworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zOworCWludCByZXQ7Cit9OworCitzdGF0aWMgaW50IGZzY2tfZ2l0bW9kdWxlc19mbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICp2ZGF0YSkKK3sKKwlzdHJ1Y3QgZnNja19naXRtb2R1bGVzX2RhdGEgKmRhdGEgPSB2ZGF0YTsKKwljb25zdCBjaGFyICpzdWJzZWN0aW9uLCAqa2V5OworCWludCBzdWJzZWN0aW9uX2xlbjsKKwljaGFyICpuYW1lOworCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAic3VibW9kdWxlIiwgJnN1YnNlY3Rpb24sICZzdWJzZWN0aW9uX2xlbiwgJmtleSkgPCAwIHx8CisJICAgICFzdWJzZWN0aW9uKQorCQlyZXR1cm4gMDsKKworCW5hbWUgPSB4bWVtZHVweihzdWJzZWN0aW9uLCBzdWJzZWN0aW9uX2xlbik7CisJaWYgKGNoZWNrX3N1Ym1vZHVsZV9uYW1lKG5hbWUpIDwgMCkKKwkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLAorCQkJCSAgICBkYXRhLT5vaWQsIE9CSl9CTE9CLAorCQkJCSAgICBGU0NLX01TR19HSVRNT0RVTEVTX05BTUUsCisJCQkJICAgICJkaXNhbGxvd2VkIHN1Ym1vZHVsZSBuYW1lOiAlcyIsCisJCQkJICAgIG5hbWUpOworCWlmICghc3RyY21wKGtleSwgInVybCIpICYmIHZhbHVlICYmCisJICAgIGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbih2YWx1ZSkpCisJCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywKKwkJCQkgICAgZGF0YS0+b2lkLCBPQkpfQkxPQiwKKwkJCQkgICAgRlNDS19NU0dfR0lUTU9EVUxFU19VUkwsCisJCQkJICAgICJkaXNhbGxvd2VkIHN1Ym1vZHVsZSB1cmw6ICVzIiwKKwkJCQkgICAgdmFsdWUpOworCWlmICghc3RyY21wKGtleSwgInBhdGgiKSAmJiB2YWx1ZSAmJgorCSAgICBsb29rc19saWtlX2NvbW1hbmRfbGluZV9vcHRpb24odmFsdWUpKQorCQlkYXRhLT5yZXQgfD0gcmVwb3J0KGRhdGEtPm9wdGlvbnMsCisJCQkJICAgIGRhdGEtPm9pZCwgT0JKX0JMT0IsCisJCQkJICAgIEZTQ0tfTVNHX0dJVE1PRFVMRVNfUEFUSCwKKwkJCQkgICAgImRpc2FsbG93ZWQgc3VibW9kdWxlIHBhdGg6ICVzIiwKKwkJCQkgICAgdmFsdWUpOworCWlmICghc3RyY21wKGtleSwgInVwZGF0ZSIpICYmIHZhbHVlICYmCisJICAgIHBhcnNlX3N1Ym1vZHVsZV91cGRhdGVfdHlwZSh2YWx1ZSkgPT0gU01fVVBEQVRFX0NPTU1BTkQpCisJCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywgZGF0YS0+b2lkLCBPQkpfQkxPQiwKKwkJCQkgICAgRlNDS19NU0dfR0lUTU9EVUxFU19VUERBVEUsCisJCQkJICAgICJkaXNhbGxvd2VkIHN1Ym1vZHVsZSB1cGRhdGUgc2V0dGluZzogJXMiLAorCQkJCSAgICB2YWx1ZSk7CisJZnJlZShuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfYmxvYihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJc3RydWN0IGZzY2tfZ2l0bW9kdWxlc19kYXRhIGRhdGE7CisJc3RydWN0IGNvbmZpZ19vcHRpb25zIGNvbmZpZ19vcHRzID0geyAwIH07CisKKwlpZiAoIW9pZHNldF9jb250YWlucygmZ2l0bW9kdWxlc19mb3VuZCwgb2lkKSkKKwkJcmV0dXJuIDA7CisJb2lkc2V0X2luc2VydCgmZ2l0bW9kdWxlc19kb25lLCBvaWQpOworCisJaWYgKG9iamVjdF9vbl9za2lwbGlzdChvcHRpb25zLCBvaWQpKQorCQlyZXR1cm4gMDsKKworCWlmICghYnVmKSB7CisJCS8qCisJCSAqIEEgbWlzc2luZyBidWZmZXIgaGVyZSBpcyBhIHNpZ24gdGhhdCB0aGUgY2FsbGVyIGZvdW5kIHRoZQorCQkgKiBibG9iIHRvbyBnaWdhbnRpYyB0byBsb2FkIGludG8gbWVtb3J5LiBMZXQncyBqdXN0IGNvbnNpZGVyCisJCSAqIHRoYXQgYW4gZXJyb3IuCisJCSAqLworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0JMT0IsCisJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0xBUkdFLAorCQkJICAgICAgIi5naXRtb2R1bGVzIHRvbyBsYXJnZSB0byBwYXJzZSIpOworCX0KKworCWRhdGEub2lkID0gb2lkOworCWRhdGEub3B0aW9ucyA9IG9wdGlvbnM7CisJZGF0YS5yZXQgPSAwOworCWNvbmZpZ19vcHRzLmVycm9yX2FjdGlvbiA9IENPTkZJR19FUlJPUl9TSUxFTlQ7CisJaWYgKGdpdF9jb25maWdfZnJvbV9tZW0oZnNja19naXRtb2R1bGVzX2ZuLCBDT05GSUdfT1JJR0lOX0JMT0IsCisJCQkJIi5naXRtb2R1bGVzIiwgYnVmLCBzaXplLCAmZGF0YSwgJmNvbmZpZ19vcHRzKSkKKwkJZGF0YS5yZXQgfD0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0JMT0IsCisJCQkJICAgRlNDS19NU0dfR0lUTU9EVUxFU19QQVJTRSwKKwkJCQkgICAiY291bGQgbm90IHBhcnNlIGdpdG1vZHVsZXMgYmxvYiIpOworCisJcmV0dXJuIGRhdGEucmV0OworfQorCitpbnQgZnNja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCisJc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBOVUxMLCBPQkpfTk9ORSwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKKworCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpCisJCXJldHVybiBmc2NrX2Jsb2IoJm9iai0+b2lkLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKQorCQlyZXR1cm4gZnNja190cmVlKCZvYmotPm9pZCwgZGF0YSwgc2l6ZSwgb3B0aW9ucyk7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gZnNja19jb21taXQoJm9iai0+b2lkLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpCisJCXJldHVybiBmc2NrX3RhZygmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOworCisJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmb2JqLT5vaWQsIG9iai0+dHlwZSwKKwkJICAgICAgRlNDS19NU0dfVU5LTk9XTl9UWVBFLAorCQkgICAgICAidW5rbm93biB0eXBlICclZCcgKGludGVybmFsIGZzY2sgZXJyb3IpIiwKKwkJICAgICAgb2JqLT50eXBlKTsKK30KKworaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJCQlpbnQgbXNnX3R5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJaWYgKG1zZ190eXBlID09IEZTQ0tfV0FSTikgeworCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgZnNja19kZXNjcmliZV9vYmplY3Qobywgb2lkKSwgbWVzc2FnZSk7CisJCXJldHVybiAwOworCX0KKwllcnJvcigib2JqZWN0ICVzOiAlcyIsIGZzY2tfZGVzY3JpYmVfb2JqZWN0KG8sIG9pZCksIG1lc3NhZ2UpOworCXJldHVybiAxOworfQorCitpbnQgZnNja19maW5pc2goc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2lkc2V0X2l0ZXIgaXRlcjsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CisKKwlvaWRzZXRfaXRlcl9pbml0KCZnaXRtb2R1bGVzX2ZvdW5kLCAmaXRlcik7CisJd2hpbGUgKChvaWQgPSBvaWRzZXRfaXRlcl9uZXh0KCZpdGVyKSkpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWNoYXIgKmJ1ZjsKKworCQlpZiAob2lkc2V0X2NvbnRhaW5zKCZnaXRtb2R1bGVzX2RvbmUsIG9pZCkpCisJCQljb250aW51ZTsKKworCQlidWYgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWYpIHsKKwkJCWlmIChpc19wcm9taXNvcl9vYmplY3Qob2lkKSkKKwkJCQljb250aW51ZTsKKwkJCXJldCB8PSByZXBvcnQob3B0aW9ucywKKwkJCQkgICAgICBvaWQsIE9CSl9CTE9CLAorCQkJCSAgICAgIEZTQ0tfTVNHX0dJVE1PRFVMRVNfTUlTU0lORywKKwkJCQkgICAgICAidW5hYmxlIHRvIHJlYWQgLmdpdG1vZHVsZXMgYmxvYiIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAodHlwZSA9PSBPQkpfQkxPQikKKwkJCXJldCB8PSBmc2NrX2Jsb2Iob2lkLCBidWYsIHNpemUsIG9wdGlvbnMpOworCQllbHNlCisJCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsCisJCQkJICAgICAgb2lkLCB0eXBlLAorCQkJCSAgICAgIEZTQ0tfTVNHX0dJVE1PRFVMRVNfQkxPQiwKKwkJCQkgICAgICAibm9uLWJsb2IgZm91bmQgYXQgLmdpdG1vZHVsZXMiKTsKKwkJZnJlZShidWYpOworCX0KKworCisJb2lkc2V0X2NsZWFyKCZnaXRtb2R1bGVzX2ZvdW5kKTsKKwlvaWRzZXRfY2xlYXIoJmdpdG1vZHVsZXNfZG9uZSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzY2suaCBiL2ZzY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWNmNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvZnNjay5oCkBAIC0wLDAgKzEsOTcgQEAKKyNpZm5kZWYgR0lUX0ZTQ0tfSAorI2RlZmluZSBHSVRfRlNDS19ICisKKyNpbmNsdWRlICJvaWRzZXQuaCIKKworI2RlZmluZSBGU0NLX0VSUk9SIDEKKyNkZWZpbmUgRlNDS19XQVJOIDIKKyNkZWZpbmUgRlNDS19JR05PUkUgMworCitzdHJ1Y3QgZnNja19vcHRpb25zOworc3RydWN0IG9iamVjdDsKKwordm9pZCBmc2NrX3NldF9tc2dfdHlwZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQljb25zdCBjaGFyICptc2dfaWQsIGNvbnN0IGNoYXIgKm1zZ190eXBlKTsKK3ZvaWQgZnNja19zZXRfbXNnX3R5cGVzKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnZhbHVlcyk7CitpbnQgaXNfdmFsaWRfbXNnX3R5cGUoY29uc3QgY2hhciAqbXNnX2lkLCBjb25zdCBjaGFyICptc2dfdHlwZSk7CisKKy8qCisgKiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZnNja193YWxrCisgKiB0eXBlIGlzIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBvYmplY3Qgb3IgT0JKX0FOWQorICogdGhlIHJldHVybiB2YWx1ZSBpczoKKyAqICAgICAwCWV2ZXJ5dGhpbmcgT0sKKyAqICAgICA8MAllcnJvciBzaWduYWxlZCBhbmQgYWJvcnQKKyAqICAgICA+MAllcnJvciBzaWduYWxlZCBhbmQgZG8gbm90IGFib3J0CisgKi8KK3R5cGVkZWYgaW50ICgqZnNja193YWxrX2Z1bmMpKHN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOworCisvKiBjYWxsYmFjayBmb3IgZnNja19vYmplY3QsIHR5cGUgaXMgRlNDS19FUlJPUiBvciBGU0NLX1dBUk4gKi8KK3R5cGVkZWYgaW50ICgqZnNja19lcnJvcikoc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlLAorCQkJICBpbnQgbXNnX3R5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCitpbnQgZnNja19lcnJvcl9mdW5jdGlvbihzdHJ1Y3QgZnNja19vcHRpb25zICpvLAorCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIG9iamVjdF90eXBlLAorCQkJaW50IG1zZ190eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKKworc3RydWN0IGZzY2tfb3B0aW9ucyB7CisJZnNja193YWxrX2Z1bmMgd2FsazsKKwlmc2NrX2Vycm9yIGVycm9yX2Z1bmM7CisJdW5zaWduZWQgc3RyaWN0OjE7CisJaW50ICptc2dfdHlwZTsKKwlzdHJ1Y3Qgb2lkc2V0IHNraXBsaXN0OworCWtoX29pZF9tYXBfdCAqb2JqZWN0X25hbWVzOworfTsKKworI2RlZmluZSBGU0NLX09QVElPTlNfREVGQVVMVCB7IE5VTEwsIGZzY2tfZXJyb3JfZnVuY3Rpb24sIDAsIE5VTEwsIE9JRFNFVF9JTklUIH0KKyNkZWZpbmUgRlNDS19PUFRJT05TX1NUUklDVCB7IE5VTEwsIGZzY2tfZXJyb3JfZnVuY3Rpb24sIDEsIE5VTEwsIE9JRFNFVF9JTklUIH0KKworLyogZGVzY2VuZCBpbiBhbGwgbGlua2VkIGNoaWxkIG9iamVjdHMKKyAqIHRoZSByZXR1cm4gdmFsdWUgaXM6CisgKiAgICAtMQllcnJvciBpbiBwcm9jZXNzaW5nIHRoZSBvYmplY3QKKyAqICAgIDwwCXJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2ssIHdoaWNoIGxlYWQgdG8gYW4gYWJvcnQKKyAqICAgID4wCXJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3Qgc2lnbmFsZWQgZXJyb3IgPjAgKGluIHRoZSBjYXNlIG9mIG5vIG90aGVyIGVycm9ycykKKyAqICAgIDAJCWV2ZXJ5dGhpbmcgT0sKKyAqLworaW50IGZzY2tfd2FsayhzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOworCisvKgorICogQmxvYiBvYmplY3RzIG15IHBhc3MgYSBOVUxMIGRhdGEgcG9pbnRlciwgd2hpY2ggaW5kaWNhdGVzIHRoZXkgYXJlIHRvbyBsYXJnZQorICogdG8gZml0IGluIG1lbW9yeS4gQWxsIG90aGVyIHR5cGVzIG11c3QgcGFzcyBhIHJlYWwgYnVmZmVyLgorICovCitpbnQgZnNja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCisJc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CisKKy8qCisgKiBTb21lIGZzY2sgY2hlY2tzIGFyZSBjb250ZXh0LWRlcGVuZGVudCwgYW5kIG1heSBlbmQgdXAgcXVldWVkOyBydW4gdGhpcworICogYWZ0ZXIgY29tcGxldGluZyBhbGwgZnNja19vYmplY3QoKSBjYWxscyBpbiBvcmRlciB0byByZXNvbHZlIGFueSByZW1haW5pbmcKKyAqIGNoZWNrcy4KKyAqLworaW50IGZzY2tfZmluaXNoKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOworCisvKgorICogU3Vic3lzdGVtIGZvciBzdG9yaW5nIGh1bWFuLXJlYWRhYmxlIG5hbWVzIGZvciBlYWNoIG9iamVjdC4KKyAqCisgKiBJZiBmc2NrX2VuYWJsZV9vYmplY3RfbmFtZXMoKSBoYXMgbm90IGJlZW4gY2FsbGVkLCBhbGwgb3RoZXIgZnVuY3Rpb25zIGFyZQorICogbm9vcHMuCisgKgorICogVXNlIGZzY2tfcHV0X29iamVjdF9uYW1lKCkgdG8gc2VlZCBpbml0aWFsIG5hbWVzIChlLmcuIGZyb20gcmVmbmFtZXMpOyB0aGUKKyAqIGZzY2sgY29kZSB3aWxsIGV4dGVuZCB0aGF0IHdoaWxlIHdhbGtpbmcgdHJlZXMsIGV0Yy4KKyAqCisgKiBVc2UgZnNja19nZXRfb2JqZWN0X25hbWUoKSB0byBnZXQgYSBzaW5nbGUgbmFtZSAob3IgTlVMTCBpZiBub25lKS4gT3IgdGhlCisgKiBtb3JlIGNvbnZlbmllbnQgZGVzY3JpYmVfb2JqZWN0KCksIHdoaWNoIGFsd2F5cyBwcm9kdWNlcyBhbiBvdXRwdXQgc3RyaW5nCisgKiB3aXRoIHRoZSBvaWQgY29tYmluZWQgd2l0aCB0aGUgbmFtZSAoaWYgYW55KS4gTm90ZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUKKyAqIHBvaW50cyB0byBhIHJvdGF0aW5nIGFycmF5IG9mIHN0YXRpYyBidWZmZXJzLCBhbmQgbWF5IGJlIGludmFsaWRhdGVkIGJ5IGEKKyAqIHN1YnNlcXVlbnQgY2FsbC4KKyAqLwordm9pZCBmc2NrX2VuYWJsZV9vYmplY3RfbmFtZXMoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7Citjb25zdCBjaGFyICpmc2NrX2dldF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMyw0KSkpCit2b2lkIGZzY2tfcHV0X29iamVjdF9uYW1lKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pOworY29uc3QgY2hhciAqZnNja19kZXNjcmliZV9vYmplY3Qoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9mc21vbml0b3IuYyBiL2ZzbW9uaXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMmJkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9mc21vbml0b3IuYwpAQCAtMCwwICsxLDM2MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiZXdhaC9ld29rLmgiCisjaW5jbHVkZSAiZnNtb25pdG9yLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworI2RlZmluZSBJTkRFWF9FWFRFTlNJT05fVkVSU0lPTjEJKDEpCisjZGVmaW5lIElOREVYX0VYVEVOU0lPTl9WRVJTSU9OMgkoMikKKyNkZWZpbmUgSE9PS19JTlRFUkZBQ0VfVkVSU0lPTjEJCSgxKQorI2RlZmluZSBIT09LX0lOVEVSRkFDRV9WRVJTSU9OMgkJKDIpCisKK3N0cnVjdCB0cmFjZV9rZXkgdHJhY2VfZnNtb25pdG9yID0gVFJBQ0VfS0VZX0lOSVQoRlNNT05JVE9SKTsKKworc3RhdGljIHZvaWQgZnNtb25pdG9yX2V3YWhfY2FsbGJhY2soc2l6ZV90IHBvcywgdm9pZCAqaXMpCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSAoc3RydWN0IGluZGV4X3N0YXRlICopaXM7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9ucikKKwkJQlVHKCJmc21vbml0b3JfZGlydHkgaGFzIG1vcmUgZW50cmllcyB0aGFuIHRoZSBpbmRleCAoJSJQUkl1TUFYIiA+PSAldSkiLAorCQkgICAgKHVpbnRtYXhfdClwb3MsIGlzdGF0ZS0+Y2FjaGVfbnIpOworCisJY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CisJY2UtPmNlX2ZsYWdzICY9IH5DRV9GU01PTklUT1JfVkFMSUQ7Cit9CisKK3N0YXRpYyBpbnQgZnNtb25pdG9yX2hvb2tfdmVyc2lvbih2b2lkKQoreworCWludCBob29rX3ZlcnNpb247CisKKwlpZiAoZ2l0X2NvbmZpZ19nZXRfaW50KCJjb3JlLmZzbW9uaXRvcmhvb2t2ZXJzaW9uIiwgJmhvb2tfdmVyc2lvbikpCisJCXJldHVybiAtMTsKKworCWlmIChob29rX3ZlcnNpb24gPT0gSE9PS19JTlRFUkZBQ0VfVkVSU0lPTjEgfHwKKwkgICAgaG9va192ZXJzaW9uID09IEhPT0tfSU5URVJGQUNFX1ZFUlNJT04yKQorCQlyZXR1cm4gaG9va192ZXJzaW9uOworCisJd2FybmluZygiSW52YWxpZCBob29rIHZlcnNpb24gJyVpJyBpbiBjb3JlLmZzbW9uaXRvcmhvb2t2ZXJzaW9uLiAiCisJCSJNdXN0IGJlIDEgb3IgMi4iLCBob29rX3ZlcnNpb24pOworCXJldHVybiAtMTsKK30KKworaW50IHJlYWRfZnNtb25pdG9yX2V4dGVuc2lvbihzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3Qgdm9pZCAqZGF0YSwKKwl1bnNpZ25lZCBsb25nIHN6KQoreworCWNvbnN0IGNoYXIgKmluZGV4ID0gZGF0YTsKKwl1aW50MzJfdCBoZHJfdmVyc2lvbjsKKwl1aW50MzJfdCBld2FoX3NpemU7CisJc3RydWN0IGV3YWhfYml0bWFwICpmc21vbml0b3JfZGlydHk7CisJaW50IHJldDsKKwl1aW50NjRfdCB0aW1lc3RhbXA7CisJc3RydWN0IHN0cmJ1ZiBsYXN0X3VwZGF0ZSA9IFNUUkJVRl9JTklUOworCisJaWYgKHN6IDwgc2l6ZW9mKHVpbnQzMl90KSArIDEgKyBzaXplb2YodWludDMyX3QpKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgZnNtb25pdG9yIGV4dGVuc2lvbiAodG9vIHNob3J0KSIpOworCisJaGRyX3ZlcnNpb24gPSBnZXRfYmUzMihpbmRleCk7CisJaW5kZXggKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwlpZiAoaGRyX3ZlcnNpb24gPT0gSU5ERVhfRVhURU5TSU9OX1ZFUlNJT04xKSB7CisJCXRpbWVzdGFtcCA9IGdldF9iZTY0KGluZGV4KTsKKwkJc3RyYnVmX2FkZGYoJmxhc3RfdXBkYXRlLCAiJSJQUkl1NjQiIiwgdGltZXN0YW1wKTsKKwkJaW5kZXggKz0gc2l6ZW9mKHVpbnQ2NF90KTsKKwl9IGVsc2UgaWYgKGhkcl92ZXJzaW9uID09IElOREVYX0VYVEVOU0lPTl9WRVJTSU9OMikgeworCQlzdHJidWZfYWRkc3RyKCZsYXN0X3VwZGF0ZSwgaW5kZXgpOworCQlpbmRleCArPSBsYXN0X3VwZGF0ZS5sZW4gKyAxOworCX0gZWxzZSB7CisJCXJldHVybiBlcnJvcigiYmFkIGZzbW9uaXRvciB2ZXJzaW9uICVkIiwgaGRyX3ZlcnNpb24pOworCX0KKworCWlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlID0gc3RyYnVmX2RldGFjaCgmbGFzdF91cGRhdGUsIE5VTEwpOworCisJZXdhaF9zaXplID0gZ2V0X2JlMzIoaW5kZXgpOworCWluZGV4ICs9IHNpemVvZih1aW50MzJfdCk7CisKKwlmc21vbml0b3JfZGlydHkgPSBld2FoX25ldygpOworCXJldCA9IGV3YWhfcmVhZF9tbWFwKGZzbW9uaXRvcl9kaXJ0eSwgaW5kZXgsIGV3YWhfc2l6ZSk7CisJaWYgKHJldCAhPSBld2FoX3NpemUpIHsKKwkJZXdhaF9mcmVlKGZzbW9uaXRvcl9kaXJ0eSk7CisJCXJldHVybiBlcnJvcigiZmFpbGVkIHRvIHBhcnNlIGV3YWggYml0bWFwIHJlYWRpbmcgZnNtb25pdG9yIGluZGV4IGV4dGVuc2lvbiIpOworCX0KKwlpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSA9IGZzbW9uaXRvcl9kaXJ0eTsKKworCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQorCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKKwkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2ZzbW9uaXRvciwgInJlYWQgZnNtb25pdG9yIGV4dGVuc2lvbiBzdWNjZXNzZnVsIik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZmlsbF9mc21vbml0b3JfYml0bWFwKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXVuc2lnbmVkIGludCBpLCBza2lwcGVkID0gMDsKKwlpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSA9IGV3YWhfbmV3KCk7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlpZiAoaXN0YXRlLT5jYWNoZVtpXS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCisJCQlza2lwcGVkKys7CisJCWVsc2UgaWYgKCEoaXN0YXRlLT5jYWNoZVtpXS0+Y2VfZmxhZ3MgJiBDRV9GU01PTklUT1JfVkFMSUQpKQorCQkJZXdhaF9zZXQoaXN0YXRlLT5mc21vbml0b3JfZGlydHksIGkgLSBza2lwcGVkKTsKKwl9Cit9CisKK3ZvaWQgd3JpdGVfZnNtb25pdG9yX2V4dGVuc2lvbihzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJdWludDMyX3QgaGRyX3ZlcnNpb247CisJdWludDMyX3QgZXdhaF9zdGFydDsKKwl1aW50MzJfdCBld2FoX3NpemUgPSAwOworCWludCBmaXh1cCA9IDA7CisKKwlpZiAoIWlzdGF0ZS0+c3BsaXRfaW5kZXggJiYKKwkgICAgaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplID4gaXN0YXRlLT5jYWNoZV9ucikKKwkJQlVHKCJmc21vbml0b3JfZGlydHkgaGFzIG1vcmUgZW50cmllcyB0aGFuIHRoZSBpbmRleCAoJSJQUkl1TUFYIiA+ICV1KSIsCisJCSAgICAodWludG1heF90KWlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5LT5iaXRfc2l6ZSwgaXN0YXRlLT5jYWNoZV9ucik7CisKKwlwdXRfYmUzMigmaGRyX3ZlcnNpb24sIElOREVYX0VYVEVOU0lPTl9WRVJTSU9OMik7CisJc3RyYnVmX2FkZChzYiwgJmhkcl92ZXJzaW9uLCBzaXplb2YodWludDMyX3QpKTsKKworCXN0cmJ1Zl9hZGRzdHIoc2IsIGlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlKTsKKwlzdHJidWZfYWRkY2goc2IsIDApOyAvKiBXYW50IHRvIGtlZXAgYSBOVUwgKi8KKworCWZpeHVwID0gc2ItPmxlbjsKKwlzdHJidWZfYWRkKHNiLCAmZXdhaF9zaXplLCBzaXplb2YodWludDMyX3QpKTsgLyogd2UnbGwgZml4IHRoaXMgdXAgbGF0ZXIgKi8KKworCWV3YWhfc3RhcnQgPSBzYi0+bGVuOworCWV3YWhfc2VyaWFsaXplX3N0cmJ1Zihpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSwgc2IpOworCWV3YWhfZnJlZShpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSk7CisJaXN0YXRlLT5mc21vbml0b3JfZGlydHkgPSBOVUxMOworCisJLyogZml4IHVwIHNpemUgZmllbGQgKi8KKwlwdXRfYmUzMigmZXdhaF9zaXplLCBzYi0+bGVuIC0gZXdhaF9zdGFydCk7CisJbWVtY3B5KHNiLT5idWYgKyBmaXh1cCwgJmV3YWhfc2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mc21vbml0b3IsICJ3cml0ZSBmc21vbml0b3IgZXh0ZW5zaW9uIHN1Y2Nlc3NmdWwiKTsKK30KKworLyoKKyAqIENhbGwgdGhlIHF1ZXJ5LWZzbW9uaXRvciBob29rIHBhc3NpbmcgdGhlIGxhc3QgdXBkYXRlIHRva2VuIG9mIHRoZSBzYXZlZCByZXN1bHRzLgorICovCitzdGF0aWMgaW50IHF1ZXJ5X2ZzbW9uaXRvcihpbnQgdmVyc2lvbiwgY29uc3QgY2hhciAqbGFzdF91cGRhdGUsIHN0cnVjdCBzdHJidWYgKnF1ZXJ5X3Jlc3VsdCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWlmICghY29yZV9mc21vbml0b3IpCisJCXJldHVybiAtMTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgY29yZV9mc21vbml0b3IpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICIlZCIsIHZlcnNpb24pOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICIlcyIsIGxhc3RfdXBkYXRlKTsKKwljcC51c2Vfc2hlbGwgPSAxOworCWNwLmRpciA9IGdldF9naXRfd29ya190cmVlKCk7CisKKwlyZXR1cm4gY2FwdHVyZV9jb21tYW5kKCZjcCwgcXVlcnlfcmVzdWx0LCAxMDI0KTsKK30KKworc3RhdGljIHZvaWQgZnNtb25pdG9yX3JlZnJlc2hfY2FsbGJhY2soc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgbmFtZSwgc3RybGVuKG5hbWUpKTsKKworCWlmIChwb3MgPj0gMCkgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtwb3NdOworCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX0ZTTU9OSVRPUl9WQUxJRDsKKwl9CisKKwkvKgorCSAqIE1hcmsgdGhlIHVudHJhY2tlZCBjYWNoZSBkaXJ0eSBldmVuIGlmIGl0IHdhc24ndCBmb3VuZCBpbiB0aGUgaW5kZXgKKwkgKiBhcyBpdCBjb3VsZCBiZSBhIG5ldyB1bnRyYWNrZWQgZmlsZS4KKwkgKi8KKwl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mc21vbml0b3IsICJmc21vbml0b3JfcmVmcmVzaF9jYWxsYmFjayAnJXMnIiwgbmFtZSk7CisJdW50cmFja2VkX2NhY2hlX2ludmFsaWRhdGVfcGF0aChpc3RhdGUsIG5hbWUsIDApOworfQorCit2b2lkIHJlZnJlc2hfZnNtb25pdG9yKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzdHJidWYgcXVlcnlfcmVzdWx0ID0gU1RSQlVGX0lOSVQ7CisJaW50IHF1ZXJ5X3N1Y2Nlc3MgPSAwLCBob29rX3ZlcnNpb24gPSAtMTsKKwlzaXplX3QgYm9sID0gMDsgLyogYmVnaW5uaW5nIG9mIGxpbmUgKi8KKwl1aW50NjRfdCBsYXN0X3VwZGF0ZTsKKwlzdHJ1Y3Qgc3RyYnVmIGxhc3RfdXBkYXRlX3Rva2VuID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFjb3JlX2ZzbW9uaXRvciB8fCBpc3RhdGUtPmZzbW9uaXRvcl9oYXNfcnVuX29uY2UpCisJCXJldHVybjsKKworCWhvb2tfdmVyc2lvbiA9IGZzbW9uaXRvcl9ob29rX3ZlcnNpb24oKTsKKworCWlzdGF0ZS0+ZnNtb25pdG9yX2hhc19ydW5fb25jZSA9IDE7CisKKwl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mc21vbml0b3IsICJyZWZyZXNoIGZzbW9uaXRvciIpOworCS8qCisJICogVGhpcyBjb3VsZCBiZSByYWN5IHNvIHNhdmUgdGhlIGRhdGUvdGltZSBub3cgYW5kIHF1ZXJ5X2ZzbW9uaXRvcgorCSAqIHNob3VsZCBiZSBpbmNsdXNpdmUgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgcG90ZW50aWFsIGNoYW5nZXMuCisJICovCisJbGFzdF91cGRhdGUgPSBnZXRuYW5vdGltZSgpOworCWlmIChob29rX3ZlcnNpb24gPT0gSE9PS19JTlRFUkZBQ0VfVkVSU0lPTjEpCisJCXN0cmJ1Zl9hZGRmKCZsYXN0X3VwZGF0ZV90b2tlbiwgIiUiUFJJdTY0IiIsIGxhc3RfdXBkYXRlKTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBhIGxhc3QgdXBkYXRlIHRva2VuLCBjYWxsIHF1ZXJ5X2ZzbW9uaXRvciBmb3IgdGhlIHNldCBvZgorCSAqIGNoYW5nZXMgc2luY2UgdGhhdCB0b2tlbiwgZWxzZSBhc3N1bWUgZXZlcnl0aGluZyBpcyBwb3NzaWJseSBkaXJ0eQorCSAqIGFuZCBjaGVjayBpdCBhbGwuCisJICovCisJaWYgKGlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlKSB7CisJCWlmIChob29rX3ZlcnNpb24gPT0gLTEgfHwgaG9va192ZXJzaW9uID09IEhPT0tfSU5URVJGQUNFX1ZFUlNJT04yKSB7CisJCQlxdWVyeV9zdWNjZXNzID0gIXF1ZXJ5X2ZzbW9uaXRvcihIT09LX0lOVEVSRkFDRV9WRVJTSU9OMiwKKwkJCQlpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSwgJnF1ZXJ5X3Jlc3VsdCk7CisKKwkJCWlmIChxdWVyeV9zdWNjZXNzKSB7CisJCQkJaWYgKGhvb2tfdmVyc2lvbiA8IDApCisJCQkJCWhvb2tfdmVyc2lvbiA9IEhPT0tfSU5URVJGQUNFX1ZFUlNJT04yOworCisJCQkJLyoKKwkJCQkgKiBGaXJzdCBlbnRyeSB3aWxsIGJlIHRoZSBsYXN0IHVwZGF0ZSB0b2tlbgorCQkJCSAqIE5lZWQgdG8gdXNlIGEgY2hhciAqIHZhcmlhYmxlIGJlY2F1c2Ugc3RhdGljCisJCQkJICogYW5hbHlzaXMgd2FzIHN1Z2dlc3RpbmcgdG8gdXNlIHN0cmJ1Zl9hZGRidWYKKwkJCQkgKiBidXQgd2UgZG9uJ3Qgd2FudCB0byBjb3B5IHRoZSBlbnRpcmUgc3RyYnVmCisJCQkJICogb25seSB0aGUgdGhlIGNoYXJzIHVwIHRvIHRoZSBmaXJzdCBOVUwKKwkJCQkgKi8KKwkJCQlidWYgPSBxdWVyeV9yZXN1bHQuYnVmOworCQkJCXN0cmJ1Zl9hZGRzdHIoJmxhc3RfdXBkYXRlX3Rva2VuLCBidWYpOworCQkJCWlmICghbGFzdF91cGRhdGVfdG9rZW4ubGVuKSB7CisJCQkJCXdhcm5pbmcoIkVtcHR5IGxhc3QgdXBkYXRlIHRva2VuLiIpOworCQkJCQlxdWVyeV9zdWNjZXNzID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlib2wgPSBsYXN0X3VwZGF0ZV90b2tlbi5sZW4gKyAxOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoaG9va192ZXJzaW9uIDwgMCkgeworCQkJCWhvb2tfdmVyc2lvbiA9IEhPT0tfSU5URVJGQUNFX1ZFUlNJT04xOworCQkJCWlmICghbGFzdF91cGRhdGVfdG9rZW4ubGVuKQorCQkJCQlzdHJidWZfYWRkZigmbGFzdF91cGRhdGVfdG9rZW4sICIlIlBSSXU2NCIiLCBsYXN0X3VwZGF0ZSk7CisJCQl9CisJCX0KKworCQlpZiAoaG9va192ZXJzaW9uID09IEhPT0tfSU5URVJGQUNFX1ZFUlNJT04xKSB7CisJCQlxdWVyeV9zdWNjZXNzID0gIXF1ZXJ5X2ZzbW9uaXRvcihIT09LX0lOVEVSRkFDRV9WRVJTSU9OMSwKKwkJCQlpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSwgJnF1ZXJ5X3Jlc3VsdCk7CisJCX0KKworCQl0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZShsYXN0X3VwZGF0ZSwgImZzbW9uaXRvciBwcm9jZXNzICclcyciLCBjb3JlX2ZzbW9uaXRvcik7CisJCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX2ZzbW9uaXRvciwgImZzbW9uaXRvciBwcm9jZXNzICclcycgcmV0dXJuZWQgJXMiLAorCQkJY29yZV9mc21vbml0b3IsIHF1ZXJ5X3N1Y2Nlc3MgPyAic3VjY2VzcyIgOiAiZmFpbHVyZSIpOworCX0KKworCS8qIGEgZnNtb25pdG9yIHByb2Nlc3MgY2FuIHJldHVybiAnLycgdG8gaW5kaWNhdGUgYWxsIGVudHJpZXMgYXJlIGludmFsaWQgKi8KKwlpZiAocXVlcnlfc3VjY2VzcyAmJiBxdWVyeV9yZXN1bHQuYnVmW2JvbF0gIT0gJy8nKSB7CisJCS8qIE1hcmsgYWxsIGVudHJpZXMgcmV0dXJuZWQgYnkgdGhlIG1vbml0b3IgYXMgZGlydHkgKi8KKwkJYnVmID0gcXVlcnlfcmVzdWx0LmJ1ZjsKKwkJZm9yIChpID0gYm9sOyBpIDwgcXVlcnlfcmVzdWx0LmxlbjsgaSsrKSB7CisJCQlpZiAoYnVmW2ldICE9ICdcMCcpCisJCQkJY29udGludWU7CisJCQlmc21vbml0b3JfcmVmcmVzaF9jYWxsYmFjayhpc3RhdGUsIGJ1ZiArIGJvbCk7CisJCQlib2wgPSBpICsgMTsKKwkJfQorCQlpZiAoYm9sIDwgcXVlcnlfcmVzdWx0LmxlbikKKwkJCWZzbW9uaXRvcl9yZWZyZXNoX2NhbGxiYWNrKGlzdGF0ZSwgYnVmICsgYm9sKTsKKworCQkvKiBOb3cgbWFyayB0aGUgdW50cmFja2VkIGNhY2hlIGZvciBmc21vbml0b3IgdXNhZ2UgKi8KKwkJaWYgKGlzdGF0ZS0+dW50cmFja2VkKQorCQkJaXN0YXRlLT51bnRyYWNrZWQtPnVzZV9mc21vbml0b3IgPSAxOworCX0gZWxzZSB7CisKKwkJLyogV2Ugb25seSB3YW50IHRvIHJ1biB0aGUgcG9zdCBpbmRleCBjaGFuZ2VkIGhvb2sgaWYgd2UndmUgYWN0dWFsbHkgY2hhbmdlZCBlbnRyaWVzLCBzbyBrZWVwIHRyYWNrCisJCSAqIGlmIHdlIGFjdHVhbGx5IGNoYW5nZWQgZW50cmllcyBvciBub3QgKi8KKwkJaW50IGlzX2NhY2hlX2NoYW5nZWQgPSAwOworCQkvKiBNYXJrIGFsbCBlbnRyaWVzIGludmFsaWQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQkJaWYgKGlzdGF0ZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICYgQ0VfRlNNT05JVE9SX1ZBTElEKSB7CisJCQkJaXNfY2FjaGVfY2hhbmdlZCA9IDE7CisJCQkJaXN0YXRlLT5jYWNoZVtpXS0+Y2VfZmxhZ3MgJj0gfkNFX0ZTTU9OSVRPUl9WQUxJRDsKKwkJCX0KKwkJfQorCisJCS8qIElmIHdlJ3JlIGdvaW5nIHRvIGNoZWNrIGV2ZXJ5IGZpbGUsIGVuc3VyZSB3ZSBzYXZlIHRoZSByZXN1bHRzICovCisJCWlmIChpc19jYWNoZV9jaGFuZ2VkKQorCQkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IEZTTU9OSVRPUl9DSEFOR0VEOworCisJCWlmIChpc3RhdGUtPnVudHJhY2tlZCkKKwkJCWlzdGF0ZS0+dW50cmFja2VkLT51c2VfZnNtb25pdG9yID0gMDsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnF1ZXJ5X3Jlc3VsdCk7CisKKwkvKiBOb3cgdGhhdCB3ZSd2ZSB1cGRhdGVkIGlzdGF0ZSwgc2F2ZSB0aGUgbGFzdF91cGRhdGVfdG9rZW4gKi8KKwlGUkVFX0FORF9OVUxMKGlzdGF0ZS0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlKTsKKwlpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSA9IHN0cmJ1Zl9kZXRhY2goJmxhc3RfdXBkYXRlX3Rva2VuLCBOVUxMKTsKK30KKwordm9pZCBhZGRfZnNtb25pdG9yKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzdHJidWYgbGFzdF91cGRhdGUgPSBTVFJCVUZfSU5JVDsKKworCWlmICghaXN0YXRlLT5mc21vbml0b3JfbGFzdF91cGRhdGUpIHsKKwkJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2VfZnNtb25pdG9yLCAiYWRkIGZzbW9uaXRvciIpOworCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gRlNNT05JVE9SX0NIQU5HRUQ7CisJCXN0cmJ1Zl9hZGRmKCZsYXN0X3VwZGF0ZSwgIiUiUFJJdTY0IiIsIGdldG5hbm90aW1lKCkpOworCQlpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSA9IHN0cmJ1Zl9kZXRhY2goJmxhc3RfdXBkYXRlLCBOVUxMKTsKKworCQkvKiByZXNldCB0aGUgZnNtb25pdG9yIHN0YXRlICovCisJCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspCisJCQlpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyAmPSB+Q0VfRlNNT05JVE9SX1ZBTElEOworCisJCS8qIHJlc2V0IHRoZSB1bnRyYWNrZWQgY2FjaGUgKi8KKwkJaWYgKGlzdGF0ZS0+dW50cmFja2VkKSB7CisJCQlhZGRfdW50cmFja2VkX2NhY2hlKGlzdGF0ZSk7CisJCQlpc3RhdGUtPnVudHJhY2tlZC0+dXNlX2ZzbW9uaXRvciA9IDE7CisJCX0KKworCQkvKiBVcGRhdGUgdGhlIGZzbW9uaXRvciBzdGF0ZSAqLworCQlyZWZyZXNoX2ZzbW9uaXRvcihpc3RhdGUpOworCX0KK30KKwordm9pZCByZW1vdmVfZnNtb25pdG9yKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmIChpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSkgeworCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mc21vbml0b3IsICJyZW1vdmUgZnNtb25pdG9yIik7CisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBGU01PTklUT1JfQ0hBTkdFRDsKKwkJRlJFRV9BTkRfTlVMTChpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSk7CisJfQorfQorCit2b2lkIHR3ZWFrX2ZzbW9uaXRvcihzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZnNtb25pdG9yX2VuYWJsZWQgPSBnaXRfY29uZmlnX2dldF9mc21vbml0b3IoKTsKKworCWlmIChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSkgeworCQlpZiAoZnNtb25pdG9yX2VuYWJsZWQpIHsKKwkJCS8qIE1hcmsgYWxsIGVudHJpZXMgdmFsaWQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJCQlpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyB8PSBDRV9GU01PTklUT1JfVkFMSUQ7CisJCQl9CisKKwkJCS8qIE1hcmsgYWxsIHByZXZpb3VzbHkgc2F2ZWQgZW50cmllcyBhcyBkaXJ0eSAqLworCQkJaWYgKGlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5LT5iaXRfc2l6ZSA+IGlzdGF0ZS0+Y2FjaGVfbnIpCisJCQkJQlVHKCJmc21vbml0b3JfZGlydHkgaGFzIG1vcmUgZW50cmllcyB0aGFuIHRoZSBpbmRleCAoJSJQUkl1TUFYIiA+ICV1KSIsCisJCQkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKKwkJCWV3YWhfZWFjaF9iaXQoaXN0YXRlLT5mc21vbml0b3JfZGlydHksIGZzbW9uaXRvcl9ld2FoX2NhbGxiYWNrLCBpc3RhdGUpOworCisJCQlyZWZyZXNoX2ZzbW9uaXRvcihpc3RhdGUpOworCQl9CisKKwkJZXdhaF9mcmVlKGlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5KTsKKwkJaXN0YXRlLT5mc21vbml0b3JfZGlydHkgPSBOVUxMOworCX0KKworCXN3aXRjaCAoZnNtb25pdG9yX2VuYWJsZWQpIHsKKwljYXNlIC0xOiAvKiBrZWVwOiBkbyBub3RoaW5nICovCisJCWJyZWFrOworCWNhc2UgMDogLyogZmFsc2UgKi8KKwkJcmVtb3ZlX2ZzbW9uaXRvcihpc3RhdGUpOworCQlicmVhazsKKwljYXNlIDE6IC8qIHRydWUgKi8KKwkJYWRkX2ZzbW9uaXRvcihpc3RhdGUpOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiB1bmtub3duIHZhbHVlOiBkbyBub3RoaW5nICovCisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2ZzbW9uaXRvci5oIGIvZnNtb25pdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5MzE4YQotLS0gL2Rldi9udWxsCisrKyBiL2ZzbW9uaXRvci5oCkBAIC0wLDAgKzEsNzcgQEAKKyNpZm5kZWYgRlNNT05JVE9SX0gKKyNkZWZpbmUgRlNNT05JVE9SX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX2ZzbW9uaXRvcjsKKworLyoKKyAqIFJlYWQgdGhlIGZzbW9uaXRvciBpbmRleCBleHRlbnNpb24gYW5kIChpZiBjb25maWd1cmVkKSByZXN0b3JlIHRoZQorICogQ0VfRlNNT05JVE9SX1ZBTElEIHN0YXRlLgorICovCitpbnQgcmVhZF9mc21vbml0b3JfZXh0ZW5zaW9uKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHN6KTsKKworLyoKKyAqIEZpbGwgdGhlIGZzbW9uaXRvcl9kaXJ0eSBld2FoIGJpdHMgd2l0aCB0aGVpciBzdGF0ZSBmcm9tIHRoZSBpbmRleCwKKyAqIGJlZm9yZSBpdCBpcyBzcGxpdCBkdXJpbmcgd3JpdGluZy4KKyAqLwordm9pZCBmaWxsX2ZzbW9uaXRvcl9iaXRtYXAoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisvKgorICogV3JpdGUgdGhlIENFX0ZTTU9OSVRPUl9WQUxJRCBzdGF0ZSBpbnRvIHRoZSBmc21vbml0b3IgaW5kZXgKKyAqIGV4dGVuc2lvbi4gIFJlYWRzIGZyb20gdGhlIGZzbW9uaXRvcl9kaXJ0eSBld2FoIGluIHRoZSBpbmRleC4KKyAqLwordm9pZCB3cml0ZV9mc21vbml0b3JfZXh0ZW5zaW9uKHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKy8qCisgKiBBZGQvcmVtb3ZlIHRoZSBmc21vbml0b3IgaW5kZXggZXh0ZW5zaW9uCisgKi8KK3ZvaWQgYWRkX2ZzbW9uaXRvcihzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7Cit2b2lkIHJlbW92ZV9mc21vbml0b3Ioc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisvKgorICogQWRkL3JlbW92ZSB0aGUgZnNtb25pdG9yIGluZGV4IGV4dGVuc2lvbiBhcyBuZWNlc3NhcnkgYmFzZWQgb24gdGhlIGN1cnJlbnQKKyAqIGNvcmUuZnNtb25pdG9yIHNldHRpbmcuCisgKi8KK3ZvaWQgdHdlYWtfZnNtb25pdG9yKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKKworLyoKKyAqIFJ1biB0aGUgY29uZmlndXJlZCBmc21vbml0b3IgaW50ZWdyYXRpb24gc2NyaXB0IGFuZCBjbGVhciB0aGUKKyAqIENFX0ZTTU9OSVRPUl9WQUxJRCBiaXQgZm9yIGFueSBmaWxlcyByZXR1cm5lZCBhcyBkaXJ0eS4gIEFsc28gaW52YWxpZGF0ZQorICogYW55IGNvcnJlc3BvbmRpbmcgdW50cmFja2VkIGNhY2hlIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzLiBPcHRpbWl6ZWQgdG8gb25seQorICogcnVuIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGNhbGxlZC4KKyAqLwordm9pZCByZWZyZXNoX2ZzbW9uaXRvcihzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKy8qCisgKiBTZXQgdGhlIGdpdmVuIGNhY2hlIGVudHJpZXMgQ0VfRlNNT05JVE9SX1ZBTElEIGJpdC4gVGhpcyBzaG91bGQgYmUKKyAqIGNhbGxlZCBhbnkgdGltZSB0aGUgY2FjaGUgZW50cnkgaGFzIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoZQorICogY3VycmVudCBzdGF0ZSBvZiB0aGUgZmlsZSBvbiBkaXNrLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19mc21vbml0b3JfdmFsaWQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaWYgKGNvcmVfZnNtb25pdG9yICYmICEoY2UtPmNlX2ZsYWdzICYgQ0VfRlNNT05JVE9SX1ZBTElEKSkgeworCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgPSAxOworCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfRlNNT05JVE9SX1ZBTElEOworCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mc21vbml0b3IsICJtYXJrX2ZzbW9uaXRvcl9jbGVhbiAnJXMnIiwgY2UtPm5hbWUpOworCX0KK30KKworLyoKKyAqIENsZWFyIHRoZSBnaXZlbiBjYWNoZSBlbnRyeSdzIENFX0ZTTU9OSVRPUl9WQUxJRCBiaXQgYW5kIGludmFsaWRhdGUKKyAqIGFueSBjb3JyZXNwb25kaW5nIHVudHJhY2tlZCBjYWNoZSBkaXJlY3Rvcnkgc3RydWN0dXJlcy4gVGhpcyBzaG91bGQKKyAqIGJlIGNhbGxlZCBhbnkgdGltZSBnaXQgY3JlYXRlcyBvciBtb2RpZmllcyBhIGZpbGUgdGhhdCBzaG91bGQKKyAqIHRyaWdnZXIgYW4gbHN0YXQoKSBvciBpbnZhbGlkYXRlIHRoZSB1bnRyYWNrZWQgY2FjaGUgZm9yIHRoZQorICogY29ycmVzcG9uZGluZyBkaXJlY3RvcnkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfZnNtb25pdG9yX2ludmFsaWQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaWYgKGNvcmVfZnNtb25pdG9yKSB7CisJCWNlLT5jZV9mbGFncyAmPSB+Q0VfRlNNT05JVE9SX1ZBTElEOworCQl1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZSwgY2UtPm5hbWUsIDEpOworCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mc21vbml0b3IsICJtYXJrX2ZzbW9uaXRvcl9pbnZhbGlkICclcyciLCBjZS0+bmFtZSk7CisJfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Z1enotY29tbWl0LWdyYXBoLmMgYi9mdXp6LWNvbW1pdC1ncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTdhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9mdXp6LWNvbW1pdC1ncmFwaC5jCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKK3N0cnVjdCBjb21taXRfZ3JhcGggKnBhcnNlX2NvbW1pdF9ncmFwaCh2b2lkICpncmFwaF9tYXAsIGludCBmZCwKKwkJCQkJc2l6ZV90IGdyYXBoX3NpemUpOworCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmc7CisKKwlpbml0aWFsaXplX3RoZV9yZXBvc2l0b3J5KCk7CisJZyA9IHBhcnNlX2NvbW1pdF9ncmFwaCgodm9pZCAqKWRhdGEsIC0xLCBzaXplKTsKKwlyZXBvX2NsZWFyKHRoZV9yZXBvc2l0b3J5KTsKKwlmcmVlKGcpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mdXp6LXBhY2staGVhZGVycy5jIGIvZnV6ei1wYWNrLWhlYWRlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWRhMWQwCi0tLSAvZGV2L251bGwKKysrIGIvZnV6ei1wYWNrLWhlYWRlcnMuYwpAQCAtMCwwICsxLDE0IEBACisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKworaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpOworCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBsZW47CisKKwl1bnBhY2tfb2JqZWN0X2hlYWRlcl9idWZmZXIoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkYXRhLAorCQkJCSAgICAodW5zaWduZWQgbG9uZylzaXplLCAmdHlwZSwgJmxlbik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2Z1enotcGFjay1pZHguYyBiL2Z1enotcGFjay1pZHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzNkNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnV6ei1wYWNrLWlkeC5jCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0IHA7CisKKwlsb2FkX2lkeCgiZnV6ei1pbnB1dCIsIEdJVF9TSEExX1JBV1NaLCAodm9pZCAqKWRhdGEsIHNpemUsICZwKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2VuZXJhdGUtY21kbGlzdC5zaCBiL2dlbmVyYXRlLWNtZGxpc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzExNThmNwotLS0gL2Rldi9udWxsCisrKyBiL2dlbmVyYXRlLWNtZGxpc3Quc2gKQEAgLTAsMCArMSwxMTcgQEAKKyMhL2Jpbi9zaAorCitkaWUgKCkgeworCWVjaG8gIiRAIiA+JjIKKwlleGl0IDEKK30KKworY29tbWFuZF9saXN0ICgpIHsKKwlldmFsICJncmVwIC12ZSAnXiMnICRleGNsdWRlX3Byb2dyYW1zIiA8IiQxIgorfQorCitnZXRfY2F0ZWdvcmllcyAoKSB7CisJdHIgJyAnICdcbid8CisJZ3JlcCAtdiAnXiQnIHwKKwlzb3J0IHwKKwl1bmlxCit9CisKK2NhdGVnb3J5X2xpc3QgKCkgeworCWNvbW1hbmRfbGlzdCAiJDEiIHwKKwljdXQgLWMgNDAtIHwKKwlnZXRfY2F0ZWdvcmllcworfQorCitnZXRfc3lub3BzaXMgKCkgeworCXNlZCAtbiAnCisJCS9eTkFNRS8sLyciJDEiJy9ICisJCSR7CisJCQl4CisJCQlzLy4qJyIkMSInIC0gXCguKlwpL05fKCJcMSIpLworCQkJcAorCQl9JyAiRG9jdW1lbnRhdGlvbi8kMS50eHQiCit9CisKK2RlZmluZV9jYXRlZ29yaWVzICgpIHsKKwllY2hvCisJZWNobyAiLyogQ29tbWFuZCBjYXRlZ29yaWVzICovIgorCWJpdD0wCisJY2F0ZWdvcnlfbGlzdCAiJDEiIHwKKwl3aGlsZSByZWFkIGNhdAorCWRvCisJCWVjaG8gIiNkZWZpbmUgQ0FUXyRjYXQgKDFVTCA8PCAkYml0KSIKKwkJYml0PSQoKCRiaXQrMSkpCisJZG9uZQorCXRlc3QgIiRiaXQiIC1ndCAzMiAmJiBkaWUgIlVyZ2guLiB0b28gbWFueSBjYXRlZ29yaWVzPyIKK30KKworZGVmaW5lX2NhdGVnb3J5X25hbWVzICgpIHsKKwllY2hvCisJZWNobyAiLyogQ2F0ZWdvcnkgbmFtZXMgKi8iCisJZWNobyAic3RhdGljIGNvbnN0IGNoYXIgKmNhdGVnb3J5X25hbWVzW10gPSB7IgorCWJpdD0wCisJY2F0ZWdvcnlfbGlzdCAiJDEiIHwKKwl3aGlsZSByZWFkIGNhdAorCWRvCisJCWVjaG8gIglcIiRjYXRcIiwgLyogKDFVTCA8PCAkYml0KSAqLyIKKwkJYml0PSQoKCRiaXQrMSkpCisJZG9uZQorCWVjaG8gIglOVUxMIgorCWVjaG8gIn07IgorfQorCitwcmludF9jb21tYW5kX2xpc3QgKCkgeworCWVjaG8gInN0YXRpYyBzdHJ1Y3QgY21kbmFtZV9oZWxwIGNvbW1hbmRfbGlzdFtdID0geyIKKworCWNvbW1hbmRfbGlzdCAiJDEiIHwKKwl3aGlsZSByZWFkIGNtZCByZXN0CisJZG8KKwkJcHJpbnRmICIJeyBcIiRjbWRcIiwgJChnZXRfc3lub3BzaXMgJGNtZCksIDAiCisJCWZvciBjYXQgaW4gJChlY2hvICIkcmVzdCIgfCBnZXRfY2F0ZWdvcmllcykKKwkJZG8KKwkJCXByaW50ZiAiIHwgQ0FUXyRjYXQiCisJCWRvbmUKKwkJZWNobyAiIH0sIgorCWRvbmUKKwllY2hvICJ9OyIKK30KKworcHJpbnRfY29uZmlnX2xpc3QgKCkgeworCWNhdCA8PEVPRgorc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZpZ19uYW1lX2xpc3RbXSA9IHsKK0VPRgorCWdyZXAgLWggJ15bYS16QS1aXS4qXC4uKjo6JCcgRG9jdW1lbnRhdGlvbi8qY29uZmlnLnR4dCBEb2N1bWVudGF0aW9uL2NvbmZpZy8qLnR4dCB8CisJc2VkICcvZGVwcmVjYXRlZC9kOyBzLzo6JC8vOyBzLywgICovXG4vZycgfAorCXNvcnQgfAorCXdoaWxlIHJlYWQgbGluZQorCWRvCisJCWVjaG8gIglcIiRsaW5lXCIsIgorCWRvbmUKKwljYXQgPDxFT0YKKwlOVUxMLAorfTsKK0VPRgorfQorCitleGNsdWRlX3Byb2dyYW1zPQord2hpbGUgdGVzdCAiLS1leGNsdWRlLXByb2dyYW0iID0gIiQxIgorZG8KKwlzaGlmdAorCWV4Y2x1ZGVfcHJvZ3JhbXM9IiRleGNsdWRlX3Byb2dyYW1zIC1lIFwiXiQxIFwiIgorCXNoaWZ0Citkb25lCisKK2VjaG8gIi8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWNtZGxpc3Quc2ggKi8KK3N0cnVjdCBjbWRuYW1lX2hlbHAgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqaGVscDsKKwl1aW50MzJfdCBjYXRlZ29yeTsKK307CisiCitkZWZpbmVfY2F0ZWdvcmllcyAiJDEiCitlY2hvCitkZWZpbmVfY2F0ZWdvcnlfbmFtZXMgIiQxIgorZWNobworcHJpbnRfY29tbWFuZF9saXN0ICIkMSIKK2VjaG8KK3ByaW50X2NvbmZpZ19saXN0CmRpZmYgLS1naXQgYS9nZXR0ZXh0LmMgYi9nZXR0ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkMmMxMgotLS0gL2Rldi9udWxsCisrKyBiL2dldHRleHQuYwpAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmbmRlZiBOT19HRVRURVhUCisjCWluY2x1ZGUgPGxvY2FsZS5oPgorIwlpbmNsdWRlIDxsaWJpbnRsLmg+CisjCWlmZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCitzdGF0aWMgY29uc3QgY2hhciAqbG9jYWxlX2NoYXJzZXQodm9pZCkKK3sKKwljb25zdCBjaGFyICplbnYgPSBnZXRlbnYoIkxDX0FMTCIpLCAqZG90OworCisJaWYgKCFlbnYgfHwgISplbnYpCisJCWVudiA9IGdldGVudigiTENfQ1RZUEUiKTsKKwlpZiAoIWVudiB8fCAhKmVudikKKwkJZW52ID0gZ2V0ZW52KCJMQU5HIik7CisKKwlpZiAoIWVudikKKwkJcmV0dXJuICJVVEYtOCI7CisKKwlkb3QgPSBzdHJjaHIoZW52LCAnLicpOworCXJldHVybiAhZG90ID8gZW52IDogZG90ICsgMTsKK30KKworIwllbGlmIGRlZmluZWQgSEFWRV9MSUJDSEFSU0VUX0gKKyMJCWluY2x1ZGUgPGxpYmNoYXJzZXQuaD4KKyMJZWxzZQorIwkJaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyMJCWRlZmluZSBsb2NhbGVfY2hhcnNldCgpIG5sX2xhbmdpbmZvKENPREVTRVQpCisjCWVuZGlmCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CisKKy8qCisgKiBHdWVzcyB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZXMgZnJvbSB0aGUgdmFsdWUgaW4gTEFOR1VBR0UgZW52aXJvbm1lbnQKKyAqIHZhcmlhYmxlIGFuZCBMQ19NRVNTQUdFUyBsb2NhbGUgY2F0ZWdvcnkgaWYgTk9fR0VUVEVYVCBpcyBub3QgZGVmaW5lZC4KKyAqCisgKiBUaGUgcmVzdWx0IGNhbiBiZSBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IGxpa2UgImtvOmphOmVuIi4KKyAqLworY29uc3QgY2hhciAqZ2V0X3ByZWZlcnJlZF9sYW5ndWFnZXModm9pZCkKK3sKKwljb25zdCBjaGFyICpyZXR2YWw7CisKKwlyZXR2YWwgPSBnZXRlbnYoIkxBTkdVQUdFIik7CisJaWYgKHJldHZhbCAmJiAqcmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisjaWZuZGVmIE5PX0dFVFRFWFQKKwlyZXR2YWwgPSBzZXRsb2NhbGUoTENfTUVTU0FHRVMsIE5VTEwpOworCWlmIChyZXR2YWwgJiYgKnJldHZhbCAmJgorCQlzdHJjbXAocmV0dmFsLCAiQyIpICYmCisJCXN0cmNtcChyZXR2YWwsICJQT1NJWCIpKQorCQlyZXR1cm4gcmV0dmFsOworI2VuZGlmCisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHVzZV9nZXR0ZXh0X3BvaXNvbih2b2lkKQoreworCXN0YXRpYyBpbnQgcG9pc29uX3JlcXVlc3RlZCA9IC0xOworCWlmIChwb2lzb25fcmVxdWVzdGVkID09IC0xKQorCQlwb2lzb25fcmVxdWVzdGVkID0gZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiIsIDApOworCXJldHVybiBwb2lzb25fcmVxdWVzdGVkOworfQorCisjaWZuZGVmIE5PX0dFVFRFWFQKK3N0YXRpYyBpbnQgdGVzdF92c25wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJY2hhciBidWZbMjZdOworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpbml0X2dldHRleHRfY2hhcnNldChjb25zdCBjaGFyICpkb21haW4pCit7CisJLyoKKwkgICBUaGlzIHRyaWNrIGFycmFuZ2VzIGZvciBtZXNzYWdlcyB0byBiZSBlbWl0dGVkIGluIHRoZSB1c2VyJ3MKKwkgICByZXF1ZXN0ZWQgZW5jb2RpbmcsIGJ1dCBhdm9pZHMgc2V0dGluZyBMQ19DVFlQRSBmcm9tIHRoZQorCSAgIGVudmlyb25tZW50IGZvciB0aGUgd2hvbGUgcHJvZ3JhbS4KKworCSAgIFRoaXMgcHJpbWFyaWx5IGRvbmUgdG8gYXZvaWQgYSBidWcgaW4gdnNucHJpbnRmIGluIHRoZSBHTlUgQworCSAgIExpYnJhcnkgWzFdLiB3aGljaCB0cmlnZ2VyZWQgYSAieW91ciB2c25wcmludGYgaXMgYnJva2VuIiBlcnJvcgorCSAgIG9uIEdpdCdzIG93biByZXBvc2l0b3J5IHdoZW4gaW5zcGVjdGluZyB2MC45OS42fjEgdW5kZXIgYSBVVEYtOAorCSAgIGxvY2FsZS4KKworCSAgIFRoYXQgY29tbWl0IGNvbnRhaW5zIGEgSVNPLTg4NTktMSBlbmNvZGVkIGF1dGhvciBuYW1lLCB3aGljaAorCSAgIHRoZSBsb2NhbGUgYXdhcmUgdnNucHJpbnRmKDMpIHdvbid0IGludGVycG9sYXRlIGluIHRoZSBmb3JtYXQKKwkgICBhcmd1bWVudCwgZHVlIHRvIG1pc21hdGNoIGJldHdlZW4gdGhlIGRhdGEgZW5jb2RpbmcgYW5kIHRoZQorCSAgIGxvY2FsZS4KKworCSAgIEV2ZW4gaWYgaXQgd2Fzbid0IGZvciB0aGF0IGJ1ZyB3ZSB3b3VsZG4ndCB3YW50IHRvIHVzZSBMQ19DVFlQRSBhdAorCSAgIHRoaXMgcG9pbnQsIGJlY2F1c2UgaXQnZCByZXF1aXJlIGF1ZGl0aW5nIGFsbCB0aGUgY29kZSB0aGF0IHVzZXMgQworCSAgIGZ1bmN0aW9ucyB3aG9zZSBzZW1hbnRpY3MgYXJlIG1vZGlmaWVkIGJ5IExDX0NUWVBFLgorCisJICAgQnV0IG9ubHkgc2V0dGluZyBMQ19NRVNTQUdFUyBhcyB3ZSBkbyBjcmVhdGVzIGEgcHJvYmxlbSwgc2luY2UKKwkgICB3ZSBkZWNsYXJlIHRoZSBlbmNvZGluZyBvZiBvdXIgUE8gZmlsZXNbMl0gdGhlIGdldHRleHQKKwkgICBpbXBsZW1lbnRhdGlvbiB3aWxsIHRyeSB0byByZWNvZGUgaXQgdG8gdGhlIHVzZXIncyBsb2NhbGUsIGJ1dAorCSAgIHdpdGhvdXQgTENfQ1RZUEUgaXQnbGwgZW1pdCBzb21ldGhpbmcgbGlrZSB0aGlzIG9uICdnaXQgaW5pdCcKKwkgICB1bmRlciB0aGUgSWNlbGFuZGljIGxvY2FsZToKKworCSAgICAgICBCaj8gdGlsIHQ/bWEgR2l0IGxpbmQgPyAvaGxhZ2gvLmdpdC8KKworCSAgIEdldHRleHQga25vd3MgYWJvdXQgdGhlIGVuY29kaW5nIG9mIG91ciBQTyBmaWxlLCBidXQgd2UgaGF2ZW4ndAorCSAgIHRvbGQgaXQgYWJvdXQgdGhlIHVzZXIncyBlbmNvZGluZywgc28gYWxsIHRoZSBub24tVVMtQVNDSUkKKwkgICBjaGFyYWN0ZXJzIGdldCBlbmNvZGVkIHRvIHF1ZXN0aW9uIG1hcmtzLgorCisJICAgQnV0IHdlJ3JlIGluIGx1Y2shIFdlIGNhbiBzZXQgTENfQ1RZUEUgZnJvbSB0aGUgZW52aXJvbm1lbnQKKwkgICBvbmx5IHdoaWxlIHdlIGNhbGwgbmxfbGFuZ2luZm8gYW5kCisJICAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQuIFRoYXQgc3VmZmljZXMgdG8gdGVsbCBnZXR0ZXh0IHdoYXQKKwkgICBlbmNvZGluZyBpdCBzaG91bGQgZW1pdCBpbiwgc28gaXQnbGwgbm93IHNheToKKworCSAgICAgICBCasOzIHRpbCB0w7NtYSBHaXQgbGluZCDDrSAvaGxhZ2gvLmdpdC8KKworCSAgIEFuZCB0aGUgZXF1aXZhbGVudCBJU08tODg1OS0xIHN0cmluZyB3aWxsIGJlIGVtaXR0ZWQgdW5kZXIgYQorCSAgIElTTy04ODU5LTEgbG9jYWxlLgorCisJICAgV2l0aCB0aGlzIGNoYW5nZSB3YXkgd2UgZ2V0IHRoZSBhZHZhbnRhZ2VzIG9mIHNldHRpbmcgTENfQ1RZUEUKKwkgICAodGFsayB0byB0aGUgdXNlciBpbiBoaXMgbGFuZ3VhZ2UvZW5jb2RpbmcpLCB3aXRob3V0IHRoZSBtYWpvcgorCSAgIGRyYXdiYWNrcyAoY2hhbmdlZCBzZW1hbnRpY3MgZm9yIEMgZnVuY3Rpb25zIHdlIHJlbHkgb24pLgorCisJICAgSG93ZXZlciBmb3JlaWduIGZ1bmN0aW9ucyB1c2luZyBvdGhlciBtZXNzYWdlIGNhdGFsb2dzIHRoYXQKKwkgICBhcmVuJ3QgdXNpbmcgb3VyIG5lYXQgdHJpY2sgd2lsbCBzdGlsbCBoYXZlIGEgcHJvYmxlbSwgZS5nLiBpZgorCSAgIHdlIGhhdmUgdG8gY2FsbCBwZXJyb3IoMyk6CisKKwkgICAjaW5jbHVkZSA8c3RkaW8uaD4KKwkgICAjaW5jbHVkZSA8bG9jYWxlLmg+CisJICAgI2luY2x1ZGUgPGVycm5vLmg+CisKKwkgICBpbnQgbWFpbih2b2lkKQorCSAgIHsKKwkJICAgc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJCSAgIHNldGxvY2FsZShMQ19DVFlQRSwgIkMiKTsKKwkJICAgZXJybm8gPSBFTk9ERVY7CisJCSAgIHBlcnJvcigidGVzdCIpOworCQkgICByZXR1cm4gMDsKKwkgICB9CisKKwkgICBSdW5uaW5nIHRoYXQgd2lsbCBnaXZlIHlvdSBhIG1lc3NhZ2Ugd2l0aCBxdWVzdGlvbiBtYXJrczoKKworCSAgICQgTEFOR1VBR0U9IExBTkc9ZGVfREUudXRmOCAuL3Rlc3QKKwkgICB0ZXN0OiBLZWluIHBhc3NlbmRlcyBHZXI/dCBnZWZ1bmRlbgorCisJICAgVGhlIHZzbnByaW50ZiBidWcgaGFzIGJlZW4gZml4ZWQgc2luY2UgZ2xpYmMgMi4xNy4KKworCSAgIFRoZW4gd2UgY291bGQgc2ltcGx5IHNldCBMQ19DVFlQRSBmcm9tIHRoZSBlbnZpcm9ubWVudCwgd2hpY2ggd291bGQKKwkgICBtYWtlIHRoaW5ncyBsaWtlIHRoZSBleHRlcm5hbCBwZXJyb3IoMykgbWVzc2FnZXMgd29yay4KKworCSAgIFNlZSB0L3QwMjAzLWdldHRleHQtc2V0bG9jYWxlLXNhbml0eS5zaCdzICJnZXR0ZXh0LmMiIHRlc3RzIGZvcgorCSAgIHJlZ3Jlc3Npb24gdGVzdHMuCisKKwkgICAxLiBodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTY1MzAKKwkgICAyLiBFLmcuICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIgaW4gcG8vaXMucG8KKwkqLworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWNoYXJzZXQgPSBsb2NhbGVfY2hhcnNldCgpOworCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KGRvbWFpbiwgY2hhcnNldCk7CisJLyogdGhlIHN0cmluZyBpcyB0YWtlbiBmcm9tIHYwLjk5LjZ+MSAqLworCWlmICh0ZXN0X3ZzbnByaW50ZigiJS4qcyIsIDEzLCAiRGF2aWRfS1wzNDVnZWRhbCIpIDwgMCkKKwkJc2V0bG9jYWxlKExDX0NUWVBFLCAiQyIpOworfQorCit2b2lkIGdpdF9zZXR1cF9nZXR0ZXh0KHZvaWQpCit7CisJY29uc3QgY2hhciAqcG9kaXIgPSBnZXRlbnYoR0lUX1RFWFRfRE9NQUlOX0RJUl9FTlZJUk9OTUVOVCk7CisJY2hhciAqcCA9IE5VTEw7CisKKwlpZiAoIXBvZGlyKQorCQlwb2RpciA9IHAgPSBzeXN0ZW1fcGF0aChHSVRfTE9DQUxFX1BBVEgpOworCisJdXNlX2dldHRleHRfcG9pc29uKCk7IC8qIGdldGVudigpIHJlZW50cmFuY3kgcGFyYW5vaWEgKi8KKworCWlmICghaXNfZGlyZWN0b3J5KHBvZGlyKSkgeworCQlmcmVlKHApOworCQlyZXR1cm47CisJfQorCisJYmluZHRleHRkb21haW4oImdpdCIsIHBvZGlyKTsKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfVElNRSwgIiIpOworCWluaXRfZ2V0dGV4dF9jaGFyc2V0KCJnaXQiKTsKKwl0ZXh0ZG9tYWluKCJnaXQiKTsKKworCWZyZWUocCk7Cit9CisKKy8qIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygc3RyaW5nICdzJyBpbiBjdXJyZW50IGxvY2FsZSAqLworaW50IGdldHRleHRfd2lkdGgoY29uc3QgY2hhciAqcykKK3sKKwlzdGF0aWMgaW50IGlzX3V0ZjggPSAtMTsKKwlpZiAoaXNfdXRmOCA9PSAtMSkKKwkJaXNfdXRmOCA9IGlzX3V0ZjhfbG9jYWxlKCk7CisKKwlyZXR1cm4gaXNfdXRmOCA/IHV0Zjhfc3Ryd2lkdGgocykgOiBzdHJsZW4ocyk7Cit9CisjZW5kaWYKKworaW50IGlzX3V0ZjhfbG9jYWxlKHZvaWQpCit7CisjaWZkZWYgTk9fR0VUVEVYVAorCWlmICghY2hhcnNldCkgeworCQljb25zdCBjaGFyICplbnYgPSBnZXRlbnYoIkxDX0FMTCIpOworCQlpZiAoIWVudiB8fCAhKmVudikKKwkJCWVudiA9IGdldGVudigiTENfQ1RZUEUiKTsKKwkJaWYgKCFlbnYgfHwgISplbnYpCisJCQllbnYgPSBnZXRlbnYoIkxBTkciKTsKKwkJaWYgKCFlbnYpCisJCQllbnYgPSAiIjsKKwkJaWYgKHN0cmNocihlbnYsICcuJykpCisJCQllbnYgPSBzdHJjaHIoZW52LCAnLicpICsgMTsKKwkJY2hhcnNldCA9IHhzdHJkdXAoZW52KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gaXNfZW5jb2RpbmdfdXRmOChjaGFyc2V0KTsKK30KZGlmZiAtLWdpdCBhL2dldHRleHQuaCBiL2dldHRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWU1MmViCi0tLSAvZGV2L251bGwKKysrIGIvZ2V0dGV4dC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorICoKKyAqIFRoaXMgaXMgYSBza2VsZXRvbiBuby1vcCBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0IGZvciBHaXQuCisgKiBZb3UgY2FuIHJlcGxhY2UgaXQgd2l0aCBzb21ldGhpbmcgdGhhdCB1c2VzIGxpYmludGwuaCBhbmQgd3JhcHMKKyAqIGdldHRleHQoKSB0byB0cnkgb3V0IHRoZSB0cmFuc2xhdGlvbnMuCisgKi8KKworI2lmbmRlZiBHRVRURVhUX0gKKyNkZWZpbmUgR0VUVEVYVF9ICisKKyNpZiBkZWZpbmVkKF8pIHx8IGRlZmluZWQoUV8pCisjZXJyb3IgIm5hbWVzcGFjZSBjb25mbGljdDogJ18nIG9yICdRXycgaXMgcHJlLWRlZmluZWQ/IgorI2VuZGlmCisKKyNpZm5kZWYgTk9fR0VUVEVYVAorIwlpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorIwlpZmRlZiBnZXR0ZXh0CisjCQl1bmRlZiBnZXR0ZXh0CisjCWVuZGlmCisjCWRlZmluZSBnZXR0ZXh0KHMpIChzKQorIwlpZmRlZiBuZ2V0dGV4dAorIwkJdW5kZWYgbmdldHRleHQKKyMJZW5kaWYKKyMJZGVmaW5lIG5nZXR0ZXh0KHMsIHAsIG4pICgobiA9PSAxKSA/IChzKSA6IChwKSkKKyNlbmRpZgorCisjZGVmaW5lIEZPUk1BVF9QUkVTRVJWSU5HKG4pIF9fYXR0cmlidXRlX18oKGZvcm1hdF9hcmcobikpKQorCitpbnQgdXNlX2dldHRleHRfcG9pc29uKHZvaWQpOworCisjaWZuZGVmIE5PX0dFVFRFWFQKK3ZvaWQgZ2l0X3NldHVwX2dldHRleHQodm9pZCk7CitpbnQgZ2V0dGV4dF93aWR0aChjb25zdCBjaGFyICpzKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZ2l0X3NldHVwX2dldHRleHQodm9pZCkKK3sKKwl1c2VfZ2V0dGV4dF9wb2lzb24oKTsgLyogZ2V0ZW52KCkgcmVlbnRyYW5jeSBwYXJhbm9pYSAqLworfQorc3RhdGljIGlubGluZSBpbnQgZ2V0dGV4dF93aWR0aChjb25zdCBjaGFyICpzKQoreworCXJldHVybiBzdHJsZW4ocyk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBGT1JNQVRfUFJFU0VSVklORygxKSBjb25zdCBjaGFyICpfKGNvbnN0IGNoYXIgKm1zZ2lkKQoreworCWlmICghKm1zZ2lkKQorCQlyZXR1cm4gIiI7CisJcmV0dXJuIHVzZV9nZXR0ZXh0X3BvaXNvbigpID8gIiMgR0VUVEVYVCBQT0lTT04gIyIgOiBnZXR0ZXh0KG1zZ2lkKTsKK30KKworc3RhdGljIGlubGluZSBGT1JNQVRfUFJFU0VSVklORygxKSBGT1JNQVRfUFJFU0VSVklORygyKQorY29uc3QgY2hhciAqUV8oY29uc3QgY2hhciAqbXNnaWQsIGNvbnN0IGNoYXIgKnBsdSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmICh1c2VfZ2V0dGV4dF9wb2lzb24oKSkKKwkJcmV0dXJuICIjIEdFVFRFWFQgUE9JU09OICMiOworCXJldHVybiBuZ2V0dGV4dChtc2dpZCwgcGx1LCBuKTsKK30KKworLyogTWFyayBtc2dpZCBmb3IgdHJhbnNsYXRpb24gYnV0IGRvIG5vdCB0cmFuc2xhdGUgaXQuICovCisjaWYgIVVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTgorI2RlZmluZSBOXyhtc2dpZCkgbXNnaWQKKyNlbHNlCisvKgorICogU3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgd2lsbCBsZWFkIHRvIGludmFsaWQgQyB3aGVuCisgKiB1c2VkIHRoaXMgd2F5OgorICoJc3RhdGljIGNvbnN0IGNoYXIgc1tdID0gTl8oIkZPTyIpOworICogd2hpY2ggd2lsbCBleHBhbmQgdG8KKyAqCXN0YXRpYyBjb25zdCBjaGFyIHNbXSA9ICgiRk9PIik7CisgKiBhbmQgaW4gdmFsaWQgQywgdGhlIGluaXRpYWxpemVyIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgbXVzdAorICogYmUgd2l0aG91dCB0aGUgcGFyZW50aGVzZXMuICBCdXQgbWFueSBjb21waWxlcnMgZG8gYWNjZXB0IGl0CisgKiBhcyBhIGxhbmd1YWdlIGV4dGVuc2lvbiBhbmQgaXQgd2lsbCBhbGxvdyB1cyB0byBjYXRjaCBtaXN0YWtlcworICogbGlrZToKKyAqCXN0YXRpYyBjb25zdCBjaGFyICptc2dzW10gPSB7CisgKgkJTl8oIm9uZSIpCisgKgkJTl8oInR3byIpLAorICoJCU5fKCJ0aHJlZSIpLAorICoJCU5VTEwKKyAqCX07CisgKiAobm90aWNlIHRoZSBtaXNzaW5nIGNvbW1hIG9uIG9uZSBvZiB0aGUgbGluZXMpIGJ5IGZvcmNpbmcKKyAqIGEgY29tcGlsYXRpb24gZXJyb3IsIGJlY2F1c2UgcGFyZW50aGVzaXNlZCAoIm9uZSIpICgidHdvIikKKyAqIHdpbGwgbm90IGdldCBzaWxlbnRseSB0dXJuZWQgaW50byAoIm9uZXR3byIpLgorICovCisjZGVmaW5lIE5fKG1zZ2lkKSAobXNnaWQpCisjZW5kaWYKKworY29uc3QgY2hhciAqZ2V0X3ByZWZlcnJlZF9sYW5ndWFnZXModm9pZCk7CitpbnQgaXNfdXRmOF9sb2NhbGUodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybCBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTBmZDMwYQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKQEAgLTAsMCArMSwxODczIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHaXQgcXcodW5xdW90ZV9wYXRoKTsKK3VzZSBHaXQ6OkkxOE47CisKK2Jpbm1vZGUoU1RET1VULCAiOnJhdyIpOworCitteSAkcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSgpOworCitteSAkbWVudV91c2VfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yYm9vbCgnY29sb3IuaW50ZXJhY3RpdmUnKTsKK215ICgkcHJvbXB0X2NvbG9yLCAkaGVhZGVyX2NvbG9yLCAkaGVscF9jb2xvcikgPQorCSRtZW51X3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuaW50ZXJhY3RpdmUucHJvbXB0JywgJ2JvbGQgYmx1ZScpLAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWFkZXInLCAnYm9sZCcpLAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWxwJywgJ3JlZCBib2xkJyksCisJKSA6ICgpOworbXkgJGVycm9yX2NvbG9yID0gKCk7CitpZiAoJG1lbnVfdXNlX2NvbG9yKSB7CisJbXkgJGhlbHBfY29sb3Jfc3BlYyA9ICgkcmVwby0+Y29uZmlnKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWxwJykgb3IKKwkJCQkncmVkIGJvbGQnKTsKKwkkZXJyb3JfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5lcnJvcicsCisJCQkJCSRoZWxwX2NvbG9yX3NwZWMpOworfQorCitteSAkZGlmZl91c2VfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yYm9vbCgnY29sb3IuZGlmZicpOworbXkgKCRmcmFnaW5mb19jb2xvcikgPQorCSRkaWZmX3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuZGlmZi5mcmFnJywgJ2N5YW4nKSwKKwkpIDogKCk7CitteSAoJGRpZmZfcGxhaW5fY29sb3IpID0KKwkkZGlmZl91c2VfY29sb3IgPyAoCisJCSRyZXBvLT5nZXRfY29sb3IoJ2NvbG9yLmRpZmYucGxhaW4nLCAnJyksCisJKSA6ICgpOworbXkgKCRkaWZmX29sZF9jb2xvcikgPQorCSRkaWZmX3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuZGlmZi5vbGQnLCAncmVkJyksCisJKSA6ICgpOworbXkgKCRkaWZmX25ld19jb2xvcikgPQorCSRkaWZmX3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuZGlmZi5uZXcnLCAnZ3JlZW4nKSwKKwkpIDogKCk7CisKK215ICRub3JtYWxfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yKCIiLCAicmVzZXQiKTsKKworbXkgJGRpZmZfYWxnb3JpdGhtID0gJHJlcG8tPmNvbmZpZygnZGlmZi5hbGdvcml0aG0nKTsKK215ICRkaWZmX2ZpbHRlciA9ICRyZXBvLT5jb25maWcoJ2ludGVyYWN0aXZlLmRpZmZmaWx0ZXInKTsKKworbXkgJHVzZV9yZWFka2V5ID0gMDsKK215ICR1c2VfdGVybWNhcCA9IDA7CitteSAldGVybV9lc2NhcGVzOworCitzdWIgUmVhZE1vZGU7CitzdWIgUmVhZEtleTsKK2lmICgkcmVwby0+Y29uZmlnX2Jvb2woImludGVyYWN0aXZlLnNpbmdsZWtleSIpKSB7CisJZXZhbCB7CisJCXJlcXVpcmUgVGVybTo6UmVhZEtleTsKKwkJVGVybTo6UmVhZEtleS0+aW1wb3J0OworCQkkdXNlX3JlYWRrZXkgPSAxOworCX07CisJaWYgKCEkdXNlX3JlYWRrZXkpIHsKKwkJcHJpbnQgU1RERVJSICJtaXNzaW5nIFRlcm06OlJlYWRLZXksIGRpc2FibGluZyBpbnRlcmFjdGl2ZS5zaW5nbGVrZXlcbiI7CisJfQorCWV2YWwgeworCQlyZXF1aXJlIFRlcm06OkNhcDsKKwkJbXkgJHRlcm1jYXAgPSBUZXJtOjpDYXAtPlRnZXRlbnQ7CisJCWZvcmVhY2ggKHZhbHVlcyAlJHRlcm1jYXApIHsKKwkJCSR0ZXJtX2VzY2FwZXN7JF99ID0gMSBpZiAvXlxlLzsKKwkJfQorCQkkdXNlX3Rlcm1jYXAgPSAxOworCX07Cit9CisKK3N1YiBjb2xvcmVkIHsKKwlteSAkY29sb3IgPSBzaGlmdDsKKwlteSAkc3RyaW5nID0gam9pbigiIiwgQF8pOworCisJaWYgKGRlZmluZWQgJGNvbG9yKSB7CisJCSMgUHV0IGEgY29sb3IgY29kZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZSwgYSByZXNldCBhdCB0aGUgZW5kCisJCSMgY29sb3IgYWZ0ZXIgbmV3bGluZXMgdGhhdCBhcmUgbm90IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZworCQkkc3RyaW5nID1+IHMvKFxuKykoLikvJDEkY29sb3IkMi9nOworCQkjIHJlc2V0IGJlZm9yZSBuZXdsaW5lcworCQkkc3RyaW5nID1+IHMvKFxuKykvJG5vcm1hbF9jb2xvciQxL2c7CisJCSMgY29kZXMgYXQgYmVnaW5uaW5nIGFuZCBlbmQgKGlmIG5lY2Vzc2FyeSk6CisJCSRzdHJpbmcgPX4gcy9eLyRjb2xvci87CisJCSRzdHJpbmcgPX4gcy8kLyRub3JtYWxfY29sb3IvIHVubGVzcyAkc3RyaW5nID1+IC9cbiQvOworCX0KKwlyZXR1cm4gJHN0cmluZzsKK30KKworIyBjb21tYW5kIGxpbmUgb3B0aW9ucworbXkgJHBhdGNoX21vZGVfb25seTsKK215ICRwYXRjaF9tb2RlOworbXkgJHBhdGNoX21vZGVfcmV2aXNpb247CisKK3N1YiBhcHBseV9wYXRjaDsKK3N1YiBhcHBseV9wYXRjaF9mb3JfY2hlY2tvdXRfY29tbWl0Oworc3ViIGFwcGx5X3BhdGNoX2Zvcl9zdGFzaDsKKworbXkgJXBhdGNoX21vZGVzID0gKAorCSdzdGFnZScgPT4geworCQlESUZGID0+ICdkaWZmLWZpbGVzIC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC0tY2FjaGVkJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtLWNhY2hlZCcsCisJCUZJTFRFUiA9PiAnZmlsZS1vbmx5JywKKwkJSVNfUkVWRVJTRSA9PiAwLAorCX0sCisJJ3N0YXNoJyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtaW5kZXggLXAgSEVBRCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtLWNhY2hlZCcsIEBfOyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLS1jYWNoZWQnLAorCQlGSUxURVIgPT4gdW5kZWYsCisJCUlTX1JFVkVSU0UgPT4gMCwKKwl9LAorCSdyZXNldF9oZWFkJyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtaW5kZXggLXAgLS1jYWNoZWQnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaCAnYXBwbHkgLVIgLS1jYWNoZWQnLCBAXzsgfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC1SIC0tY2FjaGVkJywKKwkJRklMVEVSID0+ICdpbmRleC1vbmx5JywKKwkJSVNfUkVWRVJTRSA9PiAxLAorCX0sCisJJ3Jlc2V0X25vdGhlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtUiAtcCAtLWNhY2hlZCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtLWNhY2hlZCcsIEBfOyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLS1jYWNoZWQnLAorCQlGSUxURVIgPT4gJ2luZGV4LW9ubHknLAorCQlJU19SRVZFUlNFID0+IDAsCisJfSwKKwknY2hlY2tvdXRfaW5kZXgnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1maWxlcyAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtUicsIEBfOyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLVInLAorCQlGSUxURVIgPT4gJ2ZpbGUtb25seScsCisJCUlTX1JFVkVSU0UgPT4gMSwKKwl9LAorCSdjaGVja291dF9oZWFkJyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtaW5kZXggLXAnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaF9mb3JfY2hlY2tvdXRfY29tbWl0ICctUicsIEBfIH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtUicsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwkJSVNfUkVWRVJTRSA9PiAxLAorCX0sCisJJ2NoZWNrb3V0X25vdGhlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtUiAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQgJycsIEBfIH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseScsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwkJSVNfUkVWRVJTRSA9PiAwLAorCX0sCisJJ3dvcmt0cmVlX2hlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseSAtUicsIEBfIH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtUicsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwkJSVNfUkVWRVJTRSA9PiAxLAorCX0sCisJJ3dvcmt0cmVlX25vdGhlYWQnID0+IHsKKwkJRElGRiA9PiAnZGlmZi1pbmRleCAtUiAtcCcsCisJCUFQUExZID0+IHN1YiB7IGFwcGx5X3BhdGNoICdhcHBseScsIEBfIH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseScsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwkJSVNfUkVWRVJTRSA9PiAwLAorCX0sCispOworCiskcGF0Y2hfbW9kZSA9ICdzdGFnZSc7CitteSAlcGF0Y2hfbW9kZV9mbGF2b3VyID0gJXskcGF0Y2hfbW9kZXN7JHBhdGNoX21vZGV9fTsKKworc3ViIHJ1bl9jbWRfcGlwZSB7CisJaWYgKCReTyBlcSAnTVNXaW4zMicpIHsKKwkJbXkgQGludmFsaWQgPSBncmVwIHttL1siOipdL30gQF87CisJCWRpZSAiJF5PIGRvZXMgbm90IHN1cHBvcnQ6IEBpbnZhbGlkXG4iIGlmIEBpbnZhbGlkOworCQlteSBAYXJncyA9IG1hcCB7IG0vIC9vID8gIlwiJF9cIiI6ICRfIH0gQF87CisJCXJldHVybiBxeHtAYXJnc307CisJfSBlbHNlIHsKKwkJbXkgJGZoID0gdW5kZWY7CisJCW9wZW4oJGZoLCAnLXwnLCBAXykgb3IgZGllOworCQlteSBAb3V0ID0gPCRmaD47CisJCWNsb3NlICRmaCB8fCBkaWUgIkNhbm5vdCBjbG9zZSBAXyAoJCEpIjsKKwkJcmV0dXJuIEBvdXQ7CisJfQorfQorCitteSAoJEdJVF9ESVIpID0gcnVuX2NtZF9waXBlKHF3KGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSk7CisKK2lmICghZGVmaW5lZCAkR0lUX0RJUikgeworCWV4aXQoMSk7ICMgcmV2LXBhcnNlIHdvdWxkIGhhdmUgYWxyZWFkeSBzYWlkICJub3QgYSBnaXQgcmVwbyIKK30KK2Nob21wKCRHSVRfRElSKTsKKworc3ViIHJlZnJlc2ggeworCW15ICRmaDsKKwlvcGVuICRmaCwgJ2dpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIHwnCisJICAgIG9yIGRpZTsKKwl3aGlsZSAoPCRmaD4pIHsKKwkJOyMgaWdub3JlICduZWVkcyB1cGRhdGUnCisJfQorCWNsb3NlICRmaDsKK30KKworc3ViIGxpc3RfdW50cmFja2VkIHsKKwltYXAgeworCQljaG9tcCAkXzsKKwkJdW5xdW90ZV9wYXRoKCRfKTsKKwl9CisJcnVuX2NtZF9waXBlKHF3KGdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQgLS0pLCBAQVJHVik7Cit9CisKKyMgVFJBTlNMQVRPUlM6IHlvdSBjYW4gYWRqdXN0IHRoaXMgdG8gYWxpZ24gImdpdCBhZGQgLWkiIHN0YXR1cyBtZW51CitteSAkc3RhdHVzX2ZtdCA9IF9fKCclMTJzICUxMnMgJXMnKTsKK215ICRzdGF0dXNfaGVhZCA9IHNwcmludGYoJHN0YXR1c19mbXQsIF9fKCdzdGFnZWQnKSwgX18oJ3Vuc3RhZ2VkJyksIF9fKCdwYXRoJykpOworCit7CisJbXkgJGluaXRpYWw7CisJc3ViIGlzX2luaXRpYWxfY29tbWl0IHsKKwkJJGluaXRpYWwgPSBzeXN0ZW0oJ2dpdCByZXYtcGFyc2UgSEVBRCAtLSA+L2Rldi9udWxsIDI+JjEnKSAhPSAwCisJCQl1bmxlc3MgZGVmaW5lZCAkaW5pdGlhbDsKKwkJcmV0dXJuICRpbml0aWFsOworCX0KK30KKworeworCW15ICRlbXB0eV90cmVlOworCXN1YiBnZXRfZW1wdHlfdHJlZSB7CisJCXJldHVybiAkZW1wdHlfdHJlZSBpZiBkZWZpbmVkICRlbXB0eV90cmVlOworCisJCSgkZW1wdHlfdHJlZSkgPSBydW5fY21kX3BpcGUocXcoZ2l0IGhhc2gtb2JqZWN0IC10IHRyZWUgL2Rldi9udWxsKSk7CisJCWNob21wICRlbXB0eV90cmVlOworCQlyZXR1cm4gJGVtcHR5X3RyZWU7CisJfQorfQorCitzdWIgZ2V0X2RpZmZfcmVmZXJlbmNlIHsKKwlteSAkcmVmID0gc2hpZnQ7CisJaWYgKGRlZmluZWQgJHJlZiBhbmQgJHJlZiBuZSAnSEVBRCcpIHsKKwkJcmV0dXJuICRyZWY7CisJfSBlbHNpZiAoaXNfaW5pdGlhbF9jb21taXQoKSkgeworCQlyZXR1cm4gZ2V0X2VtcHR5X3RyZWUoKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gJ0hFQUQnOworCX0KK30KKworIyBSZXR1cm5zIGxpc3Qgb2YgaGFzaGVzLCBjb250ZW50cyBvZiBlYWNoIG9mIHdoaWNoIGFyZToKKyMgVkFMVUU6CXBhdGhuYW1lCisjIEJJTkFSWToJaXMgYSBiaW5hcnkgcGF0aAorIyBJTkRFWDoJaXMgaW5kZXggZGlmZmVyZW50IGZyb20gSEVBRD8KKyMgRklMRToJCWlzIGZpbGUgZGlmZmVyZW50IGZyb20gaW5kZXg/CisjIElOREVYX0FERERFTDoJaXMgaXQgYWRkL2RlbGV0ZSBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4PworIyBGSUxFX0FERERFTDoJaXMgaXQgYWRkL2RlbGV0ZSBiZXR3ZWVuIGluZGV4IGFuZCBmaWxlPworIyBVTk1FUkdFRDoJaXMgdGhlIHBhdGggdW5tZXJnZWQKKworc3ViIGxpc3RfbW9kaWZpZWQgeworCW15ICgkb25seSkgPSBAXzsKKwlteSAoJWRhdGEsIEByZXR1cm4pOworCW15ICgkYWRkLCAkZGVsLCAkYWRkZGVsLCAkZmlsZSk7CisKKwlteSAkcmVmZXJlbmNlID0gZ2V0X2RpZmZfcmVmZXJlbmNlKCRwYXRjaF9tb2RlX3JldmlzaW9uKTsKKwlmb3IgKHJ1bl9jbWRfcGlwZShxdyhnaXQgZGlmZi1pbmRleCAtLWNhY2hlZAorCQkJICAgICAtLW51bXN0YXQgLS1zdW1tYXJ5KSwgJHJlZmVyZW5jZSwKKwkJCSAgICAgJy0tJywgQEFSR1YpKSB7CisJCWlmICgoJGFkZCwgJGRlbCwgJGZpbGUpID0KKwkJICAgIC9eKFstXGRdKykJKFstXGRdKykJKC4qKS8pIHsKKwkJCW15ICgkY2hhbmdlLCAkYmluKTsKKwkJCSRmaWxlID0gdW5xdW90ZV9wYXRoKCRmaWxlKTsKKwkJCWlmICgkYWRkIGVxICctJyAmJiAkZGVsIGVxICctJykgeworCQkJCSRjaGFuZ2UgPSBfXygnYmluYXJ5Jyk7CisJCQkJJGJpbiA9IDE7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkY2hhbmdlID0gIiskYWRkLy0kZGVsIjsKKwkJCX0KKwkJCSRkYXRheyRmaWxlfSA9IHsKKwkJCQlJTkRFWCA9PiAkY2hhbmdlLAorCQkJCUJJTkFSWSA9PiAkYmluLAorCQkJCUZJTEUgPT4gX18oJ25vdGhpbmcnKSwKKwkJCX0KKwkJfQorCQllbHNpZiAoKCRhZGRkZWwsICRmaWxlKSA9CisJCSAgICAgICAvXiAoY3JlYXRlfGRlbGV0ZSkgbW9kZSBbMC03XSsgKC4qKSQvKSB7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkZmlsZSk7CisJCQkkZGF0YXskZmlsZX17SU5ERVhfQUREREVMfSA9ICRhZGRkZWw7CisJCX0KKwl9CisKKwlmb3IgKHJ1bl9jbWRfcGlwZShxdyhnaXQgZGlmZi1maWxlcyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tbnVtc3RhdCAtLXN1bW1hcnkgLS1yYXcgLS0pLCBAQVJHVikpIHsKKwkJaWYgKCgkYWRkLCAkZGVsLCAkZmlsZSkgPQorCQkgICAgL14oWy1cZF0rKQkoWy1cZF0rKQkoLiopLykgeworCQkJJGZpbGUgPSB1bnF1b3RlX3BhdGgoJGZpbGUpOworCQkJbXkgKCRjaGFuZ2UsICRiaW4pOworCQkJaWYgKCRhZGQgZXEgJy0nICYmICRkZWwgZXEgJy0nKSB7CisJCQkJJGNoYW5nZSA9IF9fKCdiaW5hcnknKTsKKwkJCQkkYmluID0gMTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSRjaGFuZ2UgPSAiKyRhZGQvLSRkZWwiOworCQkJfQorCQkJJGRhdGF7JGZpbGV9e0ZJTEV9ID0gJGNoYW5nZTsKKwkJCWlmICgkYmluKSB7CisJCQkJJGRhdGF7JGZpbGV9e0JJTkFSWX0gPSAxOworCQkJfQorCQl9CisJCWVsc2lmICgoJGFkZGRlbCwgJGZpbGUpID0KKwkJICAgICAgIC9eIChjcmVhdGV8ZGVsZXRlKSBtb2RlIFswLTddKyAoLiopJC8pIHsKKwkJCSRmaWxlID0gdW5xdW90ZV9wYXRoKCRmaWxlKTsKKwkJCSRkYXRheyRmaWxlfXtGSUxFX0FERERFTH0gPSAkYWRkZGVsOworCQl9CisJCWVsc2lmICgvXjpbMC03XSsgWzAtN10rIFswLTlhLWZdKyBbMC05YS1mXSsgKC4pCSguKikkLykgeworCQkJJGZpbGUgPSB1bnF1b3RlX3BhdGgoJDIpOworCQkJaWYgKCFleGlzdHMgJGRhdGF7JGZpbGV9KSB7CisJCQkJJGRhdGF7JGZpbGV9ID0gK3sKKwkJCQkJSU5ERVggPT4gX18oJ3VuY2hhbmdlZCcpLAorCQkJCQlCSU5BUlkgPT4gMCwKKwkJCQl9OworCQkJfQorCQkJaWYgKCQxIGVxICdVJykgeworCQkJCSRkYXRheyRmaWxlfXtVTk1FUkdFRH0gPSAxOworCQkJfQorCQl9CisJfQorCisJZm9yIChzb3J0IGtleXMgJWRhdGEpIHsKKwkJbXkgJGl0ID0gJGRhdGF7JF99OworCisJCWlmICgkb25seSkgeworCQkJaWYgKCRvbmx5IGVxICdpbmRleC1vbmx5JykgeworCQkJCW5leHQgaWYgKCRpdC0+e0lOREVYfSBlcSBfXygndW5jaGFuZ2VkJykpOworCQkJfQorCQkJaWYgKCRvbmx5IGVxICdmaWxlLW9ubHknKSB7CisJCQkJbmV4dCBpZiAoJGl0LT57RklMRX0gZXEgX18oJ25vdGhpbmcnKSk7CisJCQl9CisJCX0KKwkJcHVzaCBAcmV0dXJuLCAreworCQkJVkFMVUUgPT4gJF8sCisJCQklJGl0LAorCQl9OworCX0KKwlyZXR1cm4gQHJldHVybjsKK30KKworc3ViIGZpbmRfdW5pcXVlIHsKKwlteSAoJHN0cmluZywgQHN0dWZmKSA9IEBfOworCW15ICRmb3VuZCA9IHVuZGVmOworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBzdHVmZjsgJGkrKykgeworCQlteSAkaXQgPSAkc3R1ZmZbJGldOworCQlteSAkaGl0ID0gdW5kZWY7CisJCWlmIChyZWYgJGl0KSB7CisJCQlpZiAoKHJlZiAkaXQpIGVxICdBUlJBWScpIHsKKwkJCQkkaXQgPSAkaXQtPlswXTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSRpdCA9ICRpdC0+e1ZBTFVFfTsKKwkJCX0KKwkJfQorCQlldmFsIHsKKwkJCWlmICgkaXQgPX4gL14kc3RyaW5nLykgeworCQkJCSRoaXQgPSAxOworCQkJfTsKKwkJfTsKKwkJaWYgKGRlZmluZWQgJGhpdCAmJiBkZWZpbmVkICRmb3VuZCkgeworCQkJcmV0dXJuIHVuZGVmOworCQl9CisJCWlmICgkaGl0KSB7CisJCQkkZm91bmQgPSAkaSArIDE7CisJCX0KKwl9CisJcmV0dXJuICRmb3VuZDsKK30KKworIyBpbnNlcnRzIHN0cmluZyBpbnRvIHRyaWUgYW5kIHVwZGF0ZXMgY291bnQgZm9yIGVhY2ggY2hhcmFjdGVyCitzdWIgdXBkYXRlX3RyaWUgeworCW15ICgkdHJpZSwgJHN0cmluZykgPSBAXzsKKwlmb3JlYWNoIChzcGxpdCAvLywgJHN0cmluZykgeworCQkkdHJpZSA9ICR0cmllLT57JF99IHx8PSB7Q09VTlQgPT4gMH07CisJCSR0cmllLT57Q09VTlR9Kys7CisJfQorfQorCisjIHJldHVybnMgYW4gYXJyYXkgb2YgdHVwbGVzIChwcmVmaXgsIHJlbWFpbmRlcikKK3N1YiBmaW5kX3VuaXF1ZV9wcmVmaXhlcyB7CisJbXkgQHN0dWZmID0gQF87CisJbXkgQHJldHVybiA9ICgpOworCisJIyBhbnkgc2luZ2xlIHByZWZpeCBleGNlZWRpbmcgdGhlIHNvZnQgbGltaXQgaXMgb21pdHRlZAorCSMgaWYgYW55IHByZWZpeCBleGNlZWRzIHRoZSBoYXJkIGxpbWl0IGFsbCBhcmUgb21pdHRlZAorCSMgMCBpbmRpY2F0ZXMgbm8gbGltaXQKKwlteSAkc29mdF9saW1pdCA9IDA7CisJbXkgJGhhcmRfbGltaXQgPSAzOworCisJIyBidWlsZCBhIHRyaWUgbW9kZWxsaW5nIGFsbCBwb3NzaWJsZSBvcHRpb25zCisJbXkgJXRyaWU7CisJZm9yZWFjaCBteSAkcHJpbnQgKEBzdHVmZikgeworCQlpZiAoKHJlZiAkcHJpbnQpIGVxICdBUlJBWScpIHsKKwkJCSRwcmludCA9ICRwcmludC0+WzBdOworCQl9CisJCWVsc2lmICgocmVmICRwcmludCkgZXEgJ0hBU0gnKSB7CisJCQkkcHJpbnQgPSAkcHJpbnQtPntWQUxVRX07CisJCX0KKwkJdXBkYXRlX3RyaWUoXCV0cmllLCAkcHJpbnQpOworCQlwdXNoIEByZXR1cm4sICRwcmludDsKKwl9CisKKwkjIHVzZSB0aGUgdHJpZSB0byBmaW5kIHRoZSB1bmlxdWUgcHJlZml4ZXMKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAcmV0dXJuOyAkaSsrKSB7CisJCW15ICRyZXQgPSAkcmV0dXJuWyRpXTsKKwkJbXkgQGxldHRlcnMgPSBzcGxpdCAvLywgJHJldDsKKwkJbXkgJXNlYXJjaCA9ICV0cmllOworCQlteSAoJHByZWZpeCwgJHJlbWFpbmRlcik7CisJCW15ICRqOworCQlmb3IgKCRqID0gMDsgJGogPCBAbGV0dGVyczsgJGorKykgeworCQkJbXkgJGxldHRlciA9ICRsZXR0ZXJzWyRqXTsKKwkJCWlmICgkc2VhcmNoeyRsZXR0ZXJ9e0NPVU5UfSA9PSAxKSB7CisJCQkJJHByZWZpeCA9IHN1YnN0ciAkcmV0LCAwLCAkaiArIDE7CisJCQkJJHJlbWFpbmRlciA9IHN1YnN0ciAkcmV0LCAkaiArIDE7CisJCQkJbGFzdDsKKwkJCX0KKwkJCWVsc2UgeworCQkJCW15ICRwcmVmaXggPSBzdWJzdHIgJHJldCwgMCwgJGo7CisJCQkJcmV0dXJuICgpCisJCQkJICAgIGlmICgkaGFyZF9saW1pdCAmJiAkaiArIDEgPiAkaGFyZF9saW1pdCk7CisJCQl9CisJCQklc2VhcmNoID0gJXskc2VhcmNoeyRsZXR0ZXJ9fTsKKwkJfQorCQlpZiAob3JkKCRsZXR0ZXJzWzBdKSA+IDEyNyB8fAorCQkgICAgKCRzb2Z0X2xpbWl0ICYmICRqICsgMSA+ICRzb2Z0X2xpbWl0KSkgeworCQkJJHByZWZpeCA9IHVuZGVmOworCQkJJHJlbWFpbmRlciA9ICRyZXQ7CisJCX0KKwkJJHJldHVyblskaV0gPSBbJHByZWZpeCwgJHJlbWFpbmRlcl07CisJfQorCXJldHVybiBAcmV0dXJuOworfQorCisjIGZpbHRlcnMgb3V0IHByZWZpeGVzIHdoaWNoIGhhdmUgc3BlY2lhbCBtZWFuaW5nIHRvIGxpc3RfYW5kX2Nob29zZSgpCitzdWIgaXNfdmFsaWRfcHJlZml4IHsKKwlteSAkcHJlZml4ID0gc2hpZnQ7CisJcmV0dXJuIChkZWZpbmVkICRwcmVmaXgpICYmCisJICAgICEoJHByZWZpeCA9fiAvW1xzLF0vKSAmJiAjIHNlcGFyYXRvcnMKKwkgICAgISgkcHJlZml4ID1+IC9eLS8pICYmICAgICMgZGVzZWxlY3Rpb24KKwkgICAgISgkcHJlZml4ID1+IC9eXGQrLykgJiYgICMgc2VsZWN0aW9uCisJICAgICgkcHJlZml4IG5lICcqJykgJiYgICAgICAjICJhbGwiIHdpbGRjYXJkCisJICAgICgkcHJlZml4IG5lICc/Jyk7ICAgICAgICAjIHByb21wdCBoZWxwCit9CisKKyMgZ2l2ZW4gYSBwcmVmaXgvcmVtYWluZGVyIHR1cGxlIHJldHVybiBhIHN0cmluZyB3aXRoIHRoZSBwcmVmaXggaGlnaGxpZ2h0ZWQKKyMgZm9yIG5vdyB1c2Ugc3F1YXJlIGJyYWNrZXRzOyBsYXRlciBtaWdodCB1c2UgQU5TSSBjb2xvcnMgKHVuZGVybGluZSwgYm9sZCkKK3N1YiBoaWdobGlnaHRfcHJlZml4IHsKKwlteSAkcHJlZml4ID0gc2hpZnQ7CisJbXkgJHJlbWFpbmRlciA9IHNoaWZ0OworCisJaWYgKCFkZWZpbmVkICRwcmVmaXgpIHsKKwkJcmV0dXJuICRyZW1haW5kZXI7CisJfQorCisJaWYgKCFpc192YWxpZF9wcmVmaXgoJHByZWZpeCkpIHsKKwkJcmV0dXJuICIkcHJlZml4JHJlbWFpbmRlciI7CisJfQorCisJaWYgKCEkbWVudV91c2VfY29sb3IpIHsKKwkJcmV0dXJuICJbJHByZWZpeF0kcmVtYWluZGVyIjsKKwl9CisKKwlyZXR1cm4gIiRwcm9tcHRfY29sb3IkcHJlZml4JG5vcm1hbF9jb2xvciRyZW1haW5kZXIiOworfQorCitzdWIgZXJyb3JfbXNnIHsKKwlwcmludCBTVERFUlIgY29sb3JlZCAkZXJyb3JfY29sb3IsIEBfOworfQorCitzdWIgbGlzdF9hbmRfY2hvb3NlIHsKKwlteSAoJG9wdHMsIEBzdHVmZikgPSBAXzsKKwlteSAoQGNob3NlbiwgQHJldHVybik7CisJaWYgKCFAc3R1ZmYpIHsKKwkgICAgcmV0dXJuIEByZXR1cm47CisJfQorCW15ICRpOworCW15IEBwcmVmaXhlcyA9IGZpbmRfdW5pcXVlX3ByZWZpeGVzKEBzdHVmZikgdW5sZXNzICRvcHRzLT57TElTVF9PTkxZfTsKKworICAgICAgVE9QTE9PUDoKKwl3aGlsZSAoMSkgeworCQlteSAkbGFzdF9sZiA9IDA7CisKKwkJaWYgKCRvcHRzLT57SEVBREVSfSkgeworCQkJaWYgKCEkb3B0cy0+e0xJU1RfRkxBVH0pIHsKKwkJCQlwcmludCAiICAgICAiOworCQkJfQorCQkJcHJpbnQgY29sb3JlZCAkaGVhZGVyX2NvbG9yLCAiJG9wdHMtPntIRUFERVJ9XG4iOworCQl9CisJCWZvciAoJGkgPSAwOyAkaSA8IEBzdHVmZjsgJGkrKykgeworCQkJbXkgJGNob3NlbiA9ICRjaG9zZW5bJGldID8gJyonIDogJyAnOworCQkJbXkgJHByaW50ID0gJHN0dWZmWyRpXTsKKwkJCW15ICRyZWYgPSByZWYgJHByaW50OworCQkJbXkgJGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0X3ByZWZpeChAeyRwcmVmaXhlc1skaV19KQorCQkJICAgIGlmIEBwcmVmaXhlczsKKwkJCWlmICgkcmVmIGVxICdBUlJBWScpIHsKKwkJCQkkcHJpbnQgPSAkaGlnaGxpZ2h0ZWQgfHwgJHByaW50LT5bMF07CisJCQl9CisJCQllbHNpZiAoJHJlZiBlcSAnSEFTSCcpIHsKKwkJCQlteSAkdmFsdWUgPSAkaGlnaGxpZ2h0ZWQgfHwgJHByaW50LT57VkFMVUV9OworCQkJCSRwcmludCA9IHNwcmludGYoJHN0YXR1c19mbXQsCisJCQkJICAgICRwcmludC0+e0lOREVYfSwKKwkJCQkgICAgJHByaW50LT57RklMRX0sCisJCQkJICAgICR2YWx1ZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkcHJpbnQgPSAkaGlnaGxpZ2h0ZWQgfHwgJHByaW50OworCQkJfQorCQkJcHJpbnRmKCIlcyUyZDogJXMiLCAkY2hvc2VuLCAkaSsxLCAkcHJpbnQpOworCQkJaWYgKCgkb3B0cy0+e0xJU1RfRkxBVH0pICYmCisJCQkgICAgKCgkaSArIDEpICUgKCRvcHRzLT57TElTVF9GTEFUfSkpKSB7CisJCQkJcHJpbnQgIlx0IjsKKwkJCQkkbGFzdF9sZiA9IDA7CisJCQl9CisJCQllbHNlIHsKKwkJCQlwcmludCAiXG4iOworCQkJCSRsYXN0X2xmID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoISRsYXN0X2xmKSB7CisJCQlwcmludCAiXG4iOworCQl9CisKKwkJcmV0dXJuIGlmICgkb3B0cy0+e0xJU1RfT05MWX0pOworCisJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgJG9wdHMtPntQUk9NUFR9OworCQlpZiAoJG9wdHMtPntTSU5HTEVUT059KSB7CisJCQlwcmludCAiPiAiOworCQl9CisJCWVsc2UgeworCQkJcHJpbnQgIj4+ICI7CisJCX0KKwkJbXkgJGxpbmUgPSA8U1RESU4+OworCQlpZiAoISRsaW5lKSB7CisJCQlwcmludCAiXG4iOworCQkJJG9wdHMtPntPTl9FT0Z9LT4oKSBpZiAkb3B0cy0+e09OX0VPRn07CisJCQlsYXN0OworCQl9CisJCWNob21wICRsaW5lOworCQlsYXN0IGlmICRsaW5lIGVxICcnOworCQlpZiAoJGxpbmUgZXEgJz8nKSB7CisJCQkkb3B0cy0+e1NJTkdMRVRPTn0gPworCQkJICAgIHNpbmdsZXRvbl9wcm9tcHRfaGVscF9jbWQoKSA6CisJCQkgICAgcHJvbXB0X2hlbHBfY21kKCk7CisJCQluZXh0IFRPUExPT1A7CisJCX0KKwkJZm9yIG15ICRjaG9pY2UgKHNwbGl0KC9bXHMsXSsvLCAkbGluZSkpIHsKKwkJCW15ICRjaG9vc2UgPSAxOworCQkJbXkgKCRib3R0b20sICR0b3ApOworCisJCQkjIElucHV0IHRoYXQgYmVnaW5zIHdpdGggJy0nOyB1bmNob29zZQorCQkJaWYgKCRjaG9pY2UgPX4gcy9eLS8vKSB7CisJCQkJJGNob29zZSA9IDA7CisJCQl9CisJCQkjIEEgcmFuZ2UgY2FuIGJlIHNwZWNpZmllZCBsaWtlIDUtNyBvciA1LS4KKwkJCWlmICgkY2hvaWNlID1+IC9eKFxkKyktKFxkKikkLykgeworCQkJCSgkYm90dG9tLCAkdG9wKSA9ICgkMSwgbGVuZ3RoKCQyKSA/ICQyIDogMSArIEBzdHVmZik7CisJCQl9CisJCQllbHNpZiAoJGNob2ljZSA9fiAvXlxkKyQvKSB7CisJCQkJJGJvdHRvbSA9ICR0b3AgPSAkY2hvaWNlOworCQkJfQorCQkJZWxzaWYgKCRjaG9pY2UgZXEgJyonKSB7CisJCQkJJGJvdHRvbSA9IDE7CisJCQkJJHRvcCA9IDEgKyBAc3R1ZmY7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkYm90dG9tID0gJHRvcCA9IGZpbmRfdW5pcXVlKCRjaG9pY2UsIEBzdHVmZik7CisJCQkJaWYgKCFkZWZpbmVkICRib3R0b20pIHsKKwkJCQkJZXJyb3JfbXNnIHNwcmludGYoX18oIkh1aCAoJXMpP1xuIiksICRjaG9pY2UpOworCQkJCQluZXh0IFRPUExPT1A7CisJCQkJfQorCQkJfQorCQkJaWYgKCRvcHRzLT57U0lOR0xFVE9OfSAmJiAkYm90dG9tICE9ICR0b3ApIHsKKwkJCQllcnJvcl9tc2cgc3ByaW50ZihfXygiSHVoICglcyk/XG4iKSwgJGNob2ljZSk7CisJCQkJbmV4dCBUT1BMT09QOworCQkJfQorCQkJZm9yICgkaSA9ICRib3R0b20tMTsgJGkgPD0gJHRvcC0xOyAkaSsrKSB7CisJCQkJbmV4dCBpZiAoQHN0dWZmIDw9ICRpIHx8ICRpIDwgMCk7CisJCQkJJGNob3NlblskaV0gPSAkY2hvb3NlOworCQkJfQorCQl9CisJCWxhc3QgaWYgKCRvcHRzLT57SU1NRURJQVRFfSB8fCAkbGluZSBlcSAnKicpOworCX0KKwlmb3IgKCRpID0gMDsgJGkgPCBAc3R1ZmY7ICRpKyspIHsKKwkJaWYgKCRjaG9zZW5bJGldKSB7CisJCQlwdXNoIEByZXR1cm4sICRzdHVmZlskaV07CisJCX0KKwl9CisJcmV0dXJuIEByZXR1cm47Cit9CisKK3N1YiBzaW5nbGV0b25fcHJvbXB0X2hlbHBfY21kIHsKKwlwcmludCBjb2xvcmVkICRoZWxwX2NvbG9yLCBfXyA8PCdFT0YnIDsKK1Byb21wdCBoZWxwOgorMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW0KK2ZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4CisgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZworRU9GCit9CisKK3N1YiBwcm9tcHRfaGVscF9jbWQgeworCXByaW50IGNvbG9yZWQgJGhlbHBfY29sb3IsIF9fIDw8J0VPRicgOworUHJvbXB0IGhlbHA6CisxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW0KKzMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtcworMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXMKK2ZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4CistLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zCisqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtcworICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZworRU9GCit9CisKK3N1YiBzdGF0dXNfY21kIHsKKwlsaXN0X2FuZF9jaG9vc2UoeyBMSVNUX09OTFkgPT4gMSwgSEVBREVSID0+ICRzdGF0dXNfaGVhZCB9LAorCQkJbGlzdF9tb2RpZmllZCgpKTsKKwlwcmludCAiXG4iOworfQorCitzdWIgc2F5X25fcGF0aHMgeworCW15ICRkaWQgPSBzaGlmdCBAXzsKKwlteSAkY250ID0gc2NhbGFyIEBfOworCWlmICgkZGlkIGVxICdhZGRlZCcpIHsKKwkJcHJpbnRmKF9fbigiYWRkZWQgJWQgcGF0aFxuIiwgImFkZGVkICVkIHBhdGhzXG4iLAorCQkJICAgJGNudCksICRjbnQpOworCX0gZWxzaWYgKCRkaWQgZXEgJ3VwZGF0ZWQnKSB7CisJCXByaW50ZihfX24oInVwZGF0ZWQgJWQgcGF0aFxuIiwgInVwZGF0ZWQgJWQgcGF0aHNcbiIsCisJCQkgICAkY250KSwgJGNudCk7CisJfSBlbHNpZiAoJGRpZCBlcSAncmV2ZXJ0ZWQnKSB7CisJCXByaW50ZihfX24oInJldmVydGVkICVkIHBhdGhcbiIsICJyZXZlcnRlZCAlZCBwYXRoc1xuIiwKKwkJCSAgICRjbnQpLCAkY250KTsKKwl9IGVsc2UgeworCQlwcmludGYoX19uKCJ0b3VjaGVkICVkIHBhdGhcbiIsICJ0b3VjaGVkICVkIHBhdGhzXG4iLAorCQkJICAgJGNudCksICRjbnQpOworCX0KK30KKworc3ViIHVwZGF0ZV9jbWQgeworCW15IEBtb2RzID0gbGlzdF9tb2RpZmllZCgnZmlsZS1vbmx5Jyk7CisJcmV0dXJuIGlmICghQG1vZHMpOworCisJbXkgQHVwZGF0ZSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiBfXygnVXBkYXRlJyksCisJCQkJICAgICAgIEhFQURFUiA9PiAkc3RhdHVzX2hlYWQsIH0sCisJCQkJICAgICBAbW9kcyk7CisJaWYgKEB1cGRhdGUpIHsKKwkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgLS0pLAorCQkgICAgICAgbWFwIHsgJF8tPntWQUxVRX0gfSBAdXBkYXRlKTsKKwkJc2F5X25fcGF0aHMoJ3VwZGF0ZWQnLCBAdXBkYXRlKTsKKwl9CisJcHJpbnQgIlxuIjsKK30KKworc3ViIHJldmVydF9jbWQgeworCW15IEB1cGRhdGUgPSBsaXN0X2FuZF9jaG9vc2UoeyBQUk9NUFQgPT4gX18oJ1JldmVydCcpLAorCQkJCSAgICAgICBIRUFERVIgPT4gJHN0YXR1c19oZWFkLCB9LAorCQkJCSAgICAgbGlzdF9tb2RpZmllZCgpKTsKKwlpZiAoQHVwZGF0ZSkgeworCQlpZiAoaXNfaW5pdGlhbF9jb21taXQoKSkgeworCQkJc3lzdGVtKHF3KGdpdCBybSAtLWNhY2hlZCksCisJCQkJbWFwIHsgJF8tPntWQUxVRX0gfSBAdXBkYXRlKTsKKwkJfQorCQllbHNlIHsKKwkJCW15IEBsaW5lcyA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgbHMtdHJlZSBIRUFEIC0tKSwKKwkJCQkJCSBtYXAgeyAkXy0+e1ZBTFVFfSB9IEB1cGRhdGUpOworCQkJbXkgJGZoOworCQkJb3BlbiAkZmgsICd8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvJworCQkJICAgIG9yIGRpZTsKKwkJCWZvciAoQGxpbmVzKSB7CisJCQkJcHJpbnQgJGZoICRfOworCQkJfQorCQkJY2xvc2UoJGZoKTsKKwkJCWZvciAoQHVwZGF0ZSkgeworCQkJCWlmICgkXy0+e0lOREVYX0FERERFTH0gJiYKKwkJCQkgICAgJF8tPntJTkRFWF9BRERERUx9IGVxICdjcmVhdGUnKSB7CisJCQkJCXN5c3RlbShxdyhnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIC0tKSwKKwkJCQkJICAgICAgICRfLT57VkFMVUV9KTsKKwkJCQkJcHJpbnRmKF9fKCJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIiksICRfLT57VkFMVUV9KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmVmcmVzaCgpOworCQlzYXlfbl9wYXRocygncmV2ZXJ0ZWQnLCBAdXBkYXRlKTsKKwl9CisJcHJpbnQgIlxuIjsKK30KKworc3ViIGFkZF91bnRyYWNrZWRfY21kIHsKKwlteSBAYWRkID0gbGlzdF9hbmRfY2hvb3NlKHsgUFJPTVBUID0+IF9fKCdBZGQgdW50cmFja2VkJykgfSwKKwkJCQkgIGxpc3RfdW50cmFja2VkKCkpOworCWlmIChAYWRkKSB7CisJCXN5c3RlbShxdyhnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tKSwgQGFkZCk7CisJCXNheV9uX3BhdGhzKCdhZGRlZCcsIEBhZGQpOworCX0gZWxzZSB7CisJCXByaW50IF9fKCJObyB1bnRyYWNrZWQgZmlsZXMuXG4iKTsKKwl9CisJcHJpbnQgIlxuIjsKK30KKworc3ViIHJ1bl9naXRfYXBwbHkgeworCW15ICRjbWQgPSBzaGlmdDsKKwlteSAkZmg7CisJb3BlbiAkZmgsICd8IGdpdCAnIC4gJGNtZCAuICIgLS1hbGxvdy1vdmVybGFwIjsKKwlwcmludCAkZmggQF87CisJcmV0dXJuIGNsb3NlICRmaDsKK30KKworc3ViIHBhcnNlX2RpZmYgeworCW15ICgkcGF0aCkgPSBAXzsKKwlteSBAZGlmZl9jbWQgPSBzcGxpdCgiICIsICRwYXRjaF9tb2RlX2ZsYXZvdXJ7RElGRn0pOworCWlmIChkZWZpbmVkICRkaWZmX2FsZ29yaXRobSkgeworCQlzcGxpY2UgQGRpZmZfY21kLCAxLCAwLCAiLS1kaWZmLWFsZ29yaXRobT0ke2RpZmZfYWxnb3JpdGhtfSI7CisJfQorCWlmIChkZWZpbmVkICRwYXRjaF9tb2RlX3JldmlzaW9uKSB7CisJCXB1c2ggQGRpZmZfY21kLCBnZXRfZGlmZl9yZWZlcmVuY2UoJHBhdGNoX21vZGVfcmV2aXNpb24pOworCX0KKwlteSBAZGlmZiA9IHJ1bl9jbWRfcGlwZSgiZ2l0IiwgQGRpZmZfY21kLCAiLS0iLCAkcGF0aCk7CisJbXkgQGNvbG9yZWQgPSAoKTsKKwlpZiAoJGRpZmZfdXNlX2NvbG9yKSB7CisJCW15IEBkaXNwbGF5X2NtZCA9ICgiZ2l0IiwgQGRpZmZfY21kLCBxdygtLWNvbG9yIC0tKSwgJHBhdGgpOworCQlpZiAoZGVmaW5lZCAkZGlmZl9maWx0ZXIpIHsKKwkJCSMgcXVvdGVtZXRhIGlzIG92ZXJraWxsLCBidXQgc3VmZmljaWVudCBmb3Igc2hlbGwtcXVvdGluZworCQkJbXkgJGRpZmYgPSBqb2luKCcgJywgbWFwIHsgcXVvdGVtZXRhIH0gQGRpc3BsYXlfY21kKTsKKwkJCUBkaXNwbGF5X2NtZCA9ICgiJGRpZmYgfCAkZGlmZl9maWx0ZXIiKTsKKwkJfQorCisJCUBjb2xvcmVkID0gcnVuX2NtZF9waXBlKEBkaXNwbGF5X2NtZCk7CisJfQorCW15IChAaHVuaykgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2hlYWRlcicgfTsKKworCWlmIChAY29sb3JlZCAmJiBAY29sb3JlZCAhPSBAZGlmZikgeworCQlwcmludCBTVERFUlIKKwkJICAiZmF0YWw6IG1pc21hdGNoZWQgb3V0cHV0IGZyb20gaW50ZXJhY3RpdmUuZGlmZkZpbHRlclxuIiwKKwkJICAiaGludDogWW91ciBmaWx0ZXIgbXVzdCBtYWludGFpbiBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2VcbiIsCisJCSAgImhpbnQ6IGJldHdlZW4gaXRzIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuXG4iOworCQlleGl0IDE7CisJfQorCisJZm9yIChteSAkaSA9IDA7ICRpIDwgQGRpZmY7ICRpKyspIHsKKwkJaWYgKCRkaWZmWyRpXSA9fiAvXkBAIC8pIHsKKwkJCXB1c2ggQGh1bmssIHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwKKwkJCQlUWVBFID0+ICdodW5rJyB9OworCQl9CisJCXB1c2ggQHskaHVua1stMV17VEVYVH19LCAkZGlmZlskaV07CisJCXB1c2ggQHskaHVua1stMV17RElTUExBWX19LAorCQkJKEBjb2xvcmVkID8gJGNvbG9yZWRbJGldIDogJGRpZmZbJGldKTsKKwl9CisJcmV0dXJuIEBodW5rOworfQorCitzdWIgcGFyc2VfZGlmZl9oZWFkZXIgeworCW15ICRzcmMgPSBzaGlmdDsKKworCW15ICRoZWFkID0geyBURVhUID0+IFtdLCBESVNQTEFZID0+IFtdLCBUWVBFID0+ICdoZWFkZXInIH07CisJbXkgJG1vZGUgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ21vZGUnIH07CisJbXkgJGRlbGV0aW9uID0geyBURVhUID0+IFtdLCBESVNQTEFZID0+IFtdLCBUWVBFID0+ICdkZWxldGlvbicgfTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8IEB7JHNyYy0+e1RFWFR9fTsgJGkrKykgeworCQlteSAkZGVzdCA9CisJCSAgICRzcmMtPntURVhUfS0+WyRpXSA9fiAvXihvbGR8bmV3KSBtb2RlIChcZCspJC8gPyAkbW9kZSA6CisJCSAgICRzcmMtPntURVhUfS0+WyRpXSA9fiAvXmRlbGV0ZWQgZmlsZS8gPyAkZGVsZXRpb24gOgorCQkgICAkaGVhZDsKKwkJcHVzaCBAeyRkZXN0LT57VEVYVH19LCAkc3JjLT57VEVYVH0tPlskaV07CisJCXB1c2ggQHskZGVzdC0+e0RJU1BMQVl9fSwgJHNyYy0+e0RJU1BMQVl9LT5bJGldOworCX0KKwlyZXR1cm4gKCRoZWFkLCAkbW9kZSwgJGRlbGV0aW9uKTsKK30KKworc3ViIGh1bmtfc3BsaXR0YWJsZSB7CisJbXkgKCR0ZXh0KSA9IEBfOworCisJbXkgQHMgPSBzcGxpdF9odW5rKCR0ZXh0KTsKKwlyZXR1cm4gKDEgPCBAcyk7Cit9CisKK3N1YiBwYXJzZV9odW5rX2hlYWRlciB7CisJbXkgKCRsaW5lKSA9IEBfOworCW15ICgkb19vZnMsICRvX2NudCwgJG5fb2ZzLCAkbl9jbnQpID0KKwkgICAgJGxpbmUgPX4gL15AQCAtKFxkKykoPzosKFxkKykpPyBcKyhcZCspKD86LChcZCspKT8gQEAvOworCSRvX2NudCA9IDEgdW5sZXNzIGRlZmluZWQgJG9fY250OworCSRuX2NudCA9IDEgdW5sZXNzIGRlZmluZWQgJG5fY250OworCXJldHVybiAoJG9fb2ZzLCAkb19jbnQsICRuX29mcywgJG5fY250KTsKK30KKworc3ViIGZvcm1hdF9odW5rX2hlYWRlciB7CisJbXkgKCRvX29mcywgJG9fY250LCAkbl9vZnMsICRuX2NudCkgPSBAXzsKKwlyZXR1cm4gKCJAQCAtJG9fb2ZzIiAuCisJCSgoJG9fY250ICE9IDEpID8gIiwkb19jbnQiIDogJycpIC4KKwkJIiArJG5fb2ZzIiAuCisJCSgoJG5fY250ICE9IDEpID8gIiwkbl9jbnQiIDogJycpIC4KKwkJIiBAQFxuIik7Cit9CisKK3N1YiBzcGxpdF9odW5rIHsKKwlteSAoJHRleHQsICRkaXNwbGF5KSA9IEBfOworCW15IEBzcGxpdCA9ICgpOworCWlmICghZGVmaW5lZCAkZGlzcGxheSkgeworCQkkZGlzcGxheSA9ICR0ZXh0OworCX0KKwkjIElmIHRoZXJlIGFyZSBjb250ZXh0IGxpbmVzIGluIHRoZSBtaWRkbGUgb2YgYSBodW5rLAorCSMgaXQgY2FuIGJlIHNwbGl0LCBidXQgd2Ugd291bGQgbmVlZCB0byB0YWtlIGNhcmUgb2YKKwkjIG92ZXJsYXBzIGxhdGVyLgorCisJbXkgKCRvX29mcywgdW5kZWYsICRuX29mcykgPSBwYXJzZV9odW5rX2hlYWRlcigkdGV4dC0+WzBdKTsKKwlteSAkaHVua19zdGFydCA9IDE7CisKKyAgICAgIE9VVEVSOgorCXdoaWxlICgxKSB7CisJCW15ICRuZXh0X2h1bmtfc3RhcnQgPSB1bmRlZjsKKwkJbXkgJGkgPSAkaHVua19zdGFydCAtIDE7CisJCW15ICR0aGlzID0gK3sKKwkJCVRFWFQgPT4gW10sCisJCQlESVNQTEFZID0+IFtdLAorCQkJVFlQRSA9PiAnaHVuaycsCisJCQlPTEQgPT4gJG9fb2ZzLAorCQkJTkVXID0+ICRuX29mcywKKwkJCU9DTlQgPT4gMCwKKwkJCU5DTlQgPT4gMCwKKwkJCUFERERFTCA9PiAwLAorCQkJUE9TVENUWCA9PiAwLAorCQkJVVNFID0+IHVuZGVmLAorCQl9OworCisJCXdoaWxlICgrKyRpIDwgQCR0ZXh0KSB7CisJCQlteSAkbGluZSA9ICR0ZXh0LT5bJGldOworCQkJbXkgJGRpc3BsYXkgPSAkZGlzcGxheS0+WyRpXTsKKwkJCWlmICgkbGluZSA9fiAvXlxcLykgeworCQkJCXB1c2ggQHskdGhpcy0+e1RFWFR9fSwgJGxpbmU7CisJCQkJcHVzaCBAeyR0aGlzLT57RElTUExBWX19LCAkZGlzcGxheTsKKwkJCQluZXh0OworCQkJfQorCQkJaWYgKCRsaW5lID1+IC9eIC8pIHsKKwkJCQlpZiAoJHRoaXMtPntBRERERUx9ICYmCisJCQkJICAgICFkZWZpbmVkICRuZXh0X2h1bmtfc3RhcnQpIHsKKwkJCQkJIyBXZSBoYXZlIHNlZW4gbGVhZGluZyBjb250ZXh0IGFuZAorCQkJCQkjIGFkZHMvZGVscyBhbmQgdGhlbiBoZXJlIGlzIGFub3RoZXIKKwkJCQkJIyBjb250ZXh0LCB3aGljaCBpcyB0cmFpbGluZyBmb3IgdGhpcworCQkJCQkjIHNwbGl0IGh1bmsgYW5kIGxlYWRpbmcgZm9yIHRoZSBuZXh0CisJCQkJCSMgb25lLgorCQkJCQkkbmV4dF9odW5rX3N0YXJ0ID0gJGk7CisJCQkJfQorCQkJCXB1c2ggQHskdGhpcy0+e1RFWFR9fSwgJGxpbmU7CisJCQkJcHVzaCBAeyR0aGlzLT57RElTUExBWX19LCAkZGlzcGxheTsKKwkJCQkkdGhpcy0+e09DTlR9Kys7CisJCQkJJHRoaXMtPntOQ05UfSsrOworCQkJCWlmIChkZWZpbmVkICRuZXh0X2h1bmtfc3RhcnQpIHsKKwkJCQkJJHRoaXMtPntQT1NUQ1RYfSsrOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCisJCQkjIGFkZC9kZWwKKwkJCWlmIChkZWZpbmVkICRuZXh0X2h1bmtfc3RhcnQpIHsKKwkJCQkjIFdlIGFyZSBkb25lIHdpdGggdGhlIGN1cnJlbnQgaHVuayBhbmQKKwkJCQkjIHRoaXMgaXMgdGhlIGZpcnN0IHJlYWwgY2hhbmdlIGZvciB0aGUKKwkJCQkjIG5leHQgc3BsaXQgb25lLgorCQkJCSRodW5rX3N0YXJ0ID0gJG5leHRfaHVua19zdGFydDsKKwkJCQkkb19vZnMgPSAkdGhpcy0+e09MRH0gKyAkdGhpcy0+e09DTlR9OworCQkJCSRuX29mcyA9ICR0aGlzLT57TkVXfSArICR0aGlzLT57TkNOVH07CisJCQkJJG9fb2ZzIC09ICR0aGlzLT57UE9TVENUWH07CisJCQkJJG5fb2ZzIC09ICR0aGlzLT57UE9TVENUWH07CisJCQkJcHVzaCBAc3BsaXQsICR0aGlzOworCQkJCXJlZG8gT1VURVI7CisJCQl9CisJCQlwdXNoIEB7JHRoaXMtPntURVhUfX0sICRsaW5lOworCQkJcHVzaCBAeyR0aGlzLT57RElTUExBWX19LCAkZGlzcGxheTsKKwkJCSR0aGlzLT57QUREREVMfSsrOworCQkJaWYgKCRsaW5lID1+IC9eLS8pIHsKKwkJCQkkdGhpcy0+e09DTlR9Kys7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkdGhpcy0+e05DTlR9Kys7CisJCQl9CisJCX0KKworCQlwdXNoIEBzcGxpdCwgJHRoaXM7CisJCWxhc3Q7CisJfQorCisJZm9yIG15ICRodW5rIChAc3BsaXQpIHsKKwkJJG9fb2ZzID0gJGh1bmstPntPTER9OworCQkkbl9vZnMgPSAkaHVuay0+e05FV307CisJCW15ICRvX2NudCA9ICRodW5rLT57T0NOVH07CisJCW15ICRuX2NudCA9ICRodW5rLT57TkNOVH07CisKKwkJbXkgJGhlYWQgPSBmb3JtYXRfaHVua19oZWFkZXIoJG9fb2ZzLCAkb19jbnQsICRuX29mcywgJG5fY250KTsKKwkJbXkgJGRpc3BsYXlfaGVhZCA9ICRoZWFkOworCQl1bnNoaWZ0IEB7JGh1bmstPntURVhUfX0sICRoZWFkOworCQlpZiAoJGRpZmZfdXNlX2NvbG9yKSB7CisJCQkkZGlzcGxheV9oZWFkID0gY29sb3JlZCgkZnJhZ2luZm9fY29sb3IsICRoZWFkKTsKKwkJfQorCQl1bnNoaWZ0IEB7JGh1bmstPntESVNQTEFZfX0sICRkaXNwbGF5X2hlYWQ7CisJfQorCXJldHVybiBAc3BsaXQ7Cit9CisKK3N1YiBmaW5kX2xhc3Rfb19jdHggeworCW15ICgkaXQpID0gQF87CisJbXkgJHRleHQgPSAkaXQtPntURVhUfTsKKwlteSAoJG9fb2ZzLCAkb19jbnQpID0gcGFyc2VfaHVua19oZWFkZXIoJHRleHQtPlswXSk7CisJbXkgJGkgPSBAeyR0ZXh0fTsKKwlteSAkbGFzdF9vX2N0eCA9ICRvX29mcyArICRvX2NudDsKKwl3aGlsZSAoMCA8IC0tJGkpIHsKKwkJbXkgJGxpbmUgPSAkdGV4dC0+WyRpXTsKKwkJaWYgKCRsaW5lID1+IC9eIC8pIHsKKwkJCSRsYXN0X29fY3R4LS07CisJCQluZXh0OworCQl9CisJCWxhc3Q7CisJfQorCXJldHVybiAkbGFzdF9vX2N0eDsKK30KKworc3ViIG1lcmdlX2h1bmsgeworCW15ICgkcHJldiwgJHRoaXMpID0gQF87CisJbXkgKCRvMF9vZnMsICRvMF9jbnQsICRuMF9vZnMsICRuMF9jbnQpID0KKwkgICAgcGFyc2VfaHVua19oZWFkZXIoJHByZXYtPntURVhUfVswXSk7CisJbXkgKCRvMV9vZnMsICRvMV9jbnQsICRuMV9vZnMsICRuMV9jbnQpID0KKwkgICAgcGFyc2VfaHVua19oZWFkZXIoJHRoaXMtPntURVhUfVswXSk7CisKKwlteSAoQGxpbmUsICRpLCAkb2ZzLCAkb19jbnQsICRuX2NudCk7CisJJG9mcyA9ICRvMF9vZnM7CisJJG9fY250ID0gJG5fY250ID0gMDsKKwlmb3IgKCRpID0gMTsgJGkgPCBAeyRwcmV2LT57VEVYVH19OyAkaSsrKSB7CisJCW15ICRsaW5lID0gJHByZXYtPntURVhUfVskaV07CisJCWlmICgkbGluZSA9fiAvXlwrLykgeworCQkJJG5fY250Kys7CisJCQlwdXNoIEBsaW5lLCAkbGluZTsKKwkJCW5leHQ7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eXFwvKSB7CisJCQlwdXNoIEBsaW5lLCAkbGluZTsKKwkJCW5leHQ7CisJCX0KKworCQlsYXN0IGlmICgkbzFfb2ZzIDw9ICRvZnMpOworCisJCSRvX2NudCsrOworCQkkb2ZzKys7CisJCWlmICgkbGluZSA9fiAvXiAvKSB7CisJCQkkbl9jbnQrKzsKKwkJfQorCQlwdXNoIEBsaW5lLCAkbGluZTsKKwl9CisKKwlmb3IgKCRpID0gMTsgJGkgPCBAeyR0aGlzLT57VEVYVH19OyAkaSsrKSB7CisJCW15ICRsaW5lID0gJHRoaXMtPntURVhUfVskaV07CisJCWlmICgkbGluZSA9fiAvXlwrLykgeworCQkJJG5fY250Kys7CisJCQlwdXNoIEBsaW5lLCAkbGluZTsKKwkJCW5leHQ7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eXFwvKSB7CisJCQlwdXNoIEBsaW5lLCAkbGluZTsKKwkJCW5leHQ7CisJCX0KKwkJJG9mcysrOworCQkkb19jbnQrKzsKKwkJaWYgKCRsaW5lID1+IC9eIC8pIHsKKwkJCSRuX2NudCsrOworCQl9CisJCXB1c2ggQGxpbmUsICRsaW5lOworCX0KKwlteSAkaGVhZCA9IGZvcm1hdF9odW5rX2hlYWRlcigkbzBfb2ZzLCAkb19jbnQsICRuMF9vZnMsICRuX2NudCk7CisJQHskcHJldi0+e1RFWFR9fSA9ICgkaGVhZCwgQGxpbmUpOworfQorCitzdWIgY29hbGVzY2Vfb3ZlcmxhcHBpbmdfaHVua3MgeworCW15IChAaW4pID0gQF87CisJbXkgQG91dCA9ICgpOworCisJbXkgKCRsYXN0X29fY3R4LCAkbGFzdF93YXNfZGlydHkpOworCW15ICRvZnNfZGVsdGEgPSAwOworCisJZm9yIChAaW4pIHsKKwkJaWYgKCRfLT57VFlQRX0gbmUgJ2h1bmsnKSB7CisJCQlwdXNoIEBvdXQsICRfOworCQkJbmV4dDsKKwkJfQorCQlteSAkdGV4dCA9ICRfLT57VEVYVH07CisJCW15ICgkb19vZnMsICRvX2NudCwgJG5fb2ZzLCAkbl9jbnQpID0KKwkJCQkJCXBhcnNlX2h1bmtfaGVhZGVyKCR0ZXh0LT5bMF0pOworCQl1bmxlc3MgKCRfLT57VVNFfSkgeworCQkJJG9mc19kZWx0YSArPSAkb19jbnQgLSAkbl9jbnQ7CisJCQkjIElmIHRoaXMgaHVuayBoYXMgYmVlbiBlZGl0ZWQgdGhlbiBzdWJ0cmFjdAorCQkJIyB0aGUgZGVsdGEgdGhhdCBpcyBkdWUgdG8gdGhlIGVkaXQuCisJCQlpZiAoJF8tPntPRlNfREVMVEF9KSB7CisJCQkJJG9mc19kZWx0YSAtPSAkXy0+e09GU19ERUxUQX07CisJCQl9CisJCQluZXh0OworCQl9CisJCWlmICgkb2ZzX2RlbHRhKSB7CisJCQlpZiAoJHBhdGNoX21vZGVfZmxhdm91cntJU19SRVZFUlNFfSkgeworCQkJCSRvX29mcyAtPSAkb2ZzX2RlbHRhOworCQkJfSBlbHNlIHsKKwkJCQkkbl9vZnMgKz0gJG9mc19kZWx0YTsKKwkJCX0KKwkJCSRfLT57VEVYVH0tPlswXSA9IGZvcm1hdF9odW5rX2hlYWRlcigkb19vZnMsICRvX2NudCwKKwkJCQkJCQkgICAgICRuX29mcywgJG5fY250KTsKKwkJfQorCQkjIElmIHRoaXMgaHVuayB3YXMgZWRpdGVkIHRoZW4gYWRqdXN0IHRoZSBvZmZzZXQgZGVsdGEKKwkJIyB0byByZWZsZWN0IHRoZSBlZGl0LgorCQlpZiAoJF8tPntPRlNfREVMVEF9KSB7CisJCQkkb2ZzX2RlbHRhICs9ICRfLT57T0ZTX0RFTFRBfTsKKwkJfQorCQlpZiAoZGVmaW5lZCAkbGFzdF9vX2N0eCAmJgorCQkgICAgJG9fb2ZzIDw9ICRsYXN0X29fY3R4ICYmCisJCSAgICAhJF8tPntESVJUWX0gJiYKKwkJICAgICEkbGFzdF93YXNfZGlydHkpIHsKKwkJCW1lcmdlX2h1bmsoJG91dFstMV0sICRfKTsKKwkJfQorCQllbHNlIHsKKwkJCXB1c2ggQG91dCwgJF87CisJCX0KKwkJJGxhc3Rfb19jdHggPSBmaW5kX2xhc3Rfb19jdHgoJG91dFstMV0pOworCQkkbGFzdF93YXNfZGlydHkgPSAkXy0+e0RJUlRZfTsKKwl9CisJcmV0dXJuIEBvdXQ7Cit9CisKK3N1YiByZWFzc2VtYmxlX3BhdGNoIHsKKwlteSAkaGVhZCA9IHNoaWZ0OworCW15IEBwYXRjaDsKKworCSMgSW5jbHVkZSBldmVyeXRoaW5nIGluIHRoZSBoZWFkZXIgZXhjZXB0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRpZmYuCisJcHVzaCBAcGF0Y2gsIChncmVwIHsgIS9eWy0rXXszfS8gfSBAJGhlYWQpOworCisJIyBUaGVuIGluY2x1ZGUgYW55IGhlYWRlcnMgZnJvbSB0aGUgaHVuayBsaW5lcywgd2hpY2ggbXVzdAorCSMgY29tZSBiZWZvcmUgYW55IGFjdHVhbCBodW5rLgorCXdoaWxlIChAXyAmJiAkX1swXSAhfiAvXkAvKSB7CisJCXB1c2ggQHBhdGNoLCBzaGlmdDsKKwl9CisKKwkjIFRoZW4gYmVnaW4gdGhlIGRpZmYuCisJcHVzaCBAcGF0Y2gsIGdyZXAgeyAvXlstK117M30vIH0gQCRoZWFkOworCisJIyBBbmQgdGhlbiB0aGUgYWN0dWFsIGh1bmtzLgorCXB1c2ggQHBhdGNoLCBAXzsKKworCXJldHVybiBAcGF0Y2g7Cit9CisKK3N1YiBjb2xvcl9kaWZmIHsKKwlyZXR1cm4gbWFwIHsKKwkJY29sb3JlZCgoL15ALyAgPyAkZnJhZ2luZm9fY29sb3IgOgorCQkJIC9eXCsvID8gJGRpZmZfbmV3X2NvbG9yIDoKKwkJCSAvXi0vICA/ICRkaWZmX29sZF9jb2xvciA6CisJCQkgJGRpZmZfcGxhaW5fY29sb3IpLAorCQkJJF8pOworCX0gQF87Cit9CisKK215ICVlZGl0X2h1bmtfbWFudWFsbHlfbW9kZXMgPSAoCisJc3RhZ2UgPT4gTl9fKAorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCittYXJrZWQgZm9yIHN0YWdpbmcuIiksCisJc3Rhc2ggPT4gTl9fKAorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCittYXJrZWQgZm9yIHN0YXNoaW5nLiIpLAorCXJlc2V0X2hlYWQgPT4gTl9fKAorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCittYXJrZWQgZm9yIHVuc3RhZ2luZy4iKSwKKwlyZXNldF9ub3RoZWFkID0+IE5fXygKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZQorbWFya2VkIGZvciBhcHBseWluZy4iKSwKKwljaGVja291dF9pbmRleCA9PiBOX18oCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKK21hcmtlZCBmb3IgZGlzY2FyZGluZy4iKSwKKwljaGVja291dF9oZWFkID0+IE5fXygKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZQorbWFya2VkIGZvciBkaXNjYXJkaW5nLiIpLAorCWNoZWNrb3V0X25vdGhlYWQgPT4gTl9fKAorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCittYXJrZWQgZm9yIGFwcGx5aW5nLiIpLAorCXdvcmt0cmVlX2hlYWQgPT4gTl9fKAorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCittYXJrZWQgZm9yIGRpc2NhcmRpbmcuIiksCisJd29ya3RyZWVfbm90aGVhZCA9PiBOX18oCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmUKK21hcmtlZCBmb3IgYXBwbHlpbmcuIiksCispOworCitzdWIgcmVjb3VudF9lZGl0ZWRfaHVuayB7CisJbG9jYWwgJF87CisJbXkgKCRvbGR0ZXh0LCAkbmV3dGV4dCkgPSBAXzsKKwlteSAoJG9fY250LCAkbl9jbnQpID0gKDAsIDApOworCWZvciAoQHskbmV3dGV4dH1bMS4uJCN7JG5ld3RleHR9XSkgeworCQlteSAkbW9kZSA9IHN1YnN0cigkXywgMCwgMSk7CisJCWlmICgkbW9kZSBlcSAnLScpIHsKKwkJCSRvX2NudCsrOworCQl9IGVsc2lmICgkbW9kZSBlcSAnKycpIHsKKwkJCSRuX2NudCsrOworCQl9IGVsc2lmICgkbW9kZSBlcSAnICcgb3IgJG1vZGUgZXEgIlxuIikgeworCQkJJG9fY250Kys7CisJCQkkbl9jbnQrKzsKKwkJfQorCX0KKwlteSAoJG9fb2ZzLCB1bmRlZiwgJG5fb2ZzLCB1bmRlZikgPQorCQkJCQlwYXJzZV9odW5rX2hlYWRlcigkbmV3dGV4dC0+WzBdKTsKKwkkbmV3dGV4dC0+WzBdID0gZm9ybWF0X2h1bmtfaGVhZGVyKCRvX29mcywgJG9fY250LCAkbl9vZnMsICRuX2NudCk7CisJbXkgKHVuZGVmLCAkb3JpZ19vX2NudCwgdW5kZWYsICRvcmlnX25fY250KSA9CisJCQkJCXBhcnNlX2h1bmtfaGVhZGVyKCRvbGR0ZXh0LT5bMF0pOworCSMgUmV0dXJuIHRoZSBjaGFuZ2UgaW4gdGhlIG51bWJlciBvZiBsaW5lcyBpbnNlcnRlZCBieSB0aGlzIGh1bmsKKwlyZXR1cm4gJG9yaWdfb19jbnQgLSAkb3JpZ19uX2NudCAtICRvX2NudCArICRuX2NudDsKK30KKworc3ViIGVkaXRfaHVua19tYW51YWxseSB7CisJbXkgKCRvbGR0ZXh0KSA9IEBfOworCisJbXkgJGh1bmtmaWxlID0gJHJlcG8tPnJlcG9fcGF0aCAuICIvYWRkcC1odW5rLWVkaXQuZGlmZiI7CisJbXkgJGZoOworCW9wZW4gJGZoLCAnPicsICRodW5rZmlsZQorCQlvciBkaWUgc3ByaW50ZihfXygiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIiksICQhKTsKKwlwcmludCAkZmggR2l0Ojpjb21tZW50X2xpbmVzIF9fKCJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIpOworCXByaW50ICRmaCBAJG9sZHRleHQ7CisJbXkgJGlzX3JldmVyc2UgPSAkcGF0Y2hfbW9kZV9mbGF2b3Vye0lTX1JFVkVSU0V9OworCW15ICgkcmVtb3ZlX3BsdXMsICRyZW1vdmVfbWludXMpID0gJGlzX3JldmVyc2UgPyAoJy0nLCAnKycpIDogKCcrJywgJy0nKTsKKwlteSAkY29tbWVudF9saW5lX2NoYXIgPSBHaXQ6OmdldF9jb21tZW50X2xpbmVfY2hhcjsKKwlwcmludCAkZmggR2l0Ojpjb21tZW50X2xpbmVzIHNwcmludGYoX18gPDxFT0YsICRyZW1vdmVfbWludXMsICRyZW1vdmVfcGx1cywgJGNvbW1lbnRfbGluZV9jaGFyKSwKKy0tLQorVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLgorVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLgorTGluZXMgc3RhcnRpbmcgd2l0aCAlcyB3aWxsIGJlIHJlbW92ZWQuCitFT0YKK19fKCRlZGl0X2h1bmtfbWFudWFsbHlfbW9kZXN7JHBhdGNoX21vZGV9KSwKKyMgVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorX18gPDxFT0YyIDsKK0lmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvCitlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzCithYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC4KK0VPRjIKKwljbG9zZSAkZmg7CisKKwljaG9tcChteSAoJGVkaXRvcikgPSBydW5fY21kX3BpcGUocXcoZ2l0IHZhciBHSVRfRURJVE9SKSkpOworCXN5c3RlbSgnc2gnLCAnLWMnLCAkZWRpdG9yLicgIiRAIicsICRlZGl0b3IsICRodW5rZmlsZSk7CisKKwlpZiAoJD8gIT0gMCkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCisJb3BlbiAkZmgsICc8JywgJGh1bmtmaWxlCisJCW9yIGRpZSBzcHJpbnRmKF9fKCJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiKSwgJCEpOworCW15IEBuZXd0ZXh0ID0gZ3JlcCB7ICEvXlxRJGNvbW1lbnRfbGluZV9jaGFyXEUvIH0gPCRmaD47CisJY2xvc2UgJGZoOworCXVubGluayAkaHVua2ZpbGU7CisKKwkjIEFib3J0IGlmIG5vdGhpbmcgcmVtYWlucworCWlmICghZ3JlcCB7IC9cUy8gfSBAbmV3dGV4dCkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCisJIyBSZWluc2VydCB0aGUgZmlyc3QgaHVuayBoZWFkZXIgaWYgdGhlIHVzZXIgYWNjaWRlbnRhbGx5IGRlbGV0ZWQgaXQKKwlpZiAoJG5ld3RleHRbMF0gIX4gL15ALykgeworCQl1bnNoaWZ0IEBuZXd0ZXh0LCAkb2xkdGV4dC0+WzBdOworCX0KKwlyZXR1cm4gXEBuZXd0ZXh0OworfQorCitzdWIgZGlmZl9hcHBsaWVzIHsKKwlyZXR1cm4gcnVuX2dpdF9hcHBseSgkcGF0Y2hfbW9kZV9mbGF2b3Vye0FQUExZX0NIRUNLfSAuICcgLS1jaGVjaycsCisJCQkgICAgIG1hcCB7IEB7JF8tPntURVhUfX0gfSBAXyk7Cit9CisKK3N1YiBfcmVzdG9yZV90ZXJtaW5hbF9hbmRfZGllIHsKKwlSZWFkTW9kZSAncmVzdG9yZSc7CisJcHJpbnQgIlxuIjsKKwlleGl0IDE7Cit9CisKK3N1YiBwcm9tcHRfc2luZ2xlX2NoYXJhY3RlciB7CisJaWYgKCR1c2VfcmVhZGtleSkgeworCQlsb2NhbCAkU0lHe1RFUk19ID0gXCZfcmVzdG9yZV90ZXJtaW5hbF9hbmRfZGllOworCQlsb2NhbCAkU0lHe0lOVH0gPSBcJl9yZXN0b3JlX3Rlcm1pbmFsX2FuZF9kaWU7CisJCVJlYWRNb2RlICdjYnJlYWsnOworCQlteSAka2V5ID0gUmVhZEtleSAwOworCQlSZWFkTW9kZSAncmVzdG9yZSc7CisJCWlmICgkdXNlX3Rlcm1jYXAgYW5kICRrZXkgZXEgIlxlIikgeworCQkJd2hpbGUgKCFkZWZpbmVkICR0ZXJtX2VzY2FwZXN7JGtleX0pIHsKKwkJCQlteSAkbmV4dCA9IFJlYWRLZXkgMC41OworCQkJCWxhc3QgaWYgKCFkZWZpbmVkICRuZXh0KTsKKwkJCQkka2V5IC49ICRuZXh0OworCQkJfQorCQkJJGtleSA9fiBzL1xlL15bLzsKKwkJfQorCQlwcmludCAiJGtleSIgaWYgZGVmaW5lZCAka2V5OworCQlwcmludCAiXG4iOworCQlyZXR1cm4gJGtleTsKKwl9IGVsc2UgeworCQlyZXR1cm4gPFNURElOPjsKKwl9Cit9CisKK3N1YiBwcm9tcHRfeWVzbm8geworCW15ICgkcHJvbXB0KSA9IEBfOworCXdoaWxlICgxKSB7CisJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgJHByb21wdDsKKwkJbXkgJGxpbmUgPSBwcm9tcHRfc2luZ2xlX2NoYXJhY3RlcjsKKwkJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRsaW5lOworCQlyZXR1cm4gMCBpZiAkbGluZSA9fiAvXm4vaTsKKwkJcmV0dXJuIDEgaWYgJGxpbmUgPX4gL155L2k7CisJfQorfQorCitzdWIgZWRpdF9odW5rX2xvb3AgeworCW15ICgkaGVhZCwgJGh1bmtzLCAkaXgpID0gQF87CisJbXkgJGh1bmsgPSAkaHVua3MtPlskaXhdOworCW15ICR0ZXh0ID0gJGh1bmstPntURVhUfTsKKworCXdoaWxlICgxKSB7CisJCW15ICRuZXd0ZXh0ID0gZWRpdF9odW5rX21hbnVhbGx5KCR0ZXh0KTsKKwkJaWYgKCFkZWZpbmVkICRuZXd0ZXh0KSB7CisJCQlyZXR1cm4gdW5kZWY7CisJCX0KKwkJbXkgJG5ld2h1bmsgPSB7CisJCQlURVhUID0+ICRuZXd0ZXh0LAorCQkJVFlQRSA9PiAkaHVuay0+e1RZUEV9LAorCQkJVVNFID0+IDEsCisJCQlESVJUWSA9PiAxLAorCQl9OworCQkkbmV3aHVuay0+e09GU19ERUxUQX0gPSByZWNvdW50X2VkaXRlZF9odW5rKCR0ZXh0LCAkbmV3dGV4dCk7CisJCSMgSWYgdGhpcyBodW5rIGhhcyBhbHJlYWR5IGJlZW4gZWRpdGVkIHRoZW4gYWRkIHRoZQorCQkjIG9mZnNldCBkZWx0YSBvZiB0aGUgcHJldmlvdXMgZWRpdCB0byBnZXQgdGhlIHJlYWwKKwkJIyBkZWx0YSBmcm9tIHRoZSBvcmlnaW5hbCB1bmVkaXRlZCBodW5rLgorCQkkaHVuay0+e09GU19ERUxUQX0gYW5kCisJCQkJJG5ld2h1bmstPntPRlNfREVMVEF9ICs9ICRodW5rLT57T0ZTX0RFTFRBfTsKKwkJaWYgKGRpZmZfYXBwbGllcygkaGVhZCwKKwkJCQkgQHskaHVua3N9WzAuLiRpeC0xXSwKKwkJCQkgJG5ld2h1bmssCisJCQkJIEB7JGh1bmtzfVskaXgrMS4uJCN7JGh1bmtzfV0pKSB7CisJCQkkbmV3aHVuay0+e0RJU1BMQVl9ID0gW2NvbG9yX2RpZmYoQHskbmV3dGV4dH0pXTsKKwkJCXJldHVybiAkbmV3aHVuazsKKwkJfQorCQllbHNlIHsKKwkJCXByb21wdF95ZXNubygKKwkJCQkjIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisJCQkJIyBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKwkJCQkjIGF0IHRoaXMgcG9pbnQuCisJCQkJIyBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworCQkJCSMgKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKwkJCQkjIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorCQkJCV9fKCdZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluICcKKwkJCQkgICAuICcoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBbeS9uXT8gJykKKwkJCQkpIG9yIHJldHVybiB1bmRlZjsKKwkJfQorCX0KK30KKworbXkgJWhlbHBfcGF0Y2hfbW9kZXMgPSAoCisJc3RhZ2UgPT4gTl9fKAorInkgLSBzdGFnZSB0aGlzIGh1bmsKK24gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rCitxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzCithIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKK2QgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiKSwKKwlzdGFzaCA9PiBOX18oCisieSAtIHN0YXNoIHRoaXMgaHVuaworbiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsKK3EgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCXJlc2V0X2hlYWQgPT4gTl9fKAorInkgLSB1bnN0YWdlIHRoaXMgaHVuaworbiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuaworcSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzCithIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIiksCisJcmVzZXRfbm90aGVhZCA9PiBOX18oCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleAorbiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXgKK3EgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCWNoZWNrb3V0X2luZGV4ID0+IE5fXygKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZQorbiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlCitxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlCitkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiKSwKKwljaGVja291dF9oZWFkID0+IE5fXygKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUKK24gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUKK3EgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKK2QgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCWNoZWNrb3V0X25vdGhlYWQgPT4gTl9fKAorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlCituIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUKK3EgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXMKK2EgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCXdvcmt0cmVlX2hlYWQgPT4gTl9fKAorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlCituIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUKK3EgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKK2QgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIpLAorCXdvcmt0cmVlX25vdGhlYWQgPT4gTl9fKAorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUKK24gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlCitxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzCithIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKK2QgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiKSwKKyk7CisKK3N1YiBoZWxwX3BhdGNoX2NtZCB7CisJbG9jYWwgJF87CisJbXkgJG90aGVyID0gJF9bMF0gLiAiLD8iOworCXByaW50IGNvbG9yZWQgJGhlbHBfY29sb3IsIF9fKCRoZWxwX3BhdGNoX21vZGVzeyRwYXRjaF9tb2RlfSksICJcbiIsCisJCW1hcCB7ICIkX1xuIiB9IGdyZXAgeworCQkJbXkgJGMgPSBxdW90ZW1ldGEoc3Vic3RyKCRfLCAwLCAxKSk7CisJCQkkb3RoZXIgPX4gLywkYy8KKwkJfSBzcGxpdCAiXG4iLCBfXyA8PEVPRiA7CitnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0bworLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleAoraiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rCitKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVuaworayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVuaworSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rCitzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3MKK2UgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmsKKz8gLSBwcmludCBoZWxwCitFT0YKK30KKworc3ViIGFwcGx5X3BhdGNoIHsKKwlteSAkY21kID0gc2hpZnQ7CisJbXkgJHJldCA9IHJ1bl9naXRfYXBwbHkgJGNtZCwgQF87CisJaWYgKCEkcmV0KSB7CisJCXByaW50IFNUREVSUiBAXzsKKwl9CisJcmV0dXJuICRyZXQ7Cit9CisKK3N1YiBhcHBseV9wYXRjaF9mb3JfY2hlY2tvdXRfY29tbWl0IHsKKwlteSAkcmV2ZXJzZSA9IHNoaWZ0OworCW15ICRhcHBsaWVzX2luZGV4ID0gcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZS4nIC0tY2FjaGVkIC0tY2hlY2snLCBAXzsKKwlteSAkYXBwbGllc193b3JrdHJlZSA9IHJ1bl9naXRfYXBwbHkgJ2FwcGx5ICcuJHJldmVyc2UuJyAtLWNoZWNrJywgQF87CisKKwlpZiAoJGFwcGxpZXNfd29ya3RyZWUgJiYgJGFwcGxpZXNfaW5kZXgpIHsKKwkJcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZS4nIC0tY2FjaGVkJywgQF87CisJCXJ1bl9naXRfYXBwbHkgJ2FwcGx5ICcuJHJldmVyc2UsIEBfOworCQlyZXR1cm4gMTsKKwl9IGVsc2lmICghJGFwcGxpZXNfaW5kZXgpIHsKKwkJcHJpbnQgY29sb3JlZCAkZXJyb3JfY29sb3IsIF9fKCJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIpOworCQlpZiAocHJvbXB0X3llc25vIF9fKCJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIpKSB7CisJCQlyZXR1cm4gcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZSwgQF87CisJCX0gZWxzZSB7CisJCQlwcmludCBjb2xvcmVkICRlcnJvcl9jb2xvciwgX18oIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSIEBfOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N1YiBwYXRjaF91cGRhdGVfY21kIHsKKwlteSBAYWxsX21vZHMgPSBsaXN0X21vZGlmaWVkKCRwYXRjaF9tb2RlX2ZsYXZvdXJ7RklMVEVSfSk7CisJZXJyb3JfbXNnIHNwcmludGYoX18oImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIiksICRfLT57VkFMVUV9KQorCQlmb3IgZ3JlcCB7ICRfLT57VU5NRVJHRUR9IH0gQGFsbF9tb2RzOworCUBhbGxfbW9kcyA9IGdyZXAgeyAhJF8tPntVTk1FUkdFRH0gfSBAYWxsX21vZHM7CisKKwlteSBAbW9kcyA9IGdyZXAgeyAhKCRfLT57QklOQVJZfSkgfSBAYWxsX21vZHM7CisJbXkgQHRoZW07CisKKwlpZiAoIUBtb2RzKSB7CisJCWlmIChAYWxsX21vZHMpIHsKKwkJCXByaW50IFNUREVSUiBfXygiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnQgU1RERVJSIF9fKCJObyBjaGFuZ2VzLlxuIik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmICgkcGF0Y2hfbW9kZV9vbmx5KSB7CisJCUB0aGVtID0gQG1vZHM7CisJfQorCWVsc2UgeworCQlAdGhlbSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiBfXygnUGF0Y2ggdXBkYXRlJyksCisJCQkJCSAgSEVBREVSID0+ICRzdGF0dXNfaGVhZCwgfSwKKwkJCQkJQG1vZHMpOworCX0KKwlmb3IgKEB0aGVtKSB7CisJCXJldHVybiAwIGlmIHBhdGNoX3VwZGF0ZV9maWxlKCRfLT57VkFMVUV9KTsKKwl9Cit9CisKKyMgR2VuZXJhdGUgYSBvbmUgbGluZSBzdW1tYXJ5IG9mIGEgaHVuay4KK3N1YiBzdW1tYXJpemVfaHVuayB7CisJbXkgJHJodW5rID0gc2hpZnQ7CisJbXkgJHN1bW1hcnkgPSAkcmh1bmstPntURVhUfVswXTsKKworCSMgS2VlcCB0aGUgbGluZSBudW1iZXJzLCBkaXNjYXJkIGV4dHJhIGNvbnRleHQuCisJJHN1bW1hcnkgPX4gcy9AQCguKj8pQEAuKi8kMSAvczsKKwkkc3VtbWFyeSAuPSAiICIgeCAoMjAgLSBsZW5ndGggJHN1bW1hcnkpOworCisJIyBBZGQgc29tZSB1c2VyIGNvbnRleHQuCisJZm9yIG15ICRsaW5lIChAeyRyaHVuay0+e1RFWFR9fSkgeworCQlpZiAoJGxpbmUgPX4gbS9eWystXS4qXHcvKSB7CisJCQkkc3VtbWFyeSAuPSAkbGluZTsKKwkJCWxhc3Q7CisJCX0KKwl9CisKKwljaG9tcCAkc3VtbWFyeTsKKwlyZXR1cm4gc3Vic3RyKCRzdW1tYXJ5LCAwLCA4MCkgLiAiXG4iOworfQorCisKKyMgUHJpbnQgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIGVhY2ggaHVuayBpbiB0aGUgYXJyYXkgcmVmIGluCisjIHRoZSBmaXJzdCBhcmd1bWVudCwgc3RhcnRpbmcgd2l0aCB0aGUgaW5kZXggaW4gdGhlIDJuZC4KK3N1YiBkaXNwbGF5X2h1bmtzIHsKKwlteSAoJGh1bmtzLCAkaSkgPSBAXzsKKwlteSAkY3RyID0gMDsKKwkkaSB8fD0gMDsKKwlmb3IgKDsgJGkgPCBAJGh1bmtzICYmICRjdHIgPCAyMDsgJGkrKywgJGN0cisrKSB7CisJCW15ICRzdGF0dXMgPSAiICI7CisJCWlmIChkZWZpbmVkICRodW5rcy0+WyRpXXtVU0V9KSB7CisJCQkkc3RhdHVzID0gJGh1bmtzLT5bJGlde1VTRX0gPyAiKyIgOiAiLSI7CisJCX0KKwkJcHJpbnRmICIlcyUyZDogJXMiLAorCQkJJHN0YXR1cywKKwkJCSRpICsgMSwKKwkJCXN1bW1hcml6ZV9odW5rKCRodW5rcy0+WyRpXSk7CisJfQorCXJldHVybiAkaTsKK30KKworbXkgJXBhdGNoX3VwZGF0ZV9wcm9tcHRfbW9kZXMgPSAoCisJc3RhZ2UgPT4geworCQltb2RlID0+IE5fXygiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJZGVsZXRpb24gPT4gTl9fKCJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlodW5rID0+IE5fXygiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwlzdGFzaCA9PiB7CisJCW1vZGUgPT4gTl9fKCJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlkZWxldGlvbiA9PiBOX18oIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWh1bmsgPT4gTl9fKCJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCXJlc2V0X2hlYWQgPT4geworCQltb2RlID0+IE5fXygiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCQlkZWxldGlvbiA9PiBOX18oIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwlyZXNldF9ub3RoZWFkID0+IHsKKwkJbW9kZSA9PiBOX18oIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWRlbGV0aW9uID0+IE5fXygiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJY2hlY2tvdXRfaW5kZXggPT4geworCQltb2RlID0+IE5fXygiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWRlbGV0aW9uID0+IE5fXygiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWh1bmsgPT4gTl9fKCJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwljaGVja291dF9oZWFkID0+IHsKKwkJbW9kZSA9PiBOX18oIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJZGVsZXRpb24gPT4gTl9fKCJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWh1bmsgPT4gTl9fKCJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCisJY2hlY2tvdXRfbm90aGVhZCA9PiB7CisJCW1vZGUgPT4gTl9fKCJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJZGVsZXRpb24gPT4gTl9fKCJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwl9LAorCXdvcmt0cmVlX2hlYWQgPT4geworCQltb2RlID0+IE5fXygiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWRlbGV0aW9uID0+IE5fXygiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWh1bmsgPT4gTl9fKCJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJfSwKKwl3b3JrdHJlZV9ub3RoZWFkID0+IHsKKwkJbW9kZSA9PiBOX18oIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIiksCisJCWRlbGV0aW9uID0+IE5fXygiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiKSwKKwkJaHVuayA9PiBOX18oIkFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIpLAorCX0sCispOworCitzdWIgcGF0Y2hfdXBkYXRlX2ZpbGUgeworCW15ICRxdWl0ID0gMDsKKwlteSAoJGl4LCAkbnVtKTsKKwlteSAkcGF0aCA9IHNoaWZ0OworCW15ICgkaGVhZCwgQGh1bmspID0gcGFyc2VfZGlmZigkcGF0aCk7CisJKCRoZWFkLCBteSAkbW9kZSwgbXkgJGRlbGV0aW9uKSA9IHBhcnNlX2RpZmZfaGVhZGVyKCRoZWFkKTsKKwlmb3IgKEB7JGhlYWQtPntESVNQTEFZfX0pIHsKKwkJcHJpbnQ7CisJfQorCisJaWYgKEB7JG1vZGUtPntURVhUfX0pIHsKKwkJdW5zaGlmdCBAaHVuaywgJG1vZGU7CisJfQorCWlmIChAeyRkZWxldGlvbi0+e1RFWFR9fSkgeworCQlmb3JlYWNoIG15ICRodW5rIChAaHVuaykgeworCQkJcHVzaCBAeyRkZWxldGlvbi0+e1RFWFR9fSwgQHskaHVuay0+e1RFWFR9fTsKKwkJCXB1c2ggQHskZGVsZXRpb24tPntESVNQTEFZfX0sIEB7JGh1bmstPntESVNQTEFZfX07CisJCX0KKwkJQGh1bmsgPSAoJGRlbGV0aW9uKTsKKwl9CisKKwkkbnVtID0gc2NhbGFyIEBodW5rOworCSRpeCA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlteSAoJHByZXYsICRuZXh0LCAkb3RoZXIsICR1bmRlY2lkZWQsICRpKTsKKwkJJG90aGVyID0gJyc7CisKKwkJaWYgKCRudW0gPD0gJGl4KSB7CisJCQkkaXggPSAwOworCQl9CisJCWZvciAoJGkgPSAwOyAkaSA8ICRpeDsgJGkrKykgeworCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpXXtVU0V9KSB7CisJCQkJJHByZXYgPSAxOworCQkJCSRvdGhlciAuPSAnLGsnOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJaWYgKCRpeCkgeworCQkJJG90aGVyIC49ICcsSyc7CisJCX0KKwkJZm9yICgkaSA9ICRpeCArIDE7ICRpIDwgJG51bTsgJGkrKykgeworCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpXXtVU0V9KSB7CisJCQkJJG5leHQgPSAxOworCQkJCSRvdGhlciAuPSAnLGonOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJaWYgKCRpeCA8ICRudW0gLSAxKSB7CisJCQkkb3RoZXIgLj0gJyxKJzsKKwkJfQorCQlpZiAoJG51bSA+IDEpIHsKKwkJCSRvdGhlciAuPSAnLGcsLyc7CisJCX0KKwkJZm9yICgkaSA9IDA7ICRpIDwgJG51bTsgJGkrKykgeworCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpXXtVU0V9KSB7CisJCQkJJHVuZGVjaWRlZCA9IDE7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQlsYXN0IGlmICghJHVuZGVjaWRlZCk7CisKKwkJaWYgKCRodW5rWyRpeF17VFlQRX0gZXEgJ2h1bmsnICYmCisJCSAgICBodW5rX3NwbGl0dGFibGUoJGh1bmtbJGl4XXtURVhUfSkpIHsKKwkJCSRvdGhlciAuPSAnLHMnOworCQl9CisJCWlmICgkaHVua1skaXhde1RZUEV9IGVxICdodW5rJykgeworCQkJJG90aGVyIC49ICcsZSc7CisJCX0KKwkJZm9yIChAeyRodW5rWyRpeF17RElTUExBWX19KSB7CisJCQlwcmludDsKKwkJfQorCQlwcmludCBjb2xvcmVkICRwcm9tcHRfY29sb3IsICIoIiwgKCRpeCsxKSwgIi8kbnVtKSAiLAorCQkJc3ByaW50ZihfXygkcGF0Y2hfdXBkYXRlX3Byb21wdF9tb2Rlc3skcGF0Y2hfbW9kZX17JGh1bmtbJGl4XXtUWVBFfX0pLCAkb3RoZXIpOworCisJCW15ICRsaW5lID0gcHJvbXB0X3NpbmdsZV9jaGFyYWN0ZXI7CisJCWxhc3QgdW5sZXNzIGRlZmluZWQgJGxpbmU7CisJCWlmICgkbGluZSkgeworCQkJaWYgKCRsaW5lID1+IC9eeS9pKSB7CisJCQkJJGh1bmtbJGl4XXtVU0V9ID0gMTsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXm4vaSkgeworCQkJCSRodW5rWyRpeF17VVNFfSA9IDA7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15hL2kpIHsKKwkJCQl3aGlsZSAoJGl4IDwgJG51bSkgeworCQkJCQlpZiAoIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KSB7CisJCQkJCQkkaHVua1skaXhde1VTRX0gPSAxOworCQkJCQl9CisJCQkJCSRpeCsrOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eZyguKikvKSB7CisJCQkJbXkgJHJlc3BvbnNlID0gJDE7CisJCQkJdW5sZXNzICgkb3RoZXIgPX4gL2cvKSB7CisJCQkJCWVycm9yX21zZyBfXygiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIik7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCW15ICRubyA9ICRpeCA+IDEwID8gJGl4IC0gMTAgOiAwOworCQkJCXdoaWxlICgkcmVzcG9uc2UgZXEgJycpIHsKKwkJCQkJJG5vID0gZGlzcGxheV9odW5rcyhcQGh1bmssICRubyk7CisJCQkJCWlmICgkbm8gPCAkbnVtKSB7CisJCQkJCQlwcmludCBfXygiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXByaW50IF9fKCJnbyB0byB3aGljaCBodW5rPyAiKTsKKwkJCQkJfQorCQkJCQkkcmVzcG9uc2UgPSA8U1RESU4+OworCQkJCQlpZiAoIWRlZmluZWQgJHJlc3BvbnNlKSB7CisJCQkJCQkkcmVzcG9uc2UgPSAnJzsKKwkJCQkJfQorCQkJCQljaG9tcCAkcmVzcG9uc2U7CisJCQkJfQorCQkJCWlmICgkcmVzcG9uc2UgIX4gL15ccypcZCtccyokLykgeworCQkJCQllcnJvcl9tc2cgc3ByaW50ZihfXygiSW52YWxpZCBudW1iZXI6ICclcydcbiIpLAorCQkJCQkJCSAgICAgJHJlc3BvbnNlKTsKKwkJCQl9IGVsc2lmICgwIDwgJHJlc3BvbnNlICYmICRyZXNwb25zZSA8PSAkbnVtKSB7CisJCQkJCSRpeCA9ICRyZXNwb25zZSAtIDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJZXJyb3JfbXNnIHNwcmludGYoX19uKCJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIsCisJCQkJCQkJICAgICAgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS5cbiIsICRudW0pLCAkbnVtKTsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmQvaSkgeworCQkJCXdoaWxlICgkaXggPCAkbnVtKSB7CisJCQkJCWlmICghZGVmaW5lZCAkaHVua1skaXhde1VTRX0pIHsKKwkJCQkJCSRodW5rWyRpeF17VVNFfSA9IDA7CisJCQkJCX0KKwkJCQkJJGl4Kys7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15xL2kpIHsKKwkJCQlmb3IgKCRpID0gMDsgJGkgPCAkbnVtOyAkaSsrKSB7CisJCQkJCWlmICghZGVmaW5lZCAkaHVua1skaV17VVNFfSkgeworCQkJCQkJJGh1bmtbJGlde1VTRX0gPSAwOworCQkJCQl9CisJCQkJfQorCQkJCSRxdWl0ID0gMTsKKwkJCQlsYXN0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IG18Xi8oLiopfCkgeworCQkJCW15ICRyZWdleCA9ICQxOworCQkJCXVubGVzcyAoJG90aGVyID1+IG18L3wpIHsKKwkJCQkJZXJyb3JfbXNnIF9fKCJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIpOworCQkJCQluZXh0OworCQkJCX0KKwkJCQlpZiAoJHJlZ2V4IGVxICIiKSB7CisJCQkJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgX18oInNlYXJjaCBmb3IgcmVnZXg/ICIpOworCQkJCQkkcmVnZXggPSA8U1RESU4+OworCQkJCQlpZiAoZGVmaW5lZCAkcmVnZXgpIHsKKwkJCQkJCWNob21wICRyZWdleDsKKwkJCQkJfQorCQkJCX0KKwkJCQlteSAkc2VhcmNoX3N0cmluZzsKKwkJCQlldmFsIHsKKwkJCQkJJHNlYXJjaF9zdHJpbmcgPSBxcnskcmVnZXh9bTsKKwkJCQl9OworCQkJCWlmICgkQCkgeworCQkJCQlteSAoJGVyciwkZXhwKSA9ICgkQCwgJDEpOworCQkJCQkkZXJyID1+IHMvIGF0IC4qZ2l0LWFkZC0taW50ZXJhY3RpdmUgbGluZSBcZCssIDxTVERJTj4gbGluZSBcZCsuKiQvLzsKKwkJCQkJZXJyb3JfbXNnIHNwcmludGYoX18oIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIiksICRleHAsICRlcnIpOworCQkJCQluZXh0OworCQkJCX0KKwkJCQlteSAkaXkgPSAkaXg7CisJCQkJd2hpbGUgKDEpIHsKKwkJCQkJbXkgJHRleHQgPSBqb2luICgiIiwgQHskaHVua1skaXlde1RFWFR9fSk7CisJCQkJCWxhc3QgaWYgKCR0ZXh0ID1+ICRzZWFyY2hfc3RyaW5nKTsKKwkJCQkJJGl5Kys7CisJCQkJCSRpeSA9IDAgaWYgKCRpeSA+PSAkbnVtKTsKKwkJCQkJaWYgKCRpeCA9PSAkaXkpIHsKKwkJCQkJCWVycm9yX21zZyBfXygiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iKTsKKwkJCQkJCWxhc3Q7CisJCQkJCX0KKwkJCQl9CisJCQkJJGl4ID0gJGl5OworCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15LLykgeworCQkJCWlmICgkb3RoZXIgPX4gL0svKSB7CisJCQkJCSRpeC0tOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZXJyb3JfbXNnIF9fKCJObyBwcmV2aW91cyBodW5rXG4iKTsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXkovKSB7CisJCQkJaWYgKCRvdGhlciA9fiAvSi8pIHsKKwkJCQkJJGl4Kys7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllcnJvcl9tc2cgX18oIk5vIG5leHQgaHVua1xuIik7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15rLykgeworCQkJCWlmICgkb3RoZXIgPX4gL2svKSB7CisJCQkJCXdoaWxlICgxKSB7CisJCQkJCQkkaXgtLTsKKwkJCQkJCWxhc3QgaWYgKCEkaXggfHwKKwkJCQkJCQkgIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZXJyb3JfbXNnIF9fKCJObyBwcmV2aW91cyBodW5rXG4iKTsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmovKSB7CisJCQkJaWYgKCRvdGhlciAhfiAvai8pIHsKKwkJCQkJZXJyb3JfbXNnIF9fKCJObyBuZXh0IGh1bmtcbiIpOworCQkJCQluZXh0OworCQkJCX0KKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXnMvKSB7CisJCQkJdW5sZXNzICgkb3RoZXIgPX4gL3MvKSB7CisJCQkJCWVycm9yX21zZyBfXygiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIpOworCQkJCQluZXh0OworCQkJCX0KKwkJCQlteSBAc3BsaXQgPSBzcGxpdF9odW5rKCRodW5rWyRpeF17VEVYVH0sICRodW5rWyRpeF17RElTUExBWX0pOworCQkJCWlmICgxIDwgQHNwbGl0KSB7CisJCQkJCXByaW50IGNvbG9yZWQgJGhlYWRlcl9jb2xvciwgc3ByaW50ZigKKwkJCQkJCV9fbigiU3BsaXQgaW50byAlZCBodW5rLlxuIiwKKwkJCQkJCSAgICAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIsCisJCQkJCQkgICAgc2NhbGFyKEBzcGxpdCkpLCBzY2FsYXIoQHNwbGl0KSk7CisJCQkJfQorCQkJCXNwbGljZSAoQGh1bmssICRpeCwgMSwgQHNwbGl0KTsKKwkJCQkkbnVtID0gc2NhbGFyIEBodW5rOworCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15lLykgeworCQkJCXVubGVzcyAoJG90aGVyID1+IC9lLykgeworCQkJCQllcnJvcl9tc2cgX18oIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmtcbiIpOworCQkJCQluZXh0OworCQkJCX0KKwkJCQlteSAkbmV3aHVuayA9IGVkaXRfaHVua19sb29wKCRoZWFkLCBcQGh1bmssICRpeCk7CisJCQkJaWYgKGRlZmluZWQgJG5ld2h1bmspIHsKKwkJCQkJc3BsaWNlIEBodW5rLCAkaXgsIDEsICRuZXdodW5rOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCWhlbHBfcGF0Y2hfY21kKCRvdGhlcik7CisJCQkJbmV4dDsKKwkJCX0KKwkJCSMgc29mdCBpbmNyZW1lbnQKKwkJCXdoaWxlICgxKSB7CisJCQkJJGl4Kys7CisJCQkJbGFzdCBpZiAoJGl4ID49ICRudW0gfHwKKwkJCQkJICFkZWZpbmVkICRodW5rWyRpeF17VVNFfSk7CisJCQl9CisJCX0KKwl9CisKKwlAaHVuayA9IGNvYWxlc2NlX292ZXJsYXBwaW5nX2h1bmtzKEBodW5rKTsKKworCW15ICRuX2xvZnMgPSAwOworCW15IEByZXN1bHQgPSAoKTsKKwlmb3IgKEBodW5rKSB7CisJCWlmICgkXy0+e1VTRX0pIHsKKwkJCXB1c2ggQHJlc3VsdCwgQHskXy0+e1RFWFR9fTsKKwkJfQorCX0KKworCWlmIChAcmVzdWx0KSB7CisJCW15IEBwYXRjaCA9IHJlYXNzZW1ibGVfcGF0Y2goJGhlYWQtPntURVhUfSwgQHJlc3VsdCk7CisJCW15ICRhcHBseV9yb3V0aW5lID0gJHBhdGNoX21vZGVfZmxhdm91cntBUFBMWX07CisJCSYkYXBwbHlfcm91dGluZShAcGF0Y2gpOworCQlyZWZyZXNoKCk7CisJfQorCisJcHJpbnQgIlxuIjsKKwlyZXR1cm4gJHF1aXQ7Cit9CisKK3N1YiBkaWZmX2NtZCB7CisJbXkgQG1vZHMgPSBsaXN0X21vZGlmaWVkKCdpbmRleC1vbmx5Jyk7CisJQG1vZHMgPSBncmVwIHsgISgkXy0+e0JJTkFSWX0pIH0gQG1vZHM7CisJcmV0dXJuIGlmICghQG1vZHMpOworCW15IChAdGhlbSkgPSBsaXN0X2FuZF9jaG9vc2UoeyBQUk9NUFQgPT4gX18oJ1JldmlldyBkaWZmJyksCisJCQkJICAgICBJTU1FRElBVEUgPT4gMSwKKwkJCQkgICAgIEhFQURFUiA9PiAkc3RhdHVzX2hlYWQsIH0sCisJCQkJICAgQG1vZHMpOworCXJldHVybiBpZiAoIUB0aGVtKTsKKwlteSAkcmVmZXJlbmNlID0gKGlzX2luaXRpYWxfY29tbWl0KCkpID8gZ2V0X2VtcHR5X3RyZWUoKSA6ICdIRUFEJzsKKwlzeXN0ZW0ocXcoZ2l0IGRpZmYgLXAgLS1jYWNoZWQpLCAkcmVmZXJlbmNlLCAnLS0nLAorCQltYXAgeyAkXy0+e1ZBTFVFfSB9IEB0aGVtKTsKK30KKworc3ViIHF1aXRfY21kIHsKKwlwcmludCBfXygiQnllLlxuIik7CisJZXhpdCgwKTsKK30KKworc3ViIGhlbHBfY21kIHsKKyMgVFJBTlNMQVRPUlM6IHBsZWFzZSBkbyBub3QgdHJhbnNsYXRlIHRoZSBjb21tYW5kIG5hbWVzCisjICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKwlwcmludCBjb2xvcmVkICRoZWxwX2NvbG9yLCBfXyA8PCdFT0YnIDsKK3N0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlcwordXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcworcmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uCitwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5CitkaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgKK2FkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMKK0VPRgorfQorCitzdWIgcHJvY2Vzc19hcmdzIHsKKwlyZXR1cm4gdW5sZXNzIEBBUkdWOworCW15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKwlpZiAoJGFyZyA9fiAvLS1wYXRjaCg/Oj0oLiopKT8vKSB7CisJCWlmIChkZWZpbmVkICQxKSB7CisJCQlpZiAoJDEgZXEgJ3Jlc2V0JykgeworCQkJCSRwYXRjaF9tb2RlID0gJ3Jlc2V0X2hlYWQnOworCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJ0hFQUQnOworCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgX18oIm1pc3NpbmcgLS0iKTsKKwkJCQlpZiAoJGFyZyBuZSAnLS0nKSB7CisJCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJGFyZzsKKwkJCQkJJHBhdGNoX21vZGUgPSAoJGFyZyBlcSAnSEVBRCcgPworCQkJCQkJICAgICAgICdyZXNldF9oZWFkJyA6ICdyZXNldF9ub3RoZWFkJyk7CisJCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgX18oIm1pc3NpbmcgLS0iKTsKKwkJCQl9CisJCQl9IGVsc2lmICgkMSBlcSAnY2hlY2tvdXQnKSB7CisJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOworCQkJCWlmICgkYXJnIGVxICctLScpIHsKKwkJCQkJJHBhdGNoX21vZGUgPSAnY2hlY2tvdXRfaW5kZXgnOworCQkJCX0gZWxzZSB7CisJCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJGFyZzsKKwkJCQkJJHBhdGNoX21vZGUgPSAoJGFyZyBlcSAnSEVBRCcgPworCQkJCQkJICAgICAgICdjaGVja291dF9oZWFkJyA6ICdjaGVja291dF9ub3RoZWFkJyk7CisJCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgX18oIm1pc3NpbmcgLS0iKTsKKwkJCQl9CisJCQl9IGVsc2lmICgkMSBlcSAnd29ya3RyZWUnKSB7CisJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSBfXygibWlzc2luZyAtLSIpOworCQkJCWlmICgkYXJnIGVxICctLScpIHsKKwkJCQkJJHBhdGNoX21vZGUgPSAnY2hlY2tvdXRfaW5kZXgnOworCQkJCX0gZWxzZSB7CisJCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJGFyZzsKKwkJCQkJJHBhdGNoX21vZGUgPSAoJGFyZyBlcSAnSEVBRCcgPworCQkJCQkJICAgICAgICd3b3JrdHJlZV9oZWFkJyA6ICd3b3JrdHJlZV9ub3RoZWFkJyk7CisJCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgX18oIm1pc3NpbmcgLS0iKTsKKwkJCQl9CisJCQl9IGVsc2lmICgkMSBlcSAnc3RhZ2UnIG9yICQxIGVxICdzdGFzaCcpIHsKKwkJCQkkcGF0Y2hfbW9kZSA9ICQxOworCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgX18oIm1pc3NpbmcgLS0iKTsKKwkJCX0gZWxzZSB7CisJCQkJZGllIHNwcmludGYoX18oInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIpLCAkMSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkkcGF0Y2hfbW9kZSA9ICdzdGFnZSc7CisJCQkkYXJnID0gc2hpZnQgQEFSR1Ygb3IgZGllIF9fKCJtaXNzaW5nIC0tIik7CisJCX0KKwkJZGllIHNwcmludGYoX18oImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIpLAorCQkJICAgICAgICRhcmcpIHVubGVzcyAkYXJnIGVxICItLSI7CisJCSVwYXRjaF9tb2RlX2ZsYXZvdXIgPSAleyRwYXRjaF9tb2Rlc3skcGF0Y2hfbW9kZX19OworCQkkcGF0Y2hfbW9kZV9vbmx5ID0gMTsKKwl9CisJZWxzaWYgKCRhcmcgbmUgIi0tIikgeworCQlkaWUgc3ByaW50ZihfXygiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIiksICRhcmcpOworCX0KK30KKworc3ViIG1haW5fbG9vcCB7CisJbXkgQGNtZCA9IChbICdzdGF0dXMnLCBcJnN0YXR1c19jbWQsIF0sCisJCSAgIFsgJ3VwZGF0ZScsIFwmdXBkYXRlX2NtZCwgXSwKKwkJICAgWyAncmV2ZXJ0JywgXCZyZXZlcnRfY21kLCBdLAorCQkgICBbICdhZGQgdW50cmFja2VkJywgXCZhZGRfdW50cmFja2VkX2NtZCwgXSwKKwkJICAgWyAncGF0Y2gnLCBcJnBhdGNoX3VwZGF0ZV9jbWQsIF0sCisJCSAgIFsgJ2RpZmYnLCBcJmRpZmZfY21kLCBdLAorCQkgICBbICdxdWl0JywgXCZxdWl0X2NtZCwgXSwKKwkJICAgWyAnaGVscCcsIFwmaGVscF9jbWQsIF0sCisJKTsKKwl3aGlsZSAoMSkgeworCQlteSAoJGl0KSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiBfXygnV2hhdCBub3cnKSwKKwkJCQkJICAgICBTSU5HTEVUT04gPT4gMSwKKwkJCQkJICAgICBMSVNUX0ZMQVQgPT4gNCwKKwkJCQkJICAgICBIRUFERVIgPT4gX18oJyoqKiBDb21tYW5kcyAqKionKSwKKwkJCQkJICAgICBPTl9FT0YgPT4gXCZxdWl0X2NtZCwKKwkJCQkJICAgICBJTU1FRElBVEUgPT4gMSB9LCBAY21kKTsKKwkJaWYgKCRpdCkgeworCQkJZXZhbCB7CisJCQkJJGl0LT5bMV0tPigpOworCQkJfTsKKwkJCWlmICgkQCkgeworCQkJCXByaW50ICIkQCI7CisJCQl9CisJCX0KKwl9Cit9CisKK3Byb2Nlc3NfYXJncygpOworcmVmcmVzaCgpOworaWYgKCRwYXRjaF9tb2RlX29ubHkpIHsKKwlwYXRjaF91cGRhdGVfY21kKCk7Cit9CitlbHNlIHsKKwlzdGF0dXNfY21kKCk7CisJbWFpbl9sb29wKCk7Cit9CmRpZmYgLS1naXQgYS9naXQtYXJjaGltcG9ydC5wZXJsIGIvZ2l0LWFyY2hpbXBvcnQucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iN2MxNzNjCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWFyY2hpbXBvcnQucGVybApAQCAtMCwwICsxLDExMzQgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBUaGlzIHRvb2wgaXMgY29weXJpZ2h0IChjKSAyMDA1LCBNYXJ0aW4gTGFuZ2hvZmYuCisjIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHbnUgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyMKKyMgVGhlIGJhc2ljIGlkZWEgaXMgdG8gd2FsayB0aGUgb3V0cHV0IG9mIHRsYSBhYnJvd3NlLAorIyBmZXRjaCB0aGUgY2hhbmdlc2V0cyBhbmQgYXBwbHkgdGhlbS4KKyMKKworPWhlYWQxIEludm9jYXRpb24KKworICAgIGdpdCBhcmNoaW1wb3J0IFsgLWggXSBbIC12IF0gWyAtbyBdIFsgLWEgXSBbIC1mIF0gWyAtVCBdCisJWyAtRCBkZXB0aF0gWyAtdCB0ZW1wZGlyIF0gPGFyY2hpdmU+LzxicmFuY2g+IFsgPGFyY2hpdmU+LzxicmFuY2g+IF0KKworSW1wb3J0cyBhIHByb2plY3QgZnJvbSBvbmUgb3IgbW9yZSBBcmNoIHJlcG9zaXRvcmllcy4gSXQgd2lsbCBmb2xsb3cgYnJhbmNoZXMKK2FuZCByZXBvc2l0b3JpZXMgd2l0aGluIHRoZSBuYW1lc3BhY2VzIGRlZmluZWQgYnkgdGhlIDxhcmNoaXZlL2JyYW5jaD4KK3BhcmFtZXRlcnMgc3VwcGxpZWQuIElmIGl0IGNhbm5vdCBmaW5kIHRoZSByZW1vdGUgYnJhbmNoIGEgbWVyZ2UgY29tZXMgZnJvbQoraXQgd2lsbCBqdXN0IGltcG9ydCBpdCBhcyBhIHJlZ3VsYXIgY29tbWl0LiBJZiBpdCBjYW4gZmluZCBpdCwgaXQgd2lsbCBtYXJrIGl0CithcyBhIG1lcmdlIHdoZW5ldmVyIHBvc3NpYmxlLgorCitTZWUgbWFuICgxKSBnaXQtYXJjaGltcG9ydCBmb3IgbW9yZSBkZXRhaWxzLgorCis9aGVhZDEgVE9ETworCisgLSBjcmVhdGUgdGFnIG9iamVjdHMgaW5zdGVhZCBvZiByZWYgdGFncworIC0gYXVkaXQgc2hlbGwtZXNjYXBpbmcgb2YgZmlsZW5hbWVzCisgLSBoaWRlIG91ciBwcml2YXRlIHRhZ3Mgc29tZXdoZXJlIHNtYXJ0ZXIKKyAtIGZpbmQgYSB3YXkgdG8gbWFrZSAiY2F0ICpwYXRjaGVzIHwgcGF0Y2giIHNhZmUgZXZlbiB3aGVuIHBhdGNoZmlsZXMgYXJlIG1pc3NpbmcgbmV3bGluZXMKKyAtIHNvcnQgYW5kIGFwcGx5IHBhdGNoZXMgYnkgZ3JhcGhpbmcgYW5jZXN0cnkgcmVsYXRpb25zIGluc3RlYWQgb2YganVzdAorICAgcmVseWluZyBpbiBkYXRlcyBzdXBwbGllZCBpbiB0aGUgY2hhbmdlc2V0IGl0c2VsZi4KKyAgIHRsYSBhbmNlc3RyeS1ncmFwaCAtbSBjb3VsZCBiZSBoZWxwZnVsIGhlcmUuLi4KKworPWhlYWQxIERldmVsIHRyaWNrcworCitBZGQgcHJpbnQgaW4gZnJvbnQgb2YgdGhlIHNoZWxsIGNvbW1hbmRzIGludm9rZWQgdmlhIGJhY2t0aWNrcy4KKworPWhlYWQxIERldmVsIE5vdGVzCisKK1RoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aGVyZSBBcmNoIGFuZCBnaXQgdGVybWlub2xvZ3kgYXJlIGludGVybWl4ZWQKK2FuZCBwb3RlbnRpYWxseSBjb25mdXNlZC4KKworVGhlIG5vdGlvbiBvZiBhICJicmFuY2giIGluIGdpdCBpcyBhcHByb3hpbWF0ZWx5IGVxdWl2YWxlbnQgdG8KK2EgImFyY2hpdmUvY2F0ZWdvcnktLWJyYW5jaC0tdmVyc2lvbiIgaW4gQXJjaC4gIEFsc28sIGl0IHNob3VsZCBiZSBub3RlZAordGhhdCB0aGUgIi0tYnJhbmNoIiBwb3J0aW9uIG9mICJhcmNoaXZlL2NhdGVnb3J5LS1icmFuY2gtLXZlcnNpb24iIGlzIHJlYWxseQorb3B0aW9uYWwgaW4gQXJjaCBhbHRob3VnaCBub3QgbWFueSBwZW9wbGUgKG5vciB0b29scyEpIHNlZW0gdG8ga25vdyB0aGlzLgorVGhpcyBtZWFucyB0aGF0ICJhcmNoaXZlL2NhdGVnb3J5LS12ZXJzaW9uIiBpcyBhbHNvIGEgdmFsaWQgImJyYW5jaCIKK2luIGdpdCB0ZXJtcy4KKworV2UgYWx3YXlzIHJlZmVyIHRvIEFyY2ggbmFtZXMgYnkgdGhlaXIgZnVsbHkgcXVhbGlmaWVkIHZhcmlhbnQgKHdoaWNoCittZWFucyB0aGUgImFyY2hpdmUiIG5hbWUgaXMgcHJlZml4ZWQuCisKK0ZvciBwZW9wbGUgdW5mYW1pbGlhciB3aXRoIEFyY2gsIGFuICJhcmNoaXZlIiBpcyB0aGUgdGVybSBmb3IgInJlcG9zaXRvcnkiLAorYW5kIGNhbiBjb250YWluIG11bHRpcGxlLCB1bnJlbGF0ZWQgYnJhbmNoZXMuCisKKz1jdXQKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHZXRvcHQ6OlN0ZDsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwordXNlIEZpbGU6OlBhdGggcXcobWtwYXRoIHJtdHJlZSk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7Cit1c2UgRGF0YTo6RHVtcGVyIHF3LyBEdW1wZXIgLzsKK3VzZSBJUEM6Ok9wZW4yOworCiskU0lHeydQSVBFJ309IklHTk9SRSI7CiskRU5WeydUWid9PSJVVEMiOworCitteSAkZ2l0X2RpciA9ICRFTlZ7IkdJVF9ESVIifSB8fCAiLmdpdCI7CiskRU5WeyJHSVRfRElSIn0gPSAkZ2l0X2RpcjsKK215ICRwdGFnX2RpciA9ICIkZ2l0X2Rpci9hcmNoaW1wb3J0L3RhZ3MiOworCitvdXIoJG9wdF9oLCRvcHRfZiwkb3B0X3YsJG9wdF9ULCRvcHRfdCwkb3B0X0QsJG9wdF9hLCRvcHRfbyk7CisKK3N1YiB1c2FnZSgpIHsKKyAgICBwcmludCBTVERFUlIgPDxFTkQ7Cit1c2FnZTogZ2l0IGFyY2hpbXBvcnQgICAgICMgZmV0Y2gvdXBkYXRlIEdJVCBmcm9tIEFyY2gKKyAgICAgICBbIC1oIF0gWyAtdiBdIFsgLW8gXSBbIC1hIF0gWyAtZiBdIFsgLVQgXSBbIC1EIGRlcHRoIF0gWyAtdCB0ZW1wZGlyIF0KKyAgICAgICByZXBvc2l0b3J5L2FyY2gtYnJhbmNoIFsgcmVwb3NpdG9yeS9hcmNoLWJyYW5jaF0gLi4uCitFTkQKKyAgICBleGl0KDEpOworfQorCitnZXRvcHRzKCJmVGh2YXQ6RDoiKSBvciB1c2FnZSgpOwordXNhZ2UgaWYgJG9wdF9oOworCitAQVJHViA+PSAxIG9yIHVzYWdlKCk7CisjICRhcmNoX2JyYW5jaGVzOgorIyB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGtleXM6CisjICAgPTEgLSBBcmNoIHZlcnNpb24gLyBnaXQgJ2JyYW5jaCcgZGV0ZWN0ZWQgdmlhIGFicm93c2Ugb24gYSBsaW1pdAorIyAgID4xIC0gQXJjaCB2ZXJzaW9uIC8gZ2l0ICdicmFuY2gnIG9mIGFuIGF1eGlsaWFyeSBicmFuY2ggd2UndmUgbWVyZ2VkCitteSAlYXJjaF9icmFuY2hlcyA9IG1hcCB7IG15ICRicmFuY2ggPSAkXzsgJGJyYW5jaCA9fiBzLzpbXjpdKiQvLzsgJGJyYW5jaCA9PiAxIH0gQEFSR1Y7CisKKyMgJGJyYW5jaF9uYW1lX21hcDoKKyMgbWFwcyBhcmNoIGJyYW5jaGVzIHRvIGdpdCBicmFuY2ggbmFtZXMKK215ICVicmFuY2hfbmFtZV9tYXAgPSBtYXAgeyBtL14oLiopOihbXjpdKikkLzsgJDEgPT4gJDIgfSBncmVwIHsgbS86LyB9IEBBUkdWOworCiskRU5WeydUTVBESVInfSA9ICRvcHRfdCBpZiAkb3B0X3Q7ICMgJEVOVntUTVBESVJ9IHdpbGwgYWZmZWN0IHRlbXBkaXIoKSBjYWxsczoKK215ICR0bXAgPSB0ZW1wZGlyKCdnaXQtYXJjaGltcG9ydC1YWFhYWFgnLCBUTVBESVIgPT4gMSwgQ0xFQU5VUCA9PiAxKTsKKyRvcHRfdiAmJiBwcmludCAiKyBVc2luZyAkdG1wIGFzIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiI7CisKK3VubGVzcyAoLWQgJGdpdF9kaXIpIHsgIyBpbml0aWFsIGltcG9ydCBuZWVkcyBlbXB0eSBkaXJlY3RvcnkKKyAgICBvcGVuZGlyIERJUiwgJy4nIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW4gY3VycmVudCBkaXJlY3Rvcnk6ICQhXG4iOworICAgIHdoaWxlIChteSAkZW50cnkgPSByZWFkZGlyIERJUikgeworICAgICAgICAkZW50cnkgPX4gL15cLlwuPyQvIG9yCisgICAgICAgICAgICBkaWUgIkluaXRpYWwgaW1wb3J0IG5lZWRzIGFuIGVtcHR5IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4iCisgICAgfQorICAgIGNsb3NlZGlyIERJUgorfQorCitteSAkZGVmYXVsdF9hcmNoaXZlOwkJIyBkZWZhdWx0IEFyY2ggYXJjaGl2ZQorbXkgJXJlYWNoYWJsZSA9ICgpOyAgICAgICAgICAgICAjIEFyY2ggcmVwb3NpdG9yaWVzIHdlIGNhbiBhY2Nlc3MKK215ICV1bnJlYWNoYWJsZSA9ICgpOyAgICAgICAgICAgIyBBcmNoIHJlcG9zaXRvcmllcyB3ZSBjYW4ndCBhY2Nlc3MgOjwKK215IEBwc2V0cyAgPSAoKTsgICAgICAgICAgICAgICAgIyB0aGUgY29sbGVjdGlvbgorbXkgJXBzZXRzICA9ICgpOyAgICAgICAgICAgICAgICAjIHRoZSBjb2xsZWN0aW9uLCBieSBuYW1lCitteSAlc3RhdHMgID0gKAkJCSMgVHJhY2sgd2hpY2ggc3RyYXRlZ3kgd2UgdXNlZCB0byBpbXBvcnQ6CisJZ2V0X3RhZyA9PiAwLCByZXBsYXkgPT4gMCwgZ2V0X25ldyA9PiAwLCBnZXRfZGVsdGEgPT4gMCwKKyAgICAgICAgc2ltcGxlX2NoYW5nZXNldCA9PiAwLCBpbXBvcnRfb3JfdGFnID0+IDAKKyk7CisKK215ICVycHRhZ3MgPSAoKTsgICAgICAgICAgICAgICAgIyBteSByZXZlcnNlIHByaXZhdGUgdGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvIG1hcCBhIFNIQTEgdG8gYSBjb21taXRpZAorbXkgJFRMQSA9ICRFTlZ7J0FSQ0hfQ0xJRU5UJ30gfHwgJ3RsYSc7CisKK3N1YiBkb19hYnJvd3NlIHsKKyAgICBteSAkc3RhZ2UgPSBzaGlmdDsKKyAgICB3aGlsZSAobXkgKCRsaW1pdCwgJGxldmVsKSA9IGVhY2ggJWFyY2hfYnJhbmNoZXMpIHsKKyAgICAgICAgbmV4dCB1bmxlc3MgJGxldmVsID09ICRzdGFnZTsKKworCW9wZW4gQUJST1dTRSwgIiRUTEEgYWJyb3dzZSAtZmtEIC0tbWVyZ2VzICRsaW1pdCB8IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBkaWUgIlByb2JsZW1zIHdpdGggdGxhIGFicm93c2U6ICQhIjsKKworICAgICAgICBteSAlcHMgICAgICAgID0gKCk7ICAgICAgICAgIyB0aGUgY3VycmVudCBvbmUKKyAgICAgICAgbXkgJGxhc3RzZWVuICA9ICcnOworCisgICAgICAgIHdoaWxlICg8QUJST1dTRT4pIHsKKyAgICAgICAgICAgIGNob21wOworCisgICAgICAgICAgICAjIGZpcnN0IHJlY29yZCBwYWRkZWQgdyA4IHNwYWNlcworICAgICAgICAgICAgaWYgKHMvXlxzezh9XGIvLykgeworICAgICAgICAgICAgICAgIG15ICgkaWQsICR0eXBlKSA9IHNwbGl0KG0vXHMrLywgJF8sIDIpOworCisgICAgICAgICAgICAgICAgbXkgJWxhc3RfcHM7CisgICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgcmVjb3JkIHdlIGp1c3QgY2FwdHVyZWQKKyAgICAgICAgICAgICAgICBpZiAoJXBzICYmICFleGlzdHMgJHBzZXRzeyAkcHN7aWR9IH0pIHsKKyAgICAgICAgICAgICAgICAgICAgJWxhc3RfcHMgPSAlcHM7ICMgYnJlYWsgcmVmZXJlbmNlcworICAgICAgICAgICAgICAgICAgICBwdXNoIChAcHNldHMsIFwlbGFzdF9wcyk7CisgICAgICAgICAgICAgICAgICAgICRwc2V0c3sgJGxhc3RfcHN7aWR9IH0gPSBcJWxhc3RfcHM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkgJGJyYW5jaCA9IGV4dHJhY3RfdmVyc2lvbm5hbWUoJGlkKTsKKyAgICAgICAgICAgICAgICAlcHMgPSAoIGlkID0+ICRpZCwgYnJhbmNoID0+ICRicmFuY2ggKTsKKyAgICAgICAgICAgICAgICBpZiAoJWxhc3RfcHMgJiYgKCRsYXN0X3Bze2JyYW5jaH0gZXEgJGJyYW5jaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgJHBze3BhcmVudF9pZH0gPSAkbGFzdF9wc3tpZH07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgJGFyY2hfYnJhbmNoZXN7JGJyYW5jaH0gPSAxOworICAgICAgICAgICAgICAgICRsYXN0c2VlbiA9ICdpZCc7CisKKyAgICAgICAgICAgICAgICAjIGRlYWwgd2l0aCB0eXBlcyAoc2hvdWxkIHdvcmsgd2l0aCBiYXogb3IgdGxhKToKKyAgICAgICAgICAgICAgICBpZiAoJHR5cGUgPX4gbS9cKC4qY2hhbmdlc2V0XCkvKSB7CisgICAgICAgICAgICAgICAgICAgICRwc3t0eXBlfSA9ICdzJzsKKyAgICAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSA9fiAvXCguKmltcG9ydFwpLykgeworICAgICAgICAgICAgICAgICAgICAkcHN7dHlwZX0gPSAnaSc7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUgPX4gbS9cKHRhZy4qPyhcUytcQFxTKykuKj9cKS8pIHsKKyAgICAgICAgICAgICAgICAgICAgJHBze3R5cGV9ID0gJ3QnOworICAgICAgICAgICAgICAgICAgICAjIHJlYWQgd2hpY2ggcmV2aXNpb24gd2UndmUgdGFnZ2VkIHdoZW4gd2UgcGFyc2UgdGhlIGxvZworICAgICAgICAgICAgICAgICAgICAkcHN7dGFnfSAgPSAkMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3YXJuICJVbmtub3duIHR5cGUgJHR5cGUiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICRhcmNoX2JyYW5jaGVzeyRicmFuY2h9ID0gMTsKKyAgICAgICAgICAgICAgICAkbGFzdHNlZW4gPSAnaWQnOworICAgICAgICAgICAgfSBlbHNpZiAocy9eXHN7MTB9Ly8pIHsKKyAgICAgICAgICAgICAgICAjIDEwIGxlYWRpbmcgc3BhY2VzIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAjIGluZGljYXRlIGNvbW1pdCBtZXRhZGF0YQorCisgICAgICAgICAgICAgICAgIyBkYXRlCisgICAgICAgICAgICAgICAgaWYgKCRsYXN0c2VlbiBlcSAnaWQnICYmIG0vXihcZHs0fS1cZFxkLVxkXGQgXGRcZDpcZFxkOlxkXGQpLyl7CisgICAgICAgICAgICAgICAgICAgICRwc3tkYXRlfSAgID0gJDE7CisgICAgICAgICAgICAgICAgICAgICRsYXN0c2VlbiA9ICdkYXRlJzsKKyAgICAgICAgICAgICAgICB9IGVsc2lmICgkXyBlcSAnbWVyZ2VzIGluOicpIHsKKyAgICAgICAgICAgICAgICAgICAgJHBze21lcmdlc30gPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgJGxhc3RzZWVuID0gJ21lcmdlcyc7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGxhc3RzZWVuIGVxICdtZXJnZXMnICYmIHMvXlxzezJ9Ly8pIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGlkID0gJF87CisgICAgICAgICAgICAgICAgICAgIHB1c2ggKEB7JHBze21lcmdlc319LCAkaWQpOworCisgICAgICAgICAgICAgICAgICAgICMgYWdncmVzc2l2ZSBicmFuY2ggZmluZGluZzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRvcHRfRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGJyYW5jaCA9IGV4dHJhY3RfdmVyc2lvbm5hbWUoJGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ICRyZXBvID0gZXh0cmFjdF9yZXBvbmFtZSgkYnJhbmNoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyY2hpdmVfcmVhY2hhYmxlKCRyZXBvKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZCAkYXJjaF9icmFuY2hlc3skYnJhbmNofSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcmNoX2JyYW5jaGVzeyRicmFuY2h9ID0gJHN0YWdlICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHdhcm4gIm1vcmUgbWV0YWRhdGEgYWZ0ZXIgbWVyZ2VzIT86ICRfXG4iIHVubGVzcyAvXlxzKiQvOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICglcHMgJiYgIWV4aXN0cyAkcHNldHN7ICRwc3tpZH0gfSkgeworICAgICAgICAgICAgbXkgJXRlbXAgPSAlcHM7ICAgICAgICAgIyBicmVhayByZWZlcmVuY2VzCisgICAgICAgICAgICBpZiAoQHBzZXRzICYmICRwc2V0c1skI3BzZXRzXXticmFuY2h9IGVxICRwc3ticmFuY2h9KSB7CisgICAgICAgICAgICAgICAgJHRlbXB7cGFyZW50X2lkfSA9ICRwc2V0c1skI3BzZXRzXXtpZH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoIChAcHNldHMsIFwldGVtcCk7CisgICAgICAgICAgICAkcHNldHN7ICR0ZW1we2lkfSB9ID0gXCV0ZW1wOworICAgICAgICB9CisKKyAgICAgICAgY2xvc2UgQUJST1dTRSBvciBkaWUgIiRUTEEgYWJyb3dzZSBmYWlsZWQgb24gJGxpbWl0XG4iOworICAgIH0KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBlbmQgZm9yZWFjaCAkcm9vdAorCitkb19hYnJvd3NlKDEpOworbXkgJGRlcHRoID0gMjsKKyRvcHRfRCB8fD0gMDsKK3doaWxlICgkZGVwdGggPD0gJG9wdF9EKSB7CisgICAgZG9fYWJyb3dzZSgkZGVwdGgpOworICAgICRkZXB0aCsrOworfQorCisjIyBPcmRlciBwYXRjaGVzIGJ5IHRpbWUKKyMgRklYTUUgc2VlIGlmIHdlIGNhbiBmaW5kIGEgbW9yZSBvcHRpbWFsIHdheSB0byBkbyB0aGlzIGJ5IGdyYXBoaW5nCisjIHRoZSBhbmNlc3RyeSBkYXRhIGFuZCB3YWxraW5nIGl0LCB0aGF0IHdheSB3ZSB3b24ndCBoYXZlIHRvIHJlbHkgb24KKyMgY2xpZW50LXN1cHBsaWVkIGRhdGVzCitAcHNldHMgPSBzb3J0IHskYS0+e2RhdGV9LiRiLT57aWR9IGNtcCAkYi0+e2RhdGV9LiRiLT57aWR9fSBAcHNldHM7CisKKyNwcmludCBEdW1wZXIgXEBwc2V0czsKKworIyMKKyMjIFRPRE8gY2xlYW51cCBpcnJlbGV2YW50IHBhdGNoZXMKKyMjICAgICAgYW5kIHB1dCBhbiBpbml0aWFsIGltcG9ydAorIyMgICAgICBvciBhIGZ1bGwgdGFnCitteSAkaW1wb3J0ID0gMDsKK3VubGVzcyAoLWQgJGdpdF9kaXIpIHsgIyBpbml0aWFsIGltcG9ydAorICAgIGlmICgkcHNldHNbMF17dHlwZX0gZXEgJ2knIHx8ICRwc2V0c1swXXt0eXBlfSBlcSAndCcpIHsKKyAgICAgICAgcHJpbnQgIlN0YXJ0aW5nIGltcG9ydCBmcm9tICRwc2V0c1swXXtpZH1cbiI7CisJYGdpdC1pbml0YDsKKwlkaWUgJCEgaWYgJD87CisJJGltcG9ydCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGllICJOZWVkIHRvIHN0YXJ0IGZyb20gYW4gaW1wb3J0IG9yIGEgdGFnIC0tIGNhbm5vdCB1c2UgJHBzZXRzWzBde2lkfSI7CisgICAgfQorfSBlbHNlIHsgICAgIyBwcm9ncmVzc2luZyBhbiBpbXBvcnQKKyAgICAjIGxvYWQgdGhlIHJwdGFncworICAgIG9wZW5kaXIoRElSLCAkcHRhZ19kaXIpCisJfHwgZGllICJjYW4ndCBvcGVuZGlyOiAkISI7CisgICAgd2hpbGUgKG15ICRmaWxlID0gcmVhZGRpcihESVIpKSB7CisgICAgICAgICMgc2tpcCBub24taW50ZXJlc3RpbmctZmlsZXMKKyAgICAgICAgbmV4dCB1bmxlc3MgLWYgIiRwdGFnX2Rpci8kZmlsZSI7CisKKyAgICAgICAgIyBjb252ZXJ0IGZpcnN0ICctLScgdG8gJy8nIGZyb20gb2xkIGdpdC1hcmNoaW1wb3J0IHRvIHVzZQorICAgICAgICAjIGFzIGFuIGFyY2hpdmVuYW1lL2MtLWItLXYgcHJpdmF0ZSB0YWcKKyAgICAgICAgaWYgKCRmaWxlICF+IG0hLCEpIHsKKyAgICAgICAgICAgIG15ICRvbGRmaWxlID0gJGZpbGU7CisgICAgICAgICAgICAkZmlsZSA9fiBzIS0tISwhOworICAgICAgICAgICAgcHJpbnQgU1RERVJSICJjb252ZXJ0aW5nIG9sZCB0YWcgJG9sZGZpbGUgdG8gJGZpbGVcbiI7CisgICAgICAgICAgICByZW5hbWUoIiRwdGFnX2Rpci8kb2xkZmlsZSIsICIkcHRhZ19kaXIvJGZpbGUiKSBvciBkaWUgJCE7CisgICAgICAgIH0KKwlteSAkc2hhID0gcHRhZygkZmlsZSk7CisJY2hvbXAgJHNoYTsKKwkkcnB0YWdzeyRzaGF9ID0gJGZpbGU7CisgICAgfQorICAgIGNsb3NlZGlyIERJUjsKK30KKworIyBwcm9jZXNzIHBhdGNoc2V0cworIyBleHRyYWN0IHRoZSBBcmNoIHJlcG9zaXRvcnkgbmFtZSAoQXJjaCAiYXJjaGl2ZSIgaW4gQXJjaC1zcGVhaykKK3N1YiBleHRyYWN0X3JlcG9uYW1lIHsKKyAgICBteSAkZnFfY3ZiciA9IHNoaWZ0OyAjIGFyY2hpdmVuYW1lL1tbW1tjYXRlZ29yeV1icmFuY2hddmVyc2lvbl1yZXZpc2lvbl0KKyAgICByZXR1cm4gKHNwbGl0KC9cLy8sICRmcV9jdmJyKSlbMF07Cit9CisKK3N1YiBleHRyYWN0X3ZlcnNpb25uYW1lIHsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgICRuYW1lID1+IHMvLS0oPzpwYXRjaHx2ZXJzaW9uKD86Zml4KT98YmFzZSktXGQrJC8vOworICAgIHJldHVybiAkbmFtZTsKK30KKworIyBjb252ZXJ0IGEgZnVsbHktcXVhbGlmaWVkIHJldmlzaW9uIG9yIHZlcnNpb24gdG8gYSB1bmlxdWUgZGlybmFtZToKKyMgICBub3JtYWxwZXJzb25AeWhidC5uZXQtMDUvbXBkLS11Y2xpbnV4LS0xLS1wYXRjaC0yCisjIGJlY29tZXM6IG5vcm1hbHBlcnNvbkB5aGJ0Lm5ldC0wNSxtcGQtLXVjbGludXgtLTEKKyMKKyMgdGhlIGdpdCBub3Rpb24gb2YgYSBicmFuY2ggaXMgY2xvc2VyIHRvCisjIGFyY2hpdmUvY2F0ZWdvcnktLWJyYW5jaC0tdmVyc2lvbiB0aGFuIGFyY2hpdmUvY2F0ZWdvcnktLWJyYW5jaCwgc28gd2UKKyMgdXNlIHRoaXMgdG8gY29udmVydCB0byBnaXQgYnJhbmNoIG5hbWVzLgorIyBBbHNvLCBrZWVwIGFyY2hpdmUgbmFtZXMgYnV0IHJlcGxhY2UgJy8nIHdpdGggJywnIHNpbmNlIGl0IHdvbid0IHJlcXVpcmUKKyMgc3ViZGlyZWN0b3JpZXMsIGFuZCBpcyBzYWZlciB0aGFuIHN3YXBwaW5nICctLScgd2hpY2ggY291bGQgY29uZnVzZQorIyByZXZlcnNlLW1hcHBpbmcgd2hlbiBkZWFsaW5nIHdpdGggYmFzdGFyZCBicmFuY2hlcyB0aGF0CisjIGFyZSBqdXN0IGFyY2hpdmUvY2F0ZWdvcnktLXZlcnNpb24gIChubyAtLWJyYW5jaCkKK3N1YiB0cmVlX2Rpcm5hbWUgeworICAgIG15ICRyZXZpc2lvbiA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gZXh0cmFjdF92ZXJzaW9ubmFtZSgkcmV2aXNpb24pOworICAgICRuYW1lID1+IHMjLyMsIzsKKyAgICByZXR1cm4gJG5hbWU7Cit9CisKKyMgb2xkIHZlcnNpb25zIG9mIGdpdC1hcmNoaW1wb3J0IGp1c3QgdXNlIHRoZSA8Y2F0ZWdvcnktLWJyYW5jaD4gcGFydDoKK3N1YiBvbGRfc3R5bGVfYnJhbmNobmFtZSB7CisgICAgbXkgJGlkID0gc2hpZnQ7CisgICAgbXkgJHJldCA9IHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ3BhcnNlLXBhY2thZ2UtbmFtZScsJy1wJywkaWQpOworICAgIGNob21wICRyZXQ7CisgICAgcmV0dXJuICRyZXQ7Cit9CisKKypnaXRfZGVmYXVsdF9icmFuY2huYW1lID0gJG9wdF9vID8gKm9sZF9zdHlsZV9icmFuY2huYW1lIDogKnRyZWVfZGlybmFtZTsKKworIyByZXRyaWV2ZSBkZWZhdWx0IGFyY2hpdmUsIHNpbmNlICRicmFuY2hfbmFtZV9tYXAga2V5cyBtaWdodCBub3QgaW5jbHVkZSBpdAorc3ViIGdldF9kZWZhdWx0X2FyY2hpdmUgeworICAgIGlmICghZGVmaW5lZCAkZGVmYXVsdF9hcmNoaXZlKSB7CisgICAgICAgICRkZWZhdWx0X2FyY2hpdmUgPSBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdteS1kZWZhdWx0LWFyY2hpdmUnKTsKKyAgICAgICAgY2hvbXAgJGRlZmF1bHRfYXJjaGl2ZTsKKyAgICB9CisgICAgcmV0dXJuICRkZWZhdWx0X2FyY2hpdmU7Cit9CisKK3N1YiBnaXRfYnJhbmNobmFtZSB7CisgICAgbXkgJHJldmlzaW9uID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBleHRyYWN0X3ZlcnNpb25uYW1lKCRyZXZpc2lvbik7CisKKyAgICBpZiAoZXhpc3RzICRicmFuY2hfbmFtZV9tYXB7JG5hbWV9KSB7CisJcmV0dXJuICRicmFuY2hfbmFtZV9tYXB7JG5hbWV9OworCisgICAgfSBlbHNpZiAoJG5hbWUgPX4gbSNeKFteL10qKS8oLiopJCMKKwkgICAgICYmICQxIGVxIGdldF9kZWZhdWx0X2FyY2hpdmUoKQorCSAgICAgJiYgZXhpc3RzICRicmFuY2hfbmFtZV9tYXB7JDJ9KSB7CisJIyB0aGUgbmFtZXMgZ2l2ZW4gaW4gdGhlIGNvbW1hbmQtbGluZSBsYWNrZWQgdGhlIGFyY2hpdmUuCisJcmV0dXJuICRicmFuY2hfbmFtZV9tYXB7JDJ9OworCisgICAgfSBlbHNlIHsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfYnJhbmNobmFtZSgkcmV2aXNpb24pOworICAgIH0KK30KKworc3ViIHByb2Nlc3NfcGF0Y2hzZXRfYWNjdXJhdGUgeworICAgIG15ICRwcyA9IHNoaWZ0OworCisgICAgIyBzd2l0Y2ggdG8gdGhhdCBicmFuY2ggaWYgd2UncmUgbm90IGFscmVhZHkgaW4gdGhhdCBicmFuY2g6CisgICAgaWYgKC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iKSB7CisgICAgICAgc3lzdGVtKCdnaXQtY2hlY2tvdXQnLCctZicsJHBzLT57YnJhbmNofSkgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworCisgICAgICAgIyByZW1vdmUgYW55IG9sZCBzdHVmZiB0aGF0IGdvdCBsZWZ0b3ZlcjoKKyAgICAgICBteSAkcm0gPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0LWxzLWZpbGVzJywnLS1vdGhlcnMnLCcteicpOworICAgICAgIHJtdHJlZShzcGxpdCgvXDAvLCRybSkpIGlmICRybTsKKyAgICB9CisKKyAgICAjIEFwcGx5IHRoZSBpbXBvcnQvY2hhbmdlc2V0L21lcmdlIGludG8gdGhlIHdvcmtpbmcgdHJlZQorICAgIG15ICRkaXIgPSBzeW5jX3RvX3BzKCRwcyk7CisgICAgIyByZWFkIHRoZSBuZXcgbG9nIGVudHJ5OgorICAgIG15IEBjb21taXRsb2cgPSBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdjYXQtbG9nJywnLWQnLCRkaXIsJHBzLT57aWR9KTsKKyAgICBkaWUgIkVycm9yIGluIGNhdC1sb2c6ICQhIiBpZiAkPzsKKyAgICBjaG9tcCBAY29tbWl0bG9nOworCisgICAgIyBncmFiIHZhcmlhYmxlcyB3ZSB3YW50IGZyb20gdGhlIGxvZywgbmV3IGZpZWxkcyBnZXQgYWRkZWQgdG8gJHBzOgorICAgICMgKGF1dGhvciwgZGF0ZSwgZW1haWwsIHN1bW1hcnksIG1lc3NhZ2UgYm9keSAuLi4pCisgICAgcGFyc2Vsb2coJHBzLCBcQGNvbW1pdGxvZyk7CisKKyAgICBpZiAoJHBzLT57aWR9ID1+IC8tLWJhc2UtMCQvICYmICRwcy0+e2lkfSBuZSAkcHNldHNbMF17aWR9KSB7CisgICAgICAgICMgdGhpcyBzaG91bGQgd29yayB3aGVuIGltcG9ydGluZyBjb250aW51YXRpb25zCisgICAgICAgIGlmICgkcHMtPnt0YWd9ICYmIChteSAkYnJhbmNocG9pbnQgPSBldmFsIHsgcHRhZygkcHMtPnt0YWd9KSB9KSkgeworCisgICAgICAgICAgICAjIGZpbmQgd2hlcmUgd2UgYXJlIHN1cHBvc2VkIHRvIGJyYW5jaCBmcm9tCisJICAgIGlmICghIC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iKSB7CisJCXN5c3RlbSgnZ2l0LWJyYW5jaCcsJHBzLT57YnJhbmNofSwkYnJhbmNocG9pbnQpID09IDAgb3IgZGllICIkISAkP1xuIjsKKworCQkjIFdlIHRydXN0IEFyY2ggd2l0aCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMganVzdCBhIHRhZywKKwkJIyBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IHRoZSBzdGF0ZSBvZiB0aGUgdHJlZSwgc28KKwkJIyB3ZSBqdXN0IHRhZyBhbmQgbW92ZSBvbi4gIElmIHRoZSB1c2VyIHJlYWxseSB3YW50cyB1cworCQkjIHRvIGNvbnNvbGlkYXRlIG1vcmUgYnJhbmNoZXMgaW50byBvbmUsIGRvbid0IHRhZyBiZWNhdXNlCisJCSMgdGhlIHRhZyBuYW1lIHdvdWxkIGJlIGFscmVhZHkgdGFrZW4uCisJCXRhZygkcHMtPntpZH0sICRicmFuY2hwb2ludCk7CisJCXB0YWcoJHBzLT57aWR9LCAkYnJhbmNocG9pbnQpOworCQlwcmludCAiICogVGFnZ2VkICRwcy0+e2lkfSBhdCAkYnJhbmNocG9pbnRcbiI7CisJICAgIH0KKwkgICAgc3lzdGVtKCdnaXQtY2hlY2tvdXQnLCctZicsJHBzLT57YnJhbmNofSkgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworCisgICAgICAgICAgICAjIHJlbW92ZSBhbnkgb2xkIHN0dWZmIHRoYXQgZ290IGxlZnRvdmVyOgorICAgICAgICAgICAgbXkgJHJtID0gc2FmZV9waXBlX2NhcHR1cmUoJ2dpdC1scy1maWxlcycsJy0tb3RoZXJzJywnLXonKTsKKyAgICAgICAgICAgIHJtdHJlZShzcGxpdCgvXDAvLCRybSkpIGlmICRybTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2FybiAiVGFnZ2luZyBmcm9tIHVua25vd24gaWQgdW5zdXBwb3J0ZWRcbiIgaWYgJHBzLT57dGFnfTsKKyAgICAgICAgfQorICAgICAgICAjIGFsbG93IG11bHRpcGxlIGJhc2VzL2ltcG9ydHMgaGVyZSBzaW5jZSBBcmNoIHN1cHBvcnRzIGNoZXJyeS1waWNrcworICAgICAgICAjIGZyb20gdW5yZWxhdGVkIHRyZWVzCisgICAgfQorCisgICAgIyB1cGRhdGUgdGhlIGluZGV4IHdpdGggYWxsIHRoZSBjaGFuZ2VzIHdlIGdvdAorICAgIHN5c3RlbSgnZ2l0LWRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLXogfCAnLgorICAgICAgICAgICAgJ2dpdC11cGRhdGUtaW5kZXggLS1yZW1vdmUgLXogLS1zdGRpbicpID09IDAgb3IgZGllICIkISAkP1xuIjsKKyAgICBzeXN0ZW0oJ2dpdC1scy1maWxlcyAtLW90aGVycyAteiB8ICcuCisgICAgICAgICAgICAnZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCAteiAtLXN0ZGluJykgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworICAgIHJldHVybiAxOworfQorCisjIHRoZSBuYXRpdmUgY2hhbmdlc2V0IHByb2Nlc3Npbmcgc3RyYXRlZ3kuICBUaGlzIGlzIHZlcnkgZmFzdCwgYnV0CisjIGRvZXMgbm90IGhhbmRsZSBwZXJtaXNzaW9ucyBvciBhbnkgcmVuYW1lcyBpbnZvbHZpbmcgZGlyZWN0b3JpZXMKK3N1YiBwcm9jZXNzX3BhdGNoc2V0X2Zhc3QgeworICAgIG15ICRwcyA9IHNoaWZ0OworICAgICMKKyAgICAjIGNyZWF0ZSB0aGUgYnJhbmNoIGlmIG5lZWRlZAorICAgICMKKyAgICBpZiAoJHBzLT57dHlwZX0gZXEgJ2knICYmICEkaW1wb3J0KSB7CisgICAgICAgIGRpZSAiU2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgJ0luaXRpYWwgaW1wb3J0JyBwZXIgR0lUIGltcG9ydDogJHBzLT57aWR9IjsKKyAgICB9CisKKyAgICB1bmxlc3MgKCRpbXBvcnQpIHsgIyBza2lwIGZvciBpbXBvcnQKKyAgICAgICAgaWYgKCAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IikgeworICAgICAgICAgICAgIyB3ZSBrbm93IGFib3V0IHRoaXMgYnJhbmNoCisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC1jaGVja291dCcsJHBzLT57YnJhbmNofSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAjIG5ldyBicmFuY2ghIHdlIG5lZWQgdG8gdmVyaWZ5IGEgZmV3IHRoaW5ncworICAgICAgICAgICAgZGllICJCcmFuY2ggb24gYSBub24tdGFnISIgdW5sZXNzICRwcy0+e3R5cGV9IGVxICd0JzsKKyAgICAgICAgICAgIG15ICRicmFuY2hwb2ludCA9IHB0YWcoJHBzLT57dGFnfSk7CisgICAgICAgICAgICBkaWUgIlRhZ2dpbmcgZnJvbSB1bmtub3duIGlkIHVuc3VwcG9ydGVkOiAkcHMtPnt0YWd9IgorICAgICAgICAgICAgICAgIHVubGVzcyAkYnJhbmNocG9pbnQ7CisKKyAgICAgICAgICAgICMgZmluZCB3aGVyZSB3ZSBhcmUgc3VwcG9zZWQgdG8gYnJhbmNoIGZyb20KKwkgICAgaWYgKCEgLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSIpIHsKKwkJc3lzdGVtKCdnaXQtYnJhbmNoJywkcHMtPnticmFuY2h9LCRicmFuY2hwb2ludCkgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworCisJCSMgV2UgdHJ1c3QgQXJjaCB3aXRoIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyBqdXN0IGEgdGFnLAorCQkjIGFuZCBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlIHN0YXRlIG9mIHRoZSB0cmVlLCBzbworCQkjIHdlIGp1c3QgdGFnIGFuZCBtb3ZlIG9uLiAgSWYgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIHVzCisJCSMgdG8gY29uc29saWRhdGUgbW9yZSBicmFuY2hlcyBpbnRvIG9uZSwgZG9uJ3QgdGFnIGJlY2F1c2UKKwkJIyB0aGUgdGFnIG5hbWUgd291bGQgYmUgYWxyZWFkeSB0YWtlbi4KKwkJdGFnKCRwcy0+e2lkfSwgJGJyYW5jaHBvaW50KTsKKwkJcHRhZygkcHMtPntpZH0sICRicmFuY2hwb2ludCk7CisJCXByaW50ICIgKiBUYWdnZWQgJHBzLT57aWR9IGF0ICRicmFuY2hwb2ludFxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LWNoZWNrb3V0JywkcHMtPnticmFuY2h9KSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBkaWUgJCEgaWYgJD87CisgICAgfQorCisgICAgIworICAgICMgQXBwbHkgdGhlIGltcG9ydC9jaGFuZ2VzZXQvbWVyZ2UgaW50byB0aGUgd29ya2luZyB0cmVlCisgICAgIworICAgIGlmICgkcHMtPnt0eXBlfSBlcSAnaScgfHwgJHBzLT57dHlwZX0gZXEgJ3QnKSB7CisgICAgICAgIGFwcGx5X2ltcG9ydCgkcHMpIG9yIGRpZSAkITsKKyAgICAgICAgJHN0YXRze2ltcG9ydF9vcl90YWd9Kys7CisgICAgICAgICRpbXBvcnQ9MDsKKyAgICB9IGVsc2lmICgkcHMtPnt0eXBlfSBlcSAncycpIHsKKyAgICAgICAgYXBwbHlfY3NldCgkcHMpOworICAgICAgICAkc3RhdHN7c2ltcGxlX2NoYW5nZXNldH0rKzsKKyAgICB9CisKKyAgICAjCisgICAgIyBwcmVwYXJlIHVwZGF0ZSBnaXQncyBpbmRleCwgYmFzZWQgb24gd2hhdCBhcmNoIGtub3dzCisgICAgIyBhYm91dCB0aGUgcHNldCwgcmVzb2x2ZSBwYXJlbnRzLCBldGMKKyAgICAjCisKKyAgICBteSBAY29tbWl0bG9nID0gc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnY2F0LWFyY2hpdmUtbG9nJywkcHMtPntpZH0pOworICAgIGRpZSAiRXJyb3IgaW4gY2F0LWFyY2hpdmUtbG9nOiAkISIgaWYgJD87CisKKyAgICBwYXJzZWxvZygkcHMsXEBjb21taXRsb2cpOworCisgICAgIyBpbXBvcnRzIGRvbid0IGdpdmUgdXMgZ29vZCBpbmZvCisgICAgIyBvbiBhZGRlZCBmaWxlcy4gU2hhbWUgb24gdGhlbQorICAgIGlmICgkcHMtPnt0eXBlfSBlcSAnaScgfHwgJHBzLT57dHlwZX0gZXEgJ3QnKSB7CisgICAgICAgIHN5c3RlbSgnZ2l0LWxzLWZpbGVzIC0tZGVsZXRlZCAteiB8ICcuCisgICAgICAgICAgICAgICAgJ2dpdC11cGRhdGUtaW5kZXggLS1yZW1vdmUgLXogLS1zdGRpbicpID09IDAgb3IgZGllICIkISAkP1xuIjsKKyAgICAgICAgc3lzdGVtKCdnaXQtbHMtZmlsZXMgLS1vdGhlcnMgLXogfCAnLgorICAgICAgICAgICAgICAgICdnaXQtdXBkYXRlLWluZGV4IC0tYWRkIC16IC0tc3RkaW4nKSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisgICAgfQorCisgICAgIyBUT0RPOiBoYW5kbGUgcmVtb3ZlZF9kaXJlY3RvcmllcyBhbmQgcmVuYW1lZF9kaXJlY3RvcmllczoKKworICAgIGlmIChteSAkZGVsID0gJHBzLT57cmVtb3ZlZF9maWxlc30pIHsKKyAgICAgICAgdW5saW5rIEAkZGVsOworICAgICAgICB3aGlsZSAoQCRkZWwpIHsKKyAgICAgICAgICAgIG15IEBzbGljZSA9IHNwbGljZShAJGRlbCwgMCwgMTAwKTsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1pbmRleCcsJy0tcmVtb3ZlJywnLS0nLEBzbGljZSkgPT0gMCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiRXJyb3IgaW4gZ2l0LXVwZGF0ZS1pbmRleCAtLXJlbW92ZTogJCEgJD9cbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobXkgJHJlbiA9ICRwcy0+e3JlbmFtZWRfZmlsZXN9KSB7ICAgICAgICAgICAgICAgICMgcmVuYW1lZAorICAgICAgICBpZiAoQCRyZW4gJSAyKSB7CisgICAgICAgICAgICBkaWUgIk9kZCBudW1iZXIgb2YgZW50cmllcyBpbiByZW5hbWUhPyI7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoQCRyZW4pIHsKKyAgICAgICAgICAgIG15ICRmcm9tID0gc2hpZnQgQCRyZW47CisgICAgICAgICAgICBteSAkdG8gICA9IHNoaWZ0IEAkcmVuOworCisgICAgICAgICAgICB1bmxlc3MgKC1kIGRpcm5hbWUoJHRvKSkgeworICAgICAgICAgICAgICAgIG1rcGF0aChkaXJuYW1lKCR0bykpOyAjIHdpbGwgZGllIG9uIGVycgorICAgICAgICAgICAgfQorICAgICAgICAgICAgIyBwcmludCAibW92aW5nICRmcm9tICR0byI7CisgICAgICAgICAgICByZW5hbWUoJGZyb20sICR0bykgb3IgZGllICJFcnJvciByZW5hbWluZyAnJGZyb20nICckdG8nOiAkIVxuIjsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1pbmRleCcsJy0tcmVtb3ZlJywnLS0nLCRmcm9tKSA9PSAwIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllICJFcnJvciBpbiBnaXQtdXBkYXRlLWluZGV4IC0tcmVtb3ZlOiAkISAkP1xuIjsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1pbmRleCcsJy0tYWRkJywnLS0nLCR0bykgPT0gMCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiRXJyb3IgaW4gZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZDogJCEgJD9cbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobXkgJGFkZCA9ICRwcy0+e25ld19maWxlc30pIHsKKyAgICAgICAgd2hpbGUgKEAkYWRkKSB7CisgICAgICAgICAgICBteSBAc2xpY2UgPSBzcGxpY2UoQCRhZGQsIDAsIDEwMCk7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC11cGRhdGUtaW5kZXgnLCctLWFkZCcsJy0tJyxAc2xpY2UpID09IDAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUgIkVycm9yIGluIGdpdC11cGRhdGUtaW5kZXggLS1hZGQ6ICQhICQ/XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG15ICRtb2QgPSAkcHMtPnttb2RpZmllZF9maWxlc30pIHsKKyAgICAgICAgd2hpbGUgKEAkbW9kKSB7CisgICAgICAgICAgICBteSBAc2xpY2UgPSBzcGxpY2UoQCRtb2QsIDAsIDEwMCk7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC11cGRhdGUtaW5kZXgnLCctLScsQHNsaWNlKSA9PSAwIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllICJFcnJvciBpbiBnaXQtdXBkYXRlLWluZGV4OiAkISAkP1xuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsgIyB3ZSBzdWNjZXNzZnVsbHkgYXBwbGllZCB0aGUgY2hhbmdlc2V0Cit9CisKK2lmICgkb3B0X2YpIHsKKyAgICBwcmludCAiV2lsbCBpbXBvcnQgcGF0Y2hzZXRzIHVzaW5nIHRoZSBmYXN0IHN0cmF0ZWd5XG4iLAorICAgICAgICAgICAgIlJlbmFtZWQgZGlyZWN0b3JpZXMgYW5kIHBlcm1pc3Npb24gY2hhbmdlcyB3aWxsIGJlIG1pc3NlZFxuIjsKKyAgICAqcHJvY2Vzc19wYXRjaHNldCA9ICpwcm9jZXNzX3BhdGNoc2V0X2Zhc3Q7Cit9IGVsc2UgeworICAgIHByaW50ICJVc2luZyB0aGUgZGVmYXVsdCAoYWNjdXJhdGUpIGltcG9ydCBzdHJhdGVneS5cbiIsCisgICAgICAgICAgICAiVGhpbmdzIG1heSBiZSBhIGJpdCBzbG93XG4iOworICAgICpwcm9jZXNzX3BhdGNoc2V0ID0gKnByb2Nlc3NfcGF0Y2hzZXRfYWNjdXJhdGU7Cit9CisKK2ZvcmVhY2ggbXkgJHBzIChAcHNldHMpIHsKKyAgICAjIHByb2Nlc3MgcGF0Y2hzZXRzCisgICAgJHBzLT57YnJhbmNofSA9IGdpdF9icmFuY2huYW1lKCRwcy0+e2lkfSk7CisKKyAgICAjCisgICAgIyBlbnN1cmUgd2UgaGF2ZSBhIGNsZWFuIHN0YXRlCisgICAgIworICAgIGlmIChteSAkZGlydHkgPSBgZ2l0LWRpZmYtZmlsZXNgKSB7CisgICAgICAgIGRpZSAiVW5jbGVhbiB0cmVlIHdoZW4gYWJvdXQgdG8gcHJvY2VzcyAkcHMtPntpZH0gIiAuCisgICAgICAgICAgICAiIC0gZGlkIHdlIGZhaWwgdG8gY29tbWl0IGNsZWFubHkgYmVmb3JlP1xuJGRpcnR5IjsKKyAgICB9CisgICAgZGllICQhIGlmICQ/OworCisgICAgIworICAgICMgc2tpcCBjb21taXRzIGFscmVhZHkgaW4gcmVwbworICAgICMKKyAgICBpZiAocHRhZygkcHMtPntpZH0pKSB7CisgICAgICAkb3B0X3YgJiYgcHJpbnQgIiAqIFNraXBwaW5nIGFscmVhZHkgaW1wb3J0ZWQ6ICRwcy0+e2lkfVxuIjsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgcHJpbnQgIiAqIFN0YXJ0aW5nIHRvIHdvcmsgb24gJHBzLT57aWR9XG4iOworCisgICAgcHJvY2Vzc19wYXRjaHNldCgkcHMpIG9yIG5leHQ7CisKKyAgICAjIHdhcm4gImVycm9ycyB3aGVuIHJ1bm5pbmcgZ2l0LXVwZGF0ZS1pbmRleCEgJCEiOworICAgIG15ICR0cmVlID0gYGdpdC13cml0ZS10cmVlYDsKKyAgICBkaWUgImNhbm5vdCB3cml0ZSB0cmVlICQhIiBpZiAkPzsKKyAgICBjaG9tcCAkdHJlZTsKKworICAgICMKKyAgICAjIFdobydzIHlvdXIgZGFkZHk/CisgICAgIworICAgIG15IEBwYXI7CisgICAgaWYgKCAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IikgeworICAgICAgICBpZiAob3BlbiBIRUFELCAiPCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSIpIHsKKyAgICAgICAgICAgIG15ICRwID0gPEhFQUQ+OworICAgICAgICAgICAgY2xvc2UgSEVBRDsKKyAgICAgICAgICAgIGNob21wICRwOworICAgICAgICAgICAgcHVzaCBAcGFyLCAnLXAnLCAkcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgkcHMtPnt0eXBlfSBlcSAncycpIHsKKyAgICAgICAgICAgICAgICB3YXJuICJDb3VsZCBub3QgZmluZCB0aGUgcmlnaHQgaGVhZCBmb3IgdGhlIGJyYW5jaCAkcHMtPnticmFuY2h9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgkcHMtPnttZXJnZXN9KSB7CisgICAgICAgIHB1c2ggQHBhciwgZmluZF9wYXJlbnRzKCRwcyk7CisgICAgfQorCisgICAgIworICAgICMgQ29tbWl0LCB0YWcgYW5kIGNsZWFuIHN0YXRlCisgICAgIworICAgICRFTlZ7VFp9ICAgICAgICAgICAgICAgICAgPSAnR01UJzsKKyAgICAkRU5We0dJVF9BVVRIT1JfTkFNRX0gICAgID0gJHBzLT57YXV0aG9yfTsKKyAgICAkRU5We0dJVF9BVVRIT1JfRU1BSUx9ICAgID0gJHBzLT57ZW1haWx9OworICAgICRFTlZ7R0lUX0FVVEhPUl9EQVRFfSAgICAgPSAkcHMtPntkYXRlfTsKKyAgICAkRU5We0dJVF9DT01NSVRURVJfTkFNRX0gID0gJHBzLT57YXV0aG9yfTsKKyAgICAkRU5We0dJVF9DT01NSVRURVJfRU1BSUx9ID0gJHBzLT57ZW1haWx9OworICAgICRFTlZ7R0lUX0NPTU1JVFRFUl9EQVRFfSAgPSAkcHMtPntkYXRlfTsKKworICAgIG15ICRwaWQgPSBvcGVuMigqUkVBREVSLCAqV1JJVEVSLCdnaXQtY29tbWl0LXRyZWUnLCR0cmVlLEBwYXIpCisgICAgICAgIG9yIGRpZSAkITsKKyAgICBwcmludCBXUklURVIgJHBzLT57c3VtbWFyeX0sIlxuXG4iOworCisgICAgIyBvbmx5IHByaW50IG1lc3NhZ2UgaWYgaXQncyBub3QgZW1wdHksIHRvIGF2b2lkIGEgc3B1cmlvdXMgYmxhbmsgbGluZTsKKyAgICAjIGFsc28gYXBwZW5kIGFuIGV4dHJhIG5ld2xpbmUsIHNvIHRoZXJlJ3MgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUKKyAgICAjIGZvbGxvd2luZyAiZ2l0LWFyY2hpbXBvcnQtaWQ6IiBsaW5lLgorICAgIHByaW50IFdSSVRFUiAkcHMtPnttZXNzYWdlfSwiXG5cbiIgaWYgKCRwcy0+e21lc3NhZ2V9IG5lICIiKTsKKworICAgICMgbWFrZSBpdCBlYXN5IHRvIGJhY2t0cmFjayBhbmQgZmlndXJlIG91dCB3aGljaCBBcmNoIHJldmlzaW9uIHRoaXMgd2FzOgorICAgIHByaW50IFdSSVRFUiAnZ2l0LWFyY2hpbXBvcnQtaWQ6ICcsJHBzLT57aWR9LCJcbiI7CisKKyAgICBjbG9zZSBXUklURVI7CisgICAgbXkgJGNvbW1pdGlkID0gPFJFQURFUj47ICAgICMgcmVhZAorICAgIGNob21wICRjb21taXRpZDsKKyAgICBjbG9zZSBSRUFERVI7CisgICAgd2FpdHBpZCAkcGlkLDA7ICAgICAgICAgICAgICMgY2xvc2U7CisKKyAgICBpZiAobGVuZ3RoICRjb21taXRpZCAhPSA0MCkgeworICAgICAgICBkaWUgIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNvbW1pdCEgJCEgJGNvbW1pdGlkIjsKKyAgICB9CisgICAgIworICAgICMgVXBkYXRlIHRoZSBicmFuY2gKKyAgICAjCisgICAgb3BlbiAgSEVBRCwgIj4iLCIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iOworICAgIHByaW50IEhFQUQgJGNvbW1pdGlkOworICAgIGNsb3NlIEhFQUQ7CisgICAgc3lzdGVtKCdnaXQtdXBkYXRlLXJlZicsICdIRUFEJywgIiRwcy0+e2JyYW5jaH0iKTsKKworICAgICMgdGFnIGFjY29yZGluZ2x5CisgICAgcHRhZygkcHMtPntpZH0sICRjb21taXRpZCk7ICMgcHJpdmF0ZSB0YWcKKyAgICBpZiAoJG9wdF9UIHx8ICRwcy0+e3R5cGV9IGVxICd0JyB8fCAkcHMtPnt0eXBlfSBlcSAnaScpIHsKKyAgICAgICAgdGFnKCRwcy0+e2lkfSwgJGNvbW1pdGlkKTsKKyAgICB9CisgICAgcHJpbnQgIiAqIENvbW1pdHRlZCAkcHMtPntpZH1cbiI7CisgICAgcHJpbnQgIiAgICsgdHJlZSAgICR0cmVlXG4iOworICAgIHByaW50ICIgICArIGNvbW1pdCAkY29tbWl0aWRcbiI7CisgICAgJG9wdF92ICYmIHByaW50ICIgICArIGNvbW1pdCBkYXRlIGlzICAkcHMtPntkYXRlfSBcbiI7CisgICAgJG9wdF92ICYmIHByaW50ICIgICArIHBhcmVudHM6ICAiLGpvaW4oJyAnLEBwYXIpLCJcbiI7Cit9CisKK2lmICgkb3B0X3YpIHsKKyAgICBmb3JlYWNoIChzb3J0IGtleXMgJXN0YXRzKSB7CisgICAgICAgIHByaW50IiAkXzogJHN0YXRzeyRffVxuIjsKKyAgICB9Cit9CitleGl0IDA7CisKKyMgdXNlZCBieSB0aGUgYWNjdXJhdGUgc3RyYXRlZ3k6CitzdWIgc3luY190b19wcyB7CisgICAgbXkgJHBzID0gc2hpZnQ7CisgICAgbXkgJHRyZWVfZGlyID0gJHRtcC4nLycudHJlZV9kaXJuYW1lKCRwcy0+e2lkfSk7CisKKyAgICAkb3B0X3YgJiYgcHJpbnQgInN5bmNfdG9fcHMoJHBzLT57aWR9KSBtZXRob2Q6ICI7CisKKyAgICBpZiAoLWQgJHRyZWVfZGlyKSB7CisgICAgICAgIGlmICgkcHMtPnt0eXBlfSBlcSAndCcpIHsKKwkgICAgJG9wdF92ICYmIHByaW50ICJnZXQgKHRhZylcbiI7CisgICAgICAgICAgICAjIGxvb2tzIGxpa2UgYSB0YWctb25seSBvciAod29yc2UsKSBhIG1peGVkIHRhZ3MvY2hhbmdlc2V0IGJyYW5jaCwKKyAgICAgICAgICAgICMgY2FuJ3QgcmVseSBvbiByZXBsYXkgdG8gd29yayBjb3JyZWN0bHkgb24gdGhlc2UKKyAgICAgICAgICAgIHJtdHJlZSgkdHJlZV9kaXIpOworICAgICAgICAgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZ2V0JywnLS1uby1wcmlzdGluZScsJHBzLT57aWR9LCR0cmVlX2Rpcik7CisgICAgICAgICAgICAkc3RhdHN7Z2V0X3RhZ30rKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBteSAkdHJlZV9pZCA9IGFyY2hfdHJlZV9pZCgkdHJlZV9kaXIpOworICAgICAgICAgICAgICAgIGlmICgkcHMtPntwYXJlbnRfaWR9ICYmICgkcHMtPntwYXJlbnRfaWR9IGVxICR0cmVlX2lkKSkgeworICAgICAgICAgICAgICAgICAgICAjIHRoZSBjb21tb24gY2FzZSAoaG9wZWZ1bGx5KQorCQkgICAgJG9wdF92ICYmIHByaW50ICJyZXBsYXlcbiI7CisgICAgICAgICAgICAgICAgICAgIHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ3JlcGxheScsJy1kJywkdHJlZV9kaXIsJHBzLT57aWR9KTsKKyAgICAgICAgICAgICAgICAgICAgJHN0YXRze3JlcGxheX0rKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAjIGdldHRpbmcgb25lIHRyZWUgaXMgdXN1YWxseSBmYXN0ZXIgdGhhbiBnZXR0aW5nIHR3byB0cmVlcworICAgICAgICAgICAgICAgICAgICAjIGFuZCBhcHBseWluZyB0aGUgZGVsdGEgLi4uCisgICAgICAgICAgICAgICAgICAgIHJtdHJlZSgkdHJlZV9kaXIpOworCQkgICAgJG9wdF92ICYmIHByaW50ICJhcHBseS1kZWx0YVxuIjsKKyAgICAgICAgICAgICAgICAgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZ2V0JywnLS1uby1wcmlzdGluZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBzLT57aWR9LCR0cmVlX2Rpcik7CisgICAgICAgICAgICAgICAgICAgICRzdGF0c3tnZXRfZGVsdGF9Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBuZXcgYnJhbmNoIHdvcmsKKyAgICAgICAgJG9wdF92ICYmIHByaW50ICJnZXQgKG5ldyB0cmVlKVxuIjsKKyAgICAgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZ2V0JywnLS1uby1wcmlzdGluZScsJHBzLT57aWR9LCR0cmVlX2Rpcik7CisgICAgICAgICRzdGF0c3tnZXRfbmV3fSsrOworICAgIH0KKworICAgICMgYWRkZWQgLUkgZmxhZyB0byByc3luYyBzaW5jZSB3ZSdyZSBnb2luZyB0byBmYXN0ISBBSUVFRUVFISEhIQorICAgIHN5c3RlbSgncnN5bmMnLCctYUknLCctLWRlbGV0ZScsJy0tZXhjbHVkZScsJGdpdF9kaXIsCisjICAgICAgICAgICAgICAgJy0tZXhjbHVkZScsJy5hcmNoLWludmVudG9yeScsCisgICAgICAgICAgICAgICAgJy0tZXhjbHVkZScsJy5hcmNoLWlkcycsJy0tZXhjbHVkZScsJ3thcmNofScsCisgICAgICAgICAgICAgICAgJy0tZXhjbHVkZScsJysqJywnLS1leGNsdWRlJywnLConLAorICAgICAgICAgICAgICAgICIkdHJlZV9kaXIvIiwnLi8nKSA9PSAwIG9yIGRpZSAiQ2Fubm90IHJzeW5jICR0cmVlX2RpcjogJCEgJD8iOworICAgIHJldHVybiAkdHJlZV9kaXI7Cit9CisKK3N1YiBhcHBseV9pbXBvcnQgeworICAgIG15ICRwcyA9IHNoaWZ0OworICAgIG15ICRibmFtZSA9IGdpdF9icmFuY2huYW1lKCRwcy0+e2lkfSk7CisKKyAgICBta3BhdGgoJHRtcCk7CisKKyAgICBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdnZXQnLCctcycsJy0tbm8tcHJpc3RpbmUnLCRwcy0+e2lkfSwiJHRtcC9pbXBvcnQiKTsKKyAgICBkaWUgIkNhbm5vdCBnZXQgaW1wb3J0OiAkISIgaWYgJD87CisgICAgc3lzdGVtKCdyc3luYycsJy1hSScsJy0tZGVsZXRlJywgJy0tZXhjbHVkZScsJGdpdF9kaXIsCisJCSctLWV4Y2x1ZGUnLCcuYXJjaC1pZHMnLCctLWV4Y2x1ZGUnLCd7YXJjaH0nLAorCQkiJHRtcC9pbXBvcnQvIiwgJy4vJyk7CisgICAgZGllICJDYW5ub3QgcnN5bmMgaW1wb3J0OiQhIiBpZiAkPzsKKworICAgIHJtdHJlZSgiJHRtcC9pbXBvcnQiKTsKKyAgICBkaWUgIkNhbm5vdCByZW1vdmUgdGVtcGRpcjogJCEiIGlmICQ/OworCisKKyAgICByZXR1cm4gMTsKK30KKworc3ViIGFwcGx5X2NzZXQgeworICAgIG15ICRwcyA9IHNoaWZ0OworCisgICAgbWtwYXRoKCR0bXApOworCisgICAgIyBnZXQgdGhlIGNoYW5nZXNldAorICAgIHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2dldC1jaGFuZ2VzZXQnLCRwcy0+e2lkfSwiJHRtcC9jaGFuZ2VzZXQiKTsKKyAgICBkaWUgIkNhbm5vdCBnZXQgY2hhbmdlc2V0OiAkISIgaWYgJD87CisKKyAgICAjIGFwcGx5IHBhdGNoZXMKKyAgICBpZiAoYGZpbmQgJHRtcC9jaGFuZ2VzZXQvcGF0Y2hlcyAtdHlwZSBmIC1uYW1lICcqLnBhdGNoJ2ApIHsKKyAgICAgICAgIyB0aGlzIGNhbiBiZSBzcGVkIHVwIGNvbnNpZGVyYWJseSBieSBkb2luZworICAgICAgICAjICAgIChmaW5kIHwgeGFyZ3MgY2F0KSB8IHBhdGNoCisgICAgICAgICMgYnV0IHRoYXQgY2FuIGdldCBtdWNrZWQgdXAgYnkgcGF0Y2hlcworICAgICAgICAjIHdpdGggbWlzc2luZyB0cmFpbGluZyBuZXdsaW5lcyBvciB0aGUgc3RhbmRhcmQKKyAgICAgICAgIyAnbWlzc2luZyBuZXdsaW5lJyBmbGFnIGluIHRoZSBwYXRjaCAtIHBvc3NpYmx5CisgICAgICAgICMgcHJvZHVjZWQgd2l0aCBhbiBvbGQvYnVnZ3kgZGlmZi4KKyAgICAgICAgIyBzbG93IGFuZCBzYWZlLCB3ZSBpbnZva2UgcGF0Y2ggb25jZSBwZXIgcGF0Y2hmaWxlCisgICAgICAgIGBmaW5kICR0bXAvY2hhbmdlc2V0L3BhdGNoZXMgLXR5cGUgZiAtbmFtZSAnKi5wYXRjaCcgLXByaW50MCB8IGdyZXAgLXp2ICd7YXJjaH0nIHwgeGFyZ3MgLWlGSUxFIC0wIC0tbm8tcnVuLWlmLWVtcHR5IHBhdGNoIC1wMSAtLWZvcndhcmQgLWlGSUxFYDsKKyAgICAgICAgZGllICJQcm9ibGVtIGFwcGx5aW5nIHBhdGNoZXMhICQhIiBpZiAkPzsKKyAgICB9CisKKyAgICAjIGFwcGx5IGNoYW5nZWQgYmluYXJ5IGZpbGVzCisgICAgaWYgKG15IEBtb2RpZmllZCA9IGBmaW5kICR0bXAvY2hhbmdlc2V0L3BhdGNoZXMgLXR5cGUgZiAtbmFtZSAnKi5tb2RpZmllZCdgKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJG1vZCAoQG1vZGlmaWVkKSB7CisgICAgICAgICAgICBjaG9tcCAkbW9kOworICAgICAgICAgICAgbXkgJG9yaWcgPSAkbW9kOworICAgICAgICAgICAgJG9yaWcgPX4gcy9cLm1vZGlmaWVkJC8vOyAjIGxhenkKKyAgICAgICAgICAgICRvcmlnID1+IHMhXlxRJHRtcFxFL2NoYW5nZXNldC9wYXRjaGVzLyEhOworICAgICAgICAgICAgI3ByaW50ICJyc3luYyAtcCAnJG1vZCcgJyRvcmlnJyI7CisgICAgICAgICAgICBzeXN0ZW0oJ3JzeW5jJywnLXAnLCRtb2QsIi4vJG9yaWciKTsKKyAgICAgICAgICAgIGRpZSAiUHJvYmxlbSBhcHBseWluZyBiaW5hcnkgY2hhbmdlcyEgJCEiIGlmICQ/OworICAgICAgICB9CisgICAgfQorCisgICAgIyBicmluZyBpbiBuZXcgZmlsZXMKKyAgICBzeXN0ZW0oJ3JzeW5jJywnLWFJJywnLS1leGNsdWRlJywkZ2l0X2RpciwKKwkJJy0tZXhjbHVkZScsJy5hcmNoLWlkcycsCisJCSctLWV4Y2x1ZGUnLCAne2FyY2h9JywKKwkJIiR0bXAvY2hhbmdlc2V0L25ldy1maWxlcy1hcmNoaXZlLyIsJy4vJyk7CisKKyAgICAjIGRlbGV0ZWQgZmlsZXMgYXJlIGhpbnRlZCBmcm9tIHRoZSBjb21taXRsb2cgcHJvY2Vzc2luZworCisgICAgcm10cmVlKCIkdG1wL2NoYW5nZXNldCIpOworfQorCisKKyMgPWZvciByZWZlcmVuY2UKKyMgbm90ZXM6ICotZmlsZXMvLWRpcmVjdG9yaWVzIGtleXMgY2Fubm90IGhhdmUgc3BhY2VzLCB0aGV5J3JlIGFsd2F5cworIyBwaWthLWVzY2FwZWQuICBFdmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBuZXdsaW5lCisjIEEgbG9nIGVudHJ5IGxvb2tzIGxpa2U6CisjIFJldmlzaW9uOiBtb29kbGUtb3JnLS1tb29kbGUtLTEuMy4zLS1wYXRjaC0xNQorIyBBcmNoaXZlOiBhcmNoLWVkdWZvcmdlQGNhdGFseXN0Lm5ldC5uei0tMjAwNAorIyBDcmVhdG9yOiBQZW5ueSBMZWFjaCA8cGVubnlAY2F0YWx5c3QubmV0Lm56PgorIyBEYXRlOiBXZWQgTWF5IDI1IDE0OjE1OjM0IE5aU1QgMjAwNQorIyBTdGFuZGFyZC1kYXRlOiAyMDA1LTA1LTI1IDAyOjE1OjM0IEdNVAorIyBOZXctZmlsZXM6IGxhbmcvZGUvLmFyY2gtaWRzL2Jsb2NrX2dsb3NzYXJ5X3JhbmRvbS5waHAuaWQKKyMgICAgIGxhbmcvZGUvLmFyY2gtaWRzL2Jsb2NrX2h0bWwucGhwLmlkCisjIE5ldy1kaXJlY3RvcmllczogbGFuZy9kZS9oZWxwL3F1ZXN0aW9ubmFpcmUKKyMgICAgIGxhbmcvZGUvaGVscC9xdWVzdGlvbm5haXJlLy5hcmNoLWlkcworIyBSZW5hbWVkLWZpbGVzOiAuYXJjaC1pZHMvZGJfc2VhcnMuc3FsLmlkIGRiLy5hcmNoLWlkcy9kYl9zZWFycy5zcWwuaWQKKyMgICAgZGJfc2VhcnMuc3FsIGRiL2RiX3NlYXJzLnNxbAorIyBSZW1vdmVkLWZpbGVzOiBsYW5nL2JlL2RvY3MvLmFyY2gtaWRzL3JlbGVhc2UuaHRtbC5pZAorIyAgICAgbGFuZy9iZS9kb2NzLy5hcmNoLWlkcy9yZWxlYXNlb2xkLmh0bWwuaWQKKyMgTW9kaWZpZWQtZmlsZXM6IGFkbWluL2Nyb24ucGhwIGFkbWluL2RlbGV0ZS5waHAKKyMgICAgIGFkbWluL2VkaXRvci5odG1sIGJhY2t1cC9saWIucGhwIGJhY2t1cC9yZXN0b3JlLnBocAorIyBOZXctcGF0Y2hlczogYXJjaC1lZHVmb3JnZUBjYXRhbHlzdC5uZXQubnotLTIwMDQvbW9vZGxlLW9yZy0tbW9vZGxlLS0xLjMuMy0tcGF0Y2gtMTUKKyMgU3VtbWFyeTogVXBkYXRpbmcgdG8gbGF0ZXN0IGZyb20gTU9PRExFXzE0X1NUQUJMRSAoMS40LjUrKQorIyAgIHN1bW1hcnkgY2FuIGJlIG11bHRpbGluZSB3aXRoIGEgbGVhZGluZyBzcGFjZSBqdXN0IGxpa2UgdGhlIGFib3ZlIGZpZWxkcworIyBLZXl3b3JkczoKKyMKKyMgVXBkYXRpbmcgeWFkZGEgdGFkZGEgdGFkZGEgbWFkZGEKK3N1YiBwYXJzZWxvZyB7CisgICAgbXkgKCRwcywgJGxvZykgPSBAXzsKKyAgICBteSAka2V5ID0gdW5kZWY7CisKKyAgICAjIGhlYWRlcnMgd2Ugd2FudCB0aGF0IGNvbnRhaW4gZmlsZW5hbWVzOgorICAgIG15ICV3YW50X2hlYWRlcnMgPSAoCisgICAgICAgIG5ld19maWxlcyA9PiAxLAorICAgICAgICBtb2RpZmllZF9maWxlcyA9PiAxLAorICAgICAgICByZW5hbWVkX2ZpbGVzID0+IDEsCisgICAgICAgIHJlbmFtZWRfZGlyZWN0b3JpZXMgPT4gMSwKKyAgICAgICAgcmVtb3ZlZF9maWxlcyA9PiAxLAorICAgICAgICByZW1vdmVkX2RpcmVjdG9yaWVzID0+IDEsCisgICAgKTsKKworICAgIGNob21wIChAJGxvZyk7CisgICAgd2hpbGUgKCRfID0gc2hpZnQgQCRsb2cpIHsKKyAgICAgICAgaWYgKC9eQ29udGludWF0aW9uLW9mOlxzKiguKikvKSB7CisgICAgICAgICAgICAkcHMtPnt0YWd9ID0gJDE7CisgICAgICAgICAgICAka2V5ID0gdW5kZWY7CisgICAgICAgIH0gZWxzaWYgKC9eU3VtbWFyeTpccyooLiopJC8gKSB7CisgICAgICAgICAgICAjIHN1bW1hcnkgY2FuIGJlIG11bHRpbGluZSBhcyBsb25nIGFzIGl0IGhhcyBhIGxlYWRpbmcgc3BhY2UuCisJICAgICMgd2Ugc3F1ZWV6ZSBpdCBvbnRvIGEgc2luZ2xlIGxpbmUsIHRob3VnaC4KKyAgICAgICAgICAgICRwcy0+e3N1bW1hcnl9ID0gWyAkMSBdOworICAgICAgICAgICAgJGtleSA9ICdzdW1tYXJ5JzsKKyAgICAgICAgfSBlbHNpZiAoL15DcmVhdG9yOiAoLiopXHMqPChbXlw+XSspPi8pIHsKKyAgICAgICAgICAgICRwcy0+e2F1dGhvcn0gPSAkMTsKKyAgICAgICAgICAgICRwcy0+e2VtYWlsfSA9ICQyOworICAgICAgICAgICAgJGtleSA9IHVuZGVmOworICAgICAgICAjIGFueSAqLWZpbGVzIG9yICotZGlyZWN0b3JpZXMgY2FuIGJlIHJlYWQgaGVyZToKKyAgICAgICAgfSBlbHNpZiAoL14oW0EtWl1bYS16XC1dKyk6XHMqKC4qKSQvKSB7CisgICAgICAgICAgICBteSAkdmFsID0gJDI7CisgICAgICAgICAgICAka2V5ID0gbGMgJDE7CisgICAgICAgICAgICAka2V5ID1+IHRyLy0vXy87ICMgdG9vIGxhenkgdG8gcXVvdGUgOlAKKyAgICAgICAgICAgIGlmICgkd2FudF9oZWFkZXJzeyRrZXl9KSB7CisgICAgICAgICAgICAgICAgcHVzaCBAeyRwcy0+eyRrZXl9fSwgc3BsaXQoL1xzKy8sICR2YWwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAka2V5ID0gdW5kZWY7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzaWYgKC9eJC8pIHsKKyAgICAgICAgICAgIGxhc3Q7ICMgcmVtYWluZGVyIG9mIEAkbG9nIHRoYXQgZGlkbid0IGdldCBzaGlmdGVkIG9mZiBpcyBtZXNzYWdlCisgICAgICAgIH0gZWxzaWYgKCRrZXkpIHsKKyAgICAgICAgICAgIGlmICgvXlxzKyguKikkLykgeworICAgICAgICAgICAgICAgIGlmICgka2V5IGVxICdzdW1tYXJ5JykgeworICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHBzLT57JGtleX19LCAkMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAjIGZpbGVzL2RpcmVjdG9yaWVzOgorICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHBzLT57JGtleX19LCBzcGxpdCgvXHMrLywgJDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJGtleSA9IHVuZGVmOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgIyBkcm9wIGxlYWRpbmcgZW1wdHkgbGluZXMgZnJvbSB0aGUgbG9nIG1lc3NhZ2UKKyAgICB3aGlsZSAoQCRsb2cgJiYgJGxvZy0+WzBdIGVxICcnKSB7CisJc2hpZnQgQCRsb2c7CisgICAgfQorICAgIGlmIChleGlzdHMgJHBzLT57c3VtbWFyeX0gJiYgQHskcHMtPntzdW1tYXJ5fX0pIHsKKwkkcHMtPntzdW1tYXJ5fSA9IGpvaW4oJyAnLCBAeyRwcy0+e3N1bW1hcnl9fSk7CisgICAgfQorICAgIGVsc2lmIChAJGxvZyA9PSAwKSB7CisJJHBzLT57c3VtbWFyeX0gPSAnZW1wdHkgY29tbWl0IG1lc3NhZ2UnOworICAgIH0gZWxzZSB7CisJJHBzLT57c3VtbWFyeX0gPSAkbG9nLT5bMF0gLiAnLi4uJzsKKyAgICB9CisgICAgJHBzLT57bWVzc2FnZX0gPSBqb2luKCJcbiIsQCRsb2cpOworCisgICAgIyBza2lwIEFyY2ggY29udHJvbCBmaWxlcywgdW5lc2NhcGUgcGlrYS1lc2NhcGVkIGZpbGVzCisgICAgZm9yZWFjaCBteSAkayAoa2V5cyAld2FudF9oZWFkZXJzKSB7CisgICAgICAgIG5leHQgdW5sZXNzIChkZWZpbmVkICRwcy0+eyRrfSk7CisgICAgICAgIG15IEB0bXAgPSAoKTsKKyAgICAgICAgZm9yZWFjaCBteSAkdCAoQHskcHMtPnska319KSB7CisgICAgICAgICAgIG5leHQgdW5sZXNzIGxlbmd0aCAoJHQpOworICAgICAgICAgICBuZXh0IGlmICR0ID1+IG0hXHthcmNoXH0vITsKKyAgICAgICAgICAgbmV4dCBpZiAkdCA9fiBtIVwuYXJjaC1pZHMvITsKKyAgICAgICAgICAgIyBzaG91bGQgd2Ugc2tpcCB0aGlzPworICAgICAgICAgICBuZXh0IGlmICR0ID1+IG0hXC5hcmNoLWludmVudG9yeSQhOworICAgICAgICAgICAjIHRsYSBjYXQtYXJjaGl2ZS1sb2cgd2lsbCBnaXZlIHVzIGZpbGVuYW1lcyB3aXRoIHNwYWNlcyBhcyBmaWxlXChzcCluYW1lIC0gd2h5PworICAgICAgICAgICAjIHdlIGNhbiBhc3N1bWUgdGhhdCBhbnkgZmlsZW5hbWUgd2l0aCBcIGluZGljYXRlcyBzb21lIHBpa2EgZXNjYXBpbmcgdGhhdCB3ZSB3YW50IHRvIGdldCByaWQgb2YuCisgICAgICAgICAgIGlmICgkdCA9fiAvXFwvICl7CisgICAgICAgICAgICAgICAkdCA9IChzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdlc2NhcGUnLCctLXVuZXNjYXBlZCcsJHQpKVswXTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBwdXNoIEB0bXAsICR0OworICAgICAgICB9CisgICAgICAgICRwcy0+eyRrfSA9IFxAdG1wOworICAgIH0KK30KKworIyB3cml0ZS9yZWFkIGEgdGFnCitzdWIgdGFnIHsKKyAgICBteSAoJHRhZywgJGNvbW1pdCkgPSBAXzsKKworICAgIGlmICgkb3B0X28pIHsKKyAgICAgICAgJHRhZyA9fiBzfC98LS18ZzsKKyAgICB9IGVsc2UgeworCW15ICRwYXRjaG5hbWUgPSAkdGFnOworCSRwYXRjaG5hbWUgPX4gcy8uKi0tLy87CisgICAgICAgICR0YWcgPSBnaXRfYnJhbmNobmFtZSAoJHRhZykgLiAnLS0nIC4gJHBhdGNobmFtZTsKKyAgICB9CisKKyAgICBpZiAoJGNvbW1pdCkgeworICAgICAgICBvcGVuKEMsIj4iLCIkZ2l0X2Rpci9yZWZzL3RhZ3MvJHRhZyIpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCBjcmVhdGUgdGFnICR0YWc6ICQhXG4iOworICAgICAgICBwcmludCBDICIkY29tbWl0XG4iCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCB3cml0ZSB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIGNsb3NlKEMpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCB3cml0ZSB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIHByaW50ICIgKiBDcmVhdGVkIHRhZyAnJHRhZycgb24gJyRjb21taXQnXG4iIGlmICRvcHRfdjsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgIyByZWFkCisgICAgICAgIG9wZW4oQywiPCIsIiRnaXRfZGlyL3JlZnMvdGFncy8kdGFnIikKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHJlYWQgdGFnICR0YWc6ICQhXG4iOworICAgICAgICAkY29tbWl0ID0gPEM+OworICAgICAgICBjaG9tcCAkY29tbWl0OworICAgICAgICBkaWUgIkVycm9yIHJlYWRpbmcgdGFnICR0YWc6ICQhXG4iIHVubGVzcyBsZW5ndGggJGNvbW1pdCA9PSA0MDsKKyAgICAgICAgY2xvc2UoQykKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHJlYWQgdGFnICR0YWc6ICQhXG4iOworICAgICAgICByZXR1cm4gJGNvbW1pdDsKKyAgICB9Cit9CisKKyMgd3JpdGUvcmVhZCBhIHByaXZhdGUgdGFnCisjIHJlYWRzIGZhaWwgc29mdGx5IGlmIHRoZSB0YWcgaXNuJ3QgdGhlcmUKK3N1YiBwdGFnIHsKKyAgICBteSAoJHRhZywgJGNvbW1pdCkgPSBAXzsKKworICAgICMgZG9uJ3QgdXNlIHN1YmRpcnMgZm9yIHRhZ3MgeWV0LCBpdCBjb3VsZCBzY3JldyB1cCBvdGhlciBwb3JjZWxhaW5zCisgICAgJHRhZyA9fiBzfC98LHxnOworCisgICAgbXkgJHRhZ19maWxlID0gIiRwdGFnX2Rpci8kdGFnIjsKKyAgICBteSAkdGFnX2JyYW5jaF9kaXIgPSBkaXJuYW1lKCR0YWdfZmlsZSk7CisgICAgbWtwYXRoKCR0YWdfYnJhbmNoX2RpcikgdW5sZXNzICgtZCAkdGFnX2JyYW5jaF9kaXIpOworCisgICAgaWYgKCRjb21taXQpIHsgICAgICAgICAgICAgICMgd3JpdGUKKyAgICAgICAgb3BlbihDLCI+IiwkdGFnX2ZpbGUpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCBjcmVhdGUgdGFnICR0YWc6ICQhXG4iOworICAgICAgICBwcmludCBDICIkY29tbWl0XG4iCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCB3cml0ZSB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIGNsb3NlKEMpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCB3cml0ZSB0YWcgJHRhZzogJCFcbiI7CisJJHJwdGFnc3skY29tbWl0fSA9ICR0YWcKKwkgICAgdW5sZXNzICR0YWcgPX4gbS8tLWJhc2UtMCQvOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAjIHJlYWQKKyAgICAgICAgIyBpZiB0aGUgdGFnIGlzbid0IHRoZXJlLCByZXR1cm4gMAorICAgICAgICB1bmxlc3MgKCAtcyAkdGFnX2ZpbGUpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG9wZW4oQywiPCIsJHRhZ19maWxlKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3QgcmVhZCB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgICRjb21taXQgPSA8Qz47CisgICAgICAgIGNob21wICRjb21taXQ7CisgICAgICAgIGRpZSAiRXJyb3IgcmVhZGluZyB0YWcgJHRhZzogJCFcbiIgdW5sZXNzIGxlbmd0aCAkY29tbWl0ID09IDQwOworICAgICAgICBjbG9zZShDKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3QgcmVhZCB0YWcgJHRhZzogJCFcbiI7CisJdW5sZXNzIChkZWZpbmVkICRycHRhZ3N7JGNvbW1pdH0pIHsKKwkgICAgJHJwdGFnc3skY29tbWl0fSA9ICR0YWc7CisJfQorICAgICAgICByZXR1cm4gJGNvbW1pdDsKKyAgICB9Cit9CisKK3N1YiBmaW5kX3BhcmVudHMgeworICAgICMKKyAgICAjIElkZW50aWZ5IHdoYXQgYnJhbmNoZXMgYXJlIG1lcmdpbmcgaW50byBtZQorICAgICMgYW5kIHdoZXRoZXIgd2UgYXJlIGZ1bGx5IG1lcmdlZAorICAgICMgZ2l0LW1lcmdlLWJhc2UgPGhlYWRzaGE+IDxoZWFkc2hhPiBzaG91bGQgdGVsbAorICAgICMgbWUgd2hhdCB0aGUgYmFzZSBvZiB0aGUgbWVyZ2Ugc2hvdWxkIGJlCisgICAgIworICAgIG15ICRwcyA9IHNoaWZ0OworCisgICAgbXkgJWJyYW5jaGVzOyAjIGhvbGRzIGFuIGFycmF5cmVmIHBlciBicmFuY2gKKyAgICAgICAgICAgICAgICAgICMgdGhlIGFycmF5cmVmIGNvbnRhaW5zIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgIyBtZXJnZWQgcGF0Y2hlcyBiZXR3ZWVuIHRoZSBiYXNlCisgICAgICAgICAgICAgICAgICAjIG9mIHRoZSBtZXJnZSBhbmQgdGhlIGN1cnJlbnQgaGVhZAorCisgICAgbXkgQHBhcmVudHM7ICAjIHBhcmVudHMgZm91bmQgZm9yIHRoaXMgY29tbWl0CisKKyAgICAjIHNpbXBsZSBsb29wIHRvIHNwbGl0IHRoZSBtZXJnZXMKKyAgICAjIHBlciBicmFuY2gKKyAgICBmb3JlYWNoIG15ICRtZXJnZSAoQHskcHMtPnttZXJnZXN9fSkgeworCW15ICRicmFuY2ggPSBnaXRfYnJhbmNobmFtZSgkbWVyZ2UpOworCXVubGVzcyAoZGVmaW5lZCAkYnJhbmNoZXN7JGJyYW5jaH0gKXsKKwkgICAgJGJyYW5jaGVzeyRicmFuY2h9ID0gW107CisJfQorCXB1c2ggQHskYnJhbmNoZXN7JGJyYW5jaH19LCAkbWVyZ2U7CisgICAgfQorCisgICAgIworICAgICMgZm9yZWFjaCBicmFuY2ggZmluZCBhIG1lcmdlIGJhc2UgYW5kIHdhbGsgaXQgdG8gdGhlCisgICAgIyBoZWFkIHdoZXJlIHdlIGFyZSwgY29sbGVjdGluZyB0aGUgbWVyZ2VkIHBhdGNoc2V0cyB0aGF0CisgICAgIyBBcmNoIGhhcyByZWNvcmRlZC4gS2VlcCB0aGF0IGluIEBoYXZlCisgICAgIyBDb21wYXJlIHRoYXQgd2l0aCB0aGUgY29tbWl0cyBvbiB0aGUgb3RoZXIgYnJhbmNoCisgICAgIyBiZXR3ZWVuIG1lcmdlLWJhc2UgYW5kIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCAoQG5lZWQpCisgICAgIyBhbmQgc2VlIGlmIHdlIGhhdmUgYSBzZXJpZXMgb2YgY29uc2VjdXRpdmUgcGF0Y2hlcworICAgICMgc3RhcnRpbmcgZnJvbSB0aGUgbWVyZ2UgYmFzZS4gVGhlIHRpcCBvZiB0aGUgc2VyaWVzCisgICAgIyBvZiBjb25zZWN1dGl2ZSBwYXRjaGVzIG1lcmdlZCBpcyBvdXIgbmV3IHBhcmVudCBmb3IKKyAgICAjIHRoYXQgYnJhbmNoLgorICAgICMKKyAgICBmb3JlYWNoIG15ICRicmFuY2ggKGtleXMgJWJyYW5jaGVzKSB7CisKKwkjIGNoZWNrIHRoYXQgd2UgYWN0dWFsbHkga25vdyBhYm91dCB0aGUgYnJhbmNoCisJbmV4dCB1bmxlc3MgLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJGJyYW5jaCI7CisKKwlteSAkbWVyZ2ViYXNlID0gc2FmZV9waXBlX2NhcHR1cmUocXcoZ2l0LW1lcmdlLWJhc2UpLCAkYnJhbmNoLCAkcHMtPnticmFuY2h9KTsKKwlpZiAoJD8pIHsKKwkgICAgIyBEb24ndCBkaWUgaGVyZSwgQXJjaCBzdXBwb3J0cyBvbmUtd2F5IGNoZXJyeS1waWNraW5nCisJICAgICMgYmV0d2VlbiBicmFuY2hlcyB3aXRoIG5vIGNvbW1vbiBiYXNlIChvciBhbnkgcmVsYXRpb25zaGlwCisJICAgICMgYXQgYWxsIGJlZm9yZWhhbmQpCisJICAgIHdhcm4gIkNhbm5vdCBmaW5kIG1lcmdlIGJhc2UgZm9yICRicmFuY2ggYW5kICRwcy0+e2JyYW5jaH0iOworCSAgICBuZXh0OworCX0KKwljaG9tcCAkbWVyZ2ViYXNlOworCisJIyBub3cgd2FsayB1cCB0byB0aGUgbWVyZ2Vwb2ludCBjb2xsZWN0aW5nIHdoYXQgcGF0Y2hlcyB3ZSBoYXZlCisJbXkgJGJyYW5jaHRpcCA9IGdpdF9yZXZfcGFyc2UoJHBzLT57YnJhbmNofSk7CisJbXkgQGFuY2VzdG9ycyA9IGBnaXQtcmV2LWxpc3QgLS10b3BvLW9yZGVyICRicmFuY2h0aXAgXiRtZXJnZWJhc2VgOworCW15ICVoYXZlOyAjIGNvbGxlY3RlZCBtZXJnZXMgdGhpcyBicmFuY2ggaGFzCisJZm9yZWFjaCBteSAkbWVyZ2UgKEB7JHBzLT57bWVyZ2VzfX0pIHsKKwkgICAgJGhhdmV7JG1lcmdlfSA9IDE7CisJfQorCW15ICVhbmNlc3RvcnNoYXZlOworCWZvcmVhY2ggbXkgJHBhciAoQGFuY2VzdG9ycykgeworCSAgICAkcGFyID0gY29tbWl0aWQycHNldCgkcGFyKTsKKwkgICAgaWYgKGRlZmluZWQgJHBhci0+e21lcmdlc30pIHsKKwkJZm9yZWFjaCBteSAkbWVyZ2UgKEB7JHBhci0+e21lcmdlc319KSB7CisJCSAgICAkYW5jZXN0b3JzaGF2ZXskbWVyZ2V9PTE7CisJCX0KKwkgICAgfQorCX0KKwkjIHByaW50ICIrKysrIE1lcmdlcyBpbiAkcHMtPntpZH0gYXJlLi4uLlxuIjsKKwkjIG15IEBoYXZlID0gc29ydCBrZXlzICVoYXZlOwlwcmludCBEdW1wZXIoXEBoYXZlKTsKKworCSMgbWVyZ2Ugd2hhdCB3ZSBoYXZlIHdpdGggd2hhdCBhbmNlc3RvcnMgaGF2ZQorCSVoYXZlID0gKCVoYXZlLCAlYW5jZXN0b3JzaGF2ZSk7CisKKwkjIHNlZSB3aGF0IHRoZSByZW1vdGUgYnJhbmNoIGhhcyAtIHRoZXNlIGFyZSB0aGUgbWVyZ2VzIHdlCisJIyB3aWxsIHdhbnQgdG8gaGF2ZSBpbiBhIGNvbnNlY3V0aXZlIHNlcmllcyBmcm9tIHRoZSBtZXJnZWJhc2UKKwlteSAkb3RoZXJicmFuY2h0aXAgPSBnaXRfcmV2X3BhcnNlKCRicmFuY2gpOworCW15IEBuZWVkcmF3ID0gYGdpdC1yZXYtbGlzdCAtLXRvcG8tb3JkZXIgJG90aGVyYnJhbmNodGlwIF4kbWVyZ2ViYXNlYDsKKwlteSBAbmVlZDsKKwlmb3JlYWNoIG15ICRuZWVkcHMgKEBuZWVkcmF3KSB7IAkjIGdldCB0aGUgcHNldHMKKwkgICAgJG5lZWRwcyA9IGNvbW1pdGlkMnBzZXQoJG5lZWRwcyk7CisJICAgICMgZ2l0LXJldi1saXN0IHdpbGwgYWxzbworCSAgICAjIGxpc3QgY29tbWl0cyBtZXJnZWQgaW4gdmlhIGVhcmxpZXIKKwkgICAgIyBtZXJnZXMuIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gY29tbWl0cworCSAgICAjIGZyb20gdGhlIGJyYW5jaCB3ZSdyZSBsb29raW5nIGF0CisJICAgIGlmICgkYnJhbmNoIGVxICRuZWVkcHMtPnticmFuY2h9KSB7CisJCXB1c2ggQG5lZWQsICRuZWVkcHMtPntpZH07CisJICAgIH0KKwl9CisKKwkjIHByaW50ICIrKysrIE1lcmdlcyBmcm9tICRicmFuY2ggd2Ugd2FudCBhcmUuLi4uXG4iOworCSMgcHJpbnQgRHVtcGVyKFxAbmVlZCk7CisKKwlteSAkbmV3cGFyZW50OworCXdoaWxlIChteSAkbmVlZGVkX2NvbW1pdCA9IHBvcCBAbmVlZCkgeworCSAgICBpZiAoJGhhdmV7JG5lZWRlZF9jb21taXR9KSB7CisJCSRuZXdwYXJlbnQgPSAkbmVlZGVkX2NvbW1pdDsKKwkgICAgfSBlbHNlIHsKKwkJbGFzdDsgIyBicmVhayBvdXQgb2YgdGhlIHdoaWxlCisJICAgIH0KKwl9CisJaWYgKCRuZXdwYXJlbnQpIHsKKwkgICAgcHVzaCBAcGFyZW50cywgJG5ld3BhcmVudDsKKwl9CisKKworICAgIH0gIyBlbmQgZm9yZWFjaCBicmFuY2gKKworICAgICMgcHJ1bmUgcmVkdW5kYW50IHBhcmVudHMKKyAgICBteSAlcGFyZW50czsKKyAgICBmb3JlYWNoIG15ICRwIChAcGFyZW50cykgeworCSRwYXJlbnRzeyRwfSA9IDE7CisgICAgfQorICAgIGZvcmVhY2ggbXkgJHAgKEBwYXJlbnRzKSB7CisJbmV4dCB1bmxlc3MgZXhpc3RzICRwc2V0c3skcH17bWVyZ2VzfTsKKwluZXh0IHVubGVzcyByZWYgICAgJHBzZXRzeyRwfXttZXJnZXN9OworCW15IEBtZXJnZXMgPSBAeyRwc2V0c3skcH17bWVyZ2VzfX07CisJZm9yZWFjaCBteSAkbWVyZ2UgKEBtZXJnZXMpIHsKKwkgICAgaWYgKCRwYXJlbnRzeyRtZXJnZX0pIHsKKwkJZGVsZXRlICRwYXJlbnRzeyRtZXJnZX07CisJICAgIH0KKwl9CisgICAgfQorCisgICAgQHBhcmVudHMgPSAoKTsKKyAgICBmb3JlYWNoIChrZXlzICVwYXJlbnRzKSB7CisgICAgICAgIHB1c2ggQHBhcmVudHMsICctcCcsIHB0YWcoJF8pOworICAgIH0KKyAgICByZXR1cm4gQHBhcmVudHM7Cit9CisKK3N1YiBnaXRfcmV2X3BhcnNlIHsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgIG15ICR2YWwgID0gc2FmZV9waXBlX2NhcHR1cmUocXcoZ2l0LXJldi1wYXJzZSksICRuYW1lKTsKKyAgICBkaWUgIkVycm9yOiBnaXQtcmV2LXBhcnNlICRuYW1lIiBpZiAkPzsKKyAgICBjaG9tcCAkdmFsOworICAgIHJldHVybiAkdmFsOworfQorCisjIHJlc29sdmUgYSBTSEExIHRvIGEga25vd24gcGF0Y2hzZXQKK3N1YiBjb21taXRpZDJwc2V0IHsKKyAgICBteSAkY29tbWl0aWQgPSBzaGlmdDsKKyAgICBjaG9tcCAkY29tbWl0aWQ7CisgICAgbXkgJG5hbWUgPSAkcnB0YWdzeyRjb21taXRpZH0KKwl8fCBkaWUgIkNhbm5vdCBmaW5kIHJldmVyc2UgdGFnIG1hcHBpbmcgZm9yICRjb21taXRpZCI7CisgICAgJG5hbWUgPX4gc3wsfC98OworICAgIG15ICRwcyAgID0gJHBzZXRzeyRuYW1lfQorCXx8IChwcmludCBEdW1wZXIoc29ydCBrZXlzICVwc2V0cykpICYmIGRpZSAiQ2Fubm90IGZpbmQgcGF0Y2hzZXQgZm9yICRuYW1lIjsKKyAgICByZXR1cm4gJHBzOworfQorCisKKyMgYW4gYWx0ZXJuYXRpdmUgdG8gYGNvbW1hbmRgIHRoYXQgYWxsb3dzIGlucHV0IHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheQorIyB0byB3b3JrIGFyb3VuZCBzaGVsbCBwcm9ibGVtcyB3aXRoIHdlaXJkIGNoYXJhY3RlcnMgaW4gYXJndW1lbnRzCitzdWIgc2FmZV9waXBlX2NhcHR1cmUgeworICAgIG15IEBvdXRwdXQ7CisgICAgaWYgKG15ICRwaWQgPSBvcGVuIG15ICRjaGlsZCwgJy18JykgeworICAgICAgICBAb3V0cHV0ID0gKDwkY2hpbGQ+KTsKKyAgICAgICAgY2xvc2UgJGNoaWxkIG9yIGRpZSBqb2luKCcgJyxAXykuIjogJCEgJD8iOworICAgIH0gZWxzZSB7CisJZXhlYyhAXykgb3IgZGllICIkISAkPyI7ICMgZXhlYygpIGNhbiBmYWlsIHRoZSBleGVjdXRhYmxlIGNhbid0IGJlIGZvdW5kCisgICAgfQorICAgIHJldHVybiB3YW50YXJyYXkgPyBAb3V0cHV0IDogam9pbignJyxAb3V0cHV0KTsKK30KKworIyBgdGxhIGxvZ3MgLXJmIC1kIDxkaXI+IHwgaGVhZCAtbjFgIG9yIGBiYXogdHJlZS1pZCA8ZGlyPmAKK3N1YiBhcmNoX3RyZWVfaWQgeworICAgIG15ICRkaXIgPSBzaGlmdDsKKyAgICBjaG9tcCggbXkgJHJldCA9IChzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdsb2dzJywnLXJmJywnLWQnLCRkaXIpKVswXSApOworICAgIHJldHVybiAkcmV0OworfQorCitzdWIgYXJjaGl2ZV9yZWFjaGFibGUgeworICAgIG15ICRhcmNoaXZlID0gc2hpZnQ7CisgICAgcmV0dXJuIDEgaWYgJHJlYWNoYWJsZXskYXJjaGl2ZX07CisgICAgcmV0dXJuIDAgaWYgJHVucmVhY2hhYmxleyRhcmNoaXZlfTsKKworICAgIGlmIChzeXN0ZW0gIiRUTEEgd2hlcmVpcy1hcmNoaXZlICRhcmNoaXZlID4vZGV2L251bGwiKSB7CisgICAgICAgIGlmICgkb3B0X2EgJiYgKHN5c3RlbSgkVExBLCdyZWdpc3Rlci1hcmNoaXZlJywKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL21pcnJvcnMuc291cmNlY29udHJvbC5uZXQvJGFyY2hpdmUiKSA9PSAwKSkgeworICAgICAgICAgICAgJHJlYWNoYWJsZXskYXJjaGl2ZX0gPSAxOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgU1RERVJSICJBcmNoaXZlIGlzIHVucmVhY2hhYmxlOiAkYXJjaGl2ZVxuIjsKKyAgICAgICAgJHVucmVhY2hhYmxleyRhcmNoaXZlfSA9IDE7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgICRyZWFjaGFibGV7JGFyY2hpdmV9ID0gMTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ2l0LWJpc2VjdC5zaCBiL2dpdC1iaXNlY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWZlZTEyYgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1iaXNlY3Quc2gKQEAgLTAsMCArMSwzNDggQEAKKyMhL2Jpbi9zaAorCitVU0FHRT0nW2hlbHB8c3RhcnR8YmFkfGdvb2R8bmV3fG9sZHx0ZXJtc3xza2lwfG5leHR8cmVzZXR8dmlzdWFsaXplfHZpZXd8cmVwbGF5fGxvZ3xydW5dJworTE9OR19VU0FHRT0nZ2l0IGJpc2VjdCBoZWxwCisJcHJpbnQgdGhpcyBsb25nIGhlbHAgbWVzc2FnZS4KK2dpdCBiaXNlY3Qgc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9PTx0ZXJtPl0KKwkJIFstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRoc3BlYz4uLi5dCisJcmVzZXQgYmlzZWN0IHN0YXRlIGFuZCBzdGFydCBiaXNlY3Rpb24uCitnaXQgYmlzZWN0IChiYWR8bmV3KSBbPHJldj5dCisJbWFyayA8cmV2PiBhIGtub3duLWJhZCByZXZpc2lvbi8KKwkJYSByZXZpc2lvbiBhZnRlciBjaGFuZ2UgaW4gYSBnaXZlbiBwcm9wZXJ0eS4KK2dpdCBiaXNlY3QgKGdvb2R8b2xkKSBbPHJldj4uLi5dCisJbWFyayA8cmV2Pi4uLiBrbm93bi1nb29kIHJldmlzaW9ucy8KKwkJcmV2aXNpb25zIGJlZm9yZSBjaGFuZ2UgaW4gYSBnaXZlbiBwcm9wZXJ0eS4KK2dpdCBiaXNlY3QgdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLWJhZF0KKwlzaG93IHRoZSB0ZXJtcyB1c2VkIGZvciBvbGQgYW5kIG5ldyBjb21taXRzIChkZWZhdWx0OiBiYWQsIGdvb2QpCitnaXQgYmlzZWN0IHNraXAgWyg8cmV2Pnw8cmFuZ2U+KS4uLl0KKwltYXJrIDxyZXY+Li4uIHVudGVzdGFibGUgcmV2aXNpb25zLgorZ2l0IGJpc2VjdCBuZXh0CisJZmluZCBuZXh0IGJpc2VjdGlvbiB0byB0ZXN0IGFuZCBjaGVjayBpdCBvdXQuCitnaXQgYmlzZWN0IHJlc2V0IFs8Y29tbWl0Pl0KKwlmaW5pc2ggYmlzZWN0aW9uIHNlYXJjaCBhbmQgZ28gYmFjayB0byBjb21taXQuCitnaXQgYmlzZWN0ICh2aXN1YWxpemV8dmlldykKKwlzaG93IGJpc2VjdCBzdGF0dXMgaW4gZ2l0ay4KK2dpdCBiaXNlY3QgcmVwbGF5IDxsb2dmaWxlPgorCXJlcGxheSBiaXNlY3Rpb24gbG9nLgorZ2l0IGJpc2VjdCBsb2cKKwlzaG93IGJpc2VjdCBsb2cuCitnaXQgYmlzZWN0IHJ1biA8Y21kPi4uLgorCXVzZSA8Y21kPi4uLiB0byBhdXRvbWF0aWNhbGx5IGJpc2VjdC4KKworUGxlYXNlIHVzZSAiZ2l0IGhlbHAgYmlzZWN0IiB0byBnZXQgdGhlIGZ1bGwgbWFuIHBhZ2UuJworCitPUFRJT05TX1NQRUM9CisuIGdpdC1zaC1zZXR1cAorCitfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJworX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKK1RFUk1fQkFEPWJhZAorVEVSTV9HT09EPWdvb2QKKworYmlzZWN0X2hlYWQoKQoreworCWlmIHRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9IRUFEIgorCXRoZW4KKwkJZWNobyBCSVNFQ1RfSEVBRAorCWVsc2UKKwkJZWNobyBIRUFECisJZmkKK30KKworYmlzZWN0X2F1dG9zdGFydCgpIHsKKwl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiIHx8IHsKKwkJZ2V0dGV4dGxuICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIgPiYyCisJCWlmIHRlc3QgLXQgMAorCQl0aGVuCisJCQkjIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisJCQkjIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKwkJCSMgYXQgdGhpcyBwb2ludC4KKwkJCWdldHRleHQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIgPiYyCisJCQlyZWFkIHllc25vCisJCQljYXNlICIkeWVzbm8iIGluCisJCQlbTm5dKikKKwkJCQlleGl0IDs7CisJCQllc2FjCisJCQliaXNlY3Rfc3RhcnQKKwkJZWxzZQorCQkJZXhpdCAxCisJCWZpCisJfQorfQorCitiaXNlY3Rfc3RhcnQoKSB7CisJZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0ICRAIHx8IGV4aXQKKworCSMKKwkjIENoYW5nZSBzdGF0ZS4KKwkjIEluIGNhc2Ugb2YgbWlzdGFrZW4gcmV2cyBvciBjaGVja291dCBlcnJvciwgb3Igc2lnbmFscyByZWNlaXZlZCwKKwkjICJiaXNlY3RfYXV0b19uZXh0IiBiZWxvdyBtYXkgZXhpdCBvciBtaXNiZWhhdmUuCisJIyBXZSBoYXZlIHRvIHRyYXAgdGhpcyB0byBiZSBhYmxlIHRvIGNsZWFuIHVwIHVzaW5nCisJIyAiYmlzZWN0X2NsZWFuX3N0YXRlIi4KKwkjCisJdHJhcCAnZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlJyAwCisJdHJhcCAnZXhpdCAyNTUnIDEgMiAzIDE1CisKKwkjCisJIyBDaGVjayBpZiB3ZSBjYW4gcHJvY2VlZCB0byB0aGUgbmV4dCBiaXNlY3Qgc3RhdGUuCisJIworCWdldF90ZXJtcworCWJpc2VjdF9hdXRvX25leHQKKworCXRyYXAgJy0nIDAKK30KKworYmlzZWN0X3NraXAoKSB7CisJYWxsPScnCisJZm9yIGFyZyBpbiAiJEAiCisJZG8KKwkJY2FzZSAiJGFyZyIgaW4KKwkJKi4uKikKKwkJCXJldnM9JChnaXQgcmV2LWxpc3QgIiRhcmciKSB8fCBkaWUgIiQoZXZhbF9nZXR0ZXh0ICJCYWQgcmV2IGlucHV0OiBcJGFyZyIpIiA7OworCQkqKQorCQkJcmV2cz0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGFyZyIpIDs7CisJCWVzYWMKKwkJYWxsPSIkYWxsICRyZXZzIgorCWRvbmUKKwlldmFsIGJpc2VjdF9zdGF0ZSAnc2tpcCcgJGFsbAorfQorCitiaXNlY3Rfc3RhdGUoKSB7CisJYmlzZWN0X2F1dG9zdGFydAorCXN0YXRlPSQxCisJZ2l0IGJpc2VjdC0taGVscGVyIC0tY2hlY2stYW5kLXNldC10ZXJtcyAkc3RhdGUgJFRFUk1fR09PRCAkVEVSTV9CQUQgfHwgZXhpdAorCWdldF90ZXJtcworCWNhc2UgIiQjLCRzdGF0ZSIgaW4KKwkwLCopCisJCWRpZSAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIiA7OworCTEsIiRURVJNX0JBRCJ8MSwiJFRFUk1fR09PRCJ8MSxza2lwKQorCQliaXNlY3RlZF9oZWFkPSQoYmlzZWN0X2hlYWQpCisJCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRiaXNlY3RlZF9oZWFkIikgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkJhZCByZXYgaW5wdXQ6IFwkYmlzZWN0ZWRfaGVhZCIpIgorCQlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgIiRzdGF0ZSIgIiRyZXYiICIkVEVSTV9HT09EIiAiJFRFUk1fQkFEIiB8fCBleGl0CisJCWdpdCBiaXNlY3QtLWhlbHBlciAtLWNoZWNrLWV4cGVjdGVkLXJldnMgIiRyZXYiIDs7CisJMiwiJFRFUk1fQkFEInwqLCIkVEVSTV9HT09EInwqLHNraXApCisJCXNoaWZ0CisJCWhhc2hfbGlzdD0nJworCQlmb3IgcmV2IGluICIkQCIKKwkJZG8KKwkJCXNoYT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZXZee2NvbW1pdH0iKSB8fAorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIkJhZCByZXYgaW5wdXQ6IFwkcmV2IikiCisJCQloYXNoX2xpc3Q9IiRoYXNoX2xpc3QgJHNoYSIKKwkJZG9uZQorCQlmb3IgcmV2IGluICRoYXNoX2xpc3QKKwkJZG8KKwkJCWdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSAiJHN0YXRlIiAiJHJldiIgIiRURVJNX0dPT0QiICIkVEVSTV9CQUQiIHx8IGV4aXQKKwkJZG9uZQorCQlnaXQgYmlzZWN0LS1oZWxwZXIgLS1jaGVjay1leHBlY3RlZC1yZXZzICRoYXNoX2xpc3QgOzsKKwkqLCIkVEVSTV9CQUQiKQorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICInZ2l0IGJpc2VjdCBcJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iKSIgOzsKKwkqKQorCQl1c2FnZSA7OworCWVzYWMKKwliaXNlY3RfYXV0b19uZXh0Cit9CisKK2Jpc2VjdF9hdXRvX25leHQoKSB7CisJZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgJFRFUk1fR09PRCAkVEVSTV9CQUQgJiYgYmlzZWN0X25leHQgfHwgOgorfQorCitiaXNlY3RfbmV4dCgpIHsKKwljYXNlICIkIyIgaW4gMCkgOzsgKikgdXNhZ2UgOzsgZXNhYworCWJpc2VjdF9hdXRvc3RhcnQKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayAkVEVSTV9HT09EICRURVJNX0JBRCAkVEVSTV9HT09EfHwgZXhpdAorCisJIyBQZXJmb3JtIGFsbCBiaXNlY3Rpb24gY29tcHV0YXRpb24sIGRpc3BsYXkgYW5kIGNoZWNrb3V0CisJZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgJCh0ZXN0IC1mICIkR0lUX0RJUi9CSVNFQ1RfSEVBRCIgJiYgZWNobyAtLW5vLWNoZWNrb3V0KQorCXJlcz0kPworCisJIyBDaGVjayBpZiB3ZSBzaG91bGQgZXhpdCBiZWNhdXNlIGJpc2VjdGlvbiBpcyBmaW5pc2hlZAorCWlmIHRlc3QgJHJlcyAtZXEgMTAKKwl0aGVuCisJCWJhZF9yZXY9JChnaXQgc2hvdy1yZWYgLS1oYXNoIC0tdmVyaWZ5IHJlZnMvYmlzZWN0LyRURVJNX0JBRCkKKwkJYmFkX2NvbW1pdD0kKGdpdCBzaG93LWJyYW5jaCAkYmFkX3JldikKKwkJZWNobyAiIyBmaXJzdCAkVEVSTV9CQUQgY29tbWl0OiAkYmFkX2NvbW1pdCIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKKwkJZXhpdCAwCisJZWxpZiB0ZXN0ICRyZXMgLWVxIDIKKwl0aGVuCisJCWVjaG8gIiMgb25seSBza2lwcGVkIGNvbW1pdHMgbGVmdCB0byB0ZXN0IiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorCQlnb29kX3JldnM9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpIiAicmVmcy9iaXNlY3QvJFRFUk1fR09PRC0qIikKKwkJZm9yIHNraXBwZWQgaW4gJChnaXQgcmV2LWxpc3QgcmVmcy9iaXNlY3QvJFRFUk1fQkFEIC0tbm90ICRnb29kX3JldnMpCisJCWRvCisJCQlza2lwcGVkX2NvbW1pdD0kKGdpdCBzaG93LWJyYW5jaCAkc2tpcHBlZCkKKwkJCWVjaG8gIiMgcG9zc2libGUgZmlyc3QgJFRFUk1fQkFEIGNvbW1pdDogJHNraXBwZWRfY29tbWl0IiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorCQlkb25lCisJCWV4aXQgJHJlcworCWZpCisKKwkjIENoZWNrIGZvciBhbiBlcnJvciBpbiB0aGUgYmlzZWN0aW9uIHByb2Nlc3MKKwl0ZXN0ICRyZXMgLW5lIDAgJiYgZXhpdCAkcmVzCisKKwlyZXR1cm4gMAorfQorCitiaXNlY3RfdmlzdWFsaXplKCkgeworCWdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrICRURVJNX0dPT0QgJFRFUk1fQkFEIGZhaWwgfHwgZXhpdAorCisJaWYgdGVzdCAkIyA9IDAKKwl0aGVuCisJCWlmIHRlc3QgLW4gIiR7RElTUExBWStzZXR9JHtTRVNTSU9OTkFNRStzZXR9JHtNU1lTVEVNK3NldH0ke1NFQ1VSSVRZU0VTU0lPTklEK3NldH0iICYmCisJCQl0eXBlIGdpdGsgPi9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCXNldCBnaXRrCisJCWVsc2UKKwkJCXNldCBnaXQgbG9nCisJCWZpCisJZWxzZQorCQljYXNlICIkMSIgaW4KKwkJZ2l0Knx0aWcpIDs7CisJCS0qKQlzZXQgZ2l0IGxvZyAiJEAiIDs7CisJCSopCXNldCBnaXQgIiRAIiA7OworCQllc2FjCisJZmkKKworCWV2YWwgJyIkQCInIC0tYmlzZWN0IC0tICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiKQorfQorCitiaXNlY3RfcmVwbGF5ICgpIHsKKwlmaWxlPSIkMSIKKwl0ZXN0ICIkIyIgLWVxIDEgfHwgZGllICIkKGdldHRleHQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iKSIKKwl0ZXN0IC1yICIkZmlsZSIgfHwgZGllICIkKGV2YWxfZ2V0dGV4dCAiY2Fubm90IHJlYWQgXCRmaWxlIGZvciByZXBsYXlpbmciKSIKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgfHwgZXhpdAorCXdoaWxlIHJlYWQgZ2l0IGJpc2VjdCBjb21tYW5kIHJldgorCWRvCisJCXRlc3QgIiRnaXQgJGJpc2VjdCIgPSAiZ2l0IGJpc2VjdCIgfHwgdGVzdCAiJGdpdCIgPSAiZ2l0LWJpc2VjdCIgfHwgY29udGludWUKKwkJaWYgdGVzdCAiJGdpdCIgPSAiZ2l0LWJpc2VjdCIKKwkJdGhlbgorCQkJcmV2PSIkY29tbWFuZCIKKwkJCWNvbW1hbmQ9IiRiaXNlY3QiCisJCWZpCisJCWdldF90ZXJtcworCQlnaXQgYmlzZWN0LS1oZWxwZXIgLS1jaGVjay1hbmQtc2V0LXRlcm1zICIkY29tbWFuZCIgIiRURVJNX0dPT0QiICIkVEVSTV9CQUQiIHx8IGV4aXQKKwkJZ2V0X3Rlcm1zCisJCWNhc2UgIiRjb21tYW5kIiBpbgorCQlzdGFydCkKKwkJCWNtZD0iYmlzZWN0X3N0YXJ0ICRyZXYiCisJCQlldmFsICIkY21kIiA7OworCQkiJFRFUk1fR09PRCJ8IiRURVJNX0JBRCJ8c2tpcCkKKwkJCWdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSAiJGNvbW1hbmQiICIkcmV2IiAiJFRFUk1fR09PRCIgIiRURVJNX0JBRCIgfHwgZXhpdDs7CisJCXRlcm1zKQorCQkJZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zICRyZXYgfHwgZXhpdDs7CisJCSopCisJCQlkaWUgIiQoZ2V0dGV4dCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IikiIDs7CisJCWVzYWMKKwlkb25lIDwiJGZpbGUiCisJYmlzZWN0X2F1dG9fbmV4dAorfQorCitiaXNlY3RfcnVuICgpIHsKKwlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayAkVEVSTV9HT09EICRURVJNX0JBRCBmYWlsIHx8IGV4aXQKKworCXRlc3QgLW4gIiQqIiB8fCBkaWUgIiQoZ2V0dGV4dCAiYmlzZWN0IHJ1biBmYWlsZWQ6IG5vIGNvbW1hbmQgcHJvdmlkZWQuIikiCisKKwl3aGlsZSB0cnVlCisJZG8KKwkJY29tbWFuZD0iJEAiCisJCWV2YWxfZ2V0dGV4dGxuICJydW5uaW5nIFwkY29tbWFuZCIKKwkJIiRAIgorCQlyZXM9JD8KKworCQkjIENoZWNrIGZvciByZWFsbHkgYmFkIHJ1biBlcnJvci4KKwkJaWYgWyAkcmVzIC1sdCAwIC1vICRyZXMgLWdlIDEyOCBdCisJCXRoZW4KKwkJCWV2YWxfZ2V0dGV4dGxuICJiaXNlY3QgcnVuIGZhaWxlZDoKK2V4aXQgY29kZSBcJHJlcyBmcm9tICdcJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiID4mMgorCQkJZXhpdCAkcmVzCisJCWZpCisKKwkJIyBGaW5kIGN1cnJlbnQgc3RhdGUgZGVwZW5kaW5nIG9uIHJ1biBzdWNjZXNzIG9yIGZhaWx1cmUuCisJCSMgQSBzcGVjaWFsIGV4aXQgY29kZSBvZiAxMjUgbWVhbnMgY2Fubm90IHRlc3QuCisJCWlmIFsgJHJlcyAtZXEgMTI1IF0KKwkJdGhlbgorCQkJc3RhdGU9J3NraXAnCisJCWVsaWYgWyAkcmVzIC1ndCAwIF0KKwkJdGhlbgorCQkJc3RhdGU9IiRURVJNX0JBRCIKKwkJZWxzZQorCQkJc3RhdGU9IiRURVJNX0dPT0QiCisJCWZpCisKKwkJIyBXZSBoYXZlIHRvIHVzZSBhIHN1YnNoZWxsIGJlY2F1c2UgImJpc2VjdF9zdGF0ZSIgY2FuIGV4aXQuCisJCSggYmlzZWN0X3N0YXRlICRzdGF0ZSA+IiRHSVRfRElSL0JJU0VDVF9SVU4iICkKKwkJcmVzPSQ/CisKKwkJY2F0ICIkR0lUX0RJUi9CSVNFQ1RfUlVOIgorCisJCWlmIHNhbmVfZ3JlcCAiZmlyc3QgJFRFUk1fQkFEIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiBcCisJCQk+L2Rldi9udWxsCisJCXRoZW4KKwkJCWdldHRleHRsbiAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiID4mMgorCQkJZXhpdCAkcmVzCisJCWZpCisKKwkJaWYgWyAkcmVzIC1uZSAwIF0KKwkJdGhlbgorCQkJZXZhbF9nZXR0ZXh0bG4gImJpc2VjdCBydW4gZmFpbGVkOgorJ2Jpc2VjdF9zdGF0ZSBcJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlIFwkcmVzIiA+JjIKKwkJCWV4aXQgJHJlcworCQlmaQorCisJCWlmIHNhbmVfZ3JlcCAiaXMgdGhlIGZpcnN0ICRURVJNX0JBRCBjb21taXQiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiA+L2Rldi9udWxsCisJCXRoZW4KKwkJCWdldHRleHRsbiAiYmlzZWN0IHJ1biBzdWNjZXNzIgorCQkJZXhpdCAwOworCQlmaQorCisJZG9uZQorfQorCitiaXNlY3RfbG9nICgpIHsKKwl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfTE9HIiB8fCBkaWUgIiQoZ2V0dGV4dCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIikiCisJY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorfQorCitnZXRfdGVybXMgKCkgeworCWlmIHRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9URVJNUyIKKwl0aGVuCisJCXsKKwkJcmVhZCBURVJNX0JBRAorCQlyZWFkIFRFUk1fR09PRAorCQl9IDwiJEdJVF9ESVIvQklTRUNUX1RFUk1TIgorCWZpCit9CisKK2Nhc2UgIiQjIiBpbgorMCkKKwl1c2FnZSA7OworKikKKwljbWQ9IiQxIgorCWdldF90ZXJtcworCXNoaWZ0CisJY2FzZSAiJGNtZCIgaW4KKwloZWxwKQorCQlnaXQgYmlzZWN0IC1oIDs7CisJc3RhcnQpCisJCWJpc2VjdF9zdGFydCAiJEAiIDs7CisJYmFkfGdvb2R8bmV3fG9sZHwiJFRFUk1fQkFEInwiJFRFUk1fR09PRCIpCisJCWJpc2VjdF9zdGF0ZSAiJGNtZCIgIiRAIiA7OworCXNraXApCisJCWJpc2VjdF9za2lwICIkQCIgOzsKKwluZXh0KQorCQkjIE5vdCBzdXJlIHdlIHdhbnQgIm5leHQiIGF0IHRoZSBVSSBsZXZlbCBhbnltb3JlLgorCQliaXNlY3RfbmV4dCAiJEAiIDs7CisJdmlzdWFsaXplfHZpZXcpCisJCWJpc2VjdF92aXN1YWxpemUgIiRAIiA7OworCXJlc2V0KQorCQlnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgIiRAIiA7OworCXJlcGxheSkKKwkJYmlzZWN0X3JlcGxheSAiJEAiIDs7CisJbG9nKQorCQliaXNlY3RfbG9nIDs7CisJcnVuKQorCQliaXNlY3RfcnVuICIkQCIgOzsKKwl0ZXJtcykKKwkJZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zICIkQCIgfHwgZXhpdDs7CisJKikKKwkJdXNhZ2UgOzsKKwllc2FjCitlc2FjCmRpZmYgLS1naXQgYS9naXQtY29tcGF0LXV0aWwuaCBiL2dpdC1jb21wYXQtdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZDBiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtY29tcGF0LXV0aWwuaApAQCAtMCwwICsxLDEzMzggQEAKKyNpZm5kZWYgR0lUX0NPTVBBVF9VVElMX0gKKyNkZWZpbmUgR0lUX0NPTVBBVF9VVElMX0gKKworI2lmZGVmIFVTRV9NU1ZDX0NSVERCRworLyoKKyAqIEZvciB0aGVzZSB0byB3b3JrIHRoZXkgbXVzdCBhcHBlYXIgdmVyeSBlYXJseSBpbiBlYWNoCisgKiBmaWxlIC0tIGJlZm9yZSBtb3N0IG9mIHRoZSBzdGFuZGFyZCBoZWFkZXIgZmlsZXMuCisgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjcnRkYmcuaD4KKyNlbmRpZgorCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisKKworLyogRGVyaXZlZCBmcm9tIExpbnV4ICJGZWF0dXJlcyBUZXN0IE1hY3JvIiBoZWFkZXIKKyAqIENvbnZlbmllbmNlIG1hY3JvcyB0byB0ZXN0IHRoZSB2ZXJzaW9ucyBvZiBnY2MgKG9yCisgKiBhIGNvbXBhdGlibGUgY29tcGlsZXIpLgorICogVXNlIHRoZW0gbGlrZSB0aGlzOgorICogICNpZiBHSVRfR05VQ19QUkVSRVEgKDIsOCkKKyAqICAgLi4uIGNvZGUgcmVxdWlyaW5nIGdjYyAyLjggb3IgbGF0ZXIgLi4uCisgKiAgI2VuZGlmCisqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19HTlVDX01JTk9SX18pCisjIGRlZmluZSBHSVRfR05VQ19QUkVSRVEobWFqLCBtaW4pIFwKKwkoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWluKSkKKyNlbHNlCisgI2RlZmluZSBHSVRfR05VQ19QUkVSRVEobWFqLCBtaW4pIDAKKyNlbmRpZgorCisKKyNpZm5kZWYgRkxFWF9BUlJBWQorLyoKKyAqIFNlZSBpZiBvdXIgY29tcGlsZXIgaXMga25vd24gdG8gc3VwcG9ydCBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgorICovCisjaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKSAmJiAoIWRlZmluZWQoX19TVU5QUk9fQykgfHwgKF9fU1VOUFJPX0MgPiAweDU4MCkpCisjIGRlZmluZSBGTEVYX0FSUkFZIC8qIGVtcHR5ICovCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorIyBpZiAoX19HTlVDX18gPj0gMykKKyMgIGRlZmluZSBGTEVYX0FSUkFZIC8qIGVtcHR5ICovCisjIGVsc2UKKyMgIGRlZmluZSBGTEVYX0FSUkFZIDAgLyogb2xkZXIgR05VIGV4dGVuc2lvbiAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBPdGhlcndpc2UsIGRlZmF1bHQgdG8gc2FmZXIgYnV0IGEgYml0IHdhc3RlZnVsIHRyYWRpdGlvbmFsIHN0eWxlCisgKi8KKyNpZm5kZWYgRkxFWF9BUlJBWQorIyBkZWZpbmUgRkxFWF9BUlJBWSAxCisjZW5kaWYKKyNlbmRpZgorCisKKy8qCisgKiBCVUlMRF9BU1NFUlRfT1JfWkVSTyAtIGFzc2VydCBhIGJ1aWxkLXRpbWUgZGVwZW5kZW5jeSwgYXMgYW4gZXhwcmVzc2lvbi4KKyAqIEBjb25kOiB0aGUgY29tcGlsZS10aW1lIGNvbmRpdGlvbiB3aGljaCBtdXN0IGJlIHRydWUuCisgKgorICogWW91ciBjb21waWxlIHdpbGwgZmFpbCBpZiB0aGUgY29uZGl0aW9uIGlzbid0IHRydWUsIG9yIGNhbid0IGJlIGV2YWx1YXRlZAorICogYnkgdGhlIGNvbXBpbGVyLiAgVGhpcyBjYW4gYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uOiBpdHMgdmFsdWUgaXMgIjAiLgorICoKKyAqIEV4YW1wbGU6CisgKgkjZGVmaW5lIGZvb190b19jaGFyKGZvbykJCQkJCVwKKyAqCQkgKChjaGFyICopKGZvbykJCQkJCQlcCisgKgkJICArIEJVSUxEX0FTU0VSVF9PUl9aRVJPKG9mZnNldG9mKHN0cnVjdCBmb28sIHN0cmluZykgPT0gMCkpCisgKi8KKyNkZWZpbmUgQlVJTERfQVNTRVJUX09SX1pFUk8oY29uZCkgXAorCShzaXplb2YoY2hhciBbMSAtIDIqIShjb25kKV0pIC0gMSkKKworI2lmIEdJVF9HTlVDX1BSRVJFUSgzLCAxKQorIC8qICZhcnJbMF0gZGVncmFkZXMgdG8gYSBwb2ludGVyOiBhIGRpZmZlcmVudCB0eXBlIGZyb20gYW4gYXJyYXkgKi8KKyMgZGVmaW5lIEJBUkZfVU5MRVNTX0FOX0FSUkFZKGFycikJCQkJCQlcCisJQlVJTERfQVNTRVJUX09SX1pFUk8oIV9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhhcnIpLCBcCisJCQkJCQkJICAgX190eXBlb2ZfXygmKGFycilbMF0pKSkKKyNlbHNlCisjIGRlZmluZSBCQVJGX1VOTEVTU19BTl9BUlJBWShhcnIpIDAKKyNlbmRpZgorLyoKKyAqIEFSUkFZX1NJWkUgLSBnZXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIHZpc2libGUgYXJyYXkKKyAqIEB4OiB0aGUgYXJyYXkgd2hvc2Ugc2l6ZSB5b3Ugd2FudC4KKyAqCisgKiBUaGlzIGRvZXMgbm90IHdvcmsgb24gcG9pbnRlcnMsIG9yIGFycmF5cyBkZWNsYXJlZCBhcyBbXSwgb3IKKyAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICBXaXRoIGNvcnJlY3QgY29tcGlsZXIgc3VwcG9ydCwgc3VjaCB1c2FnZQorICogd2lsbCBjYXVzZSBhIGJ1aWxkIGVycm9yIChzZWUgdGhlIGJ1aWxkX2Fzc2VydF9vcl96ZXJvIG1hY3JvKS4KKyAqLworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSArIEJBUkZfVU5MRVNTX0FOX0FSUkFZKHgpKQorCisjZGVmaW5lIGJpdHNpemVvZih4KSAgKENIQVJfQklUICogc2l6ZW9mKHgpKQorCisjZGVmaW5lIG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUoYSkgXAorICAgIChJTlRNQVhfTUFYID4+IChiaXRzaXplb2YoaW50bWF4X3QpIC0gYml0c2l6ZW9mKGEpKSkKKworI2RlZmluZSBtYXhpbXVtX3Vuc2lnbmVkX3ZhbHVlX29mX3R5cGUoYSkgXAorICAgIChVSU5UTUFYX01BWCA+PiAoYml0c2l6ZW9mKHVpbnRtYXhfdCkgLSBiaXRzaXplb2YoYSkpKQorCisvKgorICogU2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgaXMgdW5kZWZpbmVkIGluIEMsIHNvIGhlcmUncyBhIGhlbHBlciBtYWNybworICogdG8gZGV0ZWN0IGlmIHRoZSBzdW0gb2YgdHdvIGludGVnZXJzIHdpbGwgb3ZlcmZsb3cuCisgKgorICogUmVxdWlyZXM6IGEgPj0gMCwgdHlwZW9mKGEpIGVxdWFscyB0eXBlb2YoYikKKyAqLworI2RlZmluZSBzaWduZWRfYWRkX292ZXJmbG93cyhhLCBiKSBcCisgICAgKChiKSA+IG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUoYSkgLSAoYSkpCisKKyNkZWZpbmUgdW5zaWduZWRfYWRkX292ZXJmbG93cyhhLCBiKSBcCisgICAgKChiKSA+IG1heGltdW1fdW5zaWduZWRfdmFsdWVfb2ZfdHlwZShhKSAtIChhKSkKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbXVsdGlwbGljYXRpb24gb2YgImEiIGFuZCAiYiIgd2lsbAorICogb3ZlcmZsb3cuIFRoZSB0eXBlcyBvZiAiYSIgYW5kICJiIiBtdXN0IG1hdGNoIGFuZCBtdXN0IGJlIHVuc2lnbmVkLgorICogTm90ZSB0aGF0IHRoaXMgbWFjcm8gZXZhbHVhdGVzICJhIiB0d2ljZSEKKyAqLworI2RlZmluZSB1bnNpZ25lZF9tdWx0X292ZXJmbG93cyhhLCBiKSBcCisgICAgKChhKSAmJiAoYikgPiBtYXhpbXVtX3Vuc2lnbmVkX3ZhbHVlX29mX3R5cGUoYSkgLyAoYSkpCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBUWVBFT0YoeCkgKF9fdHlwZW9mX18oeCkpCisjZWxzZQorI2RlZmluZSBUWVBFT0YoeCkKKyNlbmRpZgorCisjZGVmaW5lIE1TQih4LCBiaXRzKSAoKHgpICYgVFlQRU9GKHgpKH4wVUxMIDw8IChiaXRzaXplb2YoeCkgLSAoYml0cykpKSkKKyNkZWZpbmUgSEFTX01VTFRJX0JJVFMoaSkgICgoaSkgJiAoKGkpIC0gMSkpICAvKiBjaGVja3MgaWYgYW4gaW50ZWdlciBoYXMgbW9yZSB0aGFuIDEgYml0IHNldCAqLworCisjZGVmaW5lIERJVl9ST1VORF9VUChuLGQpICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpCisKKy8qIEFwcHJveGltYXRpb24gb2YgdGhlIGxlbmd0aCBvZiB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHR5cGUuICovCisjZGVmaW5lIGRlY2ltYWxfbGVuZ3RoKHgpCSgoaW50KShzaXplb2YoeCkgKiAyLjU2ICsgMC41KSArIDEpCisKKyNpZiBkZWZpbmVkKF9fc3VuX18pCisgLyoKKyAgKiBPbiBTb2xhcmlzLCB3aGVuIF9YT1BFTl9FWFRFTkRFRCBpcyBzZXQsIGl0cyBoZWFkZXIgZmlsZQorICAqIGZvcmNlcyB0aGUgcHJvZ3JhbXMgdG8gYmUgWFBHNHYyLCBkZWZlYXRpbmcgYW55IF9YT1BFTl9TT1VSQ0UKKyAgKiBzZXR0aW5nIHRvIHNheSB3ZSBhcmUgWFBHNSBvciBYUEc2LiAgQWxzbyBvbiBTb2xhcmlzLAorICAqIFhQRzYgcHJvZ3JhbXMgbXVzdCBiZSBjb21waWxlZCB3aXRoIGEgYzk5IGNvbXBpbGVyLCB3aGlsZQorICAqIG5vbiBYUEc2IHByb2dyYW1zIG11c3QgYmUgY29tcGlsZWQgd2l0aCBhIHByZS1jOTkgY29tcGlsZXIuCisgICovCisjIGlmIF9fU1REQ19WRVJTSU9OX18gLSAwID49IDE5OTkwMUwKKyMgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwCisjIGVsc2UKKyMgZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAwCisjIGVuZGlmCisjZWxpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VTTENfXykgJiYgXAorICAgICAgIWRlZmluZWQoX01fVU5JWCkgJiYgIWRlZmluZWQoX19zZ2kpICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pICYmIFwKKyAgICAgICFkZWZpbmVkKF9fVEFOREVNKSAmJiAhZGVmaW5lZChfX1FOWF9fKSAmJiAhZGVmaW5lZChfX01pckJTRF9fKSAmJiBcCisgICAgICAhZGVmaW5lZChfX0NZR1dJTl9fKQorI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBnbGliYzIgYW5kIEFJWCA1LjNMIG5lZWQgNTAwLCBPcGVuQlNEIG5lZWRzIDYwMCBmb3IgU19JU0xOSygpICovCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMSAvKiBBSVggNS4zTCBuZWVkcyB0aGlzICovCisjZW5kaWYKKyNkZWZpbmUgX0FMTF9TT1VSQ0UgMQorI2RlZmluZSBfR05VX1NPVVJDRSAxCisjZGVmaW5lIF9CU0RfU09VUkNFIDEKKyNkZWZpbmUgX0RFRkFVTFRfU09VUkNFIDEKKyNkZWZpbmUgX05FVEJTRF9TT1VSQ0UgMQorI2RlZmluZSBfU0dJX1NPVVJDRSAxCisKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKSAvKiBCb3RoIE1pbkdXIGFuZCBNU1ZDICovCisjIGlmICFkZWZpbmVkKF9XSU4zMl9XSU5OVCkKKyMgIGRlZmluZSBfV0lOMzJfV0lOTlQgMHgwNjAwCisjIGVuZGlmCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gIC8qIHN0b3BzIHdpbmRvd3MuaCBpbmNsdWRpbmcgd2luc29jay5oICovCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIEdJVF9XSU5ET1dTX05BVElWRQorI2VuZGlmCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorI2luY2x1ZGUgPHN0cmluZ3MuaD4gLyogZm9yIHN0cmNhc2VjbXAoKSAqLworI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZmRlZiBORUVEU19TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgorI2lmICFkZWZpbmVkKE5PX1BPTExfSCkKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxpZiAhZGVmaW5lZChOT19TWVNfUE9MTF9IKQorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjZWxzZQorLyogUHVsbCB0aGUgY29tcGF0IHN0dWZmICovCisjaW5jbHVkZSA8cG9sbC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9CU0RfU1lTQ1RMCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjaW5jbHVkZSAiY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisvKiBwdWxsIGluIFdpbmRvd3MgY29tcGF0aWJpbGl0eSBzdHVmZiAqLworI2luY2x1ZGUgImNvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGF0L21pbmd3LmgiCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2luY2x1ZGUgImNvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGF0L21zdmMuaCIKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaWZuZGVmIE5PX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaWZuZGVmIE5PX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIE5PX0lOVFBUUl9UCisvKgorICogT24gSTE2TFAzMiwgSUxQMzIgYW5kIExQNjQgImxvbmciIGlzIHRoZSBzYWZlIGJldCwgaG93ZXZlcgorICogb24gTExQODYsIElMMzNMTFA2NCBhbmQgUDY0IGl0IG5lZWRzIHRvIGJlICJsb25nIGxvbmciLAorICogd2hpbGUgb24gSVAxNiBhbmQgSVAxNkwzMiBpdCBpcyAiaW50IiAocmVzcC4gInNob3J0IikKKyAqIFNpemUgbmVlZHMgdG8gbWF0Y2ggKG9yIGV4Y2VlZCkgJ3NpemVvZih2b2lkICopJy4KKyAqIFdlIGNhbid0IHRha2UgImxvbmcgbG9uZyIgaGVyZSBhcyBub3QgZXZlcnlib2R5IGhhcyBpdC4KKyAqLwordHlwZWRlZiBsb25nIGludHB0cl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRwdHJfdDsKKyNlbmRpZgorI3VuZGVmIF9BTExfU09VUkNFIC8qIEFJWCA1LjNMIGRlZmluZXMgYSBzdHJ1Y3QgbGlzdCB3aXRoIF9BTExfU09VUkNFLiAqLworI2luY2x1ZGUgPGdycC5oPgorI2RlZmluZSBfQUxMX1NPVVJDRSAxCisjZW5kaWYKKworLyogdXNlZCBvbiBNYWMgT1MgWCAqLworI2lmZGVmIFBSRUNPTVBPU0VfVU5JQ09ERQorI2luY2x1ZGUgImNvbXBhdC9wcmVjb21wb3NlX3V0ZjguaCIKKyNlbHNlCisjZGVmaW5lIHByZWNvbXBvc2Vfc3RyKGluLGlfbmZkMm5mYykKKyNkZWZpbmUgcHJlY29tcG9zZV9hcmd2KGMsdikKKyNkZWZpbmUgcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbigpCisjZW5kaWYKKworI2lmZGVmIE1LRElSX1dPX1RSQUlMSU5HX1NMQVNICisjZGVmaW5lIG1rZGlyKGEsYikgY29tcGF0X21rZGlyX3dvX3RyYWlsaW5nX3NsYXNoKChhKSwoYikpCitpbnQgY29tcGF0X21rZGlyX3dvX3RyYWlsaW5nX3NsYXNoKGNvbnN0IGNoYXIqLCBtb2RlX3QpOworI2VuZGlmCisKKyNpZmRlZiBOT19TVFJVQ1RfSVRJTUVSVkFMCitzdHJ1Y3QgaXRpbWVydmFsIHsKKwlzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKKwlzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKK307CisjZW5kaWYKKworI2lmZGVmIE5PX1NFVElUSU1FUgorI2RlZmluZSBzZXRpdGltZXIod2hpY2gsdmFsdWUsb3ZhbHVlKQorI2VuZGlmCisKKyNpZm5kZWYgTk9fTElCR0VOX0gKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbHNlCisjZGVmaW5lIGJhc2VuYW1lIGdpdGJhc2VuYW1lCitjaGFyICpnaXRiYXNlbmFtZShjaGFyICopOworI2RlZmluZSBkaXJuYW1lIGdpdGRpcm5hbWUKK2NoYXIgKmdpdGRpcm5hbWUoY2hhciAqKTsKKyNlbmRpZgorCisjaWZuZGVmIE5PX0lDT05WCisjaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZgorCisjaWZuZGVmIE5PX09QRU5TU0wKKyNpZmRlZiBfX0FQUExFX18KKyNkZWZpbmUgX19BVkFJTEFCSUxJVFlfTUFDUk9TX1VTRVNfQVZBSUxBQklMSVRZIDAKKyNpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KKyN1bmRlZiBERVBSRUNBVEVEX0FUVFJJQlVURQorI2RlZmluZSBERVBSRUNBVEVEX0FUVFJJQlVURQorI3VuZGVmIF9fQVZBSUxBQklMSVRZX01BQ1JPU19VU0VTX0FWQUlMQUJJTElUWQorI2VuZGlmCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU0lORk8KKyMgaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4KKyNlbmRpZgorCisvKiBPbiBtb3N0IHN5c3RlbXMgPG5ldGRiLmg+IHdvdWxkIGhhdmUgZ2l2ZW4gdXMgdGhpcywgYnV0CisgKiBub3Qgb24gc29tZSBzeXN0ZW1zIChlLmcuIHovT1MpLgorICovCisjaWZuZGVmIE5JX01BWEhPU1QKKyNkZWZpbmUgTklfTUFYSE9TVCAxMDI1CisjZW5kaWYKKworI2lmbmRlZiBOSV9NQVhTRVJWCisjZGVmaW5lIE5JX01BWFNFUlYgMzIKKyNlbmRpZgorCisvKiBPbiBtb3N0IHN5c3RlbXMgPGxpbWl0cy5oPiB3b3VsZCBoYXZlIGdpdmVuIHVzIHRoaXMsIGJ1dAorICogbm90IG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBHTlUvSHVyZCkuCisgKi8KKyNpZm5kZWYgUEFUSF9NQVgKKyNkZWZpbmUgUEFUSF9NQVggNDA5NgorI2VuZGlmCisKK3R5cGVkZWYgdWludG1heF90IHRpbWVzdGFtcF90OworI2RlZmluZSBQUkl0aW1lIFBSSXVNQVgKKyNkZWZpbmUgcGFyc2VfdGltZXN0YW1wIHN0cnRvdW1heAorI2RlZmluZSBUSU1FX01BWCBVSU5UTUFYX01BWAorI2RlZmluZSBUSU1FX01JTiAwCisKKyNpZm5kZWYgUEFUSF9TRVAKKyNkZWZpbmUgUEFUSF9TRVAgJzonCisjZW5kaWYKKworI2lmZGVmIEhBVkVfUEFUSFNfSAorI2luY2x1ZGUgPHBhdGhzLmg+CisjZW5kaWYKKyNpZm5kZWYgX1BBVEhfREVGUEFUSAorI2RlZmluZSBfUEFUSF9ERUZQQVRIICIvdXNyL2xvY2FsL2JpbjovdXNyL2JpbjovYmluIgorI2VuZGlmCisKKyNpZm5kZWYgcGxhdGZvcm1fY29yZV9jb25maWcKK3N0YXRpYyBpbmxpbmUgaW50IG5vb3BfY29yZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIHBsYXRmb3JtX2NvcmVfY29uZmlnIG5vb3BfY29yZV9jb25maWcKKyNlbmRpZgorCisjaWZuZGVmIGhhc19kb3NfZHJpdmVfcHJlZml4CitzdGF0aWMgaW5saW5lIGludCBnaXRfaGFzX2Rvc19kcml2ZV9wcmVmaXgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgaGFzX2Rvc19kcml2ZV9wcmVmaXggZ2l0X2hhc19kb3NfZHJpdmVfcHJlZml4CisjZW5kaWYKKworI2lmbmRlZiBza2lwX2Rvc19kcml2ZV9wcmVmaXgKK3N0YXRpYyBpbmxpbmUgaW50IGdpdF9za2lwX2Rvc19kcml2ZV9wcmVmaXgoY2hhciAqKnBhdGgpCit7CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIHNraXBfZG9zX2RyaXZlX3ByZWZpeCBnaXRfc2tpcF9kb3NfZHJpdmVfcHJlZml4CisjZW5kaWYKKworI2lmbmRlZiBpc19kaXJfc2VwCitzdGF0aWMgaW5saW5lIGludCBnaXRfaXNfZGlyX3NlcChpbnQgYykKK3sKKwlyZXR1cm4gYyA9PSAnLyc7Cit9CisjZGVmaW5lIGlzX2Rpcl9zZXAgZ2l0X2lzX2Rpcl9zZXAKKyNlbmRpZgorCisjaWZuZGVmIG9mZnNldF8xc3RfY29tcG9uZW50CitzdGF0aWMgaW5saW5lIGludCBnaXRfb2Zmc2V0XzFzdF9jb21wb25lbnQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfZGlyX3NlcChwYXRoWzBdKTsKK30KKyNkZWZpbmUgb2Zmc2V0XzFzdF9jb21wb25lbnQgZ2l0X29mZnNldF8xc3RfY29tcG9uZW50CisjZW5kaWYKKworI2lmbmRlZiBpc192YWxpZF9wYXRoCisjZGVmaW5lIGlzX3ZhbGlkX3BhdGgocGF0aCkgMQorI2VuZGlmCisKKyNpZm5kZWYgZmluZF9sYXN0X2Rpcl9zZXAKK3N0YXRpYyBpbmxpbmUgY2hhciAqZ2l0X2ZpbmRfbGFzdF9kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHN0cnJjaHIocGF0aCwgJy8nKTsKK30KKyNkZWZpbmUgZmluZF9sYXN0X2Rpcl9zZXAgZ2l0X2ZpbmRfbGFzdF9kaXJfc2VwCisjZW5kaWYKKworI2lmbmRlZiBxdWVyeV91c2VyX2VtYWlsCisjZGVmaW5lIHF1ZXJ5X3VzZXJfZW1haWwoKSBOVUxMCisjZW5kaWYKKworI2lmZGVmIF9fVEFOREVNCisjaW5jbHVkZSA8Zmxvc3MuaChmbG9zc19leGVjbCxmbG9zc19leGVjbHAsZmxvc3NfZXhlY3YsZmxvc3NfZXhlY3ZwKT4KKyNpbmNsdWRlIDxmbG9zcy5oKGZsb3NzX2dldHB3dWlkKT4KKyNpZm5kZWYgTlNJRworLyoKKyAqIE5vblN0b3AgTlNFIGFuZCBOU1ggZG8gbm90IHByb3ZpZGUgTlNJRy4gU0lHR1VBUkRJQU4oOTkpIGlzIHRoZSBoaWdoZXN0CisgKiBrbm93biwgYnkgZGV0ZWN0aXZlIHdvcmsgdXNpbmcga2lsbCAtbCBhcyBhIGxpc3QgaXMgYWxsIHNpZ25hbHMKKyAqIGluc3RlYWQgb2Ygc2lnbmFsLmggd2hlcmUgaXQgc2hvdWxkIGJlLgorICovCisjIGRlZmluZSBOU0lHIDEwMAorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19IUF9jYykgJiYgKF9fSFBfY2MgPj0gNjEwMDApCisjZGVmaW5lIE5PUkVUVVJOIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKKyNkZWZpbmUgTk9SRVRVUk5fUFRSCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChOT19OT1JFVFVSTikKKyNkZWZpbmUgTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKyNkZWZpbmUgTk9SRVRVUk5fUFRSIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBOT1JFVFVSTiBfX2RlY2xzcGVjKG5vcmV0dXJuKQorI2RlZmluZSBOT1JFVFVSTl9QVFIKKyNlbHNlCisjZGVmaW5lIE5PUkVUVVJOCisjZGVmaW5lIE5PUkVUVVJOX1BUUgorI2lmbmRlZiBfX0dOVUNfXworI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisjZGVmaW5lIF9fYXR0cmlidXRlX18oeCkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogVGhlIHNlbnRpbmVsIGF0dHJpYnV0ZSBpcyB2YWxpZCBmcm9tIGdjYyB2ZXJzaW9uIDQuMCAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KQorI2RlZmluZSBMQVNUX0FSR19NVVNUX0JFX05VTEwgX19hdHRyaWJ1dGVfXygoc2VudGluZWwpKQorI2Vsc2UKKyNkZWZpbmUgTEFTVF9BUkdfTVVTVF9CRV9OVUxMCisjZW5kaWYKKworI2RlZmluZSBNQVlCRV9VTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisKKyNpbmNsdWRlICJjb21wYXQvYnN3YXAuaCIKKworI2luY2x1ZGUgIndpbGRtYXRjaC5oIgorCitzdHJ1Y3Qgc3RyYnVmOworCisvKiBHZW5lcmFsIGhlbHBlciBmdW5jdGlvbnMgKi8KK3ZvaWQgdnJlcG9ydGYoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKTsKK05PUkVUVVJOIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqZXJyKTsKK05PUkVUVVJOIHZvaWQgdXNhZ2VmKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK05PUkVUVVJOIHZvaWQgZGllKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK05PUkVUVVJOIHZvaWQgZGllX2Vycm5vKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2ludCBlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitpbnQgZXJyb3JfZXJybm8oY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwordm9pZCB3YXJuaW5nKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK3ZvaWQgd2FybmluZ19lcnJubyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKKyNpZm5kZWYgTk9fT1BFTlNTTAorI2lmZGVmIEFQUExFX0NPTU1PTl9DUllQVE8KKyNpbmNsdWRlICJjb21wYXQvYXBwbGUtY29tbW9uLWNyeXB0by5oIgorI2Vsc2UKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorI2VuZGlmIC8qIEFQUExFX0NPTU1PTl9DUllQVE8gKi8KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2VuZGlmIC8qIE5PX09QRU5TU0wgKi8KKworLyoKKyAqIExldCBjYWxsZXJzIGJlIGF3YXJlIG9mIHRoZSBjb25zdGFudCByZXR1cm4gdmFsdWU7IHRoaXMgY2FuIGhlbHAKKyAqIGdjYyB3aXRoIC1XdW5pbml0aWFsaXplZCBhbmFseXNpcy4gV2UgcmVzdHJpY3QgdGhpcyB0cmljayB0byBnY2MsIHRob3VnaCwKKyAqIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgbWF5IG5vdCBzdXBwb3J0IHZhcmlhZGljIG1hY3Jvcy4gU2luY2Ugd2UncmUgb25seQorICogdHJ5aW5nIHRvIGhlbHAgZ2NjLCBhbnl3YXksIGl0J3MgT0s7IG90aGVyIGNvbXBpbGVycyB3aWxsIGZhbGwgYmFjayB0bworICogdXNpbmcgdGhlIGZ1bmN0aW9uIGFzIHVzdWFsLgorICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykKK3N0YXRpYyBpbmxpbmUgaW50IGNvbnN0X2Vycm9yKHZvaWQpCit7CisJcmV0dXJuIC0xOworfQorI2RlZmluZSBlcnJvciguLi4pIChlcnJvcihfX1ZBX0FSR1NfXyksIGNvbnN0X2Vycm9yKCkpCisjZGVmaW5lIGVycm9yX2Vycm5vKC4uLikgKGVycm9yX2Vycm5vKF9fVkFfQVJHU19fKSwgY29uc3RfZXJyb3IoKSkKKyNlbmRpZgorCit2b2lkIHNldF9kaWVfcm91dGluZShOT1JFVFVSTl9QVFIgdm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpKTsKK3ZvaWQgc2V0X2Vycm9yX3JvdXRpbmUodm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpKTsKK2V4dGVybiB2b2lkICgqZ2V0X2Vycm9yX3JvdXRpbmUodm9pZCkpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpOwordm9pZCBzZXRfd2Fybl9yb3V0aW5lKHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICp3YXJuLCB2YV9saXN0IHBhcmFtcykpOworZXh0ZXJuIHZvaWQgKCpnZXRfd2Fybl9yb3V0aW5lKHZvaWQpKShjb25zdCBjaGFyICp3YXJuLCB2YV9saXN0IHBhcmFtcyk7Cit2b2lkIHNldF9kaWVfaXNfcmVjdXJzaW5nX3JvdXRpbmUoaW50ICgqcm91dGluZSkodm9pZCkpOworCitpbnQgc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpOworaW50IGlzdGFydHNfd2l0aChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKKy8qCisgKiBJZiB0aGUgc3RyaW5nICJzdHIiIGJlZ2lucyB3aXRoIHRoZSBzdHJpbmcgZm91bmQgaW4gInByZWZpeCIsIHJldHVybiAxLgorICogVGhlICJvdXQiIHBhcmFtZXRlciBpcyBzZXQgdG8gInN0ciArIHN0cmxlbihwcmVmaXgpIiAoaS5lLiwgdG8gdGhlIHBvaW50IGluCisgKiB0aGUgc3RyaW5nIHJpZ2h0IGFmdGVyIHRoZSBwcmVmaXgpLgorICoKKyAqIE90aGVyd2lzZSwgcmV0dXJuIDAgYW5kIGxlYXZlICJvdXQiIHVudG91Y2hlZC4KKyAqCisgKiBFeGFtcGxlczoKKyAqCisgKiAgIFtleHRyYWN0IGJyYW5jaCBuYW1lLCBmYWlsIGlmIG5vdCBhIGJyYW5jaF0KKyAqICAgaWYgKCFza2lwX3ByZWZpeChyZWYsICJyZWZzL2hlYWRzLyIsICZicmFuY2gpCisgKglyZXR1cm4gLTE7CisgKgorICogICBbc2tpcCBwcmVmaXggaWYgcHJlc2VudCwgb3RoZXJ3aXNlIHVzZSB3aG9sZSBzdHJpbmddCisgKiAgIHNraXBfcHJlZml4KG5hbWUsICJyZWZzL2hlYWRzLyIsICZuYW1lKTsKKyAqLworc3RhdGljIGlubGluZSBpbnQgc2tpcF9wcmVmaXgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgICBjb25zdCBjaGFyICoqb3V0KQoreworCWRvIHsKKwkJaWYgKCEqcHJlZml4KSB7CisJCQkqb3V0ID0gc3RyOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IHdoaWxlICgqc3RyKysgPT0gKnByZWZpeCsrKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIHRoZSBzdHJpbmcgInN0ciIgaXMgdGhlIHNhbWUgYXMgdGhlIHN0cmluZyBpbiAicHJlZml4IiwgdGhlbiB0aGUgImFyZyIKKyAqIHBhcmFtZXRlciBpcyBzZXQgdG8gdGhlICJkZWYiIHBhcmFtZXRlciBhbmQgMSBpcyByZXR1cm5lZC4KKyAqIElmIHRoZSBzdHJpbmcgInN0ciIgYmVnaW5zIHdpdGggdGhlIHN0cmluZyBmb3VuZCBpbiAicHJlZml4IiBhbmQgdGhlbiBhCisgKiAiPSIgc2lnbiwgdGhlbiB0aGUgImFyZyIgcGFyYW1ldGVyIGlzIHNldCB0byAic3RyICsgc3RybGVuKHByZWZpeCkgKyAxIgorICogKGkuZS4sIHRvIHRoZSBwb2ludCBpbiB0aGUgc3RyaW5nIHJpZ2h0IGFmdGVyIHRoZSBwcmVmaXggYW5kIHRoZSAiPSIgc2lnbiksCisgKiBhbmQgMSBpcyByZXR1cm5lZC4KKyAqCisgKiBPdGhlcndpc2UsIHJldHVybiAwIGFuZCBsZWF2ZSAiYXJnIiB1bnRvdWNoZWQuCisgKgorICogV2hlbiB3ZSBhY2NlcHQgYm90aCBhICItLWtleSIgYW5kIGEgIi0ta2V5PTx2YWw+IiBvcHRpb24sIHRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgIXN0cmNtcChhcmcsICItLWtleSIpIGFuZCB0aGVuCisgKiBza2lwX3ByZWZpeChhcmcsICItLWtleT0iLCAmYXJnKSB0byBwYXJzZSBzdWNoIGFuIG9wdGlvbi4KKyAqLworaW50IHNraXBfdG9fb3B0aW9uYWxfYXJnX2RlZmF1bHQoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJIGNvbnN0IGNoYXIgKiphcmcsIGNvbnN0IGNoYXIgKmRlZik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHNraXBfdG9fb3B0aW9uYWxfYXJnKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgICAgICBjb25zdCBjaGFyICoqYXJnKQoreworCXJldHVybiBza2lwX3RvX29wdGlvbmFsX2FyZ19kZWZhdWx0KHN0ciwgcHJlZml4LCBhcmcsICIiKTsKK30KKworLyoKKyAqIExpa2Ugc2tpcF9wcmVmaXgsIGJ1dCBwcm9taXNlcyBuZXZlciB0byByZWFkIHBhc3QgImxlbiIgYnl0ZXMgb2YgdGhlIGlucHV0CisgKiBidWZmZXIsIGFuZCByZXR1cm5zIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzIGluICJvdXQiIHZpYSAib3V0bGVuIi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2tpcF9wcmVmaXhfbWVtKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgIGNvbnN0IGNoYXIgKipvdXQsIHNpemVfdCAqb3V0bGVuKQoreworCXNpemVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7CisJaWYgKHByZWZpeF9sZW4gPD0gbGVuICYmICFtZW1jbXAoYnVmLCBwcmVmaXgsIHByZWZpeF9sZW4pKSB7CisJCSpvdXQgPSBidWYgKyBwcmVmaXhfbGVuOworCQkqb3V0bGVuID0gbGVuIC0gcHJlZml4X2xlbjsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogSWYgYnVmIGVuZHMgd2l0aCBzdWZmaXgsIHJldHVybiAxIGFuZCBzdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mIHRoZSBzdWZmaXgKKyAqIGZyb20gKmxlbi4gT3RoZXJ3aXNlLCByZXR1cm4gMCBhbmQgbGVhdmUgKmxlbiB1bnRvdWNoZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN0cmlwX3N1ZmZpeF9tZW0oY29uc3QgY2hhciAqYnVmLCBzaXplX3QgKmxlbiwKKwkJCQkgICBjb25zdCBjaGFyICpzdWZmaXgpCit7CisJc2l6ZV90IHN1ZmxlbiA9IHN0cmxlbihzdWZmaXgpOworCWlmICgqbGVuIDwgc3VmbGVuIHx8IG1lbWNtcChidWYgKyAoKmxlbiAtIHN1ZmxlbiksIHN1ZmZpeCwgc3VmbGVuKSkKKwkJcmV0dXJuIDA7CisJKmxlbiAtPSBzdWZsZW47CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJZiBzdHIgZW5kcyB3aXRoIHN1ZmZpeCwgcmV0dXJuIDEgYW5kIHNldCAqbGVuIHRvIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcKKyAqIHdpdGhvdXQgdGhlIHN1ZmZpeC4gT3RoZXJ3aXNlLCByZXR1cm4gMCBhbmQgc2V0ICpsZW4gdG8gdGhlIHNpemUgb2YgdGhlCisgKiBzdHJpbmcuCisgKgorICogTm90ZSB0aGF0IHdlIGRvIF9ub3RfIE5VTC10ZXJtaW5hdGUgc3RyIHRvIHRoZSBuZXcgbGVuZ3RoLgorICovCitzdGF0aWMgaW5saW5lIGludCBzdHJpcF9zdWZmaXgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpzdWZmaXgsIHNpemVfdCAqbGVuKQoreworCSpsZW4gPSBzdHJsZW4oc3RyKTsKKwlyZXR1cm4gc3RyaXBfc3VmZml4X21lbShzdHIsIGxlbiwgc3VmZml4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZW5kc193aXRoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc3VmZml4KQoreworCXNpemVfdCBsZW47CisJcmV0dXJuIHN0cmlwX3N1ZmZpeChzdHIsIHN1ZmZpeCwgJmxlbik7Cit9CisKKyNkZWZpbmUgU1dBUChhLCBiKSBkbyB7CQkJCQkJXAorCXZvaWQgKl9zd2FwX2FfcHRyID0gJihhKTsJCQkJXAorCXZvaWQgKl9zd2FwX2JfcHRyID0gJihiKTsJCQkJXAorCXVuc2lnbmVkIGNoYXIgX3N3YXBfYnVmZmVyW3NpemVvZihhKV07CQkJXAorCW1lbWNweShfc3dhcF9idWZmZXIsIF9zd2FwX2FfcHRyLCBzaXplb2YoYSkpOwkJXAorCW1lbWNweShfc3dhcF9hX3B0ciwgX3N3YXBfYl9wdHIsIHNpemVvZihhKSArCQlcCisJICAgICAgIEJVSUxEX0FTU0VSVF9PUl9aRVJPKHNpemVvZihhKSA9PSBzaXplb2YoYikpKTsJXAorCW1lbWNweShfc3dhcF9iX3B0ciwgX3N3YXBfYnVmZmVyLCBzaXplb2YoYSkpOwkJXAorfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQoTk9fTU1BUCkgfHwgZGVmaW5lZChVU0VfV0lOMzJfTU1BUCkKKworI2lmbmRlZiBQUk9UX1JFQUQKKyNkZWZpbmUgUFJPVF9SRUFEIDEKKyNkZWZpbmUgUFJPVF9XUklURSAyCisjZGVmaW5lIE1BUF9QUklWQVRFIDEKKyNlbmRpZgorCisjZGVmaW5lIG1tYXAgZ2l0X21tYXAKKyNkZWZpbmUgbXVubWFwIGdpdF9tdW5tYXAKK3ZvaWQgKmdpdF9tbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCk7CitpbnQgZ2l0X211bm1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCk7CisKKyNlbHNlIC8qIE5PX01NQVAgfHwgVVNFX1dJTjMyX01NQVAgKi8KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNlbmRpZiAvKiBOT19NTUFQIHx8IFVTRV9XSU4zMl9NTUFQICovCisKKyNpZmRlZiBOT19NTUFQCisKKy8qIFRoaXMgdmFsdWUgbXVzdCBiZSBtdWx0aXBsZSBvZiAocGFnZXNpemUgKiAyKSAqLworI2RlZmluZSBERUZBVUxUX1BBQ0tFRF9HSVRfV0lORE9XX1NJWkUgKDEgKiAxMDI0ICogMTAyNCkKKworI2Vsc2UgLyogTk9fTU1BUCAqLworCisvKiBUaGlzIHZhbHVlIG11c3QgYmUgbXVsdGlwbGUgb2YgKHBhZ2VzaXplICogMikgKi8KKyNkZWZpbmUgREVGQVVMVF9QQUNLRURfR0lUX1dJTkRPV19TSVpFIFwKKwkoc2l6ZW9mKHZvaWQqKSA+PSA4IFwKKwkJPyAgMSAqIDEwMjQgKiAxMDI0ICogMTAyNCBcCisJCTogMzIgKiAxMDI0ICogMTAyNCkKKworI2VuZGlmIC8qIE5PX01NQVAgKi8KKworI2lmbmRlZiBNQVBfRkFJTEVECisjZGVmaW5lIE1BUF9GQUlMRUQgKCh2b2lkICopLTEpCisjZW5kaWYKKworI2lmZGVmIE5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVAorI2RlZmluZSBvbl9kaXNrX2J5dGVzKHN0KSAoKHN0KS5zdF9zaXplKQorI2Vsc2UKKyNkZWZpbmUgb25fZGlza19ieXRlcyhzdCkgKChzdCkuc3RfYmxvY2tzICogNTEyKQorI2VuZGlmCisKKyNpZmRlZiBORUVEU19NT0RFX1RSQU5TTEFUSU9OCisjdW5kZWYgU19JRk1UCisjdW5kZWYgU19JRlJFRworI3VuZGVmIFNfSUZESVIKKyN1bmRlZiBTX0lGTE5LCisjdW5kZWYgU19JRkJMSworI3VuZGVmIFNfSUZDSFIKKyN1bmRlZiBTX0lGSUZPCisjdW5kZWYgU19JRlNPQ0sKKyNkZWZpbmUgU19JRk1UICAgMDE3MDAwMAorI2RlZmluZSBTX0lGUkVHICAwMTAwMDAwCisjZGVmaW5lIFNfSUZESVIgIDAwNDAwMDAKKyNkZWZpbmUgU19JRkxOSyAgMDEyMDAwMAorI2RlZmluZSBTX0lGQkxLICAwMDYwMDAwCisjZGVmaW5lIFNfSUZDSFIgIDAwMjAwMDAKKyNkZWZpbmUgU19JRklGTyAgMDAxMDAwMAorI2RlZmluZSBTX0lGU09DSyAwMTQwMDAwCisjaWZkZWYgc3RhdAorI3VuZGVmIHN0YXQKKyNlbmRpZgorI2RlZmluZSBzdGF0KHBhdGgsIGJ1ZikgZ2l0X3N0YXQocGF0aCwgYnVmKQoraW50IGdpdF9zdGF0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CisjaWZkZWYgZnN0YXQKKyN1bmRlZiBmc3RhdAorI2VuZGlmCisjZGVmaW5lIGZzdGF0KGZkLCBidWYpIGdpdF9mc3RhdChmZCwgYnVmKQoraW50IGdpdF9mc3RhdChpbnQsIHN0cnVjdCBzdGF0ICopOworI2lmZGVmIGxzdGF0CisjdW5kZWYgbHN0YXQKKyNlbmRpZgorI2RlZmluZSBsc3RhdChwYXRoLCBidWYpIGdpdF9sc3RhdChwYXRoLCBidWYpCitpbnQgZ2l0X2xzdGF0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CisjZW5kaWYKKworI2RlZmluZSBERUZBVUxUX1BBQ0tFRF9HSVRfTElNSVQgXAorCSgoMTAyNEwgKiAxMDI0TCkgKiAoc2l6ZV90KShzaXplb2Yodm9pZCopID49IDggPyAoMzIgKiAxMDI0TCAqIDEwMjRMKSA6IDI1NikpCisKKyNpZmRlZiBOT19QUkVBRAorI2RlZmluZSBwcmVhZCBnaXRfcHJlYWQKK3NzaXplX3QgZ2l0X3ByZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIG9mZl90IG9mZnNldCk7CisjZW5kaWYKKy8qCisgKiBGb3J3YXJkIGRlY2wgdGhhdCB3aWxsIHJlbWluZCB1cyBpZiBpdHMgdHdpbiBpbiBjYWNoZS5oIGNoYW5nZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gY29tcGF0L3ByZWFkLmMuICBCdXQgd2UgY2FuJ3QgaW5jbHVkZQorICogY2FjaGUuaCB0aGVyZS4KKyAqLworc3NpemVfdCByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CisKKyNpZmRlZiBOT19TRVRFTlYKKyNkZWZpbmUgc2V0ZW52IGdpdHNldGVudgoraW50IGdpdHNldGVudihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fTUtEVEVNUAorI2RlZmluZSBta2R0ZW1wIGdpdG1rZHRlbXAKK2NoYXIgKmdpdG1rZHRlbXAoY2hhciAqKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fVU5TRVRFTlYKKyNkZWZpbmUgdW5zZXRlbnYgZ2l0dW5zZXRlbnYKK3ZvaWQgZ2l0dW5zZXRlbnYoY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fU1RSQ0FTRVNUUgorI2RlZmluZSBzdHJjYXNlc3RyIGdpdHN0cmNhc2VzdHIKK2NoYXIgKmdpdHN0cmNhc2VzdHIoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSk7CisjZW5kaWYKKworI2lmZGVmIE5PX1NUUkxDUFkKKyNkZWZpbmUgc3RybGNweSBnaXRzdHJsY3B5CitzaXplX3QgZ2l0c3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fU1RSVE9VTUFYCisjZGVmaW5lIHN0cnRvdW1heCBnaXRzdHJ0b3VtYXgKK3VpbnRtYXhfdCBnaXRzdHJ0b3VtYXgoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworI2RlZmluZSBzdHJ0b2ltYXggZ2l0c3RydG9pbWF4CitpbnRtYXhfdCBnaXRzdHJ0b2ltYXgoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworI2VuZGlmCisKKyNpZmRlZiBOT19IU1RSRVJST1IKKyNkZWZpbmUgaHN0cmVycm9yIGdpdGhzdHJlcnJvcgorY29uc3QgY2hhciAqZ2l0aHN0cmVycm9yKGludCBoZXJyb3IpOworI2VuZGlmCisKKyNpZmRlZiBOT19NRU1NRU0KKyNkZWZpbmUgbWVtbWVtIGdpdG1lbW1lbQordm9pZCAqZ2l0bWVtbWVtKGNvbnN0IHZvaWQgKmhheXN0YWNrLCBzaXplX3QgaGF5c3RhY2tsZW4sCisJCWNvbnN0IHZvaWQgKm5lZWRsZSwgc2l6ZV90IG5lZWRsZWxlbik7CisjZW5kaWYKKworI2lmZGVmIE9WRVJSSURFX1NUUkRVUAorI2lmZGVmIHN0cmR1cAorI3VuZGVmIHN0cmR1cAorI2VuZGlmCisjZGVmaW5lIHN0cmR1cCBnaXRzdHJkdXAKK2NoYXIgKmdpdHN0cmR1cChjb25zdCBjaGFyICpzKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fR0VUUEFHRVNJWkUKKyNkZWZpbmUgZ2V0cGFnZXNpemUoKSBzeXNjb25mKF9TQ19QQUdFU0laRSkKKyNlbmRpZgorCisjaWZuZGVmIE9fQ0xPRVhFQworI2RlZmluZSBPX0NMT0VYRUMgMAorI2VuZGlmCisKKyNpZmRlZiBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUworIyBpZiAhZGVmaW5lZChTVVBQUkVTU19GT1BFTl9SRURFRklOSVRJT04pCisjICBpZmRlZiBmb3BlbgorIyAgIHVuZGVmIGZvcGVuCisjICBlbmRpZgorIyAgZGVmaW5lIGZvcGVuKGEsYikgZ2l0X2ZvcGVuKGEsYikKKyMgZW5kaWYKK0ZJTEUgKmdpdF9mb3Blbihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworI2VuZGlmCisKKyNpZmRlZiBTTlBSSU5URl9SRVRVUk5TX0JPR1VTCisjaWZkZWYgc25wcmludGYKKyN1bmRlZiBzbnByaW50ZgorI2VuZGlmCisjZGVmaW5lIHNucHJpbnRmIGdpdF9zbnByaW50ZgoraW50IGdpdF9zbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLAorCQkgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworI2lmZGVmIHZzbnByaW50ZgorI3VuZGVmIHZzbnByaW50ZgorI2VuZGlmCisjZGVmaW5lIHZzbnByaW50ZiBnaXRfdnNucHJpbnRmCitpbnQgZ2l0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLAorCQkgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCk7CisjZW5kaWYKKworI2lmZGVmIF9fR0xJQkNfUFJFUkVRCisjaWYgX19HTElCQ19QUkVSRVEoMiwgMSkKKyNkZWZpbmUgSEFWRV9TVFJDSFJOVUwKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TVFJDSFJOVUwKKyNkZWZpbmUgc3RyY2hybnVsIGdpdHN0cmNocm51bAorc3RhdGljIGlubGluZSBjaGFyICpnaXRzdHJjaHJudWwoY29uc3QgY2hhciAqcywgaW50IGMpCit7CisJd2hpbGUgKCpzICYmICpzICE9IGMpCisJCXMrKzsKKwlyZXR1cm4gKGNoYXIgKilzOworfQorI2VuZGlmCisKKyNpZmRlZiBOT19JTkVUX1BUT04KK2ludCBpbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCk7CisjZW5kaWYKKworI2lmZGVmIE5PX0lORVRfTlRPUAorY29uc3QgY2hhciAqaW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fUFRIUkVBRFMKKyNkZWZpbmUgYXRleGl0IGdpdF9hdGV4aXQKK2ludCBnaXRfYXRleGl0KHZvaWQgKCpoYW5kbGVyKSh2b2lkKSk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBzaXplX3Qgc3RfYWRkKHNpemVfdCBhLCBzaXplX3QgYikKK3sKKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhhLCBiKSkKKwkJZGllKCJzaXplX3Qgb3ZlcmZsb3c6ICUiUFJJdU1BWCIgKyAlIlBSSXVNQVgsCisJCSAgICAodWludG1heF90KWEsICh1aW50bWF4X3QpYik7CisJcmV0dXJuIGEgKyBiOworfQorI2RlZmluZSBzdF9hZGQzKGEsYixjKSAgIHN0X2FkZChzdF9hZGQoKGEpLChiKSksKGMpKQorI2RlZmluZSBzdF9hZGQ0KGEsYixjLGQpIHN0X2FkZChzdF9hZGQzKChhKSwoYiksKGMpKSwoZCkpCisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHN0X211bHQoc2l6ZV90IGEsIHNpemVfdCBiKQoreworCWlmICh1bnNpZ25lZF9tdWx0X292ZXJmbG93cyhhLCBiKSkKKwkJZGllKCJzaXplX3Qgb3ZlcmZsb3c6ICUiUFJJdU1BWCIgKiAlIlBSSXVNQVgsCisJCSAgICAodWludG1heF90KWEsICh1aW50bWF4X3QpYik7CisJcmV0dXJuIGEgKiBiOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBzdF9zdWIoc2l6ZV90IGEsIHNpemVfdCBiKQoreworCWlmIChhIDwgYikKKwkJZGllKCJzaXplX3QgdW5kZXJmbG93OiAlIlBSSXVNQVgiIC0gJSJQUkl1TUFYLAorCQkgICAgKHVpbnRtYXhfdClhLCAodWludG1heF90KWIpOworCXJldHVybiBhIC0gYjsKK30KKworI2lmZGVmIEhBVkVfQUxMT0NBX0gKKyMgaW5jbHVkZSA8YWxsb2NhLmg+CisjIGRlZmluZSB4YWxsb2NhKHNpemUpICAgICAgKGFsbG9jYShzaXplKSkKKyMgZGVmaW5lIHhhbGxvY2FfZnJlZShwKSAgICBkbyB7fSB3aGlsZSAoMCkKKyNlbHNlCisjIGRlZmluZSB4YWxsb2NhKHNpemUpICAgICAgKHhtYWxsb2Moc2l6ZSkpCisjIGRlZmluZSB4YWxsb2NhX2ZyZWUocCkgICAgKGZyZWUocCkpCisjZW5kaWYKK2NoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKK3ZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpOwordm9pZCAqeG1hbGxvY3ooc2l6ZV90IHNpemUpOwordm9pZCAqeG1hbGxvY3pfZ2VudGx5KHNpemVfdCBzaXplKTsKK3ZvaWQgKnhtZW1kdXB6KGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworY2hhciAqeHN0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKTsKK3ZvaWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOwordm9pZCAqeGNhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKTsKK3ZvaWQgKnhtbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCk7Cit2b2lkICp4bW1hcF9nZW50bHkodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KTsKK2ludCB4b3Blbihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIC4uLik7Citzc2l6ZV90IHhyZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK3NzaXplX3QgeHdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK3NzaXplX3QgeHByZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBvZmZfdCBvZmZzZXQpOworaW50IHhkdXAoaW50IGZkKTsKK0ZJTEUgKnhmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKK0ZJTEUgKnhmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKTsKK2ludCB4bWtzdGVtcChjaGFyICp0ZW1wX2ZpbGVuYW1lKTsKK2ludCB4bWtzdGVtcF9tb2RlKGNoYXIgKnRlbXBfZmlsZW5hbWUsIGludCBtb2RlKTsKK2NoYXIgKnhnZXRjd2Qodm9pZCk7CitGSUxFICpmb3Blbl9mb3Jfd3JpdGluZyhjb25zdCBjaGFyICpwYXRoKTsKK0ZJTEUgKmZvcGVuX29yX3dhcm4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSk7CisKKy8qCisgKiBGUkVFX0FORF9OVUxMKHB0cikgaXMgbGlrZSBmcmVlKHB0cikgZm9sbG93ZWQgYnkgcHRyID0gTlVMTC4gTm90ZQorICogdGhhdCBwdHIgaXMgdXNlZCB0d2ljZSwgc28gZG9uJ3QgcGFzcyBlLmcuIHB0cisrLgorICovCisjZGVmaW5lIEZSRUVfQU5EX05VTEwocCkgZG8geyBmcmVlKHApOyAocCkgPSBOVUxMOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFMTE9DX0FSUkFZKHgsIGFsbG9jKSAoeCkgPSB4bWFsbG9jKHN0X211bHQoc2l6ZW9mKCooeCkpLCAoYWxsb2MpKSkKKyNkZWZpbmUgQ0FMTE9DX0FSUkFZKHgsIGFsbG9jKSAoeCkgPSB4Y2FsbG9jKChhbGxvYyksIHNpemVvZigqKHgpKSk7CisjZGVmaW5lIFJFQUxMT0NfQVJSQVkoeCwgYWxsb2MpICh4KSA9IHhyZWFsbG9jKCh4KSwgc3RfbXVsdChzaXplb2YoKih4KSksIChhbGxvYykpKQorCisjZGVmaW5lIENPUFlfQVJSQVkoZHN0LCBzcmMsIG4pIGNvcHlfYXJyYXkoKGRzdCksIChzcmMpLCAobiksIHNpemVvZigqKGRzdCkpICsgXAorCUJVSUxEX0FTU0VSVF9PUl9aRVJPKHNpemVvZigqKGRzdCkpID09IHNpemVvZigqKHNyYykpKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2FycmF5KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbiwgc2l6ZV90IHNpemUpCit7CisJaWYgKG4pCisJCW1lbWNweShkc3QsIHNyYywgc3RfbXVsdChzaXplLCBuKSk7Cit9CisKKyNkZWZpbmUgTU9WRV9BUlJBWShkc3QsIHNyYywgbikgbW92ZV9hcnJheSgoZHN0KSwgKHNyYyksIChuKSwgc2l6ZW9mKCooZHN0KSkgKyBcCisJQlVJTERfQVNTRVJUX09SX1pFUk8oc2l6ZW9mKCooZHN0KSkgPT0gc2l6ZW9mKCooc3JjKSkpKQorc3RhdGljIGlubGluZSB2b2lkIG1vdmVfYXJyYXkodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAobikKKwkJbWVtbW92ZShkc3QsIHNyYywgc3RfbXVsdChzaXplLCBuKSk7Cit9CisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgaGVscCB5b3UgYWxsb2NhdGUgc3RydWN0cyB3aXRoIGZsZXggYXJyYXlzLCBhbmQgY29weQorICogdGhlIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgYXJyYXkuIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkOgorICoKKyAqICAgc3RydWN0IGZvbyB7CisgKiAgICAgaW50IGJhcjsKKyAqICAgICBjaGFyIG5hbWVbRkxFWF9BUlJBWV07CisgKiAgIH07CisgKgorICogeW91IGNhbiBkbzoKKyAqCisgKiAgIHN0cnVjdCBmb28gKmY7CisgKiAgIEZMRVhfQUxMT0NfTUVNKGYsIG5hbWUsIHNyYywgbGVuKTsKKyAqCisgKiB0byBhbGxvY2F0ZSBhICJmb28iIHdpdGggdGhlIGNvbnRlbnRzIG9mICJzcmMiIGluIHRoZSAibmFtZSIgZmllbGQuCisgKiBUaGUgcmVzdWx0aW5nIHN0cnVjdCBpcyBhdXRvbWF0aWNhbGx5IHplcm8nZCwgYW5kIHRoZSBmbGV4LWFycmF5IGZpZWxkCisgKiBpcyBOVUwtdGVybWluYXRlZCAod2hldGhlciB0aGUgaW5jb21pbmcgc3JjIGJ1ZmZlciB3YXMgb3Igbm90KS4KKyAqCisgKiBUaGUgRkxFWFBUUl8qIHZhcmlhbnRzIG9wZXJhdGUgb24gc3RydWN0cyB0aGF0IGRvbid0IHVzZSBmbGV4LWFycmF5cywKKyAqIGJ1dCBkbyB3YW50IHRvIHN0b3JlIGEgcG9pbnRlciB0byBzb21lIGV4dHJhIGRhdGEgaW4gdGhlIHNhbWUgYWxsb2NhdGVkCisgKiBibG9jay4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlOgorICoKKyAqICAgc3RydWN0IGZvbyB7CisgKiAgICAgY2hhciAqbmFtZTsKKyAqICAgICBpbnQgYmFyOworICogICB9OworICoKKyAqIHlvdSBjYW4gZG86CisgKgorICogICBzdHJ1Y3QgZm9vICpmOworICogICBGTEVYUFRSX0FMTE9DX1NUUihmLCBuYW1lLCBzcmMpOworICoKKyAqIGFuZCAibmFtZSIgd2lsbCBwb2ludCB0byBhIGJsb2NrIG9mIG1lbW9yeSBhZnRlciB0aGUgc3RydWN0LCB3aGljaCB3aWxsIGJlCisgKiBmcmVlZCBhbG9uZyB3aXRoIHRoZSBzdHJ1Y3QgKGJ1dCB0aGUgcG9pbnRlciBjYW4gYmUgcmVwb2ludGVkIGFueXdoZXJlKS4KKyAqCisgKiBUaGUgKl9TVFIgdmFyaWFudHMgYWNjZXB0IGEgc3RyaW5nIHBhcmFtZXRlciByYXRoZXIgdGhhbiBhIHB0ci9sZW4KKyAqIGNvbWJpbmF0aW9uLgorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSBtYWNyb3Mgd2lsbCBldmFsdWF0ZSB0aGUgZmlyc3QgcGFyYW1ldGVyIG11bHRpcGxlCisgKiB0aW1lcywgYW5kIGl0IG11c3QgYmUgYXNzaWduYWJsZSBhcyBhbiBsdmFsdWUuCisgKi8KKyNkZWZpbmUgRkxFWF9BTExPQ19NRU0oeCwgZmxleG5hbWUsIGJ1ZiwgbGVuKSBkbyB7IFwKKwlzaXplX3QgZmxleF9hcnJheV9sZW5fID0gKGxlbik7IFwKKwkoeCkgPSB4Y2FsbG9jKDEsIHN0X2FkZDMoc2l6ZW9mKCooeCkpLCBmbGV4X2FycmF5X2xlbl8sIDEpKTsgXAorCW1lbWNweSgodm9pZCAqKSh4KS0+ZmxleG5hbWUsIChidWYpLCBmbGV4X2FycmF5X2xlbl8pOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBGTEVYUFRSX0FMTE9DX01FTSh4LCBwdHJuYW1lLCBidWYsIGxlbikgZG8geyBcCisJc2l6ZV90IGZsZXhfYXJyYXlfbGVuXyA9IChsZW4pOyBcCisJKHgpID0geGNhbGxvYygxLCBzdF9hZGQzKHNpemVvZigqKHgpKSwgZmxleF9hcnJheV9sZW5fLCAxKSk7IFwKKwltZW1jcHkoKHgpICsgMSwgKGJ1ZiksIGZsZXhfYXJyYXlfbGVuXyk7IFwKKwkoeCktPnB0cm5hbWUgPSAodm9pZCAqKSgoeCkrMSk7IFwKK30gd2hpbGUoMCkKKyNkZWZpbmUgRkxFWF9BTExPQ19TVFIoeCwgZmxleG5hbWUsIHN0cikgXAorCUZMRVhfQUxMT0NfTUVNKCh4KSwgZmxleG5hbWUsIChzdHIpLCBzdHJsZW4oc3RyKSkKKyNkZWZpbmUgRkxFWFBUUl9BTExPQ19TVFIoeCwgcHRybmFtZSwgc3RyKSBcCisJRkxFWFBUUl9BTExPQ19NRU0oKHgpLCBwdHJuYW1lLCAoc3RyKSwgc3RybGVuKHN0cikpCisKK3N0YXRpYyBpbmxpbmUgY2hhciAqeHN0cmR1cF9vcl9udWxsKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc3RyID8geHN0cmR1cChzdHIpIDogTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgeHNpemVfdChvZmZfdCBsZW4pCit7CisJc2l6ZV90IHNpemUgPSAoc2l6ZV90KSBsZW47CisKKwlpZiAobGVuICE9IChvZmZfdCkgc2l6ZSkKKwkJZGllKCJDYW5ub3QgaGFuZGxlIGZpbGVzIHRoaXMgYmlnIik7CisJcmV0dXJuIHNpemU7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitpbnQgeHNucHJpbnRmKGNoYXIgKmRzdCwgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjaWZuZGVmIEhPU1RfTkFNRV9NQVgKKyNkZWZpbmUgSE9TVF9OQU1FX01BWCAyNTYKKyNlbmRpZgorCitpbnQgeGdldGhvc3RuYW1lKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CisKKy8qIGluIGN0eXBlLmMsIGZvciBrd3NldCB1c2VycyAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgdG9sb3dlcl90cmFuc190YmxbMjU2XTsKKworLyogU2FuZSBjdHlwZSAtIG5vIGxvY2FsZSwgYW5kIHdvcmtzIHdpdGggc2lnbmVkIGNoYXJzICovCisjdW5kZWYgaXNhc2NpaQorI3VuZGVmIGlzc3BhY2UKKyN1bmRlZiBpc2RpZ2l0CisjdW5kZWYgaXNhbHBoYQorI3VuZGVmIGlzYWxudW0KKyN1bmRlZiBpc3ByaW50CisjdW5kZWYgaXNsb3dlcgorI3VuZGVmIGlzdXBwZXIKKyN1bmRlZiB0b2xvd2VyCisjdW5kZWYgdG91cHBlcgorI3VuZGVmIGlzY250cmwKKyN1bmRlZiBpc3B1bmN0CisjdW5kZWYgaXN4ZGlnaXQKKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FuZV9jdHlwZVsyNTZdOworI2RlZmluZSBHSVRfU1BBQ0UgMHgwMQorI2RlZmluZSBHSVRfRElHSVQgMHgwMgorI2RlZmluZSBHSVRfQUxQSEEgMHgwNAorI2RlZmluZSBHSVRfR0xPQl9TUEVDSUFMIDB4MDgKKyNkZWZpbmUgR0lUX1JFR0VYX1NQRUNJQUwgMHgxMAorI2RlZmluZSBHSVRfUEFUSFNQRUNfTUFHSUMgMHgyMAorI2RlZmluZSBHSVRfQ05UUkwgMHg0MAorI2RlZmluZSBHSVRfUFVOQ1QgMHg4MAorI2RlZmluZSBzYW5lX2lzdGVzdCh4LG1hc2spICgoc2FuZV9jdHlwZVsodW5zaWduZWQgY2hhcikoeCldICYgKG1hc2spKSAhPSAwKQorI2RlZmluZSBpc2FzY2lpKHgpICgoKHgpICYgfjB4N2YpID09IDApCisjZGVmaW5lIGlzc3BhY2UoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfU1BBQ0UpCisjZGVmaW5lIGlzZGlnaXQoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfRElHSVQpCisjZGVmaW5lIGlzYWxwaGEoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfQUxQSEEpCisjZGVmaW5lIGlzYWxudW0oeCkgc2FuZV9pc3Rlc3QoeCxHSVRfQUxQSEEgfCBHSVRfRElHSVQpCisjZGVmaW5lIGlzcHJpbnQoeCkgKCh4KSA+PSAweDIwICYmICh4KSA8PSAweDdlKQorI2RlZmluZSBpc2xvd2VyKHgpIHNhbmVfaXNjYXNlKHgsIDEpCisjZGVmaW5lIGlzdXBwZXIoeCkgc2FuZV9pc2Nhc2UoeCwgMCkKKyNkZWZpbmUgaXNfZ2xvYl9zcGVjaWFsKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0dMT0JfU1BFQ0lBTCkKKyNkZWZpbmUgaXNfcmVnZXhfc3BlY2lhbCh4KSBzYW5lX2lzdGVzdCh4LEdJVF9HTE9CX1NQRUNJQUwgfCBHSVRfUkVHRVhfU1BFQ0lBTCkKKyNkZWZpbmUgaXNjbnRybCh4KSAoc2FuZV9pc3Rlc3QoeCxHSVRfQ05UUkwpKQorI2RlZmluZSBpc3B1bmN0KHgpIHNhbmVfaXN0ZXN0KHgsIEdJVF9QVU5DVCB8IEdJVF9SRUdFWF9TUEVDSUFMIHwgXAorCQlHSVRfR0xPQl9TUEVDSUFMIHwgR0lUX1BBVEhTUEVDX01BR0lDKQorI2RlZmluZSBpc3hkaWdpdCh4KSAoaGV4dmFsX3RhYmxlWyh1bnNpZ25lZCBjaGFyKSh4KV0gIT0gLTEpCisjZGVmaW5lIHRvbG93ZXIoeCkgc2FuZV9jYXNlKCh1bnNpZ25lZCBjaGFyKSh4KSwgMHgyMCkKKyNkZWZpbmUgdG91cHBlcih4KSBzYW5lX2Nhc2UoKHVuc2lnbmVkIGNoYXIpKHgpLCAwKQorI2RlZmluZSBpc19wYXRoc3BlY19tYWdpYyh4KSBzYW5lX2lzdGVzdCh4LEdJVF9QQVRIU1BFQ19NQUdJQykKKworc3RhdGljIGlubGluZSBpbnQgc2FuZV9jYXNlKGludCB4LCBpbnQgaGlnaCkKK3sKKwlpZiAoc2FuZV9pc3Rlc3QoeCwgR0lUX0FMUEhBKSkKKwkJeCA9ICh4ICYgfjB4MjApIHwgaGlnaDsKKwlyZXR1cm4geDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2FuZV9pc2Nhc2UoaW50IHgsIGludCBpc19sb3dlcikKK3sKKwlpZiAoIXNhbmVfaXN0ZXN0KHgsIEdJVF9BTFBIQSkpCisJCXJldHVybiAwOworCisJaWYgKGlzX2xvd2VyKQorCQlyZXR1cm4gKHggJiAweDIwKSAhPSAwOworCWVsc2UKKwkJcmV0dXJuICh4ICYgMHgyMCkgPT0gMDsKK30KKworLyoKKyAqIExpa2Ugc2tpcF9wcmVmaXgsIGJ1dCBjb21wYXJlIGNhc2UtaW5zZW5zaXRpdmVseS4gTm90ZSB0aGF0IHRoZSBjb21wYXJpc29uCisgKiBpcyBkb25lIHZpYSB0b2xvd2VyKCksIHNvIGl0IGlzIHN0cmljdGx5IEFTQ0lJIChubyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgb3IKKyAqIGxvY2FsZS1zcGVjaWZpYyBjb252ZXJzaW9ucykuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNraXBfaXByZWZpeChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgICBjb25zdCBjaGFyICoqb3V0KQoreworCWRvIHsKKwkJaWYgKCEqcHJlZml4KSB7CisJCQkqb3V0ID0gc3RyOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IHdoaWxlICh0b2xvd2VyKCpzdHIrKykgPT0gdG9sb3dlcigqcHJlZml4KyspKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3RydG91bF91aShjaGFyIGNvbnN0ICpzLCBpbnQgYmFzZSwgdW5zaWduZWQgaW50ICpyZXN1bHQpCit7CisJdW5zaWduZWQgbG9uZyB1bDsKKwljaGFyICpwOworCisJZXJybm8gPSAwOworCS8qIG5lZ2F0aXZlIHZhbHVlcyB3b3VsZCBiZSBhY2NlcHRlZCBieSBzdHJ0b3VsICovCisJaWYgKHN0cmNocihzLCAnLScpKQorCQlyZXR1cm4gLTE7CisJdWwgPSBzdHJ0b3VsKHMsICZwLCBiYXNlKTsKKwlpZiAoZXJybm8gfHwgKnAgfHwgcCA9PSBzIHx8ICh1bnNpZ25lZCBpbnQpIHVsICE9IHVsKQorCQlyZXR1cm4gLTE7CisJKnJlc3VsdCA9IHVsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdHJ0b2xfaShjaGFyIGNvbnN0ICpzLCBpbnQgYmFzZSwgaW50ICpyZXN1bHQpCit7CisJbG9uZyB1bDsKKwljaGFyICpwOworCisJZXJybm8gPSAwOworCXVsID0gc3RydG9sKHMsICZwLCBiYXNlKTsKKwlpZiAoZXJybm8gfHwgKnAgfHwgcCA9PSBzIHx8IChpbnQpIHVsICE9IHVsKQorCQlyZXR1cm4gLTE7CisJKnJlc3VsdCA9IHVsOworCXJldHVybiAwOworfQorCit2b2lkIGdpdF9zdGFibGVfcXNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgaW50KCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisjaWZkZWYgSU5URVJOQUxfUVNPUlQKKyNkZWZpbmUgcXNvcnQgZ2l0X3N0YWJsZV9xc29ydAorI2VuZGlmCisKKyNkZWZpbmUgUVNPUlQoYmFzZSwgbiwgY29tcGFyKSBzYW5lX3Fzb3J0KChiYXNlKSwgKG4pLCBzaXplb2YoKihiYXNlKSksIGNvbXBhcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYW5lX3Fzb3J0KHZvaWQgKmJhc2UsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsCisJCQkgICAgICBpbnQoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCWlmIChubWVtYiA+IDEpCisJCXFzb3J0KGJhc2UsIG5tZW1iLCBzaXplLCBjb21wYXIpOworfQorCisjZGVmaW5lIFNUQUJMRV9RU09SVChiYXNlLCBuLCBjb21wYXIpIFwKKwlnaXRfc3RhYmxlX3Fzb3J0KChiYXNlKSwgKG4pLCBzaXplb2YoKihiYXNlKSksIGNvbXBhcikKKworI2lmbmRlZiBIQVZFX0lTT19RU09SVF9TCitpbnQgZ2l0X3Fzb3J0X3Modm9pZCAqYmFzZSwgc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwKKwkJaW50ICgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqY3R4KTsKKyNkZWZpbmUgcXNvcnRfcyBnaXRfcXNvcnRfcworI2VuZGlmCisKKyNkZWZpbmUgUVNPUlRfUyhiYXNlLCBuLCBjb21wYXIsIGN0eCkgZG8gewkJCVwKKwlpZiAocXNvcnRfcygoYmFzZSksIChuKSwgc2l6ZW9mKCooYmFzZSkpLCBjb21wYXIsIGN0eCkpCVwKKwkJQlVHKCJxc29ydF9zKCkgZmFpbGVkIik7CQkJXAorfSB3aGlsZSAoMCkKKworI2lmbmRlZiBSRUdfU1RBUlRFTkQKKyNlcnJvciAiR2l0IHJlcXVpcmVzIFJFR19TVEFSVEVORCBzdXBwb3J0LiBDb21waWxlIHdpdGggTk9fUkVHRVg9TmVlZHNTdGFydEVuZCIKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCByZWdleGVjX2J1Zihjb25zdCByZWdleF90ICpwcmVnLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplLAorCQkJICAgICAgc2l6ZV90IG5tYXRjaCwgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwgaW50IGVmbGFncykKK3sKKwlhc3NlcnQobm1hdGNoID4gMCAmJiBwbWF0Y2gpOworCXBtYXRjaFswXS5ybV9zbyA9IDA7CisJcG1hdGNoWzBdLnJtX2VvID0gc2l6ZTsKKwlyZXR1cm4gcmVnZXhlYyhwcmVnLCBidWYsIG5tYXRjaCwgcG1hdGNoLCBlZmxhZ3MgfCBSRUdfU1RBUlRFTkQpOworfQorCisjaWZuZGVmIERJUl9IQVNfQlNEX0dST1VQX1NFTUFOVElDUworIyBkZWZpbmUgRk9SQ0VfRElSX1NFVF9HSUQgU19JU0dJRAorI2Vsc2UKKyMgZGVmaW5lIEZPUkNFX0RJUl9TRVRfR0lEIDAKKyNlbmRpZgorCisjaWZkZWYgTk9fTlNFQworI3VuZGVmIFVTRV9OU0VDCisjZGVmaW5lIFNUX0NUSU1FX05TRUMoc3QpIDAKKyNkZWZpbmUgU1RfTVRJTUVfTlNFQyhzdCkgMAorI2Vsc2UKKyNpZmRlZiBVU0VfU1RfVElNRVNQRUMKKyNkZWZpbmUgU1RfQ1RJTUVfTlNFQyhzdCkgKCh1bnNpZ25lZCBpbnQpKChzdCkuc3RfY3RpbWVzcGVjLnR2X25zZWMpKQorI2RlZmluZSBTVF9NVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9tdGltZXNwZWMudHZfbnNlYykpCisjZWxzZQorI2RlZmluZSBTVF9DVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9jdGltLnR2X25zZWMpKQorI2RlZmluZSBTVF9NVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9tdGltLnR2X25zZWMpKQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFVOUkVMSUFCTEVfRlNUQVQKKyNkZWZpbmUgZnN0YXRfaXNfcmVsaWFibGUoKSAwCisjZWxzZQorI2RlZmluZSBmc3RhdF9pc19yZWxpYWJsZSgpIDEKKyNlbmRpZgorCisjaWZuZGVmIHZhX2NvcHkKKy8qCisgKiBTaW5jZSBhbiBvYnZpb3VzIGltcGxlbWVudGF0aW9uIG9mIHZhX2xpc3Qgd291bGQgYmUgdG8gbWFrZSBpdCBhCisgKiBwb2ludGVyIGludG8gdGhlIHN0YWNrIGZyYW1lLCBhIHNpbXBsZSBhc3NpZ25tZW50IHdpbGwgd29yayBvbgorICogbWFueSBzeXN0ZW1zLiAgQnV0IGxldCdzIHRyeSB0byBiZSBtb3JlIHBvcnRhYmxlLgorICovCisjaWZkZWYgX192YV9jb3B5CisjZGVmaW5lIHZhX2NvcHkoZHN0LCBzcmMpIF9fdmFfY29weShkc3QsIHNyYykKKyNlbHNlCisjZGVmaW5lIHZhX2NvcHkoZHN0LCBzcmMpICgoZHN0KSA9IChzcmMpKQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IChfTVNDX1ZFUiA+PSAxNDAwKSB8fCBkZWZpbmVkKF9fQzk5X01BQ1JPX1dJVEhfVkFfQVJHUykKKyNkZWZpbmUgSEFWRV9WQVJJQURJQ19NQUNST1MgMQorI2VuZGlmCisKKy8qIHVzYWdlLmM6IG9ubHkgdG8gYmUgdXNlZCBmb3IgdGVzdGluZyBCVUcoKSBpbXBsZW1lbnRhdGlvbiAoc2VlIHRlc3QtdG9vbCkgKi8KK2V4dGVybiBpbnQgQlVHX2V4aXRfY29kZTsKKworI2lmZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKSBOT1JFVFVSTgordm9pZCBCVUdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNkZWZpbmUgQlVHKC4uLikgQlVHX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18pCisjZWxzZQorX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkgTk9SRVRVUk4KK3ZvaWQgQlVHKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNlbmRpZgorCisvKgorICogUHJlc2VydmVzIGVycm5vLCBwcmludHMgYSBtZXNzYWdlLCBidXQgZ2l2ZXMgbm8gd2FybmluZyBmb3IgRU5PRU5ULgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHdoaWNoIGluY2x1ZGVzIHRyeWluZyB0byB1bmxpbmsgYW4gb2JqZWN0IHRoYXQgZG9lcworICogbm90IGV4aXN0LgorICovCitpbnQgdW5saW5rX29yX3dhcm4oY29uc3QgY2hhciAqcGF0aCk7CisgLyoKKyAgKiBUcmllcyB0byB1bmxpbmsgZmlsZS4gIFJldHVybnMgMCBpZiB1bmxpbmsgc3VjY2VlZGVkCisgICogb3IgdGhlIGZpbGUgYWxyZWFkeSBkaWRuJ3QgZXhpc3QuICBSZXR1cm5zIC0xIGFuZAorICAqIGFwcGVuZHMgYSBtZXNzYWdlIHRvIGVyciBzdWl0YWJsZSBmb3IKKyAgKiAnZXJyb3IoIiVzIiwgZXJyLT5idWYpJyBvbiBlcnJvci4KKyAgKi8KK2ludCB1bmxpbmtfb3JfbXNnKGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzdHJidWYgKmVycik7CisvKgorICogUHJlc2VydmVzIGVycm5vLCBwcmludHMgYSBtZXNzYWdlLCBidXQgZ2l2ZXMgbm8gd2FybmluZyBmb3IgRU5PRU5ULgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHdoaWNoIGluY2x1ZGVzIHRyeWluZyB0byByZW1vdmUgYSBkaXJlY3RvcnkgdGhhdCBkb2VzCisgKiBub3QgZXhpc3QuCisgKi8KK2ludCBybWRpcl9vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgpOworLyoKKyAqIENhbGxzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG91dCBvZiB7dW5saW5rLHJtZGlyfV9vcl93YXJuIGJhc2VkIG9uCisgKiB0aGUgc3VwcGxpZWQgZmlsZSBtb2RlLgorICovCitpbnQgcmVtb3ZlX29yX3dhcm4odW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogQ2FsbCBhY2Nlc3MoMiksIGJ1dCB3YXJuIGZvciBhbnkgZXJyb3IgZXhjZXB0ICJtaXNzaW5nIGZpbGUiCisgKiAoRU5PRU5UIG9yIEVOT1RESVIpLgorICovCisjZGVmaW5lIEFDQ0VTU19FQUNDRVNfT0sgKDFVIDw8IDApCitpbnQgYWNjZXNzX29yX3dhcm4oY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUsIHVuc2lnbmVkIGZsYWcpOworaW50IGFjY2Vzc19vcl9kaWUoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUsIHVuc2lnbmVkIGZsYWcpOworCisvKiBXYXJuIG9uIGFuIGluYWNjZXNzaWJsZSBmaWxlIGlmIGVycm5vIGluZGljYXRlcyB0aGlzIGlzIGFuIGVycm9yICovCitpbnQgd2Fybl9vbl9mb3Blbl9lcnJvcnMoY29uc3QgY2hhciAqcGF0aCk7CisKKyNpZmRlZiBHTVRJTUVfVU5SRUxJQUJMRV9FUlJPUlMKK3N0cnVjdCB0bSAqZ2l0X2dtdGltZShjb25zdCB0aW1lX3QgKik7CitzdHJ1Y3QgdG0gKmdpdF9nbXRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOworI2RlZmluZSBnbXRpbWUgZ2l0X2dtdGltZQorI2RlZmluZSBnbXRpbWVfciBnaXRfZ210aW1lX3IKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBVU0VfUEFSRU5TX0FST1VORF9HRVRURVhUX04gMQorI2VuZGlmCisKKyNpZm5kZWYgU0hFTExfUEFUSAorIyBkZWZpbmUgU0hFTExfUEFUSCAiL2Jpbi9zaCIKKyNlbmRpZgorCisjaWZuZGVmIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMKKyNkZWZpbmUgZmxvY2tmaWxlKGZoKQorI2RlZmluZSBmdW5sb2NrZmlsZShmaCkKKyNkZWZpbmUgZ2V0Y191bmxvY2tlZChmaCkgZ2V0YyhmaCkKKyNlbmRpZgorCisjaWZkZWYgRklMRU5PX0lTX0FfTUFDUk8KK2ludCBnaXRfZmlsZW5vKEZJTEUgKnN0cmVhbSk7CisjIGlmbmRlZiBDT01QQVRfQ09ERV9GSUxFTk8KKyMgIHVuZGVmIGZpbGVubworIyAgZGVmaW5lIGZpbGVubyhwKSBnaXRfZmlsZW5vKHApCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIE5FRURfQUNDRVNTX1JPT1RfSEFORExFUgoraW50IGdpdF9hY2Nlc3MoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpOworIyBpZm5kZWYgQ09NUEFUX0NPREVfQUNDRVNTCisjICBpZmRlZiBhY2Nlc3MKKyMgIHVuZGVmIGFjY2VzcworIyAgZW5kaWYKKyMgIGRlZmluZSBhY2Nlc3MocGF0aCwgbW9kZSkgZ2l0X2FjY2VzcyhwYXRoLCBtb2RlKQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBPdXIgY29kZSBvZnRlbiBvcGVucyBhIHBhdGggdG8gYW4gb3B0aW9uYWwgZmlsZSwgdG8gd29yayBvbiBpdHMKKyAqIGNvbnRlbnRzIHdoZW4gd2UgY2FuIHN1Y2Nlc3NmdWxseSBvcGVuIGl0LiAgV2UgY2FuIGlnbm9yZSBhIGZhaWx1cmUKKyAqIHRvIG9wZW4gaWYgc3VjaCBhbiBvcHRpb25hbCBmaWxlIGRvZXMgbm90IGV4aXN0LCBidXQgd2UgZG8gd2FudCB0bworICogcmVwb3J0IGEgZmFpbHVyZSBpbiBvcGVuaW5nIGZvciBvdGhlciByZWFzb25zIChlLmcuIHdlIGdvdCBhbiBJL08KKyAqIGVycm9yLCBvciB0aGUgZmlsZSBpcyB0aGVyZSwgYnV0IHdlIGxhY2sgdGhlIHBlcm1pc3Npb24gdG8gb3BlbikuCisgKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIHNlZWluZyBhbiBlcnJvciBmcm9tIG9wZW4oKSBvciBmb3BlbigpIHRvCisgKiBzZWUgaWYgdGhlIGVycm5vIGluZGljYXRlcyBhIG1pc3NpbmcgZmlsZSB0aGF0IHdlIGNhbiBzYWZlbHkgaWdub3JlLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19taXNzaW5nX2ZpbGVfZXJyb3IoaW50IGVycm5vXykKK3sKKwlyZXR1cm4gKGVycm5vXyA9PSBFTk9FTlQgfHwgZXJybm9fID09IEVOT1RESVIpOworfQorCitpbnQgY21kX21haW4oaW50LCBjb25zdCBjaGFyICoqKTsKKworLyoKKyAqIEludGVyY2VwdCBhbGwgY2FsbHMgdG8gZXhpdCgpIGFuZCByb3V0ZSB0aGVtIHRvIHRyYWNlMiB0bworICogb3B0aW9uYWxseSBlbWl0IGEgbWVzc2FnZSBiZWZvcmUgY2FsbGluZyB0aGUgcmVhbCBleGl0KCkuCisgKi8KK2ludCB0cmFjZTJfY21kX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBjb2RlKTsKKyNkZWZpbmUgZXhpdChjb2RlKSBleGl0KHRyYWNlMl9jbWRfZXhpdF9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjb2RlKSkpCisKKy8qCisgKiBZb3UgY2FuIG1hcmsgYSBzdGFjayB2YXJpYWJsZSB3aXRoIFVOTEVBSyh2YXIpIHRvIGF2b2lkIGl0IGJlaW5nCisgKiByZXBvcnRlZCBhcyBhIGxlYWsgYnkgdG9vbHMgbGlrZSBMU0FOIG9yIHZhbGdyaW5kLiBUaGUgYXJndW1lbnQKKyAqIHNob3VsZCBnZW5lcmFsbHkgYmUgdGhlIHZhcmlhYmxlIGl0c2VsZiAobm90IGl0cyBhZGRyZXNzIGFuZCBub3Qgd2hhdAorICogaXQgcG9pbnRzIHRvKS4gSXQncyBzYWZlIHRvIHVzZSB0aGlzIG9uIHBvaW50ZXJzIHdoaWNoIG1heSBhbHJlYWR5CisgKiBoYXZlIGJlZW4gZnJlZWQsIG9yIG9uIHBvaW50ZXJzIHdoaWNoIG1heSBzdGlsbCBiZSBpbiB1c2UuCisgKgorICogVXNlIHRoaXMgX29ubHlfIGZvciBhIHZhcmlhYmxlIHRoYXQgbGVha3MgYnkgZ29pbmcgb3V0IG9mIHNjb3BlIGF0CisgKiBwcm9ncmFtIGV4aXQgKHNvIG9ubHkgZnJvbSBjbWRfKiBmdW5jdGlvbnMgb3IgdGhlaXIgZGlyZWN0IGhlbHBlcnMpLgorICogTm9ybWFsIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB3aGljaCBtYXkgYmUgY2FsbGVkIG11bHRpcGxlCisgKiB0aW1lcywgc2hvdWxkIGFjdHVhbGx5IGZyZWUgdGhlaXIgbWVtb3J5LiBUaGlzIGlzIG9ubHkgbWVhbnQgYXMKKyAqIGFuIGFubm90YXRpb24sIGFuZCBkb2VzIG5vdGhpbmcgaW4gbm9uLWxlYWstY2hlY2tpbmcgYnVpbGRzLgorICovCisjaWZkZWYgU1VQUFJFU1NfQU5OT1RBVEVEX0xFQUtTCit2b2lkIHVubGVha19tZW1vcnkoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKTsKKyNkZWZpbmUgVU5MRUFLKHZhcikgdW5sZWFrX21lbW9yeSgmKHZhciksIHNpemVvZih2YXIpKQorI2Vsc2UKKyNkZWZpbmUgVU5MRUFLKHZhcikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaW5jbHVkZSBtdXN0IGNvbWUgYWZ0ZXIgc3lzdGVtIGhlYWRlcnMsIHNpbmNlIGl0IGludHJvZHVjZXMgbWFjcm9zIHRoYXQKKyAqIHJlcGxhY2Ugc3lzdGVtIG5hbWVzLgorICovCisjaW5jbHVkZSAiYmFubmVkLmgiCisKKy8qCisgKiBjb250YWluZXJfb2YgLSBHZXQgdGhlIGFkZHJlc3Mgb2YgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBmaWVsZC4KKyAqCisgKiBAcHRyOiBwb2ludGVyIHRvIHRoZSBmaWVsZC4KKyAqIEB0eXBlOiB0eXBlIG9mIHRoZSBvYmplY3QuCisgKiBAbWVtYmVyOiBuYW1lIG9mIHRoZSBmaWVsZCB3aXRoaW4gdGhlIG9iamVjdC4KKyAqLworI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwkoKHR5cGUgKikgKChjaGFyICopKHB0cikgLSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpKSkKKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiBmb3IgYGNvbnRhaW5lcl9vZl9vcl9udWxsJyB0byBhdm9pZCBtdWx0aXBsZQorICogZXZhbHVhdGlvbiBvZiBAcHRyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqY29udGFpbmVyX29mX29yX251bGxfb2Zmc2V0KHZvaWQgKnB0ciwgc2l6ZV90IG9mZnNldCkKK3sKKwlyZXR1cm4gcHRyID8gKGNoYXIgKilwdHIgLSBvZmZzZXQgOiBOVUxMOworfQorCisvKgorICogbGlrZSBgY29udGFpbmVyX29mJywgYnV0IGFsbG93cyByZXR1cm5lZCB2YWx1ZSB0byBiZSBOVUxMCisgKi8KKyNkZWZpbmUgY29udGFpbmVyX29mX29yX251bGwocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwkodHlwZSAqKWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldChwdHIsIG9mZnNldG9mKHR5cGUsIG1lbWJlcikpCisKKy8qCisgKiBsaWtlIG9mZnNldG9mKCksIGJ1dCB0YWtlcyBhIHBvaW50ZXIgdG8gYSBhIHZhcmlhYmxlIG9mIHR5cGUgd2hpY2gKKyAqIGNvbnRhaW5zIEBtZW1iZXIsIGluc3RlYWQgb2YgYSBzcGVjaWZpZWQgdHlwZS4KKyAqIEBwdHIgaXMgc3ViamVjdCB0byBtdWx0aXBsZSBldmFsdWF0aW9uIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gX190eXBlb2ZfXworICogZXZlcnl3aGVyZS4KKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pIC8qIGNsYW5nIHNldHMgdGhpcywgdG9vICovCisjZGVmaW5lIE9GRlNFVE9GX1ZBUihwdHIsIG1lbWJlcikgb2Zmc2V0b2YoX190eXBlb2ZfXygqcHRyKSwgbWVtYmVyKQorI2Vsc2UgLyogIV9fR05VQ19fICovCisjZGVmaW5lIE9GRlNFVE9GX1ZBUihwdHIsIG1lbWJlcikgXAorCSgodWludHB0cl90KSYocHRyKS0+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+ICIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYl9jb25maWcucGVybCIgPDxFT0YKKyMhQEBQRVJMQEAKK291ciBcJHByb2plY3Ryb290ID0gIiQoZGlybmFtZSAiJGZxZ2l0ZGlyIikiOworb3VyIFwkZ2l0X3RlbXAgPSAiJGZxZ2l0ZGlyL2dpdHdlYi90bXAiOworb3VyIFwkcHJvamVjdHNfbGlzdCA9IFwkcHJvamVjdHJvb3Q7CisKK1wkZmVhdHVyZXsncmVtb3RlX2hlYWRzJ317J2RlZmF1bHQnfSA9IFsxXTsKK0VPRgorfQorCitjb25maWd1cmVfaHR0cGQoKSB7CisJY2FzZSAiJGh0dHBkIiBpbgorCSpsaWdodHRwZCopCisJCWxpZ2h0dHBkX2NvbmYKKwkJOzsKKwkqYXBhY2hlMip8Kmh0dHBkKikKKwkJYXBhY2hlMl9jb25mCisJCTs7CisJd2VicmljaykKKwkJd2Vicmlja19jb25mCisJCTs7CisJKm1vbmdvb3NlKikKKwkJbW9uZ29vc2VfY29uZgorCQk7OworCSpwbGFja3VwKikKKwkJcGxhY2t1cF9jb25mCisJCTs7CisJKnB5dGhvbiopCisJCXB5dGhvbl9jb25mCisJCTs7CisJKikKKwkJZWNobyAiVW5rbm93biBodHRwZCBzcGVjaWZpZWQ6ICRodHRwZCIKKwkJZXhpdCAxCisJCTs7CisJZXNhYworfQorCitjYXNlICIkYWN0aW9uIiBpbgorc3RvcCkKKwlzdG9wX2h0dHBkCisJZXhpdCAwCisJOzsKK3N0YXJ0KQorCXN0YXJ0X2h0dHBkCisJZXhpdCAwCisJOzsKK3Jlc3RhcnQpCisJc3RvcF9odHRwZAorCXN0YXJ0X2h0dHBkCisJZXhpdCAwCisJOzsKK2VzYWMKKworZ2l0d2ViX2NvbmYKKworcmVzb2x2ZV9mdWxsX2h0dHBkCitta2RpciAtcCAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seSIKK2NvbmY9IiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkuY29uZiIKKworY29uZmlndXJlX2h0dHBkCisKK3N0YXJ0X2h0dHBkCit1cmw9aHR0cDovLzEyNy4wLjAuMTokcG9ydAorCitpZiB0ZXN0IC1uICIkYnJvd3NlciI7IHRoZW4KKwlodHRwZF9pc19yZWFkeSAmJiBnaXQgd2ViLS1icm93c2UgLWIgIiRicm93c2VyIiAkdXJsIHx8IGVjaG8gJHVybAorZWxzZQorCWh0dHBkX2lzX3JlYWR5ICYmIGdpdCB3ZWItLWJyb3dzZSAtYyAiaW5zdGF3ZWIuYnJvd3NlciIgJHVybCB8fCBlY2hvICR1cmwKK2ZpCmRpZmYgLS1naXQgYS9naXQtbGVnYWN5LXN0YXNoLnNoIGIvZ2l0LWxlZ2FjeS1zdGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZDRlYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWxlZ2FjeS1zdGFzaC5zaApAQCAtMCwwICsxLDc5OCBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwNywgTmFuYWtvIFNoaXJhaXNoaQorCitkYXNobGVzcz0kKGJhc2VuYW1lICIkMCIgfCBzZWQgLWUgJ3MvLS8gLycpCitVU0FHRT0ibGlzdCBbPG9wdGlvbnM+XQorICAgb3I6ICRkYXNobGVzcyBzaG93IFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKyAgIG9yOiAkZGFzaGxlc3MgKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCisgICBvcjogJGRhc2hsZXNzIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCisgICBvcjogJGRhc2hsZXNzIHNhdmUgWy0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdCisJCSAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dCisgICBvcjogJGRhc2hsZXNzIFtwdXNoIFstLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XQorCQkgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tIDxtZXNzYWdlPl0KKwkJICAgICAgIFstLSA8cGF0aHNwZWM+Li4uXV0KKyAgIG9yOiAkZGFzaGxlc3MgY2xlYXIiCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKK09QVElPTlNfU1BFQz0KK1NUQVJUX0RJUj0kKHB3ZCkKKy4gZ2l0LXNoLXNldHVwCityZXF1aXJlX3dvcmtfdHJlZQorcHJlZml4PSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KSB8fCBleGl0IDEKK2NkX3RvX3RvcGxldmVsCisKK1RNUD0iJEdJVF9ESVIvLmdpdC1zdGFzaC4kJCIKK1RNUGluZGV4PSR7R0lUX0lOREVYX0ZJTEUtIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGluZGV4KSJ9LnN0YXNoLiQkCit0cmFwICdybSAtZiAiJFRNUC0iKiAiJFRNUGluZGV4IicgMAorCityZWZfc3Rhc2g9cmVmcy9zdGFzaAorCitpZiBnaXQgY29uZmlnIC0tZ2V0LWNvbG9yYm9vbCBjb2xvci5pbnRlcmFjdGl2ZTsgdGhlbgorICAgICAgIGhlbHBfY29sb3I9IiQoZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBjb2xvci5pbnRlcmFjdGl2ZS5oZWxwICdyZWQgYm9sZCcpIgorICAgICAgIHJlc2V0X2NvbG9yPSIkKGdpdCBjb25maWcgLS1nZXQtY29sb3IgJycgcmVzZXQpIgorZWxzZQorICAgICAgIGhlbHBfY29sb3I9CisgICAgICAgcmVzZXRfY29sb3I9CitmaQorCitub19jaGFuZ2VzICgpIHsKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS1pZ25vcmUtc3VibW9kdWxlcyAtLSAiJEAiICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tICIkQCIgJiYKKwkodGVzdCAteiAiJHVudHJhY2tlZCIgfHwgdGVzdCAteiAiJCh1bnRyYWNrZWRfZmlsZXMgIiRAIikiKQorfQorCit1bnRyYWNrZWRfZmlsZXMgKCkgeworCWlmIHRlc3QgIiQxIiA9ICIteiIKKwl0aGVuCisJCXNoaWZ0CisJCXo9LXoKKwllbHNlCisJCXo9CisJZmkKKwlleGNsX29wdD0tLWV4Y2x1ZGUtc3RhbmRhcmQKKwl0ZXN0ICIkdW50cmFja2VkIiA9ICJhbGwiICYmIGV4Y2xfb3B0PQorCWdpdCBscy1maWxlcyAtbyAkeiAkZXhjbF9vcHQgLS0gIiRAIgorfQorCitwcmVwYXJlX2ZhbGxiYWNrX2lkZW50ICgpIHsKKwlpZiAhIGdpdCAtYyB1c2VyLnVzZWNvbmZpZ29ubHk9eWVzIHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJR0lUX0FVVEhPUl9OQU1FPSJnaXQgc3Rhc2giCisJCUdJVF9BVVRIT1JfRU1BSUw9Z2l0QHN0YXNoCisJCUdJVF9DT01NSVRURVJfTkFNRT0iZ2l0IHN0YXNoIgorCQlHSVRfQ09NTUlUVEVSX0VNQUlMPWdpdEBzdGFzaAorCQlleHBvcnQgR0lUX0FVVEhPUl9OQU1FCisJCWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCisJCWV4cG9ydCBHSVRfQ09NTUlUVEVSX05BTUUKKwkJZXhwb3J0IEdJVF9DT01NSVRURVJfRU1BSUwKKwlmaQorfQorCitjbGVhcl9zdGFzaCAoKSB7CisJaWYgdGVzdCAkIyAhPSAwCisJdGhlbgorCQlkaWUgIiQoZ2V0dGV4dCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIikiCisJZmkKKwlpZiBjdXJyZW50PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICRyZWZfc3Rhc2gpCisJdGhlbgorCQlnaXQgdXBkYXRlLXJlZiAtZCAkcmVmX3N0YXNoICRjdXJyZW50CisJZmkKK30KKworbWF5YmVfcXVpZXQgKCkgeworCWNhc2UgIiQxIiBpbgorCS0ta2VlcC1zdGRvdXQpCisJCXNoaWZ0CisJCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisJCXRoZW4KKwkJCSIkQCIgMj4vZGV2L251bGwKKwkJZWxzZQorCQkJIiRAIgorCQlmaQorCQk7OworCSopCisJCWlmIHRlc3QgLW4gIiRHSVRfUVVJRVQiCisJCXRoZW4KKwkJCSIkQCIgPi9kZXYvbnVsbCAyPiYxCisJCWVsc2UKKwkJCSIkQCIKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK2NyZWF0ZV9zdGFzaCAoKSB7CisKKwlwcmVwYXJlX2ZhbGxiYWNrX2lkZW50CisKKwlzdGFzaF9tc2c9CisJdW50cmFja2VkPQorCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktbXwtLW1lc3NhZ2UpCisJCQlzaGlmdAorCQkJc3Rhc2hfbXNnPSR7MT8iQlVHOiBjcmVhdGVfc3Rhc2ggKCkgLW0gcmVxdWlyZXMgYW4gYXJndW1lbnQifQorCQkJOzsKKwkJLW0qKQorCQkJc3Rhc2hfbXNnPSR7MSMtbX0KKwkJCTs7CisJCS0tbWVzc2FnZT0qKQorCQkJc3Rhc2hfbXNnPSR7MSMtLW1lc3NhZ2U9fQorCQkJOzsKKwkJLXV8LS1pbmNsdWRlLXVudHJhY2tlZCkKKwkJCXNoaWZ0CisJCQl1bnRyYWNrZWQ9JHsxPyJCVUc6IGNyZWF0ZV9zdGFzaCAoKSAtdSByZXF1aXJlcyBhbiBhcmd1bWVudCJ9CisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoCisJaWYgbWF5YmVfcXVpZXQgbm9fY2hhbmdlcyAiJEAiCisJdGhlbgorCQlleGl0IDAKKwlmaQorCisJIyBzdGF0ZSBvZiB0aGUgYmFzZSBjb21taXQKKwlpZiBiX2NvbW1pdD0kKG1heWJlX3F1aWV0IC0ta2VlcC1zdGRvdXQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorCXRoZW4KKwkJaGVhZD0kKGdpdCByZXYtbGlzdCAtLW9uZWxpbmUgLW4gMSBIRUFEIC0tKQorCWVsaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKwl0aGVuCisJCWV4aXQgMQorCWVsc2UKKwkJZGllICIkKGdldHRleHQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IikiCisJZmkKKworCWlmIGJyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKKwl0aGVuCisJCWJyYW5jaD0ke2JyYW5jaCNyZWZzL2hlYWRzL30KKwllbHNlCisJCWJyYW5jaD0nKG5vIGJyYW5jaCknCisJZmkKKwltc2c9JChwcmludGYgJyVzOiAlcycgIiRicmFuY2giICIkaGVhZCIpCisKKwkjIHN0YXRlIG9mIHRoZSBpbmRleAorCWlfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWlfY29tbWl0PSQocHJpbnRmICdpbmRleCBvbiAlc1xuJyAiJG1zZyIgfAorCQlnaXQgY29tbWl0LXRyZWUgJGlfdHJlZSAtcCAkYl9jb21taXQpIHx8CisJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIpIgorCisJaWYgdGVzdCAtbiAiJHVudHJhY2tlZCIKKwl0aGVuCisJCSMgVW50cmFja2VkIGZpbGVzIGFyZSBzdG9yZWQgYnkgdGhlbXNlbHZlcyBpbiBhIHBhcmVudGxlc3MgY29tbWl0LCBmb3IKKwkJIyBlYXNlIG9mIHVucGFja2luZyBsYXRlci4KKwkJdV9jb21taXQ9JCgKKwkJCXVudHJhY2tlZF9maWxlcyAteiAiJEAiIHwgKAorCQkJCUdJVF9JTkRFWF9GSUxFPSIkVE1QaW5kZXgiICYmCisJCQkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCQkJcm0gLWYgIiRUTVBpbmRleCIgJiYKKwkJCQlnaXQgdXBkYXRlLWluZGV4IC16IC0tYWRkIC0tcmVtb3ZlIC0tc3RkaW4gJiYKKwkJCQl1X3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJCQlwcmludGYgJ3VudHJhY2tlZCBmaWxlcyBvbiAlc1xuJyAiJG1zZyIgfCBnaXQgY29tbWl0LXRyZWUgJHVfdHJlZSAgJiYKKwkJCQlybSAtZiAiJFRNUGluZGV4IgorCQkpICkgfHwgZGllICIkKGdldHRleHQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiKSIKKworCQl1bnRyYWNrZWRfY29tbWl0X29wdGlvbj0iLXAgJHVfY29tbWl0IjsKKwllbHNlCisJCXVudHJhY2tlZF9jb21taXRfb3B0aW9uPQorCWZpCisKKwlpZiB0ZXN0IC16ICIkcGF0Y2hfbW9kZSIKKwl0aGVuCisKKwkJIyBzdGF0ZSBvZiB0aGUgd29ya2luZyB0cmVlCisJCXdfdHJlZT0kKCAoCisJCQlnaXQgcmVhZC10cmVlIC0taW5kZXgtb3V0cHV0PSIkVE1QaW5kZXgiIC1tICRpX3RyZWUgJiYKKwkJCUdJVF9JTkRFWF9GSUxFPSIkVE1QaW5kZXgiICYmCisJCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJCWdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IC16IEhFQUQgLS0gIiRAIiA+IiRUTVAtc3RhZ2VuYW1lcyIgJiYKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIFwKKwkJCQkteiAtLWFkZCAtLXJlbW92ZSAtLXN0ZGluIDwiJFRNUC1zdGFnZW5hbWVzIiAmJgorCQkJZ2l0IHdyaXRlLXRyZWUgJiYKKwkJCXJtIC1mICIkVE1QaW5kZXgiCisJCSkgKSB8fAorCQkJZGllICIkKGdldHRleHQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIikiCisKKwllbHNlCisKKwkJcm0gLWYgIiRUTVAtaW5kZXgiICYmCisJCUdJVF9JTkRFWF9GSUxFPSIkVE1QLWluZGV4IiBnaXQgcmVhZC10cmVlIEhFQUQgJiYKKworCQkjIGZpbmQgb3V0IHdoYXQgdGhlIHVzZXIgd2FudHMKKwkJR0lUX0lOREVYX0ZJTEU9IiRUTVAtaW5kZXgiIFwKKwkJCWdpdCBhZGQgLS1sZWdhY3ktc3Rhc2gtcCAtLSAiJEAiICYmCisKKwkJIyBzdGF0ZSBvZiB0aGUgd29ya2luZyB0cmVlCisJCXdfdHJlZT0kKEdJVF9JTkRFWF9GSUxFPSIkVE1QLWluZGV4IiBnaXQgd3JpdGUtdHJlZSkgfHwKKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIikiCisKKwkJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEICR3X3RyZWUgLS0gPiIkVE1QLXBhdGNoIiAmJgorCQl0ZXN0IC1zICIkVE1QLXBhdGNoIiB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIpIgorCisJCXJtIC1mICIkVE1QLWluZGV4IiB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiKSIKKworCWZpCisKKwkjIGNyZWF0ZSB0aGUgc3Rhc2gKKwlpZiB0ZXN0IC16ICIkc3Rhc2hfbXNnIgorCXRoZW4KKwkJc3Rhc2hfbXNnPSQocHJpbnRmICdXSVAgb24gJXMnICIkbXNnIikKKwllbHNlCisJCXN0YXNoX21zZz0kKHByaW50ZiAnT24gJXM6ICVzJyAiJGJyYW5jaCIgIiRzdGFzaF9tc2ciKQorCWZpCisJd19jb21taXQ9JChwcmludGYgJyVzXG4nICIkc3Rhc2hfbXNnIiB8CisJZ2l0IGNvbW1pdC10cmVlICR3X3RyZWUgLXAgJGJfY29tbWl0IC1wICRpX2NvbW1pdCAkdW50cmFja2VkX2NvbW1pdF9vcHRpb24pIHx8CisJZGllICIkKGdldHRleHQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIikiCit9CisKK3N0b3JlX3N0YXNoICgpIHsKKwl3aGlsZSB0ZXN0ICQjICE9IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLW18LS1tZXNzYWdlKQorCQkJc2hpZnQKKwkJCXN0YXNoX21zZz0iJDEiCisJCQk7OworCQktbSopCisJCQlzdGFzaF9tc2c9JHsxIy1tfQorCQkJOzsKKwkJLS1tZXNzYWdlPSopCisJCQlzdGFzaF9tc2c9JHsxIy0tbWVzc2FnZT19CisJCQk7OworCQktcXwtLXF1aWV0KQorCQkJcXVpZXQ9dAorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCXRlc3QgJCMgPSAxIHx8CisJZGllICIkKGV2YWxfZ2V0dGV4dCAiXCIkZGFzaGxlc3Mgc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiKSIKKworCXdfY29tbWl0PSIkMSIKKwlpZiB0ZXN0IC16ICIkc3Rhc2hfbXNnIgorCXRoZW4KKwkJc3Rhc2hfbXNnPSJDcmVhdGVkIHZpYSBcImdpdCBzdGFzaCBzdG9yZVwiLiIKKwlmaQorCisJZ2l0IHVwZGF0ZS1yZWYgLS1jcmVhdGUtcmVmbG9nIC1tICIkc3Rhc2hfbXNnIiAkcmVmX3N0YXNoICR3X2NvbW1pdAorCXJldD0kPworCXRlc3QgJHJldCAhPSAwICYmIHRlc3QgLXogIiRxdWlldCIgJiYKKwlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDYW5ub3QgdXBkYXRlIFwkcmVmX3N0YXNoIHdpdGggXCR3X2NvbW1pdCIpIgorCXJldHVybiAkcmV0Cit9CisKK3B1c2hfc3Rhc2ggKCkgeworCWtlZXBfaW5kZXg9CisJcGF0Y2hfbW9kZT0KKwl1bnRyYWNrZWQ9CisJc3Rhc2hfbXNnPQorCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQkta3wtLWtlZXAtaW5kZXgpCisJCQlrZWVwX2luZGV4PXQKKwkJCTs7CisJCS0tbm8ta2VlcC1pbmRleCkKKwkJCWtlZXBfaW5kZXg9bgorCQkJOzsKKwkJLXB8LS1wYXRjaCkKKwkJCXBhdGNoX21vZGU9dAorCQkJIyBvbmx5IGRlZmF1bHQgdG8ga2VlcCBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gb3ZlcnJpZGUKKwkJCXRlc3QgLXogIiRrZWVwX2luZGV4IiAmJiBrZWVwX2luZGV4PXQKKwkJCTs7CisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9dAorCQkJOzsKKwkJLXV8LS1pbmNsdWRlLXVudHJhY2tlZCkKKwkJCXVudHJhY2tlZD11bnRyYWNrZWQKKwkJCTs7CisJCS1hfC0tYWxsKQorCQkJdW50cmFja2VkPWFsbAorCQkJOzsKKwkJLW18LS1tZXNzYWdlKQorCQkJc2hpZnQKKwkJCXRlc3QgLXogJHsxK3h9ICYmIHVzYWdlCisJCQlzdGFzaF9tc2c9JDEKKwkJCTs7CisJCS1tKikKKwkJCXN0YXNoX21zZz0kezEjLW19CisJCQk7OworCQktLW1lc3NhZ2U9KikKKwkJCXN0YXNoX21zZz0kezEjLS1tZXNzYWdlPX0KKwkJCTs7CisJCS0taGVscCkKKwkJCXNob3dfaGVscAorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJb3B0aW9uPSIkMSIKKwkJCWV2YWxfZ2V0dGV4dGxuICJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBwdXNoJzogXCRvcHRpb24iCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJZXZhbCAic2V0ICQoZ2l0IHJldi1wYXJzZSAtLXNxIC0tcHJlZml4ICIkcHJlZml4IiAtLSAiJEAiKSIKKworCWlmIHRlc3QgLW4gIiRwYXRjaF9tb2RlIiAmJiB0ZXN0IC1uICIkdW50cmFja2VkIgorCXRoZW4KKwkJZGllICIkKGdldHRleHQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiKSIKKwlmaQorCisJdGVzdCAtbiAiJHVudHJhY2tlZCIgfHwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAtLSAiJEAiID4vZGV2L251bGwgfHwgZXhpdCAxCisKKwlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorCWlmIG1heWJlX3F1aWV0IG5vX2NoYW5nZXMgIiRAIgorCXRoZW4KKwkJc2F5ICIkKGdldHRleHQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIpIgorCQlleGl0IDAKKwlmaQorCisJZ2l0IHJlZmxvZyBleGlzdHMgJHJlZl9zdGFzaCB8fAorCQljbGVhcl9zdGFzaCB8fCBkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giKSIKKworCWNyZWF0ZV9zdGFzaCAtbSAiJHN0YXNoX21zZyIgLXUgIiR1bnRyYWNrZWQiIC0tICIkQCIKKwlzdG9yZV9zdGFzaCAtbSAiJHN0YXNoX21zZyIgLXEgJHdfY29tbWl0IHx8CisJZGllICIkKGdldHRleHQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIpIgorCXNheSAiJChldmFsX2dldHRleHQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSBcJHN0YXNoX21zZyIpIgorCisJaWYgdGVzdCAteiAiJHBhdGNoX21vZGUiCisJdGhlbgorCQl0ZXN0ICIkdW50cmFja2VkIiA9ICJhbGwiICYmIENMRUFOX1hfT1BUSU9OPS14IHx8IENMRUFOX1hfT1BUSU9OPQorCQlpZiB0ZXN0IC1uICIkdW50cmFja2VkIiAmJiB0ZXN0ICQjID0gMAorCQl0aGVuCisJCQlnaXQgY2xlYW4gLS1mb3JjZSAtLXF1aWV0IC1kICRDTEVBTl9YX09QVElPTgorCQlmaQorCisJCWlmIHRlc3QgJCMgIT0gMAorCQl0aGVuCisJCQl0ZXN0IC16ICIkdW50cmFja2VkIiAmJiBVUERBVEVfT1BUSU9OPSItdSIgfHwgVVBEQVRFX09QVElPTj0KKwkJCXRlc3QgIiR1bnRyYWNrZWQiID0gImFsbCIgJiYgRk9SQ0VfT1BUSU9OPSItLWZvcmNlIiB8fCBGT1JDRV9PUFRJT049CisJCQlnaXQgYWRkICRVUERBVEVfT1BUSU9OICRGT1JDRV9PUFRJT04gLS0gIiRAIgorCQkJZ2l0IGRpZmYtaW5kZXggLXAgLS1jYWNoZWQgLS1iaW5hcnkgSEVBRCAtLSAiJEAiIHwKKwkJCWdpdCBhcHBseSAtLWluZGV4IC1SCisJCWVsc2UKKwkJCWdpdCByZXNldCAtLWhhcmQgLXEgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMKKwkJZmkKKworCQlpZiB0ZXN0ICIka2VlcF9pbmRleCIgPSAidCIgJiYgdGVzdCAtbiAiJGlfdHJlZSIKKwkJdGhlbgorCQkJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0ICRpX3RyZWUKKwkJCWdpdCBscy1maWxlcyAteiAtLW1vZGlmaWVkIC0tICIkQCIgfAorCQkJZ2l0IGNoZWNrb3V0LWluZGV4IC16IC0tZm9yY2UgLS1zdGRpbgorCQlmaQorCWVsc2UKKwkJZ2l0IGFwcGx5IC1SIDwgIiRUTVAtcGF0Y2giIHx8CisJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiKSIKKworCQlpZiB0ZXN0ICIka2VlcF9pbmRleCIgIT0gInQiCisJCXRoZW4KKwkJCWdpdCByZXNldCAtcSAtLSAiJEAiCisJCWZpCisJZmkKK30KKworc2F2ZV9zdGFzaCAoKSB7CisJcHVzaF9vcHRpb25zPQorCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPXQKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCSMgcGFzcyBhbGwgb3B0aW9ucyB0aHJvdWdoIHRvIHB1c2hfc3Rhc2gKKwkJCXB1c2hfb3B0aW9ucz0iJHB1c2hfb3B0aW9ucyAkMSIKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCXN0YXNoX21zZz0iJCoiCisKKwlpZiB0ZXN0IC16ICIkc3Rhc2hfbXNnIgorCXRoZW4KKwkJcHVzaF9zdGFzaCAkcHVzaF9vcHRpb25zCisJZWxzZQorCQlwdXNoX3N0YXNoICRwdXNoX29wdGlvbnMgLW0gIiRzdGFzaF9tc2ciCisJZmkKK30KKworaGF2ZV9zdGFzaCAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICRyZWZfc3Rhc2ggPi9kZXYvbnVsbAorfQorCitsaXN0X3N0YXNoICgpIHsKKwloYXZlX3N0YXNoIHx8IHJldHVybiAwCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWdkOiAlZ3MiIC1nIC0tZmlyc3QtcGFyZW50IC1tICIkQCIgJHJlZl9zdGFzaCAtLQorfQorCitzaG93X3N0YXNoICgpIHsKKwlBTExPV19VTktOT1dOX0ZMQUdTPXQKKwlhc3NlcnRfc3Rhc2hfbGlrZSAiJEAiCisKKwlpZiB0ZXN0IC16ICIkRkxBR1MiCisJdGhlbgorCQlpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIHN0YXNoLnNob3dTdGF0IHx8IGVjaG8gdHJ1ZSkiID0gInRydWUiCisJCXRoZW4KKwkJCUZMQUdTPS0tc3RhdAorCQlmaQorCisJCWlmIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgc3Rhc2guc2hvd1BhdGNoIHx8IGVjaG8gZmFsc2UpIiA9ICJ0cnVlIgorCQl0aGVuCisJCQlGTEFHUz0ke0ZMQUdTfSR7RkxBR1M6KyB9LXAKKwkJZmkKKworCQlpZiB0ZXN0IC16ICIkRkxBR1MiCisJCXRoZW4KKwkJCXJldHVybiAwCisJCWZpCisJZmkKKworCWdpdCBkaWZmICR7RkxBR1N9ICRiX2NvbW1pdCAkd19jb21taXQKK30KKworc2hvd19oZWxwICgpIHsKKwlleGVjIGdpdCBoZWxwIHN0YXNoCisJZXhpdCAxCit9CisKKyMKKyMgUGFyc2VzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBsb29raW5nIGZvciBmbGFncyBhbmQKKyMgYXQgbW9zdCBvbmUgcmV2aXNpb24gZGVmYXVsdGluZyB0byAke3JlZl9zdGFzaH1AezB9CisjIGlmIG5vbmUgZm91bmQuCisjCisjIERlcml2ZXMgcmVsYXRlZCB0cmVlIGFuZCBjb21taXQgb2JqZWN0cyBmcm9tIHRoZQorIyByZXZpc2lvbiwgaWYgb25lIGlzIGZvdW5kLgorIworIyBzdGFzaCByZWNvcmRzIHRoZSB3b3JrIHRyZWUsIGFuZCBpcyBhIG1lcmdlIGJldHdlZW4gdGhlCisjIGJhc2UgY29tbWl0IChmaXJzdCBwYXJlbnQpIGFuZCB0aGUgaW5kZXggdHJlZSAoc2Vjb25kIHBhcmVudCkuCisjCisjICAgUkVWIGlzIHNldCB0byB0aGUgc3ltYm9saWMgdmVyc2lvbiBvZiB0aGUgc3BlY2lmaWVkIHN0YXNoLWxpa2UgY29tbWl0CisjICAgSVNfU1RBU0hfTElLRSBpcyBub24tYmxhbmsgaWYgJHtSRVZ9IGxvb2tzIGxpa2UgYSBzdGFzaAorIyAgIElTX1NUQVNIX1JFRiBpcyBub24tYmxhbmsgaWYgdGhlICR7UkVWfSBsb29rcyBsaWtlIGEgc3Rhc2ggcmVmCisjICAgcyBpcyBzZXQgdG8gdGhlIFNIQTEgb2YgdGhlIHN0YXNoIGNvbW1pdAorIyAgIHdfY29tbWl0IGlzIHNldCB0byB0aGUgY29tbWl0IGNvbnRhaW5pbmcgdGhlIHdvcmtpbmcgdHJlZQorIyAgIGJfY29tbWl0IGlzIHNldCB0byB0aGUgYmFzZSBjb21taXQKKyMgICBpX2NvbW1pdCBpcyBzZXQgdG8gdGhlIGNvbW1pdCBjb250YWluaW5nIHRoZSBpbmRleCB0cmVlCisjICAgdV9jb21taXQgaXMgc2V0IHRvIHRoZSBjb21taXQgY29udGFpbmluZyB0aGUgdW50cmFja2VkIGZpbGVzIHRyZWUKKyMgICB3X3RyZWUgaXMgc2V0IHRvIHRoZSB3b3JraW5nIHRyZWUKKyMgICBiX3RyZWUgaXMgc2V0IHRvIHRoZSBiYXNlIHRyZWUKKyMgICBpX3RyZWUgaXMgc2V0IHRvIHRoZSBpbmRleCB0cmVlCisjICAgdV90cmVlIGlzIHNldCB0byB0aGUgdW50cmFja2VkIGZpbGVzIHRyZWUKKyMKKyMgICBHSVRfUVVJRVQgaXMgc2V0IHRvIHQgaWYgLXEgaXMgc3BlY2lmaWVkCisjICAgSU5ERVhfT1BUSU9OIGlzIHNldCB0byAtLWluZGV4IGlmIC0taW5kZXggaXMgc3BlY2lmaWVkLgorIyAgIEZMQUdTIGlzIHNldCB0byB0aGUgcmVtYWluaW5nIGZsYWdzIChpZiBhbGxvd2VkKQorIworIyBkaWVzIGlmOgorIyAgICogdG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZAorIyAgICogbm8gcmV2aXNpb24gaXMgc3BlY2lmaWVkIGFuZCB0aGVyZSBpcyBubyBzdGFzaCBzdGFjaworIyAgICogYSByZXZpc2lvbiBpcyBzcGVjaWZpZWQgd2hpY2ggY2Fubm90IGJlIHJlc29sdmUgdG8gYSBTSEExCisjICAgKiBhIG5vbi1leGlzdGVudCBzdGFzaCByZWZlcmVuY2UgaXMgc3BlY2lmaWVkCisjICAgKiB1bmtub3duIGZsYWdzIHdlcmUgc2V0IGFuZCBBTExPV19VTktOT1dOX0ZMQUdTIGlzIG5vdCAidCIKKyMKKworcGFyc2VfZmxhZ3NfYW5kX3JldigpCit7CisJdGVzdCAiJFBBUlNFX0NBQ0hFIiA9ICIkKiIgJiYgcmV0dXJuIDAgIyBvcHRpbWlzYXRpb24KKwlQQVJTRV9DQUNIRT0iJCoiCisKKwlJU19TVEFTSF9MSUtFPQorCUlTX1NUQVNIX1JFRj0KKwlJTkRFWF9PUFRJT049CisJcz0KKwl3X2NvbW1pdD0KKwliX2NvbW1pdD0KKwlpX2NvbW1pdD0KKwl1X2NvbW1pdD0KKwl3X3RyZWU9CisJYl90cmVlPQorCWlfdHJlZT0KKwl1X3RyZWU9CisKKwlGTEFHUz0KKwlSRVY9CisJZm9yIG9wdAorCWRvCisJCWNhc2UgIiRvcHQiIGluCisJCQktcXwtLXF1aWV0KQorCQkJCUdJVF9RVUlFVD0tdAorCQkJOzsKKwkJCS0taW5kZXgpCisJCQkJSU5ERVhfT1BUSU9OPS0taW5kZXgKKwkJCTs7CisJCQktLWhlbHApCisJCQkJc2hvd19oZWxwCisJCQk7OworCQkJLSopCisJCQkJdGVzdCAiJEFMTE9XX1VOS05PV05fRkxBR1MiID0gdCB8fAorCQkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJ1bmtub3duIG9wdGlvbjogXCRvcHQiKSIKKwkJCQlGTEFHUz0iJHtGTEFHU30ke0ZMQUdTOisgfSRvcHQiCisJCQk7OworCQkJKikKKwkJCQlSRVY9IiR7UkVWfSR7UkVWOisgfSckb3B0JyIKKwkJCTs7CisJCWVzYWMKKwlkb25lCisKKwlldmFsIHNldCAtLSAkUkVWCisKKwljYXNlICQjIGluCisJCTApCisJCQloYXZlX3N0YXNoIHx8IGRpZSAiJChnZXR0ZXh0ICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIpIgorCQkJc2V0IC0tICR7cmVmX3N0YXNofUB7MH0KKwkJOzsKKwkJMSkKKwkJCToKKwkJOzsKKwkJKikKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6IFwkUkVWIikiCisJCTs7CisJZXNhYworCisJY2FzZSAiJDEiIGluCisJCSpbITAtOV0qKQorCQkJOgorCQk7OworCQkqKQorCQkJc2V0IC0tICIke3JlZl9zdGFzaH1AeyQxfSIKKwkJOzsKKwllc2FjCisKKwlSRVY9JChnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgLS12ZXJpZnkgLS1xdWlldCAiJDEiKSB8fCB7CisJCXJlZmVyZW5jZT0iJDEiCisJCWRpZSAiJChldmFsX2dldHRleHQgIlwkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIpIgorCX0KKworCWlfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkUkVWXjIiKSAmJgorCXNldCAtLSAkKGdpdCByZXYtcGFyc2UgIiRSRVYiICIkUkVWXjEiICIkUkVWOiIgIiRSRVZeMToiICIkUkVWXjI6IiAyPi9kZXYvbnVsbCkgJiYKKwlzPSQxICYmCisJd19jb21taXQ9JDEgJiYKKwliX2NvbW1pdD0kMiAmJgorCXdfdHJlZT0kMyAmJgorCWJfdHJlZT0kNCAmJgorCWlfdHJlZT0kNSAmJgorCUlTX1NUQVNIX0xJS0U9dCAmJgorCXRlc3QgIiRyZWZfc3Rhc2giID0gIiQoZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSAiJHtSRVYlQCp9IikiICYmCisJSVNfU1RBU0hfUkVGPXQKKworCXVfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkUkVWXjMiKSAmJgorCXVfdHJlZT0kKGdpdCByZXYtcGFyc2UgIiRSRVZeMzoiIDI+L2Rldi9udWxsKQorfQorCitpc19zdGFzaF9saWtlKCkKK3sKKwlwYXJzZV9mbGFnc19hbmRfcmV2ICIkQCIKKwl0ZXN0IC1uICIkSVNfU1RBU0hfTElLRSIKK30KKworYXNzZXJ0X3N0YXNoX2xpa2UoKSB7CisJaXNfc3Rhc2hfbGlrZSAiJEAiIHx8IHsKKwkJYXJncz0iJCoiCisJCWRpZSAiJChldmFsX2dldHRleHQgIidcJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IikiCisJfQorfQorCitpc19zdGFzaF9yZWYoKSB7CisJaXNfc3Rhc2hfbGlrZSAiJEAiICYmIHRlc3QgLW4gIiRJU19TVEFTSF9SRUYiCit9CisKK2Fzc2VydF9zdGFzaF9yZWYoKSB7CisJaXNfc3Rhc2hfcmVmICIkQCIgfHwgeworCQlhcmdzPSIkKiIKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIikiCisJfQorfQorCithcHBseV9zdGFzaCAoKSB7CisKKwlhc3NlcnRfc3Rhc2hfbGlrZSAiJEAiCisKKwlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCB8fCBkaWUgIiQoZ2V0dGV4dCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiKSIKKworCSMgY3VycmVudCBpbmRleCBzdGF0ZQorCWNfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIikiCisKKwl1bnN0YXNoZWRfaW5kZXhfdHJlZT0KKwlpZiB0ZXN0IC1uICIkSU5ERVhfT1BUSU9OIiAmJiB0ZXN0ICIkYl90cmVlIiAhPSAiJGlfdHJlZSIgJiYKKwkJCXRlc3QgIiRjX3RyZWUiICE9ICIkaV90cmVlIgorCXRoZW4KKwkJZ2l0IGRpZmYtdHJlZSAtLWJpbmFyeSAkc14yXi4uJHNeMiB8IGdpdCBhcHBseSAtLWNhY2hlZAorCQl0ZXN0ICQ/IC1uZSAwICYmCisJCQlkaWUgIiQoZ2V0dGV4dCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIpIgorCQl1bnN0YXNoZWRfaW5kZXhfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSB8fAorCQkJZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiKSIKKwkJZ2l0IHJlc2V0CisJZmkKKworCWlmIHRlc3QgLW4gIiR1X3RyZWUiCisJdGhlbgorCQlHSVRfSU5ERVhfRklMRT0iJFRNUGluZGV4IiBnaXQgcmVhZC10cmVlICIkdV90cmVlIiAmJgorCQlHSVRfSU5ERVhfRklMRT0iJFRNUGluZGV4IiBnaXQgY2hlY2tvdXQtaW5kZXggLS1hbGwgJiYKKwkJcm0gLWYgIiRUTVBpbmRleCIgfHwKKwkJZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IikiCisJZmkKKworCWV2YWwgIgorCQlHSVRIRUFEXyR3X3RyZWU9J1N0YXNoZWQgY2hhbmdlcycgJiYKKwkJR0lUSEVBRF8kY190cmVlPSdVcGRhdGVkIHVwc3RyZWFtJyAmJgorCQlHSVRIRUFEXyRiX3RyZWU9J1ZlcnNpb24gc3Rhc2ggd2FzIGJhc2VkIG9uJyAmJgorCQlleHBvcnQgR0lUSEVBRF8kd190cmVlIEdJVEhFQURfJGNfdHJlZSBHSVRIRUFEXyRiX3RyZWUKKwkiCisKKwlpZiB0ZXN0IC1uICIkR0lUX1FVSUVUIgorCXRoZW4KKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0wICYmIGV4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZCisJZmkKKwlpZiBnaXQgbWVyZ2UtcmVjdXJzaXZlICRiX3RyZWUgLS0gJGNfdHJlZSAkd190cmVlCisJdGhlbgorCQkjIE5vIGNvbmZsaWN0CisJCWlmIHRlc3QgLW4gIiR1bnN0YXNoZWRfaW5kZXhfdHJlZSIKKwkJdGhlbgorCQkJZ2l0IHJlYWQtdHJlZSAiJHVuc3Rhc2hlZF9pbmRleF90cmVlIgorCQllbHNlCisJCQlhPSIkVE1QLWFkZGVkIiAmJgorCQkJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1BICRjX3RyZWUgPiIkYSIgJiYKKwkJCWdpdCByZWFkLXRyZWUgLS1yZXNldCAkY190cmVlICYmCisJCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tc3RkaW4gPCIkYSIgfHwKKwkJCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiKSIKKwkJCXJtIC1mICIkYSIKKwkJZmkKKwkJc3F1ZWxjaD0KKwkJaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKwkJdGhlbgorCQkJc3F1ZWxjaD0nPi9kZXYvbnVsbCAyPiYxJworCQlmaQorCQkoY2QgIiRTVEFSVF9ESVIiICYmIGV2YWwgImdpdCBzdGF0dXMgJHNxdWVsY2giKSB8fCA6CisJZWxzZQorCQkjIE1lcmdlIGNvbmZsaWN0OyBrZWVwIHRoZSBleGl0IHN0YXR1cyBmcm9tIG1lcmdlLXJlY3Vyc2l2ZQorCQlzdGF0dXM9JD8KKwkJZ2l0IHJlcmVyZQorCQlpZiB0ZXN0IC1uICIkSU5ERVhfT1BUSU9OIgorCQl0aGVuCisJCQlnZXR0ZXh0bG4gIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIgPiYyCisJCWZpCisJCWV4aXQgJHN0YXR1cworCWZpCit9CisKK3BvcF9zdGFzaCgpIHsKKwlhc3NlcnRfc3Rhc2hfcmVmICIkQCIKKworCWlmIGFwcGx5X3N0YXNoICIkQCIKKwl0aGVuCisJCWRyb3Bfc3Rhc2ggIiRAIgorCWVsc2UKKwkJc3RhdHVzPSQ/CisJCXNheSAiJChnZXR0ZXh0ICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIpIgorCQlleGl0ICRzdGF0dXMKKwlmaQorfQorCitkcm9wX3N0YXNoICgpIHsKKwlhc3NlcnRfc3Rhc2hfcmVmICIkQCIKKworCWdpdCByZWZsb2cgZGVsZXRlIC0tdXBkYXRlcmVmIC0tcmV3cml0ZSAiJHtSRVZ9IiAmJgorCQlzYXkgIiQoZXZhbF9nZXR0ZXh0ICJEcm9wcGVkIFwke1JFVn0gKFwkcykiKSIgfHwKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiXCR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiKSIKKworCSMgY2xlYXJfc3Rhc2ggaWYgd2UganVzdCBkcm9wcGVkIHRoZSBsYXN0IHN0YXNoIGVudHJ5CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkcmVmX3N0YXNoQHswfSIgPi9kZXYvbnVsbCB8fAorCWNsZWFyX3N0YXNoCit9CisKK2FwcGx5X3RvX2JyYW5jaCAoKSB7CisJdGVzdCAtbiAiJDEiIHx8IGRpZSAiJChnZXR0ZXh0ICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiKSIKKwlicmFuY2g9JDEKKwlzaGlmdCAxCisKKwlzZXQgLS0gLS1pbmRleCAiJEAiCisJYXNzZXJ0X3N0YXNoX2xpa2UgIiRAIgorCisJZ2l0IGNoZWNrb3V0IC1iICRicmFuY2ggJFJFVl4gJiYKKwlhcHBseV9zdGFzaCAiJEAiICYmIHsKKwkJdGVzdCAteiAiJElTX1NUQVNIX1JFRiIgfHwgZHJvcF9zdGFzaCAiJEAiCisJfQorfQorCit0ZXN0ICIkMSIgPSAiLXAiICYmIHNldCAicHVzaCIgIiRAIgorCitQQVJTRV9DQUNIRT0nLS1ub3QtcGFyc2VkJworIyBUaGUgZGVmYXVsdCBjb21tYW5kIGlzICJwdXNoIiBpZiBub3RoaW5nIGJ1dCBvcHRpb25zIGFyZSBnaXZlbgorc2Vlbl9ub25fb3B0aW9uPQorZm9yIG9wdAorZG8KKwljYXNlICIkb3B0IiBpbgorCS0tKSBicmVhayA7OworCS0qKSA7OworCSopIHNlZW5fbm9uX29wdGlvbj10OyBicmVhayA7OworCWVzYWMKK2RvbmUKKwordGVzdCAtbiAiJHNlZW5fbm9uX29wdGlvbiIgfHwgc2V0ICJwdXNoIiAiJEAiCisKKyMgTWFpbiBjb21tYW5kIHNldAorY2FzZSAiJDEiIGluCitsaXN0KQorCXNoaWZ0CisJbGlzdF9zdGFzaCAiJEAiCisJOzsKK3Nob3cpCisJc2hpZnQKKwlzaG93X3N0YXNoICIkQCIKKwk7Oworc2F2ZSkKKwlzaGlmdAorCXNhdmVfc3Rhc2ggIiRAIgorCTs7CitwdXNoKQorCXNoaWZ0CisJcHVzaF9zdGFzaCAiJEAiCisJOzsKK2FwcGx5KQorCXNoaWZ0CisJYXBwbHlfc3Rhc2ggIiRAIgorCTs7CitjbGVhcikKKwlzaGlmdAorCWNsZWFyX3N0YXNoICIkQCIKKwk7OworY3JlYXRlKQorCXNoaWZ0CisJY3JlYXRlX3N0YXNoIC1tICIkKiIgJiYgZWNobyAiJHdfY29tbWl0IgorCTs7CitzdG9yZSkKKwlzaGlmdAorCXN0b3JlX3N0YXNoICIkQCIKKwk7OworZHJvcCkKKwlzaGlmdAorCWRyb3Bfc3Rhc2ggIiRAIgorCTs7Citwb3ApCisJc2hpZnQKKwlwb3Bfc3Rhc2ggIiRAIgorCTs7CiticmFuY2gpCisJc2hpZnQKKwlhcHBseV90b19icmFuY2ggIiRAIgorCTs7CisqKQorCWNhc2UgJCMgaW4KKwkwKQorCQlwdXNoX3N0YXNoICYmCisJCXNheSAiJChnZXR0ZXh0ICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiKSIKKwkJOzsKKwkqKQorCQl1c2FnZQorCWVzYWMKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLW9jdG9wdXMuc2ggYi9naXQtbWVyZ2Utb2N0b3B1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZDE5ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LW1lcmdlLW9jdG9wdXMuc2gKQEAgLTAsMCArMSwxMTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgUmVzb2x2ZSB0d28gb3IgbW9yZSB0cmVlcy4KKyMKKworLiBnaXQtc2gtc2V0dXAKKworTEY9JworJworCisjIFRoZSBmaXJzdCBwYXJhbWV0ZXJzIHVwIHRvIC0tIGFyZSBtZXJnZSBiYXNlczsgdGhlIHJlc3QgYXJlIGhlYWRzLgorYmFzZXM9IGhlYWQ9IHJlbW90ZXM9IHNlcF9zZWVuPQorZm9yIGFyZworZG8KKwljYXNlICIsJHNlcF9zZWVuLCRoZWFkLCRhcmcsIiBpbgorCSosLS0sKQorCQlzZXBfc2Vlbj15ZXMKKwkJOzsKKwkseWVzLCwqKQorCQloZWFkPSRhcmcKKwkJOzsKKwkseWVzLCopCisJCXJlbW90ZXM9IiRyZW1vdGVzJGFyZyAiCisJCTs7CisJKikKKwkJYmFzZXM9IiRiYXNlcyRhcmcgIgorCQk7OworCWVzYWMKK2RvbmUKKworIyBSZWplY3QgaWYgdGhpcyBpcyBub3QgYW4gb2N0b3B1cyAtLSByZXNvbHZlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCitjYXNlICIkcmVtb3RlcyIgaW4KKz8qJyAnPyopCisJOzsKKyopCisJZXhpdCAyIDs7Citlc2FjCisKKyMgTVJDIGlzIHRoZSBjdXJyZW50ICJtZXJnZSByZWZlcmVuY2UgY29tbWl0IgorIyBNUlQgaXMgdGhlIGN1cnJlbnQgIm1lcmdlIHJlc3VsdCB0cmVlIgorCitpZiAhIGdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLQordGhlbgorICAgIGdldHRleHRsbiAiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlIgorICAgIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1vbmx5IEhFQUQgLS0gfCBzZWQgLWUgJ3MvXi8gICAgLycKKyAgICBleGl0IDIKK2ZpCitNUkM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRoZWFkKQorTVJUPSQoZ2l0IHdyaXRlLXRyZWUpCitOT05fRkZfTUVSR0U9MAorT0NUT1BVU19GQUlMVVJFPTAKK2ZvciBTSEExIGluICRyZW1vdGVzCitkbworCWNhc2UgIiRPQ1RPUFVTX0ZBSUxVUkUiIGluCisJMSkKKwkJIyBXZSBhbGxvdyBvbmx5IGxhc3Qgb25lIHRvIGhhdmUgYSBoYW5kLXJlc29sdmFibGUKKwkJIyBjb25mbGljdHMuICBMYXN0IHJvdW5kIGZhaWxlZCBhbmQgd2Ugc3RpbGwgaGFkCisJCSMgYSBoZWFkIHRvIG1lcmdlLgorCQlnZXR0ZXh0bG4gIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorCQlnZXR0ZXh0bG4gIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCisJCWV4aXQgMgorCWVzYWMKKworCWV2YWwgcHJldHR5X25hbWU9XCR7R0lUSEVBRF8kU0hBMTotJFNIQTF9CisJaWYgdGVzdCAiJFNIQTEiID0gIiRwcmV0dHlfbmFtZSIKKwl0aGVuCisJCVNIQTFfVVA9IiQoZWNobyAiJFNIQTEiIHwgdHIgYS16IEEtWikiCisJCWV2YWwgcHJldHR5X25hbWU9XCR7R0lUSEVBRF8kU0hBMV9VUDotJHByZXR0eV9uYW1lfQorCWZpCisJY29tbW9uPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgJFNIQTEgJE1SQykgfHwKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoIFwkcHJldHR5X25hbWUiKSIKKworCWNhc2UgIiRMRiRjb21tb24kTEYiIGluCisJKiIkTEYkU0hBMSRMRiIqKQorCQlldmFsX2dldHRleHRsbiAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggXCRwcmV0dHlfbmFtZSIKKwkJY29udGludWUKKwkJOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkY29tbW9uLCROT05fRkZfTUVSR0UiID0gIiRNUkMsMCIKKwl0aGVuCisJCSMgVGhlIGZpcnN0IGhlYWQgYmVpbmcgbWVyZ2VkIHdhcyBhIGZhc3QtZm9yd2FyZC4KKwkJIyBBZHZhbmNlIE1SQyB0byB0aGUgaGVhZCBiZWluZyBtZXJnZWQsIGFuZCB1c2UgdGhhdAorCQkjIHRyZWUgYXMgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgb2YgdGhlIG1lcmdlLgorCQkjIFdlIHN0aWxsIG5lZWQgdG8gY291bnQgdGhpcyBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQgc2V0LgorCisJCWV2YWxfZ2V0dGV4dGxuICJGYXN0LWZvcndhcmRpbmcgdG86IFwkcHJldHR5X25hbWUiCisJCWdpdCByZWFkLXRyZWUgLXUgLW0gJGhlYWQgJFNIQTEgfHwgZXhpdAorCQlNUkM9JFNIQTEgTVJUPSQoZ2l0IHdyaXRlLXRyZWUpCisJCWNvbnRpbnVlCisJZmkKKworCU5PTl9GRl9NRVJHRT0xCisKKwlldmFsX2dldHRleHRsbiAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIFwkcHJldHR5X25hbWUiCisJZ2l0IHJlYWQtdHJlZSAtdSAtbSAtLWFnZ3Jlc3NpdmUgICRjb21tb24gJE1SVCAkU0hBMSB8fCBleGl0IDIKKwluZXh0PSQoZ2l0IHdyaXRlLXRyZWUgMj4vZGV2L251bGwpCisJaWYgdGVzdCAkPyAtbmUgMAorCXRoZW4KKwkJZ2V0dGV4dGxuICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKKwkJZ2l0IG1lcmdlLWluZGV4IC1vIGdpdC1tZXJnZS1vbmUtZmlsZSAtYSB8fAorCQlPQ1RPUFVTX0ZBSUxVUkU9MQorCQluZXh0PSQoZ2l0IHdyaXRlLXRyZWUgMj4vZGV2L251bGwpCisJZmkKKworCU1SQz0iJE1SQyAkU0hBMSIKKwlNUlQ9JG5leHQKK2RvbmUKKworZXhpdCAiJE9DVE9QVVNfRkFJTFVSRSIKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS1vbmUtZmlsZS5zaCBiL2dpdC1tZXJnZS1vbmUtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNmQ5ODUyCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LW1lcmdlLW9uZS1maWxlLnNoCkBAIC0wLDAgKzEsMTY3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSBMaW51cyBUb3J2YWxkcywgMjAwNQorIworIyBUaGlzIGlzIHRoZSBnaXQgcGVyLWZpbGUgbWVyZ2Ugc2NyaXB0LCBjYWxsZWQgd2l0aAorIworIyAgICQxIC0gb3JpZ2luYWwgZmlsZSBTSEExIChvciBlbXB0eSkKKyMgICAkMiAtIGZpbGUgaW4gYnJhbmNoMSBTSEExIChvciBlbXB0eSkKKyMgICAkMyAtIGZpbGUgaW4gYnJhbmNoMiBTSEExIChvciBlbXB0eSkKKyMgICAkNCAtIHBhdGhuYW1lIGluIHJlcG9zaXRvcnkKKyMgICAkNSAtIG9yaWdpbmFsIGZpbGUgbW9kZSAob3IgZW1wdHkpCisjICAgJDYgLSBmaWxlIGluIGJyYW5jaDEgbW9kZSAob3IgZW1wdHkpCisjICAgJDcgLSBmaWxlIGluIGJyYW5jaDIgbW9kZSAob3IgZW1wdHkpCisjCisjIEhhbmRsZSBzb21lIHRyaXZpYWwgY2FzZXMuLiBUaGUgX3JlYWxseV8gdHJpdmlhbCBjYXNlcyBoYXZlCisjIGJlZW4gaGFuZGxlZCBhbHJlYWR5IGJ5IGdpdCByZWFkLXRyZWUsIGJ1dCB0aGF0IG9uZSBkb2Vzbid0CisjIGRvIGFueSBtZXJnZXMgdGhhdCBtaWdodCBjaGFuZ2UgdGhlIHRyZWUgbGF5b3V0LgorCitVU0FHRT0nPG9yaWcgYmxvYj4gPG91ciBibG9iPiA8dGhlaXIgYmxvYj4gPHBhdGg+JworVVNBR0U9IiRVU0FHRSA8b3JpZyBtb2RlPiA8b3VyIG1vZGU+IDx0aGVpciBtb2RlPiIKK0xPTkdfVVNBR0U9InVzYWdlOiBnaXQgbWVyZ2Utb25lLWZpbGUgJFVTQUdFCisKK0Jsb2IgaWRzIGFuZCBtb2RlcyBzaG91bGQgYmUgZW1wdHkgZm9yIG1pc3NpbmcgZmlsZXMuIgorCitTVUJESVJFQ1RPUllfT0s9WWVzCisuIGdpdC1zaC1zZXR1cAorY2RfdG9fdG9wbGV2ZWwKK3JlcXVpcmVfd29ya190cmVlCisKK2lmIHRlc3QgJCMgIT0gNwordGhlbgorCWVjaG8gIiRMT05HX1VTQUdFIgorCWV4aXQgMQorZmkKKworY2FzZSAiJHsxOi0ufSR7MjotLn0kezM6LS59IiBpbgorIworIyBEZWxldGVkIGluIGJvdGggb3IgZGVsZXRlZCBpbiBvbmUgYW5kIHVuY2hhbmdlZCBpbiB0aGUgb3RoZXIKKyMKKyIkMS4uIiB8ICIkMS4kMSIgfCAiJDEkMS4iKQorCWlmIHsgdGVzdCAteiAiJDYiICYmIHRlc3QgIiQ1IiAhPSAiJDciOyB9IHx8CisJICAgeyB0ZXN0IC16ICIkNyIgJiYgdGVzdCAiJDUiICE9ICIkNiI7IH0KKwl0aGVuCisJCWVjaG8gIkVSUk9SOiBGaWxlICQ0IGRlbGV0ZWQgb24gb25lIGJyYW5jaCBidXQgaGFkIGl0cyIgPiYyCisJCWVjaG8gIkVSUk9SOiBwZXJtaXNzaW9ucyBjaGFuZ2VkIG9uIHRoZSBvdGhlci4iID4mMgorCQlleGl0IDEKKwlmaQorCisJaWYgdGVzdCAtbiAiJDIiCisJdGhlbgorCQllY2hvICJSZW1vdmluZyAkNCIKKwllbHNlCisJCSMgcmVhZC10cmVlIGNoZWNrZWQgdGhhdCBpbmRleCBtYXRjaGVzIEhFQUQgYWxyZWFkeSwKKwkJIyBzbyB3ZSBrbm93IHdlIGRvIG5vdCBoYXZlIHRoaXMgcGF0aCB0cmFja2VkLgorCQkjIHRoZXJlIG1heSBiZSBhbiB1bnJlbGF0ZWQgd29ya2luZyB0cmVlIGZpbGUgaGVyZSwKKwkJIyB3aGljaCB3ZSBzaG91bGQganVzdCBsZWF2ZSB1bm1vbGVzdGVkLiAgTWFrZSBzdXJlCisJCSMgd2UgZG8gbm90IGhhdmUgaXQgaW4gdGhlIGluZGV4LCB0aG91Z2guCisJCWV4ZWMgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAtLSAiJDQiCisJZmkKKwlpZiB0ZXN0IC1mICIkNCIKKwl0aGVuCisJCXJtIC1mIC0tICIkNCIgJiYKKwkJcm1kaXIgLXAgIiQoZXhwciAieiQ0IiA6ICd6XCguKlwpLycpIiAyPi9kZXYvbnVsbCB8fCA6CisJZmkgJiYKKwkJZXhlYyBnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tICIkNCIKKwk7OworCisjCisjIEFkZGVkIGluIG9uZS4KKyMKKyIuJDIuIikKKwkjIHRoZSBvdGhlciBzaWRlIGRpZCBub3QgYWRkIGFuZCB3ZSBhZGRlZCBzbyB0aGVyZSBpcyBub3RoaW5nCisJIyB0byBiZSBkb25lLCBleGNlcHQgbWFraW5nIHRoZSBwYXRoIG1lcmdlZC4KKwlleGVjIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gIiQ2IiAiJDIiICIkNCIKKwk7OworIi4uJDMiKQorCWVjaG8gIkFkZGluZyAkNCIKKwlpZiB0ZXN0IC1mICIkNCIKKwl0aGVuCisJCWVjaG8gIkVSUk9SOiB1bnRyYWNrZWQgJDQgaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIG1lcmdlLiIgPiYyCisJCWV4aXQgMQorCWZpCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAiJDciICIkMyIgIiQ0IiAmJgorCQlleGVjIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtLSAiJDQiCisJOzsKKworIworIyBBZGRlZCBpbiBib3RoLCBpZGVudGljYWxseSAoY2hlY2sgZm9yIHNhbWUgcGVybWlzc2lvbnMpLgorIworIi4kMyQyIikKKwlpZiB0ZXN0ICIkNiIgIT0gIiQ3IgorCXRoZW4KKwkJZWNobyAiRVJST1I6IEZpbGUgJDQgYWRkZWQgaWRlbnRpY2FsbHkgaW4gYm90aCBicmFuY2hlcywiID4mMgorCQllY2hvICJFUlJPUjogYnV0IHBlcm1pc3Npb25zIGNvbmZsaWN0ICQ2LT4kNy4iID4mMgorCQlleGl0IDEKKwlmaQorCWVjaG8gIkFkZGluZyAkNCIKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvICIkNiIgIiQyIiAiJDQiICYmCisJCWV4ZWMgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC0tICIkNCIKKwk7OworCisjCisjIE1vZGlmaWVkIGluIGJvdGgsIGJ1dCBkaWZmZXJlbnRseS4KKyMKKyIkMSQyJDMiIHwgIi4kMiQzIikKKworCWNhc2UgIiwkNiwkNywiIGluCisJKiwxMjAwMDAsKikKKwkJZWNobyAiRVJST1I6ICQ0OiBOb3QgbWVyZ2luZyBzeW1ib2xpYyBsaW5rIGNoYW5nZXMuIiA+JjIKKwkJZXhpdCAxCisJCTs7CisJKiwxNjAwMDAsKikKKwkJZWNobyAiRVJST1I6ICQ0OiBOb3QgbWVyZ2luZyBjb25mbGljdGluZyBzdWJtb2R1bGUgY2hhbmdlcy4iID4mMgorCQlleGl0IDEKKwkJOzsKKwllc2FjCisKKwlzcmMxPSQoZ2l0IHVucGFjay1maWxlICQyKQorCXNyYzI9JChnaXQgdW5wYWNrLWZpbGUgJDMpCisJY2FzZSAiJDEiIGluCisJJycpCisJCWVjaG8gIkFkZGVkICQ0IGluIGJvdGgsIGJ1dCBkaWZmZXJlbnRseS4iCisJCW9yaWc9JChnaXQgdW5wYWNrLWZpbGUgJChnaXQgaGFzaC1vYmplY3QgL2Rldi9udWxsKSkKKwkJOzsKKwkqKQorCQllY2hvICJBdXRvLW1lcmdpbmcgJDQiCisJCW9yaWc9JChnaXQgdW5wYWNrLWZpbGUgJDEpCisJCTs7CisJZXNhYworCisJZ2l0IG1lcmdlLWZpbGUgIiRzcmMxIiAiJG9yaWciICIkc3JjMiIKKwlyZXQ9JD8KKwltc2c9CisJaWYgdGVzdCAkcmV0ICE9IDAgfHwgdGVzdCAteiAiJDEiCisJdGhlbgorCQltc2c9J2NvbnRlbnQgY29uZmxpY3QnCisJCXJldD0xCisJZmkKKworCSMgQ3JlYXRlIHRoZSB3b3JraW5nIHRyZWUgZmlsZSwgdXNpbmcgIm91ciB0cmVlIiB2ZXJzaW9uIGZyb20gdGhlCisJIyBpbmRleCwgYW5kIHRoZW4gc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MiAtLSAiJDQiICYmIGNhdCAiJHNyYzEiID4iJDQiIHx8IGV4aXQgMQorCXJtIC1mIC0tICIkb3JpZyIgIiRzcmMxIiAiJHNyYzIiCisKKwlpZiB0ZXN0ICIkNiIgIT0gIiQ3IgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJG1zZyIKKwkJdGhlbgorCQkJbXNnPSIkbXNnLCAiCisJCWZpCisJCW1zZz0iJHttc2d9cGVybWlzc2lvbnMgY29uZmxpY3Q6ICQ1LT4kNiwkNyIKKwkJcmV0PTEKKwlmaQorCisJaWYgdGVzdCAkcmV0ICE9IDAKKwl0aGVuCisJCWVjaG8gIkVSUk9SOiAkbXNnIGluICQ0IiA+JjIKKwkJZXhpdCAxCisJZmkKKwlleGVjIGdpdCB1cGRhdGUtaW5kZXggLS0gIiQ0IgorCTs7CisKKyopCisJZWNobyAiRVJST1I6ICQ0OiBOb3QgaGFuZGxpbmcgY2FzZSAkMSAtPiAkMiAtPiAkMyIgPiYyCisJOzsKK2VzYWMKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLXJlc29sdmUuc2ggYi9naXQtbWVyZ2UtcmVzb2x2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDNmZTdiCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LW1lcmdlLXJlc29sdmUuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgUmVzb2x2ZSB0d28gdHJlZXMsIHVzaW5nIGVuaGFuY2VkIG11bHRpLWJhc2UgcmVhZC10cmVlLgorCisjIFRoZSBmaXJzdCBwYXJhbWV0ZXJzIHVwIHRvIC0tIGFyZSBtZXJnZSBiYXNlczsgdGhlIHJlc3QgYXJlIGhlYWRzLgorYmFzZXM9IGhlYWQ9IHJlbW90ZXM9IHNlcF9zZWVuPQorZm9yIGFyZworZG8KKwljYXNlICIsJHNlcF9zZWVuLCRoZWFkLCRhcmcsIiBpbgorCSosLS0sKQorCQlzZXBfc2Vlbj15ZXMKKwkJOzsKKwkseWVzLCwqKQorCQloZWFkPSRhcmcKKwkJOzsKKwkseWVzLCopCisJCXJlbW90ZXM9IiRyZW1vdGVzJGFyZyAiCisJCTs7CisJKikKKwkJYmFzZXM9IiRiYXNlcyRhcmcgIgorCQk7OworCWVzYWMKK2RvbmUKKworIyBHaXZlIHVwIGlmIHdlIGFyZSBnaXZlbiB0d28gb3IgbW9yZSByZW1vdGVzIC0tIG5vdCBoYW5kbGluZyBvY3RvcHVzLgorY2FzZSAiJHJlbW90ZXMiIGluCis/KicgJz8qKQorCWV4aXQgMiA7OworZXNhYworCisjIEdpdmUgdXAgaWYgdGhpcyBpcyBhIGJhc2VsZXNzIG1lcmdlLgoraWYgdGVzdCAnJyA9ICIkYmFzZXMiCit0aGVuCisJZXhpdCAyCitmaQorCitnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorZ2l0IHJlYWQtdHJlZSAtdSAtbSAtLWFnZ3Jlc3NpdmUgJGJhc2VzICRoZWFkICRyZW1vdGVzIHx8IGV4aXQgMgorZWNobyAiVHJ5aW5nIHNpbXBsZSBtZXJnZS4iCitpZiByZXN1bHRfdHJlZT0kKGdpdCB3cml0ZS10cmVlIDI+L2Rldi9udWxsKQordGhlbgorCWV4aXQgMAorZWxzZQorCWVjaG8gIlNpbXBsZSBtZXJnZSBmYWlsZWQsIHRyeWluZyBBdXRvbWF0aWMgbWVyZ2UuIgorCWlmIGdpdCBtZXJnZS1pbmRleCAtbyBnaXQtbWVyZ2Utb25lLWZpbGUgLWEKKwl0aGVuCisJCWV4aXQgMAorCWVsc2UKKwkJZXhpdCAxCisJZmkKK2ZpCmRpZmYgLS1naXQgYS9naXQtbWVyZ2V0b29sLS1saWIuc2ggYi9naXQtbWVyZ2V0b29sLS1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0YTVhYwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1tZXJnZXRvb2wtLWxpYi5zaApAQCAtMCwwICsxLDQ2MyBAQAorIyBnaXQtbWVyZ2V0b29sLS1saWIgaXMgYSBzaGVsbCBsaWJyYXJ5IGZvciBjb21tb24gbWVyZ2UgdG9vbCBmdW5jdGlvbnMKKworOiAke01FUkdFX1RPT0xTX0RJUj0kKGdpdCAtLWV4ZWMtcGF0aCkvbWVyZ2V0b29sc30KKworSUZTPScKKycKKworbW9kZV9vayAoKSB7CisJaWYgZGlmZl9tb2RlCisJdGhlbgorCQljYW5fZGlmZgorCWVsaWYgbWVyZ2VfbW9kZQorCXRoZW4KKwkJY2FuX21lcmdlCisJZWxzZQorCQlmYWxzZQorCWZpCit9CisKK2lzX2F2YWlsYWJsZSAoKSB7CisJbWVyZ2VfdG9vbF9wYXRoPSQodHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAiJDEiKSAmJgorCXR5cGUgIiRtZXJnZV90b29sX3BhdGgiID4vZGV2L251bGwgMj4mMQorfQorCitsaXN0X2NvbmZpZ190b29scyAoKSB7CisJc2VjdGlvbj0kMQorCWxpbmVfcHJlZml4PSR7MjotfQorCisJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgJHNlY3Rpb24nXC4uKlwuY21kJyB8CisJd2hpbGUgcmVhZCAtciBrZXkgdmFsdWUKKwlkbworCQl0b29sbmFtZT0ke2tleSMkc2VjdGlvbi59CisJCXRvb2xuYW1lPSR7dG9vbG5hbWUlLmNtZH0KKworCQlwcmludGYgIiVzJXNcbiIgIiRsaW5lX3ByZWZpeCIgIiR0b29sbmFtZSIKKwlkb25lCit9CisKK3Nob3dfdG9vbF9uYW1lcyAoKSB7CisJY29uZGl0aW9uPSR7MTotdHJ1ZX0gcGVyX2xpbmVfcHJlZml4PSR7MjotfSBwcmVhbWJsZT0kezM6LX0KKwlub3RfZm91bmRfbXNnPSR7NDotfQorCWV4dHJhX2NvbnRlbnQ9JHs1Oi19CisKKwlzaG93bl9hbnk9CisJKCBjZCAiJE1FUkdFX1RPT0xTX0RJUiIgJiYgbHMgKSB8IHsKKwkJd2hpbGUgcmVhZCB0b29sbmFtZQorCQlkbworCQkJaWYgc2V0dXBfdG9vbCAiJHRvb2xuYW1lIiAyPi9kZXYvbnVsbCAmJgorCQkJCShldmFsICIkY29uZGl0aW9uIiAiJHRvb2xuYW1lIikKKwkJCXRoZW4KKwkJCQlpZiB0ZXN0IC1uICIkcHJlYW1ibGUiCisJCQkJdGhlbgorCQkJCQlwcmludGYgIiVzXG4iICIkcHJlYW1ibGUiCisJCQkJCXByZWFtYmxlPQorCQkJCWZpCisJCQkJc2hvd25fYW55PXllcworCQkJCXByaW50ZiAiJXMlc1xuIiAiJHBlcl9saW5lX3ByZWZpeCIgIiR0b29sbmFtZSIKKwkJCWZpCisJCWRvbmUKKworCQlpZiB0ZXN0IC1uICIkZXh0cmFfY29udGVudCIKKwkJdGhlbgorCQkJaWYgdGVzdCAtbiAiJHByZWFtYmxlIgorCQkJdGhlbgorCQkJCSMgTm90ZTogbm8gJ1xuJyBoZXJlIHNpbmNlIHdlIGRvbid0IHdhbnQgYQorCQkJCSMgYmxhbmsgbGluZSBpZiB0aGVyZSBpcyBubyBpbml0aWFsIGNvbnRlbnQuCisJCQkJcHJpbnRmICIlcyIgIiRwcmVhbWJsZSIKKwkJCQlwcmVhbWJsZT0KKwkJCWZpCisJCQlzaG93bl9hbnk9eWVzCisJCQlwcmludGYgIlxuJXNcbiIgIiRleHRyYV9jb250ZW50IgorCQlmaQorCisJCWlmIHRlc3QgLW4gIiRwcmVhbWJsZSIgJiYgdGVzdCAtbiAiJG5vdF9mb3VuZF9tc2ciCisJCXRoZW4KKwkJCXByaW50ZiAiJXNcbiIgIiRub3RfZm91bmRfbXNnIgorCQlmaQorCisJCXRlc3QgLW4gIiRzaG93bl9hbnkiCisJfQorfQorCitkaWZmX21vZGUgKCkgeworCXRlc3QgIiRUT09MX01PREUiID0gZGlmZgorfQorCittZXJnZV9tb2RlICgpIHsKKwl0ZXN0ICIkVE9PTF9NT0RFIiA9IG1lcmdlCit9CisKK2d1aV9tb2RlICgpIHsKKwl0ZXN0ICIkR0lUX01FUkdFVE9PTF9HVUkiID0gdHJ1ZQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoICgpIHsKKwllY2hvICIkMSIKK30KKworY2hlY2tfdW5jaGFuZ2VkICgpIHsKKwlpZiB0ZXN0ICIkTUVSR0VEIiAtbnQgIiRCQUNLVVAiCisJdGhlbgorCQlyZXR1cm4gMAorCWVsc2UKKwkJd2hpbGUgdHJ1ZQorCQlkbworCQkJZWNobyAiJE1FUkdFRCBzZWVtcyB1bmNoYW5nZWQuIgorCQkJcHJpbnRmICJXYXMgdGhlIG1lcmdlIHN1Y2Nlc3NmdWwgW3kvbl0/ICIKKwkJCXJlYWQgYW5zd2VyIHx8IHJldHVybiAxCisJCQljYXNlICIkYW5zd2VyIiBpbgorCQkJeSp8WSopIHJldHVybiAwIDs7CisJCQluKnxOKikgcmV0dXJuIDEgOzsKKwkJCWVzYWMKKwkJZG9uZQorCWZpCit9CisKK3ZhbGlkX3Rvb2wgKCkgeworCXNldHVwX3Rvb2wgIiQxIiAmJiByZXR1cm4gMAorCWNtZD0kKGdldF9tZXJnZV90b29sX2NtZCAiJDEiKQorCXRlc3QgLW4gIiRjbWQiCit9CisKK3NldHVwX3VzZXJfdG9vbCAoKSB7CisJbWVyZ2VfdG9vbF9jbWQ9JChnZXRfbWVyZ2VfdG9vbF9jbWQgIiR0b29sIikKKwl0ZXN0IC1uICIkbWVyZ2VfdG9vbF9jbWQiIHx8IHJldHVybiAxCisKKwlkaWZmX2NtZCAoKSB7CisJCSggZXZhbCAkbWVyZ2VfdG9vbF9jbWQgKQorCX0KKworCW1lcmdlX2NtZCAoKSB7CisJCSggZXZhbCAkbWVyZ2VfdG9vbF9jbWQgKQorCX0KK30KKworc2V0dXBfdG9vbCAoKSB7CisJdG9vbD0iJDEiCisKKwkjIEZhbGxiYWNrIGRlZmluaXRpb25zLCB0byBiZSBvdmVycmlkZGVuIGJ5IHRvb2xzLgorCWNhbl9tZXJnZSAoKSB7CisJCXJldHVybiAwCisJfQorCisJY2FuX2RpZmYgKCkgeworCQlyZXR1cm4gMAorCX0KKworCWRpZmZfY21kICgpIHsKKwkJcmV0dXJuIDEKKwl9CisKKwltZXJnZV9jbWQgKCkgeworCQlyZXR1cm4gMQorCX0KKworCXRyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggKCkgeworCQllY2hvICIkMSIKKwl9CisKKwkjIE1vc3QgdG9vbHMnIGV4aXQgY29kZXMgY2Fubm90IGJlIHRydXN0ZWQsIHNvIEJ5IGRlZmF1bHQgd2UgaWdub3JlCisJIyB0aGVpciBleGl0IGNvZGUgYW5kIGNoZWNrIHRoZSBtZXJnZWQgZmlsZSdzIG1vZGlmaWNhdGlvbiB0aW1lIGluCisJIyBjaGVja191bmNoYW5nZWQoKSB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIG1lcmdlIHdhcworCSMgc3VjY2Vzc2Z1bC4gIFRoZSByZXR1cm4gdmFsdWUgZnJvbSBydW5fbWVyZ2VfY21kLCBieSBkZWZhdWx0LCBpcworCSMgZGV0ZXJtaW5lZCBieSBjaGVja191bmNoYW5nZWQoKS4KKwkjCisJIyBXaGVuIGEgdG9vbCdzIGV4aXQgY29kZSBjYW4gYmUgdHJ1c3RlZCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgZnJvbQorCSMgcnVuX21lcmdlX2NtZCBpcyBzaW1wbHkgdGhlIHRvb2wncyBleGl0IGNvZGUsIGFuZCBjaGVja191bmNoYW5nZWQoKQorCSMgaXMgbm90IGNhbGxlZC4KKwkjCisJIyBUaGUgcmV0dXJuIHZhbHVlIG9mIGV4aXRfY29kZV90cnVzdGFibGUoKSB0ZWxscyB1cyB3aGV0aGVyIG9yIG5vdCB3ZQorCSMgY2FuIHRydXN0IHRoZSB0b29sJ3MgZXhpdCBjb2RlLgorCSMKKwkjIFVzZXItZGVmaW5lZCBhbmQgYnVpbHQtaW4gdG9vbHMgZGVmYXVsdCB0byBmYWxzZS4KKwkjIEJ1aWx0LWluIHRvb2xzIGFkdmVydGlzZSB0aGF0IHRoZWlyIGV4aXQgY29kZSBpcyB0cnVzdGFibGUgYnkKKwkjIHJlZGVmaW5pbmcgZXhpdF9jb2RlX3RydXN0YWJsZSgpIHRvIHRydWUuCisKKwlleGl0X2NvZGVfdHJ1c3RhYmxlICgpIHsKKwkJZmFsc2UKKwl9CisKKworCWlmICEgdGVzdCAtZiAiJE1FUkdFX1RPT0xTX0RJUi8kdG9vbCIKKwl0aGVuCisJCXNldHVwX3VzZXJfdG9vbAorCQlyZXR1cm4gJD8KKwlmaQorCisJIyBMb2FkIHRoZSByZWRlZmluZWQgZnVuY3Rpb25zCisJLiAiJE1FUkdFX1RPT0xTX0RJUi8kdG9vbCIKKwkjIE5vdyBsZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZCBmb3IgdGhlIHRvb2wuICBJZgorCSMgdGhleSBoYXZlIG5vdCBkb25lIHNvIHRoZW4gdGhpcyB3aWxsIHJldHVybiAxIHdoaWNoIHdlIGlnbm9yZS4KKwlzZXR1cF91c2VyX3Rvb2wKKworCWlmIG1lcmdlX21vZGUgJiYgISBjYW5fbWVyZ2UKKwl0aGVuCisJCWVjaG8gImVycm9yOiAnJHRvb2wnIGNhbiBub3QgYmUgdXNlZCB0byByZXNvbHZlIG1lcmdlcyIgPiYyCisJCXJldHVybiAxCisJZWxpZiBkaWZmX21vZGUgJiYgISBjYW5fZGlmZgorCXRoZW4KKwkJZWNobyAiZXJyb3I6ICckdG9vbCcgY2FuIG9ubHkgYmUgdXNlZCB0byByZXNvbHZlIG1lcmdlcyIgPiYyCisJCXJldHVybiAxCisJZmkKKwlyZXR1cm4gMAorfQorCitnZXRfbWVyZ2VfdG9vbF9jbWQgKCkgeworCW1lcmdlX3Rvb2w9IiQxIgorCWlmIGRpZmZfbW9kZQorCXRoZW4KKwkJZ2l0IGNvbmZpZyAiZGlmZnRvb2wuJG1lcmdlX3Rvb2wuY21kIiB8fAorCQlnaXQgY29uZmlnICJtZXJnZXRvb2wuJG1lcmdlX3Rvb2wuY21kIgorCWVsc2UKKwkJZ2l0IGNvbmZpZyAibWVyZ2V0b29sLiRtZXJnZV90b29sLmNtZCIKKwlmaQorfQorCit0cnVzdF9leGl0X2NvZGUgKCkgeworCWlmIGdpdCBjb25maWcgLS1ib29sICJtZXJnZXRvb2wuJDEudHJ1c3RFeGl0Q29kZSIKKwl0aGVuCisJCTo7ICMgT0sKKwllbGlmIGV4aXRfY29kZV90cnVzdGFibGUKKwl0aGVuCisJCWVjaG8gdHJ1ZQorCWVsc2UKKwkJZWNobyBmYWxzZQorCWZpCit9CisKKworIyBFbnRyeSBwb2ludCBmb3IgcnVubmluZyB0b29scworcnVuX21lcmdlX3Rvb2wgKCkgeworCSMgSWYgR0lUX1BSRUZJWCBpcyBlbXB0eSB0aGVuIHdlIGNhbm5vdCB1c2UgaXQgaW4gdG9vbHMKKwkjIHRoYXQgZXhwZWN0IHRvIGJlIGFibGUgdG8gY2hkaXIoKSB0byBpdHMgdmFsdWUuCisJR0lUX1BSRUZJWD0ke0dJVF9QUkVGSVg6LS59CisJZXhwb3J0IEdJVF9QUkVGSVgKKworCW1lcmdlX3Rvb2xfcGF0aD0kKGdldF9tZXJnZV90b29sX3BhdGggIiQxIikgfHwgZXhpdAorCWJhc2VfcHJlc2VudD0iJDIiCisKKwkjIEJyaW5nIHRvb2wtc3BlY2lmaWMgZnVuY3Rpb25zIGludG8gc2NvcGUKKwlzZXR1cF90b29sICIkMSIgfHwgcmV0dXJuIDEKKworCWlmIG1lcmdlX21vZGUKKwl0aGVuCisJCXJ1bl9tZXJnZV9jbWQgIiQxIgorCWVsc2UKKwkJcnVuX2RpZmZfY21kICIkMSIKKwlmaQorfQorCisjIFJ1biBhIGVpdGhlciBhIGNvbmZpZ3VyZWQgb3IgYnVpbHQtaW4gZGlmZiB0b29sCitydW5fZGlmZl9jbWQgKCkgeworCWRpZmZfY21kICIkMSIKK30KKworIyBSdW4gYSBlaXRoZXIgYSBjb25maWd1cmVkIG9yIGJ1aWx0LWluIG1lcmdlIHRvb2wKK3J1bl9tZXJnZV9jbWQgKCkgeworCW1lcmdldG9vbF90cnVzdF9leGl0X2NvZGU9JCh0cnVzdF9leGl0X2NvZGUgIiQxIikKKwlpZiB0ZXN0ICIkbWVyZ2V0b29sX3RydXN0X2V4aXRfY29kZSIgPSAidHJ1ZSIKKwl0aGVuCisJCW1lcmdlX2NtZCAiJDEiCisJZWxzZQorCQl0b3VjaCAiJEJBQ0tVUCIKKwkJbWVyZ2VfY21kICIkMSIKKwkJY2hlY2tfdW5jaGFuZ2VkCisJZmkKK30KKworbGlzdF9tZXJnZV90b29sX2NhbmRpZGF0ZXMgKCkgeworCWlmIG1lcmdlX21vZGUKKwl0aGVuCisJCXRvb2xzPSJ0b3J0b2lzZW1lcmdlIgorCWVsc2UKKwkJdG9vbHM9ImtvbXBhcmUiCisJZmkKKwlpZiB0ZXN0IC1uICIkRElTUExBWSIKKwl0aGVuCisJCWlmIHRlc3QgLW4gIiRHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiCisJCXRoZW4KKwkJCXRvb2xzPSJtZWxkIG9wZW5kaWZmIGtkaWZmMyB0a2RpZmYgeHhkaWZmICR0b29scyIKKwkJZWxzZQorCQkJdG9vbHM9Im9wZW5kaWZmIGtkaWZmMyB0a2RpZmYgeHhkaWZmIG1lbGQgJHRvb2xzIgorCQlmaQorCQl0b29scz0iJHRvb2xzIGd2aW1kaWZmIGRpZmZ1c2UgZGlmZm1lcmdlIGVjbWVyZ2UiCisJCXRvb2xzPSIkdG9vbHMgcDRtZXJnZSBhcmF4aXMgYmMgY29kZWNvbXBhcmUiCisJCXRvb2xzPSIkdG9vbHMgc21lcmdlIgorCWZpCisJY2FzZSAiJHtWSVNVQUw6LSRFRElUT1J9IiBpbgorCSp2aW0qKQorCQl0b29scz0iJHRvb2xzIHZpbWRpZmYgZW1lcmdlIgorCQk7OworCSopCisJCXRvb2xzPSIkdG9vbHMgZW1lcmdlIHZpbWRpZmYiCisJCTs7CisJZXNhYworfQorCitzaG93X3Rvb2xfaGVscCAoKSB7CisJdG9vbF9vcHQ9IidnaXQgJHtUT09MX01PREV9dG9vbCAtLXRvb2w9PHRvb2w+JyIKKworCXRhYj0nCScKKwlMRj0nCisnCisJYW55X3Nob3duPW5vCisKKwljbWRfbmFtZT0ke1RPT0xfTU9ERX10b29sCisJY29uZmlnX3Rvb2xzPSQoeworCQlkaWZmX21vZGUgJiYgbGlzdF9jb25maWdfdG9vbHMgZGlmZnRvb2wgIiR0YWIkdGFiIgorCQlsaXN0X2NvbmZpZ190b29scyBtZXJnZXRvb2wgIiR0YWIkdGFiIgorCX0gfCBzb3J0KQorCWV4dHJhX2NvbnRlbnQ9CisJaWYgdGVzdCAtbiAiJGNvbmZpZ190b29scyIKKwl0aGVuCisJCWV4dHJhX2NvbnRlbnQ9IiR7dGFifXVzZXItZGVmaW5lZDoke0xGfSRjb25maWdfdG9vbHMiCisJZmkKKworCXNob3dfdG9vbF9uYW1lcyAnbW9kZV9vayAmJiBpc19hdmFpbGFibGUnICIkdGFiJHRhYiIgXAorCQkiJHRvb2xfb3B0IG1heSBiZSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6IiBcCisJCSJObyBzdWl0YWJsZSB0b29sIGZvciAnZ2l0ICRjbWRfbmFtZSAtLXRvb2w9PHRvb2w+JyBmb3VuZC4iIFwKKwkJIiRleHRyYV9jb250ZW50IiAmJgorCQlhbnlfc2hvd249eWVzCisKKwlzaG93X3Rvb2xfbmFtZXMgJ21vZGVfb2sgJiYgISBpc19hdmFpbGFibGUnICIkdGFiJHRhYiIgXAorCQkiJHtMRn1UaGUgZm9sbG93aW5nIHRvb2xzIGFyZSB2YWxpZCwgYnV0IG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlOiIgJiYKKwkJYW55X3Nob3duPXllcworCisJaWYgdGVzdCAiJGFueV9zaG93biIgPSB5ZXMKKwl0aGVuCisJCWVjaG8KKwkJZWNobyAiU29tZSBvZiB0aGUgdG9vbHMgbGlzdGVkIGFib3ZlIG9ubHkgd29yayBpbiBhIHdpbmRvd2VkIgorCQllY2hvICJlbnZpcm9ubWVudC4gSWYgcnVuIGluIGEgdGVybWluYWwtb25seSBzZXNzaW9uLCB0aGV5IHdpbGwgZmFpbC4iCisJZmkKKwlleGl0IDAKK30KKworZ3Vlc3NfbWVyZ2VfdG9vbCAoKSB7CisJbGlzdF9tZXJnZV90b29sX2NhbmRpZGF0ZXMKKwljYXQgPiYyIDw8LUVPRgorCisJVGhpcyBtZXNzYWdlIGlzIGRpc3BsYXllZCBiZWNhdXNlICckVE9PTF9NT0RFLnRvb2wnIGlzIG5vdCBjb25maWd1cmVkLgorCVNlZSAnZ2l0ICR7VE9PTF9NT0RFfXRvb2wgLS10b29sLWhlbHAnIG9yICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMuCisJJ2dpdCAke1RPT0xfTU9ERX10b29sJyB3aWxsIG5vdyBhdHRlbXB0IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0b29sczoKKwkkdG9vbHMKKwlFT0YKKworCSMgTG9vcCBvdmVyIGVhY2ggY2FuZGlkYXRlIGFuZCBzdG9wIHdoZW4gYSB2YWxpZCBtZXJnZSB0b29sIGlzIGZvdW5kLgorCUlGUz0nICcKKwlmb3IgdG9vbCBpbiAkdG9vbHMKKwlkbworCQlpc19hdmFpbGFibGUgIiR0b29sIiAmJiBlY2hvICIkdG9vbCIgJiYgcmV0dXJuIDAKKwlkb25lCisKKwllY2hvID4mMiAiTm8ga25vd24gJHtUT09MX01PREV9IHRvb2wgaXMgYXZhaWxhYmxlLiIKKwlyZXR1cm4gMQorfQorCitnZXRfY29uZmlndXJlZF9tZXJnZV90b29sICgpIHsKKwlrZXlzPQorCWlmIGRpZmZfbW9kZQorCXRoZW4KKwkJaWYgZ3VpX21vZGUKKwkJdGhlbgorCQkJa2V5cz0iZGlmZi5ndWl0b29sIG1lcmdlLmd1aXRvb2wgZGlmZi50b29sIG1lcmdlLnRvb2wiCisJCWVsc2UKKwkJCWtleXM9ImRpZmYudG9vbCBtZXJnZS50b29sIgorCQlmaQorCWVsc2UKKwkJaWYgZ3VpX21vZGUKKwkJdGhlbgorCQkJa2V5cz0ibWVyZ2UuZ3VpdG9vbCBtZXJnZS50b29sIgorCQllbHNlCisJCQlrZXlzPSJtZXJnZS50b29sIgorCQlmaQorCWZpCisKKwltZXJnZV90b29sPSQoCisJCUlGUz0nICcKKwkJZm9yIGtleSBpbiAka2V5cworCQlkbworCQkJc2VsZWN0ZWQ9JChnaXQgY29uZmlnICRrZXkpCisJCQlpZiB0ZXN0IC1uICIkc2VsZWN0ZWQiCisJCQl0aGVuCisJCQkJZWNobyAiJHNlbGVjdGVkIgorCQkJCXJldHVybgorCQkJZmkKKwkJZG9uZSkKKworCWlmIHRlc3QgLW4gIiRtZXJnZV90b29sIiAmJiAhIHZhbGlkX3Rvb2wgIiRtZXJnZV90b29sIgorCXRoZW4KKwkJZWNobyA+JjIgImdpdCBjb25maWcgb3B0aW9uICRUT09MX01PREUuJHtndWlfcHJlZml4fXRvb2wgc2V0IHRvIHVua25vd24gdG9vbDogJG1lcmdlX3Rvb2wiCisJCWVjaG8gPiYyICJSZXNldHRpbmcgdG8gZGVmYXVsdC4uLiIKKwkJcmV0dXJuIDEKKwlmaQorCWVjaG8gIiRtZXJnZV90b29sIgorfQorCitnZXRfbWVyZ2VfdG9vbF9wYXRoICgpIHsKKwkjIEEgbWVyZ2UgdG9vbCBoYXMgYmVlbiBzZXQsIHNvIHZlcmlmeSB0aGF0IGl0J3MgdmFsaWQuCisJbWVyZ2VfdG9vbD0iJDEiCisJaWYgISB2YWxpZF90b29sICIkbWVyZ2VfdG9vbCIKKwl0aGVuCisJCWVjaG8gPiYyICJVbmtub3duIG1lcmdlIHRvb2wgJG1lcmdlX3Rvb2wiCisJCWV4aXQgMQorCWZpCisJaWYgZGlmZl9tb2RlCisJdGhlbgorCQltZXJnZV90b29sX3BhdGg9JChnaXQgY29uZmlnIGRpZmZ0b29sLiIkbWVyZ2VfdG9vbCIucGF0aCB8fAorCQkJCSAgZ2l0IGNvbmZpZyBtZXJnZXRvb2wuIiRtZXJnZV90b29sIi5wYXRoKQorCWVsc2UKKwkJbWVyZ2VfdG9vbF9wYXRoPSQoZ2l0IGNvbmZpZyBtZXJnZXRvb2wuIiRtZXJnZV90b29sIi5wYXRoKQorCWZpCisJaWYgdGVzdCAteiAiJG1lcmdlX3Rvb2xfcGF0aCIKKwl0aGVuCisJCW1lcmdlX3Rvb2xfcGF0aD0kKHRyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGggIiRtZXJnZV90b29sIikKKwlmaQorCWlmIHRlc3QgLXogIiQoZ2V0X21lcmdlX3Rvb2xfY21kICIkbWVyZ2VfdG9vbCIpIiAmJgorCQkhIHR5cGUgIiRtZXJnZV90b29sX3BhdGgiID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyA+JjIgIlRoZSAkVE9PTF9NT0RFIHRvb2wgJG1lcmdlX3Rvb2wgaXMgbm90IGF2YWlsYWJsZSBhcyJcCisJCQkgIickbWVyZ2VfdG9vbF9wYXRoJyIKKwkJZXhpdCAxCisJZmkKKwllY2hvICIkbWVyZ2VfdG9vbF9wYXRoIgorfQorCitnZXRfbWVyZ2VfdG9vbCAoKSB7CisJaXNfZ3Vlc3NlZD1mYWxzZQorCSMgQ2hlY2sgaWYgYSBtZXJnZSB0b29sIGhhcyBiZWVuIGNvbmZpZ3VyZWQKKwltZXJnZV90b29sPSQoZ2V0X2NvbmZpZ3VyZWRfbWVyZ2VfdG9vbCkKKwkjIFRyeSB0byBndWVzcyBhbiBhcHByb3ByaWF0ZSBtZXJnZSB0b29sIGlmIG5vIHRvb2wgaGFzIGJlZW4gc2V0LgorCWlmIHRlc3QgLXogIiRtZXJnZV90b29sIgorCXRoZW4KKwkJbWVyZ2VfdG9vbD0kKGd1ZXNzX21lcmdlX3Rvb2wpIHx8IGV4aXQKKwkJaXNfZ3Vlc3NlZD10cnVlCisJZmkKKwllY2hvICIkbWVyZ2VfdG9vbCIKKwl0ZXN0ICIkaXNfZ3Vlc3NlZCIgPSBmYWxzZQorfQorCittZXJnZXRvb2xfZmluZF93aW4zMl9jbWQgKCkgeworCWV4ZWN1dGFibGU9JDEKKwlzdWJfZGlyZWN0b3J5PSQyCisKKwkjIFVzZSAkZXhlY3V0YWJsZSBpZiBpdCBleGlzdHMgaW4gJFBBVEgKKwlpZiB0eXBlIC1wICIkZXhlY3V0YWJsZSIgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQlwcmludGYgJyVzJyAiJGV4ZWN1dGFibGUiCisJCXJldHVybgorCWZpCisKKwkjIExvb2sgZm9yIGV4ZWN1dGFibGUgaW4gdGhlIHR5cGljYWwgbG9jYXRpb25zCisJZm9yIGRpcmVjdG9yeSBpbiAkKGVudiB8IGdyZXAgLUVpICdeUFJPR1JBTShGSUxFUyhcKFg4NlwpKT98VzY0MzIpPScgfAorCQljdXQgLWQgJz0nIC1mIDItIHwgc29ydCAtdSkKKwlkbworCQlpZiB0ZXN0IC1uICIkZGlyZWN0b3J5IiAmJiB0ZXN0IC14ICIkZGlyZWN0b3J5LyRzdWJfZGlyZWN0b3J5LyRleGVjdXRhYmxlIgorCQl0aGVuCisJCQlwcmludGYgJyVzJyAiJGRpcmVjdG9yeS8kc3ViX2RpcmVjdG9yeS8kZXhlY3V0YWJsZSIKKwkJCXJldHVybgorCQlmaQorCWRvbmUKKworCXByaW50ZiAnJXMnICIkZXhlY3V0YWJsZSIKK30KZGlmZiAtLWdpdCBhL2dpdC1tZXJnZXRvb2wuc2ggYi9naXQtbWVyZ2V0b29sLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzZjZkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtbWVyZ2V0b29sLnNoCkBAIC0wLDAgKzEsNTI5IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBwcm9ncmFtIHJlc29sdmVzIG1lcmdlIGNvbmZsaWN0cyBpbiBnaXQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFRoZW9kb3JlIFkuIFRzJ28KKyMgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTYgRGF2aWQgQWd1aWxhcgorIworIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisjIGF0IHRoZSBkaXNjcmV0aW9uIG9mIEp1bmlvIEMgSGFtYW5vLgorIworCitVU0FHRT0nWy0tdG9vbD10b29sXSBbLS10b29sLWhlbHBdIFsteXwtLW5vLXByb21wdHwtLXByb21wdF0gWy1nfC0tZ3VpfC0tbm8tZ3VpXSBbLU88b3JkZXJmaWxlPl0gW2ZpbGUgdG8gbWVyZ2VdIC4uLicKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKK05PTkdJVF9PSz1ZZXMKK09QVElPTlNfU1BFQz0KK1RPT0xfTU9ERT1tZXJnZQorLiBnaXQtc2gtc2V0dXAKKy4gZ2l0LW1lcmdldG9vbC0tbGliCisKKyMgUmV0dXJucyB0cnVlIGlmIHRoZSBtb2RlIHJlZmxlY3RzIGEgc3ltbGluaworaXNfc3ltbGluayAoKSB7CisJdGVzdCAiJDEiID0gMTIwMDAwCit9CisKK2lzX3N1Ym1vZHVsZSAoKSB7CisJdGVzdCAiJDEiID0gMTYwMDAwCit9CisKK2xvY2FsX3ByZXNlbnQgKCkgeworCXRlc3QgLW4gIiRsb2NhbF9tb2RlIgorfQorCityZW1vdGVfcHJlc2VudCAoKSB7CisJdGVzdCAtbiAiJHJlbW90ZV9tb2RlIgorfQorCitiYXNlX3ByZXNlbnQgKCkgeworCXRlc3QgLW4gIiRiYXNlX21vZGUiCit9CisKK21lcmdldG9vbF90bXBkaXJfaW5pdCAoKSB7CisJaWYgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wud3JpdGVUb1RlbXApIiAhPSB0cnVlCisJdGhlbgorCQlNRVJHRVRPT0xfVE1QRElSPS4KKwkJcmV0dXJuIDAKKwlmaQorCWlmIE1FUkdFVE9PTF9UTVBESVI9JChta3RlbXAgLWQgLXQgImdpdC1tZXJnZXRvb2wtWFhYWFhYIiAyPi9kZXYvbnVsbCkKKwl0aGVuCisJCXJldHVybiAwCisJZmkKKwlkaWUgImVycm9yOiBta3RlbXAgaXMgbmVlZGVkIHdoZW4gJ21lcmdldG9vbC53cml0ZVRvVGVtcCcgaXMgdHJ1ZSIKK30KKworY2xlYW51cF90ZW1wX2ZpbGVzICgpIHsKKwlpZiB0ZXN0ICIkMSIgPSAtLXNhdmUtYmFja3VwCisJdGhlbgorCQlybSAtcmYgLS0gIiRNRVJHRUQub3JpZyIKKwkJdGVzdCAtZSAiJEJBQ0tVUCIgJiYgbXYgLS0gIiRCQUNLVVAiICIkTUVSR0VELm9yaWciCisJCXJtIC1mIC0tICIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiCisJZWxzZQorCQlybSAtZiAtLSAiJExPQ0FMIiAiJFJFTU9URSIgIiRCQVNFIiAiJEJBQ0tVUCIKKwlmaQorCWlmIHRlc3QgIiRNRVJHRVRPT0xfVE1QRElSIiAhPSAiLiIKKwl0aGVuCisJCXJtZGlyICIkTUVSR0VUT09MX1RNUERJUiIKKwlmaQorfQorCitkZXNjcmliZV9maWxlICgpIHsKKwltb2RlPSIkMSIKKwlicmFuY2g9IiQyIgorCWZpbGU9IiQzIgorCisJcHJpbnRmICIgIHslc306ICIgIiRicmFuY2giCisJaWYgdGVzdCAteiAiJG1vZGUiCisJdGhlbgorCQllY2hvICJkZWxldGVkIgorCWVsaWYgaXNfc3ltbGluayAiJG1vZGUiCisJdGhlbgorCQllY2hvICJhIHN5bWJvbGljIGxpbmsgLT4gJyQoY2F0ICIkZmlsZSIpJyIKKwllbGlmIGlzX3N1Ym1vZHVsZSAiJG1vZGUiCisJdGhlbgorCQllY2hvICJzdWJtb2R1bGUgY29tbWl0ICRmaWxlIgorCWVsaWYgYmFzZV9wcmVzZW50CisJdGhlbgorCQllY2hvICJtb2RpZmllZCBmaWxlIgorCWVsc2UKKwkJZWNobyAiY3JlYXRlZCBmaWxlIgorCWZpCit9CisKK3Jlc29sdmVfc3ltbGlua19tZXJnZSAoKSB7CisJd2hpbGUgdHJ1ZQorCWRvCisJCXByaW50ZiAiVXNlIChsKW9jYWwgb3IgKHIpZW1vdGUsIG9yIChhKWJvcnQ/ICIKKwkJcmVhZCBhbnMgfHwgcmV0dXJuIDEKKwkJY2FzZSAiJGFucyIgaW4KKwkJW2xMXSopCisJCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS1zdGFnZT0yIC0tICIkTUVSR0VEIgorCQkJZ2l0IGFkZCAtLSAiJE1FUkdFRCIKKwkJCWNsZWFudXBfdGVtcF9maWxlcyAtLXNhdmUtYmFja3VwCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW3JSXSopCisJCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS1zdGFnZT0zIC0tICIkTUVSR0VEIgorCQkJZ2l0IGFkZCAtLSAiJE1FUkdFRCIKKwkJCWNsZWFudXBfdGVtcF9maWxlcyAtLXNhdmUtYmFja3VwCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW2FBXSopCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworcmVzb2x2ZV9kZWxldGVkX21lcmdlICgpIHsKKwl3aGlsZSB0cnVlCisJZG8KKwkJaWYgYmFzZV9wcmVzZW50CisJCXRoZW4KKwkJCXByaW50ZiAiVXNlIChtKW9kaWZpZWQgb3IgKGQpZWxldGVkIGZpbGUsIG9yIChhKWJvcnQ/ICIKKwkJZWxzZQorCQkJcHJpbnRmICJVc2UgKGMpcmVhdGVkIG9yIChkKWVsZXRlZCBmaWxlLCBvciAoYSlib3J0PyAiCisJCWZpCisJCXJlYWQgYW5zIHx8IHJldHVybiAxCisJCWNhc2UgIiRhbnMiIGluCisJCVttTWNDXSopCisJCQlnaXQgYWRkIC0tICIkTUVSR0VEIgorCQkJaWYgdGVzdCAiJG1lcmdlX2tlZXBfYmFja3VwIiA9ICJ0cnVlIgorCQkJdGhlbgorCQkJCWNsZWFudXBfdGVtcF9maWxlcyAtLXNhdmUtYmFja3VwCisJCQllbHNlCisJCQkJY2xlYW51cF90ZW1wX2ZpbGVzCisJCQlmaQorCQkJcmV0dXJuIDAKKwkJCTs7CisJCVtkRF0qKQorCQkJZ2l0IHJtIC0tICIkTUVSR0VEIiA+IC9kZXYvbnVsbAorCQkJY2xlYW51cF90ZW1wX2ZpbGVzCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW2FBXSopCisJCQlpZiB0ZXN0ICIkbWVyZ2Vfa2VlcF90ZW1wb3JhcmllcyIgPSAiZmFsc2UiCisJCQl0aGVuCisJCQkJY2xlYW51cF90ZW1wX2ZpbGVzCisJCQlmaQorCQkJcmV0dXJuIDEKKwkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKK3Jlc29sdmVfc3VibW9kdWxlX21lcmdlICgpIHsKKwl3aGlsZSB0cnVlCisJZG8KKwkJcHJpbnRmICJVc2UgKGwpb2NhbCBvciAocillbW90ZSwgb3IgKGEpYm9ydD8gIgorCQlyZWFkIGFucyB8fCByZXR1cm4gMQorCQljYXNlICIkYW5zIiBpbgorCQlbbExdKikKKwkJCWlmICEgbG9jYWxfcHJlc2VudAorCQkJdGhlbgorCQkJCWlmIHRlc3QgLW4gIiQoZ2l0IGxzLXRyZWUgSEVBRCAtLSAiJE1FUkdFRCIpIgorCQkJCXRoZW4KKwkJCQkJIyBMb2NhbCBpc24ndCBwcmVzZW50LCBidXQgaXQncyBhIHN1YmRpcmVjdG9yeQorCQkJCQlnaXQgbHMtdHJlZSAtLWZ1bGwtbmFtZSAtciBIRUFEIC0tICIkTUVSR0VEIiB8CisJCQkJCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIHx8IGV4aXQgJD8KKwkJCQllbHNlCisJCQkJCXRlc3QgLWUgIiRNRVJHRUQiICYmIG12IC0tICIkTUVSR0VEIiAiJEJBQ0tVUCIKKwkJCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAiJE1FUkdFRCIKKwkJCQkJY2xlYW51cF90ZW1wX2ZpbGVzIC0tc2F2ZS1iYWNrdXAKKwkJCQlmaQorCQkJZWxpZiBpc19zdWJtb2R1bGUgIiRsb2NhbF9tb2RlIgorCQkJdGhlbgorCQkJCXN0YWdlX3N1Ym1vZHVsZSAiJE1FUkdFRCIgIiRsb2NhbF9zaGExIgorCQkJZWxzZQorCQkJCWdpdCBjaGVja291dC1pbmRleCAtZiAtLXN0YWdlPTIgLS0gIiRNRVJHRUQiCisJCQkJZ2l0IGFkZCAtLSAiJE1FUkdFRCIKKwkJCWZpCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW3JSXSopCisJCQlpZiAhIHJlbW90ZV9wcmVzZW50CisJCQl0aGVuCisJCQkJaWYgdGVzdCAtbiAiJChnaXQgbHMtdHJlZSBNRVJHRV9IRUFEIC0tICIkTUVSR0VEIikiCisJCQkJdGhlbgorCQkJCQkjIFJlbW90ZSBpc24ndCBwcmVzZW50LCBidXQgaXQncyBhIHN1YmRpcmVjdG9yeQorCQkJCQlnaXQgbHMtdHJlZSAtLWZ1bGwtbmFtZSAtciBNRVJHRV9IRUFEIC0tICIkTUVSR0VEIiB8CisJCQkJCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIHx8IGV4aXQgJD8KKwkJCQllbHNlCisJCQkJCXRlc3QgLWUgIiRNRVJHRUQiICYmIG12IC0tICIkTUVSR0VEIiAiJEJBQ0tVUCIKKwkJCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAiJE1FUkdFRCIKKwkJCQlmaQorCQkJZWxpZiBpc19zdWJtb2R1bGUgIiRyZW1vdGVfbW9kZSIKKwkJCXRoZW4KKwkJCQkhIGlzX3N1Ym1vZHVsZSAiJGxvY2FsX21vZGUiICYmCisJCQkJdGVzdCAtZSAiJE1FUkdFRCIgJiYKKwkJCQltdiAtLSAiJE1FUkdFRCIgIiRCQUNLVVAiCisJCQkJc3RhZ2Vfc3VibW9kdWxlICIkTUVSR0VEIiAiJHJlbW90ZV9zaGExIgorCQkJZWxzZQorCQkJCXRlc3QgLWUgIiRNRVJHRUQiICYmIG12IC0tICIkTUVSR0VEIiAiJEJBQ0tVUCIKKwkJCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS1zdGFnZT0zIC0tICIkTUVSR0VEIgorCQkJCWdpdCBhZGQgLS0gIiRNRVJHRUQiCisJCQlmaQorCQkJY2xlYW51cF90ZW1wX2ZpbGVzIC0tc2F2ZS1iYWNrdXAKKwkJCXJldHVybiAwCisJCQk7OworCQlbYUFdKikKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorfQorCitzdGFnZV9zdWJtb2R1bGUgKCkgeworCXBhdGg9IiQxIgorCXN1Ym1vZHVsZV9zaGExPSIkMiIKKwlta2RpciAtcCAiJHBhdGgiIHx8CisJZGllICJmYXRhbDogdW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIG1vZHVsZSBhdCAkcGF0aCIKKwkjIEZpbmQgJHBhdGggcmVsYXRpdmUgdG8gd29yayB0cmVlCisJd29ya190cmVlX3Jvb3Q9JChjZF90b190b3BsZXZlbCAmJiBwd2QpCisJd29ya19yZWxfcGF0aD0kKGNkICIkcGF0aCIgJiYKKwkJR0lUX1dPUktfVFJFRT0iJHt3b3JrX3RyZWVfcm9vdH0iIGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeAorCSkKKwl0ZXN0IC1uICIkd29ya19yZWxfcGF0aCIgfHwKKwlkaWUgImZhdGFsOiB1bmFibGUgdG8gZ2V0IHBhdGggb2YgbW9kdWxlICRwYXRoIHJlbGF0aXZlIHRvIHdvcmsgdHJlZSIKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVwbGFjZSAtLWNhY2hlaW5mbyAxNjAwMDAgIiRzdWJtb2R1bGVfc2hhMSIgIiR7d29ya19yZWxfcGF0aCUvfSIgfHwgZGllCit9CisKK2NoZWNrb3V0X3N0YWdlZF9maWxlICgpIHsKKwl0bXBmaWxlPSIkKGdpdCBjaGVja291dC1pbmRleCAtLXRlbXAgLS1zdGFnZT0iJDEiICIkMiIgMj4vZGV2L251bGwpIiAmJgorCXRtcGZpbGU9JHt0bXBmaWxlJSUnCScqfQorCisJaWYgdGVzdCAkPyAtZXEgMCAmJiB0ZXN0IC1uICIkdG1wZmlsZSIKKwl0aGVuCisJCW12IC0tICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXApJHRtcGZpbGUiICIkMyIKKwllbHNlCisJCT4iJDMiCisJZmkKK30KKworbWVyZ2VfZmlsZSAoKSB7CisJTUVSR0VEPSIkMSIKKworCWY9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiKQorCWlmIHRlc3QgLXogIiRmIgorCXRoZW4KKwkJaWYgdGVzdCAhIC1mICIkTUVSR0VEIgorCQl0aGVuCisJCQllY2hvICIkTUVSR0VEOiBmaWxlIG5vdCBmb3VuZCIKKwkJZWxzZQorCQkJZWNobyAiJE1FUkdFRDogZmlsZSBkb2VzIG5vdCBuZWVkIG1lcmdpbmciCisJCWZpCisJCXJldHVybiAxCisJZmkKKworCSMgZXh0cmFjdCBmaWxlIGV4dGVuc2lvbiBmcm9tIHRoZSBsYXN0IHBhdGggY29tcG9uZW50CisJY2FzZSAiJHtNRVJHRUQjIyovfSIgaW4KKwkqLiopCisJCWV4dD0uJHtNRVJHRUQjIyoufQorCQlCQVNFPSR7TUVSR0VEJSIkZXh0In0KKwkJOzsKKwkqKQorCQlCQVNFPSRNRVJHRUQKKwkJZXh0PQorCWVzYWMKKworCW1lcmdldG9vbF90bXBkaXJfaW5pdAorCisJaWYgdGVzdCAiJE1FUkdFVE9PTF9UTVBESVIiICE9ICIuIgorCXRoZW4KKwkJIyBJZiB3ZSdyZSB1c2luZyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhlbiB3cml0ZSB0byB0aGUKKwkJIyB0b3AtbGV2ZWwgb2YgdGhhdCBkaXJlY3RvcnkuCisJCUJBU0U9JHtCQVNFIyMqL30KKwlmaQorCisJQkFDS1VQPSIkTUVSR0VUT09MX1RNUERJUi8ke0JBU0V9X0JBQ0tVUF8kJCRleHQiCisJTE9DQUw9IiRNRVJHRVRPT0xfVE1QRElSLyR7QkFTRX1fTE9DQUxfJCQkZXh0IgorCVJFTU9URT0iJE1FUkdFVE9PTF9UTVBESVIvJHtCQVNFfV9SRU1PVEVfJCQkZXh0IgorCUJBU0U9IiRNRVJHRVRPT0xfVE1QRElSLyR7QkFTRX1fQkFTRV8kJCRleHQiCisKKwliYXNlX21vZGU9IGxvY2FsX21vZGU9IHJlbW90ZV9tb2RlPQorCisJIyBoZXJlLCAkSUZTIGlzIGp1c3QgYSBMRgorCWZvciBsaW5lIGluICRmCisJZG8KKwkJbW9kZT0ke2xpbmUlJSAqfQkJIyAxc3Qgd29yZAorCQlzaGExPSR7bGluZSMiJG1vZGUgIn0KKwkJc2hhMT0ke3NoYTElJSAqfQkJIyAybmQgd29yZAorCQljYXNlICIke2xpbmUjJG1vZGUgJHNoYTEgfSIgaW4JIyByZW1haW5kZXIKKwkJJzEJJyopCisJCQliYXNlX21vZGU9JG1vZGUKKwkJCTs7CisJCScyCScqKQorCQkJbG9jYWxfbW9kZT0kbW9kZSBsb2NhbF9zaGExPSRzaGExCisJCQk7OworCQknMwknKikKKwkJCXJlbW90ZV9tb2RlPSRtb2RlIHJlbW90ZV9zaGExPSRzaGExCisJCQk7OworCQllc2FjCisJZG9uZQorCisJaWYgaXNfc3VibW9kdWxlICIkbG9jYWxfbW9kZSIgfHwgaXNfc3VibW9kdWxlICIkcmVtb3RlX21vZGUiCisJdGhlbgorCQllY2hvICJTdWJtb2R1bGUgbWVyZ2UgY29uZmxpY3QgZm9yICckTUVSR0VEJzoiCisJCWRlc2NyaWJlX2ZpbGUgIiRsb2NhbF9tb2RlIiAibG9jYWwiICIkbG9jYWxfc2hhMSIKKwkJZGVzY3JpYmVfZmlsZSAiJHJlbW90ZV9tb2RlIiAicmVtb3RlIiAiJHJlbW90ZV9zaGExIgorCQlyZXNvbHZlX3N1Ym1vZHVsZV9tZXJnZQorCQlyZXR1cm4KKwlmaQorCisJaWYgdGVzdCAtZiAiJE1FUkdFRCIKKwl0aGVuCisJCW12IC0tICIkTUVSR0VEIiAiJEJBQ0tVUCIKKwkJY3AgLS0gIiRCQUNLVVAiICIkTUVSR0VEIgorCWZpCisJIyBDcmVhdGUgYSBwYXJlbnQgZGlyZWN0b3J5IHRvIGhhbmRsZSBkZWxldGUvZGVsZXRlIGNvbmZsaWN0cworCSMgd2hlcmUgdGhlIGJhc2UncyBkaXJlY3Rvcnkgbm8gbG9uZ2VyIGV4aXN0cy4KKwlta2RpciAtcCAiJChkaXJuYW1lICIkTUVSR0VEIikiCisKKwljaGVja291dF9zdGFnZWRfZmlsZSAxICIkTUVSR0VEIiAiJEJBU0UiCisJY2hlY2tvdXRfc3RhZ2VkX2ZpbGUgMiAiJE1FUkdFRCIgIiRMT0NBTCIKKwljaGVja291dF9zdGFnZWRfZmlsZSAzICIkTUVSR0VEIiAiJFJFTU9URSIKKworCWlmIHRlc3QgLXogIiRsb2NhbF9tb2RlIiB8fCB0ZXN0IC16ICIkcmVtb3RlX21vZGUiCisJdGhlbgorCQllY2hvICJEZWxldGVkIG1lcmdlIGNvbmZsaWN0IGZvciAnJE1FUkdFRCc6IgorCQlkZXNjcmliZV9maWxlICIkbG9jYWxfbW9kZSIgImxvY2FsIiAiJExPQ0FMIgorCQlkZXNjcmliZV9maWxlICIkcmVtb3RlX21vZGUiICJyZW1vdGUiICIkUkVNT1RFIgorCQlyZXNvbHZlX2RlbGV0ZWRfbWVyZ2UKKwkJc3RhdHVzPSQ/CisJCXJtZGlyIC1wICIkKGRpcm5hbWUgIiRNRVJHRUQiKSIgMj4vZGV2L251bGwKKwkJcmV0dXJuICRzdGF0dXMKKwlmaQorCisJaWYgaXNfc3ltbGluayAiJGxvY2FsX21vZGUiIHx8IGlzX3N5bWxpbmsgIiRyZW1vdGVfbW9kZSIKKwl0aGVuCisJCWVjaG8gIlN5bWJvbGljIGxpbmsgbWVyZ2UgY29uZmxpY3QgZm9yICckTUVSR0VEJzoiCisJCWRlc2NyaWJlX2ZpbGUgIiRsb2NhbF9tb2RlIiAibG9jYWwiICIkTE9DQUwiCisJCWRlc2NyaWJlX2ZpbGUgIiRyZW1vdGVfbW9kZSIgInJlbW90ZSIgIiRSRU1PVEUiCisJCXJlc29sdmVfc3ltbGlua19tZXJnZQorCQlyZXR1cm4KKwlmaQorCisJZWNobyAiTm9ybWFsIG1lcmdlIGNvbmZsaWN0IGZvciAnJE1FUkdFRCc6IgorCWRlc2NyaWJlX2ZpbGUgIiRsb2NhbF9tb2RlIiAibG9jYWwiICIkTE9DQUwiCisJZGVzY3JpYmVfZmlsZSAiJHJlbW90ZV9tb2RlIiAicmVtb3RlIiAiJFJFTU9URSIKKwlpZiB0ZXN0ICIkZ3Vlc3NlZF9tZXJnZV90b29sIiA9IHRydWUgfHwgdGVzdCAiJHByb21wdCIgPSB0cnVlCisJdGhlbgorCQlwcmludGYgIkhpdCByZXR1cm4gdG8gc3RhcnQgbWVyZ2UgcmVzb2x1dGlvbiB0b29sICglcyk6ICIgIiRtZXJnZV90b29sIgorCQlyZWFkIGFucyB8fCByZXR1cm4gMQorCWZpCisKKwlpZiBiYXNlX3ByZXNlbnQKKwl0aGVuCisJCXByZXNlbnQ9dHJ1ZQorCWVsc2UKKwkJcHJlc2VudD1mYWxzZQorCWZpCisKKwlpZiAhIHJ1bl9tZXJnZV90b29sICIkbWVyZ2VfdG9vbCIgIiRwcmVzZW50IgorCXRoZW4KKwkJZWNobyAibWVyZ2Ugb2YgJE1FUkdFRCBmYWlsZWQiIDE+JjIKKwkJbXYgLS0gIiRCQUNLVVAiICIkTUVSR0VEIgorCisJCWlmIHRlc3QgIiRtZXJnZV9rZWVwX3RlbXBvcmFyaWVzIiA9ICJmYWxzZSIKKwkJdGhlbgorCQkJY2xlYW51cF90ZW1wX2ZpbGVzCisJCWZpCisKKwkJcmV0dXJuIDEKKwlmaQorCisJaWYgdGVzdCAiJG1lcmdlX2tlZXBfYmFja3VwIiA9ICJ0cnVlIgorCXRoZW4KKwkJbXYgLS0gIiRCQUNLVVAiICIkTUVSR0VELm9yaWciCisJZWxzZQorCQlybSAtLSAiJEJBQ0tVUCIKKwlmaQorCisJZ2l0IGFkZCAtLSAiJE1FUkdFRCIKKwljbGVhbnVwX3RlbXBfZmlsZXMKKwlyZXR1cm4gMAorfQorCitwcm9tcHRfYWZ0ZXJfZmFpbGVkX21lcmdlICgpIHsKKwl3aGlsZSB0cnVlCisJZG8KKwkJcHJpbnRmICJDb250aW51ZSBtZXJnaW5nIG90aGVyIHVucmVzb2x2ZWQgcGF0aHMgW3kvbl0/ICIKKwkJcmVhZCBhbnMgfHwgcmV0dXJuIDEKKwkJY2FzZSAiJGFucyIgaW4KKwkJW3lZXSopCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW25OXSopCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworcHJpbnRfbm9vcF9hbmRfZXhpdCAoKSB7CisJZWNobyAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIgorCWV4aXQgMAorfQorCittYWluICgpIHsKKwlwcm9tcHQ9JChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wucHJvbXB0KQorCUdJVF9NRVJHRVRPT0xfR1VJPWZhbHNlCisJZ3Vlc3NlZF9tZXJnZV90b29sPWZhbHNlCisJb3JkZXJmaWxlPQorCisJd2hpbGUgdGVzdCAkIyAhPSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tdG9vbC1oZWxwPSopCisJCQlUT09MX01PREU9JHsxIy0tdG9vbC1oZWxwPX0KKwkJCXNob3dfdG9vbF9oZWxwCisJCQk7OworCQktLXRvb2wtaGVscCkKKwkJCXNob3dfdG9vbF9oZWxwCisJCQk7OworCQktdHwtLXRvb2wqKQorCQkJY2FzZSAiJCMsJDEiIGluCisJCQkqLCo9KikKKwkJCQltZXJnZV90b29sPSR7MSMqPX0KKwkJCQk7OworCQkJMSwqKQorCQkJCXVzYWdlIDs7CisJCQkqKQorCQkJCW1lcmdlX3Rvb2w9IiQyIgorCQkJCXNoaWZ0IDs7CisJCQllc2FjCisJCQk7OworCQktLW5vLWd1aSkKKwkJCUdJVF9NRVJHRVRPT0xfR1VJPWZhbHNlCisJCQk7OworCQktZ3wtLWd1aSkKKwkJCUdJVF9NRVJHRVRPT0xfR1VJPXRydWUKKwkJCTs7CisJCS15fC0tbm8tcHJvbXB0KQorCQkJcHJvbXB0PWZhbHNlCisJCQk7OworCQktLXByb21wdCkKKwkJCXByb21wdD10cnVlCisJCQk7OworCQktTyopCisJCQlvcmRlcmZpbGU9IiR7MSMtT30iCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJZ2l0X2Rpcl9pbml0CisJcmVxdWlyZV93b3JrX3RyZWUKKworCWlmIHRlc3QgLXogIiRtZXJnZV90b29sIgorCXRoZW4KKwkJaWYgISBtZXJnZV90b29sPSQoZ2V0X21lcmdlX3Rvb2wpCisJCXRoZW4KKwkJCWd1ZXNzZWRfbWVyZ2VfdG9vbD10cnVlCisJCWZpCisJZmkKKwltZXJnZV9rZWVwX2JhY2t1cD0iJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wua2VlcEJhY2t1cCB8fCBlY2hvIHRydWUpIgorCW1lcmdlX2tlZXBfdGVtcG9yYXJpZXM9IiQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2V0b29sLmtlZXBUZW1wb3JhcmllcyB8fCBlY2hvIGZhbHNlKSIKKworCXByZWZpeD0kKGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCkgfHwgZXhpdCAxCisJY2RfdG9fdG9wbGV2ZWwKKworCWlmIHRlc3QgLW4gIiRvcmRlcmZpbGUiCisJdGhlbgorCQlvcmRlcmZpbGU9JCgKKwkJCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggIiRwcmVmaXgiIC0tICIkb3JkZXJmaWxlIiB8CisJCQlzZWQgLWUgMWQKKwkJKQorCWZpCisKKwlpZiB0ZXN0ICQjIC1lcSAwICYmIHRlc3QgLWUgIiRHSVRfRElSL01FUkdFX1JSIgorCXRoZW4KKwkJc2V0IC0tICQoZ2l0IHJlcmVyZSByZW1haW5pbmcpCisJCWlmIHRlc3QgJCMgLWVxIDAKKwkJdGhlbgorCQkJcHJpbnRfbm9vcF9hbmRfZXhpdAorCQlmaQorCWVsaWYgdGVzdCAkIyAtZ2UgMAorCXRoZW4KKwkJIyByZXYtcGFyc2UgcHJvdmlkZXMgdGhlIC0tIG5lZWRlZCBmb3IgJ3NldCcKKwkJZXZhbCAic2V0ICQoZ2l0IHJldi1wYXJzZSAtLXNxIC0tcHJlZml4ICIkcHJlZml4IiAtLSAiJEAiKSIKKwlmaQorCisJZmlsZXM9JChnaXQgLWMgY29yZS5xdW90ZVBhdGg9ZmFsc2UgXAorCQlkaWZmIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9VSBcCisJCSR7b3JkZXJmaWxlOisiLU8kb3JkZXJmaWxlIn0gLS0gIiRAIikKKworCWlmIHRlc3QgLXogIiRmaWxlcyIKKwl0aGVuCisJCXByaW50X25vb3BfYW5kX2V4aXQKKwlmaQorCisJcHJpbnRmICJNZXJnaW5nOlxuIgorCXByaW50ZiAiJXNcbiIgIiRmaWxlcyIKKworCXJjPTAKKwlzZXQgLS0gJGZpbGVzCisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCXByaW50ZiAiXG4iCisJCWlmICEgbWVyZ2VfZmlsZSAiJDEiCisJCXRoZW4KKwkJCXJjPTEKKwkJCXRlc3QgJCMgLW5lIDEgJiYgcHJvbXB0X2FmdGVyX2ZhaWxlZF9tZXJnZSB8fCBleGl0IDEKKwkJZmkKKwkJc2hpZnQKKwlkb25lCisKKwlleGl0ICRyYworfQorCittYWluICIkQCIKZGlmZiAtLWdpdCBhL2dpdC1wNC5weSBiL2dpdC1wNC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YTcxYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXA0LnB5CkBAIC0wLDAgKzEsNDIyNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIGdpdC1wNC5weSAtLSBBIHRvb2wgZm9yIGJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBQZXJmb3JjZSBkZXBvdCBhbmQgZ2l0LgorIworIyBBdXRob3I6IFNpbW9uIEhhdXNtYW5uIDxzaW1vbkBsc3QuZGU+CisjIENvcHlyaWdodDogMjAwNyBTaW1vbiBIYXVzbWFubiA8c2ltb25AbHN0LmRlPgorIyAgICAgICAgICAgIDIwMDcgVHJvbGx0ZWNoIEFTQQorIyBMaWNlbnNlOiBNSVQgPGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwPgorIworIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lLG1pc3NpbmctZG9jc3RyaW5nLHRvby1tYW55LWFyZ3VtZW50cyxicm9hZC1leGNlcHQKKyMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlLHdyb25nLWltcG9ydC1wb3NpdGlvbixjb25zaWRlci1pdGVyYXRpbmctZGljdGlvbmFyeQorIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLHVudXNlZC1pbXBvcnQsdG9vLWZldy1wdWJsaWMtbWV0aG9kcworIyBweWxpbnQ6IGRpc2FibGU9dG9vLW1hbnktbGluZXMsdW5ncm91cGVkLWltcG9ydHMsZml4bWUsdG9vLW1hbnktbG9jYWxzCisjIHB5bGludDogZGlzYWJsZT1saW5lLXRvby1sb25nLGJhZC13aGl0ZXNwYWNlLHN1cGVyZmx1b3VzLXBhcmVucworIyBweWxpbnQ6IGRpc2FibGU9dG9vLW1hbnktc3RhdGVtZW50cyx0b28tbWFueS1pbnN0YW5jZS1hdHRyaWJ1dGVzCisjIHB5bGludDogZGlzYWJsZT10b28tbWFueS1icmFuY2hlcyx0b28tbWFueS1uZXN0ZWQtYmxvY2tzCisjCitpbXBvcnQgc3lzCitpZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNDAwMDA6CisgICAgIyBUaGUgbGltaXRlciBpcyB0aGUgc3VicHJvY2VzcyBtb2R1bGUKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJnaXQtcDQ6IHJlcXVpcmVzIFB5dGhvbiAyLjQgb3IgbGF0ZXIuXG4iKQorICAgIHN5cy5leGl0KDEpCitpbXBvcnQgb3MKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN0YXQKK2ltcG9ydCB6aXBmaWxlCitpbXBvcnQgemxpYgoraW1wb3J0IGN0eXBlcworaW1wb3J0IGVycm5vCisKKyMgc3VwcG9ydCBiYXNlc3RyaW5nIGluIHB5dGhvbjMKK3RyeToKKyAgICB1bmljb2RlID0gdW5pY29kZQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAjICd1bmljb2RlJyBpcyB1bmRlZmluZWQsIG11c3QgYmUgUHl0aG9uIDMKKyAgICBzdHIgPSBzdHIKKyAgICB1bmljb2RlID0gc3RyCisgICAgYnl0ZXMgPSBieXRlcworICAgIGJhc2VzdHJpbmcgPSAoc3RyLGJ5dGVzKQorZWxzZToKKyAgICAjICd1bmljb2RlJyBleGlzdHMsIG11c3QgYmUgUHl0aG9uIDIKKyAgICBzdHIgPSBzdHIKKyAgICB1bmljb2RlID0gdW5pY29kZQorICAgIGJ5dGVzID0gc3RyCisgICAgYmFzZXN0cmluZyA9IGJhc2VzdHJpbmcKKwordHJ5OgorICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgQ2FsbGVkUHJvY2Vzc0Vycm9yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBmcm9tIHB5dGhvbjIuNzpzdWJwcm9jZXNzLnB5CisgICAgIyBFeGNlcHRpb24gY2xhc3NlcyB1c2VkIGJ5IHRoaXMgbW9kdWxlLgorICAgIGNsYXNzIENhbGxlZFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgorICAgICAgICAiIiJUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhIHByb2Nlc3MgcnVuIGJ5IGNoZWNrX2NhbGwoKSByZXR1cm5zCisgICAgICAgIGEgbm9uLXplcm8gZXhpdCBzdGF0dXMuICBUaGUgZXhpdCBzdGF0dXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlCisgICAgICAgIHJldHVybmNvZGUgYXR0cmlidXRlLiIiIgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0dXJuY29kZSwgY21kKToKKyAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IHJldHVybmNvZGUKKyAgICAgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQiICUgKHNlbGYuY21kLCBzZWxmLnJldHVybmNvZGUpCisKK3ZlcmJvc2UgPSBGYWxzZQorCisjIE9ubHkgbGFiZWxzL3RhZ3MgbWF0Y2hpbmcgdGhpcyB3aWxsIGJlIGltcG9ydGVkL2V4cG9ydGVkCitkZWZhdWx0TGFiZWxSZWdleHAgPSByJ1thLXpBLVowLTlfXC0uXSskJworCisjIFRoZSBibG9jayBzaXplIGlzIHJlZHVjZWQgYXV0b21hdGljYWxseSBpZiByZXF1aXJlZAorZGVmYXVsdEJsb2NrU2l6ZSA9IDE8PDIwCisKK3A0X2FjY2Vzc19jaGVja2VkID0gRmFsc2UKKworZGVmIHA0X2J1aWxkX2NtZChjbWQpOgorICAgICIiIkJ1aWxkIGEgc3VpdGFibGUgcDQgY29tbWFuZCBsaW5lLgorCisgICAgVGhpcyBjb25zb2xpZGF0ZXMgYnVpbGRpbmcgYW5kIHJldHVybmluZyBhIHA0IGNvbW1hbmQgbGluZSBpbnRvIG9uZQorICAgIGxvY2F0aW9uLiBJdCBtZWFucyB0aGF0IGhvb2tpbmcgaW50byB0aGUgZW52aXJvbm1lbnQsIG9yIG90aGVyIGNvbmZpZ3VyYXRpb24KKyAgICBjYW4gYmUgZG9uZSBtb3JlIGVhc2lseS4KKyAgICAiIiIKKyAgICByZWFsX2NtZCA9IFsicDQiXQorCisgICAgdXNlciA9IGdpdENvbmZpZygiZ2l0LXA0LnVzZXIiKQorICAgIGlmIGxlbih1c2VyKSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLXUiLHVzZXJdCisKKyAgICBwYXNzd29yZCA9IGdpdENvbmZpZygiZ2l0LXA0LnBhc3N3b3JkIikKKyAgICBpZiBsZW4ocGFzc3dvcmQpID4gMDoKKyAgICAgICAgcmVhbF9jbWQgKz0gWyItUCIsIHBhc3N3b3JkXQorCisgICAgcG9ydCA9IGdpdENvbmZpZygiZ2l0LXA0LnBvcnQiKQorICAgIGlmIGxlbihwb3J0KSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLXAiLCBwb3J0XQorCisgICAgaG9zdCA9IGdpdENvbmZpZygiZ2l0LXA0Lmhvc3QiKQorICAgIGlmIGxlbihob3N0KSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLUgiLCBob3N0XQorCisgICAgY2xpZW50ID0gZ2l0Q29uZmlnKCJnaXQtcDQuY2xpZW50IikKKyAgICBpZiBsZW4oY2xpZW50KSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLWMiLCBjbGllbnRdCisKKyAgICByZXRyaWVzID0gZ2l0Q29uZmlnSW50KCJnaXQtcDQucmV0cmllcyIpCisgICAgaWYgcmV0cmllcyBpcyBOb25lOgorICAgICAgICAjIFBlcmZvcm0gMyByZXRyaWVzIGJ5IGRlZmF1bHQKKyAgICAgICAgcmV0cmllcyA9IDMKKyAgICBpZiByZXRyaWVzID4gMDoKKyAgICAgICAgIyBQcm92aWRlIGEgd2F5IHRvIG5vdCBwYXNzIHRoaXMgb3B0aW9uIGJ5IHNldHRpbmcgZ2l0LXA0LnJldHJpZXMgdG8gMAorICAgICAgICByZWFsX2NtZCArPSBbIi1yIiwgc3RyKHJldHJpZXMpXQorCisgICAgaWYgaXNpbnN0YW5jZShjbWQsYmFzZXN0cmluZyk6CisgICAgICAgIHJlYWxfY21kID0gJyAnLmpvaW4ocmVhbF9jbWQpICsgJyAnICsgY21kCisgICAgZWxzZToKKyAgICAgICAgcmVhbF9jbWQgKz0gY21kCisKKyAgICAjIG5vdyBjaGVjayB0aGF0IHdlIGNhbiBhY3R1YWxseSB0YWxrIHRvIHRoZSBzZXJ2ZXIKKyAgICBnbG9iYWwgcDRfYWNjZXNzX2NoZWNrZWQKKyAgICBpZiBub3QgcDRfYWNjZXNzX2NoZWNrZWQ6CisgICAgICAgIHA0X2FjY2Vzc19jaGVja2VkID0gVHJ1ZSAgICAjIHN1cHByZXNzIGFjY2VzcyBjaGVja3MgaW4gcDRfY2hlY2tfYWNjZXNzIGl0c2VsZgorICAgICAgICBwNF9jaGVja19hY2Nlc3MoKQorCisgICAgcmV0dXJuIHJlYWxfY21kCisKK2RlZiBnaXRfZGlyKHBhdGgpOgorICAgICIiIiBSZXR1cm4gVFJVRSBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhIGdpdCBkaXJlY3RvcnkgKC9wYXRoL3RvL2Rpci8uZ2l0KS4KKyAgICAgICAgVGhpcyB3b24ndCBhdXRvbWF0aWNhbGx5IGFkZCAiLmdpdCIgdG8gYSBkaXJlY3RvcnkuCisgICAgIiIiCisgICAgZCA9IHJlYWRfcGlwZShbImdpdCIsICItLWdpdC1kaXIiLCBwYXRoLCAicmV2LXBhcnNlIiwgIi0tZ2l0LWRpciJdLCBUcnVlKS5zdHJpcCgpCisgICAgaWYgbm90IGQgb3IgbGVuKGQpID09IDA6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGQKKworZGVmIGNoZGlyKHBhdGgsIGlzX2NsaWVudF9wYXRoPUZhbHNlKToKKyAgICAiIiJEbyBjaGRpciB0byB0aGUgZ2l2ZW4gcGF0aCwgYW5kIHNldCB0aGUgUFdEIGVudmlyb25tZW50CisgICAgICAgdmFyaWFibGUgZm9yIHVzZSBieSBQNC4gIEl0IGRvZXMgbm90IGxvb2sgYXQgZ2V0Y3dkKCkgb3V0cHV0LgorICAgICAgIFNpbmNlIHdlJ3JlIG5vdCB1c2luZyB0aGUgc2hlbGwsIGl0IGlzIG5lY2Vzc2FyeSB0byBzZXQgdGhlCisgICAgICAgUFdEIGVudmlyb25tZW50IHZhcmlhYmxlIGV4cGxpY2l0bHkuCisKKyAgICAgICBOb3JtYWxseSwgZXhwYW5kIHRoZSBwYXRoIHRvIGZvcmNlIGl0IHRvIGJlIGFic29sdXRlLiAgVGhpcworICAgICAgIGFkZHJlc3NlcyB0aGUgdXNlIG9mIHJlbGF0aXZlIHBhdGggbmFtZXMgaW5zaWRlIFA0IHNldHRpbmdzLAorICAgICAgIGUuZy4gUDRDT05GSUc9LnA0Y29uZmlnLiAgUDQgZG9lcyBub3Qgc2ltcGx5IG9wZW4gdGhlIGZpbGVuYW1lCisgICAgICAgYXMgZ2l2ZW47IGl0IGxvb2tzIGZvciAucDRjb25maWcgdXNpbmcgUFdELgorCisgICAgICAgSWYgaXNfY2xpZW50X3BhdGgsIHRoZSBwYXRoIHdhcyBoYW5kZWQgdG8gdXMgZGlyZWN0bHkgYnkgcDQsCisgICAgICAgYW5kIG1heSBiZSBhIHN5bWJvbGljIGxpbmsuICBEbyBub3QgY2FsbCBvcy5nZXRjd2QoKSBpbiB0aGlzCisgICAgICAgY2FzZSwgYmVjYXVzZSBpdCB3aWxsIGNhdXNlIHA0IHRvIHRoaW5rIHRoYXQgUFdEIGlzIG5vdCBpbnNpZGUKKyAgICAgICB0aGUgY2xpZW50IHBhdGguCisgICAgICAgIiIiCisKKyAgICBvcy5jaGRpcihwYXRoKQorICAgIGlmIG5vdCBpc19jbGllbnRfcGF0aDoKKyAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgb3MuZW52aXJvblsnUFdEJ10gPSBwYXRoCisKK2RlZiBjYWxjRGlza0ZyZWUoKToKKyAgICAiIiJSZXR1cm4gZnJlZSBzcGFjZSBpbiBieXRlcyBvbiB0aGUgZGlzayBvZiB0aGUgZ2l2ZW4gZGlybmFtZS4iIiIKKyAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnV2luZG93cyc6CisgICAgICAgIGZyZWVfYnl0ZXMgPSBjdHlwZXMuY191bG9uZ2xvbmcoMCkKKyAgICAgICAgY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5HZXREaXNrRnJlZVNwYWNlRXhXKGN0eXBlcy5jX3djaGFyX3Aob3MuZ2V0Y3dkKCkpLCBOb25lLCBOb25lLCBjdHlwZXMucG9pbnRlcihmcmVlX2J5dGVzKSkKKyAgICAgICAgcmV0dXJuIGZyZWVfYnl0ZXMudmFsdWUKKyAgICBlbHNlOgorICAgICAgICBzdCA9IG9zLnN0YXR2ZnMob3MuZ2V0Y3dkKCkpCisgICAgICAgIHJldHVybiBzdC5mX2JhdmFpbCAqIHN0LmZfZnJzaXplCisKK2RlZiBkaWUobXNnKToKKyAgICAiIiIgVGVybWluYXRlIGV4ZWN1dGlvbi4gTWFrZSBzdXJlIHRoYXQgYW55IHJ1bm5pbmcgY2hpbGQgcHJvY2Vzc2VzIGhhdmUgYmVlbiB3YWl0KCllZCBmb3IgYmVmb3JlCisgICAgICAgIGNhbGxpbmcgdGhpcy4KKyAgICAiIiIKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24obXNnKQorICAgIGVsc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUobXNnICsgIlxuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworZGVmIHByb21wdChwcm9tcHRfdGV4dCk6CisgICAgIiIiIFByb21wdCB0aGUgdXNlciB0byBjaG9vc2Ugb25lIG9mIHRoZSBjaG9pY2VzCisKKyAgICBDaG9pY2VzIGFyZSBpZGVudGlmaWVkIGluIHRoZSBwcm9tcHRfdGV4dCBieSBzcXVhcmUgYnJhY2tldHMgYXJvdW5kCisgICAgYSBzaW5nbGUgbGV0dGVyIG9wdGlvbi4KKyAgICAiIiIKKyAgICBjaG9pY2VzID0gc2V0KG0uZ3JvdXAoMSkgZm9yIG0gaW4gcmUuZmluZGl0ZXIociJcWyguKVxdIiwgcHJvbXB0X3RleHQpKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHJlc3BvbnNlID0gcmF3X2lucHV0KHByb21wdF90ZXh0KS5zdHJpcCgpLmxvd2VyKCkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZVswXQorICAgICAgICBpZiByZXNwb25zZSBpbiBjaG9pY2VzOgorICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiB3cml0ZV9waXBlKGMsIHN0ZGluKToKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdXcml0aW5nIHBpcGU6ICVzXG4nICUgc3RyKGMpKQorCisgICAgZXhwYW5kID0gaXNpbnN0YW5jZShjLGJhc2VzdHJpbmcpCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzaGVsbD1leHBhbmQpCisgICAgcGlwZSA9IHAuc3RkaW4KKyAgICB2YWwgPSBwaXBlLndyaXRlKHN0ZGluKQorICAgIHBpcGUuY2xvc2UoKQorICAgIGlmIHAud2FpdCgpOgorICAgICAgICBkaWUoJ0NvbW1hbmQgZmFpbGVkOiAlcycgJSBzdHIoYykpCisKKyAgICByZXR1cm4gdmFsCisKK2RlZiBwNF93cml0ZV9waXBlKGMsIHN0ZGluKToKKyAgICByZWFsX2NtZCA9IHA0X2J1aWxkX2NtZChjKQorICAgIHJldHVybiB3cml0ZV9waXBlKHJlYWxfY21kLCBzdGRpbikKKworZGVmIHJlYWRfcGlwZV9mdWxsKGMpOgorICAgICIiIiBSZWFkIG91dHB1dCBmcm9tICBjb21tYW5kLiBSZXR1cm5zIGEgdHVwbGUKKyAgICAgICAgb2YgdGhlIHJldHVybiBzdGF0dXMsIHN0ZG91dCB0ZXh0IGFuZCBzdGRlcnIKKyAgICAgICAgdGV4dC4KKyAgICAiIiIKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdSZWFkaW5nIHBpcGU6ICVzXG4nICUgc3RyKGMpKQorCisgICAgZXhwYW5kID0gaXNpbnN0YW5jZShjLGJhc2VzdHJpbmcpCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9ZXhwYW5kKQorICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICByZXR1cm4gKHAucmV0dXJuY29kZSwgb3V0LCBlcnIpCisKK2RlZiByZWFkX3BpcGUoYywgaWdub3JlX2Vycm9yPUZhbHNlKToKKyAgICAiIiIgUmVhZCBvdXRwdXQgZnJvbSAgY29tbWFuZC4gUmV0dXJucyB0aGUgb3V0cHV0IHRleHQgb24KKyAgICAgICAgc3VjY2Vzcy4gT24gZmFpbHVyZSwgdGVybWluYXRlcyBleGVjdXRpb24sIHVubGVzcworICAgICAgICBpZ25vcmVfZXJyb3IgaXMgVHJ1ZSwgd2hlbiBpdCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAiIiIKKyAgICAocmV0Y29kZSwgb3V0LCBlcnIpID0gcmVhZF9waXBlX2Z1bGwoYykKKyAgICBpZiByZXRjb2RlICE9IDA6CisgICAgICAgIGlmIGlnbm9yZV9lcnJvcjoKKyAgICAgICAgICAgIG91dCA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaWUoJ0NvbW1hbmQgZmFpbGVkOiAlc1xuRXJyb3I6ICVzJyAlIChzdHIoYyksIGVycikpCisgICAgcmV0dXJuIG91dAorCitkZWYgcmVhZF9waXBlX3RleHQoYyk6CisgICAgIiIiIFJlYWQgb3V0cHV0IGZyb20gYSBjb21tYW5kIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSBzdHJpcHBlZC4KKyAgICAgICAgT24gZXJyb3IsIHJldHVybnMgTm9uZS4KKyAgICAiIiIKKyAgICAocmV0Y29kZSwgb3V0LCBlcnIpID0gcmVhZF9waXBlX2Z1bGwoYykKKyAgICBpZiByZXRjb2RlICE9IDA6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG91dC5yc3RyaXAoKQorCitkZWYgcDRfcmVhZF9waXBlKGMsIGlnbm9yZV9lcnJvcj1GYWxzZSk6CisgICAgcmVhbF9jbWQgPSBwNF9idWlsZF9jbWQoYykKKyAgICByZXR1cm4gcmVhZF9waXBlKHJlYWxfY21kLCBpZ25vcmVfZXJyb3IpCisKK2RlZiByZWFkX3BpcGVfbGluZXMoYyk6CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnUmVhZGluZyBwaXBlOiAlc1xuJyAlIHN0cihjKSkKKworICAgIGV4cGFuZCA9IGlzaW5zdGFuY2UoYywgYmFzZXN0cmluZykKKyAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzaGVsbD1leHBhbmQpCisgICAgcGlwZSA9IHAuc3Rkb3V0CisgICAgdmFsID0gcGlwZS5yZWFkbGluZXMoKQorICAgIGlmIHBpcGUuY2xvc2UoKSBvciBwLndhaXQoKToKKyAgICAgICAgZGllKCdDb21tYW5kIGZhaWxlZDogJXMnICUgc3RyKGMpKQorCisgICAgcmV0dXJuIHZhbAorCitkZWYgcDRfcmVhZF9waXBlX2xpbmVzKGMpOgorICAgICIiIlNwZWNpZmljYWxseSBpbnZva2UgcDQgb24gdGhlIGNvbW1hbmQgc3VwcGxpZWQuICIiIgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKGMpCisgICAgcmV0dXJuIHJlYWRfcGlwZV9saW5lcyhyZWFsX2NtZCkKKworZGVmIHA0X2hhc19jb21tYW5kKGNtZCk6CisgICAgIiIiQXNrIHA0IGZvciBoZWxwIG9uIHRoaXMgY29tbWFuZC4gIElmIGl0IHJldHVybnMgYW4gZXJyb3IsIHRoZQorICAgICAgIGNvbW1hbmQgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB2ZXJzaW9uIG9mIHA0LiIiIgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKFsiaGVscCIsIGNtZF0pCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4ocmVhbF9jbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgcC5jb21tdW5pY2F0ZSgpCisgICAgcmV0dXJuIHAucmV0dXJuY29kZSA9PSAwCisKK2RlZiBwNF9oYXNfbW92ZV9jb21tYW5kKCk6CisgICAgIiIiU2VlIGlmIHRoZSBtb3ZlIGNvbW1hbmQgZXhpc3RzLCB0aGF0IGl0IHN1cHBvcnRzIC1rLCBhbmQgdGhhdAorICAgICAgIGl0IGhhcyBub3QgYmVlbiBhZG1pbmlzdHJhdGl2ZWx5IGRpc2FibGVkLiAgVGhlIGFyZ3VtZW50cworICAgICAgIG11c3QgYmUgY29ycmVjdCwgYnV0IHRoZSBmaWxlbmFtZXMgZG8gbm90IGhhdmUgdG8gZXhpc3QuICBVc2UKKyAgICAgICBvbmVzIHdpdGggd2lsZGNhcmRzIHNvIGV2ZW4gaWYgdGhleSBleGlzdCwgaXQgd2lsbCBmYWlsLiIiIgorCisgICAgaWYgbm90IHA0X2hhc19jb21tYW5kKCJtb3ZlIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGNtZCA9IHA0X2J1aWxkX2NtZChbIm1vdmUiLCAiLWsiLCAiQGZyb20iLCAiQHRvIl0pCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAjIHJldHVybiBjb2RlIHdpbGwgYmUgMSBpbiBlaXRoZXIgY2FzZQorICAgIGlmIGVyci5maW5kKCJJbnZhbGlkIG9wdGlvbiIpID49IDA6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIGVyci5maW5kKCJkaXNhYmxlZCIpID49IDA6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgICMgYXNzdW1lIGl0IGZhaWxlZCBiZWNhdXNlIEAuLi4gd2FzIGludmFsaWQgY2hhbmdlbGlzdAorICAgIHJldHVybiBUcnVlCisKK2RlZiBzeXN0ZW0oY21kLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgorICAgIGV4cGFuZCA9IGlzaW5zdGFuY2UoY21kLGJhc2VzdHJpbmcpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiZXhlY3V0aW5nICVzXG4iICUgc3RyKGNtZCkpCisgICAgcmV0Y29kZSA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPWV4cGFuZCkKKyAgICBpZiByZXRjb2RlIGFuZCBub3QgaWdub3JlX2Vycm9yOgorICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgY21kKQorCisgICAgcmV0dXJuIHJldGNvZGUKKworZGVmIHA0X3N5c3RlbShjbWQpOgorICAgICIiIlNwZWNpZmljYWxseSBpbnZva2UgcDQgYXMgdGhlIHN5c3RlbSBjb21tYW5kLiAiIiIKKyAgICByZWFsX2NtZCA9IHA0X2J1aWxkX2NtZChjbWQpCisgICAgZXhwYW5kID0gaXNpbnN0YW5jZShyZWFsX2NtZCwgYmFzZXN0cmluZykKKyAgICByZXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKHJlYWxfY21kLCBzaGVsbD1leHBhbmQpCisgICAgaWYgcmV0Y29kZToKKyAgICAgICAgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yKHJldGNvZGUsIHJlYWxfY21kKQorCitkZWYgZGllX2JhZF9hY2Nlc3Mocyk6CisgICAgZGllKCJmYWlsdXJlIGFjY2Vzc2luZyBkZXBvdDogezB9Ii5mb3JtYXQocy5yc3RyaXAoKSkpCisKK2RlZiBwNF9jaGVja19hY2Nlc3MobWluX2V4cGlyYXRpb249MSk6CisgICAgIiIiIENoZWNrIGlmIHdlIGNhbiBhY2Nlc3MgUGVyZm9yY2UgLSBhY2NvdW50IHN0aWxsIGxvZ2dlZCBpbgorICAgICIiIgorICAgIHJlc3VsdHMgPSBwNENtZExpc3QoWyJsb2dpbiIsICItcyJdKQorCisgICAgaWYgbGVuKHJlc3VsdHMpID09IDA6CisgICAgICAgICMgc2hvdWxkIG5ldmVyIGdldCBoZXJlOiBhbHdheXMgZ2V0IGVpdGhlciBzb21lIHJlc3VsdHMsIG9yIGEgcDRFeGl0Q29kZQorICAgICAgICBhc3NlcnQoImNvdWxkIG5vdCBwYXJzZSByZXNwb25zZSBmcm9tIHBlcmZvcmNlIikKKworICAgIHJlc3VsdCA9IHJlc3VsdHNbMF0KKworICAgIGlmICdwNEV4aXRDb2RlJyBpbiByZXN1bHQ6CisgICAgICAgICMgcDQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLCBlLmcuIFA0UE9SVCBpbnZhbGlkLCBvciBwNCBub3QgaW4gcGF0aAorICAgICAgICBkaWVfYmFkX2FjY2VzcygiY291bGQgbm90IHJ1biBwNCIpCisKKyAgICBjb2RlID0gcmVzdWx0LmdldCgiY29kZSIpCisgICAgaWYgbm90IGNvZGU6CisgICAgICAgICMgd2UgZ2V0IGhlcmUgaWYgd2UgY291bGRuJ3QgY29ubmVjdCBhbmQgdGhlcmUgd2FzIG5vdGhpbmcgdG8gdW5tYXJzaGFsCisgICAgICAgIGRpZV9iYWRfYWNjZXNzKCJjb3VsZCBub3QgY29ubmVjdCIpCisKKyAgICBlbGlmIGNvZGUgPT0gInN0YXQiOgorICAgICAgICBleHBpcnkgPSByZXN1bHQuZ2V0KCJUaWNrZXRFeHBpcmF0aW9uIikKKyAgICAgICAgaWYgZXhwaXJ5OgorICAgICAgICAgICAgZXhwaXJ5ID0gaW50KGV4cGlyeSkKKyAgICAgICAgICAgIGlmIGV4cGlyeSA+IG1pbl9leHBpcmF0aW9uOgorICAgICAgICAgICAgICAgICMgb2sgdG8gY2Fycnkgb24KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGllX2JhZF9hY2Nlc3MoInBlcmZvcmNlIHRpY2tldCBleHBpcmVzIGluIHswfSBzZWNvbmRzIi5mb3JtYXQoZXhwaXJ5KSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBhY2NvdW50IHdpdGhvdXQgYSB0aW1lb3V0IC0gYWxsIG9rCisgICAgICAgICAgICByZXR1cm4KKworICAgIGVsaWYgY29kZSA9PSAiZXJyb3IiOgorICAgICAgICBkYXRhID0gcmVzdWx0LmdldCgiZGF0YSIpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBkaWVfYmFkX2FjY2VzcygicDQgZXJyb3I6IHswfSIuZm9ybWF0KGRhdGEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGllX2JhZF9hY2Nlc3MoInVua25vd24gZXJyb3IiKQorICAgIGVsaWYgY29kZSA9PSAiaW5mbyI6CisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGRpZV9iYWRfYWNjZXNzKCJ1bmtub3duIGVycm9yIGNvZGUgezB9Ii5mb3JtYXQoY29kZSkpCisKK19wNF92ZXJzaW9uX3N0cmluZyA9IE5vbmUKK2RlZiBwNF92ZXJzaW9uX3N0cmluZygpOgorICAgICIiIlJlYWQgdGhlIHZlcnNpb24gc3RyaW5nLCBzaG93aW5nIGp1c3QgdGhlIGxhc3QgbGluZSwgd2hpY2gKKyAgICAgICBob3BlZnVsbHkgaXMgdGhlIGludGVyZXN0aW5nIHZlcnNpb24gYml0LgorCisgICAgICAgJCBwNCAtVgorICAgICAgIFBlcmZvcmNlIC0gVGhlIEZhc3QgU29mdHdhcmUgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IFN5c3RlbS4KKyAgICAgICBDb3B5cmlnaHQgMTk5NS0yMDExIFBlcmZvcmNlIFNvZnR3YXJlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAgICBSZXYuIFA0L05UWDg2LzIwMTEuMS8zOTM5NzUgKDIwMTEvMTIvMTYpLgorICAgICIiIgorICAgIGdsb2JhbCBfcDRfdmVyc2lvbl9zdHJpbmcKKyAgICBpZiBub3QgX3A0X3ZlcnNpb25fc3RyaW5nOgorICAgICAgICBhID0gcDRfcmVhZF9waXBlX2xpbmVzKFsiLVYiXSkKKyAgICAgICAgX3A0X3ZlcnNpb25fc3RyaW5nID0gYVstMV0ucnN0cmlwKCkKKyAgICByZXR1cm4gX3A0X3ZlcnNpb25fc3RyaW5nCisKK2RlZiBwNF9pbnRlZ3JhdGUoc3JjLCBkZXN0KToKKyAgICBwNF9zeXN0ZW0oWyJpbnRlZ3JhdGUiLCAiLUR0Iiwgd2lsZGNhcmRfZW5jb2RlKHNyYyksIHdpbGRjYXJkX2VuY29kZShkZXN0KV0pCisKK2RlZiBwNF9zeW5jKGYsICpvcHRpb25zKToKKyAgICBwNF9zeXN0ZW0oWyJzeW5jIl0gKyBsaXN0KG9wdGlvbnMpICsgW3dpbGRjYXJkX2VuY29kZShmKV0pCisKK2RlZiBwNF9hZGQoZik6CisgICAgIyBmb3JjaWJseSBhZGQgZmlsZSBuYW1lcyB3aXRoIHdpbGRjYXJkcworICAgIGlmIHdpbGRjYXJkX3ByZXNlbnQoZik6CisgICAgICAgIHA0X3N5c3RlbShbImFkZCIsICItZiIsIGZdKQorICAgIGVsc2U6CisgICAgICAgIHA0X3N5c3RlbShbImFkZCIsIGZdKQorCitkZWYgcDRfZGVsZXRlKGYpOgorICAgIHA0X3N5c3RlbShbImRlbGV0ZSIsIHdpbGRjYXJkX2VuY29kZShmKV0pCisKK2RlZiBwNF9lZGl0KGYsICpvcHRpb25zKToKKyAgICBwNF9zeXN0ZW0oWyJlZGl0Il0gKyBsaXN0KG9wdGlvbnMpICsgW3dpbGRjYXJkX2VuY29kZShmKV0pCisKK2RlZiBwNF9yZXZlcnQoZik6CisgICAgcDRfc3lzdGVtKFsicmV2ZXJ0Iiwgd2lsZGNhcmRfZW5jb2RlKGYpXSkKKworZGVmIHA0X3Jlb3Blbih0eXBlLCBmKToKKyAgICBwNF9zeXN0ZW0oWyJyZW9wZW4iLCAiLXQiLCB0eXBlLCB3aWxkY2FyZF9lbmNvZGUoZildKQorCitkZWYgcDRfcmVvcGVuX2luX2NoYW5nZShjaGFuZ2VsaXN0LCBmaWxlcyk6CisgICAgY21kID0gWyJyZW9wZW4iLCAiLWMiLCBzdHIoY2hhbmdlbGlzdCldICsgZmlsZXMKKyAgICBwNF9zeXN0ZW0oY21kKQorCitkZWYgcDRfbW92ZShzcmMsIGRlc3QpOgorICAgIHA0X3N5c3RlbShbIm1vdmUiLCAiLWsiLCB3aWxkY2FyZF9lbmNvZGUoc3JjKSwgd2lsZGNhcmRfZW5jb2RlKGRlc3QpXSkKKworZGVmIHA0X2xhc3RfY2hhbmdlKCk6CisgICAgcmVzdWx0cyA9IHA0Q21kTGlzdChbImNoYW5nZXMiLCAiLW0iLCAiMSJdLCBza2lwX2luZm89VHJ1ZSkKKyAgICByZXR1cm4gaW50KHJlc3VsdHNbMF1bJ2NoYW5nZSddKQorCitkZWYgcDRfZGVzY3JpYmUoY2hhbmdlLCBzaGVsdmVkPUZhbHNlKToKKyAgICAiIiJNYWtlIHN1cmUgaXQgcmV0dXJucyBhIHZhbGlkIHJlc3VsdCBieSBjaGVja2luZyBmb3IKKyAgICAgICB0aGUgcHJlc2VuY2Ugb2YgZmllbGQgInRpbWUiLiAgUmV0dXJuIGEgZGljdCBvZiB0aGUKKyAgICAgICByZXN1bHRzLiIiIgorCisgICAgY21kID0gWyJkZXNjcmliZSIsICItcyJdCisgICAgaWYgc2hlbHZlZDoKKyAgICAgICAgY21kICs9IFsiLVMiXQorICAgIGNtZCArPSBbc3RyKGNoYW5nZSldCisKKyAgICBkcyA9IHA0Q21kTGlzdChjbWQsIHNraXBfaW5mbz1UcnVlKQorICAgIGlmIGxlbihkcykgIT0gMToKKyAgICAgICAgZGllKCJwNCBkZXNjcmliZSAtcyAlZCBkaWQgbm90IHJldHVybiAxIHJlc3VsdDogJXMiICUgKGNoYW5nZSwgc3RyKGRzKSkpCisKKyAgICBkID0gZHNbMF0KKworICAgIGlmICJwNEV4aXRDb2RlIiBpbiBkOgorICAgICAgICBkaWUoInA0IGRlc2NyaWJlIC1zICVkIGV4aXRlZCB3aXRoICVkOiAlcyIgJSAoY2hhbmdlLCBkWyJwNEV4aXRDb2RlIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZCkpKQorICAgIGlmICJjb2RlIiBpbiBkOgorICAgICAgICBpZiBkWyJjb2RlIl0gPT0gImVycm9yIjoKKyAgICAgICAgICAgIGRpZSgicDQgZGVzY3JpYmUgLXMgJWQgcmV0dXJuZWQgZXJyb3IgY29kZTogJXMiICUgKGNoYW5nZSwgc3RyKGQpKSkKKworICAgIGlmICJ0aW1lIiBub3QgaW4gZDoKKyAgICAgICAgZGllKCJwNCBkZXNjcmliZSAtcyAlZCByZXR1cm5lZCBubyBcInRpbWVcIjogJXMiICUgKGNoYW5nZSwgc3RyKGQpKSkKKworICAgIHJldHVybiBkCisKKyMKKyMgQ2Fub25pY2FsaXplIHRoZSBwNCB0eXBlIGFuZCByZXR1cm4gYSB0dXBsZSBvZiB0aGUKKyMgYmFzZSB0eXBlLCBwbHVzIGFueSBtb2RpZmllcnMuICBTZWUgInA0IGhlbHAgZmlsZXR5cGVzIgorIyBmb3IgYSBsaXN0IGFuZCBleHBsYW5hdGlvbi4KKyMKK2RlZiBzcGxpdF9wNF90eXBlKHA0dHlwZSk6CisKKyAgICBwNF9maWxldHlwZXNfaGlzdG9yaWNhbCA9IHsKKyAgICAgICAgImN0ZW1wb2JqIjogImJpbmFyeStTdyIsCisgICAgICAgICJjdGV4dCI6ICJ0ZXh0K0MiLAorICAgICAgICAiY3h0ZXh0IjogInRleHQrQ3giLAorICAgICAgICAia3RleHQiOiAidGV4dCtrIiwKKyAgICAgICAgImt4dGV4dCI6ICJ0ZXh0K2t4IiwKKyAgICAgICAgImx0ZXh0IjogInRleHQrRiIsCisgICAgICAgICJ0ZW1wb2JqIjogImJpbmFyeStGU3ciLAorICAgICAgICAidWJpbmFyeSI6ICJiaW5hcnkrRiIsCisgICAgICAgICJ1cmVzb3VyY2UiOiAicmVzb3VyY2UrRiIsCisgICAgICAgICJ1eGJpbmFyeSI6ICJiaW5hcnkrRngiLAorICAgICAgICAieGJpbmFyeSI6ICJiaW5hcnkreCIsCisgICAgICAgICJ4bHRleHQiOiAidGV4dCtGeCIsCisgICAgICAgICJ4dGVtcG9iaiI6ICJiaW5hcnkrU3d4IiwKKyAgICAgICAgInh0ZXh0IjogInRleHQreCIsCisgICAgICAgICJ4dW5pY29kZSI6ICJ1bmljb2RlK3giLAorICAgICAgICAieHV0ZjE2IjogInV0ZjE2K3giLAorICAgIH0KKyAgICBpZiBwNHR5cGUgaW4gcDRfZmlsZXR5cGVzX2hpc3RvcmljYWw6CisgICAgICAgIHA0dHlwZSA9IHA0X2ZpbGV0eXBlc19oaXN0b3JpY2FsW3A0dHlwZV0KKyAgICBtb2RzID0gIiIKKyAgICBzID0gcDR0eXBlLnNwbGl0KCIrIikKKyAgICBiYXNlID0gc1swXQorICAgIG1vZHMgPSAiIgorICAgIGlmIGxlbihzKSA+IDE6CisgICAgICAgIG1vZHMgPSBzWzFdCisgICAgcmV0dXJuIChiYXNlLCBtb2RzKQorCisjCisjIHJldHVybiB0aGUgcmF3IHA0IHR5cGUgb2YgYSBmaWxlICh0ZXh0LCB0ZXh0K2tvLCBldGMpCisjCitkZWYgcDRfdHlwZShmKToKKyAgICByZXN1bHRzID0gcDRDbWRMaXN0KFsiZnN0YXQiLCAiLVQiLCAiaGVhZFR5cGUiLCB3aWxkY2FyZF9lbmNvZGUoZildKQorICAgIHJldHVybiByZXN1bHRzWzBdWydoZWFkVHlwZSddCisKKyMKKyMgR2l2ZW4gYSB0eXBlIGJhc2UgYW5kIG1vZGlmaWVyLCByZXR1cm4gYSByZWdleHAgbWF0Y2hpbmcKKyMgdGhlIGtleXdvcmRzIHRoYXQgY2FuIGJlIGV4cGFuZGVkIGluIHRoZSBmaWxlCisjCitkZWYgcDRfa2V5d29yZHNfcmVnZXhwX2Zvcl90eXBlKGJhc2UsIHR5cGVfbW9kcyk6CisgICAgaWYgYmFzZSBpbiAoInRleHQiLCAidW5pY29kZSIsICJiaW5hcnkiKToKKyAgICAgICAga3dvcmRzID0gTm9uZQorICAgICAgICBpZiAia28iIGluIHR5cGVfbW9kczoKKyAgICAgICAgICAgIGt3b3JkcyA9ICdJZHxIZWFkZXInCisgICAgICAgIGVsaWYgImsiIGluIHR5cGVfbW9kczoKKyAgICAgICAgICAgIGt3b3JkcyA9ICdJZHxIZWFkZXJ8QXV0aG9yfERhdGV8RGF0ZVRpbWV8Q2hhbmdlfEZpbGV8UmV2aXNpb24nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBwYXR0ZXJuID0gciIiIgorICAgICAgICAgICAgXCQgICAgICAgICAgICAgICMgU3RhcnRzIHdpdGggYSBkb2xsYXIsIGZvbGxvd2VkIGJ5Li4uCisgICAgICAgICAgICAoJXMpICAgICAgICAgICAgIyBvbmUgb2YgdGhlIGtleXdvcmRzLCBmb2xsb3dlZCBieS4uLgorICAgICAgICAgICAgKDpbXiRcbl0rKT8gICAgICMgcG9zc2libHkgYW4gb2xkIGV4cGFuc2lvbiwgZm9sbG93ZWQgYnkuLi4KKyAgICAgICAgICAgIFwkICAgICAgICAgICAgICAjIGFub3RoZXIgZG9sbGFyCisgICAgICAgICAgICAiIiIgJSBrd29yZHMKKyAgICAgICAgcmV0dXJuIHBhdHRlcm4KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisjCisjIEdpdmVuIGEgZmlsZSwgcmV0dXJuIGEgcmVnZXhwIG1hdGNoaW5nIHRoZSBwb3NzaWJsZQorIyBSQ1Mga2V5d29yZHMgdGhhdCB3aWxsIGJlIGV4cGFuZGVkLCBvciBOb25lIGZvciBmaWxlcworIyB3aXRoIGt3IGV4cGFuc2lvbiB0dXJuZWQgb2ZmLgorIworZGVmIHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfZmlsZShmaWxlKToKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZSk6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxzZToKKyAgICAgICAgKHR5cGVfYmFzZSwgdHlwZV9tb2RzKSA9IHNwbGl0X3A0X3R5cGUocDRfdHlwZShmaWxlKSkKKyAgICAgICAgcmV0dXJuIHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfdHlwZSh0eXBlX2Jhc2UsIHR5cGVfbW9kcykKKworZGVmIHNldFA0RXhlY0JpdChmaWxlLCBtb2RlKToKKyAgICAjIFJlb3BlbnMgYW4gYWxyZWFkeSBvcGVuIGZpbGUgYW5kIGNoYW5nZXMgdGhlIGV4ZWN1dGUgYml0IHRvIG1hdGNoCisgICAgIyB0aGUgZXhlY3V0ZSBiaXQgc2V0dGluZyBpbiB0aGUgcGFzc2VkIGluIG1vZGUuCisKKyAgICBwNFR5cGUgPSAiK3giCisKKyAgICBpZiBub3QgaXNNb2RlRXhlYyhtb2RlKToKKyAgICAgICAgcDRUeXBlID0gZ2V0UDRPcGVuZWRUeXBlKGZpbGUpCisgICAgICAgIHA0VHlwZSA9IHJlLnN1YignXihbY2t1XT8peCguKiknLCAnXFwxXFwyJywgcDRUeXBlKQorICAgICAgICBwNFR5cGUgPSByZS5zdWIoJyguKj9cKy4qPyl4KC4qPyknLCAnXFwxXFwyJywgcDRUeXBlKQorICAgICAgICBpZiBwNFR5cGVbLTFdID09ICIrIjoKKyAgICAgICAgICAgIHA0VHlwZSA9IHA0VHlwZVswOi0xXQorCisgICAgcDRfcmVvcGVuKHA0VHlwZSwgZmlsZSkKKworZGVmIGdldFA0T3BlbmVkVHlwZShmaWxlKToKKyAgICAjIFJldHVybnMgdGhlIHBlcmZvcmNlIGZpbGUgdHlwZSBmb3IgdGhlIGdpdmVuIGZpbGUuCisKKyAgICByZXN1bHQgPSBwNF9yZWFkX3BpcGUoWyJvcGVuZWQiLCB3aWxkY2FyZF9lbmNvZGUoZmlsZSldKQorICAgIG1hdGNoID0gcmUubWF0Y2goIi4qXCgoLispXCkoIFwqZXhjbHVzaXZlXCopP1xyPyQiLCByZXN1bHQpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKQorICAgIGVsc2U6CisgICAgICAgIGRpZSgiQ291bGQgbm90IGRldGVybWluZSBmaWxlIHR5cGUgZm9yICVzIChyZXN1bHQ6ICclcycpIiAlIChmaWxlLCByZXN1bHQpKQorCisjIFJldHVybiB0aGUgc2V0IG9mIGFsbCBwNCBsYWJlbHMKK2RlZiBnZXRQNExhYmVscyhkZXBvdFBhdGhzKToKKyAgICBsYWJlbHMgPSBzZXQoKQorICAgIGlmIGlzaW5zdGFuY2UoZGVwb3RQYXRocyxiYXNlc3RyaW5nKToKKyAgICAgICAgZGVwb3RQYXRocyA9IFtkZXBvdFBhdGhzXQorCisgICAgZm9yIGwgaW4gcDRDbWRMaXN0KFsibGFiZWxzIl0gKyBbIiVzLi4uIiAlIHAgZm9yIHAgaW4gZGVwb3RQYXRoc10pOgorICAgICAgICBsYWJlbCA9IGxbJ2xhYmVsJ10KKyAgICAgICAgbGFiZWxzLmFkZChsYWJlbCkKKworICAgIHJldHVybiBsYWJlbHMKKworIyBSZXR1cm4gdGhlIHNldCBvZiBhbGwgZ2l0IHRhZ3MKK2RlZiBnZXRHaXRUYWdzKCk6CisgICAgZ2l0VGFncyA9IHNldCgpCisgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgInRhZyJdKToKKyAgICAgICAgdGFnID0gbGluZS5zdHJpcCgpCisgICAgICAgIGdpdFRhZ3MuYWRkKHRhZykKKyAgICByZXR1cm4gZ2l0VGFncworCitkZWYgZGlmZlRyZWVQYXR0ZXJuKCk6CisgICAgIyBUaGlzIGlzIGEgc2ltcGxlIGdlbmVyYXRvciBmb3IgdGhlIGRpZmYgdHJlZSByZWdleCBwYXR0ZXJuLiBUaGlzIGNvdWxkIGJlCisgICAgIyBhIGNsYXNzIHZhcmlhYmxlIGlmIHRoaXMgYW5kIHBhcnNlRGlmZlRyZWVFbnRyeSB3ZXJlIGEgcGFydCBvZiBhIGNsYXNzLgorICAgIHBhdHRlcm4gPSByZS5jb21waWxlKCc6KFxkKykgKFxkKykgKFx3KykgKFx3KykgKFtBLVpdKShcZCspP1x0KC4qPykoKFx0KC4qKSl8JCknKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHlpZWxkIHBhdHRlcm4KKworZGVmIHBhcnNlRGlmZlRyZWVFbnRyeShlbnRyeSk6CisgICAgIiIiUGFyc2VzIGEgc2luZ2xlIGRpZmYgdHJlZSBlbnRyeSBpbnRvIGl0cyBjb21wb25lbnQgZWxlbWVudHMuCisKKyAgICBTZWUgZ2l0LWRpZmYtdHJlZSgxKSBtYW5wYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoZSBmb3JtYXQgb2YgdGhlIGRpZmYKKyAgICBvdXRwdXQuIFRoaXMgbWV0aG9kIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGZvbGxvd2luZyBlbGVtZW50czoKKworICAgIHNyY19tb2RlIC0gVGhlIG1vZGUgb2YgdGhlIHNvdXJjZSBmaWxlCisgICAgZHN0X21vZGUgLSBUaGUgbW9kZSBvZiB0aGUgZGVzdGluYXRpb24gZmlsZQorICAgIHNyY19zaGExIC0gVGhlIHNoYTEgZm9yIHRoZSBzb3VyY2UgZmlsZQorICAgIGRzdF9zaGExIC0gVGhlIHNoYTEgZnIgdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgICBzdGF0dXMgLSBUaGUgb25lIGxldHRlciBzdGF0dXMgb2YgdGhlIGRpZmYgKGkuZS4gJ0EnLCAnTScsICdEJywgZXRjKQorICAgIHN0YXR1c19zY29yZSAtIFRoZSBzY29yZSBmb3IgdGhlIHN0YXR1cyAoYXBwbGljYWJsZSBmb3IgJ0MnIGFuZCAnUicKKyAgICAgICAgICAgICAgICAgICBzdGF0dXNlcykuIFRoaXMgaXMgTm9uZSBpZiB0aGVyZSBpcyBubyBzY29yZS4KKyAgICBzcmMgLSBUaGUgcGF0aCBmb3IgdGhlIHNvdXJjZSBmaWxlLgorICAgIGRzdCAtIFRoZSBwYXRoIGZvciB0aGUgZGVzdGluYXRpb24gZmlsZS4gVGhpcyBpcyBvbmx5IHByZXNlbnQgZm9yCisgICAgICAgICAgY29weSBvciByZW5hbWVzLiBJZiBpdCBpcyBub3QgcHJlc2VudCwgdGhpcyBpcyBOb25lLgorCisgICAgSWYgdGhlIHBhdHRlcm4gaXMgbm90IG1hdGNoZWQsIE5vbmUgaXMgcmV0dXJuZWQuIiIiCisKKyAgICBtYXRjaCA9IGRpZmZUcmVlUGF0dGVybigpLm5leHQoKS5tYXRjaChlbnRyeSkKKyAgICBpZiBtYXRjaDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICdzcmNfbW9kZSc6IG1hdGNoLmdyb3VwKDEpLAorICAgICAgICAgICAgJ2RzdF9tb2RlJzogbWF0Y2guZ3JvdXAoMiksCisgICAgICAgICAgICAnc3JjX3NoYTEnOiBtYXRjaC5ncm91cCgzKSwKKyAgICAgICAgICAgICdkc3Rfc2hhMSc6IG1hdGNoLmdyb3VwKDQpLAorICAgICAgICAgICAgJ3N0YXR1cyc6IG1hdGNoLmdyb3VwKDUpLAorICAgICAgICAgICAgJ3N0YXR1c19zY29yZSc6IG1hdGNoLmdyb3VwKDYpLAorICAgICAgICAgICAgJ3NyYyc6IG1hdGNoLmdyb3VwKDcpLAorICAgICAgICAgICAgJ2RzdCc6IG1hdGNoLmdyb3VwKDEwKQorICAgICAgICB9CisgICAgcmV0dXJuIE5vbmUKKworZGVmIGlzTW9kZUV4ZWMobW9kZSk6CisgICAgIyBSZXR1cm5zIFRydWUgaWYgdGhlIGdpdmVuIGdpdCBtb2RlIHJlcHJlc2VudHMgYW4gZXhlY3V0YWJsZSBmaWxlLAorICAgICMgb3RoZXJ3aXNlIEZhbHNlLgorICAgIHJldHVybiBtb2RlWy0zOl0gPT0gIjc1NSIKKworY2xhc3MgUDRFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiIgQmFzZSBjbGFzcyBmb3IgZXhjZXB0aW9ucyBmcm9tIHRoZSBwNCBjbGllbnQgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4aXRfY29kZSk6CisgICAgICAgIHNlbGYucDRFeGl0Q29kZSA9IGV4aXRfY29kZQorCitjbGFzcyBQNFNlcnZlckV4Y2VwdGlvbihQNEV4Y2VwdGlvbik6CisgICAgIiIiIEJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbnMgd2hlcmUgd2UgZ2V0IHNvbWUga2luZCBvZiBtYXJzaGFsbGVkIHVwIHJlc3VsdCBmcm9tIHRoZSBzZXJ2ZXIgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4aXRfY29kZSwgcDRfcmVzdWx0KToKKyAgICAgICAgc3VwZXIoUDRTZXJ2ZXJFeGNlcHRpb24sIHNlbGYpLl9faW5pdF9fKGV4aXRfY29kZSkKKyAgICAgICAgc2VsZi5wNF9yZXN1bHQgPSBwNF9yZXN1bHQKKyAgICAgICAgc2VsZi5jb2RlID0gcDRfcmVzdWx0WzBdWydjb2RlJ10KKyAgICAgICAgc2VsZi5kYXRhID0gcDRfcmVzdWx0WzBdWydkYXRhJ10KKworY2xhc3MgUDRSZXF1ZXN0U2l6ZUV4Y2VwdGlvbihQNFNlcnZlckV4Y2VwdGlvbik6CisgICAgIiIiIE9uZSBvZiB0aGUgbWF4cmVzdWx0cyBvciBtYXhzY2Fucm93cyBlcnJvcnMgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4aXRfY29kZSwgcDRfcmVzdWx0LCBsaW1pdCk6CisgICAgICAgIHN1cGVyKFA0UmVxdWVzdFNpemVFeGNlcHRpb24sIHNlbGYpLl9faW5pdF9fKGV4aXRfY29kZSwgcDRfcmVzdWx0KQorICAgICAgICBzZWxmLmxpbWl0ID0gbGltaXQKKworY2xhc3MgUDRDb21tYW5kRXhjZXB0aW9uKFA0RXhjZXB0aW9uKToKKyAgICAiIiIgU29tZXRoaW5nIHdlbnQgd3JvbmcgY2FsbGluZyBwNCB3aGljaCBtZWFucyB3ZSBoYXZlIHRvIGdpdmUgdXAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubXNnCisKK2RlZiBpc01vZGVFeGVjQ2hhbmdlZChzcmNfbW9kZSwgZHN0X21vZGUpOgorICAgIHJldHVybiBpc01vZGVFeGVjKHNyY19tb2RlKSAhPSBpc01vZGVFeGVjKGRzdF9tb2RlKQorCitkZWYgcDRDbWRMaXN0KGNtZCwgc3RkaW49Tm9uZSwgc3RkaW5fbW9kZT0ndytiJywgY2I9Tm9uZSwgc2tpcF9pbmZvPUZhbHNlLAorICAgICAgICBlcnJvcnNfYXNfZXhjZXB0aW9ucz1GYWxzZSk6CisKKyAgICBpZiBpc2luc3RhbmNlKGNtZCxiYXNlc3RyaW5nKToKKyAgICAgICAgY21kID0gIi1HICIgKyBjbWQKKyAgICAgICAgZXhwYW5kID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGNtZCA9IFsiLUciXSArIGNtZAorICAgICAgICBleHBhbmQgPSBGYWxzZQorCisgICAgY21kID0gcDRfYnVpbGRfY21kKGNtZCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJPcGVuaW5nIHBpcGU6ICVzXG4iICUgc3RyKGNtZCkpCisKKyAgICAjIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRob3V0CisgICAgIyBzdWJwcm9jZXNzLmNvbW11bmljYXRlKCksIHdoaWNoIHdvdWxkIHB1dCBhbm90aGVyIGNvcHkKKyAgICAjIG9mIHN0ZG91dCBpbnRvIG1lbW9yeS4KKyAgICBzdGRpbl9maWxlID0gTm9uZQorICAgIGlmIHN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICBzdGRpbl9maWxlID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZShwcmVmaXg9J3A0LXN0ZGluJywgbW9kZT1zdGRpbl9tb2RlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHN0ZGluLGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgc3RkaW5fZmlsZS53cml0ZShzdGRpbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBpIGluIHN0ZGluOgorICAgICAgICAgICAgICAgIHN0ZGluX2ZpbGUud3JpdGUoaSArICdcbicpCisgICAgICAgIHN0ZGluX2ZpbGUuZmx1c2goKQorICAgICAgICBzdGRpbl9maWxlLnNlZWsoMCkKKworICAgIHA0ID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPWV4cGFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3RkaW5fZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKworICAgIHJlc3VsdCA9IFtdCisgICAgdHJ5OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZW50cnkgPSBtYXJzaGFsLmxvYWQocDQuc3Rkb3V0KQorICAgICAgICAgICAgaWYgc2tpcF9pbmZvOgorICAgICAgICAgICAgICAgIGlmICdjb2RlJyBpbiBlbnRyeSBhbmQgZW50cnlbJ2NvZGUnXSA9PSAnaW5mbyc6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBjYiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjYihlbnRyeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChlbnRyeSkKKyAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBleGl0Q29kZSA9IHA0LndhaXQoKQorICAgIGlmIGV4aXRDb2RlICE9IDA6CisgICAgICAgIGlmIGVycm9yc19hc19leGNlcHRpb25zOgorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdCkgPiAwOgorICAgICAgICAgICAgICAgIGRhdGEgPSByZXN1bHRbMF0uZ2V0KCdkYXRhJykKKyAgICAgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgICAgICBtID0gcmUuc2VhcmNoKCdUb28gbWFueSByb3dzIHNjYW5uZWQgXChvdmVyIChcZCspXCknLCBkYXRhKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSByZS5zZWFyY2goJ1JlcXVlc3QgdG9vIGxhcmdlIFwob3ZlciAoXGQrKVwpJywgZGF0YSkKKworICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBpbnQobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFA0UmVxdWVzdFNpemVFeGNlcHRpb24oZXhpdENvZGUsIHJlc3VsdCwgbGltaXQpCisKKyAgICAgICAgICAgICAgICByYWlzZSBQNFNlcnZlckV4Y2VwdGlvbihleGl0Q29kZSwgcmVzdWx0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQNEV4Y2VwdGlvbihleGl0Q29kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudHJ5ID0ge30KKyAgICAgICAgICAgIGVudHJ5WyJwNEV4aXRDb2RlIl0gPSBleGl0Q29kZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChlbnRyeSkKKworICAgIHJldHVybiByZXN1bHQKKworZGVmIHA0Q21kKGNtZCk6CisgICAgbGlzdCA9IHA0Q21kTGlzdChjbWQpCisgICAgcmVzdWx0ID0ge30KKyAgICBmb3IgZW50cnkgaW4gbGlzdDoKKyAgICAgICAgcmVzdWx0LnVwZGF0ZShlbnRyeSkKKyAgICByZXR1cm4gcmVzdWx0OworCitkZWYgcDRXaGVyZShkZXBvdFBhdGgpOgorICAgIGlmIG5vdCBkZXBvdFBhdGguZW5kc3dpdGgoIi8iKToKKyAgICAgICAgZGVwb3RQYXRoICs9ICIvIgorICAgIGRlcG90UGF0aExvbmcgPSBkZXBvdFBhdGggKyAiLi4uIgorICAgIG91dHB1dExpc3QgPSBwNENtZExpc3QoWyJ3aGVyZSIsIGRlcG90UGF0aExvbmddKQorICAgIG91dHB1dCA9IE5vbmUKKyAgICBmb3IgZW50cnkgaW4gb3V0cHV0TGlzdDoKKyAgICAgICAgaWYgImRlcG90RmlsZSIgaW4gZW50cnk6CisgICAgICAgICAgICAjIFNlYXJjaCBmb3IgdGhlIGJhc2UgY2xpZW50IHNpZGUgZGVwb3QgcGF0aCwgYXMgbG9uZyBhcyBpdCBzdGFydHMgd2l0aCB0aGUgYnJhbmNoJ3MgUDQgcGF0aC4KKyAgICAgICAgICAgICMgVGhlIGJhc2UgcGF0aCBhbHdheXMgZW5kcyB3aXRoICIvLi4uIi4KKyAgICAgICAgICAgIGlmIGVudHJ5WyJkZXBvdEZpbGUiXS5maW5kKGRlcG90UGF0aCkgPT0gMCBhbmQgZW50cnlbImRlcG90RmlsZSJdWy00Ol0gPT0gIi8uLi4iOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGVudHJ5CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxpZiAiZGF0YSIgaW4gZW50cnk6CisgICAgICAgICAgICBkYXRhID0gZW50cnkuZ2V0KCJkYXRhIikKKyAgICAgICAgICAgIHNwYWNlID0gZGF0YS5maW5kKCIgIikKKyAgICAgICAgICAgIGlmIGRhdGFbOnNwYWNlXSA9PSBkZXBvdFBhdGg6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gZW50cnkKKyAgICAgICAgICAgICAgICBicmVhaworICAgIGlmIG91dHB1dCA9PSBOb25lOgorICAgICAgICByZXR1cm4gIiIKKyAgICBpZiBvdXRwdXRbImNvZGUiXSA9PSAiZXJyb3IiOgorICAgICAgICByZXR1cm4gIiIKKyAgICBjbGllbnRQYXRoID0gIiIKKyAgICBpZiAicGF0aCIgaW4gb3V0cHV0OgorICAgICAgICBjbGllbnRQYXRoID0gb3V0cHV0LmdldCgicGF0aCIpCisgICAgZWxpZiAiZGF0YSIgaW4gb3V0cHV0OgorICAgICAgICBkYXRhID0gb3V0cHV0LmdldCgiZGF0YSIpCisgICAgICAgIGxhc3RTcGFjZSA9IGRhdGEucmZpbmQoIiAiKQorICAgICAgICBjbGllbnRQYXRoID0gZGF0YVtsYXN0U3BhY2UgKyAxOl0KKworICAgIGlmIGNsaWVudFBhdGguZW5kc3dpdGgoIi4uLiIpOgorICAgICAgICBjbGllbnRQYXRoID0gY2xpZW50UGF0aFs6LTNdCisgICAgcmV0dXJuIGNsaWVudFBhdGgKKworZGVmIGN1cnJlbnRHaXRCcmFuY2goKToKKyAgICByZXR1cm4gcmVhZF9waXBlX3RleHQoWyJnaXQiLCAic3ltYm9saWMtcmVmIiwgIi0tc2hvcnQiLCAiLXEiLCAiSEVBRCJdKQorCitkZWYgaXNWYWxpZEdpdERpcihwYXRoKToKKyAgICByZXR1cm4gZ2l0X2RpcihwYXRoKSAhPSBOb25lCisKK2RlZiBwYXJzZVJldmlzaW9uKHJlZik6CisgICAgcmV0dXJuIHJlYWRfcGlwZSgiZ2l0IHJldi1wYXJzZSAlcyIgJSByZWYpLnN0cmlwKCkKKworZGVmIGJyYW5jaEV4aXN0cyhyZWYpOgorICAgIHJldiA9IHJlYWRfcGlwZShbImdpdCIsICJyZXYtcGFyc2UiLCAiLXEiLCAiLS12ZXJpZnkiLCByZWZdLAorICAgICAgICAgICAgICAgICAgICAgaWdub3JlX2Vycm9yPVRydWUpCisgICAgcmV0dXJuIGxlbihyZXYpID4gMAorCitkZWYgZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KGNvbW1pdCk6CisgICAgbG9nTWVzc2FnZSA9ICIiCisKKyAgICAjIyBmaXhtZTogdGl0bGUgaXMgZmlyc3QgbGluZSBvZiBjb21taXQsIG5vdCAxc3QgcGFyYWdyYXBoLgorICAgIGZvdW5kVGl0bGUgPSBGYWxzZQorICAgIGZvciBsb2cgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgImNhdC1maWxlIiwgImNvbW1pdCIsIGNvbW1pdF0pOgorICAgICAgIGlmIG5vdCBmb3VuZFRpdGxlOgorICAgICAgICAgICBpZiBsZW4obG9nKSA9PSAxOgorICAgICAgICAgICAgICAgZm91bmRUaXRsZSA9IFRydWUKKyAgICAgICAgICAgY29udGludWUKKworICAgICAgIGxvZ01lc3NhZ2UgKz0gbG9nCisgICAgcmV0dXJuIGxvZ01lc3NhZ2UKKworZGVmIGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpOgorICAgIHZhbHVlcyA9IHt9CisgICAgZm9yIGxpbmUgaW4gbG9nLnNwbGl0KCJcbiIpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIG0gPSByZS5zZWFyY2ggKHIiXiAqXFtnaXQtcDQ6ICguKilcXSQiLCBsaW5lKQorICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgYXNzaWdubWVudHMgPSBtLmdyb3VwKDEpLnNwbGl0ICgnOicpCisgICAgICAgIGZvciBhIGluIGFzc2lnbm1lbnRzOgorICAgICAgICAgICAgdmFscyA9IGEuc3BsaXQgKCc9JykKKyAgICAgICAgICAgIGtleSA9IHZhbHNbMF0uc3RyaXAoKQorICAgICAgICAgICAgdmFsID0gKCc9Jy5qb2luICh2YWxzWzE6XSkpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHZhbC5lbmRzd2l0aCAoJ1wiJykgYW5kIHZhbC5zdGFydHN3aXRoKCciJyk6CisgICAgICAgICAgICAgICAgdmFsID0gdmFsWzE6LTFdCisKKyAgICAgICAgICAgIHZhbHVlc1trZXldID0gdmFsCisKKyAgICBwYXRocyA9IHZhbHVlcy5nZXQoImRlcG90LXBhdGhzIikKKyAgICBpZiBub3QgcGF0aHM6CisgICAgICAgIHBhdGhzID0gdmFsdWVzLmdldCgiZGVwb3QtcGF0aCIpCisgICAgaWYgcGF0aHM6CisgICAgICAgIHZhbHVlc1snZGVwb3QtcGF0aHMnXSA9IHBhdGhzLnNwbGl0KCcsJykKKyAgICByZXR1cm4gdmFsdWVzCisKK2RlZiBnaXRCcmFuY2hFeGlzdHMoYnJhbmNoKToKKyAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbImdpdCIsICJyZXYtcGFyc2UiLCBicmFuY2hdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpOworICAgIHJldHVybiBwcm9jLndhaXQoKSA9PSAwOworCitkZWYgZ2l0VXBkYXRlUmVmKHJlZiwgbmV3dmFsdWUpOgorICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbImdpdCIsICJ1cGRhdGUtcmVmIiwgcmVmLCBuZXd2YWx1ZV0pCisKK2RlZiBnaXREZWxldGVSZWYocmVmKToKKyAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyJnaXQiLCAidXBkYXRlLXJlZiIsICItZCIsIHJlZl0pCisKK19naXRDb25maWcgPSB7fQorCitkZWYgZ2l0Q29uZmlnKGtleSwgdHlwZVNwZWNpZmllcj1Ob25lKToKKyAgICBpZiBrZXkgbm90IGluIF9naXRDb25maWc6CisgICAgICAgIGNtZCA9IFsgImdpdCIsICJjb25maWciIF0KKyAgICAgICAgaWYgdHlwZVNwZWNpZmllcjoKKyAgICAgICAgICAgIGNtZCArPSBbIHR5cGVTcGVjaWZpZXIgXQorICAgICAgICBjbWQgKz0gWyBrZXkgXQorICAgICAgICBzID0gcmVhZF9waXBlKGNtZCwgaWdub3JlX2Vycm9yPVRydWUpCisgICAgICAgIF9naXRDb25maWdba2V5XSA9IHMuc3RyaXAoKQorICAgIHJldHVybiBfZ2l0Q29uZmlnW2tleV0KKworZGVmIGdpdENvbmZpZ0Jvb2woa2V5KToKKyAgICAiIiJSZXR1cm4gYSBib29sLCB1c2luZyBnaXQgY29uZmlnIC0tYm9vbC4gIEl0IGlzIFRydWUgb25seSBpZiB0aGUKKyAgICAgICB2YXJpYWJsZSBpcyBzZXQgdG8gdHJ1ZSwgYW5kIEZhbHNlIGlmIHNldCB0byBmYWxzZSBvciBub3QgcHJlc2VudAorICAgICAgIGluIHRoZSBjb25maWcuIiIiCisKKyAgICBpZiBrZXkgbm90IGluIF9naXRDb25maWc6CisgICAgICAgIF9naXRDb25maWdba2V5XSA9IGdpdENvbmZpZyhrZXksICctLWJvb2wnKSA9PSAidHJ1ZSIKKyAgICByZXR1cm4gX2dpdENvbmZpZ1trZXldCisKK2RlZiBnaXRDb25maWdJbnQoa2V5KToKKyAgICBpZiBrZXkgbm90IGluIF9naXRDb25maWc6CisgICAgICAgIGNtZCA9IFsgImdpdCIsICJjb25maWciLCAiLS1pbnQiLCBrZXkgXQorICAgICAgICBzID0gcmVhZF9waXBlKGNtZCwgaWdub3JlX2Vycm9yPVRydWUpCisgICAgICAgIHYgPSBzLnN0cmlwKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX2dpdENvbmZpZ1trZXldID0gaW50KGdpdENvbmZpZyhrZXksICctLWludCcpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIF9naXRDb25maWdba2V5XSA9IE5vbmUKKyAgICByZXR1cm4gX2dpdENvbmZpZ1trZXldCisKK2RlZiBnaXRDb25maWdMaXN0KGtleSk6CisgICAgaWYga2V5IG5vdCBpbiBfZ2l0Q29uZmlnOgorICAgICAgICBzID0gcmVhZF9waXBlKFsiZ2l0IiwgImNvbmZpZyIsICItLWdldC1hbGwiLCBrZXldLCBpZ25vcmVfZXJyb3I9VHJ1ZSkKKyAgICAgICAgX2dpdENvbmZpZ1trZXldID0gcy5zdHJpcCgpLnNwbGl0bGluZXMoKQorICAgICAgICBpZiBfZ2l0Q29uZmlnW2tleV0gPT0gWycnXToKKyAgICAgICAgICAgIF9naXRDb25maWdba2V5XSA9IFtdCisgICAgcmV0dXJuIF9naXRDb25maWdba2V5XQorCitkZWYgcDRCcmFuY2hlc0luR2l0KGJyYW5jaGVzQXJlSW5SZW1vdGVzPVRydWUpOgorICAgICIiIkZpbmQgYWxsIHRoZSBicmFuY2hlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJwNC8iLCBsb29raW5nCisgICAgICAgaW4gcmVtb3RlcyBvciBoZWFkcyBhcyBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50LiAgUmV0dXJuCisgICAgICAgYSBkaWN0aW9uYXJ5IG9mIHsgYnJhbmNoOiByZXZpc2lvbiB9IGZvciBlYWNoIG9uZSBmb3VuZC4KKyAgICAgICBUaGUgYnJhbmNoIG5hbWVzIGFyZSB0aGUgc2hvcnQgbmFtZXMsIHdpdGhvdXQgYW55CisgICAgICAgInA0LyIgcHJlZml4LiIiIgorCisgICAgYnJhbmNoZXMgPSB7fQorCisgICAgY21kbGluZSA9ICJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgIgorICAgIGlmIGJyYW5jaGVzQXJlSW5SZW1vdGVzOgorICAgICAgICBjbWRsaW5lICs9ICItLXJlbW90ZXMiCisgICAgZWxzZToKKyAgICAgICAgY21kbGluZSArPSAiLS1icmFuY2hlcyIKKworICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhjbWRsaW5lKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorCisgICAgICAgICMgb25seSBpbXBvcnQgdG8gcDQvCisgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ3A0LycpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBzcGVjaWFsIHN5bWJvbGljIHJlZiB0byBwNC9tYXN0ZXIKKyAgICAgICAgaWYgbGluZSA9PSAicDQvSEVBRCI6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgc3RyaXAgb2ZmIHA0LyBwcmVmaXgKKyAgICAgICAgYnJhbmNoID0gbGluZVtsZW4oInA0LyIpOl0KKworICAgICAgICBicmFuY2hlc1ticmFuY2hdID0gcGFyc2VSZXZpc2lvbihsaW5lKQorCisgICAgcmV0dXJuIGJyYW5jaGVzCisKK2RlZiBicmFuY2hfZXhpc3RzKGJyYW5jaCk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIHJlZiBuYW1lIHJlYWxseSBleGlzdHMuIiIiCisKKyAgICBjbWQgPSBbICJnaXQiLCAicmV2LXBhcnNlIiwgIi0tc3ltYm9saWMiLCAiLS12ZXJpZnkiLCBicmFuY2ggXQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICBvdXQsIF8gPSBwLmNvbW11bmljYXRlKCkKKyAgICBpZiBwLnJldHVybmNvZGU6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgICMgZXhwZWN0IGV4YWN0bHkgb25lIGxpbmUgb2Ygb3V0cHV0OiB0aGUgYnJhbmNoIG5hbWUKKyAgICByZXR1cm4gb3V0LnJzdHJpcCgpID09IGJyYW5jaAorCitkZWYgZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoaGVhZCA9ICJIRUFEIik6CisgICAgYnJhbmNoZXMgPSBwNEJyYW5jaGVzSW5HaXQoKQorICAgICMgbWFwIGZyb20gZGVwb3QtcGF0aCB0byBicmFuY2ggbmFtZQorICAgIGJyYW5jaEJ5RGVwb3RQYXRoID0ge30KKyAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzLmtleXMoKToKKyAgICAgICAgdGlwID0gYnJhbmNoZXNbYnJhbmNoXQorICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQodGlwKQorICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisgICAgICAgIGlmICJkZXBvdC1wYXRocyIgaW4gc2V0dGluZ3M6CisgICAgICAgICAgICBwYXRocyA9ICIsIi5qb2luKHNldHRpbmdzWyJkZXBvdC1wYXRocyJdKQorICAgICAgICAgICAgYnJhbmNoQnlEZXBvdFBhdGhbcGF0aHNdID0gInJlbW90ZXMvcDQvIiArIGJyYW5jaAorCisgICAgc2V0dGluZ3MgPSBOb25lCisgICAgcGFyZW50ID0gMAorICAgIHdoaWxlIHBhcmVudCA8IDY1NTM1OgorICAgICAgICBjb21taXQgPSBoZWFkICsgIn4lcyIgJSBwYXJlbnQKKyAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KGNvbW1pdCkKKyAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorICAgICAgICBpZiAiZGVwb3QtcGF0aHMiIGluIHNldHRpbmdzOgorICAgICAgICAgICAgcGF0aHMgPSAiLCIuam9pbihzZXR0aW5nc1siZGVwb3QtcGF0aHMiXSkKKyAgICAgICAgICAgIGlmIHBhdGhzIGluIGJyYW5jaEJ5RGVwb3RQYXRoOgorICAgICAgICAgICAgICAgIHJldHVybiBbYnJhbmNoQnlEZXBvdFBhdGhbcGF0aHNdLCBzZXR0aW5nc10KKworICAgICAgICBwYXJlbnQgPSBwYXJlbnQgKyAxCisKKyAgICByZXR1cm4gWyIiLCBzZXR0aW5nc10KKworZGVmIGNyZWF0ZU9yVXBkYXRlQnJhbmNoZXNGcm9tT3JpZ2luKGxvY2FsUmVmUHJlZml4ID0gInJlZnMvcmVtb3Rlcy9wNC8iLCBzaWxlbnQ9VHJ1ZSk6CisgICAgaWYgbm90IHNpbGVudDoKKyAgICAgICAgcHJpbnQoIkNyZWF0aW5nL3VwZGF0aW5nIGJyYW5jaChlcykgaW4gJXMgYmFzZWQgb24gb3JpZ2luIGJyYW5jaChlcykiCisgICAgICAgICAgICAgICAlIGxvY2FsUmVmUHJlZml4KQorCisgICAgb3JpZ2luUHJlZml4ID0gIm9yaWdpbi9wNC8iCisKKyAgICBmb3IgbGluZSBpbiByZWFkX3BpcGVfbGluZXMoImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyAtLXJlbW90ZXMiKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiAobm90IGxpbmUuc3RhcnRzd2l0aChvcmlnaW5QcmVmaXgpKSBvciBsaW5lLmVuZHN3aXRoKCJIRUFEIik6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGhlYWROYW1lID0gbGluZVtsZW4ob3JpZ2luUHJlZml4KTpdCisgICAgICAgIHJlbW90ZUhlYWQgPSBsb2NhbFJlZlByZWZpeCArIGhlYWROYW1lCisgICAgICAgIG9yaWdpbkhlYWQgPSBsaW5lCisKKyAgICAgICAgb3JpZ2luYWwgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2coZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KG9yaWdpbkhlYWQpKQorICAgICAgICBpZiAoJ2RlcG90LXBhdGhzJyBub3QgaW4gb3JpZ2luYWwKKyAgICAgICAgICAgIG9yICdjaGFuZ2UnIG5vdCBpbiBvcmlnaW5hbCk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHVwZGF0ZSA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBnaXRCcmFuY2hFeGlzdHMocmVtb3RlSGVhZCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJjcmVhdGluZyAlcyIgJSByZW1vdGVIZWFkKQorICAgICAgICAgICAgdXBkYXRlID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2coZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KHJlbW90ZUhlYWQpKQorICAgICAgICAgICAgaWYgJ2NoYW5nZScgaW4gc2V0dGluZ3M6CisgICAgICAgICAgICAgICAgaWYgc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10gPT0gb3JpZ2luYWxbJ2RlcG90LXBhdGhzJ106CisgICAgICAgICAgICAgICAgICAgIG9yaWdpblA0Q2hhbmdlID0gaW50KG9yaWdpbmFsWydjaGFuZ2UnXSkKKyAgICAgICAgICAgICAgICAgICAgcDRDaGFuZ2UgPSBpbnQoc2V0dGluZ3NbJ2NoYW5nZSddKQorICAgICAgICAgICAgICAgICAgICBpZiBvcmlnaW5QNENoYW5nZSA+IHA0Q2hhbmdlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzICglcykgaXMgbmV3ZXIgdGhhbiAlcyAoJXMpLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVwZGF0aW5nIHA0IGJyYW5jaCBmcm9tIG9yaWdpbi4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAob3JpZ2luSGVhZCwgb3JpZ2luUDRDaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlSGVhZCwgcDRDaGFuZ2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJJZ25vcmluZzogJXMgd2FzIGltcG9ydGVkIGZyb20gJXMgd2hpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHdhcyBpbXBvcnRlZCBmcm9tICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAob3JpZ2luSGVhZCwgJywnLmpvaW4ob3JpZ2luYWxbJ2RlcG90LXBhdGhzJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlSGVhZCwgJywnLmpvaW4oc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10pKSkKKworICAgICAgICBpZiB1cGRhdGU6CisgICAgICAgICAgICBzeXN0ZW0oImdpdCB1cGRhdGUtcmVmICVzICVzIiAlIChyZW1vdGVIZWFkLCBvcmlnaW5IZWFkKSkKKworZGVmIG9yaWdpblA0QnJhbmNoZXNFeGlzdCgpOgorICAgICAgICByZXR1cm4gZ2l0QnJhbmNoRXhpc3RzKCJvcmlnaW4iKSBvciBnaXRCcmFuY2hFeGlzdHMoIm9yaWdpbi9wNCIpIG9yIGdpdEJyYW5jaEV4aXN0cygib3JpZ2luL3A0L21hc3RlciIpCisKKworZGVmIHA0UGFyc2VOdW1lcmljQ2hhbmdlUmFuZ2UocGFydHMpOgorICAgIGNoYW5nZVN0YXJ0ID0gaW50KHBhcnRzWzBdWzE6XSkKKyAgICBpZiBwYXJ0c1sxXSA9PSAnI2hlYWQnOgorICAgICAgICBjaGFuZ2VFbmQgPSBwNF9sYXN0X2NoYW5nZSgpCisgICAgZWxzZToKKyAgICAgICAgY2hhbmdlRW5kID0gaW50KHBhcnRzWzFdKQorCisgICAgcmV0dXJuIChjaGFuZ2VTdGFydCwgY2hhbmdlRW5kKQorCitkZWYgY2hvb3NlQmxvY2tTaXplKGJsb2NrU2l6ZSk6CisgICAgaWYgYmxvY2tTaXplOgorICAgICAgICByZXR1cm4gYmxvY2tTaXplCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRCbG9ja1NpemUKKworZGVmIHA0Q2hhbmdlc0ZvclBhdGhzKGRlcG90UGF0aHMsIGNoYW5nZVJhbmdlLCByZXF1ZXN0ZWRCbG9ja1NpemUpOgorICAgIGFzc2VydCBkZXBvdFBhdGhzCisKKyAgICAjIFBhcnNlIHRoZSBjaGFuZ2UgcmFuZ2UgaW50byBzdGFydCBhbmQgZW5kLiBUcnkgdG8gZmluZCBpbnRlZ2VyCisgICAgIyByZXZpc2lvbiByYW5nZXMgYXMgdGhlc2UgY2FuIGJlIGJyb2tlbiB1cCBpbnRvIGJsb2NrcyB0byBhdm9pZAorICAgICMgaGl0dGluZyBzZXJ2ZXItc2lkZSBsaW1pdHMgKG1heHJvd3MsIG1heHNjYW5yZXN1bHRzKS4gQnV0IGlmCisgICAgIyB0aGF0IGRvZXNuJ3Qgd29yaywgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSByYXcgcmV2aXNpb24gc3BlY2lmaWVyCisgICAgIyBzdHJpbmdzLCB3aXRob3V0IHVzaW5nIGJsb2NrIG1vZGUuCisKKyAgICBpZiBjaGFuZ2VSYW5nZSBpcyBOb25lIG9yIGNoYW5nZVJhbmdlID09ICcnOgorICAgICAgICBjaGFuZ2VTdGFydCA9IDEKKyAgICAgICAgY2hhbmdlRW5kID0gcDRfbGFzdF9jaGFuZ2UoKQorICAgICAgICBibG9ja19zaXplID0gY2hvb3NlQmxvY2tTaXplKHJlcXVlc3RlZEJsb2NrU2l6ZSkKKyAgICBlbHNlOgorICAgICAgICBwYXJ0cyA9IGNoYW5nZVJhbmdlLnNwbGl0KCcsJykKKyAgICAgICAgYXNzZXJ0IGxlbihwYXJ0cykgPT0gMgorICAgICAgICB0cnk6CisgICAgICAgICAgICAoY2hhbmdlU3RhcnQsIGNoYW5nZUVuZCkgPSBwNFBhcnNlTnVtZXJpY0NoYW5nZVJhbmdlKHBhcnRzKQorICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IGNob29zZUJsb2NrU2l6ZShyZXF1ZXN0ZWRCbG9ja1NpemUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgY2hhbmdlU3RhcnQgPSBwYXJ0c1swXVsxOl0KKyAgICAgICAgICAgIGNoYW5nZUVuZCA9IHBhcnRzWzFdCisgICAgICAgICAgICBpZiByZXF1ZXN0ZWRCbG9ja1NpemU6CisgICAgICAgICAgICAgICAgZGllKCJjYW5ub3QgdXNlIC0tY2hhbmdlcy1ibG9jay1zaXplIHdpdGggbm9uLW51bWVyaWMgcmV2aXNpb25zIikKKyAgICAgICAgICAgIGJsb2NrX3NpemUgPSBOb25lCisKKyAgICBjaGFuZ2VzID0gc2V0KCkKKworICAgICMgUmV0cmlldmUgY2hhbmdlcyBhIGJsb2NrIGF0IGEgdGltZSwgdG8gcHJldmVudCBydW5uaW5nCisgICAgIyBpbnRvIGEgTWF4UmVzdWx0cy9NYXhTY2FuUm93cyBlcnJvciBmcm9tIHRoZSBzZXJ2ZXIuIElmCisgICAgIyB3ZSBfZG9fIGhpdCBvbmUgb2YgdGhvc2UgZXJyb3JzLCB0dXJuIGRvd24gdGhlIGJsb2NrIHNpemUKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGNtZCA9IFsnY2hhbmdlcyddCisKKyAgICAgICAgaWYgYmxvY2tfc2l6ZToKKyAgICAgICAgICAgIGVuZCA9IG1pbihjaGFuZ2VFbmQsIGNoYW5nZVN0YXJ0ICsgYmxvY2tfc2l6ZSkKKyAgICAgICAgICAgIHJldmlzaW9uUmFuZ2UgPSAiJWQsJWQiICUgKGNoYW5nZVN0YXJ0LCBlbmQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXZpc2lvblJhbmdlID0gIiVzLCVzIiAlIChjaGFuZ2VTdGFydCwgY2hhbmdlRW5kKQorCisgICAgICAgIGZvciBwIGluIGRlcG90UGF0aHM6CisgICAgICAgICAgICBjbWQgKz0gWyIlcy4uLkAlcyIgJSAocCwgcmV2aXNpb25SYW5nZSldCisKKyAgICAgICAgIyBmZXRjaCB0aGUgY2hhbmdlcworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBwNENtZExpc3QoY21kLCBlcnJvcnNfYXNfZXhjZXB0aW9ucz1UcnVlKQorICAgICAgICBleGNlcHQgUDRSZXF1ZXN0U2l6ZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaWYgbm90IGJsb2NrX3NpemU6CisgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IGUubGltaXQKKyAgICAgICAgICAgIGVsaWYgYmxvY2tfc2l6ZSA+IGUubGltaXQ6CisgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IGUubGltaXQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IG1heCgyLCBibG9ja19zaXplIC8vIDIpCisKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCJibG9jayBzaXplIGVycm9yLCByZXRyeWluZyB3aXRoIGJsb2NrIHNpemUgezB9Ii5mb3JtYXQoYmxvY2tfc2l6ZSkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBleGNlcHQgUDRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGRpZSgnRXJyb3IgcmV0cmlldmluZyBjaGFuZ2VzIGRlc2NyaXB0aW9uICh7MH0pJy5mb3JtYXQoZS5wNEV4aXRDb2RlKSkKKworICAgICAgICAjIEluc2VydCBjaGFuZ2VzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIKKyAgICAgICAgZm9yIGVudHJ5IGluIHJldmVyc2VkKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAnY2hhbmdlJyBub3QgaW4gZW50cnk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNoYW5nZXMuYWRkKGludChlbnRyeVsnY2hhbmdlJ10pKQorCisgICAgICAgIGlmIG5vdCBibG9ja19zaXplOgorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBlbmQgPj0gY2hhbmdlRW5kOgorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBjaGFuZ2VTdGFydCA9IGVuZCArIDEKKworICAgIGNoYW5nZXMgPSBzb3J0ZWQoY2hhbmdlcykKKyAgICByZXR1cm4gY2hhbmdlcworCitkZWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBwcmVmaXgpOgorICAgICMgVGhpcyBtZXRob2QgdHJpZXMgdG8gcmVtZWR5IGEgcG90ZW50aWFsIG1peGVkLWNhc2UgaXNzdWU6CisgICAgIworICAgICMgSWYgVXNlckEgYWRkcyAgLy9kZXBvdC9EaXJBL2ZpbGUxCisgICAgIyBhbmQgVXNlckIgYWRkcyAvL2RlcG90L2RpcmEvZmlsZTIKKyAgICAjCisgICAgIyB3ZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGEgcHJvYmxlbS4gSWYgeW91IGhhdmUgY29yZS5pZ25vcmVjYXNlPXRydWUsCisgICAgIyB3ZSB0cmVhdCBEaXJBIGFuZCBkaXJhIGFzIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgIGlmIGdpdENvbmZpZ0Jvb2woImNvcmUuaWdub3JlY2FzZSIpOgorICAgICAgICByZXR1cm4gcGF0aC5sb3dlcigpLnN0YXJ0c3dpdGgocHJlZml4Lmxvd2VyKCkpCisgICAgcmV0dXJuIHBhdGguc3RhcnRzd2l0aChwcmVmaXgpCisKK2RlZiBnZXRDbGllbnRTcGVjKCk6CisgICAgIiIiTG9vayBhdCB0aGUgcDQgY2xpZW50IHNwZWMsIGNyZWF0ZSBhIFZpZXcoKSBvYmplY3QgdGhhdCBjb250YWlucworICAgICAgIGFsbCB0aGUgbWFwcGluZ3MsIGFuZCByZXR1cm4gaXQuIiIiCisKKyAgICBzcGVjTGlzdCA9IHA0Q21kTGlzdCgiY2xpZW50IC1vIikKKyAgICBpZiBsZW4oc3BlY0xpc3QpICE9IDE6CisgICAgICAgIGRpZSgnT3V0cHV0IGZyb20gImNsaWVudCAtbyIgaXMgJWQgbGluZXMsIGV4cGVjdGluZyAxJyAlCisgICAgICAgICAgICBsZW4oc3BlY0xpc3QpKQorCisgICAgIyBkaWN0aW9uYXJ5IG9mIGFsbCBjbGllbnQgcGFyYW1ldGVycworICAgIGVudHJ5ID0gc3BlY0xpc3RbMF0KKworICAgICMgdGhlIC8vY2xpZW50LyBuYW1lCisgICAgY2xpZW50X25hbWUgPSBlbnRyeVsiQ2xpZW50Il0KKworICAgICMganVzdCB0aGUga2V5cyB0aGF0IHN0YXJ0IHdpdGggIlZpZXciCisgICAgdmlld19rZXlzID0gWyBrIGZvciBrIGluIGVudHJ5LmtleXMoKSBpZiBrLnN0YXJ0c3dpdGgoIlZpZXciKSBdCisKKyAgICAjIGhvbGQgdGhpcyBuZXcgVmlldworICAgIHZpZXcgPSBWaWV3KGNsaWVudF9uYW1lKQorCisgICAgIyBhcHBlbmQgdGhlIGxpbmVzLCBpbiBvcmRlciwgdG8gdGhlIHZpZXcKKyAgICBmb3Igdmlld19udW0gaW4gcmFuZ2UobGVuKHZpZXdfa2V5cykpOgorICAgICAgICBrID0gIlZpZXclZCIgJSB2aWV3X251bQorICAgICAgICBpZiBrIG5vdCBpbiB2aWV3X2tleXM6CisgICAgICAgICAgICBkaWUoIkV4cGVjdGVkIHZpZXcga2V5ICVzIG1pc3NpbmciICUgaykKKyAgICAgICAgdmlldy5hcHBlbmQoZW50cnlba10pCisKKyAgICByZXR1cm4gdmlldworCitkZWYgZ2V0Q2xpZW50Um9vdCgpOgorICAgICIiIkdyYWIgdGhlIGNsaWVudCBkaXJlY3RvcnkuIiIiCisKKyAgICBvdXRwdXQgPSBwNENtZExpc3QoImNsaWVudCAtbyIpCisgICAgaWYgbGVuKG91dHB1dCkgIT0gMToKKyAgICAgICAgZGllKCdPdXRwdXQgZnJvbSAiY2xpZW50IC1vIiBpcyAlZCBsaW5lcywgZXhwZWN0aW5nIDEnICUgbGVuKG91dHB1dCkpCisKKyAgICBlbnRyeSA9IG91dHB1dFswXQorICAgIGlmICJSb290IiBub3QgaW4gZW50cnk6CisgICAgICAgIGRpZSgnQ2xpZW50IGhhcyBubyAiUm9vdCInKQorCisgICAgcmV0dXJuIGVudHJ5WyJSb290Il0KKworIworIyBQNCB3aWxkY2FyZHMgYXJlIG5vdCBhbGxvd2VkIGluIGZpbGVuYW1lcy4gIFA0IGNvbXBsYWlucworIyBpZiB5b3Ugc2ltcGx5IGFkZCB0aGVtLCBidXQgeW91IGNhbiBmb3JjZSBpdCB3aXRoICItZiIsIGluCisjIHdoaWNoIGNhc2UgaXQgdHJhbnNsYXRlcyB0aGVtIGludG8gJXh4IGVuY29kaW5nIGludGVybmFsbHkuCisjCitkZWYgd2lsZGNhcmRfZGVjb2RlKHBhdGgpOgorICAgICMgU2VhcmNoIGZvciBhbmQgZml4IGp1c3QgdGhlc2UgZm91ciBjaGFyYWN0ZXJzLiAgRG8gJSBsYXN0IHNvCisgICAgIyB0aGF0IGZpeGluZyBpdCBkb2VzIG5vdCBpbmFkdmVydGVudGx5IGNyZWF0ZSBuZXcgJS1lc2NhcGVzLgorICAgICMgQ2Fubm90IGhhdmUgKiBpbiBhIGZpbGVuYW1lIGluIHdpbmRvd3M7IHVudGVzdGVkIGFzIHRvCisgICAgIyB3aGF0IHA0IHdvdWxkIGRvIGluIHN1Y2ggYSBjYXNlLgorICAgIGlmIG5vdCBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiV2luZG93cyI6CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIiUyQSIsICIqIikKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIlMjMiLCAiIyIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIlNDAiLCAiQCIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIlMjUiLCAiJSIpCisgICAgcmV0dXJuIHBhdGgKKworZGVmIHdpbGRjYXJkX2VuY29kZShwYXRoKToKKyAgICAjIGRvICUgZmlyc3QgdG8gYXZvaWQgZG91YmxlLWVuY29kaW5nIHRoZSAlcyBpbnRyb2R1Y2VkIGhlcmUKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIlIiwgIiUyNSIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIqIiwgIiUyQSIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCIjIiwgIiUyMyIpIFwKKyAgICAgICAgICAgICAgIC5yZXBsYWNlKCJAIiwgIiU0MCIpCisgICAgcmV0dXJuIHBhdGgKKworZGVmIHdpbGRjYXJkX3ByZXNlbnQocGF0aCk6CisgICAgbSA9IHJlLnNlYXJjaCgiWyojQCVdIiwgcGF0aCkKKyAgICByZXR1cm4gbSBpcyBub3QgTm9uZQorCitjbGFzcyBMYXJnZUZpbGVTeXN0ZW0ob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBsYXJnZSBmaWxlIHN5c3RlbSBzdXBwb3J0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlVG9HaXRTdHJlYW0pOgorICAgICAgICBzZWxmLmxhcmdlRmlsZXMgPSBzZXQoKQorICAgICAgICBzZWxmLndyaXRlVG9HaXRTdHJlYW0gPSB3cml0ZVRvR2l0U3RyZWFtCisKKyAgICBkZWYgZ2VuZXJhdGVQb2ludGVyKHNlbGYsIGNsb25lRGVzdGluYXRpb24sIGNvbnRlbnRGaWxlKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb250ZW50IG9mIGEgcG9pbnRlciBmaWxlIHRoYXQgaXMgc3RvcmVkIGluIEdpdCBpbnN0ZWFkIG9mCisgICAgICAgICAgIHRoZSBhY3R1YWwgY29udGVudC4iIiIKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiTWV0aG9kICdnZW5lcmF0ZVBvaW50ZXInIHJlcXVpcmVkIGluICIgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgZGVmIHB1c2hGaWxlKHNlbGYsIGxvY2FsTGFyZ2VGaWxlKToKKyAgICAgICAgIiIiUHVzaCB0aGUgYWN0dWFsIGNvbnRlbnQgd2hpY2ggaXMgbm90IHN0b3JlZCBpbiB0aGUgR2l0IHJlcG9zaXRvcnkgdG8KKyAgICAgICAgICAgYSBzZXJ2ZXIuIiIiCisgICAgICAgIGFzc2VydCBGYWxzZSwgIk1ldGhvZCAncHVzaEZpbGUnIHJlcXVpcmVkIGluICIgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgZGVmIGhhc0xhcmdlRmlsZUV4dGVuc2lvbihzZWxmLCByZWxQYXRoKToKKyAgICAgICAgcmV0dXJuIHJlZHVjZSgKKyAgICAgICAgICAgIGxhbWJkYSBhLCBiOiBhIG9yIGIsCisgICAgICAgICAgICBbcmVsUGF0aC5lbmRzd2l0aCgnLicgKyBlKSBmb3IgZSBpbiBnaXRDb25maWdMaXN0KCdnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucycpXSwKKyAgICAgICAgICAgIEZhbHNlCisgICAgICAgICkKKworICAgIGRlZiBnZW5lcmF0ZVRlbXBGaWxlKHNlbGYsIGNvbnRlbnRzKToKKyAgICAgICAgY29udGVudEZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUocHJlZml4PSdnaXQtcDQtbGFyZ2UtZmlsZScsIGRlbGV0ZT1GYWxzZSkKKyAgICAgICAgZm9yIGQgaW4gY29udGVudHM6CisgICAgICAgICAgICBjb250ZW50RmlsZS53cml0ZShkKQorICAgICAgICBjb250ZW50RmlsZS5jbG9zZSgpCisgICAgICAgIHJldHVybiBjb250ZW50RmlsZS5uYW1lCisKKyAgICBkZWYgZXhjZWVkc0xhcmdlRmlsZVRocmVzaG9sZChzZWxmLCByZWxQYXRoLCBjb250ZW50cyk6CisgICAgICAgIGlmIGdpdENvbmZpZ0ludCgnZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCcpOgorICAgICAgICAgICAgY29udGVudHNTaXplID0gc3VtKGxlbihkKSBmb3IgZCBpbiBjb250ZW50cykKKyAgICAgICAgICAgIGlmIGNvbnRlbnRzU2l6ZSA+IGdpdENvbmZpZ0ludCgnZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCcpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIGdpdENvbmZpZ0ludCgnZ2l0LXA0LmxhcmdlRmlsZUNvbXByZXNzZWRUaHJlc2hvbGQnKToKKyAgICAgICAgICAgIGNvbnRlbnRzU2l6ZSA9IHN1bShsZW4oZCkgZm9yIGQgaW4gY29udGVudHMpCisgICAgICAgICAgICBpZiBjb250ZW50c1NpemUgPD0gZ2l0Q29uZmlnSW50KCdnaXQtcDQubGFyZ2VGaWxlQ29tcHJlc3NlZFRocmVzaG9sZCcpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgY29udGVudFRlbXBGaWxlID0gc2VsZi5nZW5lcmF0ZVRlbXBGaWxlKGNvbnRlbnRzKQorICAgICAgICAgICAgY29tcHJlc3NlZENvbnRlbnRGaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKHByZWZpeD0nZ2l0LXA0LWxhcmdlLWZpbGUnLCBkZWxldGU9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGNvbXByZXNzZWRDb250ZW50RmlsZSwgbW9kZT0ndycpIGFzIHpmOgorICAgICAgICAgICAgICAgIHpmLndyaXRlKGNvbnRlbnRUZW1wRmlsZSwgY29tcHJlc3NfdHlwZT16aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICAgICAgICAgICAgICBjb21wcmVzc2VkQ29udGVudHNTaXplID0gemYuaW5mb2xpc3QoKVswXS5jb21wcmVzc19zaXplCisgICAgICAgICAgICBvcy5yZW1vdmUoY29udGVudFRlbXBGaWxlKQorICAgICAgICAgICAgaWYgY29tcHJlc3NlZENvbnRlbnRzU2l6ZSA+IGdpdENvbmZpZ0ludCgnZ2l0LXA0LmxhcmdlRmlsZUNvbXByZXNzZWRUaHJlc2hvbGQnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhZGRMYXJnZUZpbGUoc2VsZiwgcmVsUGF0aCk6CisgICAgICAgIHNlbGYubGFyZ2VGaWxlcy5hZGQocmVsUGF0aCkKKworICAgIGRlZiByZW1vdmVMYXJnZUZpbGUoc2VsZiwgcmVsUGF0aCk6CisgICAgICAgIHNlbGYubGFyZ2VGaWxlcy5yZW1vdmUocmVsUGF0aCkKKworICAgIGRlZiBpc0xhcmdlRmlsZShzZWxmLCByZWxQYXRoKToKKyAgICAgICAgcmV0dXJuIHJlbFBhdGggaW4gc2VsZi5sYXJnZUZpbGVzCisKKyAgICBkZWYgcHJvY2Vzc0NvbnRlbnQoc2VsZiwgZ2l0X21vZGUsIHJlbFBhdGgsIGNvbnRlbnRzKToKKyAgICAgICAgIiIiUHJvY2Vzc2VzIHRoZSBjb250ZW50IG9mIGdpdCBmYXN0IGltcG9ydC4gVGhpcyBtZXRob2QgZGVjaWRlcyBpZiBhCisgICAgICAgICAgIGZpbGUgaXMgc3RvcmVkIGluIHRoZSBsYXJnZSBmaWxlIHN5c3RlbSBhbmQgaGFuZGxlcyBhbGwgbmVjZXNzYXJ5CisgICAgICAgICAgIHN0ZXBzLiIiIgorICAgICAgICBpZiBzZWxmLmV4Y2VlZHNMYXJnZUZpbGVUaHJlc2hvbGQocmVsUGF0aCwgY29udGVudHMpIG9yIHNlbGYuaGFzTGFyZ2VGaWxlRXh0ZW5zaW9uKHJlbFBhdGgpOgorICAgICAgICAgICAgY29udGVudFRlbXBGaWxlID0gc2VsZi5nZW5lcmF0ZVRlbXBGaWxlKGNvbnRlbnRzKQorICAgICAgICAgICAgKHBvaW50ZXJfZ2l0X21vZGUsIGNvbnRlbnRzLCBsb2NhbExhcmdlRmlsZSkgPSBzZWxmLmdlbmVyYXRlUG9pbnRlcihjb250ZW50VGVtcEZpbGUpCisgICAgICAgICAgICBpZiBwb2ludGVyX2dpdF9tb2RlOgorICAgICAgICAgICAgICAgIGdpdF9tb2RlID0gcG9pbnRlcl9naXRfbW9kZQorICAgICAgICAgICAgaWYgbG9jYWxMYXJnZUZpbGU6CisgICAgICAgICAgICAgICAgIyBNb3ZlIHRlbXAgZmlsZSB0byBmaW5hbCBsb2NhdGlvbiBpbiBsYXJnZSBmaWxlIHN5c3RlbQorICAgICAgICAgICAgICAgIGxhcmdlRmlsZURpciA9IG9zLnBhdGguZGlybmFtZShsb2NhbExhcmdlRmlsZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihsYXJnZUZpbGVEaXIpOgorICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhsYXJnZUZpbGVEaXIpCisgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoY29udGVudFRlbXBGaWxlLCBsb2NhbExhcmdlRmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFkZExhcmdlRmlsZShyZWxQYXRoKQorICAgICAgICAgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woJ2dpdC1wNC5sYXJnZUZpbGVQdXNoJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucHVzaEZpbGUobG9jYWxMYXJnZUZpbGUpCisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXMgbW92ZWQgdG8gbGFyZ2UgZmlsZSBzeXN0ZW0gKCVzKVxuIiAlIChyZWxQYXRoLCBsb2NhbExhcmdlRmlsZSkpCisgICAgICAgIHJldHVybiAoZ2l0X21vZGUsIGNvbnRlbnRzKQorCitjbGFzcyBNb2NrTEZTKExhcmdlRmlsZVN5c3RlbSk6CisgICAgIiIiTW9jayBsYXJnZSBmaWxlIHN5c3RlbSBmb3IgdGVzdGluZy4iIiIKKworICAgIGRlZiBnZW5lcmF0ZVBvaW50ZXIoc2VsZiwgY29udGVudEZpbGUpOgorICAgICAgICAiIiJUaGUgcG9pbnRlciBjb250ZW50IGlzIHRoZSBvcmlnaW5hbCBjb250ZW50IHByZWZpeGVkIHdpdGggInBvaW50ZXItIi4KKyAgICAgICAgICAgVGhlIGxvY2FsIGZpbGVuYW1lIG9mIHRoZSBsYXJnZSBmaWxlIHN0b3JhZ2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBmaWxlIGNvbnRlbnQuCisgICAgICAgICAgICIiIgorICAgICAgICB3aXRoIG9wZW4oY29udGVudEZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGNvbnRlbnQgPSBuZXh0KGYpCisgICAgICAgICAgICBnaXRNb2RlID0gJzEwMDY0NCcKKyAgICAgICAgICAgIHBvaW50ZXJDb250ZW50cyA9ICdwb2ludGVyLScgKyBjb250ZW50CisgICAgICAgICAgICBsb2NhbExhcmdlRmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJy5naXQnLCAnbW9jay1zdG9yYWdlJywgJ2xvY2FsJywgY29udGVudFs6LTFdKQorICAgICAgICAgICAgcmV0dXJuIChnaXRNb2RlLCBwb2ludGVyQ29udGVudHMsIGxvY2FsTGFyZ2VGaWxlKQorCisgICAgZGVmIHB1c2hGaWxlKHNlbGYsIGxvY2FsTGFyZ2VGaWxlKToKKyAgICAgICAgIiIiVGhlIHJlbW90ZSBmaWxlbmFtZSBvZiB0aGUgbGFyZ2UgZmlsZSBzdG9yYWdlIGlzIHRoZSBzYW1lIGFzIHRoZSBsb2NhbAorICAgICAgICAgICBvbmUgYnV0IGluIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIiIiCisgICAgICAgIHJlbW90ZVBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGxvY2FsTGFyZ2VGaWxlKSwgJy4uJywgJ3JlbW90ZScpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZW1vdGVQYXRoKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHJlbW90ZVBhdGgpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShsb2NhbExhcmdlRmlsZSwgb3MucGF0aC5qb2luKHJlbW90ZVBhdGgsIG9zLnBhdGguYmFzZW5hbWUobG9jYWxMYXJnZUZpbGUpKSkKKworY2xhc3MgR2l0TEZTKExhcmdlRmlsZVN5c3RlbSk6CisgICAgIiIiR2l0IExGUyBhcyBiYWNrZW5kIGZvciB0aGUgZ2l0LXA0IGxhcmdlIGZpbGUgc3lzdGVtLgorICAgICAgIFNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8gZm9yIGRldGFpbHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBMYXJnZUZpbGVTeXN0ZW0uX19pbml0X18oc2VsZiwgKmFyZ3MpCisgICAgICAgIHNlbGYuYmFzZUdpdEF0dHJpYnV0ZXMgPSBbXQorCisgICAgZGVmIGdlbmVyYXRlUG9pbnRlcihzZWxmLCBjb250ZW50RmlsZSk6CisgICAgICAgICIiIkdlbmVyYXRlIGEgR2l0IExGUyBwb2ludGVyIGZvciB0aGUgY29udGVudC4gUmV0dXJuIExGUyBQb2ludGVyIGZpbGUKKyAgICAgICAgICAgbW9kZSBhbmQgY29udGVudCB3aGljaCBpcyBzdG9yZWQgaW4gdGhlIEdpdCByZXBvc2l0b3J5IGluc3RlYWQgb2YKKyAgICAgICAgICAgdGhlIGFjdHVhbCBjb250ZW50LiBSZXR1cm4gYWxzbyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZSBhY3R1YWwKKyAgICAgICAgICAgY29udGVudC4KKyAgICAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguZ2V0c2l6ZShjb250ZW50RmlsZSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgJycsIE5vbmUpCisKKyAgICAgICAgcG9pbnRlclByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgWydnaXQnLCAnbGZzJywgJ3BvaW50ZXInLCAnLS1maWxlPScgKyBjb250ZW50RmlsZV0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFCisgICAgICAgICkKKyAgICAgICAgcG9pbnRlckZpbGUgPSBwb2ludGVyUHJvY2Vzcy5zdGRvdXQucmVhZCgpCisgICAgICAgIGlmIHBvaW50ZXJQcm9jZXNzLndhaXQoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb250ZW50RmlsZSkKKyAgICAgICAgICAgIGRpZSgnZ2l0LWxmcyBwb2ludGVyIGNvbW1hbmQgZmFpbGVkLiBEaWQgeW91IGluc3RhbGwgdGhlIGV4dGVuc2lvbj8nKQorCisgICAgICAgICMgR2l0IExGUyByZW1vdmVkIHRoZSBwcmVhbWJsZSBpbiB0aGUgb3V0cHV0IG9mIHRoZSAncG9pbnRlcicgY29tbWFuZAorICAgICAgICAjIHN0YXJ0aW5nIGZyb20gdmVyc2lvbiAxLjIuMC4gQ2hlY2sgZm9yIHRoZSBwcmVhbWJsZSBoZXJlIHRvIHN1cHBvcnQKKyAgICAgICAgIyBlYXJsaWVyIHZlcnNpb25zLgorICAgICAgICAjIGMuZi4gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9naXQtbGZzL2NvbW1pdC9kYTI5MzVkOWE3Mzk1OTJiYzc3NWM5OGQ4ZWY0ZGY5YzcyZWEzYjQzCisgICAgICAgIGlmIHBvaW50ZXJGaWxlLnN0YXJ0c3dpdGgoJ0dpdCBMRlMgcG9pbnRlciBmb3InKToKKyAgICAgICAgICAgIHBvaW50ZXJGaWxlID0gcmUuc3ViKHInR2l0IExGUyBwb2ludGVyIGZvci4qXG5cbicsICcnLCBwb2ludGVyRmlsZSkKKworICAgICAgICBvaWQgPSByZS5zZWFyY2gocideb2lkIFx3KzooXHcrKScsIHBvaW50ZXJGaWxlLCByZS5NVUxUSUxJTkUpLmdyb3VwKDEpCisgICAgICAgICMgaWYgc29tZW9uZSB1c2UgZXh0ZXJuYWwgbGZzLnN0b3JhZ2UgKCBub3QgaW4gbG9jYWwgcmVwbyBnaXQgKQorICAgICAgICBsZnNfcGF0aCA9IGdpdENvbmZpZygnbGZzLnN0b3JhZ2UnKQorICAgICAgICBpZiBub3QgbGZzX3BhdGg6CisgICAgICAgICAgICBsZnNfcGF0aCA9ICdsZnMnCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxmc19wYXRoKToKKyAgICAgICAgICAgIGxmc19wYXRoID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnLmdpdCcsIGxmc19wYXRoKQorICAgICAgICBsb2NhbExhcmdlRmlsZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIGxmc19wYXRoLAorICAgICAgICAgICAgJ29iamVjdHMnLCBvaWRbOjJdLCBvaWRbMjo0XSwKKyAgICAgICAgICAgIG9pZCwKKyAgICAgICAgKQorICAgICAgICAjIExGUyBTcGVjIHN0YXRlcyB0aGF0IHBvaW50ZXIgZmlsZXMgc2hvdWxkIG5vdCBoYXZlIHRoZSBleGVjdXRhYmxlIGJpdCBzZXQuCisgICAgICAgIGdpdE1vZGUgPSAnMTAwNjQ0JworICAgICAgICByZXR1cm4gKGdpdE1vZGUsIHBvaW50ZXJGaWxlLCBsb2NhbExhcmdlRmlsZSkKKworICAgIGRlZiBwdXNoRmlsZShzZWxmLCBsb2NhbExhcmdlRmlsZSk6CisgICAgICAgIHVwbG9hZFByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgWydnaXQnLCAnbGZzJywgJ3B1c2gnLCAnLS1vYmplY3QtaWQnLCAnb3JpZ2luJywgb3MucGF0aC5iYXNlbmFtZShsb2NhbExhcmdlRmlsZSldCisgICAgICAgICkKKyAgICAgICAgaWYgdXBsb2FkUHJvY2Vzcy53YWl0KCk6CisgICAgICAgICAgICBkaWUoJ2dpdC1sZnMgcHVzaCBjb21tYW5kIGZhaWxlZC4gRGlkIHlvdSBkZWZpbmUgYSByZW1vdGU/JykKKworICAgIGRlZiBnZW5lcmF0ZUdpdEF0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICBzZWxmLmJhc2VHaXRBdHRyaWJ1dGVzICsKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICcjXG4nLAorICAgICAgICAgICAgICAgICcjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pXG4nLAorICAgICAgICAgICAgICAgICcjXG4nLAorICAgICAgICAgICAgXSArCisgICAgICAgICAgICBbJyouJyArIGYucmVwbGFjZSgnICcsICdbWzpzcGFjZTpdXScpICsgJyBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dFxuJworICAgICAgICAgICAgICAgIGZvciBmIGluIHNvcnRlZChnaXRDb25maWdMaXN0KCdnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucycpKQorICAgICAgICAgICAgXSArCisgICAgICAgICAgICBbJy8nICsgZi5yZXBsYWNlKCcgJywgJ1tbOnNwYWNlOl1dJykgKyAnIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0XG4nCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gc29ydGVkKHNlbGYubGFyZ2VGaWxlcykgaWYgbm90IHNlbGYuaGFzTGFyZ2VGaWxlRXh0ZW5zaW9uKGYpCisgICAgICAgICAgICBdCisgICAgICAgICkKKworICAgIGRlZiBhZGRMYXJnZUZpbGUoc2VsZiwgcmVsUGF0aCk6CisgICAgICAgIExhcmdlRmlsZVN5c3RlbS5hZGRMYXJnZUZpbGUoc2VsZiwgcmVsUGF0aCkKKyAgICAgICAgc2VsZi53cml0ZVRvR2l0U3RyZWFtKCcxMDA2NDQnLCAnLmdpdGF0dHJpYnV0ZXMnLCBzZWxmLmdlbmVyYXRlR2l0QXR0cmlidXRlcygpKQorCisgICAgZGVmIHJlbW92ZUxhcmdlRmlsZShzZWxmLCByZWxQYXRoKToKKyAgICAgICAgTGFyZ2VGaWxlU3lzdGVtLnJlbW92ZUxhcmdlRmlsZShzZWxmLCByZWxQYXRoKQorICAgICAgICBzZWxmLndyaXRlVG9HaXRTdHJlYW0oJzEwMDY0NCcsICcuZ2l0YXR0cmlidXRlcycsIHNlbGYuZ2VuZXJhdGVHaXRBdHRyaWJ1dGVzKCkpCisKKyAgICBkZWYgcHJvY2Vzc0NvbnRlbnQoc2VsZiwgZ2l0X21vZGUsIHJlbFBhdGgsIGNvbnRlbnRzKToKKyAgICAgICAgaWYgcmVsUGF0aCA9PSAnLmdpdGF0dHJpYnV0ZXMnOgorICAgICAgICAgICAgc2VsZi5iYXNlR2l0QXR0cmlidXRlcyA9IGNvbnRlbnRzCisgICAgICAgICAgICByZXR1cm4gKGdpdF9tb2RlLCBzZWxmLmdlbmVyYXRlR2l0QXR0cmlidXRlcygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIExhcmdlRmlsZVN5c3RlbS5wcm9jZXNzQ29udGVudChzZWxmLCBnaXRfbW9kZSwgcmVsUGF0aCwgY29udGVudHMpCisKK2NsYXNzIENvbW1hbmQ6CisgICAgZGVsZXRlX2FjdGlvbnMgPSAoICJkZWxldGUiLCAibW92ZS9kZWxldGUiLCAicHVyZ2UiICkKKyAgICBhZGRfYWN0aW9ucyA9ICggImFkZCIsICJicmFuY2giLCAibW92ZS9hZGQiICkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi51c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIgorICAgICAgICBzZWxmLm5lZWRzR2l0ID0gVHJ1ZQorICAgICAgICBzZWxmLnZlcmJvc2UgPSBGYWxzZQorCisgICAgIyBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgImFwcGVuZCIgdXBkYXRlX3NoZWx2ZSBhY3Rpb24KKyAgICBkZWYgZW5zdXJlX3ZhbHVlKHNlbGYsIGF0dHIsIHZhbHVlKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgYXR0cikgb3IgZ2V0YXR0cihzZWxmLCBhdHRyKSBpcyBOb25lOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0cikKKworY2xhc3MgUDRVc2VyTWFwOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi51c2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyID0gRmFsc2UKKyAgICAgICAgc2VsZi5teVA0VXNlcklkID0gTm9uZQorCisgICAgZGVmIHA0VXNlcklkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm15UDRVc2VySWQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5teVA0VXNlcklkCisKKyAgICAgICAgcmVzdWx0cyA9IHA0Q21kTGlzdCgidXNlciAtbyIpCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiAnVXNlcicgaW4gcjoKKyAgICAgICAgICAgICAgICBzZWxmLm15UDRVc2VySWQgPSByWydVc2VyJ10KKyAgICAgICAgICAgICAgICByZXR1cm4gclsnVXNlciddCisgICAgICAgIGRpZSgiQ291bGQgbm90IGZpbmQgeW91ciBwNCB1c2VyIGlkIikKKworICAgIGRlZiBwNFVzZXJJc01lKHNlbGYsIHA0VXNlcik6CisgICAgICAgICMgcmV0dXJuIFRydWUgaWYgdGhlIGdpdmVuIHA0IHVzZXIgaXMgYWN0dWFsbHkgbWUKKyAgICAgICAgbWUgPSBzZWxmLnA0VXNlcklkKCkKKyAgICAgICAgaWYgbm90IHA0VXNlciBvciBwNFVzZXIgIT0gbWU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0VXNlckNhY2hlRmlsZW5hbWUoc2VsZik6CisgICAgICAgIGhvbWUgPSBvcy5lbnZpcm9uLmdldCgiSE9NRSIsIG9zLmVudmlyb24uZ2V0KCJVU0VSUFJPRklMRSIpKQorICAgICAgICByZXR1cm4gaG9tZSArICIvLmdpdHA0LXVzZXJjYWNoZS50eHQiCisKKyAgICBkZWYgZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudXNlcnMgPSB7fQorICAgICAgICBzZWxmLmVtYWlscyA9IHt9CisKKyAgICAgICAgZm9yIG91dHB1dCBpbiBwNENtZExpc3QoInVzZXJzIik6CisgICAgICAgICAgICBpZiAiVXNlciIgbm90IGluIG91dHB1dDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi51c2Vyc1tvdXRwdXRbIlVzZXIiXV0gPSBvdXRwdXRbIkZ1bGxOYW1lIl0gKyAiIDwiICsgb3V0cHV0WyJFbWFpbCJdICsgIj4iCisgICAgICAgICAgICBzZWxmLmVtYWlsc1tvdXRwdXRbIkVtYWlsIl1dID0gb3V0cHV0WyJVc2VyIl0KKworICAgICAgICBtYXBVc2VyQ29uZmlnUmVnZXggPSByZS5jb21waWxlKHIiXlxzKihcUyspXHMqPVxzKiguKylccyo8KFxTKyk+XHMqJCIsIHJlLlZFUkJPU0UpCisgICAgICAgIGZvciBtYXBVc2VyQ29uZmlnIGluIGdpdENvbmZpZ0xpc3QoImdpdC1wNC5tYXBVc2VyIik6CisgICAgICAgICAgICBtYXBVc2VyID0gbWFwVXNlckNvbmZpZ1JlZ2V4LmZpbmRhbGwobWFwVXNlckNvbmZpZykKKyAgICAgICAgICAgIGlmIG1hcFVzZXIgYW5kIGxlbihtYXBVc2VyWzBdKSA9PSAzOgorICAgICAgICAgICAgICAgIHVzZXIgPSBtYXBVc2VyWzBdWzBdCisgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBtYXBVc2VyWzBdWzFdCisgICAgICAgICAgICAgICAgZW1haWwgPSBtYXBVc2VyWzBdWzJdCisgICAgICAgICAgICAgICAgc2VsZi51c2Vyc1t1c2VyXSA9IGZ1bGxuYW1lICsgIiA8IiArIGVtYWlsICsgIj4iCisgICAgICAgICAgICAgICAgc2VsZi5lbWFpbHNbZW1haWxdID0gdXNlcgorCisgICAgICAgIHMgPSAnJworICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBzZWxmLnVzZXJzLml0ZW1zKCk6CisgICAgICAgICAgICBzICs9ICIlc1x0JXNcbiIgJSAoa2V5LmV4cGFuZHRhYnMoMSksIHZhbC5leHBhbmR0YWJzKDEpKQorCisgICAgICAgIG9wZW4oc2VsZi5nZXRVc2VyQ2FjaGVGaWxlbmFtZSgpLCAid2IiKS53cml0ZShzKQorICAgICAgICBzZWxmLnVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIgPSBUcnVlCisKKyAgICBkZWYgbG9hZFVzZXJNYXBGcm9tQ2FjaGUoc2VsZik6CisgICAgICAgIHNlbGYudXNlcnMgPSB7fQorICAgICAgICBzZWxmLnVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWNoZSA9IG9wZW4oc2VsZi5nZXRVc2VyQ2FjaGVGaWxlbmFtZSgpLCAicmIiKQorICAgICAgICAgICAgbGluZXMgPSBjYWNoZS5yZWFkbGluZXMoKQorICAgICAgICAgICAgY2FjaGUuY2xvc2UoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgZW50cnkgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIlx0IikKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXJzW2VudHJ5WzBdXSA9IGVudHJ5WzFdCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgc2VsZi5nZXRVc2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyKCkKKworY2xhc3MgUDREZWJ1ZyhDb21tYW5kKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gW10KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJBIHRvb2wgdG8gZGVidWcgdGhlIG91dHB1dCBvZiBwNCAtRy4iCisgICAgICAgIHNlbGYubmVlZHNHaXQgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgaiA9IDAKKyAgICAgICAgZm9yIG91dHB1dCBpbiBwNENtZExpc3QoYXJncyk6CisgICAgICAgICAgICBwcmludCgnRWxlbWVudDogJWQnICUgaikKKyAgICAgICAgICAgIGogKz0gMQorICAgICAgICAgICAgcHJpbnQob3V0cHV0KQorICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNFJvbGxCYWNrKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1sb2NhbCIsIGRlc3Q9InJvbGxiYWNrTG9jYWxCcmFuY2hlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJBIHRvb2wgdG8gZGVidWcgdGhlIG11bHRpLWJyYW5jaCBpbXBvcnQuIERvbid0IHVzZSA6KSIKKyAgICAgICAgc2VsZi5yb2xsYmFja0xvY2FsQnJhbmNoZXMgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgbWF4Q2hhbmdlID0gaW50KGFyZ3NbMF0pCisKKyAgICAgICAgaWYgInA0RXhpdENvZGUiIGluIHA0Q21kKCJjaGFuZ2VzIC1tIDEiKToKKyAgICAgICAgICAgIGRpZSgiUHJvYmxlbXMgZXhlY3V0aW5nIHA0Iik7CisKKyAgICAgICAgaWYgc2VsZi5yb2xsYmFja0xvY2FsQnJhbmNoZXM6CisgICAgICAgICAgICByZWZQcmVmaXggPSAicmVmcy9oZWFkcy8iCisgICAgICAgICAgICBsaW5lcyA9IHJlYWRfcGlwZV9saW5lcygiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tYnJhbmNoZXMiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVmUHJlZml4ID0gInJlZnMvcmVtb3Rlcy8iCisgICAgICAgICAgICBsaW5lcyA9IHJlYWRfcGlwZV9saW5lcygiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tcmVtb3RlcyIpCisKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBpZiBzZWxmLnJvbGxiYWNrTG9jYWxCcmFuY2hlcyBvciAobGluZS5zdGFydHN3aXRoKCJwNC8iKSBhbmQgbGluZSAhPSAicDQvSEVBRFxuIik6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgIHJlZiA9IHJlZlByZWZpeCArIGxpbmUKKyAgICAgICAgICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQocmVmKQorICAgICAgICAgICAgICAgIHNldHRpbmdzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZykKKworICAgICAgICAgICAgICAgIGRlcG90UGF0aHMgPSBzZXR0aW5nc1snZGVwb3QtcGF0aHMnXQorICAgICAgICAgICAgICAgIGNoYW5nZSA9IHNldHRpbmdzWydjaGFuZ2UnXQorCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICBpZiBsZW4ocDRDbWQoImNoYW5nZXMgLW0gMSAiICArICcgJy5qb2luIChbJyVzLi4uQCVzJyAlIChwLCBtYXhDaGFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIGRlcG90UGF0aHNdKSkpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJCcmFuY2ggJXMgZGlkIG5vdCBleGlzdCBhdCBjaGFuZ2UgJXMsIGRlbGV0aW5nLiIgJSAocmVmLCBtYXhDaGFuZ2UpKQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oImdpdCB1cGRhdGUtcmVmIC1kICVzIGBnaXQgcmV2LXBhcnNlICVzYCIgJSAocmVmLCByZWYpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgd2hpbGUgY2hhbmdlIGFuZCBpbnQoY2hhbmdlKSA+IG1heENoYW5nZToKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzIGlzIGF0ICVzIDsgcmV3aW5kaW5nIHRvd2FyZHMgJXMiICUgKHJlZiwgY2hhbmdlLCBtYXhDaGFuZ2UpKQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oImdpdCB1cGRhdGUtcmVmICVzIFwiJXNeXCIiICUgKHJlZiwgcmVmKSkKKyAgICAgICAgICAgICAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KHJlZikKKyAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSAgZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZykKKworCisgICAgICAgICAgICAgICAgICAgIGRlcG90UGF0aHMgPSBzZXR0aW5nc1snZGVwb3QtcGF0aHMnXQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBzZXR0aW5nc1snY2hhbmdlJ10KKworICAgICAgICAgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyByZXdvdW5kIHRvICVzIiAlIChyZWYsIGNoYW5nZSkpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUDRTdWJtaXQoQ29tbWFuZCwgUDRVc2VyTWFwKToKKworICAgIGNvbmZsaWN0X2JlaGF2aW9yX2Nob2ljZXMgPSAoImFzayIsICJza2lwIiwgInF1aXQiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFA0VXNlck1hcC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tb3JpZ2luIiwgZGVzdD0ib3JpZ2luIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi1NIiwgZGVzdD0iZGV0ZWN0UmVuYW1lcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgICMgcHJlc2VydmUgdGhlIHVzZXIsIHJlcXVpcmVzIHJlbGV2YW50IHA0IHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tcHJlc2VydmUtdXNlciIsIGRlc3Q9InByZXNlcnZlVXNlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWV4cG9ydC1sYWJlbHMiLCBkZXN0PSJleHBvcnRMYWJlbHMiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1kcnktcnVuIiwgIi1uIiwgZGVzdD0iZHJ5X3J1biIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXByZXBhcmUtcDQtb25seSIsIGRlc3Q9InByZXBhcmVfcDRfb25seSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNvbmZsaWN0IiwgZGVzdD0iY29uZmxpY3RfYmVoYXZpb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9c2VsZi5jb25mbGljdF9iZWhhdmlvcl9jaG9pY2VzKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1icmFuY2giLCBkZXN0PSJicmFuY2giKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1zaGVsdmUiLCBkZXN0PSJzaGVsdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNoZWx2ZSBpbnN0ZWFkIG9mIHN1Ym1pdC4gU2hlbHZlZCBmaWxlcyBhcmUgcmV2ZXJ0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdG9yaW5nIHRoZSB3b3Jrc3BhY2UgdG8gdGhlIHN0YXRlIGJlZm9yZSB0aGUgc2hlbHZlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tdXBkYXRlLXNoZWx2ZSIsIGRlc3Q9InVwZGF0ZV9zaGVsdmUiLCBhY3Rpb249ImFwcGVuZCIsIHR5cGU9ImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0iQ0hBTkdFTElTVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0idXBkYXRlIGFuIGV4aXN0aW5nIHNoZWx2ZWQgY2hhbmdlbGlzdCwgaW1wbGllcyAtLXNoZWx2ZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXBlYXQgaW4tb3JkZXIgZm9yIG11bHRpcGxlIHNoZWx2ZWQgY2hhbmdlbGlzdHMiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jb21taXQiLCBkZXN0PSJjb21taXQiLCBtZXRhdmFyPSJDT01NSVQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InN1Ym1pdCBvbmx5IHRoZSBzcGVjaWZpZWQgY29tbWl0KHMpLCBvbmUgY29tbWl0IG9yIHh4eC4ueHh4IiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZGlzYWJsZS1yZWJhc2UiLCBkZXN0PSJkaXNhYmxlX3JlYmFzZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlzYWJsZSByZWJhc2UgYWZ0ZXIgc3VibWl0IGlzIGNvbXBsZXRlZC4gQ2FuIGJlIHVzZWZ1bCBpZiB5b3UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b3JrIGZyb20gYSBsb2NhbCBnaXQgYnJhbmNoIHRoYXQgaXMgbm90IG1hc3RlciIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWRpc2FibGUtcDRzeW5jIiwgZGVzdD0iZGlzYWJsZV9wNHN5bmMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNraXAgUGVyZm9yY2Ugc3luYyBvZiBwNC9tYXN0ZXIgYWZ0ZXIgc3VibWl0IG9yIHNoZWx2ZSIpLAorICAgICAgICBdCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAiIiJTdWJtaXQgY2hhbmdlcyBmcm9tIGdpdCB0byB0aGUgcGVyZm9yY2UgZGVwb3QuXG4KKyAgICBUaGUgYHA0LXByZS1zdWJtaXRgIGhvb2sgaXMgZXhlY3V0ZWQgaWYgaXQgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLgorICAgIFRoZSBob29rIHRha2VzIG5vIHBhcmFtZXRlcnMgYW5kIG5vdGhpbmcgZnJvbSBzdGFuZGFyZCBpbnB1dC4gRXhpdGluZyB3aXRoCisgICAgbm9uLXplcm8gc3RhdHVzIGZyb20gdGhpcyBzY3JpcHQgcHJldmVudHMgYGdpdC1wNCBzdWJtaXRgIGZyb20gbGF1bmNoaW5nLgorCisgICAgT25lIHVzYWdlIHNjZW5hcmlvIGlzIHRvIHJ1biB1bml0IHRlc3RzIGluIHRoZSBob29rLiIiIgorCisgICAgICAgIHNlbGYudXNhZ2UgKz0gIiBbbmFtZSBvZiBnaXQgYnJhbmNoIHRvIHN1Ym1pdCBpbnRvIHBlcmZvcmNlIGRlcG90XSIKKyAgICAgICAgc2VsZi5vcmlnaW4gPSAiIgorICAgICAgICBzZWxmLmRldGVjdFJlbmFtZXMgPSBGYWxzZQorICAgICAgICBzZWxmLnByZXNlcnZlVXNlciA9IGdpdENvbmZpZ0Jvb2woImdpdC1wNC5wcmVzZXJ2ZVVzZXIiKQorICAgICAgICBzZWxmLmRyeV9ydW4gPSBGYWxzZQorICAgICAgICBzZWxmLnNoZWx2ZSA9IEZhbHNlCisgICAgICAgIHNlbGYudXBkYXRlX3NoZWx2ZSA9IGxpc3QoKQorICAgICAgICBzZWxmLmNvbW1pdCA9ICIiCisgICAgICAgIHNlbGYuZGlzYWJsZV9yZWJhc2UgPSBnaXRDb25maWdCb29sKCJnaXQtcDQuZGlzYWJsZVJlYmFzZSIpCisgICAgICAgIHNlbGYuZGlzYWJsZV9wNHN5bmMgPSBnaXRDb25maWdCb29sKCJnaXQtcDQuZGlzYWJsZVA0U3luYyIpCisgICAgICAgIHNlbGYucHJlcGFyZV9wNF9vbmx5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9IE5vbmUKKyAgICAgICAgc2VsZi5pc1dpbmRvd3MgPSAocGxhdGZvcm0uc3lzdGVtKCkgPT0gIldpbmRvd3MiKQorICAgICAgICBzZWxmLmV4cG9ydExhYmVscyA9IEZhbHNlCisgICAgICAgIHNlbGYucDRIYXNNb3ZlQ29tbWFuZCA9IHA0X2hhc19tb3ZlX2NvbW1hbmQoKQorICAgICAgICBzZWxmLmJyYW5jaCA9IE5vbmUKKworICAgICAgICBpZiBnaXRDb25maWcoJ2dpdC1wNC5sYXJnZUZpbGVTeXN0ZW0nKToKKyAgICAgICAgICAgIGRpZSgiTGFyZ2UgZmlsZSBzeXN0ZW0gbm90IHN1cHBvcnRlZCBmb3IgZ2l0LXA0IHN1Ym1pdCBjb21tYW5kLiBQbGVhc2UgcmVtb3ZlIGl0IGZyb20gY29uZmlnLiIpCisKKyAgICBkZWYgY2hlY2soc2VsZik6CisgICAgICAgIGlmIGxlbihwNENtZExpc3QoIm9wZW5lZCAuLi4iKSkgPiAwOgorICAgICAgICAgICAgZGllKCJZb3UgaGF2ZSBmaWxlcyBvcGVuZWQgd2l0aCBwZXJmb3JjZSEgQ2xvc2UgdGhlbSBiZWZvcmUgc3RhcnRpbmcgdGhlIHN5bmMuIikKKworICAgIGRlZiBzZXBhcmF0ZV9qb2JzX2Zyb21fZGVzY3JpcHRpb24oc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIiIkV4dHJhY3QgYW5kIHJldHVybiBhIHBvc3NpYmxlIEpvYnMgZmllbGQgaW4gdGhlIGNvbW1pdAorICAgICAgICAgICBtZXNzYWdlLiAgSXQgZ29lcyBpbnRvIGEgc2VwYXJhdGUgc2VjdGlvbiBpbiB0aGUgcDQgY2hhbmdlCisgICAgICAgICAgIHNwZWNpZmljYXRpb24uCisKKyAgICAgICAgICAgQSBqb2JzIGxpbmUgc3RhcnRzIHdpdGggIkpvYnM6IiBhbmQgbG9va3MgbGlrZSBhIG5ldyBmaWVsZAorICAgICAgICAgICBpbiBhIGZvcm0uICBWYWx1ZXMgYXJlIHdoaXRlLXNwYWNlIHNlcGFyYXRlZCBvbiB0aGUgc2FtZQorICAgICAgICAgICBsaW5lIG9yIG9uIGZvbGxvd2luZyBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggYSB0YWIuCisKKyAgICAgICAgICAgVGhpcyBkb2VzIG5vdCBwYXJzZSBhbmQgZXh0cmFjdCB0aGUgZnVsbCBnaXQgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgICAgbGlrZSBhIHA0IGZvcm0uICBJdCBqdXN0IHNlZXMgdGhlIEpvYnM6IGxpbmUgYXMgYSBtYXJrZXIKKyAgICAgICAgICAgdG8gcGFzcyBldmVyeXRoaW5nIGZyb20gdGhlbiBvbiBkaXJlY3RseSBpbnRvIHRoZSBwNCBmb3JtLAorICAgICAgICAgICBidXQgb3V0c2lkZSB0aGUgZGVzY3JpcHRpb24gc2VjdGlvbi4KKworICAgICAgICAgICBSZXR1cm4gYSB0dXBsZSAoc3RyaXBwZWQgbG9nIG1lc3NhZ2UsIGpvYnMgc3RyaW5nKS4iIiIKKworICAgICAgICBtID0gcmUuc2VhcmNoKHInXkpvYnM6JywgbWVzc2FnZSwgcmUuTVVMVElMSU5FKQorICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gKG1lc3NhZ2UsIE5vbmUpCisKKyAgICAgICAgam9idGV4dCA9IG1lc3NhZ2VbbS5zdGFydCgpOl0KKyAgICAgICAgc3RyaXBwZWRfbWVzc2FnZSA9IG1lc3NhZ2VbOm0uc3RhcnQoKV0ucnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIChzdHJpcHBlZF9tZXNzYWdlLCBqb2J0ZXh0KQorCisgICAgZGVmIHByZXBhcmVMb2dNZXNzYWdlKHNlbGYsIHRlbXBsYXRlLCBtZXNzYWdlLCBqb2JzKToKKyAgICAgICAgIiIiRWRpdHMgdGhlIHRlbXBsYXRlIHJldHVybmVkIGZyb20gInA0IGNoYW5nZSAtbyIgdG8gaW5zZXJ0CisgICAgICAgICAgIHRoZSBtZXNzYWdlIGluIHRoZSBEZXNjcmlwdGlvbiBmaWVsZCwgYW5kIHRoZSBqb2JzIHRleHQgaW4KKyAgICAgICAgICAgdGhlIEpvYnMgZmllbGQuIiIiCisgICAgICAgIHJlc3VsdCA9ICIiCisKKyAgICAgICAgaW5EZXNjcmlwdGlvblNlY3Rpb24gPSBGYWxzZQorCisgICAgICAgIGZvciBsaW5lIGluIHRlbXBsYXRlLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIik6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGxpbmUgKyAiXG4iCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaW5EZXNjcmlwdGlvblNlY3Rpb246CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJGaWxlczoiKSBvciBsaW5lLnN0YXJ0c3dpdGgoIkpvYnM6Iik6CisgICAgICAgICAgICAgICAgICAgIGluRGVzY3JpcHRpb25TZWN0aW9uID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgIyBpbnNlcnQgSm9icyBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmIGpvYnM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gam9icyArICJcbiIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkRlc2NyaXB0aW9uOiIpOgorICAgICAgICAgICAgICAgICAgICBpbkRlc2NyaXB0aW9uU2VjdGlvbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgbGluZSArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgIGZvciBtZXNzYWdlTGluZSBpbiBtZXNzYWdlLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSArPSAiXHQiICsgbWVzc2FnZUxpbmUgKyAiXG4iCisKKyAgICAgICAgICAgIHJlc3VsdCArPSBsaW5lICsgIlxuIgorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBwYXRjaFJDU0tleXdvcmRzKHNlbGYsIGZpbGUsIHBhdHRlcm4pOgorICAgICAgICAjIEF0dGVtcHQgdG8gemFwIHRoZSBSQ1Mga2V5d29yZHMgaW4gYSBwNCBjb250cm9sbGVkIGZpbGUgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4KKyAgICAgICAgKGhhbmRsZSwgb3V0RmlsZU5hbWUpID0gdGVtcGZpbGUubWtzdGVtcChkaXI9Jy4nKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRGaWxlID0gb3MuZmRvcGVuKGhhbmRsZSwgIncrIikKKyAgICAgICAgICAgIGluRmlsZSA9IG9wZW4oZmlsZSwgInIiKQorICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5WRVJCT1NFKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5GaWxlLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGxpbmUgPSByZWdleHAuc3ViKHInJFwxJCcsIGxpbmUpCisgICAgICAgICAgICAgICAgb3V0RmlsZS53cml0ZShsaW5lKQorICAgICAgICAgICAgaW5GaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIG91dEZpbGUuY2xvc2UoKQorICAgICAgICAgICAgIyBGb3JjaWJseSBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGZpbGUKKyAgICAgICAgICAgIG9zLnVubGluayhmaWxlKQorICAgICAgICAgICAgc2h1dGlsLm1vdmUob3V0RmlsZU5hbWUsIGZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgY2xlYW51cCBvdXIgdGVtcG9yYXJ5IGZpbGUKKyAgICAgICAgICAgIG9zLnVubGluayhvdXRGaWxlTmFtZSkKKyAgICAgICAgICAgIHByaW50KCJGYWlsZWQgdG8gc3RyaXAgUkNTIGtleXdvcmRzIGluICVzIiAlIGZpbGUpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHByaW50KCJQYXRjaGVkIHVwIFJDUyBrZXl3b3JkcyBpbiAlcyIgJSBmaWxlKQorCisgICAgZGVmIHA0VXNlckZvckNvbW1pdChzZWxmLGlkKToKKyAgICAgICAgIyBSZXR1cm4gdGhlIHR1cGxlIChwZXJmb3JjZSB1c2VyLGdpdCBlbWFpbCkgZm9yIGEgZ2l2ZW4gZ2l0IGNvbW1pdCBpZAorICAgICAgICBzZWxmLmdldFVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIoKQorICAgICAgICBnaXRFbWFpbCA9IHJlYWRfcGlwZShbImdpdCIsICJsb2ciLCAiLS1tYXgtY291bnQ9MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9JWFlIiwgaWRdKQorICAgICAgICBnaXRFbWFpbCA9IGdpdEVtYWlsLnN0cmlwKCkKKyAgICAgICAgaWYgZ2l0RW1haWwgbm90IGluIHNlbGYuZW1haWxzOgorICAgICAgICAgICAgcmV0dXJuIChOb25lLGdpdEVtYWlsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLmVtYWlsc1tnaXRFbWFpbF0sZ2l0RW1haWwpCisKKyAgICBkZWYgY2hlY2tWYWxpZFA0VXNlcnMoc2VsZixjb21taXRzKToKKyAgICAgICAgIyBjaGVjayBpZiBhbnkgZ2l0IGF1dGhvcnMgY2Fubm90IGJlIG1hcHBlZCB0byBwNCB1c2VycworICAgICAgICBmb3IgaWQgaW4gY29tbWl0czoKKyAgICAgICAgICAgICh1c2VyLGVtYWlsKSA9IHNlbGYucDRVc2VyRm9yQ29tbWl0KGlkKQorICAgICAgICAgICAgaWYgbm90IHVzZXI6CisgICAgICAgICAgICAgICAgbXNnID0gIkNhbm5vdCBmaW5kIHA0IHVzZXIgZm9yIGVtYWlsICVzIGluIGNvbW1pdCAlcy4iICUgKGVtYWlsLCBpZCkKKyAgICAgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCJnaXQtcDQuYWxsb3dNaXNzaW5nUDRVc2VycyIpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMiICUgbXNnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRpZSgiRXJyb3I6ICVzXG5TZXQgZ2l0LXA0LmFsbG93TWlzc2luZ1A0VXNlcnMgdG8gdHJ1ZSB0byBhbGxvdyB0aGlzLiIgJSBtc2cpCisKKyAgICBkZWYgbGFzdFA0Q2hhbmdlbGlzdChzZWxmKToKKyAgICAgICAgIyBHZXQgYmFjayB0aGUgbGFzdCBjaGFuZ2VsaXN0IG51bWJlciBzdWJtaXR0ZWQgaW4gdGhpcyBjbGllbnQgc3BlYy4gVGhpcworICAgICAgICAjIHRoZW4gZ2V0cyB1c2VkIHRvIHBhdGNoIHVwIHRoZSB1c2VybmFtZSBpbiB0aGUgY2hhbmdlLiBJZiB0aGUgc2FtZQorICAgICAgICAjIGNsaWVudCBzcGVjIGlzIGJlaW5nIHVzZWQgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIHRoZW4gdGhpcyBtaWdodCBnbworICAgICAgICAjIHdyb25nLgorICAgICAgICByZXN1bHRzID0gcDRDbWRMaXN0KCJjbGllbnQgLW8iKSAgICAgICAgIyBmaW5kIHRoZSBjdXJyZW50IGNsaWVudAorICAgICAgICBjbGllbnQgPSBOb25lCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiAnQ2xpZW50JyBpbiByOgorICAgICAgICAgICAgICAgIGNsaWVudCA9IHJbJ0NsaWVudCddCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGNsaWVudDoKKyAgICAgICAgICAgIGRpZSgiY291bGQgbm90IGdldCBjbGllbnQgc3BlYyIpCisgICAgICAgIHJlc3VsdHMgPSBwNENtZExpc3QoWyJjaGFuZ2VzIiwgIi1jIiwgY2xpZW50LCAiLW0iLCAiMSJdKQorICAgICAgICBmb3IgciBpbiByZXN1bHRzOgorICAgICAgICAgICAgaWYgJ2NoYW5nZScgaW4gcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gclsnY2hhbmdlJ10KKyAgICAgICAgZGllKCJDb3VsZCBub3QgZ2V0IGNoYW5nZWxpc3QgbnVtYmVyIGZvciBsYXN0IHN1Ym1pdCAtIGNhbm5vdCBwYXRjaCB1cCB1c2VyIGRldGFpbHMiKQorCisgICAgZGVmIG1vZGlmeUNoYW5nZWxpc3RVc2VyKHNlbGYsIGNoYW5nZWxpc3QsIG5ld1VzZXIpOgorICAgICAgICAjIGZpeHVwIHRoZSB1c2VyIGZpZWxkIG9mIGEgY2hhbmdlbGlzdCBhZnRlciBpdCBoYXMgYmVlbiBzdWJtaXR0ZWQuCisgICAgICAgIGNoYW5nZXMgPSBwNENtZExpc3QoImNoYW5nZSAtbyAlcyIgJSBjaGFuZ2VsaXN0KQorICAgICAgICBpZiBsZW4oY2hhbmdlcykgIT0gMToKKyAgICAgICAgICAgIGRpZSgiQmFkIG91dHB1dCBmcm9tIHA0IGNoYW5nZSBtb2RpZnlpbmcgJXMgdG8gdXNlciAlcyIgJQorICAgICAgICAgICAgICAgIChjaGFuZ2VsaXN0LCBuZXdVc2VyKSkKKworICAgICAgICBjID0gY2hhbmdlc1swXQorICAgICAgICBpZiBjWydVc2VyJ10gPT0gbmV3VXNlcjogcmV0dXJuICAgIyBub3RoaW5nIHRvIGRvCisgICAgICAgIGNbJ1VzZXInXSA9IG5ld1VzZXIKKyAgICAgICAgaW5wdXQgPSBtYXJzaGFsLmR1bXBzKGMpCisKKyAgICAgICAgcmVzdWx0ID0gcDRDbWRMaXN0KCJjaGFuZ2UgLWYgLWkiLCBzdGRpbj1pbnB1dCkKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0OgorICAgICAgICAgICAgaWYgJ2NvZGUnIGluIHI6CisgICAgICAgICAgICAgICAgaWYgclsnY29kZSddID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIGRpZSgiQ291bGQgbm90IG1vZGlmeSB1c2VyIGZpZWxkIG9mIGNoYW5nZWxpc3QgJXMgdG8gJXM6JXMiICUgKGNoYW5nZWxpc3QsIG5ld1VzZXIsIHJbJ2RhdGEnXSkpCisgICAgICAgICAgICBpZiAnZGF0YScgaW4gcjoKKyAgICAgICAgICAgICAgICBwcmludCgiVXBkYXRlZCB1c2VyIGZpZWxkIGZvciBjaGFuZ2VsaXN0ICVzIHRvICVzIiAlIChjaGFuZ2VsaXN0LCBuZXdVc2VyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGllKCJDb3VsZCBub3QgbW9kaWZ5IHVzZXIgZmllbGQgb2YgY2hhbmdlbGlzdCAlcyB0byAlcyIgJSAoY2hhbmdlbGlzdCwgbmV3VXNlcikpCisKKyAgICBkZWYgY2FuQ2hhbmdlQ2hhbmdlbGlzdHMoc2VsZik6CisgICAgICAgICMgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgcDQgYWRtaW4gb3Igc3VwZXItdXNlciBwZXJtaXNzaW9ucywgZWl0aGVyIG9mCisgICAgICAgICMgd2hpY2ggYXJlIHJlcXVpcmVkIHRvIG1vZGlmeSBjaGFuZ2VsaXN0cy4KKyAgICAgICAgcmVzdWx0cyA9IHA0Q21kTGlzdChbInByb3RlY3RzIiwgc2VsZi5kZXBvdFBhdGhdKQorICAgICAgICBmb3IgciBpbiByZXN1bHRzOgorICAgICAgICAgICAgaWYgJ3Blcm0nIGluIHI6CisgICAgICAgICAgICAgICAgaWYgclsncGVybSddID09ICdhZG1pbic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgaWYgclsncGVybSddID09ICdzdXBlcic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgcHJlcGFyZVN1Ym1pdFRlbXBsYXRlKHNlbGYsIGNoYW5nZWxpc3Q9Tm9uZSk6CisgICAgICAgICIiIlJ1biAicDQgY2hhbmdlIC1vIiB0byBncmFiIGEgY2hhbmdlIHNwZWNpZmljYXRpb24gdGVtcGxhdGUuCisgICAgICAgICAgIFRoaXMgZG9lcyBub3QgdXNlICJwNCAtRyIsIGFzIGl0IGlzIG5pY2UgdG8ga2VlcCB0aGUgc3VibWlzc2lvbgorICAgICAgICAgICB0ZW1wbGF0ZSBpbiBvcmlnaW5hbCBvcmRlciwgc2luY2UgYSBodW1hbiBtaWdodCBlZGl0IGl0LgorCisgICAgICAgICAgIFJlbW92ZSBsaW5lcyBpbiB0aGUgRmlsZXMgc2VjdGlvbiB0aGF0IHNob3cgY2hhbmdlcyB0byBmaWxlcworICAgICAgICAgICBvdXRzaWRlIHRoZSBkZXBvdCBwYXRoIHdlJ3JlIGNvbW1pdHRpbmcgaW50by4iIiIKKworICAgICAgICBbdXBzdHJlYW0sIHNldHRpbmdzXSA9IGZpbmRVcHN0cmVhbUJyYW5jaFBvaW50KCkKKworICAgICAgICB0ZW1wbGF0ZSA9ICIiIlwKKyMgQSBQZXJmb3JjZSBDaGFuZ2UgU3BlY2lmaWNhdGlvbi4KKyMKKyMgIENoYW5nZTogICAgICBUaGUgY2hhbmdlIG51bWJlci4gJ25ldycgb24gYSBuZXcgY2hhbmdlbGlzdC4KKyMgIERhdGU6ICAgICAgICBUaGUgZGF0ZSB0aGlzIHNwZWNpZmljYXRpb24gd2FzIGxhc3QgbW9kaWZpZWQuCisjICBDbGllbnQ6ICAgICAgVGhlIGNsaWVudCBvbiB3aGljaCB0aGUgY2hhbmdlbGlzdCB3YXMgY3JlYXRlZC4gIFJlYWQtb25seS4KKyMgIFVzZXI6ICAgICAgICBUaGUgdXNlciB3aG8gY3JlYXRlZCB0aGUgY2hhbmdlbGlzdC4KKyMgIFN0YXR1czogICAgICBFaXRoZXIgJ3BlbmRpbmcnIG9yICdzdWJtaXR0ZWQnLiBSZWFkLW9ubHkuCisjICBUeXBlOiAgICAgICAgRWl0aGVyICdwdWJsaWMnIG9yICdyZXN0cmljdGVkJy4gRGVmYXVsdCBpcyAncHVibGljJy4KKyMgIERlc2NyaXB0aW9uOiBDb21tZW50cyBhYm91dCB0aGUgY2hhbmdlbGlzdC4gIFJlcXVpcmVkLgorIyAgSm9iczogICAgICAgIFdoYXQgb3BlbmVkIGpvYnMgYXJlIHRvIGJlIGNsb3NlZCBieSB0aGlzIGNoYW5nZWxpc3QuCisjICAgICAgICAgICAgICAgWW91IG1heSBkZWxldGUgam9icyBmcm9tIHRoaXMgbGlzdC4gIChOZXcgY2hhbmdlbGlzdHMgb25seS4pCisjICBGaWxlczogICAgICAgV2hhdCBvcGVuZWQgZmlsZXMgZnJvbSB0aGUgZGVmYXVsdCBjaGFuZ2VsaXN0IGFyZSB0byBiZSBhZGRlZAorIyAgICAgICAgICAgICAgIHRvIHRoaXMgY2hhbmdlbGlzdC4gIFlvdSBtYXkgZGVsZXRlIGZpbGVzIGZyb20gdGhpcyBsaXN0LgorIyAgICAgICAgICAgICAgIChOZXcgY2hhbmdlbGlzdHMgb25seS4pCisiIiIKKyAgICAgICAgZmlsZXNfbGlzdCA9IFtdCisgICAgICAgIGluRmlsZXNTZWN0aW9uID0gRmFsc2UKKyAgICAgICAgY2hhbmdlX2VudHJ5ID0gTm9uZQorICAgICAgICBhcmdzID0gWydjaGFuZ2UnLCAnLW8nXQorICAgICAgICBpZiBjaGFuZ2VsaXN0OgorICAgICAgICAgICAgYXJncy5hcHBlbmQoc3RyKGNoYW5nZWxpc3QpKQorICAgICAgICBmb3IgZW50cnkgaW4gcDRDbWRMaXN0KGFyZ3MpOgorICAgICAgICAgICAgaWYgJ2NvZGUnIG5vdCBpbiBlbnRyeToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZW50cnlbJ2NvZGUnXSA9PSAnc3RhdCc6CisgICAgICAgICAgICAgICAgY2hhbmdlX2VudHJ5ID0gZW50cnkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgY2hhbmdlX2VudHJ5OgorICAgICAgICAgICAgZGllKCdGYWlsZWQgdG8gZGVjb2RlIG91dHB1dCBvZiBwNCBjaGFuZ2UgLW8nKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjaGFuZ2VfZW50cnkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgnRmlsZScpOgorICAgICAgICAgICAgICAgIGlmICdkZXBvdC1wYXRocycgaW4gc2V0dGluZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBbcCBmb3IgcCBpbiBzZXR0aW5nc1snZGVwb3QtcGF0aHMnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgodmFsdWUsIHApXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHA0UGF0aFN0YXJ0c1dpdGgodmFsdWUsIHNlbGYuZGVwb3RQYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZXNfbGlzdC5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBPdXRwdXQgaW4gdGhlIG9yZGVyIGV4cGVjdGVkIGJ5IHByZXBhcmVMb2dNZXNzYWdlCisgICAgICAgIGZvciBrZXkgaW4gWydDaGFuZ2UnLCAnQ2xpZW50JywgJ1VzZXInLCAnU3RhdHVzJywgJ0Rlc2NyaXB0aW9uJywgJ0pvYnMnXToKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gY2hhbmdlX2VudHJ5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0ZW1wbGF0ZSArPSAnXG4nCisgICAgICAgICAgICB0ZW1wbGF0ZSArPSBrZXkgKyAnOicKKyAgICAgICAgICAgIGlmIGtleSA9PSAnRGVzY3JpcHRpb24nOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9ICdcbicKKyAgICAgICAgICAgIGZvciBmaWVsZF9saW5lIGluIGNoYW5nZV9lbnRyeVtrZXldLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZSArPSAnXHQnK2ZpZWxkX2xpbmUrJ1xuJworICAgICAgICBpZiBsZW4oZmlsZXNfbGlzdCkgPiAwOgorICAgICAgICAgICAgdGVtcGxhdGUgKz0gJ1xuJworICAgICAgICAgICAgdGVtcGxhdGUgKz0gJ0ZpbGVzOlxuJworICAgICAgICBmb3IgcGF0aCBpbiBmaWxlc19saXN0OgorICAgICAgICAgICAgdGVtcGxhdGUgKz0gJ1x0JytwYXRoKydcbicKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlCisKKyAgICBkZWYgZWRpdF90ZW1wbGF0ZShzZWxmLCB0ZW1wbGF0ZV9maWxlKToKKyAgICAgICAgIiIiSW52b2tlIHRoZSBlZGl0b3IgdG8gbGV0IHRoZSB1c2VyIGNoYW5nZSB0aGUgc3VibWlzc2lvbgorICAgICAgICAgICBtZXNzYWdlLiAgUmV0dXJuIHRydWUgaWYgb2theSB0byBjb250aW51ZSB3aXRoIHRoZSBzdWJtaXQuIiIiCisKKyAgICAgICAgIyBpZiBjb25maWd1cmVkIHRvIHNraXAgdGhlIGVkaXRpbmcgcGFydCwganVzdCBzdWJtaXQKKyAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LnNraXBTdWJtaXRFZGl0Iik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgbG9vayBhdCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUsIHRvIGNoZWNrIGxhdGVyIGlmIHRoZSB1c2VyIHNhdmVkCisgICAgICAgICMgdGhlIGZpbGUKKyAgICAgICAgbXRpbWUgPSBvcy5zdGF0KHRlbXBsYXRlX2ZpbGUpLnN0X210aW1lCisKKyAgICAgICAgIyBpbnZva2UgdGhlIGVkaXRvcgorICAgICAgICBpZiAiUDRFRElUT1IiIGluIG9zLmVudmlyb24gYW5kIChvcy5lbnZpcm9uLmdldCgiUDRFRElUT1IiKSAhPSAiIik6CisgICAgICAgICAgICBlZGl0b3IgPSBvcy5lbnZpcm9uLmdldCgiUDRFRElUT1IiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZWRpdG9yID0gcmVhZF9waXBlKCJnaXQgdmFyIEdJVF9FRElUT1IiKS5zdHJpcCgpCisgICAgICAgIHN5c3RlbShbInNoIiwgIi1jIiwgKCclcyAiJEAiJyAlIGVkaXRvciksIGVkaXRvciwgdGVtcGxhdGVfZmlsZV0pCisKKyAgICAgICAgIyBJZiB0aGUgZmlsZSB3YXMgbm90IHNhdmVkLCBwcm9tcHQgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggc2hvdWxkCisgICAgICAgICMgYmUgc2tpcHBlZC4gIEJ1dCBza2lwIHRoaXMgdmVyaWZpY2F0aW9uIHN0ZXAgaWYgY29uZmlndXJlZCBzby4KKyAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2siKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBtb2RpZmljYXRpb24gdGltZSB1cGRhdGVkIG1lYW5zIHVzZXIgc2F2ZWQgdGhlIGZpbGUKKyAgICAgICAgaWYgb3Muc3RhdCh0ZW1wbGF0ZV9maWxlKS5zdF9tdGltZSA+IG10aW1lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXNwb25zZSA9IHByb21wdCgiU3VibWl0IHRlbXBsYXRlIHVuY2hhbmdlZC4gU3VibWl0IGFueXdheT8gW3ldZXMsIFtuXW8gKHNraXAgdGhpcyBwYXRjaCkgIikKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gJ3knOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gJ24nOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZ2V0X2RpZmZfZGVzY3JpcHRpb24oc2VsZiwgZWRpdGVkRmlsZXMsIGZpbGVzVG9BZGQsIHN5bWxpbmtzKToKKyAgICAgICAgIyBkaWZmCisgICAgICAgIGlmICJQNERJRkYiIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBkZWwob3MuZW52aXJvblsiUDRESUZGIl0pCisgICAgICAgIGRpZmYgPSAiIgorICAgICAgICBmb3IgZWRpdGVkRmlsZSBpbiBlZGl0ZWRGaWxlczoKKyAgICAgICAgICAgIGRpZmYgKz0gcDRfcmVhZF9waXBlKFsnZGlmZicsICctZHUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkX2VuY29kZShlZGl0ZWRGaWxlKV0pCisKKyAgICAgICAgIyBuZXcgZmlsZSBkaWZmCisgICAgICAgIG5ld2RpZmYgPSAiIgorICAgICAgICBmb3IgbmV3RmlsZSBpbiBmaWxlc1RvQWRkOgorICAgICAgICAgICAgbmV3ZGlmZiArPSAiPT09PSBuZXcgZmlsZSA9PT09XG4iCisgICAgICAgICAgICBuZXdkaWZmICs9ICItLS0gL2Rldi9udWxsXG4iCisgICAgICAgICAgICBuZXdkaWZmICs9ICIrKysgJXNcbiIgJSBuZXdGaWxlCisKKyAgICAgICAgICAgIGlzX2xpbmsgPSBvcy5wYXRoLmlzbGluayhuZXdGaWxlKQorICAgICAgICAgICAgZXhwZWN0X2xpbmsgPSBuZXdGaWxlIGluIHN5bWxpbmtzCisKKyAgICAgICAgICAgIGlmIGlzX2xpbmsgYW5kIGV4cGVjdF9saW5rOgorICAgICAgICAgICAgICAgIG5ld2RpZmYgKz0gIislc1xuIiAlIG9zLnJlYWRsaW5rKG5ld0ZpbGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKG5ld0ZpbGUsICJyIikKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBuZXdkaWZmICs9ICIrIiArIGxpbmUKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gKGRpZmYgKyBuZXdkaWZmKS5yZXBsYWNlKCdcclxuJywgJ1xuJykKKworICAgIGRlZiBhcHBseUNvbW1pdChzZWxmLCBpZCk6CisgICAgICAgICIiIkFwcGx5IG9uZSBjb21taXQsIHJldHVybiBUcnVlIGlmIGl0IHN1Y2NlZWRlZC4iIiIKKworICAgICAgICBwcmludCgiQXBwbHlpbmciLCByZWFkX3BpcGUoWyJnaXQiLCAic2hvdyIsICItcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZm9ybWF0PWZvcm1hdDolaCAlcyIsIGlkXSkpCisKKyAgICAgICAgKHA0VXNlciwgZ2l0RW1haWwpID0gc2VsZi5wNFVzZXJGb3JDb21taXQoaWQpCisKKyAgICAgICAgZGlmZiA9IHJlYWRfcGlwZV9saW5lcygiZ2l0IGRpZmYtdHJlZSAtciAlcyBcIiVzXlwiIFwiJXNcIiIgJSAoc2VsZi5kaWZmT3B0cywgaWQsIGlkKSkKKyAgICAgICAgZmlsZXNUb0FkZCA9IHNldCgpCisgICAgICAgIGZpbGVzVG9DaGFuZ2VUeXBlID0gc2V0KCkKKyAgICAgICAgZmlsZXNUb0RlbGV0ZSA9IHNldCgpCisgICAgICAgIGVkaXRlZEZpbGVzID0gc2V0KCkKKyAgICAgICAgcHVyZVJlbmFtZUNvcHkgPSBzZXQoKQorICAgICAgICBzeW1saW5rcyA9IHNldCgpCisgICAgICAgIGZpbGVzVG9DaGFuZ2VFeGVjQml0ID0ge30KKyAgICAgICAgYWxsX2ZpbGVzID0gbGlzdCgpCisKKyAgICAgICAgZm9yIGxpbmUgaW4gZGlmZjoKKyAgICAgICAgICAgIGRpZmYgPSBwYXJzZURpZmZUcmVlRW50cnkobGluZSkKKyAgICAgICAgICAgIG1vZGlmaWVyID0gZGlmZlsnc3RhdHVzJ10KKyAgICAgICAgICAgIHBhdGggPSBkaWZmWydzcmMnXQorICAgICAgICAgICAgYWxsX2ZpbGVzLmFwcGVuZChwYXRoKQorCisgICAgICAgICAgICBpZiBtb2RpZmllciA9PSAiTSI6CisgICAgICAgICAgICAgICAgcDRfZWRpdChwYXRoKQorICAgICAgICAgICAgICAgIGlmIGlzTW9kZUV4ZWNDaGFuZ2VkKGRpZmZbJ3NyY19tb2RlJ10sIGRpZmZbJ2RzdF9tb2RlJ10pOgorICAgICAgICAgICAgICAgICAgICBmaWxlc1RvQ2hhbmdlRXhlY0JpdFtwYXRoXSA9IGRpZmZbJ2RzdF9tb2RlJ10KKyAgICAgICAgICAgICAgICBlZGl0ZWRGaWxlcy5hZGQocGF0aCkKKyAgICAgICAgICAgIGVsaWYgbW9kaWZpZXIgPT0gIkEiOgorICAgICAgICAgICAgICAgIGZpbGVzVG9BZGQuYWRkKHBhdGgpCisgICAgICAgICAgICAgICAgZmlsZXNUb0NoYW5nZUV4ZWNCaXRbcGF0aF0gPSBkaWZmWydkc3RfbW9kZSddCisgICAgICAgICAgICAgICAgaWYgcGF0aCBpbiBmaWxlc1RvRGVsZXRlOgorICAgICAgICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLnJlbW92ZShwYXRoKQorCisgICAgICAgICAgICAgICAgZHN0X21vZGUgPSBpbnQoZGlmZlsnZHN0X21vZGUnXSwgOCkKKyAgICAgICAgICAgICAgICBpZiBkc3RfbW9kZSA9PSAwbzEyMDAwMDoKKyAgICAgICAgICAgICAgICAgICAgc3ltbGlua3MuYWRkKHBhdGgpCisKKyAgICAgICAgICAgIGVsaWYgbW9kaWZpZXIgPT0gIkQiOgorICAgICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUuYWRkKHBhdGgpCisgICAgICAgICAgICAgICAgaWYgcGF0aCBpbiBmaWxlc1RvQWRkOgorICAgICAgICAgICAgICAgICAgICBmaWxlc1RvQWRkLnJlbW92ZShwYXRoKQorICAgICAgICAgICAgZWxpZiBtb2RpZmllciA9PSAiQyI6CisgICAgICAgICAgICAgICAgc3JjLCBkZXN0ID0gZGlmZlsnc3JjJ10sIGRpZmZbJ2RzdCddCisgICAgICAgICAgICAgICAgYWxsX2ZpbGVzLmFwcGVuZChkZXN0KQorICAgICAgICAgICAgICAgIHA0X2ludGVncmF0ZShzcmMsIGRlc3QpCisgICAgICAgICAgICAgICAgcHVyZVJlbmFtZUNvcHkuYWRkKGRlc3QpCisgICAgICAgICAgICAgICAgaWYgZGlmZlsnc3JjX3NoYTEnXSAhPSBkaWZmWydkc3Rfc2hhMSddOgorICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KGRlc3QpCisgICAgICAgICAgICAgICAgICAgIHB1cmVSZW5hbWVDb3B5LmRpc2NhcmQoZGVzdCkKKyAgICAgICAgICAgICAgICBpZiBpc01vZGVFeGVjQ2hhbmdlZChkaWZmWydzcmNfbW9kZSddLCBkaWZmWydkc3RfbW9kZSddKToKKyAgICAgICAgICAgICAgICAgICAgcDRfZWRpdChkZXN0KQorICAgICAgICAgICAgICAgICAgICBwdXJlUmVuYW1lQ29weS5kaXNjYXJkKGRlc3QpCisgICAgICAgICAgICAgICAgICAgIGZpbGVzVG9DaGFuZ2VFeGVjQml0W2Rlc3RdID0gZGlmZlsnZHN0X21vZGUnXQorICAgICAgICAgICAgICAgIGlmIHNlbGYuaXNXaW5kb3dzOgorICAgICAgICAgICAgICAgICAgICAjIHR1cm4gb2ZmIHJlYWQtb25seSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgb3MuY2htb2QoZGVzdCwgc3RhdC5TX0lXUklURSkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgICAgICAgICBlZGl0ZWRGaWxlcy5hZGQoZGVzdCkKKyAgICAgICAgICAgIGVsaWYgbW9kaWZpZXIgPT0gIlIiOgorICAgICAgICAgICAgICAgIHNyYywgZGVzdCA9IGRpZmZbJ3NyYyddLCBkaWZmWydkc3QnXQorICAgICAgICAgICAgICAgIGFsbF9maWxlcy5hcHBlbmQoZGVzdCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnA0SGFzTW92ZUNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIHA0X2VkaXQoc3JjKSAgICAgICAgIyBzcmMgbXVzdCBiZSBvcGVuIGJlZm9yZSBtb3ZlCisgICAgICAgICAgICAgICAgICAgIHA0X21vdmUoc3JjLCBkZXN0KSAgIyBvcGVucyBmb3IgKG1vdmUvZGVsZXRlLCBtb3ZlL2FkZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwNF9pbnRlZ3JhdGUoc3JjLCBkZXN0KQorICAgICAgICAgICAgICAgICAgICBpZiBkaWZmWydzcmNfc2hhMSddICE9IGRpZmZbJ2RzdF9zaGExJ106CisgICAgICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KGRlc3QpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwdXJlUmVuYW1lQ29weS5hZGQoZGVzdCkKKyAgICAgICAgICAgICAgICBpZiBpc01vZGVFeGVjQ2hhbmdlZChkaWZmWydzcmNfbW9kZSddLCBkaWZmWydkc3RfbW9kZSddKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucDRIYXNNb3ZlQ29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHA0X2VkaXQoZGVzdCkgICAjIHdpdGggbW92ZTogYWxyZWFkeSBvcGVuLCB3cml0YWJsZQorICAgICAgICAgICAgICAgICAgICBmaWxlc1RvQ2hhbmdlRXhlY0JpdFtkZXN0XSA9IGRpZmZbJ2RzdF9tb2RlJ10KKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5wNEhhc01vdmVDb21tYW5kOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmlzV2luZG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNobW9kKGRlc3QsIHN0YXQuU19JV1JJVEUpCisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLmFkZChzcmMpCisgICAgICAgICAgICAgICAgZWRpdGVkRmlsZXMuYWRkKGRlc3QpCisgICAgICAgICAgICBlbGlmIG1vZGlmaWVyID09ICJUIjoKKyAgICAgICAgICAgICAgICBmaWxlc1RvQ2hhbmdlVHlwZS5hZGQocGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGllKCJ1bmtub3duIG1vZGlmaWVyICVzIGZvciAlcyIgJSAobW9kaWZpZXIsIHBhdGgpKQorCisgICAgICAgIGRpZmZjbWQgPSAiZ2l0IGRpZmYtdHJlZSAtLWZ1bGwtaW5kZXggLXAgXCIlc1wiIiAlIChpZCkKKyAgICAgICAgcGF0Y2hjbWQgPSBkaWZmY21kICsgIiB8IGdpdCBhcHBseSAiCisgICAgICAgIHRyeVBhdGNoQ21kID0gcGF0Y2hjbWQgKyAiLS1jaGVjayAtIgorICAgICAgICBhcHBseVBhdGNoQ21kID0gcGF0Y2hjbWQgKyAiLS1jaGVjayAtLWFwcGx5IC0iCisgICAgICAgIHBhdGNoX3N1Y2NlZWRlZCA9IFRydWUKKworICAgICAgICBpZiBvcy5zeXN0ZW0odHJ5UGF0Y2hDbWQpICE9IDA6CisgICAgICAgICAgICBmaXhlZF9yY3Nfa2V5d29yZHMgPSBGYWxzZQorICAgICAgICAgICAgcGF0Y2hfc3VjY2VlZGVkID0gRmFsc2UKKyAgICAgICAgICAgIHByaW50KCJVbmZvcnR1bmF0ZWx5IGFwcGx5aW5nIHRoZSBjaGFuZ2UgZmFpbGVkISIpCisKKyAgICAgICAgICAgICMgUGF0Y2ggZmFpbGVkLCBtYXliZSBpdCdzIGp1c3QgUkNTIGtleXdvcmQgd29lcy4gTG9vayB0aHJvdWdoCisgICAgICAgICAgICAjIHRoZSBwYXRjaCB0byBzZWUgaWYgdGhhdCdzIHBvc3NpYmxlLgorICAgICAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIik6CisgICAgICAgICAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBwYXR0ZXJuID0gTm9uZQorICAgICAgICAgICAgICAgIGt3ZmlsZXMgPSB7fQorICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGVkaXRlZEZpbGVzIHwgZmlsZXNUb0RlbGV0ZToKKyAgICAgICAgICAgICAgICAgICAgIyBkaWQgdGhpcyBmaWxlJ3MgZGVsdGEgY29udGFpbiBSQ1Mga2V5d29yZHM/CisgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBwNF9rZXl3b3Jkc19yZWdleHBfZm9yX2ZpbGUoZmlsZSkKKworICAgICAgICAgICAgICAgICAgICBpZiBwYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGZpbGUgaXMgYSBwb3NzaWJpbGl0eS4uLmxvb2sgZm9yIFJDUyBrZXl3b3Jkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuVkVSQk9TRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJkaWZmIiwgIiVzXi4uJXMiICUgKGlkLCBpZCksIGZpbGVdKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZWdleHAuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoImdvdCBrZXl3b3JkIG1hdGNoIG9uICVzIGluICVzIGluICVzIiAlIChwYXR0ZXJuLCBsaW5lLCBmaWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dmaWxlc1tmaWxlXSA9IHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGt3ZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiemFwcGluZyAlcyB3aXRoICVzIiAlIChsaW5lLHBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICAjIEZpbGUgaXMgYmVpbmcgZGVsZXRlZCwgc28gbm90IG9wZW4gaW4gcDQuICBNdXN0CisgICAgICAgICAgICAgICAgICAgICMgZGlzYWJsZSB0aGUgcmVhZC1vbmx5IGJpdCBvbiB3aW5kb3dzLgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmlzV2luZG93cyBhbmQgZmlsZSBub3QgaW4gZWRpdGVkRmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5jaG1vZChmaWxlLCBzdGF0LlNfSVdSSVRFKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoUkNTS2V5d29yZHMoZmlsZSwga3dmaWxlc1tmaWxlXSkKKyAgICAgICAgICAgICAgICAgICAgZml4ZWRfcmNzX2tleXdvcmRzID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBmaXhlZF9yY3Nfa2V5d29yZHM6CisgICAgICAgICAgICAgICAgcHJpbnQoIlJldHJ5aW5nIHRoZSBwYXRjaCB3aXRoIFJDUyBrZXl3b3JkcyBjbGVhbmVkIHVwIikKKyAgICAgICAgICAgICAgICBpZiBvcy5zeXN0ZW0odHJ5UGF0Y2hDbWQpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHBhdGNoX3N1Y2NlZWRlZCA9IFRydWUKKworICAgICAgICBpZiBub3QgcGF0Y2hfc3VjY2VlZGVkOgorICAgICAgICAgICAgZm9yIGYgaW4gZWRpdGVkRmlsZXM6CisgICAgICAgICAgICAgICAgcDRfcmV2ZXJ0KGYpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjCisgICAgICAgICMgQXBwbHkgdGhlIHBhdGNoIGZvciByZWFsLCBhbmQgZG8gYWRkL2RlbGV0ZS8reCBoYW5kbGluZy4KKyAgICAgICAgIworICAgICAgICBzeXN0ZW0oYXBwbHlQYXRjaENtZCkKKworICAgICAgICBmb3IgZiBpbiBmaWxlc1RvQ2hhbmdlVHlwZToKKyAgICAgICAgICAgIHA0X2VkaXQoZiwgIi10IiwgImF1dG8iKQorICAgICAgICBmb3IgZiBpbiBmaWxlc1RvQWRkOgorICAgICAgICAgICAgcDRfYWRkKGYpCisgICAgICAgIGZvciBmIGluIGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICBwNF9yZXZlcnQoZikKKyAgICAgICAgICAgIHA0X2RlbGV0ZShmKQorCisgICAgICAgICMgU2V0L2NsZWFyIGV4ZWN1dGFibGUgYml0cworICAgICAgICBmb3IgZiBpbiBmaWxlc1RvQ2hhbmdlRXhlY0JpdC5rZXlzKCk6CisgICAgICAgICAgICBtb2RlID0gZmlsZXNUb0NoYW5nZUV4ZWNCaXRbZl0KKyAgICAgICAgICAgIHNldFA0RXhlY0JpdChmLCBtb2RlKQorCisgICAgICAgIHVwZGF0ZV9zaGVsdmUgPSAwCisgICAgICAgIGlmIGxlbihzZWxmLnVwZGF0ZV9zaGVsdmUpID4gMDoKKyAgICAgICAgICAgIHVwZGF0ZV9zaGVsdmUgPSBzZWxmLnVwZGF0ZV9zaGVsdmUucG9wKDApCisgICAgICAgICAgICBwNF9yZW9wZW5faW5fY2hhbmdlKHVwZGF0ZV9zaGVsdmUsIGFsbF9maWxlcykKKworICAgICAgICAjCisgICAgICAgICMgQnVpbGQgcDQgY2hhbmdlIGRlc2NyaXB0aW9uLCBzdGFydGluZyB3aXRoIHRoZSBjb250ZW50cworICAgICAgICAjIG9mIHRoZSBnaXQgY29tbWl0IG1lc3NhZ2UuCisgICAgICAgICMKKyAgICAgICAgbG9nTWVzc2FnZSA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChpZCkKKyAgICAgICAgbG9nTWVzc2FnZSA9IGxvZ01lc3NhZ2Uuc3RyaXAoKQorICAgICAgICAobG9nTWVzc2FnZSwgam9icykgPSBzZWxmLnNlcGFyYXRlX2pvYnNfZnJvbV9kZXNjcmlwdGlvbihsb2dNZXNzYWdlKQorCisgICAgICAgIHRlbXBsYXRlID0gc2VsZi5wcmVwYXJlU3VibWl0VGVtcGxhdGUodXBkYXRlX3NoZWx2ZSkKKyAgICAgICAgc3VibWl0VGVtcGxhdGUgPSBzZWxmLnByZXBhcmVMb2dNZXNzYWdlKHRlbXBsYXRlLCBsb2dNZXNzYWdlLCBqb2JzKQorCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVVc2VyOgorICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSArPSAiXG4jIyMjIyMjIyBBY3R1YWwgdXNlciAlcywgbW9kaWZpZWQgYWZ0ZXIgY29tbWl0XG4iICUgcDRVc2VyCisKKyAgICAgICAgaWYgc2VsZi5jaGVja0F1dGhvcnNoaXAgYW5kIG5vdCBzZWxmLnA0VXNlcklzTWUocDRVc2VyKToKKyAgICAgICAgICAgIHN1Ym1pdFRlbXBsYXRlICs9ICIjIyMjIyMjIyBnaXQgYXV0aG9yICVzIGRvZXMgbm90IG1hdGNoIHlvdXIgcDQgYWNjb3VudC5cbiIgJSBnaXRFbWFpbAorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gIiMjIyMjIyMjIFVzZSBvcHRpb24gLS1wcmVzZXJ2ZS11c2VyIHRvIG1vZGlmeSBhdXRob3JzaGlwLlxuIgorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gIiMjIyMjIyMjIFZhcmlhYmxlIGdpdC1wNC5za2lwVXNlck5hbWVDaGVjayBoaWRlcyB0aGlzIG1lc3NhZ2UuXG4iCisKKyAgICAgICAgc2VwYXJhdG9yTGluZSA9ICIjIyMjIyMjIyBldmVyeXRoaW5nIGJlbG93IHRoaXMgbGluZSBpcyBqdXN0IHRoZSBkaWZmICMjIyMjIyNcbiIKKyAgICAgICAgaWYgbm90IHNlbGYucHJlcGFyZV9wNF9vbmx5OgorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gc2VwYXJhdG9yTGluZQorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gc2VsZi5nZXRfZGlmZl9kZXNjcmlwdGlvbihlZGl0ZWRGaWxlcywgZmlsZXNUb0FkZCwgc3ltbGlua3MpCisKKyAgICAgICAgKGhhbmRsZSwgZmlsZU5hbWUpID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHRtcEZpbGUgPSBvcy5mZG9wZW4oaGFuZGxlLCAidytiIikKKyAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3M6CisgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSA9IHN1Ym1pdFRlbXBsYXRlLnJlcGxhY2UoIlxuIiwgIlxyXG4iKQorICAgICAgICB0bXBGaWxlLndyaXRlKHN1Ym1pdFRlbXBsYXRlKQorICAgICAgICB0bXBGaWxlLmNsb3NlKCkKKworICAgICAgICBpZiBzZWxmLnByZXBhcmVfcDRfb25seToKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgTGVhdmUgdGhlIHA0IHRyZWUgcHJlcGFyZWQsIGFuZCB0aGUgc3VibWl0IHRlbXBsYXRlIGFyb3VuZAorICAgICAgICAgICAgIyBhbmQgbGV0IHRoZSB1c2VyIGRlY2lkZSB3aGF0IHRvIGRvIG5leHQKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KCJQNCB3b3Jrc3BhY2UgcHJlcGFyZWQgZm9yIHN1Ym1pc3Npb24uIikKKyAgICAgICAgICAgIHByaW50KCJUbyBzdWJtaXQgb3IgcmV2ZXJ0LCBnbyB0byBjbGllbnQgd29ya3NwYWNlIikKKyAgICAgICAgICAgIHByaW50KCIgICIgKyBzZWxmLmNsaWVudFBhdGgpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludCgiVG8gc3VibWl0LCB1c2UgXCJwNCBzdWJtaXRcIiB0byB3cml0ZSBhIG5ldyBkZXNjcmlwdGlvbiwiKQorICAgICAgICAgICAgcHJpbnQoIm9yIFwicDQgc3VibWl0IC1pIDwlc1wiIHRvIHVzZSB0aGUgb25lIHByZXBhcmVkIGJ5IiBcCisgICAgICAgICAgICAgICAgICAiIFwiZ2l0IHA0XCIuIiAlIGZpbGVOYW1lKQorICAgICAgICAgICAgcHJpbnQoIllvdSBjYW4gZGVsZXRlIHRoZSBmaWxlIFwiJXNcIiB3aGVuIGZpbmlzaGVkLiIgJSBmaWxlTmFtZSkKKworICAgICAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZVVzZXIgYW5kIHA0VXNlciBhbmQgbm90IHNlbGYucDRVc2VySXNNZShwNFVzZXIpOgorICAgICAgICAgICAgICAgIHByaW50KCJUbyBwcmVzZXJ2ZSBjaGFuZ2Ugb3duZXJzaGlwIGJ5IHVzZXIgJXMsIHlvdSBtdXN0XG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAiZG8gXCJwNCBjaGFuZ2UgLWYgPGNoYW5nZT5cIiBhZnRlciBzdWJtaXR0aW5nIGFuZFxuIiBcCisgICAgICAgICAgICAgICAgICAgICAgImVkaXQgdGhlIFVzZXIgZmllbGQuIikKKyAgICAgICAgICAgIGlmIHB1cmVSZW5hbWVDb3B5OgorICAgICAgICAgICAgICAgIHByaW50KCJBZnRlciBzdWJtaXR0aW5nLCByZW5hbWVkIGZpbGVzIG11c3QgYmUgcmUtc3luY2VkLiIpCisgICAgICAgICAgICAgICAgcHJpbnQoIkludm9rZSBcInA0IHN5bmMgLWZcIiBvbiBlYWNoIG9mIHRoZXNlIGZpbGVzOiIpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gcHVyZVJlbmFtZUNvcHk6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCIgICIgKyBmKQorCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludCgiVG8gcmV2ZXJ0IHRoZSBjaGFuZ2VzLCB1c2UgXCJwNCByZXZlcnQgLi4uXCIsIGFuZCBkZWxldGUiKQorICAgICAgICAgICAgcHJpbnQoInRoZSBzdWJtaXQgdGVtcGxhdGUgZmlsZSBcIiVzXCIiICUgZmlsZU5hbWUpCisgICAgICAgICAgICBpZiBmaWxlc1RvQWRkOgorICAgICAgICAgICAgICAgIHByaW50KCJTaW5jZSB0aGUgY29tbWl0IGFkZHMgbmV3IGZpbGVzLCB0aGV5IG11c3QgYmUgZGVsZXRlZDoiKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCIgICIgKyBmKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjCisgICAgICAgICMgTGV0IHRoZSB1c2VyIGVkaXQgdGhlIGNoYW5nZSBkZXNjcmlwdGlvbiwgdGhlbiBzdWJtaXQgaXQuCisgICAgICAgICMKKyAgICAgICAgc3VibWl0dGVkID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLmVkaXRfdGVtcGxhdGUoZmlsZU5hbWUpOgorICAgICAgICAgICAgICAgICMgcmVhZCB0aGUgZWRpdGVkIG1lc3NhZ2UgYW5kIHN1Ym1pdAorICAgICAgICAgICAgICAgIHRtcEZpbGUgPSBvcGVuKGZpbGVOYW1lLCAicmIiKQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0bXBGaWxlLnJlYWQoKQorICAgICAgICAgICAgICAgIHRtcEZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuaXNXaW5kb3dzOgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKCJcclxuIiwgIlxuIikKKyAgICAgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSA9IG1lc3NhZ2VbOm1lc3NhZ2UuaW5kZXgoc2VwYXJhdG9yTGluZSldCisKKyAgICAgICAgICAgICAgICBpZiB1cGRhdGVfc2hlbHZlOgorICAgICAgICAgICAgICAgICAgICBwNF93cml0ZV9waXBlKFsnc2hlbHZlJywgJy1yJywgJy1pJ10sIHN1Ym1pdFRlbXBsYXRlKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5zaGVsdmU6CisgICAgICAgICAgICAgICAgICAgIHA0X3dyaXRlX3BpcGUoWydzaGVsdmUnLCAnLWknXSwgc3VibWl0VGVtcGxhdGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcDRfd3JpdGVfcGlwZShbJ3N1Ym1pdCcsICctaSddLCBzdWJtaXRUZW1wbGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgcmVuYW1lL2NvcHkgaGFwcGVuZWQgYnkgYXBwbHlpbmcgYSBwYXRjaCB0aGF0IGNyZWF0ZWQgYQorICAgICAgICAgICAgICAgICAgICAjIG5ldyBmaWxlLiAgVGhpcyBsZWF2ZXMgaXQgd3JpdGFibGUsIHdoaWNoIGNvbmZ1c2VzIHA0LgorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBwdXJlUmVuYW1lQ29weToKKyAgICAgICAgICAgICAgICAgICAgICAgIHA0X3N5bmMoZiwgIi1mIikKKworICAgICAgICAgICAgICAgIGlmIHNlbGYucHJlc2VydmVVc2VyOgorICAgICAgICAgICAgICAgICAgICBpZiBwNFVzZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEdldCBsYXN0IGNoYW5nZWxpc3QgbnVtYmVyLiBDYW5ub3QgZWFzaWx5IGdldCBpdCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBzdWJtaXQgY29tbWFuZCBvdXRwdXQgYXMgdGhlIG91dHB1dCBpcworICAgICAgICAgICAgICAgICAgICAgICAgIyB1bm1hcnNoYWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VsaXN0ID0gc2VsZi5sYXN0UDRDaGFuZ2VsaXN0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kaWZ5Q2hhbmdlbGlzdFVzZXIoY2hhbmdlbGlzdCwgcDRVc2VyKQorCisgICAgICAgICAgICAgICAgc3VibWl0dGVkID0gVHJ1ZQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIHNraXAgdGhpcyBwYXRjaAorICAgICAgICAgICAgaWYgbm90IHN1Ym1pdHRlZCBvciBzZWxmLnNoZWx2ZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNoZWx2ZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJSZXZlcnRpbmcgc2hlbHZlZCBmaWxlcy4iKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICgiU3VibWlzc2lvbiBjYW5jZWxsZWQsIHVuZG9pbmcgcDQgY2hhbmdlcy4iKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGVkaXRlZEZpbGVzIHwgZmlsZXNUb0RlbGV0ZToKKyAgICAgICAgICAgICAgICAgICAgcDRfcmV2ZXJ0KGYpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXNUb0FkZDoKKyAgICAgICAgICAgICAgICAgICAgcDRfcmV2ZXJ0KGYpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmKQorCisgICAgICAgIG9zLnJlbW92ZShmaWxlTmFtZSkKKyAgICAgICAgcmV0dXJuIHN1Ym1pdHRlZAorCisgICAgIyBFeHBvcnQgZ2l0IHRhZ3MgYXMgcDQgbGFiZWxzLiBDcmVhdGUgYSBwNCBsYWJlbCBhbmQgdGhlbiB0YWcKKyAgICAjIHdpdGggdGhhdC4KKyAgICBkZWYgZXhwb3J0R2l0VGFncyhzZWxmLCBnaXRUYWdzKToKKyAgICAgICAgdmFsaWRMYWJlbFJlZ2V4cCA9IGdpdENvbmZpZygiZ2l0LXA0LmxhYmVsRXhwb3J0UmVnZXhwIikKKyAgICAgICAgaWYgbGVuKHZhbGlkTGFiZWxSZWdleHApID09IDA6CisgICAgICAgICAgICB2YWxpZExhYmVsUmVnZXhwID0gZGVmYXVsdExhYmVsUmVnZXhwCisgICAgICAgIG0gPSByZS5jb21waWxlKHZhbGlkTGFiZWxSZWdleHApCisKKyAgICAgICAgZm9yIG5hbWUgaW4gZ2l0VGFnczoKKworICAgICAgICAgICAgaWYgbm90IG0ubWF0Y2gobmFtZSk6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoInRhZyAlcyBkb2VzIG5vdCBtYXRjaCByZWdleHAgJXMiICUgKG5hbWUsIHZhbGlkTGFiZWxSZWdleHApKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgR2V0IHRoZSBwNCBjb21taXQgdGhpcyBjb3JyZXNwb25kcyB0bworICAgICAgICAgICAgbG9nTWVzc2FnZSA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChuYW1lKQorICAgICAgICAgICAgdmFsdWVzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZ01lc3NhZ2UpCisKKyAgICAgICAgICAgIGlmICdjaGFuZ2UnIG5vdCBpbiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgIyBhIHRhZyBwb2ludGluZyB0byBzb21ldGhpbmcgbm90IHNlbnQgdG8gcDQ7IGlnbm9yZQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJnaXQgdGFnICVzIGRvZXMgbm90IGdpdmUgYSBwNCBjb21taXQiICUgbmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjaGFuZ2VsaXN0ID0gdmFsdWVzWydjaGFuZ2UnXQorCisgICAgICAgICAgICAjIEdldCB0aGUgdGFnIGRldGFpbHMuCisgICAgICAgICAgICBpbkhlYWRlciA9IFRydWUKKyAgICAgICAgICAgIGlzQW5ub3RhdGVkID0gRmFsc2UKKyAgICAgICAgICAgIGJvZHkgPSBbXQorICAgICAgICAgICAgZm9yIGwgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgImNhdC1maWxlIiwgIi1wIiwgbmFtZV0pOgorICAgICAgICAgICAgICAgIGwgPSBsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBpbkhlYWRlcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2gocid0YWdccysnLCBsKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5ub3RhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIHJlLm1hdGNoKHInXHMqJCcsIGwpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5IZWFkZXIgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChsKQorCisgICAgICAgICAgICBpZiBub3QgaXNBbm5vdGF0ZWQ6CisgICAgICAgICAgICAgICAgYm9keSA9IFsibGlnaHR3ZWlnaHQgdGFnIGltcG9ydGVkIGJ5IGdpdCBwNFxuIl0KKworICAgICAgICAgICAgIyBDcmVhdGUgdGhlIGxhYmVsIC0gdXNlIHRoZSBzYW1lIHZpZXcgYXMgdGhlIGNsaWVudCBzcGVjIHdlIGFyZSB1c2luZworICAgICAgICAgICAgY2xpZW50U3BlYyA9IGdldENsaWVudFNwZWMoKQorCisgICAgICAgICAgICBsYWJlbFRlbXBsYXRlICA9ICJMYWJlbDogJXNcbiIgJSBuYW1lCisgICAgICAgICAgICBsYWJlbFRlbXBsYXRlICs9ICJEZXNjcmlwdGlvbjpcbiIKKyAgICAgICAgICAgIGZvciBiIGluIGJvZHk6CisgICAgICAgICAgICAgICAgbGFiZWxUZW1wbGF0ZSArPSAiXHQiICsgYiArICJcbiIKKyAgICAgICAgICAgIGxhYmVsVGVtcGxhdGUgKz0gIlZpZXc6XG4iCisgICAgICAgICAgICBmb3IgZGVwb3Rfc2lkZSBpbiBjbGllbnRTcGVjLm1hcHBpbmdzOgorICAgICAgICAgICAgICAgIGxhYmVsVGVtcGxhdGUgKz0gIlx0JXNcbiIgJSBkZXBvdF9zaWRlCisKKyAgICAgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICBwcmludCgiV291bGQgY3JlYXRlIHA0IGxhYmVsICVzIGZvciB0YWciICUgbmFtZSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5wcmVwYXJlX3A0X29ubHk6CisgICAgICAgICAgICAgICAgcHJpbnQoIk5vdCBjcmVhdGluZyBwNCBsYWJlbCAlcyBmb3IgdGFnIGR1ZSB0byBvcHRpb24iIFwKKyAgICAgICAgICAgICAgICAgICAgICAiIC0tcHJlcGFyZS1wNC1vbmx5IiAlIG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHA0X3dyaXRlX3BpcGUoWyJsYWJlbCIsICItaSJdLCBsYWJlbFRlbXBsYXRlKQorCisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIGxhYmVsCisgICAgICAgICAgICAgICAgcDRfc3lzdGVtKFsidGFnIiwgIi1sIiwgbmFtZV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICBbIiVzQCVzIiAlIChkZXBvdF9zaWRlLCBjaGFuZ2VsaXN0KSBmb3IgZGVwb3Rfc2lkZSBpbiBjbGllbnRTcGVjLm1hcHBpbmdzXSkKKworICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJjcmVhdGVkIHA0IGxhYmVsIGZvciB0YWcgJXMiICUgbmFtZSkKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5tYXN0ZXIgPSBjdXJyZW50R2l0QnJhbmNoKCkKKyAgICAgICAgZWxpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgIHNlbGYubWFzdGVyID0gYXJnc1swXQorICAgICAgICAgICAgaWYgbm90IGJyYW5jaEV4aXN0cyhzZWxmLm1hc3Rlcik6CisgICAgICAgICAgICAgICAgZGllKCJCcmFuY2ggJXMgZG9lcyBub3QgZXhpc3QiICUgc2VsZi5tYXN0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBmb3IgaSBpbiBzZWxmLnVwZGF0ZV9zaGVsdmU6CisgICAgICAgICAgICBpZiBpIDw9IDA6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoImludmFsaWQgY2hhbmdlbGlzdCAlZCIgJSBpKQorCisgICAgICAgIGlmIHNlbGYubWFzdGVyOgorICAgICAgICAgICAgYWxsb3dTdWJtaXQgPSBnaXRDb25maWcoImdpdC1wNC5hbGxvd1N1Ym1pdCIpCisgICAgICAgICAgICBpZiBsZW4oYWxsb3dTdWJtaXQpID4gMCBhbmQgbm90IHNlbGYubWFzdGVyIGluIGFsbG93U3VibWl0LnNwbGl0KCIsIik6CisgICAgICAgICAgICAgICAgZGllKCIlcyBpcyBub3QgaW4gZ2l0LXA0LmFsbG93U3VibWl0IiAlIHNlbGYubWFzdGVyKQorCisgICAgICAgIFt1cHN0cmVhbSwgc2V0dGluZ3NdID0gZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoKQorICAgICAgICBzZWxmLmRlcG90UGF0aCA9IHNldHRpbmdzWydkZXBvdC1wYXRocyddWzBdCisgICAgICAgIGlmIGxlbihzZWxmLm9yaWdpbikgPT0gMDoKKyAgICAgICAgICAgIHNlbGYub3JpZ2luID0gdXBzdHJlYW0KKworICAgICAgICBpZiBsZW4oc2VsZi51cGRhdGVfc2hlbHZlKSA+IDA6CisgICAgICAgICAgICBzZWxmLnNoZWx2ZSA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlcjoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNhbkNoYW5nZUNoYW5nZWxpc3RzKCk6CisgICAgICAgICAgICAgICAgZGllKCJDYW5ub3QgcHJlc2VydmUgdXNlciBuYW1lcyB3aXRob3V0IHA0IHN1cGVyLXVzZXIgb3IgYWRtaW4gcGVybWlzc2lvbnMiKQorCisgICAgICAgICMgaWYgbm90IHNldCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRyeSB0aGUgY29uZmlnIGZpbGUKKyAgICAgICAgaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciBpcyBOb25lOgorICAgICAgICAgICAgdmFsID0gZ2l0Q29uZmlnKCJnaXQtcDQuY29uZmxpY3QiKQorICAgICAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgICAgIGlmIHZhbCBub3QgaW4gc2VsZi5jb25mbGljdF9iZWhhdmlvcl9jaG9pY2VzOgorICAgICAgICAgICAgICAgICAgICBkaWUoIkludmFsaWQgdmFsdWUgJyVzJyBmb3IgY29uZmlnIGdpdC1wNC5jb25mbGljdCIgJSB2YWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbCA9ICJhc2siCisgICAgICAgICAgICBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yID0gdmFsCisKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIk9yaWdpbiBicmFuY2ggaXMgIiArIHNlbGYub3JpZ2luKQorCisgICAgICAgIGlmIGxlbihzZWxmLmRlcG90UGF0aCkgPT0gMDoKKyAgICAgICAgICAgIHByaW50KCJJbnRlcm5hbCBlcnJvcjogY2Fubm90IGxvY2F0ZSBwZXJmb3JjZSBkZXBvdCBwYXRoIGZyb20gZXhpc3RpbmcgYnJhbmNoZXMiKQorICAgICAgICAgICAgc3lzLmV4aXQoMTI4KQorCisgICAgICAgIHNlbGYudXNlQ2xpZW50U3BlYyA9IEZhbHNlCisgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC51c2VjbGllbnRzcGVjIik6CisgICAgICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWMgPSBUcnVlCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMgPSBnZXRDbGllbnRTcGVjKCkKKworICAgICAgICAjIENoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIFA0IGJyYW5jaGVzCisgICAgICAgIGJyYW5jaGVzRGV0ZWN0ZWQgPSAobGVuKHA0QnJhbmNoZXNJbkdpdCgpLmtleXMoKSkgPiAxKQorCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYyBhbmQgbm90IGJyYW5jaGVzRGV0ZWN0ZWQ6CisgICAgICAgICAgICAjIGFsbCBmaWxlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNsaWVudCBzcGVjCisgICAgICAgICAgICBzZWxmLmNsaWVudFBhdGggPSBnZXRDbGllbnRSb290KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50UGF0aCA9IHA0V2hlcmUoc2VsZi5kZXBvdFBhdGgpCisKKyAgICAgICAgaWYgc2VsZi5jbGllbnRQYXRoID09ICIiOgorICAgICAgICAgICAgZGllKCJFcnJvcjogQ2Fubm90IGxvY2F0ZSBwZXJmb3JjZSBjaGVja291dCBvZiAlcyBpbiBjbGllbnQgdmlldyIgJSBzZWxmLmRlcG90UGF0aCkKKworICAgICAgICBwcmludCgiUGVyZm9yY2UgY2hlY2tvdXQgZm9yIGRlcG90IHBhdGggJXMgbG9jYXRlZCBhdCAlcyIgJSAoc2VsZi5kZXBvdFBhdGgsIHNlbGYuY2xpZW50UGF0aCkpCisgICAgICAgIHNlbGYub2xkV29ya2luZ0RpcmVjdG9yeSA9IG9zLmdldGN3ZCgpCisKKyAgICAgICAgIyBlbnN1cmUgdGhlIGNsaWVudFBhdGggZXhpc3RzCisgICAgICAgIG5ld19jbGllbnRfZGlyID0gRmFsc2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuY2xpZW50UGF0aCk6CisgICAgICAgICAgICBuZXdfY2xpZW50X2RpciA9IFRydWUKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuY2xpZW50UGF0aCkKKworICAgICAgICBjaGRpcihzZWxmLmNsaWVudFBhdGgsIGlzX2NsaWVudF9wYXRoPVRydWUpCisgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgIHByaW50KCJXb3VsZCBzeW5jaHJvbml6ZSBwNCBjaGVja291dCBpbiAlcyIgJSBzZWxmLmNsaWVudFBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiU3luY2hyb25pemluZyBwNCBjaGVja291dC4uLiIpCisgICAgICAgICAgICBpZiBuZXdfY2xpZW50X2RpcjoKKyAgICAgICAgICAgICAgICAjIG9sZCBvbmUgd2FzIGRlc3Ryb3llZCwgYW5kIG1heWJlIG5vYm9keSB0b2xkIHA0CisgICAgICAgICAgICAgICAgcDRfc3luYygiLi4uIiwgIi1mIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcDRfc3luYygiLi4uIikKKyAgICAgICAgc2VsZi5jaGVjaygpCisKKyAgICAgICAgY29tbWl0cyA9IFtdCisgICAgICAgIGlmIHNlbGYubWFzdGVyOgorICAgICAgICAgICAgY29tbWl0dGlzaCA9IHNlbGYubWFzdGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21taXR0aXNoID0gJ0hFQUQnCisKKyAgICAgICAgaWYgc2VsZi5jb21taXQgIT0gIiI6CisgICAgICAgICAgICBpZiBzZWxmLmNvbW1pdC5maW5kKCIuLiIpICE9IC0xOgorICAgICAgICAgICAgICAgIGxpbWl0c19pc2ggPSBzZWxmLmNvbW1pdC5zcGxpdCgiLi4iKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJyZXYtbGlzdCIsICItLW5vLW1lcmdlcyIsICIlcy4uJXMiICUgKGxpbWl0c19pc2hbMF0sIGxpbWl0c19pc2hbMV0pXSk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBjb21taXRzLnJldmVyc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb21taXRzLmFwcGVuZChzZWxmLmNvbW1pdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJyZXYtbGlzdCIsICItLW5vLW1lcmdlcyIsICIlcy4uJXMiICUgKHNlbGYub3JpZ2luLCBjb21taXR0aXNoKV0pOgorICAgICAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbW1pdHMucmV2ZXJzZSgpCisKKyAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZVVzZXIgb3IgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LnNraXBVc2VyTmFtZUNoZWNrIik6CisgICAgICAgICAgICBzZWxmLmNoZWNrQXV0aG9yc2hpcCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNoZWNrQXV0aG9yc2hpcCA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlcjoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tWYWxpZFA0VXNlcnMoY29tbWl0cykKKworICAgICAgICAjCisgICAgICAgICMgQnVpbGQgdXAgYSBzZXQgb2Ygb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gZGlmZiB3aGVuCisgICAgICAgICMgc3VibWl0dGluZyBlYWNoIGNvbW1pdCB0byBwNC4KKyAgICAgICAgIworICAgICAgICBpZiBzZWxmLmRldGVjdFJlbmFtZXM6CisgICAgICAgICAgICAjIGNvbW1hbmQtbGluZSAtTSBhcmcKKyAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgPSAiLU0iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIG5vdCBleHBsaWNpdGx5IHNldCBjaGVjayB0aGUgY29uZmlnIHZhcmlhYmxlCisgICAgICAgICAgICBkZXRlY3RSZW5hbWVzID0gZ2l0Q29uZmlnKCJnaXQtcDQuZGV0ZWN0UmVuYW1lcyIpCisKKyAgICAgICAgICAgIGlmIGRldGVjdFJlbmFtZXMubG93ZXIoKSA9PSAiZmFsc2UiIG9yIGRldGVjdFJlbmFtZXMgPT0gIiI6CisgICAgICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyA9ICIiCisgICAgICAgICAgICBlbGlmIGRldGVjdFJlbmFtZXMubG93ZXIoKSA9PSAidHJ1ZSI6CisgICAgICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyA9ICItTSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyA9ICItTSVzIiAlIGRldGVjdFJlbmFtZXMKKworICAgICAgICAjIG5vIGNvbW1hbmQtbGluZSBhcmcgZm9yIC1DIG9yIC0tZmluZC1jb3BpZXMtaGFyZGVyLCBqdXN0CisgICAgICAgICMgY29uZmlnIHZhcmlhYmxlcworICAgICAgICBkZXRlY3RDb3BpZXMgPSBnaXRDb25maWcoImdpdC1wNC5kZXRlY3RDb3BpZXMiKQorICAgICAgICBpZiBkZXRlY3RDb3BpZXMubG93ZXIoKSA9PSAiZmFsc2UiIG9yIGRldGVjdENvcGllcyA9PSAiIjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBkZXRlY3RDb3BpZXMubG93ZXIoKSA9PSAidHJ1ZSI6CisgICAgICAgICAgICBzZWxmLmRpZmZPcHRzICs9ICIgLUMiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRpZmZPcHRzICs9ICIgLUMlcyIgJSBkZXRlY3RDb3BpZXMKKworICAgICAgICBpZiBnaXRDb25maWdCb29sKCJnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIik6CisgICAgICAgICAgICBzZWxmLmRpZmZPcHRzICs9ICIgLS1maW5kLWNvcGllcy1oYXJkZXIiCisKKyAgICAgICAgbnVtX3NoZWx2ZXMgPSBsZW4oc2VsZi51cGRhdGVfc2hlbHZlKQorICAgICAgICBpZiBudW1fc2hlbHZlcyA+IDAgYW5kIG51bV9zaGVsdmVzICE9IGxlbihjb21taXRzKToKKyAgICAgICAgICAgIHN5cy5leGl0KCJudW1iZXIgb2YgY29tbWl0cyAoJWQpIG11c3QgbWF0Y2ggbnVtYmVyIG9mIHNoZWx2ZWQgY2hhbmdlbGlzdCAoJWQpIiAlCisgICAgICAgICAgICAgICAgICAgICAobGVuKGNvbW1pdHMpLCBudW1fc2hlbHZlcykpCisKKyAgICAgICAgaG9va3NfcGF0aCA9IGdpdENvbmZpZygiY29yZS5ob29rc1BhdGgiKQorICAgICAgICBpZiBsZW4oaG9va3NfcGF0aCkgPD0gMDoKKyAgICAgICAgICAgIGhvb2tzX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoIkdJVF9ESVIiLCAiLmdpdCIpLCAiaG9va3MiKQorCisgICAgICAgIGhvb2tfZmlsZSA9IG9zLnBhdGguam9pbihob29rc19wYXRoLCAicDQtcHJlLXN1Ym1pdCIpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGhvb2tfZmlsZSkgYW5kIG9zLmFjY2Vzcyhob29rX2ZpbGUsIG9zLlhfT0spIGFuZCBzdWJwcm9jZXNzLmNhbGwoW2hvb2tfZmlsZV0pICE9IDA6CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICMKKyAgICAgICAgIyBBcHBseSB0aGUgY29tbWl0cywgb25lIGF0IGEgdGltZS4gIE9uIGZhaWx1cmUsIGFzayBpZiBzaG91bGQKKyAgICAgICAgIyBjb250aW51ZSB0byB0cnkgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoZXMsIG9yIHF1aXQuCisgICAgICAgICMKKyAgICAgICAgaWYgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgcHJpbnQoIldvdWxkIGFwcGx5IikKKyAgICAgICAgYXBwbGllZCA9IFtdCisgICAgICAgIGxhc3QgPSBsZW4oY29tbWl0cykgLSAxCisgICAgICAgIGZvciBpLCBjb21taXQgaW4gZW51bWVyYXRlKGNvbW1pdHMpOgorICAgICAgICAgICAgaWYgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgICAgIHByaW50KCIgIiwgcmVhZF9waXBlKFsiZ2l0IiwgInNob3ciLCAiLXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9Zm9ybWF0OiVoICVzIiwgY29tbWl0XSkpCisgICAgICAgICAgICAgICAgb2sgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9rID0gc2VsZi5hcHBseUNvbW1pdChjb21taXQpCisgICAgICAgICAgICBpZiBvazoKKyAgICAgICAgICAgICAgICBhcHBsaWVkLmFwcGVuZChjb21taXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucHJlcGFyZV9wNF9vbmx5IGFuZCBpIDwgbGFzdDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlByb2Nlc3Npbmcgb25seSB0aGUgZmlyc3QgY29tbWl0IGR1ZSB0byBvcHRpb24iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtLXByZXBhcmUtcDQtb25seSIpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgaSA8IGxhc3Q6CisgICAgICAgICAgICAgICAgICAgICMgcHJvbXB0IGZvciB3aGF0IHRvIGRvLCBvciB1c2UgdGhlIG9wdGlvbi92YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yID09ICJhc2siOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIldoYXQgZG8geW91IHdhbnQgdG8gZG8/IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcHJvbXB0KCJbc11raXAgdGhpcyBjb21taXQgYnV0IGFwcGx5IHRoZSByZXN0LCBvciBbcV11aXQ/ICIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9PSAic2tpcCI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9ICJzIgorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYuY29uZmxpY3RfYmVoYXZpb3IgPT0gInF1aXQiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAicSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiVW5rbm93biBjb25mbGljdF9iZWhhdmlvciAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdF9iZWhhdmlvcikKKworICAgICAgICAgICAgICAgICAgICBpZiByZXNwb25zZSA9PSAicyI6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiU2tpcHBpbmcgdGhpcyBjb21taXQsIGJ1dCBhcHBseWluZyB0aGUgcmVzdCIpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlID09ICJxIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJRdWl0dGluZyIpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGNoZGlyKHNlbGYub2xkV29ya2luZ0RpcmVjdG9yeSkKKyAgICAgICAgc2hlbHZlZF9hcHBsaWVkID0gInNoZWx2ZWQiIGlmIHNlbGYuc2hlbHZlIGVsc2UgImFwcGxpZWQiCisgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBzZWxmLnByZXBhcmVfcDRfb25seToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBsZW4oY29tbWl0cykgPT0gbGVuKGFwcGxpZWQpOgorICAgICAgICAgICAgcHJpbnQoIkFsbCBjb21taXRzIHswfSEiLmZvcm1hdChzaGVsdmVkX2FwcGxpZWQpKQorCisgICAgICAgICAgICBzeW5jID0gUDRTeW5jKCkKKyAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgICAgIHN5bmMuYnJhbmNoID0gc2VsZi5icmFuY2gKKyAgICAgICAgICAgIGlmIHNlbGYuZGlzYWJsZV9wNHN5bmM6CisgICAgICAgICAgICAgICAgc3luYy5zeW5jX29yaWdpbl9vbmx5KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3luYy5ydW4oW10pCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kaXNhYmxlX3JlYmFzZToKKyAgICAgICAgICAgICAgICAgICAgcmViYXNlID0gUDRSZWJhc2UoKQorICAgICAgICAgICAgICAgICAgICByZWJhc2UucmViYXNlKCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbGVuKGFwcGxpZWQpID09IDA6CisgICAgICAgICAgICAgICAgcHJpbnQoIk5vIGNvbW1pdHMgezB9LiIuZm9ybWF0KHNoZWx2ZWRfYXBwbGllZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCJ7MH0gb25seSB0aGUgY29tbWl0cyBtYXJrZWQgd2l0aCAnKic6Ii5mb3JtYXQoc2hlbHZlZF9hcHBsaWVkLmNhcGl0YWxpemUoKSkpCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgYyBpbiBhcHBsaWVkOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhciA9ICIqIgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhciA9ICIgIgorICAgICAgICAgICAgICAgICAgICBwcmludChzdGFyLCByZWFkX3BpcGUoWyJnaXQiLCAic2hvdyIsICItcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZm9ybWF0PWZvcm1hdDolaCAlcyIsICBjXSkpCisgICAgICAgICAgICAgICAgcHJpbnQoIllvdSB3aWxsIGhhdmUgdG8gZG8gJ2dpdCBwNCBzeW5jJyBhbmQgcmViYXNlLiIpCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LmV4cG9ydExhYmVscyIpOgorICAgICAgICAgICAgc2VsZi5leHBvcnRMYWJlbHMgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5leHBvcnRMYWJlbHM6CisgICAgICAgICAgICBwNExhYmVscyA9IGdldFA0TGFiZWxzKHNlbGYuZGVwb3RQYXRoKQorICAgICAgICAgICAgZ2l0VGFncyA9IGdldEdpdFRhZ3MoKQorCisgICAgICAgICAgICBtaXNzaW5nR2l0VGFncyA9IGdpdFRhZ3MgLSBwNExhYmVscworICAgICAgICAgICAgc2VsZi5leHBvcnRHaXRUYWdzKG1pc3NpbmdHaXRUYWdzKQorCisgICAgICAgICMgZXhpdCB3aXRoIGVycm9yIHVubGVzcyBldmVyeXRoaW5nIGFwcGxpZWQgcGVyZmVjdGx5CisgICAgICAgIGlmIGxlbihjb21taXRzKSAhPSBsZW4oYXBwbGllZCk6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBWaWV3KG9iamVjdCk6CisgICAgIiIiUmVwcmVzZW50IGEgcDQgdmlldyAoInA0IGhlbHAgdmlld3MiKSwgYW5kIG1hcCBmaWxlcyBpbiBhCisgICAgICAgcmVwbyBhY2NvcmRpbmcgdG8gdGhlIHZpZXcuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50X25hbWUpOgorICAgICAgICBzZWxmLm1hcHBpbmdzID0gW10KKyAgICAgICAgc2VsZi5jbGllbnRfcHJlZml4ID0gIi8vJXMvIiAlIGNsaWVudF9uYW1lCisgICAgICAgICMgY2FjaGUgcmVzdWx0cyBvZiAicDQgd2hlcmUiIHRvIGxvb2t1cCBjbGllbnQgZmlsZSBsb2NhdGlvbnMKKyAgICAgICAgc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlID0ge30KKworICAgIGRlZiBhcHBlbmQoc2VsZiwgdmlld19saW5lKToKKyAgICAgICAgIiIiUGFyc2UgYSB2aWV3IGxpbmUsIHNwbGl0dGluZyBpdCBpbnRvIGRlcG90IGFuZCBjbGllbnQKKyAgICAgICAgICAgc2lkZXMuICBBcHBlbmQgdG8gc2VsZi5tYXBwaW5ncywgcHJlc2VydmluZyBvcmRlci4gIFRoaXMKKyAgICAgICAgICAgaXMgb25seSBuZWVkZWQgZm9yIHRhZyBjcmVhdGlvbi4iIiIKKworICAgICAgICAjIFNwbGl0IHRoZSB2aWV3IGxpbmUgaW50byBleGFjdGx5IHR3byB3b3Jkcy4gIFA0IGVuZm9yY2VzCisgICAgICAgICMgc3RydWN0dXJlIG9uIHRoZXNlIGxpbmVzIHRoYXQgc2ltcGxpZmllcyB0aGlzIHF1aXRlIGEgYml0LgorICAgICAgICAjCisgICAgICAgICMgRWl0aGVyIG9yIGJvdGggd29yZHMgbWF5IGJlIGRvdWJsZS1xdW90ZWQuCisgICAgICAgICMgU2luZ2xlIHF1b3RlcyBkbyBub3QgbWF0dGVyLgorICAgICAgICAjIERvdWJsZS1xdW90ZSBtYXJrcyBjYW5ub3Qgb2NjdXIgaW5zaWRlIHRoZSB3b3Jkcy4KKyAgICAgICAgIyBBICsgb3IgLSBwcmVmaXggaXMgYWxzbyBpbnNpZGUgdGhlIHF1b3Rlcy4KKyAgICAgICAgIyBUaGVyZSBhcmUgbm8gcXVvdGVzIHVubGVzcyB0aGV5IGNvbnRhaW4gYSBzcGFjZS4KKyAgICAgICAgIyBUaGUgbGluZSBpcyBhbHJlYWR5IHdoaXRlLXNwYWNlIHN0cmlwcGVkLgorICAgICAgICAjIFRoZSB0d28gd29yZHMgYXJlIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZS4KKyAgICAgICAgIworICAgICAgICBpZiB2aWV3X2xpbmVbMF0gPT0gJyInOgorICAgICAgICAgICAgIyBGaXJzdCB3b3JkIGlzIGRvdWJsZSBxdW90ZWQuICBGaW5kIGl0cyBlbmQuCisgICAgICAgICAgICBjbG9zZV9xdW90ZV9pbmRleCA9IHZpZXdfbGluZS5maW5kKCciJywgMSkKKyAgICAgICAgICAgIGlmIGNsb3NlX3F1b3RlX2luZGV4IDw9IDA6CisgICAgICAgICAgICAgICAgZGllKCJObyBmaXJzdC13b3JkIGNsb3NpbmcgcXVvdGUgZm91bmQ6ICVzIiAlIHZpZXdfbGluZSkKKyAgICAgICAgICAgIGRlcG90X3NpZGUgPSB2aWV3X2xpbmVbMTpjbG9zZV9xdW90ZV9pbmRleF0KKyAgICAgICAgICAgICMgc2tpcCBjbG9zaW5nIHF1b3RlIGFuZCBzcGFjZQorICAgICAgICAgICAgcmhzX2luZGV4ID0gY2xvc2VfcXVvdGVfaW5kZXggKyAxICsgMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BhY2VfaW5kZXggPSB2aWV3X2xpbmUuZmluZCgiICIpCisgICAgICAgICAgICBpZiBzcGFjZV9pbmRleCA8PSAwOgorICAgICAgICAgICAgICAgIGRpZSgiTm8gd29yZC1zcGxpdHRpbmcgc3BhY2UgZm91bmQ6ICVzIiAlIHZpZXdfbGluZSkKKyAgICAgICAgICAgIGRlcG90X3NpZGUgPSB2aWV3X2xpbmVbMDpzcGFjZV9pbmRleF0KKyAgICAgICAgICAgIHJoc19pbmRleCA9IHNwYWNlX2luZGV4ICsgMQorCisgICAgICAgICMgcHJlZml4ICsgbWVhbnMgb3ZlcmxheSBvbiBwcmV2aW91cyBtYXBwaW5nCisgICAgICAgIGlmIGRlcG90X3NpZGUuc3RhcnRzd2l0aCgiKyIpOgorICAgICAgICAgICAgZGVwb3Rfc2lkZSA9IGRlcG90X3NpZGVbMTpdCisKKyAgICAgICAgIyBwcmVmaXggLSBtZWFucyBleGNsdWRlIHRoaXMgcGF0aCwgbGVhdmUgb3V0IG9mIG1hcHBpbmdzCisgICAgICAgIGV4Y2x1ZGUgPSBGYWxzZQorICAgICAgICBpZiBkZXBvdF9zaWRlLnN0YXJ0c3dpdGgoIi0iKToKKyAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCisgICAgICAgICAgICBkZXBvdF9zaWRlID0gZGVwb3Rfc2lkZVsxOl0KKworICAgICAgICBpZiBub3QgZXhjbHVkZToKKyAgICAgICAgICAgIHNlbGYubWFwcGluZ3MuYXBwZW5kKGRlcG90X3NpZGUpCisKKyAgICBkZWYgY29udmVydF9jbGllbnRfcGF0aChzZWxmLCBjbGllbnRGaWxlKToKKyAgICAgICAgIyBjaG9wIG9mZiAvL2NsaWVudC8gcGFydCB0byBtYWtlIGl0IHJlbGF0aXZlCisgICAgICAgIGlmIG5vdCBjbGllbnRGaWxlLnN0YXJ0c3dpdGgoc2VsZi5jbGllbnRfcHJlZml4KToKKyAgICAgICAgICAgIGRpZSgiTm8gcHJlZml4ICclcycgb24gY2xpZW50RmlsZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgKHNlbGYuY2xpZW50X3ByZWZpeCwgY2xpZW50RmlsZSkpCisgICAgICAgIHJldHVybiBjbGllbnRGaWxlW2xlbihzZWxmLmNsaWVudF9wcmVmaXgpOl0KKworICAgIGRlZiB1cGRhdGVfY2xpZW50X3NwZWNfcGF0aF9jYWNoZShzZWxmLCBmaWxlcyk6CisgICAgICAgICIiIiBDYWNoaW5nIGZpbGUgcGF0aHMgYnkgInA0IHdoZXJlIiBiYXRjaCBxdWVyeSAiIiIKKworICAgICAgICAjIExpc3QgZGVwb3QgZmlsZSBwYXRocyBleGNsdWRlIHRoYXQgYWxyZWFkeSBjYWNoZWQKKyAgICAgICAgZmlsZUFyZ3MgPSBbZlsncGF0aCddIGZvciBmIGluIGZpbGVzIGlmIGZbJ3BhdGgnXSBub3QgaW4gc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlXQorCisgICAgICAgIGlmIGxlbihmaWxlQXJncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAgIyBBbGwgZmlsZXMgaW4gY2FjaGUKKworICAgICAgICB3aGVyZV9yZXN1bHQgPSBwNENtZExpc3QoWyIteCIsICItIiwgIndoZXJlIl0sIHN0ZGluPWZpbGVBcmdzKQorICAgICAgICBmb3IgcmVzIGluIHdoZXJlX3Jlc3VsdDoKKyAgICAgICAgICAgIGlmICJjb2RlIiBpbiByZXMgYW5kIHJlc1siY29kZSJdID09ICJlcnJvciI6CisgICAgICAgICAgICAgICAgIyBhc3N1bWUgZXJyb3IgaXMgIi4uLiBmaWxlKHMpIG5vdCBpbiBjbGllbnQgdmlldyIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgImNsaWVudEZpbGUiIG5vdCBpbiByZXM6CisgICAgICAgICAgICAgICAgZGllKCJObyBjbGllbnRGaWxlIGluICdwNCB3aGVyZScgb3V0cHV0IikKKyAgICAgICAgICAgIGlmICJ1bm1hcCIgaW4gcmVzOgorICAgICAgICAgICAgICAgICMgaXQgd2lsbCBsaXN0IGFsbCBvZiB0aGVtLCBidXQgb25seSBvbmUgbm90IHVubWFwLXBlZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCJjb3JlLmlnbm9yZWNhc2UiKToKKyAgICAgICAgICAgICAgICByZXNbJ2RlcG90RmlsZSddID0gcmVzWydkZXBvdEZpbGUnXS5sb3dlcigpCisgICAgICAgICAgICBzZWxmLmNsaWVudF9zcGVjX3BhdGhfY2FjaGVbcmVzWydkZXBvdEZpbGUnXV0gPSBzZWxmLmNvbnZlcnRfY2xpZW50X3BhdGgocmVzWyJjbGllbnRGaWxlIl0pCisKKyAgICAgICAgIyBub3QgZm91bmQgZmlsZXMgb3IgdW5tYXAgZmlsZXMgc2V0IHRvICIiCisgICAgICAgIGZvciBkZXBvdEZpbGUgaW4gZmlsZUFyZ3M6CisgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCJjb3JlLmlnbm9yZWNhc2UiKToKKyAgICAgICAgICAgICAgICBkZXBvdEZpbGUgPSBkZXBvdEZpbGUubG93ZXIoKQorICAgICAgICAgICAgaWYgZGVwb3RGaWxlIG5vdCBpbiBzZWxmLmNsaWVudF9zcGVjX3BhdGhfY2FjaGU6CisgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlW2RlcG90RmlsZV0gPSAiIgorCisgICAgZGVmIG1hcF9pbl9jbGllbnQoc2VsZiwgZGVwb3RfcGF0aCk6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVsYXRpdmUgbG9jYXRpb24gaW4gdGhlIGNsaWVudCB3aGVyZSB0aGlzCisgICAgICAgICAgIGRlcG90IGZpbGUgc2hvdWxkIGxpdmUuICBSZXR1cm5zICIiIGlmIHRoZSBmaWxlIHNob3VsZAorICAgICAgICAgICBub3QgYmUgbWFwcGVkIGluIHRoZSBjbGllbnQuIiIiCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiY29yZS5pZ25vcmVjYXNlIik6CisgICAgICAgICAgICBkZXBvdF9wYXRoID0gZGVwb3RfcGF0aC5sb3dlcigpCisKKyAgICAgICAgaWYgZGVwb3RfcGF0aCBpbiBzZWxmLmNsaWVudF9zcGVjX3BhdGhfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlW2RlcG90X3BhdGhdCisKKyAgICAgICAgZGllKCAiRXJyb3I6ICVzIGlzIG5vdCBmb3VuZCBpbiBjbGllbnQgc3BlYyBwYXRoIiAlIGRlcG90X3BhdGggKQorICAgICAgICByZXR1cm4gIiIKKworZGVmIGNsb25lRXhjbHVkZUNhbGxiYWNrKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgIyBwcmVwZW5kICIvIiBiZWNhdXNlIHRoZSBmaXJzdCAiLyIgd2FzIGNvbnN1bWVkIGFzIHBhcnQgb2YgdGhlIG9wdGlvbiBpdHNlbGYuCisgICAgIyAoIi0vL2RlcG90L0EvLi4uIiBiZWNvbWVzICIvZGVwb3QvQS8uLi4iIGFmdGVyIG9wdGlvbiBwYXJzaW5nKQorICAgIHBhcnNlci52YWx1ZXMuY2xvbmVFeGNsdWRlICs9IFsiLyIgKyByZS5zdWIociJcLlwuXC4kIiwgIiIsIHZhbHVlKV0KKworY2xhc3MgUDRTeW5jKENvbW1hbmQsIFA0VXNlck1hcCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgUDRVc2VyTWFwLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYub3B0aW9ucyA9IFsKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1icmFuY2giLCBkZXN0PSJicmFuY2giKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1kZXRlY3QtYnJhbmNoZXMiLCBkZXN0PSJkZXRlY3RCcmFuY2hlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNoYW5nZXNmaWxlIiwgZGVzdD0iY2hhbmdlc0ZpbGUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1zaWxlbnQiLCBkZXN0PSJzaWxlbnQiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1kZXRlY3QtbGFiZWxzIiwgZGVzdD0iZGV0ZWN0TGFiZWxzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taW1wb3J0LWxhYmVscyIsIGRlc3Q9ImltcG9ydExhYmVscyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWltcG9ydC1sb2NhbCIsIGRlc3Q9ImltcG9ydEludG9SZW1vdGVzIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSW1wb3J0IGludG8gcmVmcy9oZWFkcy8gLCBub3QgcmVmcy9yZW1vdGVzIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbWF4LWNoYW5nZXMiLCBkZXN0PSJtYXhDaGFuZ2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJNYXhpbXVtIG51bWJlciBvZiBjaGFuZ2VzIHRvIGltcG9ydCIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNoYW5nZXMtYmxvY2stc2l6ZSIsIGRlc3Q9ImNoYW5nZXNfYmxvY2tfc2l6ZSIsIHR5cGU9ImludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iSW50ZXJuYWwgYmxvY2sgc2l6ZSB0byB1c2Ugd2hlbiBpdGVyYXRpdmVseSBjYWxsaW5nIHA0IGNoYW5nZXMiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1rZWVwLXBhdGgiLCBkZXN0PSJrZWVwUmVwb1BhdGgiLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IktlZXAgZW50aXJlIEJSQU5DSC9ESVIvU1VCRElSIHByZWZpeCBkdXJpbmcgaW1wb3J0IiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tdXNlLWNsaWVudC1zcGVjIiwgZGVzdD0idXNlQ2xpZW50U3BlYyIsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iT25seSBzeW5jIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBQZXJmb3JjZSBDbGllbnQgU3BlYyIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLyIsIGRlc3Q9ImNsb25lRXhjbHVkZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPWNsb25lRXhjbHVkZUNhbGxiYWNrLCB0eXBlPSJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImV4Y2x1ZGUgZGVwb3QgcGF0aCIpLAorICAgICAgICBdCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAiIiJJbXBvcnRzIGZyb20gUGVyZm9yY2UgaW50byBhIGdpdCByZXBvc2l0b3J5LlxuCisgICAgZXhhbXBsZToKKyAgICAvL2RlcG90L215L3Byb2plY3QvIC0tIHRvIGltcG9ydCB0aGUgY3VycmVudCBoZWFkCisgICAgLy9kZXBvdC9teS9wcm9qZWN0L0BhbGwgLS0gdG8gaW1wb3J0IGV2ZXJ5dGhpbmcKKyAgICAvL2RlcG90L215L3Byb2plY3QvQDEsNiAtLSB0byBpbXBvcnQgb25seSBmcm9tIHJldmlzaW9uIDEgdG8gNgorCisgICAgKGEgLi4uIGlzIG5vdCBuZWVkZWQgaW4gdGhlIHBhdGggcDQgc3BlY2lmaWNhdGlvbiwgaXQncyBhZGRlZCBpbXBsaWNpdGx5KSIiIgorCisgICAgICAgIHNlbGYudXNhZ2UgKz0gIiAvL2RlcG90L3BhdGhbQHJldlJhbmdlXSIKKyAgICAgICAgc2VsZi5zaWxlbnQgPSBGYWxzZQorICAgICAgICBzZWxmLmNyZWF0ZWRCcmFuY2hlcyA9IHNldCgpCisgICAgICAgIHNlbGYuY29tbWl0dGVkQ2hhbmdlcyA9IHNldCgpCisgICAgICAgIHNlbGYuYnJhbmNoID0gIiIKKyAgICAgICAgc2VsZi5kZXRlY3RCcmFuY2hlcyA9IEZhbHNlCisgICAgICAgIHNlbGYuZGV0ZWN0TGFiZWxzID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbXBvcnRMYWJlbHMgPSBGYWxzZQorICAgICAgICBzZWxmLmNoYW5nZXNGaWxlID0gIiIKKyAgICAgICAgc2VsZi5zeW5jV2l0aE9yaWdpbiA9IFRydWUKKyAgICAgICAgc2VsZi5pbXBvcnRJbnRvUmVtb3RlcyA9IFRydWUKKyAgICAgICAgc2VsZi5tYXhDaGFuZ2VzID0gIiIKKyAgICAgICAgc2VsZi5jaGFuZ2VzX2Jsb2NrX3NpemUgPSBOb25lCisgICAgICAgIHNlbGYua2VlcFJlcG9QYXRoID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZXBvdFBhdGhzID0gTm9uZQorICAgICAgICBzZWxmLnA0QnJhbmNoZXNJbkdpdCA9IFtdCisgICAgICAgIHNlbGYuY2xvbmVFeGNsdWRlID0gW10KKyAgICAgICAgc2VsZi51c2VDbGllbnRTcGVjID0gRmFsc2UKKyAgICAgICAgc2VsZi51c2VDbGllbnRTcGVjX2Zyb21fb3B0aW9ucyA9IEZhbHNlCisgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMgPSBOb25lCisgICAgICAgIHNlbGYudGVtcEJyYW5jaGVzID0gW10KKyAgICAgICAgc2VsZi50ZW1wQnJhbmNoTG9jYXRpb24gPSAicmVmcy9naXQtcDQtdG1wIgorICAgICAgICBzZWxmLmxhcmdlRmlsZVN5c3RlbSA9IE5vbmUKKyAgICAgICAgc2VsZi5zdXBwcmVzc19tZXRhX2NvbW1lbnQgPSBGYWxzZQorCisgICAgICAgIGlmIGdpdENvbmZpZygnZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbScpOgorICAgICAgICAgICAgbGFyZ2VGaWxlU3lzdGVtQ29uc3RydWN0b3IgPSBnbG9iYWxzKClbZ2l0Q29uZmlnKCdnaXQtcDQubGFyZ2VGaWxlU3lzdGVtJyldCisgICAgICAgICAgICBzZWxmLmxhcmdlRmlsZVN5c3RlbSA9IGxhcmdlRmlsZVN5c3RlbUNvbnN0cnVjdG9yKAorICAgICAgICAgICAgICAgIGxhbWJkYSBnaXRfbW9kZSwgcmVsUGF0aCwgY29udGVudHM6IHNlbGYud3JpdGVUb0dpdFN0cmVhbShnaXRfbW9kZSwgcmVsUGF0aCwgY29udGVudHMpCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnKCJnaXQtcDQuc3luY0Zyb21PcmlnaW4iKSA9PSAiZmFsc2UiOgorICAgICAgICAgICAgc2VsZi5zeW5jV2l0aE9yaWdpbiA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5kZXBvdFBhdGhzID0gW10KKyAgICAgICAgc2VsZi5jaGFuZ2VSYW5nZSA9ICIiCisgICAgICAgIHNlbGYucHJldmlvdXNEZXBvdFBhdGhzID0gW10KKyAgICAgICAgc2VsZi5oYXNPcmlnaW4gPSBGYWxzZQorCisgICAgICAgICMgbWFwIGZyb20gYnJhbmNoIGRlcG90IHBhdGggdG8gcGFyZW50IGJyYW5jaAorICAgICAgICBzZWxmLmtub3duQnJhbmNoZXMgPSB7fQorICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnRzID0ge30KKworICAgICAgICBzZWxmLnR6ID0gIiUrMDNkJTAyZCIgJSAoLSB0aW1lLnRpbWV6b25lIC8gMzYwMCwgKCgtIHRpbWUudGltZXpvbmUgJSAzNjAwKSAvIDYwKSkKKyAgICAgICAgc2VsZi5sYWJlbHMgPSB7fQorCisgICAgIyBGb3JjZSBhIGNoZWNrcG9pbnQgaW4gZmFzdC1pbXBvcnQgYW5kIHdhaXQgZm9yIGl0IHRvIGZpbmlzaAorICAgIGRlZiBjaGVja3BvaW50KHNlbGYpOgorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiY2hlY2twb2ludFxuXG4iKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgicHJvZ3Jlc3MgY2hlY2twb2ludFxuXG4iKQorICAgICAgICBvdXQgPSBzZWxmLmdpdE91dHB1dC5yZWFkbGluZSgpCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJjaGVja3BvaW50IGZpbmlzaGVkOiAiICsgb3V0KQorCisgICAgZGVmIGlzUGF0aFdhbnRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgZm9yIHAgaW4gc2VsZi5jbG9uZUV4Y2x1ZGU6CisgICAgICAgICAgICBpZiBwLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBwKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAjICItLy9kZXBvdC9maWxlMSIgd2l0aG91dCBhIHRyYWlsaW5nICIvIiBzaG91bGQgb25seSBleGNsdWRlICJmaWxlMSIsIGJ1dCBub3QgImZpbGUxMTEiIG9yICJmaWxlMV9kaXIvZmlsZTIiCisgICAgICAgICAgICBlbGlmIHBhdGgubG93ZXIoKSA9PSBwLmxvd2VyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoczoKKyAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZXh0cmFjdEZpbGVzRnJvbUNvbW1pdChzZWxmLCBjb21taXQsIHNoZWx2ZWQ9RmFsc2UsIHNoZWx2ZWRfY2wgPSAwKToKKyAgICAgICAgZmlsZXMgPSBbXQorICAgICAgICBmbnVtID0gMAorICAgICAgICB3aGlsZSAiZGVwb3RGaWxlJXMiICUgZm51bSBpbiBjb21taXQ6CisgICAgICAgICAgICBwYXRoID0gIGNvbW1pdFsiZGVwb3RGaWxlJXMiICUgZm51bV0KKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5pc1BhdGhXYW50ZWQocGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICBmbnVtID0gZm51bSArIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmaWxlID0ge30KKyAgICAgICAgICAgIGZpbGVbInBhdGgiXSA9IHBhdGgKKyAgICAgICAgICAgIGZpbGVbInJldiJdID0gY29tbWl0WyJyZXYlcyIgJSBmbnVtXQorICAgICAgICAgICAgZmlsZVsiYWN0aW9uIl0gPSBjb21taXRbImFjdGlvbiVzIiAlIGZudW1dCisgICAgICAgICAgICBmaWxlWyJ0eXBlIl0gPSBjb21taXRbInR5cGUlcyIgJSBmbnVtXQorICAgICAgICAgICAgaWYgc2hlbHZlZDoKKyAgICAgICAgICAgICAgICBmaWxlWyJzaGVsdmVkX2NsIl0gPSBpbnQoc2hlbHZlZF9jbCkKKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgZm51bSA9IGZudW0gKyAxCisgICAgICAgIHJldHVybiBmaWxlcworCisgICAgZGVmIGV4dHJhY3RKb2JzRnJvbUNvbW1pdChzZWxmLCBjb21taXQpOgorICAgICAgICBqb2JzID0gW10KKyAgICAgICAgam51bSA9IDAKKyAgICAgICAgd2hpbGUgImpvYiVzIiAlIGpudW0gaW4gY29tbWl0OgorICAgICAgICAgICAgam9iID0gY29tbWl0WyJqb2IlcyIgJSBqbnVtXQorICAgICAgICAgICAgam9icy5hcHBlbmQoam9iKQorICAgICAgICAgICAgam51bSA9IGpudW0gKyAxCisgICAgICAgIHJldHVybiBqb2JzCisKKyAgICBkZWYgc3RyaXBSZXBvUGF0aChzZWxmLCBwYXRoLCBwcmVmaXhlcyk6CisgICAgICAgICIiIldoZW4gc3RyZWFtaW5nIGZpbGVzLCB0aGlzIGlzIGNhbGxlZCB0byBtYXAgYSBwNCBkZXBvdCBwYXRoCisgICAgICAgICAgIHRvIHdoZXJlIGl0IHNob3VsZCBnbyBpbiBnaXQuICBUaGUgcHJlZml4ZXMgYXJlIGVpdGhlcgorICAgICAgICAgICBzZWxmLmRlcG90UGF0aHMsIG9yIHNlbGYuYnJhbmNoUHJlZml4ZXMgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgICAgYnJhbmNoIGRldGVjdGlvbi4iIiIKKworICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICAjIGJyYW5jaCBkZXRlY3Rpb24gbW92ZXMgZmlsZXMgdXAgYSBsZXZlbCAodGhlIGJyYW5jaCBuYW1lKQorICAgICAgICAgICAgIyBmcm9tIHdoYXQgY2xpZW50IHNwZWMgaW50ZXJwcmV0YXRpb24gZ2l2ZXMKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmNsaWVudFNwZWNEaXJzLm1hcF9pbl9jbGllbnQocGF0aCkKKyAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0QnJhbmNoZXM6CisgICAgICAgICAgICAgICAgZm9yIGIgaW4gc2VsZi5rbm93bkJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIGIgKyAiLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbbGVuKGIpKzE6XQorCisgICAgICAgIGVsaWYgc2VsZi5rZWVwUmVwb1BhdGg6CisgICAgICAgICAgICAjIFByZXNlcnZlIGV2ZXJ5dGhpbmcgaW4gcmVsYXRpdmUgcGF0aCBuYW1lIGV4Y2VwdCBsZWFkaW5nCisgICAgICAgICAgICAjIC8vZGVwb3QvOyBqdXN0IGxvb2sgYXQgZmlyc3QgcHJlZml4IGFzIHRoZXkgYWxsIHNob3VsZAorICAgICAgICAgICAgIyBiZSBpbiB0aGUgc2FtZSBkZXBvdC4KKyAgICAgICAgICAgIGRlcG90ID0gcmUuc3ViKCJeKC8vW14vXSsvKS4qIiwgcidcMScsIHByZWZpeGVzWzBdKQorICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChwYXRoLCBkZXBvdCk6CisgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbbGVuKGRlcG90KTpdCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoW2xlbihwKTpdCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcGF0aCA9IHdpbGRjYXJkX2RlY29kZShwYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIHNwbGl0RmlsZXNJbnRvQnJhbmNoZXMoc2VsZiwgY29tbWl0KToKKyAgICAgICAgIiIiTG9vayBhdCBlYWNoIGRlcG90RmlsZSBpbiB0aGUgY29tbWl0IHRvIGZpZ3VyZSBvdXQgdG8gd2hhdAorICAgICAgICAgICBicmFuY2ggaXQgYmVsb25ncy4iIiIKKworICAgICAgICBpZiBzZWxmLmNsaWVudFNwZWNEaXJzOgorICAgICAgICAgICAgZmlsZXMgPSBzZWxmLmV4dHJhY3RGaWxlc0Zyb21Db21taXQoY29tbWl0KQorICAgICAgICAgICAgc2VsZi5jbGllbnRTcGVjRGlycy51cGRhdGVfY2xpZW50X3NwZWNfcGF0aF9jYWNoZShmaWxlcykKKworICAgICAgICBicmFuY2hlcyA9IHt9CisgICAgICAgIGZudW0gPSAwCisgICAgICAgIHdoaWxlICJkZXBvdEZpbGUlcyIgJSBmbnVtIGluIGNvbW1pdDoKKyAgICAgICAgICAgIHBhdGggPSAgY29tbWl0WyJkZXBvdEZpbGUlcyIgJSBmbnVtXQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmlzUGF0aFdhbnRlZChwYXRoKQorICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGZudW0gPSBmbnVtICsgMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZpbGUgPSB7fQorICAgICAgICAgICAgZmlsZVsicGF0aCJdID0gcGF0aAorICAgICAgICAgICAgZmlsZVsicmV2Il0gPSBjb21taXRbInJldiVzIiAlIGZudW1dCisgICAgICAgICAgICBmaWxlWyJhY3Rpb24iXSA9IGNvbW1pdFsiYWN0aW9uJXMiICUgZm51bV0KKyAgICAgICAgICAgIGZpbGVbInR5cGUiXSA9IGNvbW1pdFsidHlwZSVzIiAlIGZudW1dCisgICAgICAgICAgICBmbnVtID0gZm51bSArIDEKKworICAgICAgICAgICAgIyBzdGFydCB3aXRoIHRoZSBmdWxsIHJlbGF0aXZlIHBhdGggd2hlcmUgdGhpcyBmaWxlIHdvdWxkCisgICAgICAgICAgICAjIGdvIGluIGEgcDQgY2xpZW50CisgICAgICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICAgICAgcmVsUGF0aCA9IHNlbGYuY2xpZW50U3BlY0RpcnMubWFwX2luX2NsaWVudChwYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWxQYXRoID0gc2VsZi5zdHJpcFJlcG9QYXRoKHBhdGgsIHNlbGYuZGVwb3RQYXRocykKKworICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLmtub3duQnJhbmNoZXMua2V5cygpOgorICAgICAgICAgICAgICAgICMgYWRkIGEgdHJhaWxpbmcgc2xhc2ggc28gdGhhdCBhIGNvbW1pdCBpbnRvIHF0LzQuMmZvbworICAgICAgICAgICAgICAgICMgZG9lc24ndCBlbmQgdXAgaW4gcXQvNC4yLCBlLmcuCisgICAgICAgICAgICAgICAgaWYgcDRQYXRoU3RhcnRzV2l0aChyZWxQYXRoLCBicmFuY2ggKyAiLyIpOgorICAgICAgICAgICAgICAgICAgICBpZiBicmFuY2ggbm90IGluIGJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXNbYnJhbmNoXSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzW2JyYW5jaF0uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIGJyYW5jaGVzCisKKyAgICBkZWYgd3JpdGVUb0dpdFN0cmVhbShzZWxmLCBnaXRNb2RlLCByZWxQYXRoLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCdNICVzIGlubGluZSAlc1xuJyAlIChnaXRNb2RlLCByZWxQYXRoKSkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoJ2RhdGEgJWRcbicgJSBzdW0obGVuKGQpIGZvciBkIGluIGNvbnRlbnRzKSkKKyAgICAgICAgZm9yIGQgaW4gY29udGVudHM6CisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZShkKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgnXG4nKQorCisgICAgZGVmIGVuY29kZVdpdGhVVEY4KHNlbGYsIHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoLmRlY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JworICAgICAgICAgICAgaWYgZ2l0Q29uZmlnKCdnaXQtcDQucGF0aEVuY29kaW5nJyk6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBnaXRDb25maWcoJ2dpdC1wNC5wYXRoRW5jb2RpbmcnKQorICAgICAgICAgICAgcGF0aCA9IHBhdGguZGVjb2RlKGVuY29kaW5nLCAncmVwbGFjZScpLmVuY29kZSgndXRmOCcsICdyZXBsYWNlJykKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgnUGF0aCB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGRldGVjdGVkLiBVc2VkICVzIHRvIGVuY29kZTogJXMgJyAlIChlbmNvZGluZywgcGF0aCkpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICAjIG91dHB1dCBvbmUgZmlsZSBmcm9tIHRoZSBQNCBzdHJlYW0KKyAgICAjIC0gaGVscGVyIGZvciBzdHJlYW1QNEZpbGVzCisKKyAgICBkZWYgc3RyZWFtT25lUDRGaWxlKHNlbGYsIGZpbGUsIGNvbnRlbnRzKToKKyAgICAgICAgcmVsUGF0aCA9IHNlbGYuc3RyaXBSZXBvUGF0aChmaWxlWydkZXBvdEZpbGUnXSwgc2VsZi5icmFuY2hQcmVmaXhlcykKKyAgICAgICAgcmVsUGF0aCA9IHNlbGYuZW5jb2RlV2l0aFVURjgocmVsUGF0aCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIGlmICdmaWxlU2l6ZScgaW4gc2VsZi5zdHJlYW1fZmlsZToKKyAgICAgICAgICAgICAgICBzaXplID0gaW50KHNlbGYuc3RyZWFtX2ZpbGVbJ2ZpbGVTaXplJ10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNpemUgPSAwICMgZGVsZXRlZCBmaWxlcyBkb24ndCBnZXQgYSBmaWxlU2l6ZSBhcHBhcmVudGx5CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcciVzIC0tPiAlcyAoJWkgTUIpXG4nICUgKGZpbGVbJ2RlcG90RmlsZSddLCByZWxQYXRoLCBzaXplLzEwMjQvMTAyNCkpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgICAgICAodHlwZV9iYXNlLCB0eXBlX21vZHMpID0gc3BsaXRfcDRfdHlwZShmaWxlWyJ0eXBlIl0pCisKKyAgICAgICAgZ2l0X21vZGUgPSAiMTAwNjQ0IgorICAgICAgICBpZiAieCIgaW4gdHlwZV9tb2RzOgorICAgICAgICAgICAgZ2l0X21vZGUgPSAiMTAwNzU1IgorICAgICAgICBpZiB0eXBlX2Jhc2UgPT0gInN5bWxpbmsiOgorICAgICAgICAgICAgZ2l0X21vZGUgPSAiMTIwMDAwIgorICAgICAgICAgICAgIyBwNCBwcmludCBvbiBhIHN5bWxpbmsgc29tZXRpbWVzIGNvbnRhaW5zICJ0YXJnZXRcbiI7CisgICAgICAgICAgICAjIGlmIGl0IGRvZXMsIHJlbW92ZSB0aGUgbmV3bGluZQorICAgICAgICAgICAgZGF0YSA9ICcnLmpvaW4oY29udGVudHMpCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAjIFNvbWUgdmVyc2lvbiBvZiBwNCBhbGxvd2VkIGNyZWF0aW5nIGEgc3ltbGluayB0aGF0IHBvaW50ZWQKKyAgICAgICAgICAgICAgICAjIHRvIG5vdGhpbmcuICBUaGlzIGNhdXNlcyBwNCBlcnJvcnMgd2hlbiBjaGVja2luZyBvdXQgc3VjaAorICAgICAgICAgICAgICAgICMgYSBjaGFuZ2UsIGFuZCBlcnJvcnMgaGVyZSB0b28uICBXb3JrIGFyb3VuZCBpdCBieSBpZ25vcmluZworICAgICAgICAgICAgICAgICMgdGhlIGJhZCBzeW1saW5rOyBob3BlZnVsbHkgYSBmdXR1cmUgY2hhbmdlIGZpeGVzIGl0LgorICAgICAgICAgICAgICAgIHByaW50KCJcbklnbm9yaW5nIGVtcHR5IHN5bWxpbmsgaW4gJXMiICUgZmlsZVsnZGVwb3RGaWxlJ10pCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIGRhdGFbLTFdID09ICdcbic6CisgICAgICAgICAgICAgICAgY29udGVudHMgPSBbZGF0YVs6LTFdXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb250ZW50cyA9IFtkYXRhXQorCisgICAgICAgIGlmIHR5cGVfYmFzZSA9PSAidXRmMTYiOgorICAgICAgICAgICAgIyBwNCBkZWxpdmVycyBkaWZmZXJlbnQgdGV4dCBpbiB0aGUgcHl0aG9uIG91dHB1dCB0byAtRworICAgICAgICAgICAgIyB0aGFuIGl0IGRvZXMgd2hlbiB1c2luZyAicHJpbnQgLW8iLCBvciBub3JtYWwgcDQgY2xpZW50CisgICAgICAgICAgICAjIG9wZXJhdGlvbnMuICB1dGYxNiBpcyBjb252ZXJ0ZWQgdG8gYXNjaWkgb3IgdXRmOCwgcGVyaGFwcy4KKyAgICAgICAgICAgICMgQnV0IGFzY2lpIHRleHQgc2F2ZWQgYXMgLXQgdXRmMTYgaXMgY29tcGxldGVseSBtYW5nbGVkLgorICAgICAgICAgICAgIyBJbnZva2UgcHJpbnQgLW8gdG8gZ2V0IHRoZSByZWFsIGNvbnRlbnRzLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBPbiB3aW5kb3dzLCB0aGUgbmV3bGluZXMgd2lsbCBhbHdheXMgYmUgbWFuZ2xlZCBieSBwcmludCwgc28gcHV0CisgICAgICAgICAgICAjIHRoZW0gYmFjayB0b28uICBUaGlzIGlzIG5vdCBuZWVkZWQgdG8gdGhlIGN5Z3dpbiB3aW5kb3dzIHZlcnNpb24sCisgICAgICAgICAgICAjIGp1c3QgdGhlIG5hdGl2ZSAiTlQiIHR5cGUuCisgICAgICAgICAgICAjCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGV4dCA9IHA0X3JlYWRfcGlwZShbJ3ByaW50JywgJy1xJywgJy1vJywgJy0nLCAnJXNAJXMnICUgKGZpbGVbJ2RlcG90RmlsZSddLCBmaWxlWydjaGFuZ2UnXSldKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGlmICdUcmFuc2xhdGlvbiBvZiBmaWxlIGNvbnRlbnQgZmFpbGVkJyBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgICAgIHR5cGVfYmFzZSA9ICdiaW5hcnknCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwNF92ZXJzaW9uX3N0cmluZygpLmZpbmQoJy9OVCcpID49IDA6CisgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ1xyXG4nLCAnXG4nKQorICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gWyB0ZXh0IF0KKworICAgICAgICBpZiB0eXBlX2Jhc2UgPT0gImFwcGxlIjoKKyAgICAgICAgICAgICMgQXBwbGUgZmlsZXR5cGUgZmlsZXMgd2lsbCBiZSBzdHJlYW1lZCBhcyBhIGNvbmNhdGVuYXRpb24gb2YKKyAgICAgICAgICAgICMgaXRzIGFwcGxlZG91YmxlIGhlYWRlciBhbmQgdGhlIGNvbnRlbnRzLiAgVGhpcyBpcyB1c2VsZXNzCisgICAgICAgICAgICAjIG9uIGJvdGggbWFjcyBhbmQgbm9uLW1hY3MuICBJZiB1c2luZyAicHJpbnQgLXEgLW8geHgiLCBpdAorICAgICAgICAgICAgIyB3aWxsIGNyZWF0ZSAieHgiIHdpdGggdGhlIGRhdGEsIGFuZCAiJXh4IiB3aXRoIHRoZSBoZWFkZXIuCisgICAgICAgICAgICAjIFRoaXMgaXMgYWxzbyBub3QgdmVyeSB1c2VmdWwuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElkZWFsbHksIHNvbWVkYXksIHRoaXMgc2NyaXB0IGNhbiBsZWFybiBob3cgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICMgYXBwbGVkb3VibGUgZmlsZXMgZGlyZWN0bHkgYW5kIGltcG9ydCB0aG9zZSB0byBnaXQsIGJ1dAorICAgICAgICAgICAgIyBub24tbWFjIG1hY2hpbmVzIGNhbiBuZXZlciBmaW5kIGEgdXNlIGZvciBhcHBsZSBmaWxldHlwZS4KKyAgICAgICAgICAgIHByaW50KCJcbklnbm9yaW5nIGFwcGxlIGZpbGV0eXBlIGZpbGUgJXMiICUgZmlsZVsnZGVwb3RGaWxlJ10pCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBub3QgdHJ5IHRvIGRlLW1hbmdsZSBrZXl3b3JkcyBvbiB1dGYxNiBmaWxlcywKKyAgICAgICAgIyBldmVuIHRob3VnaCBpbiB0aGVvcnkgc29tZWJvZHkgbWF5IHdhbnQgdGhhdC4KKyAgICAgICAgcGF0dGVybiA9IHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfdHlwZSh0eXBlX2Jhc2UsIHR5cGVfbW9kcykKKyAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuVkVSQk9TRSkKKyAgICAgICAgICAgIHRleHQgPSAnJy5qb2luKGNvbnRlbnRzKQorICAgICAgICAgICAgdGV4dCA9IHJlZ2V4cC5zdWIocickXDEkJywgdGV4dCkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gWyB0ZXh0IF0KKworICAgICAgICBpZiBzZWxmLmxhcmdlRmlsZVN5c3RlbToKKyAgICAgICAgICAgIChnaXRfbW9kZSwgY29udGVudHMpID0gc2VsZi5sYXJnZUZpbGVTeXN0ZW0ucHJvY2Vzc0NvbnRlbnQoZ2l0X21vZGUsIHJlbFBhdGgsIGNvbnRlbnRzKQorCisgICAgICAgIHNlbGYud3JpdGVUb0dpdFN0cmVhbShnaXRfbW9kZSwgcmVsUGF0aCwgY29udGVudHMpCisKKyAgICBkZWYgc3RyZWFtT25lUDREZWxldGlvbihzZWxmLCBmaWxlKToKKyAgICAgICAgcmVsUGF0aCA9IHNlbGYuc3RyaXBSZXBvUGF0aChmaWxlWydwYXRoJ10sIHNlbGYuYnJhbmNoUHJlZml4ZXMpCisgICAgICAgIHJlbFBhdGggPSBzZWxmLmVuY29kZVdpdGhVVEY4KHJlbFBhdGgpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJkZWxldGUgJXNcbiIgJSByZWxQYXRoKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJEICVzXG4iICUgcmVsUGF0aCkKKworICAgICAgICBpZiBzZWxmLmxhcmdlRmlsZVN5c3RlbSBhbmQgc2VsZi5sYXJnZUZpbGVTeXN0ZW0uaXNMYXJnZUZpbGUocmVsUGF0aCk6CisgICAgICAgICAgICBzZWxmLmxhcmdlRmlsZVN5c3RlbS5yZW1vdmVMYXJnZUZpbGUocmVsUGF0aCkKKworICAgICMgaGFuZGxlIGFub3RoZXIgY2h1bmsgb2Ygc3RyZWFtaW5nIGRhdGEKKyAgICBkZWYgc3RyZWFtUDRGaWxlc0NiKHNlbGYsIG1hcnNoYWxsZWQpOgorCisgICAgICAgICMgY2F0Y2ggcDQgZXJyb3JzIGFuZCBjb21wbGFpbgorICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIGlmICJjb2RlIiBpbiBtYXJzaGFsbGVkOgorICAgICAgICAgICAgaWYgbWFyc2hhbGxlZFsiY29kZSJdID09ICJlcnJvciI6CisgICAgICAgICAgICAgICAgaWYgImRhdGEiIGluIG1hcnNoYWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIGVyciA9IG1hcnNoYWxsZWRbImRhdGEiXS5yc3RyaXAoKQorCisgICAgICAgIGlmIG5vdCBlcnIgYW5kICdmaWxlU2l6ZScgaW4gc2VsZi5zdHJlYW1fZmlsZToKKyAgICAgICAgICAgIHJlcXVpcmVkX2J5dGVzID0gaW50KCg0ICogaW50KHNlbGYuc3RyZWFtX2ZpbGVbImZpbGVTaXplIl0pKSAtIGNhbGNEaXNrRnJlZSgpKQorICAgICAgICAgICAgaWYgcmVxdWlyZWRfYnl0ZXMgPiAwOgorICAgICAgICAgICAgICAgIGVyciA9ICdOb3QgZW5vdWdoIHNwYWNlIGxlZnQgb24gJXMhIEZyZWUgYXQgbGVhc3QgJWkgTUIuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCksIHJlcXVpcmVkX2J5dGVzLzEwMjQvMTAyNAorICAgICAgICAgICAgICAgICkKKworICAgICAgICBpZiBlcnI6CisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm86CisgICAgICAgICAgICAgICAgaWYgImRlcG90RmlsZSIgaW4gc2VsZi5zdHJlYW1fZmlsZToKKyAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYuc3RyZWFtX2ZpbGVbImRlcG90RmlsZSJdCisgICAgICAgICAgICAjIGZvcmNlIGEgZmFpbHVyZSBpbiBmYXN0LWltcG9ydCwgZWxzZSBhbiBlbXB0eQorICAgICAgICAgICAgIyBjb21taXQgd2lsbCBiZSBtYWRlCisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImRpZS1ub3dcbiIpCisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS5jbG9zZSgpCisgICAgICAgICAgICAjIGlnbm9yZSBlcnJvcnMsIGJ1dCBtYWtlIHN1cmUgaXQgZXhpdHMgZmlyc3QKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0UHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgZGllKCJFcnJvciBmcm9tIHA0IHByaW50IGZvciAlczogJXMiICUgKGYsIGVycikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRpZSgiRXJyb3IgZnJvbSBwNCBwcmludDogJXMiICUgZXJyKQorCisgICAgICAgIGlmICdkZXBvdEZpbGUnIGluIG1hcnNoYWxsZWQgYW5kIHNlbGYuc3RyZWFtX2hhdmVfZmlsZV9pbmZvOgorICAgICAgICAgICAgIyBzdGFydCBvZiBhIG5ldyBmaWxlIC0gb3V0cHV0IHRoZSBvbGQgb25lIGZpcnN0CisgICAgICAgICAgICBzZWxmLnN0cmVhbU9uZVA0RmlsZShzZWxmLnN0cmVhbV9maWxlLCBzZWxmLnN0cmVhbV9jb250ZW50cykKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGUgPSB7fQorICAgICAgICAgICAgc2VsZi5zdHJlYW1fY29udGVudHMgPSBbXQorICAgICAgICAgICAgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm8gPSBGYWxzZQorCisgICAgICAgICMgcGljayB1cCB0aGUgbmV3IGZpbGUgaW5mb3JtYXRpb24uLi4gZm9yIHRoZQorICAgICAgICAjICdkYXRhJyBmaWVsZCB3ZSBuZWVkIHRvIGFwcGVuZCB0byBvdXIgYXJyYXkKKyAgICAgICAgZm9yIGsgaW4gbWFyc2hhbGxlZC5rZXlzKCk6CisgICAgICAgICAgICBpZiBrID09ICdkYXRhJzoKKyAgICAgICAgICAgICAgICBpZiAnc3RyZWFtQ29udGVudFNpemUnIG5vdCBpbiBzZWxmLnN0cmVhbV9maWxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9maWxlWydzdHJlYW1Db250ZW50U2l6ZSddID0gMAorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGVbJ3N0cmVhbUNvbnRlbnRTaXplJ10gKz0gbGVuKG1hcnNoYWxsZWRbJ2RhdGEnXSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9jb250ZW50cy5hcHBlbmQobWFyc2hhbGxlZFsnZGF0YSddKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9maWxlW2tdID0gbWFyc2hhbGxlZFtrXQorCisgICAgICAgIGlmICh2ZXJib3NlIGFuZAorICAgICAgICAgICAgJ3N0cmVhbUNvbnRlbnRTaXplJyBpbiBzZWxmLnN0cmVhbV9maWxlIGFuZAorICAgICAgICAgICAgJ2ZpbGVTaXplJyBpbiBzZWxmLnN0cmVhbV9maWxlIGFuZAorICAgICAgICAgICAgJ2RlcG90RmlsZScgaW4gc2VsZi5zdHJlYW1fZmlsZSk6CisgICAgICAgICAgICBzaXplID0gaW50KHNlbGYuc3RyZWFtX2ZpbGVbImZpbGVTaXplIl0pCisgICAgICAgICAgICBpZiBzaXplID4gMDoKKyAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDEwMCpzZWxmLnN0cmVhbV9maWxlWydzdHJlYW1Db250ZW50U2l6ZSddL3NpemUKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcciVzICVkJSUgKCVpIE1CKScgJSAoc2VsZi5zdHJlYW1fZmlsZVsnZGVwb3RGaWxlJ10sIHByb2dyZXNzLCBpbnQoc2l6ZS8xMDI0LzEwMjQpKSkKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgICAgICBzZWxmLnN0cmVhbV9oYXZlX2ZpbGVfaW5mbyA9IFRydWUKKworICAgICMgU3RyZWFtIGRpcmVjdGx5IGZyb20gInA0IGZpbGVzIiBpbnRvICJnaXQgZmFzdC1pbXBvcnQiCisgICAgZGVmIHN0cmVhbVA0RmlsZXMoc2VsZiwgZmlsZXMpOgorICAgICAgICBmaWxlc0ZvckNvbW1pdCA9IFtdCisgICAgICAgIGZpbGVzVG9SZWFkID0gW10KKyAgICAgICAgZmlsZXNUb0RlbGV0ZSA9IFtdCisKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBmaWxlc0ZvckNvbW1pdC5hcHBlbmQoZikKKyAgICAgICAgICAgIGlmIGZbJ2FjdGlvbiddIGluIHNlbGYuZGVsZXRlX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgZmlsZXNUb0RlbGV0ZS5hcHBlbmQoZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZXNUb1JlYWQuYXBwZW5kKGYpCisKKyAgICAgICAgIyBkZWxldGVkIGZpbGVzLi4uCisgICAgICAgIGZvciBmIGluIGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICBzZWxmLnN0cmVhbU9uZVA0RGVsZXRpb24oZikKKworICAgICAgICBpZiBsZW4oZmlsZXNUb1JlYWQpID4gMDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGUgPSB7fQorICAgICAgICAgICAgc2VsZi5zdHJlYW1fY29udGVudHMgPSBbXQorICAgICAgICAgICAgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm8gPSBGYWxzZQorCisgICAgICAgICAgICAjIGN1cnJ5IHNlbGYgYXJndW1lbnQKKyAgICAgICAgICAgIGRlZiBzdHJlYW1QNEZpbGVzQ2JTZWxmKGVudHJ5KToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbVA0RmlsZXNDYihlbnRyeSkKKworICAgICAgICAgICAgZmlsZUFyZ3MgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXNUb1JlYWQ6CisgICAgICAgICAgICAgICAgaWYgJ3NoZWx2ZWRfY2wnIGluIGY6CisgICAgICAgICAgICAgICAgICAgICMgSGFuZGxlIHNoZWx2ZWQgQ0xzIHVzaW5nIHRoZSAicDQgcHJpbnQgZmlsZUA9TiIgc3ludGF4IHRvIHByaW50CisgICAgICAgICAgICAgICAgICAgICMgdGhlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgICAgIGZpbGVBcmcgPSAnJXNAPSVkJyAlIChmWydwYXRoJ10sIGZbJ3NoZWx2ZWRfY2wnXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmaWxlQXJnID0gJyVzIyVzJyAlIChmWydwYXRoJ10sIGZbJ3JldiddKQorCisgICAgICAgICAgICAgICAgZmlsZUFyZ3MuYXBwZW5kKGZpbGVBcmcpCisKKyAgICAgICAgICAgIHA0Q21kTGlzdChbIi14IiwgIi0iLCAicHJpbnQiXSwKKyAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1maWxlQXJncywKKyAgICAgICAgICAgICAgICAgICAgICBjYj1zdHJlYW1QNEZpbGVzQ2JTZWxmKQorCisgICAgICAgICAgICAjIGRvIHRoZSBsYXN0IGNodW5rCisgICAgICAgICAgICBpZiAnZGVwb3RGaWxlJyBpbiBzZWxmLnN0cmVhbV9maWxlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtT25lUDRGaWxlKHNlbGYuc3RyZWFtX2ZpbGUsIHNlbGYuc3RyZWFtX2NvbnRlbnRzKQorCisgICAgZGVmIG1ha2VfZW1haWwoc2VsZiwgdXNlcmlkKToKKyAgICAgICAgaWYgdXNlcmlkIGluIHNlbGYudXNlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi51c2Vyc1t1c2VyaWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiVzIDxhQGI+IiAlIHVzZXJpZAorCisgICAgZGVmIHN0cmVhbVRhZyhzZWxmLCBnaXRTdHJlYW0sIGxhYmVsTmFtZSwgbGFiZWxEZXRhaWxzLCBjb21taXQsIGVwb2NoKToKKyAgICAgICAgIiIiIFN0cmVhbSBhIHA0IHRhZy4KKyAgICAgICAgY29tbWl0IGlzIGVpdGhlciBhIGdpdCBjb21taXQsIG9yIGEgZmFzdC1pbXBvcnQgbWFyaywgIjo8cDRjb21taXQ+IgorICAgICAgICAiIiIKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIndyaXRpbmcgdGFnICVzIGZvciBjb21taXQgJXMiICUgKGxhYmVsTmFtZSwgY29tbWl0KSkKKyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKCJ0YWcgJXNcbiIgJSBsYWJlbE5hbWUpCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgiZnJvbSAlc1xuIiAlIGNvbW1pdCkKKworICAgICAgICBpZiAnT3duZXInIGluIGxhYmVsRGV0YWlsczoKKyAgICAgICAgICAgIG93bmVyID0gbGFiZWxEZXRhaWxzWyJPd25lciJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvd25lciA9IE5vbmUKKworICAgICAgICAjIFRyeSB0byB1c2UgdGhlIG93bmVyIG9mIHRoZSBwNCBsYWJlbCwgb3IgZmFpbGluZyB0aGF0LAorICAgICAgICAjIHRoZSBjdXJyZW50IHA0IHVzZXIgaWQuCisgICAgICAgIGlmIG93bmVyOgorICAgICAgICAgICAgZW1haWwgPSBzZWxmLm1ha2VfZW1haWwob3duZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbWFpbCA9IHNlbGYubWFrZV9lbWFpbChzZWxmLnA0VXNlcklkKCkpCisgICAgICAgIHRhZ2dlciA9ICIlcyAlcyAlcyIgJSAoZW1haWwsIGVwb2NoLCBzZWxmLnR6KQorCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgidGFnZ2VyICVzXG4iICUgdGFnZ2VyKQorCisgICAgICAgIHByaW50KCJsYWJlbERldGFpbHM9IixsYWJlbERldGFpbHMpCisgICAgICAgIGlmICdEZXNjcmlwdGlvbicgaW4gbGFiZWxEZXRhaWxzOgorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBsYWJlbERldGFpbHNbJ0Rlc2NyaXB0aW9uJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gJ0xhYmVsIGZyb20gZ2l0IHA0JworCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgiZGF0YSAlZFxuIiAlIGxlbihkZXNjcmlwdGlvbikpCisgICAgICAgIGdpdFN0cmVhbS53cml0ZShkZXNjcmlwdGlvbikKKyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKCJcbiIpCisKKyAgICBkZWYgaW5DbGllbnRTcGVjKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBub3Qgc2VsZi5jbGllbnRTcGVjRGlyczoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGluQ2xpZW50U3BlYyA9IHNlbGYuY2xpZW50U3BlY0RpcnMubWFwX2luX2NsaWVudChwYXRoKQorICAgICAgICBpZiBub3QgaW5DbGllbnRTcGVjIGFuZCBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnSWdub3JpbmcgZmlsZSBvdXRzaWRlIG9mIGNsaWVudCBzcGVjOiB7MH0nLmZvcm1hdChwYXRoKSkKKyAgICAgICAgcmV0dXJuIGluQ2xpZW50U3BlYworCisgICAgZGVmIGhhc0JyYW5jaFByZWZpeChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYuYnJhbmNoUHJlZml4ZXM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBoYXNQcmVmaXggPSBbcCBmb3IgcCBpbiBzZWxmLmJyYW5jaFByZWZpeGVzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHApXQorICAgICAgICBpZiBub3QgaGFzUHJlZml4IGFuZCBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnSWdub3JpbmcgZmlsZSBvdXRzaWRlIG9mIHByZWZpeDogezB9Jy5mb3JtYXQocGF0aCkpCisgICAgICAgIHJldHVybiBoYXNQcmVmaXgKKworICAgIGRlZiBjb21taXQoc2VsZiwgZGV0YWlscywgZmlsZXMsIGJyYW5jaCwgcGFyZW50ID0gIiIsIGFsbG93X2VtcHR5PUZhbHNlKToKKyAgICAgICAgZXBvY2ggPSBkZXRhaWxzWyJ0aW1lIl0KKyAgICAgICAgYXV0aG9yID0gZGV0YWlsc1sidXNlciJdCisgICAgICAgIGpvYnMgPSBzZWxmLmV4dHJhY3RKb2JzRnJvbUNvbW1pdChkZXRhaWxzKQorCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdjb21taXQgaW50byB7MH0nLmZvcm1hdChicmFuY2gpKQorCisgICAgICAgIGlmIHNlbGYuY2xpZW50U3BlY0RpcnM6CisgICAgICAgICAgICBzZWxmLmNsaWVudFNwZWNEaXJzLnVwZGF0ZV9jbGllbnRfc3BlY19wYXRoX2NhY2hlKGZpbGVzKQorCisgICAgICAgIGZpbGVzID0gW2YgZm9yIGYgaW4gZmlsZXMKKyAgICAgICAgICAgIGlmIHNlbGYuaW5DbGllbnRTcGVjKGZbJ3BhdGgnXSkgYW5kIHNlbGYuaGFzQnJhbmNoUHJlZml4KGZbJ3BhdGgnXSldCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgnZ2l0LXA0LmtlZXBFbXB0eUNvbW1pdHMnKToKKyAgICAgICAgICAgIGFsbG93X2VtcHR5ID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBmaWxlcyBhbmQgbm90IGFsbG93X2VtcHR5OgorICAgICAgICAgICAgcHJpbnQoJ0lnbm9yaW5nIHJldmlzaW9uIHswfSBhcyBpdCB3b3VsZCBwcm9kdWNlIGFuIGVtcHR5IGNvbW1pdC4nCisgICAgICAgICAgICAgICAgLmZvcm1hdChkZXRhaWxzWydjaGFuZ2UnXSkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiY29tbWl0ICVzXG4iICUgYnJhbmNoKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgibWFyayA6JXNcbiIgJSBkZXRhaWxzWyJjaGFuZ2UiXSkKKyAgICAgICAgc2VsZi5jb21taXR0ZWRDaGFuZ2VzLmFkZChpbnQoZGV0YWlsc1siY2hhbmdlIl0pKQorICAgICAgICBjb21taXR0ZXIgPSAiIgorICAgICAgICBpZiBhdXRob3Igbm90IGluIHNlbGYudXNlcnM6CisgICAgICAgICAgICBzZWxmLmdldFVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIoKQorICAgICAgICBjb21taXR0ZXIgPSAiJXMgJXMgJXMiICUgKHNlbGYubWFrZV9lbWFpbChhdXRob3IpLCBlcG9jaCwgc2VsZi50eikKKworICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiY29tbWl0dGVyICVzXG4iICUgY29tbWl0dGVyKQorCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJkYXRhIDw8RU9UXG4iKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZShkZXRhaWxzWyJkZXNjIl0pCisgICAgICAgIGlmIGxlbihqb2JzKSA+IDA6CisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXG5Kb2JzOiAlcyIgJSAoJyAnLmpvaW4oam9icykpKQorCisgICAgICAgIGlmIG5vdCBzZWxmLnN1cHByZXNzX21ldGFfY29tbWVudDoKKyAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJcbltnaXQtcDQ6IGRlcG90LXBhdGhzID0gXCIlc1wiOiBjaGFuZ2UgPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJywnLmpvaW4oc2VsZi5icmFuY2hQcmVmaXhlcyksIGRldGFpbHNbImNoYW5nZSJdKSkKKyAgICAgICAgICAgIGlmIGxlbihkZXRhaWxzWydvcHRpb25zJ10pID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiOiBvcHRpb25zID0gJXMiICUgZGV0YWlsc1snb3B0aW9ucyddKQorICAgICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIl1cbiIpCisKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIkVPVFxuXG4iKQorCisgICAgICAgIGlmIGxlbihwYXJlbnQpID4gMDoKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgicGFyZW50ICVzIiAlIHBhcmVudCkKKyAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJmcm9tICVzXG4iICUgcGFyZW50KQorCisgICAgICAgIHNlbGYuc3RyZWFtUDRGaWxlcyhmaWxlcykKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIlxuIikKKworICAgICAgICBjaGFuZ2UgPSBpbnQoZGV0YWlsc1siY2hhbmdlIl0pCisKKyAgICAgICAgaWYgY2hhbmdlIGluIHNlbGYubGFiZWxzOgorICAgICAgICAgICAgbGFiZWwgPSBzZWxmLmxhYmVsc1tjaGFuZ2VdCisgICAgICAgICAgICBsYWJlbERldGFpbHMgPSBsYWJlbFswXQorICAgICAgICAgICAgbGFiZWxSZXZpc2lvbnMgPSBsYWJlbFsxXQorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJDaGFuZ2UgJXMgaXMgbGFiZWxsZWQgJXMiICUgKGNoYW5nZSwgbGFiZWxEZXRhaWxzKSkKKworICAgICAgICAgICAgZmlsZXMgPSBwNENtZExpc3QoWyJmaWxlcyJdICsgWyIlcy4uLkAlcyIgJSAocCwgY2hhbmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5icmFuY2hQcmVmaXhlc10pCisKKyAgICAgICAgICAgIGlmIGxlbihmaWxlcykgPT0gbGVuKGxhYmVsUmV2aXNpb25zKToKKworICAgICAgICAgICAgICAgIGNsZWFuZWRGaWxlcyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIGluZm8gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGluZm9bImFjdGlvbiJdIGluIHNlbGYuZGVsZXRlX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBjbGVhbmVkRmlsZXNbaW5mb1siZGVwb3RGaWxlIl1dID0gaW5mb1sicmV2Il0KKworICAgICAgICAgICAgICAgIGlmIGNsZWFuZWRGaWxlcyA9PSBsYWJlbFJldmlzaW9uczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1UYWcoc2VsZi5naXRTdHJlYW0sICd0YWdfJXMnICUgbGFiZWxEZXRhaWxzWydsYWJlbCddLCBsYWJlbERldGFpbHMsIGJyYW5jaCwgZXBvY2gpCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiVGFnICVzIGRvZXMgbm90IG1hdGNoIHdpdGggY2hhbmdlICVzOiBmaWxlcyBkbyBub3QgbWF0Y2guIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxhYmVsRGV0YWlsc1sibGFiZWwiXSwgY2hhbmdlKSkKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJUYWcgJXMgZG9lcyBub3QgbWF0Y2ggd2l0aCBjaGFuZ2UgJXM6IGZpbGUgY291bnQgaXMgZGlmZmVyZW50LiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxhYmVsRGV0YWlsc1sibGFiZWwiXSwgY2hhbmdlKSkKKworICAgICMgQnVpbGQgYSBkaWN0aW9uYXJ5IG9mIGNoYW5nZWxpc3RzIGFuZCBsYWJlbHMsIGZvciAiZGV0ZWN0LWxhYmVscyIgb3B0aW9uLgorICAgIGRlZiBnZXRMYWJlbHMoc2VsZik6CisgICAgICAgIHNlbGYubGFiZWxzID0ge30KKworICAgICAgICBsID0gcDRDbWRMaXN0KFsibGFiZWxzIl0gKyBbIiVzLi4uIiAlIHAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXSkKKyAgICAgICAgaWYgbGVuKGwpID4gMCBhbmQgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgcHJpbnQoIkZpbmRpbmcgZmlsZXMgYmVsb25naW5nIHRvIGxhYmVscyBpbiAlcyIgJSBzZWxmLmRlcG90UGF0aHMpCisKKyAgICAgICAgZm9yIG91dHB1dCBpbiBsOgorICAgICAgICAgICAgbGFiZWwgPSBvdXRwdXRbImxhYmVsIl0KKyAgICAgICAgICAgIHJldmlzaW9ucyA9IHt9CisgICAgICAgICAgICBuZXdlc3RDaGFuZ2UgPSAwCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIlF1ZXJ5aW5nIGZpbGVzIGZvciBsYWJlbCAlcyIgJSBsYWJlbCkKKyAgICAgICAgICAgIGZvciBmaWxlIGluIHA0Q21kTGlzdChbImZpbGVzIl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIiVzLi4uQCVzIiAlIChwLCBsYWJlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoc10pOgorICAgICAgICAgICAgICAgIHJldmlzaW9uc1tmaWxlWyJkZXBvdEZpbGUiXV0gPSBmaWxlWyJyZXYiXQorICAgICAgICAgICAgICAgIGNoYW5nZSA9IGludChmaWxlWyJjaGFuZ2UiXSkKKyAgICAgICAgICAgICAgICBpZiBjaGFuZ2UgPiBuZXdlc3RDaGFuZ2U6CisgICAgICAgICAgICAgICAgICAgIG5ld2VzdENoYW5nZSA9IGNoYW5nZQorCisgICAgICAgICAgICBzZWxmLmxhYmVsc1tuZXdlc3RDaGFuZ2VdID0gW291dHB1dCwgcmV2aXNpb25zXQorCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJMYWJlbCBjaGFuZ2VzOiAlcyIgJSBzZWxmLmxhYmVscy5rZXlzKCkpCisKKyAgICAjIEltcG9ydCBwNCBsYWJlbHMgYXMgZ2l0IHRhZ3MuIEEgZGlyZWN0IG1hcHBpbmcgZG9lcyBub3QKKyAgICAjIGV4aXN0LCBzbyBhc3N1bWUgdGhhdCBpZiBhbGwgdGhlIGZpbGVzIGFyZSBhdCB0aGUgc2FtZSByZXZpc2lvbgorICAgICMgdGhlbiB3ZSBjYW4gdXNlIHRoYXQsIG9yIGl0J3Mgc29tZXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQgd2Ugc2hvdWxkCisgICAgIyBqdXN0IGlnbm9yZS4KKyAgICBkZWYgaW1wb3J0UDRMYWJlbHMoc2VsZiwgc3RyZWFtLCBwNExhYmVscyk6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiaW1wb3J0IHA0IGxhYmVsczogIiArICcgJy5qb2luKHA0TGFiZWxzKSkKKworICAgICAgICBpZ25vcmVkUDRMYWJlbHMgPSBnaXRDb25maWdMaXN0KCJnaXQtcDQuaWdub3JlZFA0TGFiZWxzIikKKyAgICAgICAgdmFsaWRMYWJlbFJlZ2V4cCA9IGdpdENvbmZpZygiZ2l0LXA0LmxhYmVsSW1wb3J0UmVnZXhwIikKKyAgICAgICAgaWYgbGVuKHZhbGlkTGFiZWxSZWdleHApID09IDA6CisgICAgICAgICAgICB2YWxpZExhYmVsUmVnZXhwID0gZGVmYXVsdExhYmVsUmVnZXhwCisgICAgICAgIG0gPSByZS5jb21waWxlKHZhbGlkTGFiZWxSZWdleHApCisKKyAgICAgICAgZm9yIG5hbWUgaW4gcDRMYWJlbHM6CisgICAgICAgICAgICBjb21taXRGb3VuZCA9IEZhbHNlCisKKyAgICAgICAgICAgIGlmIG5vdCBtLm1hdGNoKG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJsYWJlbCAlcyBkb2VzIG5vdCBtYXRjaCByZWdleHAgJXMiICUgKG5hbWUsdmFsaWRMYWJlbFJlZ2V4cCkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbmFtZSBpbiBpZ25vcmVkUDRMYWJlbHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbGFiZWxEZXRhaWxzID0gcDRDbWRMaXN0KFsnbGFiZWwnLCAiLW8iLCBuYW1lXSlbMF0KKworICAgICAgICAgICAgIyBnZXQgdGhlIG1vc3QgcmVjZW50IGNoYW5nZWxpc3QgZm9yIGVhY2ggZmlsZSBpbiB0aGlzIGxhYmVsCisgICAgICAgICAgICBjaGFuZ2UgPSBwNENtZChbImNoYW5nZXMiLCAiLW0iLCAiMSJdICsgWyIlcy4uLkAlcyIgJSAocCwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXSkKKworICAgICAgICAgICAgaWYgJ2NoYW5nZScgaW4gY2hhbmdlOgorICAgICAgICAgICAgICAgICMgZmluZCB0aGUgY29ycmVzcG9uZGluZyBnaXQgY29tbWl0OyB0YWtlIHRoZSBvbGRlc3QgY29tbWl0CisgICAgICAgICAgICAgICAgY2hhbmdlbGlzdCA9IGludChjaGFuZ2VbJ2NoYW5nZSddKQorICAgICAgICAgICAgICAgIGlmIGNoYW5nZWxpc3QgaW4gc2VsZi5jb21taXR0ZWRDaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICBnaXRDb21taXQgPSAiOiVkIiAlIGNoYW5nZWxpc3QgICAgICAgIyB1c2UgYSBmYXN0LWltcG9ydCBtYXJrCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGdpdENvbW1pdCA9IHJlYWRfcGlwZShbImdpdCIsICJyZXYtbGlzdCIsICItLW1heC1jb3VudD0xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICItLXJldmVyc2UiLCAiOi9cW2dpdC1wNDouKmNoYW5nZSA9ICVkXF0iICUgY2hhbmdlbGlzdF0sIGlnbm9yZV9lcnJvcj1UcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZ2l0Q29tbWl0KSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoImltcG9ydGluZyBsYWJlbCAlczogY291bGQgbm90IGZpbmQgZ2l0IGNvbW1pdCBmb3IgY2hhbmdlbGlzdCAlZCIgJSAobmFtZSwgY2hhbmdlbGlzdCkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRGb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpdENvbW1pdCA9IGdpdENvbW1pdC5zdHJpcCgpCisKKyAgICAgICAgICAgICAgICBpZiBjb21taXRGb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IGZyb20gcDQgdGltZSBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdG13aGVuID0gdGltZS5zdHJwdGltZShsYWJlbERldGFpbHNbJ1VwZGF0ZSddLCAiJVkvJW0vJWQgJUg6JU06JVMiKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJDb3VsZCBub3QgY29udmVydCBsYWJlbCB0aW1lICVzIiAlIGxhYmVsRGV0YWlsc1snVXBkYXRlJ10pCisgICAgICAgICAgICAgICAgICAgICAgICB0bXdoZW4gPSAxCisKKyAgICAgICAgICAgICAgICAgICAgd2hlbiA9IGludCh0aW1lLm1rdGltZSh0bXdoZW4pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbVRhZyhzdHJlYW0sIG5hbWUsIGxhYmVsRGV0YWlscywgZ2l0Q29tbWl0LCB3aGVuKQorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoInA0IGxhYmVsICVzIG1hcHBlZCB0byBnaXQgY29tbWl0ICVzIiAlIChuYW1lLCBnaXRDb21taXQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiTGFiZWwgJXMgaGFzIG5vIGNoYW5nZWxpc3RzIC0gcG9zc2libHkgZGVsZXRlZD8iICUgbmFtZSkKKworICAgICAgICAgICAgaWYgbm90IGNvbW1pdEZvdW5kOgorICAgICAgICAgICAgICAgICMgV2UgY2FuJ3QgaW1wb3J0IHRoaXMgbGFiZWw7IGRvbid0IHRyeSBhZ2FpbiBhcyBpdCB3aWxsIGdldCB2ZXJ5CisgICAgICAgICAgICAgICAgIyBleHBlbnNpdmUgcmVwZWF0ZWRseSBmZXRjaGluZyBhbGwgdGhlIGZpbGVzIGZvciBsYWJlbHMgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgIyBuZXZlciBiZSBpbXBvcnRlZC4gSWYgdGhlIGxhYmVsIGlzIG1vdmVkIGluIHRoZSBmdXR1cmUsIHRoZQorICAgICAgICAgICAgICAgICMgaWdub3JlIHdpbGwgbmVlZCB0byBiZSByZW1vdmVkIG1hbnVhbGx5LgorICAgICAgICAgICAgICAgIHN5c3RlbShbImdpdCIsICJjb25maWciLCAiLS1hZGQiLCAiZ2l0LXA0Lmlnbm9yZWRQNExhYmVscyIsIG5hbWVdKQorCisgICAgZGVmIGd1ZXNzUHJvamVjdE5hbWUoc2VsZik6CisgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoczoKKyAgICAgICAgICAgIGlmIHAuZW5kc3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICBwID0gcFs6LTFdCisgICAgICAgICAgICBwID0gcFtwLnN0cmlwKCkucmZpbmQoIi8iKSArIDE6XQorICAgICAgICAgICAgaWYgbm90IHAuZW5kc3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgIHAgKz0gIi8iCisgICAgICAgICAgICByZXR1cm4gcAorCisgICAgZGVmIGdldEJyYW5jaE1hcHBpbmcoc2VsZik6CisgICAgICAgIGxvc3RBbmRGb3VuZEJyYW5jaGVzID0gc2V0KCkKKworICAgICAgICB1c2VyID0gZ2l0Q29uZmlnKCJnaXQtcDQuYnJhbmNoVXNlciIpCisgICAgICAgIGlmIGxlbih1c2VyKSA+IDA6CisgICAgICAgICAgICBjb21tYW5kID0gImJyYW5jaGVzIC11ICVzIiAlIHVzZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1hbmQgPSAiYnJhbmNoZXMiCisKKyAgICAgICAgZm9yIGluZm8gaW4gcDRDbWRMaXN0KGNvbW1hbmQpOgorICAgICAgICAgICAgZGV0YWlscyA9IHA0Q21kKFsiYnJhbmNoIiwgIi1vIiwgaW5mb1siYnJhbmNoIl1dKQorICAgICAgICAgICAgdmlld0lkeCA9IDAKKyAgICAgICAgICAgIHdoaWxlICJWaWV3JXMiICUgdmlld0lkeCBpbiBkZXRhaWxzOgorICAgICAgICAgICAgICAgIHBhdGhzID0gZGV0YWlsc1siVmlldyVzIiAlIHZpZXdJZHhdLnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICB2aWV3SWR4ID0gdmlld0lkeCArIDEKKyAgICAgICAgICAgICAgICAjIHJlcXVpcmUgc3RhbmRhcmQgLy9kZXBvdC9mb28vLi4uIC8vZGVwb3QvYmFyLy4uLiBtYXBwaW5nCisgICAgICAgICAgICAgICAgaWYgbGVuKHBhdGhzKSAhPSAyIG9yIG5vdCBwYXRoc1swXS5lbmRzd2l0aCgiLy4uLiIpIG9yIG5vdCBwYXRoc1sxXS5lbmRzd2l0aCgiLy4uLiIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNvdXJjZSA9IHBhdGhzWzBdCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gPSBwYXRoc1sxXQorICAgICAgICAgICAgICAgICMjIEhBQ0sKKyAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHNvdXJjZSwgc2VsZi5kZXBvdFBhdGhzWzBdKSBhbmQgcDRQYXRoU3RhcnRzV2l0aChkZXN0aW5hdGlvbiwgc2VsZi5kZXBvdFBhdGhzWzBdKToKKyAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlW2xlbihzZWxmLmRlcG90UGF0aHNbMF0pOi00XQorICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uW2xlbihzZWxmLmRlcG90UGF0aHNbMF0pOi00XQorCisgICAgICAgICAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uIGluIHNlbGYua25vd25CcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgicDQgYnJhbmNoICVzIGRlZmluZXMgYSBtYXBwaW5nIGZyb20gJXMgdG8gJXMiICUgKGluZm9bImJyYW5jaCJdLCBzb3VyY2UsIGRlc3RpbmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiYnV0IHRoZXJlIGV4aXN0cyBhbm90aGVyIG1hcHBpbmcgZnJvbSAlcyB0byAlcyBhbHJlYWR5ISIgJSAoc2VsZi5rbm93bkJyYW5jaGVzW2Rlc3RpbmF0aW9uXSwgZGVzdGluYXRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmtub3duQnJhbmNoZXNbZGVzdGluYXRpb25dID0gc291cmNlCisKKyAgICAgICAgICAgICAgICAgICAgbG9zdEFuZEZvdW5kQnJhbmNoZXMuZGlzY2FyZChkZXN0aW5hdGlvbikKKworICAgICAgICAgICAgICAgICAgICBpZiBzb3VyY2Ugbm90IGluIHNlbGYua25vd25CcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvc3RBbmRGb3VuZEJyYW5jaGVzLmFkZChzb3VyY2UpCisKKyAgICAgICAgIyBQZXJmb3JjZSBkb2VzIG5vdCBzdHJpY3RseSByZXF1aXJlIGJyYW5jaGVzIHRvIGJlIGRlZmluZWQsIHNvIHdlIGFsc28KKyAgICAgICAgIyBjaGVjayBnaXQgY29uZmlnIGZvciBhIGJyYW5jaCBsaXN0LgorICAgICAgICAjCisgICAgICAgICMgRXhhbXBsZSBvZiBicmFuY2ggZGVmaW5pdGlvbiBpbiBnaXQgY29uZmlnIGZpbGU6CisgICAgICAgICMgW2dpdC1wNF0KKyAgICAgICAgIyAgIGJyYW5jaExpc3Q9bWFpbjpicmFuY2hBCisgICAgICAgICMgICBicmFuY2hMaXN0PW1haW46YnJhbmNoQgorICAgICAgICAjICAgYnJhbmNoTGlzdD1icmFuY2hBOmJyYW5jaEMKKyAgICAgICAgY29uZmlnQnJhbmNoZXMgPSBnaXRDb25maWdMaXN0KCJnaXQtcDQuYnJhbmNoTGlzdCIpCisgICAgICAgIGZvciBicmFuY2ggaW4gY29uZmlnQnJhbmNoZXM6CisgICAgICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICAgICAgKHNvdXJjZSwgZGVzdGluYXRpb24pID0gYnJhbmNoLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICBzZWxmLmtub3duQnJhbmNoZXNbZGVzdGluYXRpb25dID0gc291cmNlCisKKyAgICAgICAgICAgICAgICBsb3N0QW5kRm91bmRCcmFuY2hlcy5kaXNjYXJkKGRlc3RpbmF0aW9uKQorCisgICAgICAgICAgICAgICAgaWYgc291cmNlIG5vdCBpbiBzZWxmLmtub3duQnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIGxvc3RBbmRGb3VuZEJyYW5jaGVzLmFkZChzb3VyY2UpCisKKworICAgICAgICBmb3IgYnJhbmNoIGluIGxvc3RBbmRGb3VuZEJyYW5jaGVzOgorICAgICAgICAgICAgc2VsZi5rbm93bkJyYW5jaGVzW2JyYW5jaF0gPSBicmFuY2gKKworICAgIGRlZiBnZXRCcmFuY2hNYXBwaW5nRnJvbUdpdEJyYW5jaGVzKHNlbGYpOgorICAgICAgICBicmFuY2hlcyA9IHA0QnJhbmNoZXNJbkdpdChzZWxmLmltcG9ydEludG9SZW1vdGVzKQorICAgICAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzLmtleXMoKToKKyAgICAgICAgICAgIGlmIGJyYW5jaCA9PSAibWFzdGVyIjoKKyAgICAgICAgICAgICAgICBicmFuY2ggPSAibWFpbiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJhbmNoID0gYnJhbmNoW2xlbihzZWxmLnByb2plY3ROYW1lKTpdCisgICAgICAgICAgICBzZWxmLmtub3duQnJhbmNoZXNbYnJhbmNoXSA9IGJyYW5jaAorCisgICAgZGVmIHVwZGF0ZU9wdGlvbkRpY3Qoc2VsZiwgZCk6CisgICAgICAgIG9wdGlvbl9rZXlzID0ge30KKyAgICAgICAgaWYgc2VsZi5rZWVwUmVwb1BhdGg6CisgICAgICAgICAgICBvcHRpb25fa2V5c1sna2VlcFJlcG9QYXRoJ10gPSAxCisKKyAgICAgICAgZFsib3B0aW9ucyJdID0gJyAnLmpvaW4oc29ydGVkKG9wdGlvbl9rZXlzLmtleXMoKSkpCisKKyAgICBkZWYgcmVhZE9wdGlvbnMoc2VsZiwgZCk6CisgICAgICAgIHNlbGYua2VlcFJlcG9QYXRoID0gKCdvcHRpb25zJyBpbiBkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAoJ2tlZXBSZXBvUGF0aCcgaW4gZFsnb3B0aW9ucyddKSkKKworICAgIGRlZiBnaXRSZWZGb3JCcmFuY2goc2VsZiwgYnJhbmNoKToKKyAgICAgICAgaWYgYnJhbmNoID09ICJtYWluIjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlZlByZWZpeCArICJtYXN0ZXIiCisKKyAgICAgICAgaWYgbGVuKGJyYW5jaCkgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2gKKworICAgICAgICByZXR1cm4gc2VsZi5yZWZQcmVmaXggKyBzZWxmLnByb2plY3ROYW1lICsgYnJhbmNoCisKKyAgICBkZWYgZ2l0Q29tbWl0QnlQNENoYW5nZShzZWxmLCByZWYsIGNoYW5nZSk6CisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJsb29raW5nIGluIHJlZiAiICsgcmVmICsgIiBmb3IgY2hhbmdlICVzIHVzaW5nIGJpc2VjdC4uLiIgJSBjaGFuZ2UpCisKKyAgICAgICAgZWFybGllc3RDb21taXQgPSAiIgorICAgICAgICBsYXRlc3RDb21taXQgPSBwYXJzZVJldmlzaW9uKHJlZikKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJ0cnlpbmc6IGVhcmxpZXN0ICVzIGxhdGVzdCAlcyIgJSAoZWFybGllc3RDb21taXQsIGxhdGVzdENvbW1pdCkpCisgICAgICAgICAgICBuZXh0ID0gcmVhZF9waXBlKCJnaXQgcmV2LWxpc3QgLS1iaXNlY3QgJXMgJXMiICUgKGxhdGVzdENvbW1pdCwgZWFybGllc3RDb21taXQpKS5zdHJpcCgpCisgICAgICAgICAgICBpZiBsZW4obmV4dCkgPT0gMDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJhcmdoIikKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgICAgIGxvZyA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChuZXh0KQorICAgICAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorICAgICAgICAgICAgY3VycmVudENoYW5nZSA9IGludChzZXR0aW5nc1snY2hhbmdlJ10pCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoImN1cnJlbnQgY2hhbmdlICVzIiAlIGN1cnJlbnRDaGFuZ2UpCisKKyAgICAgICAgICAgIGlmIGN1cnJlbnRDaGFuZ2UgPT0gY2hhbmdlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImZvdW5kICVzIiAlIG5leHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQKKworICAgICAgICAgICAgaWYgY3VycmVudENoYW5nZSA8IGNoYW5nZToKKyAgICAgICAgICAgICAgICBlYXJsaWVzdENvbW1pdCA9ICJeJXMiICUgbmV4dAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBuZXh0ID09IGxhdGVzdENvbW1pdDoKKyAgICAgICAgICAgICAgICAgICAgZGllKCJJbmZpbml0ZSBsb29wIHdoaWxlIGxvb2tpbmcgaW4gcmVmICVzIGZvciBjaGFuZ2UgJXMuIENoZWNrIHlvdXIgYnJhbmNoIG1hcHBpbmdzIiAlIChyZWYsIGNoYW5nZSkpCisgICAgICAgICAgICAgICAgbGF0ZXN0Q29tbWl0ID0gIiVzXkAiICUgbmV4dAorCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIGltcG9ydE5ld0JyYW5jaChzZWxmLCBicmFuY2gsIG1heENoYW5nZSk6CisgICAgICAgICMgbWFrZSBmYXN0LWltcG9ydCBmbHVzaCBhbGwgY2hhbmdlcyB0byBkaXNrIGFuZCB1cGRhdGUgdGhlIHJlZnMgdXNpbmcgdGhlIGNoZWNrcG9pbnQKKyAgICAgICAgIyBjb21tYW5kIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIHRoZSBicmFuY2ggcGFyZW50IGluIHRoZSBnaXQgaGlzdG9yeQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiY2hlY2twb2ludFxuXG4iKTsKKyAgICAgICAgc2VsZi5naXRTdHJlYW0uZmx1c2goKTsKKyAgICAgICAgYnJhbmNoUHJlZml4ID0gc2VsZi5kZXBvdFBhdGhzWzBdICsgYnJhbmNoICsgIi8iCisgICAgICAgIHJhbmdlID0gIkAxLCVzIiAlIG1heENoYW5nZQorICAgICAgICAjcHJpbnQgInByZWZpeCIgKyBicmFuY2hQcmVmaXgKKyAgICAgICAgY2hhbmdlcyA9IHA0Q2hhbmdlc0ZvclBhdGhzKFticmFuY2hQcmVmaXhdLCByYW5nZSwgc2VsZi5jaGFuZ2VzX2Jsb2NrX3NpemUpCisgICAgICAgIGlmIGxlbihjaGFuZ2VzKSA8PSAwOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZpcnN0Q2hhbmdlID0gY2hhbmdlc1swXQorICAgICAgICAjcHJpbnQgImZpcnN0IGNoYW5nZSBpbiBicmFuY2g6ICVzIiAlIGZpcnN0Q2hhbmdlCisgICAgICAgIHNvdXJjZUJyYW5jaCA9IHNlbGYua25vd25CcmFuY2hlc1ticmFuY2hdCisgICAgICAgIHNvdXJjZURlcG90UGF0aCA9IHNlbGYuZGVwb3RQYXRoc1swXSArIHNvdXJjZUJyYW5jaAorICAgICAgICBzb3VyY2VSZWYgPSBzZWxmLmdpdFJlZkZvckJyYW5jaChzb3VyY2VCcmFuY2gpCisgICAgICAgICNwcmludCAic291cmNlICIgKyBzb3VyY2VCcmFuY2gKKworICAgICAgICBicmFuY2hQYXJlbnRDaGFuZ2UgPSBpbnQocDRDbWQoWyJjaGFuZ2VzIiwgIi1tIiwgIjEiLCAiJXMuLi5AMSwlcyIgJSAoc291cmNlRGVwb3RQYXRoLCBmaXJzdENoYW5nZSldKVsiY2hhbmdlIl0pCisgICAgICAgICNwcmludCAiYnJhbmNoIHBhcmVudDogJXMiICUgYnJhbmNoUGFyZW50Q2hhbmdlCisgICAgICAgIGdpdFBhcmVudCA9IHNlbGYuZ2l0Q29tbWl0QnlQNENoYW5nZShzb3VyY2VSZWYsIGJyYW5jaFBhcmVudENoYW5nZSkKKyAgICAgICAgaWYgbGVuKGdpdFBhcmVudCkgPiAwOgorICAgICAgICAgICAgc2VsZi5pbml0aWFsUGFyZW50c1tzZWxmLmdpdFJlZkZvckJyYW5jaChicmFuY2gpXSA9IGdpdFBhcmVudAorICAgICAgICAgICAgI3ByaW50ICJwYXJlbnQgZ2l0IGNvbW1pdDogJXMiICUgZ2l0UGFyZW50CisKKyAgICAgICAgc2VsZi5pbXBvcnRDaGFuZ2VzKGNoYW5nZXMpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2VhcmNoUGFyZW50KHNlbGYsIHBhcmVudCwgYnJhbmNoLCB0YXJnZXQpOgorICAgICAgICBwYXJlbnRGb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBibG9iIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJyZXYtbGlzdCIsICItLXJldmVyc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW5vLW1lcmdlcyIsIHBhcmVudF0pOgorICAgICAgICAgICAgYmxvYiA9IGJsb2Iuc3RyaXAoKQorICAgICAgICAgICAgaWYgbGVuKHJlYWRfcGlwZShbImdpdCIsICJkaWZmLXRyZWUiLCBibG9iLCB0YXJnZXRdKSkgPT0gMDoKKyAgICAgICAgICAgICAgICBwYXJlbnRGb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJGb3VuZCBwYXJlbnQgb2YgJXMgaW4gY29tbWl0ICVzIiAlIChicmFuY2gsIGJsb2IpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHBhcmVudEZvdW5kOgorICAgICAgICAgICAgcmV0dXJuIGJsb2IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaW1wb3J0Q2hhbmdlcyhzZWxmLCBjaGFuZ2VzLCBvcmlnaW5fcmV2aXNpb249MCk6CisgICAgICAgIGNudCA9IDEKKyAgICAgICAgZm9yIGNoYW5nZSBpbiBjaGFuZ2VzOgorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBwNF9kZXNjcmliZShjaGFuZ2UpCisgICAgICAgICAgICBzZWxmLnVwZGF0ZU9wdGlvbkRpY3QoZGVzY3JpcHRpb24pCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcckltcG9ydGluZyByZXZpc2lvbiAlcyAoJXMlJSkiICUgKGNoYW5nZSwgY250ICogMTAwIC8gbGVuKGNoYW5nZXMpKSkKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIGNudCA9IGNudCArIDEKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0QnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzID0gc2VsZi5zcGxpdEZpbGVzSW50b0JyYW5jaGVzKGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMjIEhBQ0sgIC0taHduCisgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hQcmVmaXggPSBzZWxmLmRlcG90UGF0aHNbMF0gKyBicmFuY2ggKyAiLyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnJhbmNoUHJlZml4ZXMgPSBbIGJyYW5jaFByZWZpeCBdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9ICIiCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzRm9yQ29tbWl0ID0gYnJhbmNoZXNbYnJhbmNoXQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoImJyYW5jaCBpcyAlcyIgJSBicmFuY2gpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlZEJyYW5jaGVzLmFkZChicmFuY2gpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJyYW5jaCBub3QgaW4gc2VsZi5jcmVhdGVkQnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVkQnJhbmNoZXMuYWRkKGJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLmtub3duQnJhbmNoZXNbYnJhbmNoXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmVudCA9PSBicmFuY2g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEJyYW5jaCA9IHNlbGYucHJvamVjdE5hbWUgKyBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZnVsbEJyYW5jaCBub3QgaW4gc2VsZi5wNEJyYW5jaGVzSW5HaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlxuICAgIEltcG9ydGluZyBuZXcgYnJhbmNoICVzIiAlIGZ1bGxCcmFuY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5pbXBvcnROZXdCcmFuY2goYnJhbmNoLCBjaGFuZ2UgLSAxKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucDRCcmFuY2hlc0luR2l0LmFwcGVuZChmdWxsQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJcbiAgICBSZXN1bWluZyB3aXRoIGNoYW5nZSAlcyIgJSBjaGFuZ2UpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJwYXJlbnQgZGV0ZXJtaW5lZCB0aHJvdWdoIGtub3duIGJyYW5jaGVzOiAlcyIgJSBwYXJlbnQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuZ2l0UmVmRm9yQnJhbmNoKGJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYuZ2l0UmVmRm9yQnJhbmNoKHBhcmVudCkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJsb29raW5nIGZvciBpbml0aWFsIHBhcmVudCBmb3IgJXM7IGN1cnJlbnQgcGFyZW50IGlzICVzIiAlIChicmFuY2gsIHBhcmVudCkpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXJlbnQpID09IDAgYW5kIGJyYW5jaCBpbiBzZWxmLmluaXRpYWxQYXJlbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYuaW5pdGlhbFBhcmVudHNbYnJhbmNoXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLmluaXRpYWxQYXJlbnRzW2JyYW5jaF0KKworICAgICAgICAgICAgICAgICAgICAgICAgYmxvYiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXJlbnQpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQnJhbmNoID0gIiVzLyVkIiAlIChzZWxmLnRlbXBCcmFuY2hMb2NhdGlvbiwgY2hhbmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRlbXBvcmFyeSBicmFuY2g6ICIgKyB0ZW1wQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGRlc2NyaXB0aW9uLCBmaWxlc0ZvckNvbW1pdCwgdGVtcEJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlbXBCcmFuY2hlcy5hcHBlbmQodGVtcEJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrcG9pbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2IgPSBzZWxmLnNlYXJjaFBhcmVudChwYXJlbnQsIGJyYW5jaCwgdGVtcEJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJsb2I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoZGVzY3JpcHRpb24sIGZpbGVzRm9yQ29tbWl0LCBicmFuY2gsIGJsb2IpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlBhcmVudCBvZiAlcyBub3QgZm91bmQuIENvbW1pdHRpbmcgaW50byBoZWFkIG9mICVzIiAlIChicmFuY2gsIHBhcmVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoZGVzY3JpcHRpb24sIGZpbGVzRm9yQ29tbWl0LCBicmFuY2gsIHBhcmVudCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmaWxlcyA9IHNlbGYuZXh0cmFjdEZpbGVzRnJvbUNvbW1pdChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoZGVzY3JpcHRpb24sIGZpbGVzLCBzZWxmLmJyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsUGFyZW50KQorICAgICAgICAgICAgICAgICAgICAjIG9ubHkgbmVlZGVkIG9uY2UsIHRvIGNvbm5lY3QgdG8gdGhlIHByZXZpb3VzIGNvbW1pdAorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnQgPSAiIgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5naXRFcnJvci5yZWFkKCkpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGRlZiBzeW5jX29yaWdpbl9vbmx5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN5bmNXaXRoT3JpZ2luOgorICAgICAgICAgICAgc2VsZi5oYXNPcmlnaW4gPSBvcmlnaW5QNEJyYW5jaGVzRXhpc3QoKQorICAgICAgICAgICAgaWYgc2VsZi5oYXNPcmlnaW46CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICBwcmludCgnU3luY2luZyB3aXRoIG9yaWdpbiBmaXJzdCwgdXNpbmcgImdpdCBmZXRjaCBvcmlnaW4iJykKKyAgICAgICAgICAgICAgICBzeXN0ZW0oImdpdCBmZXRjaCBvcmlnaW4iKQorCisgICAgZGVmIGltcG9ydEhlYWRSZXZpc2lvbihzZWxmLCByZXZpc2lvbik6CisgICAgICAgIHByaW50KCJEb2luZyBpbml0aWFsIGltcG9ydCBvZiAlcyBmcm9tIHJldmlzaW9uICVzIGludG8gJXMiICUgKCcgJy5qb2luKHNlbGYuZGVwb3RQYXRocyksIHJldmlzaW9uLCBzZWxmLmJyYW5jaCkpCisKKyAgICAgICAgZGV0YWlscyA9IHt9CisgICAgICAgIGRldGFpbHNbInVzZXIiXSA9ICJnaXQgcGVyZm9yY2UgaW1wb3J0IHVzZXIiCisgICAgICAgIGRldGFpbHNbImRlc2MiXSA9ICgiSW5pdGlhbCBpbXBvcnQgb2YgJXMgZnJvbSB0aGUgc3RhdGUgYXQgcmV2aXNpb24gJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKCcgJy5qb2luKHNlbGYuZGVwb3RQYXRocyksIHJldmlzaW9uKSkKKyAgICAgICAgZGV0YWlsc1siY2hhbmdlIl0gPSByZXZpc2lvbgorICAgICAgICBuZXdlc3RSZXZpc2lvbiA9IDAKKworICAgICAgICBmaWxlQ250ID0gMAorICAgICAgICBmaWxlQXJncyA9IFsiJXMuLi4lcyIgJSAocCxyZXZpc2lvbikgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXQorCisgICAgICAgIGZvciBpbmZvIGluIHA0Q21kTGlzdChbImZpbGVzIl0gKyBmaWxlQXJncyk6CisKKyAgICAgICAgICAgIGlmICdjb2RlJyBpbiBpbmZvIGFuZCBpbmZvWydjb2RlJ10gPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJwNCByZXR1cm5lZCBhbiBlcnJvcjogJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW5mb1snZGF0YSddKQorICAgICAgICAgICAgICAgIGlmIGluZm9bJ2RhdGEnXS5maW5kKCJtdXN0IHJlZmVyIHRvIGNsaWVudCIpID49IDA6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlRoaXMgcGFydGljdWxhciBwNCBlcnJvciBpcyBtaXNsZWFkaW5nLlxuIikKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiUGVyaGFwcyB0aGUgZGVwb3QgcGF0aCB3YXMgbWlzc3BlbGxlZC5cbiIpOworICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJEZXBvdCBwYXRoOiAgJXNcbiIgJSAiICIuam9pbihzZWxmLmRlcG90UGF0aHMpKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBpZiAncDRFeGl0Q29kZScgaW4gaW5mbzoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJwNCBleGl0Y29kZTogJXNcbiIgJSBpbmZvWydwNEV4aXRDb2RlJ10pCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworCisgICAgICAgICAgICBjaGFuZ2UgPSBpbnQoaW5mb1siY2hhbmdlIl0pCisgICAgICAgICAgICBpZiBjaGFuZ2UgPiBuZXdlc3RSZXZpc2lvbjoKKyAgICAgICAgICAgICAgICBuZXdlc3RSZXZpc2lvbiA9IGNoYW5nZQorCisgICAgICAgICAgICBpZiBpbmZvWyJhY3Rpb24iXSBpbiBzZWxmLmRlbGV0ZV9hY3Rpb25zOgorICAgICAgICAgICAgICAgICMgZG9uJ3QgaW5jcmVhc2UgdGhlIGZpbGUgY250LCBvdGhlcndpc2UgZGV0YWlsc1siZGVwb3RGaWxlMTIzIl0gd2lsbCBoYXZlIGdhcHMhCisgICAgICAgICAgICAgICAgI2ZpbGVDbnQgPSBmaWxlQ250ICsgMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBwcm9wIGluIFsiZGVwb3RGaWxlIiwgInJldiIsICJhY3Rpb24iLCAidHlwZSIgXToKKyAgICAgICAgICAgICAgICBkZXRhaWxzWyIlcyVzIiAlIChwcm9wLCBmaWxlQ250KV0gPSBpbmZvW3Byb3BdCisKKyAgICAgICAgICAgIGZpbGVDbnQgPSBmaWxlQ250ICsgMQorCisgICAgICAgIGRldGFpbHNbImNoYW5nZSJdID0gbmV3ZXN0UmV2aXNpb24KKworICAgICAgICAjIFVzZSB0aW1lIGZyb20gdG9wLW1vc3QgY2hhbmdlIHNvIHRoYXQgYWxsIGdpdCBwNCBjbG9uZXMgb2YKKyAgICAgICAgIyB0aGUgc2FtZSBwNCByZXBvIGhhdmUgdGhlIHNhbWUgY29tbWl0IFNIQTFzLgorICAgICAgICByZXMgPSBwNF9kZXNjcmliZShuZXdlc3RSZXZpc2lvbikKKyAgICAgICAgZGV0YWlsc1sidGltZSJdID0gcmVzWyJ0aW1lIl0KKworICAgICAgICBzZWxmLnVwZGF0ZU9wdGlvbkRpY3QoZGV0YWlscykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jb21taXQoZGV0YWlscywgc2VsZi5leHRyYWN0RmlsZXNGcm9tQ29tbWl0KGRldGFpbHMpLCBzZWxmLmJyYW5jaCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcHJpbnQoIklPIGVycm9yIHdpdGggZ2l0IGZhc3QtaW1wb3J0LiBJcyB5b3VyIGdpdCB2ZXJzaW9uIHJlY2VudCBlbm91Z2g/IikKKyAgICAgICAgICAgIHByaW50KCJJTyBlcnJvciBkZXRhaWxzOiB7fSIuZm9ybWF0KGVycikpCisgICAgICAgICAgICBwcmludChzZWxmLmdpdEVycm9yLnJlYWQoKSkKKworCisgICAgZGVmIGltcG9ydFJldmlzaW9ucyhzZWxmLCBhcmdzLCBicmFuY2hfYXJnX2dpdmVuKToKKyAgICAgICAgY2hhbmdlcyA9IFtdCisKKyAgICAgICAgaWYgbGVuKHNlbGYuY2hhbmdlc0ZpbGUpID4gMDoKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmNoYW5nZXNGaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIGNoYW5nZVNldCA9IHNldCgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgY2hhbmdlU2V0LmFkZChpbnQobGluZSkpCisKKyAgICAgICAgICAgIGZvciBjaGFuZ2UgaW4gY2hhbmdlU2V0OgorICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoYW5nZSkKKworICAgICAgICAgICAgY2hhbmdlcy5zb3J0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY2F0Y2ggImdpdCBwNCBzeW5jIiB3aXRoIG5vIG5ldyBicmFuY2hlcywgaW4gYSByZXBvIHRoYXQKKyAgICAgICAgICAgICMgZG9lcyBub3QgaGF2ZSBhbnkgZXhpc3RpbmcgcDQgYnJhbmNoZXMKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnA0QnJhbmNoZXNJbkdpdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUDRDb21tYW5kRXhjZXB0aW9uKCJObyByZW1vdGUgcDQgYnJhbmNoZXMuICBQZXJoYXBzIHlvdSBuZXZlciBkaWQgXCJnaXQgcDQgY2xvbmVcIiBpbiBoZXJlLiIpCisKKyAgICAgICAgICAgICAgICAjIFRoZSBkZWZhdWx0IGJyYW5jaCBpcyBtYXN0ZXIsIHVubGVzcyAtLWJyYW5jaCBpcyB1c2VkIHRvCisgICAgICAgICAgICAgICAgIyBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlLiAgTWFrZSBzdXJlIGl0IGV4aXN0cywgb3IgY29tcGxhaW4KKyAgICAgICAgICAgICAgICAjIG5pY2VseSBhYm91dCBob3cgdG8gdXNlIC0tYnJhbmNoLgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYnJhbmNoX2V4aXN0cyhzZWxmLmJyYW5jaCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBicmFuY2hfYXJnX2dpdmVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFA0Q29tbWFuZEV4Y2VwdGlvbigiRXJyb3I6IGJyYW5jaCAlcyBkb2VzIG5vdCBleGlzdC4iICUgc2VsZi5icmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFA0Q29tbWFuZEV4Y2VwdGlvbigiRXJyb3I6IG5vIGJyYW5jaCAlczsgcGVyaGFwcyBzcGVjaWZ5IG9uZSB3aXRoIC0tYnJhbmNoLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJyYW5jaCkKKworICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJHZXR0aW5nIHA0IGNoYW5nZXMgZm9yICVzLi4uJXMiICUgKCcsICcuam9pbihzZWxmLmRlcG90UGF0aHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlUmFuZ2UpKQorICAgICAgICAgICAgY2hhbmdlcyA9IHA0Q2hhbmdlc0ZvclBhdGhzKHNlbGYuZGVwb3RQYXRocywgc2VsZi5jaGFuZ2VSYW5nZSwgc2VsZi5jaGFuZ2VzX2Jsb2NrX3NpemUpCisKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLm1heENoYW5nZXMpID4gMDoKKyAgICAgICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlc1s6bWluKGludChzZWxmLm1heENoYW5nZXMpLCBsZW4oY2hhbmdlcykpXQorCisgICAgICAgIGlmIGxlbihjaGFuZ2VzKSA9PSAwOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgIHByaW50KCJObyBjaGFuZ2VzIHRvIGltcG9ydCEiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50IGFuZCBub3Qgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICBwcmludCgiSW1wb3J0IGRlc3RpbmF0aW9uOiAlcyIgJSBzZWxmLmJyYW5jaCkKKworICAgICAgICAgICAgc2VsZi51cGRhdGVkQnJhbmNoZXMgPSBzZXQoKQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IGEgbmV3IGJyYW5jaAorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnQgPSAiIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgYnVpbGQgb24gYSBwcmV2aW91cyByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnQgPSBwYXJzZVJldmlzaW9uKHNlbGYuYnJhbmNoKQorCisgICAgICAgICAgICBzZWxmLmltcG9ydENoYW5nZXMoY2hhbmdlcykKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgIHByaW50KCIiKQorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnVwZGF0ZWRCcmFuY2hlcykgPiAwOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJVcGRhdGVkIGJyYW5jaGVzOiAiKQorICAgICAgICAgICAgICAgICAgICBmb3IgYiBpbiBzZWxmLnVwZGF0ZWRCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiVzICIgJSBiKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisKKyAgICBkZWYgb3BlblN0cmVhbXMoc2VsZik6CisgICAgICAgIHNlbGYuaW1wb3J0UHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnaXQiLCAiZmFzdC1pbXBvcnQiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKTsKKyAgICAgICAgc2VsZi5naXRPdXRwdXQgPSBzZWxmLmltcG9ydFByb2Nlc3Muc3Rkb3V0CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtID0gc2VsZi5pbXBvcnRQcm9jZXNzLnN0ZGluCisgICAgICAgIHNlbGYuZ2l0RXJyb3IgPSBzZWxmLmltcG9ydFByb2Nlc3Muc3RkZXJyCisKKyAgICBkZWYgY2xvc2VTdHJlYW1zKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdpdFN0cmVhbSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5pbXBvcnRQcm9jZXNzLndhaXQoKSAhPSAwOgorICAgICAgICAgICAgZGllKCJmYXN0LWltcG9ydCBmYWlsZWQ6ICVzIiAlIHNlbGYuZ2l0RXJyb3IucmVhZCgpKQorICAgICAgICBzZWxmLmdpdE91dHB1dC5jbG9zZSgpCisgICAgICAgIHNlbGYuZ2l0RXJyb3IuY2xvc2UoKQorICAgICAgICBzZWxmLmdpdFN0cmVhbSA9IE5vbmUKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIGlmIHNlbGYuaW1wb3J0SW50b1JlbW90ZXM6CisgICAgICAgICAgICBzZWxmLnJlZlByZWZpeCA9ICJyZWZzL3JlbW90ZXMvcDQvIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZWZQcmVmaXggPSAicmVmcy9oZWFkcy9wNC8iCisKKyAgICAgICAgc2VsZi5zeW5jX29yaWdpbl9vbmx5KCkKKworICAgICAgICBicmFuY2hfYXJnX2dpdmVuID0gYm9vbChzZWxmLmJyYW5jaCkKKyAgICAgICAgaWYgbGVuKHNlbGYuYnJhbmNoKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5icmFuY2ggPSBzZWxmLnJlZlByZWZpeCArICJtYXN0ZXIiCisgICAgICAgICAgICBpZiBnaXRCcmFuY2hFeGlzdHMoInJlZnMvaGVhZHMvcDQiKSBhbmQgc2VsZi5pbXBvcnRJbnRvUmVtb3RlczoKKyAgICAgICAgICAgICAgICBzeXN0ZW0oImdpdCB1cGRhdGUtcmVmICVzIHJlZnMvaGVhZHMvcDQiICUgc2VsZi5icmFuY2gpCisgICAgICAgICAgICAgICAgc3lzdGVtKCJnaXQgYnJhbmNoIC1EIHA0IikKKworICAgICAgICAjIGFjY2VwdCBlaXRoZXIgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24sIG9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgICMgd2lsbCB1c2UgdGhpcyBhZnRlciBjbG9uZSB0byBzZXQgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWNfZnJvbV9vcHRpb25zID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LnVzZWNsaWVudHNwZWMiKToKKyAgICAgICAgICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWMgPSBUcnVlCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMgPSBnZXRDbGllbnRTcGVjKCkKKworICAgICAgICAjIFRPRE86IHNob3VsZCBhbHdheXMgbG9vayBhdCBwcmV2aW91cyBjb21taXRzLAorICAgICAgICAjIG1lcmdlIHdpdGggcHJldmlvdXMgaW1wb3J0cywgaWYgcG9zc2libGUuCisgICAgICAgIGlmIGFyZ3MgPT0gW106CisgICAgICAgICAgICBpZiBzZWxmLmhhc09yaWdpbjoKKyAgICAgICAgICAgICAgICBjcmVhdGVPclVwZGF0ZUJyYW5jaGVzRnJvbU9yaWdpbihzZWxmLnJlZlByZWZpeCwgc2VsZi5zaWxlbnQpCisKKyAgICAgICAgICAgICMgYnJhbmNoZXMgaG9sZHMgbWFwcGluZyBmcm9tIGJyYW5jaCBuYW1lIHRvIHNoYTEKKyAgICAgICAgICAgIGJyYW5jaGVzID0gcDRCcmFuY2hlc0luR2l0KHNlbGYuaW1wb3J0SW50b1JlbW90ZXMpCisKKyAgICAgICAgICAgICMgcmVzdHJpY3QgdG8ganVzdCB0aGlzIG9uZSwgZGlzYWJsaW5nIGRldGVjdC1icmFuY2hlcworICAgICAgICAgICAgaWYgYnJhbmNoX2FyZ19naXZlbjoKKyAgICAgICAgICAgICAgICBzaG9ydCA9IHNlbGYuYnJhbmNoLnNwbGl0KCIvIilbLTFdCisgICAgICAgICAgICAgICAgaWYgc2hvcnQgaW4gYnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucDRCcmFuY2hlc0luR2l0ID0gWyBzaG9ydCBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucDRCcmFuY2hlc0luR2l0ID0gYnJhbmNoZXMua2V5cygpCisKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnA0QnJhbmNoZXNJbkdpdCkgPiAxOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkltcG9ydGluZyBmcm9tL2ludG8gbXVsdGlwbGUgYnJhbmNoZXMiKQorICAgICAgICAgICAgICAgIHNlbGYuZGV0ZWN0QnJhbmNoZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBicmFuY2hlcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudHNbc2VsZi5yZWZQcmVmaXggKyBicmFuY2hdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXNbYnJhbmNoXQorCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoImJyYW5jaGVzOiAlcyIgJSBzZWxmLnA0QnJhbmNoZXNJbkdpdCkKKworICAgICAgICAgICAgcDRDaGFuZ2UgPSAwCisgICAgICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYucDRCcmFuY2hlc0luR2l0OgorICAgICAgICAgICAgICAgIGxvZ01zZyA9ICBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQoc2VsZi5yZWZQcmVmaXggKyBicmFuY2gpCisKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2dNc2cpCisKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWRPcHRpb25zKHNldHRpbmdzKQorICAgICAgICAgICAgICAgIGlmICgnZGVwb3QtcGF0aHMnIGluIHNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgIGFuZCAnY2hhbmdlJyBpbiBzZXR0aW5ncyk6CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IGludChzZXR0aW5nc1snY2hhbmdlJ10pICsgMQorICAgICAgICAgICAgICAgICAgICBwNENoYW5nZSA9IG1heChwNENoYW5nZSwgY2hhbmdlKQorCisgICAgICAgICAgICAgICAgICAgIGRlcG90UGF0aHMgPSBzb3J0ZWQoc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10pCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucHJldmlvdXNEZXBvdFBhdGhzID09IFtdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmV2aW91c0RlcG90UGF0aHMgPSBkZXBvdFBhdGhzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHByZXYsIGN1cikgaW4gemlwKHNlbGYucHJldmlvdXNEZXBvdFBhdGhzLCBkZXBvdFBhdGhzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2xpc3QgPSBwcmV2LnNwbGl0KCIvIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGlzdCA9IGN1ci5zcGxpdCgiLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbWluKGxlbihjdXJfbGlzdCksIGxlbihwcmV2X2xpc3QpKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cl9saXN0W2ldICE9IHByZXZfbGlzdFtpXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZCAoIi8iLmpvaW4oY3VyX2xpc3RbOmkgKyAxXSkpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXNEZXBvdFBhdGhzID0gcGF0aHMKKworICAgICAgICAgICAgaWYgcDRDaGFuZ2UgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuZGVwb3RQYXRocyA9IHNvcnRlZChzZWxmLnByZXZpb3VzRGVwb3RQYXRocykKKyAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVJhbmdlID0gIkAlcywjaGVhZCIgJSBwNENoYW5nZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudCBhbmQgbm90IHNlbGYuZGV0ZWN0QnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJQZXJmb3JtaW5nIGluY3JlbWVudGFsIGltcG9ydCBpbnRvICVzIGdpdCBicmFuY2giICUgc2VsZi5icmFuY2gpCisKKyAgICAgICAgIyBhY2NlcHQgbXVsdGlwbGUgcmVmIG5hbWUgYWJicmV2aWF0aW9uczoKKyAgICAgICAgIyAgICByZWZzL2Zvby9iYXIvYnJhbmNoIC0+IHVzZSBpdCBleGFjdGx5CisgICAgICAgICMgICAgcDQvYnJhbmNoIC0+IHByZXBlbmQgcmVmcy9yZW1vdGVzLyBvciByZWZzL2hlYWRzLworICAgICAgICAjICAgIGJyYW5jaCAtPiBwcmVwZW5kIHJlZnMvcmVtb3Rlcy9wNC8gb3IgcmVmcy9oZWFkcy9wNC8KKyAgICAgICAgaWYgbm90IHNlbGYuYnJhbmNoLnN0YXJ0c3dpdGgoInJlZnMvIik6CisgICAgICAgICAgICBpZiBzZWxmLmltcG9ydEludG9SZW1vdGVzOgorICAgICAgICAgICAgICAgIHByZXBlbmQgPSAicmVmcy9yZW1vdGVzLyIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJlcGVuZCA9ICJyZWZzL2hlYWRzLyIKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJyYW5jaC5zdGFydHN3aXRoKCJwNC8iKToKKyAgICAgICAgICAgICAgICBwcmVwZW5kICs9ICJwNC8iCisgICAgICAgICAgICBzZWxmLmJyYW5jaCA9IHByZXBlbmQgKyBzZWxmLmJyYW5jaAorCisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLmRlcG90UGF0aHM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgcHJpbnQoIkRlcG90IHBhdGhzOiAlcyIgJSAnICcuam9pbihzZWxmLmRlcG90UGF0aHMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5kZXBvdFBhdGhzIGFuZCBzZWxmLmRlcG90UGF0aHMgIT0gYXJnczoKKyAgICAgICAgICAgICAgICBwcmludCgicHJldmlvdXMgaW1wb3J0IHVzZWQgZGVwb3QgcGF0aCAlcyBhbmQgbm93ICVzIHdhcyBzcGVjaWZpZWQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgZG9lc24ndCB3b3JrISIgJSAoJyAnLmpvaW4gKHNlbGYuZGVwb3RQYXRocyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luIChhcmdzKSkpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAgICAgc2VsZi5kZXBvdFBhdGhzID0gc29ydGVkKGFyZ3MpCisKKyAgICAgICAgcmV2aXNpb24gPSAiIgorICAgICAgICBzZWxmLnVzZXJzID0ge30KKworICAgICAgICAjIE1ha2Ugc3VyZSBubyByZXZpc2lvbiBzcGVjaWZpZXJzIGFyZSB1c2VkIHdoZW4gLS1jaGFuZ2VzZmlsZQorICAgICAgICAjIGlzIHNwZWNpZmllZC4KKyAgICAgICAgYmFkX2NoYW5nZXNmaWxlID0gRmFsc2UKKyAgICAgICAgaWYgbGVuKHNlbGYuY2hhbmdlc0ZpbGUpID4gMDoKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoczoKKyAgICAgICAgICAgICAgICBpZiBwLmZpbmQoIkAiKSA+PSAwIG9yIHAuZmluZCgiIyIpID49IDA6CisgICAgICAgICAgICAgICAgICAgIGJhZF9jaGFuZ2VzZmlsZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgYmFkX2NoYW5nZXNmaWxlOgorICAgICAgICAgICAgZGllKCJPcHRpb24gLS1jaGFuZ2VzZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCByZXZpc2lvbiBzcGVjaWZpZXJzIikKKworICAgICAgICBuZXdQYXRocyA9IFtdCisgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoczoKKyAgICAgICAgICAgIGlmIHAuZmluZCgiQCIpICE9IC0xOgorICAgICAgICAgICAgICAgIGF0SWR4ID0gcC5pbmRleCgiQCIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VSYW5nZSA9IHBbYXRJZHg6XQorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hhbmdlUmFuZ2UgPT0gIkBhbGwiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVJhbmdlID0gIiIKKyAgICAgICAgICAgICAgICBlbGlmICcsJyBub3QgaW4gc2VsZi5jaGFuZ2VSYW5nZToKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gPSBzZWxmLmNoYW5nZVJhbmdlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlUmFuZ2UgPSAiIgorICAgICAgICAgICAgICAgIHAgPSBwWzphdElkeF0KKyAgICAgICAgICAgIGVsaWYgcC5maW5kKCIjIikgIT0gLTE6CisgICAgICAgICAgICAgICAgaGFzaElkeCA9IHAuaW5kZXgoIiMiKQorICAgICAgICAgICAgICAgIHJldmlzaW9uID0gcFtoYXNoSWR4Ol0KKyAgICAgICAgICAgICAgICBwID0gcFs6aGFzaElkeF0KKyAgICAgICAgICAgIGVsaWYgc2VsZi5wcmV2aW91c0RlcG90UGF0aHMgPT0gW106CisgICAgICAgICAgICAgICAgIyBwYXkgYXR0ZW50aW9uIHRvIGNoYW5nZXNmaWxlLCBpZiBnaXZlbiwgZWxzZSBpbXBvcnQKKyAgICAgICAgICAgICAgICAjIHRoZSBlbnRpcmUgcDQgdHJlZSBhdCB0aGUgaGVhZCByZXZpc2lvbgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLmNoYW5nZXNGaWxlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9ICIjaGVhZCIKKworICAgICAgICAgICAgcCA9IHJlLnN1YiAoIlwuXC5cLiQiLCAiIiwgcCkKKyAgICAgICAgICAgIGlmIG5vdCBwLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgcCArPSAiLyIKKworICAgICAgICAgICAgbmV3UGF0aHMuYXBwZW5kKHApCisKKyAgICAgICAgc2VsZi5kZXBvdFBhdGhzID0gbmV3UGF0aHMKKworICAgICAgICAjIC0tZGV0ZWN0LWJyYW5jaGVzIG1heSBjaGFuZ2UgdGhpcyBmb3IgZWFjaCBicmFuY2gKKyAgICAgICAgc2VsZi5icmFuY2hQcmVmaXhlcyA9IHNlbGYuZGVwb3RQYXRocworCisgICAgICAgIHNlbGYubG9hZFVzZXJNYXBGcm9tQ2FjaGUoKQorICAgICAgICBzZWxmLmxhYmVscyA9IHt9CisgICAgICAgIGlmIHNlbGYuZGV0ZWN0TGFiZWxzOgorICAgICAgICAgICAgc2VsZi5nZXRMYWJlbHMoKTsKKworICAgICAgICBpZiBzZWxmLmRldGVjdEJyYW5jaGVzOgorICAgICAgICAgICAgIyMgRklYTUUgLSB3aGF0J3MgYSBQNCBwcm9qZWN0TmFtZSA/CisgICAgICAgICAgICBzZWxmLnByb2plY3ROYW1lID0gc2VsZi5ndWVzc1Byb2plY3ROYW1lKCkKKworICAgICAgICAgICAgaWYgc2VsZi5oYXNPcmlnaW46CisgICAgICAgICAgICAgICAgc2VsZi5nZXRCcmFuY2hNYXBwaW5nRnJvbUdpdEJyYW5jaGVzKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5nZXRCcmFuY2hNYXBwaW5nKCkKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgicDQtZ2l0IGJyYW5jaGVzOiAlcyIgJSBzZWxmLnA0QnJhbmNoZXNJbkdpdCkKKyAgICAgICAgICAgICAgICBwcmludCgiaW5pdGlhbCBwYXJlbnRzOiAlcyIgJSBzZWxmLmluaXRpYWxQYXJlbnRzKQorICAgICAgICAgICAgZm9yIGIgaW4gc2VsZi5wNEJyYW5jaGVzSW5HaXQ6CisgICAgICAgICAgICAgICAgaWYgYiAhPSAibWFzdGVyIjoKKworICAgICAgICAgICAgICAgICAgICAjIyBGSVhNRQorICAgICAgICAgICAgICAgICAgICBiID0gYltsZW4oc2VsZi5wcm9qZWN0TmFtZSk6XQorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZEJyYW5jaGVzLmFkZChiKQorCisgICAgICAgIHA0X2NoZWNrX2FjY2VzcygpCisKKyAgICAgICAgc2VsZi5vcGVuU3RyZWFtcygpCisKKyAgICAgICAgZXJyID0gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHJldmlzaW9uOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0SGVhZFJldmlzaW9uKHJldmlzaW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmltcG9ydFJldmlzaW9ucyhhcmdzLCBicmFuY2hfYXJnX2dpdmVuKQorCisgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCJnaXQtcDQuaW1wb3J0TGFiZWxzIik6CisgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRMYWJlbHMgPSBUcnVlCisKKyAgICAgICAgICAgIGlmIHNlbGYuaW1wb3J0TGFiZWxzOgorICAgICAgICAgICAgICAgIHA0TGFiZWxzID0gZ2V0UDRMYWJlbHMoc2VsZi5kZXBvdFBhdGhzKQorICAgICAgICAgICAgICAgIGdpdFRhZ3MgPSBnZXRHaXRUYWdzKCkKKworICAgICAgICAgICAgICAgIG1pc3NpbmdQNExhYmVscyA9IHA0TGFiZWxzIC0gZ2l0VGFncworICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0UDRMYWJlbHMoc2VsZi5naXRTdHJlYW0sIG1pc3NpbmdQNExhYmVscykKKworICAgICAgICBleGNlcHQgUDRDb21tYW5kRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBlcnIgPSBlCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xvc2VTdHJlYW1zKCkKKworICAgICAgICBpZiBlcnI6CisgICAgICAgICAgICBkaWUoc3RyKGVycikpCisKKyAgICAgICAgIyBDbGVhbnVwIHRlbXBvcmFyeSBicmFuY2hlcyBjcmVhdGVkIGR1cmluZyBpbXBvcnQKKyAgICAgICAgaWYgc2VsZi50ZW1wQnJhbmNoZXMgIT0gW106CisgICAgICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYudGVtcEJyYW5jaGVzOgorICAgICAgICAgICAgICAgIHJlYWRfcGlwZSgiZ2l0IHVwZGF0ZS1yZWYgLWQgJXMiICUgYnJhbmNoKQorICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJHSVRfRElSIiwgIi5naXQiKSwgc2VsZi50ZW1wQnJhbmNoTG9jYXRpb24pKQorCisgICAgICAgICMgQ3JlYXRlIGEgc3ltYm9saWMgcmVmIHA0L0hFQUQgcG9pbnRpbmcgdG8gcDQvPGJyYW5jaD4gdG8gYWxsb3cKKyAgICAgICAgIyBhIGNvbnZlbmllbnQgc2hvcnRjdXQgcmVmbmFtZSAicDQiLgorICAgICAgICBpZiBzZWxmLmltcG9ydEludG9SZW1vdGVzOgorICAgICAgICAgICAgaGVhZF9yZWYgPSBzZWxmLnJlZlByZWZpeCArICJIRUFEIgorICAgICAgICAgICAgaWYgbm90IGdpdEJyYW5jaEV4aXN0cyhoZWFkX3JlZikgYW5kIGdpdEJyYW5jaEV4aXN0cyhzZWxmLmJyYW5jaCk6CisgICAgICAgICAgICAgICAgc3lzdGVtKFsiZ2l0IiwgInN5bWJvbGljLXJlZiIsIGhlYWRfcmVmLCBzZWxmLmJyYW5jaF0pCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUDRSZWJhc2UoQ29tbWFuZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYub3B0aW9ucyA9IFsKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1pbXBvcnQtbGFiZWxzIiwgZGVzdD0iaW1wb3J0TGFiZWxzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5pbXBvcnRMYWJlbHMgPSBGYWxzZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gKCJGZXRjaGVzIHRoZSBsYXRlc3QgcmV2aXNpb24gZnJvbSBwZXJmb3JjZSBhbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInJlYmFzZXMgdGhlIGN1cnJlbnQgd29yayAoYnJhbmNoKSBhZ2FpbnN0IGl0IikKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIHN5bmMgPSBQNFN5bmMoKQorICAgICAgICBzeW5jLmltcG9ydExhYmVscyA9IHNlbGYuaW1wb3J0TGFiZWxzCisgICAgICAgIHN5bmMucnVuKFtdKQorCisgICAgICAgIHJldHVybiBzZWxmLnJlYmFzZSgpCisKKyAgICBkZWYgcmViYXNlKHNlbGYpOgorICAgICAgICBpZiBvcy5zeXN0ZW0oImdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIikgIT0gMDoKKyAgICAgICAgICAgIGRpZSgiU29tZSBmaWxlcyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGFyZSBtb2RpZmllZCBhbmQgZGlmZmVyZW50IHRoYW4gd2hhdCBpcyBpbiB5b3VyIGluZGV4LiBZb3UgY2FuIHVzZSBnaXQgdXBkYXRlLWluZGV4IDxmaWxlbmFtZT4gdG8gYnJpbmcgdGhlIGluZGV4IHVwIHRvIGRhdGUgb3Igc3Rhc2ggYXdheSBhbGwgeW91ciBjaGFuZ2VzIHdpdGggZ2l0IHN0YXNoLiIpOworICAgICAgICBpZiBsZW4ocmVhZF9waXBlKCJnaXQgZGlmZi1pbmRleCBIRUFEIC0tIikpID4gMDoKKyAgICAgICAgICAgIGRpZSgiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcy4gUGxlYXNlIGNvbW1pdCB0aGVtIGJlZm9yZSByZWJhc2luZyBvciBzdGFzaCB0aGVtIGF3YXkgd2l0aCBnaXQgc3Rhc2guIik7CisKKyAgICAgICAgW3Vwc3RyZWFtLCBzZXR0aW5nc10gPSBmaW5kVXBzdHJlYW1CcmFuY2hQb2ludCgpCisgICAgICAgIGlmIGxlbih1cHN0cmVhbSkgPT0gMDoKKyAgICAgICAgICAgIGRpZSgiQ2Fubm90IGZpbmQgdXBzdHJlYW0gYnJhbmNocG9pbnQgZm9yIHJlYmFzZSIpCisKKyAgICAgICAgIyB0aGUgYnJhbmNocG9pbnQgbWF5IGJlIHA0L2Zvb34zLCBzbyBzdHJpcCBvZmYgdGhlIHBhcmVudAorICAgICAgICB1cHN0cmVhbSA9IHJlLnN1YigiflswLTldKyQiLCAiIiwgdXBzdHJlYW0pCisKKyAgICAgICAgcHJpbnQoIlJlYmFzaW5nIHRoZSBjdXJyZW50IGJyYW5jaCBvbnRvICVzIiAlIHVwc3RyZWFtKQorICAgICAgICBvbGRIZWFkID0gcmVhZF9waXBlKCJnaXQgcmV2LXBhcnNlIEhFQUQiKS5zdHJpcCgpCisgICAgICAgIHN5c3RlbSgiZ2l0IHJlYmFzZSAlcyIgJSB1cHN0cmVhbSkKKyAgICAgICAgc3lzdGVtKCJnaXQgZGlmZi10cmVlIC0tc3RhdCAtLXN1bW1hcnkgLU0gJXMgSEVBRCAtLSIgJSBvbGRIZWFkKQorICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNENsb25lKFA0U3luYyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBQNFN5bmMuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJDcmVhdGVzIGEgbmV3IGdpdCByZXBvc2l0b3J5IGFuZCBpbXBvcnRzIGZyb20gUGVyZm9yY2UgaW50byBpdCIKKyAgICAgICAgc2VsZi51c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIC8vZGVwb3QvcGF0aFtAcmV2UmFuZ2VdIgorICAgICAgICBzZWxmLm9wdGlvbnMgKz0gWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZGVzdGluYXRpb24iLCBkZXN0PSJjbG9uZURlc3RpbmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJ3aGVyZSB0byBsZWF2ZSByZXN1bHQgb2YgdGhlIGNsb25lIiksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1iYXJlIiwgZGVzdD0iY2xvbmVCYXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpLAorICAgICAgICBdCisgICAgICAgIHNlbGYuY2xvbmVEZXN0aW5hdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5uZWVkc0dpdCA9IEZhbHNlCisgICAgICAgIHNlbGYuY2xvbmVCYXJlID0gRmFsc2UKKworICAgIGRlZiBkZWZhdWx0RGVzdGluYXRpb24oc2VsZiwgYXJncyk6CisgICAgICAgICMjIFRPRE86IHVzZSBjb21tb24gcHJlZml4IG9mIGFyZ3M/CisgICAgICAgIGRlcG90UGF0aCA9IGFyZ3NbMF0KKyAgICAgICAgZGVwb3REaXIgPSByZS5zdWIoIihAW15AXSopJCIsICIiLCBkZXBvdFBhdGgpCisgICAgICAgIGRlcG90RGlyID0gcmUuc3ViKCIoI1teI10qKSQiLCAiIiwgZGVwb3REaXIpCisgICAgICAgIGRlcG90RGlyID0gcmUuc3ViKHIiXC5cLlwuJCIsICIiLCBkZXBvdERpcikKKyAgICAgICAgZGVwb3REaXIgPSByZS5zdWIociIvJCIsICIiLCBkZXBvdERpcikKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXQoZGVwb3REaXIpWzFdCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5rZWVwUmVwb1BhdGggYW5kIG5vdCBzZWxmLmNsb25lRGVzdGluYXRpb246CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJNdXN0IHNwZWNpZnkgZGVzdGluYXRpb24gZm9yIC0ta2VlcC1wYXRoXG4iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBkZXBvdFBhdGhzID0gYXJncworCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb25lRGVzdGluYXRpb24gYW5kIGxlbihkZXBvdFBhdGhzKSA+IDE6CisgICAgICAgICAgICBzZWxmLmNsb25lRGVzdGluYXRpb24gPSBkZXBvdFBhdGhzWy0xXQorICAgICAgICAgICAgZGVwb3RQYXRocyA9IGRlcG90UGF0aHNbOi0xXQorCisgICAgICAgIGZvciBwIGluIGRlcG90UGF0aHM6CisgICAgICAgICAgICBpZiBub3QgcC5zdGFydHN3aXRoKCIvLyIpOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0RlcG90IHBhdGhzIG11c3Qgc3RhcnQgd2l0aCAiLy8iOiAlc1xuJyAlIHApCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IHNlbGYuY2xvbmVEZXN0aW5hdGlvbjoKKyAgICAgICAgICAgIHNlbGYuY2xvbmVEZXN0aW5hdGlvbiA9IHNlbGYuZGVmYXVsdERlc3RpbmF0aW9uKGFyZ3MpCisKKyAgICAgICAgcHJpbnQoIkltcG9ydGluZyBmcm9tICVzIGludG8gJXMiICUgKCcsICcuam9pbihkZXBvdFBhdGhzKSwgc2VsZi5jbG9uZURlc3RpbmF0aW9uKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5jbG9uZURlc3RpbmF0aW9uKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuY2xvbmVEZXN0aW5hdGlvbikKKyAgICAgICAgY2hkaXIoc2VsZi5jbG9uZURlc3RpbmF0aW9uKQorCisgICAgICAgIGluaXRfY21kID0gWyAiZ2l0IiwgImluaXQiIF0KKyAgICAgICAgaWYgc2VsZi5jbG9uZUJhcmU6CisgICAgICAgICAgICBpbml0X2NtZC5hcHBlbmQoIi0tYmFyZSIpCisgICAgICAgIHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoaW5pdF9jbWQpCisgICAgICAgIGlmIHJldGNvZGU6CisgICAgICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgaW5pdF9jbWQpCisKKyAgICAgICAgaWYgbm90IFA0U3luYy5ydW4oc2VsZiwgZGVwb3RQYXRocyk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIGNyZWF0ZSBhIG1hc3RlciBicmFuY2ggYW5kIGNoZWNrIG91dCBhIHdvcmsgdHJlZQorICAgICAgICBpZiBnaXRCcmFuY2hFeGlzdHMoc2VsZi5icmFuY2gpOgorICAgICAgICAgICAgc3lzdGVtKFsgImdpdCIsICJicmFuY2giLCAibWFzdGVyIiwgc2VsZi5icmFuY2ggXSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsb25lQmFyZToKKyAgICAgICAgICAgICAgICBzeXN0ZW0oWyAiZ2l0IiwgImNoZWNrb3V0IiwgIi1mIiBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoJ05vdCBjaGVja2luZyBvdXQgYW55IGJyYW5jaCwgdXNlICcgXAorICAgICAgICAgICAgICAgICAgJyJnaXQgY2hlY2tvdXQgLXEgLWIgbWFzdGVyIDxicmFuY2g+IicpCisKKyAgICAgICAgIyBhdXRvLXNldCB0aGlzIHZhcmlhYmxlIGlmIGludm9rZWQgd2l0aCAtLXVzZS1jbGllbnQtc3BlYworICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWNfZnJvbV9vcHRpb25zOgorICAgICAgICAgICAgc3lzdGVtKCJnaXQgY29uZmlnIC0tYm9vbCBnaXQtcDQudXNlY2xpZW50c3BlYyB0cnVlIikKKworICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNFVuc2hlbHZlKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbXQorICAgICAgICBzZWxmLm9yaWdpbiA9ICJIRUFEIgorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gIlVuc2hlbHZlIGEgUDQgY2hhbmdlbGlzdCBpbnRvIGEgZ2l0IGNvbW1pdCIKKyAgICAgICAgc2VsZi51c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIGNoYW5nZWxpc3QiCisgICAgICAgIHNlbGYub3B0aW9ucyArPSBbCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tb3JpZ2luIiwgZGVzdD0ib3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0iVXNlIHRoaXMgYmFzZSByZXZpc2lvbiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0ICglcykiICUgc2VsZi5vcmlnaW4pLAorICAgICAgICBdCisgICAgICAgIHNlbGYudmVyYm9zZSA9IEZhbHNlCisgICAgICAgIHNlbGYubm9Db21taXQgPSBGYWxzZQorICAgICAgICBzZWxmLmRlc3RicmFuY2ggPSAicmVmcy9yZW1vdGVzL3A0LXVuc2hlbHZlZCIKKworICAgIGRlZiByZW5hbWVCcmFuY2goc2VsZiwgYnJhbmNoX25hbWUpOgorICAgICAgICAiIiIgUmVuYW1lIHRoZSBleGlzdGluZyBicmFuY2ggdG8gYnJhbmNoX25hbWUuTgorICAgICAgICAiIiIKKworICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwxMDAwKToKKyAgICAgICAgICAgIGJhY2t1cF9icmFuY2hfbmFtZSA9ICJ7MH0uezF9Ii5mb3JtYXQoYnJhbmNoX25hbWUsIGkpCisgICAgICAgICAgICBpZiBub3QgZ2l0QnJhbmNoRXhpc3RzKGJhY2t1cF9icmFuY2hfbmFtZSk6CisgICAgICAgICAgICAgICAgZ2l0VXBkYXRlUmVmKGJhY2t1cF9icmFuY2hfbmFtZSwgYnJhbmNoX25hbWUpICMgY29weSByZWYgdG8gYmFja3VwCisgICAgICAgICAgICAgICAgZ2l0RGVsZXRlUmVmKGJyYW5jaF9uYW1lKQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIHByaW50KCJyZW5hbWVkIG9sZCB1bnNoZWx2ZSBicmFuY2ggdG8gezB9Ii5mb3JtYXQoYmFja3VwX2JyYW5jaF9uYW1lKSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIHN5cy5leGl0KCJnYXZlIHVwIHRyeWluZyB0byByZW5hbWUgZXhpc3RpbmcgYnJhbmNoIHswfSIuZm9ybWF0KHN5bmMuYnJhbmNoKSkKKworICAgIGRlZiBmaW5kTGFzdFA0UmV2aXNpb24oc2VsZiwgc3RhcnRpbmdfcG9pbnQpOgorICAgICAgICAiIiIgTG9vayBiYWNrIGZyb20gc3RhcnRpbmdfcG9pbnQgZm9yIHRoZSBmaXJzdCBjb21taXQgY3JlYXRlZCBieSBnaXQtcDQKKyAgICAgICAgICAgIHRvIGZpbmQgdGhlIFA0IGNvbW1pdCB3ZSBhcmUgYmFzZWQgb24sIGFuZCB0aGUgZGVwb3QtcGF0aHMuCisgICAgICAgICIiIgorCisgICAgICAgIGZvciBwYXJlbnQgaW4gKHJhbmdlKDY1NTM1KSk6CisgICAgICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQoInswfV57MX0iLmZvcm1hdChzdGFydGluZ19wb2ludCwgcGFyZW50KSkKKyAgICAgICAgICAgIHNldHRpbmdzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZykKKyAgICAgICAgICAgIGlmICdjaGFuZ2UnIGluIHNldHRpbmdzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncworCisgICAgICAgIHN5cy5leGl0KCJjb3VsZCBub3QgZmluZCBnaXQtcDQgY29tbWl0cyBpbiB7MH0iLmZvcm1hdChzZWxmLm9yaWdpbikpCisKKyAgICBkZWYgY3JlYXRlU2hlbHZlUGFyZW50KHNlbGYsIGNoYW5nZSwgYnJhbmNoX25hbWUsIHN5bmMsIG9yaWdpbik6CisgICAgICAgICIiIiBDcmVhdGUgYSBjb21taXQgbWF0Y2hpbmcgdGhlIHBhcmVudCBvZiB0aGUgc2hlbHZlZCBjaGFuZ2VsaXN0ICdjaGFuZ2UnCisgICAgICAgICIiIgorICAgICAgICBwYXJlbnRfZGVzY3JpcHRpb24gPSBwNF9kZXNjcmliZShjaGFuZ2UsIHNoZWx2ZWQ9VHJ1ZSkKKyAgICAgICAgcGFyZW50X2Rlc2NyaXB0aW9uWydkZXNjJ10gPSAncGFyZW50IGZvciBzaGVsdmVkIGNoYW5nZWxpc3Qge31cbicuZm9ybWF0KGNoYW5nZSkKKyAgICAgICAgZmlsZXMgPSBzeW5jLmV4dHJhY3RGaWxlc0Zyb21Db21taXQocGFyZW50X2Rlc2NyaXB0aW9uLCBzaGVsdmVkPUZhbHNlLCBzaGVsdmVkX2NsPWNoYW5nZSkKKworICAgICAgICBwYXJlbnRfZmlsZXMgPSBbXQorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICMgaWYgaXQgd2FzIGFkZGVkIGluIHRoZSBzaGVsdmVkIGNoYW5nZWxpc3QsIGl0IHdvbid0IGV4aXN0IGluIHRoZSBwYXJlbnQKKyAgICAgICAgICAgIGlmIGZbJ2FjdGlvbiddIGluIHNlbGYuYWRkX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBpZiBpdCB3YXMgZGVsZXRlZCBpbiB0aGUgc2hlbHZlZCBjaGFuZ2VsaXN0IGl0IG11c3Qgbm90IGJlIGRlbGV0ZWQKKyAgICAgICAgICAgICMgaW4gdGhlIHBhcmVudCAtIHdlIG1pZ2h0IGV2ZW4gbmVlZCB0byBjcmVhdGUgaXQgaWYgdGhlIG9yaWdpbiBicmFuY2gKKyAgICAgICAgICAgICMgZG9lcyBub3QgaGF2ZSBpdAorICAgICAgICAgICAgaWYgZlsnYWN0aW9uJ10gaW4gc2VsZi5kZWxldGVfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBmWydhY3Rpb24nXSA9ICdhZGQnCisKKyAgICAgICAgICAgIHBhcmVudF9maWxlcy5hcHBlbmQoZikKKworICAgICAgICBzeW5jLmNvbW1pdChwYXJlbnRfZGVzY3JpcHRpb24sIHBhcmVudF9maWxlcywgYnJhbmNoX25hbWUsCisgICAgICAgICAgICAgICAgcGFyZW50PW9yaWdpbiwgYWxsb3dfZW1wdHk9VHJ1ZSkKKyAgICAgICAgcHJpbnQoImNyZWF0ZWQgcGFyZW50IGNvbW1pdCBmb3IgezB9IGJhc2VkIG9uIHsxfSBpbiB7Mn0iLmZvcm1hdCgKKyAgICAgICAgICAgIGNoYW5nZSwgc2VsZi5vcmlnaW4sIGJyYW5jaF9uYW1lKSkKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgbm90IGdpdEJyYW5jaEV4aXN0cyhzZWxmLm9yaWdpbik6CisgICAgICAgICAgICBzeXMuZXhpdCgib3JpZ2luIGJyYW5jaCB7MH0gZG9lcyBub3QgZXhpc3QiLmZvcm1hdChzZWxmLm9yaWdpbikpCisKKyAgICAgICAgc3luYyA9IFA0U3luYygpCisgICAgICAgIGNoYW5nZXMgPSBhcmdzCisKKyAgICAgICAgIyBvbmx5IG9uZSBjaGFuZ2UgYXQgYSB0aW1lCisgICAgICAgIGNoYW5nZSA9IGNoYW5nZXNbMF0KKworICAgICAgICAjIGlmIHRoZSB0YXJnZXQgYnJhbmNoIGFscmVhZHkgZXhpc3RzLCByZW5hbWUgaXQKKyAgICAgICAgYnJhbmNoX25hbWUgPSAiezB9L3sxfSIuZm9ybWF0KHNlbGYuZGVzdGJyYW5jaCwgY2hhbmdlKQorICAgICAgICBpZiBnaXRCcmFuY2hFeGlzdHMoYnJhbmNoX25hbWUpOgorICAgICAgICAgICAgc2VsZi5yZW5hbWVCcmFuY2goYnJhbmNoX25hbWUpCisgICAgICAgIHN5bmMuYnJhbmNoID0gYnJhbmNoX25hbWUKKworICAgICAgICBzeW5jLnZlcmJvc2UgPSBzZWxmLnZlcmJvc2UKKyAgICAgICAgc3luYy5zdXBwcmVzc19tZXRhX2NvbW1lbnQgPSBUcnVlCisKKyAgICAgICAgc2V0dGluZ3MgPSBzZWxmLmZpbmRMYXN0UDRSZXZpc2lvbihzZWxmLm9yaWdpbikKKyAgICAgICAgc3luYy5kZXBvdFBhdGhzID0gc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10KKyAgICAgICAgc3luYy5icmFuY2hQcmVmaXhlcyA9IHN5bmMuZGVwb3RQYXRocworCisgICAgICAgIHN5bmMub3BlblN0cmVhbXMoKQorICAgICAgICBzeW5jLmxvYWRVc2VyTWFwRnJvbUNhY2hlKCkKKyAgICAgICAgc3luYy5zaWxlbnQgPSBUcnVlCisKKyAgICAgICAgIyBjcmVhdGUgYSBjb21taXQgZm9yIHRoZSBwYXJlbnQgb2YgdGhlIHNoZWx2ZWQgY2hhbmdlbGlzdAorICAgICAgICBzZWxmLmNyZWF0ZVNoZWx2ZVBhcmVudChjaGFuZ2UsIGJyYW5jaF9uYW1lLCBzeW5jLCBzZWxmLm9yaWdpbikKKworICAgICAgICAjIGNyZWF0ZSB0aGUgY29tbWl0IGZvciB0aGUgc2hlbHZlZCBjaGFuZ2VsaXN0IGl0c2VsZgorICAgICAgICBkZXNjcmlwdGlvbiA9IHA0X2Rlc2NyaWJlKGNoYW5nZSwgVHJ1ZSkKKyAgICAgICAgZmlsZXMgPSBzeW5jLmV4dHJhY3RGaWxlc0Zyb21Db21taXQoZGVzY3JpcHRpb24sIFRydWUsIGNoYW5nZSkKKworICAgICAgICBzeW5jLmNvbW1pdChkZXNjcmlwdGlvbiwgZmlsZXMsIGJyYW5jaF9uYW1lLCAiIikKKyAgICAgICAgc3luYy5jbG9zZVN0cmVhbXMoKQorCisgICAgICAgIHByaW50KCJ1bnNoZWx2ZWQgY2hhbmdlbGlzdCB7MH0gaW50byB7MX0iLmZvcm1hdChjaGFuZ2UsIGJyYW5jaF9uYW1lKSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNEJyYW5jaGVzKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbIF0KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICgiU2hvd3MgdGhlIGdpdCBicmFuY2hlcyB0aGF0IGhvbGQgaW1wb3J0cyBhbmQgdGhlaXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImNvcnJlc3BvbmRpbmcgcGVyZm9yY2UgZGVwb3QgcGF0aHMiKQorICAgICAgICBzZWxmLnZlcmJvc2UgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgaWYgb3JpZ2luUDRCcmFuY2hlc0V4aXN0KCk6CisgICAgICAgICAgICBjcmVhdGVPclVwZGF0ZUJyYW5jaGVzRnJvbU9yaWdpbigpCisKKyAgICAgICAgY21kbGluZSA9ICJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgIgorICAgICAgICBjbWRsaW5lICs9ICIgLS1yZW1vdGVzIgorCisgICAgICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhjbWRsaW5lKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgncDQvJykgb3IgbGluZSA9PSAicDQvSEVBRCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGJyYW5jaCA9IGxpbmUKKworICAgICAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KCJyZWZzL3JlbW90ZXMvJXMiICUgYnJhbmNoKQorICAgICAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorCisgICAgICAgICAgICBwcmludCgiJXMgPD0gJXMgKCVzKSIgJSAoYnJhbmNoLCAiLCIuam9pbihzZXR0aW5nc1siZGVwb3QtcGF0aHMiXSksIHNldHRpbmdzWyJjaGFuZ2UiXSkpCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIEhlbHBGb3JtYXR0ZXIob3B0cGFyc2UuSW5kZW50ZWRIZWxwRm9ybWF0dGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIG9wdHBhcnNlLkluZGVudGVkSGVscEZvcm1hdHRlci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIGZvcm1hdF9kZXNjcmlwdGlvbihzZWxmLCBkZXNjcmlwdGlvbik6CisgICAgICAgIGlmIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uICsgIlxuIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiCisKK2RlZiBwcmludFVzYWdlKGNvbW1hbmRzKToKKyAgICBwcmludCgidXNhZ2U6ICVzIDxjb21tYW5kPiBbb3B0aW9uc10iICUgc3lzLmFyZ3ZbMF0pCisgICAgcHJpbnQoIiIpCisgICAgcHJpbnQoInZhbGlkIGNvbW1hbmRzOiAlcyIgJSAiLCAiLmpvaW4oY29tbWFuZHMpKQorICAgIHByaW50KCIiKQorICAgIHByaW50KCJUcnkgJXMgPGNvbW1hbmQ+IC0taGVscCBmb3IgY29tbWFuZCBzcGVjaWZpYyBoZWxwLiIgJSBzeXMuYXJndlswXSkKKyAgICBwcmludCgiIikKKworY29tbWFuZHMgPSB7CisgICAgImRlYnVnIiA6IFA0RGVidWcsCisgICAgInN1Ym1pdCIgOiBQNFN1Ym1pdCwKKyAgICAiY29tbWl0IiA6IFA0U3VibWl0LAorICAgICJzeW5jIiA6IFA0U3luYywKKyAgICAicmViYXNlIiA6IFA0UmViYXNlLAorICAgICJjbG9uZSIgOiBQNENsb25lLAorICAgICJyb2xsYmFjayIgOiBQNFJvbGxCYWNrLAorICAgICJicmFuY2hlcyIgOiBQNEJyYW5jaGVzLAorICAgICJ1bnNoZWx2ZSIgOiBQNFVuc2hlbHZlLAorfQorCisKK2RlZiBtYWluKCk6CisgICAgaWYgbGVuKHN5cy5hcmd2WzE6XSkgPT0gMDoKKyAgICAgICAgcHJpbnRVc2FnZShjb21tYW5kcy5rZXlzKCkpCisgICAgICAgIHN5cy5leGl0KDIpCisKKyAgICBjbWROYW1lID0gc3lzLmFyZ3ZbMV0KKyAgICB0cnk6CisgICAgICAgIGtsYXNzID0gY29tbWFuZHNbY21kTmFtZV0KKyAgICAgICAgY21kID0ga2xhc3MoKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcHJpbnQoInVua25vd24gY29tbWFuZCAlcyIgJSBjbWROYW1lKQorICAgICAgICBwcmludCgiIikKKyAgICAgICAgcHJpbnRVc2FnZShjb21tYW5kcy5rZXlzKCkpCisgICAgICAgIHN5cy5leGl0KDIpCisKKyAgICBvcHRpb25zID0gY21kLm9wdGlvbnMKKyAgICBjbWQuZ2l0ZGlyID0gb3MuZW52aXJvbi5nZXQoIkdJVF9ESVIiLCBOb25lKQorCisgICAgYXJncyA9IHN5cy5hcmd2WzI6XQorCisgICAgb3B0aW9ucy5hcHBlbmQob3B0cGFyc2UubWFrZV9vcHRpb24oIi0tdmVyYm9zZSIsICItdiIsIGRlc3Q9InZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUiKSkKKyAgICBpZiBjbWQubmVlZHNHaXQ6CisgICAgICAgIG9wdGlvbnMuYXBwZW5kKG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWdpdC1kaXIiLCBkZXN0PSJnaXRkaXIiKSkKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcihjbWQudXNhZ2UucmVwbGFjZSgiJXByb2ciLCAiJXByb2cgIiArIGNtZE5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGNtZC5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyID0gSGVscEZvcm1hdHRlcigpKQorCisgICAgdHJ5OgorICAgICAgICAoY21kLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2WzI6XSwgY21kKTsKKyAgICBleGNlcHQ6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgcmFpc2UKKworICAgIGdsb2JhbCB2ZXJib3NlCisgICAgdmVyYm9zZSA9IGNtZC52ZXJib3NlCisgICAgaWYgY21kLm5lZWRzR2l0OgorICAgICAgICBpZiBjbWQuZ2l0ZGlyID09IE5vbmU6CisgICAgICAgICAgICBjbWQuZ2l0ZGlyID0gb3MucGF0aC5hYnNwYXRoKCIuZ2l0IikKKyAgICAgICAgICAgIGlmIG5vdCBpc1ZhbGlkR2l0RGlyKGNtZC5naXRkaXIpOgorICAgICAgICAgICAgICAgICMgInJldi1wYXJzZSAtLWdpdC1kaXIiIHdpdGhvdXQgYXJndW1lbnRzIHdpbGwgdHJ5ICRQV0QvLmdpdAorICAgICAgICAgICAgICAgIGNtZC5naXRkaXIgPSByZWFkX3BpcGUoImdpdCByZXYtcGFyc2UgLS1naXQtZGlyIikuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNtZC5naXRkaXIpOgorICAgICAgICAgICAgICAgICAgICBjZHVwID0gcmVhZF9waXBlKCJnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwIikuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oY2R1cCkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoY2R1cCk7CisKKyAgICAgICAgaWYgbm90IGlzVmFsaWRHaXREaXIoY21kLmdpdGRpcik6CisgICAgICAgICAgICBpZiBpc1ZhbGlkR2l0RGlyKGNtZC5naXRkaXIgKyAiLy5naXQiKToKKyAgICAgICAgICAgICAgICBjbWQuZ2l0ZGlyICs9ICIvLmdpdCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGllKCJmYXRhbDogY2Fubm90IGxvY2F0ZSBnaXQgcmVwb3NpdG9yeSBhdCAlcyIgJSBjbWQuZ2l0ZGlyKQorCisgICAgICAgICMgc28gZ2l0IGNvbW1hbmRzIGludm9rZWQgZnJvbSB0aGUgUDQgd29ya3NwYWNlIHdpbGwgc3VjY2VlZAorICAgICAgICBvcy5lbnZpcm9uWyJHSVRfRElSIl0gPSBjbWQuZ2l0ZGlyCisKKyAgICBpZiBub3QgY21kLnJ1bihhcmdzKToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgyKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9naXQtcGFyc2UtcmVtb3RlLnNoIGIvZ2l0LXBhcnNlLXJlbW90ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2MzOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXBhcnNlLXJlbW90ZS5zaApAQCAtMCwwICsxLDEwMSBAQAorIyBUaGlzIGlzIGEgc2hlbGwgbGlicmFyeSB0byBjYWxjdWxhdGUgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGFuZAorIyB1cHN0cmVhbSBicmFuY2ggdGhhdCBzaG91bGQgYmUgcHVsbGVkIGJ5ICJnaXQgcHVsbCIgZnJvbSB0aGUgY3VycmVudAorIyBicmFuY2guCisKKyMgZ2l0LWxzLXJlbW90ZSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIGEgZ2l0IG1hbmFnZWQgcmVwb3NpdG9yeTsKKyMgdGhpcyB3b3VsZCBmYWlsIGluIHRoYXQgY2FzZSBhbmQgd291bGQgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZS4KK0dJVF9ESVI9JChnaXQgcmV2LXBhcnNlIC1xIC0tZ2l0LWRpcikgfHwgOjsKKworZ2V0X2RlZmF1bHRfcmVtb3RlICgpIHsKKwljdXJyX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKKwljdXJyX2JyYW5jaD0iJHtjdXJyX2JyYW5jaCNyZWZzL2hlYWRzL30iCisJb3JpZ2luPSQoZ2l0IGNvbmZpZyAtLWdldCAiYnJhbmNoLiRjdXJyX2JyYW5jaC5yZW1vdGUiKQorCWVjaG8gJHtvcmlnaW46LW9yaWdpbn0KK30KKworZ2V0X3JlbW90ZV9tZXJnZV9icmFuY2ggKCkgeworCWNhc2UgIiQjIiBpbgorCTB8MSkKKwkgICAgb3JpZ2luPSIkMSIKKwkgICAgZGVmYXVsdD0kKGdldF9kZWZhdWx0X3JlbW90ZSkKKwkgICAgdGVzdCAteiAiJG9yaWdpbiIgJiYgb3JpZ2luPSRkZWZhdWx0CisJICAgIGN1cnJfYnJhbmNoPSQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSAmJgorCSAgICBbICIkb3JpZ2luIiA9ICIkZGVmYXVsdCIgXSAmJgorCSAgICBlY2hvICQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJSh1cHN0cmVhbSknICRjdXJyX2JyYW5jaCkKKwkgICAgOzsKKwkqKQorCSAgICByZXBvPSQxCisJICAgIHNoaWZ0CisJICAgIHJlZj0kMQorCSAgICAjIEZJWE1FOiBJdCBzaG91bGQgcmV0dXJuIHRoZSB0cmFja2luZyBicmFuY2gKKwkgICAgIyAgICAgICAgQ3VycmVudGx5IG9ubHkgd29ya3Mgd2l0aCB0aGUgZGVmYXVsdCBtYXBwaW5nCisJICAgIGNhc2UgIiRyZWYiIGluCisJICAgICsqKQorCQlyZWY9JChleHByICJ6JHJlZiIgOiAneitcKC4qXCknKQorCQk7OworCSAgICBlc2FjCisJICAgIGV4cHIgInokcmVmIiA6ICd6Lio6JyA+L2Rldi9udWxsIHx8IHJlZj0iJHtyZWZ9OiIKKwkgICAgcmVtb3RlPSQoZXhwciAieiRyZWYiIDogJ3pcKFteOl0qXCk6JykKKwkgICAgY2FzZSAiJHJlbW90ZSIgaW4KKwkgICAgJycgfCBIRUFEICkgcmVtb3RlPUhFQUQgOzsKKwkgICAgaGVhZHMvKikgcmVtb3RlPSR7cmVtb3RlI2hlYWRzL30gOzsKKwkgICAgcmVmcy9oZWFkcy8qKSByZW1vdGU9JHtyZW1vdGUjcmVmcy9oZWFkcy99IDs7CisJICAgIHJlZnMvKiB8IHRhZ3MvKiB8IHJlbW90ZXMvKiApIHJlbW90ZT0KKwkgICAgZXNhYworCSAgICBbIC1uICIkcmVtb3RlIiBdICYmIGNhc2UgIiRyZXBvIiBpbgorCQkuKQorCQkgICAgZWNobyAicmVmcy9oZWFkcy8kcmVtb3RlIgorCQkgICAgOzsKKwkJKikKKwkJICAgIGVjaG8gInJlZnMvcmVtb3Rlcy8kcmVwby8kcmVtb3RlIgorCQkgICAgOzsKKwkgICAgZXNhYworCWVzYWMKK30KKworZXJyb3Jfb25fbWlzc2luZ19kZWZhdWx0X3Vwc3RyZWFtICgpIHsKKwljbWQ9IiQxIgorCW9wX3R5cGU9IiQyIgorCW9wX3ByZXA9IiQzIiAjIEZJWE1FOiBvcF9wcmVwIGlzIG5vIGxvbmdlciB1c2VkCisJZXhhbXBsZT0iJDQiCisJYnJhbmNoX25hbWU9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpCisJZGlzcGxheV9icmFuY2hfbmFtZT0iJHticmFuY2hfbmFtZSNyZWZzL2hlYWRzL30iCisJIyBJZiB0aGVyZSdzIG9ubHkgb25lIHJlbW90ZSwgdXNlIHRoYXQgaW4gdGhlIHN1Z2dlc3Rpb24KKwlyZW1vdGU9IiQoZ2V0dGV4dCAiPHJlbW90ZT4iKSIKKwlicmFuY2g9IiQoZ2V0dGV4dCAiPGJyYW5jaD4iKSIKKwlpZiB0ZXN0ICQoZ2l0IHJlbW90ZSB8IHdjIC1sKSA9IDEKKwl0aGVuCisJCXJlbW90ZT0kKGdpdCByZW1vdGUpCisJZmkKKworCWlmIHRlc3QgLXogIiRicmFuY2hfbmFtZSIKKwl0aGVuCisJCWdldHRleHRsbiAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKKwllbHNlCisJCWdldHRleHRsbiAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCisJZmkKKwljYXNlICIkb3BfdHlwZSIgaW4KKwlyZWJhc2UpCisJCWdldHRleHRsbiAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKKwkJOzsKKwltZXJnZSkKKwkJZ2V0dGV4dGxuICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCisJCTs7CisJKikKKwkJZWNobyA+JjIgIkJVRzogdW5rbm93biBvcGVyYXRpb24gdHlwZTogJG9wX3R5cGUiCisJCWV4aXQgMQorCQk7OworCWVzYWMKKwlldmFsX2dldHRleHRsbiAiU2VlIGdpdC1cJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKKwllY2hvCisJZWNobyAiICAgICRleGFtcGxlIgorCWVjaG8KKwlpZiB0ZXN0IC1uICIkYnJhbmNoX25hbWUiCisJdGhlbgorCQlnZXR0ZXh0bG4gIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKKwkJZWNobworCQllY2hvICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0kcmVtb3RlLyRicmFuY2ggJGRpc3BsYXlfYnJhbmNoX25hbWUiCisJCWVjaG8KKwlmaQorCWV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvZ2l0LXF1aWx0aW1wb3J0LnNoIGIvZ2l0LXF1aWx0aW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzZDM5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcXVpbHRpbXBvcnQuc2gKQEAgLTAsMCArMSwxNTUgQEAKKyMhL2Jpbi9zaAorT1BUSU9OU19LRUVQREFTSERBU0g9CitPUFRJT05TX1NUVUNLTE9ORz0KK09QVElPTlNfU1BFQz0iXAorZ2l0IHF1aWx0aW1wb3J0IFtvcHRpb25zXQorLS0KK24sZHJ5LXJ1biAgICAgZHJ5IHJ1bgorYXV0aG9yPSAgICAgICBhdXRob3IgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyBmb3IgcGF0Y2hlcyB3aXRob3V0IGFueQorcGF0Y2hlcz0gICAgICBwYXRoIHRvIHRoZSBxdWlsdCBwYXRjaGVzCitzZXJpZXM9ICAgICAgIHBhdGggdG8gdGhlIHF1aWx0IHNlcmllcyBmaWxlCitrZWVwLW5vbi1wYXRjaCBQYXNzIC1iIHRvIGdpdCBtYWlsaW5mbworIgorU1VCRElSRUNUT1JZX09OPVllcworLiBnaXQtc2gtc2V0dXAKKworZHJ5X3J1bj0iIgorcXVpbHRfYXV0aG9yPSIiCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLS1hdXRob3IpCisJCXNoaWZ0CisJCXF1aWx0X2F1dGhvcj0iJDEiCisJCTs7CisJLW58LS1kcnktcnVuKQorCQlkcnlfcnVuPTEKKwkJOzsKKwktLXBhdGNoZXMpCisJCXNoaWZ0CisJCVFVSUxUX1BBVENIRVM9IiQxIgorCQk7OworCS0tc2VyaWVzKQorCQlzaGlmdAorCQlRVUlMVF9TRVJJRVM9IiQxIgorCQk7OworCS0ta2VlcC1ub24tcGF0Y2gpCisJCU1BSUxJTkZPX09QVD0iLWIiCisJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrOzsKKwkqKQorCQl1c2FnZQorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCisjIFF1aWx0IEF1dGhvcgoraWYgWyAtbiAiJHF1aWx0X2F1dGhvciIgXSA7IHRoZW4KKwlxdWlsdF9hdXRob3JfbmFtZT0kKGV4cHIgInokcXVpbHRfYXV0aG9yIiA6ICd6XCguKlteIF1cKSAqPC4qJykgJiYKKwlxdWlsdF9hdXRob3JfZW1haWw9JChleHByICJ6JHF1aWx0X2F1dGhvciIgOiAnLio8XChbXj5dKlwpJykgJiYKKwl0ZXN0ICcnICE9ICIkcXVpbHRfYXV0aG9yX25hbWUiICYmCisJdGVzdCAnJyAhPSAiJHF1aWx0X2F1dGhvcl9lbWFpbCIgfHwKKwlkaWUgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCitmaQorCisjIFF1aWx0IHBhdGNoIGRpcmVjdG9yeQorOiAke1FVSUxUX1BBVENIRVM6PXBhdGNoZXN9CitpZiAhIFsgLWQgIiRRVUlMVF9QQVRDSEVTIiBdIDsgdGhlbgorCWVjaG8gIlRoZSBcIiRRVUlMVF9QQVRDSEVTXCIgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiIKKwlleGl0IDEKK2ZpCisKKyMgUXVpbHQgc2VyaWVzIGZpbGUKKzogJHtRVUlMVF9TRVJJRVM6PSRRVUlMVF9QQVRDSEVTL3Nlcmllc30KK2lmICEgWyAtZSAiJFFVSUxUX1NFUklFUyIgXSA7IHRoZW4KKwllY2hvICJUaGUgXCIkUVVJTFRfU0VSSUVTXCIgZmlsZSBkb2VzIG5vdCBleGlzdC4iCisJZXhpdCAxCitmaQorCisjIFRlbXBvcmFyeSBkaXJlY3RvcmllcwordG1wX2Rpcj0iJEdJVF9ESVIiL3JlYmFzZS1hcHBseQordG1wX21zZz0iJHRtcF9kaXIvbXNnIgordG1wX3BhdGNoPSIkdG1wX2Rpci9wYXRjaCIKK3RtcF9pbmZvPSIkdG1wX2Rpci9pbmZvIgorCisKKyMgRmluZCB0aGUgaW5pdGlhbCBjb21taXQKK2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKworbWtkaXIgJHRtcF9kaXIgfHwgZXhpdCAyCit3aGlsZSByZWFkIHBhdGNoX25hbWUgbGV2ZWwgZ2FyYmFnZSA8JjMKK2RvCisJY2FzZSAiJHBhdGNoX25hbWUiIGluICcnfCcjJyopIGNvbnRpbnVlOzsgZXNhYworCWNhc2UgIiRsZXZlbCIgaW4KKwktcCopCTs7CisJJyd8JyMnKikKKwkJbGV2ZWw9OzsKKwkqKQorCQllY2hvICJ1bmFibGUgdG8gcGFyc2UgcGF0Y2ggbGV2ZWwsIGlnbm9yaW5nIGl0LiIKKwkJbGV2ZWw9OzsKKwllc2FjCisJY2FzZSAiJGdhcmJhZ2UiIGluCisJJyd8JyMnKik7OworCSopCisJCWVjaG8gInRyYWlsaW5nIGdhcmJhZ2UgZm91bmQgaW4gc2VyaWVzIGZpbGU6ICRnYXJiYWdlIgorCQlleGl0IDE7OworCWVzYWMKKwlpZiAhIFsgLWYgIiRRVUlMVF9QQVRDSEVTLyRwYXRjaF9uYW1lIiBdIDsgdGhlbgorCQllY2hvICIkcGF0Y2hfbmFtZSBkb2Vzbid0IGV4aXN0LiBTa2lwcGluZy4iCisJCWNvbnRpbnVlCisJZmkKKwllY2hvICRwYXRjaF9uYW1lCisJZ2l0IG1haWxpbmZvICRNQUlMSU5GT19PUFQgIiR0bXBfbXNnIiAiJHRtcF9wYXRjaCIgXAorCQk8IiRRVUlMVF9QQVRDSEVTLyRwYXRjaF9uYW1lIiA+IiR0bXBfaW5mbyIgfHwgZXhpdCAzCisJdGVzdCAtcyAiJHRtcF9wYXRjaCIgfHwgeworCQllY2hvICJQYXRjaCBpcyBlbXB0eS4gIFdhcyBpdCBzcGxpdCB3cm9uZz8iCisJCWV4aXQgMQorCX0KKworCSMgUGFyc2UgdGhlIGF1dGhvciBpbmZvcm1hdGlvbgorCUdJVF9BVVRIT1JfTkFNRT0kKHNlZCAtbmUgJ3MvQXV0aG9yOiAvL3AnICIkdG1wX2luZm8iKQorCUdJVF9BVVRIT1JfRU1BSUw9JChzZWQgLW5lICdzL0VtYWlsOiAvL3AnICIkdG1wX2luZm8iKQorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTAorCXdoaWxlIHRlc3QgLXogIiRHSVRfQVVUSE9SX0VNQUlMIiAmJiB0ZXN0IC16ICIkR0lUX0FVVEhPUl9OQU1FIiA7IGRvCisJCWlmIFsgLW4gIiRxdWlsdF9hdXRob3IiIF0gOyB0aGVuCisJCQlHSVRfQVVUSE9SX05BTUU9IiRxdWlsdF9hdXRob3JfbmFtZSI7CisJCQlHSVRfQVVUSE9SX0VNQUlMPSIkcXVpbHRfYXV0aG9yX2VtYWlsIjsKKwkJZWxpZiBbIC1uICIkZHJ5X3J1biIgXTsgdGhlbgorCQkJZWNobyAiTm8gYXV0aG9yIGZvdW5kIGluICRwYXRjaF9uYW1lIiA+JjI7CisJCQlHSVRfQVVUSE9SX05BTUU9ImRyeS1ydW4tbm90LWZvdW5kIjsKKwkJCUdJVF9BVVRIT1JfRU1BSUw9ImRyeS1ydW4tbm90LWZvdW5kIjsKKwkJZWxzZQorCQkJZWNobyAiTm8gYXV0aG9yIGZvdW5kIGluICRwYXRjaF9uYW1lIiA+JjI7CisJCQllY2hvICItLS0iCisJCQljYXQgJHRtcF9tc2cKKwkJCXByaW50ZiAiQXV0aG9yOiAiOworCQkJcmVhZCBwYXRjaF9hdXRob3IKKworCQkJZWNobyAiJHBhdGNoX2F1dGhvciIKKworCQkJcGF0Y2hfYXV0aG9yX25hbWU9JChleHByICJ6JHBhdGNoX2F1dGhvciIgOiAnelwoLipbXiBdXCkgKjwuKicpICYmCisJCQlwYXRjaF9hdXRob3JfZW1haWw9JChleHByICJ6JHBhdGNoX2F1dGhvciIgOiAnLio8XChbXj5dKlwpJykgJiYKKwkJCXRlc3QgJycgIT0gIiRwYXRjaF9hdXRob3JfbmFtZSIgJiYKKwkJCXRlc3QgJycgIT0gIiRwYXRjaF9hdXRob3JfZW1haWwiICYmCisJCQlHSVRfQVVUSE9SX05BTUU9IiRwYXRjaF9hdXRob3JfbmFtZSIgJiYKKwkJCUdJVF9BVVRIT1JfRU1BSUw9IiRwYXRjaF9hdXRob3JfZW1haWwiCisJCWZpCisJZG9uZQorCUdJVF9BVVRIT1JfREFURT0kKHNlZCAtbmUgJ3MvRGF0ZTogLy9wJyAiJHRtcF9pbmZvIikKKwlTVUJKRUNUPSQoc2VkIC1uZSAncy9TdWJqZWN0OiAvL3AnICIkdG1wX2luZm8iKQorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgU1VCSkVDVAorCWlmIFsgLXogIiRTVUJKRUNUIiBdIDsgdGhlbgorCQlTVUJKRUNUPSQoZWNobyAkcGF0Y2hfbmFtZSB8IHNlZCAtZSAncy8ucGF0Y2gkLy8nKQorCWZpCisKKwlpZiBbIC16ICIkZHJ5X3J1biIgXSA7IHRoZW4KKwkJZ2l0IGFwcGx5IC0taW5kZXggLUMxICR7bGV2ZWw6KyIkbGV2ZWwifSAiJHRtcF9wYXRjaCIgJiYKKwkJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCQljb21taXQ9JCggKGVjaG8gIiRTVUJKRUNUIjsgZWNobzsgY2F0ICIkdG1wX21zZyIpIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1wICRjb21taXQpICYmCisJCWdpdCB1cGRhdGUtcmVmIC1tICJxdWlsdGltcG9ydDogJHBhdGNoX25hbWUiIEhFQUQgJGNvbW1pdCB8fCBleGl0IDQKKwlmaQorZG9uZSAzPCIkUVVJTFRfU0VSSUVTIgorcm0gLXJmICR0bXBfZGlyIHx8IGV4aXQgNQpkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoIGIvZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzkwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2gKQEAgLTAsMCArMSwxMDY3IEBACisjIFRoaXMgc2hlbGwgc2NyaXB0IGZyYWdtZW50IGlzIHNvdXJjZWQgYnkgZ2l0LXJlYmFzZSB0byBpbXBsZW1lbnQgaXRzCisjIHByZXNlcnZlLW1lcmdlcyBtb2RlLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworIyBUaGUgZmlsZSBjb250YWluaW5nIHJlYmFzZSBjb21tYW5kcywgY29tbWVudHMsIGFuZCBlbXB0eSBsaW5lcy4KKyMgVGhpcyBmaWxlIGlzIGNyZWF0ZWQgYnkgImdpdCByZWJhc2UgLWkiIHRoZW4gZWRpdGVkIGJ5IHRoZSB1c2VyLiAgQXMKKyMgdGhlIGxpbmVzIGFyZSBwcm9jZXNzZWQsIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZnJvbnQgb2YgdGhpcworIyBmaWxlIGFuZCB3cml0dGVuIHRvIHRoZSB0YWlsIG9mICRkb25lLgordG9kbz0iJHN0YXRlX2RpciIvZ2l0LXJlYmFzZS10b2RvCisKKyMgVGhlIHJlYmFzZSBjb21tYW5kIGxpbmVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLiAgQSBsaW5lCisjIGlzIG1vdmVkIGhlcmUgd2hlbiBpdCBpcyBmaXJzdCBoYW5kbGVkLCBiZWZvcmUgYW55IGFzc29jaWF0ZWQgdXNlcgorIyBhY3Rpb25zLgorZG9uZT0iJHN0YXRlX2RpciIvZG9uZQorCisjIFRoZSBjb21taXQgbWVzc2FnZSB0aGF0IGlzIHBsYW5uZWQgdG8gYmUgdXNlZCBmb3IgYW55IGNoYW5nZXMgdGhhdAorIyBuZWVkIHRvIGJlIGNvbW1pdHRlZCBmb2xsb3dpbmcgYSB1c2VyIGludGVyYWN0aW9uLgorbXNnPSIkc3RhdGVfZGlyIi9tZXNzYWdlCisKKyMgVGhlIGZpbGUgaW50byB3aGljaCBpcyBhY2N1bXVsYXRlZCB0aGUgc3VnZ2VzdGVkIGNvbW1pdCBtZXNzYWdlIGZvcgorIyBzcXVhc2gvZml4dXAgY29tbWFuZHMuICBXaGVuIHRoZSBmaXJzdCBvZiBhIHNlcmllcyBvZiBzcXVhc2gvZml4dXBzCisjIGlzIHNlZW4sIHRoZSBmaWxlIGlzIGNyZWF0ZWQgYW5kIHRoZSBjb21taXQgbWVzc2FnZSBmcm9tIHRoZQorIyBwcmV2aW91cyBjb21taXQgYW5kIGZyb20gdGhlIGZpcnN0IHNxdWFzaC9maXh1cCBjb21taXQgYXJlIHdyaXR0ZW4KKyMgdG8gaXQuICBUaGUgY29tbWl0IG1lc3NhZ2UgZm9yIGVhY2ggc3Vic2VxdWVudCBzcXVhc2gvZml4dXAgY29tbWl0CisjIGlzIGFwcGVuZGVkIHRvIHRoZSBmaWxlIGFzIGl0IGlzIHByb2Nlc3NlZC4KKyMKKyMgVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUgaXMgb2YgdGhlIGZvcm0KKyMgICAgICMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLgorIyB3aGVyZSAkY291bnQgaXMgdGhlIG51bWJlciBvZiBjb21taXRzIHdob3NlIG1lc3NhZ2VzIGhhdmUgYmVlbgorIyB3cml0dGVuIHRvIHRoZSBmaWxlIHNvIGZhciAoaW5jbHVkaW5nIHRoZSBpbml0aWFsICJwaWNrIiBjb21taXQpLgorIyBFYWNoIHRpbWUgdGhhdCBhIGNvbW1pdCBtZXNzYWdlIGlzIHByb2Nlc3NlZCwgdGhpcyBsaW5lIGlzIHJlYWQgYW5kCisjIHVwZGF0ZWQuICBJdCBpcyBkZWxldGVkIGp1c3QgYmVmb3JlIHRoZSBjb21iaW5lZCBjb21taXQgaXMgbWFkZS4KK3NxdWFzaF9tc2c9IiRzdGF0ZV9kaXIiL21lc3NhZ2Utc3F1YXNoCisKKyMgSWYgdGhlIGN1cnJlbnQgc2VyaWVzIG9mIHNxdWFzaC9maXh1cHMgaGFzIG5vdCB5ZXQgaW5jbHVkZWQgYSBzcXVhc2gKKyMgY29tbWFuZCwgdGhlbiB0aGlzIGZpbGUgZXhpc3RzIGFuZCBob2xkcyB0aGUgY29tbWl0IG1lc3NhZ2Ugb2YgdGhlCisjIG9yaWdpbmFsICJwaWNrIiBjb21taXQuICAoSWYgdGhlIHNlcmllcyBlbmRzIHdpdGhvdXQgYSAic3F1YXNoIgorIyBjb21tYW5kLCB0aGVuIHRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIHRoZSBjb21iaW5lZAorIyBjb21taXQgd2l0aG91dCBvcGVuaW5nIHRoZSBlZGl0b3IuKQorZml4dXBfbXNnPSIkc3RhdGVfZGlyIi9tZXNzYWdlLWZpeHVwCisKKyMgJHJld3JpdHRlbiBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSBjb250YWluaW5nIGZpbGVzIGZvciBlYWNoCisjIGNvbW1pdCB0aGF0IGlzIHJlYWNoYWJsZSBieSBhdCBsZWFzdCBvbmUgbWVyZ2UgYmFzZSBvZiAkaGVhZCBhbmQKKyMgJHVwc3RyZWFtLiBUaGV5IGFyZSBub3QgbmVjZXNzYXJpbHkgcmV3cml0dGVuLCBidXQgdGhlaXIgY2hpbGRyZW4KKyMgbWlnaHQgYmUuICBUaGlzIGVuc3VyZXMgdGhhdCBjb21taXRzIG9uIG1lcmdlZCwgYnV0IG90aGVyd2lzZQorIyB1bnJlbGF0ZWQgc2lkZSBicmFuY2hlcyBhcmUgbGVmdCBhbG9uZS4gKFRoaW5rICJYIiBpbiB0aGUgbWFuIHBhZ2UncworIyBleGFtcGxlLikKK3Jld3JpdHRlbj0iJHN0YXRlX2RpciIvcmV3cml0dGVuCisKK2Ryb3BwZWQ9IiRzdGF0ZV9kaXIiL2Ryb3BwZWQKKworZW5kPSIkc3RhdGVfZGlyIi9lbmQKK21zZ251bT0iJHN0YXRlX2RpciIvbXNnbnVtCisKKyMgQSBzY3JpcHQgdG8gc2V0IHRoZSBHSVRfQVVUSE9SX05BTUUsIEdJVF9BVVRIT1JfRU1BSUwsIGFuZAorIyBHSVRfQVVUSE9SX0RBVEUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBjb21taXQgdGhhdCBpcyBjdXJyZW50bHkKKyMgYmVpbmcgcmViYXNlZC4KK2F1dGhvcl9zY3JpcHQ9IiRzdGF0ZV9kaXIiL2F1dGhvci1zY3JpcHQKKworIyBXaGVuIGFuICJlZGl0IiByZWJhc2UgY29tbWFuZCBpcyBiZWluZyBwcm9jZXNzZWQsIHRoZSBTSEExIG9mIHRoZQorIyBjb21taXQgdG8gYmUgZWRpdGVkIGlzIHJlY29yZGVkIGluIHRoaXMgZmlsZS4gIFdoZW4gImdpdCByZWJhc2UKKyMgLS1jb250aW51ZSIgaXMgZXhlY3V0ZWQsIGlmIHRoZXJlIGFyZSBhbnkgc3RhZ2VkIGNoYW5nZXMgdGhlbiB0aGV5CisjIHdpbGwgYmUgYW1lbmRlZCB0byB0aGUgSEVBRCBjb21taXQsIGJ1dCBvbmx5IHByb3ZpZGVkIHRoZSBIRUFECisjIGNvbW1pdCBpcyBzdGlsbCB0aGUgY29tbWl0IHRvIGJlIGVkaXRlZC4gIFdoZW4gYW55IG90aGVyIHJlYmFzZQorIyBjb21tYW5kIGlzIHByb2Nlc3NlZCwgdGhpcyBmaWxlIGlzIGRlbGV0ZWQuCithbWVuZD0iJHN0YXRlX2RpciIvYW1lbmQKKworIyBGb3IgdGhlIHBvc3QtcmV3cml0ZSBob29rLCB3ZSBtYWtlIGEgbGlzdCBvZiByZXdyaXR0ZW4gY29tbWl0cyBhbmQKKyMgdGhlaXIgbmV3IHNoYTFzLiAgVGhlIHJld3JpdHRlbi1wZW5kaW5nIGxpc3Qga2VlcHMgdGhlIHNoYTFzIG9mCisjIGNvbW1pdHMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBidXQgbm90IGNvbW1pdHRlZCB5ZXQsCisjIGUuZy4gYmVjYXVzZSB0aGV5IGFyZSB3YWl0aW5nIGZvciBhICdzcXVhc2gnIGNvbW1hbmQuCityZXdyaXR0ZW5fbGlzdD0iJHN0YXRlX2RpciIvcmV3cml0dGVuLWxpc3QKK3Jld3JpdHRlbl9wZW5kaW5nPSIkc3RhdGVfZGlyIi9yZXdyaXR0ZW4tcGVuZGluZworCisjIFdvcmsgYXJvdW5kIEdpdCBmb3IgV2luZG93cycgQmFzaCB3aG9zZSAicmVhZCIgZG9lcyBub3Qgc3RyaXAgQ1JMRgorIyBhbmQgbGVhdmVzIENSIGF0IHRoZSBlbmQgaW5zdGVhZC4KK2NyPSQocHJpbnRmICJcMDE1IikKKworcmVzb2x2ZW1zZz0iCiskKGdldHRleHQgJ1Jlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGgKKyJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPiIsIHRoZW4gcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiLgorWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biAiZ2l0IHJlYmFzZSAtLXNraXAiLgorVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgImdpdCByZWJhc2UiLCBydW4gImdpdCByZWJhc2UgLS1hYm9ydCIuJykKKyIKKword3JpdGVfYmFzaWNfc3RhdGUgKCkgeworCWVjaG8gIiRoZWFkX25hbWUiID4gIiRzdGF0ZV9kaXIiL2hlYWQtbmFtZSAmJgorCWVjaG8gIiRvbnRvIiA+ICIkc3RhdGVfZGlyIi9vbnRvICYmCisJZWNobyAiJG9yaWdfaGVhZCIgPiAiJHN0YXRlX2RpciIvb3JpZy1oZWFkICYmCisJdGVzdCB0ID0gIiRHSVRfUVVJRVQiICYmIDogPiAiJHN0YXRlX2RpciIvcXVpZXQKKwl0ZXN0IHQgPSAiJHZlcmJvc2UiICYmIDogPiAiJHN0YXRlX2RpciIvdmVyYm9zZQorCXRlc3QgLW4gIiRzdHJhdGVneSIgJiYgZWNobyAiJHN0cmF0ZWd5IiA+ICIkc3RhdGVfZGlyIi9zdHJhdGVneQorCXRlc3QgLW4gIiRzdHJhdGVneV9vcHRzIiAmJiBlY2hvICIkc3RyYXRlZ3lfb3B0cyIgPiBcCisJCSIkc3RhdGVfZGlyIi9zdHJhdGVneV9vcHRzCisJdGVzdCAtbiAiJGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlIiAmJiBlY2hvICIkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUiID4gXAorCQkiJHN0YXRlX2RpciIvYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUKKwl0ZXN0IC1uICIkZ3BnX3NpZ25fb3B0IiAmJiBlY2hvICIkZ3BnX3NpZ25fb3B0IiA+ICIkc3RhdGVfZGlyIi9ncGdfc2lnbl9vcHQKKwl0ZXN0IC1uICIkc2lnbm9mZiIgJiYgZWNobyAiJHNpZ25vZmYiID4iJHN0YXRlX2RpciIvc2lnbm9mZgorCXRlc3QgLW4gIiRyZXNjaGVkdWxlX2ZhaWxlZF9leGVjIiAmJiA6ID4gIiRzdGF0ZV9kaXIiL3Jlc2NoZWR1bGUtZmFpbGVkLWV4ZWMKK30KKworYXBwbHlfYXV0b3N0YXNoICgpIHsKKwlpZiB0ZXN0IC1mICIkc3RhdGVfZGlyL2F1dG9zdGFzaCIKKwl0aGVuCisJCXN0YXNoX3NoYTE9JChjYXQgIiRzdGF0ZV9kaXIvYXV0b3N0YXNoIikKKwkJaWYgZ2l0IHN0YXNoIGFwcGx5ICRzdGFzaF9zaGExID4vZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQllY2hvICIkKGdldHRleHQgJ0FwcGxpZWQgYXV0b3N0YXNoLicpIiA+JjIKKwkJZWxzZQorCQkJZ2l0IHN0YXNoIHN0b3JlIC1tICJhdXRvc3Rhc2giIC1xICRzdGFzaF9zaGExIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDYW5ub3Qgc3RvcmUgXCRzdGFzaF9zaGExIikiCisJCQlnZXR0ZXh0ICdBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLgorWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC4KK1lvdSBjYW4gcnVuICJnaXQgc3Rhc2ggcG9wIiBvciAiZ2l0IHN0YXNoIGRyb3AiIGF0IGFueSB0aW1lLgorJyA+JjIKKwkJZmkKKwlmaQorfQorCitvdXRwdXQgKCkgeworCWNhc2UgIiR2ZXJib3NlIiBpbgorCScnKQorCQlvdXRwdXQ9JCgiJEAiIDI+JjEgKQorCQlzdGF0dXM9JD8KKwkJdGVzdCAkc3RhdHVzICE9IDAgJiYgcHJpbnRmICIlc1xuIiAiJG91dHB1dCIKKwkJcmV0dXJuICRzdGF0dXMKKwkJOzsKKwkqKQorCQkiJEAiCisJCTs7CisJZXNhYworfQorCitzdHJhdGVneV9hcmdzPSR7c3RyYXRlZ3k6Ky0tc3RyYXRlZ3k9JHN0cmF0ZWd5fQordGVzdCAtbiAiJHN0cmF0ZWd5X29wdHMiICYmCitldmFsICcKKwlmb3Igc3RyYXRlZ3lfb3B0IGluICciJHN0cmF0ZWd5X29wdHMiJworCWRvCisJCXN0cmF0ZWd5X2FyZ3M9IiRzdHJhdGVneV9hcmdzIC1YJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiR7c3RyYXRlZ3lfb3B0Iy0tfSIpIgorCWRvbmUKKycKKworR0lUX0NIRVJSWV9QSUNLX0hFTFA9IiRyZXNvbHZlbXNnIgorZXhwb3J0IEdJVF9DSEVSUllfUElDS19IRUxQCisKK2NvbW1lbnRfY2hhcj0kKGdpdCBjb25maWcgLS1nZXQgY29yZS5jb21tZW50Y2hhciAyPi9kZXYvbnVsbCkKK2Nhc2UgIiRjb21tZW50X2NoYXIiIGluCisnJyB8IGF1dG8pCisJY29tbWVudF9jaGFyPSIjIgorCTs7Cis/KQorCTs7CisqKQorCWNvbW1lbnRfY2hhcj0kKGVjaG8gIiRjb21tZW50X2NoYXIiIHwgY3V0IC1jMSkKKwk7OworZXNhYworCit3YXJuICgpIHsKKwlwcmludGYgJyVzXG4nICIkKiIgPiYyCit9CisKKyMgT3V0cHV0IHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIHNwZWNpZmllZCBjb21taXQuCitjb21taXRfbWVzc2FnZSAoKSB7CisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiIHwgc2VkICIxLC9eJC9kIgorfQorCitvcmlnX3JlZmxvZ19hY3Rpb249IiRHSVRfUkVGTE9HX0FDVElPTiIKKworY29tbWVudF9mb3JfcmVmbG9nICgpIHsKKwljYXNlICIkb3JpZ19yZWZsb2dfYWN0aW9uIiBpbgorCScnfHJlYmFzZSopCisJCUdJVF9SRUZMT0dfQUNUSU9OPSJyZWJhc2UgLWkgKCQxKSIKKwkJZXhwb3J0IEdJVF9SRUZMT0dfQUNUSU9OCisJCTs7CisJZXNhYworfQorCitsYXN0X2NvdW50PQorbWFya19hY3Rpb25fZG9uZSAoKSB7CisJc2VkIC1lIDFxIDwgIiR0b2RvIiA+PiAiJGRvbmUiCisJc2VkIC1lIDFkIDwgIiR0b2RvIiA+PiAiJHRvZG8iLm5ldworCW12IC1mICIkdG9kbyIubmV3ICIkdG9kbyIKKwluZXdfY291bnQ9JCgoICQoZ2l0IHN0cmlwc3BhY2UgLS1zdHJpcC1jb21tZW50cyA8IiRkb25lIiB8IHdjIC1sKSApKQorCWVjaG8gJG5ld19jb3VudCA+IiRtc2dudW0iCisJdG90YWw9JCgoJG5ld19jb3VudCArICQoZ2l0IHN0cmlwc3BhY2UgLS1zdHJpcC1jb21tZW50cyA8IiR0b2RvIiB8IHdjIC1sKSkpCisJZWNobyAkdG90YWwgPiIkZW5kIgorCWlmIHRlc3QgIiRsYXN0X2NvdW50IiAhPSAiJG5ld19jb3VudCIKKwl0aGVuCisJCWxhc3RfY291bnQ9JG5ld19jb3VudAorCQlldmFsX2dldHRleHQgIlJlYmFzaW5nIChcJG5ld19jb3VudC9cJHRvdGFsKSI7IHByaW50ZiAiXHIiCisJCXRlc3QgLXogIiR2ZXJib3NlIiB8fCBlY2hvCisJZmkKK30KKworIyBQdXQgdGhlIGxhc3QgYWN0aW9uIG1hcmtlZCBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRvZG8gbGlzdAorIyBhZ2Fpbi4gSWYgdGhlcmUgaGFzIG5vdCBiZWVuIGFuIGFjdGlvbiBtYXJrZWQgZG9uZSB5ZXQsIGxlYXZlIHRoZSBsaXN0IG9mCisjIGl0ZW1zIG9uIHRoZSB0b2RvIGxpc3QgdW5jaGFuZ2VkLgorcmVzY2hlZHVsZV9sYXN0X2FjdGlvbiAoKSB7CisJdGFpbCAtbiAxICIkZG9uZSIgfCBjYXQgLSAiJHRvZG8iID4iJHRvZG8iLm5ldworCXNlZCAtZSBcJGQgPCIkZG9uZSIgPiIkZG9uZSIubmV3CisJbXYgLWYgIiR0b2RvIi5uZXcgIiR0b2RvIgorCW12IC1mICIkZG9uZSIubmV3ICIkZG9uZSIKK30KKworYXBwZW5kX3RvZG9faGVscCAoKSB7CisJZ2V0dGV4dCAiCitDb21tYW5kczoKK3AsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0CityLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UKK2UsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmcKK3MsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0CitmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZQoreCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGwKK2QsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0CitsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lCit0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsCittLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dCisuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3MKKy4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXMKKy4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuCisKK1RoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uCisiIHwgZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzID4+IiR0b2RvIgorCisJaWYgdGVzdCAkKGdldF9taXNzaW5nX2NvbW1pdF9jaGVja19sZXZlbCkgPSBlcnJvcgorCXRoZW4KKwkJZ2V0dGV4dCAiCitEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LgorIiB8IGdpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyA+PiIkdG9kbyIKKwllbHNlCisJCWdldHRleHQgIgorSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuCisiIHwgZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzID4+IiR0b2RvIgorCWZpCit9CisKK21ha2VfcGF0Y2ggKCkgeworCXNoYTFfYW5kX3BhcmVudHM9IiQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAiJDEiKSIKKwljYXNlICIkc2hhMV9hbmRfcGFyZW50cyIgaW4KKwk/KicgJz8qJyAnPyopCisJCWdpdCBkaWZmIC0tY2MgJHNoYTFfYW5kX3BhcmVudHMKKwkJOzsKKwk/KicgJz8qKQorCQlnaXQgZGlmZi10cmVlIC1wICIkMV4hIgorCQk7OworCSopCisJCWVjaG8gIlJvb3QgY29tbWl0IgorCQk7OworCWVzYWMgPiAiJHN0YXRlX2RpciIvcGF0Y2gKKwl0ZXN0IC1mICIkbXNnIiB8fAorCQljb21taXRfbWVzc2FnZSAiJDEiID4gIiRtc2ciCisJdGVzdCAtZiAiJGF1dGhvcl9zY3JpcHQiIHx8CisJCWdldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgIiQxIiA+ICIkYXV0aG9yX3NjcmlwdCIKK30KKworZGllX3dpdGhfcGF0Y2ggKCkgeworCWVjaG8gIiQxIiA+ICIkc3RhdGVfZGlyIi9zdG9wcGVkLXNoYQorCWdpdCB1cGRhdGUtcmVmIFJFQkFTRV9IRUFEICIkMSIKKwltYWtlX3BhdGNoICIkMSIKKwlkaWUgIiQyIgorfQorCitleGl0X3dpdGhfcGF0Y2ggKCkgeworCWVjaG8gIiQxIiA+ICIkc3RhdGVfZGlyIi9zdG9wcGVkLXNoYQorCWdpdCB1cGRhdGUtcmVmIFJFQkFTRV9IRUFEICIkMSIKKwltYWtlX3BhdGNoICQxCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4gIiRhbWVuZCIKKwlncGdfc2lnbl9vcHRfcXVvdGVkPSR7Z3BnX3NpZ25fb3B0OiskKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGdwZ19zaWduX29wdCIpfQorCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJcCitZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoCisKKwlnaXQgY29tbWl0IC0tYW1lbmQgXCRncGdfc2lnbl9vcHRfcXVvdGVkCisKK09uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1bgorCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikiCisJd2FybgorCWV4aXQgJDIKK30KKworZGllX2Fib3J0ICgpIHsKKwlhcHBseV9hdXRvc3Rhc2gKKwlybSAtcmYgIiRzdGF0ZV9kaXIiCisJZGllICIkMSIKK30KKworaGFzX2FjdGlvbiAoKSB7CisJdGVzdCAtbiAiJChnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzIDwiJDEiKSIKK30KKworaXNfZW1wdHlfY29tbWl0KCkgeworCXRyZWU9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkMSJee3RyZWV9IDI+L2Rldi9udWxsKSB8fCB7CisJCXNoYTE9JDEKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiXCRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIikiCisJfQorCXB0cmVlPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJDEiXl57dHJlZX0gMj4vZGV2L251bGwpIHx8CisJCXB0cmVlPTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKKwl0ZXN0ICIkdHJlZSIgPSAiJHB0cmVlIgorfQorCitpc19tZXJnZV9jb21taXQoKQoreworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAiJDEiXjIgPi9kZXYvbnVsbCAyPiYxCit9CisKKyMgUnVuIGNvbW1hbmQgd2l0aCBHSVRfQVVUSE9SX05BTUUsIEdJVF9BVVRIT1JfRU1BSUwsIGFuZAorIyBHSVRfQVVUSE9SX0RBVEUgZXhwb3J0ZWQgZnJvbSB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4KK2RvX3dpdGhfYXV0aG9yICgpIHsKKwkoCisJCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQVVUSE9SX0RBVEUKKwkJIiRAIgorCSkKK30KKworZ2l0X3NlcXVlbmNlX2VkaXRvciAoKSB7CisJaWYgdGVzdCAteiAiJEdJVF9TRVFVRU5DRV9FRElUT1IiCisJdGhlbgorCQlHSVRfU0VRVUVOQ0VfRURJVE9SPSIkKGdpdCBjb25maWcgc2VxdWVuY2UuZWRpdG9yKSIKKwkJaWYgWyAteiAiJEdJVF9TRVFVRU5DRV9FRElUT1IiIF0KKwkJdGhlbgorCQkJR0lUX1NFUVVFTkNFX0VESVRPUj0iJChnaXQgdmFyIEdJVF9FRElUT1IpIiB8fCByZXR1cm4gJD8KKwkJZmkKKwlmaQorCisJZXZhbCAiJEdJVF9TRVFVRU5DRV9FRElUT1IiICciJEAiJworfQorCitwaWNrX29uZSAoKSB7CisJZmY9LS1mZgorCisJY2FzZSAiJDEiIGluIC1uKSBzaGExPSQyOyBmZj0gOzsgKikgc2hhMT0kMSA7OyBlc2FjCisJY2FzZSAiJGZvcmNlX3JlYmFzZSIgaW4gJycpIDs7ID8qKSBmZj0gOzsgZXNhYworCW91dHB1dCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRzaGExIHx8IGRpZSAiJChldmFsX2dldHRleHQgIkludmFsaWQgY29tbWl0IG5hbWU6IFwkc2hhMSIpIgorCisJaWYgaXNfZW1wdHlfY29tbWl0ICIkc2hhMSIKKwl0aGVuCisJCWVtcHR5X2FyZ3M9Ii0tYWxsb3ctZW1wdHkiCisJZmkKKworCXBpY2tfb25lX3ByZXNlcnZpbmdfbWVyZ2VzICIkQCIKK30KKworcGlja19vbmVfcHJlc2VydmluZ19tZXJnZXMgKCkgeworCWZhc3RfZm9yd2FyZD10CisJY2FzZSAiJDEiIGluCisJLW4pCisJCWZhc3RfZm9yd2FyZD1mCisJCXNoYTE9JDIKKwkJOzsKKwkqKQorCQlzaGExPSQxCisJCTs7CisJZXNhYworCXNoYTE9JChnaXQgcmV2LXBhcnNlICRzaGExKQorCisJaWYgdGVzdCAtZiAiJHN0YXRlX2RpciIvY3VycmVudC1jb21taXQgJiYgdGVzdCAiJGZhc3RfZm9yd2FyZCIgPSB0CisJdGhlbgorCQl3aGlsZSByZWFkIGN1cnJlbnRfY29tbWl0CisJCWRvCisJCQlnaXQgcmV2LXBhcnNlIEhFQUQgPiAiJHJld3JpdHRlbiIvJGN1cnJlbnRfY29tbWl0CisJCWRvbmUgPCIkc3RhdGVfZGlyIi9jdXJyZW50LWNvbW1pdAorCQlybSAiJHN0YXRlX2RpciIvY3VycmVudC1jb21taXQgfHwKKwkJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIikiCisJZmkKKworCWVjaG8gJHNoYTEgPj4gIiRzdGF0ZV9kaXIiL2N1cnJlbnQtY29tbWl0CisKKwkjIHJld3JpdGUgcGFyZW50czsgaWYgbm9uZSB3ZXJlIHJld3JpdHRlbiwgd2UgY2FuIGZhc3QtZm9yd2FyZC4KKwluZXdfcGFyZW50cz0KKwlwZW5kPSIgJChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0xICRzaGExIHwgY3V0IC1kJyAnIC1zIC1mMi0pIgorCWlmIHRlc3QgIiRwZW5kIiA9ICIgIgorCXRoZW4KKwkJcGVuZD0iIHJvb3QiCisJZmkKKwl3aGlsZSBbICIkcGVuZCIgIT0gIiIgXQorCWRvCisJCXA9JChleHByICIkcGVuZCIgOiAnIFwoW14gXSpcKScpCisJCXBlbmQ9IiR7cGVuZCMgJHB9IgorCisJCWlmIHRlc3QgLWYgIiRyZXdyaXR0ZW4iLyRwCisJCXRoZW4KKwkJCW5ld19wPSQoY2F0ICIkcmV3cml0dGVuIi8kcCkKKworCQkJIyBJZiB0aGUgdG9kbyByZW9yZGVyZWQgY29tbWl0cywgYW5kIG91ciBwYXJlbnQgaXMgbWFya2VkIGZvcgorCQkJIyByZXdyaXRpbmcsIGJ1dCBoYXNuJ3QgYmVlbiBnb3R0ZW4gdG8geWV0LCBhc3N1bWUgdGhlIHVzZXIgbWVhbnQgdG8KKwkJCSMgZHJvcCBpdCBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgSEVBRAorCQkJaWYgdGVzdCAteiAiJG5ld19wIgorCQkJdGhlbgorCQkJCW5ld19wPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCQkJZmkKKworCQkJdGVzdCAkcCAhPSAkbmV3X3AgJiYgZmFzdF9mb3J3YXJkPWYKKwkJCWNhc2UgIiRuZXdfcGFyZW50cyIgaW4KKwkJCSokbmV3X3AqKQorCQkJCTs7ICMgZG8gbm90aGluZzsgdGhhdCBwYXJlbnQgaXMgYWxyZWFkeSB0aGVyZQorCQkJKikKKwkJCQluZXdfcGFyZW50cz0iJG5ld19wYXJlbnRzICRuZXdfcCIKKwkJCQk7OworCQkJZXNhYworCQllbHNlCisJCQlpZiB0ZXN0IC1mICIkZHJvcHBlZCIvJHAKKwkJCXRoZW4KKwkJCQlmYXN0X2ZvcndhcmQ9ZgorCQkJCXJlcGxhY2VtZW50PSIkKGNhdCAiJGRyb3BwZWQiLyRwKSIKKwkJCQl0ZXN0IC16ICIkcmVwbGFjZW1lbnQiICYmIHJlcGxhY2VtZW50PXJvb3QKKwkJCQlwZW5kPSIgJHJlcGxhY2VtZW50JHBlbmQiCisJCQllbHNlCisJCQkJbmV3X3BhcmVudHM9IiRuZXdfcGFyZW50cyAkcCIKKwkJCWZpCisJCWZpCisJZG9uZQorCWNhc2UgJGZhc3RfZm9yd2FyZCBpbgorCXQpCisJCW91dHB1dCB3YXJuICIkKGV2YWxfZ2V0dGV4dCAiRmFzdC1mb3J3YXJkIHRvIFwkc2hhMSIpIgorCQlvdXRwdXQgZ2l0IHJlc2V0IC0taGFyZCAkc2hhMSB8fAorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byBcJHNoYTEiKSIKKwkJOzsKKwlmKQorCQlmaXJzdF9wYXJlbnQ9JChleHByICIkbmV3X3BhcmVudHMiIDogJyBcKFteIF0qXCknKQorCisJCWlmIFsgIiQxIiAhPSAiLW4iIF0KKwkJdGhlbgorCQkJIyBkZXRhY2ggSEVBRCB0byBjdXJyZW50IHBhcmVudAorCQkJb3V0cHV0IGdpdCBjaGVja291dCAkZmlyc3RfcGFyZW50IDI+IC9kZXYvbnVsbCB8fAorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gXCRmaXJzdF9wYXJlbnQiKSIKKwkJZmkKKworCQljYXNlICIkbmV3X3BhcmVudHMiIGluCisJCScgJyonICcqKQorCQkJdGVzdCAiYSQxIiA9IGEtbiAmJiBkaWUgIiQoZXZhbF9nZXR0ZXh0ICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogXCRzaGExIikiCisKKwkJCSMgcmVkbyBtZXJnZQorCQkJYXV0aG9yX3NjcmlwdF9jb250ZW50PSQoZ2V0X2F1dGhvcl9pZGVudF9mcm9tX2NvbW1pdCAkc2hhMSkKKwkJCWV2YWwgIiRhdXRob3Jfc2NyaXB0X2NvbnRlbnQiCisJCQltc2dfY29udGVudD0iJChjb21taXRfbWVzc2FnZSAkc2hhMSkiCisJCQkjIE5vIHBvaW50IGluIG1lcmdpbmcgdGhlIGZpcnN0IHBhcmVudCwgdGhhdCdzIEhFQUQKKwkJCW5ld19wYXJlbnRzPSR7bmV3X3BhcmVudHMjICRmaXJzdF9wYXJlbnR9CisJCQltZXJnZV9hcmdzPSItLW5vLWxvZyAtLW5vLWZmIgorCQkJaWYgISBkb193aXRoX2F1dGhvciBvdXRwdXQgZXZhbCBcCisJCQkJZ2l0IG1lcmdlICR7Z3BnX3NpZ25fb3B0OiskKGdpdCByZXYtcGFyc2UgXAorCQkJCQktLXNxLXF1b3RlICIkZ3BnX3NpZ25fb3B0Iil9IFwKKwkJCQkkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgIiRtZXJnZV9hcmdzIiBcCisJCQkJIiRzdHJhdGVneV9hcmdzIiBcCisJCQkJLW0gIiQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkbXNnX2NvbnRlbnQiKSIgXAorCQkJCSIkbmV3X3BhcmVudHMiCisJCQl0aGVuCisJCQkJcHJpbnRmICIlc1xuIiAiJG1zZ19jb250ZW50IiA+ICIkR0lUX0RJUiIvTUVSR0VfTVNHCisJCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiQoZXZhbF9nZXR0ZXh0ICJFcnJvciByZWRvaW5nIG1lcmdlIFwkc2hhMSIpIgorCQkJZmkKKwkJCWVjaG8gIiRzaGExICQoZ2l0IHJldi1wYXJzZSBIRUFEXjApIiA+PiAiJHJld3JpdHRlbl9saXN0IgorCQkJOzsKKwkJKikKKwkJCW91dHB1dCBldmFsIGdpdCBjaGVycnktcGljayAkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgXAorCQkJCSRhbGxvd19lbXB0eV9tZXNzYWdlIFwKKwkJCQkke2dwZ19zaWduX29wdDorJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRncGdfc2lnbl9vcHQiKX0gXAorCQkJCSIkc3RyYXRlZ3lfYXJncyIgIiRAIiB8fAorCQkJCWRpZV93aXRoX3BhdGNoICRzaGExICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IHBpY2sgXCRzaGExIikiCisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworfQorCit0aGlzX250aF9jb21taXRfbWVzc2FnZSAoKSB7CisJbj0kMQorCWV2YWxfZ2V0dGV4dCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgI1wke259OiIKK30KKworc2tpcF9udGhfY29tbWl0X21lc3NhZ2UgKCkgeworCW49JDEKKwlldmFsX2dldHRleHQgIlRoZSBjb21taXQgbWVzc2FnZSAjXCR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK30KKwordXBkYXRlX3NxdWFzaF9tZXNzYWdlcyAoKSB7CisJaWYgdGVzdCAtZiAiJHNxdWFzaF9tc2ciOyB0aGVuCisJCW12ICIkc3F1YXNoX21zZyIgIiRzcXVhc2hfbXNnIi5iYWsgfHwgZXhpdAorCQljb3VudD0kKCgkKHNlZCAtbiBcCisJCQktZSAiMXMvXiRjb21tZW50X2NoYXJbXjAtOV0qXChbMC05XVswLTldKlwpLiovXDEvcCIgXAorCQkJLWUgInEiIDwgIiRzcXVhc2hfbXNnIi5iYWspKzEpKQorCQl7CisJCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyICQoZXZhbF9uZ2V0dGV4dCBcCisJCQkJIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiBcJGNvdW50IGNvbW1pdC4iIFwKKwkJCQkiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIFwkY291bnQgY29tbWl0cy4iIFwKKwkJCQkkY291bnQpIgorCQkJc2VkIC1lIDFkIC1lICcyLC9eLi97CisJCQkJL14kL2QKKwkJCX0nIDwiJHNxdWFzaF9tc2ciLmJhaworCQl9ID4iJHNxdWFzaF9tc2ciCisJZWxzZQorCQljb21taXRfbWVzc2FnZSBIRUFEID4iJGZpeHVwX21zZyIgfHwKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ2Fubm90IHdyaXRlIFwkZml4dXBfbXNnIikiCisJCWNvdW50PTIKKwkJeworCQkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciAkKGdldHRleHQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIikiCisJCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyICQoZ2V0dGV4dCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIpIgorCQkJZWNobworCQkJY2F0ICIkZml4dXBfbXNnIgorCQl9ID4iJHNxdWFzaF9tc2ciCisJZmkKKwljYXNlICQxIGluCisJc3F1YXNoKQorCQlybSAtZiAiJGZpeHVwX21zZyIKKwkJZWNobworCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyICQodGhpc19udGhfY29tbWl0X21lc3NhZ2UgJGNvdW50KSIKKwkJZWNobworCQljb21taXRfbWVzc2FnZSAkMgorCQk7OworCWZpeHVwKQorCQllY2hvCisJCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgJChza2lwX250aF9jb21taXRfbWVzc2FnZSAkY291bnQpIgorCQllY2hvCisJCSMgQ2hhbmdlIHRoZSBzcGFjZSBhZnRlciB0aGUgY29tbWVudCBjaGFyYWN0ZXIgdG8gVEFCOgorCQljb21taXRfbWVzc2FnZSAkMiB8IGdpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyB8IHNlZCAtZSAncy8gLwkvJworCQk7OworCWVzYWMgPj4iJHNxdWFzaF9tc2ciCit9CisKK3BlZWtfbmV4dF9jb21tYW5kICgpIHsKKwlnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzIDwiJHRvZG8iIHwgc2VkIC1uIC1lICdzLyAuKi8vcCcgLWUgcQorfQorCisjIEEgc3F1YXNoL2ZpeHVwIGhhcyBmYWlsZWQuICBQcmVwYXJlIHRoZSBsb25nIHZlcnNpb24gb2YgdGhlIHNxdWFzaAorIyBjb21taXQgbWVzc2FnZSwgdGhlbiBkaWVfd2l0aF9wYXRjaC4gIFRoaXMgY29kZSBwYXRoIHJlcXVpcmVzIHRoZQorIyB1c2VyIHRvIGVkaXQgdGhlIGNvbWJpbmVkIGNvbW1pdCBtZXNzYWdlIGZvciBhbGwgY29tbWl0cyB0aGF0IGhhdmUKKyMgYmVlbiBzcXVhc2hlZC9maXhlZHVwIHNvIGZhci4gIFNvIGFsc28gZXJhc2UgdGhlIG9sZCBzcXVhc2gKKyMgbWVzc2FnZXMsIGVmZmVjdGl2ZWx5IGNhdXNpbmcgdGhlIGNvbWJpbmVkIGNvbW1pdCB0byBiZSB1c2VkIGFzIHRoZQorIyBuZXcgYmFzaXMgZm9yIGFueSBmdXJ0aGVyIHNxdWFzaC9maXh1cHMuICBBcmdzOiBzaGExIHJlc3QKK2RpZV9mYWlsZWRfc3F1YXNoKCkgeworCXNoYTE9JDEKKwlyZXN0PSQyCisJbXYgIiRzcXVhc2hfbXNnIiAiJG1zZyIgfHwgZXhpdAorCXJtIC1mICIkZml4dXBfbXNnIgorCWNwICIkbXNnIiAiJEdJVF9ESVIiL01FUkdFX01TRyB8fCBleGl0CisJd2FybgorCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgYXBwbHkgXCRzaGExLi4uIFwkcmVzdCIpIgorCWRpZV93aXRoX3BhdGNoICRzaGExICIiCit9CisKK2ZsdXNoX3Jld3JpdHRlbl9wZW5kaW5nKCkgeworCXRlc3QgLXMgIiRyZXdyaXR0ZW5fcGVuZGluZyIgfHwgcmV0dXJuCisJbmV3c2hhMT0iJChnaXQgcmV2LXBhcnNlIEhFQUReMCkiCisJc2VkICJzLyQvICRuZXdzaGExLyIgPCAiJHJld3JpdHRlbl9wZW5kaW5nIiA+PiAiJHJld3JpdHRlbl9saXN0IgorCXJtIC1mICIkcmV3cml0dGVuX3BlbmRpbmciCit9CisKK3JlY29yZF9pbl9yZXdyaXR0ZW4oKSB7CisJb2xkc2hhMT0iJChnaXQgcmV2LXBhcnNlICQxKSIKKwllY2hvICIkb2xkc2hhMSIgPj4gIiRyZXdyaXR0ZW5fcGVuZGluZyIKKworCWNhc2UgIiQocGVla19uZXh0X2NvbW1hbmQpIiBpbgorCXNxdWFzaHxzfGZpeHVwfGYpCisJCTs7CisJKikKKwkJZmx1c2hfcmV3cml0dGVuX3BlbmRpbmcKKwkJOzsKKwllc2FjCit9CisKK2RvX3BpY2sgKCkgeworCXNoYTE9JDEKKwlyZXN0PSQyCisJaWYgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkc3F1YXNoX29udG8iCisJdGhlbgorCQkjIFNldCB0aGUgY29ycmVjdCBjb21taXQgbWVzc2FnZSBhbmQgYXV0aG9yIGluZm8gb24gdGhlCisJCSMgc2VudGluZWwgcm9vdCBiZWZvcmUgY2hlcnJ5LXBpY2tpbmcgdGhlIG9yaWdpbmFsIGNoYW5nZXMKKwkJIyB3aXRob3V0IGNvbW1pdHRpbmcgKC1uKS4gIEZpbmFsbHksIHVwZGF0ZSB0aGUgc2VudGluZWwgYWdhaW4KKwkJIyB0byBpbmNsdWRlIHRoZXNlIGNoYW5nZXMuICBJZiB0aGUgY2hlcnJ5LXBpY2sgcmVzdWx0cyBpbiBhCisJCSMgY29uZmxpY3QsIHRoaXMgbWVhbnMgb3VyIGJlaGF2aW91ciBpcyBzaW1pbGFyIHRvIGEgc3RhbmRhcmQKKwkJIyBmYWlsZWQgY2hlcnJ5LXBpY2sgZHVyaW5nIHJlYmFzZSwgd2l0aCBhIGRpcnR5IGluZGV4IHRvCisJCSMgcmVzb2x2ZSBiZWZvcmUgbWFudWFsbHkgcnVubmluZyBnaXQgY29tbWl0IC0tYW1lbmQgdGhlbiBnaXQKKwkJIyByZWJhc2UgLS1jb250aW51ZS4KKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtLWFtZW5kIFwKKwkJCSAgIC0tbm8tcG9zdC1yZXdyaXRlIC1uIC1xIC1DICRzaGExICRzaWdub2ZmICYmCisJCQlwaWNrX29uZSAtbiAkc2hhMSAmJgorCQkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYWxsb3ctZW1wdHktbWVzc2FnZSBcCisJCQkJICAgLS1hbWVuZCAtLW5vLXBvc3QtcmV3cml0ZSAtbiAtcSAtQyAkc2hhMSAkc2lnbm9mZiBcCisJCQkJICAgJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gfHwKKwkJCQkgICBkaWVfd2l0aF9wYXRjaCAkc2hhMSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBhcHBseSBcJHNoYTEuLi4gXCRyZXN0IikiCisJZWxzZQorCQlwaWNrX29uZSAkc2hhMSB8fAorCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgYXBwbHkgXCRzaGExLi4uIFwkcmVzdCIpIgorCWZpCit9CisKK2RvX25leHQgKCkgeworCXJtIC1mICIkbXNnIiAiJGF1dGhvcl9zY3JpcHQiICIkYW1lbmQiICIkc3RhdGVfZGlyIi9zdG9wcGVkLXNoYSB8fCBleGl0CisJcmVhZCAtciBjb21tYW5kIHNoYTEgcmVzdCA8ICIkdG9kbyIKKwljYXNlICIkY29tbWFuZCIgaW4KKwkiJGNvbW1lbnRfY2hhciIqfCcnfG5vb3B8ZHJvcHxkKQorCQltYXJrX2FjdGlvbl9kb25lCisJCTs7CisJIiRjciIpCisJCSMgV29yayBhcm91bmQgQ1IgbGVmdCBieSAicmVhZCIgKGUuZy4gd2l0aCBHaXQgZm9yIFdpbmRvd3MnIEJhc2gpLgorCQltYXJrX2FjdGlvbl9kb25lCisJCTs7CisJcGlja3xwKQorCQljb21tZW50X2Zvcl9yZWZsb2cgcGljaworCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJZG9fcGljayAkc2hhMSAiJHJlc3QiCisJCXJlY29yZF9pbl9yZXdyaXR0ZW4gJHNoYTEKKwkJOzsKKwlyZXdvcmR8cikKKwkJY29tbWVudF9mb3JfcmVmbG9nIHJld29yZAorCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJZG9fcGljayAkc2hhMSAiJHJlc3QiCisJCWdpdCBjb21taXQgLS1hbWVuZCAtLW5vLXBvc3QtcmV3cml0ZSAke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSBcCisJCQkkYWxsb3dfZW1wdHlfbWVzc2FnZSB8fCB7CisJCQl3YXJuICIkKGV2YWxfZ2V0dGV4dCAiXAorQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyBcJHNoYTEuLi4gXCRyZXN0CitUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9vaworZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlIGJlZm9yZQoreW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIpIgorCQkJZXhpdF93aXRoX3BhdGNoICRzaGExIDEKKwkJfQorCQlyZWNvcmRfaW5fcmV3cml0dGVuICRzaGExCisJCTs7CisJZWRpdHxlKQorCQljb21tZW50X2Zvcl9yZWZsb2cgZWRpdAorCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJZG9fcGljayAkc2hhMSAiJHJlc3QiCisJCXNoYTFfYWJicmV2PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRzaGExKQorCQl3YXJuICIkKGV2YWxfZ2V0dGV4dCAiU3RvcHBlZCBhdCBcJHNoYTFfYWJicmV2Li4uIFwkcmVzdCIpIgorCQlleGl0X3dpdGhfcGF0Y2ggJHNoYTEgMAorCQk7OworCXNxdWFzaHxzfGZpeHVwfGYpCisJCWNhc2UgIiRjb21tYW5kIiBpbgorCQlzcXVhc2h8cykKKwkJCXNxdWFzaF9zdHlsZT1zcXVhc2gKKwkJCTs7CisJCWZpeHVwfGYpCisJCQlzcXVhc2hfc3R5bGU9Zml4dXAKKwkJCTs7CisJCWVzYWMKKwkJY29tbWVudF9mb3JfcmVmbG9nICRzcXVhc2hfc3R5bGUKKworCQl0ZXN0IC1mICIkZG9uZSIgJiYgaGFzX2FjdGlvbiAiJGRvbmUiIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDYW5ub3QgJ1wkc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IikiCisKKwkJbWFya19hY3Rpb25fZG9uZQorCQl1cGRhdGVfc3F1YXNoX21lc3NhZ2VzICRzcXVhc2hfc3R5bGUgJHNoYTEKKwkJYXV0aG9yX3NjcmlwdF9jb250ZW50PSQoZ2V0X2F1dGhvcl9pZGVudF9mcm9tX2NvbW1pdCBIRUFEKQorCQllY2hvICIkYXV0aG9yX3NjcmlwdF9jb250ZW50IiA+ICIkYXV0aG9yX3NjcmlwdCIKKwkJZXZhbCAiJGF1dGhvcl9zY3JpcHRfY29udGVudCIKKwkJaWYgISBwaWNrX29uZSAtbiAkc2hhMQorCQl0aGVuCisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPiIkYW1lbmQiCisJCQlkaWVfZmFpbGVkX3NxdWFzaCAkc2hhMSAiJHJlc3QiCisJCWZpCisJCWNhc2UgIiQocGVla19uZXh0X2NvbW1hbmQpIiBpbgorCQlzcXVhc2h8c3xmaXh1cHxmKQorCQkJIyBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBjb21taXQ7IGl0cyBtZXNzYWdlIHdpbGwgb25seSBiZQorCQkJIyB1c2VkIGluIGNhc2Ugb2YgdHJvdWJsZS4gIFNvIHVzZSB0aGUgbG9uZyB2ZXJzaW9uOgorCQkJZG9fd2l0aF9hdXRob3Igb3V0cHV0IGdpdCBjb21taXQgLS1hbWVuZCAtLW5vLXZlcmlmeSAtRiAiJHNxdWFzaF9tc2ciIFwKKwkJCQkke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSAkYWxsb3dfZW1wdHlfbWVzc2FnZSB8fAorCQkJCWRpZV9mYWlsZWRfc3F1YXNoICRzaGExICIkcmVzdCIKKwkJCTs7CisJCSopCisJCQkjIFRoaXMgaXMgdGhlIGZpbmFsIGNvbW1hbmQgb2YgdGhpcyBzcXVhc2gvZml4dXAgZ3JvdXAKKwkJCWlmIHRlc3QgLWYgIiRmaXh1cF9tc2ciCisJCQl0aGVuCisJCQkJZG9fd2l0aF9hdXRob3IgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tdmVyaWZ5IC1GICIkZml4dXBfbXNnIiBcCisJCQkJCSR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9ICRhbGxvd19lbXB0eV9tZXNzYWdlIHx8CisJCQkJCWRpZV9mYWlsZWRfc3F1YXNoICRzaGExICIkcmVzdCIKKwkJCWVsc2UKKwkJCQljcCAiJHNxdWFzaF9tc2ciICIkR0lUX0RJUiIvU1FVQVNIX01TRyB8fCBleGl0CisJCQkJcm0gLWYgIiRHSVRfRElSIi9NRVJHRV9NU0cKKwkJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tYW1lbmQgLS1uby12ZXJpZnkgLUYgIiRHSVRfRElSIi9TUVVBU0hfTVNHIC1lIFwKKwkJCQkJJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gJGFsbG93X2VtcHR5X21lc3NhZ2UgfHwKKwkJCQkJZGllX2ZhaWxlZF9zcXVhc2ggJHNoYTEgIiRyZXN0IgorCQkJZmkKKwkJCXJtIC1mICIkc3F1YXNoX21zZyIgIiRmaXh1cF9tc2ciCisJCQk7OworCQllc2FjCisJCXJlY29yZF9pbl9yZXdyaXR0ZW4gJHNoYTEKKwkJOzsKKwl4fCJleGVjIikKKwkJcmVhZCAtciBjb21tYW5kIHJlc3QgPCAiJHRvZG8iCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJZXZhbF9nZXR0ZXh0bG4gIkV4ZWN1dGluZzogXCRyZXN0IgorCQkiJHtTSEVMTDotQFNIRUxMX1BBVEhAfSIgLWMgIiRyZXN0IiAjIEFjdHVhbCBleGVjdXRpb24KKwkJc3RhdHVzPSQ/CisJCSMgUnVuIGluIHN1YnNoZWxsIGJlY2F1c2UgcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgY2FuIGRpZS4KKwkJZGlydHk9ZgorCQkocmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgInJlYmFzZSIgMj4vZGV2L251bGwpIHx8IGRpcnR5PXQKKwkJaWYgdGVzdCAiJHN0YXR1cyIgLW5lIDAKKwkJdGhlbgorCQkJd2FybiAiJChldmFsX2dldHRleHQgIkV4ZWN1dGlvbiBmYWlsZWQ6IFwkcmVzdCIpIgorCQkJdGVzdCAiJGRpcnR5IiA9IGYgfHwKKwkJCQl3YXJuICIkKGdldHRleHQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIikiCisKKwkJCXdhcm4gIiQoZ2V0dGV4dCAiXAorWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1bgorCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikiCisJCQl3YXJuCisJCQlpZiB0ZXN0ICRzdGF0dXMgLWVxIDEyNwkJIyBjb21tYW5kIG5vdCBmb3VuZAorCQkJdGhlbgorCQkJCXN0YXR1cz0xCisJCQlmaQorCQkJZXhpdCAiJHN0YXR1cyIKKwkJZWxpZiB0ZXN0ICIkZGlydHkiID0gdAorCQl0aGVuCisJCQkjIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisJCQl3YXJuICIkKGV2YWxfZ2V0dGV4dCAiXAorRXhlY3V0aW9uIHN1Y2NlZWRlZDogXCRyZXN0CitidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZQorQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuCisKKwlnaXQgcmViYXNlIC0tY29udGludWUiKSIKKwkJCXdhcm4KKwkJCWV4aXQgMQorCQlmaQorCQk7OworCSopCisJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJVbmtub3duIGNvbW1hbmQ6IFwkY29tbWFuZCBcJHNoYTEgXCRyZXN0IikiCisJCWZpeHRvZG89IiQoZ2V0dGV4dCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iKSIKKwkJaWYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAiJHNoYTEiID4vZGV2L251bGwKKwkJdGhlbgorCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiRmaXh0b2RvIgorCQllbHNlCisJCQlkaWUgIiRmaXh0b2RvIgorCQlmaQorCQk7OworCWVzYWMKKwl0ZXN0IC1zICIkdG9kbyIgJiYgcmV0dXJuCisKKwljb21tZW50X2Zvcl9yZWZsb2cgZmluaXNoICYmCisJbmV3aGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXNlICRoZWFkX25hbWUgaW4KKwlyZWZzLyopCisJCW1lc3NhZ2U9IiRHSVRfUkVGTE9HX0FDVElPTjogJGhlYWRfbmFtZSBvbnRvICRvbnRvIiAmJgorCQlnaXQgdXBkYXRlLXJlZiAtbSAiJG1lc3NhZ2UiICRoZWFkX25hbWUgJG5ld2hlYWQgJG9yaWdfaGVhZCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIFwKKwkJICAtbSAiJEdJVF9SRUZMT0dfQUNUSU9OOiByZXR1cm5pbmcgdG8gJGhlYWRfbmFtZSIgXAorCQkgIEhFQUQgJGhlYWRfbmFtZQorCQk7OworCWVzYWMgJiYgeworCQl0ZXN0ICEgLWYgIiRzdGF0ZV9kaXIiL3ZlcmJvc2UgfHwKKwkJCWdpdCBkaWZmLXRyZWUgLS1zdGF0ICRvcmlnX2hlYWQuLkhFQUQKKwl9ICYmCisJeworCQl0ZXN0IC1zICIkcmV3cml0dGVuX2xpc3QiICYmCisJCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9cmViYXNlIDwgIiRyZXdyaXR0ZW5fbGlzdCIgfHwKKwkJdHJ1ZSAjIHdlIGRvbid0IGNhcmUgaWYgdGhpcyBjb3B5aW5nIGZhaWxlZAorCX0gJiYKKwlob29rPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBob29rcy9wb3N0LXJld3JpdGUpIgorCWlmIHRlc3QgLXggIiRob29rIiAmJiB0ZXN0IC1zICIkcmV3cml0dGVuX2xpc3QiOyB0aGVuCisJCSIkaG9vayIgcmViYXNlIDwgIiRyZXdyaXR0ZW5fbGlzdCIKKwkJdHJ1ZSAjIHdlIGRvbid0IGNhcmUgaWYgdGhpcyBob29rIGZhaWxlZAorCWZpICYmCisJCXdhcm4gIiQoZXZhbF9nZXR0ZXh0ICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCBcJGhlYWRfbmFtZS4iKSIKKworCXJldHVybiAxICMgbm90IGZhaWx1cmU7IGp1c3QgdG8gYnJlYWsgdGhlIGRvX3Jlc3QgbG9vcAorfQorCisjIGNhbiBvbmx5IHJldHVybiAwLCB3aGVuIHRoZSBpbmZpbml0ZSBsb29wIGJyZWFrcworZG9fcmVzdCAoKSB7CisJd2hpbGUgOgorCWRvCisJCWRvX25leHQgfHwgYnJlYWsKKwlkb25lCit9CisKK2V4cGFuZF90b2RvX2lkcygpIHsKKwlnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSAtLWV4cGFuZC1pZHMKK30KKworY29sbGFwc2VfdG9kb19pZHMoKSB7CisJZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgLS1zaG9ydGVuLWlkcworfQorCisjIFN3aXRjaCB0byB0aGUgYnJhbmNoIGluICRpbnRvIGFuZCBub3RpZnkgaXQgaW4gdGhlIHJlZmxvZworY2hlY2tvdXRfb250byAoKSB7CisJR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTjogY2hlY2tvdXQgJG9udG9fbmFtZSIKKwlvdXRwdXQgZ2l0IGNoZWNrb3V0ICRvbnRvIHx8IGRpZV9hYm9ydCAiJChnZXR0ZXh0ICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiKSIKKwlnaXQgdXBkYXRlLXJlZiBPUklHX0hFQUQgJG9yaWdfaGVhZAorfQorCitnZXRfbWlzc2luZ19jb21taXRfY2hlY2tfbGV2ZWwgKCkgeworCWNoZWNrX2xldmVsPSQoZ2l0IGNvbmZpZyAtLWdldCByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaykKKwljaGVja19sZXZlbD0ke2NoZWNrX2xldmVsOi1pZ25vcmV9CisJIyBEb24ndCBiZSBjYXNlIHNlbnNpdGl2ZQorCXByaW50ZiAnJXMnICIkY2hlY2tfbGV2ZWwiIHwgdHIgJ0EtWicgJ2EteicKK30KKworIyBJbml0aWF0ZSBhbiBhY3Rpb24uIElmIHRoZSBjYW5ub3QgYmUgYW55CisjIGZ1cnRoZXIgYWN0aW9uIGl0ICBtYXkgZXhlYyBhIGNvbW1hbmQKKyMgb3IgZXhpdCBhbmQgbm90IHJldHVybi4KKyMKKyMgVE9ETzogQ29uc2lkZXIgYSBjbGVhbmVyIHJldHVybiBtb2RlbCBzbyBpdAorIyBuZXZlciBleGl0cyBhbmQgYWx3YXlzIHJldHVybiAwIGlmIHByb2Nlc3MKKyMgaXMgY29tcGxldGUuCisjCisjIFBhcmFtZXRlciAxIGlzIHRoZSBhY3Rpb24gdG8gaW5pdGlhdGUuCisjCisjIFJldHVybnMgMCBpZiB0aGUgYWN0aW9uIHdhcyBhYmxlIHRvIGNvbXBsZXRlCisjIGFuZCBpZiAxIGlmIGZ1cnRoZXIgcHJvY2Vzc2luZyBpcyByZXF1aXJlZC4KK2luaXRpYXRlX2FjdGlvbiAoKSB7CisJY2FzZSAiJDEiIGluCisJY29udGludWUpCisJCSMgZG8gd2UgaGF2ZSBhbnl0aGluZyB0byBjb21taXQ/CisJCWlmIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAtLQorCQl0aGVuCisJCQkjIE5vdGhpbmcgdG8gY29tbWl0IC0tIHNraXAgdGhpcyBjb21taXQKKworCQkJdGVzdCAhIC1mICIkR0lUX0RJUiIvQ0hFUlJZX1BJQ0tfSEVBRCB8fAorCQkJcm0gIiRHSVRfRElSIi9DSEVSUllfUElDS19IRUFEIHx8CisJCQlkaWUgIiQoZ2V0dGV4dCAiQ291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIikiCisJCWVsc2UKKwkJCWlmICEgdGVzdCAtZiAiJGF1dGhvcl9zY3JpcHQiCisJCQl0aGVuCisJCQkJZ3BnX3NpZ25fb3B0X3F1b3RlZD0ke2dwZ19zaWduX29wdDorJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRncGdfc2lnbl9vcHQiKX0KKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJcCitZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4KK0lmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlCitzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjoKKworICBnaXQgY29tbWl0IC0tYW1lbmQgXCRncGdfc2lnbl9vcHRfcXVvdGVkCisKK0lmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46CisKKyAgZ2l0IGNvbW1pdCBcJGdwZ19zaWduX29wdF9xdW90ZWQKKworSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDoKKworICBnaXQgcmViYXNlIC0tY29udGludWUKKyIpIgorCQkJZmkKKwkJCS4gIiRhdXRob3Jfc2NyaXB0IiB8fAorCQkJCWRpZSAiJChnZXR0ZXh0ICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIpIgorCQkJaWYgdGVzdCAtZiAiJGFtZW5kIgorCQkJdGhlbgorCQkJCWN1cnJlbnRfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKwkJCQl0ZXN0ICIkY3VycmVudF9oZWFkIiA9ICQoY2F0ICIkYW1lbmQiKSB8fAorCQkJCWRpZSAiJChnZXR0ZXh0ICJcCitZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW0KK2ZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iKSIKKwkJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tYW1lbmQgLS1uby12ZXJpZnkgLUYgIiRtc2ciIC1lIFwKKwkJCQkJJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gJGFsbG93X2VtcHR5X21lc3NhZ2UgfHwKKwkJCQkJZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIikiCisJCQllbHNlCisJCQkJZG9fd2l0aF9hdXRob3IgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtRiAiJG1zZyIgLWUgXAorCQkJCQkke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSAkYWxsb3dfZW1wdHlfbWVzc2FnZSB8fAorCQkJCQlkaWUgIiQoZ2V0dGV4dCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iKSIKKwkJCWZpCisJCWZpCisKKwkJaWYgdGVzdCAtciAiJHN0YXRlX2RpciIvc3RvcHBlZC1zaGEKKwkJdGhlbgorCQkJcmVjb3JkX2luX3Jld3JpdHRlbiAiJChjYXQgIiRzdGF0ZV9kaXIiL3N0b3BwZWQtc2hhKSIKKwkJZmkKKworCQlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAicmViYXNlIgorCQlkb19yZXN0CisJCXJldHVybiAwCisJCTs7CisJc2tpcCkKKwkJZ2l0IHJlcmVyZSBjbGVhcgorCQlkb19yZXN0CisJCXJldHVybiAwCisJCTs7CisJZWRpdC10b2RvKQorCQlnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzIDwiJHRvZG8iID4iJHRvZG8iLm5ldworCQltdiAtZiAiJHRvZG8iLm5ldyAiJHRvZG8iCisJCWNvbGxhcHNlX3RvZG9faWRzCisJCWFwcGVuZF90b2RvX2hlbHAKKwkJZ2V0dGV4dCAiCitZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS4KK1RvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46CisgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisKKyIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iCisKKwkJZ2l0X3NlcXVlbmNlX2VkaXRvciAiJHRvZG8iIHx8CisJCQlkaWUgIiQoZ2V0dGV4dCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIikiCisJCWV4cGFuZF90b2RvX2lkcworCisJCWV4aXQKKwkJOzsKKwlzaG93LWN1cnJlbnQtcGF0Y2gpCisJCWV4ZWMgZ2l0IHNob3cgUkVCQVNFX0hFQUQgLS0KKwkJOzsKKwkqKQorCQlyZXR1cm4gMSAjIGNvbnRpbnVlCisJCTs7CisJZXNhYworfQorCitzZXR1cF9yZWZsb2dfYWN0aW9uICgpIHsKKwljb21tZW50X2Zvcl9yZWZsb2cgc3RhcnQKKworCWlmIHRlc3QgISAteiAiJHN3aXRjaF90byIKKwl0aGVuCisJCUdJVF9SRUZMT0dfQUNUSU9OPSIkR0lUX1JFRkxPR19BQ1RJT046IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCisJCW91dHB1dCBnaXQgY2hlY2tvdXQgIiRzd2l0Y2hfdG8iIC0tIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgY2hlY2tvdXQgXCRzd2l0Y2hfdG8iKSIKKworCQljb21tZW50X2Zvcl9yZWZsb2cgc3RhcnQKKwlmaQorfQorCitpbml0X2Jhc2ljX3N0YXRlICgpIHsKKwlvcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8IGRpZSAiJChnZXR0ZXh0ICJObyBIRUFEPyIpIgorCW1rZGlyIC1wICIkc3RhdGVfZGlyIiB8fCBkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBcJHN0YXRlX2RpciIpIgorCXJtIC1mICIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBSRUJBU0VfSEVBRCkiCisKKwk6ID4gIiRzdGF0ZV9kaXIiL2ludGVyYWN0aXZlIHx8IGRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIpIgorCXdyaXRlX2Jhc2ljX3N0YXRlCit9CisKK2luaXRfcmV2aXNpb25zX2FuZF9zaG9ydHJldmlzaW9ucyAoKSB7CisJc2hvcnRoZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRvcmlnX2hlYWQpCisJc2hvcnRvbnRvPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRvbnRvKQorCWlmIHRlc3QgLXogIiRyZWJhc2Vfcm9vdCIKKwkJIyB0aGlzIGlzIG5vdyBlcXVpdmFsZW50IHRvICEgLXogIiR1cHN0cmVhbSIKKwl0aGVuCisJCXNob3J0dXBzdHJlYW09JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJHVwc3RyZWFtKQorCQlyZXZpc2lvbnM9JHVwc3RyZWFtLi4uJG9yaWdfaGVhZAorCQlzaG9ydHJldmlzaW9ucz0kc2hvcnR1cHN0cmVhbS4uJHNob3J0aGVhZAorCWVsc2UKKwkJcmV2aXNpb25zPSRvbnRvLi4uJG9yaWdfaGVhZAorCQlzaG9ydHJldmlzaW9ucz0kc2hvcnRoZWFkCisJCXRlc3QgLXogIiRzcXVhc2hfb250byIgfHwKKwkJZWNobyAiJHNxdWFzaF9vbnRvIiA+IiRzdGF0ZV9kaXIiL3NxdWFzaC1vbnRvCisJZmkKK30KKworY29tcGxldGVfYWN0aW9uKCkgeworCXRlc3QgLXMgIiR0b2RvIiB8fCBlY2hvIG5vb3AgPj4gIiR0b2RvIgorCXRlc3QgLXogIiRhdXRvc3F1YXNoIiB8fCBnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSAtLXJlYXJyYW5nZS1zcXVhc2ggfHwgZXhpdAorCXRlc3QgLW4gIiRjbWQiICYmIGdpdCByZWJhc2UtLWludGVyYWN0aXZlIC0tYWRkLWV4ZWMtY29tbWFuZHMgLS1jbWQgIiRjbWQiCisKKwl0b2RvY291bnQ9JChnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzIDwiJHRvZG8iIHwgd2MgLWwpCisJdG9kb2NvdW50PSR7dG9kb2NvdW50IyMqIH0KKworY2F0ID4+IiR0b2RvIiA8PEVPRgorCiskY29tbWVudF9jaGFyICQoZXZhbF9uZ2V0dGV4dCBcCisJIlJlYmFzZSBcJHNob3J0cmV2aXNpb25zIG9udG8gXCRzaG9ydG9udG8gKFwkdG9kb2NvdW50IGNvbW1hbmQpIiBcCisJIlJlYmFzZSBcJHNob3J0cmV2aXNpb25zIG9udG8gXCRzaG9ydG9udG8gKFwkdG9kb2NvdW50IGNvbW1hbmRzKSIgXAorCSIkdG9kb2NvdW50IikKK0VPRgorCWFwcGVuZF90b2RvX2hlbHAKKwlnZXR0ZXh0ICIKK0hvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuCisKKyIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iCisKKwlpZiB0ZXN0IC16ICIka2VlcF9lbXB0eSIKKwl0aGVuCisJCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgJChnZXR0ZXh0ICJOb3RlIHRoYXQgZW1wdHkgY29tbWl0cyBhcmUgY29tbWVudGVkIG91dCIpIiA+PiIkdG9kbyIKKwlmaQorCisKKwloYXNfYWN0aW9uICIkdG9kbyIgfHwKKwkJcmV0dXJuIDIKKworCWNwICIkdG9kbyIgIiR0b2RvIi5iYWNrdXAKKwljb2xsYXBzZV90b2RvX2lkcworCWdpdF9zZXF1ZW5jZV9lZGl0b3IgIiR0b2RvIiB8fAorCQlkaWVfYWJvcnQgIiQoZ2V0dGV4dCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIikiCisKKwloYXNfYWN0aW9uICIkdG9kbyIgfHwKKwkJcmV0dXJuIDIKKworCWdpdCByZWJhc2UtLWludGVyYWN0aXZlIC0tY2hlY2stdG9kby1saXN0IHx8IHsKKwkJcmV0PSQ/CisJCWNoZWNrb3V0X29udG8KKwkJZXhpdCAkcmV0CisJfQorCisJZXhwYW5kX3RvZG9faWRzCisJY2hlY2tvdXRfb250bworCWRvX3Jlc3QKK30KKworZ2l0X3JlYmFzZV9fcHJlc2VydmVfbWVyZ2VzICgpIHsKKwlpbml0aWF0ZV9hY3Rpb24gIiRhY3Rpb24iCisJcmV0PSQ/CisJaWYgdGVzdCAkcmV0ID0gMDsgdGhlbgorCQlyZXR1cm4gMAorCWZpCisKKwlzZXR1cF9yZWZsb2dfYWN0aW9uCisJaW5pdF9iYXNpY19zdGF0ZQorCisJaWYgdGVzdCAteiAiJHJlYmFzZV9yb290IgorCXRoZW4KKwkJbWtkaXIgIiRyZXdyaXR0ZW4iICYmCisJCWZvciBjIGluICQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgJG9yaWdfaGVhZCAkdXBzdHJlYW0pCisJCWRvCisJCQllY2hvICRvbnRvID4gIiRyZXdyaXR0ZW4iLyRjIHx8CisJCQkJZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIikiCisJCWRvbmUKKwllbHNlCisJCW1rZGlyICIkcmV3cml0dGVuIiAmJgorCQllY2hvICRvbnRvID4gIiRyZXdyaXR0ZW4iL3Jvb3QgfHwKKwkJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIpIgorCWZpCisKKwlpbml0X3JldmlzaW9uc19hbmRfc2hvcnRyZXZpc2lvbnMKKworCWZvcm1hdD0kKGdpdCBjb25maWcgLS1nZXQgcmViYXNlLmluc3RydWN0aW9uRm9ybWF0KQorCSMgdGhlICdyZXYtbGlzdCAuLiB8IHNlZCcgcmVxdWlyZXMgJW0gdG8gcGFyc2U7IHRoZSBpbnN0cnVjdGlvbiByZXF1aXJlcyAlSCB0byBwYXJzZQorCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0iJW0lSCAke2Zvcm1hdDotJXN9IiBcCisJCS0tcmV2ZXJzZSAtLWxlZnQtcmlnaHQgLS10b3BvLW9yZGVyIFwKKwkJJHJldmlzaW9ucyAke3Jlc3RyaWN0X3JldmlzaW9uK14kcmVzdHJpY3RfcmV2aXNpb259IHwgXAorCQlzZWQgLW4gInMvXj4vL3AiIHwKKwl3aGlsZSByZWFkIC1yIHNoYTEgcmVzdAorCWRvCisJCWlmIHRlc3QgLXogIiRrZWVwX2VtcHR5IiAmJiBpc19lbXB0eV9jb21taXQgJHNoYTEgJiYgISBpc19tZXJnZV9jb21taXQgJHNoYTEKKwkJdGhlbgorCQkJY29tbWVudF9vdXQ9IiRjb21tZW50X2NoYXIgIgorCQllbHNlCisJCQljb21tZW50X291dD0KKwkJZmkKKworCQlpZiB0ZXN0IC16ICIkcmViYXNlX3Jvb3QiCisJCXRoZW4KKwkJCXByZXNlcnZlPXQKKwkJCWZvciBwIGluICQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkc2hhMSB8IGN1dCAtZCcgJyAtcyAtZjItKQorCQkJZG8KKwkJCQlpZiB0ZXN0IC1mICIkcmV3cml0dGVuIi8kcAorCQkJCXRoZW4KKwkJCQkJcHJlc2VydmU9ZgorCQkJCWZpCisJCQlkb25lCisJCWVsc2UKKwkJCXByZXNlcnZlPWYKKwkJZmkKKwkJaWYgdGVzdCBmID0gIiRwcmVzZXJ2ZSIKKwkJdGhlbgorCQkJdG91Y2ggIiRyZXdyaXR0ZW4iLyRzaGExCisJCQlwcmludGYgJyVzXG4nICIke2NvbW1lbnRfb3V0fXBpY2sgJHNoYTEgJHJlc3QiID4+IiR0b2RvIgorCQlmaQorCWRvbmUKKworCSMgV2F0Y2ggZm9yIGNvbW1pdHMgdGhhdCBiZWVuIGRyb3BwZWQgYnkgLS1jaGVycnktcGljaworCW1rZGlyICIkZHJvcHBlZCIKKwkjIFNhdmUgYWxsIG5vbi1jaGVycnktcGlja2VkIGNoYW5nZXMKKwlnaXQgcmV2LWxpc3QgJHJldmlzaW9ucyAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayB8IFwKKwkJc2VkIC1uICJzL14+Ly9wIiA+ICIkc3RhdGVfZGlyIi9ub3QtY2hlcnJ5LXBpY2tzCisJIyBOb3cgYWxsIGNvbW1pdHMgYW5kIG5vdGUgd2hpY2ggb25lcyBhcmUgbWlzc2luZyBpbgorCSMgbm90LWNoZXJyeS1waWNrcyBhbmQgaGVuY2UgYmVpbmcgZHJvcHBlZAorCWdpdCByZXYtbGlzdCAkcmV2aXNpb25zIHwKKwl3aGlsZSByZWFkIHJldgorCWRvCisJCWlmIHRlc3QgLWYgIiRyZXdyaXR0ZW4iLyRyZXYgJiYKKwkJICAgISBzYW5lX2dyZXAgIiRyZXYiICIkc3RhdGVfZGlyIi9ub3QtY2hlcnJ5LXBpY2tzID4vZGV2L251bGwKKwkJdGhlbgorCQkJIyBVc2UgLWYyIGJlY2F1c2UgaWYgcmV2LWxpc3QgaXMgdGVsbGluZyB1cyB0aGlzIGNvbW1pdCBpcworCQkJIyBub3Qgd29ydGh3aGlsZSwgd2UgZG9uJ3Qgd2FudCB0byB0cmFjayBpdHMgbXVsdGlwbGUgaGVhZHMsCisJCQkjIGp1c3QgdGhlIGhpc3Rvcnkgb2YgaXRzIGZpcnN0LXBhcmVudCBmb3Igb3RoZXJzIHRoYXQgd2lsbAorCQkJIyBiZSByZWJhc2luZyBvbiB0b3Agb2YgaXQKKwkJCWdpdCByZXYtbGlzdCAtLXBhcmVudHMgLTEgJHJldiB8IGN1dCAtZCcgJyAtcyAtZjIgPiAiJGRyb3BwZWQiLyRyZXYKKwkJCXNoYTE9JChnaXQgcmV2LWxpc3QgLTEgJHJldikKKwkJCXNhbmVfZ3JlcCAtdiAiXlthLXpdW2Etel0qICRzaGExIiA8IiR0b2RvIiA+ICIke3RvZG99MiIgOyBtdiAiJHt0b2RvfTIiICIkdG9kbyIKKwkJCXJtICIkcmV3cml0dGVuIi8kcmV2CisJCWZpCisJZG9uZQorCisJY29tcGxldGVfYWN0aW9uCit9CmRpZmYgLS1naXQgYS9naXQtcmVxdWVzdC1wdWxsLnNoIGIvZ2l0LXJlcXVlc3QtcHVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZDBlNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXJlcXVlc3QtcHVsbC5zaApAQCAtMCwwICsxLDE3MiBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAyMDA1LCBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorIworIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisjIGF0IHRoZSBkaXNjcmV0aW9uIG9mIExpbnVzIFRvcnZhbGRzLgorCitTVUJESVJFQ1RPUllfT0s9J1llcycKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TVFVDS0xPTkc9CitPUFRJT05TX1NQRUM9J2dpdCByZXF1ZXN0LXB1bGwgW29wdGlvbnNdIHN0YXJ0IHVybCBbZW5kXQorLS0KK3AgICAgc2hvdyBwYXRjaCB0ZXh0IGFzIHdlbGwKKycKKworLiBnaXQtc2gtc2V0dXAKKworR0lUX1BBR0VSPQorZXhwb3J0IEdJVF9QQUdFUgorCitwYXRjaD0KK3doaWxlCWNhc2UgIiQjIiBpbiAwKSBicmVhayA7OyBlc2FjCitkbworCWNhc2UgIiQxIiBpbgorCS1wKQorCQlwYXRjaD0tcCA7OworCS0tKQorCQlzaGlmdDsgYnJlYWsgOzsKKwktKikKKwkJdXNhZ2UgOzsKKwkqKQorCQlicmVhayA7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCitiYXNlPSQxIHVybD0kMiBzdGF0dXM9MAorCit0ZXN0IC1uICIkYmFzZSIgJiYgdGVzdCAtbiAiJHVybCIgfHwgdXNhZ2UKKworYmFzZXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAiJGJhc2UiXjApCitpZiB0ZXN0IC16ICIkYmFzZXJldiIKK3RoZW4KKyAgICBkaWUgImZhdGFsOiBOb3QgYSB2YWxpZCByZXZpc2lvbjogJGJhc2UiCitmaQorCisjCisjICQzIG11c3QgYmUgYSBzeW1ib2xpYyByZWYsIGEgdW5pcXVlIHJlZiwgb3IKKyMgYSBTSEEgb2JqZWN0IGV4cHJlc3Npb24uIEl0IGNhbiBhbHNvIGJlIG9mCisjIHRoZSBmb3JtYXQgJ2xvY2FsLW5hbWU6cmVtb3RlLW5hbWUnLgorIworbG9jYWw9JHszJToqfQorbG9jYWw9JHtsb2NhbDotSEVBRH0KK3JlbW90ZT0kezMjKjp9CitwcmV0dHlfcmVtb3RlPSR7cmVtb3RlI3JlZnMvfQorcHJldHR5X3JlbW90ZT0ke3ByZXR0eV9yZW1vdGUjaGVhZHMvfQoraGVhZD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgIiRsb2NhbCIpCitoZWFkPSR7aGVhZDotJChnaXQgc2hvdy1yZWYgLS1oZWFkcyAtLXRhZ3MgIiRsb2NhbCIgfCBjdXQgLWQnICcgLWYyKX0KK2hlYWQ9JHtoZWFkOi0kKGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSAiJGxvY2FsIil9CisKKyMgTm9uZSBvZiB0aGUgYWJvdmU/IEJhZC4KK3Rlc3QgLXogIiRoZWFkIiAmJiBkaWUgImZhdGFsOiBOb3QgYSB2YWxpZCByZXZpc2lvbjogJGxvY2FsIgorCisjIFRoaXMgYWxzbyB2ZXJpZmllcyB0aGF0IHRoZSByZXN1bHRpbmcgaGVhZCBpcyB1bmlxdWU6CisjICJnaXQgc2hvdy1yZWYiIGNvdWxkIGhhdmUgc2hvd24gbXVsdGlwbGUgbWF0Y2hpbmcgcmVmcy4uCitoZWFkcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkaGVhZCJeMCkKK3Rlc3QgLXogIiRoZWFkcmV2IiAmJiBkaWUgImZhdGFsOiBBbWJpZ3VvdXMgcmV2aXNpb246ICRsb2NhbCIKKworbG9jYWxfc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAiJGhlYWQiKQorCisjIFdhcyBpdCBhIGJyYW5jaCB3aXRoIGEgZGVzY3JpcHRpb24/CiticmFuY2hfbmFtZT0ke2hlYWQjcmVmcy9oZWFkcy99CitpZiB0ZXN0ICJ6JGJyYW5jaF9uYW1lIiA9ICJ6JGhlYWRyZWYiIHx8CisJISBnaXQgY29uZmlnICJicmFuY2guJGJyYW5jaF9uYW1lLmRlc2NyaXB0aW9uIiA+L2Rldi9udWxsCit0aGVuCisJYnJhbmNoX25hbWU9CitmaQorCittZXJnZV9iYXNlPSQoZ2l0IG1lcmdlLWJhc2UgJGJhc2VyZXYgJGhlYWRyZXYpIHx8CitkaWUgImZhdGFsOiBObyBjb21taXRzIGluIGNvbW1vbiBiZXR3ZWVuICRiYXNlIGFuZCAkaGVhZCIKKworIyAkaGVhZCBpcyB0aGUgcmVmbmFtZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisjIEZpbmQgYSByZWYgd2l0aCB0aGUgc2FtZSBuYW1lIGFzICRoZWFkIHRoYXQgZXhpc3RzIGF0IHRoZSByZW1vdGUKKyMgYW5kIHBvaW50cyB0byB0aGUgc2FtZSBjb21taXQgYXMgdGhlIGxvY2FsIG9iamVjdC4KK2ZpbmRfbWF0Y2hpbmdfcmVmPScKKwlteSAoJGhlYWQsJGhlYWRyZXYpID0gKEBBUkdWKTsKKwlteSAkcGF0dGVybiA9IHFyey9cUSRoZWFkXEUkfTsKKwlteSAoJHJlbW90ZV9zaGExLCAkZm91bmQpOworCisJd2hpbGUgKDxTVERJTj4pIHsKKwkJY2hvbXA7CisJCW15ICgkc2hhMSwgJHJlZiwgJGRlcmVmKSA9IC9eKFxTKylccysoW15eXSspKFxTKikkLzsKKworCQlpZiAoJHNoYTEgZXEgJGhlYWQpIHsKKwkJCSRmb3VuZCA9ICRyZW1vdGVfc2hhMSA9ICRzaGExOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoJHJlZiBlcSAkaGVhZCB8fCAkcmVmID1+ICRwYXR0ZXJuKSB7CisJCQlpZiAoJGRlcmVmIGVxICIiKSB7CisJCQkJIyBSZW1lbWJlciB0aGUgbWF0Y2hpbmcgb2JqZWN0IG9uIHRoZSByZW1vdGUgc2lkZQorCQkJCSRyZW1vdGVfc2hhMSA9ICRzaGExOworCQkJfQorCQkJaWYgKCRzaGExIGVxICRoZWFkcmV2KSB7CisJCQkJJGZvdW5kID0gJHJlZjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoJGZvdW5kKSB7CisJCSRyZW1vdGVfc2hhMSA9ICRoZWFkcmV2IGlmICEgZGVmaW5lZCAkcmVtb3RlX3NoYTE7CisJCXByaW50ICIkcmVtb3RlX3NoYTEgJGZvdW5kXG4iOworCX0KKycKKworc2V0IGZub3JkICQoZ2l0IGxzLXJlbW90ZSAiJHVybCIgfCBAQFBFUkxAQCAtZSAiJGZpbmRfbWF0Y2hpbmdfcmVmIiAiJHtyZW1vdGU6LUhFQUR9IiAiJGhlYWRyZXYiKQorcmVtb3RlX3NoYTE9JDIKK3JlZj0kMworCitpZiB0ZXN0IC16ICIkcmVmIgordGhlbgorCWVjaG8gIndhcm46IE5vIG1hdGNoIGZvciBjb21taXQgJGhlYWRyZXYgZm91bmQgYXQgJHVybCIgPiYyCisJZWNobyAid2FybjogQXJlIHlvdSBzdXJlIHlvdSBwdXNoZWQgJyR7cmVtb3RlOi1IRUFEfScgdGhlcmU/IiA+JjIKKwlzdGF0dXM9MQorZWxpZiB0ZXN0ICIkbG9jYWxfc2hhMSIgIT0gIiRyZW1vdGVfc2hhMSIKK3RoZW4KKwllY2hvICJ3YXJuOiAkaGVhZCBmb3VuZCBhdCAkdXJsIGJ1dCBwb2ludHMgdG8gYSBkaWZmZXJlbnQgb2JqZWN0IiA+JjIKKwllY2hvICJ3YXJuOiBBcmUgeW91IHN1cmUgeW91IHB1c2hlZCAnJHtyZW1vdGU6LUhFQUR9JyB0aGVyZT8iID4mMgorCXN0YXR1cz0xCitmaQorCisjIFNwZWNpYWwgY2FzZTogdHVybiAiZm9yX2xpbnVzIiB0byAidGFncy9mb3JfbGludXMiIHdoZW4gaXQgaXMgY29ycmVjdAoraWYgdGVzdCAiJHJlZiIgPSAicmVmcy90YWdzLyRwcmV0dHlfcmVtb3RlIgordGhlbgorCXByZXR0eV9yZW1vdGU9dGFncy8kcHJldHR5X3JlbW90ZQorZmkKKwordXJsPSQoZ2l0IGxzLXJlbW90ZSAtLWdldC11cmwgIiR1cmwiKQorCitnaXQgc2hvdyAtcyAtLWZvcm1hdD0nVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHNpbmNlIGNvbW1pdCAlSDoKKworICAlcyAoJWNpKQorCithcmUgYXZhaWxhYmxlIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBhdDoKKycgJG1lcmdlX2Jhc2UgJiYKK2VjaG8gIiAgJHVybCAkcHJldHR5X3JlbW90ZSIgJiYKK2dpdCBzaG93IC1zIC0tZm9ybWF0PScKK2ZvciB5b3UgdG8gZmV0Y2ggY2hhbmdlcyB1cCB0byAlSDoKKworICAlcyAoJWNpKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyAkaGVhZHJldiAmJgorCitpZiB0ZXN0ICQoZ2l0IGNhdC1maWxlIC10ICIkaGVhZCIpID0gdGFnCit0aGVuCisJZ2l0IGNhdC1maWxlIHRhZyAiJGhlYWQiIHwKKwlzZWQgLW4gLWUgJzEsL14kL2QnIC1lICcvXi0tLS0tQkVHSU4gUEdQIC9xJyAtZSBwCisJZWNobworCWVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitmaSAmJgorCitpZiB0ZXN0IC1uICIkYnJhbmNoX25hbWUiCit0aGVuCisJZWNobyAiKGZyb20gdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiBmb3IgJGJyYW5jaF9uYW1lIGxvY2FsIGJyYW5jaCkiCisJZWNobworCWdpdCBjb25maWcgImJyYW5jaC4kYnJhbmNoX25hbWUuZGVzY3JpcHRpb24iCisJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2ZpICYmCisKK2dpdCBzaG9ydGxvZyBeJGJhc2VyZXYgJGhlYWRyZXYgJiYKK2dpdCBkaWZmIC1NIC0tc3RhdCAtLXN1bW1hcnkgJHBhdGNoICRtZXJnZV9iYXNlLi4kaGVhZHJldiB8fCBzdGF0dXM9MQorCitleGl0ICRzdGF0dXMKZGlmZiAtLWdpdCBhL2dpdC1zZW5kLWVtYWlsLnBlcmwgYi9naXQtc2VuZC1lbWFpbC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjOTU2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtc2VuZC1lbWFpbC5wZXJsCkBAIC0wLDAgKzEsMjAyNSBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAyMDAyLDIwMDUgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyMgQ29weXJpZ2h0IDIwMDUgUnlhbiBBbmRlcnNvbiA8cnlhbkBtaWNob25saW5lLmNvbT4KKyMKKyMgR1BMIHYyIChTZWUgQ09QWUlORykKKyMKKyMgUG9ydGVkIHRvIHN1cHBvcnQgZ2l0ICJtYm94IiBmb3JtYXQgZmlsZXMgYnkgUnlhbiBBbmRlcnNvbiA8cnlhbkBtaWNob25saW5lLmNvbT4KKyMKKyMgU2VuZHMgYSBjb2xsZWN0aW9uIG9mIGVtYWlscyB0byB0aGUgZ2l2ZW4gZW1haWwgYWRkcmVzc2VzLCBkaXN0dXJiaW5nbHkgZmFzdC4KKyMKKyMgU3VwcG9ydHMgdHdvIGZvcm1hdHM6CisjIDEuIG1ib3ggZm9ybWF0IGZpbGVzIChpZ25vcmluZyBtb3N0IGhlYWRlcnMgYW5kIE1JTUUgZm9ybWF0dGluZyAtIHRoaXMgaXMgZGVzaWduZWQgZm9yIHNlbmRpbmcgcGF0Y2hlcykKKyMgMi4gVGhlIG9yaWdpbmFsIGZvcm1hdCBzdXBwb3J0IGJ5IEdyZWcncyBzY3JpcHQ6CisjICAgIGZpcnN0IGxpbmUgb2YgdGhlIG1lc3NhZ2UgaXMgd2hvIHRvIENDLAorIyAgICBhbmQgc2Vjb25kIGxpbmUgaXMgdGhlIHN1YmplY3Qgb2YgdGhlIG1lc3NhZ2UuCisjCisKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUE9TSVggcXcvc3RyZnRpbWUvOwordXNlIFRlcm06OlJlYWRMaW5lOwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBUZXh0OjpQYXJzZVdvcmRzOwordXNlIFRlcm06OkFOU0lDb2xvcjsKK3VzZSBGaWxlOjpUZW1wIHF3LyB0ZW1wZGlyIHRlbXBmaWxlIC87Cit1c2UgRmlsZTo6U3BlYzo6RnVuY3Rpb25zIHF3KGNhdGRpciBjYXRmaWxlKTsKK3VzZSBHaXQ6OkxvYWRDUEFOOjpFcnJvciBxdyg6dHJ5KTsKK3VzZSBDd2QgcXcoYWJzX3BhdGggY3dkKTsKK3VzZSBHaXQ7Cit1c2UgR2l0OjpJMThOOwordXNlIE5ldDo6RG9tYWluICgpOwordXNlIE5ldDo6U01UUCAoKTsKK3VzZSBHaXQ6OkxvYWRDUEFOOjpNYWlsOjpBZGRyZXNzOworCitHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSBxdy8gcGFzc190aHJvdWdoIC87CisKK3BhY2thZ2UgRmFrZVRlcm07CitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkcmVhc29uKSA9IEBfOworCXJldHVybiBibGVzcyBcJHJlYXNvbiwgc2hpZnQ7Cit9CitzdWIgcmVhZGxpbmUgeworCW15ICRzZWxmID0gc2hpZnQ7CisJZGllICJDYW5ub3QgdXNlIHJlYWRsaW5lIG9uIEZha2VUZXJtOiAkJHNlbGYiOworfQorcGFja2FnZSBtYWluOworCisKK3N1YiB1c2FnZSB7CisJcHJpbnQgPDxFT1Q7CitnaXQgc2VuZC1lbWFpbCBbb3B0aW9uc10gPGZpbGUgfCBkaXJlY3RvcnkgfCByZXYtbGlzdCBvcHRpb25zID4KK2dpdCBzZW5kLWVtYWlsIC0tZHVtcC1hbGlhc2VzCisKKyAgQ29tcG9zaW5nOgorICAgIC0tZnJvbSAgICAgICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsIEZyb206CisgICAgLS1bbm8tXXRvICAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgVG86CisgICAgLS1bbm8tXWNjICAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgQ2M6CisgICAgLS1bbm8tXWJjYyAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgQmNjOgorICAgIC0tc3ViamVjdCAgICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsICJTdWJqZWN0OiIKKyAgICAtLXJlcGx5LXRvICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCAiUmVwbHktVG86IgorICAgIC0taW4tcmVwbHktdG8gICAgICAgICAgIDxzdHI+ICAqIEVtYWlsICJJbi1SZXBseS1UbzoiCisgICAgLS1bbm8tXXhtYWlsZXIgICAgICAgICAgICAgICAgICogQWRkICJYLU1haWxlcjoiIGhlYWRlciAoZGVmYXVsdCkuCisgICAgLS1bbm8tXWFubm90YXRlICAgICAgICAgICAgICAgICogUmV2aWV3IGVhY2ggcGF0Y2ggdGhhdCB3aWxsIGJlIHNlbnQgaW4gYW4gZWRpdG9yLgorICAgIC0tY29tcG9zZSAgICAgICAgICAgICAgICAgICAgICAqIE9wZW4gYW4gZWRpdG9yIGZvciBpbnRyb2R1Y3Rpb24uCisgICAgLS1jb21wb3NlLWVuY29kaW5nICAgICAgPHN0cj4gICogRW5jb2RpbmcgdG8gYXNzdW1lIGZvciBpbnRyb2R1Y3Rpb24uCisgICAgLS04Yml0LWVuY29kaW5nICAgICAgICAgPHN0cj4gICogRW5jb2RpbmcgdG8gYXNzdW1lIDhiaXQgbWFpbHMgaWYgdW5kZWNsYXJlZAorICAgIC0tdHJhbnNmZXItZW5jb2RpbmcgICAgIDxzdHI+ICAqIFRyYW5zZmVyIGVuY29kaW5nIHRvIHVzZSAocXVvdGVkLXByaW50YWJsZSwgOGJpdCwgYmFzZTY0KQorCisgIFNlbmRpbmc6CisgICAgLS1lbnZlbG9wZS1zZW5kZXIgICAgICAgPHN0cj4gICogRW1haWwgZW52ZWxvcGUgc2VuZGVyLgorICAgIC0tc210cC1zZXJ2ZXIgICAgICAgPHN0cjppbnQ+ICAqIE91dGdvaW5nIFNNVFAgc2VydmVyIHRvIHVzZS4gVGhlIHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvcHRpb25hbC4gRGVmYXVsdCAnbG9jYWxob3N0Jy4KKyAgICAtLXNtdHAtc2VydmVyLW9wdGlvbiAgICA8c3RyPiAgKiBPdXRnb2luZyBTTVRQIHNlcnZlciBvcHRpb24gdG8gdXNlLgorICAgIC0tc210cC1zZXJ2ZXItcG9ydCAgICAgIDxpbnQ+ICAqIE91dGdvaW5nIFNNVFAgc2VydmVyIHBvcnQuCisgICAgLS1zbXRwLXVzZXIgICAgICAgICAgICAgPHN0cj4gICogVXNlcm5hbWUgZm9yIFNNVFAtQVVUSC4KKyAgICAtLXNtdHAtcGFzcyAgICAgICAgICAgICA8c3RyPiAgKiBQYXNzd29yZCBmb3IgU01UUC1BVVRIOyBub3QgbmVjZXNzYXJ5LgorICAgIC0tc210cC1lbmNyeXB0aW9uICAgICAgIDxzdHI+ICAqIHRscyBvciBzc2w7IGFueXRoaW5nIGVsc2UgZGlzYWJsZXMuCisgICAgLS1zbXRwLXNzbCAgICAgICAgICAgICAgICAgICAgICogRGVwcmVjYXRlZC4gVXNlICctLXNtdHAtZW5jcnlwdGlvbiBzc2wnLgorICAgIC0tc210cC1zc2wtY2VydC1wYXRoICAgIDxzdHI+ICAqIFBhdGggdG8gY2EtY2VydGlmaWNhdGVzIChlaXRoZXIgZGlyZWN0b3J5IG9yIGZpbGUpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3MgYW4gZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUgY2VydGlmaWNhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24uCisgICAgLS1zbXRwLWRvbWFpbiAgICAgICAgICAgPHN0cj4gICogVGhlIGRvbWFpbiBuYW1lIHNlbnQgdG8gSEVMTy9FSExPIGhhbmRzaGFrZQorICAgIC0tc210cC1hdXRoICAgICAgICAgICAgIDxzdHI+ICAqIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgQVVUSCBtZWNoYW5pc21zLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub25lIiB0byBkaXNhYmxlIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2V0dGluZyBmb3JjZXMgdG8gdXNlIG9uZSBvZiB0aGUgbGlzdGVkIG1lY2hhbmlzbXMuCisgICAgLS1uby1zbXRwLWF1dGggICAgICAgICAgICAgICAgICAgRGlzYWJsZSBTTVRQIGF1dGhlbnRpY2F0aW9uLiBTaG9ydGhhbmQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0tc210cC1hdXRoPW5vbmVgCisgICAgLS1zbXRwLWRlYnVnICAgICAgICAgICAgPDB8MT4gICogRGlzYWJsZSwgZW5hYmxlIE5ldDo6U01UUCBkZWJ1Zy4KKworICAgIC0tYmF0Y2gtc2l6ZSAgICAgICAgICAgIDxpbnQ+ICAqIHNlbmQgbWF4IDxpbnQ+IG1lc3NhZ2UgcGVyIGNvbm5lY3Rpb24uCisgICAgLS1yZWxvZ2luLWRlbGF5ICAgICAgICAgPGludD4gICogZGVsYXkgPGludD4gc2Vjb25kcyBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGxvZ2luLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLWJhdGNoLXNpemUKKworICBBdXRvbWF0aW5nOgorICAgIC0taWRlbnRpdHkgICAgICAgICAgICAgIDxzdHI+ICAqIFVzZSB0aGUgc2VuZGVtYWlsLjxpZD4gb3B0aW9ucy4KKyAgICAtLXRvLWNtZCAgICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBUbzogdmlhIGA8c3RyPiBcJHBhdGNoX3BhdGhgCisgICAgLS1jYy1jbWQgICAgICAgICAgICAgICAgPHN0cj4gICogRW1haWwgQ2M6IHZpYSBgPHN0cj4gXCRwYXRjaF9wYXRoYAorICAgIC0tc3VwcHJlc3MtY2MgICAgICAgICAgIDxzdHI+ICAqIGF1dGhvciwgc2VsZiwgc29iLCBjYywgY2NjbWQsIGJvZHksIGJvZHljYywgbWlzYy1ieSwgYWxsLgorICAgIC0tW25vLV1jYy1jb3ZlciAgICAgICAgICAgICAgICAqIEVtYWlsIENjOiBhZGRyZXNzZXMgaW4gdGhlIGNvdmVyIGxldHRlci4KKyAgICAtLVtuby1ddG8tY292ZXIgICAgICAgICAgICAgICAgKiBFbWFpbCBUbzogYWRkcmVzc2VzIGluIHRoZSBjb3ZlciBsZXR0ZXIuCisgICAgLS1bbm8tXXNpZ25lZC1vZmYtYnktY2MgICAgICAgICogU2VuZCB0byBTaWduZWQtb2ZmLWJ5OiBhZGRyZXNzZXMuIERlZmF1bHQgb24uCisgICAgLS1bbm8tXXN1cHByZXNzLWZyb20gICAgICAgICAgICogU2VuZCB0byBzZWxmLiBEZWZhdWx0IG9mZi4KKyAgICAtLVtuby1dY2hhaW4tcmVwbHktdG8gICAgICAgICAgKiBDaGFpbiBJbi1SZXBseS1UbzogZmllbGRzLiBEZWZhdWx0IG9mZi4KKyAgICAtLVtuby1ddGhyZWFkICAgICAgICAgICAgICAgICAgKiBVc2UgSW4tUmVwbHktVG86IGZpZWxkLiBEZWZhdWx0IG9uLgorCisgIEFkbWluaXN0ZXJpbmc6CisgICAgLS1jb25maXJtICAgICAgICAgICAgICAgPHN0cj4gICogQ29uZmlybSByZWNpcGllbnRzIGJlZm9yZSBzZW5kaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8sIGNjLCBjb21wb3NlLCBhbHdheXMsIG9yIG5ldmVyLgorICAgIC0tcXVpZXQgICAgICAgICAgICAgICAgICAgICAgICAqIE91dHB1dCBvbmUgbGluZSBvZiBpbmZvIHBlciBlbWFpbC4KKyAgICAtLWRyeS1ydW4gICAgICAgICAgICAgICAgICAgICAgKiBEb24ndCBhY3R1YWxseSBzZW5kIHRoZSBlbWFpbHMuCisgICAgLS1bbm8tXXZhbGlkYXRlICAgICAgICAgICAgICAgICogUGVyZm9ybSBwYXRjaCBzYW5pdHkgY2hlY2tzLiBEZWZhdWx0IG9uLgorICAgIC0tW25vLV1mb3JtYXQtcGF0Y2ggICAgICAgICAgICAqIHVuZGVyc3RhbmQgYW55IG5vbiBvcHRpb25hbCBhcmd1bWVudHMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZ2l0IGZvcm1hdC1wYXRjaGAgb25lcy4KKyAgICAtLWZvcmNlICAgICAgICAgICAgICAgICAgICAgICAgKiBTZW5kIGV2ZW4gaWYgc2FmZXR5IGNoZWNrcyB3b3VsZCBwcmV2ZW50IGl0LgorCisgIEluZm9ybWF0aW9uOgorICAgIC0tZHVtcC1hbGlhc2VzICAgICAgICAgICAgICAgICAqIER1bXAgY29uZmlndXJlZCBhbGlhc2VzIGFuZCBleGl0LgorCitFT1QKKwlleGl0KDEpOworfQorCitzdWIgY29tcGxldGlvbl9oZWxwZXIgeworICAgIHByaW50IEdpdDo6Y29tbWFuZCgnZm9ybWF0LXBhdGNoJywgJy0tZ2l0LWNvbXBsZXRpb24taGVscGVyJyk7CisgICAgZXhpdCgwKTsKK30KKworIyBtb3N0IG1haWwgc2VydmVycyBnZW5lcmF0ZSB0aGUgRGF0ZTogaGVhZGVyLCBidXQgbm90IGFsbC4uLgorc3ViIGZvcm1hdF8yODIyX3RpbWUgeworCW15ICgkdGltZSkgPSBAXzsKKwlteSBAbG9jYWx0bSA9IGxvY2FsdGltZSgkdGltZSk7CisJbXkgQGdtdHRtID0gZ210aW1lKCR0aW1lKTsKKwlteSAkbG9jYWxtaW4gPSAkbG9jYWx0bVsxXSArICRsb2NhbHRtWzJdICogNjA7CisJbXkgJGdtdG1pbiA9ICRnbXR0bVsxXSArICRnbXR0bVsyXSAqIDYwOworCWlmICgkbG9jYWx0bVswXSAhPSAkZ210dG1bMF0pIHsKKwkJZGllIF9fKCJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iKTsKKwl9CisJaWYgKCgoJGdtdHRtWzZdICsgMSkgJSA3KSA9PSAkbG9jYWx0bVs2XSkgeworCQkkbG9jYWxtaW4gKz0gMTQ0MDsKKwl9IGVsc2lmICgoKCRnbXR0bVs2XSAtIDEpICUgNykgPT0gJGxvY2FsdG1bNl0pIHsKKwkJJGxvY2FsbWluIC09IDE0NDA7CisJfSBlbHNpZiAoJGdtdHRtWzZdICE9ICRsb2NhbHRtWzZdKSB7CisJCWRpZSBfXygibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iKTsKKwl9CisJbXkgJG9mZnNldCA9ICRsb2NhbG1pbiAtICRnbXRtaW47CisJbXkgJG9mZmhvdXIgPSAkb2Zmc2V0IC8gNjA7CisJbXkgJG9mZm1pbiA9IGFicygkb2Zmc2V0ICUgNjApOworCWlmIChhYnMoJG9mZmhvdXIpID49IDI0KSB7CisJCWRpZSBfXygibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iKTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZigiJXMsICUyZCAlcyAlZCAlMDJkOiUwMmQ6JTAyZCAlcyUwMmQlMDJkIiwKKwkJICAgICAgIHF3KFN1biBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdClbJGxvY2FsdG1bNl1dLAorCQkgICAgICAgJGxvY2FsdG1bM10sCisJCSAgICAgICBxdyhKYW4gRmViIE1hciBBcHIgTWF5IEp1bgorCQkJICBKdWwgQXVnIFNlcCBPY3QgTm92IERlYylbJGxvY2FsdG1bNF1dLAorCQkgICAgICAgJGxvY2FsdG1bNV0rMTkwMCwKKwkJICAgICAgICRsb2NhbHRtWzJdLAorCQkgICAgICAgJGxvY2FsdG1bMV0sCisJCSAgICAgICAkbG9jYWx0bVswXSwKKwkJICAgICAgICgkb2Zmc2V0ID49IDApID8gJysnIDogJy0nLAorCQkgICAgICAgYWJzKCRvZmZob3VyKSwKKwkJICAgICAgICRvZmZtaW4sCisJCSAgICAgICApOworfQorCitteSAkaGF2ZV9lbWFpbF92YWxpZCA9IGV2YWwgeyByZXF1aXJlIEVtYWlsOjpWYWxpZDsgMSB9OworbXkgJHNtdHA7CitteSAkYXV0aDsKK215ICRudW1fc2VudCA9IDA7CisKKyMgUmVnZXhlcyBmb3IgUkZDIDIwNDcgcHJvZHVjdGlvbnMuCitteSAkcmVfdG9rZW4gPSBxci9bXl1bKCk8PkAsOzpcXCJcLz8uPSBcMDAwLVwwMzdcMTc3LVwzNzddKy87CitteSAkcmVfZW5jb2RlZF90ZXh0ID0gcXIvW14/IFwwMDAtXDAzN1wxNzctXDM3N10rLzsKK215ICRyZV9lbmNvZGVkX3dvcmQgPSBxci89XD8oJHJlX3Rva2VuKVw/KCRyZV90b2tlbilcPygkcmVfZW5jb2RlZF90ZXh0KVw/PS87CisKKyMgVmFyaWFibGVzIHdlIGZpbGwgaW4gYXV0b21hdGljYWxseSwgb3IgdmlhIHByb21wdGluZzoKK215IChAdG8sQGNjLEB4aCwkZW52ZWxvcGVfc2VuZGVyLAorCSRpbml0aWFsX2luX3JlcGx5X3RvLCRyZXBseV90bywkaW5pdGlhbF9zdWJqZWN0LEBmaWxlcywKKwkkYXV0aG9yLCRzZW5kZXIsJHNtdHBfYXV0aHBhc3MsJGFubm90YXRlLCRjb21wb3NlLCR0aW1lKTsKKyMgVGhpbmdzIHdlIGVpdGhlciBnZXQgZnJvbSBjb25maWcsICpvciogYXJlIG92ZXJyaWRkZW4gb24gdGhlCisjIGNvbW1hbmQtbGluZS4KK215ICgkbm9fY2MsICRub190bywgJG5vX2JjYywgJG5vX2lkZW50aXR5KTsKK215IChAY29uZmlnX3RvLCBAZ2V0b3B0X3RvKTsKK215IChAY29uZmlnX2NjLCBAZ2V0b3B0X2NjKTsKK215IChAY29uZmlnX2JjYywgQGdldG9wdF9iY2MpOworCisjIEV4YW1wbGUgcmVwbHkgdG86CisjJGluaXRpYWxfaW5fcmVwbHlfdG8gPSAnJzsgIzwyMDA1MDIwMzE3MzIwOC5HQTIzOTY0QGZvb2Jhci5jb20+JzsKKworbXkgJHJlcG8gPSBldmFsIHsgR2l0LT5yZXBvc2l0b3J5KCkgfTsKK215IEByZXBvID0gJHJlcG8gPyAoJHJlcG8pIDogKCk7CitteSAkdGVybSA9IGV2YWwgeworCSRFTlZ7IkdJVF9TRU5EX0VNQUlMX05PVFRZIn0KKwkJPyBuZXcgVGVybTo6UmVhZExpbmUgJ2dpdC1zZW5kLWVtYWlsJywgXCpTVERJTiwgXCpTVERPVVQKKwkJOiBuZXcgVGVybTo6UmVhZExpbmUgJ2dpdC1zZW5kLWVtYWlsJzsKK307CitpZiAoJEApIHsKKwkkdGVybSA9IG5ldyBGYWtlVGVybSAiJEA6IGdvaW5nIG5vbi1pbnRlcmFjdGl2ZSI7Cit9CisKKyMgQmVoYXZpb3IgbW9kaWZpY2F0aW9uIHZhcmlhYmxlcworbXkgKCRxdWlldCwgJGRyeV9ydW4pID0gKDAsIDApOworbXkgJGZvcm1hdF9wYXRjaDsKK215ICRjb21wb3NlX2ZpbGVuYW1lOworbXkgJGZvcmNlID0gMDsKK215ICRkdW1wX2FsaWFzZXMgPSAwOworCisjIEhhbmRsZSBpbnRlcmFjdGl2ZSBlZGl0aW9uIG9mIGZpbGVzLgorbXkgJG11bHRpZWRpdDsKK215ICRlZGl0b3I7CisKK3N1YiBkb19lZGl0IHsKKwlpZiAoIWRlZmluZWQoJGVkaXRvcikpIHsKKwkJJGVkaXRvciA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKCd2YXInLCAnR0lUX0VESVRPUicpOworCX0KKwlpZiAoZGVmaW5lZCgkbXVsdGllZGl0KSAmJiAhJG11bHRpZWRpdCkgeworCQltYXAgeworCQkJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJF8pOworCQkJaWYgKCgkPyAmIDEyNykgfHwgKCQ/ID4+IDgpKSB7CisJCQkJZGllKF9fKCJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciKSk7CisJCQl9CisJCX0gQF87CisJfSBlbHNlIHsKKwkJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgQF8pOworCQlpZiAoKCQ/ICYgMTI3KSB8fCAoJD8gPj4gOCkpIHsKKwkJCWRpZShfXygidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIikpOworCQl9CisJfQorfQorCisjIFZhcmlhYmxlcyB3aXRoIGNvcnJlc3BvbmRpbmcgY29uZmlnIHNldHRpbmdzCitteSAoJHN1cHByZXNzX2Zyb20sICRzaWduZWRfb2ZmX2J5X2NjKTsKK215ICgkY292ZXJfY2MsICRjb3Zlcl90byk7CitteSAoJHRvX2NtZCwgJGNjX2NtZCk7CitteSAoJHNtdHBfc2VydmVyLCAkc210cF9zZXJ2ZXJfcG9ydCwgQHNtdHBfc2VydmVyX29wdGlvbnMpOworbXkgKCRzbXRwX2F1dGh1c2VyLCAkc210cF9lbmNyeXB0aW9uLCAkc210cF9zc2xfY2VydF9wYXRoKTsKK215ICgkYmF0Y2hfc2l6ZSwgJHJlbG9naW5fZGVsYXkpOworbXkgKCRpZGVudGl0eSwgJGFsaWFzZmlsZXR5cGUsIEBhbGlhc19maWxlcywgJHNtdHBfZG9tYWluLCAkc210cF9hdXRoKTsKK215ICgkY29uZmlybSk7CitteSAoQHN1cHByZXNzX2NjKTsKK215ICgkYXV0b184Yml0X2VuY29kaW5nKTsKK215ICgkY29tcG9zZV9lbmNvZGluZyk7CisjIFZhcmlhYmxlcyB3aXRoIGNvcnJlc3BvbmRpbmcgY29uZmlnIHNldHRpbmdzICYgaGFyZGNvZGVkIGRlZmF1bHRzCitteSAoJGRlYnVnX25ldF9zbXRwKSA9IDA7CQkjIE5ldDo6U01UUCwgc2VlIHNlbmRfbWVzc2FnZSgpCitteSAkdGhyZWFkID0gMTsKK215ICRjaGFpbl9yZXBseV90byA9IDA7CitteSAkdXNlX3htYWlsZXIgPSAxOworbXkgJHZhbGlkYXRlID0gMTsKK215ICR0YXJnZXRfeGZlcl9lbmNvZGluZyA9ICdhdXRvJzsKKworbXkgJWNvbmZpZ19ib29sX3NldHRpbmdzID0gKAorICAgICJ0aHJlYWQiID0+IFwkdGhyZWFkLAorICAgICJjaGFpbnJlcGx5dG8iID0+IFwkY2hhaW5fcmVwbHlfdG8sCisgICAgInN1cHByZXNzZnJvbSIgPT4gXCRzdXBwcmVzc19mcm9tLAorICAgICJzaWduZWRvZmZieWNjIiA9PiBcJHNpZ25lZF9vZmZfYnlfY2MsCisgICAgImNjY292ZXIiID0+IFwkY292ZXJfY2MsCisgICAgInRvY292ZXIiID0+IFwkY292ZXJfdG8sCisgICAgInNpZ25lZG9mZmNjIiA9PiBcJHNpZ25lZF9vZmZfYnlfY2MsCisgICAgInZhbGlkYXRlIiA9PiBcJHZhbGlkYXRlLAorICAgICJtdWx0aWVkaXQiID0+IFwkbXVsdGllZGl0LAorICAgICJhbm5vdGF0ZSIgPT4gXCRhbm5vdGF0ZSwKKyAgICAieG1haWxlciIgPT4gXCR1c2VfeG1haWxlciwKKyk7CisKK215ICVjb25maWdfc2V0dGluZ3MgPSAoCisgICAgInNtdHBzZXJ2ZXIiID0+IFwkc210cF9zZXJ2ZXIsCisgICAgInNtdHBzZXJ2ZXJwb3J0IiA9PiBcJHNtdHBfc2VydmVyX3BvcnQsCisgICAgInNtdHBzZXJ2ZXJvcHRpb24iID0+IFxAc210cF9zZXJ2ZXJfb3B0aW9ucywKKyAgICAic210cHVzZXIiID0+IFwkc210cF9hdXRodXNlciwKKyAgICAic210cHBhc3MiID0+IFwkc210cF9hdXRocGFzcywKKyAgICAic210cGRvbWFpbiIgPT4gXCRzbXRwX2RvbWFpbiwKKyAgICAic210cGF1dGgiID0+IFwkc210cF9hdXRoLAorICAgICJzbXRwYmF0Y2hzaXplIiA9PiBcJGJhdGNoX3NpemUsCisgICAgInNtdHByZWxvZ2luZGVsYXkiID0+IFwkcmVsb2dpbl9kZWxheSwKKyAgICAidG8iID0+IFxAY29uZmlnX3RvLAorICAgICJ0b2NtZCIgPT4gXCR0b19jbWQsCisgICAgImNjIiA9PiBcQGNvbmZpZ19jYywKKyAgICAiY2NjbWQiID0+IFwkY2NfY21kLAorICAgICJhbGlhc2ZpbGV0eXBlIiA9PiBcJGFsaWFzZmlsZXR5cGUsCisgICAgImJjYyIgPT4gXEBjb25maWdfYmNjLAorICAgICJzdXBwcmVzc2NjIiA9PiBcQHN1cHByZXNzX2NjLAorICAgICJlbnZlbG9wZXNlbmRlciIgPT4gXCRlbnZlbG9wZV9zZW5kZXIsCisgICAgImNvbmZpcm0iICAgPT4gXCRjb25maXJtLAorICAgICJmcm9tIiA9PiBcJHNlbmRlciwKKyAgICAiYXNzdW1lOGJpdGVuY29kaW5nIiA9PiBcJGF1dG9fOGJpdF9lbmNvZGluZywKKyAgICAiY29tcG9zZWVuY29kaW5nIiA9PiBcJGNvbXBvc2VfZW5jb2RpbmcsCisgICAgInRyYW5zZmVyZW5jb2RpbmciID0+IFwkdGFyZ2V0X3hmZXJfZW5jb2RpbmcsCispOworCitteSAlY29uZmlnX3BhdGhfc2V0dGluZ3MgPSAoCisgICAgImFsaWFzZXNmaWxlIiA9PiBcQGFsaWFzX2ZpbGVzLAorICAgICJzbXRwc3NsY2VydHBhdGgiID0+IFwkc210cF9zc2xfY2VydF9wYXRoLAorKTsKKworIyBIYW5kbGUgVW5jb3V0aCBUZXJtaW5hdGlvbgorc3ViIHNpZ25hbF9oYW5kbGVyIHsKKworCSMgTWFrZSB0ZXh0IG5vcm1hbAorCXByaW50IGNvbG9yKCJyZXNldCIpLCAiXG4iOworCisJIyBTTVRQIHBhc3N3b3JkIG1hc2tlZAorCXN5c3RlbSAic3R0eSBlY2hvIjsKKworCSMgdG1wIGZpbGVzIGZyb20gLS1jb21wb3NlCisJaWYgKGRlZmluZWQgJGNvbXBvc2VfZmlsZW5hbWUpIHsKKwkJaWYgKC1lICRjb21wb3NlX2ZpbGVuYW1lKSB7CisJCQlwcmludGYgX18oIiclcycgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gIi4KKwkJCQkgICJvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIiksCisJCQkJICAkY29tcG9zZV9maWxlbmFtZTsKKwkJfQorCQlpZiAoLWUgKCRjb21wb3NlX2ZpbGVuYW1lIC4gIi5maW5hbCIpKSB7CisJCQlwcmludGYgX18oIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIiksCisJCQkJICAkY29tcG9zZV9maWxlbmFtZTsKKwkJfQorCX0KKworCWV4aXQ7Cit9OworCiskU0lHe1RFUk19ID0gXCZzaWduYWxfaGFuZGxlcjsKKyRTSUd7SU5UfSAgPSBcJnNpZ25hbF9oYW5kbGVyOworCisjIFJlYWQgb3VyIHNlbmRlbWFpbC4qIGNvbmZpZworc3ViIHJlYWRfY29uZmlnIHsKKwlteSAoJGNvbmZpZ3VyZWQsICRwcmVmaXgpID0gQF87CisKKwlmb3JlYWNoIG15ICRzZXR0aW5nIChrZXlzICVjb25maWdfYm9vbF9zZXR0aW5ncykgeworCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19ib29sX3NldHRpbmdzeyRzZXR0aW5nfTsKKwkJbXkgJHYgPSBHaXQ6OmNvbmZpZ19ib29sKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpOworCQluZXh0IHVubGVzcyBkZWZpbmVkICR2OworCQluZXh0IGlmICRjb25maWd1cmVkLT57JHNldHRpbmd9Kys7CisJCSQkdGFyZ2V0ID0gJHY7CisJfQorCisJZm9yZWFjaCBteSAkc2V0dGluZyAoa2V5cyAlY29uZmlnX3BhdGhfc2V0dGluZ3MpIHsKKwkJbXkgJHRhcmdldCA9ICRjb25maWdfcGF0aF9zZXR0aW5nc3skc2V0dGluZ307CisJCWlmIChyZWYoJHRhcmdldCkgZXEgIkFSUkFZIikgeworCQkJbXkgQHZhbHVlcyA9IEdpdDo6Y29uZmlnX3BhdGgoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CisJCQluZXh0IHVubGVzcyBAdmFsdWVzOworCQkJbmV4dCBpZiAkY29uZmlndXJlZC0+eyRzZXR0aW5nfSsrOworCQkJQCR0YXJnZXQgPSBAdmFsdWVzOworCQl9CisJCWVsc2UgeworCQkJbXkgJHYgPSBHaXQ6OmNvbmZpZ19wYXRoKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpOworCQkJbmV4dCB1bmxlc3MgZGVmaW5lZCAkdjsKKwkJCW5leHQgaWYgJGNvbmZpZ3VyZWQtPnskc2V0dGluZ30rKzsKKwkJCSQkdGFyZ2V0ID0gJHY7CisJCX0KKwl9CisKKwlmb3JlYWNoIG15ICRzZXR0aW5nIChrZXlzICVjb25maWdfc2V0dGluZ3MpIHsKKwkJbXkgJHRhcmdldCA9ICRjb25maWdfc2V0dGluZ3N7JHNldHRpbmd9OworCQlpZiAocmVmKCR0YXJnZXQpIGVxICJBUlJBWSIpIHsKKwkJCW15IEB2YWx1ZXMgPSBHaXQ6OmNvbmZpZyhAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKTsKKwkJCW5leHQgdW5sZXNzIEB2YWx1ZXM7CisJCQluZXh0IGlmICRjb25maWd1cmVkLT57JHNldHRpbmd9Kys7CisJCQlAJHRhcmdldCA9IEB2YWx1ZXM7CisJCX0KKwkJZWxzZSB7CisJCQlteSAkdiA9IEdpdDo6Y29uZmlnKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpOworCQkJbmV4dCB1bmxlc3MgZGVmaW5lZCAkdjsKKwkJCW5leHQgaWYgJGNvbmZpZ3VyZWQtPnskc2V0dGluZ30rKzsKKwkJCSQkdGFyZ2V0ID0gJHY7CisJCX0KKwl9CisKKwlpZiAoIWRlZmluZWQgJHNtdHBfZW5jcnlwdGlvbikgeworCQlteSAkc2V0dGluZyA9ICIkcHJlZml4LnNtdHBlbmNyeXB0aW9uIjsKKwkJbXkgJGVuYyA9IEdpdDo6Y29uZmlnKEByZXBvLCAkc2V0dGluZyk7CisJCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkZW5jOworCQlyZXR1cm4gaWYgJGNvbmZpZ3VyZWQtPnskc2V0dGluZ30rKzsKKwkJaWYgKGRlZmluZWQgJGVuYykgeworCQkJJHNtdHBfZW5jcnlwdGlvbiA9ICRlbmM7CisJCX0gZWxzaWYgKEdpdDo6Y29uZmlnX2Jvb2woQHJlcG8sICIkcHJlZml4LnNtdHBzc2wiKSkgeworCQkJJHNtdHBfZW5jcnlwdGlvbiA9ICdzc2wnOworCQl9CisJfQorfQorCisjIHNlbmRlbWFpbC5pZGVudGl0eSB5aWVsZHMgdG8gLS1pZGVudGl0eS4gV2UgbXVzdCBwYXJzZSB0aGlzCisjIHNwZWNpYWwtY2FzZSBmaXJzdCBiZWZvcmUgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyBpcyByZWFkLgorJGlkZW50aXR5ID0gR2l0Ojpjb25maWcoQHJlcG8sICJzZW5kZW1haWwuaWRlbnRpdHkiKTsKK215ICRyYyA9IEdldE9wdGlvbnMoCisJImlkZW50aXR5PXMiID0+IFwkaWRlbnRpdHksCisJIm5vLWlkZW50aXR5IiA9PiBcJG5vX2lkZW50aXR5LAorKTsKK3VzYWdlKCkgdW5sZXNzICRyYzsKK3VuZGVmICRpZGVudGl0eSBpZiAkbm9faWRlbnRpdHk7CisKKyMgTm93IHdlIGtub3cgZW5vdWdoIHRvIHJlYWQgdGhlIGNvbmZpZworeworICAgIG15ICVjb25maWd1cmVkOworICAgIHJlYWRfY29uZmlnKFwlY29uZmlndXJlZCwgInNlbmRlbWFpbC4kaWRlbnRpdHkiKSBpZiBkZWZpbmVkICRpZGVudGl0eTsKKyAgICByZWFkX2NvbmZpZyhcJWNvbmZpZ3VyZWQsICJzZW5kZW1haWwiKTsKK30KKworIyBCZWdpbiBieSBhY2N1bXVsYXRpbmcgYWxsIHRoZSB2YXJpYWJsZXMgKGRlZmluZWQgYWJvdmUpLCB0aGF0IHdlIHdpbGwgZW5kIHVwCisjIG5lZWRpbmcsIGZpcnN0LCBmcm9tIHRoZSBjb21tYW5kIGxpbmU6CisKK215ICRoZWxwOworbXkgJGdpdF9jb21wbGV0aW9uX2hlbHBlcjsKKyRyYyA9IEdldE9wdGlvbnMoImgiID0+IFwkaGVscCwKKyAgICAgICAgICAgICAgICAgImR1bXAtYWxpYXNlcyIgPT4gXCRkdW1wX2FsaWFzZXMpOwordXNhZ2UoKSB1bmxlc3MgJHJjOworZGllIF9fKCItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iKQorICAgIGlmICEkaGVscCBhbmQgJGR1bXBfYWxpYXNlcyBhbmQgQEFSR1Y7CiskcmMgPSBHZXRPcHRpb25zKAorCQkgICAgInNlbmRlcnxmcm9tPXMiID0+IFwkc2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAiaW4tcmVwbHktdG89cyIgPT4gXCRpbml0aWFsX2luX3JlcGx5X3RvLAorCQkgICAgInJlcGx5LXRvPXMiID0+IFwkcmVwbHlfdG8sCisJCSAgICAic3ViamVjdD1zIiA9PiBcJGluaXRpYWxfc3ViamVjdCwKKwkJICAgICJ0bz1zIiA9PiBcQGdldG9wdF90bywKKwkJICAgICJ0by1jbWQ9cyIgPT4gXCR0b19jbWQsCisJCSAgICAibm8tdG8iID0+IFwkbm9fdG8sCisJCSAgICAiY2M9cyIgPT4gXEBnZXRvcHRfY2MsCisJCSAgICAibm8tY2MiID0+IFwkbm9fY2MsCisJCSAgICAiYmNjPXMiID0+IFxAZ2V0b3B0X2JjYywKKwkJICAgICJuby1iY2MiID0+IFwkbm9fYmNjLAorCQkgICAgImNoYWluLXJlcGx5LXRvISIgPT4gXCRjaGFpbl9yZXBseV90bywKKwkJICAgICJuby1jaGFpbi1yZXBseS10byIgPT4gc3ViIHskY2hhaW5fcmVwbHlfdG8gPSAwfSwKKwkJICAgICJzbXRwLXNlcnZlcj1zIiA9PiBcJHNtdHBfc2VydmVyLAorCQkgICAgInNtdHAtc2VydmVyLW9wdGlvbj1zIiA9PiBcQHNtdHBfc2VydmVyX29wdGlvbnMsCisJCSAgICAic210cC1zZXJ2ZXItcG9ydD1zIiA9PiBcJHNtdHBfc2VydmVyX3BvcnQsCisJCSAgICAic210cC11c2VyPXMiID0+IFwkc210cF9hdXRodXNlciwKKwkJICAgICJzbXRwLXBhc3M6cyIgPT4gXCRzbXRwX2F1dGhwYXNzLAorCQkgICAgInNtdHAtc3NsIiA9PiBzdWIgeyAkc210cF9lbmNyeXB0aW9uID0gJ3NzbCcgfSwKKwkJICAgICJzbXRwLWVuY3J5cHRpb249cyIgPT4gXCRzbXRwX2VuY3J5cHRpb24sCisJCSAgICAic210cC1zc2wtY2VydC1wYXRoPXMiID0+IFwkc210cF9zc2xfY2VydF9wYXRoLAorCQkgICAgInNtdHAtZGVidWc6aSIgPT4gXCRkZWJ1Z19uZXRfc210cCwKKwkJICAgICJzbXRwLWRvbWFpbjpzIiA9PiBcJHNtdHBfZG9tYWluLAorCQkgICAgInNtdHAtYXV0aD1zIiA9PiBcJHNtdHBfYXV0aCwKKwkJICAgICJuby1zbXRwLWF1dGgiID0+IHN1YiB7JHNtdHBfYXV0aCA9ICdub25lJ30sCisJCSAgICAiYW5ub3RhdGUhIiA9PiBcJGFubm90YXRlLAorCQkgICAgIm5vLWFubm90YXRlIiA9PiBzdWIgeyRhbm5vdGF0ZSA9IDB9LAorCQkgICAgImNvbXBvc2UiID0+IFwkY29tcG9zZSwKKwkJICAgICJxdWlldCIgPT4gXCRxdWlldCwKKwkJICAgICJjYy1jbWQ9cyIgPT4gXCRjY19jbWQsCisJCSAgICAic3VwcHJlc3MtZnJvbSEiID0+IFwkc3VwcHJlc3NfZnJvbSwKKwkJICAgICJuby1zdXBwcmVzcy1mcm9tIiA9PiBzdWIgeyRzdXBwcmVzc19mcm9tID0gMH0sCisJCSAgICAic3VwcHJlc3MtY2M9cyIgPT4gXEBzdXBwcmVzc19jYywKKwkJICAgICJzaWduZWQtb2ZmLWNjfHNpZ25lZC1vZmYtYnktY2MhIiA9PiBcJHNpZ25lZF9vZmZfYnlfY2MsCisJCSAgICAibm8tc2lnbmVkLW9mZi1jY3xuby1zaWduZWQtb2ZmLWJ5LWNjIiA9PiBzdWIgeyRzaWduZWRfb2ZmX2J5X2NjID0gMH0sCisJCSAgICAiY2MtY292ZXJ8Y2MtY292ZXIhIiA9PiBcJGNvdmVyX2NjLAorCQkgICAgIm5vLWNjLWNvdmVyIiA9PiBzdWIgeyRjb3Zlcl9jYyA9IDB9LAorCQkgICAgInRvLWNvdmVyfHRvLWNvdmVyISIgPT4gXCRjb3Zlcl90bywKKwkJICAgICJuby10by1jb3ZlciIgPT4gc3ViIHskY292ZXJfdG8gPSAwfSwKKwkJICAgICJjb25maXJtPXMiID0+IFwkY29uZmlybSwKKwkJICAgICJkcnktcnVuIiA9PiBcJGRyeV9ydW4sCisJCSAgICAiZW52ZWxvcGUtc2VuZGVyPXMiID0+IFwkZW52ZWxvcGVfc2VuZGVyLAorCQkgICAgInRocmVhZCEiID0+IFwkdGhyZWFkLAorCQkgICAgIm5vLXRocmVhZCIgPT4gc3ViIHskdGhyZWFkID0gMH0sCisJCSAgICAidmFsaWRhdGUhIiA9PiBcJHZhbGlkYXRlLAorCQkgICAgIm5vLXZhbGlkYXRlIiA9PiBzdWIgeyR2YWxpZGF0ZSA9IDB9LAorCQkgICAgInRyYW5zZmVyLWVuY29kaW5nPXMiID0+IFwkdGFyZ2V0X3hmZXJfZW5jb2RpbmcsCisJCSAgICAiZm9ybWF0LXBhdGNoISIgPT4gXCRmb3JtYXRfcGF0Y2gsCisJCSAgICAibm8tZm9ybWF0LXBhdGNoIiA9PiBzdWIgeyRmb3JtYXRfcGF0Y2ggPSAwfSwKKwkJICAgICI4Yml0LWVuY29kaW5nPXMiID0+IFwkYXV0b184Yml0X2VuY29kaW5nLAorCQkgICAgImNvbXBvc2UtZW5jb2Rpbmc9cyIgPT4gXCRjb21wb3NlX2VuY29kaW5nLAorCQkgICAgImZvcmNlIiA9PiBcJGZvcmNlLAorCQkgICAgInhtYWlsZXIhIiA9PiBcJHVzZV94bWFpbGVyLAorCQkgICAgIm5vLXhtYWlsZXIiID0+IHN1YiB7JHVzZV94bWFpbGVyID0gMH0sCisJCSAgICAiYmF0Y2gtc2l6ZT1pIiA9PiBcJGJhdGNoX3NpemUsCisJCSAgICAicmVsb2dpbi1kZWxheT1pIiA9PiBcJHJlbG9naW5fZGVsYXksCisJCSAgICAiZ2l0LWNvbXBsZXRpb24taGVscGVyIiA9PiBcJGdpdF9jb21wbGV0aW9uX2hlbHBlciwKKwkgKTsKKworIyBNdW5nZSBhbnkgImVpdGhlciBjb25maWcgb3IgZ2V0b3B0LCBub3QgYm90aCIgdmFyaWFibGVzCitteSBAaW5pdGlhbF90byA9IEBnZXRvcHRfdG8gPyBAZ2V0b3B0X3RvIDogKCRub190byA/ICgpIDogQGNvbmZpZ190byk7CitteSBAaW5pdGlhbF9jYyA9IEBnZXRvcHRfY2MgPyBAZ2V0b3B0X2NjIDogKCRub19jYyA/ICgpIDogQGNvbmZpZ19jYyk7CitteSBAaW5pdGlhbF9iY2MgPSBAZ2V0b3B0X2JjYyA/IEBnZXRvcHRfYmNjIDogKCRub19iY2MgPyAoKSA6IEBjb25maWdfYmNjKTsKKwordXNhZ2UoKSBpZiAkaGVscDsKK2NvbXBsZXRpb25faGVscGVyKCkgaWYgJGdpdF9jb21wbGV0aW9uX2hlbHBlcjsKK3VubGVzcyAoJHJjKSB7CisgICAgdXNhZ2UoKTsKK30KKworZGllIF9fKCJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIikKKwlpZiAkZm9ybWF0X3BhdGNoIGFuZCBub3QgJHJlcG87CisKK2RpZSBfXygiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgIiAuCisJIih2aWEgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIikKKwlpZiBkZWZpbmVkICRyZWxvZ2luX2RlbGF5IGFuZCBub3QgZGVmaW5lZCAkYmF0Y2hfc2l6ZTsKKworIyAnZGVmYXVsdCcgZW5jcnlwdGlvbiBpcyBub25lIC0tIHRoaXMgb25seSBwcmV2ZW50cyBhIHdhcm5pbmcKKyRzbXRwX2VuY3J5cHRpb24gPSAnJyB1bmxlc3MgKGRlZmluZWQgJHNtdHBfZW5jcnlwdGlvbik7CisKKyMgU2V0IENDIHN1cHByZXNzaW9ucworbXkoJXN1cHByZXNzX2NjKTsKK2lmIChAc3VwcHJlc3NfY2MpIHsKKwlmb3JlYWNoIG15ICRlbnRyeSAoQHN1cHByZXNzX2NjKSB7CisJCSMgUGxlYXNlIHVwZGF0ZSAkX19naXRfc2VuZF9lbWFpbF9zdXBwcmVzc2NjX29wdGlvbnMKKwkJIyBpbiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91IGFkZCBuZXcgb3B0aW9ucy4KKwkJZGllIHNwcmludGYoX18oIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIiksICRlbnRyeSkKKwkJCXVubGVzcyAkZW50cnkgPX4gL14oPzphbGx8Y2NjbWR8Y2N8YXV0aG9yfHNlbGZ8c29ifGJvZHl8Ym9keWNjfG1pc2MtYnkpJC87CisJCSRzdXBwcmVzc19jY3skZW50cnl9ID0gMTsKKwl9Cit9CisKK2lmICgkc3VwcHJlc3NfY2N7J2FsbCd9KSB7CisJZm9yZWFjaCBteSAkZW50cnkgKHF3IChjY2NtZCBjYyBhdXRob3Igc2VsZiBzb2IgYm9keSBib2R5Y2MgbWlzYy1ieSkpIHsKKwkJJHN1cHByZXNzX2NjeyRlbnRyeX0gPSAxOworCX0KKwlkZWxldGUgJHN1cHByZXNzX2NjeydhbGwnfTsKK30KKworIyBJZiBleHBsaWNpdCBvbGQtc3R5bGUgb25lcyBhcmUgc3BlY2lmaWVkLCB0aGV5IHRydW1wIC0tc3VwcHJlc3MtY2MuCiskc3VwcHJlc3NfY2N7J3NlbGYnfSA9ICRzdXBwcmVzc19mcm9tIGlmIGRlZmluZWQgJHN1cHByZXNzX2Zyb207Ciskc3VwcHJlc3NfY2N7J3NvYid9ID0gISRzaWduZWRfb2ZmX2J5X2NjIGlmIGRlZmluZWQgJHNpZ25lZF9vZmZfYnlfY2M7CisKK2lmICgkc3VwcHJlc3NfY2N7J2JvZHknfSkgeworCWZvcmVhY2ggbXkgJGVudHJ5IChxdyAoc29iIGJvZHljYyBtaXNjLWJ5KSkgeworCQkkc3VwcHJlc3NfY2N7JGVudHJ5fSA9IDE7CisJfQorCWRlbGV0ZSAkc3VwcHJlc3NfY2N7J2JvZHknfTsKK30KKworIyBTZXQgY29uZmlybSdzIGRlZmF1bHQgdmFsdWUKK215ICRjb25maXJtX3VuY29uZmlndXJlZCA9ICFkZWZpbmVkICRjb25maXJtOworaWYgKCRjb25maXJtX3VuY29uZmlndXJlZCkgeworCSRjb25maXJtID0gc2NhbGFyICVzdXBwcmVzc19jYyA/ICdjb21wb3NlJyA6ICdhdXRvJzsKK307CisjIFBsZWFzZSB1cGRhdGUgJF9fZ2l0X3NlbmRfZW1haWxfY29uZmlybV9vcHRpb25zIGluCisjIGdpdC1jb21wbGV0aW9uLmJhc2ggd2hlbiB5b3UgYWRkIG5ldyBvcHRpb25zLgorZGllIHNwcmludGYoX18oIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIpLCAkY29uZmlybSkKKwl1bmxlc3MgJGNvbmZpcm0gPX4gL14oPzphdXRvfGNjfGNvbXBvc2V8YWx3YXlzfG5ldmVyKS87CisKKyMgRGVidWdnaW5nLCBwcmludCBvdXQgdGhlIHN1cHByZXNzaW9ucy4KK2lmICgwKSB7CisJcHJpbnQgInN1cHByZXNzaW9uczpcbiI7CisJZm9yZWFjaCBteSAkZW50cnkgKGtleXMgJXN1cHByZXNzX2NjKSB7CisJCXByaW50ZiAiICAlLTVzIC0+ICRzdXBwcmVzc19jY3skZW50cnl9XG4iLCAkZW50cnk7CisJfQorfQorCitteSAoJHJlcG9hdXRob3IsICRyZXBvY29tbWl0dGVyKTsKKygkcmVwb2F1dGhvcikgPSBHaXQ6OmlkZW50X3BlcnNvbihAcmVwbywgJ2F1dGhvcicpOworKCRyZXBvY29tbWl0dGVyKSA9IEdpdDo6aWRlbnRfcGVyc29uKEByZXBvLCAnY29tbWl0dGVyJyk7CisKK3N1YiBwYXJzZV9hZGRyZXNzX2xpbmUgeworCXJldHVybiBtYXAgeyAkXy0+Zm9ybWF0IH0gTWFpbDo6QWRkcmVzcy0+cGFyc2UoJF9bMF0pOworfQorCitzdWIgc3BsaXRfYWRkcnMgeworCXJldHVybiBxdW90ZXdvcmRzKCdccyosXHMqJywgMSwgQF8pOworfQorCitteSAlYWxpYXNlczsKKworc3ViIHBhcnNlX3NlbmRtYWlsX2FsaWFzIHsKKwlsb2NhbCAkXyA9IHNoaWZ0OworCWlmICgvIi8pIHsKKwkJcHJpbnRmIFNUREVSUiBfXygid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIpLCAkXzsKKwl9IGVsc2lmICgvOmluY2x1ZGU6LykgeworCQlwcmludGYgU1RERVJSIF9fKCJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIiksICRfOworCX0gZWxzaWYgKC9bXC98XS8pIHsKKwkJcHJpbnRmIFNUREVSUiBfXygid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iKSwgJF87CisJfSBlbHNpZiAoL14oXFMrPylccyo6XHMqKC4rKSQvKSB7CisJCW15ICgkYWxpYXMsICRhZGRyKSA9ICgkMSwgJDIpOworCQkkYWxpYXNlc3skYWxpYXN9ID0gWyBzcGxpdF9hZGRycygkYWRkcikgXTsKKwl9IGVsc2UgeworCQlwcmludGYgU1RERVJSIF9fKCJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIiksICRfOworCX0KK30KKworc3ViIHBhcnNlX3NlbmRtYWlsX2FsaWFzZXMgeworCW15ICRmaCA9IHNoaWZ0OworCW15ICRzID0gJyc7CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQluZXh0IGlmIC9eXHMqJC8gfHwgL15ccyojLzsKKwkJJHMgLj0gJF8sIG5leHQgaWYgJHMgPX4gcy9cXCQvLyB8fCBzL15ccysvLzsKKwkJcGFyc2Vfc2VuZG1haWxfYWxpYXMoJHMpIGlmICRzOworCQkkcyA9ICRfOworCX0KKwkkcyA9fiBzL1xcJC8vOyAjIHNpbGVudGx5IHRvbGVyYXRlIHN0cmF5ICdcJyBvbiBsYXN0IGxpbmUKKwlwYXJzZV9zZW5kbWFpbF9hbGlhcygkcykgaWYgJHM7Cit9CisKK215ICVwYXJzZV9hbGlhcyA9ICgKKwkjIG11bHRpbGluZSBmb3JtYXRzIGNhbiBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZQorCW11dHQgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IHdoaWxlICg8JGZoPikgeworCQlpZiAoL15ccyphbGlhc1xzKyg/Oi1ncm91cFxzK1xTK1xzKykqKFxTKylccysoLiopJC8pIHsKKwkJCW15ICgkYWxpYXMsICRhZGRyKSA9ICgkMSwgJDIpOworCQkJJGFkZHIgPX4gcy8jLiokLy87ICMgbXV0dCBhbGxvd3MgIyBjb21tZW50cworCQkJIyBjb21tYXMgZGVsaW1pdCBtdWx0aXBsZSBhZGRyZXNzZXMKKwkJCW15IEBhZGRyID0gc3BsaXRfYWRkcnMoJGFkZHIpOworCisJCQkjIHF1b3RlcyBtYXkgYmUgZXNjYXBlZCBpbiB0aGUgZmlsZSwKKwkJCSMgdW5lc2NhcGUgdGhlbSBzbyB3ZSBkbyBub3QgZG91YmxlLWVzY2FwZSB0aGVtIGxhdGVyLgorCQkJcy9cXCIvIi9nIGZvcmVhY2ggQGFkZHI7CisJCQkkYWxpYXNlc3skYWxpYXN9ID0gXEBhZGRyCisJCX19fSwKKwltYWlscmMgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IHdoaWxlICg8JGZoPikgeworCQlpZiAoL15hbGlhc1xzKyhcUyspXHMrKC4qPylccyokLykgeworCQkJIyBzcGFjZXMgZGVsaW1pdCBtdWx0aXBsZSBhZGRyZXNzZXMKKwkJCSRhbGlhc2VzeyQxfSA9IFsgcXVvdGV3b3JkcygnXHMrJywgMCwgJDIpIF07CisJCX19fSwKKwlwaW5lID0+IHN1YiB7IG15ICRmaCA9IHNoaWZ0OyBteSAkZj0nXHRbXlx0XSonOworCSAgICAgICAgZm9yIChteSAkeCA9ICcnOyBkZWZpbmVkKCR4KTsgJHggPSAkXykgeworCQkJY2hvbXAgJHg7CisJCSAgICAgICAgJHggLj0gJDEgd2hpbGUoZGVmaW5lZCgkXyA9IDwkZmg+KSAmJiAvXiArKC4qKSQvKTsKKwkJCSR4ID1+IC9eKFxTKykkZlx0XCg/KFteXHRdKz8pXCk/KDo/JGYpezAsMn0kLyBvciBuZXh0OworCQkJJGFsaWFzZXN7JDF9ID0gWyBzcGxpdF9hZGRycygkMikgXTsKKwkJfX0sCisJZWxtID0+IHN1YiAgeyBteSAkZmggPSBzaGlmdDsKKwkJICAgICAgd2hpbGUgKDwkZmg+KSB7CisJCQkgIGlmICgvXihcUyspXHMrPVxzK1tePV0rPVxzKFxTKykvKSB7CisJCQkgICAgICBteSAoJGFsaWFzLCAkYWRkcikgPSAoJDEsICQyKTsKKwkJCSAgICAgICAkYWxpYXNlc3skYWxpYXN9ID0gWyBzcGxpdF9hZGRycygkYWRkcikgXTsKKwkJCSAgfQorCQkgICAgICB9IH0sCisJc2VuZG1haWwgPT4gXCZwYXJzZV9zZW5kbWFpbF9hbGlhc2VzLAorCWdudXMgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IHdoaWxlICg8JGZoPikgeworCQlpZiAoL1woZGVmaW5lLW1haWwtYWxpYXNccysiKFxTKz8pIlxzKyIoXFMrPykiXCkvKSB7CisJCQkkYWxpYXNlc3skMX0gPSBbICQyIF07CisJCX19fQorCSMgUGxlYXNlIHVwZGF0ZSBfZ2l0X2NvbmZpZygpIGluIGdpdC1jb21wbGV0aW9uLmJhc2ggd2hlbiB5b3UKKwkjIGFkZCBuZXcgTVVBcy4KKyk7CisKK2lmIChAYWxpYXNfZmlsZXMgYW5kICRhbGlhc2ZpbGV0eXBlIGFuZCBkZWZpbmVkICRwYXJzZV9hbGlhc3skYWxpYXNmaWxldHlwZX0pIHsKKwlmb3JlYWNoIG15ICRmaWxlIChAYWxpYXNfZmlsZXMpIHsKKwkJb3BlbiBteSAkZmgsICc8JywgJGZpbGUgb3IgZGllICJvcGVuaW5nICRmaWxlOiAkIVxuIjsKKwkJJHBhcnNlX2FsaWFzeyRhbGlhc2ZpbGV0eXBlfS0+KCRmaCk7CisJCWNsb3NlICRmaDsKKwl9Cit9CisKK2lmICgkZHVtcF9hbGlhc2VzKSB7CisgICAgcHJpbnQgIiRfXG4iIGZvciAoc29ydCBrZXlzICVhbGlhc2VzKTsKKyAgICBleGl0KDApOworfQorCisjIGlzX2Zvcm1hdF9wYXRjaF9hcmcoJGYpIHJldHVybnMgMCBpZiAkZiBuYW1lcyBhIHBhdGNoLCBvciAxIGlmCisjICRmIGlzIGEgcmV2aXNpb24gbGlzdCBzcGVjaWZpY2F0aW9uIHRvIGJlIHBhc3NlZCB0byBmb3JtYXQtcGF0Y2guCitzdWIgaXNfZm9ybWF0X3BhdGNoX2FyZyB7CisJcmV0dXJuIHVubGVzcyAkcmVwbzsKKwlteSAkZiA9IHNoaWZ0OworCXRyeSB7CisJCSRyZXBvLT5jb21tYW5kKCdyZXYtcGFyc2UnLCAnLS12ZXJpZnknLCAnLS1xdWlldCcsICRmKTsKKwkJaWYgKGRlZmluZWQoJGZvcm1hdF9wYXRjaCkpIHsKKwkJCXJldHVybiAkZm9ybWF0X3BhdGNoOworCQl9CisJCWRpZSBzcHJpbnRmKF9fIDw8RU9GLCAkZiwgJGYpOworRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0cwordG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi4KKworICAgICogU2F5aW5nICIuLyVzIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yCisgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuCitFT0YKKwl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CisJCSMgTm90IGEgdmFsaWQgcmV2aXNpb24uICBUcmVhdCBpdCBhcyBhIGZpbGVuYW1lLgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKyMgTm93IHRoYXQgYWxsIHRoZSBkZWZhdWx0cyBhcmUgc2V0LCBwcm9jZXNzIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUKKyMgYXJndW1lbnRzIGFuZCBjb2xsZWN0IHVwIHRoZSBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgcHJvY2Vzc2VkLgorbXkgQHJldl9saXN0X29wdHM7Cit3aGlsZSAoZGVmaW5lZChteSAkZiA9IHNoaWZ0IEBBUkdWKSkgeworCWlmICgkZiBlcSAiLS0iKSB7CisJCXB1c2ggQHJldl9saXN0X29wdHMsICItLSIsIEBBUkdWOworCQlAQVJHViA9ICgpOworCX0gZWxzaWYgKC1kICRmIGFuZCAhaXNfZm9ybWF0X3BhdGNoX2FyZygkZikpIHsKKwkJb3BlbmRpciBteSAkZGgsICRmCisJCQlvciBkaWUgc3ByaW50ZihfXygiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIiksICRmLCAkISk7CisKKwkJcHVzaCBAZmlsZXMsIGdyZXAgeyAtZiAkXyB9IG1hcCB7IGNhdGZpbGUoJGYsICRfKSB9CisJCQkJc29ydCByZWFkZGlyICRkaDsKKwkJY2xvc2VkaXIgJGRoOworCX0gZWxzaWYgKCgtZiAkZiBvciAtcCAkZikgYW5kICFpc19mb3JtYXRfcGF0Y2hfYXJnKCRmKSkgeworCQlwdXNoIEBmaWxlcywgJGY7CisJfSBlbHNlIHsKKwkJcHVzaCBAcmV2X2xpc3Rfb3B0cywgJGY7CisJfQorfQorCitpZiAoQHJldl9saXN0X29wdHMpIHsKKwlkaWUgX18oIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iKQorCQl1bmxlc3MgJHJlcG87CisJcHVzaCBAZmlsZXMsICRyZXBvLT5jb21tYW5kKCdmb3JtYXQtcGF0Y2gnLCAnLW8nLCB0ZW1wZGlyKENMRUFOVVAgPT4gMSksIEByZXZfbGlzdF9vcHRzKTsKK30KKworQGZpbGVzID0gaGFuZGxlX2JhY2t1cF9maWxlcyhAZmlsZXMpOworCitpZiAoJHZhbGlkYXRlKSB7CisJZm9yZWFjaCBteSAkZiAoQGZpbGVzKSB7CisJCXVubGVzcyAoLXAgJGYpIHsKKwkJCW15ICRlcnJvciA9IHZhbGlkYXRlX3BhdGNoKCRmLCAkdGFyZ2V0X3hmZXJfZW5jb2RpbmcpOworCQkJJGVycm9yIGFuZCBkaWUgc3ByaW50ZihfXygiZmF0YWw6ICVzOiAlc1xud2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIpLAorCQkJCQkJICAkZiwgJGVycm9yKTsKKwkJfQorCX0KK30KKworaWYgKEBmaWxlcykgeworCXVubGVzcyAoJHF1aWV0KSB7CisJCXByaW50ICRfLCJcbiIgZm9yIChAZmlsZXMpOworCX0KK30gZWxzZSB7CisJcHJpbnQgU1RERVJSIF9fKCJcbk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcblxuIik7CisJdXNhZ2UoKTsKK30KKworc3ViIGdldF9wYXRjaF9zdWJqZWN0IHsKKwlteSAkZm4gPSBzaGlmdDsKKwlvcGVuIChteSAkZmgsICc8JywgJGZuKTsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQluZXh0IHVubGVzcyAoJGxpbmUgPX4gL15TdWJqZWN0OiAoLiopJC8pOworCQljbG9zZSAkZmg7CisJCXJldHVybiAiR0lUOiAkMVxuIjsKKwl9CisJY2xvc2UgJGZoOworCWRpZSBzcHJpbnRmKF9fKCJObyBzdWJqZWN0IGxpbmUgaW4gJXM/IiksICRmbik7Cit9CisKK2lmICgkY29tcG9zZSkgeworCSMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBzZWN1cmUsIGJ1dCB3ZSB3aWxsIG1ha2UgYSBzbWFsbAorCSMgZWZmb3J0IHRvIGhhdmUgaXQgYmUgdW5pcXVlCisJJGNvbXBvc2VfZmlsZW5hbWUgPSAoJHJlcG8gPworCQl0ZW1wZmlsZSgiLmdpdHNlbmRlbWFpbC5tc2cuWFhYWFhYIiwgRElSID0+ICRyZXBvLT5yZXBvX3BhdGgoKSkgOgorCQl0ZW1wZmlsZSgiLmdpdHNlbmRlbWFpbC5tc2cuWFhYWFhYIiwgRElSID0+ICIuIikpWzFdOworCW9wZW4gbXkgJGMsICI+IiwgJGNvbXBvc2VfZmlsZW5hbWUKKwkJb3IgZGllIHNwcmludGYoX18oIkZhaWxlZCB0byBvcGVuIGZvciB3cml0aW5nICVzOiAlcyIpLCAkY29tcG9zZV9maWxlbmFtZSwgJCEpOworCisKKwlteSAkdHBsX3NlbmRlciA9ICRzZW5kZXIgfHwgJHJlcG9hdXRob3IgfHwgJHJlcG9jb21taXR0ZXIgfHwgJyc7CisJbXkgJHRwbF9zdWJqZWN0ID0gJGluaXRpYWxfc3ViamVjdCB8fCAnJzsKKwlteSAkdHBsX2luX3JlcGx5X3RvID0gJGluaXRpYWxfaW5fcmVwbHlfdG8gfHwgJyc7CisJbXkgJHRwbF9yZXBseV90byA9ICRyZXBseV90byB8fCAnJzsKKworCXByaW50ICRjIDw8RU9UMSwgR2l0OjpwcmVmaXhfbGluZXMoIkdJVDogIiwgX18gPDxFT1QyKSwgPDxFT1QzOworRnJvbSAkdHBsX3NlbmRlciAjIFRoaXMgbGluZSBpcyBpZ25vcmVkLgorRU9UMQorTGluZXMgYmVnaW5uaW5nIGluICJHSVQ6IiB3aWxsIGJlIHJlbW92ZWQuCitDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50cworZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuCisKK0NsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuCitFT1QyCitGcm9tOiAkdHBsX3NlbmRlcgorUmVwbHktVG86ICR0cGxfcmVwbHlfdG8KK1N1YmplY3Q6ICR0cGxfc3ViamVjdAorSW4tUmVwbHktVG86ICR0cGxfaW5fcmVwbHlfdG8KKworRU9UMworCWZvciBteSAkZiAoQGZpbGVzKSB7CisJCXByaW50ICRjIGdldF9wYXRjaF9zdWJqZWN0KCRmKTsKKwl9CisJY2xvc2UgJGM7CisKKwlpZiAoJGFubm90YXRlKSB7CisJCWRvX2VkaXQoJGNvbXBvc2VfZmlsZW5hbWUsIEBmaWxlcyk7CisJfSBlbHNlIHsKKwkJZG9fZWRpdCgkY29tcG9zZV9maWxlbmFtZSk7CisJfQorCisJb3BlbiAkYywgIjwiLCAkY29tcG9zZV9maWxlbmFtZQorCQlvciBkaWUgc3ByaW50ZihfXygiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIiksICRjb21wb3NlX2ZpbGVuYW1lLCAkISk7CisKKwlpZiAoIWRlZmluZWQgJGNvbXBvc2VfZW5jb2RpbmcpIHsKKwkJJGNvbXBvc2VfZW5jb2RpbmcgPSAiVVRGLTgiOworCX0KKworCW15ICVwYXJzZWRfZW1haWw7CisJd2hpbGUgKG15ICRsaW5lID0gPCRjPikgeworCQluZXh0IGlmICRsaW5lID1+IG0vXkdJVDovOworCQlwYXJzZV9oZWFkZXJfbGluZSgkbGluZSwgXCVwYXJzZWRfZW1haWwpOworCQlpZiAoJGxpbmUgPX4gL14kLykgeworCQkJJHBhcnNlZF9lbWFpbHsnYm9keSd9ID0gZmlsdGVyX2JvZHkoJGMpOworCQl9CisJfQorCWNsb3NlICRjOworCisJb3BlbiBteSAkYzIsICI+IiwgJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIgorCW9yIGRpZSBzcHJpbnRmKF9fKCJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiKSwgJGNvbXBvc2VfZmlsZW5hbWUsICQhKTsKKworCisJaWYgKCRwYXJzZWRfZW1haWx7J0Zyb20nfSkgeworCQkkc2VuZGVyID0gZGVsZXRlKCRwYXJzZWRfZW1haWx7J0Zyb20nfSk7CisJfQorCWlmICgkcGFyc2VkX2VtYWlseydJbi1SZXBseS1Ubyd9KSB7CisJCSRpbml0aWFsX2luX3JlcGx5X3RvID0gZGVsZXRlKCRwYXJzZWRfZW1haWx7J0luLVJlcGx5LVRvJ30pOworCX0KKwlpZiAoJHBhcnNlZF9lbWFpbHsnUmVwbHktVG8nfSkgeworCQkkcmVwbHlfdG8gPSBkZWxldGUoJHBhcnNlZF9lbWFpbHsnUmVwbHktVG8nfSk7CisJfQorCWlmICgkcGFyc2VkX2VtYWlseydTdWJqZWN0J30pIHsKKwkJJGluaXRpYWxfc3ViamVjdCA9IGRlbGV0ZSgkcGFyc2VkX2VtYWlseydTdWJqZWN0J30pOworCQlwcmludCAkYzIgIlN1YmplY3Q6ICIgLgorCQkJcXVvdGVfc3ViamVjdCgkaW5pdGlhbF9zdWJqZWN0LCAkY29tcG9zZV9lbmNvZGluZykgLgorCQkJIlxuIjsKKwl9CisKKwlpZiAoJHBhcnNlZF9lbWFpbHsnTUlNRS1WZXJzaW9uJ30pIHsKKwkJcHJpbnQgJGMyICJNSU1FLVZlcnNpb246ICRwYXJzZWRfZW1haWx7J01JTUUtVmVyc2lvbid9XG4iLAorCQkJCSJDb250ZW50LVR5cGU6ICRwYXJzZWRfZW1haWx7J0NvbnRlbnQtVHlwZSd9O1xuIiwKKwkJCQkiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogJHBhcnNlZF9lbWFpbHsnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyd9XG4iOworCQlkZWxldGUoJHBhcnNlZF9lbWFpbHsnTUlNRS1WZXJzaW9uJ30pOworCQlkZWxldGUoJHBhcnNlZF9lbWFpbHsnQ29udGVudC1UeXBlJ30pOworCQlkZWxldGUoJHBhcnNlZF9lbWFpbHsnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyd9KTsKKwl9IGVsc2lmIChmaWxlX2hhc19ub25hc2NpaSgkY29tcG9zZV9maWxlbmFtZSkpIHsKKwkJbXkgJGNvbnRlbnRfdHlwZSA9IChkZWxldGUoJHBhcnNlZF9lbWFpbHsnQ29udGVudC1UeXBlJ30pIG9yCisJCQkidGV4dC9wbGFpbjsgY2hhcnNldD0kY29tcG9zZV9lbmNvZGluZyIpOworCQlwcmludCAkYzIgIk1JTUUtVmVyc2lvbjogMS4wXG4iLAorCQkJIkNvbnRlbnQtVHlwZTogJGNvbnRlbnRfdHlwZVxuIiwKKwkJCSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iOworCX0KKwkjIFByZXNlcnZlIHVua25vd24gaGVhZGVycworCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlcGFyc2VkX2VtYWlsKSB7CisJCW5leHQgaWYgJGtleSBlcSAnYm9keSc7CisJCXByaW50ICRjMiAiJGtleTogJHBhcnNlZF9lbWFpbHska2V5fSI7CisJfQorCisJaWYgKCRwYXJzZWRfZW1haWx7J2JvZHknfSkgeworCQlwcmludCAkYzIgIlxuJHBhcnNlZF9lbWFpbHsnYm9keSd9XG4iOworCQlkZWxldGUoJHBhcnNlZF9lbWFpbHsnYm9keSd9KTsKKwl9IGVsc2UgeworCQlwcmludCBfXygiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIpOworCQkkY29tcG9zZSA9IC0xOworCX0KKworCWNsb3NlICRjMjsKKworfSBlbHNpZiAoJGFubm90YXRlKSB7CisJZG9fZWRpdChAZmlsZXMpOworfQorCitzdWIgYXNrIHsKKwlteSAoJHByb21wdCwgJWFyZykgPSBAXzsKKwlteSAkdmFsaWRfcmUgPSAkYXJne3ZhbGlkX3JlfTsKKwlteSAkZGVmYXVsdCA9ICRhcmd7ZGVmYXVsdH07CisJbXkgJGNvbmZpcm1fb25seSA9ICRhcmd7Y29uZmlybV9vbmx5fTsKKwlteSAkcmVzcDsKKwlteSAkaSA9IDA7CisJcmV0dXJuIGRlZmluZWQgJGRlZmF1bHQgPyAkZGVmYXVsdCA6IHVuZGVmCisJCXVubGVzcyBkZWZpbmVkICR0ZXJtLT5JTiBhbmQgZGVmaW5lZCBmaWxlbm8oJHRlcm0tPklOKSBhbmQKKwkJICAgICAgIGRlZmluZWQgJHRlcm0tPk9VVCBhbmQgZGVmaW5lZCBmaWxlbm8oJHRlcm0tPk9VVCk7CisJd2hpbGUgKCRpKysgPCAxMCkgeworCQkkcmVzcCA9ICR0ZXJtLT5yZWFkbGluZSgkcHJvbXB0KTsKKwkJaWYgKCFkZWZpbmVkICRyZXNwKSB7ICMgRU9GCisJCQlwcmludCAiXG4iOworCQkJcmV0dXJuIGRlZmluZWQgJGRlZmF1bHQgPyAkZGVmYXVsdCA6IHVuZGVmOworCQl9CisJCWlmICgkcmVzcCBlcSAnJyBhbmQgZGVmaW5lZCAkZGVmYXVsdCkgeworCQkJcmV0dXJuICRkZWZhdWx0OworCQl9CisJCWlmICghZGVmaW5lZCAkdmFsaWRfcmUgb3IgJHJlc3AgPX4gLyR2YWxpZF9yZS8pIHsKKwkJCXJldHVybiAkcmVzcDsKKwkJfQorCQlpZiAoJGNvbmZpcm1fb25seSkgeworCQkJbXkgJHllc25vID0gJHRlcm0tPnJlYWRsaW5lKAorCQkJCSMgVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwIFt5L05dIGFzIGlzLgorCQkJCXNwcmludGYoX18oIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIiksICRyZXNwKSk7CisJCQlpZiAoZGVmaW5lZCAkeWVzbm8gJiYgJHllc25vID1+IC95L2kpIHsKKwkJCQlyZXR1cm4gJHJlc3A7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdWIgcGFyc2VfaGVhZGVyX2xpbmUgeworCW15ICRsaW5lcyA9IHNoaWZ0OworCW15ICRwYXJzZWRfbGluZSA9IHNoaWZ0OworCW15ICRhZGRyX3BhdCA9IGpvaW4gInwiLCBxdyhUbyBDYyBCY2MpOworCisJZm9yZWFjaCAoc3BsaXQoL1xuLywgJGxpbmVzKSkgeworCQlpZiAoL14oJGFkZHJfcGF0KTpccyooLispJC9pKSB7CisJCSAgICAgICAgJHBhcnNlZF9saW5lLT57JDF9ID0gWyBwYXJzZV9hZGRyZXNzX2xpbmUoJDIpIF07CisJCX0gZWxzaWYgKC9eKFteOl0qKTpccyooLispXHMqJC9pKSB7CisJCSAgICAgICAgJHBhcnNlZF9saW5lLT57JDF9ID0gJDI7CisJCX0KKwl9Cit9CisKK3N1YiBmaWx0ZXJfYm9keSB7CisJbXkgJGMgPSBzaGlmdDsKKwlteSAkYm9keSA9ICIiOworCXdoaWxlIChteSAkYm9keV9saW5lID0gPCRjPikgeworCQlpZiAoJGJvZHlfbGluZSAhfiBtL15HSVQ6LykgeworCQkJJGJvZHkgLj0gJGJvZHlfbGluZTsKKwkJfQorCX0KKwlyZXR1cm4gJGJvZHk7Cit9CisKKworbXkgJWJyb2tlbl9lbmNvZGluZzsKKworc3ViIGZpbGVfZGVjbGFyZXNfOGJpdF9jdGUgeworCW15ICRmbiA9IHNoaWZ0OworCW9wZW4gKG15ICRmaCwgJzwnLCAkZm4pOworCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCWxhc3QgaWYgKCRsaW5lID1+IC9eJC8pOworCQlyZXR1cm4gMSBpZiAoJGxpbmUgPX4gL15Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAuKjhiaXQuKiQvKTsKKwl9CisJY2xvc2UgJGZoOworCXJldHVybiAwOworfQorCitmb3JlYWNoIG15ICRmIChAZmlsZXMpIHsKKwluZXh0IHVubGVzcyAoYm9keV9vcl9zdWJqZWN0X2hhc19ub25hc2NpaSgkZikKKwkJICAgICAmJiAhZmlsZV9kZWNsYXJlc184Yml0X2N0ZSgkZikpOworCSRicm9rZW5fZW5jb2Rpbmd7JGZ9ID0gMTsKK30KKworaWYgKCFkZWZpbmVkICRhdXRvXzhiaXRfZW5jb2RpbmcgJiYgc2NhbGFyICVicm9rZW5fZW5jb2RpbmcpIHsKKwlwcmludCBfXygiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlICIgLgorCQkgImEgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZy5cbiIpOworCWZvcmVhY2ggbXkgJGYgKHNvcnQga2V5cyAlYnJva2VuX2VuY29kaW5nKSB7CisJCXByaW50ICIgICAgJGZcbiI7CisJfQorCSRhdXRvXzhiaXRfZW5jb2RpbmcgPSBhc2soX18oIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiKSwKKwkJCQkgIHZhbGlkX3JlID0+IHFyLy57NH0vLCBjb25maXJtX29ubHkgPT4gMSwKKwkJCQkgIGRlZmF1bHQgPT4gIlVURi04Iik7Cit9CisKK2lmICghJGZvcmNlKSB7CisJZm9yIG15ICRmIChAZmlsZXMpIHsKKwkJaWYgKGdldF9wYXRjaF9zdWJqZWN0KCRmKSA9fiAvXFEqKiogU1VCSkVDVCBIRVJFICoqKlxFLykgeworCQkJZGllIHNwcmludGYoX18oIlJlZnVzaW5nIHRvIHNlbmQgYmVjYXVzZSB0aGUgcGF0Y2hcblx0JXNcbiIKKwkJCQkuICJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gIgorCQkJCS4gIlBhc3MgLS1mb3JjZSBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZC5cbiIpLCAkZik7CisJCX0KKwl9Cit9CisKK2lmIChkZWZpbmVkICRzZW5kZXIpIHsKKwkkc2VuZGVyID1+IHMvXlxzK3xccyskLy9nOworCSgkc2VuZGVyKSA9IGV4cGFuZF9hbGlhc2VzKCRzZW5kZXIpOworfSBlbHNlIHsKKwkkc2VuZGVyID0gJHJlcG9hdXRob3IgfHwgJHJlcG9jb21taXR0ZXIgfHwgJyc7Cit9CisKKyMgJHNlbmRlciBjb3VsZCBiZSBhbiBhbHJlYWR5IHNhbml0aXplZCBhZGRyZXNzCisjIChlLmcuIHNlbmRlbWFpbC5mcm9tIGNvdWxkIGJlIG1hbnVhbGx5IHNhbml0aXplZCBieSB1c2VyKS4KKyMgQnV0IGl0J3MgYSBuby1vcCB0byBydW4gc2FuaXRpemVfYWRkcmVzcyBvbiBhbiBhbHJlYWR5IHNhbml0aXplZCBhZGRyZXNzLgorJHNlbmRlciA9IHNhbml0aXplX2FkZHJlc3MoJHNlbmRlcik7CisKK215ICR0b193aG9tID0gX18oIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iKTsKK215ICRwcm9tcHRpbmcgPSAwOworaWYgKCFAaW5pdGlhbF90byAmJiAhZGVmaW5lZCAkdG9fY21kKSB7CisJbXkgJHRvID0gYXNrKCIkdG9fd2hvbSAiLAorCQkgICAgIGRlZmF1bHQgPT4gIiIsCisJCSAgICAgdmFsaWRfcmUgPT4gcXIvXEAuKlwuLywgY29uZmlybV9vbmx5ID0+IDEpOworCXB1c2ggQGluaXRpYWxfdG8sIHBhcnNlX2FkZHJlc3NfbGluZSgkdG8pIGlmIGRlZmluZWQgJHRvOyAjIHNhbml0aXplZC92YWxpZGF0ZWQgbGF0ZXIKKwkkcHJvbXB0aW5nKys7Cit9CisKK3N1YiBleHBhbmRfYWxpYXNlcyB7CisJcmV0dXJuIG1hcCB7IGV4cGFuZF9vbmVfYWxpYXMoJF8pIH0gQF87Cit9CisKK215ICVFWFBBTkRFRF9BTElBU0VTOworc3ViIGV4cGFuZF9vbmVfYWxpYXMgeworCW15ICRhbGlhcyA9IHNoaWZ0OworCWlmICgkRVhQQU5ERURfQUxJQVNFU3skYWxpYXN9KSB7CisJCWRpZSBzcHJpbnRmKF9fKCJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIiksICRhbGlhcyk7CisJfQorCWxvY2FsICRFWFBBTkRFRF9BTElBU0VTeyRhbGlhc30gPSAxOworCXJldHVybiAkYWxpYXNlc3skYWxpYXN9ID8gZXhwYW5kX2FsaWFzZXMoQHskYWxpYXNlc3skYWxpYXN9fSkgOiAkYWxpYXM7Cit9CisKK0Bpbml0aWFsX3RvID0gcHJvY2Vzc19hZGRyZXNzX2xpc3QoQGluaXRpYWxfdG8pOworQGluaXRpYWxfY2MgPSBwcm9jZXNzX2FkZHJlc3NfbGlzdChAaW5pdGlhbF9jYyk7CitAaW5pdGlhbF9iY2MgPSBwcm9jZXNzX2FkZHJlc3NfbGlzdChAaW5pdGlhbF9iY2MpOworCitpZiAoJHRocmVhZCAmJiAhZGVmaW5lZCAkaW5pdGlhbF9pbl9yZXBseV90byAmJiAkcHJvbXB0aW5nKSB7CisJJGluaXRpYWxfaW5fcmVwbHlfdG8gPSBhc2soCisJCV9fKCJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIiksCisJCWRlZmF1bHQgPT4gIiIsCisJCXZhbGlkX3JlID0+IHFyL1xALipcLi8sIGNvbmZpcm1fb25seSA9PiAxKTsKK30KK2lmIChkZWZpbmVkICRpbml0aWFsX2luX3JlcGx5X3RvKSB7CisJJGluaXRpYWxfaW5fcmVwbHlfdG8gPX4gcy9eXHMqPD8vLzsKKwkkaW5pdGlhbF9pbl9yZXBseV90byA9fiBzLz4/XHMqJC8vOworCSRpbml0aWFsX2luX3JlcGx5X3RvID0gIjwkaW5pdGlhbF9pbl9yZXBseV90bz4iIGlmICRpbml0aWFsX2luX3JlcGx5X3RvIG5lICcnOworfQorCitpZiAoZGVmaW5lZCAkcmVwbHlfdG8pIHsKKwkkcmVwbHlfdG8gPX4gcy9eXHMrfFxzKyQvL2c7CisJKCRyZXBseV90bykgPSBleHBhbmRfYWxpYXNlcygkcmVwbHlfdG8pOworCSRyZXBseV90byA9IHNhbml0aXplX2FkZHJlc3MoJHJlcGx5X3RvKTsKK30KKworaWYgKCFkZWZpbmVkICRzbXRwX3NlcnZlcikgeworCW15IEBzZW5kbWFpbF9wYXRocyA9IHF3KCAvdXNyL3NiaW4vc2VuZG1haWwgL3Vzci9saWIvc2VuZG1haWwgKTsKKwlwdXNoIEBzZW5kbWFpbF9wYXRocywgbWFwIHsiJF8vc2VuZG1haWwifSBzcGxpdCAvOi8sICRFTlZ7UEFUSH07CisJZm9yZWFjaCAoQHNlbmRtYWlsX3BhdGhzKSB7CisJCWlmICgteCAkXykgeworCQkJJHNtdHBfc2VydmVyID0gJF87CisJCQlsYXN0OworCQl9CisJfQorCSRzbXRwX3NlcnZlciB8fD0gJ2xvY2FsaG9zdCc7ICMgY291bGQgYmUgMTI3LjAuMC4xLCB0b28uLi4gKnNocnVnKgorfQorCitpZiAoJGNvbXBvc2UgJiYgJGNvbXBvc2UgPiAwKSB7CisJQGZpbGVzID0gKCRjb21wb3NlX2ZpbGVuYW1lIC4gIi5maW5hbCIsIEBmaWxlcyk7Cit9CisKKyMgVmFyaWFibGVzIHdlIHNldCBhcyBwYXJ0IG9mIHRoZSBsb29wIG92ZXIgZmlsZXMKK291ciAoJG1lc3NhZ2VfaWQsICVtYWlsLCAkc3ViamVjdCwgJGluX3JlcGx5X3RvLCAkcmVmZXJlbmNlcywgJG1lc3NhZ2UsCisJJG5lZWRzX2NvbmZpcm0sICRtZXNzYWdlX251bSwgJGFza19kZWZhdWx0KTsKKworc3ViIGV4dHJhY3RfdmFsaWRfYWRkcmVzcyB7CisJbXkgJGFkZHJlc3MgPSBzaGlmdDsKKwlteSAkbG9jYWxfcGFydF9yZWdleHAgPSBxci9bXjw+IlxzQF0rLzsKKwlteSAkZG9tYWluX3JlZ2V4cCA9IHFyL1teLjw+IlxzQF0rKD86XC5bXi48PiJcc0BdKykrLzsKKworCSMgY2hlY2sgZm9yIGEgbG9jYWwgYWRkcmVzczoKKwlyZXR1cm4gJGFkZHJlc3MgaWYgKCRhZGRyZXNzID1+IC9eKCRsb2NhbF9wYXJ0X3JlZ2V4cCkkLyk7CisKKwkkYWRkcmVzcyA9fiBzL15ccyo8KC4qKT5ccyokLyQxLzsKKwlpZiAoJGhhdmVfZW1haWxfdmFsaWQpIHsKKwkJcmV0dXJuIHNjYWxhciBFbWFpbDo6VmFsaWQtPmFkZHJlc3MoJGFkZHJlc3MpOworCX0KKworCSMgbGVzcyByb2J1c3QvY29ycmVjdCB0aGFuIHRoZSBtb25zdGVyIHJlZ2V4cCBpbiBFbWFpbDo6VmFsaWQsCisJIyBidXQgc3RpbGwgZG9lcyBhIDk5JSBqb2IsIGFuZCBvbmUgbGVzcyBkZXBlbmRlbmN5CisJcmV0dXJuICQxIGlmICRhZGRyZXNzID1+IC8oJGxvY2FsX3BhcnRfcmVnZXhwXEAkZG9tYWluX3JlZ2V4cCkvOworCXJldHVybjsKK30KKworc3ViIGV4dHJhY3RfdmFsaWRfYWRkcmVzc19vcl9kaWUgeworCW15ICRhZGRyZXNzID0gc2hpZnQ7CisJJGFkZHJlc3MgPSBleHRyYWN0X3ZhbGlkX2FkZHJlc3MoJGFkZHJlc3MpOworCWRpZSBzcHJpbnRmKF9fKCJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iKSwgJGFkZHJlc3MpCisJCWlmICEkYWRkcmVzczsKKwlyZXR1cm4gJGFkZHJlc3M7Cit9CisKK3N1YiB2YWxpZGF0ZV9hZGRyZXNzIHsKKwlteSAkYWRkcmVzcyA9IHNoaWZ0OworCXdoaWxlICghZXh0cmFjdF92YWxpZF9hZGRyZXNzKCRhZGRyZXNzKSkgeworCQlwcmludGYgU1RERVJSIF9fKCJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iKSwgJGFkZHJlc3M7CisJCSMgVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKwkJIyB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisJCSMgYXQgdGhpcyBwb2ludC4KKwkJJF8gPSBhc2soX18oIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIpLAorCQkJdmFsaWRfcmUgPT4gcXIvXig/OnF1aXR8cXxkcm9wfGR8ZWRpdHxlKS9pLAorCQkJZGVmYXVsdCA9PiAncScpOworCQlpZiAoL15kL2kpIHsKKwkJCXJldHVybiB1bmRlZjsKKwkJfSBlbHNpZiAoL15xL2kpIHsKKwkJCWNsZWFudXBfY29tcG9zZV9maWxlcygpOworCQkJZXhpdCgwKTsKKwkJfQorCQkkYWRkcmVzcyA9IGFzaygiJHRvX3dob20gIiwKKwkJCWRlZmF1bHQgPT4gIiIsCisJCQl2YWxpZF9yZSA9PiBxci9cQC4qXC4vLCBjb25maXJtX29ubHkgPT4gMSk7CisJfQorCXJldHVybiAkYWRkcmVzczsKK30KKworc3ViIHZhbGlkYXRlX2FkZHJlc3NfbGlzdCB7CisJcmV0dXJuIChncmVwIHsgZGVmaW5lZCAkXyB9CisJCW1hcCB7IHZhbGlkYXRlX2FkZHJlc3MoJF8pIH0gQF8pOworfQorCisjIFVzdWFsbHkgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgYmVsb3cgaGVyZS4KKworIyB3ZSBtYWtlIGEgImZha2UiIG1lc3NhZ2UgaWQgYnkgdGFraW5nIHRoZSBjdXJyZW50IG51bWJlcgorIyBvZiBzZWNvbmRzIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgVW5peCB0aW1lIGFuZCB0YWNraW5nIG9uCisjIGEgcmFuZG9tIG51bWJlciB0byB0aGUgZW5kLCBpbiBjYXNlIHdlIGFyZSBjYWxsZWQgcXVpY2tlciB0aGFuCisjIDEgc2Vjb25kIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBjYWxsZWQuCisKKyMgV2UnbGwgc2V0dXAgYSB0ZW1wbGF0ZSBmb3IgdGhlIG1lc3NhZ2UgaWQsIHVzaW5nIHRoZSAiZnJvbSIgYWRkcmVzczoKKworbXkgKCRtZXNzYWdlX2lkX3N0YW1wLCAkbWVzc2FnZV9pZF9zZXJpYWwpOworc3ViIG1ha2VfbWVzc2FnZV9pZCB7CisJbXkgJHVuaXE7CisJaWYgKCFkZWZpbmVkICRtZXNzYWdlX2lkX3N0YW1wKSB7CisJCSRtZXNzYWdlX2lkX3N0YW1wID0gc3RyZnRpbWUoIiVZJW0lZCVIJU0lUy4kJCIsIGdtdGltZSh0aW1lKSk7CisJCSRtZXNzYWdlX2lkX3NlcmlhbCA9IDA7CisJfQorCSRtZXNzYWdlX2lkX3NlcmlhbCsrOworCSR1bmlxID0gIiRtZXNzYWdlX2lkX3N0YW1wLSRtZXNzYWdlX2lkX3NlcmlhbCI7CisKKwlteSAkZHVfcGFydDsKKwlmb3IgKCRzZW5kZXIsICRyZXBvY29tbWl0dGVyLCAkcmVwb2F1dGhvcikgeworCQkkZHVfcGFydCA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzcyhzYW5pdGl6ZV9hZGRyZXNzKCRfKSk7CisJCWxhc3QgaWYgKGRlZmluZWQgJGR1X3BhcnQgYW5kICRkdV9wYXJ0IG5lICcnKTsKKwl9CisJaWYgKG5vdCBkZWZpbmVkICRkdV9wYXJ0IG9yICRkdV9wYXJ0IGVxICcnKSB7CisJCXJlcXVpcmUgU3lzOjpIb3N0bmFtZTsKKwkJJGR1X3BhcnQgPSAndXNlckAnIC4gU3lzOjpIb3N0bmFtZTo6aG9zdG5hbWUoKTsKKwl9CisJbXkgJG1lc3NhZ2VfaWRfdGVtcGxhdGUgPSAiPCVzLSVzPiI7CisJJG1lc3NhZ2VfaWQgPSBzcHJpbnRmKCRtZXNzYWdlX2lkX3RlbXBsYXRlLCAkdW5pcSwgJGR1X3BhcnQpOworCSNwcmludCAibmV3IG1lc3NhZ2UgaWQgPSAkbWVzc2FnZV9pZFxuIjsgIyBXYXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKK30KKworCisKKyR0aW1lID0gdGltZSAtIHNjYWxhciAkI2ZpbGVzOworCitzdWIgdW5xdW90ZV9yZmMyMDQ3IHsKKwlsb2NhbCAoJF8pID0gQF87CisJbXkgJGNoYXJzZXQ7CisJbXkgJHNlcCA9IHFyL1sgXHRdKy87CisJc3skcmVfZW5jb2RlZF93b3JkKD86JHNlcCRyZV9lbmNvZGVkX3dvcmQpKn17CisJCW15IEB3b3JkcyA9IHNwbGl0ICRzZXAsICQmOworCQlmb3JlYWNoIChAd29yZHMpIHsKKwkJCW0vJHJlX2VuY29kZWRfd29yZC87CisJCQkkY2hhcnNldCA9ICQxOworCQkJbXkgJGVuY29kaW5nID0gJDI7CisJCQlteSAkdGV4dCA9ICQzOworCQkJaWYgKCRlbmNvZGluZyBlcSAncScgfHwgJGVuY29kaW5nIGVxICdRJykgeworCQkJCSRfID0gJHRleHQ7CisJCQkJcy9fLyAvZzsKKwkJCQlzLz0oWzAtOUEtRl17Mn0pL2NocihoZXgoJDEpKS9lZ2k7CisJCQl9IGVsc2UgeworCQkJCSMgb3RoZXIgZW5jb2RpbmdzIG5vdCBzdXBwb3J0ZWQgeWV0CisJCQl9CisJCX0KKwkJam9pbiAnJywgQHdvcmRzOworCX1lZzsKKwlyZXR1cm4gd2FudGFycmF5ID8gKCRfLCAkY2hhcnNldCkgOiAkXzsKK30KKworc3ViIHF1b3RlX3JmYzIwNDcgeworCWxvY2FsICRfID0gc2hpZnQ7CisJbXkgJGVuY29kaW5nID0gc2hpZnQgfHwgJ1VURi04JzsKKwlzLyhbXi1hLXpBLVowLTkhKitcL10pL3NwcmludGYoIj0lMDJYIiwgb3JkKCQxKSkvZWc7CisJcy8oLiopLz1cPyRlbmNvZGluZ1w/cVw/JDFcPz0vOworCXJldHVybiAkXzsKK30KKworc3ViIGlzX3JmYzIwNDdfcXVvdGVkIHsKKwlteSAkcyA9IHNoaWZ0OworCWxlbmd0aCgkcykgPD0gNzUgJiYKKwkkcyA9fiBtL14oPzoiW1s6YXNjaWk6XV0qInwkcmVfZW5jb2RlZF93b3JkKSQvbzsKK30KKworc3ViIHN1YmplY3RfbmVlZHNfcmZjMjA0N19xdW90aW5nIHsKKwlteSAkcyA9IHNoaWZ0OworCisJcmV0dXJuICgkcyA9fiAvW15bOmFzY2lpOl1dLykgfHwgKCRzID1+IC89XD8vKTsKK30KKworc3ViIHF1b3RlX3N1YmplY3QgeworCWxvY2FsICRzdWJqZWN0ID0gc2hpZnQ7CisJbXkgJGVuY29kaW5nID0gc2hpZnQgfHwgJ1VURi04JzsKKworCWlmIChzdWJqZWN0X25lZWRzX3JmYzIwNDdfcXVvdGluZygkc3ViamVjdCkpIHsKKwkJcmV0dXJuIHF1b3RlX3JmYzIwNDcoJHN1YmplY3QsICRlbmNvZGluZyk7CisJfQorCXJldHVybiAkc3ViamVjdDsKK30KKworIyB1c2UgdGhlIHNpbXBsZXN0IHF1b3RpbmcgYmVpbmcgYWJsZSB0byBoYW5kbGUgdGhlIHJlY2lwaWVudAorc3ViIHNhbml0aXplX2FkZHJlc3MgeworCW15ICgkcmVjaXBpZW50KSA9IEBfOworCisJIyByZW1vdmUgZ2FyYmFnZSBhZnRlciBlbWFpbCBhZGRyZXNzCisJJHJlY2lwaWVudCA9fiBzLyguKj4pLiokLyQxLzsKKworCW15ICgkcmVjaXBpZW50X25hbWUsICRyZWNpcGllbnRfYWRkcikgPSAoJHJlY2lwaWVudCA9fiAvXiguKj8pXHMqKDwuKikvKTsKKworCWlmIChub3QgJHJlY2lwaWVudF9uYW1lKSB7CisJCXJldHVybiAkcmVjaXBpZW50OworCX0KKworCSMgaWYgcmVjaXBpZW50X25hbWUgaXMgYWxyZWFkeSBxdW90ZWQsIGRvIG5vdGhpbmcKKwlpZiAoaXNfcmZjMjA0N19xdW90ZWQoJHJlY2lwaWVudF9uYW1lKSkgeworCQlyZXR1cm4gJHJlY2lwaWVudDsKKwl9CisKKwkjIHJlbW92ZSBub24tZXNjYXBlZCBxdW90ZXMKKwkkcmVjaXBpZW50X25hbWUgPX4gcy8oXnxbXlxcXSkiLyQxL2c7CisKKwkjIHJmYzIwNDcgaXMgbmVlZGVkIGlmIGEgbm9uLWFzY2lpIGNoYXIgaXMgaW5jbHVkZWQKKwlpZiAoJHJlY2lwaWVudF9uYW1lID1+IC9bXls6YXNjaWk6XV0vKSB7CisJCSRyZWNpcGllbnRfbmFtZSA9IHF1b3RlX3JmYzIwNDcoJHJlY2lwaWVudF9uYW1lKTsKKwl9CisKKwkjIGRvdWJsZSBxdW90ZXMgYXJlIG5lZWRlZCBpZiBzcGVjaWFscyBvciBDVExzIGFyZSBpbmNsdWRlZAorCWVsc2lmICgkcmVjaXBpZW50X25hbWUgPX4gL1tdWygpPD5ALDs6XFwiLlwwMDAtXDAzN1wxNzddLykgeworCQkkcmVjaXBpZW50X25hbWUgPX4gcy8oW1xcXHJdKS9cXCQxL2c7CisJCSRyZWNpcGllbnRfbmFtZSA9IHFxWyIkcmVjaXBpZW50X25hbWUiXTsKKwl9CisKKwlyZXR1cm4gIiRyZWNpcGllbnRfbmFtZSAkcmVjaXBpZW50X2FkZHIiOworCit9CisKK3N1YiBzdHJpcF9nYXJiYWdlX29uZV9hZGRyZXNzIHsKKwlteSAoJGFkZHIpID0gQF87CisJY2hvbXAgJGFkZHI7CisJaWYgKCRhZGRyID1+IC9eKCgiW14iXSoifFteIjxdKik/ICo8W14+XSo+KS4qLykgeworCQkjICJGb28gQmFyIiA8Zm9vYmFyQGV4YW1wbGUuY29tPiBbcG9zc2libHkgZ2FyYmFnZSBoZXJlXQorCQkjIEZvbyBCYXIgPGZvb2JhckBleGFtcGxlLmNvbT4gW3Bvc3NpYmx5IGdhcmJhZ2UgaGVyZV0KKwkJcmV0dXJuICQxOworCX0KKwlpZiAoJGFkZHIgPX4gL14oPFtePl0qPikuKi8pIHsKKwkJIyA8Zm9vQGV4YW1wbGUuY29tPiBbcG9zc2libHkgZ2FyYmFnZSBoZXJlXQorCQkjIGlmIGdhcmJhZ2UgY29udGFpbnMgb3RoZXIgYWRkcmVzc2VzLCB0aGV5IGFyZSBpZ25vcmVkLgorCQlyZXR1cm4gJDE7CisJfQorCWlmICgkYWRkciA9fiAvXihbXiIjLFxzXSopLykgeworCQkjIGFkZHJlc3Mgd2l0aG91dCBxdW90aW5nOiByZW1vdmUgYW55dGhpbmcgYWZ0ZXIgdGhlIGFkZHJlc3MKKwkJcmV0dXJuICQxOworCX0KKwlyZXR1cm4gJGFkZHI7Cit9CisKK3N1YiBzYW5pdGl6ZV9hZGRyZXNzX2xpc3QgeworCXJldHVybiAobWFwIHsgc2FuaXRpemVfYWRkcmVzcygkXykgfSBAXyk7Cit9CisKK3N1YiBwcm9jZXNzX2FkZHJlc3NfbGlzdCB7CisJbXkgQGFkZHJfbGlzdCA9IG1hcCB7IHBhcnNlX2FkZHJlc3NfbGluZSgkXykgfSBAXzsKKwlAYWRkcl9saXN0ID0gZXhwYW5kX2FsaWFzZXMoQGFkZHJfbGlzdCk7CisJQGFkZHJfbGlzdCA9IHNhbml0aXplX2FkZHJlc3NfbGlzdChAYWRkcl9saXN0KTsKKwlAYWRkcl9saXN0ID0gdmFsaWRhdGVfYWRkcmVzc19saXN0KEBhZGRyX2xpc3QpOworCXJldHVybiBAYWRkcl9saXN0OworfQorCisjIFJldHVybnMgdGhlIGxvY2FsIEZ1bGx5IFF1YWxpZmllZCBEb21haW4gTmFtZSAoRlFETikgaWYgYXZhaWxhYmxlLgorIworIyBUaWdodGx5IGNvbmZpZ3VyZWQgTVRBYSByZXF1aXJlIHRoYXQgYSBjYWxsZXIgc2VuZHMgYSByZWFsIEROUworIyBkb21haW4gbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHRoZSBJUCBhZGRyZXNzIGluIHRoZSBIRUxPL0VITE8KKyMgaGFuZHNoYWtlLiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSBjb25uZWN0aW9uIGFuZCBwcmV2ZW50CisjIHNwYW1tZXJzIGZyb20gdHJ5aW5nIHRvIGhpZGUgdGhlaXIgaWRlbnRpdHkuIElmIHRoZSBETlMgYW5kIElQIGRvbid0CisjIG1hdGNoLCB0aGUgcmVjZWl2aW5nIE1UQSBtYXkgZGVueSB0aGUgY29ubmVjdGlvbi4KKyMKKyMgSGVyZSBpcyBhIGRlbnkgZXhhbXBsZSBvZiBOZXQ6OlNNVFAgd2l0aCB0aGUgZGVmYXVsdCAibG9jYWxob3N0LmxvY2FsZG9tYWluIgorIworIyBOZXQ6OlNNVFA9R0xPQigweDI2N2VjMjgpPj4+IEVITE8gbG9jYWxob3N0LmxvY2FsZG9tYWluCisjIE5ldDo6U01UUD1HTE9CKDB4MjY3ZWMyOCk8PDwgNTUwIEVITE8gYXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggY2FsbGluZyBob3N0CisjCisjIFRoaXMgbWFpbGRvbWFpbiooKSBjb2RlIGlzIGJhc2VkIG9uIGlkZWFzIGluIFBlcmwgbGlicmFyeSBUZXN0OjpSZXBvcnRlcgorIyAvdXNyL3NoYXJlL3Blcmw1L1Rlc3QvUmVwb3J0ZXIvTWFpbC9VdGlsLnBtID09PiBzdWIgX21haWxkb21haW4gKCkKKworc3ViIHZhbGlkX2ZxZG4geworCW15ICRkb21haW4gPSBzaGlmdDsKKwlyZXR1cm4gZGVmaW5lZCAkZG9tYWluICYmICEoJF5PIGVxICdkYXJ3aW4nICYmICRkb21haW4gPX4gL1wubG9jYWwkLykgJiYgJGRvbWFpbiA9fiAvXC4vOworfQorCitzdWIgbWFpbGRvbWFpbl9uZXQgeworCW15ICRtYWlsZG9tYWluOworCisJbXkgJGRvbWFpbiA9IE5ldDo6RG9tYWluOjpkb21haW5uYW1lKCk7CisJJG1haWxkb21haW4gPSAkZG9tYWluIGlmIHZhbGlkX2ZxZG4oJGRvbWFpbik7CisKKwlyZXR1cm4gJG1haWxkb21haW47Cit9CisKK3N1YiBtYWlsZG9tYWluX210YSB7CisJbXkgJG1haWxkb21haW47CisKKwlmb3IgbXkgJGhvc3QgKHF3KG1haWxob3N0IGxvY2FsaG9zdCkpIHsKKwkJbXkgJHNtdHAgPSBOZXQ6OlNNVFAtPm5ldygkaG9zdCk7CisJCWlmIChkZWZpbmVkICRzbXRwKSB7CisJCQlteSAkZG9tYWluID0gJHNtdHAtPmRvbWFpbjsKKwkJCSRzbXRwLT5xdWl0OworCisJCQkkbWFpbGRvbWFpbiA9ICRkb21haW4gaWYgdmFsaWRfZnFkbigkZG9tYWluKTsKKworCQkJbGFzdCBpZiAkbWFpbGRvbWFpbjsKKwkJfQorCX0KKworCXJldHVybiAkbWFpbGRvbWFpbjsKK30KKworc3ViIG1haWxkb21haW4geworCXJldHVybiBtYWlsZG9tYWluX25ldCgpIHx8IG1haWxkb21haW5fbXRhKCkgfHwgJ2xvY2FsaG9zdC5sb2NhbGRvbWFpbic7Cit9CisKK3N1YiBzbXRwX2hvc3Rfc3RyaW5nIHsKKwlpZiAoZGVmaW5lZCAkc210cF9zZXJ2ZXJfcG9ydCkgeworCQlyZXR1cm4gIiRzbXRwX3NlcnZlcjokc210cF9zZXJ2ZXJfcG9ydCI7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRzbXRwX3NlcnZlcjsKKwl9Cit9CisKKyMgUmV0dXJucyAxIGlmIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZCBvciB3YXMgbm90IG5lY2Vzc2FyeQorIyAoc210cF91c2VyIHdhcyBub3Qgc3BlY2lmaWVkKSwgYW5kIDAgb3RoZXJ3aXNlLgorCitzdWIgc210cF9hdXRoX21heWJlIHsKKwlpZiAoIWRlZmluZWQgJHNtdHBfYXV0aHVzZXIgfHwgJGF1dGggfHwgKGRlZmluZWQgJHNtdHBfYXV0aCAmJiAkc210cF9hdXRoIGVxICJub25lIikpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJIyBXb3JrYXJvdW5kIEFVVEggUExBSU4vTE9HSU4gaW50ZXJhY3Rpb24gZGVmZWN0CisJIyB3aXRoIEF1dGhlbjo6U0FTTDo6Q3lydXMKKwlldmFsIHsKKwkJcmVxdWlyZSBBdXRoZW46OlNBU0w7CisJCUF1dGhlbjo6U0FTTC0+aW1wb3J0KHF3KFBlcmwpKTsKKwl9OworCisJIyBDaGVjayBtZWNoYW5pc20gbmFtaW5nIGFzIGRlZmluZWQgaW46CisJIyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDQyMiNwYWdlLTgKKwlpZiAoJHNtdHBfYXV0aCAmJiAkc210cF9hdXRoICF+IC9eKFxiW0EtWjAtOS1fXXsxLDIwfVxzKikqJC8pIHsKKwkJZGllICJpbnZhbGlkIHNtdHAgYXV0aDogJyR7c210cF9hdXRofSciOworCX0KKworCSMgVE9ETzogQXV0aGVudGljYXRpb24gbWF5IGZhaWwgbm90IGJlY2F1c2UgY3JlZGVudGlhbHMgd2VyZQorCSMgaW52YWxpZCBidXQgZHVlIHRvIG90aGVyIHJlYXNvbnMsIGluIHdoaWNoIHdlIHNob3VsZCBub3QKKwkjIHJlamVjdCBjcmVkZW50aWFscy4KKwkkYXV0aCA9IEdpdDo6Y3JlZGVudGlhbCh7CisJCSdwcm90b2NvbCcgPT4gJ3NtdHAnLAorCQknaG9zdCcgPT4gc210cF9ob3N0X3N0cmluZygpLAorCQkndXNlcm5hbWUnID0+ICRzbXRwX2F1dGh1c2VyLAorCQkjIGlmIHRoZXJlJ3Mgbm8gcGFzc3dvcmQsICJnaXQgY3JlZGVudGlhbCBmaWxsIiB3aWxsCisJCSMgZ2l2ZSB1cyBvbmUsIG90aGVyd2lzZSBpdCdsbCBqdXN0IHBhc3MgdGhpcyBvbmUuCisJCSdwYXNzd29yZCcgPT4gJHNtdHBfYXV0aHBhc3MKKwl9LCBzdWIgeworCQlteSAkY3JlZCA9IHNoaWZ0OworCisJCWlmICgkc210cF9hdXRoKSB7CisJCQlteSAkc2FzbCA9IEF1dGhlbjo6U0FTTC0+bmV3KAorCQkJCW1lY2hhbmlzbSA9PiAkc210cF9hdXRoLAorCQkJCWNhbGxiYWNrID0+IHsKKwkJCQkJdXNlciA9PiAkY3JlZC0+eyd1c2VybmFtZSd9LAorCQkJCQlwYXNzID0+ICRjcmVkLT57J3Bhc3N3b3JkJ30sCisJCQkJCWF1dGhuYW1lID0+ICRjcmVkLT57J3VzZXJuYW1lJ30sCisJCQkJfQorCQkJKTsKKworCQkJcmV0dXJuICEhJHNtdHAtPmF1dGgoJHNhc2wpOworCQl9CisKKwkJcmV0dXJuICEhJHNtdHAtPmF1dGgoJGNyZWQtPnsndXNlcm5hbWUnfSwgJGNyZWQtPnsncGFzc3dvcmQnfSk7CisJfSk7CisKKwlyZXR1cm4gJGF1dGg7Cit9CisKK3N1YiBzc2xfdmVyaWZ5X3BhcmFtcyB7CisJZXZhbCB7CisJCXJlcXVpcmUgSU86OlNvY2tldDo6U1NMOworCQlJTzo6U29ja2V0OjpTU0wtPmltcG9ydChxdy9TU0xfVkVSSUZZX1BFRVIgU1NMX1ZFUklGWV9OT05FLyk7CisJfTsKKwlpZiAoJEApIHsKKwkJcHJpbnQgU1RERVJSICJOb3QgdXNpbmcgU1NMX1ZFUklGWV9QRUVSIGR1ZSB0byBvdXQtb2YtZGF0ZSBJTzo6U29ja2V0OjpTU0wuXG4iOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkZWZpbmVkICRzbXRwX3NzbF9jZXJ0X3BhdGgpIHsKKwkJIyB1c2UgdGhlIE9wZW5TU0wgZGVmYXVsdHMKKwkJcmV0dXJuIChTU0xfdmVyaWZ5X21vZGUgPT4gU1NMX1ZFUklGWV9QRUVSKCkpOworCX0KKworCWlmICgkc210cF9zc2xfY2VydF9wYXRoIGVxICIiKSB7CisJCXJldHVybiAoU1NMX3ZlcmlmeV9tb2RlID0+IFNTTF9WRVJJRllfTk9ORSgpKTsKKwl9IGVsc2lmICgtZCAkc210cF9zc2xfY2VydF9wYXRoKSB7CisJCXJldHVybiAoU1NMX3ZlcmlmeV9tb2RlID0+IFNTTF9WRVJJRllfUEVFUigpLAorCQkJU1NMX2NhX3BhdGggPT4gJHNtdHBfc3NsX2NlcnRfcGF0aCk7CisJfSBlbHNpZiAoLWYgJHNtdHBfc3NsX2NlcnRfcGF0aCkgeworCQlyZXR1cm4gKFNTTF92ZXJpZnlfbW9kZSA9PiBTU0xfVkVSSUZZX1BFRVIoKSwKKwkJCVNTTF9jYV9maWxlID0+ICRzbXRwX3NzbF9jZXJ0X3BhdGgpOworCX0gZWxzZSB7CisJCWRpZSBzcHJpbnRmKF9fKCJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIpLCAkc210cF9zc2xfY2VydF9wYXRoKTsKKwl9Cit9CisKK3N1YiBmaWxlX25hbWVfaXNfYWJzb2x1dGUgeworCW15ICgkcGF0aCkgPSBAXzsKKworCSMgbXN5cyBkb2VzIG5vdCBncm9rIERPUyBkcml2ZS1wcmVmaXhlcworCWlmICgkXk8gZXEgJ21zeXMnKSB7CisJCXJldHVybiAoJHBhdGggPX4gbSNeLyMgfHwgJHBhdGggPX4gbSNeW2EtekEtWl1cOiMpCisJfQorCisJcmVxdWlyZSBGaWxlOjpTcGVjOjpGdW5jdGlvbnM7CisJcmV0dXJuIEZpbGU6OlNwZWM6OkZ1bmN0aW9uczo6ZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRwYXRoKTsKK30KKworIyBQcmVwYXJlcyB0aGUgZW1haWwsIHRoZW4gYXNrcyB0aGUgdXNlciB3aGF0IHRvIGRvLgorIworIyBJZiB0aGUgdXNlciBjaG9vc2VzIHRvIHNlbmQgdGhlIGVtYWlsLCBpdCdzIHNlbnQgYW5kIDEgaXMgcmV0dXJuZWQuCisjIElmIHRoZSB1c2VyIGNob29zZXMgbm90IHRvIHNlbmQgdGhlIGVtYWlsLCAwIGlzIHJldHVybmVkLgorIyBJZiB0aGUgdXNlciBkZWNpZGVzIHRoZXkgd2FudCB0byBtYWtlIGZ1cnRoZXIgZWRpdHMsIC0xIGlzIHJldHVybmVkIGFuZCB0aGUKKyMgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGNhbGwgc2VuZF9tZXNzYWdlIGFnYWluIGFmdGVyIHRoZSBlZGl0cyBhcmUgcGVyZm9ybWVkLgorIworIyBJZiBhbiBlcnJvciBvY2N1cnMgc2VuZGluZyB0aGUgZW1haWwsIHRoaXMganVzdCBkaWVzLgorCitzdWIgc2VuZF9tZXNzYWdlIHsKKwlteSBAcmVjaXBpZW50cyA9IHVuaXF1ZV9lbWFpbF9saXN0KEB0byk7CisJQGNjID0gKGdyZXAgeyBteSAkY2MgPSBleHRyYWN0X3ZhbGlkX2FkZHJlc3Nfb3JfZGllKCRfKTsKKwkJICAgICAgbm90IGdyZXAgeyAkY2MgZXEgJF8gfHwgJF8gPX4gLzxcUSR7Y2N9XEU+JC8gfSBAcmVjaXBpZW50cworCQkgICAgfQorCSAgICAgICBAY2MpOworCW15ICR0byA9IGpvaW4gKCIsXG5cdCIsIEByZWNpcGllbnRzKTsKKwlAcmVjaXBpZW50cyA9IHVuaXF1ZV9lbWFpbF9saXN0KEByZWNpcGllbnRzLEBjYyxAaW5pdGlhbF9iY2MpOworCUByZWNpcGllbnRzID0gKG1hcCB7IGV4dHJhY3RfdmFsaWRfYWRkcmVzc19vcl9kaWUoJF8pIH0gQHJlY2lwaWVudHMpOworCW15ICRkYXRlID0gZm9ybWF0XzI4MjJfdGltZSgkdGltZSsrKTsKKwlteSAkZ2l0dmVyc2lvbiA9ICdAQEdJVF9WRVJTSU9OQEAnOworCWlmICgkZ2l0dmVyc2lvbiA9fiBtLy4uR0lUX1ZFUlNJT04uLi8pIHsKKwkgICAgJGdpdHZlcnNpb24gPSBHaXQ6OnZlcnNpb24oKTsKKwl9CisKKwlteSAkY2MgPSBqb2luKCIsXG5cdCIsIHVuaXF1ZV9lbWFpbF9saXN0KEBjYykpOworCW15ICRjY2xpbmUgPSAiIjsKKwlpZiAoJGNjIG5lICcnKSB7CisJCSRjY2xpbmUgPSAiXG5DYzogJGNjIjsKKwl9CisJbWFrZV9tZXNzYWdlX2lkKCkgdW5sZXNzIGRlZmluZWQoJG1lc3NhZ2VfaWQpOworCisJbXkgJGhlYWRlciA9ICJGcm9tOiAkc2VuZGVyCitUbzogJHRvJHtjY2xpbmV9CitTdWJqZWN0OiAkc3ViamVjdAorRGF0ZTogJGRhdGUKK01lc3NhZ2UtSWQ6ICRtZXNzYWdlX2lkCisiOworCWlmICgkdXNlX3htYWlsZXIpIHsKKwkJJGhlYWRlciAuPSAiWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsICRnaXR2ZXJzaW9uXG4iOworCX0KKwlpZiAoJGluX3JlcGx5X3RvKSB7CisKKwkJJGhlYWRlciAuPSAiSW4tUmVwbHktVG86ICRpbl9yZXBseV90b1xuIjsKKwkJJGhlYWRlciAuPSAiUmVmZXJlbmNlczogJHJlZmVyZW5jZXNcbiI7CisJfQorCWlmICgkcmVwbHlfdG8pIHsKKwkJJGhlYWRlciAuPSAiUmVwbHktVG86ICRyZXBseV90b1xuIjsKKwl9CisJaWYgKEB4aCkgeworCQkkaGVhZGVyIC49IGpvaW4oIlxuIiwgQHhoKSAuICJcbiI7CisJfQorCisJbXkgQHNlbmRtYWlsX3BhcmFtZXRlcnMgPSAoJy1pJywgQHJlY2lwaWVudHMpOworCW15ICRyYXdfZnJvbSA9ICRzZW5kZXI7CisJaWYgKGRlZmluZWQgJGVudmVsb3BlX3NlbmRlciAmJiAkZW52ZWxvcGVfc2VuZGVyIG5lICJhdXRvIikgeworCQkkcmF3X2Zyb20gPSAkZW52ZWxvcGVfc2VuZGVyOworCX0KKwkkcmF3X2Zyb20gPSBleHRyYWN0X3ZhbGlkX2FkZHJlc3MoJHJhd19mcm9tKTsKKwl1bnNoaWZ0IChAc2VuZG1haWxfcGFyYW1ldGVycywKKwkJCSctZicsICRyYXdfZnJvbSkgaWYoZGVmaW5lZCAkZW52ZWxvcGVfc2VuZGVyKTsKKworCWlmICgkbmVlZHNfY29uZmlybSAmJiAhJGRyeV9ydW4pIHsKKwkJcHJpbnQgIlxuJGhlYWRlclxuIjsKKwkJaWYgKCRuZWVkc19jb25maXJtIGVxICJpbmZvcm0iKSB7CisJCQkkY29uZmlybV91bmNvbmZpZ3VyZWQgPSAwOyAjIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGZvciB0aGUgcmVzdCBvZiB0aGlzIHJ1bgorCQkJJGFza19kZWZhdWx0ID0gInkiOyAjIGFzc3VtZSB5ZXMgb24gRU9GIHNpbmNlIHVzZXIgaGFzbid0IGV4cGxpY2l0bHkgYXNrZWQgZm9yIGNvbmZpcm1hdGlvbgorCQkJcHJpbnQgX18gPDxFT0YgOworICAgIFRoZSBDYyBsaXN0IGFib3ZlIGhhcyBiZWVuIGV4cGFuZGVkIGJ5IGFkZGl0aW9uYWwKKyAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0CisgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLgorICAgIFRoaXMgYmVoYXZpb3IgaXMgY29udHJvbGxlZCBieSB0aGUgc2VuZGVtYWlsLmNvbmZpcm0KKyAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuCisKKyAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcnVuICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLgorICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLAorICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy4KKworRU9GCisJCX0KKwkJIyBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisJCSMgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorCQkjIGF0IHRoaXMgcG9pbnQuCisJCSRfID0gYXNrKF9fKCJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiKSwKKwkJICAgICAgICAgdmFsaWRfcmUgPT4gcXIvXig/Onllc3x5fG5vfG58ZWRpdHxlfHF1aXR8cXxhbGx8YSkvaSwKKwkJICAgICAgICAgZGVmYXVsdCA9PiAkYXNrX2RlZmF1bHQpOworCQlkaWUgX18oIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIpIHVubGVzcyBkZWZpbmVkICRfOworCQlpZiAoL15uL2kpIHsKKwkJCXJldHVybiAwOworCQl9IGVsc2lmICgvXmUvaSkgeworCQkJcmV0dXJuIC0xOworCQl9IGVsc2lmICgvXnEvaSkgeworCQkJY2xlYW51cF9jb21wb3NlX2ZpbGVzKCk7CisJCQlleGl0KDApOworCQl9IGVsc2lmICgvXmEvaSkgeworCQkJJGNvbmZpcm0gPSAnbmV2ZXInOworCQl9CisJfQorCisJdW5zaGlmdCAoQHNlbmRtYWlsX3BhcmFtZXRlcnMsIEBzbXRwX3NlcnZlcl9vcHRpb25zKTsKKworCWlmICgkZHJ5X3J1bikgeworCQkjIFdlIGRvbid0IHdhbnQgdG8gc2VuZCB0aGUgZW1haWwuCisJfSBlbHNpZiAoZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRzbXRwX3NlcnZlcikpIHsKKwkJbXkgJHBpZCA9IG9wZW4gbXkgJHNtLCAnfC0nOworCQlkZWZpbmVkICRwaWQgb3IgZGllICQhOworCQlpZiAoISRwaWQpIHsKKwkJCWV4ZWMoJHNtdHBfc2VydmVyLCBAc2VuZG1haWxfcGFyYW1ldGVycykgb3IgZGllICQhOworCQl9CisJCXByaW50ICRzbSAiJGhlYWRlclxuJG1lc3NhZ2UiOworCQljbG9zZSAkc20gb3IgZGllICQhOworCX0gZWxzZSB7CisKKwkJaWYgKCFkZWZpbmVkICRzbXRwX3NlcnZlcikgeworCQkJZGllIF9fKCJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIikKKwkJfQorCisJCXJlcXVpcmUgTmV0OjpTTVRQOworCQlteSAkdXNlX25ldF9zbXRwX3NzbCA9IHZlcnNpb24tPnBhcnNlKCROZXQ6OlNNVFA6OlZFUlNJT04pIDwgdmVyc2lvbi0+cGFyc2UoIjIuMzQiKTsKKwkJJHNtdHBfZG9tYWluIHx8PSBtYWlsZG9tYWluKCk7CisKKwkJaWYgKCRzbXRwX2VuY3J5cHRpb24gZXEgJ3NzbCcpIHsKKwkJCSRzbXRwX3NlcnZlcl9wb3J0IHx8PSA0NjU7ICMgc3NtdHAKKwkJCXJlcXVpcmUgSU86OlNvY2tldDo6U1NMOworCisJCQkjIFN1cHByZXNzICJ2YXJpYWJsZSBhY2Nlc3NlZCBvbmNlIiB3YXJuaW5nLgorCQkJeworCQkJCW5vIHdhcm5pbmdzICdvbmNlJzsKKwkJCQkkSU86OlNvY2tldDo6U1NMOjpERUJVRyA9IDE7CisJCQl9CisKKwkJCSMgTmV0OjpTTVRQOjpTU0wtPm5ldygpIGRvZXMgbm90IGZvcndhcmQgYW55IFNTTCBvcHRpb25zCisJCQlJTzo6U29ja2V0OjpTU0w6OnNldF9jbGllbnRfZGVmYXVsdHMoCisJCQkJc3NsX3ZlcmlmeV9wYXJhbXMoKSk7CisKKwkJCWlmICgkdXNlX25ldF9zbXRwX3NzbCkgeworCQkJCXJlcXVpcmUgTmV0OjpTTVRQOjpTU0w7CisJCQkJJHNtdHAgfHw9IE5ldDo6U01UUDo6U1NMLT5uZXcoJHNtdHBfc2VydmVyLAorCQkJCQkJCSAgICAgIEhlbGxvID0+ICRzbXRwX2RvbWFpbiwKKwkJCQkJCQkgICAgICBQb3J0ID0+ICRzbXRwX3NlcnZlcl9wb3J0LAorCQkJCQkJCSAgICAgIERlYnVnID0+ICRkZWJ1Z19uZXRfc210cCk7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkc210cCB8fD0gTmV0OjpTTVRQLT5uZXcoJHNtdHBfc2VydmVyLAorCQkJCQkJCSBIZWxsbyA9PiAkc210cF9kb21haW4sCisJCQkJCQkJIFBvcnQgPT4gJHNtdHBfc2VydmVyX3BvcnQsCisJCQkJCQkJIERlYnVnID0+ICRkZWJ1Z19uZXRfc210cCwKKwkJCQkJCQkgU1NMID0+IDEpOworCQkJfQorCQl9CisJCWVsc2lmICghJHNtdHApIHsKKwkJCSRzbXRwX3NlcnZlcl9wb3J0IHx8PSAyNTsKKwkJCSRzbXRwIHx8PSBOZXQ6OlNNVFAtPm5ldygkc210cF9zZXJ2ZXIsCisJCQkJCQkgSGVsbG8gPT4gJHNtdHBfZG9tYWluLAorCQkJCQkJIERlYnVnID0+ICRkZWJ1Z19uZXRfc210cCwKKwkJCQkJCSBQb3J0ID0+ICRzbXRwX3NlcnZlcl9wb3J0KTsKKwkJCWlmICgkc210cF9lbmNyeXB0aW9uIGVxICd0bHMnICYmICRzbXRwKSB7CisJCQkJaWYgKCR1c2VfbmV0X3NtdHBfc3NsKSB7CisJCQkJCSRzbXRwLT5jb21tYW5kKCdTVEFSVFRMUycpOworCQkJCQkkc210cC0+cmVzcG9uc2UoKTsKKwkJCQkJaWYgKCRzbXRwLT5jb2RlICE9IDIyMCkgeworCQkJCQkJZGllIHNwcmludGYoX18oIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNUQVJUVExTISAlcyIpLCAkc210cC0+bWVzc2FnZSk7CisJCQkJCX0KKwkJCQkJcmVxdWlyZSBOZXQ6OlNNVFA6OlNTTDsKKwkJCQkJJHNtdHAgPSBOZXQ6OlNNVFA6OlNTTC0+c3RhcnRfU1NMKCRzbXRwLAorCQkJCQkJCQkJICBzc2xfdmVyaWZ5X3BhcmFtcygpKQorCQkJCQkJb3IgZGllIHNwcmludGYoX18oIlNUQVJUVExTIGZhaWxlZCEgJXMiKSwgSU86OlNvY2tldDo6U1NMOjplcnJzdHIoKSk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkkc210cC0+c3RhcnR0bHMoc3NsX3ZlcmlmeV9wYXJhbXMoKSkKKwkJCQkJCW9yIGRpZSBzcHJpbnRmKF9fKCJTVEFSVFRMUyBmYWlsZWQhICVzIiksIElPOjpTb2NrZXQ6OlNTTDo6ZXJyc3RyKCkpOworCQkJCX0KKwkJCQkjIFNlbmQgRUhMTyBhZ2FpbiB0byByZWNlaXZlIGZyZXNoCisJCQkJIyBzdXBwb3J0ZWQgY29tbWFuZHMKKwkJCQkkc210cC0+aGVsbG8oJHNtdHBfZG9tYWluKTsKKwkJCX0KKwkJfQorCisJCWlmICghJHNtdHApIHsKKwkJCWRpZSBfXygiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiIpLAorCQkJICAgICIgVkFMVUVTOiBzZXJ2ZXI9JHNtdHBfc2VydmVyICIsCisJCQkgICAgImVuY3J5cHRpb249JHNtdHBfZW5jcnlwdGlvbiAiLAorCQkJICAgICJoZWxsbz0kc210cF9kb21haW4iLAorCQkJICAgIGRlZmluZWQgJHNtdHBfc2VydmVyX3BvcnQgPyAiIHBvcnQ9JHNtdHBfc2VydmVyX3BvcnQiIDogIiI7CisJCX0KKworCQlzbXRwX2F1dGhfbWF5YmUgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCisJCSRzbXRwLT5tYWlsKCAkcmF3X2Zyb20gKSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7CisJCSRzbXRwLT50byggQHJlY2lwaWVudHMgKSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7CisJCSRzbXRwLT5kYXRhIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJJHNtdHAtPmRhdGFzZW5kKCIkaGVhZGVyXG4iKSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7CisJCW15IEBsaW5lcyA9IHNwbGl0IC9eLywgJG1lc3NhZ2U7CisJCWZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeworCQkJJHNtdHAtPmRhdGFzZW5kKCIkbGluZSIpIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJfQorCQkkc210cC0+ZGF0YWVuZCgpIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJJHNtdHAtPmNvZGUgPX4gLzI1MHwyMDAvIG9yIGRpZSBzcHJpbnRmKF9fKCJGYWlsZWQgdG8gc2VuZCAlc1xuIiksICRzdWJqZWN0KS4kc210cC0+bWVzc2FnZTsKKwl9CisJaWYgKCRxdWlldCkgeworCQlwcmludGYoJGRyeV9ydW4gPyBfXygiRHJ5LVNlbnQgJXNcbiIpIDogX18oIlNlbnQgJXNcbiIpLCAkc3ViamVjdCk7CisJfSBlbHNlIHsKKwkJcHJpbnQoJGRyeV9ydW4gPyBfXygiRHJ5LU9LLiBMb2cgc2F5czpcbiIpIDogX18oIk9LLiBMb2cgc2F5czpcbiIpKTsKKwkJaWYgKCFmaWxlX25hbWVfaXNfYWJzb2x1dGUoJHNtdHBfc2VydmVyKSkgeworCQkJcHJpbnQgIlNlcnZlcjogJHNtdHBfc2VydmVyXG4iOworCQkJcHJpbnQgIk1BSUwgRlJPTTo8JHJhd19mcm9tPlxuIjsKKwkJCWZvcmVhY2ggbXkgJGVudHJ5IChAcmVjaXBpZW50cykgeworCQkJICAgIHByaW50ICJSQ1BUIFRPOjwkZW50cnk+XG4iOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnQgIlNlbmRtYWlsOiAkc210cF9zZXJ2ZXIgIi5qb2luKCcgJyxAc2VuZG1haWxfcGFyYW1ldGVycykuIlxuIjsKKwkJfQorCQlwcmludCAkaGVhZGVyLCAiXG4iOworCQlpZiAoJHNtdHApIHsKKwkJCXByaW50IF9fKCJSZXN1bHQ6ICIpLCAkc210cC0+Y29kZSwgJyAnLAorCQkJCSgkc210cC0+bWVzc2FnZSA9fiAvXG4oW15cbl0rXG4pJC9zKSwgIlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50IF9fKCJSZXN1bHQ6IE9LXG4iKTsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCiskaW5fcmVwbHlfdG8gPSAkaW5pdGlhbF9pbl9yZXBseV90bzsKKyRyZWZlcmVuY2VzID0gJGluaXRpYWxfaW5fcmVwbHlfdG8gfHwgJyc7Ciskc3ViamVjdCA9ICRpbml0aWFsX3N1YmplY3Q7CiskbWVzc2FnZV9udW0gPSAwOworCisjIFByZXBhcmVzIHRoZSBlbWFpbCwgcHJvbXB0cyB0aGUgdXNlciwgc2VuZHMgaXQgb3V0CisjIFJldHVybnMgMCBpZiBhbiBlZGl0IHdhcyBkb25lIGFuZCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZ2Fpbiwgb3IgMQorIyBvdGhlcndpc2UuCitzdWIgcHJvY2Vzc19maWxlIHsKKwlteSAoJHQpID0gQF87CisKKwlvcGVuIG15ICRmaCwgIjwiLCAkdCBvciBkaWUgc3ByaW50ZihfXygiY2FuJ3Qgb3BlbiBmaWxlICVzIiksICR0KTsKKworCW15ICRhdXRob3IgPSB1bmRlZjsKKwlteSAkc2F1dGhvciA9IHVuZGVmOworCW15ICRhdXRob3JfZW5jb2Rpbmc7CisJbXkgJGhhc19jb250ZW50X3R5cGU7CisJbXkgJGJvZHlfZW5jb2Rpbmc7CisJbXkgJHhmZXJfZW5jb2Rpbmc7CisJbXkgJGhhc19taW1lX3ZlcnNpb247CisJQHRvID0gKCk7CisJQGNjID0gKCk7CisJQHhoID0gKCk7CisJbXkgJGlucHV0X2Zvcm1hdCA9IHVuZGVmOworCW15IEBoZWFkZXIgPSAoKTsKKwkkbWVzc2FnZSA9ICIiOworCSRtZXNzYWdlX251bSsrOworCSMgRmlyc3QgdW5mb2xkIG11bHRpbGluZSBoZWFkZXIgZmllbGRzCisJd2hpbGUoPCRmaD4pIHsKKwkJbGFzdCBpZiAvXlxzKiQvOworCQlpZiAoL15ccytcUy8gYW5kIEBoZWFkZXIpIHsKKwkJCWNob21wKCRoZWFkZXJbJCNoZWFkZXJdKTsKKwkJCXMvXlxzKy8gLzsKKwkJCSRoZWFkZXJbJCNoZWFkZXJdIC49ICRfOworCSAgICB9IGVsc2UgeworCQkJcHVzaChAaGVhZGVyLCAkXyk7CisJCX0KKwl9CisJIyBOb3cgcGFyc2UgdGhlIGhlYWRlcgorCWZvcmVhY2goQGhlYWRlcikgeworCQlpZiAoL15Gcm9tIC8pIHsKKwkJCSRpbnB1dF9mb3JtYXQgPSAnbWJveCc7CisJCQluZXh0OworCQl9CisJCWNob21wOworCQlpZiAoIWRlZmluZWQgJGlucHV0X2Zvcm1hdCAmJiAvXlstQS1aYS16XSs6XHMvKSB7CisJCQkkaW5wdXRfZm9ybWF0ID0gJ21ib3gnOworCQl9CisKKwkJaWYgKGRlZmluZWQgJGlucHV0X2Zvcm1hdCAmJiAkaW5wdXRfZm9ybWF0IGVxICdtYm94JykgeworCQkJaWYgKC9eU3ViamVjdDpccysoLiopJC9pKSB7CisJCQkJJHN1YmplY3QgPSAkMTsKKwkJCX0KKwkJCWVsc2lmICgvXkZyb206XHMrKC4qKSQvaSkgeworCQkJCSgkYXV0aG9yLCAkYXV0aG9yX2VuY29kaW5nKSA9IHVucXVvdGVfcmZjMjA0NygkMSk7CisJCQkJJHNhdXRob3IgPSBzYW5pdGl6ZV9hZGRyZXNzKCRhdXRob3IpOworCQkJCW5leHQgaWYgJHN1cHByZXNzX2NjeydhdXRob3InfTsKKwkJCQluZXh0IGlmICRzdXBwcmVzc19jY3snc2VsZid9IGFuZCAkc2F1dGhvciBlcSAkc2VuZGVyOworCQkJCXByaW50ZihfXygiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIpLAorCQkJCQkkMSwgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJcHVzaCBAY2MsICQxOworCQkJfQorCQkJZWxzaWYgKC9eVG86XHMrKC4qKSQvaSkgeworCQkJCWZvcmVhY2ggbXkgJGFkZHIgKHBhcnNlX2FkZHJlc3NfbGluZSgkMSkpIHsKKwkJCQkJcHJpbnRmKF9fKCIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIiksCisJCQkJCQkkYWRkciwgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJCXB1c2ggQHRvLCAkYWRkcjsKKwkJCQl9CisJCQl9CisJCQllbHNpZiAoL15DYzpccysoLiopJC9pKSB7CisJCQkJZm9yZWFjaCBteSAkYWRkciAocGFyc2VfYWRkcmVzc19saW5lKCQxKSkgeworCQkJCQlteSAkcWFkZHIgPSB1bnF1b3RlX3JmYzIwNDcoJGFkZHIpOworCQkJCQlteSAkc2FkZHIgPSBzYW5pdGl6ZV9hZGRyZXNzKCRxYWRkcik7CisJCQkJCWlmICgkc2FkZHIgZXEgJHNlbmRlcikgeworCQkJCQkJbmV4dCBpZiAoJHN1cHByZXNzX2NjeydzZWxmJ30pOworCQkJCQl9IGVsc2UgeworCQkJCQkJbmV4dCBpZiAoJHN1cHByZXNzX2NjeydjYyd9KTsKKwkJCQkJfQorCQkJCQlwcmludGYoX18oIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iKSwKKwkJCQkJCSRhZGRyLCAkXykgdW5sZXNzICRxdWlldDsKKwkJCQkJcHVzaCBAY2MsICRhZGRyOworCQkJCX0KKwkJCX0KKwkJCWVsc2lmICgvXkNvbnRlbnQtdHlwZTovaSkgeworCQkJCSRoYXNfY29udGVudF90eXBlID0gMTsKKwkJCQlpZiAoL2NoYXJzZXQ9Ij8oW14gIl0rKS8pIHsKKwkJCQkJJGJvZHlfZW5jb2RpbmcgPSAkMTsKKwkJCQl9CisJCQkJcHVzaCBAeGgsICRfOworCQkJfQorCQkJZWxzaWYgKC9eTUlNRS1WZXJzaW9uL2kpIHsKKwkJCQkkaGFzX21pbWVfdmVyc2lvbiA9IDE7CisJCQkJcHVzaCBAeGgsICRfOworCQkJfQorCQkJZWxzaWYgKC9eTWVzc2FnZS1JZDogKC4qKS9pKSB7CisJCQkJJG1lc3NhZ2VfaWQgPSAkMTsKKwkJCX0KKwkJCWVsc2lmICgvXkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICguKikvaSkgeworCQkJCSR4ZmVyX2VuY29kaW5nID0gJDEgaWYgbm90IGRlZmluZWQgJHhmZXJfZW5jb2Rpbmc7CisJCQl9CisJCQllbHNpZiAoL15Jbi1SZXBseS1UbzogKC4qKS9pKSB7CisJCQkJJGluX3JlcGx5X3RvID0gJDE7CisJCQl9CisJCQllbHNpZiAoL15SZWZlcmVuY2VzOiAoLiopL2kpIHsKKwkJCQkkcmVmZXJlbmNlcyA9ICQxOworCQkJfQorCQkJZWxzaWYgKCEvXkRhdGU6XHMvaSAmJiAvXlstQS1aYS16XSs6XHMrXFMvKSB7CisJCQkJcHVzaCBAeGgsICRfOworCQkJfQorCQl9IGVsc2UgeworCQkJIyBJbiB0aGUgdHJhZGl0aW9uYWwKKwkJCSMgInNlbmQgbG90cyBvZiBlbWFpbCIgZm9ybWF0LAorCQkJIyBsaW5lIDEgPSBjYworCQkJIyBsaW5lIDIgPSBzdWJqZWN0CisJCQkjIFNvIGxldCdzIHN1cHBvcnQgdGhhdCwgdG9vLgorCQkJJGlucHV0X2Zvcm1hdCA9ICdsb3RzJzsKKwkJCWlmIChAY2MgPT0gMCAmJiAhJHN1cHByZXNzX2NjeydjYyd9KSB7CisJCQkJcHJpbnRmKF9fKCIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIpLAorCQkJCQkkXywgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJcHVzaCBAY2MsICRfOworCQkJfSBlbHNpZiAoIWRlZmluZWQgJHN1YmplY3QpIHsKKwkJCQkkc3ViamVjdCA9ICRfOworCQkJfQorCQl9CisJfQorCSMgTm93IHBhcnNlIHRoZSBtZXNzYWdlIGJvZHkKKwl3aGlsZSg8JGZoPikgeworCQkkbWVzc2FnZSAuPSAgJF87CisJCWlmICgvXihbYS16XVthLXotXSotYnl8Q2MpOiAoLiopL2kpIHsKKwkJCWNob21wOworCQkJbXkgKCR3aGF0LCAkYykgPSAoJDEsICQyKTsKKwkJCSMgc3RyaXAgZ2FyYmFnZSBmb3IgdGhlIGFkZHJlc3Mgd2UnbGwgdXNlOgorCQkJJGMgPSBzdHJpcF9nYXJiYWdlX29uZV9hZGRyZXNzKCRjKTsKKwkJCSMgc2FuaXRpemUgYSBiaXQgbW9yZSB0byBkZWNpZGUgd2hldGhlciB0byBzdXBwcmVzcyB0aGUgYWRkcmVzczoKKwkJCW15ICRzYyA9IHNhbml0aXplX2FkZHJlc3MoJGMpOworCQkJaWYgKCRzYyBlcSAkc2VuZGVyKSB7CisJCQkJbmV4dCBpZiAoJHN1cHByZXNzX2NjeydzZWxmJ30pOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoJHdoYXQgPX4gL15TaWduZWQtb2ZmLWJ5JC9pKSB7CisJCQkJCW5leHQgaWYgJHN1cHByZXNzX2Njeydzb2InfTsKKwkJCQl9IGVsc2lmICgkd2hhdCA9fiAvLWJ5JC9pKSB7CisJCQkJCW5leHQgaWYgJHN1cHByZXNzX2NjeydtaXNjLWJ5J307CisJCQkJfSBlbHNpZiAoJHdoYXQgPX4gL0NjL2kpIHsKKwkJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J2JvZHljYyd9OworCQkJCX0KKwkJCX0KKwkJCWlmICgkYyAhfiAvLitALit8PC4rPi8pIHsKKwkJCQlwcmludGYoIihib2R5KSBJZ25vcmluZyAlcyBmcm9tIGxpbmUgJyVzJ1xuIiwKKwkJCQkJJHdoYXQsICRfKSB1bmxlc3MgJHF1aWV0OworCQkJCW5leHQ7CisJCQl9CisJCQlwdXNoIEBjYywgJGM7CisJCQlwcmludGYoX18oIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iKSwKKwkJCQkkYywgJF8pIHVubGVzcyAkcXVpZXQ7CisJCX0KKwl9CisJY2xvc2UgJGZoOworCisJcHVzaCBAdG8sIHJlY2lwaWVudHNfY21kKCJ0by1jbWQiLCAidG8iLCAkdG9fY21kLCAkdCkKKwkJaWYgZGVmaW5lZCAkdG9fY21kOworCXB1c2ggQGNjLCByZWNpcGllbnRzX2NtZCgiY2MtY21kIiwgImNjIiwgJGNjX2NtZCwgJHQpCisJCWlmIGRlZmluZWQgJGNjX2NtZCAmJiAhJHN1cHByZXNzX2NjeydjY2NtZCd9OworCisJaWYgKCRicm9rZW5fZW5jb2Rpbmd7JHR9ICYmICEkaGFzX2NvbnRlbnRfdHlwZSkgeworCQkkeGZlcl9lbmNvZGluZyA9ICc4Yml0JyBpZiBub3QgZGVmaW5lZCAkeGZlcl9lbmNvZGluZzsKKwkJJGhhc19jb250ZW50X3R5cGUgPSAxOworCQlwdXNoIEB4aCwgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0kYXV0b184Yml0X2VuY29kaW5nIjsKKwkJJGJvZHlfZW5jb2RpbmcgPSAkYXV0b184Yml0X2VuY29kaW5nOworCX0KKworCWlmICgkYnJva2VuX2VuY29kaW5neyR0fSAmJiAhaXNfcmZjMjA0N19xdW90ZWQoJHN1YmplY3QpKSB7CisJCSRzdWJqZWN0ID0gcXVvdGVfc3ViamVjdCgkc3ViamVjdCwgJGF1dG9fOGJpdF9lbmNvZGluZyk7CisJfQorCisJaWYgKGRlZmluZWQgJHNhdXRob3IgYW5kICRzYXV0aG9yIG5lICRzZW5kZXIpIHsKKwkJJG1lc3NhZ2UgPSAiRnJvbTogJGF1dGhvclxuXG4kbWVzc2FnZSI7CisJCWlmIChkZWZpbmVkICRhdXRob3JfZW5jb2RpbmcpIHsKKwkJCWlmICgkaGFzX2NvbnRlbnRfdHlwZSkgeworCQkJCWlmICgkYm9keV9lbmNvZGluZyBlcSAkYXV0aG9yX2VuY29kaW5nKSB7CisJCQkJCSMgb2ssIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgZW5jb2RpbmcKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCSMgdWggb2gsIHdlIHNob3VsZCByZS1lbmNvZGUKKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQkkeGZlcl9lbmNvZGluZyA9ICc4Yml0JyBpZiBub3QgZGVmaW5lZCAkeGZlcl9lbmNvZGluZzsKKwkJCQkkaGFzX2NvbnRlbnRfdHlwZSA9IDE7CisJCQkJcHVzaCBAeGgsCisJCQkJICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSRhdXRob3JfZW5jb2RpbmciOworCQkJfQorCQl9CisJfQorCSR4ZmVyX2VuY29kaW5nID0gJzhiaXQnIGlmIG5vdCBkZWZpbmVkICR4ZmVyX2VuY29kaW5nOworCSgkbWVzc2FnZSwgJHhmZXJfZW5jb2RpbmcpID0gYXBwbHlfdHJhbnNmZXJfZW5jb2RpbmcoCisJCSRtZXNzYWdlLCAkeGZlcl9lbmNvZGluZywgJHRhcmdldF94ZmVyX2VuY29kaW5nKTsKKwlwdXNoIEB4aCwgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICR4ZmVyX2VuY29kaW5nIjsKKwl1bnNoaWZ0IEB4aCwgJ01JTUUtVmVyc2lvbjogMS4wJyB1bmxlc3MgJGhhc19taW1lX3ZlcnNpb247CisKKwkkbmVlZHNfY29uZmlybSA9ICgKKwkJJGNvbmZpcm0gZXEgImFsd2F5cyIgb3IKKwkJKCRjb25maXJtID1+IC9eKD86YXV0b3xjYykkLyAmJiBAY2MpIG9yCisJCSgkY29uZmlybSA9fiAvXig/OmF1dG98Y29tcG9zZSkkLyAmJiAkY29tcG9zZSAmJiAkbWVzc2FnZV9udW0gPT0gMSkpOworCSRuZWVkc19jb25maXJtID0gImluZm9ybSIgaWYgKCRuZWVkc19jb25maXJtICYmICRjb25maXJtX3VuY29uZmlndXJlZCAmJiBAY2MpOworCisJQHRvID0gcHJvY2Vzc19hZGRyZXNzX2xpc3QoQHRvKTsKKwlAY2MgPSBwcm9jZXNzX2FkZHJlc3NfbGlzdChAY2MpOworCisJQHRvID0gKEBpbml0aWFsX3RvLCBAdG8pOworCUBjYyA9IChAaW5pdGlhbF9jYywgQGNjKTsKKworCWlmICgkbWVzc2FnZV9udW0gPT0gMSkgeworCQlpZiAoZGVmaW5lZCAkY292ZXJfY2MgYW5kICRjb3Zlcl9jYykgeworCQkJQGluaXRpYWxfY2MgPSBAY2M7CisJCX0KKwkJaWYgKGRlZmluZWQgJGNvdmVyX3RvIGFuZCAkY292ZXJfdG8pIHsKKwkJCUBpbml0aWFsX3RvID0gQHRvOworCQl9CisJfQorCisJbXkgJG1lc3NhZ2Vfd2FzX3NlbnQgPSBzZW5kX21lc3NhZ2UoKTsKKwlpZiAoJG1lc3NhZ2Vfd2FzX3NlbnQgPT0gLTEpIHsKKwkJZG9fZWRpdCgkdCk7CisJCXJldHVybiAwOworCX0KKworCSMgc2V0IHVwIGZvciB0aGUgbmV4dCBtZXNzYWdlCisJaWYgKCR0aHJlYWQgJiYgJG1lc3NhZ2Vfd2FzX3NlbnQgJiYKKwkJKCRjaGFpbl9yZXBseV90byB8fCAhZGVmaW5lZCAkaW5fcmVwbHlfdG8gfHwgbGVuZ3RoKCRpbl9yZXBseV90bykgPT0gMCB8fAorCQkkbWVzc2FnZV9udW0gPT0gMSkpIHsKKwkJJGluX3JlcGx5X3RvID0gJG1lc3NhZ2VfaWQ7CisJCWlmIChsZW5ndGggJHJlZmVyZW5jZXMgPiAwKSB7CisJCQkkcmVmZXJlbmNlcyAuPSAiXG4gJG1lc3NhZ2VfaWQiOworCQl9IGVsc2UgeworCQkJJHJlZmVyZW5jZXMgPSAiJG1lc3NhZ2VfaWQiOworCQl9CisJfQorCSRtZXNzYWdlX2lkID0gdW5kZWY7CisJJG51bV9zZW50Kys7CisJaWYgKGRlZmluZWQgJGJhdGNoX3NpemUgJiYgJG51bV9zZW50ID09ICRiYXRjaF9zaXplKSB7CisJCSRudW1fc2VudCA9IDA7CisJCSRzbXRwLT5xdWl0IGlmIGRlZmluZWQgJHNtdHA7CisJCXVuZGVmICRzbXRwOworCQl1bmRlZiAkYXV0aDsKKwkJc2xlZXAoJHJlbG9naW5fZGVsYXkpIGlmIGRlZmluZWQgJHJlbG9naW5fZGVsYXk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ZvcmVhY2ggbXkgJHQgKEBmaWxlcykgeworCXdoaWxlICghcHJvY2Vzc19maWxlKCR0KSkgeworCQkjIHVzZXIgZWRpdGVkIHRoZSBmaWxlCisJfQorfQorCisjIEV4ZWN1dGUgYSBjb21tYW5kIChlLmcuICR0b19jbWQpIHRvIGdldCBhIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzCisjIGFuZCByZXR1cm4gYSByZXN1bHRzIGFycmF5CitzdWIgcmVjaXBpZW50c19jbWQgeworCW15ICgkcHJlZml4LCAkd2hhdCwgJGNtZCwgJGZpbGUpID0gQF87CisKKwlteSBAYWRkcmVzc2VzID0gKCk7CisJb3BlbiBteSAkZmgsICItfCIsICIkY21kIFxRJGZpbGVcRSIKKwkgICAgb3IgZGllIHNwcmludGYoX18oIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIpLCAkcHJlZml4LCAkY21kKTsKKwl3aGlsZSAobXkgJGFkZHJlc3MgPSA8JGZoPikgeworCQkkYWRkcmVzcyA9fiBzL15ccyovL2c7CisJCSRhZGRyZXNzID1+IHMvXHMqJC8vZzsKKwkJJGFkZHJlc3MgPSBzYW5pdGl6ZV9hZGRyZXNzKCRhZGRyZXNzKTsKKwkJbmV4dCBpZiAoJGFkZHJlc3MgZXEgJHNlbmRlciBhbmQgJHN1cHByZXNzX2NjeydzZWxmJ30pOworCQlwdXNoIEBhZGRyZXNzZXMsICRhZGRyZXNzOworCQlwcmludGYoX18oIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iKSwKKwkJICAgICAgICRwcmVmaXgsICR3aGF0LCAkYWRkcmVzcywgJGNtZCkgdW5sZXNzICRxdWlldDsKKwkJfQorCWNsb3NlICRmaAorCSAgICBvciBkaWUgc3ByaW50ZihfXygiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIiksICRwcmVmaXgsICRjbWQpOworCXJldHVybiBAYWRkcmVzc2VzOworfQorCitjbGVhbnVwX2NvbXBvc2VfZmlsZXMoKTsKKworc3ViIGNsZWFudXBfY29tcG9zZV9maWxlcyB7CisJdW5saW5rKCRjb21wb3NlX2ZpbGVuYW1lLCAkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiKSBpZiAkY29tcG9zZTsKK30KKworJHNtdHAtPnF1aXQgaWYgJHNtdHA7CisKK3N1YiBhcHBseV90cmFuc2Zlcl9lbmNvZGluZyB7CisJbXkgJG1lc3NhZ2UgPSBzaGlmdDsKKwlteSAkZnJvbSA9IHNoaWZ0OworCW15ICR0byA9IHNoaWZ0OworCisJcmV0dXJuICgkbWVzc2FnZSwgJHRvKSBpZiAoJGZyb20gZXEgJHRvIGFuZCAkZnJvbSBuZSAnN2JpdCcpOworCisJcmVxdWlyZSBNSU1FOjpRdW90ZWRQcmludDsKKwlyZXF1aXJlIE1JTUU6OkJhc2U2NDsKKworCSRtZXNzYWdlID0gTUlNRTo6UXVvdGVkUHJpbnQ6OmRlY29kZSgkbWVzc2FnZSkKKwkJaWYgKCRmcm9tIGVxICdxdW90ZWQtcHJpbnRhYmxlJyk7CisJJG1lc3NhZ2UgPSBNSU1FOjpCYXNlNjQ6OmRlY29kZSgkbWVzc2FnZSkKKwkJaWYgKCRmcm9tIGVxICdiYXNlNjQnKTsKKworCSR0byA9ICgkbWVzc2FnZSA9fiAvKD86Lns5OTksfXxccikvKSA/ICdxdW90ZWQtcHJpbnRhYmxlJyA6ICc4Yml0JworCQlpZiAkdG8gZXEgJ2F1dG8nOworCisJZGllIF9fKCJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiKQorCQlpZiAoJHRvIGVxICc3Yml0JyBhbmQgJG1lc3NhZ2UgPX4gL1teWzphc2NpaTpdXS8pOworCXJldHVybiAoJG1lc3NhZ2UsICR0bykKKwkJaWYgKCR0byBlcSAnN2JpdCcgb3IgJHRvIGVxICc4Yml0Jyk7CisJcmV0dXJuIChNSU1FOjpRdW90ZWRQcmludDo6ZW5jb2RlKCRtZXNzYWdlLCAiXG4iLCAwKSwgJHRvKQorCQlpZiAoJHRvIGVxICdxdW90ZWQtcHJpbnRhYmxlJyk7CisJcmV0dXJuIChNSU1FOjpCYXNlNjQ6OmVuY29kZSgkbWVzc2FnZSwgIlxuIiksICR0bykKKwkJaWYgKCR0byBlcSAnYmFzZTY0Jyk7CisJZGllIF9fKCJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIik7Cit9CisKK3N1YiB1bmlxdWVfZW1haWxfbGlzdCB7CisJbXkgJXNlZW47CisJbXkgQGVtYWlsczsKKworCWZvcmVhY2ggbXkgJGVudHJ5IChAXykgeworCQlteSAkY2xlYW4gPSBleHRyYWN0X3ZhbGlkX2FkZHJlc3Nfb3JfZGllKCRlbnRyeSk7CisJCSRzZWVueyRjbGVhbn0gfHw9IDA7CisJCW5leHQgaWYgJHNlZW57JGNsZWFufSsrOworCQlwdXNoIEBlbWFpbHMsICRlbnRyeTsKKwl9CisJcmV0dXJuIEBlbWFpbHM7Cit9CisKK3N1YiB2YWxpZGF0ZV9wYXRjaCB7CisJbXkgKCRmbiwgJHhmZXJfZW5jb2RpbmcpID0gQF87CisKKwlpZiAoJHJlcG8pIHsKKwkJbXkgJHZhbGlkYXRlX2hvb2sgPSBjYXRmaWxlKGNhdGRpcigkcmVwby0+cmVwb19wYXRoKCksICdob29rcycpLAorCQkJCQkgICAgJ3NlbmRlbWFpbC12YWxpZGF0ZScpOworCQlteSAkaG9va19lcnJvcjsKKwkJaWYgKC14ICR2YWxpZGF0ZV9ob29rKSB7CisJCQlteSAkdGFyZ2V0ID0gYWJzX3BhdGgoJGZuKTsKKwkJCSMgVGhlIGhvb2sgbmVlZHMgYSBjb3JyZWN0IGN3ZCBhbmQgR0lUX0RJUi4KKwkJCW15ICRjd2Rfc2F2ZSA9IGN3ZCgpOworCQkJY2hkaXIoJHJlcG8tPndjX3BhdGgoKSBvciAkcmVwby0+cmVwb19wYXRoKCkpCisJCQkJb3IgZGllKCJjaGRpcjogJCEiKTsKKwkJCWxvY2FsICRFTlZ7IkdJVF9ESVIifSA9ICRyZXBvLT5yZXBvX3BhdGgoKTsKKwkJCSRob29rX2Vycm9yID0gInJlamVjdGVkIGJ5IHNlbmRlbWFpbC12YWxpZGF0ZSBob29rIgorCQkJCWlmIHN5c3RlbSgkdmFsaWRhdGVfaG9vaywgJHRhcmdldCk7CisJCQljaGRpcigkY3dkX3NhdmUpIG9yIGRpZSgiY2hkaXI6ICQhIik7CisJCX0KKwkJcmV0dXJuICRob29rX2Vycm9yIGlmICRob29rX2Vycm9yOworCX0KKworCSMgQW55IGxvbmcgbGluZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZpeGVkIGlmIHdlIHVzZSBhIHN1aXRhYmxlIHRyYW5zZmVyCisJIyBlbmNvZGluZy4KKwl1bmxlc3MgKCR4ZmVyX2VuY29kaW5nID1+IC9eKD86YXV0b3xxdW90ZWQtcHJpbnRhYmxlfGJhc2U2NCkkLykgeworCQlvcGVuKG15ICRmaCwgJzwnLCAkZm4pCisJCQlvciBkaWUgc3ByaW50ZihfXygidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iKSwgJGZuLCAkISk7CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCQlpZiAobGVuZ3RoKCRsaW5lKSA+IDk5OCkgeworCQkJCXJldHVybiBzcHJpbnRmKF9fKCIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIiksICQuKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N1YiBoYW5kbGVfYmFja3VwIHsKKwlteSAoJGxhc3QsICRsYXN0bGVuLCAkZmlsZSwgJGtub3duX3N1ZmZpeCkgPSBAXzsKKwlteSAoJHN1ZmZpeCwgJHNraXApOworCisJJHNraXAgPSAwOworCWlmIChkZWZpbmVkICRsYXN0ICYmCisJICAgICgkbGFzdGxlbiA8IGxlbmd0aCgkZmlsZSkpICYmCisJICAgIChzdWJzdHIoJGZpbGUsIDAsICRsYXN0bGVuKSBlcSAkbGFzdCkgJiYKKwkgICAgKCRzdWZmaXggPSBzdWJzdHIoJGZpbGUsICRsYXN0bGVuKSkgIX4gL15bYS16MC05XS9pKSB7CisJCWlmIChkZWZpbmVkICRrbm93bl9zdWZmaXggJiYgJHN1ZmZpeCBlcSAka25vd25fc3VmZml4KSB7CisJCQlwcmludGYoX18oIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIiksICRmaWxlLCAka25vd25fc3VmZml4KTsKKwkJCSRza2lwID0gMTsKKwkJfSBlbHNlIHsKKwkJCSMgVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisJCQlteSAkYW5zd2VyID0gYXNrKHNwcmludGYoX18oIkRvIHlvdSByZWFsbHkgd2FudCB0byBzZW5kICVzPyBbeXxOXTogIiksICRmaWxlKSwKKwkJCQkJIHZhbGlkX3JlID0+IHFyL14oPzp5fG4pL2ksCisJCQkJCSBkZWZhdWx0ID0+ICduJyk7CisJCQkkc2tpcCA9ICgkYW5zd2VyIG5lICd5Jyk7CisJCQlpZiAoJHNraXApIHsKKwkJCQkka25vd25fc3VmZml4ID0gJHN1ZmZpeDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKCRza2lwLCAka25vd25fc3VmZml4KTsKK30KKworc3ViIGhhbmRsZV9iYWNrdXBfZmlsZXMgeworCW15IEBmaWxlID0gQF87CisJbXkgKCRsYXN0LCAkbGFzdGxlbiwgJGtub3duX3N1ZmZpeCwgJHNraXAsIEByZXN1bHQpOworCWZvciBteSAkZmlsZSAoQGZpbGUpIHsKKwkJKCRza2lwLCAka25vd25fc3VmZml4KSA9IGhhbmRsZV9iYWNrdXAoJGxhc3QsICRsYXN0bGVuLAorCQkJCQkJICAgICAgICRmaWxlLCAka25vd25fc3VmZml4KTsKKwkJcHVzaCBAcmVzdWx0LCAkZmlsZSB1bmxlc3MgJHNraXA7CisJCSRsYXN0ID0gJGZpbGU7CisJCSRsYXN0bGVuID0gbGVuZ3RoKCRmaWxlKTsKKwl9CisJcmV0dXJuIEByZXN1bHQ7Cit9CisKK3N1YiBmaWxlX2hhc19ub25hc2NpaSB7CisJbXkgJGZuID0gc2hpZnQ7CisJb3BlbihteSAkZmgsICc8JywgJGZuKQorCQlvciBkaWUgc3ByaW50ZihfXygidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iKSwgJGZuLCAkISk7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJcmV0dXJuIDEgaWYgJGxpbmUgPX4gL1teWzphc2NpaTpdXS87CisJfQorCXJldHVybiAwOworfQorCitzdWIgYm9keV9vcl9zdWJqZWN0X2hhc19ub25hc2NpaSB7CisJbXkgJGZuID0gc2hpZnQ7CisJb3BlbihteSAkZmgsICc8JywgJGZuKQorCQlvciBkaWUgc3ByaW50ZihfXygidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iKSwgJGZuLCAkISk7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJbGFzdCBpZiAkbGluZSA9fiAvXiQvOworCQlyZXR1cm4gMSBpZiAkbGluZSA9fiAvXlN1YmplY3QuKlteWzphc2NpaTpdXS87CisJfQorCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCXJldHVybiAxIGlmICRsaW5lID1+IC9bXls6YXNjaWk6XV0vOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2dpdC1zaC1pMThuLnNoIGIvZ2l0LXNoLWkxOG4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlZjYwYgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zaC1pMThuLnNoCkBAIC0wLDAgKzEsMTExIEBACisjIFRoaXMgc2hlbGwgbGlicmFyeSBpcyBHaXQncyBpbnRlcmZhY2UgdG8gZ2V0dGV4dC5zaC4gU2VlIHBvL1JFQURNRQorIyBmb3IgdXNhZ2UgaW5zdHJ1Y3Rpb25zLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKworIyBFeHBvcnQgdGhlIFRFWFRET01BSU4qIGRhdGEgdGhhdCB3ZSBuZWVkIGZvciBHaXQKK1RFWFRET01BSU49Z2l0CitleHBvcnQgVEVYVERPTUFJTgoraWYgdGVzdCAteiAiJEdJVF9URVhURE9NQUlORElSIgordGhlbgorCVRFWFRET01BSU5ESVI9IkBATE9DQUxFRElSQEAiCitlbHNlCisJVEVYVERPTUFJTkRJUj0iJEdJVF9URVhURE9NQUlORElSIgorZmkKK2V4cG9ydCBURVhURE9NQUlORElSCisKKyMgRmlyc3QgZGVjaWRlIHdoYXQgc2NoZW1lIHRvIHVzZS4uLgorR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPWZhbGx0aHJvdWdoCitpZiB0ZXN0IC1uICIkR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04iICYmCisJICAgIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MCAtLWV4aXQtY29kZSBcCisJCUdJVF9URVNUX0dFVFRFWFRfUE9JU09OCit0aGVuCisJR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPXBvaXNvbgorZWxpZiB0ZXN0IC1uICJAQFVTRV9HRVRURVhUX1NDSEVNRUBAIgordGhlbgorCUdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRT0iQEBVU0VfR0VUVEVYVF9TQ0hFTUVAQCIKK2VsaWYgdGVzdCAtbiAiJEdJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTIgordGhlbgorCTogbm8gcHJvYmluZyBuZWNlc3NhcnkKK2VsaWYgdHlwZSBnZXR0ZXh0LnNoID4vZGV2L251bGwgMj4mMQordGhlbgorCSMgR05VIGxpYmludGwncyBnZXR0ZXh0LnNoCisJR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPWdudQorZWxpZiB0ZXN0ICIkKGdldHRleHQgLWggMj4mMSkiID0gIi1oIgordGhlbgorCSMgZ2V0dGV4dCBiaW5hcnkgZXhpc3RzIGJ1dCBubyBnZXR0ZXh0LnNoLiBsaWtlbHkgdG8gYmUgYSBnZXR0ZXh0CisJIyBiaW5hcnkgb24gYSBTb2xhcmlzIG9yIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBHTlUgbGliaW50bCBhbmQKKwkjIGxhY2sgZXZhbF9nZXR0ZXh0LgorCUdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRT1nZXR0ZXh0X3dpdGhvdXRfZXZhbF9nZXR0ZXh0CitmaQorZXhwb3J0IEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRQorCisjIC4uLiBhbmQgdGhlbiBmb2xsb3cgdGhhdCBkZWNpc2lvbi4KK2Nhc2UgIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiIGluCitnbnUpCisJIyBVc2UgbGliaW50bCdzIGdldHRleHQuc2gsIG9yIGZhbGwgYmFjayB0byBFbmdsaXNoIGlmIHdlIGNhbid0LgorCS4gZ2V0dGV4dC5zaAorCTs7CitnZXR0ZXh0X3dpdGhvdXRfZXZhbF9nZXR0ZXh0KQorCSMgU29sYXJpcyBoYXMgYSBnZXR0ZXh0KDEpIGJ1dCBubyBldmFsX2dldHRleHQoMSkKKwlldmFsX2dldHRleHQgKCkgeworCQlnZXR0ZXh0ICIkMSIgfCAoCisJCQlleHBvcnQgUEFUSCAkKGdpdCBzaC1pMThuLS1lbnZzdWJzdCAtLXZhcmlhYmxlcyAiJDEiKTsKKwkJCWdpdCBzaC1pMThuLS1lbnZzdWJzdCAiJDEiCisJCSkKKwl9CisKKwlldmFsX25nZXR0ZXh0ICgpIHsKKwkJbmdldHRleHQgIiQxIiAiJDIiICIkMyIgfCAoCisJCQlleHBvcnQgUEFUSCAkKGdpdCBzaC1pMThuLS1lbnZzdWJzdCAtLXZhcmlhYmxlcyAiJDIiKTsKKwkJCWdpdCBzaC1pMThuLS1lbnZzdWJzdCAiJDIiCisJCSkKKwl9CisJOzsKK3BvaXNvbikKKwkjIEVtaXQgZ2FyYmFnZSBzbyB0aGF0IHRlc3RzIHRoYXQgaW5jb3JyZWN0bHkgcmVseSBvbiB0cmFuc2xhdGFibGUKKwkjIHN0cmluZ3Mgd2lsbCBmYWlsLgorCWdldHRleHQgKCkgeworCQlwcmludGYgIiVzIiAiIyBHRVRURVhUIFBPSVNPTiAjIgorCX0KKworCWV2YWxfZ2V0dGV4dCAoKSB7CisJCXByaW50ZiAiJXMiICIjIEdFVFRFWFQgUE9JU09OICMiCisJfQorCisJZXZhbF9uZ2V0dGV4dCAoKSB7CisJCXByaW50ZiAiJXMiICIjIEdFVFRFWFQgUE9JU09OICMiCisJfQorCTs7CisqKQorCWdldHRleHQgKCkgeworCQlwcmludGYgIiVzIiAiJDEiCisJfQorCisJZXZhbF9nZXR0ZXh0ICgpIHsKKwkJcHJpbnRmICIlcyIgIiQxIiB8ICgKKwkJCWV4cG9ydCBQQVRIICQoZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICIkMSIpOworCQkJZ2l0IHNoLWkxOG4tLWVudnN1YnN0ICIkMSIKKwkJKQorCX0KKworCWV2YWxfbmdldHRleHQgKCkgeworCQkodGVzdCAiJDMiID0gMSAmJiBwcmludGYgIiVzIiAiJDEiIHx8IHByaW50ZiAiJXMiICIkMiIpIHwgKAorCQkJZXhwb3J0IFBBVEggJChnaXQgc2gtaTE4bi0tZW52c3Vic3QgLS12YXJpYWJsZXMgIiQyIik7CisJCQlnaXQgc2gtaTE4bi0tZW52c3Vic3QgIiQyIgorCQkpCisJfQorCTs7Citlc2FjCisKKyMgR2l0LXNwZWNpZmljIHdyYXBwZXIgZnVuY3Rpb25zCitnZXR0ZXh0bG4gKCkgeworCWdldHRleHQgIiQxIgorCWVjaG8KK30KKworZXZhbF9nZXR0ZXh0bG4gKCkgeworCWV2YWxfZ2V0dGV4dCAiJDEiCisJZWNobworfQpkaWZmIC0tZ2l0IGEvZ2l0LXNoLXNldHVwLnNoIGIvZ2l0LXNoLXNldHVwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDk3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtc2gtc2V0dXAuc2gKQEAgLTAsMCArMSwzOTkgQEAKKyMgVGhpcyBzaGVsbCBzY3JpcGxldCBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBieSBvdGhlciBzaGVsbCBzY3JpcHRzCisjIHRvIHNldCB1cCBzb21lIHZhcmlhYmxlcyBwb2ludGluZyBhdCB0aGUgbm9ybWFsIGdpdCBkaXJlY3RvcmllcyBhbmQKKyMgYSBmZXcgaGVscGVyIHNoZWxsIGZ1bmN0aW9ucy4KKworIyBIYXZpbmcgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHdvdWxkIGJyZWFrIHNjcmlwdHMgYmVjYXVzZQorIyB5b3Ugd291bGQgY2F1c2UgImNkIiB0byBiZSB0YWtlbiB0byB1bmV4cGVjdGVkIHBsYWNlcy4gIElmIHlvdQorIyBsaWtlIENEUEFUSCwgZGVmaW5lIGl0IGZvciB5b3VyIGludGVyYWN0aXZlIHNoZWxsIHNlc3Npb25zIHdpdGhvdXQKKyMgZXhwb3J0aW5nIGl0LgorIyBCdXQgd2UgcHJvdGVjdCBvdXJzZWx2ZXMgZnJvbSBzdWNoIGEgdXNlciBtaXN0YWtlIG5ldmVydGhlbGVzcy4KK3Vuc2V0IENEUEFUSAorCisjIFNpbWlsYXJseSBmb3IgSUZTLCBidXQgc29tZSBzaGVsbHMgKGUuZy4gRnJlZUJTRCA3LjIpIGFyZSBidWdneSBhbmQKKyMgZG8gbm90IGVxdWF0ZSBhbiB1bnNldCBJRlMgd2l0aCBJRlMgd2l0aCB0aGUgZGVmYXVsdCwgc28gaGVyZSBpcworIyBhbiBleHBsaWNpdCBTUCBIVCBMRi4KK0lGUz0nIAkKKycKKworZ2l0X2Jyb2tlbl9wYXRoX2ZpeCAoKSB7CisJY2FzZSAiOiRQQVRIOiIgaW4KKwkqOiQxOiopIDogb2sgOzsKKwkqKQorCQlQQVRIPSQoCisJCQlTQU5FX1RPT0xfUEFUSD0iJDEiCisJCQlJRlM9OiBwYXRoPSBzZXA9CisJCQlzZXQgeCAkUEFUSAorCQkJc2hpZnQKKwkJCWZvciBlbGVtCisJCQlkbworCQkJCWNhc2UgIiRTQU5FX1RPT0xfUEFUSDokZWxlbSIgaW4KKwkJCQkoPyo6L2JpbiB8ID8qOi91c3IvYmluKQorCQkJCQlwYXRoPSIkcGF0aCRzZXAkU0FORV9UT09MX1BBVEgiCisJCQkJCXNlcD06CisJCQkJCVNBTkVfVE9PTF9QQVRIPQorCQkJCWVzYWMKKwkJCQlwYXRoPSIkcGF0aCRzZXAkZWxlbSIKKwkJCQlzZXA9OgorCQkJZG9uZQorCQkJZWNobyAiJHBhdGgiCisJCSkKKwkJOzsKKwllc2FjCit9CisKKyMgQEBCUk9LRU5fUEFUSF9GSVhAQAorCisjIFNvdXJjZSBnaXQtc2gtaTE4biBmb3IgZ2V0dGV4dCBzdXBwb3J0LgorLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1zaC1pMThuIgorCitkaWUgKCkgeworCWRpZV93aXRoX3N0YXR1cyAxICIkQCIKK30KKworZGllX3dpdGhfc3RhdHVzICgpIHsKKwlzdGF0dXM9JDEKKwlzaGlmdAorCXByaW50ZiA+JjIgJyVzXG4nICIkKiIKKwlleGl0ICIkc3RhdHVzIgorfQorCitHSVRfUVVJRVQ9CisKK3NheSAoKSB7CisJaWYgdGVzdCAteiAiJEdJVF9RVUlFVCIKKwl0aGVuCisJCXByaW50ZiAnJXNcbicgIiQqIgorCWZpCit9CisKK2lmIHRlc3QgLW4gIiRPUFRJT05TX1NQRUMiOyB0aGVuCisJdXNhZ2UoKSB7CisJCSIkMCIgLWgKKwkJZXhpdCAxCisJfQorCisJcGFyc2VvcHRfZXh0cmE9CisJWyAtbiAiJE9QVElPTlNfS0VFUERBU0hEQVNIIiBdICYmCisJCXBhcnNlb3B0X2V4dHJhPSItLWtlZXAtZGFzaGRhc2giCisJWyAtbiAiJE9QVElPTlNfU1RVQ0tMT05HIiBdICYmCisJCXBhcnNlb3B0X2V4dHJhPSIkcGFyc2VvcHRfZXh0cmEgLS1zdHVjay1sb25nIgorCisJZXZhbCAiJCgKKwkJZWNobyAiJE9QVElPTlNfU1BFQyIgfAorCQkJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0ICRwYXJzZW9wdF9leHRyYSAtLSAiJEAiIHx8CisJCWVjaG8gZXhpdCAkPworCSkiCitlbHNlCisJZGFzaGxlc3M9JChiYXNlbmFtZSAtLSAiJDAiIHwgc2VkIC1lICdzLy0vIC8nKQorCXVzYWdlKCkgeworCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJ1c2FnZTogXCRkYXNobGVzcyBcJFVTQUdFIikiCisJfQorCisJaWYgWyAteiAiJExPTkdfVVNBR0UiIF0KKwl0aGVuCisJCUxPTkdfVVNBR0U9IiQoZXZhbF9nZXR0ZXh0ICJ1c2FnZTogXCRkYXNobGVzcyBcJFVTQUdFIikiCisJZWxzZQorCQlMT05HX1VTQUdFPSIkKGV2YWxfZ2V0dGV4dCAidXNhZ2U6IFwkZGFzaGxlc3MgXCRVU0FHRQorCiskTE9OR19VU0FHRSIpIgorCWZpCisKKwljYXNlICIkMSIgaW4KKwkJLWgpCisJCWVjaG8gIiRMT05HX1VTQUdFIgorCQljYXNlICIkMCIgaW4gKmdpdC1sZWdhY3ktc3Rhc2gpIGV4aXQgMTI5OzsgZXNhYworCQlleGl0CisJZXNhYworZmkKKworIyBTZXQgdGhlIG5hbWUgb2YgdGhlIGVuZC11c2VyIGZhY2luZyBjb21tYW5kIGluIHRoZSByZWZsb2cgd2hlbiB0aGUKKyMgc2NyaXB0IG1heSB1cGRhdGUgcmVmcy4gIFdoZW4gR0lUX1JFRkxPR19BQ1RJT04gaXMgYWxyZWFkeSBzZXQsIHRoaXMKKyMgd2lsbCBub3Qgb3ZlcndyaXRlIGl0LCBzbyB0aGF0IGEgc2NyaXB0ZWQgUG9yY2VsYWluIChlLmcuICJnaXQKKyMgcmViYXNlIikgY2FuIHNldCBpdCB0byBpdHMgb3duIG5hbWUgKGUuZy4gInJlYmFzZSIpIGFuZCB0aGVuIGNhbGwKKyMgYW5vdGhlciBzY3JpcHRlZCBQb3JjZWxhaW4gKGUuZy4gImdpdCBhbSIpIGFuZCBhIGNhbGwgdG8gdGhpcworIyBmdW5jdGlvbiBpbiB0aGUgbGF0dGVyIHdpbGwga2VlcCB0aGUgbmFtZSBvZiB0aGUgZW5kLXVzZXIgZmFjaW5nCisjIHByb2dyYW0gKGUuZy4gInJlYmFzZSIpIGluIEdJVF9SRUZMT0dfQUNUSU9OLCBlbnN1cmluZyB3aGF0ZXZlciBpdAorIyBkb2VzIHdpbGwgYmUgcmVjb3JkIGFzIGFjdGlvbnMgZG9uZSBhcyBwYXJ0IG9mIHRoZSBlbmQtdXNlciBmYWNpbmcKKyMgb3BlcmF0aW9uIChlLmcuICJyZWJhc2UiKS4KKyMKKyMgTk9URSBOT1RFIE5PVEU6IGNvbnNlcXVlbnRseSwgYWZ0ZXIgYXNzaWduaW5nIGEgc3BlY2lmaWMgbWVzc2FnZSB0bworIyBHSVRfUkVGTE9HX0FDVElPTiB3aGVuIGNhbGxpbmcgYSAiZ2l0IiBjb21tYW5kIHRvIHJlY29yZCBhIGN1c3RvbQorIyByZWZsb2cgbWVzc2FnZSwgZG8gbm90IGxlYXZlIHRoYXQgY3VzdG9tIHZhbHVlIGluIEdJVF9SRUZMT0dfQUNUSU9OLAorIyBhZnRlciB5b3UgYXJlIGRvbmUuICBPdGhlciBjYWxsZXJzIG9mICJnaXQiIGNvbW1hbmRzIHRoYXQgcmVseSBvbgorIyB3cml0aW5nIHRoZSBkZWZhdWx0ICJwcm9ncmFtIG5hbWUiIGluIHJlZmxvZyBleHBlY3QgdGhlIHZhcmlhYmxlIHRvCisjIGNvbnRhaW4gdGhlIHZhbHVlIHNldCBieSB0aGlzIGZ1bmN0aW9uLgorIworIyBUbyB1c2UgYSBjdXN0b20gcmVmbG9nIG1lc3NhZ2UsIGRvIGVpdGhlciBvbmUgb2YgdGhlc2UgdGhyZWU6CisjCisjIChhKSB1c2UgYSBzaW5nbGUtc2hvdCBleHBvcnQgZm9ybToKKyMgICAgIEdJVF9SRUZMT0dfQUNUSU9OPSIkR0lUX1JFRkxPR19BQ1RJT046IHByZXBhcmluZyBmcm90eiIgXAorIyAgICAgICAgIGdpdCBjb21tYW5kLXRoYXQtdXBkYXRlcy1hLXJlZgorIworIyAoYikgc2F2ZSB0aGUgb3JpZ2luYWwgYXdheSBhbmQgcmVzdG9yZToKKyMgICAgIFNBVkVEX0FDVElPTj0kR0lUX1JFRkxPR19BQ1RJT04KKyMgICAgIEdJVF9SRUZMT0dfQUNUSU9OPSIkR0lUX1JFRkxPR19BQ1RJT046IHByZXBhcmluZyBmcm90eiIKKyMgICAgIGdpdCBjb21tYW5kLXRoYXQtdXBkYXRlcy1hLXJlZgorIyAgICAgR0lUX1JFRkxPR19BQ0lUT049JFNBVkVEX0FDVElPTgorIworIyAoYykgYXNzaWduIHRoZSB2YXJpYWJsZSBpbiBhIHN1YnNoZWxsOgorIyAgICAgKAorIyAgICAgICAgIEdJVF9SRUZMT0dfQUNUSU9OPSIkR0lUX1JFRkxPR19BQ1RJT046IHByZXBhcmluZyBmcm90eiIKKyMgICAgICAgICBnaXQgY29tbWFuZC10aGF0LXVwZGF0ZXMtYS1yZWYKKyMgICAgICkKK3NldF9yZWZsb2dfYWN0aW9uKCkgeworCWlmIFsgLXogIiR7R0lUX1JFRkxPR19BQ1RJT046K3NldH0iIF0KKwl0aGVuCisJCUdJVF9SRUZMT0dfQUNUSU9OPSIkKiIKKwkJZXhwb3J0IEdJVF9SRUZMT0dfQUNUSU9OCisJZmkKK30KKworZ2l0X2VkaXRvcigpIHsKKwlpZiB0ZXN0IC16ICIke0dJVF9FRElUT1I6K3NldH0iCisJdGhlbgorCQlHSVRfRURJVE9SPSIkKGdpdCB2YXIgR0lUX0VESVRPUikiIHx8IHJldHVybiAkPworCWZpCisKKwlldmFsICIkR0lUX0VESVRPUiIgJyIkQCInCit9CisKK2dpdF9wYWdlcigpIHsKKwlpZiB0ZXN0IC10IDEKKwl0aGVuCisJCUdJVF9QQUdFUj0kKGdpdCB2YXIgR0lUX1BBR0VSKQorCWVsc2UKKwkJR0lUX1BBR0VSPWNhdAorCWZpCisJZm9yIHZhcmRlZiBpbiBAQFBBR0VSX0VOVkBACisJZG8KKwkJdmFyPSR7dmFyZGVmJSU9Kn0KKwkJZXZhbCAiOiBcIlwkeyR2YXJkZWZ9XCIgJiYgZXhwb3J0ICR2YXIiCisJZG9uZQorCisJZXZhbCAiJEdJVF9QQUdFUiIgJyIkQCInCit9CisKK3NhbmVfZ3JlcCAoKSB7CisJR1JFUF9PUFRJT05TPSBMQ19BTEw9QyBncmVwIEBAU0FORV9URVhUX0dSRVBAQCAiJEAiCit9CisKK3NhbmVfZWdyZXAgKCkgeworCUdSRVBfT1BUSU9OUz0gTENfQUxMPUMgZWdyZXAgQEBTQU5FX1RFWFRfR1JFUEBAICIkQCIKK30KKworaXNfYmFyZV9yZXBvc2l0b3J5ICgpIHsKKwlnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5Cit9CisKK2NkX3RvX3RvcGxldmVsICgpIHsKKwljZHVwPSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpICYmCisJY2QgIiRjZHVwIiB8fCB7CisJCWdldHRleHRsbiAiQ2Fubm90IGNoZGlyIHRvIFwkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiID4mMgorCQlleGl0IDEKKwl9Cit9CisKK3JlcXVpcmVfd29ya190cmVlX2V4aXN0cyAoKSB7CisJaWYgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiICE9IHpmYWxzZQorCXRoZW4KKwkJcHJvZ3JhbV9uYW1lPSQwCisJCWRpZSAiJChldmFsX2dldHRleHQgImZhdGFsOiBcJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIpIgorCWZpCit9CisKK3JlcXVpcmVfd29ya190cmVlICgpIHsKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlIDI+L2Rldi9udWxsKSIgPSB0cnVlIHx8IHsKKwkJcHJvZ3JhbV9uYW1lPSQwCisJCWRpZSAiJChldmFsX2dldHRleHQgImZhdGFsOiBcJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIpIgorCX0KK30KKworcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgKCkgeworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsIHx8IGV4aXQgMQorCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1pZ25vcmUtc3VibW9kdWxlcyAtLXJlZnJlc2gKKwllcnI9MAorCisJaWYgISBnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMKKwl0aGVuCisJCWFjdGlvbj0kMQorCQljYXNlICIkYWN0aW9uIiBpbgorCQlyZWJhc2UpCisJCQlnZXR0ZXh0bG4gIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIiA+JjIKKwkJCTs7CisJCSJyZXdyaXRlIGJyYW5jaGVzIikKKwkJCWdldHRleHRsbiAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIiA+JjIKKwkJCTs7CisJCSJwdWxsIHdpdGggcmViYXNlIikKKwkJCWdldHRleHRsbiAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIiA+JjIKKwkJCTs7CisJCSopCisJCQlldmFsX2dldHRleHRsbiAiQ2Fubm90IFwkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIgPiYyCisJCQk7OworCQllc2FjCisJCWVycj0xCisJZmkKKworCWlmICEgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUQgLS0KKwl0aGVuCisJCWlmIHRlc3QgJGVyciA9IDAKKwkJdGhlbgorCQkJYWN0aW9uPSQxCisJCQljYXNlICIkYWN0aW9uIiBpbgorCQkJcmViYXNlKQorCQkJCWdldHRleHRsbiAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIgPiYyCisJCQkJOzsKKwkJCSJwdWxsIHdpdGggcmViYXNlIikKKwkJCQlnZXR0ZXh0bG4gIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIiA+JjIKKwkJCQk7OworCQkJKikKKwkJCQlldmFsX2dldHRleHRsbiAiQ2Fubm90IFwkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIiA+JjIKKwkJCQk7OworCQkJZXNhYworCQllbHNlCisJCSAgICBnZXR0ZXh0bG4gIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIgPiYyCisJCWZpCisJCWVycj0xCisJZmkKKworCWlmIHRlc3QgJGVyciA9IDEKKwl0aGVuCisJCXRlc3QgLW4gIiQyIiAmJiBlY2hvICIkMiIgPiYyCisJCWV4aXQgMQorCWZpCit9CisKKyMgR2VuZXJhdGUgYSBzZWQgc2NyaXB0IHRvIHBhcnNlIGlkZW50aXRpZXMgZnJvbSBhIGNvbW1pdC4KKyMKKyMgUmVhZHMgdGhlIGNvbW1pdCBmcm9tIHN0ZGluLCB3aGljaCBzaG91bGQgYmUgaW4gcmF3IGZvcm1hdCAoZS5nLiwgZnJvbQorIyBjYXQtZmlsZSBvciAiLS1wcmV0dHk9cmF3IikuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGlkZW50IGxpbmUgdG8gcGFyc2UgKGUuZy4sICJhdXRob3IiKSwgYW5kCisjIHRoZSBzZWNvbmQgc3BlY2lmaWVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwdXQgaXQgaW4gKGUuZy4sICJBVVRIT1IiCisjIGZvciAiR0lUX0FVVEhPUl8qIikuIE11bHRpcGxlIHBhaXJzIGNhbiBiZSBnaXZlbiB0byBwYXJzZSBhdXRob3IgYW5kCisjIGNvbW1pdHRlci4KK3BpY2tfaWRlbnRfc2NyaXB0ICgpIHsKKwl3aGlsZSB0ZXN0ICQjIC1ndCAwCisJZG8KKwkJbGlkPSQxOyBzaGlmdAorCQl1aWQ9JDE7IHNoaWZ0CisJCXByaW50ZiAnJXMnICIKKwkJL14kbGlkIC97CisJCQlzLycvJ1xcXFwnJy9nCisJCQloCisJCQlzL14kbGlkICInXChbXjxdKlwpIDxbXj5dKj4gLiokL1wxLyciCisJCQlzLy4qL0dJVF8ke3VpZH1fTkFNRT0nJicvcAorCisJCQlnCisJCQlzL14kbGlkICInW148XSogPFwoW14+XSpcKT4gLiokL1wxLyciCisJCQlzLy4qL0dJVF8ke3VpZH1fRU1BSUw9JyYnL3AKKworCQkJZworCQkJcy9eJGxpZCAiJ1tePF0qIDxbXj5dKj4gXCguKlwpJC9AXDEvJyIKKwkJCXMvLiovR0lUXyR7dWlkfV9EQVRFPScmJy9wCisJCX0KKwkJIgorCWRvbmUKKwllY2hvICcvXiQvcScKK30KKworIyBDcmVhdGUgYSBwaWNrLXNjcmlwdCBhcyBhYm92ZSBhbmQgZmVlZCBpdCB0byBzZWQuIFN0ZG91dCBpcyBzdWl0YWJsZSBmb3IKKyMgZmVlZGluZyB0byBldmFsLgorcGFyc2VfaWRlbnRfZnJvbV9jb21taXQgKCkgeworCUxBTkc9QyBMQ19BTEw9QyBzZWQgLW5lICIkKHBpY2tfaWRlbnRfc2NyaXB0ICIkQCIpIgorfQorCisjIFBhcnNlIHRoZSBhdXRob3IgZnJvbSBhIGNvbW1pdCBnaXZlbiBhcyBhbiBhcmd1bWVudC4gU3Rkb3V0IGlzIHN1aXRhYmxlIGZvcgorIyBmZWVkaW5nIHRvIGV2YWwgdG8gc2V0IHRoZSB1c3VhbCBHSVRfKiBpZGVudCB2YXJpYWJsZXMuCitnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0ICgpIHsKKwllbmNvZGluZz0kKGdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyB8fCBlY2hvIFVURi04KQorCWdpdCBzaG93IC1zIC0tcHJldHR5PXJhdyAtLWVuY29kaW5nPSIkZW5jb2RpbmciICIkMSIgLS0gfAorCXBhcnNlX2lkZW50X2Zyb21fY29tbWl0IGF1dGhvciBBVVRIT1IKK30KKworIyBDbGVhciByZXBvLWxvY2FsIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVXNlZnVsIHdoZW4gc3dpdGNoaW5nIHRvCisjIGFub3RoZXIgcmVwb3NpdG9yeSAoZS5nLiB3aGVuIGVudGVyaW5nIGEgc3VibW9kdWxlKS4gU2VlIGFsc28gdGhlIGVudgorIyBsaXN0IGluIGdpdF9jb25uZWN0KCkKK2NsZWFyX2xvY2FsX2dpdF9lbnYoKSB7CisJdW5zZXQgJChnaXQgcmV2LXBhcnNlIC0tbG9jYWwtZW52LXZhcnMpCit9CisKKyMgR2VuZXJhdGUgYSB2aXJ0dWFsIGJhc2UgZmlsZSBmb3IgYSB0d28tZmlsZSBtZXJnZS4gVXNlcyBnaXQgYXBwbHkgdG8KKyMgcmVtb3ZlIGxpbmVzIGZyb20gJDEgdGhhdCBhcmUgbm90IGluICQyLCBsZWF2aW5nIG9ubHkgY29tbW9uIGxpbmVzLgorY3JlYXRlX3ZpcnR1YWxfYmFzZSgpIHsKKwlzejA9JCh3YyAtYyA8IiQxIikKKwlAQERJRkZAQCAtdSAtTGEvIiQxIiAtTGIvIiQxIiAiJDEiICIkMiIgfCBnaXQgYXBwbHkgLS1uby1hZGQKKwlzejE9JCh3YyAtYyA8IiQxIikKKworCSMgSWYgd2UgZG8gbm90IGhhdmUgZW5vdWdoIGNvbW1vbiBtYXRlcmlhbCwgaXQgaXMgbm90CisJIyB3b3J0aCB0cnlpbmcgdHdvLWZpbGUgbWVyZ2UgdXNpbmcgY29tbW9uIHN1YnNlY3Rpb25zLgorCWV4cHIgJHN6MCBcPCAkc3oxIFwqIDIgPi9kZXYvbnVsbCB8fCA6ID4iJDEiCit9CisKKworIyBQbGF0Zm9ybSBzcGVjaWZpYyB0d2Vha3MgdG8gd29yayBhcm91bmQgc29tZSBjb21tYW5kcworY2FzZSAkKHVuYW1lIC1zKSBpbgorKk1JTkdXKikKKwkjIFdpbmRvd3MgaGFzIGl0cyBvd24gKGluY29tcGF0aWJsZSkgc29ydCBhbmQgZmluZAorCXNvcnQgKCkgeworCQkvdXNyL2Jpbi9zb3J0ICIkQCIKKwl9CisJZmluZCAoKSB7CisJCS91c3IvYmluL2ZpbmQgIiRAIgorCX0KKwkjIGdpdCBzZWVzIFdpbmRvd3Mtc3R5bGUgcHdkCisJcHdkICgpIHsKKwkJYnVpbHRpbiBwd2QgLVcKKwl9CisJaXNfYWJzb2x1dGVfcGF0aCAoKSB7CisJCWNhc2UgIiQxIiBpbgorCQlbL1xcXSogfCBbQS1aYS16XToqKQorCQkJcmV0dXJuIDAgOzsKKwkJZXNhYworCQlyZXR1cm4gMQorCX0KKwk7OworKikKKwlpc19hYnNvbHV0ZV9wYXRoICgpIHsKKwkJY2FzZSAiJDEiIGluCisJCS8qKQorCQkJcmV0dXJuIDAgOzsKKwkJZXNhYworCQlyZXR1cm4gMQorCX0KK2VzYWMKKworIyBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdmFsaWQgcmVwb3NpdG9yeSBvZiBhIHZpbnRhZ2Ugd2UgdW5kZXJzdGFuZCwKKyMgaWYgd2UgcmVxdWlyZSB0byBiZSBpbiBhIGdpdCByZXBvc2l0b3J5LgorZ2l0X2Rpcl9pbml0ICgpIHsKKwlHSVRfRElSPSQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpIHx8IGV4aXQKKwlpZiBbIC16ICIkU1VCRElSRUNUT1JZX09LIiBdCisJdGhlbgorCQl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXApIiB8fCB7CisJCQlleGl0PSQ/CisJCQlnZXR0ZXh0bG4gIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iID4mMgorCQkJZXhpdCAkZXhpdAorCQl9CisJZmkKKwl0ZXN0IC1uICIkR0lUX0RJUiIgJiYgR0lUX0RJUj0kKGNkICIkR0lUX0RJUiIgJiYgcHdkKSB8fCB7CisJCWdldHRleHRsbiAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiID4mMgorCQlleGl0IDEKKwl9CisJOiAiJHtHSVRfT0JKRUNUX0RJUkVDVE9SWT0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggb2JqZWN0cykifSIKK30KKworaWYgdGVzdCAteiAiJE5PTkdJVF9PSyIKK3RoZW4KKwlnaXRfZGlyX2luaXQKK2ZpCisKK3BlZWxfY29tbWl0dGlzaCAoKSB7CisJY2FzZSAiJDEiIGluCisJOi8qKQorCQlwZWVsdG1wPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiKSAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIke3BlZWx0bXB9XjAiCisJCTs7CisJKikKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHsxfV4wIgorCQk7OworCWVzYWMKK30KZGlmZiAtLWdpdCBhL2dpdC1zdWJtb2R1bGUuc2ggYi9naXQtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5ZjkxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMTE4MSBAQAorIyEvYmluL3NoCisjCisjIGdpdC1zdWJtb2R1bGUuc2g6IGFkZCwgaW5pdCwgdXBkYXRlIG9yIGxpc3QgZ2l0IHN1Ym1vZHVsZXMKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IExhcnMgSGplbWxpCisKK2Rhc2hsZXNzPSQoYmFzZW5hbWUgIiQwIiB8IHNlZCAtZSAncy8tLyAvJykKK1VTQUdFPSJbLS1xdWlldF0gWy0tY2FjaGVkXQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gYWRkIFstYiA8YnJhbmNoPl0gWy1mfC0tZm9yY2VdIFstLW5hbWUgPG5hbWU+XSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPHBhdGg+XQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3RhdHVzIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBpbml0IFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIGRlaW5pdCBbLWZ8LS1mb3JjZV0gKC0tYWxsfCBbLS1dIDxwYXRoPi4uLikKKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHVwZGF0ZSBbLS1pbml0XSBbLS1yZW1vdGVdIFstTnwtLW5vLWZldGNoXSBbLWZ8LS1mb3JjZV0gWy0tY2hlY2tvdXR8LS1tZXJnZXwtLXJlYmFzZV0gWy0tW25vLV1yZWNvbW1lbmQtc2hhbGxvd10gWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0gWy0tcmVjdXJzaXZlXSBbLS1bbm8tXXNpbmdsZS1icmFuY2hdIFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHNldC1icmFuY2ggKC0tZGVmYXVsdHwtLWJyYW5jaCA8YnJhbmNoPikgWy0tXSA8cGF0aD4KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHNldC11cmwgWy0tXSA8cGF0aD4gPG5ld3VybD4KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHN1bW1hcnkgWy0tY2FjaGVkfC0tZmlsZXNdIFstLXN1bW1hcnktbGltaXQgPG4+XSBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBmb3JlYWNoIFstLXJlY3Vyc2l2ZV0gPGNvbW1hbmQ+CisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzeW5jIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gYWJzb3JiZ2l0ZGlycyBbLS1dIFs8cGF0aD4uLi5dIgorT1BUSU9OU19TUEVDPQorU1VCRElSRUNUT1JZX09LPVllcworLiBnaXQtc2gtc2V0dXAKKy4gZ2l0LXBhcnNlLXJlbW90ZQorcmVxdWlyZV93b3JrX3RyZWUKK3d0X3ByZWZpeD0kKGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCkKK2NkX3RvX3RvcGxldmVsCisKKyMgVGVsbCB0aGUgcmVzdCBvZiBnaXQgdGhhdCBhbnkgVVJMcyB3ZSBnZXQgZG9uJ3QgY29tZQorIyBkaXJlY3RseSBmcm9tIHRoZSB1c2VyLCBzbyBpdCBjYW4gYXBwbHkgcG9saWN5IGFzIGFwcHJvcHJpYXRlLgorR0lUX1BST1RPQ09MX0ZST01fVVNFUj0wCitleHBvcnQgR0lUX1BST1RPQ09MX0ZST01fVVNFUgorCitjb21tYW5kPQorYnJhbmNoPQorZm9yY2U9CityZWZlcmVuY2U9CitjYWNoZWQ9CityZWN1cnNpdmU9Citpbml0PQorcmVxdWlyZV9pbml0PQorZmlsZXM9CityZW1vdGU9Citub2ZldGNoPQordXBkYXRlPQorcHJlZml4PQorY3VzdG9tX25hbWU9CitkZXB0aD0KK3Byb2dyZXNzPQorZGlzc29jaWF0ZT0KK3NpbmdsZV9icmFuY2g9CisKK2RpZV9pZl91bm1hdGNoZWQgKCkKK3sKKwlpZiB0ZXN0ICIkMSIgPSAiI3VubWF0Y2hlZCIKKwl0aGVuCisJCWV4aXQgJHsyOi0xfQorCWZpCit9CisKKyMKKyMgUHJpbnQgYSBzdWJtb2R1bGUgY29uZmlndXJhdGlvbiBzZXR0aW5nCisjCisjICQxID0gc3VibW9kdWxlIG5hbWUKKyMgJDIgPSBvcHRpb24gbmFtZQorIyAkMyA9IGRlZmF1bHQgdmFsdWUKKyMKKyMgQ2hlY2tzIGluIHRoZSB1c3VhbCBnaXQtY29uZmlnIHBsYWNlcyBmaXJzdCAoZm9yIG92ZXJyaWRlcyksCisjIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIG9uIC5naXRtb2R1bGVzLiAgVGhpcyBhbGxvd3MgeW91IHRvCisjIGRpc3RyaWJ1dGUgcHJvamVjdC13aWRlIGRlZmF1bHRzIGluIC5naXRtb2R1bGVzLCB3aGlsZSBzdGlsbAorIyBjdXN0b21pemluZyBpbmRpdmlkdWFsIHJlcG9zaXRvcmllcyBpZiBuZWNlc3NhcnkuICBJZiB0aGUgb3B0aW9uIGlzCisjIG5vdCBpbiAuZ2l0bW9kdWxlcyBlaXRoZXIsIHByaW50IGEgZGVmYXVsdCB2YWx1ZS4KKyMKK2dldF9zdWJtb2R1bGVfY29uZmlnICgpIHsKKwluYW1lPSIkMSIKKwlvcHRpb249IiQyIgorCWRlZmF1bHQ9IiQzIgorCXZhbHVlPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi4iJG9wdGlvbiIpCisJaWYgdGVzdCAteiAiJHZhbHVlIgorCXRoZW4KKwkJdmFsdWU9JChnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLiIkb3B0aW9uIikKKwlmaQorCXByaW50ZiAnJXMnICIke3ZhbHVlOi0kZGVmYXVsdH0iCit9CisKK2lzbnVtYmVyKCkKK3sKKwluPSQoKCQxICsgMCkpIDI+L2Rldi9udWxsICYmIHRlc3QgIiRuIiA9ICIkMSIKK30KKworIyBHaXZlbiBhIGZ1bGwgaGV4IG9iamVjdCBJRCwgaXMgdGhpcyB0aGUgemVybyBPSUQ/Citpc196ZXJvX29pZCAoKSB7CisJZWNobyAiJDEiIHwgc2FuZV9lZ3JlcCAnXjArJCcgPi9kZXYvbnVsbCAyPiYxCit9CisKKyMgU2FuaXRpemUgdGhlIGxvY2FsIGdpdCBlbnZpcm9ubWVudCBmb3IgdXNlIHdpdGhpbiBhIHN1Ym1vZHVsZS4gV2UKKyMgY2FuJ3Qgc2ltcGx5IHVzZSBjbGVhcl9sb2NhbF9naXRfZW52IHNpbmNlIHdlIHdhbnQgdG8gcHJlc2VydmUgc29tZQorIyBvZiB0aGUgc2V0dGluZ3MgZnJvbSBHSVRfQ09ORklHX1BBUkFNRVRFUlMuCitzYW5pdGl6ZV9zdWJtb2R1bGVfZW52KCkKK3sKKwlzYXZlX2NvbmZpZz0kR0lUX0NPTkZJR19QQVJBTUVURVJTCisJY2xlYXJfbG9jYWxfZ2l0X2VudgorCUdJVF9DT05GSUdfUEFSQU1FVEVSUz0kc2F2ZV9jb25maWcKKwlleHBvcnQgR0lUX0NPTkZJR19QQVJBTUVURVJTCit9CisKKyMKKyMgQWRkIGEgbmV3IHN1Ym1vZHVsZSB0byB0aGUgd29ya2luZyB0cmVlLCAuZ2l0bW9kdWxlcyBhbmQgdGhlIGluZGV4CisjCisjICRAID0gcmVwbyBwYXRoCisjCisjIG9wdGlvbmFsIGJyYW5jaCBpcyBzdG9yZWQgaW4gZ2xvYmFsIGJyYW5jaCB2YXJpYWJsZQorIworY21kX2FkZCgpCit7CisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBhZGQiLgorCXJlZmVyZW5jZV9wYXRoPQorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLWIgfCAtLWJyYW5jaCkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJYnJhbmNoPSQyCisJCQlzaGlmdAorCQkJOzsKKwkJLWYgfCAtLWZvcmNlKQorCQkJZm9yY2U9JDEKKwkJCTs7CisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS1wcm9ncmVzcykKKwkJCXByb2dyZXNzPTEKKwkJCTs7CisJCS0tcmVmZXJlbmNlKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlyZWZlcmVuY2VfcGF0aD0kMgorCQkJc2hpZnQKKwkJCTs7CisJCS0tcmVmZXJlbmNlPSopCisJCQlyZWZlcmVuY2VfcGF0aD0iJHsxIy0tcmVmZXJlbmNlPX0iCisJCQk7OworCQktLWRpc3NvY2lhdGUpCisJCQlkaXNzb2NpYXRlPTEKKwkJCTs7CisJCS0tbmFtZSkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJY3VzdG9tX25hbWU9JDIKKwkJCXNoaWZ0CisJCQk7OworCQktLWRlcHRoKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlkZXB0aD0iLS1kZXB0aD0kMiIKKwkJCXNoaWZ0CisJCQk7OworCQktLWRlcHRoPSopCisJCQlkZXB0aD0kMQorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmICEgZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCSBkaWUgIiQoZXZhbF9nZXR0ZXh0ICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIpIgorCWZpCisKKwlpZiB0ZXN0IC1uICIkcmVmZXJlbmNlX3BhdGgiCisJdGhlbgorCQlpc19hYnNvbHV0ZV9wYXRoICIkcmVmZXJlbmNlX3BhdGgiIHx8CisJCXJlZmVyZW5jZV9wYXRoPSIkd3RfcHJlZml4JHJlZmVyZW5jZV9wYXRoIgorCisJCXJlZmVyZW5jZT0iLS1yZWZlcmVuY2U9JHJlZmVyZW5jZV9wYXRoIgorCWZpCisKKwlyZXBvPSQxCisJc21fcGF0aD0kMgorCisJaWYgdGVzdCAteiAiJHNtX3BhdGgiOyB0aGVuCisJCXNtX3BhdGg9JChwcmludGYgJyVzXG4nICIkcmVwbyIgfAorCQkJc2VkIC1lICdzfC8kfHwnIC1lICdzfDoqLypcLmdpdCR8fCcgLWUgJ3N8LipbLzpdfHxnJykKKwlmaQorCisJaWYgdGVzdCAteiAiJHJlcG8iIHx8IHRlc3QgLXogIiRzbV9wYXRoIjsgdGhlbgorCQl1c2FnZQorCWZpCisKKwlpc19hYnNvbHV0ZV9wYXRoICIkc21fcGF0aCIgfHwgc21fcGF0aD0iJHd0X3ByZWZpeCRzbV9wYXRoIgorCisJIyBhc3N1cmUgcmVwbyBpcyBhYnNvbHV0ZSBvciByZWxhdGl2ZSB0byBwYXJlbnQKKwljYXNlICIkcmVwbyIgaW4KKwkuLyp8Li4vKikKKwkJdGVzdCAteiAiJHd0X3ByZWZpeCIgfHwKKwkJZGllICIkKGdldHRleHQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIikiCisKKwkJIyBkZXJlZmVyZW5jZSBzb3VyY2UgdXJsIHJlbGF0aXZlIHRvIHBhcmVudCdzIHVybAorCQlyZWFscmVwbz0kKGdpdCBzdWJtb2R1bGUtLWhlbHBlciByZXNvbHZlLXJlbGF0aXZlLXVybCAiJHJlcG8iKSB8fCBleGl0CisJCTs7CisJKjoqfC8qKQorCQkjIGFic29sdXRlIHVybAorCQlyZWFscmVwbz0kcmVwbworCQk7OworCSopCisJCWRpZSAiJChldmFsX2dldHRleHQgInJlcG8gVVJMOiAnXCRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIikiCisJOzsKKwllc2FjCisKKwkjIG5vcm1hbGl6ZSBwYXRoOgorCSMgbXVsdGlwbGUgLy87IGxlYWRpbmcgLi87IC8uLzsgLy4uLzsgdHJhaWxpbmcgLworCXNtX3BhdGg9JChwcmludGYgJyVzL1xuJyAiJHNtX3BhdGgiIHwKKwkJc2VkIC1lICcKKwkJCXN8Ly8qfC98ZworCQkJc3xeXChcLi9cKSp8fAorCQkJc3wvXChcLi9cKSp8L3xnCisJCQk6c3RhcnQKKwkJCXN8XChbXi9dKlwpL1wuXC4vfHwKKwkJCXRzdGFydAorCQkJc3wvKiR8fAorCQknKQorCWlmIHRlc3QgLXogIiRmb3JjZSIKKwl0aGVuCisJCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggIiRzbV9wYXRoIiA+IC9kZXYvbnVsbCAyPiYxICYmCisJCWRpZSAiJChldmFsX2dldHRleHQgIidcJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIpIgorCWVsc2UKKwkJZ2l0IGxzLWZpbGVzIC1zICIkc21fcGF0aCIgfCBzYW5lX2dyZXAgLXYgIl4xNjAwMDAiID4gL2Rldi9udWxsIDI+JjEgJiYKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiKSIKKwlmaQorCisJaWYgdGVzdCAtZCAiJHNtX3BhdGgiICYmCisJCXRlc3QgLXogJChnaXQgLUMgIiRzbV9wYXRoIiByZXYtcGFyc2UgLS1zaG93LWNkdXAgMj4vZGV2L251bGwpCisJdGhlbgorCSAgICBnaXQgLUMgIiRzbV9wYXRoIiByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCA+L2Rldi9udWxsIHx8CisJICAgIGRpZSAiJChldmFsX2dldHRleHQgIidcJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiKSIKKwlmaQorCisJaWYgdGVzdCAteiAiJGZvcmNlIgorCXRoZW4KKwkgICAgZHJ5ZXJyPSQoZ2l0IGFkZCAtLWRyeS1ydW4gLS1pZ25vcmUtbWlzc2luZyAtLW5vLXdhcm4tZW1iZWRkZWQtcmVwbyAiJHNtX3BhdGgiIDI+JjEgPi9kZXYvbnVsbCkKKwkgICAgcmVzPSQ/CisJICAgIGlmIHRlc3QgJHJlcyAtbmUgMAorCSAgICB0aGVuCisJCSBlY2hvID4mMiAiJGRyeWVyciIKKwkJIGV4aXQgJHJlcworCSAgICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkY3VzdG9tX25hbWUiCisJdGhlbgorCQlzbV9uYW1lPSIkY3VzdG9tX25hbWUiCisJZWxzZQorCQlzbV9uYW1lPSIkc21fcGF0aCIKKwlmaQorCisJaWYgISBnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2hlY2stbmFtZSAiJHNtX25hbWUiCisJdGhlbgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICInJHNtX25hbWUnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZSBuYW1lIikiCisJZmkKKworCSMgcGVyaGFwcyB0aGUgcGF0aCBleGlzdHMgYW5kIGlzIGFscmVhZHkgYSBnaXQgcmVwbywgZWxzZSBjbG9uZSBpdAorCWlmIHRlc3QgLWUgIiRzbV9wYXRoIgorCXRoZW4KKwkJaWYgdGVzdCAtZCAiJHNtX3BhdGgiLy5naXQgfHwgdGVzdCAtZiAiJHNtX3BhdGgiLy5naXQKKwkJdGhlbgorCQkJZXZhbF9nZXR0ZXh0bG4gIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICdcJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKKwkJZWxzZQorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIikiCisJCWZpCisKKwllbHNlCisJCWlmIHRlc3QgLWQgIi5naXQvbW9kdWxlcy8kc21fbmFtZSIKKwkJdGhlbgorCQkJaWYgdGVzdCAteiAiJGZvcmNlIgorCQkJdGhlbgorCQkJCWV2YWxfZ2V0dGV4dGxuID4mMiAiQSBnaXQgZGlyZWN0b3J5IGZvciAnXCRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKKwkJCQlHSVRfRElSPSIuZ2l0L21vZHVsZXMvJHNtX25hbWUiIEdJVF9XT1JLX1RSRUU9LiBnaXQgcmVtb3RlIC12IHwgZ3JlcCAnKGZldGNoKScgfCBzZWQgLWUgcyxeLCIgICIsIC1lIHMsJyAoZmV0Y2gpJywsID4mMgorCQkJCWRpZSAiJChldmFsX2dldHRleHRsbiAiXAorSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tCisgIFwkcmVhbHJlcG8KK3VzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0IHJlcG8KK29yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnIG9wdGlvbi4iKSIKKwkJCWVsc2UKKwkJCQlldmFsX2dldHRleHRsbiAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnXCRzbV9uYW1lJy4iCisJCQlmaQorCQlmaQorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgJHtHSVRfUVVJRVQ6Ky0tcXVpZXR9ICR7cHJvZ3Jlc3M6KyItLXByb2dyZXNzIn0gLS1wcmVmaXggIiR3dF9wcmVmaXgiIC0tcGF0aCAiJHNtX3BhdGgiIC0tbmFtZSAiJHNtX25hbWUiIC0tdXJsICIkcmVhbHJlcG8iICR7cmVmZXJlbmNlOisiJHJlZmVyZW5jZSJ9ICR7ZGlzc29jaWF0ZTorIi0tZGlzc29jaWF0ZSJ9ICR7ZGVwdGg6KyIkZGVwdGgifSB8fCBleGl0CisJCSgKKwkJCXNhbml0aXplX3N1Ym1vZHVsZV9lbnYKKwkJCWNkICIkc21fcGF0aCIgJiYKKwkJCSMgYXNoIGZhaWxzIHRvIHdvcmRzcGxpdCAke2JyYW5jaDorLWIgIiRicmFuY2giLi4ufQorCQkJY2FzZSAiJGJyYW5jaCIgaW4KKwkJCScnKSBnaXQgY2hlY2tvdXQgLWYgLXEgOzsKKwkJCT8qKSBnaXQgY2hlY2tvdXQgLWYgLXEgLUIgIiRicmFuY2giICJvcmlnaW4vJGJyYW5jaCIgOzsKKwkJCWVzYWMKKwkJKSB8fCBkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICdcJHNtX3BhdGgnIikiCisJZmkKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJHNtX25hbWUiLnVybCAiJHJlYWxyZXBvIgorCisJZ2l0IGFkZCAtLW5vLXdhcm4tZW1iZWRkZWQtcmVwbyAkZm9yY2UgIiRzbV9wYXRoIiB8fAorCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICdcJHNtX3BhdGgnIikiCisKKwlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS4iJHNtX25hbWUiLnBhdGggIiRzbV9wYXRoIiAmJgorCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLiIkc21fbmFtZSIudXJsICIkcmVwbyIgJiYKKwlpZiB0ZXN0IC1uICIkYnJhbmNoIgorCXRoZW4KKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuIiRzbV9uYW1lIi5icmFuY2ggIiRicmFuY2giCisJZmkgJiYKKwlnaXQgYWRkIC0tZm9yY2UgLmdpdG1vZHVsZXMgfHwKKwlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICdcJHNtX3BhdGgnIikiCisKKwkjIE5FRURTV09SSzogSW4gYSBtdWx0aS13b3JraW5nLXRyZWUgd29ybGQsIHRoaXMgbmVlZHMgdG8gYmUKKwkjIHNldCBpbiB0aGUgcGVyLXdvcmt0cmVlIGNvbmZpZy4KKwlpZiBnaXQgY29uZmlnIC0tZ2V0IHN1Ym1vZHVsZS5hY3RpdmUgPi9kZXYvbnVsbAorCXRoZW4KKwkJIyBJZiB0aGUgc3VibW9kdWxlIGJlaW5nIGFkZGluZyBpc24ndCBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlCisJCSMgY3VycmVudCBjb25maWd1cmVkIHBhdGhzcGVjLCBzZXQgdGhlIHN1Ym1vZHVsZSdzIGFjdGl2ZSBmbGFnCisJCWlmICEgZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSAiJHNtX3BhdGgiCisJCXRoZW4KKwkJCWdpdCBjb25maWcgc3VibW9kdWxlLiIkc21fbmFtZSIuYWN0aXZlICJ0cnVlIgorCQlmaQorCWVsc2UKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRzbV9uYW1lIi5hY3RpdmUgInRydWUiCisJZmkKK30KKworIworIyBFeGVjdXRlIGFuIGFyYml0cmFyeSBjb21tYW5kIHNlcXVlbmNlIGluIGVhY2ggY2hlY2tlZCBvdXQKKyMgc3VibW9kdWxlCisjCisjICRAID0gY29tbWFuZCB0byBleGVjdXRlCisjCitjbWRfZm9yZWFjaCgpCit7CisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBmb3JlYWNoIi4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlyZWN1cnNpdmU9MQorCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJZ2l0ICR7d3RfcHJlZml4OistQyAiJHd0X3ByZWZpeCJ9ICR7cHJlZml4OistLXN1cGVyLXByZWZpeCAiJHByZWZpeCJ9IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggJHtHSVRfUVVJRVQ6Ky0tcXVpZXR9ICR7cmVjdXJzaXZlOistLXJlY3Vyc2l2ZX0gLS0gIiRAIgorfQorCisjCisjIFJlZ2lzdGVyIHN1Ym1vZHVsZXMgaW4gLmdpdC9jb25maWcKKyMKKyMgJEAgPSByZXF1ZXN0ZWQgcGF0aHMgKGRlZmF1bHQgdG8gYWxsKQorIworY21kX2luaXQoKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gaW5pdCIuCisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlnaXQgJHt3dF9wcmVmaXg6Ky1DICIkd3RfcHJlZml4In0gJHtwcmVmaXg6Ky0tc3VwZXItcHJlZml4ICIkcHJlZml4In0gc3VibW9kdWxlLS1oZWxwZXIgaW5pdCAke0dJVF9RVUlFVDorLS1xdWlldH0gLS0gIiRAIgorfQorCisjCisjIFVucmVnaXN0ZXIgc3VibW9kdWxlcyBmcm9tIC5naXQvY29uZmlnIGFuZCByZW1vdmUgdGhlaXIgd29yayB0cmVlCisjCitjbWRfZGVpbml0KCkKK3sKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIGRlaW5pdCIuCisJZGVpbml0X2FsbD0KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1mfC0tZm9yY2UpCisJCQlmb3JjZT0kMQorCQkJOzsKKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktLWFsbCkKKwkJCWRlaW5pdF9hbGw9dAorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWdpdCAke3d0X3ByZWZpeDorLUMgIiR3dF9wcmVmaXgifSBzdWJtb2R1bGUtLWhlbHBlciBkZWluaXQgJHtHSVRfUVVJRVQ6Ky0tcXVpZXR9ICR7cHJlZml4OistLXByZWZpeCAiJHByZWZpeCJ9ICR7Zm9yY2U6Ky0tZm9yY2V9ICR7ZGVpbml0X2FsbDorLS1hbGx9IC0tICIkQCIKK30KKworaXNfdGlwX3JlYWNoYWJsZSAoKSAoCisJc2FuaXRpemVfc3VibW9kdWxlX2VudiAmJgorCWNkICIkMSIgJiYKKwlyZXY9JChnaXQgcmV2LWxpc3QgLW4gMSAiJDIiIC0tbm90IC0tYWxsIDI+L2Rldi9udWxsKSAmJgorCXRlc3QgLXogIiRyZXYiCispCisKK2ZldGNoX2luX3N1Ym1vZHVsZSAoKSAoCisJc2FuaXRpemVfc3VibW9kdWxlX2VudiAmJgorCWNkICIkMSIgJiYKKwljYXNlICIkMiIgaW4KKwknJykKKwkJZ2l0IGZldGNoIDs7CisJKikKKwkJc2hpZnQKKwkJZ2l0IGZldGNoICQoZ2V0X2RlZmF1bHRfcmVtb3RlKSAiJEAiIDs7CisJZXNhYworKQorCisjCisjIFVwZGF0ZSBlYWNoIHN1Ym1vZHVsZSBwYXRoIHRvIGNvcnJlY3QgcmV2aXNpb24sIHVzaW5nIGNsb25lIGFuZCBjaGVja291dCBhcyBuZWVkZWQKKyMKKyMgJEAgPSByZXF1ZXN0ZWQgcGF0aHMgKGRlZmF1bHQgdG8gYWxsKQorIworY21kX3VwZGF0ZSgpCit7CisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiB1cGRhdGUiLgorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktdikKKwkJCUdJVF9RVUlFVD0wCisJCQk7OworCQktLXByb2dyZXNzKQorCQkJcHJvZ3Jlc3M9MQorCQkJOzsKKwkJLWl8LS1pbml0KQorCQkJaW5pdD0xCisJCQk7OworCQktLXJlcXVpcmUtaW5pdCkKKwkJCWluaXQ9MQorCQkJcmVxdWlyZV9pbml0PTEKKwkJCTs7CisJCS0tcmVtb3RlKQorCQkJcmVtb3RlPTEKKwkJCTs7CisJCS1OfC0tbm8tZmV0Y2gpCisJCQlub2ZldGNoPTEKKwkJCTs7CisJCS1mfC0tZm9yY2UpCisJCQlmb3JjZT0kMQorCQkJOzsKKwkJLXJ8LS1yZWJhc2UpCisJCQl1cGRhdGU9InJlYmFzZSIKKwkJCTs7CisJCS0tcmVmZXJlbmNlKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlyZWZlcmVuY2U9Ii0tcmVmZXJlbmNlPSQyIgorCQkJc2hpZnQKKwkJCTs7CisJCS0tcmVmZXJlbmNlPSopCisJCQlyZWZlcmVuY2U9IiQxIgorCQkJOzsKKwkJLS1kaXNzb2NpYXRlKQorCQkJZGlzc29jaWF0ZT0xCisJCQk7OworCQktbXwtLW1lcmdlKQorCQkJdXBkYXRlPSJtZXJnZSIKKwkJCTs7CisJCS0tcmVjdXJzaXZlKQorCQkJcmVjdXJzaXZlPTEKKwkJCTs7CisJCS0tY2hlY2tvdXQpCisJCQl1cGRhdGU9ImNoZWNrb3V0IgorCQkJOzsKKwkJLS1yZWNvbW1lbmQtc2hhbGxvdykKKwkJCXJlY29tbWVuZF9zaGFsbG93PSItLXJlY29tbWVuZC1zaGFsbG93IgorCQkJOzsKKwkJLS1uby1yZWNvbW1lbmQtc2hhbGxvdykKKwkJCXJlY29tbWVuZF9zaGFsbG93PSItLW5vLXJlY29tbWVuZC1zaGFsbG93IgorCQkJOzsKKwkJLS1kZXB0aCkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJZGVwdGg9Ii0tZGVwdGg9JDIiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1kZXB0aD0qKQorCQkJZGVwdGg9JDEKKwkJCTs7CisJCS1qfC0tam9icykKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJam9icz0iLS1qb2JzPSQyIgorCQkJc2hpZnQKKwkJCTs7CisJCS0tam9icz0qKQorCQkJam9icz0kMQorCQkJOzsKKwkJLS1zaW5nbGUtYnJhbmNoKQorCQkJc2luZ2xlX2JyYW5jaD0iLS1zaW5nbGUtYnJhbmNoIgorCQkJOzsKKwkJLS1uby1zaW5nbGUtYnJhbmNoKQorCQkJc2luZ2xlX2JyYW5jaD0iLS1uby1zaW5nbGUtYnJhbmNoIgorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmIHRlc3QgLW4gIiRpbml0IgorCXRoZW4KKwkJY21kX2luaXQgIi0tIiAiJEAiIHx8IHJldHVybgorCWZpCisKKwl7CisJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSAke0dJVF9RVUlFVDorLS1xdWlldH0gXAorCQkke3Byb2dyZXNzOisiLS1wcm9ncmVzcyJ9IFwKKwkJJHt3dF9wcmVmaXg6Ky0tcHJlZml4ICIkd3RfcHJlZml4In0gXAorCQkke3ByZWZpeDorLS1yZWN1cnNpdmUtcHJlZml4ICIkcHJlZml4In0gXAorCQkke3VwZGF0ZTorLS11cGRhdGUgIiR1cGRhdGUifSBcCisJCSR7cmVmZXJlbmNlOisiJHJlZmVyZW5jZSJ9IFwKKwkJJHtkaXNzb2NpYXRlOisiLS1kaXNzb2NpYXRlIn0gXAorCQkke2RlcHRoOistLWRlcHRoICIkZGVwdGgifSBcCisJCSR7cmVxdWlyZV9pbml0OistLXJlcXVpcmUtaW5pdH0gXAorCQkkc2luZ2xlX2JyYW5jaCBcCisJCSRyZWNvbW1lbmRfc2hhbGxvdyBcCisJCSRqb2JzIFwKKwkJLS0gXAorCQkiJEAiIHx8IGVjaG8gIiN1bm1hdGNoZWQiICQ/CisJfSB8IHsKKwllcnI9CisJd2hpbGUgcmVhZCAtciBxdWlja2Fib3J0IHNoYTEganVzdF9jbG9uZWQgc21fcGF0aAorCWRvCisJCWRpZV9pZl91bm1hdGNoZWQgIiRxdWlja2Fib3J0IiAiJHNoYTEiCisKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGVuc3VyZS1jb3JlLXdvcmt0cmVlICIkc21fcGF0aCIgfHwgZXhpdCAxCisKKwkJdXBkYXRlX21vZHVsZT0kKGdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtbW9kdWxlLW1vZGUgJGp1c3RfY2xvbmVkICIkc21fcGF0aCIgJHVwZGF0ZSkKKworCQlkaXNwbGF5cGF0aD0kKGdpdCBzdWJtb2R1bGUtLWhlbHBlciByZWxhdGl2ZS1wYXRoICIkcHJlZml4JHNtX3BhdGgiICIkd3RfcHJlZml4IikKKworCQlpZiB0ZXN0ICRqdXN0X2Nsb25lZCAtZXEgMQorCQl0aGVuCisJCQlzdWJzaGExPQorCQllbHNlCisJCQlzdWJzaGExPSQoc2FuaXRpemVfc3VibW9kdWxlX2VudjsgY2QgIiRzbV9wYXRoIiAmJgorCQkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJHJlbW90ZSIKKwkJdGhlbgorCQkJYnJhbmNoPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHJlbW90ZS1icmFuY2ggIiRzbV9wYXRoIikKKwkJCWlmIHRlc3QgLXogIiRub2ZldGNoIgorCQkJdGhlbgorCQkJCSMgRmV0Y2ggcmVtb3RlIGJlZm9yZSBkZXRlcm1pbmluZyB0cmFja2luZyAkc2hhMQorCQkJCWZldGNoX2luX3N1Ym1vZHVsZSAiJHNtX3BhdGgiICRkZXB0aCB8fAorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyIpIgorCQkJZmkKKwkJCXJlbW90ZV9uYW1lPSQoc2FuaXRpemVfc3VibW9kdWxlX2VudjsgY2QgIiRzbV9wYXRoIiAmJiBnZXRfZGVmYXVsdF9yZW1vdGUpCisJCQlzaGExPSQoc2FuaXRpemVfc3VibW9kdWxlX2VudjsgY2QgIiRzbV9wYXRoIiAmJgorCQkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSIpIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gZmluZCBjdXJyZW50IFwke3JlbW90ZV9uYW1lfS9cJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICdcJHNtX3BhdGgnIikiCisJCWZpCisKKwkJaWYgdGVzdCAiJHN1YnNoYTEiICE9ICIkc2hhMSIgfHwgdGVzdCAtbiAiJGZvcmNlIgorCQl0aGVuCisJCQlzdWJmb3JjZT0kZm9yY2UKKwkJCSMgSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgLWYgZmxhZyBhbmQgdGhlIHN1Ym1vZHVsZSBoYXMgbmV2ZXIgYmVlbiBjaGVja2VkIG91dAorCQkJaWYgdGVzdCAteiAiJHN1YnNoYTEiICYmIHRlc3QgLXogIiRmb3JjZSIKKwkJCXRoZW4KKwkJCQlzdWJmb3JjZT0iLWYiCisJCQlmaQorCisJCQlpZiB0ZXN0IC16ICIkbm9mZXRjaCIKKwkJCXRoZW4KKwkJCQkjIFJ1biBmZXRjaCBvbmx5IGlmICRzaGExIGlzbid0IHByZXNlbnQgb3IgaXQKKwkJCQkjIGlzIG5vdCByZWFjaGFibGUgZnJvbSBhIHJlZi4KKwkJCQlpc190aXBfcmVhY2hhYmxlICIkc21fcGF0aCIgIiRzaGExIiB8fAorCQkJCWZldGNoX2luX3N1Ym1vZHVsZSAiJHNtX3BhdGgiICRkZXB0aCB8fAorCQkJCXNheSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCc7IHRyeWluZyB0byBkaXJlY3RseSBmZXRjaCBcJHNoYTE6IikiCisKKwkJCQkjIE5vdyB3ZSB0cmllZCB0aGUgdXN1YWwgZmV0Y2gsIGJ1dCAkc2hhMSBtYXkKKwkJCQkjIG5vdCBiZSByZWFjaGFibGUgZnJvbSBhbnkgb2YgdGhlIHJlZnMKKwkJCQlpc190aXBfcmVhY2hhYmxlICIkc21fcGF0aCIgIiRzaGExIiB8fAorCQkJCWZldGNoX2luX3N1Ym1vZHVsZSAiJHNtX3BhdGgiICRkZXB0aCAiJHNoYTEiIHx8CisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gXCRzaGExLiBEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIpIgorCQkJZmkKKworCQkJbXVzdF9kaWVfb25fZmFpbHVyZT0KKwkJCWNhc2UgIiR1cGRhdGVfbW9kdWxlIiBpbgorCQkJY2hlY2tvdXQpCisJCQkJY29tbWFuZD0iZ2l0IGNoZWNrb3V0ICRzdWJmb3JjZSAtcSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGNoZWNrb3V0ICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICdcJHNoYTEnIikiCisJCQkJOzsKKwkJCXJlYmFzZSkKKwkJCQljb21tYW5kPSJnaXQgcmViYXNlIgorCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gcmViYXNlICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnXCRzaGExJyIpIgorCQkJCW11c3RfZGllX29uX2ZhaWx1cmU9eWVzCisJCQkJOzsKKwkJCW1lcmdlKQorCQkJCWNvbW1hbmQ9ImdpdCBtZXJnZSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIG1lcmdlICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnXCRzaGExJyIpIgorCQkJCW11c3RfZGllX29uX2ZhaWx1cmU9eWVzCisJCQkJOzsKKwkJCSEqKQorCQkJCWNvbW1hbmQ9IiR7dXBkYXRlX21vZHVsZSMhfSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiRXhlY3V0aW9uIG9mICdcJGNvbW1hbmQgXCRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCQkJc2F5X21zZz0iJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJzogJ1wkY29tbWFuZCBcJHNoYTEnIikiCisJCQkJbXVzdF9kaWVfb25fZmFpbHVyZT15ZXMKKwkJCQk7OworCQkJKikKKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJJbnZhbGlkIHVwZGF0ZSBtb2RlICckdXBkYXRlX21vZHVsZScgZm9yIHN1Ym1vZHVsZSBwYXRoICckcGF0aCciKSIKKwkJCWVzYWMKKworCQkJaWYgKHNhbml0aXplX3N1Ym1vZHVsZV9lbnY7IGNkICIkc21fcGF0aCIgJiYgJGNvbW1hbmQgIiRzaGExIikKKwkJCXRoZW4KKwkJCQlzYXkgIiRzYXlfbXNnIgorCQkJZWxpZiB0ZXN0IC1uICIkbXVzdF9kaWVfb25fZmFpbHVyZSIKKwkJCXRoZW4KKwkJCQlkaWVfd2l0aF9zdGF0dXMgMiAiJGRpZV9tc2ciCisJCQllbHNlCisJCQkJZXJyPSIke2Vycn07JGRpZV9tc2ciCisJCQkJY29udGludWUKKwkJCWZpCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJHJlY3Vyc2l2ZSIKKwkJdGhlbgorCQkJKAorCQkJCXByZWZpeD0kKGdpdCBzdWJtb2R1bGUtLWhlbHBlciByZWxhdGl2ZS1wYXRoICIkcHJlZml4JHNtX3BhdGgvIiAiJHd0X3ByZWZpeCIpCisJCQkJd3RfcHJlZml4PQorCQkJCXNhbml0aXplX3N1Ym1vZHVsZV9lbnYKKwkJCQljZCAiJHNtX3BhdGgiICYmCisJCQkJZXZhbCBjbWRfdXBkYXRlCisJCQkpCisJCQlyZXM9JD8KKwkJCWlmIHRlc3QgJHJlcyAtZ3QgMAorCQkJdGhlbgorCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgorCQkJCWlmIHRlc3QgJHJlcyAtbmUgMgorCQkJCXRoZW4KKwkJCQkJZXJyPSIke2Vycn07JGRpZV9tc2ciCisJCQkJCWNvbnRpbnVlCisJCQkJZWxzZQorCQkJCQlkaWVfd2l0aF9zdGF0dXMgJHJlcyAiJGRpZV9tc2ciCisJCQkJZmkKKwkJCWZpCisJCWZpCisJZG9uZQorCisJaWYgdGVzdCAtbiAiJGVyciIKKwl0aGVuCisJCU9JRlM9JElGUworCQlJRlM9JzsnCisJCWZvciBlIGluICRlcnIKKwkJZG8KKwkJCWlmIHRlc3QgLW4gIiRlIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkZSIKKwkJCWZpCisJCWRvbmUKKwkJSUZTPSRPSUZTCisJCWV4aXQgMQorCWZpCisJfQorfQorCisjCisjIENvbmZpZ3VyZXMgYSBzdWJtb2R1bGUncyBkZWZhdWx0IGJyYW5jaAorIworIyAkQCA9IHJlcXVlc3RlZCBwYXRoCisjCitjbWRfc2V0X2JyYW5jaCgpIHsKKwl1bnNldF9icmFuY2g9ZmFsc2UKKwlicmFuY2g9CisKKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQkjIHdlIGRvbid0IGRvIGFueXRoaW5nIHdpdGggdGhpcyBidXQgd2UgbmVlZCB0byBhY2NlcHQgaXQKKwkJCTs7CisJCS1kfC0tZGVmYXVsdCkKKwkJCXVuc2V0X2JyYW5jaD10cnVlCisJCQk7OworCQktYnwtLWJyYW5jaCkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJYnJhbmNoPSQyCisJCQlzaGlmdAorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmIHRlc3QgJCMgLW5lIDEKKwl0aGVuCisJCXVzYWdlCisJZmkKKworCSMgd2UgY2FuJ3QgdXNlIGBnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZWAgaGVyZSBiZWNhdXNlIGludGVybmFsbHksIGl0CisJIyBoYXNoZXMgdGhlIHBhdGggc28gYSB0cmFpbGluZyBzbGFzaCBjb3VsZCBsZWFkIHRvIGFuIHVuaW50ZW50aW9uYWwgbm8gbWF0Y2gKKwluYW1lPSIkKGdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0ICIkMSIgfCBjdXQgLWYyKSIKKwlpZiB0ZXN0IC16ICIkbmFtZSIKKwl0aGVuCisJCWV4aXQgMQorCWZpCisKKwl0ZXN0IC1uICIkYnJhbmNoIjsgaGFzX2JyYW5jaD0kPworCXRlc3QgIiR1bnNldF9icmFuY2giID0gdHJ1ZTsgaGFzX3Vuc2V0X2JyYW5jaD0kPworCisJaWYgdGVzdCAkKCghJGhhc19icmFuY2ggIT0gISRoYXNfdW5zZXRfYnJhbmNoKSkgLWVxIDAKKwl0aGVuCisJCXVzYWdlCisJZmkKKworCWlmIHRlc3QgJGhhc19icmFuY2ggLWVxIDAKKwl0aGVuCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIuYnJhbmNoICIkYnJhbmNoIgorCWVsc2UKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS4iJG5hbWUiLmJyYW5jaAorCWZpCit9CisKKyMKKyMgQ29uZmlndXJlcyBhIHN1Ym1vZHVsZSdzIHJlbW90ZSB1cmwKKyMKKyMgJEAgPSByZXF1ZXN0ZWQgcGF0aCwgcmVxdWVzdGVkIHVybAorIworY21kX3NldF91cmwoKSB7CisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlpZiB0ZXN0ICQjIC1uZSAyCisJdGhlbgorCQl1c2FnZQorCWZpCisKKwkjIHdlIGNhbid0IHVzZSBgZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWVgIGhlcmUgYmVjYXVzZSBpbnRlcm5hbGx5LCBpdAorCSMgaGFzaGVzIHRoZSBwYXRoIHNvIGEgdHJhaWxpbmcgc2xhc2ggY291bGQgbGVhZCB0byBhbiB1bmludGVudGlvbmFsIG5vIG1hdGNoCisJbmFtZT0iJChnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCAiJDEiIHwgY3V0IC1mMikiCisJaWYgdGVzdCAteiAiJG5hbWUiCisJdGhlbgorCQlleGl0IDEKKwlmaQorCisJdXJsPSIkMiIKKwlpZiB0ZXN0IC16ICIkdXJsIgorCXRoZW4KKwkJZXhpdCAxCisJZmkKKworCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsICIkdXJsIgorCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jICR7R0lUX1FVSUVUOistLXF1aWV0fSAiJG5hbWUiCit9CisKKyMKKyMgU2hvdyBjb21taXQgc3VtbWFyeSBmb3Igc3VibW9kdWxlcyBpbiBpbmRleCBvciB3b3JraW5nIHRyZWUKKyMKKyMgSWYgJy0tY2FjaGVkJyBpcyBnaXZlbiwgc2hvdyBzdW1tYXJ5IGJldHdlZW4gaW5kZXggYW5kIGdpdmVuIGNvbW1pdCwKKyMgb3IgYmV0d2VlbiB3b3JraW5nIHRyZWUgYW5kIGdpdmVuIGNvbW1pdAorIworIyAkQCA9IFtjb21taXQgKGRlZmF1bHQgJ0hFQUQnKSxdIHJlcXVlc3RlZCBwYXRocyAoZGVmYXVsdCBhbGwpCisjCitjbWRfc3VtbWFyeSgpIHsKKwlzdW1tYXJ5X2xpbWl0PS0xCisJZm9yX3N0YXR1cz0KKwlkaWZmX2NtZD1kaWZmLWluZGV4CisKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIHN1bW1hcnkiLgorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLS1jYWNoZWQpCisJCQljYWNoZWQ9IiQxIgorCQkJOzsKKwkJLS1maWxlcykKKwkJCWZpbGVzPSIkMSIKKwkJCTs7CisJCS0tZm9yLXN0YXR1cykKKwkJCWZvcl9zdGF0dXM9IiQxIgorCQkJOzsKKwkJLW58LS1zdW1tYXJ5LWxpbWl0KQorCQkJc3VtbWFyeV9saW1pdD0iJDIiCisJCQlpc251bWJlciAiJHN1bW1hcnlfbGltaXQiIHx8IHVzYWdlCisJCQlzaGlmdAorCQkJOzsKKwkJLS1zdW1tYXJ5LWxpbWl0PSopCisJCQlzdW1tYXJ5X2xpbWl0PSIkezEjLS1zdW1tYXJ5LWxpbWl0PX0iCisJCQlpc251bWJlciAiJHN1bW1hcnlfbGltaXQiIHx8IHVzYWdlCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJdGVzdCAkc3VtbWFyeV9saW1pdCA9IDAgJiYgcmV0dXJuCisKKwlpZiByZXY9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IC0tZGVmYXVsdCBIRUFEICR7MSsiJDEifSkKKwl0aGVuCisJCWhlYWQ9JHJldgorCQl0ZXN0ICQjID0gMCB8fCBzaGlmdAorCWVsaWYgdGVzdCAteiAiJDEiIHx8IHRlc3QgIiQxIiA9ICJIRUFEIgorCXRoZW4KKwkJIyBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdDogY29tcGFyZSB3aXRoIGFuIGVtcHR5IHRyZWUKKwkJaGVhZD0kKGdpdCBoYXNoLW9iamVjdCAtdyAtdCB0cmVlIC0tc3RkaW4gPC9kZXYvbnVsbCkKKwkJdGVzdCAteiAiJDEiIHx8IHNoaWZ0CisJZWxzZQorCQloZWFkPSJIRUFEIgorCWZpCisKKwlpZiBbIC1uICIkZmlsZXMiIF0KKwl0aGVuCisJCXRlc3QgLW4gIiRjYWNoZWQiICYmCisJCWRpZSAiJChnZXR0ZXh0ICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIikiCisJCWRpZmZfY21kPWRpZmYtZmlsZXMKKwkJaGVhZD0KKwlmaQorCisJY2RfdG9fdG9wbGV2ZWwKKwlldmFsICJzZXQgJChnaXQgcmV2LXBhcnNlIC0tc3EgLS1wcmVmaXggIiR3dF9wcmVmaXgiIC0tICIkQCIpIgorCSMgR2V0IG1vZGlmaWVkIG1vZHVsZXMgY2FyZWQgYnkgdXNlcgorCW1vZHVsZXM9JChnaXQgJGRpZmZfY21kICRjYWNoZWQgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXJhdyAkaGVhZCAtLSAiJEAiIHwKKwkJc2FuZV9lZ3JlcCAnXjooWzAtN10qICk/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+IC9kZXYvbnVsbCAyPiYxIHx8IGRpZSAiTm8gJyRicm93c2VyX3BhdGgnIGZvdW5kLiIKKwkJIiRicm93c2VyX3BhdGgiIG5ld1RhYiAiJEAiICYKKwkJOzsKKwlrZm1jbGllbnQpCisJCSIkYnJvd3Nlcl9wYXRoIiBuZXdUYWIgIiRAIiAmCisJCTs7CisJKikKKwkJIiRicm93c2VyX3BhdGgiICIkQCIgJgorCQk7OworCWVzYWMKKwk7OwordzNtfGVsaW5rc3xsaW5rc3xseW54fG9wZW58Y3lnc3RhcnR8eGRnLW9wZW4pCisJIiRicm93c2VyX3BhdGgiICIkQCIKKwk7Oworc3RhcnQpCisJZXhlYyAiJGJyb3dzZXJfcGF0aCIgJyJ3ZWItYnJvd3NlIicgIiRAIgorCTs7CitvcGVyYXxkaWxsbykKKwkiJGJyb3dzZXJfcGF0aCIgIiRAIiAmCisJOzsKKyopCisJaWYgdGVzdCAtbiAiJGJyb3dzZXJfY21kIjsgdGhlbgorCQkoIGV2YWwgIiRicm93c2VyX2NtZCBcIlwkQFwiIiApCisJZmkKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LmMgYi9naXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmU3YWQzCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LmMKQEAgLTAsMCArMSw4OTIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorCisjZGVmaW5lIFJVTl9TRVRVUAkJKDE8PDApCisjZGVmaW5lIFJVTl9TRVRVUF9HRU5UTFkJKDE8PDEpCisjZGVmaW5lIFVTRV9QQUdFUgkJKDE8PDIpCisvKgorICogcmVxdWlyZSB3b3JraW5nIHRyZWUgdG8gYmUgcHJlc2VudCAtLSBhbnl0aGluZyB1c2VzIHRoaXMgbmVlZHMKKyAqIFJVTl9TRVRVUCBmb3IgcmVhZGluZyBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisgKi8KKyNkZWZpbmUgTkVFRF9XT1JLX1RSRUUJCSgxPDwzKQorI2RlZmluZSBTVVBQT1JUX1NVUEVSX1BSRUZJWAkoMTw8NCkKKyNkZWZpbmUgREVMQVlfUEFHRVJfQ09ORklHCSgxPDw1KQorI2RlZmluZSBOT19QQVJTRU9QVAkJKDE8PDYpIC8qIHBhcnNlLW9wdGlvbnMgaXMgbm90IHVzZWQgKi8KKworc3RydWN0IGNtZF9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmNtZDsKKwlpbnQgKCpmbikoaW50LCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICopOworCXVuc2lnbmVkIGludCBvcHRpb247Cit9OworCitjb25zdCBjaGFyIGdpdF91c2FnZV9zdHJpbmdbXSA9CisJTl8oImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisJICAgIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisJICAgIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS1iYXJlXVxuIgorCSAgICIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorCSAgICIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSIpOworCitjb25zdCBjaGFyIGdpdF9tb3JlX2luZm9fc3RyaW5nW10gPQorCU5fKCInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisJICAgImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKwkgICAidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKwkgICAiU2VlICdnaXQgaGVscCBnaXQnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgc3lzdGVtLiIpOworCitzdGF0aWMgaW50IHVzZV9wYWdlciA9IC0xOworCitzdGF0aWMgdm9pZCBsaXN0X2J1aWx0aW5zKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgdW5zaWduZWQgaW50IGV4Y2x1ZGVfb3B0aW9uKTsKKworc3RhdGljIHZvaWQgZXhjbHVkZV9oZWxwZXJzX2Zyb21fbGlzdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGkgPCBsaXN0LT5ucikgeworCQlpZiAoc3Ryc3RyKGxpc3QtPml0ZW1zW2ldLnN0cmluZywgIi0tIikpCisJCQl1bnNvcnRlZF9zdHJpbmdfbGlzdF9kZWxldGVfaXRlbShsaXN0LCBpLCAwKTsKKwkJZWxzZQorCQkJaSsrOworCX0KK30KKworc3RhdGljIGludCBtYXRjaF90b2tlbihjb25zdCBjaGFyICpzcGVjLCBpbnQgbGVuLCBjb25zdCBjaGFyICp0b2tlbikKK3sKKwlpbnQgdG9rZW5fbGVuID0gc3RybGVuKHRva2VuKTsKKworCXJldHVybiBsZW4gPT0gdG9rZW5fbGVuICYmICFzdHJuY21wKHNwZWMsIHRva2VuLCB0b2tlbl9sZW4pOworfQorCitzdGF0aWMgaW50IGxpc3RfY21kcyhjb25zdCBjaGFyICpzcGVjKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGk7CisJaW50IG5vbmdpdDsKKworCS8qCisJKiBTZXQgdXAgdGhlIHJlcG9zaXRvcnkgc28gd2UgY2FuIHBpY2sgdXAgYW55IHJlcG8tbGV2ZWwgY29uZmlnIChsaWtlCisJKiBjb21wbGV0aW9uLmNvbW1hbmRzKS4KKwkqLworCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCisJd2hpbGUgKCpzcGVjKSB7CisJCWNvbnN0IGNoYXIgKnNlcCA9IHN0cmNocm51bChzcGVjLCAnLCcpOworCQlpbnQgbGVuID0gc2VwIC0gc3BlYzsKKworCQlpZiAobWF0Y2hfdG9rZW4oc3BlYywgbGVuLCAiYnVpbHRpbnMiKSkKKwkJCWxpc3RfYnVpbHRpbnMoJmxpc3QsIDApOworCQllbHNlIGlmIChtYXRjaF90b2tlbihzcGVjLCBsZW4sICJtYWluIikpCisJCQlsaXN0X2FsbF9tYWluX2NtZHMoJmxpc3QpOworCQllbHNlIGlmIChtYXRjaF90b2tlbihzcGVjLCBsZW4sICJvdGhlcnMiKSkKKwkJCWxpc3RfYWxsX290aGVyX2NtZHMoJmxpc3QpOworCQllbHNlIGlmIChtYXRjaF90b2tlbihzcGVjLCBsZW4sICJub2hlbHBlcnMiKSkKKwkJCWV4Y2x1ZGVfaGVscGVyc19mcm9tX2xpc3QoJmxpc3QpOworCQllbHNlIGlmIChtYXRjaF90b2tlbihzcGVjLCBsZW4sICJhbGlhcyIpKQorCQkJbGlzdF9hbGlhc2VzKCZsaXN0KTsKKwkJZWxzZSBpZiAobWF0Y2hfdG9rZW4oc3BlYywgbGVuLCAiY29uZmlnIikpCisJCQlsaXN0X2NtZHNfYnlfY29uZmlnKCZsaXN0KTsKKwkJZWxzZSBpZiAobGVuID4gNSAmJiAhc3RybmNtcChzcGVjLCAibGlzdC0iLCA1KSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCQlzdHJidWZfYWRkKCZzYiwgc3BlYyArIDUsIGxlbiAtIDUpOworCQkJbGlzdF9jbWRzX2J5X2NhdGVnb3J5KCZsaXN0LCBzYi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJfQorCQllbHNlCisJCQlkaWUoXygidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIpLCBzcGVjKTsKKwkJc3BlYyArPSBsZW47CisJCWlmICgqc3BlYyA9PSAnLCcpCisJCQlzcGVjKys7CisJfQorCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspCisJCXB1dHMobGlzdC5pdGVtc1tpXS5zdHJpbmcpOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29tbWl0X3BhZ2VyX2Nob2ljZSh2b2lkKQoreworCXN3aXRjaCAodXNlX3BhZ2VyKSB7CisJY2FzZSAwOgorCQlzZXRlbnYoIkdJVF9QQUdFUiIsICJjYXQiLCAxKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzZXR1cF9wYWdlcigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgc2V0dXBfYXV0b19wYWdlcihjb25zdCBjaGFyICpjbWQsIGludCBkZWYpCit7CisJaWYgKHVzZV9wYWdlciAhPSAtMSB8fCBwYWdlcl9pbl91c2UoKSkKKwkJcmV0dXJuOworCXVzZV9wYWdlciA9IGNoZWNrX3BhZ2VyX2NvbmZpZyhjbWQpOworCWlmICh1c2VfcGFnZXIgPT0gLTEpCisJCXVzZV9wYWdlciA9IGRlZjsKKwljb21taXRfcGFnZXJfY2hvaWNlKCk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX29wdGlvbnMoY29uc3QgY2hhciAqKiphcmd2LCBpbnQgKmFyZ2MsIGludCAqZW52Y2hhbmdlZCkKK3sKKwljb25zdCBjaGFyICoqb3JpZ19hcmd2ID0gKmFyZ3Y7CisKKwl3aGlsZSAoKmFyZ2MgPiAwKSB7CisJCWNvbnN0IGNoYXIgKmNtZCA9ICgqYXJndilbMF07CisJCWlmIChjbWRbMF0gIT0gJy0nKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogRm9yIGxlZ2FjeSByZWFzb25zLCB0aGUgInZlcnNpb24iIGFuZCAiaGVscCIKKwkJICogY29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gd2l0aCAiLS0iIHByZXBlbmRlZAorCQkgKiB0byBtYWtlIHRoZW0gbG9vayBsaWtlIGZsYWdzLgorCQkgKi8KKwkJaWYgKCFzdHJjbXAoY21kLCAiLS1oZWxwIikgfHwgIXN0cmNtcChjbWQsICItLXZlcnNpb24iKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIENoZWNrIHJlbWFpbmluZyBmbGFncy4KKwkJICovCisJCWlmIChza2lwX3ByZWZpeChjbWQsICItLWV4ZWMtcGF0aCIsICZjbWQpKSB7CisJCQlpZiAoKmNtZCA9PSAnPScpCisJCQkJZ2l0X3NldF9leGVjX3BhdGgoY21kICsgMSk7CisJCQllbHNlIHsKKwkJCQlwdXRzKGdpdF9leGVjX3BhdGgoKSk7CisJCQkJdHJhY2UyX2NtZF9uYW1lKCJfcXVlcnlfIik7CisJCQkJZXhpdCgwKTsKKwkJCX0KKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0taHRtbC1wYXRoIikpIHsKKwkJCXB1dHMoc3lzdGVtX3BhdGgoR0lUX0hUTUxfUEFUSCkpOworCQkJdHJhY2UyX2NtZF9uYW1lKCJfcXVlcnlfIik7CisJCQlleGl0KDApOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1tYW4tcGF0aCIpKSB7CisJCQlwdXRzKHN5c3RlbV9wYXRoKEdJVF9NQU5fUEFUSCkpOworCQkJdHJhY2UyX2NtZF9uYW1lKCJfcXVlcnlfIik7CisJCQlleGl0KDApOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1pbmZvLXBhdGgiKSkgeworCQkJcHV0cyhzeXN0ZW1fcGF0aChHSVRfSU5GT19QQVRIKSk7CisJCQl0cmFjZTJfY21kX25hbWUoIl9xdWVyeV8iKTsKKwkJCWV4aXQoMCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItcCIpIHx8ICFzdHJjbXAoY21kLCAiLS1wYWdpbmF0ZSIpKSB7CisJCQl1c2VfcGFnZXIgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLVAiKSB8fCAhc3RyY21wKGNtZCwgIi0tbm8tcGFnZXIiKSkgeworCQkJdXNlX3BhZ2VyID0gMDsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbm8tcmVwbGFjZS1vYmplY3RzIikpIHsKKwkJCXJlYWRfcmVwbGFjZV9yZWZzID0gMDsKKwkJCXNldGVudihOT19SRVBMQUNFX09CSkVDVFNfRU5WSVJPTk1FTlQsICIxIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWdpdC1kaXIiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIiApKTsKKwkJCQl1c2FnZShnaXRfdXNhZ2Vfc3RyaW5nKTsKKwkJCX0KKwkJCXNldGVudihHSVRfRElSX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChjbWQsICItLWdpdC1kaXI9IiwgJmNtZCkpIHsKKwkJCXNldGVudihHSVRfRElSX0VOVklST05NRU5ULCBjbWQsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1uYW1lc3BhY2UiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iICkpOworCQkJCXVzYWdlKGdpdF91c2FnZV9zdHJpbmcpOworCQkJfQorCQkJc2V0ZW52KEdJVF9OQU1FU1BBQ0VfRU5WSVJPTk1FTlQsICgqYXJndilbMV0sIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQkJKCphcmd2KSsrOworCQkJKCphcmdjKS0tOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGNtZCwgIi0tbmFtZXNwYWNlPSIsICZjbWQpKSB7CisJCQlzZXRlbnYoR0lUX05BTUVTUEFDRV9FTlZJUk9OTUVOVCwgY21kLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0td29yay10cmVlIikpIHsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXdvcmstdHJlZVxuIiApKTsKKwkJCQl1c2FnZShnaXRfdXNhZ2Vfc3RyaW5nKTsKKwkJCX0KKwkJCXNldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChjbWQsICItLXdvcmstdHJlZT0iLCAmY21kKSkgeworCQkJc2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsIGNtZCwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLXN1cGVyLXByZWZpeCIpKSB7CisJCQlpZiAoKmFyZ2MgPCAyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIm5vIHByZWZpeCBnaXZlbiBmb3IgLS1zdXBlci1wcmVmaXhcbiIgKSk7CisJCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCQl9CisJCQlzZXRlbnYoR0lUX1NVUEVSX1BSRUZJWF9FTlZJUk9OTUVOVCwgKCphcmd2KVsxXSwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoY21kLCAiLS1zdXBlci1wcmVmaXg9IiwgJmNtZCkpIHsKKwkJCXNldGVudihHSVRfU1VQRVJfUFJFRklYX0VOVklST05NRU5ULCBjbWQsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1iYXJlIikpIHsKKwkJCWNoYXIgKmN3ZCA9IHhnZXRjd2QoKTsKKwkJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSAxOworCQkJc2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQsIGN3ZCwgMCk7CisJCQlmcmVlKGN3ZCk7CisJCQlzZXRlbnYoR0lUX0lNUExJQ0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwgIjAiLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi1jIikpIHsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iICkpOworCQkJCXVzYWdlKGdpdF91c2FnZV9zdHJpbmcpOworCQkJfQorCQkJZ2l0X2NvbmZpZ19wdXNoX3BhcmFtZXRlcigoKmFyZ3YpWzFdKTsKKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbGl0ZXJhbC1wYXRoc3BlY3MiKSkgeworCQkJc2V0ZW52KEdJVF9MSVRFUkFMX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgIjEiLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbm8tbGl0ZXJhbC1wYXRoc3BlY3MiKSkgeworCQkJc2V0ZW52KEdJVF9MSVRFUkFMX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgIjAiLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tZ2xvYi1wYXRoc3BlY3MiKSkgeworCQkJc2V0ZW52KEdJVF9HTE9CX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgIjEiLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbm9nbG9iLXBhdGhzcGVjcyIpKSB7CisJCQlzZXRlbnYoR0lUX05PR0xPQl9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQsICIxIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWljYXNlLXBhdGhzcGVjcyIpKSB7CisJCQlzZXRlbnYoR0lUX0lDQVNFX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgIjEiLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbm8tb3B0aW9uYWwtbG9ja3MiKSkgeworCQkJc2V0ZW52KEdJVF9PUFRJT05BTF9MT0NLU19FTlZJUk9OTUVOVCwgIjAiLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tc2hhbGxvdy1maWxlIikpIHsKKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJCXNldF9hbHRlcm5hdGVfc2hhbGxvd19maWxlKHRoZV9yZXBvc2l0b3J5LCAoKmFyZ3YpWzBdLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi1DIikpIHsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtQ1xuIiApKTsKKwkJCQl1c2FnZShnaXRfdXNhZ2Vfc3RyaW5nKTsKKwkJCX0KKwkJCWlmICgoKmFyZ3YpWzFdWzBdKSB7CisJCQkJaWYgKGNoZGlyKCgqYXJndilbMV0pKQorCQkJCQlkaWVfZXJybm8oImNhbm5vdCBjaGFuZ2UgdG8gJyVzJyIsICgqYXJndilbMV0pOworCQkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCQl9CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoY21kLCAiLS1saXN0LWNtZHM9IiwgJmNtZCkpIHsKKwkJCXRyYWNlMl9jbWRfbmFtZSgiX3F1ZXJ5XyIpOworCQkJaWYgKCFzdHJjbXAoY21kLCAicGFyc2VvcHQiKSkgeworCQkJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCQkJaW50IGk7CisKKwkJCQlsaXN0X2J1aWx0aW5zKCZsaXN0LCBOT19QQVJTRU9QVCk7CisJCQkJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKKwkJCQkJcHJpbnRmKCIlcyAiLCBsaXN0Lml0ZW1zW2ldLnN0cmluZyk7CisJCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworCQkJCWV4aXQoMCk7CisJCQl9IGVsc2UgeworCQkJCWV4aXQobGlzdF9jbWRzKGNtZCkpOworCQkJfQorCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsIF8oInVua25vd24gb3B0aW9uOiAlc1xuIiksIGNtZCk7CisJCQl1c2FnZShnaXRfdXNhZ2Vfc3RyaW5nKTsKKwkJfQorCisJCSgqYXJndikrKzsKKwkJKCphcmdjKS0tOworCX0KKwlyZXR1cm4gKCphcmd2KSAtIG9yaWdfYXJndjsKK30KKworc3RhdGljIGludCBoYW5kbGVfYWxpYXMoaW50ICphcmdjcCwgY29uc3QgY2hhciAqKiphcmd2KQoreworCWludCBlbnZjaGFuZ2VkID0gMCwgcmV0ID0gMCwgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwlpbnQgY291bnQsIG9wdGlvbl9jb3VudDsKKwljb25zdCBjaGFyICoqbmV3X2FyZ3Y7CisJY29uc3QgY2hhciAqYWxpYXNfY29tbWFuZDsKKwljaGFyICphbGlhc19zdHJpbmc7CisKKwlhbGlhc19jb21tYW5kID0gKCphcmd2KVswXTsKKwlhbGlhc19zdHJpbmcgPSBhbGlhc19sb29rdXAoYWxpYXNfY29tbWFuZCk7CisJaWYgKGFsaWFzX3N0cmluZykgeworCQlpZiAoKmFyZ2NwID4gMSAmJiAhc3RyY21wKCgqYXJndilbMV0sICItaCIpKQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIiksCisJCQkJICAgYWxpYXNfY29tbWFuZCwgYWxpYXNfc3RyaW5nKTsKKwkJaWYgKGFsaWFzX3N0cmluZ1swXSA9PSAnIScpIHsKKwkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQkJaW50IG5vbmdpdF9vazsKKworCQkJLyogQWxpYXNlcyBleHBlY3QgR0lUX1BSRUZJWCwgR0lUX0RJUiBldGMgdG8gYmUgc2V0ICovCisJCQlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKKworCQkJY29tbWl0X3BhZ2VyX2Nob2ljZSgpOworCisJCQljaGlsZC51c2Vfc2hlbGwgPSAxOworCQkJY2hpbGQudHJhY2UyX2NoaWxkX2NsYXNzID0gInNoZWxsX2FsaWFzIjsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgYWxpYXNfc3RyaW5nICsgMSk7CisJCQlhcmd2X2FycmF5X3B1c2h2KCZjaGlsZC5hcmdzLCAoKmFyZ3YpICsgMSk7CisKKwkJCXRyYWNlMl9jbWRfYWxpYXMoYWxpYXNfY29tbWFuZCwgY2hpbGQuYXJncy5hcmd2KTsKKwkJCXRyYWNlMl9jbWRfbGlzdF9jb25maWcoKTsKKwkJCXRyYWNlMl9jbWRfbmFtZSgiX3J1bl9zaGVsbF9hbGlhc18iKTsKKworCQkJcmV0ID0gcnVuX2NvbW1hbmQoJmNoaWxkKTsKKwkJCWlmIChyZXQgPj0gMCkgICAvKiBub3JtYWwgZXhpdCAqLworCQkJCWV4aXQocmV0KTsKKworCQkJZGllX2Vycm5vKF8oIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIiksCisJCQkJICBhbGlhc19jb21tYW5kLCBhbGlhc19zdHJpbmcgKyAxKTsKKwkJfQorCQljb3VudCA9IHNwbGl0X2NtZGxpbmUoYWxpYXNfc3RyaW5nLCAmbmV3X2FyZ3YpOworCQlpZiAoY291bnQgPCAwKQorCQkJZGllKF8oImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIiksIGFsaWFzX2NvbW1hbmQsCisJCQkgICAgXyhzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGNvdW50KSkpOworCQlvcHRpb25fY291bnQgPSBoYW5kbGVfb3B0aW9ucygmbmV3X2FyZ3YsICZjb3VudCwgJmVudmNoYW5nZWQpOworCQlpZiAoZW52Y2hhbmdlZCkKKwkJCWRpZShfKCJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorCQkJICAgICAgIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIpLAorCQkJICAgIGFsaWFzX2NvbW1hbmQpOworCQlNT1ZFX0FSUkFZKG5ld19hcmd2IC0gb3B0aW9uX2NvdW50LCBuZXdfYXJndiwgY291bnQpOworCQluZXdfYXJndiAtPSBvcHRpb25fY291bnQ7CisKKwkJaWYgKGNvdW50IDwgMSkKKwkJCWRpZShfKCJlbXB0eSBhbGlhcyBmb3IgJXMiKSwgYWxpYXNfY29tbWFuZCk7CisKKwkJaWYgKCFzdHJjbXAoYWxpYXNfY29tbWFuZCwgbmV3X2FyZ3ZbMF0pKQorCQkJZGllKF8oInJlY3Vyc2l2ZSBhbGlhczogJXMiKSwgYWxpYXNfY29tbWFuZCk7CisKKwkJdHJhY2VfYXJndl9wcmludGYobmV3X2FyZ3YsCisJCQkJICAidHJhY2U6IGFsaWFzIGV4cGFuc2lvbjogJXMgPT4iLAorCQkJCSAgYWxpYXNfY29tbWFuZCk7CisKKwkJUkVBTExPQ19BUlJBWShuZXdfYXJndiwgY291bnQgKyAqYXJnY3ApOworCQkvKiBpbnNlcnQgYWZ0ZXIgY29tbWFuZCBuYW1lICovCisJCUNPUFlfQVJSQVkobmV3X2FyZ3YgKyBjb3VudCwgKmFyZ3YgKyAxLCAqYXJnY3ApOworCisJCXRyYWNlMl9jbWRfYWxpYXMoYWxpYXNfY29tbWFuZCwgbmV3X2FyZ3YpOworCQl0cmFjZTJfY21kX2xpc3RfY29uZmlnKCk7CisKKwkJKmFyZ3YgPSBuZXdfYXJndjsKKwkJKmFyZ2NwICs9IGNvdW50IC0gMTsKKworCQlyZXQgPSAxOworCX0KKworCWVycm5vID0gc2F2ZWRfZXJybm87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ1bl9idWlsdGluKHN0cnVjdCBjbWRfc3RydWN0ICpwLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IHN0YXR1cywgaGVscDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBjaGFyICpwcmVmaXg7CisKKwlwcmVmaXggPSBOVUxMOworCWhlbHAgPSBhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKTsKKwlpZiAoIWhlbHApIHsKKwkJaWYgKHAtPm9wdGlvbiAmIFJVTl9TRVRVUCkKKwkJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwkJZWxzZSBpZiAocC0+b3B0aW9uICYgUlVOX1NFVFVQX0dFTlRMWSkgeworCQkJaW50IG5vbmdpdF9vazsKKwkJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXRfb2spOworCQl9CisKKwkJaWYgKHVzZV9wYWdlciA9PSAtMSAmJiBwLT5vcHRpb24gJiAoUlVOX1NFVFVQIHwgUlVOX1NFVFVQX0dFTlRMWSkgJiYKKwkJICAgICEocC0+b3B0aW9uICYgREVMQVlfUEFHRVJfQ09ORklHKSkKKwkJCXVzZV9wYWdlciA9IGNoZWNrX3BhZ2VyX2NvbmZpZyhwLT5jbWQpOworCQlpZiAodXNlX3BhZ2VyID09IC0xICYmIHAtPm9wdGlvbiAmIFVTRV9QQUdFUikKKwkJCXVzZV9wYWdlciA9IDE7CisKKwkJaWYgKChwLT5vcHRpb24gJiAoUlVOX1NFVFVQIHwgUlVOX1NFVFVQX0dFTlRMWSkpICYmCisJCSAgICBzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkgLyogZ2V0X2dpdF9kaXIoKSBtYXkgc2V0IHVwIHJlcG8sIGF2b2lkIHRoYXQgKi8KKwkJCXRyYWNlX3JlcG9fc2V0dXAocHJlZml4KTsKKwl9CisJY29tbWl0X3BhZ2VyX2Nob2ljZSgpOworCisJaWYgKCFoZWxwICYmIGdldF9zdXBlcl9wcmVmaXgoKSkgeworCQlpZiAoIShwLT5vcHRpb24gJiBTVVBQT1JUX1NVUEVSX1BSRUZJWCkpCisJCQlkaWUoXygiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IiksIHAtPmNtZCk7CisJfQorCisJaWYgKCFoZWxwICYmIHAtPm9wdGlvbiAmIE5FRURfV09SS19UUkVFKQorCQlzZXR1cF93b3JrX3RyZWUoKTsKKworCXRyYWNlX2FyZ3ZfcHJpbnRmKGFyZ3YsICJ0cmFjZTogYnVpbHQtaW46IGdpdCIpOworCXRyYWNlMl9jbWRfbmFtZShwLT5jbWQpOworCXRyYWNlMl9jbWRfbGlzdF9jb25maWcoKTsKKworCXZhbGlkYXRlX2NhY2hlX2VudHJpZXModGhlX3JlcG9zaXRvcnktPmluZGV4KTsKKwlzdGF0dXMgPSBwLT5mbihhcmdjLCBhcmd2LCBwcmVmaXgpOworCXZhbGlkYXRlX2NhY2hlX2VudHJpZXModGhlX3JlcG9zaXRvcnktPmluZGV4KTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBTb21lYm9keSBjbG9zZWQgc3Rkb3V0PyAqLworCWlmIChmc3RhdChmaWxlbm8oc3Rkb3V0KSwgJnN0KSkKKwkJcmV0dXJuIDA7CisJLyogSWdub3JlIHdyaXRlIGVycm9ycyBmb3IgcGlwZXMgYW5kIHNvY2tldHMuLiAqLworCWlmIChTX0lTRklGTyhzdC5zdF9tb2RlKSB8fCBTX0lTU09DSyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDaGVjayBmb3IgRU5PU1BDIGFuZCBFSU8gZXJyb3JzLi4gKi8KKwlpZiAoZmZsdXNoKHN0ZG91dCkpCisJCWRpZV9lcnJubyhfKCJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIpKTsKKwlpZiAoZmVycm9yKHN0ZG91dCkpCisJCWRpZShfKCJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IikpOworCWlmIChmY2xvc2Uoc3Rkb3V0KSkKKwkJZGllX2Vycm5vKF8oImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0geworCXsgImFkZCIsIGNtZF9hZGQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAiYW0iLCBjbWRfYW0sIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAiYW5ub3RhdGUiLCBjbWRfYW5ub3RhdGUsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCisJeyAiYXBwbHkiLCBjbWRfYXBwbHksIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJhcmNoaXZlIiwgY21kX2FyY2hpdmUsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJiaXNlY3QtLWhlbHBlciIsIGNtZF9iaXNlY3RfX2hlbHBlciwgUlVOX1NFVFVQIH0sCisJeyAiYmxhbWUiLCBjbWRfYmxhbWUsIFJVTl9TRVRVUCB9LAorCXsgImJyYW5jaCIsIGNtZF9icmFuY2gsIFJVTl9TRVRVUCB8IERFTEFZX1BBR0VSX0NPTkZJRyB9LAorCXsgImJ1bmRsZSIsIGNtZF9idW5kbGUsIFJVTl9TRVRVUF9HRU5UTFkgfCBOT19QQVJTRU9QVCB9LAorCXsgImNhdC1maWxlIiwgY21kX2NhdF9maWxlLCBSVU5fU0VUVVAgfSwKKwl7ICJjaGVjay1hdHRyIiwgY21kX2NoZWNrX2F0dHIsIFJVTl9TRVRVUCB9LAorCXsgImNoZWNrLWlnbm9yZSIsIGNtZF9jaGVja19pZ25vcmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAiY2hlY2stbWFpbG1hcCIsIGNtZF9jaGVja19tYWlsbWFwLCBSVU5fU0VUVVAgfSwKKwl7ICJjaGVjay1yZWYtZm9ybWF0IiwgY21kX2NoZWNrX3JlZl9mb3JtYXQsIE5PX1BBUlNFT1BUICB9LAorCXsgImNoZWNrb3V0IiwgY21kX2NoZWNrb3V0LCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgImNoZWNrb3V0LWluZGV4IiwgY21kX2NoZWNrb3V0X2luZGV4LAorCQlSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRX0sCisJeyAiY2hlcnJ5IiwgY21kX2NoZXJyeSwgUlVOX1NFVFVQIH0sCisJeyAiY2hlcnJ5LXBpY2siLCBjbWRfY2hlcnJ5X3BpY2ssIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAiY2xlYW4iLCBjbWRfY2xlYW4sIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAiY2xvbmUiLCBjbWRfY2xvbmUgfSwKKwl7ICJjb2x1bW4iLCBjbWRfY29sdW1uLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAiY29tbWl0IiwgY21kX2NvbW1pdCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJjb21taXQtZ3JhcGgiLCBjbWRfY29tbWl0X2dyYXBoLCBSVU5fU0VUVVAgfSwKKwl7ICJjb21taXQtdHJlZSIsIGNtZF9jb21taXRfdHJlZSwgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJjb25maWciLCBjbWRfY29uZmlnLCBSVU5fU0VUVVBfR0VOVExZIHwgREVMQVlfUEFHRVJfQ09ORklHIH0sCisJeyAiY291bnQtb2JqZWN0cyIsIGNtZF9jb3VudF9vYmplY3RzLCBSVU5fU0VUVVAgfSwKKwl7ICJjcmVkZW50aWFsIiwgY21kX2NyZWRlbnRpYWwsIFJVTl9TRVRVUF9HRU5UTFkgfCBOT19QQVJTRU9QVCB9LAorCXsgImRlc2NyaWJlIiwgY21kX2Rlc2NyaWJlLCBSVU5fU0VUVVAgfSwKKwl7ICJkaWZmIiwgY21kX2RpZmYsIE5PX1BBUlNFT1BUIH0sCisJeyAiZGlmZi1maWxlcyIsIGNtZF9kaWZmX2ZpbGVzLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB8IE5PX1BBUlNFT1BUIH0sCisJeyAiZGlmZi1pbmRleCIsIGNtZF9kaWZmX2luZGV4LCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgImRpZmYtdHJlZSIsIGNtZF9kaWZmX3RyZWUsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCisJeyAiZGlmZnRvb2wiLCBjbWRfZGlmZnRvb2wsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJlbnYtLWhlbHBlciIsIGNtZF9lbnZfX2hlbHBlciB9LAorCXsgImZhc3QtZXhwb3J0IiwgY21kX2Zhc3RfZXhwb3J0LCBSVU5fU0VUVVAgfSwKKwl7ICJmZXRjaCIsIGNtZF9mZXRjaCwgUlVOX1NFVFVQIH0sCisJeyAiZmV0Y2gtcGFjayIsIGNtZF9mZXRjaF9wYWNrLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgImZtdC1tZXJnZS1tc2ciLCBjbWRfZm10X21lcmdlX21zZywgUlVOX1NFVFVQIH0sCisJeyAiZm9yLWVhY2gtcmVmIiwgY21kX2Zvcl9lYWNoX3JlZiwgUlVOX1NFVFVQIH0sCisJeyAiZm9ybWF0LXBhdGNoIiwgY21kX2Zvcm1hdF9wYXRjaCwgUlVOX1NFVFVQIH0sCisJeyAiZnNjayIsIGNtZF9mc2NrLCBSVU5fU0VUVVAgfSwKKwl7ICJmc2NrLW9iamVjdHMiLCBjbWRfZnNjaywgUlVOX1NFVFVQIH0sCisJeyAiZ2MiLCBjbWRfZ2MsIFJVTl9TRVRVUCB9LAorCXsgImdldC10YXItY29tbWl0LWlkIiwgY21kX2dldF90YXJfY29tbWl0X2lkLCBOT19QQVJTRU9QVCB9LAorCXsgImdyZXAiLCBjbWRfZ3JlcCwgUlVOX1NFVFVQX0dFTlRMWSB9LAorCXsgImhhc2gtb2JqZWN0IiwgY21kX2hhc2hfb2JqZWN0IH0sCisJeyAiaGVscCIsIGNtZF9oZWxwIH0sCisJeyAiaW5kZXgtcGFjayIsIGNtZF9pbmRleF9wYWNrLCBSVU5fU0VUVVBfR0VOVExZIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJpbml0IiwgY21kX2luaXRfZGIgfSwKKwl7ICJpbml0LWRiIiwgY21kX2luaXRfZGIgfSwKKwl7ICJpbnRlcnByZXQtdHJhaWxlcnMiLCBjbWRfaW50ZXJwcmV0X3RyYWlsZXJzLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAibG9nIiwgY21kX2xvZywgUlVOX1NFVFVQIH0sCisJeyAibHMtZmlsZXMiLCBjbWRfbHNfZmlsZXMsIFJVTl9TRVRVUCB9LAorCXsgImxzLXJlbW90ZSIsIGNtZF9sc19yZW1vdGUsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJscy10cmVlIiwgY21kX2xzX3RyZWUsIFJVTl9TRVRVUCB9LAorCXsgIm1haWxpbmZvIiwgY21kX21haWxpbmZvLCBSVU5fU0VUVVBfR0VOVExZIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJtYWlsc3BsaXQiLCBjbWRfbWFpbHNwbGl0LCBOT19QQVJTRU9QVCB9LAorCXsgIm1lcmdlIiwgY21kX21lcmdlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgIm1lcmdlLWJhc2UiLCBjbWRfbWVyZ2VfYmFzZSwgUlVOX1NFVFVQIH0sCisJeyAibWVyZ2UtZmlsZSIsIGNtZF9tZXJnZV9maWxlLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAibWVyZ2UtaW5kZXgiLCBjbWRfbWVyZ2VfaW5kZXgsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCisJeyAibWVyZ2Utb3VycyIsIGNtZF9tZXJnZV9vdXJzLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgIm1lcmdlLXJlY3Vyc2l2ZSIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJtZXJnZS1yZWN1cnNpdmUtb3VycyIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJtZXJnZS1yZWN1cnNpdmUtdGhlaXJzIiwgY21kX21lcmdlX3JlY3Vyc2l2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfCBOT19QQVJTRU9QVCB9LAorCXsgIm1lcmdlLXN1YnRyZWUiLCBjbWRfbWVyZ2VfcmVjdXJzaXZlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB8IE5PX1BBUlNFT1BUIH0sCisJeyAibWVyZ2UtdHJlZSIsIGNtZF9tZXJnZV90cmVlLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgIm1rdGFnIiwgY21kX21rdGFnLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgIm1rdHJlZSIsIGNtZF9ta3RyZWUsIFJVTl9TRVRVUCB9LAorCXsgIm11bHRpLXBhY2staW5kZXgiLCBjbWRfbXVsdGlfcGFja19pbmRleCwgUlVOX1NFVFVQX0dFTlRMWSB9LAorCXsgIm12IiwgY21kX212LCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgIm5hbWUtcmV2IiwgY21kX25hbWVfcmV2LCBSVU5fU0VUVVAgfSwKKwl7ICJub3RlcyIsIGNtZF9ub3RlcywgUlVOX1NFVFVQIH0sCisJeyAicGFjay1vYmplY3RzIiwgY21kX3BhY2tfb2JqZWN0cywgUlVOX1NFVFVQIH0sCisJeyAicGFjay1yZWR1bmRhbnQiLCBjbWRfcGFja19yZWR1bmRhbnQsIFJVTl9TRVRVUCB8IE5PX1BBUlNFT1BUIH0sCisJeyAicGFjay1yZWZzIiwgY21kX3BhY2tfcmVmcywgUlVOX1NFVFVQIH0sCisJeyAicGF0Y2gtaWQiLCBjbWRfcGF0Y2hfaWQsIFJVTl9TRVRVUF9HRU5UTFkgfCBOT19QQVJTRU9QVCB9LAorCXsgInBpY2theGUiLCBjbWRfYmxhbWUsIFJVTl9TRVRVUCB9LAorCXsgInBydW5lIiwgY21kX3BydW5lLCBSVU5fU0VUVVAgfSwKKwl7ICJwcnVuZS1wYWNrZWQiLCBjbWRfcHJ1bmVfcGFja2VkLCBSVU5fU0VUVVAgfSwKKwl7ICJwdWxsIiwgY21kX3B1bGwsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAicHVzaCIsIGNtZF9wdXNoLCBSVU5fU0VUVVAgfSwKKwl7ICJyYW5nZS1kaWZmIiwgY21kX3JhbmdlX2RpZmYsIFJVTl9TRVRVUCB8IFVTRV9QQUdFUiB9LAorCXsgInJlYWQtdHJlZSIsIGNtZF9yZWFkX3RyZWUsIFJVTl9TRVRVUCB8IFNVUFBPUlRfU1VQRVJfUFJFRklYfSwKKwl7ICJyZWJhc2UiLCBjbWRfcmViYXNlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInJlYmFzZS0taW50ZXJhY3RpdmUiLCBjbWRfcmViYXNlX19pbnRlcmFjdGl2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJyZWNlaXZlLXBhY2siLCBjbWRfcmVjZWl2ZV9wYWNrIH0sCisJeyAicmVmbG9nIiwgY21kX3JlZmxvZywgUlVOX1NFVFVQIH0sCisJeyAicmVtb3RlIiwgY21kX3JlbW90ZSwgUlVOX1NFVFVQIH0sCisJeyAicmVtb3RlLWV4dCIsIGNtZF9yZW1vdGVfZXh0LCBOT19QQVJTRU9QVCB9LAorCXsgInJlbW90ZS1mZCIsIGNtZF9yZW1vdGVfZmQsIE5PX1BBUlNFT1BUIH0sCisJeyAicmVwYWNrIiwgY21kX3JlcGFjaywgUlVOX1NFVFVQIH0sCisJeyAicmVwbGFjZSIsIGNtZF9yZXBsYWNlLCBSVU5fU0VUVVAgfSwKKwl7ICJyZXJlcmUiLCBjbWRfcmVyZXJlLCBSVU5fU0VUVVAgfSwKKwl7ICJyZXNldCIsIGNtZF9yZXNldCwgUlVOX1NFVFVQIH0sCisJeyAicmVzdG9yZSIsIGNtZF9yZXN0b3JlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInJldi1saXN0IiwgY21kX3Jldl9saXN0LCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgInJldi1wYXJzZSIsIGNtZF9yZXZfcGFyc2UsIE5PX1BBUlNFT1BUIH0sCisJeyAicmV2ZXJ0IiwgY21kX3JldmVydCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJybSIsIGNtZF9ybSwgUlVOX1NFVFVQIH0sCisJeyAic2VuZC1wYWNrIiwgY21kX3NlbmRfcGFjaywgUlVOX1NFVFVQIH0sCisJeyAic2hvcnRsb2ciLCBjbWRfc2hvcnRsb2csIFJVTl9TRVRVUF9HRU5UTFkgfCBVU0VfUEFHRVIgfSwKKwl7ICJzaG93IiwgY21kX3Nob3csIFJVTl9TRVRVUCB9LAorCXsgInNob3ctYnJhbmNoIiwgY21kX3Nob3dfYnJhbmNoLCBSVU5fU0VUVVAgfSwKKwl7ICJzaG93LWluZGV4IiwgY21kX3Nob3dfaW5kZXggfSwKKwl7ICJzaG93LXJlZiIsIGNtZF9zaG93X3JlZiwgUlVOX1NFVFVQIH0sCisJeyAic3BhcnNlLWNoZWNrb3V0IiwgY21kX3NwYXJzZV9jaGVja291dCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJzdGFnZSIsIGNtZF9hZGQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJLyoKKwkgKiBORUVEU1dPUks6IFVudGlsIHRoZSBidWlsdGluIHN0YXNoIGlzIHRob3JvdWdobHkgcm9idXN0IGFuZCBubworCSAqIGxvbmdlciBuZWVkcyByZWRpcmVjdGlvbiB0byB0aGUgc3Rhc2ggc2hlbGwgc2NyaXB0IHRoaXMgaXMga2VwdCBhcworCSAqIGlzLCB0aGVuIHNob3VsZCBiZSBjaGFuZ2VkIHRvIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFCisJICovCisJeyAic3Rhc2giLCBjbWRfc3Rhc2ggfSwKKwl7ICJzdGF0dXMiLCBjbWRfc3RhdHVzLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInN0cmlwc3BhY2UiLCBjbWRfc3RyaXBzcGFjZSB9LAorCXsgInN1Ym1vZHVsZS0taGVscGVyIiwgY21kX3N1Ym1vZHVsZV9faGVscGVyLCBSVU5fU0VUVVAgfCBTVVBQT1JUX1NVUEVSX1BSRUZJWCB8IE5PX1BBUlNFT1BUIH0sCisJeyAic3dpdGNoIiwgY21kX3N3aXRjaCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJzeW1ib2xpYy1yZWYiLCBjbWRfc3ltYm9saWNfcmVmLCBSVU5fU0VUVVAgfSwKKwl7ICJ0YWciLCBjbWRfdGFnLCBSVU5fU0VUVVAgfCBERUxBWV9QQUdFUl9DT05GSUcgfSwKKwl7ICJ1bnBhY2stZmlsZSIsIGNtZF91bnBhY2tfZmlsZSwgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJ1bnBhY2stb2JqZWN0cyIsIGNtZF91bnBhY2tfb2JqZWN0cywgUlVOX1NFVFVQIHwgTk9fUEFSU0VPUFQgfSwKKwl7ICJ1cGRhdGUtaW5kZXgiLCBjbWRfdXBkYXRlX2luZGV4LCBSVU5fU0VUVVAgfSwKKwl7ICJ1cGRhdGUtcmVmIiwgY21kX3VwZGF0ZV9yZWYsIFJVTl9TRVRVUCB9LAorCXsgInVwZGF0ZS1zZXJ2ZXItaW5mbyIsIGNtZF91cGRhdGVfc2VydmVyX2luZm8sIFJVTl9TRVRVUCB9LAorCXsgInVwbG9hZC1hcmNoaXZlIiwgY21kX3VwbG9hZF9hcmNoaXZlLCBOT19QQVJTRU9QVCB9LAorCXsgInVwbG9hZC1hcmNoaXZlLS13cml0ZXIiLCBjbWRfdXBsb2FkX2FyY2hpdmVfd3JpdGVyLCBOT19QQVJTRU9QVCB9LAorCXsgInVwbG9hZC1wYWNrIiwgY21kX3VwbG9hZF9wYWNrIH0sCisJeyAidmFyIiwgY21kX3ZhciwgUlVOX1NFVFVQX0dFTlRMWSB8IE5PX1BBUlNFT1BUIH0sCisJeyAidmVyaWZ5LWNvbW1pdCIsIGNtZF92ZXJpZnlfY29tbWl0LCBSVU5fU0VUVVAgfSwKKwl7ICJ2ZXJpZnktcGFjayIsIGNtZF92ZXJpZnlfcGFjayB9LAorCXsgInZlcmlmeS10YWciLCBjbWRfdmVyaWZ5X3RhZywgUlVOX1NFVFVQIH0sCisJeyAidmVyc2lvbiIsIGNtZF92ZXJzaW9uIH0sCisJeyAid2hhdGNoYW5nZWQiLCBjbWRfd2hhdGNoYW5nZWQsIFJVTl9TRVRVUCB9LAorCXsgIndvcmt0cmVlIiwgY21kX3dvcmt0cmVlLCBSVU5fU0VUVVAgfCBOT19QQVJTRU9QVCB9LAorCXsgIndyaXRlLXRyZWUiLCBjbWRfd3JpdGVfdHJlZSwgUlVOX1NFVFVQIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNtZF9zdHJ1Y3QgKmdldF9idWlsdGluKGNvbnN0IGNoYXIgKnMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZHMpOyBpKyspIHsKKwkJc3RydWN0IGNtZF9zdHJ1Y3QgKnAgPSBjb21tYW5kcyArIGk7CisJCWlmICghc3RyY21wKHMsIHAtPmNtZCkpCisJCQlyZXR1cm4gcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBpc19idWlsdGluKGNvbnN0IGNoYXIgKnMpCit7CisJcmV0dXJuICEhZ2V0X2J1aWx0aW4ocyk7Cit9CisKK3N0YXRpYyB2b2lkIGxpc3RfYnVpbHRpbnMoc3RydWN0IHN0cmluZ19saXN0ICpvdXQsIHVuc2lnbmVkIGludCBleGNsdWRlX29wdGlvbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kcyk7IGkrKykgeworCQlpZiAoZXhjbHVkZV9vcHRpb24gJiYKKwkJICAgIChjb21tYW5kc1tpXS5vcHRpb24gJiBleGNsdWRlX29wdGlvbikpCisJCQljb250aW51ZTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKG91dCwgY29tbWFuZHNbaV0uY21kKTsKKwl9Cit9CisKKyNpZmRlZiBTVFJJUF9FWFRFTlNJT04KK3N0YXRpYyB2b2lkIHN0cmlwX2V4dGVuc2lvbihjb25zdCBjaGFyICoqYXJndikKK3sKKwlzaXplX3QgbGVuOworCisJaWYgKHN0cmlwX3N1ZmZpeChhcmd2WzBdLCBTVFJJUF9FWFRFTlNJT04sICZsZW4pKQorCQlhcmd2WzBdID0geG1lbWR1cHooYXJndlswXSwgbGVuKTsKK30KKyNlbHNlCisjZGVmaW5lIHN0cmlwX2V4dGVuc2lvbihjbWQpCisjZW5kaWYKKworc3RhdGljIHZvaWQgaGFuZGxlX2J1aWx0aW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJY29uc3QgY2hhciAqY21kOworCXN0cnVjdCBjbWRfc3RydWN0ICpidWlsdGluOworCisJc3RyaXBfZXh0ZW5zaW9uKGFyZ3YpOworCWNtZCA9IGFyZ3ZbMF07CisKKwkvKiBUdXJuICJnaXQgY21kIC0taGVscCIgaW50byAiZ2l0IGhlbHAgLS1leGNsdWRlLWd1aWRlcyBjbWQiICovCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgIi0taGVscCIpKSB7CisJCWludCBpOworCisJCWFyZ3ZbMV0gPSBhcmd2WzBdOworCQlhcmd2WzBdID0gY21kID0gImhlbHAiOworCisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgYXJndltpXSk7CisJCQlpZiAoIWkpCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1leGNsdWRlLWd1aWRlcyIpOworCQl9CisKKwkJYXJnYysrOworCQlhcmd2ID0gYXJncy5hcmd2OworCX0KKworCWJ1aWx0aW4gPSBnZXRfYnVpbHRpbihjbWQpOworCWlmIChidWlsdGluKQorCQlleGl0KHJ1bl9idWlsdGluKGJ1aWx0aW4sIGFyZ2MsIGFyZ3YpKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKK30KKworc3RhdGljIHZvaWQgZXhlY3ZfZGFzaGVkX2V4dGVybmFsKGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgc3RhdHVzOworCisJaWYgKGdldF9zdXBlcl9wcmVmaXgoKSkKKwkJZGllKF8oIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIpLCBhcmd2WzBdKTsKKworCWlmICh1c2VfcGFnZXIgPT0gLTEgJiYgIWlzX2J1aWx0aW4oYXJndlswXSkpCisJCXVzZV9wYWdlciA9IGNoZWNrX3BhZ2VyX2NvbmZpZyhhcmd2WzBdKTsKKwljb21taXRfcGFnZXJfY2hvaWNlKCk7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZjbWQuYXJncywgImdpdC0lcyIsIGFyZ3ZbMF0pOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNtZC5hcmdzLCBhcmd2ICsgMSk7CisJY21kLmNsZWFuX29uX2V4aXQgPSAxOworCWNtZC53YWl0X2FmdGVyX2NsZWFuID0gMTsKKwljbWQuc2lsZW50X2V4ZWNfZmFpbHVyZSA9IDE7CisJY21kLnRyYWNlMl9jaGlsZF9jbGFzcyA9ICJkYXNoZWQiOworCisJdHJhY2UyX2NtZF9uYW1lKCJfcnVuX2Rhc2hlZF8iKTsKKworCS8qCisJICogVGhlIGNvZGUgaW4gcnVuX2NvbW1hbmQoKSBsb2dzIHRyYWNlMiBjaGlsZF9zdGFydC9jaGlsZF9leGl0CisJICogZXZlbnRzLCBzbyB3ZSBkbyBub3QgbmVlZCB0byByZXBvcnQgZXhlYy9leGVjX3Jlc3VsdCBldmVudHMgaGVyZS4KKwkgKi8KKwl0cmFjZV9hcmd2X3ByaW50ZihjbWQuYXJncy5hcmd2LCAidHJhY2U6IGV4ZWM6Iik7CisKKwkvKgorCSAqIElmIHdlIGZhaWwgYmVjYXVzZSB0aGUgY29tbWFuZCBpcyBub3QgZm91bmQsIGl0IGlzCisJICogT0sgdG8gcmV0dXJuLiBPdGhlcndpc2UsIHdlIGp1c3QgcGFzcyBhbG9uZyB0aGUgc3RhdHVzIGNvZGUsCisJICogb3Igb3VyIHVzdWFsIGdlbmVyaWMgY29kZSBpZiB3ZSB3ZXJlIG5vdCBldmVuIGFibGUgdG8gZXhlYworCSAqIHRoZSBwcm9ncmFtLgorCSAqLworCXN0YXR1cyA9IHJ1bl9jb21tYW5kKCZjbWQpOworCisJLyoKKwkgKiBJZiB0aGUgY2hpbGQgcHJvY2VzcyByYW4gYW5kIHdlIGFyZSBub3cgZ29pbmcgdG8gZXhpdCwgZW1pdCBhCisJICogZ2VuZXJpYyBzdHJpbmcgYXMgb3VyIHRyYWNlMiBjb21tYW5kIHZlcmIgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIGxhdW5jaGVkIGEgZGFzaGVkIGNvbW1hbmQuCisJICovCisJaWYgKHN0YXR1cyA+PSAwKQorCQlleGl0KHN0YXR1cyk7CisJZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKQorCQlleGl0KDEyOCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2FyZ3YoaW50ICphcmdjcCwgY29uc3QgY2hhciAqKiphcmd2KQoreworCWludCBkb25lX2FsaWFzID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY21kX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzZWVuOworCisJd2hpbGUgKDEpIHsKKwkJLyoKKwkJICogSWYgd2UgdHJpZWQgYWxpYXMgYW5kIGZ1dHplZCB3aXRoIG91ciBlbnZpcm9ubWVudCwKKwkJICogaXQgbm8gbG9uZ2VyIGlzIHNhZmUgdG8gaW52b2tlIGJ1aWx0aW5zIGRpcmVjdGx5IGluCisJCSAqIGdlbmVyYWwuICBXZSBoYXZlIHRvIHNwYXduIHRoZW0gYXMgZGFzaGVkIGV4dGVybmFscy4KKwkJICoKKwkJICogTkVFRFNXT1JLOiBpZiB3ZSBjYW4gZmlndXJlIG91dCBjYXNlcworCQkgKiB3aGVyZSBpdCBpcyBzYWZlIHRvIGRvLCB3ZSBjYW4gYXZvaWQgc3Bhd25pbmcgYSBuZXcKKwkJICogcHJvY2Vzcy4KKwkJICovCisJCWlmICghZG9uZV9hbGlhcykKKwkJCWhhbmRsZV9idWlsdGluKCphcmdjcCwgKmFyZ3YpOworCQllbHNlIGlmIChnZXRfYnVpbHRpbigqKmFyZ3YpKSB7CisJCQlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCQkJaW50IGk7CisKKwkJCS8qCisJCQkgKiBUaGUgY3VycmVudCBwcm9jZXNzIGlzIGNvbW1pdHRlZCB0byBsYXVuY2hpbmcgYQorCQkJICogY2hpbGQgcHJvY2VzcyB0byBydW4gdGhlIGNvbW1hbmQgbmFtZWQgaW4gKCoqYXJndikKKwkJCSAqIGFuZCBleGl0aW5nLiAgTG9nIGEgZ2VuZXJpYyBzdHJpbmcgYXMgdGhlIHRyYWNlMgorCQkJICogY29tbWFuZCB2ZXJiIHRvIGluZGljYXRlIHRoaXMuICBOb3RlIHRoYXQgdGhlIGNoaWxkCisJCQkgKiBwcm9jZXNzIHdpbGwgbG9nIHRoZSBhY3R1YWwgdmVyYiB3aGVuIGl0IHJ1bnMuCisJCQkgKi8KKwkJCXRyYWNlMl9jbWRfbmFtZSgiX3J1bl9naXRfYWxpYXNfIik7CisKKwkJCWlmIChnZXRfc3VwZXJfcHJlZml4KCkpCisJCQkJZGllKCIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiLCAqKmFyZ3YpOworCisJCQljb21taXRfcGFnZXJfY2hvaWNlKCk7CisKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgImdpdCIpOworCQkJZm9yIChpID0gMDsgaSA8ICphcmdjcDsgaSsrKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgKCphcmd2KVtpXSk7CisKKwkJCXRyYWNlX2FyZ3ZfcHJpbnRmKGFyZ3MuYXJndiwgInRyYWNlOiBleGVjOiIpOworCisJCQkvKgorCQkJICogaWYgd2UgZmFpbCBiZWNhdXNlIHRoZSBjb21tYW5kIGlzIG5vdCBmb3VuZCwgaXQgaXMKKwkJCSAqIE9LIHRvIHJldHVybi4gT3RoZXJ3aXNlLCB3ZSBqdXN0IHBhc3MgYWxvbmcgdGhlIHN0YXR1cyBjb2RlLgorCQkJICovCisJCQlpID0gcnVuX2NvbW1hbmRfdl9vcHRfdHIyKGFyZ3MuYXJndiwgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgfAorCQkJCQkJICBSVU5fQ0xFQU5fT05fRVhJVCwgImdpdF9hbGlhcyIpOworCQkJaWYgKGkgPj0gMCB8fCBlcnJubyAhPSBFTk9FTlQpCisJCQkJZXhpdChpKTsKKwkJCWRpZSgiY291bGQgbm90IGV4ZWN1dGUgYnVpbHRpbiAlcyIsICoqYXJndik7CisJCX0KKworCQkvKiAuLiB0aGVuIHRyeSB0aGUgZXh0ZXJuYWwgb25lcyAqLworCQlleGVjdl9kYXNoZWRfZXh0ZXJuYWwoKmFyZ3YpOworCisJCXNlZW4gPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJmNtZF9saXN0LCAqYXJndlswXSk7CisJCWlmIChzZWVuKSB7CisJCQlpbnQgaTsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJCWZvciAoaSA9IDA7IGkgPCBjbWRfbGlzdC5ucjsgaSsrKSB7CisJCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSAmY21kX2xpc3QuaXRlbXNbaV07CisKKwkJCQlzdHJidWZfYWRkZigmc2IsICJcbiAgJXMiLCBpdGVtLT5zdHJpbmcpOworCQkJCWlmIChpdGVtID09IHNlZW4pCisJCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiIDw9PSIpOworCQkJCWVsc2UgaWYgKGkgPT0gY21kX2xpc3QubnIgLSAxKQorCQkJCQlzdHJidWZfYWRkc3RyKCZzYiwgIiA9PT4iKTsKKwkJCX0KKwkJCWRpZShfKCJhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YgJyVzJyBkb2VzIgorCQkJICAgICAgIiBub3QgdGVybWluYXRlOiVzIiksIGNtZF9saXN0Lml0ZW1zWzBdLnN0cmluZywgc2IuYnVmKTsKKwkJfQorCisJCXN0cmluZ19saXN0X2FwcGVuZCgmY21kX2xpc3QsICphcmd2WzBdKTsKKworCQkvKgorCQkgKiBJdCBjb3VsZCBiZSBhbiBhbGlhcyAtLSB0aGlzIHdvcmtzIGFyb3VuZCB0aGUgaW5zYW5pdHkKKwkJICogb2Ygb3ZlcnJpZGluZyAiZ2l0IGxvZyIgd2l0aCAiZ2l0IHNob3ciIGJ5IGhhdmluZworCQkgKiBhbGlhcy5sb2cgPSBzaG93CisJCSAqLworCQlpZiAoIWhhbmRsZV9hbGlhcyhhcmdjcCwgYXJndikpCisJCQlicmVhazsKKwkJZG9uZV9hbGlhcyA9IDE7CisJfQorCisJc3RyaW5nX2xpc3RfY2xlYXIoJmNtZF9saXN0LCAwKTsKKworCXJldHVybiBkb25lX2FsaWFzOworfQorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKmNtZDsKKwlpbnQgZG9uZV9oZWxwID0gMDsKKworCWNtZCA9IGFyZ3ZbMF07CisJaWYgKCFjbWQpCisJCWNtZCA9ICJnaXQtaGVscCI7CisJZWxzZSB7CisJCWNvbnN0IGNoYXIgKnNsYXNoID0gZmluZF9sYXN0X2Rpcl9zZXAoY21kKTsKKwkJaWYgKHNsYXNoKQorCQkJY21kID0gc2xhc2ggKyAxOworCX0KKworCXRyYWNlX2NvbW1hbmRfcGVyZm9ybWFuY2UoYXJndik7CisKKwkvKgorCSAqICJnaXQteHh4eCIgaXMgdGhlIHNhbWUgYXMgImdpdCB4eHh4IiwgYnV0IHdlIG9idmlvdXNseToKKwkgKgorCSAqICAtIGNhbm5vdCB0YWtlIGZsYWdzIGluIGJldHdlZW4gdGhlICJnaXQiIGFuZCB0aGUgInh4eHgiLgorCSAqICAtIGNhbm5vdCBleGVjdXRlIGl0IGV4dGVybmFsbHkgKHNpbmNlIGl0IHdvdWxkIGp1c3QgZG8KKwkgKiAgICB0aGUgc2FtZSB0aGluZyBvdmVyIGFnYWluKQorCSAqCisJICogU28gd2UganVzdCBkaXJlY3RseSBjYWxsIHRoZSBidWlsdGluIGhhbmRsZXIsIGFuZCBkaWUgaWYKKwkgKiB0aGF0IG9uZSBjYW5ub3QgaGFuZGxlIGl0LgorCSAqLworCWlmIChza2lwX3ByZWZpeChjbWQsICJnaXQtIiwgJmNtZCkpIHsKKwkJYXJndlswXSA9IGNtZDsKKwkJaGFuZGxlX2J1aWx0aW4oYXJnYywgYXJndik7CisJCWRpZShfKCJjYW5ub3QgaGFuZGxlICVzIGFzIGEgYnVpbHRpbiIpLCBjbWQpOworCX0KKworCS8qIExvb2sgZm9yIGZsYWdzLi4gKi8KKwlhcmd2Kys7CisJYXJnYy0tOworCWhhbmRsZV9vcHRpb25zKCZhcmd2LCAmYXJnYywgTlVMTCk7CisJaWYgKGFyZ2MgPiAwKSB7CisJCS8qIHRyYW5zbGF0ZSAtLWhlbHAgYW5kIC0tdmVyc2lvbiBpbnRvIGNvbW1hbmRzICovCisJCXNraXBfcHJlZml4KGFyZ3ZbMF0sICItLSIsICZhcmd2WzBdKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGNvbW1hbmQ7IGdpdmUgdGhlbSBoZWxwICovCisJCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKwkJcHJpbnRmKF8oInVzYWdlOiAlc1xuXG4iKSwgZ2l0X3VzYWdlX3N0cmluZyk7CisJCWxpc3RfY29tbW9uX2NtZHNfaGVscCgpOworCQlwcmludGYoIlxuJXNcbiIsIF8oZ2l0X21vcmVfaW5mb19zdHJpbmcpKTsKKwkJZXhpdCgxKTsKKwl9CisJY21kID0gYXJndlswXTsKKworCS8qCisJICogV2UgdXNlIFBBVEggdG8gZmluZCBnaXQgY29tbWFuZHMsIGJ1dCB3ZSBwcmVwZW5kIHNvbWUgaGlnaGVyCisJICogcHJlY2VkZW5jZSBwYXRoczogdGhlICItLWV4ZWMtcGF0aCIgb3B0aW9uLCB0aGUgR0lUX0VYRUNfUEFUSAorCSAqIGVudmlyb25tZW50LCBhbmQgdGhlICQoZ2l0ZXhlY2RpcikgZnJvbSB0aGUgTWFrZWZpbGUgYXQgYnVpbGQKKwkgKiB0aW1lLgorCSAqLworCXNldHVwX3BhdGgoKTsKKworCXdoaWxlICgxKSB7CisJCWludCB3YXNfYWxpYXMgPSBydW5fYXJndigmYXJnYywgJmFyZ3YpOworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJYnJlYWs7CisJCWlmICh3YXNfYWxpYXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJleHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICIKKwkJCQkJICAiJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIiksCisJCQkJY21kLCBhcmd2WzBdKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKCFkb25lX2hlbHApIHsKKwkJCWNtZCA9IGFyZ3ZbMF0gPSBoZWxwX3Vua25vd25fY21kKGNtZCk7CisJCQlkb25lX2hlbHAgPSAxOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKworCWZwcmludGYoc3RkZXJyLCBfKCJmYWlsZWQgdG8gcnVuIGNvbW1hbmQgJyVzJzogJXNcbiIpLAorCQljbWQsIHN0cmVycm9yKGVycm5vKSk7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2dpdC5yYyBiL2dpdC5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzNmZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LnJjCkBAIC0wLDAgKzEsMjQgQEAKKzEgVkVSU0lPTklORk8KK0ZJTEVWRVJTSU9OICAgICBNQUpPUixNSU5PUixNSUNSTyxQQVRDSExFVkVMCitQUk9EVUNUVkVSU0lPTiAgTUFKT1IsTUlOT1IsTUlDUk8sUEFUQ0hMRVZFTAorQkVHSU4KKyAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICBCRUdJTgorICAgIEJMT0NLICIwNDA5MDRiMCIgICAvKiBMQU5HX0VOR0xJU0gvU1VCTEFOR19FTkdMSVNIX1VTLCBVbmljb2RlIENQICovCisgICAgQkVHSU4KKyAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJUaGUgR2l0IERldmVsb3BtZW50IENvbW11bml0eVwwIgorICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJHaXQgZm9yIFdpbmRvd3NcMCIKKyAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAiZ2l0XDAiCisgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJnaXQuZXhlXDAiCisgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiR2l0XDAiCisgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBHSVRfVkVSU0lPTiAiXDAiCisgICAgRU5ECisgIEVORAorCisgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAorICBFTkQKK0VORAorCisxIFJUX01BTklGRVNUICJjb21wYXQvd2luMzIvZ2l0Lm1hbmlmZXN0IgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvLmdpdGlnbm9yZSBiL2dpdGstZ2l0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlYmNhZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvR0lULVRDTFRLLVZBUlMKKy9naXRrLXdpc2gKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L01ha2VmaWxlIGIvZ2l0ay1naXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkZDUyYQotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L01ha2VmaWxlCkBAIC0wLDAgKzEsODAgQEAKKyMgVGhlIGRlZmF1bHQgdGFyZ2V0IG9mIHRoaXMgTWFrZWZpbGUgaXMuLi4KK2FsbDo6CisKK3ByZWZpeCA/PSAkKEhPTUUpCitiaW5kaXIgPz0gJChwcmVmaXgpL2Jpbgorc2hhcmVkaXIgPz0gJChwcmVmaXgpL3NoYXJlCitnaXRrX2xpYmRpciAgID89ICQoc2hhcmVkaXIpL2dpdGsvbGliCittc2dzZGlyICAgID89ICQoZ2l0a19saWJkaXIpL21zZ3MKK21zZ3NkaXJfU1EgID0gJChzdWJzdCAnLCdcJycsJChtc2dzZGlyKSkKKworVENMX1BBVEggPz0gdGNsc2gKK1RDTFRLX1BBVEggPz0gd2lzaAorSU5TVEFMTCA/PSBpbnN0YWxsCitSTSA/PSBybSAtZgorCitERVNURElSX1NRID0gJChzdWJzdCAnLCdcJycsJChERVNURElSKSkKK2JpbmRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoYmluZGlyKSkKK1RDTFRLX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRDTFRLX1BBVEgpKQorCisjIyMgRGV0ZWN0IFRjay9UayBpbnRlcnByZXRlciBwYXRoIGNoYW5nZXMKK1RSQUNLX1RDTFRLID0gJChzdWJzdCAnLCdcJycsLURUQ0xUS19QQVRIPSckKFRDTFRLX1BBVEhfU1EpJykKKworR0lULVRDTFRLLVZBUlM6IEZPUkNFCisJQFZBUlM9JyQoVFJBQ0tfVENMVEspJzsgXAorCQlpZiB0ZXN0IHgiJCRWQVJTIiAhPSB4ImBjYXQgJEAgMj4vZGV2L251bGxgIiA7IHRoZW4gXAorCQkJZWNobyAxPiYyICIgICAgKiBuZXcgVGNsL1RrIGludGVycHJldGVyIGxvY2F0aW9uIjsgXAorCQkJZWNobyAiJCRWQVJTIiA+JEA7IFwKKwkJZmkKKworIyMgcG8tZmlsZSBjcmVhdGlvbiBydWxlcworWEdFVFRFWFQgICA/PSB4Z2V0dGV4dAoraWZkZWYgTk9fTVNHRk1UCisJTVNHRk1UID89ICQoVENMX1BBVEgpIHBvL3BvMm1zZy5zaAorZWxzZQorCU1TR0ZNVCA/PSBtc2dmbXQKKwlpZm5lcSAoJChzaGVsbCAkKE1TR0ZNVCkgLS10Y2wgLWwgQyAtZCAuIC9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgZWNobyAkJD8pLDApCisJCU1TR0ZNVCA6PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKKwllbmRpZgorZW5kaWYKKworUE9fVEVNUExBVEUgPSBwby9naXRrLnBvdAorQUxMX1BPRklMRVMgPSAkKHdpbGRjYXJkIHBvLyoucG8pCitBTExfTVNHRklMRVMgPSAkKHN1YnN0IC5wbywubXNnLCQoQUxMX1BPRklMRVMpKQorCitpZm5kZWYgVgorCVFVSUVUICAgICAgICAgID0gQAorCVFVSUVUX0dFTiAgICAgID0gJChRVUlFVCllY2hvICcgICAnIEdFTiAkQCAmJgorZW5kaWYKKworYWxsOjogZ2l0ay13aXNoICQoQUxMX01TR0ZJTEVTKQorCitpbnN0YWxsOjogYWxsCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCisJJChJTlNUQUxMKSAtbSA3NTUgZ2l0ay13aXNoICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJworCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChJTlNUQUxMKSAtbSA2NDQgJHAgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAmJikgdHJ1ZQorCit1bmluc3RhbGw6OgorCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChSTSkgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJy8kKG5vdGRpciAkcCkgJiYpIHRydWUKKwkkKFJNKSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScvZ2l0aworCitjbGVhbjo6CisJJChSTSkgZ2l0ay13aXNoIHBvLyoubXNnIEdJVC1UQ0xUSy1WQVJTCisKK2dpdGstd2lzaDogZ2l0ayBHSVQtVENMVEstVkFSUworCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxLDNzfF5leGVjIC4qICIkJDAifGV4ZWMgJChzdWJzdCB8LCdcfCcsJChUQ0xUS19QQVRIX1NRKSkgIiQkMCJ8JyA8Z2l0ayA+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12IC1mICRAKyAkQAorCiskKFBPX1RFTVBMQVRFKTogZ2l0aworCSQoWEdFVFRFWFQpIC1rbWMgLUxUY2wgLW8gJEAgZ2l0awordXBkYXRlLXBvOjogJChQT19URU1QTEFURSkKKwkkKGZvcmVhY2ggcCwgJChBTExfUE9GSUxFUyksIGVjaG8gVXBkYXRpbmcgJHAgOyBtc2dtZXJnZSAtVSAkcCAkKFBPX1RFTVBMQVRFKSA7ICkKKyQoQUxMX01TR0ZJTEVTKTogJS5tc2cgOiAlLnBvCisJQGVjaG8gR2VuZXJhdGluZyBjYXRhbG9nICRACisJJChNU0dGTVQpIC0tc3RhdGlzdGljcyAtLXRjbCAkPCAtbCAkKGJhc2VuYW1lICQobm90ZGlyICQ8KSkgLWQgJChkaXIgJEApCisKKy5QSE9OWTogYWxsIGluc3RhbGwgdW5pbnN0YWxsIGNsZWFuIHVwZGF0ZS1wbworLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvZ2l0ayBiL2dpdGstZ2l0L2dpdGsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWJlNDgwNQotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L2dpdGsKQEAgLTAsMCArMSwxMjY3NSBAQAorIyEvYmluL3NoCisjIFRjbCBpZ25vcmVzIHRoZSBuZXh0IGxpbmUgLSotIHRjbCAtKi0gXAorZXhlYyB3aXNoICIkMCIgLS0gIiRAIgorCisjIENvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgaXQgbWF5IGJlIHVzZWQsIGNvcGllZCwgbW9kaWZpZWQKKyMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UsCisjIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK3BhY2thZ2UgcmVxdWlyZSBUaworCitwcm9jIGhhc3dvcmt0cmVlIHt9IHsKKyAgICByZXR1cm4gW2V4cHIge1tleGVjIGdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnldID09ICJmYWxzZSIgJiYKKwkJICBbZXhlYyBnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLWdpdC1kaXJdID09ICJmYWxzZSJ9XQorfQorCitwcm9jIHJlcG9uYW1lIHt9IHsKKyAgICBnbG9iYWwgZ2l0ZGlyCisgICAgc2V0IG4gW2ZpbGUgbm9ybWFsaXplICRnaXRkaXJdCisgICAgaWYge1tzdHJpbmcgbWF0Y2ggIiovLmdpdCIgJG5dfSB7CisJc2V0IG4gW3N0cmluZyByYW5nZSAkbiAwIGVuZC01XQorICAgIH0KKyAgICByZXR1cm4gW2ZpbGUgdGFpbCAkbl0KK30KKworcHJvYyBnaXR3b3JrdHJlZSB7fSB7CisgICAgdmFyaWFibGUgX2dpdHdvcmt0cmVlCisgICAgaWYge1tpbmZvIGV4aXN0cyBfZ2l0d29ya3RyZWVdfSB7CisJcmV0dXJuICRfZ2l0d29ya3RyZWUKKyAgICB9CisgICAgIyB2MS43LjAgaW50cm9kdWNlZCAtLXNob3ctdG9wbGV2ZWwgdG8gcmV0dXJuIHRoZSBjYW5vbmljYWwgd29yay10cmVlCisgICAgaWYge1tjYXRjaCB7c2V0IF9naXR3b3JrdHJlZSBbZXhlYyBnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbF19XX0geworICAgICAgICAjIHRyeSB0byBzZXQgd29yayB0cmVlIGZyb20gZW52aXJvbm1lbnQsIGNvcmUud29ya3RyZWUgb3IgdXNlCisgICAgICAgICMgY2R1cCB0byBvYnRhaW4gYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmt0cmVlLiBJZgorICAgICAgICAjIHJ1biBmcm9tIHRoZSB0b3AsIHRoZSAuLyBwcmVmaXggZW5zdXJlcyBub3JtYWxpemUgZXhwYW5kcyBwd2QuCisgICAgICAgIGlmIHtbY2F0Y2ggeyBzZXQgX2dpdHdvcmt0cmVlICRlbnYoR0lUX1dPUktfVFJFRSkgfV19IHsKKwkgICAgY2F0Y2gge3NldCBfZ2l0d29ya3RyZWUgW2V4ZWMgZ2l0IGNvbmZpZyAtLWdldCBjb3JlLndvcmt0cmVlXX0KKwkgICAgaWYgeyRfZ2l0d29ya3RyZWUgZXEgIiJ9IHsKKwkJc2V0IF9naXR3b3JrdHJlZSBbZmlsZSBub3JtYWxpemUgLi9bZXhlYyBnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwXV0KKwkgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAkX2dpdHdvcmt0cmVlCit9CisKKyMgQSBzaW1wbGUgc2NoZWR1bGVyIGZvciBjb21wdXRlLWludGVuc2l2ZSBzdHVmZi4KKyMgVGhlIGFpbSBpcyB0byBtYWtlIHN1cmUgdGhhdCBldmVudCBoYW5kbGVycyBmb3IgR1VJIGFjdGlvbnMgY2FuCisjIHJ1biBhdCBsZWFzdCBldmVyeSA1MC0xMDAgbXMuICBVbmZvcnR1bmF0ZWx5IGZpbGVldmVudCBoYW5kbGVycyBhcmUKKyMgcnVuIGJlZm9yZSBYIGV2ZW50IGhhbmRsZXJzLCBzbyByZWFkaW5nIGZyb20gYSBmYXN0IHNvdXJjZSBjYW4KKyMgbWFrZSB0aGUgR1VJIGNvbXBsZXRlbHkgdW5yZXNwb25zaXZlLgorcHJvYyBydW4gYXJncyB7CisgICAgZ2xvYmFsIGlzb25ydW5xIHJ1bnEgY3VycnVucQorCisgICAgc2V0IHNjcmlwdCAkYXJncworICAgIGlmIHtbaW5mbyBleGlzdHMgaXNvbnJ1bnEoJHNjcmlwdCldfSByZXR1cm4KKyAgICBpZiB7JHJ1bnEgZXEge30gJiYgIVtpbmZvIGV4aXN0cyBjdXJydW5xXX0geworCWFmdGVyIGlkbGUgZG9ydW5xCisgICAgfQorICAgIGxhcHBlbmQgcnVucSBbbGlzdCB7fSAkc2NyaXB0XQorICAgIHNldCBpc29ucnVucSgkc2NyaXB0KSAxCit9CisKK3Byb2MgZmlsZXJ1biB7ZmQgc2NyaXB0fSB7CisgICAgZmlsZWV2ZW50ICRmZCByZWFkYWJsZSBbbGlzdCBmaWxlcmVhZGFibGUgJGZkICRzY3JpcHRdCit9CisKK3Byb2MgZmlsZXJlYWRhYmxlIHtmZCBzY3JpcHR9IHsKKyAgICBnbG9iYWwgcnVucSBjdXJydW5xCisKKyAgICBmaWxlZXZlbnQgJGZkIHJlYWRhYmxlIHt9CisgICAgaWYgeyRydW5xIGVxIHt9ICYmICFbaW5mbyBleGlzdHMgY3VycnVucV19IHsKKwlhZnRlciBpZGxlIGRvcnVucQorICAgIH0KKyAgICBsYXBwZW5kIHJ1bnEgW2xpc3QgJGZkICRzY3JpcHRdCit9CisKK3Byb2MgbnVrZWZpbGUge2ZkfSB7CisgICAgZ2xvYmFsIHJ1bnEKKworICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHJ1bnFdfSB7fSB7CisJaWYge1tsaW5kZXggJHJ1bnEgJGkgMF0gZXEgJGZkfSB7CisJICAgIHNldCBydW5xIFtscmVwbGFjZSAkcnVucSAkaSAkaV0KKwl9IGVsc2UgeworCSAgICBpbmNyIGkKKwl9CisgICAgfQorfQorCitwcm9jIGRvcnVucSB7fSB7CisgICAgZ2xvYmFsIGlzb25ydW5xIHJ1bnEgY3VycnVucQorCisgICAgc2V0IHRzdGFydCBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IHQwICR0c3RhcnQKKyAgICB3aGlsZSB7W2xsZW5ndGggJHJ1bnFdID4gMH0geworCXNldCBmZCBbbGluZGV4ICRydW5xIDAgMF0KKwlzZXQgc2NyaXB0IFtsaW5kZXggJHJ1bnEgMCAxXQorCXNldCBjdXJydW5xIFtsaW5kZXggJHJ1bnEgMF0KKwlzZXQgcnVucSBbbHJhbmdlICRydW5xIDEgZW5kXQorCXNldCByZXBlYXQgW2V2YWwgJHNjcmlwdF0KKwl1bnNldCBjdXJydW5xCisJc2V0IHQxIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKwlzZXQgdCBbZXhwciB7JHQxIC0gJHQwfV0KKwlpZiB7JHJlcGVhdCBuZSB7fSAmJiAkcmVwZWF0fSB7CisJICAgIGlmIHskZmQgZXEge30gfHwgJHJlcGVhdCA9PSAyfSB7CisJCSMgc2NyaXB0IHJldHVybnMgMSBpZiBpdCB3YW50cyB0byBiZSByZWFkZGVkCisJCSMgZmlsZSByZWFkZXJzIHJldHVybiAyIGlmIHRoZXkgY291bGQgZG8gbW9yZSBzdHJhaWdodCBhd2F5CisJCWxhcHBlbmQgcnVucSBbbGlzdCAkZmQgJHNjcmlwdF0KKwkgICAgfSBlbHNlIHsKKwkJZmlsZWV2ZW50ICRmZCByZWFkYWJsZSBbbGlzdCBmaWxlcmVhZGFibGUgJGZkICRzY3JpcHRdCisJICAgIH0KKwl9IGVsc2VpZiB7JGZkIGVxIHt9fSB7CisJICAgIHVuc2V0IGlzb25ydW5xKCRzY3JpcHQpCisJfQorCXNldCB0MCAkdDEKKwlpZiB7JHQxIC0gJHRzdGFydCA+PSA4MH0gYnJlYWsKKyAgICB9CisgICAgaWYgeyRydW5xIG5lIHt9fSB7CisJYWZ0ZXIgaWRsZSBkb3J1bnEKKyAgICB9Cit9CisKK3Byb2MgcmVnX2luc3RhbmNlIHtmZH0geworICAgIGdsb2JhbCBjb21tZmQgbGVmdG92ZXIgbG9naW5zdGFuY2UKKworICAgIHNldCBpIFtpbmNyIGxvZ2luc3RhbmNlXQorICAgIHNldCBjb21tZmQoJGkpICRmZAorICAgIHNldCBsZWZ0b3ZlcigkaSkge30KKyAgICByZXR1cm4gJGkKK30KKworcHJvYyB1bm1lcmdlZF9maWxlcyB7ZmlsZXN9IHsKKyAgICBnbG9iYWwgbnJfdW5tZXJnZWQKKworICAgICMgZmluZCB0aGUgbGlzdCBvZiB1bm1lcmdlZCBmaWxlcworICAgIHNldCBtbGlzdCB7fQorICAgIHNldCBucl91bm1lcmdlZCAwCisgICAgaWYge1tjYXRjaCB7CisJc2V0IGZkIFtvcGVuICJ8IGdpdCBscy1maWxlcyAtdSIgcl0KKyAgICB9IGVycl19IHsKKwlzaG93X2Vycm9yIHt9IC4gIlttYyAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6Il0gJGVyciIKKwlleGl0IDEKKyAgICB9CisgICAgd2hpbGUge1tnZXRzICRmZCBsaW5lXSA+PSAwfSB7CisJc2V0IGkgW3N0cmluZyBmaXJzdCAiXHQiICRsaW5lXQorCWlmIHskaSA8IDB9IGNvbnRpbnVlCisJc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgeyRpKzF9XSBlbmRdCisJaWYge1tsc2VhcmNoIC1leGFjdCAkbWxpc3QgJGZuYW1lXSA+PSAwfSBjb250aW51ZQorCWluY3IgbnJfdW5tZXJnZWQKKwlpZiB7JGZpbGVzIGVxIHt9IHx8IFtwYXRoX2ZpbHRlciAkZmlsZXMgJGZuYW1lXX0geworCSAgICBsYXBwZW5kIG1saXN0ICRmbmFtZQorCX0KKyAgICB9CisgICAgY2F0Y2gge2Nsb3NlICRmZH0KKyAgICByZXR1cm4gJG1saXN0Cit9CisKK3Byb2MgcGFyc2V2aWV3YXJncyB7biBhcmdsaXN0fSB7CisgICAgZ2xvYmFsIHZkYXRlbW9kZSB2bWVyZ2Vvbmx5IHZmbGFncyB2ZGZsYWdzIHZyZXZzIHZmaWx0ZXJlZCB2b3JpZ2FyZ3MgZW52CisgICAgZ2xvYmFsIHZpbmxpbmVkaWZmCisgICAgZ2xvYmFsIHdvcmRkaWZmIGdpdF92ZXJzaW9uCisKKyAgICBzZXQgdmRhdGVtb2RlKCRuKSAwCisgICAgc2V0IHZtZXJnZW9ubHkoJG4pIDAKKyAgICBzZXQgdmlubGluZWRpZmYoJG4pIDAKKyAgICBzZXQgZ2xmbGFncyB7fQorICAgIHNldCBkaWZmYXJncyB7fQorICAgIHNldCBuZXh0aXN2YWwgMAorICAgIHNldCByZXZhcmdzIHt9CisgICAgc2V0IG9yaWdhcmdzICRhcmdsaXN0CisgICAgc2V0IGFsbGtub3duIDEKKyAgICBzZXQgZmlsdGVyZWQgMAorICAgIHNldCBpIC0xCisgICAgZm9yZWFjaCBhcmcgJGFyZ2xpc3QgeworCWluY3IgaQorCWlmIHskbmV4dGlzdmFsfSB7CisJICAgIGxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIHNldCBuZXh0aXN2YWwgMAorCSAgICBjb250aW51ZQorCX0KKwlzd2l0Y2ggLWdsb2IgLS0gJGFyZyB7CisJICAgICItZCIgLQorCSAgICAiLS1kYXRlLW9yZGVyIiB7CisJCXNldCB2ZGF0ZW1vZGUoJG4pIDEKKwkJIyByZW1vdmUgZnJvbSBvcmlnYXJncyBpbiBjYXNlIHdlIGhpdCBhbiB1bmtub3duIG9wdGlvbgorCQlzZXQgb3JpZ2FyZ3MgW2xyZXBsYWNlICRvcmlnYXJncyAkaSAkaV0KKwkJaW5jciBpIC0xCisJICAgIH0KKwkgICAgIi1bcHVhYndjclJCTUNdIiAtCisJICAgICItLW5vLXJlbmFtZXMiIC0gIi0tZnVsbC1pbmRleCIgLSAiLS1iaW5hcnkiIC0gIi0tYWJicmV2PSoiIC0KKwkgICAgIi0tZmluZC1jb3BpZXMtaGFyZGVyIiAtICItbCoiIC0gIi0tZXh0LWRpZmYiIC0gIi0tbm8tZXh0LWRpZmYiIC0KKwkgICAgIi0tc3JjLXByZWZpeD0qIiAtICItLWRzdC1wcmVmaXg9KiIgLSAiLS1uby1wcmVmaXgiIC0KKwkgICAgIi1PKiIgLSAiLS10ZXh0IiAtICItLWZ1bGwtZGlmZiIgLSAiLS1pZ25vcmUtc3BhY2UtYXQtZW9sIiAtCisJICAgICItLWlnbm9yZS1zcGFjZS1jaGFuZ2UiIC0gIi1VKiIgLSAiLS11bmlmaWVkPSoiIHsKKwkJIyBUaGVzZSByZXF1ZXN0IG9yIGFmZmVjdCBkaWZmIG91dHB1dCwgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KKwkJIyBTb21lIGNvdWxkIGJlIHVzZWQgdG8gc2V0IG91ciBkZWZhdWx0cyBmb3IgZGlmZiBkaXNwbGF5LgorCQlsYXBwZW5kIGRpZmZhcmdzICRhcmcKKwkgICAgfQorCSAgICAiLS1yYXciIC0gIi0tcGF0Y2gtd2l0aC1yYXciIC0gIi0tcGF0Y2gtd2l0aC1zdGF0IiAtCisJICAgICItLW5hbWUtb25seSIgLSAiLS1uYW1lLXN0YXR1cyIgLSAiLS1jb2xvciIgLQorCSAgICAiLS1sb2ctc2l6ZSIgLSAiLS1wcmV0dHk9KiIgLSAiLS1kZWNvcmF0ZSIgLSAiLS1hYmJyZXYtY29tbWl0IiAtCisJICAgICItLWNjIiAtICIteiIgLSAiLS1oZWFkZXIiIC0gIi0tcGFyZW50cyIgLSAiLS1ib3VuZGFyeSIgLQorCSAgICAiLS1uby1jb2xvciIgLSAiLWciIC0gIi0td2Fsay1yZWZsb2dzIiAtICItLW5vLXdhbGsiIC0KKwkgICAgIi0tdGltZXN0YW1wIiAtICJyZWxhdGl2ZS1kYXRlIiAtICItLWRhdGU9KiIgLSAiLS1zdGRpbiIgLQorCSAgICAiLS1vYmplY3RzIiAtICItLW9iamVjdHMtZWRnZSIgLSAiLS1yZXZlcnNlIiB7CisJCSMgVGhlc2UgY2F1c2Ugb3VyIHBhcnNpbmcgb2YgZ2l0IGxvZydzIG91dHB1dCB0byBmYWlsLCBvciBlbHNlCisJCSMgdGhleSdyZSBvcHRpb25zIHdlIHdhbnQgdG8gc2V0IG91cnNlbHZlcywgc28gaWdub3JlIHRoZW0uCisJICAgIH0KKwkgICAgIi0tY29sb3Itd29yZHMqIiAtICItLXdvcmQtZGlmZj1jb2xvciIgeworCQkjIFRoZXNlIHRyaWdnZXIgYSB3b3JkIGRpZmYgaW4gdGhlIGNvbnNvbGUgaW50ZXJmYWNlLAorCQkjIHNvIGhlbHAgdGhlIHVzZXIgYnkgZW5hYmxpbmcgb3VyIG93biBzdXBwb3J0CisJCWlmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNy4yIl0gPj0gMH0geworCQkgICAgc2V0IHdvcmRkaWZmIFttYyAiQ29sb3Igd29yZHMiXQorCQl9CisJICAgIH0KKwkgICAgIi0td29yZC1kaWZmKiIgeworCQlpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjcuMiJdID49IDB9IHsKKwkJICAgIHNldCB3b3JkZGlmZiBbbWMgIk1hcmt1cCB3b3JkcyJdCisJCX0KKwkgICAgfQorCSAgICAiLS1zdGF0PSoiIC0gIi0tbnVtc3RhdCIgLSAiLS1zaG9ydHN0YXQiIC0gIi0tc3VtbWFyeSIgLQorCSAgICAiLS1jaGVjayIgLSAiLS1leGl0LWNvZGUiIC0gIi0tcXVpZXQiIC0gIi0tdG9wby1vcmRlciIgLQorCSAgICAiLS1mdWxsLWhpc3RvcnkiIC0gIi0tZGVuc2UiIC0gIi0tc3BhcnNlIiAtCisJICAgICItLWZvbGxvdyIgLSAiLS1sZWZ0LXJpZ2h0IiAtICItLWVuY29kaW5nPSoiIHsKKwkJIyBUaGVzZSBhcmUgaGFybWxlc3MsIGFuZCBzb21lIGFyZSBldmVuIHVzZWZ1bAorCQlsYXBwZW5kIGdsZmxhZ3MgJGFyZworCSAgICB9CisJICAgICItLWRpZmYtZmlsdGVyPSoiIC0gIi0tbm8tbWVyZ2VzIiAtICItLXVucGFja2VkIiAtCisJICAgICItLW1heC1jb3VudD0qIiAtICItLXNraXA9KiIgLSAiLS1zaW5jZT0qIiAtICItLWFmdGVyPSoiIC0KKwkgICAgIi0tdW50aWw9KiIgLSAiLS1iZWZvcmU9KiIgLSAiLS1tYXgtYWdlPSoiIC0gIi0tbWluLWFnZT0qIiAtCisJICAgICItLWF1dGhvcj0qIiAtICItLWNvbW1pdHRlcj0qIiAtICItLWdyZXA9KiIgLSAiLVtpRV0iIC0KKwkgICAgIi0tcmVtb3ZlLWVtcHR5IiAtICItLWZpcnN0LXBhcmVudCIgLSAiLS1jaGVycnktcGljayIgLQorCSAgICAiLVMqIiAtICItRyoiIC0gIi0tcGlja2F4ZS1hbGwiIC0gIi0tcGlja2F4ZS1yZWdleCIgLQorCSAgICAiLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uIiB7CisJCSMgVGhlc2UgbWVhbiB0aGF0IHdlIGdldCBhIHN1YnNldCBvZiB0aGUgY29tbWl0cworCQlzZXQgZmlsdGVyZWQgMQorCQlsYXBwZW5kIGdsZmxhZ3MgJGFyZworCSAgICB9CisJICAgICItTCoiIHsKKwkJIyBMaW5lLWxvZyB3aXRoICdzdHVjaycgYXJndW1lbnQgKHVuc3R1Y2sgZm9ybSBpcworCQkjIG5vdCBzdXBwb3J0ZWQpCisJCXNldCBmaWx0ZXJlZCAxCisJCXNldCB2aW5saW5lZGlmZigkbikgMQorCQlzZXQgYWxsa25vd24gMAorCQlsYXBwZW5kIGdsZmxhZ3MgJGFyZworCSAgICB9CisJICAgICItbiIgeworCQkjIFRoaXMgYXBwZWFycyB0byBiZSB0aGUgb25seSBvbmUgdGhhdCBoYXMgYSB2YWx1ZSBhcyBhCisJCSMgc2VwYXJhdGUgd29yZCBmb2xsb3dpbmcgaXQKKwkJc2V0IGZpbHRlcmVkIDEKKwkJc2V0IG5leHRpc3ZhbCAxCisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgIi0tbm90IiAtICItLWFsbCIgeworCQlsYXBwZW5kIHJldmFyZ3MgJGFyZworCSAgICB9CisJICAgICItLW1lcmdlIiB7CisJCXNldCB2bWVyZ2Vvbmx5KCRuKSAxCisJCSMgZ2l0IHJldi1wYXJzZSBkb2Vzbid0IHVuZGVyc3RhbmQgLS1tZXJnZQorCQlsYXBwZW5kIHJldmFyZ3MgLS1naXRrLXN5bW1ldHJpYy1kaWZmLW1hcmtlciBNRVJHRV9IRUFELi4uSEVBRAorCSAgICB9CisJICAgICItLW5vLXJlcGxhY2Utb2JqZWN0cyIgeworCQlzZXQgZW52KEdJVF9OT19SRVBMQUNFX09CSkVDVFMpICIxIgorCSAgICB9CisJICAgICItKiIgeworCQkjIE90aGVyIGZsYWcgYXJndW1lbnRzIGluY2x1ZGluZyAtPG4+CisJCWlmIHtbc3RyaW5nIGlzIGRpZ2l0IC1zdHJpY3QgW3N0cmluZyByYW5nZSAkYXJnIDEgZW5kXV19IHsKKwkJICAgIHNldCBmaWx0ZXJlZCAxCisJCX0gZWxzZSB7CisJCSAgICAjIGEgZmxhZyBhcmd1bWVudCB0aGF0IHdlIGRvbid0IHJlY29nbml6ZTsKKwkJICAgICMgdGhhdCBtZWFucyB3ZSBjYW4ndCBvcHRpbWl6ZQorCQkgICAgc2V0IGFsbGtub3duIDAKKwkJfQorCQlsYXBwZW5kIGdsZmxhZ3MgJGFyZworCSAgICB9CisJICAgIGRlZmF1bHQgeworCQkjIE5vbi1mbGFnIGFyZ3VtZW50cyBzcGVjaWZ5IGNvbW1pdHMgb3IgcmFuZ2VzIG9mIGNvbW1pdHMKKwkJaWYge1tzdHJpbmcgbWF0Y2ggIiouLi4qIiAkYXJnXX0geworCQkgICAgbGFwcGVuZCByZXZhcmdzIC0tZ2l0ay1zeW1tZXRyaWMtZGlmZi1tYXJrZXIKKwkJfQorCQlsYXBwZW5kIHJldmFyZ3MgJGFyZworCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgdmRmbGFncygkbikgJGRpZmZhcmdzCisgICAgc2V0IHZmbGFncygkbikgJGdsZmxhZ3MKKyAgICBzZXQgdnJldnMoJG4pICRyZXZhcmdzCisgICAgc2V0IHZmaWx0ZXJlZCgkbikgJGZpbHRlcmVkCisgICAgc2V0IHZvcmlnYXJncygkbikgJG9yaWdhcmdzCisgICAgcmV0dXJuICRhbGxrbm93bgorfQorCitwcm9jIHBhcnNldmlld3JldnMge3ZpZXcgcmV2c30geworICAgIGdsb2JhbCB2cG9zaWRzIHZuZWdpZHMKKworICAgIGlmIHskcmV2cyBlcSB7fX0geworCXNldCByZXZzIEhFQUQKKyAgICB9IGVsc2VpZiB7W2xzZWFyY2ggLWV4YWN0ICRyZXZzIC0tYWxsXSA+PSAwfSB7CisJbGFwcGVuZCByZXZzIEhFQUQKKyAgICB9CisgICAgaWYge1tjYXRjaCB7c2V0IGlkcyBbZXZhbCBleGVjIGdpdCByZXYtcGFyc2UgJHJldnNdfSBlcnJdfSB7CisJIyB3ZSBnZXQgc3Rkb3V0IGZvbGxvd2VkIGJ5IHN0ZGVyciBpbiAkZXJyCisJIyBmb3IgYW4gdW5rbm93biByZXYsIGdpdCByZXYtcGFyc2UgZWNob2VzIGl0IGFuZCB0aGVuIGVycm9ycyBvdXQKKwlzZXQgZXJybGluZXMgW3NwbGl0ICRlcnIgIlxuIl0KKwlzZXQgYmFkcmV2IHt9CisJZm9yIHtzZXQgbCAwfSB7JGwgPCBbbGxlbmd0aCAkZXJybGluZXNdfSB7aW5jciBsfSB7CisJICAgIHNldCBsaW5lIFtsaW5kZXggJGVycmxpbmVzICRsXQorCSAgICBpZiB7IShbc3RyaW5nIGxlbmd0aCAkbGluZV0gPT0gNDAgJiYgW3N0cmluZyBpcyB4ZGlnaXQgJGxpbmVdKX0geworCQlpZiB7W3N0cmluZyBtYXRjaCAiZmF0YWw6KiIgJGxpbmVdfSB7CisJCSAgICBpZiB7W3N0cmluZyBtYXRjaCAiZmF0YWw6IGFtYmlndW91cyBhcmd1bWVudCoiICRsaW5lXQorCQkJJiYgJGJhZHJldiBuZSB7fX0geworCQkJaWYge1tsbGVuZ3RoICRiYWRyZXZdID09IDF9IHsKKwkJCSAgICBzZXQgZXJyICJ1bmtub3duIHJldmlzaW9uICRiYWRyZXYiCisJCQl9IGVsc2UgeworCQkJICAgIHNldCBlcnIgInVua25vd24gcmV2aXNpb25zOiBbam9pbiAkYmFkcmV2ICIsICJdIgorCQkJfQorCQkgICAgfSBlbHNlIHsKKwkJCXNldCBlcnIgW2pvaW4gW2xyYW5nZSAkZXJybGluZXMgJGwgZW5kXSAiXG4iXQorCQkgICAgfQorCQkgICAgYnJlYWsKKwkJfQorCQlsYXBwZW5kIGJhZHJldiAkbGluZQorCSAgICB9CisJfQorCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiJdICRlcnIiCisJcmV0dXJuIHt9CisgICAgfQorICAgIHNldCByZXQge30KKyAgICBzZXQgcG9zIHt9CisgICAgc2V0IG5lZyB7fQorICAgIHNldCBzZG0gMAorICAgIGZvcmVhY2ggaWQgW3NwbGl0ICRpZHMgIlxuIl0geworCWlmIHskaWQgZXEgIi0tZ2l0ay1zeW1tZXRyaWMtZGlmZi1tYXJrZXIifSB7CisJICAgIHNldCBzZG0gNAorCX0gZWxzZWlmIHtbc3RyaW5nIG1hdGNoICJeKiIgJGlkXX0geworCSAgICBpZiB7JHNkbSAhPSAxfSB7CisJCWxhcHBlbmQgcmV0ICRpZAorCQlpZiB7JHNkbSA9PSAzfSB7CisJCSAgICBzZXQgc2RtIDAKKwkJfQorCSAgICB9CisJICAgIGxhcHBlbmQgbmVnIFtzdHJpbmcgcmFuZ2UgJGlkIDEgZW5kXQorCX0gZWxzZSB7CisJICAgIGlmIHskc2RtICE9IDJ9IHsKKwkJbGFwcGVuZCByZXQgJGlkCisJICAgIH0gZWxzZSB7CisJCWxzZXQgcmV0IGVuZCAkaWQuLi5bbGluZGV4ICRyZXQgZW5kXQorCSAgICB9CisJICAgIGxhcHBlbmQgcG9zICRpZAorCX0KKwlpbmNyIHNkbSAtMQorICAgIH0KKyAgICBzZXQgdnBvc2lkcygkdmlldykgJHBvcworICAgIHNldCB2bmVnaWRzKCR2aWV3KSAkbmVnCisgICAgcmV0dXJuICRyZXQKK30KKworIyBTdGFydCBvZmYgYSBnaXQgbG9nIHByb2Nlc3MgYW5kIGFycmFuZ2UgdG8gcmVhZCBpdHMgb3V0cHV0Citwcm9jIHN0YXJ0X3Jldl9saXN0IHt2aWV3fSB7CisgICAgZ2xvYmFsIHN0YXJ0bXNlY3MgY29tbWl0aWR4IHZpZXdjb21wbGV0ZSBjdXJ2aWV3CisgICAgZ2xvYmFsIHRjbGVuY29kaW5nCisgICAgZ2xvYmFsIHZpZXdhcmdzIHZpZXdhcmdzY21kIHZpZXdmaWxlcyB2ZmlsZWxpbWl0CisgICAgZ2xvYmFsIHNob3dsb2NhbGNoYW5nZXMKKyAgICBnbG9iYWwgdmlld2FjdGl2ZSB2aWV3aW5zdGFuY2VzIHZtZXJnZW9ubHkKKyAgICBnbG9iYWwgbWFpbmhlYWRpZCB2aWV3bWFpbmhlYWRpZCB2aWV3bWFpbmhlYWRpZF9vcmlnCisgICAgZ2xvYmFsIHZjYW5vcHQgdmZsYWdzIHZyZXZzIHZvcmlnYXJncworICAgIGdsb2JhbCBzaG93X25vdGVzCisKKyAgICBzZXQgc3RhcnRtc2VjcyBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IGNvbW1pdGlkeCgkdmlldykgMAorICAgICMgdGhlc2UgYXJlIHNldCB0aGlzIHdheSBmb3IgdGhlIGVycm9yIGV4aXRzCisgICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMQorICAgIHNldCB2aWV3YWN0aXZlKCR2aWV3KSAwCisgICAgdmFyY2luaXQgJHZpZXcKKworICAgIHNldCBhcmdzICR2aWV3YXJncygkdmlldykKKyAgICBpZiB7JHZpZXdhcmdzY21kKCR2aWV3KSBuZSB7fX0geworCWlmIHtbY2F0Y2ggeworCSAgICBzZXQgc3RyIFtleGVjIHNoIC1jICR2aWV3YXJnc2NtZCgkdmlldyldCisJfSBlcnJdfSB7CisJICAgIGVycm9yX3BvcHVwICJbbWMgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiXSAkZXJyIgorCSAgICByZXR1cm4gMAorCX0KKwlzZXQgYXJncyBbY29uY2F0ICRhcmdzIFtzcGxpdCAkc3RyICJcbiJdXQorICAgIH0KKyAgICBzZXQgdmNhbm9wdCgkdmlldykgW3BhcnNldmlld2FyZ3MgJHZpZXcgJGFyZ3NdCisKKyAgICBzZXQgZmlsZXMgJHZpZXdmaWxlcygkdmlldykKKyAgICBpZiB7JHZtZXJnZW9ubHkoJHZpZXcpfSB7CisJc2V0IGZpbGVzIFt1bm1lcmdlZF9maWxlcyAkZmlsZXNdCisJaWYgeyRmaWxlcyBlcSB7fX0geworCSAgICBnbG9iYWwgbnJfdW5tZXJnZWQKKwkgICAgaWYgeyRucl91bm1lcmdlZCA9PSAwfSB7CisJCWVycm9yX3BvcHVwIFttYyAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dFwKKwkJCSAgICAgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiJdCisJICAgIH0gZWxzZSB7CisJCWVycm9yX3BvcHVwIFttYyAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dFwKKwkJCSAgICAgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlIGxpbWl0LiJdCisJICAgIH0KKwkgICAgcmV0dXJuIDAKKwl9CisgICAgfQorICAgIHNldCB2ZmlsZWxpbWl0KCR2aWV3KSAkZmlsZXMKKworICAgIGlmIHskdmNhbm9wdCgkdmlldyl9IHsKKwlzZXQgcmV2cyBbcGFyc2V2aWV3cmV2cyAkdmlldyAkdnJldnMoJHZpZXcpXQorCWlmIHskcmV2cyBlcSB7fX0geworCSAgICByZXR1cm4gMAorCX0KKwlzZXQgYXJncyBbY29uY2F0ICR2ZmxhZ3MoJHZpZXcpICRyZXZzXQorICAgIH0gZWxzZSB7CisJc2V0IGFyZ3MgJHZvcmlnYXJncygkdmlldykKKyAgICB9CisKKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgZmQgW29wZW4gW2NvbmNhdCB8IGdpdCBsb2cgLS1uby1jb2xvciAteiAtLXByZXR0eT1yYXcgJHNob3dfbm90ZXMgXAorCQkJLS1wYXJlbnRzIC0tYm91bmRhcnkgJGFyZ3MgIi0tIiAkZmlsZXNdIHJdCisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6Il0gJGVyciIKKwlyZXR1cm4gMAorICAgIH0KKyAgICBzZXQgaSBbcmVnX2luc3RhbmNlICRmZF0KKyAgICBzZXQgdmlld2luc3RhbmNlcygkdmlldykgW2xpc3QgJGldCisgICAgc2V0IHZpZXdtYWluaGVhZGlkKCR2aWV3KSAkbWFpbmhlYWRpZAorICAgIHNldCB2aWV3bWFpbmhlYWRpZF9vcmlnKCR2aWV3KSAkbWFpbmhlYWRpZAorICAgIGlmIHskZmlsZXMgbmUge30gJiYgJG1haW5oZWFkaWQgbmUge319IHsKKwlnZXRfdmlld21haW5oZWFkICR2aWV3CisgICAgfQorICAgIGlmIHskc2hvd2xvY2FsY2hhbmdlcyAmJiAkdmlld21haW5oZWFkaWQoJHZpZXcpIG5lIHt9fSB7CisJaW50ZXJlc3RlZGluICR2aWV3bWFpbmhlYWRpZCgkdmlldykgZG9kaWZmaW5kZXgKKyAgICB9CisgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGxmIC1lb2ZjaGFyIHt9CisgICAgaWYgeyR0Y2xlbmNvZGluZyAhPSB7fX0geworCWZjb25maWd1cmUgJGZkIC1lbmNvZGluZyAkdGNsZW5jb2RpbmcKKyAgICB9CisgICAgZmlsZXJ1biAkZmQgW2xpc3QgZ2V0Y29tbWl0bGluZXMgJGZkICRpICR2aWV3IDBdCisgICAgbm93YnVzeSAkdmlldyBbbWMgIlJlYWRpbmciXQorICAgIHNldCB2aWV3Y29tcGxldGUoJHZpZXcpIDAKKyAgICBzZXQgdmlld2FjdGl2ZSgkdmlldykgMQorICAgIHJldHVybiAxCit9CisKK3Byb2Mgc3RvcF9pbnN0YW5jZSB7aW5zdH0geworICAgIGdsb2JhbCBjb21tZmQgbGVmdG92ZXIKKworICAgIHNldCBmZCAkY29tbWZkKCRpbnN0KQorICAgIGNhdGNoIHsKKwlzZXQgcGlkIFtwaWQgJGZkXQorCisJaWYgeyQ6OnRjbF9wbGF0Zm9ybShwbGF0Zm9ybSkgZXEge3dpbmRvd3N9fSB7CisJICAgIGV4ZWMgdGFza2tpbGwgL3BpZCAkcGlkCisJfSBlbHNlIHsKKwkgICAgZXhlYyBraWxsICRwaWQKKwl9CisgICAgfQorICAgIGNhdGNoIHtjbG9zZSAkZmR9CisgICAgbnVrZWZpbGUgJGZkCisgICAgdW5zZXQgY29tbWZkKCRpbnN0KQorICAgIHVuc2V0IGxlZnRvdmVyKCRpbnN0KQorfQorCitwcm9jIHN0b3BfYmFja2VuZHMge30geworICAgIGdsb2JhbCBjb21tZmQKKworICAgIGZvcmVhY2ggaW5zdCBbYXJyYXkgbmFtZXMgY29tbWZkXSB7CisJc3RvcF9pbnN0YW5jZSAkaW5zdAorICAgIH0KK30KKworcHJvYyBzdG9wX3Jldl9saXN0IHt2aWV3fSB7CisgICAgZ2xvYmFsIHZpZXdpbnN0YW5jZXMKKworICAgIGZvcmVhY2ggaW5zdCAkdmlld2luc3RhbmNlcygkdmlldykgeworCXN0b3BfaW5zdGFuY2UgJGluc3QKKyAgICB9CisgICAgc2V0IHZpZXdpbnN0YW5jZXMoJHZpZXcpIHt9Cit9CisKK3Byb2MgcmVzZXRfcGVuZGluZ19zZWxlY3Qge3NlbGlkfSB7CisgICAgZ2xvYmFsIHBlbmRpbmdfc2VsZWN0IG1haW5oZWFkaWQgc2VsZWN0aGVhZGlkCisKKyAgICBpZiB7JHNlbGlkIG5lIHt9fSB7CisJc2V0IHBlbmRpbmdfc2VsZWN0ICRzZWxpZAorICAgIH0gZWxzZWlmIHskc2VsZWN0aGVhZGlkIG5lIHt9fSB7CisJc2V0IHBlbmRpbmdfc2VsZWN0ICRzZWxlY3RoZWFkaWQKKyAgICB9IGVsc2UgeworCXNldCBwZW5kaW5nX3NlbGVjdCAkbWFpbmhlYWRpZAorICAgIH0KK30KKworcHJvYyBnZXRjb21taXRzIHtzZWxpZH0geworICAgIGdsb2JhbCBjYW52IGN1cnZpZXcgbmVlZF9yZWRpc3BsYXkgdmlld2FjdGl2ZQorCisgICAgaW5pdGxheW91dAorICAgIGlmIHtbc3RhcnRfcmV2X2xpc3QgJGN1cnZpZXddfSB7CisJcmVzZXRfcGVuZGluZ19zZWxlY3QgJHNlbGlkCisJc2hvd19zdGF0dXMgW21jICJSZWFkaW5nIGNvbW1pdHMuLi4iXQorCXNldCBuZWVkX3JlZGlzcGxheSAxCisgICAgfSBlbHNlIHsKKwlzaG93X3N0YXR1cyBbbWMgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiXQorICAgIH0KK30KKworcHJvYyB1cGRhdGVjb21taXRzIHt9IHsKKyAgICBnbG9iYWwgY3VydmlldyB2Y2Fub3B0IHZvcmlnYXJncyB2ZmlsZWxpbWl0IHZpZXdpbnN0YW5jZXMKKyAgICBnbG9iYWwgdmlld2FjdGl2ZSB2aWV3Y29tcGxldGUgdGNsZW5jb2RpbmcKKyAgICBnbG9iYWwgc3RhcnRtc2VjcyBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCBtYWluaGVhZGlkIHZpZXdtYWluaGVhZGlkIHZpZXdtYWluaGVhZGlkX29yaWcgcGVuZGluZ19zZWxlY3QKKyAgICBnbG9iYWwgaGFzd29ya3RyZWUKKyAgICBnbG9iYWwgdmFyY2lkIHZwb3NpZHMgdm5lZ2lkcyB2ZmxhZ3MgdnJldnMKKyAgICBnbG9iYWwgc2hvd19ub3RlcworCisgICAgc2V0IGhhc3dvcmt0cmVlIFtoYXN3b3JrdHJlZV0KKyAgICByZXJlYWRyZWZzCisgICAgc2V0IHZpZXcgJGN1cnZpZXcKKyAgICBpZiB7JG1haW5oZWFkaWQgbmUgJHZpZXdtYWluaGVhZGlkX29yaWcoJHZpZXcpfSB7CisJaWYgeyRzaG93bG9jYWxjaGFuZ2VzfSB7CisJICAgIGRvaGlkZWxvY2FsY2hhbmdlcworCX0KKwlzZXQgdmlld21haW5oZWFkaWQoJHZpZXcpICRtYWluaGVhZGlkCisJc2V0IHZpZXdtYWluaGVhZGlkX29yaWcoJHZpZXcpICRtYWluaGVhZGlkCisJaWYgeyR2ZmlsZWxpbWl0KCR2aWV3KSBuZSB7fX0geworCSAgICBnZXRfdmlld21haW5oZWFkICR2aWV3CisJfQorICAgIH0KKyAgICBpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwlkb3Nob3dsb2NhbGNoYW5nZXMKKyAgICB9CisgICAgaWYgeyR2Y2Fub3B0KCR2aWV3KX0geworCXNldCBvbGRwb3MgJHZwb3NpZHMoJHZpZXcpCisJc2V0IG9sZG5lZyAkdm5lZ2lkcygkdmlldykKKwlzZXQgcmV2cyBbcGFyc2V2aWV3cmV2cyAkdmlldyAkdnJldnMoJHZpZXcpXQorCWlmIHskcmV2cyBlcSB7fX0geworCSAgICByZXR1cm4KKwl9CisJIyBub3RlOiBnZXR0aW5nIHRoZSBkZWx0YSB3aGVuIG5lZ2F0aXZlIHJlZnMgY2hhbmdlIGlzIGhhcmQsCisJIyBhbmQgY291bGQgcmVxdWlyZSBtdWx0aXBsZSBnaXQgbG9nIGludm9jYXRpb25zLCBzbyBpbiB0aGF0CisJIyBjYXNlIHdlIGFzayBnaXQgbG9nIGZvciBhbGwgdGhlIGNvbW1pdHMgKG5vdCBqdXN0IHRoZSBkZWx0YSkKKwlpZiB7JG9sZG5lZyBlcSAkdm5lZ2lkcygkdmlldyl9IHsKKwkgICAgc2V0IG5ld3JldnMge30KKwkgICAgc2V0IG5wb3MgMAorCSAgICAjIHRha2Ugb3V0IHBvc2l0aXZlIHJlZnMgdGhhdCB3ZSBhc2tlZCBmb3IgYmVmb3JlIG9yCisJICAgICMgdGhhdCB3ZSBoYXZlIGFscmVhZHkgc2VlbgorCSAgICBmb3JlYWNoIHJldiAkcmV2cyB7CisJCWlmIHtbc3RyaW5nIGxlbmd0aCAkcmV2XSA9PSA0MH0geworCQkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkb2xkcG9zICRyZXZdIDwgMAorCQkJJiYgIVtpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZXcsJHJldildfSB7CisJCQlsYXBwZW5kIG5ld3JldnMgJHJldgorCQkJaW5jciBucG9zCisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBsYXBwZW5kICRuZXdyZXZzICRyZXYKKwkJfQorCSAgICB9CisJICAgIGlmIHskbnBvcyA9PSAwfSByZXR1cm4KKwkgICAgc2V0IHJldnMgJG5ld3JldnMKKwkgICAgc2V0IHZwb3NpZHMoJHZpZXcpIFtsc29ydCAtdW5pcXVlIFtjb25jYXQgJG9sZHBvcyAkdnBvc2lkcygkdmlldyldXQorCX0KKwlzZXQgYXJncyBbY29uY2F0ICR2ZmxhZ3MoJHZpZXcpICRyZXZzIC0tbm90ICRvbGRwb3NdCisgICAgfSBlbHNlIHsKKwlzZXQgYXJncyAkdm9yaWdhcmdzKCR2aWV3KQorICAgIH0KKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgZmQgW29wZW4gW2NvbmNhdCB8IGdpdCBsb2cgLS1uby1jb2xvciAteiAtLXByZXR0eT1yYXcgJHNob3dfbm90ZXMgXAorCQkJLS1wYXJlbnRzIC0tYm91bmRhcnkgJGFyZ3MgIi0tIiAkdmZpbGVsaW1pdCgkdmlldyldIHJdCisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6Il0gJGVyciIKKwlyZXR1cm4KKyAgICB9CisgICAgaWYgeyR2aWV3YWN0aXZlKCR2aWV3KSA9PSAwfSB7CisJc2V0IHN0YXJ0bXNlY3MgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIH0KKyAgICBzZXQgaSBbcmVnX2luc3RhbmNlICRmZF0KKyAgICBsYXBwZW5kIHZpZXdpbnN0YW5jZXMoJHZpZXcpICRpCisgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGxmIC1lb2ZjaGFyIHt9CisgICAgaWYgeyR0Y2xlbmNvZGluZyAhPSB7fX0geworCWZjb25maWd1cmUgJGZkIC1lbmNvZGluZyAkdGNsZW5jb2RpbmcKKyAgICB9CisgICAgZmlsZXJ1biAkZmQgW2xpc3QgZ2V0Y29tbWl0bGluZXMgJGZkICRpICR2aWV3IDFdCisgICAgaW5jciB2aWV3YWN0aXZlKCR2aWV3KQorICAgIHNldCB2aWV3Y29tcGxldGUoJHZpZXcpIDAKKyAgICByZXNldF9wZW5kaW5nX3NlbGVjdCB7fQorICAgIG5vd2J1c3kgJHZpZXcgW21jICJSZWFkaW5nIl0KKyAgICBpZiB7JHNob3duZWFydGFnc30geworCWdldGFsbGNvbW1pdHMKKyAgICB9Cit9CisKK3Byb2MgcmVsb2FkY29tbWl0cyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgdmlld2NvbXBsZXRlIHNlbGVjdGVkbGluZSBjdXJyZW50aWQgdGhpY2tlcmxpbmUKKyAgICBnbG9iYWwgc2hvd25lYXJ0YWdzIHRyZWVkaWZmcyBjb21taXRpbnRlcmVzdCBjYWNoZWRfY29tbWl0cm93CisgICAgZ2xvYmFsIHRhcmdldGlkIGNvbW1pdGluZm8KKworICAgIHNldCBzZWxpZCB7fQorICAgIGlmIHskc2VsZWN0ZWRsaW5lIG5lIHt9fSB7CisJc2V0IHNlbGlkICRjdXJyZW50aWQKKyAgICB9CisKKyAgICBpZiB7ISR2aWV3Y29tcGxldGUoJGN1cnZpZXcpfSB7CisJc3RvcF9yZXZfbGlzdCAkY3VydmlldworICAgIH0KKyAgICByZXNldHZhcmNzICRjdXJ2aWV3CisgICAgc2V0IHNlbGVjdGVkbGluZSB7fQorICAgIHVuc2V0IC1ub2NvbXBsYWluIGN1cnJlbnRpZAorICAgIHVuc2V0IC1ub2NvbXBsYWluIHRoaWNrZXJsaW5lCisgICAgdW5zZXQgLW5vY29tcGxhaW4gdHJlZWRpZmZzCisgICAgcmVhZHJlZnMKKyAgICBjaGFuZ2VkcmVmcworICAgIGlmIHskc2hvd25lYXJ0YWdzfSB7CisJZ2V0YWxsY29tbWl0cworICAgIH0KKyAgICBjbGVhcl9kaXNwbGF5CisgICAgdW5zZXQgLW5vY29tcGxhaW4gY29tbWl0aW5mbworICAgIHVuc2V0IC1ub2NvbXBsYWluIGNvbW1pdGludGVyZXN0CisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2NvbW1pdHJvdworICAgIHVuc2V0IC1ub2NvbXBsYWluIHRhcmdldGlkCisgICAgc2V0Y2FudnNjcm9sbAorICAgIGdldGNvbW1pdHMgJHNlbGlkCisgICAgcmV0dXJuIDAKK30KKworIyBUaGlzIG1ha2VzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcG9zaXRpdmUgaW50ZWdlciB3aGljaAorIyBzb3J0cyBhcyBhIHN0cmluZyBpbiBudW1lcmljYWwgb3JkZXIKK3Byb2Mgc3RycmVwIHtufSB7CisgICAgaWYgeyRuIDwgMTZ9IHsKKwlyZXR1cm4gW2Zvcm1hdCAiJXgiICRuXQorICAgIH0gZWxzZWlmIHskbiA8IDI1Nn0geworCXJldHVybiBbZm9ybWF0ICJ4JS4yeCIgJG5dCisgICAgfSBlbHNlaWYgeyRuIDwgNjU1MzZ9IHsKKwlyZXR1cm4gW2Zvcm1hdCAieSUuNHgiICRuXQorICAgIH0KKyAgICByZXR1cm4gW2Zvcm1hdCAieiUuOHgiICRuXQorfQorCisjIFByb2NlZHVyZXMgdXNlZCBpbiByZW9yZGVyaW5nIGNvbW1pdHMgZnJvbSBnaXQgbG9nICh3aXRob3V0CisjIC0tdG9wby1vcmRlcikgaW50byB0aGUgb3JkZXIgZm9yIGRpc3BsYXkuCisKK3Byb2MgdmFyY2luaXQge3ZpZXd9IHsKKyAgICBnbG9iYWwgdmFyY3N0YXJ0IHZ1cHB0ciB2ZG93bnB0ciB2bGVmdHB0ciB2YmFja3B0ciB2YXJjdG9rIHZhcmNyb3cKKyAgICBnbG9iYWwgdnRva21vZCB2YXJjbW9kIHZyb3dtb2QgdmFyY2l4IHZsYXN0aW5zCisKKyAgICBzZXQgdmFyY3N0YXJ0KCR2aWV3KSB7e319CisgICAgc2V0IHZ1cHB0cigkdmlldykgezB9CisgICAgc2V0IHZkb3ducHRyKCR2aWV3KSB7MH0KKyAgICBzZXQgdmxlZnRwdHIoJHZpZXcpIHswfQorICAgIHNldCB2YmFja3B0cigkdmlldykgezB9CisgICAgc2V0IHZhcmN0b2soJHZpZXcpIHt7fX0KKyAgICBzZXQgdmFyY3Jvdygkdmlldykge3t9fQorICAgIHNldCB2dG9rbW9kKCR2aWV3KSB7fQorICAgIHNldCB2YXJjbW9kKCR2aWV3KSAwCisgICAgc2V0IHZyb3dtb2QoJHZpZXcpIDAKKyAgICBzZXQgdmFyY2l4KCR2aWV3KSB7e319CisgICAgc2V0IHZsYXN0aW5zKCR2aWV3KSB7MH0KK30KKworcHJvYyByZXNldHZhcmNzIHt2aWV3fSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjY29tbWl0cyBwYXJlbnRzIGNoaWxkcmVuIHZzZWVkY291bnQgb3JkZXJ0b2sKKyAgICBnbG9iYWwgdnNob3J0aWRzCisKKyAgICBmb3JlYWNoIHZpZCBbYXJyYXkgbmFtZXMgdmFyY2lkICR2aWV3LCpdIHsKKwl1bnNldCB2YXJjaWQoJHZpZCkKKwl1bnNldCBjaGlsZHJlbigkdmlkKQorCXVuc2V0IHBhcmVudHMoJHZpZCkKKyAgICB9CisgICAgZm9yZWFjaCB2aWQgW2FycmF5IG5hbWVzIHZzaG9ydGlkcyAkdmlldywqXSB7CisJdW5zZXQgdnNob3J0aWRzKCR2aWQpCisgICAgfQorICAgICMgc29tZSBjb21taXRzIG1pZ2h0IGhhdmUgY2hpbGRyZW4gYnV0IGhhdmVuJ3QgYmVlbiBzZWVuIHlldAorICAgIGZvcmVhY2ggdmlkIFthcnJheSBuYW1lcyBjaGlsZHJlbiAkdmlldywqXSB7CisJdW5zZXQgY2hpbGRyZW4oJHZpZCkKKyAgICB9CisgICAgZm9yZWFjaCB2YSBbYXJyYXkgbmFtZXMgdmFyY2NvbW1pdHMgJHZpZXcsKl0geworCXVuc2V0IHZhcmNjb21taXRzKCR2YSkKKyAgICB9CisgICAgZm9yZWFjaCB2ZCBbYXJyYXkgbmFtZXMgdnNlZWRjb3VudCAkdmlldywqXSB7CisJdW5zZXQgdnNlZWRjb3VudCgkdmQpCisgICAgfQorICAgIHVuc2V0IC1ub2NvbXBsYWluIG9yZGVydG9rCit9CisKKyMgcmV0dXJucyBhIGxpc3Qgb2YgdGhlIGNvbW1pdHMgd2l0aCBubyBjaGlsZHJlbgorcHJvYyBzZWVkcyB7dn0geworICAgIGdsb2JhbCB2ZG93bnB0ciB2bGVmdHB0ciB2YXJjc3RhcnQKKworICAgIHNldCByZXQge30KKyAgICBzZXQgYSBbbGluZGV4ICR2ZG93bnB0cigkdikgMF0KKyAgICB3aGlsZSB7JGEgIT0gMH0geworCWxhcHBlbmQgcmV0IFtsaW5kZXggJHZhcmNzdGFydCgkdikgJGFdCisJc2V0IGEgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRhXQorICAgIH0KKyAgICByZXR1cm4gJHJldAorfQorCitwcm9jIG5ld3ZhcmMge3ZpZXcgaWR9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmN0b2sgcGFyZW50cyBjaGlsZHJlbiB2ZGF0ZW1vZGUKKyAgICBnbG9iYWwgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZhcmNyb3cgdmFyY2l4IHZhcmNzdGFydAorICAgIGdsb2JhbCBjb21taXRkYXRhIGNvbW1pdGluZm8gdnNlZWRjb3VudCB2YXJjY29tbWl0cyB2bGFzdGlucworCisgICAgc2V0IGEgW2xsZW5ndGggJHZhcmN0b2soJHZpZXcpXQorICAgIHNldCB2aWQgJHZpZXcsJGlkCisgICAgaWYge1tsbGVuZ3RoICRjaGlsZHJlbigkdmlkKV0gPT0gMCB8fCAkdmRhdGVtb2RlKCR2aWV3KX0geworCWlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV19IHsKKwkgICAgcGFyc2Vjb21taXQgJGlkICRjb21taXRkYXRhKCRpZCkgMQorCX0KKwlzZXQgY2RhdGUgW2xpbmRleCBbbGluZGV4ICRjb21taXRpbmZvKCRpZCkgNF0gMF0KKwlpZiB7IVtzdHJpbmcgaXMgaW50ZWdlciAtc3RyaWN0ICRjZGF0ZV19IHsKKwkgICAgc2V0IGNkYXRlIDAKKwl9CisJaWYgeyFbaW5mbyBleGlzdHMgdnNlZWRjb3VudCgkdmlldywkY2RhdGUpXX0geworCSAgICBzZXQgdnNlZWRjb3VudCgkdmlldywkY2RhdGUpIC0xCisJfQorCXNldCBjIFtpbmNyIHZzZWVkY291bnQoJHZpZXcsJGNkYXRlKV0KKwlzZXQgY2RhdGUgW2V4cHIgeyRjZGF0ZSBeIDB4ZmZmZmZmZmZ9XQorCXNldCB0b2sgInNbc3RycmVwICRjZGF0ZV1bc3RycmVwICRjXSIKKyAgICB9IGVsc2UgeworCXNldCB0b2sge30KKyAgICB9CisgICAgc2V0IGthIDAKKyAgICBpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2aWQpXSA+IDB9IHsKKwlzZXQga2lkIFtsaW5kZXggJGNoaWxkcmVuKCR2aWQpIGVuZF0KKwlzZXQgayAkdmFyY2lkKCR2aWV3LCRraWQpCisJaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2aWV3KSAka10gJHRva10gPiAwfSB7CisJICAgIHNldCBraSAka2lkCisJICAgIHNldCBrYSAkaworCSAgICBzZXQgdG9rIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRrXQorCX0KKyAgICB9CisgICAgaWYgeyRrYSAhPSAwfSB7CisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRwYXJlbnRzKCR2aWV3LCRraSkgJGlkXQorCXNldCBqIFtleHByIHtbbGxlbmd0aCAkcGFyZW50cygkdmlldywka2kpXSAtIDEgLSAkaX1dCisJYXBwZW5kIHRvayBbc3RycmVwICRqXQorICAgIH0KKyAgICBzZXQgYyBbbGluZGV4ICR2bGFzdGlucygkdmlldykgJGthXQorICAgIGlmIHskYyA9PSAwIHx8IFtzdHJpbmcgY29tcGFyZSAkdG9rIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRjXV0gPCAwfSB7CisJc2V0IGMgJGthCisJc2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHZpZXcpICRrYV0KKyAgICB9IGVsc2UgeworCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2aWV3KSAkY10KKyAgICB9CisgICAgd2hpbGUgeyRiICE9IDAgJiYgW3N0cmluZyBjb21wYXJlICR0b2sgW2xpbmRleCAkdmFyY3RvaygkdmlldykgJGJdXSA+PSAwfSB7CisJc2V0IGMgJGIKKwlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdmlldykgJGNdCisgICAgfQorICAgIGlmIHskYyA9PSAka2F9IHsKKwlsc2V0IHZkb3ducHRyKCR2aWV3KSAka2EgJGEKKwlsYXBwZW5kIHZiYWNrcHRyKCR2aWV3KSAwCisgICAgfSBlbHNlIHsKKwlsc2V0IHZsZWZ0cHRyKCR2aWV3KSAkYyAkYQorCWxhcHBlbmQgdmJhY2twdHIoJHZpZXcpICRjCisgICAgfQorICAgIGxzZXQgdmxhc3RpbnMoJHZpZXcpICRrYSAkYQorICAgIGxhcHBlbmQgdnVwcHRyKCR2aWV3KSAka2EKKyAgICBsYXBwZW5kIHZsZWZ0cHRyKCR2aWV3KSAkYgorICAgIGlmIHskYiAhPSAwfSB7CisJbHNldCB2YmFja3B0cigkdmlldykgJGIgJGEKKyAgICB9CisgICAgbGFwcGVuZCB2YXJjdG9rKCR2aWV3KSAkdG9rCisgICAgbGFwcGVuZCB2YXJjc3RhcnQoJHZpZXcpICRpZAorICAgIGxhcHBlbmQgdmRvd25wdHIoJHZpZXcpIDAKKyAgICBsYXBwZW5kIHZhcmNyb3coJHZpZXcpIHt9CisgICAgbGFwcGVuZCB2YXJjaXgoJHZpZXcpIHt9CisgICAgc2V0IHZhcmNjb21taXRzKCR2aWV3LCRhKSB7fQorICAgIGxhcHBlbmQgdmxhc3RpbnMoJHZpZXcpIDAKKyAgICByZXR1cm4gJGEKK30KKworcHJvYyBzcGxpdHZhcmMge3Agdn0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY3N0YXJ0IHZhcmNjb21taXRzIHZhcmN0b2sgdnRva21vZAorICAgIGdsb2JhbCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmJhY2twdHIgdmFyY2l4IHZhcmNyb3cgdmxhc3RpbnMKKworICAgIHNldCBvYSAkdmFyY2lkKCR2LCRwKQorICAgIHNldCBvdG9rIFtsaW5kZXggJHZhcmN0b2soJHYpICRvYV0KKyAgICBzZXQgYWMgJHZhcmNjb21taXRzKCR2LCRvYSkKKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZhcmNjb21taXRzKCR2LCRvYSkgJHBdCisgICAgaWYgeyRpIDw9IDB9IHJldHVybgorICAgIHNldCBuYSBbbGxlbmd0aCAkdmFyY3RvaygkdildCisgICAgIyAiJSIgc29ydHMgYmVmb3JlICIwIi4uLgorICAgIHNldCB0b2sgIiRvdG9rJVtzdHJyZXAgJGldIgorICAgIGxhcHBlbmQgdmFyY3RvaygkdikgJHRvaworICAgIGxhcHBlbmQgdmFyY3Jvdygkdikge30KKyAgICBsYXBwZW5kIHZhcmNpeCgkdikge30KKyAgICBzZXQgdmFyY2NvbW1pdHMoJHYsJG9hKSBbbHJhbmdlICRhYyAwIFtleHByIHskaSAtIDF9XV0KKyAgICBzZXQgdmFyY2NvbW1pdHMoJHYsJG5hKSBbbHJhbmdlICRhYyAkaSBlbmRdCisgICAgbGFwcGVuZCB2YXJjc3RhcnQoJHYpICRwCisgICAgZm9yZWFjaCBpZCAkdmFyY2NvbW1pdHMoJHYsJG5hKSB7CisJc2V0IHZhcmNpZCgkdiwkaWQpICRuYQorICAgIH0KKyAgICBsYXBwZW5kIHZkb3ducHRyKCR2KSBbbGluZGV4ICR2ZG93bnB0cigkdikgJG9hXQorICAgIGxhcHBlbmQgdmxhc3RpbnMoJHYpIFtsaW5kZXggJHZsYXN0aW5zKCR2KSAkb2FdCisgICAgbHNldCB2ZG93bnB0cigkdikgJG9hICRuYQorICAgIGxzZXQgdmxhc3RpbnMoJHYpICRvYSAwCisgICAgbGFwcGVuZCB2dXBwdHIoJHYpICRvYQorICAgIGxhcHBlbmQgdmxlZnRwdHIoJHYpIDAKKyAgICBsYXBwZW5kIHZiYWNrcHRyKCR2KSAwCisgICAgZm9yIHtzZXQgYiBbbGluZGV4ICR2ZG93bnB0cigkdikgJG5hXX0geyRiICE9IDB9IHtzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdikgJGJdfSB7CisJbHNldCB2dXBwdHIoJHYpICRiICRuYQorICAgIH0KKyAgICBpZiB7W3N0cmluZyBjb21wYXJlICRvdG9rICR2dG9rbW9kKCR2KV0gPD0gMH0geworCW1vZGlmeV9hcmMgJHYgJG9hCisgICAgfQorfQorCitwcm9jIHJlbnVtYmVydmFyYyB7YSB2fSB7CisgICAgZ2xvYmFsIHBhcmVudHMgY2hpbGRyZW4gdmFyY3RvayB2YXJjc3RhcnQgdmFyY2NvbW1pdHMKKyAgICBnbG9iYWwgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZsYXN0aW5zIHZhcmNpZCB2dG9rbW9kIHZkYXRlbW9kZQorCisgICAgc2V0IHQxIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgdG9kbyB7fQorICAgIHNldCBpc3JlbGF0ZWQoJGEpIDEKKyAgICBzZXQga2lkY2hhbmdlZCgkYSkgMQorICAgIHNldCBudG90IDAKKyAgICB3aGlsZSB7JGEgIT0gMH0geworCWlmIHtbaW5mbyBleGlzdHMgaXNyZWxhdGVkKCRhKV19IHsKKwkgICAgbGFwcGVuZCB0b2RvICRhCisJICAgIHNldCBpZCBbbGluZGV4ICR2YXJjY29tbWl0cygkdiwkYSkgZW5kXQorCSAgICBmb3JlYWNoIHAgJHBhcmVudHMoJHYsJGlkKSB7CisJCWlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRwKV19IHsKKwkJICAgIHNldCBpc3JlbGF0ZWQoJHZhcmNpZCgkdiwkcCkpIDEKKwkJfQorCSAgICB9CisJfQorCWluY3IgbnRvdAorCXNldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2KSAkYV0KKwlpZiB7JGIgPT0gMH0geworCSAgICB3aGlsZSB7JGEgIT0gMH0geworCQlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdikgJGFdCisJCWlmIHskYiAhPSAwfSBicmVhaworCQlzZXQgYSBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorCSAgICB9CisJfQorCXNldCBhICRiCisgICAgfQorICAgIGZvcmVhY2ggYSAkdG9kbyB7CisJaWYgeyFbaW5mbyBleGlzdHMga2lkY2hhbmdlZCgkYSldfSBjb250aW51ZQorCXNldCBpZCBbbGluZGV4ICR2YXJjc3RhcnQoJHYpICRhXQorCWlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHYsJGlkKV0gPiAxfSB7CisJICAgIHNldCBjaGlsZHJlbigkdiwkaWQpIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2XSBcCisJCQkJICAgICAgJGNoaWxkcmVuKCR2LCRpZCldCisJfQorCXNldCBvbGR0b2sgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdCisJaWYgeyEkdmRhdGVtb2RlKCR2KX0geworCSAgICBzZXQgdG9rIHt9CisJfSBlbHNlIHsKKwkgICAgc2V0IHRvayAkb2xkdG9rCisJfQorCXNldCBrYSAwCisJc2V0IGtpZCBbbGFzdF9yZWFsX2NoaWxkICR2LCRpZF0KKwlpZiB7JGtpZCBuZSB7fX0geworCSAgICBzZXQgayAkdmFyY2lkKCR2LCRraWQpCisJICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGtdICR0b2tdID4gMH0geworCQlzZXQga2kgJGtpZAorCQlzZXQga2EgJGsKKwkJc2V0IHRvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAka10KKwkgICAgfQorCX0KKwlpZiB7JGthICE9IDB9IHsKKwkgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRwYXJlbnRzKCR2LCRraSkgJGlkXQorCSAgICBzZXQgaiBbZXhwciB7W2xsZW5ndGggJHBhcmVudHMoJHYsJGtpKV0gLSAxIC0gJGl9XQorCSAgICBhcHBlbmQgdG9rIFtzdHJyZXAgJGpdCisJfQorCWlmIHskdG9rIGVxICRvbGR0b2t9IHsKKwkgICAgY29udGludWUKKwl9CisJc2V0IGlkIFtsaW5kZXggJHZhcmNjb21taXRzKCR2LCRhKSBlbmRdCisJZm9yZWFjaCBwICRwYXJlbnRzKCR2LCRpZCkgeworCSAgICBpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkcCldfSB7CisJCXNldCBraWRjaGFuZ2VkKCR2YXJjaWQoJHYsJHApKSAxCisJICAgIH0gZWxzZSB7CisJCXNldCBzb3J0a2lkcygkcCkgMQorCSAgICB9CisJfQorCWxzZXQgdmFyY3RvaygkdikgJGEgJHRvaworCXNldCBiIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisJaWYgeyRiICE9ICRrYX0geworCSAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRrYV0gJHZ0b2ttb2QoJHYpXSA8IDB9IHsKKwkJbW9kaWZ5X2FyYyAkdiAka2EKKwkgICAgfQorCSAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRiXSAkdnRva21vZCgkdildIDwgMH0geworCQltb2RpZnlfYXJjICR2ICRiCisJICAgIH0KKwkgICAgc2V0IGMgW2xpbmRleCAkdmJhY2twdHIoJHYpICRhXQorCSAgICBzZXQgZCBbbGluZGV4ICR2bGVmdHB0cigkdikgJGFdCisJICAgIGlmIHskYyA9PSAwfSB7CisJCWxzZXQgdmRvd25wdHIoJHYpICRiICRkCisJICAgIH0gZWxzZSB7CisJCWxzZXQgdmxlZnRwdHIoJHYpICRjICRkCisJICAgIH0KKwkgICAgaWYgeyRkICE9IDB9IHsKKwkJbHNldCB2YmFja3B0cigkdikgJGQgJGMKKwkgICAgfQorCSAgICBpZiB7W2xpbmRleCAkdmxhc3RpbnMoJHYpICRiXSA9PSAkYX0geworCQlsc2V0IHZsYXN0aW5zKCR2KSAkYiAkYworCSAgICB9CisJICAgIGxzZXQgdnVwcHRyKCR2KSAkYSAka2EKKwkgICAgc2V0IGMgW2xpbmRleCAkdmxhc3RpbnMoJHYpICRrYV0KKwkgICAgaWYgeyRjID09IDAgfHwgXAorCQkgICAgW3N0cmluZyBjb21wYXJlICR0b2sgW2xpbmRleCAkdmFyY3RvaygkdikgJGNdXSA8IDB9IHsKKwkJc2V0IGMgJGthCisJCXNldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2KSAka2FdCisJICAgIH0gZWxzZSB7CisJCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkY10KKwkgICAgfQorCSAgICB3aGlsZSB7JGIgIT0gMCAmJiBcCisJCSAgICAgIFtzdHJpbmcgY29tcGFyZSAkdG9rIFtsaW5kZXggJHZhcmN0b2soJHYpICRiXV0gPj0gMH0geworCQlzZXQgYyAkYgorCQlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdikgJGNdCisJICAgIH0KKwkgICAgaWYgeyRjID09ICRrYX0geworIAkJbHNldCB2ZG93bnB0cigkdikgJGthICRhCisJCWxzZXQgdmJhY2twdHIoJHYpICRhIDAKKwkgICAgfSBlbHNlIHsKKwkJbHNldCB2bGVmdHB0cigkdikgJGMgJGEKKwkJbHNldCB2YmFja3B0cigkdikgJGEgJGMKKwkgICAgfQorCSAgICBsc2V0IHZsZWZ0cHRyKCR2KSAkYSAkYgorCSAgICBpZiB7JGIgIT0gMH0geworCQlsc2V0IHZiYWNrcHRyKCR2KSAkYiAkYQorCSAgICB9CisJICAgIGxzZXQgdmxhc3RpbnMoJHYpICRrYSAkYQorCX0KKyAgICB9CisgICAgZm9yZWFjaCBpZCBbYXJyYXkgbmFtZXMgc29ydGtpZHNdIHsKKwlpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2LCRpZCldID4gMX0geworCSAgICBzZXQgY2hpbGRyZW4oJHYsJGlkKSBbbHNvcnQgLWNvbW1hbmQgW2xpc3QgdnRva2NtcCAkdl0gXAorCQkJCSAgICAgICRjaGlsZHJlbigkdiwkaWQpXQorCX0KKyAgICB9CisgICAgc2V0IHQyIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICAjcHV0cyAicmVudW1iZXJ2YXJjIGRpZCBbbGxlbmd0aCAkdG9kb10gb2YgJG50b3QgYXJjcyBpbiBbZXhwciB7JHQyLSR0MX1dbXMiCit9CisKKyMgRml4IHVwIHRoZSBncmFwaCBhZnRlciB3ZSBoYXZlIGZvdW5kIG91dCB0aGF0IGluIHZpZXcgJHYsCisjICRwIChhIGNvbW1pdCB0aGF0IHdlIGhhdmUgYWxyZWFkeSBzZWVuKSBpcyBhY3R1YWxseSB0aGUgcGFyZW50CisjIG9mIHRoZSBsYXN0IGNvbW1pdCBpbiBhcmMgJGEuCitwcm9jIGZpeF9yZXZlcnNhbCB7cCBhIHZ9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNzdGFydCB2YXJjdG9rIHZ1cHB0cgorCisgICAgc2V0IHBhICR2YXJjaWQoJHYsJHApCisgICAgaWYgeyRwIG5lIFtsaW5kZXggJHZhcmNzdGFydCgkdikgJHBhXX0geworCXNwbGl0dmFyYyAkcCAkdgorCXNldCBwYSAkdmFyY2lkKCR2LCRwKQorICAgIH0KKyAgICAjIHNlZWRzIGFsd2F5cyBuZWVkIHRvIGJlIHJlbnVtYmVyZWQKKyAgICBpZiB7W2xpbmRleCAkdnVwcHRyKCR2KSAkcGFdID09IDAgfHwKKwlbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdIFwKKwkgICAgIFtsaW5kZXggJHZhcmN0b2soJHYpICRwYV1dID4gMH0geworCXJlbnVtYmVydmFyYyAkcGEgJHYKKyAgICB9Cit9CisKK3Byb2MgaW5zZXJ0cm93IHtpZCBwIHZ9IHsKKyAgICBnbG9iYWwgY21pdGxpc3RlZCBjaGlsZHJlbiBwYXJlbnRzIHZhcmNpZCB2YXJjdG9rIHZ0b2ttb2QKKyAgICBnbG9iYWwgdmFyY2NvbW1pdHMgb3JkZXJ0b2sgY29tbWl0aWR4IG51bWNvbW1pdHMgY3VydmlldworICAgIGdsb2JhbCB0YXJnZXRpZCB0YXJnZXRyb3cgdnNob3J0aWRzCisKKyAgICByZWFkY29tbWl0ICRpZAorICAgIHNldCB2aWQgJHYsJGlkCisgICAgc2V0IGNtaXRsaXN0ZWQoJHZpZCkgMQorICAgIHNldCBjaGlsZHJlbigkdmlkKSB7fQorICAgIHNldCBwYXJlbnRzKCR2aWQpIFtsaXN0ICRwXQorICAgIHNldCBhIFtuZXd2YXJjICR2ICRpZF0KKyAgICBzZXQgdmFyY2lkKCR2aWQpICRhCisgICAgbGFwcGVuZCB2c2hvcnRpZHMoJHYsW3N0cmluZyByYW5nZSAkaWQgMCAzXSkgJGlkCisgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0gJHZ0b2ttb2QoJHYpXSA8IDB9IHsKKwltb2RpZnlfYXJjICR2ICRhCisgICAgfQorICAgIGxhcHBlbmQgdmFyY2NvbW1pdHMoJHYsJGEpICRpZAorICAgIHNldCB2cCAkdiwkcAorICAgIGlmIHtbbGxlbmd0aCBbbGFwcGVuZCBjaGlsZHJlbigkdnApICRpZF1dID4gMX0geworCXNldCBjaGlsZHJlbigkdnApIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2XSAkY2hpbGRyZW4oJHZwKV0KKwl1bnNldCAtbm9jb21wbGFpbiBvcmRlcnRvaworICAgIH0KKyAgICBmaXhfcmV2ZXJzYWwgJHAgJGEgJHYKKyAgICBpbmNyIGNvbW1pdGlkeCgkdikKKyAgICBpZiB7JHYgPT0gJGN1cnZpZXd9IHsKKwlzZXQgbnVtY29tbWl0cyAkY29tbWl0aWR4KCR2KQorCXNldGNhbnZzY3JvbGwKKwlpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCSAgICBpZiB7IVtjb21lc19iZWZvcmUgJHRhcmdldGlkICRwXX0geworCQlpbmNyIHRhcmdldHJvdworCSAgICB9CisJfQorICAgIH0KK30KKworcHJvYyBpbnNlcnRmYWtlcm93IHtpZCBwfSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjY29tbWl0cyBwYXJlbnRzIGNoaWxkcmVuIGNtaXRsaXN0ZWQKKyAgICBnbG9iYWwgY29tbWl0aWR4IHZhcmN0b2sgdnRva21vZCB0YXJnZXRpZCB0YXJnZXRyb3cgY3VydmlldyBudW1jb21taXRzCisKKyAgICBzZXQgdiAkY3VydmlldworICAgIHNldCBhICR2YXJjaWQoJHYsJHApCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2YXJjY29tbWl0cygkdiwkYSkgJHBdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHM6IGluc2VydGZha2Vyb3cgY2FuJ3QgZmluZCBbc2hvcnRpZHMgJHBdIG9uIGFyYyAkYSIKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGNoaWxkcmVuKCR2LCRpZCkge30KKyAgICBzZXQgcGFyZW50cygkdiwkaWQpIFtsaXN0ICRwXQorICAgIHNldCB2YXJjaWQoJHYsJGlkKSAkYQorICAgIGxhcHBlbmQgY2hpbGRyZW4oJHYsJHApICRpZAorICAgIHNldCBjbWl0bGlzdGVkKCR2LCRpZCkgMQorICAgIHNldCBudW1jb21taXRzIFtpbmNyIGNvbW1pdGlkeCgkdildCisgICAgIyBub3RlIHdlIGRlbGliZXJhdGVseSBkb24ndCB1cGRhdGUgdmFyY3N0YXJ0KCR2KSBldmVuIGlmICRpID09IDAKKyAgICBzZXQgdmFyY2NvbW1pdHMoJHYsJGEpIFtsaW5zZXJ0ICR2YXJjY29tbWl0cygkdiwkYSkgJGkgJGlkXQorICAgIG1vZGlmeV9hcmMgJHYgJGEgJGkKKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCWlmIHshW2NvbWVzX2JlZm9yZSAkdGFyZ2V0aWQgJHBdfSB7CisJICAgIGluY3IgdGFyZ2V0cm93CisJfQorICAgIH0KKyAgICBzZXRjYW52c2Nyb2xsCisgICAgZHJhd3Zpc2libGUKK30KKworcHJvYyByZW1vdmVmYWtlcm93IHtpZH0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY2NvbW1pdHMgcGFyZW50cyBjaGlsZHJlbiBjb21taXRpZHgKKyAgICBnbG9iYWwgdmFyY3RvayB2dG9rbW9kIGNtaXRsaXN0ZWQgY3VycmVudGlkIHNlbGVjdGVkbGluZQorICAgIGdsb2JhbCB0YXJnZXRpZCBjdXJ2aWV3IG51bWNvbW1pdHMKKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgaWYge1tsbGVuZ3RoICRwYXJlbnRzKCR2LCRpZCldICE9IDF9IHsKKwlwdXRzICJvb3BzOiByZW1vdmVmYWtlcm93IFtzaG9ydGlkcyAkaWRdIGhhcyBbbGxlbmd0aCAkcGFyZW50cygkdiwkaWQpXSBwYXJlbnRzIgorCXJldHVybgorICAgIH0KKyAgICBzZXQgcCBbbGluZGV4ICRwYXJlbnRzKCR2LCRpZCkgMF0KKyAgICBzZXQgYSAkdmFyY2lkKCR2LCRpZCkKKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZhcmNjb21taXRzKCR2LCRhKSAkaWRdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHM6IHJlbW92ZWZha2Vyb3cgY2FuJ3QgZmluZCBbc2hvcnRpZHMgJGlkXSBvbiBhcmMgJGEiCisJcmV0dXJuCisgICAgfQorICAgIHVuc2V0IHZhcmNpZCgkdiwkaWQpCisgICAgc2V0IHZhcmNjb21taXRzKCR2LCRhKSBbbHJlcGxhY2UgJHZhcmNjb21taXRzKCR2LCRhKSAkaSAkaV0KKyAgICB1bnNldCBwYXJlbnRzKCR2LCRpZCkKKyAgICB1bnNldCBjaGlsZHJlbigkdiwkaWQpCisgICAgdW5zZXQgY21pdGxpc3RlZCgkdiwkaWQpCisgICAgc2V0IG51bWNvbW1pdHMgW2luY3IgY29tbWl0aWR4KCR2KSAtMV0KKyAgICBzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGNoaWxkcmVuKCR2LCRwKSAkaWRdCisgICAgaWYgeyRqID49IDB9IHsKKwlzZXQgY2hpbGRyZW4oJHYsJHApIFtscmVwbGFjZSAkY2hpbGRyZW4oJHYsJHApICRqICRqXQorICAgIH0KKyAgICBtb2RpZnlfYXJjICR2ICRhICRpCisgICAgaWYge1tpbmZvIGV4aXN0IGN1cnJlbnRpZF0gJiYgJGlkIGVxICRjdXJyZW50aWR9IHsKKwl1bnNldCBjdXJyZW50aWQKKwlzZXQgc2VsZWN0ZWRsaW5lIHt9CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGFyZ2V0aWRdICYmICR0YXJnZXRpZCBlcSAkaWR9IHsKKwlzZXQgdGFyZ2V0aWQgJHAKKyAgICB9CisgICAgc2V0Y2FudnNjcm9sbAorICAgIGRyYXd2aXNpYmxlCit9CisKK3Byb2MgcmVhbF9jaGlsZHJlbiB7dnB9IHsKKyAgICBnbG9iYWwgY2hpbGRyZW4gbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBraWRzIHt9CisgICAgZm9yZWFjaCBpZCAkY2hpbGRyZW4oJHZwKSB7CisJaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0geworCSAgICBsYXBwZW5kIGtpZHMgJGlkCisJfQorICAgIH0KKyAgICByZXR1cm4gJGtpZHMKK30KKworcHJvYyBmaXJzdF9yZWFsX2NoaWxkIHt2cH0geworICAgIGdsb2JhbCBjaGlsZHJlbiBudWxsaWQgbnVsbGlkMgorCisgICAgZm9yZWFjaCBpZCAkY2hpbGRyZW4oJHZwKSB7CisJaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0geworCSAgICByZXR1cm4gJGlkCisJfQorICAgIH0KKyAgICByZXR1cm4ge30KK30KKworcHJvYyBsYXN0X3JlYWxfY2hpbGQge3ZwfSB7CisgICAgZ2xvYmFsIGNoaWxkcmVuIG51bGxpZCBudWxsaWQyCisKKyAgICBzZXQga2lkcyAkY2hpbGRyZW4oJHZwKQorICAgIGZvciB7c2V0IGkgW2xsZW5ndGggJGtpZHNdfSB7W2luY3IgaSAtMV0gPj0gMH0ge30geworCXNldCBpZCBbbGluZGV4ICRraWRzICRpXQorCWlmIHskaWQgbmUgJG51bGxpZCAmJiAkaWQgbmUgJG51bGxpZDJ9IHsKKwkgICAgcmV0dXJuICRpZAorCX0KKyAgICB9CisgICAgcmV0dXJuIHt9Cit9CisKK3Byb2MgdnRva2NtcCB7diBhIGJ9IHsKKyAgICBnbG9iYWwgdmFyY3RvayB2YXJjaWQKKworICAgIHJldHVybiBbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJHZhcmNpZCgkdiwkYSldIFwKKwkJW2xpbmRleCAkdmFyY3RvaygkdikgJHZhcmNpZCgkdiwkYildXQorfQorCisjIFRoaXMgYXNzdW1lcyB0aGF0IGlmIGxpbSBpcyBub3QgZ2l2ZW4sIHRoZSBjYWxsZXIgaGFzIGNoZWNrZWQgdGhhdAorIyBhcmMgYSdzIHRva2VuIGlzIGxlc3MgdGhhbiAkdnRva21vZCgkdikKK3Byb2MgbW9kaWZ5X2FyYyB7diBhIHtsaW0ge319fSB7CisgICAgZ2xvYmFsIHZhcmN0b2sgdnRva21vZCB2YXJjbW9kIHZhcmNyb3cgdnVwcHRyIGN1cnZpZXcgdnJvd21vZCB2YXJjY29tbWl0cworCisgICAgaWYgeyRsaW0gbmUge319IHsKKwlzZXQgYyBbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdICR2dG9rbW9kKCR2KV0KKwlpZiB7JGMgPiAwfSByZXR1cm4KKwlpZiB7JGMgPT0gMH0geworCSAgICBzZXQgciBbbGluZGV4ICR2YXJjcm93KCR2KSAkYV0KKwkgICAgaWYgeyRyIG5lIHt9ICYmICR2cm93bW9kKCR2KSA8PSAkciArICRsaW19IHJldHVybgorCX0KKyAgICB9CisgICAgc2V0IHZ0b2ttb2QoJHYpIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXQorICAgIHNldCB2YXJjbW9kKCR2KSAkYQorICAgIGlmIHskdiA9PSAkY3Vydmlld30geworCXdoaWxlIHskYSAhPSAwICYmIFtsaW5kZXggJHZhcmNyb3coJHYpICRhXSBlcSB7fX0geworCSAgICBzZXQgYSBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorCSAgICBzZXQgbGltIHt9CisJfQorCXNldCByIDAKKwlpZiB7JGEgIT0gMH0geworCSAgICBpZiB7JGxpbSBlcSB7fX0geworCQlzZXQgbGltIFtsbGVuZ3RoICR2YXJjY29tbWl0cygkdiwkYSldCisJICAgIH0KKwkgICAgc2V0IHIgW2V4cHIge1tsaW5kZXggJHZhcmNyb3coJHYpICRhXSArICRsaW19XQorCX0KKwlzZXQgdnJvd21vZCgkdikgJHIKKwl1bmRvbGF5b3V0ICRyCisgICAgfQorfQorCitwcm9jIHVwZGF0ZV9hcmNyb3dzIHt2fSB7CisgICAgZ2xvYmFsIHZ0b2ttb2QgdmFyY21vZCB2cm93bW9kIHZhcmNyb3cgY29tbWl0aWR4IGN1cnJlbnRpZCBzZWxlY3RlZGxpbmUKKyAgICBnbG9iYWwgdmFyY2lkIHZyb3dudW0gdmFyY29yZGVyIHZhcmNpeCB2YXJjY29tbWl0cworICAgIGdsb2JhbCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmFyY3RvaworICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdCBjdXJ2aWV3IGNhY2hlZF9jb21taXRyb3cKKworICAgIGlmIHskdnJvd21vZCgkdikgPT0gJGNvbW1pdGlkeCgkdil9IHJldHVybgorICAgIGlmIHskdiA9PSAkY3Vydmlld30geworCWlmIHtbbGxlbmd0aCAkZGlzcGxheW9yZGVyXSA+ICR2cm93bW9kKCR2KX0geworCSAgICBzZXQgZGlzcGxheW9yZGVyIFtscmFuZ2UgJGRpc3BsYXlvcmRlciAwIFtleHByIHskdnJvd21vZCgkdikgLSAxfV1dCisJICAgIHNldCBwYXJlbnRsaXN0IFtscmFuZ2UgJHBhcmVudGxpc3QgMCBbZXhwciB7JHZyb3dtb2QoJHYpIC0gMX1dXQorCX0KKwl1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfY29tbWl0cm93CisgICAgfQorICAgIHNldCBuYXJjdG90IFtleHByIHtbbGxlbmd0aCAkdmFyY3RvaygkdildIC0gMX1dCisgICAgc2V0IGEgJHZhcmNtb2QoJHYpCisgICAgd2hpbGUgeyRhICE9IDAgJiYgW2xpbmRleCAkdmFyY2l4KCR2KSAkYV0gZXEge319IHsKKwkjIGdvIHVwIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgc29tZXRoaW5nIHRoYXQgaGFzIGEgcm93IG51bWJlciwKKwkjIG9yIHdlIGdldCB0byBhIHNlZWQKKwlzZXQgYSBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorICAgIH0KKyAgICBpZiB7JGEgPT0gMH0geworCXNldCBhIFtsaW5kZXggJHZkb3ducHRyKCR2KSAwXQorCWlmIHskYSA9PSAwfSByZXR1cm4KKwlzZXQgdnJvd251bSgkdikgezB9CisJc2V0IHZhcmNvcmRlcigkdikgW2xpc3QgJGFdCisJbHNldCB2YXJjaXgoJHYpICRhIDAKKwlsc2V0IHZhcmNyb3coJHYpICRhIDAKKwlzZXQgYXJjbiAwCisJc2V0IHJvdyAwCisgICAgfSBlbHNlIHsKKwlzZXQgYXJjbiBbbGluZGV4ICR2YXJjaXgoJHYpICRhXQorCWlmIHtbbGxlbmd0aCAkdnJvd251bSgkdildID4gJGFyY24gKyAxfSB7CisJICAgIHNldCB2cm93bnVtKCR2KSBbbHJhbmdlICR2cm93bnVtKCR2KSAwICRhcmNuXQorCSAgICBzZXQgdmFyY29yZGVyKCR2KSBbbHJhbmdlICR2YXJjb3JkZXIoJHYpIDAgJGFyY25dCisJfQorCXNldCByb3cgW2xpbmRleCAkdmFyY3JvdygkdikgJGFdCisgICAgfQorICAgIHdoaWxlIHsxfSB7CisJc2V0IHAgJGEKKwlpbmNyIHJvdyBbbGxlbmd0aCAkdmFyY2NvbW1pdHMoJHYsJGEpXQorCSMgZ28gZG93biBpZiBwb3NzaWJsZQorCXNldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2KSAkYV0KKwlpZiB7JGIgPT0gMH0geworCSAgICAjIGlmIG5vdCwgZ28gbGVmdCwgb3IgZ28gdXAgdW50aWwgd2UgY2FuIGdvIGxlZnQKKwkgICAgd2hpbGUgeyRhICE9IDB9IHsKKwkJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRhXQorCQlpZiB7JGIgIT0gMH0gYnJlYWsKKwkJc2V0IGEgW2xpbmRleCAkdnVwcHRyKCR2KSAkYV0KKwkgICAgfQorCSAgICBpZiB7JGEgPT0gMH0gYnJlYWsKKwl9CisJc2V0IGEgJGIKKwlpbmNyIGFyY24KKwlsYXBwZW5kIHZyb3dudW0oJHYpICRyb3cKKwlsYXBwZW5kIHZhcmNvcmRlcigkdikgJGEKKwlsc2V0IHZhcmNpeCgkdikgJGEgJGFyY24KKwlsc2V0IHZhcmNyb3coJHYpICRhICRyb3cKKyAgICB9CisgICAgc2V0IHZ0b2ttb2QoJHYpIFtsaW5kZXggJHZhcmN0b2soJHYpICRwXQorICAgIHNldCB2YXJjbW9kKCR2KSAkcAorICAgIHNldCB2cm93bW9kKCR2KSAkcm93CisgICAgaWYge1tpbmZvIGV4aXN0cyBjdXJyZW50aWRdfSB7CisJc2V0IHNlbGVjdGVkbGluZSBbcm93b2Zjb21taXQgJGN1cnJlbnRpZF0KKyAgICB9Cit9CisKKyMgVGVzdCB3aGV0aGVyIHZpZXcgJHYgY29udGFpbnMgY29tbWl0ICRpZAorcHJvYyBjb21taXRpbnZpZXcge2lkIHZ9IHsKKyAgICBnbG9iYWwgdmFyY2lkCisKKyAgICByZXR1cm4gW2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkaWQpXQorfQorCisjIFJldHVybiB0aGUgcm93IG51bWJlciBmb3IgY29tbWl0ICRpZCBpbiB0aGUgY3VycmVudCB2aWV3Citwcm9jIHJvd29mY29tbWl0IHtpZH0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY2NvbW1pdHMgdmFyY3JvdyBjdXJ2aWV3IGNhY2hlZF9jb21taXRyb3cKKyAgICBnbG9iYWwgdmFyY3RvayB2dG9rbW9kCisKKyAgICBzZXQgdiAkY3VydmlldworICAgIGlmIHshW2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkaWQpXX0geworCXB1dHMgIm9vcHMgcm93b2Zjb21taXQgbm8gYXJjIGZvciBbc2hvcnRpZHMgJGlkXSIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgc2V0IGEgJHZhcmNpZCgkdiwkaWQpCisgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0gJHZ0b2ttb2QoJHYpXSA+PSAwfSB7CisJdXBkYXRlX2FyY3Jvd3MgJHYKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBjYWNoZWRfY29tbWl0cm93KCRpZCldfSB7CisJcmV0dXJuICRjYWNoZWRfY29tbWl0cm93KCRpZCkKKyAgICB9CisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2YXJjY29tbWl0cygkdiwkYSkgJGlkXQorICAgIGlmIHskaSA8IDB9IHsKKwlwdXRzICJvb3BzIGRpZG4ndCBmaW5kIGNvbW1pdCBbc2hvcnRpZHMgJGlkXSBpbiBhcmMgJGEiCisJcmV0dXJuIHt9CisgICAgfQorICAgIGluY3IgaSBbbGluZGV4ICR2YXJjcm93KCR2KSAkYV0KKyAgICBzZXQgY2FjaGVkX2NvbW1pdHJvdygkaWQpICRpCisgICAgcmV0dXJuICRpCit9CisKKyMgUmV0dXJucyAxIGlmIGEgaXMgb24gYW4gZWFybGllciByb3cgdGhhbiBiLCBvdGhlcndpc2UgMAorcHJvYyBjb21lc19iZWZvcmUge2EgYn0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY3RvayBjdXJ2aWV3CisKKyAgICBzZXQgdiAkY3VydmlldworICAgIGlmIHskYSBlcSAkYiB8fCAhW2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkYSldIHx8IFwKKwkgICAgIVtpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJGIpXX0geworCXJldHVybiAwCisgICAgfQorICAgIGlmIHskdmFyY2lkKCR2LCRhKSAhPSAkdmFyY2lkKCR2LCRiKX0geworCXJldHVybiBbZXhwciB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICR2YXJjaWQoJHYsJGEpXSBcCisJCQkgICBbbGluZGV4ICR2YXJjdG9rKCR2KSAkdmFyY2lkKCR2LCRiKV1dIDwgMH1dCisgICAgfQorICAgIHJldHVybiBbZXhwciB7W3Jvd29mY29tbWl0ICRhXSA8IFtyb3dvZmNvbW1pdCAkYl19XQorfQorCitwcm9jIGJzZWFyY2gge2wgZWx0fSB7CisgICAgaWYge1tsbGVuZ3RoICRsXSA9PSAwIHx8ICRlbHQgPD0gW2xpbmRleCAkbCAwXX0geworCXJldHVybiAwCisgICAgfQorICAgIHNldCBsbyAwCisgICAgc2V0IGhpIFtsbGVuZ3RoICRsXQorICAgIHdoaWxlIHskaGkgLSAkbG8gPiAxfSB7CisJc2V0IG1pZCBbZXhwciB7aW50KCgkbG8gKyAkaGkpIC8gMil9XQorCXNldCB0IFtsaW5kZXggJGwgJG1pZF0KKwlpZiB7JGVsdCA8ICR0fSB7CisJICAgIHNldCBoaSAkbWlkCisJfSBlbHNlaWYgeyRlbHQgPiAkdH0geworCSAgICBzZXQgbG8gJG1pZAorCX0gZWxzZSB7CisJICAgIHJldHVybiAkbWlkCisJfQorICAgIH0KKyAgICByZXR1cm4gJGxvCit9CisKKyMgTWFrZSBzdXJlIHJvd3MgJHN0YXJ0Li4kZW5kLTEgYXJlIHZhbGlkIGluIGRpc3BsYXlvcmRlciBhbmQgcGFyZW50bGlzdAorcHJvYyBtYWtlX2Rpc3BvcmRlciB7c3RhcnQgZW5kfSB7CisgICAgZ2xvYmFsIHZyb3dudW0gY3VydmlldyBjb21taXRpZHggZGlzcGxheW9yZGVyIHBhcmVudGxpc3QKKyAgICBnbG9iYWwgdmFyY2NvbW1pdHMgdmFyY29yZGVyIHBhcmVudHMgdnJvd21vZCB2YXJjcm93CisgICAgZ2xvYmFsIGRfdmFsaWRfc3RhcnQgZF92YWxpZF9lbmQKKworICAgIGlmIHskZW5kID4gJHZyb3dtb2QoJGN1cnZpZXcpfSB7CisJdXBkYXRlX2FyY3Jvd3MgJGN1cnZpZXcKKyAgICB9CisgICAgc2V0IGFpIFtic2VhcmNoICR2cm93bnVtKCRjdXJ2aWV3KSAkc3RhcnRdCisgICAgc2V0IHN0YXJ0IFtsaW5kZXggJHZyb3dudW0oJGN1cnZpZXcpICRhaV0KKyAgICBzZXQgbmFyYyBbbGxlbmd0aCAkdnJvd251bSgkY3VydmlldyldCisgICAgZm9yIHtzZXQgciAkc3RhcnR9IHskYWkgPCAkbmFyYyAmJiAkciA8ICRlbmR9IHtpbmNyIGFpfSB7CisJc2V0IGEgW2xpbmRleCAkdmFyY29yZGVyKCRjdXJ2aWV3KSAkYWldCisJc2V0IGwgW2xsZW5ndGggJGRpc3BsYXlvcmRlcl0KKwlzZXQgYWwgW2xsZW5ndGggJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKV0KKwlpZiB7JGwgPCAkciArICRhbH0geworCSAgICBpZiB7JGwgPCAkcn0geworCQlzZXQgcGFkIFtudGltZXMgW2V4cHIgeyRyIC0gJGx9XSB7fV0KKwkJc2V0IGRpc3BsYXlvcmRlciBbY29uY2F0ICRkaXNwbGF5b3JkZXIgJHBhZF0KKwkJc2V0IHBhcmVudGxpc3QgW2NvbmNhdCAkcGFyZW50bGlzdCAkcGFkXQorCSAgICB9IGVsc2VpZiB7JGwgPiAkcn0geworCQlzZXQgZGlzcGxheW9yZGVyIFtscmFuZ2UgJGRpc3BsYXlvcmRlciAwIFtleHByIHskciAtIDF9XV0KKwkJc2V0IHBhcmVudGxpc3QgW2xyYW5nZSAkcGFyZW50bGlzdCAwIFtleHByIHskciAtIDF9XV0KKwkgICAgfQorCSAgICBmb3JlYWNoIGlkICR2YXJjY29tbWl0cygkY3VydmlldywkYSkgeworCQlsYXBwZW5kIGRpc3BsYXlvcmRlciAkaWQKKwkJbGFwcGVuZCBwYXJlbnRsaXN0ICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCkKKwkgICAgfQorCX0gZWxzZWlmIHtbbGluZGV4ICRkaXNwbGF5b3JkZXIgW2V4cHIgeyRyICsgJGFsIC0gMX1dXSBlcSB7fX0geworCSAgICBzZXQgaSAkcgorCSAgICBmb3JlYWNoIGlkICR2YXJjY29tbWl0cygkY3VydmlldywkYSkgeworCQlsc2V0IGRpc3BsYXlvcmRlciAkaSAkaWQKKwkJbHNldCBwYXJlbnRsaXN0ICRpICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCkKKwkJaW5jciBpCisJICAgIH0KKwl9CisJaW5jciByICRhbAorICAgIH0KK30KKworcHJvYyBjb21taXRvbnJvdyB7cm93fSB7CisgICAgZ2xvYmFsIGRpc3BsYXlvcmRlcgorCisgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorICAgIGlmIHskaWQgZXEge319IHsKKwltYWtlX2Rpc3BvcmRlciAkcm93IFtleHByIHskcm93ICsgMX1dCisJc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorICAgIH0KKyAgICByZXR1cm4gJGlkCit9CisKK3Byb2MgY2xvc2V2YXJjcyB7dn0geworICAgIGdsb2JhbCB2YXJjdG9rIHZhcmNjb21taXRzIHZhcmNpZCBwYXJlbnRzIGNoaWxkcmVuCisgICAgZ2xvYmFsIGNtaXRsaXN0ZWQgY29tbWl0aWR4IHZ0b2ttb2QgY3VydmlldyBudW1jb21taXRzCisKKyAgICBzZXQgbWlzc2luZ19wYXJlbnRzIDAKKyAgICBzZXQgc2NyaXB0cyB7fQorICAgIHNldCBuYXJjcyBbbGxlbmd0aCAkdmFyY3RvaygkdildCisgICAgZm9yIHtzZXQgYSAxfSB7JGEgPCAkbmFyY3N9IHtpbmNyIGF9IHsKKwlzZXQgaWQgW2xpbmRleCAkdmFyY2NvbW1pdHMoJHYsJGEpIGVuZF0KKwlmb3JlYWNoIHAgJHBhcmVudHMoJHYsJGlkKSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRwKV19IGNvbnRpbnVlCisJICAgICMgYWRkIHAgYXMgYSBuZXcgY29tbWl0CisJICAgIGluY3IgbWlzc2luZ19wYXJlbnRzCisJICAgIHNldCBjbWl0bGlzdGVkKCR2LCRwKSAwCisJICAgIHNldCBwYXJlbnRzKCR2LCRwKSB7fQorCSAgICBpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2LCRwKV0gPT0gMSAmJgorCQlbbGxlbmd0aCAkcGFyZW50cygkdiwkaWQpXSA9PSAxfSB7CisJCXNldCBiICRhCisJICAgIH0gZWxzZSB7CisJCXNldCBiIFtuZXd2YXJjICR2ICRwXQorCSAgICB9CisJICAgIHNldCB2YXJjaWQoJHYsJHApICRiCisJICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGJdICR2dG9rbW9kKCR2KV0gPCAwfSB7CisJCW1vZGlmeV9hcmMgJHYgJGIKKwkgICAgfQorCSAgICBsYXBwZW5kIHZhcmNjb21taXRzKCR2LCRiKSAkcAorCSAgICBpbmNyIGNvbW1pdGlkeCgkdikKKwkgICAgaWYgeyR2ID09ICRjdXJ2aWV3fSB7CisJCXNldCBudW1jb21taXRzICRjb21taXRpZHgoJHYpCisJICAgIH0KKwkgICAgc2V0IHNjcmlwdHMgW2NoZWNrX2ludGVyZXN0ICRwICRzY3JpcHRzXQorCX0KKyAgICB9CisgICAgaWYgeyRtaXNzaW5nX3BhcmVudHMgPiAwfSB7CisJZm9yZWFjaCBzICRzY3JpcHRzIHsKKwkgICAgZXZhbCAkcworCX0KKyAgICB9Cit9CisKKyMgVXNlICRyd2lkIGFzIGEgc3Vic3RpdHV0ZSBmb3IgJGlkLCBpLmUuIHJlcGFyZW50ICRpZCdzIGNoaWxkcmVuIHRvICRyd2lkCisjIEFzc3VtZXMgd2UgYWxyZWFkeSBoYXZlIGFuIGFyYyBmb3IgJHJ3aWQuCitwcm9jIHJld3JpdGVfY29tbWl0IHt2IGlkIHJ3aWR9IHsKKyAgICBnbG9iYWwgY2hpbGRyZW4gcGFyZW50cyB2YXJjaWQgdmFyY3RvayB2dG9rbW9kIHZhcmNjb21taXRzCisKKyAgICBmb3JlYWNoIGNoICRjaGlsZHJlbigkdiwkaWQpIHsKKwkjIG1ha2UgJHJ3aWQgYmUgJGNoJ3MgcGFyZW50IGluIHBsYWNlIG9mICRpZAorCXNldCBpIFtsc2VhcmNoIC1leGFjdCAkcGFyZW50cygkdiwkY2gpICRpZF0KKwlpZiB7JGkgPCAwfSB7CisJICAgIHB1dHMgIm9vcHMgcmV3cml0ZV9jb21taXQgZGlkbid0IGZpbmQgJGlkIGluIHBhcmVudCBsaXN0IGZvciAkY2giCisJfQorCXNldCBwYXJlbnRzKCR2LCRjaCkgW2xyZXBsYWNlICRwYXJlbnRzKCR2LCRjaCkgJGkgJGkgJHJ3aWRdCisJIyBhZGQgJGNoIHRvICRyd2lkJ3MgY2hpbGRyZW4gYW5kIHNvcnQgdGhlIGxpc3QgaWYgbmVjZXNzYXJ5CisJaWYge1tsbGVuZ3RoIFtsYXBwZW5kIGNoaWxkcmVuKCR2LCRyd2lkKSAkY2hdXSA+IDF9IHsKKwkgICAgc2V0IGNoaWxkcmVuKCR2LCRyd2lkKSBbbHNvcnQgLWNvbW1hbmQgW2xpc3QgdnRva2NtcCAkdl0gXAorCQkJCQkkY2hpbGRyZW4oJHYsJHJ3aWQpXQorCX0KKwkjIGZpeCB0aGUgZ3JhcGggYWZ0ZXIgam9pbmluZyAkaWQgdG8gJHJ3aWQKKwlzZXQgYSAkdmFyY2lkKCR2LCRjaCkKKwlmaXhfcmV2ZXJzYWwgJHJ3aWQgJGEgJHYKKwkjIHBhcmVudGxpc3QgaXMgd3JvbmcgZm9yIHRoZSBsYXN0IGVsZW1lbnQgb2YgYXJjICRhCisJIyBldmVuIGlmIGRpc3BsYXlvcmRlciBpcyByaWdodCwgaGVuY2UgdGhlIDNyZCBhcmcgaGVyZQorCW1vZGlmeV9hcmMgJHYgJGEgW2V4cHIge1tsbGVuZ3RoICR2YXJjY29tbWl0cygkdiwkYSldIC0gMX1dCisgICAgfQorfQorCisjIE1lY2hhbmlzbSBmb3IgcmVnaXN0ZXJpbmcgYSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkIHdoZW4gd2UgY29tZQorIyBhY3Jvc3MgYSBwYXJ0aWN1bGFyIGNvbW1pdC4gIFRvIGhhbmRsZSB0aGUgY2FzZSB3aGVuIG9ubHkgdGhlCisjIHByZWZpeCBvZiB0aGUgY29tbWl0IGlzIGtub3duLCB0aGUgY29tbWl0aW50ZXJlc3QgYXJyYXkgaXMgbm93CisjIGluZGV4ZWQgYnkgdGhlIGZpcnN0IDQgY2hhcmFjdGVycyBvZiB0aGUgSUQuICBFYWNoIGVsZW1lbnQgaXMgYQorIyBsaXN0IG9mIGlkLCBjbWQgcGFpcnMuCitwcm9jIGludGVyZXN0ZWRpbiB7aWQgY21kfSB7CisgICAgZ2xvYmFsIGNvbW1pdGludGVyZXN0CisKKyAgICBsYXBwZW5kIGNvbW1pdGludGVyZXN0KFtzdHJpbmcgcmFuZ2UgJGlkIDAgM10pICRpZCAkY21kCit9CisKK3Byb2MgY2hlY2tfaW50ZXJlc3Qge2lkIHNjcmlwdHN9IHsKKyAgICBnbG9iYWwgY29tbWl0aW50ZXJlc3QKKworICAgIHNldCBwcmVmaXggW3N0cmluZyByYW5nZSAkaWQgMCAzXQorICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0aW50ZXJlc3QoJHByZWZpeCldfSB7CisJc2V0IG5ld2xpc3Qge30KKwlmb3JlYWNoIHtpIHNjcmlwdH0gJGNvbW1pdGludGVyZXN0KCRwcmVmaXgpIHsKKwkgICAgaWYge1tzdHJpbmcgbWF0Y2ggIiRpKiIgJGlkXX0geworCQlsYXBwZW5kIHNjcmlwdHMgW3N0cmluZyBtYXAgW2xpc3QgIiVJIiAkaWQgIiVQIiAkaV0gJHNjcmlwdF0KKwkgICAgfSBlbHNlIHsKKwkJbGFwcGVuZCBuZXdsaXN0ICRpICRzY3JpcHQKKwkgICAgfQorCX0KKwlpZiB7JG5ld2xpc3QgbmUge319IHsKKwkgICAgc2V0IGNvbW1pdGludGVyZXN0KCRwcmVmaXgpICRuZXdsaXN0CisJfSBlbHNlIHsKKwkgICAgdW5zZXQgY29tbWl0aW50ZXJlc3QoJHByZWZpeCkKKwl9CisgICAgfQorICAgIHJldHVybiAkc2NyaXB0cworfQorCitwcm9jIGdldGNvbW1pdGxpbmVzIHtmZCBpbnN0IHZpZXcgdXBkYXRpbmd9ICB7CisgICAgZ2xvYmFsIGNtaXRsaXN0ZWQgbGVmdG92ZXIKKyAgICBnbG9iYWwgY29tbWl0aWR4IGNvbW1pdGRhdGEgdmRhdGVtb2RlCisgICAgZ2xvYmFsIHBhcmVudHMgY2hpbGRyZW4gY3VydmlldyBobHZpZXcKKyAgICBnbG9iYWwgaWRwZW5kaW5nIG9yZGVydG9rCisgICAgZ2xvYmFsIHZhcmNjb21taXRzIHZhcmNpZCB2YXJjdG9rIHZ0b2ttb2QgdmZpbGVsaW1pdCB2c2hvcnRpZHMKKworICAgIHNldCBzdHVmZiBbcmVhZCAkZmQgNTAwMDAwXQorICAgICMgZ2l0IGxvZyBkb2Vzbid0IHRlcm1pbmF0ZSB0aGUgbGFzdCBjb21taXQgd2l0aCBhIG51bGwuLi4KKyAgICBpZiB7JHN0dWZmID09IHt9ICYmICRsZWZ0b3ZlcigkaW5zdCkgbmUge30gJiYgW2VvZiAkZmRdfSB7CisJc2V0IHN0dWZmICJcMCIKKyAgICB9CisgICAgaWYgeyRzdHVmZiA9PSB7fX0geworCWlmIHshW2VvZiAkZmRdfSB7CisJICAgIHJldHVybiAxCisJfQorCWdsb2JhbCBjb21tZmQgdmlld2NvbXBsZXRlIHZpZXdhY3RpdmUgdmlld25hbWUKKwlnbG9iYWwgdmlld2luc3RhbmNlcworCXVuc2V0IGNvbW1mZCgkaW5zdCkKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZpZXdpbnN0YW5jZXMoJHZpZXcpICRpbnN0XQorCWlmIHskaSA+PSAwfSB7CisJICAgIHNldCB2aWV3aW5zdGFuY2VzKCR2aWV3KSBbbHJlcGxhY2UgJHZpZXdpbnN0YW5jZXMoJHZpZXcpICRpICRpXQorCX0KKwkjIHNldCBpdCBibG9ja2luZyBzbyB3ZSB3YWl0IGZvciB0aGUgcHJvY2VzcyB0byB0ZXJtaW5hdGUKKwlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMQorCWlmIHtbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXX0geworCSAgICBzZXQgZnYge30KKwkgICAgaWYgeyR2aWV3ICE9ICRjdXJ2aWV3fSB7CisJCXNldCBmdiAiIGZvciB0aGUgXCIkdmlld25hbWUoJHZpZXcpXCIgdmlldyIKKwkgICAgfQorCSAgICBpZiB7W3N0cmluZyByYW5nZSAkZXJyIDAgNF0gPT0gInVzYWdlIn0geworCQlzZXQgZXJyICJHaXRrOiBlcnJvciByZWFkaW5nIGNvbW1pdHMkZnY6XAorCQkJYmFkIGFyZ3VtZW50cyB0byBnaXQgbG9nLiIKKwkJaWYgeyR2aWV3bmFtZSgkdmlldykgZXEgW21jICJDb21tYW5kIGxpbmUiXX0geworCQkgICAgYXBwZW5kIGVyciBcCisJCQkiICAoTm90ZTogYXJndW1lbnRzIHRvIGdpdGsgYXJlIHBhc3NlZCB0byBnaXQgbG9nXAorCQkJIHRvIGFsbG93IHNlbGVjdGlvbiBvZiBjb21taXRzIHRvIGJlIGRpc3BsYXllZC4pIgorCQl9CisJICAgIH0gZWxzZSB7CisJCXNldCBlcnIgIkVycm9yIHJlYWRpbmcgY29tbWl0cyRmdjogJGVyciIKKwkgICAgfQorCSAgICBlcnJvcl9wb3B1cCAkZXJyCisJfQorCWlmIHtbaW5jciB2aWV3YWN0aXZlKCR2aWV3KSAtMV0gPD0gMH0geworCSAgICBzZXQgdmlld2NvbXBsZXRlKCR2aWV3KSAxCisJICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSBzZWVuIGFueSBpZHMgbGlzdGVkIGFzIHBhcmVudHMgdGhhdCBoYXZlbid0CisJICAgICMgYXBwZWFyZWQgaW4gdGhlIGxpc3QKKwkgICAgY2xvc2V2YXJjcyAkdmlldworCSAgICBub3RidXN5ICR2aWV3CisJfQorCWlmIHskdmlldyA9PSAkY3Vydmlld30geworCSAgICBydW4gY2hld2NvbW1pdHMKKwl9CisJcmV0dXJuIDAKKyAgICB9CisgICAgc2V0IHN0YXJ0IDAKKyAgICBzZXQgZ290c29tZSAwCisgICAgc2V0IHNjcmlwdHMge30KKyAgICB3aGlsZSAxIHsKKwlzZXQgaSBbc3RyaW5nIGZpcnN0ICJcMCIgJHN0dWZmICRzdGFydF0KKwlpZiB7JGkgPCAwfSB7CisJICAgIGFwcGVuZCBsZWZ0b3ZlcigkaW5zdCkgW3N0cmluZyByYW5nZSAkc3R1ZmYgJHN0YXJ0IGVuZF0KKwkgICAgYnJlYWsKKwl9CisJaWYgeyRzdGFydCA9PSAwfSB7CisJICAgIHNldCBjbWl0ICRsZWZ0b3ZlcigkaW5zdCkKKwkgICAgYXBwZW5kIGNtaXQgW3N0cmluZyByYW5nZSAkc3R1ZmYgMCBbZXhwciB7JGkgLSAxfV1dCisJICAgIHNldCBsZWZ0b3ZlcigkaW5zdCkge30KKwl9IGVsc2UgeworCSAgICBzZXQgY21pdCBbc3RyaW5nIHJhbmdlICRzdHVmZiAkc3RhcnQgW2V4cHIgeyRpIC0gMX1dXQorCX0KKwlzZXQgc3RhcnQgW2V4cHIgeyRpICsgMX1dCisJc2V0IGogW3N0cmluZyBmaXJzdCAiXG4iICRjbWl0XQorCXNldCBvayAwCisJc2V0IGxpc3RlZCAxCisJaWYgeyRqID49IDAgJiYgW3N0cmluZyBtYXRjaCAiY29tbWl0ICoiICRjbWl0XX0geworCSAgICBzZXQgaWRzIFtzdHJpbmcgcmFuZ2UgJGNtaXQgNyBbZXhwciB7JGogLSAxfV1dCisJICAgIGlmIHtbc3RyaW5nIG1hdGNoIHtbLV48Pl0qfSAkaWRzXX0geworCQlzd2l0Y2ggLS0gW3N0cmluZyBpbmRleCAkaWRzIDBdIHsKKwkJICAgICItIiB7c2V0IGxpc3RlZCAwfQorCQkgICAgIl4iIHtzZXQgbGlzdGVkIDJ9CisJCSAgICAiPCIge3NldCBsaXN0ZWQgM30KKwkJICAgICI+IiB7c2V0IGxpc3RlZCA0fQorCQl9CisJCXNldCBpZHMgW3N0cmluZyByYW5nZSAkaWRzIDEgZW5kXQorCSAgICB9CisJICAgIHNldCBvayAxCisJICAgIGZvcmVhY2ggaWQgJGlkcyB7CisJCWlmIHtbc3RyaW5nIGxlbmd0aCAkaWRdICE9IDQwfSB7CisJCSAgICBzZXQgb2sgMAorCQkgICAgYnJlYWsKKwkJfQorCSAgICB9CisJfQorCWlmIHshJG9rfSB7CisJICAgIHNldCBzaG9ydGNtaXQgJGNtaXQKKwkgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRzaG9ydGNtaXRdID4gODB9IHsKKwkJc2V0IHNob3J0Y21pdCAiW3N0cmluZyByYW5nZSAkc2hvcnRjbWl0IDAgODBdLi4uIgorCSAgICB9CisJICAgIGVycm9yX3BvcHVwICJbbWMgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiJdIHskc2hvcnRjbWl0fSIKKwkgICAgZXhpdCAxCisJfQorCXNldCBpZCBbbGluZGV4ICRpZHMgMF0KKwlzZXQgdmlkICR2aWV3LCRpZAorCisJbGFwcGVuZCB2c2hvcnRpZHMoJHZpZXcsW3N0cmluZyByYW5nZSAkaWQgMCAzXSkgJGlkCisKKwlpZiB7ISRsaXN0ZWQgJiYgJHVwZGF0aW5nICYmICFbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWQpXSAmJgorCSAgICAkdmZpbGVsaW1pdCgkdmlldykgbmUge319IHsKKwkgICAgIyBnaXQgbG9nIGRvZXNuJ3QgcmV3cml0ZSBwYXJlbnRzIGZvciB1bmxpc3RlZCBjb21taXRzCisJICAgICMgd2hlbiBkb2luZyBwYXRoIGxpbWl0aW5nLCBzbyB3b3JrIGFyb3VuZCB0aGF0IGhlcmUKKwkgICAgIyBieSB3b3JraW5nIG91dCB0aGUgcmV3cml0dGVuIHBhcmVudCB3aXRoIGdpdCByZXYtbGlzdAorCSAgICAjIGFuZCBpZiB3ZSBhbHJlYWR5IGtub3cgYWJvdXQgaXQsIHVzaW5nIHRoZSByZXdyaXR0ZW4KKwkgICAgIyBwYXJlbnQgYXMgYSBzdWJzdGl0dXRlIHBhcmVudCBmb3IgJGlkJ3MgY2hpbGRyZW4uCisJICAgIGlmIHshW2NhdGNoIHsKKwkJc2V0IHJ3aWQgW2V4ZWMgZ2l0IHJldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tbWF4LWNvdW50PTEgXAorCQkJICAgICAgJGlkIC0tICR2ZmlsZWxpbWl0KCR2aWV3KV0KKwkgICAgfV19IHsKKwkJaWYgeyRyd2lkIG5lIHt9ICYmIFtpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZXcsJHJ3aWQpXX0geworCQkgICAgIyB1c2UgJHJ3aWQgaW4gcGxhY2Ugb2YgJGlkCisJCSAgICByZXdyaXRlX2NvbW1pdCAkdmlldyAkaWQgJHJ3aWQKKwkJICAgIGNvbnRpbnVlCisJCX0KKwkgICAgfQorCX0KKworCXNldCBhIDAKKwlpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkdmlkKV19IHsKKwkgICAgaWYgeyRjbWl0bGlzdGVkKCR2aWQpIHx8ICEkbGlzdGVkfSBjb250aW51ZQorCSAgICBzZXQgYSAkdmFyY2lkKCR2aWQpCisJfQorCWlmIHskbGlzdGVkfSB7CisJICAgIHNldCBvbGRzIFtscmFuZ2UgJGlkcyAxIGVuZF0KKwl9IGVsc2UgeworCSAgICBzZXQgb2xkcyB7fQorCX0KKwlzZXQgY29tbWl0ZGF0YSgkaWQpIFtzdHJpbmcgcmFuZ2UgJGNtaXQgW2V4cHIgeyRqICsgMX1dIGVuZF0KKwlzZXQgY21pdGxpc3RlZCgkdmlkKSAkbGlzdGVkCisJc2V0IHBhcmVudHMoJHZpZCkgJG9sZHMKKwlpZiB7IVtpbmZvIGV4aXN0cyBjaGlsZHJlbigkdmlkKV19IHsKKwkgICAgc2V0IGNoaWxkcmVuKCR2aWQpIHt9CisJfSBlbHNlaWYgeyRhID09IDAgJiYgW2xsZW5ndGggJGNoaWxkcmVuKCR2aWQpXSA9PSAxfSB7CisJICAgIHNldCBrIFtsaW5kZXggJGNoaWxkcmVuKCR2aWQpIDBdCisJICAgIGlmIHtbbGxlbmd0aCAkcGFyZW50cygkdmlldywkayldID09IDEgJiYKKwkJKCEkdmRhdGVtb2RlKCR2aWV3KSB8fAorCQkgJHZhcmNpZCgkdmlldywkaykgPT0gW2xsZW5ndGggJHZhcmN0b2soJHZpZXcpXSAtIDEpfSB7CisJCXNldCBhICR2YXJjaWQoJHZpZXcsJGspCisJICAgIH0KKwl9CisJaWYgeyRhID09IDB9IHsKKwkgICAgIyBuZXcgYXJjCisJICAgIHNldCBhIFtuZXd2YXJjICR2aWV3ICRpZF0KKwl9CisJaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2aWV3KSAkYV0gJHZ0b2ttb2QoJHZpZXcpXSA8IDB9IHsKKwkgICAgbW9kaWZ5X2FyYyAkdmlldyAkYQorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZCldfSB7CisJICAgIHNldCB2YXJjaWQoJHZpZCkgJGEKKwkgICAgbGFwcGVuZCB2YXJjY29tbWl0cygkdmlldywkYSkgJGlkCisJICAgIGluY3IgY29tbWl0aWR4KCR2aWV3KQorCX0KKworCXNldCBpIDAKKwlmb3JlYWNoIHAgJG9sZHMgeworCSAgICBpZiB7JGkgPT0gMCB8fCBbbHNlYXJjaCAtZXhhY3QgJG9sZHMgJHBdID49ICRpfSB7CisJCXNldCB2cCAkdmlldywkcAorCQlpZiB7W2xsZW5ndGggW2xhcHBlbmQgY2hpbGRyZW4oJHZwKSAkaWRdXSA+IDEgJiYKKwkJICAgIFt2dG9rY21wICR2aWV3IFtsaW5kZXggJGNoaWxkcmVuKCR2cCkgZW5kLTFdICRpZF0gPiAwfSB7CisJCSAgICBzZXQgY2hpbGRyZW4oJHZwKSBbbHNvcnQgLWNvbW1hbmQgW2xpc3QgdnRva2NtcCAkdmlld10gXAorCQkJCQkgICAkY2hpbGRyZW4oJHZwKV0KKwkJICAgIHVuc2V0IC1ub2NvbXBsYWluIG9yZGVydG9rCisJCX0KKwkJaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZXcsJHApXX0geworCQkgICAgZml4X3JldmVyc2FsICRwICRhICR2aWV3CisJCX0KKwkgICAgfQorCSAgICBpbmNyIGkKKwl9CisKKwlzZXQgc2NyaXB0cyBbY2hlY2tfaW50ZXJlc3QgJGlkICRzY3JpcHRzXQorCXNldCBnb3Rzb21lIDEKKyAgICB9CisgICAgaWYgeyRnb3Rzb21lfSB7CisJZ2xvYmFsIG51bWNvbW1pdHMgaGx2aWV3CisKKwlpZiB7JHZpZXcgPT0gJGN1cnZpZXd9IHsKKwkgICAgc2V0IG51bWNvbW1pdHMgJGNvbW1pdGlkeCgkdmlldykKKwkgICAgcnVuIGNoZXdjb21taXRzCisJfQorCWlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAkdmlldyA9PSAkaGx2aWV3fSB7CisJICAgICMgd2UgbmV2ZXIgYWN0dWFsbHkgZ2V0IGhlcmUuLi4KKwkgICAgcnVuIHZoaWdobGlnaHRtb3JlCisJfQorCWZvcmVhY2ggcyAkc2NyaXB0cyB7CisJICAgIGV2YWwgJHMKKwl9CisgICAgfQorICAgIHJldHVybiAyCit9CisKK3Byb2MgY2hld2NvbW1pdHMge30geworICAgIGdsb2JhbCBjdXJ2aWV3IGhsdmlldyB2aWV3Y29tcGxldGUKKyAgICBnbG9iYWwgcGVuZGluZ19zZWxlY3QKKworICAgIGxheW91dG1vcmUKKyAgICBpZiB7JHZpZXdjb21wbGV0ZSgkY3Vydmlldyl9IHsKKwlnbG9iYWwgY29tbWl0aWR4IHZhcmN0b2sKKwlnbG9iYWwgbnVtY29tbWl0cyBzdGFydG1zZWNzCisKKwlpZiB7W2luZm8gZXhpc3RzIHBlbmRpbmdfc2VsZWN0XX0geworCSAgICB1cGRhdGUKKwkgICAgcmVzZXRfcGVuZGluZ19zZWxlY3Qge30KKworCSAgICBpZiB7W2NvbW1pdGludmlldyAkcGVuZGluZ19zZWxlY3QgJGN1cnZpZXddfSB7CisJCXNlbGVjdGxpbmUgW3Jvd29mY29tbWl0ICRwZW5kaW5nX3NlbGVjdF0gMQorCSAgICB9IGVsc2UgeworCQlzZXQgcm93IFtmaXJzdF9yZWFsX3Jvd10KKwkJc2VsZWN0bGluZSAkcm93IDEKKwkgICAgfQorCX0KKwlpZiB7JGNvbW1pdGlkeCgkY3VydmlldykgPiAwfSB7CisJICAgICNzZXQgbXMgW2V4cHIge1tjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10gLSAkc3RhcnRtc2Vjc31dCisJICAgICNwdXRzICJvdmVyYWxsICRtcyBtcyBmb3IgJG51bWNvbW1pdHMgY29tbWl0cyIKKwkgICAgI3B1dHMgIltsbGVuZ3RoICR2YXJjdG9rKCR2aWV3KV0gYXJjcywgJGNvbW1pdGlkeCgkdmlldykgY29tbWl0cyIKKwl9IGVsc2UgeworCSAgICBzaG93X3N0YXR1cyBbbWMgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiXQorCX0KKwlub3RidXN5IGxheW91dAorICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIGRvX3JlYWRjb21taXQge2lkfSB7CisgICAgZ2xvYmFsIHRjbGVuY29kaW5nCisKKyAgICAjIEludm9rZSBnaXQtbG9nIHRvIGhhbmRsZSBhdXRvbWF0aWMgZW5jb2RpbmcgY29udmVyc2lvbgorICAgIHNldCBmZCBbb3BlbiBbY29uY2F0IHwgZ2l0IGxvZyAtLW5vLWNvbG9yIC0tcHJldHR5PXJhdyAtMSAkaWRdIHJdCisgICAgIyBSZWFkIHRoZSByZXN1bHRzIHVzaW5nIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcKKyAgICBmY29uZmlndXJlICRmZCAtdHJhbnNsYXRpb24gbGYgLWVvZmNoYXIge30KKyAgICBpZiB7JHRjbGVuY29kaW5nICE9IHt9fSB7CisJZmNvbmZpZ3VyZSAkZmQgLWVuY29kaW5nICR0Y2xlbmNvZGluZworICAgIH0KKyAgICBzZXQgY29udGVudHMgW3JlYWQgJGZkXQorICAgIGNsb3NlICRmZAorICAgICMgUmVtb3ZlIHRoZSBoZWFkaW5nIGxpbmUKKyAgICByZWdzdWIge15jb21taXQgWzAtOWEtZl0rXG59ICRjb250ZW50cyB7fSBjb250ZW50cworCisgICAgcmV0dXJuICRjb250ZW50cworfQorCitwcm9jIHJlYWRjb21taXQge2lkfSB7CisgICAgaWYge1tjYXRjaCB7c2V0IGNvbnRlbnRzIFtkb19yZWFkY29tbWl0ICRpZF19XX0gcmV0dXJuCisgICAgcGFyc2Vjb21taXQgJGlkICRjb250ZW50cyAxCit9CisKK3Byb2MgcGFyc2Vjb21taXQge2lkIGNvbnRlbnRzIGxpc3RlZH0geworICAgIGdsb2JhbCBjb21taXRpbmZvCisKKyAgICBzZXQgaW5oZHIgMQorICAgIHNldCBjb21tZW50IHt9CisgICAgc2V0IGhlYWRsaW5lIHt9CisgICAgc2V0IGF1bmFtZSB7fQorICAgIHNldCBhdWRhdGUge30KKyAgICBzZXQgY29tbmFtZSB7fQorICAgIHNldCBjb21kYXRlIHt9CisgICAgc2V0IGhkcmVuZCBbc3RyaW5nIGZpcnN0ICJcblxuIiAkY29udGVudHNdCisgICAgaWYgeyRoZHJlbmQgPCAwfSB7CisJIyBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uCisJc2V0IGhkcmVuZCBbc3RyaW5nIGxlbmd0aCAkY29udGVudHNdCisgICAgfQorICAgIHNldCBoZWFkZXIgW3N0cmluZyByYW5nZSAkY29udGVudHMgMCBbZXhwciB7JGhkcmVuZCAtIDF9XV0KKyAgICBzZXQgY29tbWVudCBbc3RyaW5nIHJhbmdlICRjb250ZW50cyBbZXhwciB7JGhkcmVuZCArIDJ9XSBlbmRdCisgICAgZm9yZWFjaCBsaW5lIFtzcGxpdCAkaGVhZGVyICJcbiJdIHsKKwlzZXQgbGluZSBbc3BsaXQgJGxpbmUgIiAiXQorCXNldCB0YWcgW2xpbmRleCAkbGluZSAwXQorCWlmIHskdGFnID09ICJhdXRob3IifSB7CisJICAgIHNldCBhdWRhdGUgW2xyYW5nZSAkbGluZSBlbmQtMSBlbmRdCisJICAgIHNldCBhdW5hbWUgW2pvaW4gW2xyYW5nZSAkbGluZSAxIGVuZC0yXSAiICJdCisJfSBlbHNlaWYgeyR0YWcgPT0gImNvbW1pdHRlciJ9IHsKKwkgICAgc2V0IGNvbWRhdGUgW2xyYW5nZSAkbGluZSBlbmQtMSBlbmRdCisJICAgIHNldCBjb21uYW1lIFtqb2luIFtscmFuZ2UgJGxpbmUgMSBlbmQtMl0gIiAiXQorCX0KKyAgICB9CisgICAgc2V0IGhlYWRsaW5lIHt9CisgICAgIyB0YWtlIHRoZSBmaXJzdCBub24tYmxhbmsgbGluZSBvZiB0aGUgY29tbWVudCBhcyB0aGUgaGVhZGxpbmUKKyAgICBzZXQgaGVhZGxpbmUgW3N0cmluZyB0cmltbGVmdCAkY29tbWVudF0KKyAgICBzZXQgaSBbc3RyaW5nIGZpcnN0ICJcbiIgJGhlYWRsaW5lXQorICAgIGlmIHskaSA+PSAwfSB7CisJc2V0IGhlYWRsaW5lIFtzdHJpbmcgcmFuZ2UgJGhlYWRsaW5lIDAgJGldCisgICAgfQorICAgIHNldCBoZWFkbGluZSBbc3RyaW5nIHRyaW1yaWdodCAkaGVhZGxpbmVdCisgICAgc2V0IGkgW3N0cmluZyBmaXJzdCAiXHIiICRoZWFkbGluZV0KKyAgICBpZiB7JGkgPj0gMH0geworCXNldCBoZWFkbGluZSBbc3RyaW5nIHRyaW1yaWdodCBbc3RyaW5nIHJhbmdlICRoZWFkbGluZSAwICRpXV0KKyAgICB9CisgICAgaWYgeyEkbGlzdGVkfSB7CisJIyBnaXQgbG9nIGluZGVudHMgdGhlIGNvbW1lbnQgYnkgNCBzcGFjZXM7CisJIyBpZiB3ZSBnb3QgdGhpcyB2aWEgZ2l0IGNhdC1maWxlLCBhZGQgdGhlIGluZGVudGF0aW9uCisJc2V0IG5ld2NvbW1lbnQge30KKwlmb3JlYWNoIGxpbmUgW3NwbGl0ICRjb21tZW50ICJcbiJdIHsKKwkgICAgYXBwZW5kIG5ld2NvbW1lbnQgIiAgICAiCisJICAgIGFwcGVuZCBuZXdjb21tZW50ICRsaW5lCisJICAgIGFwcGVuZCBuZXdjb21tZW50ICJcbiIKKwl9CisJc2V0IGNvbW1lbnQgJG5ld2NvbW1lbnQKKyAgICB9CisgICAgc2V0IGhhc25vdGUgW3N0cmluZyBmaXJzdCAiXG5Ob3RlczpcbiIgJGNvbnRlbnRzXQorICAgIHNldCBkaWZmICIiCisgICAgIyBJZiB0aGVyZSBpcyBkaWZmIG91dHB1dCBzaG93biBpbiB0aGUgZ2l0LWxvZyBzdHJlYW0sIHNwbGl0IGl0CisgICAgIyBvdXQuICBCdXQgZ2V0IHJpZCBvZiB0aGUgZW1wdHkgbGluZSB0aGF0IGFsd2F5cyBwcmVjZWRlcyB0aGUKKyAgICAjIGRpZmYuCisgICAgc2V0IGkgW3N0cmluZyBmaXJzdCAiXG5cbmRpZmYiICRjb21tZW50XQorICAgIGlmIHskaSA+PSAwfSB7CisJc2V0IGRpZmYgW3N0cmluZyByYW5nZSAkY29tbWVudCAkaSsxIGVuZF0KKwlzZXQgY29tbWVudCBbc3RyaW5nIHJhbmdlICRjb21tZW50IDAgJGktMV0KKyAgICB9CisgICAgc2V0IGNvbW1pdGluZm8oJGlkKSBbbGlzdCAkaGVhZGxpbmUgJGF1bmFtZSAkYXVkYXRlIFwKKwkJCSAgICAgJGNvbW5hbWUgJGNvbWRhdGUgJGNvbW1lbnQgJGhhc25vdGUgJGRpZmZdCit9CisKK3Byb2MgZ2V0Y29tbWl0IHtpZH0geworICAgIGdsb2JhbCBjb21taXRkYXRhIGNvbW1pdGluZm8KKworICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0ZGF0YSgkaWQpXX0geworCXBhcnNlY29tbWl0ICRpZCAkY29tbWl0ZGF0YSgkaWQpIDEKKyAgICB9IGVsc2UgeworCXJlYWRjb21taXQgJGlkCisJaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXX0geworCSAgICBzZXQgY29tbWl0aW5mbygkaWQpIFtsaXN0IFttYyAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSJdXQorCX0KKyAgICB9CisgICAgcmV0dXJuIDEKK30KKworIyBFeHBhbmQgYW4gYWJicmV2aWF0ZWQgY29tbWl0IElEIHRvIGEgbGlzdCBvZiBmdWxsIDQwLWNoYXIgSURzIHRoYXQgbWF0Y2gKKyMgYW5kIGFyZSBwcmVzZW50IGluIHRoZSBjdXJyZW50IHZpZXcuCisjIFRoaXMgaXMgZmFpcmx5IHNsb3cuLi4KK3Byb2MgbG9uZ2lkIHtwcmVmaXh9IHsKKyAgICBnbG9iYWwgdmFyY2lkIGN1cnZpZXcgdnNob3J0aWRzCisKKyAgICBzZXQgaWRzIHt9CisgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRwcmVmaXhdID49IDR9IHsKKwlzZXQgdnNob3J0aWQgJGN1cnZpZXcsW3N0cmluZyByYW5nZSAkcHJlZml4IDAgM10KKwlpZiB7W2luZm8gZXhpc3RzIHZzaG9ydGlkcygkdnNob3J0aWQpXX0geworCSAgICBmb3JlYWNoIGlkICR2c2hvcnRpZHMoJHZzaG9ydGlkKSB7CisJCWlmIHtbc3RyaW5nIG1hdGNoICIkcHJlZml4KiIgJGlkXX0geworCQkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkaWRzICRpZF0gPCAwfSB7CisJCQlsYXBwZW5kIGlkcyAkaWQKKwkJCWlmIHtbbGxlbmd0aCAkaWRzXSA+PSAyfSBicmVhaworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwlmb3JlYWNoIG1hdGNoIFthcnJheSBuYW1lcyB2YXJjaWQgIiRjdXJ2aWV3LCRwcmVmaXgqIl0geworCSAgICBsYXBwZW5kIGlkcyBbbGluZGV4IFtzcGxpdCAkbWF0Y2ggIiwiXSAxXQorCSAgICBpZiB7W2xsZW5ndGggJGlkc10gPj0gMn0gYnJlYWsKKwl9CisgICAgfQorICAgIHJldHVybiAkaWRzCit9CisKK3Byb2MgcmVhZHJlZnMge30geworICAgIGdsb2JhbCB0YWdpZHMgaWR0YWdzIGhlYWRpZHMgaWRoZWFkcyB0YWdvYmppZAorICAgIGdsb2JhbCBvdGhlcnJlZmlkcyBpZG90aGVycmVmcyBtYWluaGVhZCBtYWluaGVhZGlkCisgICAgZ2xvYmFsIHNlbGVjdGhlYWQgc2VsZWN0aGVhZGlkCisgICAgZ2xvYmFsIGhpZGVyZW1vdGVzCisKKyAgICBmb3JlYWNoIHYge3RhZ2lkcyBpZHRhZ3MgaGVhZGlkcyBpZGhlYWRzIG90aGVycmVmaWRzIGlkb3RoZXJyZWZzfSB7CisJdW5zZXQgLW5vY29tcGxhaW4gJHYKKyAgICB9CisgICAgc2V0IHJlZmQgW29wZW4gW2xpc3QgfCBnaXQgc2hvdy1yZWYgLWRdIHJdCisgICAgd2hpbGUge1tnZXRzICRyZWZkIGxpbmVdID49IDB9IHsKKwlpZiB7W3N0cmluZyBpbmRleCAkbGluZSA0MF0gbmUgIiAifSBjb250aW51ZQorCXNldCBpZCBbc3RyaW5nIHJhbmdlICRsaW5lIDAgMzldCisJc2V0IHJlZiBbc3RyaW5nIHJhbmdlICRsaW5lIDQxIGVuZF0KKwlpZiB7IVtzdHJpbmcgbWF0Y2ggInJlZnMvKiIgJHJlZl19IGNvbnRpbnVlCisJc2V0IG5hbWUgW3N0cmluZyByYW5nZSAkcmVmIDUgZW5kXQorCWlmIHtbc3RyaW5nIG1hdGNoICJyZW1vdGVzLyoiICRuYW1lXX0geworCSAgICBpZiB7IVtzdHJpbmcgbWF0Y2ggIiovSEVBRCIgJG5hbWVdICYmICEkaGlkZXJlbW90ZXN9IHsKKwkJc2V0IGhlYWRpZHMoJG5hbWUpICRpZAorCQlsYXBwZW5kIGlkaGVhZHMoJGlkKSAkbmFtZQorCSAgICB9CisJfSBlbHNlaWYge1tzdHJpbmcgbWF0Y2ggImhlYWRzLyoiICRuYW1lXX0geworCSAgICBzZXQgbmFtZSBbc3RyaW5nIHJhbmdlICRuYW1lIDYgZW5kXQorCSAgICBzZXQgaGVhZGlkcygkbmFtZSkgJGlkCisJICAgIGxhcHBlbmQgaWRoZWFkcygkaWQpICRuYW1lCisJfSBlbHNlaWYge1tzdHJpbmcgbWF0Y2ggInRhZ3MvKiIgJG5hbWVdfSB7CisJICAgICMgdGhpcyBsZXRzIHJlZnMvdGFncy9mb29ee30gb3ZlcndyaXRlIHJlZnMvdGFncy9mb28sCisJICAgICMgd2hpY2ggaXMgd2hhdCB3ZSB3YW50IHNpbmNlIHRoZSBmb3JtZXIgaXMgdGhlIGNvbW1pdCBJRAorCSAgICBzZXQgbmFtZSBbc3RyaW5nIHJhbmdlICRuYW1lIDUgZW5kXQorCSAgICBpZiB7W3N0cmluZyBtYXRjaCAiKl57fSIgJG5hbWVdfSB7CisJCXNldCBuYW1lIFtzdHJpbmcgcmFuZ2UgJG5hbWUgMCBlbmQtM10KKwkgICAgfSBlbHNlIHsKKwkJc2V0IHRhZ29iamlkKCRuYW1lKSAkaWQKKwkgICAgfQorCSAgICBzZXQgdGFnaWRzKCRuYW1lKSAkaWQKKwkgICAgbGFwcGVuZCBpZHRhZ3MoJGlkKSAkbmFtZQorCX0gZWxzZSB7CisJICAgIHNldCBvdGhlcnJlZmlkcygkbmFtZSkgJGlkCisJICAgIGxhcHBlbmQgaWRvdGhlcnJlZnMoJGlkKSAkbmFtZQorCX0KKyAgICB9CisgICAgY2F0Y2gge2Nsb3NlICRyZWZkfQorICAgIHNldCBtYWluaGVhZCB7fQorICAgIHNldCBtYWluaGVhZGlkIHt9CisgICAgY2F0Y2ggeworCXNldCBtYWluaGVhZGlkIFtleGVjIGdpdCByZXYtcGFyc2UgSEVBRF0KKwlzZXQgdGhlaGVhZCBbZXhlYyBnaXQgc3ltYm9saWMtcmVmIEhFQURdCisJaWYge1tzdHJpbmcgbWF0Y2ggInJlZnMvaGVhZHMvKiIgJHRoZWhlYWRdfSB7CisJICAgIHNldCBtYWluaGVhZCBbc3RyaW5nIHJhbmdlICR0aGVoZWFkIDExIGVuZF0KKwl9CisgICAgfQorICAgIHNldCBzZWxlY3RoZWFkaWQge30KKyAgICBpZiB7JHNlbGVjdGhlYWQgbmUge319IHsKKwljYXRjaCB7CisJICAgIHNldCBzZWxlY3RoZWFkaWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkc2VsZWN0aGVhZF0KKwl9CisgICAgfQorfQorCisjIHNraXAgb3ZlciBmYWtlIGNvbW1pdHMKK3Byb2MgZmlyc3RfcmVhbF9yb3cge30geworICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBudW1jb21taXRzCisKKyAgICBmb3Ige3NldCByb3cgMH0geyRyb3cgPCAkbnVtY29tbWl0c30ge2luY3Igcm93fSB7CisJc2V0IGlkIFtjb21taXRvbnJvdyAkcm93XQorCWlmIHskaWQgbmUgJG51bGxpZCAmJiAkaWQgbmUgJG51bGxpZDJ9IHsKKwkgICAgYnJlYWsKKwl9CisgICAgfQorICAgIHJldHVybiAkcm93Cit9CisKKyMgdXBkYXRlIHRoaW5ncyBmb3IgYSBoZWFkIG1vdmVkIHRvIGEgY2hpbGQgb2YgaXRzIHByZXZpb3VzIGxvY2F0aW9uCitwcm9jIG1vdmVoZWFkIHtpZCBuYW1lfSB7CisgICAgZ2xvYmFsIGhlYWRpZHMgaWRoZWFkcworCisgICAgcmVtb3ZlaGVhZCAkaGVhZGlkcygkbmFtZSkgJG5hbWUKKyAgICBzZXQgaGVhZGlkcygkbmFtZSkgJGlkCisgICAgbGFwcGVuZCBpZGhlYWRzKCRpZCkgJG5hbWUKK30KKworIyB1cGRhdGUgdGhpbmdzIHdoZW4gYSBoZWFkIGhhcyBiZWVuIHJlbW92ZWQKK3Byb2MgcmVtb3ZlaGVhZCB7aWQgbmFtZX0geworICAgIGdsb2JhbCBoZWFkaWRzIGlkaGVhZHMKKworICAgIGlmIHskaWRoZWFkcygkaWQpIGVxICRuYW1lfSB7CisJdW5zZXQgaWRoZWFkcygkaWQpCisgICAgfSBlbHNlIHsKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGlkaGVhZHMoJGlkKSAkbmFtZV0KKwlpZiB7JGkgPj0gMH0geworCSAgICBzZXQgaWRoZWFkcygkaWQpIFtscmVwbGFjZSAkaWRoZWFkcygkaWQpICRpICRpXQorCX0KKyAgICB9CisgICAgdW5zZXQgaGVhZGlkcygkbmFtZSkKK30KKworcHJvYyB0dGtfdG9wbGV2ZWwge3cgYXJnc30geworICAgIGdsb2JhbCB1c2VfdHRrCisgICAgZXZhbCBbbGluc2VydCAkYXJncyAwIDo6dG9wbGV2ZWwgJHddCisgICAgaWYgeyR1c2VfdHRrfSB7CisgICAgICAgIHBsYWNlIFt0dGs6OmZyYW1lICR3Ll90b3BsZXZlbF9iYWNrZ3JvdW5kXSAteCAwIC15IDAgLXJlbHdpZHRoIDEgLXJlbGhlaWdodCAxCisgICAgfQorICAgIHJldHVybiAkdworfQorCitwcm9jIG1ha2VfdHJhbnNpZW50IHt3aW5kb3cgb3JpZ2lufSB7CisgICAgZ2xvYmFsIGhhdmVfdGs4NQorCisgICAgIyBJbiBNYWNPUyBUayA4LjQgdHJhbnNpZW50IGFwcGVhcnMgdG8gd29yayBieSBzZXR0aW5nCisgICAgIyBvdmVycmlkZXJlZGlyZWN0LCB3aGljaCBpcyB1dHRlcmx5IHVzZWxlc3MsIHNpbmNlIHRoZQorICAgICMgd2luZG93cyBnZXQgbm8gYm9yZGVyLCBhbmQgYXJlIG5vdCBldmVuIGtlcHQgYWJvdmUKKyAgICAjIHRoZSBwYXJlbnQuCisgICAgaWYgeyEkaGF2ZV90azg1ICYmIFt0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxIHthcXVhfX0gcmV0dXJuCisKKyAgICB3bSB0cmFuc2llbnQgJHdpbmRvdyAkb3JpZ2luCisKKyAgICAjIFdpbmRvd3MgZmFpbHMgdG8gcGxhY2UgdHJhbnNpZW50IHdpbmRvd3Mgbm9ybWFsbHksIHNvCisgICAgIyBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGNlbnRlciB0aGVtIG9uIHRoZSBwYXJlbnQuCisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxIHt3aW4zMn19IHsKKwlhZnRlciBpZGxlIFtsaXN0IHRrOjpQbGFjZVdpbmRvdyAkd2luZG93IHdpZGdldCAkb3JpZ2luXQorICAgIH0KK30KKworcHJvYyBzaG93X2Vycm9yIHt3IHRvcCBtc2d9IHsKKyAgICBnbG9iYWwgTlMKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBOU119IHtzZXQgTlMgIiJ9CisgICAgaWYge1t3bSBzdGF0ZSAkdG9wXSBlcSAid2l0aGRyYXduIn0geyB3bSBkZWljb25pZnkgJHRvcCB9CisgICAgbWVzc2FnZSAkdy5tIC10ZXh0ICRtc2cgLWp1c3RpZnkgY2VudGVyIC1hc3BlY3QgNDAwCisgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDIwIC1wYWR5IDIwCisgICAgJHtOU306OmJ1dHRvbiAkdy5vayAtZGVmYXVsdCBhY3RpdmUgLXRleHQgW21jIE9LXSAtY29tbWFuZCAiZGVzdHJveSAkdG9wIgorICAgIHBhY2sgJHcub2sgLXNpZGUgYm90dG9tIC1maWxsIHgKKyAgICBiaW5kICR0b3AgPFZpc2liaWxpdHk+ICJncmFiICR0b3A7IGZvY3VzICR0b3AiCisgICAgYmluZCAkdG9wIDxLZXktUmV0dXJuPiAiZGVzdHJveSAkdG9wIgorICAgIGJpbmQgJHRvcCA8S2V5LXNwYWNlPiAgImRlc3Ryb3kgJHRvcCIKKyAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR0b3AiCisgICAgdGt3YWl0IHdpbmRvdyAkdG9wCit9CisKK3Byb2MgZXJyb3JfcG9wdXAge21zZyB7b3duZXIgLn19IHsKKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geworICAgICAgICB0a19tZXNzYWdlQm94IC1pY29uIGVycm9yIC10eXBlIG9rIC10aXRsZSBbd20gdGl0bGUgLl0gXAorICAgICAgICAgICAgLXBhcmVudCAkb3duZXIgLW1lc3NhZ2UgJG1zZworICAgIH0gZWxzZSB7CisgICAgICAgIHNldCB3IC5lcnJvcgorICAgICAgICB0dGtfdG9wbGV2ZWwgJHcKKyAgICAgICAgbWFrZV90cmFuc2llbnQgJHcgJG93bmVyCisgICAgICAgIHNob3dfZXJyb3IgJHcgJHcgJG1zZworICAgIH0KK30KKworcHJvYyBjb25maXJtX3BvcHVwIHttc2cge293bmVyIC59fSB7CisgICAgZ2xvYmFsIGNvbmZpcm1fb2sgTlMKKyAgICBzZXQgY29uZmlybV9vayAwCisgICAgc2V0IHcgLmNvbmZpcm0KKyAgICB0dGtfdG9wbGV2ZWwgJHcKKyAgICBtYWtlX3RyYW5zaWVudCAkdyAkb3duZXIKKyAgICBtZXNzYWdlICR3Lm0gLXRleHQgJG1zZyAtanVzdGlmeSBjZW50ZXIgLWFzcGVjdCA0MDAKKyAgICBwYWNrICR3Lm0gLXNpZGUgdG9wIC1maWxsIHggLXBhZHggMjAgLXBhZHkgMjAKKyAgICAke05TfTo6YnV0dG9uICR3Lm9rIC10ZXh0IFttYyBPS10gLWNvbW1hbmQgInNldCBjb25maXJtX29rIDE7IGRlc3Ryb3kgJHciCisgICAgcGFjayAkdy5vayAtc2lkZSBsZWZ0IC1maWxsIHgKKyAgICAke05TfTo6YnV0dG9uICR3LmNhbmNlbCAtdGV4dCBbbWMgQ2FuY2VsXSAtY29tbWFuZCAiZGVzdHJveSAkdyIKKyAgICBwYWNrICR3LmNhbmNlbCAtc2lkZSByaWdodCAtZmlsbCB4CisgICAgYmluZCAkdyA8VmlzaWJpbGl0eT4gImdyYWIgJHc7IGZvY3VzICR3IgorICAgIGJpbmQgJHcgPEtleS1SZXR1cm4+ICJzZXQgY29uZmlybV9vayAxOyBkZXN0cm95ICR3IgorICAgIGJpbmQgJHcgPEtleS1zcGFjZT4gICJzZXQgY29uZmlybV9vayAxOyBkZXN0cm95ICR3IgorICAgIGJpbmQgJHcgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR3IgorICAgIHRrOjpQbGFjZVdpbmRvdyAkdyB3aWRnZXQgJG93bmVyCisgICAgdGt3YWl0IHdpbmRvdyAkdworICAgIHJldHVybiAkY29uZmlybV9vaworfQorCitwcm9jIHNldG9wdGlvbnMge30geworICAgIGdsb2JhbCB1c2VfdHRrCisKKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gbmUgIndpbjMyIn0geworICAgICAgICBvcHRpb24gYWRkICpQYW5lZHdpbmRvdy5zaG93SGFuZGxlIDEgc3RhcnR1cEZpbGUKKyAgICAgICAgb3B0aW9uIGFkZCAqUGFuZWR3aW5kb3cuc2FzaFJlbGllZiByYWlzZWQgc3RhcnR1cEZpbGUKKyAgICAgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIG5lICJhcXVhIn0geworICAgICAgICAgICAgb3B0aW9uIGFkZCAqTWVudS5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3B0aW9uIGFkZCAqTWVudS5UZWFyT2ZmIDAgc3RhcnR1cEZpbGUKKyAgICB9CisgICAgb3B0aW9uIGFkZCAqQnV0dG9uLmZvbnQgdWlmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqQ2hlY2tidXR0b24uZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpSYWRpb2J1dHRvbi5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKk1lbnVidXR0b24uZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpMYWJlbC5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKk1lc3NhZ2UuZm9udCB1aWZvbnQgc3RhcnR1cEZpbGUKKyAgICBvcHRpb24gYWRkICpFbnRyeS5mb250IHRleHRmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqVGV4dC5mb250IHRleHRmb250IHN0YXJ0dXBGaWxlCisgICAgb3B0aW9uIGFkZCAqTGFiZWxmcmFtZS5mb250IHVpZm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKlNwaW5ib3guZm9udCB0ZXh0Zm9udCBzdGFydHVwRmlsZQorICAgIG9wdGlvbiBhZGQgKkxpc3Rib3guZm9udCBtYWluZm9udCBzdGFydHVwRmlsZQorfQorCitwcm9jIHNldHR0a3N0eWxlIHt9IHsKKyAgICBldmFsIGZvbnQgY29uZmlndXJlIFRrRGVmYXVsdEZvbnQgW2ZvbnRmbGFncyBtYWluZm9udF0KKyAgICBldmFsIGZvbnQgY29uZmlndXJlIFRrVGV4dEZvbnQgW2ZvbnRmbGFncyB0ZXh0Zm9udF0KKyAgICBldmFsIGZvbnQgY29uZmlndXJlIFRrSGVhZGluZ0ZvbnQgW2ZvbnRmbGFncyBtYWluZm9udF0KKyAgICBldmFsIGZvbnQgY29uZmlndXJlIFRrQ2FwdGlvbkZvbnQgW2ZvbnRmbGFncyBtYWluZm9udF0gLXdlaWdodCBib2xkCisgICAgZXZhbCBmb250IGNvbmZpZ3VyZSBUa1Rvb2x0aXBGb250IFtmb250ZmxhZ3MgdWlmb250XQorICAgIGV2YWwgZm9udCBjb25maWd1cmUgVGtGaXhlZEZvbnQgICBbZm9udGZsYWdzIHRleHRmb250XQorICAgIGV2YWwgZm9udCBjb25maWd1cmUgVGtJY29uRm9udCAgICBbZm9udGZsYWdzIHVpZm9udF0KKyAgICBldmFsIGZvbnQgY29uZmlndXJlIFRrTWVudUZvbnQgICAgW2ZvbnRmbGFncyB1aWZvbnRdCisgICAgZXZhbCBmb250IGNvbmZpZ3VyZSBUa1NtYWxsQ2FwdGlvbkZvbnQgW2ZvbnRmbGFncyB1aWZvbnRdCit9CisKKyMgTWFrZSBhIG1lbnUgYW5kIHN1Ym1lbnVzLgorIyBtIGlzIHRoZSB3aW5kb3cgbmFtZSBmb3IgdGhlIG1lbnUsIGl0ZW1zIGlzIHRoZSBsaXN0IG9mIG1lbnUgaXRlbXMgdG8gYWRkLgorIyBFYWNoIGl0ZW0gaXMgYSBsaXN0IHttYyBsYWJlbCB0eXBlIGRlc2NyaXB0aW9uIG9wdGlvbnMuLi59CisjIG1jIGlzIGlnbm9yZWQ7IGl0J3Mgc28gd2UgY2FuIHB1dCBtYyB0aGVyZSB0byBhbGVydCB4Z2V0dGV4dAorIyBsYWJlbCBpcyB0aGUgc3RyaW5nIHRoYXQgYXBwZWFycyBpbiB0aGUgbWVudQorIyB0eXBlIGlzIGNhc2NhZGUsIGNvbW1hbmQgb3IgcmFkaW9idXR0b24gKHNob3VsZCBhZGQgY2hlY2tidXR0b24pCisjIGRlc2NyaXB0aW9uIGRlcGVuZHMgb24gdHlwZTsgaXQncyB0aGUgc3VibGlzdCBmb3IgY2FzY2FkZSwgdGhlCisjIGNvbW1hbmQgdG8gaW52b2tlIGZvciBjb21tYW5kLCBvciB7dmFyaWFibGUgdmFsdWV9IGZvciByYWRpb2J1dHRvbgorcHJvYyBtYWtlbWVudSB7bSBpdGVtc30geworICAgIG1lbnUgJG0KKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEge2FxdWF9fSB7CisJc2V0IE1ldGExIENtZAorICAgIH0gZWxzZSB7CisJc2V0IE1ldGExIEN0cmwKKyAgICB9CisgICAgZm9yZWFjaCBpICRpdGVtcyB7CisJc2V0IG5hbWUgW21jIFtsaW5kZXggJGkgMV1dCisJc2V0IHR5cGUgW2xpbmRleCAkaSAyXQorCXNldCB0aGluZyBbbGluZGV4ICRpIDNdCisJc2V0IHBhcmFtcyBbbGlzdCAkdHlwZV0KKwlpZiB7JG5hbWUgbmUge319IHsKKwkgICAgc2V0IHUgW3N0cmluZyBmaXJzdCAiJiIgW3N0cmluZyBtYXAgeyYmIHh9ICRuYW1lXV0KKwkgICAgbGFwcGVuZCBwYXJhbXMgLWxhYmVsIFtzdHJpbmcgbWFwIHsmJiAmICYge319ICRuYW1lXQorCSAgICBpZiB7JHUgPj0gMH0geworCQlsYXBwZW5kIHBhcmFtcyAtdW5kZXJsaW5lICR1CisJICAgIH0KKwl9CisJc3dpdGNoIC0tICR0eXBlIHsKKwkgICAgImNhc2NhZGUiIHsKKwkJc2V0IHN1Ym1lbnUgW3N0cmluZyB0b2xvd2VyIFtzdHJpbmcgbWFwIHsmICIifSBbbGluZGV4ICRpIDFdXV0KKwkJbGFwcGVuZCBwYXJhbXMgLW1lbnUgJG0uJHN1Ym1lbnUKKwkgICAgfQorCSAgICAiY29tbWFuZCIgeworCQlsYXBwZW5kIHBhcmFtcyAtY29tbWFuZCAkdGhpbmcKKwkgICAgfQorCSAgICAicmFkaW9idXR0b24iIHsKKwkJbGFwcGVuZCBwYXJhbXMgLXZhcmlhYmxlIFtsaW5kZXggJHRoaW5nIDBdIFwKKwkJICAgIC12YWx1ZSBbbGluZGV4ICR0aGluZyAxXQorCSAgICB9CisJfQorCXNldCB0YWlsIFtscmFuZ2UgJGkgNCBlbmRdCisJcmVnc3ViIC1hbGwge1x5TWV0YTFceX0gJHRhaWwgJE1ldGExIHRhaWwKKwlldmFsICRtIGFkZCAkcGFyYW1zICR0YWlsCisJaWYgeyR0eXBlIGVxICJjYXNjYWRlIn0geworCSAgICBtYWtlbWVudSAkbS4kc3VibWVudSAkdGhpbmcKKwl9CisgICAgfQorfQorCisjIHRyYW5zbGF0ZSBzdHJpbmcgYW5kIHJlbW92ZSBhbXBlcnNhbmRzCitwcm9jIG1jYSB7c3RyfSB7CisgICAgcmV0dXJuIFtzdHJpbmcgbWFwIHsmJiAmICYge319IFttYyAkc3RyXV0KK30KKworcHJvYyBjbGVhcmRyb3BzZWwge3d9IHsKKyAgICAkdyBzZWxlY3Rpb24gY2xlYXIKK30KK3Byb2MgbWFrZWRyb3BsaXN0IHt3IHZhcm5hbWUgYXJnc30geworICAgIGdsb2JhbCB1c2VfdHRrCisgICAgaWYgeyR1c2VfdHRrfSB7CisgICAgICAgIHNldCB3aWR0aCAwCisgICAgICAgIGZvcmVhY2ggbGFiZWwgJGFyZ3MgeworICAgICAgICAgICAgc2V0IGN4IFtzdHJpbmcgbGVuZ3RoICRsYWJlbF0KKyAgICAgICAgICAgIGlmIHskY3ggPiAkd2lkdGh9IHtzZXQgd2lkdGggJGN4fQorICAgICAgICB9CisJc2V0IGdtIFt0dGs6OmNvbWJvYm94ICR3IC13aWR0aCAkd2lkdGggLXN0YXRlIHJlYWRvbmx5XAorCQkgICAgLXRleHR2YXJpYWJsZSAkdmFybmFtZSAtdmFsdWVzICRhcmdzIFwKKwkJICAgIC1leHBvcnRzZWxlY3Rpb24gZmFsc2VdCisJYmluZCAkZ20gPDxDb21ib2JveFNlbGVjdGVkPj4gW2xpc3QgJGdtIHNlbGVjdGlvbiBjbGVhcl0KKyAgICB9IGVsc2UgeworCXNldCBnbSBbZXZhbCBbbGluc2VydCAkYXJncyAwIHRrX29wdGlvbk1lbnUgJHcgJHZhcm5hbWVdXQorICAgIH0KKyAgICByZXR1cm4gJGdtCit9CisKK3Byb2MgbWFrZXdpbmRvdyB7fSB7CisgICAgZ2xvYmFsIGNhbnYgY2FudjIgY2FudjMgbGluZXNwYyBjaGFyc3BjIGN0ZXh0IGNmbGlzdCBjc2Nyb2xsCisgICAgZ2xvYmFsIHRhYnN0b3AKKyAgICBnbG9iYWwgZmluZHR5cGUgZmluZHR5cGVtZW51IGZpbmRsb2MgZmluZHN0cmluZyBmc3RyaW5nIGdlb21ldHJ5CisgICAgZ2xvYmFsIGVudHJpZXMgc2hhMWVudHJ5IHNoYTFzdHJpbmcgc2hhMWJ1dAorICAgIGdsb2JhbCBkaWZmY29udGV4dHN0cmluZyBkaWZmY29udGV4dAorICAgIGdsb2JhbCBpZ25vcmVzcGFjZQorICAgIGdsb2JhbCBtYWluY3Vyc29yIHRleHRjdXJzb3IgY3VydGV4dGN1cnNvcgorICAgIGdsb2JhbCByb3djdHhtZW51IGZha2Vyb3dtZW51IG1lcmdlbWF4IHdyYXBjb21tZW50CisgICAgZ2xvYmFsIGhpZ2hsaWdodF9maWxlcyBnZHR0eXBlCisgICAgZ2xvYmFsIHNlYXJjaHN0cmluZyBzc3RyaW5nCisgICAgZ2xvYmFsIGJnY29sb3IgZmdjb2xvciBiZ2xpc3QgZmdsaXN0IGRpZmZjb2xvcnMgc2VsZWN0Ymdjb2xvcgorICAgIGdsb2JhbCB1aWZnY29sb3IgdWlmZ2Rpc2FibGVkY29sb3IKKyAgICBnbG9iYWwgZmlsZXNlcGJnY29sb3IgZmlsZXNlcGZnY29sb3IKKyAgICBnbG9iYWwgbWVyZ2Vjb2xvcnMgZm91bmRiZ2NvbG9yIGN1cnJlbnRzZWFyY2hoaXRiZ2NvbG9yCisgICAgZ2xvYmFsIGhlYWRjdHhtZW51IHByb2dyZXNzY2FudiBwcm9ncmVzc2l0ZW0gcHJvZ3Jlc3Njb29yZHMgc3RhdHVzdworICAgIGdsb2JhbCBmcHJvZ2l0ZW0gZnByb2djb29yZCBsYXN0cHJvZ3VwZGF0ZSBwcm9ndXBkYXRlcGVuZGluZworICAgIGdsb2JhbCBycHJvZ2l0ZW0gcnByb2djb29yZCByb3dudW1zZWwgbnVtY29tbWl0cworICAgIGdsb2JhbCBoYXZlX3RrODUgdXNlX3R0ayBOUworICAgIGdsb2JhbCBnaXRfdmVyc2lvbgorICAgIGdsb2JhbCB3b3JkZGlmZgorCisgICAgIyBUaGUgIm1jIiBhcmd1bWVudHMgaGVyZSBhcmUgcHVyZWx5IHNvIHRoYXQgeGdldHRleHQKKyAgICAjIHNlZXMgdGhlIGZvbGxvd2luZyBzdHJpbmcgYXMgbmVlZGluZyB0byBiZSB0cmFuc2xhdGVkCisgICAgc2V0IGZpbGUgeworCW1jICImRmlsZSIgY2FzY2FkZSB7CisJICAgIHttYyAiJlVwZGF0ZSIgY29tbWFuZCB1cGRhdGVjb21taXRzIC1hY2NlbGVyYXRvciBGNX0KKwkgICAge21jICImUmVsb2FkIiBjb21tYW5kIHJlbG9hZGNvbW1pdHMgLWFjY2VsZXJhdG9yIFNoaWZ0LUY1fQorCSAgICB7bWMgIlJlcmVhZCByZSZmZXJlbmNlcyIgY29tbWFuZCByZXJlYWRyZWZzfQorCSAgICB7bWMgIiZMaXN0IHJlZmVyZW5jZXMiIGNvbW1hbmQgc2hvd3JlZnMgLWFjY2VsZXJhdG9yIEYyfQorCSAgICB7eHggIiIgc2VwYXJhdG9yfQorCSAgICB7bWMgIlN0YXJ0IGdpdCAmZ3VpIiBjb21tYW5kIHtleGVjIGdpdCBndWkgJn19CisJICAgIHt4eCAiIiBzZXBhcmF0b3J9CisJICAgIHttYyAiJlF1aXQiIGNvbW1hbmQgZG9xdWl0IC1hY2NlbGVyYXRvciBNZXRhMS1RfQorCX19CisgICAgc2V0IGVkaXQgeworCW1jICImRWRpdCIgY2FzY2FkZSB7CisJICAgIHttYyAiJlByZWZlcmVuY2VzIiBjb21tYW5kIGRvcHJlZnN9CisJfX0KKyAgICBzZXQgdmlldyB7CisJbWMgIiZWaWV3IiBjYXNjYWRlIHsKKwkgICAge21jICImTmV3IHZpZXcuLi4iIGNvbW1hbmQge25ld3ZpZXcgMH0gLWFjY2VsZXJhdG9yIFNoaWZ0LUY0fQorCSAgICB7bWMgIiZFZGl0IHZpZXcuLi4iIGNvbW1hbmQgZWRpdHZpZXcgLXN0YXRlIGRpc2FibGVkIC1hY2NlbGVyYXRvciBGNH0KKwkgICAge21jICImRGVsZXRlIHZpZXciIGNvbW1hbmQgZGVsdmlldyAtc3RhdGUgZGlzYWJsZWR9CisJICAgIHt4eCAiIiBzZXBhcmF0b3J9CisJICAgIHttYyAiJkFsbCBmaWxlcyIgcmFkaW9idXR0b24ge3NlbGVjdGVkdmlldyAwfSAtY29tbWFuZCB7c2hvd3ZpZXcgMH19CisJfX0KKyAgICBpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gbmUgImFxdWEifSB7CisJc2V0IGhlbHAgeworCW1jICImSGVscCIgY2FzY2FkZSB7CisJICAgIHttYyAiJkFib3V0IGdpdGsiIGNvbW1hbmQgYWJvdXR9CisJICAgIHttYyAiJktleSBiaW5kaW5ncyIgY29tbWFuZCBrZXlzfQorCX19CisJc2V0IGJhciBbbGlzdCAkZmlsZSAkZWRpdCAkdmlldyAkaGVscF0KKyAgICB9IGVsc2UgeworCXByb2MgOjp0azo6bWFjOjpTaG93UHJlZmVyZW5jZXMge30ge2RvcHJlZnN9CisJcHJvYyA6OnRrOjptYWM6OlF1aXQge30ge2RvcXVpdH0KKwlsc2V0IGZpbGUgZW5kIFtscmVwbGFjZSBbbGluZGV4ICRmaWxlIGVuZF0gZW5kLTEgZW5kXQorCXNldCBhcHBsZSB7CisJeHggIiZBcHBsZSIgY2FzY2FkZSB7CisJICAgIHttYyAiJkFib3V0IGdpdGsiIGNvbW1hbmQgYWJvdXR9CisJICAgIHt4eCAiIiBzZXBhcmF0b3J9CisJfX0KKwlzZXQgaGVscCB7CisJbWMgIiZIZWxwIiBjYXNjYWRlIHsKKwkgICAge21jICImS2V5IGJpbmRpbmdzIiBjb21tYW5kIGtleXN9CisJfX0KKwlzZXQgYmFyIFtsaXN0ICRhcHBsZSAkZmlsZSAkdmlldyAkaGVscF0KKyAgICB9CisgICAgbWFrZW1lbnUgLmJhciAkYmFyCisgICAgLiBjb25maWd1cmUgLW1lbnUgLmJhcgorCisgICAgaWYgeyR1c2VfdHRrfSB7CisgICAgICAgICMgY292ZXIgdGhlIG5vbi10aGVtZWQgdG9wbGV2ZWwgd2l0aCBhIHRoZW1lZCBmcmFtZS4KKyAgICAgICAgcGxhY2UgW3R0azo6ZnJhbWUgLl9tYWluX2JhY2tncm91bmRdIC14IDAgLXkgMCAtcmVsd2lkdGggMSAtcmVsaGVpZ2h0IDEKKyAgICB9CisKKyAgICAjIHRoZSBndWkgaGFzIHVwcGVyIGFuZCBsb3dlciBoYWxmLCBwYXJ0cyBvZiBhIHBhbmVkIHdpbmRvdy4KKyAgICAke05TfTo6cGFuZWR3aW5kb3cgLmN0b3AgLW9yaWVudCB2ZXJ0aWNhbAorCisgICAgIyBwb3NzaWJseSB1c2UgYXNzdW1lZCBnZW9tZXRyeQorICAgIGlmIHshW2luZm8gZXhpc3RzIGdlb21ldHJ5KHB3c2FzaDApXX0geworICAgICAgICBzZXQgZ2VvbWV0cnkodG9waGVpZ2h0KSBbZXhwciB7MTUgKiAkbGluZXNwY31dCisgICAgICAgIHNldCBnZW9tZXRyeSh0b3B3aWR0aCkgW2V4cHIgezgwICogJGNoYXJzcGN9XQorICAgICAgICBzZXQgZ2VvbWV0cnkoYm90aGVpZ2h0KSBbZXhwciB7MTUgKiAkbGluZXNwY31dCisgICAgICAgIHNldCBnZW9tZXRyeShib3R3aWR0aCkgW2V4cHIgezUwICogJGNoYXJzcGN9XQorICAgICAgICBzZXQgZ2VvbWV0cnkocHdzYXNoMCkgW2xpc3QgW2V4cHIgezQwICogJGNoYXJzcGN9XSAyXQorICAgICAgICBzZXQgZ2VvbWV0cnkocHdzYXNoMSkgW2xpc3QgW2V4cHIgezYwICogJGNoYXJzcGN9XSAyXQorICAgIH0KKworICAgICMgdGhlIHVwcGVyIGhhbGYgd2lsbCBoYXZlIGEgcGFuZWQgd2luZG93LCBhIHNjcm9sbCBiYXIgdG8gdGhlIHJpZ2h0LCBhbmQgc29tZSBzdHVmZiBiZWxvdworICAgICR7TlN9OjpmcmFtZSAudGYgLWhlaWdodCAkZ2VvbWV0cnkodG9waGVpZ2h0KSAtd2lkdGggJGdlb21ldHJ5KHRvcHdpZHRoKQorICAgICR7TlN9OjpmcmFtZSAudGYuaGlzdGZyYW1lCisgICAgJHtOU306OnBhbmVkd2luZG93IC50Zi5oaXN0ZnJhbWUucHdjbGlzdCAtb3JpZW50IGhvcml6b250YWwKKyAgICBpZiB7ISR1c2VfdHRrfSB7CisJLnRmLmhpc3RmcmFtZS5wd2NsaXN0IGNvbmZpZ3VyZSAtc2FzaHBhZCAwIC1oYW5kbGVzaXplIDQKKyAgICB9CisKKyAgICAjIGNyZWF0ZSB0aHJlZSBjYW52YXNlcworICAgIHNldCBjc2Nyb2xsIC50Zi5oaXN0ZnJhbWUuY3NiCisgICAgc2V0IGNhbnYgLnRmLmhpc3RmcmFtZS5wd2NsaXN0LmNhbnYKKyAgICBjYW52YXMgJGNhbnYgXAorCS1zZWxlY3RiYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yIFwKKwktYmFja2dyb3VuZCAkYmdjb2xvciAtYmQgMCBcCisJLXlzY3JvbGxpbmNyICRsaW5lc3BjIC15c2Nyb2xsY29tbWFuZCAic2Nyb2xsY2FudiAkY3Njcm9sbCIKKyAgICAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgYWRkICRjYW52CisgICAgc2V0IGNhbnYyIC50Zi5oaXN0ZnJhbWUucHdjbGlzdC5jYW52MgorICAgIGNhbnZhcyAkY2FudjIgXAorCS1zZWxlY3RiYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yIFwKKwktYmFja2dyb3VuZCAkYmdjb2xvciAtYmQgMCAteXNjcm9sbGluY3IgJGxpbmVzcGMKKyAgICAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgYWRkICRjYW52MgorICAgIHNldCBjYW52MyAudGYuaGlzdGZyYW1lLnB3Y2xpc3QuY2FudjMKKyAgICBjYW52YXMgJGNhbnYzIFwKKwktc2VsZWN0YmFja2dyb3VuZCAkc2VsZWN0Ymdjb2xvciBcCisJLWJhY2tncm91bmQgJGJnY29sb3IgLWJkIDAgLXlzY3JvbGxpbmNyICRsaW5lc3BjCisgICAgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IGFkZCAkY2FudjMKKyAgICBpZiB7JHVzZV90dGt9IHsKKwliaW5kIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCA8TWFwPiB7CisJICAgIGJpbmQgJVcgPE1hcD4ge30KKwkgICAgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2hwb3MgMSBbbGluZGV4ICQ6Omdlb21ldHJ5KHB3c2FzaDEpIDBdCisJICAgIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNocG9zIDAgW2xpbmRleCAkOjpnZW9tZXRyeShwd3Nhc2gwKSAwXQorCX0KKyAgICB9IGVsc2UgeworCWV2YWwgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IHNhc2ggcGxhY2UgMCAkZ2VvbWV0cnkocHdzYXNoMCkKKwlldmFsIC50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNoIHBsYWNlIDEgJGdlb21ldHJ5KHB3c2FzaDEpCisgICAgfQorCisgICAgIyBhIHNjcm9sbCBiYXIgdG8gcnVsZSB0aGVtCisgICAgJHtOU306OnNjcm9sbGJhciAkY3Njcm9sbCAtY29tbWFuZCB7YWxsY2FudnMgeXZpZXd9CisgICAgaWYgeyEkdXNlX3R0a30geyRjc2Nyb2xsIGNvbmZpZ3VyZSAtaGlnaGxpZ2h0dGhpY2tuZXNzIDB9CisgICAgcGFjayAkY3Njcm9sbCAtc2lkZSByaWdodCAtZmlsbCB5CisgICAgYmluZCAudGYuaGlzdGZyYW1lLnB3Y2xpc3QgPENvbmZpZ3VyZT4ge3Jlc2l6ZWNsaXN0cGFuZXMgJVcgJXd9CisgICAgbGFwcGVuZCBiZ2xpc3QgJGNhbnYgJGNhbnYyICRjYW52MworICAgIHBhY2sgLnRmLmhpc3RmcmFtZS5wd2NsaXN0IC1maWxsIGJvdGggLWV4cGFuZCAxIC1zaWRlIGxlZnQKKworICAgICMgd2UgaGF2ZSB0d28gYnV0dG9uIGJhcnMgYXQgYm90dG9tIG9mIHRvcCBmcmFtZS4gQmFyIDEKKyAgICAke05TfTo6ZnJhbWUgLnRmLmJhcgorICAgICR7TlN9OjpmcmFtZSAudGYubGJhciAtaGVpZ2h0IDE1CisKKyAgICBzZXQgc2hhMWVudHJ5IC50Zi5iYXIuc2hhMQorICAgIHNldCBlbnRyaWVzICRzaGExZW50cnkKKyAgICBzZXQgc2hhMWJ1dCAudGYuYmFyLnNoYTFsYWJlbAorICAgIGJ1dHRvbiAkc2hhMWJ1dCAtdGV4dCAiW21jICJTSEExIElEOiJdICIgLXN0YXRlIGRpc2FibGVkIC1yZWxpZWYgZmxhdCBcCisJLWNvbW1hbmQgZ290b2NvbW1pdCAtd2lkdGggOAorICAgICRzaGExYnV0IGNvbmYgLWRpc2FibGVkZm9yZWdyb3VuZCBbJHNoYTFidXQgY2dldCAtZm9yZWdyb3VuZF0KKyAgICBwYWNrIC50Zi5iYXIuc2hhMWxhYmVsIC1zaWRlIGxlZnQKKyAgICAke05TfTo6ZW50cnkgJHNoYTFlbnRyeSAtd2lkdGggNDAgLWZvbnQgdGV4dGZvbnQgLXRleHR2YXJpYWJsZSBzaGExc3RyaW5nCisgICAgdHJhY2UgYWRkIHZhcmlhYmxlIHNoYTFzdHJpbmcgd3JpdGUgc2hhMWNoYW5nZQorICAgIHBhY2sgJHNoYTFlbnRyeSAtc2lkZSBsZWZ0IC1wYWR5IDIKKworICAgIHNldCBibV9sZWZ0X2RhdGEgeworCSNkZWZpbmUgbGVmdF93aWR0aCAxNgorCSNkZWZpbmUgbGVmdF9oZWlnaHQgMTYKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBsZWZ0X2JpdHNbXSA9IHsKKwkweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGUwLCAweDAwLCAweDcwLCAweDAwLCAweDM4LCAweDAwLCAweDFjLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4MGUsIDB4MDAsIDB4MWMsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHg3MCwgMHgwMCwgMHhlMCwgMHgwMCwgMHhjMCwgMHgwMX07CisgICAgfQorICAgIHNldCBibV9yaWdodF9kYXRhIHsKKwkjZGVmaW5lIHJpZ2h0X3dpZHRoIDE2CisJI2RlZmluZSByaWdodF9oZWlnaHQgMTYKKwlzdGF0aWMgdW5zaWduZWQgY2hhciByaWdodF9iaXRzW10gPSB7CisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHg4MCwgMHgwMywgMHgwMCwgMHgwNywgMHgwMCwgMHgwZSwgMHgwMCwgMHgxYywKKwkweDAwLCAweDM4LCAweGZmLCAweDdmLCAweGZmLCAweDdmLCAweGZmLCAweDdmLCAweDAwLCAweDM4LCAweDAwLCAweDFjLAorCTB4MDAsIDB4MGUsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MDMsIDB4YzAsIDB4MDF9OworICAgIH0KKyAgICBpbWFnZSBjcmVhdGUgYml0bWFwIGJtLWxlZnQgLWRhdGEgJGJtX2xlZnRfZGF0YSAtZm9yZWdyb3VuZCAkdWlmZ2NvbG9yCisgICAgaW1hZ2UgY3JlYXRlIGJpdG1hcCBibS1sZWZ0LWdyYXkgLWRhdGEgJGJtX2xlZnRfZGF0YSAtZm9yZWdyb3VuZCAkdWlmZ2Rpc2FibGVkY29sb3IKKyAgICBpbWFnZSBjcmVhdGUgYml0bWFwIGJtLXJpZ2h0IC1kYXRhICRibV9yaWdodF9kYXRhIC1mb3JlZ3JvdW5kICR1aWZnY29sb3IKKyAgICBpbWFnZSBjcmVhdGUgYml0bWFwIGJtLXJpZ2h0LWdyYXkgLWRhdGEgJGJtX3JpZ2h0X2RhdGEgLWZvcmVncm91bmQgJHVpZmdkaXNhYmxlZGNvbG9yCisKKyAgICAke05TfTo6YnV0dG9uIC50Zi5iYXIubGVmdGJ1dCAtY29tbWFuZCBnb2JhY2sgLXN0YXRlIGRpc2FibGVkIC13aWR0aCAyNgorICAgIGlmIHskdXNlX3R0a30geworCS50Zi5iYXIubGVmdGJ1dCBjb25maWd1cmUgLWltYWdlIFtsaXN0IGJtLWxlZnQgZGlzYWJsZWQgYm0tbGVmdC1ncmF5XQorICAgIH0gZWxzZSB7CisJLnRmLmJhci5sZWZ0YnV0IGNvbmZpZ3VyZSAtaW1hZ2UgYm0tbGVmdAorICAgIH0KKyAgICBwYWNrIC50Zi5iYXIubGVmdGJ1dCAtc2lkZSBsZWZ0IC1maWxsIHkKKyAgICAke05TfTo6YnV0dG9uIC50Zi5iYXIucmlnaHRidXQgLWNvbW1hbmQgZ29mb3J3IC1zdGF0ZSBkaXNhYmxlZCAtd2lkdGggMjYKKyAgICBpZiB7JHVzZV90dGt9IHsKKwkudGYuYmFyLnJpZ2h0YnV0IGNvbmZpZ3VyZSAtaW1hZ2UgW2xpc3QgYm0tcmlnaHQgZGlzYWJsZWQgYm0tcmlnaHQtZ3JheV0KKyAgICB9IGVsc2UgeworCS50Zi5iYXIucmlnaHRidXQgY29uZmlndXJlIC1pbWFnZSBibS1yaWdodAorICAgIH0KKyAgICBwYWNrIC50Zi5iYXIucmlnaHRidXQgLXNpZGUgbGVmdCAtZmlsbCB5CisKKyAgICAke05TfTo6bGFiZWwgLnRmLmJhci5yb3dsYWJlbCAtdGV4dCBbbWMgIlJvdyJdCisgICAgc2V0IHJvd251bXNlbCB7fQorICAgICR7TlN9OjpsYWJlbCAudGYuYmFyLnJvd251bSAtd2lkdGggNyAtdGV4dHZhcmlhYmxlIHJvd251bXNlbCBcCisJLXJlbGllZiBzdW5rZW4gLWFuY2hvciBlCisgICAgJHtOU306OmxhYmVsIC50Zi5iYXIucm93bGFiZWwyIC10ZXh0ICIvIgorICAgICR7TlN9OjpsYWJlbCAudGYuYmFyLm51bWNvbW1pdHMgLXdpZHRoIDcgLXRleHR2YXJpYWJsZSBudW1jb21taXRzIFwKKwktcmVsaWVmIHN1bmtlbiAtYW5jaG9yIGUKKyAgICBwYWNrIC50Zi5iYXIucm93bGFiZWwgLnRmLmJhci5yb3dudW0gLnRmLmJhci5yb3dsYWJlbDIgLnRmLmJhci5udW1jb21taXRzIFwKKwktc2lkZSBsZWZ0CisgICAgaWYgeyEkdXNlX3R0a30geworICAgICAgICBmb3JlYWNoIHcge3Jvd251bSBudW1jb21taXRzfSB7LnRmLmJhci4kdyBjb25maWd1cmUgLWZvbnQgdGV4dGZvbnR9CisgICAgfQorICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgc2VsZWN0ZWRsaW5lIHdyaXRlIHNlbGVjdGVkbGluZV9jaGFuZ2UKKworICAgICMgU3RhdHVzIGxhYmVsIGFuZCBwcm9ncmVzcyBiYXIKKyAgICBzZXQgc3RhdHVzdyAudGYuYmFyLnN0YXR1cworICAgICR7TlN9OjpsYWJlbCAkc3RhdHVzdyAtd2lkdGggMTUgLXJlbGllZiBzdW5rZW4KKyAgICBwYWNrICRzdGF0dXN3IC1zaWRlIGxlZnQgLXBhZHggNQorICAgIGlmIHskdXNlX3R0a30geworCXNldCBwcm9ncmVzc2NhbnYgW3R0azo6cHJvZ3Jlc3NiYXIgLnRmLmJhci5wcm9ncmVzc10KKyAgICB9IGVsc2UgeworCXNldCBoIFtleHByIHtbZm9udCBtZXRyaWNzIHVpZm9udCAtbGluZXNwYWNlXSArIDJ9XQorCXNldCBwcm9ncmVzc2NhbnYgLnRmLmJhci5wcm9ncmVzcworCWNhbnZhcyAkcHJvZ3Jlc3NjYW52IC1yZWxpZWYgc3Vua2VuIC1oZWlnaHQgJGggLWJvcmRlcndpZHRoIDIKKwlzZXQgcHJvZ3Jlc3NpdGVtIFskcHJvZ3Jlc3NjYW52IGNyZWF0ZSByZWN0IC0xIDAgMCAkaCAtZmlsbCAiIzAwZmYwMCJdCisJc2V0IGZwcm9naXRlbSBbJHByb2dyZXNzY2FudiBjcmVhdGUgcmVjdCAtMSAwIDAgJGggLWZpbGwgeWVsbG93XQorCXNldCBycHJvZ2l0ZW0gWyRwcm9ncmVzc2NhbnYgY3JlYXRlIHJlY3QgLTEgMCAwICRoIC1maWxsIHJlZF0KKyAgICB9CisgICAgcGFjayAkcHJvZ3Jlc3NjYW52IC1zaWRlIHJpZ2h0IC1leHBhbmQgMSAtZmlsbCB4IC1wYWR4IHswIDJ9CisgICAgc2V0IHByb2dyZXNzY29vcmRzIHswIDB9CisgICAgc2V0IGZwcm9nY29vcmQgMAorICAgIHNldCBycHJvZ2Nvb3JkIDAKKyAgICBiaW5kICRwcm9ncmVzc2NhbnYgPENvbmZpZ3VyZT4gYWRqdXN0cHJvZ3Jlc3MKKyAgICBzZXQgbGFzdHByb2d1cGRhdGUgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBwcm9ndXBkYXRlcGVuZGluZyAwCisKKyAgICAjIGJ1aWxkIHVwIHRoZSBib3R0b20gYmFyIG9mIHVwcGVyIHdpbmRvdworICAgICR7TlN9OjpsYWJlbCAudGYubGJhci5mbGFiZWwgLXRleHQgIlttYyAiRmluZCJdICIKKworICAgIHNldCBibV9kb3duX2RhdGEgeworCSNkZWZpbmUgZG93bl93aWR0aCAxNgorCSNkZWZpbmUgZG93bl9oZWlnaHQgMTYKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBkb3duX2JpdHNbXSA9IHsKKwkweDgwLCAweDAxLCAweDgwLCAweDAxLCAweDgwLCAweDAxLCAweDgwLCAweDAxLAorCTB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsCisJMHg4NywgMHhlMSwgMHg4ZSwgMHg3MSwgMHg5YywgMHgzOSwgMHhiOCwgMHgxZCwKKwkweGYwLCAweDBmLCAweGUwLCAweDA3LCAweGMwLCAweDAzLCAweDgwLCAweDAxfTsKKyAgICB9CisgICAgaW1hZ2UgY3JlYXRlIGJpdG1hcCBibS1kb3duIC1kYXRhICRibV9kb3duX2RhdGEgLWZvcmVncm91bmQgJHVpZmdjb2xvcgorICAgICR7TlN9OjpidXR0b24gLnRmLmxiYXIuZm5leHQgLXdpZHRoIDI2IC1jb21tYW5kIHtkb2ZpbmQgMSAxfQorICAgIC50Zi5sYmFyLmZuZXh0IGNvbmZpZ3VyZSAtaW1hZ2UgYm0tZG93bgorCisgICAgc2V0IGJtX3VwX2RhdGEgeworCSNkZWZpbmUgdXBfd2lkdGggMTYKKwkjZGVmaW5lIHVwX2hlaWdodCAxNgorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHVwX2JpdHNbXSA9IHsKKwkweDgwLCAweDAxLCAweGMwLCAweDAzLCAweGUwLCAweDA3LCAweGYwLCAweDBmLAorCTB4YjgsIDB4MWQsIDB4OWMsIDB4MzksIDB4OGUsIDB4NzEsIDB4ODcsIDB4ZTEsCisJMHg4MCwgMHgwMSwgMHg4MCwgMHgwMSwgMHg4MCwgMHgwMSwgMHg4MCwgMHgwMSwKKwkweDgwLCAweDAxLCAweDgwLCAweDAxLCAweDgwLCAweDAxLCAweDgwLCAweDAxfTsKKyAgICB9CisgICAgaW1hZ2UgY3JlYXRlIGJpdG1hcCBibS11cCAtZGF0YSAkYm1fdXBfZGF0YSAtZm9yZWdyb3VuZCAkdWlmZ2NvbG9yCisgICAgJHtOU306OmJ1dHRvbiAudGYubGJhci5mcHJldiAtd2lkdGggMjYgLWNvbW1hbmQge2RvZmluZCAtMSAxfQorICAgIC50Zi5sYmFyLmZwcmV2IGNvbmZpZ3VyZSAtaW1hZ2UgYm0tdXAKKworICAgICR7TlN9OjpsYWJlbCAudGYubGJhci5mbGFiMiAtdGV4dCAiIFttYyAiY29tbWl0Il0gIgorCisgICAgcGFjayAudGYubGJhci5mbGFiZWwgLnRmLmxiYXIuZm5leHQgLnRmLmxiYXIuZnByZXYgLnRmLmxiYXIuZmxhYjIgXAorCS1zaWRlIGxlZnQgLWZpbGwgeQorICAgIHNldCBnZHR0eXBlIFttYyAiY29udGFpbmluZzoiXQorICAgIHNldCBnbSBbbWFrZWRyb3BsaXN0IC50Zi5sYmFyLmdkdHR5cGUgZ2R0dHlwZSBcCisJCVttYyAiY29udGFpbmluZzoiXSBcCisJCVttYyAidG91Y2hpbmcgcGF0aHM6Il0gXAorCQlbbWMgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6Il0gXAorCQlbbWMgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiJdXQorICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBnZHR0eXBlIHdyaXRlIGdkdHR5cGVfY2hhbmdlCisgICAgcGFjayAudGYubGJhci5nZHR0eXBlIC1zaWRlIGxlZnQgLWZpbGwgeQorCisgICAgc2V0IGZpbmRzdHJpbmcge30KKyAgICBzZXQgZnN0cmluZyAudGYubGJhci5maW5kc3RyaW5nCisgICAgbGFwcGVuZCBlbnRyaWVzICRmc3RyaW5nCisgICAgJHtOU306OmVudHJ5ICRmc3RyaW5nIC13aWR0aCAzMCAtdGV4dHZhcmlhYmxlIGZpbmRzdHJpbmcKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgZmluZHN0cmluZyB3cml0ZSBmaW5kX2NoYW5nZQorICAgIHNldCBmaW5kdHlwZSBbbWMgIkV4YWN0Il0KKyAgICBzZXQgZmluZHR5cGVtZW51IFttYWtlZHJvcGxpc3QgLnRmLmxiYXIuZmluZHR5cGUgXAorCQkJICBmaW5kdHlwZSBbbWMgIkV4YWN0Il0gW21jICJJZ25DYXNlIl0gW21jICJSZWdleHAiXV0KKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgZmluZHR5cGUgd3JpdGUgZmluZGNvbV9jaGFuZ2UKKyAgICBzZXQgZmluZGxvYyBbbWMgIkFsbCBmaWVsZHMiXQorICAgIG1ha2Vkcm9wbGlzdCAudGYubGJhci5maW5kbG9jIGZpbmRsb2MgW21jICJBbGwgZmllbGRzIl0gW21jICJIZWFkbGluZSJdIFwKKwlbbWMgIkNvbW1lbnRzIl0gW21jICJBdXRob3IiXSBbbWMgIkNvbW1pdHRlciJdCisgICAgdHJhY2UgYWRkIHZhcmlhYmxlIGZpbmRsb2Mgd3JpdGUgZmluZF9jaGFuZ2UKKyAgICBwYWNrIC50Zi5sYmFyLmZpbmRsb2MgLXNpZGUgcmlnaHQKKyAgICBwYWNrIC50Zi5sYmFyLmZpbmR0eXBlIC1zaWRlIHJpZ2h0CisgICAgcGFjayAkZnN0cmluZyAtc2lkZSBsZWZ0IC1leHBhbmQgMSAtZmlsbCB4CisKKyAgICAjIEZpbmlzaCBwdXR0aW5nIHRoZSB1cHBlciBoYWxmIG9mIHRoZSB2aWV3ZXIgdG9nZXRoZXIKKyAgICBwYWNrIC50Zi5sYmFyIC1pbiAudGYgLXNpZGUgYm90dG9tIC1maWxsIHgKKyAgICBwYWNrIC50Zi5iYXIgLWluIC50ZiAtc2lkZSBib3R0b20gLWZpbGwgeAorICAgIHBhY2sgLnRmLmhpc3RmcmFtZSAtZmlsbCBib3RoIC1zaWRlIHRvcCAtZXhwYW5kIDEKKyAgICAuY3RvcCBhZGQgLnRmCisgICAgaWYgeyEkdXNlX3R0a30geworCS5jdG9wIHBhbmVjb25maWd1cmUgLnRmIC1oZWlnaHQgJGdlb21ldHJ5KHRvcGhlaWdodCkKKwkuY3RvcCBwYW5lY29uZmlndXJlIC50ZiAtd2lkdGggJGdlb21ldHJ5KHRvcHdpZHRoKQorICAgIH0KKworICAgICMgbm93IGJ1aWxkIHVwIHRoZSBib3R0b20KKyAgICAke05TfTo6cGFuZWR3aW5kb3cgLnB3Ym90dG9tIC1vcmllbnQgaG9yaXpvbnRhbAorCisgICAgIyBsb3dlciBsZWZ0LCBhIHRleHQgYm94IG92ZXIgc2VhcmNoIGJhciwgc2Nyb2xsIGJhciB0byB0aGUgcmlnaHQKKyAgICAjIGlmIHdlIGtub3cgd2luZG93IGhlaWdodCwgdGhlbiB0aGF0IHdpbGwgc2V0IHRoZSBsb3dlciB0ZXh0IGhlaWdodCwgb3RoZXJ3aXNlCisgICAgIyB3ZSBzZXQgbG93ZXIgdGV4dCBoZWlnaHQgd2hpY2ggd2lsbCBkcml2ZSB3aW5kb3cgaGVpZ2h0CisgICAgaWYge1tpbmZvIGV4aXN0cyBnZW9tZXRyeShtYWluKV19IHsKKwkke05TfTo6ZnJhbWUgLmJsZWZ0IC13aWR0aCAkZ2VvbWV0cnkoYm90d2lkdGgpCisgICAgfSBlbHNlIHsKKwkke05TfTo6ZnJhbWUgLmJsZWZ0IC13aWR0aCAkZ2VvbWV0cnkoYm90d2lkdGgpIC1oZWlnaHQgJGdlb21ldHJ5KGJvdGhlaWdodCkKKyAgICB9CisgICAgJHtOU306OmZyYW1lIC5ibGVmdC50b3AKKyAgICAke05TfTo6ZnJhbWUgLmJsZWZ0Lm1pZAorICAgICR7TlN9OjpmcmFtZSAuYmxlZnQuYm90dG9tCisKKyAgICAjIGdhcCBiZXR3ZWVuIHN1Yi13aWRnZXRzCisgICAgc2V0IHdnYXAgW2ZvbnQgbWVhc3VyZSB1aWZvbnQgImkiXQorCisgICAgJHtOU306OmJ1dHRvbiAuYmxlZnQudG9wLnNlYXJjaCAtdGV4dCBbbWMgIlNlYXJjaCJdIC1jb21tYW5kIGRvc2VhcmNoCisgICAgcGFjayAuYmxlZnQudG9wLnNlYXJjaCAtc2lkZSBsZWZ0IC1wYWR4IDUKKyAgICBzZXQgc3N0cmluZyAuYmxlZnQudG9wLnNzdHJpbmcKKyAgICBzZXQgc2VhcmNoc3RyaW5nICIiCisgICAgJHtOU306OmVudHJ5ICRzc3RyaW5nIC13aWR0aCAyMCAtdGV4dHZhcmlhYmxlIHNlYXJjaHN0cmluZworICAgIGxhcHBlbmQgZW50cmllcyAkc3N0cmluZworICAgIHRyYWNlIGFkZCB2YXJpYWJsZSBzZWFyY2hzdHJpbmcgd3JpdGUgaW5jcnNlYXJjaAorICAgIHBhY2sgJHNzdHJpbmcgLXNpZGUgbGVmdCAtZXhwYW5kIDEgLWZpbGwgeAorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAuYmxlZnQubWlkLmRpZmYgLXRleHQgW21jICJEaWZmIl0gXAorCS1jb21tYW5kIGNoYW5nZWRpZmZkaXNwIC12YXJpYWJsZSBkaWZmZWxpZGUgLXZhbHVlIHswIDB9CisgICAgJHtOU306OnJhZGlvYnV0dG9uIC5ibGVmdC5taWQub2xkIC10ZXh0IFttYyAiT2xkIHZlcnNpb24iXSBcCisJLWNvbW1hbmQgY2hhbmdlZGlmZmRpc3AgLXZhcmlhYmxlIGRpZmZlbGlkZSAtdmFsdWUgezAgMX0KKyAgICAke05TfTo6cmFkaW9idXR0b24gLmJsZWZ0Lm1pZC5uZXcgLXRleHQgW21jICJOZXcgdmVyc2lvbiJdIFwKKwktY29tbWFuZCBjaGFuZ2VkaWZmZGlzcCAtdmFyaWFibGUgZGlmZmVsaWRlIC12YWx1ZSB7MSAwfQorCisgICAgJHtOU306OmxhYmVsIC5ibGVmdC5taWQubGFiZWxkaWZmY29udGV4dCAtdGV4dCAiICAgICAgW21jICJMaW5lcyBvZiBjb250ZXh0Il06ICIKKyAgICBwYWNrIC5ibGVmdC5taWQuZGlmZiAuYmxlZnQubWlkLm9sZCAuYmxlZnQubWlkLm5ldyAtc2lkZSBsZWZ0IC1pcGFkeCAkd2dhcAorICAgIHNwaW5ib3ggLmJsZWZ0Lm1pZC5kaWZmY29udGV4dCAtd2lkdGggNSBcCisJLWZyb20gMCAtaW5jcmVtZW50IDEgLXRvIDEwMDAwMDAwIFwKKwktdmFsaWRhdGUgYWxsIC12YWxpZGF0ZWNvbW1hbmQgImRpZmZjb250ZXh0dmFsaWRhdGUgJVAiIFwKKwktdGV4dHZhcmlhYmxlIGRpZmZjb250ZXh0c3RyaW5nCisgICAgLmJsZWZ0Lm1pZC5kaWZmY29udGV4dCBzZXQgJGRpZmZjb250ZXh0CisgICAgdHJhY2UgYWRkIHZhcmlhYmxlIGRpZmZjb250ZXh0c3RyaW5nIHdyaXRlIGRpZmZjb250ZXh0Y2hhbmdlCisgICAgbGFwcGVuZCBlbnRyaWVzIC5ibGVmdC5taWQuZGlmZmNvbnRleHQKKyAgICBwYWNrIC5ibGVmdC5taWQubGFiZWxkaWZmY29udGV4dCAuYmxlZnQubWlkLmRpZmZjb250ZXh0IC1zaWRlIGxlZnQgLWlwYWR4ICR3Z2FwCisgICAgJHtOU306OmNoZWNrYnV0dG9uIC5ibGVmdC5taWQuaWduc3BhY2UgLXRleHQgW21jICJJZ25vcmUgc3BhY2UgY2hhbmdlIl0gXAorCS1jb21tYW5kIGNoYW5nZWlnbm9yZXNwYWNlIC12YXJpYWJsZSBpZ25vcmVzcGFjZQorICAgIHBhY2sgLmJsZWZ0Lm1pZC5pZ25zcGFjZSAtc2lkZSBsZWZ0IC1wYWR4IDUKKworICAgIHNldCB3b3JkZGlmZiBbbWMgIkxpbmUgZGlmZiJdCisgICAgaWYge1twYWNrYWdlIHZjb21wYXJlICRnaXRfdmVyc2lvbiAiMS43LjIiXSA+PSAwfSB7CisJbWFrZWRyb3BsaXN0IC5ibGVmdC5taWQud29yZGRpZmYgd29yZGRpZmYgW21jICJMaW5lIGRpZmYiXSBcCisJICAgIFttYyAiTWFya3VwIHdvcmRzIl0gW21jICJDb2xvciB3b3JkcyJdCisJdHJhY2UgYWRkIHZhcmlhYmxlIHdvcmRkaWZmIHdyaXRlIGNoYW5nZXdvcmRkaWZmCisJcGFjayAuYmxlZnQubWlkLndvcmRkaWZmIC1zaWRlIGxlZnQgLXBhZHggNQorICAgIH0KKworICAgIHNldCBjdGV4dCAuYmxlZnQuYm90dG9tLmN0ZXh0CisgICAgdGV4dCAkY3RleHQgLWJhY2tncm91bmQgJGJnY29sb3IgLWZvcmVncm91bmQgJGZnY29sb3IgXAorCS1zdGF0ZSBkaXNhYmxlZCAtdW5kbyAwIC1mb250IHRleHRmb250IFwKKwkteXNjcm9sbGNvbW1hbmQgc2Nyb2xsdGV4dCAtd3JhcCBub25lIFwKKwkteHNjcm9sbGNvbW1hbmQgIi5ibGVmdC5ib3R0b20uc2Job3Jpem9udGFsIHNldCIKKyAgICBpZiB7JGhhdmVfdGs4NX0geworCSRjdGV4dCBjb25mIC10YWJzdHlsZSB3b3JkcHJvY2Vzc29yCisgICAgfQorICAgICR7TlN9OjpzY3JvbGxiYXIgLmJsZWZ0LmJvdHRvbS5zYiAtY29tbWFuZCAiJGN0ZXh0IHl2aWV3IgorICAgICR7TlN9OjpzY3JvbGxiYXIgLmJsZWZ0LmJvdHRvbS5zYmhvcml6b250YWwgLWNvbW1hbmQgIiRjdGV4dCB4dmlldyIgLW9yaWVudCBoCisgICAgcGFjayAuYmxlZnQudG9wIC1zaWRlIHRvcCAtZmlsbCB4CisgICAgcGFjayAuYmxlZnQubWlkIC1zaWRlIHRvcCAtZmlsbCB4CisgICAgZ3JpZCAkY3RleHQgLmJsZWZ0LmJvdHRvbS5zYiAtc3RpY2t5IG5zZXcKKyAgICBncmlkIC5ibGVmdC5ib3R0b20uc2Job3Jpem9udGFsIC1zdGlja3kgZXcKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAuYmxlZnQuYm90dG9tIDAgLXdlaWdodCAxCisgICAgZ3JpZCByb3djb25maWd1cmUgLmJsZWZ0LmJvdHRvbSAwIC13ZWlnaHQgMQorICAgIGdyaWQgcm93Y29uZmlndXJlIC5ibGVmdC5ib3R0b20gMSAtd2VpZ2h0IDAKKyAgICBwYWNrIC5ibGVmdC5ib3R0b20gLXNpZGUgdG9wIC1maWxsIGJvdGggLWV4cGFuZCAxCisgICAgbGFwcGVuZCBiZ2xpc3QgJGN0ZXh0CisgICAgbGFwcGVuZCBmZ2xpc3QgJGN0ZXh0CisKKyAgICAkY3RleHQgdGFnIGNvbmYgY29tbWVudCAtd3JhcCAkd3JhcGNvbW1lbnQKKyAgICAkY3RleHQgdGFnIGNvbmYgZmlsZXNlcCAtZm9udCB0ZXh0Zm9udGJvbGQgLWZvcmUgJGZpbGVzZXBmZ2NvbG9yIC1iYWNrICRmaWxlc2VwYmdjb2xvcgorICAgICRjdGV4dCB0YWcgY29uZiBodW5rc2VwIC1mb3JlIFtsaW5kZXggJGRpZmZjb2xvcnMgMl0KKyAgICAkY3RleHQgdGFnIGNvbmYgZDAgLWZvcmUgW2xpbmRleCAkZGlmZmNvbG9ycyAwXQorICAgICRjdGV4dCB0YWcgY29uZiBkcmVzdWx0IC1mb3JlIFtsaW5kZXggJGRpZmZjb2xvcnMgMV0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTAgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgMF0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTEgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgMV0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTIgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgMl0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTMgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgM10KKyAgICAkY3RleHQgdGFnIGNvbmYgbTQgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgNF0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTUgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgNV0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTYgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgNl0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTcgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgN10KKyAgICAkY3RleHQgdGFnIGNvbmYgbTggLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgOF0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTkgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgOV0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTEwIC1mb3JlIFtsaW5kZXggJG1lcmdlY29sb3JzIDEwXQorICAgICRjdGV4dCB0YWcgY29uZiBtMTEgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgMTFdCisgICAgJGN0ZXh0IHRhZyBjb25mIG0xMiAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyAxMl0KKyAgICAkY3RleHQgdGFnIGNvbmYgbTEzIC1mb3JlIFtsaW5kZXggJG1lcmdlY29sb3JzIDEzXQorICAgICRjdGV4dCB0YWcgY29uZiBtMTQgLWZvcmUgW2xpbmRleCAkbWVyZ2Vjb2xvcnMgMTRdCisgICAgJGN0ZXh0IHRhZyBjb25mIG0xNSAtZm9yZSBbbGluZGV4ICRtZXJnZWNvbG9ycyAxNV0KKyAgICAkY3RleHQgdGFnIGNvbmYgbW1heCAtZm9yZSBkYXJrZ3JleQorICAgIHNldCBtZXJnZW1heCAxNgorICAgICRjdGV4dCB0YWcgY29uZiBtcmVzdWx0IC1mb250IHRleHRmb250Ym9sZAorICAgICRjdGV4dCB0YWcgY29uZiBtc2VwIC1mb250IHRleHRmb250Ym9sZAorICAgICRjdGV4dCB0YWcgY29uZiBmb3VuZCAtYmFjayAkZm91bmRiZ2NvbG9yCisgICAgJGN0ZXh0IHRhZyBjb25mIGN1cnJlbnRzZWFyY2hoaXQgLWJhY2sgJGN1cnJlbnRzZWFyY2hoaXRiZ2NvbG9yCisgICAgJGN0ZXh0IHRhZyBjb25mIHd3cmFwIC13cmFwIHdvcmQgLWxtYXJnaW4yIDFjCisgICAgJGN0ZXh0IHRhZyBjb25mIGJvbGQgLWZvbnQgdGV4dGZvbnRib2xkCisKKyAgICAucHdib3R0b20gYWRkIC5ibGVmdAorICAgIGlmIHshJHVzZV90dGt9IHsKKwkucHdib3R0b20gcGFuZWNvbmZpZ3VyZSAuYmxlZnQgLXdpZHRoICRnZW9tZXRyeShib3R3aWR0aCkKKyAgICB9CisKKyAgICAjIGxvd2VyIHJpZ2h0CisgICAgJHtOU306OmZyYW1lIC5icmlnaHQKKyAgICAke05TfTo6ZnJhbWUgLmJyaWdodC5tb2RlCisgICAgJHtOU306OnJhZGlvYnV0dG9uIC5icmlnaHQubW9kZS5wYXRjaCAtdGV4dCBbbWMgIlBhdGNoIl0gXAorCS1jb21tYW5kIHJlc2VsZWN0bGluZSAtdmFyaWFibGUgY21pdG1vZGUgLXZhbHVlICJwYXRjaCIKKyAgICAke05TfTo6cmFkaW9idXR0b24gLmJyaWdodC5tb2RlLnRyZWUgLXRleHQgW21jICJUcmVlIl0gXAorCS1jb21tYW5kIHJlc2VsZWN0bGluZSAtdmFyaWFibGUgY21pdG1vZGUgLXZhbHVlICJ0cmVlIgorICAgIGdyaWQgLmJyaWdodC5tb2RlLnBhdGNoIC5icmlnaHQubW9kZS50cmVlIC1zdGlja3kgZXcKKyAgICBwYWNrIC5icmlnaHQubW9kZSAtc2lkZSB0b3AgLWZpbGwgeAorICAgIHNldCBjZmxpc3QgLmJyaWdodC5jZmlsZXMKKyAgICBzZXQgaW5kZW50IFtmb250IG1lYXN1cmUgbWFpbmZvbnQgIm5uIl0KKyAgICB0ZXh0ICRjZmxpc3QgXAorCS1zZWxlY3RiYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yIFwKKwktYmFja2dyb3VuZCAkYmdjb2xvciAtZm9yZWdyb3VuZCAkZmdjb2xvciBcCisJLWZvbnQgbWFpbmZvbnQgXAorCS10YWJzIFtsaXN0ICRpbmRlbnQgW2V4cHIgezIgKiAkaW5kZW50fV1dIFwKKwkteXNjcm9sbGNvbW1hbmQgIi5icmlnaHQuc2Igc2V0IiBcCisJLWN1cnNvciBbLiBjZ2V0IC1jdXJzb3JdIFwKKwktc3BhY2luZzEgMSAtc3BhY2luZzMgMQorICAgIGxhcHBlbmQgYmdsaXN0ICRjZmxpc3QKKyAgICBsYXBwZW5kIGZnbGlzdCAkY2ZsaXN0CisgICAgJHtOU306OnNjcm9sbGJhciAuYnJpZ2h0LnNiIC1jb21tYW5kICIkY2ZsaXN0IHl2aWV3IgorICAgIHBhY2sgLmJyaWdodC5zYiAtc2lkZSByaWdodCAtZmlsbCB5CisgICAgcGFjayAkY2ZsaXN0IC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKKyAgICAkY2ZsaXN0IHRhZyBjb25maWd1cmUgaGlnaGxpZ2h0IFwKKwktYmFja2dyb3VuZCBbJGNmbGlzdCBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXQorICAgICRjZmxpc3QgdGFnIGNvbmZpZ3VyZSBib2xkIC1mb250IG1haW5mb250Ym9sZAorCisgICAgLnB3Ym90dG9tIGFkZCAuYnJpZ2h0CisgICAgLmN0b3AgYWRkIC5wd2JvdHRvbQorCisgICAgIyByZXN0b3JlIHdpbmRvdyB3aWR0aCAmIGhlaWdodCBpZiBrbm93bgorICAgIGlmIHtbaW5mbyBleGlzdHMgZ2VvbWV0cnkobWFpbildfSB7CisJaWYge1tzY2FuICRnZW9tZXRyeShtYWluKSAiJWR4JWQiIHcgaF0gPj0gMn0geworCSAgICBpZiB7JHcgPiBbd2luZm8gc2NyZWVud2lkdGggLl19IHsKKwkJc2V0IHcgW3dpbmZvIHNjcmVlbndpZHRoIC5dCisJICAgIH0KKwkgICAgaWYgeyRoID4gW3dpbmZvIHNjcmVlbmhlaWdodCAuXX0geworCQlzZXQgaCBbd2luZm8gc2NyZWVuaGVpZ2h0IC5dCisJICAgIH0KKwkgICAgd20gZ2VvbWV0cnkgLiAiJHt3fXgkaCIKKwl9CisgICAgfQorCisgICAgaWYge1tpbmZvIGV4aXN0cyBnZW9tZXRyeShzdGF0ZSldICYmICRnZW9tZXRyeShzdGF0ZSkgZXEgInpvb21lZCJ9IHsKKyAgICAgICAgd20gc3RhdGUgLiAkZ2VvbWV0cnkoc3RhdGUpCisgICAgfQorCisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxIHthcXVhfX0geworICAgICAgICBzZXQgTTFCIE0xCisgICAgICAgIHNldCA6OkJNICIzIgorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCBNMUIgQ29udHJvbAorICAgICAgICBzZXQgOjpCTSAiMiIKKyAgICB9CisKKyAgICBpZiB7JHVzZV90dGt9IHsKKyAgICAgICAgYmluZCAuY3RvcCA8TWFwPiB7CisgICAgICAgICAgICBiaW5kICVXIDxNYXA+IHt9CisgICAgICAgICAgICAlVyBzYXNocG9zIDAgJDo6Z2VvbWV0cnkodG9waGVpZ2h0KQorICAgICAgICB9CisgICAgICAgIGJpbmQgLnB3Ym90dG9tIDxNYXA+IHsKKyAgICAgICAgICAgIGJpbmQgJVcgPE1hcD4ge30KKyAgICAgICAgICAgICVXIHNhc2hwb3MgMCAkOjpnZW9tZXRyeShib3R3aWR0aCkKKyAgICAgICAgfQorICAgIH0KKworICAgIGJpbmQgLnB3Ym90dG9tIDxDb25maWd1cmU+IHtyZXNpemVjZGV0cGFuZXMgJVcgJXd9CisgICAgcGFjayAuY3RvcCAtZmlsbCBib3RoIC1leHBhbmQgMQorICAgIGJpbmRhbGwgPDE+IHtzZWxjYW52bGluZSAlVyAleCAleX0KKyAgICAjYmluZGFsbCA8QjEtTW90aW9uPiB7c2VsY2FudmxpbmUgJVcgJXggJXl9CisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dID09ICJ3aW4zMiJ9IHsKKwliaW5kIC4gPE1vdXNlV2hlZWw+IHsgd2luZG93c19tb3VzZXdoZWVsX3JlZGlyZWN0b3IgJVcgJVggJVkgJUQgfQorCWJpbmQgJGN0ZXh0IDxNb3VzZVdoZWVsPiB7IHdpbmRvd3NfbW91c2V3aGVlbF9yZWRpcmVjdG9yICVXICVYICVZICVEIDsgYnJlYWsgfQorICAgIH0gZWxzZSB7CisJYmluZGFsbCA8QnV0dG9uUmVsZWFzZS00PiAiYWxsY2FudnMgeXZpZXcgc2Nyb2xsIC01IHVuaXRzIgorCWJpbmRhbGwgPEJ1dHRvblJlbGVhc2UtNT4gImFsbGNhbnZzIHl2aWV3IHNjcm9sbCA1IHVuaXRzIgorCWJpbmQgJGN0ZXh0IDxCdXR0b24+IHsKKwkgICAgaWYgeyIlYiIgZXEgNn0geworCQkkY3RleHQgeHZpZXcgc2Nyb2xsIC01IHVuaXRzCisJICAgIH0gZWxzZWlmIHsiJWIiIGVxIDd9IHsKKwkJJGN0ZXh0IHh2aWV3IHNjcm9sbCA1IHVuaXRzCisJICAgIH0KKwl9CisgICAgICAgIGlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAiYXF1YSJ9IHsKKyAgICAgICAgICAgIGJpbmRhbGwgPE1vdXNlV2hlZWw+IHsKKyAgICAgICAgICAgICAgICBzZXQgZGVsdGEgW2V4cHIgey0gKCVEKX1dCisgICAgICAgICAgICAgICAgYWxsY2FudnMgeXZpZXcgc2Nyb2xsICRkZWx0YSB1bml0cworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmluZGFsbCA8U2hpZnQtTW91c2VXaGVlbD4geworICAgICAgICAgICAgICAgIHNldCBkZWx0YSBbZXhwciB7LSAoJUQpfV0KKyAgICAgICAgICAgICAgICAkY2FudiB4dmlldyBzY3JvbGwgJGRlbHRhIHVuaXRzCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgYmluZGFsbCA8JDo6Qk0+ICJjYW52c2NhbiBtYXJrICVXICV4ICV5IgorICAgIGJpbmRhbGwgPEIkOjpCTS1Nb3Rpb24+ICJjYW52c2NhbiBkcmFndG8gJVcgJXggJXkiCisgICAgYmluZCBhbGwgPCRNMUItS2V5LXc+IHtkZXN0cm95IFt3aW5mbyB0b3BsZXZlbCAlV119CisgICAgYmluZCAuIDwkTTFCLUtleS13PiBkb3F1aXQKKyAgICBiaW5ka2V5IDxIb21lPiBzZWxmaXJzdGxpbmUKKyAgICBiaW5ka2V5IDxFbmQ+IHNlbGxhc3RsaW5lCisgICAgYmluZCAuIDxLZXktVXA+ICJzZWxuZXh0bGluZSAtMSIKKyAgICBiaW5kIC4gPEtleS1Eb3duPiAic2VsbmV4dGxpbmUgMSIKKyAgICBiaW5kIC4gPFNoaWZ0LUtleS1VcD4gImRvZmluZCAtMSAwIgorICAgIGJpbmQgLiA8U2hpZnQtS2V5LURvd24+ICJkb2ZpbmQgMSAwIgorICAgIGJpbmRrZXkgPEtleS1SaWdodD4gImdvZm9ydyIKKyAgICBiaW5ka2V5IDxLZXktTGVmdD4gImdvYmFjayIKKyAgICBiaW5kIC4gPEtleS1Qcmlvcj4gInNlbG5leHRwYWdlIC0xIgorICAgIGJpbmQgLiA8S2V5LU5leHQ+ICJzZWxuZXh0cGFnZSAxIgorICAgIGJpbmQgLiA8JE0xQi1Ib21lPiAiYWxsY2FudnMgeXZpZXcgbW92ZXRvIDAuMCIKKyAgICBiaW5kIC4gPCRNMUItRW5kPiAiYWxsY2FudnMgeXZpZXcgbW92ZXRvIDEuMCIKKyAgICBiaW5kIC4gPCRNMUItS2V5LVVwPiAiYWxsY2FudnMgeXZpZXcgc2Nyb2xsIC0xIHVuaXRzIgorICAgIGJpbmQgLiA8JE0xQi1LZXktRG93bj4gImFsbGNhbnZzIHl2aWV3IHNjcm9sbCAxIHVuaXRzIgorICAgIGJpbmQgLiA8JE0xQi1LZXktUHJpb3I+ICJhbGxjYW52cyB5dmlldyBzY3JvbGwgLTEgcGFnZXMiCisgICAgYmluZCAuIDwkTTFCLUtleS1OZXh0PiAiYWxsY2FudnMgeXZpZXcgc2Nyb2xsIDEgcGFnZXMiCisgICAgYmluZGtleSA8S2V5LURlbGV0ZT4gIiRjdGV4dCB5dmlldyBzY3JvbGwgLTEgcGFnZXMiCisgICAgYmluZGtleSA8S2V5LUJhY2tTcGFjZT4gIiRjdGV4dCB5dmlldyBzY3JvbGwgLTEgcGFnZXMiCisgICAgYmluZGtleSA8S2V5LXNwYWNlPiAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAxIHBhZ2VzIgorICAgIGJpbmRrZXkgcCAic2VsbmV4dGxpbmUgLTEiCisgICAgYmluZGtleSBuICJzZWxuZXh0bGluZSAxIgorICAgIGJpbmRrZXkgeiAiZ29iYWNrIgorICAgIGJpbmRrZXkgeCAiZ29mb3J3IgorICAgIGJpbmRrZXkgayAic2VsbmV4dGxpbmUgLTEiCisgICAgYmluZGtleSBqICJzZWxuZXh0bGluZSAxIgorICAgIGJpbmRrZXkgaCAiZ29iYWNrIgorICAgIGJpbmRrZXkgbCAiZ29mb3J3IgorICAgIGJpbmRrZXkgYiBwcmV2ZmlsZQorICAgIGJpbmRrZXkgZCAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAxOCB1bml0cyIKKyAgICBiaW5ka2V5IHUgIiRjdGV4dCB5dmlldyBzY3JvbGwgLTE4IHVuaXRzIgorICAgIGJpbmRrZXkgZyB7JHNoYTFlbnRyeSBkZWxldGUgMCBlbmQ7IGZvY3VzICRzaGExZW50cnl9CisgICAgYmluZGtleSAvIHtmb2N1cyAkZnN0cmluZ30KKyAgICBiaW5ka2V5IDxLZXktS1BfRGl2aWRlPiB7Zm9jdXMgJGZzdHJpbmd9CisgICAgYmluZGtleSA8S2V5LVJldHVybj4ge2RvZmluZCAxIDF9CisgICAgYmluZGtleSA/IHtkb2ZpbmQgLTEgMX0KKyAgICBiaW5ka2V5IGYgbmV4dGZpbGUKKyAgICBiaW5kIC4gPEY1PiB1cGRhdGVjb21taXRzCisgICAgYmluZG1vZGZ1bmN0aW9ua2V5IFNoaWZ0IDUgcmVsb2FkY29tbWl0cworICAgIGJpbmQgLiA8RjI+IHNob3dyZWZzCisgICAgYmluZG1vZGZ1bmN0aW9ua2V5IFNoaWZ0IDQge25ld3ZpZXcgMH0KKyAgICBiaW5kIC4gPEY0PiBlZGl0X29yX25ld3ZpZXcKKyAgICBiaW5kIC4gPCRNMUItcT4gZG9xdWl0CisgICAgYmluZCAuIDwkTTFCLWY+IHtkb2ZpbmQgMSAxfQorICAgIGJpbmQgLiA8JE0xQi1nPiB7ZG9maW5kIDEgMH0KKyAgICBiaW5kIC4gPCRNMUItcj4gZG9zZWFyY2hiYWNrCisgICAgYmluZCAuIDwkTTFCLXM+IGRvc2VhcmNoCisgICAgYmluZCAuIDwkTTFCLWVxdWFsPiB7aW5jcmZvbnQgMX0KKyAgICBiaW5kIC4gPCRNMUItcGx1cz4ge2luY3Jmb250IDF9CisgICAgYmluZCAuIDwkTTFCLUtQX0FkZD4ge2luY3Jmb250IDF9CisgICAgYmluZCAuIDwkTTFCLW1pbnVzPiB7aW5jcmZvbnQgLTF9CisgICAgYmluZCAuIDwkTTFCLUtQX1N1YnRyYWN0PiB7aW5jcmZvbnQgLTF9CisgICAgd20gcHJvdG9jb2wgLiBXTV9ERUxFVEVfV0lORE9XIGRvcXVpdAorICAgIGJpbmQgLiA8RGVzdHJveT4ge3N0b3BfYmFja2VuZHN9CisgICAgYmluZCAuIDxCdXR0b24tMT4gImNsaWNrICVXIgorICAgIGJpbmQgJGZzdHJpbmcgPEtleS1SZXR1cm4+IHtkb2ZpbmQgMSAxfQorICAgIGJpbmQgJHNoYTFlbnRyeSA8S2V5LVJldHVybj4ge2dvdG9jb21taXQ7IGJyZWFrfQorICAgIGJpbmQgJHNoYTFlbnRyeSA8PFBhc3RlU2VsZWN0aW9uPj4gY2xlYXJzaGExCisgICAgYmluZCAkc2hhMWVudHJ5IDw8UGFzdGU+PiBjbGVhcnNoYTEKKyAgICBiaW5kICRjZmxpc3QgPDE+IHtzZWxfZmxpc3QgJVcgJXggJXk7IGJyZWFrfQorICAgIGJpbmQgJGNmbGlzdCA8QjEtTW90aW9uPiB7c2VsX2ZsaXN0ICVXICV4ICV5OyBicmVha30KKyAgICBiaW5kICRjZmxpc3QgPEJ1dHRvblJlbGVhc2UtMT4ge3RyZWVjbGljayAlVyAleCAleX0KKyAgICBnbG9iYWwgY3R4YnV0CisgICAgYmluZCAkY2ZsaXN0ICRjdHhidXQge3BvcF9mbGlzdF9tZW51ICVXICVYICVZICV4ICV5fQorICAgIGJpbmQgJGN0ZXh0ICRjdHhidXQge3BvcF9kaWZmX21lbnUgJVcgJVggJVkgJXggJXl9CisgICAgYmluZCAkY3RleHQgPEJ1dHRvbi0xPiB7Zm9jdXMgJVd9CisgICAgYmluZCAkY3RleHQgPDxTZWxlY3Rpb24+PiByZWhpZ2hsaWdodF9zZWFyY2hfcmVzdWx0cworICAgIGZvciB7c2V0IGkgMX0geyRpIDwgMTB9IHtpbmNyIGl9IHsKKwliaW5kIC4gPCRNMUItS2V5LSRpPiBbbGlzdCBnb190b19wYXJlbnQgJGldCisgICAgfQorCisgICAgc2V0IG1haW5jdXJzb3IgWy4gY2dldCAtY3Vyc29yXQorICAgIHNldCB0ZXh0Y3Vyc29yIFskY3RleHQgY2dldCAtY3Vyc29yXQorICAgIHNldCBjdXJ0ZXh0Y3Vyc29yICR0ZXh0Y3Vyc29yCisKKyAgICBzZXQgcm93Y3R4bWVudSAucm93Y3R4bWVudQorICAgIG1ha2VtZW51ICRyb3djdHhtZW51IHsKKwl7bWMgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIgY29tbWFuZCB7ZGlmZnZzc2VsIDB9fQorCXttYyAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIiBjb21tYW5kIHtkaWZmdnNzZWwgMX19CisJe21jICJNYWtlIHBhdGNoIiBjb21tYW5kIG1rcGF0Y2h9CisJe21jICJDcmVhdGUgdGFnIiBjb21tYW5kIG1rdGFnfQorCXttYyAiQ29weSBjb21taXQgc3VtbWFyeSIgY29tbWFuZCBjb3B5c3VtbWFyeX0KKwl7bWMgIldyaXRlIGNvbW1pdCB0byBmaWxlIiBjb21tYW5kIHdyaXRlY29tbWl0fQorCXttYyAiQ3JlYXRlIG5ldyBicmFuY2giIGNvbW1hbmQgbWticmFuY2h9CisJe21jICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIgY29tbWFuZCBjaGVycnlwaWNrfQorCXttYyAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIgY29tbWFuZCByZXNldGhlYWR9CisJe21jICJNYXJrIHRoaXMgY29tbWl0IiBjb21tYW5kIG1hcmtoZXJlfQorCXttYyAiUmV0dXJuIHRvIG1hcmsiIGNvbW1hbmQgZ290b21hcmt9CisJe21jICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIgY29tbWFuZCBmaW5kX2NvbW1vbl9kZXNjfQorCXttYyAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiIGNvbW1hbmQgY29tcGFyZV9jb21taXRzfQorCXttYyAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiIGNvbW1hbmQge2RpZmZ2c21hcmsgMH19CisJe21jICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIgY29tbWFuZCB7ZGlmZnZzbWFyayAxfX0KKwl7bWMgIlJldmVydCB0aGlzIGNvbW1pdCIgY29tbWFuZCByZXZlcnR9CisgICAgfQorICAgICRyb3djdHhtZW51IGNvbmZpZ3VyZSAtdGVhcm9mZiAwCisKKyAgICBzZXQgZmFrZXJvd21lbnUgLmZha2Vyb3dtZW51CisgICAgbWFrZW1lbnUgJGZha2Vyb3dtZW51IHsKKwl7bWMgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIgY29tbWFuZCB7ZGlmZnZzc2VsIDB9fQorCXttYyAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIiBjb21tYW5kIHtkaWZmdnNzZWwgMX19CisJe21jICJNYWtlIHBhdGNoIiBjb21tYW5kIG1rcGF0Y2h9CisJe21jICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIgY29tbWFuZCB7ZGlmZnZzbWFyayAwfX0KKwl7bWMgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIiBjb21tYW5kIHtkaWZmdnNtYXJrIDF9fQorICAgIH0KKyAgICAkZmFrZXJvd21lbnUgY29uZmlndXJlIC10ZWFyb2ZmIDAKKworICAgIHNldCBoZWFkY3R4bWVudSAuaGVhZGN0eG1lbnUKKyAgICBtYWtlbWVudSAkaGVhZGN0eG1lbnUgeworCXttYyAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIiBjb21tYW5kIGNvYnJhbmNofQorCXttYyAiUmVuYW1lIHRoaXMgYnJhbmNoIiBjb21tYW5kIG12YnJhbmNofQorCXttYyAiUmVtb3ZlIHRoaXMgYnJhbmNoIiBjb21tYW5kIHJtYnJhbmNofQorCXttYyAiQ29weSBicmFuY2ggbmFtZSIgY29tbWFuZCB7Y2xpcGJvYXJkIGNsZWFyOyBjbGlwYm9hcmQgYXBwZW5kICRoZWFkbWVudWhlYWR9fQorICAgIH0KKyAgICAkaGVhZGN0eG1lbnUgY29uZmlndXJlIC10ZWFyb2ZmIDAKKworICAgIGdsb2JhbCBmbGlzdF9tZW51CisgICAgc2V0IGZsaXN0X21lbnUgLmZsaXN0Y3R4bWVudQorICAgIG1ha2VtZW51ICRmbGlzdF9tZW51IHsKKwl7bWMgIkhpZ2hsaWdodCB0aGlzIHRvbyIgY29tbWFuZCB7Zmxpc3RfaGwgMH19CisJe21jICJIaWdobGlnaHQgdGhpcyBvbmx5IiBjb21tYW5kIHtmbGlzdF9obCAxfX0KKwl7bWMgIkV4dGVybmFsIGRpZmYiIGNvbW1hbmQge2V4dGVybmFsX2RpZmZ9fQorCXttYyAiQmxhbWUgcGFyZW50IGNvbW1pdCIgY29tbWFuZCB7ZXh0ZXJuYWxfYmxhbWUgMX19CisJe21jICJDb3B5IHBhdGgiIGNvbW1hbmQge2NsaXBib2FyZCBjbGVhcjsgY2xpcGJvYXJkIGFwcGVuZCAkZmxpc3RfbWVudV9maWxlfX0KKyAgICB9CisgICAgJGZsaXN0X21lbnUgY29uZmlndXJlIC10ZWFyb2ZmIDAKKworICAgIGdsb2JhbCBkaWZmX21lbnUKKyAgICBzZXQgZGlmZl9tZW51IC5kaWZmY3R4bWVudQorICAgIG1ha2VtZW51ICRkaWZmX21lbnUgeworCXttYyAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIiBjb21tYW5kIHNob3dfbGluZV9zb3VyY2V9CisJe21jICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiIGNvbW1hbmQge2V4dGVybmFsX2JsYW1lX2RpZmZ9fQorICAgIH0KKyAgICAkZGlmZl9tZW51IGNvbmZpZ3VyZSAtdGVhcm9mZiAwCit9CisKKyMgV2luZG93cyBzZW5kcyBhbGwgbW91c2Ugd2hlZWwgZXZlbnRzIHRvIHRoZSBjdXJyZW50IGZvY3VzZWQgd2luZG93LCBub3QKKyMgdGhlIG9uZSB3aGVyZSB0aGUgbW91c2UgaG92ZXJzLCBzbyBiaW5kIHRob3NlIGV2ZW50cyBoZXJlIGFuZCByZWRpcmVjdAorIyB0byB0aGUgY29ycmVjdCB3aW5kb3cKK3Byb2Mgd2luZG93c19tb3VzZXdoZWVsX3JlZGlyZWN0b3Ige1cgWCBZIER9IHsKKyAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MworICAgIHNldCB3IFt3aW5mbyBjb250YWluaW5nIC1kaXNwbGF5b2YgJFcgJFggJFldCisgICAgaWYgeyR3IG5lICIifSB7CisJc2V0IHUgW2V4cHIgeyREIDwgMCA/IDUgOiAtNX1dCisJaWYgeyR3ID09ICRjYW52IHx8ICR3ID09ICRjYW52MiB8fCAkdyA9PSAkY2FudjN9IHsKKwkgICAgYWxsY2FudnMgeXZpZXcgc2Nyb2xsICR1IHVuaXRzCisJfSBlbHNlIHsKKwkgICAgY2F0Y2ggeworCQkkdyB5dmlldyBzY3JvbGwgJHUgdW5pdHMKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKyMgVXBkYXRlIHJvdyBudW1iZXIgbGFiZWwgd2hlbiBzZWxlY3RlZGxpbmUgY2hhbmdlcworcHJvYyBzZWxlY3RlZGxpbmVfY2hhbmdlIHtuMSBuMiBvcH0geworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgcm93bnVtc2VsCisKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fX0geworCXNldCByb3dudW1zZWwge30KKyAgICB9IGVsc2UgeworCXNldCByb3dudW1zZWwgW2V4cHIgeyRzZWxlY3RlZGxpbmUgKyAxfV0KKyAgICB9Cit9CisKKyMgbW91c2UtMiBtYWtlcyBhbGwgd2luZG93cyBzY2FuIHZlcnRpY2FsbHksIGJ1dCBvbmx5IHRoZSBvbmUKKyMgdGhlIGN1cnNvciBpcyBpbiBzY2FucyBob3Jpem9udGFsbHkKK3Byb2MgY2FudnNjYW4ge29wIHcgeCB5fSB7CisgICAgZ2xvYmFsIGNhbnYgY2FudjIgY2FudjMKKyAgICBmb3JlYWNoIGMgW2xpc3QgJGNhbnYgJGNhbnYyICRjYW52M10geworCWlmIHskYyA9PSAkd30geworCSAgICAkYyBzY2FuICRvcCAkeCAkeQorCX0gZWxzZSB7CisJICAgICRjIHNjYW4gJG9wIDAgJHkKKwl9CisgICAgfQorfQorCitwcm9jIHNjcm9sbGNhbnYge2NzY3JvbGwgZjAgZjF9IHsKKyAgICAkY3Njcm9sbCBzZXQgJGYwICRmMQorICAgIGRyYXd2aXNpYmxlCisgICAgZmx1c2hoaWdobGlnaHRzCit9CisKKyMgd2hlbiB3ZSBtYWtlIGEga2V5IGJpbmRpbmcgZm9yIHRoZSB0b3BsZXZlbCwgbWFrZSBzdXJlCisjIGl0IGRvZXNuJ3QgZ2V0IHRyaWdnZXJlZCB3aGVuIHRoYXQga2V5IGlzIHByZXNzZWQgaW4gdGhlCisjIGZpbmQgc3RyaW5nIGVudHJ5IHdpZGdldC4KK3Byb2MgYmluZGtleSB7ZXYgc2NyaXB0fSB7CisgICAgZ2xvYmFsIGVudHJpZXMKKyAgICBiaW5kIC4gJGV2ICRzY3JpcHQKKyAgICBzZXQgZXNjcmlwdCBbYmluZCBFbnRyeSAkZXZdCisgICAgaWYgeyRlc2NyaXB0ID09IHt9fSB7CisJc2V0IGVzY3JpcHQgW2JpbmQgRW50cnkgPEtleT5dCisgICAgfQorICAgIGZvcmVhY2ggZSAkZW50cmllcyB7CisJYmluZCAkZSAkZXYgIiRlc2NyaXB0OyBicmVhayIKKyAgICB9Cit9CisKK3Byb2MgYmluZG1vZGZ1bmN0aW9ua2V5IHttb2QgbiBzY3JpcHR9IHsKKyAgICBiaW5kIC4gPCRtb2QtRiRuPiAkc2NyaXB0CisgICAgY2F0Y2ggeyBiaW5kIC4gPCRtb2QtWEY4Nl9Td2l0Y2hfVlRfJG4+ICRzY3JpcHQgfQorfQorCisjIHNldCB0aGUgZm9jdXMgYmFjayB0byB0aGUgdG9wbGV2ZWwgZm9yIGFueSBjbGljayBvdXRzaWRlCisjIHRoZSBlbnRyeSB3aWRnZXRzCitwcm9jIGNsaWNrIHt3fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGVudHJpZXMKKyAgICBmb3JlYWNoIGUgW2NvbmNhdCAkZW50cmllcyAkY3RleHRdIHsKKwlpZiB7JHcgPT0gJGV9IHJldHVybgorICAgIH0KKyAgICBmb2N1cyAuCit9CisKKyMgQWRqdXN0IHRoZSBwcm9ncmVzcyBiYXIgZm9yIGEgY2hhbmdlIGluIHJlcXVlc3RlZCBleHRlbnQgb3IgY2FudmFzIHNpemUKK3Byb2MgYWRqdXN0cHJvZ3Jlc3Mge30geworICAgIGdsb2JhbCBwcm9ncmVzc2NhbnYgcHJvZ3Jlc3NpdGVtIHByb2dyZXNzY29vcmRzCisgICAgZ2xvYmFsIGZwcm9naXRlbSBmcHJvZ2Nvb3JkIGxhc3Rwcm9ndXBkYXRlIHByb2d1cGRhdGVwZW5kaW5nCisgICAgZ2xvYmFsIHJwcm9naXRlbSBycHJvZ2Nvb3JkIHVzZV90dGsKKworICAgIGlmIHskdXNlX3R0a30geworCSRwcm9ncmVzc2NhbnYgY29uZmlndXJlIC12YWx1ZSBbZXhwciB7aW50KCRmcHJvZ2Nvb3JkICogMTAwKX1dCisJcmV0dXJuCisgICAgfQorCisgICAgc2V0IHcgW2V4cHIge1t3aW5mbyB3aWR0aCAkcHJvZ3Jlc3NjYW52XSAtIDR9XQorICAgIHNldCB4MCBbZXhwciB7JHcgKiBbbGluZGV4ICRwcm9ncmVzc2Nvb3JkcyAwXX1dCisgICAgc2V0IHgxIFtleHByIHskdyAqIFtsaW5kZXggJHByb2dyZXNzY29vcmRzIDFdfV0KKyAgICBzZXQgaCBbd2luZm8gaGVpZ2h0ICRwcm9ncmVzc2NhbnZdCisgICAgJHByb2dyZXNzY2FudiBjb29yZHMgJHByb2dyZXNzaXRlbSAkeDAgMCAkeDEgJGgKKyAgICAkcHJvZ3Jlc3NjYW52IGNvb3JkcyAkZnByb2dpdGVtIDAgMCBbZXhwciB7JHcgKiAkZnByb2djb29yZH1dICRoCisgICAgJHByb2dyZXNzY2FudiBjb29yZHMgJHJwcm9naXRlbSAwIDAgW2V4cHIgeyR3ICogJHJwcm9nY29vcmR9XSAkaAorICAgIHNldCBub3cgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIGlmIHskbm93ID49ICRsYXN0cHJvZ3VwZGF0ZSArIDEwMH0geworCXNldCBwcm9ndXBkYXRlcGVuZGluZyAwCisJdXBkYXRlCisgICAgfSBlbHNlaWYgeyEkcHJvZ3VwZGF0ZXBlbmRpbmd9IHsKKwlzZXQgcHJvZ3VwZGF0ZXBlbmRpbmcgMQorCWFmdGVyIFtleHByIHskbGFzdHByb2d1cGRhdGUgKyAxMDAgLSAkbm93fV0gZG9wcm9ndXBkYXRlCisgICAgfQorfQorCitwcm9jIGRvcHJvZ3VwZGF0ZSB7fSB7CisgICAgZ2xvYmFsIGxhc3Rwcm9ndXBkYXRlIHByb2d1cGRhdGVwZW5kaW5nCisKKyAgICBpZiB7JHByb2d1cGRhdGVwZW5kaW5nfSB7CisJc2V0IHByb2d1cGRhdGVwZW5kaW5nIDAKKwlzZXQgbGFzdHByb2d1cGRhdGUgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorCXVwZGF0ZQorICAgIH0KK30KKworcHJvYyBjb25maWdfY2hlY2tfdG1wX2V4aXN0cyB7dHJpZXNfbGVmdH0geworICAgIGdsb2JhbCBjb25maWdfZmlsZV90bXAKKworICAgIGlmIHtbZmlsZSBleGlzdHMgJGNvbmZpZ19maWxlX3RtcF19IHsKKwlpbmNyIHRyaWVzX2xlZnQgLTEKKwlpZiB7JHRyaWVzX2xlZnQgPiAwfSB7CisJICAgIGFmdGVyIDEwMCBbbGlzdCBjb25maWdfY2hlY2tfdG1wX2V4aXN0cyAkdHJpZXNfbGVmdF0KKwl9IGVsc2UgeworCSAgICBlcnJvcl9wb3B1cCAiVGhlcmUgYXBwZWFycyB0byBiZSBhIHN0YWxlICRjb25maWdfZmlsZV90bXBcCisgZmlsZSwgd2hpY2ggd2lsbCBwcmV2ZW50IGdpdGsgZnJvbSBzYXZpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb24gZXhpdC5cCisgUGxlYXNlIHJlbW92ZSBpdCBpZiBpdCBpcyBub3QgYmVpbmcgdXNlZCBieSBhbnkgZXhpc3RpbmcgZ2l0ayBwcm9jZXNzLiIKKwl9CisgICAgfQorfQorCitwcm9jIGNvbmZpZ19pbml0X3RyYWNlIHtuYW1lfSB7CisgICAgZ2xvYmFsIGNvbmZpZ192YXJpYWJsZV9jaGFuZ2VkIGNvbmZpZ192YXJpYWJsZV9vcmlnaW5hbAorCisgICAgdXB2YXIgIzAgJG5hbWUgdmFyCisgICAgc2V0IGNvbmZpZ192YXJpYWJsZV9jaGFuZ2VkKCRuYW1lKSAwCisgICAgc2V0IGNvbmZpZ192YXJpYWJsZV9vcmlnaW5hbCgkbmFtZSkgJHZhcgorfQorCitwcm9jIGNvbmZpZ192YXJpYWJsZV9jaGFuZ2VfY2Ige25hbWUgbmFtZTIgb3B9IHsKKyAgICBnbG9iYWwgY29uZmlnX3ZhcmlhYmxlX2NoYW5nZWQgY29uZmlnX3ZhcmlhYmxlX29yaWdpbmFsCisKKyAgICB1cHZhciAjMCAkbmFtZSB2YXIKKyAgICBpZiB7JG9wIGVxICJ3cml0ZSIgJiYKKwkoIVtpbmZvIGV4aXN0cyBjb25maWdfdmFyaWFibGVfb3JpZ2luYWwoJG5hbWUpXSB8fAorCSAkY29uZmlnX3ZhcmlhYmxlX29yaWdpbmFsKCRuYW1lKSBuZSAkdmFyKX0geworCXNldCBjb25maWdfdmFyaWFibGVfY2hhbmdlZCgkbmFtZSkgMQorICAgIH0KK30KKworcHJvYyBzYXZlc3R1ZmYge3d9IHsKKyAgICBnbG9iYWwgc3R1ZmZzYXZlZAorICAgIGdsb2JhbCBjb25maWdfZmlsZSBjb25maWdfZmlsZV90bXAKKyAgICBnbG9iYWwgY29uZmlnX3ZhcmlhYmxlcyBjb25maWdfdmFyaWFibGVfY2hhbmdlZAorICAgIGdsb2JhbCB2aWV3Y2hhbmdlZAorCisgICAgdXB2YXIgIzAgdmlld25hbWUgY3VycmVudF92aWV3bmFtZQorICAgIHVwdmFyICMwIHZpZXdmaWxlcyBjdXJyZW50X3ZpZXdmaWxlcworICAgIHVwdmFyICMwIHZpZXdhcmdzIGN1cnJlbnRfdmlld2FyZ3MKKyAgICB1cHZhciAjMCB2aWV3YXJnc2NtZCBjdXJyZW50X3ZpZXdhcmdzY21kCisgICAgdXB2YXIgIzAgdmlld3Blcm0gY3VycmVudF92aWV3cGVybQorICAgIHVwdmFyICMwIG5leHR2aWV3bnVtIGN1cnJlbnRfbmV4dHZpZXdudW0KKyAgICB1cHZhciAjMCB1c2VfdHRrIGN1cnJlbnRfdXNlX3R0aworCisgICAgaWYgeyRzdHVmZnNhdmVkfSByZXR1cm4KKyAgICBpZiB7IVt3aW5mbyB2aWV3YWJsZSAuXX0gcmV0dXJuCisgICAgc2V0IHJlbW92ZV90bXAgMAorICAgIGlmIHtbY2F0Y2ggeworCXNldCB0cnlfY291bnQgMAorCXdoaWxlIHtbY2F0Y2gge3NldCBmIFtvcGVuICRjb25maWdfZmlsZV90bXAge1dST05MWSBDUkVBVCBFWENMfV19XX0geworCSAgICBpZiB7W2luY3IgdHJ5X2NvdW50XSA+IDUwfSB7CisJCWVycm9yICJVbmFibGUgdG8gd3JpdGUgY29uZmlnIGZpbGU6ICRjb25maWdfZmlsZV90bXAgZXhpc3RzIgorCSAgICB9CisJICAgIGFmdGVyIDEwMAorCX0KKwlzZXQgcmVtb3ZlX3RtcCAxCisJaWYgeyQ6OnRjbF9wbGF0Zm9ybShwbGF0Zm9ybSkgZXEge3dpbmRvd3N9fSB7CisJICAgIGZpbGUgYXR0cmlidXRlcyAkY29uZmlnX2ZpbGVfdG1wIC1oaWRkZW4gdHJ1ZQorCX0KKwlpZiB7W2ZpbGUgZXhpc3RzICRjb25maWdfZmlsZV19IHsKKwkgICAgc291cmNlICRjb25maWdfZmlsZQorCX0KKwlmb3JlYWNoIHZhcl9uYW1lICRjb25maWdfdmFyaWFibGVzIHsKKwkgICAgdXB2YXIgIzAgJHZhcl9uYW1lIHZhcgorCSAgICB1cHZhciAwICR2YXJfbmFtZSBvbGRfdmFyCisJICAgIGlmIHshJGNvbmZpZ192YXJpYWJsZV9jaGFuZ2VkKCR2YXJfbmFtZSkgJiYgW2luZm8gZXhpc3RzIG9sZF92YXJdfSB7CisJCXB1dHMgJGYgW2xpc3Qgc2V0ICR2YXJfbmFtZSAkb2xkX3Zhcl0KKwkgICAgfSBlbHNlIHsKKwkJcHV0cyAkZiBbbGlzdCBzZXQgJHZhcl9uYW1lICR2YXJdCisJICAgIH0KKwl9CisKKwlwdXRzICRmICJzZXQgZ2VvbWV0cnkobWFpbikgW3dtIGdlb21ldHJ5IC5dIgorCXB1dHMgJGYgInNldCBnZW9tZXRyeShzdGF0ZSkgW3dtIHN0YXRlIC5dIgorCXB1dHMgJGYgInNldCBnZW9tZXRyeSh0b3B3aWR0aCkgW3dpbmZvIHdpZHRoIC50Zl0iCisJcHV0cyAkZiAic2V0IGdlb21ldHJ5KHRvcGhlaWdodCkgW3dpbmZvIGhlaWdodCAudGZdIgorCWlmIHskY3VycmVudF91c2VfdHRrfSB7CisJICAgIHB1dHMgJGYgInNldCBnZW9tZXRyeShwd3Nhc2gwKSBcIlsudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaHBvcyAwXSAxXCIiCisJICAgIHB1dHMgJGYgInNldCBnZW9tZXRyeShwd3Nhc2gxKSBcIlsudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaHBvcyAxXSAxXCIiCisJfSBlbHNlIHsKKwkgICAgcHV0cyAkZiAic2V0IGdlb21ldHJ5KHB3c2FzaDApIFwiWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNoIGNvb3JkIDBdXCIiCisJICAgIHB1dHMgJGYgInNldCBnZW9tZXRyeShwd3Nhc2gxKSBcIlsudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaCBjb29yZCAxXVwiIgorCX0KKwlwdXRzICRmICJzZXQgZ2VvbWV0cnkoYm90d2lkdGgpIFt3aW5mbyB3aWR0aCAuYmxlZnRdIgorCXB1dHMgJGYgInNldCBnZW9tZXRyeShib3RoZWlnaHQpIFt3aW5mbyBoZWlnaHQgLmJsZWZ0XSIKKworCWFycmF5IHNldCB2aWV3X3NhdmUge30KKwlhcnJheSBzZXQgdmlld3Mge30KKwlpZiB7IVtpbmZvIGV4aXN0cyBwZXJtdmlld3NdfSB7IHNldCBwZXJtdmlld3Mge30gfQorCWZvcmVhY2ggdmlldyAkcGVybXZpZXdzIHsKKwkgICAgc2V0IHZpZXdfc2F2ZShbbGluZGV4ICR2aWV3IDBdKSAxCisJICAgIHNldCB2aWV3cyhbbGluZGV4ICR2aWV3IDBdKSAkdmlldworCX0KKwlwdXRzIC1ub25ld2xpbmUgJGYgInNldCBwZXJtdmlld3MgeyIKKwlmb3Ige3NldCB2IDF9IHskdiA8ICRjdXJyZW50X25leHR2aWV3bnVtfSB7aW5jciB2fSB7CisJICAgIGlmIHskdmlld2NoYW5nZWQoJHYpfSB7CisJCWlmIHskY3VycmVudF92aWV3cGVybSgkdil9IHsKKwkJICAgIHNldCB2aWV3cygkY3VycmVudF92aWV3bmFtZSgkdikpIFtsaXN0ICRjdXJyZW50X3ZpZXduYW1lKCR2KSAkY3VycmVudF92aWV3ZmlsZXMoJHYpICRjdXJyZW50X3ZpZXdhcmdzKCR2KSAkY3VycmVudF92aWV3YXJnc2NtZCgkdildCisJCX0gZWxzZSB7CisJCSAgICBzZXQgdmlld19zYXZlKCRjdXJyZW50X3ZpZXduYW1lKCR2KSkgMAorCQl9CisJICAgIH0KKwl9CisJIyB3cml0ZSBvbGQgYW5kIHVwZGF0ZWQgdmlldyB0byB0aGVpciBwbGFjZXMgYW5kIGFwcGVuZCByZW1haW5pbmcgdG8gdGhlIGVuZAorCWZvcmVhY2ggdmlldyAkcGVybXZpZXdzIHsKKwkgICAgc2V0IHZpZXdfbmFtZSBbbGluZGV4ICR2aWV3IDBdCisJICAgIGlmIHskdmlld19zYXZlKCR2aWV3X25hbWUpfSB7CisJCXB1dHMgJGYgInskdmlld3MoJHZpZXdfbmFtZSl9IgorCSAgICB9CisJICAgIHVuc2V0IHZpZXdzKCR2aWV3X25hbWUpCisJfQorCWZvcmVhY2ggdmlld19uYW1lIFthcnJheSBuYW1lcyB2aWV3c10geworCSAgICBwdXRzICRmICJ7JHZpZXdzKCR2aWV3X25hbWUpfSIKKwl9CisJcHV0cyAkZiAifSIKKwljbG9zZSAkZgorCWZpbGUgcmVuYW1lIC1mb3JjZSAkY29uZmlnX2ZpbGVfdG1wICRjb25maWdfZmlsZQorCXNldCByZW1vdmVfdG1wIDAKKyAgICB9IGVycl19IHsKKyAgICAgICAgcHV0cyAiRXJyb3Igc2F2aW5nIGNvbmZpZzogJGVyciIKKyAgICB9CisgICAgaWYgeyRyZW1vdmVfdG1wfSB7CisJZmlsZSBkZWxldGUgLWZvcmNlICRjb25maWdfZmlsZV90bXAKKyAgICB9CisgICAgc2V0IHN0dWZmc2F2ZWQgMQorfQorCitwcm9jIHJlc2l6ZWNsaXN0cGFuZXMge3dpbiB3fSB7CisgICAgZ2xvYmFsIG9sZHdpZHRoIHVzZV90dGsKKyAgICBpZiB7W2luZm8gZXhpc3RzIG9sZHdpZHRoKCR3aW4pXX0geworCWlmIHskdXNlX3R0a30geworCSAgICBzZXQgczAgWyR3aW4gc2FzaHBvcyAwXQorCSAgICBzZXQgczEgWyR3aW4gc2FzaHBvcyAxXQorCX0gZWxzZSB7CisJICAgIHNldCBzMCBbJHdpbiBzYXNoIGNvb3JkIDBdCisJICAgIHNldCBzMSBbJHdpbiBzYXNoIGNvb3JkIDFdCisJfQorCWlmIHskdyA8IDYwfSB7CisJICAgIHNldCBzYXNoMCBbZXhwciB7aW50KCR3LzIgLSAyKX1dCisJICAgIHNldCBzYXNoMSBbZXhwciB7aW50KCR3KjUvNiAtIDIpfV0KKwl9IGVsc2UgeworCSAgICBzZXQgZmFjdG9yIFtleHByIHsxLjAgKiAkdyAvICRvbGR3aWR0aCgkd2luKX1dCisJICAgIHNldCBzYXNoMCBbZXhwciB7aW50KCRmYWN0b3IgKiBbbGluZGV4ICRzMCAwXSl9XQorCSAgICBzZXQgc2FzaDEgW2V4cHIge2ludCgkZmFjdG9yICogW2xpbmRleCAkczEgMF0pfV0KKwkgICAgaWYgeyRzYXNoMCA8IDMwfSB7CisJCXNldCBzYXNoMCAzMAorCSAgICB9CisJICAgIGlmIHskc2FzaDEgPCAkc2FzaDAgKyAyMH0geworCQlzZXQgc2FzaDEgW2V4cHIgeyRzYXNoMCArIDIwfV0KKwkgICAgfQorCSAgICBpZiB7JHNhc2gxID4gJHcgLSAxMH0geworCQlzZXQgc2FzaDEgW2V4cHIgeyR3IC0gMTB9XQorCQlpZiB7JHNhc2gwID4gJHNhc2gxIC0gMjB9IHsKKwkJICAgIHNldCBzYXNoMCBbZXhwciB7JHNhc2gxIC0gMjB9XQorCQl9CisJICAgIH0KKwl9CisJaWYgeyR1c2VfdHRrfSB7CisJICAgICR3aW4gc2FzaHBvcyAwICRzYXNoMAorCSAgICAkd2luIHNhc2hwb3MgMSAkc2FzaDEKKwl9IGVsc2UgeworCSAgICAkd2luIHNhc2ggcGxhY2UgMCAkc2FzaDAgW2xpbmRleCAkczAgMV0KKwkgICAgJHdpbiBzYXNoIHBsYWNlIDEgJHNhc2gxIFtsaW5kZXggJHMxIDFdCisJfQorICAgIH0KKyAgICBzZXQgb2xkd2lkdGgoJHdpbikgJHcKK30KKworcHJvYyByZXNpemVjZGV0cGFuZXMge3dpbiB3fSB7CisgICAgZ2xvYmFsIG9sZHdpZHRoIHVzZV90dGsKKyAgICBpZiB7W2luZm8gZXhpc3RzIG9sZHdpZHRoKCR3aW4pXX0geworCWlmIHskdXNlX3R0a30geworCSAgICBzZXQgczAgWyR3aW4gc2FzaHBvcyAwXQorCX0gZWxzZSB7CisJICAgIHNldCBzMCBbJHdpbiBzYXNoIGNvb3JkIDBdCisJfQorCWlmIHskdyA8IDYwfSB7CisJICAgIHNldCBzYXNoMCBbZXhwciB7aW50KCR3KjMvNCAtIDIpfV0KKwl9IGVsc2UgeworCSAgICBzZXQgZmFjdG9yIFtleHByIHsxLjAgKiAkdyAvICRvbGR3aWR0aCgkd2luKX1dCisJICAgIHNldCBzYXNoMCBbZXhwciB7aW50KCRmYWN0b3IgKiBbbGluZGV4ICRzMCAwXSl9XQorCSAgICBpZiB7JHNhc2gwIDwgNDV9IHsKKwkJc2V0IHNhc2gwIDQ1CisJICAgIH0KKwkgICAgaWYgeyRzYXNoMCA+ICR3IC0gMTV9IHsKKwkJc2V0IHNhc2gwIFtleHByIHskdyAtIDE1fV0KKwkgICAgfQorCX0KKwlpZiB7JHVzZV90dGt9IHsKKwkgICAgJHdpbiBzYXNocG9zIDAgJHNhc2gwCisJfSBlbHNlIHsKKwkgICAgJHdpbiBzYXNoIHBsYWNlIDAgJHNhc2gwIFtsaW5kZXggJHMwIDFdCisJfQorICAgIH0KKyAgICBzZXQgb2xkd2lkdGgoJHdpbikgJHcKK30KKworcHJvYyBhbGxjYW52cyBhcmdzIHsKKyAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MworICAgIGV2YWwgJGNhbnYgJGFyZ3MKKyAgICBldmFsICRjYW52MiAkYXJncworICAgIGV2YWwgJGNhbnYzICRhcmdzCit9CisKK3Byb2MgYmluZGFsbCB7ZXZlbnQgYWN0aW9ufSB7CisgICAgZ2xvYmFsIGNhbnYgY2FudjIgY2FudjMKKyAgICBiaW5kICRjYW52ICRldmVudCAkYWN0aW9uCisgICAgYmluZCAkY2FudjIgJGV2ZW50ICRhY3Rpb24KKyAgICBiaW5kICRjYW52MyAkZXZlbnQgJGFjdGlvbgorfQorCitwcm9jIGFib3V0IHt9IHsKKyAgICBnbG9iYWwgYmdjb2xvciBOUworICAgIHNldCB3IC5hYm91dAorICAgIGlmIHtbd2luZm8gZXhpc3RzICR3XX0geworCXJhaXNlICR3CisJcmV0dXJuCisgICAgfQorICAgIHR0a190b3BsZXZlbCAkdworICAgIHdtIHRpdGxlICR3IFttYyAiQWJvdXQgZ2l0ayJdCisgICAgbWFrZV90cmFuc2llbnQgJHcgLgorICAgIG1lc3NhZ2UgJHcubSAtdGV4dCBbbWMgIgorR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0CisKK0NvcHlyaWdodCBcdTAwYTkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzCisKK1VzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiXSBcCisJICAgIC1qdXN0aWZ5IGNlbnRlciAtYXNwZWN0IDQwMCAtYm9yZGVyIDIgLWJnICRiZ2NvbG9yIC1yZWxpZWYgZ3Jvb3ZlCisgICAgcGFjayAkdy5tIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDIgLXBhZHkgMgorICAgICR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgW21jICJDbG9zZSJdIC1jb21tYW5kICJkZXN0cm95ICR3IiAtZGVmYXVsdCBhY3RpdmUKKyAgICBwYWNrICR3Lm9rIC1zaWRlIGJvdHRvbQorICAgIGJpbmQgJHcgPFZpc2liaWxpdHk+ICJmb2N1cyAkdy5vayIKKyAgICBiaW5kICR3IDxLZXktRXNjYXBlPiAiZGVzdHJveSAkdyIKKyAgICBiaW5kICR3IDxLZXktUmV0dXJuPiAiZGVzdHJveSAkdyIKKyAgICB0azo6UGxhY2VXaW5kb3cgJHcgd2lkZ2V0IC4KK30KKworcHJvYyBrZXlzIHt9IHsKKyAgICBnbG9iYWwgYmdjb2xvciBOUworICAgIHNldCB3IC5rZXlzCisgICAgaWYge1t3aW5mbyBleGlzdHMgJHddfSB7CisJcmFpc2UgJHcKKwlyZXR1cm4KKyAgICB9CisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxIHthcXVhfX0geworCXNldCBNMVQgQ21kCisgICAgfSBlbHNlIHsKKwlzZXQgTTFUIEN0cmwKKyAgICB9CisgICAgdHRrX3RvcGxldmVsICR3CisgICAgd20gdGl0bGUgJHcgW21jICJHaXRrIGtleSBiaW5kaW5ncyJdCisgICAgbWFrZV90cmFuc2llbnQgJHcgLgorICAgIG1lc3NhZ2UgJHcubSAtdGV4dCAiCitbbWMgIkdpdGsga2V5IGJpbmRpbmdzOiJdCisKK1ttYyAiPCVzLVE+CQlRdWl0IiAkTTFUXQorW21jICI8JXMtVz4JCUNsb3NlIHdpbmRvdyIgJE0xVF0KK1ttYyAiPEhvbWU+CQlNb3ZlIHRvIGZpcnN0IGNvbW1pdCJdCitbbWMgIjxFbmQ+CQlNb3ZlIHRvIGxhc3QgY29tbWl0Il0KK1ttYyAiPFVwPiwgcCwgawlNb3ZlIHVwIG9uZSBjb21taXQiXQorW21jICI8RG93bj4sIG4sIGoJTW92ZSBkb3duIG9uZSBjb21taXQiXQorW21jICI8TGVmdD4sIHosIGgJR28gYmFjayBpbiBoaXN0b3J5IGxpc3QiXQorW21jICI8UmlnaHQ+LCB4LCBsCUdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0Il0KK1ttYyAiPCVzLW4+CUdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIgJE0xVF0KK1ttYyAiPFBhZ2VVcD4JTW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCJdCitbbWMgIjxQYWdlRG93bj4JTW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0Il0KK1ttYyAiPCVzLUhvbWU+CVNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiICRNMVRdCitbbWMgIjwlcy1FbmQ+CVNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiICRNMVRdCitbbWMgIjwlcy1VcD4JU2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIiAkTTFUXQorW21jICI8JXMtRG93bj4JU2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiICRNMVRdCitbbWMgIjwlcy1QYWdlVXA+CVNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIgJE0xVF0KK1ttYyAiPCVzLVBhZ2VEb3duPglTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIgJE0xVF0KK1ttYyAiPFNoaWZ0LVVwPglGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiXQorW21jICI8U2hpZnQtRG93bj4JRmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIl0KK1ttYyAiPERlbGV0ZT4sIGIJU2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSJdCitbbWMgIjxCYWNrc3BhY2U+CVNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiXQorW21jICI8U3BhY2U+CQlTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiXQorW21jICJ1CQlTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIl0KK1ttYyAiZAkJU2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIl0KK1ttYyAiPCVzLUY+CQlGaW5kIiAkTTFUXQorW21jICI8JXMtRz4JCU1vdmUgdG8gbmV4dCBmaW5kIGhpdCIgJE0xVF0KK1ttYyAiPFJldHVybj4JTW92ZSB0byBuZXh0IGZpbmQgaGl0Il0KK1ttYyAiZwkJR28gdG8gY29tbWl0Il0KK1ttYyAiLwkJRm9jdXMgdGhlIHNlYXJjaCBib3giXQorW21jICI/CQlNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0Il0KK1ttYyAiZgkJU2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiXQorW21jICI8JXMtUz4JCVNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IiAkTTFUXQorW21jICI8JXMtUj4JCVNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIgJE0xVF0KK1ttYyAiPCVzLUtQKz4JSW5jcmVhc2UgZm9udCBzaXplIiAkTTFUXQorW21jICI8JXMtcGx1cz4JSW5jcmVhc2UgZm9udCBzaXplIiAkTTFUXQorW21jICI8JXMtS1AtPglEZWNyZWFzZSBmb250IHNpemUiICRNMVRdCitbbWMgIjwlcy1taW51cz4JRGVjcmVhc2UgZm9udCBzaXplIiAkTTFUXQorW21jICI8RjU+CQlVcGRhdGUiXQorIiBcCisJICAgIC1qdXN0aWZ5IGxlZnQgLWJnICRiZ2NvbG9yIC1ib3JkZXIgMiAtcmVsaWVmIGdyb292ZQorICAgIHBhY2sgJHcubSAtc2lkZSB0b3AgLWZpbGwgYm90aCAtcGFkeCAyIC1wYWR5IDIKKyAgICAke05TfTo6YnV0dG9uICR3Lm9rIC10ZXh0IFttYyAiQ2xvc2UiXSAtY29tbWFuZCAiZGVzdHJveSAkdyIgLWRlZmF1bHQgYWN0aXZlCisgICAgYmluZCAkdyA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkd10KKyAgICBwYWNrICR3Lm9rIC1zaWRlIGJvdHRvbQorICAgIGJpbmQgJHcgPFZpc2liaWxpdHk+ICJmb2N1cyAkdy5vayIKKyAgICBiaW5kICR3IDxLZXktRXNjYXBlPiAiZGVzdHJveSAkdyIKKyAgICBiaW5kICR3IDxLZXktUmV0dXJuPiAiZGVzdHJveSAkdyIKK30KKworIyBQcm9jZWR1cmVzIGZvciBtYW5pcHVsYXRpbmcgdGhlIGZpbGUgbGlzdCB3aW5kb3cgYXQgdGhlCisjIGJvdHRvbSByaWdodCBvZiB0aGUgb3ZlcmFsbCB3aW5kb3cuCisKK3Byb2MgdHJlZXZpZXcge3cgbCBvcGVubGV2c30geworICAgIGdsb2JhbCB0cmVlY29udGVudHMgdHJlZWRpcm9wZW4gdHJlZWhlaWdodCB0cmVlcGFyZW50IHRyZWVpbmRleAorCisgICAgc2V0IGl4IDAKKyAgICBzZXQgdHJlZWluZGV4KCkgMAorICAgIHNldCBsZXYgMAorICAgIHNldCBwcmVmaXgge30KKyAgICBzZXQgcHJlZml4ZW5kIC0xCisgICAgc2V0IHByZWZlbmRzdGFjayB7fQorICAgIHNldCBodHN0YWNrIHt9CisgICAgc2V0IGh0IDAKKyAgICBzZXQgdHJlZWNvbnRlbnRzKCkge30KKyAgICAkdyBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBmb3JlYWNoIGYgJGwgeworCXdoaWxlIHtbc3RyaW5nIHJhbmdlICRmIDAgJHByZWZpeGVuZF0gbmUgJHByZWZpeH0geworCSAgICBpZiB7JGxldiA8PSAkb3BlbmxldnN9IHsKKwkJJHcgbWFyayBzZXQgZTokdHJlZWluZGV4KCRwcmVmaXgpICJlbmQgLTFjIgorCQkkdyBtYXJrIGdyYXZpdHkgZTokdHJlZWluZGV4KCRwcmVmaXgpIGxlZnQKKwkgICAgfQorCSAgICBzZXQgdHJlZWhlaWdodCgkcHJlZml4KSAkaHQKKwkgICAgaW5jciBodCBbbGluZGV4ICRodHN0YWNrIGVuZF0KKwkgICAgc2V0IGh0c3RhY2sgW2xyZXBsYWNlICRodHN0YWNrIGVuZCBlbmRdCisJICAgIHNldCBwcmVmaXhlbmQgW2xpbmRleCAkcHJlZmVuZHN0YWNrIGVuZF0KKwkgICAgc2V0IHByZWZlbmRzdGFjayBbbHJlcGxhY2UgJHByZWZlbmRzdGFjayBlbmQgZW5kXQorCSAgICBzZXQgcHJlZml4IFtzdHJpbmcgcmFuZ2UgJHByZWZpeCAwICRwcmVmaXhlbmRdCisJICAgIGluY3IgbGV2IC0xCisJfQorCXNldCB0YWlsIFtzdHJpbmcgcmFuZ2UgJGYgW2V4cHIgeyRwcmVmaXhlbmQrMX1dIGVuZF0KKwl3aGlsZSB7W3NldCBzbGFzaCBbc3RyaW5nIGZpcnN0ICIvIiAkdGFpbF1dID49IDB9IHsKKwkgICAgbGFwcGVuZCBodHN0YWNrICRodAorCSAgICBzZXQgaHQgMAorCSAgICBsYXBwZW5kIHByZWZlbmRzdGFjayAkcHJlZml4ZW5kCisJICAgIGluY3IgcHJlZml4ZW5kIFtleHByIHskc2xhc2ggKyAxfV0KKwkgICAgc2V0IGQgW3N0cmluZyByYW5nZSAkdGFpbCAwICRzbGFzaF0KKwkgICAgbGFwcGVuZCB0cmVlY29udGVudHMoJHByZWZpeCkgJGQKKwkgICAgc2V0IG9sZHByZWZpeCAkcHJlZml4CisJICAgIGFwcGVuZCBwcmVmaXggJGQKKwkgICAgc2V0IHRyZWVjb250ZW50cygkcHJlZml4KSB7fQorCSAgICBzZXQgdHJlZWluZGV4KCRwcmVmaXgpIFtpbmNyIGl4XQorCSAgICBzZXQgdHJlZXBhcmVudCgkcHJlZml4KSAkb2xkcHJlZml4CisJICAgIHNldCB0YWlsIFtzdHJpbmcgcmFuZ2UgJHRhaWwgW2V4cHIgeyRzbGFzaCsxfV0gZW5kXQorCSAgICBpZiB7JGxldiA8PSAkb3BlbmxldnN9IHsKKwkJc2V0IGh0IDEKKwkJc2V0IHRyZWVkaXJvcGVuKCRwcmVmaXgpIFtleHByIHskbGV2IDwgJG9wZW5sZXZzfV0KKwkJc2V0IGJtIFtleHByIHskbGV2ID09ICRvcGVubGV2cz8gInRyaS1ydCI6ICJ0cmktZG4ifV0KKwkJJHcgbWFyayBzZXQgZDokaXggImVuZCAtMWMiCisJCSR3IG1hcmsgZ3Jhdml0eSBkOiRpeCBsZWZ0CisJCXNldCBzdHIgIlxuIgorCQlmb3Ige3NldCBpIDB9IHskaSA8ICRsZXZ9IHtpbmNyIGl9IHthcHBlbmQgc3RyICJcdCJ9CisJCSR3IGluc2VydCBlbmQgJHN0cgorCQkkdyBpbWFnZSBjcmVhdGUgZW5kIC1hbGlnbiBjZW50ZXIgLWltYWdlICRibSAtcGFkeCAxIFwKKwkJICAgIC1uYW1lIGE6JGl4CisJCSR3IGluc2VydCBlbmQgJGQgW2hpZ2hsaWdodF90YWcgJHByZWZpeF0KKwkJJHcgbWFyayBzZXQgczokaXggImVuZCAtMWMiCisJCSR3IG1hcmsgZ3Jhdml0eSBzOiRpeCBsZWZ0CisJICAgIH0KKwkgICAgaW5jciBsZXYKKwl9CisJaWYgeyR0YWlsIG5lIHt9fSB7CisJICAgIGlmIHskbGV2IDw9ICRvcGVubGV2c30geworCQlpbmNyIGh0CisJCXNldCBzdHIgIlxuIgorCQlmb3Ige3NldCBpIDB9IHskaSA8ICRsZXZ9IHtpbmNyIGl9IHthcHBlbmQgc3RyICJcdCJ9CisJCSR3IGluc2VydCBlbmQgJHN0cgorCQkkdyBpbnNlcnQgZW5kICR0YWlsIFtoaWdobGlnaHRfdGFnICRmXQorCSAgICB9CisJICAgIGxhcHBlbmQgdHJlZWNvbnRlbnRzKCRwcmVmaXgpICR0YWlsCisJfQorICAgIH0KKyAgICB3aGlsZSB7JGh0c3RhY2sgbmUge319IHsKKwlzZXQgdHJlZWhlaWdodCgkcHJlZml4KSAkaHQKKwlpbmNyIGh0IFtsaW5kZXggJGh0c3RhY2sgZW5kXQorCXNldCBodHN0YWNrIFtscmVwbGFjZSAkaHRzdGFjayBlbmQgZW5kXQorCXNldCBwcmVmaXhlbmQgW2xpbmRleCAkcHJlZmVuZHN0YWNrIGVuZF0KKwlzZXQgcHJlZmVuZHN0YWNrIFtscmVwbGFjZSAkcHJlZmVuZHN0YWNrIGVuZCBlbmRdCisJc2V0IHByZWZpeCBbc3RyaW5nIHJhbmdlICRwcmVmaXggMCAkcHJlZml4ZW5kXQorICAgIH0KKyAgICAkdyBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCitwcm9jIGxpbmV0b2VsdCB7bH0geworICAgIGdsb2JhbCB0cmVlaGVpZ2h0IHRyZWVjb250ZW50cworCisgICAgc2V0IHkgMgorICAgIHNldCBwcmVmaXgge30KKyAgICB3aGlsZSB7MX0geworCWZvcmVhY2ggZSAkdHJlZWNvbnRlbnRzKCRwcmVmaXgpIHsKKwkgICAgaWYgeyR5ID09ICRsfSB7CisJCXJldHVybiAiJHByZWZpeCRlIgorCSAgICB9CisJICAgIHNldCBuIDEKKwkgICAgaWYge1tzdHJpbmcgaW5kZXggJGUgZW5kXSBlcSAiLyJ9IHsKKwkJc2V0IG4gJHRyZWVoZWlnaHQoJHByZWZpeCRlKQorCQlpZiB7JHkgKyAkbiA+ICRsfSB7CisJCSAgICBhcHBlbmQgcHJlZml4ICRlCisJCSAgICBpbmNyIHkKKwkJICAgIGJyZWFrCisJCX0KKwkgICAgfQorCSAgICBpbmNyIHkgJG4KKwl9CisgICAgfQorfQorCitwcm9jIGhpZ2hsaWdodF90cmVlIHt5IHByZWZpeH0geworICAgIGdsb2JhbCB0cmVlaGVpZ2h0IHRyZWVjb250ZW50cyBjZmxpc3QKKworICAgIGZvcmVhY2ggZSAkdHJlZWNvbnRlbnRzKCRwcmVmaXgpIHsKKwlzZXQgcGF0aCAkcHJlZml4JGUKKwlpZiB7W2hpZ2hsaWdodF90YWcgJHBhdGhdIG5lIHt9fSB7CisJICAgICRjZmxpc3QgdGFnIGFkZCBib2xkICR5LjAgIiR5LjAgbGluZWVuZCIKKwl9CisJaW5jciB5CisJaWYge1tzdHJpbmcgaW5kZXggJGUgZW5kXSBlcSAiLyIgJiYgJHRyZWVoZWlnaHQoJHBhdGgpID4gMX0geworCSAgICBzZXQgeSBbaGlnaGxpZ2h0X3RyZWUgJHkgJHBhdGhdCisJfQorICAgIH0KKyAgICByZXR1cm4gJHkKK30KKworcHJvYyB0cmVlY2xvc2VkaXIge3cgZGlyfSB7CisgICAgZ2xvYmFsIHRyZWVkaXJvcGVuIHRyZWVoZWlnaHQgdHJlZXBhcmVudCB0cmVlaW5kZXgKKworICAgIHNldCBpeCAkdHJlZWluZGV4KCRkaXIpCisgICAgJHcgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgJHcgZGVsZXRlIHM6JGl4IGU6JGl4CisgICAgc2V0IHRyZWVkaXJvcGVuKCRkaXIpIDAKKyAgICAkdyBpbWFnZSBjb25maWd1cmUgYTokaXggLWltYWdlIHRyaS1ydAorICAgICR3IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgc2V0IG4gW2V4cHIgezEgLSAkdHJlZWhlaWdodCgkZGlyKX1dCisgICAgd2hpbGUgeyRkaXIgbmUge319IHsKKwlpbmNyIHRyZWVoZWlnaHQoJGRpcikgJG4KKwlzZXQgZGlyICR0cmVlcGFyZW50KCRkaXIpCisgICAgfQorfQorCitwcm9jIHRyZWVvcGVuZGlyIHt3IGRpcn0geworICAgIGdsb2JhbCB0cmVlZGlyb3BlbiB0cmVlaGVpZ2h0IHRyZWVwYXJlbnQgdHJlZWNvbnRlbnRzIHRyZWVpbmRleAorCisgICAgc2V0IGl4ICR0cmVlaW5kZXgoJGRpcikKKyAgICAkdyBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICAkdyBpbWFnZSBjb25maWd1cmUgYTokaXggLWltYWdlIHRyaS1kbgorICAgICR3IG1hcmsgc2V0IGU6JGl4IHM6JGl4CisgICAgJHcgbWFyayBncmF2aXR5IGU6JGl4IHJpZ2h0CisgICAgc2V0IGxldiAwCisgICAgc2V0IHN0ciAiXG4iCisgICAgc2V0IG4gW2xsZW5ndGggJHRyZWVjb250ZW50cygkZGlyKV0KKyAgICBmb3Ige3NldCB4ICRkaXJ9IHskeCBuZSB7fX0ge3NldCB4ICR0cmVlcGFyZW50KCR4KX0geworCWluY3IgbGV2CisJYXBwZW5kIHN0ciAiXHQiCisJaW5jciB0cmVlaGVpZ2h0KCR4KSAkbgorICAgIH0KKyAgICBmb3JlYWNoIGUgJHRyZWVjb250ZW50cygkZGlyKSB7CisJc2V0IGRlICRkaXIkZQorCWlmIHtbc3RyaW5nIGluZGV4ICRlIGVuZF0gZXEgIi8ifSB7CisJICAgIHNldCBpeSAkdHJlZWluZGV4KCRkZSkKKwkgICAgJHcgbWFyayBzZXQgZDokaXkgZTokaXgKKwkgICAgJHcgbWFyayBncmF2aXR5IGQ6JGl5IGxlZnQKKwkgICAgJHcgaW5zZXJ0IGU6JGl4ICRzdHIKKwkgICAgc2V0IHRyZWVkaXJvcGVuKCRkZSkgMAorCSAgICAkdyBpbWFnZSBjcmVhdGUgZTokaXggLWFsaWduIGNlbnRlciAtaW1hZ2UgdHJpLXJ0IC1wYWR4IDEgXAorCQktbmFtZSBhOiRpeQorCSAgICAkdyBpbnNlcnQgZTokaXggJGUgW2hpZ2hsaWdodF90YWcgJGRlXQorCSAgICAkdyBtYXJrIHNldCBzOiRpeSBlOiRpeAorCSAgICAkdyBtYXJrIGdyYXZpdHkgczokaXkgbGVmdAorCSAgICBzZXQgdHJlZWhlaWdodCgkZGUpIDEKKwl9IGVsc2UgeworCSAgICAkdyBpbnNlcnQgZTokaXggJHN0cgorCSAgICAkdyBpbnNlcnQgZTokaXggJGUgW2hpZ2hsaWdodF90YWcgJGRlXQorCX0KKyAgICB9CisgICAgJHcgbWFyayBncmF2aXR5IGU6JGl4IHJpZ2h0CisgICAgJHcgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICBzZXQgdHJlZWRpcm9wZW4oJGRpcikgMQorICAgIHNldCB0b3AgW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4IEAwLDBdIC5dIDBdCisgICAgc2V0IGh0IFskdyBjZ2V0IC1oZWlnaHRdCisgICAgc2V0IGwgW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4IHM6JGl4XSAuXSAwXQorICAgIGlmIHskbCA8ICR0b3B9IHsKKwkkdyB5dmlldyAkbC4wCisgICAgfSBlbHNlaWYgeyRsICsgJG4gKyAxID4gJHRvcCArICRodH0geworCXNldCB0b3AgW2V4cHIgeyRsICsgJG4gKyAyIC0gJGh0fV0KKwlpZiB7JGwgPCAkdG9wfSB7CisJICAgIHNldCB0b3AgJGwKKwl9CisJJHcgeXZpZXcgJHRvcC4wCisgICAgfQorfQorCitwcm9jIHRyZWVjbGljayB7dyB4IHl9IHsKKyAgICBnbG9iYWwgdHJlZWRpcm9wZW4gY21pdG1vZGUgY3RleHQgY2ZsaXN0IGNmbGlzdF90b3AKKworICAgIGlmIHskY21pdG1vZGUgbmUgInRyZWUifSByZXR1cm4KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjZmxpc3RfdG9wXX0gcmV0dXJuCisgICAgc2V0IGwgW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4ICJAJHgsJHkiXSAiLiJdIDBdCisgICAgJGNmbGlzdCB0YWcgcmVtb3ZlIGhpZ2hsaWdodCAkY2ZsaXN0X3RvcC4wICIkY2ZsaXN0X3RvcC4wIGxpbmVlbmQiCisgICAgJGNmbGlzdCB0YWcgYWRkIGhpZ2hsaWdodCAkbC4wICIkbC4wIGxpbmVlbmQiCisgICAgc2V0IGNmbGlzdF90b3AgJGwKKyAgICBpZiB7JGwgPT0gMX0geworCSRjdGV4dCB5dmlldyAxLjAKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGUgW2xpbmV0b2VsdCAkbF0KKyAgICBpZiB7W3N0cmluZyBpbmRleCAkZSBlbmRdIG5lICIvIn0geworCXNob3dmaWxlICRlCisgICAgfSBlbHNlaWYgeyR0cmVlZGlyb3BlbigkZSl9IHsKKwl0cmVlY2xvc2VkaXIgJHcgJGUKKyAgICB9IGVsc2UgeworCXRyZWVvcGVuZGlyICR3ICRlCisgICAgfQorfQorCitwcm9jIHNldGZpbGVsaXN0IHtpZH0geworICAgIGdsb2JhbCB0cmVlZmlsZWxpc3QgY2ZsaXN0IGp1bXBfdG9faGVyZQorCisgICAgdHJlZXZpZXcgJGNmbGlzdCAkdHJlZWZpbGVsaXN0KCRpZCkgMAorICAgIGlmIHskanVtcF90b19oZXJlIG5lIHt9fSB7CisJc2V0IGYgW2xpbmRleCAkanVtcF90b19oZXJlIDBdCisJaWYge1tsc2VhcmNoIC1leGFjdCAkdHJlZWZpbGVsaXN0KCRpZCkgJGZdID49IDB9IHsKKwkgICAgc2hvd2ZpbGUgJGYKKwl9CisgICAgfQorfQorCitpbWFnZSBjcmVhdGUgYml0bWFwIHRyaS1ydCAtYmFja2dyb3VuZCBibGFjayAtZm9yZWdyb3VuZCBibHVlIC1kYXRhIHsKKyAgICAjZGVmaW5lIHRyaS1ydF93aWR0aCAxMworICAgICNkZWZpbmUgdHJpLXJ0X2hlaWdodCAxMworICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHRyaS1ydF9iaXRzW10gPSB7CisgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHhmMCwgMHgwMCwKKyAgICAgICAweGYwLCAweDAxLCAweGYwLCAweDAwLCAweDcwLCAweDAwLCAweDMwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgIDB4MDAsIDB4MDB9OworfSAtbWFza2RhdGEgeworICAgICNkZWZpbmUgdHJpLXJ0LW1hc2tfd2lkdGggMTMKKyAgICAjZGVmaW5lIHRyaS1ydC1tYXNrX2hlaWdodCAxMworICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHRyaS1ydC1tYXNrX2JpdHNbXSA9IHsKKyAgICAgICAweDA4LCAweDAwLCAweDE4LCAweDAwLCAweDM4LCAweDAwLCAweDc4LCAweDAwLCAweGY4LCAweDAwLCAweGY4LCAweDAxLAorICAgICAgIDB4ZjgsIDB4MDMsIDB4ZjgsIDB4MDEsIDB4ZjgsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MTgsIDB4MDAsCisgICAgICAgMHgwOCwgMHgwMH07Cit9CitpbWFnZSBjcmVhdGUgYml0bWFwIHRyaS1kbiAtYmFja2dyb3VuZCBibGFjayAtZm9yZWdyb3VuZCBibHVlIC1kYXRhIHsKKyAgICAjZGVmaW5lIHRyaS1kbl93aWR0aCAxMworICAgICNkZWZpbmUgdHJpLWRuX2hlaWdodCAxMworICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHRyaS1kbl9iaXRzW10gPSB7CisgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwNywgMHhmOCwgMHgwMywKKyAgICAgICAweGYwLCAweDAxLCAweGUwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgIDB4MDAsIDB4MDB9OworfSAtbWFza2RhdGEgeworICAgICNkZWZpbmUgdHJpLWRuLW1hc2tfd2lkdGggMTMKKyAgICAjZGVmaW5lIHRyaS1kbi1tYXNrX2hlaWdodCAxMworICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHRyaS1kbi1tYXNrX2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweGZlLCAweDBmLCAweGZjLCAweDA3LAorICAgICAgIDB4ZjgsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgMHgwMCwgMHgwMH07Cit9CisKK2ltYWdlIGNyZWF0ZSBiaXRtYXAgcmVmaWNvbi1UIC1iYWNrZ3JvdW5kIGJsYWNrIC1mb3JlZ3JvdW5kIHllbGxvdyAtZGF0YSB7CisgICAgI2RlZmluZSB0YWdpY29uX3dpZHRoIDEzCisgICAgI2RlZmluZSB0YWdpY29uX2hlaWdodCA5CisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdGFnaWNvbl9iaXRzW10gPSB7CisgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNywgMHhmOCwgMHgwNywKKyAgICAgICAweGZjLCAweDA3LCAweGY4LCAweDA3LCAweGYwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKK30gLW1hc2tkYXRhIHsKKyAgICAjZGVmaW5lIHRhZ2ljb24tbWFza193aWR0aCAxMworICAgICNkZWZpbmUgdGFnaWNvbi1tYXNrX2hlaWdodCA5CisgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgdGFnaWNvbi1tYXNrX2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweGYwLCAweDBmLCAweGY4LCAweDBmLCAweGZjLCAweDBmLAorICAgICAgIDB4ZmUsIDB4MGYsIDB4ZmMsIDB4MGYsIDB4ZjgsIDB4MGYsIDB4ZjAsIDB4MGYsIDB4MDAsIDB4MDB9OworfQorc2V0IHJlY3RkYXRhIHsKKyAgICAjZGVmaW5lIGhlYWRpY29uX3dpZHRoIDEzCisgICAgI2RlZmluZSBoZWFkaWNvbl9oZWlnaHQgOQorICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYWRpY29uX2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA3LCAweGY4LCAweDA3LAorICAgICAgIDB4ZjgsIDB4MDcsIDB4ZjgsIDB4MDcsIDB4ZjgsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworfQorc2V0IHJlY3RtYXNrIHsKKyAgICAjZGVmaW5lIGhlYWRpY29uLW1hc2tfd2lkdGggMTMKKyAgICAjZGVmaW5lIGhlYWRpY29uLW1hc2tfaGVpZ2h0IDkKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFkaWNvbi1tYXNrX2JpdHNbXSA9IHsKKyAgICAgICAweDAwLCAweDAwLCAweGZjLCAweDBmLCAweGZjLCAweDBmLCAweGZjLCAweDBmLAorICAgICAgIDB4ZmMsIDB4MGYsIDB4ZmMsIDB4MGYsIDB4ZmMsIDB4MGYsIDB4ZmMsIDB4MGYsIDB4MDAsIDB4MDB9OworfQoraW1hZ2UgY3JlYXRlIGJpdG1hcCByZWZpY29uLUggLWJhY2tncm91bmQgYmxhY2sgLWZvcmVncm91bmQgIiMwMGZmMDAiIFwKKyAgICAtZGF0YSAkcmVjdGRhdGEgLW1hc2tkYXRhICRyZWN0bWFzaworaW1hZ2UgY3JlYXRlIGJpdG1hcCByZWZpY29uLVIgLWJhY2tncm91bmQgYmxhY2sgLWZvcmVncm91bmQgIiNmZmRkYWEiIFwKKyAgICAtZGF0YSAkcmVjdGRhdGEgLW1hc2tkYXRhICRyZWN0bWFzaworaW1hZ2UgY3JlYXRlIGJpdG1hcCByZWZpY29uLW8gLWJhY2tncm91bmQgYmxhY2sgLWZvcmVncm91bmQgIiNkZGRkZmYiIFwKKyAgICAtZGF0YSAkcmVjdGRhdGEgLW1hc2tkYXRhICRyZWN0bWFzaworCitwcm9jIGluaXRfZmxpc3Qge2ZpcnN0fSB7CisgICAgZ2xvYmFsIGNmbGlzdCBjZmxpc3RfdG9wIGRpZmZmaWxlc3RhcnQKKworICAgICRjZmxpc3QgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgJGNmbGlzdCBkZWxldGUgMC4wIGVuZAorICAgIGlmIHskZmlyc3QgbmUge319IHsKKwkkY2ZsaXN0IGluc2VydCBlbmQgJGZpcnN0CisJc2V0IGNmbGlzdF90b3AgMQorCSRjZmxpc3QgdGFnIGFkZCBoaWdobGlnaHQgMS4wICIxLjAgbGluZWVuZCIKKyAgICB9IGVsc2UgeworCXVuc2V0IC1ub2NvbXBsYWluIGNmbGlzdF90b3AKKyAgICB9CisgICAgJGNmbGlzdCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIHNldCBkaWZmZmlsZXN0YXJ0IHt9Cit9CisKK3Byb2MgaGlnaGxpZ2h0X3RhZyB7Zn0geworICAgIGdsb2JhbCBoaWdobGlnaHRfcGF0aHMKKworICAgIGZvcmVhY2ggcCAkaGlnaGxpZ2h0X3BhdGhzIHsKKwlpZiB7W3N0cmluZyBtYXRjaCAkcCAkZl19IHsKKwkgICAgcmV0dXJuICJib2xkIgorCX0KKyAgICB9CisgICAgcmV0dXJuIHt9Cit9CisKK3Byb2MgaGlnaGxpZ2h0X2ZpbGVsaXN0IHt9IHsKKyAgICBnbG9iYWwgY21pdG1vZGUgY2ZsaXN0CisKKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGlmIHskY21pdG1vZGUgbmUgInRyZWUifSB7CisJc2V0IGVuZCBbbGluZGV4IFtzcGxpdCBbJGNmbGlzdCBpbmRleCBlbmRdIC5dIDBdCisJZm9yIHtzZXQgbCAyfSB7JGwgPCAkZW5kfSB7aW5jciBsfSB7CisJICAgIHNldCBsaW5lIFskY2ZsaXN0IGdldCAkbC4wICIkbC4wIGxpbmVlbmQiXQorCSAgICBpZiB7W2hpZ2hsaWdodF90YWcgJGxpbmVdIG5lIHt9fSB7CisJCSRjZmxpc3QgdGFnIGFkZCBib2xkICRsLjAgIiRsLjAgbGluZWVuZCIKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCWhpZ2hsaWdodF90cmVlIDIge30KKyAgICB9CisgICAgJGNmbGlzdCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCitwcm9jIHVuaGlnaGxpZ2h0X2ZpbGVsaXN0IHt9IHsKKyAgICBnbG9iYWwgY2ZsaXN0CisKKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgICRjZmxpc3QgdGFnIHJlbW92ZSBib2xkIDEuMCBlbmQKKyAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKK3Byb2MgYWRkX2ZsaXN0IHtmbH0geworICAgIGdsb2JhbCBjZmxpc3QKKworICAgICRjZmxpc3QgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgZm9yZWFjaCBmICRmbCB7CisJJGNmbGlzdCBpbnNlcnQgZW5kICJcbiIKKwkkY2ZsaXN0IGluc2VydCBlbmQgJGYgW2hpZ2hsaWdodF90YWcgJGZdCisgICAgfQorICAgICRjZmxpc3QgY29uZiAtc3RhdGUgZGlzYWJsZWQKK30KKworcHJvYyBzZWxfZmxpc3Qge3cgeCB5fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGRpZmZmaWxlc3RhcnQgY2ZsaXN0IGNmbGlzdF90b3AgY21pdG1vZGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSByZXR1cm4KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjZmxpc3RfdG9wXX0gcmV0dXJuCisgICAgc2V0IGwgW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4ICJAJHgsJHkiXSAiLiJdIDBdCisgICAgJGNmbGlzdCB0YWcgcmVtb3ZlIGhpZ2hsaWdodCAkY2ZsaXN0X3RvcC4wICIkY2ZsaXN0X3RvcC4wIGxpbmVlbmQiCisgICAgJGNmbGlzdCB0YWcgYWRkIGhpZ2hsaWdodCAkbC4wICIkbC4wIGxpbmVlbmQiCisgICAgc2V0IGNmbGlzdF90b3AgJGwKKyAgICBpZiB7JGwgPT0gMX0geworCSRjdGV4dCB5dmlldyAxLjAKKyAgICB9IGVsc2UgeworCWNhdGNoIHskY3RleHQgeXZpZXcgW2xpbmRleCAkZGlmZmZpbGVzdGFydCBbZXhwciB7JGwgLSAyfV1dfQorICAgIH0KKyAgICBzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfY3VycmVudF9zY3JvbGxwb3MKK30KKworcHJvYyBwb3BfZmxpc3RfbWVudSB7dyBYIFkgeCB5fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGNmbGlzdCBjbWl0bW9kZSBmbGlzdF9tZW51IGZsaXN0X21lbnVfZmlsZQorICAgIGdsb2JhbCB0cmVlZGlmZnMgZGlmZmlkcworCisgICAgc3RvcGZpbmRpbmcKKyAgICBzZXQgbCBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggIkAkeCwkeSJdICIuIl0gMF0KKyAgICBpZiB7JGwgPD0gMX0gcmV0dXJuCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHsKKwlzZXQgZSBbbGluZXRvZWx0ICRsXQorCWlmIHtbc3RyaW5nIGluZGV4ICRlIGVuZF0gZXEgIi8ifSByZXR1cm4KKyAgICB9IGVsc2UgeworCXNldCBlIFtsaW5kZXggJHRyZWVkaWZmcygkZGlmZmlkcykgW2V4cHIgeyRsLTJ9XV0KKyAgICB9CisgICAgc2V0IGZsaXN0X21lbnVfZmlsZSAkZQorICAgIHNldCB4ZGlmZnN0YXRlICJub3JtYWwiCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHsKKwlzZXQgeGRpZmZzdGF0ZSAiZGlzYWJsZWQiCisgICAgfQorICAgICMgRGlzYWJsZSAiRXh0ZXJuYWwgZGlmZiIgaXRlbSBpbiB0cmVlIG1vZGUKKyAgICAkZmxpc3RfbWVudSBlbnRyeWNvbmYgMiAtc3RhdGUgJHhkaWZmc3RhdGUKKyAgICB0a19wb3B1cCAkZmxpc3RfbWVudSAkWCAkWQorfQorCitwcm9jIGZpbmRfY3RleHRfZmlsZWluZm8ge2xpbmV9IHsKKyAgICBnbG9iYWwgY3RleHRfZmlsZV9uYW1lcyBjdGV4dF9maWxlX2xpbmVzCisKKyAgICBzZXQgb2sgW2JzZWFyY2ggJGN0ZXh0X2ZpbGVfbGluZXMgJGxpbmVdCisgICAgc2V0IHRsaW5lIFtsaW5kZXggJGN0ZXh0X2ZpbGVfbGluZXMgJG9rXQorCisgICAgaWYgeyRvayA+PSBbbGxlbmd0aCAkY3RleHRfZmlsZV9saW5lc10gfHwgJGxpbmUgPCAkdGxpbmV9IHsKKyAgICAgICAgcmV0dXJuIHt9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFtsaXN0IFtsaW5kZXggJGN0ZXh0X2ZpbGVfbmFtZXMgJG9rXSAkdGxpbmVdCisgICAgfQorfQorCitwcm9jIHBvcF9kaWZmX21lbnUge3cgWCBZIHggeX0geworICAgIGdsb2JhbCBjdGV4dCBkaWZmX21lbnUgZmxpc3RfbWVudV9maWxlCisgICAgZ2xvYmFsIGRpZmZfbWVudV90eHRwb3MgZGlmZl9tZW51X2xpbmUKKyAgICBnbG9iYWwgZGlmZl9tZW51X2ZpbGViYXNlCisKKyAgICBzZXQgZGlmZl9tZW51X3R4dHBvcyBbc3BsaXQgWyR3IGluZGV4ICJAJHgsJHkiXSAiLiJdCisgICAgc2V0IGRpZmZfbWVudV9saW5lIFtsaW5kZXggJGRpZmZfbWVudV90eHRwb3MgMF0KKyAgICAjIGRvbid0IHBvcCB1cCB0aGUgbWVudSBvbiBodW5rLXNlcGFyYXRvciBvciBmaWxlLXNlcGFyYXRvciBsaW5lcworICAgIGlmIHtbbHNlYXJjaCAtZ2xvYiBbJGN0ZXh0IHRhZyBuYW1lcyAkZGlmZl9tZW51X2xpbmUuMF0gIipzZXAiXSA+PSAwfSB7CisJcmV0dXJuCisgICAgfQorICAgIHN0b3BmaW5kaW5nCisgICAgc2V0IGYgW2ZpbmRfY3RleHRfZmlsZWluZm8gJGRpZmZfbWVudV9saW5lXQorICAgIGlmIHskZiBlcSB7fX0gcmV0dXJuCisgICAgc2V0IGZsaXN0X21lbnVfZmlsZSBbbGluZGV4ICRmIDBdCisgICAgc2V0IGRpZmZfbWVudV9maWxlYmFzZSBbbGluZGV4ICRmIDFdCisgICAgdGtfcG9wdXAgJGRpZmZfbWVudSAkWCAkWQorfQorCitwcm9jIGZsaXN0X2hsIHtvbmx5fSB7CisgICAgZ2xvYmFsIGZsaXN0X21lbnVfZmlsZSBmaW5kc3RyaW5nIGdkdHR5cGUKKworICAgIHNldCB4IFtzaGVsbHF1b3RlICRmbGlzdF9tZW51X2ZpbGVdCisgICAgaWYgeyRvbmx5IHx8ICRmaW5kc3RyaW5nIGVxIHt9IHx8ICRnZHR0eXBlIG5lIFttYyAidG91Y2hpbmcgcGF0aHM6Il19IHsKKwlzZXQgZmluZHN0cmluZyAkeAorICAgIH0gZWxzZSB7CisJYXBwZW5kIGZpbmRzdHJpbmcgIiAiICR4CisgICAgfQorICAgIHNldCBnZHR0eXBlIFttYyAidG91Y2hpbmcgcGF0aHM6Il0KK30KKworcHJvYyBnaXRrbmV3dG1wZGlyIHt9IHsKKyAgICBnbG9iYWwgZGlmZm51bSBnaXRrdG1wZGlyIGdpdGRpciBlbnYKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGdpdGt0bXBkaXJdfSB7CisJaWYge1tpbmZvIGV4aXN0cyBlbnYoR0lUS19UTVBESVIpXX0geworCSAgICBzZXQgdG1wZGlyICRlbnYoR0lUS19UTVBESVIpCisJfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBlbnYoVE1QRElSKV19IHsKKwkgICAgc2V0IHRtcGRpciAkZW52KFRNUERJUikKKwl9IGVsc2UgeworCSAgICBzZXQgdG1wZGlyICRnaXRkaXIKKwl9CisJc2V0IGdpdGt0bXBmb3JtYXQgW2ZpbGUgam9pbiAkdG1wZGlyICIuZ2l0ay10bXAuWFhYWFhYIl0KKwlpZiB7W2NhdGNoIHtzZXQgZ2l0a3RtcGRpciBbZXhlYyBta3RlbXAgLWQgJGdpdGt0bXBmb3JtYXRdfV19IHsKKwkgICAgc2V0IGdpdGt0bXBkaXIgW2ZpbGUgam9pbiAkZ2l0ZGlyIFtmb3JtYXQgIi5naXRrLXRtcC4lcyIgW3BpZF1dXQorCX0KKwlpZiB7W2NhdGNoIHtmaWxlIG1rZGlyICRnaXRrdG1wZGlyfSBlcnJdfSB7CisJICAgIGVycm9yX3BvcHVwICJbbWMgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IiAkZ2l0a3RtcGRpcl0gJGVyciIKKwkgICAgdW5zZXQgZ2l0a3RtcGRpcgorCSAgICByZXR1cm4ge30KKwl9CisJc2V0IGRpZmZudW0gMAorICAgIH0KKyAgICBpbmNyIGRpZmZudW0KKyAgICBzZXQgZGlmZmRpciBbZmlsZSBqb2luICRnaXRrdG1wZGlyICRkaWZmbnVtXQorICAgIGlmIHtbY2F0Y2gge2ZpbGUgbWtkaXIgJGRpZmZkaXJ9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIgJGRpZmZkaXJdICRlcnIiCisJcmV0dXJuIHt9CisgICAgfQorICAgIHJldHVybiAkZGlmZmRpcgorfQorCitwcm9jIHNhdmVfZmlsZV9mcm9tX2NvbW1pdCB7ZmlsZW5hbWUgb3V0cHV0IHdoYXR9IHsKKyAgICBnbG9iYWwgbnVsbGZpbGUKKworICAgIGlmIHtbY2F0Y2gge2V4ZWMgZ2l0IHNob3cgJGZpbGVuYW1lIC0tID4gJG91dHB1dH0gZXJyXX0geworCWlmIHtbc3RyaW5nIG1hdGNoICJmYXRhbDogYmFkIHJldmlzaW9uICoiICRlcnJdfSB7CisJICAgIHJldHVybiAkbnVsbGZpbGUKKwl9CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiICRmaWxlbmFtZSAkd2hhdF0gJGVyciIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgcmV0dXJuICRvdXRwdXQKK30KKworcHJvYyBleHRlcm5hbF9kaWZmX2dldF9vbmVfZmlsZSB7ZGlmZmlkIGZpbGVuYW1lIGRpZmZkaXJ9IHsKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgbnVsbGZpbGUKKyAgICBnbG9iYWwgd29ya3RyZWUKKworICAgIGlmIHskZGlmZmlkID09ICRudWxsaWR9IHsKKyAgICAgICAgc2V0IGRpZmZmaWxlIFtmaWxlIGpvaW4gJHdvcmt0cmVlICRmaWxlbmFtZV0KKwlpZiB7W2ZpbGUgZXhpc3RzICRkaWZmZmlsZV19IHsKKwkgICAgcmV0dXJuICRkaWZmZmlsZQorCX0KKwlyZXR1cm4gJG51bGxmaWxlCisgICAgfQorICAgIGlmIHskZGlmZmlkID09ICRudWxsaWQyfSB7CisgICAgICAgIHNldCBkaWZmZmlsZSBbZmlsZSBqb2luICRkaWZmZGlyICJcW2luZGV4XF0gW2ZpbGUgdGFpbCAkZmlsZW5hbWVdIl0KKyAgICAgICAgcmV0dXJuIFtzYXZlX2ZpbGVfZnJvbV9jb21taXQgOiRmaWxlbmFtZSAkZGlmZmZpbGUgaW5kZXhdCisgICAgfQorICAgIHNldCBkaWZmZmlsZSBbZmlsZSBqb2luICRkaWZmZGlyICJcWyRkaWZmaWRcXSBbZmlsZSB0YWlsICRmaWxlbmFtZV0iXQorICAgIHJldHVybiBbc2F2ZV9maWxlX2Zyb21fY29tbWl0ICRkaWZmaWQ6JGZpbGVuYW1lICRkaWZmZmlsZSBcCisJICAgICAgICJyZXZpc2lvbiAkZGlmZmlkIl0KK30KKworcHJvYyBleHRlcm5hbF9kaWZmIHt9IHsKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIKKyAgICBnbG9iYWwgZmxpc3RfbWVudV9maWxlCisgICAgZ2xvYmFsIGRpZmZpZHMKKyAgICBnbG9iYWwgZXh0ZGlmZnRvb2wKKworICAgIGlmIHtbbGxlbmd0aCAkZGlmZmlkc10gPT0gMX0geworICAgICAgICAjIG5vIHJlZmVyZW5jZSBjb21taXQgZ2l2ZW4KKyAgICAgICAgc2V0IGRpZmZpZHRvIFtsaW5kZXggJGRpZmZpZHMgMF0KKyAgICAgICAgaWYgeyRkaWZmaWR0byBlcSAkbnVsbGlkfSB7CisgICAgICAgICAgICAjIGRpZmZpbmcgd29ya2luZyBjb3B5IHdpdGggaW5kZXgKKyAgICAgICAgICAgIHNldCBkaWZmaWRmcm9tICRudWxsaWQyCisgICAgICAgIH0gZWxzZWlmIHskZGlmZmlkdG8gZXEgJG51bGxpZDJ9IHsKKyAgICAgICAgICAgICMgZGlmZmluZyBpbmRleCB3aXRoIEhFQUQKKyAgICAgICAgICAgIHNldCBkaWZmaWRmcm9tICJIRUFEIgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyB1c2UgZmlyc3QgcGFyZW50IGNvbW1pdAorICAgICAgICAgICAgZ2xvYmFsIHBhcmVudGxpc3Qgc2VsZWN0ZWRsaW5lCisgICAgICAgICAgICBzZXQgZGlmZmlkZnJvbSBbbGluZGV4ICRwYXJlbnRsaXN0ICRzZWxlY3RlZGxpbmUgMF0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCBkaWZmaWRmcm9tIFtsaW5kZXggJGRpZmZpZHMgMF0KKyAgICAgICAgc2V0IGRpZmZpZHRvIFtsaW5kZXggJGRpZmZpZHMgMV0KKyAgICB9CisKKyAgICAjIG1ha2Ugc3VyZSB0aGF0IHNldmVyYWwgZGlmZnMgd29udCBjb2xsaWRlCisgICAgc2V0IGRpZmZkaXIgW2dpdGtuZXd0bXBkaXJdCisgICAgaWYgeyRkaWZmZGlyIGVxIHt9fSByZXR1cm4KKworICAgICMgZ2F0aGVyIGZpbGVzIHRvIGRpZmYKKyAgICBzZXQgZGlmZmZyb21maWxlIFtleHRlcm5hbF9kaWZmX2dldF9vbmVfZmlsZSAkZGlmZmlkZnJvbSAkZmxpc3RfbWVudV9maWxlICRkaWZmZGlyXQorICAgIHNldCBkaWZmdG9maWxlIFtleHRlcm5hbF9kaWZmX2dldF9vbmVfZmlsZSAkZGlmZmlkdG8gJGZsaXN0X21lbnVfZmlsZSAkZGlmZmRpcl0KKworICAgIGlmIHskZGlmZmZyb21maWxlIG5lIHt9ICYmICRkaWZmdG9maWxlIG5lIHt9fSB7CisgICAgICAgIHNldCBjbWQgW2xpc3QgW3NoZWxsc3BsaXQgJGV4dGRpZmZ0b29sXSAkZGlmZmZyb21maWxlICRkaWZmdG9maWxlXQorICAgICAgICBpZiB7W2NhdGNoIHtzZXQgZmwgW29wZW4gfCRjbWQgcl19IGVycl19IHsKKyAgICAgICAgICAgIGZpbGUgZGVsZXRlIC1mb3JjZSAkZGlmZmRpcgorICAgICAgICAgICAgZXJyb3JfcG9wdXAgIiRleHRkaWZmdG9vbDogW21jICJjb21tYW5kIGZhaWxlZDoiXSAkZXJyIgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmNvbmZpZ3VyZSAkZmwgLWJsb2NraW5nIDAKKyAgICAgICAgICAgIGZpbGVydW4gJGZsIFtsaXN0IGRlbGV0ZV9hdF9lb2YgJGZsICRkaWZmZGlyXQorICAgICAgICB9CisgICAgfQorfQorCitwcm9jIGZpbmRfaHVua19ibGFtZXNwZWMge2Jhc2UgbGluZX0geworICAgIGdsb2JhbCBjdGV4dAorCisgICAgIyBGaW5kIGFuZCBwYXJzZSB0aGUgaHVuayBoZWFkZXIKKyAgICBzZXQgc19saXggWyRjdGV4dCBzZWFyY2ggLWJhY2t3YXJkcyAtcmVnZXhwIF5AQCAiJGxpbmUuMCBsaW5lZW5kIiAkYmFzZS4wXQorICAgIGlmIHskc19saXggZXEge319IHJldHVybgorCisgICAgc2V0IHNfbGluZSBbJGN0ZXh0IGdldCAkc19saXggIiRzX2xpeCArIDEgbGluZXMiXQorICAgIGlmIHshW3JlZ2V4cCB7XkBAQCooKCAtXGQrKCxcZCspPykrKSBcKyhcZCspKCxcZCspPyBAQH0gJHNfbGluZSBcCisJICAgIHNfbGluZSBvbGRfc3BlY3Mgb3N6IG9zejEgbmV3X2xpbmUgbnN6XX0geworCXJldHVybgorICAgIH0KKworICAgICMgYmFzZSBsaW5lcyBmb3IgdGhlIHBhcmVudHMKKyAgICBzZXQgYmFzZV9saW5lcyBbbGlzdCAkbmV3X2xpbmVdCisgICAgZm9yZWFjaCBvbGRfc3BlYyBbbHJhbmdlIFtzcGxpdCAkb2xkX3NwZWNzICIgIl0gMSBlbmRdIHsKKwlpZiB7IVtyZWdleHAgLS0gey0oXGQrKSgsXGQrKT99ICRvbGRfc3BlYyBcCisJICAgICAgICBvbGRfc3BlYyBvbGRfbGluZSBvc3pdfSB7CisJICAgIHJldHVybgorCX0KKwlsYXBwZW5kIGJhc2VfbGluZXMgJG9sZF9saW5lCisgICAgfQorCisgICAgIyBOb3cgc2NhbiB0aGUgbGluZXMgdG8gZGV0ZXJtaW5lIG9mZnNldCB3aXRoaW4gdGhlIGh1bmsKKyAgICBzZXQgbWF4X3BhcmVudCBbZXhwciB7W2xsZW5ndGggJGJhc2VfbGluZXNdLTJ9XQorICAgIHNldCBkbGluZSAwCisgICAgc2V0IHNfbG5vIFtsaW5kZXggW3NwbGl0ICRzX2xpeCAiLiJdIDBdCisKKyAgICAjIERldGVybWluZSBpZiB0aGUgbGluZSBpcyByZW1vdmVkCisgICAgc2V0IGNodW5rIFskY3RleHQgZ2V0ICRsaW5lLjAgIiRsaW5lLjEgKyAkbWF4X3BhcmVudCBjaGFycyJdCisgICAgaWYge1tzdHJpbmcgbWF0Y2gge1stKyBdKn0gJGNodW5rXX0geworCXNldCByZW1vdmVkX2lkeCBbc3RyaW5nIGZpcnN0ICItIiAkY2h1bmtdCisJIyBDaG9vc2UgYSBwYXJlbnQgaW5kZXgKKwlpZiB7JHJlbW92ZWRfaWR4ID49IDB9IHsKKwkgICAgc2V0IHBhcmVudCAkcmVtb3ZlZF9pZHgKKwl9IGVsc2UgeworCSAgICBzZXQgdW5jaGFuZ2VkX2lkeCBbc3RyaW5nIGZpcnN0ICIgIiAkY2h1bmtdCisJICAgIGlmIHskdW5jaGFuZ2VkX2lkeCA+PSAwfSB7CisJCXNldCBwYXJlbnQgJHVuY2hhbmdlZF9pZHgKKwkgICAgfSBlbHNlIHsKKwkJIyBibGFtZSB0aGUgY3VycmVudCBjb21taXQKKwkJc2V0IHBhcmVudCAtMQorCSAgICB9CisJfQorCSMgdGhlbiBjb3VudCBvdGhlciBsaW5lcyB0aGF0IGJlbG9uZyB0byBpdAorCWZvciB7c2V0IGkgJGxpbmV9IHtbaW5jciBpIC0xXSA+ICRzX2xub30ge30geworCSAgICBzZXQgY2h1bmsgWyRjdGV4dCBnZXQgJGkuMCAiJGkuMSArICRtYXhfcGFyZW50IGNoYXJzIl0KKwkgICAgIyBEZXRlcm1pbmUgaWYgdGhlIGxpbmUgaXMgcmVtb3ZlZAorCSAgICBzZXQgcmVtb3ZlZF9pZHggW3N0cmluZyBmaXJzdCAiLSIgJGNodW5rXQorCSAgICBpZiB7JHBhcmVudCA+PSAwfSB7CisJCXNldCBjb2RlIFtzdHJpbmcgaW5kZXggJGNodW5rICRwYXJlbnRdCisJCWlmIHskY29kZSBlcSAiLSIgfHwgKCRyZW1vdmVkX2lkeCA8IDAgJiYgJGNvZGUgbmUgIisiKX0geworCQkgICAgaW5jciBkbGluZQorCQl9CisJICAgIH0gZWxzZSB7CisJCWlmIHskcmVtb3ZlZF9pZHggPCAwfSB7CisJCSAgICBpbmNyIGRsaW5lCisJCX0KKwkgICAgfQorCX0KKwlpbmNyIHBhcmVudAorICAgIH0gZWxzZSB7CisJc2V0IHBhcmVudCAwCisgICAgfQorCisgICAgaW5jciBkbGluZSBbbGluZGV4ICRiYXNlX2xpbmVzICRwYXJlbnRdCisgICAgcmV0dXJuIFtsaXN0ICRwYXJlbnQgJGRsaW5lXQorfQorCitwcm9jIGV4dGVybmFsX2JsYW1lX2RpZmYge30geworICAgIGdsb2JhbCBjdXJyZW50aWQgY21pdG1vZGUKKyAgICBnbG9iYWwgZGlmZl9tZW51X3R4dHBvcyBkaWZmX21lbnVfbGluZQorICAgIGdsb2JhbCBkaWZmX21lbnVfZmlsZWJhc2UgZmxpc3RfbWVudV9maWxlCisKKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0geworCXNldCBwYXJlbnRfaWR4IDAKKwlzZXQgbGluZSBbZXhwciB7JGRpZmZfbWVudV9saW5lIC0gJGRpZmZfbWVudV9maWxlYmFzZX1dCisgICAgfSBlbHNlIHsKKwlzZXQgaGluZm8gW2ZpbmRfaHVua19ibGFtZXNwZWMgJGRpZmZfbWVudV9maWxlYmFzZSAkZGlmZl9tZW51X2xpbmVdCisJaWYgeyRoaW5mbyBuZSB7fX0geworCSAgICBzZXQgcGFyZW50X2lkeCBbbGluZGV4ICRoaW5mbyAwXQorCSAgICBzZXQgbGluZSBbbGluZGV4ICRoaW5mbyAxXQorCX0gZWxzZSB7CisJICAgIHNldCBwYXJlbnRfaWR4IDAKKwkgICAgc2V0IGxpbmUgMAorCX0KKyAgICB9CisKKyAgICBleHRlcm5hbF9ibGFtZSAkcGFyZW50X2lkeCAkbGluZQorfQorCisjIEZpbmQgdGhlIFNIQTEgSUQgb2YgdGhlIGJsb2IgZm9yIGZpbGUgJGZuYW1lIGluIHRoZSBpbmRleAorIyBhdCBzdGFnZSAwIG9yIDIKK3Byb2MgaW5kZXhfc2hhMSB7Zm5hbWV9IHsKKyAgICBzZXQgZiBbb3BlbiBbbGlzdCB8IGdpdCBscy1maWxlcyAtcyAkZm5hbWVdIHJdCisgICAgd2hpbGUge1tnZXRzICRmIGxpbmVdID49IDB9IHsKKwlzZXQgaW5mbyBbbGluZGV4IFtzcGxpdCAkbGluZSAiXHQiXSAwXQorCXNldCBzdGFnZSBbbGluZGV4ICRpbmZvIDJdCisJaWYgeyRzdGFnZSBlcSAiMCIgfHwgJHN0YWdlIGVxICIyIn0geworCSAgICBjbG9zZSAkZgorCSAgICByZXR1cm4gW2xpbmRleCAkaW5mbyAxXQorCX0KKyAgICB9CisgICAgY2xvc2UgJGYKKyAgICByZXR1cm4ge30KK30KKworIyBUdXJuIGFuIGFic29sdXRlIHBhdGggaW50byBvbmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5Citwcm9jIG1ha2VfcmVsYXRpdmUge2Z9IHsKKyAgICBpZiB7W2ZpbGUgcGF0aHR5cGUgJGZdIGVxICJyZWxhdGl2ZSJ9IHsKKwlyZXR1cm4gJGYKKyAgICB9CisgICAgc2V0IGVsdHMgW2ZpbGUgc3BsaXQgJGZdCisgICAgc2V0IGhlcmUgW2ZpbGUgc3BsaXQgW3B3ZF1dCisgICAgc2V0IGVpIDAKKyAgICBzZXQgaGkgMAorICAgIHNldCByZXMge30KKyAgICBmb3JlYWNoIGQgJGhlcmUgeworCWlmIHskZWkgPCAkaGkgfHwgJGVpID49IFtsbGVuZ3RoICRlbHRzXSB8fCBbbGluZGV4ICRlbHRzICRlaV0gbmUgJGR9IHsKKwkgICAgbGFwcGVuZCByZXMgIi4uIgorCX0gZWxzZSB7CisJICAgIGluY3IgZWkKKwl9CisJaW5jciBoaQorICAgIH0KKyAgICBzZXQgZWx0cyBbY29uY2F0ICRyZXMgW2xyYW5nZSAkZWx0cyAkZWkgZW5kXV0KKyAgICByZXR1cm4gW2V2YWwgZmlsZSBqb2luICRlbHRzXQorfQorCitwcm9jIGV4dGVybmFsX2JsYW1lIHtwYXJlbnRfaWR4IHtsaW5lIHt9fX0geworICAgIGdsb2JhbCBmbGlzdF9tZW51X2ZpbGUgY2R1cAorICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMgorICAgIGdsb2JhbCBwYXJlbnRsaXN0IHNlbGVjdGVkbGluZSBjdXJyZW50aWQKKworICAgIGlmIHskcGFyZW50X2lkeCA+IDB9IHsKKwlzZXQgYmFzZV9jb21taXQgW2xpbmRleCAkcGFyZW50bGlzdCAkc2VsZWN0ZWRsaW5lIFtleHByIHskcGFyZW50X2lkeC0xfV1dCisgICAgfSBlbHNlIHsKKwlzZXQgYmFzZV9jb21taXQgJGN1cnJlbnRpZAorICAgIH0KKworICAgIGlmIHskYmFzZV9jb21taXQgZXEge30gfHwgJGJhc2VfY29tbWl0IGVxICRudWxsaWQgfHwgJGJhc2VfY29tbWl0IGVxICRudWxsaWQyfSB7CisJZXJyb3JfcG9wdXAgW21jICJObyBzdWNoIGNvbW1pdCJdCisJcmV0dXJuCisgICAgfQorCisgICAgc2V0IGNtZGxpbmUgW2xpc3QgZ2l0IGd1aSBibGFtZV0KKyAgICBpZiB7JGxpbmUgbmUge30gJiYgJGxpbmUgPiAxfSB7CisJbGFwcGVuZCBjbWRsaW5lICItLWxpbmU9JGxpbmUiCisgICAgfQorICAgIHNldCBmIFtmaWxlIGpvaW4gJGNkdXAgJGZsaXN0X21lbnVfZmlsZV0KKyAgICAjIFVuZm9ydHVuYXRlbHkgaXQgc2VlbXMgZ2l0IGd1aSBibGFtZSBkb2Vzbid0IGxpa2UKKyAgICAjIGJlaW5nIGdpdmVuIGFuIGFic29sdXRlIHBhdGguLi4KKyAgICBzZXQgZiBbbWFrZV9yZWxhdGl2ZSAkZl0KKyAgICBsYXBwZW5kIGNtZGxpbmUgJGJhc2VfY29tbWl0ICRmCisgICAgaWYge1tjYXRjaCB7ZXZhbCBleGVjICRjbWRsaW5lICZ9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiXSAkZXJyIgorICAgIH0KK30KKworcHJvYyBzaG93X2xpbmVfc291cmNlIHt9IHsKKyAgICBnbG9iYWwgY21pdG1vZGUgY3VycmVudGlkIHBhcmVudHMgY3VydmlldyBibGFtZXN0dWZmIGJsYW1laW5zdAorICAgIGdsb2JhbCBkaWZmX21lbnVfbGluZSBkaWZmX21lbnVfZmlsZWJhc2UgZmxpc3RfbWVudV9maWxlCisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIGdpdGRpciBjZHVwCisKKyAgICBzZXQgZnJvbV9pbmRleCB7fQorICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSB7CisJc2V0IGlkICRjdXJyZW50aWQKKwlzZXQgbGluZSBbZXhwciB7JGRpZmZfbWVudV9saW5lIC0gJGRpZmZfbWVudV9maWxlYmFzZX1dCisgICAgfSBlbHNlIHsKKwlzZXQgaCBbZmluZF9odW5rX2JsYW1lc3BlYyAkZGlmZl9tZW51X2ZpbGViYXNlICRkaWZmX21lbnVfbGluZV0KKwlpZiB7JGggZXEge319IHJldHVybgorCXNldCBwaSBbbGluZGV4ICRoIDBdCisJaWYgeyRwaSA9PSAwfSB7CisJICAgIG1hcmtfY3RleHRfbGluZSAkZGlmZl9tZW51X2xpbmUKKwkgICAgcmV0dXJuCisJfQorCWluY3IgcGkgLTEKKwlpZiB7JGN1cnJlbnRpZCBlcSAkbnVsbGlkfSB7CisJICAgIGlmIHskcGkgPiAwfSB7CisJCSMgbXVzdCBiZSBhIG1lcmdlIGluIHByb2dyZXNzLi4uCisJCWlmIHtbY2F0Y2ggeworCQkgICAgIyBnZXQgdGhlIGxhc3QgbGluZSBmcm9tIC5naXQvTUVSR0VfSEVBRAorCQkgICAgc2V0IGYgW29wZW4gW2ZpbGUgam9pbiAkZ2l0ZGlyIE1FUkdFX0hFQURdIHJdCisJCSAgICBzZXQgaWQgW2xpbmRleCBbc3BsaXQgW3JlYWQgJGZdICJcbiJdIGVuZC0xXQorCQkgICAgY2xvc2UgJGYKKwkJfSBlcnJdfSB7CisJCSAgICBlcnJvcl9wb3B1cCBbbWMgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiICRlcnJdCisJCSAgICByZXR1cm4KKwkJfQorCSAgICB9IGVsc2VpZiB7JHBhcmVudHMoJGN1cnZpZXcsJGN1cnJlbnRpZCkgZXEgJG51bGxpZDJ9IHsKKwkJIyBuZWVkIHRvIGRvIHRoZSBibGFtZSBmcm9tIHRoZSBpbmRleAorCQlpZiB7W2NhdGNoIHsKKwkJICAgIHNldCBmcm9tX2luZGV4IFtpbmRleF9zaGExICRmbGlzdF9tZW51X2ZpbGVdCisJCX0gZXJyXX0geworCQkgICAgZXJyb3JfcG9wdXAgW21jICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIgJGVycl0KKwkJICAgIHJldHVybgorCQl9CisJICAgIH0gZWxzZSB7CisJCXNldCBpZCAkcGFyZW50cygkY3VydmlldywkY3VycmVudGlkKQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgc2V0IGlkIFtsaW5kZXggJHBhcmVudHMoJGN1cnZpZXcsJGN1cnJlbnRpZCkgJHBpXQorCX0KKwlzZXQgbGluZSBbbGluZGV4ICRoIDFdCisgICAgfQorICAgIHNldCBibGFtZWFyZ3Mge30KKyAgICBpZiB7JGZyb21faW5kZXggbmUge319IHsKKwlsYXBwZW5kIGJsYW1lYXJncyB8IGdpdCBjYXQtZmlsZSBibG9iICRmcm9tX2luZGV4CisgICAgfQorICAgIGxhcHBlbmQgYmxhbWVhcmdzIHwgZ2l0IGJsYW1lIC1wIC1MJGxpbmUsKzEKKyAgICBpZiB7JGZyb21faW5kZXggbmUge319IHsKKwlsYXBwZW5kIGJsYW1lYXJncyAtLWNvbnRlbnRzIC0KKyAgICB9IGVsc2UgeworCWxhcHBlbmQgYmxhbWVhcmdzICRpZAorICAgIH0KKyAgICBsYXBwZW5kIGJsYW1lYXJncyAtLSBbZmlsZSBqb2luICRjZHVwICRmbGlzdF9tZW51X2ZpbGVdCisgICAgaWYge1tjYXRjaCB7CisJc2V0IGYgW29wZW4gJGJsYW1lYXJncyByXQorICAgIH0gZXJyXX0geworCWVycm9yX3BvcHVwIFttYyAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIgJGVycl0KKwlyZXR1cm4KKyAgICB9CisgICAgbm93YnVzeSBibGFtaW5nIFttYyAiU2VhcmNoaW5nIl0KKyAgICBmY29uZmlndXJlICRmIC1ibG9ja2luZyAwCisgICAgc2V0IGkgW3JlZ19pbnN0YW5jZSAkZl0KKyAgICBzZXQgYmxhbWVzdHVmZigkaSkge30KKyAgICBzZXQgYmxhbWVpbnN0ICRpCisgICAgZmlsZXJ1biAkZiBbbGlzdCByZWFkX2xpbmVfc291cmNlICRmICRpXQorfQorCitwcm9jIHN0b3BibGFtaW5nIHt9IHsKKyAgICBnbG9iYWwgYmxhbWVpbnN0CisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGJsYW1laW5zdF19IHsKKwlzdG9wX2luc3RhbmNlICRibGFtZWluc3QKKwl1bnNldCBibGFtZWluc3QKKwlub3RidXN5IGJsYW1pbmcKKyAgICB9Cit9CisKK3Byb2MgcmVhZF9saW5lX3NvdXJjZSB7ZmQgaW5zdH0geworICAgIGdsb2JhbCBibGFtZXN0dWZmIGN1cnZpZXcgY29tbWZkIGJsYW1laW5zdCBudWxsaWQgbnVsbGlkMgorCisgICAgd2hpbGUge1tnZXRzICRmZCBsaW5lXSA+PSAwfSB7CisJbGFwcGVuZCBibGFtZXN0dWZmKCRpbnN0KSAkbGluZQorICAgIH0KKyAgICBpZiB7IVtlb2YgJGZkXX0geworCXJldHVybiAxCisgICAgfQorICAgIHVuc2V0IGNvbW1mZCgkaW5zdCkKKyAgICB1bnNldCBibGFtZWluc3QKKyAgICBub3RidXN5IGJsYW1pbmcKKyAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMQorICAgIGlmIHtbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXX0geworCWVycm9yX3BvcHVwIFttYyAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIiAkZXJyXQorCXJldHVybiAwCisgICAgfQorCisgICAgc2V0IGZuYW1lIHt9CisgICAgc2V0IGxpbmUgW3NwbGl0IFtsaW5kZXggJGJsYW1lc3R1ZmYoJGluc3QpIDBdICIgIl0KKyAgICBzZXQgaWQgW2xpbmRleCAkbGluZSAwXQorICAgIHNldCBsbnVtIFtsaW5kZXggJGxpbmUgMV0KKyAgICBpZiB7W3N0cmluZyBsZW5ndGggJGlkXSA9PSA0MCAmJiBbc3RyaW5nIGlzIHhkaWdpdCAkaWRdICYmCisJW3N0cmluZyBpcyBkaWdpdCAtc3RyaWN0ICRsbnVtXX0geworCSMgbG9vayBmb3IgImZpbGVuYW1lIiBsaW5lCisJZm9yZWFjaCBsICRibGFtZXN0dWZmKCRpbnN0KSB7CisJICAgIGlmIHtbc3RyaW5nIG1hdGNoICJmaWxlbmFtZSAqIiAkbF19IHsKKwkJc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGwgOSBlbmRdCisJCWJyZWFrCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHskZm5hbWUgbmUge319IHsKKwkjIGFsbCBsb29rcyBnb29kLCBzZWxlY3QgaXQKKwlpZiB7JGlkIGVxICRudWxsaWR9IHsKKwkgICAgIyBibGFtZSB1c2VzIGFsbC16ZXJvZXMgdG8gbWVhbiBub3QgY29tbWl0dGVkLAorCSAgICAjIHdoaWNoIHdvdWxkIG1lYW4gYSBjaGFuZ2UgaW4gdGhlIGluZGV4CisJICAgIHNldCBpZCAkbnVsbGlkMgorCX0KKwlpZiB7W2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddfSB7CisJICAgIHNlbGVjdGxpbmUgW3Jvd29mY29tbWl0ICRpZF0gMSBbbGlzdCAkZm5hbWUgJGxudW1dIDEKKwl9IGVsc2UgeworCSAgICBlcnJvcl9wb3B1cCBbbWMgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgXAorCQkJICAgICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IiBbc2hvcnRpZHMgJGlkXV0KKwl9CisgICAgfSBlbHNlIHsKKwlwdXRzICJvb3BzIGNvdWxkbid0IHBhcnNlIGdpdCBibGFtZSBvdXRwdXQiCisgICAgfQorICAgIHJldHVybiAwCit9CisKKyMgZGVsZXRlICRkaXIgd2hlbiB3ZSBzZWUgZW9mIG9uICRmIChwcmVzdW1hYmx5IGJlY2F1c2UgdGhlIGNoaWxkIGhhcyBleGl0ZWQpCitwcm9jIGRlbGV0ZV9hdF9lb2Yge2YgZGlyfSB7CisgICAgd2hpbGUge1tnZXRzICRmIGxpbmVdID49IDB9IHt9CisgICAgaWYge1tlb2YgJGZdfSB7CisJaWYge1tjYXRjaCB7Y2xvc2UgJGZ9IGVycl19IHsKKwkgICAgZXJyb3JfcG9wdXAgIlttYyAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiJdICRlcnIiCisJfQorCWZpbGUgZGVsZXRlIC1mb3JjZSAkZGlyCisJcmV0dXJuIDAKKyAgICB9CisgICAgcmV0dXJuIDEKK30KKworIyBGdW5jdGlvbnMgZm9yIGFkZGluZyBhbmQgcmVtb3Zpbmcgc2hlbGwtdHlwZSBxdW90aW5nCisKK3Byb2Mgc2hlbGxxdW90ZSB7c3RyfSB7CisgICAgaWYgeyFbc3RyaW5nIG1hdGNoICIqXFsnXCJcXCBcdF0qIiAkc3RyXX0geworCXJldHVybiAkc3RyCisgICAgfQorICAgIGlmIHshW3N0cmluZyBtYXRjaCAiKlxbJ1wiXFxdKiIgJHN0cl19IHsKKwlyZXR1cm4gIlwiJHN0clwiIgorICAgIH0KKyAgICBpZiB7IVtzdHJpbmcgbWF0Y2ggIionKiIgJHN0cl19IHsKKwlyZXR1cm4gIickc3RyJyIKKyAgICB9CisgICAgcmV0dXJuICJcIltzdHJpbmcgbWFwIHtcIiBcXFwiIFxcIFxcXFx9ICRzdHJdXCIiCit9CisKK3Byb2Mgc2hlbGxhcmdsaXN0IHtsfSB7CisgICAgc2V0IHN0ciB7fQorICAgIGZvcmVhY2ggYSAkbCB7CisJaWYgeyRzdHIgbmUge319IHsKKwkgICAgYXBwZW5kIHN0ciAiICIKKwl9CisJYXBwZW5kIHN0ciBbc2hlbGxxdW90ZSAkYV0KKyAgICB9CisgICAgcmV0dXJuICRzdHIKK30KKworcHJvYyBzaGVsbGRlcXVvdGUge3N0cn0geworICAgIHNldCByZXQge30KKyAgICBzZXQgdXNlZCAtMQorICAgIHdoaWxlIHsxfSB7CisJaW5jciB1c2VkCisJaWYgeyFbcmVnZXhwIC1zdGFydCAkdXNlZCAtaW5kaWNlcyAiXFsnXCJcXFxcIFx0XSIgJHN0ciBmaXJzdF19IHsKKwkgICAgYXBwZW5kIHJldCBbc3RyaW5nIHJhbmdlICRzdHIgJHVzZWQgZW5kXQorCSAgICBzZXQgdXNlZCBbc3RyaW5nIGxlbmd0aCAkc3RyXQorCSAgICBicmVhaworCX0KKwlzZXQgZmlyc3QgW2xpbmRleCAkZmlyc3QgMF0KKwlzZXQgY2ggW3N0cmluZyBpbmRleCAkc3RyICRmaXJzdF0KKwlpZiB7JGZpcnN0ID4gJHVzZWR9IHsKKwkgICAgYXBwZW5kIHJldCBbc3RyaW5nIHJhbmdlICRzdHIgJHVzZWQgW2V4cHIgeyRmaXJzdCAtIDF9XV0KKwkgICAgc2V0IHVzZWQgJGZpcnN0CisJfQorCWlmIHskY2ggZXEgIiAiIHx8ICRjaCBlcSAiXHQifSBicmVhaworCWluY3IgdXNlZAorCWlmIHskY2ggZXEgIicifSB7CisJICAgIHNldCBmaXJzdCBbc3RyaW5nIGZpcnN0ICInIiAkc3RyICR1c2VkXQorCSAgICBpZiB7JGZpcnN0IDwgMH0geworCQllcnJvciAidW5tYXRjaGVkIHNpbmdsZS1xdW90ZSIKKwkgICAgfQorCSAgICBhcHBlbmQgcmV0IFtzdHJpbmcgcmFuZ2UgJHN0ciAkdXNlZCBbZXhwciB7JGZpcnN0IC0gMX1dXQorCSAgICBzZXQgdXNlZCAkZmlyc3QKKwkgICAgY29udGludWUKKwl9CisJaWYgeyRjaCBlcSAiXFwifSB7CisJICAgIGlmIHskdXNlZCA+PSBbc3RyaW5nIGxlbmd0aCAkc3RyXX0geworCQllcnJvciAidHJhaWxpbmcgYmFja3NsYXNoIgorCSAgICB9CisJICAgIGFwcGVuZCByZXQgW3N0cmluZyBpbmRleCAkc3RyICR1c2VkXQorCSAgICBjb250aW51ZQorCX0KKwkjIGhlcmUgY2ggPT0gIlwiIgorCXdoaWxlIHsxfSB7CisJICAgIGlmIHshW3JlZ2V4cCAtc3RhcnQgJHVzZWQgLWluZGljZXMgIlxbXCJcXFxcXSIgJHN0ciBmaXJzdF19IHsKKwkJZXJyb3IgInVubWF0Y2hlZCBkb3VibGUtcXVvdGUiCisJICAgIH0KKwkgICAgc2V0IGZpcnN0IFtsaW5kZXggJGZpcnN0IDBdCisJICAgIHNldCBjaCBbc3RyaW5nIGluZGV4ICRzdHIgJGZpcnN0XQorCSAgICBpZiB7JGZpcnN0ID4gJHVzZWR9IHsKKwkJYXBwZW5kIHJldCBbc3RyaW5nIHJhbmdlICRzdHIgJHVzZWQgW2V4cHIgeyRmaXJzdCAtIDF9XV0KKwkJc2V0IHVzZWQgJGZpcnN0CisJICAgIH0KKwkgICAgaWYgeyRjaCBlcSAiXCIifSBicmVhaworCSAgICBpbmNyIHVzZWQKKwkgICAgYXBwZW5kIHJldCBbc3RyaW5nIGluZGV4ICRzdHIgJHVzZWRdCisJICAgIGluY3IgdXNlZAorCX0KKyAgICB9CisgICAgcmV0dXJuIFtsaXN0ICR1c2VkICRyZXRdCit9CisKK3Byb2Mgc2hlbGxzcGxpdCB7c3RyfSB7CisgICAgc2V0IGwge30KKyAgICB3aGlsZSB7MX0geworCXNldCBzdHIgW3N0cmluZyB0cmltbGVmdCAkc3RyXQorCWlmIHskc3RyIGVxIHt9fSBicmVhaworCXNldCBkcSBbc2hlbGxkZXF1b3RlICRzdHJdCisJc2V0IG4gW2xpbmRleCAkZHEgMF0KKwlzZXQgd29yZCBbbGluZGV4ICRkcSAxXQorCXNldCBzdHIgW3N0cmluZyByYW5nZSAkc3RyICRuIGVuZF0KKwlsYXBwZW5kIGwgJHdvcmQKKyAgICB9CisgICAgcmV0dXJuICRsCit9CisKK3Byb2Mgc2V0X3dpbmRvd190aXRsZSB7fSB7CisgICAgZ2xvYmFsIGFwcG5hbWUgY3VydmlldyB2aWV3bmFtZSB2cmV2cworICAgIHNldCByZXYgW21jICJBbGwgZmlsZXMiXQorICAgIGlmIHskY3VydmlldyBuZSAwfSB7CisJaWYgeyR2aWV3bmFtZSgkY3VydmlldykgZXEgW21jICJDb21tYW5kIGxpbmUiXX0geworCSAgICBzZXQgcmV2IFtzdHJpbmcgbWFwIHsiLS1naXRrLXN5bW1ldHJpYy1kaWZmLW1hcmtlciIgIi0tbWVyZ2UifSAkdnJldnMoJGN1cnZpZXcpXQorCX0gZWxzZSB7CisJICAgIHNldCByZXYgJHZpZXduYW1lKCRjdXJ2aWV3KQorCX0KKyAgICB9CisgICAgd20gdGl0bGUgLiAiW3JlcG9uYW1lXTogJHJldiAtICRhcHBuYW1lIgorfQorCisjIENvZGUgdG8gaW1wbGVtZW50IG11bHRpcGxlIHZpZXdzCisKK3Byb2MgbmV3dmlldyB7aXNoaWdobGlnaHR9IHsKKyAgICBnbG9iYWwgbmV4dHZpZXdudW0gbmV3dmlld25hbWUgbmV3aXNoaWdobGlnaHQKKyAgICBnbG9iYWwgcmV2dHJlZWFyZ3Mgdmlld2FyZ3NjbWQgbmV3dmlld29wdHMgY3VydmlldworCisgICAgc2V0IG5ld2lzaGlnaGxpZ2h0ICRpc2hpZ2hsaWdodAorICAgIHNldCB0b3AgLmdpdGt2aWV3CisgICAgaWYge1t3aW5mbyBleGlzdHMgJHRvcF19IHsKKwlyYWlzZSAkdG9wCisJcmV0dXJuCisgICAgfQorICAgIGRlY29kZV92aWV3X29wdHMgJG5leHR2aWV3bnVtICRyZXZ0cmVlYXJncworICAgIHNldCBuZXd2aWV3bmFtZSgkbmV4dHZpZXdudW0pICJbbWMgIlZpZXciXSAkbmV4dHZpZXdudW0iCisgICAgc2V0IG5ld3ZpZXdvcHRzKCRuZXh0dmlld251bSxwZXJtKSAwCisgICAgc2V0IG5ld3ZpZXdvcHRzKCRuZXh0dmlld251bSxjbWQpICAkdmlld2FyZ3NjbWQoJGN1cnZpZXcpCisgICAgdmlld2VkaXRvciAkdG9wICRuZXh0dmlld251bSBbbWMgIkdpdGsgdmlldyBkZWZpbml0aW9uIl0KK30KKworc2V0IGtub3duX3ZpZXdfb3B0aW9ucyB7CisgICAge3Blcm0gICAgICBiICAgIC4gIHt9ICAgICAgICAgICAgICAge21jICJSZW1lbWJlciB0aGlzIHZpZXcifX0KKyAgICB7cmVmbGFiZWwgIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToifX0KKyAgICB7cmVmcyAgICAgIHQxNSAgLi4ge30gICAgICAgICAgICAgICB7bWMgIkJyYW5jaGVzICYgdGFnczoifX0KKyAgICB7YWxscmVmcyAgIGIgICAgKi4gIi0tYWxsIiAgICAgICAgICB7bWMgIkFsbCByZWZzIn19CisgICAge2JyYW5jaGVzICBiICAgIC4gICItLWJyYW5jaGVzIiAgICAge21jICJBbGwgKGxvY2FsKSBicmFuY2hlcyJ9fQorICAgIHt0YWdzICAgICAgYiAgICAuICAiLS10YWdzIiAgICAgICAgIHttYyAiQWxsIHRhZ3MifX0KKyAgICB7cmVtb3RlcyAgIGIgICAgLiAgIi0tcmVtb3RlcyIgICAgICB7bWMgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMifX0KKyAgICB7Y29tbWl0bGJsIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToifX0KKyAgICB7YXV0aG9yICAgIHQxNSAgLi4gIi0tYXV0aG9yPSoiICAgICB7bWMgIkF1dGhvcjoifX0KKyAgICB7Y29tbWl0dGVyIHQxNSAgLiAgIi0tY29tbWl0dGVyPSoiICB7bWMgIkNvbW1pdHRlcjoifX0KKyAgICB7bG9naW5mbyAgIHQxNSAgLi4gIi0tZ3JlcD0qIiAgICAgICB7bWMgIkNvbW1pdCBNZXNzYWdlOiJ9fQorICAgIHthbGxtYXRjaCAgYiAgICAuLiAiLS1hbGwtbWF0Y2giICAgIHttYyAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEifX0KKyAgICB7aWdyZXAgICAgIGIgICAgLi4gIi0taW52ZXJ0LWdyZXAiICB7bWMgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEifX0KKyAgICB7Y2hhbmdlc19sIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIkNoYW5nZXMgdG8gRmlsZXM6In19CisgICAge3BpY2theGVfcyByMCAgIC4gIHt9ICAgICAgICAgICAgICAge21jICJGaXhlZCBTdHJpbmcifX0KKyAgICB7cGlja2F4ZV90IHIxICAgLiAgIi0tcGlja2F4ZS1yZWdleCIgIHttYyAiUmVndWxhciBFeHByZXNzaW9uIn19CisgICAge3BpY2theGUgICB0MTUgIC4uICItUyoiICAgICAgICAgICAge21jICJTZWFyY2ggc3RyaW5nOiJ9fQorICAgIHtkYXRlbGFiZWwgbCAgICArICB7fSAgICAgICAgICAgICAgIHttYyAiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5IDE1OjI3OjM4XCIpOiJ9fQorICAgIHtzaW5jZSAgICAgdDE1ICAuLiAgeyItLXNpbmNlPSoiICItLWFmdGVyPSoifSAge21jICJTaW5jZToifX0KKyAgICB7dW50aWwgICAgIHQxNSAgLiAgIHsiLS11bnRpbD0qIiAiLS1iZWZvcmU9KiJ9IHttYyAiVW50aWw6In19CisgICAge2xpbWl0X2xibCBsICAgICsgIHt9ICAgICAgICAgICAgICAge21jICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiJ9fQorICAgIHtsaW1pdCAgICAgdDEwICAqLiAiLS1tYXgtY291bnQ9KiIgIHttYyAiTnVtYmVyIHRvIHNob3c6In19CisgICAge3NraXAgICAgICB0MTAgIC4gICItLXNraXA9KiIgICAgICAge21jICJOdW1iZXIgdG8gc2tpcDoifX0KKyAgICB7bWlzY19sYmwgIGwgICAgKyAge30gICAgICAgICAgICAgICB7bWMgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoifX0KKyAgICB7ZG9yZGVyICAgIGIgICAgKi4geyItLWRhdGUtb3JkZXIiICItZCJ9ICAgICAge21jICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUifX0KKyAgICB7bHJpZ2h0ICAgIGIgICAgLiAgIi0tbGVmdC1yaWdodCIgICB7bWMgIk1hcmsgYnJhbmNoIHNpZGVzIn19CisgICAge2ZpcnN0ICAgICBiICAgIC4gICItLWZpcnN0LXBhcmVudCIge21jICJMaW1pdCB0byBmaXJzdCBwYXJlbnQifX0KKyAgICB7c21wbGhzdCAgIGIgICAgLiAgIi0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiIgICB7bWMgIlNpbXBsZSBoaXN0b3J5In19CisgICAge2FyZ3MgICAgICB0NTAgICouIHt9ICAgICAgICAgICAgICAge21jICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiJ9fQorICAgIHthbGxwYXRocyAgcGF0aCArICB7fSAgICAgICAgICAgICAgIHttYyAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToifX0KKyAgICB7Y21kICAgICAgIHQ1MD0gKyAge30gICAgICAgICAgICAgICB7bWMgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6In19CisgICAgfQorCisjIENvbnZlcnQgJG5ld3ZpZXdvcHRzKCRuLCAuLi4pIGludG8gYXJncyBmb3IgZ2l0IGxvZy4KK3Byb2MgZW5jb2RlX3ZpZXdfb3B0cyB7bn0geworICAgIGdsb2JhbCBrbm93bl92aWV3X29wdGlvbnMgbmV3dmlld29wdHMKKworICAgIHNldCByYXJncyBbbGlzdF0KKyAgICBmb3JlYWNoIG9wdCAka25vd25fdmlld19vcHRpb25zIHsKKwlzZXQgcGF0dGVybnMgW2xpbmRleCAkb3B0IDNdCisJaWYgeyRwYXR0ZXJucyBlcSB7fX0gY29udGludWUKKwlzZXQgcGF0dGVybiBbbGluZGV4ICRwYXR0ZXJucyAwXQorCisJaWYge1tsaW5kZXggJG9wdCAxXSBlcSAiYiJ9IHsKKwkgICAgc2V0IHZhbCAkbmV3dmlld29wdHMoJG4sW2xpbmRleCAkb3B0IDBdKQorCSAgICBpZiB7JHZhbH0geworCQlsYXBwZW5kIHJhcmdzICRwYXR0ZXJuCisJICAgIH0KKwl9IGVsc2VpZiB7W3JlZ2V4cCB7XnIoXGQrKSR9IFtsaW5kZXggJG9wdCAxXSB0eXBlIHZhbHVlXX0geworCSAgICByZWdleHAge14oLipfKX0gW2xpbmRleCAkb3B0IDBdIHVzZWxlc3N2YXIgYnV0dG9uX2lkCisJICAgIHNldCB2YWwgJG5ld3ZpZXdvcHRzKCRuLCRidXR0b25faWQpCisJICAgIGlmIHskdmFsIGVxICR2YWx1ZX0geworCQlsYXBwZW5kIHJhcmdzICRwYXR0ZXJuCisJICAgIH0KKwl9IGVsc2UgeworCSAgICBzZXQgdmFsICRuZXd2aWV3b3B0cygkbixbbGluZGV4ICRvcHQgMF0pCisJICAgIHNldCB2YWwgW3N0cmluZyB0cmltICR2YWxdCisJICAgIGlmIHskdmFsIG5lIHt9fSB7CisJCXNldCBwZml4IFtzdHJpbmcgcmFuZ2UgJHBhdHRlcm4gMCBlbmQtMV0KKwkJbGFwcGVuZCByYXJncyAkcGZpeCR2YWwKKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IHJhcmdzIFtjb25jYXQgJHJhcmdzIFtzaGVsbHNwbGl0ICRuZXd2aWV3b3B0cygkbixyZWZzKV1dCisgICAgcmV0dXJuIFtjb25jYXQgJHJhcmdzIFtzaGVsbHNwbGl0ICRuZXd2aWV3b3B0cygkbixhcmdzKV1dCit9CisKKyMgRmlsbCAkbmV3dmlld29wdHMoJG4sIC4uLikgYmFzZWQgb24gYXJncyBmb3IgZ2l0IGxvZy4KK3Byb2MgZGVjb2RlX3ZpZXdfb3B0cyB7biB2aWV3X2FyZ3N9IHsKKyAgICBnbG9iYWwga25vd25fdmlld19vcHRpb25zIG5ld3ZpZXdvcHRzCisKKyAgICBmb3JlYWNoIG9wdCAka25vd25fdmlld19vcHRpb25zIHsKKwlzZXQgaWQgW2xpbmRleCAkb3B0IDBdCisJaWYge1tsaW5kZXggJG9wdCAxXSBlcSAiYiJ9IHsKKwkgICAgIyBDaGVja2JveGVzCisJICAgIHNldCB2YWwgMAorICAgICAgICB9IGVsc2VpZiB7W3JlZ2V4cCB7XnIoXGQrKSR9IFtsaW5kZXggJG9wdCAxXV19IHsKKwkgICAgIyBSYWRpb2J1dHRvbnMKKwkgICAgcmVnZXhwIHteKC4qXyl9ICRpZCB1c2VsZXNzdmFyIGlkCisJICAgIHNldCB2YWwgMAorCX0gZWxzZSB7CisJICAgICMgVGV4dCBmaWVsZHMKKwkgICAgc2V0IHZhbCB7fQorCX0KKwlzZXQgbmV3dmlld29wdHMoJG4sJGlkKSAkdmFsCisgICAgfQorICAgIHNldCBvYXJncyBbbGlzdF0KKyAgICBzZXQgcmVmYXJncyBbbGlzdF0KKyAgICBmb3JlYWNoIGFyZyAkdmlld19hcmdzIHsKKwlpZiB7W3JlZ2V4cCAtLSB7Xi0oWzAtOV0rKSR9ICRhcmcgYXJnIGNudF0KKwkgICAgJiYgIVtpbmZvIGV4aXN0cyBmb3VuZChsaW1pdCldfSB7CisJICAgIHNldCBuZXd2aWV3b3B0cygkbixsaW1pdCkgJGNudAorCSAgICBzZXQgZm91bmQobGltaXQpIDEKKwkgICAgY29udGludWUKKwl9CisJY2F0Y2ggeyB1bnNldCB2YWwgfQorCWZvcmVhY2ggb3B0ICRrbm93bl92aWV3X29wdGlvbnMgeworCSAgICBzZXQgaWQgW2xpbmRleCAkb3B0IDBdCisJICAgIGlmIHtbaW5mbyBleGlzdHMgZm91bmQoJGlkKV19IGNvbnRpbnVlCisJICAgIGZvcmVhY2ggcGF0dGVybiBbbGluZGV4ICRvcHQgM10geworCQlpZiB7IVtzdHJpbmcgbWF0Y2ggJHBhdHRlcm4gJGFyZ119IGNvbnRpbnVlCisJCWlmIHtbbGluZGV4ICRvcHQgMV0gZXEgImIifSB7CisJCSAgICAjIENoZWNrIGJ1dHRvbnMKKwkJICAgIHNldCB2YWwgMQorCQl9IGVsc2VpZiB7W3JlZ2V4cCB7XnIoXGQrKSR9IFtsaW5kZXggJG9wdCAxXSBtYXRjaCBudW1dfSB7CisJCSAgICAjIFJhZGlvIGJ1dHRvbnMKKwkJICAgIHJlZ2V4cCB7XiguKl8pfSAkaWQgdXNlbGVzc3ZhciBpZAorCQkgICAgc2V0IHZhbCAkbnVtCisJCX0gZWxzZSB7CisJCSAgICAjIFRleHQgaW5wdXQgZmllbGRzCisJCSAgICBzZXQgc2l6ZSBbc3RyaW5nIGxlbmd0aCAkcGF0dGVybl0KKwkJICAgIHNldCB2YWwgW3N0cmluZyByYW5nZSAkYXJnIFtleHByIHskc2l6ZS0xfV0gZW5kXQorCQl9CisJCXNldCBuZXd2aWV3b3B0cygkbiwkaWQpICR2YWwKKwkJc2V0IGZvdW5kKCRpZCkgMQorCQlicmVhaworCSAgICB9CisJICAgIGlmIHtbaW5mbyBleGlzdHMgdmFsXX0gYnJlYWsKKwl9CisJaWYge1tpbmZvIGV4aXN0cyB2YWxdfSBjb250aW51ZQorCWlmIHtbcmVnZXhwIHteLX0gJGFyZ119IHsKKwkgICAgbGFwcGVuZCBvYXJncyAkYXJnCisJfSBlbHNlIHsKKwkgICAgbGFwcGVuZCByZWZhcmdzICRhcmcKKwl9CisgICAgfQorICAgIHNldCBuZXd2aWV3b3B0cygkbixyZWZzKSBbc2hlbGxhcmdsaXN0ICRyZWZhcmdzXQorICAgIHNldCBuZXd2aWV3b3B0cygkbixhcmdzKSBbc2hlbGxhcmdsaXN0ICRvYXJnc10KK30KKworcHJvYyBlZGl0X29yX25ld3ZpZXcge30geworICAgIGdsb2JhbCBjdXJ2aWV3CisKKyAgICBpZiB7JGN1cnZpZXcgPiAwfSB7CisJZWRpdHZpZXcKKyAgICB9IGVsc2UgeworCW5ld3ZpZXcgMAorICAgIH0KK30KKworcHJvYyBlZGl0dmlldyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcKKyAgICBnbG9iYWwgdmlld25hbWUgdmlld3Blcm0gbmV3dmlld25hbWUgbmV3dmlld29wdHMKKyAgICBnbG9iYWwgdmlld2FyZ3Mgdmlld2FyZ3NjbWQKKworICAgIHNldCB0b3AgLmdpdGt2ZWRpdC0kY3VydmlldworICAgIGlmIHtbd2luZm8gZXhpc3RzICR0b3BdfSB7CisJcmFpc2UgJHRvcAorCXJldHVybgorICAgIH0KKyAgICBkZWNvZGVfdmlld19vcHRzICRjdXJ2aWV3ICR2aWV3YXJncygkY3VydmlldykKKyAgICBzZXQgbmV3dmlld25hbWUoJGN1cnZpZXcpICAgICAgJHZpZXduYW1lKCRjdXJ2aWV3KQorICAgIHNldCBuZXd2aWV3b3B0cygkY3VydmlldyxwZXJtKSAkdmlld3Blcm0oJGN1cnZpZXcpCisgICAgc2V0IG5ld3ZpZXdvcHRzKCRjdXJ2aWV3LGNtZCkgICR2aWV3YXJnc2NtZCgkY3VydmlldykKKyAgICB2aWV3ZWRpdG9yICR0b3AgJGN1cnZpZXcgIlttYyAiR2l0azogZWRpdCB2aWV3Il0gJHZpZXduYW1lKCRjdXJ2aWV3KSIKK30KKworcHJvYyB2aWV3ZWRpdG9yIHt0b3AgbiB0aXRsZX0geworICAgIGdsb2JhbCBuZXd2aWV3bmFtZSBuZXd2aWV3b3B0cyB2aWV3ZmlsZXMgYmdjb2xvcgorICAgIGdsb2JhbCBrbm93bl92aWV3X29wdGlvbnMgTlMKKworICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgd20gdGl0bGUgJHRvcCBbY29uY2F0ICR0aXRsZSBbbWMgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIl1dCisgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCisKKyAgICAjIFZpZXcgbmFtZQorICAgICR7TlN9OjpmcmFtZSAkdG9wLm5mcgorICAgICR7TlN9OjpsYWJlbCAkdG9wLm5sIC10ZXh0IFttYyAiVmlldyBOYW1lIl0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5uYW1lIC13aWR0aCAyMCAtdGV4dHZhcmlhYmxlIG5ld3ZpZXduYW1lKCRuKQorICAgIHBhY2sgJHRvcC5uZnIgLWluICR0b3AgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDMKKyAgICBwYWNrICR0b3AubmwgLWluICR0b3AubmZyIC1zaWRlIGxlZnQgLXBhZHggezAgNX0KKyAgICBwYWNrICR0b3AubmFtZSAtaW4gJHRvcC5uZnIgLXNpZGUgbGVmdCAtcGFkeCB7MCAyNX0KKworICAgICMgVmlldyBvcHRpb25zCisgICAgc2V0IGNmcmFtZSAkdG9wLm5mcgorICAgIHNldCBjZXhwYW5kIDAKKyAgICBzZXQgY250IDAKKyAgICBmb3JlYWNoIG9wdCAka25vd25fdmlld19vcHRpb25zIHsKKwlzZXQgaWQgW2xpbmRleCAkb3B0IDBdCisJc2V0IHR5cGUgW2xpbmRleCAkb3B0IDFdCisJc2V0IGZsYWdzIFtsaW5kZXggJG9wdCAyXQorCXNldCB0aXRsZSBbZXZhbCBbbGluZGV4ICRvcHQgNF1dCisJc2V0IGx4cGFkIDAKKworCWlmIHskZmxhZ3MgZXEgIisiIHx8ICRmbGFncyBlcSAiKiJ9IHsKKwkgICAgc2V0IGNmcmFtZSAkdG9wLmZyJGNudAorCSAgICBpbmNyIGNudAorCSAgICAke05TfTo6ZnJhbWUgJGNmcmFtZQorCSAgICBwYWNrICRjZnJhbWUgLWluICR0b3AgLWZpbGwgeCAtcGFkeSAzIC1wYWR4IDMKKwkgICAgc2V0IGNleHBhbmQgW2V4cHIgeyRmbGFncyBlcSAiKiJ9XQorICAgICAgICB9IGVsc2VpZiB7JGZsYWdzIGVxICIuLiIgfHwgJGZsYWdzIGVxICIqLiJ9IHsKKwkgICAgc2V0IGNmcmFtZSAkdG9wLmZyJGNudAorCSAgICBpbmNyIGNudAorCSAgICAke05TfTo6ZnJhbWUgJGNmcmFtZQorCSAgICBwYWNrICRjZnJhbWUgLWluICR0b3AgLWZpbGwgeCAtcGFkeSAzIC1wYWR4IFtsaXN0IDE1IDNdCisJICAgIHNldCBjZXhwYW5kIFtleHByIHskZmxhZ3MgZXEgIiouIn1dCisJfSBlbHNlIHsKKwkgICAgc2V0IGx4cGFkIDUKKwl9CisKKwlpZiB7JHR5cGUgZXEgImwifSB7CisgICAgICAgICAgICAke05TfTo6bGFiZWwgJGNmcmFtZS5sXyRpZCAtdGV4dCAkdGl0bGUKKyAgICAgICAgICAgIHBhY2sgJGNmcmFtZS5sXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IC1wYWR5IFtsaXN0IDMgMF0gLWFuY2hvciB3CisJfSBlbHNlaWYgeyR0eXBlIGVxICJiIn0geworCSAgICAke05TfTo6Y2hlY2tidXR0b24gJGNmcmFtZS5jXyRpZCAtdGV4dCAkdGl0bGUgLXZhcmlhYmxlIG5ld3ZpZXdvcHRzKCRuLCRpZCkKKwkgICAgcGFjayAkY2ZyYW1lLmNfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIGxlZnQgXAorCQktcGFkeCBbbGlzdCAkbHhwYWQgMF0gLWV4cGFuZCAkY2V4cGFuZCAtYW5jaG9yIHcKKwl9IGVsc2VpZiB7W3JlZ2V4cCB7XnIoXGQrKSR9ICR0eXBlIHR5cGUgc3pdfSB7CisJICAgIHJlZ2V4cCB7XiguKl8pfSAkaWQgdXNlbGVzc3ZhciBidXR0b25faWQKKwkgICAgJHtOU306OnJhZGlvYnV0dG9uICRjZnJhbWUuY18kaWQgLXRleHQgJHRpdGxlIC12YXJpYWJsZSBuZXd2aWV3b3B0cygkbiwkYnV0dG9uX2lkKSAtdmFsdWUgJHN6CisJICAgIHBhY2sgJGNmcmFtZS5jXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSBsZWZ0IFwKKwkJLXBhZHggW2xpc3QgJGx4cGFkIDBdIC1leHBhbmQgJGNleHBhbmQgLWFuY2hvciB3CisJfSBlbHNlaWYge1tyZWdleHAge150KFxkKykkfSAkdHlwZSB0eXBlIHN6XX0geworCSAgICAke05TfTo6bGFiZWwgJGNmcmFtZS5sXyRpZCAtdGV4dCAkdGl0bGUKKwkgICAgJHtOU306OmVudHJ5ICRjZnJhbWUuZV8kaWQgLXdpZHRoICRzeiAtYmFja2dyb3VuZCAkYmdjb2xvciBcCisJCS10ZXh0dmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGlkKQorCSAgICBwYWNrICRjZnJhbWUubF8kaWQgLWluICRjZnJhbWUgLXNpZGUgbGVmdCAtcGFkeCBbbGlzdCAkbHhwYWQgMF0KKwkgICAgcGFjayAkY2ZyYW1lLmVfJGlkIC1pbiAkY2ZyYW1lIC1zaWRlIGxlZnQgLWV4cGFuZCAxIC1maWxsIHgKKwl9IGVsc2VpZiB7W3JlZ2V4cCB7XnQoXGQrKT0kfSAkdHlwZSB0eXBlIHN6XX0geworCSAgICAke05TfTo6bGFiZWwgJGNmcmFtZS5sXyRpZCAtdGV4dCAkdGl0bGUKKwkgICAgJHtOU306OmVudHJ5ICRjZnJhbWUuZV8kaWQgLXdpZHRoICRzeiAtYmFja2dyb3VuZCAkYmdjb2xvciBcCisJCS10ZXh0dmFyaWFibGUgbmV3dmlld29wdHMoJG4sJGlkKQorCSAgICBwYWNrICRjZnJhbWUubF8kaWQgLWluICRjZnJhbWUgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDMgMF0gLWFuY2hvciB3CisJICAgIHBhY2sgJGNmcmFtZS5lXyRpZCAtaW4gJGNmcmFtZSAtc2lkZSB0b3AgLWZpbGwgeAorCX0gZWxzZWlmIHskdHlwZSBlcSAicGF0aCJ9IHsKKwkgICAgJHtOU306OmxhYmVsICR0b3AubCAtdGV4dCAkdGl0bGUKKwkgICAgcGFjayAkdG9wLmwgLWluICR0b3AgLXNpZGUgdG9wIC1wYWR5IFtsaXN0IDMgMF0gLWFuY2hvciB3IC1wYWR4IDMKKwkgICAgdGV4dCAkdG9wLnQgLXdpZHRoIDQwIC1oZWlnaHQgNSAtYmFja2dyb3VuZCAkYmdjb2xvcgorCSAgICBpZiB7W2luZm8gZXhpc3RzIHZpZXdmaWxlcygkbildfSB7CisJCWZvcmVhY2ggZiAkdmlld2ZpbGVzKCRuKSB7CisJCSAgICAkdG9wLnQgaW5zZXJ0IGVuZCAkZgorCQkgICAgJHRvcC50IGluc2VydCBlbmQgIlxuIgorCQl9CisJCSR0b3AudCBkZWxldGUge2VuZCAtIDFjfSBlbmQKKwkJJHRvcC50IG1hcmsgc2V0IGluc2VydCAwLjAKKwkgICAgfQorCSAgICBwYWNrICR0b3AudCAtaW4gJHRvcCAtc2lkZSB0b3AgLXBhZHkgW2xpc3QgMCA1XSAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeCAzCisJfQorICAgIH0KKworICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5vayAtdGV4dCBbbWMgIk9LIl0gLWNvbW1hbmQgW2xpc3QgbmV3dmlld29rICR0b3AgJG5dCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuYXBwbHkgLXRleHQgW21jICJBcHBseSAoRjUpIl0gLWNvbW1hbmQgW2xpc3QgbmV3dmlld29rICR0b3AgJG4gMV0KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBbbGlzdCBkZXN0cm95ICR0b3BdCisgICAgYmluZCAkdG9wIDxDb250cm9sLVJldHVybj4gW2xpc3QgbmV3dmlld29rICR0b3AgJG5dCisgICAgYmluZCAkdG9wIDxGNT4gW2xpc3QgbmV3dmlld29rICR0b3AgJG4gMV0KKyAgICBiaW5kICR0b3AgPEVzY2FwZT4gW2xpc3QgZGVzdHJveSAkdG9wXQorICAgIGdyaWQgJHRvcC5idXRzLm9rICR0b3AuYnV0cy5hcHBseSAkdG9wLmJ1dHMuY2FuCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDAgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMSAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAyIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgcGFjayAkdG9wLmJ1dHMgLWluICR0b3AgLXNpZGUgdG9wIC1maWxsIHgKKyAgICBmb2N1cyAkdG9wLnQKK30KKworcHJvYyBkb3ZpZXdtZW51IHttIGZpcnN0IGNtZCBvcCBhcmd2fSB7CisgICAgc2V0IG5tZW51IFskbSBpbmRleCBlbmRdCisgICAgZm9yIHtzZXQgaSAkZmlyc3R9IHskaSA8PSAkbm1lbnV9IHtpbmNyIGl9IHsKKwlpZiB7WyRtIGVudHJ5Y2dldCAkaSAtY29tbWFuZF0gZXEgJGNtZH0geworCSAgICBldmFsICRtICRvcCAkaSAkYXJndgorCSAgICBicmVhaworCX0KKyAgICB9Cit9CisKK3Byb2MgYWxsdmlld21lbnVzIHtuIG9wIGFyZ3N9IHsKKyAgICAjIGdsb2JhbCB2aWV3aGxtZW51CisKKyAgICBkb3ZpZXdtZW51IC5iYXIudmlldyA1IFtsaXN0IHNob3d2aWV3ICRuXSAkb3AgJGFyZ3MKKyAgICAjIGRvdmlld21lbnUgJHZpZXdobG1lbnUgMSBbbGlzdCBhZGR2aGlnaGxpZ2h0ICRuXSAkb3AgJGFyZ3MKK30KKworcHJvYyBuZXd2aWV3b2sge3RvcCBuIHthcHBseSAwfX0geworICAgIGdsb2JhbCBuZXh0dmlld251bSBuZXd2aWV3cGVybSBuZXd2aWV3bmFtZSBuZXdpc2hpZ2hsaWdodAorICAgIGdsb2JhbCB2aWV3bmFtZSB2aWV3ZmlsZXMgdmlld3Blcm0gdmlld2NoYW5nZWQgc2VsZWN0ZWR2aWV3IGN1cnZpZXcKKyAgICBnbG9iYWwgdmlld2FyZ3Mgdmlld2FyZ3NjbWQgbmV3dmlld29wdHMgdmlld2hsbWVudQorCisgICAgaWYge1tjYXRjaCB7CisJc2V0IG5ld2FyZ3MgW2VuY29kZV92aWV3X29wdHMgJG5dCisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6Il0gJGVyciIgJHRvcAorCXJldHVybgorICAgIH0KKyAgICBzZXQgZmlsZXMge30KKyAgICBmb3JlYWNoIGYgW3NwbGl0IFskdG9wLnQgZ2V0IDAuMCBlbmRdICJcbiJdIHsKKwlzZXQgZnQgW3N0cmluZyB0cmltICRmXQorCWlmIHskZnQgbmUge319IHsKKwkgICAgbGFwcGVuZCBmaWxlcyAkZnQKKwl9CisgICAgfQorICAgIGlmIHshW2luZm8gZXhpc3RzIHZpZXdmaWxlcygkbildfSB7CisJIyBjcmVhdGluZyBhIG5ldyB2aWV3CisJaW5jciBuZXh0dmlld251bQorCXNldCB2aWV3bmFtZSgkbikgJG5ld3ZpZXduYW1lKCRuKQorCXNldCB2aWV3cGVybSgkbikgJG5ld3ZpZXdvcHRzKCRuLHBlcm0pCisJc2V0IHZpZXdjaGFuZ2VkKCRuKSAxCisJc2V0IHZpZXdmaWxlcygkbikgJGZpbGVzCisJc2V0IHZpZXdhcmdzKCRuKSAkbmV3YXJncworCXNldCB2aWV3YXJnc2NtZCgkbikgJG5ld3ZpZXdvcHRzKCRuLGNtZCkKKwlhZGR2aWV3bWVudSAkbgorCWlmIHshJG5ld2lzaGlnaGxpZ2h0fSB7CisJICAgIHJ1biBzaG93dmlldyAkbgorCX0gZWxzZSB7CisJICAgIHJ1biBhZGR2aGlnaGxpZ2h0ICRuCisJfQorICAgIH0gZWxzZSB7CisJIyBlZGl0aW5nIGFuIGV4aXN0aW5nIHZpZXcKKwlzZXQgdmlld3Blcm0oJG4pICRuZXd2aWV3b3B0cygkbixwZXJtKQorCXNldCB2aWV3Y2hhbmdlZCgkbikgMQorCWlmIHskbmV3dmlld25hbWUoJG4pIG5lICR2aWV3bmFtZSgkbil9IHsKKwkgICAgc2V0IHZpZXduYW1lKCRuKSAkbmV3dmlld25hbWUoJG4pCisJICAgIGRvdmlld21lbnUgLmJhci52aWV3IDUgW2xpc3Qgc2hvd3ZpZXcgJG5dIFwKKwkJZW50cnljb25mIFtsaXN0IC1sYWJlbCAkdmlld25hbWUoJG4pXQorCSAgICAjIGRvdmlld21lbnUgJHZpZXdobG1lbnUgMSBbbGlzdCBhZGR2aGlnaGxpZ2h0ICRuXSBcCisJCSMgZW50cnljb25mIFtsaXN0IC1sYWJlbCAkdmlld25hbWUoJG4pIC12YWx1ZSAkdmlld25hbWUoJG4pXQorCX0KKwlpZiB7JGZpbGVzIG5lICR2aWV3ZmlsZXMoJG4pIHx8ICRuZXdhcmdzIG5lICR2aWV3YXJncygkbikgfHwgXAorCQkkbmV3dmlld29wdHMoJG4sY21kKSBuZSAkdmlld2FyZ3NjbWQoJG4pfSB7CisJICAgIHNldCB2aWV3ZmlsZXMoJG4pICRmaWxlcworCSAgICBzZXQgdmlld2FyZ3MoJG4pICRuZXdhcmdzCisJICAgIHNldCB2aWV3YXJnc2NtZCgkbikgJG5ld3ZpZXdvcHRzKCRuLGNtZCkKKwkgICAgaWYgeyRjdXJ2aWV3ID09ICRufSB7CisJCXJ1biByZWxvYWRjb21taXRzCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHskYXBwbHl9IHJldHVybgorICAgIGNhdGNoIHtkZXN0cm95ICR0b3B9Cit9CisKK3Byb2MgZGVsdmlldyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgdmlld3Blcm0gaGx2aWV3IHNlbGVjdGVkaGx2aWV3IHZpZXdjaGFuZ2VkCisKKyAgICBpZiB7JGN1cnZpZXcgPT0gMH0gcmV0dXJuCisgICAgaWYge1tpbmZvIGV4aXN0cyBobHZpZXddICYmICRobHZpZXcgPT0gJGN1cnZpZXd9IHsKKwlzZXQgc2VsZWN0ZWRobHZpZXcgW21jICJOb25lIl0KKwl1bnNldCBobHZpZXcKKyAgICB9CisgICAgYWxsdmlld21lbnVzICRjdXJ2aWV3IGRlbGV0ZQorICAgIHNldCB2aWV3cGVybSgkY3VydmlldykgMAorICAgIHNldCB2aWV3Y2hhbmdlZCgkY3VydmlldykgMQorICAgIHNob3d2aWV3IDAKK30KKworcHJvYyBhZGR2aWV3bWVudSB7bn0geworICAgIGdsb2JhbCB2aWV3bmFtZSB2aWV3aGxtZW51CisKKyAgICAuYmFyLnZpZXcgYWRkIHJhZGlvYnV0dG9uIC1sYWJlbCAkdmlld25hbWUoJG4pIFwKKwktY29tbWFuZCBbbGlzdCBzaG93dmlldyAkbl0gLXZhcmlhYmxlIHNlbGVjdGVkdmlldyAtdmFsdWUgJG4KKyAgICAjJHZpZXdobG1lbnUgYWRkIHJhZGlvYnV0dG9uIC1sYWJlbCAkdmlld25hbWUoJG4pIFwKKyAgICAjCS1jb21tYW5kIFtsaXN0IGFkZHZoaWdobGlnaHQgJG5dIC12YXJpYWJsZSBzZWxlY3RlZGhsdmlldworfQorCitwcm9jIHNob3d2aWV3IHtufSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgY2FjaGVkX2NvbW1pdHJvdyBvcmRlcnRvaworICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwKKyAgICBnbG9iYWwgY29sb3JtYXAgcm93dGV4dHggbmV4dGNvbG9yIGNhbnZ4bWF4CisgICAgZ2xvYmFsIG51bWNvbW1pdHMgdmlld2NvbXBsZXRlCisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjdXJyZW50aWQgY2FudiBjYW52eTAKKyAgICBnbG9iYWwgdHJlZWRpZmZzCisgICAgZ2xvYmFsIHBlbmRpbmdfc2VsZWN0IG1haW5oZWFkaWQKKyAgICBnbG9iYWwgY29tbWl0aWR4CisgICAgZ2xvYmFsIHNlbGVjdGVkdmlldworICAgIGdsb2JhbCBobHZpZXcgc2VsZWN0ZWRobHZpZXcgY29tbWl0aW50ZXJlc3QKKworICAgIGlmIHskbiA9PSAkY3Vydmlld30gcmV0dXJuCisgICAgc2V0IHNlbGlkIHt9CisgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorICAgIHNldCBzcGFuIFskY2FudiB5dmlld10KKyAgICBzZXQgeXRvcCBbZXhwciB7W2xpbmRleCAkc3BhbiAwXSAqICR5bWF4fV0KKyAgICBzZXQgeWJvdCBbZXhwciB7W2xpbmRleCAkc3BhbiAxXSAqICR5bWF4fV0KKyAgICBzZXQgeXNjcmVlbiBbZXhwciB7KCR5Ym90IC0gJHl0b3ApIC8gMn1dCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge319IHsKKwlzZXQgc2VsaWQgJGN1cnJlbnRpZAorCXNldCB5IFt5YyAkc2VsZWN0ZWRsaW5lXQorCWlmIHskeXRvcCA8ICR5ICYmICR5IDwgJHlib3R9IHsKKwkgICAgc2V0IHlzY3JlZW4gW2V4cHIgeyR5IC0gJHl0b3B9XQorCX0KKyAgICB9IGVsc2VpZiB7W2luZm8gZXhpc3RzIHBlbmRpbmdfc2VsZWN0XX0geworCXNldCBzZWxpZCAkcGVuZGluZ19zZWxlY3QKKwl1bnNldCBwZW5kaW5nX3NlbGVjdAorICAgIH0KKyAgICB1bnNlbGVjdGxpbmUKKyAgICBub3JtYWxsaW5lCisgICAgdW5zZXQgLW5vY29tcGxhaW4gdHJlZWRpZmZzCisgICAgY2xlYXJfZGlzcGxheQorICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAkaGx2aWV3ID09ICRufSB7CisJdW5zZXQgaGx2aWV3CisJc2V0IHNlbGVjdGVkaGx2aWV3IFttYyAiTm9uZSJdCisgICAgfQorICAgIHVuc2V0IC1ub2NvbXBsYWluIGNvbW1pdGludGVyZXN0CisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2NvbW1pdHJvdworICAgIHVuc2V0IC1ub2NvbXBsYWluIG9yZGVydG9rCisKKyAgICBzZXQgY3VydmlldyAkbgorICAgIHNldCBzZWxlY3RlZHZpZXcgJG4KKyAgICAuYmFyLnZpZXcgZW50cnljb25mIFttY2EgIiZFZGl0IHZpZXcuLi4iXSAtc3RhdGUgW2V4cHIgeyRuID09IDA/ICJkaXNhYmxlZCI6ICJub3JtYWwifV0KKyAgICAuYmFyLnZpZXcgZW50cnljb25mIFttY2EgIiZEZWxldGUgdmlldyJdIC1zdGF0ZSBbZXhwciB7JG4gPT0gMD8gImRpc2FibGVkIjogIm5vcm1hbCJ9XQorCisgICAgcnVuIHJlZmlsbF9yZWZsaXN0CisgICAgaWYgeyFbaW5mbyBleGlzdHMgdmlld2NvbXBsZXRlKCRuKV19IHsKKwlnZXRjb21taXRzICRzZWxpZAorCXJldHVybgorICAgIH0KKworICAgIHNldCBkaXNwbGF5b3JkZXIge30KKyAgICBzZXQgcGFyZW50bGlzdCB7fQorICAgIHNldCByb3dpZGxpc3Qge30KKyAgICBzZXQgcm93aXNvcHQge30KKyAgICBzZXQgcm93ZmluYWwge30KKyAgICBzZXQgbnVtY29tbWl0cyAkY29tbWl0aWR4KCRuKQorCisgICAgdW5zZXQgLW5vY29tcGxhaW4gY29sb3JtYXAKKyAgICB1bnNldCAtbm9jb21wbGFpbiByb3d0ZXh0eAorICAgIHNldCBuZXh0Y29sb3IgMAorICAgIHNldCBjYW52eG1heCBbJGNhbnYgY2dldCAtd2lkdGhdCisgICAgc2V0IGN1cnZpZXcgJG4KKyAgICBzZXQgcm93IDAKKyAgICBzZXRjYW52c2Nyb2xsCisgICAgc2V0IHlmIDAKKyAgICBzZXQgcm93IHt9CisgICAgaWYgeyRzZWxpZCBuZSB7fSAmJiBbY29tbWl0aW52aWV3ICRzZWxpZCAkbl19IHsKKwlzZXQgcm93IFtyb3dvZmNvbW1pdCAkc2VsaWRdCisJIyB0cnkgdG8gZ2V0IHRoZSBzZWxlY3RlZCByb3cgaW4gdGhlIHNhbWUgcG9zaXRpb24gb24gdGhlIHNjcmVlbgorCXNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKwlzZXQgeXRvcCBbZXhwciB7W3ljICRyb3ddIC0gJHlzY3JlZW59XQorCWlmIHskeXRvcCA8IDB9IHsKKwkgICAgc2V0IHl0b3AgMAorCX0KKwlzZXQgeWYgW2V4cHIgeyR5dG9wICogMS4wIC8gJHltYXh9XQorICAgIH0KKyAgICBhbGxjYW52cyB5dmlldyBtb3ZldG8gJHlmCisgICAgZHJhd3Zpc2libGUKKyAgICBpZiB7JHJvdyBuZSB7fX0geworCXNlbGVjdGxpbmUgJHJvdyAwCisgICAgfSBlbHNlaWYgeyEkdmlld2NvbXBsZXRlKCRuKX0geworCXJlc2V0X3BlbmRpbmdfc2VsZWN0ICRzZWxpZAorICAgIH0gZWxzZSB7CisJcmVzZXRfcGVuZGluZ19zZWxlY3Qge30KKworCWlmIHtbY29tbWl0aW52aWV3ICRwZW5kaW5nX3NlbGVjdCAkY3Vydmlld119IHsKKwkgICAgc2VsZWN0bGluZSBbcm93b2Zjb21taXQgJHBlbmRpbmdfc2VsZWN0XSAxCisJfSBlbHNlIHsKKwkgICAgc2V0IHJvdyBbZmlyc3RfcmVhbF9yb3ddCisJICAgIGlmIHskcm93IDwgJG51bWNvbW1pdHN9IHsKKwkJc2VsZWN0bGluZSAkcm93IDAKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgeyEkdmlld2NvbXBsZXRlKCRuKX0geworCWlmIHskbnVtY29tbWl0cyA9PSAwfSB7CisJICAgIHNob3dfc3RhdHVzIFttYyAiUmVhZGluZyBjb21taXRzLi4uIl0KKwl9CisgICAgfSBlbHNlaWYgeyRudW1jb21taXRzID09IDB9IHsKKwlzaG93X3N0YXR1cyBbbWMgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiXQorICAgIH0KKyAgICBzZXRfd2luZG93X3RpdGxlCit9CisKKyMgU3R1ZmYgcmVsYXRpbmcgdG8gdGhlIGhpZ2hsaWdodGluZyBmYWNpbGl0eQorCitwcm9jIGlzaGlnaGxpZ2h0ZWQge2lkfSB7CisgICAgZ2xvYmFsIHZoaWdobGlnaHRzIGZoaWdobGlnaHRzIG5oaWdobGlnaHRzIHJoaWdobGlnaHRzCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIG5oaWdobGlnaHRzKCRpZCldICYmICRuaGlnaGxpZ2h0cygkaWQpID4gMH0geworCXJldHVybiAkbmhpZ2hsaWdodHMoJGlkKQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIHZoaWdobGlnaHRzKCRpZCldICYmICR2aGlnaGxpZ2h0cygkaWQpID4gMH0geworCXJldHVybiAkdmhpZ2hsaWdodHMoJGlkKQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGZoaWdobGlnaHRzKCRpZCldICYmICRmaGlnaGxpZ2h0cygkaWQpID4gMH0geworCXJldHVybiAkZmhpZ2hsaWdodHMoJGlkKQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIHJoaWdobGlnaHRzKCRpZCldICYmICRyaGlnaGxpZ2h0cygkaWQpID4gMH0geworCXJldHVybiAkcmhpZ2hsaWdodHMoJGlkKQorICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIGJvbGRlbiB7aWQgZm9udH0geworICAgIGdsb2JhbCBjYW52IGxpbmVodGFnIGN1cnJlbnRpZCBib2xkaWRzIG5lZWRfcmVkaXNwbGF5IG1hcmtlZGlkCisKKyAgICAjIG5lZWRfcmVkaXNwbGF5ID0gMSBtZWFucyB0aGUgZGlzcGxheSBpcyBzdGFsZSBhbmQgYWJvdXQgdG8gYmUgcmVkcmF3bgorICAgIGlmIHskbmVlZF9yZWRpc3BsYXl9IHJldHVybgorICAgIGxhcHBlbmQgYm9sZGlkcyAkaWQKKyAgICAkY2FudiBpdGVtY29uZiAkbGluZWh0YWcoJGlkKSAtZm9udCAkZm9udAorICAgIGlmIHtbaW5mbyBleGlzdHMgY3VycmVudGlkXSAmJiAkaWQgZXEgJGN1cnJlbnRpZH0geworCSRjYW52IGRlbGV0ZSBzZWNzZWwKKwlzZXQgdCBbZXZhbCAkY2FudiBjcmVhdGUgcmVjdCBbJGNhbnYgYmJveCAkbGluZWh0YWcoJGlkKV0gXAorCQkgICAtb3V0bGluZSB7e319IC10YWdzIHNlY3NlbCBcCisJCSAgIC1maWxsIFskY2FudiBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXV0KKwkkY2FudiBsb3dlciAkdAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIG1hcmtlZGlkXSAmJiAkaWQgZXEgJG1hcmtlZGlkfSB7CisJbWFrZV9pZG1hcmsgJGlkCisgICAgfQorfQorCitwcm9jIGJvbGRlbl9uYW1lIHtpZCBmb250fSB7CisgICAgZ2xvYmFsIGNhbnYyIGxpbmVudGFnIGN1cnJlbnRpZCBib2xkbmFtZWlkcyBuZWVkX3JlZGlzcGxheQorCisgICAgaWYgeyRuZWVkX3JlZGlzcGxheX0gcmV0dXJuCisgICAgbGFwcGVuZCBib2xkbmFtZWlkcyAkaWQKKyAgICAkY2FudjIgaXRlbWNvbmYgJGxpbmVudGFnKCRpZCkgLWZvbnQgJGZvbnQKKyAgICBpZiB7W2luZm8gZXhpc3RzIGN1cnJlbnRpZF0gJiYgJGlkIGVxICRjdXJyZW50aWR9IHsKKwkkY2FudjIgZGVsZXRlIHNlY3NlbAorCXNldCB0IFtldmFsICRjYW52MiBjcmVhdGUgcmVjdCBbJGNhbnYyIGJib3ggJGxpbmVudGFnKCRpZCldIFwKKwkJICAgLW91dGxpbmUge3t9fSAtdGFncyBzZWNzZWwgXAorCQkgICAtZmlsbCBbJGNhbnYyIGNnZXQgLXNlbGVjdGJhY2tncm91bmRdXQorCSRjYW52MiBsb3dlciAkdAorICAgIH0KK30KKworcHJvYyB1bmJvbGRlbiB7fSB7CisgICAgZ2xvYmFsIGJvbGRpZHMKKworICAgIHNldCBzdGlsbGJvbGQge30KKyAgICBmb3JlYWNoIGlkICRib2xkaWRzIHsKKwlpZiB7IVtpc2hpZ2hsaWdodGVkICRpZF19IHsKKwkgICAgYm9sZGVuICRpZCBtYWluZm9udAorCX0gZWxzZSB7CisJICAgIGxhcHBlbmQgc3RpbGxib2xkICRpZAorCX0KKyAgICB9CisgICAgc2V0IGJvbGRpZHMgJHN0aWxsYm9sZAorfQorCitwcm9jIGFkZHZoaWdobGlnaHQge259IHsKKyAgICBnbG9iYWwgaGx2aWV3IHZpZXdjb21wbGV0ZSBjdXJ2aWV3IHZobF9kb25lIGNvbW1pdGlkeAorCisgICAgaWYge1tpbmZvIGV4aXN0cyBobHZpZXddfSB7CisJZGVsdmhpZ2hsaWdodAorICAgIH0KKyAgICBzZXQgaGx2aWV3ICRuCisgICAgaWYgeyRuICE9ICRjdXJ2aWV3ICYmICFbaW5mbyBleGlzdHMgdmlld2NvbXBsZXRlKCRuKV19IHsKKwlzdGFydF9yZXZfbGlzdCAkbgorICAgIH0KKyAgICBzZXQgdmhsX2RvbmUgJGNvbW1pdGlkeCgkaGx2aWV3KQorICAgIGlmIHskdmhsX2RvbmUgPiAwfSB7CisJZHJhd3Zpc2libGUKKyAgICB9Cit9CisKK3Byb2MgZGVsdmhpZ2hsaWdodCB7fSB7CisgICAgZ2xvYmFsIGhsdmlldyB2aGlnaGxpZ2h0cworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgaGx2aWV3XX0gcmV0dXJuCisgICAgdW5zZXQgaGx2aWV3CisgICAgdW5zZXQgLW5vY29tcGxhaW4gdmhpZ2hsaWdodHMKKyAgICB1bmJvbGRlbgorfQorCitwcm9jIHZoaWdobGlnaHRtb3JlIHt9IHsKKyAgICBnbG9iYWwgaGx2aWV3IHZobF9kb25lIGNvbW1pdGlkeCB2aGlnaGxpZ2h0cyBjdXJ2aWV3CisKKyAgICBzZXQgbWF4ICRjb21taXRpZHgoJGhsdmlldykKKyAgICBzZXQgdnIgW3Zpc2libGVyb3dzXQorICAgIHNldCByMCBbbGluZGV4ICR2ciAwXQorICAgIHNldCByMSBbbGluZGV4ICR2ciAxXQorICAgIGZvciB7c2V0IGkgJHZobF9kb25lfSB7JGkgPCAkbWF4fSB7aW5jciBpfSB7CisJc2V0IGlkIFtjb21taXRvbnJvdyAkaSAkaGx2aWV3XQorCWlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwkgICAgc2V0IHJvdyBbcm93b2Zjb21taXQgJGlkXQorCSAgICBpZiB7JHIwIDw9ICRyb3cgJiYgJHJvdyA8PSAkcjF9IHsKKwkJaWYgeyFbaGlnaGxpZ2h0ZWQgJHJvd119IHsKKwkJICAgIGJvbGRlbiAkaWQgbWFpbmZvbnRib2xkCisJCX0KKwkJc2V0IHZoaWdobGlnaHRzKCRpZCkgMQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgdmhsX2RvbmUgJG1heAorICAgIHJldHVybiAwCit9CisKK3Byb2MgYXNrdmhpZ2hsaWdodCB7cm93IGlkfSB7CisgICAgZ2xvYmFsIGhsdmlldyB2aGlnaGxpZ2h0cyBpZGRyYXduCisKKyAgICBpZiB7W2NvbW1pdGludmlldyAkaWQgJGhsdmlld119IHsKKwlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV0gJiYgIVtpc2hpZ2hsaWdodGVkICRpZF19IHsKKwkgICAgYm9sZGVuICRpZCBtYWluZm9udGJvbGQKKwl9CisJc2V0IHZoaWdobGlnaHRzKCRpZCkgMQorICAgIH0gZWxzZSB7CisJc2V0IHZoaWdobGlnaHRzKCRpZCkgMAorICAgIH0KK30KKworcHJvYyBoZmlsZXNfY2hhbmdlIHt9IHsKKyAgICBnbG9iYWwgaGlnaGxpZ2h0X2ZpbGVzIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgZmhfc2VyaWFsCisgICAgZ2xvYmFsIGhpZ2hsaWdodF9wYXRocworCisgICAgaWYge1tpbmZvIGV4aXN0cyBmaWxlaGlnaGxpZ2h0XX0geworCSMgZGVsZXRlIHByZXZpb3VzIGhpZ2hsaWdodHMKKwljYXRjaCB7Y2xvc2UgJGZpbGVoaWdobGlnaHR9CisJdW5zZXQgZmlsZWhpZ2hsaWdodAorCXVuc2V0IC1ub2NvbXBsYWluIGZoaWdobGlnaHRzCisJdW5ib2xkZW4KKwl1bmhpZ2hsaWdodF9maWxlbGlzdAorICAgIH0KKyAgICBzZXQgaGlnaGxpZ2h0X3BhdGhzIHt9CisgICAgYWZ0ZXIgY2FuY2VsIGRvX2ZpbGVfaGwgJGZoX3NlcmlhbAorICAgIGluY3IgZmhfc2VyaWFsCisgICAgaWYgeyRoaWdobGlnaHRfZmlsZXMgbmUge319IHsKKwlhZnRlciAzMDAgZG9fZmlsZV9obCAkZmhfc2VyaWFsCisgICAgfQorfQorCitwcm9jIGdkdHR5cGVfY2hhbmdlIHtuYW1lIGl4IG9wfSB7CisgICAgZ2xvYmFsIGdkdHR5cGUgaGlnaGxpZ2h0X2ZpbGVzIGZpbmRzdHJpbmcgZmluZHBhdHRlcm4KKworICAgIHN0b3BmaW5kaW5nCisgICAgaWYgeyRmaW5kc3RyaW5nIG5lIHt9fSB7CisJaWYgeyRnZHR0eXBlIGVxIFttYyAiY29udGFpbmluZzoiXX0geworCSAgICBpZiB7JGhpZ2hsaWdodF9maWxlcyBuZSB7fX0geworCQlzZXQgaGlnaGxpZ2h0X2ZpbGVzIHt9CisJCWhmaWxlc19jaGFuZ2UKKwkgICAgfQorCSAgICBmaW5kY29tX2NoYW5nZQorCX0gZWxzZSB7CisJICAgIGlmIHskZmluZHBhdHRlcm4gbmUge319IHsKKwkJc2V0IGZpbmRwYXR0ZXJuIHt9CisJCWZpbmRjb21fY2hhbmdlCisJICAgIH0KKwkgICAgc2V0IGhpZ2hsaWdodF9maWxlcyAkZmluZHN0cmluZworCSAgICBoZmlsZXNfY2hhbmdlCisJfQorCWRyYXd2aXNpYmxlCisgICAgfQorICAgICMgZW5hYmxlL2Rpc2FibGUgZmluZHR5cGUvZmluZGxvYyBtZW51cyB0b28KK30KKworcHJvYyBmaW5kX2NoYW5nZSB7bmFtZSBpeCBvcH0geworICAgIGdsb2JhbCBnZHR0eXBlIGZpbmRzdHJpbmcgaGlnaGxpZ2h0X2ZpbGVzCisKKyAgICBzdG9wZmluZGluZworICAgIGlmIHskZ2R0dHlwZSBlcSBbbWMgImNvbnRhaW5pbmc6Il19IHsKKwlmaW5kY29tX2NoYW5nZQorICAgIH0gZWxzZSB7CisJaWYgeyRoaWdobGlnaHRfZmlsZXMgbmUgJGZpbmRzdHJpbmd9IHsKKwkgICAgc2V0IGhpZ2hsaWdodF9maWxlcyAkZmluZHN0cmluZworCSAgICBoZmlsZXNfY2hhbmdlCisJfQorICAgIH0KKyAgICBkcmF3dmlzaWJsZQorfQorCitwcm9jIGZpbmRjb21fY2hhbmdlIGFyZ3MgeworICAgIGdsb2JhbCBuaGlnaGxpZ2h0cyBib2xkbmFtZWlkcworICAgIGdsb2JhbCBmaW5kcGF0dGVybiBmaW5kdHlwZSBmaW5kc3RyaW5nIGdkdHR5cGUKKworICAgIHN0b3BmaW5kaW5nCisgICAgIyBkZWxldGUgcHJldmlvdXMgaGlnaGxpZ2h0cywgaWYgYW55CisgICAgZm9yZWFjaCBpZCAkYm9sZG5hbWVpZHMgeworCWJvbGRlbl9uYW1lICRpZCBtYWluZm9udAorICAgIH0KKyAgICBzZXQgYm9sZG5hbWVpZHMge30KKyAgICB1bnNldCAtbm9jb21wbGFpbiBuaGlnaGxpZ2h0cworICAgIHVuYm9sZGVuCisgICAgdW5tYXJrbWF0Y2hlcworICAgIGlmIHskZ2R0dHlwZSBuZSBbbWMgImNvbnRhaW5pbmc6Il0gfHwgJGZpbmRzdHJpbmcgZXEge319IHsKKwlzZXQgZmluZHBhdHRlcm4ge30KKyAgICB9IGVsc2VpZiB7JGZpbmR0eXBlIGVxIFttYyAiUmVnZXhwIl19IHsKKwlzZXQgZmluZHBhdHRlcm4gJGZpbmRzdHJpbmcKKyAgICB9IGVsc2UgeworCXNldCBlIFtzdHJpbmcgbWFwIHsiKiIgIlxcKiIgIj8iICJcXD8iICJcWyIgIlxcXFsiICJcXCIgIlxcXFwifSBcCisJCSAgICRmaW5kc3RyaW5nXQorCXNldCBmaW5kcGF0dGVybiAiKiRlKiIKKyAgICB9Cit9CisKK3Byb2MgbWFrZXBhdHRlcm5zIHtsfSB7CisgICAgc2V0IHJldCB7fQorICAgIGZvcmVhY2ggZSAkbCB7CisJc2V0IGVlIFtzdHJpbmcgbWFwIHsiKiIgIlxcKiIgIj8iICJcXD8iICJcWyIgIlxcXFsiICJcXCIgIlxcXFwifSAkZV0KKwlpZiB7W3N0cmluZyBpbmRleCAkZWUgZW5kXSBlcSAiLyJ9IHsKKwkgICAgbGFwcGVuZCByZXQgIiRlZSoiCisJfSBlbHNlIHsKKwkgICAgbGFwcGVuZCByZXQgJGVlCisJICAgIGxhcHBlbmQgcmV0ICIkZWUvKiIKKwl9CisgICAgfQorICAgIHJldHVybiAkcmV0Cit9CisKK3Byb2MgZG9fZmlsZV9obCB7c2VyaWFsfSB7CisgICAgZ2xvYmFsIGhpZ2hsaWdodF9maWxlcyBmaWxlaGlnaGxpZ2h0IGhpZ2hsaWdodF9wYXRocyBnZHR0eXBlIGZobF9saXN0CisgICAgZ2xvYmFsIGNkdXAgZmluZHR5cGUKKworICAgIGlmIHskZ2R0dHlwZSBlcSBbbWMgInRvdWNoaW5nIHBhdGhzOiJdfSB7CisJIyBJZiAiZXhhY3QiIG1hdGNoIHRoZW4gY29udmVydCBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMuCisJIyBNb3N0IHVzZWZ1bCB0byBzdXBwb3J0IFdpbmRvd3MtZmxhdm91cmVkIGZpbGUgcGF0aHMuCisJaWYgeyRmaW5kdHlwZSBlcSBbbWMgIkV4YWN0Il19IHsKKwkgICAgc2V0IGhpZ2hsaWdodF9maWxlcyBbc3RyaW5nIG1hcCB7IlxcIiAiLyJ9ICRoaWdobGlnaHRfZmlsZXNdCisJfQorCWlmIHtbY2F0Y2gge3NldCBwYXRocyBbc2hlbGxzcGxpdCAkaGlnaGxpZ2h0X2ZpbGVzXX1dfSByZXR1cm4KKwlzZXQgaGlnaGxpZ2h0X3BhdGhzIFttYWtlcGF0dGVybnMgJHBhdGhzXQorCWhpZ2hsaWdodF9maWxlbGlzdAorCXNldCByZWxhdGl2ZV9wYXRocyB7fQorCWZvcmVhY2ggcGF0aCAkcGF0aHMgeworCSAgICBsYXBwZW5kIHJlbGF0aXZlX3BhdGhzIFtmaWxlIGpvaW4gJGNkdXAgJHBhdGhdCisJfQorCXNldCBnZHRhcmdzIFtjb25jYXQgLS0gJHJlbGF0aXZlX3BhdGhzXQorICAgIH0gZWxzZWlmIHskZ2R0dHlwZSBlcSBbbWMgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6Il19IHsKKwlzZXQgZ2R0YXJncyBbbGlzdCAiLVMkaGlnaGxpZ2h0X2ZpbGVzIl0KKyAgICB9IGVsc2VpZiB7JGdkdHR5cGUgZXEgW21jICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiXX0geworCXNldCBnZHRhcmdzIFtsaXN0ICItRyRoaWdobGlnaHRfZmlsZXMiXQorICAgIH0gZWxzZSB7CisJIyBtdXN0IGJlICJjb250YWluaW5nOiIsIGkuZS4gd2UncmUgc2VhcmNoaW5nIGNvbW1pdCBpbmZvCisJcmV0dXJuCisgICAgfQorICAgIHNldCBjbWQgW2NvbmNhdCB8IGdpdCBkaWZmLXRyZWUgLXIgLXMgLS1zdGRpbiAkZ2R0YXJnc10KKyAgICBzZXQgZmlsZWhpZ2hsaWdodCBbb3BlbiAkY21kIHIrXQorICAgIGZjb25maWd1cmUgJGZpbGVoaWdobGlnaHQgLWJsb2NraW5nIDAKKyAgICBmaWxlcnVuICRmaWxlaGlnaGxpZ2h0IHJlYWRmaGlnaGxpZ2h0CisgICAgc2V0IGZobF9saXN0IHt9CisgICAgZHJhd3Zpc2libGUKKyAgICBmbHVzaGhpZ2hsaWdodHMKK30KKworcHJvYyBmbHVzaGhpZ2hsaWdodHMge30geworICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZobF9saXN0CisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGZpbGVoaWdobGlnaHRdfSB7CisJbGFwcGVuZCBmaGxfbGlzdCB7fQorCXB1dHMgJGZpbGVoaWdobGlnaHQgIiIKKwlmbHVzaCAkZmlsZWhpZ2hsaWdodAorICAgIH0KK30KKworcHJvYyBhc2tmaWxlaGlnaGxpZ2h0IHtyb3cgaWR9IHsKKyAgICBnbG9iYWwgZmlsZWhpZ2hsaWdodCBmaGlnaGxpZ2h0cyBmaGxfbGlzdAorCisgICAgbGFwcGVuZCBmaGxfbGlzdCAkaWQKKyAgICBzZXQgZmhpZ2hsaWdodHMoJGlkKSAtMQorICAgIHB1dHMgJGZpbGVoaWdobGlnaHQgJGlkCit9CisKK3Byb2MgcmVhZGZoaWdobGlnaHQge30geworICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZoaWdobGlnaHRzIGN1cnZpZXcgaWRkcmF3bgorICAgIGdsb2JhbCBmaGxfbGlzdCBmaW5kX2Rpcm4KKworICAgIGlmIHshW2luZm8gZXhpc3RzIGZpbGVoaWdobGlnaHRdfSB7CisJcmV0dXJuIDAKKyAgICB9CisgICAgc2V0IG5yIDAKKyAgICB3aGlsZSB7W2luY3IgbnJdIDw9IDEwMCAmJiBbZ2V0cyAkZmlsZWhpZ2hsaWdodCBsaW5lXSA+PSAwfSB7CisJc2V0IGxpbmUgW3N0cmluZyB0cmltICRsaW5lXQorCXNldCBpIFtsc2VhcmNoIC1leGFjdCAkZmhsX2xpc3QgJGxpbmVdCisJaWYgeyRpIDwgMH0gY29udGludWUKKwlmb3Ige3NldCBqIDB9IHskaiA8ICRpfSB7aW5jciBqfSB7CisJICAgIHNldCBpZCBbbGluZGV4ICRmaGxfbGlzdCAkal0KKwkgICAgc2V0IGZoaWdobGlnaHRzKCRpZCkgMAorCX0KKwlzZXQgZmhsX2xpc3QgW2xyYW5nZSAkZmhsX2xpc3QgW2V4cHIgeyRpKzF9XSBlbmRdCisJaWYgeyRsaW5lIGVxIHt9fSBjb250aW51ZQorCWlmIHshW2NvbW1pdGludmlldyAkbGluZSAkY3Vydmlld119IGNvbnRpbnVlCisJaWYge1tpbmZvIGV4aXN0cyBpZGRyYXduKCRsaW5lKV0gJiYgIVtpc2hpZ2hsaWdodGVkICRsaW5lXX0geworCSAgICBib2xkZW4gJGxpbmUgbWFpbmZvbnRib2xkCisJfQorCXNldCBmaGlnaGxpZ2h0cygkbGluZSkgMQorICAgIH0KKyAgICBpZiB7W2VvZiAkZmlsZWhpZ2hsaWdodF19IHsKKwkjIHN0cmFuZ2UuLi4KKwlwdXRzICJvb3BzLCBnaXQgZGlmZi10cmVlIGRpZWQiCisJY2F0Y2gge2Nsb3NlICRmaWxlaGlnaGxpZ2h0fQorCXVuc2V0IGZpbGVoaWdobGlnaHQKKwlyZXR1cm4gMAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGZpbmRfZGlybl19IHsKKwlydW4gZmluZG1vcmUKKyAgICB9CisgICAgcmV0dXJuIDEKK30KKworcHJvYyBkb2VzbWF0Y2gge2Z9IHsKKyAgICBnbG9iYWwgZmluZHR5cGUgZmluZHBhdHRlcm4KKworICAgIGlmIHskZmluZHR5cGUgZXEgW21jICJSZWdleHAiXX0geworCXJldHVybiBbcmVnZXhwICRmaW5kcGF0dGVybiAkZl0KKyAgICB9IGVsc2VpZiB7JGZpbmR0eXBlIGVxIFttYyAiSWduQ2FzZSJdfSB7CisJcmV0dXJuIFtzdHJpbmcgbWF0Y2ggLW5vY2FzZSAkZmluZHBhdHRlcm4gJGZdCisgICAgfSBlbHNlIHsKKwlyZXR1cm4gW3N0cmluZyBtYXRjaCAkZmluZHBhdHRlcm4gJGZdCisgICAgfQorfQorCitwcm9jIGFza2ZpbmRoaWdobGlnaHQge3JvdyBpZH0geworICAgIGdsb2JhbCBuaGlnaGxpZ2h0cyBjb21taXRpbmZvIGlkZHJhd24KKyAgICBnbG9iYWwgZmluZGxvYworICAgIGdsb2JhbCBtYXJraW5nbWF0Y2hlcworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXX0geworCWdldGNvbW1pdCAkaWQKKyAgICB9CisgICAgc2V0IGluZm8gJGNvbW1pdGluZm8oJGlkKQorICAgIHNldCBpc2JvbGQgMAorICAgIHNldCBmbGR0eXBlcyBbbGlzdCBbbWMgSGVhZGxpbmVdIFttYyBBdXRob3JdICIiIFttYyBDb21taXR0ZXJdICIiIFttYyBDb21tZW50c11dCisgICAgZm9yZWFjaCBmICRpbmZvIHR5ICRmbGR0eXBlcyB7CisJaWYgeyR0eSBlcSAiIn0gY29udGludWUKKwlpZiB7KCRmaW5kbG9jIGVxIFttYyAiQWxsIGZpZWxkcyJdIHx8ICRmaW5kbG9jIGVxICR0eSkgJiYKKwkgICAgW2RvZXNtYXRjaCAkZl19IHsKKwkgICAgaWYgeyR0eSBlcSBbbWMgIkF1dGhvciJdfSB7CisJCXNldCBpc2JvbGQgMgorCQlicmVhaworCSAgICB9CisJICAgIHNldCBpc2JvbGQgMQorCX0KKyAgICB9CisgICAgaWYgeyRpc2JvbGQgJiYgW2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV19IHsKKwlpZiB7IVtpc2hpZ2hsaWdodGVkICRpZF19IHsKKwkgICAgYm9sZGVuICRpZCBtYWluZm9udGJvbGQKKwkgICAgaWYgeyRpc2JvbGQgPiAxfSB7CisJCWJvbGRlbl9uYW1lICRpZCBtYWluZm9udGJvbGQKKwkgICAgfQorCX0KKwlpZiB7JG1hcmtpbmdtYXRjaGVzfSB7CisJICAgIG1hcmtyb3dtYXRjaGVzICRyb3cgJGlkCisJfQorICAgIH0KKyAgICBzZXQgbmhpZ2hsaWdodHMoJGlkKSAkaXNib2xkCit9CisKK3Byb2MgbWFya3Jvd21hdGNoZXMge3JvdyBpZH0geworICAgIGdsb2JhbCBjYW52IGNhbnYyIGxpbmVodGFnIGxpbmVudGFnIGNvbW1pdGluZm8gZmluZGxvYworCisgICAgc2V0IGhlYWRsaW5lIFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSAwXQorICAgIHNldCBhdXRob3IgW2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDFdCisgICAgJGNhbnYgZGVsZXRlIG1hdGNoJHJvdworICAgICRjYW52MiBkZWxldGUgbWF0Y2gkcm93CisgICAgaWYgeyRmaW5kbG9jIGVxIFttYyAiQWxsIGZpZWxkcyJdIHx8ICRmaW5kbG9jIGVxIFttYyAiSGVhZGxpbmUiXX0geworCXNldCBtIFtmaW5kbWF0Y2hlcyAkaGVhZGxpbmVdCisJaWYgeyRtIG5lIHt9fSB7CisJICAgIG1hcmttYXRjaGVzICRjYW52ICRyb3cgJGhlYWRsaW5lICRsaW5laHRhZygkaWQpICRtIFwKKwkJWyRjYW52IGl0ZW1jZ2V0ICRsaW5laHRhZygkaWQpIC1mb250XSAkcm93CisJfQorICAgIH0KKyAgICBpZiB7JGZpbmRsb2MgZXEgW21jICJBbGwgZmllbGRzIl0gfHwgJGZpbmRsb2MgZXEgW21jICJBdXRob3IiXX0geworCXNldCBtIFtmaW5kbWF0Y2hlcyAkYXV0aG9yXQorCWlmIHskbSBuZSB7fX0geworCSAgICBtYXJrbWF0Y2hlcyAkY2FudjIgJHJvdyAkYXV0aG9yICRsaW5lbnRhZygkaWQpICRtIFwKKwkJWyRjYW52MiBpdGVtY2dldCAkbGluZW50YWcoJGlkKSAtZm9udF0gJHJvdworCX0KKyAgICB9Cit9CisKK3Byb2MgdnJlbF9jaGFuZ2Uge25hbWUgaXggb3B9IHsKKyAgICBnbG9iYWwgaGlnaGxpZ2h0X3JlbGF0ZWQKKworICAgIHJoaWdobGlnaHRfbm9uZQorICAgIGlmIHskaGlnaGxpZ2h0X3JlbGF0ZWQgbmUgW21jICJOb25lIl19IHsKKwlydW4gZHJhd3Zpc2libGUKKyAgICB9Cit9CisKKyMgcHJlcGFyZSBmb3IgdGVzdGluZyB3aGV0aGVyIGNvbW1pdHMgYXJlIGRlc2NlbmRlbnRzIG9yIGFuY2VzdG9ycyBvZiBhCitwcm9jIHJoaWdobGlnaHRfc2VsIHthfSB7CisgICAgZ2xvYmFsIGRlc2NlbmRlbnQgZGVzY190b2RvIGFuY2VzdG9yIGFuY190b2RvCisgICAgZ2xvYmFsIGhpZ2hsaWdodF9yZWxhdGVkCisKKyAgICB1bnNldCAtbm9jb21wbGFpbiBkZXNjZW5kZW50CisgICAgc2V0IGRlc2NfdG9kbyBbbGlzdCAkYV0KKyAgICB1bnNldCAtbm9jb21wbGFpbiBhbmNlc3RvcgorICAgIHNldCBhbmNfdG9kbyBbbGlzdCAkYV0KKyAgICBpZiB7JGhpZ2hsaWdodF9yZWxhdGVkIG5lIFttYyAiTm9uZSJdfSB7CisJcmhpZ2hsaWdodF9ub25lCisJcnVuIGRyYXd2aXNpYmxlCisgICAgfQorfQorCitwcm9jIHJoaWdobGlnaHRfbm9uZSB7fSB7CisgICAgZ2xvYmFsIHJoaWdobGlnaHRzCisKKyAgICB1bnNldCAtbm9jb21wbGFpbiByaGlnaGxpZ2h0cworICAgIHVuYm9sZGVuCit9CisKK3Byb2MgaXNfZGVzY2VuZGVudCB7YX0geworICAgIGdsb2JhbCBjdXJ2aWV3IGNoaWxkcmVuIGRlc2NlbmRlbnQgZGVzY190b2RvCisKKyAgICBzZXQgdiAkY3VydmlldworICAgIHNldCBsYSBbcm93b2Zjb21taXQgJGFdCisgICAgc2V0IHRvZG8gJGRlc2NfdG9kbworICAgIHNldCBsZWZ0b3ZlciB7fQorICAgIHNldCBkb25lIDAKKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICR0b2RvXX0ge2luY3IgaX0geworCXNldCBkbyBbbGluZGV4ICR0b2RvICRpXQorCWlmIHtbcm93b2Zjb21taXQgJGRvXSA8ICRsYX0geworCSAgICBsYXBwZW5kIGxlZnRvdmVyICRkbworCSAgICBjb250aW51ZQorCX0KKwlmb3JlYWNoIG5rICRjaGlsZHJlbigkdiwkZG8pIHsKKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgZGVzY2VuZGVudCgkbmspXX0geworCQlzZXQgZGVzY2VuZGVudCgkbmspIDEKKwkJbGFwcGVuZCB0b2RvICRuaworCQlpZiB7JG5rIGVxICRhfSB7CisJCSAgICBzZXQgZG9uZSAxCisJCX0KKwkgICAgfQorCX0KKwlpZiB7JGRvbmV9IHsKKwkgICAgc2V0IGRlc2NfdG9kbyBbY29uY2F0ICRsZWZ0b3ZlciBbbHJhbmdlICR0b2RvIFtleHByIHskaSsxfV0gZW5kXV0KKwkgICAgcmV0dXJuCisJfQorICAgIH0KKyAgICBzZXQgZGVzY2VuZGVudCgkYSkgMAorICAgIHNldCBkZXNjX3RvZG8gJGxlZnRvdmVyCit9CisKK3Byb2MgaXNfYW5jZXN0b3Ige2F9IHsKKyAgICBnbG9iYWwgY3VydmlldyBwYXJlbnRzIGFuY2VzdG9yIGFuY190b2RvCisKKyAgICBzZXQgdiAkY3VydmlldworICAgIHNldCBsYSBbcm93b2Zjb21taXQgJGFdCisgICAgc2V0IHRvZG8gJGFuY190b2RvCisgICAgc2V0IGxlZnRvdmVyIHt9CisgICAgc2V0IGRvbmUgMAorICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRvZG9dfSB7aW5jciBpfSB7CisJc2V0IGRvIFtsaW5kZXggJHRvZG8gJGldCisJaWYgeyFbY29tbWl0aW52aWV3ICRkbyAkdl0gfHwgW3Jvd29mY29tbWl0ICRkb10gPiAkbGF9IHsKKwkgICAgbGFwcGVuZCBsZWZ0b3ZlciAkZG8KKwkgICAgY29udGludWUKKwl9CisJZm9yZWFjaCBucCAkcGFyZW50cygkdiwkZG8pIHsKKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgYW5jZXN0b3IoJG5wKV19IHsKKwkJc2V0IGFuY2VzdG9yKCRucCkgMQorCQlsYXBwZW5kIHRvZG8gJG5wCisJCWlmIHskbnAgZXEgJGF9IHsKKwkJICAgIHNldCBkb25lIDEKKwkJfQorCSAgICB9CisJfQorCWlmIHskZG9uZX0geworCSAgICBzZXQgYW5jX3RvZG8gW2NvbmNhdCAkbGVmdG92ZXIgW2xyYW5nZSAkdG9kbyBbZXhwciB7JGkrMX1dIGVuZF1dCisJICAgIHJldHVybgorCX0KKyAgICB9CisgICAgc2V0IGFuY2VzdG9yKCRhKSAwCisgICAgc2V0IGFuY190b2RvICRsZWZ0b3ZlcgorfQorCitwcm9jIGFza3JlbGhpZ2hsaWdodCB7cm93IGlkfSB7CisgICAgZ2xvYmFsIGRlc2NlbmRlbnQgaGlnaGxpZ2h0X3JlbGF0ZWQgaWRkcmF3biByaGlnaGxpZ2h0cworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgYW5jZXN0b3IKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSByZXR1cm4KKyAgICBzZXQgaXNib2xkIDAKKyAgICBpZiB7JGhpZ2hsaWdodF9yZWxhdGVkIGVxIFttYyAiRGVzY2VuZGFudCJdIHx8CisJJGhpZ2hsaWdodF9yZWxhdGVkIGVxIFttYyAiTm90IGRlc2NlbmRhbnQiXX0geworCWlmIHshW2luZm8gZXhpc3RzIGRlc2NlbmRlbnQoJGlkKV19IHsKKwkgICAgaXNfZGVzY2VuZGVudCAkaWQKKwl9CisJaWYgeyRkZXNjZW5kZW50KCRpZCkgPT0gKCRoaWdobGlnaHRfcmVsYXRlZCBlcSBbbWMgIkRlc2NlbmRhbnQiXSl9IHsKKwkgICAgc2V0IGlzYm9sZCAxCisJfQorICAgIH0gZWxzZWlmIHskaGlnaGxpZ2h0X3JlbGF0ZWQgZXEgW21jICJBbmNlc3RvciJdIHx8CisJICAgICAgJGhpZ2hsaWdodF9yZWxhdGVkIGVxIFttYyAiTm90IGFuY2VzdG9yIl19IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBhbmNlc3RvcigkaWQpXX0geworCSAgICBpc19hbmNlc3RvciAkaWQKKwl9CisJaWYgeyRhbmNlc3RvcigkaWQpID09ICgkaGlnaGxpZ2h0X3JlbGF0ZWQgZXEgW21jICJBbmNlc3RvciJdKX0geworCSAgICBzZXQgaXNib2xkIDEKKwl9CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0geworCWlmIHskaXNib2xkICYmICFbaXNoaWdobGlnaHRlZCAkaWRdfSB7CisJICAgIGJvbGRlbiAkaWQgbWFpbmZvbnRib2xkCisJfQorICAgIH0KKyAgICBzZXQgcmhpZ2hsaWdodHMoJGlkKSAkaXNib2xkCit9CisKKyMgR3JhcGggbGF5b3V0IGZ1bmN0aW9ucworCitwcm9jIHNob3J0aWRzIHtpZHN9IHsKKyAgICBzZXQgcmVzIHt9CisgICAgZm9yZWFjaCBpZCAkaWRzIHsKKwlpZiB7W2xsZW5ndGggJGlkXSA+IDF9IHsKKwkgICAgbGFwcGVuZCByZXMgW3Nob3J0aWRzICRpZF0KKwl9IGVsc2VpZiB7W3JlZ2V4cCB7XlswLTlhLWZdezQwfSR9ICRpZF19IHsKKwkgICAgbGFwcGVuZCByZXMgW3N0cmluZyByYW5nZSAkaWQgMCA3XQorCX0gZWxzZSB7CisJICAgIGxhcHBlbmQgcmVzICRpZAorCX0KKyAgICB9CisgICAgcmV0dXJuICRyZXMKK30KKworcHJvYyBudGltZXMge24gb30geworICAgIHNldCByZXQge30KKyAgICBzZXQgbyBbbGlzdCAkb10KKyAgICBmb3Ige3NldCBtYXNrIDF9IHskbWFzayA8PSAkbn0ge2luY3IgbWFzayAkbWFza30geworCWlmIHsoJG4gJiAkbWFzaykgIT0gMH0geworCSAgICBzZXQgcmV0IFtjb25jYXQgJHJldCAkb10KKwl9CisJc2V0IG8gW2NvbmNhdCAkbyAkb10KKyAgICB9CisgICAgcmV0dXJuICRyZXQKK30KKworcHJvYyBvcmRlcnRva2VuIHtpZH0geworICAgIGdsb2JhbCBvcmRlcnRvayBjdXJ2aWV3IHZhcmNpZCB2YXJjc3RhcnQgdmFyY3RvayBjdXJ2aWV3IHBhcmVudHMgY2hpbGRyZW4KKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIKKworICAgIGlmIHtbaW5mbyBleGlzdHMgb3JkZXJ0b2soJGlkKV19IHsKKwlyZXR1cm4gJG9yZGVydG9rKCRpZCkKKyAgICB9CisgICAgc2V0IG9yaWdpZCAkaWQKKyAgICBzZXQgdG9kbyB7fQorICAgIHdoaWxlIHsxfSB7CisJaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJGN1cnZpZXcsJGlkKV19IHsKKwkgICAgc2V0IGEgJHZhcmNpZCgkY3VydmlldywkaWQpCisJICAgIHNldCBwIFtsaW5kZXggJHZhcmNzdGFydCgkY3VydmlldykgJGFdCisJfSBlbHNlIHsKKwkgICAgc2V0IHAgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSAwXQorCX0KKwlpZiB7W2luZm8gZXhpc3RzIG9yZGVydG9rKCRwKV19IHsKKwkgICAgc2V0IHRvayAkb3JkZXJ0b2soJHApCisJICAgIGJyZWFrCisJfQorCXNldCBpZCBbZmlyc3RfcmVhbF9jaGlsZCAkY3VydmlldywkcF0KKwlpZiB7JGlkIGVxIHt9fSB7CisJICAgICMgaXQncyBhIHJvb3QKKwkgICAgc2V0IHRvayBbbGluZGV4ICR2YXJjdG9rKCRjdXJ2aWV3KSAkdmFyY2lkKCRjdXJ2aWV3LCRwKV0KKwkgICAgYnJlYWsKKwl9CisJaWYge1tsbGVuZ3RoICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCldID09IDF9IHsKKwkgICAgbGFwcGVuZCB0b2RvIFtsaXN0ICRwIHt9XQorCX0gZWxzZSB7CisJICAgIHNldCBqIFtsc2VhcmNoIC1leGFjdCAkcGFyZW50cygkY3VydmlldywkaWQpICRwXQorCSAgICBpZiB7JGogPCAwfSB7CisJCXB1dHMgIm9vcHMgZGlkbid0IGZpbmQgW3Nob3J0aWRzICRwXSBpbiBwYXJlbnRzIG9mIFtzaG9ydGlkcyAkaWRdIgorCSAgICB9CisJICAgIGxhcHBlbmQgdG9kbyBbbGlzdCAkcCBbc3RycmVwICRqXV0KKwl9CisgICAgfQorICAgIGZvciB7c2V0IGkgW2xsZW5ndGggJHRvZG9dfSB7W2luY3IgaSAtMV0gPj0gMH0ge30geworCXNldCBwIFtsaW5kZXggJHRvZG8gJGkgMF0KKwlhcHBlbmQgdG9rIFtsaW5kZXggJHRvZG8gJGkgMV0KKwlzZXQgb3JkZXJ0b2soJHApICR0b2sKKyAgICB9CisgICAgc2V0IG9yZGVydG9rKCRvcmlnaWQpICR0b2sKKyAgICByZXR1cm4gJHRvaworfQorCisjIFdvcmsgb3V0IHdoZXJlIGlkIHNob3VsZCBnbyBpbiBpZGxpc3Qgc28gdGhhdCBvcmRlci10b2tlbgorIyB2YWx1ZXMgaW5jcmVhc2UgZnJvbSBsZWZ0IHRvIHJpZ2h0Citwcm9jIGlkY29sIHtpZGxpc3QgaWQge2kgMH19IHsKKyAgICBzZXQgdCBbb3JkZXJ0b2tlbiAkaWRdCisgICAgaWYgeyRpIDwgMH0geworCXNldCBpIDAKKyAgICB9CisgICAgaWYgeyRpID49IFtsbGVuZ3RoICRpZGxpc3RdIHx8ICR0IDwgW29yZGVydG9rZW4gW2xpbmRleCAkaWRsaXN0ICRpXV19IHsKKwlpZiB7JGkgPiBbbGxlbmd0aCAkaWRsaXN0XX0geworCSAgICBzZXQgaSBbbGxlbmd0aCAkaWRsaXN0XQorCX0KKwl3aGlsZSB7W2luY3IgaSAtMV0gPj0gMCAmJiAkdCA8IFtvcmRlcnRva2VuIFtsaW5kZXggJGlkbGlzdCAkaV1dfSB7fQorCWluY3IgaQorICAgIH0gZWxzZSB7CisJaWYgeyR0ID4gW29yZGVydG9rZW4gW2xpbmRleCAkaWRsaXN0ICRpXV19IHsKKwkgICAgd2hpbGUge1tpbmNyIGldIDwgW2xsZW5ndGggJGlkbGlzdF0gJiYKKwkJICAgJHQgPj0gW29yZGVydG9rZW4gW2xpbmRleCAkaWRsaXN0ICRpXV19IHt9CisJfQorICAgIH0KKyAgICByZXR1cm4gJGkKK30KKworcHJvYyBpbml0bGF5b3V0IHt9IHsKKyAgICBnbG9iYWwgcm93aWRsaXN0IHJvd2lzb3B0IHJvd2ZpbmFsIGRpc3BsYXlvcmRlciBwYXJlbnRsaXN0CisgICAgZ2xvYmFsIG51bWNvbW1pdHMgY2FudnhtYXggY2FudgorICAgIGdsb2JhbCBuZXh0Y29sb3IKKyAgICBnbG9iYWwgY29sb3JtYXAgcm93dGV4dHgKKworICAgIHNldCBudW1jb21taXRzIDAKKyAgICBzZXQgZGlzcGxheW9yZGVyIHt9CisgICAgc2V0IHBhcmVudGxpc3Qge30KKyAgICBzZXQgbmV4dGNvbG9yIDAKKyAgICBzZXQgcm93aWRsaXN0IHt9CisgICAgc2V0IHJvd2lzb3B0IHt9CisgICAgc2V0IHJvd2ZpbmFsIHt9CisgICAgc2V0IGNhbnZ4bWF4IFskY2FudiBjZ2V0IC13aWR0aF0KKyAgICB1bnNldCAtbm9jb21wbGFpbiBjb2xvcm1hcAorICAgIHVuc2V0IC1ub2NvbXBsYWluIHJvd3RleHR4CisgICAgc2V0Y2FudnNjcm9sbAorfQorCitwcm9jIHNldGNhbnZzY3JvbGwge30geworICAgIGdsb2JhbCBjYW52IGNhbnYyIGNhbnYzIG51bWNvbW1pdHMgbGluZXNwYyBjYW52eG1heCBjYW52eTAKKyAgICBnbG9iYWwgbGFzdHNjcm9sbHNldCBsYXN0c2Nyb2xscm93cworCisgICAgc2V0IHltYXggW2V4cHIgeyRjYW52eTAgKyAoJG51bWNvbW1pdHMgLSAwLjUpICogJGxpbmVzcGMgKyAyfV0KKyAgICAkY2FudiBjb25mIC1zY3JvbGxyZWdpb24gW2xpc3QgMCAwICRjYW52eG1heCAkeW1heF0KKyAgICAkY2FudjIgY29uZiAtc2Nyb2xscmVnaW9uIFtsaXN0IDAgMCAwICR5bWF4XQorICAgICRjYW52MyBjb25mIC1zY3JvbGxyZWdpb24gW2xpc3QgMCAwIDAgJHltYXhdCisgICAgc2V0IGxhc3RzY3JvbGxzZXQgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBsYXN0c2Nyb2xscm93cyAkbnVtY29tbWl0cworfQorCitwcm9jIHZpc2libGVyb3dzIHt9IHsKKyAgICBnbG9iYWwgY2FudiBudW1jb21taXRzIGxpbmVzcGMKKworICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggZXEge30gfHwgJHltYXggPT0gMH0gcmV0dXJuCisgICAgc2V0IGYgWyRjYW52IHl2aWV3XQorICAgIHNldCB5MCBbZXhwciB7aW50KFtsaW5kZXggJGYgMF0gKiAkeW1heCl9XQorICAgIHNldCByMCBbZXhwciB7aW50KCgkeTAgLSAzKSAvICRsaW5lc3BjKSAtIDF9XQorICAgIGlmIHskcjAgPCAwfSB7CisJc2V0IHIwIDAKKyAgICB9CisgICAgc2V0IHkxIFtleHByIHtpbnQoW2xpbmRleCAkZiAxXSAqICR5bWF4KX1dCisgICAgc2V0IHIxIFtleHByIHtpbnQoKCR5MSAtIDMpIC8gJGxpbmVzcGMpICsgMX1dCisgICAgaWYgeyRyMSA+PSAkbnVtY29tbWl0c30geworCXNldCByMSBbZXhwciB7JG51bWNvbW1pdHMgLSAxfV0KKyAgICB9CisgICAgcmV0dXJuIFtsaXN0ICRyMCAkcjFdCit9CisKK3Byb2MgbGF5b3V0bW9yZSB7fSB7CisgICAgZ2xvYmFsIGNvbW1pdGlkeCB2aWV3Y29tcGxldGUgY3VydmlldworICAgIGdsb2JhbCBudW1jb21taXRzIHBlbmRpbmdfc2VsZWN0IGN1cnZpZXcKKyAgICBnbG9iYWwgbGFzdHNjcm9sbHNldCBsYXN0c2Nyb2xscm93cworCisgICAgaWYgeyRsYXN0c2Nyb2xscm93cyA8IDEwMCB8fCAkdmlld2NvbXBsZXRlKCRjdXJ2aWV3KSB8fAorCVtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10gLSAkbGFzdHNjcm9sbHNldCA+IDUwMH0geworCXNldGNhbnZzY3JvbGwKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBwZW5kaW5nX3NlbGVjdF0gJiYKKwlbY29tbWl0aW52aWV3ICRwZW5kaW5nX3NlbGVjdCAkY3Vydmlld119IHsKKwl1cGRhdGUKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkcGVuZGluZ19zZWxlY3RdIDEKKyAgICB9CisgICAgZHJhd3Zpc2libGUKK30KKworIyBXaXRoIHBhdGggbGltaXRpbmcsIHdlIG1pZ2h0bid0IGdldCB0aGUgYWN0dWFsIEhFQUQgY29tbWl0LAorIyBzbyBhc2sgZ2l0IHJldi1saXN0IHdoYXQgaXMgdGhlIGZpcnN0IGFuY2VzdG9yIG9mIEhFQUQgdGhhdAorIyB0b3VjaGVzIGEgZmlsZSBpbiB0aGUgcGF0aCBsaW1pdC4KK3Byb2MgZ2V0X3ZpZXdtYWluaGVhZCB7dmlld30geworICAgIGdsb2JhbCB2aWV3bWFpbmhlYWRpZCB2ZmlsZWxpbWl0IHZpZXdpbnN0YW5jZXMgbWFpbmhlYWRpZAorCisgICAgY2F0Y2ggeworCXNldCByZmQgW29wZW4gW2NvbmNhdCB8IGdpdCByZXYtbGlzdCAtMSAkbWFpbmhlYWRpZCBcCisJCQkgICAtLSAkdmZpbGVsaW1pdCgkdmlldyldIHJdCisJc2V0IGogW3JlZ19pbnN0YW5jZSAkcmZkXQorCWxhcHBlbmQgdmlld2luc3RhbmNlcygkdmlldykgJGoKKwlmY29uZmlndXJlICRyZmQgLWJsb2NraW5nIDAKKwlmaWxlcnVuICRyZmQgW2xpc3QgZ2V0dmlld2hlYWQgJHJmZCAkaiAkdmlld10KKwlzZXQgdmlld21haW5oZWFkaWQoJGN1cnZpZXcpIHt9CisgICAgfQorfQorCisjIGdpdCByZXYtbGlzdCBzaG91bGQgZ2l2ZSB1cyBqdXN0IDEgbGluZSB0byB1c2UgYXMgdmlld21haW5oZWFkaWQoJHZpZXcpCitwcm9jIGdldHZpZXdoZWFkIHtmZCBpbnN0IHZpZXd9IHsKKyAgICBnbG9iYWwgdmlld21haW5oZWFkaWQgY29tbWZkIGN1cnZpZXcgdmlld2luc3RhbmNlcyBzaG93bG9jYWxjaGFuZ2VzCisKKyAgICBzZXQgaWQge30KKyAgICBpZiB7W2dldHMgJGZkIGxpbmVdIDwgMH0geworCWlmIHshW2VvZiAkZmRdfSB7CisJICAgIHJldHVybiAxCisJfQorICAgIH0gZWxzZWlmIHtbc3RyaW5nIGxlbmd0aCAkbGluZV0gPT0gNDAgJiYgW3N0cmluZyBpcyB4ZGlnaXQgJGxpbmVdfSB7CisJc2V0IGlkICRsaW5lCisgICAgfQorICAgIHNldCB2aWV3bWFpbmhlYWRpZCgkdmlldykgJGlkCisgICAgY2xvc2UgJGZkCisgICAgdW5zZXQgY29tbWZkKCRpbnN0KQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdmlld2luc3RhbmNlcygkdmlldykgJGluc3RdCisgICAgaWYgeyRpID49IDB9IHsKKwlzZXQgdmlld2luc3RhbmNlcygkdmlldykgW2xyZXBsYWNlICR2aWV3aW5zdGFuY2VzKCR2aWV3KSAkaSAkaV0KKyAgICB9CisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzICYmICRpZCBuZSB7fSAmJiAkdmlldyA9PSAkY3Vydmlld30geworCWRvc2hvd2xvY2FsY2hhbmdlcworICAgIH0KKyAgICByZXR1cm4gMAorfQorCitwcm9jIGRvc2hvd2xvY2FsY2hhbmdlcyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgdmlld21haW5oZWFkaWQKKworICAgIGlmIHskdmlld21haW5oZWFkaWQoJGN1cnZpZXcpIGVxIHt9fSByZXR1cm4KKyAgICBpZiB7W2NvbW1pdGludmlldyAkdmlld21haW5oZWFkaWQoJGN1cnZpZXcpICRjdXJ2aWV3XX0geworCWRvZGlmZmluZGV4CisgICAgfSBlbHNlIHsKKwlpbnRlcmVzdGVkaW4gJHZpZXdtYWluaGVhZGlkKCRjdXJ2aWV3KSBkb2RpZmZpbmRleAorICAgIH0KK30KKworcHJvYyBkb2hpZGVsb2NhbGNoYW5nZXMge30geworICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBsc2VyaWFsIGN1cnZpZXcKKworICAgIGlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQgJGN1cnZpZXddfSB7CisJcmVtb3ZlZmFrZXJvdyAkbnVsbGlkCisgICAgfQorICAgIGlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQyICRjdXJ2aWV3XX0geworCXJlbW92ZWZha2Vyb3cgJG51bGxpZDIKKyAgICB9CisgICAgaW5jciBsc2VyaWFsCit9CisKKyMgc3Bhd24gb2ZmIGEgcHJvY2VzcyB0byBkbyBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFECitwcm9jIGRvZGlmZmluZGV4IHt9IHsKKyAgICBnbG9iYWwgbHNlcmlhbCBzaG93bG9jYWxjaGFuZ2VzIHZmaWxlbGltaXQgY3VydmlldworICAgIGdsb2JhbCBoYXN3b3JrdHJlZSBnaXRfdmVyc2lvbgorCisgICAgaWYgeyEkc2hvd2xvY2FsY2hhbmdlcyB8fCAhJGhhc3dvcmt0cmVlfSByZXR1cm4KKyAgICBpbmNyIGxzZXJpYWwKKyAgICBpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjcuMiJdID49IDB9IHsKKwlzZXQgY21kICJ8Z2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBIRUFEIgorICAgIH0gZWxzZSB7CisJc2V0IGNtZCAifGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQiCisgICAgfQorICAgIGlmIHskdmZpbGVsaW1pdCgkY3VydmlldykgbmUge319IHsKKwlzZXQgY21kIFtjb25jYXQgJGNtZCAtLSAkdmZpbGVsaW1pdCgkY3VydmlldyldCisgICAgfQorICAgIHNldCBmZCBbb3BlbiAkY21kIHJdCisgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAKKyAgICBzZXQgaSBbcmVnX2luc3RhbmNlICRmZF0KKyAgICBmaWxlcnVuICRmZCBbbGlzdCByZWFkZGlmZmluZGV4ICRmZCAkbHNlcmlhbCAkaV0KK30KKworcHJvYyByZWFkZGlmZmluZGV4IHtmZCBzZXJpYWwgaW5zdH0geworICAgIGdsb2JhbCB2aWV3bWFpbmhlYWRpZCBudWxsaWQgbnVsbGlkMiBjdXJ2aWV3IGNvbW1pdGluZm8gY29tbWl0ZGF0YSBsc2VyaWFsCisgICAgZ2xvYmFsIHZmaWxlbGltaXQKKworICAgIHNldCBpc2RpZmYgMQorICAgIGlmIHtbZ2V0cyAkZmQgbGluZV0gPCAwfSB7CisJaWYgeyFbZW9mICRmZF19IHsKKwkgICAgcmV0dXJuIDEKKwl9CisJc2V0IGlzZGlmZiAwCisgICAgfQorICAgICMgd2Ugb25seSBuZWVkIHRvIHNlZSBvbmUgbGluZSBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgd2hhdCBpdCBzYXlzLi4uCisgICAgc3RvcF9pbnN0YW5jZSAkaW5zdAorCisgICAgaWYgeyRzZXJpYWwgIT0gJGxzZXJpYWx9IHsKKwlyZXR1cm4gMAorICAgIH0KKworICAgICMgbm93IHNlZSBpZiB0aGVyZSBhcmUgYW55IGxvY2FsIGNoYW5nZXMgbm90IGNoZWNrZWQgaW4gdG8gdGhlIGluZGV4CisgICAgc2V0IGNtZCAifGdpdCBkaWZmLWZpbGVzIgorICAgIGlmIHskdmZpbGVsaW1pdCgkY3VydmlldykgbmUge319IHsKKwlzZXQgY21kIFtjb25jYXQgJGNtZCAtLSAkdmZpbGVsaW1pdCgkY3VydmlldyldCisgICAgfQorICAgIHNldCBmZCBbb3BlbiAkY21kIHJdCisgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAKKyAgICBzZXQgaSBbcmVnX2luc3RhbmNlICRmZF0KKyAgICBmaWxlcnVuICRmZCBbbGlzdCByZWFkZGlmZmZpbGVzICRmZCAkc2VyaWFsICRpXQorCisgICAgaWYgeyRpc2RpZmYgJiYgIVtjb21taXRpbnZpZXcgJG51bGxpZDIgJGN1cnZpZXddfSB7CisJIyBhZGQgdGhlIGxpbmUgZm9yIHRoZSBjaGFuZ2VzIGluIHRoZSBpbmRleCB0byB0aGUgZ3JhcGgKKwlzZXQgaGwgW21jICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiXQorCXNldCBjb21taXRpbmZvKCRudWxsaWQyKSBbbGlzdCAgJGhsIHt9IHt9IHt9IHt9ICIgICAgJGhsXG4iXQorCXNldCBjb21taXRkYXRhKCRudWxsaWQyKSAiXG4gICAgJGhsXG4iCisJaWYge1tjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKKwkgICAgcmVtb3ZlZmFrZXJvdyAkbnVsbGlkCisJfQorCWluc2VydGZha2Vyb3cgJG51bGxpZDIgJHZpZXdtYWluaGVhZGlkKCRjdXJ2aWV3KQorICAgIH0gZWxzZWlmIHshJGlzZGlmZiAmJiBbY29tbWl0aW52aWV3ICRudWxsaWQyICRjdXJ2aWV3XX0geworCWlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQgJGN1cnZpZXddfSB7CisJICAgIHJlbW92ZWZha2Vyb3cgJG51bGxpZAorCX0KKwlyZW1vdmVmYWtlcm93ICRudWxsaWQyCisgICAgfQorICAgIHJldHVybiAwCit9CisKK3Byb2MgcmVhZGRpZmZmaWxlcyB7ZmQgc2VyaWFsIGluc3R9IHsKKyAgICBnbG9iYWwgdmlld21haW5oZWFkaWQgbnVsbGlkIG51bGxpZDIgY3VydmlldworICAgIGdsb2JhbCBjb21taXRpbmZvIGNvbW1pdGRhdGEgbHNlcmlhbAorCisgICAgc2V0IGlzZGlmZiAxCisgICAgaWYge1tnZXRzICRmZCBsaW5lXSA8IDB9IHsKKwlpZiB7IVtlb2YgJGZkXX0geworCSAgICByZXR1cm4gMQorCX0KKwlzZXQgaXNkaWZmIDAKKyAgICB9CisgICAgIyB3ZSBvbmx5IG5lZWQgdG8gc2VlIG9uZSBsaW5lIGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSB3aGF0IGl0IHNheXMuLi4KKyAgICBzdG9wX2luc3RhbmNlICRpbnN0CisKKyAgICBpZiB7JHNlcmlhbCAhPSAkbHNlcmlhbH0geworCXJldHVybiAwCisgICAgfQorCisgICAgaWYgeyRpc2RpZmYgJiYgIVtjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKKwkjIGFkZCB0aGUgbGluZSBmb3IgdGhlIGxvY2FsIGRpZmYgdG8gdGhlIGdyYXBoCisJc2V0IGhsIFttYyAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiXQorCXNldCBjb21taXRpbmZvKCRudWxsaWQpIFtsaXN0ICAkaGwge30ge30ge30ge30gIiAgICAkaGxcbiJdCisJc2V0IGNvbW1pdGRhdGEoJG51bGxpZCkgIlxuICAgICRobFxuIgorCWlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQyICRjdXJ2aWV3XX0geworCSAgICBzZXQgcCAkbnVsbGlkMgorCX0gZWxzZSB7CisJICAgIHNldCBwICR2aWV3bWFpbmhlYWRpZCgkY3VydmlldykKKwl9CisJaW5zZXJ0ZmFrZXJvdyAkbnVsbGlkICRwCisgICAgfSBlbHNlaWYgeyEkaXNkaWZmICYmIFtjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKKwlyZW1vdmVmYWtlcm93ICRudWxsaWQKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworcHJvYyBuZXh0dXNlIHtpZCByb3d9IHsKKyAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbgorCisgICAgaWYge1tpbmZvIGV4aXN0cyBjaGlsZHJlbigkY3VydmlldywkaWQpXX0geworCWZvcmVhY2gga2lkICRjaGlsZHJlbigkY3VydmlldywkaWQpIHsKKwkgICAgaWYgeyFbY29tbWl0aW52aWV3ICRraWQgJGN1cnZpZXddfSB7CisJCXJldHVybiAtMQorCSAgICB9CisJICAgIGlmIHtbcm93b2Zjb21taXQgJGtpZF0gPiAkcm93fSB7CisJCXJldHVybiBbcm93b2Zjb21taXQgJGtpZF0KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYge1tjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0geworCXJldHVybiBbcm93b2Zjb21taXQgJGlkXQorICAgIH0KKyAgICByZXR1cm4gLTEKK30KKworcHJvYyBwcmV2dXNlIHtpZCByb3d9IHsKKyAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbgorCisgICAgc2V0IHJldCAtMQorICAgIGlmIHtbaW5mbyBleGlzdHMgY2hpbGRyZW4oJGN1cnZpZXcsJGlkKV19IHsKKwlmb3JlYWNoIGtpZCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSB7CisJICAgIGlmIHshW2NvbW1pdGludmlldyAka2lkICRjdXJ2aWV3XX0gYnJlYWsKKwkgICAgaWYge1tyb3dvZmNvbW1pdCAka2lkXSA8ICRyb3d9IHsKKwkJc2V0IHJldCBbcm93b2Zjb21taXQgJGtpZF0KKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuICRyZXQKK30KKworcHJvYyBtYWtlX2lkbGlzdCB7cm93fSB7CisgICAgZ2xvYmFsIGRpc3BsYXlvcmRlciBwYXJlbnRsaXN0IHVwYXJyb3dsZW4gZG93bmFycm93bGVuIG1pbmdhcGxlbgorICAgIGdsb2JhbCBjb21taXRpZHggY3VydmlldyBjaGlsZHJlbgorCisgICAgc2V0IHIgW2V4cHIgeyRyb3cgLSAkbWluZ2FwbGVuIC0gJGRvd25hcnJvd2xlbiAtIDF9XQorICAgIGlmIHskciA8IDB9IHsKKwlzZXQgciAwCisgICAgfQorICAgIHNldCByYSBbZXhwciB7JHJvdyAtICRkb3duYXJyb3dsZW59XQorICAgIGlmIHskcmEgPCAwfSB7CisJc2V0IHJhIDAKKyAgICB9CisgICAgc2V0IHJiIFtleHByIHskcm93ICsgJHVwYXJyb3dsZW59XQorICAgIGlmIHskcmIgPiAkY29tbWl0aWR4KCRjdXJ2aWV3KX0geworCXNldCByYiAkY29tbWl0aWR4KCRjdXJ2aWV3KQorICAgIH0KKyAgICBtYWtlX2Rpc3BvcmRlciAkciBbZXhwciB7JHJiICsgMX1dCisgICAgc2V0IGlkcyB7fQorICAgIGZvciB7fSB7JHIgPCAkcmF9IHtpbmNyIHJ9IHsKKwlzZXQgbmV4dGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciBbZXhwciB7JHIgKyAxfV1dCisJZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJdIHsKKwkgICAgaWYgeyRwIGVxICRuZXh0aWR9IGNvbnRpbnVlCisJICAgIHNldCBybiBbbmV4dHVzZSAkcCAkcl0KKwkgICAgaWYgeyRybiA+PSAkcm93ICYmCisJCSRybiA8PSAkciArICRkb3duYXJyb3dsZW4gKyAkbWluZ2FwbGVuICsgJHVwYXJyb3dsZW59IHsKKwkJbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJHBdICRwXQorCSAgICB9CisJfQorICAgIH0KKyAgICBmb3Ige30geyRyIDwgJHJvd30ge2luY3Igcn0geworCXNldCBuZXh0aWQgW2xpbmRleCAkZGlzcGxheW9yZGVyIFtleHByIHskciArIDF9XV0KKwlmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkcl0geworCSAgICBpZiB7JHAgZXEgJG5leHRpZH0gY29udGludWUKKwkgICAgc2V0IHJuIFtuZXh0dXNlICRwICRyXQorCSAgICBpZiB7JHJuIDwgMCB8fCAkcm4gPj0gJHJvd30geworCQlsYXBwZW5kIGlkcyBbbGlzdCBbb3JkZXJ0b2tlbiAkcF0gJHBdCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KKyAgICBsYXBwZW5kIGlkcyBbbGlzdCBbb3JkZXJ0b2tlbiAkaWRdICRpZF0KKyAgICB3aGlsZSB7JHIgPCAkcmJ9IHsKKwlmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkcl0geworCSAgICBzZXQgZmlyc3RraWQgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJHApIDBdCisJICAgIGlmIHtbcm93b2Zjb21taXQgJGZpcnN0a2lkXSA8ICRyb3d9IHsKKwkJbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJHBdICRwXQorCSAgICB9CisJfQorCWluY3IgcgorCXNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJdCisJaWYgeyRpZCBuZSB7fX0geworCSAgICBzZXQgZmlyc3RraWQgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSAwXQorCSAgICBpZiB7JGZpcnN0a2lkIG5lIHt9ICYmIFtyb3dvZmNvbW1pdCAkZmlyc3RraWRdIDwgJHJvd30geworCQlsYXBwZW5kIGlkcyBbbGlzdCBbb3JkZXJ0b2tlbiAkaWRdICRpZF0KKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IGlkbGlzdCB7fQorICAgIGZvcmVhY2ggaWR4IFtsc29ydCAtdW5pcXVlICRpZHNdIHsKKwlsYXBwZW5kIGlkbGlzdCBbbGluZGV4ICRpZHggMV0KKyAgICB9CisgICAgcmV0dXJuICRpZGxpc3QKK30KKworcHJvYyByb3dzZXF1YWwge2EgYn0geworICAgIHdoaWxlIHtbc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRhIHt9XV0gPj0gMH0geworCXNldCBhIFtscmVwbGFjZSAkYSAkaSAkaV0KKyAgICB9CisgICAgd2hpbGUge1tzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGIge31dXSA+PSAwfSB7CisJc2V0IGIgW2xyZXBsYWNlICRiICRpICRpXQorICAgIH0KKyAgICByZXR1cm4gW2V4cHIgeyRhIGVxICRifV0KK30KKworcHJvYyBtYWtldXBsaW5lIHtpZCByb3cgcmVuZCBjb2x9IHsKKyAgICBnbG9iYWwgcm93aWRsaXN0IHVwYXJyb3dsZW4gZG93bmFycm93bGVuIG1pbmdhcGxlbgorCisgICAgZm9yIHtzZXQgciAkcmVuZH0gezF9IHtzZXQgciAkcnN0YXJ0fSB7CisJc2V0IHJzdGFydCBbcHJldnVzZSAkaWQgJHJdCisJaWYgeyRyc3RhcnQgPCAwfSByZXR1cm4KKwlpZiB7JHJzdGFydCA8ICRyb3d9IGJyZWFrCisgICAgfQorICAgIGlmIHskcnN0YXJ0ICsgJHVwYXJyb3dsZW4gKyAkbWluZ2FwbGVuICsgJGRvd25hcnJvd2xlbiA8ICRyZW5kfSB7CisJc2V0IHJzdGFydCBbZXhwciB7JHJlbmQgLSAkdXBhcnJvd2xlbiAtIDF9XQorICAgIH0KKyAgICBmb3Ige3NldCByICRyc3RhcnR9IHtbaW5jciByXSA8PSAkcm93fSB7fSB7CisJc2V0IGlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJdCisJaWYgeyRpZGxpc3QgbmUge30gJiYgW2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJGlkXSA8IDB9IHsKKwkgICAgc2V0IGNvbCBbaWRjb2wgJGlkbGlzdCAkaWQgJGNvbF0KKwkgICAgbHNldCByb3dpZGxpc3QgJHIgW2xpbnNlcnQgJGlkbGlzdCAkY29sICRpZF0KKwkgICAgY2hhbmdlZHJvdyAkcgorCX0KKyAgICB9Cit9CisKK3Byb2MgbGF5b3V0cm93cyB7cm93IGVuZHJvd30geworICAgIGdsb2JhbCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgZGlzcGxheW9yZGVyCisgICAgZ2xvYmFsIHVwYXJyb3dsZW4gZG93bmFycm93bGVuIG1heHdpZHRoIG1pbmdhcGxlbgorICAgIGdsb2JhbCBjaGlsZHJlbiBwYXJlbnRsaXN0CisgICAgZ2xvYmFsIGNvbW1pdGlkeCB2aWV3Y29tcGxldGUgY3VydmlldworCisgICAgbWFrZV9kaXNwb3JkZXIgW2V4cHIgeyRyb3cgLSAxfV0gW2V4cHIgeyRlbmRyb3cgKyAkdXBhcnJvd2xlbn1dCisgICAgc2V0IGlkbGlzdCB7fQorICAgIGlmIHskcm93ID4gMH0geworCXNldCBybTEgW2V4cHIgeyRyb3cgLSAxfV0KKwlmb3JlYWNoIGlkIFtsaW5kZXggJHJvd2lkbGlzdCAkcm0xXSB7CisJICAgIGlmIHskaWQgbmUge319IHsKKwkJbGFwcGVuZCBpZGxpc3QgJGlkCisJICAgIH0KKwl9CisJc2V0IGZpbmFsIFtsaW5kZXggJHJvd2ZpbmFsICRybTFdCisgICAgfQorICAgIGZvciB7fSB7JHJvdyA8ICRlbmRyb3d9IHtpbmNyIHJvd30geworCXNldCBybTEgW2V4cHIgeyRyb3cgLSAxfV0KKwlpZiB7JHJtMSA8IDAgfHwgJGlkbGlzdCBlcSB7fX0geworCSAgICBzZXQgaWRsaXN0IFttYWtlX2lkbGlzdCAkcm93XQorCSAgICBzZXQgZmluYWwgMQorCX0gZWxzZSB7CisJICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJtMV0KKwkgICAgc2V0IGNvbCBbbHNlYXJjaCAtZXhhY3QgJGlkbGlzdCAkaWRdCisJICAgIHNldCBpZGxpc3QgW2xyZXBsYWNlICRpZGxpc3QgJGNvbCAkY29sXQorCSAgICBmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkcm0xXSB7CisJCWlmIHtbbHNlYXJjaCAtZXhhY3QgJGlkbGlzdCAkcF0gPCAwfSB7CisJCSAgICBzZXQgY29sIFtpZGNvbCAkaWRsaXN0ICRwICRjb2xdCisJCSAgICBzZXQgaWRsaXN0IFtsaW5zZXJ0ICRpZGxpc3QgJGNvbCAkcF0KKwkJICAgICMgaWYgbm90IHRoZSBmaXJzdCBjaGlsZCwgd2UgaGF2ZSB0byBpbnNlcnQgYSBsaW5lIGdvaW5nIHVwCisJCSAgICBpZiB7JGlkIG5lIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRwKSAwXX0geworCQkJbWFrZXVwbGluZSAkcCAkcm0xICRyb3cgJGNvbAorCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorCSAgICBpZiB7JHJvdyA+ICRkb3duYXJyb3dsZW59IHsKKwkJc2V0IHRlcm1yb3cgW2V4cHIgeyRyb3cgLSAkZG93bmFycm93bGVuIC0gMX1dCisJCWZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICR0ZXJtcm93XSB7CisJCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGlkbGlzdCAkcF0KKwkJICAgIGlmIHskaSA8IDB9IGNvbnRpbnVlCisJCSAgICBzZXQgbnIgW25leHR1c2UgJHAgJHRlcm1yb3ddCisJCSAgICBpZiB7JG5yIDwgMCB8fCAkbnIgPj0gJHJvdyArICRtaW5nYXBsZW4gKyAkdXBhcnJvd2xlbn0geworCQkJc2V0IGlkbGlzdCBbbHJlcGxhY2UgJGlkbGlzdCAkaSAkaV0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHNldCBjb2wgW2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJGlkXQorCSAgICBpZiB7JGNvbCA8IDB9IHsKKwkJc2V0IGNvbCBbaWRjb2wgJGlkbGlzdCAkaWRdCisJCXNldCBpZGxpc3QgW2xpbnNlcnQgJGlkbGlzdCAkY29sICRpZF0KKwkJaWYgeyRjaGlsZHJlbigkY3VydmlldywkaWQpIG5lIHt9fSB7CisJCSAgICBtYWtldXBsaW5lICRpZCAkcm0xICRyb3cgJGNvbAorCQl9CisJICAgIH0KKwkgICAgc2V0IHIgW2V4cHIgeyRyb3cgKyAkdXBhcnJvd2xlbiAtIDF9XQorCSAgICBpZiB7JHIgPCAkY29tbWl0aWR4KCRjdXJ2aWV3KX0geworCQlzZXQgeCAkY29sCisJCWZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICRyXSB7CisJCSAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJHBdID49IDB9IGNvbnRpbnVlCisJCSAgICBzZXQgZmsgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJHApIDBdCisJCSAgICBpZiB7W3Jvd29mY29tbWl0ICRma10gPCAkcm93fSB7CisJCQlzZXQgeCBbaWRjb2wgJGlkbGlzdCAkcCAkeF0KKwkJCXNldCBpZGxpc3QgW2xpbnNlcnQgJGlkbGlzdCAkeCAkcF0KKwkJICAgIH0KKwkJfQorCQlpZiB7W2luY3Igcl0gPCAkY29tbWl0aWR4KCRjdXJ2aWV3KX0geworCQkgICAgc2V0IHAgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXQorCQkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRwXSA8IDB9IHsKKwkJCXNldCBmayBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkcCkgMF0KKwkJCWlmIHskZmsgbmUge30gJiYgW3Jvd29mY29tbWl0ICRma10gPCAkcm93fSB7CisJCQkgICAgc2V0IHggW2lkY29sICRpZGxpc3QgJHAgJHhdCisJCQkgICAgc2V0IGlkbGlzdCBbbGluc2VydCAkaWRsaXN0ICR4ICRwXQorCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJaWYgeyRmaW5hbCAmJiAhJHZpZXdjb21wbGV0ZSgkY3VydmlldykgJiYKKwkgICAgJHJvdyArICR1cGFycm93bGVuICsgJG1pbmdhcGxlbiArICRkb3duYXJyb3dsZW4KKwkJPj0gJGNvbW1pdGlkeCgkY3Vydmlldyl9IHsKKwkgICAgc2V0IGZpbmFsIDAKKwl9CisJc2V0IGwgW2xsZW5ndGggJHJvd2lkbGlzdF0KKwlpZiB7JHJvdyA9PSAkbH0geworCSAgICBsYXBwZW5kIHJvd2lkbGlzdCAkaWRsaXN0CisJICAgIGxhcHBlbmQgcm93aXNvcHQgMAorCSAgICBsYXBwZW5kIHJvd2ZpbmFsICRmaW5hbAorCX0gZWxzZWlmIHskcm93IDwgJGx9IHsKKwkgICAgaWYgeyFbcm93c2VxdWFsICRpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddXX0geworCQlsc2V0IHJvd2lkbGlzdCAkcm93ICRpZGxpc3QKKwkJY2hhbmdlZHJvdyAkcm93CisJICAgIH0KKwkgICAgbHNldCByb3dmaW5hbCAkcm93ICRmaW5hbAorCX0gZWxzZSB7CisJICAgIHNldCBwYWQgW250aW1lcyBbZXhwciB7JHJvdyAtICRsfV0ge31dCisJICAgIHNldCByb3dpZGxpc3QgW2NvbmNhdCAkcm93aWRsaXN0ICRwYWRdCisJICAgIGxhcHBlbmQgcm93aWRsaXN0ICRpZGxpc3QKKwkgICAgc2V0IHJvd2ZpbmFsIFtjb25jYXQgJHJvd2ZpbmFsICRwYWRdCisJICAgIGxhcHBlbmQgcm93ZmluYWwgJGZpbmFsCisJICAgIHNldCByb3dpc29wdCBbY29uY2F0ICRyb3dpc29wdCBbbnRpbWVzIFtleHByIHskcm93IC0gJGwgKyAxfV0gMF1dCisJfQorICAgIH0KKyAgICByZXR1cm4gJHJvdworfQorCitwcm9jIGNoYW5nZWRyb3cge3Jvd30geworICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgaWRkcmF3biByb3dpc29wdCBuZWVkX3JlZGlzcGxheQorCisgICAgc2V0IGwgW2xsZW5ndGggJHJvd2lzb3B0XQorICAgIGlmIHskcm93IDwgJGx9IHsKKwlsc2V0IHJvd2lzb3B0ICRyb3cgMAorCWlmIHskcm93ICsgMSA8ICRsfSB7CisJICAgIGxzZXQgcm93aXNvcHQgW2V4cHIgeyRyb3cgKyAxfV0gMAorCSAgICBpZiB7JHJvdyArIDIgPCAkbH0geworCQlsc2V0IHJvd2lzb3B0IFtleHByIHskcm93ICsgMn1dIDAKKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorICAgIGlmIHtbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0geworCXNldCBuZWVkX3JlZGlzcGxheSAxCisgICAgfQorfQorCitwcm9jIGluc2VydF9wYWQge3JvdyBjb2wgbnBhZH0geworICAgIGdsb2JhbCByb3dpZGxpc3QKKworICAgIHNldCBwYWQgW250aW1lcyAkbnBhZCB7fV0KKyAgICBzZXQgaWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XQorICAgIHNldCBiZWYgW2xyYW5nZSAkaWRsaXN0IDAgW2V4cHIgeyRjb2wgLSAxfV1dCisgICAgc2V0IGFmdCBbbHJhbmdlICRpZGxpc3QgJGNvbCBlbmRdCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRhZnQge31dCisgICAgaWYgeyRpID4gMH0geworCXNldCBhZnQgW2xyZXBsYWNlICRhZnQgJGkgJGldCisgICAgfQorICAgIGxzZXQgcm93aWRsaXN0ICRyb3cgW2NvbmNhdCAkYmVmICRwYWQgJGFmdF0KKyAgICBjaGFuZ2Vkcm93ICRyb3cKK30KKworcHJvYyBvcHRpbWl6ZV9yb3dzIHtyb3cgY29sIGVuZHJvd30geworICAgIGdsb2JhbCByb3dpZGxpc3Qgcm93aXNvcHQgZGlzcGxheW9yZGVyIGN1cnZpZXcgY2hpbGRyZW4KKworICAgIGlmIHskcm93IDwgMX0geworCXNldCByb3cgMQorICAgIH0KKyAgICBmb3Ige30geyRyb3cgPCAkZW5kcm93fSB7aW5jciByb3c7IHNldCBjb2wgMH0geworCWlmIHtbbGluZGV4ICRyb3dpc29wdCAkcm93XX0gY29udGludWUKKwlzZXQgaGFzcGFkIDAKKwlzZXQgeTAgW2V4cHIgeyRyb3cgLSAxfV0KKwlzZXQgeW0gW2V4cHIgeyRyb3cgLSAyfV0KKwlzZXQgaWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XQorCXNldCBwcmV2aWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkeTBdCisJaWYgeyRpZGxpc3QgZXEge30gfHwgJHByZXZpZGxpc3QgZXEge319IGNvbnRpbnVlCisJaWYgeyR5bSA+PSAwfSB7CisJICAgIHNldCBwcHJldmlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHltXQorCSAgICBpZiB7JHBwcmV2aWRsaXN0IGVxIHt9fSBjb250aW51ZQorCX0gZWxzZSB7CisJICAgIHNldCBwcHJldmlkbGlzdCB7fQorCX0KKwlzZXQgeDAgLTEKKwlzZXQgeG0gLTEKKwlmb3Ige30geyRjb2wgPCBbbGxlbmd0aCAkaWRsaXN0XX0ge2luY3IgY29sfSB7CisJICAgIHNldCBpZCBbbGluZGV4ICRpZGxpc3QgJGNvbF0KKwkgICAgaWYge1tsaW5kZXggJHByZXZpZGxpc3QgJGNvbF0gZXEgJGlkfSBjb250aW51ZQorCSAgICBpZiB7JGlkIGVxIHt9fSB7CisJCXNldCBoYXNwYWQgMQorCQljb250aW51ZQorCSAgICB9CisJICAgIHNldCB4MCBbbHNlYXJjaCAtZXhhY3QgJHByZXZpZGxpc3QgJGlkXQorCSAgICBpZiB7JHgwIDwgMH0gY29udGludWUKKwkgICAgc2V0IHogW2V4cHIgeyR4MCAtICRjb2x9XQorCSAgICBzZXQgaXNhcnJvdyAwCisJICAgIHNldCB6MCB7fQorCSAgICBpZiB7JHltID49IDB9IHsKKwkJc2V0IHhtIFtsc2VhcmNoIC1leGFjdCAkcHByZXZpZGxpc3QgJGlkXQorCQlpZiB7JHhtID49IDB9IHsKKwkJICAgIHNldCB6MCBbZXhwciB7JHhtIC0gJHgwfV0KKwkJfQorCSAgICB9CisJICAgIGlmIHskejAgZXEge319IHsKKwkJIyBpZiByb3cgeTAgaXMgdGhlIGZpcnN0IGNoaWxkIG9mICRpZCB0aGVuIGl0J3Mgbm90IGFuIGFycm93CisJCWlmIHtbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkaWQpIDBdIG5lCisJCSAgICBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHkwXX0geworCQkgICAgc2V0IGlzYXJyb3cgMQorCQl9CisJICAgIH0KKwkgICAgaWYgeyEkaXNhcnJvdyAmJiAkaWQgbmUgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddICYmCisJCVtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgW2V4cHIgeyRyb3crMX1dXSAkaWRdIDwgMH0geworCQlzZXQgaXNhcnJvdyAxCisJICAgIH0KKwkgICAgIyBMb29raW5nIGF0IGxpbmVzIGZyb20gdGhpcyByb3cgdG8gdGhlIHByZXZpb3VzIHJvdywKKwkgICAgIyBtYWtlIHRoZW0gZ28gc3RyYWlnaHQgdXAgaWYgdGhleSBlbmQgaW4gYW4gYXJyb3cgb24KKwkgICAgIyB0aGUgcHJldmlvdXMgcm93OyBvdGhlcndpc2UgbWFrZSB0aGVtIGdvIHN0cmFpZ2h0IHVwCisJICAgICMgb3IgYXQgNDUgZGVncmVlcy4KKwkgICAgaWYgeyR6IDwgLTEgfHwgKCR6IDwgMCAmJiAkaXNhcnJvdyl9IHsKKwkJIyBMaW5lIGN1cnJlbnRseSBnb2VzIGxlZnQgdG9vIG11Y2g7CisJCSMgaW5zZXJ0IHBhZHMgaW4gdGhlIHByZXZpb3VzIHJvdywgdGhlbiBvcHRpbWl6ZSBpdAorCQlzZXQgbnBhZCBbZXhwciB7LTEgLSAkeiArICRpc2Fycm93fV0KKwkJaW5zZXJ0X3BhZCAkeTAgJHgwICRucGFkCisJCWlmIHskeTAgPiAwfSB7CisJCSAgICBvcHRpbWl6ZV9yb3dzICR5MCAkeDAgJHJvdworCQl9CisJCXNldCBwcmV2aWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkeTBdCisJCXNldCB4MCBbbHNlYXJjaCAtZXhhY3QgJHByZXZpZGxpc3QgJGlkXQorCQlzZXQgeiBbZXhwciB7JHgwIC0gJGNvbH1dCisJCWlmIHskejAgbmUge319IHsKKwkJICAgIHNldCBwcHJldmlkbGlzdCBbbGluZGV4ICRyb3dpZGxpc3QgJHltXQorCQkgICAgc2V0IHhtIFtsc2VhcmNoIC1leGFjdCAkcHByZXZpZGxpc3QgJGlkXQorCQkgICAgc2V0IHowIFtleHByIHskeG0gLSAkeDB9XQorCQl9CisJICAgIH0gZWxzZWlmIHskeiA+IDEgfHwgKCR6ID4gMCAmJiAkaXNhcnJvdyl9IHsKKwkJIyBMaW5lIGN1cnJlbnRseSBnb2VzIHJpZ2h0IHRvbyBtdWNoOworCQkjIGluc2VydCBwYWRzIGluIHRoaXMgbGluZQorCQlzZXQgbnBhZCBbZXhwciB7JHogLSAxICsgJGlzYXJyb3d9XQorCQlpbnNlcnRfcGFkICRyb3cgJGNvbCAkbnBhZAorCQlzZXQgaWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XQorCQlpbmNyIGNvbCAkbnBhZAorCQlzZXQgeiBbZXhwciB7JHgwIC0gJGNvbH1dCisJCXNldCBoYXNwYWQgMQorCSAgICB9CisJICAgIGlmIHskejAgZXEge30gJiYgISRpc2Fycm93ICYmICR5bSA+PSAwfSB7CisJCSMgdGhpcyBsaW5lIGxpbmtzIHRvIGl0cyBmaXJzdCBjaGlsZCBvbiByb3cgJHJvdy0yCisJCXNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHltXQorCQlzZXQgeGMgW2xzZWFyY2ggLWV4YWN0ICRwcHJldmlkbGlzdCAkaWRdCisJCWlmIHskeGMgPj0gMH0geworCQkgICAgc2V0IHowIFtleHByIHskeGMgLSAkeDB9XQorCQl9CisJICAgIH0KKwkgICAgIyBhdm9pZCBsaW5lcyBqaWdnaW5nIGxlZnQgdGhlbiBpbW1lZGlhdGVseSByaWdodAorCSAgICBpZiB7JHowIG5lIHt9ICYmICR6IDwgMCAmJiAkejAgPiAwfSB7CisJCWluc2VydF9wYWQgJHkwICR4MCAxCisJCWluY3IgeDAKKwkJb3B0aW1pemVfcm93cyAkeTAgJHgwICRyb3cKKwkJc2V0IHByZXZpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICR5MF0KKwkgICAgfQorCX0KKwlpZiB7ISRoYXNwYWR9IHsKKwkgICAgIyBGaW5kIHRoZSBmaXJzdCBjb2x1bW4gdGhhdCBkb2Vzbid0IGhhdmUgYSBsaW5lIGdvaW5nIHJpZ2h0CisJICAgIGZvciB7c2V0IGNvbCBbbGxlbmd0aCAkaWRsaXN0XX0ge1tpbmNyIGNvbCAtMV0gPj0gMH0ge30geworCQlzZXQgaWQgW2xpbmRleCAkaWRsaXN0ICRjb2xdCisJCWlmIHskaWQgZXEge319IGJyZWFrCisJCXNldCB4MCBbbHNlYXJjaCAtZXhhY3QgJHByZXZpZGxpc3QgJGlkXQorCQlpZiB7JHgwIDwgMH0geworCQkgICAgIyBjaGVjayBpZiB0aGlzIGlzIHRoZSBsaW5rIHRvIHRoZSBmaXJzdCBjaGlsZAorCQkgICAgc2V0IGtpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHkwXQorCQkgICAgaWYge1tsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgMF0gZXEgJGtpZH0geworCQkJIyBpdCBpcywgd29yayBvdXQgb2Zmc2V0IHRvIGNoaWxkCisJCQlzZXQgeDAgW2xzZWFyY2ggLWV4YWN0ICRwcmV2aWRsaXN0ICRraWRdCisJCSAgICB9CisJCX0KKwkJaWYgeyR4MCA8PSAkY29sfSBicmVhaworCSAgICB9CisJICAgICMgSW5zZXJ0IGEgcGFkIGF0IHRoYXQgY29sdW1uIGFzIGxvbmcgYXMgaXQgaGFzIGEgbGluZSBhbmQKKwkgICAgIyBpc24ndCB0aGUgbGFzdCBjb2x1bW4KKwkgICAgaWYgeyR4MCA+PSAwICYmIFtpbmNyIGNvbF0gPCBbbGxlbmd0aCAkaWRsaXN0XX0geworCQlzZXQgaWRsaXN0IFtsaW5zZXJ0ICRpZGxpc3QgJGNvbCB7fV0KKwkJbHNldCByb3dpZGxpc3QgJHJvdyAkaWRsaXN0CisJCWNoYW5nZWRyb3cgJHJvdworCSAgICB9CisJfQorICAgIH0KK30KKworcHJvYyB4YyB7cm93IGNvbH0geworICAgIGdsb2JhbCBjYW52eDAgbGluZXNwYworICAgIHJldHVybiBbZXhwciB7JGNhbnZ4MCArICRjb2wgKiAkbGluZXNwY31dCit9CisKK3Byb2MgeWMge3Jvd30geworICAgIGdsb2JhbCBjYW52eTAgbGluZXNwYworICAgIHJldHVybiBbZXhwciB7JGNhbnZ5MCArICRyb3cgKiAkbGluZXNwY31dCit9CisKK3Byb2MgbGluZXdpZHRoIHtpZH0geworICAgIGdsb2JhbCB0aGlja2VybGluZSBsdGhpY2tuZXNzCisKKyAgICBzZXQgd2lkICRsdGhpY2tuZXNzCisgICAgaWYge1tpbmZvIGV4aXN0cyB0aGlja2VybGluZV0gJiYgJGlkIGVxICR0aGlja2VybGluZX0geworCXNldCB3aWQgW2V4cHIgezIgKiAkbHRoaWNrbmVzc31dCisgICAgfQorICAgIHJldHVybiAkd2lkCit9CisKK3Byb2Mgcm93cmFuZ2VzIHtpZH0geworICAgIGdsb2JhbCBjdXJ2aWV3IGNoaWxkcmVuIHVwYXJyb3dsZW4gZG93bmFycm93bGVuCisgICAgZ2xvYmFsIHJvd2lkbGlzdAorCisgICAgc2V0IGtpZHMgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkKKyAgICBpZiB7JGtpZHMgZXEge319IHsKKwlyZXR1cm4ge30KKyAgICB9CisgICAgc2V0IHJldCB7fQorICAgIGxhcHBlbmQga2lkcyAkaWQKKyAgICBmb3JlYWNoIGNoaWxkICRraWRzIHsKKwlpZiB7IVtjb21taXRpbnZpZXcgJGNoaWxkICRjdXJ2aWV3XX0gYnJlYWsKKwlzZXQgcm93IFtyb3dvZmNvbW1pdCAkY2hpbGRdCisJaWYgeyFbaW5mbyBleGlzdHMgcHJldl19IHsKKwkgICAgbGFwcGVuZCByZXQgW2V4cHIgeyRyb3cgKyAxfV0KKwl9IGVsc2UgeworCSAgICBpZiB7JHJvdyA8PSAkcHJldnJvd30geworCQlwdXRzICJvb3BzIGNoaWxkcmVuIG9mIFtzaG9ydGlkcyAkaWRdIG91dCBvZiBvcmRlciBbc2hvcnRpZHMgJGNoaWxkXSAkcm93IDw9IFtzaG9ydGlkcyAkcHJldl0gJHByZXZyb3ciCisJICAgIH0KKwkgICAgIyBzZWUgaWYgdGhlIGxpbmUgZXh0ZW5kcyB0aGUgd2hvbGUgd2F5IGZyb20gcHJldnJvdyB0byByb3cKKwkgICAgaWYgeyRyb3cgPiAkcHJldnJvdyArICR1cGFycm93bGVuICsgJGRvd25hcnJvd2xlbiAmJgorCQlbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0IFwKKwkJCSAgICBbZXhwciB7aW50KCgkcm93ICsgJHByZXZyb3cpIC8gMil9XV0gJGlkXSA8IDB9IHsKKwkJIyBpdCBkb2Vzbid0LCBzZWUgd2hlcmUgaXQgZW5kcworCQlzZXQgciBbZXhwciB7JHByZXZyb3cgKyAkZG93bmFycm93bGVufV0KKwkJaWYge1tsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJdICRpZF0gPCAwfSB7CisJCSAgICB3aGlsZSB7W2luY3IgciAtMV0gPiAkcHJldnJvdyAmJgorCQkJICAgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcl0gJGlkXSA8IDB9IHt9CisJCX0gZWxzZSB7CisJCSAgICB3aGlsZSB7W2luY3Igcl0gPD0gJHJvdyAmJgorCQkJICAgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcl0gJGlkXSA+PSAwfSB7fQorCQkgICAgaW5jciByIC0xCisJCX0KKwkJbGFwcGVuZCByZXQgJHIKKwkJIyBzZWUgd2hlcmUgaXQgc3RhcnRzIHVwIGFnYWluCisJCXNldCByIFtleHByIHskcm93IC0gJHVwYXJyb3dsZW59XQorCQlpZiB7W2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcl0gJGlkXSA8IDB9IHsKKwkJICAgIHdoaWxlIHtbaW5jciByXSA8ICRyb3cgJiYKKwkJCSAgIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJdICRpZF0gPCAwfSB7fQorCQl9IGVsc2UgeworCQkgICAgd2hpbGUge1tpbmNyIHIgLTFdID49ICRwcmV2cm93ICYmCisJCQkgICBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0ICRyXSAkaWRdID49IDB9IHt9CisJCSAgICBpbmNyIHIKKwkJfQorCQlsYXBwZW5kIHJldCAkcgorCSAgICB9CisJfQorCWlmIHskY2hpbGQgZXEgJGlkfSB7CisJICAgIGxhcHBlbmQgcmV0ICRyb3cKKwl9CisJc2V0IHByZXYgJGNoaWxkCisJc2V0IHByZXZyb3cgJHJvdworICAgIH0KKyAgICByZXR1cm4gJHJldAorfQorCitwcm9jIGRyYXdsaW5lc2VnIHtpZCByb3cgZW5kcm93IGFycm93bG93fSB7CisgICAgZ2xvYmFsIHJvd2lkbGlzdCBkaXNwbGF5b3JkZXIgaWRkcmF3biBsaW5lc2VncworICAgIGdsb2JhbCBjYW52IGNvbG9ybWFwIGxpbmVzcGMgY3VydmlldyBtYXhsaW5lbGVuIHBhcmVudGxpc3QKKworICAgIHNldCBjb2xzIFtsaXN0IFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10gJGlkXV0KKyAgICBzZXQgbGUgW2V4cHIgeyRyb3cgKyAxfV0KKyAgICBzZXQgYXJyb3doaWdoIDEKKyAgICB3aGlsZSB7MX0geworCXNldCBjIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJGxlXSAkaWRdCisJaWYgeyRjIDwgMH0geworCSAgICBpbmNyIGxlIC0xCisJICAgIGJyZWFrCisJfQorCWxhcHBlbmQgY29scyAkYworCXNldCB4IFtsaW5kZXggJGRpc3BsYXlvcmRlciAkbGVdCisJaWYgeyR4IGVxICRpZH0geworCSAgICBzZXQgYXJyb3doaWdoIDAKKwkgICAgYnJlYWsKKwl9CisJaWYge1tpbmZvIGV4aXN0cyBpZGRyYXduKCR4KV0gfHwgJGxlID09ICRlbmRyb3d9IHsKKwkgICAgc2V0IGMgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCBbZXhwciB7JGxlKzF9XV0gJGlkXQorCSAgICBpZiB7JGMgPj0gMH0geworCQlsYXBwZW5kIGNvbHMgJGMKKwkJc2V0IGFycm93aGlnaCAwCisJICAgIH0KKwkgICAgYnJlYWsKKwl9CisJaW5jciBsZQorICAgIH0KKyAgICBpZiB7JGxlIDw9ICRyb3d9IHsKKwlyZXR1cm4gJHJvdworICAgIH0KKworICAgIHNldCBsaW5lcyB7fQorICAgIHNldCBpIDAKKyAgICBzZXQgam9pbmhpZ2ggMAorICAgIGlmIHtbaW5mbyBleGlzdHMgbGluZXNlZ3MoJGlkKV19IHsKKwlzZXQgbGluZXMgJGxpbmVzZWdzKCRpZCkKKwlmb3JlYWNoIGxpICRsaW5lcyB7CisJICAgIHNldCByMCBbbGluZGV4ICRsaSAwXQorCSAgICBpZiB7JHIwID4gJHJvd30geworCQlpZiB7JHIwID09ICRsZSAmJiBbbGluZGV4ICRsaSAxXSAtICRyb3cgPD0gJG1heGxpbmVsZW59IHsKKwkJICAgIHNldCBqb2luaGlnaCAxCisJCX0KKwkJYnJlYWsKKwkgICAgfQorCSAgICBpbmNyIGkKKwl9CisgICAgfQorICAgIHNldCBqb2lubG93IDAKKyAgICBpZiB7JGkgPiAwfSB7CisJc2V0IGxpIFtsaW5kZXggJGxpbmVzIFtleHByIHskaS0xfV1dCisJc2V0IHIxIFtsaW5kZXggJGxpIDFdCisJaWYgeyRyMSA9PSAkcm93ICYmICRsZSAtIFtsaW5kZXggJGxpIDBdIDw9ICRtYXhsaW5lbGVufSB7CisJICAgIHNldCBqb2lubG93IDEKKwl9CisgICAgfQorCisgICAgc2V0IHggW2xpbmRleCAkY29scyBbZXhwciB7JGxlIC0gJHJvd31dXQorICAgIHNldCB4cCBbbGluZGV4ICRjb2xzIFtleHByIHskbGUgLSAxIC0gJHJvd31dXQorICAgIHNldCBkaXIgW2V4cHIgeyR4cCAtICR4fV0KKyAgICBpZiB7JGpvaW5oaWdofSB7CisJc2V0IGl0aCBbbGluZGV4ICRsaW5lcyAkaSAyXQorCXNldCBjb29yZHMgWyRjYW52IGNvb3JkcyAkaXRoXQorCXNldCBhaCBbJGNhbnYgaXRlbWNnZXQgJGl0aCAtYXJyb3ddCisJc2V0IGFycm93aGlnaCBbZXhwciB7JGFoIGVxICJmaXJzdCIgfHwgJGFoIGVxICJib3RoIn1dCisJc2V0IHgyIFtsaW5kZXggJGNvbHMgW2V4cHIgeyRsZSArIDEgLSAkcm93fV1dCisJaWYgeyR4MiBuZSB7fSAmJiAkeCAtICR4MiA9PSAkZGlyfSB7CisJICAgIHNldCBjb29yZHMgW2xyYW5nZSAkY29vcmRzIDAgZW5kLTJdCisJfQorICAgIH0gZWxzZSB7CisJc2V0IGNvb3JkcyBbbGlzdCBbeGMgJGxlICR4XSBbeWMgJGxlXV0KKyAgICB9CisgICAgaWYgeyRqb2lubG93fSB7CisJc2V0IGl0bCBbbGluZGV4ICRsaW5lcyBbZXhwciB7JGktMX1dIDJdCisJc2V0IGFsIFskY2FudiBpdGVtY2dldCAkaXRsIC1hcnJvd10KKwlzZXQgYXJyb3dsb3cgW2V4cHIgeyRhbCBlcSAibGFzdCIgfHwgJGFsIGVxICJib3RoIn1dCisgICAgfSBlbHNlaWYgeyRhcnJvd2xvd30geworCWlmIHtbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0IFtleHByIHskcm93LTF9XV0gJGlkXSA+PSAwIHx8CisJICAgIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRwYXJlbnRsaXN0IFtleHByIHskcm93LTF9XV0gJGlkXSA+PSAwfSB7CisJICAgIHNldCBhcnJvd2xvdyAwCisJfQorICAgIH0KKyAgICBzZXQgYXJyb3cgW2xpbmRleCB7bm9uZSBmaXJzdCBsYXN0IGJvdGh9IFtleHByIHskYXJyb3doaWdoICsgMiokYXJyb3dsb3d9XV0KKyAgICBmb3Ige3NldCB5ICRsZX0ge1tpbmNyIHkgLTFdID4gJHJvd30ge30geworCXNldCB4ICR4cAorCXNldCB4cCBbbGluZGV4ICRjb2xzIFtleHByIHskeSAtIDEgLSAkcm93fV1dCisJc2V0IG5kaXIgW2V4cHIgeyR4cCAtICR4fV0KKwlpZiB7JGRpciAhPSAkbmRpciB8fCAkeHAgPCAwfSB7CisJICAgIGxhcHBlbmQgY29vcmRzIFt4YyAkeSAkeF0gW3ljICR5XQorCX0KKwlzZXQgZGlyICRuZGlyCisgICAgfQorICAgIGlmIHshJGpvaW5sb3d9IHsKKwlpZiB7JHhwIDwgMH0geworCSAgICAjIGpvaW4gcGFyZW50IGxpbmUgdG8gZmlyc3QgY2hpbGQKKwkgICAgc2V0IGNoIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorCSAgICBzZXQgeGMgW2xzZWFyY2ggLWV4YWN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XSAkY2hdCisJICAgIGlmIHskeGMgPCAwfSB7CisJCXB1dHMgIm9vcHM6IGRyYXdsaW5lc2VnOiBjaGlsZCAkY2ggbm90IG9uIHJvdyAkcm93IgorCSAgICB9IGVsc2VpZiB7JHhjICE9ICR4fSB7CisJCWlmIHsoJGFycm93aGlnaCAmJiAkbGUgPT0gJHJvdyArIDEpIHx8ICRkaXIgPT0gMH0geworCQkgICAgc2V0IGQgW2V4cHIge2ludCgwLjUgKiAkbGluZXNwYyl9XQorCQkgICAgc2V0IHgxIFt4YyAkcm93ICR4XQorCQkgICAgaWYgeyR4YyA8ICR4fSB7CisJCQlzZXQgeDIgW2V4cHIgeyR4MSAtICRkfV0KKwkJICAgIH0gZWxzZSB7CisJCQlzZXQgeDIgW2V4cHIgeyR4MSArICRkfV0KKwkJICAgIH0KKwkJICAgIHNldCB5MiBbeWMgJHJvd10KKwkJICAgIHNldCB5MSBbZXhwciB7JHkyICsgJGR9XQorCQkgICAgbGFwcGVuZCBjb29yZHMgJHgxICR5MSAkeDIgJHkyCisJCX0gZWxzZWlmIHskeGMgPCAkeCAtIDF9IHsKKwkJICAgIGxhcHBlbmQgY29vcmRzIFt4YyAkcm93IFtleHByIHskeC0xfV1dIFt5YyAkcm93XQorCQl9IGVsc2VpZiB7JHhjID4gJHggKyAxfSB7CisJCSAgICBsYXBwZW5kIGNvb3JkcyBbeGMgJHJvdyBbZXhwciB7JHgrMX1dXSBbeWMgJHJvd10KKwkJfQorCQlzZXQgeCAkeGMKKwkgICAgfQorCSAgICBsYXBwZW5kIGNvb3JkcyBbeGMgJHJvdyAkeF0gW3ljICRyb3ddCisJfSBlbHNlIHsKKwkgICAgc2V0IHhuIFt4YyAkcm93ICR4cF0KKwkgICAgc2V0IHluIFt5YyAkcm93XQorCSAgICBsYXBwZW5kIGNvb3JkcyAkeG4gJHluCisJfQorCWlmIHshJGpvaW5oaWdofSB7CisJICAgIGFzc2lnbmNvbG9yICRpZAorCSAgICBzZXQgdCBbJGNhbnYgY3JlYXRlIGxpbmUgJGNvb3JkcyAtd2lkdGggW2xpbmV3aWR0aCAkaWRdIFwKKwkJICAgICAgIC1maWxsICRjb2xvcm1hcCgkaWQpIC10YWdzIGxpbmVzLiRpZCAtYXJyb3cgJGFycm93XQorCSAgICAkY2FudiBsb3dlciAkdAorCSAgICBiaW5kbGluZSAkdCAkaWQKKwkgICAgc2V0IGxpbmVzIFtsaW5zZXJ0ICRsaW5lcyAkaSBbbGlzdCAkcm93ICRsZSAkdF1dCisJfSBlbHNlIHsKKwkgICAgJGNhbnYgY29vcmRzICRpdGggJGNvb3JkcworCSAgICBpZiB7JGFycm93IG5lICRhaH0geworCQkkY2FudiBpdGVtY29uZiAkaXRoIC1hcnJvdyAkYXJyb3cKKwkgICAgfQorCSAgICBsc2V0IGxpbmVzICRpIDAgJHJvdworCX0KKyAgICB9IGVsc2UgeworCXNldCB4byBbbHNlYXJjaCAtZXhhY3QgW2xpbmRleCAkcm93aWRsaXN0IFtleHByIHskcm93IC0gMX1dXSAkaWRdCisJc2V0IG5kaXIgW2V4cHIgeyR4byAtICR4cH1dCisJc2V0IGNsb3cgWyRjYW52IGNvb3JkcyAkaXRsXQorCWlmIHskZGlyID09ICRuZGlyfSB7CisJICAgIHNldCBjbG93IFtscmFuZ2UgJGNsb3cgMiBlbmRdCisJfQorCXNldCBjb29yZHMgW2NvbmNhdCAkY29vcmRzICRjbG93XQorCWlmIHshJGpvaW5oaWdofSB7CisJICAgIGxzZXQgbGluZXMgW2V4cHIgeyRpLTF9XSAxICRsZQorCX0gZWxzZSB7CisJICAgICMgY29hbGVzY2UgdHdvIHBpZWNlcworCSAgICAkY2FudiBkZWxldGUgJGl0aAorCSAgICBzZXQgYiBbbGluZGV4ICRsaW5lcyBbZXhwciB7JGktMX1dIDBdCisJICAgIHNldCBlIFtsaW5kZXggJGxpbmVzICRpIDFdCisJICAgIHNldCBsaW5lcyBbbHJlcGxhY2UgJGxpbmVzIFtleHByIHskaS0xfV0gJGkgW2xpc3QgJGIgJGUgJGl0bF1dCisJfQorCSRjYW52IGNvb3JkcyAkaXRsICRjb29yZHMKKwlpZiB7JGFycm93IG5lICRhbH0geworCSAgICAkY2FudiBpdGVtY29uZiAkaXRsIC1hcnJvdyAkYXJyb3cKKwl9CisgICAgfQorCisgICAgc2V0IGxpbmVzZWdzKCRpZCkgJGxpbmVzCisgICAgcmV0dXJuICRsZQorfQorCitwcm9jIGRyYXdwYXJlbnRsaW5rcyB7aWQgcm93fSB7CisgICAgZ2xvYmFsIHJvd2lkbGlzdCBjYW52IGNvbG9ybWFwIGN1cnZpZXcgcGFyZW50bGlzdAorICAgIGdsb2JhbCBpZHBvcyBsaW5lc3BjCisKKyAgICBzZXQgcm93aWRzIFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XQorICAgIHNldCBjb2wgW2xzZWFyY2ggLWV4YWN0ICRyb3dpZHMgJGlkXQorICAgIGlmIHskY29sIDwgMH0gcmV0dXJuCisgICAgc2V0IG9sZHMgW2xpbmRleCAkcGFyZW50bGlzdCAkcm93XQorICAgIHNldCByb3cyIFtleHByIHskcm93ICsgMX1dCisgICAgc2V0IHggW3hjICRyb3cgJGNvbF0KKyAgICBzZXQgeSBbeWMgJHJvd10KKyAgICBzZXQgeTIgW3ljICRyb3cyXQorICAgIHNldCBkIFtleHByIHtpbnQoMC41ICogJGxpbmVzcGMpfV0KKyAgICBzZXQgeW1pZCBbZXhwciB7JHkgKyAkZH1dCisgICAgc2V0IGlkcyBbbGluZGV4ICRyb3dpZGxpc3QgJHJvdzJdCisgICAgIyBybXggPSByaWdodC1tb3N0IFggY29vcmQgdXNlZAorICAgIHNldCBybXggMAorICAgIGZvcmVhY2ggcCAkb2xkcyB7CisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRpZHMgJHBdCisJaWYgeyRpIDwgMH0geworCSAgICBwdXRzICJvb3BzLCBwYXJlbnQgJHAgb2YgJGlkIG5vdCBpbiBsaXN0IgorCSAgICBjb250aW51ZQorCX0KKwlzZXQgeDIgW3hjICRyb3cyICRpXQorCWlmIHskeDIgPiAkcm14fSB7CisJICAgIHNldCBybXggJHgyCisJfQorCXNldCBqIFtsc2VhcmNoIC1leGFjdCAkcm93aWRzICRwXQorCWlmIHskaiA8IDB9IHsKKwkgICAgIyBkcmF3bGluZXNlZyB3aWxsIGRvIHRoaXMgb25lIGZvciB1cworCSAgICBjb250aW51ZQorCX0KKwlhc3NpZ25jb2xvciAkcAorCSMgc2hvdWxkIGhhbmRsZSBkdXBsaWNhdGVkIHBhcmVudHMgaGVyZS4uLgorCXNldCBjb29yZHMgW2xpc3QgJHggJHldCisJaWYgeyRpICE9ICRjb2x9IHsKKwkgICAgIyBpZiBhdHRhY2hpbmcgdG8gYSB2ZXJ0aWNhbCBzZWdtZW50LCBkcmF3IGEgc21hbGxlcgorCSAgICAjIHNsYW50IGZvciB2aXN1YWwgZGlzdGluY3RuZXNzCisJICAgIGlmIHskaSA9PSAkan0geworCQlpZiB7JGkgPCAkY29sfSB7CisJCSAgICBsYXBwZW5kIGNvb3JkcyBbZXhwciB7JHgyICsgJGR9XSAkeSAkeDIgJHltaWQKKwkJfSBlbHNlIHsKKwkJICAgIGxhcHBlbmQgY29vcmRzIFtleHByIHskeDIgLSAkZH1dICR5ICR4MiAkeW1pZAorCQl9CisJICAgIH0gZWxzZWlmIHskaSA8ICRjb2wgJiYgJGkgPCAkan0geworCQkjIHNlZ21lbnQgc2xhbnRzIHRvd2FyZHMgdXMgYWxyZWFkeQorCQlsYXBwZW5kIGNvb3JkcyBbeGMgJHJvdyAkal0gJHkKKwkgICAgfSBlbHNlIHsKKwkJaWYgeyRpIDwgJGNvbCAtIDF9IHsKKwkJICAgIGxhcHBlbmQgY29vcmRzIFtleHByIHskeDIgKyAkbGluZXNwY31dICR5CisJCX0gZWxzZWlmIHskaSA+ICRjb2wgKyAxfSB7CisJCSAgICBsYXBwZW5kIGNvb3JkcyBbZXhwciB7JHgyIC0gJGxpbmVzcGN9XSAkeQorCQl9CisJCWxhcHBlbmQgY29vcmRzICR4MiAkeTIKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGxhcHBlbmQgY29vcmRzICR4MiAkeTIKKwl9CisJc2V0IHQgWyRjYW52IGNyZWF0ZSBsaW5lICRjb29yZHMgLXdpZHRoIFtsaW5ld2lkdGggJHBdIFwKKwkJICAgLWZpbGwgJGNvbG9ybWFwKCRwKSAtdGFncyBsaW5lcy4kcF0KKwkkY2FudiBsb3dlciAkdAorCWJpbmRsaW5lICR0ICRwCisgICAgfQorICAgIGlmIHskcm14ID4gW2xpbmRleCAkaWRwb3MoJGlkKSAxXX0geworCWxzZXQgaWRwb3MoJGlkKSAxICRybXgKKwlyZWRyYXd0YWdzICRpZAorICAgIH0KK30KKworcHJvYyBkcmF3bGluZXMge2lkfSB7CisgICAgZ2xvYmFsIGNhbnYKKworICAgICRjYW52IGl0ZW1jb25mIGxpbmVzLiRpZCAtd2lkdGggW2xpbmV3aWR0aCAkaWRdCit9CisKK3Byb2MgZHJhd2NtaXR0ZXh0IHtpZCByb3cgY29sfSB7CisgICAgZ2xvYmFsIGxpbmVzcGMgY2FudiBjYW52MiBjYW52MyBmZ2NvbG9yIGN1cnZpZXcKKyAgICBnbG9iYWwgY21pdGxpc3RlZCBjb21taXRpbmZvIHJvd2lkbGlzdCBwYXJlbnRsaXN0CisgICAgZ2xvYmFsIHJvd3RleHR4IGlkcG9zIGlkdGFncyBpZGhlYWRzIGlkb3RoZXJyZWZzCisgICAgZ2xvYmFsIGxpbmVodGFnIGxpbmVudGFnIGxpbmVkdGFnIHNlbGVjdGVkbGluZQorICAgIGdsb2JhbCBjYW52eG1heCBib2xkaWRzIGJvbGRuYW1laWRzIGZnY29sb3IgbWFya2VkaWQKKyAgICBnbG9iYWwgbWFpbmhlYWRpZCBudWxsaWQgbnVsbGlkMiBjaXJjbGVpdGVtIGNpcmNsZWNvbG9ycyBjdHhidXQKKyAgICBnbG9iYWwgbWFpbmhlYWRjaXJjbGVjb2xvciB3b3JraW5nZmlsZXNjaXJjbGVjb2xvciBpbmRleGNpcmNsZWNvbG9yCisgICAgZ2xvYmFsIGNpcmNsZW91dGxpbmVjb2xvcgorCisgICAgIyBsaXN0ZWQgaXMgMCBmb3IgYm91bmRhcnksIDEgZm9yIG5vcm1hbCwgMiBmb3IgbmVnYXRpdmUsIDMgZm9yIGxlZnQsIDQgZm9yIHJpZ2h0CisgICAgc2V0IGxpc3RlZCAkY21pdGxpc3RlZCgkY3VydmlldywkaWQpCisgICAgaWYgeyRpZCBlcSAkbnVsbGlkfSB7CisJc2V0IG9maWxsICR3b3JraW5nZmlsZXNjaXJjbGVjb2xvcgorICAgIH0gZWxzZWlmIHskaWQgZXEgJG51bGxpZDJ9IHsKKwlzZXQgb2ZpbGwgJGluZGV4Y2lyY2xlY29sb3IKKyAgICB9IGVsc2VpZiB7JGlkIGVxICRtYWluaGVhZGlkfSB7CisJc2V0IG9maWxsICRtYWluaGVhZGNpcmNsZWNvbG9yCisgICAgfSBlbHNlIHsKKwlzZXQgb2ZpbGwgW2xpbmRleCAkY2lyY2xlY29sb3JzICRsaXN0ZWRdCisgICAgfQorICAgIHNldCB4IFt4YyAkcm93ICRjb2xdCisgICAgc2V0IHkgW3ljICRyb3ddCisgICAgc2V0IG9yYWQgW2V4cHIgeyRsaW5lc3BjIC8gM31dCisgICAgaWYgeyRsaXN0ZWQgPD0gMn0geworCXNldCB0IFskY2FudiBjcmVhdGUgb3ZhbCBbZXhwciB7JHggLSAkb3JhZH1dIFtleHByIHskeSAtICRvcmFkfV0gXAorCQkgICBbZXhwciB7JHggKyAkb3JhZCAtIDF9XSBbZXhwciB7JHkgKyAkb3JhZCAtIDF9XSBcCisJCSAgIC1maWxsICRvZmlsbCAtb3V0bGluZSAkY2lyY2xlb3V0bGluZWNvbG9yIC13aWR0aCAxIC10YWdzIGNpcmNsZV0KKyAgICB9IGVsc2VpZiB7JGxpc3RlZCA9PSAzfSB7CisJIyB0cmlhbmdsZSBwb2ludGluZyBsZWZ0IGZvciBsZWZ0LXNpZGUgY29tbWl0cworCXNldCB0IFskY2FudiBjcmVhdGUgcG9seWdvbiBcCisJCSAgIFtleHByIHskeCAtICRvcmFkfV0gJHkgXAorCQkgICBbZXhwciB7JHggKyAkb3JhZCAtIDF9XSBbZXhwciB7JHkgLSAkb3JhZH1dIFwKKwkJICAgW2V4cHIgeyR4ICsgJG9yYWQgLSAxfV0gW2V4cHIgeyR5ICsgJG9yYWQgLSAxfV0gXAorCQkgICAtZmlsbCAkb2ZpbGwgLW91dGxpbmUgJGNpcmNsZW91dGxpbmVjb2xvciAtd2lkdGggMSAtdGFncyBjaXJjbGVdCisgICAgfSBlbHNlIHsKKwkjIHRyaWFuZ2xlIHBvaW50aW5nIHJpZ2h0IGZvciByaWdodC1zaWRlIGNvbW1pdHMKKwlzZXQgdCBbJGNhbnYgY3JlYXRlIHBvbHlnb24gXAorCQkgICBbZXhwciB7JHggKyAkb3JhZCAtIDF9XSAkeSBcCisJCSAgIFtleHByIHskeCAtICRvcmFkfV0gW2V4cHIgeyR5IC0gJG9yYWR9XSBcCisJCSAgIFtleHByIHskeCAtICRvcmFkfV0gW2V4cHIgeyR5ICsgJG9yYWQgLSAxfV0gXAorCQkgICAtZmlsbCAkb2ZpbGwgLW91dGxpbmUgJGNpcmNsZW91dGxpbmVjb2xvciAtd2lkdGggMSAtdGFncyBjaXJjbGVdCisgICAgfQorICAgIHNldCBjaXJjbGVpdGVtKCRyb3cpICR0CisgICAgJGNhbnYgcmFpc2UgJHQKKyAgICAkY2FudiBiaW5kICR0IDwxPiB7c2VsY2FudmxpbmUge30gJXggJXl9CisgICAgc2V0IHJteCBbbGxlbmd0aCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd11dCisgICAgc2V0IG9sZHMgW2xpbmRleCAkcGFyZW50bGlzdCAkcm93XQorICAgIGlmIHskb2xkcyBuZSB7fX0geworCXNldCBuZXh0aWRzIFtsaW5kZXggJHJvd2lkbGlzdCBbZXhwciB7JHJvdyArIDF9XV0KKwlmb3JlYWNoIHAgJG9sZHMgeworCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJG5leHRpZHMgJHBdCisJICAgIGlmIHskaSA+ICRybXh9IHsKKwkJc2V0IHJteCAkaQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgeHQgW3hjICRyb3cgJHJteF0KKyAgICBzZXQgcm93dGV4dHgoJHJvdykgJHh0CisgICAgc2V0IGlkcG9zKCRpZCkgW2xpc3QgJHggJHh0ICR5XQorICAgIGlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldIHx8IFtpbmZvIGV4aXN0cyBpZGhlYWRzKCRpZCldCisJfHwgW2luZm8gZXhpc3RzIGlkb3RoZXJyZWZzKCRpZCldfSB7CisJc2V0IHh0IFtkcmF3dGFncyAkaWQgJHggJHh0ICR5XQorICAgIH0KKyAgICBpZiB7W2xpbmRleCAkY29tbWl0aW5mbygkaWQpIDZdID4gMH0geworCXNldCB4dCBbZHJhd25vdGVzaWduICR4dCAkeV0KKyAgICB9CisgICAgc2V0IGhlYWRsaW5lIFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSAwXQorICAgIHNldCBuYW1lIFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSAxXQorICAgIHNldCBkYXRlIFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSAyXQorICAgIHNldCBkYXRlIFtmb3JtYXRkYXRlICRkYXRlXQorICAgIHNldCBmb250IG1haW5mb250CisgICAgc2V0IG5mb250IG1haW5mb250CisgICAgc2V0IGlzYm9sZCBbaXNoaWdobGlnaHRlZCAkaWRdCisgICAgaWYgeyRpc2JvbGQgPiAwfSB7CisJbGFwcGVuZCBib2xkaWRzICRpZAorCXNldCBmb250IG1haW5mb250Ym9sZAorCWlmIHskaXNib2xkID4gMX0geworCSAgICBsYXBwZW5kIGJvbGRuYW1laWRzICRpZAorCSAgICBzZXQgbmZvbnQgbWFpbmZvbnRib2xkCisJfQorICAgIH0KKyAgICBzZXQgbGluZWh0YWcoJGlkKSBbJGNhbnYgY3JlYXRlIHRleHQgJHh0ICR5IC1hbmNob3IgdyAtZmlsbCAkZmdjb2xvciBcCisJCQkgICAtdGV4dCAkaGVhZGxpbmUgLWZvbnQgJGZvbnQgLXRhZ3MgdGV4dF0KKyAgICAkY2FudiBiaW5kICRsaW5laHRhZygkaWQpICRjdHhidXQgInJvd21lbnUgJVggJVkgJGlkIgorICAgIHNldCBsaW5lbnRhZygkaWQpIFskY2FudjIgY3JlYXRlIHRleHQgMyAkeSAtYW5jaG9yIHcgLWZpbGwgJGZnY29sb3IgXAorCQkJICAgLXRleHQgJG5hbWUgLWZvbnQgJG5mb250IC10YWdzIHRleHRdCisgICAgc2V0IGxpbmVkdGFnKCRpZCkgWyRjYW52MyBjcmVhdGUgdGV4dCAzICR5IC1hbmNob3IgdyAtZmlsbCAkZmdjb2xvciBcCisJCQkgICAtdGV4dCAkZGF0ZSAtZm9udCBtYWluZm9udCAtdGFncyB0ZXh0XQorICAgIGlmIHskc2VsZWN0ZWRsaW5lID09ICRyb3d9IHsKKwltYWtlX3NlY3NlbCAkaWQKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF0gJiYgJG1hcmtlZGlkIGVxICRpZH0geworCW1ha2VfaWRtYXJrICRpZAorICAgIH0KKyAgICBzZXQgeHIgW2V4cHIgeyR4dCArIFtmb250IG1lYXN1cmUgJGZvbnQgJGhlYWRsaW5lXX1dCisgICAgaWYgeyR4ciA+ICRjYW52eG1heH0geworCXNldCBjYW52eG1heCAkeHIKKwlzZXRjYW52c2Nyb2xsCisgICAgfQorfQorCitwcm9jIGRyYXdjbWl0cm93IHtyb3d9IHsKKyAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHJvd2lkbGlzdCBucm93c19kcmF3bgorICAgIGdsb2JhbCBpZGRyYXduIG1hcmtpbmdtYXRjaGVzCisgICAgZ2xvYmFsIGNvbW1pdGluZm8gbnVtY29tbWl0cworICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZoaWdobGlnaHRzIGZpbmRwYXR0ZXJuIG5oaWdobGlnaHRzCisgICAgZ2xvYmFsIGhsdmlldyB2aGlnaGxpZ2h0cworICAgIGdsb2JhbCBoaWdobGlnaHRfcmVsYXRlZCByaGlnaGxpZ2h0cworCisgICAgaWYgeyRyb3cgPj0gJG51bWNvbW1pdHN9IHJldHVybgorCisgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAhW2luZm8gZXhpc3RzIHZoaWdobGlnaHRzKCRpZCldfSB7CisJYXNrdmhpZ2hsaWdodCAkcm93ICRpZAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGZpbGVoaWdobGlnaHRdICYmICFbaW5mbyBleGlzdHMgZmhpZ2hsaWdodHMoJGlkKV19IHsKKwlhc2tmaWxlaGlnaGxpZ2h0ICRyb3cgJGlkCisgICAgfQorICAgIGlmIHskZmluZHBhdHRlcm4gbmUge30gJiYgIVtpbmZvIGV4aXN0cyBuaGlnaGxpZ2h0cygkaWQpXX0geworCWFza2ZpbmRoaWdobGlnaHQgJHJvdyAkaWQKKyAgICB9CisgICAgaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBuZSBbbWMgIk5vbmUiXSAmJiAhW2luZm8gZXhpc3RzIHJoaWdobGlnaHRzKCRpZCldfSB7CisJYXNrcmVsaGlnaGxpZ2h0ICRyb3cgJGlkCisgICAgfQorICAgIGlmIHshW2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV19IHsKKwlzZXQgY29sIFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10gJGlkXQorCWlmIHskY29sIDwgMH0geworCSAgICBwdXRzICJvb3BzLCByb3cgJHJvdyBpZCAkaWQgbm90IGluIGxpc3QiCisJICAgIHJldHVybgorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJICAgIGdldGNvbW1pdCAkaWQKKwl9CisJYXNzaWduY29sb3IgJGlkCisJZHJhd2NtaXR0ZXh0ICRpZCAkcm93ICRjb2wKKwlzZXQgaWRkcmF3bigkaWQpIDEKKwlpbmNyIG5yb3dzX2RyYXduCisgICAgfQorICAgIGlmIHskbWFya2luZ21hdGNoZXN9IHsKKwltYXJrcm93bWF0Y2hlcyAkcm93ICRpZAorICAgIH0KK30KKworcHJvYyBkcmF3Y29tbWl0cyB7cm93IHtlbmRyb3cge319fSB7CisgICAgZ2xvYmFsIG51bWNvbW1pdHMgaWRkcmF3biBkaXNwbGF5b3JkZXIgY3VydmlldyBuZWVkX3JlZGlzcGxheQorICAgIGdsb2JhbCBwYXJlbnRsaXN0IHJvd2lkbGlzdCByb3dmaW5hbCB1cGFycm93bGVuIGRvd25hcnJvd2xlbiBucm93c19kcmF3bgorCisgICAgaWYgeyRyb3cgPCAwfSB7CisJc2V0IHJvdyAwCisgICAgfQorICAgIGlmIHskZW5kcm93IGVxIHt9fSB7CisJc2V0IGVuZHJvdyAkcm93CisgICAgfQorICAgIGlmIHskZW5kcm93ID49ICRudW1jb21taXRzfSB7CisJc2V0IGVuZHJvdyBbZXhwciB7JG51bWNvbW1pdHMgLSAxfV0KKyAgICB9CisKKyAgICBzZXQgcmwxIFtleHByIHskcm93IC0gJGRvd25hcnJvd2xlbiAtIDN9XQorICAgIGlmIHskcmwxIDwgMH0geworCXNldCBybDEgMAorICAgIH0KKyAgICBzZXQgcm8xIFtleHByIHskcm93IC0gM31dCisgICAgaWYgeyRybzEgPCAwfSB7CisJc2V0IHJvMSAwCisgICAgfQorICAgIHNldCByMiBbZXhwciB7JGVuZHJvdyArICR1cGFycm93bGVuICsgM31dCisgICAgaWYgeyRyMiA+ICRudW1jb21taXRzfSB7CisJc2V0IHIyICRudW1jb21taXRzCisgICAgfQorICAgIGZvciB7c2V0IHIgJHJsMX0geyRyIDwgJHIyfSB7aW5jciByfSB7CisJaWYge1tsaW5kZXggJHJvd2lkbGlzdCAkcl0gbmUge30gJiYgW2xpbmRleCAkcm93ZmluYWwgJHJdfSB7CisJICAgIGlmIHskcmwxIDwgJHJ9IHsKKwkJbGF5b3V0cm93cyAkcmwxICRyCisJICAgIH0KKwkgICAgc2V0IHJsMSBbZXhwciB7JHIgKyAxfV0KKwl9CisgICAgfQorICAgIGlmIHskcmwxIDwgJHJ9IHsKKwlsYXlvdXRyb3dzICRybDEgJHIKKyAgICB9CisgICAgb3B0aW1pemVfcm93cyAkcm8xIDAgJHIyCisgICAgaWYgeyRuZWVkX3JlZGlzcGxheSB8fCAkbnJvd3NfZHJhd24gPiAyMDAwfSB7CisJY2xlYXJfZGlzcGxheQorICAgIH0KKworICAgICMgbWFrZSB0aGUgbGluZXMgam9pbiB0byBhbHJlYWR5LWRyYXduIHJvd3MgZWl0aGVyIHNpZGUKKyAgICBzZXQgciBbZXhwciB7JHJvdyAtIDF9XQorICAgIGlmIHskciA8IDAgfHwgIVtpbmZvIGV4aXN0cyBpZGRyYXduKFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcl0pXX0geworCXNldCByICRyb3cKKyAgICB9CisgICAgc2V0IGVyIFtleHByIHskZW5kcm93ICsgMX1dCisgICAgaWYgeyRlciA+PSAkbnVtY29tbWl0cyB8fAorCSFbaW5mbyBleGlzdHMgaWRkcmF3bihbbGluZGV4ICRkaXNwbGF5b3JkZXIgJGVyXSldfSB7CisJc2V0IGVyICRlbmRyb3cKKyAgICB9CisgICAgZm9yIHt9IHskciA8PSAkZXJ9IHtpbmNyIHJ9IHsKKwlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXQorCXNldCB3YXNkcmF3biBbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXQorCWRyYXdjbWl0cm93ICRyCisJaWYgeyRyID09ICRlcn0gYnJlYWsKKwlzZXQgbmV4dGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciBbZXhwciB7JHIgKyAxfV1dCisJaWYgeyR3YXNkcmF3biAmJiBbaW5mbyBleGlzdHMgaWRkcmF3bigkbmV4dGlkKV19IGNvbnRpbnVlCisJZHJhd3BhcmVudGxpbmtzICRpZCAkcgorCisJc2V0IHJvd2lkcyBbbGluZGV4ICRyb3dpZGxpc3QgJHJdCisJZm9yZWFjaCBsaWQgJHJvd2lkcyB7CisJICAgIGlmIHskbGlkIGVxIHt9fSBjb250aW51ZQorCSAgICBpZiB7W2luZm8gZXhpc3RzIGxpbmVlbmQoJGxpZCldICYmICRsaW5lZW5kKCRsaWQpID4gJHJ9IGNvbnRpbnVlCisJICAgIGlmIHskbGlkIGVxICRpZH0geworCQkjIHNlZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBhbnkgb2YgaXRzIHBhcmVudHMKKwkJZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJdIHsKKwkJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJHJvd2lkcyAkcF0gPCAwfSB7CisJCQkjIG1ha2UgdGhpcyBsaW5lIGV4dGVuZCB1cCB0byB0aGUgY2hpbGQKKwkJCXNldCBsaW5lZW5kKCRwKSBbZHJhd2xpbmVzZWcgJHAgJHIgJGVyIDBdCisJCSAgICB9CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGxpbmVlbmQoJGxpZCkgW2RyYXdsaW5lc2VnICRsaWQgJHIgJGVyIDFdCisJICAgIH0KKwl9CisgICAgfQorfQorCitwcm9jIHVuZG9sYXlvdXQge3Jvd30geworICAgIGdsb2JhbCB1cGFycm93bGVuIG1pbmdhcGxlbiBkb3duYXJyb3dsZW4KKyAgICBnbG9iYWwgcm93aWRsaXN0IHJvd2lzb3B0IHJvd2ZpbmFsIG5lZWRfcmVkaXNwbGF5CisKKyAgICBzZXQgciBbZXhwciB7JHJvdyAtICgkdXBhcnJvd2xlbiArICRtaW5nYXBsZW4gKyAkZG93bmFycm93bGVuKX1dCisgICAgaWYgeyRyIDwgMH0geworCXNldCByIDAKKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRyb3dpZGxpc3RdID4gJHJ9IHsKKwlpbmNyIHIgLTEKKwlzZXQgcm93aWRsaXN0IFtscmFuZ2UgJHJvd2lkbGlzdCAwICRyXQorCXNldCByb3dmaW5hbCBbbHJhbmdlICRyb3dmaW5hbCAwICRyXQorCXNldCByb3dpc29wdCBbbHJhbmdlICRyb3dpc29wdCAwICRyXQorCXNldCBuZWVkX3JlZGlzcGxheSAxCisJcnVuIGRyYXd2aXNpYmxlCisgICAgfQorfQorCitwcm9jIGRyYXd2aXNpYmxlIHt9IHsKKyAgICBnbG9iYWwgY2FudiBsaW5lc3BjIGN1cnZpZXcgdnJvd21vZCBzZWxlY3RlZGxpbmUgdGFyZ2V0cm93IHRhcmdldGlkCisgICAgZ2xvYmFsIG5lZWRfcmVkaXNwbGF5IGNzY3JvbGwgbnVtY29tbWl0cworCisgICAgc2V0IGZzIFskY2FudiB5dmlld10KKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgaWYgeyR5bWF4IGVxIHt9IHx8ICR5bWF4ID09IDAgfHwgJG51bWNvbW1pdHMgPT0gMH0gcmV0dXJuCisgICAgc2V0IGYwIFtsaW5kZXggJGZzIDBdCisgICAgc2V0IGYxIFtsaW5kZXggJGZzIDFdCisgICAgc2V0IHkwIFtleHByIHtpbnQoJGYwICogJHltYXgpfV0KKyAgICBzZXQgeTEgW2V4cHIge2ludCgkZjEgKiAkeW1heCl9XQorCisgICAgaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF19IHsKKwlpZiB7W2NvbW1pdGludmlldyAkdGFyZ2V0aWQgJGN1cnZpZXddfSB7CisJICAgIHNldCByIFtyb3dvZmNvbW1pdCAkdGFyZ2V0aWRdCisJICAgIGlmIHskciAhPSAkdGFyZ2V0cm93fSB7CisJCSMgRml4IHVwIHRoZSBzY3JvbGxyZWdpb24gYW5kIGNoYW5nZSB0aGUgc2Nyb2xsaW5nIHBvc2l0aW9uCisJCSMgbm93IHRoYXQgb3VyIHRhcmdldCByb3cgaGFzIG1vdmVkLgorCQlzZXQgZGlmZiBbZXhwciB7KCRyIC0gJHRhcmdldHJvdykgKiAkbGluZXNwY31dCisJCXNldCB0YXJnZXRyb3cgJHIKKwkJc2V0Y2FudnNjcm9sbAorCQlzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisJCWluY3IgeTAgJGRpZmYKKwkJaW5jciB5MSAkZGlmZgorCQlzZXQgZjAgW2V4cHIgeyR5MCAvICR5bWF4fV0KKwkJc2V0IGYxIFtleHByIHskeTEgLyAkeW1heH1dCisJCWFsbGNhbnZzIHl2aWV3IG1vdmV0byAkZjAKKwkJJGNzY3JvbGwgc2V0ICRmMCAkZjEKKwkJc2V0IG5lZWRfcmVkaXNwbGF5IDEKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHVuc2V0IHRhcmdldGlkCisJfQorICAgIH0KKworICAgIHNldCByb3cgW2V4cHIge2ludCgoJHkwIC0gMykgLyAkbGluZXNwYykgLSAxfV0KKyAgICBzZXQgZW5kcm93IFtleHByIHtpbnQoKCR5MSAtIDMpIC8gJGxpbmVzcGMpICsgMX1dCisgICAgaWYgeyRlbmRyb3cgPj0gJHZyb3dtb2QoJGN1cnZpZXcpfSB7CisJdXBkYXRlX2FyY3Jvd3MgJGN1cnZpZXcKKyAgICB9CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge30gJiYKKwkkcm93IDw9ICRzZWxlY3RlZGxpbmUgJiYgJHNlbGVjdGVkbGluZSA8PSAkZW5kcm93fSB7CisJc2V0IHRhcmdldHJvdyAkc2VsZWN0ZWRsaW5lCisgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF19IHsKKwlzZXQgdGFyZ2V0cm93IFtleHByIHtpbnQoKCRyb3cgKyAkZW5kcm93KSAvIDIpfV0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRyb3ddfSB7CisJaWYgeyR0YXJnZXRyb3cgPj0gJG51bWNvbW1pdHN9IHsKKwkgICAgc2V0IHRhcmdldHJvdyBbZXhwciB7JG51bWNvbW1pdHMgLSAxfV0KKwl9CisJc2V0IHRhcmdldGlkIFtjb21taXRvbnJvdyAkdGFyZ2V0cm93XQorICAgIH0KKyAgICBkcmF3Y29tbWl0cyAkcm93ICRlbmRyb3cKK30KKworcHJvYyBjbGVhcl9kaXNwbGF5IHt9IHsKKyAgICBnbG9iYWwgaWRkcmF3biBsaW5lc2VncyBuZWVkX3JlZGlzcGxheSBucm93c19kcmF3bgorICAgIGdsb2JhbCB2aGlnaGxpZ2h0cyBmaGlnaGxpZ2h0cyBuaGlnaGxpZ2h0cyByaGlnaGxpZ2h0cworICAgIGdsb2JhbCBsaW5laHRhZyBsaW5lbnRhZyBsaW5lZHRhZyBib2xkaWRzIGJvbGRuYW1laWRzCisKKyAgICBhbGxjYW52cyBkZWxldGUgYWxsCisgICAgdW5zZXQgLW5vY29tcGxhaW4gaWRkcmF3bgorICAgIHVuc2V0IC1ub2NvbXBsYWluIGxpbmVzZWdzCisgICAgdW5zZXQgLW5vY29tcGxhaW4gbGluZWh0YWcKKyAgICB1bnNldCAtbm9jb21wbGFpbiBsaW5lbnRhZworICAgIHVuc2V0IC1ub2NvbXBsYWluIGxpbmVkdGFnCisgICAgc2V0IGJvbGRpZHMge30KKyAgICBzZXQgYm9sZG5hbWVpZHMge30KKyAgICB1bnNldCAtbm9jb21wbGFpbiB2aGlnaGxpZ2h0cworICAgIHVuc2V0IC1ub2NvbXBsYWluIGZoaWdobGlnaHRzCisgICAgdW5zZXQgLW5vY29tcGxhaW4gbmhpZ2hsaWdodHMKKyAgICB1bnNldCAtbm9jb21wbGFpbiByaGlnaGxpZ2h0cworICAgIHNldCBuZWVkX3JlZGlzcGxheSAwCisgICAgc2V0IG5yb3dzX2RyYXduIDAKK30KKworcHJvYyBmaW5kY3Jvc3NpbmdzIHtpZH0geworICAgIGdsb2JhbCByb3dpZGxpc3QgcGFyZW50bGlzdCBudW1jb21taXRzIGRpc3BsYXlvcmRlcgorCisgICAgc2V0IGNyb3NzIHt9CisgICAgc2V0IGNjcm9zcyB7fQorICAgIGZvcmVhY2gge3MgZX0gW3Jvd3JhbmdlcyAkaWRdIHsKKwlpZiB7JGUgPj0gJG51bWNvbW1pdHN9IHsKKwkgICAgc2V0IGUgW2V4cHIgeyRudW1jb21taXRzIC0gMX1dCisJfQorCWlmIHskZSA8PSAkc30gY29udGludWUKKwlmb3Ige3NldCByb3cgJGV9IHtbaW5jciByb3cgLTFdID49ICRzfSB7fSB7CisJICAgIHNldCB4IFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10gJGlkXQorCSAgICBpZiB7JHggPCAwfSBicmVhaworCSAgICBzZXQgb2xkcyBbbGluZGV4ICRwYXJlbnRsaXN0ICRyb3ddCisJICAgIHNldCBraWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisJICAgIHNldCBraWR4IFtsc2VhcmNoIC1leGFjdCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd10gJGtpZF0KKwkgICAgaWYgeyRraWR4IDwgMH0gY29udGludWUKKwkgICAgc2V0IG5leHRyb3cgW2xpbmRleCAkcm93aWRsaXN0IFtleHByIHskcm93ICsgMX1dXQorCSAgICBmb3JlYWNoIHAgJG9sZHMgeworCQlzZXQgcHggW2xzZWFyY2ggLWV4YWN0ICRuZXh0cm93ICRwXQorCQlpZiB7JHB4IDwgMH0gY29udGludWUKKwkJaWYgeygka2lkeCA8ICR4ICYmICR4IDwgJHB4KSB8fCAoJHB4IDwgJHggJiYgJHggPCAka2lkeCl9IHsKKwkJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGNjcm9zcyAkcF0gPj0gMH0gY29udGludWUKKwkJICAgIGlmIHskeCA9PSAkcHggKyAoJGtpZHggPCAkcHg/IC0xOiAxKX0geworCQkJbGFwcGVuZCBjY3Jvc3MgJHAKKwkJICAgIH0gZWxzZWlmIHtbbHNlYXJjaCAtZXhhY3QgJGNyb3NzICRwXSA8IDB9IHsKKwkJCWxhcHBlbmQgY3Jvc3MgJHAKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gW2NvbmNhdCAkY2Nyb3NzIHt7fX0gJGNyb3NzXQorfQorCitwcm9jIGFzc2lnbmNvbG9yIHtpZH0geworICAgIGdsb2JhbCBjb2xvcm1hcCBjb2xvcnMgbmV4dGNvbG9yCisgICAgZ2xvYmFsIHBhcmVudHMgY2hpbGRyZW4gY2hpbGRyZW4gY3VydmlldworCisgICAgaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkaWQpXX0gcmV0dXJuCisgICAgc2V0IG5jb2xvcnMgW2xsZW5ndGggJGNvbG9yc10KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCldfSB7CisJc2V0IGtpZHMgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkKKyAgICB9IGVsc2UgeworCXNldCBraWRzIHt9CisgICAgfQorICAgIGlmIHtbbGxlbmd0aCAka2lkc10gPT0gMX0geworCXNldCBjaGlsZCBbbGluZGV4ICRraWRzIDBdCisJaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkY2hpbGQpXQorCSAgICAmJiBbbGxlbmd0aCAkcGFyZW50cygkY3VydmlldywkY2hpbGQpXSA9PSAxfSB7CisJICAgIHNldCBjb2xvcm1hcCgkaWQpICRjb2xvcm1hcCgkY2hpbGQpCisJICAgIHJldHVybgorCX0KKyAgICB9CisgICAgc2V0IGJhZGNvbG9ycyB7fQorICAgIHNldCBvcmlnYmFkIHt9CisgICAgZm9yZWFjaCB4IFtmaW5kY3Jvc3NpbmdzICRpZF0geworCWlmIHskeCBlcSB7fX0geworCSAgICAjIGRlbGltaXRlciBiZXR3ZWVuIGNvcm5lciBjcm9zc2luZ3MgYW5kIG90aGVyIGNyb3NzaW5ncworCSAgICBpZiB7W2xsZW5ndGggJGJhZGNvbG9yc10gPj0gJG5jb2xvcnMgLSAxfSBicmVhaworCSAgICBzZXQgb3JpZ2JhZCAkYmFkY29sb3JzCisJfQorCWlmIHtbaW5mbyBleGlzdHMgY29sb3JtYXAoJHgpXQorCSAgICAmJiBbbHNlYXJjaCAtZXhhY3QgJGJhZGNvbG9ycyAkY29sb3JtYXAoJHgpXSA8IDB9IHsKKwkgICAgbGFwcGVuZCBiYWRjb2xvcnMgJGNvbG9ybWFwKCR4KQorCX0KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRiYWRjb2xvcnNdID49ICRuY29sb3JzfSB7CisJc2V0IGJhZGNvbG9ycyAkb3JpZ2JhZAorICAgIH0KKyAgICBzZXQgb3JpZ2JhZCAkYmFkY29sb3JzCisgICAgaWYge1tsbGVuZ3RoICRiYWRjb2xvcnNdIDwgJG5jb2xvcnMgLSAxfSB7CisJZm9yZWFjaCBjaGlsZCAka2lkcyB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgY29sb3JtYXAoJGNoaWxkKV0KKwkJJiYgW2xzZWFyY2ggLWV4YWN0ICRiYWRjb2xvcnMgJGNvbG9ybWFwKCRjaGlsZCldIDwgMH0geworCQlsYXBwZW5kIGJhZGNvbG9ycyAkY29sb3JtYXAoJGNoaWxkKQorCSAgICB9CisJICAgIGZvcmVhY2ggcCAkcGFyZW50cygkY3VydmlldywkY2hpbGQpIHsKKwkJaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkcCldCisJCSAgICAmJiBbbHNlYXJjaCAtZXhhY3QgJGJhZGNvbG9ycyAkY29sb3JtYXAoJHApXSA8IDB9IHsKKwkJICAgIGxhcHBlbmQgYmFkY29sb3JzICRjb2xvcm1hcCgkcCkKKwkJfQorCSAgICB9CisJfQorCWlmIHtbbGxlbmd0aCAkYmFkY29sb3JzXSA+PSAkbmNvbG9yc30geworCSAgICBzZXQgYmFkY29sb3JzICRvcmlnYmFkCisJfQorICAgIH0KKyAgICBmb3Ige3NldCBpIDB9IHskaSA8PSAkbmNvbG9yc30ge2luY3IgaX0geworCXNldCBjIFtsaW5kZXggJGNvbG9ycyAkbmV4dGNvbG9yXQorCWlmIHtbaW5jciBuZXh0Y29sb3JdID49ICRuY29sb3JzfSB7CisJICAgIHNldCBuZXh0Y29sb3IgMAorCX0KKwlpZiB7W2xzZWFyY2ggLWV4YWN0ICRiYWRjb2xvcnMgJGNdfSBicmVhaworICAgIH0KKyAgICBzZXQgY29sb3JtYXAoJGlkKSAkYworfQorCitwcm9jIGJpbmRsaW5lIHt0IGlkfSB7CisgICAgZ2xvYmFsIGNhbnYKKworICAgICRjYW52IGJpbmQgJHQgPEVudGVyPiAibGluZWVudGVyICV4ICV5ICRpZCIKKyAgICAkY2FudiBiaW5kICR0IDxNb3Rpb24+ICJsaW5lbW90aW9uICV4ICV5ICRpZCIKKyAgICAkY2FudiBiaW5kICR0IDxMZWF2ZT4gImxpbmVsZWF2ZSAkaWQiCisgICAgJGNhbnYgYmluZCAkdCA8QnV0dG9uLTE+ICJsaW5lY2xpY2sgJXggJXkgJGlkIDEiCit9CisKK3Byb2MgZ3JhcGhfcGFuZV93aWR0aCB7fSB7CisgICAgZ2xvYmFsIHVzZV90dGsKKworICAgIGlmIHskdXNlX3R0a30geworCXNldCBnIFsudGYuaGlzdGZyYW1lLnB3Y2xpc3Qgc2FzaHBvcyAwXQorICAgIH0gZWxzZSB7CisJc2V0IGcgWy50Zi5oaXN0ZnJhbWUucHdjbGlzdCBzYXNoIGNvb3JkIDBdCisgICAgfQorICAgIHJldHVybiBbbGluZGV4ICRnIDBdCit9CisKK3Byb2MgdG90YWx3aWR0aCB7bCBmb250IGV4dHJhfSB7CisgICAgc2V0IHRvdCAwCisgICAgZm9yZWFjaCBzdHIgJGwgeworCXNldCB0b3QgW2V4cHIgeyR0b3QgKyBbZm9udCBtZWFzdXJlICRmb250ICRzdHJdICsgJGV4dHJhfV0KKyAgICB9CisgICAgcmV0dXJuICR0b3QKK30KKworcHJvYyBkcmF3dGFncyB7aWQgeCB4dCB5MX0geworICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcyBtYWluaGVhZAorICAgIGdsb2JhbCBsaW5lc3BjIGx0aGlja25lc3MKKyAgICBnbG9iYWwgY2FudiByb3d0ZXh0eCBjdXJ2aWV3IGZnY29sb3IgYmdjb2xvciBjdHhidXQKKyAgICBnbG9iYWwgaGVhZGJnY29sb3IgaGVhZGZnY29sb3IgaGVhZG91dGxpbmVjb2xvciByZW1vdGViZ2NvbG9yCisgICAgZ2xvYmFsIHRhZ2JnY29sb3IgdGFnZmdjb2xvciB0YWdvdXRsaW5lY29sb3IKKyAgICBnbG9iYWwgcmVmbGluZWNvbG9yCisKKyAgICBzZXQgbWFya3Mge30KKyAgICBzZXQgbnRhZ3MgMAorICAgIHNldCBuaGVhZHMgMAorICAgIHNldCBzaW5nbGV0YWcgMAorICAgIHNldCBtYXh0YWdzIDMKKyAgICBzZXQgbWF4dGFncGN0IDI1CisgICAgc2V0IG1heHdpZHRoIFtleHByIHtbZ3JhcGhfcGFuZV93aWR0aF0gKiAkbWF4dGFncGN0IC8gMTAwfV0KKyAgICBzZXQgZGVsdGEgW2V4cHIge2ludCgwLjUgKiAoJGxpbmVzcGMgLSAkbHRoaWNrbmVzcykpfV0KKyAgICBzZXQgZXh0cmEgW2V4cHIgeyRkZWx0YSArICRsdGhpY2tuZXNzICsgJGxpbmVzcGN9XQorCisgICAgaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV19IHsKKwlzZXQgbWFya3MgJGlkdGFncygkaWQpCisJc2V0IG50YWdzIFtsbGVuZ3RoICRtYXJrc10KKwlpZiB7JG50YWdzID4gJG1heHRhZ3MgfHwKKwkgICAgW3RvdGFsd2lkdGggJG1hcmtzIG1haW5mb250ICRleHRyYV0gPiAkbWF4d2lkdGh9IHsKKwkgICAgIyBzaG93IGp1c3QgYSBzaW5nbGUgIm4gdGFncy4uLiIgdGFnCisJICAgIHNldCBzaW5nbGV0YWcgMQorCSAgICBpZiB7JG50YWdzID09IDF9IHsKKwkJc2V0IG1hcmtzIFtsaXN0ICJ0YWcuLi4iXQorCSAgICB9IGVsc2UgeworCQlzZXQgbWFya3MgW2xpc3QgW2Zvcm1hdCAiJWQgdGFncy4uLiIgJG50YWdzXV0KKwkgICAgfQorCSAgICBzZXQgbnRhZ3MgMQorCX0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBpZGhlYWRzKCRpZCldfSB7CisJc2V0IG1hcmtzIFtjb25jYXQgJG1hcmtzICRpZGhlYWRzKCRpZCldCisJc2V0IG5oZWFkcyBbbGxlbmd0aCAkaWRoZWFkcygkaWQpXQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkb3RoZXJyZWZzKCRpZCldfSB7CisJc2V0IG1hcmtzIFtjb25jYXQgJG1hcmtzICRpZG90aGVycmVmcygkaWQpXQorICAgIH0KKyAgICBpZiB7JG1hcmtzIGVxIHt9fSB7CisJcmV0dXJuICR4dAorICAgIH0KKworICAgIHNldCB5dCBbZXhwciB7JHkxIC0gMC41ICogJGxpbmVzcGN9XQorICAgIHNldCB5YiBbZXhwciB7JHl0ICsgJGxpbmVzcGMgLSAxfV0KKyAgICBzZXQgeHZhbHMge30KKyAgICBzZXQgd3ZhbHMge30KKyAgICBzZXQgaSAtMQorICAgIGZvcmVhY2ggdGFnICRtYXJrcyB7CisJaW5jciBpCisJaWYgeyRpID49ICRudGFncyAmJiAkaSA8ICRudGFncyArICRuaGVhZHMgJiYgJHRhZyBlcSAkbWFpbmhlYWR9IHsKKwkgICAgc2V0IHdpZCBbZm9udCBtZWFzdXJlIG1haW5mb250Ym9sZCAkdGFnXQorCX0gZWxzZSB7CisJICAgIHNldCB3aWQgW2ZvbnQgbWVhc3VyZSBtYWluZm9udCAkdGFnXQorCX0KKwlsYXBwZW5kIHh2YWxzICR4dAorCWxhcHBlbmQgd3ZhbHMgJHdpZAorCXNldCB4dCBbZXhwciB7JHh0ICsgJHdpZCArICRleHRyYX1dCisgICAgfQorICAgIHNldCB0IFskY2FudiBjcmVhdGUgbGluZSAkeCAkeTEgW2xpbmRleCAkeHZhbHMgZW5kXSAkeTEgXAorCSAgICAgICAtd2lkdGggJGx0aGlja25lc3MgLWZpbGwgJHJlZmxpbmVjb2xvciAtdGFncyB0YWcuJGlkXQorICAgICRjYW52IGxvd2VyICR0CisgICAgZm9yZWFjaCB0YWcgJG1hcmtzIHggJHh2YWxzIHdpZCAkd3ZhbHMgeworCXNldCB0YWdfcXVvdGVkIFtzdHJpbmcgbWFwIHslICUlfSAkdGFnXQorCXNldCB4bCBbZXhwciB7JHggKyAkZGVsdGF9XQorCXNldCB4ciBbZXhwciB7JHggKyAkZGVsdGEgKyAkd2lkICsgJGx0aGlja25lc3N9XQorCXNldCBmb250IG1haW5mb250CisJaWYge1tpbmNyIG50YWdzIC0xXSA+PSAwfSB7CisJICAgICMgZHJhdyBhIHRhZworCSAgICBzZXQgdCBbJGNhbnYgY3JlYXRlIHBvbHlnb24gJHggW2V4cHIgeyR5dCArICRkZWx0YX1dICR4bCAkeXQgXAorCQkgICAgICAgJHhyICR5dCAkeHIgJHliICR4bCAkeWIgJHggW2V4cHIgeyR5YiAtICRkZWx0YX1dIFwKKwkJICAgICAgIC13aWR0aCAxIC1vdXRsaW5lICR0YWdvdXRsaW5lY29sb3IgLWZpbGwgJHRhZ2JnY29sb3IgXAorCQkgICAgICAgLXRhZ3MgdGFnLiRpZF0KKwkgICAgaWYgeyRzaW5nbGV0YWd9IHsKKwkJc2V0IHRhZ2NsaWNrIFtsaXN0IHNob3d0YWdzICRpZCAxXQorCSAgICB9IGVsc2UgeworCQlzZXQgdGFnY2xpY2sgW2xpc3Qgc2hvd3RhZyAkdGFnX3F1b3RlZCAxXQorCSAgICB9CisJICAgICRjYW52IGJpbmQgJHQgPDE+ICR0YWdjbGljaworCSAgICBzZXQgcm93dGV4dHgoW3Jvd29mY29tbWl0ICRpZF0pIFtleHByIHskeHIgKyAkbGluZXNwY31dCisJfSBlbHNlIHsKKwkgICAgIyBkcmF3IGEgaGVhZCBvciBvdGhlciByZWYKKwkgICAgaWYge1tpbmNyIG5oZWFkcyAtMV0gPj0gMH0geworCQlzZXQgY29sICRoZWFkYmdjb2xvcgorCQlpZiB7JHRhZyBlcSAkbWFpbmhlYWR9IHsKKwkJICAgIHNldCBmb250IG1haW5mb250Ym9sZAorCQl9CisJICAgIH0gZWxzZSB7CisJCXNldCBjb2wgIiNkZGRkZmYiCisJICAgIH0KKwkgICAgc2V0IHhsIFtleHByIHskeGwgLSAkZGVsdGEvMn1dCisJICAgICRjYW52IGNyZWF0ZSBwb2x5Z29uICR4ICR5dCAkeHIgJHl0ICR4ciAkeWIgJHggJHliIFwKKwkJLXdpZHRoIDEgLW91dGxpbmUgYmxhY2sgLWZpbGwgJGNvbCAtdGFncyB0YWcuJGlkCisJICAgIGlmIHtbcmVnZXhwIHteKHJlbW90ZXMvLiovfHJlbW90ZXMvKX0gJHRhZyBtYXRjaCByZW1vdGVwcmVmaXhdfSB7CisJICAgICAgICBzZXQgcndpZCBbZm9udCBtZWFzdXJlIG1haW5mb250ICRyZW1vdGVwcmVmaXhdCisJCXNldCB4aSBbZXhwciB7JHggKyAxfV0KKwkJc2V0IHl0aSBbZXhwciB7JHl0ICsgMX1dCisJCXNldCB4cmkgW2V4cHIgeyR4ICsgJHJ3aWR9XQorCQkkY2FudiBjcmVhdGUgcG9seWdvbiAkeGkgJHl0aSAkeHJpICR5dGkgJHhyaSAkeWIgJHhpICR5YiBcCisJCQktd2lkdGggMCAtZmlsbCAkcmVtb3RlYmdjb2xvciAtdGFncyB0YWcuJGlkCisJICAgIH0KKwl9CisJc2V0IHQgWyRjYW52IGNyZWF0ZSB0ZXh0ICR4bCAkeTEgLWFuY2hvciB3IC10ZXh0ICR0YWcgLWZpbGwgJGhlYWRmZ2NvbG9yIFwKKwkJICAgLWZvbnQgJGZvbnQgLXRhZ3MgW2xpc3QgdGFnLiRpZCB0ZXh0XV0KKwlpZiB7JG50YWdzID49IDB9IHsKKwkgICAgJGNhbnYgYmluZCAkdCA8MT4gJHRhZ2NsaWNrCisJfSBlbHNlaWYgeyRuaGVhZHMgPj0gMH0geworCSAgICAkY2FudiBiaW5kICR0ICRjdHhidXQgW2xpc3QgaGVhZG1lbnUgJVggJVkgJGlkICR0YWdfcXVvdGVkXQorCX0KKyAgICB9CisgICAgcmV0dXJuICR4dAorfQorCitwcm9jIGRyYXdub3Rlc2lnbiB7eHQgeX0geworICAgIGdsb2JhbCBsaW5lc3BjIGNhbnYgZmdjb2xvcgorCisgICAgc2V0IG9yYWQgW2V4cHIgeyRsaW5lc3BjIC8gM31dCisgICAgc2V0IHQgWyRjYW52IGNyZWF0ZSByZWN0YW5nbGUgW2V4cHIgeyR4dCAtICRvcmFkfV0gW2V4cHIgeyR5IC0gJG9yYWR9XSBcCisJICAgICAgIFtleHByIHskeHQgKyAkb3JhZCAtIDF9XSBbZXhwciB7JHkgKyAkb3JhZCAtIDF9XSBcCisJICAgICAgIC1maWxsIHllbGxvdyAtb3V0bGluZSAkZmdjb2xvciAtd2lkdGggMSAtdGFncyBjaXJjbGVdCisgICAgc2V0IHh0IFtleHByIHskeHQgKyAkb3JhZCAqIDN9XQorICAgIHJldHVybiAkeHQKK30KKworcHJvYyB4Y29vcmQge2kgbGV2ZWwgbG59IHsKKyAgICBnbG9iYWwgY2FudngwIHhzcGMxIHhzcGMyCisKKyAgICBzZXQgeCBbZXhwciB7JGNhbnZ4MCArICRpICogJHhzcGMxKCRsbil9XQorICAgIGlmIHskaSA+IDAgJiYgJGkgPT0gJGxldmVsfSB7CisJc2V0IHggW2V4cHIgeyR4ICsgMC41ICogKCR4c3BjMiAtICR4c3BjMSgkbG4pKX1dCisgICAgfSBlbHNlaWYgeyRpID4gJGxldmVsfSB7CisJc2V0IHggW2V4cHIgeyR4ICsgJHhzcGMyIC0gJHhzcGMxKCRsbil9XQorICAgIH0KKyAgICByZXR1cm4gJHgKK30KKworcHJvYyBzaG93X3N0YXR1cyB7bXNnfSB7CisgICAgZ2xvYmFsIGNhbnYgZmdjb2xvcgorCisgICAgY2xlYXJfZGlzcGxheQorICAgIHNldF93aW5kb3dfdGl0bGUKKyAgICAkY2FudiBjcmVhdGUgdGV4dCAzIDMgLWFuY2hvciBudyAtdGV4dCAkbXNnIC1mb250IG1haW5mb250IFwKKwktdGFncyB0ZXh0IC1maWxsICRmZ2NvbG9yCit9CisKKyMgRG9uJ3QgY2hhbmdlIHRoZSB0ZXh0IHBhbmUgY3Vyc29yIGlmIGl0IGlzIGN1cnJlbnRseSB0aGUgaGFuZCBjdXJzb3IsCisjIHNob3dpbmcgdGhhdCB3ZSBhcmUgb3ZlciBhIHNoYTEgSUQgbGluay4KK3Byb2Mgc2V0dGV4dGN1cnNvciB7Y30geworICAgIGdsb2JhbCBjdGV4dCBjdXJ0ZXh0Y3Vyc29yCisKKyAgICBpZiB7WyRjdGV4dCBjZ2V0IC1jdXJzb3JdID09ICRjdXJ0ZXh0Y3Vyc29yfSB7CisJJGN0ZXh0IGNvbmZpZyAtY3Vyc29yICRjCisgICAgfQorICAgIHNldCBjdXJ0ZXh0Y3Vyc29yICRjCit9CisKK3Byb2Mgbm93YnVzeSB7d2hhdCB7bmFtZSB7fX19IHsKKyAgICBnbG9iYWwgaXNidXN5IGJ1c3luYW1lIHN0YXR1c3cKKworICAgIGlmIHtbYXJyYXkgbmFtZXMgaXNidXN5XSBlcSB7fX0geworCS4gY29uZmlnIC1jdXJzb3Igd2F0Y2gKKwlzZXR0ZXh0Y3Vyc29yIHdhdGNoCisgICAgfQorICAgIHNldCBpc2J1c3koJHdoYXQpIDEKKyAgICBzZXQgYnVzeW5hbWUoJHdoYXQpICRuYW1lCisgICAgaWYgeyRuYW1lIG5lIHt9fSB7CisJJHN0YXR1c3cgY29uZiAtdGV4dCAkbmFtZQorICAgIH0KK30KKworcHJvYyBub3RidXN5IHt3aGF0fSB7CisgICAgZ2xvYmFsIGlzYnVzeSBtYWluY3Vyc29yIHRleHRjdXJzb3IgYnVzeW5hbWUgc3RhdHVzdworCisgICAgY2F0Y2ggeworCXVuc2V0IGlzYnVzeSgkd2hhdCkKKwlpZiB7JGJ1c3luYW1lKCR3aGF0KSBuZSB7fSAmJgorCSAgICBbJHN0YXR1c3cgY2dldCAtdGV4dF0gZXEgJGJ1c3luYW1lKCR3aGF0KX0geworCSAgICAkc3RhdHVzdyBjb25mIC10ZXh0IHt9CisJfQorICAgIH0KKyAgICBpZiB7W2FycmF5IG5hbWVzIGlzYnVzeV0gZXEge319IHsKKwkuIGNvbmZpZyAtY3Vyc29yICRtYWluY3Vyc29yCisJc2V0dGV4dGN1cnNvciAkdGV4dGN1cnNvcgorICAgIH0KK30KKworcHJvYyBmaW5kbWF0Y2hlcyB7Zn0geworICAgIGdsb2JhbCBmaW5kdHlwZSBmaW5kc3RyaW5nCisgICAgaWYgeyRmaW5kdHlwZSA9PSBbbWMgIlJlZ2V4cCJdfSB7CisJc2V0IG1hdGNoZXMgW3JlZ2V4cCAtaW5kaWNlcyAtYWxsIC1pbmxpbmUgJGZpbmRzdHJpbmcgJGZdCisgICAgfSBlbHNlIHsKKwlzZXQgZnMgJGZpbmRzdHJpbmcKKwlpZiB7JGZpbmR0eXBlID09IFttYyAiSWduQ2FzZSJdfSB7CisJICAgIHNldCBmIFtzdHJpbmcgdG9sb3dlciAkZl0KKwkgICAgc2V0IGZzIFtzdHJpbmcgdG9sb3dlciAkZnNdCisJfQorCXNldCBtYXRjaGVzIHt9CisJc2V0IGkgMAorCXNldCBsIFtzdHJpbmcgbGVuZ3RoICRmc10KKwl3aGlsZSB7W3NldCBqIFtzdHJpbmcgZmlyc3QgJGZzICRmICRpXV0gPj0gMH0geworCSAgICBsYXBwZW5kIG1hdGNoZXMgW2xpc3QgJGogW2V4cHIgeyRqKyRsLTF9XV0KKwkgICAgc2V0IGkgW2V4cHIgeyRqICsgJGx9XQorCX0KKyAgICB9CisgICAgcmV0dXJuICRtYXRjaGVzCit9CisKK3Byb2MgZG9maW5kIHt7ZGlybiAxfSB7d3JhcCAxfX0geworICAgIGdsb2JhbCBmaW5kc3RyaW5nIGZpbmRzdGFydGxpbmUgZmluZGN1cmxpbmUgc2VsZWN0ZWRsaW5lIG51bWNvbW1pdHMKKyAgICBnbG9iYWwgZ2R0dHlwZSBmaWxlaGlnaGxpZ2h0IGZoX3NlcmlhbCBmaW5kX2Rpcm4gZmluZGFsbG93d3JhcAorCisgICAgaWYge1tpbmZvIGV4aXN0cyBmaW5kX2Rpcm5dfSB7CisJaWYgeyRmaW5kX2Rpcm4gPT0gJGRpcm59IHJldHVybgorCXN0b3BmaW5kaW5nCisgICAgfQorICAgIGZvY3VzIC4KKyAgICBpZiB7JGZpbmRzdHJpbmcgZXEge30gfHwgJG51bWNvbW1pdHMgPT0gMH0gcmV0dXJuCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHsKKwlzZXQgZmluZHN0YXJ0bGluZSBbbGluZGV4IFt2aXNpYmxlcm93c10gW2V4cHIgeyRkaXJuIDwgMH1dXQorICAgIH0gZWxzZSB7CisJc2V0IGZpbmRzdGFydGxpbmUgJHNlbGVjdGVkbGluZQorICAgIH0KKyAgICBzZXQgZmluZGN1cmxpbmUgJGZpbmRzdGFydGxpbmUKKyAgICBub3didXN5IGZpbmRpbmcgW21jICJTZWFyY2hpbmciXQorICAgIGlmIHskZ2R0dHlwZSBuZSBbbWMgImNvbnRhaW5pbmc6Il0gJiYgIVtpbmZvIGV4aXN0cyBmaWxlaGlnaGxpZ2h0XX0geworCWFmdGVyIGNhbmNlbCBkb19maWxlX2hsICRmaF9zZXJpYWwKKwlkb19maWxlX2hsICRmaF9zZXJpYWwKKyAgICB9CisgICAgc2V0IGZpbmRfZGlybiAkZGlybgorICAgIHNldCBmaW5kYWxsb3d3cmFwICR3cmFwCisgICAgcnVuIGZpbmRtb3JlCit9CisKK3Byb2Mgc3RvcGZpbmRpbmcge30geworICAgIGdsb2JhbCBmaW5kX2Rpcm4gZmluZGN1cmxpbmUgZnByb2djb29yZAorCisgICAgaWYge1tpbmZvIGV4aXN0cyBmaW5kX2Rpcm5dfSB7CisJdW5zZXQgZmluZF9kaXJuCisJdW5zZXQgZmluZGN1cmxpbmUKKwlub3RidXN5IGZpbmRpbmcKKwlzZXQgZnByb2djb29yZCAwCisJYWRqdXN0cHJvZ3Jlc3MKKyAgICB9CisgICAgc3RvcGJsYW1pbmcKK30KKworcHJvYyBmaW5kbW9yZSB7fSB7CisgICAgZ2xvYmFsIGNvbW1pdGRhdGEgY29tbWl0aW5mbyBudW1jb21taXRzIGZpbmRwYXR0ZXJuIGZpbmRsb2MKKyAgICBnbG9iYWwgZmluZHN0YXJ0bGluZSBmaW5kY3VybGluZSBmaW5kYWxsb3d3cmFwCisgICAgZ2xvYmFsIGZpbmRfZGlybiBnZHR0eXBlIGZoaWdobGlnaHRzIGZwcm9nY29vcmQKKyAgICBnbG9iYWwgY3VydmlldyB2YXJjb3JkZXIgdnJvd251bSB2YXJjY29tbWl0cyB2cm93bW9kCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBmaW5kX2Rpcm5dfSB7CisJcmV0dXJuIDAKKyAgICB9CisgICAgc2V0IGZsZHR5cGVzIFtsaXN0IFttYyAiSGVhZGxpbmUiXSBbbWMgIkF1dGhvciJdICIiIFttYyAiQ29tbWl0dGVyIl0gIiIgW21jICJDb21tZW50cyJdXQorICAgIHNldCBsICRmaW5kY3VybGluZQorICAgIHNldCBtb3JldG9kbyAwCisgICAgaWYgeyRmaW5kX2Rpcm4gPiAwfSB7CisJaW5jciBsCisJaWYgeyRsID49ICRudW1jb21taXRzfSB7CisJICAgIHNldCBsIDAKKwl9CisJaWYgeyRsIDw9ICRmaW5kc3RhcnRsaW5lfSB7CisJICAgIHNldCBsaW0gW2V4cHIgeyRmaW5kc3RhcnRsaW5lICsgMX1dCisJfSBlbHNlIHsKKwkgICAgc2V0IGxpbSAkbnVtY29tbWl0cworCSAgICBzZXQgbW9yZXRvZG8gJGZpbmRhbGxvd3dyYXAKKwl9CisgICAgfSBlbHNlIHsKKwlpZiB7JGwgPT0gMH0geworCSAgICBzZXQgbCAkbnVtY29tbWl0cworCX0KKwlpbmNyIGwgLTEKKwlpZiB7JGwgPj0gJGZpbmRzdGFydGxpbmV9IHsKKwkgICAgc2V0IGxpbSBbZXhwciB7JGZpbmRzdGFydGxpbmUgLSAxfV0KKwl9IGVsc2UgeworCSAgICBzZXQgbGltIC0xCisJICAgIHNldCBtb3JldG9kbyAkZmluZGFsbG93d3JhcAorCX0KKyAgICB9CisgICAgc2V0IG4gW2V4cHIgeygkbGltIC0gJGwpICogJGZpbmRfZGlybn1dCisgICAgaWYgeyRuID4gNTAwfSB7CisJc2V0IG4gNTAwCisJc2V0IG1vcmV0b2RvIDEKKyAgICB9CisgICAgaWYgeyRsICsgKCRmaW5kX2Rpcm4gPiAwPyAkbjogMSkgPiAkdnJvd21vZCgkY3Vydmlldyl9IHsKKwl1cGRhdGVfYXJjcm93cyAkY3VydmlldworICAgIH0KKyAgICBzZXQgZm91bmQgMAorICAgIHNldCBkb21vcmUgMQorICAgIHNldCBhaSBbYnNlYXJjaCAkdnJvd251bSgkY3VydmlldykgJGxdCisgICAgc2V0IGEgW2xpbmRleCAkdmFyY29yZGVyKCRjdXJ2aWV3KSAkYWldCisgICAgc2V0IGFyb3cgW2xpbmRleCAkdnJvd251bSgkY3VydmlldykgJGFpXQorICAgIHNldCBpZHMgW2xpbmRleCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpXQorICAgIHNldCBhcm93ZW5kIFtleHByIHskYXJvdyArIFtsbGVuZ3RoICRpZHNdfV0KKyAgICBpZiB7JGdkdHR5cGUgZXEgW21jICJjb250YWluaW5nOiJdfSB7CisJZm9yIHt9IHskbiA+IDB9IHtpbmNyIG4gLTE7IGluY3IgbCAkZmluZF9kaXJufSB7CisJICAgIGlmIHskbCA8ICRhcm93IHx8ICRsID49ICRhcm93ZW5kfSB7CisJCWluY3IgYWkgJGZpbmRfZGlybgorCQlzZXQgYSBbbGluZGV4ICR2YXJjb3JkZXIoJGN1cnZpZXcpICRhaV0KKwkJc2V0IGFyb3cgW2xpbmRleCAkdnJvd251bSgkY3VydmlldykgJGFpXQorCQlzZXQgaWRzIFtsaW5kZXggJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKV0KKwkJc2V0IGFyb3dlbmQgW2V4cHIgeyRhcm93ICsgW2xsZW5ndGggJGlkc119XQorCSAgICB9CisJICAgIHNldCBpZCBbbGluZGV4ICRpZHMgW2V4cHIgeyRsIC0gJGFyb3d9XV0KKwkgICAgIyBzaG91bGRuJ3QgaGFwcGVuIHVubGVzcyBnaXQgbG9nIGRvZXNuJ3QgZ2l2ZSBhbGwgdGhlIGNvbW1pdHMuLi4KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0ZGF0YSgkaWQpXSB8fAorCQkhW2RvZXNtYXRjaCAkY29tbWl0ZGF0YSgkaWQpXX0geworCQljb250aW51ZQorCSAgICB9CisJICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV19IHsKKwkJZ2V0Y29tbWl0ICRpZAorCSAgICB9CisJICAgIHNldCBpbmZvICRjb21taXRpbmZvKCRpZCkKKwkgICAgZm9yZWFjaCBmICRpbmZvIHR5ICRmbGR0eXBlcyB7CisJCWlmIHskdHkgZXEgIiJ9IGNvbnRpbnVlCisJCWlmIHsoJGZpbmRsb2MgZXEgW21jICJBbGwgZmllbGRzIl0gfHwgJGZpbmRsb2MgZXEgJHR5KSAmJgorCQkgICAgW2RvZXNtYXRjaCAkZl19IHsKKwkJICAgIHNldCBmb3VuZCAxCisJCSAgICBicmVhaworCQl9CisJICAgIH0KKwkgICAgaWYgeyRmb3VuZH0gYnJlYWsKKwl9CisgICAgfSBlbHNlIHsKKwlmb3Ige30geyRuID4gMH0ge2luY3IgbiAtMTsgaW5jciBsICRmaW5kX2Rpcm59IHsKKwkgICAgaWYgeyRsIDwgJGFyb3cgfHwgJGwgPj0gJGFyb3dlbmR9IHsKKwkJaW5jciBhaSAkZmluZF9kaXJuCisJCXNldCBhIFtsaW5kZXggJHZhcmNvcmRlcigkY3VydmlldykgJGFpXQorCQlzZXQgYXJvdyBbbGluZGV4ICR2cm93bnVtKCRjdXJ2aWV3KSAkYWldCisJCXNldCBpZHMgW2xpbmRleCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpXQorCQlzZXQgYXJvd2VuZCBbZXhwciB7JGFyb3cgKyBbbGxlbmd0aCAkaWRzXX1dCisJICAgIH0KKwkgICAgc2V0IGlkIFtsaW5kZXggJGlkcyBbZXhwciB7JGwgLSAkYXJvd31dXQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBmaGlnaGxpZ2h0cygkaWQpXX0geworCQkjIHRoaXMgc2V0cyBmaGlnaGxpZ2h0cygkaWQpIHRvIC0xCisJCWFza2ZpbGVoaWdobGlnaHQgJGwgJGlkCisJICAgIH0KKwkgICAgaWYgeyRmaGlnaGxpZ2h0cygkaWQpID4gMH0geworCQlzZXQgZm91bmQgJGRvbW9yZQorCQlicmVhaworCSAgICB9CisJICAgIGlmIHskZmhpZ2hsaWdodHMoJGlkKSA8IDB9IHsKKwkJaWYgeyRkb21vcmV9IHsKKwkJICAgIHNldCBkb21vcmUgMAorCQkgICAgc2V0IGZpbmRjdXJsaW5lIFtleHByIHskbCAtICRmaW5kX2Rpcm59XQorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHskZm91bmQgfHwgKCRkb21vcmUgJiYgISRtb3JldG9kbyl9IHsKKwl1bnNldCBmaW5kY3VybGluZQorCXVuc2V0IGZpbmRfZGlybgorCW5vdGJ1c3kgZmluZGluZworCXNldCBmcHJvZ2Nvb3JkIDAKKwlhZGp1c3Rwcm9ncmVzcworCWlmIHskZm91bmR9IHsKKwkgICAgZmluZHNlbGVjdGxpbmUgJGwKKwl9IGVsc2UgeworCSAgICBiZWxsCisJfQorCXJldHVybiAwCisgICAgfQorICAgIGlmIHshJGRvbW9yZX0geworCWZsdXNoaGlnaGxpZ2h0cworICAgIH0gZWxzZSB7CisJc2V0IGZpbmRjdXJsaW5lIFtleHByIHskbCAtICRmaW5kX2Rpcm59XQorICAgIH0KKyAgICBzZXQgbiBbZXhwciB7KCRmaW5kY3VybGluZSAtICRmaW5kc3RhcnRsaW5lKSAqICRmaW5kX2Rpcm4gLSAxfV0KKyAgICBpZiB7JG4gPCAwfSB7CisJaW5jciBuICRudW1jb21taXRzCisgICAgfQorICAgIHNldCBmcHJvZ2Nvb3JkIFtleHByIHskbiAqIDEuMCAvICRudW1jb21taXRzfV0KKyAgICBhZGp1c3Rwcm9ncmVzcworICAgIHJldHVybiAkZG9tb3JlCit9CisKK3Byb2MgZmluZHNlbGVjdGxpbmUge2x9IHsKKyAgICBnbG9iYWwgZmluZGxvYyBjb21tZW50ZW5kIGN0ZXh0IGZpbmRjdXJsaW5lIG1hcmtpbmdtYXRjaGVzIGdkdHR5cGUKKworICAgIHNldCBtYXJraW5nbWF0Y2hlcyBbZXhwciB7JGdkdHR5cGUgZXEgW21jICJjb250YWluaW5nOiJdfV0KKyAgICBzZXQgZmluZGN1cmxpbmUgJGwKKyAgICBzZWxlY3RsaW5lICRsIDEKKyAgICBpZiB7JG1hcmtpbmdtYXRjaGVzICYmCisJKCRmaW5kbG9jIGVxIFttYyAiQWxsIGZpZWxkcyJdIHx8ICRmaW5kbG9jIGVxIFttYyAiQ29tbWVudHMiXSl9IHsKKwkjIGhpZ2hsaWdodCB0aGUgbWF0Y2hlcyBpbiB0aGUgY29tbWVudHMKKwlzZXQgZiBbJGN0ZXh0IGdldCAxLjAgJGNvbW1lbnRlbmRdCisJc2V0IG1hdGNoZXMgW2ZpbmRtYXRjaGVzICRmXQorCWZvcmVhY2ggbWF0Y2ggJG1hdGNoZXMgeworCSAgICBzZXQgc3RhcnQgW2xpbmRleCAkbWF0Y2ggMF0KKwkgICAgc2V0IGVuZCBbZXhwciB7W2xpbmRleCAkbWF0Y2ggMV0gKyAxfV0KKwkgICAgJGN0ZXh0IHRhZyBhZGQgZm91bmQgIjEuMCArICRzdGFydCBjIiAiMS4wICsgJGVuZCBjIgorCX0KKyAgICB9CisgICAgZHJhd3Zpc2libGUKK30KKworIyBtYXJrIHRoZSBiaXRzIG9mIGEgaGVhZGxpbmUgb3IgYXV0aG9yIHRoYXQgbWF0Y2ggYSBmaW5kIHN0cmluZworcHJvYyBtYXJrbWF0Y2hlcyB7Y2FudiBsIHN0ciB0YWcgbWF0Y2hlcyBmb250IHJvd30geworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKKworICAgIHNldCBiYm94IFskY2FudiBiYm94ICR0YWddCisgICAgc2V0IHgwIFtsaW5kZXggJGJib3ggMF0KKyAgICBzZXQgeTAgW2xpbmRleCAkYmJveCAxXQorICAgIHNldCB5MSBbbGluZGV4ICRiYm94IDNdCisgICAgZm9yZWFjaCBtYXRjaCAkbWF0Y2hlcyB7CisJc2V0IHN0YXJ0IFtsaW5kZXggJG1hdGNoIDBdCisJc2V0IGVuZCBbbGluZGV4ICRtYXRjaCAxXQorCWlmIHskc3RhcnQgPiAkZW5kfSBjb250aW51ZQorCXNldCB4b2ZmIFtmb250IG1lYXN1cmUgJGZvbnQgW3N0cmluZyByYW5nZSAkc3RyIDAgW2V4cHIgeyRzdGFydC0xfV1dXQorCXNldCB4bGVuIFtmb250IG1lYXN1cmUgJGZvbnQgW3N0cmluZyByYW5nZSAkc3RyIDAgW2V4cHIgeyRlbmR9XV1dCisJc2V0IHQgWyRjYW52IGNyZWF0ZSByZWN0IFtleHByIHskeDArJHhvZmZ9XSAkeTAgXAorCQkgICBbZXhwciB7JHgwKyR4bGVuKzJ9XSAkeTEgXAorCQkgICAtb3V0bGluZSB7fSAtdGFncyBbbGlzdCBtYXRjaCRsIG1hdGNoZXNdIC1maWxsIHllbGxvd10KKwkkY2FudiBsb3dlciAkdAorCWlmIHskcm93ID09ICRzZWxlY3RlZGxpbmV9IHsKKwkgICAgJGNhbnYgcmFpc2UgJHQgc2Vjc2VsCisJfQorICAgIH0KK30KKworcHJvYyB1bm1hcmttYXRjaGVzIHt9IHsKKyAgICBnbG9iYWwgbWFya2luZ21hdGNoZXMKKworICAgIGFsbGNhbnZzIGRlbGV0ZSBtYXRjaGVzCisgICAgc2V0IG1hcmtpbmdtYXRjaGVzIDAKKyAgICBzdG9wZmluZGluZworfQorCitwcm9jIHNlbGNhbnZsaW5lIHt3IHggeX0geworICAgIGdsb2JhbCBjYW52IGNhbnZ5MCBjdGV4dCBsaW5lc3BjCisgICAgZ2xvYmFsIHJvd3RleHR4CisgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorICAgIGlmIHskeW1heCA9PSB7fX0gcmV0dXJuCisgICAgc2V0IHlmcmFjIFtsaW5kZXggWyRjYW52IHl2aWV3XSAwXQorICAgIHNldCB5IFtleHByIHskeSArICR5ZnJhYyAqICR5bWF4fV0KKyAgICBzZXQgbCBbZXhwciB7aW50KCgkeSAtICRjYW52eTApIC8gJGxpbmVzcGMgKyAwLjUpfV0KKyAgICBpZiB7JGwgPCAwfSB7CisJc2V0IGwgMAorICAgIH0KKyAgICBpZiB7JHcgZXEgJGNhbnZ9IHsKKwlzZXQgeG1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDJdCisJc2V0IHhsZWZ0IFtleHByIHtbbGluZGV4IFskY2FudiB4dmlld10gMF0gKiAkeG1heH1dCisJaWYgeyFbaW5mbyBleGlzdHMgcm93dGV4dHgoJGwpXSB8fCAkeGxlZnQgKyAkeCA8ICRyb3d0ZXh0eCgkbCl9IHJldHVybgorICAgIH0KKyAgICB1bm1hcmttYXRjaGVzCisgICAgc2VsZWN0bGluZSAkbCAxCit9CisKK3Byb2MgY29tbWl0X2Rlc2NyaXB0b3Ige3B9IHsKKyAgICBnbG9iYWwgY29tbWl0aW5mbworICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJHApXX0geworCWdldGNvbW1pdCAkcAorICAgIH0KKyAgICBzZXQgbCAiLi4uIgorICAgIGlmIHtbbGxlbmd0aCAkY29tbWl0aW5mbygkcCldID4gMX0geworCXNldCBsIFtsaW5kZXggJGNvbW1pdGluZm8oJHApIDBdCisgICAgfQorICAgIHJldHVybiAiJHAgKCRsKVxuIgorfQorCisjIGFwcGVuZCBzb21lIHRleHQgdG8gdGhlIGN0ZXh0IHdpZGdldCwgYW5kIG1ha2UgYW55IFNIQTEgSUQKKyMgdGhhdCB3ZSBrbm93IGFib3V0IGJlIGEgY2xpY2thYmxlIGxpbmsuCisjIEFsc28gbG9vayBmb3IgVVJMcyBvZiB0aGUgZm9ybSAiaHR0cFtzXTovLy4uLiIgYW5kIG1ha2UgdGhlbSB3ZWIgbGlua3MuCitwcm9jIGFwcGVuZHdpdGhsaW5rcyB7dGV4dCB0YWdzfSB7CisgICAgZ2xvYmFsIGN0ZXh0IGxpbmtudW0gY3VydmlldworCisgICAgc2V0IHN0YXJ0IFskY3RleHQgaW5kZXggImVuZCAtIDFjIl0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAkdGV4dCAkdGFncworICAgIHNldCBsaW5rcyBbcmVnZXhwIC1pbmRpY2VzIC1hbGwgLWlubGluZSB7KD86XG18LWcpWzAtOWEtZl17Niw0MH1cTX0gJHRleHRdCisgICAgZm9yZWFjaCBsICRsaW5rcyB7CisJc2V0IHMgW2xpbmRleCAkbCAwXQorCXNldCBlIFtsaW5kZXggJGwgMV0KKwlzZXQgbGlua2lkIFtzdHJpbmcgcmFuZ2UgJHRleHQgJHMgJGVdCisJaW5jciBlCisJJGN0ZXh0IHRhZyBkZWxldGUgbGluayRsaW5rbnVtCisJJGN0ZXh0IHRhZyBhZGQgbGluayRsaW5rbnVtICIkc3RhcnQgKyAkcyBjIiAiJHN0YXJ0ICsgJGUgYyIKKwlzZXRsaW5rICRsaW5raWQgbGluayRsaW5rbnVtCisJaW5jciBsaW5rbnVtCisgICAgfQorICAgIHNldCB3bGlua3MgW3JlZ2V4cCAtaW5kaWNlcyAtYWxsIC1pbmxpbmUgLWxpbmUgXAorCQkgICAge2h0dHBzPzovL1teWzpzcGFjZTpdXSt9ICR0ZXh0XQorICAgIGZvcmVhY2ggbCAkd2xpbmtzIHsKKwlzZXQgczIgW2xpbmRleCAkbCAwXQorCXNldCBlMiBbbGluZGV4ICRsIDFdCisJc2V0IHVybCBbc3RyaW5nIHJhbmdlICR0ZXh0ICRzMiAkZTJdCisJaW5jciBlMgorCSRjdGV4dCB0YWcgZGVsZXRlIGxpbmskbGlua251bQorCSRjdGV4dCB0YWcgYWRkIGxpbmskbGlua251bSAiJHN0YXJ0ICsgJHMyIGMiICIkc3RhcnQgKyAkZTIgYyIKKwlzZXR3bGluayAkdXJsIGxpbmskbGlua251bQorCWluY3IgbGlua251bQorICAgIH0KK30KKworcHJvYyBzZXRsaW5rIHtpZCBsa30geworICAgIGdsb2JhbCBjdXJ2aWV3IGN0ZXh0IHBlbmRpbmdsaW5rcworICAgIGdsb2JhbCBsaW5rZmdjb2xvcgorCisgICAgaWYge1tzdHJpbmcgcmFuZ2UgJGlkIDAgMV0gZXEgIi1nIn0geworICAgICAgc2V0IGlkIFtzdHJpbmcgcmFuZ2UgJGlkIDIgZW5kXQorICAgIH0KKworICAgIHNldCBrbm93biAwCisgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRpZF0gPCA0MH0geworCXNldCBtYXRjaGVzIFtsb25naWQgJGlkXQorCWlmIHtbbGxlbmd0aCAkbWF0Y2hlc10gPiAwfSB7CisJICAgIGlmIHtbbGxlbmd0aCAkbWF0Y2hlc10gPiAxfSByZXR1cm4KKwkgICAgc2V0IGtub3duIDEKKwkgICAgc2V0IGlkIFtsaW5kZXggJG1hdGNoZXMgMF0KKwl9CisgICAgfSBlbHNlIHsKKwlzZXQga25vd24gW2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddCisgICAgfQorICAgIGlmIHska25vd259IHsKKwkkY3RleHQgdGFnIGNvbmYgJGxrIC1mb3JlZ3JvdW5kICRsaW5rZmdjb2xvciAtdW5kZXJsaW5lIDEKKwkkY3RleHQgdGFnIGJpbmQgJGxrIDwxPiBbbGlzdCBzZWxieWlkICRpZF0KKwkkY3RleHQgdGFnIGJpbmQgJGxrIDxFbnRlcj4ge2xpbmtjdXJzb3IgJVcgMX0KKwkkY3RleHQgdGFnIGJpbmQgJGxrIDxMZWF2ZT4ge2xpbmtjdXJzb3IgJVcgLTF9CisgICAgfSBlbHNlIHsKKwlsYXBwZW5kIHBlbmRpbmdsaW5rcygkaWQpICRsaworCWludGVyZXN0ZWRpbiAkaWQge21ha2VsaW5rICVQfQorICAgIH0KK30KKworcHJvYyBzZXR3bGluayB7dXJsIGxrfSB7CisgICAgZ2xvYmFsIGN0ZXh0CisgICAgZ2xvYmFsIGxpbmtmZ2NvbG9yCisgICAgZ2xvYmFsIHdlYl9icm93c2VyCisKKyAgICBpZiB7JHdlYl9icm93c2VyIGVxIHt9fSByZXR1cm4KKyAgICAkY3RleHQgdGFnIGNvbmYgJGxrIC1mb3JlZ3JvdW5kICRsaW5rZmdjb2xvciAtdW5kZXJsaW5lIDEKKyAgICAkY3RleHQgdGFnIGJpbmQgJGxrIDwxPiBbbGlzdCBicm93c2V3ZWIgJHVybF0KKyAgICAkY3RleHQgdGFnIGJpbmQgJGxrIDxFbnRlcj4ge2xpbmtjdXJzb3IgJVcgMX0KKyAgICAkY3RleHQgdGFnIGJpbmQgJGxrIDxMZWF2ZT4ge2xpbmtjdXJzb3IgJVcgLTF9Cit9CisKK3Byb2MgYXBwZW5kc2hvcnRsaW5rIHtpZCB7cHJlIHt9fSB7cG9zdCB7fX19IHsKKyAgICBnbG9iYWwgY3RleHQgbGlua251bQorCisgICAgJGN0ZXh0IGluc2VydCBlbmQgJHByZQorICAgICRjdGV4dCB0YWcgZGVsZXRlIGxpbmskbGlua251bQorICAgICRjdGV4dCBpbnNlcnQgZW5kIFtzdHJpbmcgcmFuZ2UgJGlkIDAgN10gbGluayRsaW5rbnVtCisgICAgJGN0ZXh0IGluc2VydCBlbmQgJHBvc3QKKyAgICBzZXRsaW5rICRpZCBsaW5rJGxpbmtudW0KKyAgICBpbmNyIGxpbmtudW0KK30KKworcHJvYyBtYWtlbGluayB7aWR9IHsKKyAgICBnbG9iYWwgcGVuZGluZ2xpbmtzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBwZW5kaW5nbGlua3MoJGlkKV19IHJldHVybgorICAgIGZvcmVhY2ggbGsgJHBlbmRpbmdsaW5rcygkaWQpIHsKKwlzZXRsaW5rICRpZCAkbGsKKyAgICB9CisgICAgdW5zZXQgcGVuZGluZ2xpbmtzKCRpZCkKK30KKworcHJvYyBsaW5rY3Vyc29yIHt3IGluY30geworICAgIGdsb2JhbCBsaW5rZW50ZXJjb3VudCBjdXJ0ZXh0Y3Vyc29yCisKKyAgICBpZiB7W2luY3IgbGlua2VudGVyY291bnQgJGluY10gPiAwfSB7CisJJHcgY29uZmlndXJlIC1jdXJzb3IgaGFuZDIKKyAgICB9IGVsc2UgeworCSR3IGNvbmZpZ3VyZSAtY3Vyc29yICRjdXJ0ZXh0Y3Vyc29yCisJaWYgeyRsaW5rZW50ZXJjb3VudCA8IDB9IHsKKwkgICAgc2V0IGxpbmtlbnRlcmNvdW50IDAKKwl9CisgICAgfQorfQorCitwcm9jIGJyb3dzZXdlYiB7dXJsfSB7CisgICAgZ2xvYmFsIHdlYl9icm93c2VyCisKKyAgICBpZiB7JHdlYl9icm93c2VyIGVxIHt9fSByZXR1cm4KKyAgICAjIFVzZSBldmFsIGhlcmUgaW4gY2FzZSAkd2ViX2Jyb3dzZXIgaXMgYSBjb21tYW5kIHBsdXMgc29tZSBhcmd1bWVudHMKKyAgICBpZiB7W2NhdGNoIHtldmFsIGV4ZWMgJHdlYl9icm93c2VyIFtsaXN0ICR1cmxdICZ9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBzdGFydGluZyB3ZWIgYnJvd3NlcjoiXSAkZXJyIgorICAgIH0KK30KKworcHJvYyB2aWV3bmV4dGxpbmUge2Rpcn0geworICAgIGdsb2JhbCBjYW52IGxpbmVzcGMKKworICAgICRjYW52IGRlbGV0ZSBob3ZlcgorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBzZXQgd25vdyBbJGNhbnYgeXZpZXddCisgICAgc2V0IHd0b3AgW2V4cHIge1tsaW5kZXggJHdub3cgMF0gKiAkeW1heH1dCisgICAgc2V0IG5ld3RvcCBbZXhwciB7JHd0b3AgKyAkZGlyICogJGxpbmVzcGN9XQorICAgIGlmIHskbmV3dG9wIDwgMH0geworCXNldCBuZXd0b3AgMAorICAgIH0gZWxzZWlmIHskbmV3dG9wID4gJHltYXh9IHsKKwlzZXQgbmV3dG9wICR5bWF4CisgICAgfQorICAgIGFsbGNhbnZzIHl2aWV3IG1vdmV0byBbZXhwciB7JG5ld3RvcCAqIDEuMCAvICR5bWF4fV0KK30KKworIyBhZGQgYSBsaXN0IG9mIHRhZyBvciBicmFuY2ggbmFtZXMgYXQgcG9zaXRpb24gcG9zCisjIHJldHVybnMgdGhlIG51bWJlciBvZiBuYW1lcyBpbnNlcnRlZAorcHJvYyBhcHBlbmRyZWZzIHtwb3MgaWRzIHZhcn0geworICAgIGdsb2JhbCBjdGV4dCBsaW5rbnVtIGN1cnZpZXcgJHZhciBtYXhyZWZzIHZpc2libGVyZWZzIG1haW5oZWFkaWQKKworICAgIGlmIHtbY2F0Y2ggeyRjdGV4dCBpbmRleCAkcG9zfV19IHsKKwlyZXR1cm4gMAorICAgIH0KKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgJGN0ZXh0IGRlbGV0ZSAkcG9zICIkcG9zIGxpbmVlbmQiCisgICAgc2V0IHRhZ3Mge30KKyAgICBmb3JlYWNoIGlkICRpZHMgeworCWZvcmVhY2ggdGFnIFtzZXQgJHZhclwoJGlkXCldIHsKKwkgICAgbGFwcGVuZCB0YWdzIFtsaXN0ICR0YWcgJGlkXQorCX0KKyAgICB9CisKKyAgICBzZXQgc2VwIHt9CisgICAgc2V0IHRhZ3MgW2xzb3J0IC1pbmRleCAwIC1kZWNyZWFzaW5nICR0YWdzXQorICAgIHNldCBudXRhZ3MgMAorCisgICAgaWYge1tsbGVuZ3RoICR0YWdzXSA+ICRtYXhyZWZzfSB7CisJIyBJZiB3ZSBhcmUgZGlzcGxheWluZyBoZWFkcywgYW5kIHRoZXJlIGFyZSB0b28gbWFueSwKKwkjIHNlZSBpZiB0aGVyZSBhcmUgc29tZSBpbXBvcnRhbnQgaGVhZHMgdG8gZGlzcGxheS4KKwkjIEN1cnJlbnRseSB0aGF0IGFyZSB0aGUgY3VycmVudCBoZWFkIGFuZCBoZWFkcyBsaXN0ZWQgaW4gJHZpc2libGVyZWZzIG9wdGlvbgorCXNldCBpdGFncyB7fQorCWlmIHskdmFyIGVxICJpZGhlYWRzIn0geworCSAgICBzZXQgdXRhZ3Mge30KKwkgICAgZm9yZWFjaCB0aSAkdGFncyB7CisJCXNldCBobmFtZSBbbGluZGV4ICR0aSAwXQorCQlzZXQgaWQgW2xpbmRleCAkdGkgMV0KKwkJaWYgeyhbbHNlYXJjaCAtZXhhY3QgJHZpc2libGVyZWZzICRobmFtZV0gIT0gLTEgfHwgJGlkIGVxICRtYWluaGVhZGlkKSAmJgorCQkgICAgW2xsZW5ndGggJGl0YWdzXSA8ICRtYXhyZWZzfSB7CisJCSAgICBsYXBwZW5kIGl0YWdzICR0aQorCQl9IGVsc2UgeworCQkgICAgbGFwcGVuZCB1dGFncyAkdGkKKwkJfQorCSAgICB9CisJICAgIHNldCB0YWdzICR1dGFncworCX0KKwlpZiB7JGl0YWdzIG5lIHt9fSB7CisJICAgIHNldCBzdHIgW21jICJhbmQgbWFueSBtb3JlIl0KKwkgICAgc2V0IHNlcCAiICIKKwl9IGVsc2UgeworCSAgICBzZXQgc3RyIFttYyAibWFueSJdCisJfQorCSRjdGV4dCBpbnNlcnQgJHBvcyAiJHN0ciAoW2xsZW5ndGggJHRhZ3NdKSIKKwlzZXQgbnV0YWdzIFtsbGVuZ3RoICR0YWdzXQorCXNldCB0YWdzICRpdGFncworICAgIH0KKworICAgIGZvcmVhY2ggdGkgJHRhZ3MgeworCXNldCBpZCBbbGluZGV4ICR0aSAxXQorCXNldCBsayBsaW5rJGxpbmtudW0KKwlpbmNyIGxpbmtudW0KKwkkY3RleHQgdGFnIGRlbGV0ZSAkbGsKKwkkY3RleHQgaW5zZXJ0ICRwb3MgJHNlcAorCSRjdGV4dCBpbnNlcnQgJHBvcyBbbGluZGV4ICR0aSAwXSAkbGsKKwlzZXRsaW5rICRpZCAkbGsKKwlzZXQgc2VwICIsICIKKyAgICB9CisgICAgJGN0ZXh0IHRhZyBhZGQgd3dyYXAgIiRwb3MgbGluZXN0YXJ0IiAiJHBvcyBsaW5lZW5kIgorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIHJldHVybiBbZXhwciB7W2xsZW5ndGggJHRhZ3NdICsgJG51dGFnc31dCit9CisKKyMgY2FsbGVkIHdoZW4gd2UgaGF2ZSBmaW5pc2hlZCBjb21wdXRpbmcgdGhlIG5lYXJieSB0YWdzCitwcm9jIGRpc3BuZWFydGFncyB7ZGVsYXl9IHsKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZCBzaG93bmVhcnRhZ3MgdGFncGhhc2UKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9IHx8ICEkc2hvd25lYXJ0YWdzfSByZXR1cm4KKyAgICBhZnRlciBjYW5jZWwgZGlzcG5leHR0YWcKKyAgICBpZiB7JGRlbGF5fSB7CisJYWZ0ZXIgMjAwIGRpc3BuZXh0dGFnCisJc2V0IHRhZ3BoYXNlIC0xCisgICAgfSBlbHNlIHsKKwlhZnRlciBpZGxlIGRpc3BuZXh0dGFnCisJc2V0IHRhZ3BoYXNlIDAKKyAgICB9Cit9CisKK3Byb2MgZGlzcG5leHR0YWcge30geworICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgY3VycmVudGlkIHNob3duZWFydGFncyB0YWdwaGFzZSBjdGV4dAorCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge30gfHwgISRzaG93bmVhcnRhZ3N9IHJldHVybgorICAgIHN3aXRjaCAtLSAkdGFncGhhc2UgeworCTAgeworCSAgICBzZXQgZHRhZ3MgW2Rlc2N0YWdzICRjdXJyZW50aWRdCisJICAgIGlmIHskZHRhZ3MgbmUge319IHsKKwkJYXBwZW5kcmVmcyBwcmVjZWRlcyAkZHRhZ3MgaWR0YWdzCisJICAgIH0KKwl9CisJMSB7CisJICAgIHNldCBhdGFncyBbYW5jdGFncyAkY3VycmVudGlkXQorCSAgICBpZiB7JGF0YWdzIG5lIHt9fSB7CisJCWFwcGVuZHJlZnMgZm9sbG93cyAkYXRhZ3MgaWR0YWdzCisJICAgIH0KKwl9CisJMiB7CisJICAgIHNldCBkaGVhZHMgW2Rlc2NoZWFkcyAkY3VycmVudGlkXQorCSAgICBpZiB7JGRoZWFkcyBuZSB7fX0geworCQlpZiB7W2FwcGVuZHJlZnMgYnJhbmNoICRkaGVhZHMgaWRoZWFkc10gPiAxCisJCSAgICAmJiBbJGN0ZXh0IGdldCAiYnJhbmNoIC0zYyJdIGVxICJoIn0geworCQkgICAgIyB0dXJuICJCcmFuY2giIGludG8gIkJyYW5jaGVzIgorCQkgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorCQkgICAgJGN0ZXh0IGluc2VydCAiYnJhbmNoIC0yYyIgImVzIgorCQkgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYge1tpbmNyIHRhZ3BoYXNlXSA8PSAyfSB7CisJYWZ0ZXIgaWRsZSBkaXNwbmV4dHRhZworICAgIH0KK30KKworcHJvYyBtYWtlX3NlY3NlbCB7aWR9IHsKKyAgICBnbG9iYWwgbGluZWh0YWcgbGluZW50YWcgbGluZWR0YWcgY2FudiBjYW52MiBjYW52MworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgbGluZWh0YWcoJGlkKV19IHJldHVybgorICAgICRjYW52IGRlbGV0ZSBzZWNzZWwKKyAgICBzZXQgdCBbZXZhbCAkY2FudiBjcmVhdGUgcmVjdCBbJGNhbnYgYmJveCAkbGluZWh0YWcoJGlkKV0gLW91dGxpbmUge3t9fSBcCisJICAgICAgIC10YWdzIHNlY3NlbCAtZmlsbCBbJGNhbnYgY2dldCAtc2VsZWN0YmFja2dyb3VuZF1dCisgICAgJGNhbnYgbG93ZXIgJHQKKyAgICAkY2FudjIgZGVsZXRlIHNlY3NlbAorICAgIHNldCB0IFtldmFsICRjYW52MiBjcmVhdGUgcmVjdCBbJGNhbnYyIGJib3ggJGxpbmVudGFnKCRpZCldIC1vdXRsaW5lIHt7fX0gXAorCSAgICAgICAtdGFncyBzZWNzZWwgLWZpbGwgWyRjYW52MiBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXV0KKyAgICAkY2FudjIgbG93ZXIgJHQKKyAgICAkY2FudjMgZGVsZXRlIHNlY3NlbAorICAgIHNldCB0IFtldmFsICRjYW52MyBjcmVhdGUgcmVjdCBbJGNhbnYzIGJib3ggJGxpbmVkdGFnKCRpZCldIC1vdXRsaW5lIHt7fX0gXAorCSAgICAgICAtdGFncyBzZWNzZWwgLWZpbGwgWyRjYW52MyBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXV0KKyAgICAkY2FudjMgbG93ZXIgJHQKK30KKworcHJvYyBtYWtlX2lkbWFyayB7aWR9IHsKKyAgICBnbG9iYWwgbGluZWh0YWcgY2FudiBmZ2NvbG9yCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBsaW5laHRhZygkaWQpXX0gcmV0dXJuCisgICAgJGNhbnYgZGVsZXRlIG1hcmtpZAorICAgIHNldCB0IFtldmFsICRjYW52IGNyZWF0ZSByZWN0IFskY2FudiBiYm94ICRsaW5laHRhZygkaWQpXSBcCisJICAgICAgIC10YWdzIG1hcmtpZCAtb3V0bGluZSAkZmdjb2xvcl0KKyAgICAkY2FudiByYWlzZSAkdAorfQorCitwcm9jIHNlbGVjdGxpbmUge2wgaXNuZXcge2Rlc2lyZWRfbG9jIHt9fSB7c3dpdGNoX3RvX3BhdGNoIDB9fSB7CisgICAgZ2xvYmFsIGNhbnYgY3RleHQgY29tbWl0aW5mbyBzZWxlY3RlZGxpbmUKKyAgICBnbG9iYWwgY2FudnkwIGxpbmVzcGMgcGFyZW50cyBjaGlsZHJlbiBjdXJ2aWV3CisgICAgZ2xvYmFsIGN1cnJlbnRpZCBzaGExZW50cnkKKyAgICBnbG9iYWwgY29tbWVudGVuZCBpZHRhZ3MgbGlua251bQorICAgIGdsb2JhbCBtZXJnZW1heCBudW1jb21taXRzIHBlbmRpbmdfc2VsZWN0CisgICAgZ2xvYmFsIGNtaXRtb2RlIHNob3duZWFydGFncyBhbGxjb21taXRzCisgICAgZ2xvYmFsIHRhcmdldHJvdyB0YXJnZXRpZCBsYXN0c2Nyb2xscm93cworICAgIGdsb2JhbCBhdXRvc2VsZWN0IGF1dG9zZWxsZW4ganVtcF90b19oZXJlCisgICAgZ2xvYmFsIHZpbmxpbmVkaWZmCisKKyAgICB1bnNldCAtbm9jb21wbGFpbiBwZW5kaW5nX3NlbGVjdAorICAgICRjYW52IGRlbGV0ZSBob3ZlcgorICAgIG5vcm1hbGxpbmUKKyAgICB1bnNlbF9yZWZsaXN0CisgICAgc3RvcGZpbmRpbmcKKyAgICBpZiB7JGwgPCAwIHx8ICRsID49ICRudW1jb21taXRzfSByZXR1cm4KKyAgICBzZXQgaWQgW2NvbW1pdG9ucm93ICRsXQorICAgIHNldCB0YXJnZXRpZCAkaWQKKyAgICBzZXQgdGFyZ2V0cm93ICRsCisgICAgc2V0IHNlbGVjdGVkbGluZSAkbAorICAgIHNldCBjdXJyZW50aWQgJGlkCisgICAgaWYgeyRsYXN0c2Nyb2xscm93cyA8ICRudW1jb21taXRzfSB7CisJc2V0Y2FudnNjcm9sbAorICAgIH0KKworICAgIGlmIHskY21pdG1vZGUgbmUgInBhdGNoIiAmJiAkc3dpdGNoX3RvX3BhdGNofSB7CisgICAgICAgIHNldCBjbWl0bW9kZSAicGF0Y2giCisgICAgfQorCisgICAgc2V0IHkgW2V4cHIgeyRjYW52eTAgKyAkbCAqICRsaW5lc3BjfV0KKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgc2V0IHl0b3AgW2V4cHIgeyR5IC0gJGxpbmVzcGMgLSAxfV0KKyAgICBzZXQgeWJvdCBbZXhwciB7JHkgKyAkbGluZXNwYyArIDF9XQorICAgIHNldCB3bm93IFskY2FudiB5dmlld10KKyAgICBzZXQgd3RvcCBbZXhwciB7W2xpbmRleCAkd25vdyAwXSAqICR5bWF4fV0KKyAgICBzZXQgd2JvdCBbZXhwciB7W2xpbmRleCAkd25vdyAxXSAqICR5bWF4fV0KKyAgICBzZXQgd2ggW2V4cHIgeyR3Ym90IC0gJHd0b3B9XQorICAgIHNldCBuZXd0b3AgJHd0b3AKKyAgICBpZiB7JHl0b3AgPCAkd3RvcH0geworCWlmIHskeWJvdCA8ICR3dG9wfSB7CisJICAgIHNldCBuZXd0b3AgW2V4cHIgeyR5IC0gJHdoIC8gMi4wfV0KKwl9IGVsc2UgeworCSAgICBzZXQgbmV3dG9wICR5dG9wCisJICAgIGlmIHskbmV3dG9wID4gJHd0b3AgLSAkbGluZXNwY30geworCQlzZXQgbmV3dG9wIFtleHByIHskd3RvcCAtICRsaW5lc3BjfV0KKwkgICAgfQorCX0KKyAgICB9IGVsc2VpZiB7JHlib3QgPiAkd2JvdH0geworCWlmIHskeXRvcCA+ICR3Ym90fSB7CisJICAgIHNldCBuZXd0b3AgW2V4cHIgeyR5IC0gJHdoIC8gMi4wfV0KKwl9IGVsc2UgeworCSAgICBzZXQgbmV3dG9wIFtleHByIHskeWJvdCAtICR3aH1dCisJICAgIGlmIHskbmV3dG9wIDwgJHd0b3AgKyAkbGluZXNwY30geworCQlzZXQgbmV3dG9wIFtleHByIHskd3RvcCArICRsaW5lc3BjfV0KKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgeyRuZXd0b3AgIT0gJHd0b3B9IHsKKwlpZiB7JG5ld3RvcCA8IDB9IHsKKwkgICAgc2V0IG5ld3RvcCAwCisJfQorCWFsbGNhbnZzIHl2aWV3IG1vdmV0byBbZXhwciB7JG5ld3RvcCAqIDEuMCAvICR5bWF4fV0KKwlkcmF3dmlzaWJsZQorICAgIH0KKworICAgIG1ha2Vfc2Vjc2VsICRpZAorCisgICAgaWYgeyRpc25ld30geworCWFkZHRvaGlzdG9yeSBbbGlzdCBzZWxieWlkICRpZCAwXSBzYXZlY21pdHBvcworICAgIH0KKworICAgICRzaGExZW50cnkgZGVsZXRlIDAgZW5kCisgICAgJHNoYTFlbnRyeSBpbnNlcnQgMCAkaWQKKyAgICBpZiB7JGF1dG9zZWxlY3R9IHsKKwkkc2hhMWVudHJ5IHNlbGVjdGlvbiByYW5nZSAwICRhdXRvc2VsbGVuCisgICAgfQorICAgIHJoaWdobGlnaHRfc2VsICRpZAorCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGNsZWFyX2N0ZXh0CisgICAgc2V0IGxpbmtudW0gMAorICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV19IHsKKwlnZXRjb21taXQgJGlkCisgICAgfQorICAgIHNldCBpbmZvICRjb21taXRpbmZvKCRpZCkKKyAgICBzZXQgZGF0ZSBbZm9ybWF0ZGF0ZSBbbGluZGV4ICRpbmZvIDJdXQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIkF1dGhvciJdOiBbbGluZGV4ICRpbmZvIDFdICAkZGF0ZVxuIgorICAgIHNldCBkYXRlIFtmb3JtYXRkYXRlIFtsaW5kZXggJGluZm8gNF1dCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlttYyAiQ29tbWl0dGVyIl06IFtsaW5kZXggJGluZm8gM10gICRkYXRlXG4iCisgICAgaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV19IHsKKwkkY3RleHQgaW5zZXJ0IGVuZCBbbWMgIlRhZ3M6Il0KKwlmb3JlYWNoIHRhZyAkaWR0YWdzKCRpZCkgeworCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiICR0YWciCisJfQorCSRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKyAgICB9CisKKyAgICBzZXQgaGVhZGVycyB7fQorICAgIHNldCBvbGRzICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCkKKyAgICBpZiB7W2xsZW5ndGggJG9sZHNdID4gMX0geworCXNldCBucCAwCisJZm9yZWFjaCBwICRvbGRzIHsKKwkgICAgaWYgeyRucCA+PSAkbWVyZ2VtYXh9IHsKKwkJc2V0IHRhZyBtbWF4CisJICAgIH0gZWxzZSB7CisJCXNldCB0YWcgbSRucAorCSAgICB9CisJICAgICRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIlBhcmVudCJdOiAiICR0YWcKKwkgICAgYXBwZW5kd2l0aGxpbmtzIFtjb21taXRfZGVzY3JpcHRvciAkcF0ge30KKwkgICAgaW5jciBucAorCX0KKyAgICB9IGVsc2UgeworCWZvcmVhY2ggcCAkb2xkcyB7CisJICAgIGFwcGVuZCBoZWFkZXJzICJbbWMgIlBhcmVudCJdOiBbY29tbWl0X2Rlc2NyaXB0b3IgJHBdIgorCX0KKyAgICB9CisKKyAgICBmb3JlYWNoIGMgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgeworCWFwcGVuZCBoZWFkZXJzICJbbWMgIkNoaWxkIl06ICBbY29tbWl0X2Rlc2NyaXB0b3IgJGNdIgorICAgIH0KKworICAgICMgbWFrZSBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBTSEExIElEIGJlIGEgY2xpY2thYmxlIGxpbmsKKyAgICBhcHBlbmR3aXRobGlua3MgJGhlYWRlcnMge30KKyAgICBpZiB7JHNob3duZWFydGFnc30geworCWlmIHshW2luZm8gZXhpc3RzIGFsbGNvbW1pdHNdfSB7CisJICAgIGdldGFsbGNvbW1pdHMKKwl9CisJJGN0ZXh0IGluc2VydCBlbmQgIlttYyAiQnJhbmNoIl06ICIKKwkkY3RleHQgbWFyayBzZXQgYnJhbmNoICJlbmQgLTFjIgorCSRjdGV4dCBtYXJrIGdyYXZpdHkgYnJhbmNoIGxlZnQKKwkkY3RleHQgaW5zZXJ0IGVuZCAiXG5bbWMgIkZvbGxvd3MiXTogIgorCSRjdGV4dCBtYXJrIHNldCBmb2xsb3dzICJlbmQgLTFjIgorCSRjdGV4dCBtYXJrIGdyYXZpdHkgZm9sbG93cyBsZWZ0CisJJGN0ZXh0IGluc2VydCBlbmQgIlxuW21jICJQcmVjZWRlcyJdOiAiCisJJGN0ZXh0IG1hcmsgc2V0IHByZWNlZGVzICJlbmQgLTFjIgorCSRjdGV4dCBtYXJrIGdyYXZpdHkgcHJlY2VkZXMgbGVmdAorCSRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKwlkaXNwbmVhcnRhZ3MgMQorICAgIH0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisgICAgc2V0IGNvbW1lbnQgW2xpbmRleCAkaW5mbyA1XQorICAgIGlmIHtbc3RyaW5nIGZpcnN0ICJcciIgJGNvbW1lbnRdID49IDB9IHsKKwlzZXQgY29tbWVudCBbc3RyaW5nIG1hcCB7IlxyIiAiXG4gICAgIn0gJGNvbW1lbnRdCisgICAgfQorICAgIGFwcGVuZHdpdGhsaW5rcyAkY29tbWVudCB7Y29tbWVudH0KKworICAgICRjdGV4dCB0YWcgcmVtb3ZlIGZvdW5kIDEuMCBlbmQKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICBzZXQgY29tbWVudGVuZCBbJGN0ZXh0IGluZGV4ICJlbmQgLSAxYyJdCisKKyAgICBzZXQganVtcF90b19oZXJlICRkZXNpcmVkX2xvYworICAgIGluaXRfZmxpc3QgW21jICJDb21tZW50cyJdCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHsKKwlnZXR0cmVlICRpZAorICAgIH0gZWxzZWlmIHskdmlubGluZWRpZmYoJGN1cnZpZXcpID09IDF9IHsKKwlzaG93aW5saW5lZGlmZiAkaWQKKyAgICB9IGVsc2VpZiB7W2xsZW5ndGggJG9sZHNdIDw9IDF9IHsKKwlzdGFydGRpZmYgJGlkCisgICAgfSBlbHNlIHsKKwltZXJnZWRpZmYgJGlkCisgICAgfQorfQorCitwcm9jIHNlbGZpcnN0bGluZSB7fSB7CisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNlbGVjdGxpbmUgMCAxCit9CisKK3Byb2Mgc2VsbGFzdGxpbmUge30geworICAgIGdsb2JhbCBudW1jb21taXRzCisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNldCBsIFtleHByIHskbnVtY29tbWl0cyAtIDF9XQorICAgIHNlbGVjdGxpbmUgJGwgMQorfQorCitwcm9jIHNlbG5leHRsaW5lIHtkaXJ9IHsKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCisgICAgZm9jdXMgLgorICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSByZXR1cm4KKyAgICBzZXQgbCBbZXhwciB7JHNlbGVjdGVkbGluZSArICRkaXJ9XQorICAgIHVubWFya21hdGNoZXMKKyAgICBzZWxlY3RsaW5lICRsIDEKK30KKworcHJvYyBzZWxuZXh0cGFnZSB7ZGlyfSB7CisgICAgZ2xvYmFsIGNhbnYgbGluZXNwYyBzZWxlY3RlZGxpbmUgbnVtY29tbWl0cworCisgICAgc2V0IGxwcCBbZXhwciB7KFt3aW5mbyBoZWlnaHQgJGNhbnZdIC0gMikgLyAkbGluZXNwY31dCisgICAgaWYgeyRscHAgPCAxfSB7CisJc2V0IGxwcCAxCisgICAgfQorICAgIGFsbGNhbnZzIHl2aWV3IHNjcm9sbCBbZXhwciB7JGRpciAqICRscHB9XSB1bml0cworICAgIGRyYXd2aXNpYmxlCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgorICAgIHNldCBsIFtleHByIHskc2VsZWN0ZWRsaW5lICsgJGRpciAqICRscHB9XQorICAgIGlmIHskbCA8IDB9IHsKKwlzZXQgbCAwCisgICAgfSBlbHNlaWYgeyRsID49ICRudW1jb21taXRzfSB7CisgICAgICAgIHNldCBsIFtleHByICRudW1jb21taXRzIC0gMV0KKyAgICB9CisgICAgdW5tYXJrbWF0Y2hlcworICAgIHNlbGVjdGxpbmUgJGwgMQorfQorCitwcm9jIHVuc2VsZWN0bGluZSB7fSB7CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjdXJyZW50aWQKKworICAgIHNldCBzZWxlY3RlZGxpbmUge30KKyAgICB1bnNldCAtbm9jb21wbGFpbiBjdXJyZW50aWQKKyAgICBhbGxjYW52cyBkZWxldGUgc2Vjc2VsCisgICAgcmhpZ2hsaWdodF9ub25lCit9CisKK3Byb2MgcmVzZWxlY3RsaW5lIHt9IHsKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCisKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBuZSB7fX0geworCXNlbGVjdGxpbmUgJHNlbGVjdGVkbGluZSAwCisgICAgfQorfQorCitwcm9jIGFkZHRvaGlzdG9yeSB7Y21kIHtzYXZlcHJvYyB7fX19IHsKKyAgICBnbG9iYWwgaGlzdG9yeSBoaXN0b3J5aW5kZXggY3VydmlldworCisgICAgdW5zZXRfcG9zdmFycworICAgIHNhdmVfcG9zaXRpb24KKyAgICBzZXQgZWx0IFtsaXN0ICRjdXJ2aWV3ICRjbWQgJHNhdmVwcm9jIHt9XQorICAgIGlmIHskaGlzdG9yeWluZGV4ID4gMAorCSYmIFtsaW5kZXggJGhpc3RvcnkgW2V4cHIgeyRoaXN0b3J5aW5kZXggLSAxfV1dID09ICRlbHR9IHsKKwlyZXR1cm4KKyAgICB9CisKKyAgICBpZiB7JGhpc3RvcnlpbmRleCA8IFtsbGVuZ3RoICRoaXN0b3J5XX0geworCXNldCBoaXN0b3J5IFtscmVwbGFjZSAkaGlzdG9yeSAkaGlzdG9yeWluZGV4IGVuZCAkZWx0XQorICAgIH0gZWxzZSB7CisJbGFwcGVuZCBoaXN0b3J5ICRlbHQKKyAgICB9CisgICAgaW5jciBoaXN0b3J5aW5kZXgKKyAgICBpZiB7JGhpc3RvcnlpbmRleCA+IDF9IHsKKwkudGYuYmFyLmxlZnRidXQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgfSBlbHNlIHsKKwkudGYuYmFyLmxlZnRidXQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICB9CisgICAgLnRmLmJhci5yaWdodGJ1dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCisjIHNhdmUgdGhlIHNjcm9sbGluZyBwb3NpdGlvbiBvZiB0aGUgZGlmZiBkaXNwbGF5IHBhbmUKK3Byb2Mgc2F2ZV9wb3NpdGlvbiB7fSB7CisgICAgZ2xvYmFsIGhpc3RvcnlpbmRleCBoaXN0b3J5CisKKyAgICBpZiB7JGhpc3RvcnlpbmRleCA8IDF9IHJldHVybgorICAgIHNldCBoaSBbZXhwciB7JGhpc3RvcnlpbmRleCAtIDF9XQorICAgIHNldCBmbiBbbGluZGV4ICRoaXN0b3J5ICRoaSAyXQorICAgIGlmIHskZm4gbmUge319IHsKKwlsc2V0IGhpc3RvcnkgJGhpIDMgW2V2YWwgJGZuXQorICAgIH0KK30KKworcHJvYyB1bnNldF9wb3N2YXJzIHt9IHsKKyAgICBnbG9iYWwgbGFzdF9wb3N2YXJzCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGxhc3RfcG9zdmFyc119IHsKKwlmb3JlYWNoIHt2YXIgdmFsfSAkbGFzdF9wb3N2YXJzIHsKKwkgICAgZ2xvYmFsICR2YXIKKwkgICAgdW5zZXQgLW5vY29tcGxhaW4gJHZhcgorCX0KKwl1bnNldCBsYXN0X3Bvc3ZhcnMKKyAgICB9Cit9CisKK3Byb2MgZ29kbyB7ZWx0fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgbGFzdF9wb3N2YXJzCisKKyAgICBzZXQgdmlldyBbbGluZGV4ICRlbHQgMF0KKyAgICBzZXQgY21kIFtsaW5kZXggJGVsdCAxXQorICAgIHNldCBwdiBbbGluZGV4ICRlbHQgM10KKyAgICBpZiB7JGN1cnZpZXcgIT0gJHZpZXd9IHsKKwlzaG93dmlldyAkdmlldworICAgIH0KKyAgICB1bnNldF9wb3N2YXJzCisgICAgZm9yZWFjaCB7dmFyIHZhbH0gJHB2IHsKKwlnbG9iYWwgJHZhcgorCXNldCAkdmFyICR2YWwKKyAgICB9CisgICAgc2V0IGxhc3RfcG9zdmFycyAkcHYKKyAgICBldmFsICRjbWQKK30KKworcHJvYyBnb2JhY2sge30geworICAgIGdsb2JhbCBoaXN0b3J5IGhpc3RvcnlpbmRleAorICAgIGZvY3VzIC4KKworICAgIGlmIHskaGlzdG9yeWluZGV4ID4gMX0geworCXNhdmVfcG9zaXRpb24KKwlpbmNyIGhpc3RvcnlpbmRleCAtMQorCWdvZG8gW2xpbmRleCAkaGlzdG9yeSBbZXhwciB7JGhpc3RvcnlpbmRleCAtIDF9XV0KKwkudGYuYmFyLnJpZ2h0YnV0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIH0KKyAgICBpZiB7JGhpc3RvcnlpbmRleCA8PSAxfSB7CisJLnRmLmJhci5sZWZ0YnV0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgfQorfQorCitwcm9jIGdvZm9ydyB7fSB7CisgICAgZ2xvYmFsIGhpc3RvcnkgaGlzdG9yeWluZGV4CisgICAgZm9jdXMgLgorCisgICAgaWYgeyRoaXN0b3J5aW5kZXggPCBbbGxlbmd0aCAkaGlzdG9yeV19IHsKKwlzYXZlX3Bvc2l0aW9uCisJc2V0IGNtZCBbbGluZGV4ICRoaXN0b3J5ICRoaXN0b3J5aW5kZXhdCisJaW5jciBoaXN0b3J5aW5kZXgKKwlnb2RvICRjbWQKKwkudGYuYmFyLmxlZnRidXQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgfQorICAgIGlmIHskaGlzdG9yeWluZGV4ID49IFtsbGVuZ3RoICRoaXN0b3J5XX0geworCS50Zi5iYXIucmlnaHRidXQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICB9Cit9CisKK3Byb2MgZ29fdG9fcGFyZW50IHtpfSB7CisgICAgZ2xvYmFsIHBhcmVudHMgY3VydmlldyB0YXJnZXRpZAorICAgIHNldCBwcyAkcGFyZW50cygkY3VydmlldywkdGFyZ2V0aWQpCisgICAgaWYge1tsbGVuZ3RoICRwc10gPj0gJGl9IHsKKwlzZWxieWlkIFtsaW5kZXggJHBzIFtleHByICRpIC0gMV1dCisgICAgfQorfQorCitwcm9jIGdldHRyZWUge2lkfSB7CisgICAgZ2xvYmFsIHRyZWVmaWxlbGlzdCB0cmVlaWRsaXN0IGRpZmZpZHMgZGlmZm1lcmdlaWQgdHJlZXBlbmRpbmcKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBkaWZmaWRzICRpZAorICAgIHVuc2V0IC1ub2NvbXBsYWluIGRpZmZtZXJnZWlkCisgICAgaWYgeyFbaW5mbyBleGlzdHMgdHJlZWZpbGVsaXN0KCRpZCldfSB7CisJaWYgeyFbaW5mbyBleGlzdHMgdHJlZXBlbmRpbmddfSB7CisJICAgIGlmIHskaWQgZXEgJG51bGxpZH0geworCQlzZXQgY21kIFtsaXN0IHwgZ2l0IGxzLWZpbGVzXQorCSAgICB9IGVsc2VpZiB7JGlkIGVxICRudWxsaWQyfSB7CisJCXNldCBjbWQgW2xpc3QgfCBnaXQgbHMtZmlsZXMgLS1zdGFnZSAtdF0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGNtZCBbbGlzdCB8IGdpdCBscy10cmVlIC1yICRpZF0KKwkgICAgfQorCSAgICBpZiB7W2NhdGNoIHtzZXQgZ3RmIFtvcGVuICRjbWQgcl19XX0geworCQlyZXR1cm4KKwkgICAgfQorCSAgICBzZXQgdHJlZXBlbmRpbmcgJGlkCisJICAgIHNldCB0cmVlZmlsZWxpc3QoJGlkKSB7fQorCSAgICBzZXQgdHJlZWlkbGlzdCgkaWQpIHt9CisJICAgIGZjb25maWd1cmUgJGd0ZiAtYmxvY2tpbmcgMCAtZW5jb2RpbmcgYmluYXJ5CisJICAgIGZpbGVydW4gJGd0ZiBbbGlzdCBnZXR0cmVlbGluZSAkZ3RmICRpZF0KKwl9CisgICAgfSBlbHNlIHsKKwlzZXRmaWxlbGlzdCAkaWQKKyAgICB9Cit9CisKK3Byb2MgZ2V0dHJlZWxpbmUge2d0ZiBpZH0geworICAgIGdsb2JhbCB0cmVlZmlsZWxpc3QgdHJlZWlkbGlzdCB0cmVlcGVuZGluZyBjbWl0bW9kZSBkaWZmaWRzIG51bGxpZCBudWxsaWQyCisKKyAgICBzZXQgbmwgMAorICAgIHdoaWxlIHtbaW5jciBubF0gPD0gMTAwMCAmJiBbZ2V0cyAkZ3RmIGxpbmVdID49IDB9IHsKKwlpZiB7JGRpZmZpZHMgZXEgJG51bGxpZH0geworCSAgICBzZXQgZm5hbWUgJGxpbmUKKwl9IGVsc2UgeworCSAgICBzZXQgaSBbc3RyaW5nIGZpcnN0ICJcdCIgJGxpbmVdCisJICAgIGlmIHskaSA8IDB9IGNvbnRpbnVlCisJICAgIHNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIHskaSsxfV0gZW5kXQorCSAgICBzZXQgbGluZSBbc3RyaW5nIHJhbmdlICRsaW5lIDAgW2V4cHIgeyRpLTF9XV0KKwkgICAgaWYgeyRkaWZmaWRzIG5lICRudWxsaWQyICYmIFtsaW5kZXggJGxpbmUgMV0gbmUgImJsb2IifSBjb250aW51ZQorCSAgICBzZXQgc2hhMSBbbGluZGV4ICRsaW5lIDJdCisJICAgIGxhcHBlbmQgdHJlZWlkbGlzdCgkaWQpICRzaGExCisJfQorCWlmIHtbc3RyaW5nIGluZGV4ICRmbmFtZSAwXSBlcSAiXCIifSB7CisJICAgIHNldCBmbmFtZSBbbGluZGV4ICRmbmFtZSAwXQorCX0KKwlzZXQgZm5hbWUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRmbmFtZV0KKwlsYXBwZW5kIHRyZWVmaWxlbGlzdCgkaWQpICRmbmFtZQorICAgIH0KKyAgICBpZiB7IVtlb2YgJGd0Zl19IHsKKwlyZXR1cm4gW2V4cHIgeyRubCA+PSAxMDAwPyAyOiAxfV0KKyAgICB9CisgICAgY2xvc2UgJGd0ZgorICAgIHVuc2V0IHRyZWVwZW5kaW5nCisgICAgaWYgeyRjbWl0bW9kZSBuZSAidHJlZSJ9IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBkaWZmbWVyZ2VpZF19IHsKKwkgICAgZ2V0dHJlZWRpZmZzICRkaWZmaWRzCisJfQorICAgIH0gZWxzZWlmIHskaWQgbmUgJGRpZmZpZHN9IHsKKwlnZXR0cmVlICRkaWZmaWRzCisgICAgfSBlbHNlIHsKKwlzZXRmaWxlbGlzdCAkaWQKKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworcHJvYyBzaG93ZmlsZSB7Zn0geworICAgIGdsb2JhbCB0cmVlZmlsZWxpc3QgdHJlZWlkbGlzdCBkaWZmaWRzIG51bGxpZCBudWxsaWQyCisgICAgZ2xvYmFsIGN0ZXh0X2ZpbGVfbmFtZXMgY3RleHRfZmlsZV9saW5lcworICAgIGdsb2JhbCBjdGV4dCBjb21tZW50ZW5kCisKKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHRyZWVmaWxlbGlzdCgkZGlmZmlkcykgJGZdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHMsICRmIG5vdCBpbiBsaXN0IGZvciBpZCAkZGlmZmlkcyIKKwlyZXR1cm4KKyAgICB9CisgICAgaWYgeyRkaWZmaWRzIGVxICRudWxsaWR9IHsKKwlpZiB7W2NhdGNoIHtzZXQgYmYgW29wZW4gJGYgcl19IGVycl19IHsKKwkgICAgcHV0cyAib29wcywgY2FuJ3QgcmVhZCAkZjogJGVyciIKKwkgICAgcmV0dXJuCisJfQorICAgIH0gZWxzZSB7CisJc2V0IGJsb2IgW2xpbmRleCAkdHJlZWlkbGlzdCgkZGlmZmlkcykgJGldCisJaWYge1tjYXRjaCB7c2V0IGJmIFtvcGVuIFtjb25jYXQgfCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl0gcl19IGVycl19IHsKKwkgICAgcHV0cyAib29wcywgZXJyb3IgcmVhZGluZyBibG9iICRibG9iOiAkZXJyIgorCSAgICByZXR1cm4KKwl9CisgICAgfQorICAgIGZjb25maWd1cmUgJGJmIC1ibG9ja2luZyAwIC1lbmNvZGluZyBbZ2V0X3BhdGhfZW5jb2RpbmcgJGZdCisgICAgZmlsZXJ1biAkYmYgW2xpc3QgZ2V0YmxvYmxpbmUgJGJmICRkaWZmaWRzXQorICAgICRjdGV4dCBjb25maWcgLXN0YXRlIG5vcm1hbAorICAgIGNsZWFyX2N0ZXh0ICRjb21tZW50ZW5kCisgICAgbGFwcGVuZCBjdGV4dF9maWxlX25hbWVzICRmCisgICAgbGFwcGVuZCBjdGV4dF9maWxlX2xpbmVzIFtsaW5kZXggW3NwbGl0ICRjb21tZW50ZW5kICIuIl0gMF0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIiRmXG4iIGZpbGVzZXAKKyAgICAkY3RleHQgY29uZmlnIC1zdGF0ZSBkaXNhYmxlZAorICAgICRjdGV4dCB5dmlldyAkY29tbWVudGVuZAorICAgIHNldHRhYnMgMAorfQorCitwcm9jIGdldGJsb2JsaW5lIHtiZiBpZH0geworICAgIGdsb2JhbCBkaWZmaWRzIGNtaXRtb2RlIGN0ZXh0CisKKyAgICBpZiB7JGlkIG5lICRkaWZmaWRzIHx8ICRjbWl0bW9kZSBuZSAidHJlZSJ9IHsKKwljYXRjaCB7Y2xvc2UgJGJmfQorCXJldHVybiAwCisgICAgfQorICAgICRjdGV4dCBjb25maWcgLXN0YXRlIG5vcm1hbAorICAgIHNldCBubCAwCisgICAgd2hpbGUge1tpbmNyIG5sXSA8PSAxMDAwICYmIFtnZXRzICRiZiBsaW5lXSA+PSAwfSB7CisJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iCisgICAgfQorICAgIGlmIHtbZW9mICRiZl19IHsKKwlnbG9iYWwganVtcF90b19oZXJlIGN0ZXh0X2ZpbGVfbmFtZXMgY29tbWVudGVuZAorCisJIyBkZWxldGUgbGFzdCBuZXdsaW5lCisJJGN0ZXh0IGRlbGV0ZSAiZW5kIC0gMmMiICJlbmQgLSAxYyIKKwljbG9zZSAkYmYKKwlpZiB7JGp1bXBfdG9faGVyZSBuZSB7fSAmJgorCSAgICBbbGluZGV4ICRqdW1wX3RvX2hlcmUgMF0gZXEgW2xpbmRleCAkY3RleHRfZmlsZV9uYW1lcyAwXX0geworCSAgICBzZXQgbG51bSBbZXhwciB7W2xpbmRleCAkanVtcF90b19oZXJlIDFdICsKKwkJCSAgICBbbGluZGV4IFtzcGxpdCAkY29tbWVudGVuZCAuXSAwXX1dCisJICAgIG1hcmtfY3RleHRfbGluZSAkbG51bQorCX0KKwkkY3RleHQgY29uZmlnIC1zdGF0ZSBkaXNhYmxlZAorCXJldHVybiAwCisgICAgfQorICAgICRjdGV4dCBjb25maWcgLXN0YXRlIGRpc2FibGVkCisgICAgcmV0dXJuIFtleHByIHskbmwgPj0gMTAwMD8gMjogMX1dCit9CisKK3Byb2MgbWFya19jdGV4dF9saW5lIHtsbnVtfSB7CisgICAgZ2xvYmFsIGN0ZXh0IG1hcmtiZ2NvbG9yCisKKyAgICAkY3RleHQgdGFnIGRlbGV0ZSBvbWFyaworICAgICRjdGV4dCB0YWcgYWRkIG9tYXJrICRsbnVtLjAgIiRsbnVtLjAgKyAxIGxpbmUiCisgICAgJGN0ZXh0IHRhZyBjb25mIG9tYXJrIC1iYWNrZ3JvdW5kICRtYXJrYmdjb2xvcgorICAgICRjdGV4dCBzZWUgJGxudW0uMAorfQorCitwcm9jIG1lcmdlZGlmZiB7aWR9IHsKKyAgICBnbG9iYWwgZGlmZm1lcmdlaWQKKyAgICBnbG9iYWwgZGlmZmlkcyB0cmVlZGlmZnMKKyAgICBnbG9iYWwgcGFyZW50cyBjdXJ2aWV3CisKKyAgICBzZXQgZGlmZm1lcmdlaWQgJGlkCisgICAgc2V0IGRpZmZpZHMgJGlkCisgICAgc2V0IHRyZWVkaWZmcygkaWQpIHt9CisgICAgc2V0IG5wIFtsbGVuZ3RoICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCldCisgICAgc2V0dGFicyAkbnAKKyAgICBnZXRibG9iZGlmZnMgJGlkCit9CisKK3Byb2Mgc3RhcnRkaWZmIHtpZHN9IHsKKyAgICBnbG9iYWwgdHJlZWRpZmZzIGRpZmZpZHMgdHJlZXBlbmRpbmcgZGlmZm1lcmdlaWQgbnVsbGlkIG51bGxpZDIKKworICAgIHNldHRhYnMgMQorICAgIHNldCBkaWZmaWRzICRpZHMKKyAgICB1bnNldCAtbm9jb21wbGFpbiBkaWZmbWVyZ2VpZAorICAgIGlmIHshW2luZm8gZXhpc3RzIHRyZWVkaWZmcygkaWRzKV0gfHwKKwlbbHNlYXJjaCAtZXhhY3QgJGlkcyAkbnVsbGlkXSA+PSAwIHx8CisJW2xzZWFyY2ggLWV4YWN0ICRpZHMgJG51bGxpZDJdID49IDB9IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyB0cmVlcGVuZGluZ119IHsKKwkgICAgZ2V0dHJlZWRpZmZzICRpZHMKKwl9CisgICAgfSBlbHNlIHsKKwlhZGR0b2NmbGlzdCAkaWRzCisgICAgfQorfQorCitwcm9jIHNob3dpbmxpbmVkaWZmIHtpZHN9IHsKKyAgICBnbG9iYWwgY29tbWl0aW5mbyBjb21taXRkYXRhIGN0ZXh0CisgICAgZ2xvYmFsIHRyZWVkaWZmcworCisgICAgc2V0IGluZm8gJGNvbW1pdGluZm8oJGlkcykKKyAgICBzZXQgZGlmZiBbbGluZGV4ICRpbmZvIDddCisgICAgc2V0IGRpZmZsaW5lcyBbc3BsaXQgJGRpZmYgIlxuIl0KKworICAgIGluaXRibG9iZGlmZnZhcnMKKyAgICBzZXQgdHJlZWRpZmYge30KKworICAgIHNldCBpbmhkciAwCisgICAgZm9yZWFjaCBsaW5lICRkaWZmbGluZXMgeworCWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggNSAiZGlmZiAiICRsaW5lXX0geworCSAgICBzZXQgaW5oZHIgMQorCX0gZWxzZWlmIHskaW5oZHIgJiYgIVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDQgIisrKyAiICRsaW5lXX0geworCSAgICAjIG9mZnNldCBhbHNvIGFjY291bnRzIGZvciB0aGUgYi8gcHJlZml4CisJICAgIGxhcHBlbmQgdHJlZWRpZmYgW3N0cmluZyByYW5nZSAkbGluZSA2IGVuZF0KKwkgICAgc2V0IGluaGRyIDAKKwl9CisgICAgfQorCisgICAgc2V0IHRyZWVkaWZmcygkaWRzKSAkdHJlZWRpZmYKKyAgICBhZGRfZmxpc3QgJHRyZWVkaWZmCisKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgZm9yZWFjaCBsaW5lICRkaWZmbGluZXMgeworCXBhcnNlYmxvYmRpZmZsaW5lICRpZHMgJGxpbmUKKyAgICB9CisgICAgbWF5YmVfc2Nyb2xsX2N0ZXh0IDEKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKK30KKworIyBJZiB0aGUgZmlsZW5hbWUgKG5hbWUpIGlzIHVuZGVyIGFueSBvZiB0aGUgcGFzc2VkIGZpbHRlciBwYXRocworIyB0aGVuIHJldHVybiB0cnVlIHRvIGluY2x1ZGUgdGhlIGZpbGUgaW4gdGhlIGxpc3RpbmcuCitwcm9jIHBhdGhfZmlsdGVyIHtmaWx0ZXIgbmFtZX0geworICAgIHNldCB3b3JrdHJlZSBbZ2l0d29ya3RyZWVdCisgICAgZm9yZWFjaCBwICRmaWx0ZXIgeworCXNldCBmcV9wIFtmaWxlIG5vcm1hbGl6ZSAkcF0KKwlzZXQgZnFfbiBbZmlsZSBub3JtYWxpemUgW2ZpbGUgam9pbiAkd29ya3RyZWUgJG5hbWVdXQorCWlmIHtbc3RyaW5nIG1hdGNoIFtmaWxlIG5vcm1hbGl6ZSAkZnFfcF0qICRmcV9uXX0geworCSAgICByZXR1cm4gMQorCX0KKyAgICB9CisgICAgcmV0dXJuIDAKK30KKworcHJvYyBhZGR0b2NmbGlzdCB7aWRzfSB7CisgICAgZ2xvYmFsIHRyZWVkaWZmcworCisgICAgYWRkX2ZsaXN0ICR0cmVlZGlmZnMoJGlkcykKKyAgICBnZXRibG9iZGlmZnMgJGlkcworfQorCitwcm9jIGRpZmZjbWQge2lkcyBmbGFnc30geworICAgIGdsb2JhbCBsb2dfc2hvd3Jvb3QgbnVsbGlkIG51bGxpZDIgZ2l0X3ZlcnNpb24KKworICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkaWRzICRudWxsaWRdCisgICAgc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRpZHMgJG51bGxpZDJdCisgICAgaWYgeyRpID49IDB9IHsKKwlpZiB7W2xsZW5ndGggJGlkc10gPiAxICYmICRqIDwgMH0geworCSAgICAjIGNvbXBhcmluZyB3b3JraW5nIGRpcmVjdG9yeSB3aXRoIHNvbWUgc3BlY2lmaWMgcmV2aXNpb24KKwkgICAgc2V0IGNtZCBbY29uY2F0IHwgZ2l0IGRpZmYtaW5kZXggJGZsYWdzXQorCSAgICBpZiB7JGkgPT0gMH0geworCQlsYXBwZW5kIGNtZCAtUiBbbGluZGV4ICRpZHMgMV0KKwkgICAgfSBlbHNlIHsKKwkJbGFwcGVuZCBjbWQgW2xpbmRleCAkaWRzIDBdCisJICAgIH0KKwl9IGVsc2UgeworCSAgICAjIGNvbXBhcmluZyB3b3JraW5nIGRpcmVjdG9yeSB3aXRoIGluZGV4CisJICAgIHNldCBjbWQgW2NvbmNhdCB8IGdpdCBkaWZmLWZpbGVzICRmbGFnc10KKwkgICAgaWYgeyRqID09IDF9IHsKKwkJbGFwcGVuZCBjbWQgLVIKKwkgICAgfQorCX0KKyAgICB9IGVsc2VpZiB7JGogPj0gMH0geworCWlmIHtbcGFja2FnZSB2Y29tcGFyZSAkZ2l0X3ZlcnNpb24gIjEuNy4yIl0gPj0gMH0geworCSAgICBzZXQgZmxhZ3MgIiRmbGFncyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IgorCX0KKwlzZXQgY21kIFtjb25jYXQgfCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkZmxhZ3NdCisJaWYge1tsbGVuZ3RoICRpZHNdID4gMX0geworCSAgICAjIGNvbXBhcmluZyBpbmRleCB3aXRoIHNwZWNpZmljIHJldmlzaW9uCisJICAgIGlmIHskaiA9PSAwfSB7CisJCWxhcHBlbmQgY21kIC1SIFtsaW5kZXggJGlkcyAxXQorCSAgICB9IGVsc2UgeworCQlsYXBwZW5kIGNtZCBbbGluZGV4ICRpZHMgMF0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgICMgY29tcGFyaW5nIGluZGV4IHdpdGggSEVBRAorCSAgICBsYXBwZW5kIGNtZCBIRUFECisJfQorICAgIH0gZWxzZSB7CisJaWYgeyRsb2dfc2hvd3Jvb3R9IHsKKwkgICAgbGFwcGVuZCBmbGFncyAtLXJvb3QKKwl9CisJc2V0IGNtZCBbY29uY2F0IHwgZ2l0IGRpZmYtdHJlZSAtciAkZmxhZ3MgJGlkc10KKyAgICB9CisgICAgcmV0dXJuICRjbWQKK30KKworcHJvYyBnZXR0cmVlZGlmZnMge2lkc30geworICAgIGdsb2JhbCB0cmVlZGlmZiB0cmVlcGVuZGluZyBsaW1pdGRpZmZzIHZmaWxlbGltaXQgY3VydmlldworCisgICAgc2V0IGNtZCBbZGlmZmNtZCAkaWRzIHstLW5vLWNvbW1pdC1pZH1dCisgICAgaWYgeyRsaW1pdGRpZmZzICYmICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KSBuZSB7fX0geworCSAgICBzZXQgY21kIFtjb25jYXQgJGNtZCAtLSAkdmZpbGVsaW1pdCgkY3VydmlldyldCisgICAgfQorICAgIGlmIHtbY2F0Y2gge3NldCBnZHRmIFtvcGVuICRjbWQgcl19XX0gcmV0dXJuCisKKyAgICBzZXQgdHJlZXBlbmRpbmcgJGlkcworICAgIHNldCB0cmVlZGlmZiB7fQorICAgIGZjb25maWd1cmUgJGdkdGYgLWJsb2NraW5nIDAgLWVuY29kaW5nIGJpbmFyeQorICAgIGZpbGVydW4gJGdkdGYgW2xpc3QgZ2V0dHJlZWRpZmZsaW5lICRnZHRmICRpZHNdCit9CisKK3Byb2MgZ2V0dHJlZWRpZmZsaW5lIHtnZHRmIGlkc30geworICAgIGdsb2JhbCB0cmVlZGlmZiB0cmVlZGlmZnMgdHJlZXBlbmRpbmcgZGlmZmlkcyBkaWZmbWVyZ2VpZAorICAgIGdsb2JhbCBjbWl0bW9kZSB2ZmlsZWxpbWl0IGN1cnZpZXcgbGltaXRkaWZmcyBwZXJmaWxlX2F0dHJzCisKKyAgICBzZXQgbnIgMAorICAgIHNldCBzdWJsaXN0IHt9CisgICAgc2V0IG1heCAxMDAwCisgICAgaWYgeyRwZXJmaWxlX2F0dHJzfSB7CisJIyBjYWNoZV9naXRhdHRyIGlzIHNsb3csIGFuZCBldmVuIHNsb3dlciBvbiB3aW4zMiB3aGVyZSB3ZQorCSMgaGF2ZSB0byBpbnZva2UgaXQgZm9yIG9ubHkgYWJvdXQgMzAgcGF0aHMgYXQgYSB0aW1lCisJc2V0IG1heCA1MDAKKwlpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gPT0gIndpbjMyIn0geworCSAgICBzZXQgbWF4IDEyMAorCX0KKyAgICB9CisgICAgd2hpbGUge1tpbmNyIG5yXSA8PSAkbWF4ICYmIFtnZXRzICRnZHRmIGxpbmVdID49IDB9IHsKKwlzZXQgaSBbc3RyaW5nIGZpcnN0ICJcdCIgJGxpbmVdCisJaWYgeyRpID49IDB9IHsKKwkgICAgc2V0IGZpbGUgW3N0cmluZyByYW5nZSAkbGluZSBbZXhwciB7JGkrMX1dIGVuZF0KKwkgICAgaWYge1tzdHJpbmcgaW5kZXggJGZpbGUgMF0gZXEgIlwiIn0geworCQlzZXQgZmlsZSBbbGluZGV4ICRmaWxlIDBdCisJICAgIH0KKwkgICAgc2V0IGZpbGUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRmaWxlXQorCSAgICBpZiB7JGZpbGUgbmUgW2xpbmRleCAkdHJlZWRpZmYgZW5kXX0geworCQlsYXBwZW5kIHRyZWVkaWZmICRmaWxlCisJCWxhcHBlbmQgc3VibGlzdCAkZmlsZQorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7JHBlcmZpbGVfYXR0cnN9IHsKKwljYWNoZV9naXRhdHRyIGVuY29kaW5nICRzdWJsaXN0CisgICAgfQorICAgIGlmIHshW2VvZiAkZ2R0Zl19IHsKKwlyZXR1cm4gW2V4cHIgeyRuciA+PSAkbWF4PyAyOiAxfV0KKyAgICB9CisgICAgY2xvc2UgJGdkdGYKKyAgICBzZXQgdHJlZWRpZmZzKCRpZHMpICR0cmVlZGlmZgorICAgIHVuc2V0IHRyZWVwZW5kaW5nCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSIgJiYgW2xsZW5ndGggJGRpZmZpZHNdID09IDF9IHsKKwlnZXR0cmVlICRkaWZmaWRzCisgICAgfSBlbHNlaWYgeyRpZHMgIT0gJGRpZmZpZHN9IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBkaWZmbWVyZ2VpZF19IHsKKwkgICAgZ2V0dHJlZWRpZmZzICRkaWZmaWRzCisJfQorICAgIH0gZWxzZSB7CisJYWRkdG9jZmxpc3QgJGlkcworICAgIH0KKyAgICByZXR1cm4gMAorfQorCisjIGVtcHR5IHN0cmluZyBvciBwb3NpdGl2ZSBpbnRlZ2VyCitwcm9jIGRpZmZjb250ZXh0dmFsaWRhdGUge3Z9IHsKKyAgICByZXR1cm4gW3JlZ2V4cCB7Xih8WzEtOV1bMC05XSopJH0gJHZdCit9CisKK3Byb2MgZGlmZmNvbnRleHRjaGFuZ2Uge24xIG4yIG9wfSB7CisgICAgZ2xvYmFsIGRpZmZjb250ZXh0c3RyaW5nIGRpZmZjb250ZXh0CisKKyAgICBpZiB7W3N0cmluZyBpcyBpbnRlZ2VyIC1zdHJpY3QgJGRpZmZjb250ZXh0c3RyaW5nXX0geworCWlmIHskZGlmZmNvbnRleHRzdHJpbmcgPj0gMH0geworCSAgICBzZXQgZGlmZmNvbnRleHQgJGRpZmZjb250ZXh0c3RyaW5nCisJICAgIHJlc2VsZWN0bGluZQorCX0KKyAgICB9Cit9CisKK3Byb2MgY2hhbmdlaWdub3Jlc3BhY2Uge30geworICAgIHJlc2VsZWN0bGluZQorfQorCitwcm9jIGNoYW5nZXdvcmRkaWZmIHtuYW1lIGl4IG9wfSB7CisgICAgcmVzZWxlY3RsaW5lCit9CisKK3Byb2MgaW5pdGJsb2JkaWZmdmFycyB7fSB7CisgICAgZ2xvYmFsIGRpZmZlbmNvZGluZyB0YXJnZXRsaW5lIGRpZmZucGFyZW50cworICAgIGdsb2JhbCBkaWZmaW5oZHIgY3VycmRpZmZzdWJtb2QgZGlmZnNlZWhlcmUKKyAgICBzZXQgdGFyZ2V0bGluZSB7fQorICAgIHNldCBkaWZmbnBhcmVudHMgMAorICAgIHNldCBkaWZmaW5oZHIgMAorICAgIHNldCBkaWZmZW5jb2RpbmcgW2dldF9wYXRoX2VuY29kaW5nIHt9XQorICAgIHNldCBjdXJyZGlmZnN1Ym1vZCAiIgorICAgIHNldCBkaWZmc2VlaGVyZSAtMQorfQorCitwcm9jIGdldGJsb2JkaWZmcyB7aWRzfSB7CisgICAgZ2xvYmFsIGJsb2JkaWZmZmQgZGlmZmlkcyBlbnYKKyAgICBnbG9iYWwgdHJlZWRpZmZzCisgICAgZ2xvYmFsIGRpZmZjb250ZXh0CisgICAgZ2xvYmFsIGlnbm9yZXNwYWNlCisgICAgZ2xvYmFsIHdvcmRkaWZmCisgICAgZ2xvYmFsIGxpbWl0ZGlmZnMgdmZpbGVsaW1pdCBjdXJ2aWV3CisgICAgZ2xvYmFsIGdpdF92ZXJzaW9uCisKKyAgICBzZXQgdGV4dGNvbnYge30KKyAgICBpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjYuMSJdID49IDB9IHsKKwlzZXQgdGV4dGNvbnYgIi0tdGV4dGNvbnYiCisgICAgfQorICAgIHNldCBzdWJtb2R1bGUge30KKyAgICBpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjYuNiJdID49IDB9IHsKKwlzZXQgc3VibW9kdWxlICItLXN1Ym1vZHVsZSIKKyAgICB9CisgICAgc2V0IGNtZCBbZGlmZmNtZCAkaWRzICItcCAkdGV4dGNvbnYgJHN1Ym1vZHVsZSAgLUMgLS1jYyAtLW5vLWNvbW1pdC1pZCAtVSRkaWZmY29udGV4dCJdCisgICAgaWYgeyRpZ25vcmVzcGFjZX0geworCWFwcGVuZCBjbWQgIiAtdyIKKyAgICB9CisgICAgaWYgeyR3b3JkZGlmZiBuZSBbbWMgIkxpbmUgZGlmZiJdfSB7CisJYXBwZW5kIGNtZCAiIC0td29yZC1kaWZmPXBvcmNlbGFpbiIKKyAgICB9CisgICAgaWYgeyRsaW1pdGRpZmZzICYmICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KSBuZSB7fX0geworCXNldCBjbWQgW2NvbmNhdCAkY21kIC0tICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KV0KKyAgICB9CisgICAgaWYge1tjYXRjaCB7c2V0IGJkZiBbb3BlbiAkY21kIHJdfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgW21jICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIgJGVycl0KKwlyZXR1cm4KKyAgICB9CisgICAgZmNvbmZpZ3VyZSAkYmRmIC1ibG9ja2luZyAwIC1lbmNvZGluZyBiaW5hcnkgLWVvZmNoYXIge30KKyAgICBzZXQgYmxvYmRpZmZmZCgkaWRzKSAkYmRmCisgICAgaW5pdGJsb2JkaWZmdmFycworICAgIGZpbGVydW4gJGJkZiBbbGlzdCBnZXRibG9iZGlmZmxpbmUgJGJkZiAkZGlmZmlkc10KK30KKworcHJvYyBzYXZlY21pdHBvcyB7fSB7CisgICAgZ2xvYmFsIGN0ZXh0IGNtaXRtb2RlCisKKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0geworCXJldHVybiB7fQorICAgIH0KKyAgICByZXR1cm4gW2xpc3QgdGFyZ2V0X3Njcm9sbHBvcyBbJGN0ZXh0IGluZGV4IEAwLDBdXQorfQorCitwcm9jIHNhdmVjdGV4dHBvcyB7fSB7CisgICAgZ2xvYmFsIGN0ZXh0CisKKyAgICByZXR1cm4gW2xpc3QgdGFyZ2V0X3Njcm9sbHBvcyBbJGN0ZXh0IGluZGV4IEAwLDBdXQorfQorCitwcm9jIG1heWJlX3Njcm9sbF9jdGV4dCB7YXRlb2Z9IHsKKyAgICBnbG9iYWwgY3RleHQgdGFyZ2V0X3Njcm9sbHBvcworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgdGFyZ2V0X3Njcm9sbHBvc119IHJldHVybgorICAgIGlmIHshJGF0ZW9mfSB7CisJc2V0IG5saW5lcyBbZXhwciB7W3dpbmZvIGhlaWdodCAkY3RleHRdCisJCQkgIC8gW2ZvbnQgbWV0cmljcyB0ZXh0Zm9udCAtbGluZXNwYWNlXX1dCisJaWYge1skY3RleHQgY29tcGFyZSAiJHRhcmdldF9zY3JvbGxwb3MgKyAkbmxpbmVzIGxpbmVzIiA8PSBlbmRdfSByZXR1cm4KKyAgICB9CisgICAgJGN0ZXh0IHl2aWV3ICR0YXJnZXRfc2Nyb2xscG9zCisgICAgdW5zZXQgdGFyZ2V0X3Njcm9sbHBvcworfQorCitwcm9jIHNldGlubGlzdCB7dmFyIGkgdmFsfSB7CisgICAgZ2xvYmFsICR2YXIKKworICAgIHdoaWxlIHtbbGxlbmd0aCBbc2V0ICR2YXJdXSA8ICRpfSB7CisJbGFwcGVuZCAkdmFyIHt9CisgICAgfQorICAgIGlmIHtbbGxlbmd0aCBbc2V0ICR2YXJdXSA9PSAkaX0geworCWxhcHBlbmQgJHZhciAkdmFsCisgICAgfSBlbHNlIHsKKwlsc2V0ICR2YXIgJGkgJHZhbAorICAgIH0KK30KKworcHJvYyBtYWtlZGlmZmhkciB7Zm5hbWUgaWRzfSB7CisgICAgZ2xvYmFsIGN0ZXh0IGN1cmRpZmZzdGFydCB0cmVlZGlmZnMgZGlmZmVuY29kaW5nCisgICAgZ2xvYmFsIGN0ZXh0X2ZpbGVfbmFtZXMganVtcF90b19oZXJlIHRhcmdldGxpbmUgZGlmZmxpbmUKKworICAgIHNldCBmbmFtZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGZuYW1lXQorICAgIHNldCBkaWZmZW5jb2RpbmcgW2dldF9wYXRoX2VuY29kaW5nICRmbmFtZV0KKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHRyZWVkaWZmcygkaWRzKSAkZm5hbWVdCisgICAgaWYgeyRpID49IDB9IHsKKwlzZXRpbmxpc3QgZGlmZmZpbGVzdGFydCAkaSAkY3VyZGlmZnN0YXJ0CisgICAgfQorICAgIGxzZXQgY3RleHRfZmlsZV9uYW1lcyBlbmQgJGZuYW1lCisgICAgc2V0IGwgW2V4cHIgeyg3OCAtIFtzdHJpbmcgbGVuZ3RoICRmbmFtZV0pIC8gMn1dCisgICAgc2V0IHBhZCBbc3RyaW5nIHJhbmdlICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiAxICRsXQorICAgICRjdGV4dCBpbnNlcnQgJGN1cmRpZmZzdGFydCAiJHBhZCAkZm5hbWUgJHBhZCIgZmlsZXNlcAorICAgIHNldCB0YXJnZXRsaW5lIHt9CisgICAgaWYgeyRqdW1wX3RvX2hlcmUgbmUge30gJiYgW2xpbmRleCAkanVtcF90b19oZXJlIDBdIGVxICRmbmFtZX0geworCXNldCB0YXJnZXRsaW5lIFtsaW5kZXggJGp1bXBfdG9faGVyZSAxXQorICAgIH0KKyAgICBzZXQgZGlmZmxpbmUgMAorfQorCitwcm9jIGJsb2JkaWZmbWF5YmVzZWVoZXJlIHthdGVvZn0geworICAgIGdsb2JhbCBkaWZmc2VlaGVyZQorICAgIGlmIHskZGlmZnNlZWhlcmUgPj0gMH0geworCW1hcmtfY3RleHRfbGluZSBbbGluZGV4IFtzcGxpdCAkZGlmZnNlZWhlcmUgLl0gMF0KKyAgICB9CisgICAgbWF5YmVfc2Nyb2xsX2N0ZXh0ICRhdGVvZgorfQorCitwcm9jIGdldGJsb2JkaWZmbGluZSB7YmRmIGlkc30geworICAgIGdsb2JhbCBkaWZmaWRzIGJsb2JkaWZmZmQKKyAgICBnbG9iYWwgY3RleHQKKworICAgIHNldCBuciAwCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIHdoaWxlIHtbaW5jciBucl0gPD0gMTAwMCAmJiBbZ2V0cyAkYmRmIGxpbmVdID49IDB9IHsKKwlpZiB7JGlkcyAhPSAkZGlmZmlkcyB8fCAkYmRmICE9ICRibG9iZGlmZmZkKCRpZHMpfSB7CisJICAgICMgT2xkZXIgZGlmZiByZWFkLiBBYm9ydCBpdC4KKwkgICAgY2F0Y2gge2Nsb3NlICRiZGZ9CisJICAgIGlmIHskaWRzICE9ICRkaWZmaWRzfSB7CisJCWFycmF5IHVuc2V0IGJsb2JkaWZmZmQgJGlkcworCSAgICB9CisJICAgIHJldHVybiAwCisJfQorCXBhcnNlYmxvYmRpZmZsaW5lICRpZHMgJGxpbmUKKyAgICB9CisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgYmxvYmRpZmZtYXliZXNlZWhlcmUgW2VvZiAkYmRmXQorICAgIGlmIHtbZW9mICRiZGZdfSB7CisJY2F0Y2gge2Nsb3NlICRiZGZ9CisJYXJyYXkgdW5zZXQgYmxvYmRpZmZmZCAkaWRzCisJcmV0dXJuIDAKKyAgICB9CisgICAgcmV0dXJuIFtleHByIHskbnIgPj0gMTAwMD8gMjogMX1dCit9CisKK3Byb2MgcGFyc2VibG9iZGlmZmxpbmUge2lkcyBsaW5lfSB7CisgICAgZ2xvYmFsIGN0ZXh0IGN1cmRpZmZzdGFydAorICAgIGdsb2JhbCBkaWZmbmV4dGhlYWQgZGlmZm5leHRub3RlIGRpZmZmaWxlc3RhcnQKKyAgICBnbG9iYWwgY3RleHRfZmlsZV9uYW1lcyBjdGV4dF9maWxlX2xpbmVzCisgICAgZ2xvYmFsIGRpZmZpbmhkciB0cmVlZGlmZnMgbWVyZ2VtYXggZGlmZm5wYXJlbnRzCisgICAgZ2xvYmFsIGRpZmZlbmNvZGluZyBqdW1wX3RvX2hlcmUgdGFyZ2V0bGluZSBkaWZmbGluZSBjdXJyZGlmZnN1Ym1vZAorICAgIGdsb2JhbCB3b3JkZGlmZiBkaWZmc2VlaGVyZQorCisgICAgaWYgeyFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCA1ICJkaWZmICIgJGxpbmVdfSB7CisJaWYgeyFbcmVnZXhwIHteZGlmZiAoLS1jY3wtLWdpdCkgfSAkbGluZSBtIHR5cGVdfSB7CisJICAgIHNldCBsaW5lIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkbGluZV0KKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGh1bmtzZXAKKwkgICAgY29udGludWUKKwl9CisJIyBzdGFydCBvZiBhIG5ldyBmaWxlCisJc2V0IGRpZmZpbmhkciAxCisJJGN0ZXh0IGluc2VydCBlbmQgIlxuIgorCXNldCBjdXJkaWZmc3RhcnQgWyRjdGV4dCBpbmRleCAiZW5kIC0gMWMiXQorCWxhcHBlbmQgY3RleHRfZmlsZV9uYW1lcyAiIgorCWxhcHBlbmQgY3RleHRfZmlsZV9saW5lcyBbbGluZGV4IFtzcGxpdCAkY3VyZGlmZnN0YXJ0ICIuIl0gMF0KKwkkY3RleHQgaW5zZXJ0IGVuZCAiXG4iIGZpbGVzZXAKKworCWlmIHskdHlwZSBlcSAiLS1jYyJ9IHsKKwkgICAgIyBzdGFydCBvZiBhIG5ldyBmaWxlIGluIGEgbWVyZ2UgZGlmZgorCSAgICBzZXQgZm5hbWUgW3N0cmluZyByYW5nZSAkbGluZSAxMCBlbmRdCisJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJHRyZWVkaWZmcygkaWRzKSAkZm5hbWVdIDwgMH0geworCQlsYXBwZW5kIHRyZWVkaWZmcygkaWRzKSAkZm5hbWUKKwkJYWRkX2ZsaXN0IFtsaXN0ICRmbmFtZV0KKwkgICAgfQorCisJfSBlbHNlIHsKKwkgICAgc2V0IGxpbmUgW3N0cmluZyByYW5nZSAkbGluZSAxMSBlbmRdCisJICAgICMgSWYgdGhlIG5hbWUgaGFzbid0IGNoYW5nZWQgdGhlIGxlbmd0aCB3aWxsIGJlIG9kZCwKKwkgICAgIyB0aGUgbWlkZGxlIGNoYXIgd2lsbCBiZSBhIHNwYWNlLCBhbmQgdGhlIHR3byBiaXRzIGVpdGhlcgorCSAgICAjIHNpZGUgd2lsbCBiZSBhL25hbWUgYW5kIGIvbmFtZSwgb3IgImEvbmFtZSIgYW5kICJiL25hbWUiLgorCSAgICAjIElmIHRoZSBuYW1lIGhhcyBjaGFuZ2VkIHdlJ2xsIGdldCAicmVuYW1lIGZyb20iIGFuZAorCSAgICAjICJyZW5hbWUgdG8iIG9yICJjb3B5IGZyb20iIGFuZCAiY29weSB0byIgbGluZXMgZm9sbG93aW5nCisJICAgICMgdGhpcywgYW5kIHdlJ2xsIHVzZSB0aGVtIHRvIGdldCB0aGUgZmlsZW5hbWVzLgorCSAgICAjIFRoaXMgY29tcGxleGl0eSBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzcGFjZXMgaW4gdGhlCisJICAgICMgZmlsZW5hbWUocykgZG9uJ3QgZ2V0IGVzY2FwZWQuCisJICAgIHNldCBsIFtzdHJpbmcgbGVuZ3RoICRsaW5lXQorCSAgICBzZXQgaSBbZXhwciB7JGwgLyAyfV0KKwkgICAgaWYgeyEoKCRsICYgMSkgJiYgW3N0cmluZyBpbmRleCAkbGluZSAkaV0gZXEgIiAiICYmCisJCSAgW3N0cmluZyByYW5nZSAkbGluZSAyIFtleHByIHskaSAtIDF9XV0gZXEgXAorCQkgICAgICBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIHskaSArIDN9XSBlbmRdKX0geworCQlyZXR1cm4KKwkgICAgfQorCSAgICAjIHVuZXNjYXBlIGlmIHF1b3RlZCBhbmQgY2hvcCBvZmYgdGhlIGEvIGZyb20gdGhlIGZyb250CisJICAgIGlmIHtbc3RyaW5nIGluZGV4ICRsaW5lIDBdIGVxICJcIiJ9IHsKKwkJc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgW2xpbmRleCAkbGluZSAwXSAyIGVuZF0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgMiBbZXhwciB7JGkgLSAxfV1dCisJICAgIH0KKwl9CisJbWFrZWRpZmZoZHIgJGZuYW1lICRpZHMKKworICAgIH0gZWxzZWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMTYgIiogVW5tZXJnZWQgcGF0aCAiICRsaW5lXX0geworCXNldCBmbmFtZSBbZW5jb2RpbmcgY29udmVydGZyb20gW3N0cmluZyByYW5nZSAkbGluZSAxNiBlbmRdXQorCSRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKwlzZXQgY3VyZGlmZnN0YXJ0IFskY3RleHQgaW5kZXggImVuZCAtIDFjIl0KKwlsYXBwZW5kIGN0ZXh0X2ZpbGVfbmFtZXMgJGZuYW1lCisJbGFwcGVuZCBjdGV4dF9maWxlX2xpbmVzIFtsaW5kZXggW3NwbGl0ICRjdXJkaWZmc3RhcnQgIi4iXSAwXQorCSRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBmaWxlc2VwCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR0cmVlZGlmZnMoJGlkcykgJGZuYW1lXQorCWlmIHskaSA+PSAwfSB7CisJICAgIHNldGlubGlzdCBkaWZmZmlsZXN0YXJ0ICRpICRjdXJkaWZmc3RhcnQKKwl9CisKKyAgICB9IGVsc2VpZiB7IVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDIgIkBAIiAkbGluZV19IHsKKwlyZWdleHAge15AQCt9ICRsaW5lIGF0cworCXNldCBsaW5lIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZGlmZmVuY29kaW5nICRsaW5lXQorCSRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBodW5rc2VwCisJaWYge1tyZWdleHAgeyBcKyhcZCspLFxkKyBAQH0gJGxpbmUgbSBubF19IHsKKwkgICAgc2V0IGRpZmZsaW5lICRubAorCX0KKwlzZXQgZGlmZm5wYXJlbnRzIFtleHByIHtbc3RyaW5nIGxlbmd0aCAkYXRzXSAtIDF9XQorCXNldCBkaWZmaW5oZHIgMAorCisgICAgfSBlbHNlaWYgeyFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCAxMCAiU3VibW9kdWxlICIgJGxpbmVdfSB7CisJIyBzdGFydCBvZiBhIG5ldyBzdWJtb2R1bGUKKwlpZiB7W3JlZ2V4cCAtaW5kaWNlcyAiXFswLTlhLWZcXStcXC5cXC4iICRsaW5lIG5hbWVlbmRdfSB7CisJICAgIHNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIDEwIFtleHByIFtsaW5kZXggJG5hbWVlbmQgMF0gLSAyXV0KKwl9IGVsc2UgeworCSAgICBzZXQgZm5hbWUgW3N0cmluZyByYW5nZSAkbGluZSAxMCBbZXhwciBbc3RyaW5nIGZpcnN0ICJjb250YWlucyAiICRsaW5lXSAtIDJdXQorCX0KKwlpZiB7JGN1cnJkaWZmc3VibW9kICE9ICRmbmFtZX0geworCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4iOyAgICAgIyBBZGQgbmV3bGluZSBhZnRlciBjb21taXQgbWVzc2FnZQorCX0KKwlzZXQgY3VyZGlmZnN0YXJ0IFskY3RleHQgaW5kZXggImVuZCAtIDFjIl0KKwlsYXBwZW5kIGN0ZXh0X2ZpbGVfbmFtZXMgIiIKKwlpZiB7JGN1cnJkaWZmc3VibW9kICE9ICRmbmFtZX0geworCSAgICBsYXBwZW5kIGN0ZXh0X2ZpbGVfbGluZXMgJGZuYW1lCisJICAgIG1ha2VkaWZmaGRyICRmbmFtZSAkaWRzCisJICAgIHNldCBjdXJyZGlmZnN1Ym1vZCAkZm5hbWUKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuJGxpbmVcbiIgZmlsZXNlcAorCX0gZWxzZSB7CisJICAgICRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBmaWxlc2VwCisJfQorICAgIH0gZWxzZWlmIHskY3VycmRpZmZzdWJtb2QgIT0gIiIgJiYgIVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDMgIiAgPiIgJGxpbmVdfSB7CisJc2V0ICRjdXJyZGlmZnN1Ym1vZCAiIgorCXNldCBsaW5lIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZGlmZmVuY29kaW5nICRsaW5lXQorCSRjdGV4dCBpbnNlcnQgZW5kICIkbGluZVxuIiBkcmVzdWx0CisgICAgfSBlbHNlaWYgeyRjdXJyZGlmZnN1Ym1vZCAhPSAiIiAmJiAhW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMyAiICA8IiAkbGluZV19IHsKKwlzZXQgJGN1cnJkaWZmc3VibW9kICIiCisJc2V0IGxpbmUgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRkaWZmZW5jb2RpbmcgJGxpbmVdCisJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGQwCisgICAgfSBlbHNlaWYgeyRkaWZmaW5oZHJ9IHsKKwlpZiB7IVtzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDEyICJyZW5hbWUgZnJvbSAiICRsaW5lXX0geworCSAgICBzZXQgZm5hbWUgW3N0cmluZyByYW5nZSAkbGluZSBbZXhwciA2ICsgW3N0cmluZyBmaXJzdCAiIGZyb20gIiAkbGluZV0gXSBlbmRdCisJICAgIGlmIHtbc3RyaW5nIGluZGV4ICRmbmFtZSAwXSBlcSAiXCIifSB7CisJCXNldCBmbmFtZSBbbGluZGV4ICRmbmFtZSAwXQorCSAgICB9CisJICAgIHNldCBmbmFtZSBbZW5jb2RpbmcgY29udmVydGZyb20gJGZuYW1lXQorCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHRyZWVkaWZmcygkaWRzKSAkZm5hbWVdCisJICAgIGlmIHskaSA+PSAwfSB7CisJCXNldGlubGlzdCBkaWZmZmlsZXN0YXJ0ICRpICRjdXJkaWZmc3RhcnQKKwkgICAgfQorCX0gZWxzZWlmIHshW3N0cmluZyBjb21wYXJlIC1sZW5ndGggMTAgJGxpbmUgInJlbmFtZSB0byAiXSB8fAorCQkgICFbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCA4ICRsaW5lICJjb3B5IHRvICJdfSB7CisJICAgIHNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIDQgKyBbc3RyaW5nIGZpcnN0ICIgdG8gIiAkbGluZV0gXSBlbmRdCisJICAgIGlmIHtbc3RyaW5nIGluZGV4ICRmbmFtZSAwXSBlcSAiXCIifSB7CisJCXNldCBmbmFtZSBbbGluZGV4ICRmbmFtZSAwXQorCSAgICB9CisJICAgIG1ha2VkaWZmaGRyICRmbmFtZSAkaWRzCisJfSBlbHNlaWYge1tzdHJpbmcgY29tcGFyZSAtbGVuZ3RoIDMgJGxpbmUgIi0tLSJdID09IDB9IHsKKwkgICAgIyBkbyBub3RoaW5nCisJICAgIHJldHVybgorCX0gZWxzZWlmIHtbc3RyaW5nIGNvbXBhcmUgLWxlbmd0aCAzICRsaW5lICIrKysiXSA9PSAwfSB7CisJICAgIHNldCBkaWZmaW5oZHIgMAorCSAgICByZXR1cm4KKwl9CisJJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lXG4iIGZpbGVzZXAKKworICAgIH0gZWxzZSB7CisJc2V0IGxpbmUgW3N0cmluZyBtYXAge1x4MUEgXlp9IFwKKwkJICAgICAgW2VuY29kaW5nIGNvbnZlcnRmcm9tICRkaWZmZW5jb2RpbmcgJGxpbmVdXQorCSMgcGFyc2UgdGhlIHByZWZpeCAtIG9uZSAnICcsICctJyBvciAnKycgZm9yIGVhY2ggcGFyZW50CisJc2V0IHByZWZpeCBbc3RyaW5nIHJhbmdlICRsaW5lIDAgW2V4cHIgeyRkaWZmbnBhcmVudHMgLSAxfV1dCisJc2V0IHRhZyBbZXhwciB7JGRpZmZucGFyZW50cyA+IDE/ICJtIjogImQifV0KKwlzZXQgZG93b3JkcyBbZXhwciB7JHdvcmRkaWZmIG5lIFttYyAiTGluZSBkaWZmIl0gJiYgJGRpZmZucGFyZW50cyA9PSAxfV0KKwlzZXQgd29yZHNfcHJlX21hcmt1cCAiIgorCXNldCB3b3Jkc19wb3N0X21hcmt1cCAiIgorCWlmIHtbc3RyaW5nIHRyaW0gJHByZWZpeCAiIC0rIl0gZXEge319IHsKKwkgICAgIyBwcmVmaXggb25seSBoYXMgIiAiLCAiLSIgYW5kICIrIiBpbiBpdDogbm9ybWFsIGRpZmYgbGluZQorCSAgICBzZXQgbnVtIFtzdHJpbmcgZmlyc3QgIi0iICRwcmVmaXhdCisJICAgIGlmIHskZG93b3Jkc30geworCQlzZXQgbGluZSBbc3RyaW5nIHJhbmdlICRsaW5lIDEgZW5kXQorCSAgICB9CisJICAgIGlmIHskbnVtID49IDB9IHsKKwkJIyByZW1vdmVkIGxpbmUsIGZpcnN0IHBhcmVudCB3aXRoIGxpbmUgaXMgJG51bQorCQlpZiB7JG51bSA+PSAkbWVyZ2VtYXh9IHsKKwkJICAgIHNldCBudW0gIm1heCIKKwkJfQorCQlpZiB7JGRvd29yZHMgJiYgJHdvcmRkaWZmIGVxIFttYyAiTWFya3VwIHdvcmRzIl19IHsKKwkJICAgICRjdGV4dCBpbnNlcnQgZW5kICJcWy0kbGluZS1cXSIgJHRhZyRudW0KKwkJfSBlbHNlIHsKKwkJICAgICRjdGV4dCBpbnNlcnQgZW5kICIkbGluZSIgJHRhZyRudW0KKwkJfQorCQlpZiB7ISRkb3dvcmRzfSB7CisJCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4iICR0YWckbnVtCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IHRhZ3Mge30KKwkJaWYge1tzdHJpbmcgZmlyc3QgIisiICRwcmVmaXhdID49IDB9IHsKKwkJICAgICMgYWRkZWQgbGluZQorCQkgICAgbGFwcGVuZCB0YWdzICR7dGFnfXJlc3VsdAorCQkgICAgaWYgeyRkaWZmbnBhcmVudHMgPiAxfSB7CisJCQlzZXQgbnVtIFtzdHJpbmcgZmlyc3QgIiAiICRwcmVmaXhdCisJCQlpZiB7JG51bSA+PSAwfSB7CisJCQkgICAgaWYgeyRudW0gPj0gJG1lcmdlbWF4fSB7CisJCQkJc2V0IG51bSAibWF4IgorCQkJICAgIH0KKwkJCSAgICBsYXBwZW5kIHRhZ3MgbSRudW0KKwkJCX0KKwkJICAgIH0KKwkJICAgIHNldCB3b3Jkc19wcmVfbWFya3VwICJ7KyIKKwkJICAgIHNldCB3b3Jkc19wb3N0X21hcmt1cCAiK30iCisJCX0KKwkJaWYgeyR0YXJnZXRsaW5lIG5lIHt9fSB7CisJCSAgICBpZiB7JGRpZmZsaW5lID09ICR0YXJnZXRsaW5lfSB7CisJCQlzZXQgZGlmZnNlZWhlcmUgWyRjdGV4dCBpbmRleCAiZW5kIC0gMSBjaGFycyJdCisJCQlzZXQgdGFyZ2V0bGluZSB7fQorCQkgICAgfSBlbHNlIHsKKwkJCWluY3IgZGlmZmxpbmUKKwkJICAgIH0KKwkJfQorCQlpZiB7JGRvd29yZHMgJiYgJHdvcmRkaWZmIGVxIFttYyAiTWFya3VwIHdvcmRzIl19IHsKKwkJICAgICRjdGV4dCBpbnNlcnQgZW5kICIkd29yZHNfcHJlX21hcmt1cCRsaW5lJHdvcmRzX3Bvc3RfbWFya3VwIiAkdGFncworCQl9IGVsc2UgeworCQkgICAgJGN0ZXh0IGluc2VydCBlbmQgIiRsaW5lIiAkdGFncworCQl9CisJCWlmIHshJGRvd29yZHN9IHsKKwkJICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiIgJHRhZ3MKKwkJfQorCSAgICB9CisJfSBlbHNlaWYgeyRkb3dvcmRzICYmICRwcmVmaXggZXEgIn4ifSB7CisJICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiIge30KKwl9IGVsc2UgeworCSAgICAjICJcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUiLAorCSAgICAjIG9yIHNvbWV0aGluZyBlbHNlIHdlIGRvbid0IHJlY29nbml6ZQorCSAgICAkY3RleHQgaW5zZXJ0IGVuZCAiJGxpbmVcbiIgaHVua3NlcAorCX0KKyAgICB9Cit9CisKK3Byb2MgY2hhbmdlZGlmZmRpc3Age30geworICAgIGdsb2JhbCBjdGV4dCBkaWZmZWxpZGUKKworICAgICRjdGV4dCB0YWcgY29uZiBkMCAtZWxpZGUgW2xpbmRleCAkZGlmZmVsaWRlIDBdCisgICAgJGN0ZXh0IHRhZyBjb25mIGRyZXN1bHQgLWVsaWRlIFtsaW5kZXggJGRpZmZlbGlkZSAxXQorfQorCitwcm9jIGhpZ2hsaWdodGZpbGUge2NsaW5lfSB7CisgICAgZ2xvYmFsIGNmbGlzdCBjZmxpc3RfdG9wCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjZmxpc3RfdG9wXX0gcmV0dXJuCisKKyAgICAkY2ZsaXN0IHRhZyByZW1vdmUgaGlnaGxpZ2h0ICRjZmxpc3RfdG9wLjAgIiRjZmxpc3RfdG9wLjAgbGluZWVuZCIKKyAgICAkY2ZsaXN0IHRhZyBhZGQgaGlnaGxpZ2h0ICRjbGluZS4wICIkY2xpbmUuMCBsaW5lZW5kIgorICAgICRjZmxpc3Qgc2VlICRjbGluZS4wCisgICAgc2V0IGNmbGlzdF90b3AgJGNsaW5lCit9CisKK3Byb2MgaGlnaGxpZ2h0ZmlsZV9mb3Jfc2Nyb2xscG9zIHt0b3BpZHh9IHsKKyAgICBnbG9iYWwgY21pdG1vZGUgZGlmZmZpbGVzdGFydAorCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGRpZmZmaWxlc3RhcnRdfSByZXR1cm4KKworICAgIHNldCB0b3AgW2xpbmRleCBbc3BsaXQgJHRvcGlkeCAuXSAwXQorICAgIGlmIHskZGlmZmZpbGVzdGFydCBlcSB7fSB8fCAkdG9wIDwgW2xpbmRleCAkZGlmZmZpbGVzdGFydCAwXX0geworCWhpZ2hsaWdodGZpbGUgMAorICAgIH0gZWxzZSB7CisJaGlnaGxpZ2h0ZmlsZSBbZXhwciB7W2JzZWFyY2ggJGRpZmZmaWxlc3RhcnQgJHRvcF0gKyAyfV0KKyAgICB9Cit9CisKK3Byb2MgcHJldmZpbGUge30geworICAgIGdsb2JhbCBkaWZmZmlsZXN0YXJ0IGN0ZXh0IGNtaXRtb2RlCisKKyAgICBpZiB7JGNtaXRtb2RlIGVxICJ0cmVlIn0gcmV0dXJuCisgICAgc2V0IHByZXYgMC4wCisgICAgc2V0IGhlcmUgWyRjdGV4dCBpbmRleCBAMCwwXQorICAgIGZvcmVhY2ggbG9jICRkaWZmZmlsZXN0YXJ0IHsKKwlpZiB7WyRjdGV4dCBjb21wYXJlICRsb2MgPj0gJGhlcmVdfSB7CisJICAgICRjdGV4dCB5dmlldyAkcHJldgorCSAgICByZXR1cm4KKwl9CisJc2V0IHByZXYgJGxvYworICAgIH0KKyAgICAkY3RleHQgeXZpZXcgJHByZXYKK30KKworcHJvYyBuZXh0ZmlsZSB7fSB7CisgICAgZ2xvYmFsIGRpZmZmaWxlc3RhcnQgY3RleHQgY21pdG1vZGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSByZXR1cm4KKyAgICBzZXQgaGVyZSBbJGN0ZXh0IGluZGV4IEAwLDBdCisgICAgZm9yZWFjaCBsb2MgJGRpZmZmaWxlc3RhcnQgeworCWlmIHtbJGN0ZXh0IGNvbXBhcmUgJGxvYyA+ICRoZXJlXX0geworCSAgICAkY3RleHQgeXZpZXcgJGxvYworCSAgICByZXR1cm4KKwl9CisgICAgfQorfQorCitwcm9jIGNsZWFyX2N0ZXh0IHt7Zmlyc3QgMS4wfX0geworICAgIGdsb2JhbCBjdGV4dCBzbWFya3RvcCBzbWFya2JvdAorICAgIGdsb2JhbCBjdGV4dF9maWxlX25hbWVzIGN0ZXh0X2ZpbGVfbGluZXMKKyAgICBnbG9iYWwgcGVuZGluZ2xpbmtzCisKKyAgICBzZXQgbCBbbGluZGV4IFtzcGxpdCAkZmlyc3QgLl0gMF0KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBzbWFya3RvcF0gfHwgWyRjdGV4dCBjb21wYXJlICRmaXJzdCA8ICRzbWFya3RvcC4wXX0geworCXNldCBzbWFya3RvcCAkbAorICAgIH0KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBzbWFya2JvdF0gfHwgWyRjdGV4dCBjb21wYXJlICRmaXJzdCA8ICRzbWFya2JvdC4wXX0geworCXNldCBzbWFya2JvdCAkbAorICAgIH0KKyAgICAkY3RleHQgZGVsZXRlICRmaXJzdCBlbmQKKyAgICBpZiB7JGZpcnN0IGVxICIxLjAifSB7CisJdW5zZXQgLW5vY29tcGxhaW4gcGVuZGluZ2xpbmtzCisgICAgfQorICAgIHNldCBjdGV4dF9maWxlX25hbWVzIHt9CisgICAgc2V0IGN0ZXh0X2ZpbGVfbGluZXMge30KK30KKworcHJvYyBzZXR0YWJzIHt7Zmlyc3RhYiB7fX19IHsKKyAgICBnbG9iYWwgZmlyc3R0YWJzdG9wIHRhYnN0b3AgY3RleHQgaGF2ZV90azg1CisKKyAgICBpZiB7JGZpcnN0YWIgbmUge30gJiYgJGhhdmVfdGs4NX0geworCXNldCBmaXJzdHRhYnN0b3AgJGZpcnN0YWIKKyAgICB9CisgICAgc2V0IHcgW2ZvbnQgbWVhc3VyZSB0ZXh0Zm9udCAiMCJdCisgICAgaWYgeyRmaXJzdHRhYnN0b3AgIT0gMH0geworCSRjdGV4dCBjb25mIC10YWJzIFtsaXN0IFtleHByIHsoJGZpcnN0dGFic3RvcCArICR0YWJzdG9wKSAqICR3fV0gXAorCQkJICAgICAgIFtleHByIHsoJGZpcnN0dGFic3RvcCArIDIgKiAkdGFic3RvcCkgKiAkd31dXQorICAgIH0gZWxzZWlmIHskaGF2ZV90azg1IHx8ICR0YWJzdG9wICE9IDh9IHsKKwkkY3RleHQgY29uZiAtdGFicyBbZXhwciB7JHRhYnN0b3AgKiAkd31dCisgICAgfSBlbHNlIHsKKwkkY3RleHQgY29uZiAtdGFicyB7fQorICAgIH0KK30KKworcHJvYyBpbmNyc2VhcmNoIHtuYW1lIGl4IG9wfSB7CisgICAgZ2xvYmFsIGN0ZXh0IHNlYXJjaHN0cmluZyBzZWFyY2hkaXJuCisKKyAgICBpZiB7W2NhdGNoIHskY3RleHQgaW5kZXggYW5jaG9yfV19IHsKKwkjIG5vIGFuY2hvciBzZXQsIHVzZSBzdGFydCBvZiBzZWxlY3Rpb24sIG9yIG9mIHZpc2libGUgYXJlYQorCXNldCBzZWwgWyRjdGV4dCB0YWcgcmFuZ2VzIHNlbF0KKwlpZiB7JHNlbCBuZSB7fX0geworCSAgICAkY3RleHQgbWFyayBzZXQgYW5jaG9yIFtsaW5kZXggJHNlbCAwXQorCX0gZWxzZWlmIHskc2VhcmNoZGlybiBlcSAiLWZvcndhcmRzIn0geworCSAgICAkY3RleHQgbWFyayBzZXQgYW5jaG9yIEAwLDAKKwl9IGVsc2UgeworCSAgICAkY3RleHQgbWFyayBzZXQgYW5jaG9yIEAwLFt3aW5mbyBoZWlnaHQgJGN0ZXh0XQorCX0KKyAgICB9CisgICAgaWYgeyRzZWFyY2hzdHJpbmcgbmUge319IHsKKwlzZXQgaGVyZSBbJGN0ZXh0IHNlYXJjaCAtY291bnQgbWxlbiAkc2VhcmNoZGlybiAtLSAkc2VhcmNoc3RyaW5nIGFuY2hvcl0KKwlpZiB7JGhlcmUgbmUge319IHsKKwkgICAgJGN0ZXh0IHNlZSAkaGVyZQorCSAgICBzZXQgbWVuZCAiJGhlcmUgKyAkbWxlbiBjIgorCSAgICAkY3RleHQgdGFnIHJlbW92ZSBzZWwgMS4wIGVuZAorCSAgICAkY3RleHQgdGFnIGFkZCBzZWwgJGhlcmUgJG1lbmQKKwkgICAgc3VwcHJlc3NfaGlnaGxpZ2h0aW5nX2ZpbGVfZm9yX2N1cnJlbnRfc2Nyb2xscG9zCisJICAgIGhpZ2hsaWdodGZpbGVfZm9yX3Njcm9sbHBvcyAkaGVyZQorCX0KKyAgICB9CisgICAgcmVoaWdobGlnaHRfc2VhcmNoX3Jlc3VsdHMKK30KKworcHJvYyBkb3NlYXJjaCB7fSB7CisgICAgZ2xvYmFsIHNzdHJpbmcgY3RleHQgc2VhcmNoc3RyaW5nIHNlYXJjaGRpcm4KKworICAgIGZvY3VzICRzc3RyaW5nCisgICAgJHNzdHJpbmcgaWN1cnNvciBlbmQKKyAgICBzZXQgc2VhcmNoZGlybiAtZm9yd2FyZHMKKyAgICBpZiB7JHNlYXJjaHN0cmluZyBuZSB7fX0geworCXNldCBzZWwgWyRjdGV4dCB0YWcgcmFuZ2VzIHNlbF0KKwlpZiB7JHNlbCBuZSB7fX0geworCSAgICBzZXQgc3RhcnQgIltsaW5kZXggJHNlbCAwXSArIDFjIgorCX0gZWxzZWlmIHtbY2F0Y2gge3NldCBzdGFydCBbJGN0ZXh0IGluZGV4IGFuY2hvcl19XX0geworCSAgICBzZXQgc3RhcnQgIkAwLDAiCisJfQorCXNldCBtYXRjaCBbJGN0ZXh0IHNlYXJjaCAtY291bnQgbWxlbiAtLSAkc2VhcmNoc3RyaW5nICRzdGFydF0KKwkkY3RleHQgdGFnIHJlbW92ZSBzZWwgMS4wIGVuZAorCWlmIHskbWF0Y2ggZXEge319IHsKKwkgICAgYmVsbAorCSAgICByZXR1cm4KKwl9CisJJGN0ZXh0IHNlZSAkbWF0Y2gKKwlzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfY3VycmVudF9zY3JvbGxwb3MKKwloaWdobGlnaHRmaWxlX2Zvcl9zY3JvbGxwb3MgJG1hdGNoCisJc2V0IG1lbmQgIiRtYXRjaCArICRtbGVuIGMiCisJJGN0ZXh0IHRhZyBhZGQgc2VsICRtYXRjaCAkbWVuZAorCSRjdGV4dCBtYXJrIHVuc2V0IGFuY2hvcgorCXJlaGlnaGxpZ2h0X3NlYXJjaF9yZXN1bHRzCisgICAgfQorfQorCitwcm9jIGRvc2VhcmNoYmFjayB7fSB7CisgICAgZ2xvYmFsIHNzdHJpbmcgY3RleHQgc2VhcmNoc3RyaW5nIHNlYXJjaGRpcm4KKworICAgIGZvY3VzICRzc3RyaW5nCisgICAgJHNzdHJpbmcgaWN1cnNvciBlbmQKKyAgICBzZXQgc2VhcmNoZGlybiAtYmFja3dhcmRzCisgICAgaWYgeyRzZWFyY2hzdHJpbmcgbmUge319IHsKKwlzZXQgc2VsIFskY3RleHQgdGFnIHJhbmdlcyBzZWxdCisJaWYgeyRzZWwgbmUge319IHsKKwkgICAgc2V0IHN0YXJ0IFtsaW5kZXggJHNlbCAwXQorCX0gZWxzZWlmIHtbY2F0Y2gge3NldCBzdGFydCBbJGN0ZXh0IGluZGV4IGFuY2hvcl19XX0geworCSAgICBzZXQgc3RhcnQgQDAsW3dpbmZvIGhlaWdodCAkY3RleHRdCisJfQorCXNldCBtYXRjaCBbJGN0ZXh0IHNlYXJjaCAtYmFja3dhcmRzIC1jb3VudCBtbCAtLSAkc2VhcmNoc3RyaW5nICRzdGFydF0KKwkkY3RleHQgdGFnIHJlbW92ZSBzZWwgMS4wIGVuZAorCWlmIHskbWF0Y2ggZXEge319IHsKKwkgICAgYmVsbAorCSAgICByZXR1cm4KKwl9CisJJGN0ZXh0IHNlZSAkbWF0Y2gKKwlzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfY3VycmVudF9zY3JvbGxwb3MKKwloaWdobGlnaHRmaWxlX2Zvcl9zY3JvbGxwb3MgJG1hdGNoCisJc2V0IG1lbmQgIiRtYXRjaCArICRtbCBjIgorCSRjdGV4dCB0YWcgYWRkIHNlbCAkbWF0Y2ggJG1lbmQKKwkkY3RleHQgbWFyayB1bnNldCBhbmNob3IKKwlyZWhpZ2hsaWdodF9zZWFyY2hfcmVzdWx0cworICAgIH0KK30KKworcHJvYyByZWhpZ2hsaWdodF9zZWFyY2hfcmVzdWx0cyB7fSB7CisgICAgZ2xvYmFsIGN0ZXh0IHNlYXJjaHN0cmluZworCisgICAgJGN0ZXh0IHRhZyByZW1vdmUgZm91bmQgMS4wIGVuZAorICAgICRjdGV4dCB0YWcgcmVtb3ZlIGN1cnJlbnRzZWFyY2hoaXQgMS4wIGVuZAorCisgICAgaWYgeyRzZWFyY2hzdHJpbmcgbmUge319IHsKKwlzZWFyY2htYXJrdmlzaWJsZSAxCisgICAgfQorfQorCitwcm9jIHNlYXJjaG1hcmsge2ZpcnN0IGxhc3R9IHsKKyAgICBnbG9iYWwgY3RleHQgc2VhcmNoc3RyaW5nCisKKyAgICBzZXQgc2VsIFskY3RleHQgdGFnIHJhbmdlcyBzZWxdCisKKyAgICBzZXQgbWVuZCAkZmlyc3QuMAorICAgIHdoaWxlIHsxfSB7CisJc2V0IG1hdGNoIFskY3RleHQgc2VhcmNoIC1jb3VudCBtbGVuIC0tICRzZWFyY2hzdHJpbmcgJG1lbmQgJGxhc3QuZW5kXQorCWlmIHskbWF0Y2ggZXEge319IGJyZWFrCisJc2V0IG1lbmQgIiRtYXRjaCArICRtbGVuIGMiCisJaWYgeyRzZWwgbmUge30gJiYgWyRjdGV4dCBjb21wYXJlICRtYXRjaCA9PSBbbGluZGV4ICRzZWwgMF1dfSB7CisJICAgICRjdGV4dCB0YWcgYWRkIGN1cnJlbnRzZWFyY2hoaXQgJG1hdGNoICRtZW5kCisJfSBlbHNlIHsKKwkgICAgJGN0ZXh0IHRhZyBhZGQgZm91bmQgJG1hdGNoICRtZW5kCisJfQorICAgIH0KK30KKworcHJvYyBzZWFyY2htYXJrdmlzaWJsZSB7ZG9hbGx9IHsKKyAgICBnbG9iYWwgY3RleHQgc21hcmt0b3Agc21hcmtib3QKKworICAgIHNldCB0b3BsaW5lIFtsaW5kZXggW3NwbGl0IFskY3RleHQgaW5kZXggQDAsMF0gLl0gMF0KKyAgICBzZXQgYm90bGluZSBbbGluZGV4IFtzcGxpdCBbJGN0ZXh0IGluZGV4IEAwLFt3aW5mbyBoZWlnaHQgJGN0ZXh0XV0gLl0gMF0KKyAgICBpZiB7JGRvYWxsIHx8ICRib3RsaW5lIDwgJHNtYXJrdG9wIHx8ICR0b3BsaW5lID4gJHNtYXJrYm90fSB7CisJIyBubyBvdmVybGFwIHdpdGggcHJldmlvdXMKKwlzZWFyY2htYXJrICR0b3BsaW5lICRib3RsaW5lCisJc2V0IHNtYXJrdG9wICR0b3BsaW5lCisJc2V0IHNtYXJrYm90ICRib3RsaW5lCisgICAgfSBlbHNlIHsKKwlpZiB7JHRvcGxpbmUgPCAkc21hcmt0b3B9IHsKKwkgICAgc2VhcmNobWFyayAkdG9wbGluZSBbZXhwciB7JHNtYXJrdG9wLTF9XQorCSAgICBzZXQgc21hcmt0b3AgJHRvcGxpbmUKKwl9CisJaWYgeyRib3RsaW5lID4gJHNtYXJrYm90fSB7CisJICAgIHNlYXJjaG1hcmsgW2V4cHIgeyRzbWFya2JvdCsxfV0gJGJvdGxpbmUKKwkgICAgc2V0IHNtYXJrYm90ICRib3RsaW5lCisJfQorICAgIH0KK30KKworcHJvYyBzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfY3VycmVudF9zY3JvbGxwb3Mge30geworICAgIGdsb2JhbCBjdGV4dCBzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfdGhpc19zY3JvbGxwb3MKKworICAgIHNldCBzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfdGhpc19zY3JvbGxwb3MgWyRjdGV4dCBpbmRleCBAMCwwXQorfQorCitwcm9jIHNjcm9sbHRleHQge2YwIGYxfSB7CisgICAgZ2xvYmFsIHNlYXJjaHN0cmluZyBjbWl0bW9kZSBjdGV4dAorICAgIGdsb2JhbCBzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfdGhpc19zY3JvbGxwb3MKKworICAgIHNldCB0b3BpZHggWyRjdGV4dCBpbmRleCBAMCwwXQorICAgIGlmIHshW2luZm8gZXhpc3RzIHN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl90aGlzX3Njcm9sbHBvc10KKwl8fCAkdG9waWR4IG5lICRzdXBwcmVzc19oaWdobGlnaHRpbmdfZmlsZV9mb3JfdGhpc19zY3JvbGxwb3N9IHsKKwloaWdobGlnaHRmaWxlX2Zvcl9zY3JvbGxwb3MgJHRvcGlkeAorICAgIH0KKworICAgIHVuc2V0IC1ub2NvbXBsYWluIHN1cHByZXNzX2hpZ2hsaWdodGluZ19maWxlX2Zvcl90aGlzX3Njcm9sbHBvcworCisgICAgLmJsZWZ0LmJvdHRvbS5zYiBzZXQgJGYwICRmMQorICAgIGlmIHskc2VhcmNoc3RyaW5nIG5lIHt9fSB7CisJc2VhcmNobWFya3Zpc2libGUgMAorICAgIH0KK30KKworcHJvYyBzZXRjb29yZHMge30geworICAgIGdsb2JhbCBsaW5lc3BjIGNoYXJzcGMgY2FudngwIGNhbnZ5MAorICAgIGdsb2JhbCB4c3BjMSB4c3BjMiBsdGhpY2tuZXNzCisKKyAgICBzZXQgbGluZXNwYyBbZm9udCBtZXRyaWNzIG1haW5mb250IC1saW5lc3BhY2VdCisgICAgc2V0IGNoYXJzcGMgW2ZvbnQgbWVhc3VyZSBtYWluZm9udCAibSJdCisgICAgc2V0IGNhbnZ5MCBbZXhwciB7aW50KDMgKyAwLjUgKiAkbGluZXNwYyl9XQorICAgIHNldCBjYW52eDAgW2V4cHIge2ludCgzICsgMC41ICogJGxpbmVzcGMpfV0KKyAgICBzZXQgbHRoaWNrbmVzcyBbZXhwciB7aW50KCRsaW5lc3BjIC8gOSkgKyAxfV0KKyAgICBzZXQgeHNwYzEoMCkgJGxpbmVzcGMKKyAgICBzZXQgeHNwYzIgJGxpbmVzcGMKK30KKworcHJvYyByZWRpc3BsYXkge30geworICAgIGdsb2JhbCBjYW52CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZQorCisgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorICAgIGlmIHskeW1heCBlcSB7fSB8fCAkeW1heCA9PSAwfSByZXR1cm4KKyAgICBzZXQgc3BhbiBbJGNhbnYgeXZpZXddCisgICAgY2xlYXJfZGlzcGxheQorICAgIHNldGNhbnZzY3JvbGwKKyAgICBhbGxjYW52cyB5dmlldyBtb3ZldG8gW2xpbmRleCAkc3BhbiAwXQorICAgIGRyYXd2aXNpYmxlCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge319IHsKKwlzZWxlY3RsaW5lICRzZWxlY3RlZGxpbmUgMAorCWFsbGNhbnZzIHl2aWV3IG1vdmV0byBbbGluZGV4ICRzcGFuIDBdCisgICAgfQorfQorCitwcm9jIHBhcnNlZm9udCB7ZiBufSB7CisgICAgZ2xvYmFsIGZvbnRhdHRyCisKKyAgICBzZXQgZm9udGF0dHIoJGYsZmFtaWx5KSBbbGluZGV4ICRuIDBdCisgICAgc2V0IHMgW2xpbmRleCAkbiAxXQorICAgIGlmIHskcyBlcSB7fSB8fCAkcyA9PSAwfSB7CisJc2V0IHMgMTAKKyAgICB9IGVsc2VpZiB7JHMgPCAwfSB7CisJc2V0IHMgW2V4cHIge2ludCgtJHMgLyBbd2luZm8gZnBpeGVscyAuIDFwXSArIDAuNSl9XQorICAgIH0KKyAgICBzZXQgZm9udGF0dHIoJGYsc2l6ZSkgJHMKKyAgICBzZXQgZm9udGF0dHIoJGYsd2VpZ2h0KSBub3JtYWwKKyAgICBzZXQgZm9udGF0dHIoJGYsc2xhbnQpIHJvbWFuCisgICAgZm9yZWFjaCBzdHlsZSBbbHJhbmdlICRuIDIgZW5kXSB7CisJc3dpdGNoIC0tICRzdHlsZSB7CisJICAgICJub3JtYWwiIC0KKwkgICAgImJvbGQiICAge3NldCBmb250YXR0cigkZix3ZWlnaHQpICRzdHlsZX0KKwkgICAgInJvbWFuIiAtCisJICAgICJpdGFsaWMiIHtzZXQgZm9udGF0dHIoJGYsc2xhbnQpICRzdHlsZX0KKwl9CisgICAgfQorfQorCitwcm9jIGZvbnRmbGFncyB7ZiB7aXNib2xkIDB9fSB7CisgICAgZ2xvYmFsIGZvbnRhdHRyCisKKyAgICByZXR1cm4gW2xpc3QgLWZhbWlseSAkZm9udGF0dHIoJGYsZmFtaWx5KSAtc2l6ZSAkZm9udGF0dHIoJGYsc2l6ZSkgXAorCQktd2VpZ2h0IFtleHByIHskaXNib2xkPyAiYm9sZCI6ICRmb250YXR0cigkZix3ZWlnaHQpfV0gXAorCQktc2xhbnQgJGZvbnRhdHRyKCRmLHNsYW50KV0KK30KKworcHJvYyBmb250bmFtZSB7Zn0geworICAgIGdsb2JhbCBmb250YXR0cgorCisgICAgc2V0IG4gW2xpc3QgJGZvbnRhdHRyKCRmLGZhbWlseSkgJGZvbnRhdHRyKCRmLHNpemUpXQorICAgIGlmIHskZm9udGF0dHIoJGYsd2VpZ2h0KSBlcSAiYm9sZCJ9IHsKKwlsYXBwZW5kIG4gImJvbGQiCisgICAgfQorICAgIGlmIHskZm9udGF0dHIoJGYsc2xhbnQpIGVxICJpdGFsaWMifSB7CisJbGFwcGVuZCBuICJpdGFsaWMiCisgICAgfQorICAgIHJldHVybiAkbgorfQorCitwcm9jIGluY3Jmb250IHtpbmN9IHsKKyAgICBnbG9iYWwgbWFpbmZvbnQgdGV4dGZvbnQgY3RleHQgY2FudiBjZmxpc3Qgc2hvd3JlZnN0b3AKKyAgICBnbG9iYWwgc3RvcHBlZCBlbnRyaWVzIGZvbnRhdHRyCisKKyAgICB1bm1hcmttYXRjaGVzCisgICAgc2V0IHMgJGZvbnRhdHRyKG1haW5mb250LHNpemUpCisgICAgaW5jciBzICRpbmMKKyAgICBpZiB7JHMgPCAxfSB7CisJc2V0IHMgMQorICAgIH0KKyAgICBzZXQgZm9udGF0dHIobWFpbmZvbnQsc2l6ZSkgJHMKKyAgICBmb250IGNvbmZpZyBtYWluZm9udCAtc2l6ZSAkcworICAgIGZvbnQgY29uZmlnIG1haW5mb250Ym9sZCAtc2l6ZSAkcworICAgIHNldCBtYWluZm9udCBbZm9udG5hbWUgbWFpbmZvbnRdCisgICAgc2V0IHMgJGZvbnRhdHRyKHRleHRmb250LHNpemUpCisgICAgaW5jciBzICRpbmMKKyAgICBpZiB7JHMgPCAxfSB7CisJc2V0IHMgMQorICAgIH0KKyAgICBzZXQgZm9udGF0dHIodGV4dGZvbnQsc2l6ZSkgJHMKKyAgICBmb250IGNvbmZpZyB0ZXh0Zm9udCAtc2l6ZSAkcworICAgIGZvbnQgY29uZmlnIHRleHRmb250Ym9sZCAtc2l6ZSAkcworICAgIHNldCB0ZXh0Zm9udCBbZm9udG5hbWUgdGV4dGZvbnRdCisgICAgc2V0Y29vcmRzCisgICAgc2V0dGFicworICAgIHJlZGlzcGxheQorfQorCitwcm9jIGNsZWFyc2hhMSB7fSB7CisgICAgZ2xvYmFsIHNoYTFlbnRyeSBzaGExc3RyaW5nCisgICAgaWYge1tzdHJpbmcgbGVuZ3RoICRzaGExc3RyaW5nXSA9PSA0MH0geworCSRzaGExZW50cnkgZGVsZXRlIDAgZW5kCisgICAgfQorfQorCitwcm9jIHNoYTFjaGFuZ2Uge24xIG4yIG9wfSB7CisgICAgZ2xvYmFsIHNoYTFzdHJpbmcgY3VycmVudGlkIHNoYTFidXQKKyAgICBpZiB7JHNoYTFzdHJpbmcgPT0ge30KKwl8fCAoW2luZm8gZXhpc3RzIGN1cnJlbnRpZF0gJiYgJHNoYTFzdHJpbmcgPT0gJGN1cnJlbnRpZCl9IHsKKwlzZXQgc3RhdGUgZGlzYWJsZWQKKyAgICB9IGVsc2UgeworCXNldCBzdGF0ZSBub3JtYWwKKyAgICB9CisgICAgaWYge1skc2hhMWJ1dCBjZ2V0IC1zdGF0ZV0gPT0gJHN0YXRlfSByZXR1cm4KKyAgICBpZiB7JHN0YXRlID09ICJub3JtYWwifSB7CisJJHNoYTFidXQgY29uZiAtc3RhdGUgbm9ybWFsIC1yZWxpZWYgcmFpc2VkIC10ZXh0ICJbbWMgIkdvdG86Il0gIgorICAgIH0gZWxzZSB7CisJJHNoYTFidXQgY29uZiAtc3RhdGUgZGlzYWJsZWQgLXJlbGllZiBmbGF0IC10ZXh0ICJbbWMgIlNIQTEgSUQ6Il0gIgorICAgIH0KK30KKworcHJvYyBnb3RvY29tbWl0IHt9IHsKKyAgICBnbG9iYWwgc2hhMXN0cmluZyB0YWdpZHMgaGVhZGlkcyBjdXJ2aWV3IHZhcmNpZAorCisgICAgaWYgeyRzaGExc3RyaW5nID09IHt9CisJfHwgKFtpbmZvIGV4aXN0cyBjdXJyZW50aWRdICYmICRzaGExc3RyaW5nID09ICRjdXJyZW50aWQpfSByZXR1cm4KKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhZ2lkcygkc2hhMXN0cmluZyldfSB7CisJc2V0IGlkICR0YWdpZHMoJHNoYTFzdHJpbmcpCisgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBoZWFkaWRzKCRzaGExc3RyaW5nKV19IHsKKwlzZXQgaWQgJGhlYWRpZHMoJHNoYTFzdHJpbmcpCisgICAgfSBlbHNlIHsKKwlzZXQgaWQgW3N0cmluZyB0b2xvd2VyICRzaGExc3RyaW5nXQorCWlmIHtbcmVnZXhwIHteWzAtOWEtZl17NCwzOX0kfSAkaWRdfSB7CisJICAgIHNldCBtYXRjaGVzIFtsb25naWQgJGlkXQorCSAgICBpZiB7JG1hdGNoZXMgbmUge319IHsKKwkJaWYge1tsbGVuZ3RoICRtYXRjaGVzXSA+IDF9IHsKKwkJICAgIGVycm9yX3BvcHVwIFttYyAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiICRpZF0KKwkJICAgIHJldHVybgorCQl9CisJCXNldCBpZCBbbGluZGV4ICRtYXRjaGVzIDBdCisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZiB7W2NhdGNoIHtzZXQgaWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkc2hhMXN0cmluZ119XX0geworCQllcnJvcl9wb3B1cCBbbWMgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIgJHNoYTFzdHJpbmddCisJCXJldHVybgorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7W2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddfSB7CisJc2VsZWN0bGluZSBbcm93b2Zjb21taXQgJGlkXSAxCisJcmV0dXJuCisgICAgfQorICAgIGlmIHtbcmVnZXhwIHteWzAtOWEtZkEtRl17NCx9JH0gJHNoYTFzdHJpbmddfSB7CisJc2V0IG1zZyBbbWMgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIiAkc2hhMXN0cmluZ10KKyAgICB9IGVsc2UgeworCXNldCBtc2cgW21jICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIgJHNoYTFzdHJpbmddCisgICAgfQorICAgIGVycm9yX3BvcHVwICRtc2cKK30KKworcHJvYyBsaW5lZW50ZXIge3ggeSBpZH0geworICAgIGdsb2JhbCBob3ZlcnggaG92ZXJ5IGhvdmVyaWQgaG92ZXJ0aW1lcgorICAgIGdsb2JhbCBjb21taXRpbmZvIGNhbnYKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV0gJiYgIVtnZXRjb21taXQgJGlkXX0gcmV0dXJuCisgICAgc2V0IGhvdmVyeCAkeAorICAgIHNldCBob3ZlcnkgJHkKKyAgICBzZXQgaG92ZXJpZCAkaWQKKyAgICBpZiB7W2luZm8gZXhpc3RzIGhvdmVydGltZXJdfSB7CisJYWZ0ZXIgY2FuY2VsICRob3ZlcnRpbWVyCisgICAgfQorICAgIHNldCBob3ZlcnRpbWVyIFthZnRlciA1MDAgbGluZWhvdmVyXQorICAgICRjYW52IGRlbGV0ZSBob3ZlcgorfQorCitwcm9jIGxpbmVtb3Rpb24ge3ggeSBpZH0geworICAgIGdsb2JhbCBob3ZlcnggaG92ZXJ5IGhvdmVyaWQgaG92ZXJ0aW1lcgorCisgICAgaWYge1tpbmZvIGV4aXN0cyBob3ZlcmlkXSAmJiAkaWQgPT0gJGhvdmVyaWR9IHsKKwlzZXQgaG92ZXJ4ICR4CisJc2V0IGhvdmVyeSAkeQorCWlmIHtbaW5mbyBleGlzdHMgaG92ZXJ0aW1lcl19IHsKKwkgICAgYWZ0ZXIgY2FuY2VsICRob3ZlcnRpbWVyCisJfQorCXNldCBob3ZlcnRpbWVyIFthZnRlciA1MDAgbGluZWhvdmVyXQorICAgIH0KK30KKworcHJvYyBsaW5lbGVhdmUge2lkfSB7CisgICAgZ2xvYmFsIGhvdmVyaWQgaG92ZXJ0aW1lciBjYW52CisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGhvdmVyaWRdICYmICRpZCA9PSAkaG92ZXJpZH0geworCSRjYW52IGRlbGV0ZSBob3ZlcgorCWlmIHtbaW5mbyBleGlzdHMgaG92ZXJ0aW1lcl19IHsKKwkgICAgYWZ0ZXIgY2FuY2VsICRob3ZlcnRpbWVyCisJICAgIHVuc2V0IGhvdmVydGltZXIKKwl9CisJdW5zZXQgaG92ZXJpZAorICAgIH0KK30KKworcHJvYyBsaW5laG92ZXIge30geworICAgIGdsb2JhbCBob3ZlcnggaG92ZXJ5IGhvdmVyaWQgaG92ZXJ0aW1lcgorICAgIGdsb2JhbCBjYW52IGxpbmVzcGMgbHRoaWNrbmVzcworICAgIGdsb2JhbCBsaW5laG92ZXJiZ2NvbG9yIGxpbmVob3ZlcmZnY29sb3IgbGluZWhvdmVyb3V0bGluZWNvbG9yCisKKyAgICBnbG9iYWwgY29tbWl0aW5mbworCisgICAgc2V0IHRleHQgW2xpbmRleCAkY29tbWl0aW5mbygkaG92ZXJpZCkgMF0KKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgaWYgeyR5bWF4ID09IHt9fSByZXR1cm4KKyAgICBzZXQgeWZyYWMgW2xpbmRleCBbJGNhbnYgeXZpZXddIDBdCisgICAgc2V0IHggW2V4cHIgeyRob3ZlcnggKyAyICogJGxpbmVzcGN9XQorICAgIHNldCB5IFtleHByIHskaG92ZXJ5ICsgJHlmcmFjICogJHltYXggLSAkbGluZXNwYyAvIDJ9XQorICAgIHNldCB4MCBbZXhwciB7JHggLSAyICogJGx0aGlja25lc3N9XQorICAgIHNldCB5MCBbZXhwciB7JHkgLSAyICogJGx0aGlja25lc3N9XQorICAgIHNldCB4MSBbZXhwciB7JHggKyBbZm9udCBtZWFzdXJlIG1haW5mb250ICR0ZXh0XSArIDIgKiAkbHRoaWNrbmVzc31dCisgICAgc2V0IHkxIFtleHByIHskeSArICRsaW5lc3BjICsgMiAqICRsdGhpY2tuZXNzfV0KKyAgICBzZXQgdCBbJGNhbnYgY3JlYXRlIHJlY3RhbmdsZSAkeDAgJHkwICR4MSAkeTEgXAorCSAgICAgICAtZmlsbCAkbGluZWhvdmVyYmdjb2xvciAtb3V0bGluZSAkbGluZWhvdmVyb3V0bGluZWNvbG9yIFwKKwkgICAgICAgLXdpZHRoIDEgLXRhZ3MgaG92ZXJdCisgICAgJGNhbnYgcmFpc2UgJHQKKyAgICBzZXQgdCBbJGNhbnYgY3JlYXRlIHRleHQgJHggJHkgLWFuY2hvciBudyAtdGV4dCAkdGV4dCAtdGFncyBob3ZlciBcCisJICAgICAgIC1mb250IG1haW5mb250IC1maWxsICRsaW5laG92ZXJmZ2NvbG9yXQorICAgICRjYW52IHJhaXNlICR0Cit9CisKK3Byb2MgY2xpY2tpc29uYXJyb3cge2lkIHl9IHsKKyAgICBnbG9iYWwgbHRoaWNrbmVzcworCisgICAgc2V0IHJhbmdlcyBbcm93cmFuZ2VzICRpZF0KKyAgICBzZXQgdGhyZXNoIFtleHByIHsyICogJGx0aGlja25lc3MgKyA2fV0KKyAgICBzZXQgbiBbZXhwciB7W2xsZW5ndGggJHJhbmdlc10gLSAxfV0KKyAgICBmb3Ige3NldCBpIDF9IHskaSA8ICRufSB7aW5jciBpfSB7CisJc2V0IHJvdyBbbGluZGV4ICRyYW5nZXMgJGldCisJaWYge2FicyhbeWMgJHJvd10gLSAkeSkgPCAkdGhyZXNofSB7CisJICAgIHJldHVybiAkaQorCX0KKyAgICB9CisgICAgcmV0dXJuIHt9Cit9CisKK3Byb2MgYXJyb3dqdW1wIHtpZCBuIHl9IHsKKyAgICBnbG9iYWwgY2FudgorCisgICAgIyAxIDwtPiAyLCAzIDwtPiA0LCBldGMuLi4KKyAgICBzZXQgbiBbZXhwciB7KCgkbiAtIDEpIF4gMSkgKyAxfV0KKyAgICBzZXQgcm93IFtsaW5kZXggW3Jvd3JhbmdlcyAkaWRdICRuXQorICAgIHNldCB5dCBbeWMgJHJvd10KKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgaWYgeyR5bWF4IGVxIHt9IHx8ICR5bWF4IDw9IDB9IHJldHVybgorICAgIHNldCB2aWV3IFskY2FudiB5dmlld10KKyAgICBzZXQgeXNwYW4gW2V4cHIge1tsaW5kZXggJHZpZXcgMV0gLSBbbGluZGV4ICR2aWV3IDBdfV0KKyAgICBzZXQgeWZyYWMgW2V4cHIgeyR5dCAvICR5bWF4IC0gJHlzcGFuIC8gMn1dCisgICAgaWYgeyR5ZnJhYyA8IDB9IHsKKwlzZXQgeWZyYWMgMAorICAgIH0KKyAgICBhbGxjYW52cyB5dmlldyBtb3ZldG8gJHlmcmFjCit9CisKK3Byb2MgbGluZWNsaWNrIHt4IHkgaWQgaXNuZXd9IHsKKyAgICBnbG9iYWwgY3RleHQgY29tbWl0aW5mbyBjaGlsZHJlbiBjYW52IHRoaWNrZXJsaW5lIGN1cnZpZXcKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV0gJiYgIVtnZXRjb21taXQgJGlkXX0gcmV0dXJuCisgICAgdW5tYXJrbWF0Y2hlcworICAgIHVuc2VsZWN0bGluZQorICAgIG5vcm1hbGxpbmUKKyAgICAkY2FudiBkZWxldGUgaG92ZXIKKyAgICAjIGRyYXcgdGhpcyBsaW5lIHRoaWNrZXIgdGhhbiBub3JtYWwKKyAgICBzZXQgdGhpY2tlcmxpbmUgJGlkCisgICAgZHJhd2xpbmVzICRpZAorICAgIGlmIHskaXNuZXd9IHsKKwlzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisJaWYgeyR5bWF4IGVxIHt9fSByZXR1cm4KKwlzZXQgeWZyYWMgW2xpbmRleCBbJGNhbnYgeXZpZXddIDBdCisJc2V0IHkgW2V4cHIgeyR5ICsgJHlmcmFjICogJHltYXh9XQorICAgIH0KKyAgICBzZXQgZGlybiBbY2xpY2tpc29uYXJyb3cgJGlkICR5XQorICAgIGlmIHskZGlybiBuZSB7fX0geworCWFycm93anVtcCAkaWQgJGRpcm4gJHkKKwlyZXR1cm4KKyAgICB9CisKKyAgICBpZiB7JGlzbmV3fSB7CisJYWRkdG9oaXN0b3J5IFtsaXN0IGxpbmVjbGljayAkeCAkeSAkaWQgMF0gc2F2ZWN0ZXh0cG9zCisgICAgfQorICAgICMgZmlsbCB0aGUgZGV0YWlscyBwYW5lIHdpdGggaW5mbyBhYm91dCB0aGlzIGxpbmUKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgY2xlYXJfY3RleHQKKyAgICBzZXR0YWJzIDAKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiW21jICJQYXJlbnQiXTpcdCIKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAkaWQgbGluazAKKyAgICBzZXRsaW5rICRpZCBsaW5rMAorICAgIHNldCBpbmZvICRjb21taXRpbmZvKCRpZCkKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cdFtsaW5kZXggJGluZm8gMF1cbiIKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXHRbbWMgIkF1dGhvciJdOlx0W2xpbmRleCAkaW5mbyAxXVxuIgorICAgIHNldCBkYXRlIFtmb3JtYXRkYXRlIFtsaW5kZXggJGluZm8gMl1dCisgICAgJGN0ZXh0IGluc2VydCBlbmQgIlx0W21jICJEYXRlIl06XHQkZGF0ZVxuIgorICAgIHNldCBraWRzICRjaGlsZHJlbigkY3VydmlldywkaWQpCisgICAgaWYgeyRraWRzIG5lIHt9fSB7CisJJGN0ZXh0IGluc2VydCBlbmQgIlxuW21jICJDaGlsZHJlbiJdOiIKKwlzZXQgaSAwCisJZm9yZWFjaCBjaGlsZCAka2lkcyB7CisJICAgIGluY3IgaQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRjaGlsZCldICYmICFbZ2V0Y29tbWl0ICRjaGlsZF19IGNvbnRpbnVlCisJICAgIHNldCBpbmZvICRjb21taXRpbmZvKCRjaGlsZCkKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuXHQiCisJICAgICRjdGV4dCBpbnNlcnQgZW5kICRjaGlsZCBsaW5rJGkKKwkgICAgc2V0bGluayAkY2hpbGQgbGluayRpCisJICAgICRjdGV4dCBpbnNlcnQgZW5kICJcblx0W2xpbmRleCAkaW5mbyAwXSIKKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuXHRbbWMgIkF1dGhvciJdOlx0W2xpbmRleCAkaW5mbyAxXSIKKwkgICAgc2V0IGRhdGUgW2Zvcm1hdGRhdGUgW2xpbmRleCAkaW5mbyAyXV0KKwkgICAgJGN0ZXh0IGluc2VydCBlbmQgIlxuXHRbbWMgIkRhdGUiXTpcdCRkYXRlXG4iCisJfQorICAgIH0KKyAgICBtYXliZV9zY3JvbGxfY3RleHQgMQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIGluaXRfZmxpc3Qge30KK30KKworcHJvYyBub3JtYWxsaW5lIHt9IHsKKyAgICBnbG9iYWwgdGhpY2tlcmxpbmUKKyAgICBpZiB7W2luZm8gZXhpc3RzIHRoaWNrZXJsaW5lXX0geworCXNldCBpZCAkdGhpY2tlcmxpbmUKKwl1bnNldCB0aGlja2VybGluZQorCWRyYXdsaW5lcyAkaWQKKyAgICB9Cit9CisKK3Byb2Mgc2VsYnlpZCB7aWQge2lzbmV3IDF9fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcKKyAgICBpZiB7W2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddfSB7CisJc2VsZWN0bGluZSBbcm93b2Zjb21taXQgJGlkXSAkaXNuZXcKKyAgICB9Cit9CisKK3Byb2MgbXN0aW1lIHt9IHsKKyAgICBnbG9iYWwgc3RhcnRtc3RpbWUKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBzdGFydG1zdGltZV19IHsKKwlzZXQgc3RhcnRtc3RpbWUgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIH0KKyAgICByZXR1cm4gW2Zvcm1hdCAiJS4zZiIgW2V4cHIgeyhbY2xvY2sgY2xpY2sgLW1pbGxpc2Vjb25kc10gLSAkc3RhcnRtc3RpbWUpIC8gMTAwMC4wfV1dCit9CisKK3Byb2Mgcm93bWVudSB7eCB5IGlkfSB7CisgICAgZ2xvYmFsIHJvd2N0eG1lbnUgc2VsZWN0ZWRsaW5lIHJvd21lbnVpZCBjdXJ2aWV3CisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIGZha2Vyb3dtZW51IG1haW5oZWFkIG1hcmtlZGlkCisKKyAgICBzdG9wZmluZGluZworICAgIHNldCByb3dtZW51aWQgJGlkCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge30gfHwgW3Jvd29mY29tbWl0ICRpZF0gZXEgJHNlbGVjdGVkbGluZX0geworCXNldCBzdGF0ZSBkaXNhYmxlZAorICAgIH0gZWxzZSB7CisJc2V0IHN0YXRlIG5vcm1hbAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIG1hcmtlZGlkXSAmJiAkbWFya2VkaWQgbmUgJGlkfSB7CisJc2V0IG1zdGF0ZSBub3JtYWwKKyAgICB9IGVsc2UgeworCXNldCBtc3RhdGUgZGlzYWJsZWQKKyAgICB9CisgICAgaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0geworCXNldCBtZW51ICRyb3djdHhtZW51CisJaWYgeyRtYWluaGVhZCBuZSB7fX0geworCSAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSA4IC1sYWJlbCBbbWMgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIiAkbWFpbmhlYWRdIC1zdGF0ZSBub3JtYWwKKwl9IGVsc2UgeworCSAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSA4IC1sYWJlbCBbbWMgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IiAkbWFpbmhlYWRdIC1zdGF0ZSBkaXNhYmxlZAorCX0KKwkkbWVudSBlbnRyeWNvbmZpZ3VyZSAxMCAtc3RhdGUgJG1zdGF0ZQorCSRtZW51IGVudHJ5Y29uZmlndXJlIDExIC1zdGF0ZSAkbXN0YXRlCisJJG1lbnUgZW50cnljb25maWd1cmUgMTIgLXN0YXRlICRtc3RhdGUKKyAgICB9IGVsc2UgeworCXNldCBtZW51ICRmYWtlcm93bWVudQorICAgIH0KKyAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSBbbWNhICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiXSAtc3RhdGUgJHN0YXRlCisgICAgJG1lbnUgZW50cnljb25maWd1cmUgW21jYSAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIl0gLXN0YXRlICRzdGF0ZQorICAgICRtZW51IGVudHJ5Y29uZmlndXJlIFttY2EgIk1ha2UgcGF0Y2giXSAtc3RhdGUgJHN0YXRlCisgICAgJG1lbnUgZW50cnljb25maWd1cmUgW21jYSAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiXSAtc3RhdGUgJG1zdGF0ZQorICAgICRtZW51IGVudHJ5Y29uZmlndXJlIFttY2EgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIl0gLXN0YXRlICRtc3RhdGUKKyAgICB0a19wb3B1cCAkbWVudSAkeCAkeQorfQorCitwcm9jIG1hcmtoZXJlIHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIG1hcmtlZGlkIGNhbnYKKworICAgIHNldCBtYXJrZWRpZCAkcm93bWVudWlkCisgICAgbWFrZV9pZG1hcmsgJG1hcmtlZGlkCit9CisKK3Byb2MgZ290b21hcmsge30geworICAgIGdsb2JhbCBtYXJrZWRpZAorCisgICAgaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF19IHsKKwlzZWxieWlkICRtYXJrZWRpZAorICAgIH0KK30KKworcHJvYyByZXBsYWNlX2J5X2tpZHMge2wgcn0geworICAgIGdsb2JhbCBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBzZXQgaWQgW2NvbW1pdG9ucm93ICRyXQorICAgIHNldCBsIFtscmVwbGFjZSAkbCAwIDBdCisgICAgZm9yZWFjaCBraWQgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgeworCWxhcHBlbmQgbCBbcm93b2Zjb21taXQgJGtpZF0KKyAgICB9CisgICAgcmV0dXJuIFtsc29ydCAtaW50ZWdlciAtZGVjcmVhc2luZyAtdW5pcXVlICRsXQorfQorCitwcm9jIGZpbmRfY29tbW9uX2Rlc2Mge30geworICAgIGdsb2JhbCBtYXJrZWRpZCByb3dtZW51aWQgY3VydmlldyBjaGlsZHJlbgorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgbWFya2VkaWRdfSByZXR1cm4KKyAgICBpZiB7IVtjb21taXRpbnZpZXcgJG1hcmtlZGlkICRjdXJ2aWV3XSB8fAorCSFbY29tbWl0aW52aWV3ICRyb3dtZW51aWQgJGN1cnZpZXddfSByZXR1cm4KKyAgICAjc2V0IHQxIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgbDEgW2xpc3QgW3Jvd29mY29tbWl0ICRtYXJrZWRpZF1dCisgICAgc2V0IGwyIFtsaXN0IFtyb3dvZmNvbW1pdCAkcm93bWVudWlkXV0KKyAgICB3aGlsZSAxIHsKKwlzZXQgcjEgW2xpbmRleCAkbDEgMF0KKwlzZXQgcjIgW2xpbmRleCAkbDIgMF0KKwlpZiB7JHIxIGVxIHt9IHx8ICRyMiBlcSB7fX0gYnJlYWsKKwlpZiB7JHIxID09ICRyMn0geworCSAgICBzZWxlY3RsaW5lICRyMSAxCisJICAgIGJyZWFrCisJfQorCWlmIHskcjEgPiAkcjJ9IHsKKwkgICAgc2V0IGwxIFtyZXBsYWNlX2J5X2tpZHMgJGwxICRyMV0KKwl9IGVsc2UgeworCSAgICBzZXQgbDIgW3JlcGxhY2VfYnlfa2lkcyAkbDIgJHIyXQorCX0KKyAgICB9CisgICAgI3NldCB0MiBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgI3B1dHMgInRvb2sgW2V4cHIgeyR0Mi0kdDF9XW1zIgorfQorCitwcm9jIGNvbXBhcmVfY29tbWl0cyB7fSB7CisgICAgZ2xvYmFsIG1hcmtlZGlkIHJvd21lbnVpZCBjdXJ2aWV3IGNoaWxkcmVuCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBtYXJrZWRpZF19IHJldHVybgorICAgIGlmIHshW2NvbW1pdGludmlldyAkbWFya2VkaWQgJGN1cnZpZXddfSByZXR1cm4KKyAgICBhZGR0b2hpc3RvcnkgW2xpc3QgZG9fY21wX2NvbW1pdHMgJG1hcmtlZGlkICRyb3dtZW51aWRdCisgICAgZG9fY21wX2NvbW1pdHMgJG1hcmtlZGlkICRyb3dtZW51aWQKK30KKworcHJvYyBnZXRwYXRjaGlkIHtpZH0geworICAgIGdsb2JhbCBwYXRjaGlkcworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgcGF0Y2hpZHMoJGlkKV19IHsKKwlzZXQgY21kIFtkaWZmY21kIFtsaXN0ICRpZF0gey1wIC0tcm9vdH1dCisJIyB0cmltIG9mZiB0aGUgaW5pdGlhbCAifCIKKwlzZXQgY21kIFtscmFuZ2UgJGNtZCAxIGVuZF0KKwlpZiB7W2NhdGNoIHsKKwkgICAgc2V0IHggW2V2YWwgZXhlYyAkY21kIHwgZ2l0IHBhdGNoLWlkXQorCSAgICBzZXQgcGF0Y2hpZHMoJGlkKSBbbGluZGV4ICR4IDBdCisJfV19IHsKKwkgICAgc2V0IHBhdGNoaWRzKCRpZCkgImVycm9yIgorCX0KKyAgICB9CisgICAgcmV0dXJuICRwYXRjaGlkcygkaWQpCit9CisKK3Byb2MgZG9fY21wX2NvbW1pdHMge2EgYn0geworICAgIGdsb2JhbCBjdGV4dCBjdXJ2aWV3IHBhcmVudHMgY2hpbGRyZW4gcGF0Y2hpZHMgY29tbWl0aW5mbworCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorICAgIGNsZWFyX2N0ZXh0CisgICAgaW5pdF9mbGlzdCB7fQorICAgIGZvciB7c2V0IGkgMH0geyRpIDwgMTAwfSB7aW5jciBpfSB7CisJc2V0IHNraXBhIDAKKwlzZXQgc2tpcGIgMAorCWlmIHtbbGxlbmd0aCAkcGFyZW50cygkY3VydmlldywkYSldID4gMX0geworCSAgICBhcHBlbmRzaG9ydGxpbmsgJGEgW21jICJTa2lwcGluZyBtZXJnZSBjb21taXQgIl0gIlxuIgorCSAgICBzZXQgc2tpcGEgMQorCX0gZWxzZSB7CisJICAgIHNldCBwYXRjaGEgW2dldHBhdGNoaWQgJGFdCisJfQorCWlmIHtbbGxlbmd0aCAkcGFyZW50cygkY3VydmlldywkYildID4gMX0geworCSAgICBhcHBlbmRzaG9ydGxpbmsgJGIgW21jICJTa2lwcGluZyBtZXJnZSBjb21taXQgIl0gIlxuIgorCSAgICBzZXQgc2tpcGIgMQorCX0gZWxzZSB7CisJICAgIHNldCBwYXRjaGIgW2dldHBhdGNoaWQgJGJdCisJfQorCWlmIHshJHNraXBhICYmICEkc2tpcGJ9IHsKKwkgICAgc2V0IGhlYWRhIFtsaW5kZXggJGNvbW1pdGluZm8oJGEpIDBdCisJICAgIHNldCBoZWFkYiBbbGluZGV4ICRjb21taXRpbmZvKCRiKSAwXQorCSAgICBpZiB7JHBhdGNoYSBlcSAiZXJyb3IifSB7CisJCWFwcGVuZHNob3J0bGluayAkYSBbbWMgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICJdIFwKKwkJICAgIFttYyAiIC0gc3RvcHBpbmdcbiJdCisJCWJyZWFrCisJICAgIH0KKwkgICAgaWYgeyRwYXRjaGIgZXEgImVycm9yIn0geworCQlhcHBlbmRzaG9ydGxpbmsgJGIgW21jICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiXSBcCisJCSAgICBbbWMgIiAtIHN0b3BwaW5nXG4iXQorCQlicmVhaworCSAgICB9CisJICAgIGlmIHskcGF0Y2hhIGVxICRwYXRjaGJ9IHsKKwkJaWYgeyRoZWFkYSBlcSAkaGVhZGJ9IHsKKwkJICAgIGFwcGVuZHNob3J0bGluayAkYSBbbWMgIkNvbW1pdCAiXQorCQkgICAgYXBwZW5kc2hvcnRsaW5rICRiICIgPT0gIiAiICAkaGVhZGFcbiIKKwkJfSBlbHNlIHsKKwkJICAgIGFwcGVuZHNob3J0bGluayAkYSBbbWMgIkNvbW1pdCAiXSAiICAkaGVhZGFcbiIKKwkJICAgIGFwcGVuZHNob3J0bGluayAkYiBbbWMgIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuICAgICAgICJdIFwKKwkJCSIgICRoZWFkYlxuIgorCQl9CisJCXNldCBza2lwYSAxCisJCXNldCBza2lwYiAxCisJICAgIH0gZWxzZSB7CisJCSRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKwkJYXBwZW5kc2hvcnRsaW5rICRhIFttYyAiQ29tbWl0ICJdICIgICRoZWFkYVxuIgorCQlhcHBlbmRzaG9ydGxpbmsgJGIgW21jICIgZGlmZmVycyBmcm9tXG4gICAgICAgIl0gXAorCQkgICAgIiAgJGhlYWRiXG4iCisJCSRjdGV4dCBpbnNlcnQgZW5kIFttYyAiRGlmZiBvZiBjb21taXRzOlxuXG4iXQorCQkkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKwkJdXBkYXRlCisJCWRpZmZjb21taXRzICRhICRiCisJCXJldHVybgorCSAgICB9CisJfQorCWlmIHskc2tpcGF9IHsKKwkgICAgc2V0IGtpZHMgW3JlYWxfY2hpbGRyZW4gJGN1cnZpZXcsJGFdCisJICAgIGlmIHtbbGxlbmd0aCAka2lkc10gIT0gMX0geworCQkkY3RleHQgaW5zZXJ0IGVuZCAiXG4iCisJCWFwcGVuZHNob3J0bGluayAkYSBbbWMgIkNvbW1pdCAiXSBcCisJCSAgICBbbWMgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIiBbbGxlbmd0aCAka2lkc11dCisJCWJyZWFrCisJICAgIH0KKwkgICAgc2V0IGEgW2xpbmRleCAka2lkcyAwXQorCX0KKwlpZiB7JHNraXBifSB7CisJICAgIHNldCBraWRzIFtyZWFsX2NoaWxkcmVuICRjdXJ2aWV3LCRiXQorCSAgICBpZiB7W2xsZW5ndGggJGtpZHNdICE9IDF9IHsKKwkJYXBwZW5kc2hvcnRsaW5rICRiIFttYyAiQ29tbWl0ICJdIFwKKwkJICAgIFttYyAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iIFtsbGVuZ3RoICRraWRzXV0KKwkJYnJlYWsKKwkgICAgfQorCSAgICBzZXQgYiBbbGluZGV4ICRraWRzIDBdCisJfQorICAgIH0KKyAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKK30KKworcHJvYyBkaWZmY29tbWl0cyB7YSBifSB7CisgICAgZ2xvYmFsIGRpZmZjb250ZXh0IGRpZmZpZHMgYmxvYmRpZmZmZCBkaWZmaW5oZHIgY3VycmRpZmZzdWJtb2QKKworICAgIHNldCB0bXBkaXIgW2dpdGtuZXd0bXBkaXJdCisgICAgc2V0IGZuYSBbZmlsZSBqb2luICR0bXBkaXIgImNvbW1pdC1bc3RyaW5nIHJhbmdlICRhIDAgN10iXQorICAgIHNldCBmbmIgW2ZpbGUgam9pbiAkdG1wZGlyICJjb21taXQtW3N0cmluZyByYW5nZSAkYiAwIDddIl0KKyAgICBpZiB7W2NhdGNoIHsKKwlleGVjIGdpdCBkaWZmLXRyZWUgLXAgLS1wcmV0dHkgJGEgPiRmbmEKKwlleGVjIGdpdCBkaWZmLXRyZWUgLXAgLS1wcmV0dHkgJGIgPiRmbmIKKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCBbbWMgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIiAkZXJyXQorCXJldHVybgorICAgIH0KKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgZmQgW29wZW4gInwgZGlmZiAtVSRkaWZmY29udGV4dCAkZm5hICRmbmIiIHJdCisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgW21jICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIiAkZXJyXQorCXJldHVybgorICAgIH0KKyAgICBzZXQgZGlmZmlkcyBbbGlzdCBjb21taXRzICRhICRiXQorICAgIHNldCBibG9iZGlmZmZkKCRkaWZmaWRzKSAkZmQKKyAgICBzZXQgZGlmZmluaGRyIDAKKyAgICBzZXQgY3VycmRpZmZzdWJtb2QgIiIKKyAgICBmaWxlcnVuICRmZCBbbGlzdCBnZXRibG9iZGlmZmxpbmUgJGZkICRkaWZmaWRzXQorfQorCitwcm9jIGRpZmZ2c3NlbCB7ZGlybn0geworICAgIGdsb2JhbCByb3dtZW51aWQgc2VsZWN0ZWRsaW5lCisKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fX0gcmV0dXJuCisgICAgaWYgeyRkaXJufSB7CisJc2V0IG9sZGlkIFtjb21taXRvbnJvdyAkc2VsZWN0ZWRsaW5lXQorCXNldCBuZXdpZCAkcm93bWVudWlkCisgICAgfSBlbHNlIHsKKwlzZXQgb2xkaWQgJHJvd21lbnVpZAorCXNldCBuZXdpZCBbY29tbWl0b25yb3cgJHNlbGVjdGVkbGluZV0KKyAgICB9CisgICAgYWRkdG9oaXN0b3J5IFtsaXN0IGRvc2VsZGlmZiAkb2xkaWQgJG5ld2lkXSBzYXZlY3RleHRwb3MKKyAgICBkb3NlbGRpZmYgJG9sZGlkICRuZXdpZAorfQorCitwcm9jIGRpZmZ2c21hcmsge2Rpcm59IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIG1hcmtlZGlkCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBtYXJrZWRpZF19IHJldHVybgorICAgIGlmIHskZGlybn0geworCXNldCBvbGRpZCAkbWFya2VkaWQKKwlzZXQgbmV3aWQgJHJvd21lbnVpZAorICAgIH0gZWxzZSB7CisJc2V0IG9sZGlkICRyb3dtZW51aWQKKwlzZXQgbmV3aWQgJG1hcmtlZGlkCisgICAgfQorICAgIGFkZHRvaGlzdG9yeSBbbGlzdCBkb3NlbGRpZmYgJG9sZGlkICRuZXdpZF0gc2F2ZWN0ZXh0cG9zCisgICAgZG9zZWxkaWZmICRvbGRpZCAkbmV3aWQKK30KKworcHJvYyBkb3NlbGRpZmYge29sZGlkIG5ld2lkfSB7CisgICAgZ2xvYmFsIGN0ZXh0CisgICAgZ2xvYmFsIGNvbW1pdGluZm8KKworICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBjbGVhcl9jdGV4dAorICAgIGluaXRfZmxpc3QgW21jICJUb3AiXQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIkZyb20iXSAiCisgICAgJGN0ZXh0IGluc2VydCBlbmQgJG9sZGlkIGxpbmswCisgICAgc2V0bGluayAkb2xkaWQgbGluazAKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG4gICAgICIKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCBbbGluZGV4ICRjb21taXRpbmZvKCRvbGRpZCkgMF0KKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAiXG5cblttYyAiVG8iXSAgICIKKyAgICAkY3RleHQgaW5zZXJ0IGVuZCAkbmV3aWQgbGluazEKKyAgICBzZXRsaW5rICRuZXdpZCBsaW5rMQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiAgICAgIgorICAgICRjdGV4dCBpbnNlcnQgZW5kIFtsaW5kZXggJGNvbW1pdGluZm8oJG5ld2lkKSAwXQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJcbiIKKyAgICAkY3RleHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKyAgICAkY3RleHQgdGFnIHJlbW92ZSBmb3VuZCAxLjAgZW5kCisgICAgc3RhcnRkaWZmIFtsaXN0ICRvbGRpZCAkbmV3aWRdCit9CisKK3Byb2MgbWtwYXRjaCB7fSB7CisgICAgZ2xvYmFsIHJvd21lbnVpZCBjdXJyZW50aWQgY29tbWl0aW5mbyBwYXRjaHRvcCBwYXRjaG51bSBOUworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgY3VycmVudGlkXX0gcmV0dXJuCisgICAgc2V0IG9sZGlkICRjdXJyZW50aWQKKyAgICBzZXQgb2xkaGVhZCBbbGluZGV4ICRjb21taXRpbmZvKCRvbGRpZCkgMF0KKyAgICBzZXQgbmV3aWQgJHJvd21lbnVpZAorICAgIHNldCBuZXdoZWFkIFtsaW5kZXggJGNvbW1pdGluZm8oJG5ld2lkKSAwXQorICAgIHNldCB0b3AgLnBhdGNoCisgICAgc2V0IHBhdGNodG9wICR0b3AKKyAgICBjYXRjaCB7ZGVzdHJveSAkdG9wfQorICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCisgICAgJHtOU306OmxhYmVsICR0b3AudGl0bGUgLXRleHQgW21jICJHZW5lcmF0ZSBwYXRjaCJdCisgICAgZ3JpZCAkdG9wLnRpdGxlIC0gLXBhZHkgMTAKKyAgICAke05TfTo6bGFiZWwgJHRvcC5mcm9tIC10ZXh0IFttYyAiRnJvbToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLmZyb21zaGExIC13aWR0aCA0MAorICAgICR0b3AuZnJvbXNoYTEgaW5zZXJ0IDAgJG9sZGlkCisgICAgJHRvcC5mcm9tc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgJHRvcC5mcm9tICR0b3AuZnJvbXNoYTEgLXN0aWNreSB3CisgICAgJHtOU306OmVudHJ5ICR0b3AuZnJvbWhlYWQgLXdpZHRoIDYwCisgICAgJHRvcC5mcm9taGVhZCBpbnNlcnQgMCAkb2xkaGVhZAorICAgICR0b3AuZnJvbWhlYWQgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkIHggJHRvcC5mcm9taGVhZCAtc3RpY2t5IHcKKyAgICAke05TfTo6bGFiZWwgJHRvcC50byAtdGV4dCBbbWMgIlRvOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3AudG9zaGExIC13aWR0aCA0MAorICAgICR0b3AudG9zaGExIGluc2VydCAwICRuZXdpZAorICAgICR0b3AudG9zaGExIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCAkdG9wLnRvICR0b3AudG9zaGExIC1zdGlja3kgdworICAgICR7TlN9OjplbnRyeSAkdG9wLnRvaGVhZCAtd2lkdGggNjAKKyAgICAkdG9wLnRvaGVhZCBpbnNlcnQgMCAkbmV3aGVhZAorICAgICR0b3AudG9oZWFkIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCB4ICR0b3AudG9oZWFkIC1zdGlja3kgdworICAgICR7TlN9OjpidXR0b24gJHRvcC5yZXYgLXRleHQgW21jICJSZXZlcnNlIl0gLWNvbW1hbmQgbWtwYXRjaHJldgorICAgIGdyaWQgJHRvcC5yZXYgeCAtcGFkeSAxMCAtcGFkeCA1CisgICAgJHtOU306OmxhYmVsICR0b3AuZmxhYiAtdGV4dCBbbWMgIk91dHB1dCBmaWxlOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3AuZm5hbWUgLXdpZHRoIDYwCisgICAgJHRvcC5mbmFtZSBpbnNlcnQgMCBbZmlsZSBub3JtYWxpemUgInBhdGNoJHBhdGNobnVtLnBhdGNoIl0KKyAgICBpbmNyIHBhdGNobnVtCisgICAgZ3JpZCAkdG9wLmZsYWIgJHRvcC5mbmFtZSAtc3RpY2t5IHcKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5idXRzCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuZ2VuIC10ZXh0IFttYyAiR2VuZXJhdGUiXSAtY29tbWFuZCBta3BhdGNoZ28KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCBta3BhdGNoY2FuCisgICAgYmluZCAkdG9wIDxLZXktUmV0dXJuPiBta3BhdGNoZ28KKyAgICBiaW5kICR0b3AgPEtleS1Fc2NhcGU+IG1rcGF0Y2hjYW4KKyAgICBncmlkICR0b3AuYnV0cy5nZW4gJHRvcC5idXRzLmNhbgorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAwIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDEgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkICR0b3AuYnV0cyAtIC1wYWR5IDEwIC1zdGlja3kgZXcKKyAgICBmb2N1cyAkdG9wLmZuYW1lCit9CisKK3Byb2MgbWtwYXRjaHJldiB7fSB7CisgICAgZ2xvYmFsIHBhdGNodG9wCisKKyAgICBzZXQgb2xkaWQgWyRwYXRjaHRvcC5mcm9tc2hhMSBnZXRdCisgICAgc2V0IG9sZGhlYWQgWyRwYXRjaHRvcC5mcm9taGVhZCBnZXRdCisgICAgc2V0IG5ld2lkIFskcGF0Y2h0b3AudG9zaGExIGdldF0KKyAgICBzZXQgbmV3aGVhZCBbJHBhdGNodG9wLnRvaGVhZCBnZXRdCisgICAgZm9yZWFjaCBlIFtsaXN0IGZyb21zaGExIGZyb21oZWFkIHRvc2hhMSB0b2hlYWRdIFwKKwkgICAgdiBbbGlzdCAkbmV3aWQgJG5ld2hlYWQgJG9sZGlkICRvbGRoZWFkXSB7CisJJHBhdGNodG9wLiRlIGNvbmYgLXN0YXRlIG5vcm1hbAorCSRwYXRjaHRvcC4kZSBkZWxldGUgMCBlbmQKKwkkcGF0Y2h0b3AuJGUgaW5zZXJ0IDAgJHYKKwkkcGF0Y2h0b3AuJGUgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICB9Cit9CisKK3Byb2MgbWtwYXRjaGdvIHt9IHsKKyAgICBnbG9iYWwgcGF0Y2h0b3AgbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBvbGRpZCBbJHBhdGNodG9wLmZyb21zaGExIGdldF0KKyAgICBzZXQgbmV3aWQgWyRwYXRjaHRvcC50b3NoYTEgZ2V0XQorICAgIHNldCBmbmFtZSBbJHBhdGNodG9wLmZuYW1lIGdldF0KKyAgICBzZXQgY21kIFtkaWZmY21kIFtsaXN0ICRvbGRpZCAkbmV3aWRdIC1wXQorICAgICMgdHJpbSBvZmYgdGhlIGluaXRpYWwgInwiCisgICAgc2V0IGNtZCBbbHJhbmdlICRjbWQgMSBlbmRdCisgICAgbGFwcGVuZCBjbWQgPiRmbmFtZSAmCisgICAgaWYge1tjYXRjaCB7ZXZhbCBleGVjICRjbWR9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBjcmVhdGluZyBwYXRjaDoiXSAkZXJyIiAkcGF0Y2h0b3AKKyAgICB9CisgICAgY2F0Y2gge2Rlc3Ryb3kgJHBhdGNodG9wfQorICAgIHVuc2V0IHBhdGNodG9wCit9CisKK3Byb2MgbWtwYXRjaGNhbiB7fSB7CisgICAgZ2xvYmFsIHBhdGNodG9wCisKKyAgICBjYXRjaCB7ZGVzdHJveSAkcGF0Y2h0b3B9CisgICAgdW5zZXQgcGF0Y2h0b3AKK30KKworcHJvYyBta3RhZyB7fSB7CisgICAgZ2xvYmFsIHJvd21lbnVpZCBta3RhZ3RvcCBjb21taXRpbmZvIE5TCisKKyAgICBzZXQgdG9wIC5tYWtldGFnCisgICAgc2V0IG1rdGFndG9wICR0b3AKKyAgICBjYXRjaCB7ZGVzdHJveSAkdG9wfQorICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCisgICAgJHtOU306OmxhYmVsICR0b3AudGl0bGUgLXRleHQgW21jICJDcmVhdGUgdGFnIl0KKyAgICBncmlkICR0b3AudGl0bGUgLSAtcGFkeSAxMAorICAgICR7TlN9OjpsYWJlbCAkdG9wLmlkIC10ZXh0IFttYyAiSUQ6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5zaGExIC13aWR0aCA0MAorICAgICR0b3Auc2hhMSBpbnNlcnQgMCAkcm93bWVudWlkCisgICAgJHRvcC5zaGExIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCAkdG9wLmlkICR0b3Auc2hhMSAtc3RpY2t5IHcKKyAgICAke05TfTo6ZW50cnkgJHRvcC5oZWFkIC13aWR0aCA2MAorICAgICR0b3AuaGVhZCBpbnNlcnQgMCBbbGluZGV4ICRjb21taXRpbmZvKCRyb3dtZW51aWQpIDBdCisgICAgJHRvcC5oZWFkIGNvbmYgLXN0YXRlIHJlYWRvbmx5CisgICAgZ3JpZCB4ICR0b3AuaGVhZCAtc3RpY2t5IHcKKyAgICAke05TfTo6bGFiZWwgJHRvcC50bGFiIC10ZXh0IFttYyAiVGFnIG5hbWU6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC50YWcgLXdpZHRoIDYwCisgICAgZ3JpZCAkdG9wLnRsYWIgJHRvcC50YWcgLXN0aWNreSB3CisgICAgJHtOU306OmxhYmVsICR0b3Aub3AgLXRleHQgW21jICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCJdCisgICAgZ3JpZCAkdG9wLm9wIC1jb2x1bW5zcGFuIDIgLXN0aWNreSB3ZQorICAgICR7TlN9OjpsYWJlbCAkdG9wLm1sYWIgLXRleHQgW21jICJUYWcgbWVzc2FnZToiXQorICAgICR7TlN9OjplbnRyeSAkdG9wLm1zZyAtd2lkdGggNjAKKyAgICBncmlkICR0b3AubWxhYiAkdG9wLm1zZyAtc3RpY2t5IHcKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5idXRzCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuZ2VuIC10ZXh0IFttYyAiQ3JlYXRlIl0gLWNvbW1hbmQgbWt0YWdnbworICAgICR7TlN9OjpidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kIG1rdGFnY2FuCisgICAgYmluZCAkdG9wIDxLZXktUmV0dXJuPiBta3RhZ2dvCisgICAgYmluZCAkdG9wIDxLZXktRXNjYXBlPiBta3RhZ2NhbgorICAgIGdyaWQgJHRvcC5idXRzLmdlbiAkdG9wLmJ1dHMuY2FuCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDAgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMSAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgJHRvcC5idXRzIC0gLXBhZHkgMTAgLXN0aWNreSBldworICAgIGZvY3VzICR0b3AudGFnCit9CisKK3Byb2MgZG9ta3RhZyB7fSB7CisgICAgZ2xvYmFsIG1rdGFndG9wIGVudiB0YWdpZHMgaWR0YWdzCisKKyAgICBzZXQgaWQgWyRta3RhZ3RvcC5zaGExIGdldF0KKyAgICBzZXQgdGFnIFskbWt0YWd0b3AudGFnIGdldF0KKyAgICBzZXQgbXNnIFskbWt0YWd0b3AubXNnIGdldF0KKyAgICBpZiB7JHRhZyA9PSB7fX0geworCWVycm9yX3BvcHVwIFttYyAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIl0gJG1rdGFndG9wCisJcmV0dXJuIDAKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyB0YWdpZHMoJHRhZyldfSB7CisJZXJyb3JfcG9wdXAgW21jICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIiAkdGFnXSAkbWt0YWd0b3AKKwlyZXR1cm4gMAorICAgIH0KKyAgICBpZiB7W2NhdGNoIHsKKwlpZiB7JG1zZyAhPSB7fX0geworCSAgICBleGVjIGdpdCB0YWcgLWEgLW0gJG1zZyAkdGFnICRpZAorCX0gZWxzZSB7CisJICAgIGV4ZWMgZ2l0IHRhZyAkdGFnICRpZAorCX0KKyAgICB9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBjcmVhdGluZyB0YWc6Il0gJGVyciIgJG1rdGFndG9wCisJcmV0dXJuIDAKKyAgICB9CisKKyAgICBzZXQgdGFnaWRzKCR0YWcpICRpZAorICAgIGxhcHBlbmQgaWR0YWdzKCRpZCkgJHRhZworICAgIHJlZHJhd3RhZ3MgJGlkCisgICAgYWRkZWR0YWcgJGlkCisgICAgZGlzcG5lYXJ0YWdzIDAKKyAgICBydW4gcmVmaWxsX3JlZmxpc3QKKyAgICByZXR1cm4gMQorfQorCitwcm9jIHJlZHJhd3RhZ3Mge2lkfSB7CisgICAgZ2xvYmFsIGNhbnYgbGluZWh0YWcgaWRwb3MgY3VycmVudGlkIGN1cnZpZXcgY21pdGxpc3RlZCBtYXJrZWRpZAorICAgIGdsb2JhbCBjYW52eG1heCBpZGRyYXduIGNpcmNsZWl0ZW0gbWFpbmhlYWRpZCBjaXJjbGVjb2xvcnMKKyAgICBnbG9iYWwgbWFpbmhlYWRjaXJjbGVjb2xvcgorCisgICAgaWYgeyFbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV19IHJldHVybgorICAgIHNldCByb3cgW3Jvd29mY29tbWl0ICRpZF0KKyAgICBpZiB7JGlkIGVxICRtYWluaGVhZGlkfSB7CisJc2V0IG9maWxsICRtYWluaGVhZGNpcmNsZWNvbG9yCisgICAgfSBlbHNlIHsKKwlzZXQgb2ZpbGwgW2xpbmRleCAkY2lyY2xlY29sb3JzICRjbWl0bGlzdGVkKCRjdXJ2aWV3LCRpZCldCisgICAgfQorICAgICRjYW52IGl0ZW1jb25mICRjaXJjbGVpdGVtKCRyb3cpIC1maWxsICRvZmlsbAorICAgICRjYW52IGRlbGV0ZSB0YWcuJGlkCisgICAgc2V0IHh0IFtldmFsIGRyYXd0YWdzICRpZCAkaWRwb3MoJGlkKV0KKyAgICAkY2FudiBjb29yZHMgJGxpbmVodGFnKCRpZCkgJHh0IFtsaW5kZXggJGlkcG9zKCRpZCkgMl0KKyAgICBzZXQgdGV4dCBbJGNhbnYgaXRlbWNnZXQgJGxpbmVodGFnKCRpZCkgLXRleHRdCisgICAgc2V0IGZvbnQgWyRjYW52IGl0ZW1jZ2V0ICRsaW5laHRhZygkaWQpIC1mb250XQorICAgIHNldCB4ciBbZXhwciB7JHh0ICsgW2ZvbnQgbWVhc3VyZSAkZm9udCAkdGV4dF19XQorICAgIGlmIHskeHIgPiAkY2FudnhtYXh9IHsKKwlzZXQgY2FudnhtYXggJHhyCisJc2V0Y2FudnNjcm9sbAorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGN1cnJlbnRpZF0gJiYgJGN1cnJlbnRpZCA9PSAkaWR9IHsKKwltYWtlX3NlY3NlbCAkaWQKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBtYXJrZWRpZF0gJiYgJG1hcmtlZGlkIGVxICRpZH0geworCW1ha2VfaWRtYXJrICRpZAorICAgIH0KK30KKworcHJvYyBta3RhZ2NhbiB7fSB7CisgICAgZ2xvYmFsIG1rdGFndG9wCisKKyAgICBjYXRjaCB7ZGVzdHJveSAkbWt0YWd0b3B9CisgICAgdW5zZXQgbWt0YWd0b3AKK30KKworcHJvYyBta3RhZ2dvIHt9IHsKKyAgICBpZiB7IVtkb21rdGFnXX0gcmV0dXJuCisgICAgbWt0YWdjYW4KK30KKworcHJvYyBjb3B5c3VtbWFyeSB7fSB7CisgICAgZ2xvYmFsIHJvd21lbnVpZCBhdXRvc2VsbGVuCisKKyAgICBzZXQgZm9ybWF0ICIlaCAoXCIlc1wiLCAlYWQpIgorICAgIHNldCBjbWQgW2xpc3QgZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiRmb3JtYXQgLS1kYXRlPXNob3J0XQorICAgIGlmIHskYXV0b3NlbGxlbiA8IDQwfSB7CisgICAgICAgIGxhcHBlbmQgY21kIC0tYWJicmV2PSRhdXRvc2VsbGVuCisgICAgfQorICAgIHNldCBzdW1tYXJ5IFtldmFsIGV4ZWMgJGNtZCAkcm93bWVudWlkXQorCisgICAgY2xpcGJvYXJkIGNsZWFyCisgICAgY2xpcGJvYXJkIGFwcGVuZCAkc3VtbWFyeQorfQorCitwcm9jIHdyaXRlY29tbWl0IHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIHdyY29tdG9wIGNvbW1pdGluZm8gd3Jjb21jbWQgTlMKKworICAgIHNldCB0b3AgLndyaXRlY29tbWl0CisgICAgc2V0IHdyY29tdG9wICR0b3AKKyAgICBjYXRjaCB7ZGVzdHJveSAkdG9wfQorICAgIHR0a190b3BsZXZlbCAkdG9wCisgICAgbWFrZV90cmFuc2llbnQgJHRvcCAuCisgICAgJHtOU306OmxhYmVsICR0b3AudGl0bGUgLXRleHQgW21jICJXcml0ZSBjb21taXQgdG8gZmlsZSJdCisgICAgZ3JpZCAkdG9wLnRpdGxlIC0gLXBhZHkgMTAKKyAgICAke05TfTo6bGFiZWwgJHRvcC5pZCAtdGV4dCBbbWMgIklEOiJdCisgICAgJHtOU306OmVudHJ5ICR0b3Auc2hhMSAtd2lkdGggNDAKKyAgICAkdG9wLnNoYTEgaW5zZXJ0IDAgJHJvd21lbnVpZAorICAgICR0b3Auc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgJHRvcC5pZCAkdG9wLnNoYTEgLXN0aWNreSB3CisgICAgJHtOU306OmVudHJ5ICR0b3AuaGVhZCAtd2lkdGggNjAKKyAgICAkdG9wLmhlYWQgaW5zZXJ0IDAgW2xpbmRleCAkY29tbWl0aW5mbygkcm93bWVudWlkKSAwXQorICAgICR0b3AuaGVhZCBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgeCAkdG9wLmhlYWQgLXN0aWNreSB3CisgICAgJHtOU306OmxhYmVsICR0b3AuY2xhYiAtdGV4dCBbbWMgIkNvbW1hbmQ6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5jbWQgLXdpZHRoIDYwIC10ZXh0dmFyaWFibGUgd3Jjb21jbWQKKyAgICBncmlkICR0b3AuY2xhYiAkdG9wLmNtZCAtc3RpY2t5IHcgLXBhZHkgMTAKKyAgICAke05TfTo6bGFiZWwgJHRvcC5mbGFiIC10ZXh0IFttYyAiT3V0cHV0IGZpbGU6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5mbmFtZSAtd2lkdGggNjAKKyAgICAkdG9wLmZuYW1lIGluc2VydCAwIFtmaWxlIG5vcm1hbGl6ZSAiY29tbWl0LVtzdHJpbmcgcmFuZ2UgJHJvd21lbnVpZCAwIDZdIl0KKyAgICBncmlkICR0b3AuZmxhYiAkdG9wLmZuYW1lIC1zdGlja3kgdworICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5nZW4gLXRleHQgW21jICJXcml0ZSJdIC1jb21tYW5kIHdyY29tZ28KKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5jYW4gLXRleHQgW21jICJDYW5jZWwiXSAtY29tbWFuZCB3cmNvbWNhbgorICAgIGJpbmQgJHRvcCA8S2V5LVJldHVybj4gd3Jjb21nbworICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gd3Jjb21jYW4KKyAgICBncmlkICR0b3AuYnV0cy5nZW4gJHRvcC5idXRzLmNhbgorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAwIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDEgLXdlaWdodCAxIC11bmlmb3JtIGEKKyAgICBncmlkICR0b3AuYnV0cyAtIC1wYWR5IDEwIC1zdGlja3kgZXcKKyAgICBmb2N1cyAkdG9wLmZuYW1lCit9CisKK3Byb2Mgd3Jjb21nbyB7fSB7CisgICAgZ2xvYmFsIHdyY29tdG9wCisKKyAgICBzZXQgaWQgWyR3cmNvbXRvcC5zaGExIGdldF0KKyAgICBzZXQgY21kICJlY2hvICRpZCB8IFskd3Jjb210b3AuY21kIGdldF0iCisgICAgc2V0IGZuYW1lIFskd3Jjb210b3AuZm5hbWUgZ2V0XQorICAgIGlmIHtbY2F0Y2gge2V4ZWMgc2ggLWMgJGNtZCA+JGZuYW1lICZ9IGVycl19IHsKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciB3cml0aW5nIGNvbW1pdDoiXSAkZXJyIiAkd3Jjb210b3AKKyAgICB9CisgICAgY2F0Y2gge2Rlc3Ryb3kgJHdyY29tdG9wfQorICAgIHVuc2V0IHdyY29tdG9wCit9CisKK3Byb2Mgd3Jjb21jYW4ge30geworICAgIGdsb2JhbCB3cmNvbXRvcAorCisgICAgY2F0Y2gge2Rlc3Ryb3kgJHdyY29tdG9wfQorICAgIHVuc2V0IHdyY29tdG9wCit9CisKK3Byb2MgbWticmFuY2gge30geworICAgIGdsb2JhbCBOUyByb3dtZW51aWQKKworICAgIHNldCB0b3AgLmJyYW5jaGRpYWxvZworCisgICAgc2V0IHZhbChuYW1lKSAiIgorICAgIHNldCB2YWwoaWQpICRyb3dtZW51aWQKKyAgICBzZXQgdmFsKGNvbW1hbmQpIFtsaXN0IG1rYnJnbyAkdG9wXQorCisgICAgc2V0IHVpKHRpdGxlKSBbbWMgIkNyZWF0ZSBicmFuY2giXQorICAgIHNldCB1aShhY2NlcHQpIFttYyAiQ3JlYXRlIl0KKworICAgIGJyYW5jaGRpYSAkdG9wIHZhbCB1aQorfQorCitwcm9jIG12YnJhbmNoIHt9IHsKKyAgICBnbG9iYWwgTlMKKyAgICBnbG9iYWwgaGVhZG1lbnVpZCBoZWFkbWVudWhlYWQKKworICAgIHNldCB0b3AgLmJyYW5jaGRpYWxvZworCisgICAgc2V0IHZhbChuYW1lKSAkaGVhZG1lbnVoZWFkCisgICAgc2V0IHZhbChpZCkgJGhlYWRtZW51aWQKKyAgICBzZXQgdmFsKGNvbW1hbmQpIFtsaXN0IG12YnJnbyAkdG9wICRoZWFkbWVudWhlYWRdCisKKyAgICBzZXQgdWkodGl0bGUpIFttYyAiUmVuYW1lIGJyYW5jaCAlcyIgJGhlYWRtZW51aGVhZF0KKyAgICBzZXQgdWkoYWNjZXB0KSBbbWMgIlJlbmFtZSJdCisKKyAgICBicmFuY2hkaWEgJHRvcCB2YWwgdWkKK30KKworcHJvYyBicmFuY2hkaWEge3RvcCB2YWx2YXIgdWl2YXJ9IHsKKyAgICBnbG9iYWwgTlMgY29tbWl0aW5mbworICAgIHVwdmFyICR2YWx2YXIgdmFsICR1aXZhciB1aQorCisgICAgY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KKyAgICB0dGtfdG9wbGV2ZWwgJHRvcAorICAgIG1ha2VfdHJhbnNpZW50ICR0b3AgLgorICAgICR7TlN9OjpsYWJlbCAkdG9wLnRpdGxlIC10ZXh0ICR1aSh0aXRsZSkKKyAgICBncmlkICR0b3AudGl0bGUgLSAtcGFkeSAxMAorICAgICR7TlN9OjpsYWJlbCAkdG9wLmlkIC10ZXh0IFttYyAiSUQ6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5zaGExIC13aWR0aCA0MAorICAgICR0b3Auc2hhMSBpbnNlcnQgMCAkdmFsKGlkKQorICAgICR0b3Auc2hhMSBjb25mIC1zdGF0ZSByZWFkb25seQorICAgIGdyaWQgJHRvcC5pZCAkdG9wLnNoYTEgLXN0aWNreSB3CisgICAgJHtOU306OmVudHJ5ICR0b3AuaGVhZCAtd2lkdGggNjAKKyAgICAkdG9wLmhlYWQgaW5zZXJ0IDAgW2xpbmRleCAkY29tbWl0aW5mbygkdmFsKGlkKSkgMF0KKyAgICAkdG9wLmhlYWQgY29uZiAtc3RhdGUgcmVhZG9ubHkKKyAgICBncmlkIHggJHRvcC5oZWFkIC1zdGlja3kgZXcKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wIDEgLXdlaWdodCAxCisgICAgJHtOU306OmxhYmVsICR0b3AubmxhYiAtdGV4dCBbbWMgIk5hbWU6Il0KKyAgICAke05TfTo6ZW50cnkgJHRvcC5uYW1lIC13aWR0aCA0MAorICAgICR0b3AubmFtZSBpbnNlcnQgMCAkdmFsKG5hbWUpCisgICAgZ3JpZCAkdG9wLm5sYWIgJHRvcC5uYW1lIC1zdGlja3kgdworICAgICR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKyAgICAke05TfTo6YnV0dG9uICR0b3AuYnV0cy5nbyAtdGV4dCAkdWkoYWNjZXB0KSAtY29tbWFuZCAkdmFsKGNvbW1hbmQpCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgImNhdGNoIHtkZXN0cm95ICR0b3B9IgorICAgIGJpbmQgJHRvcCA8S2V5LVJldHVybj4gJHZhbChjb21tYW5kKQorICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gImNhdGNoIHtkZXN0cm95ICR0b3B9IgorICAgIGdyaWQgJHRvcC5idXRzLmdvICR0b3AuYnV0cy5jYW4KKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMCAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAxIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCAkdG9wLmJ1dHMgLSAtcGFkeSAxMCAtc3RpY2t5IGV3CisgICAgZm9jdXMgJHRvcC5uYW1lCit9CisKK3Byb2MgbWticmdvIHt0b3B9IHsKKyAgICBnbG9iYWwgaGVhZGlkcyBpZGhlYWRzCisKKyAgICBzZXQgbmFtZSBbJHRvcC5uYW1lIGdldF0KKyAgICBzZXQgaWQgWyR0b3Auc2hhMSBnZXRdCisgICAgc2V0IGNtZGFyZ3Mge30KKyAgICBzZXQgb2xkX2lkIHt9CisgICAgaWYgeyRuYW1lIGVxIHt9fSB7CisJZXJyb3JfcG9wdXAgW21jICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIl0gJHRvcAorCXJldHVybgorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGhlYWRpZHMoJG5hbWUpXX0geworCWlmIHshW2NvbmZpcm1fcG9wdXAgW21jIFwKKwkJIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IiAkbmFtZV0gJHRvcF19IHsKKwkgICAgcmV0dXJuCisJfQorCXNldCBvbGRfaWQgJGhlYWRpZHMoJG5hbWUpCisJbGFwcGVuZCBjbWRhcmdzIC1mCisgICAgfQorICAgIGNhdGNoIHtkZXN0cm95ICR0b3B9CisgICAgbGFwcGVuZCBjbWRhcmdzICRuYW1lICRpZAorICAgIG5vd2J1c3kgbmV3YnJhbmNoCisgICAgdXBkYXRlCisgICAgaWYge1tjYXRjaCB7CisJZXZhbCBleGVjIGdpdCBicmFuY2ggJGNtZGFyZ3MKKyAgICB9IGVycl19IHsKKwlub3RidXN5IG5ld2JyYW5jaAorCWVycm9yX3BvcHVwICRlcnIKKyAgICB9IGVsc2UgeworCW5vdGJ1c3kgbmV3YnJhbmNoCisJaWYgeyRvbGRfaWQgbmUge319IHsKKwkgICAgbW92ZWhlYWQgJGlkICRuYW1lCisJICAgIG1vdmVkaGVhZCAkaWQgJG5hbWUKKwkgICAgcmVkcmF3dGFncyAkb2xkX2lkCisJICAgIHJlZHJhd3RhZ3MgJGlkCisJfSBlbHNlIHsKKwkgICAgc2V0IGhlYWRpZHMoJG5hbWUpICRpZAorCSAgICBsYXBwZW5kIGlkaGVhZHMoJGlkKSAkbmFtZQorCSAgICBhZGRlZGhlYWQgJGlkICRuYW1lCisJICAgIHJlZHJhd3RhZ3MgJGlkCisJfQorCWRpc3BuZWFydGFncyAwCisJcnVuIHJlZmlsbF9yZWZsaXN0CisgICAgfQorfQorCitwcm9jIG12YnJnbyB7dG9wIHByZXZuYW1lfSB7CisgICAgZ2xvYmFsIGhlYWRpZHMgaWRoZWFkcyBtYWluaGVhZCBtYWluaGVhZGlkCisKKyAgICBzZXQgbmFtZSBbJHRvcC5uYW1lIGdldF0KKyAgICBzZXQgaWQgWyR0b3Auc2hhMSBnZXRdCisgICAgc2V0IGNtZGFyZ3Mge30KKyAgICBpZiB7JG5hbWUgZXEgJHByZXZuYW1lfSB7CisJY2F0Y2gge2Rlc3Ryb3kgJHRvcH0KKwlyZXR1cm4KKyAgICB9CisgICAgaWYgeyRuYW1lIGVxIHt9fSB7CisJZXJyb3JfcG9wdXAgW21jICJQbGVhc2Ugc3BlY2lmeSBhIG5ldyBuYW1lIGZvciB0aGUgYnJhbmNoIl0gJHRvcAorCXJldHVybgorICAgIH0KKyAgICBjYXRjaCB7ZGVzdHJveSAkdG9wfQorICAgIGxhcHBlbmQgY21kYXJncyAtbSAkcHJldm5hbWUgJG5hbWUKKyAgICBub3didXN5IHJlbmFtZWJyYW5jaAorICAgIHVwZGF0ZQorICAgIGlmIHtbY2F0Y2ggeworCWV2YWwgZXhlYyBnaXQgYnJhbmNoICRjbWRhcmdzCisgICAgfSBlcnJdfSB7CisJbm90YnVzeSByZW5hbWVicmFuY2gKKwllcnJvcl9wb3B1cCAkZXJyCisgICAgfSBlbHNlIHsKKwlub3RidXN5IHJlbmFtZWJyYW5jaAorCXJlbW92ZWhlYWQgJGlkICRwcmV2bmFtZQorCXJlbW92ZWRoZWFkICRpZCAkcHJldm5hbWUKKwlzZXQgaGVhZGlkcygkbmFtZSkgJGlkCisJbGFwcGVuZCBpZGhlYWRzKCRpZCkgJG5hbWUKKwlhZGRlZGhlYWQgJGlkICRuYW1lCisJaWYgeyRwcmV2bmFtZSBlcSAkbWFpbmhlYWR9IHsKKwkgICAgc2V0IG1haW5oZWFkICRuYW1lCisJICAgIHNldCBtYWluaGVhZGlkICRpZAorCX0KKwlyZWRyYXd0YWdzICRpZAorCWRpc3BuZWFydGFncyAwCisJcnVuIHJlZmlsbF9yZWZsaXN0CisgICAgfQorfQorCitwcm9jIGV4ZWNfY2l0b29sIHt0b29sX2FyZ3Mge2Jhc2VpZCB7fX19IHsKKyAgICBnbG9iYWwgY29tbWl0aW5mbyBlbnYKKworICAgIHNldCBzYXZlX2VudiBbYXJyYXkgZ2V0IGVudiBHSVRfQVVUSE9SXypdCisKKyAgICBpZiB7JGJhc2VpZCBuZSB7fX0geworCWlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGJhc2VpZCldfSB7CisJICAgIGdldGNvbW1pdCAkYmFzZWlkCisJfQorCXNldCBhdXRob3IgW2xpbmRleCAkY29tbWl0aW5mbygkYmFzZWlkKSAxXQorCXNldCBkYXRlIFtsaW5kZXggJGNvbW1pdGluZm8oJGJhc2VpZCkgMl0KKwlpZiB7W3JlZ2V4cCB7XlxzKihcUy4qXFN8XFMpXHMqPCguKik+XHMqJH0gXAorCSAgICAgICAgICAgICRhdXRob3IgYXV0aG9yIG5hbWUgZW1haWxdCisJICAgICYmICRkYXRlIG5lIHt9fSB7CisJICAgIHNldCBlbnYoR0lUX0FVVEhPUl9OQU1FKSAkbmFtZQorCSAgICBzZXQgZW52KEdJVF9BVVRIT1JfRU1BSUwpICRlbWFpbAorCSAgICBzZXQgZW52KEdJVF9BVVRIT1JfREFURSkgJGRhdGUKKwl9CisgICAgfQorCisgICAgZXZhbCBleGVjIGdpdCBjaXRvb2wgJHRvb2xfYXJncyAmCisKKyAgICBhcnJheSB1bnNldCBlbnYgR0lUX0FVVEhPUl8qCisgICAgYXJyYXkgc2V0IGVudiAkc2F2ZV9lbnYKK30KKworcHJvYyBjaGVycnlwaWNrIHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIGN1cnZpZXcKKyAgICBnbG9iYWwgbWFpbmhlYWQgbWFpbmhlYWRpZAorICAgIGdsb2JhbCBnaXRkaXIKKworICAgIHNldCBvbGRoZWFkIFtleGVjIGdpdCByZXYtcGFyc2UgSEVBRF0KKyAgICBzZXQgZGhlYWRzIFtkZXNjaGVhZHMgJHJvd21lbnVpZF0KKyAgICBpZiB7JGRoZWFkcyBuZSB7fSAmJiBbbHNlYXJjaCAtZXhhY3QgJGRoZWFkcyAkb2xkaGVhZF0gPj0gMH0geworCXNldCBvayBbY29uZmlybV9wb3B1cCBbbWMgIkNvbW1pdCAlcyBpcyBhbHJlYWR5XAorCQlpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIgXAorCQkJCSAgIFtzdHJpbmcgcmFuZ2UgJHJvd21lbnVpZCAwIDddICRtYWluaGVhZF1dCisJaWYgeyEkb2t9IHJldHVybgorICAgIH0KKyAgICBub3didXN5IGNoZXJyeXBpY2sgW21jICJDaGVycnktcGlja2luZyJdCisgICAgdXBkYXRlCisgICAgIyBVbmZvcnR1bmF0ZWx5IGdpdC1jaGVycnktcGljayB3cml0ZXMgc3R1ZmYgdG8gc3RkZXJyIGV2ZW4gd2hlbgorICAgICMgbm8gZXJyb3Igb2NjdXJzLCBhbmQgZXhlYyB0YWtlcyB0aGF0IGFzIGFuIGluZGljYXRpb24gb2YgZXJyb3IuLi4KKyAgICBpZiB7W2NhdGNoIHtleGVjIHNoIC1jICJnaXQgY2hlcnJ5LXBpY2sgLXIgJHJvd21lbnVpZCAyPiYxIn0gZXJyXX0geworCW5vdGJ1c3kgY2hlcnJ5cGljaworCWlmIHtbcmVnZXhwIC1saW5lIFwKKwkJIHtFbnRyeSAnKC4qKScgKHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlfG5vdCB1cHRvZGF0ZSl9IFwKKwkJICRlcnIgbXNnIGZuYW1lXX0geworCSAgICBlcnJvcl9wb3B1cCBbbWMgIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXNcCisJCQl0byBmaWxlICclcycuXG5QbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaFwKKwkJCXlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIgJGZuYW1lXQorCX0gZWxzZWlmIHtbcmVnZXhwIC1saW5lIFwKKwkJICAgICAgIHteKENPTkZMSUNUIFwoLipcKTp8QXV0b21hdGljIGNoZXJyeS1waWNrIGZhaWxlZHxlcnJvcjogY291bGQgbm90IGFwcGx5KX0gXAorCQkgICAgICAgJGVycl19IHsKKwkgICAgaWYge1tjb25maXJtX3BvcHVwIFttYyAiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2VcCisJCQljb25mbGljdC5cbkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvXAorCQkJcmVzb2x2ZSBpdD8iXV19IHsKKwkJIyBGb3JjZSBjaXRvb2wgdG8gcmVhZCBNRVJHRV9NU0cKKwkJZmlsZSBkZWxldGUgW2ZpbGUgam9pbiAkZ2l0ZGlyICJHSVRHVUlfTVNHIl0KKwkJZXhlY19jaXRvb2wge30gJHJvd21lbnVpZAorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZXJyb3JfcG9wdXAgJGVycgorCX0KKwlydW4gdXBkYXRlY29tbWl0cworCXJldHVybgorICAgIH0KKyAgICBzZXQgbmV3aGVhZCBbZXhlYyBnaXQgcmV2LXBhcnNlIEhFQURdCisgICAgaWYgeyRuZXdoZWFkIGVxICRvbGRoZWFkfSB7CisJbm90YnVzeSBjaGVycnlwaWNrCisJZXJyb3JfcG9wdXAgW21jICJObyBjaGFuZ2VzIGNvbW1pdHRlZCJdCisJcmV0dXJuCisgICAgfQorICAgIGFkZG5ld2NoaWxkICRuZXdoZWFkICRvbGRoZWFkCisgICAgaWYge1tjb21taXRpbnZpZXcgJG9sZGhlYWQgJGN1cnZpZXddfSB7CisJIyBYWFggdGhpcyBpc24ndCByaWdodCBpZiB3ZSBoYXZlIGEgcGF0aCBsaW1pdC4uLgorCWluc2VydHJvdyAkbmV3aGVhZCAkb2xkaGVhZCAkY3VydmlldworCWlmIHskbWFpbmhlYWQgbmUge319IHsKKwkgICAgbW92ZWhlYWQgJG5ld2hlYWQgJG1haW5oZWFkCisJICAgIG1vdmVkaGVhZCAkbmV3aGVhZCAkbWFpbmhlYWQKKwl9CisJc2V0IG1haW5oZWFkaWQgJG5ld2hlYWQKKwlyZWRyYXd0YWdzICRvbGRoZWFkCisJcmVkcmF3dGFncyAkbmV3aGVhZAorCXNlbGJ5aWQgJG5ld2hlYWQKKyAgICB9CisgICAgbm90YnVzeSBjaGVycnlwaWNrCit9CisKK3Byb2MgcmV2ZXJ0IHt9IHsKKyAgICBnbG9iYWwgcm93bWVudWlkIGN1cnZpZXcKKyAgICBnbG9iYWwgbWFpbmhlYWQgbWFpbmhlYWRpZAorICAgIGdsb2JhbCBnaXRkaXIKKworICAgIHNldCBvbGRoZWFkIFtleGVjIGdpdCByZXYtcGFyc2UgSEVBRF0KKyAgICBzZXQgZGhlYWRzIFtkZXNjaGVhZHMgJHJvd21lbnVpZF0KKyAgICBpZiB7ICRkaGVhZHMgZXEge30gfHwgW2xzZWFyY2ggLWV4YWN0ICRkaGVhZHMgJG9sZGhlYWRdID09IC0xIH0geworICAgICAgIHNldCBvayBbY29uZmlybV9wb3B1cCBbbWMgIkNvbW1pdCAlcyBpcyBub3RcCisgICAgICAgICAgIGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIgXAorICAgICAgICAgICAgICAgICAgICAgIFtzdHJpbmcgcmFuZ2UgJHJvd21lbnVpZCAwIDddICRtYWluaGVhZF1dCisgICAgICAgaWYgeyEkb2t9IHJldHVybgorICAgIH0KKyAgICBub3didXN5IHJldmVydCBbbWMgIlJldmVydGluZyJdCisgICAgdXBkYXRlCisKKyAgICBpZiBbY2F0Y2gge2V4ZWMgZ2l0IHJldmVydCAtLW5vLWVkaXQgJHJvd21lbnVpZH0gZXJyXSB7CisgICAgICAgIG5vdGJ1c3kgcmV2ZXJ0CisgICAgICAgIGlmIFtyZWdleHAge2ZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOihcbigoIHxcdCkrW15cbl0rXG4pKyl9XAorICAgICAgICAgICAgICAgICRlcnIgbWF0Y2ggZmlsZXNdIHsKKyAgICAgICAgICAgIHJlZ3N1YiB7XG4oIHxcdCkrfSAkZmlsZXMgIlxuIiBmaWxlcworICAgICAgICAgICAgZXJyb3JfcG9wdXAgW21jICJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0b1wKKyAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIFwKKyAgICAgICAgICAgICAgICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iICRmaWxlc10KKyAgICAgICAgfSBlbHNlaWYgW3JlZ2V4cCB7ZXJyb3I6IGNvdWxkIG5vdCByZXZlcnR9ICRlcnJdIHsKKyAgICAgICAgICAgIGlmIFtjb25maXJtX3BvcHVwIFttYyAiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuXAorICAgICAgICAgICAgICAgIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/Il1dIHsKKyAgICAgICAgICAgICAgICAjIEZvcmNlIGNpdG9vbCB0byByZWFkIE1FUkdFX01TRworICAgICAgICAgICAgICAgIGZpbGUgZGVsZXRlIFtmaWxlIGpvaW4gJGdpdGRpciAiR0lUR1VJX01TRyJdCisgICAgICAgICAgICAgICAgZXhlY19jaXRvb2wge30gJHJvd21lbnVpZAorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeyBlcnJvcl9wb3B1cCAkZXJyIH0KKyAgICAgICAgcnVuIHVwZGF0ZWNvbW1pdHMKKyAgICAgICAgcmV0dXJuCisgICAgfQorCisgICAgc2V0IG5ld2hlYWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSBIRUFEXQorICAgIGlmIHsgJG5ld2hlYWQgZXEgJG9sZGhlYWQgfSB7CisgICAgICAgIG5vdGJ1c3kgcmV2ZXJ0CisgICAgICAgIGVycm9yX3BvcHVwIFttYyAiTm8gY2hhbmdlcyBjb21taXR0ZWQiXQorICAgICAgICByZXR1cm4KKyAgICB9CisKKyAgICBhZGRuZXdjaGlsZCAkbmV3aGVhZCAkb2xkaGVhZAorCisgICAgaWYgW2NvbW1pdGludmlldyAkb2xkaGVhZCAkY3Vydmlld10geworICAgICAgICAjIFhYWCB0aGlzIGlzbid0IHJpZ2h0IGlmIHdlIGhhdmUgYSBwYXRoIGxpbWl0Li4uCisgICAgICAgIGluc2VydHJvdyAkbmV3aGVhZCAkb2xkaGVhZCAkY3VydmlldworICAgICAgICBpZiB7JG1haW5oZWFkIG5lIHt9fSB7CisgICAgICAgICAgICBtb3ZlaGVhZCAkbmV3aGVhZCAkbWFpbmhlYWQKKyAgICAgICAgICAgIG1vdmVkaGVhZCAkbmV3aGVhZCAkbWFpbmhlYWQKKyAgICAgICAgfQorICAgICAgICBzZXQgbWFpbmhlYWRpZCAkbmV3aGVhZAorICAgICAgICByZWRyYXd0YWdzICRvbGRoZWFkCisgICAgICAgIHJlZHJhd3RhZ3MgJG5ld2hlYWQKKyAgICAgICAgc2VsYnlpZCAkbmV3aGVhZAorICAgIH0KKworICAgIG5vdGJ1c3kgcmV2ZXJ0Cit9CisKK3Byb2MgcmVzZXRoZWFkIHt9IHsKKyAgICBnbG9iYWwgbWFpbmhlYWQgcm93bWVudWlkIGNvbmZpcm1fb2sgcmVzZXR0eXBlIE5TCisKKyAgICBzZXQgY29uZmlybV9vayAwCisgICAgc2V0IHcgIi5jb25maXJtcmVzZXQiCisgICAgdHRrX3RvcGxldmVsICR3CisgICAgbWFrZV90cmFuc2llbnQgJHcgLgorICAgIHdtIHRpdGxlICR3IFttYyAiQ29uZmlybSByZXNldCJdCisgICAgJHtOU306OmxhYmVsICR3Lm0gLXRleHQgXAorCVttYyAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIgJG1haW5oZWFkIFtzdHJpbmcgcmFuZ2UgJHJvd21lbnVpZCAwIDddXQorICAgIHBhY2sgJHcubSAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCAyMCAtcGFkeSAyMAorICAgICR7TlN9OjpsYWJlbGZyYW1lICR3LmYgLXRleHQgW21jICJSZXNldCB0eXBlOiJdCisgICAgc2V0IHJlc2V0dHlwZSBtaXhlZAorICAgICR7TlN9OjpyYWRpb2J1dHRvbiAkdy5mLnNvZnQgLXZhbHVlIHNvZnQgLXZhcmlhYmxlIHJlc2V0dHlwZSBcCisJLXRleHQgW21jICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCJdCisgICAgZ3JpZCAkdy5mLnNvZnQgLXN0aWNreSB3CisgICAgJHtOU306OnJhZGlvYnV0dG9uICR3LmYubWl4ZWQgLXZhbHVlIG1peGVkIC12YXJpYWJsZSByZXNldHR5cGUgXAorCS10ZXh0IFttYyAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4Il0KKyAgICBncmlkICR3LmYubWl4ZWQgLXN0aWNreSB3CisgICAgJHtOU306OnJhZGlvYnV0dG9uICR3LmYuaGFyZCAtdmFsdWUgaGFyZCAtdmFyaWFibGUgcmVzZXR0eXBlIFwKKwktdGV4dCBbbWMgIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSJdCisgICAgZ3JpZCAkdy5mLmhhcmQgLXN0aWNreSB3CisgICAgcGFjayAkdy5mIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDQKKyAgICAke05TfTo6YnV0dG9uICR3Lm9rIC10ZXh0IFttYyBPS10gLWNvbW1hbmQgInNldCBjb25maXJtX29rIDE7IGRlc3Ryb3kgJHciCisgICAgcGFjayAkdy5vayAtc2lkZSBsZWZ0IC1maWxsIHggLXBhZHggMjAgLXBhZHkgMjAKKyAgICAke05TfTo6YnV0dG9uICR3LmNhbmNlbCAtdGV4dCBbbWMgQ2FuY2VsXSAtY29tbWFuZCAiZGVzdHJveSAkdyIKKyAgICBiaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQorICAgIHBhY2sgJHcuY2FuY2VsIC1zaWRlIHJpZ2h0IC1maWxsIHggLXBhZHggMjAgLXBhZHkgMjAKKyAgICBiaW5kICR3IDxWaXNpYmlsaXR5PiAiZ3JhYiAkdzsgZm9jdXMgJHciCisgICAgdGt3YWl0IHdpbmRvdyAkdworICAgIGlmIHshJGNvbmZpcm1fb2t9IHJldHVybgorICAgIGlmIHtbY2F0Y2gge3NldCBmZCBbb3BlbiBcCisJICAgIFtsaXN0IHwgZ2l0IHJlc2V0IC0tJHJlc2V0dHlwZSAkcm93bWVudWlkIDI+QDFdIHJdfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgJGVycgorICAgIH0gZWxzZSB7CisJZG9oaWRlbG9jYWxjaGFuZ2VzCisJZmlsZXJ1biAkZmQgW2xpc3QgcmVhZHJlc2V0c3RhdCAkZmRdCisJbm93YnVzeSByZXNldCBbbWMgIlJlc2V0dGluZyJdCisJc2VsYnlpZCAkcm93bWVudWlkCisgICAgfQorfQorCitwcm9jIHJlYWRyZXNldHN0YXQge2ZkfSB7CisgICAgZ2xvYmFsIG1haW5oZWFkIG1haW5oZWFkaWQgc2hvd2xvY2FsY2hhbmdlcyBycHJvZ2Nvb3JkCisKKyAgICBpZiB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwlpZiB7W3JlZ2V4cCB7KFswLTldKyklIFwoKFswLTldKykvKFswLTldKylcKX0gJGxpbmUgbWF0Y2ggcCBtIG5dfSB7CisJICAgIHNldCBycHJvZ2Nvb3JkIFtleHByIHsxLjAgKiAkbSAvICRufV0KKwkgICAgYWRqdXN0cHJvZ3Jlc3MKKwl9CisJcmV0dXJuIDEKKyAgICB9CisgICAgc2V0IHJwcm9nY29vcmQgMAorICAgIGFkanVzdHByb2dyZXNzCisgICAgbm90YnVzeSByZXNldAorICAgIGlmIHtbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXX0geworCWVycm9yX3BvcHVwICRlcnIKKyAgICB9CisgICAgc2V0IG9sZGhlYWQgJG1haW5oZWFkaWQKKyAgICBzZXQgbmV3aGVhZCBbZXhlYyBnaXQgcmV2LXBhcnNlIEhFQURdCisgICAgaWYgeyRuZXdoZWFkIG5lICRvbGRoZWFkfSB7CisJbW92ZWhlYWQgJG5ld2hlYWQgJG1haW5oZWFkCisJbW92ZWRoZWFkICRuZXdoZWFkICRtYWluaGVhZAorCXNldCBtYWluaGVhZGlkICRuZXdoZWFkCisJcmVkcmF3dGFncyAkb2xkaGVhZAorCXJlZHJhd3RhZ3MgJG5ld2hlYWQKKyAgICB9CisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzfSB7CisJZG9zaG93bG9jYWxjaGFuZ2VzCisgICAgfQorICAgIHJldHVybiAwCit9CisKKyMgY29udGV4dCBtZW51IGZvciBhIGhlYWQKK3Byb2MgaGVhZG1lbnUge3ggeSBpZCBoZWFkfSB7CisgICAgZ2xvYmFsIGhlYWRtZW51aWQgaGVhZG1lbnVoZWFkIGhlYWRjdHhtZW51IG1haW5oZWFkIGhlYWRpZHMKKworICAgIHN0b3BmaW5kaW5nCisgICAgc2V0IGhlYWRtZW51aWQgJGlkCisgICAgc2V0IGhlYWRtZW51aGVhZCAkaGVhZAorICAgIGFycmF5IHNldCBzdGF0ZSB7MCBub3JtYWwgMSBub3JtYWwgMiBub3JtYWx9CisgICAgaWYge1tzdHJpbmcgbWF0Y2ggInJlbW90ZXMvKiIgJGhlYWRdfSB7CisJc2V0IGxvY2FsaGVhZCBbc3RyaW5nIHJhbmdlICRoZWFkIFtleHByIFtzdHJpbmcgbGFzdCAvICRoZWFkXSArIDFdIGVuZF0KKwlpZiB7W2luZm8gZXhpc3RzIGhlYWRpZHMoJGxvY2FsaGVhZCldfSB7CisJICAgIHNldCBzdGF0ZSgwKSBkaXNhYmxlZAorCX0KKwlhcnJheSBzZXQgc3RhdGUgezEgZGlzYWJsZWQgMiBkaXNhYmxlZH0KKyAgICB9CisgICAgaWYgeyRoZWFkIGVxICRtYWluaGVhZH0geworCWFycmF5IHNldCBzdGF0ZSB7MCBkaXNhYmxlZCAyIGRpc2FibGVkfQorICAgIH0KKyAgICBmb3JlYWNoIGkgezAgMSAyfSB7CisJJGhlYWRjdHhtZW51IGVudHJ5Y29uZmlndXJlICRpIC1zdGF0ZSAkc3RhdGUoJGkpCisgICAgfQorICAgIHRrX3BvcHVwICRoZWFkY3R4bWVudSAkeCAkeQorfQorCitwcm9jIGNvYnJhbmNoIHt9IHsKKyAgICBnbG9iYWwgaGVhZG1lbnVpZCBoZWFkbWVudWhlYWQgaGVhZGlkcworICAgIGdsb2JhbCBzaG93bG9jYWxjaGFuZ2VzCisKKyAgICAjIGNoZWNrIHRoZSB0cmVlIGlzIGNsZWFuIGZpcnN0Pz8KKyAgICBzZXQgbmV3aGVhZCAkaGVhZG1lbnVoZWFkCisgICAgc2V0IGNvbW1hbmQgW2xpc3QgfCBnaXQgY2hlY2tvdXRdCisgICAgaWYge1tzdHJpbmcgbWF0Y2ggInJlbW90ZXMvKiIgJG5ld2hlYWRdfSB7CisJc2V0IHJlbW90ZSAkbmV3aGVhZAorCXNldCBuZXdoZWFkIFtzdHJpbmcgcmFuZ2UgJG5ld2hlYWQgW2V4cHIgW3N0cmluZyBsYXN0IC8gJG5ld2hlYWRdICsgMV0gZW5kXQorCSMgVGhlIGZvbGxvd2luZyBjaGVjayBpcyByZWR1bmRhbnQgLSB0aGUgbWVudSBvcHRpb24gc2hvdWxkCisJIyBiZSBkaXNhYmxlZCB0byBiZWdpbiB3aXRoLi4uCisJaWYge1tpbmZvIGV4aXN0cyBoZWFkaWRzKCRuZXdoZWFkKV19IHsKKwkgICAgZXJyb3JfcG9wdXAgW21jICJBIGxvY2FsIGJyYW5jaCBuYW1lZCAlcyBleGlzdHMgYWxyZWFkeSIgJG5ld2hlYWRdCisJICAgIHJldHVybgorCX0KKwlsYXBwZW5kIGNvbW1hbmQgLWIgJG5ld2hlYWQgLS10cmFjayAkcmVtb3RlCisgICAgfSBlbHNlIHsKKwlsYXBwZW5kIGNvbW1hbmQgJG5ld2hlYWQKKyAgICB9CisgICAgbGFwcGVuZCBjb21tYW5kIDI+QDEKKyAgICBub3didXN5IGNoZWNrb3V0IFttYyAiQ2hlY2tpbmcgb3V0Il0KKyAgICB1cGRhdGUKKyAgICBkb2hpZGVsb2NhbGNoYW5nZXMKKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgZmQgW29wZW4gJGNvbW1hbmQgcl0KKyAgICB9IGVycl19IHsKKwlub3RidXN5IGNoZWNrb3V0CisJZXJyb3JfcG9wdXAgJGVycgorCWlmIHskc2hvd2xvY2FsY2hhbmdlc30geworCSAgICBkb2RpZmZpbmRleAorCX0KKyAgICB9IGVsc2UgeworCWZpbGVydW4gJGZkIFtsaXN0IHJlYWRjaGVja291dHN0YXQgJGZkICRuZXdoZWFkICRoZWFkbWVudWlkXQorICAgIH0KK30KKworcHJvYyByZWFkY2hlY2tvdXRzdGF0IHtmZCBuZXdoZWFkIG5ld2hlYWRpZH0geworICAgIGdsb2JhbCBtYWluaGVhZCBtYWluaGVhZGlkIGhlYWRpZHMgaWRoZWFkcyBzaG93bG9jYWxjaGFuZ2VzIHByb2dyZXNzY29vcmRzCisgICAgZ2xvYmFsIHZpZXdtYWluaGVhZGlkIGN1cnZpZXcKKworICAgIGlmIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCWlmIHtbcmVnZXhwIHsoWzAtOV0rKSUgXCgoWzAtOV0rKS8oWzAtOV0rKVwpfSAkbGluZSBtYXRjaCBwIG0gbl19IHsKKwkgICAgc2V0IHByb2dyZXNzY29vcmRzIFtsaXN0IDAgW2V4cHIgezEuMCAqICRtIC8gJG59XV0KKwkgICAgYWRqdXN0cHJvZ3Jlc3MKKwl9CisJcmV0dXJuIDEKKyAgICB9CisgICAgc2V0IHByb2dyZXNzY29vcmRzIHswIDB9CisgICAgYWRqdXN0cHJvZ3Jlc3MKKyAgICBub3RidXN5IGNoZWNrb3V0CisgICAgaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgJGVycgorCXJldHVybgorICAgIH0KKyAgICBzZXQgb2xkbWFpbmlkICRtYWluaGVhZGlkCisgICAgaWYgeyEgW2luZm8gZXhpc3RzIGhlYWRpZHMoJG5ld2hlYWQpXX0geworCXNldCBoZWFkaWRzKCRuZXdoZWFkKSAkbmV3aGVhZGlkCisJbGFwcGVuZCBpZGhlYWRzKCRuZXdoZWFkaWQpICRuZXdoZWFkCisJYWRkZWRoZWFkICRuZXdoZWFkaWQgJG5ld2hlYWQKKyAgICB9CisgICAgc2V0IG1haW5oZWFkICRuZXdoZWFkCisgICAgc2V0IG1haW5oZWFkaWQgJG5ld2hlYWRpZAorICAgIHNldCB2aWV3bWFpbmhlYWRpZCgkY3VydmlldykgJG5ld2hlYWRpZAorICAgIHJlZHJhd3RhZ3MgJG9sZG1haW5pZAorICAgIHJlZHJhd3RhZ3MgJG5ld2hlYWRpZAorICAgIHNlbGJ5aWQgJG5ld2hlYWRpZAorICAgIGlmIHskc2hvd2xvY2FsY2hhbmdlc30geworCWRvZGlmZmluZGV4CisgICAgfQorfQorCitwcm9jIHJtYnJhbmNoIHt9IHsKKyAgICBnbG9iYWwgaGVhZG1lbnVpZCBoZWFkbWVudWhlYWQgbWFpbmhlYWQKKyAgICBnbG9iYWwgaWRoZWFkcworCisgICAgc2V0IGhlYWQgJGhlYWRtZW51aGVhZAorICAgIHNldCBpZCAkaGVhZG1lbnVpZAorICAgICMgdGhpcyBjaGVjayBzaG91bGRuJ3QgYmUgbmVlZGVkIGFueSBtb3JlLi4uCisgICAgaWYgeyRoZWFkIGVxICRtYWluaGVhZH0geworCWVycm9yX3BvcHVwIFttYyAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCJdCisJcmV0dXJuCisgICAgfQorICAgIHNldCBkaGVhZHMgW2Rlc2NoZWFkcyAkaWRdCisgICAgaWYge1tsbGVuZ3RoICRkaGVhZHNdID09IDEgJiYgJGlkaGVhZHMoJGRoZWFkcykgZXEgJGhlYWR9IHsKKwkjIHRoZSBzdHVmZiBvbiB0aGlzIGJyYW5jaCBpc24ndCBvbiBhbnkgb3RoZXIgYnJhbmNoCisJaWYgeyFbY29uZmlybV9wb3B1cCBbbWMgIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyXAorCQkJYnJhbmNoLlxuUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IiAkaGVhZCAkaGVhZF1dfSByZXR1cm4KKyAgICB9CisgICAgbm93YnVzeSBybWJyYW5jaAorICAgIHVwZGF0ZQorICAgIGlmIHtbY2F0Y2gge2V4ZWMgZ2l0IGJyYW5jaCAtRCAkaGVhZH0gZXJyXX0geworCW5vdGJ1c3kgcm1icmFuY2gKKwllcnJvcl9wb3B1cCAkZXJyCisJcmV0dXJuCisgICAgfQorICAgIHJlbW92ZWhlYWQgJGlkICRoZWFkCisgICAgcmVtb3ZlZGhlYWQgJGlkICRoZWFkCisgICAgcmVkcmF3dGFncyAkaWQKKyAgICBub3RidXN5IHJtYnJhbmNoCisgICAgZGlzcG5lYXJ0YWdzIDAKKyAgICBydW4gcmVmaWxsX3JlZmxpc3QKK30KKworIyBEaXNwbGF5IGEgbGlzdCBvZiB0YWdzIGFuZCBoZWFkcworcHJvYyBzaG93cmVmcyB7fSB7CisgICAgZ2xvYmFsIHNob3dyZWZzdG9wIGJnY29sb3IgZmdjb2xvciBzZWxlY3RiZ2NvbG9yIE5TCisgICAgZ2xvYmFsIGJnbGlzdCBmZ2xpc3QgcmVmbGlzdGZpbHRlciByZWZsaXN0IG1haW5jdXJzb3IKKworICAgIHNldCB0b3AgLnNob3dyZWZzCisgICAgc2V0IHNob3dyZWZzdG9wICR0b3AKKyAgICBpZiB7W3dpbmZvIGV4aXN0cyAkdG9wXX0geworCXJhaXNlICR0b3AKKwlyZWZpbGxfcmVmbGlzdAorCXJldHVybgorICAgIH0KKyAgICB0dGtfdG9wbGV2ZWwgJHRvcAorICAgIHdtIHRpdGxlICR0b3AgW21jICJUYWdzIGFuZCBoZWFkczogJXMiIFtmaWxlIHRhaWwgW3B3ZF1dXQorICAgIG1ha2VfdHJhbnNpZW50ICR0b3AgLgorICAgIHRleHQgJHRvcC5saXN0IC1iYWNrZ3JvdW5kICRiZ2NvbG9yIC1mb3JlZ3JvdW5kICRmZ2NvbG9yIFwKKwktc2VsZWN0YmFja2dyb3VuZCAkc2VsZWN0Ymdjb2xvciAtZm9udCBtYWluZm9udCBcCisJLXhzY3JvbGxjb21tYW5kICIkdG9wLnhzYiBzZXQiIC15c2Nyb2xsY29tbWFuZCAiJHRvcC55c2Igc2V0IiBcCisJLXdpZHRoIDMwIC1oZWlnaHQgMjAgLWN1cnNvciAkbWFpbmN1cnNvciBcCisJLXNwYWNpbmcxIDEgLXNwYWNpbmczIDEgLXN0YXRlIGRpc2FibGVkCisgICAgJHRvcC5saXN0IHRhZyBjb25maWd1cmUgaGlnaGxpZ2h0IC1iYWNrZ3JvdW5kICRzZWxlY3RiZ2NvbG9yCisgICAgaWYgeyFbbHNlYXJjaCAtZXhhY3QgJGJnbGlzdCAkdG9wLmxpc3RdfSB7CisJbGFwcGVuZCBiZ2xpc3QgJHRvcC5saXN0CisJbGFwcGVuZCBmZ2xpc3QgJHRvcC5saXN0CisgICAgfQorICAgICR7TlN9OjpzY3JvbGxiYXIgJHRvcC55c2IgLWNvbW1hbmQgIiR0b3AubGlzdCB5dmlldyIgLW9yaWVudCB2ZXJ0aWNhbAorICAgICR7TlN9OjpzY3JvbGxiYXIgJHRvcC54c2IgLWNvbW1hbmQgIiR0b3AubGlzdCB4dmlldyIgLW9yaWVudCBob3Jpem9udGFsCisgICAgZ3JpZCAkdG9wLmxpc3QgJHRvcC55c2IgLXN0aWNreSBuc2V3CisgICAgZ3JpZCAkdG9wLnhzYiB4IC1zdGlja3kgZXcKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5mCisgICAgJHtOU306OmxhYmVsICR0b3AuZi5sIC10ZXh0ICJbbWMgIkZpbHRlciJdOiAiCisgICAgJHtOU306OmVudHJ5ICR0b3AuZi5lIC13aWR0aCAyMCAtdGV4dHZhcmlhYmxlIHJlZmxpc3RmaWx0ZXIKKyAgICBzZXQgcmVmbGlzdGZpbHRlciAiKiIKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgcmVmbGlzdGZpbHRlciB3cml0ZSByZWZsaXN0ZmlsdGVyX2NoYW5nZQorICAgIHBhY2sgJHRvcC5mLmUgLXNpZGUgcmlnaHQgLWZpbGwgeCAtZXhwYW5kIDEKKyAgICBwYWNrICR0b3AuZi5sIC1zaWRlIGxlZnQKKyAgICBncmlkICR0b3AuZiAtIC1zdGlja3kgZXcgLXBhZHkgMgorICAgICR7TlN9OjpidXR0b24gJHRvcC5jbG9zZSAtY29tbWFuZCBbbGlzdCBkZXN0cm95ICR0b3BdIC10ZXh0IFttYyAiQ2xvc2UiXQorICAgIGJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkdG9wXQorICAgIGdyaWQgJHRvcC5jbG9zZSAtCisgICAgZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcCAwIC13ZWlnaHQgMQorICAgIGdyaWQgcm93Y29uZmlndXJlICR0b3AgMCAtd2VpZ2h0IDEKKyAgICBiaW5kICR0b3AubGlzdCA8MT4ge2JyZWFrfQorICAgIGJpbmQgJHRvcC5saXN0IDxCMS1Nb3Rpb24+IHticmVha30KKyAgICBiaW5kICR0b3AubGlzdCA8QnV0dG9uUmVsZWFzZS0xPiB7c2VsX3JlZmxpc3QgJVcgJXggJXk7IGJyZWFrfQorICAgIHNldCByZWZsaXN0IHt9CisgICAgcmVmaWxsX3JlZmxpc3QKK30KKworcHJvYyBzZWxfcmVmbGlzdCB7dyB4IHl9IHsKKyAgICBnbG9iYWwgc2hvd3JlZnN0b3AgcmVmbGlzdCBoZWFkaWRzIHRhZ2lkcyBvdGhlcnJlZmlkcworCisgICAgaWYgeyFbd2luZm8gZXhpc3RzICRzaG93cmVmc3RvcF19IHJldHVybgorICAgIHNldCBsIFtsaW5kZXggW3NwbGl0IFskdyBpbmRleCAiQCR4LCR5Il0gIi4iXSAwXQorICAgIHNldCByZWYgW2xpbmRleCAkcmVmbGlzdCBbZXhwciB7JGwtMX1dXQorICAgIHNldCBuIFtsaW5kZXggJHJlZiAwXQorICAgIHN3aXRjaCAtLSBbbGluZGV4ICRyZWYgMV0geworCSJIIiB7c2VsYnlpZCAkaGVhZGlkcygkbil9CisJIlIiIHtzZWxieWlkICRoZWFkaWRzKCRuKX0KKwkiVCIge3NlbGJ5aWQgJHRhZ2lkcygkbil9CisJIm8iIHtzZWxieWlkICRvdGhlcnJlZmlkcygkbil9CisgICAgfQorICAgICRzaG93cmVmc3RvcC5saXN0IHRhZyBhZGQgaGlnaGxpZ2h0ICRsLjAgIiRsLjAgbGluZWVuZCIKK30KKworcHJvYyB1bnNlbF9yZWZsaXN0IHt9IHsKKyAgICBnbG9iYWwgc2hvd3JlZnN0b3AKKworICAgIGlmIHshW2luZm8gZXhpc3RzIHNob3dyZWZzdG9wXSB8fCAhW3dpbmZvIGV4aXN0cyAkc2hvd3JlZnN0b3BdfSByZXR1cm4KKyAgICAkc2hvd3JlZnN0b3AubGlzdCB0YWcgcmVtb3ZlIGhpZ2hsaWdodCAwLjAgZW5kCit9CisKK3Byb2MgcmVmbGlzdGZpbHRlcl9jaGFuZ2Uge24xIG4yIG9wfSB7CisgICAgZ2xvYmFsIHJlZmxpc3RmaWx0ZXIKKworICAgIGFmdGVyIGNhbmNlbCByZWZpbGxfcmVmbGlzdAorICAgIGFmdGVyIDIwMCByZWZpbGxfcmVmbGlzdAorfQorCitwcm9jIHJlZmlsbF9yZWZsaXN0IHt9IHsKKyAgICBnbG9iYWwgcmVmbGlzdCByZWZsaXN0ZmlsdGVyIHNob3dyZWZzdG9wIGhlYWRpZHMgdGFnaWRzIG90aGVycmVmaWRzCisgICAgZ2xvYmFsIGN1cnZpZXcKKworICAgIGlmIHshW2luZm8gZXhpc3RzIHNob3dyZWZzdG9wXSB8fCAhW3dpbmZvIGV4aXN0cyAkc2hvd3JlZnN0b3BdfSByZXR1cm4KKyAgICBzZXQgcmVmcyB7fQorICAgIGZvcmVhY2ggbiBbYXJyYXkgbmFtZXMgaGVhZGlkc10geworCWlmIHtbc3RyaW5nIG1hdGNoICRyZWZsaXN0ZmlsdGVyICRuXX0geworCSAgICBpZiB7W2NvbW1pdGludmlldyAkaGVhZGlkcygkbikgJGN1cnZpZXddfSB7CisJCWlmIHtbc3RyaW5nIG1hdGNoICJyZW1vdGVzLyoiICRuXX0geworCQkgICAgbGFwcGVuZCByZWZzIFtsaXN0ICRuIFJdCisJCX0gZWxzZSB7CisJCSAgICBsYXBwZW5kIHJlZnMgW2xpc3QgJG4gSF0KKwkJfQorCSAgICB9IGVsc2UgeworCQlpbnRlcmVzdGVkaW4gJGhlYWRpZHMoJG4pIHtydW4gcmVmaWxsX3JlZmxpc3R9CisJICAgIH0KKwl9CisgICAgfQorICAgIGZvcmVhY2ggbiBbYXJyYXkgbmFtZXMgdGFnaWRzXSB7CisJaWYge1tzdHJpbmcgbWF0Y2ggJHJlZmxpc3RmaWx0ZXIgJG5dfSB7CisJICAgIGlmIHtbY29tbWl0aW52aWV3ICR0YWdpZHMoJG4pICRjdXJ2aWV3XX0geworCQlsYXBwZW5kIHJlZnMgW2xpc3QgJG4gVF0KKwkgICAgfSBlbHNlIHsKKwkJaW50ZXJlc3RlZGluICR0YWdpZHMoJG4pIHtydW4gcmVmaWxsX3JlZmxpc3R9CisJICAgIH0KKwl9CisgICAgfQorICAgIGZvcmVhY2ggbiBbYXJyYXkgbmFtZXMgb3RoZXJyZWZpZHNdIHsKKwlpZiB7W3N0cmluZyBtYXRjaCAkcmVmbGlzdGZpbHRlciAkbl19IHsKKwkgICAgaWYge1tjb21taXRpbnZpZXcgJG90aGVycmVmaWRzKCRuKSAkY3Vydmlld119IHsKKwkJbGFwcGVuZCByZWZzIFtsaXN0ICRuIG9dCisJICAgIH0gZWxzZSB7CisJCWludGVyZXN0ZWRpbiAkb3RoZXJyZWZpZHMoJG4pIHtydW4gcmVmaWxsX3JlZmxpc3R9CisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCByZWZzIFtsc29ydCAtaW5kZXggMCAkcmVmc10KKyAgICBpZiB7JHJlZnMgZXEgJHJlZmxpc3R9IHJldHVybgorCisgICAgIyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mICRzaG93cmVmc3RvcC5saXN0IGFjY29yZGluZyB0byB0aGUKKyAgICAjIGRpZmZlcmVuY2VzIGJldHdlZW4gJHJlZmxpc3QgKG9sZCkgYW5kICRyZWZzIChuZXcpCisgICAgJHNob3dyZWZzdG9wLmxpc3QgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgJHNob3dyZWZzdG9wLmxpc3QgaW5zZXJ0IGVuZCAiXG4iCisgICAgc2V0IGkgMAorICAgIHNldCBqIDAKKyAgICB3aGlsZSB7JGkgPCBbbGxlbmd0aCAkcmVmbGlzdF0gfHwgJGogPCBbbGxlbmd0aCAkcmVmc119IHsKKwlpZiB7JGkgPCBbbGxlbmd0aCAkcmVmbGlzdF19IHsKKwkgICAgaWYgeyRqIDwgW2xsZW5ndGggJHJlZnNdfSB7CisJCXNldCBjbXAgW3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHJlZmxpc3QgJGkgMF0gXAorCQkJICAgICBbbGluZGV4ICRyZWZzICRqIDBdXQorCQlpZiB7JGNtcCA9PSAwfSB7CisJCSAgICBzZXQgY21wIFtzdHJpbmcgY29tcGFyZSBbbGluZGV4ICRyZWZsaXN0ICRpIDFdIFwKKwkJCQkgW2xpbmRleCAkcmVmcyAkaiAxXV0KKwkJfQorCSAgICB9IGVsc2UgeworCQlzZXQgY21wIC0xCisJICAgIH0KKwl9IGVsc2UgeworCSAgICBzZXQgY21wIDEKKwl9CisJc3dpdGNoIC0tICRjbXAgeworCSAgICAtMSB7CisJCSRzaG93cmVmc3RvcC5saXN0IGRlbGV0ZSAiW2V4cHIgeyRqKzF9XS4wIiAiW2V4cHIgeyRqKzJ9XS4wIgorCQlpbmNyIGkKKwkgICAgfQorCSAgICAwIHsKKwkJaW5jciBpCisJCWluY3IgagorCSAgICB9CisJICAgIDEgeworCQlzZXQgbCBbZXhwciB7JGogKyAxfV0KKwkJJHNob3dyZWZzdG9wLmxpc3QgaW1hZ2UgY3JlYXRlICRsLjAgLWFsaWduIGJhc2VsaW5lIFwKKwkJICAgIC1pbWFnZSByZWZpY29uLVtsaW5kZXggJHJlZnMgJGogMV0gLXBhZHggMgorCQkkc2hvd3JlZnN0b3AubGlzdCBpbnNlcnQgJGwuMSAiW2xpbmRleCAkcmVmcyAkaiAwXVxuIgorCQlpbmNyIGoKKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IHJlZmxpc3QgJHJlZnMKKyAgICAjIGRlbGV0ZSBsYXN0IG5ld2xpbmUKKyAgICAkc2hvd3JlZnN0b3AubGlzdCBkZWxldGUgZW5kLTJjIGVuZC0xYworICAgICRzaG93cmVmc3RvcC5saXN0IGNvbmYgLXN0YXRlIGRpc2FibGVkCit9CisKKyMgU3R1ZmYgZm9yIGZpbmRpbmcgbmVhcmJ5IHRhZ3MKK3Byb2MgZ2V0YWxsY29tbWl0cyB7fSB7CisgICAgZ2xvYmFsIGFsbGNvbW1pdHMgbmV4dGFyYyBzZWVkcyBhbGxjY2FjaGUgYWxsY3dhaXQgY2FjaGVkYXJjcyBhbGxjdXBkYXRlCisgICAgZ2xvYmFsIGlkaGVhZHMgaWR0YWdzIGlkb3RoZXJyZWZzIGFsbHBhcmVudHMgdGFnb2JqaWQKKyAgICBnbG9iYWwgZ2l0ZGlyCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbGxjb21taXRzXX0geworCXNldCBuZXh0YXJjIDAKKwlzZXQgYWxsY29tbWl0cyAwCisJc2V0IHNlZWRzIHt9CisJc2V0IGFsbGN3YWl0IDAKKwlzZXQgY2FjaGVkYXJjcyAwCisJc2V0IGFsbGNjYWNoZSBbZmlsZSBqb2luICRnaXRkaXIgImdpdGsuY2FjaGUiXQorCWlmIHshW2NhdGNoIHsKKwkgICAgc2V0IGYgW29wZW4gJGFsbGNjYWNoZSByXQorCSAgICBzZXQgYWxsY3dhaXQgMQorCSAgICBnZXRjYWNoZSAkZgorCX1dfSByZXR1cm4KKyAgICB9CisKKyAgICBpZiB7JGFsbGN3YWl0fSB7CisJcmV0dXJuCisgICAgfQorICAgIHNldCBjbWQgW2xpc3QgfCBnaXQgcmV2LWxpc3QgLS1wYXJlbnRzXQorICAgIHNldCBhbGxjdXBkYXRlIFtleHByIHskc2VlZHMgbmUge319XQorICAgIGlmIHshJGFsbGN1cGRhdGV9IHsKKwlzZXQgaWRzICItLWFsbCIKKyAgICB9IGVsc2UgeworCXNldCByZWZzIFtjb25jYXQgW2FycmF5IG5hbWVzIGlkaGVhZHNdIFthcnJheSBuYW1lcyBpZHRhZ3NdIFwKKwkJICAgICAgW2FycmF5IG5hbWVzIGlkb3RoZXJyZWZzXV0KKwlzZXQgaWRzIHt9CisJc2V0IHRhZ29ianMge30KKwlmb3JlYWNoIG5hbWUgW2FycmF5IG5hbWVzIHRhZ29iamlkXSB7CisJICAgIGxhcHBlbmQgdGFnb2JqcyAkdGFnb2JqaWQoJG5hbWUpCisJfQorCWZvcmVhY2ggaWQgW2xzb3J0IC11bmlxdWUgJHJlZnNdIHsKKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgYWxscGFyZW50cygkaWQpXSAmJgorCQlbbHNlYXJjaCAtZXhhY3QgJHRhZ29ianMgJGlkXSA8IDB9IHsKKwkJbGFwcGVuZCBpZHMgJGlkCisJICAgIH0KKwl9CisJaWYgeyRpZHMgbmUge319IHsKKwkgICAgZm9yZWFjaCBpZCAkc2VlZHMgeworCQlsYXBwZW5kIGlkcyAiXiRpZCIKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYgeyRpZHMgbmUge319IHsKKwlzZXQgZmQgW29wZW4gW2NvbmNhdCAkY21kICRpZHNdIHJdCisJZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAKKwlpbmNyIGFsbGNvbW1pdHMKKwlub3didXN5IGFsbGNvbW1pdHMKKwlmaWxlcnVuICRmZCBbbGlzdCBnZXRhbGxjbGluZXMgJGZkXQorICAgIH0gZWxzZSB7CisJZGlzcG5lYXJ0YWdzIDAKKyAgICB9Cit9CisKKyMgU2luY2UgbW9zdCBjb21taXRzIGhhdmUgMSBwYXJlbnQgYW5kIDEgY2hpbGQsIHdlIGdyb3VwIHN0cmluZ3Mgb2YKKyMgc3VjaCBjb21taXRzIGludG8gImFyY3MiIGpvaW5pbmcgYnJhbmNoL21lcmdlIHBvaW50cyAoQk1QcyksIHdoaWNoCisjIGFyZSBjb21taXRzIHRoYXQgZWl0aGVyIGRvbid0IGhhdmUgMSBwYXJlbnQgb3IgZG9uJ3QgaGF2ZSAxIGNoaWxkLgorIworIyBhcmNub3MoaWQpIC0gaW5jb21pbmcgYXJjcyBmb3IgQk1QLCBhcmMgd2UncmUgb24gZm9yIG90aGVyIG5vZGVzCisjIGFyY291dChpZCkgLSBvdXRnb2luZyBhcmNzIGZvciBCTVAKKyMgYXJjaWRzKGEpIC0gbGlzdCBvZiBJRHMgb24gYXJjIGluY2x1ZGluZyBlbmQgYnV0IG5vdCBzdGFydAorIyBhcmNzdGFydChhKSAtIEJNUCBJRCBhdCBzdGFydCBvZiBhcmMKKyMgYXJjZW5kKGEpIC0gQk1QIElEIGF0IGVuZCBvZiBhcmMKKyMgZ3Jvd2luZyhhKSAtIGFyYyBhIGlzIHN0aWxsIGdyb3dpbmcKKyMgYXJjdGFncyhhKSAtIElEcyBvdXQgb2YgYXJjaWRzIChleGNsdWRpbmcgZW5kKSB0aGF0IGhhdmUgdGFncworIyBhcmNoZWFkcyhhKSAtIElEcyBvdXQgb2YgYXJjaWRzIChleGNsdWRpbmcgZW5kKSB0aGF0IGhhdmUgaGVhZHMKKyMgVGhlIHN0YXJ0IG9mIGFuIGFyYyBpcyBhdCB0aGUgZGVzY2VuZGVudCBlbmQsIHNvICJpbmNvbWluZyIgbWVhbnMKKyMgY29taW5nIGZyb20gZGVzY2VuZGVudHMsIGFuZCAib3V0Z29pbmciIG1lYW5zIGdvaW5nIHRvd2FyZHMgYW5jZXN0b3JzLgorCitwcm9jIGdldGFsbGNsaW5lcyB7ZmR9IHsKKyAgICBnbG9iYWwgYWxscGFyZW50cyBhbGxjaGlsZHJlbiBpZHRhZ3MgaWRoZWFkcyBuZXh0YXJjCisgICAgZ2xvYmFsIGFyY25vcyBhcmNpZHMgYXJjdGFncyBhcmNvdXQgYXJjZW5kIGFyY3N0YXJ0IGFyY2hlYWRzIGdyb3dpbmcKKyAgICBnbG9iYWwgc2VlZHMgYWxsY29tbWl0cyBjYWNoZWRhcmNzIGFsbGN1cGRhdGUKKworICAgIHNldCBuaWQgMAorICAgIHdoaWxlIHtbaW5jciBuaWRdIDw9IDEwMDAgJiYgW2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwlzZXQgaWQgW2xpbmRleCAkbGluZSAwXQorCWlmIHtbaW5mbyBleGlzdHMgYWxscGFyZW50cygkaWQpXX0geworCSAgICAjIHNlZW4gaXQgYWxyZWFkeQorCSAgICBjb250aW51ZQorCX0KKwlzZXQgY2FjaGVkYXJjcyAwCisJc2V0IG9sZHMgW2xyYW5nZSAkbGluZSAxIGVuZF0KKwlzZXQgYWxscGFyZW50cygkaWQpICRvbGRzCisJaWYgeyFbaW5mbyBleGlzdHMgYWxsY2hpbGRyZW4oJGlkKV19IHsKKwkgICAgc2V0IGFsbGNoaWxkcmVuKCRpZCkge30KKwkgICAgc2V0IGFyY25vcygkaWQpIHt9CisJICAgIGxhcHBlbmQgc2VlZHMgJGlkCisJfSBlbHNlIHsKKwkgICAgc2V0IGEgJGFyY25vcygkaWQpCisJICAgIGlmIHtbbGxlbmd0aCAkb2xkc10gPT0gMSAmJiBbbGxlbmd0aCAkYV0gPT0gMX0geworCQlsYXBwZW5kIGFyY2lkcygkYSkgJGlkCisJCWlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJCSAgICBsYXBwZW5kIGFyY3RhZ3MoJGEpICRpZAorCQl9CisJCWlmIHtbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCQkgICAgbGFwcGVuZCBhcmNoZWFkcygkYSkgJGlkCisJCX0KKwkJaWYge1tpbmZvIGV4aXN0cyBhbGxwYXJlbnRzKCRvbGRzKV19IHsKKwkJICAgICMgc2VlbiBwYXJlbnQgYWxyZWFkeQorCQkgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRvbGRzKV19IHsKKwkJCXNwbGl0YXJjICRvbGRzCisJCSAgICB9CisJCSAgICBsYXBwZW5kIGFyY2lkcygkYSkgJG9sZHMKKwkJICAgIHNldCBhcmNlbmQoJGEpICRvbGRzCisJCSAgICB1bnNldCBncm93aW5nKCRhKQorCQl9CisJCWxhcHBlbmQgYWxsY2hpbGRyZW4oJG9sZHMpICRpZAorCQlsYXBwZW5kIGFyY25vcygkb2xkcykgJGEKKwkJY29udGludWUKKwkgICAgfQorCX0KKwlmb3JlYWNoIGEgJGFyY25vcygkaWQpIHsKKwkgICAgbGFwcGVuZCBhcmNpZHMoJGEpICRpZAorCSAgICBzZXQgYXJjZW5kKCRhKSAkaWQKKwkgICAgdW5zZXQgZ3Jvd2luZygkYSkKKwl9CisKKwlzZXQgYW8ge30KKwlmb3JlYWNoIHAgJG9sZHMgeworCSAgICBsYXBwZW5kIGFsbGNoaWxkcmVuKCRwKSAkaWQKKwkgICAgc2V0IGEgW2luY3IgbmV4dGFyY10KKwkgICAgc2V0IGFyY3N0YXJ0KCRhKSAkaWQKKwkgICAgc2V0IGFyY2hlYWRzKCRhKSB7fQorCSAgICBzZXQgYXJjdGFncygkYSkge30KKwkgICAgc2V0IGFyY2hlYWRzKCRhKSB7fQorCSAgICBzZXQgYXJjaWRzKCRhKSB7fQorCSAgICBsYXBwZW5kIGFvICRhCisJICAgIHNldCBncm93aW5nKCRhKSAxCisJICAgIGlmIHtbaW5mbyBleGlzdHMgYWxscGFyZW50cygkcCldfSB7CisJCSMgc2VlbiBpdCBhbHJlYWR5LCBtYXkgbmVlZCB0byBtYWtlIGEgbmV3IGJyYW5jaAorCQlpZiB7IVtpbmZvIGV4aXN0cyBhcmNvdXQoJHApXX0geworCQkgICAgc3BsaXRhcmMgJHAKKwkJfQorCQlsYXBwZW5kIGFyY2lkcygkYSkgJHAKKwkJc2V0IGFyY2VuZCgkYSkgJHAKKwkJdW5zZXQgZ3Jvd2luZygkYSkKKwkgICAgfQorCSAgICBsYXBwZW5kIGFyY25vcygkcCkgJGEKKwl9CisJc2V0IGFyY291dCgkaWQpICRhbworICAgIH0KKyAgICBpZiB7JG5pZCA+IDB9IHsKKwlnbG9iYWwgY2FjaGVkX2RoZWFkcyBjYWNoZWRfZHRhZ3MgY2FjaGVkX2F0YWdzCisJdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2RoZWFkcworCXVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF9kdGFncworCXVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF9hdGFncworICAgIH0KKyAgICBpZiB7IVtlb2YgJGZkXX0geworCXJldHVybiBbZXhwciB7JG5pZCA+PSAxMDAwPyAyOiAxfV0KKyAgICB9CisgICAgc2V0IGNhY2hlb2sgMQorICAgIGlmIHtbY2F0Y2ggeworCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCisJY2xvc2UgJGZkCisgICAgfSBlcnJdfSB7CisJIyBnb3QgYW4gZXJyb3IgcmVhZGluZyB0aGUgbGlzdCBvZiBjb21taXRzCisJIyBpZiB3ZSB3ZXJlIHVwZGF0aW5nLCB0cnkgcmVyZWFkaW5nIHRoZSB3aG9sZSB0aGluZyBhZ2FpbgorCWlmIHskYWxsY3VwZGF0ZX0geworCSAgICBpbmNyIGFsbGNvbW1pdHMgLTEKKwkgICAgZHJvcGNhY2hlICRlcnIKKwkgICAgcmV0dXJuCisJfQorCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uO1wKKwkJYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nIHRhZyBpbmZvcm1hdGlvblwKKwkgICAgICAgIHdpbGwgYmUgaW5jb21wbGV0ZS4iXVxuKCRlcnIpIgorCXNldCBjYWNoZW9rIDAKKyAgICB9CisgICAgaWYge1tpbmNyIGFsbGNvbW1pdHMgLTFdID09IDB9IHsKKwlub3RidXN5IGFsbGNvbW1pdHMKKwlpZiB7JGNhY2hlb2t9IHsKKwkgICAgcnVuIHNhdmVjYWNoZQorCX0KKyAgICB9CisgICAgZGlzcG5lYXJ0YWdzIDAKKyAgICByZXR1cm4gMAorfQorCitwcm9jIHJlY2FsY2FyYyB7YX0geworICAgIGdsb2JhbCBhcmN0YWdzIGFyY2hlYWRzIGFyY2lkcyBpZHRhZ3MgaWRoZWFkcworCisgICAgc2V0IGF0IHt9CisgICAgc2V0IGFoIHt9CisgICAgZm9yZWFjaCBpZCBbbHJhbmdlICRhcmNpZHMoJGEpIDAgZW5kLTFdIHsKKwlpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCSAgICBsYXBwZW5kIGF0ICRpZAorCX0KKwlpZiB7W2luZm8gZXhpc3RzIGlkaGVhZHMoJGlkKV19IHsKKwkgICAgbGFwcGVuZCBhaCAkaWQKKwl9CisgICAgfQorICAgIHNldCBhcmN0YWdzKCRhKSAkYXQKKyAgICBzZXQgYXJjaGVhZHMoJGEpICRhaAorfQorCitwcm9jIHNwbGl0YXJjIHtwfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNpZHMgbmV4dGFyYyBhcmN0YWdzIGFyY2hlYWRzIGlkdGFncyBpZGhlYWRzCisgICAgZ2xvYmFsIGFyY3N0YXJ0IGFyY2VuZCBhcmNvdXQgYWxscGFyZW50cyBncm93aW5nCisKKyAgICBzZXQgYSAkYXJjbm9zKCRwKQorICAgIGlmIHtbbGxlbmd0aCAkYV0gIT0gMX0geworCXB1dHMgIm9vcHMgc3BsaXRhcmMgY2FsbGVkIGJ1dCBbbGxlbmd0aCAkYV0gYXJjcyBhbHJlYWR5IgorCXJldHVybgorICAgIH0KKyAgICBzZXQgYSBbbGluZGV4ICRhIDBdCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRhcmNpZHMoJGEpICRwXQorICAgIGlmIHskaSA8IDB9IHsKKwlwdXRzICJvb3BzIHNwbGl0YXJjICRwIG5vdCBpbiBhcmMgJGEiCisJcmV0dXJuCisgICAgfQorICAgIHNldCBuYSBbaW5jciBuZXh0YXJjXQorICAgIGlmIHtbaW5mbyBleGlzdHMgYXJjZW5kKCRhKV19IHsKKwlzZXQgYXJjZW5kKCRuYSkgJGFyY2VuZCgkYSkKKyAgICB9IGVsc2UgeworCXNldCBsIFtsaW5kZXggJGFsbHBhcmVudHMoW2xpbmRleCAkYXJjaWRzKCRhKSBlbmRdKSAwXQorCXNldCBqIFtsc2VhcmNoIC1leGFjdCAkYXJjbm9zKCRsKSAkYV0KKwlzZXQgYXJjbm9zKCRsKSBbbHJlcGxhY2UgJGFyY25vcygkbCkgJGogJGogJG5hXQorICAgIH0KKyAgICBzZXQgdGFpbCBbbHJhbmdlICRhcmNpZHMoJGEpIFtleHByIHskaSsxfV0gZW5kXQorICAgIHNldCBhcmNpZHMoJGEpIFtscmFuZ2UgJGFyY2lkcygkYSkgMCAkaV0KKyAgICBzZXQgYXJjZW5kKCRhKSAkcAorICAgIHNldCBhcmNzdGFydCgkbmEpICRwCisgICAgc2V0IGFyY291dCgkcCkgJG5hCisgICAgc2V0IGFyY2lkcygkbmEpICR0YWlsCisgICAgaWYge1tpbmZvIGV4aXN0cyBncm93aW5nKCRhKV19IHsKKwlzZXQgZ3Jvd2luZygkbmEpIDEKKwl1bnNldCBncm93aW5nKCRhKQorICAgIH0KKworICAgIGZvcmVhY2ggaWQgJHRhaWwgeworCWlmIHtbbGxlbmd0aCAkYXJjbm9zKCRpZCldID09IDF9IHsKKwkgICAgc2V0IGFyY25vcygkaWQpICRuYQorCX0gZWxzZSB7CisJICAgIHNldCBqIFtsc2VhcmNoIC1leGFjdCAkYXJjbm9zKCRpZCkgJGFdCisJICAgIHNldCBhcmNub3MoJGlkKSBbbHJlcGxhY2UgJGFyY25vcygkaWQpICRqICRqICRuYV0KKwl9CisgICAgfQorCisgICAgIyByZWNvbnN0cnVjdCB0YWdzIGFuZCBoZWFkcyBsaXN0cworICAgIGlmIHskYXJjdGFncygkYSkgbmUge30gfHwgJGFyY2hlYWRzKCRhKSBuZSB7fX0geworCXJlY2FsY2FyYyAkYQorCXJlY2FsY2FyYyAkbmEKKyAgICB9IGVsc2UgeworCXNldCBhcmN0YWdzKCRuYSkge30KKwlzZXQgYXJjaGVhZHMoJG5hKSB7fQorICAgIH0KK30KKworIyBVcGRhdGUgdGhpbmdzIGZvciBhIG5ldyBjb21taXQgYWRkZWQgdGhhdCBpcyBhIGNoaWxkIG9mIG9uZQorIyBleGlzdGluZyBjb21taXQuICBVc2VkIHdoZW4gY2hlcnJ5LXBpY2tpbmcuCitwcm9jIGFkZG5ld2NoaWxkIHtpZCBwfSB7CisgICAgZ2xvYmFsIGFsbHBhcmVudHMgYWxsY2hpbGRyZW4gaWR0YWdzIG5leHRhcmMKKyAgICBnbG9iYWwgYXJjbm9zIGFyY2lkcyBhcmN0YWdzIGFyY291dCBhcmNlbmQgYXJjc3RhcnQgYXJjaGVhZHMgZ3Jvd2luZworICAgIGdsb2JhbCBzZWVkcyBhbGxjb21taXRzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbGxjb21taXRzXSB8fCAhW2luZm8gZXhpc3RzIGFyY25vcygkcCldfSByZXR1cm4KKyAgICBzZXQgYWxscGFyZW50cygkaWQpIFtsaXN0ICRwXQorICAgIHNldCBhbGxjaGlsZHJlbigkaWQpIHt9CisgICAgc2V0IGFyY25vcygkaWQpIHt9CisgICAgbGFwcGVuZCBzZWVkcyAkaWQKKyAgICBsYXBwZW5kIGFsbGNoaWxkcmVuKCRwKSAkaWQKKyAgICBzZXQgYSBbaW5jciBuZXh0YXJjXQorICAgIHNldCBhcmNzdGFydCgkYSkgJGlkCisgICAgc2V0IGFyY2hlYWRzKCRhKSB7fQorICAgIHNldCBhcmN0YWdzKCRhKSB7fQorICAgIHNldCBhcmNpZHMoJGEpIFtsaXN0ICRwXQorICAgIHNldCBhcmNlbmQoJGEpICRwCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjb3V0KCRwKV19IHsKKwlzcGxpdGFyYyAkcAorICAgIH0KKyAgICBsYXBwZW5kIGFyY25vcygkcCkgJGEKKyAgICBzZXQgYXJjb3V0KCRpZCkgW2xpc3QgJGFdCit9CisKKyMgVGhpcyBpbXBsZW1lbnRzIGEgY2FjaGUgZm9yIHRoZSB0b3BvbG9neSBpbmZvcm1hdGlvbi4KKyMgVGhlIGNhY2hlIHNhdmVzLCBmb3IgZWFjaCBhcmMsIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBhcmMsCisjIHRoZSBpZHMgb24gdGhlIGFyYywgYW5kIHRoZSBvdXRnb2luZyBhcmNzIGZyb20gdGhlIGVuZC4KK3Byb2MgcmVhZGNhY2hlIHtmfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNpZHMgYXJjb3V0IGFyY3N0YXJ0IGFyY2VuZCBhcmN0YWdzIGFyY2hlYWRzIG5leHRhcmMKKyAgICBnbG9iYWwgaWR0YWdzIGlkaGVhZHMgYWxscGFyZW50cyBjYWNoZWRhcmNzIHBvc3NpYmxlX3NlZWRzIHNlZWRzIGdyb3dpbmcKKyAgICBnbG9iYWwgYWxsY3dhaXQKKworICAgIHNldCBhICRuZXh0YXJjCisgICAgc2V0IGxpbSAkY2FjaGVkYXJjcworICAgIGlmIHskbGltIC0gJGEgPiA1MDB9IHsKKwlzZXQgbGltIFtleHByIHskYSArIDUwMH1dCisgICAgfQorICAgIGlmIHtbY2F0Y2ggeworCWlmIHskYSA9PSAkbGltfSB7CisJICAgICMgZmluaXNoIHJlYWRpbmcgdGhlIGNhY2hlIGFuZCBzZXR0aW5nIHVwIGFyY3RhZ3MsIGV0Yy4KKwkgICAgc2V0IGxpbmUgW2dldHMgJGZdCisJICAgIGlmIHskbGluZSBuZSAiMSJ9IHtlcnJvciAiYmFkIGZpbmFsIHZlcnNpb24ifQorCSAgICBjbG9zZSAkZgorCSAgICBmb3JlYWNoIGlkIFthcnJheSBuYW1lcyBpZHRhZ3NdIHsKKwkJaWYge1tpbmZvIGV4aXN0cyBhcmNub3MoJGlkKV0gJiYgW2xsZW5ndGggJGFyY25vcygkaWQpXSA9PSAxICYmCisJCSAgICBbbGxlbmd0aCAkYWxscGFyZW50cygkaWQpXSA9PSAxfSB7CisJCSAgICBzZXQgYSBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorCQkgICAgaWYgeyRhcmN0YWdzKCRhKSBlcSB7fX0geworCQkJcmVjYWxjYXJjICRhCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBmb3JlYWNoIGlkIFthcnJheSBuYW1lcyBpZGhlYWRzXSB7CisJCWlmIHtbaW5mbyBleGlzdHMgYXJjbm9zKCRpZCldICYmIFtsbGVuZ3RoICRhcmNub3MoJGlkKV0gPT0gMSAmJgorCQkgICAgW2xsZW5ndGggJGFsbHBhcmVudHMoJGlkKV0gPT0gMX0geworCQkgICAgc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRpZCkgMF0KKwkJICAgIGlmIHskYXJjaGVhZHMoJGEpIGVxIHt9fSB7CisJCQlyZWNhbGNhcmMgJGEKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGZvcmVhY2ggaWQgW2xzb3J0IC11bmlxdWUgJHBvc3NpYmxlX3NlZWRzXSB7CisJCWlmIHskYXJjbm9zKCRpZCkgZXEge319IHsKKwkJICAgIGxhcHBlbmQgc2VlZHMgJGlkCisJCX0KKwkgICAgfQorCSAgICBzZXQgYWxsY3dhaXQgMAorCX0gZWxzZSB7CisJICAgIHdoaWxlIHtbaW5jciBhXSA8PSAkbGltfSB7CisJCXNldCBsaW5lIFtnZXRzICRmXQorCQlpZiB7W2xsZW5ndGggJGxpbmVdICE9IDN9IHtlcnJvciAiYmFkIGxpbmUifQorCQlzZXQgcyBbbGluZGV4ICRsaW5lIDBdCisJCXNldCBhcmNzdGFydCgkYSkgJHMKKwkJbGFwcGVuZCBhcmNvdXQoJHMpICRhCisJCWlmIHshW2luZm8gZXhpc3RzIGFyY25vcygkcyldfSB7CisJCSAgICBsYXBwZW5kIHBvc3NpYmxlX3NlZWRzICRzCisJCSAgICBzZXQgYXJjbm9zKCRzKSB7fQorCQl9CisJCXNldCBlIFtsaW5kZXggJGxpbmUgMV0KKwkJaWYgeyRlIGVxIHt9fSB7CisJCSAgICBzZXQgZ3Jvd2luZygkYSkgMQorCQl9IGVsc2UgeworCQkgICAgc2V0IGFyY2VuZCgkYSkgJGUKKwkJICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkZSldfSB7CisJCQlzZXQgYXJjb3V0KCRlKSB7fQorCQkgICAgfQorCQl9CisJCXNldCBhcmNpZHMoJGEpIFtsaW5kZXggJGxpbmUgMl0KKwkJZm9yZWFjaCBpZCAkYXJjaWRzKCRhKSB7CisJCSAgICBsYXBwZW5kIGFsbHBhcmVudHMoJHMpICRpZAorCQkgICAgc2V0IHMgJGlkCisJCSAgICBsYXBwZW5kIGFyY25vcygkaWQpICRhCisJCX0KKwkJaWYgeyFbaW5mbyBleGlzdHMgYWxscGFyZW50cygkcyldfSB7CisJCSAgICBzZXQgYWxscGFyZW50cygkcykge30KKwkJfQorCQlzZXQgYXJjdGFncygkYSkge30KKwkJc2V0IGFyY2hlYWRzKCRhKSB7fQorCSAgICB9CisJICAgIHNldCBuZXh0YXJjIFtleHByIHskYSAtIDF9XQorCX0KKyAgICB9IGVycl19IHsKKwlkcm9wY2FjaGUgJGVycgorCXJldHVybiAwCisgICAgfQorICAgIGlmIHshJGFsbGN3YWl0fSB7CisJZ2V0YWxsY29tbWl0cworICAgIH0KKyAgICByZXR1cm4gJGFsbGN3YWl0Cit9CisKK3Byb2MgZ2V0Y2FjaGUge2Z9IHsKKyAgICBnbG9iYWwgbmV4dGFyYyBjYWNoZWRhcmNzIHBvc3NpYmxlX3NlZWRzCisKKyAgICBpZiB7W2NhdGNoIHsKKwlzZXQgbGluZSBbZ2V0cyAkZl0KKwlpZiB7W2xsZW5ndGggJGxpbmVdICE9IDIgfHwgW2xpbmRleCAkbGluZSAwXSBuZSAiMSJ9IHtlcnJvciAiYmFkIHZlcnNpb24ifQorCSMgbWFrZSBzdXJlIGl0J3MgYW4gaW50ZWdlcgorCXNldCBjYWNoZWRhcmNzIFtleHByIHtpbnQoW2xpbmRleCAkbGluZSAxXSl9XQorCWlmIHskY2FjaGVkYXJjcyA8IDB9IHtlcnJvciAiYmFkIG51bWJlciBvZiBhcmNzIn0KKwlzZXQgbmV4dGFyYyAwCisJc2V0IHBvc3NpYmxlX3NlZWRzIHt9CisJcnVuIHJlYWRjYWNoZSAkZgorICAgIH0gZXJyXX0geworCWRyb3BjYWNoZSAkZXJyCisgICAgfQorICAgIHJldHVybiAwCit9CisKK3Byb2MgZHJvcGNhY2hlIHtlcnJ9IHsKKyAgICBnbG9iYWwgYWxsY3dhaXQgbmV4dGFyYyBjYWNoZWRhcmNzIHNlZWRzCisKKyAgICAjcHV0cyAiZHJvcHBpbmcgY2FjaGUgKCRlcnIpIgorICAgIGZvcmVhY2ggdiB7YXJjbm9zIGFyY291dCBhcmNpZHMgYXJjc3RhcnQgYXJjZW5kIGdyb3dpbmcgXAorCQkgICBhcmN0YWdzIGFyY2hlYWRzIGFsbHBhcmVudHMgYWxsY2hpbGRyZW59IHsKKwlnbG9iYWwgJHYKKwl1bnNldCAtbm9jb21wbGFpbiAkdgorICAgIH0KKyAgICBzZXQgYWxsY3dhaXQgMAorICAgIHNldCBuZXh0YXJjIDAKKyAgICBzZXQgY2FjaGVkYXJjcyAwCisgICAgc2V0IHNlZWRzIHt9CisgICAgZ2V0YWxsY29tbWl0cworfQorCitwcm9jIHdyaXRlY2FjaGUge2Z9IHsKKyAgICBnbG9iYWwgY2FjaGVhcmMgY2FjaGVkYXJjcyBhbGxjY2FjaGUKKyAgICBnbG9iYWwgYXJjc3RhcnQgYXJjZW5kIGFyY25vcyBhcmNpZHMgYXJjb3V0CisKKyAgICBzZXQgYSAkY2FjaGVhcmMKKyAgICBzZXQgbGltICRjYWNoZWRhcmNzCisgICAgaWYgeyRsaW0gLSAkYSA+IDEwMDB9IHsKKwlzZXQgbGltIFtleHByIHskYSArIDEwMDB9XQorICAgIH0KKyAgICBpZiB7W2NhdGNoIHsKKwl3aGlsZSB7W2luY3IgYV0gPD0gJGxpbX0geworCSAgICBpZiB7W2luZm8gZXhpc3RzIGFyY2VuZCgkYSldfSB7CisJCXB1dHMgJGYgW2xpc3QgJGFyY3N0YXJ0KCRhKSAkYXJjZW5kKCRhKSAkYXJjaWRzKCRhKV0KKwkgICAgfSBlbHNlIHsKKwkJcHV0cyAkZiBbbGlzdCAkYXJjc3RhcnQoJGEpIHt9ICRhcmNpZHMoJGEpXQorCSAgICB9CisJfQorICAgIH0gZXJyXX0geworCWNhdGNoIHtjbG9zZSAkZn0KKwljYXRjaCB7ZmlsZSBkZWxldGUgJGFsbGNjYWNoZX0KKwkjcHV0cyAid3JpdGluZyBjYWNoZSBmYWlsZWQgKCRlcnIpIgorCXJldHVybiAwCisgICAgfQorICAgIHNldCBjYWNoZWFyYyBbZXhwciB7JGEgLSAxfV0KKyAgICBpZiB7JGEgPiAkY2FjaGVkYXJjc30geworCXB1dHMgJGYgIjEiCisJY2xvc2UgJGYKKwlyZXR1cm4gMAorICAgIH0KKyAgICByZXR1cm4gMQorfQorCitwcm9jIHNhdmVjYWNoZSB7fSB7CisgICAgZ2xvYmFsIG5leHRhcmMgY2FjaGVkYXJjcyBjYWNoZWFyYyBhbGxjY2FjaGUKKworICAgIGlmIHskbmV4dGFyYyA9PSAkY2FjaGVkYXJjc30gcmV0dXJuCisgICAgc2V0IGNhY2hlYXJjIDAKKyAgICBzZXQgY2FjaGVkYXJjcyAkbmV4dGFyYworICAgIGNhdGNoIHsKKwlzZXQgZiBbb3BlbiAkYWxsY2NhY2hlIHddCisJcHV0cyAkZiBbbGlzdCAxICRjYWNoZWRhcmNzXQorCXJ1biB3cml0ZWNhY2hlICRmCisgICAgfQorfQorCisjIFJldHVybnMgMSBpZiBhIGlzIGFuIGFuY2VzdG9yIG9mIGIsIC0xIGlmIGIgaXMgYW4gYW5jZXN0b3Igb2YgYSwKKyMgb3IgMCBpZiBuZWl0aGVyIGlzIHRydWUuCitwcm9jIGFuY19vcl9kZXNjIHthIGJ9IHsKKyAgICBnbG9iYWwgYXJjb3V0IGFyY3N0YXJ0IGFyY2VuZCBhcmNub3MgY2FjaGVkX2lzYW5jCisKKyAgICBpZiB7JGFyY25vcygkYSkgZXEgJGFyY25vcygkYil9IHsKKwkjIEJvdGggYXJlIG9uIHRoZSBzYW1lIGFyYyhzKTsgZWl0aGVyIGJvdGggYXJlIHRoZSBzYW1lIEJNUCwKKwkjIG9yIGlmIG9uZSBpcyBub3QgYSBCTVAsIHRoZSBvdGhlciBpcyBhbHNvIG5vdCBhIEJNUCBvciBpcworCSMgdGhlIEJNUCBhdCBlbmQgb2YgdGhlIGFyYyAoYW5kIGl0IG9ubHkgaGFzIDEgaW5jb21pbmcgYXJjKS4KKwkjIE9yIGJvdGggY2FuIGJlIEJNUHMgd2l0aCBubyBpbmNvbWluZyBhcmNzLgorCWlmIHskYSBlcSAkYiB8fCAkYXJjbm9zKCRhKSBlcSB7fX0geworCSAgICByZXR1cm4gMAorCX0KKwkjIGFzc2VydCB7W2xsZW5ndGggJGFyY25vcygkYSldID09IDF9CisJc2V0IGFyYyBbbGluZGV4ICRhcmNub3MoJGEpIDBdCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRhcmNpZHMoJGFyYykgJGFdCisJc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRhcmNpZHMoJGFyYykgJGJdCisJaWYgeyRpIDwgMCB8fCAkaSA+ICRqfSB7CisJICAgIHJldHVybiAxCisJfSBlbHNlIHsKKwkgICAgcmV0dXJuIC0xCisJfQorICAgIH0KKworICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkYSldfSB7CisJc2V0IGFyYyBbbGluZGV4ICRhcmNub3MoJGEpIDBdCisJaWYge1tpbmZvIGV4aXN0cyBhcmNlbmQoJGFyYyldfSB7CisJICAgIHNldCBhZW5kICRhcmNlbmQoJGFyYykKKwl9IGVsc2UgeworCSAgICBzZXQgYWVuZCB7fQorCX0KKwlzZXQgYSAkYXJjc3RhcnQoJGFyYykKKyAgICB9IGVsc2UgeworCXNldCBhZW5kICRhCisgICAgfQorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkYildfSB7CisJc2V0IGFyYyBbbGluZGV4ICRhcmNub3MoJGIpIDBdCisJaWYge1tpbmZvIGV4aXN0cyBhcmNlbmQoJGFyYyldfSB7CisJICAgIHNldCBiZW5kICRhcmNlbmQoJGFyYykKKwl9IGVsc2UgeworCSAgICBzZXQgYmVuZCB7fQorCX0KKwlzZXQgYiAkYXJjc3RhcnQoJGFyYykKKyAgICB9IGVsc2UgeworCXNldCBiZW5kICRiCisgICAgfQorICAgIGlmIHskYSBlcSAkYmVuZH0geworCXJldHVybiAxCisgICAgfQorICAgIGlmIHskYiBlcSAkYWVuZH0geworCXJldHVybiAtMQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9pc2FuYygkYSwkYmVuZCldfSB7CisJaWYgeyRjYWNoZWRfaXNhbmMoJGEsJGJlbmQpfSB7CisJICAgIHJldHVybiAxCisJfQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9pc2FuYygkYiwkYWVuZCldfSB7CisJaWYgeyRjYWNoZWRfaXNhbmMoJGIsJGFlbmQpfSB7CisJICAgIHJldHVybiAtMQorCX0KKwlpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9pc2FuYygkYSwkYmVuZCldfSB7CisJICAgIHJldHVybiAwCisJfQorICAgIH0KKworICAgIHNldCB0b2RvIFtsaXN0ICRhICRiXQorICAgIHNldCBhbmMoJGEpIGEKKyAgICBzZXQgYW5jKCRiKSBiCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb119IHtpbmNyIGl9IHsKKwlzZXQgeCBbbGluZGV4ICR0b2RvICRpXQorCWlmIHskYW5jKCR4KSBlcSB7fX0geworCSAgICBjb250aW51ZQorCX0KKwlmb3JlYWNoIGFyYyAkYXJjbm9zKCR4KSB7CisJICAgIHNldCB4ZCAkYXJjc3RhcnQoJGFyYykKKwkgICAgaWYgeyR4ZCBlcSAkYmVuZH0geworCQlzZXQgY2FjaGVkX2lzYW5jKCRhLCRiZW5kKSAxCisJCXNldCBjYWNoZWRfaXNhbmMoJGIsJGFlbmQpIDAKKwkJcmV0dXJuIDEKKwkgICAgfSBlbHNlaWYgeyR4ZCBlcSAkYWVuZH0geworCQlzZXQgY2FjaGVkX2lzYW5jKCRiLCRhZW5kKSAxCisJCXNldCBjYWNoZWRfaXNhbmMoJGEsJGJlbmQpIDAKKwkJcmV0dXJuIC0xCisJICAgIH0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgYW5jKCR4ZCldfSB7CisJCXNldCBhbmMoJHhkKSAkYW5jKCR4KQorCQlsYXBwZW5kIHRvZG8gJHhkCisJICAgIH0gZWxzZWlmIHskYW5jKCR4ZCkgbmUgJGFuYygkeCl9IHsKKwkJc2V0IGFuYygkeGQpIHt9CisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCBjYWNoZWRfaXNhbmMoJGEsJGJlbmQpIDAKKyAgICBzZXQgY2FjaGVkX2lzYW5jKCRiLCRhZW5kKSAwCisgICAgcmV0dXJuIDAKK30KKworIyBUaGlzIGlkZW50aWZpZXMgd2hldGhlciAkZGVzYyBoYXMgYW4gYW5jZXN0b3IgdGhhdCBpcworIyBhIGdyb3dpbmcgdGlwIG9mIHRoZSBncmFwaCBhbmQgd2hpY2ggaXMgbm90IGFuIGFuY2VzdG9yIG9mICRhbmMKKyMgYW5kIHJldHVybnMgMCBpZiBzbyBhbmQgMSBpZiBub3QuCisjIElmIHdlIHN1YnNlcXVlbnRseSBkaXNjb3ZlciBhIHRhZyBvbiBzdWNoIGEgZ3Jvd2luZyB0aXAsIGFuZCB0aGF0CisjIHR1cm5zIG91dCB0byBiZSBhIGRlc2NlbmRlbnQgb2YgJGFuYyAod2hpY2ggaXQgY291bGQsIHNpbmNlIHdlCisjIGRvbid0IG5lY2Vzc2FyaWx5IHNlZSBjaGlsZHJlbiBiZWZvcmUgcGFyZW50cyksIHRoZW4gJGRlc2MKKyMgaXNuJ3QgYSBnb29kIGNob2ljZSB0byBkaXNwbGF5IGFzIGEgZGVzY2VuZGVudCB0YWcgb2YKKyMgJGFuYyAoc2luY2UgaXQgaXMgdGhlIGRlc2NlbmRlbnQgb2YgYW5vdGhlciB0YWcgd2hpY2ggaXMKKyMgYSBkZXNjZW5kZW50IG9mICRhbmMpLiAgU2ltaWxhcmx5LCAkYW5jIGlzbid0IGEgZ29vZCBjaG9pY2UgdG8KKyMgZGlzcGxheSBhcyBhIGFuY2VzdG9yIHRhZyBvZiAkZGVzYy4KKyMKK3Byb2MgaXNfY2VydGFpbiB7ZGVzYyBhbmN9IHsKKyAgICBnbG9iYWwgYXJjbm9zIGFyY291dCBhcmNzdGFydCBhcmNlbmQgZ3Jvd2luZyBwcm9ibGVtcworCisgICAgc2V0IGNlcnRhaW4ge30KKyAgICBpZiB7W2xsZW5ndGggJGFyY25vcygkYW5jKV0gPT0gMX0geworCSMgdGFncyBvbiB0aGUgc2FtZSBhcmMgYXJlIGNlcnRhaW4KKwlpZiB7JGFyY25vcygkZGVzYykgZXEgJGFyY25vcygkYW5jKX0geworCSAgICByZXR1cm4gMQorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyBhcmNvdXQoJGFuYyldfSB7CisJICAgICMgaWYgJGFuYyBpcyBwYXJ0d2F5IGFsb25nIGFuIGFyYywgdXNlIHRoZSBzdGFydCBvZiB0aGUgYXJjIGluc3RlYWQKKwkgICAgc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRhbmMpIDBdCisJICAgIHNldCBhbmMgJGFyY3N0YXJ0KCRhKQorCX0KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRhcmNub3MoJGRlc2MpXSA+IDEgfHwgW2luZm8gZXhpc3RzIGFyY291dCgkZGVzYyldfSB7CisJc2V0IHggJGRlc2MKKyAgICB9IGVsc2UgeworCXNldCBhIFtsaW5kZXggJGFyY25vcygkZGVzYykgMF0KKwlzZXQgeCAkYXJjZW5kKCRhKQorICAgIH0KKyAgICBpZiB7JHggPT0gJGFuY30geworCXJldHVybiAxCisgICAgfQorICAgIHNldCBhbmNsaXN0IFtsaXN0ICR4XQorICAgIHNldCBkbCgkeCkgMQorICAgIHNldCBubmggMQorICAgIHNldCBuZ3Jvd2FuYyAwCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkYW5jbGlzdF0gJiYgKCRubmggPiAwIHx8ICRuZ3Jvd2FuYyA+IDApfSB7aW5jciBpfSB7CisJc2V0IHggW2xpbmRleCAkYW5jbGlzdCAkaV0KKwlpZiB7JGRsKCR4KX0geworCSAgICBpbmNyIG5uaCAtMQorCX0KKwlzZXQgZG9uZSgkeCkgMQorCWZvcmVhY2ggYSAkYXJjb3V0KCR4KSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgZ3Jvd2luZygkYSldfSB7CisJCWlmIHshW2luZm8gZXhpc3RzIGdyb3dhbmMoJHgpXSAmJiAkZGwoJHgpfSB7CisJCSAgICBzZXQgZ3Jvd2FuYygkeCkgMQorCQkgICAgaW5jciBuZ3Jvd2FuYworCQl9CisJICAgIH0gZWxzZSB7CisJCXNldCB5ICRhcmNlbmQoJGEpCisJCWlmIHtbaW5mbyBleGlzdHMgZGwoJHkpXX0geworCQkgICAgaWYgeyRkbCgkeSl9IHsKKwkJCWlmIHshJGRsKCR4KX0geworCQkJICAgIHNldCBkbCgkeSkgMAorCQkJICAgIGlmIHshW2luZm8gZXhpc3RzIGRvbmUoJHkpXX0geworCQkJCWluY3Igbm5oIC0xCisJCQkgICAgfQorCQkJICAgIGlmIHtbaW5mbyBleGlzdHMgZ3Jvd2FuYygkeCldfSB7CisJCQkJaW5jciBuZ3Jvd2FuYyAtMQorCQkJICAgIH0KKwkJCSAgICBzZXQgeGwgW2xpc3QgJHldCisJCQkgICAgZm9yIHtzZXQgayAwfSB7JGsgPCBbbGxlbmd0aCAkeGxdfSB7aW5jciBrfSB7CisJCQkJc2V0IHogW2xpbmRleCAkeGwgJGtdCisJCQkJZm9yZWFjaCBjICRhcmNvdXQoJHopIHsKKwkJCQkgICAgaWYge1tpbmZvIGV4aXN0cyBhcmNlbmQoJGMpXX0geworCQkJCQlzZXQgdiAkYXJjZW5kKCRjKQorCQkJCQlpZiB7W2luZm8gZXhpc3RzIGRsKCR2KV0gJiYgJGRsKCR2KX0geworCQkJCQkgICAgc2V0IGRsKCR2KSAwCisJCQkJCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBkb25lKCR2KV19IHsKKwkJCQkJCWluY3Igbm5oIC0xCisJCQkJCSAgICB9CisJCQkJCSAgICBpZiB7W2luZm8gZXhpc3RzIGdyb3dhbmMoJHYpXX0geworCQkJCQkJaW5jciBuZ3Jvd2FuYyAtMQorCQkJCQkgICAgfQorCQkJCQkgICAgbGFwcGVuZCB4bCAkdgorCQkJCQl9CisJCQkJICAgIH0KKwkJCQl9CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9IGVsc2VpZiB7JHkgZXEgJGFuYyB8fCAhJGRsKCR4KX0geworCQkgICAgc2V0IGRsKCR5KSAwCisJCSAgICBsYXBwZW5kIGFuY2xpc3QgJHkKKwkJfSBlbHNlIHsKKwkJICAgIHNldCBkbCgkeSkgMQorCQkgICAgbGFwcGVuZCBhbmNsaXN0ICR5CisJCSAgICBpbmNyIG5uaAorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGZvcmVhY2ggeCBbYXJyYXkgbmFtZXMgZ3Jvd2FuY10geworCWlmIHskZGwoJHgpfSB7CisJICAgIHJldHVybiAwCisJfQorCXJldHVybiAwCisgICAgfQorICAgIHJldHVybiAxCit9CisKK3Byb2MgdmFsaWRhdGVfYXJjdGFncyB7YX0geworICAgIGdsb2JhbCBhcmN0YWdzIGlkdGFncworCisgICAgc2V0IGkgLTEKKyAgICBzZXQgbmEgJGFyY3RhZ3MoJGEpCisgICAgZm9yZWFjaCBpZCAkYXJjdGFncygkYSkgeworCWluY3IgaQorCWlmIHshW2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCSAgICBzZXQgbmEgW2xyZXBsYWNlICRuYSAkaSAkaV0KKwkgICAgaW5jciBpIC0xCisJfQorICAgIH0KKyAgICBzZXQgYXJjdGFncygkYSkgJG5hCit9CisKK3Byb2MgdmFsaWRhdGVfYXJjaGVhZHMge2F9IHsKKyAgICBnbG9iYWwgYXJjaGVhZHMgaWRoZWFkcworCisgICAgc2V0IGkgLTEKKyAgICBzZXQgbmEgJGFyY2hlYWRzKCRhKQorICAgIGZvcmVhY2ggaWQgJGFyY2hlYWRzKCRhKSB7CisJaW5jciBpCisJaWYgeyFbaW5mbyBleGlzdHMgaWRoZWFkcygkaWQpXX0geworCSAgICBzZXQgbmEgW2xyZXBsYWNlICRuYSAkaSAkaV0KKwkgICAgaW5jciBpIC0xCisJfQorICAgIH0KKyAgICBzZXQgYXJjaGVhZHMoJGEpICRuYQorfQorCisjIFJldHVybiB0aGUgbGlzdCBvZiBJRHMgdGhhdCBoYXZlIHRhZ3MgdGhhdCBhcmUgZGVzY2VuZGVudHMgb2YgaWQsCisjIGlnbm9yaW5nIElEcyB0aGF0IGFyZSBkZXNjZW5kZW50cyBvZiBJRHMgYWxyZWFkeSByZXBvcnRlZC4KK3Byb2MgZGVzY3RhZ3Mge2lkfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNzdGFydCBhcmNpZHMgYXJjdGFncyBpZHRhZ3MgYWxscGFyZW50cworICAgIGdsb2JhbCBncm93aW5nIGNhY2hlZF9kdGFncworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYWxscGFyZW50cygkaWQpXX0geworCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgdDEgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBhcmdpZCAkaWQKKyAgICBpZiB7W2xsZW5ndGggJGFyY25vcygkaWQpXSA9PSAxICYmIFtsbGVuZ3RoICRhbGxwYXJlbnRzKCRpZCldID09IDF9IHsKKwkjIHBhcnQtd2F5IGFsb25nIGFuIGFyYzsgY2hlY2sgdGhhdCBhcmMgZmlyc3QKKwlzZXQgYSBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorCWlmIHskYXJjdGFncygkYSkgbmUge319IHsKKwkgICAgdmFsaWRhdGVfYXJjdGFncyAkYQorCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJGlkXQorCSAgICBzZXQgdGlkIHt9CisJICAgIGZvcmVhY2ggdCAkYXJjdGFncygkYSkgeworCQlzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJHRdCisJCWlmIHskaiA+PSAkaX0gYnJlYWsKKwkJc2V0IHRpZCAkdAorCSAgICB9CisJICAgIGlmIHskdGlkIG5lIHt9fSB7CisJCXJldHVybiAkdGlkCisJICAgIH0KKwl9CisJc2V0IGlkICRhcmNzdGFydCgkYSkKKwlpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCSAgICByZXR1cm4gJGlkCisJfQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9kdGFncygkaWQpXX0geworCXJldHVybiAkY2FjaGVkX2R0YWdzKCRpZCkKKyAgICB9CisKKyAgICBzZXQgb3JpZ2lkICRpZAorICAgIHNldCB0b2RvIFtsaXN0ICRpZF0KKyAgICBzZXQgcXVldWVkKCRpZCkgMQorICAgIHNldCBuYyAxCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb10gJiYgJG5jID4gMH0ge2luY3IgaX0geworCXNldCBpZCBbbGluZGV4ICR0b2RvICRpXQorCXNldCBkb25lKCRpZCkgMQorCXNldCB0YSBbaW5mbyBleGlzdHMgaGFzdGFnZ2VkYW5jZXN0b3IoJGlkKV0KKwlpZiB7ISR0YX0geworCSAgICBpbmNyIG5jIC0xCisJfQorCSMgaWdub3JlIHRhZ3Mgb24gc3RhcnRpbmcgbm9kZQorCWlmIHshJHRhICYmICRpID4gMH0geworCSAgICBpZiB7W2luZm8gZXhpc3RzIGlkdGFncygkaWQpXX0geworCQlzZXQgdGFnbG9jKCRpZCkgJGlkCisJCXNldCB0YSAxCisJICAgIH0gZWxzZWlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2R0YWdzKCRpZCldfSB7CisJCXNldCB0YWdsb2MoJGlkKSAkY2FjaGVkX2R0YWdzKCRpZCkKKwkJc2V0IHRhIDEKKwkgICAgfQorCX0KKwlmb3JlYWNoIGEgJGFyY25vcygkaWQpIHsKKwkgICAgc2V0IGQgJGFyY3N0YXJ0KCRhKQorCSAgICBpZiB7ISR0YSAmJiAkYXJjdGFncygkYSkgbmUge319IHsKKwkJdmFsaWRhdGVfYXJjdGFncyAkYQorCQlpZiB7JGFyY3RhZ3MoJGEpIG5lIHt9fSB7CisJCSAgICBsYXBwZW5kIHRhZ2xvYygkaWQpIFtsaW5kZXggJGFyY3RhZ3MoJGEpIGVuZF0KKwkJfQorCSAgICB9CisJICAgIGlmIHskdGEgfHwgJGFyY3RhZ3MoJGEpIG5lIHt9fSB7CisJCXNldCB0b21hcmsgW2xpc3QgJGRdCisJCWZvciB7c2V0IGogMH0geyRqIDwgW2xsZW5ndGggJHRvbWFya119IHtpbmNyIGp9IHsKKwkJICAgIHNldCBkZCBbbGluZGV4ICR0b21hcmsgJGpdCisJCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRhbmNlc3RvcigkZGQpXX0geworCQkJaWYge1tpbmZvIGV4aXN0cyBkb25lKCRkZCldfSB7CisJCQkgICAgZm9yZWFjaCBiICRhcmNub3MoJGRkKSB7CisJCQkJbGFwcGVuZCB0b21hcmsgJGFyY3N0YXJ0KCRiKQorCQkJICAgIH0KKwkJCSAgICBpZiB7W2luZm8gZXhpc3RzIHRhZ2xvYygkZGQpXX0geworCQkJCXVuc2V0IHRhZ2xvYygkZGQpCisJCQkgICAgfQorCQkJfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBxdWV1ZWQoJGRkKV19IHsKKwkJCSAgICBpbmNyIG5jIC0xCisJCQl9CisJCQlzZXQgaGFzdGFnZ2VkYW5jZXN0b3IoJGRkKSAxCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBxdWV1ZWQoJGQpXX0geworCQlsYXBwZW5kIHRvZG8gJGQKKwkJc2V0IHF1ZXVlZCgkZCkgMQorCQlpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRhbmNlc3RvcigkZCldfSB7CisJCSAgICBpbmNyIG5jCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IHRhZ3Mge30KKyAgICBmb3JlYWNoIGlkIFthcnJheSBuYW1lcyB0YWdsb2NdIHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRhbmNlc3RvcigkaWQpXX0geworCSAgICBmb3JlYWNoIHQgJHRhZ2xvYygkaWQpIHsKKwkJaWYge1tsc2VhcmNoIC1leGFjdCAkdGFncyAkdF0gPCAwfSB7CisJCSAgICBsYXBwZW5kIHRhZ3MgJHQKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgdDIgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBsb29waXggJGkKKworICAgICMgcmVtb3ZlIHRhZ3MgdGhhdCBhcmUgZGVzY2VuZGVudHMgb2Ygb3RoZXIgdGFncworICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRhZ3NdfSB7aW5jciBpfSB7CisJc2V0IGEgW2xpbmRleCAkdGFncyAkaV0KKwlmb3Ige3NldCBqIDB9IHskaiA8ICRpfSB7aW5jciBqfSB7CisJICAgIHNldCBiIFtsaW5kZXggJHRhZ3MgJGpdCisJICAgIHNldCByIFthbmNfb3JfZGVzYyAkYSAkYl0KKwkgICAgaWYgeyRyID09IDF9IHsKKwkJc2V0IHRhZ3MgW2xyZXBsYWNlICR0YWdzICRqICRqXQorCQlpbmNyIGogLTEKKwkJaW5jciBpIC0xCisJICAgIH0gZWxzZWlmIHskciA9PSAtMX0geworCQlzZXQgdGFncyBbbHJlcGxhY2UgJHRhZ3MgJGkgJGldCisJCWluY3IgaSAtMQorCQlicmVhaworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIHtbYXJyYXkgbmFtZXMgZ3Jvd2luZ10gbmUge319IHsKKwkjIGdyYXBoIGlzbid0IGZpbmlzaGVkLCBuZWVkIHRvIGNoZWNrIGlmIGFueSB0YWcgY291bGQgZ2V0CisJIyBlY2xpcHNlZCBieSBhbm90aGVyIHRhZyBjb21pbmcgbGF0ZXIuICBTaW1wbHkgaWdub3JlIGFueQorCSMgdGFncyB0aGF0IGNvdWxkIGxhdGVyIGdldCBlY2xpcHNlZC4KKwlzZXQgY3RhZ3Mge30KKwlmb3JlYWNoIHQgJHRhZ3MgeworCSAgICBpZiB7W2lzX2NlcnRhaW4gJHQgJG9yaWdpZF19IHsKKwkJbGFwcGVuZCBjdGFncyAkdAorCSAgICB9CisJfQorCWlmIHskdGFncyBlcSAkY3RhZ3N9IHsKKwkgICAgc2V0IGNhY2hlZF9kdGFncygkb3JpZ2lkKSAkdGFncworCX0gZWxzZSB7CisJICAgIHNldCB0YWdzICRjdGFncworCX0KKyAgICB9IGVsc2UgeworCXNldCBjYWNoZWRfZHRhZ3MoJG9yaWdpZCkgJHRhZ3MKKyAgICB9CisgICAgc2V0IHQzIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBpZiB7MCAmJiAkdDMgLSAkdDEgPj0gMTAwfSB7CisJcHV0cyAiaXRlcmF0aW5nIGRlc2NlbmRlbnRzICgkbG9vcGl4L1tsbGVuZ3RoICR0b2RvXSBub2RlcykgdG9va1wKKyAgICAJICAgIFtleHByIHskdDItJHQxfV0rW2V4cHIgeyR0My0kdDJ9XW1zLCAkbmMgY2FuZGlkYXRlcyBsZWZ0IgorICAgIH0KKyAgICByZXR1cm4gJHRhZ3MKK30KKworcHJvYyBhbmN0YWdzIHtpZH0geworICAgIGdsb2JhbCBhcmNub3MgYXJjaWRzIGFyY291dCBhcmNlbmQgYXJjdGFncyBpZHRhZ3MgYWxscGFyZW50cworICAgIGdsb2JhbCBncm93aW5nIGNhY2hlZF9hdGFncworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYWxscGFyZW50cygkaWQpXX0geworCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgdDEgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCBhcmdpZCAkaWQKKyAgICBpZiB7W2xsZW5ndGggJGFyY25vcygkaWQpXSA9PSAxICYmIFtsbGVuZ3RoICRhbGxwYXJlbnRzKCRpZCldID09IDF9IHsKKwkjIHBhcnQtd2F5IGFsb25nIGFuIGFyYzsgY2hlY2sgdGhhdCBhcmMgZmlyc3QKKwlzZXQgYSBbbGluZGV4ICRhcmNub3MoJGlkKSAwXQorCWlmIHskYXJjdGFncygkYSkgbmUge319IHsKKwkgICAgdmFsaWRhdGVfYXJjdGFncyAkYQorCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJGlkXQorCSAgICBmb3JlYWNoIHQgJGFyY3RhZ3MoJGEpIHsKKwkJc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRhcmNpZHMoJGEpICR0XQorCQlpZiB7JGogPiAkaX0geworCQkgICAgcmV0dXJuICR0CisJCX0KKwkgICAgfQorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyBhcmNlbmQoJGEpXX0geworCSAgICByZXR1cm4ge30KKwl9CisJc2V0IGlkICRhcmNlbmQoJGEpCisJaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV19IHsKKwkgICAgcmV0dXJuICRpZAorCX0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBjYWNoZWRfYXRhZ3MoJGlkKV19IHsKKwlyZXR1cm4gJGNhY2hlZF9hdGFncygkaWQpCisgICAgfQorCisgICAgc2V0IG9yaWdpZCAkaWQKKyAgICBzZXQgdG9kbyBbbGlzdCAkaWRdCisgICAgc2V0IHF1ZXVlZCgkaWQpIDEKKyAgICBzZXQgdGFnbGlzdCB7fQorICAgIHNldCBuYyAxCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb10gJiYgJG5jID4gMH0ge2luY3IgaX0geworCXNldCBpZCBbbGluZGV4ICR0b2RvICRpXQorCXNldCBkb25lKCRpZCkgMQorCXNldCB0ZCBbaW5mbyBleGlzdHMgaGFzdGFnZ2VkZGVzY2VuZGVudCgkaWQpXQorCWlmIHshJHRkfSB7CisJICAgIGluY3IgbmMgLTEKKwl9CisJIyBpZ25vcmUgdGFncyBvbiBzdGFydGluZyBub2RlCisJaWYgeyEkdGQgJiYgJGkgPiAwfSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgaWR0YWdzKCRpZCldfSB7CisJCXNldCB0YWdsb2MoJGlkKSAkaWQKKwkJc2V0IHRkIDEKKwkgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyBjYWNoZWRfYXRhZ3MoJGlkKV19IHsKKwkJc2V0IHRhZ2xvYygkaWQpICRjYWNoZWRfYXRhZ3MoJGlkKQorCQlzZXQgdGQgMQorCSAgICB9CisJfQorCWZvcmVhY2ggYSAkYXJjb3V0KCRpZCkgeworCSAgICBpZiB7ISR0ZCAmJiAkYXJjdGFncygkYSkgbmUge319IHsKKwkJdmFsaWRhdGVfYXJjdGFncyAkYQorCQlpZiB7JGFyY3RhZ3MoJGEpIG5lIHt9fSB7CisJCSAgICBsYXBwZW5kIHRhZ2xvYygkaWQpIFtsaW5kZXggJGFyY3RhZ3MoJGEpIDBdCisJCX0KKwkgICAgfQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNlbmQoJGEpXX0gY29udGludWUKKwkgICAgc2V0IGQgJGFyY2VuZCgkYSkKKwkgICAgaWYgeyR0ZCB8fCAkYXJjdGFncygkYSkgbmUge319IHsKKwkJc2V0IHRvbWFyayBbbGlzdCAkZF0KKwkJZm9yIHtzZXQgaiAwfSB7JGogPCBbbGxlbmd0aCAkdG9tYXJrXX0ge2luY3Igan0geworCQkgICAgc2V0IGRkIFtsaW5kZXggJHRvbWFyayAkal0KKwkJICAgIGlmIHshW2luZm8gZXhpc3RzIGhhc3RhZ2dlZGRlc2NlbmRlbnQoJGRkKV19IHsKKwkJCWlmIHtbaW5mbyBleGlzdHMgZG9uZSgkZGQpXX0geworCQkJICAgIGZvcmVhY2ggYiAkYXJjb3V0KCRkZCkgeworCQkJCWlmIHtbaW5mbyBleGlzdHMgYXJjZW5kKCRiKV19IHsKKwkJCQkgICAgbGFwcGVuZCB0b21hcmsgJGFyY2VuZCgkYikKKwkJCQl9CisJCQkgICAgfQorCQkJICAgIGlmIHtbaW5mbyBleGlzdHMgdGFnbG9jKCRkZCldfSB7CisJCQkJdW5zZXQgdGFnbG9jKCRkZCkKKwkJCSAgICB9CisJCQl9IGVsc2VpZiB7W2luZm8gZXhpc3RzIHF1ZXVlZCgkZGQpXX0geworCQkJICAgIGluY3IgbmMgLTEKKwkJCX0KKwkJCXNldCBoYXN0YWdnZWRkZXNjZW5kZW50KCRkZCkgMQorCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgcXVldWVkKCRkKV19IHsKKwkJbGFwcGVuZCB0b2RvICRkCisJCXNldCBxdWV1ZWQoJGQpIDEKKwkJaWYgeyFbaW5mbyBleGlzdHMgaGFzdGFnZ2VkZGVzY2VuZGVudCgkZCldfSB7CisJCSAgICBpbmNyIG5jCisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IHQyIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgbG9vcGl4ICRpCisgICAgc2V0IHRhZ3Mge30KKyAgICBmb3JlYWNoIGlkIFthcnJheSBuYW1lcyB0YWdsb2NdIHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBoYXN0YWdnZWRkZXNjZW5kZW50KCRpZCldfSB7CisJICAgIGZvcmVhY2ggdCAkdGFnbG9jKCRpZCkgeworCQlpZiB7W2xzZWFyY2ggLWV4YWN0ICR0YWdzICR0XSA8IDB9IHsKKwkJICAgIGxhcHBlbmQgdGFncyAkdAorCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgIyByZW1vdmUgdGFncyB0aGF0IGFyZSBhbmNlc3RvcnMgb2Ygb3RoZXIgdGFncworICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRhZ3NdfSB7aW5jciBpfSB7CisJc2V0IGEgW2xpbmRleCAkdGFncyAkaV0KKwlmb3Ige3NldCBqIDB9IHskaiA8ICRpfSB7aW5jciBqfSB7CisJICAgIHNldCBiIFtsaW5kZXggJHRhZ3MgJGpdCisJICAgIHNldCByIFthbmNfb3JfZGVzYyAkYSAkYl0KKwkgICAgaWYgeyRyID09IC0xfSB7CisJCXNldCB0YWdzIFtscmVwbGFjZSAkdGFncyAkaiAkal0KKwkJaW5jciBqIC0xCisJCWluY3IgaSAtMQorCSAgICB9IGVsc2VpZiB7JHIgPT0gMX0geworCQlzZXQgdGFncyBbbHJlcGxhY2UgJHRhZ3MgJGkgJGldCisJCWluY3IgaSAtMQorCQlicmVhaworCSAgICB9CisJfQorICAgIH0KKworICAgIGlmIHtbYXJyYXkgbmFtZXMgZ3Jvd2luZ10gbmUge319IHsKKwkjIGdyYXBoIGlzbid0IGZpbmlzaGVkLCBuZWVkIHRvIGNoZWNrIGlmIGFueSB0YWcgY291bGQgZ2V0CisJIyBlY2xpcHNlZCBieSBhbm90aGVyIHRhZyBjb21pbmcgbGF0ZXIuICBTaW1wbHkgaWdub3JlIGFueQorCSMgdGFncyB0aGF0IGNvdWxkIGxhdGVyIGdldCBlY2xpcHNlZC4KKwlzZXQgY3RhZ3Mge30KKwlmb3JlYWNoIHQgJHRhZ3MgeworCSAgICBpZiB7W2lzX2NlcnRhaW4gJG9yaWdpZCAkdF19IHsKKwkJbGFwcGVuZCBjdGFncyAkdAorCSAgICB9CisJfQorCWlmIHskdGFncyBlcSAkY3RhZ3N9IHsKKwkgICAgc2V0IGNhY2hlZF9hdGFncygkb3JpZ2lkKSAkdGFncworCX0gZWxzZSB7CisJICAgIHNldCB0YWdzICRjdGFncworCX0KKyAgICB9IGVsc2UgeworCXNldCBjYWNoZWRfYXRhZ3MoJG9yaWdpZCkgJHRhZ3MKKyAgICB9CisgICAgc2V0IHQzIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBpZiB7MCAmJiAkdDMgLSAkdDEgPj0gMTAwfSB7CisJcHV0cyAiaXRlcmF0aW5nIGFuY2VzdG9ycyAoJGxvb3BpeC9bbGxlbmd0aCAkdG9kb10gbm9kZXMpIHRvb2tcCisgICAgCSAgICBbZXhwciB7JHQyLSR0MX1dK1tleHByIHskdDMtJHQyfV1tcywgJG5jIGNhbmRpZGF0ZXMgbGVmdCIKKyAgICB9CisgICAgcmV0dXJuICR0YWdzCit9CisKKyMgUmV0dXJuIHRoZSBsaXN0IG9mIElEcyB0aGF0IGhhdmUgaGVhZHMgdGhhdCBhcmUgZGVzY2VuZGVudHMgb2YgaWQsCisjIGluY2x1ZGluZyBpZCBpdHNlbGYgaWYgaXQgaGFzIGEgaGVhZC4KK3Byb2MgZGVzY2hlYWRzIHtpZH0geworICAgIGdsb2JhbCBhcmNub3MgYXJjc3RhcnQgYXJjaWRzIGFyY2hlYWRzIGlkaGVhZHMgY2FjaGVkX2RoZWFkcworICAgIGdsb2JhbCBhbGxwYXJlbnRzIGFyY291dAorCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYWxscGFyZW50cygkaWQpXX0geworCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgYXJldCB7fQorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkaWQpXX0geworCSMgcGFydC13YXkgYWxvbmcgYW4gYXJjOyBjaGVjayBpdCBmaXJzdAorCXNldCBhIFtsaW5kZXggJGFyY25vcygkaWQpIDBdCisJaWYgeyRhcmNoZWFkcygkYSkgbmUge319IHsKKwkgICAgdmFsaWRhdGVfYXJjaGVhZHMgJGEKKwkgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRhcmNpZHMoJGEpICRpZF0KKwkgICAgZm9yZWFjaCB0ICRhcmNoZWFkcygkYSkgeworCQlzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGFyY2lkcygkYSkgJHRdCisJCWlmIHskaiA+ICRpfSBicmVhaworCQlsYXBwZW5kIGFyZXQgJHQKKwkgICAgfQorCX0KKwlzZXQgaWQgJGFyY3N0YXJ0KCRhKQorICAgIH0KKyAgICBzZXQgb3JpZ2lkICRpZAorICAgIHNldCB0b2RvIFtsaXN0ICRpZF0KKyAgICBzZXQgc2VlbigkaWQpIDEKKyAgICBzZXQgcmV0IHt9CisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb119IHtpbmNyIGl9IHsKKwlzZXQgaWQgW2xpbmRleCAkdG9kbyAkaV0KKwlpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF9kaGVhZHMoJGlkKV19IHsKKwkgICAgc2V0IHJldCBbY29uY2F0ICRyZXQgJGNhY2hlZF9kaGVhZHMoJGlkKV0KKwl9IGVsc2UgeworCSAgICBpZiB7W2luZm8gZXhpc3RzIGlkaGVhZHMoJGlkKV19IHsKKwkJbGFwcGVuZCByZXQgJGlkCisJICAgIH0KKwkgICAgZm9yZWFjaCBhICRhcmNub3MoJGlkKSB7CisJCWlmIHskYXJjaGVhZHMoJGEpIG5lIHt9fSB7CisJCSAgICB2YWxpZGF0ZV9hcmNoZWFkcyAkYQorCQkgICAgaWYgeyRhcmNoZWFkcygkYSkgbmUge319IHsKKwkJCXNldCByZXQgW2NvbmNhdCAkcmV0ICRhcmNoZWFkcygkYSldCisJCSAgICB9CisJCX0KKwkJc2V0IGQgJGFyY3N0YXJ0KCRhKQorCQlpZiB7IVtpbmZvIGV4aXN0cyBzZWVuKCRkKV19IHsKKwkJICAgIGxhcHBlbmQgdG9kbyAkZAorCQkgICAgc2V0IHNlZW4oJGQpIDEKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBzZXQgcmV0IFtsc29ydCAtdW5pcXVlICRyZXRdCisgICAgc2V0IGNhY2hlZF9kaGVhZHMoJG9yaWdpZCkgJHJldAorICAgIHJldHVybiBbY29uY2F0ICRyZXQgJGFyZXRdCit9CisKK3Byb2MgYWRkZWR0YWcge2lkfSB7CisgICAgZ2xvYmFsIGFyY25vcyBhcmNvdXQgY2FjaGVkX2R0YWdzIGNhY2hlZF9hdGFncworCisgICAgaWYgeyFbaW5mbyBleGlzdHMgYXJjbm9zKCRpZCldfSByZXR1cm4KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNvdXQoJGlkKV19IHsKKwlyZWNhbGNhcmMgW2xpbmRleCAkYXJjbm9zKCRpZCkgMF0KKyAgICB9CisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2R0YWdzCisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2F0YWdzCit9CisKK3Byb2MgYWRkZWRoZWFkIHtoaWQgaGVhZH0geworICAgIGdsb2JhbCBhcmNub3MgYXJjb3V0IGNhY2hlZF9kaGVhZHMKKworICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY25vcygkaGlkKV19IHJldHVybgorICAgIGlmIHshW2luZm8gZXhpc3RzIGFyY291dCgkaGlkKV19IHsKKwlyZWNhbGNhcmMgW2xpbmRleCAkYXJjbm9zKCRoaWQpIDBdCisgICAgfQorICAgIHVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF9kaGVhZHMKK30KKworcHJvYyByZW1vdmVkaGVhZCB7aGlkIGhlYWR9IHsKKyAgICBnbG9iYWwgY2FjaGVkX2RoZWFkcworCisgICAgdW5zZXQgLW5vY29tcGxhaW4gY2FjaGVkX2RoZWFkcworfQorCitwcm9jIG1vdmVkaGVhZCB7aGlkIGhlYWR9IHsKKyAgICBnbG9iYWwgYXJjbm9zIGFyY291dCBjYWNoZWRfZGhlYWRzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNub3MoJGhpZCldfSByZXR1cm4KKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBhcmNvdXQoJGhpZCldfSB7CisJcmVjYWxjYXJjIFtsaW5kZXggJGFyY25vcygkaGlkKSAwXQorICAgIH0KKyAgICB1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfZGhlYWRzCit9CisKK3Byb2MgY2hhbmdlZHJlZnMge30geworICAgIGdsb2JhbCBjYWNoZWRfZGhlYWRzIGNhY2hlZF9kdGFncyBjYWNoZWRfYXRhZ3MgY2FjaGVkX3RhZ2NvbnRlbnQKKyAgICBnbG9iYWwgYXJjdGFncyBhcmNoZWFkcyBhcmNub3MgYXJjb3V0IGlkaGVhZHMgaWR0YWdzCisKKyAgICBmb3JlYWNoIGlkIFtjb25jYXQgW2FycmF5IG5hbWVzIGlkaGVhZHNdIFthcnJheSBuYW1lcyBpZHRhZ3NdXSB7CisJaWYge1tpbmZvIGV4aXN0cyBhcmNub3MoJGlkKV0gJiYgIVtpbmZvIGV4aXN0cyBhcmNvdXQoJGlkKV19IHsKKwkgICAgc2V0IGEgW2xpbmRleCAkYXJjbm9zKCRpZCkgMF0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgZG9uZWFyYygkYSldfSB7CisJCXJlY2FsY2FyYyAkYQorCQlzZXQgZG9uZWFyYygkYSkgMQorCSAgICB9CisJfQorICAgIH0KKyAgICB1bnNldCAtbm9jb21wbGFpbiBjYWNoZWRfdGFnY29udGVudAorICAgIHVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF9kdGFncworICAgIHVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF9hdGFncworICAgIHVuc2V0IC1ub2NvbXBsYWluIGNhY2hlZF9kaGVhZHMKK30KKworcHJvYyByZXJlYWRyZWZzIHt9IHsKKyAgICBnbG9iYWwgaWR0YWdzIGlkaGVhZHMgaWRvdGhlcnJlZnMgbWFpbmhlYWRpZAorCisgICAgc2V0IHJlZmlkcyBbY29uY2F0IFthcnJheSBuYW1lcyBpZHRhZ3NdIFwKKwkJICAgIFthcnJheSBuYW1lcyBpZGhlYWRzXSBbYXJyYXkgbmFtZXMgaWRvdGhlcnJlZnNdXQorICAgIGZvcmVhY2ggaWQgJHJlZmlkcyB7CisJaWYgeyFbaW5mbyBleGlzdHMgcmVmKCRpZCldfSB7CisJICAgIHNldCByZWYoJGlkKSBbbGlzdHJlZnMgJGlkXQorCX0KKyAgICB9CisgICAgc2V0IG9sZG1haW5oZWFkICRtYWluaGVhZGlkCisgICAgcmVhZHJlZnMKKyAgICBjaGFuZ2VkcmVmcworICAgIHNldCByZWZpZHMgW2xzb3J0IC11bmlxdWUgW2NvbmNhdCAkcmVmaWRzIFthcnJheSBuYW1lcyBpZHRhZ3NdIFwKKwkJCVthcnJheSBuYW1lcyBpZGhlYWRzXSBbYXJyYXkgbmFtZXMgaWRvdGhlcnJlZnNdXV0KKyAgICBmb3JlYWNoIGlkICRyZWZpZHMgeworCXNldCB2IFtsaXN0cmVmcyAkaWRdCisJaWYgeyFbaW5mbyBleGlzdHMgcmVmKCRpZCldIHx8ICRyZWYoJGlkKSAhPSAkdn0geworCSAgICByZWRyYXd0YWdzICRpZAorCX0KKyAgICB9CisgICAgaWYgeyRvbGRtYWluaGVhZCBuZSAkbWFpbmhlYWRpZH0geworCXJlZHJhd3RhZ3MgJG9sZG1haW5oZWFkCisJcmVkcmF3dGFncyAkbWFpbmhlYWRpZAorICAgIH0KKyAgICBydW4gcmVmaWxsX3JlZmxpc3QKK30KKworcHJvYyBsaXN0cmVmcyB7aWR9IHsKKyAgICBnbG9iYWwgaWR0YWdzIGlkaGVhZHMgaWRvdGhlcnJlZnMKKworICAgIHNldCB4IHt9CisgICAgaWYge1tpbmZvIGV4aXN0cyBpZHRhZ3MoJGlkKV19IHsKKwlzZXQgeCAkaWR0YWdzKCRpZCkKKyAgICB9CisgICAgc2V0IHkge30KKyAgICBpZiB7W2luZm8gZXhpc3RzIGlkaGVhZHMoJGlkKV19IHsKKwlzZXQgeSAkaWRoZWFkcygkaWQpCisgICAgfQorICAgIHNldCB6IHt9CisgICAgaWYge1tpbmZvIGV4aXN0cyBpZG90aGVycmVmcygkaWQpXX0geworCXNldCB6ICRpZG90aGVycmVmcygkaWQpCisgICAgfQorICAgIHJldHVybiBbbGlzdCAkeCAkeSAkel0KK30KKworcHJvYyBhZGRfdGFnX2N0ZXh0IHt0YWd9IHsKKyAgICBnbG9iYWwgY3RleHQgY2FjaGVkX3RhZ2NvbnRlbnQgdGFnaWRzCisKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjYWNoZWRfdGFnY29udGVudCgkdGFnKV19IHsKKwljYXRjaCB7CisJICAgIHNldCBjYWNoZWRfdGFnY29udGVudCgkdGFnKSBbZXhlYyBnaXQgY2F0LWZpbGUgLXAgJHRhZ10KKwl9CisgICAgfQorICAgICRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIlRhZyJdOiAkdGFnXG4iIGJvbGQKKyAgICBpZiB7W2luZm8gZXhpc3RzIGNhY2hlZF90YWdjb250ZW50KCR0YWcpXX0geworCXNldCB0ZXh0ICRjYWNoZWRfdGFnY29udGVudCgkdGFnKQorICAgIH0gZWxzZSB7CisJc2V0IHRleHQgIlttYyAiSWQiXTogICR0YWdpZHMoJHRhZykiCisgICAgfQorICAgIGFwcGVuZHdpdGhsaW5rcyAkdGV4dCB7fQorfQorCitwcm9jIHNob3d0YWcge3RhZyBpc25ld30geworICAgIGdsb2JhbCBjdGV4dCBjYWNoZWRfdGFnY29udGVudCB0YWdpZHMgbGlua251bSB0YWdvYmppZAorCisgICAgaWYgeyRpc25ld30geworCWFkZHRvaGlzdG9yeSBbbGlzdCBzaG93dGFnICR0YWcgMF0gc2F2ZWN0ZXh0cG9zCisgICAgfQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKKyAgICBjbGVhcl9jdGV4dAorICAgIHNldHRhYnMgMAorICAgIHNldCBsaW5rbnVtIDAKKyAgICBhZGRfdGFnX2N0ZXh0ICR0YWcKKyAgICBtYXliZV9zY3JvbGxfY3RleHQgMQorICAgICRjdGV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorICAgIGluaXRfZmxpc3Qge30KK30KKworcHJvYyBzaG93dGFncyB7aWQgaXNuZXd9IHsKKyAgICBnbG9iYWwgaWR0YWdzIGN0ZXh0IGxpbmtudW0KKworICAgIGlmIHskaXNuZXd9IHsKKwlhZGR0b2hpc3RvcnkgW2xpc3Qgc2hvd3RhZ3MgJGlkIDBdIHNhdmVjdGV4dHBvcworICAgIH0KKyAgICAkY3RleHQgY29uZiAtc3RhdGUgbm9ybWFsCisgICAgY2xlYXJfY3RleHQKKyAgICBzZXR0YWJzIDAKKyAgICBzZXQgbGlua251bSAwCisgICAgc2V0IHNlcCB7fQorICAgIGZvcmVhY2ggdGFnICRpZHRhZ3MoJGlkKSB7CisJJGN0ZXh0IGluc2VydCBlbmQgJHNlcAorCWFkZF90YWdfY3RleHQgJHRhZworCXNldCBzZXAgIlxuXG4iCisgICAgfQorICAgIG1heWJlX3Njcm9sbF9jdGV4dCAxCisgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIGRpc2FibGVkCisgICAgaW5pdF9mbGlzdCB7fQorfQorCitwcm9jIGRvcXVpdCB7fSB7CisgICAgZ2xvYmFsIHN0b3BwZWQKKyAgICBnbG9iYWwgZ2l0a3RtcGRpcgorCisgICAgc2V0IHN0b3BwZWQgMTAwCisgICAgc2F2ZXN0dWZmIC4KKyAgICBkZXN0cm95IC4KKworICAgIGlmIHtbaW5mbyBleGlzdHMgZ2l0a3RtcGRpcl19IHsKKwljYXRjaCB7ZmlsZSBkZWxldGUgLWZvcmNlICRnaXRrdG1wZGlyfQorICAgIH0KK30KKworcHJvYyBta2ZvbnRkaXNwIHtmb250IHRvcCB3aGljaH0geworICAgIGdsb2JhbCBmb250YXR0ciBmb250cHJlZiAkZm9udCBOUyB1c2VfdHRrCisKKyAgICBzZXQgZm9udHByZWYoJGZvbnQpIFtzZXQgJGZvbnRdCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLiR7Zm9udH1idXQgLXRleHQgJHdoaWNoIFwKKwktY29tbWFuZCBbbGlzdCBjaG9vc2Vmb250ICRmb250ICR3aGljaF0KKyAgICAke05TfTo6bGFiZWwgJHRvcC4kZm9udCAtcmVsaWVmIGZsYXQgLWZvbnQgJGZvbnQgXAorCS10ZXh0ICRmb250YXR0cigkZm9udCxmYW1pbHkpIC1qdXN0aWZ5IGxlZnQKKyAgICBncmlkIHggJHRvcC4ke2ZvbnR9YnV0ICR0b3AuJGZvbnQgLXN0aWNreSB3Cit9CisKK3Byb2MgY2hvb3NlZm9udCB7Zm9udCB3aGljaH0geworICAgIGdsb2JhbCBmb250cGFyYW0gZm9udGxpc3QgZm9udHRvcCBmb250YXR0cgorICAgIGdsb2JhbCBwcmVmc3RvcCBOUworCisgICAgc2V0IGZvbnRwYXJhbSh3aGljaCkgJHdoaWNoCisgICAgc2V0IGZvbnRwYXJhbShmb250KSAkZm9udAorICAgIHNldCBmb250cGFyYW0oZmFtaWx5KSBbZm9udCBhY3R1YWwgJGZvbnQgLWZhbWlseV0KKyAgICBzZXQgZm9udHBhcmFtKHNpemUpICRmb250YXR0cigkZm9udCxzaXplKQorICAgIHNldCBmb250cGFyYW0od2VpZ2h0KSAkZm9udGF0dHIoJGZvbnQsd2VpZ2h0KQorICAgIHNldCBmb250cGFyYW0oc2xhbnQpICRmb250YXR0cigkZm9udCxzbGFudCkKKyAgICBzZXQgdG9wIC5naXRrZm9udAorICAgIHNldCBmb250dG9wICR0b3AKKyAgICBpZiB7IVt3aW5mbyBleGlzdHMgJHRvcF19IHsKKwlmb250IGNyZWF0ZSBzYW1wbGUKKwlldmFsIGZvbnQgY29uZmlnIHNhbXBsZSBbZm9udCBhY3R1YWwgJGZvbnRdCisJdHRrX3RvcGxldmVsICR0b3AKKwltYWtlX3RyYW5zaWVudCAkdG9wICRwcmVmc3RvcAorCXdtIHRpdGxlICR0b3AgW21jICJHaXRrIGZvbnQgY2hvb3NlciJdCisJJHtOU306OmxhYmVsICR0b3AubCAtdGV4dHZhcmlhYmxlIGZvbnRwYXJhbSh3aGljaCkKKwlwYWNrICR0b3AubCAtc2lkZSB0b3AKKwlzZXQgZm9udGxpc3QgW2xzb3J0IFtmb250IGZhbWlsaWVzXV0KKwkke05TfTo6ZnJhbWUgJHRvcC5mCisJbGlzdGJveCAkdG9wLmYuZmFtIC1saXN0dmFyaWFibGUgZm9udGxpc3QgXAorCSAgICAteXNjcm9sbGNvbW1hbmQgW2xpc3QgJHRvcC5mLnNiIHNldF0KKwliaW5kICR0b3AuZi5mYW0gPDxMaXN0Ym94U2VsZWN0Pj4gc2VsZm9udGZhbQorCSR7TlN9OjpzY3JvbGxiYXIgJHRvcC5mLnNiIC1jb21tYW5kIFtsaXN0ICR0b3AuZi5mYW0geXZpZXddCisJcGFjayAkdG9wLmYuc2IgLXNpZGUgcmlnaHQgLWZpbGwgeQorCXBhY2sgJHRvcC5mLmZhbSAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxCisJcGFjayAkdG9wLmYgLXNpZGUgdG9wIC1maWxsIGJvdGggLWV4cGFuZCAxCisJJHtOU306OmZyYW1lICR0b3AuZworCXNwaW5ib3ggJHRvcC5nLnNpemUgLWZyb20gNCAtdG8gNDAgLXdpZHRoIDQgXAorCSAgICAtdGV4dHZhcmlhYmxlIGZvbnRwYXJhbShzaXplKSBcCisJICAgIC12YWxpZGF0ZWNvbW1hbmQge3N0cmluZyBpcyBpbnRlZ2VyIC1zdHJpY3QgJXN9CisJY2hlY2tidXR0b24gJHRvcC5nLmJvbGQgLXBhZHggNSBcCisJICAgIC1mb250IHt7VGltZXMgTmV3IFJvbWFufSAxMiBib2xkfSAtdGV4dCBbbWMgIkIiXSAtaW5kaWNhdG9yb24gMCBcCisJICAgIC12YXJpYWJsZSBmb250cGFyYW0od2VpZ2h0KSAtb252YWx1ZSBib2xkIC1vZmZ2YWx1ZSBub3JtYWwKKwljaGVja2J1dHRvbiAkdG9wLmcuaXRhbCAtcGFkeCA1IFwKKwkgICAgLWZvbnQge3tUaW1lcyBOZXcgUm9tYW59IDEyIGl0YWxpY30gLXRleHQgW21jICJJIl0gLWluZGljYXRvcm9uIDAgIFwKKwkgICAgLXZhcmlhYmxlIGZvbnRwYXJhbShzbGFudCkgLW9udmFsdWUgaXRhbGljIC1vZmZ2YWx1ZSByb21hbgorCXBhY2sgJHRvcC5nLnNpemUgJHRvcC5nLmJvbGQgJHRvcC5nLml0YWwgLXNpZGUgbGVmdAorCXBhY2sgJHRvcC5nIC1zaWRlIHRvcAorCWNhbnZhcyAkdG9wLmMgLXdpZHRoIDE1MCAtaGVpZ2h0IDUwIC1ib3JkZXIgMiAtcmVsaWVmIHN1bmsgXAorCSAgICAtYmFja2dyb3VuZCB3aGl0ZQorCSR0b3AuYyBjcmVhdGUgdGV4dCAxMDAgMjUgLWFuY2hvciBjZW50ZXIgLXRleHQgJHdoaWNoIC1mb250IHNhbXBsZSBcCisJICAgIC1maWxsIGJsYWNrIC10YWdzIHRleHQKKwliaW5kICR0b3AuYyA8Q29uZmlndXJlPiBbbGlzdCBjZW50ZXJ0ZXh0ICR0b3AuY10KKwlwYWNrICR0b3AuYyAtc2lkZSB0b3AgLWZpbGwgeAorCSR7TlN9OjpmcmFtZSAkdG9wLmJ1dHMKKwkke05TfTo6YnV0dG9uICR0b3AuYnV0cy5vayAtdGV4dCBbbWMgIk9LIl0gLWNvbW1hbmQgZm9udG9rIC1kZWZhdWx0IGFjdGl2ZQorCSR7TlN9OjpidXR0b24gJHRvcC5idXRzLmNhbiAtdGV4dCBbbWMgIkNhbmNlbCJdIC1jb21tYW5kIGZvbnRjYW4gLWRlZmF1bHQgbm9ybWFsCisJYmluZCAkdG9wIDxLZXktUmV0dXJuPiBmb250b2sKKwliaW5kICR0b3AgPEtleS1Fc2NhcGU+IGZvbnRjYW4KKwlncmlkICR0b3AuYnV0cy5vayAkdG9wLmJ1dHMuY2FuCisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHRvcC5idXRzIDAgLXdlaWdodCAxIC11bmlmb3JtIGEKKwlncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMSAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorCXBhY2sgJHRvcC5idXRzIC1zaWRlIGJvdHRvbSAtZmlsbCB4CisJdHJhY2UgYWRkIHZhcmlhYmxlIGZvbnRwYXJhbSB3cml0ZSBjaGdfZm9udHBhcmFtCisgICAgfSBlbHNlIHsKKwlyYWlzZSAkdG9wCisJJHRvcC5jIGl0ZW1jb25mIHRleHQgLXRleHQgJHdoaWNoCisgICAgfQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkZm9udGxpc3QgJGZvbnRwYXJhbShmYW1pbHkpXQorICAgIGlmIHskaSA+PSAwfSB7CisJJHRvcC5mLmZhbSBzZWxlY3Rpb24gc2V0ICRpCisJJHRvcC5mLmZhbSBzZWUgJGkKKyAgICB9Cit9CisKK3Byb2MgY2VudGVydGV4dCB7d30geworICAgICR3IGNvb3JkcyB0ZXh0IFtleHByIHtbd2luZm8gd2lkdGggJHddIC8gMn1dIFtleHByIHtbd2luZm8gaGVpZ2h0ICR3XSAvIDJ9XQorfQorCitwcm9jIGZvbnRvayB7fSB7CisgICAgZ2xvYmFsIGZvbnRwYXJhbSBmb250cHJlZiBwcmVmc3RvcAorCisgICAgc2V0IGYgJGZvbnRwYXJhbShmb250KQorICAgIHNldCBmb250cHJlZigkZikgW2xpc3QgJGZvbnRwYXJhbShmYW1pbHkpICRmb250cGFyYW0oc2l6ZSldCisgICAgaWYgeyRmb250cGFyYW0od2VpZ2h0KSBlcSAiYm9sZCJ9IHsKKwlsYXBwZW5kIGZvbnRwcmVmKCRmKSAiYm9sZCIKKyAgICB9CisgICAgaWYgeyRmb250cGFyYW0oc2xhbnQpIGVxICJpdGFsaWMifSB7CisJbGFwcGVuZCBmb250cHJlZigkZikgIml0YWxpYyIKKyAgICB9CisgICAgc2V0IHcgJHByZWZzdG9wLm5vdGVib29rLmZvbnRzLiRmCisgICAgJHcgY29uZiAtdGV4dCAkZm9udHBhcmFtKGZhbWlseSkgLWZvbnQgJGZvbnRwcmVmKCRmKQorCisgICAgZm9udGNhbgorfQorCitwcm9jIGZvbnRjYW4ge30geworICAgIGdsb2JhbCBmb250dG9wIGZvbnRwYXJhbQorCisgICAgaWYge1tpbmZvIGV4aXN0cyBmb250dG9wXX0geworCWNhdGNoIHtkZXN0cm95ICRmb250dG9wfQorCWNhdGNoIHtmb250IGRlbGV0ZSBzYW1wbGV9CisJdW5zZXQgZm9udHRvcAorCXVuc2V0IGZvbnRwYXJhbQorICAgIH0KK30KKworaWYge1twYWNrYWdlIHZzYXRpc2ZpZXMgW3BhY2thZ2UgcHJvdmlkZSBUa10gOC42XX0geworICAgICMgSW4gVGsgOC42IHdlIGhhdmUgYSBuYXRpdmUgZm9udCBjaG9vc2VyIGRpYWxvZy4gT3ZlcndyaXRlIHRoZSBhYm92ZQorICAgICMgZnVuY3Rpb24gdG8gbWFrZSB1c2Ugb2YgaXQuCisgICAgcHJvYyBjaG9vc2Vmb250IHtmb250IHdoaWNofSB7CisJdGsgZm9udGNob29zZXIgY29uZmlndXJlIC10aXRsZSAkd2hpY2ggLWZvbnQgJGZvbnQgXAorCSAgICAtY29tbWFuZCBbbGlzdCBvbl9jaG9vc2Vmb250ICRmb250ICR3aGljaF0KKwl0ayBmb250Y2hvb3NlciBzaG93CisgICAgfQorICAgIHByb2Mgb25fY2hvb3NlZm9udCB7Zm9udCB3aGljaCBuZXdmb250fSB7CisJZ2xvYmFsIGZvbnRwYXJhbQorCXB1dHMgc3RkZXJyICIkZm9udCAkbmV3Zm9udCIKKwlhcnJheSBzZXQgZiBbZm9udCBhY3R1YWwgJG5ld2ZvbnRdCisJc2V0IGZvbnRwYXJhbSh3aGljaCkgJHdoaWNoCisJc2V0IGZvbnRwYXJhbShmb250KSAkZm9udAorCXNldCBmb250cGFyYW0oZmFtaWx5KSAkZigtZmFtaWx5KQorCXNldCBmb250cGFyYW0oc2l6ZSkgJGYoLXNpemUpCisJc2V0IGZvbnRwYXJhbSh3ZWlnaHQpICRmKC13ZWlnaHQpCisJc2V0IGZvbnRwYXJhbShzbGFudCkgJGYoLXNsYW50KQorCWZvbnRvaworICAgIH0KK30KKworcHJvYyBzZWxmb250ZmFtIHt9IHsKKyAgICBnbG9iYWwgZm9udHRvcCBmb250cGFyYW0KKworICAgIHNldCBpIFskZm9udHRvcC5mLmZhbSBjdXJzZWxlY3Rpb25dCisgICAgaWYgeyRpIG5lIHt9fSB7CisJc2V0IGZvbnRwYXJhbShmYW1pbHkpIFskZm9udHRvcC5mLmZhbSBnZXQgJGldCisgICAgfQorfQorCitwcm9jIGNoZ19mb250cGFyYW0ge3Ygc3ViIG9wfSB7CisgICAgZ2xvYmFsIGZvbnRwYXJhbQorCisgICAgZm9udCBjb25maWcgc2FtcGxlIC0kc3ViICRmb250cGFyYW0oJHN1YikKK30KKworIyBDcmVhdGUgYSBwcm9wZXJ0eSBzaGVldCB0YWIgcGFnZQorcHJvYyBjcmVhdGVfcHJlZnNfcGFnZSB7d30geworICAgIGdsb2JhbCBOUworICAgIHNldCBwYXJlbnQgW2pvaW4gW2xyYW5nZSBbc3BsaXQgJHcgLl0gMCBlbmQtMV0gLl0KKyAgICBpZiB7W3dpbmZvIGNsYXNzICRwYXJlbnRdIGVxICJUTm90ZWJvb2sifSB7CisJJHtOU306OmZyYW1lICR3CisgICAgfSBlbHNlIHsKKwkke05TfTo6bGFiZWxmcmFtZSAkdworICAgIH0KK30KKworcHJvYyBwcmVmc3BhZ2VfZ2VuZXJhbCB7bm90ZWJvb2t9IHsKKyAgICBnbG9iYWwgTlMgbWF4d2lkdGggbWF4Z3JhcGhwY3Qgc2hvd25lYXJ0YWdzIHNob3dsb2NhbGNoYW5nZXMKKyAgICBnbG9iYWwgdGFic3RvcCBsaW1pdGRpZmZzIGF1dG9zZWxlY3QgYXV0b3NlbGxlbiBleHRkaWZmdG9vbCBwZXJmaWxlX2F0dHJzCisgICAgZ2xvYmFsIGhpZGVyZW1vdGVzIHdhbnRfdHRrIGhhdmVfdHRrIG1heHJlZnMgd2ViX2Jyb3dzZXIKKworICAgIHNldCBwYWdlIFtjcmVhdGVfcHJlZnNfcGFnZSAkbm90ZWJvb2suZ2VuZXJhbF0KKworICAgICR7TlN9OjpsYWJlbCAkcGFnZS5sZGlzcCAtdGV4dCBbbWMgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyJdCisgICAgZ3JpZCAkcGFnZS5sZGlzcCAtIC1zdGlja3kgdyAtcGFkeSAxMAorICAgICR7TlN9OjpsYWJlbCAkcGFnZS5zcGFjZXIgLXRleHQgIiAiCisgICAgJHtOU306OmxhYmVsICRwYWdlLm1heHdpZHRobCAtdGV4dCBbbWMgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSJdCisgICAgc3BpbmJveCAkcGFnZS5tYXh3aWR0aCAtZnJvbSAwIC10byAxMDAgLXdpZHRoIDQgLXRleHR2YXJpYWJsZSBtYXh3aWR0aAorICAgIGdyaWQgJHBhZ2Uuc3BhY2VyICRwYWdlLm1heHdpZHRobCAkcGFnZS5tYXh3aWR0aCAtc3RpY2t5IHcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3hnZXR0ZXh0Om5vLXRjbC1mb3JtYXQKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UubWF4cGN0bCAtdGV4dCBbbWMgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiXQorICAgIHNwaW5ib3ggJHBhZ2UubWF4cGN0IC1mcm9tIDEgLXRvIDEwMCAtd2lkdGggNCAtdGV4dHZhcmlhYmxlIG1heGdyYXBocGN0CisgICAgZ3JpZCB4ICRwYWdlLm1heHBjdGwgJHBhZ2UubWF4cGN0IC1zdGlja3kgdworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkcGFnZS5zaG93bG9jYWwgLXRleHQgW21jICJTaG93IGxvY2FsIGNoYW5nZXMiXSBcCisJLXZhcmlhYmxlIHNob3dsb2NhbGNoYW5nZXMKKyAgICBncmlkIHggJHBhZ2Uuc2hvd2xvY2FsIC1zdGlja3kgdworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkcGFnZS5hdXRvc2VsZWN0IC10ZXh0IFttYyAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSJdIFwKKwktdmFyaWFibGUgYXV0b3NlbGVjdAorICAgIHNwaW5ib3ggJHBhZ2UuYXV0b3NlbGxlbiAtZnJvbSAxIC10byA0MCAtd2lkdGggNCAtdGV4dHZhcmlhYmxlIGF1dG9zZWxsZW4KKyAgICBncmlkIHggJHBhZ2UuYXV0b3NlbGVjdCAkcGFnZS5hdXRvc2VsbGVuIC1zdGlja3kgdworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkcGFnZS5oaWRlcmVtb3RlcyAtdGV4dCBbbWMgIkhpZGUgcmVtb3RlIHJlZnMiXSBcCisJLXZhcmlhYmxlIGhpZGVyZW1vdGVzCisgICAgZ3JpZCB4ICRwYWdlLmhpZGVyZW1vdGVzIC1zdGlja3kgdworCisgICAgJHtOU306OmxhYmVsICRwYWdlLmRkaXNwIC10ZXh0IFttYyAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiXQorICAgIGdyaWQgJHBhZ2UuZGRpc3AgLSAtc3RpY2t5IHcgLXBhZHkgMTAKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UudGFic3RvcGwgLXRleHQgW21jICJUYWIgc3BhY2luZyJdCisgICAgc3BpbmJveCAkcGFnZS50YWJzdG9wIC1mcm9tIDEgLXRvIDIwIC13aWR0aCA0IC10ZXh0dmFyaWFibGUgdGFic3RvcAorICAgIGdyaWQgeCAkcGFnZS50YWJzdG9wbCAkcGFnZS50YWJzdG9wIC1zdGlja3kgdworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkcGFnZS5udGFnIC10ZXh0IFttYyAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyJdIFwKKwktdmFyaWFibGUgc2hvd25lYXJ0YWdzCisgICAgZ3JpZCB4ICRwYWdlLm50YWcgLXN0aWNreSB3CisgICAgJHtOU306OmxhYmVsICRwYWdlLm1heHJlZnNsIC10ZXh0IFttYyAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyJdCisgICAgc3BpbmJveCAkcGFnZS5tYXhyZWZzIC1mcm9tIDEgLXRvIDEwMDAgLXdpZHRoIDQgLXRleHR2YXJpYWJsZSBtYXhyZWZzCisgICAgZ3JpZCB4ICRwYWdlLm1heHJlZnNsICRwYWdlLm1heHJlZnMgLXN0aWNreSB3CisgICAgJHtOU306OmNoZWNrYnV0dG9uICRwYWdlLmxkaWZmIC10ZXh0IFttYyAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIl0gXAorCS12YXJpYWJsZSBsaW1pdGRpZmZzCisgICAgZ3JpZCB4ICRwYWdlLmxkaWZmIC1zdGlja3kgdworICAgICR7TlN9OjpjaGVja2J1dHRvbiAkcGFnZS5sYXR0ciAtdGV4dCBbbWMgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIl0gXAorCS12YXJpYWJsZSBwZXJmaWxlX2F0dHJzCisgICAgZ3JpZCB4ICRwYWdlLmxhdHRyIC1zdGlja3kgdworCisgICAgJHtOU306OmVudHJ5ICRwYWdlLmV4dGRpZmZ0IC10ZXh0dmFyaWFibGUgZXh0ZGlmZnRvb2wKKyAgICAke05TfTo6ZnJhbWUgJHBhZ2UuZXh0ZGlmZmYKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UuZXh0ZGlmZmYubCAtdGV4dCBbbWMgIkV4dGVybmFsIGRpZmYgdG9vbCIgXQorICAgICR7TlN9OjpidXR0b24gJHBhZ2UuZXh0ZGlmZmYuYiAtdGV4dCBbbWMgIkNob29zZS4uLiJdIC1jb21tYW5kIGNob29zZV9leHRkaWZmCisgICAgcGFjayAkcGFnZS5leHRkaWZmZi5sICRwYWdlLmV4dGRpZmZmLmIgLXNpZGUgbGVmdAorICAgIHBhY2sgY29uZmlndXJlICRwYWdlLmV4dGRpZmZmLmwgLXBhZHggMTAKKyAgICBncmlkIHggJHBhZ2UuZXh0ZGlmZmYgJHBhZ2UuZXh0ZGlmZnQgLXN0aWNreSBldworCisgICAgJHtOU306OmVudHJ5ICRwYWdlLndlYmJyb3dzZXIgLXRleHR2YXJpYWJsZSB3ZWJfYnJvd3NlcgorICAgICR7TlN9OjpmcmFtZSAkcGFnZS53ZWJicm93c2VyZgorICAgICR7TlN9OjpsYWJlbCAkcGFnZS53ZWJicm93c2VyZi5sIC10ZXh0IFttYyAiV2ViIGJyb3dzZXIiIF0KKyAgICBwYWNrICRwYWdlLndlYmJyb3dzZXJmLmwgLXNpZGUgbGVmdAorICAgIHBhY2sgY29uZmlndXJlICRwYWdlLndlYmJyb3dzZXJmLmwgLXBhZHggMTAKKyAgICBncmlkIHggJHBhZ2Uud2ViYnJvd3NlcmYgJHBhZ2Uud2ViYnJvd3NlciAtc3RpY2t5IGV3CisKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UubGdlbiAtdGV4dCBbbWMgIkdlbmVyYWwgb3B0aW9ucyJdCisgICAgZ3JpZCAkcGFnZS5sZ2VuIC0gLXN0aWNreSB3IC1wYWR5IDEwCisgICAgJHtOU306OmNoZWNrYnV0dG9uICRwYWdlLndhbnRfdHRrIC12YXJpYWJsZSB3YW50X3R0ayBcCisJLXRleHQgW21jICJVc2UgdGhlbWVkIHdpZGdldHMiXQorICAgIGlmIHskaGF2ZV90dGt9IHsKKwkke05TfTo6bGFiZWwgJHBhZ2UudHRrX25vdGUgLXRleHQgW21jICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIl0KKyAgICB9IGVsc2UgeworCSR7TlN9OjpsYWJlbCAkcGFnZS50dGtfbm90ZSAtdGV4dCBbbWMgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIl0KKyAgICB9CisgICAgZ3JpZCB4ICRwYWdlLndhbnRfdHRrICRwYWdlLnR0a19ub3RlIC1zdGlja3kgdworICAgIHJldHVybiAkcGFnZQorfQorCitwcm9jIHByZWZzcGFnZV9jb2xvcnMge25vdGVib29rfSB7CisgICAgZ2xvYmFsIE5TIHVpY29sb3IgYmdjb2xvciBmZ2NvbG9yIGN0ZXh0IGRpZmZjb2xvcnMgc2VsZWN0Ymdjb2xvciBtYXJrYmdjb2xvcgorCisgICAgc2V0IHBhZ2UgW2NyZWF0ZV9wcmVmc19wYWdlICRub3RlYm9vay5jb2xvcnNdCisKKyAgICAke05TfTo6bGFiZWwgJHBhZ2UuY2Rpc3AgLXRleHQgW21jICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSJdCisgICAgZ3JpZCAkcGFnZS5jZGlzcCAtIC1zdGlja3kgdyAtcGFkeSAxMAorICAgIGxhYmVsICRwYWdlLnVpIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkdWljb2xvcgorICAgICR7TlN9OjpidXR0b24gJHBhZ2UudWlidXQgLXRleHQgW21jICJJbnRlcmZhY2UiXSBcCisgICAgICAgLWNvbW1hbmQgW2xpc3QgY2hvb3NlY29sb3IgdWljb2xvciB7fSAkcGFnZS51aSBbbWMgImludGVyZmFjZSJdIHNldHVpXQorICAgIGdyaWQgeCAkcGFnZS51aWJ1dCAkcGFnZS51aSAtc3RpY2t5IHcKKyAgICBsYWJlbCAkcGFnZS5iZyAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgJGJnY29sb3IKKyAgICAke05TfTo6YnV0dG9uICRwYWdlLmJnYnV0IC10ZXh0IFttYyAiQmFja2dyb3VuZCJdIFwKKwktY29tbWFuZCBbbGlzdCBjaG9vc2Vjb2xvciBiZ2NvbG9yIHt9ICRwYWdlLmJnIFttYyAiYmFja2dyb3VuZCJdIHNldGJnXQorICAgIGdyaWQgeCAkcGFnZS5iZ2J1dCAkcGFnZS5iZyAtc3RpY2t5IHcKKyAgICBsYWJlbCAkcGFnZS5mZyAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgJGZnY29sb3IKKyAgICAke05TfTo6YnV0dG9uICRwYWdlLmZnYnV0IC10ZXh0IFttYyAiRm9yZWdyb3VuZCJdIFwKKwktY29tbWFuZCBbbGlzdCBjaG9vc2Vjb2xvciBmZ2NvbG9yIHt9ICRwYWdlLmZnIFttYyAiZm9yZWdyb3VuZCJdIHNldGZnXQorICAgIGdyaWQgeCAkcGFnZS5mZ2J1dCAkcGFnZS5mZyAtc3RpY2t5IHcKKyAgICBsYWJlbCAkcGFnZS5kaWZmb2xkIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCBbbGluZGV4ICRkaWZmY29sb3JzIDBdCisgICAgJHtOU306OmJ1dHRvbiAkcGFnZS5kaWZmb2xkYnV0IC10ZXh0IFttYyAiRGlmZjogb2xkIGxpbmVzIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGRpZmZjb2xvcnMgMCAkcGFnZS5kaWZmb2xkIFttYyAiZGlmZiBvbGQgbGluZXMiXSBcCisJCSAgICAgIFtsaXN0ICRjdGV4dCB0YWcgY29uZiBkMCAtZm9yZWdyb3VuZF1dCisgICAgZ3JpZCB4ICRwYWdlLmRpZmZvbGRidXQgJHBhZ2UuZGlmZm9sZCAtc3RpY2t5IHcKKyAgICBsYWJlbCAkcGFnZS5kaWZmbmV3IC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCBbbGluZGV4ICRkaWZmY29sb3JzIDFdCisgICAgJHtOU306OmJ1dHRvbiAkcGFnZS5kaWZmbmV3YnV0IC10ZXh0IFttYyAiRGlmZjogbmV3IGxpbmVzIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIGRpZmZjb2xvcnMgMSAkcGFnZS5kaWZmbmV3IFttYyAiZGlmZiBuZXcgbGluZXMiXSBcCisJCSAgICAgIFtsaXN0ICRjdGV4dCB0YWcgY29uZiBkcmVzdWx0IC1mb3JlZ3JvdW5kXV0KKyAgICBncmlkIHggJHBhZ2UuZGlmZm5ld2J1dCAkcGFnZS5kaWZmbmV3IC1zdGlja3kgdworICAgIGxhYmVsICRwYWdlLmh1bmtzZXAgLXBhZHggNDAgLXJlbGllZiBzdW5rIC1iYWNrZ3JvdW5kIFtsaW5kZXggJGRpZmZjb2xvcnMgMl0KKyAgICAke05TfTo6YnV0dG9uICRwYWdlLmh1bmtzZXBidXQgLXRleHQgW21jICJEaWZmOiBodW5rIGhlYWRlciJdIFwKKwktY29tbWFuZCBbbGlzdCBjaG9vc2Vjb2xvciBkaWZmY29sb3JzIDIgJHBhZ2UuaHVua3NlcCBcCisJCSAgICAgIFttYyAiZGlmZiBodW5rIGhlYWRlciJdIFwKKwkJICAgICAgW2xpc3QgJGN0ZXh0IHRhZyBjb25mIGh1bmtzZXAgLWZvcmVncm91bmRdXQorICAgIGdyaWQgeCAkcGFnZS5odW5rc2VwYnV0ICRwYWdlLmh1bmtzZXAgLXN0aWNreSB3CisgICAgbGFiZWwgJHBhZ2UubWFya2Jnc2VwIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkbWFya2JnY29sb3IKKyAgICAke05TfTo6YnV0dG9uICRwYWdlLm1hcmtiZ2J1dCAtdGV4dCBbbWMgIk1hcmtlZCBsaW5lIGJnIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIG1hcmtiZ2NvbG9yIHt9ICRwYWdlLm1hcmtiZ3NlcCBcCisJCSAgICAgIFttYyAibWFya2VkIGxpbmUgYmFja2dyb3VuZCJdIFwKKwkJICAgICAgW2xpc3QgJGN0ZXh0IHRhZyBjb25mIG9tYXJrIC1iYWNrZ3JvdW5kXV0KKyAgICBncmlkIHggJHBhZ2UubWFya2JnYnV0ICRwYWdlLm1hcmtiZ3NlcCAtc3RpY2t5IHcKKyAgICBsYWJlbCAkcGFnZS5zZWxiZ3NlcCAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgJHNlbGVjdGJnY29sb3IKKyAgICAke05TfTo6YnV0dG9uICRwYWdlLnNlbGJnYnV0IC10ZXh0IFttYyAiU2VsZWN0IGJnIl0gXAorCS1jb21tYW5kIFtsaXN0IGNob29zZWNvbG9yIHNlbGVjdGJnY29sb3Ige30gJHBhZ2Uuc2VsYmdzZXAgW21jICJiYWNrZ3JvdW5kIl0gc2V0c2VsYmddCisgICAgZ3JpZCB4ICRwYWdlLnNlbGJnYnV0ICRwYWdlLnNlbGJnc2VwIC1zdGlja3kgdworICAgIHJldHVybiAkcGFnZQorfQorCitwcm9jIHByZWZzcGFnZV9mb250cyB7bm90ZWJvb2t9IHsKKyAgICBnbG9iYWwgTlMKKyAgICBzZXQgcGFnZSBbY3JlYXRlX3ByZWZzX3BhZ2UgJG5vdGVib29rLmZvbnRzXQorICAgICR7TlN9OjpsYWJlbCAkcGFnZS5jZm9udCAtdGV4dCBbbWMgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiXQorICAgIGdyaWQgJHBhZ2UuY2ZvbnQgLSAtc3RpY2t5IHcgLXBhZHkgMTAKKyAgICBta2ZvbnRkaXNwIG1haW5mb250ICRwYWdlIFttYyAiTWFpbiBmb250Il0KKyAgICBta2ZvbnRkaXNwIHRleHRmb250ICRwYWdlIFttYyAiRGlmZiBkaXNwbGF5IGZvbnQiXQorICAgIG1rZm9udGRpc3AgdWlmb250ICRwYWdlIFttYyAiVXNlciBpbnRlcmZhY2UgZm9udCJdCisgICAgcmV0dXJuICRwYWdlCit9CisKK3Byb2MgZG9wcmVmcyB7fSB7CisgICAgZ2xvYmFsIG1heHdpZHRoIG1heGdyYXBocGN0IHVzZV90dGsgTlMKKyAgICBnbG9iYWwgb2xkcHJlZnMgcHJlZnN0b3Agc2hvd25lYXJ0YWdzIHNob3dsb2NhbGNoYW5nZXMKKyAgICBnbG9iYWwgdWljb2xvciBiZ2NvbG9yIGZnY29sb3IgY3RleHQgZGlmZmNvbG9ycyBzZWxlY3RiZ2NvbG9yIG1hcmtiZ2NvbG9yCisgICAgZ2xvYmFsIHRhYnN0b3AgbGltaXRkaWZmcyBhdXRvc2VsZWN0IGF1dG9zZWxsZW4gZXh0ZGlmZnRvb2wgcGVyZmlsZV9hdHRycworICAgIGdsb2JhbCBoaWRlcmVtb3RlcyB3YW50X3R0ayBoYXZlX3R0aworCisgICAgc2V0IHRvcCAuZ2l0a3ByZWZzCisgICAgc2V0IHByZWZzdG9wICR0b3AKKyAgICBpZiB7W3dpbmZvIGV4aXN0cyAkdG9wXX0geworCXJhaXNlICR0b3AKKwlyZXR1cm4KKyAgICB9CisgICAgZm9yZWFjaCB2IHttYXh3aWR0aCBtYXhncmFwaHBjdCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcyBcCisJCSAgIGxpbWl0ZGlmZnMgdGFic3RvcCBwZXJmaWxlX2F0dHJzIGhpZGVyZW1vdGVzIHdhbnRfdHRrfSB7CisJc2V0IG9sZHByZWZzKCR2KSBbc2V0ICR2XQorICAgIH0KKyAgICB0dGtfdG9wbGV2ZWwgJHRvcAorICAgIHdtIHRpdGxlICR0b3AgW21jICJHaXRrIHByZWZlcmVuY2VzIl0KKyAgICBtYWtlX3RyYW5zaWVudCAkdG9wIC4KKworICAgIGlmIHtbc2V0IHVzZV9ub3RlYm9vayBbZXhwciB7JHVzZV90dGsgJiYgW2luZm8gY29tbWFuZCA6OnR0azo6bm90ZWJvb2tdIG5lICIifV1dfSB7CisJc2V0IG5vdGVib29rIFt0dGs6Om5vdGVib29rICR0b3Aubm90ZWJvb2tdCisgICAgfSBlbHNlIHsKKwlzZXQgbm90ZWJvb2sgWyR7TlN9OjpmcmFtZSAkdG9wLm5vdGVib29rIC1ib3JkZXJ3aWR0aCAwIC1yZWxpZWYgZmxhdF0KKyAgICB9CisKKyAgICBsYXBwZW5kIHBhZ2VzIFtwcmVmc3BhZ2VfZ2VuZXJhbCAkbm90ZWJvb2tdIFttYyAiR2VuZXJhbCJdCisgICAgbGFwcGVuZCBwYWdlcyBbcHJlZnNwYWdlX2NvbG9ycyAkbm90ZWJvb2tdIFttYyAiQ29sb3JzIl0KKyAgICBsYXBwZW5kIHBhZ2VzIFtwcmVmc3BhZ2VfZm9udHMgJG5vdGVib29rXSBbbWMgIkZvbnRzIl0KKyAgICBzZXQgY29sIDAKKyAgICBmb3JlYWNoIHtwYWdlIHRpdGxlfSAkcGFnZXMgeworCWlmIHskdXNlX25vdGVib29rfSB7CisJICAgICRub3RlYm9vayBhZGQgJHBhZ2UgLXRleHQgJHRpdGxlCisJfSBlbHNlIHsKKwkgICAgc2V0IGJ0biBbJHtOU306OmJ1dHRvbiAkbm90ZWJvb2suYl9bc3RyaW5nIG1hcCB7LiBYfSAkcGFnZV0gXAorCQkJIC10ZXh0ICR0aXRsZSAtY29tbWFuZCBbbGlzdCByYWlzZSAkcGFnZV1dCisJICAgICRwYWdlIGNvbmZpZ3VyZSAtdGV4dCAkdGl0bGUKKwkgICAgZ3JpZCAkYnRuIC1yb3cgMCAtY29sdW1uIFtpbmNyIGNvbF0gLXN0aWNreSB3CisJICAgIGdyaWQgJHBhZ2UgLXJvdyAxIC1jb2x1bW4gMCAtc3RpY2t5IG5ld3MgLWNvbHVtbnNwYW4gMTAwCisJfQorICAgIH0KKworICAgIGlmIHshJHVzZV9ub3RlYm9va30geworCWdyaWQgY29sdW1uY29uZmlndXJlICRub3RlYm9vayAwIC13ZWlnaHQgMQorCWdyaWQgcm93Y29uZmlndXJlICRub3RlYm9vayAxIC13ZWlnaHQgMQorCXJhaXNlIFtsaW5kZXggJHBhZ2VzIDBdCisgICAgfQorCisgICAgZ3JpZCAkbm90ZWJvb2sgLXN0aWNreSBuZXdzIC1wYWR4IDIgLXBhZHkgMgorICAgIGdyaWQgcm93Y29uZmlndXJlICR0b3AgMCAtd2VpZ2h0IDEKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wIDAgLXdlaWdodCAxCisKKyAgICAke05TfTo6ZnJhbWUgJHRvcC5idXRzCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMub2sgLXRleHQgW21jICJPSyJdIC1jb21tYW5kIHByZWZzb2sgLWRlZmF1bHQgYWN0aXZlCisgICAgJHtOU306OmJ1dHRvbiAkdG9wLmJ1dHMuY2FuIC10ZXh0IFttYyAiQ2FuY2VsIl0gLWNvbW1hbmQgcHJlZnNjYW4gLWRlZmF1bHQgbm9ybWFsCisgICAgYmluZCAkdG9wIDxLZXktUmV0dXJuPiBwcmVmc29rCisgICAgYmluZCAkdG9wIDxLZXktRXNjYXBlPiBwcmVmc2NhbgorICAgIGdyaWQgJHRvcC5idXRzLm9rICR0b3AuYnV0cy5jYW4KKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wLmJ1dHMgMCAtd2VpZ2h0IDEgLXVuaWZvcm0gYQorICAgIGdyaWQgY29sdW1uY29uZmlndXJlICR0b3AuYnV0cyAxIC13ZWlnaHQgMSAtdW5pZm9ybSBhCisgICAgZ3JpZCAkdG9wLmJ1dHMgLSAtIC1wYWR5IDEwIC1zdGlja3kgZXcKKyAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdG9wIDIgLXdlaWdodCAxCisgICAgYmluZCAkdG9wIDxWaXNpYmlsaXR5PiBbbGlzdCBmb2N1cyAkdG9wLmJ1dHMub2tdCit9CisKK3Byb2MgY2hvb3NlX2V4dGRpZmYge30geworICAgIGdsb2JhbCBleHRkaWZmdG9vbAorCisgICAgc2V0IHByb2cgW3RrX2dldE9wZW5GaWxlIC10aXRsZSBbbWMgIkV4dGVybmFsIGRpZmYgdG9vbCJdIC1tdWx0aXBsZSBmYWxzZV0KKyAgICBpZiB7JHByb2cgbmUge319IHsKKwlzZXQgZXh0ZGlmZnRvb2wgJHByb2cKKyAgICB9Cit9CisKK3Byb2MgY2hvb3NlY29sb3Ige3YgdmkgdyB4IGNtZH0geworICAgIGdsb2JhbCAkdgorCisgICAgc2V0IGMgW3RrX2Nob29zZUNvbG9yIC1pbml0aWFsY29sb3IgW2xpbmRleCBbc2V0ICR2XSAkdmldIFwKKwkgICAgICAgLXRpdGxlIFttYyAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIgJHhdXQorICAgIGlmIHskYyBlcSB7fX0gcmV0dXJuCisgICAgJHcgY29uZiAtYmFja2dyb3VuZCAkYworICAgIGxzZXQgJHYgJHZpICRjCisgICAgZXZhbCAkY21kICRjCit9CisKK3Byb2Mgc2V0c2VsYmcge2N9IHsKKyAgICBnbG9iYWwgYmdsaXN0IGNmbGlzdAorICAgIGZvcmVhY2ggdyAkYmdsaXN0IHsKKwlpZiB7W3dpbmZvIGV4aXN0cyAkd119IHsKKwkgICAgJHcgY29uZmlndXJlIC1zZWxlY3RiYWNrZ3JvdW5kICRjCisJfQorICAgIH0KKyAgICAkY2ZsaXN0IHRhZyBjb25maWd1cmUgaGlnaGxpZ2h0IFwKKwktYmFja2dyb3VuZCBbJGNmbGlzdCBjZ2V0IC1zZWxlY3RiYWNrZ3JvdW5kXQorICAgIGFsbGNhbnZzIGl0ZW1jb25mIHNlY3NlbCAtZmlsbCAkYworfQorCisjIFRoaXMgc2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBhbmQgdGhlIGNvbG9yIHNjaGVtZSBmb3IgdGhlIHdob2xlIFVJLgorIyBGb3Igc29tZSByZWFzb24sIHRrX3NldFBhbGV0dGUgY2hvb3NlcyBhIG5hc3R5IGRhcmsgcmVkIGZvciBzZWxlY3RDb2xvcgorIyBpZiB3ZSBkb24ndCBzcGVjaWZ5IG9uZSBvdXJzZWx2ZXMsIHdoaWNoIG1ha2VzIHRoZSBjaGVja2J1dHRvbnMgYW5kCisjIHJhZGlvYnV0dG9ucyBsb29rIGJhZC4gIFRoaXMgY2hvb3NlcyB3aGl0ZSBmb3Igc2VsZWN0Q29sb3IgaWYgdGhlCisjIGJhY2tncm91bmQgY29sb3IgaXMgbGlnaHQsIG9yIGJsYWNrIGlmIGl0IGlzIGRhcmsuCitwcm9jIHNldHVpIHtjfSB7CisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiJ9IHsgcmV0dXJuIH0KKyAgICBzZXQgYmcgW3dpbmZvIHJnYiAuICRjXQorICAgIHNldCBzZWxjIGJsYWNrCisgICAgaWYge1tsaW5kZXggJGJnIDBdICsgMS41ICogW2xpbmRleCAkYmcgMV0gKyAwLjUgKiBbbGluZGV4ICRiZyAyXSA+IDEwMDAwMH0geworCXNldCBzZWxjIHdoaXRlCisgICAgfQorICAgIHRrX3NldFBhbGV0dGUgYmFja2dyb3VuZCAkYyBzZWxlY3RDb2xvciAkc2VsYworfQorCitwcm9jIHNldGJnIHtjfSB7CisgICAgZ2xvYmFsIGJnbGlzdAorCisgICAgZm9yZWFjaCB3ICRiZ2xpc3QgeworCWlmIHtbd2luZm8gZXhpc3RzICR3XX0geworCSAgICAkdyBjb25mIC1iYWNrZ3JvdW5kICRjCisJfQorICAgIH0KK30KKworcHJvYyBzZXRmZyB7Y30geworICAgIGdsb2JhbCBmZ2xpc3QgY2FudgorCisgICAgZm9yZWFjaCB3ICRmZ2xpc3QgeworCWlmIHtbd2luZm8gZXhpc3RzICR3XX0geworCSAgICAkdyBjb25mIC1mb3JlZ3JvdW5kICRjCisJfQorICAgIH0KKyAgICBhbGxjYW52cyBpdGVtY29uZiB0ZXh0IC1maWxsICRjCisgICAgJGNhbnYgaXRlbWNvbmYgY2lyY2xlIC1vdXRsaW5lICRjCisgICAgJGNhbnYgaXRlbWNvbmYgbWFya2lkIC1vdXRsaW5lICRjCit9CisKK3Byb2MgcHJlZnNjYW4ge30geworICAgIGdsb2JhbCBvbGRwcmVmcyBwcmVmc3RvcAorCisgICAgZm9yZWFjaCB2IHttYXh3aWR0aCBtYXhncmFwaHBjdCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcyBcCisJCSAgIGxpbWl0ZGlmZnMgdGFic3RvcCBwZXJmaWxlX2F0dHJzIGhpZGVyZW1vdGVzIHdhbnRfdHRrfSB7CisJZ2xvYmFsICR2CisJc2V0ICR2ICRvbGRwcmVmcygkdikKKyAgICB9CisgICAgY2F0Y2gge2Rlc3Ryb3kgJHByZWZzdG9wfQorICAgIHVuc2V0IHByZWZzdG9wCisgICAgZm9udGNhbgorfQorCitwcm9jIHByZWZzb2sge30geworICAgIGdsb2JhbCBtYXh3aWR0aCBtYXhncmFwaHBjdAorICAgIGdsb2JhbCBvbGRwcmVmcyBwcmVmc3RvcCBzaG93bmVhcnRhZ3Mgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCBmb250cHJlZiBtYWluZm9udCB0ZXh0Zm9udCB1aWZvbnQKKyAgICBnbG9iYWwgbGltaXRkaWZmcyB0cmVlZGlmZnMgcGVyZmlsZV9hdHRycworICAgIGdsb2JhbCBoaWRlcmVtb3RlcworCisgICAgY2F0Y2gge2Rlc3Ryb3kgJHByZWZzdG9wfQorICAgIHVuc2V0IHByZWZzdG9wCisgICAgZm9udGNhbgorICAgIHNldCBmb250Y2hhbmdlZCAwCisgICAgaWYgeyRtYWluZm9udCBuZSAkZm9udHByZWYobWFpbmZvbnQpfSB7CisJc2V0IG1haW5mb250ICRmb250cHJlZihtYWluZm9udCkKKwlwYXJzZWZvbnQgbWFpbmZvbnQgJG1haW5mb250CisJZXZhbCBmb250IGNvbmZpZ3VyZSBtYWluZm9udCBbZm9udGZsYWdzIG1haW5mb250XQorCWV2YWwgZm9udCBjb25maWd1cmUgbWFpbmZvbnRib2xkIFtmb250ZmxhZ3MgbWFpbmZvbnQgMV0KKwlzZXRjb29yZHMKKwlzZXQgZm9udGNoYW5nZWQgMQorICAgIH0KKyAgICBpZiB7JHRleHRmb250IG5lICRmb250cHJlZih0ZXh0Zm9udCl9IHsKKwlzZXQgdGV4dGZvbnQgJGZvbnRwcmVmKHRleHRmb250KQorCXBhcnNlZm9udCB0ZXh0Zm9udCAkdGV4dGZvbnQKKwlldmFsIGZvbnQgY29uZmlndXJlIHRleHRmb250IFtmb250ZmxhZ3MgdGV4dGZvbnRdCisJZXZhbCBmb250IGNvbmZpZ3VyZSB0ZXh0Zm9udGJvbGQgW2ZvbnRmbGFncyB0ZXh0Zm9udCAxXQorICAgIH0KKyAgICBpZiB7JHVpZm9udCBuZSAkZm9udHByZWYodWlmb250KX0geworCXNldCB1aWZvbnQgJGZvbnRwcmVmKHVpZm9udCkKKwlwYXJzZWZvbnQgdWlmb250ICR1aWZvbnQKKwlldmFsIGZvbnQgY29uZmlndXJlIHVpZm9udCBbZm9udGZsYWdzIHVpZm9udF0KKyAgICB9CisgICAgc2V0dGFicworICAgIGlmIHskc2hvd2xvY2FsY2hhbmdlcyAhPSAkb2xkcHJlZnMoc2hvd2xvY2FsY2hhbmdlcyl9IHsKKwlpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwkgICAgZG9zaG93bG9jYWxjaGFuZ2VzCisJfSBlbHNlIHsKKwkgICAgZG9oaWRlbG9jYWxjaGFuZ2VzCisJfQorICAgIH0KKyAgICBpZiB7JGxpbWl0ZGlmZnMgIT0gJG9sZHByZWZzKGxpbWl0ZGlmZnMpIHx8CisJKCRwZXJmaWxlX2F0dHJzICYmICEkb2xkcHJlZnMocGVyZmlsZV9hdHRycykpfSB7CisJIyB0cmVlZGlmZnMgZWxlbWVudHMgYXJlIGxpbWl0ZWQgYnkgcGF0aDsKKwkjIHdvbid0IGhhdmUgZW5jb2RpbmdzIGNhY2hlZCBpZiBwZXJmaWxlX2F0dHJzIHdhcyBqdXN0IHR1cm5lZCBvbgorCXVuc2V0IC1ub2NvbXBsYWluIHRyZWVkaWZmcworICAgIH0KKyAgICBpZiB7JGZvbnRjaGFuZ2VkIHx8ICRtYXh3aWR0aCAhPSAkb2xkcHJlZnMobWF4d2lkdGgpCisJfHwgJG1heGdyYXBocGN0ICE9ICRvbGRwcmVmcyhtYXhncmFwaHBjdCl9IHsKKwlyZWRpc3BsYXkKKyAgICB9IGVsc2VpZiB7JHNob3duZWFydGFncyAhPSAkb2xkcHJlZnMoc2hvd25lYXJ0YWdzKSB8fAorCSAgJGxpbWl0ZGlmZnMgIT0gJG9sZHByZWZzKGxpbWl0ZGlmZnMpfSB7CisJcmVzZWxlY3RsaW5lCisgICAgfQorICAgIGlmIHskaGlkZXJlbW90ZXMgIT0gJG9sZHByZWZzKGhpZGVyZW1vdGVzKX0geworCXJlcmVhZHJlZnMKKyAgICB9Cit9CisKK3Byb2MgZm9ybWF0ZGF0ZSB7ZH0geworICAgIGdsb2JhbCBkYXRldGltZWZvcm1hdAorICAgIGlmIHskZCBuZSB7fX0geworCSMgSWYgJGRhdGV0aW1lZm9ybWF0IGluY2x1ZGVzIGEgdGltZXpvbmUsIGRpc3BsYXkgaW4gdGhlCisJIyB0aW1lem9uZSBvZiB0aGUgYXJndW1lbnQuICBPdGhlcndpc2UsIGRpc3BsYXkgaW4gbG9jYWwgdGltZS4KKwlpZiB7W3N0cmluZyBtYXRjaCB7KiVbelpdKn0gJGRhdGV0aW1lZm9ybWF0XX0geworCSAgICBpZiB7W2NhdGNoIHtzZXQgZCBbY2xvY2sgZm9ybWF0IFtsaW5kZXggJGQgMF0gLXRpbWV6b25lIFtsaW5kZXggJGQgMV0gLWZvcm1hdCAkZGF0ZXRpbWVmb3JtYXRdfV19IHsKKwkJIyBUY2wgPCA4LjUgZG9lcyBub3Qgc3VwcG9ydCAtdGltZXpvbmUuICBFbXVsYXRlIGl0IGJ5CisJCSMgc2V0dGluZyBUWiAoZS5nLiBUWj08LTA0MzA+KzA0OjMwKS4KKwkJZ2xvYmFsIGVudgorCQlpZiB7W2luZm8gZXhpc3RzIGVudihUWildfSB7CisJCSAgICBzZXQgc2F2ZWRUWiAkZW52KFRaKQorCQl9CisJCXNldCB6b25lIFtsaW5kZXggJGQgMV0KKwkJc2V0IHNpZ24gW3N0cmluZyBtYXAgeysgLSAtICt9IFtzdHJpbmcgaW5kZXggJHpvbmUgMF1dCisJCXNldCBlbnYoVFopIDwkem9uZT4kc2lnbltzdHJpbmcgcmFuZ2UgJHpvbmUgMSAyXTpbc3RyaW5nIHJhbmdlICR6b25lIDMgNF0KKwkJc2V0IGQgW2Nsb2NrIGZvcm1hdCBbbGluZGV4ICRkIDBdIC1mb3JtYXQgJGRhdGV0aW1lZm9ybWF0XQorCQlpZiB7W2luZm8gZXhpc3RzIHNhdmVkVFpdfSB7CisJCSAgICBzZXQgZW52KFRaKSAkc2F2ZWRUWgorCQl9IGVsc2UgeworCQkgICAgdW5zZXQgZW52KFRaKQorCQl9CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBzZXQgZCBbY2xvY2sgZm9ybWF0IFtsaW5kZXggJGQgMF0gLWZvcm1hdCAkZGF0ZXRpbWVmb3JtYXRdCisJfQorICAgIH0KKyAgICByZXR1cm4gJGQKK30KKworIyBUaGlzIGxpc3Qgb2YgZW5jb2RpbmcgbmFtZXMgYW5kIGFsaWFzZXMgaXMgZGlzdGlsbGVkIGZyb20KKyMgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy4KKyMgTm90IGFsbCBvZiB0aGVtIGFyZSBzdXBwb3J0ZWQgYnkgVGNsLgorc2V0IGVuY29kaW5nX2FsaWFzZXMgeworICAgIHsgQU5TSV9YMy40LTE5NjggaXNvLWlyLTYgQU5TSV9YMy40LTE5ODYgSVNPXzY0Ni5pcnY6MTk5MSBBU0NJSQorICAgICAgSVNPNjQ2LVVTIFVTLUFTQ0lJIHVzIElCTTM2NyBjcDM2NyBjc0FTQ0lJIH0KKyAgICB7IElTTy0xMDY0Ni1VVEYtMSBjc0lTTzEwNjQ2VVRGMSB9CisgICAgeyBJU09fNjQ2LmJhc2ljOjE5ODMgcmVmIGNzSVNPNjQ2YmFzaWMxOTgzIH0KKyAgICB7IElOVkFSSUFOVCBjc0lOVkFSSUFOVCB9CisgICAgeyBJU09fNjQ2LmlydjoxOTgzIGlzby1pci0yIGlydiBjc0lTTzJJbnRsUmVmVmVyc2lvbiB9CisgICAgeyBCU180NzMwIGlzby1pci00IElTTzY0Ni1HQiBnYiB1ayBjc0lTTzRVbml0ZWRLaW5nZG9tIH0KKyAgICB7IE5BVFMtU0VGSSBpc28taXItOC0xIGNzTkFUU1NFRkkgfQorICAgIHsgTkFUUy1TRUZJLUFERCBpc28taXItOC0yIGNzTkFUU1NFRklBREQgfQorICAgIHsgTkFUUy1EQU5PIGlzby1pci05LTEgY3NOQVRTREFOTyB9CisgICAgeyBOQVRTLURBTk8tQUREIGlzby1pci05LTIgY3NOQVRTREFOT0FERCB9CisgICAgeyBTRU5fODUwMjAwX0IgaXNvLWlyLTEwIEZJIElTTzY0Ni1GSSBJU082NDYtU0Ugc2UgY3NJU08xMFN3ZWRpc2ggfQorICAgIHsgU0VOXzg1MDIwMF9DIGlzby1pci0xMSBJU082NDYtU0UyIHNlMiBjc0lTTzExU3dlZGlzaEZvck5hbWVzIH0KKyAgICB7IEtTX0NfNTYwMS0xOTg3IGlzby1pci0xNDkgS1NfQ181NjAxLTE5ODkgS1NDXzU2MDEga29yZWFuIGNzS1NDNTYwMTE5ODcgfQorICAgIHsgSVNPLTIwMjItS1IgY3NJU08yMDIyS1IgfQorICAgIHsgRVVDLUtSIGNzRVVDS1IgfQorICAgIHsgSVNPLTIwMjItSlAgY3NJU08yMDIySlAgfQorICAgIHsgSVNPLTIwMjItSlAtMiBjc0lTTzIwMjJKUDIgfQorICAgIHsgSklTX0M2MjIwLTE5NjktanAgSklTX0M2MjIwLTE5NjkgaXNvLWlyLTEzIGthdGFrYW5hIHgwMjAxLTcKKyAgICAgIGNzSVNPMTNKSVNDNjIyMGpwIH0KKyAgICB7IEpJU19DNjIyMC0xOTY5LXJvIGlzby1pci0xNCBqcCBJU082NDYtSlAgY3NJU08xNEpJU0M2MjIwcm8gfQorICAgIHsgSVQgaXNvLWlyLTE1IElTTzY0Ni1JVCBjc0lTTzE1SXRhbGlhbiB9CisgICAgeyBQVCBpc28taXItMTYgSVNPNjQ2LVBUIGNzSVNPMTZQb3J0dWd1ZXNlIH0KKyAgICB7IEVTIGlzby1pci0xNyBJU082NDYtRVMgY3NJU08xN1NwYW5pc2ggfQorICAgIHsgZ3JlZWs3LW9sZCBpc28taXItMTggY3NJU08xOEdyZWVrN09sZCB9CisgICAgeyBsYXRpbi1ncmVlayBpc28taXItMTkgY3NJU08xOUxhdGluR3JlZWsgfQorICAgIHsgRElOXzY2MDAzIGlzby1pci0yMSBkZSBJU082NDYtREUgY3NJU08yMUdlcm1hbiB9CisgICAgeyBORl9aXzYyLTAxMF8oMTk3MykgaXNvLWlyLTI1IElTTzY0Ni1GUjEgY3NJU08yNUZyZW5jaCB9CisgICAgeyBMYXRpbi1ncmVlay0xIGlzby1pci0yNyBjc0lTTzI3TGF0aW5HcmVlazEgfQorICAgIHsgSVNPXzU0MjcgaXNvLWlyLTM3IGNzSVNPNTQyN0N5cmlsbGljIH0KKyAgICB7IEpJU19DNjIyNi0xOTc4IGlzby1pci00MiBjc0lTTzQySklTQzYyMjYxOTc4IH0KKyAgICB7IEJTX3ZpZXdkYXRhIGlzby1pci00NyBjc0lTTzQ3QlNWaWV3ZGF0YSB9CisgICAgeyBJTklTIGlzby1pci00OSBjc0lTTzQ5SU5JUyB9CisgICAgeyBJTklTLTggaXNvLWlyLTUwIGNzSVNPNTBJTklTOCB9CisgICAgeyBJTklTLWN5cmlsbGljIGlzby1pci01MSBjc0lTTzUxSU5JU0N5cmlsbGljIH0KKyAgICB7IElTT181NDI3OjE5ODEgaXNvLWlyLTU0IElTTzU0MjdDeXJpbGxpYzE5ODEgfQorICAgIHsgSVNPXzU0Mjg6MTk4MCBpc28taXItNTUgY3NJU081NDI4R3JlZWsgfQorICAgIHsgR0JfMTk4OC04MCBpc28taXItNTcgY24gSVNPNjQ2LUNOIGNzSVNPNTdHQjE5ODggfQorICAgIHsgR0JfMjMxMi04MCBpc28taXItNTggY2hpbmVzZSBjc0lTTzU4R0IyMzEyODAgfQorICAgIHsgTlNfNDU1MS0xIGlzby1pci02MCBJU082NDYtTk8gbm8gY3NJU082MERhbmlzaE5vcndlZ2lhbgorICAgICAgY3NJU082ME5vcndlZ2lhbjEgfQorICAgIHsgTlNfNDU1MS0yIElTTzY0Ni1OTzIgaXNvLWlyLTYxIG5vMiBjc0lTTzYxTm9yd2VnaWFuMiB9CisgICAgeyBORl9aXzYyLTAxMCBpc28taXItNjkgSVNPNjQ2LUZSIGZyIGNzSVNPNjlGcmVuY2ggfQorICAgIHsgdmlkZW90ZXgtc3VwcGwgaXNvLWlyLTcwIGNzSVNPNzBWaWRlb3RleFN1cHAxIH0KKyAgICB7IFBUMiBpc28taXItODQgSVNPNjQ2LVBUMiBjc0lTTzg0UG9ydHVndWVzZTIgfQorICAgIHsgRVMyIGlzby1pci04NSBJU082NDYtRVMyIGNzSVNPODVTcGFuaXNoMiB9CisgICAgeyBNU1pfNzc5NS4zIGlzby1pci04NiBJU082NDYtSFUgaHUgY3NJU084Nkh1bmdhcmlhbiB9CisgICAgeyBKSVNfQzYyMjYtMTk4MyBpc28taXItODcgeDAyMDggSklTX1gwMjA4LTE5ODMgY3NJU084N0pJU1gwMjA4IH0KKyAgICB7IGdyZWVrNyBpc28taXItODggY3NJU084OEdyZWVrNyB9CisgICAgeyBBU01PXzQ0OSBJU09fOTAzNiBhcmFiaWM3IGlzby1pci04OSBjc0lTTzg5QVNNTzQ0OSB9CisgICAgeyBpc28taXItOTAgY3NJU085MCB9CisgICAgeyBKSVNfQzYyMjktMTk4NC1hIGlzby1pci05MSBqcC1vY3ItYSBjc0lTTzkxSklTQzYyMjkxOTg0YSB9CisgICAgeyBKSVNfQzYyMjktMTk4NC1iIGlzby1pci05MiBJU082NDYtSlAtT0NSLUIganAtb2NyLWIKKyAgICAgIGNzSVNPOTJKSVNDNjI5OTE5ODRiIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWItYWRkIGlzby1pci05MyBqcC1vY3ItYi1hZGQgY3NJU085M0pJUzYyMjkxOTg0YmFkZCB9CisgICAgeyBKSVNfQzYyMjktMTk4NC1oYW5kIGlzby1pci05NCBqcC1vY3ItaGFuZCBjc0lTTzk0SklTNjIyOTE5ODRoYW5kIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWhhbmQtYWRkIGlzby1pci05NSBqcC1vY3ItaGFuZC1hZGQKKyAgICAgIGNzSVNPOTVKSVM2MjI5MTk4NGhhbmRhZGQgfQorICAgIHsgSklTX0M2MjI5LTE5ODQta2FuYSBpc28taXItOTYgY3NJU085NkpJU0M2MjI5MTk4NGthbmEgfQorICAgIHsgSVNPXzIwMzMtMTk4MyBpc28taXItOTggZTEzYiBjc0lTTzIwMzMgfQorICAgIHsgQU5TSV9YMy4xMTAtMTk4MyBpc28taXItOTkgQ1NBX1Q1MDAtMTk4MyBOQVBMUFMgY3NJU085OU5BUExQUyB9CisgICAgeyBJU09fODg1OS0xOjE5ODcgaXNvLWlyLTEwMCBJU09fODg1OS0xIElTTy04ODU5LTEgbGF0aW4xIGwxIElCTTgxOQorICAgICAgQ1A4MTkgY3NJU09MYXRpbjEgfQorICAgIHsgSVNPXzg4NTktMjoxOTg3IGlzby1pci0xMDEgSVNPXzg4NTktMiBJU08tODg1OS0yIGxhdGluMiBsMiBjc0lTT0xhdGluMiB9CisgICAgeyBULjYxLTdiaXQgaXNvLWlyLTEwMiBjc0lTTzEwMlQ2MTdiaXQgfQorICAgIHsgVC42MS04Yml0IFQuNjEgaXNvLWlyLTEwMyBjc0lTTzEwM1Q2MThiaXQgfQorICAgIHsgSVNPXzg4NTktMzoxOTg4IGlzby1pci0xMDkgSVNPXzg4NTktMyBJU08tODg1OS0zIGxhdGluMyBsMyBjc0lTT0xhdGluMyB9CisgICAgeyBJU09fODg1OS00OjE5ODggaXNvLWlyLTExMCBJU09fODg1OS00IElTTy04ODU5LTQgbGF0aW40IGw0IGNzSVNPTGF0aW40IH0KKyAgICB7IEVDTUEtY3lyaWxsaWMgaXNvLWlyLTExMSBLT0k4LUUgY3NJU08xMTFFQ01BQ3lyaWxsaWMgfQorICAgIHsgQ1NBX1oyNDMuNC0xOTg1LTEgaXNvLWlyLTEyMSBJU082NDYtQ0EgY3NhNy0xIGNhIGNzSVNPMTIxQ2FuYWRpYW4xIH0KKyAgICB7IENTQV9aMjQzLjQtMTk4NS0yIGlzby1pci0xMjIgSVNPNjQ2LUNBMiBjc2E3LTIgY3NJU08xMjJDYW5hZGlhbjIgfQorICAgIHsgQ1NBX1oyNDMuNC0xOTg1LWdyIGlzby1pci0xMjMgY3NJU08xMjNDU0FaMjQzNDE5ODVnciB9CisgICAgeyBJU09fODg1OS02OjE5ODcgaXNvLWlyLTEyNyBJU09fODg1OS02IElTTy04ODU5LTYgRUNNQS0xMTQgQVNNTy03MDgKKyAgICAgIGFyYWJpYyBjc0lTT0xhdGluQXJhYmljIH0KKyAgICB7IElTT184ODU5LTYtRSBjc0lTTzg4NTk2RSBJU08tODg1OS02LUUgfQorICAgIHsgSVNPXzg4NTktNi1JIGNzSVNPODg1OTZJIElTTy04ODU5LTYtSSB9CisgICAgeyBJU09fODg1OS03OjE5ODcgaXNvLWlyLTEyNiBJU09fODg1OS03IElTTy04ODU5LTcgRUxPVF85MjggRUNNQS0xMTgKKyAgICAgIGdyZWVrIGdyZWVrOCBjc0lTT0xhdGluR3JlZWsgfQorICAgIHsgVC4xMDEtRzIgaXNvLWlyLTEyOCBjc0lTTzEyOFQxMDFHMiB9CisgICAgeyBJU09fODg1OS04OjE5ODggaXNvLWlyLTEzOCBJU09fODg1OS04IElTTy04ODU5LTggaGVicmV3CisgICAgICBjc0lTT0xhdGluSGVicmV3IH0KKyAgICB7IElTT184ODU5LTgtRSBjc0lTTzg4NTk4RSBJU08tODg1OS04LUUgfQorICAgIHsgSVNPXzg4NTktOC1JIGNzSVNPODg1OThJIElTTy04ODU5LTgtSSB9CisgICAgeyBDU05fMzY5MTAzIGlzby1pci0xMzkgY3NJU08xMzlDU04zNjkxMDMgfQorICAgIHsgSlVTX0kuQjEuMDAyIGlzby1pci0xNDEgSVNPNjQ2LVlVIGpzIHl1IGNzSVNPMTQxSlVTSUIxMDAyIH0KKyAgICB7IElTT182OTM3LTItYWRkIGlzby1pci0xNDIgY3NJU09UZXh0Q29tbSB9CisgICAgeyBJRUNfUDI3LTEgaXNvLWlyLTE0MyBjc0lTTzE0M0lFQ1AyNzEgfQorICAgIHsgSVNPXzg4NTktNToxOTg4IGlzby1pci0xNDQgSVNPXzg4NTktNSBJU08tODg1OS01IGN5cmlsbGljCisgICAgICBjc0lTT0xhdGluQ3lyaWxsaWMgfQorICAgIHsgSlVTX0kuQjEuMDAzLXNlcmIgaXNvLWlyLTE0NiBzZXJiaWFuIGNzSVNPMTQ2U2VyYmlhbiB9CisgICAgeyBKVVNfSS5CMS4wMDMtbWFjIG1hY2Vkb25pYW4gaXNvLWlyLTE0NyBjc0lTTzE0N01hY2Vkb25pYW4gfQorICAgIHsgSVNPXzg4NTktOToxOTg5IGlzby1pci0xNDggSVNPXzg4NTktOSBJU08tODg1OS05IGxhdGluNSBsNSBjc0lTT0xhdGluNSB9CisgICAgeyBncmVlay1jY2l0dCBpc28taXItMTUwIGNzSVNPMTUwIGNzSVNPMTUwR3JlZWtDQ0lUVCB9CisgICAgeyBOQ19OQzAwLTEwOjgxIGN1YmEgaXNvLWlyLTE1MSBJU082NDYtQ1UgY3NJU08xNTFDdWJhIH0KKyAgICB7IElTT182OTM3LTItMjUgaXNvLWlyLTE1MiBjc0lTTzY5MzdBZGQgfQorICAgIHsgR09TVF8xOTc2OC03NCBTVF9TRVZfMzU4LTg4IGlzby1pci0xNTMgY3NJU08xNTNHT1NUMTk3Njg3NCB9CisgICAgeyBJU09fODg1OS1zdXBwIGlzby1pci0xNTQgbGF0aW4xLTItNSBjc0lTTzg4NTlTdXBwIH0KKyAgICB7IElTT18xMDM2Ny1ib3ggaXNvLWlyLTE1NSBjc0lTTzEwMzY3Qm94IH0KKyAgICB7IElTTy04ODU5LTEwIGlzby1pci0xNTcgbDYgSVNPXzg4NTktMTA6MTk5MiBjc0lTT0xhdGluNiBsYXRpbjYgfQorICAgIHsgbGF0aW4tbGFwIGxhcCBpc28taXItMTU4IGNzSVNPMTU4TGFwIH0KKyAgICB7IEpJU19YMDIxMi0xOTkwIHgwMjEyIGlzby1pci0xNTkgY3NJU08xNTlKSVNYMDIxMjE5OTAgfQorICAgIHsgRFNfMjA4OSBEUzIwODkgSVNPNjQ2LURLIGRrIGNzSVNPNjQ2RGFuaXNoIH0KKyAgICB7IHVzLWRrIGNzVVNESyB9CisgICAgeyBkay11cyBjc0RLVVMgfQorICAgIHsgSklTX1gwMjAxIFgwMjAxIGNzSGFsZldpZHRoS2F0YWthbmEgfQorICAgIHsgS1NDNTYzNiBJU082NDYtS1IgY3NLU0M1NjM2IH0KKyAgICB7IElTTy0xMDY0Ni1VQ1MtMiBjc1VuaWNvZGUgfQorICAgIHsgSVNPLTEwNjQ2LVVDUy00IGNzVUNTNCB9CisgICAgeyBERUMtTUNTIGRlYyBjc0RFQ01DUyB9CisgICAgeyBocC1yb21hbjggcm9tYW44IHI4IGNzSFBSb21hbjggfQorICAgIHsgbWFjaW50b3NoIG1hYyBjc01hY2ludG9zaCB9CisgICAgeyBJQk0wMzcgY3AwMzcgZWJjZGljLWNwLXVzIGViY2RpYy1jcC1jYSBlYmNkaWMtY3Atd3QgZWJjZGljLWNwLW5sCisgICAgICBjc0lCTTAzNyB9CisgICAgeyBJQk0wMzggRUJDRElDLUlOVCBjcDAzOCBjc0lCTTAzOCB9CisgICAgeyBJQk0yNzMgQ1AyNzMgY3NJQk0yNzMgfQorICAgIHsgSUJNMjc0IEVCQ0RJQy1CRSBDUDI3NCBjc0lCTTI3NCB9CisgICAgeyBJQk0yNzUgRUJDRElDLUJSIGNwMjc1IGNzSUJNMjc1IH0KKyAgICB7IElCTTI3NyBFQkNESUMtQ1AtREsgRUJDRElDLUNQLU5PIGNzSUJNMjc3IH0KKyAgICB7IElCTTI3OCBDUDI3OCBlYmNkaWMtY3AtZmkgZWJjZGljLWNwLXNlIGNzSUJNMjc4IH0KKyAgICB7IElCTTI4MCBDUDI4MCBlYmNkaWMtY3AtaXQgY3NJQk0yODAgfQorICAgIHsgSUJNMjgxIEVCQ0RJQy1KUC1FIGNwMjgxIGNzSUJNMjgxIH0KKyAgICB7IElCTTI4NCBDUDI4NCBlYmNkaWMtY3AtZXMgY3NJQk0yODQgfQorICAgIHsgSUJNMjg1IENQMjg1IGViY2RpYy1jcC1nYiBjc0lCTTI4NSB9CisgICAgeyBJQk0yOTAgY3AyOTAgRUJDRElDLUpQLWthbmEgY3NJQk0yOTAgfQorICAgIHsgSUJNMjk3IGNwMjk3IGViY2RpYy1jcC1mciBjc0lCTTI5NyB9CisgICAgeyBJQk00MjAgY3A0MjAgZWJjZGljLWNwLWFyMSBjc0lCTTQyMCB9CisgICAgeyBJQk00MjMgY3A0MjMgZWJjZGljLWNwLWdyIGNzSUJNNDIzIH0KKyAgICB7IElCTTQyNCBjcDQyNCBlYmNkaWMtY3AtaGUgY3NJQk00MjQgfQorICAgIHsgSUJNNDM3IGNwNDM3IDQzNyBjc1BDOENvZGVQYWdlNDM3IH0KKyAgICB7IElCTTUwMCBDUDUwMCBlYmNkaWMtY3AtYmUgZWJjZGljLWNwLWNoIGNzSUJNNTAwIH0KKyAgICB7IElCTTc3NSBjcDc3NSBjc1BDNzc1QmFsdGljIH0KKyAgICB7IElCTTg1MCBjcDg1MCA4NTAgY3NQQzg1ME11bHRpbGluZ3VhbCB9CisgICAgeyBJQk04NTEgY3A4NTEgODUxIGNzSUJNODUxIH0KKyAgICB7IElCTTg1MiBjcDg1MiA4NTIgY3NQQ3A4NTIgfQorICAgIHsgSUJNODU1IGNwODU1IDg1NSBjc0lCTTg1NSB9CisgICAgeyBJQk04NTcgY3A4NTcgODU3IGNzSUJNODU3IH0KKyAgICB7IElCTTg2MCBjcDg2MCA4NjAgY3NJQk04NjAgfQorICAgIHsgSUJNODYxIGNwODYxIDg2MSBjcC1pcyBjc0lCTTg2MSB9CisgICAgeyBJQk04NjIgY3A4NjIgODYyIGNzUEM4NjJMYXRpbkhlYnJldyB9CisgICAgeyBJQk04NjMgY3A4NjMgODYzIGNzSUJNODYzIH0KKyAgICB7IElCTTg2NCBjcDg2NCBjc0lCTTg2NCB9CisgICAgeyBJQk04NjUgY3A4NjUgODY1IGNzSUJNODY1IH0KKyAgICB7IElCTTg2NiBjcDg2NiA4NjYgY3NJQk04NjYgfQorICAgIHsgSUJNODY4IENQODY4IGNwLWFyIGNzSUJNODY4IH0KKyAgICB7IElCTTg2OSBjcDg2OSA4NjkgY3AtZ3IgY3NJQk04NjkgfQorICAgIHsgSUJNODcwIENQODcwIGViY2RpYy1jcC1yb2VjZSBlYmNkaWMtY3AteXUgY3NJQk04NzAgfQorICAgIHsgSUJNODcxIENQODcxIGViY2RpYy1jcC1pcyBjc0lCTTg3MSB9CisgICAgeyBJQk04ODAgY3A4ODAgRUJDRElDLUN5cmlsbGljIGNzSUJNODgwIH0KKyAgICB7IElCTTg5MSBjcDg5MSBjc0lCTTg5MSB9CisgICAgeyBJQk05MDMgY3A5MDMgY3NJQk05MDMgfQorICAgIHsgSUJNOTA0IGNwOTA0IDkwNCBjc0lCQk05MDQgfQorICAgIHsgSUJNOTA1IENQOTA1IGViY2RpYy1jcC10ciBjc0lCTTkwNSB9CisgICAgeyBJQk05MTggQ1A5MTggZWJjZGljLWNwLWFyMiBjc0lCTTkxOCB9CisgICAgeyBJQk0xMDI2IENQMTAyNiBjc0lCTTEwMjYgfQorICAgIHsgRUJDRElDLUFULURFIGNzSUJNRUJDRElDQVRERSB9CisgICAgeyBFQkNESUMtQVQtREUtQSBjc0VCQ0RJQ0FUREVBIH0KKyAgICB7IEVCQ0RJQy1DQS1GUiBjc0VCQ0RJQ0NBRlIgfQorICAgIHsgRUJDRElDLURLLU5PIGNzRUJDRElDREtOTyB9CisgICAgeyBFQkNESUMtREstTk8tQSBjc0VCQ0RJQ0RLTk9BIH0KKyAgICB7IEVCQ0RJQy1GSS1TRSBjc0VCQ0RJQ0ZJU0UgfQorICAgIHsgRUJDRElDLUZJLVNFLUEgY3NFQkNESUNGSVNFQSB9CisgICAgeyBFQkNESUMtRlIgY3NFQkNESUNGUiB9CisgICAgeyBFQkNESUMtSVQgY3NFQkNESUNJVCB9CisgICAgeyBFQkNESUMtUFQgY3NFQkNESUNQVCB9CisgICAgeyBFQkNESUMtRVMgY3NFQkNESUNFUyB9CisgICAgeyBFQkNESUMtRVMtQSBjc0VCQ0RJQ0VTQSB9CisgICAgeyBFQkNESUMtRVMtUyBjc0VCQ0RJQ0VTUyB9CisgICAgeyBFQkNESUMtVUsgY3NFQkNESUNVSyB9CisgICAgeyBFQkNESUMtVVMgY3NFQkNESUNVUyB9CisgICAgeyBVTktOT1dOLThCSVQgY3NVbmtub3duOEJpVCB9CisgICAgeyBNTkVNT05JQyBjc01uZW1vbmljIH0KKyAgICB7IE1ORU0gY3NNbmVtIH0KKyAgICB7IFZJU0NJSSBjc1ZJU0NJSSB9CisgICAgeyBWSVFSIGNzVklRUiB9CisgICAgeyBLT0k4LVIgY3NLT0k4UiB9CisgICAgeyBJQk0wMDg1OCBDQ1NJRDAwODU4IENQMDA4NTggUEMtTXVsdGlsaW5ndWFsLTg1MCtldXJvIH0KKyAgICB7IElCTTAwOTI0IENDU0lEMDA5MjQgQ1AwMDkyNCBlYmNkaWMtTGF0aW45LS1ldXJvIH0KKyAgICB7IElCTTAxMTQwIENDU0lEMDExNDAgQ1AwMTE0MCBlYmNkaWMtdXMtMzcrZXVybyB9CisgICAgeyBJQk0wMTE0MSBDQ1NJRDAxMTQxIENQMDExNDEgZWJjZGljLWRlLTI3MytldXJvIH0KKyAgICB7IElCTTAxMTQyIENDU0lEMDExNDIgQ1AwMTE0MiBlYmNkaWMtZGstMjc3K2V1cm8gZWJjZGljLW5vLTI3NytldXJvIH0KKyAgICB7IElCTTAxMTQzIENDU0lEMDExNDMgQ1AwMTE0MyBlYmNkaWMtZmktMjc4K2V1cm8gZWJjZGljLXNlLTI3OCtldXJvIH0KKyAgICB7IElCTTAxMTQ0IENDU0lEMDExNDQgQ1AwMTE0NCBlYmNkaWMtaXQtMjgwK2V1cm8gfQorICAgIHsgSUJNMDExNDUgQ0NTSUQwMTE0NSBDUDAxMTQ1IGViY2RpYy1lcy0yODQrZXVybyB9CisgICAgeyBJQk0wMTE0NiBDQ1NJRDAxMTQ2IENQMDExNDYgZWJjZGljLWdiLTI4NStldXJvIH0KKyAgICB7IElCTTAxMTQ3IENDU0lEMDExNDcgQ1AwMTE0NyBlYmNkaWMtZnItMjk3K2V1cm8gfQorICAgIHsgSUJNMDExNDggQ0NTSUQwMTE0OCBDUDAxMTQ4IGViY2RpYy1pbnRlcm5hdGlvbmFsLTUwMCtldXJvIH0KKyAgICB7IElCTTAxMTQ5IENDU0lEMDExNDkgQ1AwMTE0OSBlYmNkaWMtaXMtODcxK2V1cm8gfQorICAgIHsgSUJNMTA0NyBJQk0tMTA0NyB9CisgICAgeyBQVENQMTU0IGNzUFRDUDE1NCBQVDE1NCBDUDE1NCBDeXJpbGxpYy1Bc2lhbiB9CisgICAgeyBBbWlnYS0xMjUxIEFtaTEyNTEgQW1pZ2ExMjUxIEFtaS0xMjUxIH0KKyAgICB7IFVOSUNPREUtMS0xIGNzVW5pY29kZTExIH0KKyAgICB7IENFU1UtOCBjc0NFU1UtOCB9CisgICAgeyBCT0NVLTEgY3NCT0NVLTEgfQorICAgIHsgVU5JQ09ERS0xLTEtVVRGLTcgY3NVbmljb2RlMTFVVEY3IH0KKyAgICB7IElTTy04ODU5LTE0IGlzby1pci0xOTkgSVNPXzg4NTktMTQ6MTk5OCBJU09fODg1OS0xNCBsYXRpbjggaXNvLWNlbHRpYworICAgICAgbDggfQorICAgIHsgSVNPLTg4NTktMTUgSVNPXzg4NTktMTUgTGF0aW4tOSB9CisgICAgeyBJU08tODg1OS0xNiBpc28taXItMjI2IElTT184ODU5LTE2OjIwMDEgSVNPXzg4NTktMTYgbGF0aW4xMCBsMTAgfQorICAgIHsgR0JLIENQOTM2IE1TOTM2IHdpbmRvd3MtOTM2IH0KKyAgICB7IEpJU19FbmNvZGluZyBjc0pJU0VuY29kaW5nIH0KKyAgICB7IFNoaWZ0X0pJUyBNU19LYW5qaSBjc1NoaWZ0SklTIFNoaWZ0SklTIFNoaWZ0LUpJUyB9CisgICAgeyBFeHRlbmRlZF9VTklYX0NvZGVfUGFja2VkX0Zvcm1hdF9mb3JfSmFwYW5lc2UgY3NFVUNQa2RGbXRKYXBhbmVzZQorICAgICAgRVVDLUpQIH0KKyAgICB7IEV4dGVuZGVkX1VOSVhfQ29kZV9GaXhlZF9XaWR0aF9mb3JfSmFwYW5lc2UgY3NFVUNGaXhXaWRKYXBhbmVzZSB9CisgICAgeyBJU08tMTA2NDYtVUNTLUJhc2ljIGNzVW5pY29kZUFTQ0lJIH0KKyAgICB7IElTTy0xMDY0Ni1Vbmljb2RlLUxhdGluMSBjc1VuaWNvZGVMYXRpbjEgSVNPLTEwNjQ2IH0KKyAgICB7IElTTy1Vbmljb2RlLUlCTS0xMjYxIGNzVW5pY29kZUlCTTEyNjEgfQorICAgIHsgSVNPLVVuaWNvZGUtSUJNLTEyNjggY3NVbmljb2RlSUJNMTI2OCB9CisgICAgeyBJU08tVW5pY29kZS1JQk0tMTI3NiBjc1VuaWNvZGVJQk0xMjc2IH0KKyAgICB7IElTTy1Vbmljb2RlLUlCTS0xMjY0IGNzVW5pY29kZUlCTTEyNjQgfQorICAgIHsgSVNPLVVuaWNvZGUtSUJNLTEyNjUgY3NVbmljb2RlSUJNMTI2NSB9CisgICAgeyBJU08tODg1OS0xLVdpbmRvd3MtMy4wLUxhdGluLTEgY3NXaW5kb3dzMzBMYXRpbjEgfQorICAgIHsgSVNPLTg4NTktMS1XaW5kb3dzLTMuMS1MYXRpbi0xIGNzV2luZG93czMxTGF0aW4xIH0KKyAgICB7IElTTy04ODU5LTItV2luZG93cy1MYXRpbi0yIGNzV2luZG93czMxTGF0aW4yIH0KKyAgICB7IElTTy04ODU5LTktV2luZG93cy1MYXRpbi01IGNzV2luZG93czMxTGF0aW41IH0KKyAgICB7IEFkb2JlLVN0YW5kYXJkLUVuY29kaW5nIGNzQWRvYmVTdGFuZGFyZEVuY29kaW5nIH0KKyAgICB7IFZlbnR1cmEtVVMgY3NWZW50dXJhVVMgfQorICAgIHsgVmVudHVyYS1JbnRlcm5hdGlvbmFsIGNzVmVudHVyYUludGVybmF0aW9uYWwgfQorICAgIHsgUEM4LURhbmlzaC1Ob3J3ZWdpYW4gY3NQQzhEYW5pc2hOb3J3ZWdpYW4gfQorICAgIHsgUEM4LVR1cmtpc2ggY3NQQzhUdXJraXNoIH0KKyAgICB7IElCTS1TeW1ib2xzIGNzSUJNU3ltYm9scyB9CisgICAgeyBJQk0tVGhhaSBjc0lCTVRoYWkgfQorICAgIHsgSFAtTGVnYWwgY3NIUExlZ2FsIH0KKyAgICB7IEhQLVBpLWZvbnQgY3NIUFBpRm9udCB9CisgICAgeyBIUC1NYXRoOCBjc0hQTWF0aDggfQorICAgIHsgQWRvYmUtU3ltYm9sLUVuY29kaW5nIGNzSFBQU01hdGggfQorICAgIHsgSFAtRGVza1RvcCBjc0hQRGVza3RvcCB9CisgICAgeyBWZW50dXJhLU1hdGggY3NWZW50dXJhTWF0aCB9CisgICAgeyBNaWNyb3NvZnQtUHVibGlzaGluZyBjc01pY3Jvc29mdFB1Ymxpc2hpbmcgfQorICAgIHsgV2luZG93cy0zMUogY3NXaW5kb3dzMzFKIH0KKyAgICB7IEdCMjMxMiBjc0dCMjMxMiB9CisgICAgeyBCaWc1IGNzQmlnNSB9Cit9CisKK3Byb2MgdGNsX2VuY29kaW5nIHtlbmN9IHsKKyAgICBnbG9iYWwgZW5jb2RpbmdfYWxpYXNlcyB0Y2xfZW5jb2RpbmdfY2FjaGUKKyAgICBpZiB7W2luZm8gZXhpc3RzIHRjbF9lbmNvZGluZ19jYWNoZSgkZW5jKV19IHsKKwlyZXR1cm4gJHRjbF9lbmNvZGluZ19jYWNoZSgkZW5jKQorICAgIH0KKyAgICBzZXQgbmFtZXMgW2VuY29kaW5nIG5hbWVzXQorICAgIHNldCBsY25hbWVzIFtzdHJpbmcgdG9sb3dlciAkbmFtZXNdCisgICAgc2V0IGVuYyBbc3RyaW5nIHRvbG93ZXIgJGVuY10KKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGxjbmFtZXMgJGVuY10KKyAgICBpZiB7JGkgPCAwfSB7CisJIyBsb29rIGZvciAiaXNvbm5uIiBpbnN0ZWFkIG9mICJpc28tbm5uIiBvciAiaXNvX25ubiIKKwlpZiB7W3JlZ3N1YiB7Xihpc298Y3B8aWJtfGppcylbLV9dfSAkZW5jIHtcMX0gZW5jeF19IHsKKwkgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRsY25hbWVzICRlbmN4XQorCX0KKyAgICB9CisgICAgaWYgeyRpIDwgMH0geworCWZvcmVhY2ggbCAkZW5jb2RpbmdfYWxpYXNlcyB7CisJICAgIHNldCBsbCBbc3RyaW5nIHRvbG93ZXIgJGxdCisJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGxsICRlbmNdIDwgMH0gY29udGludWUKKwkgICAgIyBsb29rIHRocm91Z2ggdGhlIGFsaWFzZXMgZm9yIG9uZSB0aGF0IHRjbCBrbm93cyBhYm91dAorCSAgICBmb3JlYWNoIGUgJGxsIHsKKwkJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRsY25hbWVzICRlXQorCQlpZiB7JGkgPCAwfSB7CisJCSAgICBpZiB7W3JlZ3N1YiB7Xihpc298Y3B8aWJtfGppcylbLV9dfSAkZSB7XDF9IGV4XX0geworCQkJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRsY25hbWVzICRleF0KKwkJICAgIH0KKwkJfQorCQlpZiB7JGkgPj0gMH0gYnJlYWsKKwkgICAgfQorCSAgICBicmVhaworCX0KKyAgICB9CisgICAgc2V0IHRjbGVuYyB7fQorICAgIGlmIHskaSA+PSAwfSB7CisJc2V0IHRjbGVuYyBbbGluZGV4ICRuYW1lcyAkaV0KKyAgICB9CisgICAgc2V0IHRjbF9lbmNvZGluZ19jYWNoZSgkZW5jKSAkdGNsZW5jCisgICAgcmV0dXJuICR0Y2xlbmMKK30KKworcHJvYyBnaXRhdHRyIHtwYXRoIGF0dHIgZGVmYXVsdH0geworICAgIGdsb2JhbCBwYXRoX2F0dHJfY2FjaGUKKyAgICBpZiB7W2luZm8gZXhpc3RzIHBhdGhfYXR0cl9jYWNoZSgkYXR0ciwkcGF0aCldfSB7CisJc2V0IHIgJHBhdGhfYXR0cl9jYWNoZSgkYXR0ciwkcGF0aCkKKyAgICB9IGVsc2UgeworCXNldCByICJ1bnNwZWNpZmllZCIKKwlpZiB7IVtjYXRjaCB7c2V0IGxpbmUgW2V4ZWMgZ2l0IGNoZWNrLWF0dHIgJGF0dHIgLS0gJHBhdGhdfV19IHsKKwkgICAgcmVnZXhwICIoLiopOiAkYXR0cjogKC4qKSIgJGxpbmUgbSBmIHIKKwl9CisJc2V0IHBhdGhfYXR0cl9jYWNoZSgkYXR0ciwkcGF0aCkgJHIKKyAgICB9CisgICAgaWYgeyRyIGVxICJ1bnNwZWNpZmllZCJ9IHsKKwlyZXR1cm4gJGRlZmF1bHQKKyAgICB9CisgICAgcmV0dXJuICRyCit9CisKK3Byb2MgY2FjaGVfZ2l0YXR0ciB7YXR0ciBwYXRobGlzdH0geworICAgIGdsb2JhbCBwYXRoX2F0dHJfY2FjaGUKKyAgICBzZXQgbmV3bGlzdCB7fQorICAgIGZvcmVhY2ggcGF0aCAkcGF0aGxpc3QgeworCWlmIHshW2luZm8gZXhpc3RzIHBhdGhfYXR0cl9jYWNoZSgkYXR0ciwkcGF0aCldfSB7CisJICAgIGxhcHBlbmQgbmV3bGlzdCAkcGF0aAorCX0KKyAgICB9CisgICAgc2V0IGxpbSAxMDAwCisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dID09ICJ3aW4zMiJ9IHsKKwkjIHdpbmRvd3MgaGFzIGEgMzJrIGxpbWl0IG9uIHRoZSBhcmd1bWVudHMgdG8gYSBjb21tYW5kLi4uCisJc2V0IGxpbSAzMAorICAgIH0KKyAgICB3aGlsZSB7JG5ld2xpc3QgbmUge319IHsKKwlzZXQgaGVhZCBbbHJhbmdlICRuZXdsaXN0IDAgW2V4cHIgeyRsaW0gLSAxfV1dCisJc2V0IG5ld2xpc3QgW2xyYW5nZSAkbmV3bGlzdCAkbGltIGVuZF0KKwlpZiB7IVtjYXRjaCB7c2V0IHJsaXN0IFtldmFsIGV4ZWMgZ2l0IGNoZWNrLWF0dHIgJGF0dHIgLS0gJGhlYWRdfV19IHsKKwkgICAgZm9yZWFjaCByb3cgW3NwbGl0ICRybGlzdCAiXG4iXSB7CisJCWlmIHtbcmVnZXhwICIoLiopOiAkYXR0cjogKC4qKSIgJHJvdyBtIHBhdGggdmFsdWVdfSB7CisJCSAgICBpZiB7W3N0cmluZyBpbmRleCAkcGF0aCAwXSBlcSAiXCIifSB7CisJCQlzZXQgcGF0aCBbZW5jb2RpbmcgY29udmVydGZyb20gW2xpbmRleCAkcGF0aCAwXV0KKwkJICAgIH0KKwkJICAgIHNldCBwYXRoX2F0dHJfY2FjaGUoJGF0dHIsJHBhdGgpICR2YWx1ZQorCQl9CisJICAgIH0KKwl9CisgICAgfQorfQorCitwcm9jIGdldF9wYXRoX2VuY29kaW5nIHtwYXRofSB7CisgICAgZ2xvYmFsIGd1aV9lbmNvZGluZyBwZXJmaWxlX2F0dHJzCisgICAgc2V0IHRjbF9lbmMgJGd1aV9lbmNvZGluZworICAgIGlmIHskcGF0aCBuZSB7fSAmJiAkcGVyZmlsZV9hdHRyc30geworCXNldCBlbmMyIFt0Y2xfZW5jb2RpbmcgW2dpdGF0dHIgJHBhdGggZW5jb2RpbmcgJHRjbF9lbmNdXQorCWlmIHskZW5jMiBuZSB7fX0geworCSAgICBzZXQgdGNsX2VuYyAkZW5jMgorCX0KKyAgICB9CisgICAgcmV0dXJuICR0Y2xfZW5jCit9CisKKyMjIEZvciBtc2djYXQgbG9hZGluZywgZmlyc3QgbG9jYXRlIHRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb24uCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihHSVRLX01TR1NESVIpXSB9IHsKKyAgICAjIyBNc2dzZGlyIHdhcyBtYW51YWxseSBzZXQgaW4gdGhlIGVudmlyb25tZW50LgorICAgIHNldCBnaXRrX21zZ3NkaXIgJDo6ZW52KEdJVEtfTVNHU0RJUikKK30gZWxzZSB7CisgICAgIyMgTGV0J3MgZ3Vlc3MgdGhlIHByZWZpeCBmcm9tIGFyZ3YwLgorICAgIHNldCBnaXRrX3ByZWZpeCBbZmlsZSBkaXJuYW1lIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplICRhcmd2MF1dXQorICAgIHNldCBnaXRrX2xpYmRpciBbZmlsZSBqb2luICRnaXRrX3ByZWZpeCBzaGFyZSBnaXRrIGxpYl0KKyAgICBzZXQgZ2l0a19tc2dzZGlyIFtmaWxlIGpvaW4gJGdpdGtfbGliZGlyIG1zZ3NdCisgICAgdW5zZXQgZ2l0a19wcmVmaXgKK30KKworIyMgSW50ZXJuYXRpb25hbGl6YXRpb24gKGkxOG4pIHRocm91Z2ggbXNnY2F0IGFuZCBnZXR0ZXh0LiBTZWUKKyMjIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZXR0ZXh0L21hbnVhbC9odG1sX25vZGUvVGNsLmh0bWwKK3BhY2thZ2UgcmVxdWlyZSBtc2djYXQKK25hbWVzcGFjZSBpbXBvcnQgOjptc2djYXQ6Om1jCisjIyBBbmQgZXZlbnR1YWxseSBsb2FkIHRoZSBhY3R1YWwgbWVzc2FnZSBjYXRhbG9nCis6Om1zZ2NhdDo6bWNsb2FkICRnaXRrX21zZ3NkaXIKKworIyBGaXJzdCBjaGVjayB0aGF0IFRjbC9UayBpcyByZWNlbnQgZW5vdWdoCitpZiB7W2NhdGNoIHtwYWNrYWdlIHJlcXVpcmUgVGsgOC40fSBlcnJdfSB7CisgICAgc2hvd19lcnJvciB7fSAuIFttYyAiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG5cCisJCQkgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiJdCisgICAgZXhpdCAxCit9CisKKyMgb24gT1NYIGJyaW5nIHRoZSBjdXJyZW50IFdpc2ggcHJvY2VzcyB3aW5kb3cgdG8gZnJvbnQKK2lmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAiYXF1YSJ9IHsKKyAgICBleGVjIG9zYXNjcmlwdCAtZSBbZm9ybWF0IHsKKyAgICAgICAgdGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIKKyAgICAgICAgICAgIHNldCBmcm9udG1vc3Qgb2YgcHJvY2Vzc2VzIHdob3NlIHVuaXggaWQgaXMgJWQgdG8gdHJ1ZQorICAgICAgICBlbmQgdGVsbAorICAgIH0gW3BpZF0gXQorfQorCisjIFVuc2V0IEdJVF9UUkFDRSB2YXIgaWYgc2V0CitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihHSVRfVFJBQ0UpXSB9IHsKKyAgICB1bnNldCA6OmVudihHSVRfVFJBQ0UpCit9CisKKyMgZGVmYXVsdHMuLi4KK3NldCB3cmNvbWNtZCAiZ2l0IGRpZmYtdHJlZSAtLXN0ZGluIC1wIC0tcHJldHR5PWVtYWlsIgorCitzZXQgZ2l0ZW5jb2Rpbmcge30KK2NhdGNoIHsKKyAgICBzZXQgZ2l0ZW5jb2RpbmcgW2V4ZWMgZ2l0IGNvbmZpZyAtLWdldCBpMThuLmNvbW1pdGVuY29kaW5nXQorfQorY2F0Y2ggeworICAgIHNldCBnaXRlbmNvZGluZyBbZXhlYyBnaXQgY29uZmlnIC0tZ2V0IGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmddCit9CitpZiB7JGdpdGVuY29kaW5nID09ICIifSB7CisgICAgc2V0IGdpdGVuY29kaW5nICJ1dGYtOCIKK30KK3NldCB0Y2xlbmNvZGluZyBbdGNsX2VuY29kaW5nICRnaXRlbmNvZGluZ10KK2lmIHskdGNsZW5jb2RpbmcgPT0ge319IHsKKyAgICBwdXRzIHN0ZGVyciAiV2FybmluZzogZW5jb2RpbmcgJGdpdGVuY29kaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgVGNsL1RrIgorfQorCitzZXQgZ3VpX2VuY29kaW5nIFtlbmNvZGluZyBzeXN0ZW1dCitjYXRjaCB7CisgICAgc2V0IGVuYyBbZXhlYyBnaXQgY29uZmlnIC0tZ2V0IGd1aS5lbmNvZGluZ10KKyAgICBpZiB7JGVuYyBuZSB7fX0geworCXNldCB0Y2xlbmMgW3RjbF9lbmNvZGluZyAkZW5jXQorCWlmIHskdGNsZW5jIG5lIHt9fSB7CisJICAgIHNldCBndWlfZW5jb2RpbmcgJHRjbGVuYworCX0gZWxzZSB7CisJICAgIHB1dHMgc3RkZXJyICJXYXJuaW5nOiBlbmNvZGluZyAkZW5jIGlzIG5vdCBzdXBwb3J0ZWQgYnkgVGNsL1RrIgorCX0KKyAgICB9Cit9CisKK3NldCBsb2dfc2hvd3Jvb3QgdHJ1ZQorY2F0Y2ggeworICAgIHNldCBsb2dfc2hvd3Jvb3QgW2V4ZWMgZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgbG9nLnNob3dyb290XQorfQorCitpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgImFxdWEifSB7CisgICAgc2V0IG1haW5mb250IHt7THVjaWRhIEdyYW5kZX0gOX0KKyAgICBzZXQgdGV4dGZvbnQge01vbmFjbyA5fQorICAgIHNldCB1aWZvbnQge3tMdWNpZGEgR3JhbmRlfSA5IGJvbGR9Cit9IGVsc2VpZiB7IVtjYXRjaCB7Ojp0azo6cGtnY29uZmlnIGdldCBmb250c3lzdGVtfSB4ZnRdICYmICR4ZnQgZXEgInhmdCJ9IHsKKyAgICAjIGZvbnRjb25maWchCisgICAgc2V0IG1haW5mb250IHtzYW5zIDl9CisgICAgc2V0IHRleHRmb250IHttb25vc3BhY2UgOX0KKyAgICBzZXQgdWlmb250IHtzYW5zIDkgYm9sZH0KK30gZWxzZSB7CisgICAgc2V0IG1haW5mb250IHtIZWx2ZXRpY2EgOX0KKyAgICBzZXQgdGV4dGZvbnQge0NvdXJpZXIgOX0KKyAgICBzZXQgdWlmb250IHtIZWx2ZXRpY2EgOSBib2xkfQorfQorc2V0IHRhYnN0b3AgOAorc2V0IGZpbmRtZXJnZWZpbGVzIDAKK3NldCBtYXhncmFwaHBjdCA1MAorc2V0IG1heHdpZHRoIDE2CitzZXQgcmV2bGlzdG9yZGVyIDAKK3NldCBmYXN0ZGF0ZSAwCitzZXQgdXBhcnJvd2xlbiA1CitzZXQgZG93bmFycm93bGVuIDUKK3NldCBtaW5nYXBsZW4gMTAwCitzZXQgY21pdG1vZGUgInBhdGNoIgorc2V0IHdyYXBjb21tZW50ICJub25lIgorc2V0IHNob3duZWFydGFncyAxCitzZXQgaGlkZXJlbW90ZXMgMAorc2V0IG1heHJlZnMgMjAKK3NldCB2aXNpYmxlcmVmcyB7Im1hc3RlciJ9CitzZXQgbWF4bGluZWxlbiAyMDAKK3NldCBzaG93bG9jYWxjaGFuZ2VzIDEKK3NldCBsaW1pdGRpZmZzIDEKK3NldCBkYXRldGltZWZvcm1hdCAiJVktJW0tJWQgJUg6JU06JVMiCitzZXQgYXV0b3NlbGVjdCAxCitzZXQgYXV0b3NlbGxlbiA0MAorc2V0IHBlcmZpbGVfYXR0cnMgMAorc2V0IHdhbnRfdHRrIDEKKworaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJhcXVhIn0geworICAgIHNldCBleHRkaWZmdG9vbCAib3BlbmRpZmYiCit9IGVsc2UgeworICAgIHNldCBleHRkaWZmdG9vbCAibWVsZCIKK30KKworc2V0IGNvbG9ycyB7IiMwMGZmMDAiIHJlZCBibHVlIG1hZ2VudGEgZGFya2dyZXkgYnJvd24gb3JhbmdlfQoraWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiJ9IHsKKyAgICBzZXQgdWljb2xvciBTeXN0ZW1CdXR0b25GYWNlCisgICAgc2V0IHVpZmdjb2xvciBTeXN0ZW1CdXR0b25UZXh0CisgICAgc2V0IHVpZmdkaXNhYmxlZGNvbG9yIFN5c3RlbURpc2FibGVkVGV4dAorICAgIHNldCBiZ2NvbG9yIFN5c3RlbVdpbmRvdworICAgIHNldCBmZ2NvbG9yIFN5c3RlbVdpbmRvd1RleHQKKyAgICBzZXQgc2VsZWN0Ymdjb2xvciBTeXN0ZW1IaWdobGlnaHQKKyAgICBzZXQgd2ViX2Jyb3dzZXIgImNtZCAvYyBzdGFydCIKK30gZWxzZSB7CisgICAgc2V0IHVpY29sb3IgZ3JleTg1CisgICAgc2V0IHVpZmdjb2xvciBibGFjaworICAgIHNldCB1aWZnZGlzYWJsZWRjb2xvciAiIzk5OSIKKyAgICBzZXQgYmdjb2xvciB3aGl0ZQorICAgIHNldCBmZ2NvbG9yIGJsYWNrCisgICAgc2V0IHNlbGVjdGJnY29sb3IgZ3JheTg1CisgICAgaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJhcXVhIn0geworCXNldCB3ZWJfYnJvd3NlciAib3BlbiIKKyAgICB9IGVsc2UgeworCXNldCB3ZWJfYnJvd3NlciAieGRnLW9wZW4iCisgICAgfQorfQorc2V0IGRpZmZjb2xvcnMge3JlZCAiIzAwYTAwMCIgYmx1ZX0KK3NldCBkaWZmY29udGV4dCAzCitzZXQgbWVyZ2Vjb2xvcnMge3JlZCBibHVlICIjMDBmZjAwIiBwdXJwbGUgYnJvd24gIiMwMDkwOTAiIG1hZ2VudGEgIiM4MDgwMDAiICIjMDA5MDAwIiAiI2ZmMDA4MCIgY3lhbiAiI2IwNzA3MCIgIiM3MGIwZjAiICIjNzBmMGIwIiAiI2YwYjA3MCIgIiNmZjcwYjAifQorc2V0IGlnbm9yZXNwYWNlIDAKK3NldCB3b3JkZGlmZiAiIgorc2V0IG1hcmtiZ2NvbG9yICIjZTBlMGZmIgorCitzZXQgaGVhZGJnY29sb3IgIiMwMGZmMDAiCitzZXQgaGVhZGZnY29sb3IgYmxhY2sKK3NldCBoZWFkb3V0bGluZWNvbG9yIGJsYWNrCitzZXQgcmVtb3RlYmdjb2xvciAjZmZkZGFhCitzZXQgdGFnYmdjb2xvciB5ZWxsb3cKK3NldCB0YWdmZ2NvbG9yIGJsYWNrCitzZXQgdGFnb3V0bGluZWNvbG9yIGJsYWNrCitzZXQgcmVmbGluZWNvbG9yIGJsYWNrCitzZXQgZmlsZXNlcGJnY29sb3IgI2FhYWFhYQorc2V0IGZpbGVzZXBmZ2NvbG9yIGJsYWNrCitzZXQgbGluZWhvdmVyYmdjb2xvciAjZmZmZjgwCitzZXQgbGluZWhvdmVyZmdjb2xvciBibGFjaworc2V0IGxpbmVob3Zlcm91dGxpbmVjb2xvciBibGFjaworc2V0IG1haW5oZWFkY2lyY2xlY29sb3IgeWVsbG93CitzZXQgd29ya2luZ2ZpbGVzY2lyY2xlY29sb3IgcmVkCitzZXQgaW5kZXhjaXJjbGVjb2xvciAiIzAwZmYwMCIKK3NldCBjaXJjbGVjb2xvcnMge3doaXRlIGJsdWUgZ3JheSBibHVlIGJsdWV9CitzZXQgbGlua2ZnY29sb3IgYmx1ZQorc2V0IGNpcmNsZW91dGxpbmVjb2xvciAkZmdjb2xvcgorc2V0IGZvdW5kYmdjb2xvciB5ZWxsb3cKK3NldCBjdXJyZW50c2VhcmNoaGl0Ymdjb2xvciBvcmFuZ2UKKworIyBidXR0b24gZm9yIHBvcHBpbmcgdXAgY29udGV4dCBtZW51cworaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJhcXVhIn0geworICAgIHNldCBjdHhidXQgPEJ1dHRvbi0yPgorfSBlbHNlIHsKKyAgICBzZXQgY3R4YnV0IDxCdXR0b24tMz4KK30KKworY2F0Y2ggeworICAgICMgZm9sbG93IHRoZSBYREcgYmFzZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiBieSBkZWZhdWx0LiBTZWUKKyAgICAjIGh0dHA6Ly9zdGFuZGFyZHMuZnJlZWRlc2t0b3Aub3JnL2Jhc2VkaXItc3BlYy9iYXNlZGlyLXNwZWMtbGF0ZXN0Lmh0bWwKKyAgICBpZiB7W2luZm8gZXhpc3RzIGVudihYREdfQ09ORklHX0hPTUUpXSAmJiAkZW52KFhER19DT05GSUdfSE9NRSkgbmUgIiJ9IHsKKwkjIFhER19DT05GSUdfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQKKwlzZXQgY29uZmlnX2ZpbGUgW2ZpbGUgam9pbiAkZW52KFhER19DT05GSUdfSE9NRSkgZ2l0IGdpdGtdCisJc2V0IGNvbmZpZ19maWxlX3RtcCBbZmlsZSBqb2luICRlbnYoWERHX0NPTkZJR19IT01FKSBnaXQgZ2l0ay10bXBdCisgICAgfSBlbHNlIHsKKwkjIGRlZmF1bHQgWERHX0NPTkZJR19IT01FCisJc2V0IGNvbmZpZ19maWxlICJ+Ly5jb25maWcvZ2l0L2dpdGsiCisJc2V0IGNvbmZpZ19maWxlX3RtcCAifi8uY29uZmlnL2dpdC9naXRrLXRtcCIKKyAgICB9CisgICAgaWYgeyFbZmlsZSBleGlzdHMgJGNvbmZpZ19maWxlXX0geworCSMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdXNlIHRoZSBvbGQgY29uZmlnIGZpbGUgaWYgaXQgZXhpc3RzCisJaWYge1tmaWxlIGV4aXN0cyAifi8uZ2l0ayJdfSB7CisJICAgIHNldCBjb25maWdfZmlsZSAifi8uZ2l0ayIKKwkgICAgc2V0IGNvbmZpZ19maWxlX3RtcCAifi8uZ2l0ay10bXAiCisJfSBlbHNlaWYgeyFbZmlsZSBleGlzdHMgW2ZpbGUgZGlybmFtZSAkY29uZmlnX2ZpbGVdXX0geworCSAgICBmaWxlIG1rZGlyIFtmaWxlIGRpcm5hbWUgJGNvbmZpZ19maWxlXQorCX0KKyAgICB9CisgICAgc291cmNlICRjb25maWdfZmlsZQorfQorY29uZmlnX2NoZWNrX3RtcF9leGlzdHMgNTAKKworc2V0IGNvbmZpZ192YXJpYWJsZXMgeworICAgIG1haW5mb250IHRleHRmb250IHVpZm9udCB0YWJzdG9wIGZpbmRtZXJnZWZpbGVzIG1heGdyYXBocGN0IG1heHdpZHRoCisgICAgY21pdG1vZGUgd3JhcGNvbW1lbnQgYXV0b3NlbGVjdCBhdXRvc2VsbGVuIHNob3duZWFydGFncyBtYXhyZWZzIHZpc2libGVyZWZzCisgICAgaGlkZXJlbW90ZXMgc2hvd2xvY2FsY2hhbmdlcyBkYXRldGltZWZvcm1hdCBsaW1pdGRpZmZzIHVpY29sb3Igd2FudF90dGsKKyAgICBiZ2NvbG9yIGZnY29sb3IgdWlmZ2NvbG9yIHVpZmdkaXNhYmxlZGNvbG9yIGNvbG9ycyBkaWZmY29sb3JzIG1lcmdlY29sb3JzCisgICAgbWFya2JnY29sb3IgZGlmZmNvbnRleHQgc2VsZWN0Ymdjb2xvciBmb3VuZGJnY29sb3IgY3VycmVudHNlYXJjaGhpdGJnY29sb3IKKyAgICBleHRkaWZmdG9vbCBwZXJmaWxlX2F0dHJzIGhlYWRiZ2NvbG9yIGhlYWRmZ2NvbG9yIGhlYWRvdXRsaW5lY29sb3IKKyAgICByZW1vdGViZ2NvbG9yIHRhZ2JnY29sb3IgdGFnZmdjb2xvciB0YWdvdXRsaW5lY29sb3IgcmVmbGluZWNvbG9yCisgICAgZmlsZXNlcGJnY29sb3IgZmlsZXNlcGZnY29sb3IgbGluZWhvdmVyYmdjb2xvciBsaW5laG92ZXJmZ2NvbG9yCisgICAgbGluZWhvdmVyb3V0bGluZWNvbG9yIG1haW5oZWFkY2lyY2xlY29sb3Igd29ya2luZ2ZpbGVzY2lyY2xlY29sb3IKKyAgICBpbmRleGNpcmNsZWNvbG9yIGNpcmNsZWNvbG9ycyBsaW5rZmdjb2xvciBjaXJjbGVvdXRsaW5lY29sb3IKKyAgICB3ZWJfYnJvd3NlcgorfQorZm9yZWFjaCB2YXIgJGNvbmZpZ192YXJpYWJsZXMgeworICAgIGNvbmZpZ19pbml0X3RyYWNlICR2YXIKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgJHZhciB3cml0ZSBjb25maWdfdmFyaWFibGVfY2hhbmdlX2NiCit9CisKK3BhcnNlZm9udCBtYWluZm9udCAkbWFpbmZvbnQKK2V2YWwgZm9udCBjcmVhdGUgbWFpbmZvbnQgW2ZvbnRmbGFncyBtYWluZm9udF0KK2V2YWwgZm9udCBjcmVhdGUgbWFpbmZvbnRib2xkIFtmb250ZmxhZ3MgbWFpbmZvbnQgMV0KKworcGFyc2Vmb250IHRleHRmb250ICR0ZXh0Zm9udAorZXZhbCBmb250IGNyZWF0ZSB0ZXh0Zm9udCBbZm9udGZsYWdzIHRleHRmb250XQorZXZhbCBmb250IGNyZWF0ZSB0ZXh0Zm9udGJvbGQgW2ZvbnRmbGFncyB0ZXh0Zm9udCAxXQorCitwYXJzZWZvbnQgdWlmb250ICR1aWZvbnQKK2V2YWwgZm9udCBjcmVhdGUgdWlmb250IFtmb250ZmxhZ3MgdWlmb250XQorCitzZXR1aSAkdWljb2xvcgorCitzZXRvcHRpb25zCisKKyMgY2hlY2sgdGhhdCB3ZSBjYW4gZmluZCBhIC5naXQgZGlyZWN0b3J5IHNvbWV3aGVyZS4uLgoraWYge1tjYXRjaCB7c2V0IGdpdGRpciBbZXhlYyBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcl19XX0geworICAgIHNob3dfZXJyb3Ige30gLiBbbWMgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iXQorICAgIGV4aXQgMQorfQorCitzZXQgc2VsZWN0aGVhZCB7fQorc2V0IHNlbGVjdGhlYWRpZCB7fQorCitzZXQgcmV2dHJlZWFyZ3Mge30KK3NldCBjbWRsaW5lX2ZpbGVzIHt9CitzZXQgaSAwCitzZXQgcmV2dHJlZWFyZ3NjbWQge30KK2ZvcmVhY2ggYXJnICRhcmd2IHsKKyAgICBzd2l0Y2ggLWdsb2IgLS0gJGFyZyB7CisJIiIgeyB9CisJIi0tIiB7CisJICAgIHNldCBjbWRsaW5lX2ZpbGVzIFtscmFuZ2UgJGFyZ3YgW2V4cHIgeyRpICsgMX1dIGVuZF0KKwkgICAgYnJlYWsKKwl9CisJIi0tc2VsZWN0LWNvbW1pdD0qIiB7CisJICAgIHNldCBzZWxlY3RoZWFkIFtzdHJpbmcgcmFuZ2UgJGFyZyAxNiBlbmRdCisJfQorCSItLWFyZ3NjbWQ9KiIgeworCSAgICBzZXQgcmV2dHJlZWFyZ3NjbWQgW3N0cmluZyByYW5nZSAkYXJnIDEwIGVuZF0KKwl9CisJZGVmYXVsdCB7CisJICAgIGxhcHBlbmQgcmV2dHJlZWFyZ3MgJGFyZworCX0KKyAgICB9CisgICAgaW5jciBpCit9CisKK2lmIHskc2VsZWN0aGVhZCBlcSAiSEVBRCJ9IHsKKyAgICBzZXQgc2VsZWN0aGVhZCB7fQorfQorCitpZiB7JGkgPj0gW2xsZW5ndGggJGFyZ3ZdICYmICRyZXZ0cmVlYXJncyBuZSB7fX0geworICAgICMgbm8gLS0gb24gY29tbWFuZCBsaW5lLCBidXQgc29tZSBhcmd1bWVudHMgKG90aGVyIHRoYW4gLS1hcmdzY21kKQorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmIFtldmFsIGV4ZWMgZ2l0IHJldi1wYXJzZSAtLW5vLXJldnMgLS1uby1mbGFncyAkcmV2dHJlZWFyZ3NdCisJc2V0IGNtZGxpbmVfZmlsZXMgW3NwbGl0ICRmICJcbiJdCisJc2V0IG4gW2xsZW5ndGggJGNtZGxpbmVfZmlsZXNdCisJc2V0IHJldnRyZWVhcmdzIFtscmFuZ2UgJHJldnRyZWVhcmdzIDAgZW5kLSRuXQorCSMgVW5mb3J0dW5hdGVseSBnaXQgcmV2LXBhcnNlIGRvZXNuJ3QgcHJvZHVjZSBhbiBlcnJvciB3aGVuCisJIyBzb21ldGhpbmcgaXMgYm90aCBhIHJldmlzaW9uIGFuZCBhIGZpbGVuYW1lLiAgVG8gYmUgY29uc2lzdGVudAorCSMgd2l0aCBnaXQgbG9nIGFuZCBnaXQgcmV2LWxpc3QsIGNoZWNrIHJldnRyZWVhcmdzIGZvciBmaWxlbmFtZXMuCisJZm9yZWFjaCBhcmcgJHJldnRyZWVhcmdzIHsKKwkgICAgaWYge1tmaWxlIGV4aXN0cyAkYXJnXX0geworCQlzaG93X2Vycm9yIHt9IC4gW21jICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvblwKKwkJCQkgYW5kIGZpbGVuYW1lIiAkYXJnXQorCQlleGl0IDEKKwkgICAgfQorCX0KKyAgICB9IGVycl19IHsKKwkjIHVuZm9ydHVuYXRlbHkgd2UgZ2V0IGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIgaW4gJGVyciwKKwkjIHNvIGxvb2sgZm9yICJmYXRhbDoiLgorCXNldCBpIFtzdHJpbmcgZmlyc3QgImZhdGFsOiIgJGVycl0KKwlpZiB7JGkgPiAwfSB7CisJICAgIHNldCBlcnIgW3N0cmluZyByYW5nZSAkZXJyIFtleHByIHskaSArIDZ9XSBlbmRdCisJfQorCXNob3dfZXJyb3Ige30gLiAiW21jICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6Il1cbiRlcnIiCisJZXhpdCAxCisgICAgfQorfQorCitzZXQgbnVsbGlkICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorc2V0IG51bGxpZDIgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiCitzZXQgbnVsbGZpbGUgIi9kZXYvbnVsbCIKKworc2V0IGhhdmVfdGs4NSBbZXhwciB7W3BhY2thZ2UgdmNvbXBhcmUgJHRrX3ZlcnNpb24gIjguNSJdID49IDB9XQoraWYgeyFbaW5mbyBleGlzdHMgaGF2ZV90dGtdfSB7CisgICAgc2V0IGhhdmVfdHRrIFtsbGVuZ3RoIFtpbmZvIGNvbW1hbmRzIDo6dHRrOjpzdHlsZV1dCit9CitzZXQgdXNlX3R0ayBbZXhwciB7JGhhdmVfdHRrICYmICR3YW50X3R0a31dCitzZXQgTlMgW2V4cHIgeyR1c2VfdHRrID8gInR0ayIgOiAiIn1dCisKK2lmIHskdXNlX3R0a30geworICAgIHNldHR0a3N0eWxlCit9CisKK3JlZ2V4cCB7XmdpdCB2ZXJzaW9uIChbXGQuXSpcZCl9IFtleGVjIGdpdCB2ZXJzaW9uXSBfIGdpdF92ZXJzaW9uCisKK3NldCBzaG93X25vdGVzIHt9CitpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJGdpdF92ZXJzaW9uICIxLjYuNi4yIl0gPj0gMH0geworICAgIHNldCBzaG93X25vdGVzICItLXNob3ctbm90ZXMiCit9CisKK3NldCBhcHBuYW1lICJnaXRrIgorCitzZXQgcnVucSB7fQorc2V0IGhpc3Rvcnkge30KK3NldCBoaXN0b3J5aW5kZXggMAorc2V0IGZoX3NlcmlhbCAwCitzZXQgbmhsX25hbWVzIHt9CitzZXQgaGlnaGxpZ2h0X3BhdGhzIHt9CitzZXQgZmluZHBhdHRlcm4ge30KK3NldCBzZWFyY2hkaXJuIC1mb3J3YXJkcworc2V0IGJvbGRpZHMge30KK3NldCBib2xkbmFtZWlkcyB7fQorc2V0IGRpZmZlbGlkZSB7MCAwfQorc2V0IG1hcmtpbmdtYXRjaGVzIDAKK3NldCBsaW5rZW50ZXJjb3VudCAwCitzZXQgbmVlZF9yZWRpc3BsYXkgMAorc2V0IG5yb3dzX2RyYXduIDAKK3NldCBmaXJzdHRhYnN0b3AgMAorCitzZXQgbmV4dHZpZXdudW0gMQorc2V0IGN1cnZpZXcgMAorc2V0IHNlbGVjdGVkdmlldyAwCitzZXQgc2VsZWN0ZWRobHZpZXcgW21jICJOb25lIl0KK3NldCBoaWdobGlnaHRfcmVsYXRlZCBbbWMgIk5vbmUiXQorc2V0IGhpZ2hsaWdodF9maWxlcyB7fQorc2V0IHZpZXdmaWxlcygwKSB7fQorc2V0IHZpZXdwZXJtKDApIDAKK3NldCB2aWV3Y2hhbmdlZCgwKSAwCitzZXQgdmlld2FyZ3MoMCkge30KK3NldCB2aWV3YXJnc2NtZCgwKSB7fQorCitzZXQgc2VsZWN0ZWRsaW5lIHt9CitzZXQgbnVtY29tbWl0cyAwCitzZXQgbG9naW5zdGFuY2UgMAorc2V0IGNtZGxpbmVvayAwCitzZXQgc3RvcHBlZCAwCitzZXQgc3R1ZmZzYXZlZCAwCitzZXQgcGF0Y2hudW0gMAorc2V0IGxzZXJpYWwgMAorc2V0IGhhc3dvcmt0cmVlIFtoYXN3b3JrdHJlZV0KK3NldCBjZHVwIHt9CitpZiB7W2V4cHIge1tleGVjIGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlXSA9PSAidHJ1ZSJ9XX0geworICAgIHNldCBjZHVwIFtleGVjIGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXBdCit9CitzZXQgd29ya3RyZWUgW2V4ZWMgZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWxdCitzZXRjb29yZHMKK21ha2V3aW5kb3cKK2NhdGNoIHsKKyAgICBpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nbyAgICAgIC13aWR0aCAxNiAtaGVpZ2h0IDE2CisKKyAgICBpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nb21pbnVzIC13aWR0aCAgNCAtaGVpZ2h0ICAyCisgICAgZ2l0bG9nb21pbnVzIHB1dCAjQzAwMDAwIC10byAwIDAgNCAyCisgICAgZ2l0bG9nbyBjb3B5IGdpdGxvZ29taW51cyAtdG8gIDEgNQorICAgIGdpdGxvZ28gY29weSBnaXRsb2dvbWludXMgLXRvICA2IDUKKyAgICBnaXRsb2dvIGNvcHkgZ2l0bG9nb21pbnVzIC10byAxMSA1CisgICAgaW1hZ2UgZGVsZXRlIGdpdGxvZ29taW51cworCisgICAgaW1hZ2UgY3JlYXRlIHBob3RvIGdpdGxvZ29wbHVzICAtd2lkdGggIDQgLWhlaWdodCAgNAorICAgIGdpdGxvZ29wbHVzICBwdXQgIzAwODAwMCAtdG8gMSAwIDMgNAorICAgIGdpdGxvZ29wbHVzICBwdXQgIzAwODAwMCAtdG8gMCAxIDQgMworICAgIGdpdGxvZ28gY29weSBnaXRsb2dvcGx1cyAgLXRvICAxIDkKKyAgICBnaXRsb2dvIGNvcHkgZ2l0bG9nb3BsdXMgIC10byAgNiA5CisgICAgZ2l0bG9nbyBjb3B5IGdpdGxvZ29wbHVzICAtdG8gMTEgOQorICAgIGltYWdlIGRlbGV0ZSBnaXRsb2dvcGx1cworCisgICAgaW1hZ2UgY3JlYXRlIHBob3RvIGdpdGxvZ28zMiAgICAtd2lkdGggMzIgLWhlaWdodCAzMgorICAgIGdpdGxvZ28zMiBjb3B5IGdpdGxvZ28gLXpvb20gMiAyCisKKyAgICB3bSBpY29ucGhvdG8gLiAtZGVmYXVsdCBnaXRsb2dvIGdpdGxvZ28zMgorfQorIyB3YWl0IGZvciB0aGUgd2luZG93IHRvIGJlY29tZSB2aXNpYmxlCit0a3dhaXQgdmlzaWJpbGl0eSAuCitzZXRfd2luZG93X3RpdGxlCit1cGRhdGUKK3JlYWRyZWZzCisKK2lmIHskY21kbGluZV9maWxlcyBuZSB7fSB8fCAkcmV2dHJlZWFyZ3MgbmUge30gfHwgJHJldnRyZWVhcmdzY21kIG5lIHt9fSB7CisgICAgIyBjcmVhdGUgYSB2aWV3IGZvciB0aGUgZmlsZXMvZGlycyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZQorICAgIHNldCBjdXJ2aWV3IDEKKyAgICBzZXQgc2VsZWN0ZWR2aWV3IDEKKyAgICBzZXQgbmV4dHZpZXdudW0gMgorICAgIHNldCB2aWV3bmFtZSgxKSBbbWMgIkNvbW1hbmQgbGluZSJdCisgICAgc2V0IHZpZXdmaWxlcygxKSAkY21kbGluZV9maWxlcworICAgIHNldCB2aWV3YXJncygxKSAkcmV2dHJlZWFyZ3MKKyAgICBzZXQgdmlld2FyZ3NjbWQoMSkgJHJldnRyZWVhcmdzY21kCisgICAgc2V0IHZpZXdwZXJtKDEpIDAKKyAgICBzZXQgdmlld2NoYW5nZWQoMSkgMAorICAgIHNldCB2ZGF0ZW1vZGUoMSkgMAorICAgIGFkZHZpZXdtZW51IDEKKyAgICAuYmFyLnZpZXcgZW50cnljb25mIFttY2EgIiZFZGl0IHZpZXcuLi4iXSAtc3RhdGUgbm9ybWFsCisgICAgLmJhci52aWV3IGVudHJ5Y29uZiBbbWNhICImRGVsZXRlIHZpZXciXSAtc3RhdGUgbm9ybWFsCit9CisKK2lmIHtbaW5mbyBleGlzdHMgcGVybXZpZXdzXX0geworICAgIGZvcmVhY2ggdiAkcGVybXZpZXdzIHsKKwlzZXQgbiAkbmV4dHZpZXdudW0KKwlpbmNyIG5leHR2aWV3bnVtCisJc2V0IHZpZXduYW1lKCRuKSBbbGluZGV4ICR2IDBdCisJc2V0IHZpZXdmaWxlcygkbikgW2xpbmRleCAkdiAxXQorCXNldCB2aWV3YXJncygkbikgW2xpbmRleCAkdiAyXQorCXNldCB2aWV3YXJnc2NtZCgkbikgW2xpbmRleCAkdiAzXQorCXNldCB2aWV3cGVybSgkbikgMQorCXNldCB2aWV3Y2hhbmdlZCgkbikgMAorCWFkZHZpZXdtZW51ICRuCisgICAgfQorfQorCitpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geworICAgIGZvY3VzIC1mb3JjZSAuCit9CisKK2dldGNvbW1pdHMge30KKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIG1vZGU6IHRjbAorIyBpbmRlbnQtdGFicy1tb2RlOiB0CisjIHRhYi13aWR0aDogOAorIyBFbmQ6CmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby8uZ2l0aWdub3JlIGIvZ2l0ay1naXQvcG8vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzU4ZGQxCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisqLm1zZwpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vYmcucG8gYi9naXRrLWdpdC9wby9iZy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2FiMWZhCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vYmcucG8KQEAgLTAsMCArMSwxNDA3IEBACisjIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBvZiBnaXRrIHBvLWZpbGUuCisjIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSwgMjAxOSBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+LgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0IHBhY2thZ2UuCisjIEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4sIDIwMTQsIDIwMTUsIDIwMTkuCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrIG1hc3RlclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxOS0wMy0wNCAxMToyNyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxOS0wMy0wNCAxMTozOSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQnVsZ2FyaWFuIDxkaWN0QGZzYS1iZy5vcmc+XG4iCisiTGFuZ3VhZ2U6IGJnXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICLQodC/0LjRgdGK0LrRitGCINGBINC90LXRgdC70LXRgtC4INGE0LDQudC70L7QstC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvToiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjQwMworbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICLQntGG0LLQtdGC0Y/QstCw0L3QtSDQvdCwINC00YPQvNC40YLQtSIKKworIzogZ2l0azoyMTcgZ2l0azoyNDAzIGdpdGs6ODI0OSBnaXRrOjgyODIKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgItCe0YLQsdC10LvRj9C30LLQsNC90LUg0L3QsCDQtNGD0LzQuNGC0LUiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INCw0L3QsNC70LjQtyDQvdCwINCy0LXRgNGB0LjQuNGC0LU6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg0YEg4oCeLS1hcmdzY21k4oCcLiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyLQndC1INGB0LAg0LjQt9Cx0YDQsNC90Lgg0YTQsNC50LvQvtCy0LUg4oCUINGD0LrQsNC30LDQvdCwINC1INC+0L/RhtC40Y/RgtCwIOKAni0tbWVyZ2XigJwsINC90L4g0L3Rj9C80LAg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUuIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisi0J3QtSDRgdCwINC40LfQsdGA0LDQvdC4INGE0LDQudC70L7QstC1IOKAlCDRg9C60LDQt9Cw0L3QsCDQtSDQvtC/0YbQuNGP0YLQsCDigJ4tLW1lcmdl4oCcLCDQvdC+INC90Y/QvNCwINC90LXRgdC70LXRgtC4INGE0LDQudC70L7QstC1ICIKKyLQsiDQvtCz0YDQsNC90LjRh9C10L3QuNGP0YLQsC4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0IGxvZ+KAnDoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAi0J/RgNC+0YfQuNGC0LDQvdC1IgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1NDkKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgItCf0YDQvtGH0LjRgtCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LDigKYiCisKKyM6IGdpdGs6NDk5IGdpdGs6MTY0MSBnaXRrOjQ1NTIKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICLQndC1INGB0LAg0LjQt9Cx0YDQsNC90Lgg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjE0NDkgZ2l0azo0MDY5IGdpdGs6MTI1ODMKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgItCa0L7QvNCw0L3QtNC10L0g0YDQtdC0IgorCisjOiBnaXRrOjE1MTUKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgItCY0LfRhdC+0LTRitGCINC+0YIg4oCeZ2l0IGxvZ+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LA6IgorCisjOiBnaXRrOjE3NDQKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICLQm9C40L/RgdCy0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGdpdGs6MTkwNyBnaXRrOjE5MzYgZ2l0azo0MzM5IGdpdGs6OTc4OSBnaXRrOjExMzg4IGdpdGs6MTE2NjgKK21zZ2lkICJPSyIKK21zZ3N0ciAi0JTQvtCx0YDQtSIKKworIzogZ2l0azoxOTM4IGdpdGs6NDM0MSBnaXRrOjkyMjUgZ2l0azo5MzA0IGdpdGs6OTQzNCBnaXRrOjk1MjAgZ2l0azo5NzkxCisjOiBnaXRrOjExMzg5IGdpdGs6MTE2NjkKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgItCe0YLQutCw0LciCisKKyM6IGdpdGs6MjA4NworbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIibQntCx0L3QvtCy0Y/QstCw0L3QtSIKKworIzogZ2l0azoyMDg4Cittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAiJtCf0YDQtdC30LDRgNC10LbQtNCw0L3QtSIKKworIzogZ2l0azoyMDg5Cittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICIm0J3QsNC90L7QstC+INC/0YDQvtGH0LjRgtCw0L3QtSIKKworIzogZ2l0azoyMDkwCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiJtCY0LfQsdGA0L7Rj9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSIKKworIzogZ2l0azoyMDkyCittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIibQodGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwIOKAnmdpdCBndWnigJwiCisKKyM6IGdpdGs6MjA5NAorbXNnaWQgIiZRdWl0IgorbXNnc3RyICIm0KHQv9C40YDQsNC90LUg0L3QsCDQv9GA0L7Qs9GA0LDQvNCw0YLQsCIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkZpbGUiCittc2dzdHIgIibQpNCw0LnQuyIKKworIzogZ2l0azoyMDk4Cittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICIm0J3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBnaXRrOjIwOTcKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiJtCg0LXQtNCw0LrRgtC40YDQsNC90LUiCisKKyM6IGdpdGs6MjEwMgorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiJtCd0L7QsiDQuNC30LPQu9C10LTigKYiCisKKyM6IGdpdGs6MjEwMworbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIibQoNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0LjQt9Cz0LvQtdC00LDigKYiCisKKyM6IGdpdGs6MjEwNAorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAiJtCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC40LfQs9C70LXQtNCwIgorCisjOiBnaXRrOjIxMDYKK21zZ2lkICImQWxsIGZpbGVzIgorbXNnc3RyICIm0JLRgdC40YfQutC4INGE0LDQudC70L7QstC1IgorCisjOiBnaXRrOjIxMDEKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiJtCY0LfQs9C70LXQtCIKKworIzogZ2l0azoyMTExIGdpdGs6MjEyMQorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICIm0J7RgtC90L7RgdC90L4gZ2l0ayIKKworIzogZ2l0azoyMTEyIGdpdGs6MjEyNgorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIibQmtC70LDQstC40YjQvdC4INC60L7QvNCx0LjQvdCw0YbQuNC4IgorCisjOiBnaXRrOjIxMTAgZ2l0azoyMTI1Cittc2dpZCAiJkhlbHAiCittc2dzdHIgItCf0L7QvNC+JtGJIgorCisjOiBnaXRrOjIyMDMgZ2l0azo4NjgxCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTE6IgorCisjOiBnaXRrOjIyNDcKK21zZ2lkICJSb3ciCittc2dzdHIgItCg0LXQtCIKKworIzogZ2l0azoyMjg1Cittc2dpZCAiRmluZCIKK21zZ3N0ciAi0KLRitGA0YHQtdC90LUiCisKKyM6IGdpdGs6MjMxMworbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOSBnaXRrOjQ3MTEgZ2l0azo0NzM0IGdpdGs6NDc1OCBnaXRrOjY3NzkgZ2l0azo2ODUxCisjOiBnaXRrOjY5MzYKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAi0YHRitC00YrRgNC20LDRidC+OiIKKworIzogZ2l0azoyMzIwIGdpdGs6MzU1MCBnaXRrOjM1NTUgZ2l0azo0Nzg3Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICLQsiDQv9GK0YLQuNGJ0LDRgtCwOiIKKworIzogZ2l0azoyMzIxIGdpdGs6NDgwMQorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICLQtNC+0LHQsNCy0Y/RidC+L9C/0YDQtdC80LDRhdCy0LDRidC+INC90LjQtyIKKworIzogZ2l0azoyMzIyIGdpdGs6NDgwMworbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAi0L/RgNC+0LzQtdC90Y/RidC+INGA0LXQtNC+0LLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lg6IgorCisjOiBnaXRrOjIzMzEgZ2l0azoyMzMzIGdpdGs6NDc5MAorbXNnaWQgIkV4YWN0IgorbXNnc3RyICLQotC+0YfQvdC+IgorCisjOiBnaXRrOjIzMzMgZ2l0azo0ODc4IGdpdGs6Njc0NworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgItCR0LXQtyDRgNC10LPQuNGB0YLRitGAIgorCisjOiBnaXRrOjIzMzMgZ2l0azo0NzYwIGdpdGs6NDg3NiBnaXRrOjY3NDMKK21zZ2lkICJSZWdleHAiCittc2dzdHIgItCg0LXQsy4g0LjQt9GA0LDQtyIKKworIzogZ2l0azoyMzM1IGdpdGs6MjMzNiBnaXRrOjQ4OTggZ2l0azo0OTI4IGdpdGs6NDkzNSBnaXRrOjY4NzIgZ2l0azo2OTQwCittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAi0JLRgdC40YfQutC4INC/0L7Qu9C10YLQsCIKKworIzogZ2l0azoyMzM2IGdpdGs6NDg5NSBnaXRrOjQ5MjggZ2l0azo2ODEwCittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgItCf0YrRgNCy0Lgg0YDQtdC0IgorCisjOiBnaXRrOjIzMzcgZ2l0azo0ODk1IGdpdGs6NjgxMCBnaXRrOjY5NDAgZ2l0azo3NDEzCittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgItCa0L7QvNC10L3RgtCw0YDQuCIKKworIzogZ2l0azoyMzM3IGdpdGs6NDg5NSBnaXRrOjQ5MDAgZ2l0azo0OTM1IGdpdGs6NjgxMCBnaXRrOjczNDggZ2l0azo4ODU5CisjOiBnaXRrOjg4NzQKK21zZ2lkICJBdXRob3IiCittc2dzdHIgItCQ0LLRgtC+0YAiCisKKyM6IGdpdGs6MjMzNyBnaXRrOjQ4OTUgZ2l0azo2ODEwIGdpdGs6NzM1MAorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAi0J/QvtC00LDQstCw0YkiCisKKyM6IGdpdGs6MjM3MQorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAi0KLRitGA0YHQtdC90LUiCisKKyM6IGdpdGs6MjM3OQorbXNnaWQgIkRpZmYiCittc2dzdHIgItCg0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjIzODEKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAi0KHRgtCw0YDQsCDQstC10YDRgdC40Y8iCisKKyM6IGdpdGs6MjM4MworbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICLQndC+0LLQsCDQstC10YDRgdC40Y8iCisKKyM6IGdpdGs6MjM4NgorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgItCa0L7QvdGC0LXQutGB0YIg0LIg0YDQtdC00L7QstC1IgorCisjOiBnaXRrOjIzOTYKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICLQn9GA0LDQt9C90LjRgtC1INC30L3QsNGG0Lgg0LHQtdC3INC30L3QsNGH0LXQvdC40LUiCisKKyM6IGdpdGs6MjQwMCBnaXRrOjI0MDIgZ2l0azo3OTgzIGdpdGs6ODIzNQorbXNnaWQgIkxpbmUgZGlmZiIKK21zZ3N0ciAi0J/QvtGA0LXQtNC+0LLQuCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azoyNDY3Cittc2dpZCAiUGF0Y2giCittc2dzdHIgItCa0YDRitC/0LrQsCIKKworIzogZ2l0azoyNDY5Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAi0JTRitGA0LLQviIKKworIzogZ2l0azoyNjM5IGdpdGs6MjY2MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAi0KDQsNC30LvQuNC60Lgg0LzQtdC20LTRgyDRgtC+0LLQsCDQuCDQuNC30LHRgNCw0L3QvtGC0L4iCisKKyM6IGdpdGs6MjY0MCBnaXRrOjI2NjEKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgItCg0LDQt9C70LjQutC4INC80LXQttC00YMg0LjQt9Cx0YDQsNC90L7RgtC+INC4INGC0L7QstCwIgorCisjOiBnaXRrOjI2NDEgZ2l0azoyNjYyCittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LrRgNGK0L/QutCwIgorCisjOiBnaXRrOjI2NDIgZ2l0azo5MjgzCittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGCIgorCisjOiBnaXRrOjI2NDMKK21zZ2lkICJDb3B5IGNvbW1pdCBzdW1tYXJ5IgorbXNnc3RyICLQmtC+0L/QuNGA0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjQ0IGdpdGs6OTQxNAorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICLQl9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDQstGK0LIg0YTQsNC50LsiCisKKyM6IGdpdGs6MjY0NQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvdC+0LIg0LrQu9C+0L0iCisKKyM6IGdpdGs6MjY0NgorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICLQntGC0LHQuNGA0LDQvdC1INC90LAg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAi0J/RgNC40LLQtdC20LTQsNC90LUg0L3QsCDQstGK0YDRhdCwINC90LAg0LrQu9C+0L3QsCDQutGK0Lwg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICLQntGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC90LAg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgItCS0YDRitGJ0LDQvdC1INC60YrQvCDQvtGC0LHQtdC70Y/Qt9Cw0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjUwCittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgItCe0YLQutGA0LjQstCw0L3QtSDQuCDQvtGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC90LAg0L3QsNGB0LvQtdC00L3QuNGG0LjRgtC1IgorCisjOiBnaXRrOjI2NTEKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAi0KHRgNCw0LLQvdC10L3QuNC1INGBINC+0YLQsdC10LvRj9C30LDQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjI2NTIgZ2l0azoyNjYzCittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgItCg0LDQt9C70LjQutC4INC80LXQttC00YMg0YLQvtCy0LAg0Lgg0L7RgtCx0LXQu9GP0LfQsNC90L7RgtC+IgorCisjOiBnaXRrOjI2NTMgZ2l0azoyNjY0Cittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgItCg0LDQt9C70LjQutC4INC80LXQttC00YMg0L7RgtCx0LXQu9GP0LfQsNC90L7RgtC+INC4INGC0L7QstCwIgorCisjOiBnaXRrOjI2NTQKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgItCe0YLQvNGP0L3QsCDQvdCwINGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MjY3MAorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1INC90LAg0YLQvtC30Lgg0LrQu9C+0L0iCisKKyM6IGdpdGs6MjY3MQorbXNnaWQgIlJlbmFtZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0YLQvtC30Lgg0LrQu9C+0L0iCisKKyM6IGdpdGs6MjY3MgorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YLQvtC30Lgg0LrQu9C+0L0iCisKKyM6IGdpdGs6MjY3MworbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgItCa0L7Qv9C40YDQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0LrQu9C+0L3QsCIKKworIzogZ2l0azoyNjgwCittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICLQntGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC4INC90LAg0YLQvtCy0LAiCisKKyM6IGdpdGs6MjY4MQorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgItCe0YLQsdC10LvRj9C30LLQsNC90LUg0YHQsNC80L4g0L3QsCDRgtC+0LLQsCIKKworIzogZ2l0azoyNjgyCittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAi0JLRitC90YjQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azoyNjgzCittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAi0JDQvdC+0YLQuNGA0LDQvdC1INC90LAg0YDQvtC00LjRgtC10LvRgdC60L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MjY4NAorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINC/0YrRgtGPIgorCisjOiBnaXRrOjI2OTEKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC/0YDQvtC40LfRhdC+0LTQsCDQvdCwINGC0L7Qt9C4INGA0LXQtCIKKworIzogZ2l0azoyNjkyCittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICLQmNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnmdpdCBndWkgYmxhbWXigJwg0LLRitGA0YXRgyDRgtC+0LfQuCDRgNC10LQiCisKKyM6IGdpdGs6MzAzNgorbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgItCe0YLQvdC+0YHQvdC+IGdpdGsiCisKKyM6IGdpdGs6MzAzOAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsg4oCUINCy0LjQt9GD0LDQu9C40LfQsNGG0LjRjyDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIgR2l0XG4iCisiXG4iCisi0JDQstGC0L7RgNGB0LrQuCDQv9GA0LDQstCwOiDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyLQmNC30L/QvtC70LfQstCw0LnRgtC1INC4INGA0LDQt9C/0YDQvtGB0YLRgNCw0L3Rj9Cy0LDQudGC0LUg0L/RgNC4INGD0YHQu9C+0LLQuNGP0YLQsCDQvdCwINCe0J/QmyDQvdCwINCT0J3QoyIKKworIzogZ2l0azozMDQ2IGdpdGs6MzExMyBnaXRrOjEwMDA0Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgItCX0LDRgtCy0LDRgNGP0L3QtSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgItCa0LvQsNCy0LjRiNC90Lgg0LrQvtC80LHQuNC90LDRhtC40LgiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAi0JrQu9Cw0LLQuNGI0L3QuCDQutC+0LzQsdC40L3QsNGG0LjQuDoiCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx00KHQv9C40YDQsNC90LUg0L3QsCDQv9GA0L7Qs9GA0LDQvNCw0YLQsCIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdNCX0LDRgtCy0LDRgNGP0L3QtSDQvdCwINC/0YDQvtC30L7RgNC10YbQsCIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx00JrRitC8INC/0YrRgNCy0L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MzA3NQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdNCa0YrQvCDQv9C+0YHQu9C10LTQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjMwNzYKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGtcdNCV0LTQvdC+INC/0L7QtNCw0LLQsNC90LUg0L3QsNCz0L7RgNC1IgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8RG93bj4sIG4sIGpcdNCV0LTQvdC+INC/0L7QtNCw0LLQsNC90LUg0L3QsNC00L7Qu9GDIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGhcdNCd0LDQt9Cw0LQg0LIg0LjRgdGC0L7RgNC40Y/RgtCwIgorCisjOiBnaXRrOjMwNzkKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx00J3QsNC/0YDQtdC0INCyINC40YHRgtC+0YDQuNGP0YLQsCIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjwlcy1uPlx00JrRitC8IG4t0YLQuNGPINGA0L7QtNC40YLQtdC7INC90LAg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INCyINC40YHRgtC+0YDQuNGP0YLQsCIKKworIzogZ2l0azozMDgxCittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHTQodGC0YDQsNC90LjRhtCwINC90LDQs9C+0YDQtSDQsiDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBnaXRrOjMwODIKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNC00L7Qu9GDINCyINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHTQmtGK0Lwg0L3QsNGH0LDQu9C+0YLQviDQvdCwINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx00JrRitC8INC60YDQsNGPINC90LAg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogZ2l0azozMDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHTQoNC10LQg0L3QsNCz0L7RgNC1INCyINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZ2l0azozMDg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHTQoNC10LQg0L3QsNC00L7Qu9GDINCyINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZ2l0azozMDg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNCz0L7RgNC1INCyINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZ2l0azozMDg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNC00L7Qu9GDINCyINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZ2l0azozMDg5Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHTQotGK0YDRgdC10L3QtSDQvdCw0LfQsNC0ICjQstC40LfRg9Cw0LvQvdC+INC90LDQs9C+0YDQtSwg0LjRgdGC0L7RgNC40YfQtdGB0LrQuCDigJQg0L/QvtGB0LvQtdC00LLQsNGJ0LgpIgorCisjOiBnaXRrOjMwOTAKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiIgorIjxTaGlmdC1Eb3duPlx00KLRitGA0YHQtdC90LUg0L3QsNC/0YDQtdC0ICjQstC40LfRg9Cw0LvQvdC+INC90LDQtNC+0LvRgywg0LjRgdGC0L7RgNC40YfQtdGB0LrQuCDigJQg0L/RgNC10LTRhdC+0LbQtNCw0YnQuCkiCisKKyM6IGdpdGs6MzA5MQorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LPQvtGA0LUg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azozMDkyCittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHTQodGC0YDQsNC90LjRhtCwINC90LDQtNC+0LvRgyDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMwOTMKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPFNwYWNlPlx0XHTQodGC0YDQsNC90LjRhtCwINC90LDQtNC+0LvRgyDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMwOTQKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0MTgg0YDQtdC00LAg0L3QsNCz0L7RgNC1INCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MzA5NQorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdDE4INGA0LXQtNCwINC90LDQtNC+0LvRgyDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMwOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdNCi0YrRgNGB0LXQvdC1IgorCisjOiBnaXRrOjMwOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx00JrRitC8INGB0LvQtdC00LLQsNGJ0LDRgtCwINC/0L7Rj9Cy0LAiCisKKyM6IGdpdGs6MzA5OAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHTQmtGK0Lwg0YHQu9C10LTQstCw0YnQsNGC0LAg0L/QvtGP0LLQsCIKKworIzogZ2l0azozMDk5Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx00JrRitC8INC/0L7RgdC70LXQtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MzEwMAorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx00KTQvtC60YPRgSDQstGK0YDRhdGDINC/0L7Qu9C10YLQviDQt9CwINGC0YrRgNGB0LXQvdC1IgorCisjOiBnaXRrOjMxMDEKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx00JrRitC8INC/0YDQtdC00LjRiNC90LDRgtCwINC/0L7Rj9Cy0LAiCisKKyM6IGdpdGs6MzEwMgorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx00KHQu9C10LTQstCw0Ykg0YTQsNC50Lsg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azozMTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx00KLRitGA0YHQtdC90LUg0L3QsCDRgdC70LXQtNCy0LDRidCw0YLQsCDQv9C+0Y/QstCwINCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MzEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHTQotGK0YDRgdC10L3QtSDQvdCwINC/0YDQtdC00LjRiNC90LDRgtCwINC/0L7Rj9Cy0LAg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azozMTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdNCf0L4t0LPQvtC70Y/QvCDRgNCw0LfQvNC10YAg0L3QsCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdGs6MzEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdNCf0L4t0LPQvtC70Y/QvCDRgNCw0LfQvNC10YAg0L3QsCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdGs6MzEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHTQn9C+LdC80LDQu9GK0Log0YDQsNC30LzQtdGAINC90LAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjMxMDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdNCf0L4t0LzQsNC70YrQuiDRgNCw0LfQvNC10YAg0L3QsCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdGs6MzEwOQorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdNCe0LHQvdC+0LLRj9Cy0LDQvdC1IgorCisjOiBnaXRrOjM1NzQgZ2l0azozNTgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINCy0YDQtdC80LXQvdC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPIOKAniVz4oCcOiIKKworIzogZ2l0azozNTk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/QvtC70YPRh9Cw0LLQsNC90LXRgtC+INC90LAg4oCeJXPigJwg0L7RgiAlczoiCisKKyM6IGdpdGs6MzY1OQorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LA6IgorCisjOiBnaXRrOjM4MDgKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAi0KLQsNC60L7QstCwINC/0L7QtNCw0LLQsNC90LUg0L3Rj9C80LAiCisKKyM6IGdpdGs6MzgyMgorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAi4oCeZ2l0IGd1aSBibGFtZeKAnDog0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LA6IgorCisjOiBnaXRrOjM4NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICLQktGK0YDRhdGK0YIg0LfQsCDRgdC70LjQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvTogJXMiCisKKyM6IGdpdGs6Mzg2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC/0YDQvtGH0LjRgtCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwOiAlcyIKKworIzogZ2l0azozODg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBibGFtZeKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRgtCw0YDRgtC40YDQsNC90LA6ICVzIgorCisjOiBnaXRrOjM4ODkgZ2l0azo2Nzc4Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSIKKworIzogZ2l0azozOTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfQv9GK0LvQvdC10L3QuNC10YLQviDQvdCwIOKAnmdpdCBibGFtZeKAnDogJXMiCisKKyM6IGdpdGs6Mzk0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgItCi0L7Qt9C4INGA0LXQtCDQuNC00LLQsCDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+ICVzLCDQutC+0LXRgtC+INC90LUg0LUg0LIg0LjQt9Cz0LvQtdC00LAiCisKKyM6IGdpdGs6Mzk2MworbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINCy0YrQvdGI0L3QsNGC0LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGA0LDQt9C70LjQutC4OiIKKworIzogZ2l0azo0MDY3Cittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICLQktGB0LjRh9C60Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIlZpZXciCittc2dzdHIgItCY0LfQs9C70LXQtCIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgItCU0LXRhNC40L3QuNGG0LjRjyDQvdCwINC40LfQs9C70LXQtCDQsiBHaXRrIgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgItCX0LDQv9Cw0LfQstCw0L3QtSDQvdCwINGC0L7Qt9C4INC40LfQs9C70LXQtCIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9C4ICjRgdC/0LjRgdGK0Log0YEg0YDQsNC30LTQtdC70LjRgtC10Lsg0LjQvdGC0LXRgNCy0LDQuyk6IgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICLQmtC70L7QvdC4INC4INC10YLQuNC60LXRgtC4OiIKKworIzogZ2l0azo0MTAxCittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgItCS0YHQuNGH0LrQuCDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICLQktGB0LjRh9C60LggKNC70L7QutCw0LvQvdC4KSDQutC70L7QvdC4IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAi0JLRgdC40YfQutC4INC10YLQuNC60LXRgtC4IgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLQktGB0LjRh9C60Lgg0YHQu9C10LTRj9GJ0Lgg0LrQu9C+0L3QuCIKKworIzogZ2l0azo0MTA1Cittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAi0JjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQv9C+0LTQsNCy0LDQvdC1ICjRgNC10LMuINC40LfRgC4pOiIKKworIzogZ2l0azo0MTA2Cittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAi0JDQstGC0L7RgDoiCisKKyM6IGdpdGs6NDEwNworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgItCf0L7QtNCw0Ls6IgorCisjOiBnaXRrOjQxMDgKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgItCh0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtToiCisKKyM6IGdpdGs6NDEwOQorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICLQodGK0LLQv9Cw0LTQtdC90LjQtSDQv9C+INCy0YHQuNGH0LrQuCDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQutC4INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGdpdGs6NDExMAorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgItCd0LUg0YHRitCy0L/QsNC00LAg0L/QviDQvdC40LrQvtGPINC+0YIg0YXQsNGA0LDQutGC0LXRgNC40YHRgtC40LrQuNGC0LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogZ2l0azo0MTExCittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgItCf0YDQvtC80LXQvdC4INC/0L4g0YTQsNC50LvQvtCy0LXRgtC1OiIKKworIzogZ2l0azo0MTEyCittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICLQlNC+0YHQu9C+0LLQtdC9INC90LjQtyIKKworIzogZ2l0azo0MTEzCittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICLQoNC10LPRg9C70Y/RgNC10L0g0LjQt9GA0LDQtyIKKworIzogZ2l0azo0MTE0Cittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgItCd0LjQtyDQt9CwINGC0YrRgNGB0LXQvdC1OiIKKworIzogZ2l0azo0MTE1Cittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisi0JTQsNGC0LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC1ICjigJ4yIHdlZWtzIGFnb+KAnCAo0L/RgNC10LTQuCAyINGB0LXQtNC80LjRhtC4KSwg4oCeMjAwOS0wMy0xNyAxNToyNzozOOKAnCwgIgorIuKAnk1hcmNoIDE3LCAyMDA5IDE1OjI3OjM44oCcKToiCisKKyM6IGdpdGs6NDExNgorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAi0J7RgjoiCisKKyM6IGdpdGs6NDExNworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAi0JTQvjoiCisKKyM6IGdpdGs6NDExOAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICIiCisi0J7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC4L9C40LvQuCDQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINC+0L/RgNC10LTQtdC70LXQvSDQsdGA0L7QuSDQstC10YDRgdC40LggKNC90LXQvtGC0YDQuNGG0LDRgtC10LvQvdC+INGG0Y/Qu9C+ICIKKyLRh9C40YHQu9C+KToiCisKKyM6IGdpdGs6NDExOQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAi0JHRgNC+0Lkg0L/QvtC60LDQt9Cw0L3QuDoiCisKKyM6IGdpdGs6NDEyMAorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAi0JHRgNC+0Lkg0L/RgNC10YHQutC+0YfQtdC90Lg6IgorCisjOiBnaXRrOjQxMjEKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICLQoNCw0LfQvdC4OiIKKworIzogZ2l0azo0MTIyCittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICLQn9C+0LTRgNC10LbQtNCw0L3QtSDQv9C+INC00LDRgtCwIgorCisjOiBnaXRrOjQxMjMKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINGB0YLRgNCw0L3QuNGC0LUg0L/QviDQutC70L7QvdCwIgorCisjOiBnaXRrOjQxMjQKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgItCh0LDQvNC+INC/0YrRgNCy0LjRjyDRgNC+0LTQuNGC0LXQuyIKKworIzogZ2l0azo0MTI1Cittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgItCe0L/RgNC+0YHRgtC10L3QsCDQuNGB0YLQvtGA0LjRjyIKKworIzogZ2l0azo0MTI2Cittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgItCU0L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQsNGA0LPRg9C80LXQvdGC0Lgg0LrRitC8IOKAnmdpdCBsb2figJw6IgorCisjOiBnaXRrOjQxMjcKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAi0JLRitCy0LXQtNC10YLQtSDRhNCw0LnQu9C+0LLQtdGC0LUg0Lgg0LTQuNGA0LXQutGC0L7RgNC40LjRgtC1INC30LAg0LLQutC70Y7Rh9Cy0LDQvdC1LCDQv9C+INC10LvQtdC80LXQvdGCINC90LAg0YDQtdC0IgorCisjOiBnaXRrOjQxMjgKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiIgorItCa0L7QvNCw0L3QtNCwINC30LAg0LPQtdC90LXRgNC40YDQsNC90LXRgtC+INC90LAg0LTQvtC/0YrQu9C90LjRgtC10LvQvdC4INC/0L7QtNCw0LLQsNC90LjRjywg0LrQvtC40YLQviDQtNCwINCx0YrQtNCw0YIg0LLQutC70Y7Rh9C10L3QuDoiCisKKyM6IGdpdGs6NDI1MgorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azog0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINC40LfQs9C70LXQtCIKKworIzogZ2l0azo0MjYwCittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIuKAlCDQutGA0LjRgtC10YDQuNC4INC30LAg0LjQt9Cx0L7RgCDQvdCwINCy0LXRgNGB0LjQuCIKKworIzogZ2l0azo0MjY1Cittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICLQmNC80LUg0L3QsCDQuNC30LPQu9C10LQiCisKKyM6IGdpdGs6NDM0MAorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtSAoRjUpIgorCisjOiBnaXRrOjQzNzgKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQsiDQsNGA0LPRg9C80LXQvdGC0LjRgtC1INC30LAg0LjQt9Cx0L7RgCDQvdCwINC/0L7QtNCw0LLQsNC90LjRjzoiCisKKyM6IGdpdGs6NDQzMyBnaXRrOjQ0ODYgZ2l0azo0OTQ4IGdpdGs6NDk2MiBnaXRrOjYyMzIgZ2l0azoxMjUyNCBnaXRrOjEyNTI1Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAi0J3Rj9C80LAiCisKKyM6IGdpdGs6NTA0NSBnaXRrOjUwNTAKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICLQndCw0YHQu9C10LTQvdC40LoiCisKKyM6IGdpdGs6NTA0NgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICLQndC1INC1INC90LDRgdC70LXQtNC90LjQuiIKKworIzogZ2l0azo1MDUzIGdpdGs6NTA1OAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICLQn9GA0LXQtNGI0LXRgdGC0LLQtdC90LjQuiIKKworIzogZ2l0azo1MDU0Cittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICLQndC1INC1INC/0YDQtdC00YjQtdGB0YLQstC10L3QuNC6IgorCisjOiBnaXRrOjUzNDgKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgItCb0L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4INC00L7QsdCw0LLQtdC90Lgg0LrRitC8INC40L3QtNC10LrRgdCwLCDQvdC+INC90LXQv9C+0LTQsNC00LXQvdC4IgorCisjOiBnaXRrOjUzODQKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAi0JvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90Lgg0LjQt9Cy0YrQvSDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0azo3MTU4Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAi0Lgg0L7RidC1INC80L3QvtCz0L4iCisKKyM6IGdpdGs6NzE2MQorbXNnaWQgIm1hbnkiCittc2dzdHIgItC80L3QvtCz0L4iCisKKyM6IGdpdGs6NzM1MgorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICLQldGC0LjQutC10YLQuDoiCisKKyM6IGdpdGs6NzM2OSBnaXRrOjczNzUgZ2l0azo4ODU0Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICLQoNC+0LTQuNGC0LXQuyIKKworIzogZ2l0azo3MzgwCittc2dpZCAiQ2hpbGQiCittc2dzdHIgItCU0LXRgtC1IgorCisjOiBnaXRrOjczODkKK21zZ2lkICJCcmFuY2giCittc2dzdHIgItCa0LvQvtC9IgorCisjOiBnaXRrOjczOTIKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICLQodC70LXQtNCy0LAiCisKKyM6IGdpdGs6NzM5NQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICLQn9GA0LXQtNGI0LXRgdGC0LLQsCIKKworIzogZ2l0azo3OTkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/QvtC70YPRh9Cw0LLQsNC90LXRgtC+INC90LAg0YDQsNC30LvQuNC60LjRgtC1OiAlcyIKKworIzogZ2l0azo4Njc5Cittc2dpZCAiR290bzoiCittc2dzdHIgItCa0YrQvCDRgNC10LQ6IgorCisjOiBnaXRrOjg3MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAi0KHRitC60YDQsNGC0LXQvdCw0YLQsCDRgdGD0LzQsCDQv9C+IFNIQTEgJXMg0L3QtSDQtSDQtdC00L3QvtC30L3QsNGH0L3QsCIKKworIzogZ2l0azo4NzA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0LLQtdGA0YHQuNGPICVzIgorCisjOiBnaXRrOjg3MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtCwINGB0YPQvNCwINC/0L4gU0hBMSAlcyIKKworIzogZ2l0azo4NzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgItCS0LXRgNGB0LjRjyAlcyDQvdC1INC1INCyINGC0LXQutGD0YnQuNGPINC40LfQs9C70LXQtCIKKworIzogZ2l0azo4ODYxIGdpdGs6ODg3NgorbXNnaWQgIkRhdGUiCittc2dzdHIgItCU0LDRgtCwIgorCisjOiBnaXRrOjg4NjQKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAi0JTQtdGG0LAiCisKKyM6IGdpdGs6ODkyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLQl9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC60LvQvtC90LAg4oCeJXPigJwg0LrRitC8INGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azo4OTI5Cittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgItCd0LXRgdCy0YrRgNC30LDQvSDQstGA0YrRhTog0L3QtdCy0YrQt9C80L7QttC90L4g0LfQsNC90YPQu9GP0LLQsNC90LUiCisKKyM6IGdpdGs6OTAzNCBnaXRrOjkwNDAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLQn9GA0L7Qv9GD0YHQutCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INC90LAg0YHQu9C40LLQsNC90LXRgtC+IgorCisjOiBnaXRrOjkwNDkgZ2l0azo5MDU0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC/0L7Qu9GD0YfQsNCy0LDQvdC10YLQviDQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAg0L3QsCAiCisKKyM6IGdpdGs6OTA1MCBnaXRrOjkwNTUKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIg4oCUINGB0L/QuNGA0LDQvdC1XG4iCisKKyM6IGdpdGs6OTA2MCBnaXRrOjkwNjMgZ2l0azo5MDcxIGdpdGs6OTA4NSBnaXRrOjkwOTQKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjkwNjQKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiDQtSDRgdGK0YnQsNGC0LAg0LrRgNGK0L/QutCwINC60LDRgtC+XG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDcyCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiINGB0LUg0YDQsNC30LvQuNGH0LDQstCwINC+0YJcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNzQKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisi0KDQsNC30LvQuNC60LAg0LzQtdC20LTRgyDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwOlxuIgorIlxuIgorCisjOiBnaXRrOjkwODYgZ2l0azo5MDk1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiDQuNC80LAgJXMg0LTQtdGG0LAg4oCUINGB0L/QuNGA0LDQvdC1XG4iCisKKyM6IGdpdGs6OTExNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9Cw0LfQstCw0L3QtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDQstGK0LIg0YTQsNC50Ls6ICVzIgorCisjOiBnaXRrOjkxMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfRh9C40YHQu9GP0LLQsNC90LXRgtC+INC90LAg0YDQsNC30LvQuNC60LjRgtC1INC80LXQttC00YMg0L/QvtC00LDQstCw0L3QuNGP0YLQsDogJXMiCisKKyM6IGdpdGs6OTE2NgorbXNnaWQgIlRvcCIKK21zZ3N0ciAi0J3QsNC5LdCz0L7RgNC1IgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJGcm9tIgorbXNnc3RyICLQntGCIgorCisjOiBnaXRrOjkxNzIKK21zZ2lkICJUbyIKK21zZ3N0ciAi0JTQviIKKworIzogZ2l0azo5MTk2Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0LrRgNGK0L/QutCwIgorCisjOiBnaXRrOjkxOTgKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAi0J7RgjoiCisKKyM6IGdpdGs6OTIwNworbXNnaWQgIlRvOiIKK21zZ3N0ciAi0JTQvjoiCisKKyM6IGdpdGs6OTIxNgorbXNnaWQgIlJldmVyc2UiCittc2dzdHIgItCe0LHRgNGK0YnQsNC90LUiCisKKyM6IGdpdGs6OTIxOCBnaXRrOjk0MjgKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgItCX0LDQv9Cw0LfQstCw0L3QtSDQstGK0LIg0YTQsNC50LvQsDoiCisKKyM6IGdpdGs6OTIyNAorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICLQk9C10L3QtdGA0LjRgNCw0L3QtSIKKworIzogZ2l0azo5MjYyCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LA6IgorCisjOiBnaXRrOjkyODUgZ2l0azo5NDE2IGdpdGs6OTUwNAorbXNnaWQgIklEOiIKK21zZ3N0ciAi0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YA6IgorCisjOiBnaXRrOjkyOTQKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgItCY0LzQtSDQvdCwINC10YLQuNC60LXRgjoiCisKKyM6IGdpdGs6OTI5NworbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICLQodGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0LXRgtC40LrQtdGCINC1INC90LXQt9Cw0LTRitC70LbQuNGC0LXQu9C90L4iCisKKyM6IGdpdGs6OTI5OQorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC30LAg0LXRgtC40LrQtdGCOiIKKworIzogZ2l0azo5MzAzIGdpdGs6OTQ3NAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjkzMjEKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQuNC80LUg0L3QsCDQtdGC0LjQutC10YIiCisKKyM6IGdpdGs6OTMyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItCV0YLQuNC60LXRgtGK0YIg4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGdpdGs6OTMzNQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC10YLQuNC60LXRgjoiCisKKyM6IGdpdGs6OTQyNQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICLQmtC+0LzQsNC90LTQsDoiCisKKyM6IGdpdGs6OTQzMworbXNnaWQgIldyaXRlIgorbXNnc3RyICLQl9Cw0L/QsNC30LLQsNC90LUiCisKKyM6IGdpdGs6OTQ1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QsNC30LLQsNC90LXRgtC+INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L46IgorCisjOiBnaXRrOjk0NzMKK21zZ2lkICJDcmVhdGUgYnJhbmNoIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQutC70L7QvSIKKworIzogZ2l0azo5NDg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVuYW1lIGJyYW5jaCAlcyIKK21zZ3N0ciAi0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCIKKworIzogZ2l0azo5NDkwCittc2dpZCAiUmVuYW1lIgorbXNnc3RyICLQn9GA0LXQuNC80LXQvdGD0LLQsNC90LUiCisKKyM6IGdpdGs6OTUxNAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICLQmNC80LU6IgorCisjOiBnaXRrOjk1MzgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQo9C60LDQttC10YLQtSDQuNC80LUg0LfQsCDQvdC+0LLQuNGPINC60LvQvtC9IgorCisjOiBnaXRrOjk1NDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwLiDQlNCwINCx0YrQtNC1INC70Lgg0L/RgNC10LfQsNC/0LjRgdCw0L0/IgorCisjOiBnaXRrOjk1ODcKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5ldyBuYW1lIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLQo9C60LDQttC10YLQtSDQvdC+0LLQviDQuNC80LUg0LfQsCDQutC70L7QvdCwIgorCisjOiBnaXRrOjk2NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINCy0LXRh9C1INC1INCy0LrQu9GO0YfQtdC90L4g0LIg0LrQu9C+0L3QsCDigJ4lc+KAnCDigJQg0LTQsCDQsdGK0LTQtSDQu9C4INC/0YDQuNC70L7QttC10L3QviDQvtGC0L3QvtCy0L4/IgorCisjOiBnaXRrOjk2NTUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAi0J7RgtCx0LjRgNCw0L3QtSIKKworIzogZ2l0azo5NjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LHQuNGA0LDQvdC1LCDQt9Cw0YnQvtGC0L4g0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwg0LjQvNCwINC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4LlxuIgorItCf0L7QtNCw0LnRgtC1LCDQt9Cw0L3Rg9C70LXRgtC1INC40LvQuCDQs9C4INGB0LrQsNGC0LDQudGC0LUg0Lgg0L/RgNC+0LHQstCw0LnRgtC1INC+0YLQvdC+0LLQvi4iCisKKyM6IGdpdGs6OTY3MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LHQuNGA0LDQvdC1INC/0L7RgNCw0LTQuCDQutC+0L3RhNC70LjQutGC0Lgg0L/RgNC4INGB0LvQuNCy0LDQvdC1LlxuIgorItCY0YHQutCw0YLQtSDQu9C4INC00LAg0LPQuCDQutC+0YDQuNCz0LjRgNCw0YLQtSDRh9GA0LXQtyDigJ5naXQgY2l0b29s4oCcPyIKKworIzogZ2l0azo5Njg2IGdpdGs6OTc0NAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICLQndC1INGB0LAg0L/QvtC00LDQtNC10L3QuCDQv9GA0L7QvNC10L3QuCIKKworIzogZ2l0azo5NzEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC90LUg0LUg0LLQutC70Y7Rh9C10L3QviDQsiDQutC70L7QvdCwIOKAniVz4oCcLiDQlNCwINCx0YrQtNC1INC70Lgg0L7RgtC80LXQvdC10L3Qvj8iCisKKyM6IGdpdGs6OTcxOAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAi0J7RgtC80Y/QvdCwIgorCisjOiBnaXRrOjk3MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QsCDQvtGC0LzRj9C90LAsINC30LDRidC+0YLQviDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnCDQuNC80LAg0LvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90LguXG4iCisi0J/QvtC00LDQudGC0LUsINC30LDQvdGD0LvQtdGC0LUg0LjQu9C4INCz0Lgg0YHQutCw0YLQsNC50YLQtSDQuCDQv9GA0L7QsdCy0LDQudGC0LUg0L7RgtC90L7QstC+LiIKKworIzogZ2l0azo5NzMwCittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0L7RgtC80Y/QvdCwINC/0L7RgNCw0LTQuCDQutC+0L3RhNC70LjQutGC0Lgg0L/RgNC4INGB0LvQuNCy0LDQvdC1LlxuIgorItCY0YHQutCw0YLQtSDQu9C4INC00LAg0LPQuCDQutC+0YDQuNCz0LjRgNCw0YLQtSDRh9GA0LXQtyDigJ5naXQgY2l0b29s4oCcPyIKKworIzogZ2l0azo5NzczCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAi0J/QvtGC0LLRitGA0LbQtNCw0LLQsNC90LUg0L3QsCDQt9Cw0L3Rg9C70Y/QstCw0L3QtdGC0L4iCisKKyM6IGdpdGs6OTc3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgItCU0LAg0YHQtSDQt9Cw0L3Rg9C70Lgg0LvQuCDQutC70L7QvdGK0YIg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcPyIKKworIzogZ2l0azo5Nzc3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgItCS0LjQtCDQt9Cw0L3Rg9C70Y/QstCw0L3QtToiCisKKyM6IGdpdGs6OTc4MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICLQodC70LDQsdC+OiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQuCDQuNC90LTQtdC60YHQsCDQvtGB0YLQsNCy0LDRgiDRgdGK0YnQuNGC0LUiCisKKyM6IGdpdGs6OTc4MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAi0KHQvNC10YHQtdC90L46INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC+0YHRgtCw0LLQsCDRgdGK0YnQvtGC0L4sINC40L3QtNC10LrRgdGK0YIg0YHQtSDQt9Cw0L3Rg9C70Y/QstCwIgorCisjOiBnaXRrOjk3ODYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorItCh0LjQu9C90L46INC30LDQvdGD0LvRj9Cy0LDQvdC1INC4INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4sINC4INC90LAg0LjQvdC00LXQutGB0LBcbiIKKyIo0JLQodCY0KfQmtCYINC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4g0LfQsNCz0YPQsdC10L3QuCkiCisKKyM6IGdpdGs6OTgwMworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAi0JfQsNC90YPQu9GP0LLQsNC90LUiCisKKyM6IGdpdGs6OTg3NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkEgbG9jYWwgYnJhbmNoIG5hbWVkICVzIGV4aXN0cyBhbHJlYWR5IgorbXNnc3RyICLQktC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQu9C+0LrQsNC70LXQvSDQutC70L7QvSDigJ4lc+KAnC4iCisKKyM6IGdpdGs6OTg4NAorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1IgorCisjOiBnaXRrOjk5NDMKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICLQotC10LrRg9GJ0L4g0LjQt9GC0LXQs9C70LXQvdC40Y/RgiDQutC70L7QvSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBnaXRrOjk5NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorItCf0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QsCDQutC70L7QvdCwIOKAniVz4oCcINC90LUg0YHQsCDQvdCwINC90LjQutC+0Lkg0LTRgNGD0LMg0LrQu9C+0L0uXG4iCisi0J3QsNC40YHRgtC40L3QsCDQu9C4INC40YHQutCw0YLQtSDQtNCwINC40LfRgtGA0LjQtdGC0LUg0LrQu9C+0L3QsCDigJ4lc+KAnD8iCisKKyM6IGdpdGs6OTk4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAi0JXRgtC40LrQtdGC0Lgg0Lgg0LLRitGA0YXQvtCy0LU6ICVzIgorCisjOiBnaXRrOjk5OTcKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgItCk0LjQu9GC0YDQuNGA0LDQvdC1IgorCisjOiBnaXRrOjEwMjkzCittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisi0JPRgNC10YjQutCwINC/0YDQuCDQv9GA0L7Rh9C40YLQsNC90LXRgtC+INC90LAg0YLQvtC/0L7Qu9C+0LPQuNGP0YLQsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAuINCY0L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINC60LvQvtC90LAgIgorItC4INC/0YDQtdC00YjQtdGB0YLQstCw0YnQuNGC0LUv0YHQu9C10LTQstCw0YnQuNGC0LUg0LXRgtC40LrQtdGC0Lgg0YnQtSDQtSDQvdC10L/RitC70L3QsC4iCisKKyM6IGdpdGs6MTEyNzAKK21zZ2lkICJUYWciCittc2dzdHIgItCV0YLQuNC60LXRgiIKKworIzogZ2l0azoxMTI3NAorbXNnaWQgIklkIgorbXNnc3RyICLQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCIKKworIzogZ2l0azoxMTM1NworbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICLQmNC30LHQvtGAINC90LAg0YjRgNC40YTRgiDQt9CwIEdpdGsiCisKKyM6IGdpdGs6MTEzNzQKK21zZ2lkICJCIgorbXNnc3RyICLQpyIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIkkiCittc2dzdHIgItCaIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGdpdGs6MTE0OTgKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQvdCwINGI0LjRgNC+0YfQuNC90LAg0L3QsCDQs9GA0LDRhNCwICjQsiDRgNC10LTQvtCy0LUpIgorCisjOiBnaXRrOjExNTAyCisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAi0JzQsNC60YHQuNC80LDQu9C90LAg0YjQuNGA0L7Rh9C40L3QsCDQvdCwINCz0YDQsNGE0LAgKCUg0L7RgiDQv9Cw0L3QtdC70LApIgorCisjOiBnaXRrOjExNTA1Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90LgiCisKKyM6IGdpdGs6MTE1MDgKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQvdC+INC40LfQsdC40YDQsNC90LUg0L3QsCBTSEExICjQtNGK0LvQttC40L3QsCkiCisKKyM6IGdpdGs6MTE1MTIKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICLQodC60YDQuNCy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogZ2l0azoxMTUxNgorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L3QsCDQv9C+0LrQsNC30LLQsNC90LXRgtC+INC90LAg0YDQsNC30LvQuNC60LjRgtC1IgorCisjOiBnaXRrOjExNTE4Cittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgItCo0LjRgNC+0YfQuNC90LAg0L3QsCDRgtCw0LHRg9C70LDRgtC+0YDQsCIKKworIzogZ2l0azoxMTUyMQorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINCx0LvQuNC30LrQuNGC0LUg0LXRgtC40LrQtdGC0Lgg0Lgg0LLRitGA0YXQvtCy0LUiCisKKyM6IGdpdGs6MTE1MjQKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICLQnNCw0LrRgdC40LzQsNC70LXQvSDQsdGA0L7QuSDQtdGC0LjQutC10YLQuC/QstGK0YDRhdC+0LLQtSDQt9CwINC/0L7QutCw0LfQstCw0L3QtSIKKworIzogZ2l0azoxMTUyNworbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LAg0YHQsNC80L4g0LIg0LjQt9Cx0YDQsNC90LjRgtC1INC/0YrRgtC40YnQsCIKKworIzogZ2l0azoxMTUzMAorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICLQn9C+0LTQtNGA0YrQttC60LAg0L3QsCDRgNCw0LfQu9C40YfQvdC4INC60L7QtNC40YDQsNC90LjRjyDQt9CwINCy0YHQtdC60Lgg0YTQsNC50LsiCisKKyM6IGdpdGs6MTE1MzYgZ2l0azoxMTY4MworbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAi0JLRitC90YjQtdC9INC40L3RgdGC0YDRg9C80LXQvdGCINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MTE1MzcKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgItCY0LfQsdC+0YDigKYiCisKKyM6IGdpdGs6MTE1NDIKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgItCe0LHRidC4INC90LDRgdGC0YDQvtC50LrQuCIKKworIzogZ2l0azoxMTU0NQorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgtC10LzQsCDQt9CwINCz0YDQsNGE0LjRh9C90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogZ2l0azoxMTU0NworbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIijQv9GA0L7QvNGP0L3QsNGC0LAg0LjQt9C40YHQutCy0LAg0YDQtdGB0YLQsNGA0YLQuNGA0LDQvdC1INC90LAgR2l0aykiCisKKyM6IGdpdGs6MTE1NDkKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKNCyINC80L7QvNC10L3RgtCwINC90LXQtNC+0YHRgtGK0L/QvdC+KSIKKworIzogZ2l0azoxMTU2MAorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLQptCy0LXRgtC+0LLQtTog0LjQt9Cx0LjRgNCwINGB0LUg0YEg0L3QsNGC0LjRgdC60LDQvdC1IgorCisjOiBnaXRrOjExNTYzCittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICLQmNC90YLQtdGA0YTQtdC50YEiCisKKyM6IGdpdGs6MTE1NjQKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgItC40L3RgtC10YDRhNC10LnRgSIKKworIzogZ2l0azoxMTU2NworbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgItCk0L7QvSIKKworIzogZ2l0azoxMTU2OCBnaXRrOjExNTk4Cittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAi0YTQvtC9IgorCisjOiBnaXRrOjExNTcxCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAi0JfQvdCw0YbQuCIKKworIzogZ2l0azoxMTU3MgorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgItC30L3QsNGG0LgiCisKKyM6IGdpdGs6MTE1NzUKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgItCg0LDQt9C70LjQutCwOiDRgdGC0LDRgNC4INGA0LXQtNC+0LLQtSIKKworIzogZ2l0azoxMTU3NgorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsCwg0YHRgtCw0YDQuCDRgNC10LTQvtCy0LUiCisKKyM6IGdpdGs6MTE1ODAKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgItCg0LDQt9C70LjQutCwOiDQvdC+0LLQuCDRgNC10LTQvtCy0LUiCisKKyM6IGdpdGs6MTE1ODEKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LAsINC90L7QstC4INGA0LXQtNC+0LLQtSIKKworIzogZ2l0azoxMTU4NQorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICLQoNCw0LfQu9C40LrQsDog0L3QsNGH0LDQu9C+INC90LAg0L/QsNGA0YfQtSIKKworIzogZ2l0azoxMTU4NworbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgItGA0LDQt9C70LjQutCwLCDQvdCw0YfQsNC70L4g0L3QsCDQv9Cw0YDRh9C1IgorCisjOiBnaXRrOjExNTkxCittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgItCk0L7QvSDQvdCwINC+0YLQsdC10LvRj9C30LDQvSDRgNC10LQiCisKKyM6IGdpdGs6MTE1OTMKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICLRhNC+0L0g0L3QsCDQvtGC0LHQtdC70Y/Qt9Cw0L0g0YDQtdC0IgorCisjOiBnaXRrOjExNTk3Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICLQmNC30LHQvtGAINC90LAg0YTQvtC9IgorCisjOiBnaXRrOjExNjA2Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi0KjRgNC40YTRgtC+0LLQtTog0LjQt9Cx0LjRgNCwINGB0LUg0YEg0L3QsNGC0LjRgdC60LDQvdC1IgorCisjOiBnaXRrOjExNjA4Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICLQntGB0L3QvtCy0LXQvSDRiNGA0LjRhNGCIgorCisjOiBnaXRrOjExNjA5Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgItCo0YDQuNGE0YIg0LfQsCDRgNCw0LfQu9C40LrQuNGC0LUiCisKKyM6IGdpdGs6MTE2MTAKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICLQqNGA0LjRhNGCINC90LAg0LjQvdGC0LXRgNGE0LXQudGB0LAiCisKKyM6IGdpdGs6MTE2MzIKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L3QsCBHaXRrIgorCisjOiBnaXRrOjExNjQxCittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAi0J7QsdGJ0LgiCisKKyM6IGdpdGs6MTE2NDIKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgItCm0LLQtdGC0L7QstC1IgorCisjOiBnaXRrOjExNjQzCittc2dpZCAiRm9udHMiCittc2dzdHIgItCo0YDQuNGE0YLQvtCy0LUiCisKKyM6IGdpdGs6MTE2OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiDQuNC30LHQvtGAINC90LAg0YbQstGP0YIg0L3QsCDigJ4lc+KAnCIKKworIzogZ2l0azoxMjIwNgorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAiIgorItCi0LDQt9C4INCy0LXRgNGB0LjRjyDQvdCwIFRjbC9UayDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQvtGCIEdpdGsuXG4iCisiINCd0LXQvtCx0YXQvtC00LjQvNCwINCy0Lgg0LUg0L/QvtC90LUgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTI0MTYKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICLQotGD0Log0LvQuNC/0YHQstCwINGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdC4iCisKKyM6IGdpdGs6MTI0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgItCd0LXQtdC00L3QvtC30L3QsNGH0LXQvSDQsNGA0LPRg9C80LXQvdGCIOKAniVz4oCcOiDQuNC80LAg0Lgg0YLQsNC60LDQstCwINCy0LXRgNGB0LjRjywg0Lgg0YLQsNC60YrQsiDRhNCw0LnQuyIKKworIzogZ2l0azoxMjQ3NQorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC4INCw0YDQs9GD0LzQtdC90YLQuCDQvdCwIGdpdGs6IgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vY2EucG8gYi9naXRrLWdpdC9wby9jYS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2RmYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vY2EucG8KQEAgLTAsMCArMSwxMzY5IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMgQWxleCBIZW5yaWUgPGFsZXhoZW5yaWUyNEBnbWFpbC5jb20+LCAyMDE1LgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAxNDozMisxMDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0xMC0wNSAyMjoyMy0wNjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGV4IEhlbnJpZSA8YWxleGhlbnJpZTI0QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDYXRhbGFuXG4iCisiTGFuZ3VhZ2U6IGNhXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjguNVxuIgorCisjOiBnaXRrOjE0MAorbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnRlbmlyIGxhIGxsaXN0YSBkZSBmaXR4ZXJzIG5vIGZ1c2lvbmF0czoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICJDb2xvcmEgbGVzIHBhcmF1bGVzIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MworbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAiTWFyY2EgbGVzIHBhcmF1bGVzIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRXJyb3IgZW4gYW5hbGl0emFyIGxlcyByZXZpc2lvbnM6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkVycm9yIGVuIGV4ZWN1dGFyIGwnb3JkcmUgLS1hcmdzY21kOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJObyBoaSBoYSBmaXR4ZXJzIHNlbGVjY2lvbmF0czogcydoYSBlc3BlY2lmaWNhdCAtLW1lcmdlIHBlcsOyIGNhcCBmaXR4ZXIgZXN0w6AgIgorInNlbnNlIGZ1c2lvbmFyLiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIk5vIGhpIGhhIGZpdHhlcnMgc2VsZWNjaW9uYXRzOiBzJ2hhIGVzcGVjaWZpY2F0IC0tbWVyZ2UgcGVyw7IgY2FwIGZpdHhlciAiCisic2Vuc2UgZnVzaW9uYXIgZXN0w6AgZGlucyBkZWwgbMOtbWl0IGRlIGZpdHhlcnMuIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiRXJyb3IgZW4gZXhlY3V0YXIgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGxlZ2ludCIKKworIzogZ2l0azo0OTYgZ2l0azo0NTI1Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMbGVnaW50IGxlcyByZXZpc2lvbnMuLi4iCisKKyM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjgKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJDYXAgY29taXNzacOzIHNlbGVjY2lvbmFkYSIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA0NSBnaXRrOjEyNDMyCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJMw61uaWEgZCdvcmRyZXMiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiTm8gZXMgcG90IGFuYWxpdHphciBsYSBzb3J0aWRhIGRlbCBnaXQgbG9nOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiQ2FwIGluZm9ybWFjacOzIGRlIGNvbWlzc2nDsyBkaXNwb25pYmxlIgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMxNSBnaXRrOjk2NjkgZ2l0azoxMTI0MSBnaXRrOjExNTIxCittc2dpZCAiT0siCittc2dzdHIgIkQnYWNvcmQiCisKKyM6IGdpdGs6MTkzNCBnaXRrOjQzMTcgZ2l0azo5MTk2IGdpdGs6OTI3NSBnaXRrOjkzOTEgZ2l0azo5NDQwIGdpdGs6OTY3MQorIzogZ2l0azoxMTI0MiBnaXRrOjExNTIyCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJDYW5jZWzCt2xhIgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICJBY3R1YWxpdHphIgorCisjOiBnaXRrOjIwNzAKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICJSZWNhcnJlZ2EiCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiUmVsbGVnZWl4IGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkxsaXN0YSBsZXMgcmVmZXLDqG5jaWVzIgorCisjOiBnaXRrOjIwNzQKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAiSW5pY2lhIGVsIGdpdCBndWkiCisKKyM6IGdpdGs6MjA3NgorbXNnaWQgIiZRdWl0IgorbXNnc3RyICJTdXJ0IgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiRml0eGVyIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcsOobmNpZXMiCisKKyM6IGdpdGs6MjA3OQorbXNnaWQgIiZFZGl0IgorbXNnc3RyICJFZGl0YSIKKworIzogZ2l0azoyMDg0Cittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICJWaXN0YSBub3ZhLi4uIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICJFZGl0YSBsYSB2aXN0YS4uLiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJTdXByaW1laXggbGEgdmlzdGEiCisKKyM6IGdpdGs6MjA4OCBnaXRrOjQwNDMKK21zZ2lkICImQWxsIGZpbGVzIgorbXNnc3RyICJUb3RzIGVscyBmaXR4ZXJzIgorCisjOiBnaXRrOjIwODMgZ2l0azo0MDY3Cittc2dpZCAiJlZpZXciCittc2dzdHIgIlZpc3RhIgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICJRdWFudCBhbCBnaXRrIgorCisjOiBnaXRrOjIwOTQgZ2l0azoyMTA4Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiQXNzb2NpYWNpb25zIGRlIHRlY2xlcyIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICJBanVkYSIKKworIzogZ2l0azoyMTg1IGdpdGs6ODY1MgorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJJRCBTSEExOiIKKworIzogZ2l0azoyMjI5Cittc2dpZCAiUm93IgorbXNnc3RyICJGaWxhIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJDZXJjYSIKKworIzogZ2l0azoyMjk1Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJjb21pc3Npw7MiCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgInF1ZSBjb250aW5ndWk6IgorCisjOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgInF1ZSB0b3F1aSBlbHMgY2FtaW5zOiIKKworIzogZ2l0azoyMzAzIGdpdGs6NDc3NworbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICJxdWUgYWZlZ2VpeGkvZWxpbWluaSBsYSBjYWRlbmE6IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICJxdWUgdGluZ3VpIGzDrW5pZXMgY2FudmlhZGVzIGNvaW5jaWRlbnRzIGFtYjoiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWN0ZSIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJJZ25vcmEgbWFqw7pzY3VsYSBpIG1pbsO6c2N1bGEiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiUmVnZXhwIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUb3RzIGVscyBjYW1wcyIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlRpdHVsYXIiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NjkxNiBnaXRrOjczODkKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiQ29tZW50YXJpcyIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCisjOiBnaXRrOjg4NDUKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIkF1dG9yIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIkNvbWl0ZW50IgorCisjOiBnaXRrOjIzNTAKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIkNlcmNhIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZlcsOobmNpYSIKKworIzogZ2l0azoyMzYwCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIlZlcnNpw7MgYW50aWdhIgorCisjOiBnaXRrOjIzNjIKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDsyBub3ZhIgorCisjOiBnaXRrOjIzNjQKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJMw61uaWVzIGRlIGNvbnRleHQiCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yYSBjYW52aXMgZCdlc3BhaSIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICJEaWZlcsOobmNpYSBkZSBsw61uaWVzIgorCisjOiBnaXRrOjI0NDUKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiUGVkYcOnIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICJBcmJyZSIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZXJlbmNpYSBhcXVlc3RhIC0+IGxhIHNlbGVjY2lvbmFkYSIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZXJlbmNpYSBsYSBzZWxlY2Npb25hZGEgLT4gYXF1ZXN0YSIKKworIzogZ2l0azoyNjE5IGdpdGs6MjYzOQorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIkZlcyBwZWRhw6ciCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJDcmVhIGV0aXF1ZXRhIgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIkVzY3JpdSBsYSBjb21pc3Npw7MgYSB1biBmaXR4ZXIiCisKKyM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQ3JlYSB1bmEgYnJhbmNhIG5vdmEiCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJSZWN1bGwgYXF1ZXN0YSBjb21pc3Npw7MgY29tIGEgY2lyZXJhIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSZXN0YWJsZWl4IGxhIGJyYW5jYSBIRUFEIGFxdcOtIgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJNYXJjYSBhcXVlc3RhIGNvbWlzc2nDsyIKKworIzogZ2l0azoyNjI2Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIlRvcm5hIGEgbGEgbWFyY2EiCisKKyM6IGdpdGs6MjYyNworbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJUcm9iYSBsYSBkZXNjZW5kZW50IGQnYXF1ZXN0YSBpIG1hcmNhLWxhIgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiQ29tcGFyYSBhbWIgbGEgY29taXNzacOzIG1hcmNhZGEiCisKKyM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiRGlmZXJlbmNpYSBhcXVlc3RhIC0+IGxhIGNvbWlzc2nDsyBtYXJjYWRhIgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIkRpZmVyZW5jaWEgbGEgY29taXNzacOzIHNlbGVjY2lvbmFkYSAtPiBhcXVlc3RhIgorCisjOiBnaXRrOjI2MzEKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgIlJldmVydGVpeCBhcXVlc3RhIGNvbWlzc2nDsyIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJBZ2FmYSBhcXVlc3RhIGJyYW5jYSIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJFbGltaW5hIGFxdWVzdGEgYnJhbmNhIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICJDb3BpYSBlbCBub20gZGUgYnJhbmNhIgorCisjOiBnaXRrOjI2NTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIlJlc3NhbHRhIGFxdWVzdCB0YW1iw6kiCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIlJlc3NhbHRhIG5vbcOpcyBhcXVlc3QiCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIkRpZmVyw6huY2lhIGV4dGVybmEiCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIkN1bHBhYmlsaXRhdCBkZSBsYSBjb21pc3Npw7MgbWFyZSIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICJDb3BpYSBlbCBjYW3DrSIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJNb3N0cmEgbCdvcmlnZW4gZCdhcXVlc3RhIGzDrW5pYSIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJFeGVjdXRhIGdpdCBndWkgYmxhbWUgZW4gYXF1ZXN0YSBsw61uaWEiCisKKyM6IGdpdGs6MzAxNAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSB2aXN1YWxpdHphZG9yIGRlIGNvbWlzc2lvbnMgcGVyIGFsIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2V1LWxvIGkgcmVkaXN0cmlidcOvdS1sbyBzb3RhIGVscyB0ZXJtZXMgZGUgbGEgTGxpY8OobmNpYSBQw7pibGljYSBHZW5lcmFsIEdOVSIKKworIzogZ2l0azozMDIyIGdpdGs6MzA4OSBnaXRrOjk4NTcKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiVGFuY2EiCisKKyM6IGdpdGs6MzA0MworbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJBc3NvY2lhY2lvbnMgZGUgdGVjbGVzIGRlbCBHaXRrIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkFzc29jaWFjaW9ucyBkZSB0ZWNsZXMgZGVsIEdpdGs6IgorCisjOiBnaXRrOjMwNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdFN1cnQiCisKKyM6IGdpdGs6MzA0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1XPlx0XHRUYW5jYSBsYSBmaW5lc3RyYSIKKworIzogZ2l0azozMDUwCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SW5pY2k+XHRcdFbDqXMgYSBsYSBwcmltZXJhIGNvbWlzc2nDsyIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEZpPlx0XHRWw6lzIGEgbCfDumx0aW1hIGNvbWlzc2nDsyIKKworIzogZ2l0azozMDUyCittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8QW11bnQ+LCBwLCBrXHRNb3UtdGUgY2FwIGFtdW50IHBlciB1bmEgY29taXNzacOzIgorCisjOiBnaXRrOjMwNTMKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8QXZhbGw+LCBuLCBqXHRNb3UtdGUgY2FwIGF2YWxsIHBlciB1bmEgY29taXNzacOzIgorCisjOiBnaXRrOjMwNTQKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8RXNxdWVycmE+LCB6LCBoXHRSZXRyb2NlZGVpeCBlbiBsYSBsbGlzdGEgZCdoaXN0w7JyaWEiCisKKyM6IGdpdGs6MzA1NQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8RHJldGE+LCB4LCBsXHRBdmFuw6dhIGVuIGxhIGxsaXN0YSBkJ2hpc3TDsnJpYSIKKworIzogZ2l0azozMDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIiIKKyI8JXMtbj5cdFbDqXMgYSBsJ2Vuw6hzaW1hIG1hcmUgZGUgbGEgY29taXNzacOzIGFjdHVhbCBlbiBsYSBsbGlzdGEgZCdoaXN0w7JyaWEiCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UmVQw6BnPlx0TW91LXRlIGNhcCBhbXVudCBwZXIgdW5hIHDDoGdpbmEgZW4gbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMiCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEF2UMOgZz5cdE1vdS10ZSBjYXAgYXZhbGwgcGVyIHVuYSBww6BnaW5hIGVuIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIgorCisjOiBnaXRrOjMwNTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1JbmljaT5cdERlc3BsYcOnYSd0IGEgbGEgcGFydCBzdXBlcmlvciBkZSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1GaT5cdERlc3BsYcOnYSd0IGEgbGEgcGFydCBpbmZlcmlvciBkZSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtQW11bnQ+XHREZXNwbGHDp2EgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMgY2FwIGFtdW50IHBlciB1bmEgbMOtbmlhIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtQXZhbGw+XHREZXNwbGHDp2EgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMgY2FwIGF2YWxsIHBlciB1bmEgbMOtbmlhIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUmVQw6BnPlx0RGVzcGxhw6dhIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIGNhcCBhbXVudCBwZXIgdW5hIHDDoGdpbmEiCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQXZQw6BnPlx0RGVzcGxhw6dhIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIGNhcCBhdmFsbCBwZXIgdW5hIHDDoGdpbmEiCisKKyM6IGdpdGs6MzA2NQorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPE1hai1BbXVudD5cdENlcmNhIGNhcCBlbnJlcmUgKGNhcCBhbXVudCwgbGVzIGNvbWlzc2lvbnMgbcOpcyBub3ZlcykiCisKKyM6IGdpdGs6MzA2NgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8TWFqLUF2YWxsPlx0Q2VyY2EgY2FwIGVuZGF2YW50IChjYXAgYXZhbGwsIGxlcyBjb21pc3Npb25zIG3DqXMgdmVsbGVzKSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxTdXByPiwgYlx0RGVzcGxhw6dhIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIGNhcCBhbXVudCBwZXIgdW5hIHDDoGdpbmEiCisKKyM6IGdpdGs6MzA2OAorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8UmV0cm9jw6lzPlx0RGVzcGxhw6dhIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIGNhcCBhbXVudCBwZXIgdW5hIHDDoGdpbmEiCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8RXNwYWk+XHRcdERlc3BsYcOnYSBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSBjYXAgYXZhbGwgcGVyIHVuYSBww6BnaW5hIgorCisjOiBnaXRrOjMwNzAKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0RGVzcGxhw6dhIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIGNhcCBhbXVudCBwZXIgMTggbMOtbmllcyIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0RGVzcGxhw6dhIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIGNhcCBhdmFsbCBwZXIgMTggbMOtbmllcyIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRDZXJjYSIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdE1vdS10ZSBhIGxhIHByb3BlcmEgY29pbmNpZMOobmNpYSBkZSBsYSBjZXJjYSIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldG9ybj5cdE1vdS10ZSBhIGxhIHByb3BlcmEgY29pbmNpZMOobmNpYSBkZSBsYSBjZXJjYSIKKworIzogZ2l0azozMDc1Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx0VsOpcyBhIGwnw7psdGltYSBjb21pc3Npw7MiCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0UG9zYSBlbCBmb2N1cyBhIGxhIGNhaXhhIGRlIGNlcmNhIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0TW91IGEgbGEgY29pbmNpZMOobmNpYSBwcsOodmlhIGRlIGxhIGNlcmNhIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdERlc3BsYcOnYSBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSBhbCBwcm9wZXIgZml0eGVyIgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRDZXJjYSBsYSBwcm9wZXJhIGNvaW5jaWTDqG5jaWEgZW4gbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRDZXJjYSBsYSBjb2luY2lkw6huY2lhIHByw6h2aWEgZW4gbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEiCisKKyM6IGdpdGs6MzA4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHRBdWdtZW50YSBsYSBtaWRhIGRlIGxsZXRyYSIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1tw6lzPlx0QXVnbWVudGEgbGEgbWlkYSBkZSBsbGV0cmEiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHREaXNtaW51ZWl4IGxhIG1pZGEgZGUgbGxldHJhIgorCisjOiBnaXRrOjMwODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1tZW55cz5cdERpc21pbnVlaXggbGEgbWlkYSBkZSBsbGV0cmEiCisKKyM6IGdpdGs6MzA4NQorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEFjdHVhbGl0emEiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJyb3IgZW4gY3JlYXIgZWwgZGlyZWN0b3JpIHRlbXBvcmFsICVzOiIKKworIzogZ2l0azozNTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkVycm9yIGVuIG9idGVuaXIgXCIlc1wiIGRlICVzOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJsJ29yZHJlIGhhIGZhbGxhdDoiCisKKyM6IGdpdGs6Mzc4NAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJDYXAgY29taXNzacOzIGFpeMOtIgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IGwnb3JkcmUgaGEgZmFsbGF0OiIKKworIzogZ2l0azozODI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgY2FwIGRlIGZ1c2nDszogJXMiCisKKyM6IGdpdGs6MzgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJFcnJvciBlbiBsbGVnaXIgbCfDrW5kZXg6ICVzIgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGluaWNpYXIgZWwgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozODY1IGdpdGs6Njc1NAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiQ2VyY2FudCIKKworIzogZ2l0azozODk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJFcnJvciBlbiBleGVjdXRhciBlbCBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICIiCisiQXF1ZWxsYSBsw61uaWEgdmUgZGUgbGEgY29taXNzacOzICVzLCBsYSBxdWFsIG5vIMOpcyBlbiBhcXVlc3RhIHZpc3VhbGl0emFjacOzIgorCisjOiBnaXRrOjM5MzkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJFbCB2aXN1YWxpdHphZG9yIGRlIGRpZmVyw6huY2lhIGV4dGVybiBoYSBmYWxsYXQ6IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pY2nDsyBkZSB2aXN0YSBkZWwgR2l0ayIKKworIzogZ2l0azo0MDc0Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJSZWNvcmRhIGFxdWVzdGEgdmlzdGEiCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIlJlZmVyw6huY2llcyAobGxpc3RhIHNlcGFyYWRhIHBlciBlc3BhaXMpIgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJCcmFucXVlcyBpIGV0aXF1ZXRlczoiCisKKyM6IGdpdGs6NDA3NworbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJUb3RlcyBsZXMgcmVmZXLDqG5jaWVzIgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiVG90ZXMgbGVzIGJyYW5xdWVzIChsb2NhbHMpIgorCisjOiBnaXRrOjQwNzkKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiVG90ZXMgbGVzIGV0aXF1ZXRlcyIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiVG90ZXMgbGVzIGJyYW5xdWVzIGFtYiBzZWd1aW1lbnQgcmVtb3QiCisKKyM6IGdpdGs6NDA4MQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkluZm9ybWFjacOzIGRlIGNvbWlzc2nDsyAoZXhwcmVzc2lvbnMgcmVndWxhcnMpOiIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3I6IgorCisjOiBnaXRrOjQwODMKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJDb21pdGVudDoiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWlzc2F0Z2UgZGUgY29taXNzacOzOiIKKworIzogZ2l0azo0MDg1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkNvaW5jaWRlaXggYW1iIHRvdHMgZWxzIGNyaXRlcmlzIGQnaW5mb3JtYWNpw7MgZGUgY29taXNzacOzIgorCisjOiBnaXRrOjQwODYKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJObyBjb2luY2lkZWl4IGFtYiBjYXAgY3JpdGVyaSBkJ2luZm9ybWFjacOzIGRlIGNvbWlzc2nDsyIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIkNhbnZpcyBhbHMgZml0eGVyczoiCisKKyM6IGdpdGs6NDA4OAorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiQ2FkZW5hIGZpeGEiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiRXhwcmVzc2nDsyByZWd1bGFyIgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiQ2FkZW5hIGRlIGNlcmNhOiIKKworIzogZ2l0azo0MDkxCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiRGF0ZXMgZGUgY29taXNzacOzIChcImZhIDIgc2V0bWFuZXNcIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiMTcgYWJyIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEZXMgZGU6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkZpbnM6IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiTGltaXRhIG8gc2FsdGEgdW4gbm9tYnJlIGRlIHJldmlzaW9ucyAobm9tYnJlIGVudGVyIHBvc2l0aXUpIgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIk5vbWJyZSBhIG1vc3RyYXI6IgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIk5vbWJyZSBhIHNhbHRhcjoiCisKKyM6IGdpdGs6NDA5NworbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIk9wY2lvbnMgbWlzY2Vswrdsw6BuaWVzOiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJPcmRlbmEgZXN0cmljdGFtZW50IHBlciBkYXRhIgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiTWFyY2EgZWxzIGNvc3RhdHMgZGUgbGVzIGJyYW5xdWVzIgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkxpbWl0YSBhIGxhIHByaW1lcmEgbWFyZSIKKworIzogZ2l0azo0MTAxCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkhpc3TDsnJpYSBzZW56aWxsYSIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIlBhcsOgbWV0cmVzIGFkZGljaW9uYWxzIGFsIGdpdCBsb2c6IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiSW50cm9kdcOvdSBlbHMgZml0eGVycyBpIGRpcmVjdG9yaXMgYSBpbmNsb3VyZSwgdW4gcGVyIGzDrW5pYToiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJPcmRyZSBwZXIgYSBnZW5lcmFyIG3DqXMgY29taXNzaW9ucyBhIGluY2xvdXJlOiIKKworIzogZ2l0azo0MjI4Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiB2aXN0YSBkJ2VkaWNpw7MiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBjcml0ZXJpcyBwZXIgYSBzZWxlY2Npb25hciBsZXMgcmV2aXNpb25zIgorCisjOiBnaXRrOjQyNDEKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5vbSBkZSB2aXN0YSIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQXBsaWNhIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJyb3IgZW4gZWxzIHBhcsOgbWV0cmVzIGRlIHNlbGVjY2nDsyBkZSBjb21pc3Npb25zOiIKKworIzogZ2l0azo0NDA5IGdpdGs6NDQ2MiBnaXRrOjQ5MjQgZ2l0azo0OTM4IGdpdGs6NjIwOCBnaXRrOjEyMzczIGdpdGs6MTIzNzQKK21zZ2lkICJOb25lIgorbXNnc3RyICJDYXAiCisKKyM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEZXNjZW5kZW50IgorCisjOiBnaXRrOjUwMjIKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiTm8gZGVzY2VuZGVudCIKKworIzogZ2l0azo1MDI5IGdpdGs6NTAzNAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBdmFudHBhc3NhdCIKKworIzogZ2l0azo1MDMwCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJObyBhdmFudHBhc3NhdCIKKworIzogZ2l0azo1MzI0Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJDYW52aXMgbG9jYWxzIHJlZ2lzdHJhdHMgZW4gbCfDrW5kZXggcGVyw7Igbm8gY29tZXNvcyIKKworIzogZ2l0azo1MzYwCittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgIkNhbnZpcyBsb2NhbHMgc2Vuc2UgY29tZXRyZSwgbm8gcmVnaXN0cmF0cyBlbiBsJ8OtbmRleCIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAiaSBtb2x0ZXMgbcOpcyIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAibW9sdGVzIgorCisjOiBnaXRrOjczMjgKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiRXRpcXVldGVzOiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIk1hcmUiCisKKyM6IGdpdGs6NzM1NgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJGaWxsYSIKKworIzogZ2l0azo3MzY1Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJCcmFuY2EiCisKKyM6IGdpdGs6NzM2OAorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlNlZ3VlaXgiCisKKyM6IGdpdGs6NzM3MQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJQcmVjZWRlaXgiCisKKyM6IGdpdGs6Nzk2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJFcnJvciBlbiBvYnRlbmlyIGxlcyBkaWZlcsOobmNpZXM6ICVzIgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiVsOpcyBhOiIKKworIzogZ2l0azo4NjcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkwnaWQgU0hBMSBjdXJ0YSAlcyDDqXMgYW1iaWd1YSIKKworIzogZ2l0azo4Njc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMYSByZXZpc2nDsyAlcyDDqXMgZGVzY29uZWd1ZGEiCisKKyM6IGdpdGs6ODY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMJ2lkIFNIQTEgJXMgw6lzIGRlc2NvbmVndWRhIgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiTGEgcmV2aXNpw7MgJXMgbm8gw6lzIGVuIGxhIHZpc3RhIGFjdHVhbCIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGEiCisKKyM6IGdpdGs6ODgzNQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJGaWxsZXMiCisKKyM6IGdpdGs6ODg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSZXN0YWJsZWl4IGxhIGJyYW5jYSAlcyBhcXXDrSIKKworIzogZ2l0azo4OTAwCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIkNhcCBzZXBhcmF0OiBubyBlcyBwb3QgcmVzdGFibGlyIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiU2FsdGFudCBsYSBjb21pc3Npw7MgZGUgZnVzacOzICIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJyb3IgZW4gb2J0ZW5pciBsJ0lEIGRlIHBlZGHDpyBkZSAiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBhdHVyYW50XG4iCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJDb21pc3Npw7MgIgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiDDqXMgZWwgbWF0ZWl4IHBlZGHDpyBxdWVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgZGlmZXJlaXggZGVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDUKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiRGlmZXLDqG5jaWEgZW50cmUgY29taXNzaW9uczpcbiIKKyJcbiIKKworIzogZ2l0azo5MDU3IGdpdGs6OTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgdMOpICVzIGZpbGxlcyAtIGF0dXJhbnRcbiIKKworIzogZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkVycm9yIGVuIGVzY3JpdXJlIGxhIGNvbWlzc2nDsyBhbCBmaXR4ZXI6ICVzIgorCisjOiBnaXRrOjkwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJFcnJvciBlbiBkaWZlcmVuY2lhciBsZXMgY29taXNzaW9uczogJXMiCisKKyM6IGdpdGs6OTEzNworbXNnaWQgIlRvcCIKK21zZ3N0ciAiUGFydCBzdXBlcmlvciIKKworIzogZ2l0azo5MTM4Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRGUiCisKKyM6IGdpdGs6OTE0MworbXNnaWQgIlRvIgorbXNnc3RyICJBIgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiR2VuZXJhIHBlZGHDpyIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRlOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICJBOiIKKworIzogZ2l0azo5MTg3Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJ0ZWl4IgorCisjOiBnaXRrOjkxODkgZ2l0azo5Mzg1Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJGaXR4ZXIgZGUgc29ydGlkYToiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHZW5lcmEiCisKKyM6IGdpdGs6OTIzMworbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRXJyb3IgZW4gY3JlYXIgZWwgcGVkYcOnOiIKKworIzogZ2l0azo5MjU2IGdpdGs6OTM3MyBnaXRrOjk0MzAKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5MjY1Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb20gZCdldGlxdWV0YToiCisKKyM6IGdpdGs6OTI2OAorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJFbCBtaXNzYXRnZSBkJ2V0aXF1ZXRhIMOpcyBvcGNpb25hbCIKKworIzogZ2l0azo5MjcwCittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJNaXNzYXRnZSBkJ2V0aXF1ZXRhOiIKKworIzogZ2l0azo5Mjc0IGdpdGs6OTQzOQorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiQ3JlYSIKKworIzogZ2l0azo5MjkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJObyBzJ2hhIGVzcGVjaWZpY2F0IGNhcCBub20gZCdldGlxdWV0YSIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTCdldGlxdWV0YSBcIiVzXCIgamEgZXhpc3RlaXgiCisKKyM6IGdpdGs6OTMwNgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkVycm9yIGVuIGNyZWFyIGwnZXRpcXVldGE6IgorCisjOiBnaXRrOjkzODIKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiT3JkcmU6IgorCisjOiBnaXRrOjkzOTAKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiRXNjcml1IgorCisjOiBnaXRrOjk0MDgKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkVycm9yIGVuIGVzY3JpdXJlIGxhIGNvbWlzc2nDszoiCisKKyM6IGdpdGs6OTQzNQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOb206IgorCisjOiBnaXRrOjk0NTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJTaSB1cyBwbGF1LCBlc3BlY2lmaXF1ZXUgdW4gbm9tIHBlciBhIGxhIGJyYW5jYSBub3ZhIgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiTGEgYnJhbmNhICclcycgamEgZXhpc3RlaXguIFZvbGV1IHNvYnJlZXNjcml1cmU/IgorCisjOiBnaXRrOjk1MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIkxhIGNvbWlzc2nDsyAlcyBqYSBlc3TDoCBpbmNsb3NhIGVuIGxhIGJyYW5jYSAlcyAtLSByZWFsbWVudCB2b2xldSB0b3JuYXIgYSAiCisiYXBsaWNhci1sYT8iCisKKyM6IGdpdGs6OTUzNQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJSZWNvbGxpbnQgY2lyZXJlcyIKKworIzogZ2l0azo5NTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkVsIHJlY3VsbCBkZSBjaXJlcmVzIGhhIGZhbGxhdCBhIGNhdXNhIGRlIGNhbnZpcyBsb2NhbHMgYWwgZml0eGVyICclcycuXG4iCisiU2kgdXMgcGxhdSwgY29tZXRldSwgcmVzdGFibGl1IG8gZW1tYWdhdHplbWV1IGVscyB2b3N0cmVzIGNhbnZpcyBpIHRvcm5ldSBhICIKKyJpbnRlbnRhci4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkVsIHJlY3VsbCBkZSBjaXJlcmVzIGhhIGZhbGxhdCBhIGNhdXNhIGQndW4gY29uZmxpY3RlIGRlIGZ1c2nDsy5cbiIKKyJWb2xldSBleGVjdXRhciBlbCBnaXQgY2l0b29sIHBlciBhIHJlc29sZHJlJ2w/IgorCisjOiBnaXRrOjk1NjYgZ2l0azo5NjI0Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIkNhcCBjYW52aSBjb23DqHMiCisKKyM6IGdpdGs6OTU5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICIiCisiTGEgY29taXNzacOzICVzIG5vIHMnaW5jbG91IGVuIGxhIGJyYW5jYSAlcyAtLSByZWFsbWVudCB2b2xldSByZXZlcnRpci1sYT8iCisKKyM6IGdpdGs6OTU5OAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAiUmV2ZXJ0aW50IgorCisjOiBnaXRrOjk2MDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkxhIHJldmVyc2nDsyBoYSBmYWxsYXQgYSBjYXVzYSBkZSBjYW52aXMgbG9jYWxzIGFscyBmaXR4ZXJzIHNlZ8O8ZW50czolcyBTaSB1cyAiCisicGxhdSwgY29tZXRldSwgcmVzdGFibGl1IG8gZW1tYWdhdHplbWV1IGVscyB2b3N0cmVzIGNhbnZpcyBpIHRvcm5ldS1obyBhICIKKyJpbnRlbnRhci4iCisKKyM6IGdpdGs6OTYxMAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiTGEgcmV2ZXJzacOzIGhhIGZhbGxhdCBhIGNhdXNhIGQndW4gY29uZmxpY3RlIGRlIGZ1c2nDsy5cbiIKKyIgVm9sZXUgZXhlY3V0YXIgZWwgZ2l0IGNpdG9vbCBwZXIgYSByZXNvbGRyZSdsPyIKKworIzogZ2l0azo5NjUzCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQ29uZmlybWEgZWwgcmVzdGFibGltZW50IgorCisjOiBnaXRrOjk2NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICJWb2xldSByZXN0YWJsaXIgbGEgYnJhbmNhICVzIGEgJXM/IgorCisjOiBnaXRrOjk2NTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVGlwdXMgZGUgcmVzdGFibGltZW50OiIKKworIzogZ2l0azo5NjYwCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlN1YXU6IERlaXhhIGwnYXJicmUgZGUgdHJlYmFsbCBpIGwnw61uZGV4IHNlbnNlIHRvY2FyIgorCisjOiBnaXRrOjk2NjMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIk1peHQ6IERlaXhhIGwnYXJicmUgZGUgdHJlYmFsbCBzZW5zZSB0b2NhciwgcmVzdGFibGVpeCBsJ8OtbmRleCIKKworIzogZ2l0azo5NjY2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJEdXI6IFJlc3RhYmxlaXggbCdhcmJyZSBkZSB0cmViYWxsIGkgbCfDrW5kZXhcbiIKKyIoZGVzY2FydGEgVE9UUyBlbHMgY2FudmlzIGxvY2FscykiCisKKyM6IGdpdGs6OTY4MworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiUmVzdGFibGludCIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJBZ2FmYW50IgorCisjOiBnaXRrOjk3OTYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICJObyBlcyBwb3Qgc3VwcmltaXIgbGEgYnJhbmNhIGFjdHVhbG1lbnQgYWdhZmFkYSIKKworIzogZ2l0azo5ODAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJMZXMgY29taXNzaW9ucyBlbiBsYSBicmFuY2EgJXMgbm8gc8OzbiBlbiBjYXAgYWx0cmEgYnJhbmNhLlxuIgorIlJlYWxtZW50IHZvbGV1IHN1cHJpbWlyIGxhIGJyYW5jYSAlcz8iCisKKyM6IGdpdGs6OTgzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiRXRpcXVldGVzIGkgY2FwczogJXMiCisKKyM6IGdpdGs6OTg1MAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJlIgorCisjOiBnaXRrOjEwMTQ2Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRXJyb3IgZW4gbGxlZ2lyIGxhIGluZm9ybWFjacOzIGRlIHRvcG9sb2dpYSBkZSBjb21pc3Npw7M7IGxhIGluZm9ybWFjacOzIHNvYnJlICIKKyJicmFucXVlcyBpIGV0aXF1ZXRlcyBwcmVjZWRlbnRzL3NlZ8O8ZW50cyBzZXLDoCBpbmNvbXBsZXRhLiIKKworIzogZ2l0azoxMTEyMworbXNnaWQgIlRhZyIKK21zZ3N0ciAiRXRpcXVldGEiCisKKyM6IGdpdGs6MTExMjcKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEyMTAKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiU2VsZWN0b3IgZGUgdGlwdXMgZGUgbGxldHJhIGRlbCBHaXRrIgorCisjOiBnaXRrOjExMjI3Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMTIzMAorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTEzNDgKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZGUgdmlzdWFsaXR6YWNpw7MgZGUgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMiCisKKyM6IGdpdGs6MTEzNTEKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIkFtcGxhZGEgbcOgeGltYSBkZWwgZ3LDoGZpYyAobMOtbmllcykiCisKKyM6IGdpdGs6MTEzNTUKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJBbXBsYWRhIG3DoHhpbWEgZGVsIGdyw6BmaWMgKCUgZGVsIHBhbmVsbCkiCisKKyM6IGdpdGs6MTEzNTgKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIk1vc3RyYSBlbHMgY2FudmlzIGxvY2FscyIKKworIzogZ2l0azoxMTM2MQorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgIlNlbGVjY2lvbmEgYXV0b23DoHRpY2FtZW50IGwnU0hBMSAobG9uZ2l0dWQpIgorCisjOiBnaXRrOjExMzY1Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiQW1hZ2EgbGVzIHJlZmVyw6huY2llcyByZW1vdGVzIgorCisjOiBnaXRrOjExMzY5Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZGUgdmlzdWFsaXR6YWNpw7MgZGUgZGlmZXLDqG5jaWEiCisKKyM6IGdpdGs6MTEzNzEKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiRXNwYWlhdCBkZSB0YWJ1bGFjacOzIgorCisjOiBnaXRrOjExMzc0Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiTW9zdHJhIGV0aXF1ZXRlcy9jYXBzIHByb3BlcnMiCisKKyM6IGdpdGs6MTEzNzcKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICJOb21icmUgbcOgeGltIGQnZXRpcXVldGVzL2NhcHMgYSBtb3N0cmFyIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJMaW1pdGEgbGVzIGRpZmVyw6huY2llcyBhbHMgY2FtaW5zIGxsaXN0YXRzIgorCisjOiBnaXRrOjExMzgzCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIkFkbWV0IGNvZGlmaWNhY2lvbnMgZXNwZWPDrWZpcXVlcyBwZXIgYSBjYWRhIGZpdHhlciIKKworIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJFaW5hIGRlIGRpZmVyw6huY2lhIGV4dGVybmEiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlRyaWV1Li4uIgorCisjOiBnaXRrOjExMzk1Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGdlbmVyYWxzIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICJVc2EgZWxzIGdpbnlzIHRlbWF0aXR6YXRzIgorCisjOiBnaXRrOjExNDAwCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKGVsIGNhbnZpIHJlcXVlcmVpeCByZWluaWNpYXIpIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihhY3R1YWxtZW50IG5vIGRpc3BvbmlibGUpIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNvbG9yczogcHJlc3Npb25hIHBlciBhIHRyaWFyIgorCisjOiBnaXRrOjExNDE2Cittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJJbnRlcmbDrWNpZSIKKworIzogZ2l0azoxMTQxNworbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiaW50ZXJmw61jaWUiCisKKyM6IGdpdGs6MTE0MjAKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJGb25zIgorCisjOiBnaXRrOjExNDIxIGdpdGs6MTE0NTEKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJmb25zIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJpbWVyIHBsYSIKKworIzogZ2l0azoxMTQyNQorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgInByaW1lciBwbGEiCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmVyw6huY2lhOiBsw61uaWVzIHZlbGxlcyIKKworIzogZ2l0azoxMTQyOQorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZlcmVuY2lhIGxlcyBsw61uaWVzIHZlbGxlcyIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZXLDqG5jaWE6IGzDrW5pZXMgbm92ZXMiCisKKyM6IGdpdGs6MTE0MzQKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAiZGlmZXJlbmNpYSBsZXMgbMOtbmllcyBub3ZlcyIKKworIzogZ2l0azoxMTQzOAorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZlcsOobmNpYTogY2Fww6dhbGVyYSBkZSB0cm9zIgorCisjOiBnaXRrOjExNDQwCittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiZGlmZXJlbmNpYSBsYSBjYXDDp2FsZXJhIGRlIHRyb3MiCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiRm9ucyBkZSBsYSBsw61uaWEgbWFyY2FkYSIKKworIzogZ2l0azoxMTQ0NgorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgImZvbnMgZGUgbGEgbMOtbmlhIG1hcmNhZGEiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIkZvbnMgZGUgbGEgc2VsZWNjacOzIgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiVGlwdXMgZGUgbGxldHJhOiBwcmVzc2lvbmEgcGVyIGEgdHJpYXIiCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlRpcHVzIGRlIGxsZXRyYSBwcmluY2lwYWwiCisKKyM6IGdpdGs6MTE0NjIKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiVGlwdXMgZGUgbGxldHJhIGRlIHZpc3VhbGl0emFjacOzIGRlIGRpZmVyw6huY2lhIgorCisjOiBnaXRrOjExNDYzCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiVGlwdXMgZGUgbGxldHJhIGRlIGxhIGludGVyZsOtY2llIGQndXN1YXJpIgorCisjOiBnaXRrOjExNDg1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyw6huY2llcyBkZWwgR2l0ayIKKworIzogZ2l0azoxMTQ5NAorbXNnaWQgIkdlbmVyYWwiCittc2dzdHIgIkdlbmVyYWwiCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIkNvbG9ycyIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkZvbnRzIgorbXNnc3RyICJUaXB1cyBkZSBsbGV0cmEiCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiB0cmlhIGVsIGNvbG9yIHBlciBhICVzIgorCisjOiBnaXRrOjEyMDU5Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiUGVyZMOzLCBlbCBnaXRrIG5vIHBvdCBleGVjdXRhci1zZSBhbWIgYXF1ZXN0YSB2ZXJzacOzIGRlIFRjbC9Uay5cbiIKKyIgRWwgR2l0ayByZXF1ZXJlaXggY29tIGEgbcOtbmltIGVsIFRjbC9UayA4LjQuIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiTm8gZXMgcG90IHRyb2JhciBjYXAgZGlww7JzaXQgZGUgZ2l0IGFxdcOtLiIKKworIzogZ2l0azoxMjMxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiUGFyw6BtZXRyZSBhbWJpZ3UgJyVzJzogw6lzIHRhbnQgcmV2aXNpw7MgY29tIG5vbSBkZSBmaXR4ZXIiCisKKyM6IGdpdGs6MTIzMjgKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJQYXLDoG1ldHJlcyBkb2xlbnRzIGFsIGdpdGs6IgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vZGUucG8gYi9naXRrLWdpdC9wby9kZS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGIzODI0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vZGUucG8KQEAgLTAsMCArMSwxMzg3IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gR2VybWFuLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgUGF1bCBNYWNrZXJyYXMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjCisjIENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT4sIDIwMDcuCisjIEZyZWRlcmlrIFNjaHdhcnplciA8c2Nod2FyemVyZkBnbWFpbC5jb20+LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAxNDozMisxMDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0xMC0yMCAxNDoyMCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2VybWFuXG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBnaXRrOjE0MAorbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKK21zZ3N0ciAiTGlzdGUgZGVyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlbiBEYXRlaWVuIG5pY2h0IGdlZnVuZGVuOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIlfDtnJ0ZXIgZWluZsOkcmJlbiIKKworIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMCBnaXRrOjgyNTMKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgIlfDtnJ0ZXIga2VubnplaWNobmVuIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVyIFZlcnNpb25lbjoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiBkZXMgLS1hcmdzY21kLUtvbW1hbmRvczoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogRXMgd3VyZGUgLS1tZXJnZSBhbmdlZ2ViZW4sIGFiZXIgZXMgZXhpc3RpZXJlbiAiCisia2VpbmUgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4uIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogRXMgd3VyZGUgLS1tZXJnZSBhbmdlZ2ViZW4sIGFiZXIgZXMgc2luZCBrZWluZSAiCisibmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gaW4gZGVyIERhdGVpYXVzd2FobC4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiDCu2dpdCBsb2fCqzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGVzZW4iCisKKyM6IGdpdGs6NDk2IGdpdGs6NDUyNQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiVmVyc2lvbmVuIHdlcmRlbiBnZWxlc2VuIC4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdCIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA0NSBnaXRrOjEyNDMyCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJLb21tYW5kb3plaWxlIgorCisjOiBnaXRrOjE1MTEKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkF1c2dhYmUgdm9uIMK7Z2l0IGxvZ8KrIGthbm4gbmljaHQgZXJrYW5udCB3ZXJkZW46IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJLZWluZSBWZXJzaW9uc2luZm9ybWF0aW9uIHZlcmbDvGdiYXIiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT2siCisKKyM6IGdpdGs6MTkzNCBnaXRrOjQzMTcgZ2l0azo5MTk2IGdpdGs6OTI3NSBnaXRrOjkzOTEgZ2l0azo5NDQwIGdpdGs6OTY3MQorIzogZ2l0azoxMTI0MiBnaXRrOjExNTIyCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBYmJyZWNoZW4iCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIiZBa3R1YWxpc2llcmVuIgorCisjOiBnaXRrOjIwNzAKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICImTmV1IGxhZGVuIgorCisjOiBnaXRrOjIwNzEKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIiZad2VpZ2UgbmV1IGxhZGVuIgorCisjOiBnaXRrOjIwNzIKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIGF1ZiZsaXN0ZW4iCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICLCu2dpdCAmZ3Vpwqsgc3RhcnRlbiIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIiZCZWVuZGVuIgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiJkRhdGVpIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIiZFaW5zdGVsbHVuZ2VuIgorCisjOiBnaXRrOjIwNzkKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiJkJlYXJiZWl0ZW4iCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiJk5ldWUgQW5zaWNodCAuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIkFuc2ljaHQgJmJlYXJiZWl0ZW4gLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIkFuc2ljaHQgJmVudGZlcm5lbiIKKworIzogZ2l0azoyMDg4IGdpdGs6NDA0MworbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIiZBbGxlIERhdGVpZW4iCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiJkFuc2ljaHQiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIsOcYmVyICZnaXRrIgorCisjOiBnaXRrOjIwOTQgZ2l0azoyMTA4Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiJlRhc3RlbmvDvHJ6ZWwiCisKKyM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKK21zZ2lkICImSGVscCIKK21zZ3N0ciAiJkhpbGZlIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIlplaWxlIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJTdWNoZSIKKworIzogZ2l0azoyMjk1Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJWZXJzaW9uIG5hY2giCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgIkJlc2NocmVpYnVuZzoiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiRGF0ZWllbjoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiw4RuZGVydW5nZW46IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICJHZcOkbmRlcnRlIFplaWxlbiBlbnRzcHJlY2hlbjoiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWt0IgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIktlaW4gR3Jvw58vS2xlaW4iCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiUmVnZXhwIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJBbGxlIEZlbGRlciIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIsOcYmVyc2NocmlmdCIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJCZXNjaHJlaWJ1bmciCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRvciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo3MzI2Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJFaW50cmFnZW5kZXIiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiU3VjaGVuIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJEaWZmIgorbXNnc3RyICJWZXJnbGVpY2giCisKKyM6IGdpdGs6MjM2MAorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJBbHRlIFZlcnNpb24iCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOZXVlIFZlcnNpb24iCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIktvbnRleHR6ZWlsZW4iCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIkxlZXJ6ZWljaGVuw6RuZGVydW5nZW4gaWdub3JpZXJlbiIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICJaZWlsZW51bnRlcnNjaGllZCIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIlBhdGNoIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICJCYXVtIgorCisjOiBnaXRrOjI2MTcgZ2l0azoyNjM3Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJWZXJnbGVpY2g6IGRpZXNlIC0+IGdld8OkaGx0ZSIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiVmVyZ2xlaWNoOiBnZXfDpGhsdGUgLT4gZGllc2UiCisKKyM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJQYXRjaCBlcnN0ZWxsZW4iCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJNYXJraWVydW5nIGVyc3RlbGxlbiIKKworIzogZ2l0azoyNjIxIGdpdGs6OTM3MQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJWZXJzaW9uIGluIERhdGVpIHNjaHJlaWJlbiIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJOZXVlbiBad2VpZyBlcnN0ZWxsZW4iCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJEaWVzZSBWZXJzaW9uIHBmbMO8Y2tlbiIKKworIzogZ2l0azoyNjI0Cittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiSEVBRC1ad2VpZyBhdWYgZGllc2UgVmVyc2lvbiB6dXLDvGNrc2V0emVuIgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJMZXNlemVpY2hlbiBzZXR6ZW4iCisKKyM6IGdpdGs6MjYyNgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJadW0gTGVzZXplaWNoZW4iCisKKyM6IGdpdGs6MjYyNworbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICJBYmvDtm1tbGluZyB2b24gTGVzZXplaWNoZW4gdW5kIGRpZXNlciBWZXJzaW9uIGZpbmRlbiIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIk1pdCBMZXNlemVpY2hlbiB2ZXJnbGVpY2hlbiIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJWZXJnbGVpY2g6IGRpZXNlIC0+IGdld8OkaGx0ZSBWZXJzaW9uIgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIlZlcmdsZWljaDogZ2V3w6RobHRlIC0+IGRpZXNlIFZlcnNpb24iCisKKyM6IGdpdGs6MjYzMQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiVmVyc2lvbiB1bWtlaHJlbiIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJBdWYgZGllc2VuIFp3ZWlnIHVtc3RlbGxlbiIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICJad2VpZyBsw7ZzY2hlbiIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiWndlaWduYW1lIGtvcGllcmVuIgorCisjOiBnaXRrOjI2NTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIkRpZXNlbiBhdWNoIGhlcnZvcmhlYmVuIgorCisjOiBnaXRrOjI2NTcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJOdXIgZGllc2VuIGhlcnZvcmhlYmVuIgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJFeHRlcm5lcyBEaWZmLVByb2dyYW1tIgorCisjOiBnaXRrOjI2NTkKK21zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgorbXNnc3RyICJBbm5vdGllcmVuIGRlciBFbHRlcm52ZXJzaW9uIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIlBmYWQga29waWVyZW4iCisKKyM6IGdpdGs6MjY2NworbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiSGVya3VuZnQgZGllc2VyIFplaWxlIGFuemVpZ2VuIgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkRpZXNlIFplaWxlIGFubm90aWVyZW4gKMK7Z2l0IGd1aSBibGFtZcKrKSIKKworIzogZ2l0azozMDE0Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIGVpbmUgVmlzdWFsaXNpZXJ1bmcgZGVyIEdpdC1IaXN0b3JpZVxuIgorIlxuIgorIkNvcHlyaWdodCBcXHUwMGE5IDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIkJlbnV0enVuZyB1bmQgV2VpdGVydmVyYnJlaXR1bmcgZ2Vtw6TDnyBkZW4gQmVkaW5ndW5nZW4gZGVyIEdOVSBHZW5lcmFsIFB1YmxpYyAiCisiTGljZW5zZSIKKworIzogZ2l0azozMDIyIGdpdGs6MzA4OSBnaXRrOjk4NTcKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU2NobGllw59lbiIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkdpdGstVGFzdGF0dXJiZWxlZ3VuZyIKKworIzogZ2l0azozMDQ2Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJHaXRrLVRhc3RhdHVyYmVsZWd1bmc6IgorCisjOiBnaXRrOjMwNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdEJlZW5kZW4iCisKKyM6IGdpdGs6MzA0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1GPlx0XHRGZW5zdGVyIHNjaGxpZcOfZW4iCisKKyM6IGdpdGs6MzA1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPFBvczE+XHRcdFp1ciBuZXVlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kZT5cdFx0WnVyIMOkbHRlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjMwNTIKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxIb2NoPiwgcCwga1x0TsOkY2hzdGUgbmV1ZXJlIFZlcnNpb24iCisKKyM6IGdpdGs6MzA1MworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxSdW50ZXI+LCBuLCBqXHROw6RjaHN0ZSDDpGx0ZXJlIFZlcnNpb24iCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMaW5rcz4sIHosIGhcdEVpbmUgVmVyc2lvbiB6dXLDvGNrZ2VoZW4iCisKKyM6IGdpdGs6MzA1NQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmVjaHRzPiwgeCwgbFx0RWluZSBWZXJzaW9uIHdlaXRlcmdlaGVuIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPCVzLW4+XHRadSBuLXRlciBFbHRlcm52ZXJzaW9uIGluIFZlcnNpb25zaGlzdG9yaWUgc3ByaW5nZW4iCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8QmlsZEhvY2g+XHRFaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEJpbGRSdW50ZXI+XHRFaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Qb3MxPlx0WnVtIG9iZXJlbiBFbmRlIGRlciBWZXJzaW9uc2xpc3RlIGJsw6R0dGVybiIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmRlPlx0WnVtIHVudGVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLUhvY2g+XHRWZXJzaW9uc2xpc3RlIGVpbmUgWmVpbGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVJ1bnRlcj5cdFZlcnNpb25zbGlzdGUgZWluZSBaZWlsZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLUJpbGRIb2NoPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQmlsZFJ1bnRlcj5cdFZlcnNpb25zbGlzdGUgZWluZSBTZWl0ZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8VW1zY2hhbHQtSG9jaD5cdFLDvGNrd8OkcnRzIHN1Y2hlbiAobmFjaCBvYmVuOyBuZXVlcmUgVmVyc2lvbmVuKSIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxVbXNjaGFsdC1SdW50ZXI+IFN1Y2hlbiAobmFjaCB1bnRlbjsgw6RsdGVyZSBWZXJzaW9uZW4pIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEVudGY+LCBiXHRcdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA2OAorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8TMO2c2NodGFzdGU+XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPExlZXJ0YXN0ZT5cdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNzAKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0VmVyZ2xlaWNoIHVtIDE4IFplaWxlbiBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdFN1Y2hlbiIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdFdlaXRlcnN1Y2hlbiIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPEVpbmdhYmV0YXN0ZT5cdFdlaXRlcnN1Y2hlbiIKKworIzogZ2l0azozMDc1Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx0WnUgVmVyc2lvbiBzcHJpbmdlbiIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRUYXN0YXR1cmZva3VzIGlucyBTdWNoZmVsZCIKKworIzogZ2l0azozMDc3Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdFLDvGNrd8OkcnRzIHdlaXRlcnN1Y2hlbiIKKworIzogZ2l0azozMDc4Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRWZXJnbGVpY2ggenVyIG7DpGNoc3RlbiBEYXRlaSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdFdlaXRlcnN1Y2hlbiBpbSBWZXJnbGVpY2giCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRSw7xja3fDpHJ0cyB3ZWl0ZXJzdWNoZW4gaW0gVmVyZ2xlaWNoIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtbWVyYmxvY2stUGx1cz5cdFNjaHJpZnQgdmVyZ3LDtsOfZXJuIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLVBsdXM+XHRTY2hyaWZ0IHZlcmdyw7bDn2VybiIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU51bW1lcm5ibG9jay1NaW51cz4gU2NocmlmdCB2ZXJrbGVpbmVybiIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTWludXM+XHRTY2hyaWZ0IHZlcmtsZWluZXJuIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRBa3R1YWxpc2llcmVuIgorCisjOiBnaXRrOjM1NTAgZ2l0azozNTU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkZlaGxlciBiZWltIEVyemV1Z2VuIGRlcyB0ZW1wb3LDpHJlbiBWZXJ6ZWljaG5pc3NlcyDCuyVzwqs6IgorCisjOiBnaXRrOjM1NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSG9sZW4gdm9uIMK7JXPCqyB2b24gwrslc8KrOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJLb21tYW5kbyBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGdpdGs6Mzc4NAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJWZXJzaW9uIG5pY2h0IGdlZnVuZGVuIgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKKworIzogZ2l0azozODI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3MtU3BpdHplIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbjogJXMiCisKKyM6IGdpdGs6MzgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgQmVyZWl0c3RlbGx1bmcgKMK7aW5kZXjCqyk6ICVzIgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLCu2dpdCBibGFtZcKrIGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuOiAlcyIKKworIzogZ2l0azozODY1IGdpdGs6Njc1NAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiU3VjaGVuIgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIMK7Z2l0IGJsYW1lwqs6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICIiCisiRGllc2UgWmVpbGUgc3RhbW10IGF1cyBWZXJzaW9uICVzLCBkaWUgbmljaHQgaW4gZGllc2VyIEFuc2ljaHQgZ2V6ZWlndCB3aXJkIgorCisjOiBnaXRrOjM5MzkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJFeHRlcm5lcyBEaWZmLVByb2dyYW1tIGZlaGxnZXNjaGxhZ2VuOiIKKworIzogZ2l0azo0MDcwCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkdpdGstQW5zaWNodGVuIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIkRpZXNlIEFuc2ljaHQgc3BlaWNoZXJuIgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIChkdXJjaCBMZWVyemVpY2hlbiBnZXRyZW5udGUgTGlzdGUpOiIKKworIzogZ2l0azo0MDc2Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAiWndlaWdlL01hcmtpZXJ1bmdlbjoiCisKKyM6IGdpdGs6NDA3NworbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJBbGxlIE1hcmtpZXJ1bmdlbiB1bmQgWndlaWdlIgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiQWxsZSAobG9rYWxlbikgWndlaWdlIgorCisjOiBnaXRrOjQwNzkKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiQWxsZSBNYXJraWVydW5nZW4iCisKKyM6IGdpdGs6NDA4MAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIkFsbGUgw5xiZXJuYWhtZXp3ZWlnZSIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiVmVyc2lvbnNpbmZvcm1hdGlvbmVuIChyZWd1bMOkcmUgQXVzZHLDvGNrZSk6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkVpbnRyYWdlbmRlcjoiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVmVyc2lvbnNiZXNjaHJlaWJ1bmc6IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQWxsZSBWZXJzaW9uc2luZm9ybWF0aW9uZW4tS3JpdGVyaWVuIGVyZsO8bGxlbiIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAia2VpbmUgVmVyc2lvbnNpbmZvcm1hdGlvbmVuLUtyaXRlcmllbiBlcmbDvGxsZW4iCisKKyM6IGdpdGs6NDA4NworbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJEYXRlaWVuOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJaZWljaGVua2V0dGUiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiUmVndWzDpHJlciBBdXNkcnVjayIKKworIzogZ2l0azo0MDkwCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIlN1Y2hhdXNkcnVjazoiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIkRhdHVtICjCuzIgd2Vla3MgYWdvwqssIMK7MjAwOS0wMy0xNyAxNToyNzozOMKrLCDCu01hcmNoIDE3LCAyMDA5IDE1OjI3OjM4wqspIgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIlZvbjoiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiQmlzOiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIlZlcnNpb25zYW56YWhsIGJlZ3JlbnplbiBvZGVyIGVpbmlnZSDDvGJlcnNwcmluZ2VuIChnYW56emFobGlnZXIgV2VydCk6IgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIkFuemVpZ2VuOiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICLDnGJlcnNwcmluZ2VuOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiU29uc3RpZ2VzOiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJTdHJlbmcgbmFjaCBEYXR1bSBzb3J0aWVyZW4iCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJad2VpZy1TZWl0ZW4gbWFya2llcmVuIgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkF1ZiBlcnN0ZSBFbHRlcm52ZXJzaW9uIGJlc2NocsOkbmtlbiIKKworIzogZ2l0azo0MTAxCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkVpbmZhY2hlIEhpc3RvcmllIgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiWnVzw6R0emxpY2hlIEFyZ3VtZW50ZSBmw7xyIMK7Z2l0IGxvZ8KrOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkZvbGdlbmRlIERhdGVpZW4gdW5kIFZlcnplaWNobmlzc2UgYW56ZWlnZW4gKGVpbmUgcHJvIFplaWxlKToiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJWZXJzaW9uc2xpc3RlIGR1cmNoIGZvbGdlbmRlcyBLb21tYW5kbyBlcnpldWdlbiBsYXNzZW46IgorCisjOiBnaXRrOjQyMjgKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IEFuc2ljaHQgYmVhcmJlaXRlbiIKKworIzogZ2l0azo0MjM2Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIEF1c3dhaGwgZGVyIGFuZ2V6ZWlndGVuIFZlcnNpb25lbiIKKworIzogZ2l0azo0MjQxCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJBbnNpY2h0c25hbWUiCisKKyM6IGdpdGs6NDMxNgorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIkFud2VuZGVuIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRmVobGVyIGluIGRlbiBhdXNnZXfDpGhsdGVuIFZlcnNpb25lbjoiCisKKyM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiS2VpbmUiCisKKyM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJBYmvDtm1tbGluZyIKKworIzogZ2l0azo1MDIyCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIktlaW4gQWJrw7ZtbWxpbmciCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiVm9yZ8OkbmdlciIKKworIzogZ2l0azo1MDMwCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJLZWluIFZvcmfDpG5nZXIiCisKKyM6IGdpdGs6NTMyNAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuIGJlcmVpdGdlc3RlbGx0LCBhYmVyIG5pY2h0IGVpbmdldHJhZ2VuIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuLCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAidW5kIHdlaXRlcmUiCisKKyM6IGdpdGs6NzEzNworbXNnaWQgIm1hbnkiCittc2dzdHIgInZpZWxlIgorCisjOiBnaXRrOjczMjgKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiTWFya2llcnVuZ2VuOiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIkVsdGVybiIKKworIzogZ2l0azo3MzU2Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIktpbmQiCisKKyM6IGdpdGs6NzM2NQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiWndlaWciCisKKyM6IGdpdGs6NzM2OAorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIkZvbGd0IGF1ZiIKKworIzogZ2l0azo3MzcxCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlZvcmfDpG5nZXIgdm9uIgorCisjOiBnaXRrOjc5NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVzIFZlcmdsZWljaHM6ICVzIgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiR2VoZSB6dToiCisKKyM6IGdpdGs6ODY3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJLdXJ6ZXIgU0hBMS1IYXNod2VydCDCuyVzwqsgaXN0IG1laHJkZXV0aWciCisKKyM6IGdpdGs6ODY3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiVmVyc2lvbiDCuyVzwqsgaXN0IHVuYmVrYW5udCIKKworIzogZ2l0azo4Njg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlNIQTEtSGFzaHdlcnQgwrslc8KrIGlzdCB1bmJla2FubnQiCisKKyM6IGdpdGs6ODY5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJWZXJzaW9uIMK7JXPCqyB3aXJkIGluIGRlciBha3R1ZWxsZW4gQW5zaWNodCBuaWNodCBhbmdlemVpZ3QiCisKKyM6IGdpdGs6ODgzMiBnaXRrOjg4NDcKK21zZ2lkICJEYXRlIgorbXNnc3RyICJEYXR1bSIKKworIzogZ2l0azo4ODM1Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIktpbmRlciIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlp3ZWlnIMK7JXPCqyBoaWVyaGVyIHp1csO8Y2tzZXR6ZW4iCisKKyM6IGdpdGs6ODkwMAorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICJad2VpZ3NwaXR6ZSBpc3QgYWJnZXRyZW5udDogWnVyw7xja3NldHplbiBuaWNodCBtw7ZnbGljaCIKKworIzogZ2l0azo5MDA1IGdpdGs6OTAxMQorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIsOcYmVyc3ByaW5nZSBadXNhbW1lbmbDvGhydW5ncy1WZXJzaW9uICIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSG9sZW4gZGVyIFBhdGNoLUlEIGbDvHIgIgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gQWJicnVjaC5cbiIKKworIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIlZlcnNpb24gIgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBpc3QgZGFzIGdsZWljaGUgUGF0Y2ggd2llXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDQzCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIGlzdCB1bnRlcnNjaGllZGxpY2ggdm9uXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDQ1Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlZlcmdsZWljaCBkZXIgVmVyc2lvbmVuOlxuIgorIlxuIgorCisjOiBnaXRrOjkwNTcgZ2l0azo5MDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiBoYXQgJXMgS2luZGVyLiBBYmJydWNoXG4iCisKKyM6IGdpdGs6OTA4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFZlcnNpb24gaW4gRGF0ZWk6ICVzIgorCisjOiBnaXRrOjkwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJnbGVpY2hlbiBkZXIgVmVyc2lvbmVuOiAlcyIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJPYmVuIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJGcm9tIgorbXNnc3RyICJWb24iCisKKyM6IGdpdGs6OTE0MworbXNnaWQgIlRvIgorbXNnc3RyICJiaXMiCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJQYXRjaCBlcnN0ZWxsZW4iCisKKyM6IGdpdGs6OTE2OQorbXNnaWQgIkZyb206IgorbXNnc3RyICJWb246IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgImJpczoiCisKKyM6IGdpdGs6OTE4NworbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIlVtZ2VrZWhydCIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiQXVzZ2FiZWRhdGVpOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkVyemV1Z2VuIgorCisjOiBnaXRrOjkyMzMKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkZlaGxlciBiZWltIEVyemV1Z2VuIGRlcyBQYXRjaGVzOiIKKworIzogZ2l0azo5MjU2IGdpdGs6OTM3MyBnaXRrOjk0MzAKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5MjY1Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJNYXJraWVydW5nc25hbWU6IgorCisjOiBnaXRrOjkyNjgKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiRWluZSBNYXJraWVydW5nc2Jlc2NocmVpYnVuZyBpc3Qgb3B0aW9uYWwiCisKKyM6IGdpdGs6OTI3MAorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiTWFya2llcnVuZ3NiZXNjaHJlaWJ1bmc6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJFcnN0ZWxsZW4iCisKKyM6IGdpdGs6OTI5MgorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiS2VpbiBNYXJraWVydW5nc25hbWUgYW5nZWdlYmVuIgorCisjOiBnaXRrOjkyOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJNYXJraWVydW5nIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGdpdGs6OTMwNgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXIgTWFya2llcnVuZzoiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJLb21tYW5kbzoiCisKKyM6IGdpdGs6OTM5MAorbXNnaWQgIldyaXRlIgorbXNnc3RyICJTY2hyZWliZW4iCisKKyM6IGdpdGs6OTQwOAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBWZXJzaW9uOiIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5hbWU6IgorCisjOiBnaXRrOjk0NTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gTmFtZW4gZsO8ciBkZW4gbmV1ZW4gWndlaWcgYW4uIgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiWndlaWcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiBTb2xsIGVyIMO8YmVyc2NocmllYmVuIHdlcmRlbj8iCisKKyM6IGdpdGs6OTUzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisiVmVyc2lvbiDCuyVzwqsgaXN0IGJlcmVpdHMgaW0gWndlaWcgwrslc8KrIGVudGhhbHRlbiAtLSB0cm90emRlbSBlcm5ldXQgIgorImVpbnRyYWdlbj8iCisKKyM6IGdpdGs6OTUzNQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJWZXJzaW9uIHBmbMO8Y2tlbiIKKworIzogZ2l0azo5NTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIlBmbMO8Y2tlbiBmZWhsZ2VzY2hsYWdlbiwgZGEgbm9jaCBsb2thbGUgw4RuZGVydW5nZW4gaW4gRGF0ZWkgwrslc8KrXG4iCisidm9ybGllZ2VuLiBCaXR0ZSBkaWVzZSDDhG5kZXJ1bmdlbiBlaW50cmFnZW4sIHp1csO8Y2tzZXR6ZW4gb2RlclxuIgorInp3aXNjaGVuc3BlaWNoZXJuICjCu2dpdCBzdGFzaMKrKSB1bmQgZGFubiBlcm5ldXQgdmVyc3VjaGVuLiIKKworIzogZ2l0azo5NTUwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiUGZsw7xja2VuIGZlaGxnZXNjaGxhZ2VuLCBkYSBlaW4gWnVzYW1tZW5mw7xocnVuZ3MtS29uZmxpa3QgYXVmZ2V0cmV0ZW5cbiIKKyJpc3QuIFNvbGwgZGFzIFp1c2FtbWVuZsO8aHJ1bmdzLVdlcmt6ZXVnICjCu2dpdCBjaXRvb2zCqykgYXVmZ2VydWZlblxuIgorIndlcmRlbiwgdW0gZGllc2VuIEtvbmZsaWt0IGF1Znp1bMO2c2VuPyIKKworIzogZ2l0azo5NTY2IGdpdGs6OTYyNAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiBlaW5nZXRyYWdlbiIKKworIzogZ2l0azo5NTkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIiIKKyJWZXJzaW9uIMK7JXPCqyBpc3QgbmljaHQgaW0gWndlaWcgwrslc8KrIGVudGhhbHRlbiAtLSB0cm90emRlbSB1bWtlaHJlbj8iCisKKyM6IGdpdGs6OTU5OAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAiVW1rZWhyZW4iCisKKyM6IGdpdGs6OTYwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiVW1rZWhyZW4gZmVobGdlc2NobGFnZW4sIGRhIG5vY2ggbG9rYWxlIMOEbmRlcnVuZ2VuIGluIERhdGVpIMK7JXPCq1xuIgorInZvcmxpZWdlbi4gQml0dGUgZGllc2Ugw4RuZGVydW5nZW4gZWludHJhZ2VuLCB6dXLDvGNrc2V0emVuIG9kZXJcbiIKKyJ6d2lzY2hlbnNwZWljaGVybiAowrtnaXQgc3Rhc2jCqykgdW5kIGRhbm4gZXJuZXV0IHZlcnN1Y2hlbi4iCisKKyM6IGdpdGs6OTYxMAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiVW1rZWhyZW4gZmVobGdlc2NobGFnZW4sIGRhIGVpbiBadXNhbW1lbmbDvGhydW5ncy1Lb25mbGlrdCBhdWZnZXRyZXRlblxuIgorImlzdC4gU29sbCBkYXMgWnVzYW1tZW5mw7xocnVuZ3MtV2Vya3pldWcgKMK7Z2l0IGNpdG9vbMKrKSBhdWZnZXJ1ZmVuXG4iCisid2VyZGVuLCB1bSBkaWVzZW4gS29uZmxpa3QgYXVmenVsw7ZzZW4/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJadXLDvGNrc2V0emVuIGJlc3TDpHRpZ2VuIgorCisjOiBnaXRrOjk2NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICJad2VpZyDCuyVzwqsgYXVmIMK7JXPCqyB6dXLDvGNrc2V0emVuPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIkFydCBkZXMgWnVyw7xja3NldHplbnM6IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiSGFybWxvczogQXJiZWl0c2tvcGllIHVuZCBCZXJlaXRzdGVsbHVuZyB1bnZlcsOkbmRlcnQiCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiIgorIkdlbWlzY2h0OiBBcmJlaXRza29waWUgdW52ZXLDpG5kZXJ0LFxuIgorIkJlcmVpdHN0ZWxsdW5nIHp1csO8Y2tnZXNldHp0IgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkhhcnQ6IEFyYmVpdHNrb3BpZSB1bmQgQmVyZWl0c3RlbGx1bmdcbiIKKyIoQWxsZSBsb2thbGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiBnZWzDtnNjaHQpIgorCisjOiBnaXRrOjk2ODMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIlp1csO8Y2tzZXR6ZW4iCisKKyM6IGdpdGs6OTc0MworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiVW1zdGVsbGVuIgorCisjOiBnaXRrOjk3OTYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICIiCisiRGVyIFp3ZWlnLCBhdWYgZGVuIGRpZSBBcmJlaXRza29waWUgbW9tZW50YW4gdW1nZXN0ZWxsdCBpc3QsIGthbm4gbmljaHQgIgorImdlbMO2c2NodCB3ZXJkZW4uIgorCisjOiBnaXRrOjk4MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkRpZSBWZXJzaW9uZW4gYXVmIFp3ZWlnIMK7JXPCqyBleGlzdGllcmVuIGF1ZiBrZWluZW0gYW5kZXJlbiBad2VpZy5cbiIKKyJad2VpZyDCuyVzwqsgdHJvdHpkZW0gbMO2c2NoZW4/IgorCisjOiBnaXRrOjk4MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIk1hcmtpZXJ1bmdlbiB1bmQgWndlaWdlOiAlcyIKKworIzogZ2l0azo5ODUwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0ZXJuIgorCisjOiBnaXRrOjEwMTQ2Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gTGVzZW4gZGVyIFN0cnVrdHVyaW5mb3JtYXRpb25lbjsgWndlaWdlIHVuZCBJbmZvcm1hdGlvbmVuIHp1ICIKKyJWb3Jnw6RuZ2VyL05hY2hmb2xnZXIgd2VyZGVuIHVudm9sbHN0w6RuZGlnIHNlaW4uIgorCisjOiBnaXRrOjExMTIzCittc2dpZCAiVGFnIgorbXNnc3RyICJNYXJraWVydW5nIgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIkdpdGstU2NocmlmdGVuIHfDpGhsZW4iCisKKyM6IGdpdGs6MTEyMjcKK21zZ2lkICJCIgorbXNnc3RyICJGIgorCisjOiBnaXRrOjExMjMwCittc2dpZCAiSSIKK21zZ3N0ciAiSyIKKworIzogZ2l0azoxMTM0OAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiQW56ZWlnZSBkZXIgVmVyc2lvbnNsaXN0ZSIKKworIzogZ2l0azoxMTM1MQorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoWmVpbGVuKSIKKworIzogZ2l0azoxMTM1NQorIywgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIk1heGltYWxlIEdyYXBoZW5icmVpdGUgKCUgZGVzIEZlbnN0ZXJzKSIKKworIzogZ2l0azoxMTM1OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuIGFuemVpZ2VuIgorCisjOiBnaXRrOjExMzYxCittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU0hBMS1IYXNod2VydCAoTMOkbmdlKSBhdXRvbWF0aXNjaCBhdXN3w6RobGVuIgorCisjOiBnaXRrOjExMzY1Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiRW50ZmVybnRlIFp3ZWlnZS9NYXJraWVydW5nZW4gYXVzYmxlbmRlbiIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJBbnplaWdlIGRlcyBWZXJnbGVpY2hzIgorCisjOiBnaXRrOjExMzcxCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIlRhYnVsYXRvcmJyZWl0ZSIKKworIzogZ2l0azoxMTM3NAorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIk5haGVsaWVnZW5kZSBNYXJraWVydW5nZW4vWndlaWdzcGl0emVuIGFuemVpZ2VuIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiTWF4aW1hbGUgQW56YWhsIGFuenV6ZWlnZW5kZXIgTWFya2llcnVuZ2VuL1p3ZWlnc3BpdHplbiIKKworIzogZ2l0azoxMTM4MAorbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiVmVyZ2xlaWNoIG51ciBmw7xyIGFuZ2V6ZWlndGUgUGZhZGUiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiWmVpY2hlbmtvZGllcnVuZyBwcm8gRGF0ZWkgZXJtaXR0ZWxuIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIkV4dGVybmVzIERpZmYtUHJvZ3JhbW0iCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlfDpGhsZW4gLi4uIgorCisjOiBnaXRrOjExMzk1Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJBbGxnZW1laW5lIE9wdGlvbmVuIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICJBdXNzZWhlbiBkZXIgQmVudXR6ZXJvYmVyZmzDpGNoZSBkdXJjaCBUaGVtYSBiZXN0aW1tZW4iCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIow4RuZGVydW5nZW4gd2VyZGVuIGVyc3QgbmFjaCBOZXVzdGFydCB3aXJrc2FtKSIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIoTW9tZW50YW4gbmljaHQgdmVyZsO8Z2JhcikiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiRmFyYmVuOiBLbGlja2VuIHp1bSBXw6RobGVuIgorCisjOiBnaXRrOjExNDE2Cittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJCZW51dHplcm9iZXJmbMOkY2hlIgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJCZW51dHplcm9iZXJmbMOkY2hlIgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiSGludGVyZ3J1bmQiCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgIkhpbnRlcmdydW5kIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiVm9yZGVyZ3J1bmQiCisKKyM6IGdpdGs6MTE0MjUKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJWb3JkZXJncnVuZCIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiVmVyZ2xlaWNoOiBBbHRlIFplaWxlbiIKKworIzogZ2l0azoxMTQyOQorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJWZXJnbGVpY2ggLSBBbHRlIFplaWxlbiIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiVmVyZ2xlaWNoOiBOZXVlIFplaWxlbiIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJWZXJnbGVpY2ggLSBOZXVlIFplaWxlbiIKKworIzogZ2l0azoxMTQzOAorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJWZXJnbGVpY2g6IMOEbmRlcnVuZ3N0aXRlbCIKKworIzogZ2l0azoxMTQ0MAorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgIlZlcmdsZWljaCAtIMOEbmRlcnVuZ3N0aXRlbCIKKworIzogZ2l0azoxMTQ0NAorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJIaW50ZXJncnVuZCBmw7xyIG1hcmtpZXJ0ZSBaZWlsZSIKKworIzogZ2l0azoxMTQ0NgorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIkhpbnRlcmdydW5kIGbDvHIgbWFya2llcnRlIFplaWxlIgorCisjOiBnaXRrOjExNDUwCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJIaW50ZXJncnVuZGZhcmJlIGF1c3fDpGhsZW4iCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJTY2hyaWZ0YXJ0OiBLbGlja2VuIHp1bSBXw6RobGVuIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJQcm9ncmFtbXNjaHJpZnRhcnQiCisKKyM6IGdpdGs6MTE0NjIKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiU2NocmlmdGFydCBmw7xyIFZlcmdsZWljaCIKKworIzogZ2l0azoxMTQ2MworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIkJlc2NocmlmdHVuZ2VuIgorCisjOiBnaXRrOjExNDg1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiR2l0ay1FaW5zdGVsbHVuZ2VuIgorCisjOiBnaXRrOjExNDk0Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiQWxsZ2VtZWluIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiQ29sb3JzIgorbXNnc3RyICJGYXJiZW4iCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiU2NocmlmdGFydGVuIgorCisjOiBnaXRrOjExNTQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogRmFyYmUgd8OkaGxlbiBmw7xyICVzIgorCisjOiBnaXRrOjEyMDU5Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiRW50c2NodWxkaWd1bmcsIGdpdGsga2FubiBuaWNodCBtaXQgZGllc2VyIFRjbC9UayBWZXJzaW9uIGF1c2dlZsO8aHJ0IHdlcmRlbi5cbiIKKyIgR2l0ayBlcmZvcmRlcnQgbWluZGVzdGVucyBUY2wvVGsgOC40LiIKKworIzogZ2l0azoxMjI2OQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIktlaW4gR2l0LVByb2pla3RhcmNoaXYgZ2VmdW5kZW4uIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJNZWhyZGV1dGlnZSBBbmdhYmUgwrslc8KrOiBTb3dvaGwgVmVyc2lvbiBhbHMgYXVjaCBEYXRlaW5hbWUgZXhpc3RpZXJ0LiIKKworIzogZ2l0azoxMjMyOAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkZhbHNjaGUgS29tbWFuZG96ZWlsZW4tUGFyYW1ldGVyIGbDvHIgZ2l0azoiCisKKyN+IG1zZ2lkICJtYyIKKyN+IG1zZ3N0ciAibWMiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICJuw6RjaHN0ZSIKKworI34gbXNnaWQgInByZXYiCisjfiBtc2dzdHIgInZvcmlnZSIKKworI34gbXNnaWQgIkNEYXRlIgorI34gbXNnc3RyICJFaW50cmFnZWRhdHVtIgorCisjfiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKKyN+IG1zZ3N0ciAiR2l0LVZlcnplaWNobmlzIMK7JXPCqyB3dXJkZSBuaWNodCBnZWZ1bmRlbi4iCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9lcy5wbyBiL2dpdGstZ2l0L3BvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZjNiYmEKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9lcy5wbwpAQCAtMCwwICsxLDE0MDUgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0aworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBTYW50aWFnbyBHYWxhCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjIFNhbnRpYWdvIEdhbGEgPHNhbnRpYWdvLmdhbGFAZ21haWwuY29tPiwgMjAwOC4KKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDMtMjUgMTE6MjArMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2FudGlhZ28gR2FsYSA8c2FudGlhZ28uZ2FsYUBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3BhbmlzaFxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkltcG9zaWJsZSBvYnRlbmVyIGxhIGxpc3RhIGRlIGFyY2hpdm9zIHBlbmRpZW50ZXMgZGUgZnVzacOzbjoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzI0CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRXJyb3IgYWwgbGVlciBsYXMgZGlmZXJlbmNpYXMgZGUgZnVzacOzbjoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIk5vIGhheSBhcmNoaXZvcyBzZWxlY2Npb25hZG9zOiBzZSBzZWxlY2Npb27DsyBsYSBvcGNpw7NuIC0tbWVyZ2UgcGVybyBubyBoYXkgIgorImFyY2hpdm9zIHBlbmRpZW50ZXMgZGUgZnVzacOzbi4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJObyBoYXkgYXJjaGl2b3Mgc2VsZWNjaW9uYWRvczogc2Ugc2VsZWNjaW9uw7MgbGEgb3BjacOzbiAtLW1lcmdlIHBlcm8gbG9zICIKKyJhcmNoaXZvcyBlc3BlY2lmaWNhZG9zIG5vIG5lY2VzaXRhbiBmdXNpw7NuLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJFcnJvciBhbCBjcmVhciBsYSBldGlxdWV0YToiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGV5ZW5kbyIKKworIzogZ2l0azo0OTYgZ2l0azo0NTI1Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMZXllbmRvIHJldmlzaW9uZXMuLi4iCisKKyM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjgKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJObyBzZSBzZWxlY2Npb25hcm9uIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDUgZ2l0azoxMjQzMgorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiTMOtbmVhIGRlIGNvbWFuZG9zIgorCisjOiBnaXRrOjE1MTEKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkVycm9yIGFuYWxpemFuZG8gbGEgc2FsaWRhIGRlIGdpdCBsb2c6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJGYWx0YSBpbmZvcm1hY2nDs24gc29icmUgbGFzIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAiQWNlcHRhciIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkNhbmNlbGFyIgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICJBY3R1YWxpemFyIgorCisjOiBnaXRrOjIwNzAKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiUmVsZWVyIHJlZmVyZW5jaWFzIgorCisjOiBnaXRrOjIwNzIKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJMaXN0YSBkZSByZWZlcmVuY2lhcyIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIiIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIlNhbGlyIgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiQXJjaGl2byIKKworIzogZ2l0azoyMDgwCittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXJlbmNpYXMiCisKKyM6IGdpdGs6MjA3OQorbXNnaWQgIiZFZGl0IgorbXNnc3RyICJFZGl0YXIiCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiTnVldmEgdmlzdGEuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIk1vZGlmaWNhciB2aXN0YS4uLiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJFbGltaW5hciB2aXN0YSIKKworIzogZ2l0azoyMDg4IGdpdGs6NDA0MworbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIlRvZG9zIGxvcyBhcmNoaXZvcyIKKworIzogZ2l0azoyMDgzIGdpdGs6NDA2NworbXNnaWQgIiZWaWV3IgorbXNnc3RyICJWaXN0YSIKKworIzogZ2l0azoyMDkzIGdpdGs6MjEwMyBnaXRrOjMwMTIKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAiQWNlcmNhIGRlIGdpdGsiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICJDb21iaW5hY2lvbmVzIGRlIHRlY2xhcyIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICJBeXVkYSIKKworIzogZ2l0azoyMTg1IGdpdGs6ODY1MgorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKKworIzogZ2l0azoyMjI5Cittc2dpZCAiUm93IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgIkJ1c2NhciIKKworIzogZ2l0azoyMjk1Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJyZXZpc2nDs24iCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgInF1ZSBjb250aWVuZToiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAicXVlIG1vZGlmaWNhIGxhIHJ1dGE6IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInF1ZSBhw7FhZGUvZWxpbWluYSBjYWRlbmE6IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWN0byIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJOb01hecO6cyIKKworIzogZ2l0azoyMzE1IGdpdGs6NDczNiBnaXRrOjQ4NTIgZ2l0azo2NzE5Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJSZWdleCIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiVG9kb3MgbG9zIGNhbXBvcyIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlTDrXR1bG8iCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NjkxNiBnaXRrOjczODkKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiQ29tZW50YXJpb3MiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRvciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo3MzI2Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiQnVzY2FyIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZlcmVuY2lhIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDs24gYW50aWd1YSIKKworIzogZ2l0azoyMzYyCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIlZlcnNpw7NuIG51ZXZhIgorCisjOiBnaXRrOjIzNjQKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJMw61uZWFzIGRlIGNvbnRleHRvIgorCisjOiBnaXRrOjIzNzQKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJJZ25vcmEgY2FtYmlvcyBkZSBlc3BhY2lhZG8iCisKKyM6IGdpdGs6MjM3OCBnaXRrOjIzODAgZ2l0azo3OTU5IGdpdGs6ODIwNgorbXNnaWQgIkxpbmUgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI0NDUKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiUGFyY2hlIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICLDgXJib2wiCisKKyM6IGdpdGs6MjYxNyBnaXRrOjI2MzcKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIkRpZmVyZW5jaWEgZGUgZXN0YSAtPiBzZWxlY2Npb25hZGEiCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmVyZW5jaWEgZGUgc2VsZWNjaW9uYWRhIC0+IGVzdGEiCisKKyM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJDcmVhciBwYXRjaCIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NAorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyZWFyIGV0aXF1ZXRhIgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIkVzY3JpYmlyIHJldmlzaW9uZXMgYSBhcmNoaXZvIgorCisjOiBnaXRrOjI2MjIgZ2l0azo5NDI4Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIkNyZWFyIG51ZXZhIHJhbWEiCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJBw7FhZGlyIGVzdGEgcmV2aXNpw7NuIGEgbGEgcmFtYSBhY3R1YWwgKGNoZXJyeS1waWNrKSIKKworIzogZ2l0azoyNjI0Cittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiVHJhZXIgbGEgcmFtYSBIRUFEIGFxdcOtIgorCisjOiBnaXRrOjI2MjUKKyMsIGZ1enp5Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiQcOxYWRpciBlc3RhIHJldmlzacOzbiBhIGxhIHJhbWEgYWN0dWFsIChjaGVycnktcGljaykiCisKKyM6IGdpdGs6MjYyNgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjYyNworbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjYyOAorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKKyMsIGZ1enp5Cittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIkRpZmVyZW5jaWEgZGUgZXN0YSAtPiBzZWxlY2Npb25hZGEiCisKKyM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKKyMsIGZ1enp5Cittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIkRpZmVyZW5jaWEgZGUgc2VsZWNjaW9uYWRhIC0+IGVzdGEiCisKKyM6IGdpdGs6MjYzMQorIywgZnV6enkKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgIkHDsWFkaXIgZXN0YSByZXZpc2nDs24gYSBsYSByYW1hIGFjdHVhbCAoY2hlcnJ5LXBpY2spIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkNhbWJpYXIgYSBlc3RhIHJhbWEiCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiRWxpbWluYXIgZXN0YSByYW1hIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiU2VsZWNjaW9uYXIgdGFtYmnDqW4iCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIlNlbGVjY2lvbmFyIHPDs2xvIgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY2NworbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIiIKKworIzogZ2l0azozMDE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSB1biB2aXN1YWxpemFkb3IgZGUgcmV2aXNpb25lcyBwYXJhIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCBcXHUwMGE5IDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzbyB5IHJlZGlzdHJpYnVjacOzbiBwZXJtaXRpZG9zIHNlZ8O6biBsb3MgdMOpcm1pbm9zIGRlIGxhIExpY2VuY2lhIFDDumJsaWNhICIKKyJHZW5lcmFsIGRlIEdOVSAoR05VIEdQTCkiCisKKyM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkNlcnJhciIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkNvbWJpbmFjaW9uZXMgZGUgdGVjbGEgZGUgR2l0ayIKKworIzogZ2l0azozMDQ2Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJDb21iaW5hY2lvbmVzIGRlIHRlY2xhIGRlIEdpdGs6IgorCisjOiBnaXRrOjMwNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdFNhbGlyIgorCisjOiBnaXRrOjMwNDkKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLUY+XHRcdEJ1c2NhciIKKworIzogZ2l0azozMDUwCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx0SXIgYSBsYSBwcmltZXJhIHJldmlzacOzbiIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0SXIgYSBsYSDDumx0aW1hIHJldmlzacOzbiIKKworIzogZ2l0azozMDUyCisjLCBmdXp6eQorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwPiwgcCwgaVx0U3ViaXIgdW5hIHJldmlzacOzbiIKKworIzogZ2l0azozMDUzCisjLCBmdXp6eQorbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwga1x0QmFqYXIgdW5hIHJldmlzacOzbiIKKworIzogZ2l0azozMDU0CisjLCBmdXp6eQorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0Piwgeiwgalx0UmV0cm9jZWRlciBlbiBsYSBoaXN0b3JpYSIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdEF2YW56YXIgZW4gbGEgaGlzdG9yaWEiCisKKyM6IGdpdGs6MzA1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0U3ViaXIgdW5hIHDDoWdpbmEgZW4gbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHRCYWphciB1bmEgcMOhZ2luYSBlbiBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjMwNTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ib21lPlx0RGVzcGxhemFyc2UgYWwgaW5pY2lvIGRlIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MzA2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0RGVzcGxhemFyc2UgYWwgZmluYWwgZGUgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHREZXNwbGF6YXIgdW5hIGzDrW5lYSBoYWNpYSBhcnJpYmEgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azozMDYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHREZXNwbGF6YXIgdW5hIGzDrW5lYSBoYWNpYSBhYmFqbyBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx0RGVzcGxhemFyIHVuYSBww6FnaW5hIGhhY2lhIGFycmliYSBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjMwNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx0RGVzcGxhemFyIHVuYSBww6FnaW5hIGhhY2lhIGFiYWpvIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MzA2NQorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LVVwPlx0QnVzY2FyIGhhY2lhIGF0csOhcyAoYXJyaWJhLCByZXZpc2lvbmVzIHNpZ3VpZW50ZXMpIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LURvd24+XHRCdXNjYXIgaGFjaWEgYWRlbGFudGUgKGFiYWpvLCByZXZpc2lvbmVzIGFudGVyaW9yZXMpIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdERlc3BsYXphIGhhY2lhIGFycmliYSB1bmEgcMOhZ2luYSBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHREZXNwbGF6YSBoYWNpYSBhcnJpYmEgdW5hIHDDoWdpbmEgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8U3BhY2U+XHRcdERlc3BsYXphIGhhY2lhIGFiYWpvIHVuYSBww6FnaW5hIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjMwNzAKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0RGVzcGxhemEgaGFjaWEgYXJyaWJhIDE4IGzDrW5lYXMgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MzA3MQorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdERlc3BsYXphIGhhY2lhIGFiYWpvIDE4IGzDrW5lYXMgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0QnVzY2FyIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0QnVzY2FyIGVsIHNpZ3VpZW50ZSIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdEJ1c2NhciBlbCBzaWd1aWVudGUiCisKKyM6IGdpdGs6MzA3NQorIywgZnV6enkKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0SXIgYSBsYSDDumx0aW1hIHJldmlzacOzbiIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0QnVzY2FyIGVsIGFudGVyaW9yIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdERlc3BsYXphciBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyBhbCBhcmNoaXZvIHNpZ3VpZW50ZSIKKworIzogZ2l0azozMDc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0QnVzY2FyIHNpZ3VpZW50ZSBlbiBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdEJ1c2NhciBhbnRlcmlvciBlbiBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1bWVudGFyIHRhbWHDsW8gZGVsIHRleHRvIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHRBdW1lbnRhciB0YW1hw7FvIGRlbCB0ZXh0byIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpc21pbnVpciB0YW1hw7FvIGRlbCB0ZXh0byIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHREaXNtaW51aXIgdGFtYcOxbyBkZWwgdGV4dG8iCisKKyM6IGdpdGs6MzA4NQorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEFjdHVhbGl6YXIiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkVycm9yIGVuIGxhIGNyZWFjacOzbiBkZWwgcGFyY2hlOiIKKworIzogZ2l0azozNTcyCisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGxhcyBkaWZlcmVuY2lhcyBkZSBmdXNpw7NuOiIKKworIzogZ2l0azozNjM1CisjLCBmdXp6eQorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiTMOtbmVhIGRlIGNvbWFuZG9zIgorCisjOiBnaXRrOjM3ODQKKyMsIGZ1enp5Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIk5vIHNlIGhhbiBndWFyZGFkbyBjYW1iaW9zIgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIiIKKworIzogZ2l0azozODI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjM4MzcKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycm9yIGFsIGNyZWFyIGxhIGV0aXF1ZXRhOiIKKworIzogZ2l0azozODYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJCdXNjYW5kbyIKKworIzogZ2l0azozODk3CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgbGEgZXRpcXVldGE6IgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzkzOQorIywgZnV6enkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJmXHRcdERlc3BsYXphciBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyBhbCBhcmNoaXZvIHNpZ3VpZW50ZSIKKworIzogZ2l0azo0MDcwCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkRlZmluaWNpw7NuIGRlIHZpc3RhcyBkZSBHaXRrIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlJlY29yZGFyIGVzdGEgdmlzdGEiCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDc2Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwNzcKKyMsIGZ1enp5Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlRvZG9zIGxvcyBhcmNoaXZvcyIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDc5Cittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwODEKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA4MgorIywgZnV6enkKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvciIKKworIzogZ2l0azo0MDgzCisjLCBmdXp6eQorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgInJldmlzacOzbiIKKworIzogZ2l0azo0MDg0Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA4NQorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA4NgorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwOTAKKyMsIGZ1enp5Cittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIkJ1c2NhbmRvIgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiU2luY2U6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA5NworbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDEwMAorIywgZnV6enkKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkxpbWl0YXIgbGFzIGRpZmVyZW5jaWFzIGEgbGFzIHJ1dGFzIHNlbGVjY2lvbmFkYXMiCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICIiCisKKyM6IGdpdGs6NDEwMgorIywgZnV6enkKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiUmV2aXNpb25lcyBhIGluY2x1aXIgKGFyZ3VtZW50b3MgYSBnaXQgbG9nKToiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJJbnRyb2R1Y2lyIGFyY2hpdm9zIHkgZGlyZWN0b3Jpb3MgYSBpbmNsdWlyLCB1bm8gcG9yIGzDrW5lYToiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJDb21hbmRvIHF1ZSBnZW5lcmEgbcOhcyByZXZpc2lvbmVzIGEgaW5jbHVpcjoiCisKKyM6IGdpdGs6NDIyOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQyMzYKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQyNDEKKyMsIGZ1enp5Cittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJWaXN0YSIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjQzNTQKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkVycm9yIGVuIGxvcyBhcmd1bWVudG9zIGRlIHNlbGVjY2nDs24gZGUgbGFzIHJldmlzaW9uZXM6IgorCisjOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAorbXNnaWQgIk5vbmUiCittc2dzdHIgIk5pbmd1bm8iCisKKyM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEZXNjZW5kaWVudGUiCisKKyM6IGdpdGs6NTAyMgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJObyBkZXNjZW5kaWVudGUiCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQW50ZXBhc2FkbyIKKworIzogZ2l0azo1MDMwCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJObyBhbnRlcGFzYWRvIgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIkNhbWJpb3MgbG9jYWxlcyBhw7FhZGlkb3MgYWwgw61uZGljZSBwZXJvIHNpbiBjb21wbGV0YXIgcmV2aXNpw7NuIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiQ2FtYmlvcyBsb2NhbGVzIHNpbiBhw7FhZGlyIGFsIMOtbmRpY2UiCisKKyM6IGdpdGs6NzEzNAorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgIiIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjczMjgKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiRXRpcXVldGFzOiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIlBhZHJlIgorCisjOiBnaXRrOjczNTYKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiSGlqYSIKKworIzogZ2l0azo3MzY1Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJSYW1hIgorCisjOiBnaXRrOjczNjgKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJTaWd1ZS1hIgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiUHJlY2VkZS1hIgorCisjOiBnaXRrOjc5NjYKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgbGFzIGRpZmVyZW5jaWFzIGRlIGZ1c2nDs246IgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiSXIgYToiCisKKyM6IGdpdGs6ODY3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJMYSBpZCBTSEExIGFicmV2aWFkYSAlcyBlcyBhbWJpZ3VhIgorCisjOiBnaXRrOjg2NzgKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMYSBpZCBTSEExICVzIGVzIGRlc2Nvbm9jaWRhIgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTGEgaWQgU0hBMSAlcyBlcyBkZXNjb25vY2lkYSIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIiIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgIkZlY2hhIgorCisjOiBnaXRrOjg4MzUKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiSGlqYXMiCisKKyM6IGdpdGs6ODg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJQb25lciBsYSByYW1hICVzIGVuIGVzdGEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjkwMjAgZ2l0azo5MDI1CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJyb3IgZW4gbGEgY3JlYWNpw7NuIGRlbCBwYXJjaGU6IgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1CisjLCBmdXp6eQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgInJldmlzacOzbiIKKworIzogZ2l0azo5MDM1Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKworIzogZ2l0azo5MDQzCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZ2l0azo5MDU3IGdpdGs6OTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTA4NQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJyb3IgYWwgZXNjcmliaXIgcmV2aXNpw7NuOiIKKworIzogZ2l0azo5MDkxCisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIHJldmlzacOzbjoiCisKKyM6IGdpdGs6OTEzNworbXNnaWQgIlRvcCIKK21zZ3N0ciAiT3JpZ2VuIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJGcm9tIgorbXNnc3RyICJEZSIKKworIzogZ2l0azo5MTQzCittc2dpZCAiVG8iCittc2dzdHIgIkEiCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHZW5lcmFyIHBhcmNoZSIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRlOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICJQYXJhOiIKKworIzogZ2l0azo5MTg3Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJ0aXIiCisKKyM6IGdpdGs6OTE4OSBnaXRrOjkzODUKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkVzY3JpYmlyIGEgYXJjaGl2bzoiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHZW5lcmFyIgorCisjOiBnaXRrOjkyMzMKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkVycm9yIGVuIGxhIGNyZWFjacOzbiBkZWwgcGFyY2hlOiIKKworIzogZ2l0azo5MjU2IGdpdGs6OTM3MyBnaXRrOjk0MzAKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5MjY1Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb21icmUgZGUgZXRpcXVldGE6IgorCisjOiBnaXRrOjkyNjgKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjkyNzAKKyMsIGZ1enp5Cittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJOb21icmUgZGUgZXRpcXVldGE6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcmVhciIKKworIzogZ2l0azo5MjkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJObyBzZSBoYSBlc3BlY2lmaWNhZG8gZXRpcXVldGEiCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkxhIGV0aXF1ZXRhIFwiJXNcIiB5YSBleGlzdGUiCisKKyM6IGdpdGs6OTMwNgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkVycm9yIGFsIGNyZWFyIGxhIGV0aXF1ZXRhOiIKKworIzogZ2l0azo5MzgyCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkNvbWFuZG86IgorCisjOiBnaXRrOjkzOTAKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiRXNjcmliaXIiCisKKyM6IGdpdGs6OTQwOAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAiRXJyb3IgYWwgZXNjcmliaXIgcmV2aXNpw7NuOiIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbWJyZToiCisKKyM6IGdpdGs6OTQ1OAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIkVzcGVjaWZpcXVlIHVuIG5vbWJyZSBwYXJhIGxhIG51ZXZhIHJhbWEiCisKKyM6IGdpdGs6OTQ2MworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiTGEgZXRpcXVldGEgXCIlc1wiIHlhIGV4aXN0ZSIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIkxhIHJldmlzacOzbiAlcyB5YSBlc3TDoSBpbmNsdWlkYSBlbiBsYSByYW1hICVzIC0tIMK/Vm9sdmVyIGEgYXBsaWNhcmxhPyIKKworIzogZ2l0azo5NTM1Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIkVsaWdpZW5kbyByZXZpc2lvbmVzIChjaGVycnktcGlja2luZykiCisKKyM6IGdpdGs6OTU0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogZ2l0azo5NTUwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiTm8gc2UgaGFuIGd1YXJkYWRvIGNhbWJpb3MiCisKKyM6IGdpdGs6OTU5MworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiTGEgcmV2aXNpw7NuICVzIHlhIGVzdMOhIGluY2x1aWRhIGVuIGxhIHJhbWEgJXMgLS0gwr9Wb2x2ZXIgYSBhcGxpY2FybGE/IgorCisjOiBnaXRrOjk1OTgKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICJSZXBvbmllbmRvIgorCisjOiBnaXRrOjk2MDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjk2MTAKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtYXIgZ2l0IHJlc2V0IgorCisjOiBnaXRrOjk2NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICLCv1JlcG9uZXIgbGEgcmFtYSAlcyBhICVzPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlRpcG8gZGUgcmVwb3NpY2nDs246IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiU3VhdmU6IE5vIGFsdGVyYSBsYSBjb3BpYSBkZSB0cmFiYWpvIG5pIGVsIMOtbmRpY2UiCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiTWl4dGE6IEFjdHVhbGl6YSBlbCDDrW5kaWNlLCBubyBhbHRlcmEgbGEgY29waWEgZGUgdHJhYmFqbyIKKworIzogZ2l0azo5NjY2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJEdXJhOiBBY3R1YWxpemEgZWwgw61uZGljZSB5IGxhIGNvcGlhIGRlIHRyYWJham9cbiIKKyIoYWJhbmRvbmEgVE9EQVMgbGFzIG1vZGlmaWNhY2lvbmVzIGxvY2FsZXMpIgorCisjOiBnaXRrOjk2ODMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIlJlcG9uaWVuZG8iCisKKyM6IGdpdGs6OTc0MworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiQ3JlYW5kbyBjb3BpYSBkZSB0cmFiYWpvIgorCisjOiBnaXRrOjk3OTYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICJObyBzZSBwdWVkZSBib3JyYXIgbGEgcmFtYSBhY3R1YWwiCisKKyM6IGdpdGs6OTgwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiTGFzIHJldmlzaW9uZXMgZGUgbGEgcmFtYSAlcyBubyBlc3TDoW4gcHJlc2VudGVzIGVuIG90cmFzIHJhbWFzLlxuIgorIsK/Qm9ycmFyIGxhIHJhbWEgJXM/IgorCisjOiBnaXRrOjk4MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIkV0aXF1ZXRhcyB5IHJhbWFzOiAlcyIKKworIzogZ2l0azo5ODUwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0cm8iCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBsZWVyIGxhIHRvcG9sb2fDrWEgZGUgcmV2aXNpb25lczogbGEgaW5mb3JtYWNpw7NuIHNvYnJlIGxhcyByYW1hcyB5ICIKKyJldGlxdWV0YXMgcHJlY2VkZW50ZXMgeSBzaWd1aWVudGVzIHNlcsOhIGluY29tcGxldGEuIgorCisjOiBnaXRrOjExMTIzCittc2dpZCAiVGFnIgorbXNnc3RyICJFdGlxdWV0YSIKKworIzogZ2l0azoxMTEyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTIxMAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTZWxlY3RvciBkZSB0aXBvZ3JhZsOtYXMgZ2l0ayIKKworIzogZ2l0azoxMTIyNworbXNnaWQgIkIiCittc2dzdHIgIkIiCisKKyM6IGdpdGs6MTEyMzAKK21zZ2lkICJJIgorbXNnc3RyICJJIgorCisjOiBnaXRrOjExMzQ4Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSB2aXN1YWxpemFjacOzbiBkZSBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJBbmNobyBtw6F4aW1vIGRlbCBncsOhZmljbyAoZW4gbMOtbmVhcykiCisKKyM6IGdpdGs6MTEzNTUKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJBbmNobyBtw6F4aW1vIGRlbCBncsOhZmljbyAoZW4gJSBkZWwgcGFuZWwpIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJNb3N0cmFyIGNhbWJpb3MgbG9jYWxlcyIKKworIzogZ2l0azoxMTM2MQorIywgZnV6enkKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJTZWxlY2Npb25hciBhdXRvbcOhdGljYW1lbnRlIFNIQTEgaGFzaCIKKworIzogZ2l0azoxMTM2NQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSB2aXN1YWxpemFjacOzbiBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azoxMTM3MQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJFc3BhY2lhZG8gZGUgdGFidWxhZG9yIgorCisjOiBnaXRrOjExMzc0CisjLCBmdXp6eQorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIk1vc3RyYXIgZXRpcXVldGFzIGNlcmNhbmFzIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJMaW1pdGFyIGxhcyBkaWZlcmVuY2lhcyBhIGxhcyBydXRhcyBzZWxlY2Npb25hZGFzIgorCisjOiBnaXRrOjExMzgzCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIiIKKworIzogZ2l0azoxMTM5NQorIywgZnV6enkKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIkdlbmVyYXIgcGFyY2hlIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE0MDIKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNvbG9yZXM6IHB1bHNlIHBhcmEgc2VsZWNjaW9uYXIiCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQxNworIywgZnV6enkKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgIlRpcG9ncmFmw61hIHBhcmEgaW50ZXJmYXogZGUgdXN1YXJpbyIKKworIzogZ2l0azoxMTQyMAorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkZvbmRvIgorCisjOiBnaXRrOjExNDIxIGdpdGs6MTE0NTEKKyMsIGZ1enp5Cittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAiRm9uZG8iCisKKyM6IGdpdGs6MTE0MjQKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJQcmltZXIgcGxhbm8iCisKKyM6IGdpdGs6MTE0MjUKKyMsIGZ1enp5Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJpbWVyIHBsYW5vIgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiBsw61uZWFzIHZpZWphcyIKKworIzogZ2l0azoxMTQyOQorIywgZnV6enkKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbMOtbmVhcyB2aWVqYXMiCisKKyM6IGdpdGs6MTE0MzMKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IGzDrW5lYXMgbnVldmFzIgorCisjOiBnaXRrOjExNDM0CisjLCBmdXp6eQorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBsw61uZWFzIG51ZXZhcyIKKworIzogZ2l0azoxMTQzOAorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBjYWJlY2VyYSBkZSBmcmFnbWVudG8iCisKKyM6IGdpdGs6MTE0NDAKKyMsIGZ1enp5Cittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogY2FiZWNlcmEgZGUgZnJhZ21lbnRvIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQ0NgorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQ1MAorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiQ29sb3IgZGUgZm9uZG8gZGUgbGEgc2VsZWNjacOzbiIKKworIzogZ2l0azoxMTQ1OQorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIlRpcG9ncmFmw61hczogcHVsc2UgcGFyYSBlbGVnaXIiCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlRpcG9ncmFmw61hIHByaW5jaXBhbCIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJUaXBvZ3JhZsOtYSBwYXJhIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjExNDYzCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiVGlwb2dyYWbDrWEgcGFyYSBpbnRlcmZheiBkZSB1c3VhcmlvIgorCisjOiBnaXRrOjExNDg1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyZW5jaWFzIGRlIGdpdGsiCisKKyM6IGdpdGs6MTE0OTQKKyMsIGZ1enp5Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiR2VuZXJhciIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNDk2Cittc2dpZCAiRm9udHMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTU0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IGVsZWdpciBjb2xvciBwYXJhICVzIgorCisjOiBnaXRrOjEyMDU5Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiRXN0YSB2ZXJzacOzbiBkZSBUY2wvVGsgZXMgZGVtYXNpYWRvIGFudGlndWEuXG4iCisiIEdpdGsgcmVxdWllcmUgVGNsL1RrIHZlcnNpw7NuIDguNCBvIHN1cGVyaW9yLiIKKworIzogZ2l0azoxMjI2OQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIk5vIGhheSB1biByZXBvc2l0b3JpbyBnaXQgYXF1w60uIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICIiCisiQXJndW1lbnRvIGFtYmlndW86ICclcycgZXMgdGFudG8gdW5hIHJldmlzacOzbiBjb21vIHVuIG5vbWJyZSBkZSBhcmNoaXZvIgorCisjOiBnaXRrOjEyMzI4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiQXJndW1lbnRvcyBpbmNvcnJlY3RvcyBhIEdpdGs6IgorCisjfiBtc2dpZCAiU0hBMSBJRDogIgorI34gbXNnc3RyICJTSEExIElEOiAiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICI8PCIKKworI34gbXNnaWQgInByZXYiCisjfiBtc2dzdHIgIj4+IgorCisjfiBtc2dpZCAiL1x0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQsIG9yIHJlZG8gZmluZCIKKyN+IG1zZ3N0ciAiL1x0XHRCdXNjYXIgZWwgc2lndWllbnRlLCBvIHJlaW5pY2lhciBsYSBiw7pzcXVlZGEiCisKKyN+IG1zZ2lkICJOYW1lIgorI34gbXNnc3RyICJOb21icmUiCisKKyN+IG1zZ2lkICJDRGF0ZSIKKyN+IG1zZ3N0ciAiRmVjaGEgZGUgY3JlYWNpw7NuIgorCisjfiBtc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgorI34gbXNnc3RyICJMYSBldGlxdWV0YS9yYW1hICVzIGVzIGRlY29ub2NpZGEiCisKKyN+IG1zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorI34gbXNnc3RyICJObyBoYXkgZGlyZWN0b3JpbyBnaXQgXCIlc1wiLiIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2ZyLnBvIGIvZ2l0ay1naXQvcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmYWM5MwotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2ZyLnBvCkBAIC0wLDAgKzEsMTQwMCBAQAorIyBGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIGdpdGsgcGFja2FnZQorIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjIFRyYW5zbGF0b3JzOgorIyBFbW1hbnVlbCBUcmlsbGF1ZCA8ZXRyaWxsYXVkQGdtYWlsLmNvbT4KKyMgSmVhbi1Ob8OrbCBBdmlsYSA8am4uYXZpbGFAZnJlZS5mcj4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMDEtMjIgMjI6MDQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDEtMjIgMjM6MjgrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmVhbi1Ob8OrbCBBdmlsYSA8am4uYXZpbGFAZnJlZS5mcj5cbiIKKyJMYW5ndWFnZS1UZWFtOiBnaXRAdmdlci5rZXJuZWwub3JnXG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtUG9lZGl0LUxhbmd1YWdlOiBGcmVuY2hcbiIKKyJYLVBvZWRpdC1Db3VudHJ5OiBGUkFOQ0VcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGEgbGlzdGUgZGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzIDoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM5OQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICJDb2xvcmllciBsZXMgbW90cyBkaWZmw6lyZW50cyIKKworIzogZ2l0azoyMTcgZ2l0azoyMzk5IGdpdGs6ODIzOSBnaXRrOjgyNzIKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgIk1hcnF1ZXIgbGVzIG1vdHMgZGlmZsOpcmVudHMiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJldXIgbG9ycyBkdSBwYXJjb3VycyBkZXMgcsOpdmlzaW9ucyA6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkVycmV1ciDDoCBsJ2V4w6ljdXRpb24gZGUgbGEgY29tbWFuZGUgLS1hcmdzY21kIDoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiQXVjdW4gZmljaGllciBzw6lsZWN0aW9ubsOpIDogLS1tZXJnZSBwcsOpY2lzw6ksIG1haXMgdG91cyBsZXMgZmljaGllcnMgc29udCAiCisiZnVzaW9ubsOpcy4iCisKKyMgRklYTUUgOiBhbcOpbGlvcmVyIGxhIHRyYWR1Y3Rpb24gZGUgJ2ZpbGUgbGltaXRlJworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiQXVjdW4gZmljaGllciBzw6lsZWN0aW9ubsOpIDogLS1tZXJnZSBwcsOpY2lzw6kgbWFpcyBhdWN1biBmaWNoaWVyIG5vbiBmdXNpb25uw6kgbidlc3QgZGFucyBsYSBsaW1pdGUgZGVzIGZpY2hpZXJzLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkVycmV1ciDDoCBsJ2V4w6ljdXRpb24gZGUgZ2l0IGxvZyA6IgorCisjOiBnaXRrOjQzNiBnaXRrOjU4MgorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIkxlY3R1cmUgZW4gY291cnMiCisKKyM6IGdpdGs6NDk2IGdpdGs6NDU0NAorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiTGVjdHVyZSBkZXMgY29tbWl0cy4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDU0NworbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIkF1Y3VuIGNvbW1pdCBzw6lsZWN0aW9ubsOpIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDY0IGdpdGs6MTI0NjkKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkxpZ25lIGRlIGNvbW1hbmRlIgorCisjOiBnaXRrOjE1MTEKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBsYSBzb3J0aWUgZGUgZ2l0IGxvZyA6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJBdWN1bmUgaW5mb3JtYXRpb24gZGlzcG9uaWJsZSBzdXIgbGUgY29tbWl0IgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMzNCBnaXRrOjk3MDIgZ2l0azoxMTI3NCBnaXRrOjExNTU0Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzM2IGdpdGs6OTIxNSBnaXRrOjkyOTQgZ2l0azo5NDI0IGdpdGs6OTQ3MyBnaXRrOjk3MDQKKyM6IGdpdGs6MTEyNzUgZ2l0azoxMTU1NQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQW5udWxlciIKKworIzogZ2l0azoyMDgzCittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICImUmVjaGFyZ2VyIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIlJlbGlyZSBsZXMgcsOpJmbDqXJlbmNlcyIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiJkxpc3RlciBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBnaXRrOjIwODgKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAiRMOpbWFycmVyIGdpdCAmZ3VpIgorCisjOiBnaXRrOjIwOTAKK21zZ2lkICImUXVpdCIKK21zZ3N0ciAiJlF1aXR0ZXIiCisKKyM6IGdpdGs6MjA4MgorbXNnaWQgIiZGaWxlIgorbXNnc3RyICImRmljaGllciIKKworIzogZ2l0azoyMDk0Cittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICJQcsOpZsOpcmVuY2VzIgorCisjOiBnaXRrOjIwOTMKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiJsOJZGl0ZXIiCisKKyM6IGdpdGs6MjA5OAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiJk5vdXZlbGxlIHZ1ZS4uLiIKKworIzogZ2l0azoyMDk5Cittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiJsOJZGl0ZXIgbGEgdnVlLi4uIgorCisjOiBnaXRrOjIxMDAKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIlN1cHByaW1lciBsYSB2dWUiCisKKyM6IGdpdGs6MjEwMgorbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIlRvdXMgbGVzIGZpY2hpZXJzIgorCisjOiBnaXRrOjIwOTcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiJlZ1ZSIKKworIzogZ2l0azoyMTA3IGdpdGs6MjExNworbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICLDgCBwcm9wb3MgZGUgZ2l0ayIKKworIzogZ2l0azoyMTA4IGdpdGs6MjEyMgorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciIKKworIzogZ2l0azoyMTA2IGdpdGs6MjEyMQorbXNnaWQgIiZIZWxwIgorbXNnc3RyICJBaWRlIgorCisjOiBnaXRrOjIxOTkgZ2l0azo4NjcxCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIklkIFNIQTEgOiIKKworIzogZ2l0azoyMjQzCittc2dpZCAiUm93IgorbXNnc3RyICJDb2xvbm5lIgorCisjOiBnaXRrOjIyODEKK21zZ2lkICJGaW5kIgorbXNnc3RyICJSZWNoZXJjaGUiCisKKyM6IGdpdGs6MjMwOQorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDcwNiBnaXRrOjQ3MjkgZ2l0azo0NzUzIGdpdGs6Njc3NCBnaXRrOjY4NDYKKyM6IGdpdGs6NjkzMQorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJjb250aWVudCA6IgorCisjOiBnaXRrOjIzMTYgZ2l0azozNTQ1IGdpdGs6MzU1MCBnaXRrOjQ3ODIKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgImNoZW1pbnMgbW9kaWZpw6lzIDoiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjQ3OTYKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiYWpvdXRlL3N1cHByaW1lIGxhIGNoYcOubmUgOiIKKworIzogZ2l0azoyMzE4IGdpdGs6NDc5OAorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAibW9kaWZpZSBsZXMgbGlnbmVzIHbDqXJpZmlhbnTCoDoiCisKKyM6IGdpdGs6MjMyNyBnaXRrOjIzMjkgZ2l0azo0Nzg1Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWN0IgorCisjOiBnaXRrOjIzMjkgZ2l0azo0ODczIGdpdGs6Njc0MgorbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnbm9yZXIgbGEgY2Fzc2UiCisKKyM6IGdpdGs6MjMyOSBnaXRrOjQ3NTUgZ2l0azo0ODcxIGdpdGs6NjczOAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiRXhwcmVzc2lvbiByw6lndWxpw6hyZSIKKworIzogZ2l0azoyMzMxIGdpdGs6MjMzMiBnaXRrOjQ4OTMgZ2l0azo0OTIzIGdpdGs6NDkzMCBnaXRrOjY4NjcgZ2l0azo2OTM1Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiVG91cyBsZXMgY2hhbXBzIgorCisjOiBnaXRrOjIzMzIgZ2l0azo0ODkwIGdpdGs6NDkyMyBnaXRrOjY4MDUKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiVGl0cmUiCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4OTAgZ2l0azo2ODA1IGdpdGs6NjkzNSBnaXRrOjc0MDgKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiQ29tbWVudGFpcmVzIgorCisjOiBnaXRrOjIzMzMgZ2l0azo0ODkwIGdpdGs6NDg5NSBnaXRrOjQ5MzAgZ2l0azo2ODA1IGdpdGs6NzM0MyBnaXRrOjg4NDkKKyM6IGdpdGs6ODg2NAorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0ZXVyIgorCisjOiBnaXRrOjIzMzMgZ2l0azo0ODkwIGdpdGs6NjgwNSBnaXRrOjczNDUKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIlZhbGlkYXRldXIiCisKKyM6IGdpdGs6MjM2NworbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiUmVjaGVyY2hlciIKKworIzogZ2l0azoyMzc1Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAiRGlmZiIKKworIzogZ2l0azoyMzc3Cittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIkFuY2llbm5lIHZlcnNpb24iCisKKyM6IGdpdGs6MjM3OQorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOb3V2ZWxsZSB2ZXJzaW9uIgorCisjOiBnaXRrOjIzODIKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJMaWduZXMgZGUgY29udGV4dGUiCisKKyM6IGdpdGs6MjM5MgorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yZXIgbGVzIG1vZGlmaWNhdGlvbnMgZCdlc3BhY2UiCisKKyM6IGdpdGs6MjM5NiBnaXRrOjIzOTggZ2l0azo3OTc4IGdpdGs6ODIyNQorbXNnaWQgIkxpbmUgZGlmZiIKK21zZ3N0ciAiZGlmZsOpcmVuY2UgcGFyIGxpZ25lIgorCisjOiBnaXRrOjI0NjMKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiUGF0Y2giCisKKyM6IGdpdGs6MjQ2NQorbXNnaWQgIlRyZWUiCittc2dzdHIgIkFyYnJlIgorCisjOiBnaXRrOjI2MzUgZ2l0azoyNjU2Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJEaWZmIGNlY2kgLT4gbGEgc8OpbGVjdGlvbiIKKworIzogZ2l0azoyNjM2IGdpdGs6MjY1NworbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBzw6lsZWN0aW9uIC0+IGNlY2kiCisKKyM6IGdpdGs6MjYzNyBnaXRrOjI2NTgKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJDcsOpZXIgcGF0Y2giCisKKyM6IGdpdGs6MjYzOCBnaXRrOjkyNzMKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJDcsOpZXIgw6l0aXF1ZXR0ZSIKKworIzogZ2l0azoyNjM5Cittc2dpZCAiQ29weSBjb21taXQgc3VtbWFyeSIKK21zZ3N0ciAiQ29wacOpIGxlIHLDqXN1bcOpIGR1IGNvbW1pdCIKKworIzogZ2l0azoyNjQwIGdpdGs6OTQwNAorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICLDiWNyaXJlIGxlIGNvbW1pdCBkYW5zIHVuIGZpY2hpZXIiCisKKyM6IGdpdGs6MjY0MSBnaXRrOjk0NjEKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBnaXRrOjI2NDIKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiQ3VlaWxsaXIgKGNoZXJyeS1waWNrKSBjZSBjb21taXQiCisKKyM6IGdpdGs6MjY0MworbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlLDqWluaXRpYWxpc2VyIGxhIGJyYW5jaGUgSEVBRCB2ZXJzIGNldCDDqXRhdCIKKworIzogZ2l0azoyNjQ0Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTWFycXVlciBjZSBjb21taXQiCisKKyM6IGdpdGs6MjY0NQorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICJSZXRvdXJuZXIgw6AgbGEgbWFycXVlIgorCisjOiBnaXRrOjI2NDYKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiQ2hlcmNoZXIgbGUgZGVzY2VuZGFudCBkZSBjZWNpIGV0IGxlIG1hcnF1ZXIiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJDb21wYXJlciBhdmVjIGxlIGNvbW1pdCBtYXJxdcOpIgorCisjOiBnaXRrOjI2NDggZ2l0azoyNjU5Cittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIkRpZmYgY2VjaSAtPiBzw6lsZWN0aW9uIgorCisjOiBnaXRrOjI2NDkgZ2l0azoyNjYwCittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIkRpZmYgZW50cmUgc8OpbGVjdGlvbiAtPiBjZWNpIgorCisjOiBnaXRrOjI2NTAKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgIkTDqWZhaXJlIGNlIGNvbW1pdCIKKworIzogZ2l0azoyNjY2Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJSw6ljdXDDqXJlciBjZXR0ZSBicmFuY2hlIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlN1cHByaW1lciBjZXR0ZSBicmFuY2hlIgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICJDb3BpZXIgbGEgbm9tIGRlIGxhIGJyYW5jaGUiCisKKyM6IGdpdGs6MjY3NQorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiU3VybGlnbmVyIMOpZ2FsZW1lbnQgY2VjaSIKKworIzogZ2l0azoyNjc2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiU3VybGlnbmVyIHNldWxlbWVudCBjZWNpIgorCisjOiBnaXRrOjI2NzcKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJEaWZmIGV4dGVybmUiCisKKyM6IGdpdGs6MjY3OAorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIkJsw6JtZXIgbGUgY29tbWl0IHBhcmVudCIKKworIzogZ2l0azoyNjc5Cittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICJDb3BpZXIgbGUgY2hlbWluIgorCisjOiBnaXRrOjI2ODYKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIk1vbnRyZXIgbCdvcmlnaW5lIGRlIGNldHRlIGxpZ25lIgorCisjOiBnaXRrOjI2ODcKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkV4w6ljdXRlciBnaXQgZ3VpIGJsYW1lIHN1ciBjZXR0ZSBsaWduZSIKKworIzogZ2l0azozMDMxCittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAiw4AgcHJvcG9zIGRlIGdpdGsiCisKKyM6IGdpdGs6MzAzMworbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSB2aXN1YWxpc2F0ZXVyIGRlIGNvbW1pdCBwb3VyIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCBcXHUwMGE5IDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlV0aWxpc2F0aW9uIGV0IHJlZGlzdHJpYnV0aW9uIHNvdW1pc2VzIGF1eCB0ZXJtZXMgZGUgbGEgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisKKyM6IGdpdGs6MzA0MSBnaXRrOjMxMDggZ2l0azo5ODkwCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkZlcm1lciIKKworIzogZ2l0azozMDYyCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIDoiCisKKyM6IGdpdGs6MzA2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0UXVpdHRlciIKKworIzogZ2l0azozMDY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdEZlcm1lciBsYSBmZW7DqnRyZSIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8RMOpYnV0Plx0XHRBbGxlciBhdSBwcmVtaWVyIGNvbW1pdCIKKworIzogZ2l0azozMDcwCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEZpbj5cdFx0QWxsZXIgYXUgZGVybmllciBjb21taXQiCisKKyM6IGdpdGs6MzA3MQorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPEhhdXQ+LCBwLCBrXHQgQWxsZXIgYXUgY29tbWl0IHByw6ljw6lkZW50IgorCisjOiBnaXRrOjMwNzIKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8QmFzPiwgbiwgalx0IEFsbGVyIGF1IGNvbW1pdCBzdWl2YW50IgorCisjOiBnaXRrOjMwNzMKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8R2F1Y2hlPiwgeiwgaFx0UmVjdWxlciBkYW5zIGwnaGlzdG9yaXF1ZSIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxEcm9pdGU+LCB4LCBsXHRBdmFuY2VyIGRhbnMgbCdoaXN0b3JpcXVlIgorCisjOiBnaXRrOjMwNzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPCVzLW4+XHRBbGxlciBzdXIgbGUgbi1pw6htZSBwYXJlbnQgZHUgY29tbWl0IGRhbnMgbCdoaXN0b3JpcXVlIgorCisjOiBnaXRrOjMwNzYKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRMOpYnV0Plx0QWxsZXIgZW4gaGF1dCBkZSBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHRBbGxlciBlbiBiYXMgZGUgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx0TW9udGVyIGQndW5lIGxpZ25lIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MzA4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx0RGVzY2VuZHJlIGQndW5lIGxpZ25lIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDg0Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LVVwPlx0UmVjaGVyY2hlIGVuIGFycmnDqHJlICh2ZXJzIGwnYXZhbnQsIGNvbW1pdHMgbGVzIHBsdXMgYW5jaWVucykiCisKKyM6IGdpdGs6MzA4NQorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LURvd24+XHRSZWNoZXJjaGUgZW4gYXZhbnQgKHZlcnMgbCdhcnJpw6hyZSwgY29tbWl0IGxlcyBwbHVzIHLDqWNlbnRzKSIKKworIzogZ2l0azozMDg2Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxTdXBwcmltZXI+LCBiXHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azozMDg3Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHRNb250ZXIgZCd1bmUgcGFnZSBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azozMDg4Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxFc3BhY2U+XHRcdERlc2NlbmRyZSBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwODkKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0TW9udGVyIGRlIDE4IGxpZ25lcyBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azozMDkwCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0RGVzY2VuZHJlIGRlIDE4IGxpZ25lcyBkYW5zIGxhIHZ1ZSBkZXMgZGlmZiIKKworIzogZ2l0azozMDkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRSZWNoZXJjaGVyIgorCisjOiBnaXRrOjMwOTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IGRlIHJlY2hlcmNoZSBzdWl2YW50IgorCisjOiBnaXRrOjMwOTMKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHN1aXZhbnQiCisKKyM6IGdpdGs6MzA5NAorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICJnXHRcdEFsbGVyIGF1IGNvbW1pdCIKKworIzogZ2l0azozMDk1Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRGb2N1cyBzdXIgbGEgem9uZSBkZSByZWNoZXJjaGUiCisKKyM6IGdpdGs6MzA5NgorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHByw6ljw6lkZW50IgorCisjOiBnaXRrOjMwOTcKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdEFsbGVyIGF1IHByb2NoYWluIGZpY2hpZXIgZGFucyBsYSB2dWUgZGVzIGRpZmYiCisKKyM6IGdpdGs6MzA5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBzdWl2YW50IGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwOTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IHByw6ljw6lkZW50IGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMxMDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0QXVnbWVudGVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UiCisKKyM6IGdpdGs6MzEwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdEF1Z21lbnRlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgorCisjOiBnaXRrOjMxMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1AtPlx0RGltaW51ZXIgbGEgdGFpbGxlIGRlIGxhIHBvbGljZSIKKworIzogZ2l0azozMTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHREaW1pbnVlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgorCisjOiBnaXRrOjMxMDQKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRNaXNlIMOgIGpvdXIiCisKKyM6IGdpdGs6MzU2OSBnaXRrOjM1NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY3LDqWF0aW9uIGR1IHLDqXBlcnRvaXJlIHRlbXBvcmFpcmUgJXMgOiIKKworIzogZ2l0azozNTkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkVycmV1ciBlbiBvYnRlbmFudCBcIiVzXCIgZGUgJXM6IgorCisjOiBnaXRrOjM2NTQKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBjb21tYW5kZSA6IgorCisjOiBnaXRrOjM4MDMKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiQ29tbWl0IGluZXhpc3RhbnQiCisKKyM6IGdpdGs6MzgxNworbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZSA6IMOpY2hlYyBkZSBsYSBjb21tYW5kZSA6IgorCisjOiBnaXRrOjM4NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbGUgaGVhZCBkZSBsYSBmdXNpb24gOiAlcyIKKworIzogZ2l0azozODU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycmV1ciDDoCBsYSBsZWN0dXJlIGRlIGwnaW5kZXggOiAlcyIKKworIzogZ2l0azozODgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgZ2l0IGJsYW1lIDogJXMiCisKKyM6IGdpdGs6Mzg4NCBnaXRrOjY3NzMKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlJlY2hlcmNoZSBlbiBjb3VycyIKKworIzogZ2l0azozOTE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJFcnJldXIgw6AgbCdleMOpY3V0aW9uIGRlIGdpdCBibGFtZSA6ICVzIgorCisjOiBnaXRrOjM5NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICJDZXR0ZSBsaWduZSBlc3QgaXNzdWUgZHUgY29tbWl0ICVzLCBxdWkgbidlc3QgcGFzIGRhbnMgY2V0dGUgdnVlIgorCisjOiBnaXRrOjM5NTgKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICLDiWNoZWMgZGUgbCdvdXRpbCBleHRlcm5lIGRlIHZpc3VhbGlzYXRpb24gZGVzIGRpZmbCoDoiCisKKyM6IGdpdGs6NDA2MgorbXNnaWQgIkFsbCBmaWxlcyIKK21zZ3N0ciAiVG91cyBsZXMgZmljaGllcnMiCisKKyM6IGdpdGs6NDA4NgorbXNnaWQgIlZpZXciCittc2dzdHIgIlZ1ZSIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkTDqWZpbml0aW9uIGRlcyB2dWVzIGRlIEdpdGsiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiU2Ugc291dmVuaXIgZGUgY2V0dGUgdnVlIgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSw6lmw6lyZW5jZXMgKGxpc3RlIGQnw6lsw6ltZW50cyBzw6lwYXLDqXMgcGFyIGRlcyBlc3BhY2VzKSA6IgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJCcmFuY2hlcyAmIMOpdGlxdWV0dGVzIDoiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJUb3V0ZXMgbGVzIHLDqWbDqXJlbmNlcyIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIlRvdXRlcyBsZXMgYnJhbmNoZXMgKGxvY2FsZXMpIgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiVG91dGVzIGxlcyDDqXRpcXVldHRlcyIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiVG91dGVzIGxlcyBicmFuY2hlcyBkZSBzdWl2aSDDoCBkaXN0YW5jZSIKKworIzogZ2l0azo0MTAwCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiSW5mbyBzdXIgbGVzIGNvbW1pdHMgKGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcykgOiIKKworIzogZ2l0azo0MTAxCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0ZXVyIDoiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIlZhbGlkYXRldXIgOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCA6IgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQ29ycmVzcG9uZCDDoCB0b3VzIGxlcyBjcml0w6hyZXMgZCdJbmZvIHN1ciBsZXMgY29tbWl0cyIKKworIzogZ2l0azo0MTA1Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiTmUgY29ycmVzcG9uZCDDoCBhdWN1biBkZXMgY3JpdMOocmVzIGQnSW5mbyBzdXIgbGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6NDEwNgorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJDaGFuZ2VtZW50cyBkZXMgZmljaGllcnMgOiIKKworIzogZ2l0azo0MTA3Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJDaGHDrm5lIEZpZ8OpZSIKKworIzogZ2l0azo0MTA4Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJFeHByZXNzaW9uIFLDqWd1bGnDqHJlIgorCisjOiBnaXRrOjQxMDkKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiUmVjaGVyY2hlIGRlIGxhIGNoYcOubmUgOiIKKworIzogZ2l0azo0MTEwCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiRGF0ZXMgZGVzIGNvbW1pdHMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsICIKKyIyMDA5IDE1OjI3OjM4XCIpIDoiCisKKyM6IGdpdGs6NDExMQorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiRGVwdWlzIDoiCisKKyM6IGdpdGs6NDExMgorbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiSnVzcXUnYXUgOiIKKworIzogZ2l0azo0MTEzCittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkxpbWl0ZXIgZXQvb3Ugc2F1dGVyIHVuIGNlcnRhaW4gbm9tYnJlIChlbnRpZXIgcG9zaXRpZikgZGUgcsOpdmlzaW9ucyA6IgorCisjOiBnaXRrOjQxMTQKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIk5vbWJyZSDDoCBhZmZpY2hlciA6IgorCisjOiBnaXRrOjQxMTUKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIk5vbWJyZSDDoCBzYXV0ZXIgOiIKKworIzogZ2l0azo0MTE2Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiT3B0aW9ucyBkaXZlcnNlcyA6IgorCisjOiBnaXRrOjQxMTcKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIlRyaWVyIHBhciBkYXRlIgorCisjOiBnaXRrOjQxMTgKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiSW5kaXF1ZXIgbGVzIGPDtHTDqXMgZGVzIGJyYW5jaGVzIgorCisjOiBnaXRrOjQxMTkKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkxpbWl0ZXIgYXUgcHJlbWllciBhbmPDqnRyZSIKKworIzogZ2l0azo0MTIwCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkhpc3RvcmlxdWUgc2ltcGxlIgorCisjOiBnaXRrOjQxMjEKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiQXJndW1lbnRzIHN1cHBsw6ltZW50YWlyZXMgZGUgZ2l0IGxvZyA6IgorCisjOiBnaXRrOjQxMjIKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiU2Fpc2lyIGxlcyBmaWNoaWVycyBldCByw6lwZXJ0b2lyZXMgw6AgaW5jbHVyZSwgdW4gcGFyIGxpZ25lIDoiCisKKyM6IGdpdGs6NDEyMworbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJDb21tYW5kZSBwb3VyIGfDqW7DqXJlciBwbHVzIGRlIGNvbW1pdHMgw6AgaW5jbHVyZSA6IgorCisjOiBnaXRrOjQyNDcKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGsgOiDDqWRpdGVyIGxhIHZ1ZSIKKworIzogZ2l0azo0MjU1Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIGNyaXTDqHJlIHBvdXIgbGEgc8OpbGVjdGlvbiBkZXMgcsOpdmlzaW9ucyIKKworIzogZ2l0azo0MjYwCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJOb20gZGUgbGEgdnVlIgorCisjOiBnaXRrOjQzMzUKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBcHBsaXF1ZXIgKEY1KSIKKworIzogZ2l0azo0MzczCittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJFcnJldXIgZGFucyBsZXMgYXJndW1lbnRzIGRlIHPDqWxlY3Rpb24gZGVzIGNvbW1pdHMgOiIKKworIzogZ2l0azo0NDI4IGdpdGs6NDQ4MSBnaXRrOjQ5NDMgZ2l0azo0OTU3IGdpdGs6NjIyNyBnaXRrOjEyNDEwIGdpdGs6MTI0MTEKK21zZ2lkICJOb25lIgorbXNnc3RyICJBdWN1biIKKworIzogZ2l0azo1MDQwIGdpdGs6NTA0NQorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkRlc2NlbmRhbnQiCisKKyM6IGdpdGs6NTA0MQorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJQYXMgdW4gZGVzY2VuZGFudCIKKworIzogZ2l0azo1MDQ4IGdpdGs6NTA1MworbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBbmPDqnRyZSIKKworIzogZ2l0azo1MDQ5Cittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJQYXMgdW4gYW5jw6p0cmUiCisKKyM6IGdpdGs6NTM0MworbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBsb2NhbGVzIGVucmVnaXN0csOpZXMgZGFucyBsJ2luZGV4IG1haXMgbm9uIHZhbGlkw6llcyIKKworIzogZ2l0azo1Mzc5Cittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgbG9jYWxlcyBub24gZW5yZWdpc3Ryw6llcyBkYW5zIGwnaW5kZXggZXQgbm9uIHZhbGlkw6llcyIKKworIzogZ2l0azo3MTUzCittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAiZXQgYmVhdWNvdXAgcGx1cyIKKworIzogZ2l0azo3MTU2Cittc2dpZCAibWFueSIKK21zZ3N0ciAibm9tYnJldXgiCisKKyM6IGdpdGs6NzM0NworbXNnaWQgIlRhZ3M6IgorbXNnc3RyICLDiXRpcXVldHRlcyA6IgorCisjOiBnaXRrOjczNjQgZ2l0azo3MzcwIGdpdGs6ODg0NAorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiUGFyZW50IgorCisjOiBnaXRrOjczNzUKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiRW5mYW50IgorCisjOiBnaXRrOjczODQKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIkJyYW5jaGUiCisKKyM6IGdpdGs6NzM4NworbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlN1aXQiCisKKyM6IGdpdGs6NzM5MAorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJQcsOpY8OoZGUiCisKKyM6IGdpdGs6Nzk4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSByw6ljdXDDqXJhdGlvbiBkZXMgZGlmZiA6ICVzIgorCisjOiBnaXRrOjg2NjkKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiQWxsZXIgw6AgOiIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkwnaWQgU0hBMSBjb3VydCAlcyBlc3QgYW1iaWd1IgorCisjOiBnaXRrOjg2OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIHLDqXZpc2lvbiAlcyBlc3QgaW5jb25udSIKKworIzogZ2l0azo4NzA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkwnaWQgU0hBMSAlcyBlc3QgaW5jb25udSIKKworIzogZ2l0azo4NzA5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIkxhIHLDqXZpc2lvbiAlcyBuJ2VzdCBwYXMgZGFucyBsYSB2dWUgY291cmFudGUiCisKKyM6IGdpdGs6ODg1MSBnaXRrOjg4NjYKK21zZ2lkICJEYXRlIgorbXNnc3RyICJEYXRlIgorCisjOiBnaXRrOjg4NTQKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiRW5mYW50cyIKKworIzogZ2l0azo4OTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlLDqWluaXRpYWxpc2VyIGxhIGJyYW5jaGUgJXMgdmVycyBjZXQgw6l0YXQiCisKKyM6IGdpdGs6ODkxOQorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICJIZWFkIGTDqXRhY2jDqSA6IGltcG9zc2libGUgZGUgcsOpaW5pdGlhbGlzZXIiCisKKyM6IGdpdGs6OTAyNCBnaXRrOjkwMzAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLDiXZpdGVyIGxlIGNvbW1pdCBkZSBsYSBmdXNpb24gIgorCisjOiBnaXRrOjkwMzkgZ2l0azo5MDQ0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJFcnJldXIgw6AgbCdvYnRlbnRpb24gZGUgbCdJRCBkdSBwYXRjaCBwb3VyICIKKworIzogZ2l0azo5MDQwIGdpdGs6OTA0NQorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIGFycsOqdCBlbiBjb3Vyc1xuIgorCisjOiBnaXRrOjkwNTAgZ2l0azo5MDUzIGdpdGs6OTA2MSBnaXRrOjkwNzUgZ2l0azo5MDg0Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiQ29tbWl0ICIKKworIzogZ2l0azo5MDU0Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyJlc3QgbGUgbcOqbWUgcGF0Y2ggcXVlIFxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA2MgorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBkaWZmw6hyZSBkZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA2NAorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIkRpZmYgZGVzIGNvbW1pdHPCoDpcblxuIgorCisjOiBnaXRrOjkwNzYgZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiBhICVzIGVuZmFudHMgLSBhcnLDqnQgZW4gY291cnNcbiIKKworIzogZ2l0azo5MTA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkVycmV1ciDDoCBsJ8OpY3JpdHVyZSBkdSBjb21taXQgZGFucyBsZSBmaWNoaWVyIDogJXMiCisKKyM6IGdpdGs6OTExMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkVycmV1ciDDoCBsYSBkaWZmw6lyZW5jZSBkZXMgY29tbWl0cyA6ICVzIgorCisjOiBnaXRrOjkxNTYKK21zZ2lkICJUb3AiCittc2dzdHIgIkhhdXQiCisKKyM6IGdpdGs6OTE1NworbXNnaWQgIkZyb20iCittc2dzdHIgIkRlIgorCisjOiBnaXRrOjkxNjIKK21zZ2lkICJUbyIKK21zZ3N0ciAiw4AiCisKKyM6IGdpdGs6OTE4NgorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHw6luw6lyZXIgbGUgcGF0Y2giCisKKyM6IGdpdGs6OTE4OAorbXNnaWQgIkZyb206IgorbXNnc3RyICJEZSA6IgorCisjOiBnaXRrOjkxOTcKK21zZ2lkICJUbzoiCittc2dzdHIgIsOAIDoiCisKKyM6IGdpdGs6OTIwNgorbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIkludmVyc2VyIgorCisjOiBnaXRrOjkyMDggZ2l0azo5NDE4Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJGaWNoaWVyIGRlIHNvcnRpZSA6IgorCisjOiBnaXRrOjkyMTQKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAiR8OpbsOpcmVyIgorCisjOiBnaXRrOjkyNTIKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkVycmV1ciDDoCBsYSBjcsOpYXRpb24gZHUgcGF0Y2ggOiIKKworIzogZ2l0azo5Mjc1IGdpdGs6OTQwNiBnaXRrOjk0NjMKK21zZ2lkICJJRDoiCittc2dzdHIgIklEIDoiCisKKyM6IGdpdGs6OTI4NAorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiTm9tIGRlIGwnw6l0aXF1ZXR0ZSA6IgorCisjOiBnaXRrOjkyODcKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiTGUgbWVzc2FnZSBkJ8OpdGlxdWV0dGUgZXN0IG9wdGlvbm5lbCIKKworIzogZ2l0azo5Mjg5Cittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGQnw6l0aXF1ZXR0ZSA6IgorCisjOiBnaXRrOjkyOTMgZ2l0azo5NDcyCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcsOpZXIiCisKKyM6IGdpdGs6OTMxMQorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiQXVjdW4gbm9tIGQnw6l0aXF1ZXR0ZSBzcMOpY2lmacOpIgorCisjOiBnaXRrOjkzMTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJMJ8OpdGlxdWV0dGUgXCIlc1wiIGV4aXN0ZSBkw6lqw6AiCisKKyM6IGdpdGs6OTMyNQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkVycmV1ciDDoCBsYSBjcsOpYXRpb24gZGUgbCfDqXRpcXVldHRlIDoiCisKKyM6IGdpdGs6OTQxNQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21tYW5kZSA6IgorCisjOiBnaXRrOjk0MjMKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiw4ljcmlyZSIKKworIzogZ2l0azo5NDQxCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJldXIgw6AgbCdlY3JpdHVyZSBkdSBjb21taXQgOiIKKworIzogZ2l0azo5NDY4Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbSA6IgorCisjOiBnaXRrOjk0OTEKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJWZXVpbGxleiBzcMOpY2lmaWVyIHVuIG5vbSBwb3VyIGxhIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGdpdGs6OTQ5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJMYSBicmFuY2hlICclcycgZXhpc3RlIGTDqWrDoC4gw4ljcmFzZXI/IgorCisjOiBnaXRrOjk1NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIkxlIENvbW1pdCAlcyBlc3QgZMOpasOgIGluY2x1cyBkYW5zIGxhIGJyYW5jaGUgJXMgLS0gbGUgcsOpLWFwcGxpcXVlciBtYWxncsOpICIKKyJ0b3V0PyIKKworIzogZ2l0azo5NTY4Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIlBpY29yZXIgKENoZXJyeS1waWNraW5nKSIKKworIzogZ2l0azo5NTc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkxlIHBpY29yYWdlIChjaGVycnktcGljaykgYSDDqWNob3XDqWUgw6AgY2F1c2UgZGUgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIGR1IGZpY2hpZXIgJyVzJy5cbiIKKyJWZXVpbGxleiBjb21taXRlciwgcsOpaW5pdGlhbGlzZXIgb3Ugc3Rhc2hlciB2b3MgY2hhbmdlbWVudHMgZXQgZXNzYXllciBkZSBub3V2ZWF1LiIKKworIzogZ2l0azo5NTgzCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiTGUgcGljb3JhZ2UgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkJ3VuIGNvbmZsaXQgbG9ycyBkJ3VuZSBmdXNpb24uXG4iCisiU291aGFpdGV6LXZvdXMgZXjDqWN1dGVyIGdpdCBjaXRvb2wgcG91ciBsZSByw6lzb3VkcmUgPyIKKworIzogZ2l0azo5NTk5IGdpdGs6OTY1NworbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJBdWN1bmUgbW9kaWZpY2F0aW9uIHZhbGlkw6llIgorCisjOiBnaXRrOjk2MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiTGUgQ29tbWl0ICVzIG4nZXN0IHBhcyBpbmNsdXMgZGFucyBsYSBicmFuY2hlICVzIC0tIGxlIGTDqWZhaXJlIG1hbGdyw6kgdG91dD8iCisKKyM6IGdpdGs6OTYzMQorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAiQ29tbWl0IGTDqWZhaXQiCisKKyM6IGdpdGs6OTYzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICLDiWNoZWMgZW4gdGVudGFudCBkZSBkw6lmYWlyZSBsZSBjb21taXQgw6AgY2F1c2UgZGUgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIGRlcyBmaWNoaWVyc8KgOiAlcy4gVmV1aWxsZXogdmFsaWRlciwgcsOpaW5pdGlhbGlzZXIgb3UgcmVtaXNlciB2b3MgbW9kaWZpY2F0aW9ucyBldCBlc3NheWVyIGRlIG5vdXZlYXUuIgorCisjOiBnaXRrOjk2NDMKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIsOJY2hlYyBlbiB0ZW50YW50IGRlIGTDqWZhaXJlIMOgIGNhdXNlIGQndW4gY29uZmxpdCBkZSBmdXNpb24uXG4iCisiU291aGFpdGV6LXZvdXMgZXjDqWN1dGVyIGdpdCBjaXRvb2wgcG91ciBsZSByw6lzb3VkcmUgPyIKKworIzogZ2l0azo5Njg2Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQ29uZmlybWVyIGxhIHLDqWluaXRpYWxpc2F0aW9uIgorCisjOiBnaXRrOjk2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICJSw6lpbml0aWFsaXNlciBsYSBicmFuY2hlICVzIMOgICVzPyIKKworIzogZ2l0azo5NjkwCittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlR5cGUgZGUgcsOpaW5pdGlhbGlzYXRpb24gOiIKKworIzogZ2l0azo5NjkzCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIkRvdWNlIDogTGFpc3NlIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgZXQgbCdpbmRleCBpbnRhY3RzIgorCisjOiBnaXRrOjk2OTYKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIiIKKyJIeWJyaWRlIDogTGFpc3NlIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgZGFucyBzb24gw6l0YXQgY291cmFudCwgIgorInLDqWluaXRpYWxpc2UgbCdpbmRleCIKKworIzogZ2l0azo5Njk5Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJEdXJlIDogUsOpaW5pdGlhbGlzZSBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIGV0IGwnaW5kZXhcbiIKKyIoYWJhbmRvbm5lIFRPVVRFUyBsZXMgbW9kaWZpY2F0aW9ucyBsb2NhbGUpIgorCisjOiBnaXRrOjk3MTYKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIlLDqWluaXRpYWxpc2F0aW9uIgorCisjIEZpeG1lOiBSw6ljdXDDqXJhdGlvbiBlc3QtaWwgdnJhaW1lbnQgdW5lIG1hdXZhaXNlIHRyYWR1Y3Rpb24/CisjOiBnaXRrOjk3NzYKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkV4dHJhY3Rpb24iCisKKyM6IGdpdGs6OTgyOQorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIGJyYW5jaGUgZXh0cmFpdGUiCisKKyM6IGdpdGs6OTgzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiTGVzIGNvbW1pdHMgZGUgbGEgYnJhbmNoZSAlcyBuZSBzb250IGRhbnMgYXVjdW5lIGF1dHJlIGJyYW5jaGUuXG4iCisiVm91bGV6LXZvdXMgdnJhaW1lbnQgc3VwcHJpbWVyIGNldHRlIGJyYW5jaGUgJXMgPyIKKworIzogZ2l0azo5ODY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICLDiXRpcXVldHRlcyBldCBoZWFkcyA6ICVzIgorCisjOiBnaXRrOjk4ODMKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRyZXIiCisKKyM6IGdpdGs6MTAxNzkKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJFcnJldXIgw6AgbGEgbGVjdHVyZSBkZXMgaW5mb3JtYXRpb25zIHN1ciBsYSB0b3BvbG9naWUgZGVzIGNvbW1pdHMsIGxlcyAiCisiaW5mb3JtYXRpb25zIHN1ciBsZXMgYnJhbmNoZXMgZXQgbGVzIHRhZ3MgcHLDqWPDqWRlbnRzL3N1aXZhbnRzIHNlcm9udCAiCisiaW5jb21wbMOodGVzLiIKKworIzogZ2l0azoxMTE1NgorbXNnaWQgIlRhZyIKK21zZ3N0ciAiw4l0aXF1ZXR0ZSIKKworIzogZ2l0azoxMTE2MAorbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTI0MworbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTw6lsZWN0ZXVyIGRlIHBvbGljZSBkZSBHaXRrIgorCisjOiBnaXRrOjExMjYwCittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMTI2MworbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTEzODEKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZCdhZmZpY2hhZ2UgZGUgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MTEzODQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlIChsaWduZXMpIgorCisjIEZJWE1FIDogVHJhZHVjdGlvbiBzdGFuZGFyZCBkZSAicGFuZSI/CisjOiBnaXRrOjExMzg4CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTGFyZ2V1ciBtYXhpbXVtIGR1IGdyYXBoZSAoJSBkdSBwYW5uZWF1KSIKKworIzogZ2l0azoxMTM5MQorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9udHJlciBsZXMgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIgorCisjOiBnaXRrOjExMzk0Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU8OpbGVjdGlvbiBhdXRvLiBkdSBTSEExIChsb25ndWV1cikiCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJDYWNoZXIgbGVzIHJlZnMgZGlzdGFudGVzIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZCdhZmZpY2hhZ2UgZGVzIGRpZmYiCisKKyM6IGdpdGs6MTE0MDQKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiVGFpbGxlIGRlcyB0YWJ1bGF0aW9ucyIKKworIzogZ2l0azoxMTQwNworbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIkFmZmljaGVyIGxlcyB0YWdzIGxlcyBwbHVzIHByb2NoZXMiCisKKyM6IGdpdGs6MTE0MTAKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICJOb21icmUgbWF4aW11bSBkJ8OpdGlxdWV0dGVzL2hlYWRzIMOgIGFmZmljaGVyIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJMaW1pdGVyIGxlcyBkaWZmw6lyZW5jZXMgYXV4IGNoZW1pbnMgbGlzdMOpcyIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJTdXBwb3J0IHBvdXIgdW4gZW5jb2RhZ2UgZGVzIGNhcmFjdMOocmVzIHBhciBmaWNoaWVyIgorCisjOiBnaXRrOjExNDIyIGdpdGs6MTE1NjkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIk91dGlsIGRpZmYgZXh0ZXJuZSIKKworIzogZ2l0azoxMTQyMworbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiQ2hvaXNpci4uLiIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBnw6luw6lyYWxlcyIKKworIzogZ2l0azoxMTQzMQorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiVXRpbGlzZXIgZGVzIHdpZGdldHMgZW4gdGjDqG1lIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKGxhIG1vZGlmaWNhdGlvbiBuw6ljZXNzaXRlIHVuIHJlZMOpbWFycmFnZSkiCisKKyM6IGdpdGs6MTE0MzUKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKG5vbiBkaXNwb25pYmxlIGFjdHVlbGxlbWVudCkiCisKKyM6IGdpdGs6MTE0NDYKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ291bGV1cnMgOiBjbGlxdWVyIHBvdXIgY2hvaXNpciIKKworIzogZ2l0azoxMTQ0OQorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiSW50ZXJmYWNlIgorCisjOiBnaXRrOjExNDUwCittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmZhY2UiCisKKyM6IGdpdGs6MTE0NTMKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJBcnJpw6hyZS1wbGFuIgorCisjOiBnaXRrOjExNDU0IGdpdGs6MTE0ODQKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJhcnJpw6hyZS1wbGFuIgorCisjOiBnaXRrOjExNDU3Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJlbWllciBwbGFuIgorCisjOiBnaXRrOjExNDU4Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAicHJlbWllciBwbGFuIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmIDogYW5jaWVubmVzIGxpZ25lcyIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIGFuY2llbm5lcyBsaWduZXMiCisKKyM6IGdpdGs6MTE0NjYKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmYgOiBub3V2ZWxsZXMgbGlnbmVzIgorCisjOiBnaXRrOjExNDY3Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgImRpZmYgbm91dmVsbGVzIGxpZ25lcyIKKworIzogZ2l0azoxMTQ3MQorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmIDogZW50w6p0ZSBkdSBodW5rIgorCisjOiBnaXRrOjExNDczCittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiZGlmZiA6IGVudMOqdGUgZHUgaHVuayIKKworIzogZ2l0azoxMTQ3NworbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJGb25kIGRlIGxhIGxpZ25lIG1hcnF1w6llIgorCisjOiBnaXRrOjExNDc5Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiRm9uZCBkZSBsYSBsaWduZSBtYXJxdcOpZSIKKworIzogZ2l0azoxMTQ4MworbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiU8OpbGVjdGlvbm5lciBsZSBmb25kIgorCisjOiBnaXRrOjExNDkyCittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiUG9saWNlcyA6IGNsaXF1ZXIgcG91ciBjaG9pc2lyIgorCisjOiBnaXRrOjExNDk0Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJQb2xpY2UgcHJpbmNpcGFsZSIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJQb2xpY2UgZCdhZmZpY2hhZ2UgZGVzIGRpZmYiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJQb2xpY2UgZGUgbCdpbnRlcmZhY2UgdXRpbGlzYXRldXIiCisKKyM6IGdpdGs6MTE1MTgKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcsOpZsOpcmVuY2VzIGRlIEdpdGsiCisKKyM6IGdpdGs6MTE1MjcKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJHw6luw6lyYWwiCisKKyM6IGdpdGs6MTE1MjgKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIkNvdWxldXJzIgorCisjOiBnaXRrOjExNTI5Cittc2dpZCAiRm9udHMiCittc2dzdHIgIlBvbGljZXMiCisKKyM6IGdpdGs6MTE1NzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrIDogY2hvaXNpciBsYSBjb3VsZXVyIGRlICVzIgorCisjOiBnaXRrOjEyMDkyCittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiRMOpc29sw6ksIGdpdGsgbmUgcGV1dCDDqnRyZSBleMOpY3V0w6kgYXZlYyBjZXR0ZSB2ZXJzaW9uIGRlIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aWVydCBUY2wvVGsgdmVyc2lvbiA4LjQgb3Ugc3Vww6lyaWV1ci4iCisKKyM6IGdpdGs6MTIzMDIKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgdW4gZMOpcMO0dCBnaXQgaWNpLiIKKworIzogZ2l0azoxMjM0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiQXJndW1lbnQgJyVzJyBhbWJpZ3UgOiDDoCBsYSBmb2lzIHVuZSByw6l2aXNpb24gZXQgdW4gbm9tIGRlIGZpY2hpZXIiCisKKyM6IGdpdGs6MTIzNjEKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJBcmd1bWVudHMgaW52YWxpZGVzIHBvdXIgZ2l0ayA6IgorCisjfiBtc2dpZCAiU0hBMSBJRDogIgorI34gbXNnc3RyICJJRCBTSEExIDoiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICJzdWl2YW50IgorCisjfiBtc2dpZCAicHJldiIKKyN+IG1zZ3N0ciAicHLDqWPDqWRlbnQiCisKKyN+IG1zZ2lkICJDRGF0ZSIKKyN+IG1zZ3N0ciAiQ0RhdGUiCisKKyN+IG1zZ2lkICItIHN0b3BwaW5nXG4iCisjfiBtc2dzdHIgIi0gYXJyw6p0IGVuIGNvdXJzXG4iCisKKyN+IG1zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorI34gbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgcsOpcGVydG9pcmUgZ2l0IFwiJXNcIi4iCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9odS5wbyBiL2dpdGstZ2l0L3BvL2h1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZWM1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9odS5wbwpAQCAtMCwwICsxLDE0MTkgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBIdW5nYXJpYW4uCisjIENvcHlyaWdodCAoQykgMjAwNyBQYXVsIE1hY2tlcnJhcy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMKKyMgTGFzemxvIFBhcHAgPGxhc3psby5wYXBwQGFyaHVuZ2FyeS5odT4sIDIwMDkuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTEyLTE0IDE0OjA0KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IExhc3psbyBQYXBwIDxkanN6YXBpQGFyY2hsaW51eC51cz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBIdW5nYXJpYW5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGxldMO2bHRlbmkgYXogdW5tZXJnZWQgZsOhamwgbGlzdMOhdDoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCDDqXJ0ZWxtZXrDqXMga8O2emJlbjoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSB2w6lncmVoYWp0w6Fza29yIC0tYXJnc2NtZCBwYXJhbmNzOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJOaW5jc2VuIGbDoWpsIGtpdsOhbGFzenR2YTogLS1tZXJnZSBtZWdhZHZlLCBkZSBlZ3lldGxlbiBmw6FqbCBzZW0gdW5tZXJnZWQuIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTmluY3NlbiBmw6FqbCBraXbDoWxhc3p0dmE6IC0tbWVyZ2UgbWVnYWR2YSwgZGUgbmluY3NlbmVrIHVubWVyZ2VkIGbDoWpsb2sgYSAiCisiZsOhamxvbiBiZWzDvGwgbGltaXQuIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBnaXQgbG9nIHbDqWdyZWhhanTDoXNhIGvDtnpiZW46IgorCisjOiBnaXRrOjQzNiBnaXRrOjU4MgorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIk9sdmFzw6FzIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkNvbW1pdG9rIG9sdmFzw6FzYSAuLi4iCisKKyM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjgKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJOaW5jc2VuIGNvbW1pdCBraXbDoWxhc3p0dmEiCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDUgZ2l0azoxMjQzMgorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiUGFyYW5jcyBzb3IiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiTmVtIGxlaGV0IMOpcnRlbG1lem5pIGEgZ2l0IGxvZyBraW1lbmV0w6l0OiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTmluY3NlbiBlbMOpcmhldMWRIGNvbW1pdCBpbmZvcm3DoWNpw7MiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGdpdGs6MTkzNCBnaXRrOjQzMTcgZ2l0azo5MTk2IGdpdGs6OTI3NSBnaXRrOjkzOTEgZ2l0azo5NDQwIGdpdGs6OTY3MQorIzogZ2l0azoxMTI0MiBnaXRrOjExNTIyCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJWaXNzemF2b27DoXMiCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIkZyaXNzaXTDqXMiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIsOaanJhdMO2bHTDqXMiCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiUmVmZXJlbmNpw6FrIMO6anJhb2x2YXPDoXNhIgorCisjOiBnaXRrOjIwNzIKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJSZWZlcmVuY2nDoWsgbGlzdMOhesOhc2EiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJHaXQgZ3VpIGluZMOtdMOhc2EiCisKKyM6IGdpdGs6MjA3NgorbXNnaWQgIiZRdWl0IgorbXNnc3RyICJLaWzDqXDDqXMiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICJGw6FqbCIKKworIzogZ2l0azoyMDgwCittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICJCZcOhbGzDrXTDoXNvayIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIlN6ZXJrZXN6dMOpcyIKKworIzogZ2l0azoyMDg0Cittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICLDmmogbsOpemV0IC4uLiIKKworIzogZ2l0azoyMDg1Cittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiTsOpemV0IHN6ZXJrZXN6dMOpc2UgLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIk7DqXpldCB0w7ZybMOpc2UiCisKKyM6IGdpdGs6MjA4OCBnaXRrOjQwNDMKK21zZ2lkICImQWxsIGZpbGVzIgorbXNnc3RyICJNaW5kZW4gZsOhamwiCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiTsOpemV0IgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICJHaXRrIG7DqXZqZWd5IgorCisjOiBnaXRrOjIwOTQgZ2l0azoyMTA4Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiQmlsbGVudHnFsWtvbWJpbsOhY2nDsyIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICJTZWfDrXRzw6lnIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIlNvciIKKworIzogZ2l0azoyMjY3Cittc2dpZCAiRmluZCIKK21zZ3N0ciAiS2VyZXPDqXMiCisKKyM6IGdpdGs6MjI5NQorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBnaXRrOjIyOTkgZ2l0azoyMzAxIGdpdGs6NDY4NyBnaXRrOjQ3MTAgZ2l0azo0NzM0IGdpdGs6Njc1NSBnaXRrOjY4MjcKKyM6IGdpdGs6NjkxMgorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJ0YXJ0YWxtYXrDoXM6IgorCisjOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgIsOpcmludGVuZMWRIMO6dHZvbmFsYWs6IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInN0cmluZyBob3p6w6FhZMOhc2EvdMO2cmzDqXNlOiIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc3OQorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJQb250b3MiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ4NTQgZ2l0azo2NzIzCittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiS2lzL25hZ3kgYmV0xbEgbmVtIHN6w6Ftw610IgorCisjOiBnaXRrOjIzMTUgZ2l0azo0NzM2IGdpdGs6NDg1MiBnaXRrOjY3MTkKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIlJlZ2V4cCIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiTWluZGVuIG1lesWRIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiRsWRY8OtbSIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJNZWdqZWd5esOpc2VrIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKKyM6IGdpdGs6ODg0NQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiU3plcnrFkSIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo3MzI2Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJDb21taXRvbMOzIgorCisjOiBnaXRrOjIzNTAKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIktlcmVzw6lzIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiUsOpZ2kgdmVyemnDsyIKKworIzogZ2l0azoyMzYyCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIsOaaiB2ZXJ6acOzIgorCisjOiBnaXRrOjIzNjQKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJUYXJ0YWxtaSBzb3JvayIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiU3BhY2UgdsOhbHTDoXMgbWVsbMWResOpc2UiCisKKyM6IGdpdGs6MjM3OCBnaXRrOjIzODAgZ2l0azo3OTU5IGdpdGs6ODIwNgorbXNnaWQgIkxpbmUgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI0NDUKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiUGF0Y2giCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIlRyZWUiCisKKyM6IGdpdGs6MjYxNyBnaXRrOjI2MzcKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIkRpZmYgZXpla2V0IC0+IGtpdsOhbGFzenRvdHQiCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmYga2l2w6FsYXN6dG90dGFrYXQgLT4gZXp0IgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiUGF0Y2gga8Opc3rDrXTDqXNlIgorCisjOiBnaXRrOjI2MjAgZ2l0azo5MjU0Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiVGFnIGvDqXN6w610w6lzZSIKKworIzogZ2l0azoyNjIxIGdpdGs6OTM3MQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJDb21taXQgZsOhbGpiYSDDrXLDoXNhIgorCisjOiBnaXRrOjI2MjIgZ2l0azo5NDI4Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIsOaaiBicmFuY2gga8Opc3rDrXTDqXNlIgorCisjOiBnaXRrOjI2MjMKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgZXJyZSBhIGNvbW1pdHJhIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJIRUFEIGJyYW5jaCDDumpyYWluZMOtdMOhc2EgaWRlIgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJFemVuIGNvbW1pdCBtZWdqZWzDtmzDqXNlIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVmlzc3phdMOpcsOpcyBhIG1lZ2plbMO2bMOpc2hleiIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIlRhbMOhbGQgbWVnIGV6ZW4gdXTDs2Rva2F0IMOpcyBqZWzDtmxkIG1lZyIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIsOWc3N6ZWhhc29ubMOtdMOhcyBhIG1lZ2plbMO2bHQgY29tbWl0LXRhbCIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorIywgZnV6enkKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiRGlmZiBlemVrZXQgLT4ga2l2w6FsYXN6dG90dCIKKworIzogZ2l0azoyNjMwIGdpdGs6MjY0MQorIywgZnV6enkKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBraXbDoWxhc3p0b3R0YWthdCAtPiBlenQiCisKKyM6IGdpdGs6MjYzMQorIywgZnV6enkKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgIkV6ZW4gY29tbWl0IG1lZ2plbMO2bMOpc2UiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiQ2hlY2sgb3V0IGV6dCBhIGJyYW5jaG90IgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlTDtnLDtmxkIGV6dCBhIGJyYW5jaC1vdCIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI2NTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIkVtZWxkIGtpIGV6dCBpcyIKKworIzogZ2l0azoyNjU3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiQ3NhayBlenQgZW1lbGQga2kiCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIkvDvGxzxZEgZGlmZiIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQmxhbWUgc3rDvGzFkSBrb21taXRyYSIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY2NworbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiTXV0YXNkIG1lZyBlbm5layBhIHNvcm5hayBheiBlcmVkZXTDqXQiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRnV0dGFzZCBhIGdpdCBndWkgYmxhbWUtdCBlemVuIGEgc29yb24iCisKKyM6IGdpdGs6MzAxNAorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gY29tbWl0IG7DqXplZ2V0xZEgYSBnaXRoZXpcbiIKKyJcbiIKKyJTemVyesWRaSBqb2cgXFx1MDBhOSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJIYXN6bsOhbGQgw6lzIHRlcmplc3pkIGEgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZmVsdMOpdGVsZWkgbWVsbGV0dCIKKworIzogZ2l0azozMDIyIGdpdGs6MzA4OSBnaXRrOjk4NTcKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiQmV6w6Fyw6FzIgorCisjOiBnaXRrOjMwNDMKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiR2l0ay1iaWxsZW50ecWxIGhvenrDoXJlbmRlbMOpcyIKKworIzogZ2l0azozMDQ2Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJHaXRrLWJpbGxlbnR5xbEgaG96emHDoXJlbmRlbMOpczoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0S2lsw6lww6lzIgorCisjOiBnaXRrOjMwNDkKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLUY+XHRcdEtlcmVzw6lzIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxQb3MxPlx0XHRFbHPFkSBjb21taXRob3oiCisKKyM6IGdpdGs6MzA1MQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmRlPlx0XHRVdG9sc8OzIGNvbW1pdGhveiIKKworIzogZ2l0azozMDUyCisjLCBmdXp6eQorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPEhvY2g+LCBwLCBpXHRFZ3kgY29tbWl0dGFsIGZlbGplYmIiCisKKyM6IGdpdGs6MzA1MworIywgZnV6enkKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8UnVudGVyPiwgbiwga1x0RWd5IGNvbW1pdHRhbCBsZWpqZWJiIgorCisjOiBnaXRrOjMwNTQKKyMsIGZ1enp5Cittc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExpbmtzPiwgeiwgalx0Vmlzc3phIGEgaGlzdG9yeSBsaXN0w6FiYSIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSZWNodHM+LCB4LCBsXHRFbMWRcmUgYSBoaXN0b3J5IGxpc3TDoWJhIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjMwNTcKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEJpbGRIb2NoPlx0RWd5IGxhcHBhbCBmZWxqZWJiIGEgY29tbWl0IGxpc3TDoWJhIgorCisjOiBnaXRrOjMwNTgKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxCaWxkUnVudGVyPlx0RWd5IGxhcHBhbCBsZWpqZWJiIGEgY29tbWl0IGxpc3TDoWJhIgorCisjOiBnaXRrOjMwNTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Qb3MxPlx0R8O2cmdldMOpcyBhIGNvbW1pdCBsaXN0YSB0ZXRlasOpaGV6IgorCisjOiBnaXRrOjMwNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZGU+XHRHw7ZyZ2V0w6lzIGEgY29tbWl0IGxpc3RhIGFsasOhaG96IgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1Ib2NoPlx0RWd5IHNvcnJhbCBmZWxqZWJiIGfDtnJnZXTDqXMgYSBjb21taXQgbGlzdMOhYmFuIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtUnVudGVyPlx0RWd5IHNvcnJhbCBsZWpqZWJiIGfDtnJnZXTDqXMgYSBjb21taXQgbGlzdMOhYmFuIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQmlsZEhvY2g+XHRFZ3kgbGFwcGFsIGZlbGplYmIgZ8O2cmdldMOpcyBhIGNvbW1pdCBsaXN0w6FiYW4iCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQmlsZFJ1bnRlcj5cdEVneSBzb3JyYWwgbGVqamViYiBnw7ZyZ2V0w6lzIGEgY29tbWl0IGxpc3TDoWJhbiIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8VW1zY2hhbHQtSG9jaD5cdEtlcmVzw6lzIHZpc3N6YWZlbGUgKGZlbGZlbGUsIHV0b2xzw7MgY29tbWl0b2spIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFVtc2NoYWx0LVJ1bnRlcj5cdEtlcmVzw6lzIGVsxZFyZSAobGVmZWzDqTsga29yw6FiYmkgY29tbWl0b2spIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEVudGY+LCBiXHRcdEVneSBsYXBwYWwgZmVsamViYiBnw7ZyZ2V0w6lzIGEgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MzA2OAorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8TMO2c2NodGFzdGU+XHRFZ3kgbGFwcGFsIGZlbGplYmIgZ8O2cmdldMOpcyBhIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPExlZXJ0YXN0ZT5cdEVneSBsYXBwYWwgbGVqamViYiBnw7ZyZ2V0w6lzIGEgZGlmZiBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHQxOCBzb3JyYWwgZmVsZmVsw6kgZ8O2cmdldMOpcyBkaWZmIG7DqXpldGJlbiIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0MTggc29ycmFsIGxlamplYmIgZ8O2cmdldMOpcyBhIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjMwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdEtlcmVzw6lzIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0S8O2dmV0a2V6xZEgdGFsw6FsYXRob3oiCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxFaW5nYWJldGFzdGU+XHRLw7Z2ZXRrZXrFkSB0YWzDoWxhdGhveiIKKworIzogZ2l0azozMDc1CisjLCBmdXp6eQorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICI8RW5kZT5cdFx0VXRvbHPDsyBjb21taXRob3oiCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0TMOpcGogYSBrZXJlc8Opc2kgbWV6xZFyZSIKKworIzogZ2l0azozMDc3Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdEVsxZF6xZEgdGFsw6FsYXRob3oiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0S8O2dmV0a2V6xZEgZsOhamxyYSBnw7ZyZ2V0w6lzIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRLw7Z2ZXRrZXrFkSB0YWzDoWxhdHJhIGtlcmVzw6lzIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0RWzFkXrFkSB0YWzDoWxhdHJhIGtlcmVzw6lzIGRpZmYgbsOpemV0YmVuIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtbWVyYmxvY2stUGx1cz5cdEJldMWxbcOpcmV0IG7DtnZlbMOpc2UiCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtUGx1cz5cdEJldMWxbcOpcmV0IG7DtnZlbMOpc2UiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW1tZXJuYmxvY2stTWludXM+IEJldMWxbcOpcmV0IGNzw7Zra2VudMOpc2UiCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU1pbnVzPlx0QmV0xbFtw6lyZXQgY3PDtmtrZW50w6lzZSIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0RnJpc3PDrXTDqXMiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYXogaWRlaWdsZW5lcyBrw7ZueXZ0w6FyIGzDqXRyZWhvesOhc2Ega8O2emJlbiAlczoiCisKKyM6IGdpdGs6MzU3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBcIiVzXCIgbGV0w7ZsdMOpc2Uga8O2emJlbiAlcy1yxZFsOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJwYXJhbmNzIGhpYmE6IgorCisjOiBnaXRrOjM3ODQKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiTmluY3MgaWx5ZW4gY29tbWl0IgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IHBhcmFuY3MgaGliYToiCisKKyM6IGdpdGs6MzgyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIk5lbSBzaWtlcsO8bHQgYSBNZXJnZSBoZWFkIG9sdmFzw6FzYTogJXMiCisKKyM6IGdpdGs6MzgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBheiBpbmRleCBvbHZhc8Ohc2Ega8O2emJlbjogJXMiCisKKyM6IGdpdGs6Mzg2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIk5lbSBzaWtlcsO8bHQgYSBnaXQgYmxhbWUgaW5kw610w6FzYTogJXMiCisKKyM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIktlcmVzw6lzIgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkhpYmEgdMO2cnTDqW50IGEgZ2l0IGJsYW1lIGZ1dHRhdMOhc2Ega8O2emJlbjogJXMiCisKKyM6IGdpdGs6MzkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIiIKKyJBICVzIGNvbW1pdGLDs2wgc3rDoXJtYXppayBheiBhIHNvciwgYW1lbHlpayBuZW0gdGFsw6FsaGF0w7MgZWJiZW4gYSBuw6l6ZXRiZW4iCisKKyM6IGdpdGs6MzkzOQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIkvDvGxzxZEgZGlmZiBuw6l6ZWdldMWRIGhpYmE6IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiR2l0ayBuw6l6ZXQgbWVnaGF0w6Fyb3rDoXNhIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIk1hcmFkaiBlbm7DqWwgYSBuw6l6ZXRuw6lsIgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSZWZlcmVuY2nDoWsgKHN6w7Nrw7Z6emVsIHRhZ29sdCBsaXN0YSIKKworIzogZ2l0azo0MDc2Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAiQnJhbmNoLWVrICYgdGFnZWs6IgorCisjOiBnaXRrOjQwNzcKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiTWluZGVuIHJlZiIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIk1pbmRlbiAoaGVseWkpIGJyYW5jaCIKKworIzogZ2l0azo0MDc5Cittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIk1pbmRlbiB0YWciCisKKyM6IGdpdGs6NDA4MAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIk1pbmRlbiB0w6F2b2xpIGvDtnZldMWRIGJyYW5jaCIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiQ29tbWl0IEluZsOzIChyZWd1bMOhcmlzIGtpZmVqZXrDqXMpOiIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiU3plcnrFkToiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkNvbW1pdG9sw7M6IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkNvbW1pdCDDvHplbmV0OiIKKworIzogZ2l0azo0MDg1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkVneWV6aWsgbWluZW4gQ29tbWl0IEluZsOzIGZlbHTDqXRlbGxlbCIKKworIzogZ2l0azo0MDg2CisjLCBmdXp6eQorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkVneWV6aWsgbWluZW4gQ29tbWl0IEluZsOzIGZlbHTDqXRlbGxlbCIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIkbDoWpsIHbDoWx0b3rDoXNvazoiCisKKyM6IGdpdGs6NDA4OAorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiRml4IFN0cmluZyIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJSZWd1bMOhcmlzIGtpZmVqZXrDqXMiCisKKyM6IGdpdGs6NDA5MAorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJLZXJlc8OpcyBzesO2dmVnOiIKKworIzogZ2l0azo0MDkxCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiQ29tbWl0IETDoXR1bW9rIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCisKKyM6IGdpdGs6NDA5MgorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiRXR0xZFsOiIKKworIzogZ2l0azo0MDkzCittc2dpZCAiVW50aWw6IgorbXNnc3RyICJFZGRpZzoiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdMOhbHZhIMOpcy92YWd5IGtpaGFneXZhIGVneSBhZG90dCBzesOhbcO6IHJldsOtemnDs3QgKHBveml0w612IGVnw6lzeik6IgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIk11dGF0YW5kw7Mgc3rDoW06IgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIktpaGFneWFuZMOzIHN6w6FtOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiS8O8bMO2bmbDqWxlIG9wY2nDs2s6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIlN6aWdvcsO6IHJlbmRlesOhcyBkw6F0dW0gYWxhcGrDoW4iCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJKZWzDtmxqZSBtZWcgYXogw6FnYWthdCIKKworIzogZ2l0azo0MTAwCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJLb3Jsw6F0b3rDoXMgYXogZWxzxZEgc3rDvGzFkXJlIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiRWd5c3plcsWxIGhpc3RvcnkiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJUb3bDoWJiaSBhcmd1bWVudG9rIGEgZ2l0IGxvZy1ob3o6IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiRsOhamxvayDDqXMga8O2bnl2dMOhcmFrIGJlamVneXrDqXNlIGFtaWtldCB0YXJ0YWxtYXosIHNvcm9ua8OpbnQ6IgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiUGFyYW5jcyB0w7ZiYiB0YXJ0YWxtYXrDsyBjb21taXQgZ2VuZXLDoWzDoXPDoXJhOiIKKworIzogZ2l0azo0MjI4Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiBzemVya2VzenTDqXMgbsOpemV0IgorCisjOiBnaXRrOjQyMzYKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiLS0ga3JpdMOpcml1bW9rIGEgcmV2w616acOzayBraXbDoWxhc3p0w6Fzw6Fob3oiCisKKyM6IGdpdGs6NDI0MQorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAiTsOpemV0IG5ldmUiCisKKyM6IGdpdGs6NDMxNgorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIkFsa2FsbWF6IChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBjb21taXQgYXJndW1lbnR1bW9rIGtpdsOhbGFzenTDoXNhIGvDtnpiZW46IgorCisjOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAorbXNnaWQgIk5vbmUiCittc2dzdHIgIktlaW5lIgorCisjOiBnaXRrOjUwMjEgZ2l0azo1MDI2Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiTGVzesOhcm1hem90dCIKKworIzogZ2l0azo1MDIyCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIk5lbSBsZXN6w6FybWF6b3R0IgorCisjOiBnaXRrOjUwMjkgZ2l0azo1MDM0Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIkVsxZFkIgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk5lbSBlbMWRZCIKKworIzogZ2l0azo1MzI0Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICIiCisiTG9rw6FsaXMgdsOhbHRvenRhdMOhc29rLCBtZWx5ZWsgYmUgdmFubmFrIHTDqXZlIGF6IGluZGV4YmUsIGRlIG3DqWcgbmluY3NlbmVrICIKKyJjb21taXRvbHZhIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTG9rw6FsaXMgbmVtIGNvbW1pdG9sdCB2w6FsdG96w6Fzb2ssIG5pbmNzZW5layBiZXTDqXZlIGF6IGluZGV4YmUiCisKKyM6IGdpdGs6NzEzNAorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgIiIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAic29rIgorCisjOiBnaXRrOjczMjgKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiVGFnZWs6IgorCisjOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiRWx0ZXJuIgorCisjOiBnaXRrOjczNTYKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiR3llcmVrIgorCisjOiBnaXRrOjczNjUKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIsOBZyIKKworIzogZ2l0azo3MzY4Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiS8O2dmV0a2V6xZFrIgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiTWVnZWzFkXrFkWsiCisKKyM6IGdpdGs6Nzk2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGRpZmYtZWsgbGV0w7ZsdMOpc2Uga8O2emJlbjogJXMiCisKKyM6IGdpdGs6ODY1MAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJNZW5qOiIKKworIzogZ2l0azo4NjcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIlLDtnZpZCBTSEExIGlkICVzIGbDqWxyZcOpcnRoZXTFkSIKKworIzogZ2l0azo4Njc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJBKHopICVzIHJldsOtemnDsyBuZW0gaXNtZXJ0IgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiU0hBMSBpZCAlcyBuZW0gaXNtZXJ0IgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiQSh6KSAlcyByZXbDrXppw7MgbmluY3MgYSBqZWxlbmxlZ2kgbsOpemV0YmVuIgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRMOhdHVtIgorCisjOiBnaXRrOjg4MzUKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiR3llcmVrZWsiCisKKyM6IGdpdGs6ODg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLDgWxsw610c2Qgdmlzc3phIGEgJXMgYnJhbmNoLW90IGlkZSIKKworIzogZ2l0azo4OTAwCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIkVsa8O8bMO2bsOtdGV0dCBoZWFkOiBuZW0gbGVoZXQgdmlzc3phw6FsbMOtdGFuaSIKKworIzogZ2l0azo5MDA1IGdpdGs6OTAxMQorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIk1lcmdlIGNvbW1pdCBraWhhZ3nDoXNhICIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBwYXRjaCBJRCBtZWdzemVyesOpc2Uga8O2emJlbiBhIGvDtnZldGtlesWRbsOpbCAiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBhYmJhaGFnecOhc1xuIgorCisjOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiQ29tbWl0ICIKKworIzogZ2l0azo5MDM1Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgVWd5YW5heiBhIHBhdGNoIG1pbnRcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIga8O8bMO2bmLDtnppayBpbm5lbnTFkWxcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDUKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiQSBjb21taXRvayBkaWZmamU6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiICVzIGd5ZXJla2UgdmFuLiBhYmJhaGFnecOhc1xuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBjb21taXQgZsOhamxiYSDDrXLDoXNhIGvDtnpiZW46ICVzIgorCisjOiBnaXRrOjkwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIGNvbW1pdG9rIGRpZmZlbMOpc2Uga8O2emJlbjogJXMiCisKKyM6IGdpdGs6OTEzNworbXNnaWQgIlRvcCIKK21zZ3N0ciAiVGV0ZWplIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJGcm9tIgorbXNnc3RyICJJbm5lbiIKKworIzogZ2l0azo5MTQzCittc2dpZCAiVG8iCittc2dzdHIgIklkZSIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIlBhdGNoIGdlbmVyw6Fsw6FzYSIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIklubmVuOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICJJZGU6IgorCisjOiBnaXRrOjkxODcKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJWaXNzemFmZWxlIgorCisjOiBnaXRrOjkxODkgZ2l0azo5Mzg1Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJLaW1lbmV0aSBmw6FqbDoiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHZW5lcsOhbMOhcyIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6l0IGEgcGF0Y2gga8Opc3rDrXTDqXNlIGvDtnpiZW46IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIlRhZyBuw6l2OiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIiIKKworIzogZ2l0azo5MjcwCisjLCBmdXp6eQorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiVGFnIG7DqXY6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJMw6l0cmVob3rDoXMiCisKKyM6IGdpdGs6OTI5MgorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiQSB0YWcgbmV2ZSBuaW5jc2VuIG1lZ2FkdmEiCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIFRhZyBtw6FyIGzDqXRlemlrIgorCisjOiBnaXRrOjkzMDYKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBhIHRhZyBsw6l0cmVob3rDoXNhIGvDtnpiZW46IgorCisjOiBnaXRrOjkzODIKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiUGFyYW5jczoiCisKKyM6IGdpdGs6OTM5MAorbXNnaWQgIldyaXRlIgorbXNnc3RyICLDjXLDoXMiCisKKyM6IGdpdGs6OTQwOAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAiSGliYSB0w7ZydMOpbnQgYSBjb21taXQgw61yw6FzYSBrw7Z6YmVuOiIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk7DqXY6IgorCisjOiBnaXRrOjk0NTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJLw6lyZW0gYWRqYSBtZWcgYSBuZXbDqXQgYXogw7pqIGJyYW5jaGhveiIKKworIzogZ2l0azo5NDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIiVzIGJyYW5jaCBtw6FyIGzDqXRlemlrLiBGZWzDvGzDrXJqYT8iCisKKyM6IGdpdGs6OTUzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisiJXMgY29tbWl0IG3DoXIgYmVubmUgdmFuIGEgJXMgYnJhbmNoYmFuIC0tIGJpenRvcyBob2d5IMO6anJhIGNzaW7DoWxqYSA/IgorImVpbnRyYWdlbj8iCisKKyM6IGdpdGs6OTUzNQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJDaGVycnktcGlja2luZyIKKworIzogZ2l0azo5NTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIGhpYmEgdMO2cnTDqW50IGxva8OhbGlzIHbDoWx0b3TDoXNvayBtaWF0dCBhICclcycgZsOhamxiYW4uXG4iCisiS8OpcmVtIGNvbW1pdG9samEsIGluZMOtdHNhIMO6anJhIHZhZ3kgcmVqdHNlIGVsIGEgdsOhbHRvenRhdMOhc2FpdCDDqXMgcHLDs2LDoWxqYSAiCisiw7pqcmEuIgorCisjOiBnaXRrOjk1NTAKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBoaWJhIHTDtnJ0w6ludCBtZXJnZSBrb25mbGlrdHVzIG1pYXR0LlxuIgorIkvDrXbDoW5qYSBmdXR0YXRuaSBhIGdpdCBjaXRvb2wtdCBhIHByb2Jsw6ltYSBtZWdvbGTDoXPDoWhvej8iCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiTmluY3NlbiB2w6FsdG96w6FzIGNvbW1pdG9sdmEiCisKKyM6IGdpdGs6OTU5MworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiIgorIiVzIGNvbW1pdCBtw6FyIGJlbm5lIHZhbiBhICVzIGJyYW5jaGJhbiAtLSBiaXp0b3MgaG9neSDDumpyYSBjc2luw6FsamEgPyIKKyJlaW50cmFnZW4/IgorCisjOiBnaXRrOjk1OTgKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICLDmmpyYWluZMOtdMOhcyIKKworIzogZ2l0azo5NjA2CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgaGliYSB0w7ZydMOpbnQgbG9rw6FsaXMgdsOhbHRvdMOhc29rIG1pYXR0IGEgJyVzJyBmw6FqbGJhbi5cbiIKKyJLw6lyZW0gY29tbWl0b2xqYSwgaW5kw610c2Egw7pqcmEgdmFneSByZWp0c2UgZWwgYSB2w6FsdG96dGF0w6FzYWl0IMOpcyBwcsOzYsOhbGphICIKKyLDumpyYS4iCisKKyM6IGdpdGs6OTYxMAorIywgZnV6enkKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIGhpYmEgdMO2cnTDqW50IG1lcmdlIGtvbmZsaWt0dXMgbWlhdHQuXG4iCisiS8OtdsOhbmphIGZ1dHRhdG5pIGEgZ2l0IGNpdG9vbC10IGEgcHJvYmzDqW1hIG1lZ29sZMOhc8OhaG96PyIKKworIzogZ2l0azo5NjUzCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiw5pqcmFpbmTDrXTDoXMgbWVnZXLFkXPDrXTDqXNlIgorCisjOiBnaXRrOjk2NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICLDmmpyYWluZMOtdGphIGEgJXMgYnJhbmNob3QgJXMtaWc/IgorCisjOiBnaXRrOjk2NTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiw5pqcmFpbmTDrXTDoXMgdMOtcHVzYToiCisKKyM6IGdpdGs6OTY2MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJTb2Z0OiBIYWd5ZCBhIHdvcmtpbmcgdHJlZS10IMOpcyBheiBpbmRleGV0IMOpcmludGV0bGVuw7xsIgorCisjOiBnaXRrOjk2NjMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIktldmVydDogSGFneWQgYSB3b3JraW5nIHRyZWUtdCDDqXJpbnRldGxlbsO8bCwgdMO2csO2bGQgYXogaW5kZXhldCIKKworIzogZ2l0azo5NjY2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIYXJkOiBJbmTDrXRzZCDDumpyYSBhIHdvcmtpbmcgdHJlZS10IMOpcyBheiBpbmRleGV0XG4iCisiKE1JTkRFTiBsb2vDoWxpcyB2w6FsdG96w6FzIGVsZG9iw6FzYSkiCisKKyM6IGdpdGs6OTY4MworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiw5pqcmFpbmTDrXTDoXMiCisKKyM6IGdpdGs6OTc0MworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAiS2l2ZXN6IgorCisjOiBnaXRrOjk3OTYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICJOZW0gbGVoZXQgYSBqZWxlbmxlZyBraXZldHQgYnJhbmNoLW90IHTDtnLDtmxuaSIKKworIzogZ2l0azo5ODAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJBICVzIGJyYW5jaG9uIHRhbMOhbGhhdMOzIGNvbW1pdCBuZW0gdGFsw6FsaGF0w7MgbWVnIHNlbWVseWlrIG3DoXNpayBicmFuY2hvbi5cbiIKKyJUw6lueWxlZyB0w7ZybGkgYSAlcyBicmFuY2hvdD8iCisKKyM6IGdpdGs6OTgzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiVGFnZWsgw6lzIGhlYWRlazogJXMiCisKKyM6IGdpdGs6OTg1MAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiU3rFsXLFkSIKKworIzogZ2l0azoxMDE0NgorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkhpYmEgdMO2cnTDqW50IGEgY29tbWl0IHRvcG9sw7NnaWFpIGluZm9ybcOhY2nDsyBvbHZhc8Ohc2Ega8O2emJlbjsgYnJhbmNoIMOpc2EgIgorIm1lZ2VsxZF6xZEva8O2dmV0a2V6xZEgaW5mb3Jtw6FjacOzIG5lbSBsZXN6IHRlbGplcy4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZyIKKworIzogZ2l0azoxMTEyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTIxMAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJHaXRrLWJldMWxIGtpdsOhbGFzenTDsyIKKworIzogZ2l0azoxMTIyNworbXNnaWQgIkIiCittc2dzdHIgIkYiCisKKyM6IGdpdGs6MTEyMzAKK21zZ2lkICJJIgorbXNnc3RyICJLIgorCisjOiBnaXRrOjExMzQ4Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJDb21taXQgbGlzdGEga2lqZWx6w6lzaSBvcGNpw7NrIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJNYXhpbcOhbGlzIGdyYWZpa29uIHN6w6lsZXNzw6lnIChzb3JvaykiCisKKyM6IGdpdGs6MTEzNTUKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJNYXhpbcOhbGlzIGdyYWZpa29uIHN6w6lsZXNzw6lnICh0w6FibGUgJS1qZSkiCisKKyM6IGdpdGs6MTEzNTgKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIk11dGFzZCBhIGxva8OhbGlzIHbDoWx0b3p0YXTDoXNva2F0IgorCisjOiBnaXRrOjExMzYxCisjLCBmdXp6eQorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgIlNIQTEgQXV0b21hdGlrdXMga2l2w6FsYXN6dMOhc2EiCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJBIHTDoXZvbGkgcmVmZWsgZWxyZWp0w6lzZSIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJEaWZmIGtpamVsesWRIG9wY2nDs2siCisKKyM6IGdpdGs6MTEzNzEKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiVGFiIHNvcmvDtnoiCisKKyM6IGdpdGs6MTEzNzQKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiU3pvbXN6w6lkb3MgdGFnZWsga2lqZWx6w6lzZSIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIiIKKworIzogZ2l0azoxMTM4MAorbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiS29ybMOhdG96b3R0IGRpZmZlayBhIGtpbGlzdMOhem90dCDDunR2b25hbGFraG96IgorCisjOiBnaXRrOjExMzgzCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIkbDoWpsb25rw6ludGkga8OzZG9sw6FzIHTDoW1nYXTDoXNhIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIkvDvGxzxZEgZGlmZiBhbGthbG1hesOhcyIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiVsOhbGFzemQgLi4uIgorCisjOiBnaXRrOjExMzk1Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICLDgWx0YWzDoW5vcyBvcGNpw7NrIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICJUw6ltw6F6b3R0IHZlesOpcmzFkWsgaGFzem7DoWxhdGEiCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoYSB2w6FsdG96w6FzIMO6anJhaW5kw610w6FzdCBpZ8OpbnllbCkiCisKKyM6IGdpdGs6MTE0MDIKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKGplbGVubGVnIG5lbSBlbMOpcmhldMWRKSIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJTesOtbmVrOiBueW9tamEgbWVnIGEga2l2w6FsYXN6dMOhc2hveiIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiSW50ZXJmw6lzeiIKKworIzogZ2l0azoxMTQxNworbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiaW50ZXJmw6lzeiIKKworIzogZ2l0azoxMTQyMAorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkjDoXR0w6lyIgorCisjOiBnaXRrOjExNDIxIGdpdGs6MTE0NTEKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJow6F0dMOpciIKKworIzogZ2l0azoxMTQyNAorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIkVsxZF0w6lyIgorCisjOiBnaXRrOjExNDI1Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAiZWzFkXTDqXIiCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IHLDqWdpIHNvcm9rIgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmYgcsOpZ2kgc29yb2siCisKKyM6IGdpdGs6MTE0MzMKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IMO6aiBzb3JvayIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJkaWZmIC0gw7pqIHNvcm9rIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IG5hZ3kgaGVhZGVyw7ZrIgorCisjOiBnaXRrOjExNDQwCittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiZGlmZiAtIG5hZ3kgaGVhZGVyw7ZrIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIk1lZ2plbMO2bHQgc29yIGjDoXR0w6lyIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAibWVnamVsw7ZsdCBzb3IgaMOhdHTDqXIiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIlbDoWxhc3N6b24gaMOhdHRlcmV0IgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQmV0xbE6IG55b21qYSBtZWcgYSBraXbDoWxhc3p0w6FzaG96IgorCisjOiBnaXRrOjExNDYxCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJGxZEgYmV0xbEiCisKKyM6IGdpdGs6MTE0NjIKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiRGlmZiBraWplbHrFkSBiZXTFsSIKKworIzogZ2l0azoxMTQ2MworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIkZlbGhhc3puw6Fsw7NpIGludGVyZsOpc3ogYmV0xbEiCisKKyM6IGdpdGs6MTE0ODUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJHaXRrIGJlw6FsbMOtdMOhc29rIgorCisjOiBnaXRrOjExNDk0CisjLCBmdXp6eQorbXNnaWQgIkdlbmVyYWwiCittc2dzdHIgIkdlbmVyw6Fsw6FzIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiQ29sb3JzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNTQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogdsOhbGFzc3pvbiBzesOtbnQgYSAlcy1yYSIKKworIzogZ2l0azoxMjA1OQorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAiIgorIlNham7DoWxqdWssIGRlIGEgZ2l0ayBuZW0gZnV0dGF0aGF0w7MgZXp6ZWwgYSBUY2wvVGsgdmVyemnDs3ZhbC5cbiIKKyJHaXRrIGZ1dHRhdMOhc8OhaG96IGxlZ2Fsw6FiYiBUY2wvVGsgOC40IHN6w7xrc8OpZ2VzLiIKKworIzogZ2l0azoxMjI2OQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIk5lbSB0YWzDoWxoYXTDvCBnaXQgcmVwb3NpdG9yeSBpdHQuIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJGw6lscmXDqXJ0aGV0xZEgYXJndW1lbnR1bSAnJXMnOiByZXbDrXppw7Mgw6lzIGbDoWpsbsOpdiBpcyIKKworIzogZ2l0azoxMjMyOAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIlJvc3N6IGdpdGsgYXJndW1lbnR1bW9rOiIKKworI34gbXNnaWQgIm1jIgorI34gbXNnc3RyICJtYyIKKworI34gbXNnaWQgIlNIQTEgSUQ6ICIKKyN+IG1zZ3N0ciAiU0hBMSBJRDogIgorCisjfiBtc2dpZCAibmV4dCIKKyN+IG1zZ3N0ciAia8O2dmV0a2V6xZEiCisKKyN+IG1zZ2lkICJwcmV2IgorI34gbXNnc3RyICJlbMWResWRIgorCisjfiBtc2dpZCAiQ0RhdGUiCisjfiBtc2dzdHIgIkTDoXR1bSIKKworI34gbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCisjfiBtc2dzdHIgIk5lbSB0YWzDoWxoYXTDsyBhIFwiJXNcIiBrw7ZueXZ0w6FyLiIKKworI34gbXNnaWQgIlVzZSBhbGwgcmVmcyIKKyN+IG1zZ3N0ciAiSGFzem7DoWxkIGF6IMO2c3N6ZXMgcmVmZXJlbmNpw6F0IgorCisjfiBtc2dpZCAiTWF4IGNvdW50OiIKKyN+IG1zZ3N0ciAiTWF4LiBzesOhbToiCisKKyN+IG1zZ2lkICJTa2lwOiIKKyN+IG1zZ3N0ciAiS2loYWd5OiIKKworI34gbXNnaWQgIk5hbWUiCisjfiBtc2dzdHIgIk7DqXYiCisKKyN+IG1zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCisjfiBtc2dzdHIgIlRhZy9IZWFkICVzIG5lbSBpc21lcnQiCisKKyN+IG1zZ2lkICItIHN0b3BwaW5nXG4iCisjfiBtc2dzdHIgIi0gYWJiYWhhZ3nDoXMuXG4iCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9pdC5wbyBiL2dpdGstZ2l0L3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OGQyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9pdC5wbwpAQCAtMCwwICsxLDEzODcgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0aworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT4sIDIwMDguCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTI4IDE4OjQxKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEl0YWxpYW5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBvdHRlbmVyZSBsJ2VsZW5jbyBkZWkgZmlsZSBpbiBhdHRlc2EgZGkgZnVzaW9uZToiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgbGV0dHVyYSBkZWxsZSByZXZpc2lvbmk6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGVsIGNvbWFuZG8gc3BlY2lmaWNhdG8gY29uIC0tYXJnc2NtZDoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiTmVzc3VuIGZpbGUgc2VsZXppb25hdG86IMOoIHN0YXRhIHNwZWNpZmljYXRhIGwnb3B6aW9uZSAtLW1lcmdlIG1hIG5vbiBjaSAiCisic29ubyBmaWxlIGluIGF0dGVzYSBkaSBmdXNpb25lLiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIk5lc3N1biBmaWxlIHNlbGV6aW9uYXRvOiDDqCBzdGF0YSBzcGVjaWZpY2F0YSBsJ29wemlvbmUgLS1tZXJnZSBtYSBpIGZpbGUgIgorInNwZWNpZmljYXRpIG5vbiBzb25vIGluIGF0dGVzYSBkaSBmdXNpb25lLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGkgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGV0dHVyYSBpbiBjb3JzbyIKKworIzogZ2l0azo0OTYgZ2l0azo0NTI1Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMZXR0dXJhIGRlbGxlIHJldmlzaW9uaSBpbiBjb3Jzby4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIk5lc3N1bmEgcmV2aXNpb25lIHNlbGV6aW9uYXRhIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkxpbmVhIGRpIGNvbWFuZG8iCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZWxhYm9yYXJlIGkgZGF0aSBkaSBnaXQgbG9nOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTmVzc3VuYSBpbmZvcm1hemlvbmUgZGlzcG9uaWJpbGUgc3VsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMxNSBnaXRrOjk2NjkgZ2l0azoxMTI0MSBnaXRrOjExNTIxCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKKyM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQW5udWxsYSIKKworIzogZ2l0azoyMDY5Cittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAiQWdnaW9ybmEiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIlJpY2FyaWNhIgorCisjOiBnaXRrOjIwNzEKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIlJpbGVnZ2kgcmlmZXJpbWVudGkiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkVsZW5jYSByaWZlcmltZW50aSIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIkF2dmlhIGdpdCBndWkiCisKKyM6IGdpdGs6MjA3NgorbXNnaWQgIiZRdWl0IgorbXNnc3RyICJFc2NpIgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiJkZpbGUiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyZW56ZSIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIk1vZGlmaWNhIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIk51b3ZhIHZpc3RhLi4uIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICJNb2RpZmljYSB2aXN0YS4uLiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJFbGltaW5hIHZpc3RhIgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiVHV0dGkgaSBmaWxlIgorCisjOiBnaXRrOjIwODMgZ2l0azo0MDY3Cittc2dpZCAiJlZpZXciCittc2dzdHIgIlZpc3RhIgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICJJbmZvcm1hemlvbmkgc3UgZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIkFpdXRvIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIlJpZ2EiCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgIlRyb3ZhIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgInJldmlzaW9uZSIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAiY29udGVuZW50ZToiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiY2hlIHJpZ3VhcmRhIGkgcGVyY29yc2k6IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgImNoZSBhZ2dpdW5nZS9yaW11b3ZlIGxhIHN0cmluZ2E6IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkVzYXR0byIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUdXR0aSBpIGNhbXBpIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiVGl0b2xvIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIkNvbW1lbnRpIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKKyM6IGdpdGs6ODg0NQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0b3JlIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIlJldmlzaW9uZSBjcmVhdGEgZGEiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiQ2VyY2EiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIiIKKworIzogZ2l0azoyMzYwCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIlZlY2NoaWEgdmVyc2lvbmUiCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOdW92YSB2ZXJzaW9uZSIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiTGluZWUgZGkgY29udGVzdG8iCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yYSBtb2RpZmljaGUgYWdsaSBzcGF6aSIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJNb2RpZmljaGUiCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIkRpcmVjdG9yeSIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBxdWVzdG8gLT4gc2VsZXppb25hdG8iCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmYgc2VsZXppb25hdG8gLT4gcXVlc3RvIgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiQ3JlYSBwYXRjaCIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NAorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyZWEgZXRpY2hldHRhIgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIlNjcml2aSByZXZpc2lvbmUgaW4gdW4gZmlsZSIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcmVhIHVuIG51b3ZvIHJhbW8iCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJQb3J0YSBxdWVzdGEgcmV2aXNpb25lIGluIGNpbWEgYWwgcmFtbyBhdHR1YWxlIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJBZ2dpb3JuYSBpbCByYW1vIEhFQUQgYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJTZWduYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVG9ybmEgYWxsYSByZXZpc2lvbmUgc2VnbmF0YSIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIlRyb3ZhIGlsIGRpc2NlbmRlbnRlIGRpIHF1ZXN0YSByZXZpc2lvbmUgZSBkaSBxdWVsbGEgc2VnbmF0YSIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIkNvbmZyb250YSBjb24gbGEgcmV2aXNpb25lIHNlZ25hdGEiCisKKyM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKKyMsIGZ1enp5Cittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIkRpZmYgcXVlc3RvIC0+IHNlbGV6aW9uYXRvIgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCisjLCBmdXp6eQorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIHNlbGV6aW9uYXRvIC0+IHF1ZXN0byIKKworIzogZ2l0azoyNjMxCisjLCBmdXp6eQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiU2VnbmEgcXVlc3RhIHJldmlzaW9uZSIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJBdHRpdmEgcXVlc3RvIHJhbW8iCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiRWxpbWluYSBxdWVzdG8gcmFtbyIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI2NTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIkV2aWRlbnppYSBhbmNoZSBxdWVzdG8iCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIkV2aWRlbnppYSBzb2xvIHF1ZXN0byIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiVmlzdWFsaXp6YSBkaWZmZXJlbnplIGluIHVuIGFsdHJvIHByb2dyYW1tYSIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQW5ub3RhIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJNb3N0cmEgbGEgcHJvdmVuaWVuemEgZGkgcXVlc3RhIHJpZ2EiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRXNlZ3VpIGdpdCBndWkgYmxhbWUgc3UgcXVlc3RhIHJpZ2EiCisKKyM6IGdpdGs6MzAxNAorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gdW4gdmlzdWFsaXp6YXRvcmUgZGkgcmV2aXNpb25pIHBlciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgXFx1MDBhOSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVdGlsaXp6byBlIHJlZGlzdHJpYnV6aW9uZSBwZXJtZXNzaSBzb3R0byBpIHRlcm1pbmkgZGVsbGEgR05VIEdlbmVyYWwgUHVibGljICIKKyJMaWNlbnNlIgorCisjOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJDaGl1ZGkiCisKKyM6IGdpdGs6MzA0MworbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJTY29yY2lhdG9pZSBkYSB0YXN0aWVyYSBkaSBHaXRrIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIGRpIEdpdGs6IgorCisjOiBnaXRrOjMwNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdEVzY2kiCisKKyM6IGdpdGs6MzA0OQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtRj5cdFx0VHJvdmEiCisKKyM6IGdpdGs6MzA1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdFZhaSBhbGxhIHByaW1hIHJldmlzaW9uZSIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0VmFpIGFsbCd1bHRpbWEgcmV2aXNpb25lIgorCisjOiBnaXRrOjMwNTIKKyMsIGZ1enp5Cittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8U3U+LCBwLCBpXHRWYWkgcGnDuSBpbiBhbHRvIGRpIHVuYSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MzA1MworIywgZnV6enkKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8R2nDuT4sIG4sIGtcdFZhaSBwacO5IGluIGJhc3NvIGRpIHVuYSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MzA1NAorIywgZnV6enkKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8U2luaXN0cmE+LCB6LCBqXHRUb3JuYSBpbmRpZXRybyBuZWxsYSBjcm9ub2xvZ2lhIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPERlc3RyYT4sIHgsIGxcdFZhaSBhdmFudGkgbmVsbGEgY3Jvbm9sb2dpYSIKKworIzogZ2l0azozMDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIiIKKworIzogZ2l0azozMDU3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdpbmFTdT5cdFZhaSBwacO5IGluIGFsdG8gZGkgdW5hIHBhZ2luYSBuZWxsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiIgorIjxQYWdpbmFHacO5Plx0VmFpIHBpw7kgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSBuZWxsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHRTY29ycmkgYWxsYSBjaW1hIGRlbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHRTY29ycmkgYWxsYSBmaW5lIGRlbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtU3U+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGFsdG8gZGkgdW5hIHJpZ2EiCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1HacO5Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBiYXNzbyBkaSB1bmEgcmlnYSIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2luYVN1Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEiCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnaW5hR2nDuT5cdFNjb3JyaSBsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtU3U+XHRUcm92YSBhbGwnaW5kaWV0cm8gKHZlcnNvIGwnYWx0bywgcmV2aXNpb25pIHN1Y2Nlc3NpdmUpIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LUdpw7k+XHRUcm92YSBpbiBhdmFudGkgKHZlcnNvIGlsIGJhc3NvLCByZXZpc2lvbmkgcHJlY2VkZW50aSkiCisKKyM6IGdpdGs6MzA2NworbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYWx0byBkaSB1bmEgcGFnaW5hIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGFsdG8gZGkgdW5hIHBhZ2luYSIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGF6aW8+XHRcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGJhc3NvIGRpIHVuYSBwYWdpbmEiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBhbHRvIGRpIDE4IGxpbmVlIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBiYXNzbyBkaSAxOCBsaW5lZSIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRUcm92YSIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdFRyb3ZhIGluIGF2YW50aSIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPEludmlvPlx0VHJvdmEgaW4gYXZhbnRpIgorCisjOiBnaXRrOjMwNzUKKyMsIGZ1enp5Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdFZhaSBhbGwndWx0aW1hIHJldmlzaW9uZSIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRDdXJzb3JlIG5lbCBib3ggZGkgcmljZXJjYSIKKworIzogZ2l0azozMDc3Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdFRyb3ZhIGFsbCdpbmRpZXRybyIKKworIzogZ2l0azozMDc4Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBhbCBmaWxlIHN1Y2Nlc3Npdm8iCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdENlcmNhIGluIGF2YW50aSBuZWxsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0Q2VyY2EgYWxsJ2luZGlldHJvIG5lbGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MzA4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHRBdW1lbnRhIGRpbWVuc2lvbmUgY2FyYXR0ZXJlIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBpw7k+XHRBdW1lbnRhIGRpbWVuc2lvbmUgY2FyYXR0ZXJlIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1AtPlx0RGltaW51aXNjaSBkaW1lbnNpb25lIGNhcmF0dGVyZSIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWVubz5cdERpbWludWlzY2kgZGltZW5zaW9uZSBjYXJhdHRlcmUiCisKKyM6IGdpdGs6MzA4NQorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEFnZ2lvcm5hIgorCisjOiBnaXRrOjM1NTAgZ2l0azozNTU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIGNyZWF6aW9uZSBkZWxsYSBkaXJlY3RvcnkgdGVtcG9yYW5lYSAlczoiCisKKyM6IGdpdGs6MzU3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgbGV0dHVyYSBkaSBcIiVzXCIgZGEgJXM6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNvbWFuZG86IgorCisjOiBnaXRrOjM3ODQKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiUmV2aXNpb25lIGluZXNpc3RlbnRlIgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IGltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNvbWFuZG86IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIG1lcmdlIGhlYWQ6ICVzIgorCisjOiBnaXRrOjM4MzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGxldHR1cmEgZGVsbCdpbmRpY2U6ICVzIgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJSaWNlcmNhIGluIGNvcnNvIgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGkgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozOTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiUXVlbGxhIHJpZ2EgcHJvdmllbmUgZGFsbGEgcmV2aXNpb25lICVzLCBub24gcHJlc2VudGUgaW4gcXVlc3RhIHZpc3RhIgorCisjOiBnaXRrOjM5MzkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCB2aXN1YWxpenphdG9yZSBkaSBkaWZmZXJlbnplOiIKKworIzogZ2l0azo0MDcwCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIlNjZWx0YSB2aXN0YSBHaXRrIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlJpY29yZGEgcXVlc3RhIHZpc3RhIgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSaWZlcmltZW50aSAobGlzdGEgZGkgZWxlbWVudGkgc2VwYXJhdGkgZGEgc3BhemkpIgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJSYW1pIGVkIGV0aWNoZXR0ZSIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlR1dHRpIGkgcmlmZXJpbWVudGkiCisKKyM6IGdpdGs6NDA3OAorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUdXR0aSBpIHJhbWkgKGxvY2FsaSkiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJUdXR0ZSBsZSBldGljaGV0dGUiCisKKyM6IGdpdGs6NDA4MAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlR1dHRpIGkgcmFtaSByZW1vdGkiCisKKyM6IGdpdGs6NDA4MQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkluZm9ybWF6aW9uaSBzdWxsYSByZXZpc2lvbmUgKGVzcHJlc3Npb25pIHJlZ29sYXJpKToiCisKKyM6IGdpdGs6NDA4MgorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkF1dG9yZToiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIlJldmlzaW9uZSBjcmVhdGEgZGE6IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmU6IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiUmlzcG9uZGUgYSB0dXR0aSBpIGNyaXRlcmkgZGkgcmljZXJjYSBzdWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6NDA4NgorIywgZnV6enkKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJSaXNwb25kZSBhIHR1dHRpIGkgY3JpdGVyaSBkaSByaWNlcmNhIHN1bGxlIHJldmlzaW9uaSIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIk1vZGlmaWNoZSBhaSBmaWxlOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJTdHJpbmdhIGZpc3NhIgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIkVzcHJlc3Npb25lIHJlZ29sYXJlIgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiQ2VyY2Egc3RyaW5nYToiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIkRhdGUgZGkgcmV2aXNpb25lIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAiCisiMjAwOSAxNToyNzozOFwiKToiCisKKyM6IGdpdGs6NDA5MgorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiRGE6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkE6IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiTGltaXRhIGUvbyBzYWx0YSBOIHJldmlzaW9uaSAoaW50ZXJvIHBvc2l0aXZvKToiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTnVtZXJvIGRpIHJldmlzaW9uaSBkYSBtb3N0cmFyZToiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiTnVtZXJvIGRpIHJldmlzaW9uaSBkYSBzYWx0YXJlOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiQWx0cmUgb3B6aW9uaToiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiT3JkaW5hIHNvbG8gcGVyIGRhdGEiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJTZWduYSBpIGxhdGkgZGVsIHJhbW8iCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiTGltaXRhIGFsIHByaW1vIGdlbml0b3JlIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiQ3Jvbm9sb2dpYSBzZW1wbGlmaWNhdGEiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJVbHRlcmlvcmkgYXJnb21lbnRpIGRhIHBhc3NhcmUgYSBnaXQgbG9nOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkluc2VyaXJlIGZpbGUgZSBkaXJlY3RvcnkgZGEgaW5jbHVkZXJlLCB1bm8gcGVyIHJpZ2E6IgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tYW5kbyBjaGUgZ2VuZXJhIGFsdHJlIHJldmlzaW9uaSBkYSB2aXN1YWxpenphcmU6IgorCisjOiBnaXRrOjQyMjgKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IG1vZGlmaWNhIHZpc3RhIgorCisjOiBnaXRrOjQyMzYKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiLS0gY3JpdGVyaSBwZXIgbGEgc2NlbHRhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azo0MjQxCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJOb21lIHZpc3RhIgorCisjOiBnaXRrOjQzMTYKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBcHBsaWNhIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJyb3JlIG5lZ2xpIGFyZ29tZW50aSBkaSBzZWxlemlvbmUgZGVsbGUgcmV2aXNpb25pOiIKKworIzogZ2l0azo0NDA5IGdpdGs6NDQ2MiBnaXRrOjQ5MjQgZ2l0azo0OTM4IGdpdGs6NjIwOCBnaXRrOjEyMzczIGdpdGs6MTIzNzQKK21zZ2lkICJOb25lIgorbXNnc3RyICJOZXNzdW5vIgorCisjOiBnaXRrOjUwMjEgZ2l0azo1MDI2Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiRGlzY2VuZGVudGUiCisKKyM6IGdpdGs6NTAyMgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJOb24gZGlzY2VuZGVudGUiCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQXNjZW5kZW50ZSIKKworIzogZ2l0azo1MDMwCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJOb24gYXNjZW5kZW50ZSIKKworIzogZ2l0azo1MzI0Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJNb2RpZmljaGUgbG9jYWxpIHByZXNlbnRpIG5lbGwnaW5kaWNlIG1hIG5vbiBuZWxsJ2FyY2hpdmlvIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTW9kaWZpY2hlIGxvY2FsaSBub24gcHJlc2VudGkgbsOpIG5lbGwnYXJjaGl2aW8gbsOpIG5lbGwnaW5kaWNlIgorCisjOiBnaXRrOjcxMzQKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NzEzNworbXNnaWQgIm1hbnkiCittc2dzdHIgIm1vbHRpIgorCisjOiBnaXRrOjczMjgKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiRXRpY2hldHRlOiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIkdlbml0b3JlIgorCisjOiBnaXRrOjczNTYKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiRmlnbGlvIgorCisjOiBnaXRrOjczNjUKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbW8iCisKKyM6IGdpdGs6NzM2OAorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlNlZ3VlIgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiUHJlY2VkZSIKKworIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxlIGRpZmZlcmVuemU6IgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiVmFpIGE6IgorCisjOiBnaXRrOjg2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiTGEgU0hBMSBpZCBhYmJyZXZpYXRhICVzIMOoIGFtYmlndWEiCisKKyM6IGdpdGs6ODY3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTGEgcmV2aXNpb25lICVzIMOoIHNjb25vc2NpdXRhIgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTGEgU0hBMSBpZCAlcyDDqCBzY29ub3NjaXV0YSIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIkxhIHJldmlzaW9uZSAlcyBub24gw6ggcHJlc2VudGUgbmVsbGEgdmlzdGEgYXR0dWFsZSIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGEiCisKKyM6IGdpdGs6ODgzNQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJGaWdsaSIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIkFnZ2lvcm5hIGlsIHJhbW8gJXMgYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiTmVzc3VuIHJhbW8gYXR0aXZvOiByZXNldCBpbXBvc3NpYmlsZSIKKworIzogZ2l0azo5MDA1IGdpdGs6OTAxMQorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIlNhbHRvIGxhIHJldmlzaW9uZSBkaSBmdXNpb25lICIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGlkZW50aWZpY2F6aW9uZSBkZWxsYSBwYXRjaCBwZXIgIgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gZmluZVxuIgorCisjOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiTGEgcmV2aXNpb25lICIKKworIzogZ2l0azo5MDM1Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaGEgbGUgc3Rlc3NlIGRpZmZlcmVuemUgZGlcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgw6ggZGl2ZXJzYSBkYVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWZmZXJlbnplIHRyYSBsZSByZXZpc2lvbmk6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGhhICVzIGZpZ2xpIC0gZmluZVxuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIHNjcml0dHVyYSBkZWxsYSByZXZpc2lvbmUgbmVsIGZpbGU6ICVzIgorCisjOiBnaXRrOjkwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJFcnJvcmUgbmVsbGUgZGlmZmVyZW56ZSB0cmEgbGUgcmV2aXNpb25pOiAlcyIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJJbml6aW8iCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgIkRhIgorCisjOiBnaXRrOjkxNDMKK21zZ2lkICJUbyIKK21zZ3N0ciAiQSIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyYSBwYXRjaCIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRhOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICJBOiIKKworIzogZ2l0azo5MTg3Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJ0aSIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiU2NyaXZpIHN1bCBmaWxlOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyYSIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgY3JlYXppb25lIGRlbGxhIHBhdGNoOiIKKworIzogZ2l0azo5MjU2IGdpdGs6OTM3MyBnaXRrOjk0MzAKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5MjY1Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb21lIGV0aWNoZXR0YToiCisKKyM6IGdpdGs6OTI2OAorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJJbCBtZXNzYWdnaW8gZGVsbCdldGljaGV0dGEgw6ggb3B6aW9uYWxlIgorCisjOiBnaXRrOjkyNzAKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkZWxsJ2V0aWNoZXR0YToiCisKKyM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWEiCisKKyM6IGdpdGs6OTI5MgorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiTmVzc3VuYSBldGljaGV0dGEgc3BlY2lmaWNhdGEiCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkwnZXRpY2hldHRhIFwiJXNcIiBlc2lzdGUgZ2nDoCIKKworIzogZ2l0azo5MzA2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGNyZWF6aW9uZSBkZWxsJ2V0aWNoZXR0YToiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21hbmRvOiIKKworIzogZ2l0azo5MzkwCittc2dpZCAiV3JpdGUiCittc2dzdHIgIlNjcml2aSIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgc2NyaXR0dXJhIGRlbGxhIHJldmlzaW9uZToiCisKKyM6IGdpdGs6OTQzNQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOb21lOiIKKworIzogZ2l0azo5NDU4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiU3BlY2lmaWNhcmUgdW4gbm9tZSBwZXIgaWwgbnVvdm8gcmFtbyIKKworIzogZ2l0azo5NDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIklsIHJhbW8gJyVzJyBlc2lzdGUgZ2nDoC4gU292cmFzY3JpdmVyZT8iCisKKyM6IGdpdGs6OTUzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgw6ggZ2nDoCBpbmNsdXNhIG5lbCByYW1vICVzIC0tIGFwcGxpY2FybGEgZGkgbnVvdm8/IgorCisjOiBnaXRrOjk1MzUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjk1NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgY2hlcnJ5LXBpY2sgcGVyY2jDqSBpbCBmaWxlICclcycgw6ggc3RhdG8gbW9kaWZpY2F0byAiCisibmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9yby5cbiIKKyJQcmltYSBkaSByaXByb3ZhcmUsIGJpc29nbmEgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUsIGFubnVsbGFyZSBsZSAiCisibW9kaWZpY2hlIG8gdXNhcmUgJ2dpdCBzdGFzaCcuIgorCisjOiBnaXRrOjk1NTAKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBjaGVycnktcGljayBhIGNhdXNhIGRpIHVuIGNvbmZsaXR0byBuZWxsYSBmdXNpb25lLlxuIgorIlZ1b2kgYXZ2aWFyZSBnaXQgY2l0b29sIHBlciByaXNvbHZlcmxvPyIKKworIzogZ2l0azo5NTY2IGdpdGs6OTYyNAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIGFyY2hpdmlhdGEiCisKKyM6IGdpdGs6OTU5MworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiTGEgcmV2aXNpb25lICVzIMOoIGdpw6AgaW5jbHVzYSBuZWwgcmFtbyAlcyAtLSBhcHBsaWNhcmxhIGRpIG51b3ZvPyIKKworIzogZ2l0azo5NTk4CisjLCBmdXp6eQorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAiZ2l0IHJlc2V0IGluIGNvcnNvIgorCisjOiBnaXRrOjk2MDYKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBjaGVycnktcGljayBwZXJjaMOpIGlsIGZpbGUgJyVzJyDDqCBzdGF0byBtb2RpZmljYXRvICIKKyJuZWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvLlxuIgorIlByaW1hIGRpIHJpcHJvdmFyZSwgYmlzb2duYSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZSwgYW5udWxsYXJlIGxlICIKKyJtb2RpZmljaGUgbyB1c2FyZSAnZ2l0IHN0YXNoJy4iCisKKyM6IGdpdGs6OTYxMAorIywgZnV6enkKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGVzZWd1aXJlIGNoZXJyeS1waWNrIGEgY2F1c2EgZGkgdW4gY29uZmxpdHRvIG5lbGxhIGZ1c2lvbmUuXG4iCisiVnVvaSBhdnZpYXJlIGdpdCBjaXRvb2wgcGVyIHJpc29sdmVybG8/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25mZXJtYSBnaXQgcmVzZXQiCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIkFnZ2lvcm5hcmUgaWwgcmFtbyAlcyBhICVzPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlRpcG8gZGkgYWdnaW9ybmFtZW50bzoiCisKKyM6IGdpdGs6OTY2MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJTb2Z0OiBMYXNjaWEgbGEgZGlyZWNvcnkgZGkgbGF2b3JvIGUgbCdpbmRpY2UgY29tZSBzb25vIgorCisjOiBnaXRrOjk2NjMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIk1peGVkOiBMYXNjaWEgbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBjb21lIMOoLCBhZ2dpb3JuYSBsJ2luZGljZSIKKworIzogZ2l0azo5NjY2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIYXJkOiBBZ2dpb3JuYSBsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGUgbCdpbmRpY2VcbiIKKyIoYWJiYW5kb25hIFRVVFRFIGxlIG1vZGlmaWNoZSBsb2NhbGkpIgorCisjOiBnaXRrOjk2ODMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgImdpdCByZXNldCBpbiBjb3JzbyIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJBdHRpdmF6aW9uZSBpbiBjb3JzbyIKKworIzogZ2l0azo5Nzk2Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY2FuY2VsbGFyZSBpbCByYW1vIGF0dHVhbG1lbnRlIGF0dGl2byIKKworIzogZ2l0azo5ODAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJMZSByZXZpc2lvbmkgbmVsIHJhbW8gJXMgbm9uIHNvbm8gcHJlc2VudGkgc3UgYWx0cmkgcmFtaS5cbiIKKyJDYW5jZWxsYXJlIGlsIHJhbW8gJXM/IgorCisjOiBnaXRrOjk4MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIkV0aWNoZXR0ZSBlIHJhbWk6ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRybyIKKworIzogZ2l0azoxMDE0NgorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxhIHRvcG9sb2dpYSBkZWxsZSByZXZpc2lvbmk6IGxlIGluZm9ybWF6aW9uaSBzdWwgIgorInJhbW8gZSBsZSBldGljaGV0dGUgcHJlY2VkZW50aSBlIHNlZ3VlbnRpIHNhcmFubm8gaW5jb21wbGV0ZS4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aWNoZXR0YSIKKworIzogZ2l0azoxMTEyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTIxMAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTY2VsdGEgY2FyYXR0ZXJpIGdpdGsiCisKKyM6IGdpdGs6MTEyMjcKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjMwCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM0OAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSB2aXN1YWxpenphemlvbmUgZGVsbCdlbGVuY28gcmV2aXNpb25pIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJMYXJnaGV6emEgbWFzc2ltYSBkZWwgZ3JhZmljbyAoaW4gbGluZWUpIgorCisjOiBnaXRrOjExMzU1CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTGFyZ2hlenphIG1hc3NpbWEgZGVsIGdyYWZpY28gKCUgZGVsIHBhbm5lbGxvKSIKKworIzogZ2l0azoxMTM1OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9zdHJhIG1vZGlmaWNoZSBsb2NhbGkiCisKKyM6IGdpdGs6MTEzNjEKKyMsIGZ1enp5Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU2VsZXppb25hIGF1dG9tYXRpY2FtZW50ZSBTSEExIGhhc2giCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJOYXNjb25kaSBpIHJpZmVyaW1lbnRpIHJlbW90aSIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIGRpIHZpc3VhbGl6emF6aW9uZSBkZWxsZSBkaWZmZXJlbnplIgorCisjOiBnaXRrOjExMzcxCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIlNwYXppYXR1cmEgdGFidWxhemlvbmkiCisKKyM6IGdpdGs6MTEzNzQKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiTW9zdHJhIGV0aWNoZXR0ZSB2aWNpbmUiCisKKyM6IGdpdGs6MTEzNzcKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0YSBsZSBkaWZmZXJlbnplIGFpIHBlcmNvcnNpIGVsZW5jYXRpIgorCisjOiBnaXRrOjExMzgzCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIkF0dGl2YSBjb2RpZmljYSBmaWxlIHBlciBmaWxlIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIlZpc3VhbGl6emF0b3JlIGRpIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlNjZWdsaS4uLiIKKworIzogZ2l0azoxMTM5NQorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBnZW5lcmFsaSIKKworIzogZ2l0azoxMTM5OAorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiVXRpbGl6emEgaW50ZXJmYWNjaWEgYSB0ZW1hIgorCisjOiBnaXRrOjExNDAwCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKHVuYSBtb2RpZmljYSByaWNoaWVkZSBpbCByaWF2dmlvKSIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIobW9tZW50YW5lYW1lbnRlIG5vbiBkaXNwb25pYmlsZSkiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ29sb3JpOiBwcmVtZXJlIHBlciBzY2VnbGllcmUiCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkludGVyZmFjY2lhIgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmZhY2NpYSIKKworIzogZ2l0azoxMTQyMAorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIlNmb25kbyIKKworIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAic2ZvbmRvIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJpbW8gcGlhbm8iCisKKyM6IGdpdGs6MTE0MjUKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJwcmltbyBwaWFubyIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjogdmVjY2hpZSBsaW5lZSIKKworIzogZ2l0azoxMTQyOQorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJ2ZWNjaGllIGxpbmVlIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBudW92ZSBsaW5lZSIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJudW92ZSBsaW5lZSIKKworIzogZ2l0azoxMTQzOAorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBpbnRlc3RhemlvbmUgZGVsbGEgc2V6aW9uZSIKKworIzogZ2l0azoxMTQ0MAorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImludGVzdGF6aW9uZSBkZWxsYSBzZXppb25lIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIlNmb25kbyByaWdhIHNlbGV6aW9uYXRhIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAic2ZvbmRvIHJpZ2Egc2VsZXppb25hdGEiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIlNmb25kbyIKKworIzogZ2l0azoxMTQ1OQorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNhcmF0dGVyZTogcHJlbWVyZSBwZXIgc2NlZ2xpZXJlIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJDYXJhdHRlcmUgcHJpbmNpcGFsZSIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJDYXJhdHRlcmUgcGVyIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MTE0NjMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJDYXJhdHRlcmUgcGVyIGludGVyZmFjY2lhIHV0ZW50ZSIKKworIzogZ2l0azoxMTQ4NQorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcmVuemUgZ2l0ayIKKworIzogZ2l0azoxMTQ5NAorIywgZnV6enkKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJHZW5lcmEiCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkZvbnRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBzY2VnbGllcmUgdW4gY29sb3JlIHBlciAlcyIKKworIzogZ2l0azoxMjA1OQorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiQXJjaGl2aW8gZ2l0IG5vbiB0cm92YXRvLiIKKworIzogZ2l0azoxMjMxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiQXJnb21lbnRvIGFtYmlndW86ICclcycgw6ggc2lhIHJldmlzaW9uZSBjaGUgbm9tZSBkaSBmaWxlIgorCisjOiBnaXRrOjEyMzI4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiR2l0azogYXJnb21lbnRpIGVycmF0aToiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICJzdWNjIgorCisjfiBtc2dpZCAicHJldiIKKyN+IG1zZ3N0ciAicHJlYyIKKworI34gbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCisjfiBtc2dzdHIgIkRpcmVjdG9yeSBnaXQgXCIlc1wiIG5vbiB0cm92YXRhLiIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2phLnBvIGIvZ2l0ay1naXQvcG8vamEucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzYzI5YgotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2phLnBvCkBAIC0wLDAgKzEsMTM3OSBAQAorIyBKYXBhbmVzZSB0cmFuc2xhdGlvbnMgZm9yIGdpdGsgcGFja2FnZS4KKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTUgUGF1bCBNYWNrZXJyYXMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMKKyMgTWl6YXIgPG1pemFyLmpwQGdtYWlsLmNvbT4sIDIwMDkuCisjIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4sIDIwMDkuCisjIFlPS09UQSBIaXJvc2hpIDx5b2tvdGFAbmV0bGFiLmNzLnRzdWt1YmEuYWMuanA+LCAyMDE1LgorIyBTYXRvc2hpIFlhc3VzaGltYSA8cy55YXN1c2hpbWFAZ21haWwuY29tPiwgMjAxNi4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMTEtMTIgMTM6MDArMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2F0b3NoaSBZYXN1c2hpbWEgPHMueWFzdXNoaW1hQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBKYXBhbmVzZVxuIgorIkxhbmd1YWdlOiBqYVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICLjg57jg7zjgrjjgZXjgozjgabjgYTjgarjgYTjg5XjgqHjgqTjg6vjga7jg6rjgrnjg4jjgpLlj5blvpfjgafjgY3jgb7jgZvjgpM6IgorCisjOiBnaXRrOjIxMiBnaXRrOjIzODEKK21zZ2lkICJDb2xvciB3b3JkcyIKK21zZ3N0ciAi5aSJ5pu044KS552A6ImyIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIxIGdpdGs6ODI1NAorbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAi5aSJ5pu044KS44Oe44O844Kv44Ki44OD44OXIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAi44Oq44OT44K444On44Oz6Kej5p6Q44Ko44Op44O8OiIKKworIzogZ2l0azozODAKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICItLWFyZ3NjbWQg44Kz44Oe44Oz44OJ5a6f6KGM44Ko44Op44O8OiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyLjg5XjgqHjgqTjg6vmnKrpgbjmip46IC0tbWVyZ2Ug44GM5oyH5a6a44GV44KM44G+44GX44Gf44GM44CB44Oe44O844K444GV44KM44Gm44GE44Gq44GE44OV44Kh44Kk44Or44Gv44GC44KKIgorIuOBvuOBm+OCk+OAgiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIuODleOCoeOCpOODq+acqumBuOaKnjogLS1tZXJnZSDjgYzmjIflrprjgZXjgozjgb7jgZfjgZ/jgYzjgIHjg5XjgqHjgqTjg6vliLbpmZDlhoXjgavjg57jg7zjgrjjgZXjgozjgabjgYTjgaoiCisi44GE44OV44Kh44Kk44Or44Gv44GC44KK44G+44Gb44KT44CCIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiZ2l0IGxvZyDlrp/ooYzjgqjjg6njg7w6IgorCisjOiBnaXRrOjQzNiBnaXRrOjU4MgorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIuiqreOBv+i+vOOBv+S4rSIKKworIzogZ2l0azo0OTYgZ2l0azo0NTI2Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICLjgrPjg5/jg4Pjg4joqq3jgb/ovrzjgb/kuK0uLi4iCisKKyM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjkKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjgYzpgbjmip7jgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDYgZ2l0azoxMjQ0NworbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAi44Kz44Oe44Oz44OJ6KGMIgorCisjOiBnaXRrOjE1MTEKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgImdpdCBsb2cg44Gu5Ye65Yqb44KS6Kej5p6Q44Gn44GN44G+44Gb44KTOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAi5pyJ5Yq544Gq44Kz44Of44OD44OI44Gu5oOF5aCx44GM44GC44KK44G+44Gb44KTIgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMxNiBnaXRrOjk2ODQgZ2l0azoxMTI1NiBnaXRrOjExNTM2Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE4IGdpdGs6OTE5NyBnaXRrOjkyNzYgZ2l0azo5NDA2IGdpdGs6OTQ1NSBnaXRrOjk2ODYKKyM6IGdpdGs6MTEyNTcgZ2l0azoxMTUzNworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi44Kt44Oj44Oz44K744OrIgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICLmm7TmlrAoJlUpIgorCisjOiBnaXRrOjIwNzAKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICLjg6rjg63jg7zjg4koJlIpIgorCisjOiBnaXRrOjIwNzEKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIuODquODleOCoeODrOODs+OCueOCkuWGjeiqreOBv+i+vOOBvygmRikiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIuODquODleOCoeODrOODs+OCueODquOCueODiOOCkuihqOekuigmTCkiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJnaXQgZ3VpIOOBrumWi+WniygmRykiCisKKyM6IGdpdGs6MjA3NgorbXNnaWQgIiZRdWl0IgorbXNnc3RyICLntYLkuoYoJlEpIgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAi44OV44Kh44Kk44OrKCZGKSIKKworIzogZ2l0azoyMDgwCittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICLoqK3lrpooJlApIgorCisjOiBnaXRrOjIwNzkKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAi57eo6ZuGKCZFKSIKKworIzogZ2l0azoyMDg0Cittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICLmlrDopo/jg5Pjg6Xjg7woJk4pLi4uIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICLjg5Pjg6Xjg7znt6jpm4YoJkUpLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIuODk+ODpeODvOWJiumZpCgmRCkiCisKKyM6IGdpdGs6MjA4OAorbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIuWFqOOBpuOBruODleOCoeOCpOODqygmQSkiCisKKyM6IGdpdGs6MjA4MworbXNnaWQgIiZWaWV3IgorbXNnc3RyICLjg5Pjg6Xjg7woJlYpIgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgImdpdGsg44Gr44Gk44GE44GmKCZBKSIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIuOCreODvOODkOOCpOODs+ODh+OCo+ODs+OCsCgmSykiCisKKyM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKK21zZ2lkICImSGVscCIKK21zZ3N0ciAi44OY44Or44OXKCZIKSIKKworIzogZ2l0azoyMTg1IGdpdGs6ODY1MworbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKKworIzogZ2l0azoyMjI5Cittc2dpZCAiUm93IgorbXNnc3RyICLooYwiCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgIuaknOe0oiIKKworIzogZ2l0azoyMjk1Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICLjgrPjg5/jg4Pjg4giCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg4IGdpdGs6NDcxMSBnaXRrOjQ3MzUgZ2l0azo2NzU2IGdpdGs6NjgyOAorIzogZ2l0azo2OTEzCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgIuWQq+OCgDoiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjcgZ2l0azozNTMyIGdpdGs6NDc2NAorbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAi44OR44K544Gu5LiA6YOoOiIKKworIzogZ2l0azoyMzAzIGdpdGs6NDc3OAorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICLov73liqAv6Zmk5Y6744GV44KM44KL5paH5a2X5YiXOiIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc4MAorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAi5aSJ5pu044GV44KM44KL5paH5a2X5YiXIgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NworbXNnaWQgIkV4YWN0IgorbXNnc3RyICLoi7HlrZfjga7lpKflsI/jgpLljLrliKXjgZnjgosiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ4NTUgZ2l0azo2NzI0Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAi6Iux5a2X44Gu5aSn5bCP44KS5Yy65Yil44GX44Gq44GEIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0NzM3IGdpdGs6NDg1MyBnaXRrOjY3MjAKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIuato+imj+ihqOePviIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzUgZ2l0azo0OTA1IGdpdGs6NDkxMiBnaXRrOjY4NDkgZ2l0azo2OTE3Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAi5YWo44Gm44Gu6aCF55uuIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcyIGdpdGs6NDkwNSBnaXRrOjY3ODcKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAi44OY44OD44OJ44Op44Kk44OzIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcyIGdpdGs6Njc4NyBnaXRrOjY5MTcgZ2l0azo3MzkwCittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIuOCs+ODoeODs+ODiCIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MiBnaXRrOjQ4NzcgZ2l0azo0OTEyIGdpdGs6Njc4NyBnaXRrOjczMjUgZ2l0azo4ODMxCisjOiBnaXRrOjg4NDYKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIuS9nOiAhSIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MiBnaXRrOjY3ODcgZ2l0azo3MzI3Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jogIUiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAi5qSc57SiIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAi5pen44OQ44O844K444On44OzIgorCisjOiBnaXRrOjIzNjIKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAi5paw44OQ44O844K444On44OzIgorCisjOiBnaXRrOjIzNjQKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICLmlofohIjooYzmlbAiCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIuepuueZveOBrumBleOBhOOCkueEoeimliIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NjAgZ2l0azo4MjA3Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICLooYzmr47jga5kaWZmIgorCisjOiBnaXRrOjI0NDUKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAi44OR44OD44OBIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICLjg4Tjg6rjg7wiCisKKyM6IGdpdGs6MjYxNyBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIuOBk+OCjOOBqOmBuOaKnuOBl+OBn+OCs+ODn+ODg+ODiOOBrmRpZmbjgpLopovjgosiCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzkKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIumBuOaKnuOBl+OBn+OCs+ODn+ODg+ODiOOBqOOBk+OCjOOBrmRpZmbjgpLopovjgosiCisKKyM6IGdpdGs6MjYxOSBnaXRrOjI2NDAKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICLjg5Hjg4Pjg4HkvZzmiJAiCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTUKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICLjgr/jgrDnlJ/miJAiCisKKyM6IGdpdGs6MjYyMQorbXNnaWQgIkNvcHkgY29tbWl0IHN1bW1hcnkiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOBruimgee0hOOCkuOCs+ODlOODvOOBmeOCiyIKKworIzogZ2l0azoyNjIyIGdpdGs6OTM4NgorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjgpLjg5XjgqHjgqTjg6vjgavmm7jjgY3lh7rjgZkiCisKKyM6IGdpdGs6MjYyMyBnaXRrOjk0NDMKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi5paw6KaP44OW44Op44Oz44OB55Sf5oiQIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi44GT44Gu44Kz44Of44OD44OI44KS44OB44Kn44Oq44O844OU44OD44Kv44GZ44KLIgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLjg5bjg6njg7Pjg4Hjga5IRUFE44KS44GT44GT44Gr44Oq44K744OD44OI44GZ44KLIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICLjgZPjga7jgrPjg5/jg4Pjg4jjgavjg57jg7zjgq/jgpLjgaTjgZHjgosiCisKKyM6IGdpdGs6MjYyNworbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICLjg57jg7zjgq/jgpLku5jjgZHjgZ/miYDjgavmiLvjgosiCisKKyM6IGdpdGs6MjYyOAorbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICLjgZPjgozjgajjg57jg7zjgq/jgpLjgaTjgZHjgZ/miYDjgajjga7lrZDlravjgpLopovjgaTjgZHjgosiCisKKyM6IGdpdGs6MjYyOQorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICLjg57jg7zjgq/jgpLku5jjgZHjgZ/jgrPjg5/jg4Pjg4jjgajmr5TovIPjgZnjgosiCisKKyM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAi44GT44KM44Go44Oe44O844Kv44KS5LuY44GR44Gf44Kz44Of44OD44OI44GuZGlmZuOCkuimi+OCiyIKKworIzogZ2l0azoyNjMxIGdpdGs6MjY0MgorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICLjg57jg7zjgq/jgpLku5jjgZHjgZ/jgrPjg5/jg4Pjg4jjgajjgZPjgozjga5kaWZm44KS6KaL44KLIgorCisjOiBnaXRrOjI2MzIKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgIuOBk+OBruOCs+ODn+ODg+ODiOOCkuaSpOWbnuOBmeOCiyIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICLjgZPjga7jg5bjg6njg7Pjg4HjgpLjg4Hjgqfjg4Pjgq/jgqLjgqbjg4jjgZnjgosiCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi44GT44Gu44OW44Op44Oz44OB44KS6Zmk5Y6744GZ44KLIgorCisjOiBnaXRrOjI2NTAKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICLjg5bjg6njg7Pjg4HlkI3jgpLjgrPjg5Tjg7zjgZnjgosiCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAi44GT44KM44KC44OP44Kk44Op44Kk44OI44GV44Gb44KLIgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICLjgZPjgozjgaDjgZHjgpLjg4/jgqTjg6njgqTjg4jjgZXjgZvjgosiCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIuWklumDqGRpZmbjg4Tjg7zjg6siCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIuimquOCs+ODn+ODg+ODiOOBi+OCiSBibGFtZSDjgpLjgYvjgZHjgosiCisKKyM6IGdpdGs6MjY2MQorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAi44OR44K55ZCN44KS44Kz44OU44O844GZ44KLIgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIuOBk+OBruihjOOBruWHuuiHquOCkuihqOekuuOBmeOCiyIKKworIzogZ2l0azoyNjY5Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICLjgZPjga7ooYzjgasgZ2l0IGd1aSDjgacgYmxhbWUg44KS44GL44GR44KLIgorCisjOiBnaXRrOjMwMTMKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICJnaXRrIOOBq+OBpOOBhOOBpiIKKworIzogZ2l0azozMDE1Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIGdpdOOCs+ODn+ODg+ODiOODk+ODpeODvOOColxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyLkvb/nlKjjgYrjgojjgbPlho3phY3luIPjga8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug44Gr5b6T44Gj44Gm44GP44Gg44GV44GEIgorCisjOiBnaXRrOjMwMjMgZ2l0azozMDkwIGdpdGs6OTg3MgorbXNnaWQgIkNsb3NlIgorbXNnc3RyICLplonjgZjjgosiCisKKyM6IGdpdGs6MzA0NAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJHaXRrIOOCreODvOODkOOCpOODs+ODh+OCo+ODs+OCsCIKKworIzogZ2l0azozMDQ3Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJHaXRrIOOCreODvOODkOOCpOODs+ODh+OCo+ODs+OCsDoiCisKKyM6IGdpdGs6MzA0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx057WC5LqGIgorCisjOiBnaXRrOjMwNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtVz5cdFx044Km44Kj44Oz44OJ44Km44KS6ZaJ44GY44KLIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHTmnIDliJ3jga7jgrPjg5/jg4Pjg4jjgavnp7vli5UiCisKKyM6IGdpdGs6MzA1MgorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdOacgOW+jOOBruOCs+ODn+ODg+ODiOOBq+enu+WLlSIKKworIzogZ2l0azozMDUzCittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXA+LCBwLCBrXHTkuIDjgaTkuIrjga7jgrPjg5/jg4Pjg4jjgavnp7vli5UiCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwgalx05LiA44Gk5LiL44Gu44Kz44Of44OD44OI44Gr56e75YuVIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGhcdOWxpeattOOBruWJjeOBq+aIu+OCiyIKKworIzogZ2l0azozMDU2Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdOWxpeattOOBruasoeOBuOmAsuOCgCIKKworIzogZ2l0azozMDU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjwlcy1uKOaVsOWtlyk+XHTlsaXmrbTkuIrjgafnj77lnKjjga7jgrPjg5/jg4Pjg4jjga7opqrjgrPjg5/jg4Pjg4jjga7lhoXjga5uKOaVsOWtlynnlarnm67jga7jgrPjg5/jg4Pjg4jjgbjnp7vli5UiCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA44Gk5LiK44Gu44Oa44O844K444Gr56e75YuVIgorCisjOiBnaXRrOjMwNTkKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4gOOBpOS4i+OBruODmuODvOOCuOOBq+enu+WLlSIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4gOeVquS4iuOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHTjgrPjg5/jg4Pjg4jjg6rjgrnjg4jjga7kuIDnlarkuIvjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx044Kz44Of44OD44OI44Oq44K544OI44Gu5LiA44Gk5LiL44Gu6KGM44Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4gOOBpOS4i+OBruihjOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4iuOBruODmuODvOOCuOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdOOCs+ODn+ODg+ODiOODquOCueODiOOBruS4i+OBruODmuODvOOCuOOBq+OCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHTlvozmlrnjgpLmpJzntKIgKOS4iuaWueOBruODu+aWsOOBl+OBhOOCs+ODn+ODg+ODiCkiCisKKyM6IGdpdGs6MzA2NworbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtRG93bj5cdOWJjeaWueOCkuaknOe0ou+8iOS4i+aWueOBruODu+WPpOOBhOOCs+ODn+ODg+ODiO+8iSIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRkaWZm55S76Z2i44KS5LiK44Gu44Oa44O844K444Gr44K544Kv44Ot44O844Or44GZ44KLIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdGRpZmbnlLvpnaLjgpLkuIrjga7jg5rjg7zjgrjjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8U3BhY2U+XHRcdGRpZmbnlLvpnaLjgpLkuIvjga7jg5rjg7zjgrjjgavjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MzA3MQorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRkaWZm55S76Z2i44KS5LiK44GrMTjooYzjgrnjgq/jg63jg7zjg6vjgZnjgosiCisKKyM6IGdpdGs6MzA3MgorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdGRpZmbnlLvpnaLjgpLkuIvjgasxOOihjOOCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHTmpJzntKIiCisKKyM6IGdpdGs6MzA3NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHTmrKHjgpLmpJzntKLjgZfjgabnp7vli5UiCisKKyM6IGdpdGs6MzA3NQorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHTmrKHjgpLmpJzntKLjgZfjgabnp7vli5UiCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICJnXHRcdOaMh+WumuOBl+OBpuOCs+ODn+ODg+ODiOOBq+enu+WLlSIKKworIzogZ2l0azozMDc3Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTmpJzntKLjg5zjg4Pjgq/jgrnjgavjg5Xjgqnjg7zjgqvjgrkiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTliY3jgpLmpJzntKLjgZfjgabnp7vli5UiCisKKyM6IGdpdGs6MzA3OQorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx05qyh44Gu44OV44Kh44Kk44Or44GrZGlmZueUu+mdouOCkuOCueOCr+ODreODvOODq+OBmeOCiyIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0ZGlmZueUu+mdouOBruasoeOCkuaknOe0oiIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdGRpZmbnlLvpnaLjga7liY3jgpLmpJzntKIiCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHTmloflrZfjgrXjgqTjgrrjgpLmi6HlpKciCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdOaWh+Wtl+OCteOCpOOCuuOCkuaLoeWkpyIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdOaWh+Wtl+OCteOCpOOCuuOCkue4ruWwjyIKKworIzogZ2l0azozMDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHTmloflrZfjgrXjgqTjgrrjgpLnuK7lsI8iCisKKyM6IGdpdGs6MzA4NgorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdOabtOaWsCIKKworIzogZ2l0azozNTUxIGdpdGs6MzU2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICLkuIDmmYLjg4fjgqPjg6zjgq/jg4jjg6ogJXMg55Sf5oiQ5pmC44Ko44Op44O8OiIKKworIzogZ2l0azozNTczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIlwiJXNcIiDjga7jgqjjg6njg7zjgYwgJXMg44Gr55m655SfOiIKKworIzogZ2l0azozNjM2Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLjgrPjg57jg7Pjg4nlpLHmlZc6IgorCisjOiBnaXRrOjM3ODUKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAi44Gd44Gu44KI44GG44Gq44Kz44Of44OD44OI44Gv44GC44KK44G+44Gb44KTIgorCisjOiBnaXRrOjM3OTkKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IOOCs+ODnuODs+ODieWkseaVlzoiCisKKyM6IGdpdGs6MzgzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIuODnuODvOOCuOOBmeOCiyBIRUFEIOOCkuiqreOBv+i+vOOCgeOBvuOBm+OCkzogJXMiCisKKyM6IGdpdGs6MzgzOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICLjgqTjg7Pjg4fjg4Pjgq/jgrnoqq3jgb/ovrzjgb/jgqjjg6njg7w6ICVzIgorCisjOiBnaXRrOjM4NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJnaXQgYmxhbWUg44KS5aeL44KB44KJ44KM44G+44Gb44KTOiAlcyIKKworIzogZ2l0azozODY2IGdpdGs6Njc1NQorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAi5qSc57Si5LitIgorCisjOiBnaXRrOjM4OTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgImdpdCBibGFtZSDlrp/ooYzjgqjjg6njg7w6ICVzIgorCisjOiBnaXRrOjM5MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICLjgrPjg5/jg4Pjg4ggJXMg44Gr55Sx5p2l44GZ44KL44Gd44Gu6KGM44Gv44CB44GT44Gu44OT44Ol44O844Gr6KGo56S644GV44KM44Gm44GE44G+44Gb44KTIgorCisjOiBnaXRrOjM5NDAKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICLlpJbpg6hkaWZm44OT44Ol44O844Ki44GM5aSx5pWXOiIKKworIzogZ2l0azo0MDQ0Cittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICLlhajjgabjga7jg5XjgqHjgqTjg6siCisKKyM6IGdpdGs6NDA2OAorbXNnaWQgIlZpZXciCittc2dzdHIgIuODk+ODpeODvCIKKworIzogZ2l0azo0MDcxCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkdpdGsg44OT44Ol44O85a6a576pIgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIuOBk+OBruODk+ODpeODvOOCkuiomOaGtuOBmeOCiyIKKworIzogZ2l0azo0MDc2Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAi44Oq44OV44Kh44Os44Oz44K577yI44K544Oa44O844K55Yy65YiH44KK44Gu44Oq44K544OI77yJOiIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAi44OW44Op44Oz44OB77yG44K/44KwOiIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIuWFqOOBpuOBruODquODleOCoeODrOODs+OCuSIKKworIzogZ2l0azo0MDc5Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIuWFqOOBpuOBru+8iOODreODvOOCq+ODq+OBqu+8ieODluODqeODs+ODgSIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIuWFqOOBpuOBruOCv+OCsCIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi5YWo44Gm44Gu44Oq44Oi44O844OI6L+96Leh44OW44Op44Oz44OBIgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jmg4XloLHvvIjmraPopo/ooajnj77vvIk6IgorCisjOiBnaXRrOjQwODMKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICLkvZzogIU6IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jogIU6IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIuOCs+ODn+ODg+ODiOODoeODg+OCu+ODvOOCuDoiCisKKyM6IGdpdGs6NDA4NgorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jmg4XloLHjga7lhajjgabjga7mnaHku7bjgavkuIDoh7QiCisKKyM6IGdpdGs6NDA4NworbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIuOCs+ODn+ODg+ODiOaDheWgseOBruWFqOOBpuOBruadoeS7tuOBq+S4jeS4gOiHtCIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIuWkieabtOOBl+OBn+ODleOCoeOCpOODqzoiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAi5Zu65a6a5paH5a2X5YiXIgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIuato+imj+ihqOePviIKKworIzogZ2l0azo0MDkxCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIuaknOe0ouaWh+Wtl+WIlzoiCisKKyM6IGdpdGs6NDA5MgorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIuOCs+ODn+ODg+ODiOaXpeaZgiAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIuacn+mWk+OBruWni+OCgToiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAi5pyf6ZaT44Gu57WC44KP44KKOiIKKworIzogZ2l0azo0MDk1Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIuWItumZkOODu+ecgeeVpeOBmeOCi+ODquODk+OCuOODp+ODs+OBruaVsO+8iOato+OBruaVtOaVsO+8iToiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAi6KGo56S644GZ44KL5pWwOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICLnnIHnlaXjgZnjgovmlbA6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICLjgZ3jga7ku5bjga7jgqrjg5fjgrfjg6fjg7M6IgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIuWOs+WvhuOBq+aXpeS7mOmghuOBp+S4puOBs+abv+OBiCIKKworIzogZ2l0azo0MTAwCittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIuWBtOaeneODnuODvOOCryIKKworIzogZ2l0azo0MTAxCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICLmnIDliJ3jga7opqrjgavliLbpmZAiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICLnsKHmmJPjgarlsaXmrbQiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJnaXQgbG9nIOOBuOOBrui/veWKoOOBruW8leaVsDoiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICLlkKvjgb7jgozjgovjg5XjgqHjgqTjg6vjg7vjg4fjgqPjg6zjgq/jg4jjg6rjgpLkuIDooYzjgZTjgajjgavlhaXlips6IgorCisjOiBnaXRrOjQxMDUKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAi44Kz44Of44OD44OI6L+95Yqg44Kz44Oe44Oz44OJOiIKKworIzogZ2l0azo0MjI5Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiDjg5Pjg6Xjg7znt6jpm4YiCisKKyM6IGdpdGs6NDIzNworbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICLigJUg44Oq44OT44K444On44Oz44Gu6YG45oqe5p2h5Lu2IgorCisjOiBnaXRrOjQyNDIKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIuODk+ODpeODvOWQjToiCisKKyM6IGdpdGs6NDMxNworbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIumBqeeUqCAoRjUpIgorCisjOiBnaXRrOjQzNTUKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIuOCs+ODn+ODg+ODiOmBuOaKnuW8leaVsOOBruOCqOODqeODvDoiCisKKyM6IGdpdGs6NDQxMCBnaXRrOjQ0NjMgZ2l0azo0OTI1IGdpdGs6NDkzOSBnaXRrOjYyMDkgZ2l0azoxMjM4OCBnaXRrOjEyMzg5Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAi54Sh44GXIgorCisjOiBnaXRrOjUwMjIgZ2l0azo1MDI3Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAi5a2Q5a2rIgorCisjOiBnaXRrOjUwMjMKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAi6Z2e5a2Q5a2rIgorCisjOiBnaXRrOjUwMzAgZ2l0azo1MDM1Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIuelluWFiCIKKworIzogZ2l0azo1MDMxCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICLpnZ7npZblhYgiCisKKyM6IGdpdGs6NTMyNQorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAi44K544OG44O844K444GV44KM44Gf44CB44Kz44Of44OD44OI5YmN44Gu44Ot44O844Kr44Or44Gq5aSJ5pu0IgorCisjOiBnaXRrOjUzNjEKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAi44K544OG44O844K444GV44KM44Gm44GE44Gq44GE44CB44Kz44Of44OD44OI5YmN44Gu44Ot44O844Kr44Or44Gq5aSJ5pu0IgorCisjOiBnaXRrOjcxMzUKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICLku5blpJrmlbAiCisKKyM6IGdpdGs6NzEzOAorbXNnaWQgIm1hbnkiCittc2dzdHIgIuWkmuaVsCIKKworIzogZ2l0azo3MzI5Cittc2dpZCAiVGFnczoiCittc2dzdHIgIuOCv+OCsDoiCisKKyM6IGdpdGs6NzM0NiBnaXRrOjczNTIgZ2l0azo4ODI2Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICLopqoiCisKKyM6IGdpdGs6NzM1NworbXNnaWQgIkNoaWxkIgorbXNnc3RyICLlrZAiCisKKyM6IGdpdGs6NzM2NgorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAi44OW44Op44Oz44OBIgorCisjOiBnaXRrOjczNjkKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICLkuIvkvY0iCisKKyM6IGdpdGs6NzM3MgorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICLkuIrkvY0iCisKKyM6IGdpdGs6Nzk2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJkaWZm5Y+W5b6X44Ko44Op44O8OiAlcyIKKworIzogZ2l0azo4NjUxCittc2dpZCAiR290bzoiCittc2dzdHIgIkdvdG86IgorCisjOiBnaXRrOjg2NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiJXMg44KS5ZCr44KAIFNIQTEgSUQg44Gv6KSH5pWw5a2Y5Zyo44GX44G+44GZIgorCisjOiBnaXRrOjg2NzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIuODquODk+OCuOODp+ODsyAlcyDjga/kuI3mmI7jgafjgZkiCisKKyM6IGdpdGs6ODY4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEExIGlkICVzIOOBr+S4jeaYjuOBp+OBmSIKKworIzogZ2l0azo4NjkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIuODquODk+OCuOODp+ODsyAlcyDjga/nj77lnKjjga7jg5Pjg6Xjg7zjgavjga/jgYLjgorjgb7jgZvjgpMiCisKKyM6IGdpdGs6ODgzMyBnaXRrOjg4NDgKK21zZ2lkICJEYXRlIgorbXNnc3RyICLml6Xku5giCisKKyM6IGdpdGs6ODgzNgorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICLlrZAiCisKKyM6IGdpdGs6ODg5OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICIlcyDjg5bjg6njg7Pjg4HjgpLjgZPjgZPjgavjg6rjgrvjg4Pjg4jjgZnjgosiCisKKyM6IGdpdGs6ODkwMQorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICLliIfjgorpm6LjgZXjgozjgZ9IRUFEOiDjg6rjgrvjg4Pjg4jjgafjgY3jgb7jgZvjgpMiCisKKyM6IGdpdGs6OTAwNiBnaXRrOjkwMTIKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjg57jg7zjgrjjgpLjgrnjgq3jg4Pjg5c6ICIKKworIzogZ2l0azo5MDIxIGdpdGs6OTAyNgorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAi44OR44OD44OB5Y+W5b6X44Ko44Op44O8OiBJRCAiCisKKyM6IGdpdGs6OTAyMiBnaXRrOjkwMjcKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSDlgZzmraJcbiIKKworIzogZ2l0azo5MDMyIGdpdGs6OTAzNSBnaXRrOjkwNDMgZ2l0azo5MDU3IGdpdGs6OTA2NgorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIuOCs+ODn+ODg+ODiCAiCisKKyM6IGdpdGs6OTAzNgorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIOOBr+S4i+iomOOBruODkeODg+ODgeOBqOWQjOetiVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NAorbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiDkuIvoqJjjgYvjgonjga5kaWZmXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDQ2Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuOCs+ODn+ODg+ODiOOBrmRpZmY6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1OCBnaXRrOjkwNjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIOOBq+OBryAlcyDjga7lrZDjgYzjgYLjgorjgb7jgZkgLSDlgZzmraJcbiIKKworIzogZ2l0azo5MDg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIuODleOCoeOCpOODq+OBuOOBruOCs+ODn+ODg+ODiOabuOOBjeWHuuOBl+OCqOODqeODvDogJXMiCisKKyM6IGdpdGs6OTA5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOBrmRpZmblrp/ooYzjgqjjg6njg7w6ICVzIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJUb3AiCittc2dzdHIgIlRvcCIKKworIzogZ2l0azo5MTM5Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRnJvbSIKKworIzogZ2l0azo5MTQ0Cittc2dpZCAiVG8iCittc2dzdHIgIlRvIgorCisjOiBnaXRrOjkxNjgKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi44OR44OD44OB55Sf5oiQIgorCisjOiBnaXRrOjkxNzAKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRnJvbToiCisKKyM6IGdpdGs6OTE3OQorbXNnaWQgIlRvOiIKK21zZ3N0ciAiVG86IgorCisjOiBnaXRrOjkxODgKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICLpgIYiCisKKyM6IGdpdGs6OTE5MCBnaXRrOjk0MDAKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIuWHuuWKm+ODleOCoeOCpOODqzoiCisKKyM6IGdpdGs6OTE5NgorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICLnlJ/miJAiCisKKyM6IGdpdGs6OTIzNAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAi44OR44OD44OB55Sf5oiQ44Ko44Op44O8OiIKKworIzogZ2l0azo5MjU3IGdpdGs6OTM4OCBnaXRrOjk0NDUKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5MjY2Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICLjgr/jgrDlkI06IgorCisjOiBnaXRrOjkyNjkKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAi44K/44Kw44Oh44OD44K744O844K444KS5LuY44GR44KL5LqL44KC5Ye65p2l44G+44GZIgorCisjOiBnaXRrOjkyNzEKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIuOCv+OCsOODoeODg+OCu+ODvOOCuDoiCisKKyM6IGdpdGs6OTI3NSBnaXRrOjk0NTQKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIueUn+aIkCIKKworIzogZ2l0azo5MjkzCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICLjgr/jgrDjga7lkI3np7DjgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyM6IGdpdGs6OTI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIuOCv+OCsCBcIiVzXCIg44Gv5pei44Gr5a2Y5Zyo44GX44G+44GZIgorCisjOiBnaXRrOjkzMDcKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICLjgr/jgrDnlJ/miJDjgqjjg6njg7w6IgorCisjOiBnaXRrOjkzOTcKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAi44Kz44Oe44Oz44OJOiIKKworIzogZ2l0azo5NDA1Cittc2dpZCAiV3JpdGUiCittc2dzdHIgIuabuOOBjeWHuuOBlyIKKworIzogZ2l0azo5NDIzCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jmm7jjgY3lh7rjgZfjgqjjg6njg7w6IgorCisjOiBnaXRrOjk0NTAKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAi5ZCN5YmNOiIKKworIzogZ2l0azo5NDczCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi5paw44GX44GE44OW44Op44Oz44OB44Gu5ZCN5YmN44KS5oyH5a6a44GX44Gm44GP44Gg44GV44GEIgorCisjOiBnaXRrOjk0NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAi44OW44Op44Oz44OBICclcycg44Gv5pei44Gr5a2Y5Zyo44GX44G+44GZ44CC5LiK5pu444GN44GX44G+44GZ44GL77yfIgorCisjOiBnaXRrOjk1NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIuOCs+ODn+ODg+ODiCAlcyDjga/ml6Ljgavjg5bjg6njg7Pjg4EgJXMg44Gr5ZCr44G+44KM44Gm44GE44G+44GZIOKAlSDmnKzlvZPjgavjgZPjgozjgpLlho3pgannlKjjgZfjgb7jgZnjgYvvvJ8iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICLjg4Hjgqfjg6rjg7zjg5Tjg4Pjgq/kuK0iCisKKyM6IGdpdGs6OTU1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyLjg5XjgqHjgqTjg6sgJyVzJyDjga7jg63jg7zjgqvjg6vjgarlpInmm7Tjga7jgZ/jgoHjgavjg4Hjgqfjg6rjg7zjg5Tjg4Pjgq/jga/lpLHmlZfjgZfjgb7jgZfjgZ/jgIJcbiIKKyLjgYLjgarjgZ/jga7lpInmm7TjgasgY29tbWl0LCByZXNldCwgc3Rhc2gg44Gu44GE44Ga44KM44GL44KS6KGM44Gj44Gm44GL44KJ44KE44KK55u044GX44Gm44GP44Gg44GVIgorIuOBhOOAgiIKKworIzogZ2l0azo5NTY1Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisi44Oe44O844K444Gu6KGd56qB44Gr44KI44Gj44Gm44OB44Kn44Oq44O844OU44OD44Kv44Gv5aSx5pWX44GX44G+44GX44Gf44CCXG4iCisi44GT44Gu6Kej5rG644Gu44Gf44KB44GrIGdpdCBjaXRvb2wg44KS5a6f6KGM44GX44Gf44GE44Gn44GZ44GL77yfIgorCisjOiBnaXRrOjk1ODEgZ2l0azo5NjM5Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIuS9leOBruWkieabtOOCguOCs+ODn+ODg+ODiOOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogZ2l0azo5NjA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIuOCs+ODn+ODg+ODiCAlcyDjga/ml6Ljgavjg5bjg6njg7Pjg4EgJXMg44Gr5ZCr44G+44KM44Gm44GE44G+44GZIOKAlSDmnKzlvZPjgavjgZPjgozjgpLmkqTlm57jgZfjgb7jgZnjgYvvvJ8iCisKKyM6IGdpdGs6OTYxMworbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAi5pKk5Zue5LitIgorCisjOiBnaXRrOjk2MjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAi44OV44Kh44Kk44OrICclcycg44Gu44Ot44O844Kr44Or44Gq5aSJ5pu044Gu44Gf44KB44Gr5pKk5Zue44Gv5aSx5pWX44GX44G+44GX44Gf44CCIOOBguOBquOBn+OBruWkieabtOOBqyBjb21taXQsIHJlc2V0LCBzdGFzaCDjga7jgYTjgZrjgozjgYvjgpLooYzjgaPjgabjgYvjgonjgoTjgornm7TjgZfjgabjgY/jgaDjgZXjgYTjgIIiCisKKyM6IGdpdGs6OTYyNQorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisi44Oe44O844K444Gu6KGd56qB44Gr44KI44Gj44Gm5pKk5Zue44Gv5aSx5pWX44GX44G+44GX44Gf44CCXG4iCisi44GT44Gu6Kej5rG644Gu44Gf44KB44GrIGdpdCBjaXRvb2wg44KS5a6f6KGM44GX44Gf44GE44Gn44GZ44GL77yfIgorCisjOiBnaXRrOjk2NjgKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICLnorroqo3jgpLlj5bjgormtojjgZkiCisKKyM6IGdpdGs6OTY3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIuODluODqeODs+ODgSAlcyDjgpIgJXMg44Gr44Oq44K744OD44OI44GX44G+44GZ44GL77yfIgorCisjOiBnaXRrOjk2NzIKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiUmVzZXQg44K/44Kk44OXOiIKKworIzogZ2l0azo5Njc1Cittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlNvZnQ6IOS9nOalreODhOODquODvOOCguOCpOODs+ODh+ODg+OCr+OCueOCguOBneOBruOBvuOBvuOBq+OBmeOCiyIKKworIzogZ2l0azo5Njc4Cittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJNaXhlZDog5L2c5qWt44OE44Oq44O844KS44Gd44Gu44G+44G+44Gr44GX44Gm44CB44Kk44Oz44OH44OD44Kv44K544KS44Oq44K744OD44OIIgorCisjOiBnaXRrOjk2ODEKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkhhcmQ6IOS9nOalreODhOODquODvOOChOOCpOODs+ODh+ODg+OCr+OCueOCkuODquOCu+ODg+ODiFxuIgorIu+8iOOAjOWFqOOBpuOBruOAjeODreODvOOCq+ODq+OBquWkieabtOOCkuegtOajhO+8iSIKKworIzogZ2l0azo5Njk4Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLjg6rjgrvjg4Pjg4jkuK0iCisKKyM6IGdpdGs6OTc1OAorbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAi44OB44Kn44OD44Kv44Ki44Km44OIIgorCisjOiBnaXRrOjk4MTEKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICLnj77lnKjjg4Hjgqfjg4Pjgq/jgqLjgqbjg4jjgZXjgozjgabjgYTjgovjg5bjg6njg7Pjg4HjgpLliYrpmaTjgZnjgovjgZPjgajjga/jgafjgY3jgb7jgZvjgpMiCisKKyM6IGdpdGs6OTgxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisi44OW44Op44Oz44OBICVzIOOBq+OBr+S7luOBruODluODqeODs+ODgeOBq+WtmOWcqOOBl+OBquOBhOOCs+ODn+ODg+ODiOOBjOOBguOCiuOBvuOBmeOAglxuIgorIuacrOW9k+OBq+ODluODqeODs+ODgSAlcyDjgpLliYrpmaTjgZfjgb7jgZnjgYvvvJ8iCisKKyM6IGdpdGs6OTg0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAi44K/44Kw44GoSEVBRDogJXMiCisKKyM6IGdpdGs6OTg2NQorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAi44OV44Kj44Or44K/44O8IgorCisjOiBnaXRrOjEwMTYxCittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisi44Kz44Of44OD44OI5qeL6YCg5oOF5aCx6Kqt44G/6L6844G/44Ko44Op44O8OyDjg5bjg6njg7Pjg4Hlj4rjgbPkuIrkvY0v5LiL5L2N44Gu44K/44Kw5oOF5aCx44GM5LiN5a6M5YWo44Gn44GC44KLIgorIuOCiOOBhuOBp+OBmeOAgiIKKworIzogZ2l0azoxMTEzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAi44K/44KwIgorCisjOiBnaXRrOjExMTQyCittc2dpZCAiSWQiCittc2dzdHIgIklEIgorCisjOiBnaXRrOjExMjI1Cittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIkdpdGsg44OV44Kp44Oz44OI6YG45oqeIgorCisjOiBnaXRrOjExMjQyCittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMTI0NQorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTEzNjMKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIuOCs+ODn+ODg+ODiOODquOCueODiOihqOekuuOCquODl+OCt+ODp+ODsyIKKworIzogZ2l0azoxMTM2NgorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAi5pyA5aSn44Kw44Op44OV5bmF77yI57ea44Gu5pys5pWw77yJIgorCisjOiBnaXRrOjExMzcwCisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAi5pyA5aSn44Kw44Op44OV5bmF77yI44Oa44Kk44Oz44Gr5a++44GZ44KL77yF77yJIgorCisjOiBnaXRrOjExMzczCittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLjg63jg7zjgqvjg6vjgarlpInmm7TjgpLooajnpLoiCisKKyM6IGdpdGs6MTEzNzYKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJTSEExIOOBruiHquWLlemBuOaKniAo6YG45oqe5paH5a2X5pWw5oyH5a6aKSIKKworIzogZ2l0azoxMTM4MAorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgIuODquODouODvOODiOODquODleOCoeODrOODs+OCueOCkumaoOOBmSIKKworIzogZ2l0azoxMTM4NAorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJkaWZm6KGo56S644Kq44OX44K344On44OzIgorCisjOiBnaXRrOjExMzg2Cittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIuOCv+ODluepuueZveW5hSIKKworIzogZ2l0azoxMTM4OQorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIui/keOBj+OBriDjgr/jgrAvaGVhZCDjgpLooajnpLrjgZnjgosiCisKKyM6IGdpdGs6MTEzOTIKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICLjgr/jgrAvaGVhZCDjga7mnIDlpKfooajnpLrmlbAiCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgImRpZmYg44KS44Oq44K544OI44Gu44OR44K544Gr5Yi26ZmQIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIuODleOCoeOCpOODq+OBlOOBqOOBruOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOBruOCteODneODvOODiCIKKworIzogZ2l0azoxMTQwNCBnaXRrOjExNTUxCittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICLlpJbpg6hkaWZm44OE44O844OrIgorCisjOiBnaXRrOjExNDA1Cittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICLpgbjmip4uLi4iCisKKyM6IGdpdGs6MTE0MTAKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIuWFqOS9k+ioreWumiIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAi44OG44O844Oe44Km44Kj44K444Kn44OD44OI44KS5L2/55So44GZ44KLIgorCisjOiBnaXRrOjExNDE1Cittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKOWkieabtOOBq+OBr+WGjei1t+WLleOBjOW/heimgeOBp+OBmSkiCisKKyM6IGdpdGs6MTE0MTcKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKOePvuWcqOOBr+S9v+eUqOWHuuadpeOBvuOBm+OCkykiCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi6ImyOiDjg5zjgr/jg7PjgpLmirzjgZfjgabpgbjmip4iCisKKyM6IGdpdGs6MTE0MzEKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIuOCpOODs+OCv+ODvOODleOCp+OCpOOCuSIKKworIzogZ2l0azoxMTQzMgorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAi44Kk44Oz44K/44O844OV44Kn44Kk44K5IgorCisjOiBnaXRrOjExNDM1Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAi6IOM5pmvIgorCisjOiBnaXRrOjExNDM2IGdpdGs6MTE0NjYKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICLog4zmma8iCisKKyM6IGdpdGs6MTE0MzkKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICLliY3mma8iCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICLliY3mma8iCisKKyM6IGdpdGs6MTE0NDMKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IOaXp+ODkOODvOOCuOODp+ODsyIKKworIzogZ2l0azoxMTQ0NAorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIOaXp+ODkOODvOOCuOODp+ODsyIKKworIzogZ2l0azoxMTQ0OAorbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZjog5paw44OQ44O844K444On44OzIgorCisjOiBnaXRrOjExNDQ5Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgImRpZmYg5paw44OQ44O844K444On44OzIgorCisjOiBnaXRrOjExNDUzCittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IGh1bmvjg5jjg4Pjg4AiCisKKyM6IGdpdGs6MTE0NTUKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIGh1bmvjg5jjg4Pjg4AiCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAi44Oe44O844Kv6KGM44Gu6IOM5pmvIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAi44Oe44O844Kv6KGM44Gu6IOM5pmvIgorCisjOiBnaXRrOjExNDY1Cittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICLpgbjmip7jga7og4zmma8iCisKKyM6IGdpdGs6MTE0NzQKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLjg5Xjgqnjg7Pjg4g6IOODnOOCv+ODs+OCkuaKvOOBl+OBpumBuOaKniIKKworIzogZ2l0azoxMTQ3NgorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAi5Li744OV44Kp44Oz44OIIgorCisjOiBnaXRrOjExNDc3Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIkRpZmbooajnpLrnlKjjg5Xjgqnjg7Pjg4giCisKKyM6IGdpdGs6MTE0NzgKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJVSeeUqOODleOCqeODs+ODiCIKKworIzogZ2l0azoxMTUwMAorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkdpdGsg6Kit5a6aIgorCisjOiBnaXRrOjExNTA5Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAi5LiA6IisIgorCisjOiBnaXRrOjExNTEwCittc2dpZCAiQ29sb3JzIgorbXNnc3RyICLoibIiCisKKyM6IGdpdGs6MTE1MTEKK21zZ2lkICJGb250cyIKK21zZ3N0ciAi44OV44Kp44Oz44OIIgorCisjOiBnaXRrOjExNTYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azog44CMJXPjgI0g44Gu6Imy44KS6YG45oqeIgorCisjOiBnaXRrOjEyMDc0Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisi55Sz44GX6Kiz44GC44KK44G+44Gb44KT44GM44CB44GT44Gu44OQ44O844K444On44Oz44GuIFRjbC9UayDjgafjga8gZ2l0ayDjgpLlrp/ooYzlh7rmnaXjgb7jgZvjgpPjgIJcbiIKKyJHaXRr44Gu5a6f6KGM44Gr44GvIFRjbC9UayA4LjQg5Lul5LiK44GM5b+F6KaB44Gn44GZ44CCIgorCisjOiBnaXRrOjEyMjg0Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAi44GT44GT44Gr44GvZ2l044Oq44Od44K444OI44Oq44GM44GC44KK44G+44Gb44KT44CCIgorCisjOiBnaXRrOjEyMzMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICLjgYLjgYTjgb7jgYTjgarlvJXmlbAgJyVzJzog44Oq44OT44K444On44Oz44Go44OV44Kh44Kk44Or5ZCN44Gu5Lih5pa544Gr6Kej6YeI44Gn44GN44G+44GZIgorCisjOiBnaXRrOjEyMzQzCittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiZ2l0a+OBuOOBruS4jeato+OBquW8leaVsDoiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9wbzJtc2cuc2ggYi9naXRrLWdpdC9wby9wbzJtc2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzYzMjQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL3BvMm1zZy5zaApAQCAtMCwwICsxLDEzMyBAQAorIyEvYmluL3NoCisjIFRjbCBpZ25vcmVzIHRoZSBuZXh0IGxpbmUgLSotIHRjbCAtKi0gXAorZXhlYyB0Y2xzaCAiJDAiIC0tICIkQCIKKworIyBUaGlzIGlzIGEgcmVhbGx5IHN0dXBpZCBwcm9ncmFtLCB3aGljaCBzZXJ2ZXMgYXMgYW4gYWx0ZXJuYXRpdmUgdG8KKyMgbXNnZm10LiAgSXQgX29ubHlfIHRyYW5zbGF0ZXMgdG8gVGNsIG1vZGUsIGRvZXMgX25vdF8gdmFsaWRhdGUgdGhlCisjIGlucHV0LCBhbmQgZG9lcyBfbm90XyBvdXRwdXQgYW55IHN0YXRpc3RpY3MuCisKK3Byb2MgdTJhIHtzfSB7CisJc2V0IHJlcyAiIgorCWZvcmVhY2ggaSBbc3BsaXQgJHMgIiJdIHsKKwkJc2NhbiAkaSAlYyBjCisJCWlmIHskYzwxMjh9IHsKKwkJCSMgZXNjYXBlICdbJywgJ1wnIGFuZCAnXScKKwkJCWlmIHskYyA9PSAweDViIHx8ICRjID09IDB4NWR9IHsKKwkJCQlhcHBlbmQgcmVzICJcXCIKKwkJCX0KKwkJCWFwcGVuZCByZXMgJGkKKwkJfSBlbHNlIHsKKwkJCWFwcGVuZCByZXMgXFx1W2Zvcm1hdCAlMDQuNHggJGNdCisJCX0KKwl9CisJcmV0dXJuICRyZXMKK30KKworc2V0IG91dHB1dF9kaXJlY3RvcnkgIi4iCitzZXQgbGFuZyAiZHVtbXkiCitzZXQgZmlsZXMgW2xpc3RdCitzZXQgc2hvd19zdGF0aXN0aWNzIDAKKworIyBwYXJzZSBvcHRpb25zCitmb3Ige3NldCBpIDB9IHskaSA8ICRhcmdjfSB7aW5jciBpfSB7CisJc2V0IGFyZyBbbGluZGV4ICRhcmd2ICRpXQorCWlmIHskYXJnID09ICItLXN0YXRpc3RpY3MifSB7CisJCWluY3Igc2hvd19zdGF0aXN0aWNzCisJCWNvbnRpbnVlCisJfQorCWlmIHskYXJnID09ICItLXRjbCJ9IHsKKwkJIyB3ZSBrbm93CisJCWNvbnRpbnVlCisJfQorCWlmIHskYXJnID09ICItbCJ9IHsKKwkJaW5jciBpCisJCXNldCBsYW5nIFtsaW5kZXggJGFyZ3YgJGldCisJCWNvbnRpbnVlCisJfQorCWlmIHskYXJnID09ICItZCJ9IHsKKwkJaW5jciBpCisJCXNldCB0bXAgW2xpbmRleCAkYXJndiAkaV0KKwkJcmVnc3ViICJcW14vXF0kIiAkdG1wICImLyIgb3V0cHV0X2RpcmVjdG9yeQorCQljb250aW51ZQorCX0KKwlsYXBwZW5kIGZpbGVzICRhcmcKK30KKworcHJvYyBmbHVzaF9tc2cge30geworCWdsb2JhbCBtc2dpZCBtc2dzdHIgbW9kZSBsYW5nIG91dCBmdXp6eQorCWdsb2JhbCB0cmFuc2xhdGVkX2NvdW50IGZ1enp5X2NvdW50IG5vdF90cmFuc2xhdGVkX2NvdW50CisKKwlpZiB7IVtpbmZvIGV4aXN0cyBtc2dpZF0gfHwgJG1vZGUgPT0gIiJ9IHsKKwkJcmV0dXJuCisJfQorCXNldCBtb2RlICIiCisJaWYgeyRmdXp6eSA9PSAxfSB7CisJCWluY3IgZnV6enlfY291bnQKKwkJc2V0IGZ1enp5IDAKKwkJcmV0dXJuCisJfQorCisJaWYgeyRtc2dpZCA9PSAiIn0geworCQlzZXQgcHJlZml4ICJzZXQgOjptc2djYXQ6OmhlYWRlciIKKwl9IGVsc2UgeworCQlpZiB7JG1zZ3N0ciA9PSAiIn0geworCQkJaW5jciBub3RfdHJhbnNsYXRlZF9jb3VudAorCQkJcmV0dXJuCisJCX0KKwkJc2V0IHByZWZpeCAiOjptc2djYXQ6Om1jc2V0ICRsYW5nIFwiW3UyYSAkbXNnaWRdXCIiCisJCWluY3IgdHJhbnNsYXRlZF9jb3VudAorCX0KKworCXB1dHMgJG91dCAiJHByZWZpeCBcIlt1MmEgJG1zZ3N0cl1cIiIKK30KKworc2V0IGZ1enp5IDAKK3NldCB0cmFuc2xhdGVkX2NvdW50IDAKK3NldCBmdXp6eV9jb3VudCAwCitzZXQgbm90X3RyYW5zbGF0ZWRfY291bnQgMAorZm9yZWFjaCBmaWxlICRmaWxlcyB7CisJcmVnc3ViICJeLiovXChcW14vXF0qXClcLnBvJCIgJGZpbGUgIiRvdXRwdXRfZGlyZWN0b3J5XFwxLm1zZyIgb3V0ZmlsZQorCXNldCBpbiBbb3BlbiAkZmlsZSAiciJdCisJZmNvbmZpZ3VyZSAkaW4gLWVuY29kaW5nIHV0Zi04CisJc2V0IG91dCBbb3BlbiAkb3V0ZmlsZSAidyJdCisKKwlzZXQgbW9kZSAiIgorCXdoaWxlIHtbZ2V0cyAkaW4gbGluZV0gPj0gMH0geworCQlpZiB7W3JlZ2V4cCAiXiMiICRsaW5lXX0geworCQkJaWYge1tyZWdleHAgIiwgZnV6enkiICRsaW5lXX0geworCQkJCXNldCBmdXp6eSAxCisJCQl9IGVsc2UgeworCQkJCWZsdXNoX21zZworCQkJfQorCQkJY29udGludWUKKwkJfSBlbHNlaWYge1tyZWdleHAgIl5tc2dpZCBcIiguKilcIiQiICRsaW5lIGR1bW15IG1hdGNoXX0geworCQkJZmx1c2hfbXNnCisJCQlzZXQgbXNnaWQgJG1hdGNoCisJCQlzZXQgbW9kZSAibXNnaWQiCisJCX0gZWxzZWlmIHtbcmVnZXhwICJebXNnc3RyIFwiKC4qKVwiJCIgJGxpbmUgZHVtbXkgbWF0Y2hdfSB7CisJCQlzZXQgbXNnc3RyICRtYXRjaAorCQkJc2V0IG1vZGUgIm1zZ3N0ciIKKwkJfSBlbHNlaWYgeyRsaW5lID09ICIifSB7CisJCQlmbHVzaF9tc2cKKwkJfSBlbHNlaWYge1tyZWdleHAgIl5cIiguKilcIiQiICRsaW5lIGR1bW15IG1hdGNoXX0geworCQkJaWYgeyRtb2RlID09ICJtc2dpZCJ9IHsKKwkJCQlhcHBlbmQgbXNnaWQgJG1hdGNoCisJCQl9IGVsc2VpZiB7JG1vZGUgPT0gIm1zZ3N0ciJ9IHsKKwkJCQlhcHBlbmQgbXNnc3RyICRtYXRjaAorCQkJfSBlbHNlIHsKKwkJCQlwdXRzIHN0ZGVyciAiSSBkbyBub3Qga25vdyB3aGF0IHRvIGRvOiAkbWF0Y2giCisJCQl9CisJCX0gZWxzZSB7CisJCQlwdXRzIHN0ZGVyciAiQ2Fubm90IGhhbmRsZSAkbGluZSIKKwkJfQorCX0KKwlmbHVzaF9tc2cKKwljbG9zZSAkaW4KKwljbG9zZSAkb3V0Cit9CisKK2lmIHskc2hvd19zdGF0aXN0aWNzfSB7CisJcHV0cyBbY29uY2F0ICIkdHJhbnNsYXRlZF9jb3VudCB0cmFuc2xhdGVkIG1lc3NhZ2VzLCAiIFwKKwkJIiRmdXp6eV9jb3VudCBmdXp6eSBvbmVzLCAiIFwKKwkJIiRub3RfdHJhbnNsYXRlZF9jb3VudCB1bnRyYW5zbGF0ZWQgb25lcy4iXQorfQpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vcHRfYnIucG8gYi9naXRrLWdpdC9wby9wdF9ici5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmViMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vcHRfYnIucG8KQEAgLTAsMCArMSwxMzkwIEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gQnJhemlsaWFuIFBvcnR1Z3Vlc2UuCisjIENvcHlyaWdodCAoQykgMjAwNyBQYXVsIE1hY2tlcnJhcywgZXQgYWwuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjCisjIEFsZXhhbmRyZSBFcndpbiBJdHRuZXIgPGFsZXhhbmRyZUBpdHRuZXIuY29tLmJyPiwgMjAxMC4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTEyLTA2IDIzOjM5LTAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXhhbmRyZSBFcndpbiBJdHRuZXIgPGFsZXhhbmRyZUBpdHRuZXIuY29tLmJyPlxuIgorIkxhbmd1YWdlLVRlYW06IEJyYXppbGlhbiBQb3J0dWd1ZXNlIDw+XG4iCisiTGFuZ3VhZ2U6IHB0X0JSXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgYSBsaXN0YSBkb3MgYXJxdWl2b3MgbsOjbyBtZXNjbGFkb3M6IgorCisjOiBnaXRrOjIxMiBnaXRrOjIzODEKK21zZ2lkICJDb2xvciB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MworbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRXJybyBhbyBpbnRlcnByZXRhciByZXZpc8O1ZXM6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkVycm8gYW8gZXhlY3V0YXIgbyBjb21hbmRvLS1hcmdzY21kOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJOZW5odW0gYXJxdWl2byBmb2kgc2VsZWNpb25hZG86IC0tbWVyZ2UgZXNwZWNpZmljYWRvIG1hcyBuw6NvIGjDoSBhcnF1aXZvcyBuw6NvLSIKKyJtZXNjbGFkb3MuIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTmVuaHVtIGFycXVpdm8gZm9pIHNlbGVjaW9uYWRvOiAtLW1lcmdlIGVzcGVjaWZpY2FkbyBtYXMgbsOjbyBow6EgYXJxdWl2b3MgbsOjby0iCisibWVzY2xhZG9zIGRlbnRybyBkb3MgbGltaXRlcy4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJFcnJvIGFvIGV4ZWN1dGFyIGdpdCBsb2c6IgorCisjOiBnaXRrOjQzNiBnaXRrOjU4MgorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIkxlbmRvIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxlbmRvIHJldmlzw7Vlcy4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIk5lbmh1bWEgcmV2aXPDo28gZm9pIHNlbGVjaW9uYWRhIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkxpbmhhIGRlIGNvbWFuZG8iCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGludGVycHJldGFyIGEgc2HDrWRhIGRvIFwiZ2l0IGxvZ1wiOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTsOjbyBow6EgaW5mb3JtYcOnw7VlcyBkaXNwb27DrXZlaXMgc29icmUgYSByZXZpc8OjbyIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQorbXNnaWQgIk9LIgorbXNnc3RyICJPayIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkNhbmNlbGFyIgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICJBdHVhbGl6YXIiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIlJlY2FycmVnYXIiCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiTGVyIGFzIHJlZmVyw6puY2lhcyBub3ZhbWVudGUiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkxpc3RhciByZWZlcsOqbmNpYXMiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJJbmljaWFyIEdpdCBHVUkiCisKKyM6IGdpdGs6MjA3NgorbXNnaWQgIiZRdWl0IgorbXNnc3RyICJTYWlyIgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiQXJxdWl2byIKKworIzogZ2l0azoyMDgwCittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXLDqm5jaWFzIgorCisjOiBnaXRrOjIwNzkKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiRWRpdGFyIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIk5vdmEgdmlzdGEuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIkVkaXRhciB2aXN0YS4uLiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJBcGFnYXIgdmlzdGEiCisKKyM6IGdpdGs6MjA4OCBnaXRrOjQwNDMKK21zZ2lkICImQWxsIGZpbGVzIgorbXNnc3RyICJUb2RvcyBvcyBhcnF1aXZvcyIKKworIzogZ2l0azoyMDgzIGdpdGs6NDA2NworbXNnaWQgIiZWaWV3IgorbXNnc3RyICJFeGliaXIiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIlNvYnJlIG8gZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIkF0YWxob3MgZGUgdGVjbGFkbyIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICJBanVkYSIKKworIzogZ2l0azoyMTg1IGdpdGs6ODY1MgorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKKworIzogZ2l0azoyMjI5Cittc2dpZCAiUm93IgorbXNnc3RyICJMaW5oYSIKKworIzogZ2l0azoyMjY3Cittc2dpZCAiRmluZCIKK21zZ3N0ciAiRW5jb250cmFyIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgIlJldmlzw6NvIgorCisjOiBnaXRrOjIyOTkgZ2l0azoyMzAxIGdpdGs6NDY4NyBnaXRrOjQ3MTAgZ2l0azo0NzM0IGdpdGs6Njc1NSBnaXRrOjY4MjcKKyM6IGdpdGs6NjkxMgorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJjb250ZW5kbzoiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiZW52b2x2ZW5kbyBvcyBjYW1pbmhvczoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiQWRpY2lvbmFuZG8vcmVtb3ZlbmRvIHRleHRvOiIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc3OQorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJFeGF0YW1lbnRlIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnbm9yYXIgbWFpw7pzY3VsYXMvbWluw7pzY3VsYXMiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiRXhwcmVzc8OjbyByZWd1bGFyIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUb2RvcyBvcyBjYW1wb3MiCisKKyM6IGdpdGs6MjMxOCBnaXRrOjQ4NzEgZ2l0azo0OTA0IGdpdGs6Njc4NgorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJBc3N1bnRvIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIkRlc2NyacOnw6NvIGRhIHJldmlzw6NvIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKKyM6IGdpdGs6ODg0NQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiUmV2aXNvciIKKworIzogZ2l0azoyMzUwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJCdXNjYXIiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmVyZW7Dp2FzIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc8OjbyBhbnRpZ2EiCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJWZXJzw6NvIG5vdmEiCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIk7Dum1lcm8gZGUgbGluaGFzIGRlIGNvbnRleHRvIgorCisjOiBnaXRrOjIzNzQKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJJZ25vcmFyIG11ZGFuw6dhcyBkZSBjYWl4YSIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJEaWZlcmVuw6dhcyIKKworIzogZ2l0azoyNDQ3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiw4Fydm9yZSIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiQ29tcGFyYXIgZXN0YSByZXZpc8OjbyBjb20gYSBzZWxlY2lvbmFkYSIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiQ29tcGFyYXIgYSByZXZpc8OjbyBzZWxlY2lvbmFkYSBjb20gZXN0YSIKKworIzogZ2l0azoyNjE5IGdpdGs6MjYzOQorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIkNyaWFyIHBhdGNoIgorCisjOiBnaXRrOjI2MjAgZ2l0azo5MjU0Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiQ3JpYXIgZXRpcXVldGEiCisKKyM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiU2FsdmFyIHJldmlzw6NvIHBhcmEgdW0gYXJxdWl2byIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcmlhciBub3ZvIHJhbW8iCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJGYXplciBjaGVycnktcGljayBkZXN0YSByZXZpc8OjbyIKKworIzogZ2l0azoyNjI0Cittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiUmVkZWZpbmlyIEhFQUQgcGFyYSBjw6EiCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIk1hcmNhciBlc3RhIHJldmlzw6NvIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVm9sdGFyIMOgIG1hcmNhIgorCisjOiBnaXRrOjI2MjcKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiRW5jb250cmFyIGRlc2NlbmRlbnRlIGUgbWFyY2FyIgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiQ29tcGFyYXIgY29tIGEgcmV2aXPDo28gbWFyY2FkYSIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorIywgZnV6enkKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiQ29tcGFyYXIgZXN0YSByZXZpc8OjbyBjb20gYSBzZWxlY2lvbmFkYSIKKworIzogZ2l0azoyNjMwIGdpdGs6MjY0MQorIywgZnV6enkKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiQ29tcGFyYXIgYSByZXZpc8OjbyBzZWxlY2lvbmFkYSBjb20gZXN0YSIKKworIzogZ2l0azoyNjMxCisjLCBmdXp6eQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTWFyY2FyIGVzdGEgcmV2aXPDo28iCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiRWZldHVhciBjaGVja291dCBkZXN0ZSByYW1vIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIkV4Y2x1aXIgZXN0ZSByYW1vIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiTWFyY2FyIGVzdGUgdGFtYsOpbSIKKworIzogZ2l0azoyNjU3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiTWFyY2FyIGFwZW5hcyBlc3RlIgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJEaWZmIGV4dGVybm8iCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIkFub3RhciByZXZpc8OjbyBhbnRlcmlvciIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY2NworbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiRXhpYmlyIG9yaWdlbSBkZXN0YSBsaW5oYSIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJFeGVjdXRhciAnZ2l0IGJsYW1lJyBuZXN0YSBsaW5oYSIKKworIzogZ2l0azozMDE0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSB1bSB2aXN1YWxpemFkb3IgZGUgcmV2aXPDtWVzIHBhcmEgbyBnaXQgXG4iCisiXG4iCisiQ29weXJpZ2h0IMKpOSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc28gZSBkaXN0cmlidWnDp8OjbyBzZWd1bmRvIG9zIHRlcm1vcyBkYSBMaWNlbsOnYSBQw7pibGljYSBHZXJhbCBHTlUiCisKKyM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkZlY2hhciIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkF0YWxob3MgZGUgdGVjbGFkbyIKKworIzogZ2l0azozMDQ2Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJBdGFsaG9zIGRlIHRlY2xhZG86IgorCisjOiBnaXRrOjMwNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdFNhaXIiCisKKyM6IGdpdGs6MzA0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1XPlx0XHRGZWNoYXIgamFuZWxhIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHRJciBwYXJhIGEgcHJpbWVpcmEgcmV2aXPDo28iCisKKyM6IGdpdGs6MzA1MQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdElyIHBhcmEgYSDDumx0aW1hIHJldmlzw6NvIgorCisjOiBnaXRrOjMwNTIKKyMsIGZ1enp5Cittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXA+LCBwLCBpXHRJciBwYXJhIHVtYSByZXZpc8OjbyBhY2ltYSIKKworIzogZ2l0azozMDUzCisjLCBmdXp6eQorbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwga1x0SXIgcGFyYSB1bWEgcmV2aXPDo28gYWJhaXhvIgorCisjOiBnaXRrOjMwNTQKKyMsIGZ1enp5Cittc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExlZnQ+LCB6LCBqXHRWb2x0YXIgbm8gaGlzdMOzcmljbyIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdEF2YW7Dp2FyIG5vIGhpc3TDs3JpY28iCisKKyM6IGdpdGs6MzA1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0U3ViaXIgdW1hIHDDoWdpbmEgbmEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjMwNTgKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdERlc2NlciB1bWEgcMOhZ2luYSBuYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHRSb2xhciBwYXJhIG8gaW7DrWNpbyBkYSBsaXN0YSBkZSByZXZpc8O1ZXMiCisKKyM6IGdpdGs6MzA2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0Um9sYXIgcGFyYSBvIGZpbmFsIGRhIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHRSb2xhciB1bWEgbGluaGEgYWNpbWEgbmEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdFJvbGFyIHVtYSBsaW5oYSBhYmFpeG8gbmEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx0Um9sYXIgdW1hIHDDoWdpbmEgYWNpbWEgbmEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjMwNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx0Um9sYXIgdW1hIHDDoWdpbmEgYWJhaXhvIG5hIGxpc3RhIGRlIHJldmlzw7VlcyIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHRQcm9jdXJhciBwcsOzeGltYSAocmV2aXPDtWVzIG1hcyByZWNlbnRlcykiCisKKyM6IGdpdGs6MzA2NgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtRG93bj5cdFByb2N1cmFyIGFudGVyaW9yIChyZXZpc8O1ZXMgbWFpcyBhbnRpZ2FzKSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRSb2xhIGFsdGVyYcOnw7VlcyB1bWEgcMOhZ2luYSBhY2ltYSIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHRSb2xhciBhbHRlcmHDp8O1ZXMgdW1hIHDDoWdpbmEgYWJhaXhvIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPFNwYWNlPlx0XHRSb2xhciBhbHRlcmHDp8O1ZXMgdW1hIHDDoWdpbmEgYWJhaXhvIgorCisjOiBnaXRrOjMwNzAKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0Um9sYXIgYWx0ZXJhw6fDtWVzIDE4IGxpbmhhcyBhY2ltYSIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0Um9sYXIgYWx0ZXJhw6fDtWVzIDE4IGxpbmhhcyBhYmFpeG8iCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0UHJvY3VyYXIiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRJciBwYXJhIGEgcHLDs3hpbWEgb2NvcnLDqm5jaWEiCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHRJciBwYXJhIGEgcHLDs3hpbWEgb2NvcnLDqm5jaWEiCisKKyM6IGdpdGs6MzA3NQorIywgZnV6enkKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0SXIgcGFyYSBhIMO6bHRpbWEgcmV2aXPDo28iCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0UG9yIGZvY28gbmEgY2FpeGEgZGUgYnVzY2EiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRJciBwYXJhIGEgb2NvcnLDqm5jaWEgYW50ZXJpb3IiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0Um9sYXIgYWx0ZXJhw6fDtWVzIHBhcmEgbyBwcsOzeGltbyBhcnF1aXZvIgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRQcm9jdXJhciBhIHByw7N4aW1hIG9jb3Jyw6puY2lhIG5hIGxpc3RhIGRlIGFsdGVyYcOnw7VlcyIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdFByb2N1cmFyIG9jb3Jyw6puY2lhIGFudGVyaW9yIG5hIGxpc3RhIGRlIGFsdGVyYcOnw7VlcyIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1bWVudGFyIHRhbWFuaG8gZGEgZm9udGUiCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdEF1bWVudGFyIHRhbWFuaG8gZGEgZm9udGUiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHRSZWR1emlyIHRhbWFuaG8gZGEgZm9udGUiCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx0UmVkdXppciB0YW1hbmhvIGRhIGZvbnRlIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRBdHVhbGl6YXIiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJybyBhbyBjcmlhciBvIGRpcmV0w7NyaW8gdGVtcG9yw6FyaW8gJXM6IgorCisjOiBnaXRrOjM1NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRXJybyBhbyBsZXIgXCIlc1wiIGRlICVzOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJPIGNvbWFuZG8gZmFsaG91OiIKKworIzogZ2l0azozNzg0Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIlJldmlzw6NvIG7Do28gZW5jb250cmFkYSIKKworIzogZ2l0azozNzk4Cittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJDb21hbmRvICdnaXQgZ3VpIGJsYW1lJyBmYWxob3U6IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJJbXBvc3PDrXZlbCBsZXIgbWVyZ2UgaGVhZDogJXMiCisKKyM6IGdpdGs6MzgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJFcnJvIGFvIGxlciBvIMOtbmRpY2U6ICVzIgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgaW5jaWFyIG8gJ2dpdCBibGFtZSc6ICVzIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJQcm9jdXJhbmRvIgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkVycm8gYW8gZXhlY3V0YXIgJ2dpdCBibGFtZSc6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICJFc3RhIGxpbmhhIHZlbSBkYSByZXZpc8OjbyAlcywgcXVlIG7Do28gZXN0w6EgbmVzdGEgdmlzdGEiCisKKyM6IGdpdGs6MzkzOQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIkVycm8gZG8gdmlzdWFsaXphZG9yIGRlIGFsdGVyYcOnw7VlcyBleHRlcm5vOiIKKworIzogZ2l0azo0MDcwCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkRlZmluaXIgdmlzdGEiCisKKyM6IGdpdGs6NDA3NAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiTGVtYnJhciBlc3RhIHZpc3RhIgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSZWZlcsOqbmNpYXMgKHNlcGFyYXIgYSBsaXN0YSBjb20gdW0gZXNwYcOnbyk6IgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJSYW1vcyAmIGV0aXF1ZXRhczoiCisKKyM6IGdpdGs6NDA3NworbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJUb2RhcyBhcyByZWZlcsOqbmNpYXMiCisKKyM6IGdpdGs6NDA3OAorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUb2RvcyBvcyByYW1vcyBsb2NhaXMiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJUb2RhcyBhcyBldGlxdWV0YXMiCisKKyM6IGdpdGs6NDA4MAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlRvZG9zIG9zIHJhbW9zIGRlIHJhc3RyZWlvIgorCisjOiBnaXRrOjQwODEKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJJbmZvcm1hw6fDtWVzIGRhIHJldmlzw6NvIChleHByZXNzw7VlcyByZWd1bGFyZXMpOiIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3I6IgorCisjOiBnaXRrOjQwODMKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJSZXZpc29yOiIKKworIzogZ2l0azo0MDg0Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJEZXNjcmnDp8OjbyBkYSByZXZpc8OjbzoiCisKKyM6IGdpdGs6NDA4NQorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJDb2luY2lkaXIgdG9kb3Mgb3MgY3JpdMOpcmlvcyBkZSBpbmZvcm1hw6fDtWVzIGRhIHJldmlzw6NvIgorCisjOiBnaXRrOjQwODYKKyMsIGZ1enp5Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQ29pbmNpZGlyIHRvZG9zIG9zIGNyaXTDqXJpb3MgZGUgaW5mb3JtYcOnw7VlcyBkYSByZXZpc8OjbyIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIk11ZGFuw6dhcyBwYXJhIG9zIGFycXVpdm9zOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJUZXh0byBmaXhvIgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIkV4cHJlc3PDo28gcmVndWxhciIKKworIzogZ2l0azo0MDkwCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIlRleHRvIGRlIGJ1c2NhIgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRhcyBkZSByZXZpc8OjbyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkRlc2RlOiIKKworIzogZ2l0azo0MDkzCittc2dpZCAiVW50aWw6IgorbXNnc3RyICJBdMOpOiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkxpbWl0YXIgZS9vdSBpZ25vcmFyIHVtIG7Dum1lcm8gZGUgcmV2aXPDtWVzIChpbnRlaXJvIHBvc2l0aXZvKToiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTsO6bWVybyBwYXJhIG1vc3RyYXI6IgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIk7Dum1lcm8gcGFyYSBpZ25vcmFyOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiT3DDp8O1ZXMgZGl2ZXJzYXM6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIk9yZGVuYXIgZXN0cml0YW1lbnRlIHBlbGEgZGF0YSIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIk1hcmNhciBvcyBkb2lzIGxhZG9zIGRvIHJhbW8iCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiTGltaXRhciBhbyBwcmltZWlybyBhbnRlY2Vzc29yIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiSGlzdMOzcmljbyBzaW1wbGlmaWNhZG8iCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJBcmd1bWVudG9zIGFkaWNpb25haXMgcGFyYSBvICdnaXQgbG9nJzoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJBcnF1aXZvcyBlIGRpcmV0w7NyaW9zIHBhcmEgaW5jbHVpciwgdW0gcG9yIGxpbmhhIgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tYW5kbyBwYXJhIGdlcmFyIG1haXMgcmV2aXPDtWVzIHBhcmEgaW5jbHVpcjoiCisKKyM6IGdpdGs6NDIyOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogZWRpdGFyIHZpc3RhIgorCisjOiBnaXRrOjQyMzYKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiLS0gY3JpdMOpcmlvcyBwYXJhIHNlbGVjaW9uYXIgcmV2aXPDtWVzIgorCisjOiBnaXRrOjQyNDEKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5vbWUgZGEgdmlzdGEiCisKKyM6IGdpdGs6NDMxNgorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIkFwbGljYXIgKEY1KSIKKworIzogZ2l0azo0MzU0Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJFcnJvIG5vcyBhcmd1bWVudG9zIGRlIHNlbGXDp8OjbyBkZSByZXZpc8O1ZXM6IgorCisjOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAorbXNnaWQgIk5vbmUiCittc2dzdHIgIk5lbmh1bSIKKworIzogZ2l0azo1MDIxIGdpdGs6NTAyNgorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkRlc2NlbmRlbnRlIGRlIgorCisjOiBnaXRrOjUwMjIKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiTsOjbyBkZXNjZW5kZW50ZSBkZSIKKworIzogZ2l0azo1MDI5IGdpdGs6NTAzNAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBbnRlY2Vzc29yIGRlIgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk7Do28gYW50ZWNlc3NvciBkZSIKKworIzogZ2l0azo1MzI0Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJNdWRhbsOnYXMgbG9jYWlzIG1hcmNhZGFzLCBwb3LDqW0gbsOjbyBzYWx2YXMiCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJNdWRhbsOnYXMgbG9jYWlzIG7Do28gbWFyY2FkYXMiCisKKyM6IGdpdGs6NzEzNAorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgIiIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAibXVpdGFzIgorCisjOiBnaXRrOjczMjgKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiRXRpcXVldGFzOiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIkFudGVjZXNzb3IiCisKKyM6IGdpdGs6NzM1NgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJEZXNjZW5kZW50ZSIKKworIzogZ2l0azo3MzY1Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJSYW1vIgorCisjOiBnaXRrOjczNjgKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJTZWd1ZSIKKworIzogZ2l0azo3MzcxCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByZWNlZGUiCisKKyM6IGdpdGs6Nzk2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICJFcnJvIGFvIG9idGVyIGRpZmVyZW7Dp2FzOiAlcyIKKworIzogZ2l0azo4NjUwCittc2dpZCAiR290bzoiCittc2dzdHIgIklyIHBhcmE6IgorCisjOiBnaXRrOjg2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiTyBpZCBTSEExICVzIMOpIGFtYsOtZ3VvIgorCisjOiBnaXRrOjg2NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlJldmlzw6NvICVzIGRlc2NvbmhlY2lkYSIKKworIzogZ2l0azo4Njg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIklkIFNIQTEgJXMgZGVzY29uaGVjaWRvIgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiQSByZXZpc8OjbyAlcyBuw6NvIGVzdMOhIG5hIHZpc3RhIGF0dWFsIgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0YSIKKworIzogZ2l0azo4ODM1Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkRlc2NlbmRlbnRlcyIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlJlZGVmaW5pciByYW1vICVzIHBhcmEgZXN0ZSBwb250byIKKworIzogZ2l0azo4OTAwCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIkRldGFjaGVkIGhlYWQ6IGltcG9zc8OtdmVsIHJlZGVmaW5pciIKKworIzogZ2l0azo5MDA1IGdpdGs6OTAxMQorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIlNhbHRhbmRvIHJldmlzw6NvIGRlIG1lc2NsYWdlbSIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJybyBhbyBvYnRlciBwYXRjaCBJRCBwYXJhIgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiLSBwYXJhbmRvXG4iCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJSZXZpc8OjbyIKKworIzogZ2l0azo5MDM1Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyLDqSBvIG1lc21vIHBhdGNoIHF1ZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0MworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiZGlmZXJlIGRlIgorCisjOiBnaXRrOjkwNDUKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiRGlmZXJlbsOnYSBkZSByZXZpc8O1ZXM6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAicG9zc3VpICVzIGRlc2NlbmRlbnRlcyAtIHBhcmFuZG9cbiIKKworIzogZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkVycm8gYW8gc2FsdmFyIHJldmlzw6NvIHBhcmEgbyBhcnF1aXZvOiAlcyIKKworIzogZ2l0azo5MDkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiRXJybyBhbyBjb21wYXJhciByZXZpc8O1ZXM6ICVzIgorCisjOiBnaXRrOjkxMzcKK21zZ2lkICJUb3AiCittc2dzdHIgIkluw61jaW8iCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgIkRlIgorCisjOiBnaXRrOjkxNDMKK21zZ2lkICJUbyIKK21zZ3N0ciAiUGFyYSIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlcmFyIHBhdGNoIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGU6IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgIlBhcmE6IgorCisjOiBnaXRrOjkxODcKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJJbnZlcnRlciIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiQXJxdWl2byBkZSBzYcOtZGE6IgorCisjOiBnaXRrOjkxOTUKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAiR2VyYXIiCisKKyM6IGdpdGs6OTIzMworbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRXJybyBhbyBjcmlhciBwYXRjaDoiCisKKyM6IGdpdGs6OTI1NiBnaXRrOjkzNzMgZ2l0azo5NDMwCittc2dpZCAiSUQ6IgorbXNnc3RyICJJRDoiCisKKyM6IGdpdGs6OTI2NQorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiTm9tZSBkYSBldGlxdWV0YToiCisKKyM6IGdpdGs6OTI2OAorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJBIGRlc2NyacOnw6NvIGRhIGV0aXF1ZXRhIMOpIG9wY2lvbmFsIgorCisjOiBnaXRrOjkyNzAKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIkRlc2NyacOnw6NvIGRhIGV0aXF1ZXRhIgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcmlhciIKKworIzogZ2l0azo5MjkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJOb21lIGRhIGV0aXF1ZXRhIG7Do28gaW5kaWNhZG8iCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkV0aXF1ZXRhIFwiJXNcIiBqw6EgZXhpc3RlIgorCisjOiBnaXRrOjkzMDYKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICJFcnJvIGFvIGNyaWFyIGV0aXF1ZXRhOiIKKworIzogZ2l0azo5MzgyCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkNvbWFuZG86IgorCisjOiBnaXRrOjkzOTAKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiRXhwb3J0YXIiCisKKyM6IGdpdGs6OTQwOAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAiRXJybyBhbyBleHBvcnRhciByZXZpc8OjbyIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbWU6IgorCisjOiBnaXRrOjk0NTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJJbmRpcXVlIHVtIG5vbWUgcGFyYSBvIG5vdm8gcmFtbyIKKworIzogZ2l0azo5NDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIk8gcmFtbyBcIiVzXCIgasOhIGV4aXN0ZS4gU29icmVzY3JldmVyPyIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIlJldmlzw6NvICVzIGrDoSBpbmNsdXNhIG5vIHJhbW8gJXMgLS0gdm9jw6ogcmVhbG1lbnRlIGRlc2VqYSByZWFwbGljw6EtbGE/IgorCisjOiBnaXRrOjk1MzUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2tpbmciCisKKyM6IGdpdGs6OTU0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJPIGNoZXJyeS1waWNrIGZhbGhvdSBwb3JxdWUgbyBhcnF1aXZvIFwiJXNcIiBwb3NzdWkgbXVkYW7Dp2FzIGxvY2Fpcy5cbiIKKyJTYWx2ZSBhIHVtYSByZXZpc8OjbywgcmVkZWZpbmEgb3UgYXJtYXplbmUgKHN0YXNoKSBzdWFzIG11ZGFuw6dhcyBlIHRlbnRlICIKKyJub3ZhbWVudGUuIgorCisjOiBnaXRrOjk1NTAKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJPIGNoZXJyeS1waWNrIGZhbGhvdSBwb3JxdWUgaG91dmUgdW0gY29uZmxpdG8gbmEgbWVzY2xhZ2VtLlxuIgorIkV4ZWN1dGFyIG8gJ2dpdCBjaXRvb2wnIHBhcmEgcmVzb2x2w6otbG8/IgorCisjOiBnaXRrOjk1NjYgZ2l0azo5NjI0Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIk5lbmh1bWEgcmV2aXPDo28gZm9pIHNhbHZhIgorCisjOiBnaXRrOjk1OTMKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIlJldmlzw6NvICVzIGrDoSBpbmNsdXNhIG5vIHJhbW8gJXMgLS0gdm9jw6ogcmVhbG1lbnRlIGRlc2VqYSByZWFwbGljw6EtbGE/IgorCisjOiBnaXRrOjk1OTgKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICJSZWRlZmluaW5kbyIKKworIzogZ2l0azo5NjA2CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiTyBjaGVycnktcGljayBmYWxob3UgcG9ycXVlIG8gYXJxdWl2byBcIiVzXCIgcG9zc3VpIG11ZGFuw6dhcyBsb2NhaXMuXG4iCisiU2FsdmUgYSB1bWEgcmV2aXPDo28sIHJlZGVmaW5hIG91IGFybWF6ZW5lIChzdGFzaCkgc3VhcyBtdWRhbsOnYXMgZSB0ZW50ZSAiCisibm92YW1lbnRlLiIKKworIzogZ2l0azo5NjEwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiTyBjaGVycnktcGljayBmYWxob3UgcG9ycXVlIGhvdXZlIHVtIGNvbmZsaXRvIG5hIG1lc2NsYWdlbS5cbiIKKyJFeGVjdXRhciBvICdnaXQgY2l0b29sJyBwYXJhIHJlc29sdsOqLWxvPyIKKworIzogZ2l0azo5NjUzCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQ29uZmlybWFyIHJlZGVmaW5pw6fDo28iCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlZvY8OqIHJlYWxtZW50ZSBkZXNlamEgcmVkZWZpbmlyIG8gcmFtbyAlcyBwYXJhICVzPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlRpcG8gZGUgcmVkZWZpbmnDp8OjbyIKKworIzogZ2l0azo5NjYwCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlNvZnQ6IGRlaXhhIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBlIG8gw61uZGljZSBpbnRvY2Fkb3MiCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiTWlzdG86IERlaXhhIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBpbnRvY2FkYSwgcmVkZWZpbmUgbyDDrW5kaWNlIgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkhhcmQ6IFJlZGVmaW5lIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBlIG8gw61uZGljZVxuIgorIihkZXNjYXJ0YSBUT0RBUyBhcyBtdWRhbsOnYXMgbG9jYWlzKSIKKworIzogZ2l0azo5NjgzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJSZWRlZmluaW5kbyIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJBYnJpbmRvIgorCisjOiBnaXRrOjk3OTYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICJJbXBvc3PDrXZlbCBleGNsdWlyIG8gcmFtbyBhdHVhbG1lbnRlIGFiZXJ0byIKKworIzogZ2l0azo5ODAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJBcyByZXZpc8O1ZXMgZG8gcmFtbyBcIiVzXCIgbsOjbyBleGlzdGVtIGVtIG5lbmh1bSBvdXRybyByYW1vLlxuIgorIlZvY8OqIHJlYWxtZW50ZSBkZXNlamEgZXhjbHVpciByYW1vIFwiJXNcIj8iCisKKyM6IGdpdGs6OTgzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiUmVmZXLDqm5jaWFzOiAlcyIKKworIzogZ2l0azo5ODUwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0cm8iCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJFcnJvIGFvIGxlciBhIHRvcG9sb2dpYSBkYXMgcmV2aXPDtWVzOyBhcyBpbmZvcm1hw6fDtWVzIGRvcyByYW1vcyBlIGV0aXF1ZXRhcyAiCisiYW50ZWNlc3NvcmFzL3N1Y2Vzc29yYXMgZXN0YXLDo28gaW5jb21wbGV0YXMiCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aXF1ZXRhIgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIlNlbGVjaW9uYXIgZm9udGVzIGRvIEdpdGsiCisKKyM6IGdpdGs6MTEyMjcKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjMwCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM0OAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3DDp8O1ZXMgZGEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJMYXJndXJhIG3DoXhpbWEgZG8gZ3JhZm8gKGxpbmhhcykiCisKKyM6IGdpdGs6MTEzNTUKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJMYXJndXJhIG3DoXhpbWEgZG8gZ3JhZm8gKCUgZG8gcGFpbmVsKSIKKworIzogZ2l0azoxMTM1OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiRXhpYmlyIG11ZGFuw6dhcyBsb2NhaXMiCisKKyM6IGdpdGs6MTEzNjEKKyMsIGZ1enp5Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU2VsZWNpb25hciBvIFNIQTEgYXV0b21hdGljYW1lbnRlIgorCisjOiBnaXRrOjExMzY1Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiT2N1bHRhciByZWZlcsOqbmNpYXMgcmVtb3RhcyIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkZSBleGliacOnw6NvIGRhcyBhbHRlcmHDp8O1ZXMiCisKKyM6IGdpdGs6MTEzNzEKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiRXNwYcOnb3MgcG9yIHRhYnVsYcOnw6NvIgorCisjOiBnaXRrOjExMzc0CisjLCBmdXp6eQorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIkV4aWJpciBldGlxdWV0YXMgcHLDs3hpbWFzIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJMaW1pdGFyIGRpZmVyZW7Dp2FzIGFvcyBjYW1pbmhvcyBsaXN0YWRvcyIKKworIzogZ2l0azoxMTM4MworbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJVc2FyIGNvZGlmaWNhw6fDtWVzIGRpc3RpbnRhcyBwb3IgYXJxdWl2byIKKworIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJGZXJyYW1lbnRhICdkaWZmJyBleHRlcm5hIgorCisjOiBnaXRrOjExMzkwCittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICJTZWxlY2lvbmFyLi4uIgorCisjOiBnaXRrOjExMzk1Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBnZXJhaXMiCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIlVzYXIgdGVtYXMgcGFyYSBhcyBqYW5lbGFzIgorCisjOiBnaXRrOjExNDAwCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKGV4aWdlIHJlaW5pY2lhbGl6YcOnw6NvKSIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIoYXR1YWxtZW50ZSBpbmRpc3BvbsOtdmVsKSIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJDb3JlczogY2xpcXVlIHBhcmEgZXNjb2xoZXIiCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkludGVyZmFjZSIKKworIzogZ2l0azoxMTQxNworbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiaW50ZXJmYWNlIgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiU2VndW5kbyBwbGFubyIKKworIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAic2VndW5kbyBwbGFubyIKKworIzogZ2l0azoxMTQyNAorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIlByaW1laXJvIHBsYW5vIgorCisjOiBnaXRrOjExNDI1Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAicHJpbWVpcm8gcGxhbm8iCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IGxpbmhhcyBleGNsdcOtZGFzIgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImxpbmhhcyBleGNsdcOtZGFzIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBsaW5oYXMgYWRpY2lvbmFkYXMiCisKKyM6IGdpdGs6MTE0MzQKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAibGluaGFzIGFkaWNpb25hZGFzIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IGNhYmXDp2FsaG8gZG8gYmxvY28iCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJjYWJlw6dhbGhvIGRvIGJsb2NvIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIjLCuiBwbGFubyBkYSBsaW5oYSBtYXJjYWRhIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAic2VndW5kbyBwbGFubyBkYSBsaW5oYSBtYXJjYWRhIgorCisjOiBnaXRrOjExNDUwCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICIywrogcGxhbm8gZGEgc2VsZcOnw6NvIgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiRm9udGVzOiBjbGlxdWUgcGFyYSBlc2NvbGhlciIKKworIzogZ2l0azoxMTQ2MQorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiRm9udGUgcHJpbmNpcGFsIgorCisjOiBnaXRrOjExNDYyCittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIkZvbnRlIGRhIGxpc3RhIGRlIG11ZGFuw6dhcyIKKworIzogZ2l0azoxMTQ2MworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIkZvbnRlIGRhIGludGVyZmFjZSIKKworIzogZ2l0azoxMTQ4NQorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcsOqbmNpYXMgZG8gR2l0ayIKKworIzogZ2l0azoxMTQ5NAorIywgZnV6enkKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJHZXJhciIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNDk2Cittc2dpZCAiRm9udHMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTU0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IHNlbGVjaW9uYXIgY29yIHBhcmEgJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKworIzogZ2l0azoxMjI2OQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIk7Do28gaMOhIG5lbmh1bSByZXBvc2l0w7NyaW8gZ2l0IGFxdWkuIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICIiCisiTyBhcmd1bWVudG8gXCIlc1wiIMOpIGFtYsOtZ3VvIChlc3BlY2lmaWNhIHRhbnRvIHVtYSByZXZpc8OjbyBlIHVtIG5vbWUgZGUgIgorImFycXVpdm8pIgorCisjOiBnaXRrOjEyMzI4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiQXJndW1lbnRvcyBpbmNvcnJldG9zIHBhcmEgbyBnaXRrOiIKKworI34gbXNnaWQgIm1jIgorI34gbXNnc3RyICJtYyIKKworI34gbXNnaWQgIm5leHQiCisjfiBtc2dzdHIgIlByw7N4aW1vIgorCisjfiBtc2dpZCAicHJldiIKKyN+IG1zZ3N0ciAiQW50ZXJpb3IiCisKKyN+IG1zZ2lkICJDRGF0ZSIKKyN+IG1zZ3N0ciAiRGF0YVIiCisKKyN+IG1zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorI34gbXNnc3RyICJJbXBvc3PDrXZlbCBlbmNvbnRyYXIgbyBkaXJldMOzcmlvIGdpdCBcIiVzXCIuIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vcHRfcHQucG8gYi9naXRrLWdpdC9wby9wdF9wdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjgwZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vcHRfcHQucG8KQEAgLTAsMCArMSwxMzc2IEBACisjIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb25zIGZvciBnaXRrIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAxNiBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBWYXNjbyBBbG1laWRhIDx2YXNjb21hbG1laWRhQHNhcG8ucHQ+LCAyMDE2LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNi0wNC0xNSAxNjo1MiswMDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wNS0wNiAxNTozNSswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBWYXNjbyBBbG1laWRhIDx2YXNjb21hbG1laWRhQHNhcG8ucHQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUG9ydHVndWVzZVxuIgorIkxhbmd1YWdlOiBwdFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBWaXJ0YWFsIDAuNy4xXG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgbGlzdGEgZGUgZmljaGVpcm9zIG7Do28gaW50ZWdyYWRvczoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM5OQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICJDb2xvcmlyIHBhbGF2cmFzIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzOTkgZ2l0azo4MjM5IGdpdGs6ODI3MgorbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAiTWFyY2FyIHBhbGF2cmFzIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRXJybyBhbyBhbmFsaXNhciByZXZpc8O1ZXM6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkVycm8gYW8gZXhlY3V0YXIgbyBjb21hbmRvIGRlIC0tYXJnc2NtZDoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiTmVuaHVtIGZpY2hlaXJvIHNlbGVjaW9uYWRvOiAtLW1lcmdlIGVzcGVjaWZpY2FkbyBtYXMgbsOjbyBow6EgZmljaGVpcm9zIHBvciAiCisiaW50ZWdyYXIuIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTmVuaHVtIGZpY2hlaXJvIHNlbGVjaW9uYWRvOiAtLW1lcmdlIGVzcGVjaWZpY2FkbyBtYXMgbsOjbyBow6EgZmljaGVpcm9zIHBvciAiCisiaW50ZWdyYXIgYW8gbsOtdmVsIGRlIGZpY2hlaXJvLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkVycm8gYW8gZXhlY3V0YXIgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiQSBsZXIiCisKKyM6IGdpdGs6NDk2IGdpdGs6NDU0NAorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiQSBsZXIgY29tbWl0cy4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDU0NworbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIk5lbmh1bSBjb21taXQgc2VsZWNpb25hZG8iCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNjQgZ2l0azoxMjQ2OQorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAiTGluaGEgZGUgY29tYW5kb3MiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgYW5hbGlzYXIgYSBzYcOtZGEgZGUgZ2l0IGxvZzoiCisKKyM6IGdpdGs6MTc0MAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIk7Do28gaMOhIGluZm9ybWHDp8OjbyBkaXNwb27DrXZlbCBzb2JyZSBvIGNvbW1pdCIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMzQgZ2l0azo5NzAyIGdpdGs6MTEyNzQgZ2l0azoxMTU1NAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMzNiBnaXRrOjkyMTUgZ2l0azo5Mjk0IGdpdGs6OTQyNCBnaXRrOjk0NzMgZ2l0azo5NzA0CisjOiBnaXRrOjExMjc1IGdpdGs6MTE1NTUKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkNhbmNlbGFyIgorCisjOiBnaXRrOjIwODMKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICJBdCZ1YWxpemFyIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICImUmVjYXJyZWdhciIKKworIzogZ2l0azoyMDg1Cittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICJSZWxlciByZSZmZXLDqm5jaWFzIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICImTGlzdGFyIHJlZmVyw6puY2lhcyIKKworIzogZ2l0azoyMDg4Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIkluaWNpYXIgZ2l0ICZndWkiCisKKyM6IGdpdGs6MjA5MAorbXNnaWQgIiZRdWl0IgorbXNnc3RyICImU2FpciIKKworIzogZ2l0azoyMDgyCittc2dpZCAiJkZpbGUiCittc2dzdHIgIiZGaWNoZWlybyIKKworIzogZ2l0azoyMDk0Cittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICImUHJlZmVyw6puY2lhcyIKKworIzogZ2l0azoyMDkzCittc2dpZCAiJkVkaXQiCittc2dzdHIgIiZFZGl0YXIiCisKKyM6IGdpdGs6MjA5OAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiJk5vdmEgdmlzdGEuLi4iCisKKyM6IGdpdGs6MjA5OQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIiZFZGl0YXIgdmlzdGEuLi4iCisKKyM6IGdpdGs6MjEwMAorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAiRWxpbWluYSZyIHZpc3RhIgorCisjOiBnaXRrOjIxMDIKK21zZ2lkICImQWxsIGZpbGVzIgorbXNnc3RyICImVG9kb3Mgb3MgZmljaGVpcm9zIgorCisjOiBnaXRrOjIwOTcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiJlZlciIKKworIzogZ2l0azoyMTA3IGdpdGs6MjExNworbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICImU29icmUgZ2l0ayIKKworIzogZ2l0azoyMTA4IGdpdGs6MjEyMgorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIiZBdGFsaG9zIgorCisjOiBnaXRrOjIxMDYgZ2l0azoyMTIxCittc2dpZCAiJkhlbHAiCittc2dzdHIgIiZBanVkYSIKKworIzogZ2l0azoyMTk5IGdpdGs6ODY3MQorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJJRCBTSEExOiIKKworIzogZ2l0azoyMjQzCittc2dpZCAiUm93IgorbXNnc3RyICJMaW5oYSIKKworIzogZ2l0azoyMjgxCittc2dpZCAiRmluZCIKK21zZ3N0ciAiUHJvY3VyYXIiCisKKyM6IGdpdGs6MjMwOQorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDcwNiBnaXRrOjQ3MjkgZ2l0azo0NzUzIGdpdGs6Njc3NCBnaXRrOjY4NDYKKyM6IGdpdGs6NjkzMQorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJjb250ZW5kbzoiCisKKyM6IGdpdGs6MjMxNiBnaXRrOjM1NDUgZ2l0azozNTUwIGdpdGs6NDc4MgorbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiYWx0ZXJhIG9zIGNhbWluaG9zOiIKKworIzogZ2l0azoyMzE3IGdpdGs6NDc5NgorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICJhZGljaW9uYS9yZW1vdmUgYSBjYWRlaWE6IgorCisjOiBnaXRrOjIzMTggZ2l0azo0Nzk4Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICJhbHRlcmEgbGluaGFzIGNvbToiCisKKyM6IGdpdGs6MjMyNyBnaXRrOjIzMjkgZ2l0azo0Nzg1Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YXRvIgorCisjOiBnaXRrOjIzMjkgZ2l0azo0ODczIGdpdGs6Njc0MgorbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnbk1hacO6c2N1bGFzIgorCisjOiBnaXRrOjIzMjkgZ2l0azo0NzU1IGdpdGs6NDg3MSBnaXRrOjY3MzgKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIkV4cHIuIHJlZ3VsYXIiCisKKyM6IGdpdGs6MjMzMSBnaXRrOjIzMzIgZ2l0azo0ODkzIGdpdGs6NDkyMyBnaXRrOjQ5MzAgZ2l0azo2ODY3IGdpdGs6NjkzNQorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIlRvZG9zIG9zIGNhbXBvcyIKKworIzogZ2l0azoyMzMyIGdpdGs6NDg5MCBnaXRrOjQ5MjMgZ2l0azo2ODA1Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIkNhYmXDp2FsaG8iCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4OTAgZ2l0azo2ODA1IGdpdGs6NjkzNSBnaXRrOjc0MDgKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiQ29tZW50w6FyaW9zIgorCisjOiBnaXRrOjIzMzMgZ2l0azo0ODkwIGdpdGs6NDg5NSBnaXRrOjQ5MzAgZ2l0azo2ODA1IGdpdGs6NzM0MyBnaXRrOjg4NDkKKyM6IGdpdGs6ODg2NAorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4OTAgZ2l0azo2ODA1IGdpdGs6NzM0NQorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiQ29tbWl0dGVyIgorCisjOiBnaXRrOjIzNjcKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIlBlc3F1aXNhciIKKworIzogZ2l0azoyMzc1Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAiRGlmZiIKKworIzogZ2l0azoyMzc3Cittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIlZlcnPDo28gYW50aWdhIgorCisjOiBnaXRrOjIzNzkKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc8OjbyBub3ZhIgorCisjOiBnaXRrOjIzODIKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICJMaW5oYXMgZGUgY29udGV4dG8iCisKKyM6IGdpdGs6MjM5MgorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yYXIgZXNwYcOnb3MiCisKKyM6IGdpdGs6MjM5NiBnaXRrOjIzOTggZ2l0azo3OTc4IGdpdGs6ODIyNQorbXNnaWQgIkxpbmUgZGlmZiIKK21zZ3N0ciAiRGlmZiBkZSBsaW5oYSIKKworIzogZ2l0azoyNDYzCittc2dpZCAiUGF0Y2giCittc2dzdHIgIlBhdGNoIgorCisjOiBnaXRrOjI0NjUKK21zZ2lkICJUcmVlIgorbXNnc3RyICLDgXJ2b3JlIgorCisjOiBnaXRrOjI2MzUgZ2l0azoyNjU2Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJEaWZmIGVzdGUgLT4gc2VsZcOnw6NvIgorCisjOiBnaXRrOjI2MzYgZ2l0azoyNjU3Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIHNlbGXDp8OjbyAtPiBlc3RlIgorCisjOiBnaXRrOjI2MzcgZ2l0azoyNjU4Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiR2VyYXIgcGF0Y2giCisKKyM6IGdpdGs6MjYzOCBnaXRrOjkyNzMKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJDcmlhciB0YWciCisKKyM6IGdpdGs6MjYzOQorbXNnaWQgIkNvcHkgY29tbWl0IHN1bW1hcnkiCittc2dzdHIgIkNvcGlhciBzdW3DoXJpbyBkbyBjb21taXQiCisKKyM6IGdpdGs6MjY0MCBnaXRrOjk0MDQKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiRXNjcmV2ZXIgY29tbWl0IG51bSBmaWNoZWlybyIKKworIzogZ2l0azoyNjQxIGdpdGs6OTQ2MQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcmlhciBub3ZvIHJhbW8iCisKKyM6IGdpdGs6MjY0MgorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJFZmV0dWFyIGNoZXJyeS1waWNrIGRlc3RlIGNvbW1pdCIKKworIzogZ2l0azoyNjQzCittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiUmVwb3IgcmFtbyBIRUFEIHBhcmEgYXF1aSIKKworIzogZ2l0azoyNjQ0Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTWFyY2FyIGVzdGUgY29tbWl0IgorCisjOiBnaXRrOjI2NDUKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVm9sdGFyIMOgIG1hcmNhIgorCisjOiBnaXRrOjI2NDYKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiRW5jb250cmFyIGRlc2NlbmRlc3RlIGRlc3RlIGUgZGEgbWFyY2EiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJDb21wYXJhciBjb20gbyBjb21taXQgbWFyY2FkbyIKKworIzogZ2l0azoyNjQ4IGdpdGs6MjY1OQorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJEaWZmIGVzdGUgLT4gY29tbWl0IG1hcmNhZG8iCisKKyM6IGdpdGs6MjY0OSBnaXRrOjI2NjAKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBjb21taXQgbWFyY2FkbyAtPiBlc3RlIgorCisjOiBnaXRrOjI2NTAKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgIlJldmVydGVyIGVzdGUgY29tbWl0IgorCisjOiBnaXRrOjI2NjYKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkV4dHJhaXIgZXN0ZSByYW1vIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlJlbW92ZXIgZXN0ZSByYW1vIgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICJDb3BpYXIgbm9tZSBkbyByYW1vIgorCisjOiBnaXRrOjI2NzUKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIlJlYWzDp2FyIGVzdGUgdGFtYsOpbSIKKworIzogZ2l0azoyNjc2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiUmVhbMOnYXIgYXBlbmFzIGVzdGUiCisKKyM6IGdpdGs6MjY3NworbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIkRpZmYgZXh0ZXJubyIKKworIzogZ2l0azoyNjc4Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQ3VscGFyIGNvbW1pdCBwYWkiCisKKyM6IGdpdGs6MjY3OQorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAiQ29waWFyIGNhbWluaG8iCisKKyM6IGdpdGs6MjY4NgorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiTW9zdHJhciBvcmlnZW0gZGVzdGUgZmljaGVpcm8iCisKKyM6IGdpdGs6MjY4NworbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRXhlY3V0YXIgZ2l0IGd1aSBibGFtZSBzb2JyZSBlc3RhIGxpbmhhIgorCisjOiBnaXRrOjMwMzEKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICJTb2JyZSBnaXRrIgorCisjOiBnaXRrOjMwMzMKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gdW0gdmlzdWFsaXphZG9yIGRlIGNvbW1pdHMgZG8gZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBlIHJlZGlzdHJpYnVhIHNvYiBvcyB0ZXJtb3MgZGEgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisKKyM6IGdpdGs6MzA0MSBnaXRrOjMxMDggZ2l0azo5ODkwCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkZlY2hhciIKKworIzogZ2l0azozMDYyCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkF0YWxob3MgZG8gZ2l0ayIKKworIzogZ2l0azozMDY1Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJBdGFsaG9zIGRvIGdpdGs6IgorCisjOiBnaXRrOjMwNjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdFNhaXIiCisKKyM6IGdpdGs6MzA2OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1XPlx0XHRGZWNoYXIgamFuZWxhIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHRNb3ZlciBwYXJhIG8gcHJpbWVpcm8gY29tbWl0IgorCisjOiBnaXRrOjMwNzAKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRNb3ZlciBwYXJhIG8gw7psdGltbyBjb21taXQiCisKKyM6IGdpdGs6MzA3MQorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPENpbWE+LCBwLCBrXHRNb3ZlciBwYXJhIG8gY29tbWl0IGFjaW1hIgorCisjOiBnaXRrOjMwNzIKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8QmFpeG8+LCBuLCBqXHRNb3ZlciBwYXJhIG8gY29tbWl0IGFiYWl4byIKKworIzogZ2l0azozMDczCittc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPEVzcXVlcmRhPiwgeiwgaFx0UmVjdWFyIG5vIGhpc3TDs3JpY28iCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8RGlyZWl0YT4sIHgsIGxcdEF2YW7Dp2FyIG5vIGhpc3TDs3JpY28iCisKKyM6IGdpdGs6MzA3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8JXMtbj5cdElyIHBhcmEgbyBuLcOpc2ltbyBwYWkgZG8gY29tbWl0IGF0dWFsIG5vIGhpc3TDs3JpY28iCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0TW92ZXIgYSBsaXN0YSBkZSBjb21taXRzIHVtYSBww6FnaW5hIHBhcmEgY2ltYSIKKworIzogZ2l0azozMDc3Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHRNb3ZlciBhIGxpc3RhIGRlIGNvbW1pdHMgdW1hIHDDoWdpbmEgcGFyYSBiYWl4byIKKworIzogZ2l0azozMDc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdERlc2xvY2FyIHBhcmEgbyB0b3BvIGRhIGxpc3RhIgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdERlc2xvY2FyIHBhcmEgbyBmaW0gZGEgbGlzdGEiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLUNpbWE+XHREZXNsb2NhciBhIGxpc3RhIGRlIGNvbW1pdHMgdW1hIGxpbmhhIHBhcmEgY2ltYSIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLUJhaXhvPlx0RGVzbG9jYXIgYSBsaXN0YSBkZSBjb21taXRzIHVtYSBsaW5oYSBwYXJhIGJhaXhvIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx0RGVzbG9jYXIgYSBsaXN0YSBkZSBjb21taXRzIHVtYSBww6FnaW5hIHBhcmEgY2ltYSIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdERlc2xvY2FyIGEgbGlzdGEgZGUgY29tbWl0cyB1bWEgcMOhZ2luYSBwYXJhIGJhaXhvIgorCisjOiBnaXRrOjMwODQKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1DaW1hPlx0UHJvY3VyYXIgcGFyYSB0csOhcyAocGFyYSBjaW1hLCBjb21taXRzIHBvc3RlcmlvcmVzKSIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1CYWl4bz5cdFByb2N1cmFyIHBhcmEgYSBmcmVudGUgKHBhcmEgYmFpeG8sIGNvbW1pdHMgYW50ZXJpb3JlcykiCisKKyM6IGdpdGs6MzA4NgorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx0RGVzbG9jYXIgdmlzdGEgZGlmZiB1bWEgcMOhZ2luYSBwYXJhIGNpbWEiCisKKyM6IGdpdGs6MzA4NworbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8UmV0cm9jZXNzbz5cdERlc2xvY2FyIHZpc3RhIGRpZmYgdW1hIHDDoWdpbmEgcGFyYSBjaW1hIgorCisjOiBnaXRrOjMwODgKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPEVzcGHDp28+XHREZXNsb2NhciB2aXN0YSBkaWZmIHVtYSBww6FnaW5hIHBhcmEgYmFpeG8iCisKKyM6IGdpdGs6MzA4OQorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHREZXNsb2NhciB2aXN0YSBkaWZmIDE4IGxpbmhhcyBwYXJhIGNpbWEiCisKKyM6IGdpdGs6MzA5MAorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdERlc2xvY2FyIHZpc3RhIGRpZmYgMTggbGluaGFzIHBhcmEgYmFpeG8iCisKKyM6IGdpdGs6MzA5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0UHJvY3VyYXIiCisKKyM6IGdpdGs6MzA5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRNb3ZlciBwYXJhIGEgb2NvcnLDqm5jaWEgc2VndWludGUiCisKKyM6IGdpdGs6MzA5MworbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHRNb3ZlciBwYXJhIGEgb2NvcnLDqm5jaWEgc2VndWludGUiCisKKyM6IGdpdGs6MzA5NAorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICJnXHRcdElyIHBhcmEgbyBjb21taXQiCisKKyM6IGdpdGs6MzA5NQorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0Rm9jYXIgYSBjYWl4YSBkZSBwZXNxdWlzYSIKKworIzogZ2l0azozMDk2Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdE1vdmVyIHBhcmEgYSBvY29ycsOqbmNpYSBhbnRlcmlvciIKKworIzogZ2l0azozMDk3Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHREZXNsb2NhciB2aXN0YSBkaWZmIHBhcmEgbyBmaWNoZWlybyBzZWd1aW50ZSIKKworIzogZ2l0azozMDk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0UHJvY3VyYXIgcGVsYSBvY29ycsOqbmNpYSBzZWd1aW50ZSBuYSB2aXN0YSBkaWZmIgorCisjOiBnaXRrOjMwOTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0UHJvY3VyYXIgcGVsYSBvY29ycsOqbmNpYSBhbnRlcmlvciBuYSB2aXN0YSBkaWZmIgorCisjOiBnaXRrOjMxMDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0QXVtZW50YXIgbyB0YW1hbmhvIGRhIGxldHJhIgorCisjOiBnaXRrOjMxMDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1haXM+XHRBdW1lbnRhciBvIHRhbWFuaG8gZGEgbGV0cmEiCisKKyM6IGdpdGs6MzEwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHREaW1pbnVpciBvIHRhbWFuaG8gZGEgbGV0cmEiCisKKyM6IGdpdGs6MzEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1lbm9zPlx0RGltaW51aXIgbyB0YW1hbmhvIGRhIGxldHJhIgorCisjOiBnaXRrOjMxMDQKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRBdHVhbGl6YXIiCisKKyM6IGdpdGs6MzU2OSBnaXRrOjM1NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJybyBhbyBjcmlhciBmaWNoZWlybyB0ZW1wb3LDoXJpbyAlczoiCisKKyM6IGdpdGs6MzU5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJFcnJvIGFvIG9idGVyIFwiJXNcIiBkZSAlczoiCisKKyM6IGdpdGs6MzY1NAorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAibyBjb21hbmRvIGZhbGhvdToiCisKKyM6IGdpdGs6MzgwMworbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJDb21taXQgaW5leGlzdGVudGUiCisKKyM6IGdpdGs6MzgxNworbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogbyBjb21hbmRvIGZhbGhvdToiCisKKyM6IGdpdGs6Mzg0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBsZXIgYSBjYWJlw6dhIGRlIGludGVncmHDp8OjbzogJXMiCisKKyM6IGdpdGs6Mzg1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJFcnJvIGFvIGxlciBvIMOtbmRpY2U6ICVzIgorCisjOiBnaXRrOjM4ODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgaW5pY2lhciBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4ODQgZ2l0azo2NzczCittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJBIHByb2N1cmFyIgorCisjOiBnaXRrOjM5MTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkVycm8gYW8gZXhlY3V0YXIgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozOTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiRXNzYSBsaW5oYSBwcm92w6ltIGRvIGNvbW1pdCAlcywgcXVlIG7Do28gZXN0w6EgbmVzdGEgdmlzdGEiCisKKyM6IGdpdGs6Mzk1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIlZpc3VhbGl6YWRvciBkaWZmIGV4dGVybm8gZmFsaG91OiIKKworIzogZ2l0azo0MDYyCittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICJUb2RvcyBvcyBmaWNoZWlyb3MiCisKKyM6IGdpdGs6NDA4NgorbXNnaWQgIlZpZXciCittc2dzdHIgIlZpc3RhIgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pw6fDo28gZGUgdmlzdGFzIGRvIGdpdGsiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiUmVjb3JkYXIgZXN0YSB2aXN0YSIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiUmVmZXLDqm5jaWFzIChsaXN0YSBzZXBhcmFkYSBwb3IgZXNwYcOnbyk6IgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJSYW1vcyBlIHRhZ3M6IgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiVG9kYXMgYXMgcmVmZXLDqm5jaWFzIgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiVG9kb3Mgb3MgcmFtb3MgKGxvY2FpcykiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJUb2RhcyBhcyB0YWdzIgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJUb2RvcyBvcyByYW1vcyByZW1vdG9zIGRlIG1vbml0b3JpemHDp8OjbyIKKworIzogZ2l0azo0MTAwCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiSW5mb3JtYcOnw6NvIFNvYnJlIG8gQ29tbWl0IChleHByZXNzw7VlcyByZWd1bGFyZXMpOiIKKworIzogZ2l0azo0MTAxCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3I6IgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJDb21taXR0ZXI6IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lbnNhZ2VtIGRlIENvbW1pdDoiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJDb3JyZXNwb25kZSBhIHRvZG9zIG9zIGNyaXTDqXJpb3MgZGEgSW5mb3JtYcOnw6NvIFNvYnJlIG8gQ29tbWl0IgorCisjOiBnaXRrOjQxMDUKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJOw6NvIGNvcnJlc3BvbmRlIGEgbmVuaHVtIGNyaXTDqXJpbyBkYSBJbmZvcm1hw6fDo28gU29icmUgbyBDb21taXQiCisKKyM6IGdpdGs6NDEwNgorbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJBbHRlcmHDp8O1ZXMgbm9zIEZpY2hlaXJvczoiCisKKyM6IGdpdGs6NDEwNworbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiQ2FkZWlhIEZpeGEiCisKKyM6IGdpdGs6NDEwOAorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiRXhwcmVzc8OjbyBSZWd1bGFyIgorCisjOiBnaXRrOjQxMDkKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiUHJvY3VyYXIgcGVsYSBjYWRlaWE6IgorCisjOiBnaXRrOjQxMTAKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRhcyBkZSBDb21taXQgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKKworIzogZ2l0azo0MTExCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEZXNkZToiCisKKyM6IGdpdGs6NDExMgorbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiQXTDqToiCisKKyM6IGdpdGs6NDExMworbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGFyIGUvb3UgaWdub3JhciB1bSBuw7ptZXJvIGRlIHJldmlzw7VlcyAoaW50ZWlybyBwb3NpdGl2byk6IgorCisjOiBnaXRrOjQxMTQKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIk7Dum1lcm8gYSBtb3N0cmFyOiIKKworIzogZ2l0azo0MTE1Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJOw7ptZXJvIGEgaWdub3JhcjoiCisKKyM6IGdpdGs6NDExNgorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIk9ww6fDtWVzIGRpdmVyc2FzOiIKKworIzogZ2l0azo0MTE3Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJPcmRlbmFyIGVzdHJpdGFtZW50ZSBwZWxhIGRhdGEiCisKKyM6IGdpdGs6NDExOAorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJNYXJjYXIgbGFkbyBkb3MgcmFtb3MiCisKKyM6IGdpdGs6NDExOQorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiUmVzdHJpbmdpciBhbyBwcmltZWlybyBwYWkiCisKKyM6IGdpdGs6NDEyMAorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJIaXN0w7NyaWNvIHNpbXBsZXMiCisKKyM6IGdpdGs6NDEyMQorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJBcmd1bWVudG9zIGFkaWNpb25haXMgYW8gZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDEyMgorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJJbnRyb2R1emEgZmljaGVpcm9zIGUgZGlyZXTDs3Jpb3MgcGFyYSBpbmNsdWlyLCB1bSBwb3IgbGluaGE6IgorCisjOiBnaXRrOjQxMjMKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tYW5kbyBwYXJhIGdlcmFyIG1haXMgY29tbWl0cyBwYXJhIGluY2x1aXI6IgorCisjOiBnaXRrOjQyNDcKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IGVkaXRhciB2aXN0YSIKKworIzogZ2l0azo0MjU1Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIGNyaXTDqXJpbyBwYXJhIHNlbGVjaW9uYXIgcmV2aXPDtWVzIgorCisjOiBnaXRrOjQyNjAKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5vbWUgZGEgVmlzdGEiCisKKyM6IGdpdGs6NDMzNQorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIkFwbGljYXIgKEY1KSIKKworIzogZ2l0azo0MzczCittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJFcnJvIG5vcyBhcmd1bWVudG9zIGRlIHNlbGXDp8OjbyBkZSBjb21taXRzOiIKKworIzogZ2l0azo0NDI4IGdpdGs6NDQ4MSBnaXRrOjQ5NDMgZ2l0azo0OTU3IGdpdGs6NjIyNyBnaXRrOjEyNDEwIGdpdGs6MTI0MTEKK21zZ2lkICJOb25lIgorbXNnc3RyICJOZW5odW0iCisKKyM6IGdpdGs6NTA0MCBnaXRrOjUwNDUKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEZXNjZW5kZW50ZSIKKworIzogZ2l0azo1MDQxCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIk7Do28gZGVzY2VuZGVudGUiCisKKyM6IGdpdGs6NTA0OCBnaXRrOjUwNTMKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQW50ZWNlc3NvciIKKworIzogZ2l0azo1MDQ5Cittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJOw6NvIGFudGVjZXNzb3IiCisKKyM6IGdpdGs6NTM0MworbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiQWx0ZXJhw6fDtWVzIGxvY2FpcyBwcmVwYXJhZGFzIG5vIMOtbmRpY2UgbWFzIG7Do28gc3VibWV0aWRhcyIKKworIzogZ2l0azo1Mzc5Cittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgIkFsdGVyYcOnw7VlcyBsb2NhaXMgbsOjbyBzdWJtZXRpZGFzLCBuw6NvIHByZXBhcmFkYXMgbm8gw61uZGljZSIKKworIzogZ2l0azo3MTUzCittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAiZSBtdWl0b3MgbWFpcyIKKworIzogZ2l0azo3MTU2Cittc2dpZCAibWFueSIKK21zZ3N0ciAibXVpdG9zIgorCisjOiBnaXRrOjczNDcKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiVGFnczoiCisKKyM6IGdpdGs6NzM2NCBnaXRrOjczNzAgZ2l0azo4ODQ0Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJQYWkiCisKKyM6IGdpdGs6NzM3NQorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJGaWxobyIKKworIzogZ2l0azo3Mzg0Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJSYW1vIgorCisjOiBnaXRrOjczODcKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJTdWNlZGUiCisKKyM6IGdpdGs6NzM5MAorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJQcmVjZWRlIgorCisjOiBnaXRrOjc5ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiRXJybyBhbyBvYnRlciBkaWZlcmVuw6dhczogJXMiCisKKyM6IGdpdGs6ODY2OQorbXNnaWQgIkdvdG86IgorbXNnc3RyICJJciBwYXJhOiIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIk8gaWQgU0hBMSBhYnJldmlhZG8gJXMgw6kgYW1iw61ndW8iCisKKyM6IGdpdGs6ODY5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiQSByZXZpc8OjbyAlcyBuw6NvIMOpIGNvbmhlY2lkYSIKKworIzogZ2l0azo4NzA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIk8gaWQgU0hBMSAlcyBuw6NvIMOpIGNvbmhlY2lkbyIKKworIzogZ2l0azo4NzA5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIkEgcmV2aXPDo28gJXMgbsOjbyBzZSBlbmNvbnRyYSBuYSB2aXN0YSBhdHVhbCIKKworIzogZ2l0azo4ODUxIGdpdGs6ODg2NgorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGEiCisKKyM6IGdpdGs6ODg1NAorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJGaWxob3MiCisKKyM6IGdpdGs6ODkxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSZXBvciBvIHJhbW8gJXMgcGFyYSBhcXVpIgorCisjOiBnaXRrOjg5MTkKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiQ2FiZcOnYSBkZXN0YWNhZGE6IG7Do28gw6kgcG9zc8OtdmVsIHJlcG9yIgorCisjOiBnaXRrOjkwMjQgZ2l0azo5MDMwCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiQSBpZ25vcmFyIGNvbW1pdCBkZSBpbnRlZ3Jhw6fDo28gIgorCisjOiBnaXRrOjkwMzkgZ2l0azo5MDQ0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJFcnJvIGFvIG9idGVyIElEIGRlIHBhdGNoIGRlICIKKworIzogZ2l0azo5MDQwIGdpdGs6OTA0NQorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIGEgaW50ZXJyb21wZXJcbiIKKworIzogZ2l0azo5MDUwIGdpdGs6OTA1MyBnaXRrOjkwNjEgZ2l0azo5MDc1IGdpdGs6OTA4NAorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkNvbW1pdCAiCisKKyM6IGdpdGs6OTA1NAorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIMOpIG8gbWVzbW8gcGF0Y2ggcXVlXG4iCisiICAgICAgICIKKworIzogZ2l0azo5MDYyCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIGRpZmVyZSBkZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA2NAorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWZlcmVuw6dhIGRvcyBjb21taXRzOlxuIgorIlxuIgorCisjOiBnaXRrOjkwNzYgZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiB0ZW0gJXMgZmlsaG9zIC0gYSBpbnRlcnJvbXBlclxuIgorCisjOiBnaXRrOjkxMDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJybyBhbyBlc2NyZXZlciBjb21taXQgbm8gZmljaGVpcm86ICVzIgorCisjOiBnaXRrOjkxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJFcnJvIGFvIGNhbGN1bGFyIGFzIGRpZmVyZW7Dp2FzIGRvcyBjb21taXRzOiAlcyIKKworIzogZ2l0azo5MTU2Cittc2dpZCAiVG9wIgorbXNnc3RyICJUb3BvIgorCisjOiBnaXRrOjkxNTcKK21zZ2lkICJGcm9tIgorbXNnc3RyICJEZSIKKworIzogZ2l0azo5MTYyCittc2dpZCAiVG8iCittc2dzdHIgIlBhcmEiCisKKyM6IGdpdGs6OTE4NgorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHZXJhciBwYXRjaCIKKworIzogZ2l0azo5MTg4Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRlOiIKKworIzogZ2l0azo5MTk3Cittc2dpZCAiVG86IgorbXNnc3RyICJQYXJhOiIKKworIzogZ2l0azo5MjA2Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiUmV2ZXJ0ZXIiCisKKyM6IGdpdGs6OTIwOCBnaXRrOjk0MTgKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkZpY2hlaXJvIGRlIHNhw61kYToiCisKKyM6IGdpdGs6OTIxNAorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHZXJhciIKKworIzogZ2l0azo5MjUyCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJFcnJvIGFvIGNyaWFyIHBhdGNoOiIKKworIzogZ2l0azo5Mjc1IGdpdGs6OTQwNiBnaXRrOjk0NjMKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5Mjg0Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb21lIGRhIHRhZzoiCisKKyM6IGdpdGs6OTI4NworbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJBIG1lbnNhZ2VtIGRhIHRhZyDDqSBvcGNpb25hbCIKKworIzogZ2l0azo5Mjg5Cittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICJNZW5zYWdlbSBkYSB0YWc6IgorCisjOiBnaXRrOjkyOTMgZ2l0azo5NDcyCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcmlhciIKKworIzogZ2l0azo5MzExCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJOZW5odW0gbm9tZSBkZSB0YWcgZXNwZWNpZmljYWRvIgorCisjOiBnaXRrOjkzMTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJBIHRhZyBcIiVzXCIgasOhIGV4aXN0ZSIKKworIzogZ2l0azo5MzI1Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJybyBhbyBjcmlhciB0YWc6IgorCisjOiBnaXRrOjk0MTUKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiQ29tYW5kbzoiCisKKyM6IGdpdGs6OTQyMworbXNnaWQgIldyaXRlIgorbXNnc3RyICJFc2NyZXZlciIKKworIzogZ2l0azo5NDQxCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJvIGFvIGVzY3JldmVyIGNvbW1pdDoiCisKKyM6IGdpdGs6OTQ2OAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOb21lOiIKKworIzogZ2l0azo5NDkxCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiRXNwZWNpZmlxdWUgdW0gbm9tZSBwYXJhIG8gbm92byByYW1vIgorCisjOiBnaXRrOjk0OTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiTyByYW1vICclcycgasOhIGV4aXN0ZS4gU3Vic3RpdHXDrS1sbz8iCisKKyM6IGdpdGs6OTU2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICJPIGNvbW1pdCAlcyBqw6EgZXN0w6EgaW5jbHXDrWRvIG5vIHJhbW8gJXMgLS0gcmVhcGxpY8OhLWxvIG1lc21vIGFzc2ltPyIKKworIzogZ2l0azo5NTY4Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIkEgZWZldHVhciBjaGVycnktcGljayIKKworIzogZ2l0azo5NTc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkZhbGhhIGFvIGVmZXR1YXIgY2hlcnJ5LXBpY2sgZGV2aWRvIGEgYWx0ZXJhw6fDtWVzIGxvY2FpcyBubyBmaWNoZWlybyAnJXMnLlxuIgorIlN1Ym1ldGEsIGVtcGlsaGUgb3UgcmVwb25oYSBhcyBhbHRlcmHDp8O1ZXMgZSB0ZW50ZSBkZSBub3ZvLiIKKworIzogZ2l0azo5NTgzCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiRmFsaGEgYW8gZWZldHVhciBjaGVycnktcGljayBkZXZpZG8gYSBjb25mbGl0byBkZSBpbnRlZ3Jhw6fDo28uXG4iCisiRGVzZWphIGV4ZWN1dGFyIGdpdCBjaXRvb2wgcGFyYSByZXNvbHbDqi1sbz8iCisKKyM6IGdpdGs6OTU5OSBnaXRrOjk2NTcKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiTsOjbyBmb2kgc3VibWV0aWRhIG5lbmh1bSBhbHRlcmHDp8OjbyIKKworIzogZ2l0azo5NjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIk8gY29tbWl0ICVzIG7Do28gZXN0w6EgaW5jbHXDrWRvIG5vIHJhbW8gJXMgLS0gcmV2ZXJ0w6otbG8gbWVzbW8gYXNzaW0/IgorCisjOiBnaXRrOjk2MzEKK21zZ2lkICJSZXZlcnRpbmciCittc2dzdHIgIkEgcmV2ZXJ0ZXIiCisKKyM6IGdpdGs6OTYzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiRmFsaGEgYW8gcmV2ZXJ0ZXIgZGV2aWRvIGEgYWx0ZXJhw6fDtWVzIGxvY2FpcyBub3Mgc2VndWludGVzIGZpY2hlaXJvczolcyAiCisiU3VibWV0YSwgZW1waWxoZSBvdSByZXBvbmhhIGFzIGFsdGVyYcOnw7VlcyBlIHRlbnRlIGRlIG5vdm8uIgorCisjOiBnaXRrOjk2NDMKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkZhbGhhIGFvIHJldmVydGVyIGRldmlkbyBhIGNvbmZsaXRvIGRlIGludGVncmHDp8Ojby5cbiIKKyJEZXNlamEgZXhlY3V0YXIgZ2l0IGNpdG9vbCBwYXJhIHJlc29sdsOqLWxvPyIKKworIzogZ2l0azo5Njg2Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQ29uZmlybWFyIHJlcG9zacOnw6NvIgorCisjOiBnaXRrOjk2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICJSZXBvciBvIHJhbW8gJXMgcGFyYSAlcz8iCisKKyM6IGdpdGs6OTY5MAorbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJUaXBvIGRlIHJlcG9zacOnw6NvOiIKKworIzogZ2l0azo5NjkzCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlN1YXZlOiBEZWl4YXIgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGUgbyDDrW5kaWNlIGludGFjdG9zIgorCisjOiBnaXRrOjk2OTYKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIk1pc3RvOiBEZWl4YXIgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGludGFjdGEsIHJlcG9yIMOtbmRpY2UiCisKKyM6IGdpdGs6OTY5OQorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiRm9ydGU6IFJlcG9yIMOhcnZvcmUgZGUgdHJhYmFsaG8gZSDDrW5kaWNlXG4iCisiKGRlc2NhcnRhciBUT0RBUyBhcyBhbHRlcmHDp8O1ZXMgbG9jYWlzKSIKKworIzogZ2l0azo5NzE2Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJBIHJlcG9yIgorCisjOiBnaXRrOjk3NzYKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkEgZXh0cmFpciIKKworIzogZ2l0azo5ODI5Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZWxpbWluYXIgbyByYW1vIGF0dWFsIGV4dHJhw61kbyIKKworIzogZ2l0azo5ODM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJPcyBjb21taXRzIG5vIHJhbW8gJXMgbsOjbyBlc3TDo28gcHJlc2VudGVzIGVtIG1haXMgbmVuaHVtIHJhbW8uXG4iCisiRWxpbWluYXIgbyByYW1vICVzIG1lc21vIGFzc2ltPyIKKworIzogZ2l0azo5ODY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdzIGUgY2FiZcOnYXM6ICVzIgorCisjOiBnaXRrOjk4ODMKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRyYXIiCisKKyM6IGdpdGs6MTAxNzkKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJFcnJvIGFvIGxlciBpbmZvcm1hw6fDo28gZGUgdG9wb2xvZ2lhIGRvIGNvbW1pdDsgYSBpbmZvcm1hw6fDo28gZG8gcmFtbyBlIGRhIHRhZyAiCisicHJlY2VkZW50ZS9zZWd1aW50ZSBmaWNhcsOhIGluY29tcGxldGEuIgorCisjOiBnaXRrOjExMTU2Cittc2dpZCAiVGFnIgorbXNnc3RyICJUYWciCisKKyM6IGdpdGs6MTExNjAKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEyNDMKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiRXNjb2xoYSBkZSB0aXBvIGRlIGxldHJhIGRvIGdpdGsiCisKKyM6IGdpdGs6MTEyNjAKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjYzCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM4MQorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3DDp8O1ZXMgZGUgdmlzdWFsaXphw6fDo28gZGEgbGlzdGEgZGUgY29tbWl0cyIKKworIzogZ2l0azoxMTM4NAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiTGFyZ3VyYSBtw6F4aW1hIGRvIGdyw6FmaWNvIChsaW5oYXMpIgorCisjOiBnaXRrOjExMzg4CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTGFyZ3VyYSBtw6F4aW1hIGRvIGdyw6FmaWNvICglIGRvIHBhaW5lbCkiCisKKyM6IGdpdGs6MTEzOTEKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIk1vc3RyYXIgYWx0ZXJhw6fDtWVzIGxvY2FpcyIKKworIzogZ2l0azoxMTM5NAorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgIlNlbGVjaW9uYXIgYXV0b21hdGljYW1lbnRlIFNIQTEgKGxhcmd1cmEpIgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiT2N1bHRhciByZWZlcsOqbmNpYXMgcmVtb3RhcyIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkZSB2aXN1YWxpemHDp8OjbyBkZSBkaWZlcmVuw6dhcyIKKworIzogZ2l0azoxMTQwNAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJFc3Bhw6dhbWVudG8gZGEgdGFidWxhw6fDo28iCisKKyM6IGdpdGs6MTE0MDcKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICJNb3N0cmFyIHRhZ3MvY2FiZcOnYXMgcHLDs3hpbWFzIgorCisjOiBnaXRrOjExNDEwCittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiTsK6IG3DoXhpbW8gZGUgdGFncy9jYWJlw6dhcyBhIG1vc3RyYXIiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0YXIgZGlmZXJlbsOnYXMgYW9zIGNhbWluaG9zIGxpc3RhZG9zIgorCisjOiBnaXRrOjExNDE2Cittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIlN1cG9ydGFyIGNvZGlmaWNhw6fDo28gcG9yIGNhZGEgZmljaGVpcm8iCisKKyM6IGdpdGs6MTE0MjIgZ2l0azoxMTU2OQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiRmVycmFtZW50YSBkaWZmIGV4dGVybmEiCisKKyM6IGdpdGs6MTE0MjMKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIkVzY29saGVyLi4uIgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBnZXJhaXMiCisKKyM6IGdpdGs6MTE0MzEKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIlVzYXIgd2lkZ2V0cyBjb20gZXN0aWxvIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKGFsdGVyYcOnw6NvIGV4aWdlIHJlaW5pY2lhcikiCisKKyM6IGdpdGs6MTE0MzUKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKG7Do28gZGlzcG9uw612ZWwgZGUgbW9tZW50bykiCisKKyM6IGdpdGs6MTE0NDYKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ29yZXM6IHByZXNzaW9uZSBwYXJhIGVzY29saGVyIgorCisjOiBnaXRrOjExNDQ5Cittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICJJbnRlcmZhY2UiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImludGVyZmFjZSIKKworIzogZ2l0azoxMTQ1MworbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkZ1bmRvIgorCisjOiBnaXRrOjExNDU0IGdpdGs6MTE0ODQKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICJmdW5kbyIKKworIzogZ2l0azoxMTQ1NworbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIlByaW1laXJvIHBsYW5vIgorCisjOiBnaXRrOjExNDU4Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAicHJpbWVpcm8gcGxhbm8iCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IGxpbmhhcyBhbnRpZ2FzIgorCisjOiBnaXRrOjExNDYyCittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmYgbGluaGFzIGFudGlnYXMiCisKKyM6IGdpdGs6MTE0NjYKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IGxpbmhhcyBub3ZhcyIKKworIzogZ2l0azoxMTQ2NworbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJkaWZmIGxpbmhhcyBub3ZhcyIKKworIzogZ2l0azoxMTQ3MQorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBjYWJlw6dhbGhvIGRvIGV4Y2VydG8iCisKKyM6IGdpdGs6MTE0NzMKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIGNhYmXDp2FsaG8gZG8gZXhjZXJ0byIKKworIzogZ2l0azoxMTQ3NworbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJGdW5kbyBkYSBsaW5oYSBtYXJjYWRhIgorCisjOiBnaXRrOjExNDc5Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiZnVuZG8gZGEgbGluaGEgbWFyY2FkYSIKKworIzogZ2l0azoxMTQ4MworbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiU2VsZWNpb25hciBmdW5kbyIKKworIzogZ2l0azoxMTQ5MgorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIlRpcG8gZGUgbGV0cmE6IHByZXNzaW9uZSBwYXJhIGVzY29saGVyIgorCisjOiBnaXRrOjExNDk0Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJUaXBvIGRlIGxldHJhIHByaW5jaXBhbCIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJUaXBvIGRlIGxldHJhIGFvIG1vc3RyYXIgZGlmZXJlbsOnYXMiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUaXBvIGRlIGxldHJhIGRhIGludGVyZmFjZSBkZSB1dGlsaXphZG9yIgorCisjOiBnaXRrOjExNTE4Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyw6puY2lhcyBkbyBnaXRrIgorCisjOiBnaXRrOjExNTI3Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiR2VyYWwiCisKKyM6IGdpdGs6MTE1MjgKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIkNvcmVzIgorCisjOiBnaXRrOjExNTI5Cittc2dpZCAiRm9udHMiCittc2dzdHIgIlRpcG9zIGRlIGxldHJhIgorCisjOiBnaXRrOjExNTc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogZXNjb2xoZXIgY29yIGRlICVzIgorCisjOiBnaXRrOjEyMDkyCittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgZXhlY3V0YXIgbyBnaXRrIGNvbSBlc3RhIHZlcnPDo28gZG8gVGNsL1RrLlxuIgorIk8gZ2l0ayByZXF1ZXIgcGVsbyBtZW5vcyBUY2wvVGsgOC40LiIKKworIzogZ2l0azoxMjMwMgorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIk7Do28gZm9pIGVuY29udHJhZG8gbmVuaHVtIHJlcG9zaXTDs3JpbyBnaXQgYXF1aS4iCisKKyM6IGdpdGs6MTIzNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIkFyZ3VtZW50byAnJXMnIGFtYsOtZ3VvOiBwb2RlIHNlciB1bWEgcmV2aXPDo28gb3UgdW0gZmljaGVpcm8iCisKKyM6IGdpdGs6MTIzNjEKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJBcmd1bWVudG9zIGRvIGdpdGsgaW5jb3JyZXRvczoiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9ydS5wbyBiL2dpdGstZ2l0L3BvL3J1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDhjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9ydS5wbwpAQCAtMCwwICsxLDEzNzEgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBSdXNzaWFuLgorIworIyBUcmFuc2xhdG9yczoKKyMgMHhBWCA8a3VsZXNob3ZtYWlsQGdtYWlsLmNvbT4sIDIwMTQKKyMgQWxleCBSaWVzZW4gPHJhYS5sa21sQGdtYWlsLmNvbT4sIDIwMTUKKyMgRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuQG1haWwucnU+LCAyMDE1LTIwMTYKKyMgRG1pdHJ5IFBvdGFwb3YgPGRwb3RhcG92QGdtYWlsLmNvbT4sIDIwMDkKKyMgU2tpcCA8YnN2c2tpcEByYW1ibGVyLnJ1PiwgMjAxMQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0IFJ1c3NpYW4gTG9jYWxpemF0aW9uIFByb2plY3RcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMTItMTUgMDA6MTgrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMTItMTQgMjI6MjMrMDAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuQG1haWwucnU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUnVzc2lhbiAoaHR0cDovL3d3dy50cmFuc2lmZXguY29tL2RqbTAwbi9naXQtcG8tcnUvbGFuZ3VhZ2UvcnUvKVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIkxhbmd1YWdlOiBydVxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9NDsgcGx1cmFsPShuJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIG4lMTA8PTQgJiYgKG4lMTAwPDEyIHx8IG4lMTAwPjE0KSA/IDEgOiBuJTEwPT0wIHx8IChuJTEwPj01ICYmIG4lMTA8PTkpIHx8IChuJTEwMD49MTEgJiYgbiUxMDA8PTE0KT8gMiA6IDMpO1xuIgorCisjOiBnaXRrOjE0MAorbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0L/QvtC70YPRh9C40YLRjCDRgdC/0LjRgdC+0Log0YTQsNC50LvQvtCyINC90LXQt9Cw0LLQtdGA0YjRkdC90L3QvtC5INC+0L/QtdGA0LDRhtC40Lgg0YHQu9C40Y/QvdC40Y86IgorCisjOiBnaXRrOjIxMiBnaXRrOjI0MDMKK21zZ2lkICJDb2xvciB3b3JkcyIKK21zZ3N0ciAi0KbQstC10YLQvdGL0LUg0YHQu9C+0LLQsCIKKworIzogZ2l0azoyMTcgZ2l0azoyNDAzIGdpdGs6ODI0OSBnaXRrOjgyODIKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgItCf0L7QvNC10YfQtdC90YvQtSDRgdC70L7QstCwIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDRgNCw0LfQsdC+0YDQtSDRgNC10LTQsNC60YbQuNC4OiIKKworIzogZ2l0azozODAKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LrQvtC80LDQvdC00Ysg0LfQsNC00LDQvdC90L7QuSAtLWFyZ3NjbWQ6IgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAi0KTQsNC50LvRiyDQvdC1INCy0YvQsdGA0LDQvdGLOiDRg9C60LDQt9Cw0L0gLS1tZXJnZSwg0L3QviDQvdC1INCx0YvQu9C+INC90LDQudC00LXQvdC+INC90Lgg0L7QtNC90L7Qs9C+INGE0LDQudC70LAg0LPQtNC1INGN0YLQsCDQvtC/0LXRgNCw0YbQuNGPINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQt9Cw0LLQtdGA0YjQtdC90LAuIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICLQpNCw0LnQu9GLINC90LUg0LLRi9Cx0YDQsNC90Ys6INGD0LrQsNC30LDQvSAtLW1lcmdlLCDQvdC+INCyINGA0LDQvNC60LDRhSDRg9C60LDQt9Cw0L3QvdC+0LPQviDQvtCz0YDQsNC90LjRh9C10L3QuNGPINC90LAg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIg0L3QtdGCINC90Lgg0L7QtNC90L7Qs9C+INCz0LTQtSDRjdGC0LAg0L7Qv9C10YDQsNGG0LjRjyDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0LfQsNCy0LXRgNGI0LXQvdCwLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCBnaXQgbG9nOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICLQp9GC0LXQvdC40LUiCisKKyM6IGdpdGs6NDk2IGdpdGs6NDU0OQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAi0KfRgtC10L3QuNC1INC60L7QvNC80LjRgtC+0LIuLi4iCisKKyM6IGdpdGs6NDk5IGdpdGs6MTY0MSBnaXRrOjQ1NTIKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICLQndC40YfQtdCz0L4g0L3QtSDQstGL0LHRgNCw0L3QviIKKworIzogZ2l0azoxNDQ5IGdpdGs6NDA2OSBnaXRrOjEyNTgzCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICLQmtC+0LzQsNC90LTQvdCw0Y8g0YHRgtGA0L7QutCwIgorCisjOiBnaXRrOjE1MTUKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQvtCx0YDQsNCx0L7RgtC60Lgg0LLRi9Cy0L7QtNCwINC60L7QvNCw0L3QtNGLIGdpdCBsb2c6IgorCisjOiBnaXRrOjE3NDQKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICLQndC10YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LrQvtC80LzQuNGC0LUiCisKKyM6IGdpdGs6MTkwNyBnaXRrOjE5MzYgZ2l0azo0MzM5IGdpdGs6OTc4OSBnaXRrOjExMzg4IGdpdGs6MTE2NjgKK21zZ2lkICJPSyIKK21zZ3N0ciAiT2siCisKKyM6IGdpdGs6MTkzOCBnaXRrOjQzNDEgZ2l0azo5MjI1IGdpdGs6OTMwNCBnaXRrOjk0MzQgZ2l0azo5NTIwIGdpdGs6OTc5MQorIzogZ2l0azoxMTM4OSBnaXRrOjExNjY5Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLQntGC0LzQtdC90LAiCisKKyM6IGdpdGs6MjA4NworbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgItCe0LHQvdC+0LLQuNGC0YwiCisKKyM6IGdpdGs6MjA4OAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgItCf0LXRgNC10YfQuNGC0LDRgtGMIgorCisjOiBnaXRrOjIwODkKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgItCe0LHQvdC+0LLQuNGC0Ywg0YHQv9C40YHQvtC6INGB0YHRi9C70L7QuiIKKworIzogZ2l0azoyMDkwCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAi0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiIKKworIzogZ2l0azoyMDkyCittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCBnaXQgZ3VpIgorCisjOiBnaXRrOjIwOTQKK21zZ2lkICImUXVpdCIKK21zZ3N0ciAi0JfQsNCy0LXRgNGI0LjRgtGMIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAi0KTQsNC50LsiCisKKyM6IGdpdGs6MjA5OAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBnaXRrOjIwOTcKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwiCisKKyM6IGdpdGs6MjEwMgorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAi0J3QvtCy0L7QtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtS4uLiIKKworIzogZ2l0azoyMTAzCittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUuLi4iCisKKyM6IGdpdGs6MjEwNAorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisKKyM6IGdpdGs6MjEwNgorbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgItCS0YHQtSDRhNCw0LnQu9GLIgorCisjOiBnaXRrOjIxMDEKK21zZ2lkICImVmlldyIKK21zZ3N0ciAi0J/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisKKyM6IGdpdGs6MjExMSBnaXRrOjIxMjEKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAi0J4gZ2l0ayIKKworIzogZ2l0azoyMTEyIGdpdGs6MjEyNgorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgItCd0LDQt9C90LDRh9C10L3QuNGPINC60LvQsNCy0LjQsNGC0YPRgNGLIgorCisjOiBnaXRrOjIxMTAgZ2l0azoyMTI1Cittc2dpZCAiJkhlbHAiCittc2dzdHIgItCf0L7QtNGB0LrQsNC30LrQsCIKKworIzogZ2l0azoyMjAzIGdpdGs6ODY4MQorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKKworIzogZ2l0azoyMjQ3Cittc2dpZCAiUm93IgorbXNnc3RyICLQodGC0YDQvtC60LAiCisKKyM6IGdpdGs6MjI4NQorbXNnaWQgIkZpbmQiCittc2dzdHIgItCf0L7QuNGB0LoiCisKKyM6IGdpdGs6MjMxMworbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAi0LrQvtC80LzQuNGCIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE5IGdpdGs6NDcxMSBnaXRrOjQ3MzQgZ2l0azo0NzU4IGdpdGs6Njc3OSBnaXRrOjY4NTEKKyM6IGdpdGs6NjkzNgorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICLRgdC+0LTQtdGA0LbQsNGJ0LXQtToiCisKKyM6IGdpdGs6MjMyMCBnaXRrOjM1NTAgZ2l0azozNTU1IGdpdGs6NDc4NworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAi0LrQsNGB0LDRgtC10LvRjNC90L4g0YTQsNC50LvQvtCyOiIKKworIzogZ2l0azoyMzIxIGdpdGs6NDgwMQorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICLQtNC+0LHQsNCy0LjQsi/Rg9C00LDQu9C40LIg0YHRgtGA0L7QutGDOiIKKworIzogZ2l0azoyMzIyIGdpdGs6NDgwMworbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAi0LjQt9C80LXQvdGP0Y8g0YHQvtCy0L/QsNC00LDRjtGJ0LjQtSDRgdGC0YDQvtC60Lg6IgorCisjOiBnaXRrOjIzMzEgZ2l0azoyMzMzIGdpdGs6NDc5MAorbXNnaWQgIkV4YWN0IgorbXNnc3RyICLQotC+0YfQvdC+IgorCisjOiBnaXRrOjIzMzMgZ2l0azo0ODc4IGdpdGs6Njc0NworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQsdC+0LvRjNGI0LjQtS/QvNCw0LvQtdC90YzQutC40LUiCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ3NjAgZ2l0azo0ODc2IGdpdGs6Njc0MworbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAi0KDQtdCz0YPQu9GP0YDQvdGL0LUg0LLRi9GA0LDQttC10L3QuNGPIgorCisjOiBnaXRrOjIzMzUgZ2l0azoyMzM2IGdpdGs6NDg5OCBnaXRrOjQ5MjggZ2l0azo0OTM1IGdpdGs6Njg3MiBnaXRrOjY5NDAKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICLQktC+INCy0YHQtdGFINC/0L7Qu9GP0YUiCisKKyM6IGdpdGs6MjMzNiBnaXRrOjQ4OTUgZ2l0azo0OTI4IGdpdGs6NjgxMAorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICLQl9Cw0LPQvtC70L7QstC+0LoiCisKKyM6IGdpdGs6MjMzNyBnaXRrOjQ4OTUgZ2l0azo2ODEwIGdpdGs6Njk0MCBnaXRrOjc0MTMKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuCIKKworIzogZ2l0azoyMzM3IGdpdGs6NDg5NSBnaXRrOjQ5MDAgZ2l0azo0OTM1IGdpdGs6NjgxMCBnaXRrOjczNDggZ2l0azo4ODU5CisjOiBnaXRrOjg4NzQKK21zZ2lkICJBdXRob3IiCittc2dzdHIgItCQ0LLRgtC+0YAiCisKKyM6IGdpdGs6MjMzNyBnaXRrOjQ4OTUgZ2l0azo2ODEwIGdpdGs6NzM1MAorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAi0JrQvtC80LzQuNGC0LXRgCIKKworIzogZ2l0azoyMzcxCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICLQndCw0LnRgtC4IgorCisjOiBnaXRrOjIzNzkKK21zZ2lkICJEaWZmIgorbXNnc3RyICLQodGA0LDQstC90LjRgtGMIgorCisjOiBnaXRrOjIzODEKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAi0KHRgtCw0YDQsNGPINCy0LXRgNGB0LjRjyIKKworIzogZ2l0azoyMzgzCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgItCd0L7QstCw0Y8g0LLQtdGA0YHQuNGPIgorCisjOiBnaXRrOjIzODYKK21zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgorbXNnc3RyICLQodGC0YDQvtC6INC60L7QvdGC0LXQutGB0YLQsCIKKworIzogZ2l0azoyMzk2Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC/0YDQvtCx0LXQu9GLIgorCisjOiBnaXRrOjI0MDAgZ2l0azoyNDAyIGdpdGs6Nzk4MyBnaXRrOjgyMzUKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDRgdGC0YDQvtC6IgorCisjOiBnaXRrOjI0NjcKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAi0J/QsNGC0YciCisKKyM6IGdpdGs6MjQ2OQorbXNnaWQgIlRyZWUiCittc2dzdHIgItCk0LDQudC70YsiCisKKyM6IGdpdGs6MjYzOSBnaXRrOjI2NjAKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0Y3RgtC+0YIg0LrQvtC80LzQuNGCINGBINCy0YvQtNC10LvQtdC90L3Ri9C8IgorCisjOiBnaXRrOjI2NDAgZ2l0azoyNjYxCittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICLQodGA0LDQstC90LjRgtGMINCy0YvQtNC10LvQtdC90L3Ri9C5INGBINGN0YLQuNC8INC60L7QvNC80LjRgtC+0LwiCisKKyM6IGdpdGs6MjY0MSBnaXRrOjI2NjIKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQv9Cw0YLRhyIKKworIzogZ2l0azoyNjQyIGdpdGs6OTI4MworbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINC80LXRgtC60YMiCisKKyM6IGdpdGs6MjY0MworbXNnaWQgIkNvcHkgY29tbWl0IHN1bW1hcnkiCittc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INC60L7QvNC80LjRgtC1IgorCisjOiBnaXRrOjI2NDQgZ2l0azo5NDE0Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCDQutC+0LzQvNC40YIg0LIg0YTQsNC50LsiCisKKyM6IGdpdGs6MjY0NQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQstC10YLQutGDIgorCisjOiBnaXRrOjI2NDYKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0Ywg0Y3RgtC+0YIg0LrQvtC80LzQuNGCINCyINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgItCj0YHRgtCw0L3QvtCy0LjRgtGMIEhFQUQg0L3QsCDRjdGC0L7RgiDQutC+0LzQvNC40YIiCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgItCf0L7QvNC10YLQuNGC0Ywg0Y3RgtC+0YIg0LrQvtC80LzQuNGCIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAi0JLQtdGA0L3Rg9GC0YzRgdGPINC90LAg0L/QvtC80LXRgtC60YMiCisKKyM6IGdpdGs6MjY1MAorbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICLQndCw0LnRgtC4INC4INC/0L7QvNC10YLQuNGC0Ywg0L/QvtGC0L7QvNC60LAg0Y3RgtC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0azoyNjUxCittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0YEg0L/QvtC80LXRh9C10L3QvdGL0Lwg0LrQvtC80LzQuNGC0L7QvCIKKworIzogZ2l0azoyNjUyIGdpdGs6MjY2MworbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICLQodGA0LDQstC90LjRgtGMINCy0YvQtNC10LvQtdC90L3QvtC1INGBINC/0L7QvNC10YfQtdC90L3Ri9C8INC60L7QvNC80LjRgtC+0LwiCisKKyM6IGdpdGs6MjY1MyBnaXRrOjI2NjQKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAi0KHRgNCw0LLQvdC40YLRjCDQv9C+0LzQtdGH0LXQvdC90YvQuSDRgSDRjdGC0LjQvCDQutC+0LzQvNC40YLQvtC8IgorCisjOiBnaXRrOjI2NTQKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgItCe0LHRgNCw0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGdpdGs6MjY3MAorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0L3QsCDRjdGC0YMg0LLQtdGC0LrRgyIKKworIzogZ2l0azoyNjcxCittc2dpZCAiUmVuYW1lIHRoaXMgYnJhbmNoIgorbXNnc3RyICLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCDRjdGC0YMg0LLQtdGC0LrRgyIKKworIzogZ2l0azoyNjcyCittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDRjdGC0YMg0LLQtdGC0LrRgyIKKworIzogZ2l0azoyNjczCittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0Ywg0LjQvNGPINCy0LXRgtC60LgiCisKKyM6IGdpdGs6MjY4MAorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAi0J/QvtC00YHQstC10YLQuNGC0Ywg0Y3RgtC+0YIg0YLQvtC20LUiCisKKyM6IGdpdGs6MjY4MQorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgItCf0L7QtNGB0LLQtdGC0LjRgtGMINGC0L7Qu9GM0LrQviDRjdGC0L7RgiIKKworIzogZ2l0azoyNjgyCittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINGB0YDQsNCy0L3QtdC90LjRjyIKKworIzogZ2l0azoyNjgzCittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAi0JDQstGC0L7RgNGLINC40LfQvNC10L3QtdC90LjQuSDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0azoyNjg0Cittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0YLRjCDQv9GD0YLRjCIKKworIzogZ2l0azoyNjkxCittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YfQvdC40Log0Y3RgtC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBnaXRrOjI2OTIKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCBnaXQgZ3VpIGJsYW1lINC00LvRjyDRjdGC0L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGdpdGs6MzAzNgorbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgItCeIGdpdGsiCisKKyM6IGdpdGs6MzAzOAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiXG5HaXRrIOKAlCDQv9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0YHQvNC+0YLRgNCwINC40YHRgtC+0YDQuNC4INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQsiBnaXRcblxuwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG5cbtCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INC4INGA0LDRgdC/0YDQvtGB0YLRgNCw0L3QtdC90LjQtSDRgdC+0LPQu9Cw0YHQvdC+INGD0YHQu9C+0LLQuNGP0LwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisKKyM6IGdpdGs6MzA0NiBnaXRrOjMxMTMgZ2l0azoxMDAwNAorbXNnaWQgIkNsb3NlIgorbXNnc3RyICLQl9Cw0LrRgNGL0YLRjCIKKworIzogZ2l0azozMDY3Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgItCd0LDQt9C90LDRh9C10L3QuNGPINC60LvQsNCy0LjQsNGC0YPRgNGLINCyIEdpdGsiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAi0J3QsNC30L3QsNGH0LXQvdC40Y8g0LrQu9Cw0LLQuNCw0YLRg9GA0Ysg0LIgR2l0azoiCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx00JfQsNCy0LXRgNGI0LjRgtGMIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtVz5cdFx00JfQsNC60YDRi9GC0Ywg0L7QutC90L4iCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdNCf0LXRgNC10LnRgtC4INC6INC/0LXRgNCy0L7QvNGDINC60L7QvNC80LjRgtGDIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHTQn9C10YDQtdC50YLQuCDQuiDQv9C+0YHQu9C10LTQvdC10LzRgyDQutC+0LzQvNC40YLRgyIKKworIzogZ2l0azozMDc2Cittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXA+LCBwLCBrXHTQn9C10YDQtdC50YLQuCDQvdCwINC+0LTQuNC9INC60L7QvNC80LjRgiDQstCy0LXRgNGFIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8RG93bj4sIG4sIGpcdNCf0LXRgNC10LnRgtC4INC90LAg0L7QtNC40L0g0LrQvtC80LzQuNGCINCy0L3QuNC3IgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGhcdNCf0L7QutCw0LfQsNGC0Ywg0YDQsNC90LXQtSDQv9C+0YHQtdGJ0ZHQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdGs6MzA3OQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmlnaHQ+LCB4LCBsXHTQn9C+0LrQsNC30LDRgtGMINGB0LvQtdC00YPRjtGJ0LjQuSDQv9C+0YHQtdGJ0ZHQvdC90YvQuSDQutC+0LzQvNC40YIiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8JXMtbj5cdNCf0LXRgNC10LnRgtC4INC90LAgbiDRgNC+0LTQuNGC0LXQu9GPINC+0YIg0YLQtdC60YPRidC10LPQviDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0azozMDgxCittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHTQn9C10YDQtdC50YLQuCDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUg0LIg0YHQv9C40YHQutC1INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdGs6MzA4MgorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx00J/QtdGA0LXQudGC0Lgg0L3QsCDRgdGC0YDQsNC90LjRhtGDINC90LjQttC1INCyINGB0L/QuNGB0LrQtSDQutC+0LzQvNC40YLQvtCyIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ib21lPlx00J/QtdGA0LXQudGC0Lgg0L3QsCDQvdCw0YfQsNC70L4g0YHQv9C40YHQutCwINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx00J/QtdGA0LXQudGC0Lgg0L3QsCDQutC+0L3QtdGGINGB0L/QuNGB0LrQsCDQutC+0LzQvNC40YLQvtCyIgorCisjOiBnaXRrOjMwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdNCf0YDQvtCy0LXRgNC90YPRgtGMINGB0L/QuNGB0L7QuiDQutC+0LzQvNC40YLQvtCyINCy0LLQtdGA0YUiCisKKyM6IGdpdGs6MzA4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1Eb3duPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INC60L7QvNC80LjRgtC+0LIg0LLQvdC40LciCisKKyM6IGdpdGs6MzA4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHTQn9GA0L7QstC10YDQvdGD0YLRjCDRgdC/0LjRgdC+0Log0LrQvtC80LzQuNGC0L7QsiDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLQstC10YDRhSIKKworIzogZ2l0azozMDg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdNCf0YDQvtCy0LXRgNC90YPRgtGMINGB0L/QuNGB0L7QuiDQutC+0LzQvNC40YLQvtCyINC90LAg0YHRgtGA0LDQvdC40YbRgyDQstC90LjQtyIKKworIzogZ2l0azozMDg5Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHTQn9C+0LjRgdC6INCyINC+0LHRgNCw0YLQvdC+0Lwg0L/QvtGA0Y/QtNC60LUgKNCy0LLQtdGA0YUsINGB0YDQtdC00Lgg0L3QvtCy0YvRhSDQutC+0LzQvNC40YLQvtCyKSIKKworIzogZ2l0azozMDkwCittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1Eb3duPlx00J/QvtC40YHQuiAo0LLQvdC40LcsINGB0YDQtdC00Lgg0YHRgtCw0YDRi9GFINC60L7QvNC80LjRgtC+0LIpIgorCisjOiBnaXRrOjMwOTEKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCDRgdGC0YDQsNC90LjRhtGDINCy0YvRiNC1IgorCisjOiBnaXRrOjMwOTIKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCDRgdGC0YDQsNC90LjRhtGDINCy0YvRiNC1IgorCisjOiBnaXRrOjMwOTMKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPExlZXJ0YXN0ZT5cdFx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0L3QuNC20LUiCisKKyM6IGdpdGs6MzA5NAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC90LAgMTgg0YHRgtGA0L7QuiDQstCy0LXRgNGFIgorCisjOiBnaXRrOjMwOTUKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC90LAgMTgg0YHRgtGA0L7QuiDQstC90LjQtyIKKworIzogZ2l0azozMDk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHTQn9C+0LjRgdC6IgorCisjOiBnaXRrOjMwOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx00J/QtdGA0LXQudGC0Lgg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0L3QsNC50LTQtdC90L3QvtC80YMg0LrQvtC80LzQuNGC0YMiCisKKyM6IGdpdGs6MzA5OAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHTQn9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDQvdCw0LnQtNC10L3QvdC+0LzRgyDQutC+0LzQvNC40YLRgyIKKworIzogZ2l0azozMDk5Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx00J/QtdGA0LXQudGC0Lgg0L3QsCDQutC+0LzQvNC40YIiCisKKyM6IGdpdGs6MzEwMAorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/QvtC70Y4g0L/QvtC40YHQutCwIgorCisjOiBnaXRrOjMxMDEKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/RgNC10LTRi9C00YPRidC10LzRgyDQvdCw0LnQtNC10L3QvdC+0LzRgyDQutC+0LzQvNC40YLRgyIKKworIzogZ2l0azozMTAyCittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINGE0LDQudC70YMiCisKKyM6IGdpdGs6MzEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdNCf0YDQvtC00L7Qu9C20LjRgtGMINC/0L7QuNGB0Log0LIg0YHQv9C40YHQutC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azozMTA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdNCf0LXRgNC10LnRgtC4INC6INC/0YDQtdC00YvQtNGD0YnQtdC80YMg0L3QsNC50LTQtdC90L3QvtC80YMg0YLQtdC60YHRgtGDINCyINGB0L/QuNGB0LrQtSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MzEwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHTQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx00KPQstC10LvQuNGH0LjRgtGMINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdGs6MzEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHTQo9C80LXQvdGM0YjQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHTQo9C80LXQvdGM0YjQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMTA5Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx00J7QsdC90L7QstC40YLRjCIKKworIzogZ2l0azozNTc0IGdpdGs6MzU4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0YHQvtC30LTQsNC90LjRjyDQstGA0LXQvNC10L3QvdC+0LPQviDQutCw0YLQsNC70L7Qs9CwICVzOiIKKworIzogZ2l0azozNTk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8gwqslc8K7INC40LcgJXM6IgorCisjOiBnaXRrOjM2NTkKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQutC+0LzQsNC90LTRizoiCisKKyM6IGdpdGs6MzgwOAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICLQmtC+0LzQvNC40YIg0L3QtSDQvdCw0LnQtNC10L0iCisKKyM6IGdpdGs6MzgyMgorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTog0L7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC60L7QvNCw0L3QtNGLOiIKKworIzogZ2l0azozODUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGH0YLQtdC90LjRjyBNRVJHRV9IRUFEOiAlcyIKKworIzogZ2l0azozODYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDRh9GC0LXQvdC40Y8g0LjQvdC00LXQutGB0LA6ICVzIgorCisjOiBnaXRrOjM4ODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNC/0YPRgdC60LAgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozODg5IGdpdGs6Njc3OAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAi0J/QvtC40YHQuiIKKworIzogZ2l0azozOTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8gZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozOTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAi0K3RgtCwINGB0YLRgNC+0LrQsCDQv9GA0LjQvdCw0LTQu9C10LbQuNGCINC60L7QvNC80LjRgtGDICVzLCDQutC+0YLQvtGA0YvQuSDQvdC1INC/0L7QutCw0LfQsNC9INCyINGN0YLQvtC8INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC4IgorCisjOiBnaXRrOjM5NjMKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0L/RgNC+0LPRgNCw0LzQvNGLINGB0YDQsNCy0L3QtdC90LjRjzoiCisKKyM6IGdpdGs6NDA2NworbXNnaWQgIkFsbCBmaWxlcyIKK21zZ3N0ciAi0JLRgdC1INGE0LDQudC70YsiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIlZpZXciCittc2dzdHIgItCf0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiR2l0ayDQvtC/0YDQtdC00LXQu9C10L3QuNC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC5IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgItCX0LDQv9C+0LzQvdC40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAi0KHRgdGL0LvQutC4ICjRgNCw0LfQtNC10LvRkdC90L3Ri9C1INC/0YDQvtCx0LXQu9C+0LwpOiIKKworIzogZ2l0azo0MTAwCittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAi0JLQtdGC0LrQuCDQuCDQvNC10YLQutC4IgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAi0JLRgdC1INGB0YHRi9C70LrQuCIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgItCS0YHQtSAo0LvQvtC60LDQu9GM0L3Ri9C1KSDQstC10YLQutC4IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAi0JLRgdC1INC80LXRgtC60LgiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgItCS0YHQtSDQstC90LXRiNC90LjQtSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDQstC10YLQutC4IgorCisjOiBnaXRrOjQxMDUKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICLQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQutC+0LzQvNC40YLQtSAo0YDQtdCz0YPQu9GP0YDQvdGL0LUg0LLRi9GA0LDQttC10L3QuNGPKToiCisKKyM6IGdpdGs6NDEwNgorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgItCQ0LLRgtC+0YA6IgorCisjOiBnaXRrOjQxMDcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICLQmtC+0LzQvNC40YLQtdGAOiIKKworIzogZ2l0azo0MTA4Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LA6IgorCisjOiBnaXRrOjQxMDkKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAi0KHQvtCy0L/QsNC00LDQtdGCINGB0L4g0LLRgdC10LzQuCDRg9GB0LvQvtCy0LjRj9C80Lgg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LrQvtC80LzQuNGC0LUiCisKKyM6IGdpdGs6NDExMAorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgItCd0LUg0YHQvtCy0L/QsNC00LDQtdGCINGBINGD0YHQu9C+0LLQuNGP0LzQuCDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQutC+0LzQvNC40YLQtSIKKworIzogZ2l0azo0MTExCittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDRhNCw0LnQu9C+0LI6IgorCisjOiBnaXRrOjQxMTIKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgItCe0LHRi9GH0L3QsNGPINGB0YLRgNC+0LrQsCIKKworIzogZ2l0azo0MTEzCittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICLQoNC10LPRg9C70Y/RgNC90L7QtSDQstGL0YDQsNC20LXQvdC40LU6IgorCisjOiBnaXRrOjQxMTQKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAi0KHRgtGA0L7QutCwINC00LvRjyDQv9C+0LjRgdC60LA6IgorCisjOiBnaXRrOjQxMTUKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgItCU0LDRgtGLINC60L7QvNC80LjRgtCwICjCqzIg0L3QtdC00LXQu9C4INC90LDQt9Cw0LTCuywgwqsyMDA5LTAzLTE3IDE1OjI3OjM4wrssIMKrMTcg0LzQsNGA0YLQsCAyMDA5IDE1OjI3OjM4wrspOiIKKworIzogZ2l0azo0MTE2Cittc2dpZCAiU2luY2U6IgorbXNnc3RyICLQoSDQtNCw0YLRizoiCisKKyM6IGdpdGs6NDExNworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAi0J/QviDQtNCw0YLRgzoiCisKKyM6IGdpdGs6NDExOAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICLQntCz0YDQsNC90LjRh9C40YLRjCDQuC/QuNC70Lgg0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0LrQvtC70LjRh9C10YHRgtCy0L4g0YDQtdC00LDQutGG0LjQuSAo0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0YfQuNGB0LvQvik6IgorCisjOiBnaXRrOjQxMTkKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LrQvtC70LjRh9C10YHRgtCy0L46IgorCisjOiBnaXRrOjQxMjAKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgItCf0YDQvtC/0YPRgdGC0LjRgtGMINC60L7Qu9C40YfQtdGB0YLQstC+OiIKKworIzogZ2l0azo0MTIxCittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAi0KDQsNC30LvQuNGH0L3Ri9C1INC+0L/RhtC40Lg6IgorCisjOiBnaXRrOjQxMjIKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgItCh0YLRgNC+0LPQsNGPINGB0L7RgNGC0LjRgNC+0LLQutCwINC/0L4g0LTQsNGC0LUiCisKKyM6IGdpdGs6NDEyMworbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICLQntGC0LzQtdGC0LjRgtGMINGB0YLQvtGA0L7QvdGLINCy0LXRgtC+0LoiCisKKyM6IGdpdGs6NDEyNAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi0J7Qs9GA0LDQvdC40YfQuNGC0Ywg0L/QtdGA0LLRi9C8INC/0YDQtdC00LrQvtC8IgorCisjOiBnaXRrOjQxMjUKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAi0KPQv9GA0L7RidC10L3QvdCw0Y8g0LjRgdGC0L7RgNC40Y8iCisKKyM6IGdpdGs6NDEyNgorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICLQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9C1INCw0YDQs9GD0LzQtdC90YLRiyDQtNC70Y8gZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDEyNworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICLQpNCw0LnQu9GLINC4INC60LDRgtCw0LvQvtCz0Lgg0LTQu9GPINC+0LPRgNCw0L3QuNGH0LXQvdC40Y8g0LjRgdGC0L7RgNC40LgsINC/0L4g0L7QtNC90L7QvNGDINC90LAg0YHRgtGA0L7QutGDOiIKKworIzogZ2l0azo0MTI4Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgItCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0LrQvtC80LDQvdC00LAg0LTQu9GPINGB0L/QuNGB0LrQsCDQutC+0LzQvNC40YLQvtCyOiIKKworIzogZ2l0azo0MjUyCittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiDQuNC30LzQtdC90LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IgorCisjOiBnaXRrOjQyNjAKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAi4oCUINC60YDQuNGC0LXRgNC40Lkg0L/QvtC40YHQutCwINGA0LXQtNCw0LrRhtC40LkiCisKKyM6IGdpdGs6NDI2NQorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAi0JjQvNGPINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPIgorCisjOiBnaXRrOjQzNDAKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0YwgKEY1KSIKKworIzogZ2l0azo0Mzc4Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LIg0L/QsNGA0LDQvNC10YLRgNCw0YUg0LLRi9Cx0L7RgNCwINC60L7QvNC80LjRgtC+0LI6IgorCisjOiBnaXRrOjQ0MzMgZ2l0azo0NDg2IGdpdGs6NDk0OCBnaXRrOjQ5NjIgZ2l0azo2MjMyIGdpdGs6MTI1MjQgZ2l0azoxMjUyNQorbXNnaWQgIk5vbmUiCittc2dzdHIgItCd0Lgg0L7QtNC90L7Qs9C+IgorCisjOiBnaXRrOjUwNDUgZ2l0azo1MDUwCittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAi0J/QvtGA0L7QttC00ZHQvdC90L7QtSIKKworIzogZ2l0azo1MDQ2Cittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgItCd0LUg0L/QvtGA0L7QttC00ZHQvdC90L7QtSIKKworIzogZ2l0azo1MDUzIGdpdGs6NTA1OAorbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICLQn9GA0LXQtNC+0LoiCisKKyM6IGdpdGs6NTA1NAorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAi0J3QtSDQv9GA0LXQtNC+0LoiCisKKyM6IGdpdGs6NTM0OAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAi0J/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0azo1Mzg0Cittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgItCd0LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXRrOjcxNTgKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICLQuCDQvNC90L7Qs9C+0LUg0LTRgNGD0LPQvtC1IgorCisjOiBnaXRrOjcxNjEKK21zZ2lkICJtYW55IgorbXNnc3RyICLQvNC90L7Qs9C+IgorCisjOiBnaXRrOjczNTIKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAi0JzQtdGC0LrQuDoiCisKKyM6IGdpdGs6NzM2OSBnaXRrOjczNzUgZ2l0azo4ODU0Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICLQn9GA0LXQtNC+0LoiCisKKyM6IGdpdGs6NzM4MAorbXNnaWQgIkNoaWxkIgorbXNnc3RyICLQn9C+0YLQvtC80L7QuiIKKworIzogZ2l0azo3Mzg5Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICLQktC10YLQutCwIgorCisjOiBnaXRrOjczOTIKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICLQodC70LXQtNGD0LXRgiDQt9CwIgorCisjOiBnaXRrOjczOTUKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAi0J/RgNC10LTRiNC10YHRgtCy0YPQtdGCIgorCisjOiBnaXRrOjc5OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDQuNC30LzQtdC90LXQvdC40Lk6ICVzIgorCisjOiBnaXRrOjg2NzkKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0Lo6IgorCisjOiBnaXRrOjg3MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAi0KHQvtC60YDQsNGJ0ZHQvdC90YvQuSBTSEExINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAICVzINC90LXQvtC00L3QvtC30L3QsNGH0LXQvSIKKworIzogZ2l0azo4NzA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICLQoNC10LTQsNC60YbQuNGPICVzINC90LUg0L3QsNC50LTQtdC90LAiCisKKyM6IGdpdGs6ODcxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEExINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAICVzINC90LUg0L3QsNC50LTQtdC9IgorCisjOiBnaXRrOjg3MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAi0KDQtdC00LDQutGG0LjRjyAlcyDQvdC1INC90LDQudC00LXQvdCwINCyINGC0LXQutGD0YnQtdC8INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC4IgorCisjOiBnaXRrOjg4NjEgZ2l0azo4ODc2Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAi0JTQsNGC0LAiCisKKyM6IGdpdGs6ODg2NAorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICLQn9C+0YLQvtC80LrQuCIKKworIzogZ2l0azo4OTI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgItCh0LHRgNC+0YHQuNGC0Ywg0LLQtdGC0LrRgyAlcyDQvdCwINGN0YLQvtGCINC60L7QvNC80LjRgiIKKworIzogZ2l0azo4OTI5Cittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgItCa0L7QvNC80LjRgiDQvdC1INC/0YDQuNC90LDQtNC70LXQttC40YIg0L3QuCDQvtC00L3QvtC5INCy0LXRgtC60LUsINGB0LHRgNC+0YHQuNGC0Ywg0L3QtdCy0L7Qt9C80L7QttC90L4iCisKKyM6IGdpdGs6OTAzNCBnaXRrOjkwNDAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLQn9GA0L7Qv9GD0YHQutCw0Y4g0LrQvtC80LzQuNGCLdGB0LvQuNGP0L3QuNC1IgorCisjOiBnaXRrOjkwNDkgZ2l0azo5MDU0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L/QsNGC0YfQsCDQtNC70Y8gIgorCisjOiBnaXRrOjkwNTAgZ2l0azo5MDU1Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIOKAlCDQvtGB0YLQsNC90L7QslxuIgorCisjOiBnaXRrOjkwNjAgZ2l0azo5MDYzIGdpdGs6OTA3MSBnaXRrOjkwODUgZ2l0azo5MDk0Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAi0JrQvtC80LzQuNGCIgorCisjOiBnaXRrOjkwNjQKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiINGC0LDQutC+0Lkg0LbQtSDQv9Cw0YLRhywg0LrQsNC6INC4XG4gICAgICAgIgorCisjOiBnaXRrOjkwNzIKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiDQvtGC0LvQuNGH0LDQtdGC0YHRjyDQvtGCXG4gICAgICAgIgorCisjOiBnaXRrOjkwNzQKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICLQoNCw0LfQu9C40YfQuNGPINC60L7QvNC80LjRgtC+0LI6XG5cbiIKKworIzogZ2l0azo5MDg2IGdpdGs6OTA5NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIg0Y/QstC70Y/QtdGC0YHRjyAlcyDQv9C+0YLQvtC80LrQvtC8IOKAlCDQvtGB0YLQsNC90L7QslxuIgorCisjOiBnaXRrOjkxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgdC4INC60L7QvNC80LjRgtCwINCyINGE0LDQudC7OiAlcyIKKworIzogZ2l0azo5MTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCDQv9GA0Lgg0LLRi9Cy0L7QtNC1INGA0LDQt9C70LjRh9C40Lkg0LrQvtC80LzQuNGC0L7QsjogJXMiCisKKyM6IGdpdGs6OTE2NgorbXNnaWQgIlRvcCIKK21zZ3N0ciAi0JLQtdGA0YUiCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkZyb20iCittc2dzdHIgItCe0YIiCisKKyM6IGdpdGs6OTE3MgorbXNnaWQgIlRvIgorbXNnc3RyICLQlNC+IgorCisjOiBnaXRrOjkxOTYKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0L/QsNGC0YciCisKKyM6IGdpdGs6OTE5OAorbXNnaWQgIkZyb206IgorbXNnc3RyICLQntGCOiIKKworIzogZ2l0azo5MjA3Cittc2dpZCAiVG86IgorbXNnc3RyICLQlNC+OiIKKworIzogZ2l0azo5MjE2Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAi0JIg0L7QsdGA0LDRgtC90L7QvCDQv9C+0YDRj9C00LrQtSIKKworIzogZ2l0azo5MjE4IGdpdGs6OTQyOAorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAi0KTQsNC50Lsg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPOiIKKworIzogZ2l0azo5MjI0Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgItCh0L7Qt9C00LDRgtGMIgorCisjOiBnaXRrOjkyNjIKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINC/0LDRgtGH0LA6IgorCisjOiBnaXRrOjkyODUgZ2l0azo5NDE2IGdpdGs6OTUwNAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyOTQKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgItCY0LzRjyDQvNC10YLQutC4OiIKKworIzogZ2l0azo5Mjk3Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgItCe0L/QuNGB0LDQvdC40LUg0LzQtdGC0LrQuCDRg9C60LDQt9GL0LLQsNGC0Ywg0L3QtSDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+IgorCisjOiBnaXRrOjkyOTkKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgItCe0L/QuNGB0LDQvdC40LUg0LzQtdGC0LrQuDoiCisKKyM6IGdpdGs6OTMwMyBnaXRrOjk0NzQKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgItCh0L7Qt9C00LDRgtGMIgorCisjOiBnaXRrOjkzMjEKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgItCd0LUg0LfQsNC00LDQvdC+INC40LzRjyDQvNC10YLQutC4IgorCisjOiBnaXRrOjkzMjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLQnNC10YLQutCwIMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGdpdGs6OTMzNQorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINC80LXRgtC60Lg6IgorCisjOiBnaXRrOjk0MjUKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LA6IgorCisjOiBnaXRrOjk0MzMKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAi0JfQsNC/0LjRgdGMIgorCisjOiBnaXRrOjk0NTEKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgItCf0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAg0L/RgNC4INC30LDQv9C40YHQuCDQutC+0LzQvNC40YLQsDoiCisKKyM6IGdpdGs6OTQ3MworbXNnaWQgIkNyZWF0ZSBicmFuY2giCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINCy0LXRgtC60YMiCisKKyM6IGdpdGs6OTQ4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlbmFtZSBicmFuY2ggJXMiCittc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINCy0LXRgtC60YMgJXMiCisKKyM6IGdpdGs6OTQ5MAorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YwiCisKKyM6IGdpdGs6OTUxNAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICLQmNC80Y86IgorCisjOiBnaXRrOjk1MzgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQo9C60LDQttC40YLQtSDQuNC80Y8g0LTQu9GPINC90L7QstC+0Lkg0LLQtdGC0LrQuCIKKworIzogZ2l0azo5NTQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4g0J/QtdGA0LXQv9C40YHQsNGC0Yw/IgorCisjOiBnaXRrOjk1ODcKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5ldyBuYW1lIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLQo9C60LDQttC40YLQtSDQuNC80Y8g0LTQu9GPINC90L7QstC+0Lkg0LLQtdGC0LrQuCIKKworIzogZ2l0azo5NjUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDRg9C20LUg0LLQutC70Y7Rh9GR0L0g0LIg0LLQtdGC0LrRgyAlcy4g0J/RgNC+0LTQvtC70LbQuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjj8iCisKKyM6IGdpdGs6OTY1NQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0L3QuNC1INC60L7QvNC80LjRgtCwIgorCisjOiBnaXRrOjk2NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0L3QuNC1INC60L7QvNC80LjRgtCwINC90LXQstC+0LfQvNC+0LbQvdC+INC40Lct0LfQsCDQuNC30LzQtdC90LXQvdC40Lkg0LIg0YTQsNC50LvQtSDCqyVzwrsuXG7Ql9Cw0LrQvtC80LzQuNGC0YzRgtC1LCDRgdCx0YDQvtGB0YzRgtC1INC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INC40LfQvNC10L3QtdC90LjRjyDQuCDQv9C+0LLRgtC+0YDQuNGC0LUg0L7Qv9C10YDQsNGG0LjRji4iCisKKyM6IGdpdGs6OTY3MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0L3QtdCy0L7Qt9C80L7QttC90L4g0LjQty3Qt9CwINC90LXQt9Cw0LLQtdGA0YjRkdC90L3QvtC5INC+0L/QtdGA0LDRhtC40Lgg0YHQu9C40Y/QvdC40Y8uXG7Ql9Cw0L/Rg9GB0YLQuNGC0YwgZ2l0IGNpdG9vbCDQtNC70Y8g0LfQsNCy0LXRgNGI0LXQvdC40Y8g0Y3RgtC+0Lkg0L7Qv9C10YDQsNGG0LjQuD8iCisKKyM6IGdpdGs6OTY4NiBnaXRrOjk3NDQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINC90LUg0LfQsNC60L7QvNC80LjRh9C10L3RiyIKKworIzogZ2l0azo5NzEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDQvdC1INCy0LrQu9GO0YfRkdC9INCyINCy0LXRgtC60YMgJXMuINCf0YDQvtC00L7Qu9C20LjRgtGMINC+0L/QtdGA0LDRhtC40Y4/IgorCisjOiBnaXRrOjk3MTgKK21zZ2lkICJSZXZlcnRpbmciCittc2dzdHIgItCe0LHRgNCw0YnQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6OTcyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICLQktC+0LfQstGA0LDRgiDQuNC30LzQtdC90LXQvdC40Lkg0LrQvtC80LzQuNGC0LAg0L3QtSDRg9C00LDQu9GB0Y8g0LjQty3Qt9CwINC70L7QutCw0LvRjNC90YvRhSDQuNC30LzQtdC90LXQvdC40Lkg0LIg0YPQutCw0LfQsNC90L3Ri9GFINGE0LDQudC70LDRhTogJXNcbtCX0LDQutC+0LzQvNC40YLRjNGC0LUsINGB0LHRgNC+0YHRjNGC0LUg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINC4INC/0L7QstGC0L7RgNC40YLQtSDQvtC/0LXRgNCw0YbQuNGOLiIKKworIzogZ2l0azo5NzMwCittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgItCS0L7Qt9Cy0YDQsNGCINC40LfQvNC10L3QtdC90LjQuSDQvdC10LLQvtC30LzQvtC20LXQvSDQuNC3LdC30LAg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjy5cbtCX0LDQv9GD0YHRgtC40YLRjCBnaXQgY2l0b29sINC00LvRjyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4PyIKKworIzogZ2l0azo5NzczCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAi0J/QvtC00YLQstC10YDQtNC40YLQtSDQvtC/0LXRgNCw0YbQuNGOINC/0LXRgNC10YXQvtC00LAiCisKKyM6IGdpdGs6OTc3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgItCh0LHRgNC+0YHQuNGC0Ywg0LLQtdGC0LrRgyAlcyDQvdCwINC60L7QvNC80LjRgiAlcz8iCisKKyM6IGdpdGs6OTc3NworbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICLQotC40L8g0L7Qv9C10YDQsNGG0LjQuCDQv9C10YDQtdGF0L7QtNCwOiIKKworIzogZ2l0azo5NzgwCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgItCb0ZHQs9C60LjQuTog0L7RgdGC0LDQstC40YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQuCDQuNC90LTQtdC60YEg0L3QtdC40LfQvNC10L3QvdGL0LzQuCIKKworIzogZ2l0azo5NzgzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICLQodC80LXRiNCw0L3QvdGL0Lk6INC+0YHRgtCw0LLQuNGC0Ywg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0L3QtdC40LfQvNC10L3QvdGL0LwsINGD0YHRgtCw0L3QvtCy0LjRgtGMINC40L3QtNC10LrRgSIKKworIzogZ2l0azo5Nzg2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgItCW0LXRgdGC0LrQuNC5OiDQv9C10YDQtdC/0LjRgdCw0YLRjCDQuNC90LTQtdC60YEg0Lgg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LNcbijQstGB0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDQv9C+0YLQtdGA0Y/QvdGLKSIKKworIzogZ2l0azo5ODAzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLQodCx0YDQvtGBIgorCisjOiBnaXRrOjk4NzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBIGxvY2FsIGJyYW5jaCBuYW1lZCAlcyBleGlzdHMgYWxyZWFkeSIKK21zZ3N0ciAi0JvQvtC60LDQu9GM0L3QsNGPINCy0LXRgtC60LAg0YEg0LjQvNC10L3QtdC8ICVzINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogZ2l0azo5ODg0Cittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICLQn9C10YDQtdGF0L7QtCIKKworIzogZ2l0azo5OTQzCittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAi0JDQutGC0LjQstC90LDRjyDQstC10YLQutCwINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRg9C00LDQu9C10L3QsCIKKworIzogZ2l0azo5OTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgItCa0L7QvNC80LjRgtGLINC40Lcg0LLQtdGC0LrQuCAlcyDQvdC1INC/0YDQuNC90LDQtNC70LXQttCw0YIg0LHQvtC70YzRiNC1INC90LjQutCw0LrQvtC5INC00YDRg9Cz0L7QuSDQstC10YLQutC1Llxu0JTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YPQtNCw0LvQuNGC0Ywg0LLQtdGC0LrRgyAlcz8iCisKKyM6IGdpdGs6OTk4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAi0JzQtdGC0LrQuCDQuCDQstC10YLQutC4OiAlcyIKKworIzogZ2l0azo5OTk3Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICLQpNC40LvRjNGC0YDQvtCy0LDRgtGMIgorCisjOiBnaXRrOjEwMjkzCittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPINC40YHRgtC+0YDQuNC4INC/0YDQvtC10LrRgtCwOyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQviDQstC10YLQutCw0YUg0Lgg0LrQvtC80LzQuNGC0LDRhSDQstC+0LrRgNGD0LMg0LzQtdGC0L7QuiAo0LTQvi/Qv9C+0YHQu9C1KSDQvNC+0LbQtdGCINCx0YvRgtGMINC90LXQv9C+0LvQvdC+0LkuIgorCisjOiBnaXRrOjExMjcwCittc2dpZCAiVGFnIgorbXNnc3RyICLQnNC10YLQutCwIgorCisjOiBnaXRrOjExMjc0Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMzU3Cittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgItCo0YDQuNGE0YIgR2l0ayIKKworIzogZ2l0azoxMTM3NAorbXNnaWQgIkIiCittc2dzdHIgItCWIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiSSIKK21zZ3N0ciAi0JoiCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LrQsNC30LAg0YHQv9C40YHQutCwINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdGs6MTE0OTgKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgItCc0LDQutGBLiDRiNC40YDQuNC90LAg0LPRgNCw0YTQsCAo0YHRgtGA0L7QuikiCisKKyM6IGdpdGs6MTE1MDIKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICLQnNCw0LrRgS4g0YjQuNGA0LjQvdCwINCz0YDQsNGE0LAgKCUg0YjQuNGA0LjQvdGLINC/0LDQvdC10LvQuCkiCisKKyM6IGdpdGs6MTE1MDUKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgItCf0L7QutCw0LfRi9Cy0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBnaXRrOjExNTA4Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0LLRi9C00LXQu9C40YLRjCBTSEExICjQtNC70LjQvdC90LApIgorCisjOiBnaXRrOjExNTEyCittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAi0KHQutGA0YvRgtGMINCy0L3QtdGI0L3QuNC1INGB0YHRi9C70LrQuCIKKworIzogZ2l0azoxMTUxNgorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICLQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azoxMTUxOAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICLQqNC40YDQuNC90LAg0YLQsNCx0YPQu9GP0YbQuNC4IgorCisjOiBnaXRrOjExNTIxCittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAi0J/QvtC60LDQt9GL0LLQsNGC0Ywg0LHQu9C40LfQutC40LUg0LzQtdGC0LrQuC/QstC10YLQutC4IgorCisjOiBnaXRrOjExNTI0Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAi0J/QvtC60LDQt9GL0LLQsNGC0Ywg0LzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC80LXRgtC+0Lov0LLQtdGC0L7QuiIKKworIzogZ2l0azoxMTUyNworbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAi0J7Qs9GA0LDQvdC40YfQuNGC0Ywg0L/QvtC60LDQtyDQuNC30LzQtdC90LXQvdC40Lkg0LLRi9Cx0YDQsNC90L3Ri9C80Lgg0YTQsNC50LvQsNC80LgiCisKKyM6IGdpdGs6MTE1MzAKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAi0J/QvtC00LTQtdGA0LbQutCwINC60L7QtNC40YDQvtCy0L7QuiDQsiDQvtGC0LTQtdC70YzQvdGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBnaXRrOjExNTM2IGdpdGs6MTE2ODMKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCDQtNC70Y8g0L/QvtC60LDQt9CwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azoxMTUzNworbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAi0JLRi9Cx0LXRgNC40YLQtS4uLiIKKworIzogZ2l0azoxMTU0MgorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAi0J7QsdGJ0LjQtSDQvtC/0YbQuNC4IgorCisjOiBnaXRrOjExNTQ1Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YHRgtC40LvQuCDQstC40LTQttC10YLQvtCyIgorCisjOiBnaXRrOjExNTQ3Cittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKNC40LfQvNC10L3QtdC90LjQtSDQv9C+0YLRgNC10LHRg9C10YIg0L/QtdGA0LXQt9Cw0L/Rg9GB0LopIgorCisjOiBnaXRrOjExNTQ5Cittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIijQvdC10LTQvtGB0YLRg9C/0L3QviDQsiDQtNCw0L3QvdGL0Lkg0LzQvtC80LXQvdGCKSIKKworIzogZ2l0azoxMTU2MAorbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLQptCy0LXRgtCwOiDQvdCw0LbQvNC40YLQtSDQtNC70Y8g0LLRi9Cx0L7RgNCwIgorCisjOiBnaXRrOjExNTYzCittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICLQmNC90YLQtdGA0YTQtdC50YEiCisKKyM6IGdpdGs6MTE1NjQKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgItC40L3RgtC10YDRhNC10LnRgSIKKworIzogZ2l0azoxMTU2NworbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgItCk0L7QvSIKKworIzogZ2l0azoxMTU2OCBnaXRrOjExNTk4Cittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAi0YTQvtC9IgorCisjOiBnaXRrOjExNTcxCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAi0J/QtdGA0LXQtNC90LjQuSDQv9C70LDQvSIKKworIzogZ2l0azoxMTU3MgorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgItC/0LXRgNC10LTQvdC40Lkg0L/Qu9Cw0L0iCisKKyM6IGdpdGs6MTE1NzUKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjzog0YHRgtCw0YDRi9C5INGC0LXQutGB0YIiCisKKyM6IGdpdGs6MTE1NzYKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAi0YHRgtCw0YDRi9C5INGC0LXQutGB0YIg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXRrOjExNTgwCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y86INC90L7QstGL0Lkg0YLQtdC60YHRgiIKKworIzogZ2l0azoxMTU4MQorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICLQvdC+0LLRi9C5INGC0LXQutGB0YIg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXRrOjExNTg1Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjzog0LfQsNCz0L7Qu9C+0LLQvtC6INCx0LvQvtC60LAiCisKKyM6IGdpdGs6MTE1ODcKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICLQt9Cw0LPQvtC70L7QstC+0Log0LHQu9C+0LrQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MTE1OTEKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAi0KTQvtC9INCy0YvQsdGA0LDQvdC90L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGdpdGs6MTE1OTMKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICLRhNC+0L0g0LLRi9Cx0YDQsNC90L3QvtC5INGB0YLRgNC+0LrQuCIKKworIzogZ2l0azoxMTU5NworbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAi0JLRi9Cx0LXRgNC40YLQtSDRhNC+0L0iCisKKyM6IGdpdGs6MTE2MDYKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLQqNGA0LjRhNGCOiDQvdCw0LbQvNC40YLQtSDQtNC70Y8g0LLRi9Cx0L7RgNCwIgorCisjOiBnaXRrOjExNjA4Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICLQntGB0L3QvtCy0L3QvtC5INGI0YDQuNGE0YIiCisKKyM6IGdpdGs6MTE2MDkKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAi0KjRgNC40YTRgiDQv9C+0LrQsNC30LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjExNjEwCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAi0KjRgNC40YTRgiDQuNC90YLQtdGA0YTQtdC50YHQsCIKKworIzogZ2l0azoxMTYzMgorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCBHaXRrIgorCisjOiBnaXRrOjExNjQxCittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAi0J7QsdGJ0LjQtSIKKworIzogZ2l0azoxMTY0MgorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAi0KbQstC10YLQsCIKKworIzogZ2l0azoxMTY0MworbXNnaWQgIkZvbnRzIgorbXNnc3RyICLQqNGA0LjRhNGC0YsiCisKKyM6IGdpdGs6MTE2OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiDQstGL0LHQtdGA0LjRgtC1INGG0LLQtdGCINC00LvRjyAlcyIKKworIzogZ2l0azoxMjIwNgorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAi0Jog0YHQvtC20LDQu9C10L3QuNGOIGdpdGsg0L3QtSDQvNC+0LbQtdGCINGA0LDQsdC+0YLQsNGC0Ywg0YEg0Y3RgtC+0Lkg0LLQtdGA0YHQuNC5IFRjbC9Uay5cbtCi0YDQtdCx0YPQtdGC0YHRjyDQutCw0Log0LzQuNC90LjQvNGD0LwgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTI0MTYKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJHaXQt0YDQtdC/0L7Qt9C40YLQsNGA0LjQuSDQvdC1INC90LDQudC00LXQvSDQsiDRgtC10LrRg9GJ0LXQvCDQutCw0YLQsNC70L7Qs9C1LiIKKworIzogZ2l0azoxMjQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAi0J3QtdC+0LTQvdC+0LfQvdCw0YfQvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiDCqyVzwrs6INGB0YPRidC10YHRgtCy0YPQtdGCINC60LDQuiDRgNC10LTQsNC60YbQuNGPINC4INC60LDQuiDQuNC80Y8g0YTQsNC50LvQsCIKKworIzogZ2l0azoxMjQ3NQorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90YvQtSDQsNGA0LPRg9C80LXQvdGC0Ysg0LTQu9GPIGdpdGs6IgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vc3YucG8gYi9naXRrLWdpdC9wby9zdi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTA2ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vc3YucG8KQEAgLTAsMCArMSwxNDEzIEBACisjIFN3ZWRpc2ggdHJhbnNsYXRpb24gZm9yIGdpdGsKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTUgUGF1bCBNYWNrZXJyYXMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMKKyMgTWlrYWVsIE1hZ251c3NvbiA8bWlrYWNodUBnbWFpbC5jb20+LCAyMDA4LgorIyBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4sIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMsIDIwMTUuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBzdlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0xMi0wOSAwOTo0MCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0xMi0xMSAwOTo0NiswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTd2VkaXNoIDx0cC1zdkBsaXN0b3IudHAtc3Yuc2U+XG4iCisiTGFuZ3VhZ2U6IHN2XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuNlxuIgorCisjOiBnaXRrOjE0MAorbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgbGlzdGEgw7Z2ZXIgZWogc2FtbWFuc2xhZ25hIGZpbGVyOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIkbDpHJnYSBvcmQiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjEgZ2l0azo4MjU0Cittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICJNw6RyayB1cHAgb3JkIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRmVsIHZpZCB0b2xrbmluZyBhdiByZXZpc2lvbmVyOiIKKworIzogZ2l0azozODAKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICJGZWwgdmlkIGvDtnJuaW5nIGF2IC0tYXJnc2NtZC1rb21tYW5kbzoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiSW5nYSBmaWxlciB2YWxkZXM6IC0tbWVyZ2UgYW5nYXZzIG1lbiBkZXQgZmlubnMgaW5nYSBmaWxlciBzb20gaW50ZSBoYXIgIgorInNsYWdpdHMgc2FtbWFuLiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIkluZ2EgZmlsZXIgdmFsZGVzOiAtLW1lcmdlIGFuZ2F2cyBtZW4gZGV0IGZpbm5zIGluZ2EgZmlsZXIgaW5vbSAiCisiZmlsYmVncsOkbnNuaW5nZW4uIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAiRmVsIHZpZCBrw7ZybmluZyBhdiBnaXQgbG9nOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMw6RzZXIiCisKKyM6IGdpdGs6NDk2IGdpdGs6NDUyNgorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiTMOkc2VyIGluY2hlY2tuaW5nYXIuLi4iCisKKyM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjkKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJJbmdhIGluY2hlY2tuaW5nYXIgbWFya2VyYWRlIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ2IGdpdGs6MTI0NDcKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIktvbW1hbmRvcmFkIgorCisjOiBnaXRrOjE1MTEKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkthbiBpbnRlIHRvbGthIHV0ZGF0YSBmcsOlbiBnaXQgbG9nOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiSW5nZW4gaW5jaGVja25pbmdzaW5mb3JtYXRpb24gw6RyIHRpbGxnw6RuZ2xpZyIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTYgZ2l0azo5Njg0IGdpdGs6MTEyNTYgZ2l0azoxMTUzNgorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxOCBnaXRrOjkxOTcgZ2l0azo5Mjc2IGdpdGs6OTQwNiBnaXRrOjk0NTUgZ2l0azo5Njg2CisjOiBnaXRrOjExMjU3IGdpdGs6MTE1MzcKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkF2YnJ5dCIKKworIzogZ2l0azoyMDY5Cittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAiJlVwcGRhdGVyYSIKKworIzogZ2l0azoyMDcwCittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAiTMOkcyAmb20iCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiTMOkcyBvbSAmcmVmZXJlbnNlciIKKworIzogZ2l0azoyMDcyCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiJlZpc2EgcmVmZXJlbnNlciIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIlN0YXJ0YSBnaXQgJmd1aSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIiZBdnNsdXRhIgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiJkFya2l2IgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIiZJbnN0w6RsbG5pbmdhciIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIiZSZWRpZ2VyYSIKKworIzogZ2l0azoyMDg0Cittc2dpZCAiJk5ldyB2aWV3Li4uIgorbXNnc3RyICImTnkgdnkuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIibDhG5kcmEgdnkuLi4iCisKKyM6IGdpdGs6MjA4NgorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAiJlRhIGJvcnQgdnkiCisKKyM6IGdpdGs6MjA4OAorbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIiZBbGxhIGZpbGVyIgorCisjOiBnaXRrOjIwODMKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiJlZpc2EiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAiJk9tIGdpdGsiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICImVGFuZ2VudGJvcmRzYmluZG5pbmdhciIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICImSGrDpGxwIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUzCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEtaWQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIlJhZCIKKworIzogZ2l0azoyMjY3Cittc2dpZCAiRmluZCIKK21zZ3N0ciAiU8O2ayIKKworIzogZ2l0azoyMjk1Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJpbmNoZWNrbmluZyIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODggZ2l0azo0NzExIGdpdGs6NDczNSBnaXRrOjY3NTYgZ2l0azo2ODI4CisjOiBnaXRrOjY5MTMKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAic29tIGlubmVow6VsbGVyOiIKKworIzogZ2l0azoyMzAyIGdpdGs6MzUyNyBnaXRrOjM1MzIgZ2l0azo0NzY0Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJzb20gcsO2ciBzw7ZrdsOkZzoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzgKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAic29tIGzDpGdnZXIvdGlsbCB0YXIgYm9ydCBzdHLDpG5nOiIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc4MAorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAiw6RuZHJhciByYWRlciBzb20gbWF0Y2hhcjoiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY3Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWt0IgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU1IGdpdGs6NjcyNAorbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnblZlcnNhbGVyIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0NzM3IGdpdGs6NDg1MyBnaXRrOjY3MjAKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIlJlZy51dHRyLiIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzUgZ2l0azo0OTA1IGdpdGs6NDkxMiBnaXRrOjY4NDkgZ2l0azo2OTE3Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiQWxsYSBmw6RsdCIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MiBnaXRrOjQ5MDUgZ2l0azo2Nzg3Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlJ1YnJpayIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MiBnaXRrOjY3ODcgZ2l0azo2OTE3IGdpdGs6NzM5MAorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJLb21tZW50YXJlciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MiBnaXRrOjQ4NzcgZ2l0azo0OTEyIGdpdGs6Njc4NyBnaXRrOjczMjUgZ2l0azo4ODMxCisjOiBnaXRrOjg4NDYKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIkbDtnJmYXR0YXJlIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcyIGdpdGs6Njc4NyBnaXRrOjczMjcKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIkluY2hlY2thcmUiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiU8O2ayIKKworIzogZ2l0azoyMzU4Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAiRGlmZiIKKworIzogZ2l0azoyMzYwCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIkdhbW1hbCB2ZXJzaW9uIgorCisjOiBnaXRrOjIzNjIKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiTnkgdmVyc2lvbiIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiUmFkZXIgc2FtbWFuaGFuZyIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JlcmEgw6RuZHJpbmdhciBpIGJsYW5rc3RlZyIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NjAgZ2l0azo4MjA3Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICJSYWQtZGlmZiIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIlBhdGNoIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICJUcsOkZCIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBkZW5uYSAtPiBtYXJrZXJhZCIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOQorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBtYXJrZXJhZCAtPiBkZW5uYSIKKworIzogZ2l0azoyNjE5IGdpdGs6MjY0MAorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIlNrYXBhIHBhdGNoIgorCisjOiBnaXRrOjI2MjAgZ2l0azo5MjU1Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiU2thcGEgdGFnZyIKKworIzogZ2l0azoyNjIxCittc2dpZCAiQ29weSBjb21taXQgc3VtbWFyeSIKK21zZ3N0ciAiS29waWVyYSBpbmNoZWNrbmluZ3NzYW1tYW5mYXR0bmluZyIKKworIzogZ2l0azoyNjIyIGdpdGs6OTM4NgorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJTa3JpdiBpbmNoZWNrbmluZyB0aWxsIGZpbCIKKworIzogZ2l0azoyNjIzIGdpdGs6OTQ0MworbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJTa2FwYSBueSBncmVuIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiUGxvY2thIGRlbm5hIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLDhXRlcnN0w6RsbCBIRUFELWdyZW5lbiBoaXQiCisKKyM6IGdpdGs6MjYyNgorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIk1hcmtlcmEgZGVubmEgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MjYyNworbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICLDhXRlcmfDpSB0aWxsIG1hcmtlcmluZyIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIkhpdHRhIGVmdGVyZsO2bGphcmUgdGlsbCBkZW5uYSBvY2ggbWFya2VyYSIKKworIzogZ2l0azoyNjI5Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIkrDpG1mw7ZyIG1lZCBtYXJrZXJhZCBpbmNoZWNrbmluZyIKKworIzogZ2l0azoyNjMwIGdpdGs6MjY0MQorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJEaWZmIGRlbm5hIC0+IG1hcmtlcmFkIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2MzEgZ2l0azoyNjQyCittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIkRpZmYgbWFya2VyYWQgaW5jaGVja25pbmcgLT4gZGVubmEiCisKKyM6IGdpdGs6MjYzMgorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiw4VuZ3JhIGRlbm5hIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkNoZWNrYSB1dCBkZW5uYSBncmVuIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlRhIGJvcnQgZGVubmEgZ3JlbiIKKworIzogZ2l0azoyNjUwCittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiS29waWVyYSBuYW1uIHDDpSBncmVuIgorCisjOiBnaXRrOjI2NTcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIk1hcmtlcmEgw6R2ZW4gZGV0dGEiCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIk1hcmtlcmEgYmFyYSBkZXR0YSIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiRXh0ZXJuIGRpZmYiCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIktsYW5kcmEgZsO2csOkbGRyYWluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2NjEKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIktvcGllcmEgc8O2a3bDpGciCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiVmlzYSB1cnNwcnVuZ2V0IGbDtnIgZGVuIGjDpHIgcmFkZW4iCisKKyM6IGdpdGs6MjY2OQorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiS8O2ciBnaXQgZ3VpIGJsYW1lIHDDpSBkZW4gaMOkciByYWRlbiIKKworIzogZ2l0azozMDEzCittc2dpZCAiQWJvdXQgZ2l0ayIKK21zZ3N0ciAiT20gZ2l0ayIKKworIzogZ2l0azozMDE1Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIGVuIGluY2hlY2tuaW5nc3Zpc2FyZSBmw7ZyIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJBbnbDpG5kIG9jaCB2aWRhcmVmw7ZybWVkbGEgZW5saWd0IHZpbGxrb3JlbiBpIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorCisjOiBnaXRrOjMwMjMgZ2l0azozMDkwIGdpdGs6OTg3MgorbXNnaWQgIkNsb3NlIgorbXNnc3RyICJTdMOkbmciCisKKyM6IGdpdGs6MzA0NAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIGbDtnIgR2l0ayIKKworIzogZ2l0azozMDQ3Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIGbDtnIgR2l0azoiCisKKyM6IGdpdGs6MzA0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0QXZzbHV0YSIKKworIzogZ2l0azozMDUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdFN0w6RuZyBmw7Zuc3RlciIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx0R8OlIHRpbGwgZsO2cnN0YSBpbmNoZWNrbmluZyIKKworIzogZ2l0azozMDUyCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0R8OlIHRpbGwgc2lzdGEgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MzA1MworbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwcD4sIHAsIGtcdEfDpSBlbiBpbmNoZWNrbmluZyB1cHAiCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxOZWQ+LCBuLCBqXHRHw6UgZW4gaW5jaGVja25pbmcgbmVkIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8VsOkbnN0ZXI+LCB6LCBoXHRHw6UgYmFrw6V0IGkgaGlzdG9yaWtlbiIKKworIzogZ2l0azozMDU2Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxIw7ZnZXI+LCB4LCBsXHRHw6UgZnJhbcOldCBpIGhpc3RvcmlrZW4iCisKKyM6IGdpdGs6MzA1NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8JXMtbj5cdEfDpSB0aWxsIGFrdHVlbGwgaW5jaGVja25pbmdzIG46dGUgZsO2csOkbGRlciBpIGhpc3RvcmllbGlzdGFuIgorCisjOiBnaXRrOjMwNTgKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdEfDpSB1cHAgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKKworIzogZ2l0azozMDU5Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHRHw6UgbmVkIGVuIHNpZGEgaSBpbmNoZWNrbmluZ3NsaXN0YW4iCisKKyM6IGdpdGs6MzA2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHRSdWxsYSB0aWxsIGLDtnJqYW4gYXYgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdFJ1bGxhIHRpbGwgc2x1dGV0IGF2IGluY2hlY2tuaW5nc2xpc3RhbiIKKworIzogZ2l0azozMDYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXBwPlx0UnVsbGEgaW5jaGVja25pbmdzbGlzdGFuIHVwcCBldHQgc3RlZyIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLU5lZD5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiBuZWQgZXR0IHN0ZWciCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGVuIHNpZGEiCisKKyM6IGdpdGs6MzA2NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gbmVkIGVuIHNpZGEiCisKKyM6IGdpdGs6MzA2NgorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPFNraWZ0LVVwcD5cdFPDtmsgYmFrw6V0ICh1cHDDpXQsIHNlbmFyZSBpbmNoZWNrbmluZ2FyKSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTa2lmdC1OZWQ+XHRTw7ZrIGZyYW3DpXQgKG5lZMOldCwgdGlkaWdhcmUgaW5jaGVja25pbmdhcikiCisKKyM6IGdpdGs6MzA2OAorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx0UnVsbGEgZGlmZnZpc25pbmdlbiB1cHAgZW4gc2lkYSIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWtzdGVnPlx0UnVsbGEgZGlmZnZpc25pbmdlbiB1cHAgZW4gc2lkYSIKKworIzogZ2l0azozMDcwCittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxCbGFua3N0ZWc+XHRSdWxsYSBkaWZmdmlzbmluZ2VuIG5lZCBlbiBzaWRhIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiB1cHAgMTggcmFkZXIiCisKKyM6IGdpdGs6MzA3MgorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gbmVkIDE4IHJhZGVyIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdFPDtmsiCisKKyM6IGdpdGs6MzA3NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiIKKworIzogZ2l0azozMDc1Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYiCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICJnXHRcdEfDpSB0aWxsIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjMwNzcKK21zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgorbXNnc3RyICIvXHRcdEZva3VzZXJhIHPDtmtydXRhbiIKKworIzogZ2l0azozMDc4Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdEfDpSB0aWxsIGbDtnJlZ8OlZW5kZSBzw7ZrdHLDpGZmIgorCisjOiBnaXRrOjMwNzkKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gdGlsbCBuw6RzdGEgZmlsIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiBpIGRpZmZ2aXNuaW5nZW4iCisKKyM6IGdpdGs6MzA4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRHw6UgdGlsbCBmw7ZyZWfDpWVuZGUgc8O2a3Ryw6RmZiBpIGRpZmZ2aXNuaW5nZW4iCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW0rPlx0w5ZrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHTDlmthIHRlY2tlbnN0b3JsZWsiCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW0tPlx0TWluc2thIHRlY2tlbnN0b3JsZWsiCisKKyM6IGdpdGs6MzA4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx0TWluc2thIHRlY2tlbnN0b3JsZWsiCisKKyM6IGdpdGs6MzA4NgorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdFVwcGRhdGVyYSIKKworIzogZ2l0azozNTUxIGdpdGs6MzU2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJGZWwgdmlkIHNrYXBhbmRlIGF2IHRlbXBvcsOkciBrYXRhbG9nICVzOiIKKworIzogZ2l0azozNTczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkZlbCB2aWQgaMOkbXRuaW5nIGF2ICBcIiVzXCIgZnLDpW4gJXM6IgorCisjOiBnaXRrOjM2MzYKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImtvbW1hbmRvIG1pc3NseWNrYWRlczoiCisKKyM6IGdpdGs6Mzc4NQorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJJbmNoZWNrbmluZyBzYWtuYXMiCisKKyM6IGdpdGs6Mzc5OQorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZToga29tbWFuZG8gbWlzc2x5Y2thZGVzOiIKKworIzogZ2l0azozODMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RzYSBzYW1tYW5zbGFnbmluZ3NodXZ1ZDogJXMiCisKKyM6IGdpdGs6MzgzOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIGF2IGluZGV4OiAlcyIKKworIzogZ2l0azozODYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzdGFydGEgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozODY2IGdpdGs6Njc1NQorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiU8O2a2VyIgorCisjOiBnaXRrOjM4OTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkZlbCB2aWQga8O2cm5pbmcgYXYgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozOTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiUmFkZW4ga29tbWVyIGZyw6VuIGluY2hlY2tuaW5nZW4gJXMsIHNvbSBpbnRlIGZpbm5zIGkgZGVubmEgdnkiCisKKyM6IGdpdGs6Mzk0MAorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIkV4dGVybnQgZGlmZi12ZXJrdHlnIG1pc3NseWNrYWRlczoiCisKKyM6IGdpdGs6NDA0NAorbXNnaWQgIkFsbCBmaWxlcyIKK21zZ3N0ciAiQWxsYSBmaWxlciIKKworIzogZ2l0azo0MDY4Cittc2dpZCAiVmlldyIKK21zZ3N0ciAiVmlzYSIKKworIzogZ2l0azo0MDcxCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkRlZmluaXRpb24gYXYgR2l0ay12eSIKKworIzogZ2l0azo0MDc1Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJTcGFyYSBkZW5uYSB2eSIKKworIzogZ2l0azo0MDc2Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiUmVmZXJlbnNlciAoYmxhbmtzdGVnc2F2ZGVsYWQgbGlzdGEpOiIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAiR3JlbmFyICYgdGFnZ2FyOiIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIkFsbGEgcmVmZXJlbnNlciIKKworIzogZ2l0azo0MDc5Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIkFsbGEgKGxva2FsYSkgZ3JlbmFyIgorCisjOiBnaXRrOjQwODAKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiQWxsYSB0YWdnYXIiCisKKyM6IGdpdGs6NDA4MQorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIkFsbGEgZmrDpHJyc3DDpXJhbmRlIGdyZW5hciIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiSW5jaGVja25pbmdzaW5mbyAocmVndWxqw6RyYSB1dHRyeWNrKToiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkbDtnJmYXR0YXJlOiIKKworIzogZ2l0azo0MDg0Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiSW5jaGVja2FyZToiCisKKyM6IGdpdGs6NDA4NQorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZToiCisKKyM6IGdpdGs6NDA4NgorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJNb3RzdmFyYXIgYWxsYSBrcml0ZXJpZXIgZsO2ciBpbmNoZWNrbmluZ3NpbmZvIgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJNb3RzdmFyYXIgaW5nYSBrcml0ZXJpZXIgZsO2ciBpbmNoZWNrbmluZ3NpbmZvIgorCisjOiBnaXRrOjQwODgKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiw4RuZHJpbmdhciBhdiBmaWxlcjoiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiRmFzdCBzdHLDpG5nIgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIlJlZ3VsasOkcnQgdXR0cnljayIKKworIzogZ2l0azo0MDkxCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIlPDtmtzdHLDpG5nOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiSW5jaGVja2luZ3NkYXR1bSAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkZyw6VuOiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiVW50aWw6IgorbXNnc3RyICJUaWxsOiIKKworIzogZ2l0azo0MDk1Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkJlZ3LDpG5zYSBvY2gvZWxsZXIgaG9wcGEgw7Z2ZXIgZXR0IGFudGFsIHJldmlzaW9uZXIgKHBvc2l0aXZ0IGhlbHRhbCk6IgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIkFudGFsIGF0dCB2aXNhOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJBbnRhbCBhdHQgaG9wcGEgw7Z2ZXI6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJEaXZlcnNlIGFsdGVybmF0aXY6IgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIlN0cmlrdCBkYXR1bXNvcnRlcmluZyIKKworIzogZ2l0azo0MTAwCittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIk1hcmtlcmEgc2lkb2dyZW5hciIKKworIzogZ2l0azo0MTAxCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJCZWdyw6Ruc2EgdGlsbCBmw7Zyc3RhIGbDtnLDpGxkZXIiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJFbmtlbCBoaXN0b3JpayIKKworIzogZ2l0azo0MTAzCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIll0dGVybGlnYXJlIGFyZ3VtZW50IHRpbGwgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJBbmdlIGZpbGVyIG9jaCBrYXRhbG9nZXIgYXR0IHRhIG1lZCwgZW4gcGVyIHJhZDoiCisKKyM6IGdpdGs6NDEwNQorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJLb21tYW5kbyBmw7ZyIGF0dCBnZW5lcmVyYSBmbGVyIGluY2hlY2tuaW5nYXIgYXR0IHRhIG1lZDoiCisKKyM6IGdpdGs6NDIyOQorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogcmVkaWdlcmEgdnkiCisKKyM6IGdpdGs6NDIzNworbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICIgLSBrcml0ZXJpZXIgZsO2ciB2YWwgYXYgcmV2aXNpb25lciIKKworIzogZ2l0azo0MjQyCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJOYW1uIHDDpSB2eSIKKworIzogZ2l0azo0MzE3Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQW52w6RuZCAoRjUpIgorCisjOiBnaXRrOjQzNTUKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkZlbCBpIGFyZ3VtZW50IGbDtnIgdmFsIGF2IGluY2hlY2tuaW5nYXI6IgorCisjOiBnaXRrOjQ0MTAgZ2l0azo0NDYzIGdpdGs6NDkyNSBnaXRrOjQ5MzkgZ2l0azo2MjA5IGdpdGs6MTIzODggZ2l0azoxMjM4OQorbXNnaWQgIk5vbmUiCittc2dzdHIgIkluZ2V0IgorCisjOiBnaXRrOjUwMjIgZ2l0azo1MDI3Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiQXZrb21saW5nIgorCisjOiBnaXRrOjUwMjMKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiSW50ZSBhdmtvbWxpbmciCisKKyM6IGdpdGs6NTAzMCBnaXRrOjUwMzUKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiRsO2cmZhZGVyIgorCisjOiBnaXRrOjUwMzEKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIkludGUgZsO2cmZhZGVyIgorCisjOiBnaXRrOjUzMjUKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIkxva2FsYSDDpG5kcmluZ2FyIHNwYXJhZGUgaSBpbmRleGV0IG1lbiBpbnRlIGluY2hlY2thZGUiCisKKyM6IGdpdGs6NTM2MQorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJMb2thbGEgw6RuZHJpbmdhciwgZWogc3BhcmFkZSBpIGluZGV4ZXQiCisKKyM6IGdpdGs6NzEzNQorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgIm1lZCBtw6VuZ2EgZmxlcmEiCisKKyM6IGdpdGs6NzEzOAorbXNnaWQgIm1hbnkiCittc2dzdHIgIm3DpW5nYSIKKworIzogZ2l0azo3MzI5Cittc2dpZCAiVGFnczoiCittc2dzdHIgIlRhZ2dhcjoiCisKKyM6IGdpdGs6NzM0NiBnaXRrOjczNTIgZ2l0azo4ODI2Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJGw7Zyw6RsZGVyIgorCisjOiBnaXRrOjczNTcKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiQmFybiIKKworIzogZ2l0azo3MzY2Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJHcmVuIgorCisjOiBnaXRrOjczNjkKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJGw7ZsamVyIgorCisjOiBnaXRrOjczNzIKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiRsO2cmVnw6VyIgorCisjOiBnaXRrOjc5NjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiRmVsIHZpZCBow6RtdG5pbmcgYXYgZGlmZjogJXMiCisKKyM6IGdpdGs6ODY1MQorbXNnaWQgIkdvdG86IgorbXNnc3RyICJHw6UgdGlsbDoiCisKKyM6IGdpdGs6ODY3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJGw7Zya29ydGF0IFNIQTEtaWQgJXMgw6RyIHR2ZXR5ZGlndCIKKworIzogZ2l0azo4Njc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJSZXZpc2lvbmVuICVzIMOkciBpbnRlIGvDpG5kIgorCisjOiBnaXRrOjg2ODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiU0hBLWlkOnQgJXMgw6RyIGludGUga8OkbnQiCisKKyM6IGdpdGs6ODY5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJSZXZpc2lvbmVuICVzIGZpbm5zIGludGUgaSBkZW4gbnV2YXJhbmRlIHZ5biIKKworIzogZ2l0azo4ODMzIGdpdGs6ODg0OAorbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdHVtIgorCisjOiBnaXRrOjg4MzYKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiQmFybiIKKworIzogZ2l0azo4ODk5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIsOFdGVyc3TDpGxsIGdyZW5lbiAlcyBoaXQiCisKKyM6IGdpdGs6ODkwMQorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICJGcsOlbmtvcHBsYWQgaGVhZDoga2FuIGludGUgw6V0ZXJzdMOkbGxhIgorCisjOiBnaXRrOjkwMDYgZ2l0azo5MDEyCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiSG9wcGFyIMO2dmVyIHNhbW1hbnNsYWduaW5nc2luY2hlY2tuaW5nICIKKworIzogZ2l0azo5MDIxIGdpdGs6OTAyNgorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRmVsIHZpZCBow6RtdG5pbmcgYXYgcGF0Y2gtaWQgZsO2ciAiCisKKyM6IGdpdGs6OTAyMiBnaXRrOjkwMjcKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBzdGFubmFyXG4iCisKKyM6IGdpdGs6OTAzMiBnaXRrOjkwMzUgZ2l0azo5MDQzIGdpdGs6OTA1NyBnaXRrOjkwNjYKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJJbmNoZWNrbmluZyAiCisKKyM6IGdpdGs6OTAzNgorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIMOkciBzYW1tYSBwYXRjaCBzb21cbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDQKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgc2tpbGplciBzaWcgZnLDpW5cbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDYKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiU2tpbGxuYWQgbWVsbGFuIGluY2hlY2tuaW5nYXI6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1OCBnaXRrOjkwNjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGhhciAlcyBiYXJuIC0gc3Rhbm5hclxuIgorCisjOiBnaXRrOjkwODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgYXYgaW5jaGVja25pbmcgdGlsbCBmaWw6ICVzIgorCisjOiBnaXRrOjkwOTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJGZWwgdmlkIGrDpG1mw7ZyZWxzZSBhdiBpbmNoZWNrbmluZ2FyOiAlcyIKKworIzogZ2l0azo5MTM4Cittc2dpZCAiVG9wIgorbXNnc3RyICJUb3BwIgorCisjOiBnaXRrOjkxMzkKK21zZ2lkICJGcm9tIgorbXNnc3RyICJGcsOlbiIKKworIzogZ2l0azo5MTQ0Cittc2dpZCAiVG8iCittc2dzdHIgIlRpbGwiCisKKyM6IGdpdGs6OTE2OAorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHZW5lcmVyYSBwYXRjaCIKKworIzogZ2l0azo5MTcwCittc2dpZCAiRnJvbToiCittc2dzdHIgIkZyw6VuOiIKKworIzogZ2l0azo5MTc5Cittc2dpZCAiVG86IgorbXNnc3RyICJUaWxsOiIKKworIzogZ2l0azo5MTg4Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiVsOkbmQiCisKKyM6IGdpdGs6OTE5MCBnaXRrOjk0MDAKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIlV0ZGF0YWZpbDoiCisKKyM6IGdpdGs6OTE5NgorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHZW5lcmVyYSIKKworIzogZ2l0azo5MjM0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJGZWwgdmlkIGdlbmVyZXJpbmcgYXYgcGF0Y2g6IgorCisjOiBnaXRrOjkyNTcgZ2l0azo5Mzg4IGdpdGs6OTQ0NQorbXNnaWQgIklEOiIKK21zZ3N0ciAiSWQ6IgorCisjOiBnaXRrOjkyNjYKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIlRhZ2duYW1uOiIKKworIzogZ2l0azo5MjY5Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIlRhZ2dtZWRkZWxhbmRldCDDpHIgdmFsZnJpdHQiCisKKyM6IGdpdGs6OTI3MQorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiVGFnZ21lZGRlbGFuZGU6IgorCisjOiBnaXRrOjkyNzUgZ2l0azo5NDU0Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJTa2FwYSIKKworIzogZ2l0azo5MjkzCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJJbmdldCB0YWdnbmFtbiBhbmdhdnMiCisKKyM6IGdpdGs6OTI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlRhZ2dlbiBcIiVzXCIgZmlubnMgcmVkYW4iCisKKyM6IGdpdGs6OTMwNworbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkZlbCB2aWQgc2thcGFuZGUgYXYgdGFnZzoiCisKKyM6IGdpdGs6OTM5NworbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJLb21tYW5kbzoiCisKKyM6IGdpdGs6OTQwNQorbXNnaWQgIldyaXRlIgorbXNnc3RyICJTa3JpdiIKKworIzogZ2l0azo5NDIzCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZzoiCisKKyM6IGdpdGs6OTQ1MAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOYW1uOiIKKworIzogZ2l0azo5NDczCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQW5nZSBldHQgbmFtbiBmw7ZyIGRlbiBueWEgZ3JlbmVuIgorCisjOiBnaXRrOjk0NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi4gU2tyaXZhIMO2dmVyPyIKKworIzogZ2l0azo5NTQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyJJbmNoZWNrbmluZ2VuICVzIGZpbm5zIHJlZGFuIHDDpSBncmVuZW4gJXMgLS0gc2thbGwgZGVuIHZlcmtsaWdlbiBhcHBsaWNlcmFzICIKKyJww6Ugbnl0dD8iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJQbG9ja2FyIgorCisjOiBnaXRrOjk1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgbWlzc2x5Y2thZGVzIHDDpSBncnVuZCBhdiBsb2thbGEgw6RuZHJpbmdhciBpIGZpbGVuIFwiJXNcIi5cbiIKKyJDaGVja2EgaW4sIMOldGVyc3TDpGxsIGVsbGVyIHNwYXJhIHVuZGFuIChzdGFzaCkgZGluYSDDpG5kcmluZ2FyIG9jaCBmw7Zyc8O2ayAiCisiaWdlbi4iCisKKyM6IGdpdGs6OTU2NQorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIG1pc3NseWNrYWRlcyBww6UgZ3J1bmQgYXYgZW4gc2FtbWFuc2xhZ25pbmdza29uZmxpa3QuXG4iCisiVmlsbCBkdSBrw7ZyYSBnaXQgY2l0b29sIGbDtnIgYXR0IGzDtnNhIGRlbj8iCisKKyM6IGdpdGs6OTU4MSBnaXRrOjk2MzkKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIGluY2hlY2thZGUiCisKKyM6IGdpdGs6OTYwOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICJJbmNoZWNrbmluZ2VuICVzIGZpbm5zIGludGUgcMOlIGdyZW5lbiAlcyAtLSB2aWxsIGR1IHZlcmtsaWdlbiDDpW5ncmE/IgorCisjOiBnaXRrOjk2MTMKK21zZ2lkICJSZXZlcnRpbmciCittc2dzdHIgIsOFbmdyYXIiCisKKyM6IGdpdGs6OTYyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIG1lZCBhdHQgw6VuZ3JhIHDDpSBncnVuZCBhdiBsb2thbGEgw6RuZHJpbmdhciBpIGbDtmxqYW5kZSBmaWxlcjolcy4gIgorIkNoZWNrYSBpbiwgw6V0ZXJzdMOkbGwgZWxsZXIgc3BhcmEgdW5kYW4gKHN0YXNoKSBkaW5hIMOkbmRyaW5nYXIgb2NoIGbDtnJzw7ZrICIKKyJpZ2VuLiIKKworIzogZ2l0azo5NjI1Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgbWVkIGF0dCDDpW5ncmEgcMOlIGdydW5kIGF2IGVuIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0LlxuIgorIiBWaWxsIGR1IGvDtnJhIGdpdCBjaXRvb2wgZsO2ciBhdHQgbMO2c2EgZGVuPyIKKworIzogZ2l0azo5NjY4Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQmVrcsOkZnRhIMOldGVyc3TDpGxsbmluZyIKKworIzogZ2l0azo5NjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxhIGdyZW5lbiAlcyB0aWxsICVzPyIKKworIzogZ2l0azo5NjcyCittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlR5cCBhdiDDpXRlcnN0w6RsbG5pbmc6IgorCisjOiBnaXRrOjk2NzUKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiTWp1azogUsO2ciBpbnRlIHV0Y2hlY2tuaW5nIG9jaCBpbmRleCIKKworIzogZ2l0azo5Njc4Cittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJCbGFuZGFkOiBSw7ZyIGludGUgdXRjaGVja25pbmcsIMOldGVyc3TDpGxsIGluZGV4IgorCisjOiBnaXRrOjk2ODEKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkjDpXJkOiDDhXRlcnN0w6RsbCB1dGNoZWNrbmluZyBvY2ggaW5kZXhcbiIKKyIoZsO2cmthc3RhciBBTExBIGxva2FsYSDDpG5kcmluZ2FyKSIKKworIzogZ2l0azo5Njk4Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLDhXRlcnN0w6RsbGVyIgorCisjOiBnaXRrOjk3NTgKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkNoZWNrYXIgdXQiCisKKyM6IGdpdGs6OTgxMQorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkthbiBpbnRlIHRhIGJvcnQgZGVuIGp1c3QgbnUgdXRjaGVja2FkZSBncmVuZW4iCisKKyM6IGdpdGs6OTgxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiSW5jaGVja25pbmdhcm5hIHDDpSBncmVuZW4gJXMgZXhpc3RlcmFyIGludGUgcMOlIG7DpWdvbiBhbm5hbiBncmVuLlxuIgorIlZpbGwgZHUgdmVya2xpZ2VuIHRhIGJvcnQgZ3JlbmVuICVzPyIKKworIzogZ2l0azo5ODQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdnYXIgb2NoIGh1dnVkZW46ICVzIgorCisjOiBnaXRrOjk4NjUKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRlciIKKworIzogZ2l0azoxMDE2MQorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkZlbCB2aWQgbMOkc25pbmcgYXYgaW5mb3JtYXRpb24gb20gaW5jaGVja25pbmdzdG9wb2xvZ2k7IGluZm9ybWF0aW9uIG9tICIKKyJncmVuYXIgb2NoIGbDtnJlZ8OlZW5kZS9zZW5hcmUgdGFnZ2FyIGtvbW1lciBpbnRlIHZhcmEga29tcGxldHQuIgorCisjOiBnaXRrOjExMTM4Cittc2dpZCAiVGFnIgorbXNnc3RyICJUYWdnIgorCisjOiBnaXRrOjExMTQyCittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjI1Cittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIlRlY2tlbnNuaXR0c3bDpGxqYXJlIGbDtnIgR2l0ayIKKworIzogZ2l0azoxMTI0MgorbXNnaWQgIkIiCittc2dzdHIgIkYiCisKKyM6IGdpdGs6MTEyNDUKK21zZ2lkICJJIgorbXNnc3RyICJLIgorCisjOiBnaXRrOjExMzYzCittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJBbHRlcm5hdGl2IGbDtnIgaW5jaGVja25pbmdzbGlzdHZ5IgorCisjOiBnaXRrOjExMzY2Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJNYXhpbWFsIGdyYWZicmVkZCAocmFkZXIpIgorCisjOiBnaXRrOjExMzcwCisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKCUgYXYgcnV0YSkiCisKKyM6IGdpdGs6MTEzNzMKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIlZpc2EgbG9rYWxhIMOkbmRyaW5nYXIiCisKKyM6IGdpdGs6MTEzNzYKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJWw6RsaiBTSEExIChsw6RuZ2QpIGF1dG9tYXRpc2t0IgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiRMO2bGogZmrDpHJyLXJlZmVyZW5zZXIiCisKKyM6IGdpdGs6MTEzODQKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGRpZmZ2eSIKKworIzogZ2l0azoxMTM4NgorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJCbGFua3N0ZWcgZsO2ciB0YWJ1bGF0b3J0ZWNrZW4iCisKKyM6IGdpdGs6MTEzODkKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICJWaXNhIG7DpHJsaWdnYW5kZSB0YWdnYXIvaHV2dWRlbiIKKworIzogZ2l0azoxMTM5MgorbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIk1heGltYWx0IGFudGFsIHRhZ2dhci9odXZ1ZGVuIGF0dCB2aXNhIgorCisjOiBnaXRrOjExMzk1Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJCZWdyw6Ruc2EgZGlmZiB0aWxsIGxpc3RhZGUgc8O2a3bDpGdhciIKKworIzogZ2l0azoxMTM5OAorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJTdMO2ZCBmw7ZyIGZpbHNwZWNpZmlrYSB0ZWNrZW5rb2RuaW5nYXIiCisKKyM6IGdpdGs6MTE0MDQgZ2l0azoxMTU1MQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiRXh0ZXJudCBkaWZmLXZlcmt0eWciCisKKyM6IGdpdGs6MTE0MDUKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlbDpGxqLi4uIgorCisjOiBnaXRrOjExNDEwCittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJBbGxtw6RubmEgaW5zdMOkbGxuaW5nYXIiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIkFudsOkbmQgdGVtYSBww6UgZsO2bnN0ZXJlbGVtZW50IgorCisjOiBnaXRrOjExNDE1Cittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKMOkbmRyaW5nZW4ga3LDpHZlciBvbXN0YXJ0KSIKKworIzogZ2l0azoxMTQxNworbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIoZsO2ciBuw6RydmFyYW5kZSBpbnRlIHRpbGxnw6RuZ2xpZ3QpIgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkbDpHJnZXI6IHRyeWNrIGbDtnIgYXR0IHbDpGxqYSIKKworIzogZ2l0azoxMTQzMQorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiR3LDpG5zc25pdHQiCisKKyM6IGdpdGs6MTE0MzIKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImdyw6Ruc3NuaXR0IgorCisjOiBnaXRrOjExNDM1Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiQmFrZ3J1bmQiCisKKyM6IGdpdGs6MTE0MzYgZ2l0azoxMTQ2NgorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgImJha2dydW5kIgorCisjOiBnaXRrOjExNDM5Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiRsO2cmdydW5kIgorCisjOiBnaXRrOjExNDQwCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAiZsO2cmdydW5kIgorCisjOiBnaXRrOjExNDQzCittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiBnYW1sYSByYWRlciIKKworIzogZ2l0azoxMTQ0NAorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIGdhbWxhIHJhZGVyIgorCisjOiBnaXRrOjExNDQ4Cittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBueWEgcmFkZXIiCisKKyM6IGdpdGs6MTE0NDkKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAiZGlmZiBueWEgcmFkZXIiCisKKyM6IGdpdGs6MTE0NTMKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogZGVsaHV2dWQiCisKKyM6IGdpdGs6MTE0NTUKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIGRlbGh1dnVkIgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIk1hcmtlcmFkIHJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMTQ2MQorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIm1hcmtlcmFkIHJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMTQ2NQorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiTWFya2VyYWQgYmFrZ3J1bmQiCisKKyM6IGdpdGs6MTE0NzQKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJUZWNrZW5zbml0dDogdHJ5Y2sgZsO2ciBhdHQgdsOkbGphIgorCisjOiBnaXRrOjExNDc2Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJIdXZ1ZHRlY2tlbnNuaXR0IgorCisjOiBnaXRrOjExNDc3Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlRlY2tlbnNuaXR0IGbDtnIgZGlmZnZpc25pbmciCisKKyM6IGdpdGs6MTE0NzgKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUZWNrZW5zbml0dCBmw7ZyIGFudsOkbmRhcmdyw6Ruc3NuaXR0IgorCisjOiBnaXRrOjExNTAwCittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiSW5zdMOkbGxuaW5nYXIgZsO2ciBHaXRrIgorCisjOiBnaXRrOjExNTA5Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiQWxsbcOkbnQiCisKKyM6IGdpdGs6MTE1MTAKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIkbDpHJnZXIiCisKKyM6IGdpdGs6MTE1MTEKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiVGVja2Vuc25pdHQiCisKKyM6IGdpdGs6MTE1NjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiB2w6RsaiBmw6RyZyBmw7ZyICVzIgorCisjOiBnaXRrOjEyMDc0Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiR2l0ayBrYW4gdHl2w6RyciBpbnRlIGvDtnJhIG1lZCBkZW5uYSB2ZXJzaW9uIGF2IFRjbC9Uay5cbiIKKyIgR2l0ayBrcsOkdmVyIMOldG1pbnN0b25lIFRjbC9UayA4LjQuIgorCisjOiBnaXRrOjEyMjg0Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiSGl0dGFyIGluZ2V0IGdpdC1hcmtpdiBow6RyLiIKKworIzogZ2l0azoxMjMzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiVHZldHlkaWd0IGFyZ3VtZW50IFwiJXNcIjogYsOlZGUgcmV2aXNpb24gb2NoIGZpbG5hbW4iCisKKyM6IGdpdGs6MTIzNDMKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJGZWxha3RpZ2EgYXJndW1lbnQgdGlsbCBnaXRrOiIKKworI34gbXNnaWQgIm1jIgorI34gbXNnc3RyICJtYyIKKworI34gbXNnaWQgIm5leHQiCisjfiBtc2dzdHIgIm7DpHN0YSIKKworI34gbXNnaWQgInByZXYiCisjfiBtc2dzdHIgImbDtnJlZyIKKworI34gbXNnaWQgIkNEYXRlIgorI34gbXNnc3RyICJTa2FwYXQgZGF0dW0iCisKKyN+IG1zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorI34gbXNnc3RyICJIaXR0YXIgaW50ZSBnaXQta2F0YWxvZ2VuIFwiJXNcIi4iCisKKyN+IG1zZ2lkICJTSEExIElEOiAiCisjfiBtc2dzdHIgIlNIQTEtaWQ6ICIKKworI34gbXNnaWQgIi0gc3RvcHBpbmdcbiIKKyN+IG1zZ3N0ciAiLSBzdGFubmFyXG4iCisKKyN+IG1zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCisjfiBtc2dzdHIgIlRhZ2cvaHV2dWQgJXMgw6RyIG9rw6RudCIKKworI34gbXNnaWQgIi9cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0LCBvciByZWRvIGZpbmQiCisjfiBtc2dzdHIgIi9cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYsIGVsbGVyIHPDtmsgcMOlIG55dHQiCisKKyN+IG1zZ2lkICJOYW1lIgorI34gbXNnc3RyICJOYW1uIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vdmkucG8gYi9naXRrLWdpdC9wby92aS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY3NDk4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vdmkucG8KQEAgLTAsMCArMSwxMzc5IEBACisjIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zIGZvciBnaXRrIHBhY2thZ2UuCisjIELhuqNuIGThu4tjaCB0aeG6v25nIFZp4buHdCBjaG8gZ8OzaSBnaXRrLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiwgMjAxMywgMjAxNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGsgQEBHSVRfVkVSU0lPTkBAXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTA5LTE1IDA3OjMzKzA3MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVmlldG5hbWVzZSA8dHJhbnNsYXRpb24tdGVhbS12aUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHZpXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKyJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS43XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgZGFuaCBzw6FjaCBjw6FjIHThuq1wLXRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbjoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICJUw7QgbcOgdSBjaOG7ryIKKworIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMCBnaXRrOjgyNTMKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgIsSQw6FuaCBk4bqldSBjaOG7ryIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCDEkWnhu4NtIHjDqXQgZHV54buHdDoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRo4buxYyBoaeG7h24gbOG7h25oIC0tYXJnc2NtZDoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiQ2jGsGEgY2jhu41uIHThuq1wIHRpbjogLS1tZXJnZSDEkcOjIGNo4buJIMSR4buLbmggbmjGsG5nIGtow7RuZyBjw7MgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luLiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIkNoxrBhIGNo4buNbiB04bqtcCB0aW46IC0tbWVyZ2UgxJHDoyBjaOG7iSDEkeG7i25oIG5oxrBuZyBraMO0bmcgY8OzIHThuq1wIHRpbiBjaMawYSBow7JhIHRy4buZbiAiCisidHJvbmcgZ2nhu5tpIGjhuqFuIHThuq1wIHRpbi4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdGjhu7FjIGhp4buHbiBs4buHbmggZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAixJBhbmcgxJHhu41jIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIsSQYW5nIMSR4buNYyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW/igKYiCisKKyM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjgKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJDaMawYSBjaOG7jW4gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkTDsm5nIGzhu4duaCIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2gga+G6v3QgeHXhuqV0IHThu6sgbOG7h25oIGdpdCBsb2c6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJLaMO0bmcgY8OzIHRow7RuZyB0aW4gduG7gSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8iCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAixJDhu5NuZyDDvSIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIlRow7RpIgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICJD4bqtcCBuaOG6rXQiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIlThuqNpIGzhuqFpIgorCisjOiBnaXRrOjIwNzEKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIsSQ4buNYyBs4bqhaSB0aGFtIGNoaeG6v3UiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkxp4buHdCBrw6ogY8OhYyB0aGFtIGNoaeG6v3UiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJLaOG7n2kgY2jhuqF5IGdpdCBndWkiCisKKyM6IGdpdGs6MjA3NgorbXNnaWQgIiZRdWl0IgorbXNnc3RyICJUaG/DoXQiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICJDaMOtbmgiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiVMO5eSB0aMOtY2giCisKKyM6IGdpdGs6MjA3OQorbXNnaWQgIiZFZGl0IgorbXNnc3RyICJDaOG7iW5oIHPhu61hIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIlRow6ptIHRyw6xuaCBiw6B5IG3hu5tp4oCmIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICJT4butYSBjw6FjaCB0csOsbmggYsOgeeKApiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJYw7NhIGPDoWNoIHRyw6xuaCBiw6B5IgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiTeG7jWkgdOG6rXAgdGluIgorCisjOiBnaXRrOjIwODMgZ2l0azo0MDY3Cittc2dpZCAiJlZpZXciCittc2dzdHIgIlRyw6xuaCBiw6B5IgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICJHaeG7m2kgdGhp4buHdSB24buBIGdpdGsiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICJU4buVIGjhu6NwIHBow61tIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIlRy4bujIGdpw7pwIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIkjDoG5nIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJUw6xtIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgImPDsyBjaOG7qWE6IgorCisjOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgIsSRYW5nIGNo4bqhbSDEkcaw4budbmcgZOG6q246IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInRow6ptL2fhu6EgYuG7jyBjaHXhu5dpOiIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc3OQorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAibmjhu69uZyBkw7JuZyB0aGF5IMSR4buVaSBraOG7m3AgbeG6q3U6IgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJDaMOtbmggeMOhYyIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJCcXVhSHQiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiQlRDUSIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiTeG7jWkgdHLGsOG7nW5nIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiTuG7mWkgZHVuZyBjaMOtbmgiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NjkxNiBnaXRrOjczODkKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiR2hpIGNow7oiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJUw6FjIGdp4bqjIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIk5nxrDhu51pIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiVMOsbSBraeG6v20iCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIlNvIHPDoW5oIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiUGhpw6puIGLhuqNuIGPFqSIKKworIzogZ2l0azoyMzYyCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIlBoacOqbiBi4bqjbiBt4bubaSIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiQ8OhYyBkw7JuZyBj4bunYSBu4buZaSBkdW5nIgorCisjOiBnaXRrOjIzNzQKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJLaMO0bmcgeMOpdCDEkeG6v24gdGhheSDEkeG7lWkgZG8ga2hv4bqjbmcgdHLhuq9uZyIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICJLaMOhYyBiaeG7h3QgdGhlbyBkw7JuZyIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIlbDoSIKKworIzogZ2l0azoyNDQ3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiQ8OieSIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiU28gc8OhbmggY8OhaSBuw6B5IC0+IGPDoWkgxJHDoyBjaOG7jW4iCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIlNvIHPDoW5oIGPDoWkgxJHDoyBjaOG7jW4gLT4gY8OhaSBuw6B5IgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiVOG6oW8gbWnhur9uZyB2w6EiCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJU4bqhbyB0aOG6uyIKKworIzogZ2l0azoyNjIxIGdpdGs6OTM3MQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJHaGkgbOG6p24gY2h1eeG7g24gZ2lhbyByYSB04bqtcCB0aW4iCisKKyM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiVOG6oW8gbmjDoW5oIG3hu5tpIgorCisjOiBnaXRrOjI2MjMKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6B5IgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLEkOG6t3QgbOG6oWkgSEVBRCBj4bunYSBuaMOhbmggdsOgbyDEkcOieSIKKworIzogZ2l0azoyNjI1Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAixJDDoW5oIGThuqV1IGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSIKKworIzogZ2l0azoyNjI2Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIlF1YXkgbOG6oWkgduG7iyB0csOtIGThuqV1IgorCisjOiBnaXRrOjI2MjcKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiVMOsbSBjb24gY2jDoXUgY+G7p2EgY8OhaSBuw6B5IHbDoCBjw6FpIMSRw6MgxJHDoW5oIGThuqV1IgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiU28gc8OhbmggduG7m2kgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIMSRw6FuaCBk4bqldSIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJTbyBzw6FuaCBjw6FpIG7DoHkgLT4gbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIMSRw6FuaCBk4bqldSIKKworIzogZ2l0azoyNjMwIGdpdGs6MjY0MQorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICJTbyBzw6FuaCBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgxJHDoW5oIGThuqV1IC0+IGPDoWkgbsOgeSIKKworIzogZ2l0azoyNjMxCittc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgorbXNnc3RyICJIb8OgbiBs4bqhaSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiTOG6pXkgcmEgbmjDoW5oIG7DoHkiCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiR+G7oSBi4buPIG5ow6FuaCBuw6B5IgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICJDaMOpcCB0w6puIG5ow6FuaCIKKworIzogZ2l0azoyNjU2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJDxaluZyB0w7Qgc8OhbmcgbsOzIgorCisjOiBnaXRrOjI2NTcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJDaOG7iSB0w7Qgc8OhbmcgY8OhaSBuw6B5IgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJkaWZmIHThu6sgYsOqbiBuZ2/DoGkiCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIlhlbSBjw7RuZyB0cuG6oW5nIGzhuqduIGNodXnhu4NuIGdpYW8gY2hhIG3hurkiCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAiQ2jDqXAgxJHGsOG7nW5nIGThuqtuIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIkhp4buDbiB0aOG7iyBuZ3V5w6puIGfhu5FjIGPhu6dhIGTDsm5nIG7DoHkiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiQ2jhuqF5IGzhu4duaCBnaXQgZ3VpIGJsYW1lIGNobyBkw7JuZyBuw6B5IgorCisjOiBnaXRrOjMwMTQKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0g4bupbmcgZOG7pW5nIMSR4buDIHhlbSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gZMOgbmggY2hvIGdpdFxuIgorIlxuIgorIkLhuqNuIHF1eeG7gW4gwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiRMO5bmcgdsOgIHBow6JuIHBo4buRaSBs4bqhaSBwaOG6p24gbeG7gW0gbsOgeSB0aGVvIGPDoWMgxJFp4buBdSBraG/huqNuIGPhu6dhIEdp4bqleSBQaMOpcCBDw7RuZyBHTlUiCisKKyM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIsSQw7NuZyIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlThu5UgaOG7o3AgcGjDrW0gZ2l0ayIKKworIzogZ2l0azozMDQ2Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJU4buVIGjhu6NwIHBow61tIGdpdGs6IgorCisjOiBnaXRrOjMwNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdFRob8OhdCIKKworIzogZ2l0azozMDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdMSQw7NuZyBj4butYSBz4buVIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHRDaHV54buDbiDEkeG6v24gbOG6p24gY2h1eeG7g24gZ2lhbyDEkeG6p3UgdGnDqm4iCisKKyM6IGdpdGs6MzA1MQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdENodXnhu4NuIMSR4bq/biBs4bqnbiBjaHV54buDbiBnaWFvIGN14buRaSIKKworIzogZ2l0azozMDUyCittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXA+LCBwLCBrXHREaSBjaHV54buDbiBsw6puIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA1MworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwgalx0RGkgY2h1eeG7g24geHXhu5FuZyBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjMwNTQKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGhcdFF1YXkgdHLhu58gbOG6oWkgZGFuaCBzw6FjaCBs4buLY2ggc+G7rSIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdERpIGNodXnhu4NuIHRp4bq/cCB0cm9uZyBkYW5oIHPDoWNoIGzhu4tjaCBz4butIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiIgorIjwlcy1uPlx0xJDhur9uIGNoYSB0aOG7qSBuIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gaGnhu4duIHThuqFpIHRyb25nIGRhbmggc8OhY2ggbOG7i2NoIHPhu60iCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0RGkgY2h1eeG7g24gbMOqbiBt4buZdCB0cmFuZyB0cm9uZyBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx0RGkgY2h1eeG7g24geHXhu5FuZyBt4buZdCB0cmFuZyB0cm9uZyBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHRDdeG7mW4gbMOqbiB0csOqbiBjw7luZyBj4bunYSBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0Q3Xhu5luIHh14buRbmcgZMaw4bubaSBjw7luZyBj4bunYSBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx0Q3Xhu5luIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyBsw6puIG3hu5l0IGTDsm5nIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdEN14buZbiBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8geHXhu5FuZyBt4buZdCBkw7JuZyIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdEN14buZbiBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8gbMOqbiBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdEN14buZbiBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8geHXhu5FuZyBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHRUw6xtIHbhu4EgcGjDrWEgc2F1IChoxrDhu5tuZyBsw6puIHRyw6puLCBs4bqnbiBjaHV54buDbiBnaWFvIHNhdSBuw6B5KSIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIiIKKyI8U2hpZnQtRG93bj5cdFTDrG0gduG7gSBwaMOtYSB0csaw4bubYyAoaMaw4bubbmcgeHXhu5FuZyBkxrDhu5tpLCBs4bqnbiBjaHV54buDbiBnaWFvIHRyxrDhu5tjIMSRw6J5KSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgbMOqbiBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgbMOqbiBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGFjZT5cdFx0Q3Xhu5luIHBo4bqnbiB0csOsbmggYsOgeSBkaWZmIHh14buRbmcgbeG7mXQgdHJhbmciCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgbMOqbiAxOCBkw7JuZyIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0Q3Xhu5luIHBo4bqnbiB0csOsbmggYsOgeSBkaWZmIHh14buRbmcgMTggZMOybmciCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0VMOsbSBraeG6v20iCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHREaSBjaHV54buDbiDEkeG6v24gY2jhu5cgZ+G6t3Aga+G6vyB0aeG6v3AiCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHRcdERpIGNodXnhu4NuIMSR4bq/biBjaOG7lyBn4bq3cCBr4bq/IHRp4bq/cCIKKworIzogZ2l0azozMDc1Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx0Q2h1eeG7g24gxJHhur9uIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0xJDGsGEgY29uIHRy4buPIGNodeG7mXQgdsOgbyDDtCB0w6xtIGtp4bq/bSIKKworIzogZ2l0azozMDc3Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdERpIGNodXnhu4NuIMSR4bq/biBjaOG7lyBn4bq3cCBr4bq/IHRyxrDhu5tjIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdEN14buZbiBwaOG6p24gdHLDrG5oIGLDoHkgZGlmZiBzYW5nIHThuq1wLXRpbiBr4bq/IgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRUw6xtIMSR4bq/biBjaOG7lyBraMOhYyBiaeG7h3Qga+G6vyB0aeG6v3AiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRUw6xtIMSR4bq/biBjaOG7lyBraMOhYyBiaeG7h3Qga+G6vyB0csaw4bubYyIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdFTEg25nIGPhu6EgY2jhu68iCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdFTEg25nIGPhu6EgY2jhu68iCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHRHaeG6o20gY+G7oSBjaOG7ryIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHRHaeG6o20gY+G7oSBjaOG7ryIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0Q+G6rXAgbmjhuq10IgorCisjOiBnaXRrOjM1NTAgZ2l0azozNTU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB04bqhbyB0aMawIG3hu6VjIHThuqFtICVzOiIKKworIzogZ2l0azozNTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkzhu5dpIGNow6BvIGjhu49pIFwiJXNcIiB04burICVzOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJs4buHbmggZ+G6t3AgbOG7l2k6IgorCisjOiBnaXRrOjM3ODQKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiS2jDtG5nIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIG5oxrAgduG6rXkiCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogbOG7h25oIGfhurdwIGzhu5dpOiIKKworIzogZ2l0azozODI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buZYyDEkeG6p3UgY+G7p2EgaMOyYSB0cuG7mW46ICVzIgorCisjIHRjbC1mb3JtYXQKKyM6IGdpdGs6MzgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIGNo4buJIG3hu6VjOiAlcyIKKworIzogZ2l0azozODYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGto4bufaSBjaOG6oXkgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozODY1IGdpdGs6Njc1NAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAixJBhbmcgdMOsbSBraeG6v20iCisKKyM6IGdpdGs6Mzg5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGNo4bqheSBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICJEw7JuZyDEkeG6v24gdOG7qyBs4bqnbiBjaHV54buDbiBnaWFvICVzLCBjw6FpIG3DoCBraMO0bmcgdHJvbmcgdHLDrG5oIGLDoHkgbsOgeSIKKworIzogZ2l0azozOTM5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiQuG7mSB0csOsbmggYsOgeSBkaWZmIHThu6sgYsOqbiBuZ2/DoGkgZ+G6t3AgbOG7l2k6IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAixJDhu4tuaCBuZ2jEqWEgY8OhY2ggdHLDrG5oIGLDoHkgZ2l0ayIKKworIzogZ2l0azo0MDc0Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJOaOG7myBjw6FjaCB0csOsbmggYsOgeSBuw6B5IgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJUaGFtIGNoaeG6v3UgKGRhbmggc8OhY2ggbmfEg24gY8OhY2ggYuG6sW5nIGThuqV1IGPDoWNoKToiCisKKyM6IGdpdGs6NDA3NgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIk5ow6FuaCAmIHRo4bq7OiIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIk3hu41pIHRoYW0gY2hp4bq/dSIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIk3hu41pIG5ow6FuaCAobuG7mWkgYuG7mSkiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJN4buNaSB0aOG6uyIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiTeG7jWkgbmjDoW5oIHJlbW90ZS10cmFja2luZyIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiVGjDtG5nIHRpbiBjaHV54buDbiBnaWFvIChiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkpOiIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiVMOhYyBnaeG6ozoiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIk5nxrDhu51pIGNodXnhu4NuIGdpYW86IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkNow7ogdGjDrWNoIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW86IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiS2jhu5twIG3hu41pIMSRaeG7gXUga2nhu4duIFRow7RuZyB0aW4gQ2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiS2jhu5twIGtow7RuZyDEkWnhu4F1IGtp4buHbiBUaMO0bmcgdGluIENodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6NDA4NworbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICLEkOG7lWkgdGjDoG5oIFThuq1wIHRpbjoiCisKKyM6IGdpdGs6NDA4OAorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiQ2h14buXaSBj4buRIMSR4buLbmgiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiQmnhu4N1IHRo4bupYyBjaMOtbmggcXV5IgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiQ2h14buXaSB0w6xtIGtp4bq/bToiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIk5nw6B5IGNodXnhu4NuIGdpYW8gKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJL4buDIHThu6s6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIsSQ4bq/bjoiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJHaeG7m2kgaOG6oW4gdsOgL2hv4bq3YyBi4buPIHPhu5EgY+G7p2EgxJFp4buDbSB4w6l0IChz4buRIG5ndXnDqm4gw6JtKToiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiU+G7kSBsxrDhu6NuZyBoaeG7g24gdGjhu4s6IgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIlPhu5EgbMaw4bujbmcgc+G6vSBi4buPIHF1YToiCisKKyM6IGdpdGs6NDA5NworbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIlTDuXkgY2jhu41uIGjhu5duIGjhu6NwOiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJT4bqvcCB44bq/cCBjaOG6t3QgY2jhur0gdGhlbyBuZ8OgeSIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIsSQw6FuaCBk4bqldSBjw6FjIGPhuqFuaCBuaMOhbmgiCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiR2nhu5tpIGjhuqFuIHRow6BuaCBjaGEgbeG6uSDEkeG6p3UgdGnDqm4iCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJM4buLY2ggc+G7rSBk4bqhbmcgxJHGoW4gZ2nhuqNuIgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAixJDhu5FpIHPhu5EgYuG7lSB4dW5nIGNobyBs4buHbmggZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJOaOG6rXAgdsOgbyBjw6FjIHThuq1wIHRpbiB2w6AgdGjGsCBt4bulYyBiYW8gZ+G7k20sIG3hu5dpIGTDsm5nIG3hu5l0IGPDoWk6IgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiTOG7h25oIHThuqFvIHJhIG5oaeG7gXUgbOG6p24gY2h1eeG7g24gZ2lhbyBoxqFuIGJhbyBn4buTbToiCisKKyM6IGdpdGs6NDIyOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogc+G7rWEgY8OhY2ggdHLDrG5oIGLDoHkiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSB0acOqdSBjaHXhuqluIGNo4buNbiDEkWnhu4NtIHjDqXQgZHV54buHdCIKKworIzogZ2l0azo0MjQxCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJUw6puIGPDoWNoIHRyw6xuaCBiw6B5IgorCisjOiBnaXRrOjQzMTYKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICLDgXAgZOG7pW5nIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiTOG7l2kgdHJvbmcgY8OhYyDEkeG7kWkgc+G7kSBjaOG7jW4gY2h1eeG7g24gZ2lhbzoiCisKKyM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiS2jDtG5nIgorCisjOiBnaXRrOjUwMjEgZ2l0azo1MDI2Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiQ29uIGNow6F1IgorCisjOiBnaXRrOjUwMjIKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiS2jDtG5nIGPDsyBjb24gY2jDoXUiCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiVOG7lSB0acOqbiBjaHVuZyIKKworIzogZ2l0azo1MDMwCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJLaMO0bmcgY8OzIGNodW5nIHThu5UgdGnDqm4iCisKKyM6IGdpdGs6NTMyNAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiIgorIkPDsyB0aGF5IMSR4buVaSBu4buZaSBi4buZIMSRw6MgxJHGsOG7o2MgxJHGsGEgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMsIG5oxrBuZyBjaMawYSDEkcaw4bujYyBjaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiQ8OzIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5ksIG5oxrBuZyBjaMawYSDEkcaw4bujYyDEkcawYSB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAidsOgIG5oaeG7gXUgbuG7r2EiCisKKyM6IGdpdGs6NzEzNworbXNnaWQgIm1hbnkiCittc2dzdHIgIm5oaeG7gXUiCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUaOG6uzoiCisKKyM6IGdpdGs6NzM0NSBnaXRrOjczNTEgZ2l0azo4ODI1Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJDaGEiCisKKyM6IGdpdGs6NzM1NgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJDb24iCisKKyM6IGdpdGs6NzM2NQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiTmjDoW5oIgorCisjOiBnaXRrOjczNjgKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICLEkOG7qW5nIHNhdSIKKworIzogZ2l0azo3MzcxCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIsSQ4bupbmcgdHLGsOG7m2MiCisKKyMgdGNsLWZvcm1hdAorIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkzhu5dpIGzhuqV5IGRpZmY6ICVzIgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiTmjhuqN5IHThu5tpOiIKKworIzogZ2l0azo4NjcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIsSQ4buLbmggZGFuaCBTSEExIGThuqFuZyBuZ+G6r24gJXMgbMOgIGNoxrBhIMSR4bunIHLDtSByw6BuZyIKKworIzogZ2l0azo4Njc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJLaMO0bmcgaGnhu4N1IMSRaeG7g20geMOpdCBkdXnhu4d0ICVzIgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSDEkeG7i25oIGRhbmggU0hBMSAlcyIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIsSQaeG7g20gJXMga2jDtG5nIOG7nyB0cm9uZyBwaOG6p24gaGnhu4NuIHRo4buLIGhp4buHbiB04bqhaSIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgIk5nw6B5IgorCisjOiBnaXRrOjg4MzUKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiQ29uIGNow6F1IgorCisjOiBnaXRrOjg4OTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAixJDhurd0IGzhuqFpIG5ow6FuaCAlcyB04bqhaSDEkcOieSIKKworIzogZ2l0azo4OTAwCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIkhlYWQgxJHDoyBi4buLIHTDoWNoIHLhu51pOiBraMO0bmcgdGjhu4MgxJHhurd0IGzhuqFpIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiQuG7jyBxdWEgbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbiAiCisKKyM6IGdpdGs6OTAyMCBnaXRrOjkwMjUKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBs4bqleSBJRCBtaeG6v25nIHbDoSBjaG8gIgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gZOG7q25nXG4iCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJDb21taXQgIgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBsw6AgY8O5bmcgbeG7mXQgbWnhur9uZyB2w6EgduG7m2lcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIga2jDoWMgYmnhu4d0IHThu6tcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDUKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiS2jDoWMgYmnhu4d0IGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCk6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGPDsyAlcyBjb24gLSBk4burbmdcbiIKKworIzogZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkfhurdwIGzhu5dpIHRyb25nIHF1w6EgdHLDrG5oIGdoaSBs4bqnbiBjaHV54buDbiBnaWFvIHbDoG8gdOG6rXAgdGluOiAlcyIKKworIzogZ2l0azo5MDkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHNvIHPDoW5oIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW86ICVzIgorCisjOiBnaXRrOjkxMzcKK21zZ2lkICJUb3AiCittc2dzdHIgIsSQ4buJbmgiCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgIlThu6siCisKKyM6IGdpdGs6OTE0MworbXNnaWQgIlRvIgorbXNnc3RyICLEkOG6v24iCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJU4bqhbyBtaeG6v25nIHbDoSIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIlThu6s6IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgIsSQ4bq/bjoiCisKKyM6IGdpdGs6OTE4NworbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIsSQ4bqjbyBuZ8aw4bujYyIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiVOG6rXAgdGluIGvhur90IHh14bqldDoiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJU4bqhbyIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6oW8gbWnhur9uZyB2w6E6IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiTcOjIHPhu5E6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIlTDqm4gdGjhurs6IgorCisjOiBnaXRrOjkyNjgKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiR2hpIGNow7ogdGjhursgY2jhu4kgbMOgIHTDuXkgY2jhu41uIgorCisjOiBnaXRrOjkyNzAKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIkdoaSBjaMO6IGNobyB0aOG6uzoiCisKKyM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlThuqFvIgorCisjOiBnaXRrOjkyOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkNoxrBhIGNo4buJIHJhIHTDqm4gY+G7p2EgdGjhursiCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlRo4bq7IOKAnCVz4oCdIMSRw6MgY8OzIHPhurVuIHLhu5NpIgorCisjOiBnaXRrOjkzMDYKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6oW8gdGjhurs6IgorCisjOiBnaXRrOjkzODIKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiTOG7h25oOiIKKworIzogZ2l0azo5MzkwCittc2dpZCAiV3JpdGUiCittc2dzdHIgIkdoaSIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJH4bq3cCBs4buXaSB0cm9uZyBxdcOhIHRyw6xuaCBnaGkgY2h1eeG7g24gZ2lhbzoiCisKKyM6IGdpdGs6OTQzNQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJUw6puOiIKKworIzogZ2l0azo5NDU4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiVnVpIGzDsm5nIGNo4buJIMSR4buLbmggdMOqbiBjaG8gbmjDoW5oIG3hu5tpIgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgcuG7k2kuIEdoaSDEkcOoPyIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyJM4bqnbiBjaHV54buDbiBnaWFvICVzIMSRw6Mgc+G6tW4gxJHGsOG7o2MgYmFvIGfhu5NtIHRyb25nIG5ow6FuaCAlcyAtLSBi4bqhbiBjw7MgdGjhu7FjIHPhu7EgbXXhu5FuICIKKyLDoXAgZOG7pW5nIGzhuqFpIG7DsyBraMO0bmc/IgorCisjOiBnaXRrOjk1MzUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAixJBhbmcgY2hlcnJ5LXBpY2siCisKKyM6IGdpdGs6OTU0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBn4bq3cCBs4buXaSBi4bufaSB2w6wgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIHThuq1wIHRpbiDigJwlc+KAnS5cbiIKKyJYaW4gaMOjeSBjaHV54buDbiBnaWFvLCByZXNldCBoYXkgc3Rhc2ggY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbiBzYXUgxJHDsyB0aOG7rSBs4bqhaS4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIGfhurdwIGzhu5dpIGLhu59pIHbDrCB4dW5nIMSR4buZdCB0cm9uZyBow7JhIHRy4buZbi5cbiIKKyJC4bqhbiBjw7MgbXXhu5FuIGNo4bqheSBs4buHbmgg4oCcZ2l0IGNpdG9vbOKAnSDEkeG7gyBnaeG6o2kgcXV54bq/dCB24bqlbiDEkeG7gSBuw6B5IGtow7RuZz8iCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6OTU5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICIiCisiTOG6p24gY2h1eeG7g24gZ2lhbyAlcyBraMO0bmcgxJHGsOG7o2MgYmFvIGfhu5NtIHRyb25nIG5ow6FuaCAlcyAtLSBi4bqhbiBjw7MgdGjhu7FjIHPhu7EgbXXhu5FuICIKKyLigJxyZXZlcnTigJ0gbsOzIGtow7RuZz8iCisKKyM6IGdpdGs6OTU5OAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAixJBhbmcgaG/DoG4gdMOhYyIKKworIzogZ2l0azo5NjA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJSZXZlcnQgZ+G6t3AgbOG7l2kgYuG7n2kgdsOsIHThuq1wIHRpbiBzYXUgxJHDoyDEkcaw4bujYyB0aGF5IMSR4buVaSBu4buZaSBi4buZOiVzXG4iCisiWGluIGjDo3kgY2jhuqF5IGzhu4duaCDigJxjb21taXTigJ0sIOKAnHJlc2V04oCdIGhv4bq3YyDigJxzdGFzaOKAnSBy4buTaSB0aOG7rSBs4bqhaS4iCisKKyM6IGdpdGs6OTYxMAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiUmV2ZXJ0IGfhurdwIGzhu5dpIGLhu59pIHbDrCB4dW5nIMSR4buZdCBow7JhIHRy4buZbi5cbiIKKyIgQuG6oW4gY8OzIG114buRbiBjaOG6oXkgbOG7h25oIOKAnGdpdCBjaXRvb2zigJ0gxJHhu4MgcGjDom4gZ2nhuqNpIG7DsyBraMO0bmc/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJYw6FjIG5o4bqtdCDEkeG6t3QgbOG6oWkiCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIsSQ4bq3dCBs4bqhaSBuaMOhbmgg4oCcJXPigJ0gdGjDoG5oIOKAnCVz4oCdPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIktp4buDdSDEkeG6t3QgbOG6oWk6IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiTeG7gW06IEtow7RuZyDEkeG7mW5nIMSR4bq/biB0aMawIG3hu6VjIGzDoG0gdmnhu4djIHbDoCBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiIgorIlBoYSB0cuG7mW46IEtow7RuZyDEkeG7mW5nIGNo4bqhbSDEkeG6v24gdGjGsCBt4bulYyBsw6BtIHZp4buHYyBuaMawbmcgxJHhurd0IGzhuqFpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0azo5NjY2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIYXJkOiDEkOG6t3QgbOG6oWkgY8OieSBsw6BtIHZp4buHYyB2w6AgbeG7pWMgbOG7pWNcbiIKKyIoaOG7p3kgYuG7jyBN4buMSSB0aGF5IMSR4buVaSBu4buZaSBi4buZKSIKKworIzogZ2l0azo5NjgzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLEkGFuZyDEkeG6t3QgbOG6oWkiCisKKyM6IGdpdGs6OTc0MworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAixJBhbmcgY2hlY2tvdXQiCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIktow7RuZyB0aOG7gyB4w7NhIG5ow6FuaCBoaeG7h24gdOG6oWkgxJFhbmcgxJHGsOG7o2MgbOG6pXkgcmEiCisKKyM6IGdpdGs6OTgwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiQ8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHRyw6puIG5ow6FuaCAlcyBraMO0bmcg4bufIHRyw6puIG5ow6FuaCBraMOhYy5cbiIKKyJUaOG7sWMgc+G7sSBtdeG7kW4geMOzYSBuaMOhbmggJXM/IgorCisjOiBnaXRrOjk4MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIlRo4bq7IHbDoCDEkOG6p3U6ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkLhu5kgbOG7jWMiCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgxJHhu41jIHRow7RuZyB0aW4gaMOsbmggaOG7jWMgbOG6p24gY2h1eeG7g24gZ2lhbzsgdGjDtG5nIHRpbiBuaMOhbmggdsOgIHRo4bq7ICIKKyJ0csaw4bubYy9zYXUgc+G6vSBraMO0bmcgaG/DoG4gdGhp4buHbi4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIlRo4bq7IgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIkjhu5lwIHRob+G6oWkgY2jhu41uIHBow7RuZyBHaXRrIgorCisjOiBnaXRrOjExMjI3Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMTIzMAorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTEzNDgKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gduG7gSBoaeG7g24gdGjhu4sgZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICLEkOG7mSBy4buZbmcgYmnhu4N1IMSR4buTIHThu5FpIMSRYSAoZMOybmcpIgorCisjOiBnaXRrOjExMzU1CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAixJDhu5kgcuG7mW5nIMSR4buTIHRo4buLIHThu5FpIMSRYSAoJSBj4bunYSBi4bqjbmcpIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIgorCisjOiBnaXRrOjExMzYxCittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiVOG7sSBjaOG7jW4gKMSR4buZIGTDoGkpIFNIQTEiCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICLhuqhuIHRoYW0gY2hp4bq/dSDEkeG6v24gbcOheSBjaOG7pyIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIHRyw6xuaCBiw6B5IGPDoWMga2jDoWMgYmnhu4d0IgorCisjOiBnaXRrOjExMzcxCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIktob+G6o25nIGPDoWNoIHRhYiIKKworIzogZ2l0azoxMTM3NAorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIkhp4buDbiB0aOG7iyBjw6FjIHRo4bq7L8SR4bqndSB4dW5nIHF1YW5oIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiU+G7kSBsxrDhu6NuZyB0aOG6uy/EkeG6p3UgdOG7kWkgxJFhIHPhur0gaGnhu4NuIHRo4buLIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJHaeG7m2kgaOG6oW4gY8OhYyBraMOhYyBiaeG7h3QgY2hvIMSRxrDhu51uZyBk4bqrbiDEkcOjIGxp4buHdCBrw6oiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiSOG7lyB0cuG7oyBtw6MgaMOzYSBt4buXaS1kw7JuZyIKKworIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJDw7RuZyBj4bulIHNvIHPDoW5oIHThu6sgYsOqbiBuZ2/DoGkiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIkNo4buNbuKApiIKKworIzogZ2l0azoxMTM5NQorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiBjaHVuZyIKKworIzogZ2l0azoxMTM5OAorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiRMO5bmcgY8OhYyB3aWRnZXQgY2jhu6cgxJHhu4EiCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoxJHhu4MgdGhheSDEkeG7lWkgY+G6p24ga2jhu59pIMSR4buZbmcgbOG6oWkpIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihoaeG7h24gdOG6oWkga2jDtG5nIHPhurVuIHPDoG5nKSIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJNw6B1IHPhuq9jOiBi4bqlbSB2w6BvIG7DunQgcGjDrWEgZMaw4bubaSDEkeG7gyBjaOG7jW4gbcOgdSIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiR2lhbyBkaeG7h24iCisKKyM6IGdpdGs6MTE0MTcKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImdpYW8gZGnhu4duIgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiTuG7gW4iCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgIm7hu4FuIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiVGnhu4FuIGPhuqNuaCIKKworIzogZ2l0azoxMTQyNQorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgInRp4buBbiBj4bqjbmgiCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIlNvIHPDoW5oOiBkw7JuZyBjxakiCisKKyM6IGdpdGs6MTE0MjkKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAiZGlmZiBkw7JuZyBjxakiCisKKyM6IGdpdGs6MTE0MzMKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIlNvIHPDoW5oOiBkw7JuZyBt4bubaSIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJtw6B1IGTDsm5nIG3hu5tpIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIlNvIHPDoW5oOiBwaOG6p24gxJHhuqd1IGPhu6dhIMSRb+G6oW4iCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJtw6B1IGPhu6dhIHBo4bqnbiDEkeG6p3UgY+G7p2EgxJFv4bqhbiBraGkgc28gc8OhbmgiCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiTuG7gW4gZMOybmcgxJHDoW5oIGThuqV1IgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAibuG7gW4gZMOybmcgxJHGsOG7o2MgxJHDoW5oIGThuqV1IgorCisjOiBnaXRrOjExNDUwCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJNw6B1IG7hu4FuIgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiUGjDtG5nIGNo4buvOiBi4bqlbSB2w6BvIGPDoWMgbsO6dCDhu58gZMaw4bubaSDEkeG7gyBjaOG7jW4iCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlBow7RuZyBjaOG7ryBjaMOtbmgiCisKKyM6IGdpdGs6MTE0NjIKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiUGjDtG5nIGNo4buvIGTDuW5nIGtoaSBzbyBzw6FuaCIKKworIzogZ2l0azoxMTQ2MworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlBow7RuZyBjaOG7ryBnaWFvIGRp4buHbiIKKworIzogZ2l0azoxMTQ4NQorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkPDoSBuaMOibiBow7NhIGPDoWMgY8OgaSDEkeG6t3QgY2hvIEdpdGsiCisKKyM6IGdpdGs6MTE0OTQKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJDaHVuZyIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiTcOgdSBz4bqvYyIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkZvbnRzIgorbXNnc3RyICJQaMO0bmcgY2jhu68iCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBjaOG7jW4gbcOgdSBjaG8gJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJS4bqldCB0aeG6v2MsIGdpdGsga2jDtG5nIHRo4buDIGNo4bqheSBUY2wvVGsgcGhpw6puIGLhuqNuIG7DoHkuXG4iCisiIEdpdGsgY+G6p24gw610IG5o4bqldCBsw6AgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTIyNjkKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkga2hvIGdpdCDhu58gxJHDonkuIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICLEkOG7kWkgc+G7kSDigJwlc+KAnSBjaMawYSByw7UgcsOgbmc6IHbhu6thIGzDoCDEkWnhu4NtIHjDqXQgZHV54buHdCB24burYSBsw6AgdMOqbiB04bqtcCB0aW4iCisKKyM6IGdpdGs6MTIzMjgKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICLEkOG7kWkgc+G7kSBjaG8gZ2l0ayBraMO0bmcgaOG7o3AgbOG7hzoiCisKKyN+IG1zZ2lkICJtYyIKKyN+IG1zZ3N0ciAibWMiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICJ0aeG6v3AiCisKKyN+IG1zZ2lkICJwcmV2IgorI34gbXNnc3RyICJ0csaw4bubYyIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL3poX2NuLnBvIGIvZ2l0ay1naXQvcG8vemhfY24ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiN2Y4OQotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL3poX2NuLnBvCkBAIC0wLDAgKzEsMTM2NyBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXRrIHRvIFNpbXBsaWZpZWQgQ2hpbmVzZS4KKyMKKyMgVHJhbnNsYXRvcnM6CisjIFlhbktlIDxpbXlhbmtlQDE2My5jb20+LCAyMDE3CisKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdCBDaGluZXNlIExvY2FsaXphdGlvbiBQcm9qZWN0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTI4IDIzOjExKzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE3LTAzLTExIDAyOjI3KzA4MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFlhbktlIDxpbXlhbmtlQDE2My5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ2hpbmVzZVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIkxhbmd1YWdlOiB6aF9DTlxuIgorCisjOiBnaXRrOjE0MAorbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKK21zZ3N0ciAi5LiN6IO96I635Y+W5pyq5ZCI5bm25paH5Lu25YiX6KGo77yaIgorCisjOiBnaXRrOjIxMiBnaXRrOjI0MDMKK21zZ2lkICJDb2xvciB3b3JkcyIKK21zZ3N0ciAi552A6Imy5pi+56S65beu5byCIgorCisjOiBnaXRrOjIxNyBnaXRrOjI0MDMgZ2l0azo4MjQ5IGdpdGs6ODI4MgorbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAi5qCH6K6w5pi+56S65beu5byCIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAi6Kej5p6Q54mI5pys6ZSZ6K+v77yaIgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIui/kOihjCAtLWFyZ3NjbWTlkb3ku6Tlh7rplJkiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICLmsqHmnInpgInkuK3mlofku7bvvJotLeaMh+Wumm1lcmdl5Y+C5pWw5L2G5rKh5pyJ5pyq5ZCI5bm255qE5paH5Lu244CCIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICLmsqHmnInpgInkuK3mlofku7bvvJotLeaMh+Wumm1lcmdl5Y+C5pWw5L2G5rKh5pyJ5pyq5ZCI5bm255qE5paH5Lu25Zyo5paH5Lu25LitIgorCisjOiBnaXRrOjQxOCBnaXRrOjU2NgorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKK21zZ3N0ciAi5omn6KGMZ2l0IGxvZ+WRveS7pOWHuumUme+8miIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICLor7vlj5bkuK0iCisKKyM6IGdpdGs6NDk2IGdpdGs6NDU0OQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAi5o+Q5Lqk6K6w5b2V6K+75Y+W5LitLi4uIgorCisjOiBnaXRrOjQ5OSBnaXRrOjE2NDEgZ2l0azo0NTUyCittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAi5pyq6YCJ5Lit5Lu75L2V5o+Q5LqkIgorCisjOiBnaXRrOjE0NDkgZ2l0azo0MDY5IGdpdGs6MTI1ODMKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIuWRveS7pOihjCIKKworIzogZ2l0azoxNTE1Cittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICLkuI3og73op6PmnpBnaXQgbG9n6L6T5Ye677yaIgorCisjOiBnaXRrOjE3NDQKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICLml6Dlj6/nlKjmj5DkuqTkv6Hmga8iCisKKyM6IGdpdGs6MTkwNyBnaXRrOjE5MzYgZ2l0azo0MzM5IGdpdGs6OTc4OSBnaXRrOjExMzg4IGdpdGs6MTE2NjgKK21zZ2lkICJPSyIKK21zZ3N0ciAi56Gu5a6aIgorCisjOiBnaXRrOjE5MzggZ2l0azo0MzQxIGdpdGs6OTIyNSBnaXRrOjkzMDQgZ2l0azo5NDM0IGdpdGs6OTUyMCBnaXRrOjk3OTEKKyM6IGdpdGs6MTEzODkgZ2l0azoxMTY2OQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi5Y+W5raIIgorCisjOiBnaXRrOjIwODcKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICLmm7TmlrAiCisKKyM6IGdpdGs6MjA4OAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIumHjeaWsOWKoOi9vSIKKworIzogZ2l0azoyMDg5Cittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICLph43mlrDor7vlj5blvJXnlKgiCisKKyM6IGdpdGs6MjA5MAorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIuWIl+WHuuW8leeUqCjliIbmlK/ku6Xlj4p0YWcpIgorCisjOiBnaXRrOjIwOTIKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAi5ZCv5YqoZ2l0IGd1aeWuouaIt+erryIKKworIzogZ2l0azoyMDk0Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIumAgOWHuiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkZpbGUiCittc2dzdHIgIuaWh+S7tiIKKworIzogZ2l0azoyMDk4Cittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICLlgY/lpb3orr7nva4iCisKKyM6IGdpdGs6MjA5NworbXNnaWQgIiZFZGl0IgorbXNnc3RyICLnvJbovpEiCisKKyM6IGdpdGs6MjEwMgorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAi5paw6KeG5Zu+Li4uIgorCisjOiBnaXRrOjIxMDMKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICLnvJbovpHop4blm74uLi4iCisKKyM6IGdpdGs6MjEwNAorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAi5Yig6Zmk6KeG5Zu+IgorCisjOiBnaXRrOjIxMDYKK21zZ2lkICImQWxsIGZpbGVzIgorbXNnc3RyICLmiYDmnInmlofku7YiCisKKyM6IGdpdGs6MjEwMQorbXNnaWQgIiZWaWV3IgorbXNnc3RyICLop4blm74iCisKKyM6IGdpdGs6MjExMSBnaXRrOjIxMjEKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAi5YWz5LqOZ2l0ayIKKworIzogZ2l0azoyMTEyIGdpdGs6MjEyNgorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIuW/q+aNt+mUriIKKworIzogZ2l0azoyMTEwIGdpdGs6MjEyNQorbXNnaWQgIiZIZWxwIgorbXNnc3RyICLluK7liqkiCisKKyM6IGdpdGs6MjIwMyBnaXRrOjg2ODEKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRO+8miIKKworIzogZ2l0azoyMjQ3Cittc2dpZCAiUm93IgorbXNnc3RyICLooYwiCisKKyM6IGdpdGs6MjI4NQorbXNnaWQgIkZpbmQiCittc2dzdHIgIuafpeaJviIKKworIzogZ2l0azoyMzEzCittc2dpZCAiY29tbWl0IgorbXNnc3RyICLmj5DkuqQiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjIzMTkgZ2l0azo0NzExIGdpdGs6NDczNCBnaXRrOjQ3NTggZ2l0azo2Nzc5IGdpdGs6Njg1MQorIzogZ2l0azo2OTM2Cittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgIuWMheWQq++8miIKKworIzogZ2l0azoyMzIwIGdpdGs6MzU1MCBnaXRrOjM1NTUgZ2l0azo0Nzg3Cittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICLlvbHlk43ot6/lvoTvvJoiCisKKyM6IGdpdGs6MjMyMSBnaXRrOjQ4MDEKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAi5aKe5YqgL+WIoOmZpOWtl+espuS4su+8miIKKworIzogZ2l0azoyMzIyIGdpdGs6NDgwMworbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAi5pS55Y+Y6KGM5Yy56YWN77yaIgorCisjOiBnaXRrOjIzMzEgZ2l0azoyMzMzIGdpdGs6NDc5MAorbXNnaWQgIkV4YWN0IgorbXNnc3RyICLnsr7noa7ljLnphY0iCisKKyM6IGdpdGs6MjMzMyBnaXRrOjQ4NzggZ2l0azo2NzQ3Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAi5b+955Wl5aSn5bCP5YaZIgorCisjOiBnaXRrOjIzMzMgZ2l0azo0NzYwIGdpdGs6NDg3NiBnaXRrOjY3NDMKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIuato+WImSIKKworIzogZ2l0azoyMzM1IGdpdGs6MjMzNiBnaXRrOjQ4OTggZ2l0azo0OTI4IGdpdGs6NDkzNSBnaXRrOjY4NzIgZ2l0azo2OTQwCittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAi5omA5pyJ5a2X5q61IgorCisjOiBnaXRrOjIzMzYgZ2l0azo0ODk1IGdpdGs6NDkyOCBnaXRrOjY4MTAKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAi5qCH6aKYIgorCisjOiBnaXRrOjIzMzcgZ2l0azo0ODk1IGdpdGs6NjgxMCBnaXRrOjY5NDAgZ2l0azo3NDEzCittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIuaPkOS6pOazqOmHiiIKKworIzogZ2l0azoyMzM3IGdpdGs6NDg5NSBnaXRrOjQ5MDAgZ2l0azo0OTM1IGdpdGs6NjgxMCBnaXRrOjczNDggZ2l0azo4ODU5CisjOiBnaXRrOjg4NzQKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIuS9nOiAhSIKKworIzogZ2l0azoyMzM3IGdpdGs6NDg5NSBnaXRrOjY4MTAgZ2l0azo3MzUwCittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICLmj5DkuqTogIUiCisKKyM6IGdpdGs6MjM3MQorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAi5pCc57SiIgorCisjOiBnaXRrOjIzNzkKK21zZ2lkICJEaWZmIgorbXNnc3RyICLlt67lvIIiCisKKyM6IGdpdGs6MjM4MQorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICLogIHniYjmnKwiCisKKyM6IGdpdGs6MjM4MworbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICLmlrDniYjmnKwiCisKKyM6IGdpdGs6MjM4NgorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkRpZmbkuIrkuIvmlofmmL7npLrooYzmlbAiCisKKyM6IGdpdGs6MjM5NgorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIuW/veeVpeepuuagvOS/ruaUuSIKKworIzogZ2l0azoyNDAwIGdpdGs6MjQwMiBnaXRrOjc5ODMgZ2l0azo4MjM1Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICLmjInooYzmmL7npLrlt67lvIIiCisKKyM6IGdpdGs6MjQ2NworbXNnaWQgIlBhdGNoIgorbXNnc3RyICLooaXkuIEiCisKKyM6IGdpdGs6MjQ2OQorbXNnaWQgIlRyZWUiCittc2dzdHIgIuagkSIKKworIzogZ2l0azoyNjM5IGdpdGs6MjY2MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAi5q+U6L6D5LuO5b2T5YmN5o+Q5Lqk5Yiw6YCJ5Lit5o+Q5Lqk55qE5beu5byCIgorCisjOiBnaXRrOjI2NDAgZ2l0azoyNjYxCittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICLmr5TovoPku47pgInkuK3mj5DkuqTliLDlvZPliY3mj5DkuqTnmoTlt67lvIIiCisKKyM6IGdpdGs6MjY0MSBnaXRrOjI2NjIKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICLliLbkvZzooaXkuIEiCisKKyM6IGdpdGs6MjY0MiBnaXRrOjkyODMKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICLliJvlu7p0YWciCisKKyM6IGdpdGs6MjY0MworbXNnaWQgIkNvcHkgY29tbWl0IHN1bW1hcnkiCittc2dzdHIgIuWkjeWItuaPkOS6pOaRmOimgSIKKworIzogZ2l0azoyNjQ0IGdpdGs6OTQxNAorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICLlhpnlhaXmj5DkuqTliLDmlofku7YiCisKKyM6IGdpdGs6MjY0NQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICLliJvlu7rmlrDliIbmlK8iCisKKyM6IGdpdGs6MjY0NgorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICLlnKjmraTmj5DkuqTov5DnlKjooaXkuIEoY2hlcnJ5LXBpY2sp5ZG95LukIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLlsIbliIbmlK/lpLQoSEVBRCnph43nva7liLDmraTlpIQiCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIuagh+iusOatpOaPkOS6pCIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIui/lOWbnuWIsOagh+iusCIKKworIzogZ2l0azoyNjUwCittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIuafpeaJvuacrOasoeaPkOS6pOeahOWtkOaPkOS6pOW5tuagh+iusCIKKworIzogZ2l0azoyNjUxCittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIuWSjOW3suagh+iusOeahOaPkOS6pOS9nOavlOi+gyIKKworIzogZ2l0azoyNjUyIGdpdGs6MjY2MworbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICLmr5TovoPku47lvZPliY3mj5DkuqTliLDlt7LmoIforrDmj5DkuqTnmoTlt67lvIIiCisKKyM6IGdpdGs6MjY1MyBnaXRrOjI2NjQKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAi5q+U6L6D5LuO5bey5qCH6K6w5o+Q5Lqk5Yiw5b2T5YmN5o+Q5Lqk55qE5beu5byCIgorCisjOiBnaXRrOjI2NTQKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgIuaSpOmUgChyZXZlcnQp5q2k5o+Q5LqkIgorCisjOiBnaXRrOjI2NzAKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIuajgOWHuihjaGVja291dCnmraTliIbmlK8iCisKKyM6IGdpdGs6MjY3MQorbXNnaWQgIlJlbmFtZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi6YeN5ZG95ZCNKFJlbmFtZSnmraTliIbmlK8iCisKKyM6IGdpdGs6MjY3MgorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi5Yig6ZmkKFJlbW92ZSnmraTliIbmlK8iCisKKyM6IGdpdGs6MjY3MworbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIuWkjeWItuWIhuaUr+WQjeensCIKKworIzogZ2l0azoyNjgwCittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICLpq5jkuq7mraTlpIQiCisKKyM6IGdpdGs6MjY4MQorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIuWPqumrmOS6ruatpOWkhCIKKworIzogZ2l0azoyNjgyCittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAi5aSW6YOoZGlmZiIKKworIzogZ2l0azoyNjgzCittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQmxhbWXniLbmj5DkuqQiCisKKyM6IGdpdGs6MjY4NAorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAi5aSN5Yi26Lev5b6EIgorCisjOiBnaXRrOjI2OTEKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIuaYvuekuuatpOihjOWOn+Wni+aPkOS6pCIKKworIzogZ2l0azoyNjkyCittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICLlnKjmraTooYzov5DooYxnaXQgZ3Vp5a6i5oi356uv55qEYmxhbWUiCisKKyM6IGdpdGs6MzAzNgorbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgIuWFs+S6jmdpdGsiCisKKyM6IGdpdGs6MzAzOAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiXG5HaXRrIOKAlCDkuIDkuKpnaXTnmoTmj5DkuqTmn6XnnIvlmahcblxuwqkgMjAwNS0yMDE2IFBhdWwgTWFja2VycmFzXG5cbuWcqEdOVeiuuOWPr+ivgeS4i+S9v+eUqOS7peWPiuWIhuWPkSIKKworIzogZ2l0azozMDQ2IGdpdGs6MzExMyBnaXRrOjEwMDA0Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIuWFs+mXrSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkdpdGvlv6vmjbfplK4iCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiR2l0a+W/q+aNt+mUru+8miIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHTpgIDlh7oiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1XPlx0XHTlhbPpl63nqpflj6MiCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdOenu+WKqOWIsOesrOS4gOasoeaPkOS6pCIKKworIzogZ2l0azozMDc1Cittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx056e75Yqo5Yiw5pyA5ZCO5LiA5qyh5o+Q5LqkIgorCisjOiBnaXRrOjMwNzYKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGtcdOenu+WKqOWIsOS4iuS4gOasoeaPkOS6pCIKKworIzogZ2l0azozMDc3Cittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPERvd24+LCBuLCBqXHTnp7vliqjliLDkuIvkuIDmrKHmj5DkuqQiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0PiwgeiwgaFx05Y6G5Y+y5YiX6KGo55qE5LiK5LiA6aG5IgorCisjOiBnaXRrOjMwNzkKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx05Y6G5Y+y5YiX6KGo55qE5LiL5LiA6aG5IgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPCVzLW4+XHTlnKjljoblj7LliJfooajkuK3liY3lvoDmnKzmrKHmj5DkuqTnmoTnrKxu5Liq54i25o+Q5LqkIgorCisjOiBnaXRrOjMwODEKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdOS4iuS4gOmhteaPkOS6pOWIl+ihqCIKKworIzogZ2l0azozMDgyCittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHTkuIvkuIDpobXmj5DkuqTliJfooagiCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHTmu5rliqjliLDmj5DkuqTliJfooajpobbpg6giCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx05rua5Yqo5Yiw5o+Q5Lqk5YiX6KGo5bqV6YOoIgorCisjOiBnaXRrOjMwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdOWQkeS4iua7muWKqOS4gOihjOaPkOS6pOWIl+ihqCIKKworIzogZ2l0azozMDg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHTlkJHkuIvmu5rliqjkuIDooYzmj5DkuqTliJfooagiCisKKyM6IGdpdGs6MzA4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHTlkJHkuIrmu5rliqjkuIDpobXmj5DkuqTliJfooagiCisKKyM6IGdpdGs6MzA4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHTlkJHkuIvmu5rliqjkuIDpobXmj5DkuqTliJfooagiCisKKyM6IGdpdGs6MzA4OQorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LVVwPlx05ZCR5ZCO5p+l5om+KOWQkeS4iueahO+8jOabtOaZmueahOaPkOS6pCkiCisKKyM6IGdpdGs6MzA5MAorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtRG93bj5cdOWQkeWJjeafpeaJvijlkJHkuIvnmoTvvIzmm7Tml6nnmoTmj5DkuqQpIgorCisjOiBnaXRrOjMwOTEKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdOWQkeS4iua7muWKqGRpZmbop4blm77kuIDpobUiCisKKyM6IGdpdGs6MzA5MgorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx05ZCR5LiK5rua5YqoZGlmZuinhuWbvuS4gOmhtSIKKworIzogZ2l0azozMDkzCittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGFjZT5cdFx05ZCR5LiL5rua5YqoZGlmZuinhuWbvuS4gOmhtSIKKworIzogZ2l0azozMDk0Cittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdOWQkeS4iua7muWKqGRpZmbop4blm74xOOihjCIKKworIzogZ2l0azozMDk1Cittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx05ZCR5LiL5rua5YqoZGlmZuinhuWbvjE46KGMIgorCisjOiBnaXRrOjMwOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdOafpeaJviIKKworIzogZ2l0azozMDk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdOenu+WKqOWIsOS4i+S4gOasoeafpeaJvuWRveS4rSIKKworIzogZ2l0azozMDk4Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdFx056e75Yqo5Yiw5LiL5LiA5qyh5p+l5om+5ZG95LitIgorCisjOiBnaXRrOjMwOTkKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHTovazliLDmj5DkuqQiCisKKyM6IGdpdGs6MzEwMAorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx06YCJ5Lit5pCc57Si5qGGIgorCisjOiBnaXRrOjMxMDEKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx056e75Yqo5Yiw5LiK5LiA5qyh5p+l5om+5ZG95LitIgorCisjOiBnaXRrOjMxMDIKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdOa7muWKqGRpZmbop4blm77liLDkuIvkuIDkuKrmlofku7YiCisKKyM6IGdpdGs6MzEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdOWcqGRpZmbop4blm77kuK3mn6Xmib7kuIvkuIDmraTlkb3kuK0iCisKKyM6IGdpdGs6MzEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHTlnKhkaWZm6KeG5Zu+5Lit5p+l5om+5LiK5LiA5qyh5ZG95LitIgorCisjOiBnaXRrOjMxMDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx05aKe5aSn5a2X5L2T5aSn5bCPIgorCisjOiBnaXRrOjMxMDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHTlop7lpKflrZfkvZPlpKflsI8iCisKKyM6IGdpdGs6MzEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHTlh4/lsI/lrZfkvZPlpKflsI8iCisKKyM6IGdpdGs6MzEwOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx05YeP5bCP5a2X5L2T5aSn5bCPIgorCisjOiBnaXRrOjMxMDkKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHTmm7TmlrAiCisKKyM6IGdpdGs6MzU3NCBnaXRrOjM1ODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAi5Yib5bu65Li05pe255uu5b2V5Ye66ZSZJXPvvJoiCisKKyM6IGdpdGs6MzU5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICLku44lc+iOt+WPllwiJXNcIuWHuumUme+8miIKKworIzogZ2l0azozNjU5Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLmiafooYzlkb3ku6TlpLHotKXvvJoiCisKKyM6IGdpdGs6MzgwOAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICLml6DmraTmj5DkuqQiCisKKyM6IGdpdGs6MzgyMgorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZe+8muaJp+ihjOWRveS7pOWksei0pe+8miIKKworIzogZ2l0azozODUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5ZCI5bm25aS0KG1lcmdlIGhlYWQp77yaJXMiCisKKyM6IGdpdGs6Mzg2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICLor7vlj5bntKLlvJXlh7rplJnvvJolcyIKKworIzogZ2l0azozODg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAi5LiN6IO95omn6KGMZ2l0IGJsYW1l77yaJXMiCisKKyM6IGdpdGs6Mzg4OSBnaXRrOjY3NzgKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIuaQnOe0ouS4rSIKKworIzogZ2l0azozOTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLov5DooYxnaXQgYmxhbWXlh7rplJnvvJolcyIKKworIzogZ2l0azozOTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAi5q2k6KGM5p2l6Ieq5o+Q5LqkJXPvvIzkuI3lnKjmraTop4blm77kuK0iCisKKyM6IGdpdGs6Mzk2MworbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIuWklumDqGRpZmbmn6XnnIvlmajlpLHotKXvvJoiCisKKyM6IGdpdGs6NDA2NworbXNnaWQgIkFsbCBmaWxlcyIKK21zZ3N0ciAi5omA5pyJ5paH5Lu2IgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICJWaWV3IgorbXNnc3RyICLop4blm74iCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJHaXRr6KeG5Zu+5a6a5LmJIgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIuiusOS9j+atpOinhuWbviIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAi5byV55SoKOepuuagvOWIh+WIhueahOWIl+ihqCnvvJoiCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIuWIhuaUr+WSjHRhZ3MiCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICLmiYDmnInlvJXnlKgiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICLmiYDmnIko5pys5ZywKeWIhuaUryIKKworIzogZ2l0azo0MTAzCittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgIuaJgOaciXRhZyIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi5omA5pyJ6L+c56iL6Lef6Liq5YiG5pSvIgorCisjOiBnaXRrOjQxMDUKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICLmj5DkuqTkv6Hmga8gKOato+WImeihqOi+vuW8jynvvJoiCisKKyM6IGdpdGs6NDEwNgorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIuS9nOiAhe+8miIKKworIzogZ2l0azo0MTA3Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAi5o+Q5Lqk6ICF77yaIgorCisjOiBnaXRrOjQxMDgKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIuaPkOS6pOS/oeaBr++8miIKKworIzogZ2l0azo0MTA5Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIuWMuemFjeaJgOacieaPkOS6pOS/oeaBr+agh+WHhiIKKworIzogZ2l0azo0MTEwCittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAi5Yy56YWN5peg5o+Q5Lqk5L+h5oGv5qCH5YeGIgorCisjOiBnaXRrOjQxMTEKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAi5paH5Lu25L+u5pS55YiX6KGo77yaIgorCisjOiBnaXRrOjQxMTIKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIuWbuuWumuWtl+espuS4siIKKworIzogZ2l0azo0MTEzCittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICLmraPliJnooajovr7lvI/vvJoiCisKKyM6IGdpdGs6NDExNAorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICLmkJzntKLlrZfnrKbkuLLvvJoiCisKKyM6IGdpdGs6NDExNQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAi5o+Q5Lqk5pel5pyfIChcIjLmmJ/mnJ/kuYvliY1cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiNeaciCAxNywgMjAwOSAxNToyNzozOFwiKToiCisKKyM6IGdpdGs6NDExNgorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAi6Ieq77yaIgorCisjOiBnaXRrOjQxMTcKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIuWIsO+8miIKKworIzogZ2l0azo0MTE4Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIumZkOWItiDkuJQv5oiWIOi3s+i/h+S4gOWumuaVsOmHj+eahOeJiOacrCjmraPmlbTmlbAp77yaIgorCisjOiBnaXRrOjQxMTkKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIuaYvuekuuaVsOmHj++8miIKKworIzogZ2l0azo0MTIwCittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICLot7Pov4fmlbDph4/vvJoiCisKKyM6IGdpdGs6NDEyMQorbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIuWFtuS7lumAiemhue+8miIKKworIzogZ2l0azo0MTIyCittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICLkuKXmoLzmjInml6XmnJ/mlbTnkIYiCisKKyM6IGdpdGs6NDEyMworbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICLmoIforrDliIbmlK/ovrnnlYwiCisKKyM6IGdpdGs6NDEyNAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi6ZmQ5Yi25Yiw56ys5LiA5Liq54i25o+Q5LqkIgorCisjOiBnaXRrOjQxMjUKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAi566A5piT5Y6G5Y+yIgorCisjOiBnaXRrOjQxMjYKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiZ2l0IGxvZ+WRveS7pOeahOmineWkluWPguaVsO+8miIKKworIzogZ2l0azo0MTI3Cittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIui+k+WFpeaWh+S7tuWSjOaWh+S7tuWkueadpeW8leeUqO+8jOavj+ihjOS4gOS4qu+8miIKKworIzogZ2l0azo0MTI4Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIuWRveS7pOS6p+eUn+abtOWkmueahOaPkOS6pOadpeW8leeUqO+8miIKKworIzogZ2l0azo0MjUyCittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiDnvJbovpHop4blm74iCisKKyM6IGdpdGs6NDI2MAorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSDnlKjmnaXpgInmi6nniYjmnKznmoTop4TliJkiCisKKyM6IGdpdGs6NDI2NQorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAi6KeG5Zu+5ZCN56ewIgorCisjOiBnaXRrOjQzNDAKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICLlupTnlKgoRjUpIgorCisjOiBnaXRrOjQzNzgKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIuaPkOS6pOmAieaLqeWPguaVsOmUmeivr++8miIKKworIzogZ2l0azo0NDMzIGdpdGs6NDQ4NiBnaXRrOjQ5NDggZ2l0azo0OTYyIGdpdGs6NjIzMiBnaXRrOjEyNTI0IGdpdGs6MTI1MjUKK21zZ2lkICJOb25lIgorbXNnc3RyICLml6AiCisKKyM6IGdpdGs6NTA0NSBnaXRrOjUwNTAKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICLlrZDmj5DkuqQiCisKKyM6IGdpdGs6NTA0NgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICLpnZ7lrZDmj5DkuqQiCisKKyM6IGdpdGs6NTA1MyBnaXRrOjUwNTgKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAi54i25o+Q5LqkIgorCisjOiBnaXRrOjUwNTQKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIumdnueItuaPkOS6pCIKKworIzogZ2l0azo1MzQ4Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICLlt7Lmt7vliqDliLDntKLlvJXkvYbmnKrmj5DkuqTnmoTkv67mlLkiCisKKyM6IGdpdGs6NTM4NAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICLmnKrmt7vliqDliLDntKLlvJXkuJTmnKrmj5DkuqTnmoTkv67mlLkiCisKKyM6IGdpdGs6NzE1OAorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgIuabtOWkmiIKKworIzogZ2l0azo3MTYxCittc2dpZCAibWFueSIKK21zZ3N0ciAi5b6I5aSaIgorCisjOiBnaXRrOjczNTIKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiVGFnczoiCisKKyM6IGdpdGs6NzM2OSBnaXRrOjczNzUgZ2l0azo4ODU0Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICLniLboioLngrkiCisKKyM6IGdpdGs6NzM4MAorbXNnaWQgIkNoaWxkIgorbXNnc3RyICLlrZDoioLngrkiCisKKyM6IGdpdGs6NzM4OQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAi5YiG5pSvIgorCisjOiBnaXRrOjczOTIKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICLkuYvlkI7nmoR0YWciCisKKyM6IGdpdGs6NzM5NQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICLkuYvliY3nmoR0YWciCisKKyM6IGdpdGs6Nzk5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgorbXNnc3RyICLojrflj5blt67lvILplJnor6/vvJolcyIKKworIzogZ2l0azo4Njc5Cittc2dpZCAiR290bzoiCittc2dzdHIgIui9rOWIsO+8miIKKworIzogZ2l0azo4NzAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIuefreagvOW8j+eahFNIQTHmj5DkuqTlj7clc+S4jeaYjuehruOAgeacieatp+S5iSIKKworIzogZ2l0azo4NzA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICLniYjmnKwlc+acquefpSIKKworIzogZ2l0azo4NzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIuaPkOS6pOWPtyhTSEExIGlkKSVz5pyq55+lIgorCisjOiBnaXRrOjg3MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAi54mI5pysJXPkuI3lnKjlvZPliY3op4blm77kuK0iCisKKyM6IGdpdGs6ODg2MSBnaXRrOjg4NzYKK21zZ2lkICJEYXRlIgorbXNnc3RyICLml6XmnJ8iCisKKyM6IGdpdGs6ODg2NAorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICLlrZDoioLngrkiCisKKyM6IGdpdGs6ODkyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLph43nva7liIbmlK8lc+WIsOatpOWkhCIKKworIzogZ2l0azo4OTI5Cittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIuWIhuemu+eahOWktChoZWFkKe+8muS4jeiDvemHjee9rihyZXNldCkiCisKKyM6IGdpdGs6OTAzNCBnaXRrOjkwNDAKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLot7Pov4flkIjlubbmj5DkuqQiCisKKyM6IGdpdGs6OTA0OSBnaXRrOjkwNTQKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIuiOt+WPluihpeS4gUlE5Ye66ZSZIgorCisjOiBnaXRrOjkwNTAgZ2l0azo5MDU1Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIOKAlCDlgZzmraLkuK1cbiIKKworIzogZ2l0azo5MDYwIGdpdGs6OTA2MyBnaXRrOjkwNzEgZ2l0azo5MDg1IGdpdGs6OTA5NAorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIuaPkOS6pCIKKworIzogZ2l0azo5MDY0Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiDmmK/nm7jlkIznmoTooaXkuIEocGF0Y2gpXG4gICAgICAgIgorCisjOiBnaXRrOjkwNzIKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiDlt67lvILmnaXoh6pcbiAgICAgICAiCisKKyM6IGdpdGs6OTA3NAorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIuaPkOS6pOeahOW3ruW8gihEaWZmKe+8mlxuXG4iCisKKyM6IGdpdGs6OTA4NiBnaXRrOjkwOTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAi5pyJJXPlrZDoioLngrkg4oCUIOWBnOatouS4rVxuIgorCisjOiBnaXRrOjkxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAi5YaZ5YWl5o+Q5Lqk5Yiw5paH5Lu25Ye66ZSZ77yaJXMiCisKKyM6IGdpdGs6OTEyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIuavlOi+g+aPkOS6pOW3ruW8guWHuumUme+8miVzIgorCisjOiBnaXRrOjkxNjYKK21zZ2lkICJUb3AiCittc2dzdHIgIumhtumDqCIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAi5LuOIgorCisjOiBnaXRrOjkxNzIKK21zZ2lkICJUbyIKK21zZ3N0ciAi5YiwIgorCisjOiBnaXRrOjkxOTYKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi55Sf5oiQ6KGl5LiBKHBhdGNoKSIKKworIzogZ2l0azo5MTk4Cittc2dpZCAiRnJvbToiCittc2dzdHIgIuS7ju+8miIKKworIzogZ2l0azo5MjA3Cittc2dpZCAiVG86IgorbXNnc3RyICLliLDvvJoiCisKKyM6IGdpdGs6OTIxNgorbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIuWPjeWQkShSZXZlcnNlKSIKKworIzogZ2l0azo5MjE4IGdpdGs6OTQyOAorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAi6L6T5Ye65paH5Lu277yaIgorCisjOiBnaXRrOjkyMjQKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAi55Sf5oiQIgorCisjOiBnaXRrOjkyNjIKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIuWIm+W7uuihpeS4gShwYXRjaCnlh7rplJnvvJoiCisKKyM6IGdpdGs6OTI4NSBnaXRrOjk0MTYgZ2l0azo5NTA0Cittc2dpZCAiSUQ6IgorbXNnc3RyICJJRDoiCisKKyM6IGdpdGs6OTI5NAorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiVGFn5ZCN56ew77yaIgorCisjOiBnaXRrOjkyOTcKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiVGFn5L+h5oGv5piv5Y+v6YCJ55qEIgorCisjOiBnaXRrOjkyOTkKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIlRhZ+S/oeaBr++8miIKKworIzogZ2l0azo5MzAzIGdpdGs6OTQ3NAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAi5Yib5bu6IgorCisjOiBnaXRrOjkzMjEKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+WumnRhZ+WQjeensCIKKworIzogZ2l0azo5MzI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVGFnXCIlc1wi5bey57uP5a2Y5ZyoIgorCisjOiBnaXRrOjkzMzUKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICLliJvlu7p0YWflh7rplJnvvJoiCisKKyM6IGdpdGs6OTQyNQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICLlkb3ku6TvvJoiCisKKyM6IGdpdGs6OTQzMworbXNnaWQgIldyaXRlIgorbXNnc3RyICLlhpnlhaUiCisKKyM6IGdpdGs6OTQ1MQorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAi5YaZ5YWl5o+Q5Lqk5Ye66ZSZ77yaIgorCisjOiBnaXRrOjk0NzMKK21zZ2lkICJDcmVhdGUgYnJhbmNoIgorbXNnc3RyICLliJvlu7rliIbmlK8iCisKKyM6IGdpdGs6OTQ4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlbmFtZSBicmFuY2ggJXMiCittc2dzdHIgIumHjeWRveWQjeWIhuaUryVzIgorCisjOiBnaXRrOjk0OTAKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgIumHjeWRveWQjSIKKworIzogZ2l0azo5NTE0Cittc2dpZCAiTmFtZToiCittc2dzdHIgIuWQjeensO+8miIKKworIzogZ2l0azo5NTM4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi6K+35oyH5a6a5paw5YiG5pSv55qE5ZCN56ewIgorCisjOiBnaXRrOjk1NDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAi5YiG5pSvXCIlc1wi5bey57uP5a2Y5Zyo44CC6KaG55uW5a6D77yfIgorCisjOiBnaXRrOjk1ODcKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5ldyBuYW1lIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLor7fph43mlrDmjIflrprmlrDliIbmlK/nmoTlkI3np7AiCisKKyM6IGdpdGs6OTY1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICLmj5DkuqQlc+W3sue7j+WtmOWcqOS6juWIhuaUryVz44CC56Gu5a6a6YeN5paw5bqU55So5a6D77yfIgorCisjOiBnaXRrOjk2NTUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAi5omT6KGl5LiB5LitKENoZXJyeS1waWNraW5nKSIKKworIzogZ2l0azo5NjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAi5omT6KGl5LiBKENoZXJyeS1waWNrKeWksei0pe+8jOWboOS4uuacrOWcsOS/ruaUueS6huaWh+S7tlwiJXNcIuOAglxu6K+35o+Q5LqkKGNvbW1pdCnjgIHph43nva4ocmVzZXQp5oiW5pqC5a2YKHN0YXNoKeS/ruaUueWQjumHjeivleOAgiIKKworIzogZ2l0azo5NjcwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICLmiZPooaXkuIEoQ2hlcnJ5LXBpY2sp5aSx6LSl5Zug5Li65ZCI5bm25Yay56qB44CCXG7kvaDmmK/lkKbluIzmnJvov5DooYxnaXQgY2l0b29sIOadpeino+WGs+WGsueqge+8nyIKKworIzogZ2l0azo5Njg2IGdpdGs6OTc0NAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICLml6Dlt7Lnu4/mj5DkuqTnmoTkv67mlLkiCisKKyM6IGdpdGs6OTcxMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICLmj5DkuqQlc+S4jeWMheWQq+WcqOWIhuaUryVz5Lit77yM56Gu6K6k5Zue5ruaKHJldmVydCnlroPvvJ8iCisKKyM6IGdpdGs6OTcxOAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAi5Zue5rua5LitKFJldmVydGluZykiCisKKyM6IGdpdGs6OTcyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICLlm57mu5oocmV2ZXJ0KeWksei0pe+8jOWboOS4uuWmguS4i+eahOacrOWcsOaWh+S7tuS/ruaUue+8miVzXG7or7fmj5DkuqQoY29tbWl0KeOAgemHjee9rihyZXNldCnmiJbogIXmmoLlrZgoc3Rhc2gp5pS55Y+Y5ZCO6YeN6K+V44CCIgorCisjOiBnaXRrOjk3MzAKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAi5Zue5ruaKHJldmVydCnlpLHotKXvvIzlm6DkuLrlkIjlubblhrLnqoHjgIJcbuS9oOaYr+WQpuW4jOacm+i/kOihjGdpdCBjaXRvb2zmnaXop6PlhrPlhrLnqoHvvJ8iCisKKyM6IGdpdGs6OTc3MworbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIuehruiupOmHjee9rihyZXNldCkiCisKKyM6IGdpdGs6OTc3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIumHjee9rihyZXNldCnliIbmlK8lc+WIsCVz77yfIgorCisjOiBnaXRrOjk3NzcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAi6YeN572uKHJlc2V0Keexu+Wei++8miIKKworIzogZ2l0azo5NzgwCittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIui9r+aAp++8muemu+W8gOW3peS9nOagke+8jOe0ouW8leacquaUueWPmCIKKworIzogZ2l0azo5NzgzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICLmt7flkIjvvJrnprvlvIDlt6XkvZzmoJEo5pyq5pS55Y+YKe+8jOe0ouW8lemHjee9riIKKworIzogZ2l0azo5Nzg2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIuehrOaAp++8mumHjee9ruW3peS9nOagkeWSjOe0ouW8lVxuKOS4ouW8g+aJgOacieeahOacrOWcsOS/ruaUuSkiCisKKyM6IGdpdGs6OTgwMworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAi6YeN572u5LitKFJlc2V0dGluZykiCisKKyM6IGdpdGs6OTg3NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkEgbG9jYWwgYnJhbmNoIG5hbWVkICVzIGV4aXN0cyBhbHJlYWR5IgorbXNnc3RyICLmnKzlnLDliIbmlK8lc+W3sue7j+WtmOWcqCIKKworIzogZ2l0azo5ODg0Cittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICLmo4Dlh7rkuK0oQ2hlY2tpbmcgb3V0KSIKKworIzogZ2l0azo5OTQzCittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAi5LiN6IO95Yig6Zmk5b2T5YmN5qOA5Ye6KGNoZWNrb3V0KeWIhuaUryIKKworIzogZ2l0azo5OTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIuWcqOWIhuaUryVz5LiK55qE5o+Q5Lqk5LiN5Zyo5YW25LuW5Lu75L2V5YiG5pSv5LiK44CCXG7noa7orqTliKDpmaTliIbmlK8lc++8nyIKKworIzogZ2l0azo5OTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdz5ZKM5aS05oyH6ZKIKGhlYWRzKe+8miVzIgorCisjOiBnaXRrOjk5OTcKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIui/h+a7pOWZqCIKKworIzogZ2l0azoxMDI5MworbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAi6K+75Y+W5o+Q5Lqk5ouT5omR5L+h5oGv5Ye66ZSZ77yb5YiG5pSv5ZKM5LmL5YmNL+S5i+WQjueahHRhZ+S/oeaBr+WwhuS4jeiDveWujOaIkOOAgiIKKworIzogZ2l0azoxMTI3MAorbXNnaWQgIlRhZyIKK21zZ3N0ciAi5qCH562+KFRhZykiCisKKyM6IGdpdGs6MTEyNzQKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEzNTcKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiR2l0a+Wtl+S9k+mAieaLqSIKKworIzogZ2l0azoxMTM3NAorbXNnaWQgIkIiCittc2dzdHIgIueyl+S9kyIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIkkiCittc2dzdHIgIuaWnOS9kyIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAi5o+Q5Lqk5YiX6KGo5bGV56S66YCJ6aG5IgorCisjOiBnaXRrOjExNDk4Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICLmnIDlpKflm77lrr3luqYo6KGM5pWwKSIKKworIzogZ2l0azoxMTUwMgorIywgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIuacgOWkp+WbvuWuveW6pigl56qX5Y+j55m+5YiG5q+UKSIKKworIzogZ2l0azoxMTUwNQorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAi5pi+56S65pys5Zyw5L+u5pS5IgorCisjOiBnaXRrOjExNTA4Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAi6Ieq5Yqo6YCJ5oupU0hBMSjplb/luqYpIgorCisjOiBnaXRrOjExNTEyCittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAi6ZqQ6JeP6L+c56iL5byV55SoIgorCisjOiBnaXRrOjExNTE2Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIuW3ruW8gihEaWZmKeWxleekuumAiemhuSIKKworIzogZ2l0azoxMTUxOAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICLliLbooajnrKblrr3luqYiCisKKyM6IGdpdGs6MTE1MjEKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICLmmL7npLrkuLTov5HnmoR0YWdzL2hlYWRzIgorCisjOiBnaXRrOjExNTI0Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAi5pyA5aSndGFncy9oZWFkc+WxleekuuaVsOmHjyIKKworIzogZ2l0azoxMTUyNworbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiZGlmZuS4reWIl+WHuuaWh+S7tumZkOWItiIKKworIzogZ2l0azoxMTUzMAorbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICLljZXni6zmlofku7bnvJbnoIHmlK/mjIEiCisKKyM6IGdpdGs6MTE1MzYgZ2l0azoxMTY4MworbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAi5aSW6YOo5beu5byCKGRpZmYp5bel5YW3IgorCisjOiBnaXRrOjExNTM3Cittc2dpZCAiQ2hvb3NlLi4uIgorbXNnc3RyICLpgInmi6kuLi4iCisKKyM6IGdpdGs6MTE1NDIKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIuW4uOinhOmAiemhuSIKKworIzogZ2l0azoxMTU0NQorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAi5L2/55So5Li76aKY5bCP6YOo5Lu2IgorCisjOiBnaXRrOjExNTQ3Cittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKOmcgOmHjeWQr+eUn+aViCkiCisKKyM6IGdpdGs6MTE1NDkKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKOW9k+WJjeS4jeWPr+eUqCkiCisKKyM6IGdpdGs6MTE1NjAKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi6aKc6Imy77ya54K55Ye75p2l6YCJ5oupIgorCisjOiBnaXRrOjExNTYzCittc2dpZCAiSW50ZXJmYWNlIgorbXNnc3RyICLnlYzpnaIiCisKKyM6IGdpdGs6MTE1NjQKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgIueVjOmdoiIKKworIzogZ2l0azoxMTU2NworbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIuiDjOaZryIKKworIzogZ2l0azoxMTU2OCBnaXRrOjExNTk4Cittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAi6IOM5pmvIgorCisjOiBnaXRrOjExNTcxCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAi5YmN5pmvIgorCisjOiBnaXRrOjExNTcyCittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAi5YmN5pmvIgorCisjOiBnaXRrOjExNTc1Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICLlt67lvIIoRGlmZinvvJrogIHku6PnoIHooYwiCisKKyM6IGdpdGs6MTE1NzYKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAi5beu5byCKGRpZmYp6ICB5Luj56CB6KGMIgorCisjOiBnaXRrOjExNTgwCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICLlt67lvIIoRGlmZinvvJrmlrDku6PnoIHooYwiCisKKyM6IGdpdGs6MTE1ODEKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAi5beu5byCKGRpZmYp5paw5Luj56CB6KGMIgorCisjOiBnaXRrOjExNTg1Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIuW3ruW8gihEaWZmKe+8muihpeS4geeJh+auteWktOS/oeaBryIKKworIzogZ2l0azoxMTU4NworbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgIuW3ruW8gihkaWZmKeihpeS4geeJh+auteWktOS/oeaBryIKKworIzogZ2l0azoxMTU5MQorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICLlt7LmoIforrDku6PnoIHooYzog4zmma8iCisKKyM6IGdpdGs6MTE1OTMKK21zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgorbXNnc3RyICLlt7LmoIforrDku6PnoIHooYzog4zmma8iCisKKyM6IGdpdGs6MTE1OTcKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIumAieaLqeiDjOaZryIKKworIzogZ2l0azoxMTYwNgorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIuWtl+S9k++8mueCueWHu+adpemAieaLqSIKKworIzogZ2l0azoxMTYwOAorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAi5Li75a2X5L2TIgorCisjOiBnaXRrOjExNjA5Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIuW3ruW8gihEaWZmKeaYvuekuuWtl+S9kyIKKworIzogZ2l0azoxMTYxMAorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIueUqOaIt+eVjOmdouWtl+S9kyIKKworIzogZ2l0azoxMTYzMgorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkdpdGvlgY/lpb3orr7nva4iCisKKyM6IGdpdGs6MTE2NDEKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICLluLjop4QiCisKKyM6IGdpdGs6MTE2NDIKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIuminOiJsiIKKworIzogZ2l0azoxMTY0MworbXNnaWQgIkZvbnRzIgorbXNnc3RyICLlrZfkvZMiCisKKyM6IGdpdGs6MTE2OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRr77ya6YCJ5oup6aKc6Imy55So5LqOJXMiCisKKyM6IGdpdGs6MTIyMDYKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIuWvueS4jei1t++8jGdpdGvkuI3og73ov5DooYzlnKjlvZPliY3niYjmnKznmoRUY2wvVGvkuK3jgIJcbkdpdGvov5DooYzpnIDopoHmnIDkvY7niYjmnKzkuLpUY2wvVGs4LjTjgIIiCisKKyM6IGdpdGs6MTI0MTYKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICLlnKjmraTkvY3nva7mnKrlj5HnjrBnaXTku5PlupPjgIIiCisKKyM6IGdpdGs6MTI0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIuS4jeaYjuehruacieatp+S5ieeahOWPguaVsFwiJXNcIu+8mueJiOacrOWSjOaWh+S7tuWQjeensCIKKworIzogZ2l0azoxMjQ3NQorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIui/kOihjGdpdGvlj4LmlbDplJnor6/vvJoiCmRpZmYgLS1naXQgYS9naXR3ZWIvSU5TVEFMTCBiL2dpdHdlYi9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGU2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvSU5TVEFMTApAQCAtMCwwICsxLDMyOCBAQAorR0lUIHdlYiBJbnRlcmZhY2UgKGdpdHdlYikgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRmlyc3QgeW91IGhhdmUgdG8gZ2VuZXJhdGUgZ2l0d2ViLmNnaSBmcm9tIGdpdHdlYi5wZXJsIHVzaW5nCisibWFrZSBnaXR3ZWIiLCB0aGVuICJtYWtlIGluc3RhbGwtZ2l0d2ViIiBhcHByb3ByaWF0ZSBmaWxlcworKGdpdHdlYi5jZ2ksIGdpdHdlYi5qcywgZ2l0d2ViLmNzcywgZ2l0LWxvZ28ucG5nIGFuZCBnaXQtZmF2aWNvbi5wbmcpCit0byB0aGVpciBkZXN0aW5hdGlvbi4gRm9yIGV4YW1wbGUgaWYgZ2l0IHdhcyAob3IgaXMpIGluc3RhbGxlZCB3aXRoCisvdXNyIHByZWZpeCBhbmQgZ2l0d2ViZGlyIGlzIC92YXIvd3d3L2NnaS1iaW4sIHlvdSBjYW4gZG8KKworCSQgbWFrZSBwcmVmaXg9L3VzciBnaXR3ZWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyMgYXMgeW91cnNlbGYKKwkjIG1ha2UgZ2l0d2ViZGlyPS92YXIvd3d3L2NnaS1iaW4gaW5zdGFsbC1naXR3ZWIgICAgIDsjIGFzIHJvb3QKKworQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHVzZSBhdXRvY29uZiBnZW5lcmF0ZWQgLi9jb25maWd1cmUgc2NyaXB0IHRvCitzZXQgdXAgcGF0aCB0byBnaXQgYmluYXJpZXMgKHZpYSBjb25maWcubWFrLmF1dG9nZW4pLCBzbyB5b3UgY2FuIHdyaXRlCitpbnN0ZWFkCisKKwkkIG1ha2UgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgOyMgYXMgeW91cnNlbGYKKwkkIC4vY29uZmlndXJlIC0tcHJlZml4PS91c3IgICAgICAgICAgOyMgYXMgeW91cnNlbGYKKwkkIG1ha2UgZ2l0d2ViICAgICAgICAgICAgICAgICAgICAgICAgOyMgYXMgeW91cnNlbGYKKwkjIG1ha2UgZ2l0d2ViZGlyPS92YXIvd3d3L2NnaS1iaW4gXAorCSAgICAgICBpbnN0YWxsLWdpdHdlYiAgICAgICAgICAgICAgICA7IyBhcyByb290CisKK1RoZSBhYm92ZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB5b3VyIHdlYiBzZXJ2ZXIgaXMgY29uZmlndXJlZCB0byBydW4KK1tleGVjdXRhYmxlXSBmaWxlcyBpbiAvdmFyL3d3dy9jZ2ktYmluLyBhcyBzZXJ2ZXIgc2NyaXB0cyAoYXMgQ0dJCitzY3JpcHRzKS4KKworCitSZXF1aXJlbWVudHMKKy0tLS0tLS0tLS0tLQorCisgLSBDb3JlIGdpdCB0b29scworIC0gUGVybCA1LjgKKyAtIFBlcmwgbW9kdWxlczogQ0dJLCBFbmNvZGUsIEZjbnRsLCBGaWxlOjpGaW5kLCBGaWxlOjpCYXNlbmFtZS4KKyAtIHdlYiBzZXJ2ZXIKKworVGhlIGZvbGxvd2luZyBvcHRpb25hbCBQZXJsIG1vZHVsZXMgYXJlIHJlcXVpcmVkIGZvciBleHRyYSBmZWF0dXJlcworIC0gQ0dJOjpGYXN0IGFuZCBGQ0dJIC0gZm9yIHJ1bm5pbmcgZ2l0d2ViIGFzIEZhc3RDR0kgc2NyaXB0CisgLSBIVE1MOjpUYWdDbG91ZCAtIGZvciBmYW5jeSB0YWcgY2xvdWQgaW4gcHJvamVjdCBsaXN0IHZpZXcKKyAtIEhUVFA6OkRhdGUgb3IgVGltZTo6UGFyc2VEYXRlIC0gdG8gc3VwcG9ydCBJZi1Nb2RpZmllZC1TaW5jZSBmb3IgZmVlZHMKKworCitCdWlsZCB0aW1lIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgYWxzbyAiSG93IHRvIGNvbmZpZ3VyZSBnaXR3ZWIgZm9yIHlvdXIgbG9jYWwgc3lzdGVtIiBzZWN0aW9uIGJlbG93LgorCistIFRoZXJlIGFyZSBtYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdoaWNoIGFmZmVjdCBidWlsZGluZyBvZgorICBnaXR3ZWIuY2dpOyBzZWUgImRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZ2l0d2ViIiBzZWN0aW9uIGluIG1haW4KKyAgKHRvcCBkaXIpIE1ha2VmaWxlLCBhbmQgaW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBnaXR3ZWIgdGFyZ2V0LgorCisgIE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgaXMgd2hlcmUgdG8gZmluZCB0aGUgZ2l0IHdyYXBwZXIgYmluYXJ5LiBHaXR3ZWIKKyAgdHJpZXMgdG8gZmluZCB0aGUgZ2l0IHdyYXBwZXIgYXQgJChiaW5kaXIpL2dpdCwgc28geW91IGhhdmUgdG8gc2V0ICRiaW5kaXIKKyAgd2hlbiBidWlsZGluZyBnaXR3ZWIuY2dpLCBvciAkcHJlZml4IGZyb20gd2hpY2ggJGJpbmRpciBpcyBkZXJpdmVkLiBJZgorICB5b3UgYnVpbGQgYW5kIGluc3RhbGwgZ2l0d2ViIHRvZ2V0aGVyIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGdpdCBzdWl0ZSwKKyAgdGhlcmUgc2hvdWxkIGJlIG5vIHByb2JsZW1zLiBPdGhlcndpc2UsIGlmIGdpdCB3YXMgZm9yIGV4YW1wbGUKKyAgaW5zdGFsbGVkIGZyb20gYSBiaW5hcnkgcGFja2FnZSwgeW91IGhhdmUgdG8gc2V0ICRwcmVmaXggKG9yICRiaW5kaXIpCisgIGFjY29yZGluZ2x5LgorCistIEFub3RoZXIgaW1wb3J0YW50IGlzc3VlIGlzIHdoZXJlIGFyZSBnaXQgcmVwb3NpdG9yaWVzIHlvdSB3YW50IHRvIG1ha2UKKyAgYXZhaWxhYmxlIHRvIGdpdHdlYi4gQnkgZGVmYXVsdCBnaXR3ZWIgc2VhcmNoZXMgZm9yIHJlcG9zaXRvcmllcyB1bmRlcgorICAvcHViL2dpdDsgaWYgeW91IHdhbnQgdG8gaGF2ZSBwcm9qZWN0cyBzb21ld2hlcmUgZWxzZSwgbGlrZSAvaG9tZS9naXQsCisgIHVzZSBHSVRXRUJfUFJPSkVDVFJPT1QgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICBCeSBkZWZhdWx0IGFsbCBnaXQgcmVwb3NpdG9yaWVzIHVuZGVyIHByb2plY3Ryb290IGFyZSB2aXNpYmxlIGFuZAorICBhdmFpbGFibGUgdG8gZ2l0d2ViLiBUaGUgbGlzdCBvZiBwcm9qZWN0cyBpcyBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBieQorICBzY2FubmluZyB0aGUgcHJvamVjdHJvb3QgZGlyZWN0b3J5IGZvciBnaXQgcmVwb3NpdG9yaWVzLiBUaGlzIGNhbiBiZQorICBjaGFuZ2VkIChjb25maWd1cmVkKSBhcyBkZXNjcmliZWQgaW4gIkdpdHdlYiByZXBvc2l0b3JpZXMiIHNlY3Rpb24KKyAgYmVsb3cuCisKKyAgTm90ZSB0aGF0IGdpdHdlYiBkZWFscyBkaXJlY3RseSB3aXRoIHRoZSBvYmplY3QgZGF0YWJhc2UsIGFuZCBkb2VzIG5vdAorICBuZWVkIGEgd29ya2luZyBkaXJlY3Rvcnk7IHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IGlzIHRoZSBuYW1lIG9mIGl0cworICByZXBvc2l0b3J5IG9iamVjdCBkYXRhYmFzZSwgdXN1YWxseSBwcm9qZWN0bmFtZS5naXQgZm9yIGJhcmUKKyAgcmVwb3NpdG9yaWVzLiBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGdpdHdlYiBhY2Nlc3MgdG8gbm9uLWJhcmUgKGxpdmUpCisgIHJlcG9zaXRvcmllcywgeW91IGNhbiBtYWtlIHByb2plY3RuYW1lLmdpdCBhIHN5bWJvbGljIGxpbmsgdW5kZXIKKyAgcHJvamVjdHJvb3QgbGlua2luZyB0byBwcm9qZWN0bmFtZS8uZ2l0IChidXQgaXQgaXMganVzdAorICBhIHN1Z2dlc3Rpb24pLgorCistIFlvdSBjYW4gY29udHJvbCB3aGVyZSBnaXR3ZWIgdHJpZXMgdG8gZmluZCBpdHMgbWFpbiBDU1Mgc3R5bGUgZmlsZSwKKyAgaXRzIEphdmFTY3JpcHQgZmlsZSwgaXRzIGZhdmljb24gYW5kIGxvZ28gd2l0aCB0aGUgR0lUV0VCX0NTUywgR0lUV0VCX0pTCisgIEdJVFdFQl9GQVZJQ09OIGFuZCBHSVRXRUJfTE9HTyBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gQnkgZGVmYXVsdAorICBnaXR3ZWIgdHJpZXMgdG8gZmluZCB0aGVtIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBnaXR3ZWIuY2dpIHNjcmlwdC4KKworLSBZb3UgY2FuIG9wdGlvbmFsbHkgZ2VuZXJhdGUgbWluaWZpZWQgdmVyc2lvbnMgb2YgZ2l0d2ViLmpzIGFuZCBnaXR3ZWIuY3NzCisgIGJ5IGRlZmluaW5nIHRoZSBKU01JTiBhbmQgQ1NTTUlOIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBCeSBkZWZhdWx0CisgIHRoZSBub24tbWluaWZpZWQgdmVyc2lvbnMgd2lsbCBiZSB1c2VkLiBOT1RFOiBpZiB5b3UgZW5hYmxlIHRoaXMgb3B0aW9uLAorICBzdWJzdGl0dXRlIGdpdHdlYi5taW4uanMgYW5kIGdpdHdlYi5taW4uY3NzIGZvciBhbGwgdXNlcyBvZiBnaXR3ZWIuanMgYW5kCisgIGdpdHdlYi5jc3MgaW4gdGhlIGhlbHAgZmlsZXMuCisKKworSG93IHRvIGNvbmZpZ3VyZSBnaXR3ZWIgZm9yIHlvdXIgbG9jYWwgc3lzdGVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2hlbiBidWlsZGluZyBHSVQ6CisKKyAqIEdJVF9CSU5ESVIKKyAgIFBvaW50cyB3aGVyZSB0byBmaW5kIHRoZSBnaXQgZXhlY3V0YWJsZS4gIFlvdSBzaG91bGQgc2V0IGl0IHVwIHRvCisgICB0aGUgcGxhY2Ugd2hlcmUgdGhlIGdpdCBiaW5hcnkgd2FzIGluc3RhbGxlZCAodXN1YWxseSAvdXNyL2JpbikgaWYgeW91CisgICBkb24ndCBpbnN0YWxsIGdpdCBmcm9tIHNvdXJjZXMgdG9nZXRoZXIgd2l0aCBnaXR3ZWIuICBbRGVmYXVsdDogJChiaW5kaXIpXQorICogR0lUV0VCX1NJVEVOQU1FCisgICBTaG93biBpbiB0aGUgdGl0bGUgb2YgYWxsIGdlbmVyYXRlZCBwYWdlcywgZGVmYXVsdHMgdG8gdGhlIHNlcnZlciBuYW1lCisgICAoU0VSVkVSX05BTUUgQ0dJIGVudmlyb25tZW50IHZhcmlhYmxlKSBpZiBub3Qgc2V0LiBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9QUk9KRUNUUk9PVAorICAgVGhlIHJvb3QgZGlyZWN0b3J5IGZvciBhbGwgcHJvamVjdHMgc2hvd24gYnkgZ2l0d2ViLiBNdXN0IGJlIHNldAorICAgY29ycmVjdGx5IGZvciBnaXR3ZWIgdG8gZmluZCByZXBvc2l0b3JpZXMgdG8gZGlzcGxheS4gIFNlZSBhbHNvCisgICAiR2l0d2ViIHJlcG9zaXRvcmllcyIgaW4gdGhlIElOU1RBTEwgZmlsZSBmb3IgZ2l0d2ViLiAgW0RlZmF1bHQ6IC9wdWIvZ2l0XQorICogR0lUV0VCX1BST0pFQ1RfTUFYREVQVEgKKyAgIFRoZSBmaWxlc3lzdGVtIHRyYXZlcnNpbmcgbGltaXQgZm9yIGdldHRpbmcgdGhlIHByb2plY3QgbGlzdDsgdGhlIG51bWJlcgorICAgaXMgdGFrZW4gYXMgZGVwdGggcmVsYXRpdmUgdG8gdGhlIHByb2plY3Ryb290LiAgSXQgaXMgdXNlZCB3aGVuCisgICBHSVRXRUJfTElTVCBpcyBhIGRpcmVjdG9yeSAob3IgaXMgbm90IHNldDsgdGhlbiBwcm9qZWN0IHJvb3QgaXMgdXNlZCkuCisgICBUaGlzIGlzIG1lYW50IHRvIHNwZWVkIHVwIHByb2plY3QgbGlzdGluZyBvbiBsYXJnZSB3b3JrIHRyZWVzIGJ5IGxpbWl0aW5nCisgICBzZWFyY2ggZGVwdGguICBbRGVmYXVsdDogMjAwN10KKyAqIEdJVFdFQl9MSVNUCisgICBQb2ludHMgdG8gYSBkaXJlY3RvcnkgdG8gc2NhbiBmb3IgcHJvamVjdHMgKGRlZmF1bHRzIHRvIHByb2plY3Qgcm9vdAorICAgaWYgbm90IHNldCAvIGlmIGVtcHR5KSBvciB0byBhIGZpbGUgd2l0aCBleHBsaWNpdCBsaXN0aW5nIG9mIHByb2plY3RzCisgICAodG9nZXRoZXIgd2l0aCBwcm9qZWN0cycgb3duZXJzaGlwKS4gU2VlICJHZW5lcmF0aW5nIHByb2plY3RzIGxpc3QKKyAgIHVzaW5nIGdpdHdlYiIgaW4gSU5TVEFMTCBmaWxlIGZvciBnaXR3ZWIgdG8gZmluZCBvdXQgaG93IHRvIGdlbmVyYXRlCisgICBzdWNoIGZpbGUgZnJvbSBzY2FuIG9mIGEgZGlyZWN0b3J5LiBbTm8gZGVmYXVsdCwgd2hpY2ggbWVhbnMgdXNlIHJvb3QKKyAgIGRpcmVjdG9yeSBmb3IgcHJvamVjdHNdCisgKiBHSVRXRUJfRVhQT1JUX09LCisgICBTaG93IHJlcG9zaXRvcnkgb25seSBpZiB0aGlzIGZpbGUgZXhpc3RzIChpbiByZXBvc2l0b3J5KS4gIE9ubHkKKyAgIGVmZmVjdGl2ZSBpZiB0aGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0cnVlLiAgW05vIGRlZmF1bHQgLyBOb3Qgc2V0XQorICogR0lUV0VCX1NUUklDVF9FWFBPUlQKKyAgIE9ubHkgYWxsb3cgdmlld2luZyBvZiByZXBvc2l0b3JpZXMgYWxzbyBzaG93biBvbiB0aGUgb3ZlcnZpZXcgcGFnZS4KKyAgIFRoaXMgZm9yIGV4YW1wbGUgbWFrZXMgR0lUV0VCX0VYUE9SVF9PSyB0byBkZWNpZGUgaWYgcmVwb3NpdG9yeSBpcworICAgYXZhaWxhYmxlIGFuZCBub3Qgb25seSBpZiBpdCBpcyBzaG93bi4gIElmIEdJVFdFQl9MSVNUIHBvaW50cyB0bworICAgZmlsZSB3aXRoIGxpc3Qgb2YgcHJvamVjdCwgb25seSB0aG9zZSByZXBvc2l0b3JpZXMgbGlzdGVkIHdvdWxkIGJlCisgICBhdmFpbGFibGUgZm9yIGdpdHdlYi4gIFtObyBkZWZhdWx0XQorICogR0lUV0VCX0hPTUVURVhUCisgICBQb2ludHMgdG8gYW4gLmh0bWwgZmlsZSB3aGljaCBpcyBpbmNsdWRlZCBvbiB0aGUgZ2l0d2ViIHByb2plY3QKKyAgIG92ZXJ2aWV3IHBhZ2UgKCdwcm9qZWN0c19saXN0JyB2aWV3KSwgaWYgaXQgZXhpc3RzLiAgUmVsYXRpdmUgdG8KKyAgIGdpdHdlYi5jZ2kgc2NyaXB0LiAgW0RlZmF1bHQ6IGluZGV4dGV4dC5odG1sXQorICogR0lUV0VCX1NJVEVfSFRNTF9IRUFEX1NUUklORworICAgaHRtbCBzbmlwcGV0IHRvIGluY2x1ZGUgaW4gdGhlIDxoZWFkPiBzZWN0aW9uIG9mIGVhY2ggcGFnZS4gW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfU0lURV9IRUFERVIKKyAgIEZpbGVuYW1lIG9mIGh0bWwgdGV4dCB0byBpbmNsdWRlIGF0IHRvcCBvZiBlYWNoIHBhZ2UuICBSZWxhdGl2ZSB0bworICAgZ2l0d2ViLmNnaSBzY3JpcHQuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9TSVRFX0ZPT1RFUgorICAgRmlsZW5hbWUgb2YgaHRtbCB0ZXh0IHRvIGluY2x1ZGUgYXQgYm90dG9tIG9mIGVhY2ggcGFnZS4gIFJlbGF0aXZlIHRvCisgICBnaXR3ZWIuY2dpIHNjcmlwdC4gIFtObyBkZWZhdWx0XQorICogR0lUV0VCX0hPTUVfTElOS19TVFIKKyAgIFN0cmluZyBvZiB0aGUgaG9tZSBsaW5rIG9uIHRvcCBvZiBhbGwgcGFnZXMsIGxlYWRpbmcgdG8gJGhvbWVfbGluaworICAgKHVzdWFsbHkgbWFpbiBnaXR3ZWIgcGFnZSwgd2hpY2ggbWVhbnMgcHJvamVjdHMgbGlzdCkuICBVc2VkIGFzIGZpcnN0CisgICBwYXJ0IG9mIGdpdHdlYiB2aWV3ICJicmVhZGNydW1iIHRyYWlsIjogPGhvbWU+IC8gPHByb2plY3Q+IC8gPHZpZXc+LgorICAgW0RlZmF1bHQ6IHByb2plY3RzXQorICogR0lUV0VCX1NJVEVOQU1FCisgICBOYW1lIG9mIHlvdXIgc2l0ZSBvciBvcmdhbml6YXRpb24gdG8gYXBwZWFyIGluIHBhZ2UgdGl0bGVzLiAgU2V0IGl0CisgICB0byBzb21ldGhpbmcgZGVzY3JpcHRpdmUgZm9yIGNsZWFyZXIgYm9va21hcmtzIGV0Yy4gIElmIG5vdCBzZXQKKyAgIChpZiBlbXB0eSkgZ2l0d2ViIHVzZXMgIiRTRVJWRVJfTkFNRSBHaXQiLCBvciAiVW50aXRsZWQgR2l0IiBpZgorICAgU0VSVkVSX05BTUUgQ0dJIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQgKGUuZy4gaWYgcnVubmluZworICAgZ2l0d2ViIGFzIHN0YW5kYWxvbmUgc2NyaXB0KS4gIFtObyBkZWZhdWx0XQorICogR0lUV0VCX0JBU0VfVVJMCisgICBHaXQgYmFzZSBVUkxzIHVzZWQgZm9yIFVSTCB0byB3aGVyZSBmZXRjaCBwcm9qZWN0IGZyb20sIGkuZS4gZnVsbAorICAgVVJMIGlzICIkZ2l0X2Jhc2VfdXJsLyRwcm9qZWN0Ii4gIFNob3duIG9uIHByb2plY3RzIHN1bW1hcnkgcGFnZS4KKyAgIFJlcG9zaXRvcnkgVVJMIGZvciBwcm9qZWN0IGNhbiBiZSBhbHNvIGNvbmZpZ3VyZWQgcGVyIHJlcG9zaXRvcnk7IHRoaXMKKyAgIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBVUkxzIGNvbXBvc2VkIGZyb20gYmFzZSBVUkwgYW5kIGEgcHJvamVjdCBuYW1lLgorICAgTm90ZSB0aGF0IHlvdSBjYW4gc2V0dXAgbXVsdGlwbGUgYmFzZSBVUkxzIChmb3IgZXhhbXBsZSBvbmUgZm9yCisgICBnaXQ6Ly8gcHJvdG9jb2wgYWNjZXNzLCBhbm90aGVyIGZvciBodHRwOi8vIGFjY2VzcykgZnJvbSB0aGUgZ2l0d2ViCisgICBjb25maWcgZmlsZS4gIFtObyBkZWZhdWx0XQorICogR0lUV0VCX0NTUworICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0IGdpdHdlYi5jc3Mgb24geW91ciB3ZWIgc2VydmVyCisgICAob3IgdG8gYmUgbW9yZSBnZW5lcmljLCB0aGUgVVJJIG9mIGdpdHdlYiBzdHlsZXNoZWV0KS4gIFJlbGF0aXZlIHRvIHRoZQorICAgYmFzZSBVUkkgb2YgZ2l0d2ViLiAgTm90ZSB0aGF0IHlvdSBjYW4gc2V0dXAgbXVsdGlwbGUgc3R5bGVzaGVldHMgZnJvbQorICAgdGhlIGdpdHdlYiBjb25maWcgZmlsZS4gIFtEZWZhdWx0OiBzdGF0aWMvZ2l0d2ViLmNzcyAob3IKKyAgIHN0YXRpYy9naXR3ZWIubWluLmNzcyBpZiB0aGUgQ1NTTUlOIHZhcmlhYmxlIGlzIGRlZmluZWQgLyBDU1MgbWluaWZpZXIKKyAgIGlzIHVzZWQpXQorICogR0lUV0VCX0pTCisgICBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgZ2l0d2ViLmpzIG9uIHlvdXIgd2ViIHNlcnZlcgorICAgKG9yIHRvIGJlIG1vcmUgZ2VuZXJpYyBVUkkgb2YgSmF2YVNjcmlwdCBjb2RlIHVzZWQgYnkgZ2l0d2ViKS4KKyAgIFJlbGF0aXZlIHRvIGJhc2UgVVJJIG9mIGdpdHdlYi4gIFtEZWZhdWx0OiBzdGF0aWMvZ2l0d2ViLmpzIChvcgorICAgc3RhdGljL2dpdHdlYi5taW4uanMgaWYgSlNNSU4gYnVpbGQgdmFyaWFibGUgaXMgZGVmaW5lZCAvIEphdmFTY3JpcHQKKyAgIG1pbmlmaWVyIGlzIHVzZWQpXQorICogQ1NTTUlOLCBKU01JTgorICAgSW52b2NhdGlvbiBvZiBhIENTUyBtaW5pZmllciBvciBhIEphdmFTY3JpcHQgbWluaWZpZXIsIHJlc3BlY3RpdmVseSwKKyAgIHdvcmtpbmcgYXMgYSBmaWx0ZXIgKHNvdXJjZSBvbiBzdGFuZGFyZCBpbnB1dCwgbWluaWZpZWQgcmVzdWx0IG9uCisgICBzdGFuZGFyZCBvdXRwdXQpLiAgSWYgc2V0LCBpdCBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgbWluaWZpZWQgdmVyc2lvbiBvZgorICAgJ3N0YXRpYy9naXR3ZWIuY3NzJyBvciAnc3RhdGljL2dpdHdlYi5qcycsIHJlc3BlY3RpdmVseS4gICpOb3RlKiB0aGF0CisgICBtaW5pZmllZCBmaWxlcyB3b3VsZCBoYXZlICoubWluLmNzcyBhbmQgKi5taW4uanMgZXh0ZW5zaW9uLCB3aGljaCBpcworICAgaW1wb3J0YW50IGlmIHlvdSBhbHNvIHNldCBHSVRXRUJfQ1NTIGFuZC9vciBHSVRXRUJfSlMuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9MT0dPCisgICBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgZ2l0LWxvZ28ucG5nIG9uIHlvdXIgd2ViIHNlcnZlcgorICAgKG9yIHRvIGJlIG1vcmUgZ2VuZXJpYyBVUkkgb2YgbG9nbywgNzJ4Mjcgc2l6ZSwgZGlzcGxheWVkIGluIHRvcCByaWdodAorICAgY29ybmVyIG9mIGVhY2ggZ2l0d2ViIHBhZ2UsIGFuZCB1c2VkIGFzIGxvZ28gZm9yIEF0b20gZmVlZCkuICBSZWxhdGl2ZQorICAgdG8gYmFzZSBVUkkgb2YgZ2l0d2ViLiAgW0RlZmF1bHQ6IHN0YXRpYy9naXQtbG9nby5wbmddCisgKiBHSVRXRUJfRkFWSUNPTgorICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0IGdpdC1mYXZpY29uLnBuZyBvbiB5b3VyIHdlYiBzZXJ2ZXIKKyAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMgVVJJIG9mIGZhdmljb24sIGFzc3VtZWQgdG8gYmUgaW1hZ2UvcG5nIHR5cGU7CisgICB3ZWIgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGZhdmljb25zICh3ZWJzaXRlIGljb25zKSBtYXkgZGlzcGxheSB0aGVtCisgICBpbiB0aGUgYnJvd3NlcidzIFVSTCBiYXIgYW5kIG5leHQgdG8gc2l0ZSBuYW1lIGluIGJvb2ttYXJrcykuICBSZWxhdGl2ZQorICAgdG8gYmFzZSBVUkkgb2YgZ2l0d2ViLiAgW0RlZmF1bHQ6IHN0YXRpYy9naXQtZmF2aWNvbi5wbmddCisgKiBHSVRXRUJfQ09ORklHCisgICBUaGlzIFBlcmwgZmlsZSB3aWxsIGJlIGxvYWRlZCB1c2luZyAnZG8nIGFuZCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhbnkKKyAgIG9mIHRoZSBvcHRpb25zIGFib3ZlIGFzIHdlbGwgYXMgc29tZSBvdGhlciBvcHRpb25zIC0tIHNlZSB0aGUgIlJ1bnRpbWUKKyAgIGdpdHdlYiBjb25maWd1cmF0aW9uIiBzZWN0aW9uIGJlbG93LCBhbmQgdG9wIG9mICdnaXR3ZWIuY2dpJyBmb3IgdGhlaXIKKyAgIGZ1bGwgbGlzdCBhbmQgZGVzY3JpcHRpb24uICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUV0VCX0NPTkZJRworICAgaXMgc2V0IHdoZW4gZ2l0d2ViLmNnaSBpcyBleGVjdXRlZCwgdGhlbiB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGxvYWRlZCBpbnN0ZWFkIG9mIHRoZSBmaWxlIHNwZWNpZmllZAorICAgd2hlbiBnaXR3ZWIuY2dpIHdhcyBjcmVhdGVkLiAgW0RlZmF1bHQ6IGdpdHdlYl9jb25maWcucGVybF0KKyAqIEdJVFdFQl9DT05GSUdfU1lTVEVNCisgICBUaGlzIFBlcmwgZmlsZSB3aWxsIGJlIGxvYWRlZCB1c2luZyAnZG8nIGFzIGEgZmFsbGJhY2sgaWYgR0lUV0VCX0NPTkZJRworICAgZG9lcyBub3QgZXhpc3QuICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUV0VCX0NPTkZJR19TWVNURU0gaXMgc2V0CisgICB3aGVuIGdpdHdlYi5jZ2kgaXMgZXhlY3V0ZWQsIHRoZW4gdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudAorICAgdmFyaWFibGUgd2lsbCBiZSBsb2FkZWQgaW5zdGVhZCBvZiB0aGUgZmlsZSBzcGVjaWZpZWQgd2hlbiBnaXR3ZWIuY2dpIHdhcworICAgY3JlYXRlZC4gIFtEZWZhdWx0OiAvZXRjL2dpdHdlYi5jb25mXQorICogSElHSExJR0hUX0JJTgorICAgUGF0aCB0byB0aGUgaGlnaGxpZ2h0IGV4ZWN1dGFibGUgdG8gdXNlIChtdXN0IGJlIHRoZSBvbmUgZnJvbQorICAgaHR0cDovL3d3dy5hbmRyZS1zaW1vbi5kZSBkdWUgdG8gYXNzdW1wdGlvbnMgYWJvdXQgcGFyYW1ldGVycyBhbmQgb3V0cHV0KS4KKyAgIFVzZWZ1bCBpZiBoaWdobGlnaHQgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHdlYnNlcnZlcidzIFBBVEguCisgICBbRGVmYXVsdDogaGlnaGxpZ2h0XQorCitCdWlsZCBleGFtcGxlCit+fn5+fn5+fn5+fn5+CisKKy0gVG8gaW5zdGFsbCBnaXR3ZWIgdG8gL3Zhci93d3cvY2dpLWJpbi9naXR3ZWIvLCB3aGVuIGdpdCB3cmFwcGVyCisgIGlzIGluc3RhbGxlZCBhdCAvdXNyL2xvY2FsL2Jpbi9naXQsIHRoZSByZXBvc2l0b3JpZXMgKHByb2plY3RzKQorICB3ZSB3YW50IHRvIGRpc3BsYXkgYXJlIHVuZGVyIC9ob21lL2xvY2FsL3NjbSwgYW5kIHlvdSBkbyBub3QgdXNlCisgIG1pbmlmaWVycywgeW91IGNhbiBkbworCisJbWFrZSBHSVRXRUJfUFJPSkVDVFJPT1Q9Ii9ob21lL2xvY2FsL3NjbSIgXAorCSAgICAgR0lUV0VCX0pTPSJnaXR3ZWIvc3RhdGljL2dpdHdlYi5qcyIgXAorCSAgICAgR0lUV0VCX0NTUz0iZ2l0d2ViL3N0YXRpYy9naXR3ZWIuY3NzIiBcCisJICAgICBHSVRXRUJfTE9HTz0iZ2l0d2ViL3N0YXRpYy9naXQtbG9nby5wbmciIFwKKwkgICAgIEdJVFdFQl9GQVZJQ09OPSJnaXR3ZWIvc3RhdGljL2dpdC1mYXZpY29uLnBuZyIgXAorCSAgICAgYmluZGlyPS91c3IvbG9jYWwvYmluIFwKKwkgICAgIGdpdHdlYgorCisJbWFrZSBnaXR3ZWJkaXI9L3Zhci93d3cvY2dpLWJpbi9naXR3ZWIgaW5zdGFsbC1naXR3ZWIKKworCitHaXR3ZWIgY29uZmlnIGZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgYWxzbyAiUnVudGltZSBnaXR3ZWIgY29uZmlndXJhdGlvbiIgc2VjdGlvbiBpbiBSRUFETUUgZmlsZQorZm9yIGdpdHdlYiAoaW4gZ2l0d2ViL1JFQURNRSksIGFuZCBnaXR3ZWIuY29uZig1KSBtYW5wYWdlLgorCistIFlvdSBjYW4gY29uZmlndXJlIGdpdHdlYiBmdXJ0aGVyIHVzaW5nIHRoZSBwZXItaW5zdGFuY2UgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZTsKKyAgYnkgZGVmYXVsdCB0aGlzIGlzIGEgZmlsZSBuYW1lZCBnaXR3ZWJfY29uZmlnLnBlcmwgaW4gdGhlIHNhbWUgcGxhY2UgYXMKKyAgZ2l0d2ViLmNnaSBzY3JpcHQuIFlvdSBjYW4gY29udHJvbCB0aGUgZGVmYXVsdCBwbGFjZSBmb3IgdGhlIGNvbmZpZyBmaWxlCisgIHVzaW5nIHRoZSBHSVRXRUJfQ09ORklHIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCB5b3UgY2FuIHNldCBpdAorICB1c2luZyB0aGUgR0lUV0VCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgdGhpcyBmaWxlIGRvZXMgbm90CisgIGV4aXN0LCBnaXR3ZWIgbG9va3MgZm9yIGEgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLCBub3JtYWxseQorICAvZXRjL2dpdHdlYi5jb25mLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCB1c2luZyB0aGUKKyAgR0lUV0VCX0NPTkZJR19TWVNURU0gYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kIG92ZXJyaWRlIGl0CisgIHRocm91Z2ggdGhlIEdJVFdFQl9DT05GSUdfU1lTVEVNIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgIE5vdGUgdGhhdCB0aGUgR0lUV0VCX0NPTkZJR19TWVNURU0gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIGlzCisgIG9ubHkgdXNlZCBmb3IgaW5zdGFuY2VzIHRoYXQgbGFjayBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmaWxlLgorICBZb3UgY2FuIHVzZSBHSVRXRUJfQ09ORklHX0NPTU1PTiBjb21tb24gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbgorICBmaWxlIChub3JtYWxseSAvZXRjL2dpdHdlYi1jb21tb24uY29uZikgdG8ga2VlcCBjb21tb24gZGVmYXVsdAorICBzZXR0aW5ncyB0aGF0IGFwcGx5IHRvIGFsbCBpbnN0YW5jZXMuICBTZXR0aW5ncyBmcm9tIHBlci1pbnN0YW5jZSBvcgorICBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgb3ZlcnJpZGUgdGhvc2UgZnJvbSBjb21tb24gc3lzdGVtLXdpZGUKKyAgY29uZmlndXJhdGlvbiBmaWxlLgorCistIFRoZSBnaXR3ZWIgY29uZmlnIGZpbGUgaXMgYSBmcmFnbWVudCBvZiBwZXJsIGNvZGUuIFlvdSBjYW4gc2V0IHZhcmlhYmxlcworICB1c2luZyAib3VyICR2YXJpYWJsZSA9IHZhbHVlIjsgdGV4dCBmcm9tICIjIiBjaGFyYWN0ZXIgdW50aWwgdGhlIGVuZAorICBvZiBhIGxpbmUgaXMgaWdub3JlZC4gU2VlIHBlcmxzeW4oMSkgZm9yIGRldGFpbHMuCisKKyAgU2VlIHRoZSB0b3Agb2YgZ2l0d2ViLnBlcmwgZmlsZSBmb3IgZXhhbXBsZXMgb2YgY3VzdG9taXphYmxlIG9wdGlvbnMuCisKK0NvbmZpZyBmaWxlIGV4YW1wbGUKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworVG8gZW5hYmxlIGJsYW1lLCBwaWNrYXhlIHNlYXJjaCwgYW5kIHNuYXBzaG90IHN1cHBvcnQsIHdoaWxlIGFsbG93aW5nCitpbmRpdmlkdWFsIHByb2plY3RzIHRvIHR1cm4gdGhlbSBvZmYsIHB1dCB0aGUgZm9sbG93aW5nIGluIHlvdXIKK0dJVFdFQl9DT05GSUcgZmlsZToKKworCSRmZWF0dXJleydibGFtZSd9eydkZWZhdWx0J30gPSBbMV07CisJJGZlYXR1cmV7J2JsYW1lJ317J292ZXJyaWRlJ30gPSAxOworCisJJGZlYXR1cmV7J3BpY2theGUnfXsnZGVmYXVsdCd9ID0gWzFdOworCSRmZWF0dXJleydwaWNrYXhlJ317J292ZXJyaWRlJ30gPSAxOworCisJJGZlYXR1cmV7J3NuYXBzaG90J317J2RlZmF1bHQnfSA9IFsnemlwJywgJ3RneiddOworCSRmZWF0dXJleydzbmFwc2hvdCd9eydvdmVycmlkZSd9ID0gMTsKKworSWYgeW91IGFsbG93IG92ZXJyaWRpbmcgZm9yIHRoZSBzbmFwc2hvdCBmZWF0dXJlLCB5b3UgY2FuIHNwZWNpZnkgd2hpY2gKK3NuYXBzaG90IGZvcm1hdHMgYXJlIGdsb2JhbGx5IGRpc2FibGVkLiBZb3UgY2FuIGFsc28gYWRkIGFueSBjb21tYW5kIGxpbmUKK29wdGlvbnMgeW91IHdhbnQgKHN1Y2ggYXMgc2V0dGluZyB0aGUgY29tcHJlc3Npb24gbGV2ZWwpLiBGb3IgaW5zdGFuY2UsCit5b3UgY2FuIGRpc2FibGUgWmlwIGNvbXByZXNzZWQgc25hcHNob3RzIGFuZCBzZXQgR1ppcCB0byBydW4gYXQgbGV2ZWwgNiBieQorYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciAkR0lUV0VCX0NPTkZJRzoKKworCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd6aXAnfXsnZGlzYWJsZWQnfSA9IDE7CisJJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3Rneid9eydjb21wcmVzc29yJ30gPSBbJ2d6aXAnLCctNiddOworCisKK0dpdHdlYiByZXBvc2l0b3JpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCBnaXR3ZWIgc2hvd3MgYWxsIGdpdCByZXBvc2l0b3JpZXMgdW5kZXIgc2luZ2xlIGNvbW1vbiByZXBvc2l0b3J5Cityb290IG9uIGEgbG9jYWwgZmlsZXN5c3RlbTsgc2VlIGRlc2NyaXB0aW9uIG9mIEdJVFdFQl9QUk9KRUNUUk9PVCBidWlsZC10aW1lCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGFib3ZlIChhbmQgYWxzbyBvZiBHSVRXRUJfTElTVCkuCisKK01vcmUgYWR2YW5jZWQgdXNhZ2UsIGxpa2UgbGltaXRpbmcgYWNjZXNzIG9yIHZpc2liaWxpdHkgb2YgcmVwb3NpdG9yaWVzIGFuZAorbWFuYWdpbmcgbXVsdGlwbGUgcm9vdHMgYXJlIGRlc2NyaWJlZCBvbiBnaXR3ZWIgbWFucGFnZS4KKworCitFeGFtcGxlIHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU2VlIGFsc28gIldlYnNlcnZlciBjb25maWd1cmF0aW9uIiBhbmQgIkFkdmFuY2VkIHdlYiBzZXJ2ZXIgc2V0dXAiIHNlY3Rpb25zCitpbiBnaXR3ZWIoMSkgbWFucGFnZS4KKworCistIEFwYWNoZTIsIGdpdHdlYiBpbnN0YWxsZWQgYXMgQ0dJIHNjcmlwdCwKKyAgdW5kZXIgL3Zhci93d3cvY2dpLWJpbi8KKworCVNjcmlwdEFsaWFzIC9jZ2ktYmluLyAiL3Zhci93d3cvY2dpLWJpbi8iCisKKwk8RGlyZWN0b3J5ICIvdmFyL3d3dy9jZ2ktYmluIj4KKwkgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzIEV4ZWNDR0kKKwkgICAgQWxsb3dPdmVycmlkZSBOb25lCisJICAgIE9yZGVyIGFsbG93LGRlbnkKKwkgICAgQWxsb3cgZnJvbSBhbGwKKwk8L0RpcmVjdG9yeT4KKworLSBBcGFjaGUyLCBnaXR3ZWIgaW5zdGFsbGVkIGFzIG1vZF9wZXJsIGxlZ2FjeSBzY3JpcHQsCisgIHVuZGVyIC92YXIvd3d3L3BlcmwvCisKKwlBbGlhcyAvcGVybCAiL3Zhci93d3cvcGVybCIKKworCTxEaXJlY3RvcnkgIi92YXIvd3d3L3BlcmwiPgorCSAgICBTZXRIYW5kbGVyIHBlcmwtc2NyaXB0CisJICAgIFBlcmxSZXNwb25zZUhhbmRsZXIgTW9kUGVybDo6UmVnaXN0cnkKKwkgICAgUGVybE9wdGlvbnMgK1BhcnNlSGVhZGVycworCSAgICBPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltbGlua3MgK0V4ZWNDR0kKKwkgICAgQWxsb3dPdmVycmlkZSBOb25lCisJICAgIE9yZGVyIGFsbG93LGRlbnkKKwkgICAgQWxsb3cgZnJvbSBhbGwKKwk8L0RpcmVjdG9yeT4KZGlmZiAtLWdpdCBhL2dpdHdlYi9NYWtlZmlsZSBiL2dpdHdlYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDE5NGQwCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL01ha2VmaWxlCkBAIC0wLDAgKzEsMTk1IEBACisjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCithbGw6OgorCisjIERlZmluZSBWPTEgdG8gaGF2ZSBhIG1vcmUgdmVyYm9zZSBjb21waWxlLgorIworIyBEZWZpbmUgSlNNSU4gdG8gcG9pbnQgdG8gSmF2YVNjcmlwdCBtaW5pZmllciB0aGF0IGZ1bmN0aW9ucyBhcworIyBhIGZpbHRlciB0byBoYXZlIHN0YXRpYy9naXR3ZWIuanMgbWluaWZpZWQuCisjCisjIERlZmluZSBDU1NNSU4gdG8gcG9pbnQgdG8gYSBDU1MgbWluaWZpZXIgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBtaW5pZmllZAorIyB2ZXJzaW9uIG9mIHN0YXRpYy9naXR3ZWIuY3NzCisjCisKK3ByZWZpeCA/PSAkKEhPTUUpCitiaW5kaXIgPz0gJChwcmVmaXgpL2JpbgorZ2l0d2ViZGlyID89IC92YXIvd3d3L2NnaS1iaW4KKworUk0gPz0gcm0gLWYKK0lOU1RBTEwgPz0gaW5zdGFsbAorCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZ2l0d2ViCitHSVRXRUJfQ09ORklHID0gZ2l0d2ViX2NvbmZpZy5wZXJsCitHSVRXRUJfQ09ORklHX1NZU1RFTSA9IC9ldGMvZ2l0d2ViLmNvbmYKK0dJVFdFQl9DT05GSUdfQ09NTU9OID0gL2V0Yy9naXR3ZWItY29tbW9uLmNvbmYKK0dJVFdFQl9IT01FX0xJTktfU1RSID0gcHJvamVjdHMKK0dJVFdFQl9TSVRFTkFNRSA9CitHSVRXRUJfUFJPSkVDVFJPT1QgPSAvcHViL2dpdAorR0lUV0VCX1BST0pFQ1RfTUFYREVQVEggPSAyMDA3CitHSVRXRUJfRVhQT1JUX09LID0KK0dJVFdFQl9TVFJJQ1RfRVhQT1JUID0KK0dJVFdFQl9CQVNFX1VSTCA9CitHSVRXRUJfTElTVCA9CitHSVRXRUJfSE9NRVRFWFQgPSBpbmRleHRleHQuaHRtbAorR0lUV0VCX0NTUyA9IHN0YXRpYy9naXR3ZWIuY3NzCitHSVRXRUJfTE9HTyA9IHN0YXRpYy9naXQtbG9nby5wbmcKK0dJVFdFQl9GQVZJQ09OID0gc3RhdGljL2dpdC1mYXZpY29uLnBuZworR0lUV0VCX0pTID0gc3RhdGljL2dpdHdlYi5qcworR0lUV0VCX1NJVEVfSFRNTF9IRUFEX1NUUklORyA9CitHSVRXRUJfU0lURV9IRUFERVIgPQorR0lUV0VCX1NJVEVfRk9PVEVSID0KK0hJR0hMSUdIVF9CSU4gPSBoaWdobGlnaHQKKworIyBpbmNsdWRlIHVzZXIgY29uZmlnCistaW5jbHVkZSAuLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uL2NvbmZpZy5tYWsKKy1pbmNsdWRlIGNvbmZpZy5tYWsKKworIyBkZXRlcm1pbmUgdmVyc2lvbgorLi4vR0lULVZFUlNJT04tRklMRTogLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUKKwkkKFFVSUVUX1NVQkRJUjApLi4vICQoUVVJRVRfU1VCRElSMSkgR0lULVZFUlNJT04tRklMRQorCistaW5jbHVkZSAuLi9HSVQtVkVSU0lPTi1GSUxFCisKKyMjIyBCdWlsZCBydWxlcworCitTSEVMTF9QQVRIID89ICQoU0hFTEwpCitQRVJMX1BBVEggID89IC91c3IvYmluL3BlcmwKKworIyBTaGVsbCBxdW90ZTsKK2JpbmRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoYmluZGlyKSkjJworZ2l0d2ViZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXR3ZWJkaXIpKSMnCitnaXR3ZWJzdGF0aWNkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGdpdHdlYmRpcikvc3RhdGljKSMnCitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkjJworUEVSTF9QQVRIX1NRICA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkjJworREVTVERJUl9TUSAgICA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpIycKKworIyBRdWlldCBnZW5lcmF0aW9uICh1bmxlc3MgVj0xKQorUVVJRVRfU1VCRElSMCAgPSArJChNQUtFKSAtQyAjIHNwYWNlIHRvIHNlcGFyYXRlIC1DIGFuZCBzdWJkaXIKK1FVSUVUX1NVQkRJUjEgID0KKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUyksdyksdykKK1BSSU5UX0RJUiA9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CitlbHNlICMgIm1ha2UgLXciCitOT19TVUJESVIgPSA6CitlbmRpZgorCitpZm5lcSAoJChmaW5kc3RyaW5nICQoTUFLRUZMQUdTKSxzKSxzKQoraWZuZGVmIFYKKwlRVUlFVCAgICAgICAgICA9IEAKKwlRVUlFVF9HRU4gICAgICA9ICQoUVVJRVQpZWNobyAnICAgJyBHRU4gJEA7CisJUVVJRVRfU1VCRElSMCAgPSArQHN1YmRpcj0KKwlRVUlFVF9TVUJESVIxICA9IDskKE5PX1NVQkRJUikgZWNobyAnICAgJyBTVUJESVIgJCRzdWJkaXI7IFwKKwkgICAgICAgICAgICAgICAgICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKKwlleHBvcnQgUVVJRVQKKwlleHBvcnQgUVVJRVRfR0VOCisJZXhwb3J0IFFVSUVUX1NVQkRJUjAKKwlleHBvcnQgUVVJRVRfU1VCRElSMQorZW5kaWYKK2VuZGlmCisKK2FsbDo6IGdpdHdlYi5jZ2kgc3RhdGljL2dpdHdlYi5qcworCitHSVRXRUJfUFJPR1JBTVMgPSBnaXR3ZWIuY2dpCisKK2lmZGVmIEpTTUlOCitHSVRXRUJfRklMRVMgKz0gc3RhdGljL2dpdHdlYi5taW4uanMKK0dJVFdFQl9KUyA9IHN0YXRpYy9naXR3ZWIubWluLmpzCithbGw6OiBzdGF0aWMvZ2l0d2ViLm1pbi5qcworc3RhdGljL2dpdHdlYi5taW4uanM6IHN0YXRpYy9naXR3ZWIuanMgR0lUV0VCLUJVSUxELU9QVElPTlMKKwkkKFFVSUVUX0dFTikkKEpTTUlOKSA8JDwgPiRACitlbHNlCitHSVRXRUJfRklMRVMgKz0gc3RhdGljL2dpdHdlYi5qcworZW5kaWYKKworaWZkZWYgQ1NTTUlOCitHSVRXRUJfRklMRVMgKz0gc3RhdGljL2dpdHdlYi5taW4uY3NzCitHSVRXRUJfQ1NTID0gc3RhdGljL2dpdHdlYi5taW4uY3NzCithbGw6OiBzdGF0aWMvZ2l0d2ViLm1pbi5jc3MKK3N0YXRpYy9naXR3ZWIubWluLmNzczogc3RhdGljL2dpdHdlYi5jc3MgR0lUV0VCLUJVSUxELU9QVElPTlMKKwkkKFFVSUVUX0dFTikkKENTU01JTikgPCQ8ID4kQAorZWxzZQorR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXR3ZWIuY3NzCitlbmRpZgorCitHSVRXRUJfRklMRVMgKz0gc3RhdGljL2dpdC1sb2dvLnBuZyBzdGF0aWMvZ2l0LWZhdmljb24ucG5nCisKKyMgSmF2YVNjcmlwdCBmaWxlcyB0aGF0IGFyZSBjb21wb3NlZCAoY29uY2F0ZW5hdGVkKSB0byBmb3JtIGdpdHdlYi5qcworIworIyBqcy9saWIvY29tbW9uLWxpYi5qcyBzaG91bGQgYmUgYWx3YXlzIGZpcnN0LCB0aGVuIGpzL2xpYi8qLmpzLAorIyB0aGVuIHRoZSByZXN0IG9mIGZpbGVzOyBqcy9naXR3ZWIuanMgc2hvdWxkIGJlIGxhc3QgKGlmIGl0IGV4aXN0cykKK0dJVFdFQl9KU0xJQl9GSUxFUyArPSBzdGF0aWMvanMvbGliL2NvbW1vbi1saWIuanMKK0dJVFdFQl9KU0xJQl9GSUxFUyArPSBzdGF0aWMvanMvbGliL2RhdGV0aW1lLmpzCitHSVRXRUJfSlNMSUJfRklMRVMgKz0gc3RhdGljL2pzL2xpYi9jb29raWVzLmpzCitHSVRXRUJfSlNMSUJfRklMRVMgKz0gc3RhdGljL2pzL2phdmFzY3JpcHQtZGV0ZWN0aW9uLmpzCitHSVRXRUJfSlNMSUJfRklMRVMgKz0gc3RhdGljL2pzL2FkanVzdC10aW1lem9uZS5qcworR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9ibGFtZV9pbmNyZW1lbnRhbC5qcworCisKK0dJVFdFQl9SRVBMQUNFID0gXAorCS1lICdzfCsrR0lUX1ZFUlNJT04rK3wkKEdJVF9WRVJTSU9OKXxnJyBcCisJLWUgJ3N8KytHSVRfQklORElSKyt8JChiaW5kaXIpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9DT05GSUcrK3wkKEdJVFdFQl9DT05GSUcpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9DT05GSUdfU1lTVEVNKyt8JChHSVRXRUJfQ09ORklHX1NZU1RFTSl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0NPTkZJR19DT01NT04rK3wkKEdJVFdFQl9DT05GSUdfQ09NTU9OKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfSE9NRV9MSU5LX1NUUisrfCQoR0lUV0VCX0hPTUVfTElOS19TVFIpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9TSVRFTkFNRSsrfCQoR0lUV0VCX1NJVEVOQU1FKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfUFJPSkVDVFJPT1QrK3wkKEdJVFdFQl9QUk9KRUNUUk9PVCl8ZycgXAorCS1lICdzfCIrK0dJVFdFQl9QUk9KRUNUX01BWERFUFRIKysifCQoR0lUV0VCX1BST0pFQ1RfTUFYREVQVEgpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9FWFBPUlRfT0srK3wkKEdJVFdFQl9FWFBPUlRfT0spfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9TVFJJQ1RfRVhQT1JUKyt8JChHSVRXRUJfU1RSSUNUX0VYUE9SVCl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0JBU0VfVVJMKyt8JChHSVRXRUJfQkFTRV9VUkwpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9MSVNUKyt8JChHSVRXRUJfTElTVCl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0hPTUVURVhUKyt8JChHSVRXRUJfSE9NRVRFWFQpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9DU1MrK3wkKEdJVFdFQl9DU1MpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9MT0dPKyt8JChHSVRXRUJfTE9HTyl8ZycgXAorCS1lICdzfCsrR0lUV0VCX0ZBVklDT04rK3wkKEdJVFdFQl9GQVZJQ09OKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfSlMrK3wkKEdJVFdFQl9KUyl8ZycgXAorCS1lICdzfCsrR0lUV0VCX1NJVEVfSFRNTF9IRUFEX1NUUklORysrfCQoR0lUV0VCX1NJVEVfSFRNTF9IRUFEX1NUUklORyl8ZycgXAorCS1lICdzfCsrR0lUV0VCX1NJVEVfSEVBREVSKyt8JChHSVRXRUJfU0lURV9IRUFERVIpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9TSVRFX0ZPT1RFUisrfCQoR0lUV0VCX1NJVEVfRk9PVEVSKXxnJyBcCisJLWUgJ3N8KytISUdITElHSFRfQklOKyt8JChISUdITElHSFRfQklOKXxnJworCitHSVRXRUItQlVJTEQtT1BUSU9OUzogRk9SQ0UKKwlAcm0gLWYgJEArCisJQGVjaG8gIngiICckKFBFUkxfUEFUSF9TUSknICQoR0lUV0VCX1JFUExBQ0UpICIkKEpTTUlOKXwkKENTU01JTikiID4kQCsKKwlAY21wIC1zICRAKyAkQCAmJiBybSAtZiAkQCsgfHwgbXYgLWYgJEArICRACisKK2dpdHdlYi5jZ2k6IGdpdHdlYi5wZXJsIEdJVFdFQi1CVUlMRC1PUFRJT05TCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwlzZWQgLWUgJzFzfCMhLipwZXJsfCMhJChQRVJMX1BBVEhfU1EpfCcgXAorCQkkKEdJVFdFQl9SRVBMQUNFKSAkPCA+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12ICRAKyAkQAorCitzdGF0aWMvZ2l0d2ViLmpzOiAkKEdJVFdFQl9KU0xJQl9GSUxFUykKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXAorCWNhdCAkXiA+JEArICYmIFwKKwltdiAkQCsgJEAKKworIyMjIFRlc3RpbmcgcnVsZXMKKwordGVzdDoKKwkkKE1BS0UpIC1DIC4uL3QgZ2l0d2ViLXRlc3QKKwordGVzdC1pbnN0YWxsZWQ6CisJR0lUV0VCX1RFU1RfSU5TVEFMTEVEPSckKERFU1RESVJfU1EpJChnaXR3ZWJkaXJfU1EpJyBcCisJCSQoTUFLRSkgLUMgLi4vdCBnaXR3ZWItdGVzdAorCisjIyMgSW5zdGFsbGF0aW9uIHJ1bGVzCisKK2luc3RhbGw6IGFsbAorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChnaXR3ZWJkaXJfU1EpJworCSQoSU5TVEFMTCkgLW0gNzU1ICQoR0lUV0VCX1BST0dSQU1TKSAnJChERVNURElSX1NRKSQoZ2l0d2ViZGlyX1NRKScKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQoZ2l0d2Vic3RhdGljZGlyX1NRKScKKwkkKElOU1RBTEwpIC1tIDY0NCAkKEdJVFdFQl9GSUxFUykgJyQoREVTVERJUl9TUSkkKGdpdHdlYnN0YXRpY2Rpcl9TUSknCisKKyMjIyBDbGVhbmluZyBydWxlcworCitjbGVhbjoKKwkkKFJNKSBnaXR3ZWIuY2dpIHN0YXRpYy9naXR3ZWIuanMgXAorCQlzdGF0aWMvZ2l0d2ViLm1pbi5qcyBzdGF0aWMvZ2l0d2ViLm1pbi5jc3MgXAorCQlHSVRXRUItQlVJTEQtT1BUSU9OUworCisuUEhPTlk6IGFsbCBjbGVhbiBpbnN0YWxsIHRlc3QgdGVzdC1pbnN0YWxsZWQgLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUgRk9SQ0UKKwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL1JFQURNRSBiL2dpdHdlYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxZGNmYgotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9SRUFETUUKQEAgLTAsMCArMSw3MCBAQAorR0lUIHdlYiBJbnRlcmZhY2UKKz09PT09PT09PT09PT09PT09CisKK0Zyb20gdGhlIGdpdCB2ZXJzaW9uIDEuNC4wIGdpdHdlYiBpcyBidW5kbGVkIHdpdGggZ2l0LgorCisKK0J1aWxkIHRpbWUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSBtYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdoaWNoIGFmZmVjdCBidWlsZGluZyBnaXR3ZWIgKGFtb25nCitvdGhlcnMgY3JlYXRpbmcgZ2l0d2ViLmNnaSBvdXQgb2YgZ2l0d2ViLnBlcmwgYnkgcmVwbGFjaW5nIHBsYWNlaG9sZGVycyBzdWNoCithcyBgKytHSVRfQklORElSKytgIGJ5IHRoZWlyIGJ1aWxkLXRpbWUgdmFsdWVzKS4KKworQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgZ2l0d2ViIGlzIGRlc2NyaWJlZCBpbiBnaXR3ZWIncyBJTlNUQUxMIGZpbGUKKyhpbiAnZ2l0d2ViL0lOU1RBTEwnKS4KKworCitSdW50aW1lIGdpdHdlYiBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHaXR3ZWIgb2J0YWlucyBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMgaW4gdGhlCitmb2xsb3dpbmcgb3JkZXI6CisKKzEuIGJ1aWx0LWluIHZhbHVlcyAoc29tZSBzZXQgZHVyaW5nIGJ1aWxkIHN0YWdlKSwKKzIuIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgKGBHSVRXRUJfQ09ORklHX0NPTU1PTmAsCisgICBkZWZhdWx0cyB0byAnL2V0Yy9naXR3ZWItY29tbW9uLmNvbmYnKSwKKzMuIGVpdGhlciBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmaWxlIChgR0lUV0VCX0NPTkZJR2AsIGRlZmF1bHRzIHRvCisgICAnZ2l0d2ViX2NvbmZpZy5wZXJsJyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGluc3RhbGxlZCBnaXR3ZWIpLAorICAgb3IgaWYgaXQgZG9lcyBub3QgZXhpc3RzIHRoZW4gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlCisgICAoYEdJVFdFQl9DT05GSUdfU1lTVEVNYCwgZGVmYXVsdHMgdG8gJy9ldGMvZ2l0d2ViLmNvbmYnKS4KKworVmFsdWVzIG9idGFpbmVkIGluIGxhdGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3ZlcnJpZGUgdmFsdWVzIG9idGFpbmVkIGVhcmxpZXIKK2luIGFib3ZlIHNlcXVlbmNlLgorCitZb3UgY2FuIHJlYWQgZGVmYXVsdHMgaW4gc3lzdGVtLXdpZGUgR0lUV0VCX0NPTkZJR19TWVNURU0gZnJvbSBHSVRXRUJfQ09ORklHCitieSBhZGRpbmcKKworICByZWFkX2NvbmZpZ19maWxlKCRHSVRXRUJfQ09ORklHX1NZU1RFTSk7CisKK2F0IHZlcnkgYmVnaW5uaW5nIG9mIHBlci1pbnN0YW5jZSBHSVRXRUJfQ09ORklHIGZpbGUuICBJbiB0aGlzIGNhc2UKK3NldHRpbmdzIGluIHNhaWQgcGVyLWluc3RhbmNlIGZpbGUgd2lsbCBvdmVycmlkZSBzZXR0aW5ncyBmcm9tCitzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBOb3RlIHRoYXQgcmVhZF9jb25maWdfZmlsZSBjaGVja3MKK2l0c2VsZiB0aGF0IHRoZSAkR0lUV0VCX0NPTkZJR19TWVNURU0gZmlsZSBleGlzdHMuCisKK1RoZSBtb3N0IG5vdGFibGUgdGhpbmcgdGhhdCBpcyBub3QgY29uZmlndXJhYmxlIGF0IGNvbXBpbGUgdGltZSBhcmUgdGhlCitvcHRpb25hbCBmZWF0dXJlcywgc3RvcmVkIGluIHRoZSAnJWZlYXR1cmVzJyB2YXJpYWJsZS4KKworVWx0aW1hdGUgZGVzY3JpcHRpb24gb24gaG93IHRvIHJlY29uZmlndXJlIHRoZSBkZWZhdWx0IGZlYXR1cmVzIHNldHRpbmcKK2luIHlvdXIgYEdJVFdFQl9DT05GSUdgIG9yIHBlci1wcm9qZWN0IGluIGBwcm9qZWN0LmdpdC9jb25maWdgIGNhbiBiZSBmb3VuZAorYXMgY29tbWVudHMgaW5zaWRlICdnaXR3ZWIuY2dpJy4KKworU2VlIGFsc28gZ2l0d2ViLmNvbmYoNSkgbWFucGFnZS4KKworCitXZWIgc2VydmVyIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2l0d2ViIGNhbiBiZSBydW4gYXMgQ0dJIHNjcmlwdCwgYXMgbGVnYWN5IG1vZF9wZXJsIGFwcGxpY2F0aW9uICh1c2luZworTW9kUGVybDo6UmVnaXN0cnkpLCBhbmQgYXMgRmFzdENHSSBzY3JpcHQuICBZb3UgY2FuIGZpbmQgc29tZSBzaW1wbGUgZXhhbXBsZXMKK2luICJFeGFtcGxlIHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbiIgc2VjdGlvbiBpbiBJTlNUQUxMIGZpbGUgZm9yIGdpdHdlYiAoaW4KK2dpdHdlYi9JTlNUQUxMKS4KKworU2VlICJXZWJzZXJ2ZXIgY29uZmlndXJhdGlvbiIgYW5kICJBZHZhbmNlZCB3ZWIgc2VydmVyIHNldHVwIiBzZWN0aW9ucyBpbgorZ2l0d2ViKDEpIG1hbnBhZ2UuCisKKworQVVUSE9SUworLS0tLS0tLQorT3JpZ2luYWxseSB3cml0dGVuIGJ5OgorICBLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNAdnJmeS5vcmc+CisKK0FueSBjb21tZW50L3F1ZXN0aW9uL2NvbmNlcm4gdG86CisgIEdpdCBtYWlsaW5nIGxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+CmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLnBlcmwgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjVhM2E5ZQotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9naXR3ZWIucGVybApAQCAtMCwwICsxLDg0NjcgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIGdpdHdlYiAtIHNpbXBsZSB3ZWIgaW50ZXJmYWNlIHRvIHRyYWNrIGNoYW5nZXMgaW4gZ2l0IHJlcG9zaXRvcmllcworIworIyAoQykgMjAwNS0yMDA2LCBLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNAdnJmeS5vcmc+CisjIChDKSAyMDA1LCBDaHJpc3RpYW4gR2llcmtlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjIKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKyMgaGFuZGxlIEFDTCBpbiBmaWxlIGFjY2VzcyB0ZXN0cwordXNlIGZpbGV0ZXN0ICdhY2Nlc3MnOwordXNlIENHSSBxdyg6c3RhbmRhcmQgOmVzY2FwZUhUTUwgLW5vc3RpY2t5KTsKK3VzZSBDR0k6OlV0aWwgcXcodW5lc2NhcGUpOwordXNlIENHSTo6Q2FycCBxdyhmYXRhbHNUb0Jyb3dzZXIgc2V0X21lc3NhZ2UpOwordXNlIEVuY29kZTsKK3VzZSBGY250bCAnOm1vZGUnOwordXNlIEZpbGU6OkZpbmQgcXcoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhiYXNlbmFtZSk7Cit1c2UgVGltZTo6SGlSZXMgcXcoZ2V0dGltZW9mZGF5IHR2X2ludGVydmFsKTsKK3VzZSBEaWdlc3Q6Ok1ENSBxdyhtZDVfaGV4KTsKKworYmlubW9kZSBTVERPVVQsICc6dXRmOCc7CisKK2lmICghZGVmaW5lZCgkQ0dJOjpWRVJTSU9OKSB8fCAkQ0dJOjpWRVJTSU9OIDwgNC4wOCkgeworCWV2YWwgJ3N1YiBDR0k6Om11bHRpX3BhcmFtIHsgQ0dJOjpwYXJhbShAXykgfScKK30KKworb3VyICR0MCA9IFsgZ2V0dGltZW9mZGF5KCkgXTsKK291ciAkbnVtYmVyX29mX2dpdF9jbWRzID0gMDsKKworQkVHSU4geworCUNHSS0+Y29tcGlsZSgpIGlmICRFTlZ7J01PRF9QRVJMJ307Cit9CisKK291ciAkdmVyc2lvbiA9ICIrK0dJVF9WRVJTSU9OKysiOworCitvdXIgKCRteV91cmwsICRteV91cmksICRiYXNlX3VybCwgJHBhdGhfaW5mbywgJGhvbWVfbGluayk7CitzdWIgZXZhbHVhdGVfdXJpIHsKKwlvdXIgJGNnaTsKKworCW91ciAkbXlfdXJsID0gJGNnaS0+dXJsKCk7CisJb3VyICRteV91cmkgPSAkY2dpLT51cmwoLWFic29sdXRlID0+IDEpOworCisJIyBCYXNlIFVSTCBmb3IgcmVsYXRpdmUgVVJMcyBpbiBnaXR3ZWIgKCRsb2dvLCAkZmF2aWNvbiwgLi4uKSwKKwkjIG5lZWRlZCBhbmQgdXNlZCBvbmx5IGZvciBVUkxzIHdpdGggbm9uZW1wdHkgUEFUSF9JTkZPCisJb3VyICRiYXNlX3VybCA9ICRteV91cmw7CisKKwkjIFdoZW4gdGhlIHNjcmlwdCBpcyB1c2VkIGFzIERpcmVjdG9yeUluZGV4LCB0aGUgVVJMIGRvZXMgbm90IGNvbnRhaW4gdGhlIG5hbWUKKwkjIG9mIHRoZSBzY3JpcHQgZmlsZSBpdHNlbGYsIGFuZCAkY2dpLT51cmwoKSBmYWlscyB0byBzdHJpcCBQQVRIX0lORk8sIHNvIHdlCisJIyBoYXZlIHRvIGRvIGl0IG91cnNlbHZlcy4gV2UgbWFrZSAkcGF0aF9pbmZvIGdsb2JhbCBiZWNhdXNlIGl0J3MgYWxzbyB1c2VkCisJIyBsYXRlciBvbi4KKwkjCisJIyBBbm90aGVyIGlzc3VlIHdpdGggdGhlIHNjcmlwdCBiZWluZyB0aGUgRGlyZWN0b3J5SW5kZXggaXMgdGhhdCB0aGUgcmVzdWx0aW5nCisJIyAkbXlfdXJsIGRhdGEgaXMgbm90IHRoZSBmdWxsIHNjcmlwdCBVUkw6IHRoaXMgaXMgZ29vZCwgYmVjYXVzZSB3ZSB3YW50CisJIyBnZW5lcmF0ZWQgbGlua3MgdG8ga2VlcCBpbXBseWluZyB0aGUgc2NyaXB0IG5hbWUgaWYgaXQgd2Fzbid0IGV4cGxpY2l0bHkKKwkjIGluZGljYXRlZCBpbiB0aGUgVVJMIHdlJ3JlIGhhbmRsaW5nLCBidXQgaXQgbWVhbnMgdGhhdCAkbXlfdXJsIGNhbm5vdCBiZSB1c2VkCisJIyBhcyBiYXNlIFVSTC4KKwkjIFRoZXJlZm9yZSwgaWYgd2UgbmVlZGVkIHRvIHN0cmlwIFBBVEhfSU5GTywgdGhlbiB3ZSBrbm93IHRoYXQgd2UgaGF2ZQorCSMgdG8gYnVpbGQgdGhlIGJhc2UgVVJMIG91cnNlbHZlczoKKwlvdXIgJHBhdGhfaW5mbyA9IGRlY29kZV91dGY4KCRFTlZ7IlBBVEhfSU5GTyJ9KTsKKwlpZiAoJHBhdGhfaW5mbykgeworCQkjICRwYXRoX2luZm8gaGFzIGFscmVhZHkgYmVlbiBVUkwtZGVjb2RlZCBieSB0aGUgd2ViIHNlcnZlciwgYnV0CisJCSMgJG15X3VybCBhbmQgJG15X3VyaSBoYXZlIG5vdC4gVVJMLWRlY29kZSB0aGVtIHNvIHdlIGNhbiBwcm9wZXJseQorCQkjIHN0cmlwICRwYXRoX2luZm8uCisJCSRteV91cmwgPSB1bmVzY2FwZSgkbXlfdXJsKTsKKwkJJG15X3VyaSA9IHVuZXNjYXBlKCRteV91cmkpOworCQlpZiAoJG15X3VybCA9fiBzLFxRJHBhdGhfaW5mb1xFJCwsICYmCisJCSAgICAkbXlfdXJpID1+IHMsXFEkcGF0aF9pbmZvXEUkLCwgJiYKKwkJICAgIGRlZmluZWQgJEVOVnsnU0NSSVBUX05BTUUnfSkgeworCQkJJGJhc2VfdXJsID0gJGNnaS0+dXJsKC1iYXNlID0+IDEpIC4gJEVOVnsnU0NSSVBUX05BTUUnfTsKKwkJfQorCX0KKworCSMgdGFyZ2V0IG9mIHRoZSBob21lIGxpbmsgb24gdG9wIG9mIGFsbCBwYWdlcworCW91ciAkaG9tZV9saW5rID0gJG15X3VyaSB8fCAiLyI7Cit9CisKKyMgY29yZSBnaXQgZXhlY3V0YWJsZSB0byB1c2UKKyMgdGhpcyBjYW4ganVzdCBiZSAiZ2l0IiBpZiB5b3VyIHdlYnNlcnZlciBoYXMgYSBzZW5zaWJsZSBQQVRICitvdXIgJEdJVCA9ICIrK0dJVF9CSU5ESVIrKy9naXQiOworCisjIGFic29sdXRlIGZzLXBhdGggd2hpY2ggd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIHByb2plY3QgcGF0aAorI291ciAkcHJvamVjdHJvb3QgPSAiL3B1Yi9zY20iOworb3VyICRwcm9qZWN0cm9vdCA9ICIrK0dJVFdFQl9QUk9KRUNUUk9PVCsrIjsKKworIyBmcyB0cmF2ZXJzaW5nIGxpbWl0IGZvciBnZXR0aW5nIHByb2plY3QgbGlzdAorIyB0aGUgbnVtYmVyIGlzIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0cm9vdAorb3VyICRwcm9qZWN0X21heGRlcHRoID0gIisrR0lUV0VCX1BST0pFQ1RfTUFYREVQVEgrKyI7CisKKyMgc3RyaW5nIG9mIHRoZSBob21lIGxpbmsgb24gdG9wIG9mIGFsbCBwYWdlcworb3VyICRob21lX2xpbmtfc3RyID0gIisrR0lUV0VCX0hPTUVfTElOS19TVFIrKyI7CisKKyMgZXh0cmEgYnJlYWRjcnVtYnMgcHJlY2VkaW5nIHRoZSBob21lIGxpbmsKK291ciBAZXh0cmFfYnJlYWRjcnVtYnMgPSAoKTsKKworIyBuYW1lIG9mIHlvdXIgc2l0ZSBvciBvcmdhbml6YXRpb24gdG8gYXBwZWFyIGluIHBhZ2UgdGl0bGVzCisjIHJlcGxhY2UgdGhpcyB3aXRoIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlIGZvciBjbGVhcmVyIGJvb2ttYXJrcworb3VyICRzaXRlX25hbWUgPSAiKytHSVRXRUJfU0lURU5BTUUrKyIKKyAgICAgICAgICAgICAgICAgfHwgKCRFTlZ7J1NFUlZFUl9OQU1FJ30gfHwgIlVudGl0bGVkIikgLiAiIEdpdCI7CisKKyMgaHRtbCBzbmlwcGV0IHRvIGluY2x1ZGUgaW4gdGhlIDxoZWFkPiBzZWN0aW9uIG9mIGVhY2ggcGFnZQorb3VyICRzaXRlX2h0bWxfaGVhZF9zdHJpbmcgPSAiKytHSVRXRUJfU0lURV9IVE1MX0hFQURfU1RSSU5HKysiOworIyBmaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCB0b3Agb2YgZWFjaCBwYWdlCitvdXIgJHNpdGVfaGVhZGVyID0gIisrR0lUV0VCX1NJVEVfSEVBREVSKysiOworIyBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCBob21lIHBhZ2UKK291ciAkaG9tZV90ZXh0ID0gIisrR0lUV0VCX0hPTUVURVhUKysiOworIyBmaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCBib3R0b20gb2YgZWFjaCBwYWdlCitvdXIgJHNpdGVfZm9vdGVyID0gIisrR0lUV0VCX1NJVEVfRk9PVEVSKysiOworCisjIFVSSSBvZiBzdHlsZXNoZWV0cworb3VyIEBzdHlsZXNoZWV0cyA9ICgiKytHSVRXRUJfQ1NTKysiKTsKKyMgVVJJIG9mIGEgc2luZ2xlIHN0eWxlc2hlZXQsIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIGluIEdJVFdFQl9DT05GSUcuCitvdXIgJHN0eWxlc2hlZXQgPSB1bmRlZjsKKyMgVVJJIG9mIEdJVCBsb2dvICg3MngyNyBzaXplKQorb3VyICRsb2dvID0gIisrR0lUV0VCX0xPR08rKyI7CisjIFVSSSBvZiBHSVQgZmF2aWNvbiwgYXNzdW1lZCB0byBiZSBpbWFnZS9wbmcgdHlwZQorb3VyICRmYXZpY29uID0gIisrR0lUV0VCX0ZBVklDT04rKyI7CisjIFVSSSBvZiBnaXR3ZWIuanMgKEphdmFTY3JpcHQgY29kZSBmb3IgZ2l0d2ViKQorb3VyICRqYXZhc2NyaXB0ID0gIisrR0lUV0VCX0pTKysiOworCisjIFVSSSBhbmQgbGFiZWwgKHRpdGxlKSBvZiBHSVQgbG9nbyBsaW5rCisjb3VyICRsb2dvX3VybCA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8iOworI291ciAkbG9nb19sYWJlbCA9ICJnaXQgZG9jdW1lbnRhdGlvbiI7CitvdXIgJGxvZ29fdXJsID0gImh0dHA6Ly9naXQtc2NtLmNvbS8iOworb3VyICRsb2dvX2xhYmVsID0gImdpdCBob21lcGFnZSI7CisKKyMgc291cmNlIG9mIHByb2plY3RzIGxpc3QKK291ciAkcHJvamVjdHNfbGlzdCA9ICIrK0dJVFdFQl9MSVNUKysiOworCisjIHRoZSB3aWR0aCAoaW4gY2hhcmFjdGVycykgb2YgdGhlIHByb2plY3RzIGxpc3QgIkRlc2NyaXB0aW9uIiBjb2x1bW4KK291ciAkcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aCA9IDI1OworCisjIGdyb3VwIHByb2plY3RzIGJ5IGNhdGVnb3J5IG9uIHRoZSBwcm9qZWN0cyBsaXN0CisjIChlbmFibGVkIGlmIHRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRydWUpCitvdXIgJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllcyA9IDA7CisKKyMgZGVmYXVsdCBjYXRlZ29yeSBpZiBub25lIHNwZWNpZmllZAorIyAobGVhdmUgdGhlIGVtcHR5IHN0cmluZyBmb3Igbm8gY2F0ZWdvcnkpCitvdXIgJHByb2plY3RfbGlzdF9kZWZhdWx0X2NhdGVnb3J5ID0gIiI7CisKKyMgZGVmYXVsdCBvcmRlciBvZiBwcm9qZWN0cyBsaXN0CisjIHZhbGlkIHZhbHVlcyBhcmUgbm9uZSwgcHJvamVjdCwgZGVzY3IsIG93bmVyLCBhbmQgYWdlCitvdXIgJGRlZmF1bHRfcHJvamVjdHNfb3JkZXIgPSAicHJvamVjdCI7CisKKyMgc2hvdyByZXBvc2l0b3J5IG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cworIyAob25seSBlZmZlY3RpdmUgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZSkKK291ciAkZXhwb3J0X29rID0gIisrR0lUV0VCX0VYUE9SVF9PSysrIjsKKworIyBkb24ndCBnZW5lcmF0ZSBhZ2UgY29sdW1uIG9uIHRoZSBwcm9qZWN0cyBsaXN0IHBhZ2UKK291ciAkb21pdF9hZ2VfY29sdW1uID0gMDsKKworIyBkb24ndCBnZW5lcmF0ZSBpbmZvcm1hdGlvbiBhYm91dCBvd25lcnMgb2YgcmVwb3NpdG9yaWVzCitvdXIgJG9taXRfb3duZXI9MDsKKworIyBzaG93IHJlcG9zaXRvcnkgb25seSBpZiB0aGlzIHN1YnJvdXRpbmUgcmV0dXJucyB0cnVlCisjIHdoZW4gZ2l2ZW4gdGhlIHBhdGggdG8gdGhlIHByb2plY3QsIGZvciBleGFtcGxlOgorIyAgICBzdWIgeyByZXR1cm4gLWUgIiRfWzBdL2dpdC1kYWVtb24tZXhwb3J0LW9rIjsgfQorb3VyICRleHBvcnRfYXV0aF9ob29rID0gdW5kZWY7CisKKyMgb25seSBhbGxvdyB2aWV3aW5nIG9mIHJlcG9zaXRvcmllcyBhbHNvIHNob3duIG9uIHRoZSBvdmVydmlldyBwYWdlCitvdXIgJHN0cmljdF9leHBvcnQgPSAiKytHSVRXRUJfU1RSSUNUX0VYUE9SVCsrIjsKKworIyBsaXN0IG9mIGdpdCBiYXNlIFVSTHMgdXNlZCBmb3IgVVJMIHRvIHdoZXJlIGZldGNoIHByb2plY3QgZnJvbSwKKyMgaS5lLiBmdWxsIFVSTCBpcyAiJGdpdF9iYXNlX3VybC8kcHJvamVjdCIKK291ciBAZ2l0X2Jhc2VfdXJsX2xpc3QgPSBncmVwIHsgJF8gbmUgJycgfSAoIisrR0lUV0VCX0JBU0VfVVJMKysiKTsKKworIyBkZWZhdWx0IGJsb2JfcGxhaW4gbWltZXR5cGUgYW5kIGRlZmF1bHQgY2hhcnNldCBmb3IgdGV4dC9wbGFpbiBibG9iCitvdXIgJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZSA9ICd0ZXh0L3BsYWluJzsKK291ciAkZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQgID0gdW5kZWY7CisKKyMgZmlsZSB0byB1c2UgZm9yIGd1ZXNzaW5nIE1JTUUgdHlwZXMgYmVmb3JlIHRyeWluZyAvZXRjL21pbWUudHlwZXMKKyMgKHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGdpdCByZXBvc2l0b3J5KQorb3VyICRtaW1ldHlwZXNfZmlsZSA9IHVuZGVmOworCisjIGFzc3VtZSB0aGlzIGNoYXJzZXQgaWYgbGluZSBjb250YWlucyBub24tVVRGLTggY2hhcmFjdGVyczsKKyMgaXQgc2hvdWxkIGJlIHZhbGlkIGVuY29kaW5nIChzZWUgRW5jb2Rpbmc6OlN1cHBvcnRlZCgzcG0pIGZvciBsaXN0KSwKKyMgZm9yIHdoaWNoIGVuY29kaW5nIGFsbCBieXRlIHNlcXVlbmNlcyBhcmUgdmFsaWQsIGZvciBleGFtcGxlCisjICdpc28tODg1OS0xJyBha2EgJ2xhdGluMScgKGl0IGlzIGRlY29kZWQgd2l0aG91dCBjaGVja2luZywgc28gaXQKKyMgY291bGQgYmUgZXZlbiAndXRmLTgnIGZvciB0aGUgb2xkIGJlaGF2aW9yKQorb3VyICRmYWxsYmFja19lbmNvZGluZyA9ICdsYXRpbjEnOworCisjIHJlbmFtZSBkZXRlY3Rpb24gb3B0aW9ucyBmb3IgZ2l0LWRpZmYgYW5kIGdpdC1kaWZmLXRyZWUKKyMgLSBkZWZhdWx0IGlzICctTScsIHdpdGggdGhlIGNvc3QgcHJvcG9ydGlvbmFsIHRvCisjICAgKG51bWJlciBvZiByZW1vdmVkIGZpbGVzKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKS4KKyMgLSBtb3JlIGNvc3RseSBpcyAnLUMnICh3aGljaCBpbXBsaWVzICctTScpLCB3aXRoIHRoZSBjb3N0IHByb3BvcnRpb25hbCB0bworIyAgIChudW1iZXIgb2YgY2hhbmdlZCBmaWxlcyArIG51bWJlciBvZiByZW1vdmVkIGZpbGVzKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKQorIyAtIGV2ZW4gbW9yZSBjb3N0bHkgaXMgJy1DJywgJy0tZmluZC1jb3BpZXMtaGFyZGVyJyB3aXRoIGNvc3QKKyMgICAobnVtYmVyIG9mIGZpbGVzIGluIHRoZSBvcmlnaW5hbCB0cmVlKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKQorIyAtIG9uZSBtaWdodCB3YW50IHRvIGluY2x1ZGUgJy1CJyBvcHRpb24sIGUuZy4gJy1CJywgJy1NJworb3VyIEBkaWZmX29wdHMgPSAoJy1NJyk7ICMgdGFrZW4gZnJvbSBnaXRfY29tbWl0CisKKyMgRGlzYWJsZXMgZmVhdHVyZXMgdGhhdCB3b3VsZCBhbGxvdyByZXBvc2l0b3J5IG93bmVycyB0byBpbmplY3Qgc2NyaXB0IGludG8KKyMgdGhlIGdpdHdlYiBkb21haW4uCitvdXIgJHByZXZlbnRfeHNzID0gMDsKKworIyBQYXRoIHRvIHRoZSBoaWdobGlnaHQgZXhlY3V0YWJsZSB0byB1c2UgKG11c3QgYmUgdGhlIG9uZSBmcm9tCisjIGh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGUgZHVlIHRvIGFzc3VtcHRpb25zIGFib3V0IHBhcmFtZXRlcnMgYW5kIG91dHB1dCkuCisjIFVzZWZ1bCBpZiBoaWdobGlnaHQgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHdlYnNlcnZlcidzIFBBVEguCisjIFtEZWZhdWx0OiBoaWdobGlnaHRdCitvdXIgJGhpZ2hsaWdodF9iaW4gPSAiKytISUdITElHSFRfQklOKysiOworCisjIGluZm9ybWF0aW9uIGFib3V0IHNuYXBzaG90IGZvcm1hdHMgdGhhdCBnaXR3ZWIgaXMgY2FwYWJsZSBvZiBzZXJ2aW5nCitvdXIgJWtub3duX3NuYXBzaG90X2Zvcm1hdHMgPSAoCisJIyBuYW1lID0+IHsKKwkjIAknZGlzcGxheScgPT4gZGlzcGxheSBuYW1lLAorCSMgCSd0eXBlJyA9PiBtaW1lIHR5cGUsCisJIyAJJ3N1ZmZpeCcgPT4gZmlsZW5hbWUgc3VmZml4LAorCSMgCSdmb3JtYXQnID0+IC0tZm9ybWF0IGZvciBnaXQtYXJjaGl2ZSwKKwkjIAknY29tcHJlc3NvcicgPT4gW2NvbXByZXNzb3IgY29tbWFuZCBhbmQgYXJndW1lbnRzXQorCSMgCSAgICAgICAgICAgICAgICAoYXJyYXkgcmVmZXJlbmNlLCBvcHRpb25hbCkKKwkjIAknZGlzYWJsZWQnID0+IGJvb2xlYW4gKG9wdGlvbmFsKX0KKwkjCisJJ3RneicgPT4geworCQknZGlzcGxheScgPT4gJ3Rhci5neicsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC1nemlwJywKKwkJJ3N1ZmZpeCcgPT4gJy50YXIuZ3onLAorCQknZm9ybWF0JyA9PiAndGFyJywKKwkJJ2NvbXByZXNzb3InID0+IFsnZ3ppcCcsICctbiddfSwKKworCSd0YnoyJyA9PiB7CisJCSdkaXNwbGF5JyA9PiAndGFyLmJ6MicsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC1iemlwMicsCisJCSdzdWZmaXgnID0+ICcudGFyLmJ6MicsCisJCSdmb3JtYXQnID0+ICd0YXInLAorCQknY29tcHJlc3NvcicgPT4gWydiemlwMiddfSwKKworCSd0eHonID0+IHsKKwkJJ2Rpc3BsYXknID0+ICd0YXIueHonLAorCQkndHlwZScgPT4gJ2FwcGxpY2F0aW9uL3gteHonLAorCQknc3VmZml4JyA9PiAnLnRhci54eicsCisJCSdmb3JtYXQnID0+ICd0YXInLAorCQknY29tcHJlc3NvcicgPT4gWyd4eiddLAorCQknZGlzYWJsZWQnID0+IDF9LAorCisJJ3ppcCcgPT4geworCQknZGlzcGxheScgPT4gJ3ppcCcsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC16aXAnLAorCQknc3VmZml4JyA9PiAnLnppcCcsCisJCSdmb3JtYXQnID0+ICd6aXAnfSwKKyk7CisKKyMgQWxpYXNlcyBzbyB3ZSB1bmRlcnN0YW5kIG9sZCBnaXR3ZWIuc25hcHNob3QgdmFsdWVzIGluIHJlcG9zaXRvcnkKKyMgY29uZmlndXJhdGlvbi4KK291ciAla25vd25fc25hcHNob3RfZm9ybWF0X2FsaWFzZXMgPSAoCisJJ2d6aXAnICA9PiAndGd6JywKKwknYnppcDInID0+ICd0YnoyJywKKwkneHonICAgID0+ICd0eHonLAorCisJIyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBsZWdhY3kgZ2l0d2ViIGNvbmZpZyBzdXBwb3J0CisJJ3gtZ3ppcCcgPT4gdW5kZWYsICdneicgPT4gdW5kZWYsCisJJ3gtYnppcDInID0+IHVuZGVmLCAnYnoyJyA9PiB1bmRlZiwKKwkneC16aXAnID0+IHVuZGVmLCAnJyA9PiB1bmRlZiwKKyk7CisKKyMgUGl4ZWwgc2l6ZXMgZm9yIGljb25zIGFuZCBhdmF0YXJzLiBJZiB0aGUgZGVmYXVsdCBmb250IHNpemVzIG9yIGxpbmVoZWlnaHRzCisjIGFyZSBjaGFuZ2VkLCBpdCBtYXkgYmUgYXBwcm9wcmlhdGUgdG8gY2hhbmdlIHRoZXNlIHZhbHVlcyB0b28gdmlhCisjICRHSVRXRUJfQ09ORklHLgorb3VyICVhdmF0YXJfc2l6ZSA9ICgKKwknZGVmYXVsdCcgPT4gMTYsCisJJ2RvdWJsZScgID0+IDMyCispOworCisjIFVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGxvYWQgdGhhdCB3ZSB3aWxsIHN0aWxsIHJlc3BvbmQgdG8gZ2l0d2ViIHF1ZXJpZXMuCisjIElmIHNlcnZlciBsb2FkIGV4Y2VlZCB0aGlzIHZhbHVlIHRoZW4gcmV0dXJuICI1MDMgc2VydmVyIGJ1c3kiIGVycm9yLgorIyBJZiBnaXR3ZWIgY2Fubm90IGRldGVybWluZWQgc2VydmVyIGxvYWQsIGl0IGlzIHRha2VuIHRvIGJlIDAuCisjIExlYXZlIGl0IHVuZGVmaW5lZCAob3Igc2V0IHRvICd1bmRlZicpIHRvIHR1cm4gb2ZmIGxvYWQgY2hlY2tpbmcuCitvdXIgJG1heGxvYWQgPSAzMDA7CisKKyMgY29uZmlndXJhdGlvbiBmb3IgJ2hpZ2hsaWdodCcgKGh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGUvKQorIyBtYXRjaCBieSBiYXNlbmFtZQorb3VyICVoaWdobGlnaHRfYmFzZW5hbWUgPSAoCisJIydQcm9ncmFtJyA9PiAncHknLAorCSMnTGlicmFyeScgPT4gJ3B5JywKKwknU0NvbnN0cnVjdCcgPT4gJ3B5JywgIyBTQ29ucyBlcXVpdmFsZW50IG9mIE1ha2VmaWxlCisJJ01ha2VmaWxlJyA9PiAnbWFrZScsCispOworIyBtYXRjaCBieSBleHRlbnNpb24KK291ciAlaGlnaGxpZ2h0X2V4dCA9ICgKKwkjIG1haW4gZXh0ZW5zaW9ucywgZGVmaW5pbmcgbmFtZSBvZiBzeW50YXg7CisJIyBzZWUgZmlsZXMgaW4gL3Vzci9zaGFyZS9oaWdobGlnaHQvbGFuZ0RlZnMvIGRpcmVjdG9yeQorCShtYXAgeyAkXyA9PiAkXyB9IHF3KHB5IHJiIGphdmEgY3NzIGpzIHRleCBiaWIgeG1sIGF3ayBiYXQgaW5pIHNwZWMgdGNsIHNxbCkpLAorCSMgYWx0ZXJuYXRlIGV4dGVuc2lvbnMsIHNlZSAvZXRjL2hpZ2hsaWdodC9maWxldHlwZXMuY29uZgorCShtYXAgeyAkXyA9PiAnYycgICB9IHF3KGMgaCkpLAorCShtYXAgeyAkXyA9PiAnc2gnICB9IHF3KHNoIGJhc2ggenNoIGtzaCkpLAorCShtYXAgeyAkXyA9PiAnY3BwJyB9IHF3KGNwcCBjeHggYysrIGNjKSksCisJKG1hcCB7ICRfID0+ICdwaHAnIH0gcXcocGhwIHBocDMgcGhwNCBwaHA1IHBocHMpKSwKKwkobWFwIHsgJF8gPT4gJ3BsJyAgfSBxdyhwbCBwZXJsIHBtKSksICMgcGVyaGFwcyBhbHNvICdjZ2knCisJKG1hcCB7ICRfID0+ICdtYWtlJ30gcXcobWFrZSBtYWsgbWspKSwKKwkobWFwIHsgJF8gPT4gJ3htbCcgfSBxdyh4bWwgeGh0bWwgaHRtbCBodG0pKSwKKyk7CisKKyMgWW91IGRlZmluZSBzaXRlLXdpZGUgZmVhdHVyZSBkZWZhdWx0cyBoZXJlOyBvdmVycmlkZSB0aGVtIHdpdGgKKyMgJEdJVFdFQl9DT05GSUcgYXMgbmVjZXNzYXJ5Lgorb3VyICVmZWF0dXJlID0gKAorCSMgZmVhdHVyZSA9PiB7CisJIyAJJ3N1YicgPT4gZmVhdHVyZS1zdWIgKHN1YnJvdXRpbmUpLAorCSMgCSdvdmVycmlkZScgPT4gYWxsb3ctb3ZlcnJpZGUgKGJvb2xlYW4pLAorCSMgCSdkZWZhdWx0JyA9PiBbIGRlZmF1bHQgb3B0aW9ucy4uLl0gKGFycmF5IHJlZmVyZW5jZSl9CisJIworCSMgaWYgZmVhdHVyZSBpcyBvdmVycmlkYWJsZSAoaXQgbWVhbnMgdGhhdCBhbGxvdy1vdmVycmlkZSBoYXMgdHJ1ZSB2YWx1ZSksCisJIyB0aGVuIGZlYXR1cmUtc3ViIHdpbGwgYmUgY2FsbGVkIHdpdGggZGVmYXVsdCBvcHRpb25zIGFzIHBhcmFtZXRlcnM7CisJIyByZXR1cm4gdmFsdWUgb2YgZmVhdHVyZS1zdWIgaW5kaWNhdGVzIGlmIHRvIGVuYWJsZSBzcGVjaWZpZWQgZmVhdHVyZQorCSMKKwkjIGlmIHRoZXJlIGlzIG5vICdzdWInIGtleSAobm8gZmVhdHVyZS1zdWIpLCB0aGVuIGZlYXR1cmUgY2Fubm90IGJlCisJIyBvdmVycmlkZGVuCisJIworCSMgdXNlIGdpdHdlYl9nZXRfZmVhdHVyZSg8ZmVhdHVyZT4pIHRvIHJldHJpZXZlIHRoZSA8ZmVhdHVyZT4gdmFsdWUKKwkjIChhbiBhcnJheSkgb3IgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoPGZlYXR1cmU+KSB0byBjaGVjayBpZiA8ZmVhdHVyZT4KKwkjIGlzIGVuYWJsZWQKKworCSMgRW5hYmxlIHRoZSAnYmxhbWUnIGJsb2Igdmlldywgc2hvd2luZyB0aGUgbGFzdCBjb21taXQgdGhhdCBtb2RpZmllZAorCSMgZWFjaCBsaW5lIGluIHRoZSBmaWxlLiBUaGlzIGNhbiBiZSB2ZXJ5IENQVS1pbnRlbnNpdmUuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnYmxhbWUnfXsnZGVmYXVsdCd9ID0gWzFdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydibGFtZSd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgPSAwfDE7CisJJ2JsYW1lJyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgnYmxhbWUnLCBAXykgfSwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgRW5hYmxlIHRoZSAnc25hcHNob3QnIGxpbmssIHByb3ZpZGluZyBhIGNvbXByZXNzZWQgYXJjaGl2ZSBvZiBhbnkKKwkjIHRyZWUuIFRoaXMgY2FuIHBvdGVudGlhbGx5IGdlbmVyYXRlIGhpZ2ggdHJhZmZpYyBpZiB5b3UgaGF2ZSBsYXJnZQorCSMgcHJvamVjdC4KKworCSMgVmFsdWUgaXMgYSBsaXN0IG9mIGZvcm1hdHMgZGVmaW5lZCBpbiAla25vd25fc25hcHNob3RfZm9ybWF0cyB0aGF0CisJIyB5b3Ugd2lzaCB0byBvZmZlci4KKwkjIFRvIGRpc2FibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3NuYXBzaG90J317J2RlZmF1bHQnfSA9IFtdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydzbmFwc2hvdCd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZywgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmb3JtYXRzIG9yICJub25lIgorCSMgdG8gZGlzYWJsZS4gIEV4YW1wbGU6IGdpdHdlYi5zbmFwc2hvdCA9IHRiejIsemlwOworCSdzbmFwc2hvdCcgPT4geworCQknc3ViJyA9PiBcJmZlYXR1cmVfc25hcHNob3QsCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsndGd6J119LAorCisJIyBFbmFibGUgdGV4dCBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgY29tbWl0cyB3aGljaCBtYXRjaCBhdXRob3IsCisJIyBjb21taXR0ZXIgb3IgY29tbWl0IHRleHQgdG8gYSBnaXZlbiBzdHJpbmcuICBFbmFibGVkIGJ5IGRlZmF1bHQuCisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisJIworCSMgTm90ZSB0aGF0IHRoaXMgY29udHJvbHMgYWxsIHNlYXJjaCBmZWF0dXJlcywgd2hpY2ggbWVhbnMgdGhhdCBpZgorCSMgaXQgaXMgZGlzYWJsZWQsIHRoZW4gJ2dyZXAnIGFuZCAncGlja2F4ZScgc2VhcmNoIHdvdWxkIGFsc28gYmUKKwkjIGRpc2FibGVkLgorCSdzZWFyY2gnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzFdfSwKKworCSMgRW5hYmxlIGdyZXAgc2VhcmNoLCB3aGljaCB3aWxsIGxpc3QgdGhlIGZpbGVzIGluIGN1cnJlbnRseSBzZWxlY3RlZAorCSMgdHJlZSBjb250YWluaW5nIHRoZSBnaXZlbiBzdHJpbmcuIEVuYWJsZWQgYnkgZGVmYXVsdC4gVGhpcyBjYW4gYmUKKwkjIHBvdGVudGlhbGx5IENQVS1pbnRlbnNpdmUsIG9mIGNvdXJzZS4KKwkjIE5vdGUgdGhhdCB5b3UgbmVlZCB0byBoYXZlICdzZWFyY2gnIGZlYXR1cmUgZW5hYmxlZCB0b28uCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnZ3JlcCd9eydkZWZhdWx0J30gPSBbMV07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2dyZXAnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLmdyZXAgPSAwfDE7CisJJ2dyZXAnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdncmVwJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxXX0sCisKKwkjIEVuYWJsZSB0aGUgcGlja2F4ZSBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgY29tbWl0cyB0aGF0IG1vZGlmaWVkCisJIyBhIGdpdmVuIHN0cmluZyBpbiBhIGZpbGUuIFRoaXMgY2FuIGJlIHByYWN0aWNhbCBhbmQgcXVpdGUgZmFzdGVyCisJIyBhbHRlcm5hdGl2ZSB0byAnYmxhbWUnLCBidXQgc3RpbGwgcG90ZW50aWFsbHkgQ1BVLWludGVuc2l2ZS4KKwkjIE5vdGUgdGhhdCB5b3UgbmVlZCB0byBoYXZlICdzZWFyY2gnIGZlYXR1cmUgZW5hYmxlZCB0b28uCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncGlja2F4ZSd9eydkZWZhdWx0J30gPSBbMV07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3BpY2theGUnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLnBpY2theGUgPSAwfDE7CisJJ3BpY2theGUnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdwaWNrYXhlJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxXX0sCisKKwkjIEVuYWJsZSBzaG93aW5nIHNpemUgb2YgYmxvYnMgaW4gYSAndHJlZScgdmlldywgaW4gYSBzZXBhcmF0ZQorCSMgY29sdW1uLCBzaW1pbGFyIHRvIHdoYXQgJ2xzIC1sJyBkb2VzLiAgVGhpcyBjb3N0IGEgYml0IG9mIElPLgorCisJIyBUbyBkaXNhYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydzaG93LXNpemVzJ317J2RlZmF1bHQnfSA9IFswXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnc2hvdy1zaXplcyd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuc2hvd3NpemVzID0gMHwxOworCSdzaG93LXNpemVzJyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgnc2hvd3NpemVzJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxXX0sCisKKwkjIE1ha2UgZ2l0d2ViIHVzZSBhbiBhbHRlcm5hdGl2ZSBmb3JtYXQgb2YgdGhlIFVSTHMgd2hpY2ggY2FuIGJlCisJIyBtb3JlIHJlYWRhYmxlIGFuZCBuYXR1cmFsLWxvb2tpbmc6IHByb2plY3QgbmFtZSBpcyBlbWJlZGRlZAorCSMgZGlyZWN0bHkgaW4gdGhlIHBhdGggYW5kIHRoZSBxdWVyeSBzdHJpbmcgY29udGFpbnMgb3RoZXIKKwkjIGF1eGlsaWFyeSBpbmZvcm1hdGlvbi4gQWxsIGdpdHdlYiBpbnN0YWxsYXRpb25zIHJlY29nbml6ZQorCSMgVVJMIGluIGVpdGhlciBmb3JtYXQ7IHRoaXMgY29uZmlndXJlcyBpbiB3aGljaCBmb3JtYXRzIGdpdHdlYgorCSMgZ2VuZXJhdGVzIGxpbmtzLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3BhdGhpbmZvJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKworCSMgTm90ZSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIENTUywKKwkjIGZhdmljb24sIGxvZ28gYW5kIHBvc3NpYmx5IG90aGVyIGZpbGVzIHRvIGFuIGFic29sdXRlIFVSTC4gQWxzbywKKwkjIGlmIGdpdHdlYi5jZ2kgc2VydmVzIGFzIHlvdXIgaW5kZXhmaWxlLCB5b3Ugd2lsbCBuZWVkIHRvIGZvcmNlCisJIyAkbXlfdXJpIHRvIGNvbnRhaW4gdGhlIHNjcmlwdCBuYW1lIGluIHlvdXIgJEdJVFdFQl9DT05GSUcuCisJJ3BhdGhpbmZvJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIE1ha2UgZ2l0d2ViIGNvbnNpZGVyIHByb2plY3RzIGluIHByb2plY3Qgcm9vdCBzdWJkaXJlY3RvcmllcworCSMgdG8gYmUgZm9ya3Mgb2YgZXhpc3RpbmcgcHJvamVjdHMuIEdpdmVuIHByb2plY3QgJHByb2puYW1lLmdpdCwKKwkjIHByb2plY3RzIG1hdGNoaW5nICRwcm9qbmFtZS8qLmdpdCB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgbWFpbgorCSMgcHJvamVjdHMgbGlzdCwgaW5zdGVhZCBhICcrJyBtYXJrIHdpbGwgYmUgYWRkZWQgdG8gJHByb2puYW1lCisJIyB0aGVyZSBhbmQgYSAnZm9ya3MnIHZpZXcgd2lsbCBiZSBlbmFibGVkIGZvciB0aGUgcHJvamVjdCwgbGlzdGluZworCSMgYWxsIHRoZSBmb3Jrcy4gSWYgcHJvamVjdCBsaXN0IGlzIHRha2VuIGZyb20gYSBmaWxlLCBmb3JrcyBoYXZlCisJIyB0byBiZSBsaXN0ZWQgYWZ0ZXIgdGhlIG1haW4gcHJvamVjdC4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydmb3Jrcyd9eydkZWZhdWx0J30gPSBbMV07CisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisJJ2ZvcmtzJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEluc2VydCBjdXN0b20gbGlua3MgdG8gdGhlIGFjdGlvbiBiYXIgb2YgYWxsIHByb2plY3QgcGFnZXMuCisJIyBUaGlzIGVuYWJsZXMgeW91IG1haW5seSB0byBsaW5rIHRvIHRoaXJkLXBhcnR5IHNjcmlwdHMgaW50ZWdyYXRpbmcKKwkjIGludG8gZ2l0d2ViOyBlLmcuIGdpdC1icm93c2VyIGZvciBncmFwaGljYWwgaGlzdG9yeSByZXByZXNlbnRhdGlvbgorCSMgb3IgY3VzdG9tIHdlYi1iYXNlZCByZXBvc2l0b3J5IGFkbWluaXN0cmF0aW9uIGludGVyZmFjZS4KKworCSMgVGhlICdkZWZhdWx0JyB2YWx1ZSBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgdHJpcGxldHMgaW4gdGhlIGZvcm0KKwkjIChsYWJlbCwgbGluaywgcG9zaXRpb24pIHdoZXJlIHBvc2l0aW9uIGlzIHRoZSBsYWJlbCBhZnRlciB3aGljaAorCSMgdG8gaW5zZXJ0IHRoZSBsaW5rIGFuZCBsaW5rIGlzIGEgZm9ybWF0IHN0cmluZyB3aGVyZSAlbiBleHBhbmRzCisJIyB0byB0aGUgcHJvamVjdCBuYW1lLCAlZiB0byB0aGUgcHJvamVjdCBwYXRoIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSwKKwkjICVoIHRvIHRoZSBjdXJyZW50IGhhc2ggKGggZ2l0d2ViIHBhcmFtZXRlcikgYW5kICViIHRvIHRoZSBjdXJyZW50CisJIyBoYXNoIGJhc2UgKGhiIGdpdHdlYiBwYXJhbWV0ZXIpOyAlJSBleHBhbmRzIHRvICUuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHIGUuZy4KKwkjICRmZWF0dXJleydhY3Rpb25zJ317J2RlZmF1bHQnfSA9IFsoJ2dyYXBoaWNsb2cnLAorCSMgCScvZ2l0LWJyb3dzZXIvYnktY29tbWl0Lmh0bWw/cj0lbicsICdzdW1tYXJ5JyldOworCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCSdhY3Rpb25zJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFtdfSwKKworCSMgQWxsb3cgZ2l0d2ViIHNjYW4gcHJvamVjdCBjb250ZW50IHRhZ3Mgb2YgcHJvamVjdCByZXBvc2l0b3J5LAorCSMgYW5kIGRpc3BsYXkgdGhlIHBvcHVsYXIgV2ViIDIuMC1pc2ggInRhZyBjbG91ZCIgbmVhciB0aGUgcHJvamVjdHMKKwkjIGxpc3QuICBOb3RlIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgQ09NUExFVEVMWSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkjIG5vcm1hbCBHaXQgdGFncy4KKworCSMgZ2l0d2ViIGJ5IGl0c2VsZiBjYW4gc2hvdyBleGlzdGluZyB0YWdzLCBidXQgaXQgZG9lcyBub3QgaGFuZGxlCisJIyB0YWdnaW5nIGl0c2VsZjsgeW91IG5lZWQgdG8gZG8gaXQgZXh0ZXJuYWxseSwgb3V0c2lkZSBnaXR3ZWIuCisJIyBUaGUgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiBnaXRfZ2V0X3Byb2plY3RfY3RhZ3MoKSBzdWJyb3V0aW5lLgorCSMgWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEhUTUw6OlRhZ0Nsb3VkIFBlcmwgbW9kdWxlIHRvIGdldAorCSMgYSBwcmV0dHkgdGFnIGNsb3VkIGluc3RlYWQgb2YganVzdCBhIGxpc3Qgb2YgdGFncy4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydjdGFncyd9eydkZWZhdWx0J30gPSBbMV07CisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKKwkjIEluIHRoZSBmdXR1cmUgd2hldGhlciBjdGFncyBlZGl0aW5nIGlzIGVuYWJsZWQgbWlnaHQgZGVwZW5kCisJIyBvbiB0aGUgdmFsdWUsIGJ1dCB1c2luZyAxIHNob3VsZCBhbHdheXMgbWVhbiBubyBlZGl0aW5nIG9mIGN0YWdzLgorCSdjdGFncycgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGF0Y2hlcyBpbiBhIHBhdGNoc2V0IGdlbmVyYXRlZCBpbiBwYXRjaAorCSMgdmlldy4gU2V0IHRoaXMgdG8gMCBvciB1bmRlZiB0byBkaXNhYmxlIHBhdGNoIHZpZXcsIG9yIHRvIGEKKwkjIG5lZ2F0aXZlIG51bWJlciB0byByZW1vdmUgYW55IGxpbWl0LgorCisJIyBUbyBkaXNhYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydwYXRjaGVzJ317J2RlZmF1bHQnfSA9IFswXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncGF0Y2hlcyd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIucGF0Y2hlcyA9IDB8bjsKKwkjIHdoZXJlIG4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhdGNoZXMgYWxsb3dlZCBpbiBhIHBhdGNoc2V0LgorCSdwYXRjaGVzJyA9PiB7CisJCSdzdWInID0+IFwmZmVhdHVyZV9wYXRjaGVzLAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMTZdfSwKKworCSMgQXZhdGFyIHN1cHBvcnQuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHZpZXdzIHN1Y2ggYXMKKwkjIHNob3J0bG9nIG9yIGNvbW1pdCB3aWxsIGRpc3BsYXkgYW4gYXZhdGFyIGFzc29jaWF0ZWQgd2l0aAorCSMgdGhlIGVtYWlsIG9mIHRoZSBjb21taXR0ZXIocykgYW5kL29yIGF1dGhvcihzKS4KKworCSMgQ3VycmVudGx5IGF2YWlsYWJsZSBwcm92aWRlcnMgYXJlIGdyYXZhdGFyIGFuZCBwaWNvbi4KKwkjIElmIGFuIHVua25vd24gcHJvdmlkZXIgaXMgc3BlY2lmaWVkLCB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKworCSMgUGljb24gY3VycmVudGx5IHJlbGllcyBvbiB0aGUgaW5kaWFuYS5lZHUgZGF0YWJhc2UuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnYXZhdGFyJ317J2RlZmF1bHQnfSA9IFsnPHByb3ZpZGVyPiddOworCSMgd2hlcmUgPHByb3ZpZGVyPiBpcyBlaXRoZXIgZ3JhdmF0YXIgb3IgcGljb24uCisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2F2YXRhcid9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuYXZhdGFyID0gPHByb3ZpZGVyPjsKKwknYXZhdGFyJyA9PiB7CisJCSdzdWInID0+IFwmZmVhdHVyZV9hdmF0YXIsCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsnJ119LAorCisJIyBFbmFibGUgZGlzcGxheWluZyBob3cgbXVjaCB0aW1lIGFuZCBob3cgbWFueSBnaXQgY29tbWFuZHMKKwkjIGl0IHRvb2sgdG8gZ2VuZXJhdGUgYW5kIGRpc3BsYXkgcGFnZS4gIERpc2FibGVkIGJ5IGRlZmF1bHQuCisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisJJ3RpbWVkJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEVuYWJsZSB0dXJuaW5nIHNvbWUgbGlua3MgaW50byBsaW5rcyB0byBhY3Rpb25zIHdoaWNoIHJlcXVpcmUKKwkjIEphdmFTY3JpcHQgdG8gcnVuIChsaWtlICdibGFtZV9pbmNyZW1lbnRhbCcpLiAgTm90IGVuYWJsZWQgYnkKKwkjIGRlZmF1bHQuICBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCSdqYXZhc2NyaXB0LWFjdGlvbnMnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgRW5hYmxlIGFuZCBjb25maWd1cmUgYWJpbGl0eSB0byBjaGFuZ2UgY29tbW9uIHRpbWV6b25lIGZvciBkYXRlcworCSMgaW4gZ2l0d2ViIG91dHB1dCB2aWEgSmF2YVNjcmlwdC4gIEVuYWJsZWQgYnkgZGVmYXVsdC4KKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKwknamF2YXNjcmlwdC10aW1lem9uZScgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbCisJCQknbG9jYWwnLCAgICAgIyBkZWZhdWx0IHRpbWV6b25lOiAndXRjJywgJ2xvY2FsJywgb3IgJygtfCspSEhNTScgZm9ybWF0LAorCQkJICAgICAgICAgICAgICMgb3IgdW5kZWYgdG8gdHVybiBvZmYgdGhpcyBmZWF0dXJlCisJCQknZ2l0d2ViX3R6JywgIyBuYW1lIG9mIGNvb2tpZSB3aGVyZSB0byBzdG9yZSBzZWxlY3RlZCB0aW1lem9uZQorCQkJJ2RhdGV0aW1lJywgICMgQ1NTIGNsYXNzIHVzZWQgdG8gbWFyayB1cCBkYXRlcyBmb3IgbWFuaXB1bGF0aW9uCisJCV19LAorCisJIyBTeW50YXggaGlnaGxpZ2h0aW5nIHN1cHBvcnQuIFRoaXMgaXMgYmFzZWQgb24gRGFuaWVsIFN2ZW5zc29uJ3MKKwkjIGFuZCBTaGFtIENodWtvdXJ5J3Mgd29yayBpbiBnaXR3ZWIteG1tczIuZ2l0LgorCSMgSXQgcmVxdWlyZXMgdGhlICdoaWdobGlnaHQnIHByb2dyYW0gcHJlc2VudCBpbiAkUEFUSCwKKwkjIGFuZCB0aGVyZWZvcmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydoaWdobGlnaHQnfXsnZGVmYXVsdCd9ID0gWzFdOworCisJJ2hpZ2hsaWdodCcgPT4geworCQknc3ViJyA9PiBzdWIgeyBmZWF0dXJlX2Jvb2woJ2hpZ2hsaWdodCcsIEBfKSB9LAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBFbmFibGUgZGlzcGxheWluZyBvZiByZW1vdGUgaGVhZHMgaW4gdGhlIGhlYWRzIGxpc3QKKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydyZW1vdGVfaGVhZHMnfXsnZGVmYXVsdCd9ID0gWzFdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydyZW1vdGVfaGVhZHMnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLnJlbW90ZWhlYWRzID0gMHwxOworCSdyZW1vdGVfaGVhZHMnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdyZW1vdGVfaGVhZHMnLCBAXykgfSwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgRW5hYmxlIHNob3dpbmcgYnJhbmNoZXMgdW5kZXIgb3RoZXIgcmVmcyBpbiBhZGRpdGlvbiB0byBoZWFkcworCisJIyBUbyBzZXQgc3lzdGVtIHdpZGUgZXh0cmEgYnJhbmNoIHJlZnMgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2V4dHJhLWJyYW5jaC1yZWZzJ317J2RlZmF1bHQnfSA9IFsnZGlycycsICdvZicsICdjaG9pY2UnXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnZXh0cmEtYnJhbmNoLXJlZnMnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLmV4dHJhYnJhbmNocmVmcyA9IGRpcnMgb2YgY2hvaWNlCisJIyBFdmVyeSBkaXJlY3RvcnkgaXMgc2VwYXJhdGVkIHdpdGggd2hpdGVzcGFjZS4KKworCSdleHRyYS1icmFuY2gtcmVmcycgPT4geworCQknc3ViJyA9PiBcJmZlYXR1cmVfZXh0cmFfYnJhbmNoX3JlZnMsCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFtdfSwKKyk7CisKK3N1YiBnaXR3ZWJfZ2V0X2ZlYXR1cmUgeworCW15ICgkbmFtZSkgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIGV4aXN0cyAkZmVhdHVyZXskbmFtZX07CisJbXkgKCRzdWIsICRvdmVycmlkZSwgQGRlZmF1bHRzKSA9ICgKKwkJJGZlYXR1cmV7JG5hbWV9eydzdWInfSwKKwkJJGZlYXR1cmV7JG5hbWV9eydvdmVycmlkZSd9LAorCQlAeyRmZWF0dXJleyRuYW1lfXsnZGVmYXVsdCd9fSk7CisJIyBwcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIHBvc3NpYmxlIG9ubHkgaWYgd2UgaGF2ZSBwcm9qZWN0CisJb3VyICRnaXRfZGlyOyAjIGdsb2JhbCB2YXJpYWJsZSwgZGVjbGFyZWQgbGF0ZXIKKwlpZiAoISRvdmVycmlkZSB8fCAhZGVmaW5lZCAkZ2l0X2RpcikgeworCQlyZXR1cm4gQGRlZmF1bHRzOworCX0KKwlpZiAoIWRlZmluZWQgJHN1YikgeworCQl3YXJuICJmZWF0dXJlICRuYW1lIGlzIG5vdCBvdmVycmlkYWJsZSI7CisJCXJldHVybiBAZGVmYXVsdHM7CisJfQorCXJldHVybiAkc3ViLT4oQGRlZmF1bHRzKTsKK30KKworIyBBIHdyYXBwZXIgdG8gY2hlY2sgaWYgYSBnaXZlbiBmZWF0dXJlIGlzIGVuYWJsZWQuCisjIFdpdGggdGhpcywgeW91IGNhbiBzYXkKKyMKKyMgICBteSAkYm9vbF9mZWF0ID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2Jvb2xfZmVhdCcpOworIyAgIGdpdHdlYl9jaGVja19mZWF0dXJlKCdib29sX2ZlYXQnKSBvciBzb21lY29kZTsKKyMKKyMgaW5zdGVhZCBvZgorIworIyAgIG15ICgkYm9vbF9mZWF0KSA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnYm9vbF9mZWF0Jyk7CisjICAgKGdpdHdlYl9nZXRfZmVhdHVyZSgnYm9vbF9mZWF0JykpWzBdIG9yIHNvbWVjb2RlOworIworc3ViIGdpdHdlYl9jaGVja19mZWF0dXJlIHsKKwlyZXR1cm4gKGdpdHdlYl9nZXRfZmVhdHVyZShAXykpWzBdOworfQorCisKK3N1YiBmZWF0dXJlX2Jvb2wgeworCW15ICRrZXkgPSBzaGlmdDsKKwlteSAoJHZhbCkgPSBnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCRrZXksICctLWJvb2wnKTsKKworCWlmICghZGVmaW5lZCAkdmFsKSB7CisJCXJldHVybiAoJF9bMF0pOworCX0gZWxzaWYgKCR2YWwgZXEgJ3RydWUnKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNpZiAoJHZhbCBlcSAnZmFsc2UnKSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdWIgZmVhdHVyZV9zbmFwc2hvdCB7CisJbXkgKEBmbXRzKSA9IEBfOworCisJbXkgKCR2YWwpID0gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnc25hcHNob3QnKTsKKworCWlmICgkdmFsKSB7CisJCUBmbXRzID0gKCR2YWwgZXEgJ25vbmUnID8gKCkgOiBzcGxpdCAvXHMqWyxcc11ccyovLCAkdmFsKTsKKwl9CisKKwlyZXR1cm4gQGZtdHM7Cit9CisKK3N1YiBmZWF0dXJlX3BhdGNoZXMgeworCW15IEB2YWwgPSAoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygncGF0Y2hlcycsICctLWludCcpKTsKKworCWlmIChAdmFsKSB7CisJCXJldHVybiBAdmFsOworCX0KKworCXJldHVybiAoJF9bMF0pOworfQorCitzdWIgZmVhdHVyZV9hdmF0YXIgeworCW15IEB2YWwgPSAoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnYXZhdGFyJykpOworCisJcmV0dXJuIEB2YWwgPyBAdmFsIDogQF87Cit9CisKK3N1YiBmZWF0dXJlX2V4dHJhX2JyYW5jaF9yZWZzIHsKKwlteSAoQGJyYW5jaF9yZWZzKSA9IEBfOworCW15ICR2YWx1ZXMgPSBnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCdleHRyYWJyYW5jaHJlZnMnKTsKKworCWlmICgkdmFsdWVzKSB7CisJCSR2YWx1ZXMgPSBjb25maWdfdG9fbXVsdGkgKCR2YWx1ZXMpOworCQlAYnJhbmNoX3JlZnMgPSAoKTsKKwkJZm9yZWFjaCBteSAkdmFsdWUgKEB7JHZhbHVlc30pIHsKKwkJCXB1c2ggQGJyYW5jaF9yZWZzLCBzcGxpdCAvXHMrLywgJHZhbHVlOworCQl9CisJfQorCisJcmV0dXJuIEBicmFuY2hfcmVmczsKK30KKworIyBjaGVja2luZyBIRUFEIGZpbGUgd2l0aCAtZSBpcyBmcmFnaWxlIGlmIHRoZSByZXBvc2l0b3J5IHdhcworIyBpbml0aWFsaXplZCBsb25nIHRpbWUgYWdvIChpLmUuIHN5bWxpbmsgSEVBRCkgYW5kIHdhcyBwYWNrLXJlZidlZAorIyBhbmQgdGhlbiBwcnVuZWQuCitzdWIgY2hlY2tfaGVhZF9saW5rIHsKKwlteSAoJGRpcikgPSBAXzsKKwlteSAkaGVhZGZpbGUgPSAiJGRpci9IRUFEIjsKKwlyZXR1cm4gKCgtZSAkaGVhZGZpbGUpIHx8CisJCSgtbCAkaGVhZGZpbGUgJiYgcmVhZGxpbmsoJGhlYWRmaWxlKSA9fiAvXnJlZnNcL2hlYWRzXC8vKSk7Cit9CisKK3N1YiBjaGVja19leHBvcnRfb2sgeworCW15ICgkZGlyKSA9IEBfOworCXJldHVybiAoY2hlY2tfaGVhZF9saW5rKCRkaXIpICYmCisJCSghJGV4cG9ydF9vayB8fCAtZSAiJGRpci8kZXhwb3J0X29rIikgJiYKKwkJKCEkZXhwb3J0X2F1dGhfaG9vayB8fCAkZXhwb3J0X2F1dGhfaG9vay0+KCRkaXIpKSk7Cit9CisKKyMgcHJvY2VzcyBhbHRlcm5hdGUgbmFtZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyMgZmlsdGVyIG91dCB1bnN1cHBvcnRlZCAodW5rbm93bikgc25hcHNob3QgZm9ybWF0cworc3ViIGZpbHRlcl9zbmFwc2hvdF9mbXRzIHsKKwlteSBAZm10cyA9IEBfOworCisJQGZtdHMgPSBtYXAgeworCQlleGlzdHMgJGtub3duX3NuYXBzaG90X2Zvcm1hdF9hbGlhc2VzeyRffSA/CisJCSAgICAgICAka25vd25fc25hcHNob3RfZm9ybWF0X2FsaWFzZXN7JF99IDogJF99IEBmbXRzOworCUBmbXRzID0gZ3JlcCB7CisJCWV4aXN0cyAka25vd25fc25hcHNob3RfZm9ybWF0c3skX30gJiYKKwkJISRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRffXsnZGlzYWJsZWQnfX0gQGZtdHM7Cit9CisKK3N1YiBmaWx0ZXJfYW5kX3ZhbGlkYXRlX3JlZnMgeworCW15IEByZWZzID0gQF87CisJbXkgJXVuaXF1ZV9yZWZzID0gKCk7CisKKwlmb3JlYWNoIG15ICRyZWYgKEByZWZzKSB7CisJCWRpZV9lcnJvcig1MDAsICJJbnZhbGlkIHJlZiAnJHJlZicgaW4gJ2V4dHJhLWJyYW5jaC1yZWZzJyBmZWF0dXJlIikgdW5sZXNzIChpc192YWxpZF9yZWZfZm9ybWF0KCRyZWYpKTsKKwkJIyAnaGVhZHMnIGFyZSBhZGRlZCBpbXBsaWNpdGx5IGluIGdldF9icmFuY2hfcmVmcygpLgorCQkkdW5pcXVlX3JlZnN7JHJlZn0gPSAxIGlmICgkcmVmIG5lICdoZWFkcycpOworCX0KKwlyZXR1cm4gc29ydCBrZXlzICV1bmlxdWVfcmVmczsKK30KKworIyBJZiBpdCBpcyBzZXQgdG8gY29kZSByZWZlcmVuY2UsIGl0IGlzIGNvZGUgdGhhdCBpdCBpcyB0byBiZSBydW4gb25jZSBwZXIKKyMgcmVxdWVzdCwgYWxsb3dpbmcgdXBkYXRpbmcgY29uZmlndXJhdGlvbnMgdGhhdCBjaGFuZ2Ugd2l0aCBlYWNoIHJlcXVlc3QsCisjIHdoaWxlIHJ1bm5pbmcgb3RoZXIgY29kZSBpbiBjb25maWcgZmlsZSBvbmx5IG9uY2UuCisjCisjIE90aGVyd2lzZSwgaWYgaXQgaXMgZmFsc2UgdGhlbiBnaXR3ZWIgd291bGQgcHJvY2VzcyBjb25maWcgZmlsZSBvbmx5IG9uY2U7CisjIGlmIGl0IGlzIHRydWUgdGhlbiBnaXR3ZWIgY29uZmlnIHdvdWxkIGJlIHJ1biBmb3IgZWFjaCByZXF1ZXN0Lgorb3VyICRwZXJfcmVxdWVzdF9jb25maWcgPSAxOworCisjIHJlYWQgYW5kIHBhcnNlIGdpdHdlYiBjb25maWcgZmlsZSBnaXZlbiBieSBpdHMgcGFyYW1ldGVyLgorIyByZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gcmVjb3ZlcmFibGUgZXJyb3IsIGFsbG93aW5nCisjIHRvIGNoYWluIHRoaXMgc3Vicm91dGluZSwgdXNpbmcgZmlyc3QgZmlsZSB0aGF0IGV4aXN0cy4KKyMgZGllcyBvbiBlcnJvcnMgZHVyaW5nIHBhcnNpbmcgY29uZmlnIGZpbGUsIGFzIGl0IGlzIHVucmVjb3ZlcmFibGUuCitzdWIgcmVhZF9jb25maWdfZmlsZSB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJcmV0dXJuIHVubGVzcyBkZWZpbmVkICRmaWxlbmFtZTsKKwkjIGRpZSBpZiB0aGVyZSBhcmUgZXJyb3JzIHBhcnNpbmcgY29uZmlnIGZpbGUKKwlpZiAoLWUgJGZpbGVuYW1lKSB7CisJCWRvICRmaWxlbmFtZTsKKwkJZGllICRAIGlmICRAOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuOworfQorCitvdXIgKCRHSVRXRUJfQ09ORklHLCAkR0lUV0VCX0NPTkZJR19TWVNURU0sICRHSVRXRUJfQ09ORklHX0NPTU1PTik7CitzdWIgZXZhbHVhdGVfZ2l0d2ViX2NvbmZpZyB7CisJb3VyICRHSVRXRUJfQ09ORklHID0gJEVOVnsnR0lUV0VCX0NPTkZJRyd9IHx8ICIrK0dJVFdFQl9DT05GSUcrKyI7CisJb3VyICRHSVRXRUJfQ09ORklHX1NZU1RFTSA9ICRFTlZ7J0dJVFdFQl9DT05GSUdfU1lTVEVNJ30gfHwgIisrR0lUV0VCX0NPTkZJR19TWVNURU0rKyI7CisJb3VyICRHSVRXRUJfQ09ORklHX0NPTU1PTiA9ICRFTlZ7J0dJVFdFQl9DT05GSUdfQ09NTU9OJ30gfHwgIisrR0lUV0VCX0NPTkZJR19DT01NT04rKyI7CisKKwkjIFByb3RlY3QgYWdhaW5zdCBkdXBsaWNhdGlvbnMgb2YgZmlsZSBuYW1lcywgdG8gbm90IHJlYWQgY29uZmlnIHR3aWNlLgorCSMgT25seSBvbmUgb2YgJEdJVFdFQl9DT05GSUcgYW5kICRHSVRXRUJfQ09ORklHX1NZU1RFTSBpcyB1c2VkLCBzbworCSMgdGhlcmUgcG9zc2liaWxpdHkgb2YgZHVwbGljYXRpb24gb2YgZmlsZW5hbWUgdGhlcmUgZG9lc24ndCBtYXR0ZXIuCisJJEdJVFdFQl9DT05GSUcgPSAiIiAgICAgICAgaWYgKCRHSVRXRUJfQ09ORklHIGVxICRHSVRXRUJfQ09ORklHX0NPTU1PTik7CisJJEdJVFdFQl9DT05GSUdfU1lTVEVNID0gIiIgaWYgKCRHSVRXRUJfQ09ORklHX1NZU1RFTSBlcSAkR0lUV0VCX0NPTkZJR19DT01NT04pOworCisJIyBDb21tb24gc3lzdGVtLXdpZGUgc2V0dGluZ3MgZm9yIGNvbnZlbmllbmNlLgorCSMgVGhvc2Ugc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gYnkgR0lUV0VCX0NPTkZJRyBvciBHSVRXRUJfQ09ORklHX1NZU1RFTS4KKwlyZWFkX2NvbmZpZ19maWxlKCRHSVRXRUJfQ09ORklHX0NPTU1PTik7CisKKwkjIFVzZSBmaXJzdCBjb25maWcgZmlsZSB0aGF0IGV4aXN0cy4gIFRoaXMgbWVhbnMgdXNlIHRoZSBwZXItaW5zdGFuY2UKKwkjIEdJVFdFQl9DT05GSUcgaWYgZXhpc3RzLCBvdGhlcndpc2UgdXNlIEdJVFdFQl9TWVNURU1fQ09ORklHLgorCXJlYWRfY29uZmlnX2ZpbGUoJEdJVFdFQl9DT05GSUcpIGFuZCByZXR1cm47CisJcmVhZF9jb25maWdfZmlsZSgkR0lUV0VCX0NPTkZJR19TWVNURU0pOworfQorCisjIEdldCBsb2FkYXZnIG9mIHN5c3RlbSwgdG8gY29tcGFyZSBhZ2FpbnN0ICRtYXhsb2FkLgorIyBDdXJyZW50bHkgaXQgcmVxdWlyZXMgJy9wcm9jL2xvYWRhdmcnIHByZXNlbnQgdG8gZ2V0IGxvYWRhdmc7CisjIGlmIGl0IGlzIG5vdCBwcmVzZW50IGl0IHJldHVybnMgMCwgd2hpY2ggbWVhbnMgbm8gbG9hZCBjaGVja2luZy4KK3N1YiBnZXRfbG9hZGF2ZyB7CisJaWYoIC1lICcvcHJvYy9sb2FkYXZnJyApeworCQlvcGVuIG15ICRmZCwgJzwnLCAnL3Byb2MvbG9hZGF2ZycKKwkJCW9yIHJldHVybiAwOworCQlteSBAbG9hZCA9IHNwbGl0KC9ccysvLCBzY2FsYXIgPCRmZD4pOworCQljbG9zZSAkZmQ7CisKKwkJIyBUaGUgZmlyc3QgdGhyZWUgY29sdW1ucyBtZWFzdXJlIENQVSBhbmQgSU8gdXRpbGl6YXRpb24gb2YgdGhlIGxhc3Qgb25lLAorCQkjIGZpdmUsIGFuZCAxMCBtaW51dGUgcGVyaW9kcy4gIFRoZSBmb3VydGggY29sdW1uIHNob3dzIHRoZSBudW1iZXIgb2YKKwkJIyBjdXJyZW50bHkgcnVubmluZyBwcm9jZXNzZXMgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgcHJvY2Vzc2VzIGluIHRoZSBtL24KKwkJIyBmb3JtYXQuICBUaGUgbGFzdCBjb2x1bW4gZGlzcGxheXMgdGhlIGxhc3QgcHJvY2VzcyBJRCB1c2VkLgorCQlyZXR1cm4gJGxvYWRbMF0gfHwgMDsKKwl9CisJIyBhZGRpdGlvbmFsIGNoZWNrcyBmb3IgbG9hZCBhdmVyYWdlIHNob3VsZCBnbyBoZXJlIGZvciB0aGluZ3MgdGhhdCBkb24ndCBleHBvcnQKKwkjIC9wcm9jL2xvYWRhdmcKKworCXJldHVybiAwOworfQorCisjIHZlcnNpb24gb2YgdGhlIGNvcmUgZ2l0IGJpbmFyeQorb3VyICRnaXRfdmVyc2lvbjsKK3N1YiBldmFsdWF0ZV9naXRfdmVyc2lvbiB7CisJb3VyICRnaXRfdmVyc2lvbiA9IHF4KCIkR0lUIiAtLXZlcnNpb24pID1+IG0vZ2l0IHZlcnNpb24gKC4qKSQvID8gJDEgOiAidW5rbm93biI7CisJJG51bWJlcl9vZl9naXRfY21kcysrOworfQorCitzdWIgY2hlY2tfbG9hZGF2ZyB7CisJaWYgKGRlZmluZWQgJG1heGxvYWQgJiYgZ2V0X2xvYWRhdmcoKSA+ICRtYXhsb2FkKSB7CisJCWRpZV9lcnJvcig1MDMsICJUaGUgbG9hZCBhdmVyYWdlIG9uIHRoZSBzZXJ2ZXIgaXMgdG9vIGhpZ2giKTsKKwl9Cit9CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBkaXNwYXRjaAorCisjIFZhcmlvdXMgaGFzaCBzaXplLXJlbGF0ZWQgdmFsdWVzLgorbXkgJHNoYTFfbGVuID0gNDA7CitteSAkc2hhMjU2X2V4dHJhX2xlbiA9IDI0OworbXkgJHNoYTI1Nl9sZW4gPSAkc2hhMV9sZW4gKyAkc2hhMjU2X2V4dHJhX2xlbjsKKworIyBBIHJlZ2V4IG1hdGNoaW5nICRsZW4gaGV4IGNoYXJhY3RlcnMuICRsZW4gbWF5IGJlIGEgcmFuZ2UgKGUuZy4gNyw2NCkuCitzdWIgb2lkX25sZW5fcmVnZXggeworCW15ICRsZW4gPSBzaGlmdDsKKwlteSAkaGNociA9IHFyL1swLTlhLWZBLUZdLzsKKwlyZXR1cm4gcXIvKD86KD86JGhjaHIpeyRsZW59KS87Cit9CisKKyMgQSByZWdleCBtYXRjaGluZyB0d28gc2V0cyBvZiAkbmxlbiBoZXggY2hhcmFjdGVycywgcHJlZml4ZWQgYnkgdGhlIGxpdGVyYWwKKyMgc3RyaW5nICRwcmVmaXggYW5kIHdpdGggdGhlIGxpdGVyYWwgc3RyaW5nICRpbmZpeCBiZXR3ZWVuIHRoZW0uCitzdWIgb2lkX25sZW5fcHJlZml4X2luZml4X3JlZ2V4IHsKKwlteSAkbmxlbiA9IHNoaWZ0OworCW15ICRwcmVmaXggPSBzaGlmdDsKKwlteSAkaW5maXggPSBzaGlmdDsKKworCW15ICRyeCA9IG9pZF9ubGVuX3JlZ2V4KCRubGVuKTsKKworCXJldHVybiBxci9eXFEkcHJlZml4XEUkcnhcUSRpbmZpeFxFJHJ4JC87Cit9CisKKyMgQSByZWdleCBtYXRjaGluZyBhIHZhbGlkIG9iamVjdCBJRC4KK291ciAkb2lkX3JlZ2V4OworeworCW15ICR4ID0gb2lkX25sZW5fcmVnZXgoJHNoYTFfbGVuKTsKKwlteSAkeSA9IG9pZF9ubGVuX3JlZ2V4KCRzaGEyNTZfZXh0cmFfbGVuKTsKKwkkb2lkX3JlZ2V4ID0gcXIvKD86JHgoPzokeSk/KS87Cit9CisKKyMgaW5wdXQgcGFyYW1ldGVycyBjYW4gYmUgY29sbGVjdGVkIGZyb20gYSB2YXJpZXR5IG9mIHNvdXJjZXMgKHByZXNlbnRseSwgQ0dJCisjIGFuZCBQQVRIX0lORk8pLCBzbyB3ZSBkZWZpbmUgYW4gJWlucHV0X3BhcmFtcyBoYXNoIHRoYXQgY29sbGVjdHMgdGhlbSBhbGwKKyMgdG9nZXRoZXIgZHVyaW5nIHZhbGlkYXRpb246IHRoaXMgYWxsb3dzIHN1YnNlcXVlbnQgdXNlcyAoZS5nLiBocmVmKCkpIHRvIGJlCisjIGFnbm9zdGljIG9mIHRoZSBwYXJhbWV0ZXIgb3JpZ2luCisKK291ciAlaW5wdXRfcGFyYW1zID0gKCk7CisKKyMgaW5wdXQgcGFyYW1ldGVycyBhcmUgc3RvcmVkIHdpdGggdGhlIGxvbmcgcGFyYW1ldGVyIG5hbWUgYXMga2V5LiBUaGlzIHdpbGwKKyMgYWxzbyBiZSB1c2VkIGluIHRoZSBocmVmIHN1YnJvdXRpbmUgdG8gY29udmVydCBwYXJhbWV0ZXJzIHRvIHRoZWlyIENHSQorIyBlcXVpdmFsZW50LCBhbmQgc2luY2UgdGhlIGhyZWYoKSB1c2FnZSBpcyB0aGUgbW9zdCBmcmVxdWVudCBvbmUsIHdlIHN0b3JlCisjIHRoZSBuYW1lIC0+IENHSSBrZXkgbWFwcGluZyBoZXJlLCBpbnN0ZWFkIG9mIHRoZSByZXZlcnNlLgorIworIyBYWFg6IFdhcm5pbmc6IElmIHlvdSB0b3VjaCB0aGlzLCBjaGVjayB0aGUgc2VhcmNoIGZvcm0gZm9yIHVwZGF0aW5nLAorIyB0b28uCisKK291ciBAY2dpX3BhcmFtX21hcHBpbmcgPSAoCisJcHJvamVjdCA9PiAicCIsCisJYWN0aW9uID0+ICJhIiwKKwlmaWxlX25hbWUgPT4gImYiLAorCWZpbGVfcGFyZW50ID0+ICJmcCIsCisJaGFzaCA9PiAiaCIsCisJaGFzaF9wYXJlbnQgPT4gImhwIiwKKwloYXNoX2Jhc2UgPT4gImhiIiwKKwloYXNoX3BhcmVudF9iYXNlID0+ICJocGIiLAorCXBhZ2UgPT4gInBnIiwKKwlvcmRlciA9PiAibyIsCisJc2VhcmNodGV4dCA9PiAicyIsCisJc2VhcmNodHlwZSA9PiAic3QiLAorCXNuYXBzaG90X2Zvcm1hdCA9PiAic2YiLAorCWV4dHJhX29wdGlvbnMgPT4gIm9wdCIsCisJc2VhcmNoX3VzZV9yZWdleHAgPT4gInNyIiwKKwljdGFnID0+ICJieV90YWciLAorCWRpZmZfc3R5bGUgPT4gImRzIiwKKwlwcm9qZWN0X2ZpbHRlciA9PiAicGYiLAorCSMgdGhpcyBtdXN0IGJlIGxhc3QgZW50cnkgKGZvciBtYW5pcHVsYXRpb24gZnJvbSBKYXZhU2NyaXB0KQorCWphdmFzY3JpcHQgPT4gImpzIgorKTsKK291ciAlY2dpX3BhcmFtX21hcHBpbmcgPSBAY2dpX3BhcmFtX21hcHBpbmc7CisKKyMgd2Ugd2lsbCBhbHNvIG5lZWQgdG8ga25vdyB0aGUgcG9zc2libGUgYWN0aW9ucywgZm9yIHZhbGlkYXRpb24KK291ciAlYWN0aW9ucyA9ICgKKwkiYmxhbWUiID0+IFwmZ2l0X2JsYW1lLAorCSJibGFtZV9pbmNyZW1lbnRhbCIgPT4gXCZnaXRfYmxhbWVfaW5jcmVtZW50YWwsCisJImJsYW1lX2RhdGEiID0+IFwmZ2l0X2JsYW1lX2RhdGEsCisJImJsb2JkaWZmIiA9PiBcJmdpdF9ibG9iZGlmZiwKKwkiYmxvYmRpZmZfcGxhaW4iID0+IFwmZ2l0X2Jsb2JkaWZmX3BsYWluLAorCSJibG9iIiA9PiBcJmdpdF9ibG9iLAorCSJibG9iX3BsYWluIiA9PiBcJmdpdF9ibG9iX3BsYWluLAorCSJjb21taXRkaWZmIiA9PiBcJmdpdF9jb21taXRkaWZmLAorCSJjb21taXRkaWZmX3BsYWluIiA9PiBcJmdpdF9jb21taXRkaWZmX3BsYWluLAorCSJjb21taXQiID0+IFwmZ2l0X2NvbW1pdCwKKwkiZm9ya3MiID0+IFwmZ2l0X2ZvcmtzLAorCSJoZWFkcyIgPT4gXCZnaXRfaGVhZHMsCisJImhpc3RvcnkiID0+IFwmZ2l0X2hpc3RvcnksCisJImxvZyIgPT4gXCZnaXRfbG9nLAorCSJwYXRjaCIgPT4gXCZnaXRfcGF0Y2gsCisJInBhdGNoZXMiID0+IFwmZ2l0X3BhdGNoZXMsCisJInJlbW90ZXMiID0+IFwmZ2l0X3JlbW90ZXMsCisJInJzcyIgPT4gXCZnaXRfcnNzLAorCSJhdG9tIiA9PiBcJmdpdF9hdG9tLAorCSJzZWFyY2giID0+IFwmZ2l0X3NlYXJjaCwKKwkic2VhcmNoX2hlbHAiID0+IFwmZ2l0X3NlYXJjaF9oZWxwLAorCSJzaG9ydGxvZyIgPT4gXCZnaXRfc2hvcnRsb2csCisJInN1bW1hcnkiID0+IFwmZ2l0X3N1bW1hcnksCisJInRhZyIgPT4gXCZnaXRfdGFnLAorCSJ0YWdzIiA9PiBcJmdpdF90YWdzLAorCSJ0cmVlIiA9PiBcJmdpdF90cmVlLAorCSJzbmFwc2hvdCIgPT4gXCZnaXRfc25hcHNob3QsCisJIm9iamVjdCIgPT4gXCZnaXRfb2JqZWN0LAorCSMgdGhvc2UgYmVsb3cgZG9uJ3QgbmVlZCAkcHJvamVjdAorCSJvcG1sIiA9PiBcJmdpdF9vcG1sLAorCSJwcm9qZWN0X2xpc3QiID0+IFwmZ2l0X3Byb2plY3RfbGlzdCwKKwkicHJvamVjdF9pbmRleCIgPT4gXCZnaXRfcHJvamVjdF9pbmRleCwKKyk7CisKKyMgZmluYWxseSwgd2UgaGF2ZSB0aGUgaGFzaCBvZiBhbGxvd2VkIGV4dHJhX29wdGlvbnMgZm9yIHRoZSBjb21tYW5kcyB0aGF0CisjIGFsbG93IHRoZW0KK291ciAlYWxsb3dlZF9vcHRpb25zID0gKAorCSItLW5vLW1lcmdlcyIgPT4gWyBxdyhyc3MgYXRvbSBsb2cgc2hvcnRsb2cgaGlzdG9yeSkgXSwKKyk7CisKKyMgZmlsbCAlaW5wdXRfcGFyYW1zIHdpdGggdGhlIENHSSBwYXJhbWV0ZXJzLiBBbGwgdmFsdWVzIGV4Y2VwdCBmb3IgJ29wdCcKKyMgc2hvdWxkIGJlIHNpbmdsZSB2YWx1ZXMsIGJ1dCBvcHQgY2FuIGJlIGFuIGFycmF5LiBXZSBzaG91bGQgcHJvYmFibHkKKyMgYnVpbGQgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBtdWx0aS12YWx1ZWQsIGJ1dCBzaW5jZSBmb3IgdGhlIHRpbWUKKyMgYmVpbmcgaXQncyBvbmx5IHRoaXMgb25lLCB3ZSBqdXN0IHNpbmdsZSBpdCBvdXQKK3N1YiBldmFsdWF0ZV9xdWVyeV9wYXJhbXMgeworCW91ciAkY2dpOworCisJd2hpbGUgKG15ICgkbmFtZSwgJHN5bWJvbCkgPSBlYWNoICVjZ2lfcGFyYW1fbWFwcGluZykgeworCQlpZiAoJHN5bWJvbCBlcSAnb3B0JykgeworCQkJJGlucHV0X3BhcmFtc3skbmFtZX0gPSBbIG1hcCB7IGRlY29kZV91dGY4KCRfKSB9ICRjZ2ktPm11bHRpX3BhcmFtKCRzeW1ib2wpIF07CisJCX0gZWxzZSB7CisJCQkkaW5wdXRfcGFyYW1zeyRuYW1lfSA9IGRlY29kZV91dGY4KCRjZ2ktPnBhcmFtKCRzeW1ib2wpKTsKKwkJfQorCX0KK30KKworIyBub3cgcmVhZCBQQVRIX0lORk8gYW5kIHVwZGF0ZSB0aGUgcGFyYW1ldGVyIGxpc3QgZm9yIG1pc3NpbmcgcGFyYW1ldGVycworc3ViIGV2YWx1YXRlX3BhdGhfaW5mbyB7CisJcmV0dXJuIGlmIGRlZmluZWQgJGlucHV0X3BhcmFtc3sncHJvamVjdCd9OworCXJldHVybiBpZiAhJHBhdGhfaW5mbzsKKwkkcGF0aF9pbmZvID1+IHMsXi8rLCw7CisJcmV0dXJuIGlmICEkcGF0aF9pbmZvOworCisJIyBmaW5kIHdoaWNoIHBhcnQgb2YgUEFUSF9JTkZPIGlzIHByb2plY3QKKwlteSAkcHJvamVjdCA9ICRwYXRoX2luZm87CisJJHByb2plY3QgPX4gcywvKyQsLDsKKwl3aGlsZSAoJHByb2plY3QgJiYgIWNoZWNrX2hlYWRfbGluaygiJHByb2plY3Ryb290LyRwcm9qZWN0IikpIHsKKwkJJHByb2plY3QgPX4gcywvKlteL10qJCwsOworCX0KKwlyZXR1cm4gdW5sZXNzICRwcm9qZWN0OworCSRpbnB1dF9wYXJhbXN7J3Byb2plY3QnfSA9ICRwcm9qZWN0OworCisJIyBkbyBub3QgY2hhbmdlIGFueSBwYXJhbWV0ZXJzIGlmIGFuIGFjdGlvbiBpcyBnaXZlbiB1c2luZyB0aGUgcXVlcnkgc3RyaW5nCisJcmV0dXJuIGlmICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9OworCSRwYXRoX2luZm8gPX4gcyxeXFEkcHJvamVjdFxFLyosLDsKKworCSMgbmV4dCwgY2hlY2sgaWYgd2UgaGF2ZSBhbiBhY3Rpb24KKwlteSAkYWN0aW9uID0gJHBhdGhfaW5mbzsKKwkkYWN0aW9uID1+IHMsLy4qJCwsOworCWlmIChleGlzdHMgJGFjdGlvbnN7JGFjdGlvbn0pIHsKKwkJJHBhdGhfaW5mbyA9fiBzLF4kYWN0aW9uLyosLDsKKwkJJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gPSAkYWN0aW9uOworCX0KKworCSMgbGlzdCBvZiBhY3Rpb25zIHRoYXQgd2FudCBoYXNoX2Jhc2UgaW5zdGVhZCBvZiBoYXNoLCBidXQgY2FuIGhhdmUgbm8KKwkjIHBhdGhuYW1lIChmKSBwYXJhbWV0ZXIKKwlteSBAd2FudHNfYmFzZSA9ICgKKwkJJ3RyZWUnLAorCQknaGlzdG9yeScsCisJKTsKKworCSMgd2Ugd2FudCB0byBjYXRjaCwgYW1vbmcgb3RoZXJzCisJIyBbJGhhc2hfcGFyZW50X2Jhc2VbOiRmaWxlX3BhcmVudF0uLl0kaGFzaF9wYXJlbnRbOiRmaWxlX25hbWVdCisJbXkgKCRwYXJlbnRyZWZuYW1lLCAkcGFyZW50cGF0aG5hbWUsICRyZWZuYW1lLCAkcGF0aG5hbWUpID0KKwkJKCRwYXRoX2luZm8gPX4gL14oPzooLis/KSg/OjooLispKT9cLlwuKT8oW146XSs/KT8oPzo6KC4rKSk/JC8pOworCisJIyBmaXJzdCwgYW5hbHl6ZSB0aGUgJ2N1cnJlbnQnIHBhcnQKKwlpZiAoZGVmaW5lZCAkcGF0aG5hbWUpIHsKKwkJIyB3ZSBnb3QgImJyYW5jaDpmaWxlbmFtZSIgb3IgImJyYW5jaDpkaXIvIgorCQkjIHdlIGNvdWxkIHVzZSBnaXRfZ2V0X3R5cGUoYnJhbmNoOnBhdGhuYW1lKSwgYnV0OgorCQkjIC0gaXQgbmVlZHMgJGdpdF9kaXIKKwkJIyAtIGl0IGRvZXMgYSBnaXQoKSBjYWxsCisJCSMgLSB0aGUgY29udmVudGlvbiBvZiB0ZXJtaW5hdGluZyBkaXJlY3RvcmllcyB3aXRoIGEgc2xhc2gKKwkJIyAgIG1ha2VzIGl0IHN1cGVyZmx1b3VzCisJCSMgLSBlbWJlZGRpbmcgdGhlIGFjdGlvbiBpbiB0aGUgUEFUSF9JTkZPIHdvdWxkIG1ha2UgaXQgZXZlbgorCQkjICAgbW9yZSBzdXBlcmZsdW91cworCQkkcGF0aG5hbWUgPX4gcyxeLyssLDsKKwkJaWYgKCEkcGF0aG5hbWUgfHwgc3Vic3RyKCRwYXRobmFtZSwgLTEpIGVxICIvIikgeworCQkJJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gfHw9ICJ0cmVlIjsKKwkJCSRwYXRobmFtZSA9fiBzLC8kLCw7CisJCX0gZWxzZSB7CisJCQkjIHRoZSBkZWZhdWx0IGFjdGlvbiBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgaGFkIHBhcmVudCBpbmZvCisJCQkjIG9yIG5vdAorCQkJaWYgKCRwYXJlbnRyZWZuYW1lKSB7CisJCQkJJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gfHw9ICJibG9iZGlmZl9wbGFpbiI7CisJCQl9IGVsc2UgeworCQkJCSRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IHx8PSAiYmxvYl9wbGFpbiI7CisJCQl9CisJCX0KKwkJJGlucHV0X3BhcmFtc3snaGFzaF9iYXNlJ30gfHw9ICRyZWZuYW1lOworCQkkaW5wdXRfcGFyYW1zeydmaWxlX25hbWUnfSB8fD0gJHBhdGhuYW1lOworCX0gZWxzaWYgKGRlZmluZWQgJHJlZm5hbWUpIHsKKwkJIyB3ZSBnb3QgImJyYW5jaCIuIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGNob29zZSBpZiB3ZSBoYXZlIHRvCisJCSMgc2V0IGhhc2ggb3IgaGFzaF9iYXNlLgorCQkjCisJCSMgTW9zdCBvZiB0aGUgYWN0aW9ucyB3aXRob3V0IGEgcGF0aG5hbWUgb25seSB3YW50IGhhc2ggdG8gYmUKKwkJIyBzZXQsIGV4Y2VwdCBmb3IgdGhlIG9uZXMgc3BlY2lmaWVkIGluIEB3YW50c19iYXNlIHRoYXQgd2FudAorCQkjIGhhc2hfYmFzZSBpbnN0ZWFkLiBJdCBzaG91bGQgYWxzbyBiZSBub3RlZCB0aGF0IGhhbmQtY3JhZnRlZAorCQkjIGxpbmtzIGhhdmluZyAnaGlzdG9yeScgYXMgYW4gYWN0aW9uIGFuZCBubyBwYXRobmFtZSBvciBoYXNoCisJCSMgc2V0IHdpbGwgZmFpbCwgYnV0IHRoYXQgaGFwcGVucyByZWdhcmRsZXNzIG9mIFBBVEhfSU5GTy4KKwkJaWYgKGRlZmluZWQgJHBhcmVudHJlZm5hbWUpIHsKKwkJCSMgaWYgdGhlcmUgaXMgcGFyZW50IGxldCB0aGUgZGVmYXVsdCBiZSAnc2hvcnRsb2cnIGFjdGlvbgorCQkJIyAoZm9yIGh0dHA6Ly9naXQuZXhhbXBsZS5jb20vcmVwby5naXQvQS4uQiBsaW5rcyk7IGlmIHRoZXJlCisJCQkjIGlzIG5vIHBhcmVudCwgZGlzcGF0Y2ggd2lsbCBkZXRlY3QgdHlwZSBvZiBvYmplY3QgYW5kIHNldAorCQkJIyBhY3Rpb24gYXBwcm9wcmlhdGVseSBpZiByZXF1aXJlZCAoaWYgYWN0aW9uIGlzIG5vdCBzZXQpCisJCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB8fD0gInNob3J0bG9nIjsKKwkJfQorCQlpZiAoJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gJiYKKwkJICAgIGdyZXAgeyAkXyBlcSAkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB9IEB3YW50c19iYXNlKSB7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoX2Jhc2UnfSB8fD0gJHJlZm5hbWU7CisJCX0gZWxzZSB7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoJ30gfHw9ICRyZWZuYW1lOworCQl9CisJfQorCisJIyBuZXh0LCBoYW5kbGUgdGhlICdwYXJlbnQnIHBhcnQsIGlmIHByZXNlbnQKKwlpZiAoZGVmaW5lZCAkcGFyZW50cmVmbmFtZSkgeworCQkjIGEgbWlzc2luZyBwYXRoc3BlYyBkZWZhdWx0cyB0byB0aGUgJ2N1cnJlbnQnIGZpbGVuYW1lLCBhbGxvd2luZyBlLmcuCisJCSMgc29tZXByb2plY3QvYmxvYmRpZmYvb2xkcmV2Li5uZXdyZXY6L2ZpbGVuYW1lCisJCWlmICgkcGFyZW50cGF0aG5hbWUpIHsKKwkJCSRwYXJlbnRwYXRobmFtZSA9fiBzLF4vKywsOworCQkJJHBhcmVudHBhdGhuYW1lID1+IHMsLyQsLDsKKwkJCSRpbnB1dF9wYXJhbXN7J2ZpbGVfcGFyZW50J30gfHw9ICRwYXJlbnRwYXRobmFtZTsKKwkJfSBlbHNlIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2ZpbGVfcGFyZW50J30gfHw9ICRpbnB1dF9wYXJhbXN7J2ZpbGVfbmFtZSd9OworCQl9CisJCSMgd2UgYXNzdW1lIHRoYXQgaGFzaF9wYXJlbnRfYmFzZSBpcyB3YW50ZWQgaWYgYSBwYXRoIHdhcyBzcGVjaWZpZWQsCisJCSMgb3IgaWYgdGhlIGFjdGlvbiB3YW50cyBoYXNoX2Jhc2UgaW5zdGVhZCBvZiBoYXNoCisJCWlmIChkZWZpbmVkICRpbnB1dF9wYXJhbXN7J2ZpbGVfcGFyZW50J30gfHwKKwkJCWdyZXAgeyAkXyBlcSAkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB9IEB3YW50c19iYXNlKSB7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ30gfHw9ICRwYXJlbnRyZWZuYW1lOworCQl9IGVsc2UgeworCQkJJGlucHV0X3BhcmFtc3snaGFzaF9wYXJlbnQnfSB8fD0gJHBhcmVudHJlZm5hbWU7CisJCX0KKwl9CisKKwkjIGZvciB0aGUgc25hcHNob3QgYWN0aW9uLCB3ZSBhbGxvdyBVUkxzIGluIHRoZSBmb3JtCisJIyAkcHJvamVjdC9zbmFwc2hvdC8kaGFzaC5leHQKKwkjIHdoZXJlIC5leHQgZGV0ZXJtaW5lcyB0aGUgc25hcHNob3QgYW5kIGdldHMgcmVtb3ZlZCBmcm9tIHRoZQorCSMgcGFzc2VkICRyZWZuYW1lIHRvIHByb3ZpZGUgdGhlICRoYXNoLgorCSMKKwkjIFRvIGJlIGFibGUgdG8gdGVsbCB0aGF0ICRyZWZuYW1lIGluY2x1ZGVzIHRoZSBmb3JtYXQgZXh0ZW5zaW9uLCB3ZQorCSMgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHR3byBjb25kaXRpb25zIHRvIGJlIHNhdGlzZmllZDoKKwkjIC0gdGhlIGhhc2ggaW5wdXQgcGFyYW1ldGVyIE1VU1QgaGF2ZSBiZWVuIHNldCBmcm9tIHRoZSAkcmVmbmFtZSBwYXJ0CisJIyAgIG9mIHRoZSBVUkwgKGkuZS4gdGhleSBtdXN0IGJlIGVxdWFsKQorCSMgLSB0aGUgc25hcHNob3QgZm9ybWF0IE1VU1QgTk9UIGhhdmUgYmVlbiBkZWZpbmVkIGFscmVhZHkgKGUuZy4gZnJvbQorCSMgICBDR0kgcGFyYW1ldGVyIHNmKQorCSMgSXQncyBhbHNvIHVzZWxlc3MgdG8gdHJ5IGFueSBtYXRjaGluZyB1bmxlc3MgJHJlZm5hbWUgaGFzIGEgZG90LAorCSMgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vCisJaWYgKGRlZmluZWQgJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gJiYKKwkJJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gZXEgJ3NuYXBzaG90JyAmJgorCQlkZWZpbmVkICRyZWZuYW1lICYmIGluZGV4KCRyZWZuYW1lLCAnLicpICE9IC0xICYmCisJCSRyZWZuYW1lIGVxICRpbnB1dF9wYXJhbXN7J2hhc2gnfSAmJgorCQkhZGVmaW5lZCAkaW5wdXRfcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfSkgeworCQkjIFdlIGxvb3Agb3ZlciB0aGUga25vd24gc25hcHNob3QgZm9ybWF0cywgY2hlY2tpbmcgZm9yCisJCSMgZXh0ZW5zaW9ucy4gQWxsb3dlZCBleHRlbnNpb25zIGFyZSBib3RoIHRoZSBkZWZpbmVkIHN1ZmZpeAorCQkjICh3aGljaCBpbmNsdWRlcyB0aGUgaW5pdGlhbCBkb3QgYWxyZWFkeSkgYW5kIHRoZSBzbmFwc2hvdAorCQkjIGZvcm1hdCBrZXkgaXRzZWxmLCB3aXRoIGEgcHJlcGVuZGVkIGRvdAorCQl3aGlsZSAobXkgKCRmbXQsICRvcHQpID0gZWFjaCAla25vd25fc25hcHNob3RfZm9ybWF0cykgeworCQkJbXkgJGhhc2ggPSAkcmVmbmFtZTsKKwkJCXVubGVzcyAoJGhhc2ggPX4gcy8oXFEkb3B0LT57J3N1ZmZpeCd9XEV8XFEuJGZtdFxFKSQvLykgeworCQkJCW5leHQ7CisJCQl9CisJCQlteSAkc2Z4ID0gJDE7CisJCQkjIGEgdmFsaWQgc3VmZml4IHdhcyBmb3VuZCwgc28gc2V0IHRoZSBzbmFwc2hvdCBmb3JtYXQKKwkJCSMgYW5kIHJlc2V0IHRoZSBoYXNoIHBhcmFtZXRlcgorCQkJJGlucHV0X3BhcmFtc3snc25hcHNob3RfZm9ybWF0J30gPSAkZm10OworCQkJJGlucHV0X3BhcmFtc3snaGFzaCd9ID0gJGhhc2g7CisJCQkjIHdlIGFsc28gc2V0IHRoZSBmb3JtYXQgc3VmZml4IHRvIHRoZSBvbmUgcmVxdWVzdGVkCisJCQkjIGluIHRoZSBVUkw6IHRoaXMgd2F5IGEgcmVxdWVzdCBmb3IgZS5nLiAudGd6IHJldHVybnMKKwkJCSMgYSAudGd6IGluc3RlYWQgb2YgYSAudGFyLmd6CisJCQkka25vd25fc25hcHNob3RfZm9ybWF0c3skZm10fXsnc3VmZml4J30gPSAkc2Z4OworCQkJbGFzdDsKKwkJfQorCX0KK30KKworb3VyICgkYWN0aW9uLCAkcHJvamVjdCwgJGZpbGVfbmFtZSwgJGZpbGVfcGFyZW50LCAkaGFzaCwgJGhhc2hfcGFyZW50LCAkaGFzaF9iYXNlLAorICAgICAkaGFzaF9wYXJlbnRfYmFzZSwgQGV4dHJhX29wdGlvbnMsICRwYWdlLCAkc2VhcmNodHlwZSwgJHNlYXJjaF91c2VfcmVnZXhwLAorICAgICAkc2VhcmNodGV4dCwgJHNlYXJjaF9yZWdleHAsICRwcm9qZWN0X2ZpbHRlcik7CitzdWIgZXZhbHVhdGVfYW5kX3ZhbGlkYXRlX3BhcmFtcyB7CisJb3VyICRhY3Rpb24gPSAkaW5wdXRfcGFyYW1zeydhY3Rpb24nfTsKKwlpZiAoZGVmaW5lZCAkYWN0aW9uKSB7CisJCWlmICghaXNfdmFsaWRfYWN0aW9uKCRhY3Rpb24pKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBhY3Rpb24gcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwkjIHBhcmFtZXRlcnMgd2hpY2ggYXJlIHBhdGhuYW1lcworCW91ciAkcHJvamVjdCA9ICRpbnB1dF9wYXJhbXN7J3Byb2plY3QnfTsKKwlpZiAoZGVmaW5lZCAkcHJvamVjdCkgeworCQlpZiAoIWlzX3ZhbGlkX3Byb2plY3QoJHByb2plY3QpKSB7CisJCQl1bmRlZiAkcHJvamVjdDsKKwkJCWRpZV9lcnJvcig0MDQsICJObyBzdWNoIHByb2plY3QiKTsKKwkJfQorCX0KKworCW91ciAkcHJvamVjdF9maWx0ZXIgPSAkaW5wdXRfcGFyYW1zeydwcm9qZWN0X2ZpbHRlcid9OworCWlmIChkZWZpbmVkICRwcm9qZWN0X2ZpbHRlcikgeworCQlpZiAoIWlzX3ZhbGlkX3BhdGhuYW1lKCRwcm9qZWN0X2ZpbHRlcikpIHsKKwkJCWRpZV9lcnJvcig0MDQsICJJbnZhbGlkIHByb2plY3RfZmlsdGVyIHBhcmFtZXRlciIpOworCQl9CisJfQorCisJb3VyICRmaWxlX25hbWUgPSAkaW5wdXRfcGFyYW1zeydmaWxlX25hbWUnfTsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCWlmICghaXNfdmFsaWRfcGF0aG5hbWUoJGZpbGVfbmFtZSkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGZpbGUgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgJGZpbGVfcGFyZW50ID0gJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfTsKKwlpZiAoZGVmaW5lZCAkZmlsZV9wYXJlbnQpIHsKKwkJaWYgKCFpc192YWxpZF9wYXRobmFtZSgkZmlsZV9wYXJlbnQpKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBmaWxlIHBhcmVudCBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCSMgcGFyYW1ldGVycyB3aGljaCBhcmUgcmVmbmFtZXMKKwlvdXIgJGhhc2ggPSAkaW5wdXRfcGFyYW1zeydoYXNoJ307CisJaWYgKGRlZmluZWQgJGhhc2gpIHsKKwkJaWYgKCFpc192YWxpZF9yZWZuYW1lKCRoYXNoKSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgaGFzaCBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciAkaGFzaF9wYXJlbnQgPSAkaW5wdXRfcGFyYW1zeydoYXNoX3BhcmVudCd9OworCWlmIChkZWZpbmVkICRoYXNoX3BhcmVudCkgeworCQlpZiAoIWlzX3ZhbGlkX3JlZm5hbWUoJGhhc2hfcGFyZW50KSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgaGFzaCBwYXJlbnQgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgJGhhc2hfYmFzZSA9ICRpbnB1dF9wYXJhbXN7J2hhc2hfYmFzZSd9OworCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJaWYgKCFpc192YWxpZF9yZWZuYW1lKCRoYXNoX2Jhc2UpKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBoYXNoIGJhc2UgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgQGV4dHJhX29wdGlvbnMgPSBAeyRpbnB1dF9wYXJhbXN7J2V4dHJhX29wdGlvbnMnfX07CisJIyBAZXh0cmFfb3B0aW9ucyBpcyBhbHdheXMgZGVmaW5lZCwgc2luY2UgaXQgY2FuIG9ubHkgYmUgKGN1cnJlbnRseSkgc2V0IGZyb20KKwkjIENHSSwgYW5kICRjZ2ktPnBhcmFtKCkgcmV0dXJucyB0aGUgZW1wdHkgYXJyYXkgaW4gYXJyYXkgY29udGV4dCBpZiB0aGUgcGFyYW0KKwkjIGlzIG5vdCBzZXQKKwlmb3JlYWNoIG15ICRvcHQgKEBleHRyYV9vcHRpb25zKSB7CisJCWlmIChub3QgZXhpc3RzICRhbGxvd2VkX29wdGlvbnN7JG9wdH0pIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIG9wdGlvbiBwYXJhbWV0ZXIiKTsKKwkJfQorCQlpZiAobm90IGdyZXAoL14kYWN0aW9uJC8sIEB7JGFsbG93ZWRfb3B0aW9uc3skb3B0fX0pKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBvcHRpb24gcGFyYW1ldGVyIGZvciB0aGlzIGFjdGlvbiIpOworCQl9CisJfQorCisJb3VyICRoYXNoX3BhcmVudF9iYXNlID0gJGlucHV0X3BhcmFtc3snaGFzaF9wYXJlbnRfYmFzZSd9OworCWlmIChkZWZpbmVkICRoYXNoX3BhcmVudF9iYXNlKSB7CisJCWlmICghaXNfdmFsaWRfcmVmbmFtZSgkaGFzaF9wYXJlbnRfYmFzZSkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGhhc2ggcGFyZW50IGJhc2UgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwkjIG90aGVyIHBhcmFtZXRlcnMKKwlvdXIgJHBhZ2UgPSAkaW5wdXRfcGFyYW1zeydwYWdlJ307CisJaWYgKGRlZmluZWQgJHBhZ2UpIHsKKwkJaWYgKCRwYWdlID1+IG0vW14wLTldLykgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgcGFnZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciAkc2VhcmNodHlwZSA9ICRpbnB1dF9wYXJhbXN7J3NlYXJjaHR5cGUnfTsKKwlpZiAoZGVmaW5lZCAkc2VhcmNodHlwZSkgeworCQlpZiAoJHNlYXJjaHR5cGUgPX4gbS9bXmEtel0vKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBzZWFyY2h0eXBlIHBhcmFtZXRlciIpOworCQl9CisJfQorCisJb3VyICRzZWFyY2hfdXNlX3JlZ2V4cCA9ICRpbnB1dF9wYXJhbXN7J3NlYXJjaF91c2VfcmVnZXhwJ307CisKKwlvdXIgJHNlYXJjaHRleHQgPSAkaW5wdXRfcGFyYW1zeydzZWFyY2h0ZXh0J307CisJb3VyICRzZWFyY2hfcmVnZXhwID0gdW5kZWY7CisJaWYgKGRlZmluZWQgJHNlYXJjaHRleHQpIHsKKwkJaWYgKGxlbmd0aCgkc2VhcmNodGV4dCkgPCAyKSB7CisJCQlkaWVfZXJyb3IoNDAzLCAiQXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYXJlIHJlcXVpcmVkIGZvciBzZWFyY2ggcGFyYW1ldGVyIik7CisJCX0KKwkJaWYgKCRzZWFyY2hfdXNlX3JlZ2V4cCkgeworCQkJJHNlYXJjaF9yZWdleHAgPSAkc2VhcmNodGV4dDsKKwkJCWlmICghZXZhbCB7IHFyLyRzZWFyY2hfcmVnZXhwLzsgMTsgfSkgeworCQkJCShteSAkZXJyb3IgPSAkQCkgPX4gcy8gYXQgXFMrIGxpbmUgXGQrLipcbj8vLzsKKwkJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBzZWFyY2ggcmVnZXhwICckc2VhcmNoX3JlZ2V4cCciLAorCQkJCSAgICAgICAgICBlc2NfaHRtbCgkZXJyb3IpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRzZWFyY2hfcmVnZXhwID0gcXVvdGVtZXRhICRzZWFyY2h0ZXh0OworCQl9CisJfQorfQorCisjIHBhdGggdG8gdGhlIGN1cnJlbnQgZ2l0IHJlcG9zaXRvcnkKK291ciAkZ2l0X2RpcjsKK3N1YiBldmFsdWF0ZV9naXRfZGlyIHsKKwlvdXIgJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0IiBpZiAkcHJvamVjdDsKK30KKworb3VyIChAc25hcHNob3RfZm10cywgJGdpdF9hdmF0YXIsIEBleHRyYV9icmFuY2hfcmVmcyk7CitzdWIgY29uZmlndXJlX2dpdHdlYl9mZWF0dXJlcyB7CisJIyBsaXN0IG9mIHN1cHBvcnRlZCBzbmFwc2hvdCBmb3JtYXRzCisJb3VyIEBzbmFwc2hvdF9mbXRzID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdzbmFwc2hvdCcpOworCUBzbmFwc2hvdF9mbXRzID0gZmlsdGVyX3NuYXBzaG90X2ZtdHMoQHNuYXBzaG90X2ZtdHMpOworCisJb3VyICgkZ2l0X2F2YXRhcikgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ2F2YXRhcicpOworCSRnaXRfYXZhdGFyID0gJycgdW5sZXNzICRnaXRfYXZhdGFyID1+IC9eKD86Z3JhdmF0YXJ8cGljb24pJC9zOworCisJb3VyIEBleHRyYV9icmFuY2hfcmVmcyA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnZXh0cmEtYnJhbmNoLXJlZnMnKTsKKwlAZXh0cmFfYnJhbmNoX3JlZnMgPSBmaWx0ZXJfYW5kX3ZhbGlkYXRlX3JlZnMgKEBleHRyYV9icmFuY2hfcmVmcyk7Cit9CisKK3N1YiBnZXRfYnJhbmNoX3JlZnMgeworCXJldHVybiAoJ2hlYWRzJywgQGV4dHJhX2JyYW5jaF9yZWZzKTsKK30KKworIyBjdXN0b20gZXJyb3IgaGFuZGxlcjogJ2RpZSA8bWVzc2FnZT4nIGlzIEludGVybmFsIFNlcnZlciBFcnJvcgorc3ViIGhhbmRsZV9lcnJvcnNfaHRtbCB7CisJbXkgJG1zZyA9IHNoaWZ0OyAjIGl0IGlzIGFscmVhZHkgSFRNTCBlc2NhcGVkCisKKwkjIHRvIGF2b2lkIGluZmluaXRlIGxvb3Agd2hlcmUgZXJyb3Igb2NjdXJzIGluIGRpZV9lcnJvciwKKwkjIGNoYW5nZSBoYW5kbGVyIHRvIGRlZmF1bHQgaGFuZGxlciwgZGlzYWJsaW5nIGhhbmRsZV9lcnJvcnNfaHRtbAorCXNldF9tZXNzYWdlKCJFcnJvciBvY2N1cnJlZCB3aGVuIGluc2lkZSBkaWVfZXJyb3I6XG4kbXNnIik7CisKKwkjIHlvdSBjYW5ub3QganVtcCBvdXQgb2YgZGllX2Vycm9yIHdoZW4gY2FsbGVkIGFzIGVycm9yIGhhbmRsZXI7CisJIyB0aGUgc3Vicm91dGluZSBzZXQgdmlhIENHSTo6Q2FycDo6c2V0X21lc3NhZ2UgaXMgY2FsbGVkIF9hZnRlcl8KKwkjIEhUVFAgaGVhZGVycyBhcmUgYWxyZWFkeSB3cml0dGVuLCBzbyBpdCBjYW5ub3Qgd3JpdGUgdGhlbSBpdHNlbGYKKwlkaWVfZXJyb3IodW5kZWYsIHVuZGVmLCAkbXNnLCAtZXJyb3JfaGFuZGxlciA9PiAxLCAtbm9faHR0cF9oZWFkZXIgPT4gMSk7Cit9CitzZXRfbWVzc2FnZShcJmhhbmRsZV9lcnJvcnNfaHRtbCk7CisKKyMgZGlzcGF0Y2gKK3N1YiBkaXNwYXRjaCB7CisJaWYgKCFkZWZpbmVkICRhY3Rpb24pIHsKKwkJaWYgKGRlZmluZWQgJGhhc2gpIHsKKwkJCSRhY3Rpb24gPSBnaXRfZ2V0X3R5cGUoJGhhc2gpOworCQkJJGFjdGlvbiBvciBkaWVfZXJyb3IoNDA0LCAiT2JqZWN0IGRvZXMgbm90IGV4aXN0Iik7CisJCX0gZWxzaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiBkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCSRhY3Rpb24gPSBnaXRfZ2V0X3R5cGUoIiRoYXNoX2Jhc2U6JGZpbGVfbmFtZSIpOworCQkJJGFjdGlvbiBvciBkaWVfZXJyb3IoNDA0LCAiRmlsZSBvciBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkcHJvamVjdCkgeworCQkJJGFjdGlvbiA9ICdzdW1tYXJ5JzsKKwkJfSBlbHNlIHsKKwkJCSRhY3Rpb24gPSAncHJvamVjdF9saXN0JzsKKwkJfQorCX0KKwlpZiAoIWRlZmluZWQoJGFjdGlvbnN7JGFjdGlvbn0pKSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIGFjdGlvbiIpOworCX0KKwlpZiAoJGFjdGlvbiAhfiBtL14oPzpvcG1sfHByb2plY3RfbGlzdHxwcm9qZWN0X2luZGV4KSQvICYmCisJICAgICEkcHJvamVjdCkgeworCQlkaWVfZXJyb3IoNDAwLCAiUHJvamVjdCBuZWVkZWQiKTsKKwl9CisJJGFjdGlvbnN7JGFjdGlvbn0tPigpOworfQorCitzdWIgcmVzZXRfdGltZXIgeworCW91ciAkdDAgPSBbIGdldHRpbWVvZmRheSgpIF0KKwkJaWYgZGVmaW5lZCAkdDA7CisJb3VyICRudW1iZXJfb2ZfZ2l0X2NtZHMgPSAwOworfQorCitvdXIgJGZpcnN0X3JlcXVlc3QgPSAxOworc3ViIHJ1bl9yZXF1ZXN0IHsKKwlyZXNldF90aW1lcigpOworCisJZXZhbHVhdGVfdXJpKCk7CisJaWYgKCRmaXJzdF9yZXF1ZXN0KSB7CisJCWV2YWx1YXRlX2dpdHdlYl9jb25maWcoKTsKKwkJZXZhbHVhdGVfZ2l0X3ZlcnNpb24oKTsKKwl9CisJaWYgKCRwZXJfcmVxdWVzdF9jb25maWcpIHsKKwkJaWYgKHJlZigkcGVyX3JlcXVlc3RfY29uZmlnKSBlcSAnQ09ERScpIHsKKwkJCSRwZXJfcmVxdWVzdF9jb25maWctPigpOworCQl9IGVsc2lmICghJGZpcnN0X3JlcXVlc3QpIHsKKwkJCWV2YWx1YXRlX2dpdHdlYl9jb25maWcoKTsKKwkJfQorCX0KKwljaGVja19sb2FkYXZnKCk7CisKKwkjICRwcm9qZWN0cm9vdCBhbmQgJHByb2plY3RzX2xpc3QgbWlnaHQgYmUgc2V0IGluIGdpdHdlYiBjb25maWcgZmlsZQorCSRwcm9qZWN0c19saXN0IHx8PSAkcHJvamVjdHJvb3Q7CisKKwlldmFsdWF0ZV9xdWVyeV9wYXJhbXMoKTsKKwlldmFsdWF0ZV9wYXRoX2luZm8oKTsKKwlldmFsdWF0ZV9hbmRfdmFsaWRhdGVfcGFyYW1zKCk7CisJZXZhbHVhdGVfZ2l0X2RpcigpOworCisJY29uZmlndXJlX2dpdHdlYl9mZWF0dXJlcygpOworCisJZGlzcGF0Y2goKTsKK30KKworb3VyICRpc19sYXN0X3JlcXVlc3QgPSBzdWIgeyAxIH07CitvdXIgKCRwcmVfZGlzcGF0Y2hfaG9vaywgJHBvc3RfZGlzcGF0Y2hfaG9vaywgJHByZV9saXN0ZW5faG9vayk7CitvdXIgJENHSSA9ICdDR0knOworb3VyICRjZ2k7CitzdWIgY29uZmlndXJlX2FzX2ZjZ2kgeworCXJlcXVpcmUgQ0dJOjpGYXN0OworCW91ciAkQ0dJID0gJ0NHSTo6RmFzdCc7CisKKwlteSAkcmVxdWVzdF9udW1iZXIgPSAwOworCSMgbGV0IGVhY2ggY2hpbGQgc2VydmljZSAxMDAgcmVxdWVzdHMKKwlvdXIgJGlzX2xhc3RfcmVxdWVzdCA9IHN1YiB7ICsrJHJlcXVlc3RfbnVtYmVyID4gMTAwIH07Cit9CitzdWIgZXZhbHVhdGVfYXJndiB7CisJbXkgJHNjcmlwdF9uYW1lID0gJEVOVnsnU0NSSVBUX05BTUUnfSB8fCAkRU5WeydTQ1JJUFRfRklMRU5BTUUnfSB8fCBfX0ZJTEVfXzsKKwljb25maWd1cmVfYXNfZmNnaSgpCisJCWlmICRzY3JpcHRfbmFtZSA9fiAvXC5mY2dpJC87CisKKwlyZXR1cm4gdW5sZXNzIChAQVJHVik7CisKKwlyZXF1aXJlIEdldG9wdDo6TG9uZzsKKwlHZXRvcHQ6Okxvbmc6OkdldE9wdGlvbnMoCisJCSdmYXN0Y2dpfGZjZ2l8ZicgPT4gXCZjb25maWd1cmVfYXNfZmNnaSwKKwkJJ25wcm9jfG49aScgPT4gc3ViIHsKKwkJCW15ICgkYXJnLCAkdmFsKSA9IEBfOworCQkJcmV0dXJuIHVubGVzcyBldmFsIHsgcmVxdWlyZSBGQ0dJOjpQcm9jTWFuYWdlcjsgMTsgfTsKKwkJCW15ICRwcm9jX21hbmFnZXIgPSBGQ0dJOjpQcm9jTWFuYWdlci0+bmV3KHsKKwkJCQluX3Byb2Nlc3NlcyA9PiAkdmFsLAorCQkJfSk7CisJCQlvdXIgJHByZV9saXN0ZW5faG9vayAgICA9IHN1YiB7ICRwcm9jX21hbmFnZXItPnBtX21hbmFnZSgpICAgICAgICB9OworCQkJb3VyICRwcmVfZGlzcGF0Y2hfaG9vayAgPSBzdWIgeyAkcHJvY19tYW5hZ2VyLT5wbV9wcmVfZGlzcGF0Y2goKSAgfTsKKwkJCW91ciAkcG9zdF9kaXNwYXRjaF9ob29rID0gc3ViIHsgJHByb2NfbWFuYWdlci0+cG1fcG9zdF9kaXNwYXRjaCgpIH07CisJCX0sCisJKTsKK30KKworc3ViIHJ1biB7CisJZXZhbHVhdGVfYXJndigpOworCisJJGZpcnN0X3JlcXVlc3QgPSAxOworCSRwcmVfbGlzdGVuX2hvb2stPigpCisJCWlmICRwcmVfbGlzdGVuX2hvb2s7CisKKyBSRVFVRVNUOgorCXdoaWxlICgkY2dpID0gJENHSS0+bmV3KCkpIHsKKwkJJHByZV9kaXNwYXRjaF9ob29rLT4oKQorCQkJaWYgJHByZV9kaXNwYXRjaF9ob29rOworCisJCXJ1bl9yZXF1ZXN0KCk7CisKKwkJJHBvc3RfZGlzcGF0Y2hfaG9vay0+KCkKKwkJCWlmICRwb3N0X2Rpc3BhdGNoX2hvb2s7CisJCSRmaXJzdF9yZXF1ZXN0ID0gMDsKKworCQlsYXN0IFJFUVVFU1QgaWYgKCRpc19sYXN0X3JlcXVlc3QtPigpKTsKKwl9CisKKyBET05FX0dJVFdFQjoKKwkxOworfQorCitydW4oKTsKKworaWYgKGRlZmluZWQgY2FsbGVyKSB7CisJIyB3cmFwcGVkIGluIGEgc3Vicm91dGluZSBwcm9jZXNzaW5nIHJlcXVlc3RzLAorCSMgZS5nLiBtb2RfcGVybCB3aXRoIE1vZFBlcmw6OlJlZ2lzdHJ5LCBvciBQU0dJIHdpdGggUGxhY2s6OkFwcDo6V3JhcENHSQorCXJldHVybjsKK30gZWxzZSB7CisJIyBwdXJlIENHSSBzY3JpcHQsIHNlcnZpbmcgc2luZ2xlIHJlcXVlc3QKKwlleGl0OworfQorCisjIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIyBhY3Rpb24gbGlua3MKKworIyBwb3NzaWJsZSB2YWx1ZXMgb2YgZXh0cmEgb3B0aW9ucworIyAtZnVsbCA9PiAwfDEgICAgICAtIHVzZSBhYnNvbHV0ZS9mdWxsIFVSTCAoJG15X3VyaS8kbXlfdXJsIGFzIGJhc2UpCisjIC1yZXBsYXkgPT4gMSAgICAgIC0gc3RhcnQgZnJvbSBhIGN1cnJlbnQgdmlldyAocmVwbGF5IHdpdGggbW9kaWZpY2F0aW9ucykKKyMgLXBhdGhfaW5mbyA9PiAwfDEgLSBkb24ndCB1c2UvdXNlIHBhdGhfaW5mbyBVUkwgKGlmIHBvc3NpYmxlKQorIyAtYW5jaG9yID0+IEFOQ0hPUiAtIGFkZCAjQU5DSE9SIHRvIGVuZCBvZiBVUkwsIGltcGxpZXMgLXJlcGxheSBpZiB1c2VkIGFsb25lCitzdWIgaHJlZiB7CisJbXkgJXBhcmFtcyA9IEBfOworCSMgZGVmYXVsdCBpcyB0byB1c2UgLWFic29sdXRlIHVybCgpIGkuZS4gJG15X3VyaQorCW15ICRocmVmID0gJHBhcmFtc3stZnVsbH0gPyAkbXlfdXJsIDogJG15X3VyaTsKKworCSMgaW1wbGljaXQgLXJlcGxheSwgbXVzdCBiZSBmaXJzdCBvZiBpbXBsaWNpdCBwYXJhbXMKKwkkcGFyYW1zey1yZXBsYXl9ID0gMSBpZiAoa2V5cyAlcGFyYW1zID09IDEgJiYgJHBhcmFtc3stYW5jaG9yfSk7CisKKwkkcGFyYW1zeydwcm9qZWN0J30gPSAkcHJvamVjdCB1bmxlc3MgZXhpc3RzICRwYXJhbXN7J3Byb2plY3QnfTsKKworCWlmICgkcGFyYW1zey1yZXBsYXl9KSB7CisJCXdoaWxlIChteSAoJG5hbWUsICRzeW1ib2wpID0gZWFjaCAlY2dpX3BhcmFtX21hcHBpbmcpIHsKKwkJCWlmICghZXhpc3RzICRwYXJhbXN7JG5hbWV9KSB7CisJCQkJJHBhcmFtc3skbmFtZX0gPSAkaW5wdXRfcGFyYW1zeyRuYW1lfTsKKwkJCX0KKwkJfQorCX0KKworCW15ICR1c2VfcGF0aGluZm8gPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncGF0aGluZm8nKTsKKwlpZiAoZGVmaW5lZCAkcGFyYW1zeydwcm9qZWN0J30gJiYKKwkgICAgKGV4aXN0cyAkcGFyYW1zey1wYXRoX2luZm99ID8gJHBhcmFtc3stcGF0aF9pbmZvfSA6ICR1c2VfcGF0aGluZm8pKSB7CisJCSMgdHJ5IHRvIHB1dCBhcyBtYW55IHBhcmFtZXRlcnMgYXMgcG9zc2libGUgaW4gUEFUSF9JTkZPOgorCQkjICAgLSBwcm9qZWN0IG5hbWUKKwkJIyAgIC0gYWN0aW9uCisJCSMgICAtIGhhc2hfcGFyZW50IG9yIGhhc2hfcGFyZW50X2Jhc2U6L2ZpbGVfcGFyZW50CisJCSMgICAtIGhhc2ggb3IgaGFzaF9iYXNlOi9maWxlbmFtZQorCQkjICAgLSB0aGUgc25hcHNob3RfZm9ybWF0IGFzIGFuIGFwcHJvcHJpYXRlIHN1ZmZpeAorCisJCSMgV2hlbiB0aGUgc2NyaXB0IGlzIHRoZSByb290IERpcmVjdG9yeUluZGV4IGZvciB0aGUgZG9tYWluLAorCQkjICRocmVmIGhlcmUgd291bGQgYmUgc29tZXRoaW5nIGxpa2UgaHR0cDovL2dpdHdlYi5leGFtcGxlLmNvbS8KKwkJIyBUaHVzLCB3ZSBzdHJpcCBhbnkgdHJhaWxpbmcgLyBmcm9tICRocmVmLCB0byBzcGFyZSB1cyBkb3VibGUKKwkJIyBzbGFzaGVzIGluIHRoZSBmaW5hbCBVUkwKKwkJJGhyZWYgPX4gcywvJCwsOworCisJCSMgVGhlbiBhZGQgdGhlIHByb2plY3QgbmFtZSwgaWYgcHJlc2VudAorCQkkaHJlZiAuPSAiLyIuZXNjX3BhdGhfaW5mbygkcGFyYW1zeydwcm9qZWN0J30pOworCQlkZWxldGUgJHBhcmFtc3sncHJvamVjdCd9OworCisJCSMgc2luY2Ugd2UgZGVzdHJ1Y3RpdmVseSBhYnNvcmIgcGFyYW1ldGVycywgd2Uga2VlcCB0aGlzCisJCSMgYm9vbGVhbiB0aGF0IHJlbWVtYmVycyBpZiB3ZSdyZSBoYW5kbGluZyBhIHNuYXBzaG90CisJCW15ICRpc19zbmFwc2hvdCA9ICRwYXJhbXN7J2FjdGlvbid9IGVxICdzbmFwc2hvdCc7CisKKwkJIyBTdW1tYXJ5IGp1c3QgdXNlcyB0aGUgcHJvamVjdCBwYXRoIFVSTCwgYW55IG90aGVyIGFjdGlvbiBpcworCQkjIGFkZGVkIHRvIHRoZSBVUkwKKwkJaWYgKGRlZmluZWQgJHBhcmFtc3snYWN0aW9uJ30pIHsKKwkJCSRocmVmIC49ICIvIi5lc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2FjdGlvbid9KQorCQkJCXVubGVzcyAkcGFyYW1zeydhY3Rpb24nfSBlcSAnc3VtbWFyeSc7CisJCQlkZWxldGUgJHBhcmFtc3snYWN0aW9uJ307CisJCX0KKworCQkjIE5leHQsIHdlIHB1dCBoYXNoX3BhcmVudF9iYXNlOi9maWxlX3BhcmVudC4uaGFzaF9iYXNlOi9maWxlX25hbWUsCisJCSMgc3RyaXBwaW5nIG5vbmV4aXN0ZW50IG9yIHVzZWxlc3MgcGllY2VzCisJCSRocmVmIC49ICIvIiBpZiAoJHBhcmFtc3snaGFzaF9iYXNlJ30gfHwgJHBhcmFtc3snaGFzaF9wYXJlbnRfYmFzZSd9CisJCQl8fCAkcGFyYW1zeydoYXNoX3BhcmVudCd9IHx8ICRwYXJhbXN7J2hhc2gnfSk7CisJCWlmIChkZWZpbmVkICRwYXJhbXN7J2hhc2hfYmFzZSd9KSB7CisJCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ30pIHsKKwkJCQkkaHJlZiAuPSBlc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2hhc2hfcGFyZW50X2Jhc2UnfSk7CisJCQkJIyBza2lwIHRoZSBmaWxlX3BhcmVudCBpZiBpdCdzIHRoZSBzYW1lIGFzIHRoZSBmaWxlX25hbWUKKwkJCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydmaWxlX3BhcmVudCd9KSB7CisJCQkJCWlmIChkZWZpbmVkICRwYXJhbXN7J2ZpbGVfbmFtZSd9ICYmICRwYXJhbXN7J2ZpbGVfcGFyZW50J30gZXEgJHBhcmFtc3snZmlsZV9uYW1lJ30pIHsKKwkJCQkJCWRlbGV0ZSAkcGFyYW1zeydmaWxlX3BhcmVudCd9OworCQkJCQl9IGVsc2lmICgkcGFyYW1zeydmaWxlX3BhcmVudCd9ICF+IC9cLlwuLykgeworCQkJCQkJJGhyZWYgLj0gIjovIi5lc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2ZpbGVfcGFyZW50J30pOworCQkJCQkJZGVsZXRlICRwYXJhbXN7J2ZpbGVfcGFyZW50J307CisJCQkJCX0KKwkJCQl9CisJCQkJJGhyZWYgLj0gIi4uIjsKKwkJCQlkZWxldGUgJHBhcmFtc3snaGFzaF9wYXJlbnQnfTsKKwkJCQlkZWxldGUgJHBhcmFtc3snaGFzaF9wYXJlbnRfYmFzZSd9OworCQkJfSBlbHNpZiAoZGVmaW5lZCAkcGFyYW1zeydoYXNoX3BhcmVudCd9KSB7CisJCQkJJGhyZWYgLj0gZXNjX3BhdGhfaW5mbygkcGFyYW1zeydoYXNoX3BhcmVudCd9KS4gIi4uIjsKKwkJCQlkZWxldGUgJHBhcmFtc3snaGFzaF9wYXJlbnQnfTsKKwkJCX0KKworCQkJJGhyZWYgLj0gZXNjX3BhdGhfaW5mbygkcGFyYW1zeydoYXNoX2Jhc2UnfSk7CisJCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydmaWxlX25hbWUnfSAmJiAkcGFyYW1zeydmaWxlX25hbWUnfSAhfiAvXC5cLi8pIHsKKwkJCQkkaHJlZiAuPSAiOi8iLmVzY19wYXRoX2luZm8oJHBhcmFtc3snZmlsZV9uYW1lJ30pOworCQkJCWRlbGV0ZSAkcGFyYW1zeydmaWxlX25hbWUnfTsKKwkJCX0KKwkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoJ307CisJCQlkZWxldGUgJHBhcmFtc3snaGFzaF9iYXNlJ307CisJCX0gZWxzaWYgKGRlZmluZWQgJHBhcmFtc3snaGFzaCd9KSB7CisJCQkkaHJlZiAuPSBlc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2hhc2gnfSk7CisJCQlkZWxldGUgJHBhcmFtc3snaGFzaCd9OworCQl9CisKKwkJIyBJZiB0aGUgYWN0aW9uIHdhcyBhIHNuYXBzaG90LCB3ZSBjYW4gYWJzb3JiIHRoZQorCQkjIHNuYXBzaG90X2Zvcm1hdCBwYXJhbWV0ZXIgdG9vCisJCWlmICgkaXNfc25hcHNob3QpIHsKKwkJCW15ICRmbXQgPSAkcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfTsKKwkJCSMgc25hcHNob3RfZm9ybWF0IHNob3VsZCBhbHdheXMgYmUgZGVmaW5lZCB3aGVuIGhyZWYoKQorCQkJIyBpcyBjYWxsZWQsIGJ1dCBqdXN0IGluIGNhc2Ugc29tZSBjb2RlIGZvcmdldHMsIHdlCisJCQkjIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdAorCQkJJGZtdCB8fD0gJHNuYXBzaG90X2ZtdHNbMF07CisJCQkkaHJlZiAuPSAka25vd25fc25hcHNob3RfZm9ybWF0c3skZm10fXsnc3VmZml4J307CisJCQlkZWxldGUgJHBhcmFtc3snc25hcHNob3RfZm9ybWF0J307CisJCX0KKwl9CisKKwkjIG5vdyBlbmNvZGUgdGhlIHBhcmFtZXRlcnMgZXhwbGljaXRseQorCW15IEByZXN1bHQgPSAoKTsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAY2dpX3BhcmFtX21hcHBpbmc7ICRpICs9IDIpIHsKKwkJbXkgKCRuYW1lLCAkc3ltYm9sKSA9ICgkY2dpX3BhcmFtX21hcHBpbmdbJGldLCAkY2dpX3BhcmFtX21hcHBpbmdbJGkrMV0pOworCQlpZiAoZGVmaW5lZCAkcGFyYW1zeyRuYW1lfSkgeworCQkJaWYgKHJlZigkcGFyYW1zeyRuYW1lfSkgZXEgIkFSUkFZIikgeworCQkJCWZvcmVhY2ggbXkgJHBhciAoQHskcGFyYW1zeyRuYW1lfX0pIHsKKwkJCQkJcHVzaCBAcmVzdWx0LCAkc3ltYm9sIC4gIj0iIC4gZXNjX3BhcmFtKCRwYXIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcHVzaCBAcmVzdWx0LCAkc3ltYm9sIC4gIj0iIC4gZXNjX3BhcmFtKCRwYXJhbXN7JG5hbWV9KTsKKwkJCX0KKwkJfQorCX0KKwkkaHJlZiAuPSAiPyIgLiBqb2luKCc7JywgQHJlc3VsdCkgaWYgc2NhbGFyIEByZXN1bHQ7CisKKwkjIGZpbmFsIHRyYW5zZm9ybWF0aW9uOiB0cmFpbGluZyBzcGFjZXMgbXVzdCBiZSBlc2NhcGVkIChVUkktZW5jb2RlZCkKKwkkaHJlZiA9fiBzLyhccyspJC9DR0k6OmVzY2FwZSgkMSkvZTsKKworCWlmICgkcGFyYW1zey1hbmNob3J9KSB7CisJCSRocmVmIC49ICIjIi5lc2NfcGFyYW0oJHBhcmFtc3stYW5jaG9yfSk7CisJfQorCisJcmV0dXJuICRocmVmOworfQorCisKKyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIHZhbGlkYXRpb24sIHF1b3RpbmcvdW5xdW90aW5nIGFuZCBlc2NhcGluZworCitzdWIgaXNfdmFsaWRfYWN0aW9uIHsKKwlteSAkaW5wdXQgPSBzaGlmdDsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGV4aXN0cyAkYWN0aW9uc3skaW5wdXR9OworCXJldHVybiAxOworfQorCitzdWIgaXNfdmFsaWRfcHJvamVjdCB7CisJbXkgJGlucHV0ID0gc2hpZnQ7CisKKwlyZXR1cm4gdW5sZXNzIGRlZmluZWQgJGlucHV0OworCWlmICghaXNfdmFsaWRfcGF0aG5hbWUoJGlucHV0KSB8fAorCQkhKC1kICIkcHJvamVjdHJvb3QvJGlucHV0IikgfHwKKwkJIWNoZWNrX2V4cG9ydF9vaygiJHByb2plY3Ryb290LyRpbnB1dCIpIHx8CisJCSgkc3RyaWN0X2V4cG9ydCAmJiAhcHJvamVjdF9pbl9saXN0KCRpbnB1dCkpKSB7CisJCXJldHVybiB1bmRlZjsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N1YiBpc192YWxpZF9wYXRobmFtZSB7CisJbXkgJGlucHV0ID0gc2hpZnQ7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJGlucHV0OworCSMgbm8gJy4nIG9yICcuLicgYXMgZWxlbWVudHMgb2YgcGF0aCwgaS5lLiBubyAnLicgb3IgJy4uJworCSMgYXQgdGhlIGJlZ2lubmluZywgYXQgdGhlIGVuZCwgYW5kIGJldHdlZW4gc2xhc2hlcy4KKwkjIGFsc28gdGhpcyBjYXRjaGVzIGRvdWJsZWQgc2xhc2hlcworCWlmICgkaW5wdXQgPX4gbSEoXnwvKSh8XC58XC5cLikoL3wkKSEpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0KKwkjIG5vIG51bGwgY2hhcmFjdGVycworCWlmICgkaW5wdXQgPX4gbSFcMCEpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0KKwlyZXR1cm4gMTsKK30KKworc3ViIGlzX3ZhbGlkX3JlZl9mb3JtYXQgeworCW15ICRpbnB1dCA9IHNoaWZ0OworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRpbnB1dDsKKwkjIHJlc3RyaWN0aW9ucyBvbiByZWYgbmFtZSBhY2NvcmRpbmcgdG8gZ2l0LWNoZWNrLXJlZi1mb3JtYXQKKwlpZiAoJGlucHV0ID1+IG0hKC9cLnxcLlwufFtcMDAwLVwwNDBcMTc3IH5eOj8qXFtdfC8kKSEpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0KKwlyZXR1cm4gMTsKK30KKworc3ViIGlzX3ZhbGlkX3JlZm5hbWUgeworCW15ICRpbnB1dCA9IHNoaWZ0OworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRpbnB1dDsKKwkjIHRleHR1YWwgaGFzaGVzIGFyZSBPLksuCisJaWYgKCRpbnB1dCA9fiBtL14kb2lkX3JlZ2V4JC8pIHsKKwkJcmV0dXJuIDE7CisJfQorCSMgaXQgbXVzdCBiZSBjb3JyZWN0IHBhdGhuYW1lCisJaXNfdmFsaWRfcGF0aG5hbWUoJGlucHV0KSBvciByZXR1cm4gdW5kZWY7CisJIyBjaGVjayBnaXQtY2hlY2stcmVmLWZvcm1hdCByZXN0cmljdGlvbnMKKwlpc192YWxpZF9yZWZfZm9ybWF0KCRpbnB1dCkgb3IgcmV0dXJuIHVuZGVmOworCXJldHVybiAxOworfQorCisjIGRlY29kZSBzZXF1ZW5jZXMgb2Ygb2N0ZXRzIGluIHV0ZjggaW50byBQZXJsJ3MgaW50ZXJuYWwgZm9ybSwKKyMgd2hpY2ggaXMgdXRmLTggd2l0aCB1dGY4IGZsYWcgc2V0IGlmIG5lZWRlZC4gIGdpdHdlYiB3cml0ZXMgb3V0CisjIGluIHV0Zi04IHRoYW5rcyB0byAiYmlubW9kZSBTVERPVVQsICc6dXRmOCciIGF0IGJlZ2lubmluZworc3ViIHRvX3V0ZjggeworCW15ICRzdHIgPSBzaGlmdDsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJHN0cjsKKworCWlmICh1dGY4Ojppc191dGY4KCRzdHIpIHx8IHV0Zjg6OmRlY29kZSgkc3RyKSkgeworCQlyZXR1cm4gJHN0cjsKKwl9IGVsc2UgeworCQlyZXR1cm4gZGVjb2RlKCRmYWxsYmFja19lbmNvZGluZywgJHN0ciwgRW5jb2RlOjpGQl9ERUZBVUxUKTsKKwl9Cit9CisKKyMgcXVvdGUgdW5zYWZlIGNoYXJzLCBidXQga2VlcCB0aGUgc2xhc2gsIGV2ZW4gd2hlbiBpdCdzIG5vdAorIyBjb3JyZWN0LCBidXQgcXVvdGVkIHNsYXNoZXMgbG9vayB0b28gaG9ycmlibGUgaW4gYm9va21hcmtzCitzdWIgZXNjX3BhcmFtIHsKKwlteSAkc3RyID0gc2hpZnQ7CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisJJHN0ciA9fiBzLyhbXkEtWmEtejAtOVwtXy5+KClcLzpAIF0rKS9DR0k6OmVzY2FwZSgkMSkvZWc7CisJJHN0ciA9fiBzLyAvXCsvZzsKKwlyZXR1cm4gJHN0cjsKK30KKworIyB0aGUgcXVvdGluZyBydWxlcyBmb3IgcGF0aF9pbmZvIGZyYWdtZW50IGFyZSBzbGlnaHRseSBkaWZmZXJlbnQKK3N1YiBlc2NfcGF0aF9pbmZvIHsKKwlteSAkc3RyID0gc2hpZnQ7CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwkjIHBhdGhfaW5mbyBkb2Vzbid0IHRyZWF0ICcrJyBhcyBzcGFjZSAoc3BlY2lhbGx5KSwgYnV0ICc/JyBtdXN0IGJlIGVzY2FwZWQKKwkkc3RyID1+IHMvKFteQS1aYS16MC05XC1fLn4oKTtcLzs6QCY9ICtdKykvQ0dJOjplc2NhcGUoJDEpL2VnOworCisJcmV0dXJuICRzdHI7Cit9CisKKyMgcXVvdGUgdW5zYWZlIGNoYXJzIGluIHdob2xlIFVSTCwgc28gc29tZSBjaGFyYWN0ZXJzIGNhbm5vdCBiZSBxdW90ZWQKK3N1YiBlc2NfdXJsIHsKKwlteSAkc3RyID0gc2hpZnQ7CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisJJHN0ciA9fiBzLyhbXkEtWmEtejAtOVwtXy5+KCk7XC87PzpAJj0gXSspL0NHSTo6ZXNjYXBlKCQxKS9lZzsKKwkkc3RyID1+IHMvIC9cKy9nOworCXJldHVybiAkc3RyOworfQorCisjIHF1b3RlIHVuc2FmZSBjaGFyYWN0ZXJzIGluIEhUTUwgYXR0cmlidXRlcworc3ViIGVzY19hdHRyIHsKKworCSMgZm9yIFhIVE1MIGNvbmZvcm1hbmNlIGVzY2FwaW5nICciJyB0byAnJnF1b3Q7JyBpcyBub3QgZW5vdWdoCisJcmV0dXJuIGVzY19odG1sKEBfKTsKK30KKworIyByZXBsYWNlIGludmFsaWQgdXRmOCBjaGFyYWN0ZXIgd2l0aCBTVUJTVElUVVRJT04gc2VxdWVuY2UKK3N1YiBlc2NfaHRtbCB7CisJbXkgJHN0ciA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJHN0cjsKKworCSRzdHIgPSB0b191dGY4KCRzdHIpOworCSRzdHIgPSAkY2dpLT5lc2NhcGVIVE1MKCRzdHIpOworCWlmICgkb3B0c3snLW5ic3AnfSkgeworCQkkc3RyID1+IHMvIC8mbmJzcDsvZzsKKwl9CisJJHN0ciA9fiBzfChbWzpjbnRybDpdXSl8KCgkMSBuZSAiXHQiKSA/IHF1b3RfY2VjKCQxKSA6ICQxKXxlZzsKKwlyZXR1cm4gJHN0cjsKK30KKworIyBxdW90ZSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIGVzY2FwZSBmaWxlbmFtZSB0byBIVE1MCitzdWIgZXNjX3BhdGggeworCW15ICRzdHIgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwkkc3RyID0gdG9fdXRmOCgkc3RyKTsKKwkkc3RyID0gJGNnaS0+ZXNjYXBlSFRNTCgkc3RyKTsKKwlpZiAoJG9wdHN7Jy1uYnNwJ30pIHsKKwkJJHN0ciA9fiBzLyAvJm5ic3A7L2c7CisJfQorCSRzdHIgPX4gc3woW1s6Y250cmw6XV0pfHF1b3RfY2VjKCQxKXxlZzsKKwlyZXR1cm4gJHN0cjsKK30KKworIyBTYW5pdGl6ZSBmb3IgdXNlIGluIFhIVE1MICsgYXBwbGljYXRpb24veG1sK3hodG1sICh2YWxpZCBYTUwgMS4wKQorc3ViIHNhbml0aXplIHsKKwlteSAkc3RyID0gc2hpZnQ7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJHN0cjsKKworCSRzdHIgPSB0b191dGY4KCRzdHIpOworCSRzdHIgPX4gc3woW1s6Y250cmw6XV0pfChpbmRleCgiXHRcblxyIiwgJDEpICE9IC0xID8gJDEgOiBxdW90X2NlYygkMSkpfGVnOworCXJldHVybiAkc3RyOworfQorCisjIE1ha2UgY29udHJvbCBjaGFyYWN0ZXJzICJwcmludGFibGUiLCB1c2luZyBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzIChDRUMpCitzdWIgcXVvdF9jZWMgeworCW15ICRjbnRybCA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisJbXkgJWVzID0gKCAjIGNoYXJhY3RlciBlc2NhcGUgY29kZXMsIGFrYSBlc2NhcGUgc2VxdWVuY2VzCisJCSJcdCIgPT4gJ1x0JywgICAjIHRhYiAgICAgICAgICAgICAoSFQpCisJCSJcbiIgPT4gJ1xuJywgICAjIGxpbmUgZmVlZCAgICAgICAoTEYpCisJCSJcciIgPT4gJ1xyJywgICAjIGNhcnJpYWdlIHJldHVybiAoQ1IpCisJCSJcZiIgPT4gJ1xmJywgICAjIGZvcm0gZmVlZCAgICAgICAoRkYpCisJCSJcYiIgPT4gJ1xiJywgICAjIGJhY2tzcGFjZSAgICAgICAoQlMpCisJCSJcYSIgPT4gJ1xhJywgICAjIGFsYXJtIChiZWxsKSAgICAoQkVMKQorCQkiXGUiID0+ICdcZScsICAgIyBlc2NhcGUgICAgICAgICAgKEVTQykKKwkJIlwwMTMiID0+ICdcdicsICMgdmVydGljYWwgdGFiICAgIChWVCkKKwkJIlwwMDAiID0+ICdcMCcsICMgbnVsIGNoYXJhY3RlciAgIChOVUwpCisJKTsKKwlteSAkY2hyID0gKCAoZXhpc3RzICRlc3skY250cmx9KQorCQkgICAgPyAkZXN7JGNudHJsfQorCQkgICAgOiBzcHJpbnRmKCdcJTJ4Jywgb3JkKCRjbnRybCkpICk7CisJaWYgKCRvcHRzey1ub2h0bWx9KSB7CisJCXJldHVybiAkY2hyOworCX0gZWxzZSB7CisJCXJldHVybiAiPHNwYW4gY2xhc3M9XCJjbnRybFwiPiRjaHI8L3NwYW4+IjsKKwl9Cit9CisKKyMgQWx0ZXJuYXRpdmVseSB1c2UgdW5pY29kZSBjb250cm9sIHBpY3R1cmVzIGNvZGVwb2ludHMsCisjIFVuaWNvZGUgInByaW50YWJsZSByZXByZXNlbnRhdGlvbiIgKFBSKQorc3ViIHF1b3RfdXByIHsKKwlteSAkY250cmwgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJbXkgJGNociA9IHNwcmludGYoJyYjJTA0ZDsnLCAweDI0MDArb3JkKCRjbnRybCkpOworCWlmICgkb3B0c3stbm9odG1sfSkgeworCQlyZXR1cm4gJGNocjsKKwl9IGVsc2UgeworCQlyZXR1cm4gIjxzcGFuIGNsYXNzPVwiY250cmxcIj4kY2hyPC9zcGFuPiI7CisJfQorfQorCisjIGdpdCBtYXkgcmV0dXJuIHF1b3RlZCBhbmQgZXNjYXBlZCBmaWxlbmFtZXMKK3N1YiB1bnF1b3RlIHsKKwlteSAkc3RyID0gc2hpZnQ7CisKKwlzdWIgdW5xIHsKKwkJbXkgJHNlcSA9IHNoaWZ0OworCQlteSAlZXMgPSAoICMgY2hhcmFjdGVyIGVzY2FwZSBjb2RlcywgYWthIGVzY2FwZSBzZXF1ZW5jZXMKKwkJCSd0JyA9PiAiXHQiLCAgICMgdGFiICAgICAgICAgICAgKEhULCBUQUIpCisJCQknbicgPT4gIlxuIiwgICAjIG5ld2xpbmUgICAgICAgIChOTCkKKwkJCSdyJyA9PiAiXHIiLCAgICMgcmV0dXJuICAgICAgICAgKENSKQorCQkJJ2YnID0+ICJcZiIsICAgIyBmb3JtIGZlZWQgICAgICAoRkYpCisJCQknYicgPT4gIlxiIiwgICAjIGJhY2tzcGFjZSAgICAgIChCUykKKwkJCSdhJyA9PiAiXGEiLCAgICMgYWxhcm0gKGJlbGwpICAgKEJFTCkKKwkJCSdlJyA9PiAiXGUiLCAgICMgZXNjYXBlICAgICAgICAgKEVTQykKKwkJCSd2JyA9PiAiXDAxMyIsICMgdmVydGljYWwgdGFiICAgKFZUKQorCQkpOworCisJCWlmICgkc2VxID1+IG0vXlswLTddezEsM30kLykgeworCQkJIyBvY3RhbCBjaGFyIHNlcXVlbmNlCisJCQlyZXR1cm4gY2hyKG9jdCgkc2VxKSk7CisJCX0gZWxzaWYgKGV4aXN0cyAkZXN7JHNlcX0pIHsKKwkJCSMgQyBlc2NhcGUgc2VxdWVuY2UsIGFrYSBjaGFyYWN0ZXIgZXNjYXBlIGNvZGUKKwkJCXJldHVybiAkZXN7JHNlcX07CisJCX0KKwkJIyBxdW90ZWQgb3JkaW5hcnkgY2hhcmFjdGVyCisJCXJldHVybiAkc2VxOworCX0KKworCWlmICgkc3RyID1+IG0vXiIoLiopIiQvKSB7CisJCSMgbmVlZHMgdW5xdW90aW5nCisJCSRzdHIgPSAkMTsKKwkJJHN0ciA9fiBzL1xcKFteMC03XXxbMC03XXsxLDN9KS91bnEoJDEpL2VnOworCX0KKwlyZXR1cm4gJHN0cjsKK30KKworIyBlc2NhcGUgdGFicyAoY29udmVydCB0YWJzIHRvIHNwYWNlcykKK3N1YiB1bnRhYmlmeSB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKworCXdoaWxlICgobXkgJHBvcyA9IGluZGV4KCRsaW5lLCAiXHQiKSkgIT0gLTEpIHsKKwkJaWYgKG15ICRjb3VudCA9ICg4IC0gKCRwb3MgJSA4KSkpIHsKKwkJCW15ICRzcGFjZXMgPSAnICcgeCAkY291bnQ7CisJCQkkbGluZSA9fiBzL1x0LyRzcGFjZXMvOworCQl9CisJfQorCisJcmV0dXJuICRsaW5lOworfQorCitzdWIgcHJvamVjdF9pbl9saXN0IHsKKwlteSAkcHJvamVjdCA9IHNoaWZ0OworCW15IEBsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCk7CisJcmV0dXJuIEBsaXN0ICYmIHNjYWxhcihncmVwIHsgJF8tPnsncGF0aCd9IGVxICRwcm9qZWN0IH0gQGxpc3QpOworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBIVE1MIGF3YXJlIHN0cmluZyBtYW5pcHVsYXRpb24KKworIyBUcnkgdG8gY2hvcCBnaXZlbiBzdHJpbmcgb24gYSB3b3JkIGJvdW5kYXJ5IGJldHdlZW4gcG9zaXRpb24KKyMgJGxlbiBhbmQgJGxlbiskYWRkX2xlbi4gSWYgdGhlcmUgaXMgbm8gd29yZCBib3VuZGFyeSB0aGVyZSwKKyMgY2hvcCBhdCAkbGVuKyRhZGRfbGVuLiBEbyBub3QgY2hvcCBpZiBjaG9wcGVkIHBhcnQgcGx1cyBlbGxpcHNpcworIyAobWFya2luZyBjaG9wcGVkIHBhcnQpIHdvdWxkIGJlIGxvbmdlciB0aGFuIGdpdmVuIHN0cmluZy4KK3N1YiBjaG9wX3N0ciB7CisJbXkgJHN0ciA9IHNoaWZ0OworCW15ICRsZW4gPSBzaGlmdDsKKwlteSAkYWRkX2xlbiA9IHNoaWZ0IHx8IDEwOworCW15ICR3aGVyZSA9IHNoaWZ0IHx8ICdyaWdodCc7ICMgJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnCisKKwkjIE1ha2Ugc3VyZSBwZXJsIGtub3dzIGl0IGlzIHV0ZjggZW5jb2RlZCBzbyB3ZSBkb24ndAorCSMgY3V0IGluIHRoZSBtaWRkbGUgb2YgYSB1dGY4IG11bHRpYnl0ZSBjaGFyLgorCSRzdHIgPSB0b191dGY4KCRzdHIpOworCisJIyBhbGxvdyBvbmx5ICRsZW4gY2hhcnMsIGJ1dCBkb24ndCBjdXQgYSB3b3JkIGlmIGl0IHdvdWxkIGZpdCBpbiAkYWRkX2xlbgorCSMgaWYgaXQgZG9lc24ndCBmaXQsIGN1dCBpdCBpZiBpdCdzIHN0aWxsIGxvbmdlciB0aGFuIHRoZSBkb3RzIHdlIHdvdWxkIGFkZAorCSMgcmVtb3ZlIGNob3BwZWQgY2hhcmFjdGVyIGVudGl0aWVzIGVudGlyZWx5CisKKwkjIHdoZW4gY2hvcHBpbmcgaW4gdGhlIG1pZGRsZSwgZGlzdHJpYnV0ZSAkbGVuIGludG8gbGVmdCBhbmQgcmlnaHQgcGFydAorCSMgcmV0dXJuIGVhcmx5IGlmIGNob3BwaW5nIHdvdWxkbid0IG1ha2Ugc3RyaW5nIHNob3J0ZXIKKwlpZiAoJHdoZXJlIGVxICdjZW50ZXInKSB7CisJCXJldHVybiAkc3RyIGlmICgkbGVuICsgNSA+PSBsZW5ndGgoJHN0cikpOyAjIGZpbGxlciBpcyBsZW5ndGggNQorCQkkbGVuID0gaW50KCRsZW4vMik7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRzdHIgaWYgKCRsZW4gKyA0ID49IGxlbmd0aCgkc3RyKSk7ICMgZmlsbGVyIGlzIGxlbmd0aCA0CisJfQorCisJIyByZWdleHBzOiBlbmRpbmcgYW5kIGJlZ2lubmluZyB3aXRoIHdvcmQgcGFydCB1cCB0byAkYWRkX2xlbgorCW15ICRlbmRyZSA9IHFyLy57JGxlbn1cd3swLCRhZGRfbGVufS87CisJbXkgJGJlZ3JlID0gcXIvXHd7MCwkYWRkX2xlbn0ueyRsZW59LzsKKworCWlmICgkd2hlcmUgZXEgJ2xlZnQnKSB7CisJCSRzdHIgPX4gbS9eKC4qPykoJGJlZ3JlKSQvOworCQlteSAoJGxlYWQsICRib2R5KSA9ICgkMSwgJDIpOworCQlpZiAobGVuZ3RoKCRsZWFkKSA+IDQpIHsKKwkJCSRsZWFkID0gIiAuLi4iOworCQl9CisJCXJldHVybiAiJGxlYWQkYm9keSI7CisKKwl9IGVsc2lmICgkd2hlcmUgZXEgJ2NlbnRlcicpIHsKKwkJJHN0ciA9fiBtL14oJGVuZHJlKSguKikkLzsKKwkJbXkgKCRsZWZ0LCAkc3RyKSAgPSAoJDEsICQyKTsKKwkJJHN0ciA9fiBtL14oLio/KSgkYmVncmUpJC87CisJCW15ICgkbWlkLCAkcmlnaHQpID0gKCQxLCAkMik7CisJCWlmIChsZW5ndGgoJG1pZCkgPiA1KSB7CisJCQkkbWlkID0gIiAuLi4gIjsKKwkJfQorCQlyZXR1cm4gIiRsZWZ0JG1pZCRyaWdodCI7CisKKwl9IGVsc2UgeworCQkkc3RyID1+IG0vXigkZW5kcmUpKC4qKSQvOworCQlteSAkYm9keSA9ICQxOworCQlteSAkdGFpbCA9ICQyOworCQlpZiAobGVuZ3RoKCR0YWlsKSA+IDQpIHsKKwkJCSR0YWlsID0gIi4uLiAiOworCQl9CisJCXJldHVybiAiJGJvZHkkdGFpbCI7CisJfQorfQorCisjIHRha2VzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBjaG9wX3N0ciwgYnV0IGFsc28gd3JhcHMgYSA8c3Bhbj4gYXJvdW5kIHRoZQorIyByZXN1bHQgd2l0aCBhIHRpdGxlIGF0dHJpYnV0ZSBpZiBpdCBkb2VzIGdldCBjaG9wcGVkLiBBZGRpdGlvbmFsbHksIHRoZQorIyBzdHJpbmcgaXMgSFRNTC1lc2NhcGVkLgorc3ViIGNob3BfYW5kX2VzY2FwZV9zdHIgeworCW15ICgkc3RyKSA9IEBfOworCisJbXkgJGNob3BwZWQgPSBjaG9wX3N0cihAXyk7CisJJHN0ciA9IHRvX3V0ZjgoJHN0cik7CisJaWYgKCRjaG9wcGVkIGVxICRzdHIpIHsKKwkJcmV0dXJuIGVzY19odG1sKCRjaG9wcGVkKTsKKwl9IGVsc2UgeworCQkkc3RyID1+IHMvW1s6Y250cmw6XV0vPy9nOworCQlyZXR1cm4gJGNnaS0+c3Bhbih7LXRpdGxlPT4kc3RyfSwgZXNjX2h0bWwoJGNob3BwZWQpKTsKKwl9Cit9CisKKyMgSGlnaGxpZ2h0IHNlbGVjdGVkIGZyYWdtZW50cyBvZiBzdHJpbmcsIHVzaW5nIGdpdmVuIENTUyBjbGFzcywKKyMgYW5kIGVzY2FwZSBIVE1MLiAgSXQgaXMgYXNzdW1lZCB0aGF0IGZyYWdtZW50cyBkbyBub3Qgb3ZlcmxhcC4KKyMgUmVnaW9ucyBhcmUgcGFzc2VkIGFzIGxpc3Qgb2YgcGFpcnMgKGFycmF5IHJlZmVyZW5jZXMpLgorIworIyBFeGFtcGxlOiBlc2NfaHRtbF9obF9yZWdpb25zKCJmb29iYXIiLCAibWFyayIsIFsgMCwgMyBdKSByZXR1cm5zCisjICc8c3BhbiBjbGFzcz0ibWFyayI+Zm9vPC9zcGFuPmJhcicKK3N1YiBlc2NfaHRtbF9obF9yZWdpb25zIHsKKwlteSAoJHN0ciwgJGNzc19jbGFzcywgQHNlbCkgPSBAXzsKKwlteSAlb3B0cyA9IGdyZXAgeyByZWYoJF8pIG5lICdBUlJBWScgfSBAc2VsOworCUBzZWwgICAgID0gZ3JlcCB7IHJlZigkXykgZXEgJ0FSUkFZJyB9IEBzZWw7CisJcmV0dXJuIGVzY19odG1sKCRzdHIsICVvcHRzKSB1bmxlc3MgQHNlbDsKKworCW15ICRvdXQgPSAnJzsKKwlteSAkcG9zID0gMDsKKworCWZvciBteSAkcyAoQHNlbCkgeworCQlteSAoJGJlZ2luLCAkZW5kKSA9IEAkczsKKworCQkjIERvbid0IGNyZWF0ZSBlbXB0eSA8c3Bhbj4gZWxlbWVudHMuCisJCW5leHQgaWYgJGVuZCA8PSAkYmVnaW47CisKKwkJbXkgJGVzY2FwZWQgPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJGJlZ2luLCAkZW5kIC0gJGJlZ2luKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAlb3B0cyk7CisKKwkJJG91dCAuPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJHBvcywgJGJlZ2luIC0gJHBvcyksICVvcHRzKQorCQkJaWYgKCRiZWdpbiAtICRwb3MgPiAwKTsKKwkJJG91dCAuPSAkY2dpLT5zcGFuKHstY2xhc3MgPT4gJGNzc19jbGFzc30sICRlc2NhcGVkKTsKKworCQkkcG9zID0gJGVuZDsKKwl9CisJJG91dCAuPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJHBvcyksICVvcHRzKQorCQlpZiAoJHBvcyA8IGxlbmd0aCgkc3RyKSk7CisKKwlyZXR1cm4gJG91dDsKK30KKworIyByZXR1cm4gcG9zaXRpb25zIG9mIGJlZ2lubmluZyBhbmQgZW5kIG9mIGVhY2ggbWF0Y2gKK3N1YiBtYXRjaHBvc19saXN0IHsKKwlteSAoJHN0ciwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIChkZWZpbmVkICRzdHIgJiYgZGVmaW5lZCAkcmVnZXhwKTsKKworCW15IEBtYXRjaGVzOworCXdoaWxlICgkc3RyID1+IC8kcmVnZXhwL2cpIHsKKwkJcHVzaCBAbWF0Y2hlcywgWyQtWzBdLCAkK1swXV07CisJfQorCXJldHVybiBAbWF0Y2hlczsKK30KKworIyBoaWdobGlnaHQgbWF0Y2ggKGlmIGFueSksIGFuZCBlc2NhcGUgSFRNTAorc3ViIGVzY19odG1sX21hdGNoX2hsIHsKKwlteSAoJHN0ciwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gZXNjX2h0bWwoJHN0cikgdW5sZXNzIGRlZmluZWQgJHJlZ2V4cDsKKworCW15IEBtYXRjaGVzID0gbWF0Y2hwb3NfbGlzdCgkc3RyLCAkcmVnZXhwKTsKKwlyZXR1cm4gZXNjX2h0bWwoJHN0cikgdW5sZXNzIEBtYXRjaGVzOworCisJcmV0dXJuIGVzY19odG1sX2hsX3JlZ2lvbnMoJHN0ciwgJ21hdGNoJywgQG1hdGNoZXMpOworfQorCisKKyMgaGlnaGxpZ2h0IG1hdGNoIChpZiBhbnkpIG9mIHNob3J0ZW5lZCBzdHJpbmcsIGFuZCBlc2NhcGUgSFRNTAorc3ViIGVzY19odG1sX21hdGNoX2hsX2Nob3BwZWQgeworCW15ICgkc3RyLCAkY2hvcHBlZCwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gZXNjX2h0bWxfbWF0Y2hfaGwoJHN0ciwgJHJlZ2V4cCkgdW5sZXNzIGRlZmluZWQgJGNob3BwZWQ7CisKKwlteSBAbWF0Y2hlcyA9IG1hdGNocG9zX2xpc3QoJHN0ciwgJHJlZ2V4cCk7CisJcmV0dXJuIGVzY19odG1sKCRjaG9wcGVkKSB1bmxlc3MgQG1hdGNoZXM7CisKKwkjIGZpbHRlciBtYXRjaGVzIHNvIHRoYXQgd2UgbWFyayBjaG9wcGVkIHN0cmluZworCW15ICR0YWlsID0gIi4uLiAiOyAjIHNlZSBjaG9wX3N0cgorCXVubGVzcyAoJGNob3BwZWQgPX4gcy9cUSR0YWlsXEUkLy8pIHsKKwkJJHRhaWwgPSAnJzsKKwl9CisJbXkgJGNob3BfbGVuID0gbGVuZ3RoKCRjaG9wcGVkKTsKKwlteSAkdGFpbF9sZW4gPSBsZW5ndGgoJHRhaWwpOworCW15IEBmaWx0ZXJlZDsKKworCWZvciBteSAkbSAoQG1hdGNoZXMpIHsKKwkJaWYgKCRtLT5bMF0gPiAkY2hvcF9sZW4pIHsKKwkJCXB1c2ggQGZpbHRlcmVkLCBbICRjaG9wX2xlbiwgJGNob3BfbGVuICsgJHRhaWxfbGVuIF0gaWYgKCR0YWlsX2xlbiA+IDApOworCQkJbGFzdDsKKwkJfSBlbHNpZiAoJG0tPlsxXSA+ICRjaG9wX2xlbikgeworCQkJcHVzaCBAZmlsdGVyZWQsIFsgJG0tPlswXSwgJGNob3BfbGVuICsgJHRhaWxfbGVuIF07CisJCQlsYXN0OworCQl9CisJCXB1c2ggQGZpbHRlcmVkLCAkbTsKKwl9CisKKwlyZXR1cm4gZXNjX2h0bWxfaGxfcmVnaW9ucygkY2hvcHBlZCAuICR0YWlsLCAnbWF0Y2gnLCBAZmlsdGVyZWQpOworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBmdW5jdGlvbnMgcmV0dXJuaW5nIHNob3J0IHN0cmluZ3MKKworIyBDU1MgY2xhc3MgZm9yIGdpdmVuIGFnZSB2YWx1ZSAoaW4gc2Vjb25kcykKK3N1YiBhZ2VfY2xhc3MgeworCW15ICRhZ2UgPSBzaGlmdDsKKworCWlmICghZGVmaW5lZCAkYWdlKSB7CisJCXJldHVybiAibm9hZ2UiOworCX0gZWxzaWYgKCRhZ2UgPCA2MCo2MCoyKSB7CisJCXJldHVybiAiYWdlMCI7CisJfSBlbHNpZiAoJGFnZSA8IDYwKjYwKjI0KjIpIHsKKwkJcmV0dXJuICJhZ2UxIjsKKwl9IGVsc2UgeworCQlyZXR1cm4gImFnZTIiOworCX0KK30KKworIyBjb252ZXJ0IGFnZSBpbiBzZWNvbmRzIHRvICJubiB1bml0cyBhZ28iIHN0cmluZworc3ViIGFnZV9zdHJpbmcgeworCW15ICRhZ2UgPSBzaGlmdDsKKwlteSAkYWdlX3N0cjsKKworCWlmICgkYWdlID4gNjAqNjAqMjQqMzY1KjIpIHsKKwkJJGFnZV9zdHIgPSAoaW50ICRhZ2UvNjAvNjAvMjQvMzY1KTsKKwkJJGFnZV9zdHIgLj0gIiB5ZWFycyBhZ28iOworCX0gZWxzaWYgKCRhZ2UgPiA2MCo2MCoyNCooMzY1LzEyKSoyKSB7CisJCSRhZ2Vfc3RyID0gaW50ICRhZ2UvNjAvNjAvMjQvKDM2NS8xMik7CisJCSRhZ2Vfc3RyIC49ICIgbW9udGhzIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDYwKjYwKjI0KjcqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwLzI0Lzc7CisJCSRhZ2Vfc3RyIC49ICIgd2Vla3MgYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gNjAqNjAqMjQqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwLzI0OworCQkkYWdlX3N0ciAuPSAiIGRheXMgYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gNjAqNjAqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwOworCQkkYWdlX3N0ciAuPSAiIGhvdXJzIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDYwKjIpIHsKKwkJJGFnZV9zdHIgPSBpbnQgJGFnZS82MDsKKwkJJGFnZV9zdHIgLj0gIiBtaW4gYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlOworCQkkYWdlX3N0ciAuPSAiIHNlYyBhZ28iOworCX0gZWxzZSB7CisJCSRhZ2Vfc3RyIC49ICIgcmlnaHQgbm93IjsKKwl9CisJcmV0dXJuICRhZ2Vfc3RyOworfQorCit1c2UgY29uc3RhbnQgeworCVNfSUZJTlZBTElEID0+IDAwMzAwMDAsCisJU19JRkdJVExJTksgPT4gMDE2MDAwMCwKK307CisKKyMgc3VibW9kdWxlL3N1YnByb2plY3QsIGEgY29tbWl0IG9iamVjdCByZWZlcmVuY2UKK3N1YiBTX0lTR0lUTElOSyB7CisJbXkgJG1vZGUgPSBzaGlmdDsKKworCXJldHVybiAoKCRtb2RlICYgU19JRk1UKSA9PSBTX0lGR0lUTElOSykKK30KKworIyBjb252ZXJ0IGZpbGUgbW9kZSBpbiBvY3RhbCB0byBzeW1ib2xpYyBmaWxlIG1vZGUgc3RyaW5nCitzdWIgbW9kZV9zdHIgeworCW15ICRtb2RlID0gb2N0IHNoaWZ0OworCisJaWYgKFNfSVNHSVRMSU5LKCRtb2RlKSkgeworCQlyZXR1cm4gJ20tLS0tLS0tLS0nOworCX0gZWxzaWYgKFNfSVNESVIoJG1vZGUgJiBTX0lGTVQpKSB7CisJCXJldHVybiAnZHJ3eHIteHIteCc7CisJfSBlbHNpZiAoU19JU0xOSygkbW9kZSkpIHsKKwkJcmV0dXJuICdscnd4cnd4cnd4JzsKKwl9IGVsc2lmIChTX0lTUkVHKCRtb2RlKSkgeworCQkjIGdpdCBjYXJlcyBvbmx5IGFib3V0IHRoZSBleGVjdXRhYmxlIGJpdAorCQlpZiAoJG1vZGUgJiBTX0lYVVNSKSB7CisJCQlyZXR1cm4gJy1yd3hyLXhyLXgnOworCQl9IGVsc2UgeworCQkJcmV0dXJuICctcnctci0tci0tJzsKKwkJfTsKKwl9IGVsc2UgeworCQlyZXR1cm4gJy0tLS0tLS0tLS0nOworCX0KK30KKworIyBjb252ZXJ0IGZpbGUgbW9kZSBpbiBvY3RhbCB0byBmaWxlIHR5cGUgc3RyaW5nCitzdWIgZmlsZV90eXBlIHsKKwlteSAkbW9kZSA9IHNoaWZ0OworCisJaWYgKCRtb2RlICF+IG0vXlswLTddKyQvKSB7CisJCXJldHVybiAkbW9kZTsKKwl9IGVsc2UgeworCQkkbW9kZSA9IG9jdCAkbW9kZTsKKwl9CisKKwlpZiAoU19JU0dJVExJTksoJG1vZGUpKSB7CisJCXJldHVybiAic3VibW9kdWxlIjsKKwl9IGVsc2lmIChTX0lTRElSKCRtb2RlICYgU19JRk1UKSkgeworCQlyZXR1cm4gImRpcmVjdG9yeSI7CisJfSBlbHNpZiAoU19JU0xOSygkbW9kZSkpIHsKKwkJcmV0dXJuICJzeW1saW5rIjsKKwl9IGVsc2lmIChTX0lTUkVHKCRtb2RlKSkgeworCQlyZXR1cm4gImZpbGUiOworCX0gZWxzZSB7CisJCXJldHVybiAidW5rbm93biI7CisJfQorfQorCisjIGNvbnZlcnQgZmlsZSBtb2RlIGluIG9jdGFsIHRvIGZpbGUgdHlwZSBkZXNjcmlwdGlvbiBzdHJpbmcKK3N1YiBmaWxlX3R5cGVfbG9uZyB7CisJbXkgJG1vZGUgPSBzaGlmdDsKKworCWlmICgkbW9kZSAhfiBtL15bMC03XSskLykgeworCQlyZXR1cm4gJG1vZGU7CisJfSBlbHNlIHsKKwkJJG1vZGUgPSBvY3QgJG1vZGU7CisJfQorCisJaWYgKFNfSVNHSVRMSU5LKCRtb2RlKSkgeworCQlyZXR1cm4gInN1Ym1vZHVsZSI7CisJfSBlbHNpZiAoU19JU0RJUigkbW9kZSAmIFNfSUZNVCkpIHsKKwkJcmV0dXJuICJkaXJlY3RvcnkiOworCX0gZWxzaWYgKFNfSVNMTksoJG1vZGUpKSB7CisJCXJldHVybiAic3ltbGluayI7CisJfSBlbHNpZiAoU19JU1JFRygkbW9kZSkpIHsKKwkJaWYgKCRtb2RlICYgU19JWFVTUikgeworCQkJcmV0dXJuICJleGVjdXRhYmxlIjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAiZmlsZSI7CisJCX07CisJfSBlbHNlIHsKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgZnVuY3Rpb25zIHJldHVybmluZyBzaG9ydCBIVE1MIGZyYWdtZW50cywgb3IgdHJhbnNmb3JtaW5nIEhUTUwgZnJhZ21lbnRzCisjIyB3aGljaCBkb24ndCBiZWxvbmcgdG8gb3RoZXIgc2VjdGlvbnMKKworIyBmb3JtYXQgbGluZSBvZiBjb21taXQgbWVzc2FnZS4KK3N1YiBmb3JtYXRfbG9nX2xpbmVfaHRtbCB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKworCSMgUG90ZW50aWFsbHkgYWJicmV2aWF0ZWQgT0lELgorCW15ICRyZWdleCA9IG9pZF9ubGVuX3JlZ2V4KCI3LDY0Iik7CisKKwkkbGluZSA9IGVzY19odG1sKCRsaW5lLCAtbmJzcD0+MSk7CisJJGxpbmUgPX4gc3sKKyAgICAgICAgXGIKKyAgICAgICAgKAorICAgICAgICAgICAgIyBUaGUgb3V0cHV0IG9mICJnaXQgZGVzY3JpYmUiLCBlLmcuIHYyLjEwLjAtMjk3LWdmNjcyN2IwCisgICAgICAgICAgICAjIG9yIGhhZG9vcC0yMDE2MDkyMS0xMTM0NDEtMjAtZzA5NGZiN2QKKyAgICAgICAgICAgICg/PCEtKSAjIHNlZSBzdHJidWZfY2hlY2tfdGFnX3JlZigpLiBUYWdzIGNhbid0IHN0YXJ0IHdpdGggLQorICAgICAgICAgICAgW0EtWmEtejAtOS4tXSsKKyAgICAgICAgICAgICg/IVwuKSAjIHJlZnMgY2FuJ3QgZW5kIHdpdGggIi4iLCBzZWUgY2hlY2tfcmVmbmFtZV9mb3JtYXQoKQorICAgICAgICAgICAgLWckcmVnZXgKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgICMgSnVzdCBhIG5vcm1hbCBsb29raW5nIEdpdCBTSEExCisJICAgICRyZWdleAorICAgICAgICApCisgICAgICAgIFxiCisgICAgfXsKKwkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJvYmplY3QiLCBoYXNoPT4kMSksCisJCQkJCS1jbGFzcyA9PiAidGV4dCJ9LCAkMSk7CisJfWVneDsKKworCXJldHVybiAkbGluZTsKK30KKworIyBmb3JtYXQgbWFya2VyIG9mIHJlZnMgcG9pbnRpbmcgdG8gZ2l2ZW4gb2JqZWN0CisKKyMgdGhlIGRlc3RpbmF0aW9uIGFjdGlvbiBpcyBjaG9zZW4gYmFzZWQgb24gb2JqZWN0IHR5cGUgYW5kIGN1cnJlbnQgY29udGV4dDoKKyMgLSBmb3IgYW5ub3RhdGVkIHRhZ3MsIHdlIGNob29zZSB0aGUgdGFnIHZpZXcgdW5sZXNzIGl0J3MgdGhlIGN1cnJlbnQgdmlldworIyAgIGFscmVhZHksIGluIHdoaWNoIGNhc2Ugd2UgZ28gdG8gc2hvcnRsb2cgdmlldworIyAtIGZvciBvdGhlciByZWZzLCB3ZSBrZWVwIHRoZSBjdXJyZW50IHZpZXcgaWYgd2UncmUgaW4gaGlzdG9yeSwgc2hvcnRsb2cgb3IKKyMgICBsb2cgdmlldywgYW5kIHNlbGVjdCBzaG9ydGxvZyBvdGhlcndpc2UKK3N1YiBmb3JtYXRfcmVmX21hcmtlciB7CisJbXkgKCRyZWZzLCAkaWQpID0gQF87CisJbXkgJG1hcmtlcnMgPSAnJzsKKworCWlmIChkZWZpbmVkICRyZWZzLT57JGlkfSkgeworCQlmb3JlYWNoIG15ICRyZWYgKEB7JHJlZnMtPnskaWR9fSkgeworCQkJIyB0aGlzIGNvZGUgZXhwbG9pdHMgdGhlIGZhY3QgdGhhdCBub24tbGlnaHR3ZWlnaHQgdGFncyBhcmUgdGhlCisJCQkjIG9ubHkgaW5kaXJlY3Qgb2JqZWN0cywgYW5kIHRoYXQgdGhleSBhcmUgdGhlIG9ubHkgb2JqZWN0cyBmb3Igd2hpY2gKKwkJCSMgd2Ugd2FudCB0byB1c2UgdGFnIGluc3RlYWQgb2Ygc2hvcnRsb2cgYXMgYWN0aW9uCisJCQlteSAoJHR5cGUsICRuYW1lKSA9IHF3KCk7CisJCQlteSAkaW5kaXJlY3QgPSAoJHJlZiA9fiBzL1xeXHtcfSQvLyk7CisJCQkjIGUuZy4gdGFncy92Mi42LjExIG9yIGhlYWRzL25leHQKKwkJCWlmICgkcmVmID1+IG0hXiguKj8pcz8vKC4qKSQhKSB7CisJCQkJJHR5cGUgPSAkMTsKKwkJCQkkbmFtZSA9ICQyOworCQkJfSBlbHNlIHsKKwkJCQkkdHlwZSA9ICJyZWYiOworCQkJCSRuYW1lID0gJHJlZjsKKwkJCX0KKworCQkJbXkgJGNsYXNzID0gJHR5cGU7CisJCQkkY2xhc3MgLj0gIiBpbmRpcmVjdCIgaWYgJGluZGlyZWN0OworCisJCQlteSAkZGVzdF9hY3Rpb24gPSAic2hvcnRsb2ciOworCisJCQlpZiAoJGluZGlyZWN0KSB7CisJCQkJJGRlc3RfYWN0aW9uID0gInRhZyIgdW5sZXNzICRhY3Rpb24gZXEgInRhZyI7CisJCQl9IGVsc2lmICgkYWN0aW9uID1+IC9eKGhpc3Rvcnl8KHNob3J0KT9sb2cpJC8pIHsKKwkJCQkkZGVzdF9hY3Rpb24gPSAkYWN0aW9uOworCQkJfQorCisJCQlteSAkZGVzdCA9ICIiOworCQkJJGRlc3QgLj0gInJlZnMvIiB1bmxlc3MgJHJlZiA9fiBtIV5yZWZzLyE7CisJCQkkZGVzdCAuPSAkcmVmOworCisJCQlteSAkbGluayA9ICRjZ2ktPmEoeworCQkJCS1ocmVmID0+IGhyZWYoCisJCQkJCWFjdGlvbj0+JGRlc3RfYWN0aW9uLAorCQkJCQloYXNoPT4kZGVzdAorCQkJCSl9LCBlc2NfaHRtbCgkbmFtZSkpOworCisJCQkkbWFya2VycyAuPSAiIDxzcGFuIGNsYXNzPVwiIi5lc2NfYXR0cigkY2xhc3MpLiJcIiB0aXRsZT1cIiIuZXNjX2F0dHIoJHJlZikuIlwiPiIgLgorCQkJCSRsaW5rIC4gIjwvc3Bhbj4iOworCQl9CisJfQorCisJaWYgKCRtYXJrZXJzKSB7CisJCXJldHVybiAnIDxzcGFuIGNsYXNzPSJyZWZzIj4nLiAkbWFya2VycyAuICc8L3NwYW4+JzsKKwl9IGVsc2UgeworCQlyZXR1cm4gIiI7CisJfQorfQorCisjIGZvcm1hdCwgcGVyaGFwcyBzaG9ydGVuZWQgYW5kIHdpdGggbWFya2VycywgdGl0bGUgbGluZQorc3ViIGZvcm1hdF9zdWJqZWN0X2h0bWwgeworCW15ICgkbG9uZywgJHNob3J0LCAkaHJlZiwgJGV4dHJhKSA9IEBfOworCSRleHRyYSA9ICcnIHVubGVzcyBkZWZpbmVkKCRleHRyYSk7CisKKwlpZiAobGVuZ3RoKCRzaG9ydCkgPCBsZW5ndGgoJGxvbmcpKSB7CisJCSRsb25nID1+IHMvW1s6Y250cmw6XV0vPy9nOworCQlyZXR1cm4gJGNnaS0+YSh7LWhyZWYgPT4gJGhyZWYsIC1jbGFzcyA9PiAibGlzdCBzdWJqZWN0IiwKKwkJICAgICAgICAgICAgICAgIC10aXRsZSA9PiB0b191dGY4KCRsb25nKX0sCisJCSAgICAgICBlc2NfaHRtbCgkc2hvcnQpKSAuICRleHRyYTsKKwl9IGVsc2UgeworCQlyZXR1cm4gJGNnaS0+YSh7LWhyZWYgPT4gJGhyZWYsIC1jbGFzcyA9PiAibGlzdCBzdWJqZWN0In0sCisJCSAgICAgICBlc2NfaHRtbCgkbG9uZykpIC4gJGV4dHJhOworCX0KK30KKworIyBSYXRoZXIgdGhhbiByZWNvbXB1dGluZyB0aGUgdXJsIGZvciBhbiBlbWFpbCBtdWx0aXBsZSB0aW1lcywgd2UgY2FjaGUgaXQKKyMgYWZ0ZXIgdGhlIGZpcnN0IGhpdC4gVGhpcyBnaXZlcyBhIHZpc2libGUgYmVuZWZpdCBpbiB2aWV3cyB3aGVyZSB0aGUgYXZhdGFyCisjIGZvciB0aGUgc2FtZSBlbWFpbCBpcyB1c2VkIHJlcGVhdGVkbHkgKGUuZy4gc2hvcnRsb2cpLgorIyBUaGUgY2FjaGUgaXMgc2hhcmVkIGJ5IGFsbCBhdmF0YXIgZW5naW5lcyAoY3VycmVudGx5IGdyYXZhdGFyIG9ubHkpLCB3aGljaAorIyBhcmUgZnJlZSB0byB1c2UgaXQgYXMgcHJlZmVycmVkLiBTaW5jZSBvbmx5IG9uZSBhdmF0YXIgZW5naW5lIGlzIHVzZWQgZm9yIGFueQorIyBnaXZlbiBwYWdlLCB0aGVyZSdzIG5vIHJpc2sgZm9yIGNhY2hlIGNvbmZsaWN0cy4KK291ciAlYXZhdGFyX2NhY2hlID0gKCk7CisKKyMgQ29tcHV0ZSB0aGUgcGljb24gdXJsIGZvciBhIGdpdmVuIGVtYWlsLCBieSB1c2luZyB0aGUgcGljb24gc2VhcmNoIHNlcnZpY2Ugb3ZlciBhdAorIyBodHRwOi8vd3d3LmNzLmluZGlhbmEuZWR1L3BpY29ucy9zZWFyY2guaHRtbAorc3ViIHBpY29uX3VybCB7CisJbXkgJGVtYWlsID0gbGMgc2hpZnQ7CisJaWYgKCEkYXZhdGFyX2NhY2hleyRlbWFpbH0pIHsKKwkJbXkgKCR1c2VyLCAkZG9tYWluKSA9IHNwbGl0KCdAJywgJGVtYWlsKTsKKwkJJGF2YXRhcl9jYWNoZXskZW1haWx9ID0KKwkJCSIvL3d3dy5jcy5pbmRpYW5hLmVkdS9jZ2ktcHViL2tpbnpsZXIvcGljb25zZWFyY2guY2dpLyIgLgorCQkJIiRkb21haW4vJHVzZXIvIiAuCisJCQkidXNlcnMrZG9tYWlucyt1bmtub3duL3VwL3NpbmdsZSI7CisJfQorCXJldHVybiAkYXZhdGFyX2NhY2hleyRlbWFpbH07Cit9CisKKyMgQ29tcHV0ZSB0aGUgZ3JhdmF0YXIgdXJsIGZvciBhIGdpdmVuIGVtYWlsLCBpZiBpdCdzIG5vdCBpbiB0aGUgY2FjaGUgYWxyZWFkeS4KKyMgR3JhdmF0YXIgc3RvcmVzIG9ubHkgdGhlIHBhcnQgb2YgdGhlIFVSTCBiZWZvcmUgdGhlIHNpemUsIHNpbmNlIHRoYXQncyB0aGUKKyMgb25lIGNvbXB1dGF0aW9uYWxseSBtb3JlIGV4cGVuc2l2ZS4gVGhpcyBhbHNvIGFsbG93cyByZXVzZSBvZiB0aGUgY2FjaGUgZm9yCisjIGRpZmZlcmVudCBzaXplcyAoZm9yIHRoaXMgcGFydGljdWxhciBlbmdpbmUpLgorc3ViIGdyYXZhdGFyX3VybCB7CisJbXkgJGVtYWlsID0gbGMgc2hpZnQ7CisJbXkgJHNpemUgPSBzaGlmdDsKKwkkYXZhdGFyX2NhY2hleyRlbWFpbH0gfHw9CisJCSIvL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLyIgLgorCQkJbWQ1X2hleCgkZW1haWwpIC4gIj9zPSI7CisJcmV0dXJuICRhdmF0YXJfY2FjaGV7JGVtYWlsfSAuICRzaXplOworfQorCisjIEluc2VydCBhbiBhdmF0YXIgZm9yIHRoZSBnaXZlbiAkZW1haWwgYXQgdGhlIGdpdmVuICRzaXplIGlmIHRoZSBmZWF0dXJlCisjIGlzIGVuYWJsZWQuCitzdWIgZ2l0X2dldF9hdmF0YXIgeworCW15ICgkZW1haWwsICVvcHRzKSA9IEBfOworCW15ICRwcmVfd2hpdGUgID0gKCRvcHRzey1wYWRfYmVmb3JlfSA/ICImbmJzcDsiIDogIiIpOworCW15ICRwb3N0X3doaXRlID0gKCRvcHRzey1wYWRfYWZ0ZXJ9ICA/ICImbmJzcDsiIDogIiIpOworCSRvcHRzey1zaXplfSB8fD0gJ2RlZmF1bHQnOworCW15ICRzaXplID0gJGF2YXRhcl9zaXpleyRvcHRzey1zaXplfX0gfHwgJGF2YXRhcl9zaXpleydkZWZhdWx0J307CisJbXkgJHVybCA9ICIiOworCWlmICgkZ2l0X2F2YXRhciBlcSAnZ3JhdmF0YXInKSB7CisJCSR1cmwgPSBncmF2YXRhcl91cmwoJGVtYWlsLCAkc2l6ZSk7CisJfSBlbHNpZiAoJGdpdF9hdmF0YXIgZXEgJ3BpY29uJykgeworCQkkdXJsID0gcGljb25fdXJsKCRlbWFpbCk7CisJfQorCSMgT3RoZXIgcHJvdmlkZXJzIGNhbiBiZSBhZGRlZCBieSBleHRlbmRpbmcgdGhlIGlmIGNoYWluLCBkZWZpbmluZyAkdXJsCisJIyBhcyBuZWVkZWQuIElmIG5vIHZhcmlhbnQgcHV0cyBzb21ldGhpbmcgaW4gJHVybCwgd2UgYXNzdW1lIGF2YXRhcnMKKwkjIGFyZSBjb21wbGV0ZWx5IGRpc2FibGVkL3VuYXZhaWxhYmxlLgorCWlmICgkdXJsKSB7CisJCXJldHVybiAkcHJlX3doaXRlIC4KKwkJICAgICAgICI8aW1nIHdpZHRoPVwiJHNpemVcIiAiIC4KKwkJICAgICAgICAgICAgImNsYXNzPVwiYXZhdGFyXCIgIiAuCisJCSAgICAgICAgICAgICJzcmM9XCIiLmVzY191cmwoJHVybCkuIlwiICIgLgorCQkJICAgICJhbHQ9XCJcIiAiIC4KKwkJICAgICAgICIvPiIgLiAkcG9zdF93aGl0ZTsKKwl9IGVsc2UgeworCQlyZXR1cm4gIiI7CisJfQorfQorCitzdWIgZm9ybWF0X3NlYXJjaF9hdXRob3IgeworCW15ICgkYXV0aG9yLCAkc2VhcmNodHlwZSwgJGRpc3BsYXl0ZXh0KSA9IEBfOworCW15ICRoYXZlX3NlYXJjaCA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdzZWFyY2gnKTsKKworCWlmICgkaGF2ZV9zZWFyY2gpIHsKKwkJbXkgJHBlcmZvcm1lZCA9ICIiOworCQlpZiAoJHNlYXJjaHR5cGUgZXEgJ2F1dGhvcicpIHsKKwkJCSRwZXJmb3JtZWQgPSAiYXV0aG9yZWQiOworCQl9IGVsc2lmICgkc2VhcmNodHlwZSBlcSAnY29tbWl0dGVyJykgeworCQkJJHBlcmZvcm1lZCA9ICJjb21taXR0ZWQiOworCQl9CisKKwkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2VhcmNoIiwgaGFzaD0+JGhhc2gsCisJCQkJc2VhcmNodGV4dD0+JGF1dGhvciwKKwkJCQlzZWFyY2h0eXBlPT4kc2VhcmNodHlwZSksIGNsYXNzPT4ibGlzdCIsCisJCQkJdGl0bGU9PiJTZWFyY2ggZm9yIGNvbW1pdHMgJHBlcmZvcm1lZCBieSAkYXV0aG9yIn0sCisJCQkJJGRpc3BsYXl0ZXh0KTsKKworCX0gZWxzZSB7CisJCXJldHVybiAkZGlzcGxheXRleHQ7CisJfQorfQorCisjIGZvcm1hdCB0aGUgYXV0aG9yIG5hbWUgb2YgdGhlIGdpdmVuIGNvbW1pdCB3aXRoIHRoZSBnaXZlbiB0YWcKKyMgdGhlIGF1dGhvciBuYW1lIGlzIGNob3BwZWQgYW5kIGVzY2FwZWQgYWNjb3JkaW5nIHRvIHRoZSBvdGhlcgorIyBvcHRpb25hbCBwYXJhbWV0ZXJzIChzZWUgY2hvcF9zdHIpLgorc3ViIGZvcm1hdF9hdXRob3JfaHRtbCB7CisJbXkgJHRhZyA9IHNoaWZ0OworCW15ICRjbyA9IHNoaWZ0OworCW15ICRhdXRob3IgPSBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjby0+eydhdXRob3JfbmFtZSd9LCBAXyk7CisJcmV0dXJuICI8JHRhZyBjbGFzcz1cImF1dGhvclwiPiIgLgorCSAgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkY28tPnsnYXV0aG9yX25hbWUnfSwgImF1dGhvciIsCisJCSAgICAgICBnaXRfZ2V0X2F2YXRhcigkY28tPnsnYXV0aG9yX2VtYWlsJ30sIC1wYWRfYWZ0ZXIgPT4gMSkgLgorCQkgICAgICAgJGF1dGhvcikgLgorCSAgICAgICAiPC8kdGFnPiI7Cit9CisKKyMgZm9ybWF0IGdpdCBkaWZmIGhlYWRlciBsaW5lLCBpLmUuICJkaWZmIC0tKGdpdHxjb21iaW5lZHxjYykgLi4uIgorc3ViIGZvcm1hdF9naXRfZGlmZl9oZWFkZXJfbGluZSB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKwlteSAkZGlmZmluZm8gPSBzaGlmdDsKKwlteSAoJGZyb20sICR0bykgPSBAXzsKKworCWlmICgkZGlmZmluZm8tPnsnbnBhcmVudHMnfSkgeworCQkjIGNvbWJpbmVkIGRpZmYKKwkJJGxpbmUgPX4gcyFeKGRpZmYgKC4qPykgKSI/LiokISQxITsKKwkJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmID0+ICR0by0+eydocmVmJ30sIC1jbGFzcyA9PiAicGF0aCJ9LAorCQkJICAgICAgICAgICAgICAgICBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KSk7CisJCX0gZWxzZSB7ICMgZmlsZSB3YXMgZGVsZXRlZCAobm8gaHJlZikKKwkJCSRsaW5lIC49IGVzY19wYXRoKCR0by0+eydmaWxlJ30pOworCQl9CisJfSBlbHNlIHsKKwkJIyAib3JkaW5hcnkiIGRpZmYKKwkJJGxpbmUgPX4gcyFeKGRpZmYgKC4qPykgKSI/YS8uKiQhJDEhOworCQlpZiAoJGZyb20tPnsnaHJlZid9KSB7CisJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZiA9PiAkZnJvbS0+eydocmVmJ30sIC1jbGFzcyA9PiAicGF0aCJ9LAorCQkJICAgICAgICAgICAgICAgICAnYS8nIC4gZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KSk7CisJCX0gZWxzZSB7ICMgZmlsZSB3YXMgYWRkZWQgKG5vIGhyZWYpCisJCQkkbGluZSAuPSAnYS8nIC4gZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KTsKKwkJfQorCQkkbGluZSAuPSAnICc7CisJCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZiA9PiAkdG8tPnsnaHJlZid9LCAtY2xhc3MgPT4gInBhdGgifSwKKwkJCSAgICAgICAgICAgICAgICAgJ2IvJyAuIGVzY19wYXRoKCR0by0+eydmaWxlJ30pKTsKKwkJfSBlbHNlIHsgIyBmaWxlIHdhcyBkZWxldGVkCisJCQkkbGluZSAuPSAnYi8nIC4gZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSk7CisJCX0KKwl9CisKKwlyZXR1cm4gIjxkaXYgY2xhc3M9XCJkaWZmIGhlYWRlclwiPiRsaW5lPC9kaXY+XG4iOworfQorCisjIGZvcm1hdCBleHRlbmRlZCBkaWZmIGhlYWRlciBsaW5lLCBiZWZvcmUgcGF0Y2ggaXRzZWxmCitzdWIgZm9ybWF0X2V4dGVuZGVkX2RpZmZfaGVhZGVyX2xpbmUgeworCW15ICRsaW5lID0gc2hpZnQ7CisJbXkgJGRpZmZpbmZvID0gc2hpZnQ7CisJbXkgKCRmcm9tLCAkdG8pID0gQF87CisKKwkjIG1hdGNoIDxwYXRoPgorCWlmICgkbGluZSA9fiBzIV4oKGNvcHl8cmVuYW1lKSBmcm9tICkuKiQhJDEhICYmICRmcm9tLT57J2hyZWYnfSkgeworCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+JGZyb20tPnsnaHJlZid9LCAtY2xhc3M9PiJwYXRoIn0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KSk7CisJfQorCWlmICgkbGluZSA9fiBzIV4oKGNvcHl8cmVuYW1lKSB0byApLiokISQxISAmJiAkdG8tPnsnaHJlZid9KSB7CisJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4kdG8tPnsnaHJlZid9LCAtY2xhc3M9PiJwYXRoIn0sCisJCSAgICAgICAgICAgICAgICAgZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSkpOworCX0KKwkjIG1hdGNoIHNpbmdsZSA8bW9kZT4KKwlpZiAoJGxpbmUgPX4gbS9ccyhcZHs2fSkkLykgeworCQkkbGluZSAuPSAnPHNwYW4gY2xhc3M9ImluZm8iPiAoJyAuCisJCSAgICAgICAgIGZpbGVfdHlwZV9sb25nKCQxKSAuCisJCSAgICAgICAgICcpPC9zcGFuPic7CisJfQorCSMgbWF0Y2ggPGhhc2g+CisJaWYgKCRsaW5lID1+IG9pZF9ubGVuX3ByZWZpeF9pbmZpeF9yZWdleCgkc2hhMV9sZW4sICJpbmRleCAiLCAiLCIpIHwKKwkgICAgJGxpbmUgPX4gb2lkX25sZW5fcHJlZml4X2luZml4X3JlZ2V4KCRzaGEyNTZfbGVuLCAiaW5kZXggIiwgIiwiKSkgeworCQkjIGNhbiBtYXRjaCBvbmx5IGZvciBjb21iaW5lZCBkaWZmCisJCSRsaW5lID0gJ2luZGV4ICc7CisJCWZvciAobXkgJGkgPSAwOyAkaSA8ICRkaWZmaW5mby0+eyducGFyZW50cyd9OyAkaSsrKSB7CisJCQlpZiAoJGZyb20tPnsnaHJlZid9WyRpXSkgeworCQkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4kZnJvbS0+eydocmVmJ31bJGldLAorCQkJCSAgICAgICAgICAgICAgICAgIC1jbGFzcz0+Imhhc2gifSwKKwkJCQkgICAgICAgICAgICAgICAgIHN1YnN0cigkZGlmZmluZm8tPnsnZnJvbV9pZCd9WyRpXSwwLDcpKTsKKwkJCX0gZWxzZSB7CisJCQkJJGxpbmUgLj0gJzAnIHggNzsKKwkJCX0KKwkJCSMgc2VwYXJhdG9yCisJCQkkbGluZSAuPSAnLCcgaWYgKCRpIDwgJGRpZmZpbmZvLT57J25wYXJlbnRzJ30gLSAxKTsKKwkJfQorCQkkbGluZSAuPSAnLi4nOworCQlpZiAoJHRvLT57J2hyZWYnfSkgeworCQkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWY9PiR0by0+eydocmVmJ30sIC1jbGFzcz0+Imhhc2gifSwKKwkJCSAgICAgICAgICAgICAgICAgc3Vic3RyKCRkaWZmaW5mby0+eyd0b19pZCd9LDAsNykpOworCQl9IGVsc2UgeworCQkJJGxpbmUgLj0gJzAnIHggNzsKKwkJfQorCisJfSBlbHNpZiAoJGxpbmUgPX4gb2lkX25sZW5fcHJlZml4X2luZml4X3JlZ2V4KCRzaGExX2xlbiwgImluZGV4ICIsICIuLiIpIHwKKwkJICRsaW5lID1+IG9pZF9ubGVuX3ByZWZpeF9pbmZpeF9yZWdleCgkc2hhMjU2X2xlbiwgImluZGV4ICIsICIuLiIpKSB7CisJCSMgY2FuIG1hdGNoIG9ubHkgZm9yIG9yZGluYXJ5IGRpZmYKKwkJbXkgKCRmcm9tX2xpbmssICR0b19saW5rKTsKKwkJaWYgKCRmcm9tLT57J2hyZWYnfSkgeworCQkJJGZyb21fbGluayA9ICRjZ2ktPmEoey1ocmVmPT4kZnJvbS0+eydocmVmJ30sIC1jbGFzcz0+Imhhc2gifSwKKwkJCSAgICAgICAgICAgICAgICAgICAgIHN1YnN0cigkZGlmZmluZm8tPnsnZnJvbV9pZCd9LDAsNykpOworCQl9IGVsc2UgeworCQkJJGZyb21fbGluayA9ICcwJyB4IDc7CisJCX0KKwkJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJCSR0b19saW5rID0gJGNnaS0+YSh7LWhyZWY9PiR0by0+eydocmVmJ30sIC1jbGFzcz0+Imhhc2gifSwKKwkJCSAgICAgICAgICAgICAgICAgICBzdWJzdHIoJGRpZmZpbmZvLT57J3RvX2lkJ30sMCw3KSk7CisJCX0gZWxzZSB7CisJCQkkdG9fbGluayA9ICcwJyB4IDc7CisJCX0KKwkJbXkgKCRmcm9tX2lkLCAkdG9faWQpID0gKCRkaWZmaW5mby0+eydmcm9tX2lkJ30sICRkaWZmaW5mby0+eyd0b19pZCd9KTsKKwkJJGxpbmUgPX4gcyEkZnJvbV9pZFwuXC4kdG9faWQhJGZyb21fbGluay4uJHRvX2xpbmshOworCX0KKworCXJldHVybiAkbGluZSAuICI8YnIvPlxuIjsKK30KKworIyBmb3JtYXQgZnJvbS1maWxlL3RvLWZpbGUgZGlmZiBoZWFkZXIKK3N1YiBmb3JtYXRfZGlmZl9mcm9tX3RvX2hlYWRlciB7CisJbXkgKCRmcm9tX2xpbmUsICR0b19saW5lLCAkZGlmZmluZm8sICRmcm9tLCAkdG8sIEBwYXJlbnRzKSA9IEBfOworCW15ICRsaW5lOworCW15ICRyZXN1bHQgPSAnJzsKKworCSRsaW5lID0gJGZyb21fbGluZTsKKwkjYXNzZXJ0KCRsaW5lID1+IG0vXi0tLS8pIGlmIERFQlVHOworCSMgbm8gZXh0cmEgZm9ybWF0dGluZyBmb3IgIl4tLS0gL2Rldi9udWxsIgorCWlmICghICRkaWZmaW5mby0+eyducGFyZW50cyd9KSB7CisJCSMgb3JkaW5hcnkgKHNpbmdsZSBwYXJlbnQpIGRpZmYKKwkJaWYgKCRsaW5lID1+IG0hXi0tLSAiP2EvISkgeworCQkJaWYgKCRmcm9tLT57J2hyZWYnfSkgeworCQkJCSRsaW5lID0gJy0tLSBhLycgLgorCQkJCSAgICAgICAgJGNnaS0+YSh7LWhyZWY9PiRmcm9tLT57J2hyZWYnfSwgLWNsYXNzPT4icGF0aCJ9LAorCQkJCSAgICAgICAgICAgICAgICBlc2NfcGF0aCgkZnJvbS0+eydmaWxlJ30pKTsKKwkJCX0gZWxzZSB7CisJCQkJJGxpbmUgPSAnLS0tIGEvJyAuCisJCQkJICAgICAgICBlc2NfcGF0aCgkZnJvbS0+eydmaWxlJ30pOworCQkJfQorCQl9CisJCSRyZXN1bHQgLj0gcXEhPGRpdiBjbGFzcz0iZGlmZiBmcm9tX2ZpbGUiPiRsaW5lPC9kaXY+XG4hOworCisJfSBlbHNlIHsKKwkJIyBjb21iaW5lZCBkaWZmIChtZXJnZSBjb21taXQpCisJCWZvciAobXkgJGkgPSAwOyAkaSA8ICRkaWZmaW5mby0+eyducGFyZW50cyd9OyAkaSsrKSB7CisJCQlpZiAoJGZyb20tPnsnaHJlZid9WyRpXSkgeworCQkJCSRsaW5lID0gJy0tLSAnIC4KKwkJCQkgICAgICAgICRjZ2ktPmEoey1ocmVmPT5ocmVmKGFjdGlvbj0+ImJsb2JkaWZmIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfcGFyZW50PT4kZGlmZmluZm8tPnsnZnJvbV9pZCd9WyRpXSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfcGFyZW50X2Jhc2U9PiRwYXJlbnRzWyRpXSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGFyZW50PT4kZnJvbS0+eydmaWxlJ31bJGldLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmZpbmZvLT57J3RvX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kdG8tPnsnZmlsZSd9KSwKKwkJCQkgICAgICAgICAgICAgICAgIC1jbGFzcz0+InBhdGgiLAorCQkJCSAgICAgICAgICAgICAgICAgLXRpdGxlPT4iZGlmZiIgLiAoJGkrMSl9LAorCQkJCSAgICAgICAgICAgICAgICAkaSsxKSAuCisJCQkJICAgICAgICAnLycgLgorCQkJCSAgICAgICAgJGNnaS0+YSh7LWhyZWY9PiRmcm9tLT57J2hyZWYnfVskaV0sIC1jbGFzcz0+InBhdGgifSwKKwkJCQkgICAgICAgICAgICAgICAgZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9WyRpXSkpOworCQkJfSBlbHNlIHsKKwkJCQkkbGluZSA9ICctLS0gL2Rldi9udWxsJzsKKwkJCX0KKwkJCSRyZXN1bHQgLj0gcXEhPGRpdiBjbGFzcz0iZGlmZiBmcm9tX2ZpbGUiPiRsaW5lPC9kaXY+XG4hOworCQl9CisJfQorCisJJGxpbmUgPSAkdG9fbGluZTsKKwkjYXNzZXJ0KCRsaW5lID1+IG0vXlwrXCtcKy8pIGlmIERFQlVHOworCSMgbm8gZXh0cmEgZm9ybWF0dGluZyBmb3IgIl4rKysgL2Rldi9udWxsIgorCWlmICgkbGluZSA9fiBtIV5cK1wrXCsgIj9iLyEpIHsKKwkJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJCSRsaW5lID0gJysrKyBiLycgLgorCQkJICAgICAgICAkY2dpLT5hKHstaHJlZj0+JHRvLT57J2hyZWYnfSwgLWNsYXNzPT4icGF0aCJ9LAorCQkJICAgICAgICAgICAgICAgIGVzY19wYXRoKCR0by0+eydmaWxlJ30pKTsKKwkJfSBlbHNlIHsKKwkJCSRsaW5lID0gJysrKyBiLycgLgorCQkJICAgICAgICBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KTsKKwkJfQorCX0KKwkkcmVzdWx0IC49IHFxITxkaXYgY2xhc3M9ImRpZmYgdG9fZmlsZSI+JGxpbmU8L2Rpdj5cbiE7CisKKwlyZXR1cm4gJHJlc3VsdDsKK30KKworIyBjcmVhdGUgbm90ZSBmb3IgcGF0Y2ggc2ltcGxpZmllZCBieSBjb21iaW5lZCBkaWZmCitzdWIgZm9ybWF0X2RpZmZfY2Nfc2ltcGxpZmllZCB7CisJbXkgKCRkaWZmaW5mbywgQHBhcmVudHMpID0gQF87CisJbXkgJHJlc3VsdCA9ICcnOworCisJJHJlc3VsdCAuPSAiPGRpdiBjbGFzcz1cImRpZmYgaGVhZGVyXCI+IiAuCisJICAgICAgICAgICAiZGlmZiAtLWNjICI7CisJaWYgKCFpc19kZWxldGVkKCRkaWZmaW5mbykpIHsKKwkJJHJlc3VsdCAuPSAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmaW5mby0+eyd0b19pZCd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZmluZm8tPnsndG9fZmlsZSd9KSwKKwkJICAgICAgICAgICAgICAgICAgICAtY2xhc3MgPT4gInBhdGgifSwKKwkJICAgICAgICAgICAgICAgICAgIGVzY19wYXRoKCRkaWZmaW5mby0+eyd0b19maWxlJ30pKTsKKwl9IGVsc2UgeworCQkkcmVzdWx0IC49IGVzY19wYXRoKCRkaWZmaW5mby0+eyd0b19maWxlJ30pOworCX0KKwkkcmVzdWx0IC49ICI8L2Rpdj5cbiIgLiAjIGNsYXNzPSJkaWZmIGhlYWRlciIKKwkgICAgICAgICAgICI8ZGl2IGNsYXNzPVwiZGlmZiBub2RpZmZlcmVuY2VzXCI+IiAuCisJICAgICAgICAgICAiU2ltcGxlIG1lcmdlIiAuCisJICAgICAgICAgICAiPC9kaXY+XG4iOyAjIGNsYXNzPSJkaWZmIG5vZGlmZmVyZW5jZXMiCisKKwlyZXR1cm4gJHJlc3VsdDsKK30KKworc3ViIGRpZmZfbGluZV9jbGFzcyB7CisJbXkgKCRsaW5lLCAkZnJvbSwgJHRvKSA9IEBfOworCisJIyBvcmRpbmFyeSBkaWZmCisJbXkgJG51bV9zaWduID0gMTsKKwkjIGNvbWJpbmVkIGRpZmYKKwlpZiAoJGZyb20gJiYgJHRvICYmIHJlZigkZnJvbS0+eydocmVmJ30pIGVxICJBUlJBWSIpIHsKKwkJJG51bV9zaWduID0gc2NhbGFyIEB7JGZyb20tPnsnaHJlZid9fTsKKwl9CisKKwlteSBAZGlmZl9saW5lX2NsYXNzaWZpZXIgPSAoCisJCXsgcmVnZXhwID0+IHFyL15cQFxAeyRudW1fc2lnbn0gLywgY2xhc3MgPT4gImNodW5rX2hlYWRlciJ9LAorCQl7IHJlZ2V4cCA9PiBxci9eXFwvLCAgICAgICAgICAgICAgIGNsYXNzID0+ICJpbmNvbXBsZXRlIiAgfSwKKwkJeyByZWdleHAgPT4gcXIvXiB7JG51bV9zaWdufS8sICAgICBjbGFzcyA9PiAiY3R4IiB9LAorCQkjIGNsYXNzaWZpZXIgZm9yIGNvbnRleHQgbXVzdCBjb21lIGJlZm9yZSBjbGFzc2lmaWVyIGFkZC9yZW0sCisJCSMgb3Igd2Ugd291bGQgaGF2ZSB0byB1c2UgbW9yZSBjb21wbGljYXRlZCByZWdleHAsIGZvciBleGFtcGxlCisJCSMgcXIvKD89IHswLCRtfVwrKVsrIF17JG51bV9zaWdufS8sIHdoZXJlICRtID0gJG51bV9zaWduIC0gMTsKKwkJeyByZWdleHAgPT4gcXIvXlsrIF17JG51bV9zaWdufS8sICAgY2xhc3MgPT4gImFkZCIgfSwKKwkJeyByZWdleHAgPT4gcXIvXlstIF17JG51bV9zaWdufS8sICAgY2xhc3MgPT4gInJlbSIgfSwKKwkpOworCWZvciBteSAkY2xzZnkgKEBkaWZmX2xpbmVfY2xhc3NpZmllcikgeworCQlyZXR1cm4gJGNsc2Z5LT57J2NsYXNzJ30KKwkJCWlmICgkbGluZSA9fiAkY2xzZnktPnsncmVnZXhwJ30pOworCX0KKworCSMgZmFsbGJhY2sKKwlyZXR1cm4gIiI7Cit9CisKKyMgYXNzdW1lcyB0aGF0ICRmcm9tIGFuZCAkdG8gYXJlIGRlZmluZWQgYW5kIGNvcnJlY3RseSBmaWxsZWQsCisjIGFuZCB0aGF0ICRsaW5lIGhvbGRzIGEgbGluZSBvZiBjaHVuayBoZWFkZXIgZm9yIHVuaWZpZWQgZGlmZgorc3ViIGZvcm1hdF91bmlkaWZmX2NodW5rX2hlYWRlciB7CisJbXkgKCRsaW5lLCAkZnJvbSwgJHRvKSA9IEBfOworCisJbXkgKCRmcm9tX3RleHQsICRmcm9tX3N0YXJ0LCAkZnJvbV9saW5lcywgJHRvX3RleHQsICR0b19zdGFydCwgJHRvX2xpbmVzLCAkc2VjdGlvbikgPQorCQkkbGluZSA9fiBtL15cQHsyfSAoLShcZCspKD86LChcZCspKT8pIChcKyhcZCspKD86LChcZCspKT8pIFxAezJ9KC4qKSQvOworCisJJGZyb21fbGluZXMgPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tX2xpbmVzOworCSR0b19saW5lcyAgID0gMCB1bmxlc3MgZGVmaW5lZCAkdG9fbGluZXM7CisKKwlpZiAoJGZyb20tPnsnaHJlZid9KSB7CisJCSRmcm9tX3RleHQgPSAkY2dpLT5hKHstaHJlZj0+IiRmcm9tLT57J2hyZWYnfSNsJGZyb21fc3RhcnQiLAorCQkgICAgICAgICAgICAgICAgICAgICAtY2xhc3M9PiJsaXN0In0sICRmcm9tX3RleHQpOworCX0KKwlpZiAoJHRvLT57J2hyZWYnfSkgeworCQkkdG9fdGV4dCAgID0gJGNnaS0+YSh7LWhyZWY9PiIkdG8tPnsnaHJlZid9I2wkdG9fc3RhcnQiLAorCQkgICAgICAgICAgICAgICAgICAgICAtY2xhc3M9PiJsaXN0In0sICR0b190ZXh0KTsKKwl9CisJJGxpbmUgPSAiPHNwYW4gY2xhc3M9XCJjaHVua19pbmZvXCI+QEAgJGZyb21fdGV4dCAkdG9fdGV4dCBAQDwvc3Bhbj4iIC4KKwkgICAgICAgICI8c3BhbiBjbGFzcz1cInNlY3Rpb25cIj4iIC4gZXNjX2h0bWwoJHNlY3Rpb24sIC1uYnNwPT4xKSAuICI8L3NwYW4+IjsKKwlyZXR1cm4gJGxpbmU7Cit9CisKKyMgYXNzdW1lcyB0aGF0ICRmcm9tIGFuZCAkdG8gYXJlIGRlZmluZWQgYW5kIGNvcnJlY3RseSBmaWxsZWQsCisjIGFuZCB0aGF0ICRsaW5lIGhvbGRzIGEgbGluZSBvZiBjaHVuayBoZWFkZXIgZm9yIGNvbWJpbmVkIGRpZmYKK3N1YiBmb3JtYXRfY2NfZGlmZl9jaHVua19oZWFkZXIgeworCW15ICgkbGluZSwgJGZyb20sICR0bykgPSBAXzsKKworCW15ICgkcHJlZml4LCAkcmFuZ2VzLCAkc2VjdGlvbikgPSAkbGluZSA9fiBtL14oXEArKSAoLio/KSBcQCsoLiopJC87CisJbXkgKEBmcm9tX3RleHQsIEBmcm9tX3N0YXJ0LCBAZnJvbV9ubGluZXMsICR0b190ZXh0LCAkdG9fc3RhcnQsICR0b19ubGluZXMpOworCisJQGZyb21fdGV4dCA9IHNwbGl0KCcgJywgJHJhbmdlcyk7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgQGZyb21fdGV4dDsgKyskaSkgeworCQkoJGZyb21fc3RhcnRbJGldLCAkZnJvbV9ubGluZXNbJGldKSA9CisJCQkoc3BsaXQoJywnLCBzdWJzdHIoJGZyb21fdGV4dFskaV0sIDEpKSwgMCk7CisJfQorCisJJHRvX3RleHQgICA9IHBvcCBAZnJvbV90ZXh0OworCSR0b19zdGFydCAgPSBwb3AgQGZyb21fc3RhcnQ7CisJJHRvX25saW5lcyA9IHBvcCBAZnJvbV9ubGluZXM7CisKKwkkbGluZSA9ICI8c3BhbiBjbGFzcz1cImNodW5rX2luZm9cIj4kcHJlZml4ICI7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgQGZyb21fdGV4dDsgKyskaSkgeworCQlpZiAoJGZyb20tPnsnaHJlZid9WyRpXSkgeworCQkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWY9PiIkZnJvbS0+eydocmVmJ31bJGldI2wkZnJvbV9zdGFydFskaV0iLAorCQkJICAgICAgICAgICAgICAgICAgLWNsYXNzPT4ibGlzdCJ9LCAkZnJvbV90ZXh0WyRpXSk7CisJCX0gZWxzZSB7CisJCQkkbGluZSAuPSAkZnJvbV90ZXh0WyRpXTsKKwkJfQorCQkkbGluZSAuPSAiICI7CisJfQorCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4iJHRvLT57J2hyZWYnfSNsJHRvX3N0YXJ0IiwKKwkJICAgICAgICAgICAgICAgICAgLWNsYXNzPT4ibGlzdCJ9LCAkdG9fdGV4dCk7CisJfSBlbHNlIHsKKwkJJGxpbmUgLj0gJHRvX3RleHQ7CisJfQorCSRsaW5lIC49ICIgJHByZWZpeDwvc3Bhbj4iIC4KKwkgICAgICAgICAiPHNwYW4gY2xhc3M9XCJzZWN0aW9uXCI+IiAuIGVzY19odG1sKCRzZWN0aW9uLCAtbmJzcD0+MSkgLiAiPC9zcGFuPiI7CisJcmV0dXJuICRsaW5lOworfQorCisjIHByb2Nlc3MgcGF0Y2ggKGRpZmYpIGxpbmUgKG5vdCB0byBiZSB1c2VkIGZvciBkaWZmIGhlYWRlcnMpLAorIyByZXR1cm5pbmcgSFRNTC1mb3JtYXR0ZWQgKGJ1dCBub3Qgd3JhcHBlZCkgbGluZS4KKyMgSWYgdGhlIGxpbmUgaXMgcGFzc2VkIGFzIGEgcmVmZXJlbmNlLCBpdCBpcyB0cmVhdGVkIGFzIEhUTUwgYW5kIG5vdAorIyBlc2NfaHRtbCgpJ2VkLgorc3ViIGZvcm1hdF9kaWZmX2xpbmUgeworCW15ICgkbGluZSwgJGRpZmZfY2xhc3MsICRmcm9tLCAkdG8pID0gQF87CisKKwlpZiAocmVmKCRsaW5lKSkgeworCQkkbGluZSA9ICQkbGluZTsKKwl9IGVsc2UgeworCQljaG9tcCAkbGluZTsKKwkJJGxpbmUgPSB1bnRhYmlmeSgkbGluZSk7CisKKwkJaWYgKCRmcm9tICYmICR0byAmJiAkbGluZSA9fiBtL15cQHsyfSAvKSB7CisJCQkkbGluZSA9IGZvcm1hdF91bmlkaWZmX2NodW5rX2hlYWRlcigkbGluZSwgJGZyb20sICR0byk7CisJCX0gZWxzaWYgKCRmcm9tICYmICR0byAmJiAkbGluZSA9fiBtL15cQHszfS8pIHsKKwkJCSRsaW5lID0gZm9ybWF0X2NjX2RpZmZfY2h1bmtfaGVhZGVyKCRsaW5lLCAkZnJvbSwgJHRvKTsKKwkJfSBlbHNlIHsKKwkJCSRsaW5lID0gZXNjX2h0bWwoJGxpbmUsIC1uYnNwPT4xKTsKKwkJfQorCX0KKworCW15ICRkaWZmX2NsYXNzZXMgPSAiZGlmZiI7CisJJGRpZmZfY2xhc3NlcyAuPSAiICRkaWZmX2NsYXNzIiBpZiAoJGRpZmZfY2xhc3MpOworCSRsaW5lID0gIjxkaXYgY2xhc3M9XCIkZGlmZl9jbGFzc2VzXCI+JGxpbmU8L2Rpdj5cbiI7CisKKwlyZXR1cm4gJGxpbmU7Cit9CisKKyMgR2VuZXJhdGVzIHVuZGVmIG9yIHNvbWV0aGluZyBsaWtlICJfc25hcHNob3RfIiBvciAic25hcHNob3QgKF90YnoyXyBfemlwXykiLAorIyBsaW5rZWQuICBQYXNzIHRoZSBoYXNoIG9mIHRoZSB0cmVlL2NvbW1pdCB0byBzbmFwc2hvdC4KK3N1YiBmb3JtYXRfc25hcHNob3RfbGlua3MgeworCW15ICgkaGFzaCkgPSBAXzsKKwlteSAkbnVtX2ZtdHMgPSBAc25hcHNob3RfZm10czsKKwlpZiAoJG51bV9mbXRzID4gMSkgeworCQkjIEEgcGFyZW50aGVzaXplZCBsaXN0IG9mIGxpbmtzIGJlYXJpbmcgZm9ybWF0IG5hbWVzLgorCQkjIGUuZy4gInNuYXBzaG90IChfdGFyLmd6XyBfemlwXykiCisJCXJldHVybiAic25hcHNob3QgKCIgLiBqb2luKCcgJywgbWFwCisJCQkkY2dpLT5hKHsKKwkJCQktaHJlZiA9PiBocmVmKAorCQkJCQlhY3Rpb249PiJzbmFwc2hvdCIsCisJCQkJCWhhc2g9PiRoYXNoLAorCQkJCQlzbmFwc2hvdF9mb3JtYXQ9PiRfCisJCQkJKQorCQkJfSwgJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JF99eydkaXNwbGF5J30pCisJCSwgQHNuYXBzaG90X2ZtdHMpIC4gIikiOworCX0gZWxzaWYgKCRudW1fZm10cyA9PSAxKSB7CisJCSMgQSBzaW5nbGUgInNuYXBzaG90IiBsaW5rIHdob3NlIHRvb2x0aXAgYmVhcnMgdGhlIGZvcm1hdCBuYW1lLgorCQkjIGkuZS4gIl9zbmFwc2hvdF8iCisJCW15ICgkZm10KSA9IEBzbmFwc2hvdF9mbXRzOworCQlyZXR1cm4KKwkJCSRjZ2ktPmEoeworCQkJCS1ocmVmID0+IGhyZWYoCisJCQkJCWFjdGlvbj0+InNuYXBzaG90IiwKKwkJCQkJaGFzaD0+JGhhc2gsCisJCQkJCXNuYXBzaG90X2Zvcm1hdD0+JGZtdAorCQkJCSksCisJCQkJLXRpdGxlID0+ICJpbiBmb3JtYXQ6ICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmbXR9eydkaXNwbGF5J30iCisJCQl9LCAic25hcHNob3QiKTsKKwl9IGVsc2UgeyAjICRudW1fZm10cyA9PSAwCisJCXJldHVybiB1bmRlZjsKKwl9Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGZ1bmN0aW9ucyByZXR1cm5pbmcgdmFsdWVzIHRvIGJlIHBhc3NlZCwgcGVyaGFwcyBhZnRlciBzb21lCisjIyB0cmFuc2Zvcm1hdGlvbiwgdG8gb3RoZXIgZnVuY3Rpb25zOyBlLmcuIHJldHVybmluZyBhcmd1bWVudHMgdG8gaHJlZigpCisKKyMgcmV0dXJucyBoYXNoIHRvIGJlIHBhc3NlZCB0byBocmVmIHRvIGdlbmVyYXRlIGdpdHdlYiBVUkwKKyMgaW4gLXRpdGxlIGtleSBpdCByZXR1cm5zIGRlc2NyaXB0aW9uIG9mIGxpbmsKK3N1YiBnZXRfZmVlZF9pbmZvIHsKKwlteSAkZm9ybWF0ID0gc2hpZnQgfHwgJ0F0b20nOworCW15ICVyZXMgPSAoYWN0aW9uID0+IGxjKCRmb3JtYXQpKTsKKwlteSAkbWF0Y2hlZF9yZWYgPSAwOworCisJIyBmZWVkIGxpbmtzIGFyZSBwb3NzaWJsZSBvbmx5IGZvciBwcm9qZWN0IHZpZXdzCisJcmV0dXJuIHVubGVzcyAoZGVmaW5lZCAkcHJvamVjdCk7CisJIyBzb21lIHZpZXdzIHNob3VsZCBsaW5rIHRvIE9QTUwsIG9yIHRvIGdlbmVyaWMgcHJvamVjdCBmZWVkLAorCSMgb3IgZG9uJ3QgaGF2ZSBzcGVjaWZpYyBmZWVkIHlldCAoc28gdGhleSBzaG91bGQgdXNlIGdlbmVyaWMpCisJcmV0dXJuIGlmICghJGFjdGlvbiB8fCAkYWN0aW9uID1+IC9eKD86dGFnc3xoZWFkc3xmb3Jrc3x0YWd8c2VhcmNoKSQveCk7CisKKwlteSAkYnJhbmNoID0gdW5kZWY7CisJIyBicmFuY2hlcyByZWZzIHVzZXMgJ3JlZnMvJyArICRnZXRfYnJhbmNoX3JlZnMoKVt4XSArICcvJyBwcmVmaXgKKwkjIChmdWxsbmFtZSkgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIHRhZyBsaW5rczsgdGhpcyBhbHNvIG1ha2VzCisJIyBwb3NzaWJsZSB0byBkZXRlY3QgYnJhbmNoIGxpbmtzCisJZm9yIG15ICRyZWYgKGdldF9icmFuY2hfcmVmcygpKSB7CisJCWlmICgoZGVmaW5lZCAkaGFzaF9iYXNlICYmICRoYXNoX2Jhc2UgPX4gbSFecmVmcy9cUSRyZWZcRS8oLiopJCEpIHx8CisJCSAgICAoZGVmaW5lZCAkaGFzaCAgICAgICYmICRoYXNoICAgICAgPX4gbSFecmVmcy9cUSRyZWZcRS8oLiopJCEpKSB7CisJCQkkYnJhbmNoID0gJDE7CisJCQkkbWF0Y2hlZF9yZWYgPSAkcmVmOworCQkJbGFzdDsKKwkJfQorCX0KKwkjIGZpbmQgbG9nIHR5cGUgZm9yIGZlZWQgZGVzY3JpcHRpb24gKHRpdGxlKQorCW15ICR0eXBlID0gJ2xvZyc7CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkkdHlwZSAgPSAiaGlzdG9yeSBvZiAkZmlsZV9uYW1lIjsKKwkJJHR5cGUgLj0gIi8iIGlmICgkYWN0aW9uIGVxICd0cmVlJyk7CisJCSR0eXBlIC49ICIgb24gJyRicmFuY2gnIiBpZiAoZGVmaW5lZCAkYnJhbmNoKTsKKwl9IGVsc2UgeworCQkkdHlwZSA9ICJsb2cgb2YgJGJyYW5jaCIgaWYgKGRlZmluZWQgJGJyYW5jaCk7CisJfQorCisJJHJlc3stdGl0bGV9ID0gJHR5cGU7CisJJHJlc3snaGFzaCd9ID0gKGRlZmluZWQgJGJyYW5jaCA/ICJyZWZzLyRtYXRjaGVkX3JlZi8kYnJhbmNoIiA6IHVuZGVmKTsKKwkkcmVzeydmaWxlX25hbWUnfSA9ICRmaWxlX25hbWU7CisKKwlyZXR1cm4gJXJlczsKK30KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgZ2l0IHV0aWxpdHkgc3Vicm91dGluZXMsIGludm9raW5nIGdpdCBjb21tYW5kcworCisjIHJldHVybnMgcGF0aCB0byB0aGUgY29yZSBnaXQgZXhlY3V0YWJsZSBhbmQgdGhlIC0tZ2l0LWRpciBwYXJhbWV0ZXIgYXMgbGlzdAorc3ViIGdpdF9jbWQgeworCSRudW1iZXJfb2ZfZ2l0X2NtZHMrKzsKKwlyZXR1cm4gJEdJVCwgJy0tZ2l0LWRpcj0nLiRnaXRfZGlyOworfQorCisjIHF1b3RlIHRoZSBnaXZlbiBhcmd1bWVudHMgZm9yIHBhc3NpbmcgdGhlbSB0byB0aGUgc2hlbGwKKyMgcXVvdGVfY29tbWFuZCgiY29tbWFuZCIsICJhcmcgMSIsICJhcmcgd2l0aCAnIGFuZCAhIGNoYXJhY3RlcnMiKQorIyA9PiAiJ2NvbW1hbmQnICdhcmcgMScgJ2FyZyB3aXRoICdcJycgYW5kICdcIScgY2hhcmFjdGVycyciCisjIFRyeSB0byBhdm9pZCB1c2luZyB0aGlzIGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxlLgorc3ViIHF1b3RlX2NvbW1hbmQgeworCXJldHVybiBqb2luKCcgJywKKwkJbWFwIHsgbXkgJGEgPSAkXzsgJGEgPX4gcy8oWychXSkvJ1xcJDEnL2c7ICInJGEnIiB9IEBfICk7Cit9CisKKyMgZ2V0IEhFQUQgcmVmIG9mIGdpdmVuIHByb2plY3QgYXMgaGFzaAorc3ViIGdpdF9nZXRfaGVhZF9oYXNoIHsKKwlyZXR1cm4gZ2l0X2dldF9mdWxsX2hhc2goc2hpZnQsICdIRUFEJyk7Cit9CisKK3N1YiBnaXRfZ2V0X2Z1bGxfaGFzaCB7CisJcmV0dXJuIGdpdF9nZXRfaGFzaChAXyk7Cit9CisKK3N1YiBnaXRfZ2V0X3Nob3J0X2hhc2ggeworCXJldHVybiBnaXRfZ2V0X2hhc2goQF8sICctLXNob3J0PTcnKTsKK30KKworc3ViIGdpdF9nZXRfaGFzaCB7CisJbXkgKCRwcm9qZWN0LCAkaGFzaCwgQG9wdGlvbnMpID0gQF87CisJbXkgJG9fZ2l0X2RpciA9ICRnaXRfZGlyOworCW15ICRyZXR2YWwgPSB1bmRlZjsKKwkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHByb2plY3QiOworCWlmIChvcGVuIG15ICRmZCwgJy18JywgZ2l0X2NtZCgpLCAncmV2LXBhcnNlJywKKwkgICAgJy0tdmVyaWZ5JywgJy1xJywgQG9wdGlvbnMsICRoYXNoKSB7CisJCSRyZXR2YWwgPSA8JGZkPjsKKwkJY2hvbXAgJHJldHZhbCBpZiBkZWZpbmVkICRyZXR2YWw7CisJCWNsb3NlICRmZDsKKwl9CisJaWYgKGRlZmluZWQgJG9fZ2l0X2RpcikgeworCQkkZ2l0X2RpciA9ICRvX2dpdF9kaXI7CisJfQorCXJldHVybiAkcmV0dmFsOworfQorCisjIGdldCB0eXBlIG9mIGdpdmVuIG9iamVjdAorc3ViIGdpdF9nZXRfdHlwZSB7CisJbXkgJGhhc2ggPSBzaGlmdDsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJjYXQtZmlsZSIsICctdCcsICRoYXNoIG9yIHJldHVybjsKKwlteSAkdHlwZSA9IDwkZmQ+OworCWNsb3NlICRmZCBvciByZXR1cm47CisJY2hvbXAgJHR5cGU7CisJcmV0dXJuICR0eXBlOworfQorCisjIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbgorb3VyICRjb25maWdfZmlsZSA9ICcnOworb3VyICVjb25maWc7CisKKyMgc3RvcmUgbXVsdGlwbGUgdmFsdWVzIGZvciBzaW5nbGUga2V5IGFzIGFub255bW91cyBhcnJheSByZWZlcmVuY2UKKyMgc2luZ2xlIHZhbHVlcyBzdG9yZWQgZGlyZWN0bHkgaW4gdGhlIGhhc2gsIG5vdCBhcyBbIDx2YWx1ZT4gXQorc3ViIGhhc2hfc2V0X211bHRpIHsKKwlteSAoJGhhc2gsICRrZXksICR2YWx1ZSkgPSBAXzsKKworCWlmICghZXhpc3RzICRoYXNoLT57JGtleX0pIHsKKwkJJGhhc2gtPnska2V5fSA9ICR2YWx1ZTsKKwl9IGVsc2lmICghcmVmICRoYXNoLT57JGtleX0pIHsKKwkJJGhhc2gtPnska2V5fSA9IFsgJGhhc2gtPnska2V5fSwgJHZhbHVlIF07CisJfSBlbHNlIHsKKwkJcHVzaCBAeyRoYXNoLT57JGtleX19LCAkdmFsdWU7CisJfQorfQorCisjIHJldHVybiBoYXNoIG9mIGdpdCBwcm9qZWN0IGNvbmZpZ3VyYXRpb24KKyMgb3B0aW9uYWxseSBsaW1pdGVkIHRvIHNvbWUgc2VjdGlvbiwgZS5nLiAnZ2l0d2ViJworc3ViIGdpdF9wYXJzZV9wcm9qZWN0X2NvbmZpZyB7CisJbXkgJHNlY3Rpb25fcmVnZXhwID0gc2hpZnQ7CisJbXkgJWNvbmZpZzsKKworCWxvY2FsICQvID0gIlwwIjsKKworCW9wZW4gbXkgJGZoLCAiLXwiLCBnaXRfY21kKCksICJjb25maWciLCAnLXonLCAnLWwnLAorCQlvciByZXR1cm47CisKKwl3aGlsZSAobXkgJGtleXZhbCA9IDwkZmg+KSB7CisJCWNob21wICRrZXl2YWw7CisJCW15ICgka2V5LCAkdmFsdWUpID0gc3BsaXQoL1xuLywgJGtleXZhbCwgMik7CisKKwkJaGFzaF9zZXRfbXVsdGkoXCVjb25maWcsICRrZXksICR2YWx1ZSkKKwkJCWlmICghZGVmaW5lZCAkc2VjdGlvbl9yZWdleHAgfHwgJGtleSA9fiAvXig/OiRzZWN0aW9uX3JlZ2V4cClcLi9vKTsKKwl9CisJY2xvc2UgJGZoOworCisJcmV0dXJuICVjb25maWc7Cit9CisKKyMgY29udmVydCBjb25maWcgdmFsdWUgdG8gYm9vbGVhbjogJ3RydWUnIG9yICdmYWxzZScKKyMgbm8gdmFsdWUsIG51bWJlciA+IDAsICd0cnVlJyBhbmQgJ3llcycgdmFsdWVzIGFyZSB0cnVlCisjIHJlc3Qgb2YgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIGZhbHNlIChuZXZlciBhcyBlcnJvcikKK3N1YiBjb25maWdfdG9fYm9vbCB7CisJbXkgJHZhbCA9IHNoaWZ0OworCisJcmV0dXJuIDEgaWYgIWRlZmluZWQgJHZhbDsgICAgICAgICAgICAgIyBzZWN0aW9uLmtleQorCisJIyBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCisJJHZhbCA9fiBzL15ccysvLzsKKwkkdmFsID1+IHMvXHMrJC8vOworCisJcmV0dXJuICgoJHZhbCA9fiAvXlxkKyQvICYmICR2YWwpIHx8ICAgIyBzZWN0aW9uLmtleSA9IDEKKwkgICAgICAgICgkdmFsID1+IC9eKD86dHJ1ZXx5ZXMpJC9pKSk7ICAjIHNlY3Rpb24ua2V5ID0gdHJ1ZQorfQorCisjIGNvbnZlcnQgY29uZmlnIHZhbHVlIHRvIHNpbXBsZSBkZWNpbWFsIG51bWJlcgorIyBhbiBvcHRpb25hbCB2YWx1ZSBzdWZmaXggb2YgJ2snLCAnbScsIG9yICdnJyB3aWxsIGNhdXNlIHRoZSB2YWx1ZQorIyB0byBiZSBtdWx0aXBsaWVkIGJ5IDEwMjQsIDEwNDg1NzYsIG9yIDEwNzM3NDE4MjQKK3N1YiBjb25maWdfdG9faW50IHsKKwlteSAkdmFsID0gc2hpZnQ7CisKKwkjIHN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UKKwkkdmFsID1+IHMvXlxzKy8vOworCSR2YWwgPX4gcy9ccyskLy87CisKKwlpZiAobXkgKCRudW0sICR1bml0KSA9ICgkdmFsID1+IC9eKFswLTldKikoW2ttZ10pJC9pKSkgeworCQkkdW5pdCA9IGxjKCR1bml0KTsKKwkJIyB1bmtub3duIHVuaXQgaXMgdHJlYXRlZCBhcyAxCisJCXJldHVybiAkbnVtICogKCR1bml0IGVxICdnJyA/IDEwNzM3NDE4MjQgOgorCQkgICAgICAgICAgICAgICAkdW5pdCBlcSAnbScgPyAgICAxMDQ4NTc2IDoKKwkJICAgICAgICAgICAgICAgJHVuaXQgZXEgJ2snID8gICAgICAgMTAyNCA6IDEpOworCX0KKwlyZXR1cm4gJHZhbDsKK30KKworIyBjb252ZXJ0IGNvbmZpZyB2YWx1ZSB0byBhcnJheSByZWZlcmVuY2UsIGlmIG5lZWRlZAorc3ViIGNvbmZpZ190b19tdWx0aSB7CisJbXkgJHZhbCA9IHNoaWZ0OworCisJcmV0dXJuIHJlZigkdmFsKSA/ICR2YWwgOiAoZGVmaW5lZCgkdmFsKSA/IFsgJHZhbCBdIDogW10pOworfQorCitzdWIgZ2l0X2dldF9wcm9qZWN0X2NvbmZpZyB7CisJbXkgKCRrZXksICR0eXBlKSA9IEBfOworCisJcmV0dXJuIHVubGVzcyBkZWZpbmVkICRnaXRfZGlyOworCisJIyBrZXkgc2FuaXR5IGNoZWNrCisJcmV0dXJuIHVubGVzcyAoJGtleSk7CisJIyBvbmx5IHN1YnNlY3Rpb24sIGlmIGV4aXN0cywgaXMgY2FzZSBzZW5zaXRpdmUsCisJIyBhbmQgbm90IGxvd2VyY2FzZWQgYnkgJ2dpdCBjb25maWcgLXogLWwnCisJaWYgKG15ICgkaGksICRtaSwgJGxvKSA9ICgka2V5ID1+IC9eKFteLl0qKVwuKC4qKVwuKFteLl0qKSQvKSkgeworCQkkbG8gPX4gcy9fLy9nOworCQkka2V5ID0gam9pbigiLiIsIGxjKCRoaSksICRtaSwgbGMoJGxvKSk7CisJCXJldHVybiBpZiAoJGxvID1+IC9cVy8gfHwgJGhpID1+IC9cVy8pOworCX0gZWxzZSB7CisJCSRrZXkgPSBsYygka2V5KTsKKwkJJGtleSA9fiBzL18vL2c7CisJCXJldHVybiBpZiAoJGtleSA9fiAvXFcvKTsKKwl9CisJJGtleSA9fiBzL15naXR3ZWJcLi8vOworCisJIyB0eXBlIHNhbml0eSBjaGVjaworCWlmIChkZWZpbmVkICR0eXBlKSB7CisJCSR0eXBlID1+IHMvXi0tLy87CisJCSR0eXBlID0gdW5kZWYKKwkJCXVubGVzcyAoJHR5cGUgZXEgJ2Jvb2wnIHx8ICR0eXBlIGVxICdpbnQnKTsKKwl9CisKKwkjIGdldCBjb25maWcKKwlpZiAoIWRlZmluZWQgJGNvbmZpZ19maWxlIHx8CisJICAgICRjb25maWdfZmlsZSBuZSAiJGdpdF9kaXIvY29uZmlnIikgeworCQklY29uZmlnID0gZ2l0X3BhcnNlX3Byb2plY3RfY29uZmlnKCdnaXR3ZWInKTsKKwkJJGNvbmZpZ19maWxlID0gIiRnaXRfZGlyL2NvbmZpZyI7CisJfQorCisJIyBjaGVjayBpZiBjb25maWcgdmFyaWFibGUgKGtleSkgZXhpc3RzCisJcmV0dXJuIHVubGVzcyBleGlzdHMgJGNvbmZpZ3siZ2l0d2ViLiRrZXkifTsKKworCSMgZW5zdXJlIGdpdmVuIHR5cGUKKwlpZiAoIWRlZmluZWQgJHR5cGUpIHsKKwkJcmV0dXJuICRjb25maWd7ImdpdHdlYi4ka2V5In07CisJfSBlbHNpZiAoJHR5cGUgZXEgJ2Jvb2wnKSB7CisJCSMgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogJ2dpdCBjb25maWcgLS1ib29sJyByZXR1cm5zIHRydWUvZmFsc2UKKwkJcmV0dXJuIGNvbmZpZ190b19ib29sKCRjb25maWd7ImdpdHdlYi4ka2V5In0pID8gJ3RydWUnIDogJ2ZhbHNlJzsKKwl9IGVsc2lmICgkdHlwZSBlcSAnaW50JykgeworCQlyZXR1cm4gY29uZmlnX3RvX2ludCgkY29uZmlneyJnaXR3ZWIuJGtleSJ9KTsKKwl9CisJcmV0dXJuICRjb25maWd7ImdpdHdlYi4ka2V5In07Cit9CisKKyMgZ2V0IGhhc2ggb2YgZ2l2ZW4gcGF0aCBhdCBnaXZlbiByZWYKK3N1YiBnaXRfZ2V0X2hhc2hfYnlfcGF0aCB7CisJbXkgJGJhc2UgPSBzaGlmdDsKKwlteSAkcGF0aCA9IHNoaWZ0IHx8IHJldHVybiB1bmRlZjsKKwlteSAkdHlwZSA9IHNoaWZ0OworCisJJHBhdGggPX4gcywvKyQsLDsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJscy10cmVlIiwgJGJhc2UsICItLSIsICRwYXRoCisJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1scy10cmVlIGZhaWxlZCIpOworCW15ICRsaW5lID0gPCRmZD47CisJY2xvc2UgJGZkIG9yIHJldHVybiB1bmRlZjsKKworCWlmICghZGVmaW5lZCAkbGluZSkgeworCQkjIHRoZXJlIGlzIG5vIHRyZWUgb3IgaGFzaCBnaXZlbiBieSAkcGF0aCBhdCAkYmFzZQorCQlyZXR1cm4gdW5kZWY7CisJfQorCisJIycxMDA2NDQgYmxvYiAwZmEzZjNhNjZmYjZhMTM3ZjZlYzJjMTkzNTFlZDRkODA3MDcwZmZhCXBhbmljLmMnCisJJGxpbmUgPX4gbS9eKFswLTldKykgKC4rKSAoJG9pZF9yZWdleClcdC87CisJaWYgKGRlZmluZWQgJHR5cGUgJiYgJHR5cGUgbmUgJDIpIHsKKwkJIyB0eXBlIGRvZXNuJ3QgbWF0Y2gKKwkJcmV0dXJuIHVuZGVmOworCX0KKwlyZXR1cm4gJDM7Cit9CisKKyMgZ2V0IHBhdGggb2YgZW50cnkgd2l0aCBnaXZlbiBoYXNoIGF0IGdpdmVuIHRyZWUtaXNoIChyZWYpCisjIHVzZWQgdG8gZ2V0ICdmcm9tJyBmaWxlbmFtZSBmb3IgY29tYmluZWQgZGlmZiAobWVyZ2UgY29tbWl0KSBmb3IgcmVuYW1lcworc3ViIGdpdF9nZXRfcGF0aF9ieV9oYXNoIHsKKwlteSAkYmFzZSA9IHNoaWZ0IHx8IHJldHVybjsKKwlteSAkaGFzaCA9IHNoaWZ0IHx8IHJldHVybjsKKworCWxvY2FsICQvID0gIlwwIjsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJscy10cmVlIiwgJy1yJywgJy10JywgJy16JywgJGJhc2UKKwkJb3IgcmV0dXJuIHVuZGVmOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCisJCSMnMDQwMDAwIHRyZWUgNTk1NTk2YTZhOTExN2RkYmE5ZmUzNzliNmIwMTJiNTU4YmFjODQyMwlnaXR3ZWInCisJCSMnMTAwNjQ0IGJsb2IgZTAyZTkwZjA0MjliZTBkMmE2OWI3NjU3MTEwMWYyMGI4Zjc1NTMwZglnaXR3ZWIvUkVBRE1FJworCQlpZiAoJGxpbmUgPX4gbS8oPzpbMC05XSspICg/Oi4rKSAkaGFzaFx0KC4rKSQvKSB7CisJCQljbG9zZSAkZmQ7CisJCQlyZXR1cm4gJDE7CisJCX0KKwl9CisJY2xvc2UgJGZkOworCXJldHVybiB1bmRlZjsKK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgZ2l0IHV0aWxpdHkgZnVuY3Rpb25zLCBkaXJlY3RseSBhY2Nlc3NpbmcgZ2l0IHJlcG9zaXRvcnkKKworIyBnZXQgdGhlIHZhbHVlIG9mIGNvbmZpZyB2YXJpYWJsZSBlaXRoZXIgZnJvbSBmaWxlIG5hbWVkIGFzIHRoZSB2YXJpYWJsZQorIyBpdHNlbGYgaW4gdGhlIHJlcG9zaXRvcnkgKCRHSVRfRElSLyRuYW1lIGZpbGUpLCBvciBmcm9tIGdpdHdlYi4kbmFtZQorIyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluIHRoZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlLgorc3ViIGdpdF9nZXRfZmlsZV9vcl9wcm9qZWN0X2NvbmZpZyB7CisJbXkgKCRwYXRoLCAkbmFtZSkgPSBAXzsKKworCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7CisJb3BlbiBteSAkZmQsICc8JywgIiRnaXRfZGlyLyRuYW1lIgorCQlvciByZXR1cm4gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygkbmFtZSk7CisJbXkgJGNvbmYgPSA8JGZkPjsKKwljbG9zZSAkZmQ7CisJaWYgKGRlZmluZWQgJGNvbmYpIHsKKwkJY2hvbXAgJGNvbmY7CisJfQorCXJldHVybiAkY29uZjsKK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbiB7CisJbXkgJHBhdGggPSBzaGlmdDsKKwlyZXR1cm4gZ2l0X2dldF9maWxlX29yX3Byb2plY3RfY29uZmlnKCRwYXRoLCAnZGVzY3JpcHRpb24nKTsKK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9jYXRlZ29yeSB7CisJbXkgJHBhdGggPSBzaGlmdDsKKwlyZXR1cm4gZ2l0X2dldF9maWxlX29yX3Byb2plY3RfY29uZmlnKCRwYXRoLCAnY2F0ZWdvcnknKTsKK30KKworCisjIHN1cHBvcnRlZCBmb3JtYXRzOgorIyAqICRHSVRfRElSL2N0YWdzLzx0YWduYW1lPiBmaWxlIChpbiAnY3RhZ3MnIHN1YmRpcmVjdG9yeSkKKyMgICAtIGlmIGl0cyBjb250ZW50cyBpcyBhIG51bWJlciwgdXNlIGl0IGFzIHRhZyB3ZWlnaHQsCisjICAgLSBvdGhlcndpc2UgYWRkIGEgdGFnIHdpdGggd2VpZ2h0IDEKKyMgKiAkR0lUX0RJUi9jdGFncyBmaWxlLCBlYWNoIGxpbmUgaXMgYSB0YWcgKHdpdGggd2VpZ2h0IDEpCisjICAgdGhlIHNhbWUgdmFsdWUgbXVsdGlwbGUgdGltZXMgaW5jcmVhc2VzIHRhZyB3ZWlnaHQKKyMgKiBgZ2l0d2ViLmN0YWcnIG11bHRpLXZhbHVlZCByZXBvIGNvbmZpZyB2YXJpYWJsZQorc3ViIGdpdF9nZXRfcHJvamVjdF9jdGFncyB7CisJbXkgJHByb2plY3QgPSBzaGlmdDsKKwlteSAkY3RhZ3MgPSB7fTsKKworCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCI7CisJaWYgKG9wZW5kaXIgbXkgJGRoLCAiJGdpdF9kaXIvY3RhZ3MiKSB7CisJCW15IEBmaWxlcyA9IGdyZXAgeyAtZiAkXyB9IG1hcCB7ICIkZ2l0X2Rpci9jdGFncy8kXyIgfSByZWFkZGlyKCRkaCk7CisJCWZvcmVhY2ggbXkgJHRhZ2ZpbGUgKEBmaWxlcykgeworCQkJb3BlbiBteSAkY3QsICc8JywgJHRhZ2ZpbGUKKwkJCQlvciBuZXh0OworCQkJbXkgJHZhbCA9IDwkY3Q+OworCQkJY2hvbXAgJHZhbCBpZiAkdmFsOworCQkJY2xvc2UgJGN0OworCisJCQkobXkgJGN0YWcgPSAkdGFnZmlsZSkgPX4gcyMuKi8jIzsKKwkJCWlmICgkdmFsID1+IC9eXGQrJC8pIHsKKwkJCQkkY3RhZ3MtPnskY3RhZ30gPSAkdmFsOworCQkJfSBlbHNlIHsKKwkJCQkkY3RhZ3MtPnskY3RhZ30gPSAxOworCQkJfQorCQl9CisJCWNsb3NlZGlyICRkaDsKKworCX0gZWxzaWYgKG9wZW4gbXkgJGZoLCAnPCcsICIkZ2l0X2Rpci9jdGFncyIpIHsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJJGN0YWdzLT57JGxpbmV9KysgaWYgJGxpbmU7CisJCX0KKwkJY2xvc2UgJGZoOworCisJfSBlbHNlIHsKKwkJbXkgJHRhZ2xpc3QgPSBjb25maWdfdG9fbXVsdGkoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnY3RhZycpKTsKKwkJZm9yZWFjaCBteSAkdGFnIChAJHRhZ2xpc3QpIHsKKwkJCSRjdGFncy0+eyR0YWd9Kys7CisJCX0KKwl9CisKKwlyZXR1cm4gJGN0YWdzOworfQorCisjIHJldHVybiBoYXNoLCB3aGVyZSBrZXlzIGFyZSBjb250ZW50IHRhZ3MgKCdjdGFncycpLAorIyBhbmQgdmFsdWVzIGFyZSBzdW0gb2Ygd2VpZ2h0cyBvZiBnaXZlbiB0YWcgaW4gZXZlcnkgcHJvamVjdAorc3ViIGdpdF9nYXRoZXJfYWxsX2N0YWdzIHsKKwlteSAkcHJvamVjdHMgPSBzaGlmdDsKKwlteSAkY3RhZ3MgPSB7fTsKKworCWZvcmVhY2ggbXkgJHAgKEAkcHJvamVjdHMpIHsKKwkJZm9yZWFjaCBteSAkY3QgKGtleXMgJXskcC0+eydjdGFncyd9fSkgeworCQkJJGN0YWdzLT57JGN0fSArPSAkcC0+eydjdGFncyd9LT57JGN0fTsKKwkJfQorCX0KKworCXJldHVybiAkY3RhZ3M7Cit9CisKK3N1YiBnaXRfcG9wdWxhdGVfcHJvamVjdF90YWdjbG91ZCB7CisJbXkgJGN0YWdzID0gc2hpZnQ7CisKKwkjIEZpcnN0LCBtZXJnZSBkaWZmZXJlbnQtY2FzZWQgdGFnczsgdGFncyB2b3RlIG9uIGNhc2luZworCW15ICVjdGFnc19sYzsKKwlmb3JlYWNoIChrZXlzICUkY3RhZ3MpIHsKKwkJJGN0YWdzX2xje2xjICRffS0+e2NvdW50fSArPSAkY3RhZ3MtPnskX307CisJCWlmIChub3QgJGN0YWdzX2xje2xjICRffS0+e3RvcGNvdW50fQorCQkgICAgb3IgJGN0YWdzX2xje2xjICRffS0+e3RvcGNvdW50fSA8ICRjdGFncy0+eyRffSkgeworCQkJJGN0YWdzX2xje2xjICRffS0+e3RvcGNvdW50fSA9ICRjdGFncy0+eyRffTsKKwkJCSRjdGFnc19sY3tsYyAkX30tPnt0b3BuYW1lfSA9ICRfOworCQl9CisJfQorCisJbXkgJGNsb3VkOworCW15ICRtYXRjaGVkID0gJGlucHV0X3BhcmFtc3snY3RhZyd9OworCWlmIChldmFsIHsgcmVxdWlyZSBIVE1MOjpUYWdDbG91ZDsgMTsgfSkgeworCQkkY2xvdWQgPSBIVE1MOjpUYWdDbG91ZC0+bmV3OworCQlmb3JlYWNoIG15ICRjdGFnIChzb3J0IGtleXMgJWN0YWdzX2xjKSB7CisJCQkjIFBhZCB0aGUgdGl0bGUgd2l0aCBzcGFjZXMgc28gdGhhdCB0aGUgY2xvdWQgbG9va3MKKwkJCSMgbGVzcyBjcmFtbWVkLgorCQkJbXkgJHRpdGxlID0gZXNjX2h0bWwoJGN0YWdzX2xjeyRjdGFnfS0+e3RvcG5hbWV9KTsKKwkJCSR0aXRsZSA9fiBzLyAvJm5ic3A7L2c7CisJCQkkdGl0bGUgPX4gcy9eLyZuYnNwOy9nOworCQkJJHRpdGxlID1+IHMvJC8mbmJzcDsvZzsKKwkJCWlmIChkZWZpbmVkICRtYXRjaGVkICYmICRtYXRjaGVkIGVxICRjdGFnKSB7CisJCQkJJHRpdGxlID0gcXEoPHNwYW4gY2xhc3M9Im1hdGNoIj4kdGl0bGU8L3NwYW4+KTsKKwkJCX0KKwkJCSRjbG91ZC0+YWRkKCR0aXRsZSwgaHJlZihwcm9qZWN0PT51bmRlZiwgY3RhZz0+JGN0YWcpLAorCQkJICAgICAgICAgICAgJGN0YWdzX2xjeyRjdGFnfS0+e2NvdW50fSk7CisJCX0KKwl9IGVsc2UgeworCQkkY2xvdWQgPSB7fTsKKwkJZm9yZWFjaCBteSAkY3RhZyAoa2V5cyAlY3RhZ3NfbGMpIHsKKwkJCW15ICR0aXRsZSA9IGVzY19odG1sKCRjdGFnc19sY3skY3RhZ30tPnt0b3BuYW1lfSwgLW5ic3A9PjEpOworCQkJaWYgKGRlZmluZWQgJG1hdGNoZWQgJiYgJG1hdGNoZWQgZXEgJGN0YWcpIHsKKwkJCQkkdGl0bGUgPSBxcSg8c3BhbiBjbGFzcz0ibWF0Y2giPiR0aXRsZTwvc3Bhbj4pOworCQkJfQorCQkJJGNsb3VkLT57JGN0YWd9e2NvdW50fSA9ICRjdGFnc19sY3skY3RhZ30tPntjb3VudH07CisJCQkkY2xvdWQtPnskY3RhZ317Y3RhZ30gPQorCQkJCSRjZ2ktPmEoey1ocmVmPT5ocmVmKHByb2plY3Q9PnVuZGVmLCBjdGFnPT4kY3RhZyl9LCAkdGl0bGUpOworCQl9CisJfQorCXJldHVybiAkY2xvdWQ7Cit9CisKK3N1YiBnaXRfc2hvd19wcm9qZWN0X3RhZ2Nsb3VkIHsKKwlteSAoJGNsb3VkLCAkY291bnQpID0gQF87CisJaWYgKHJlZiAkY2xvdWQgZXEgJ0hUTUw6OlRhZ0Nsb3VkJykgeworCQlyZXR1cm4gJGNsb3VkLT5odG1sX2FuZF9jc3MoJGNvdW50KTsKKwl9IGVsc2UgeworCQlteSBAdGFncyA9IHNvcnQgeyAkY2xvdWQtPnskYX0tPnsnY291bnQnfSA8PT4gJGNsb3VkLT57JGJ9LT57J2NvdW50J30gfSBrZXlzICUkY2xvdWQ7CisJCXJldHVybgorCQkJJzxkaXYgaWQ9Imh0bWx0YWdjbG91ZCInLigkcHJvamVjdCA/ICcnIDogJyBhbGlnbj0iY2VudGVyIicpLic+JyAuCisJCQlqb2luICgnLCAnLCBtYXAgeworCQkJCSRjbG91ZC0+eyRffS0+eydjdGFnJ30KKwkJCX0gc3BsaWNlKEB0YWdzLCAwLCAkY291bnQpKSAuCisJCQknPC9kaXY+JzsKKwl9Cit9CisKK3N1YiBnaXRfZ2V0X3Byb2plY3RfdXJsX2xpc3QgeworCW15ICRwYXRoID0gc2hpZnQ7CisKKwkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHBhdGgiOworCW9wZW4gbXkgJGZkLCAnPCcsICIkZ2l0X2Rpci9jbG9uZXVybCIKKwkJb3IgcmV0dXJuIHdhbnRhcnJheSA/CisJCUB7IGNvbmZpZ190b19tdWx0aShnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCd1cmwnKSkgfSA6CisJCSAgIGNvbmZpZ190b19tdWx0aShnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCd1cmwnKSk7CisJbXkgQGdpdF9wcm9qZWN0X3VybF9saXN0ID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJY2xvc2UgJGZkOworCisJcmV0dXJuIHdhbnRhcnJheSA/IEBnaXRfcHJvamVjdF91cmxfbGlzdCA6IFxAZ2l0X3Byb2plY3RfdXJsX2xpc3Q7Cit9CisKK3N1YiBnaXRfZ2V0X3Byb2plY3RzX2xpc3QgeworCW15ICRmaWx0ZXIgPSBzaGlmdCB8fCAnJzsKKwlteSAkcGFyYW5vaWQgPSBzaGlmdDsKKwlteSBAbGlzdDsKKworCWlmICgtZCAkcHJvamVjdHNfbGlzdCkgeworCQkjIHNlYXJjaCBpbiBkaXJlY3RvcnkKKwkJbXkgJGRpciA9ICRwcm9qZWN0c19saXN0OworCQkjIHJlbW92ZSB0aGUgdHJhaWxpbmcgIi8iCisJCSRkaXIgPX4gcyEvKyQhITsKKwkJbXkgJHBmeGxlbiA9IGxlbmd0aCgiJGRpciIpOworCQlteSAkcGZ4ZGVwdGggPSAoJGRpciA9fiB0ciEvISEpOworCQkjIHdoZW4gZmlsdGVyaW5nLCBzZWFyY2ggb25seSBnaXZlbiBzdWJkaXJlY3RvcnkKKwkJaWYgKCRmaWx0ZXIgJiYgISRwYXJhbm9pZCkgeworCQkJJGRpciAuPSAiLyRmaWx0ZXIiOworCQkJJGRpciA9fiBzIS8rJCEhOworCQl9CisKKwkJRmlsZTo6RmluZDo6ZmluZCh7CisJCQlmb2xsb3dfZmFzdCA9PiAxLCAjIGZvbGxvdyBzeW1ib2xpYyBsaW5rcworCQkJZm9sbG93X3NraXAgPT4gMiwgIyBpZ25vcmUgZHVwbGljYXRlcworCQkJZGFuZ2xpbmdfc3ltbGlua3MgPT4gMCwgIyBpZ25vcmUgZGFuZ2xpbmcgc3ltbGlua3MsIHNpbGVudGx5CisJCQl3YW50ZWQgPT4gc3ViIHsKKwkJCQkjIGdsb2JhbCB2YXJpYWJsZXMKKwkJCQlvdXIgJHByb2plY3RfbWF4ZGVwdGg7CisJCQkJb3VyICRwcm9qZWN0cm9vdDsKKwkJCQkjIHNraXAgcHJvamVjdC1saXN0IHRvcGxldmVsLCBpZiB3ZSBnZXQgaXQuCisJCQkJcmV0dXJuIGlmIChtIV5bLy5dJCEpOworCQkJCSMgb25seSBkaXJlY3RvcmllcyBjYW4gYmUgZ2l0IHJlcG9zaXRvcmllcworCQkJCXJldHVybiB1bmxlc3MgKC1kICRfKTsKKwkJCQkjIG5lZWQgc2VhcmNoIHBlcm1pc3Npb24KKwkJCQlyZXR1cm4gdW5sZXNzICgteCAkXyk7CisJCQkJIyBkb24ndCB0cmF2ZXJzZSB0b28gZGVlcCAoRmluZCBpcyBzdXBlciBzbG93IG9uIG9zIHgpCisJCQkJIyAkcHJvamVjdF9tYXhkZXB0aCBleGNsdWRlcyBkZXB0aCBvZiAkcHJvamVjdHJvb3QKKwkJCQlpZiAoKCRGaWxlOjpGaW5kOjpuYW1lID1+IHRyIS8hISkgLSAkcGZ4ZGVwdGggPiAkcHJvamVjdF9tYXhkZXB0aCkgeworCQkJCQkkRmlsZTo6RmluZDo6cHJ1bmUgPSAxOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJbXkgJHBhdGggPSBzdWJzdHIoJEZpbGU6OkZpbmQ6Om5hbWUsICRwZnhsZW4gKyAxKTsKKwkJCQkjIHBhcmFub2lkbHkgb25seSBmaWx0ZXIgaGVyZQorCQkJCWlmICgkcGFyYW5vaWQgJiYgJGZpbHRlciAmJiAkcGF0aCAhfiBtIV5cUSRmaWx0ZXJcRS8hKSB7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCSMgd2UgY2hlY2sgcmVsYXRlZCBmaWxlIGluICRwcm9qZWN0cm9vdAorCQkJCWlmIChjaGVja19leHBvcnRfb2soIiRwcm9qZWN0cm9vdC8kcGF0aCIpKSB7CisJCQkJCXB1c2ggQGxpc3QsIHsgcGF0aCA9PiAkcGF0aCB9OworCQkJCQkkRmlsZTo6RmluZDo6cHJ1bmUgPSAxOworCQkJCX0KKwkJCX0sCisJCX0sICIkZGlyIik7CisKKwl9IGVsc2lmICgtZiAkcHJvamVjdHNfbGlzdCkgeworCQkjIHJlYWQgZnJvbSBmaWxlKHVybC1lbmNvZGVkKToKKwkJIyAnZ2l0JTJGZ2l0LmdpdCBMaW51cytUb3J2YWxkcycKKwkJIyAnbGlicyUyRmtsaWJjJTJGa2xpYmMuZ2l0IEguK1BldGVyK0FudmluJworCQkjICdsaW51eCUyRmhvdHBsdWclMkZ1ZGV2LmdpdCBHcmVnK0tyb2FoLUhhcnRtYW4nCisJCW9wZW4gbXkgJGZkLCAnPCcsICRwcm9qZWN0c19saXN0IG9yIHJldHVybjsKKwlQUk9KRUNUOgorCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQlteSAoJHBhdGgsICRvd25lcikgPSBzcGxpdCAnICcsICRsaW5lOworCQkJJHBhdGggPSB1bmVzY2FwZSgkcGF0aCk7CisJCQkkb3duZXIgPSB1bmVzY2FwZSgkb3duZXIpOworCQkJaWYgKCFkZWZpbmVkICRwYXRoKSB7CisJCQkJbmV4dDsKKwkJCX0KKwkJCSMgaWYgJGZpbHRlciBpcyBycG92aWRlZCwgY2hlY2sgaWYgJHBhdGggYmVnaW5zIHdpdGggJGZpbHRlcgorCQkJaWYgKCRmaWx0ZXIgJiYgJHBhdGggIX4gbSFeXFEkZmlsdGVyXEUvISkgeworCQkJCW5leHQ7CisJCQl9CisJCQlpZiAoY2hlY2tfZXhwb3J0X29rKCIkcHJvamVjdHJvb3QvJHBhdGgiKSkgeworCQkJCW15ICRwciA9IHsKKwkJCQkJcGF0aCA9PiAkcGF0aAorCQkJCX07CisJCQkJaWYgKCRvd25lcikgeworCQkJCQkkcHItPnsnb3duZXInfSA9IHRvX3V0ZjgoJG93bmVyKTsKKwkJCQl9CisJCQkJcHVzaCBAbGlzdCwgJHByOworCQkJfQorCQl9CisJCWNsb3NlICRmZDsKKwl9CisJcmV0dXJuIEBsaXN0OworfQorCisjIHdyaXR0ZW4gd2l0aCBoZWxwIG9mIFRyZWU6OlRyaWUgbW9kdWxlIChQZXJsIEFydGlzdGljIExpY2Vuc2UsIEdQTCBjb21wYXRpYmxlKQorIyBhcyBzaWRlIGVmZmVjdHMgaXQgc2V0cyAnZm9ya3MnIGZpZWxkIHRvIGxpc3Qgb2YgZm9ya3MgZm9yIGZvcmtlZCBwcm9qZWN0cworc3ViIGZpbHRlcl9mb3Jrc19mcm9tX3Byb2plY3RzX2xpc3QgeworCW15ICRwcm9qZWN0cyA9IHNoaWZ0OworCisJbXkgJXRyaWU7ICMgcHJlZml4IHRyZWUgb2YgZGlyZWN0b3JpZXMgKHBhdGggY29tcG9uZW50cykKKwkjIGdlbmVyYXRlIHRyaWUgb3V0IG9mIHRob3NlIGRpcmVjdG9yaWVzIHRoYXQgbWlnaHQgY29udGFpbiBmb3JrcworCWZvcmVhY2ggbXkgJHByIChAJHByb2plY3RzKSB7CisJCW15ICRwYXRoID0gJHByLT57J3BhdGgnfTsKKwkJJHBhdGggPX4gcy9cLmdpdCQvLzsgICAgICAjIGZvcmtzIG9mICdyZXBvLmdpdCcgYXJlIGluICdyZXBvLycgZGlyZWN0b3J5CisJCW5leHQgaWYgKCRwYXRoID1+IG0hLyQhKTsgIyBza2lwIG5vbi1iYXJlIHJlcG9zaXRvcmllcywgZS5nLiAncmVwby8uZ2l0JworCQluZXh0IHVubGVzcyAoJHBhdGgpOyAgICAgICMgc2tpcCAnLmdpdCcgcmVwb3NpdG9yeTogdGVzdHMsIGdpdC1pbnN0YXdlYgorCQluZXh0IHVubGVzcyAoLWQgIiRwcm9qZWN0cm9vdC8kcGF0aCIpOyAjIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGV4aXN0cworCQkkcHItPnsnZm9ya3MnfSA9IFtdOyAgICAgICMgdGhlcmUgY2FuIGJlIDAgb3IgbW9yZSBmb3JrcyBvZiBwcm9qZWN0CisKKwkJIyBhZGQgdG8gdHJpZQorCQlteSBAZGlycyA9IHNwbGl0KCcvJywgJHBhdGgpOworCQkjIHdhbGsgdGhlIHRyaWUsIHVudGlsIGVpdGhlciBydW5zIG91dCBvZiBjb21wb25lbnRzIG9yIG91dCBvZiB0cmllCisJCW15ICRyZWYgPSBcJXRyaWU7CisJCXdoaWxlIChzY2FsYXIgQGRpcnMgJiYKKwkJICAgICAgIGV4aXN0cygkcmVmLT57JGRpcnNbMF19KSkgeworCQkJJHJlZiA9ICRyZWYtPntzaGlmdCBAZGlyc307CisJCX0KKwkJIyBjcmVhdGUgcmVzdCBvZiB0cmllIHN0cnVjdHVyZSBmcm9tIHJlc3Qgb2YgY29tcG9uZW50cworCQlmb3JlYWNoIG15ICRkaXIgKEBkaXJzKSB7CisJCQkkcmVmID0gJHJlZi0+eyRkaXJ9ID0ge307CisJCX0KKwkJIyBjcmVhdGUgZW5kIG1hcmtlciwgc3RvcmUgJHByIGFzIGEgZGF0YQorCQkkcmVmLT57Jyd9ID0gJHByIGlmICghZXhpc3RzICRyZWYtPnsnJ30pOworCX0KKworCSMgZmlsdGVyIG91dCBmb3JrcywgYnkgZmluZGluZyBzaG9ydGVzdCBwcmVmaXggbWF0Y2ggZm9yIHBhdGhzCisJbXkgQGZpbHRlcmVkOworIFBST0pFQ1Q6CisJZm9yZWFjaCBteSAkcHIgKEAkcHJvamVjdHMpIHsKKwkJIyB0cmllIGxvb2t1cAorCQlteSAkcmVmID0gXCV0cmllOworCURJUjoKKwkJZm9yZWFjaCBteSAkZGlyIChzcGxpdCgnLycsICRwci0+eydwYXRoJ30pKSB7CisJCQlpZiAoZXhpc3RzICRyZWYtPnsnJ30pIHsKKwkJCQkjIGZvdW5kIFtzaG9ydGVzdF0gcHJlZml4LCBpcyBhIGZvcmsgLSBza2lwIGl0CisJCQkJcHVzaCBAeyRyZWYtPnsnJ317J2ZvcmtzJ319LCAkcHI7CisJCQkJbmV4dCBQUk9KRUNUOworCQkJfQorCQkJaWYgKCFleGlzdHMgJHJlZi0+eyRkaXJ9KSB7CisJCQkJIyBub3QgaW4gdHJpZSwgY2Fubm90IGhhdmUgcHJlZml4LCBub3QgYSBmb3JrCisJCQkJcHVzaCBAZmlsdGVyZWQsICRwcjsKKwkJCQluZXh0IFBST0pFQ1Q7CisJCQl9CisJCQkjIElmIHRoZSBkaXIgaXMgdGhlcmUsIHdlIGp1c3Qgd2FsayBvbmUgc3RlcCBkb3duIHRoZSB0cmllLgorCQkJJHJlZiA9ICRyZWYtPnskZGlyfTsKKwkJfQorCQkjIHdlIHJhbiBvdXQgb2YgdHJpZQorCQkjIChzaG91bGRuJ3QgaGFwcGVuOiBpdCdzIGVpdGhlciBubyBtYXRjaCwgb3IgZW5kIG1hcmtlcikKKwkJcHVzaCBAZmlsdGVyZWQsICRwcjsKKwl9CisKKwlyZXR1cm4gQGZpbHRlcmVkOworfQorCisjIG5vdGU6IGZpbGxfcHJvamVjdF9saXN0X2luZm8gbXVzdCBiZSBydW4gZmlyc3QsCisjIGZvciAnZGVzY3JfbG9uZycgYW5kICdjdGFncycgdG8gYmUgZmlsbGVkCitzdWIgc2VhcmNoX3Byb2plY3RzX2xpc3QgeworCW15ICgkcHJvamxpc3QsICVvcHRzKSA9IEBfOworCW15ICR0YWdmaWx0ZXIgID0gJG9wdHN7J3RhZ2ZpbHRlcid9OworCW15ICRzZWFyY2hfcmUgPSAkb3B0c3snc2VhcmNoX3JlZ2V4cCd9OworCisJcmV0dXJuIEAkcHJvamxpc3QKKwkJdW5sZXNzICgkdGFnZmlsdGVyIHx8ICRzZWFyY2hfcmUpOworCisJIyBzZWFyY2hpbmcgcHJvamVjdHMgcmVxdWlyZSBmaWxsaW5nIHRvIGJlIHJ1biBiZWZvcmUgaXQ7CisJZmlsbF9wcm9qZWN0X2xpc3RfaW5mbygkcHJvamxpc3QsCisJICAgICAgICAgICAgICAgICAgICAgICAkdGFnZmlsdGVyICA/ICdjdGFncycgOiAoKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hfcmUgPyAoJ3BhdGgnLCAnZGVzY3InKSA6ICgpKTsKKwlteSBAcHJvamVjdHM7CisgUFJPSkVDVDoKKwlmb3JlYWNoIG15ICRwciAoQCRwcm9qbGlzdCkgeworCisJCWlmICgkdGFnZmlsdGVyKSB7CisJCQluZXh0IHVubGVzcyByZWYoJHByLT57J2N0YWdzJ30pIGVxICdIQVNIJzsKKwkJCW5leHQgdW5sZXNzCisJCQkJZ3JlcCB7IGxjKCRfKSBlcSBsYygkdGFnZmlsdGVyKSB9IGtleXMgJXskcHItPnsnY3RhZ3MnfX07CisJCX0KKworCQlpZiAoJHNlYXJjaF9yZSkgeworCQkJbmV4dCB1bmxlc3MKKwkJCQkkcHItPnsncGF0aCd9ID1+IC8kc2VhcmNoX3JlLyB8fAorCQkJCSRwci0+eydkZXNjcl9sb25nJ30gPX4gLyRzZWFyY2hfcmUvOworCQl9CisKKwkJcHVzaCBAcHJvamVjdHMsICRwcjsKKwl9CisKKwlyZXR1cm4gQHByb2plY3RzOworfQorCitvdXIgJGdpdHdlYl9wcm9qZWN0X293bmVyID0gdW5kZWY7CitzdWIgZ2l0X2dldF9wcm9qZWN0X2xpc3RfZnJvbV9maWxlIHsKKworCXJldHVybiBpZiAoZGVmaW5lZCAkZ2l0d2ViX3Byb2plY3Rfb3duZXIpOworCisJJGdpdHdlYl9wcm9qZWN0X293bmVyID0ge307CisJIyByZWFkIGZyb20gZmlsZSAodXJsLWVuY29kZWQpOgorCSMgJ2dpdCUyRmdpdC5naXQgTGludXMrVG9ydmFsZHMnCisJIyAnbGlicyUyRmtsaWJjJTJGa2xpYmMuZ2l0IEguK1BldGVyK0FudmluJworCSMgJ2xpbnV4JTJGaG90cGx1ZyUyRnVkZXYuZ2l0IEdyZWcrS3JvYWgtSGFydG1hbicKKwlpZiAoLWYgJHByb2plY3RzX2xpc3QpIHsKKwkJb3BlbihteSAkZmQsICc8JywgJHByb2plY3RzX2xpc3QpOworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQlteSAoJHByLCAkb3cpID0gc3BsaXQgJyAnLCAkbGluZTsKKwkJCSRwciA9IHVuZXNjYXBlKCRwcik7CisJCQkkb3cgPSB1bmVzY2FwZSgkb3cpOworCQkJJGdpdHdlYl9wcm9qZWN0X293bmVyLT57JHByfSA9IHRvX3V0ZjgoJG93KTsKKwkJfQorCQljbG9zZSAkZmQ7CisJfQorfQorCitzdWIgZ2l0X2dldF9wcm9qZWN0X293bmVyIHsKKwlteSAkcHJvamVjdCA9IHNoaWZ0OworCW15ICRvd25lcjsKKworCXJldHVybiB1bmRlZiB1bmxlc3MgJHByb2plY3Q7CisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0IjsKKworCWlmICghZGVmaW5lZCAkZ2l0d2ViX3Byb2plY3Rfb3duZXIpIHsKKwkJZ2l0X2dldF9wcm9qZWN0X2xpc3RfZnJvbV9maWxlKCk7CisJfQorCisJaWYgKGV4aXN0cyAkZ2l0d2ViX3Byb2plY3Rfb3duZXItPnskcHJvamVjdH0pIHsKKwkJJG93bmVyID0gJGdpdHdlYl9wcm9qZWN0X293bmVyLT57JHByb2plY3R9OworCX0KKwlpZiAoIWRlZmluZWQgJG93bmVyKXsKKwkJJG93bmVyID0gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnb3duZXInKTsKKwl9CisJaWYgKCFkZWZpbmVkICRvd25lcikgeworCQkkb3duZXIgPSBnZXRfZmlsZV9vd25lcigiJGdpdF9kaXIiKTsKKwl9CisKKwlyZXR1cm4gJG93bmVyOworfQorCitzdWIgZ2l0X2dldF9sYXN0X2FjdGl2aXR5IHsKKwlteSAoJHBhdGgpID0gQF87CisJbXkgJGZkOworCisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwYXRoIjsKKwlvcGVuKCRmZCwgIi18IiwgZ2l0X2NtZCgpLCAnZm9yLWVhY2gtcmVmJywKKwkgICAgICctLWZvcm1hdD0lKGNvbW1pdHRlciknLAorCSAgICAgJy0tc29ydD0tY29tbWl0dGVyZGF0ZScsCisJICAgICAnLS1jb3VudD0xJywKKwkgICAgIG1hcCB7ICJyZWZzLyRfIiB9IGdldF9icmFuY2hfcmVmcyAoKSkgb3IgcmV0dXJuOworCW15ICRtb3N0X3JlY2VudCA9IDwkZmQ+OworCWNsb3NlICRmZCBvciByZXR1cm47CisJaWYgKGRlZmluZWQgJG1vc3RfcmVjZW50ICYmCisJICAgICRtb3N0X3JlY2VudCA9fiAvIChcZCspIFstK11bMDFdXGRcZFxkJC8pIHsKKwkJbXkgJHRpbWVzdGFtcCA9ICQxOworCQlteSAkYWdlID0gdGltZSAtICR0aW1lc3RhbXA7CisJCXJldHVybiAoJGFnZSwgYWdlX3N0cmluZygkYWdlKSk7CisJfQorCXJldHVybiAodW5kZWYsIHVuZGVmKTsKK30KKworIyBJbXBsZW1lbnRhdGlvbiBub3RlOiB3aGVuIGEgc2luZ2xlIHJlbW90ZSBpcyB3YW50ZWQsIHdlIGNhbm5vdCB1c2UgJ2dpdAorIyByZW1vdGUgc2hvdyAtbicgYmVjYXVzZSB0aGF0IGNvbW1hbmQgYWx3YXlzIHdvcmsgKGFzc3VtaW5nIGl0J3MgYSByZW1vdGUgVVJMCisjIGlmIGl0J3Mgbm90IGRlZmluZWQpLCBhbmQgd2UgY2Fubm90IHVzZSAnZ2l0IHJlbW90ZSBzaG93JyBiZWNhdXNlIHRoYXQgd291bGQKKyMgdHJ5IHRvIG1ha2UgYSBuZXR3b3JrIHJvdW5kdHJpcC4gU28gdGhlIG9ubHkgd2F5IHRvIGZpbmQgaWYgdGhhdCBwYXJ0aWN1bGFyCisjIHJlbW90ZSBpcyBkZWZpbmVkIGlzIHRvIHdhbGsgdGhlIGxpc3QgcHJvdmlkZWQgYnkgJ2dpdCByZW1vdGUgLXYnIGFuZCBzdG9wIGlmCisjIGFuZCB3aGVuIHdlIGZpbmQgd2hhdCB3ZSB3YW50Lgorc3ViIGdpdF9nZXRfcmVtb3Rlc19saXN0IHsKKwlteSAkd2FudGVkID0gc2hpZnQ7CisJbXkgJXJlbW90ZXMgPSAoKTsKKworCW9wZW4gbXkgJGZkLCAnLXwnICwgZ2l0X2NtZCgpLCAncmVtb3RlJywgJy12JzsKKwlyZXR1cm4gdW5sZXNzICRmZDsKKwl3aGlsZSAobXkgJHJlbW90ZSA9IDwkZmQ+KSB7CisJCWNob21wICRyZW1vdGU7CisJCSRyZW1vdGUgPX4gcyFcdCguKj8pXHMrXCgoXHcrKVwpJCEhOworCQluZXh0IGlmICR3YW50ZWQgYW5kIG5vdCAkcmVtb3RlIGVxICR3YW50ZWQ7CisJCW15ICgkdXJsLCAka2V5KSA9ICgkMSwgJDIpOworCisJCSRyZW1vdGVzeyRyZW1vdGV9IHx8PSB7ICdoZWFkcycgPT4gKCkgfTsKKwkJJHJlbW90ZXN7JHJlbW90ZX17JGtleX0gPSAkdXJsOworCX0KKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCXJldHVybiB3YW50YXJyYXkgPyAlcmVtb3RlcyA6IFwlcmVtb3RlczsKK30KKworIyBUYWtlcyBhIGhhc2ggb2YgcmVtb3RlcyBhcyBmaXJzdCBwYXJhbWV0ZXIgYW5kIGZpbGxzIGl0IGJ5IGFkZGluZyB0aGUKKyMgYXZhaWxhYmxlIHJlbW90ZSBoZWFkcyBmb3IgZWFjaCBvZiB0aGUgaW5kaWNhdGVkIHJlbW90ZXMuCitzdWIgZmlsbF9yZW1vdGVfaGVhZHMgeworCW15ICRyZW1vdGVzID0gc2hpZnQ7CisJbXkgQGhlYWRzID0gbWFwIHsgInJlbW90ZXMvJF8iIH0ga2V5cyAlJHJlbW90ZXM7CisJbXkgQHJlbW90ZWhlYWRzID0gZ2l0X2dldF9oZWFkc19saXN0KHVuZGVmLCBAaGVhZHMpOworCWZvcmVhY2ggbXkgJHJlbW90ZSAoa2V5cyAlJHJlbW90ZXMpIHsKKwkJJHJlbW90ZXMtPnskcmVtb3RlfXsnaGVhZHMnfSA9IFsgZ3JlcCB7CisJCQkkXy0+eyduYW1lJ30gPX4gcyFeJHJlbW90ZS8hIQorCQkJfSBAcmVtb3RlaGVhZHMgXTsKKwl9Cit9CisKK3N1YiBnaXRfZ2V0X3JlZmVyZW5jZXMgeworCW15ICR0eXBlID0gc2hpZnQgfHwgIiI7CisJbXkgJXJlZnM7CisJIyA1ZGMwMWM1OTVlNmM2ZWM5Y2NkYTRmNmY2OWMxMzFjMGRkOTQ1ZjhjIHJlZnMvdGFncy92Mi42LjExCisJIyBjMzlhZTA3ZjM5MzgwNmNjZjQwNmVmOTY2ZTlhMTVhZmM0M2NjMzZhIHJlZnMvdGFncy92Mi42LjExXnt9CisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgInNob3ctcmVmIiwgIi0tZGVyZWZlcmVuY2UiLAorCQkoJHR5cGUgPyAoIi0tIiwgInJlZnMvJHR5cGUiKSA6ICgpKSAjIHVzZSAtLSA8cGF0dGVybj4gaWYgJHR5cGUKKwkJb3IgcmV0dXJuOworCisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJY2hvbXAgJGxpbmU7CisJCWlmICgkbGluZSA9fiBtIV4oJG9pZF9yZWdleClcc3JlZnMvKCR0eXBlLiopJCEpIHsKKwkJCWlmIChkZWZpbmVkICRyZWZzeyQxfSkgeworCQkJCXB1c2ggQHskcmVmc3skMX19LCAkMjsKKwkJCX0gZWxzZSB7CisJCQkJJHJlZnN7JDF9ID0gWyAkMiBdOworCQkJfQorCQl9CisJfQorCWNsb3NlICRmZCBvciByZXR1cm47CisJcmV0dXJuIFwlcmVmczsKK30KKworc3ViIGdpdF9nZXRfcmV2X25hbWVfdGFncyB7CisJbXkgJGhhc2ggPSBzaGlmdCB8fCByZXR1cm4gdW5kZWY7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibmFtZS1yZXYiLCAiLS10YWdzIiwgJGhhc2gKKwkJb3IgcmV0dXJuOworCW15ICRuYW1lX3JldiA9IDwkZmQ+OworCWNsb3NlICRmZDsKKworCWlmICgkbmFtZV9yZXYgPX4gbXxeJGhhc2ggdGFncy8oLiopJHwpIHsKKwkJcmV0dXJuICQxOworCX0gZWxzZSB7CisJCSMgY2F0Y2hlcyBhbHNvICckaGFzaCB1bmRlZmluZWQnIG91dHB1dAorCQlyZXR1cm4gdW5kZWY7CisJfQorfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBwYXJzZSB0byBoYXNoIGZ1bmN0aW9ucworCitzdWIgcGFyc2VfZGF0ZSB7CisJbXkgJGVwb2NoID0gc2hpZnQ7CisJbXkgJHR6ID0gc2hpZnQgfHwgIi0wMDAwIjsKKworCW15ICVkYXRlOworCW15IEBtb250aHMgPSAoIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIik7CisJbXkgQGRheXMgPSAoIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIpOworCW15ICgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLCAkd2RheSwgJHlkYXkpID0gZ210aW1lKCRlcG9jaCk7CisJJGRhdGV7J2hvdXInfSA9ICRob3VyOworCSRkYXRleydtaW51dGUnfSA9ICRtaW47CisJJGRhdGV7J21kYXknfSA9ICRtZGF5OworCSRkYXRleydkYXknfSA9ICRkYXlzWyR3ZGF5XTsKKwkkZGF0ZXsnbW9udGgnfSA9ICRtb250aHNbJG1vbl07CisJJGRhdGV7J3JmYzI4MjInfSAgID0gc3ByaW50ZiAiJXMsICVkICVzICU0ZCAlMDJkOiUwMmQ6JTAyZCArMDAwMCIsCisJICAgICAgICAgICAgICAgICAgICAgJGRheXNbJHdkYXldLCAkbWRheSwgJG1vbnRoc1skbW9uXSwgMTkwMCskeWVhciwgJGhvdXIgLCRtaW4sICRzZWM7CisJJGRhdGV7J21kYXktdGltZSd9ID0gc3ByaW50ZiAiJWQgJXMgJTAyZDolMDJkIiwKKwkgICAgICAgICAgICAgICAgICAgICAkbWRheSwgJG1vbnRoc1skbW9uXSwgJGhvdXIgLCRtaW47CisJJGRhdGV7J2lzby04NjAxJ30gID0gc3ByaW50ZiAiJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmRaIiwKKwkgICAgICAgICAgICAgICAgICAgICAxOTAwKyR5ZWFyLCAxKyRtb24sICRtZGF5LCAkaG91ciAsJG1pbiwgJHNlYzsKKworCW15ICgkdHpfc2lnbiwgJHR6X2hvdXIsICR0el9taW4pID0KKwkJKCR0eiA9fiBtL14oWy0rXSkoXGRcZCkoXGRcZCkkLyk7CisJJHR6X3NpZ24gPSAoJHR6X3NpZ24gZXEgJy0nID8gLTEgOiArMSk7CisJbXkgJGxvY2FsID0gJGVwb2NoICsgJHR6X3NpZ24qKCgoJHR6X2hvdXIqNjApICsgJHR6X21pbikqNjApOworCSgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLCAkd2RheSwgJHlkYXkpID0gZ210aW1lKCRsb2NhbCk7CisJJGRhdGV7J2hvdXJfbG9jYWwnfSA9ICRob3VyOworCSRkYXRleydtaW51dGVfbG9jYWwnfSA9ICRtaW47CisJJGRhdGV7J3R6X2xvY2FsJ30gPSAkdHo7CisJJGRhdGV7J2lzby10eid9ID0gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQgJXMiLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgMTkwMCskeWVhciwgJG1vbisxLCAkbWRheSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICRob3VyLCAkbWluLCAkc2VjLCAkdHopOworCXJldHVybiAlZGF0ZTsKK30KKworc3ViIHBhcnNlX3RhZyB7CisJbXkgJHRhZ19pZCA9IHNoaWZ0OworCW15ICV0YWc7CisJbXkgQGNvbW1lbnQ7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAidGFnIiwgJHRhZ19pZCBvciByZXR1cm47CisJJHRhZ3snaWQnfSA9ICR0YWdfaWQ7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJY2hvbXAgJGxpbmU7CisJCWlmICgkbGluZSA9fiBtL15vYmplY3QgKCRvaWRfcmVnZXgpJC8pIHsKKwkJCSR0YWd7J29iamVjdCd9ID0gJDE7CisJCX0gZWxzaWYgKCRsaW5lID1+IG0vXnR5cGUgKC4rKSQvKSB7CisJCQkkdGFneyd0eXBlJ30gPSAkMTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gbS9edGFnICguKykkLykgeworCQkJJHRhZ3snbmFtZSd9ID0gJDE7CisJCX0gZWxzaWYgKCRsaW5lID1+IG0vXnRhZ2dlciAoLiopIChbMC05XSspICguKikkLykgeworCQkJJHRhZ3snYXV0aG9yJ30gPSAkMTsKKwkJCSR0YWd7J2F1dGhvcl9lcG9jaCd9ID0gJDI7CisJCQkkdGFneydhdXRob3JfdHonfSA9ICQzOworCQkJaWYgKCR0YWd7J2F1dGhvcid9ID1+IG0vXihbXjxdKykgPChbXj5dKik+LykgeworCQkJCSR0YWd7J2F1dGhvcl9uYW1lJ30gID0gJDE7CisJCQkJJHRhZ3snYXV0aG9yX2VtYWlsJ30gPSAkMjsKKwkJCX0gZWxzZSB7CisJCQkJJHRhZ3snYXV0aG9yX25hbWUnfSA9ICR0YWd7J2F1dGhvcid9OworCQkJfQorCQl9IGVsc2lmICgkbGluZSA9fiBtLy0tQkVHSU4vKSB7CisJCQlwdXNoIEBjb21tZW50LCAkbGluZTsKKwkJCWxhc3Q7CisJCX0gZWxzaWYgKCRsaW5lIGVxICIiKSB7CisJCQlsYXN0OworCQl9CisJfQorCXB1c2ggQGNvbW1lbnQsIDwkZmQ+OworCSR0YWd7J2NvbW1lbnQnfSA9IFxAY29tbWVudDsKKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCWlmICghZGVmaW5lZCAkdGFneyduYW1lJ30pIHsKKwkJcmV0dXJuCisJfTsKKwlyZXR1cm4gJXRhZworfQorCitzdWIgcGFyc2VfY29tbWl0X3RleHQgeworCW15ICgkY29tbWl0X3RleHQsICR3aXRocGFyZW50cykgPSBAXzsKKwlteSBAY29tbWl0X2xpbmVzID0gc3BsaXQgJ1xuJywgJGNvbW1pdF90ZXh0OworCW15ICVjbzsKKworCXBvcCBAY29tbWl0X2xpbmVzOyAjIFJlbW92ZSAnXDAnCisKKwlpZiAoISBAY29tbWl0X2xpbmVzKSB7CisJCXJldHVybjsKKwl9CisKKwlteSAkaGVhZGVyID0gc2hpZnQgQGNvbW1pdF9saW5lczsKKwlpZiAoJGhlYWRlciAhfiBtL14kb2lkX3JlZ2V4LykgeworCQlyZXR1cm47CisJfQorCSgkY297J2lkJ30sIG15IEBwYXJlbnRzKSA9IHNwbGl0ICcgJywgJGhlYWRlcjsKKwl3aGlsZSAobXkgJGxpbmUgPSBzaGlmdCBAY29tbWl0X2xpbmVzKSB7CisJCWxhc3QgaWYgJGxpbmUgZXEgIlxuIjsKKwkJaWYgKCRsaW5lID1+IG0vXnRyZWUgKCRvaWRfcmVnZXgpJC8pIHsKKwkJCSRjb3sndHJlZSd9ID0gJDE7CisJCX0gZWxzaWYgKCghZGVmaW5lZCAkd2l0aHBhcmVudHMpICYmICgkbGluZSA9fiBtL15wYXJlbnQgKCRvaWRfcmVnZXgpJC8pKSB7CisJCQlwdXNoIEBwYXJlbnRzLCAkMTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gbS9eYXV0aG9yICguKikgKFswLTldKykgKC4qKSQvKSB7CisJCQkkY297J2F1dGhvcid9ID0gdG9fdXRmOCgkMSk7CisJCQkkY297J2F1dGhvcl9lcG9jaCd9ID0gJDI7CisJCQkkY297J2F1dGhvcl90eid9ID0gJDM7CisJCQlpZiAoJGNveydhdXRob3InfSA9fiBtL14oW148XSspIDwoW14+XSopPi8pIHsKKwkJCQkkY297J2F1dGhvcl9uYW1lJ30gID0gJDE7CisJCQkJJGNveydhdXRob3JfZW1haWwnfSA9ICQyOworCQkJfSBlbHNlIHsKKwkJCQkkY297J2F1dGhvcl9uYW1lJ30gPSAkY297J2F1dGhvcid9OworCQkJfQorCQl9IGVsc2lmICgkbGluZSA9fiBtL15jb21taXR0ZXIgKC4qKSAoWzAtOV0rKSAoLiopJC8pIHsKKwkJCSRjb3snY29tbWl0dGVyJ30gPSB0b191dGY4KCQxKTsKKwkJCSRjb3snY29tbWl0dGVyX2Vwb2NoJ30gPSAkMjsKKwkJCSRjb3snY29tbWl0dGVyX3R6J30gPSAkMzsKKwkJCWlmICgkY297J2NvbW1pdHRlcid9ID1+IG0vXihbXjxdKykgPChbXj5dKik+LykgeworCQkJCSRjb3snY29tbWl0dGVyX25hbWUnfSAgPSAkMTsKKwkJCQkkY297J2NvbW1pdHRlcl9lbWFpbCd9ID0gJDI7CisJCQl9IGVsc2UgeworCQkJCSRjb3snY29tbWl0dGVyX25hbWUnfSA9ICRjb3snY29tbWl0dGVyJ307CisJCQl9CisJCX0KKwl9CisJaWYgKCFkZWZpbmVkICRjb3sndHJlZSd9KSB7CisJCXJldHVybjsKKwl9OworCSRjb3sncGFyZW50cyd9ID0gXEBwYXJlbnRzOworCSRjb3sncGFyZW50J30gPSAkcGFyZW50c1swXTsKKworCWZvcmVhY2ggbXkgJHRpdGxlIChAY29tbWl0X2xpbmVzKSB7CisJCSR0aXRsZSA9fiBzL14gICAgLy87CisJCWlmICgkdGl0bGUgbmUgIiIpIHsKKwkJCSRjb3sndGl0bGUnfSA9IGNob3Bfc3RyKCR0aXRsZSwgODAsIDUpOworCQkJIyByZW1vdmUgbGVhZGluZyBzdHVmZiBvZiBtZXJnZXMgdG8gbWFrZSB0aGUgaW50ZXJlc3RpbmcgcGFydCB2aXNpYmxlCisJCQlpZiAobGVuZ3RoKCR0aXRsZSkgPiA1MCkgeworCQkJCSR0aXRsZSA9fiBzL15BdXRvbWF0aWMgLy87CisJCQkJJHRpdGxlID1+IHMvXm1lcmdlIChvZnx3aXRoKSAvTWVyZ2UgLi4uIC9pOworCQkJCWlmIChsZW5ndGgoJHRpdGxlKSA+IDUwKSB7CisJCQkJCSR0aXRsZSA9fiBzLyhodHRwfHJzeW5jKTpcL1wvLy87CisJCQkJfQorCQkJCWlmIChsZW5ndGgoJHRpdGxlKSA+IDUwKSB7CisJCQkJCSR0aXRsZSA9fiBzLyhtYXN0ZXJ8d3d3fHJzeW5jKVwuLy87CisJCQkJfQorCQkJCWlmIChsZW5ndGgoJHRpdGxlKSA+IDUwKSB7CisJCQkJCSR0aXRsZSA9fiBzL2tlcm5lbC5vcmc6Py8vOworCQkJCX0KKwkJCQlpZiAobGVuZ3RoKCR0aXRsZSkgPiA1MCkgeworCQkJCQkkdGl0bGUgPX4gcy9cL3B1Ylwvc2NtLy87CisJCQkJfQorCQkJfQorCQkJJGNveyd0aXRsZV9zaG9ydCd9ID0gY2hvcF9zdHIoJHRpdGxlLCA1MCwgNSk7CisJCQlsYXN0OworCQl9CisJfQorCWlmICghIGRlZmluZWQgJGNveyd0aXRsZSd9IHx8ICRjb3sndGl0bGUnfSBlcSAiIikgeworCQkkY297J3RpdGxlJ30gPSAkY297J3RpdGxlX3Nob3J0J30gPSAnKG5vIGNvbW1pdCBtZXNzYWdlKSc7CisJfQorCSMgcmVtb3ZlIGFkZGVkIHNwYWNlcworCWZvcmVhY2ggbXkgJGxpbmUgKEBjb21taXRfbGluZXMpIHsKKwkJJGxpbmUgPX4gcy9eICAgIC8vOworCX0KKwkkY297J2NvbW1lbnQnfSA9IFxAY29tbWl0X2xpbmVzOworCisJbXkgJGFnZSA9IHRpbWUgLSAkY297J2NvbW1pdHRlcl9lcG9jaCd9OworCSRjb3snYWdlJ30gPSAkYWdlOworCSRjb3snYWdlX3N0cmluZyd9ID0gYWdlX3N0cmluZygkYWdlKTsKKwlteSAoJHNlYywgJG1pbiwgJGhvdXIsICRtZGF5LCAkbW9uLCAkeWVhciwgJHdkYXksICR5ZGF5KSA9IGdtdGltZSgkY297J2NvbW1pdHRlcl9lcG9jaCd9KTsKKwlpZiAoJGFnZSA+IDYwKjYwKjI0KjcqMikgeworCQkkY297J2FnZV9zdHJpbmdfZGF0ZSd9ID0gc3ByaW50ZiAiJTRpLSUwMnUtJTAyaSIsIDE5MDAgKyAkeWVhciwgJG1vbisxLCAkbWRheTsKKwkJJGNveydhZ2Vfc3RyaW5nX2FnZSd9ID0gJGNveydhZ2Vfc3RyaW5nJ307CisJfSBlbHNlIHsKKwkJJGNveydhZ2Vfc3RyaW5nX2RhdGUnfSA9ICRjb3snYWdlX3N0cmluZyd9OworCQkkY297J2FnZV9zdHJpbmdfYWdlJ30gPSBzcHJpbnRmICIlNGktJTAydS0lMDJpIiwgMTkwMCArICR5ZWFyLCAkbW9uKzEsICRtZGF5OworCX0KKwlyZXR1cm4gJWNvOworfQorCitzdWIgcGFyc2VfY29tbWl0IHsKKwlteSAoJGNvbW1pdF9pZCkgPSBAXzsKKwlteSAlY287CisKKwlsb2NhbCAkLyA9ICJcMCI7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAicmV2LWxpc3QiLAorCQkiLS1wYXJlbnRzIiwKKwkJIi0taGVhZGVyIiwKKwkJIi0tbWF4LWNvdW50PTEiLAorCQkkY29tbWl0X2lkLAorCQkiLS0iLAorCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtcmV2LWxpc3QgZmFpbGVkIik7CisJJWNvID0gcGFyc2VfY29tbWl0X3RleHQoPCRmZD4sIDEpOworCWNsb3NlICRmZDsKKworCXJldHVybiAlY287Cit9CisKK3N1YiBwYXJzZV9jb21taXRzIHsKKwlteSAoJGNvbW1pdF9pZCwgJG1heGNvdW50LCAkc2tpcCwgJGZpbGVuYW1lLCBAYXJncykgPSBAXzsKKwlteSBAY29zOworCisJJG1heGNvdW50IHx8PSAxOworCSRza2lwIHx8PSAwOworCisJbG9jYWwgJC8gPSAiXDAiOworCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgInJldi1saXN0IiwKKwkJIi0taGVhZGVyIiwKKwkJQGFyZ3MsCisJCSgiLS1tYXgtY291bnQ9IiAuICRtYXhjb3VudCksCisJCSgiLS1za2lwPSIgLiAkc2tpcCksCisJCUBleHRyYV9vcHRpb25zLAorCQkkY29tbWl0X2lkLAorCQkiLS0iLAorCQkoJGZpbGVuYW1lID8gKCRmaWxlbmFtZSkgOiAoKSkKKwkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LXJldi1saXN0IGZhaWxlZCIpOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCW15ICVjbyA9IHBhcnNlX2NvbW1pdF90ZXh0KCRsaW5lKTsKKwkJcHVzaCBAY29zLCBcJWNvOworCX0KKwljbG9zZSAkZmQ7CisKKwlyZXR1cm4gd2FudGFycmF5ID8gQGNvcyA6IFxAY29zOworfQorCisjIHBhcnNlIGxpbmUgb2YgZ2l0LWRpZmYtdHJlZSAicmF3IiBvdXRwdXQKK3N1YiBwYXJzZV9kaWZmdHJlZV9yYXdfbGluZSB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKwlteSAlcmVzOworCisJIyAnOjEwMDY0NCAxMDA2NDQgMDNiMjE4MjYwZTk5Yjc4YzZkZjBlZDM3OGU1OWVkOTIwNWNjYzk2ZCAzYjkzZDVlN2NjN2Y3ZGQ0ZWJlZDEzYTVjYzFhNGFkOTc2ZmM5NGQ4IE0JbHMtZmlsZXMuYycKKwkjICc6MTAwNjQ0IDEwMDY0NCA3ZjkyODE5ODUwODY5NzFkMzg3N2FjYTI3NzA0ZjJhYWY5YzQ0OGNlIGJjMTkwZWJjNzFiYmQ5MjNmMmI3MjhlNTA1NDA4ZjVlNTRiZDA3M2EgTQlyZXYtdHJlZS5jJworCWlmICgkbGluZSA9fiBtL146KFswLTddezZ9KSAoWzAtN117Nn0pICgkb2lkX3JlZ2V4KSAoJG9pZF9yZWdleCkgKC4pKFswLTldezAsM30pXHQoLiopJC8pIHsKKwkJJHJlc3snZnJvbV9tb2RlJ30gPSAkMTsKKwkJJHJlc3sndG9fbW9kZSd9ID0gJDI7CisJCSRyZXN7J2Zyb21faWQnfSA9ICQzOworCQkkcmVzeyd0b19pZCd9ID0gJDQ7CisJCSRyZXN7J3N0YXR1cyd9ID0gJDU7CisJCSRyZXN7J3NpbWlsYXJpdHknfSA9ICQ2OworCQlpZiAoJHJlc3snc3RhdHVzJ30gZXEgJ1InIHx8ICRyZXN7J3N0YXR1cyd9IGVxICdDJykgeyAjIHJlbmFtZWQgb3IgY29waWVkCisJCQkoJHJlc3snZnJvbV9maWxlJ30sICRyZXN7J3RvX2ZpbGUnfSkgPSBtYXAgeyB1bnF1b3RlKCRfKSB9IHNwbGl0KCJcdCIsICQ3KTsKKwkJfSBlbHNlIHsKKwkJCSRyZXN7J2Zyb21fZmlsZSd9ID0gJHJlc3sndG9fZmlsZSd9ID0gJHJlc3snZmlsZSd9ID0gdW5xdW90ZSgkNyk7CisJCX0KKwl9CisJIyAnOjoxMDA3NTUgMTAwNzU1IDEwMDc1NSA2MGU3OWNhMWIwMWJjOGIwNTdhYmUxN2RkYWI0ODQ2OTlhN2Y1ZmRiIDk0MDY3Y2M1ZjczMzg4ZjMzNzIyZDUyYWUwMmY0NDY5MmJjMDc0OTAgOTQwNjdjYzVmNzMzODhmMzM3MjJkNTJhZTAyZjQ0NjkyYmMwNzQ5MCBNUglnaXQtZ3VpL2dpdC1ndWkuc2gnCisJIyBjb21iaW5lZCBkaWZmIChmb3IgbWVyZ2UgY29tbWl0KQorCWVsc2lmICgkbGluZSA9fiBzL14oOjorKSgoPzpbMC03XXs2fSApKykoKD86JG9pZF9yZWdleCApKykoW2EtekEtWl0rKVx0KC4qKSQvLykgeworCQkkcmVzeyducGFyZW50cyd9ICA9IGxlbmd0aCgkMSk7CisJCSRyZXN7J2Zyb21fbW9kZSd9ID0gWyBzcGxpdCgnICcsICQyKSBdOworCQkkcmVzeyd0b19tb2RlJ30gPSBwb3AgQHskcmVzeydmcm9tX21vZGUnfX07CisJCSRyZXN7J2Zyb21faWQnfSA9IFsgc3BsaXQoJyAnLCAkMykgXTsKKwkJJHJlc3sndG9faWQnfSA9IHBvcCBAeyRyZXN7J2Zyb21faWQnfX07CisJCSRyZXN7J3N0YXR1cyd9ID0gWyBzcGxpdCgnJywgJDQpIF07CisJCSRyZXN7J3RvX2ZpbGUnfSA9IHVucXVvdGUoJDUpOworCX0KKwkjICdjNTEyYjUyMzQ3MjQ4NWFlZjRmZmY5ZTU3YjIyOWQ5ZDI0M2M5NjdmJworCWVsc2lmICgkbGluZSA9fiBtL14oJG9pZF9yZWdleCkkLykgeworCQkkcmVzeydjb21taXQnfSA9ICQxOworCX0KKworCXJldHVybiB3YW50YXJyYXkgPyAlcmVzIDogXCVyZXM7Cit9CisKKyMgd3JhcHBlcjogcmV0dXJuIHBhcnNlZCBsaW5lIG9mIGdpdC1kaWZmLXRyZWUgInJhdyIgb3V0cHV0CisjICh0aGUgYXJndW1lbnQgbWlnaHQgYmUgcmF3IGxpbmUsIG9yIHBhcnNlZCBpbmZvKQorc3ViIHBhcnNlZF9kaWZmdHJlZV9saW5lIHsKKwlteSAkbGluZV9vcl9yZWYgPSBzaGlmdDsKKworCWlmIChyZWYoJGxpbmVfb3JfcmVmKSBlcSAiSEFTSCIpIHsKKwkJIyBwcmUtcGFyc2VkIChvciBnZW5lcmF0ZWQgYnkgaGFuZCkKKwkJcmV0dXJuICRsaW5lX29yX3JlZjsKKwl9IGVsc2UgeworCQlyZXR1cm4gcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUoJGxpbmVfb3JfcmVmKTsKKwl9Cit9CisKKyMgcGFyc2UgbGluZSBvZiBnaXQtbHMtdHJlZSBvdXRwdXQKK3N1YiBwYXJzZV9sc190cmVlX2xpbmUgeworCW15ICRsaW5lID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKwlteSAlcmVzOworCisJaWYgKCRvcHRzeyctbCd9KSB7CisJCSMnMTAwNjQ0IGJsb2IgMGZhM2YzYTY2ZmI2YTEzN2Y2ZWMyYzE5MzUxZWQ0ZDgwNzA3MGZmYSAgIDE2NzE3CXBhbmljLmMnCisJCSRsaW5lID1+IG0vXihbMC05XSspICguKykgKCRvaWRfcmVnZXgpICsoLXxbMC05XSspXHQoLispJC9zOworCisJCSRyZXN7J21vZGUnfSA9ICQxOworCQkkcmVzeyd0eXBlJ30gPSAkMjsKKwkJJHJlc3snaGFzaCd9ID0gJDM7CisJCSRyZXN7J3NpemUnfSA9ICQ0OworCQlpZiAoJG9wdHN7Jy16J30pIHsKKwkJCSRyZXN7J25hbWUnfSA9ICQ1OworCQl9IGVsc2UgeworCQkJJHJlc3snbmFtZSd9ID0gdW5xdW90ZSgkNSk7CisJCX0KKwl9IGVsc2UgeworCQkjJzEwMDY0NCBibG9iIDBmYTNmM2E2NmZiNmExMzdmNmVjMmMxOTM1MWVkNGQ4MDcwNzBmZmEJcGFuaWMuYycKKwkJJGxpbmUgPX4gbS9eKFswLTldKykgKC4rKSAoJG9pZF9yZWdleClcdCguKykkL3M7CisKKwkJJHJlc3snbW9kZSd9ID0gJDE7CisJCSRyZXN7J3R5cGUnfSA9ICQyOworCQkkcmVzeydoYXNoJ30gPSAkMzsKKwkJaWYgKCRvcHRzeycteid9KSB7CisJCQkkcmVzeyduYW1lJ30gPSAkNDsKKwkJfSBlbHNlIHsKKwkJCSRyZXN7J25hbWUnfSA9IHVucXVvdGUoJDQpOworCQl9CisJfQorCisJcmV0dXJuIHdhbnRhcnJheSA/ICVyZXMgOiBcJXJlczsKK30KKworIyBnZW5lcmF0ZXMgX3R3b18gaGFzaGVzLCByZWZlcmVuY2VzIHRvIHdoaWNoIGFyZSBwYXNzZWQgYXMgMiBhbmQgMyBhcmd1bWVudAorc3ViIHBhcnNlX2Zyb21fdG9fZGlmZmluZm8geworCW15ICgkZGlmZmluZm8sICRmcm9tLCAkdG8sIEBwYXJlbnRzKSA9IEBfOworCisJaWYgKCRkaWZmaW5mby0+eyducGFyZW50cyd9KSB7CisJCSMgY29tYmluZWQgZGlmZgorCQkkZnJvbS0+eydmaWxlJ30gPSBbXTsKKwkJJGZyb20tPnsnaHJlZid9ID0gW107CisJCWZpbGxfZnJvbV9maWxlX2luZm8oJGRpZmZpbmZvLCBAcGFyZW50cykKKwkJCXVubGVzcyBleGlzdHMgJGRpZmZpbmZvLT57J2Zyb21fZmlsZSd9OworCQlmb3IgKG15ICRpID0gMDsgJGkgPCAkZGlmZmluZm8tPnsnbnBhcmVudHMnfTsgJGkrKykgeworCQkJJGZyb20tPnsnZmlsZSd9WyRpXSA9CisJCQkJZGVmaW5lZCAkZGlmZmluZm8tPnsnZnJvbV9maWxlJ31bJGldID8KKwkJCQkgICAgICAgICRkaWZmaW5mby0+eydmcm9tX2ZpbGUnfVskaV0gOgorCQkJCSAgICAgICAgJGRpZmZpbmZvLT57J3RvX2ZpbGUnfTsKKwkJCWlmICgkZGlmZmluZm8tPnsnc3RhdHVzJ31bJGldIG5lICJBIikgeyAjIG5vdCBuZXcgKGFkZGVkKSBmaWxlCisJCQkJJGZyb20tPnsnaHJlZid9WyRpXSA9IGhyZWYoYWN0aW9uPT4iYmxvYiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kcGFyZW50c1skaV0sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmZpbmZvLT57J2Zyb21faWQnfVskaV0sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZnJvbS0+eydmaWxlJ31bJGldKTsKKwkJCX0gZWxzZSB7CisJCQkJJGZyb20tPnsnaHJlZid9WyRpXSA9IHVuZGVmOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJIyBvcmRpbmFyeSAobm90IGNvbWJpbmVkKSBkaWZmCisJCSRmcm9tLT57J2ZpbGUnfSA9ICRkaWZmaW5mby0+eydmcm9tX2ZpbGUnfTsKKwkJaWYgKCRkaWZmaW5mby0+eydzdGF0dXMnfSBuZSAiQSIpIHsgIyBub3QgbmV3IChhZGRlZCkgZmlsZQorCQkJJGZyb20tPnsnaHJlZid9ID0gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaF9iYXNlPT4kaGFzaF9wYXJlbnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmaW5mby0+eydmcm9tX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZyb20tPnsnZmlsZSd9KTsKKwkJfSBlbHNlIHsKKwkJCWRlbGV0ZSAkZnJvbS0+eydocmVmJ307CisJCX0KKwl9CisKKwkkdG8tPnsnZmlsZSd9ID0gJGRpZmZpbmZvLT57J3RvX2ZpbGUnfTsKKwlpZiAoIWlzX2RlbGV0ZWQoJGRpZmZpbmZvKSkgeyAjIGZpbGUgZXhpc3RzIGluIHJlc3VsdAorCQkkdG8tPnsnaHJlZid9ID0gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaF9iYXNlPT4kaGFzaCwKKwkJICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmZpbmZvLT57J3RvX2lkJ30sCisJCSAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JHRvLT57J2ZpbGUnfSk7CisJfSBlbHNlIHsKKwkJZGVsZXRlICR0by0+eydocmVmJ307CisJfQorfQorCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBwYXJzZSB0byBhcnJheSBvZiBoYXNoZXMgZnVuY3Rpb25zCisKK3N1YiBnaXRfZ2V0X2hlYWRzX2xpc3QgeworCW15ICgkbGltaXQsIEBjbGFzc2VzKSA9IEBfOworCUBjbGFzc2VzID0gZ2V0X2JyYW5jaF9yZWZzKCkgdW5sZXNzIEBjbGFzc2VzOworCW15IEBwYXR0ZXJucyA9IG1hcCB7ICJyZWZzLyRfIiB9IEBjbGFzc2VzOworCW15IEBoZWFkc2xpc3Q7CisKKwlvcGVuIG15ICRmZCwgJy18JywgZ2l0X2NtZCgpLCAnZm9yLWVhY2gtcmVmJywKKwkJKCRsaW1pdCA/ICctLWNvdW50PScuKCRsaW1pdCsxKSA6ICgpKSwgJy0tc29ydD0tY29tbWl0dGVyZGF0ZScsCisJCSctLWZvcm1hdD0lKG9iamVjdG5hbWUpICUocmVmbmFtZSkgJShzdWJqZWN0KSUwMCUoY29tbWl0dGVyKScsCisJCUBwYXR0ZXJucworCQlvciByZXR1cm47CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJbXkgJXJlZl9pdGVtOworCisJCWNob21wICRsaW5lOworCQlteSAoJHJlZmluZm8sICRjb21taXR0ZXJpbmZvKSA9IHNwbGl0KC9cMC8sICRsaW5lKTsKKwkJbXkgKCRoYXNoLCAkbmFtZSwgJHRpdGxlKSA9IHNwbGl0KCcgJywgJHJlZmluZm8sIDMpOworCQlteSAoJGNvbW1pdHRlciwgJGVwb2NoLCAkdHopID0KKwkJCSgkY29tbWl0dGVyaW5mbyA9fiAvXiguKikgKFswLTldKykgKC4qKSQvKTsKKwkJJHJlZl9pdGVteydmdWxsbmFtZSd9ICA9ICRuYW1lOworCQlteSAkc3RyaXBfcmVmcyA9IGpvaW4gJ3wnLCBtYXAgeyBxdW90ZW1ldGEgfSBnZXRfYnJhbmNoX3JlZnMoKTsKKwkJJG5hbWUgPX4gcyFecmVmcy8oJHN0cmlwX3JlZnN8cmVtb3RlcykvISE7CisJCSRyZWZfaXRlbXsnbmFtZSd9ID0gJG5hbWU7CisJCSMgZm9yIHJlZnMgbmVpdGhlciBpbiAnaGVhZHMnIG5vciAncmVtb3Rlcycgd2Ugd2FudCB0bworCQkjIHNob3cgdGhlaXIgcmVmIGRpcgorCQlteSAkcmVmX2RpciA9IChkZWZpbmVkICQxKSA/ICQxIDogJyc7CisJCWlmICgkcmVmX2RpciBuZSAnJyBhbmQgJHJlZl9kaXIgbmUgJ2hlYWRzJyBhbmQgJHJlZl9kaXIgbmUgJ3JlbW90ZXMnKSB7CisJCSAgICAkcmVmX2l0ZW17J25hbWUnfSAuPSAnICgnIC4gJHJlZl9kaXIgLiAnKSc7CisJCX0KKworCQkkcmVmX2l0ZW17J2lkJ30gICAgPSAkaGFzaDsKKwkJJHJlZl9pdGVteyd0aXRsZSd9ID0gJHRpdGxlIHx8ICcobm8gY29tbWl0IG1lc3NhZ2UpJzsKKwkJJHJlZl9pdGVteydlcG9jaCd9ID0gJGVwb2NoOworCQlpZiAoJGVwb2NoKSB7CisJCQkkcmVmX2l0ZW17J2FnZSd9ID0gYWdlX3N0cmluZyh0aW1lIC0gJHJlZl9pdGVteydlcG9jaCd9KTsKKwkJfSBlbHNlIHsKKwkJCSRyZWZfaXRlbXsnYWdlJ30gPSAidW5rbm93biI7CisJCX0KKworCQlwdXNoIEBoZWFkc2xpc3QsIFwlcmVmX2l0ZW07CisJfQorCWNsb3NlICRmZDsKKworCXJldHVybiB3YW50YXJyYXkgPyBAaGVhZHNsaXN0IDogXEBoZWFkc2xpc3Q7Cit9CisKK3N1YiBnaXRfZ2V0X3RhZ3NfbGlzdCB7CisJbXkgJGxpbWl0ID0gc2hpZnQ7CisJbXkgQHRhZ3NsaXN0OworCisJb3BlbiBteSAkZmQsICctfCcsIGdpdF9jbWQoKSwgJ2Zvci1lYWNoLXJlZicsCisJCSgkbGltaXQgPyAnLS1jb3VudD0nLigkbGltaXQrMSkgOiAoKSksICctLXNvcnQ9LWNyZWF0b3JkYXRlJywKKwkJJy0tZm9ybWF0PSUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKSAlKHJlZm5hbWUpICcuCisJCSclKCpvYmplY3RuYW1lKSAlKCpvYmplY3R0eXBlKSAlKHN1YmplY3QpJTAwJShjcmVhdG9yKScsCisJCSdyZWZzL3RhZ3MnCisJCW9yIHJldHVybjsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQlteSAlcmVmX2l0ZW07CisKKwkJY2hvbXAgJGxpbmU7CisJCW15ICgkcmVmaW5mbywgJGNyZWF0b3JpbmZvKSA9IHNwbGl0KC9cMC8sICRsaW5lKTsKKwkJbXkgKCRpZCwgJHR5cGUsICRuYW1lLCAkcmVmaWQsICRyZWZ0eXBlLCAkdGl0bGUpID0gc3BsaXQoJyAnLCAkcmVmaW5mbywgNik7CisJCW15ICgkY3JlYXRvciwgJGVwb2NoLCAkdHopID0KKwkJCSgkY3JlYXRvcmluZm8gPX4gL14oLiopIChbMC05XSspICguKikkLyk7CisJCSRyZWZfaXRlbXsnZnVsbG5hbWUnfSA9ICRuYW1lOworCQkkbmFtZSA9fiBzIV5yZWZzL3RhZ3MvISE7CisKKwkJJHJlZl9pdGVteyd0eXBlJ30gPSAkdHlwZTsKKwkJJHJlZl9pdGVteydpZCd9ID0gJGlkOworCQkkcmVmX2l0ZW17J25hbWUnfSA9ICRuYW1lOworCQlpZiAoJHR5cGUgZXEgInRhZyIpIHsKKwkJCSRyZWZfaXRlbXsnc3ViamVjdCd9ID0gJHRpdGxlOworCQkJJHJlZl9pdGVteydyZWZ0eXBlJ30gPSAkcmVmdHlwZTsKKwkJCSRyZWZfaXRlbXsncmVmaWQnfSAgID0gJHJlZmlkOworCQl9IGVsc2UgeworCQkJJHJlZl9pdGVteydyZWZ0eXBlJ30gPSAkdHlwZTsKKwkJCSRyZWZfaXRlbXsncmVmaWQnfSAgID0gJGlkOworCQl9CisKKwkJaWYgKCR0eXBlIGVxICJ0YWciIHx8ICR0eXBlIGVxICJjb21taXQiKSB7CisJCQkkcmVmX2l0ZW17J2Vwb2NoJ30gPSAkZXBvY2g7CisJCQlpZiAoJGVwb2NoKSB7CisJCQkJJHJlZl9pdGVteydhZ2UnfSA9IGFnZV9zdHJpbmcodGltZSAtICRyZWZfaXRlbXsnZXBvY2gnfSk7CisJCQl9IGVsc2UgeworCQkJCSRyZWZfaXRlbXsnYWdlJ30gPSAidW5rbm93biI7CisJCQl9CisJCX0KKworCQlwdXNoIEB0YWdzbGlzdCwgXCVyZWZfaXRlbTsKKwl9CisJY2xvc2UgJGZkOworCisJcmV0dXJuIHdhbnRhcnJheSA/IEB0YWdzbGlzdCA6IFxAdGFnc2xpc3Q7Cit9CisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIGZpbGVzeXN0ZW0tcmVsYXRlZCBmdW5jdGlvbnMKKworc3ViIGdldF9maWxlX293bmVyIHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCisJbXkgKCRkZXYsICRpbm8sICRtb2RlLCAkbmxpbmssICRzdF91aWQsICRzdF9naWQsICRyZGV2LCAkc2l6ZSkgPSBzdGF0KCRwYXRoKTsKKwlteSAoJG5hbWUsICRwYXNzd2QsICR1aWQsICRnaWQsICRxdW90YSwgJGNvbW1lbnQsICRnY29zLCAkZGlyLCAkc2hlbGwpID0gZ2V0cHd1aWQoJHN0X3VpZCk7CisJaWYgKCFkZWZpbmVkICRnY29zKSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisJbXkgJG93bmVyID0gJGdjb3M7CisJJG93bmVyID1+IHMvWyw7XS4qJC8vOworCXJldHVybiB0b191dGY4KCRvd25lcik7Cit9CisKKyMgYXNzdW1lIHRoYXQgZmlsZSBleGlzdHMKK3N1YiBpbnNlcnRfZmlsZSB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisKKwlvcGVuIG15ICRmZCwgJzwnLCAkZmlsZW5hbWU7CisJcHJpbnQgbWFwIHsgdG9fdXRmOCgkXykgfSA8JGZkPjsKKwljbG9zZSAkZmQ7Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIG1pbWV0eXBlIHJlbGF0ZWQgZnVuY3Rpb25zCisKK3N1YiBtaW1ldHlwZV9ndWVzc19maWxlIHsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKwlteSAkbWltZW1hcCA9IHNoaWZ0OworCS1yICRtaW1lbWFwIG9yIHJldHVybiB1bmRlZjsKKworCW15ICVtaW1lbWFwOworCW9wZW4obXkgJG1oLCAnPCcsICRtaW1lbWFwKSBvciByZXR1cm4gdW5kZWY7CisJd2hpbGUgKDwkbWg+KSB7CisJCW5leHQgaWYgbS9eIy87ICMgc2tpcCBjb21tZW50cworCQlteSAoJG1pbWV0eXBlLCBAZXh0cykgPSBzcGxpdCgvXHMrLyk7CisJCWZvcmVhY2ggbXkgJGV4dCAoQGV4dHMpIHsKKwkJCSRtaW1lbWFweyRleHR9ID0gJG1pbWV0eXBlOworCQl9CisJfQorCWNsb3NlKCRtaCk7CisKKwkkZmlsZW5hbWUgPX4gL1wuKFteLl0qKSQvOworCXJldHVybiAkbWltZW1hcHskMX07Cit9CisKK3N1YiBtaW1ldHlwZV9ndWVzcyB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgJG1pbWU7CisJJGZpbGVuYW1lID1+IC9cLi8gb3IgcmV0dXJuIHVuZGVmOworCisJaWYgKCRtaW1ldHlwZXNfZmlsZSkgeworCQlteSAkZmlsZSA9ICRtaW1ldHlwZXNfZmlsZTsKKwkJaWYgKCRmaWxlICF+IG0hXi8hKSB7ICMgaWYgaXQgaXMgcmVsYXRpdmUgcGF0aAorCQkJIyBpdCBpcyByZWxhdGl2ZSB0byBwcm9qZWN0CisJCQkkZmlsZSA9ICIkcHJvamVjdHJvb3QvJHByb2plY3QvJGZpbGUiOworCQl9CisJCSRtaW1lID0gbWltZXR5cGVfZ3Vlc3NfZmlsZSgkZmlsZW5hbWUsICRmaWxlKTsKKwl9CisJJG1pbWUgfHw9IG1pbWV0eXBlX2d1ZXNzX2ZpbGUoJGZpbGVuYW1lLCAnL2V0Yy9taW1lLnR5cGVzJyk7CisJcmV0dXJuICRtaW1lOworfQorCitzdWIgYmxvYl9taW1ldHlwZSB7CisJbXkgJGZkID0gc2hpZnQ7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisKKwlpZiAoJGZpbGVuYW1lKSB7CisJCW15ICRtaW1lID0gbWltZXR5cGVfZ3Vlc3MoJGZpbGVuYW1lKTsKKwkJJG1pbWUgYW5kIHJldHVybiAkbWltZTsKKwl9CisKKwkjIGp1c3QgaW4gY2FzZQorCXJldHVybiAkZGVmYXVsdF9ibG9iX3BsYWluX21pbWV0eXBlIHVubGVzcyAkZmQ7CisKKwlpZiAoLVQgJGZkKSB7CisJCXJldHVybiAndGV4dC9wbGFpbic7CisJfSBlbHNpZiAoISAkZmlsZW5hbWUpIHsKKwkJcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOworCX0gZWxzaWYgKCRmaWxlbmFtZSA9fiBtL1wucG5nJC9pKSB7CisJCXJldHVybiAnaW1hZ2UvcG5nJzsKKwl9IGVsc2lmICgkZmlsZW5hbWUgPX4gbS9cLmdpZiQvaSkgeworCQlyZXR1cm4gJ2ltYWdlL2dpZic7CisJfSBlbHNpZiAoJGZpbGVuYW1lID1+IG0vXC5qcGU/ZyQvaSkgeworCQlyZXR1cm4gJ2ltYWdlL2pwZWcnOworCX0gZWxzZSB7CisJCXJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKKwl9Cit9CisKK3N1YiBibG9iX2NvbnRlbnR0eXBlIHsKKwlteSAoJGZkLCAkZmlsZV9uYW1lLCAkdHlwZSkgPSBAXzsKKworCSR0eXBlIHx8PSBibG9iX21pbWV0eXBlKCRmZCwgJGZpbGVfbmFtZSk7CisJaWYgKCR0eXBlIGVxICd0ZXh0L3BsYWluJyAmJiBkZWZpbmVkICRkZWZhdWx0X3RleHRfcGxhaW5fY2hhcnNldCkgeworCQkkdHlwZSAuPSAiOyBjaGFyc2V0PSRkZWZhdWx0X3RleHRfcGxhaW5fY2hhcnNldCI7CisJfQorCisJcmV0dXJuICR0eXBlOworfQorCisjIGd1ZXNzIGZpbGUgc3ludGF4IGZvciBzeW50YXggaGlnaGxpZ2h0aW5nOyByZXR1cm4gdW5kZWYgaWYgbm8gaGlnaGxpZ2h0aW5nCisjIHRoZSBuYW1lIG9mIHN5bnRheCBjYW4gKGluIHRoZSBmdXR1cmUpIGRlcGVuZCBvbiBzeW50YXggaGlnaGxpZ2h0ZXIgdXNlZAorc3ViIGd1ZXNzX2ZpbGVfc3ludGF4IHsKKwlteSAoJGhpZ2hsaWdodCwgJGZpbGVfbmFtZSkgPSBAXzsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzICgkaGlnaGxpZ2h0ICYmIGRlZmluZWQgJGZpbGVfbmFtZSk7CisJbXkgJGJhc2VuYW1lID0gYmFzZW5hbWUoJGZpbGVfbmFtZSwgJy5pbicpOworCXJldHVybiAkaGlnaGxpZ2h0X2Jhc2VuYW1leyRiYXNlbmFtZX0KKwkJaWYgZXhpc3RzICRoaWdobGlnaHRfYmFzZW5hbWV7JGJhc2VuYW1lfTsKKworCSRiYXNlbmFtZSA9fiAvXC4oW14uXSopJC87CisJbXkgJGV4dCA9ICQxIG9yIHJldHVybiB1bmRlZjsKKwlyZXR1cm4gJGhpZ2hsaWdodF9leHR7JGV4dH0KKwkJaWYgZXhpc3RzICRoaWdobGlnaHRfZXh0eyRleHR9OworCisJcmV0dXJuIHVuZGVmOworfQorCisjIHJ1biBoaWdobGlnaHRlciBhbmQgcmV0dXJuIEZEIG9mIGl0cyBvdXRwdXQsCisjIG9yIHJldHVybiBvcmlnaW5hbCBGRCBpZiBubyBoaWdobGlnaHRpbmcKK3N1YiBydW5faGlnaGxpZ2h0ZXIgeworCW15ICgkZmQsICRoaWdobGlnaHQsICRzeW50YXgpID0gQF87CisJcmV0dXJuICRmZCB1bmxlc3MgKCRoaWdobGlnaHQpOworCisJY2xvc2UgJGZkOworCW15ICRzeW50YXhfYXJnID0gKGRlZmluZWQgJHN5bnRheCkgPyAiLS1zeW50YXggJHN5bnRheCIgOiAiLS1mb3JjZSI7CisJb3BlbiAkZmQsIHF1b3RlX2NvbW1hbmQoZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRoYXNoKS4iIHwgIi4KKwkgICAgICAgICAgcXVvdGVfY29tbWFuZCgkXlgsICctQ08nLCAnLU1FbmNvZGU9ZGVjb2RlLEZCX0RFRkFVTFQnLCAnLXBzZScsCisJICAgICAgICAgICAgJyRfID0gZGVjb2RlKCRmZSwgJF8sIEZCX0RFRkFVTFQpIGlmICF1dGY4OjpkZWNvZGUoJF8pOycsCisJICAgICAgICAgICAgJy0tJywgIi1mZT0kZmFsbGJhY2tfZW5jb2RpbmciKS4iIHwgIi4KKwkgICAgICAgICAgcXVvdGVfY29tbWFuZCgkaGlnaGxpZ2h0X2JpbikuCisJICAgICAgICAgICIgLS1yZXBsYWNlLXRhYnM9OCAtLWZyYWdtZW50ICRzeW50YXhfYXJnIHwiCisJCW9yIGRpZV9lcnJvcig1MDAsICJDb3VsZG4ndCBvcGVuIGZpbGUgb3IgcnVuIHN5bnRheCBoaWdobGlnaHRlciIpOworCXJldHVybiAkZmQ7Cit9CisKKyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIGZ1bmN0aW9ucyBwcmludGluZyBIVE1MOiBoZWFkZXIsIGZvb3RlciwgZXJyb3IgcGFnZQorCitzdWIgZ2V0X3BhZ2VfdGl0bGUgeworCW15ICR0aXRsZSA9IHRvX3V0ZjgoJHNpdGVfbmFtZSk7CisKKwl1bmxlc3MgKGRlZmluZWQgJHByb2plY3QpIHsKKwkJaWYgKGRlZmluZWQgJHByb2plY3RfZmlsdGVyKSB7CisJCQkkdGl0bGUgLj0gIiAtIHByb2plY3RzIGluICciIC4gZXNjX3BhdGgoJHByb2plY3RfZmlsdGVyKSAuICInIjsKKwkJfQorCQlyZXR1cm4gJHRpdGxlOworCX0KKwkkdGl0bGUgLj0gIiAtICIgLiB0b191dGY4KCRwcm9qZWN0KTsKKworCXJldHVybiAkdGl0bGUgdW5sZXNzIChkZWZpbmVkICRhY3Rpb24pOworCSR0aXRsZSAuPSAiLyRhY3Rpb24iOyAjICRhY3Rpb24gaXMgVVMtQVNDSUkgKDdiaXQgQVNDSUkpCisKKwlyZXR1cm4gJHRpdGxlIHVubGVzcyAoZGVmaW5lZCAkZmlsZV9uYW1lKTsKKwkkdGl0bGUgLj0gIiAtICIgLiBlc2NfcGF0aCgkZmlsZV9uYW1lKTsKKwlpZiAoJGFjdGlvbiBlcSAidHJlZSIgJiYgJGZpbGVfbmFtZSAhfiBtfC8kfCkgeworCQkkdGl0bGUgLj0gIi8iOworCX0KKworCXJldHVybiAkdGl0bGU7Cit9CisKK3N1YiBnZXRfY29udGVudF90eXBlX2h0bWwgeworCSMgcmVxdWlyZSBleHBsaWNpdCBzdXBwb3J0IGZyb20gdGhlIFVBIGlmIHdlIGFyZSB0byBzZW5kIHRoZSBwYWdlIGFzCisJIyAnYXBwbGljYXRpb24veGh0bWwreG1sJywgb3RoZXJ3aXNlIHNlbmQgaXQgYXMgcGxhaW4gb2xkICd0ZXh0L2h0bWwnLgorCSMgd2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2UgTVNJRSBzb21ldGltZXMgZ2xvYnMgJyovKicsIHByZXRlbmRpbmcgdG8KKwkjIHN1cHBvcnQgeGh0bWwreG1sIGJ1dCBjaG9raW5nIHdoZW4gaXQgZ2V0cyB3aGF0IGl0IGFza2VkIGZvci4KKwlpZiAoZGVmaW5lZCAkY2dpLT5odHRwKCdIVFRQX0FDQ0VQVCcpICYmCisJICAgICRjZ2ktPmh0dHAoJ0hUVFBfQUNDRVBUJykgPX4gbS8oLHw7fFxzfF4pYXBwbGljYXRpb25cL3hodG1sXCt4bWwoLHw7fFxzfCQpLyAmJgorCSAgICAkY2dpLT5BY2NlcHQoJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcpICE9IDApIHsKKwkJcmV0dXJuICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnOworCX0gZWxzZSB7CisJCXJldHVybiAndGV4dC9odG1sJzsKKwl9Cit9CisKK3N1YiBwcmludF9mZWVkX21ldGEgeworCWlmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCW15ICVocmVmX3BhcmFtcyA9IGdldF9mZWVkX2luZm8oKTsKKwkJaWYgKCFleGlzdHMgJGhyZWZfcGFyYW1zeyctdGl0bGUnfSkgeworCQkJJGhyZWZfcGFyYW1zeyctdGl0bGUnfSA9ICdsb2cnOworCQl9CisKKwkJZm9yZWFjaCBteSAkZm9ybWF0IChxdyhSU1MgQXRvbSkpIHsKKwkJCW15ICR0eXBlID0gbGMoJGZvcm1hdCk7CisJCQlteSAlbGlua19hdHRyID0gKAorCQkJCSctcmVsJyA9PiAnYWx0ZXJuYXRlJywKKwkJCQknLXRpdGxlJyA9PiBlc2NfYXR0cigiJHByb2plY3QgLSAkaHJlZl9wYXJhbXN7Jy10aXRsZSd9IC0gJGZvcm1hdCBmZWVkIiksCisJCQkJJy10eXBlJyA9PiAiYXBwbGljYXRpb24vJHR5cGUreG1sIgorCQkJKTsKKworCQkJJGhyZWZfcGFyYW1zeydleHRyYV9vcHRpb25zJ30gPSB1bmRlZjsKKwkJCSRocmVmX3BhcmFtc3snYWN0aW9uJ30gPSAkdHlwZTsKKwkJCSRsaW5rX2F0dHJ7Jy1ocmVmJ30gPSBlc2NfYXR0cihocmVmKCVocmVmX3BhcmFtcykpOworCQkJcHJpbnQgIjxsaW5rICIuCisJCQkgICAgICAicmVsPVwiJGxpbmtfYXR0cnsnLXJlbCd9XCIgIi4KKwkJCSAgICAgICJ0aXRsZT1cIiRsaW5rX2F0dHJ7Jy10aXRsZSd9XCIgIi4KKwkJCSAgICAgICJocmVmPVwiJGxpbmtfYXR0cnsnLWhyZWYnfVwiICIuCisJCQkgICAgICAidHlwZT1cIiRsaW5rX2F0dHJ7Jy10eXBlJ31cIiAiLgorCQkJICAgICAgIi8+XG4iOworCisJCQkkaHJlZl9wYXJhbXN7J2V4dHJhX29wdGlvbnMnfSA9ICctLW5vLW1lcmdlcyc7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gZXNjX2F0dHIoaHJlZiglaHJlZl9wYXJhbXMpKTsKKwkJCSRsaW5rX2F0dHJ7Jy10aXRsZSd9IC49ICcgKG5vIG1lcmdlcyknOworCQkJcHJpbnQgIjxsaW5rICIuCisJCQkgICAgICAicmVsPVwiJGxpbmtfYXR0cnsnLXJlbCd9XCIgIi4KKwkJCSAgICAgICJ0aXRsZT1cIiRsaW5rX2F0dHJ7Jy10aXRsZSd9XCIgIi4KKwkJCSAgICAgICJocmVmPVwiJGxpbmtfYXR0cnsnLWhyZWYnfVwiICIuCisJCQkgICAgICAidHlwZT1cIiRsaW5rX2F0dHJ7Jy10eXBlJ31cIiAiLgorCQkJICAgICAgIi8+XG4iOworCQl9CisKKwl9IGVsc2UgeworCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgcHJvamVjdHMgbGlzdCIgJy4KKwkJICAgICAgICdocmVmPSIlcyIgdHlwZT0idGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIgLz4nLiJcbiIsCisJCSAgICAgICBlc2NfYXR0cigkc2l0ZV9uYW1lKSwKKwkJICAgICAgIGVzY19hdHRyKGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiKSkpOworCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgcHJvamVjdHMgZmVlZHMiICcuCisJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQveC1vcG1sIiAvPicuIlxuIiwKKwkJICAgICAgIGVzY19hdHRyKCRzaXRlX25hbWUpLAorCQkgICAgICAgZXNjX2F0dHIoaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4ib3BtbCIpKSk7CisJfQorfQorCitzdWIgcHJpbnRfaGVhZGVyX2xpbmtzIHsKKwlteSAkc3RhdHVzID0gc2hpZnQ7CisKKwkjIHByaW50IG91dCBlYWNoIHN0eWxlc2hlZXQgdGhhdCBleGlzdCwgcHJvdmlkaW5nIGJhY2t3YXJkcyBjYXBhYmlsaXR5CisJIyBmb3IgdGhvc2UgcGVvcGxlIHdobyBkZWZpbmVkICRzdHlsZXNoZWV0IGluIGEgY29uZmlnIGZpbGUKKwlpZiAoZGVmaW5lZCAkc3R5bGVzaGVldCkgeworCQlwcmludCAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy5lc2NfdXJsKCRzdHlsZXNoZWV0KS4nIi8+Jy4iXG4iOworCX0gZWxzZSB7CisJCWZvcmVhY2ggbXkgJHN0eWxlc2hlZXQgKEBzdHlsZXNoZWV0cykgeworCQkJbmV4dCB1bmxlc3MgJHN0eWxlc2hlZXQ7CisJCQlwcmludCAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy5lc2NfdXJsKCRzdHlsZXNoZWV0KS4nIi8+Jy4iXG4iOworCQl9CisJfQorCXByaW50X2ZlZWRfbWV0YSgpCisJCWlmICgkc3RhdHVzIGVxICcyMDAgT0snKTsKKwlpZiAoZGVmaW5lZCAkZmF2aWNvbikgeworCQlwcmludCBxcSg8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9IikuZXNjX3VybCgkZmF2aWNvbikucXEoIiB0eXBlPSJpbWFnZS9wbmciIC8+XG4pOworCX0KK30KKworc3ViIHByaW50X25hdl9icmVhZGNydW1ic19wYXRoIHsKKwlteSAkZGlycHJlZml4ID0gdW5kZWY7CisJd2hpbGUgKG15ICRwYXJ0ID0gc2hpZnQpIHsKKwkJJGRpcnByZWZpeCAuPSAiLyIgaWYgZGVmaW5lZCAkZGlycHJlZml4OworCQkkZGlycHJlZml4IC49ICRwYXJ0OworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3QgPT4gdW5kZWYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF9maWx0ZXIgPT4gJGRpcnByZWZpeCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT4gInByb2plY3RfbGlzdCIpfSwKKwkJCSAgICAgIGVzY19odG1sKCRwYXJ0KSkgLiAiIC8gIjsKKwl9Cit9CisKK3N1YiBwcmludF9uYXZfYnJlYWRjcnVtYnMgeworCW15ICVvcHRzID0gQF87CisKKwlmb3IgbXkgJGNydW1iIChAZXh0cmFfYnJlYWRjcnVtYnMsIFsgJGhvbWVfbGlua19zdHIgPT4gJGhvbWVfbGluayBdKSB7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGVzY191cmwoJGNydW1iLT5bMV0pfSwgJGNydW1iLT5bMF0pIC4gIiAvICI7CisJfQorCWlmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCW15IEBkaXJuYW1lID0gc3BsaXQgJy8nLCAkcHJvamVjdDsKKwkJbXkgJHByb2plY3RiYXNlbmFtZSA9IHBvcCBAZGlybmFtZTsKKwkJcHJpbnRfbmF2X2JyZWFkY3J1bWJzX3BhdGgoQGRpcm5hbWUpOworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InN1bW1hcnkiKX0sIGVzY19odG1sKCRwcm9qZWN0YmFzZW5hbWUpKTsKKwkJaWYgKGRlZmluZWQgJGFjdGlvbikgeworCQkJbXkgJGFjdGlvbl9wcmludCA9ICRhY3Rpb24gOworCQkJaWYgKGRlZmluZWQgJG9wdHN7LWFjdGlvbl9leHRyYX0pIHsKKwkJCQkkYWN0aW9uX3ByaW50ID0gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiRhY3Rpb24pfSwKKwkJCQkJJGFjdGlvbik7CisJCQl9CisJCQlwcmludCAiIC8gJGFjdGlvbl9wcmludCI7CisJCX0KKwkJaWYgKGRlZmluZWQgJG9wdHN7LWFjdGlvbl9leHRyYX0pIHsKKwkJCXByaW50ICIgLyAkb3B0c3stYWN0aW9uX2V4dHJhfSI7CisJCX0KKwkJcHJpbnQgIlxuIjsKKwl9IGVsc2lmIChkZWZpbmVkICRwcm9qZWN0X2ZpbHRlcikgeworCQlwcmludF9uYXZfYnJlYWRjcnVtYnNfcGF0aChzcGxpdCAnLycsICRwcm9qZWN0X2ZpbHRlcik7CisJfQorfQorCitzdWIgcHJpbnRfc2VhcmNoX2Zvcm0geworCWlmICghZGVmaW5lZCAkc2VhcmNodGV4dCkgeworCQkkc2VhcmNodGV4dCA9ICIiOworCX0KKwlteSAkc2VhcmNoX2hhc2g7CisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSkgeworCQkkc2VhcmNoX2hhc2ggPSAkaGFzaF9iYXNlOworCX0gZWxzaWYgKGRlZmluZWQgJGhhc2gpIHsKKwkJJHNlYXJjaF9oYXNoID0gJGhhc2g7CisJfSBlbHNlIHsKKwkJJHNlYXJjaF9oYXNoID0gIkhFQUQiOworCX0KKwlteSAkYWN0aW9uID0gJG15X3VyaTsKKwlteSAkdXNlX3BhdGhpbmZvID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3BhdGhpbmZvJyk7CisJaWYgKCR1c2VfcGF0aGluZm8pIHsKKwkJJGFjdGlvbiAuPSAiLyIuZXNjX3VybCgkcHJvamVjdCk7CisJfQorCXByaW50ICRjZ2ktPnN0YXJ0X2Zvcm0oLW1ldGhvZCA9PiAiZ2V0IiwgLWFjdGlvbiA9PiAkYWN0aW9uKSAuCisJICAgICAgIjxkaXYgY2xhc3M9XCJzZWFyY2hcIj5cbiIgLgorCSAgICAgICghJHVzZV9wYXRoaW5mbyAmJgorCSAgICAgICRjZ2ktPmlucHV0KHstbmFtZT0+InAiLCAtdmFsdWU9PiRwcm9qZWN0LCAtdHlwZT0+ImhpZGRlbiJ9KSAuICJcbiIpIC4KKwkgICAgICAkY2dpLT5pbnB1dCh7LW5hbWU9PiJhIiwgLXZhbHVlPT4ic2VhcmNoIiwgLXR5cGU9PiJoaWRkZW4ifSkgLiAiXG4iIC4KKwkgICAgICAkY2dpLT5pbnB1dCh7LW5hbWU9PiJoIiwgLXZhbHVlPT4kc2VhcmNoX2hhc2gsIC10eXBlPT4iaGlkZGVuIn0pIC4gIlxuIiAuCisJICAgICAgJGNnaS0+cG9wdXBfbWVudSgtbmFtZSA9PiAnc3QnLCAtZGVmYXVsdCA9PiAnY29tbWl0JywKKwkgICAgICAgICAgICAgICAgICAgICAgIC12YWx1ZXMgPT4gWydjb21taXQnLCAnZ3JlcCcsICdhdXRob3InLCAnY29tbWl0dGVyJywgJ3BpY2theGUnXSkgLgorCSAgICAgICIgIiAuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2VhcmNoX2hlbHAiKSwKKwkJCSAgICAgLXRpdGxlID0+ICJzZWFyY2ggaGVscCIgfSwgIj8iKSAuICIgc2VhcmNoOlxuIiwKKwkgICAgICAkY2dpLT50ZXh0ZmllbGQoLW5hbWUgPT4gInMiLCAtdmFsdWUgPT4gJHNlYXJjaHRleHQsIC1vdmVycmlkZSA9PiAxKSAuICJcbiIgLgorCSAgICAgICI8c3BhbiB0aXRsZT1cIkV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvblwiPiIgLgorCSAgICAgICRjZ2ktPmNoZWNrYm94KC1uYW1lID0+ICdzcicsIC12YWx1ZSA9PiAxLCAtbGFiZWwgPT4gJ3JlJywKKwkgICAgICAgICAgICAgICAgICAgICAtY2hlY2tlZCA9PiAkc2VhcmNoX3VzZV9yZWdleHApIC4KKwkgICAgICAiPC9zcGFuPiIgLgorCSAgICAgICI8L2Rpdj4iIC4KKwkgICAgICAkY2dpLT5lbmRfZm9ybSgpIC4gIlxuIjsKK30KKworc3ViIGdpdF9oZWFkZXJfaHRtbCB7CisJbXkgJHN0YXR1cyA9IHNoaWZ0IHx8ICIyMDAgT0siOworCW15ICRleHBpcmVzID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCW15ICR0aXRsZSA9IGdldF9wYWdlX3RpdGxlKCk7CisJbXkgJGNvbnRlbnRfdHlwZSA9IGdldF9jb250ZW50X3R5cGVfaHRtbCgpOworCXByaW50ICRjZ2ktPmhlYWRlcigtdHlwZT0+JGNvbnRlbnRfdHlwZSwgLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkgICAgICAgICAgICAgICAgICAgLXN0YXR1cz0+ICRzdGF0dXMsIC1leHBpcmVzID0+ICRleHBpcmVzKQorCQl1bmxlc3MgKCRvcHRzeyctbm9faHR0cF9oZWFkZXInfSk7CisJbXkgJG1vZF9wZXJsX3ZlcnNpb24gPSAkRU5WeydNT0RfUEVSTCd9ID8gIiAkRU5WeydNT0RfUEVSTCd9IiA6ICcnOworCXByaW50IDw8RU9GOworPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4tVVMiIGxhbmc9ImVuLVVTIj4KKzwhLS0gZ2l0IHdlYiBpbnRlcmZhY2UgdmVyc2lvbiAkdmVyc2lvbiwgKEMpIDIwMDUtMjAwNiwgS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzXEB2cmZ5Lm9yZz4sIENocmlzdGlhbiBHaWVya2UgLS0+Cis8IS0tIGdpdCBjb3JlIGJpbmFyaWVzIHZlcnNpb24gJGdpdF92ZXJzaW9uIC0tPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9IiRjb250ZW50X3R5cGU7IGNoYXJzZXQ9dXRmLTgiLz4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iZ2l0d2ViLyR2ZXJzaW9uIGdpdC8kZ2l0X3ZlcnNpb24kbW9kX3BlcmxfdmVyc2lvbiIvPgorPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJpbmRleCwgbm9mb2xsb3ciLz4KKzx0aXRsZT4kdGl0bGU8L3RpdGxlPgorRU9GCisJIyB0aGUgc3R5bGVzaGVldCwgZmF2aWNvbiBldGMgdXJscyB3b24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHBhdGhfaW5mbworCSMgdW5sZXNzIHdlIHNldCB0aGUgYXBwcm9wcmlhdGUgYmFzZSBVUkwKKwlpZiAoJEVOVnsnUEFUSF9JTkZPJ30pIHsKKwkJcHJpbnQgIjxiYXNlIGhyZWY9XCIiLmVzY191cmwoJGJhc2VfdXJsKS4iXCIgLz5cbiI7CisJfQorCXByaW50X2hlYWRlcl9saW5rcygkc3RhdHVzKTsKKworCWlmIChkZWZpbmVkICRzaXRlX2h0bWxfaGVhZF9zdHJpbmcpIHsKKwkJcHJpbnQgdG9fdXRmOCgkc2l0ZV9odG1sX2hlYWRfc3RyaW5nKTsKKwl9CisKKwlwcmludCAiPC9oZWFkPlxuIiAuCisJICAgICAgIjxib2R5PlxuIjsKKworCWlmIChkZWZpbmVkICRzaXRlX2hlYWRlciAmJiAtZiAkc2l0ZV9oZWFkZXIpIHsKKwkJaW5zZXJ0X2ZpbGUoJHNpdGVfaGVhZGVyKTsKKwl9CisKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfaGVhZGVyXCI+XG4iOworCWlmIChkZWZpbmVkICRsb2dvKSB7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGVzY191cmwoJGxvZ29fdXJsKSwKKwkJICAgICAgICAgICAgICAgLXRpdGxlID0+ICRsb2dvX2xhYmVsfSwKKwkJICAgICAgICAgICAgICAkY2dpLT5pbWcoey1zcmMgPT4gZXNjX3VybCgkbG9nbyksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAtd2lkdGggPT4gNzIsIC1oZWlnaHQgPT4gMjcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAtYWx0ID0+ICJnaXQiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsb2dvIn0pKTsKKwl9CisJcHJpbnRfbmF2X2JyZWFkY3J1bWJzKCVvcHRzKTsKKwlwcmludCAiPC9kaXY+XG4iOworCisJbXkgJGhhdmVfc2VhcmNoID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3NlYXJjaCcpOworCWlmIChkZWZpbmVkICRwcm9qZWN0ICYmICRoYXZlX3NlYXJjaCkgeworCQlwcmludF9zZWFyY2hfZm9ybSgpOworCX0KK30KKworc3ViIGdpdF9mb290ZXJfaHRtbCB7CisJbXkgJGZlZWRfY2xhc3MgPSAncnNzX2xvZ28nOworCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2Zvb3RlclwiPlxuIjsKKwlpZiAoZGVmaW5lZCAkcHJvamVjdCkgeworCQlteSAkZGVzY3IgPSBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24oJHByb2plY3QpOworCQlpZiAoZGVmaW5lZCAkZGVzY3IpIHsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9mb290ZXJfdGV4dFwiPiIgLiBlc2NfaHRtbCgkZGVzY3IpIC4gIjwvZGl2PlxuIjsKKwkJfQorCisJCW15ICVocmVmX3BhcmFtcyA9IGdldF9mZWVkX2luZm8oKTsKKwkJaWYgKCElaHJlZl9wYXJhbXMpIHsKKwkJCSRmZWVkX2NsYXNzIC49ICcgZ2VuZXJpYyc7CisJCX0KKwkJJGhyZWZfcGFyYW1zeyctdGl0bGUnfSB8fD0gJ2xvZyc7CisKKwkJZm9yZWFjaCBteSAkZm9ybWF0IChxdyhSU1MgQXRvbSkpIHsKKwkJCSRocmVmX3BhcmFtc3snYWN0aW9uJ30gPSBsYygkZm9ybWF0KTsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoJWhyZWZfcGFyYW1zKSwKKwkJCSAgICAgICAgICAgICAgLXRpdGxlID0+ICIkaHJlZl9wYXJhbXN7Jy10aXRsZSd9ICRmb3JtYXQgZmVlZCIsCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAkZmVlZF9jbGFzc30sICRmb3JtYXQpLiJcbiI7CisJCX0KKworCX0gZWxzZSB7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+Im9wbWwiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfZmlsdGVyID0+ICRwcm9qZWN0X2ZpbHRlciksCisJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICRmZWVkX2NsYXNzfSwgIk9QTUwiKSAuICIgIjsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4icHJvamVjdF9pbmRleCIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF9maWx0ZXIgPT4gJHByb2plY3RfZmlsdGVyKSwKKwkJICAgICAgICAgICAgICAtY2xhc3MgPT4gJGZlZWRfY2xhc3N9LCAiVFhUIikgLiAiXG4iOworCX0KKwlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYWdlX2Zvb3RlciIKKworCWlmIChkZWZpbmVkICR0MCAmJiBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgndGltZWQnKSkgeworCQlwcmludCAiPGRpdiBpZD1cImdlbmVyYXRpbmdfaW5mb1wiPlxuIjsKKwkJcHJpbnQgJ1RoaXMgcGFnZSB0b29rICcuCisJCSAgICAgICc8c3BhbiBpZD0iZ2VuZXJhdGluZ190aW1lIiBjbGFzcz0idGltZV9zcGFuIj4nLgorCQkgICAgICB0dl9pbnRlcnZhbCgkdDAsIFsgZ2V0dGltZW9mZGF5KCkgXSkuCisJCSAgICAgICcgc2Vjb25kcyA8L3NwYW4+Jy4KKwkJICAgICAgJyBhbmQgJy4KKwkJICAgICAgJzxzcGFuIGlkPSJnZW5lcmF0aW5nX2NtZCI+Jy4KKwkJICAgICAgJG51bWJlcl9vZl9naXRfY21kcy4KKwkJICAgICAgJzwvc3Bhbj4gZ2l0IGNvbW1hbmRzICcuCisJCSAgICAgICIgdG8gZ2VuZXJhdGUuXG4iOworCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYWdlX2Zvb3RlciIKKwl9CisKKwlpZiAoZGVmaW5lZCAkc2l0ZV9mb290ZXIgJiYgLWYgJHNpdGVfZm9vdGVyKSB7CisJCWluc2VydF9maWxlKCRzaXRlX2Zvb3Rlcik7CisJfQorCisJcHJpbnQgcXEhPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iIS5lc2NfdXJsKCRqYXZhc2NyaXB0KS5xcSEiPjwvc2NyaXB0PlxuITsKKwlpZiAoZGVmaW5lZCAkYWN0aW9uICYmCisJICAgICRhY3Rpb24gZXEgJ2JsYW1lX2luY3JlbWVudGFsJykgeworCQlwcmludCBxcSE8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+XG4hLgorCQkgICAgICBxcSFzdGFydEJsYW1lKCIhLiBlc2NfYXR0cihocmVmKGFjdGlvbj0+ImJsYW1lX2RhdGEiLCAtcmVwbGF5PT4xKSkgLnFxISIsXG4hLgorCQkgICAgICBxcSEgICAgICAgICAgICIhLiBlc2NfYXR0cihocmVmKCkpIC5xcSEiKTtcbiEuCisJCSAgICAgIHFxITwvc2NyaXB0PlxuITsKKwl9IGVsc2UgeworCQlteSAoJGpzdGltZXpvbmUsICR0el9jb29raWUsICRkYXRldGltZV9jbGFzcykgPQorCQkJZ2l0d2ViX2dldF9mZWF0dXJlKCdqYXZhc2NyaXB0LXRpbWV6b25lJyk7CisKKwkJcHJpbnQgcXEhPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPlxuIS4KKwkJICAgICAgcXEhd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiE7CisJCWlmIChnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnamF2YXNjcmlwdC1hY3Rpb25zJykpIHsKKwkJCXByaW50IHFxIQlmaXhMaW5rcygpO1xuITsKKwkJfQorCQlpZiAoJGpzdGltZXpvbmUgJiYgJHR6X2Nvb2tpZSAmJiAkZGF0ZXRpbWVfY2xhc3MpIHsKKwkJCXByaW50IHFxIQl2YXIgdHpfY29va2llID0geyBuYW1lOiAnJHR6X2Nvb2tpZScsIGV4cGlyZXM6IDE0LCBwYXRoOiAnLycgfTtcbiEuICMgaW4gZGF5cworCQkJICAgICAgcXEhCW9ubG9hZFRaU2V0dXAoJyRqc3RpbWV6b25lJywgdHpfY29va2llLCAnJGRhdGV0aW1lX2NsYXNzJyk7XG4hOworCQl9CisJCXByaW50IHFxIX07XG4hLgorCQkgICAgICBxcSE8L3NjcmlwdD5cbiE7CisJfQorCisJcHJpbnQgIjwvYm9keT5cbiIgLgorCSAgICAgICI8L2h0bWw+IjsKK30KKworIyBkaWVfZXJyb3IoPGh0dHBfc3RhdHVzX2NvZGU+LCA8ZXJyb3JfbWVzc2FnZT5bLCA8ZGV0YWlsZWRfaHRtbF9kZXNjcmlwdGlvbj5dKQorIyBFeGFtcGxlOiBkaWVfZXJyb3IoNDA0LCAnSGFzaCBub3QgZm91bmQnKQorIyBCeSBjb252ZW50aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdGF0dXMgY29kZXMgKGFzIGRlZmluZWQgaW4gUkZDIDI2MTYpOgorIyA0MDA6IEludmFsaWQgb3IgbWlzc2luZyBDR0kgcGFyYW1ldGVycywgb3IKKyMgICAgICByZXF1ZXN0ZWQgb2JqZWN0IGV4aXN0cyBidXQgaGFzIHdyb25nIHR5cGUuCisjIDQwMzogUmVxdWVzdGVkIGZlYXR1cmUgKGxpa2UgInBpY2theGUiIG9yICJzbmFwc2hvdCIpIG5vdCBlbmFibGVkIG9uCisjICAgICAgdGhpcyBzZXJ2ZXIgb3IgcHJvamVjdC4KKyMgNDA0OiBSZXF1ZXN0ZWQgb2JqZWN0L3JldmlzaW9uL3Byb2plY3QgZG9lc24ndCBleGlzdC4KKyMgNTAwOiBUaGUgc2VydmVyIGlzbid0IGNvbmZpZ3VyZWQgcHJvcGVybHksIG9yCisjICAgICAgYW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQgKGUuZy4gZmFpbGVkIGFzc2VydGlvbnMgY2F1c2VkIGJ5IGJ1Z3MpLCBvcgorIyAgICAgIGFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQgKGUuZy4gdGhlIGdpdCBiaW5hcnkgZGllZCB1bmV4cGVjdGVkbHkpLgorIyA1MDM6IFRoZSBzZXJ2ZXIgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlIChiZWNhdXNlIGl0IGlzIG92ZXJsb2FkZWQsCisjICAgICAgb3IgZG93biBmb3IgbWFpbnRlbmFuY2UpLiAgR2VuZXJhbGx5LCB0aGlzIGlzIGEgdGVtcG9yYXJ5IHN0YXRlLgorc3ViIGRpZV9lcnJvciB7CisJbXkgJHN0YXR1cyA9IHNoaWZ0IHx8IDUwMDsKKwlteSAkZXJyb3IgPSBlc2NfaHRtbChzaGlmdCkgfHwgIkludGVybmFsIFNlcnZlciBFcnJvciI7CisJbXkgJGV4dHJhID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCW15ICVodHRwX3Jlc3BvbnNlcyA9ICgKKwkJNDAwID0+ICc0MDAgQmFkIFJlcXVlc3QnLAorCQk0MDMgPT4gJzQwMyBGb3JiaWRkZW4nLAorCQk0MDQgPT4gJzQwNCBOb3QgRm91bmQnLAorCQk1MDAgPT4gJzUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InLAorCQk1MDMgPT4gJzUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlJywKKwkpOworCWdpdF9oZWFkZXJfaHRtbCgkaHR0cF9yZXNwb25zZXN7JHN0YXR1c30sIHVuZGVmLCAlb3B0cyk7CisJcHJpbnQgPDxFT0Y7Cis8ZGl2IGNsYXNzPSJwYWdlX2JvZHkiPgorPGJyIC8+PGJyIC8+Ciskc3RhdHVzIC0gJGVycm9yCis8YnIgLz4KK0VPRgorCWlmIChkZWZpbmVkICRleHRyYSkgeworCQlwcmludCAiPGhyIC8+XG4iIC4KKwkJICAgICAgIiRleHRyYVxuIjsKKwl9CisJcHJpbnQgIjwvZGl2PlxuIjsKKworCWdpdF9mb290ZXJfaHRtbCgpOworCWdvdG8gRE9ORV9HSVRXRUIKKwkJdW5sZXNzICgkb3B0c3snLWVycm9yX2hhbmRsZXInfSk7Cit9CisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIGZ1bmN0aW9ucyBwcmludGluZyBvciBvdXRwdXR0aW5nIEhUTUw6IG5hdmlnYXRpb24KKworc3ViIGdpdF9wcmludF9wYWdlX25hdiB7CisJbXkgKCRjdXJyZW50LCAkc3VwcHJlc3MsICRoZWFkLCAkdHJlZWhlYWQsICR0cmVlYmFzZSwgJGV4dHJhKSA9IEBfOworCSRleHRyYSA9ICcnIGlmICFkZWZpbmVkICRleHRyYTsgIyBwYWdlciBvciBmb3JtYXRzCisKKwlteSBAbmF2cyA9IHF3KHN1bW1hcnkgc2hvcnRsb2cgbG9nIGNvbW1pdCBjb21taXRkaWZmIHRyZWUpOworCWlmICgkc3VwcHJlc3MpIHsKKwkJQG5hdnMgPSBncmVwIHsgJF8gbmUgJHN1cHByZXNzIH0gQG5hdnM7CisJfQorCisJbXkgJWFyZyA9IG1hcCB7ICRfID0+IHthY3Rpb249PiRffSB9IEBuYXZzOworCWlmIChkZWZpbmVkICRoZWFkKSB7CisJCWZvciAocXcoY29tbWl0IGNvbW1pdGRpZmYpKSB7CisJCQkkYXJneyRffXsnaGFzaCd9ID0gJGhlYWQ7CisJCX0KKwkJaWYgKCRjdXJyZW50ID1+IG0vXih0cmVlIHwgbG9nIHwgc2hvcnRsb2cgfCBjb21taXQgfCBjb21taXRkaWZmIHwgc2VhcmNoKSQveCkgeworCQkJZm9yIChxdyhzaG9ydGxvZyBsb2cpKSB7CisJCQkJJGFyZ3skX317J2hhc2gnfSA9ICRoZWFkOworCQkJfQorCQl9CisJfQorCisJJGFyZ3sndHJlZSd9eydoYXNoJ30gPSAkdHJlZWhlYWQgaWYgZGVmaW5lZCAkdHJlZWhlYWQ7CisJJGFyZ3sndHJlZSd9eydoYXNoX2Jhc2UnfSA9ICR0cmVlYmFzZSBpZiBkZWZpbmVkICR0cmVlYmFzZTsKKworCW15IEBhY3Rpb25zID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdhY3Rpb25zJyk7CisJbXkgJXJlcGwgPSAoCisJCSclJyA9PiAnJScsCisJCSduJyA9PiAkcHJvamVjdCwgICAgICAgICAjIHByb2plY3QgbmFtZQorCQknZicgPT4gJGdpdF9kaXIsICAgICAgICAgIyBwcm9qZWN0IHBhdGggd2l0aGluIGZpbGVzeXN0ZW0KKwkJJ2gnID0+ICR0cmVlaGVhZCB8fCAnJywgICMgY3VycmVudCBoYXNoICgnaCcgcGFyYW1ldGVyKQorCQknYicgPT4gJHRyZWViYXNlIHx8ICcnLCAgIyBoYXNoIGJhc2UgKCdoYicgcGFyYW1ldGVyKQorCSk7CisJd2hpbGUgKEBhY3Rpb25zKSB7CisJCW15ICgkbGFiZWwsICRsaW5rLCAkcG9zKSA9IHNwbGljZShAYWN0aW9ucywwLDMpOworCQkjIGluc2VydAorCQlAbmF2cyA9IG1hcCB7ICRfIGVxICRwb3MgPyAoJF8sICRsYWJlbCkgOiAkXyB9IEBuYXZzOworCQkjIG11bmNoIG11bmNoCisJCSRsaW5rID1+IHMvJShbJW5maGJdKS8kcmVwbHskMX0vZzsKKwkJJGFyZ3skbGFiZWx9eydfaHJlZid9ID0gJGxpbms7CisJfQorCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX25hdlwiPlxuIiAuCisJCShqb2luICIgfCAiLAorCQkgbWFwIHsgJF8gZXEgJGN1cnJlbnQgPworCQkgICAgICAgJF8gOiAkY2dpLT5hKHstaHJlZiA9PiAoJGFyZ3skX317X2hyZWZ9ID8gJGFyZ3skX317X2hyZWZ9IDogaHJlZigleyRhcmd7JF99fSkpfSwgIiRfIikKKwkJIH0gQG5hdnMpOworCXByaW50ICI8YnIvPlxuJGV4dHJhPGJyLz5cbiIgLgorCSAgICAgICI8L2Rpdj5cbiI7Cit9CisKKyMgcmV0dXJucyBhIHN1Ym1lbnUgZm9yIHRoZSBuYXZpZ2F0aW9uIG9mIHRoZSByZWZzIHZpZXdzICh0YWdzLCBoZWFkcywKKyMgcmVtb3Rlcykgd2l0aCB0aGUgY3VycmVudCB2aWV3IGRpc2FibGVkIGFuZCB0aGUgcmVtb3RlcyB2aWV3IG9ubHkKKyMgYXZhaWxhYmxlIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQKK3N1YiBmb3JtYXRfcmVmX3ZpZXdzIHsKKwlteSAoJGN1cnJlbnQpID0gQF87CisJbXkgQHJlZl92aWV3cyA9IHF3e3RhZ3MgaGVhZHN9OworCXB1c2ggQHJlZl92aWV3cywgJ3JlbW90ZXMnIGlmIGdpdHdlYl9jaGVja19mZWF0dXJlKCdyZW1vdGVfaGVhZHMnKTsKKwlyZXR1cm4gam9pbiAiIHwgIiwgbWFwIHsKKwkJJF8gZXEgJGN1cnJlbnQgPyAkXyA6CisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kXyl9LCAkXykKKwl9IEByZWZfdmlld3MKK30KKworc3ViIGZvcm1hdF9wYWdpbmdfbmF2IHsKKwlteSAoJGFjdGlvbiwgJHBhZ2UsICRoYXNfbmV4dF9saW5rKSA9IEBfOworCW15ICRwYWdpbmdfbmF2OworCisKKwlpZiAoJHBhZ2UgPiAwKSB7CisJCSRwYWdpbmdfbmF2IC49CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PnVuZGVmKX0sICJmaXJzdCIpIC4KKwkJCSIgJnNkb3Q7ICIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT4kcGFnZS0xKSwKKwkJCSAgICAgICAgIC1hY2Nlc3NrZXkgPT4gInAiLCAtdGl0bGUgPT4gIkFsdC1wIn0sICJwcmV2Iik7CisJfSBlbHNlIHsKKwkJJHBhZ2luZ19uYXYgLj0gImZpcnN0ICZzZG90OyBwcmV2IjsKKwl9CisKKwlpZiAoJGhhc19uZXh0X2xpbmspIHsKKwkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgIiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlKzEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAibiIsIC10aXRsZSA9PiAiQWx0LW4ifSwgIm5leHQiKTsKKwl9IGVsc2UgeworCQkkcGFnaW5nX25hdiAuPSAiICZzZG90OyBuZXh0IjsKKwl9CisKKwlyZXR1cm4gJHBhZ2luZ19uYXY7Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGZ1bmN0aW9ucyBwcmludGluZyBvciBvdXRwdXR0aW5nIEhUTUw6IGRpdgorCitzdWIgZ2l0X3ByaW50X2hlYWRlcl9kaXYgeworCW15ICgkYWN0aW9uLCAkdGl0bGUsICRoYXNoLCAkaGFzaF9iYXNlKSA9IEBfOworCW15ICVhcmdzID0gKCk7CisKKwkkYXJnc3snYWN0aW9uJ30gPSAkYWN0aW9uOworCSRhcmdzeydoYXNoJ30gPSAkaGFzaCBpZiAkaGFzaDsKKwkkYXJnc3snaGFzaF9iYXNlJ30gPSAkaGFzaF9iYXNlIGlmICRoYXNoX2Jhc2U7CisKKwlwcmludCAiPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuIiAuCisJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZiglYXJncyksIC1jbGFzcyA9PiAidGl0bGUifSwKKwkgICAgICAkdGl0bGUgPyAkdGl0bGUgOiAkYWN0aW9uKSAuCisJICAgICAgIlxuPC9kaXY+XG4iOworfQorCitzdWIgZm9ybWF0X3JlcG9fdXJsIHsKKwlteSAoJG5hbWUsICR1cmwpID0gQF87CisJcmV0dXJuICI8dHIgY2xhc3M9XCJtZXRhZGF0YV91cmxcIj48dGQ+JG5hbWU8L3RkPjx0ZD4kdXJsPC90ZD48L3RyPlxuIjsKK30KKworIyBHcm91cCBvdXRwdXQgYnkgcGxhY2luZyBpdCBpbiBhIERJViBlbGVtZW50IGFuZCBhZGRpbmcgYSBoZWFkZXIuCisjIE9wdGlvbnMgZm9yIHN0YXJ0X2RpdigpIGNhbiBiZSBwcm92aWRlZCBieSBwYXNzaW5nIGEgaGFzaCByZWZlcmVuY2UgYXMgdGhlCisjIGZpcnN0IHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb24uCisjIE9wdGlvbnMgdG8gZ2l0X3ByaW50X2hlYWRlcl9kaXYoKSBjYW4gYmUgcHJvdmlkZWQgYnkgcGFzc2luZyBhbiBhcnJheQorIyByZWZlcmVuY2UuIFRoaXMgbXVzdCBmb2xsb3cgdGhlIG9wdGlvbnMgdG8gc3RhcnRfZGl2IGlmIHRoZXkgYXJlIHByZXNlbnQuCisjIFRoZSBjb250ZW50IGNhbiBiZSBhIHNjYWxhciwgd2hpY2ggaXMgb3V0cHV0IGFzLWlzLCBhIHNjYWxhciByZWZlcmVuY2UsIHdoaWNoCisjIGlzIG91dHB1dCBhZnRlciBodG1sIGVzY2FwaW5nLCBhbiBJTyBoYW5kbGUgcGFzc2VkIGVpdGhlciBhcyAqaGFuZGxlIG9yCisjICpoYW5kbGV7SU99LCBvciBhIGZ1bmN0aW9uIHJlZmVyZW5jZS4gSW4gdGhlIGxhdHRlciBjYXNlIGFsbCBmb2xsb3dpbmcKKyMgcGFyYW1ldGVycyB3aWxsIGJlIHRha2VuIGFzIGFyZ3VtZW50IHRvIHRoZSBjb250ZW50IGZ1bmN0aW9uIGNhbGwuCitzdWIgZ2l0X3ByaW50X3NlY3Rpb24geworCW15ICgkZGl2X2FyZ3MsICRoZWFkZXJfYXJncywgJGNvbnRlbnQpOworCW15ICRhcmcgPSBzaGlmdDsKKwlpZiAocmVmKCRhcmcpIGVxICdIQVNIJykgeworCQkkZGl2X2FyZ3MgPSAkYXJnOworCQkkYXJnID0gc2hpZnQ7CisJfQorCWlmIChyZWYoJGFyZykgZXEgJ0FSUkFZJykgeworCQkkaGVhZGVyX2FyZ3MgPSAkYXJnOworCQkkYXJnID0gc2hpZnQ7CisJfQorCSRjb250ZW50ID0gJGFyZzsKKworCXByaW50ICRjZ2ktPnN0YXJ0X2RpdigkZGl2X2FyZ3MpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KEAkaGVhZGVyX2FyZ3MpOworCisJaWYgKHJlZigkY29udGVudCkgZXEgJ0NPREUnKSB7CisJCSRjb250ZW50LT4oQF8pOworCX0gZWxzaWYgKHJlZigkY29udGVudCkgZXEgJ1NDQUxBUicpIHsKKwkJcHJpbnQgZXNjX2h0bWwoJCRjb250ZW50KTsKKwl9IGVsc2lmIChyZWYoJGNvbnRlbnQpIGVxICdHTE9CJyBvciByZWYoJGNvbnRlbnQpIGVxICdJTzo6SGFuZGxlJykgeworCQlwcmludCA8JGNvbnRlbnQ+OworCX0gZWxzaWYgKCFyZWYoJGNvbnRlbnQpICYmIGRlZmluZWQoJGNvbnRlbnQpKSB7CisJCXByaW50ICRjb250ZW50OworCX0KKworCXByaW50ICRjZ2ktPmVuZF9kaXY7Cit9CisKK3N1YiBmb3JtYXRfdGltZXN0YW1wX2h0bWwgeworCW15ICRkYXRlID0gc2hpZnQ7CisJbXkgJHN0cnRpbWUgPSAkZGF0ZS0+eydyZmMyODIyJ307CisKKwlteSAodW5kZWYsIHVuZGVmLCAkZGF0ZXRpbWVfY2xhc3MpID0KKwkJZ2l0d2ViX2dldF9mZWF0dXJlKCdqYXZhc2NyaXB0LXRpbWV6b25lJyk7CisJaWYgKCRkYXRldGltZV9jbGFzcykgeworCQkkc3RydGltZSA9IHFxITxzcGFuIGNsYXNzPSIkZGF0ZXRpbWVfY2xhc3MiPiRzdHJ0aW1lPC9zcGFuPiE7CisJfQorCisJbXkgJGxvY2FsdGltZV9mb3JtYXQgPSAnKCUwMmQ6JTAyZCAlcyknOworCWlmICgkZGF0ZS0+eydob3VyX2xvY2FsJ30gPCA2KSB7CisJCSRsb2NhbHRpbWVfZm9ybWF0ID0gJyg8c3BhbiBjbGFzcz0iYXRuaWdodCI+JTAyZDolMDJkPC9zcGFuPiAlcyknOworCX0KKwkkc3RydGltZSAuPSAnICcgLgorCSAgICAgICAgICAgIHNwcmludGYoJGxvY2FsdGltZV9mb3JtYXQsCisJICAgICAgICAgICAgICAgICAgICAkZGF0ZS0+eydob3VyX2xvY2FsJ30sICRkYXRlLT57J21pbnV0ZV9sb2NhbCd9LCAkZGF0ZS0+eyd0el9sb2NhbCd9KTsKKworCXJldHVybiAkc3RydGltZTsKK30KKworIyBPdXRwdXRzIHRoZSBhdXRob3IgbmFtZSBhbmQgZGF0ZSBpbiBsb25nIGZvcm0KK3N1YiBnaXRfcHJpbnRfYXV0aG9yc2hpcCB7CisJbXkgJGNvID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKwlteSAkdGFnID0gJG9wdHN7LXRhZ30gfHwgJ2Rpdic7CisJbXkgJGF1dGhvciA9ICRjby0+eydhdXRob3JfbmFtZSd9OworCisJbXkgJWFkID0gcGFyc2VfZGF0ZSgkY28tPnsnYXV0aG9yX2Vwb2NoJ30sICRjby0+eydhdXRob3JfdHonfSk7CisJcHJpbnQgIjwkdGFnIGNsYXNzPVwiYXV0aG9yX2RhdGVcIj4iIC4KKwkgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkYXV0aG9yLCAiYXV0aG9yIiwgZXNjX2h0bWwoJGF1dGhvcikpIC4KKwkgICAgICAiIFsiLmZvcm1hdF90aW1lc3RhbXBfaHRtbChcJWFkKS4iXSIuCisJICAgICAgZ2l0X2dldF9hdmF0YXIoJGNvLT57J2F1dGhvcl9lbWFpbCd9LCAtcGFkX2JlZm9yZSA9PiAxKSAuCisJICAgICAgIjwvJHRhZz5cbiI7Cit9CisKKyMgT3V0cHV0cyB0YWJsZSByb3dzIGNvbnRhaW5pbmcgdGhlIGZ1bGwgYXV0aG9yIG9yIGNvbW1pdHRlciBpbmZvcm1hdGlvbiwKKyMgaW4gdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgJ2NvbW1pdCcgdmlldyAoJiBzaW1pbGFyKS4KKyMgUGFyYW1ldGVycyBhcmUgYSBjb21taXQgaGFzaCByZWZlcmVuY2UsIGZvbGxvd2VkIGJ5IHRoZSBsaXN0IG9mIHBlb3BsZQorIyB0byBvdXRwdXQgaW5mb3JtYXRpb24gZm9yLiBJZiB0aGUgbGlzdCBpcyBlbXB0eSBpdCBkZWZhdWx0cyB0byBib3RoCisjIGF1dGhvciBhbmQgY29tbWl0dGVyLgorc3ViIGdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MgeworCW15ICRjbyA9IHNoaWZ0OworCSMgdG9vIGJhZCB3ZSBjYW4ndCB1c2UgQHBlb3BsZSA9IEBfIHx8ICgnYXV0aG9yJywgJ2NvbW1pdHRlcicpCisJbXkgQHBlb3BsZSA9IEBfOworCUBwZW9wbGUgPSAoJ2F1dGhvcicsICdjb21taXR0ZXInKSB1bmxlc3MgQHBlb3BsZTsKKwlmb3JlYWNoIG15ICR3aG8gKEBwZW9wbGUpIHsKKwkJbXkgJXdkID0gcGFyc2VfZGF0ZSgkY28tPnsiJHt3aG99X2Vwb2NoIn0sICRjby0+eyIke3dob31fdHoifSk7CisJCXByaW50ICI8dHI+PHRkPiR3aG88L3RkPjx0ZD4iIC4KKwkJICAgICAgZm9ybWF0X3NlYXJjaF9hdXRob3IoJGNvLT57IiR7d2hvfV9uYW1lIn0sICR3aG8sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY19odG1sKCRjby0+eyIke3dob31fbmFtZSJ9KSkgLiAiICIgLgorCQkgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkY28tPnsiJHt3aG99X2VtYWlsIn0sICR3aG8sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY19odG1sKCI8IiAuICRjby0+eyIke3dob31fZW1haWwifSAuICI+IikpIC4KKwkJICAgICAgIjwvdGQ+PHRkIHJvd3NwYW49XCIyXCI+IiAuCisJCSAgICAgIGdpdF9nZXRfYXZhdGFyKCRjby0+eyIke3dob31fZW1haWwifSwgLXNpemUgPT4gJ2RvdWJsZScpIC4KKwkJICAgICAgIjwvdGQ+PC90cj5cbiIgLgorCQkgICAgICAiPHRyPiIgLgorCQkgICAgICAiPHRkPjwvdGQ+PHRkPiIgLgorCQkgICAgICBmb3JtYXRfdGltZXN0YW1wX2h0bWwoXCV3ZCkgLgorCQkgICAgICAiPC90ZD4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KK30KKworc3ViIGdpdF9wcmludF9wYWdlX3BhdGggeworCW15ICRuYW1lID0gc2hpZnQ7CisJbXkgJHR5cGUgPSBzaGlmdDsKKwlteSAkaGIgPSBzaGlmdDsKKworCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX3BhdGhcIj4iOworCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2hfYmFzZT0+JGhiKSwKKwkgICAgICAgICAgICAgIC10aXRsZSA9PiAndHJlZSByb290J30sIHRvX3V0ZjgoIlskcHJvamVjdF0iKSk7CisJcHJpbnQgIiAvICI7CisJaWYgKGRlZmluZWQgJG5hbWUpIHsKKwkJbXkgQGRpcm5hbWUgPSBzcGxpdCAnLycsICRuYW1lOworCQlteSAkYmFzZW5hbWUgPSBwb3AgQGRpcm5hbWU7CisJCW15ICRmdWxsbmFtZSA9ICcnOworCisJCWZvcmVhY2ggbXkgJGRpciAoQGRpcm5hbWUpIHsKKwkJCSRmdWxsbmFtZSAuPSAoJGZ1bGxuYW1lID8gJy8nIDogJycpIC4gJGRpcjsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGZpbGVfbmFtZT0+JGZ1bGxuYW1lLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYiksCisJCQkgICAgICAgICAgICAgIC10aXRsZSA9PiAkZnVsbG5hbWV9LCBlc2NfcGF0aCgkZGlyKSk7CisJCQlwcmludCAiIC8gIjsKKwkJfQorCQlpZiAoZGVmaW5lZCAkdHlwZSAmJiAkdHlwZSBlcSAnYmxvYicpIHsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGIpLAorCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gJG5hbWV9LCBlc2NfcGF0aCgkYmFzZW5hbWUpKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkdHlwZSAmJiAkdHlwZSBlcSAndHJlZScpIHsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGIpLAorCQkJICAgICAgICAgICAgICAtdGl0bGUgPT4gJG5hbWV9LCBlc2NfcGF0aCgkYmFzZW5hbWUpKTsKKwkJCXByaW50ICIgLyAiOworCQl9IGVsc2UgeworCQkJcHJpbnQgZXNjX3BhdGgoJGJhc2VuYW1lKTsKKwkJfQorCX0KKwlwcmludCAiPGJyLz48L2Rpdj5cbiI7Cit9CisKK3N1YiBnaXRfcHJpbnRfbG9nIHsKKwlteSAkbG9nID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCWlmICgkb3B0c3snLXJlbW92ZV90aXRsZSd9KSB7CisJCSMgcmVtb3ZlIHRpdGxlLCBpLmUuIGZpcnN0IGxpbmUgb2YgbG9nCisJCXNoaWZ0IEAkbG9nOworCX0KKwkjIHJlbW92ZSBsZWFkaW5nIGVtcHR5IGxpbmVzCisJd2hpbGUgKGRlZmluZWQgJGxvZy0+WzBdICYmICRsb2ctPlswXSBlcSAiIikgeworCQlzaGlmdCBAJGxvZzsKKwl9CisKKwkjIHByaW50IGxvZworCW15ICRza2lwX2JsYW5rX2xpbmUgPSAwOworCWZvcmVhY2ggbXkgJGxpbmUgKEAkbG9nKSB7CisJCWlmICgkbGluZSA9fiBtL15ccyooW0EtWl1bLUEtWmEtel0qLVtCYl15fENbQ2NdKTogLykgeworCQkJaWYgKCEgJG9wdHN7Jy1yZW1vdmVfc2lnbm9mZid9KSB7CisJCQkJcHJpbnQgIjxzcGFuIGNsYXNzPVwic2lnbm9mZlwiPiIgLiBlc2NfaHRtbCgkbGluZSkgLiAiPC9zcGFuPjxici8+XG4iOworCQkJCSRza2lwX2JsYW5rX2xpbmUgPSAxOworCQkJfQorCQkJbmV4dDsKKwkJfQorCisJCWlmICgkbGluZSA9fiBtLFxzKihbYS16XSpsaW5rKTogKGh0dHBzPzovL1xTKyksaSkgeworCQkJaWYgKCEgJG9wdHN7Jy1yZW1vdmVfc2lnbm9mZid9KSB7CisJCQkJcHJpbnQgIjxzcGFuIGNsYXNzPVwic2lnbm9mZlwiPiIgLiBlc2NfaHRtbCgkMSkgLiAiOiAiIC4KKwkJCQkJIjxhIGhyZWY9XCIiIC4gZXNjX2h0bWwoJDIpIC4gIlwiPiIgLiBlc2NfaHRtbCgkMikgLiAiPC9hPiIgLgorCQkJCQkiPC9zcGFuPjxici8+XG4iOworCQkJCSRza2lwX2JsYW5rX2xpbmUgPSAxOworCQkJfQorCQkJbmV4dDsKKwkJfQorCisJCSMgcHJpbnQgb25seSBvbmUgZW1wdHkgbGluZQorCQkjIGRvIG5vdCBwcmludCBlbXB0eSBsaW5lIGFmdGVyIHNpZ25vZmYKKwkJaWYgKCRsaW5lIGVxICIiKSB7CisJCQluZXh0IGlmICgkc2tpcF9ibGFua19saW5lKTsKKwkJCSRza2lwX2JsYW5rX2xpbmUgPSAxOworCQl9IGVsc2UgeworCQkJJHNraXBfYmxhbmtfbGluZSA9IDA7CisJCX0KKworCQlwcmludCBmb3JtYXRfbG9nX2xpbmVfaHRtbCgkbGluZSkgLiAiPGJyLz5cbiI7CisJfQorCisJaWYgKCRvcHRzeyctZmluYWxfZW1wdHlfbGluZSd9KSB7CisJCSMgZW5kIHdpdGggc2luZ2xlIGVtcHR5IGxpbmUKKwkJcHJpbnQgIjxici8+XG4iIHVubGVzcyAkc2tpcF9ibGFua19saW5lOworCX0KK30KKworIyByZXR1cm4gbGluayB0YXJnZXQgKHdoYXQgbGluayBwb2ludHMgdG8pCitzdWIgZ2l0X2dldF9saW5rX3RhcmdldCB7CisJbXkgJGhhc2ggPSBzaGlmdDsKKwlteSAkbGlua190YXJnZXQ7CisKKwkjIHJlYWQgbGluaworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJjYXQtZmlsZSIsICJibG9iIiwgJGhhc2gKKwkJb3IgcmV0dXJuOworCXsKKwkJbG9jYWwgJC8gPSB1bmRlZjsKKwkJJGxpbmtfdGFyZ2V0ID0gPCRmZD47CisJfQorCWNsb3NlICRmZAorCQlvciByZXR1cm47CisKKwlyZXR1cm4gJGxpbmtfdGFyZ2V0OworfQorCisjIGdpdmVuIGxpbmsgdGFyZ2V0LCBhbmQgdGhlIGRpcmVjdG9yeSAoYmFzZWRpcikgdGhlIGxpbmsgaXMgaW4sCisjIHJldHVybiB0YXJnZXQgb2YgbGluayByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5ICh0b3AgdHJlZSk7CisjIHJldHVybiB1bmRlZiBpZiBpdCBpcyBub3QgcG9zc2libGUgKGluY2x1ZGluZyBhYnNvbHV0ZSBsaW5rcykuCitzdWIgbm9ybWFsaXplX2xpbmtfdGFyZ2V0IHsKKwlteSAoJGxpbmtfdGFyZ2V0LCAkYmFzZWRpcikgPSBAXzsKKworCSMgYWJzb2x1dGUgc3ltbGlua3MgKGJlZ2lubmluZyB3aXRoICcvJykgY2Fubm90IGJlIG5vcm1hbGl6ZWQKKwlyZXR1cm4gaWYgKHN1YnN0cigkbGlua190YXJnZXQsIDAsIDEpIGVxICcvJyk7CisKKwkjIG5vcm1hbGl6ZSBsaW5rIHRhcmdldCB0byBwYXRoIGZyb20gdG9wIChyb290KSB0cmVlIChkaXIpCisJbXkgJHBhdGg7CisJaWYgKCRiYXNlZGlyKSB7CisJCSRwYXRoID0gJGJhc2VkaXIgLiAnLycgLiAkbGlua190YXJnZXQ7CisJfSBlbHNlIHsKKwkJIyB3ZSBhcmUgaW4gdG9wIChyb290KSB0cmVlIChkaXIpCisJCSRwYXRoID0gJGxpbmtfdGFyZ2V0OworCX0KKworCSMgcmVtb3ZlIC8vLCAvLi8sIGFuZCAvLi4vCisJbXkgQHBhdGhfcGFydHM7CisJZm9yZWFjaCBteSAkcGFydCAoc3BsaXQoJy8nLCAkcGF0aCkpIHsKKwkJIyBkaXNjYXJkICcuJyBhbmQgJycKKwkJbmV4dCBpZiAoISRwYXJ0IHx8ICRwYXJ0IGVxICcuJyk7CisJCSMgaGFuZGxlICcuLicKKwkJaWYgKCRwYXJ0IGVxICcuLicpIHsKKwkJCWlmIChAcGF0aF9wYXJ0cykgeworCQkJCXBvcCBAcGF0aF9wYXJ0czsKKwkJCX0gZWxzZSB7CisJCQkJIyBsaW5rIGxlYWRzIG91dHNpZGUgcmVwb3NpdG9yeSAob3V0c2lkZSB0b3AgZGlyKQorCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB1c2ggQHBhdGhfcGFydHMsICRwYXJ0OworCQl9CisJfQorCSRwYXRoID0gam9pbignLycsIEBwYXRoX3BhcnRzKTsKKworCXJldHVybiAkcGF0aDsKK30KKworIyBwcmludCB0cmVlIGVudHJ5IChyb3cgb2YgZ2l0X3RyZWUpLCBidXQgd2l0aG91dCBlbmNvbXBhc3NpbmcgPHRyPiBlbGVtZW50CitzdWIgZ2l0X3ByaW50X3RyZWVfZW50cnkgeworCW15ICgkdCwgJGJhc2VkaXIsICRoYXNoX2Jhc2UsICRoYXZlX2JsYW1lKSA9IEBfOworCisJbXkgJWJhc2Vfa2V5ID0gKCk7CisJJGJhc2Vfa2V5eydoYXNoX2Jhc2UnfSA9ICRoYXNoX2Jhc2UgaWYgZGVmaW5lZCAkaGFzaF9iYXNlOworCisJIyBUaGUgZm9ybWF0IG9mIGEgdGFibGUgcm93IGlzOiBtb2RlIGxpc3QgbGluay4gIFdoZXJlIG1vZGUgaXMKKwkjIHRoZSBtb2RlIG9mIHRoZSBlbnRyeSwgbGlzdCBpcyB0aGUgbmFtZSBvZiB0aGUgZW50cnksIGFuIGhyZWYsCisJIyBhbmQgbGluayBpcyB0aGUgYWN0aW9uIGxpbmtzIG9mIHRoZSBlbnRyeS4KKworCXByaW50ICI8dGQgY2xhc3M9XCJtb2RlXCI+IiAuIG1vZGVfc3RyKCR0LT57J21vZGUnfSkgLiAiPC90ZD5cbiI7CisJaWYgKGV4aXN0cyAkdC0+eydzaXplJ30pIHsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cInNpemVcIj4kdC0+eydzaXplJ308L3RkPlxuIjsKKwl9CisJaWYgKCR0LT57J3R5cGUnfSBlcSAiYmxvYiIpIHsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpc3RcIj4iIC4KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiR0LT57J2hhc2gnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iLCAlYmFzZV9rZXkpLAorCQkJICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJHQtPnsnbmFtZSd9KSk7CisJCWlmIChTX0lTTE5LKG9jdCAkdC0+eydtb2RlJ30pKSB7CisJCQlteSAkbGlua190YXJnZXQgPSBnaXRfZ2V0X2xpbmtfdGFyZ2V0KCR0LT57J2hhc2gnfSk7CisJCQlpZiAoJGxpbmtfdGFyZ2V0KSB7CisJCQkJbXkgJG5vcm1fdGFyZ2V0ID0gbm9ybWFsaXplX2xpbmtfdGFyZ2V0KCRsaW5rX3RhcmdldCwgJGJhc2VkaXIpOworCQkJCWlmIChkZWZpbmVkICRub3JtX3RhcmdldCkgeworCQkJCQlwcmludCAiIC0+ICIgLgorCQkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Im9iamVjdCIsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRub3JtX3RhcmdldCksCisJCQkJCSAgICAgICAgICAgICAgIC10aXRsZSA9PiAkbm9ybV90YXJnZXR9LCBlc2NfcGF0aCgkbGlua190YXJnZXQpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludCAiIC0+ICIgLiBlc2NfcGF0aCgkbGlua190YXJnZXQpOworCQkJCX0KKwkJCX0KKwkJfQorCQlwcmludCAiPC90ZD5cbiI7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwgJWJhc2Vfa2V5KX0sCisJCSAgICAgICAgICAgICAgImJsb2IiKTsKKwkJaWYgKCRoYXZlX2JsYW1lKSB7CisJCQlwcmludCAiIHwgIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIsICViYXNlX2tleSl9LAorCQkJICAgICAgICAgICAgICAiYmxhbWUiKTsKKwkJfQorCQlpZiAoZGVmaW5lZCAkaGFzaF9iYXNlKSB7CisJCQlwcmludCAiIHwgIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiR0LT57J2hhc2gnfSwgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iKX0sCisJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCX0KKwkJcHJpbnQgIiB8ICIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIpfSwKKwkJCSAgICAgICAgInJhdyIpOworCQlwcmludCAiPC90ZD5cbiI7CisKKwl9IGVsc2lmICgkdC0+eyd0eXBlJ30gZXEgInRyZWUiKSB7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaXN0XCI+IjsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlYmFzZV9rZXkpfSwKKwkJICAgICAgICAgICAgICBlc2NfcGF0aCgkdC0+eyduYW1lJ30pKTsKKwkJcHJpbnQgIjwvdGQ+XG4iOworCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiR0LT57J2hhc2gnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWJhc2Vfa2V5KX0sCisJCSAgICAgICAgICAgICAgInRyZWUiKTsKKwkJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSkgeworCQkJcHJpbnQgIiB8ICIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIpfSwKKwkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJfQorCQlwcmludCAiPC90ZD5cbiI7CisJfSBlbHNlIHsKKwkJIyB1bmtub3duIG9iamVjdDogd2UgY2FuIG9ubHkgcHJlc2VudCBoaXN0b3J5IGZvciBpdAorCQkjICh0aGlzIGluY2x1ZGVzICdjb21taXQnIG9iamVjdCwgaS5lLiBzdWJtb2R1bGUgc3VwcG9ydCkKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpc3RcIj4iIC4KKwkJICAgICAgZXNjX3BhdGgoJHQtPnsnbmFtZSd9KSAuCisJCSAgICAgICI8L3RkPlxuIjsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQlpZiAoZGVmaW5lZCAkaGFzaF9iYXNlKSB7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9Iil9LAorCQkJICAgICAgICAgICAgICAiaGlzdG9yeSIpOworCQl9CisJCXByaW50ICI8L3RkPlxuIjsKKwl9Cit9CisKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGZ1bmN0aW9ucyBwcmludGluZyBsYXJnZSBmcmFnbWVudHMgb2YgSFRNTAorCisjIGdldCBwcmUtaW1hZ2UgZmlsZW5hbWVzIGZvciBtZXJnZSAoY29tYmluZWQpIGRpZmYKK3N1YiBmaWxsX2Zyb21fZmlsZV9pbmZvIHsKKwlteSAoJGRpZmYsIEBwYXJlbnRzKSA9IEBfOworCisJJGRpZmYtPnsnZnJvbV9maWxlJ30gPSBbIF07CisJJGRpZmYtPnsnZnJvbV9maWxlJ31bJGRpZmYtPnsnbnBhcmVudHMnfSAtIDFdID0gdW5kZWY7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgJGRpZmYtPnsnbnBhcmVudHMnfTsgJGkrKykgeworCQlpZiAoJGRpZmYtPnsnc3RhdHVzJ31bJGldIGVxICdSJyB8fAorCQkgICAgJGRpZmYtPnsnc3RhdHVzJ31bJGldIGVxICdDJykgeworCQkJJGRpZmYtPnsnZnJvbV9maWxlJ31bJGldID0KKwkJCQlnaXRfZ2V0X3BhdGhfYnlfaGFzaCgkcGFyZW50c1skaV0sICRkaWZmLT57J2Zyb21faWQnfVskaV0pOworCQl9CisJfQorCisJcmV0dXJuICRkaWZmOworfQorCisjIGlzIGN1cnJlbnQgcmF3IGRpZmZ0cmVlIGxpbmUgb2YgZmlsZSBkZWxldGlvbgorc3ViIGlzX2RlbGV0ZWQgeworCW15ICRkaWZmaW5mbyA9IHNoaWZ0OworCisJcmV0dXJuICRkaWZmaW5mby0+eyd0b19pZCd9IGVxICgnMCcgeCA0MCkgfHwgJGRpZmZpbmZvLT57J3RvX2lkJ30gZXEgKCcwJyB4IDY0KTsKK30KKworIyBkb2VzIHBhdGNoIGNvcnJlc3BvbmQgdG8gW3ByZXZpb3VzXSBkaWZmdHJlZSByYXcgbGluZQorIyAkZGlmZmluZm8gIC0gaGFzaHJlZiBvZiBwYXJzZWQgcmF3IGRpZmYgZm9ybWF0CisjICRwYXRjaGluZm8gLSBoYXNocmVmIG9mIHBhcnNlZCBwYXRjaCBkaWZmIGZvcm1hdAorIyAgICAgICAgICAgICAgKHRoZSBzYW1lIGtleXMgYXMgaW4gJGRpZmZpbmZvKQorc3ViIGlzX3BhdGNoX3NwbGl0IHsKKwlteSAoJGRpZmZpbmZvLCAkcGF0Y2hpbmZvKSA9IEBfOworCisJcmV0dXJuIGRlZmluZWQgJGRpZmZpbmZvICYmIGRlZmluZWQgJHBhdGNoaW5mbworCQkmJiAkZGlmZmluZm8tPnsndG9fZmlsZSd9IGVxICRwYXRjaGluZm8tPnsndG9fZmlsZSd9OworfQorCisKK3N1YiBnaXRfZGlmZnRyZWVfYm9keSB7CisJbXkgKCRkaWZmdHJlZSwgJGhhc2gsIEBwYXJlbnRzKSA9IEBfOworCW15ICgkcGFyZW50KSA9ICRwYXJlbnRzWzBdOworCW15ICRoYXZlX2JsYW1lID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJyk7CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJsaXN0X2hlYWRcIj5cbiI7CisJaWYgKCQjeyRkaWZmdHJlZX0gPiAxMCkgeworCQlwcmludCgoJCN7JGRpZmZ0cmVlfSArIDEpIC4gIiBmaWxlcyBjaGFuZ2VkOlxuIik7CisJfQorCXByaW50ICI8L2Rpdj5cbiI7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiIiAuCisJICAgICAgKEBwYXJlbnRzID4gMSA/ICJjb21iaW5lZCAiIDogIiIpIC4KKwkgICAgICAiZGlmZl90cmVlXCI+XG4iOworCisJIyBoZWFkZXIgb25seSBmb3IgY29tYmluZWQgZGlmZiBpbiAnY29tbWl0ZGlmZicgdmlldworCW15ICRoYXNfaGVhZGVyID0gQCRkaWZmdHJlZSAmJiBAcGFyZW50cyA+IDEgJiYgJGFjdGlvbiBlcSAnY29tbWl0ZGlmZic7CisJaWYgKCRoYXNfaGVhZGVyKSB7CisJCSMgdGFibGUgaGVhZGVyCisJCXByaW50ICI8dGhlYWQ+PHRyPlxuIiAuCisJCSAgICAgICAiPHRoPjwvdGg+PHRoPjwvdGg+XG4iOyAjIGZpbGVuYW1lLCBwYXRjaE4gbGluaworCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAcGFyZW50czsgJGkrKykgeworCQkJbXkgJHBhciA9ICRwYXJlbnRzWyRpXTsKKwkJCXByaW50ICI8dGg+IiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kaGFzaCwgaGFzaF9wYXJlbnQ9PiRwYXIpLAorCQkJICAgICAgICAgICAgICAgLXRpdGxlID0+ICdjb21taXRkaWZmIHRvIHBhcmVudCBudW1iZXIgJyAuCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICgkaSsxKSAuICc6ICcgLiBzdWJzdHIoJHBhciwwLDcpfSwKKwkJCSAgICAgICAgICAgICAgJGkrMSkgLgorCQkJICAgICAgIiZuYnNwOzwvdGg+XG4iOworCQl9CisJCXByaW50ICI8L3RyPjwvdGhlYWQ+XG48dGJvZHk+XG4iOworCX0KKworCW15ICRhbHRlcm5hdGUgPSAxOworCW15ICRwYXRjaG5vID0gMDsKKwlmb3JlYWNoIG15ICRsaW5lIChAeyRkaWZmdHJlZX0pIHsKKwkJbXkgJGRpZmYgPSBwYXJzZWRfZGlmZnRyZWVfbGluZSgkbGluZSk7CisKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKworCQlpZiAoZXhpc3RzICRkaWZmLT57J25wYXJlbnRzJ30pIHsgIyBjb21iaW5lZCBkaWZmCisKKwkJCWZpbGxfZnJvbV9maWxlX2luZm8oJGRpZmYsIEBwYXJlbnRzKQorCQkJCXVubGVzcyBleGlzdHMgJGRpZmYtPnsnZnJvbV9maWxlJ307CisKKwkJCWlmICghaXNfZGVsZXRlZCgkZGlmZikpIHsKKwkJCQkjIGZpbGUgZXhpc3RzIGluIHRoZSByZXN1bHQgKGNoaWxkKSBjb21taXQKKwkJCQlwcmludCAiPHRkPiIgLgorCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gpLAorCQkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRkaWZmLT57J3RvX2ZpbGUnfSkpIC4KKwkJCQkgICAgICAiPC90ZD5cbiI7CisJCQl9IGVsc2UgeworCQkJCXByaW50ICI8dGQ+IiAuCisJCQkJICAgICAgZXNjX3BhdGgoJGRpZmYtPnsndG9fZmlsZSd9KSAuCisJCQkJICAgICAgIjwvdGQ+XG4iOworCQkJfQorCisJCQlpZiAoJGFjdGlvbiBlcSAnY29tbWl0ZGlmZicpIHsKKwkJCQkjIGxpbmsgdG8gcGF0Y2gKKwkJCQkkcGF0Y2hubysrOworCQkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIiAuCisJCQkJICAgICAgIjwvdGQ+XG4iOworCQkJfQorCisJCQlteSAkaGFzX2hpc3RvcnkgPSAwOworCQkJbXkgJG5vdF9kZWxldGVkID0gMDsKKwkJCWZvciAobXkgJGkgPSAwOyAkaSA8ICRkaWZmLT57J25wYXJlbnRzJ307ICRpKyspIHsKKwkJCQlteSAkaGFzaF9wYXJlbnQgPSAkcGFyZW50c1skaV07CisJCQkJbXkgJGZyb21faGFzaCA9ICRkaWZmLT57J2Zyb21faWQnfVskaV07CisJCQkJbXkgJGZyb21fcGF0aCA9ICRkaWZmLT57J2Zyb21fZmlsZSd9WyRpXTsKKwkJCQlteSAkc3RhdHVzID0gJGRpZmYtPnsnc3RhdHVzJ31bJGldOworCisJCQkJJGhhc19oaXN0b3J5IHx8PSAoJHN0YXR1cyBuZSAnQScpOworCQkJCSRub3RfZGVsZXRlZCB8fD0gKCRzdGF0dXMgbmUgJ0QnKTsKKworCQkJCWlmICgkc3RhdHVzIGVxICdBJykgeworCQkJCQlwcmludCAiPHRkICBjbGFzcz1cImxpbmtcIiBhbGlnbj1cInJpZ2h0XCI+IHwgPC90ZD5cbiI7CisJCQkJfSBlbHNpZiAoJHN0YXR1cyBlcSAnRCcpIHsKKwkJCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRmcm9tX2hhc2gsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZnJvbV9wYXRoKX0sCisJCQkJCSAgICAgICAgICAgICAgImJsb2IiIC4gKCRpKzEpKSAuCisJCQkJCSAgICAgICIgfCA8L3RkPlxuIjsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoJGRpZmYtPnsndG9faWQnfSBlcSAkZnJvbV9oYXNoKSB7CisJCQkJCQlwcmludCAiPHRkIGNsYXNzPVwibGluayBub2NoYW5nZVwiPiI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCQkJCX0KKwkJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iZGlmZiIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3BhcmVudD0+JGZyb21faGFzaCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfcGFyZW50X2Jhc2U9PiRoYXNoX3BhcmVudCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhcmVudD0+JGZyb21fcGF0aCl9LAorCQkJCQkgICAgICAgICAgICAgICJkaWZmIiAuICgkaSsxKSkgLgorCQkJCQkgICAgICAiIHwgPC90ZD5cbiI7CisJCQkJfQorCQkJfQorCisJCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCQlpZiAoJG5vdF9kZWxldGVkKSB7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gpfSwKKwkJCQkgICAgICAgICAgICAgICJibG9iIik7CisJCQkJcHJpbnQgIiB8ICIgaWYgKCRoYXNfaGlzdG9yeSk7CisJCQl9CisJCQlpZiAoJGhhc19oaXN0b3J5KSB7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsndG9fZmlsZSd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCl9LAorCQkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJCX0KKwkJCXByaW50ICI8L3RkPlxuIjsKKworCQkJcHJpbnQgIjwvdHI+XG4iOworCQkJbmV4dDsgIyBpbnN0ZWFkIG9mICdlbHNlJyBjbGF1c2UsIHRvIGF2b2lkIGV4dHJhIGluZGVudAorCQl9CisJCSMgZWxzZSBvcmRpbmFyeSBkaWZmCisKKwkJbXkgKCR0b19tb2RlX29jdCwgJHRvX21vZGVfc3RyLCAkdG9fZmlsZV90eXBlKTsKKwkJbXkgKCRmcm9tX21vZGVfb2N0LCAkZnJvbV9tb2RlX3N0ciwgJGZyb21fZmlsZV90eXBlKTsKKwkJaWYgKCRkaWZmLT57J3RvX21vZGUnfSBuZSAoJzAnIHggNikpIHsKKwkJCSR0b19tb2RlX29jdCA9IG9jdCAkZGlmZi0+eyd0b19tb2RlJ307CisJCQlpZiAoU19JU1JFRygkdG9fbW9kZV9vY3QpKSB7ICMgb25seSBmb3IgcmVndWxhciBmaWxlCisJCQkJJHRvX21vZGVfc3RyID0gc3ByaW50ZigiJTA0byIsICR0b19tb2RlX29jdCAmIDA3NzcpOyAjIHBlcm1pc3Npb24gYml0cworCQkJfQorCQkJJHRvX2ZpbGVfdHlwZSA9IGZpbGVfdHlwZSgkZGlmZi0+eyd0b19tb2RlJ30pOworCQl9CisJCWlmICgkZGlmZi0+eydmcm9tX21vZGUnfSBuZSAoJzAnIHggNikpIHsKKwkJCSRmcm9tX21vZGVfb2N0ID0gb2N0ICRkaWZmLT57J2Zyb21fbW9kZSd9OworCQkJaWYgKFNfSVNSRUcoJGZyb21fbW9kZV9vY3QpKSB7ICMgb25seSBmb3IgcmVndWxhciBmaWxlCisJCQkJJGZyb21fbW9kZV9zdHIgPSBzcHJpbnRmKCIlMDRvIiwgJGZyb21fbW9kZV9vY3QgJiAwNzc3KTsgIyBwZXJtaXNzaW9uIGJpdHMKKwkJCX0KKwkJCSRmcm9tX2ZpbGVfdHlwZSA9IGZpbGVfdHlwZSgkZGlmZi0+eydmcm9tX21vZGUnfSk7CisJCX0KKworCQlpZiAoJGRpZmYtPnsnc3RhdHVzJ30gZXEgIkEiKSB7ICMgY3JlYXRlZAorCQkJbXkgJG1vZGVfY2huZyA9ICI8c3BhbiBjbGFzcz1cImZpbGVfc3RhdHVzIG5ld1wiPltuZXcgJHRvX2ZpbGVfdHlwZSI7CisJCQkkbW9kZV9jaG5nICAgLj0gIiB3aXRoIG1vZGU6ICR0b19tb2RlX3N0ciIgaWYgJHRvX21vZGVfc3RyOworCQkJJG1vZGVfY2huZyAgIC49ICJdPC9zcGFuPiI7CisJCQlwcmludCAiPHRkPiI7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLCBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZGlmZi0+eydmaWxlJ30pKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQ+JG1vZGVfY2huZzwvdGQ+XG4iOworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQkJaWYgKCRhY3Rpb24gZXEgJ2NvbW1pdGRpZmYnKSB7CisJCQkJIyBsaW5rIHRvIHBhdGNoCisJCQkJJHBhdGNobm8rKzsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1hbmNob3I9PiJwYXRjaCRwYXRjaG5vIil9LAorCQkJCSAgICAgICAgICAgICAgInBhdGNoIikgLgorCQkJCSAgICAgICIgfCAiOworCQkJfQorCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImJsb2IiKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKworCQl9IGVsc2lmICgkZGlmZi0+eydzdGF0dXMnfSBlcSAiRCIpIHsgIyBkZWxldGVkCisJCQlteSAkbW9kZV9jaG5nID0gIjxzcGFuIGNsYXNzPVwiZmlsZV9zdGF0dXMgZGVsZXRlZFwiPltkZWxldGVkICRmcm9tX2ZpbGVfdHlwZV08L3NwYW4+IjsKKwkJCXByaW50ICI8dGQ+IjsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J2Zyb21faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kcGFyZW50LCBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGRpZmYtPnsnZmlsZSd9KSk7CisJCQlwcmludCAiPC90ZD5cbiI7CisJCQlwcmludCAiPHRkPiRtb2RlX2Nobmc8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJCWlmICgkYWN0aW9uIGVxICdjb21taXRkaWZmJykgeworCQkJCSMgbGluayB0byBwYXRjaAorCQkJCSRwYXRjaG5vKys7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J2Zyb21faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kcGFyZW50LCBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSl9LAorCQkJICAgICAgICAgICAgICAiYmxvYiIpIC4gIiB8ICI7CisJCQlpZiAoJGhhdmVfYmxhbWUpIHsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lIiwgaGFzaF9iYXNlPT4kcGFyZW50LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJibGFtZSIpIC4gIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRwYXJlbnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCQlwcmludCAiPC90ZD5cbiI7CisKKwkJfSBlbHNpZiAoJGRpZmYtPnsnc3RhdHVzJ30gZXEgIk0iIHx8ICRkaWZmLT57J3N0YXR1cyd9IGVxICJUIikgeyAjIG1vZGlmaWVkLCBvciB0eXBlIGNoYW5nZWQKKwkJCW15ICRtb2RlX2NobmdlID0gIiI7CisJCQlpZiAoJGRpZmYtPnsnZnJvbV9tb2RlJ30gIT0gJGRpZmYtPnsndG9fbW9kZSd9KSB7CisJCQkJJG1vZGVfY2huZ2UgPSAiPHNwYW4gY2xhc3M9XCJmaWxlX3N0YXR1cyBtb2RlX2NobmdlXCI+W2NoYW5nZWQiOworCQkJCWlmICgkZnJvbV9maWxlX3R5cGUgbmUgJHRvX2ZpbGVfdHlwZSkgeworCQkJCQkkbW9kZV9jaG5nZSAuPSAiIGZyb20gJGZyb21fZmlsZV90eXBlIHRvICR0b19maWxlX3R5cGUiOworCQkJCX0KKwkJCQlpZiAoKCRmcm9tX21vZGVfb2N0ICYgMDc3NykgIT0gKCR0b19tb2RlX29jdCAmIDA3NzcpKSB7CisJCQkJCWlmICgkZnJvbV9tb2RlX3N0ciAmJiAkdG9fbW9kZV9zdHIpIHsKKwkJCQkJCSRtb2RlX2NobmdlIC49ICIgbW9kZTogJGZyb21fbW9kZV9zdHItPiR0b19tb2RlX3N0ciI7CisJCQkJCX0gZWxzaWYgKCR0b19tb2RlX3N0cikgeworCQkJCQkJJG1vZGVfY2huZ2UgLj0gIiBtb2RlOiAkdG9fbW9kZV9zdHIiOworCQkJCQl9CisJCQkJfQorCQkJCSRtb2RlX2NobmdlIC49ICJdPC9zcGFuPlxuIjsKKwkJCX0KKwkJCXByaW50ICI8dGQ+IjsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KSwKKwkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRkaWZmLT57J2ZpbGUnfSkpOworCQkJcHJpbnQgIjwvdGQ+XG4iOworCQkJcHJpbnQgIjx0ZD4kbW9kZV9jaG5nZTwvdGQ+XG4iOworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQkJaWYgKCRhY3Rpb24gZXEgJ2NvbW1pdGRpZmYnKSB7CisJCQkJIyBsaW5rIHRvIHBhdGNoCisJCQkJJHBhdGNobm8rKzsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1hbmNob3I9PiJwYXRjaCRwYXRjaG5vIil9LAorCQkJCSAgICAgICAgICAgICAgInBhdGNoIikgLgorCQkJCSAgICAgICIgfCAiOworCQkJfSBlbHNpZiAoJGRpZmYtPnsndG9faWQnfSBuZSAkZGlmZi0+eydmcm9tX2lkJ30pIHsKKwkJCQkjICJjb21taXQiIHZpZXcgYW5kIG1vZGlmaWVkIGZpbGUgKG5vdCBvbmx1IG1vZGUgY2hhbmdlZCkKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JkaWZmIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sIGhhc2hfcGFyZW50PT4kZGlmZi0+eydmcm9tX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLCBoYXNoX3BhcmVudF9iYXNlPT4kcGFyZW50LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJkaWZmIikgLgorCQkJCSAgICAgICIgfCAiOworCQkJfQorCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgICJibG9iIikgLiAiIHwgIjsKKwkJCWlmICgkaGF2ZV9ibGFtZSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJibGFtZSIpIC4gIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSl9LAorCQkJICAgICAgICAgICAgICAiaGlzdG9yeSIpOworCQkJcHJpbnQgIjwvdGQ+XG4iOworCisJCX0gZWxzaWYgKCRkaWZmLT57J3N0YXR1cyd9IGVxICJSIiB8fCAkZGlmZi0+eydzdGF0dXMnfSBlcSAiQyIpIHsgIyByZW5hbWVkIG9yIGNvcGllZAorCQkJbXkgJXN0YXR1c19uYW1lID0gKCdSJyA9PiAnbW92ZWQnLCAnQycgPT4gJ2NvcGllZCcpOworCQkJbXkgJG5zdGF0dXMgPSAkc3RhdHVzX25hbWV7JGRpZmYtPnsnc3RhdHVzJ319OworCQkJbXkgJG1vZGVfY2huZyA9ICIiOworCQkJaWYgKCRkaWZmLT57J2Zyb21fbW9kZSd9ICE9ICRkaWZmLT57J3RvX21vZGUnfSkgeworCQkJCSMgbW9kZSBhbHNvIGZvciBkaXJlY3Rvcmllcywgc28gd2UgY2Fubm90IHVzZSAkdG9fbW9kZV9zdHIKKwkJCQkkbW9kZV9jaG5nID0gc3ByaW50ZigiLCBtb2RlOiAlMDRvIiwgJHRvX21vZGVfb2N0ICYgMDc3Nyk7CisJCQl9CisJCQlwcmludCAiPHRkPiIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGRpZmYtPnsndG9fZmlsZSd9KSkgLiAiPC90ZD5cbiIgLgorCQkJICAgICAgIjx0ZD48c3BhbiBjbGFzcz1cImZpbGVfc3RhdHVzICRuc3RhdHVzXCI+WyRuc3RhdHVzIGZyb20gIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoX2Jhc2U9PiRwYXJlbnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J2Zyb21faWQnfSwgZmlsZV9uYW1lPT4kZGlmZi0+eydmcm9tX2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZGlmZi0+eydmcm9tX2ZpbGUnfSkpIC4KKwkJCSAgICAgICIgd2l0aCAiIC4gKGludCAkZGlmZi0+eydzaW1pbGFyaXR5J30pIC4gIiUgc2ltaWxhcml0eSRtb2RlX2NobmddPC9zcGFuPjwvdGQ+XG4iIC4KKwkJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJCWlmICgkYWN0aW9uIGVxICdjb21taXRkaWZmJykgeworCQkJCSMgbGluayB0byBwYXRjaAorCQkJCSRwYXRjaG5vKys7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0gZWxzaWYgKCRkaWZmLT57J3RvX2lkJ30gbmUgJGRpZmYtPnsnZnJvbV9pZCd9KSB7CisJCQkJIyAiY29tbWl0IiB2aWV3IGFuZCBtb2RpZmllZCBmaWxlIChub3Qgb25seSBwdXJlIHJlbmFtZSBvciBjb3B5KQorCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYmRpZmYiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwgaGFzaF9wYXJlbnQ9PiRkaWZmLT57J2Zyb21faWQnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsIGhhc2hfcGFyZW50X2Jhc2U9PiRwYXJlbnQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwgZmlsZV9wYXJlbnQ9PiRkaWZmLT57J2Zyb21fZmlsZSd9KX0sCisJCQkJICAgICAgICAgICAgICAiZGlmZiIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JHBhcmVudCwgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImJsb2IiKSAuICIgfCAiOworCQkJaWYgKCRoYXZlX2JsYW1lKSB7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZSIsIGhhc2hfYmFzZT0+JGhhc2gsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSl9LAorCQkJCSAgICAgICAgICAgICAgImJsYW1lIikgLiAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIGhhc2hfYmFzZT0+JGhhc2gsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKworCQl9ICMgd2Ugc2hvdWxkIG5vdCBlbmNvdW50ZXIgVW5tZXJnZWQgKFUpIG9yIFVua25vd24gKFgpIHN0YXR1cworCQlwcmludCAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3Rib2R5PiIgaWYgJGhhc19oZWFkZXI7CisJcHJpbnQgIjwvdGFibGU+XG4iOworfQorCisjIFByaW50IGNvbnRleHQgbGluZXMgYW5kIHRoZW4gcmVtL2FkZCBsaW5lcyBpbiBhIHNpZGUtYnktc2lkZSBtYW5uZXIuCitzdWIgcHJpbnRfc2lkZWJ5c2lkZV9kaWZmX2xpbmVzIHsKKwlteSAoJGN0eCwgJHJlbSwgJGFkZCkgPSBAXzsKKworCSMgcHJpbnQgY29udGV4dCBibG9jayBiZWZvcmUgYWRkL3JlbSBibG9jaworCWlmIChAJGN0eCkgeworCQlwcmludCBqb2luICcnLAorCQkJJzxkaXYgY2xhc3M9ImNodW5rX2Jsb2NrIGN0eCI+JywKKwkJCQknPGRpdiBjbGFzcz0ib2xkIj4nLAorCQkJCUAkY3R4LAorCQkJCSc8L2Rpdj4nLAorCQkJCSc8ZGl2IGNsYXNzPSJuZXciPicsCisJCQkJQCRjdHgsCisJCQkJJzwvZGl2PicsCisJCQknPC9kaXY+JzsKKwl9CisKKwlpZiAoIUAkYWRkKSB7CisJCSMgcHVyZSByZW1vdmFsCisJCXByaW50IGpvaW4gJycsCisJCQknPGRpdiBjbGFzcz0iY2h1bmtfYmxvY2sgcmVtIj4nLAorCQkJCSc8ZGl2IGNsYXNzPSJvbGQiPicsCisJCQkJQCRyZW0sCisJCQkJJzwvZGl2PicsCisJCQknPC9kaXY+JzsKKwl9IGVsc2lmICghQCRyZW0pIHsKKwkJIyBwdXJlIGFkZGl0aW9uCisJCXByaW50IGpvaW4gJycsCisJCQknPGRpdiBjbGFzcz0iY2h1bmtfYmxvY2sgYWRkIj4nLAorCQkJCSc8ZGl2IGNsYXNzPSJuZXciPicsCisJCQkJQCRhZGQsCisJCQkJJzwvZGl2PicsCisJCQknPC9kaXY+JzsKKwl9IGVsc2UgeworCQlwcmludCBqb2luICcnLAorCQkJJzxkaXYgY2xhc3M9ImNodW5rX2Jsb2NrIGNoZyI+JywKKwkJCQknPGRpdiBjbGFzcz0ib2xkIj4nLAorCQkJCUAkcmVtLAorCQkJCSc8L2Rpdj4nLAorCQkJCSc8ZGl2IGNsYXNzPSJuZXciPicsCisJCQkJQCRhZGQsCisJCQkJJzwvZGl2PicsCisJCQknPC9kaXY+JzsKKwl9Cit9CisKKyMgUHJpbnQgY29udGV4dCBsaW5lcyBhbmQgdGhlbiByZW0vYWRkIGxpbmVzIGluIGlubGluZSBtYW5uZXIuCitzdWIgcHJpbnRfaW5saW5lX2RpZmZfbGluZXMgeworCW15ICgkY3R4LCAkcmVtLCAkYWRkKSA9IEBfOworCisJcHJpbnQgQCRjdHgsIEAkcmVtLCBAJGFkZDsKK30KKworIyBGb3JtYXQgcmVtb3ZlZCBhbmQgYWRkZWQgbGluZSwgbWFyayBjaGFuZ2VkIHBhcnQgYW5kIEhUTUwtZm9ybWF0IHRoZW0uCisjIEltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGNvbnRyaWIvZGlmZi1oaWdobGlnaHQKK3N1YiBmb3JtYXRfcmVtX2FkZF9saW5lc19wYWlyIHsKKwlteSAoJHJlbSwgJGFkZCwgJG51bV9wYXJlbnRzKSA9IEBfOworCisJIyBXZSBuZWVkIHRvIHVudGFiaWZ5IGxpbmVzIGJlZm9yZSBzcGxpdCgpJ2luZyB0aGVtOworCSMgb3RoZXJ3aXNlIG9mZnNldHMgd291bGQgYmUgaW52YWxpZC4KKwljaG9tcCAkcmVtOworCWNob21wICRhZGQ7CisJJHJlbSA9IHVudGFiaWZ5KCRyZW0pOworCSRhZGQgPSB1bnRhYmlmeSgkYWRkKTsKKworCW15IEByZW0gPSBzcGxpdCgvLywgJHJlbSk7CisJbXkgQGFkZCA9IHNwbGl0KC8vLCAkYWRkKTsKKwlteSAoJGVzY19yZW0sICRlc2NfYWRkKTsKKwkjIElnbm9yZSBsZWFkaW5nICsvLSBjaGFyYWN0ZXJzIGZvciBlYWNoIHBhcmVudC4KKwlteSAoJHByZWZpeF9sZW4sICRzdWZmaXhfbGVuKSA9ICgkbnVtX3BhcmVudHMsIDApOworCW15ICgkcHJlZml4X2hhc19ub25zcGFjZSwgJHN1ZmZpeF9oYXNfbm9uc3BhY2UpOworCisJbXkgJHNob3J0ZXIgPSAoQHJlbSA8IEBhZGQpID8gQHJlbSA6IEBhZGQ7CisJd2hpbGUgKCRwcmVmaXhfbGVuIDwgJHNob3J0ZXIpIHsKKwkJbGFzdCBpZiAoJHJlbVskcHJlZml4X2xlbl0gbmUgJGFkZFskcHJlZml4X2xlbl0pOworCisJCSRwcmVmaXhfaGFzX25vbnNwYWNlID0gMSBpZiAoJHJlbVskcHJlZml4X2xlbl0gIX4gL1xzLyk7CisJCSRwcmVmaXhfbGVuKys7CisJfQorCisJd2hpbGUgKCRwcmVmaXhfbGVuICsgJHN1ZmZpeF9sZW4gPCAkc2hvcnRlcikgeworCQlsYXN0IGlmICgkcmVtWy0xIC0gJHN1ZmZpeF9sZW5dIG5lICRhZGRbLTEgLSAkc3VmZml4X2xlbl0pOworCisJCSRzdWZmaXhfaGFzX25vbnNwYWNlID0gMSBpZiAoJHJlbVstMSAtICRzdWZmaXhfbGVuXSAhfiAvXHMvKTsKKwkJJHN1ZmZpeF9sZW4rKzsKKwl9CisKKwkjIE1hcmsgbGluZXMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gZWFjaCBvdGhlciwgYnV0IGhhdmUgc29tZSBjb21tb24KKwkjIHBhcnQgdGhhdCBpc24ndCB3aGl0ZXNwYWNlLiAgSWYgbGluZXMgYXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LCBkb24ndAorCSMgbWFyayB0aGVtIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlIG91dHB1dCB1bnJlYWRhYmxlLCBlc3BlY2lhbGx5IGlmCisJIyBkaWZmIGNvbnNpc3RzIG9mIG11bHRpcGxlIGxpbmVzLgorCWlmICgkcHJlZml4X2hhc19ub25zcGFjZSB8fCAkc3VmZml4X2hhc19ub25zcGFjZSkgeworCQkkZXNjX3JlbSA9IGVzY19odG1sX2hsX3JlZ2lvbnMoJHJlbSwgJ21hcmtlZCcsCisJCSAgICAgICAgWyRwcmVmaXhfbGVuLCBAcmVtIC0gJHN1ZmZpeF9sZW5dLCAtbmJzcD0+MSk7CisJCSRlc2NfYWRkID0gZXNjX2h0bWxfaGxfcmVnaW9ucygkYWRkLCAnbWFya2VkJywKKwkJICAgICAgICBbJHByZWZpeF9sZW4sIEBhZGQgLSAkc3VmZml4X2xlbl0sIC1uYnNwPT4xKTsKKwl9IGVsc2UgeworCQkkZXNjX3JlbSA9IGVzY19odG1sKCRyZW0sIC1uYnNwPT4xKTsKKwkJJGVzY19hZGQgPSBlc2NfaHRtbCgkYWRkLCAtbmJzcD0+MSk7CisJfQorCisJcmV0dXJuIGZvcm1hdF9kaWZmX2xpbmUoXCRlc2NfcmVtLCAncmVtJyksCisJICAgICAgIGZvcm1hdF9kaWZmX2xpbmUoXCRlc2NfYWRkLCAnYWRkJyk7Cit9CisKKyMgSFRNTC1mb3JtYXQgZGlmZiBjb250ZXh0LCByZW1vdmVkIGFuZCBhZGRlZCBsaW5lcy4KK3N1YiBmb3JtYXRfY3R4X3JlbV9hZGRfbGluZXMgeworCW15ICgkY3R4LCAkcmVtLCAkYWRkLCAkbnVtX3BhcmVudHMpID0gQF87CisJbXkgKEBuZXdfY3R4LCBAbmV3X3JlbSwgQG5ld19hZGQpOworCW15ICRjYW5faGlnaGxpZ2h0ID0gMDsKKwlteSAkaXNfY29tYmluZWQgPSAoJG51bV9wYXJlbnRzID4gMSk7CisKKwkjIEhpZ2hsaWdodCBpZiBldmVyeSByZW1vdmVkIGxpbmUgaGFzIGEgY29ycmVzcG9uZGluZyBhZGRlZCBsaW5lLgorCWlmIChAJGFkZCA+IDAgJiYgQCRhZGQgPT0gQCRyZW0pIHsKKwkJJGNhbl9oaWdobGlnaHQgPSAxOworCisJCSMgSGlnaGxpZ2h0IGxpbmVzIGluIGNvbWJpbmVkIGRpZmYgb25seSBpZiB0aGUgY2h1bmsgY29udGFpbnMKKwkJIyBkaWZmIGJldHdlZW4gdGhlIHNhbWUgdmVyc2lvbiwgZS5nLgorCQkjCisJCSMgICAgLSBhCisJCSMgICAtICBiCisJCSMgICAgKyBjCisJCSMgICArICBkCisJCSMKKwkJIyBPdGhlcndpc2UgdGhlIGhpZ2hsaWdodGluZyB3b3VsZCBiZSBjb25mdXNpbmcuCisJCWlmICgkaXNfY29tYmluZWQpIHsKKwkJCWZvciAobXkgJGkgPSAwOyAkaSA8IEAkYWRkOyAkaSsrKSB7CisJCQkJbXkgJHByZWZpeF9yZW0gPSBzdWJzdHIoJHJlbS0+WyRpXSwgMCwgJG51bV9wYXJlbnRzKTsKKwkJCQlteSAkcHJlZml4X2FkZCA9IHN1YnN0cigkYWRkLT5bJGldLCAwLCAkbnVtX3BhcmVudHMpOworCisJCQkJJHByZWZpeF9yZW0gPX4gcy8tLysvZzsKKworCQkJCWlmICgkcHJlZml4X3JlbSBuZSAkcHJlZml4X2FkZCkgeworCQkJCQkkY2FuX2hpZ2hsaWdodCA9IDA7CisJCQkJCWxhc3Q7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKCRjYW5faGlnaGxpZ2h0KSB7CisJCWZvciAobXkgJGkgPSAwOyAkaSA8IEAkYWRkOyAkaSsrKSB7CisJCQlteSAoJGxpbmVfcmVtLCAkbGluZV9hZGQpID0gZm9ybWF0X3JlbV9hZGRfbGluZXNfcGFpcigKKwkJCSAgICAgICAgJHJlbS0+WyRpXSwgJGFkZC0+WyRpXSwgJG51bV9wYXJlbnRzKTsKKwkJCXB1c2ggQG5ld19yZW0sICRsaW5lX3JlbTsKKwkJCXB1c2ggQG5ld19hZGQsICRsaW5lX2FkZDsKKwkJfQorCX0gZWxzZSB7CisJCUBuZXdfcmVtID0gbWFwIHsgZm9ybWF0X2RpZmZfbGluZSgkXywgJ3JlbScpIH0gQCRyZW07CisJCUBuZXdfYWRkID0gbWFwIHsgZm9ybWF0X2RpZmZfbGluZSgkXywgJ2FkZCcpIH0gQCRhZGQ7CisJfQorCisJQG5ld19jdHggPSBtYXAgeyBmb3JtYXRfZGlmZl9saW5lKCRfLCAnY3R4JykgfSBAJGN0eDsKKworCXJldHVybiAoXEBuZXdfY3R4LCBcQG5ld19yZW0sIFxAbmV3X2FkZCk7Cit9CisKKyMgUHJpbnQgY29udGV4dCBsaW5lcyBhbmQgdGhlbiByZW0vYWRkIGxpbmVzLgorc3ViIHByaW50X2RpZmZfbGluZXMgeworCW15ICgkY3R4LCAkcmVtLCAkYWRkLCAkZGlmZl9zdHlsZSwgJG51bV9wYXJlbnRzKSA9IEBfOworCW15ICRpc19jb21iaW5lZCA9ICRudW1fcGFyZW50cyA+IDE7CisKKwkoJGN0eCwgJHJlbSwgJGFkZCkgPSBmb3JtYXRfY3R4X3JlbV9hZGRfbGluZXMoJGN0eCwgJHJlbSwgJGFkZCwKKwkgICAgICAgICRudW1fcGFyZW50cyk7CisKKwlpZiAoJGRpZmZfc3R5bGUgZXEgJ3NpZGVieXNpZGUnICYmICEkaXNfY29tYmluZWQpIHsKKwkJcHJpbnRfc2lkZWJ5c2lkZV9kaWZmX2xpbmVzKCRjdHgsICRyZW0sICRhZGQpOworCX0gZWxzZSB7CisJCSMgZGVmYXVsdCAnaW5saW5lJyBzdHlsZSBhbmQgdW5rbm93biBzdHlsZXMKKwkJcHJpbnRfaW5saW5lX2RpZmZfbGluZXMoJGN0eCwgJHJlbSwgJGFkZCk7CisJfQorfQorCitzdWIgcHJpbnRfZGlmZl9jaHVuayB7CisJbXkgKCRkaWZmX3N0eWxlLCAkbnVtX3BhcmVudHMsICRmcm9tLCAkdG8sIEBjaHVuaykgPSBAXzsKKwlteSAoQGN0eCwgQHJlbSwgQGFkZCk7CisKKwkjIFRoZSBjbGFzcyBvZiB0aGUgcHJldmlvdXMgbGluZS4KKwlteSAkcHJldl9jbGFzcyA9ICcnOworCisJcmV0dXJuIHVubGVzcyBAY2h1bms7CisKKwkjIGluY29tcGxldGUgbGFzdCBsaW5lIG1pZ2h0IGJlIGFtb25nIHJlbW92ZWQgb3IgYWRkZWQgbGluZXMsCisJIyBvciBib3RoLCBvciBhbW9uZyBjb250ZXh0IGxpbmVzOiBmaW5kIHdoaWNoCisJZm9yIChteSAkaSA9IDE7ICRpIDwgQGNodW5rOyAkaSsrKSB7CisJCWlmICgkY2h1bmtbJGldWzBdIGVxICdpbmNvbXBsZXRlJykgeworCQkJJGNodW5rWyRpXVswXSA9ICRjaHVua1skaS0xXVswXTsKKwkJfQorCX0KKworCSMgZ3VhcmRpYW4KKwlwdXNoIEBjaHVuaywgWyIiLCAiIl07CisKKwlmb3JlYWNoIG15ICRsaW5lX2luZm8gKEBjaHVuaykgeworCQlteSAoJGNsYXNzLCAkbGluZSkgPSBAJGxpbmVfaW5mbzsKKworCQkjIHByaW50IGNodW5rIGhlYWRlcnMKKwkJaWYgKCRjbGFzcyAmJiAkY2xhc3MgZXEgJ2NodW5rX2hlYWRlcicpIHsKKwkJCXByaW50IGZvcm1hdF9kaWZmX2xpbmUoJGxpbmUsICRjbGFzcywgJGZyb20sICR0byk7CisJCQluZXh0OworCQl9CisKKwkJIyMgcHJpbnQgZnJvbSBhY2N1bXVsYXRvciB3aGVuIGhhdmUgc29tZSBhZGQvcmVtIGxpbmVzIG9yIGVuZAorCQkjIG9mIGNodW5rIChmbHVzaCBjb250ZXh0IGxpbmVzKSwgb3Igd2hlbiBoYXZlIGFkZCBhbmQgcmVtCisJCSMgbGluZXMgYW5kIG5ldyBibG9jayBpcyByZWFjaGVkIChvdGhlcndpc2UgYWRkL3JlbSBsaW5lcyBjb3VsZAorCQkjIGJlIHJlb3JkZXJlZCkKKwkJaWYgKCEkY2xhc3MgfHwgKChAcmVtIHx8IEBhZGQpICYmICRjbGFzcyBlcSAnY3R4JykgfHwKKwkJICAgIChAcmVtICYmIEBhZGQgJiYgJGNsYXNzIG5lICRwcmV2X2NsYXNzKSkgeworCQkJcHJpbnRfZGlmZl9saW5lcyhcQGN0eCwgXEByZW0sIFxAYWRkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgJGRpZmZfc3R5bGUsICRudW1fcGFyZW50cyk7CisJCQlAY3R4ID0gQHJlbSA9IEBhZGQgPSAoKTsKKwkJfQorCisJCSMjIGFkZGluZyBsaW5lcyB0byBhY2N1bXVsYXRvcgorCQkjIGd1YXJkaWFuIHZhbHVlCisJCWxhc3QgdW5sZXNzICRsaW5lOworCQkjIHJlbSwgYWRkIG9yIGNoYW5nZQorCQlpZiAoJGNsYXNzIGVxICdyZW0nKSB7CisJCQlwdXNoIEByZW0sICRsaW5lOworCQl9IGVsc2lmICgkY2xhc3MgZXEgJ2FkZCcpIHsKKwkJCXB1c2ggQGFkZCwgJGxpbmU7CisJCX0KKwkJIyBjb250ZXh0IGxpbmUKKwkJaWYgKCRjbGFzcyBlcSAnY3R4JykgeworCQkJcHVzaCBAY3R4LCAkbGluZTsKKwkJfQorCisJCSRwcmV2X2NsYXNzID0gJGNsYXNzOworCX0KK30KKworc3ViIGdpdF9wYXRjaHNldF9ib2R5IHsKKwlteSAoJGZkLCAkZGlmZl9zdHlsZSwgJGRpZmZ0cmVlLCAkaGFzaCwgQGhhc2hfcGFyZW50cykgPSBAXzsKKwlteSAoJGhhc2hfcGFyZW50KSA9ICRoYXNoX3BhcmVudHNbMF07CisKKwlteSAkaXNfY29tYmluZWQgPSAoQGhhc2hfcGFyZW50cyA+IDEpOworCW15ICRwYXRjaF9pZHggPSAwOworCW15ICRwYXRjaF9udW1iZXIgPSAwOworCW15ICRwYXRjaF9saW5lOworCW15ICRkaWZmaW5mbzsKKwlteSAkdG9fbmFtZTsKKwlteSAoJWZyb20sICV0byk7CisJbXkgQGNodW5rOyAjIGZvciBzaWRlLWJ5LXNpZGUgZGlmZgorCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYXRjaHNldFwiPlxuIjsKKworCSMgc2tpcCB0byBmaXJzdCBwYXRjaAorCXdoaWxlICgkcGF0Y2hfbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRwYXRjaF9saW5lOworCisJCWxhc3QgaWYgKCRwYXRjaF9saW5lID1+IG0vXmRpZmYgLyk7CisJfQorCisgUEFUQ0g6CisJd2hpbGUgKCRwYXRjaF9saW5lKSB7CisKKwkJIyBwYXJzZSAiZ2l0IGRpZmYiIGhlYWRlciBsaW5lCisJCWlmICgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC0tZ2l0IChcIig/OlteXFxcIl0qKD86XFwuW15cXFwiXSopKilcInxbXiAiXSopICguKikkLykgeworCQkJIyAkMSBpcyBmcm9tX25hbWUsIHdoaWNoIHdlIGRvIG5vdCB1c2UKKwkJCSR0b19uYW1lID0gdW5xdW90ZSgkMik7CisJCQkkdG9fbmFtZSA9fiBzIV5iLyEhOworCQl9IGVsc2lmICgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC0tKGNjfGNvbWJpbmVkKSAoIj8uKiI/KSQvKSB7CisJCQkjICQxIGlzICdjYycgb3IgJ2NvbWJpbmVkJywgd2hpY2ggd2UgZG8gbm90IHVzZQorCQkJJHRvX25hbWUgPSB1bnF1b3RlKCQyKTsKKwkJfSBlbHNlIHsKKwkJCSR0b19uYW1lID0gdW5kZWY7CisJCX0KKworCQkjIGNoZWNrIGlmIGN1cnJlbnQgcGF0Y2ggYmVsb25nIHRvIGN1cnJlbnQgcmF3IGxpbmUKKwkJIyBhbmQgcGFyc2UgcmF3IGdpdC1kaWZmIGxpbmUgaWYgbmVlZGVkCisJCWlmIChpc19wYXRjaF9zcGxpdCgkZGlmZmluZm8sIHsgJ3RvX2ZpbGUnID0+ICR0b19uYW1lIH0pKSB7CisJCQkjIHRoaXMgaXMgY29udGludWF0aW9uIG9mIGEgc3BsaXQgcGF0Y2gKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwicGF0Y2ggY29udFwiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCSMgYWR2YW5jZSByYXcgZ2l0LWRpZmYgb3V0cHV0IGlmIG5lZWRlZAorCQkJJHBhdGNoX2lkeCsrIGlmIGRlZmluZWQgJGRpZmZpbmZvOworCisJCQkjIHJlYWQgYW5kIHByZXBhcmUgcGF0Y2ggaW5mb3JtYXRpb24KKwkJCSRkaWZmaW5mbyA9IHBhcnNlZF9kaWZmdHJlZV9saW5lKCRkaWZmdHJlZS0+WyRwYXRjaF9pZHhdKTsKKworCQkJIyBjb21wYWN0IGNvbWJpbmVkIGRpZmYgb3V0cHV0IGNhbiBoYXZlIHNvbWUgcGF0Y2hlcyBza2lwcGVkCisJCQkjIGZpbmQgd2hpY2ggcGF0Y2ggKHVzaW5nIHBhdGhuYW1lIG9mIHJlc3VsdCkgd2UgYXJlIGF0IG5vdzsKKwkJCWlmICgkaXNfY29tYmluZWQpIHsKKwkJCQl3aGlsZSAoJHRvX25hbWUgbmUgJGRpZmZpbmZvLT57J3RvX2ZpbGUnfSkgeworCQkJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhdGNoXCIgaWQ9XCJwYXRjaCIuICgkcGF0Y2hfaWR4KzEpIC4iXCI+XG4iIC4KKwkJCQkJICAgICAgZm9ybWF0X2RpZmZfY2Nfc2ltcGxpZmllZCgkZGlmZmluZm8sIEBoYXNoX3BhcmVudHMpIC4KKwkJCQkJICAgICAgIjwvZGl2PlxuIjsgICMgY2xhc3M9InBhdGNoIgorCisJCQkJCSRwYXRjaF9pZHgrKzsKKwkJCQkJJHBhdGNoX251bWJlcisrOworCisJCQkJCWxhc3QgaWYgJHBhdGNoX2lkeCA+ICQjJGRpZmZ0cmVlOworCQkJCQkkZGlmZmluZm8gPSBwYXJzZWRfZGlmZnRyZWVfbGluZSgkZGlmZnRyZWUtPlskcGF0Y2hfaWR4XSk7CisJCQkJfQorCQkJfQorCisJCQkjIG1vZGlmaWVzICVmcm9tLCAldG8gaGFzaGVzCisJCQlwYXJzZV9mcm9tX3RvX2RpZmZpbmZvKCRkaWZmaW5mbywgXCVmcm9tLCBcJXRvLCBAaGFzaF9wYXJlbnRzKTsKKworCQkJIyB0aGlzIGlzIGZpcnN0IHBhdGNoIGZvciByYXcgZGlmZnRyZWUgbGluZSB3aXRoICRwYXRjaF9pZHggaW5kZXgKKwkJCSMgd2UgaW5kZXggQCRkaWZmdHJlZSBhcnJheSBmcm9tIDAsIGJ1dCBudW1iZXIgcGF0Y2hlcyBmcm9tIDEKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwicGF0Y2hcIiBpZD1cInBhdGNoIi4gKCRwYXRjaF9pZHgrMSkgLiJcIj5cbiI7CisJCX0KKworCQkjIGdpdCBkaWZmIGhlYWRlcgorCQkjYXNzZXJ0KCRwYXRjaF9saW5lID1+IG0vXmRpZmYgLykgaWYgREVCVUc7CisJCSNhc3NlcnQoJHBhdGNoX2xpbmUgIX4gbSEkLyQhKSBpZiBERUJVRzsgIyBpcyBjaG9tcC1lZAorCQkkcGF0Y2hfbnVtYmVyKys7CisJCSMgcHJpbnQgImdpdCBkaWZmIiBoZWFkZXIKKwkJcHJpbnQgZm9ybWF0X2dpdF9kaWZmX2hlYWRlcl9saW5lKCRwYXRjaF9saW5lLCAkZGlmZmluZm8sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJWZyb20sIFwldG8pOworCisJCSMgcHJpbnQgZXh0ZW5kZWQgZGlmZiBoZWFkZXIKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIGV4dGVuZGVkX2hlYWRlclwiPlxuIjsKKwlFWFRFTkRFRF9IRUFERVI6CisJCXdoaWxlICgkcGF0Y2hfbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkcGF0Y2hfbGluZTsKKworCQkJbGFzdCBFWFRFTkRFRF9IRUFERVIgaWYgKCRwYXRjaF9saW5lID1+IG0vXi0tLSB8XmRpZmYgLyk7CisKKwkJCXByaW50IGZvcm1hdF9leHRlbmRlZF9kaWZmX2hlYWRlcl9saW5lKCRwYXRjaF9saW5lLCAkZGlmZmluZm8sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJWZyb20sIFwldG8pOworCQl9CisJCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9ImRpZmYgZXh0ZW5kZWRfaGVhZGVyIgorCisJCSMgZnJvbS1maWxlL3RvLWZpbGUgZGlmZiBoZWFkZXIKKwkJaWYgKCEgJHBhdGNoX2xpbmUpIHsKKwkJCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9InBhdGNoIgorCQkJbGFzdCBQQVRDSDsKKwkJfQorCQluZXh0IFBBVENIIGlmICgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC8pOworCQkjYXNzZXJ0KCRwYXRjaF9saW5lID1+IG0vXi0tLS8pIGlmIERFQlVHOworCisJCW15ICRsYXN0X3BhdGNoX2xpbmUgPSAkcGF0Y2hfbGluZTsKKwkJJHBhdGNoX2xpbmUgPSA8JGZkPjsKKwkJY2hvbXAgJHBhdGNoX2xpbmU7CisJCSNhc3NlcnQoJHBhdGNoX2xpbmUgPX4gbS9eXCtcK1wrLykgaWYgREVCVUc7CisKKwkJcHJpbnQgZm9ybWF0X2RpZmZfZnJvbV90b19oZWFkZXIoJGxhc3RfcGF0Y2hfbGluZSwgJHBhdGNoX2xpbmUsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaWZmaW5mbywgXCVmcm9tLCBcJXRvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaGFzaF9wYXJlbnRzKTsKKworCQkjIHRoZSBwYXRjaCBpdHNlbGYKKwlMSU5FOgorCQl3aGlsZSAoJHBhdGNoX2xpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJHBhdGNoX2xpbmU7CisKKwkJCW5leHQgUEFUQ0ggaWYgKCRwYXRjaF9saW5lID1+IG0vXmRpZmYgLyk7CisKKwkJCW15ICRjbGFzcyA9IGRpZmZfbGluZV9jbGFzcygkcGF0Y2hfbGluZSwgXCVmcm9tLCBcJXRvKTsKKworCQkJaWYgKCRjbGFzcyBlcSAnY2h1bmtfaGVhZGVyJykgeworCQkJCXByaW50X2RpZmZfY2h1bmsoJGRpZmZfc3R5bGUsIHNjYWxhciBAaGFzaF9wYXJlbnRzLCBcJWZyb20sIFwldG8sIEBjaHVuayk7CisJCQkJQGNodW5rID0gKCk7CisJCQl9CisKKwkJCXB1c2ggQGNodW5rLCBbICRjbGFzcywgJHBhdGNoX2xpbmUgXTsKKwkJfQorCisJfSBjb250aW51ZSB7CisJCWlmIChAY2h1bmspIHsKKwkJCXByaW50X2RpZmZfY2h1bmsoJGRpZmZfc3R5bGUsIHNjYWxhciBAaGFzaF9wYXJlbnRzLCBcJWZyb20sIFwldG8sIEBjaHVuayk7CisJCQlAY2h1bmsgPSAoKTsKKwkJfQorCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYXRjaCIKKwl9CisKKwkjIGZvciBjb21wYWN0IGNvbWJpbmVkICgtLWNjKSBmb3JtYXQsIHdpdGggY2h1bmsgYW5kIHBhdGNoIHNpbXBsaWZpY2F0aW9uCisJIyB0aGUgcGF0Y2hzZXQgbWlnaHQgYmUgZW1wdHksIGJ1dCB0aGVyZSBtaWdodCBiZSB1bnByb2Nlc3NlZCByYXcgbGluZXMKKwlmb3IgKCsrJHBhdGNoX2lkeCBpZiAkcGF0Y2hfbnVtYmVyID4gMDsKKwkgICAgICRwYXRjaF9pZHggPCBAJGRpZmZ0cmVlOworCSAgICAgKyskcGF0Y2hfaWR4KSB7CisJCSMgcmVhZCBhbmQgcHJlcGFyZSBwYXRjaCBpbmZvcm1hdGlvbgorCQkkZGlmZmluZm8gPSBwYXJzZWRfZGlmZnRyZWVfbGluZSgkZGlmZnRyZWUtPlskcGF0Y2hfaWR4XSk7CisKKwkJIyBnZW5lcmF0ZSBhbmNob3IgZm9yICJwYXRjaCIgbGlua3MgaW4gZGlmZnRyZWUgLyB3aGF0Y2hhbmdlZCBwYXJ0CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGF0Y2hcIiBpZD1cInBhdGNoIi4gKCRwYXRjaF9pZHgrMSkgLiJcIj5cbiIgLgorCQkgICAgICBmb3JtYXRfZGlmZl9jY19zaW1wbGlmaWVkKCRkaWZmaW5mbywgQGhhc2hfcGFyZW50cykgLgorCQkgICAgICAiPC9kaXY+XG4iOyAgIyBjbGFzcz0icGF0Y2giCisKKwkJJHBhdGNoX251bWJlcisrOworCX0KKworCWlmICgkcGF0Y2hfbnVtYmVyID09IDApIHsKKwkJaWYgKEBoYXNoX3BhcmVudHMgPiAxKSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cImRpZmYgbm9kaWZmZXJlbmNlc1wiPlRyaXZpYWwgbWVyZ2U8L2Rpdj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cImRpZmYgbm9kaWZmZXJlbmNlc1wiPk5vIGRpZmZlcmVuY2VzIGZvdW5kPC9kaXY+XG4iOworCQl9CisJfQorCisJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGF0Y2hzZXQiCit9CisKKyMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4KKworc3ViIGdpdF9wcm9qZWN0X3NlYXJjaF9mb3JtIHsKKwlteSAoJHNlYXJjaHRleHQsICRzZWFyY2hfdXNlX3JlZ2V4cCkgPSBAXzsKKworCW15ICRsaW1pdCA9ICcnOworCWlmICgkcHJvamVjdF9maWx0ZXIpIHsKKwkJJGxpbWl0ID0gIiBpbiAnJHByb2plY3RfZmlsdGVyLyciOworCX0KKworCXByaW50ICI8ZGl2IGNsYXNzPVwicHJvanNlYXJjaFwiPlxuIjsKKwlwcmludCAkY2dpLT5zdGFydF9mb3JtKC1tZXRob2QgPT4gJ2dldCcsIC1hY3Rpb24gPT4gJG15X3VyaSkgLgorCSAgICAgICRjZ2ktPmhpZGRlbigtbmFtZSA9PiAnYScsIC12YWx1ZSA9PiAncHJvamVjdF9saXN0JykgIC4gIlxuIjsKKwlwcmludCAkY2dpLT5oaWRkZW4oLW5hbWUgPT4gJ3BmJywgLXZhbHVlID0+ICRwcm9qZWN0X2ZpbHRlcikuICJcbiIKKwkJaWYgKGRlZmluZWQgJHByb2plY3RfZmlsdGVyKTsKKwlwcmludCAkY2dpLT50ZXh0ZmllbGQoLW5hbWUgPT4gJ3MnLCAtdmFsdWUgPT4gJHNlYXJjaHRleHQsCisJICAgICAgICAgICAgICAgICAgICAgIC10aXRsZSA9PiAiU2VhcmNoIHByb2plY3QgYnkgbmFtZSBhbmQgZGVzY3JpcHRpb24kbGltaXQiLAorCSAgICAgICAgICAgICAgICAgICAgICAtc2l6ZSA9PiA2MCkgLiAiXG4iIC4KKwkgICAgICAiPHNwYW4gdGl0bGU9XCJFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb25cIj4iIC4KKwkgICAgICAkY2dpLT5jaGVja2JveCgtbmFtZSA9PiAnc3InLCAtdmFsdWUgPT4gMSwgLWxhYmVsID0+ICdyZScsCisJICAgICAgICAgICAgICAgICAgICAgLWNoZWNrZWQgPT4gJHNlYXJjaF91c2VfcmVnZXhwKSAuCisJICAgICAgIjwvc3Bhbj5cbiIgLgorCSAgICAgICRjZ2ktPnN1Ym1pdCgtbmFtZSA9PiAnYnRuUycsIC12YWx1ZSA9PiAnU2VhcmNoJykgLgorCSAgICAgICRjZ2ktPmVuZF9mb3JtKCkgLiAiXG4iIC4KKwkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3QgPT4gdW5kZWYsIHNlYXJjaHRleHQgPT4gdW5kZWYsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0X2ZpbHRlciA9PiAkcHJvamVjdF9maWx0ZXIpfSwKKwkgICAgICAgICAgICAgIGVzY19odG1sKCJMaXN0IGFsbCBwcm9qZWN0cyRsaW1pdCIpKSAuICI8YnIgLz5cbiI7CisJcHJpbnQgIjwvZGl2PlxuIjsKK30KKworIyBlbnRyeSBmb3IgZ2l2ZW4gQGtleXMgbmVlZHMgZmlsbGluZyBpZiBhdCBsZWFzdCBvbmUgb2Yga2V5cyBpbiBsaXN0CisjIGlzIG5vdCBwcmVzZW50IGluICUkcHJvamVjdF9pbmZvCitzdWIgcHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcgeworCW15ICgkcHJvamVjdF9pbmZvLCBAa2V5cykgPSBAXzsKKworCSMgcmV0dXJuIExpc3Q6Ok1vcmVVdGlsczo6YW55IHsgIWV4aXN0cyAkcHJvamVjdF9pbmZvLT57JF99IH0gQGtleXM7CisJZm9yZWFjaCBteSAka2V5IChAa2V5cykgeworCQlpZiAoIWV4aXN0cyAkcHJvamVjdF9pbmZvLT57JGtleX0pIHsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybjsKK30KKworIyBmaWxscyBwcm9qZWN0IGxpc3QgaW5mbyAoYWdlLCBkZXNjcmlwdGlvbiwgb3duZXIsIGNhdGVnb3J5LCBmb3JrcywgZXRjLikKKyMgZm9yIGVhY2ggcHJvamVjdCBpbiB0aGUgbGlzdCwgcmVtb3ZpbmcgaW52YWxpZCBwcm9qZWN0cyBmcm9tCisjIHJldHVybmVkIGxpc3QsIG9yIGZpbGwgb25seSBzcGVjaWZpZWQgaW5mby4KKyMKKyMgSW52YWxpZCBwcm9qZWN0cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSByZXR1cm5lZCBsaXN0IGlmIGFuZCBvbmx5IGlmIHlvdQorIyBhc2sgJ2FnZScgb3IgJ2FnZV9zdHJpbmcnIHRvIGJlIGZpbGxlZCwgYmVjYXVzZSB0aGV5IGFyZSB0aGUgb25seSBmaWVsZHMKKyMgdGhhdCBydW4gdW5jb25kaXRpb25hbGx5IGdpdCBjb21tYW5kIHRoYXQgcmVxdWlyZXMgcmVwb3NpdG9yeSwgYW5kCisjIHRoZXJlZm9yZSBkbyBhbHdheXMgY2hlY2sgaWYgcHJvamVjdCByZXBvc2l0b3J5IGlzIGludmFsaWQuCisjCisjIFVTQUdFOgorIyAqIGZpbGxfcHJvamVjdF9saXN0X2luZm8oXEBwcm9qZWN0X2xpc3QsICdkZXNjcl9sb25nJywgJ2N0YWdzJykKKyMgICBlbnN1cmVzIHRoYXQgJ2Rlc2NyX2xvbmcnIGFuZCAnY3RhZ3MnIGZpZWxkcyBhcmUgZmlsbGVkCisjICogQHByb2plY3RfbGlzdCA9IGZpbGxfcHJvamVjdF9saXN0X2luZm8oXEBwcm9qZWN0X2xpc3QpCisjICAgZW5zdXJlcyB0aGF0IGFsbCBmaWVsZHMgYXJlIGZpbGxlZCAoYW5kIGludmFsaWQgcHJvamVjdHMgcmVtb3ZlZCkKKyMKKyMgTk9URTogbW9kaWZpZXMgJHByb2psaXN0LCBidXQgZG9lcyBub3QgcmVtb3ZlIGVudHJpZXMgZnJvbSBpdAorc3ViIGZpbGxfcHJvamVjdF9saXN0X2luZm8geworCW15ICgkcHJvamxpc3QsIEB3YW50ZWRfa2V5cykgPSBAXzsKKwlteSBAcHJvamVjdHM7CisJbXkgJGZpbHRlcl9zZXQgPSBzdWIgeyByZXR1cm4gQF87IH07CisJaWYgKEB3YW50ZWRfa2V5cykgeworCQlteSAld2FudGVkX2tleXMgPSBtYXAgeyAkXyA9PiAxIH0gQHdhbnRlZF9rZXlzOworCQkkZmlsdGVyX3NldCA9IHN1YiB7IHJldHVybiBncmVwIHsgJHdhbnRlZF9rZXlzeyRffSB9IEBfOyB9OworCX0KKworCW15ICRzaG93X2N0YWdzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2N0YWdzJyk7CisgUFJPSkVDVDoKKwlmb3JlYWNoIG15ICRwciAoQCRwcm9qbGlzdCkgeworCQlpZiAocHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcoJHByLCAkZmlsdGVyX3NldC0+KCdhZ2UnLCAnYWdlX3N0cmluZycpKSkgeworCQkJbXkgKEBhY3Rpdml0eSkgPSBnaXRfZ2V0X2xhc3RfYWN0aXZpdHkoJHByLT57J3BhdGgnfSk7CisJCQl1bmxlc3MgKEBhY3Rpdml0eSkgeworCQkJCW5leHQgUFJPSkVDVDsKKwkJCX0KKwkJCSgkcHItPnsnYWdlJ30sICRwci0+eydhZ2Vfc3RyaW5nJ30pID0gQGFjdGl2aXR5OworCQl9CisJCWlmIChwcm9qZWN0X2luZm9fbmVlZHNfZmlsbGluZygkcHIsICRmaWx0ZXJfc2V0LT4oJ2Rlc2NyJywgJ2Rlc2NyX2xvbmcnKSkpIHsKKwkJCW15ICRkZXNjciA9IGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbigkcHItPnsncGF0aCd9KSB8fCAiIjsKKwkJCSRkZXNjciA9IHRvX3V0ZjgoJGRlc2NyKTsKKwkJCSRwci0+eydkZXNjcl9sb25nJ30gPSAkZGVzY3I7CisJCQkkcHItPnsnZGVzY3InfSA9IGNob3Bfc3RyKCRkZXNjciwgJHByb2plY3RzX2xpc3RfZGVzY3JpcHRpb25fd2lkdGgsIDUpOworCQl9CisJCWlmIChwcm9qZWN0X2luZm9fbmVlZHNfZmlsbGluZygkcHIsICRmaWx0ZXJfc2V0LT4oJ293bmVyJykpKSB7CisJCQkkcHItPnsnb3duZXInfSA9IGdpdF9nZXRfcHJvamVjdF9vd25lcigiJHByLT57J3BhdGgnfSIpIHx8ICIiOworCQl9CisJCWlmICgkc2hvd19jdGFncyAmJgorCQkgICAgcHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcoJHByLCAkZmlsdGVyX3NldC0+KCdjdGFncycpKSkgeworCQkJJHByLT57J2N0YWdzJ30gPSBnaXRfZ2V0X3Byb2plY3RfY3RhZ3MoJHByLT57J3BhdGgnfSk7CisJCX0KKwkJaWYgKCRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXMgJiYKKwkJICAgIHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nKCRwciwgJGZpbHRlcl9zZXQtPignY2F0ZWdvcnknKSkpIHsKKwkJCW15ICRjYXQgPSBnaXRfZ2V0X3Byb2plY3RfY2F0ZWdvcnkoJHByLT57J3BhdGgnfSkgfHwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb2plY3RfbGlzdF9kZWZhdWx0X2NhdGVnb3J5OworCQkJJHByLT57J2NhdGVnb3J5J30gPSB0b191dGY4KCRjYXQpOworCQl9CisKKwkJcHVzaCBAcHJvamVjdHMsICRwcjsKKwl9CisKKwlyZXR1cm4gQHByb2plY3RzOworfQorCitzdWIgc29ydF9wcm9qZWN0c19saXN0IHsKKwlteSAoJHByb2psaXN0LCAkb3JkZXIpID0gQF87CisKKwlzdWIgb3JkZXJfc3RyIHsKKwkJbXkgJGtleSA9IHNoaWZ0OworCQlyZXR1cm4gc3ViIHsgJGEtPnska2V5fSBjbXAgJGItPnska2V5fSB9OworCX0KKworCXN1YiBvcmRlcl9udW1fdGhlbl91bmRlZiB7CisJCW15ICRrZXkgPSBzaGlmdDsKKwkJcmV0dXJuIHN1YiB7CisJCQlkZWZpbmVkICRhLT57JGtleX0gPworCQkJCShkZWZpbmVkICRiLT57JGtleX0gPyAkYS0+eyRrZXl9IDw9PiAkYi0+eyRrZXl9IDogLTEpIDoKKwkJCQkoZGVmaW5lZCAkYi0+eyRrZXl9ID8gMSA6IDApCisJCX07CisJfQorCisJbXkgJW9yZGVyaW5ncyA9ICgKKwkJcHJvamVjdCA9PiBvcmRlcl9zdHIoJ3BhdGgnKSwKKwkJZGVzY3IgPT4gb3JkZXJfc3RyKCdkZXNjcl9sb25nJyksCisJCW93bmVyID0+IG9yZGVyX3N0cignb3duZXInKSwKKwkJYWdlID0+IG9yZGVyX251bV90aGVuX3VuZGVmKCdhZ2UnKSwKKwkpOworCisJbXkgJG9yZGVyaW5nID0gJG9yZGVyaW5nc3skb3JkZXJ9OworCXJldHVybiBkZWZpbmVkICRvcmRlcmluZyA/IHNvcnQgJG9yZGVyaW5nIEAkcHJvamxpc3QgOiBAJHByb2psaXN0OworfQorCisjIHJldHVybnMgYSBoYXNoIG9mIGNhdGVnb3JpZXMsIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgcHJvamVjdAorIyBiZWxvbmdpbmcgdG8gZWFjaCBjYXRlZ29yeQorc3ViIGJ1aWxkX3Byb2psaXN0X2J5X2NhdGVnb3J5IHsKKwlteSAoJHByb2psaXN0LCAkZnJvbSwgJHRvKSA9IEBfOworCW15ICVjYXRlZ29yaWVzOworCisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjJHByb2psaXN0IGlmICghZGVmaW5lZCAkdG8gfHwgJCMkcHJvamxpc3QgPCAkdG8pOworCisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJHByID0gJHByb2psaXN0LT5bJGldOworCQlwdXNoIEB7JGNhdGVnb3JpZXN7ICRwci0+eydjYXRlZ29yeSd9IH19LCAkcHI7CisJfQorCisJcmV0dXJuIHdhbnRhcnJheSA/ICVjYXRlZ29yaWVzIDogXCVjYXRlZ29yaWVzOworfQorCisjIHByaW50ICdzb3J0IGJ5JyA8dGg+IGVsZW1lbnQsIGdlbmVyYXRpbmcgJ3NvcnQgYnkgJG5hbWUnIHJlcGxheSBsaW5rCisjIGlmIHRoYXQgb3JkZXIgaXMgbm90IHNlbGVjdGVkCitzdWIgcHJpbnRfc29ydF90aCB7CisJcHJpbnQgZm9ybWF0X3NvcnRfdGgoQF8pOworfQorCitzdWIgZm9ybWF0X3NvcnRfdGggeworCW15ICgkbmFtZSwgJG9yZGVyLCAkaGVhZGVyKSA9IEBfOworCW15ICRzb3J0X3RoID0gIiI7CisJJGhlYWRlciB8fD0gdWNmaXJzdCgkbmFtZSk7CisKKwlpZiAoJG9yZGVyIGVxICRuYW1lKSB7CisJCSRzb3J0X3RoIC49ICI8dGg+JGhlYWRlcjwvdGg+XG4iOworCX0gZWxzZSB7CisJCSRzb3J0X3RoIC49ICI8dGg+IiAuCisJCSAgICAgICAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgb3JkZXI9PiRuYW1lKSwKKwkJICAgICAgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJoZWFkZXIifSwgJGhlYWRlcikgLgorCQkgICAgICAgICAgICAiPC90aD5cbiI7CisJfQorCisJcmV0dXJuICRzb3J0X3RoOworfQorCitzdWIgZ2l0X3Byb2plY3RfbGlzdF9yb3dzIHsKKwlteSAoJHByb2psaXN0LCAkZnJvbSwgJHRvLCAkY2hlY2tfZm9ya3MpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCMkcHJvamxpc3QgaWYgKCFkZWZpbmVkICR0byB8fCAkIyRwcm9qbGlzdCA8ICR0byk7CisKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlmb3IgKG15ICRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAkcHIgPSAkcHJvamxpc3QtPlskaV07CisKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKworCQlpZiAoJGNoZWNrX2ZvcmtzKSB7CisJCQlwcmludCAiPHRkPiI7CisJCQlpZiAoJHByLT57J2ZvcmtzJ30pIHsKKwkJCQlteSAkbmZvcmtzID0gc2NhbGFyIEB7JHByLT57J2ZvcmtzJ319OworCQkJCWlmICgkbmZvcmtzID4gMCkgeworCQkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+ImZvcmtzIiksCisJCQkJCSAgICAgICAgICAgICAgIC10aXRsZSA9PiAiJG5mb3JrcyBmb3JrcyJ9LCAiKyIpOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ICRjZ2ktPnNwYW4oey10aXRsZSA9PiAiJG5mb3JrcyBmb3JrcyJ9LCAiKyIpOworCQkJCX0KKwkJCX0KKwkJCXByaW50ICI8L3RkPlxuIjsKKwkJfQorCQlwcmludCAiPHRkPiIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+InN1bW1hcnkiKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgZXNjX2h0bWxfbWF0Y2hfaGwoJHByLT57J3BhdGgnfSwgJHNlYXJjaF9yZWdleHApKSAuCisJCSAgICAgICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQ+IiAuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+JHByLT57J3BhdGgnfSwgYWN0aW9uPT4ic3VtbWFyeSIpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAtdGl0bGUgPT4gJHByLT57J2Rlc2NyX2xvbmcnfX0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hfcmVnZXhwCisJCSAgICAgICAgICAgICAgICAgICAgICAgID8gZXNjX2h0bWxfbWF0Y2hfaGxfY2hvcHBlZCgkcHItPnsnZGVzY3JfbG9uZyd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByLT57J2Rlc2NyJ30sICRzZWFyY2hfcmVnZXhwKQorCQkgICAgICAgICAgICAgICAgICAgICAgICA6IGVzY19odG1sKCRwci0+eydkZXNjcid9KSkgLgorCQkgICAgICAiPC90ZD5cbiI7CisJCXVubGVzcyAoJG9taXRfb3duZXIpIHsKKwkJICAgICAgICBwcmludCAiPHRkPjxpPiIgLiBjaG9wX2FuZF9lc2NhcGVfc3RyKCRwci0+eydvd25lcid9LCAxNSkgLiAiPC9pPjwvdGQ+XG4iOworCQl9CisJCXVubGVzcyAoJG9taXRfYWdlX2NvbHVtbikgeworCQkgICAgICAgIHByaW50ICI8dGQgY2xhc3M9XCIiLiBhZ2VfY2xhc3MoJHByLT57J2FnZSd9KSAuICJcIj4iIC4KKwkJICAgICAgICAgICAgKGRlZmluZWQgJHByLT57J2FnZV9zdHJpbmcnfSA/ICRwci0+eydhZ2Vfc3RyaW5nJ30gOiAiTm8gY29tbWl0cyIpIC4gIjwvdGQ+XG4iOworCQl9CisJCXByaW50Ijx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJzdW1tYXJ5Iil9LCAic3VtbWFyeSIpICAgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+JHByLT57J3BhdGgnfSwgYWN0aW9uPT4ic2hvcnRsb2ciKX0sICJzaG9ydGxvZyIpIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+ImxvZyIpfSwgImxvZyIpIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+InRyZWUiKX0sICJ0cmVlIikgLgorCQkgICAgICAoJHByLT57J2ZvcmtzJ30gPyAiIHwgIiAuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+JHByLT57J3BhdGgnfSwgYWN0aW9uPT4iZm9ya3MiKX0sICJmb3JrcyIpIDogJycpIC4KKwkJICAgICAgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KK30KKworc3ViIGdpdF9wcm9qZWN0X2xpc3RfYm9keSB7CisJIyBhY3R1YWxseSB1c2VzIGdsb2JhbCB2YXJpYWJsZSAkcHJvamVjdAorCW15ICgkcHJvamxpc3QsICRvcmRlciwgJGZyb20sICR0bywgJGV4dHJhLCAkbm9faGVhZGVyKSA9IEBfOworCW15IEBwcm9qZWN0cyA9IEAkcHJvamxpc3Q7CisKKwlteSAkY2hlY2tfZm9ya3MgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnZm9ya3MnKTsKKwlteSAkc2hvd19jdGFncyAgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnY3RhZ3MnKTsKKwlteSAkdGFnZmlsdGVyID0gJHNob3dfY3RhZ3MgPyAkaW5wdXRfcGFyYW1zeydjdGFnJ30gOiB1bmRlZjsKKwkkY2hlY2tfZm9ya3MgPSB1bmRlZgorCQlpZiAoJHRhZ2ZpbHRlciB8fCAkc2VhcmNoX3JlZ2V4cCk7CisKKwkjIGZpbHRlcmluZyBvdXQgZm9ya3MgYmVmb3JlIGZpbGxpbmcgaW5mbyBhbGxvd3MgdG8gZG8gbGVzcyB3b3JrCisJQHByb2plY3RzID0gZmlsdGVyX2ZvcmtzX2Zyb21fcHJvamVjdHNfbGlzdChcQHByb2plY3RzKQorCQlpZiAoJGNoZWNrX2ZvcmtzKTsKKwkjIHNlYXJjaF9wcm9qZWN0c19saXN0IHByZS1maWxscyByZXF1aXJlZCBpbmZvCisJQHByb2plY3RzID0gc2VhcmNoX3Byb2plY3RzX2xpc3QoXEBwcm9qZWN0cywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VhcmNoX3JlZ2V4cCcgPT4gJHNlYXJjaF9yZWdleHAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhZ2ZpbHRlcicgID0+ICR0YWdmaWx0ZXIpCisJCWlmICgkdGFnZmlsdGVyIHx8ICRzZWFyY2hfcmVnZXhwKTsKKwkjIGZpbGwgdGhlIHJlc3QKKwlteSBAYWxsX2ZpZWxkcyA9ICgnZGVzY3InLCAnZGVzY3JfbG9uZycsICdjdGFncycsICdjYXRlZ29yeScpOworCXB1c2ggQGFsbF9maWVsZHMsICgnYWdlJywgJ2FnZV9zdHJpbmcnKSB1bmxlc3MoJG9taXRfYWdlX2NvbHVtbik7CisJcHVzaCBAYWxsX2ZpZWxkcywgJ293bmVyJyB1bmxlc3MoJG9taXRfb3duZXIpOworCUBwcm9qZWN0cyA9IGZpbGxfcHJvamVjdF9saXN0X2luZm8oXEBwcm9qZWN0cywgQGFsbF9maWVsZHMpOworCisJJG9yZGVyIHx8PSAkZGVmYXVsdF9wcm9qZWN0c19vcmRlcjsKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCNwcm9qZWN0cyBpZiAoIWRlZmluZWQgJHRvIHx8ICQjcHJvamVjdHMgPCAkdG8pOworCisJIyBzaG9ydCBjaXJjdWl0CisJaWYgKCRmcm9tID4gJHRvKSB7CisJCXByaW50ICI8Y2VudGVyPlxuIi4KKwkJICAgICAgIjxiPk5vIHN1Y2ggcHJvamVjdHMgZm91bmQ8L2I+PGJyIC8+XG4iLgorCQkgICAgICAiQ2xpY2sgIi4kY2dpLT5hKHstaHJlZj0+aHJlZihwcm9qZWN0PT51bmRlZil9LCJoZXJlIikuIiB0byB2aWV3IGFsbCBwcm9qZWN0czxiciAvPlxuIi4KKwkJICAgICAgIjwvY2VudGVyPlxuPGJyIC8+XG4iOworCQlyZXR1cm47CisJfQorCisJQHByb2plY3RzID0gc29ydF9wcm9qZWN0c19saXN0KFxAcHJvamVjdHMsICRvcmRlcik7CisKKwlpZiAoJHNob3dfY3RhZ3MpIHsKKwkJbXkgJGN0YWdzID0gZ2l0X2dhdGhlcl9hbGxfY3RhZ3MoXEBwcm9qZWN0cyk7CisJCW15ICRjbG91ZCA9IGdpdF9wb3B1bGF0ZV9wcm9qZWN0X3RhZ2Nsb3VkKCRjdGFncyk7CisJCXByaW50IGdpdF9zaG93X3Byb2plY3RfdGFnY2xvdWQoJGNsb3VkLCA2NCk7CisJfQorCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cInByb2plY3RfbGlzdFwiPlxuIjsKKwl1bmxlc3MgKCRub19oZWFkZXIpIHsKKwkJcHJpbnQgIjx0cj5cbiI7CisJCWlmICgkY2hlY2tfZm9ya3MpIHsKKwkJCXByaW50ICI8dGg+PC90aD5cbiI7CisJCX0KKwkJcHJpbnRfc29ydF90aCgncHJvamVjdCcsICRvcmRlciwgJ1Byb2plY3QnKTsKKwkJcHJpbnRfc29ydF90aCgnZGVzY3InLCAkb3JkZXIsICdEZXNjcmlwdGlvbicpOworCQlwcmludF9zb3J0X3RoKCdvd25lcicsICRvcmRlciwgJ093bmVyJykgdW5sZXNzICRvbWl0X293bmVyOworCQlwcmludF9zb3J0X3RoKCdhZ2UnLCAkb3JkZXIsICdMYXN0IENoYW5nZScpIHVubGVzcyAkb21pdF9hZ2VfY29sdW1uOworCQlwcmludCAiPHRoPjwvdGg+XG4iIC4gIyBmb3IgbGlua3MKKwkJICAgICAgIjwvdHI+XG4iOworCX0KKworCWlmICgkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzKSB7CisJCSMgb25seSBkaXNwbGF5IGNhdGVnb3JpZXMgd2l0aCBwcm9qZWN0cyBpbiB0aGUgJGZyb20tJHRvIHdpbmRvdworCQlAcHJvamVjdHMgPSBzb3J0IHskYS0+eydjYXRlZ29yeSd9IGNtcCAkYi0+eydjYXRlZ29yeSd9fSBAcHJvamVjdHNbJGZyb20uLiR0b107CisJCW15ICVjYXRlZ29yaWVzID0gYnVpbGRfcHJvamxpc3RfYnlfY2F0ZWdvcnkoXEBwcm9qZWN0cywgJGZyb20sICR0byk7CisJCWZvcmVhY2ggbXkgJGNhdCAoc29ydCBrZXlzICVjYXRlZ29yaWVzKSB7CisJCQl1bmxlc3MgKCRjYXQgZXEgIiIpIHsKKwkJCQlwcmludCAiPHRyPlxuIjsKKwkJCQlpZiAoJGNoZWNrX2ZvcmtzKSB7CisJCQkJCXByaW50ICI8dGQ+PC90ZD5cbiI7CisJCQkJfQorCQkJCXByaW50ICI8dGQgY2xhc3M9XCJjYXRlZ29yeVwiIGNvbHNwYW49XCI1XCI+Ii5lc2NfaHRtbCgkY2F0KS4iPC90ZD5cbiI7CisJCQkJcHJpbnQgIjwvdHI+XG4iOworCQkJfQorCisJCQlnaXRfcHJvamVjdF9saXN0X3Jvd3MoJGNhdGVnb3JpZXN7JGNhdH0sIHVuZGVmLCB1bmRlZiwgJGNoZWNrX2ZvcmtzKTsKKwkJfQorCX0gZWxzZSB7CisJCWdpdF9wcm9qZWN0X2xpc3Rfcm93cyhcQHByb2plY3RzLCAkZnJvbSwgJHRvLCAkY2hlY2tfZm9ya3MpOworCX0KKworCWlmIChkZWZpbmVkICRleHRyYSkgeworCQlwcmludCAiPHRyPlxuIjsKKwkJaWYgKCRjaGVja19mb3JrcykgeworCQkJcHJpbnQgIjx0ZD48L3RkPlxuIjsKKwkJfQorCQlwcmludCAiPHRkIGNvbHNwYW49XCI1XCI+JGV4dHJhPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworc3ViIGdpdF9sb2dfYm9keSB7CisJIyB1c2VzIGdsb2JhbCB2YXJpYWJsZSAkcHJvamVjdAorCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJHJlZnMsICRleHRyYSkgPSBAXzsKKworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkI3skY29tbWl0bGlzdH0gaWYgKCFkZWZpbmVkICR0byB8fCAkI3skY29tbWl0bGlzdH0gPCAkdG8pOworCisJZm9yIChteSAkaSA9IDA7ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAlY28gPSAleyRjb21taXRsaXN0LT5bJGldfTsKKwkJbmV4dCBpZiAhJWNvOworCQlteSAkY29tbWl0ID0gJGNveydpZCd9OworCQlteSAkcmVmID0gZm9ybWF0X3JlZl9tYXJrZXIoJHJlZnMsICRjb21taXQpOworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywKKwkJICAgICAgICAgICAgICAgIjxzcGFuIGNsYXNzPVwiYWdlXCI+JGNveydhZ2Vfc3RyaW5nJ308L3NwYW4+IiAuCisJCSAgICAgICAgICAgICAgIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAkcmVmLAorCQkgICAgICAgICAgICAgICAkY29tbWl0KTsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZV90ZXh0XCI+XG4iIC4KKwkJICAgICAgIjxkaXYgY2xhc3M9XCJsb2dfbGlua1wiPlxuIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNvbW1pdCl9LCAiY29tbWl0IikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0ZGlmZiIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdGRpZmYiKSAuCisJCSAgICAgICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JGNvbW1pdCwgaGFzaF9iYXNlPT4kY29tbWl0KX0sICJ0cmVlIikgLgorCQkgICAgICAiPGJyLz5cbiIgLgorCQkgICAgICAiPC9kaXY+XG4iOworCQkgICAgICBnaXRfcHJpbnRfYXV0aG9yc2hpcChcJWNvLCAtdGFnID0+ICdzcGFuJyk7CisJCSAgICAgIHByaW50ICI8YnIvPlxuPC9kaXY+XG4iOworCisJCXByaW50ICI8ZGl2IGNsYXNzPVwibG9nX2JvZHlcIj5cbiI7CisJCWdpdF9wcmludF9sb2coJGNveydjb21tZW50J30sIC1maW5hbF9lbXB0eV9saW5lPT4gMSk7CisJCXByaW50ICI8L2Rpdj5cbiI7CisJfQorCWlmICgkZXh0cmEpIHsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX25hdlwiPlxuIjsKKwkJcHJpbnQgIiRleHRyYVxuIjsKKwkJcHJpbnQgIjwvZGl2PlxuIjsKKwl9Cit9CisKK3N1YiBnaXRfc2hvcnRsb2dfYm9keSB7CisJIyB1c2VzIGdsb2JhbCB2YXJpYWJsZSAkcHJvamVjdAorCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJHJlZnMsICRleHRyYSkgPSBAXzsKKworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkI3skY29tbWl0bGlzdH0gaWYgKCFkZWZpbmVkICR0byB8fCAkI3skY29tbWl0bGlzdH0gPCAkdG8pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cInNob3J0bG9nXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICVjbyA9ICV7JGNvbW1pdGxpc3QtPlskaV19OworCQlteSAkY29tbWl0ID0gJGNveydpZCd9OworCQlteSAkcmVmID0gZm9ybWF0X3JlZl9tYXJrZXIoJHJlZnMsICRjb21taXQpOworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQkjIGdpdF9zdW1tYXJ5KCkgdXNlZCBwcmludCAiPHRkPjxpPiRjb3snYWdlX3N0cmluZyd9PC9pPjwvdGQ+XG4iIC4KKwkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgorCQkgICAgICBmb3JtYXRfYXV0aG9yX2h0bWwoJ3RkJywgXCVjbywgMTApIC4gIjx0ZD4iOworCQlwcmludCBmb3JtYXRfc3ViamVjdF9odG1sKCRjb3sndGl0bGUnfSwgJGNveyd0aXRsZV9zaG9ydCd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNvbW1pdCksICRyZWYpOworCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdCIpIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXRkaWZmIikgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb21taXQsIGhhc2hfYmFzZT0+JGNvbW1pdCl9LCAidHJlZSIpOworCQlteSAkc25hcHNob3RfbGlua3MgPSBmb3JtYXRfc25hcHNob3RfbGlua3MoJGNvbW1pdCk7CisJCWlmIChkZWZpbmVkICRzbmFwc2hvdF9saW5rcykgeworCQkJcHJpbnQgIiB8ICIgLiAkc25hcHNob3RfbGlua3M7CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiIgLgorCQkgICAgICAiPHRkIGNvbHNwYW49XCI0XCI+JGV4dHJhPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworc3ViIGdpdF9oaXN0b3J5X2JvZHkgeworCSMgV2FybmluZzogYXNzdW1lcyBjb25zdGFudCB0eXBlIChibG9iIG9yIHRyZWUpIGR1cmluZyBoaXN0b3J5CisJbXkgKCRjb21taXRsaXN0LCAkZnJvbSwgJHRvLCAkcmVmcywgJGV4dHJhLAorCSAgICAkZmlsZV9uYW1lLCAkZmlsZV9oYXNoLCAkZnR5cGUpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IHVubGVzcyAoZGVmaW5lZCAkdG8gJiYgJHRvIDw9ICQjeyRjb21taXRsaXN0fSk7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiaGlzdG9yeVwiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlmb3IgKG15ICRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAlY28gPSAleyRjb21taXRsaXN0LT5bJGldfTsKKwkJaWYgKCElY28pIHsKKwkJCW5leHQ7CisJCX0KKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKworCQlteSAkcmVmID0gZm9ybWF0X3JlZl9tYXJrZXIoJHJlZnMsICRjb21taXQpOworCisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KKwkjIHNob3J0bG9nOiAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxMCkKKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDE1LCAzKSAuICI8dGQ+IjsKKwkJIyBvcmlnaW5hbGx5IGdpdF9oaXN0b3J5IHVzZWQgY2hvcF9zdHIoJGNveyd0aXRsZSd9LCA1MCkKKwkJcHJpbnQgZm9ybWF0X3N1YmplY3RfaHRtbCgkY297J3RpdGxlJ30sICRjb3sndGl0bGVfc2hvcnQnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpLCAkcmVmKTsKKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiRmdHlwZSwgaGFzaF9iYXNlPT4kY29tbWl0LCBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwgJGZ0eXBlKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGNvbW1pdCl9LCAiY29tbWl0ZGlmZiIpOworCisJCWlmICgkZnR5cGUgZXEgJ2Jsb2InKSB7CisJCQlwcmludCAiIHwgIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCBoYXNoX2Jhc2U9PiRjb21taXQsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LCAicmF3Iik7CisKKwkJCW15ICRibG9iX2N1cnJlbnQgPSAkZmlsZV9oYXNoOworCQkJbXkgJGJsb2JfcGFyZW50ICA9IGdpdF9nZXRfaGFzaF9ieV9wYXRoKCRjb21taXQsICRmaWxlX25hbWUpOworCQkJaWYgKGRlZmluZWQgJGJsb2JfY3VycmVudCAmJiBkZWZpbmVkICRibG9iX3BhcmVudCAmJgorCQkJCQkkYmxvYl9jdXJyZW50IG5lICRibG9iX3BhcmVudCkgeworCQkJCXByaW50ICIgfCAiIC4KKwkJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iZGlmZiIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGJsb2JfY3VycmVudCwgaGFzaF9wYXJlbnQ9PiRibG9iX3BhcmVudCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsIGhhc2hfcGFyZW50X2Jhc2U9PiRjb21taXQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCQkJCSAgICAgICAgImRpZmYgdG8gY3VycmVudCIpOworCQkJfQorCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiNFwiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKK3N1YiBnaXRfdGFnc19ib2R5IHsKKwkjIHVzZXMgZ2xvYmFsIHZhcmlhYmxlICRwcm9qZWN0CisJbXkgKCR0YWdsaXN0LCAkZnJvbSwgJHRvLCAkZXh0cmEpID0gQF87CisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjeyR0YWdsaXN0fSBpZiAoIWRlZmluZWQgJHRvIHx8ICQjeyR0YWdsaXN0fSA8ICR0byk7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwidGFnc1wiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlmb3IgKG15ICRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAkZW50cnkgPSAkdGFnbGlzdC0+WyRpXTsKKwkJbXkgJXRhZyA9ICUkZW50cnk7CisJCW15ICRjb21tZW50ID0gJHRhZ3snc3ViamVjdCd9OworCQlteSAkY29tbWVudF9zaG9ydDsKKwkJaWYgKGRlZmluZWQgJGNvbW1lbnQpIHsKKwkJCSRjb21tZW50X3Nob3J0ID0gY2hvcF9zdHIoJGNvbW1lbnQsIDMwLCA1KTsKKwkJfQorCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlpZiAoZGVmaW5lZCAkdGFneydhZ2UnfSkgeworCQkJcHJpbnQgIjx0ZD48aT4kdGFneydhZ2UnfTwvaT48L3RkPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dGQ+PC90ZD5cbiI7CisJCX0KKwkJcHJpbnQgIjx0ZD4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiR0YWd7J3JlZnR5cGUnfSwgaGFzaD0+JHRhZ3sncmVmaWQnfSksCisJCSAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCBuYW1lIn0sIGVzY19odG1sKCR0YWd7J25hbWUnfSkpIC4KKwkJICAgICAgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZD4iOworCQlpZiAoZGVmaW5lZCAkY29tbWVudCkgeworCQkJcHJpbnQgZm9ybWF0X3N1YmplY3RfaHRtbCgkY29tbWVudCwgJGNvbW1lbnRfc2hvcnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYoYWN0aW9uPT4idGFnIiwgaGFzaD0+JHRhZ3snaWQnfSkpOworCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJzZWxmbGlua1wiPiI7CisJCWlmICgkdGFneyd0eXBlJ30gZXEgInRhZyIpIHsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idGFnIiwgaGFzaD0+JHRhZ3snaWQnfSl9LCAidGFnIik7CisJCX0gZWxzZSB7CisJCQlwcmludCAiJm5ic3A7IjsKKwkJfQorCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kdGFneydyZWZ0eXBlJ30sIGhhc2g9PiR0YWd7J3JlZmlkJ30pfSwgJHRhZ3sncmVmdHlwZSd9KTsKKwkJaWYgKCR0YWd7J3JlZnR5cGUnfSBlcSAiY29tbWl0IikgeworCQkJcHJpbnQgIiB8ICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNob3J0bG9nIiwgaGFzaD0+JHRhZ3snZnVsbG5hbWUnfSl9LCAic2hvcnRsb2ciKSAuCisJCQkgICAgICAiIHwgIiAuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ibG9nIiwgaGFzaD0+JHRhZ3snZnVsbG5hbWUnfSl9LCAibG9nIik7CisJCX0gZWxzaWYgKCR0YWd7J3JlZnR5cGUnfSBlcSAiYmxvYiIpIHsKKwkJCXByaW50ICIgfCAiIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgaGFzaD0+JHRhZ3sncmVmaWQnfSl9LCAicmF3Iik7CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+IjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiNVwiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKK3N1YiBnaXRfaGVhZHNfYm9keSB7CisJIyB1c2VzIGdsb2JhbCB2YXJpYWJsZSAkcHJvamVjdAorCW15ICgkaGVhZGxpc3QsICRoZWFkX2F0LCAkZnJvbSwgJHRvLCAkZXh0cmEpID0gQF87CisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjeyRoZWFkbGlzdH0gaWYgKCFkZWZpbmVkICR0byB8fCAkI3skaGVhZGxpc3R9IDwgJHRvKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJoZWFkc1wiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlmb3IgKG15ICRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAkZW50cnkgPSAkaGVhZGxpc3QtPlskaV07CisJCW15ICVyZWYgPSAlJGVudHJ5OworCQlteSAkY3VyciA9IGRlZmluZWQgJGhlYWRfYXQgJiYgJHJlZnsnaWQnfSBlcSAkaGVhZF9hdDsKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKwkJcHJpbnQgIjx0ZD48aT4kcmVmeydhZ2UnfTwvaT48L3RkPlxuIiAuCisJCSAgICAgICgkY3VyciA/ICI8dGQgY2xhc3M9XCJjdXJyZW50X2hlYWRcIj4iIDogIjx0ZD4iKSAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2hvcnRsb2ciLCBoYXNoPT4kcmVmeydmdWxsbmFtZSd9KSwKKwkJICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IG5hbWUifSxlc2NfaHRtbCgkcmVmeyduYW1lJ30pKSAuCisJCSAgICAgICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2hvcnRsb2ciLCBoYXNoPT4kcmVmeydmdWxsbmFtZSd9KX0sICJzaG9ydGxvZyIpIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImxvZyIsIGhhc2g9PiRyZWZ7J2Z1bGxuYW1lJ30pfSwgImxvZyIpIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kcmVmeydmdWxsbmFtZSd9LCBoYXNoX2Jhc2U9PiRyZWZ7J2Z1bGxuYW1lJ30pfSwgInRyZWUiKSAuCisJCSAgICAgICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPiI7CisJfQorCWlmIChkZWZpbmVkICRleHRyYSkgeworCQlwcmludCAiPHRyPlxuIiAuCisJCSAgICAgICI8dGQgY29sc3Bhbj1cIjNcIj4kZXh0cmE8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJcHJpbnQgIjwvdGFibGU+XG4iOworfQorCisjIERpc3BsYXkgYSBzaW5nbGUgcmVtb3RlIGJsb2NrCitzdWIgZ2l0X3JlbW90ZV9ibG9jayB7CisJbXkgKCRyZW1vdGUsICRyZGF0YSwgJGxpbWl0LCAkaGVhZCkgPSBAXzsKKworCW15ICRoZWFkcyA9ICRyZGF0YS0+eydoZWFkcyd9OworCW15ICRmZXRjaCA9ICRyZGF0YS0+eydmZXRjaCd9OworCW15ICRwdXNoID0gJHJkYXRhLT57J3B1c2gnfTsKKworCW15ICR1cmxzX3RhYmxlID0gIjx0YWJsZSBjbGFzcz1cInByb2plY3RzX2xpc3RcIj5cbiIgOworCisJaWYgKGRlZmluZWQgJGZldGNoKSB7CisJCWlmICgkZmV0Y2ggZXEgJHB1c2gpIHsKKwkJCSR1cmxzX3RhYmxlIC49IGZvcm1hdF9yZXBvX3VybCgiVVJMIiwgJGZldGNoKTsKKwkJfSBlbHNlIHsKKwkJCSR1cmxzX3RhYmxlIC49IGZvcm1hdF9yZXBvX3VybCgiRmV0Y2ggVVJMIiwgJGZldGNoKTsKKwkJCSR1cmxzX3RhYmxlIC49IGZvcm1hdF9yZXBvX3VybCgiUHVzaCBVUkwiLCAkcHVzaCkgaWYgZGVmaW5lZCAkcHVzaDsKKwkJfQorCX0gZWxzaWYgKGRlZmluZWQgJHB1c2gpIHsKKwkJJHVybHNfdGFibGUgLj0gZm9ybWF0X3JlcG9fdXJsKCJQdXNoIFVSTCIsICRwdXNoKTsKKwl9IGVsc2UgeworCQkkdXJsc190YWJsZSAuPSBmb3JtYXRfcmVwb191cmwoIiIsICJObyByZW1vdGUgVVJMIik7CisJfQorCisJJHVybHNfdGFibGUgLj0gIjwvdGFibGU+XG4iOworCisJbXkgJGRvdHM7CisJaWYgKGRlZmluZWQgJGxpbWl0ICYmICRsaW1pdCA8IEAkaGVhZHMpIHsKKwkJJGRvdHMgPSAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InJlbW90ZXMiLCBoYXNoPT4kcmVtb3RlKX0sICIuLi4iKTsKKwl9CisKKwlwcmludCAkdXJsc190YWJsZTsKKwlnaXRfaGVhZHNfYm9keSgkaGVhZHMsICRoZWFkLCAwLCAkbGltaXQsICRkb3RzKTsKK30KKworIyBEaXNwbGF5IGEgbGlzdCBvZiByZW1vdGUgbmFtZXMgd2l0aCB0aGUgcmVzcGVjdGl2ZSBmZXRjaCBhbmQgcHVzaCBVUkxzCitzdWIgZ2l0X3JlbW90ZXNfbGlzdCB7CisJbXkgKCRyZW1vdGVkYXRhLCAkbGltaXQpID0gQF87CisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImhlYWRzXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCW15IEByZW1vdGVzID0gc29ydCBrZXlzICUkcmVtb3RlZGF0YTsKKworCW15ICRsaW1pdGVkID0gJGxpbWl0ICYmICRsaW1pdCA8IEByZW1vdGVzOworCisJJCNyZW1vdGVzID0gJGxpbWl0IC0gMSBpZiAkbGltaXRlZDsKKworCXdoaWxlIChteSAkcmVtb3RlID0gc2hpZnQgQHJlbW90ZXMpIHsKKwkJbXkgJHJkYXRhID0gJHJlbW90ZWRhdGEtPnskcmVtb3RlfTsKKwkJbXkgJGZldGNoID0gJHJkYXRhLT57J2ZldGNoJ307CisJCW15ICRwdXNoID0gJHJkYXRhLT57J3B1c2gnfTsKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKwkJcHJpbnQgIjx0ZD4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWY9PiBocmVmKGFjdGlvbj0+J3JlbW90ZXMnLCBoYXNoPT4kcmVtb3RlKSwKKwkJCSAgICAgICAtY2xhc3M9PiAibGlzdCBuYW1lIn0sZXNjX2h0bWwoJHJlbW90ZSkpIC4KKwkJICAgICAgIjwvdGQ+IjsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgKGRlZmluZWQgJGZldGNoID8gJGNnaS0+YSh7LWhyZWY9PiAkZmV0Y2h9LCAiZmV0Y2giKSA6ICJmZXRjaCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAoZGVmaW5lZCAkcHVzaCA/ICRjZ2ktPmEoey1ocmVmPT4gJHB1c2h9LCAicHVzaCIpIDogInB1c2giKSAuCisJCSAgICAgICI8L3RkPiI7CisKKwkJcHJpbnQgIjwvdHI+XG4iOworCX0KKworCWlmICgkbGltaXRlZCkgeworCQlwcmludCAiPHRyPlxuIiAuCisJCSAgICAgICI8dGQgY29sc3Bhbj1cIjNcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJyZW1vdGVzIil9LCAiLi4uIikgLgorCQkgICAgICAiPC90ZD5cbiIgLiAiPC90cj5cbiI7CisJfQorCisJcHJpbnQgIjwvdGFibGU+IjsKK30KKworIyBEaXNwbGF5IHJlbW90ZSBoZWFkcyBncm91cGVkIGJ5IHJlbW90ZSwgdW5sZXNzIHRoZXJlIGFyZSB0b28gbWFueQorIyByZW1vdGVzLCBpbiB3aGljaCBjYXNlIHdlIG9ubHkgZGlzcGxheSB0aGUgcmVtb3RlIG5hbWVzCitzdWIgZ2l0X3JlbW90ZXNfYm9keSB7CisJbXkgKCRyZW1vdGVkYXRhLCAkbGltaXQsICRoZWFkKSA9IEBfOworCWlmICgkbGltaXQgYW5kICRsaW1pdCA8IGtleXMgJSRyZW1vdGVkYXRhKSB7CisJCWdpdF9yZW1vdGVzX2xpc3QoJHJlbW90ZWRhdGEsICRsaW1pdCk7CisJfSBlbHNlIHsKKwkJZmlsbF9yZW1vdGVfaGVhZHMoJHJlbW90ZWRhdGEpOworCQl3aGlsZSAobXkgKCRyZW1vdGUsICRyZGF0YSkgPSBlYWNoICUkcmVtb3RlZGF0YSkgeworCQkJZ2l0X3ByaW50X3NlY3Rpb24oey1jbGFzcz0+InJlbW90ZSIsIC1pZD0+JHJlbW90ZX0sCisJCQkJWyJyZW1vdGVzIiwgJHJlbW90ZSwgJHJlbW90ZV0sIHN1YiB7CisJCQkJCWdpdF9yZW1vdGVfYmxvY2soJHJlbW90ZSwgJHJkYXRhLCAkbGltaXQsICRoZWFkKTsKKwkJCQl9KTsKKwkJfQorCX0KK30KKworc3ViIGdpdF9zZWFyY2hfbWVzc2FnZSB7CisJbXkgJWNvID0gQF87CisKKwlteSAkZ3JlcHR5cGU7CisJaWYgKCRzZWFyY2h0eXBlIGVxICdjb21taXQnKSB7CisJCSRncmVwdHlwZSA9ICItLWdyZXA9IjsKKwl9IGVsc2lmICgkc2VhcmNodHlwZSBlcSAnYXV0aG9yJykgeworCQkkZ3JlcHR5cGUgPSAiLS1hdXRob3I9IjsKKwl9IGVsc2lmICgkc2VhcmNodHlwZSBlcSAnY29tbWl0dGVyJykgeworCQkkZ3JlcHR5cGUgPSAiLS1jb21taXR0ZXI9IjsKKwl9CisJJGdyZXB0eXBlIC49ICRzZWFyY2h0ZXh0OworCW15IEBjb21taXRsaXN0ID0gcGFyc2VfY29tbWl0cygkaGFzaCwgMTAxLCAoMTAwICogJHBhZ2UpLCB1bmRlZiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyZXB0eXBlLCAnLS1yZWdleHAtaWdub3JlLWNhc2UnLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoX3VzZV9yZWdleHAgPyAnLS1leHRlbmRlZC1yZWdleHAnIDogJy0tZml4ZWQtc3RyaW5ncycpOworCisJbXkgJHBhZ2luZ19uYXYgPSAnJzsKKwlpZiAoJHBhZ2UgPiAwKSB7CisJCSRwYWdpbmdfbmF2IC49CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PnVuZGVmKX0sCisJCQkgICAgICAgICJmaXJzdCIpIC4KKwkJCSIgJnNkb3Q7ICIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT4kcGFnZS0xKSwKKwkJCSAgICAgICAgIC1hY2Nlc3NrZXkgPT4gInAiLCAtdGl0bGUgPT4gIkFsdC1wIn0sICJwcmV2Iik7CisJfSBlbHNlIHsKKwkJJHBhZ2luZ19uYXYgLj0gImZpcnN0ICZzZG90OyBwcmV2IjsKKwl9CisJbXkgJG5leHRfbGluayA9ICcnOworCWlmICgkI2NvbW1pdGxpc3QgPj0gMTAwKSB7CisJCSRuZXh0X2xpbmsgPQorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLCBwYWdlPT4kcGFnZSsxKSwKKwkJCSAgICAgICAgIC1hY2Nlc3NrZXkgPT4gIm4iLCAtdGl0bGUgPT4gIkFsdC1uIn0sICJuZXh0Iik7CisJCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7ICRuZXh0X2xpbmsiOworCX0gZWxzZSB7CisJCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7IG5leHQiOworCX0KKworCWdpdF9oZWFkZXJfaHRtbCgpOworCisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGFzaCwkY297J3RyZWUnfSwkaGFzaCwgJHBhZ2luZ19uYXYpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaCk7CisJaWYgKCRwYWdlID09IDAgJiYgIUBjb21taXRsaXN0KSB7CisJCXByaW50ICI8cD5ObyBtYXRjaC48L3A+XG4iOworCX0gZWxzZSB7CisJCWdpdF9zZWFyY2hfZ3JlcF9ib2R5KFxAY29tbWl0bGlzdCwgMCwgOTksICRuZXh0X2xpbmspOworCX0KKworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3NlYXJjaF9jaGFuZ2VzIHsKKwlteSAlY28gPSBAXzsKKworCWxvY2FsICQvID0gIlxuIjsKKwlvcGVuIG15ICRmZCwgJy18JywgZ2l0X2NtZCgpLCAnLS1uby1wYWdlcicsICdsb2cnLCBAZGlmZl9vcHRzLAorCQknLS1wcmV0dHk9Zm9ybWF0OiVIJywgJy0tbm8tYWJicmV2JywgJy0tcmF3JywgIi1TJHNlYXJjaHRleHQiLAorCQkoJHNlYXJjaF91c2VfcmVnZXhwID8gJy0tcGlja2F4ZS1yZWdleCcgOiAoKSkKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1sb2cgZmFpbGVkIik7CisKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKworCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2gsJGNveyd0cmVlJ30sJGhhc2gpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaCk7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwicGlja2F4ZSBzZWFyY2hcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJdW5kZWYgJWNvOworCW15IEBmaWxlczsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQljaG9tcCAkbGluZTsKKwkJbmV4dCB1bmxlc3MgJGxpbmU7CisKKwkJbXkgJXNldCA9IHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lKCRsaW5lKTsKKwkJaWYgKGRlZmluZWQgJHNldHsnY29tbWl0J30pIHsKKwkJCSMgZmluaXNoIHByZXZpb3VzIGNvbW1pdAorCQkJaWYgKCVjbykgeworCQkJCXByaW50ICI8L3RkPlxuIiAuCisJCQkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb3snaWQnfSl9LAorCQkJCSAgICAgICAgICAgICAgImNvbW1pdCIpIC4KKwkJCQkgICAgICAiIHwgIiAuCisJCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JGNveyd0cmVlJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRjb3snaWQnfSl9LAorCQkJCSAgICAgICAgICAgICAgInRyZWUiKSAuCisJCQkJICAgICAgIjwvdGQ+XG4iIC4KKwkJCQkgICAgICAiPC90cj5cbiI7CisJCQl9CisKKwkJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCQl9IGVsc2UgeworCQkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJCX0KKwkJCSRhbHRlcm5hdGUgXj0gMTsKKwkJCSVjbyA9IHBhcnNlX2NvbW1pdCgkc2V0eydjb21taXQnfSk7CisJCQlteSAkYXV0aG9yID0gY2hvcF9hbmRfZXNjYXBlX3N0cigkY297J2F1dGhvcl9uYW1lJ30sIDE1LCA1KTsKKwkJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KKwkJCSAgICAgICI8dGQ+PGk+JGF1dGhvcjwvaT48L3RkPlxuIiAuCisJCQkgICAgICAiPHRkPiIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY297J2lkJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCJ9LAorCQkJICAgICAgICAgICAgICBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjb3sndGl0bGUnfSwgNTApIC4gIjxici8+Iik7CisJCX0gZWxzaWYgKGRlZmluZWQgJHNldHsndG9faWQnfSkgeworCQkJbmV4dCBpZiBpc19kZWxldGVkKFwlc2V0KTsKKworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaF9iYXNlPT4kY297J2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRzZXR7J3RvX2lkJ30sIGZpbGVfbmFtZT0+JHNldHsndG9fZmlsZSd9KSwKKwkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sCisJCQkgICAgICAgICAgICAgICI8c3BhbiBjbGFzcz1cIm1hdGNoXCI+IiAuIGVzY19wYXRoKCRzZXR7J2ZpbGUnfSkgLiAiPC9zcGFuPiIpIC4KKwkJCSAgICAgICI8YnIvPlxuIjsKKwkJfQorCX0KKwljbG9zZSAkZmQ7CisKKwkjIGZpbmlzaCBsYXN0IGNvbW1pdCAod2FybmluZzogcmVwZXRpdGlvbiEpCisJaWYgKCVjbykgeworCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb3snaWQnfSl9LAorCQkgICAgICAgICAgICAgICJjb21taXQiKSAuCisJCSAgICAgICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JGNveyd0cmVlJ30sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kY297J2lkJ30pfSwKKwkJICAgICAgICAgICAgICAidHJlZSIpIC4KKwkJICAgICAgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKworCXByaW50ICI8L3RhYmxlPlxuIjsKKworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3NlYXJjaF9maWxlcyB7CisJbXkgJWNvID0gQF87CisKKwlsb2NhbCAkLyA9ICJcbiI7CisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgJ2dyZXAnLCAnLW4nLCAnLXonLAorCQkkc2VhcmNoX3VzZV9yZWdleHAgPyAoJy1FJywgJy1pJykgOiAnLUYnLAorCQkkc2VhcmNodGV4dCwgJGNveyd0cmVlJ30KKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1ncmVwIGZhaWxlZCIpOworCisJZ2l0X2hlYWRlcl9odG1sKCk7CisKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoLCRjb3sndHJlZSd9LCRoYXNoKTsKKwlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGhhc2gpOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImdyZXBfc2VhcmNoXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCW15ICRtYXRjaGVzID0gMDsKKwlteSAkbGFzdGZpbGUgPSAnJzsKKwlteSAkZmlsZV9ocmVmOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCQlteSAoJGZpbGUsICRsbm8sICRsdGV4dCwgJGJpbmFyeSk7CisJCWxhc3QgaWYgKCRtYXRjaGVzKysgPiAxMDAwKTsKKwkJaWYgKCRsaW5lID1+IC9eQmluYXJ5IGZpbGUgKC4rKSBtYXRjaGVzJC8pIHsKKwkJCSRmaWxlID0gJDE7CisJCQkkYmluYXJ5ID0gMTsKKwkJfSBlbHNlIHsKKwkJCSgkZmlsZSwgJGxubywgJGx0ZXh0KSA9IHNwbGl0KC9cMC8sICRsaW5lLCAzKTsKKwkJCSRmaWxlID1+IHMvXiRjb3sndHJlZSd9Oi8vOworCQl9CisJCWlmICgkZmlsZSBuZSAkbGFzdGZpbGUpIHsKKwkJCSRsYXN0ZmlsZSBhbmQgcHJpbnQgIjwvdGQ+PC90cj5cbiI7CisJCQlpZiAoJGFsdGVybmF0ZSsrKSB7CisJCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCQl9IGVsc2UgeworCQkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJCX0KKwkJCSRmaWxlX2hyZWYgPSBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoX2Jhc2U9PiRjb3snaWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGUpOworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpc3RcIj4iLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+ICRmaWxlX2hyZWYsIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZmlsZSkpOworCQkJcHJpbnQgIjwvdGQ+PHRkPlxuIjsKKwkJCSRsYXN0ZmlsZSA9ICRmaWxlOworCQl9CisJCWlmICgkYmluYXJ5KSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cImJpbmFyeVwiPkJpbmFyeSBmaWxlPC9kaXY+XG4iOworCQl9IGVsc2UgeworCQkJJGx0ZXh0ID0gdW50YWJpZnkoJGx0ZXh0KTsKKwkJCWlmICgkbHRleHQgPX4gbS9eKC4qKSgkc2VhcmNoX3JlZ2V4cCkoLiopJC9pKSB7CisJCQkJJGx0ZXh0ID0gZXNjX2h0bWwoJDEsIC1uYnNwPT4xKTsKKwkJCQkkbHRleHQgLj0gJzxzcGFuIGNsYXNzPSJtYXRjaCI+JzsKKwkJCQkkbHRleHQgLj0gZXNjX2h0bWwoJDIsIC1uYnNwPT4xKTsKKwkJCQkkbHRleHQgLj0gJzwvc3Bhbj4nOworCQkJCSRsdGV4dCAuPSBlc2NfaHRtbCgkMywgLW5ic3A9PjEpOworCQkJfSBlbHNlIHsKKwkJCQkkbHRleHQgPSBlc2NfaHRtbCgkbHRleHQsIC1uYnNwPT4xKTsKKwkJCX0KKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwicHJlXCI+IiAuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gJGZpbGVfaHJlZi4nI2wnLiRsbm8sCisJCQkJICAgICAgICAtY2xhc3MgPT4gImxpbmVuciJ9LCBzcHJpbnRmKCclNGknLCAkbG5vKSkgLgorCQkJCScgJyAuICAkbHRleHQgLiAiPC9kaXY+XG4iOworCQl9CisJfQorCWlmICgkbGFzdGZpbGUpIHsKKwkJcHJpbnQgIjwvdGQ+PC90cj5cbiI7CisJCWlmICgkbWF0Y2hlcyA+IDEwMDApIHsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwiZGlmZiBub2RpZmZlcmVuY2VzXCI+VG9vIG1hbnkgbWF0Y2hlcywgbGlzdGluZyB0cmltbWVkPC9kaXY+XG4iOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj5ObyBtYXRjaGVzIGZvdW5kPC9kaXY+XG4iOworCX0KKwljbG9zZSAkZmQ7CisKKwlwcmludCAiPC90YWJsZT5cbiI7CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9zZWFyY2hfZ3JlcF9ib2R5IHsKKwlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRleHRyYSkgPSBAXzsKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGNvbW1pdGxpc3R9IDwgJHRvKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJjb21taXRfc2VhcmNoXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICVjbyA9ICV7JGNvbW1pdGxpc3QtPlskaV19OworCQlpZiAoISVjbykgeworCQkJbmV4dDsKKwkJfQorCQlteSAkY29tbWl0ID0gJGNveydpZCd9OworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlwcmludCAiPHRkIHRpdGxlPVwiJGNveydhZ2Vfc3RyaW5nX2FnZSd9XCI+PGk+JGNveydhZ2Vfc3RyaW5nX2RhdGUnfTwvaT48L3RkPlxuIiAuCisJCSAgICAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxNSwgNSkgLgorCQkgICAgICAiPHRkPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb3snaWQnfSksCisJCSAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCBzdWJqZWN0In0sCisJCSAgICAgICAgICAgICAgY2hvcF9hbmRfZXNjYXBlX3N0cigkY297J3RpdGxlJ30sIDUwKSAuICI8YnIvPiIpOworCQlteSAkY29tbWVudCA9ICRjb3snY29tbWVudCd9OworCQlmb3JlYWNoIG15ICRsaW5lIChAJGNvbW1lbnQpIHsKKwkJCWlmICgkbGluZSA9fiBtL14oLio/KSgkc2VhcmNoX3JlZ2V4cCkoLiopJC9pKSB7CisJCQkJbXkgKCRsZWFkLCAkbWF0Y2gsICR0cmFpbCkgPSAoJDEsICQyLCAkMyk7CisJCQkJJG1hdGNoID0gY2hvcF9zdHIoJG1hdGNoLCA3MCwgNSwgJ2NlbnRlcicpOworCQkJCW15ICRjb250ZXh0bGVuID0gaW50KCg4MCAtIGxlbmd0aCgkbWF0Y2gpKS8yKTsKKwkJCQkkY29udGV4dGxlbiA9IDMwIGlmICgkY29udGV4dGxlbiA+IDMwKTsKKwkJCQkkbGVhZCAgPSBjaG9wX3N0cigkbGVhZCwgICRjb250ZXh0bGVuLCAxMCwgJ2xlZnQnKTsKKwkJCQkkdHJhaWwgPSBjaG9wX3N0cigkdHJhaWwsICRjb250ZXh0bGVuLCAxMCwgJ3JpZ2h0Jyk7CisKKwkJCQkkbGVhZCAgPSBlc2NfaHRtbCgkbGVhZCk7CisJCQkJJG1hdGNoID0gZXNjX2h0bWwoJG1hdGNoKTsKKwkJCQkkdHJhaWwgPSBlc2NfaHRtbCgkdHJhaWwpOworCisJCQkJcHJpbnQgIiRsZWFkPHNwYW4gY2xhc3M9XCJtYXRjaFwiPiRtYXRjaDwvc3Bhbj4kdHJhaWw8YnIgLz4iOworCQkJfQorCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNveydpZCd9KX0sICJjb21taXQiKSAuCisJCSAgICAgICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGNveydpZCd9KX0sICJjb21taXRkaWZmIikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb3sndHJlZSd9LCBoYXNoX2Jhc2U9PiRjb3snaWQnfSl9LCAidHJlZSIpOworCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCWlmIChkZWZpbmVkICRleHRyYSkgeworCQlwcmludCAiPHRyPlxuIiAuCisJCSAgICAgICI8dGQgY29sc3Bhbj1cIjNcIj4kZXh0cmE8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJcHJpbnQgIjwvdGFibGU+XG4iOworfQorCisjIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIyBhY3Rpb25zCisKK3N1YiBnaXRfcHJvamVjdF9saXN0IHsKKwlteSAkb3JkZXIgPSAkaW5wdXRfcGFyYW1zeydvcmRlcid9OworCWlmIChkZWZpbmVkICRvcmRlciAmJiAkb3JkZXIgIX4gbS9ub25lfHByb2plY3R8ZGVzY3J8b3duZXJ8YWdlLykgeworCQlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biBvcmRlciBwYXJhbWV0ZXIiKTsKKwl9CisKKwlteSBAbGlzdCA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgkcHJvamVjdF9maWx0ZXIsICRzdHJpY3RfZXhwb3J0KTsKKwlpZiAoIUBsaXN0KSB7CisJCWRpZV9lcnJvcig0MDQsICJObyBwcm9qZWN0cyBmb3VuZCIpOworCX0KKworCWdpdF9oZWFkZXJfaHRtbCgpOworCWlmIChkZWZpbmVkICRob21lX3RleHQgJiYgLWYgJGhvbWVfdGV4dCkgeworCQlwcmludCAiPGRpdiBjbGFzcz1cImluZGV4X2luY2x1ZGVcIj5cbiI7CisJCWluc2VydF9maWxlKCRob21lX3RleHQpOworCQlwcmludCAiPC9kaXY+XG4iOworCX0KKworCWdpdF9wcm9qZWN0X3NlYXJjaF9mb3JtKCRzZWFyY2h0ZXh0LCAkc2VhcmNoX3VzZV9yZWdleHApOworCWdpdF9wcm9qZWN0X2xpc3RfYm9keShcQGxpc3QsICRvcmRlcik7CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfZm9ya3MgeworCW15ICRvcmRlciA9ICRpbnB1dF9wYXJhbXN7J29yZGVyJ307CisJaWYgKGRlZmluZWQgJG9yZGVyICYmICRvcmRlciAhfiBtL25vbmV8cHJvamVjdHxkZXNjcnxvd25lcnxhZ2UvKSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIG9yZGVyIHBhcmFtZXRlciIpOworCX0KKworCW15ICRmaWx0ZXIgPSAkcHJvamVjdDsKKwkkZmlsdGVyID1+IHMvXC5naXQkLy87CisJbXkgQGxpc3QgPSBnaXRfZ2V0X3Byb2plY3RzX2xpc3QoJGZpbHRlcik7CisJaWYgKCFAbGlzdCkgeworCQlkaWVfZXJyb3IoNDA0LCAiTm8gZm9ya3MgZm91bmQiKTsKKwl9CisKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzdW1tYXJ5JywgIiRwcm9qZWN0IGZvcmtzIik7CisJZ2l0X3Byb2plY3RfbGlzdF9ib2R5KFxAbGlzdCwgJG9yZGVyKTsKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9wcm9qZWN0X2luZGV4IHsKKwlteSBAcHJvamVjdHMgPSBnaXRfZ2V0X3Byb2plY3RzX2xpc3QoJHByb2plY3RfZmlsdGVyLCAkc3RyaWN0X2V4cG9ydCk7CisJaWYgKCFAcHJvamVjdHMpIHsKKwkJZGllX2Vycm9yKDQwNCwgIk5vIHByb2plY3RzIGZvdW5kIik7CisJfQorCisJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQktdHlwZSA9PiAndGV4dC9wbGFpbicsCisJCS1jaGFyc2V0ID0+ICd1dGYtOCcsCisJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSJpbmRleC5hdXgiJyk7CisKKwlmb3JlYWNoIG15ICRwciAoQHByb2plY3RzKSB7CisJCWlmICghZXhpc3RzICRwci0+eydvd25lcid9KSB7CisJCQkkcHItPnsnb3duZXInfSA9IGdpdF9nZXRfcHJvamVjdF9vd25lcigiJHByLT57J3BhdGgnfSIpOworCQl9CisKKwkJbXkgKCRwYXRoLCAkb3duZXIpID0gKCRwci0+eydwYXRoJ30sICRwci0+eydvd25lcid9KTsKKwkJIyBxdW90ZSBhcyBpbiBDR0k6OlV0aWw6OmVuY29kZSwgYnV0IGtlZXAgdGhlIHNsYXNoLCBhbmQgdXNlICcrJyBmb3IgJyAnCisJCSRwYXRoICA9fiBzLyhbXmEtekEtWjAtOV8uXC1cLyBdKS9zcHJpbnRmKCIlJSUwMlgiLCBvcmQoJDEpKS9lZzsKKwkJJG93bmVyID1+IHMvKFteYS16QS1aMC05Xy5cLVwvIF0pL3NwcmludGYoIiUlJTAyWCIsIG9yZCgkMSkpL2VnOworCQkkcGF0aCAgPX4gcy8gL1wrL2c7CisJCSRvd25lciA9fiBzLyAvXCsvZzsKKworCQlwcmludCAiJHBhdGggJG93bmVyXG4iOworCX0KK30KKworc3ViIGdpdF9zdW1tYXJ5IHsKKwlteSAkZGVzY3IgPSBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24oJHByb2plY3QpIHx8ICJub25lIjsKKwlteSAlY28gPSBwYXJzZV9jb21taXQoIkhFQUQiKTsKKwlteSAlY2QgPSAlY28gPyBwYXJzZV9kYXRlKCRjb3snY29tbWl0dGVyX2Vwb2NoJ30sICRjb3snY29tbWl0dGVyX3R6J30pIDogKCk7CisJbXkgJGhlYWQgPSAkY297J2lkJ307CisJbXkgJHJlbW90ZV9oZWFkcyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdyZW1vdGVfaGVhZHMnKTsKKworCW15ICRvd25lciA9IGdpdF9nZXRfcHJvamVjdF9vd25lcigkcHJvamVjdCk7CisKKwlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOworCSMgVGhlc2UgZ2V0XypfbGlzdCBmdW5jdGlvbnMgcmV0dXJuIG9uZSBtb3JlIHRvIGFsbG93IHVzIHRvIHNlZSBpZgorCSMgdGhlcmUgYXJlIG1vcmUgLi4uCisJbXkgQHRhZ2xpc3QgID0gZ2l0X2dldF90YWdzX2xpc3QoMTYpOworCW15IEBoZWFkbGlzdCA9IGdpdF9nZXRfaGVhZHNfbGlzdCgxNik7CisJbXkgJXJlbW90ZWRhdGEgPSAkcmVtb3RlX2hlYWRzID8gZ2l0X2dldF9yZW1vdGVzX2xpc3QoKSA6ICgpOworCW15IEBmb3JrbGlzdDsKKwlteSAkY2hlY2tfZm9ya3MgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnZm9ya3MnKTsKKworCWlmICgkY2hlY2tfZm9ya3MpIHsKKwkJIyBmaW5kIGZvcmtzIG9mIGEgcHJvamVjdAorCQlteSAkZmlsdGVyID0gJHByb2plY3Q7CisJCSRmaWx0ZXIgPX4gcy9cLmdpdCQvLzsKKwkJQGZvcmtsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCRmaWx0ZXIpOworCQkjIGZpbHRlciBvdXQgZm9ya3Mgb2YgZm9ya3MKKwkJQGZvcmtsaXN0ID0gZmlsdGVyX2ZvcmtzX2Zyb21fcHJvamVjdHNfbGlzdChcQGZvcmtsaXN0KQorCQkJaWYgKEBmb3JrbGlzdCk7CisJfQorCisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCdzdW1tYXJ5JywnJywgJGhlYWQpOworCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZVwiPiZuYnNwOzwvZGl2PlxuIjsKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwicHJvamVjdHNfbGlzdFwiPlxuIiAuCisJICAgICAgIjx0ciBpZD1cIm1ldGFkYXRhX2Rlc2NcIj48dGQ+ZGVzY3JpcHRpb248L3RkPjx0ZD4iIC4gZXNjX2h0bWwoJGRlc2NyKSAuICI8L3RkPjwvdHI+XG4iOworICAgICAgICBpZiAoJG93bmVyIGFuZCBub3QgJG9taXRfb3duZXIpIHsKKwkgICAgICAgIHByaW50ICAiPHRyIGlkPVwibWV0YWRhdGFfb3duZXJcIj48dGQ+b3duZXI8L3RkPjx0ZD4iIC4gZXNjX2h0bWwoJG93bmVyKSAuICI8L3RkPjwvdHI+XG4iOworICAgICAgICB9CisJaWYgKGRlZmluZWQgJGNkeydyZmMyODIyJ30pIHsKKwkJcHJpbnQgIjx0ciBpZD1cIm1ldGFkYXRhX2xjaGFuZ2VcIj48dGQ+bGFzdCBjaGFuZ2U8L3RkPiIgLgorCQkgICAgICAiPHRkPiIuZm9ybWF0X3RpbWVzdGFtcF9odG1sKFwlY2QpLiI8L3RkPjwvdHI+XG4iOworCX0KKworCSMgdXNlIHBlciBwcm9qZWN0IGdpdCBVUkwgbGlzdCBpbiAkcHJvamVjdHJvb3QvJHByb2plY3QvY2xvbmV1cmwKKwkjIG9yIG1ha2UgcHJvamVjdCBnaXQgVVJMIGZyb20gZ2l0IGJhc2UgVVJMIGFuZCBwcm9qZWN0IG5hbWUKKwlteSAkdXJsX3RhZyA9ICJVUkwiOworCW15IEB1cmxfbGlzdCA9IGdpdF9nZXRfcHJvamVjdF91cmxfbGlzdCgkcHJvamVjdCk7CisJQHVybF9saXN0ID0gbWFwIHsgIiRfLyRwcm9qZWN0IiB9IEBnaXRfYmFzZV91cmxfbGlzdCB1bmxlc3MgQHVybF9saXN0OworCWZvcmVhY2ggbXkgJGdpdF91cmwgKEB1cmxfbGlzdCkgeworCQluZXh0IHVubGVzcyAkZ2l0X3VybDsKKwkJcHJpbnQgZm9ybWF0X3JlcG9fdXJsKCR1cmxfdGFnLCAkZ2l0X3VybCk7CisJCSR1cmxfdGFnID0gIiI7CisJfQorCisJIyBUYWcgY2xvdWQKKwlteSAkc2hvd19jdGFncyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdjdGFncycpOworCWlmICgkc2hvd19jdGFncykgeworCQlteSAkY3RhZ3MgPSBnaXRfZ2V0X3Byb2plY3RfY3RhZ3MoJHByb2plY3QpOworCQlpZiAoJSRjdGFncykgeworCQkJIyB3aXRob3V0IGFiaWxpdHkgdG8gYWRkIHRhZ3MsIGRvbid0IHNob3cgaWYgdGhlcmUgYXJlIG5vbmUKKwkJCW15ICRjbG91ZCA9IGdpdF9wb3B1bGF0ZV9wcm9qZWN0X3RhZ2Nsb3VkKCRjdGFncyk7CisJCQlwcmludCAiPHRyIGlkPVwibWV0YWRhdGFfY3RhZ3NcIj4iIC4KKwkJCSAgICAgICI8dGQ+Y29udGVudCB0YWdzPC90ZD4iIC4KKwkJCSAgICAgICI8dGQ+Ii5naXRfc2hvd19wcm9qZWN0X3RhZ2Nsb3VkKCRjbG91ZCwgNDgpLiI8L3RkPiIgLgorCQkJICAgICAgIjwvdHI+XG4iOworCQl9CisJfQorCisJcHJpbnQgIjwvdGFibGU+XG4iOworCisJIyBJZiBYU1MgcHJldmVudGlvbiBpcyBvbiwgd2UgZG9uJ3QgaW5jbHVkZSBSRUFETUUuaHRtbC4KKwkjIFRPRE86IEFsbG93IGEgcmVhZG1lIGluIHNvbWUgc2FmZSBmb3JtYXQuCisJaWYgKCEkcHJldmVudF94c3MgJiYgLXMgIiRwcm9qZWN0cm9vdC8kcHJvamVjdC9SRUFETUUuaHRtbCIpIHsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZVwiPnJlYWRtZTwvZGl2PlxuIiAuCisJCSAgICAgICI8ZGl2IGNsYXNzPVwicmVhZG1lXCI+XG4iOworCQlpbnNlcnRfZmlsZSgiJHByb2plY3Ryb290LyRwcm9qZWN0L1JFQURNRS5odG1sIik7CisJCXByaW50ICJcbjwvZGl2PlxuIjsgIyBjbGFzcz0icmVhZG1lIgorCX0KKworCSMgd2UgbmVlZCB0byByZXF1ZXN0IG9uZSBtb3JlIHRoYW4gMTYgKDAuLjE1KSB0byBjaGVjayBpZgorCSMgdGhvc2UgMTYgYXJlIGFsbAorCW15IEBjb21taXRsaXN0ID0gJGhlYWQgPyBwYXJzZV9jb21taXRzKCRoZWFkLCAxNykgOiAoKTsKKwlpZiAoQGNvbW1pdGxpc3QpIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3Nob3J0bG9nJyk7CisJCWdpdF9zaG9ydGxvZ19ib2R5KFxAY29tbWl0bGlzdCwgMCwgMTUsICRyZWZzLAorCQkgICAgICAgICAgICAgICAgICAkI2NvbW1pdGxpc3QgPD0gIDE1ID8gdW5kZWYgOgorCQkgICAgICAgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNob3J0bG9nIil9LCAiLi4uIikpOworCX0KKworCWlmIChAdGFnbGlzdCkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdigndGFncycpOworCQlnaXRfdGFnc19ib2R5KFxAdGFnbGlzdCwgMCwgMTUsCisJCSAgICAgICAgICAgICAgJCN0YWdsaXN0IDw9ICAxNSA/IHVuZGVmIDoKKwkJICAgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRhZ3MiKX0sICIuLi4iKSk7CisJfQorCisJaWYgKEBoZWFkbGlzdCkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignaGVhZHMnKTsKKwkJZ2l0X2hlYWRzX2JvZHkoXEBoZWFkbGlzdCwgJGhlYWQsIDAsIDE1LAorCQkgICAgICAgICAgICAgICAkI2hlYWRsaXN0IDw9IDE1ID8gdW5kZWYgOgorCQkgICAgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImhlYWRzIil9LCAiLi4uIikpOworCX0KKworCWlmICglcmVtb3RlZGF0YSkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdigncmVtb3RlcycpOworCQlnaXRfcmVtb3Rlc19ib2R5KFwlcmVtb3RlZGF0YSwgMTUsICRoZWFkKTsKKwl9CisKKwlpZiAoQGZvcmtsaXN0KSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdmb3JrcycpOworCQlnaXRfcHJvamVjdF9saXN0X2JvZHkoXEBmb3JrbGlzdCwgJ2FnZScsIDAsIDE1LAorCQkgICAgICAgICAgICAgICAgICAgICAgJCNmb3JrbGlzdCA8PSAxNSA/IHVuZGVmIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iZm9ya3MiKX0sICIuLi4iKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICdub19oZWFkZXInKTsKKwl9CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF90YWcgeworCW15ICV0YWcgPSBwYXJzZV90YWcoJGhhc2gpOworCisJaWYgKCEgJXRhZykgeworCQlkaWVfZXJyb3IoNDA0LCAiVW5rbm93biB0YWcgb2JqZWN0Iik7CisJfQorCisJbXkgJGhlYWQgPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJZ2l0X2hlYWRlcl9odG1sKCk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGVhZCx1bmRlZiwkaGVhZCk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCR0YWd7J25hbWUnfSksICRoYXNoKTsKKwlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlX3RleHRcIj5cbiIgLgorCSAgICAgICI8dGFibGUgY2xhc3M9XCJvYmplY3RfaGVhZGVyXCI+XG4iIC4KKwkgICAgICAiPHRyPlxuIiAuCisJICAgICAgIjx0ZD5vYmplY3Q8L3RkPlxuIiAuCisJICAgICAgIjx0ZD4iIC4gJGNnaS0+YSh7LWNsYXNzID0+ICJsaXN0IiwgLWhyZWYgPT4gaHJlZihhY3Rpb249PiR0YWd7J3R5cGUnfSwgaGFzaD0+JHRhZ3snb2JqZWN0J30pfSwKKwkgICAgICAgICAgICAgICAgICAgICAgICR0YWd7J29iamVjdCd9KSAuICI8L3RkPlxuIiAuCisJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiR0YWd7J3R5cGUnfSwgaGFzaD0+JHRhZ3snb2JqZWN0J30pfSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWd7J3R5cGUnfSkgLiAiPC90ZD5cbiIgLgorCSAgICAgICI8L3RyPlxuIjsKKwlpZiAoZGVmaW5lZCgkdGFneydhdXRob3InfSkpIHsKKwkJZ2l0X3ByaW50X2F1dGhvcnNoaXBfcm93cyhcJXRhZywgJ2F1dGhvcicpOworCX0KKwlwcmludCAiPC90YWJsZT5cblxuIiAuCisJICAgICAgIjwvZGl2PlxuIjsKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPiI7CisJbXkgJGNvbW1lbnQgPSAkdGFneydjb21tZW50J307CisJZm9yZWFjaCBteSAkbGluZSAoQCRjb21tZW50KSB7CisJCWNob21wICRsaW5lOworCQlwcmludCBlc2NfaHRtbCgkbGluZSwgLW5ic3A9PjEpIC4gIjxici8+XG4iOworCX0KKwlwcmludCAiPC9kaXY+XG4iOworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X2JsYW1lX2NvbW1vbiB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdwb3JjZWxhaW4nOworCWlmICgkZm9ybWF0IGVxICdwb3JjZWxhaW4nICYmICRpbnB1dF9wYXJhbXN7J2phdmFzY3JpcHQnfSkgeworCQkkZm9ybWF0ID0gJ2luY3JlbWVudGFsJzsKKwkJJGFjdGlvbiA9ICdibGFtZV9pbmNyZW1lbnRhbCc7ICMgZm9yIHBhZ2UgdGl0bGUgZXRjCisJfQorCisJIyBwZXJtaXNzaW9ucworCWdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpCisJCW9yIGRpZV9lcnJvcig0MDMsICJCbGFtZSB2aWV3IG5vdCBhbGxvd2VkIik7CisKKwkjIGVycm9yIGNoZWNraW5nCisJZGllX2Vycm9yKDQwMCwgIk5vIGZpbGUgbmFtZSBnaXZlbiIpIHVubGVzcyAkZmlsZV9uYW1lOworCSRoYXNoX2Jhc2UgfHw9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlkaWVfZXJyb3IoNDA0LCAiQ291bGRuJ3QgZmluZCBiYXNlIGNvbW1pdCIpIHVubGVzcyAkaGFzaF9iYXNlOworCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaF9iYXNlKQorCQlvciBkaWVfZXJyb3IoNDA0LCAiQ29tbWl0IG5vdCBmb3VuZCIpOworCW15ICRmdHlwZSA9ICJibG9iIjsKKwlpZiAoIWRlZmluZWQgJGhhc2gpIHsKKwkJJGhhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkaGFzaF9iYXNlLCAkZmlsZV9uYW1lLCAiYmxvYiIpCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiRXJyb3IgbG9va2luZyB1cCBmaWxlIik7CisJfSBlbHNlIHsKKwkJJGZ0eXBlID0gZ2l0X2dldF90eXBlKCRoYXNoKTsKKwkJaWYgKCRmdHlwZSAhfiAiYmxvYiIpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJPYmplY3QgaXMgbm90IGEgYmxvYiIpOworCQl9CisJfQorCisJbXkgJGZkOworCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpIHsKKwkJIyBnZXQgZmlsZSBjb250ZW50cyAoYXMgYmFzZSkKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgJ2NhdC1maWxlJywgJ2Jsb2InLCAkaGFzaAorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWNhdC1maWxlIGZhaWxlZCIpOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2RhdGEnKSB7CisJCSMgcnVuIGdpdC1ibGFtZSAtLWluY3JlbWVudGFsCisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJibGFtZSIsICItLWluY3JlbWVudGFsIiwKKwkJCSRoYXNoX2Jhc2UsICItLSIsICRmaWxlX25hbWUKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1ibGFtZSAtLWluY3JlbWVudGFsIGZhaWxlZCIpOworCX0gZWxzZSB7CisJCSMgcnVuIGdpdC1ibGFtZSAtLXBvcmNlbGFpbgorCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiYmxhbWUiLCAnLXAnLAorCQkJJGhhc2hfYmFzZSwgJy0tJywgJGZpbGVfbmFtZQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWJsYW1lIC0tcG9yY2VsYWluIGZhaWxlZCIpOworCX0KKwliaW5tb2RlICRmZCwgJzp1dGY4JzsKKworCSMgaW5jcmVtZW50YWwgYmxhbWUgZGF0YSByZXR1cm5zIGVhcmx5CisJaWYgKCRmb3JtYXQgZXEgJ2RhdGEnKSB7CisJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCS10eXBlPT4idGV4dC9wbGFpbiIsIC1jaGFyc2V0ID0+ICJ1dGYtOCIsCisJCQktc3RhdHVzPT4gIjIwMCBPSyIpOworCQlsb2NhbCAkfCA9IDE7ICMgb3V0cHV0IGF1dG9mbHVzaAorCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJcHJpbnQgdG9fdXRmOCgkbGluZSk7CisJCX0KKwkJY2xvc2UgJGZkCisJCQlvciBwcmludCAiRVJST1IgJCFcbiI7CisKKwkJcHJpbnQgJ0VORCc7CisJCWlmIChkZWZpbmVkICR0MCAmJiBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgndGltZWQnKSkgeworCQkJcHJpbnQgJyAnLgorCQkJICAgICAgdHZfaW50ZXJ2YWwoJHQwLCBbIGdldHRpbWVvZmRheSgpIF0pLgorCQkJICAgICAgJyAnLiRudW1iZXJfb2ZfZ2l0X2NtZHM7CisJCX0KKwkJcHJpbnQgIlxuIjsKKworCQlyZXR1cm47CisJfQorCisJIyBwYWdlIGhlYWRlcgorCWdpdF9oZWFkZXJfaHRtbCgpOworCW15ICRmb3JtYXRzX25hdiA9CisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIC1yZXBsYXk9PjEpfSwKKwkJICAgICAgICAiYmxvYiIpIC4KKwkJIiB8ICI7CisJaWYgKCRmb3JtYXQgZXEgJ2luY3JlbWVudGFsJykgeworCQkkZm9ybWF0c19uYXYgLj0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCBqYXZhc2NyaXB0PT4wLCAtcmVwbGF5PT4xKX0sCisJCQkgICAgICAgICJibGFtZSIpIC4gIiAobm9uLWluY3JlbWVudGFsKSI7CisJfSBlbHNlIHsKKwkJJGZvcm1hdHNfbmF2IC49CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lX2luY3JlbWVudGFsIiwgLXJlcGxheT0+MSl9LAorCQkJICAgICAgICAiYmxhbWUiKSAuICIgKGluY3JlbWVudGFsKSI7CisJfQorCSRmb3JtYXRzX25hdiAuPQorCQkiIHwgIiAuCisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIC1yZXBsYXk9PjEpfSwKKwkJICAgICAgICAiaGlzdG9yeSIpIC4KKwkJIiB8ICIgLgorCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+JGFjdGlvbiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCSAgICAgICAgIkhFQUQiKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoX2Jhc2UsJGNveyd0cmVlJ30sJGhhc2hfYmFzZSwgJGZvcm1hdHNfbmF2KTsKKwlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGhhc2hfYmFzZSk7CisJZ2l0X3ByaW50X3BhZ2VfcGF0aCgkZmlsZV9uYW1lLCAkZnR5cGUsICRoYXNoX2Jhc2UpOworCisJIyBwYWdlIGJvZHkKKwlpZiAoJGZvcm1hdCBlcSAnaW5jcmVtZW50YWwnKSB7CisJCXByaW50ICI8bm9zY3JpcHQ+XG48ZGl2IGNsYXNzPVwiZXJyb3JcIj48Y2VudGVyPjxiPlxuIi4KKwkJICAgICAgIlRoaXMgcGFnZSByZXF1aXJlcyBKYXZhU2NyaXB0IHRvIHJ1bi5cbiBVc2UgIi4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PidibGFtZScsamF2YXNjcmlwdD0+MCwtcmVwbGF5PT4xKX0sCisJCSAgICAgICAgICAgICAgJ3RoaXMgcGFnZScpLgorCQkgICAgICAiIGluc3RlYWQuXG4iLgorCQkgICAgICAiPC9iPjwvY2VudGVyPjwvZGl2PlxuPC9ub3NjcmlwdD5cbiI7CisKKwkJcHJpbnQgcXEhPGRpdiBpZD0icHJvZ3Jlc3NfYmFyIiBzdHlsZT0id2lkdGg6IDEwMCU7IGJhY2tncm91bmQtY29sb3I6IHllbGxvdyI+PC9kaXY+XG4hOworCX0KKworCXByaW50IHFxITxkaXYgY2xhc3M9InBhZ2VfYm9keSI+XG4hOworCXByaW50IHFxITxkaXYgaWQ9InByb2dyZXNzX2luZm8iPi4uLiAvIC4uLjwvZGl2PlxuIQorCQlpZiAoJGZvcm1hdCBlcSAnaW5jcmVtZW50YWwnKTsKKwlwcmludCBxcSE8dGFibGUgaWQ9ImJsYW1lX3RhYmxlIiBjbGFzcz0iYmxhbWUiIHdpZHRoPSIxMDAlIj5cbiEuCisJICAgICAgI3FxITxjb2wgd2lkdGg9IjUuNWVtIiAvPjxjb2wgd2lkdGg9IjIuNWVtIiAvPjxjb2wgd2lkdGg9IioiIC8+XG4hLgorCSAgICAgIHFxITx0aGVhZD5cbiEuCisJICAgICAgcXEhPHRyPjx0aD5Db21taXQ8L3RoPjx0aD5MaW5lPC90aD48dGg+RGF0YTwvdGg+PC90cj5cbiEuCisJICAgICAgcXEhPC90aGVhZD5cbiEuCisJICAgICAgcXEhPHRib2R5PlxuITsKKworCW15IEByZXZfY29sb3IgPSBxdyhsaWdodCBkYXJrKTsKKwlteSAkbnVtX2NvbG9ycyA9IHNjYWxhcihAcmV2X2NvbG9yKTsKKwlteSAkY3VycmVudF9jb2xvciA9IDA7CisKKwlpZiAoJGZvcm1hdCBlcSAnaW5jcmVtZW50YWwnKSB7CisJCW15ICRjb2xvcl9jbGFzcyA9ICRyZXZfY29sb3JbJGN1cnJlbnRfY29sb3JdOworCisJCSNjb250ZW50cyBvZiBhIGZpbGUKKwkJbXkgJGxpbmVuciA9IDA7CisJTElORToKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJJGxpbmVucisrOworCisJCQlwcmludCBxcSE8dHIgaWQ9ImwkbGluZW5yIiBjbGFzcz0iJGNvbG9yX2NsYXNzIj4hLgorCQkJICAgICAgcXEhPHRkIGNsYXNzPSJzaGExIj48YSBocmVmPSIiPiA8L2E+PC90ZD4hLgorCQkJICAgICAgcXEhPHRkIGNsYXNzPSJsaW5lbnIiPiEuCisJCQkgICAgICBxcSE8YSBjbGFzcz0ibGluZW5yIiBocmVmPSIiPiRsaW5lbnI8L2E+PC90ZD4hOworCQkJcHJpbnQgcXEhPHRkIGNsYXNzPSJwcmUiPiEgLiBlc2NfaHRtbCgkbGluZSkgLiAiPC90ZD5cbiI7CisJCQlwcmludCBxcSE8L3RyPlxuITsKKwkJfQorCisJfSBlbHNlIHsgIyBwb3JjZWxhaW4sIGkuZS4gb3JkaW5hcnkgYmxhbWUKKwkJbXkgJW1ldGFpbmZvID0gKCk7ICMgc2F2ZXMgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0cworCisJCSMgYmxhbWUgZGF0YQorCUxJTkU6CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkbGluZTsKKwkJCSMgdGhlIGhlYWRlcjogPFNIQS0xPiA8c3JjIGxpbmVubz4gPGRzdCBsaW5lbm8+IFs8bGluZXMgaW4gZ3JvdXA+XQorCQkJIyBubyA8bGluZXMgaW4gZ3JvdXA+IGZvciBzdWJzZXF1ZW50IGxpbmVzIGluIGdyb3VwIG9mIGxpbmVzCisJCQlteSAoJGZ1bGxfcmV2LCAkb3JpZ19saW5lbm8sICRsaW5lbm8sICRncm91cF9zaXplKSA9CisJCQkgICAoJGxpbmUgPX4gL14oJG9pZF9yZWdleCkgKFxkKykgKFxkKykoPzogKFxkKykpPyQvKTsKKwkJCWlmICghZXhpc3RzICRtZXRhaW5mb3skZnVsbF9yZXZ9KSB7CisJCQkJJG1ldGFpbmZveyRmdWxsX3Jldn0gPSB7ICducHJldmlvdXMnID0+IDAgfTsKKwkJCX0KKwkJCW15ICRtZXRhID0gJG1ldGFpbmZveyRmdWxsX3Jldn07CisJCQlteSAkZGF0YTsKKwkJCXdoaWxlICgkZGF0YSA9IDwkZmQ+KSB7CisJCQkJY2hvbXAgJGRhdGE7CisJCQkJbGFzdCBpZiAoJGRhdGEgPX4gcy9eXHQvLyk7ICMgY29udGVudHMgb2YgbGluZQorCQkJCWlmICgkZGF0YSA9fiAvXihcUyspKD86ICguKikpPyQvKSB7CisJCQkJCSRtZXRhLT57JDF9ID0gJDIgdW5sZXNzIGV4aXN0cyAkbWV0YS0+eyQxfTsKKwkJCQl9CisJCQkJaWYgKCRkYXRhID1+IC9ecHJldmlvdXMgLykgeworCQkJCQkkbWV0YS0+eyducHJldmlvdXMnfSsrOworCQkJCX0KKwkJCX0KKwkJCW15ICRzaG9ydF9yZXYgPSBzdWJzdHIoJGZ1bGxfcmV2LCAwLCA4KTsKKwkJCW15ICRhdXRob3IgPSAkbWV0YS0+eydhdXRob3InfTsKKwkJCW15ICVkYXRlID0KKwkJCQlwYXJzZV9kYXRlKCRtZXRhLT57J2F1dGhvci10aW1lJ30sICRtZXRhLT57J2F1dGhvci10eid9KTsKKwkJCW15ICRkYXRlID0gJGRhdGV7J2lzby10eid9OworCQkJaWYgKCRncm91cF9zaXplKSB7CisJCQkJJGN1cnJlbnRfY29sb3IgPSAoJGN1cnJlbnRfY29sb3IgKyAxKSAlICRudW1fY29sb3JzOworCQkJfQorCQkJbXkgJHRyX2NsYXNzID0gJHJldl9jb2xvclskY3VycmVudF9jb2xvcl07CisJCQkkdHJfY2xhc3MgLj0gJyBib3VuZGFyeScgaWYgKGV4aXN0cyAkbWV0YS0+eydib3VuZGFyeSd9KTsKKwkJCSR0cl9jbGFzcyAuPSAnIG5vLXByZXZpb3VzJyBpZiAoJG1ldGEtPnsnbnByZXZpb3VzJ30gPT0gMCk7CisJCQkkdHJfY2xhc3MgLj0gJyBtdWx0aXBsZS1wcmV2aW91cycgaWYgKCRtZXRhLT57J25wcmV2aW91cyd9ID4gMSk7CisJCQlwcmludCAiPHRyIGlkPVwibCRsaW5lbm9cIiBjbGFzcz1cIiR0cl9jbGFzc1wiPlxuIjsKKwkJCWlmICgkZ3JvdXBfc2l6ZSkgeworCQkJCXByaW50ICI8dGQgY2xhc3M9XCJzaGExXCIiOworCQkJCXByaW50ICIgdGl0bGU9XCIiLiBlc2NfaHRtbCgkYXV0aG9yKSAuICIsICRkYXRlXCIiOworCQkJCXByaW50ICIgcm93c3Bhbj1cIiRncm91cF9zaXplXCIiIGlmICgkZ3JvdXBfc2l6ZSA+IDEpOworCQkJCXByaW50ICI+IjsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZnVsbF9yZXYsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwKKwkJCQkgICAgICAgICAgICAgIGVzY19odG1sKCRzaG9ydF9yZXYpKTsKKwkJCQlpZiAoJGdyb3VwX3NpemUgPj0gMikgeworCQkJCQlteSBAYXV0aG9yX2luaXRpYWxzID0gKCRhdXRob3IgPX4gL1xiKFtbOnVwcGVyOl1dKVxCL2cpOworCQkJCQlpZiAoQGF1dGhvcl9pbml0aWFscykgeworCQkJCQkJcHJpbnQgIjxiciAvPiIgLgorCQkJCQkJICAgICAgZXNjX2h0bWwoam9pbignJywgQGF1dGhvcl9pbml0aWFscykpOworCQkJCQkJIyAgICAgICAgICAgb3Igam9pbignLicsIC4uLikKKwkJCQkJfQorCQkJCX0KKwkJCQlwcmludCAiPC90ZD5cbiI7CisJCQl9CisJCQkjICdwcmV2aW91cycgPHNoYTEgb2YgcGFyZW50IGNvbW1pdD4gPGZpbGVuYW1lIGF0IGNvbW1pdD4KKwkJCWlmIChleGlzdHMgJG1ldGEtPnsncHJldmlvdXMnfSAmJgorCQkJICAgICRtZXRhLT57J3ByZXZpb3VzJ30gPX4gL14oJG9pZF9yZWdleCkgKC4qKSQvKSB7CisJCQkJJG1ldGEtPnsncGFyZW50J30gPSAkMTsKKwkJCQkkbWV0YS0+eydmaWxlX3BhcmVudCd9ID0gdW5xdW90ZSgkMik7CisJCQl9CisJCQlteSAkbGluZW5yX2NvbW1pdCA9CisJCQkJZXhpc3RzKCRtZXRhLT57J3BhcmVudCd9KSA/CisJCQkJJG1ldGEtPnsncGFyZW50J30gOiAkZnVsbF9yZXY7CisJCQlteSAkbGluZW5yX2ZpbGVuYW1lID0KKwkJCQlleGlzdHMoJG1ldGEtPnsnZmlsZV9wYXJlbnQnfSkgPworCQkJCSRtZXRhLT57J2ZpbGVfcGFyZW50J30gOiB1bnF1b3RlKCRtZXRhLT57J2ZpbGVuYW1lJ30pOworCQkJbXkgJGJsYW1lZCA9IGhyZWYoYWN0aW9uID0+ICdibGFtZScsCisJCQkgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPT4gJGxpbmVucl9maWxlbmFtZSwKKwkJCSAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZSA9PiAkbGluZW5yX2NvbW1pdCk7CisJCQlwcmludCAiPHRkIGNsYXNzPVwibGluZW5yXCI+IjsKKwkJCXByaW50ICRjZ2ktPmEoeyAtaHJlZiA9PiAiJGJsYW1lZCNsJG9yaWdfbGluZW5vIiwKKwkJCSAgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpbmVuciIgfSwKKwkJCSAgICAgICAgICAgICAgZXNjX2h0bWwoJGxpbmVubykpOworCQkJcHJpbnQgIjwvdGQ+IjsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJwcmVcIj4iIC4gZXNjX2h0bWwoJGRhdGEpIC4gIjwvdGQ+XG4iOworCQkJcHJpbnQgIjwvdHI+XG4iOworCQl9ICMgZW5kIHdoaWxlCisKKwl9CisKKwkjIGZvb3RlcgorCXByaW50ICI8L3Rib2R5PlxuIi4KKwkgICAgICAiPC90YWJsZT5cbiI7ICMgY2xhc3M9ImJsYW1lIgorCXByaW50ICI8L2Rpdj5cbiI7ICAgIyBjbGFzcz0iYmxhbWVfYm9keSIKKwljbG9zZSAkZmQKKwkJb3IgcHJpbnQgIlJlYWRpbmcgYmxvYiBmYWlsZWRcbiI7CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9ibGFtZSB7CisJZ2l0X2JsYW1lX2NvbW1vbigpOworfQorCitzdWIgZ2l0X2JsYW1lX2luY3JlbWVudGFsIHsKKwlnaXRfYmxhbWVfY29tbW9uKCdpbmNyZW1lbnRhbCcpOworfQorCitzdWIgZ2l0X2JsYW1lX2RhdGEgeworCWdpdF9ibGFtZV9jb21tb24oJ2RhdGEnKTsKK30KKworc3ViIGdpdF90YWdzIHsKKwlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoZWFkLHVuZGVmLCRoZWFkLGZvcm1hdF9yZWZfdmlld3MoJ3RhZ3MnKSk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAkcHJvamVjdCk7CisKKwlteSBAdGFnc2xpc3QgPSBnaXRfZ2V0X3RhZ3NfbGlzdCgpOworCWlmIChAdGFnc2xpc3QpIHsKKwkJZ2l0X3RhZ3NfYm9keShcQHRhZ3NsaXN0KTsKKwl9CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfaGVhZHMgeworCW15ICRoZWFkID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCWdpdF9oZWFkZXJfaHRtbCgpOworCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhlYWQsdW5kZWYsJGhlYWQsZm9ybWF0X3JlZl92aWV3cygnaGVhZHMnKSk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAkcHJvamVjdCk7CisKKwlteSBAaGVhZHNsaXN0ID0gZ2l0X2dldF9oZWFkc19saXN0KCk7CisJaWYgKEBoZWFkc2xpc3QpIHsKKwkJZ2l0X2hlYWRzX2JvZHkoXEBoZWFkc2xpc3QsICRoZWFkKTsKKwl9CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKKyMgdXNlZCBib3RoIGZvciBzaW5nbGUgcmVtb3RlIHZpZXcgYW5kIGZvciBsaXN0IG9mIGFsbCB0aGUgcmVtb3Rlcworc3ViIGdpdF9yZW1vdGVzIHsKKwlnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncmVtb3RlX2hlYWRzJykKKwkJb3IgZGllX2Vycm9yKDQwMywgIlJlbW90ZSBoZWFkcyB2aWV3IGlzIGRpc2FibGVkIik7CisKKwlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlteSAkcmVtb3RlID0gJGlucHV0X3BhcmFtc3snaGFzaCd9OworCisJbXkgJHJlbW90ZWRhdGEgPSBnaXRfZ2V0X3JlbW90ZXNfbGlzdCgkcmVtb3RlKTsKKwlkaWVfZXJyb3IoNTAwLCAiVW5hYmxlIHRvIGdldCByZW1vdGUgaW5mb3JtYXRpb24iKSB1bmxlc3MgZGVmaW5lZCAkcmVtb3RlZGF0YTsKKworCXVubGVzcyAoJSRyZW1vdGVkYXRhKSB7CisJCWRpZV9lcnJvcig0MDQsIGRlZmluZWQgJHJlbW90ZSA/CisJCQkiUmVtb3RlICRyZW1vdGUgbm90IGZvdW5kIiA6CisJCQkiTm8gcmVtb3RlcyBmb3VuZCIpOworCX0KKworCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgdW5kZWYsIC1hY3Rpb25fZXh0cmEgPT4gJHJlbW90ZSk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCAnJywgICRoZWFkLCB1bmRlZiwgJGhlYWQsCisJCWZvcm1hdF9yZWZfdmlld3MoJHJlbW90ZSA/ICcnIDogJ3JlbW90ZXMnKSk7CisKKwlmaWxsX3JlbW90ZV9oZWFkcygkcmVtb3RlZGF0YSk7CisJaWYgKGRlZmluZWQgJHJlbW90ZSkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdigncmVtb3RlcycsICIkcmVtb3RlIHJlbW90ZSBmb3IgJHByb2plY3QiKTsKKwkJZ2l0X3JlbW90ZV9ibG9jaygkcmVtb3RlLCAkcmVtb3RlZGF0YS0+eyRyZW1vdGV9LCB1bmRlZiwgJGhlYWQpOworCX0gZWxzZSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzdW1tYXJ5JywgIiRwcm9qZWN0IHJlbW90ZXMiKTsKKwkJZ2l0X3JlbW90ZXNfYm9keSgkcmVtb3RlZGF0YSwgdW5kZWYsICRoZWFkKTsKKwl9CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9ibG9iX3BsYWluIHsKKwlteSAkdHlwZSA9IHNoaWZ0OworCW15ICRleHBpcmVzOworCisJaWYgKCFkZWZpbmVkICRoYXNoKSB7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCW15ICRiYXNlID0gJGhhc2hfYmFzZSB8fCBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJCQkkaGFzaCA9IGdpdF9nZXRfaGFzaF9ieV9wYXRoKCRiYXNlLCAkZmlsZV9uYW1lLCAiYmxvYiIpCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIkNhbm5vdCBmaW5kIGZpbGUiKTsKKwkJfSBlbHNlIHsKKwkJCWRpZV9lcnJvcig0MDAsICJObyBmaWxlIG5hbWUgZGVmaW5lZCIpOworCQl9CisJfSBlbHNpZiAoJGhhc2ggPX4gbS9eJG9pZF9yZWdleCQvKSB7CisJCSMgYmxvYnMgZGVmaW5lZCBieSBub24tdGV4dHVhbCBoYXNoIGlkJ3MgY2FuIGJlIGNhY2hlZAorCQkkZXhwaXJlcyA9ICIrMWQiOworCX0KKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJjYXQtZmlsZSIsICJibG9iIiwgJGhhc2gKKwkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWNhdC1maWxlIGJsb2IgJyRoYXNoJyBmYWlsZWQiKTsKKworCSMgY29udGVudC10eXBlIChjYW4gaW5jbHVkZSBjaGFyc2V0KQorCSR0eXBlID0gYmxvYl9jb250ZW50dHlwZSgkZmQsICRmaWxlX25hbWUsICR0eXBlKTsKKworCSMgInNhdmUgYXMiIGZpbGVuYW1lLCBldmVuIHdoZW4gbm8gJGZpbGVfbmFtZSBpcyBnaXZlbgorCW15ICRzYXZlX2FzID0gIiRoYXNoIjsKKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSRzYXZlX2FzID0gJGZpbGVfbmFtZTsKKwl9IGVsc2lmICgkdHlwZSA9fiBtL150ZXh0XC8vKSB7CisJCSRzYXZlX2FzIC49ICcudHh0JzsKKwl9CisKKwkjIFdpdGggWFNTIHByZXZlbnRpb24gb24sIGJsb2JzIG9mIGFsbCB0eXBlcyBleGNlcHQgYSBmZXcga25vd24gc2FmZQorCSMgb25lcyBhcmUgc2VydmVkIHdpdGggIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQiIHRvIG1ha2Ugc3VyZQorCSMgdGhleSBkb24ndCBydW4gaW4gb3VyIHNlY3VyaXR5IGRvbWFpbi4gIEZvciBjZXJ0YWluIGltYWdlIHR5cGVzLAorCSMgYmxvYiB2aWV3IHdyaXRlcyBhbiA8aW1nPiB0YWcgcmVmZXJyaW5nIHRvIGJsb2JfcGxhaW4gdmlldywgYW5kIHdlCisJIyB3YW50IHRvIGJlIHN1cmUgbm90IHRvIGJyZWFrIHRoYXQgYnkgc2VydmluZyB0aGUgaW1hZ2UgYXMgYW4KKwkjIGF0dGFjaG1lbnQgKHRob3VnaCBGaXJlZm94IDMgZG9lc24ndCBzZWVtIHRvIGNhcmUpLgorCW15ICRzYW5kYm94ID0gJHByZXZlbnRfeHNzICYmCisJCSR0eXBlICF+IG0hXig/OnRleHQvW2Etel0rfGltYWdlLyg/OmdpZnxwbmd8anBlZykpKD86WyA7XXwkKSE7CisKKwkjIHNlcnZlIHRleHQvKiBhcyB0ZXh0L3BsYWluCisJaWYgKCRwcmV2ZW50X3hzcyAmJgorCSAgICAoJHR5cGUgPX4gbSFedGV4dC9bYS16XStcYiguKikkISB8fAorCSAgICAgKCR0eXBlID1+IG0hXlthLXpdKy9bYS16XVwreG1sXGIoLiopJCEgJiYgLVQgJGZkKSkpIHsKKwkJbXkgJHJlc3QgPSAkMTsKKwkJJHJlc3QgPSBkZWZpbmVkICRyZXN0ID8gJHJlc3QgOiAnJzsKKwkJJHR5cGUgPSAidGV4dC9wbGFpbiRyZXN0IjsKKwl9CisKKwlwcmludCAkY2dpLT5oZWFkZXIoCisJCS10eXBlID0+ICR0eXBlLAorCQktZXhwaXJlcyA9PiAkZXhwaXJlcywKKwkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4KKwkJCSgkc2FuZGJveCA/ICdhdHRhY2htZW50JyA6ICdpbmxpbmUnKQorCQkJLiAnOyBmaWxlbmFtZT0iJyAuICRzYXZlX2FzIC4gJyInKTsKKwlsb2NhbCAkLyA9IHVuZGVmOworCWJpbm1vZGUgU1RET1VULCAnOnJhdyc7CisJcHJpbnQgPCRmZD47CisJYmlubW9kZSBTVERPVVQsICc6dXRmOCc7ICMgYXMgc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgZ2l0d2ViLmNnaQorCWNsb3NlICRmZDsKK30KKworc3ViIGdpdF9ibG9iIHsKKwlteSAkZXhwaXJlczsKKworCWlmICghZGVmaW5lZCAkaGFzaCkgeworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQlteSAkYmFzZSA9ICRoYXNoX2Jhc2UgfHwgZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCQkJJGhhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkYmFzZSwgJGZpbGVfbmFtZSwgImJsb2IiKQorCQkJCW9yIGRpZV9lcnJvcig0MDQsICJDYW5ub3QgZmluZCBmaWxlIik7CisJCX0gZWxzZSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiTm8gZmlsZSBuYW1lIGRlZmluZWQiKTsKKwkJfQorCX0gZWxzaWYgKCRoYXNoID1+IG0vXiRvaWRfcmVnZXgkLykgeworCQkjIGJsb2JzIGRlZmluZWQgYnkgbm9uLXRleHR1YWwgaGFzaCBpZCdzIGNhbiBiZSBjYWNoZWQKKwkJJGV4cGlyZXMgPSAiKzFkIjsKKwl9CisKKwlteSAkaGF2ZV9ibGFtZSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdibGFtZScpOworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJjYXQtZmlsZSIsICJibG9iIiwgJGhhc2gKKwkJb3IgZGllX2Vycm9yKDUwMCwgIkNvdWxkbid0IGNhdCAkZmlsZV9uYW1lLCAkaGFzaCIpOworCW15ICRtaW1ldHlwZSA9IGJsb2JfbWltZXR5cGUoJGZkLCAkZmlsZV9uYW1lKTsKKwkjIHVzZSAnYmxvYl9wbGFpbicgKGFrYSAncmF3JykgdmlldyBmb3IgZmlsZXMgdGhhdCBjYW5ub3QgYmUgZGlzcGxheWVkCisJaWYgKCRtaW1ldHlwZSAhfiBtIV4oPzp0ZXh0L3xpbWFnZS8oPzpnaWZ8cG5nfGpwZWcpJCkhICYmIC1CICRmZCkgeworCQljbG9zZSAkZmQ7CisJCXJldHVybiBnaXRfYmxvYl9wbGFpbigkbWltZXR5cGUpOworCX0KKwkjIHdlIGNhbiBoYXZlIGJsYW1lIG9ubHkgZm9yIHRleHQvKiBtaW1ldHlwZQorCSRoYXZlX2JsYW1lICYmPSAoJG1pbWV0eXBlID1+IG0hXnRleHQvISk7CisKKwlteSAkaGlnaGxpZ2h0ID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2hpZ2hsaWdodCcpOworCW15ICRzeW50YXggPSBndWVzc19maWxlX3N5bnRheCgkaGlnaGxpZ2h0LCAkZmlsZV9uYW1lKTsKKwkkZmQgPSBydW5faGlnaGxpZ2h0ZXIoJGZkLCAkaGlnaGxpZ2h0LCAkc3ludGF4KTsKKworCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgJGV4cGlyZXMpOworCW15ICRmb3JtYXRzX25hdiA9ICcnOworCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UgJiYgKG15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaF9iYXNlKSkpIHsKKwkJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJaWYgKCRoYXZlX2JsYW1lKSB7CisJCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCAtcmVwbGF5PT4xKX0sCisJCQkJCSAgICAgICAgImJsYW1lIikgLgorCQkJCQkiIHwgIjsKKwkJCX0KKwkJCSRmb3JtYXRzX25hdiAuPQorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIC1yZXBsYXk9PjEpfSwKKwkJCQkgICAgICAgICJoaXN0b3J5IikgLgorCQkJCSIgfCAiIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCAtcmVwbGF5PT4xKX0sCisJCQkJICAgICAgICAicmF3IikgLgorCQkJCSIgfCAiIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4iSEVBRCIsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAorCQkJCSAgICAgICAgIkhFQUQiKTsKKwkJfSBlbHNlIHsKKwkJCSRmb3JtYXRzX25hdiAuPQorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIC1yZXBsYXk9PjEpfSwKKwkJCQkgICAgICAgICJyYXciKTsKKwkJfQorCQlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoX2Jhc2UsJGNveyd0cmVlJ30sJGhhc2hfYmFzZSwgJGZvcm1hdHNfbmF2KTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoX2Jhc2UpOworCX0gZWxzZSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj5cbiIgLgorCQkgICAgICAiPGJyLz48YnIvPjwvZGl2PlxuIiAuCisJCSAgICAgICI8ZGl2IGNsYXNzPVwidGl0bGVcIj4iLmVzY19odG1sKCRoYXNoKS4iPC9kaXY+XG4iOworCX0KKwlnaXRfcHJpbnRfcGFnZV9wYXRoKCRmaWxlX25hbWUsICJibG9iIiwgJGhhc2hfYmFzZSk7CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2JvZHlcIj5cbiI7CisJaWYgKCRtaW1ldHlwZSA9fiBtIV5pbWFnZS8hKSB7CisJCXByaW50IHFxITxpbWcgY2xhc3M9ImJsb2IiIHR5cGU9IiEuZXNjX2F0dHIoJG1pbWV0eXBlKS5xcSEiITsKKwkJaWYgKCRmaWxlX25hbWUpIHsKKwkJCXByaW50IHFxISBhbHQ9IiEuZXNjX2F0dHIoJGZpbGVfbmFtZSkucXEhIiB0aXRsZT0iIS5lc2NfYXR0cigkZmlsZV9uYW1lKS5xcSEiITsKKwkJfQorCQlwcmludCBxcSEgc3JjPSIhIC4KKwkJICAgICAgZXNjX2F0dHIoaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgaGFzaD0+JGhhc2gsCisJCSAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLCBmaWxlX25hbWU9PiRmaWxlX25hbWUpKSAuCisJCSAgICAgIHFxISIgLz5cbiE7CisJfSBlbHNlIHsKKwkJbXkgJG5yOworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQkkbnIrKzsKKwkJCSRsaW5lID0gdW50YWJpZnkoJGxpbmUpOworCQkJcHJpbnRmIHFxITxkaXYgY2xhc3M9InByZSI+PGEgaWQ9ImwlaSIgaHJlZj0iJXMjbCVpIiBjbGFzcz0ibGluZW5yIj4lNGk8L2E+ICVzPC9kaXY+XG4hLAorCQkJICAgICAgICRuciwgZXNjX2F0dHIoaHJlZigtcmVwbGF5ID0+IDEpKSwgJG5yLCAkbnIsCisJCQkgICAgICAgJGhpZ2hsaWdodCA/IHNhbml0aXplKCRsaW5lKSA6IGVzY19odG1sKCRsaW5lLCAtbmJzcD0+MSk7CisJCX0KKwl9CisJY2xvc2UgJGZkCisJCW9yIHByaW50ICJSZWFkaW5nIGJsb2IgZmFpbGVkLlxuIjsKKwlwcmludCAiPC9kaXY+IjsKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF90cmVlIHsKKwlpZiAoIWRlZmluZWQgJGhhc2hfYmFzZSkgeworCQkkaGFzaF9iYXNlID0gIkhFQUQiOworCX0KKwlpZiAoIWRlZmluZWQgJGhhc2gpIHsKKwkJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJJGhhc2ggPSBnaXRfZ2V0X2hhc2hfYnlfcGF0aCgkaGFzaF9iYXNlLCAkZmlsZV9uYW1lLCAidHJlZSIpOworCQl9IGVsc2UgeworCQkJJGhhc2ggPSAkaGFzaF9iYXNlOworCQl9CisJfQorCWRpZV9lcnJvcig0MDQsICJObyBzdWNoIHRyZWUiKSB1bmxlc3MgZGVmaW5lZCgkaGFzaCk7CisKKwlteSAkc2hvd19zaXplcyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdzaG93LXNpemVzJyk7CisJbXkgJGhhdmVfYmxhbWUgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnYmxhbWUnKTsKKworCW15IEBlbnRyaWVzID0gKCk7CisJeworCQlsb2NhbCAkLyA9ICJcMCI7CisJCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJscy10cmVlIiwgJy16JywKKwkJCSgkc2hvd19zaXplcyA/ICctbCcgOiAoKSksIEBleHRyYV9vcHRpb25zLCAkaGFzaAorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWxzLXRyZWUgZmFpbGVkIik7CisJCUBlbnRyaWVzID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJCWNsb3NlICRmZAorCQkJb3IgZGllX2Vycm9yKDQwNCwgIlJlYWRpbmcgdHJlZSBmYWlsZWQiKTsKKwl9CisKKwlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOworCW15ICRyZWYgPSBmb3JtYXRfcmVmX21hcmtlcigkcmVmcywgJGhhc2hfYmFzZSk7CisJZ2l0X2hlYWRlcl9odG1sKCk7CisJbXkgJGJhc2VkaXIgPSAnJzsKKwlpZiAoZGVmaW5lZCAkaGFzaF9iYXNlICYmIChteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2hfYmFzZSkpKSB7CisJCW15IEB2aWV3c19uYXYgPSAoKTsKKwkJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJcHVzaCBAdmlld3NfbmF2LAorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIC1yZXBsYXk9PjEpfSwKKwkJCQkgICAgICAgICJoaXN0b3J5IiksCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+IkhFQUQiLCBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwKKwkJCQkgICAgICAgICJIRUFEIiksCisJCX0KKwkJbXkgJHNuYXBzaG90X2xpbmtzID0gZm9ybWF0X3NuYXBzaG90X2xpbmtzKCRoYXNoKTsKKwkJaWYgKGRlZmluZWQgJHNuYXBzaG90X2xpbmtzKSB7CisJCQkjIEZJWE1FOiBTaG91bGQgYmUgYXZhaWxhYmxlIHdoZW4gd2UgaGF2ZSBubyBoYXNoIGJhc2UgYXMgd2VsbC4KKwkJCXB1c2ggQHZpZXdzX25hdiwgJHNuYXBzaG90X2xpbmtzOworCQl9CisJCWdpdF9wcmludF9wYWdlX25hdigndHJlZScsJycsICRoYXNoX2Jhc2UsIHVuZGVmLCB1bmRlZiwKKwkJICAgICAgICAgICAgICAgICAgIGpvaW4oJyB8ICcsIEB2aWV3c19uYXYpKTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAkcmVmLCAkaGFzaF9iYXNlKTsKKwl9IGVsc2UgeworCQl1bmRlZiAkaGFzaF9iYXNlOworCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfbmF2XCI+XG4iOworCQlwcmludCAiPGJyLz48YnIvPjwvZGl2PlxuIjsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZVwiPiIuZXNjX2h0bWwoJGhhc2gpLiI8L2Rpdj5cbiI7CisJfQorCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJJGJhc2VkaXIgPSAkZmlsZV9uYW1lOworCQlpZiAoJGJhc2VkaXIgbmUgJycgJiYgc3Vic3RyKCRiYXNlZGlyLCAtMSkgbmUgJy8nKSB7CisJCQkkYmFzZWRpciAuPSAnLyc7CisJCX0KKwkJZ2l0X3ByaW50X3BhZ2VfcGF0aCgkZmlsZV9uYW1lLCAndHJlZScsICRoYXNoX2Jhc2UpOworCX0KKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPlxuIjsKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwidHJlZVwiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwkjICcuLicgKHRvcCBkaXJlY3RvcnkpIGxpbmsgaWYgcG9zc2libGUKKwlpZiAoZGVmaW5lZCAkaGFzaF9iYXNlICYmCisJICAgIGRlZmluZWQgJGZpbGVfbmFtZSAmJiAkZmlsZV9uYW1lID1+IG0hW14vXSskISkgeworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCisJCW15ICR1cCA9ICRmaWxlX25hbWU7CisJCSR1cCA9fiBzIS8/W14vXSskISE7CisJCXVuZGVmICR1cCB1bmxlc3MgJHVwOworCQkjIGJhc2VkIG9uIGdpdF9wcmludF90cmVlX2VudHJ5CisJCXByaW50ICc8dGQgY2xhc3M9Im1vZGUiPicgLiBtb2RlX3N0cignMDQwMDAwJykgLiAiPC90ZD5cbiI7CisJCXByaW50ICc8dGQgY2xhc3M9InNpemUiPiZuYnNwOzwvdGQ+Jy4iXG4iIGlmICRzaG93X3NpemVzOworCQlwcmludCAnPHRkIGNsYXNzPSJsaXN0Ij4nOworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiR1cCl9LAorCQkgICAgICAgICAgICAgICIuLiIpOworCQlwcmludCAiPC90ZD5cbiI7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+PC90ZD5cbiI7CisKKwkJcHJpbnQgIjwvdHI+XG4iOworCX0KKwlmb3JlYWNoIG15ICRsaW5lIChAZW50cmllcykgeworCQlteSAldCA9IHBhcnNlX2xzX3RyZWVfbGluZSgkbGluZSwgLXogPT4gMSwgLWwgPT4gJHNob3dfc2l6ZXMpOworCisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisKKwkJZ2l0X3ByaW50X3RyZWVfZW50cnkoXCV0LCAkYmFzZWRpciwgJGhhc2hfYmFzZSwgJGhhdmVfYmxhbWUpOworCisJCXByaW50ICI8L3RyPlxuIjsKKwl9CisJcHJpbnQgIjwvdGFibGU+XG4iIC4KKwkgICAgICAiPC9kaXY+IjsKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIHNhbml0aXplX2Zvcl9maWxlbmFtZSB7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKworICAgICRuYW1lID1+IHMhLyEtIWc7CisgICAgJG5hbWUgPX4gcy9bXls6YWxudW06XV8uLV0vL2c7CisKKyAgICByZXR1cm4gJG5hbWU7Cit9CisKK3N1YiBzbmFwc2hvdF9uYW1lIHsKKwlteSAoJHByb2plY3QsICRoYXNoKSA9IEBfOworCisJIyBwYXRoL3RvL3Byb2plY3QuZ2l0ICAtPiBwcm9qZWN0CisJIyBwYXRoL3RvL3Byb2plY3QvLmdpdCAtPiBwcm9qZWN0CisJbXkgJG5hbWUgPSB0b191dGY4KCRwcm9qZWN0KTsKKwkkbmFtZSA9fiBzLChbXi9dKS8qXC5naXQkLCQxLDsKKwkkbmFtZSA9IHNhbml0aXplX2Zvcl9maWxlbmFtZShiYXNlbmFtZSgkbmFtZSkpOworCisJbXkgJHZlciA9ICRoYXNoOworCWlmICgkaGFzaCA9fiAvXlswLTlhLWZBLUZdKyQvKSB7CisJCSMgc2hvcnRlbiBTSEEtMSBoYXNoCisJCW15ICRmdWxsX2hhc2ggPSBnaXRfZ2V0X2Z1bGxfaGFzaCgkcHJvamVjdCwgJGhhc2gpOworCQlpZiAoJGZ1bGxfaGFzaCA9fiAvXiRoYXNoLyAmJiBsZW5ndGgoJGhhc2gpID4gNykgeworCQkJJHZlciA9IGdpdF9nZXRfc2hvcnRfaGFzaCgkcHJvamVjdCwgJGhhc2gpOworCQl9CisJfSBlbHNpZiAoJGhhc2ggPX4gbSFecmVmcy90YWdzLyguKikkISkgeworCQkjIHRhZ3MgZG9uJ3QgbmVlZCBzaG9ydGVuZWQgU0hBLTEgaGFzaAorCQkkdmVyID0gJDE7CisJfSBlbHNlIHsKKwkJIyBicmFuY2hlcyBhbmQgb3RoZXIgbmVlZCBzaG9ydGVuZWQgU0hBLTEgaGFzaAorCQlteSAkc3RyaXBfcmVmcyA9IGpvaW4gJ3wnLCBtYXAgeyBxdW90ZW1ldGEgfSBnZXRfYnJhbmNoX3JlZnMoKTsKKwkJaWYgKCRoYXNoID1+IG0hXnJlZnMvKCRzdHJpcF9yZWZzfHJlbW90ZXMpLyguKikkISkgeworCQkJbXkgJHJlZl9kaXIgPSAoZGVmaW5lZCAkMSkgPyAkMSA6ICcnOworCQkJJHZlciA9ICQyOworCisJCQkkcmVmX2RpciA9IHNhbml0aXplX2Zvcl9maWxlbmFtZSgkcmVmX2Rpcik7CisJCQkjIGZvciByZWZzIG5laXRoZXIgaW4gaGVhZHMgbm9yIHJlbW90ZXMgd2Ugd2FudCB0bworCQkJIyBhZGQgYSByZWYgZGlyIHRvIGFyY2hpdmUgbmFtZQorCQkJaWYgKCRyZWZfZGlyIG5lICcnIGFuZCAkcmVmX2RpciBuZSAnaGVhZHMnIGFuZCAkcmVmX2RpciBuZSAncmVtb3RlcycpIHsKKwkJCQkkdmVyID0gJHJlZl9kaXIgLiAnLScgLiAkdmVyOworCQkJfQorCQl9CisJCSR2ZXIgLj0gJy0nIC4gZ2l0X2dldF9zaG9ydF9oYXNoKCRwcm9qZWN0LCAkaGFzaCk7CisJfQorCSMgc3BlY2lhbCBjYXNlIG9mIHNhbml0aXphdGlvbiBmb3IgZmlsZW5hbWUgLSB3ZSBjaGFuZ2UKKwkjIHNsYXNoZXMgdG8gZG90cyBpbnN0ZWFkIG9mIGRhc2hlcworCSMgaW4gY2FzZSBvZiBoaWVyYXJjaGljYWwgYnJhbmNoIG5hbWVzCisJJHZlciA9fiBzIS8hLiFnOworCSR2ZXIgPX4gcy9bXls6YWxudW06XV8uLV0vL2c7CisKKwkjIG5hbWUgPSBwcm9qZWN0LXZlcnNpb25fc3RyaW5nCisJJG5hbWUgPSAiJG5hbWUtJHZlciI7CisKKwlyZXR1cm4gd2FudGFycmF5ID8gKCRuYW1lLCAkbmFtZSkgOiAkbmFtZTsKK30KKworc3ViIGV4aXRfaWZfdW5tb2RpZmllZF9zaW5jZSB7CisJbXkgKCRsYXRlc3RfZXBvY2gpID0gQF87CisJb3VyICRjZ2k7CisKKwlteSAkaWZfbW9kaWZpZWQgPSAkY2dpLT5odHRwKCdJRl9NT0RJRklFRF9TSU5DRScpOworCWlmIChkZWZpbmVkICRpZl9tb2RpZmllZCkgeworCQlteSAkc2luY2U7CisJCWlmIChldmFsIHsgcmVxdWlyZSBIVFRQOjpEYXRlOyAxOyB9KSB7CisJCQkkc2luY2UgPSBIVFRQOjpEYXRlOjpzdHIydGltZSgkaWZfbW9kaWZpZWQpOworCQl9IGVsc2lmIChldmFsIHsgcmVxdWlyZSBUaW1lOjpQYXJzZURhdGU7IDE7IH0pIHsKKwkJCSRzaW5jZSA9IFRpbWU6OlBhcnNlRGF0ZTo6cGFyc2VkYXRlKCRpZl9tb2RpZmllZCwgR01UID0+IDEpOworCQl9CisJCWlmIChkZWZpbmVkICRzaW5jZSAmJiAkbGF0ZXN0X2Vwb2NoIDw9ICRzaW5jZSkgeworCQkJbXkgJWxhdGVzdF9kYXRlID0gcGFyc2VfZGF0ZSgkbGF0ZXN0X2Vwb2NoKTsKKwkJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCQktbGFzdF9tb2RpZmllZCA9PiAkbGF0ZXN0X2RhdGV7J3JmYzI4MjInfSwKKwkJCQktc3RhdHVzID0+ICczMDQgTm90IE1vZGlmaWVkJyk7CisJCQlnb3RvIERPTkVfR0lUV0VCOworCQl9CisJfQorfQorCitzdWIgZ2l0X3NuYXBzaG90IHsKKwlteSAkZm9ybWF0ID0gJGlucHV0X3BhcmFtc3snc25hcHNob3RfZm9ybWF0J307CisJaWYgKCFAc25hcHNob3RfZm10cykgeworCQlkaWVfZXJyb3IoNDAzLCAiU25hcHNob3RzIG5vdCBhbGxvd2VkIik7CisJfQorCSMgZGVmYXVsdCB0byBmaXJzdCBzdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0CisJJGZvcm1hdCB8fD0gJHNuYXBzaG90X2ZtdHNbMF07CisJaWYgKCRmb3JtYXQgIX4gbS9eW2EtejAtOV0rJC8pIHsKKwkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgc25hcHNob3QgZm9ybWF0IHBhcmFtZXRlciIpOworCX0gZWxzaWYgKCFleGlzdHMoJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH0pKSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIHNuYXBzaG90IGZvcm1hdCIpOworCX0gZWxzaWYgKCRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydkaXNhYmxlZCd9KSB7CisJCWRpZV9lcnJvcig0MDMsICJTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiKTsKKwl9IGVsc2lmICghZ3JlcCgkXyBlcSAkZm9ybWF0LCBAc25hcHNob3RfZm10cykpIHsKKwkJZGllX2Vycm9yKDQwMywgIlVuc3VwcG9ydGVkIHNuYXBzaG90IGZvcm1hdCIpOworCX0KKworCW15ICR0eXBlID0gZ2l0X2dldF90eXBlKCIkaGFzaF57fSIpOworCWlmICghJHR5cGUpIHsKKwkJZGllX2Vycm9yKDQwNCwgJ09iamVjdCBkb2VzIG5vdCBleGlzdCcpOworCX0gIGVsc2lmICgkdHlwZSBlcSAnYmxvYicpIHsKKwkJZGllX2Vycm9yKDQwMCwgJ09iamVjdCBpcyBub3QgYSB0cmVlLWlzaCcpOworCX0KKworCW15ICgkbmFtZSwgJHByZWZpeCkgPSBzbmFwc2hvdF9uYW1lKCRwcm9qZWN0LCAkaGFzaCk7CisJbXkgJGZpbGVuYW1lID0gIiRuYW1lJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J3N1ZmZpeCd9IjsKKworCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaCk7CisJZXhpdF9pZl91bm1vZGlmaWVkX3NpbmNlKCRjb3snY29tbWl0dGVyX2Vwb2NoJ30pIGlmICVjbzsKKworCW15ICRjbWQgPSBxdW90ZV9jb21tYW5kKAorCQlnaXRfY21kKCksICdhcmNoaXZlJywKKwkJIi0tZm9ybWF0PSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydmb3JtYXQnfSIsCisJCSItLXByZWZpeD0kcHJlZml4LyIsICRoYXNoKTsKKwlpZiAoZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydjb21wcmVzc29yJ30pIHsKKwkJJGNtZCAuPSAnIHwgJyAuIHF1b3RlX2NvbW1hbmQoQHska25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnY29tcHJlc3Nvcid9fSk7CisJfQorCisJJGZpbGVuYW1lID1+IHMvKFsiXFxdKS9cXCQxL2c7CisJbXkgJWxhdGVzdF9kYXRlOworCWlmICglY28pIHsKKwkJJWxhdGVzdF9kYXRlID0gcGFyc2VfZGF0ZSgkY297J2NvbW1pdHRlcl9lcG9jaCd9LCAkY297J2NvbW1pdHRlcl90eid9KTsKKwl9CisKKwlwcmludCAkY2dpLT5oZWFkZXIoCisJCS10eXBlID0+ICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eyd0eXBlJ30sCisJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSInIC4gJGZpbGVuYW1lIC4gJyInLAorCQklY28gPyAoLWxhc3RfbW9kaWZpZWQgPT4gJGxhdGVzdF9kYXRleydyZmMyODIyJ30pIDogKCksCisJCS1zdGF0dXMgPT4gJzIwMCBPSycpOworCisJb3BlbiBteSAkZmQsICItfCIsICRjbWQKKwkJb3IgZGllX2Vycm9yKDUwMCwgIkV4ZWN1dGUgZ2l0LWFyY2hpdmUgZmFpbGVkIik7CisJYmlubW9kZSBTVERPVVQsICc6cmF3JzsKKwlwcmludCA8JGZkPjsKKwliaW5tb2RlIFNURE9VVCwgJzp1dGY4JzsgIyBhcyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBnaXR3ZWIuY2dpCisJY2xvc2UgJGZkOworfQorCitzdWIgZ2l0X2xvZ19nZW5lcmljIHsKKwlteSAoJGZtdF9uYW1lLCAkYm9keV9zdWJyLCAkYmFzZSwgJHBhcmVudCwgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCkgPSBAXzsKKworCW15ICRoZWFkID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCWlmICghZGVmaW5lZCAkYmFzZSkgeworCQkkYmFzZSA9ICRoZWFkOworCX0KKwlpZiAoIWRlZmluZWQgJHBhZ2UpIHsKKwkJJHBhZ2UgPSAwOworCX0KKwlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOworCisJbXkgJGNvbW1pdF9oYXNoID0gJGJhc2U7CisJaWYgKGRlZmluZWQgJHBhcmVudCkgeworCQkkY29tbWl0X2hhc2ggPSAiJHBhcmVudC4uJGJhc2UiOworCX0KKwlteSBAY29tbWl0bGlzdCA9CisJCXBhcnNlX2NvbW1pdHMoJGNvbW1pdF9oYXNoLCAxMDEsICgxMDAgKiAkcGFnZSksCisJCSAgICAgICAgICAgICAgZGVmaW5lZCAkZmlsZV9uYW1lID8gKCRmaWxlX25hbWUsICItLWZ1bGwtaGlzdG9yeSIpIDogKCkpOworCisJbXkgJGZ0eXBlOworCWlmICghZGVmaW5lZCAkZmlsZV9oYXNoICYmIGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkjIHNvbWUgY29tbWl0cyBjb3VsZCBoYXZlIGRlbGV0ZWQgZmlsZSBpbiBxdWVzdGlvbiwKKwkJIyBhbmQgbm90IGhhdmUgaXQgaW4gdHJlZSwgYnV0IG9uZSBvZiB0aGVtIGhhcyB0byBoYXZlIGl0CisJCWZvciAobXkgJGkgPSAwOyAkaSA8IEBjb21taXRsaXN0OyAkaSsrKSB7CisJCQkkZmlsZV9oYXNoID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGNvbW1pdGxpc3RbJGldeydpZCd9LCAkZmlsZV9uYW1lKTsKKwkJCWxhc3QgaWYgZGVmaW5lZCAkZmlsZV9oYXNoOworCQl9CisJfQorCWlmIChkZWZpbmVkICRmaWxlX2hhc2gpIHsKKwkJJGZ0eXBlID0gZ2l0X2dldF90eXBlKCRmaWxlX2hhc2gpOworCX0KKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lICYmICFkZWZpbmVkICRmdHlwZSkgeworCQlkaWVfZXJyb3IoNTAwLCAiVW5rbm93biB0eXBlIG9mIG9iamVjdCIpOworCX0KKwlteSAlY287CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQklY28gPSBwYXJzZV9jb21taXQoJGJhc2UpCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiVW5rbm93biBjb21taXQgb2JqZWN0Iik7CisJfQorCisKKwlteSAkcGFnaW5nX25hdiA9IGZvcm1hdF9wYWdpbmdfbmF2KCRmbXRfbmFtZSwgJHBhZ2UsICQjY29tbWl0bGlzdCA+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/IHBhZExlZnQobG9jYWxEYXRlLmdldFVUQ0RhdGUoKSwyLCcwJykgOiBsb2NhbERhdGUuZ2V0VVRDRGF0ZSgpKSArICcgJyArCisJCW1vbnRoc1tsb2NhbERhdGUuZ2V0VVRDTW9udGgoKV0gKyAnICcgKworCQlsb2NhbERhdGUuZ2V0VVRDRnVsbFllYXIoKTsKKwl2YXIgbG9jYWxUaW1lU3RyID0gLy8gZS5nLiAnMjE6NDk6NDYnCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ0hvdXJzKCksICAgMiwgJzAnKSArICc6JyArCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ01pbnV0ZXMoKSwgMiwgJzAnKSArICc6JyArCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ1NlY29uZHMoKSwgMiwgJzAnKTsKKworCXJldHVybiBsb2NhbERhdGVTdHIgKyAnICcgKyBsb2NhbFRpbWVTdHIgKyAnICcgKyB0aW1lem9uZUluZm87Cit9CisKKy8qIGVuZCBvZiBkYXRldGltZS5qcyAqLwpkaWZmIC0tZ2l0IGEvZ3BnLWludGVyZmFjZS5jIGIvZ3BnLWludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTI3NGQKLS0tIC9kZXYvbnVsbAorKysgYi9ncGctaW50ZXJmYWNlLmMKQEAgLTAsMCArMSw0NjggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKworc3RhdGljIGNoYXIgKmNvbmZpZ3VyZWRfc2lnbmluZ19rZXk7CitzdGF0aWMgZW51bSBzaWduYXR1cmVfdHJ1c3RfbGV2ZWwgY29uZmlndXJlZF9taW5fdHJ1c3RfbGV2ZWwgPSBUUlVTVF9VTkRFRklORUQ7CisKK3N0cnVjdCBncGdfZm9ybWF0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnByb2dyYW07CisJY29uc3QgY2hhciAqKnZlcmlmeV9hcmdzOworCWNvbnN0IGNoYXIgKipzaWdzOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5wZ3BfdmVyaWZ5X2FyZ3NbXSA9IHsKKwkiLS1rZXlpZC1mb3JtYXQ9bG9uZyIsCisJTlVMTAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICpvcGVucGdwX3NpZ3NbXSA9IHsKKwkiLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0iLAorCSItLS0tLUJFR0lOIFBHUCBNRVNTQUdFLS0tLS0iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp4NTA5X3ZlcmlmeV9hcmdzW10gPSB7CisJTlVMTAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICp4NTA5X3NpZ3NbXSA9IHsKKwkiLS0tLS1CRUdJTiBTSUdORUQgTUVTU0FHRS0tLS0tIiwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGdwZ19mb3JtYXQgZ3BnX2Zvcm1hdFtdID0geworCXsgLm5hbWUgPSAib3BlbnBncCIsIC5wcm9ncmFtID0gImdwZyIsCisJICAudmVyaWZ5X2FyZ3MgPSBvcGVucGdwX3ZlcmlmeV9hcmdzLAorCSAgLnNpZ3MgPSBvcGVucGdwX3NpZ3MKKwl9LAorCXsgLm5hbWUgPSAieDUwOSIsIC5wcm9ncmFtID0gImdwZ3NtIiwKKwkgIC52ZXJpZnlfYXJncyA9IHg1MDlfdmVyaWZ5X2FyZ3MsCisJICAuc2lncyA9IHg1MDlfc2lncworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwZ19mb3JtYXQgKnVzZV9mb3JtYXQgPSAmZ3BnX2Zvcm1hdFswXTsKKworc3RhdGljIHN0cnVjdCBncGdfZm9ybWF0ICpnZXRfZm9ybWF0X2J5X25hbWUoY29uc3QgY2hhciAqc3RyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3BnX2Zvcm1hdCk7IGkrKykKKwkJaWYgKCFzdHJjbXAoZ3BnX2Zvcm1hdFtpXS5uYW1lLCBzdHIpKQorCQkJcmV0dXJuIGdwZ19mb3JtYXQgKyBpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGdwZ19mb3JtYXQgKmdldF9mb3JtYXRfYnlfc2lnKGNvbnN0IGNoYXIgKnNpZykKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGdwZ19mb3JtYXQpOyBpKyspCisJCWZvciAoaiA9IDA7IGdwZ19mb3JtYXRbaV0uc2lnc1tqXTsgaisrKQorCQkJaWYgKHN0YXJ0c193aXRoKHNpZywgZ3BnX2Zvcm1hdFtpXS5zaWdzW2pdKSkKKwkJCQlyZXR1cm4gZ3BnX2Zvcm1hdCArIGk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgc2lnbmF0dXJlX2NoZWNrX2NsZWFyKHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpCit7CisJRlJFRV9BTkRfTlVMTChzaWdjLT5wYXlsb2FkKTsKKwlGUkVFX0FORF9OVUxMKHNpZ2MtPmdwZ19vdXRwdXQpOworCUZSRUVfQU5EX05VTEwoc2lnYy0+Z3BnX3N0YXR1cyk7CisJRlJFRV9BTkRfTlVMTChzaWdjLT5zaWduZXIpOworCUZSRUVfQU5EX05VTEwoc2lnYy0+a2V5KTsKKwlGUkVFX0FORF9OVUxMKHNpZ2MtPmZpbmdlcnByaW50KTsKKwlGUkVFX0FORF9OVUxMKHNpZ2MtPnByaW1hcnlfa2V5X2ZpbmdlcnByaW50KTsKK30KKworLyogQW4gZXhjbHVzaXZlIHN0YXR1cyAtLSBvbmx5IG9uZSBvZiB0aGVtIGNhbiBhcHBlYXIgaW4gb3V0cHV0ICovCisjZGVmaW5lIEdQR19TVEFUVVNfRVhDTFVTSVZFCSgxPDwwKQorLyogVGhlIHN0YXR1cyBpbmNsdWRlcyBrZXkgaWRlbnRpZmllciAqLworI2RlZmluZSBHUEdfU1RBVFVTX0tFWUlECSgxPDwxKQorLyogVGhlIHN0YXR1cyBpbmNsdWRlcyB1c2VyIGlkZW50aWZpZXIgKi8KKyNkZWZpbmUgR1BHX1NUQVRVU19VSUQJCSgxPDwyKQorLyogVGhlIHN0YXR1cyBpbmNsdWRlcyBrZXkgZmluZ2VycHJpbnRzICovCisjZGVmaW5lIEdQR19TVEFUVVNfRklOR0VSUFJJTlQJKDE8PDMpCisvKiBUaGUgc3RhdHVzIGluY2x1ZGVzIHRydXN0IGxldmVsICovCisjZGVmaW5lIEdQR19TVEFUVVNfVFJVU1RfTEVWRUwJKDE8PDQpCisKKy8qIFNob3J0LWhhbmQgZm9yIHN0YW5kYXJkIGV4Y2x1c2l2ZSAqU0lHIHN0YXR1cyB3aXRoIGtleWlkICYgVUlEICovCisjZGVmaW5lIEdQR19TVEFUVVNfU1REU0lHCShHUEdfU1RBVFVTX0VYQ0xVU0lWRXxHUEdfU1RBVFVTX0tFWUlEfEdQR19TVEFUVVNfVUlEKQorCitzdGF0aWMgc3RydWN0IHsKKwljaGFyIHJlc3VsdDsKKwljb25zdCBjaGFyICpjaGVjazsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9IHNpZ2NoZWNrX2dwZ19zdGF0dXNbXSA9IHsKKwl7ICdHJywgIkdPT0RTSUcgIiwgR1BHX1NUQVRVU19TVERTSUcgfSwKKwl7ICdCJywgIkJBRFNJRyAiLCBHUEdfU1RBVFVTX1NURFNJRyB9LAorCXsgJ0UnLCAiRVJSU0lHICIsIEdQR19TVEFUVVNfRVhDTFVTSVZFfEdQR19TVEFUVVNfS0VZSUQgfSwKKwl7ICdYJywgIkVYUFNJRyAiLCBHUEdfU1RBVFVTX1NURFNJRyB9LAorCXsgJ1knLCAiRVhQS0VZU0lHICIsIEdQR19TVEFUVVNfU1REU0lHIH0sCisJeyAnUicsICJSRVZLRVlTSUcgIiwgR1BHX1NUQVRVU19TVERTSUcgfSwKKwl7IDAsICJWQUxJRFNJRyAiLCBHUEdfU1RBVFVTX0ZJTkdFUlBSSU5UIH0sCisJeyAwLCAiVFJVU1RfIiwgR1BHX1NUQVRVU19UUlVTVF9MRVZFTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqa2V5OworCWVudW0gc2lnbmF0dXJlX3RydXN0X2xldmVsIHZhbHVlOworfSBzaWdjaGVja19ncGdfdHJ1c3RfbGV2ZWxbXSA9IHsKKwl7ICJVTkRFRklORUQiLCBUUlVTVF9VTkRFRklORUQgfSwKKwl7ICJORVZFUiIsIFRSVVNUX05FVkVSIH0sCisJeyAiTUFSR0lOQUwiLCBUUlVTVF9NQVJHSU5BTCB9LAorCXsgIkZVTExZIiwgVFJVU1RfRlVMTFkgfSwKKwl7ICJVTFRJTUFURSIsIFRSVVNUX1VMVElNQVRFIH0sCit9OworCitzdGF0aWMgdm9pZCByZXBsYWNlX2NzdHJpbmcoY2hhciAqKmZpZWxkLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuZXh0KQoreworCWZyZWUoKmZpZWxkKTsKKworCWlmIChsaW5lICYmIG5leHQpCisJCSpmaWVsZCA9IHhtZW1kdXB6KGxpbmUsIG5leHQgLSBsaW5lKTsKKwllbHNlCisJCSpmaWVsZCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZ3BnX3RydXN0X2xldmVsKGNvbnN0IGNoYXIgKmxldmVsLAorCQkJCSBlbnVtIHNpZ25hdHVyZV90cnVzdF9sZXZlbCAqcmVzKQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2lnY2hlY2tfZ3BnX3RydXN0X2xldmVsKTsgaSsrKSB7CisJCWlmICghc3RyY21wKHNpZ2NoZWNrX2dwZ190cnVzdF9sZXZlbFtpXS5rZXksIGxldmVsKSkgeworCQkJKnJlcyA9IHNpZ2NoZWNrX2dwZ190cnVzdF9sZXZlbFtpXS52YWx1ZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9ncGdfb3V0cHV0KHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpCit7CisJY29uc3QgY2hhciAqYnVmID0gc2lnYy0+Z3BnX3N0YXR1czsKKwljb25zdCBjaGFyICpsaW5lLCAqbmV4dDsKKwlpbnQgaSwgajsKKwlpbnQgc2Vlbl9leGNsdXNpdmVfc3RhdHVzID0gMDsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgbGluZXMgKi8KKwlmb3IgKGxpbmUgPSBidWY7ICpsaW5lOyBsaW5lID0gc3RyY2hybnVsKGxpbmUrMSwgJ1xuJykpIHsKKwkJd2hpbGUgKCpsaW5lID09ICdcbicpCisJCQlsaW5lKys7CisJCWlmICghKmxpbmUpCisJCQlicmVhazsKKworCQkvKiBTa2lwIGxpbmVzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCBHTlVQRyBzdGF0dXMgKi8KKwkJaWYgKCFza2lwX3ByZWZpeChsaW5lLCAiW0dOVVBHOl0gIiwgJmxpbmUpKQorCQkJY29udGludWU7CisKKwkJLyogSXRlcmF0ZSBvdmVyIGFsbCBzZWFyY2ggc3RyaW5ncyAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaWdjaGVja19ncGdfc3RhdHVzKTsgaSsrKSB7CisJCQlpZiAoc2tpcF9wcmVmaXgobGluZSwgc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5jaGVjaywgJmxpbmUpKSB7CisJCQkJLyoKKwkJCQkgKiBHT09EU0lHLCBCQURTSUcgZXRjLiBjYW4gb2NjdXIgb25seSBvbmNlIGZvcgorCQkJCSAqIGVhY2ggc2lnbmF0dXJlLiAgVGhlcmVmb3JlLCBpZiB3ZSBoYWQgbW9yZQorCQkJCSAqIHRoYW4gb25lIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIG11bHRpcGxlCisJCQkJICogc2lnbmF0dXJlcy4gIFdlIGRvbid0IHN1cHBvcnQgdGhlbQorCQkJCSAqIGN1cnJlbnRseSwgYW5kIHRoZXkncmUgcmF0aGVyIGhhcmQgdG8KKwkJCQkgKiBjcmVhdGUsIHNvIHNvbWV0aGluZyBpcyBsaWtlbHkgZmlzaHkgYW5kIHdlCisJCQkJICogc2hvdWxkIHJlamVjdCB0aGVtIGFsdG9nZXRoZXIuCisJCQkJICovCisJCQkJaWYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX0VYQ0xVU0lWRSkgeworCQkJCQlpZiAoc2Vlbl9leGNsdXNpdmVfc3RhdHVzKyspCisJCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKworCQkJCWlmIChzaWdjaGVja19ncGdfc3RhdHVzW2ldLnJlc3VsdCkKKwkJCQkJc2lnYy0+cmVzdWx0ID0gc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5yZXN1bHQ7CisJCQkJLyogRG8gd2UgaGF2ZSBrZXkgaW5mb3JtYXRpb24/ICovCisJCQkJaWYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX0tFWUlEKSB7CisJCQkJCW5leHQgPSBzdHJjaHJudWwobGluZSwgJyAnKTsKKwkJCQkJcmVwbGFjZV9jc3RyaW5nKCZzaWdjLT5rZXksIGxpbmUsIG5leHQpOworCQkJCQkvKiBEbyB3ZSBoYXZlIHNpZ25lciBpbmZvcm1hdGlvbj8gKi8KKwkJCQkJaWYgKCpuZXh0ICYmIChzaWdjaGVja19ncGdfc3RhdHVzW2ldLmZsYWdzICYgR1BHX1NUQVRVU19VSUQpKSB7CisJCQkJCQlsaW5lID0gbmV4dCArIDE7CisJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKCZzaWdjLT5zaWduZXIsIGxpbmUsIG5leHQpOworCQkJCQl9CisJCQkJfQorCisJCQkJLyogRG8gd2UgaGF2ZSB0cnVzdCBsZXZlbD8gKi8KKwkJCQlpZiAoc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5mbGFncyAmIEdQR19TVEFUVVNfVFJVU1RfTEVWRUwpIHsKKwkJCQkJLyoKKwkJCQkJICogR1BHIHYxIGFuZCB2MiBkaWZmZXJzIGluIGhvdyB0aGUKKwkJCQkJICogVFJVU1RfIGxpbmVzIGFyZSB3cml0dGVuLiAgU29tZQorCQkJCQkgKiB0cnVzdCBsaW5lcyBjb250YWluIG5vIGFkZGl0aW9uYWwKKwkJCQkJICogc3BhY2Utc2VwYXJhdGVkIGluZm9ybWF0aW9uIGZvciB2MS4KKwkJCQkJICovCisJCQkJCXNpemVfdCB0cnVzdF9zaXplID0gc3RyY3NwbihsaW5lLCAiIFxuIik7CisJCQkJCWNoYXIgKnRydXN0ID0geG1lbWR1cHoobGluZSwgdHJ1c3Rfc2l6ZSk7CisKKwkJCQkJaWYgKHBhcnNlX2dwZ190cnVzdF9sZXZlbCh0cnVzdCwgJnNpZ2MtPnRydXN0X2xldmVsKSkgeworCQkJCQkJZnJlZSh0cnVzdCk7CisJCQkJCQlnb3RvIGVycm9yOworCQkJCQl9CisJCQkJCWZyZWUodHJ1c3QpOworCQkJCX0KKworCQkJCS8qIERvIHdlIGhhdmUgZmluZ2VycHJpbnQ/ICovCisJCQkJaWYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX0ZJTkdFUlBSSU5UKSB7CisJCQkJCWNvbnN0IGNoYXIgKmxpbWl0OworCQkJCQljaGFyICoqZmllbGQ7CisKKwkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOworCQkJCQlyZXBsYWNlX2NzdHJpbmcoJnNpZ2MtPmZpbmdlcnByaW50LCBsaW5lLCBuZXh0KTsKKworCQkJCQkvKgorCQkJCQkgKiBTa2lwIGludGVyaW0gZmllbGRzLiAgVGhlIHNlYXJjaCBpcworCQkJCQkgKiBsaW1pdGVkIHRvIHRoZSBzYW1lIGxpbmUgc2luY2Ugb25seQorCQkJCQkgKiBPcGVuUEdQIHNpZ25hdHVyZXMgaGFzIGEgZmllbGQgd2l0aAorCQkJCQkgKiB0aGUgcHJpbWFyeSBmaW5nZXJwcmludC4KKwkJCQkJICovCisJCQkJCWxpbWl0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCQkJCQlmb3IgKGogPSA5OyBqID4gMDsgai0tKSB7CisJCQkJCQlpZiAoISpuZXh0IHx8IGxpbWl0IDw9IG5leHQpCisJCQkJCQkJYnJlYWs7CisJCQkJCQlsaW5lID0gbmV4dCArIDE7CisJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICcgJyk7CisJCQkJCX0KKworCQkJCQlmaWVsZCA9ICZzaWdjLT5wcmltYXJ5X2tleV9maW5nZXJwcmludDsKKwkJCQkJaWYgKCFqKSB7CisJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKGZpZWxkLCBsaW5lLCBuZXh0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJlcGxhY2VfY3N0cmluZyhmaWVsZCwgTlVMTCwgTlVMTCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47CisKK2Vycm9yOgorCXNpZ2MtPnJlc3VsdCA9ICdFJzsKKwkvKiBDbGVhciBwYXJ0aWFsIGRhdGEgdG8gYXZvaWQgY29uZnVzaW9uICovCisJRlJFRV9BTkRfTlVMTChzaWdjLT5wcmltYXJ5X2tleV9maW5nZXJwcmludCk7CisJRlJFRV9BTkRfTlVMTChzaWdjLT5maW5nZXJwcmludCk7CisJRlJFRV9BTkRfTlVMTChzaWdjLT5zaWduZXIpOworCUZSRUVfQU5EX05VTEwoc2lnYy0+a2V5KTsKK30KKworaW50IGNoZWNrX3NpZ25hdHVyZShjb25zdCBjaGFyICpwYXlsb2FkLCBzaXplX3QgcGxlbiwgY29uc3QgY2hhciAqc2lnbmF0dXJlLAorCXNpemVfdCBzbGVuLCBzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICpzaWdjKQoreworCXN0cnVjdCBzdHJidWYgZ3BnX291dHB1dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZ3BnX3N0YXR1cyA9IFNUUkJVRl9JTklUOworCWludCBzdGF0dXM7CisKKwlzaWdjLT5yZXN1bHQgPSAnTic7CisJc2lnYy0+dHJ1c3RfbGV2ZWwgPSAtMTsKKworCXN0YXR1cyA9IHZlcmlmeV9zaWduZWRfYnVmZmVyKHBheWxvYWQsIHBsZW4sIHNpZ25hdHVyZSwgc2xlbiwKKwkJCQkgICAgICAmZ3BnX291dHB1dCwgJmdwZ19zdGF0dXMpOworCWlmIChzdGF0dXMgJiYgIWdwZ19vdXRwdXQubGVuKQorCQlnb3RvIG91dDsKKwlzaWdjLT5wYXlsb2FkID0geG1lbWR1cHoocGF5bG9hZCwgcGxlbik7CisJc2lnYy0+Z3BnX291dHB1dCA9IHN0cmJ1Zl9kZXRhY2goJmdwZ19vdXRwdXQsIE5VTEwpOworCXNpZ2MtPmdwZ19zdGF0dXMgPSBzdHJidWZfZGV0YWNoKCZncGdfc3RhdHVzLCBOVUxMKTsKKwlwYXJzZV9ncGdfb3V0cHV0KHNpZ2MpOworCXN0YXR1cyB8PSBzaWdjLT5yZXN1bHQgIT0gJ0cnOworCXN0YXR1cyB8PSBzaWdjLT50cnVzdF9sZXZlbCA8IGNvbmZpZ3VyZWRfbWluX3RydXN0X2xldmVsOworCisgb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZncGdfc3RhdHVzKTsKKwlzdHJidWZfcmVsZWFzZSgmZ3BnX291dHB1dCk7CisKKwlyZXR1cm4gISFzdGF0dXM7Cit9CisKK3ZvaWQgcHJpbnRfc2lnbmF0dXJlX2J1ZmZlcihjb25zdCBzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICpzaWdjLCB1bnNpZ25lZCBmbGFncykKK3sKKwljb25zdCBjaGFyICpvdXRwdXQgPSBmbGFncyAmIEdQR19WRVJJRllfUkFXID8KKwkJc2lnYy0+Z3BnX3N0YXR1cyA6IHNpZ2MtPmdwZ19vdXRwdXQ7CisKKwlpZiAoZmxhZ3MgJiBHUEdfVkVSSUZZX1ZFUkJPU0UgJiYgc2lnYy0+cGF5bG9hZCkKKwkJZnB1dHMoc2lnYy0+cGF5bG9hZCwgc3Rkb3V0KTsKKworCWlmIChvdXRwdXQpCisJCWZwdXRzKG91dHB1dCwgc3RkZXJyKTsKK30KKworc2l6ZV90IHBhcnNlX3NpZ25hdHVyZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBsZW4gPSAwOworCXNpemVfdCBtYXRjaCA9IHNpemU7CisJd2hpbGUgKGxlbiA8IHNpemUpIHsKKwkJY29uc3QgY2hhciAqZW9sOworCisJCWlmIChnZXRfZm9ybWF0X2J5X3NpZyhidWYgKyBsZW4pKQorCQkJbWF0Y2ggPSBsZW47CisKKwkJZW9sID0gbWVtY2hyKGJ1ZiArIGxlbiwgJ1xuJywgc2l6ZSAtIGxlbik7CisJCWxlbiArPSBlb2wgPyBlb2wgLSAoYnVmICsgbGVuKSArIDEgOiBzaXplIC0gbGVuOworCX0KKwlyZXR1cm4gbWF0Y2g7Cit9CisKK3ZvaWQgc2V0X3NpZ25pbmdfa2V5KGNvbnN0IGNoYXIgKmtleSkKK3sKKwlmcmVlKGNvbmZpZ3VyZWRfc2lnbmluZ19rZXkpOworCWNvbmZpZ3VyZWRfc2lnbmluZ19rZXkgPSB4c3RyZHVwKGtleSk7Cit9CisKK2ludCBnaXRfZ3BnX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgZ3BnX2Zvcm1hdCAqZm10ID0gTlVMTDsKKwljaGFyICpmbXRuYW1lID0gTlVMTDsKKwljaGFyICp0cnVzdDsKKwlpbnQgcmV0OworCisJaWYgKCFzdHJjbXAodmFyLCAidXNlci5zaWduaW5na2V5IikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzZXRfc2lnbmluZ19rZXkodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJncGcuZm9ybWF0IikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlmbXQgPSBnZXRfZm9ybWF0X2J5X25hbWUodmFsdWUpOworCQlpZiAoIWZtdCkKKwkJCXJldHVybiBlcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgZm9yICVzOiAlcyIsCisJCQkJICAgICB2YXIsIHZhbHVlKTsKKwkJdXNlX2Zvcm1hdCA9IGZtdDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiZ3BnLm1pbnRydXN0bGV2ZWwiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisKKwkJdHJ1c3QgPSB4c3RyZHVwX3RvdXBwZXIodmFsdWUpOworCQlyZXQgPSBwYXJzZV9ncGdfdHJ1c3RfbGV2ZWwodHJ1c3QsICZjb25maWd1cmVkX21pbl90cnVzdF9sZXZlbCk7CisJCWZyZWUodHJ1c3QpOworCisJCWlmIChyZXQpCisJCQlyZXR1cm4gZXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGZvciAlczogJXMiLCB2YXIsCisJCQkJICAgICB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImdwZy5wcm9ncmFtIikgfHwgIXN0cmNtcCh2YXIsICJncGcub3BlbnBncC5wcm9ncmFtIikpCisJCWZtdG5hbWUgPSAib3BlbnBncCI7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJncGcueDUwOS5wcm9ncmFtIikpCisJCWZtdG5hbWUgPSAieDUwOSI7CisKKwlpZiAoZm10bmFtZSkgeworCQlmbXQgPSBnZXRfZm9ybWF0X2J5X25hbWUoZm10bmFtZSk7CisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZm10LT5wcm9ncmFtLCB2YXIsIHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqZ2V0X3NpZ25pbmdfa2V5KHZvaWQpCit7CisJaWYgKGNvbmZpZ3VyZWRfc2lnbmluZ19rZXkpCisJCXJldHVybiBjb25maWd1cmVkX3NpZ25pbmdfa2V5OworCXJldHVybiBnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfU1RSSUNUfElERU5UX05PX0RBVEUpOworfQorCitpbnQgc2lnbl9idWZmZXIoc3RydWN0IHN0cmJ1ZiAqYnVmZmVyLCBzdHJ1Y3Qgc3RyYnVmICpzaWduYXR1cmUsIGNvbnN0IGNoYXIgKnNpZ25pbmdfa2V5KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGdwZyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgcmV0OworCXNpemVfdCBpLCBqLCBib3R0b207CisJc3RydWN0IHN0cmJ1ZiBncGdfc3RhdHVzID0gU1RSQlVGX0lOSVQ7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZncGcuYXJncywKKwkJCSB1c2VfZm9ybWF0LT5wcm9ncmFtLAorCQkJICItLXN0YXR1cy1mZD0yIiwKKwkJCSAiLWJzYXUiLCBzaWduaW5nX2tleSwKKwkJCSBOVUxMKTsKKworCWJvdHRvbSA9IHNpZ25hdHVyZS0+bGVuOworCisJLyoKKwkgKiBXaGVuIHRoZSB1c2VybmFtZSBzaWduaW5na2V5IGlzIGJhZCwgcHJvZ3JhbSBjb3VsZCBiZSB0ZXJtaW5hdGVkCisJICogYmVjYXVzZSBncGcgZXhpdHMgd2l0aG91dCByZWFkaW5nIGFuZCB0aGVuIHdyaXRlIGdldHMgU0lHUElQRS4KKwkgKi8KKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCXJldCA9IHBpcGVfY29tbWFuZCgmZ3BnLCBidWZmZXItPmJ1ZiwgYnVmZmVyLT5sZW4sCisJCQkgICBzaWduYXR1cmUsIDEwMjQsICZncGdfc3RhdHVzLCAwKTsKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlyZXQgfD0gIXN0cnN0cihncGdfc3RhdHVzLmJ1ZiwgIlxuW0dOVVBHOl0gU0lHX0NSRUFURUQgIik7CisJc3RyYnVmX3JlbGVhc2UoJmdwZ19zdGF0dXMpOworCWlmIChyZXQpCisJCXJldHVybiBlcnJvcihfKCJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiKSk7CisKKwkvKiBTdHJpcCBDUiBmcm9tIHRoZSBsaW5lIGVuZGluZ3MsIGluIGNhc2Ugd2UgYXJlIG9uIFdpbmRvd3MuICovCisJZm9yIChpID0gaiA9IGJvdHRvbTsgaSA8IHNpZ25hdHVyZS0+bGVuOyBpKyspCisJCWlmIChzaWduYXR1cmUtPmJ1ZltpXSAhPSAnXHInKSB7CisJCQlpZiAoaSAhPSBqKQorCQkJCXNpZ25hdHVyZS0+YnVmW2pdID0gc2lnbmF0dXJlLT5idWZbaV07CisJCQlqKys7CisJCX0KKwlzdHJidWZfc2V0bGVuKHNpZ25hdHVyZSwgaik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZlcmlmeV9zaWduZWRfYnVmZmVyKGNvbnN0IGNoYXIgKnBheWxvYWQsIHNpemVfdCBwYXlsb2FkX3NpemUsCisJCQkgY29uc3QgY2hhciAqc2lnbmF0dXJlLCBzaXplX3Qgc2lnbmF0dXJlX3NpemUsCisJCQkgc3RydWN0IHN0cmJ1ZiAqZ3BnX291dHB1dCwgc3RydWN0IHN0cmJ1ZiAqZ3BnX3N0YXR1cykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBncGcgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IGdwZ19mb3JtYXQgKmZtdDsKKwlzdHJ1Y3QgdGVtcGZpbGUgKnRlbXA7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJdGVtcCA9IG1rc190ZW1wZmlsZV90KCIuZ2l0X3Z0YWdfdG1wWFhYWFhYIik7CisJaWYgKCF0ZW1wKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpKTsKKwlpZiAod3JpdGVfaW5fZnVsbCh0ZW1wLT5mZCwgc2lnbmF0dXJlLCBzaWduYXR1cmVfc2l6ZSkgPCAwIHx8CisJICAgIGNsb3NlX3RlbXBmaWxlX2dlbnRseSh0ZW1wKSA8IDApIHsKKwkJZXJyb3JfZXJybm8oXygiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciKSwKKwkJCSAgICB0ZW1wLT5maWxlbmFtZS5idWYpOworCQlkZWxldGVfdGVtcGZpbGUoJnRlbXApOworCQlyZXR1cm4gLTE7CisJfQorCisJZm10ID0gZ2V0X2Zvcm1hdF9ieV9zaWcoc2lnbmF0dXJlKTsKKwlpZiAoIWZtdCkKKwkJQlVHKCJiYWQgc2lnbmF0dXJlICclcyciLCBzaWduYXR1cmUpOworCisJYXJndl9hcnJheV9wdXNoKCZncGcuYXJncywgZm10LT5wcm9ncmFtKTsKKwlhcmd2X2FycmF5X3B1c2h2KCZncGcuYXJncywgZm10LT52ZXJpZnlfYXJncyk7CisJYXJndl9hcnJheV9wdXNobCgmZ3BnLmFyZ3MsCisJCQkgIi0tc3RhdHVzLWZkPTEiLAorCQkJICItLXZlcmlmeSIsIHRlbXAtPmZpbGVuYW1lLmJ1ZiwgIi0iLAorCQkJIE5VTEwpOworCisJaWYgKCFncGdfc3RhdHVzKQorCQlncGdfc3RhdHVzID0gJmJ1ZjsKKworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisJcmV0ID0gcGlwZV9jb21tYW5kKCZncGcsIHBheWxvYWQsIHBheWxvYWRfc2l6ZSwKKwkJCSAgIGdwZ19zdGF0dXMsIDAsIGdwZ19vdXRwdXQsIDApOworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCWRlbGV0ZV90ZW1wZmlsZSgmdGVtcCk7CisKKwlyZXQgfD0gIXN0cnN0cihncGdfc3RhdHVzLT5idWYsICJcbltHTlVQRzpdIEdPT0RTSUcgIik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7IC8qIG5vIG1hdHRlciBpdCB3YXMgdXNlZCBvciBub3QgKi8KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9ncGctaW50ZXJmYWNlLmggYi9ncGctaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2NTcxZQotLS0gL2Rldi9udWxsCisrKyBiL2dwZy1pbnRlcmZhY2UuaApAQCAtMCwwICsxLDc1IEBACisjaWZuZGVmIEdQR19JTlRFUkZBQ0VfSAorI2RlZmluZSBHUEdfSU5URVJGQUNFX0gKKworc3RydWN0IHN0cmJ1ZjsKKworI2RlZmluZSBHUEdfVkVSSUZZX1ZFUkJPU0UJCTEKKyNkZWZpbmUgR1BHX1ZFUklGWV9SQVcJCQkyCisjZGVmaW5lIEdQR19WRVJJRllfT01JVF9TVEFUVVMJNAorCitlbnVtIHNpZ25hdHVyZV90cnVzdF9sZXZlbCB7CisJVFJVU1RfVU5ERUZJTkVELAorCVRSVVNUX05FVkVSLAorCVRSVVNUX01BUkdJTkFMLAorCVRSVVNUX0ZVTExZLAorCVRSVVNUX1VMVElNQVRFLAorfTsKKworc3RydWN0IHNpZ25hdHVyZV9jaGVjayB7CisJY2hhciAqcGF5bG9hZDsKKwljaGFyICpncGdfb3V0cHV0OworCWNoYXIgKmdwZ19zdGF0dXM7CisKKwkvKgorCSAqIHBvc3NpYmxlICJyZXN1bHQiOgorCSAqIDAgKG5vdCBjaGVja2VkKQorCSAqIE4gKGNoZWNrZWQgYnV0IG5vIGZ1cnRoZXIgcmVzdWx0KQorCSAqIEcgKGdvb2QpCisJICogQiAoYmFkKQorCSAqLworCWNoYXIgcmVzdWx0OworCWNoYXIgKnNpZ25lcjsKKwljaGFyICprZXk7CisJY2hhciAqZmluZ2VycHJpbnQ7CisJY2hhciAqcHJpbWFyeV9rZXlfZmluZ2VycHJpbnQ7CisJZW51bSBzaWduYXR1cmVfdHJ1c3RfbGV2ZWwgdHJ1c3RfbGV2ZWw7Cit9OworCit2b2lkIHNpZ25hdHVyZV9jaGVja19jbGVhcihzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICpzaWdjKTsKKworLyoKKyAqIExvb2sgYXQgR1BHIHNpZ25lZCBjb250ZW50IChlLmcuIGEgc2lnbmVkIHRhZyBvYmplY3QpLCB3aG9zZQorICogcGF5bG9hZCBpcyBmb2xsb3dlZCBieSBhIGRldGFjaGVkIHNpZ25hdHVyZSBvbiBpdC4gIFJldHVybiB0aGUKKyAqIG9mZnNldCB3aGVyZSB0aGUgZW1iZWRkZWQgZGV0YWNoZWQgc2lnbmF0dXJlIGJlZ2lucywgb3IgdGhlIGVuZCBvZgorICogdGhlIGRhdGEgd2hlbiB0aGVyZSBpcyBubyBzdWNoIHNpZ25hdHVyZS4KKyAqLworc2l6ZV90IHBhcnNlX3NpZ25hdHVyZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKKworLyoKKyAqIENyZWF0ZSBhIGRldGFjaGVkIHNpZ25hdHVyZSBmb3IgdGhlIGNvbnRlbnRzIG9mICJidWZmZXIiIGFuZCBhcHBlbmQKKyAqIGl0IGFmdGVyICJzaWduYXR1cmUiOyAiYnVmZmVyIiBhbmQgInNpZ25hdHVyZSIgY2FuIGJlIHRoZSBzYW1lCisgKiBzdHJidWYgaW5zdGFuY2UsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBkZXRhY2hlZCBzaWduYXR1cmUgYXBwZW5kZWQKKyAqIGF0IHRoZSBlbmQuCisgKi8KK2ludCBzaWduX2J1ZmZlcihzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSwKKwkJY29uc3QgY2hhciAqc2lnbmluZ19rZXkpOworCisvKgorICogUnVuICJncGciIHRvIHNlZSBpZiB0aGUgcGF5bG9hZCBtYXRjaGVzIHRoZSBkZXRhY2hlZCBzaWduYXR1cmUuCisgKiBncGdfb3V0cHV0LCB3aGVuIHNldCwgcmVjZWl2ZXMgdGhlIGRpYWdub3N0aWMgb3V0cHV0IGZyb20gR1BHLgorICogZ3BnX3N0YXR1cywgd2hlbiBzZXQsIHJlY2VpdmVzIHRoZSBzdGF0dXMgb3V0cHV0IGZyb20gR1BHLgorICovCitpbnQgdmVyaWZ5X3NpZ25lZF9idWZmZXIoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfc2l6ZSwKKwkJCSBjb25zdCBjaGFyICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICpncGdfb3V0cHV0LCBzdHJ1Y3Qgc3RyYnVmICpncGdfc3RhdHVzKTsKKworaW50IGdpdF9ncGdfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOwordm9pZCBzZXRfc2lnbmluZ19rZXkoY29uc3QgY2hhciAqKTsKK2NvbnN0IGNoYXIgKmdldF9zaWduaW5nX2tleSh2b2lkKTsKK2ludCBjaGVja19zaWduYXR1cmUoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBsZW4sCisJCSAgICBjb25zdCBjaGFyICpzaWduYXR1cmUsIHNpemVfdCBzbGVuLAorCQkgICAgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYyk7Cit2b2lkIHByaW50X3NpZ25hdHVyZV9idWZmZXIoY29uc3Qgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYywKKwkJCSAgICB1bnNpZ25lZCBmbGFncyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3JhcGguYyBiL2dyYXBoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiMjVhZAotLS0gL2Rldi9udWxsCisrKyBiL2dyYXBoLmMKQEAgLTAsMCArMSwxNTM2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKKy8qIEludGVybmFsIEFQSSAqLworCisvKgorICogT3V0cHV0IGEgcGFkZGluZyBsaW5lIGluIHRoZSBncmFwaC4KKyAqIFRoaXMgaXMgc2ltaWxhciB0byBncmFwaF9uZXh0X2xpbmUoKS4gIEhvd2V2ZXIsIGl0IGlzIGd1YXJhbnRlZWQgdG8KKyAqIG5ldmVyIHByaW50IHRoZSBjdXJyZW50IGNvbW1pdCBsaW5lLiAgSW5zdGVhZCwgaWYgdGhlIGNvbW1pdCBsaW5lIGlzCisgKiBuZXh0LCBpdCB3aWxsIHNpbXBseSBvdXRwdXQgYSBsaW5lIG9mIHZlcnRpY2FsIHBhZGRpbmcsIGV4dGVuZGluZyB0aGUKKyAqIGJyYW5jaCBsaW5lcyBkb3dud2FyZHMsIGJ1dCBsZWF2aW5nIHRoZW0gb3RoZXJ3aXNlIHVuY2hhbmdlZC4KKyAqLworc3RhdGljIHZvaWQgZ3JhcGhfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qCisgKiBQcmludCBhIHN0cmJ1Zi4gIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgYWxsIGxpbmVzIGJ1dCB0aGUgZmlyc3Qgd2lsbCBiZQorICogcHJlZml4ZWQgd2l0aCB0aGUgZ3JhcGggb3V0cHV0LgorICoKKyAqIElmIHRoZSBzdHJidWYgZW5kcyB3aXRoIGEgbmV3bGluZSwgdGhlIG91dHB1dCB3aWxsIGVuZCBhZnRlciB0aGlzCisgKiBuZXdsaW5lLiAgQSBuZXcgZ3JhcGggbGluZSB3aWxsIG5vdCBiZSBwcmludGVkIGFmdGVyIHRoZSBmaW5hbCBuZXdsaW5lLgorICogSWYgdGhlIHN0cmJ1ZiBpcyBlbXB0eSwgbm8gb3V0cHV0IHdpbGwgYmUgcHJpbnRlZC4KKyAqCisgKiBTaW5jZSB0aGUgZmlyc3QgbGluZSB3aWxsIG5vdCBpbmNsdWRlIHRoZSBncmFwaCBvdXRwdXQsIHRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBwcmludGluZyB0aGlzIGxpbmUncyBncmFwaCAocGVyaGFwcyB2aWEKKyAqIGdyYXBoX3Nob3dfY29tbWl0KCkgb3IgZ3JhcGhfc2hvd19vbmVsaW5lKCkpIGJlZm9yZSBjYWxsaW5nCisgKiBncmFwaF9zaG93X3N0cmJ1ZigpLgorICoKKyAqIE5vdGUgdGhhdCB1bmxpa2Ugc29tZSBvdGhlciBncmFwaCBkaXNwbGF5IGZ1bmN0aW9ucywgeW91IG11c3QgcGFzcyB0aGUgZmlsZQorICogaGFuZGxlIGRpcmVjdGx5LiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBmaWxlIGhhbmRsZSBhcyB0aGUKKyAqIGZpbGUgc3BlY2lmaWVkIGJ5IHRoZSBncmFwaCBkaWZmIG9wdGlvbnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHRoYXQKKyAqIGdyYXBoX3Nob3dfc3RyYnVmIGNhbiBiZSBjYWxsZWQgZXZlbiB3aXRoIGEgTlVMTCBncmFwaC4KKyAqIElmIGEgTlVMTCBncmFwaCBpcyBzdXBwbGllZCwgdGhlIHN0cmJ1ZiBpcyBwcmludGVkIGFzLWlzLgorICovCitzdGF0aWMgdm9pZCBncmFwaF9zaG93X3N0cmJ1ZihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCSAgICAgIEZJTEUgKmZpbGUsCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYik7CisKKy8qCisgKiBUT0RPOgorICogLSBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMsIHNpbWlsYXIgdG8gdGhlIHdheSBnaXRrIGRvZXMuCisgKiAgIElmIHdlIHJlYWNoIG1vcmUgdGhhbiBhIHNwZWNpZmllZCBudW1iZXIgb2YgY29sdW1ucywgb21pdAorICogICBzZWN0aW9ucyBvZiBzb21lIGNvbHVtbnMuCisgKi8KKworc3RydWN0IGNvbHVtbiB7CisJLyoKKwkgKiBUaGUgcGFyZW50IGNvbW1pdCBvZiB0aGlzIGNvbHVtbi4KKwkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJLyoKKwkgKiBUaGUgY29sb3IgdG8gKG9wdGlvbmFsbHkpIHByaW50IHRoaXMgY29sdW1uIGluLiAgVGhpcyBpcyBhbgorCSAqIGluZGV4IGludG8gY29sdW1uX2NvbG9ycy4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb2xvcjsKK307CisKK2VudW0gZ3JhcGhfc3RhdGUgeworCUdSQVBIX1BBRERJTkcsCisJR1JBUEhfU0tJUCwKKwlHUkFQSF9QUkVfQ09NTUlULAorCUdSQVBIX0NPTU1JVCwKKwlHUkFQSF9QT1NUX01FUkdFLAorCUdSQVBIX0NPTExBUFNJTkcKK307CisKK3N0YXRpYyB2b2lkIGdyYXBoX3Nob3dfbGluZV9wcmVmaXgoY29uc3Qgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKK3sKKwlpZiAoIWRpZmZvcHQgfHwgIWRpZmZvcHQtPmxpbmVfcHJlZml4KQorCQlyZXR1cm47CisKKwlmd3JpdGUoZGlmZm9wdC0+bGluZV9wcmVmaXgsCisJICAgICAgIHNpemVvZihjaGFyKSwKKwkgICAgICAgZGlmZm9wdC0+bGluZV9wcmVmaXhfbGVuZ3RoLAorCSAgICAgICBkaWZmb3B0LT5maWxlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKipjb2x1bW5fY29sb3JzOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbHVtbl9jb2xvcnNfbWF4OworCitzdGF0aWMgdm9pZCBwYXJzZV9ncmFwaF9jb2xvcnNfY29uZmlnKHN0cnVjdCBhcmd2X2FycmF5ICpjb2xvcnMsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwljb25zdCBjaGFyICplbmQsICpzdGFydDsKKworCXN0YXJ0ID0gc3RyaW5nOworCWVuZCA9IHN0cmluZyArIHN0cmxlbihzdHJpbmcpOworCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQljb25zdCBjaGFyICpjb21tYSA9IHN0cmNocm51bChzdGFydCwgJywnKTsKKwkJY2hhciBjb2xvcltDT0xPUl9NQVhMRU5dOworCisJCWlmICghY29sb3JfcGFyc2VfbWVtKHN0YXJ0LCBjb21tYSAtIHN0YXJ0LCBjb2xvcikpCisJCQlhcmd2X2FycmF5X3B1c2goY29sb3JzLCBjb2xvcik7CisJCWVsc2UKKwkJCXdhcm5pbmcoXygiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIpLAorCQkJCShpbnQpKGNvbW1hIC0gc3RhcnQpLCBzdGFydCk7CisJCXN0YXJ0ID0gY29tbWEgKyAxOworCX0KKwlhcmd2X2FycmF5X3B1c2goY29sb3JzLCBHSVRfQ09MT1JfUkVTRVQpOworfQorCit2b2lkIGdyYXBoX3NldF9jb2x1bW5fY29sb3JzKGNvbnN0IGNoYXIgKipjb2xvcnMsIHVuc2lnbmVkIHNob3J0IGNvbG9yc19tYXgpCit7CisJY29sdW1uX2NvbG9ycyA9IGNvbG9yczsKKwljb2x1bW5fY29sb3JzX21heCA9IGNvbG9yc19tYXg7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb2x1bW5fZ2V0X2NvbG9yX2NvZGUodW5zaWduZWQgc2hvcnQgY29sb3IpCit7CisJcmV0dXJuIGNvbHVtbl9jb2xvcnNbY29sb3JdOworfQorCitzdHJ1Y3QgZ3JhcGhfbGluZSB7CisJc3RydWN0IHN0cmJ1ZiAqYnVmOworCXNpemVfdCB3aWR0aDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFwaF9saW5lX2FkZGNoKHN0cnVjdCBncmFwaF9saW5lICpsaW5lLCBpbnQgYykKK3sKKwlzdHJidWZfYWRkY2gobGluZS0+YnVmLCBjKTsKKwlsaW5lLT53aWR0aCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JhcGhfbGluZV9hZGRjaGFycyhzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgaW50IGMsIHNpemVfdCBuKQoreworCXN0cmJ1Zl9hZGRjaGFycyhsaW5lLT5idWYsIGMsIG4pOworCWxpbmUtPndpZHRoICs9IG47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmFwaF9saW5lX2FkZHN0cihzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgY29uc3QgY2hhciAqcykKK3sKKwlzdHJidWZfYWRkc3RyKGxpbmUtPmJ1Ziwgcyk7CisJbGluZS0+d2lkdGggKz0gc3RybGVuKHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JhcGhfbGluZV9hZGRjb2xvcihzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgdW5zaWduZWQgc2hvcnQgY29sb3IpCit7CisJc3RyYnVmX2FkZHN0cihsaW5lLT5idWYsIGNvbHVtbl9nZXRfY29sb3JfY29kZShjb2xvcikpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9saW5lX3dyaXRlX2NvbHVtbihzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGNvbHVtbiAqYywKKwkJCQkgICAgY2hhciBjb2xfY2hhcikKK3sKKwlpZiAoYy0+Y29sb3IgPCBjb2x1bW5fY29sb3JzX21heCkKKwkJZ3JhcGhfbGluZV9hZGRjb2xvcihsaW5lLCBjLT5jb2xvcik7CisJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCBjb2xfY2hhcik7CisJaWYgKGMtPmNvbG9yIDwgY29sdW1uX2NvbG9yc19tYXgpCisJCWdyYXBoX2xpbmVfYWRkY29sb3IobGluZSwgY29sdW1uX2NvbG9yc19tYXgpOworfQorCitzdHJ1Y3QgZ2l0X2dyYXBoIHsKKwkvKgorCSAqIFRoZSBjb21taXQgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZAorCSAqLworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkvKiBUaGUgcmV2LWluZm8gdXNlZCBmb3IgdGhlIGN1cnJlbnQgdHJhdmVyc2FsICovCisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCS8qCisJICogVGhlIG51bWJlciBvZiBpbnRlcmVzdGluZyBwYXJlbnRzIHRoYXQgdGhpcyBjb21taXQgaGFzLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHBhcmVudHMuCisJICogVGhpcyBjb3VudCBleGNsdWRlcyBwYXJlbnRzIHRoYXQgd29uJ3QgYmUgcHJpbnRlZCBpbiB0aGUgZ3JhcGgKKwkgKiBvdXRwdXQsIGFzIGRldGVybWluZWQgYnkgZ3JhcGhfaXNfaW50ZXJlc3RpbmcoKS4KKwkgKi8KKwlpbnQgbnVtX3BhcmVudHM7CisJLyoKKwkgKiBUaGUgd2lkdGggb2YgdGhlIGdyYXBoIG91dHB1dCBmb3IgdGhpcyBjb21taXQuCisJICogQWxsIHJvd3MgZm9yIHRoaXMgY29tbWl0IGFyZSBwYWRkZWQgdG8gdGhpcyB3aWR0aCwgc28gdGhhdAorCSAqIG1lc3NhZ2VzIHByaW50ZWQgYWZ0ZXIgdGhlIGdyYXBoIG91dHB1dCBhcmUgYWxpZ25lZC4KKwkgKi8KKwlpbnQgd2lkdGg7CisJLyoKKwkgKiBUaGUgbmV4dCBleHBhbnNpb24gcm93IHRvIHByaW50CisJICogd2hlbiBzdGF0ZSBpcyBHUkFQSF9QUkVfQ09NTUlUCisJICovCisJaW50IGV4cGFuc2lvbl9yb3c7CisJLyoKKwkgKiBUaGUgY3VycmVudCBvdXRwdXQgc3RhdGUuCisJICogVGhpcyB0ZWxscyB1cyB3aGF0IGtpbmQgb2YgbGluZSBncmFwaF9uZXh0X2xpbmUoKSBzaG91bGQgb3V0cHV0LgorCSAqLworCWVudW0gZ3JhcGhfc3RhdGUgc3RhdGU7CisJLyoKKwkgKiBUaGUgb3V0cHV0IHN0YXRlIGZvciB0aGUgcHJldmlvdXMgbGluZSBvZiBvdXRwdXQuCisJICogVGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byBkZXRlcm1pbmUgaG93IHRoZSBmaXJzdCBtZXJnZSBsaW5lCisJICogc2hvdWxkIGFwcGVhciwgYmFzZWQgb24gdGhlIGxhc3QgbGluZSBvZiB0aGUgcHJldmlvdXMgY29tbWl0LgorCSAqLworCWVudW0gZ3JhcGhfc3RhdGUgcHJldl9zdGF0ZTsKKwkvKgorCSAqIFRoZSBpbmRleCBvZiB0aGUgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoaXMgY29tbWl0LgorCSAqCisJICogSWYgbm9uZSBvZiB0aGUgaW5jb21pbmcgY29sdW1ucyByZWZlciB0byB0aGlzIGNvbW1pdCwKKwkgKiB0aGlzIHdpbGwgYmUgZXF1YWwgdG8gbnVtX2NvbHVtbnMuCisJICovCisJaW50IGNvbW1pdF9pbmRleDsKKwkvKgorCSAqIFRoZSBjb21taXRfaW5kZXggZm9yIHRoZSBwcmV2aW91c2x5IGRpc3BsYXllZCBjb21taXQuCisJICoKKwkgKiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZmlyc3QgbGluZSBvZiBhIG1lcmdlCisJICogZ3JhcGggb3V0cHV0IHNob3VsZCBhcHBlYXIsIGJhc2VkIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlCisJICogcHJldmlvdXMgY29tbWl0LgorCSAqLworCWludCBwcmV2X2NvbW1pdF9pbmRleDsKKwkvKgorCSAqIFdoaWNoIGxheW91dCB2YXJpYW50IHRvIHVzZSB0byBkaXNwbGF5IG1lcmdlIGNvbW1pdHMuIElmIHRoZQorCSAqIGNvbW1pdCdzIGZpcnN0IHBhcmVudCBpcyBrbm93biB0byBiZSBpbiBhIGNvbHVtbiB0byB0aGUgbGVmdCBvZiB0aGUKKwkgKiBtZXJnZSwgdGhlbiB0aGlzIHZhbHVlIGlzIDAgYW5kIHdlIHVzZSB0aGUgbGF5b3V0IG9uIHRoZSBsZWZ0LgorCSAqIE90aGVyd2lzZSwgdGhlIHZhbHVlIGlzIDEgYW5kIHRoZSBsYXlvdXQgb24gdGhlIHJpZ2h0IGlzIHVzZWQuIFRoaXMKKwkgKiBmaWVsZCB0ZWxscyB1cyBob3cgbWFueSBjb2x1bW5zIHRoZSBmaXJzdCBwYXJlbnQgb2NjdXBpZXMuCisJICoKKwkgKiAJCTApCQkJMSkKKwkgKgorCSAqIAkJfCB8IHwgKi0uCQl8IHwgKi0tLS4KKwkgKiAJCXwgfF98L3xcIFwJCXwgfCB8XCBcIFwKKwkgKiAJCXwvfCB8IHwgfCB8CQl8IHwgfCB8IHwgKgorCSAqLworCWludCBtZXJnZV9sYXlvdXQ7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgYWRkZWQgdG8gdGhlIGdyYXBoIGJ5IHRoZSBjdXJyZW50IGNvbW1pdC4gRm9yCisJICogMi13YXkgYW5kIG9jdG9wdXMgbWVyZ2VzLCB0aGlzIGlzIHVzdWFsbHkgb25lIGxlc3MgdGhhbiB0aGUKKwkgKiBudW1iZXIgb2YgcGFyZW50czoKKwkgKgorCSAqIAkJfCB8IHwJCQl8IHwgICAgXAorCSAqCQl8ICogfAkJCXwgKi0tLS4gXAorCSAqCQl8IHxcIFwJCQl8IHxcIFwgXCBcCisJICoJCXwgfCB8IHwgICAgICAgICAJfCB8IHwgfCB8IHwKKwkgKgorCSAqCQludW1fcGFyZW50czogMgkJbnVtX3BhcmVudHM6IDQKKwkgKgkJZWRnZXNfYWRkZWQ6IDEJCWVkZ2VzX2FkZGVkOiAzCisJICoKKwkgKiBGb3IgbGVmdC1za2V3ZWQgbWVyZ2VzLCB0aGUgZmlyc3QgcGFyZW50IGZ1c2VzIHdpdGggaXRzIG5laWdoYm9yIGFuZAorCSAqIHNvIG9uZSBsZXNzIGNvbHVtbiBpcyBhZGRlZDoKKwkgKgorCSAqCQl8IHwgfAkJCXwgfCAgXAorCSAqCQl8ICogfAkJCXwgKi0uIFwKKwkgKgkJfC98IHwJCQl8L3xcIFwgXAorCSAqCQl8IHwgfAkJCXwgfCB8IHwgfAorCSAqCisJICoJCW51bV9wYXJlbnRzOiAyCQludW1fcGFyZW50czogNAorCSAqCQllZGdlc19hZGRlZDogMAkJZWRnZXNfYWRkZWQ6IDIKKwkgKgorCSAqIFRoaXMgbnVtYmVyIGRldGVybWluZXMgaG93IGVkZ2VzIHRvIHRoZSByaWdodCBvZiB0aGUgbWVyZ2UgYXJlCisJICogZGlzcGxheWVkIGluIGNvbW1pdCBhbmQgcG9zdC1tZXJnZSBsaW5lczsgaWYgbm8gY29sdW1ucyBoYXZlIGJlZW4KKwkgKiBhZGRlZCB0aGVuIGEgdmVydGljYWwgbGluZSBzaG91bGQgYmUgdXNlZCB3aGVyZSBhIHJpZ2h0LXRyYWNraW5nCisJICogbGluZSB3b3VsZCBvdGhlcndpc2UgYmUgdXNlZC4KKwkgKgorCSAqCQl8ICogXAkJCXwgKiB8CisJICoJCXwgfFwgXAkJCXwvfCB8CisJICoJCXwgfCAqIFwJCQl8ICogfAorCSAqLworCWludCBlZGdlc19hZGRlZDsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBhZGRlZCBieSB0aGUgcHJldmlvdXMgY29tbWl0LCB3aGljaCBpcyB1c2VkIHRvCisJICogc21vb3RoIGVkZ2VzIGFwcGVhcmluZyB0byB0aGUgcmlnaHQgb2YgYSBjb21taXQgaW4gYSBjb21taXQgbGluZQorCSAqIGZvbGxvd2luZyBhIHBvc3QtbWVyZ2UgbGluZS4KKwkgKi8KKwlpbnQgcHJldl9lZGdlc19hZGRlZDsKKwkvKgorCSAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgY29sdW1ucworCSAqIGFuZCBuZXdfY29sdW1ucyBhcnJheXMuICBUaGlzIGlzIGFsc28gaGFsZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMKKwkgKiB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIG1hcHBpbmcgYW5kIG9sZF9tYXBwaW5nIGFycmF5cy4KKwkgKi8KKwlpbnQgY29sdW1uX2NhcGFjaXR5OworCS8qCisJICogVGhlIG51bWJlciBvZiBjb2x1bW5zIChhbHNvIGNhbGxlZCAiYnJhbmNoIGxpbmVzIiBpbiBzb21lIHBsYWNlcykKKwkgKi8KKwlpbnQgbnVtX2NvbHVtbnM7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG5ld19jb2x1bW5zIGFycmF5CisJICovCisJaW50IG51bV9uZXdfY29sdW1uczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbWFwcGluZyBhcnJheQorCSAqLworCWludCBtYXBwaW5nX3NpemU7CisJLyoKKwkgKiBUaGUgY29sdW1uIHN0YXRlIGJlZm9yZSB3ZSBvdXRwdXQgdGhlIGN1cnJlbnQgY29tbWl0LgorCSAqLworCXN0cnVjdCBjb2x1bW4gKmNvbHVtbnM7CisJLyoKKwkgKiBUaGUgbmV3IGNvbHVtbiBzdGF0ZSBhZnRlciB3ZSBvdXRwdXQgdGhlIGN1cnJlbnQgY29tbWl0LgorCSAqIE9ubHkgdmFsaWQgd2hlbiBzdGF0ZSBpcyBHUkFQSF9DT0xMQVBTSU5HLgorCSAqLworCXN0cnVjdCBjb2x1bW4gKm5ld19jb2x1bW5zOworCS8qCisJICogQW4gYXJyYXkgdGhhdCB0cmFja3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgZWFjaAorCSAqIGNoYXJhY3RlciBpbiB0aGUgb3V0cHV0IGxpbmUgZHVyaW5nIHN0YXRlIEdSQVBIX0NPTExBUFNJTkcuCisJICogRWFjaCBlbnRyeSBpcyAtMSBpZiB0aGlzIGNoYXJhY3RlciBpcyBlbXB0eSwgb3IgYSBub24tbmVnYXRpdmUKKwkgKiBpbnRlZ2VyIGlmIHRoZSBjaGFyYWN0ZXIgY29udGFpbnMgYSBicmFuY2ggbGluZS4gIFRoZSB2YWx1ZSBvZgorCSAqIHRoZSBpbnRlZ2VyIGluZGljYXRlcyB0aGUgdGFyZ2V0IHBvc2l0aW9uIGZvciB0aGlzIGJyYW5jaCBsaW5lLgorCSAqIChJLmUuLCB0aGlzIGFycmF5IG1hcHMgdGhlIGN1cnJlbnQgY29sdW1uIHBvc2l0aW9ucyB0byB0aGVpcgorCSAqIGRlc2lyZWQgcG9zaXRpb25zLikKKwkgKgorCSAqIFRoZSBtYXhpbXVtIGNhcGFjaXR5IG9mIHRoaXMgYXJyYXkgaXMgYWx3YXlzCisJICogc2l6ZW9mKGludCkgKiAyICogY29sdW1uX2NhcGFjaXR5LgorCSAqLworCWludCAqbWFwcGluZzsKKwkvKgorCSAqIEEgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIG1hcHBpbmcgYXJyYXkgZnJvbSB0aGUgbGFzdCBjb21taXQsCisJICogd2hpY2ggd2UgdXNlIHRvIGltcHJvdmUgdGhlIGRpc3BsYXkgb2YgY29sdW1ucyB0aGF0IGFyZSB0cmFja2luZworCSAqIGZyb20gcmlnaHQgdG8gbGVmdCB0aHJvdWdoIGEgY29tbWl0IGxpbmUuICBXZSBhbHNvIHVzZSB0aGlzIHRvCisJICogYXZvaWQgYWxsb2NhdGluZyBhIGZyZXNoIGFycmF5IHdoZW4gd2UgY29tcHV0ZSB0aGUgbmV4dCBtYXBwaW5nLgorCSAqLworCWludCAqb2xkX21hcHBpbmc7CisJLyoKKwkgKiBUaGUgY3VycmVudCBkZWZhdWx0IGNvbHVtbiBjb2xvciBiZWluZyB1c2VkLiAgVGhpcyBpcworCSAqIHN0b3JlZCBhcyBhbiBpbmRleCBpbnRvIHRoZSBhcnJheSBjb2x1bW5fY29sb3JzLgorCSAqLworCXVuc2lnbmVkIHNob3J0IGRlZmF1bHRfY29sdW1uX2NvbG9yOworfTsKKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmRpZmZfb3V0cHV0X3ByZWZpeF9jYWxsYmFjayhzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGggPSBkYXRhOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCisJYXNzZXJ0KG9wdCk7CisKKwlzdHJidWZfcmVzZXQoJm1zZ2J1Zik7CisJaWYgKG9wdC0+bGluZV9wcmVmaXgpCisJCXN0cmJ1Zl9hZGQoJm1zZ2J1Ziwgb3B0LT5saW5lX3ByZWZpeCwKKwkJCSAgIG9wdC0+bGluZV9wcmVmaXhfbGVuZ3RoKTsKKwlpZiAoZ3JhcGgpCisJCWdyYXBoX3BhZGRpbmdfbGluZShncmFwaCwgJm1zZ2J1Zik7CisJcmV0dXJuICZtc2didWY7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkZWZhdWx0X2RpZmZvcHQ7CisKK3ZvaWQgZ3JhcGhfc2V0dXBfbGluZV9wcmVmaXgoc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKK3sKKwlkZWZhdWx0X2RpZmZvcHQgPSBkaWZmb3B0OworCisJLyogc2V0dXAgYW4gb3V0cHV0IHByZWZpeCBjYWxsYmFjayBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoZGlmZm9wdCAmJiAhZGlmZm9wdC0+b3V0cHV0X3ByZWZpeCkKKwkJZGlmZm9wdC0+b3V0cHV0X3ByZWZpeCA9IGRpZmZfb3V0cHV0X3ByZWZpeF9jYWxsYmFjazsKK30KKworCitzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaF9pbml0KHN0cnVjdCByZXZfaW5mbyAqb3B0KQoreworCXN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGdpdF9ncmFwaCkpOworCisJaWYgKCFjb2x1bW5fY29sb3JzKSB7CisJCWNoYXIgKnN0cmluZzsKKwkJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZygibG9nLmdyYXBoY29sb3JzIiwgJnN0cmluZykpIHsKKwkJCS8qIG5vdCBjb25maWd1cmVkIC0tIHVzZSBkZWZhdWx0ICovCisJCQlncmFwaF9zZXRfY29sdW1uX2NvbG9ycyhjb2x1bW5fY29sb3JzX2Fuc2ksCisJCQkJCQljb2x1bW5fY29sb3JzX2Fuc2lfbWF4KTsKKwkJfSBlbHNlIHsKKwkJCXN0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBjdXN0b21fY29sb3JzID0gQVJHVl9BUlJBWV9JTklUOworCQkJYXJndl9hcnJheV9jbGVhcigmY3VzdG9tX2NvbG9ycyk7CisJCQlwYXJzZV9ncmFwaF9jb2xvcnNfY29uZmlnKCZjdXN0b21fY29sb3JzLCBzdHJpbmcpOworCQkJZnJlZShzdHJpbmcpOworCQkJLyogZ3JhcGhfc2V0X2NvbHVtbl9jb2xvcnMgdGFrZXMgYSBtYXgtaW5kZXgsIG5vdCBhIGNvdW50ICovCisJCQlncmFwaF9zZXRfY29sdW1uX2NvbG9ycyhjdXN0b21fY29sb3JzLmFyZ3YsCisJCQkJCQljdXN0b21fY29sb3JzLmFyZ2MgLSAxKTsKKwkJfQorCX0KKworCWdyYXBoLT5jb21taXQgPSBOVUxMOworCWdyYXBoLT5yZXZzID0gb3B0OworCWdyYXBoLT5udW1fcGFyZW50cyA9IDA7CisJZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPSAwOworCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1BBRERJTkc7CisJZ3JhcGgtPnByZXZfc3RhdGUgPSBHUkFQSF9QQURESU5HOworCWdyYXBoLT5jb21taXRfaW5kZXggPSAwOworCWdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA9IDA7CisJZ3JhcGgtPm1lcmdlX2xheW91dCA9IDA7CisJZ3JhcGgtPmVkZ2VzX2FkZGVkID0gMDsKKwlncmFwaC0+cHJldl9lZGdlc19hZGRlZCA9IDA7CisJZ3JhcGgtPm51bV9jb2x1bW5zID0gMDsKKwlncmFwaC0+bnVtX25ld19jb2x1bW5zID0gMDsKKwlncmFwaC0+bWFwcGluZ19zaXplID0gMDsKKwkvKgorCSAqIFN0YXJ0IHRoZSBjb2x1bW4gY29sb3IgYXQgdGhlIG1heGltdW0gdmFsdWUsIHNpbmNlIHdlJ2xsCisJICogYWx3YXlzIGluY3JlbWVudCBpdCBmb3IgdGhlIGZpcnN0IGNvbW1pdCB3ZSBvdXRwdXQuCisJICogVGhpcyB3YXkgd2Ugc3RhcnQgYXQgMCBmb3IgdGhlIGZpcnN0IGNvbW1pdC4KKwkgKi8KKwlncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3IgPSBjb2x1bW5fY29sb3JzX21heCAtIDE7CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgcmVhc29uYWJseSBsYXJnZSBkZWZhdWx0IG51bWJlciBvZiBjb2x1bW5zCisJICogV2UnbGwgYXV0b21hdGljYWxseSBncm93IGNvbHVtbnMgbGF0ZXIgaWYgd2UgbmVlZCBtb3JlIHJvb20uCisJICovCisJZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSA9IDMwOworCUFMTE9DX0FSUkFZKGdyYXBoLT5jb2x1bW5zLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlBTExPQ19BUlJBWShncmFwaC0+bmV3X2NvbHVtbnMsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCUFMTE9DX0FSUkFZKGdyYXBoLT5tYXBwaW5nLCAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJQUxMT0NfQVJSQVkoZ3JhcGgtPm9sZF9tYXBwaW5nLCAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisKKwkvKgorCSAqIFRoZSBkaWZmIG91dHB1dCBwcmVmaXggY2FsbGJhY2ssIHdpdGggdGhpcyB3ZSBjYW4gbWFrZQorCSAqIGFsbCB0aGUgZGlmZiBvdXRwdXQgdG8gYWxpZ24gd2l0aCB0aGUgZ3JhcGggbGluZXMuCisJICovCisJb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXggPSBkaWZmX291dHB1dF9wcmVmaXhfY2FsbGJhY2s7CisJb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXhfZGF0YSA9IGdyYXBoOworCisJcmV0dXJuIGdyYXBoOworfQorCitzdGF0aWMgdm9pZCBncmFwaF91cGRhdGVfc3RhdGUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIGVudW0gZ3JhcGhfc3RhdGUgcykKK3sKKwlncmFwaC0+cHJldl9zdGF0ZSA9IGdyYXBoLT5zdGF0ZTsKKwlncmFwaC0+c3RhdGUgPSBzOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9lbnN1cmVfY2FwYWNpdHkoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIGludCBudW1fY29sdW1ucykKK3sKKwlpZiAoZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSA+PSBudW1fY29sdW1ucykKKwkJcmV0dXJuOworCisJZG8geworCQlncmFwaC0+Y29sdW1uX2NhcGFjaXR5ICo9IDI7CisJfSB3aGlsZSAoZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSA8IG51bV9jb2x1bW5zKTsKKworCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPmNvbHVtbnMsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPm5ld19jb2x1bW5zLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlSRUFMTE9DX0FSUkFZKGdyYXBoLT5tYXBwaW5nLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5ICogMik7CisJUkVBTExPQ19BUlJBWShncmFwaC0+b2xkX21hcHBpbmcsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgKiAyKTsKK30KKworLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgY29tbWl0IHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgZ3JhcGggb3V0cHV0LAorICogYW5kIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGdyYXBoX2lzX2ludGVyZXN0aW5nKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJLyoKKwkgKiBJZiByZXZzLT5ib3VuZGFyeSBpcyBzZXQsIGNvbW1pdHMgd2hvc2UgY2hpbGRyZW4gaGF2ZQorCSAqIGJlZW4gc2hvd24gYXJlIGFsd2F5cyBpbnRlcmVzdGluZywgZXZlbiBpZiB0aGV5IGhhdmUgdGhlCisJICogVU5JTlRFUkVTVElORyBvciBUUkVFU0FNRSBmbGFncyBzZXQuCisJICovCisJaWYgKGdyYXBoLT5yZXZzICYmIGdyYXBoLT5yZXZzLT5ib3VuZGFyeSkgeworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDSElMRF9TSE9XTikKKwkJCXJldHVybiAxOworCX0KKworCS8qCisJICogT3RoZXJ3aXNlLCB1c2UgZ2V0X2NvbW1pdF9hY3Rpb24oKSB0byBzZWUgaWYgdGhpcyBjb21taXQgaXMKKwkgKiBpbnRlcmVzdGluZworCSAqLworCXJldHVybiBnZXRfY29tbWl0X2FjdGlvbihncmFwaC0+cmV2cywgY29tbWl0KSA9PSBjb21taXRfc2hvdzsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKm9yaWcpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCisJLyoKKwkgKiBJZiByZXZzLT5maXJzdF9wYXJlbnRfb25seSBpcyBzZXQsIG9ubHkgdGhlIGZpcnN0CisJICogcGFyZW50IGlzIGludGVyZXN0aW5nLiAgTm9uZSBvZiB0aGUgb3RoZXJzIGFyZS4KKwkgKi8KKwlpZiAoZ3JhcGgtPnJldnMtPmZpcnN0X3BhcmVudF9vbmx5KQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogUmV0dXJuIHRoZSBuZXh0IGludGVyZXN0aW5nIGNvbW1pdCBhZnRlciBvcmlnCisJICovCisJZm9yIChsaXN0ID0gb3JpZy0+bmV4dDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJaWYgKGdyYXBoX2lzX2ludGVyZXN0aW5nKGdyYXBoLCBsaXN0LT5pdGVtKSkKKwkJCXJldHVybiBsaXN0OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpmaXJzdF9pbnRlcmVzdGluZ19wYXJlbnQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gZ3JhcGgtPmNvbW1pdC0+cGFyZW50czsKKworCS8qCisJICogSWYgdGhpcyBjb21taXQgaGFzIG5vIHBhcmVudHMsIGlnbm9yZSBpdAorCSAqLworCWlmICghcGFyZW50cykKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIElmIHRoZSBmaXJzdCBwYXJlbnQgaXMgaW50ZXJlc3RpbmcsIHJldHVybiBpdAorCSAqLworCWlmIChncmFwaF9pc19pbnRlcmVzdGluZyhncmFwaCwgcGFyZW50cy0+aXRlbSkpCisJCXJldHVybiBwYXJlbnRzOworCisJLyoKKwkgKiBPdGhlcndpc2UsIGNhbGwgbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoKSB0byBnZXQKKwkgKiB0aGUgbmV4dCBpbnRlcmVzdGluZyBwYXJlbnQKKwkgKi8KKwlyZXR1cm4gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ3JhcGhfZ2V0X2N1cnJlbnRfY29sdW1uX2NvbG9yKGNvbnN0IHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWlmICghd2FudF9jb2xvcihncmFwaC0+cmV2cy0+ZGlmZm9wdC51c2VfY29sb3IpKQorCQlyZXR1cm4gY29sdW1uX2NvbG9yc19tYXg7CisJcmV0dXJuIGdyYXBoLT5kZWZhdWx0X2NvbHVtbl9jb2xvcjsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgZ3JhcGgncyBkZWZhdWx0IGNvbHVtbiBjb2xvci4KKyAqLworc3RhdGljIHZvaWQgZ3JhcGhfaW5jcmVtZW50X2NvbHVtbl9jb2xvcihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3IgPSAoZ3JhcGgtPmRlZmF1bHRfY29sdW1uX2NvbG9yICsgMSkgJQorCQljb2x1bW5fY29sb3JzX21heDsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGdyYXBoX2ZpbmRfY29tbWl0X2NvbG9yKGNvbnN0IHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCWlmIChncmFwaC0+Y29sdW1uc1tpXS5jb21taXQgPT0gY29tbWl0KQorCQkJcmV0dXJuIGdyYXBoLT5jb2x1bW5zW2ldLmNvbG9yOworCX0KKwlyZXR1cm4gZ3JhcGhfZ2V0X2N1cnJlbnRfY29sdW1uX2NvbG9yKGdyYXBoKTsKK30KKworc3RhdGljIGludCBncmFwaF9maW5kX25ld19jb2x1bW5fYnlfY29tbWl0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7IGkrKykgeworCQlpZiAoZ3JhcGgtPm5ld19jb2x1bW5zW2ldLmNvbW1pdCA9PSBjb21taXQpCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCSAgaW50IGlkeCkKK3sKKwlpbnQgaSA9IGdyYXBoX2ZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoZ3JhcGgsIGNvbW1pdCk7CisJaW50IG1hcHBpbmdfaWR4OworCisJLyoKKwkgKiBJZiB0aGUgY29tbWl0IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBuZXdfY29sdW1ucyBhcnJheSwgdGhlbiBhZGQgaXQKKwkgKiBhbmQgcmVjb3JkIGl0IGFzIGJlaW5nIGluIHRoZSBmaW5hbCBjb2x1bW4uCisJICovCisJaWYgKGkgPCAwKSB7CisJCWkgPSBncmFwaC0+bnVtX25ld19jb2x1bW5zKys7CisJCWdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb21taXQgPSBjb21taXQ7CisJCWdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb2xvciA9IGdyYXBoX2ZpbmRfY29tbWl0X2NvbG9yKGdyYXBoLCBjb21taXQpOworCX0KKworCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPiAxICYmIGlkeCA+IC0xICYmIGdyYXBoLT5tZXJnZV9sYXlvdXQgPT0gLTEpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFyZW50IG9mIGEgbWVyZ2UsIGNob29zZSBhIGxheW91dCBmb3IKKwkJICogdGhlIG1lcmdlIGxpbmUgYmFzZWQgb24gd2hldGhlciB0aGUgcGFyZW50IGFwcGVhcnMgaW4gYQorCQkgKiBjb2x1bW4gdG8gdGhlIGxlZnQgb2YgdGhlIG1lcmdlCisJCSAqLworCQlpbnQgZGlzdCwgc2hpZnQ7CisKKwkJZGlzdCA9IGlkeCAtIGk7CisJCXNoaWZ0ID0gKGRpc3QgPiAxKSA/IDIgKiBkaXN0IC0gMyA6IDE7CisKKwkJZ3JhcGgtPm1lcmdlX2xheW91dCA9IChkaXN0ID4gMCkgPyAwIDogMTsKKwkJZ3JhcGgtPmVkZ2VzX2FkZGVkID0gZ3JhcGgtPm51bV9wYXJlbnRzICsgZ3JhcGgtPm1lcmdlX2xheW91dCAgLSAyOworCisJCW1hcHBpbmdfaWR4ID0gZ3JhcGgtPndpZHRoICsgKGdyYXBoLT5tZXJnZV9sYXlvdXQgLSAxKSAqIHNoaWZ0OworCQlncmFwaC0+d2lkdGggKz0gMiAqIGdyYXBoLT5tZXJnZV9sYXlvdXQ7CisKKwl9IGVsc2UgaWYgKGdyYXBoLT5lZGdlc19hZGRlZCA+IDAgJiYgaSA9PSBncmFwaC0+bWFwcGluZ1tncmFwaC0+d2lkdGggLSAyXSkgeworCQkvKgorCQkgKiBJZiBzb21lIGNvbHVtbnMgaGF2ZSBiZWVuIGFkZGVkIGJ5IGEgbWVyZ2UsIGJ1dCB0aGlzIGNvbW1pdAorCQkgKiB3YXMgZm91bmQgaW4gdGhlIGxhc3QgZXhpc3RpbmcgY29sdW1uLCB0aGVuIGFkanVzdCB0aGUKKwkJICogbnVtYmVycyBzbyB0aGF0IHRoZSB0d28gZWRnZXMgaW1tZWRpYXRlbHkgam9pbiwgaS5lLjoKKwkJICoKKwkJICoJCSogfAkJKiB8CisJCSAqCQl8XCBcCT0+CXxcfAorCQkgKgkJfCB8LwkJfCAqCisJCSAqCQl8ICoKKwkJICovCisJCW1hcHBpbmdfaWR4ID0gZ3JhcGgtPndpZHRoIC0gMjsKKwkJZ3JhcGgtPmVkZ2VzX2FkZGVkID0gLTE7CisJfSBlbHNlIHsKKwkJbWFwcGluZ19pZHggPSBncmFwaC0+d2lkdGg7CisJCWdyYXBoLT53aWR0aCArPSAyOworCX0KKworCWdyYXBoLT5tYXBwaW5nW21hcHBpbmdfaWR4XSA9IGk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3VwZGF0ZV9jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCWludCBtYXhfbmV3X2NvbHVtbnM7CisJaW50IGksIHNlZW5fdGhpcywgaXNfY29tbWl0X2luX2NvbHVtbnM7CisKKwkvKgorCSAqIFN3YXAgZ3JhcGgtPmNvbHVtbnMgd2l0aCBncmFwaC0+bmV3X2NvbHVtbnMKKwkgKiBncmFwaC0+Y29sdW1ucyBjb250YWlucyB0aGUgc3RhdGUgZm9yIHRoZSBwcmV2aW91cyBjb21taXQsCisJICogYW5kIG5ld19jb2x1bW5zIG5vdyBjb250YWlucyB0aGUgc3RhdGUgZm9yIG91ciBjb21taXQuCisJICoKKwkgKiBXZSdsbCByZS11c2UgdGhlIG9sZCBjb2x1bW5zIGFycmF5IGFzIHN0b3JhZ2UgdG8gY29tcHV0ZSB0aGUgbmV3CisJICogY29sdW1ucyBsaXN0IGZvciB0aGUgY29tbWl0IGFmdGVyIHRoaXMgb25lLgorCSAqLworCVNXQVAoZ3JhcGgtPmNvbHVtbnMsIGdyYXBoLT5uZXdfY29sdW1ucyk7CisJZ3JhcGgtPm51bV9jb2x1bW5zID0gZ3JhcGgtPm51bV9uZXdfY29sdW1uczsKKwlncmFwaC0+bnVtX25ld19jb2x1bW5zID0gMDsKKworCS8qCisJICogTm93IHVwZGF0ZSBuZXdfY29sdW1ucyBhbmQgbWFwcGluZyB3aXRoIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlCisJICogY29tbWl0IGFmdGVyIHRoaXMgb25lLgorCSAqCisJICogRmlyc3QsIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCByb29tLiAgQXQgbW9zdCwgdGhlcmUgd2lsbAorCSAqIGJlIGdyYXBoLT5udW1fY29sdW1ucyArIGdyYXBoLT5udW1fcGFyZW50cyBjb2x1bW5zIGZvciB0aGUgbmV4dAorCSAqIGNvbW1pdC4KKwkgKi8KKwltYXhfbmV3X2NvbHVtbnMgPSBncmFwaC0+bnVtX2NvbHVtbnMgKyBncmFwaC0+bnVtX3BhcmVudHM7CisJZ3JhcGhfZW5zdXJlX2NhcGFjaXR5KGdyYXBoLCBtYXhfbmV3X2NvbHVtbnMpOworCisJLyoKKwkgKiBDbGVhciBvdXQgZ3JhcGgtPm1hcHBpbmcKKwkgKi8KKwlncmFwaC0+bWFwcGluZ19zaXplID0gMiAqIG1heF9uZXdfY29sdW1uczsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKQorCQlncmFwaC0+bWFwcGluZ1tpXSA9IC0xOworCisJZ3JhcGgtPndpZHRoID0gMDsKKwlncmFwaC0+cHJldl9lZGdlc19hZGRlZCA9IGdyYXBoLT5lZGdlc19hZGRlZDsKKwlncmFwaC0+ZWRnZXNfYWRkZWQgPSAwOworCisJLyoKKwkgKiBQb3B1bGF0ZSBncmFwaC0+bmV3X2NvbHVtbnMgYW5kIGdyYXBoLT5tYXBwaW5nCisJICoKKwkgKiBTb21lIG9mIHRoZSBwYXJlbnRzIG9mIHRoaXMgY29tbWl0IG1heSBhbHJlYWR5IGJlIGluCisJICogZ3JhcGgtPmNvbHVtbnMuICBJZiBzbywgZ3JhcGgtPm5ld19jb2x1bW5zIHNob3VsZCBvbmx5IGNvbnRhaW4gYQorCSAqIHNpbmdsZSBlbnRyeSBmb3IgZWFjaCBzdWNoIGNvbW1pdC4gIGdyYXBoLT5tYXBwaW5nIHNob3VsZAorCSAqIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgZWFjaCBjdXJyZW50IGJyYW5jaCBsaW5lIGlzCisJICogc3VwcG9zZWQgdG8gZW5kIHVwIGFmdGVyIHRoZSBjb2xsYXBzaW5nIGlzIHBlcmZvcm1lZC4KKwkgKi8KKwlzZWVuX3RoaXMgPSAwOworCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMTsKKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CisJCWlmIChpID09IGdyYXBoLT5udW1fY29sdW1ucykgeworCQkJaWYgKHNlZW5fdGhpcykKKwkJCQlicmVhazsKKwkJCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMDsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29tbWl0OworCQl9IGVsc2UgeworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlncmFwaC0+Y29tbWl0X2luZGV4ID0gaTsKKwkJCWdyYXBoLT5tZXJnZV9sYXlvdXQgPSAtMTsKKwkJCWZvciAocGFyZW50ID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKKwkJCSAgICAgcGFyZW50OworCQkJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkgeworCQkJCS8qCisJCQkJICogSWYgdGhpcyBpcyBhIG1lcmdlLCBvciB0aGUgc3RhcnQgb2YgYSBuZXcKKwkJCQkgKiBjaGlsZGxlc3MgY29sdW1uLCBpbmNyZW1lbnQgdGhlIGN1cnJlbnQKKwkJCQkgKiBjb2xvci4KKwkJCQkgKi8KKwkJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMSB8fAorCQkJCSAgICAhaXNfY29tbWl0X2luX2NvbHVtbnMpIHsKKwkJCQkJZ3JhcGhfaW5jcmVtZW50X2NvbHVtbl9jb2xvcihncmFwaCk7CisJCQkJfQorCQkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLCBwYXJlbnQtPml0ZW0sIGkpOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIGFsd2F5cyBuZWVkIHRvIGluY3JlbWVudCBncmFwaC0+d2lkdGggYnkgYXQKKwkJCSAqIGxlYXN0IDIsIGV2ZW4gaWYgaXQgaGFzIG5vIGludGVyZXN0aW5nIHBhcmVudHMuCisJCQkgKiBUaGUgY3VycmVudCBjb21taXQgYWx3YXlzIHRha2VzIHVwIGF0IGxlYXN0IDIKKwkJCSAqIHNwYWNlcy4KKwkJCSAqLworCQkJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA9PSAwKQorCQkJCWdyYXBoLT53aWR0aCArPSAyOworCQl9IGVsc2UgeworCQkJZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoZ3JhcGgsIGNvbF9jb21taXQsIC0xKTsKKwkJfQorCX0KKworCS8qCisJICogU2hyaW5rIG1hcHBpbmdfc2l6ZSB0byBiZSB0aGUgbWluaW11bSBuZWNlc3NhcnkKKwkgKi8KKwl3aGlsZSAoZ3JhcGgtPm1hcHBpbmdfc2l6ZSA+IDEgJiYKKwkgICAgICAgZ3JhcGgtPm1hcHBpbmdbZ3JhcGgtPm1hcHBpbmdfc2l6ZSAtIDFdIDwgMCkKKwkJZ3JhcGgtPm1hcHBpbmdfc2l6ZS0tOworfQorCitzdGF0aWMgaW50IGdyYXBoX251bV9kYXNoZWRfcGFyZW50cyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlyZXR1cm4gZ3JhcGgtPm51bV9wYXJlbnRzICsgZ3JhcGgtPm1lcmdlX2xheW91dCAtIDM7Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfbnVtX2V4cGFuc2lvbl9yb3dzKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCS8qCisJICogTm9ybWFsbHksIHdlIG5lZWQgdHdvIGV4cGFuc2lvbiByb3dzIGZvciBlYWNoIGRhc2hlZCBwYXJlbnQgbGluZSBmcm9tCisJICogYW4gb2N0b3B1cyBtZXJnZToKKwkgKgorCSAqIAkJfCAqCisJICogCQl8IHxcCisJICogCQl8IHwgXAorCSAqIAkJfCB8ICBcCisJICogCQl8ICotLiBcCisJICogCQl8IHxcIFwgXAorCSAqCisJICogSWYgdGhlIG1lcmdlIGlzIHNrZXdlZCB0byB0aGUgbGVmdCwgdGhlbiBpdHMgcGFyZW50cyBvY2N1cHkgb25lIGxlc3MKKwkgKiBjb2x1bW4sIGFuZCB3ZSBkb24ndCBuZWVkIGFzIG1hbnkgZXhwYW5zaW9uIHJvd3MgdG8gcm91dGUgYXJvdW5kIGl0OworCSAqIGluIHNvbWUgY2FzZXMgdGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIGFueSBleHBhbnNpb24gcm93cyBhdCBhbGw6CisJICoKKwkgKiAJCXwgKgorCSAqIAkJfCB8XAorCSAqIAkJfCAqIFwKKwkgKiAJCXwvfFwgXAorCSAqLworCXJldHVybiBncmFwaF9udW1fZGFzaGVkX3BhcmVudHMoZ3JhcGgpICogMjsKK30KKworc3RhdGljIGludCBncmFwaF9uZWVkc19wcmVfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJcmV0dXJuIGdyYXBoLT5udW1fcGFyZW50cyA+PSAzICYmCisJICAgICAgIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkgJiYKKwkgICAgICAgZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPCBncmFwaF9udW1fZXhwYW5zaW9uX3Jvd3MoZ3JhcGgpOworfQorCit2b2lkIGdyYXBoX3VwZGF0ZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJLyoKKwkgKiBTZXQgdGhlIG5ldyBjb21taXQKKwkgKi8KKwlncmFwaC0+Y29tbWl0ID0gY29tbWl0OworCisJLyoKKwkgKiBDb3VudCBob3cgbWFueSBpbnRlcmVzdGluZyBwYXJlbnRzIHRoaXMgY29tbWl0IGhhcworCSAqLworCWdyYXBoLT5udW1fcGFyZW50cyA9IDA7CisJZm9yIChwYXJlbnQgPSBmaXJzdF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgpOworCSAgICAgcGFyZW50OworCSAgICAgcGFyZW50ID0gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudCkpCisJeworCQlncmFwaC0+bnVtX3BhcmVudHMrKzsKKwl9CisKKwkvKgorCSAqIFN0b3JlIHRoZSBvbGQgY29tbWl0X2luZGV4IGluIHByZXZfY29tbWl0X2luZGV4LgorCSAqIGdyYXBoX3VwZGF0ZV9jb2x1bW5zKCkgd2lsbCB1cGRhdGUgZ3JhcGgtPmNvbW1pdF9pbmRleCBmb3IgdGhpcworCSAqIGNvbW1pdC4KKwkgKi8KKwlncmFwaC0+cHJldl9jb21taXRfaW5kZXggPSBncmFwaC0+Y29tbWl0X2luZGV4OworCisJLyoKKwkgKiBDYWxsIGdyYXBoX3VwZGF0ZV9jb2x1bW5zKCkgdG8gdXBkYXRlCisJICogY29sdW1ucywgbmV3X2NvbHVtbnMsIGFuZCBtYXBwaW5nLgorCSAqLworCWdyYXBoX3VwZGF0ZV9jb2x1bW5zKGdyYXBoKTsKKworCWdyYXBoLT5leHBhbnNpb25fcm93ID0gMDsKKworCS8qCisJICogVXBkYXRlIGdyYXBoLT5zdGF0ZS4KKwkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2FsbCBncmFwaF91cGRhdGVfc3RhdGUoKSBoZXJlLCBzaW5jZQorCSAqIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIGdyYXBoLT5wcmV2X3N0YXRlLiAgTm8gbGluZSBmb3IKKwkgKiBncmFwaC0+c3RhdGUgd2FzIGV2ZXIgcHJpbnRlZC4KKwkgKgorCSAqIElmIHRoZSBwcmV2aW91cyBjb21taXQgZGlkbid0IGdldCB0byB0aGUgR1JBUEhfUEFERElORyBzdGF0ZSwKKwkgKiBpdCBuZXZlciBmaW5pc2hlZCBpdHMgb3V0cHV0LiAgR290byBHUkFQSF9TS0lQLCB0byBwcmludCBvdXQKKwkgKiBhIGxpbmUgdG8gaW5kaWNhdGUgdGhhdCBwb3J0aW9uIG9mIHRoZSBncmFwaCBpcyBtaXNzaW5nLgorCSAqCisJICogSWYgdGhlcmUgYXJlIDMgb3IgbW9yZSBwYXJlbnRzLCB3ZSBtYXkgbmVlZCB0byBwcmludCBleHRyYSByb3dzCisJICogYmVmb3JlIHRoZSBjb21taXQsIHRvIGV4cGFuZCB0aGUgYnJhbmNoIGxpbmVzIGFyb3VuZCBpdCBhbmQgbWFrZQorCSAqIHJvb20gZm9yIGl0LiAgV2UgbmVlZCB0byBkbyB0aGlzIG9ubHkgaWYgdGhlcmUgaXMgYSBicmFuY2ggcm93CisJICogKG9yIG1vcmUpIHRvIHRoZSByaWdodCBvZiB0aGlzIGNvbW1pdC4KKwkgKgorCSAqIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMyBwYXJlbnRzLCB3ZSBjYW4gaW1tZWRpYXRlbHkgcHJpbnQgdGhlCisJICogY29tbWl0IGxpbmUuCisJICovCisJaWYgKGdyYXBoLT5zdGF0ZSAhPSBHUkFQSF9QQURESU5HKQorCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9TS0lQOworCWVsc2UgaWYgKGdyYXBoX25lZWRzX3ByZV9jb21taXRfbGluZShncmFwaCkpCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1BSRV9DT01NSVQ7CisJZWxzZQorCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9DT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfaXNfbWFwcGluZ19jb3JyZWN0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWludCBpOworCisJLyoKKwkgKiBUaGUgbWFwcGluZyBpcyB1cCB0byBkYXRlIGlmIGVhY2ggZW50cnkgaXMgYXQgaXRzIHRhcmdldCwKKwkgKiBvciBpcyAxIGdyZWF0ZXIgdGhhbiBpdHMgdGFyZ2V0LgorCSAqIChJZiBpdCBpcyAxIGdyZWF0ZXIgdGhhbiB0aGUgdGFyZ2V0LCAnLycgd2lsbCBiZSBwcmludGVkLCBzbyBpdAorCSAqIHdpbGwgbG9vayBjb3JyZWN0IG9uIHRoZSBuZXh0IHJvdy4pCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgeworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm1hcHBpbmdbaV07CisJCWlmICh0YXJnZXQgPCAwKQorCQkJY29udGludWU7CisJCWlmICh0YXJnZXQgPT0gKGkgLyAyKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfcGFkX2hvcml6b250YWxseShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCit7CisJLyoKKwkgKiBBZGQgYWRkaXRpb25hbCBzcGFjZXMgdG8gdGhlIGVuZCBvZiB0aGUgc3RyYnVmLCBzbyB0aGF0IGFsbAorCSAqIGxpbmVzIGZvciBhIHBhcnRpY3VsYXIgY29tbWl0IGhhdmUgdGhlIHNhbWUgd2lkdGguCisJICoKKwkgKiBUaGlzIHdheSwgZmllbGRzIHByaW50ZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBncmFwaCB3aWxsIHJlbWFpbgorCSAqIGFsaWduZWQgZm9yIHRoZSBlbnRpcmUgY29tbWl0LgorCSAqLworCWlmIChsaW5lLT53aWR0aCA8IGdyYXBoLT53aWR0aCkKKwkJZ3JhcGhfbGluZV9hZGRjaGFycyhsaW5lLCAnICcsIGdyYXBoLT53aWR0aCAtIGxpbmUtPndpZHRoKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3BhZGRpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkgICAgICBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKK3sKKwlpbnQgaTsKKworCS8qCisJICogT3V0cHV0IGEgcGFkZGluZyByb3csIHRoYXQgbGVhdmVzIGFsbCBicmFuY2ggbGluZXMgdW5jaGFuZ2VkCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7IGkrKykgeworCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldLCAnfCcpOworCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CisJfQorfQorCisKK2ludCBncmFwaF93aWR0aChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlyZXR1cm4gZ3JhcGgtPndpZHRoOworfQorCisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9za2lwX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQoreworCS8qCisJICogT3V0cHV0IGFuIGVsbGlwc2lzIHRvIGluZGljYXRlIHRoYXQgYSBwb3J0aW9uCisJICogb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisJICovCisJZ3JhcGhfbGluZV9hZGRzdHIobGluZSwgIi4uLiIpOworCisJaWYgKGdyYXBoX25lZWRzX3ByZV9jb21taXRfbGluZShncmFwaCkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUFJFX0NPTU1JVCk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTU1JVCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wcmVfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKK3sKKwlpbnQgaSwgc2Vlbl90aGlzOworCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgYSByb3cgdGhhdCBpbmNyZWFzZXMgdGhlIHNwYWNlIGFyb3VuZCBhIGNvbW1pdAorCSAqIHdpdGggbXVsdGlwbGUgcGFyZW50cywgdG8gbWFrZSByb29tIGZvciBpdC4gIEl0IHNob3VsZCBvbmx5IGJlCisJICogY2FsbGVkIHdoZW4gdGhlcmUgYXJlIDMgb3IgbW9yZSBwYXJlbnRzLgorCSAqCisJICogV2UgbmVlZCAyIGV4dHJhIHJvd3MgZm9yIGV2ZXJ5IHBhcmVudCBvdmVyIDIuCisJICovCisJYXNzZXJ0KGdyYXBoLT5udW1fcGFyZW50cyA+PSAzKTsKKworCS8qCisJICogZ3JhcGgtPmV4cGFuc2lvbl9yb3cgdHJhY2tzIHRoZSBjdXJyZW50IGV4cGFuc2lvbiByb3cgd2UgYXJlIG9uLgorCSAqIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgWzAsIG51bV9leHBhbnNpb25fcm93cyAtIDFdCisJICovCisJYXNzZXJ0KDAgPD0gZ3JhcGgtPmV4cGFuc2lvbl9yb3cgJiYKKwkgICAgICAgZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPCBncmFwaF9udW1fZXhwYW5zaW9uX3Jvd3MoZ3JhcGgpKTsKKworCS8qCisJICogT3V0cHV0IHRoZSByb3cKKwkgKi8KKwlzZWVuX3RoaXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CisJCWlmIChjb2wtPmNvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQlzZWVuX3RoaXMgPSAxOworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQkJZ3JhcGhfbGluZV9hZGRjaGFycyhsaW5lLCAnICcsIGdyYXBoLT5leHBhbnNpb25fcm93KTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5leHBhbnNpb25fcm93ID09IDApKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgcHJlLWNvbW1pdCBvdXRwdXQuCisJCQkgKiBJZiB0aGUgcHJldmlvdXMgY29tbWl0IHdhcyBhIG1lcmdlIGNvbW1pdCBhbmQKKwkJCSAqIGVuZGVkIGluIHRoZSBHUkFQSF9QT1NUX01FUkdFIHN0YXRlLCBhbGwgYnJhbmNoCisJCQkgKiBsaW5lcyBhZnRlciBncmFwaC0+cHJldl9jb21taXRfaW5kZXggd2VyZQorCQkJICogcHJpbnRlZCBhcyAiXCIgb24gdGhlIHByZXZpb3VzIGxpbmUuICBDb250aW51ZQorCQkJICogdG8gcHJpbnQgdGhlbSBhcyAiXCIgb24gdGhpcyBsaW5lLiAgT3RoZXJ3aXNlLAorCQkJICogcHJpbnQgdGhlIGJyYW5jaCBsaW5lcyBhcyAifCIuCisJCQkgKi8KKwkJCWlmIChncmFwaC0+cHJldl9zdGF0ZSA9PSBHUkFQSF9QT1NUX01FUkdFICYmCisJCQkgICAgZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4IDwgaSkKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICdcXCcpOworCQkJZWxzZQorCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5leHBhbnNpb25fcm93ID4gMCkpIHsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CisJCX0gZWxzZSB7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CisJCX0KKwkJZ3JhcGhfbGluZV9hZGRjaChsaW5lLCAnICcpOworCX0KKworCS8qCisJICogSW5jcmVtZW50IGdyYXBoLT5leHBhbnNpb25fcm93LAorCSAqIGFuZCBtb3ZlIHRvIHN0YXRlIEdSQVBIX0NPTU1JVCBpZiBuZWNlc3NhcnkKKwkgKi8KKwlncmFwaC0+ZXhwYW5zaW9uX3JvdysrOworCWlmICghZ3JhcGhfbmVlZHNfcHJlX2NvbW1pdF9saW5lKGdyYXBoKSkKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT01NSVQpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29tbWl0X2NoYXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQoreworCS8qCisJICogRm9yIGJvdW5kYXJ5IGNvbW1pdHMsIHByaW50ICdvJworCSAqIChXZSBzaG91bGQgb25seSBzZWUgYm91bmRhcnkgY29tbWl0cyB3aGVuIHJldnMtPmJvdW5kYXJ5IGlzIHNldC4pCisJICovCisJaWYgKGdyYXBoLT5jb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKSB7CisJCWFzc2VydChncmFwaC0+cmV2cy0+Ym91bmRhcnkpOworCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICdvJyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIGdldF9yZXZpc2lvbl9tYXJrKCkgaGFuZGxlcyBhbGwgb3RoZXIgY2FzZXMgd2l0aG91dCBhc3NlcnQoKQorCSAqLworCWdyYXBoX2xpbmVfYWRkc3RyKGxpbmUsIGdldF9yZXZpc2lvbl9tYXJrKGdyYXBoLT5yZXZzLCBncmFwaC0+Y29tbWl0KSk7Cit9CisKKy8qCisgKiBEcmF3IHRoZSBob3Jpem9udGFsIGRhc2hlcyBvZiBhbiBvY3RvcHVzIG1lcmdlLgorICovCitzdGF0aWMgdm9pZCBncmFwaF9kcmF3X29jdG9wdXNfbWVyZ2Uoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQoreworCS8qCisJICogVGhlIHBhcmVudHMgb2YgYSBtZXJnZSBjb21taXQgY2FuIGJlIGFyYml0cmFyaWx5IHJlb3JkZXJlZCBhcyB0aGV5CisJICogYXJlIG1hcHBlZCBvbnRvIGRpc3BsYXkgY29sdW1ucywgZm9yIGV4YW1wbGUgdGhpcyBpcyBhIHZhbGlkIG1lcmdlOgorCSAqCisJICoJfCB8ICotLS0uCisJICoJfCB8IHxcIFwgXAorCSAqCXwgfCB8LyAvIC8KKwkgKgl8IHwvfCB8IC8KKwkgKgl8IHxffF98LworCSAqCXwvfCB8IHwKKwkgKgkzIDEgMCAyCisJICoKKwkgKiBUaGUgbnVtYmVycyBkZW5vdGUgd2hpY2ggcGFyZW50IG9mIHRoZSBtZXJnZSBlYWNoIHZpc3VhbCBjb2x1bW4KKwkgKiBjb3JyZXNwb25kcyB0bzsgd2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIHBhcmVudHMgd2lsbCBpbml0aWFsbHkKKwkgKiBkaXNwbGF5IGluIHRoZSBvcmRlciBnaXZlbiBieSBuZXdfY29sdW1ucy4KKwkgKgorCSAqIFRvIGZpbmQgdGhlIHJpZ2h0IGNvbG9yIGZvciBlYWNoIGRhc2gsIHdlIG5lZWQgdG8gY29uc3VsdCB0aGUKKwkgKiBtYXBwaW5nIGFycmF5LCBzdGFydGluZyBmcm9tIHRoZSBjb2x1bW4gMiBwbGFjZXMgdG8gdGhlIHJpZ2h0IG9mIHRoZQorCSAqIG1lcmdlIGNvbW1pdCwgYW5kIHVzZSB0aGF0IHRvIGZpbmQgb3V0IHdoaWNoIGxvZ2ljYWwgY29sdW1uIGVhY2gKKwkgKiBlZGdlIHdpbGwgY29sbGFwc2UgdG8uCisJICoKKwkgKiBDb21taXRzIGFyZSByZW5kZXJlZCBvbmNlIGFsbCBlZGdlcyBoYXZlIGNvbGxhcHNlZCB0byB0aGVpciBjb3JyZWN0CisJICogbG9nY2lhbCBjb2x1bW4sIHNvIGNvbW1pdF9pbmRleCBnaXZlcyB1cyB0aGUgcmlnaHQgdmlzdWFsIG9mZnNldCBmb3IKKwkgKiB0aGUgbWVyZ2UgY29tbWl0LgorCSAqLworCisJaW50IGksIGo7CisJc3RydWN0IGNvbHVtbiAqY29sOworCisJaW50IGRhc2hlZF9wYXJlbnRzID0gZ3JhcGhfbnVtX2Rhc2hlZF9wYXJlbnRzKGdyYXBoKTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXNoZWRfcGFyZW50czsgaSsrKSB7CisJCWogPSBncmFwaC0+bWFwcGluZ1soZ3JhcGgtPmNvbW1pdF9pbmRleCArIGkgKyAyKSAqIDJdOworCQljb2wgPSAmZ3JhcGgtPm5ld19jb2x1bW5zW2pdOworCisJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJy0nKTsKKwkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAoaSA9PSBkYXNoZWRfcGFyZW50cyAtIDEpID8gJy4nIDogJy0nKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCit7CisJaW50IHNlZW5fdGhpcyA9IDA7CisJaW50IGk7CisKKwkvKgorCSAqIE91dHB1dCB0aGUgcm93IGNvbnRhaW5pbmcgdGhpcyBjb21taXQKKwkgKiBJdGVyYXRlIHVwIHRvIGFuZCBpbmNsdWRpbmcgZ3JhcGgtPm51bV9jb2x1bW5zLAorCSAqIHNpbmNlIHRoZSBjdXJyZW50IGNvbW1pdCBtYXkgbm90IGJlIGluIGFueSBvZiB0aGUgZXhpc3RpbmcKKwkgKiBjb2x1bW5zLiAgKFRoaXMgaGFwcGVucyB3aGVuIHRoZSBjdXJyZW50IGNvbW1pdCBkb2Vzbid0IGhhdmUgYW55CisJICogY2hpbGRyZW4gdGhhdCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkLikKKwkgKi8KKwlzZWVuX3RoaXMgPSAwOworCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOworCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OworCQlpZiAoaSA9PSBncmFwaC0+bnVtX2NvbHVtbnMpIHsKKwkJCWlmIChzZWVuX3RoaXMpCisJCQkJYnJlYWs7CisJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbW1pdDsKKwkJfSBlbHNlIHsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29sdW1uc1tpXS5jb21taXQ7CisJCX0KKworCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQlzZWVuX3RoaXMgPSAxOworCQkJZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKGdyYXBoLCBsaW5lKTsKKworCQkJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDIpCisJCQkJZ3JhcGhfZHJhd19vY3RvcHVzX21lcmdlKGdyYXBoLCBsaW5lKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5lZGdlc19hZGRlZCA+IDEpKSB7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICdcXCcpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID09IDEpKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBlaXRoZXIgYSByaWdodC1za2V3ZWQgMi13YXkgbWVyZ2UKKwkJCSAqIGNvbW1pdCwgb3IgYSBsZWZ0LXNrZXdlZCAzLXdheSBtZXJnZS4KKwkJCSAqIFRoZXJlIGlzIG5vIEdSQVBIX1BSRV9DT01NSVQgc3RhZ2UgZm9yIHN1Y2gKKwkJCSAqIG1lcmdlcywgc28gdGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiBvdXRwdXQKKwkJCSAqIGZvciB0aGlzIGNvbW1pdC4gIENoZWNrIHRvIHNlZSB3aGF0IHRoZSBwcmV2aW91cworCQkJICogbGluZSBvZiBvdXRwdXQgd2FzLgorCQkJICoKKwkJCSAqIElmIGl0IHdhcyBHUkFQSF9QT1NUX01FUkdFLCB0aGUgYnJhbmNoIGxpbmUKKwkJCSAqIGNvbWluZyBpbnRvIHRoaXMgY29tbWl0IG1heSBoYXZlIGJlZW4gJ1wnLAorCQkJICogYW5kIG5vdCAnfCcgb3IgJy8nLiAgSWYgc28sIG91dHB1dCB0aGUgYnJhbmNoCisJCQkgKiBsaW5lIGFzICdcJyBvbiB0aGlzIGxpbmUsIGluc3RlYWQgb2YgJ3wnLiAgVGhpcworCQkJICogbWFrZXMgdGhlIG91dHB1dCBsb29rIG5pY2VyLgorCQkJICovCisJCQlpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfUE9TVF9NRVJHRSAmJgorCQkJICAgIGdyYXBoLT5wcmV2X2VkZ2VzX2FkZGVkID4gMCAmJgorCQkJICAgIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA8IGkpCisJCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnXFwnKTsKKwkJCWVsc2UKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CisJCX0gZWxzZSBpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfQ09MTEFQU0lORyAmJgorCQkJICAgZ3JhcGgtPm9sZF9tYXBwaW5nWzIgKiBpICsgMV0gPT0gaSAmJgorCQkJICAgZ3JhcGgtPm1hcHBpbmdbMiAqIGldIDwgaSkgeworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnLycpOworCQl9IGVsc2UgeworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOworCQl9CisJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBncmFwaC0+c3RhdGUKKwkgKi8KKwlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMSkKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9QT1NUX01FUkdFKTsKKwllbHNlIGlmIChncmFwaF9pc19tYXBwaW5nX2NvcnJlY3QoZ3JhcGgpKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BBRERJTkcpOworCWVsc2UKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT0xMQVBTSU5HKTsKK30KKworY29uc3QgY2hhciBtZXJnZV9jaGFyc1tdID0geycvJywgJ3wnLCAnXFwnfTsKKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCit7CisJaW50IHNlZW5fdGhpcyA9IDA7CisJaW50IGksIGo7CisKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpcnN0X3BhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJc3RydWN0IGNvbHVtbiAqcGFyZW50X2NvbCA9IE5VTEw7CisKKwkvKgorCSAqIE91dHB1dCB0aGUgcG9zdC1tZXJnZSByb3cKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+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+CisjaWZuZGVmIFBDUkVfTk9fVVRGOF9DSEVDSworI2RlZmluZSBQQ1JFX05PX1VURjhfQ0hFQ0sgMAorI2VuZGlmCisjZWxzZQordHlwZWRlZiBpbnQgcGNyZTsKK3R5cGVkZWYgaW50IHBjcmVfZXh0cmE7CisjZW5kaWYKKyNpZmRlZiBVU0VfTElCUENSRTIKKyNkZWZpbmUgUENSRTJfQ09ERV9VTklUX1dJRFRIIDgKKyNpbmNsdWRlIDxwY3JlMi5oPgorI2Vsc2UKK3R5cGVkZWYgaW50IHBjcmUyX2NvZGU7Cit0eXBlZGVmIGludCBwY3JlMl9tYXRjaF9kYXRhOwordHlwZWRlZiBpbnQgcGNyZTJfY29tcGlsZV9jb250ZXh0OworI2VuZGlmCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKworc3RydWN0IHJlcG9zaXRvcnk7CisKK2VudW0gZ3JlcF9wYXRfdG9rZW4geworCUdSRVBfUEFUVEVSTiwKKwlHUkVQX1BBVFRFUk5fSEVBRCwKKwlHUkVQX1BBVFRFUk5fQk9EWSwKKwlHUkVQX0FORCwKKwlHUkVQX09QRU5fUEFSRU4sCisJR1JFUF9DTE9TRV9QQVJFTiwKKwlHUkVQX05PVCwKKwlHUkVQX09SCit9OworCitlbnVtIGdyZXBfY29udGV4dCB7CisJR1JFUF9DT05URVhUX0hFQUQsCisJR1JFUF9DT05URVhUX0JPRFkKK307CisKK2VudW0gZ3JlcF9oZWFkZXJfZmllbGQgeworCUdSRVBfSEVBREVSX0ZJRUxEX01JTiA9IDAsCisJR1JFUF9IRUFERVJfQVVUSE9SID0gR1JFUF9IRUFERVJfRklFTERfTUlOLAorCUdSRVBfSEVBREVSX0NPTU1JVFRFUiwKKwlHUkVQX0hFQURFUl9SRUZMT0csCisKKwkvKiBNdXN0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIGVudW0gKi8KKwlHUkVQX0hFQURFUl9GSUVMRF9NQVgKK307CisKK2VudW0gZ3JlcF9jb2xvciB7CisJR1JFUF9DT0xPUl9DT05URVhULAorCUdSRVBfQ09MT1JfRklMRU5BTUUsCisJR1JFUF9DT0xPUl9GVU5DVElPTiwKKwlHUkVQX0NPTE9SX0xJTkVOTywKKwlHUkVQX0NPTE9SX0NPTFVNTk5PLAorCUdSRVBfQ09MT1JfTUFUQ0hfQ09OVEVYVCwKKwlHUkVQX0NPTE9SX01BVENIX1NFTEVDVEVELAorCUdSRVBfQ09MT1JfU0VMRUNURUQsCisJR1JFUF9DT0xPUl9TRVAsCisJTlJfR1JFUF9DT0xPUlMKK307CisKK3N0cnVjdCBncmVwX3BhdCB7CisJc3RydWN0IGdyZXBfcGF0ICpuZXh0OworCWNvbnN0IGNoYXIgKm9yaWdpbjsKKwlpbnQgbm87CisJZW51bSBncmVwX3BhdF90b2tlbiB0b2tlbjsKKwljaGFyICpwYXR0ZXJuOworCXNpemVfdCBwYXR0ZXJubGVuOworCWVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQ7CisJcmVnZXhfdCByZWdleHA7CisJcGNyZSAqcGNyZTFfcmVnZXhwOworCXBjcmVfZXh0cmEgKnBjcmUxX2V4dHJhX2luZm87CisJY29uc3QgdW5zaWduZWQgY2hhciAqcGNyZTFfdGFibGVzOworCWludCBwY3JlMV9qaXRfb247CisJcGNyZTJfY29kZSAqcGNyZTJfcGF0dGVybjsKKwlwY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhOworCXBjcmUyX2NvbXBpbGVfY29udGV4dCAqcGNyZTJfY29tcGlsZV9jb250ZXh0OworCWNvbnN0IHVpbnQ4X3QgKnBjcmUyX3RhYmxlczsKKwl1aW50MzJfdCBwY3JlMl9qaXRfb247CisJdW5zaWduZWQgZml4ZWQ6MTsKKwl1bnNpZ25lZCBpc19maXhlZDoxOworCXVuc2lnbmVkIGlnbm9yZV9jYXNlOjE7CisJdW5zaWduZWQgd29yZF9yZWdleHA6MTsKK307CisKK2VudW0gZ3JlcF9leHByX25vZGUgeworCUdSRVBfTk9ERV9BVE9NLAorCUdSRVBfTk9ERV9OT1QsCisJR1JFUF9OT0RFX0FORCwKKwlHUkVQX05PREVfVFJVRSwKKwlHUkVQX05PREVfT1IKK307CisKK2VudW0gZ3JlcF9wYXR0ZXJuX3R5cGUgeworCUdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEID0gMCwKKwlHUkVQX1BBVFRFUk5fVFlQRV9CUkUsCisJR1JFUF9QQVRURVJOX1RZUEVfRVJFLAorCUdSRVBfUEFUVEVSTl9UWVBFX0ZJWEVELAorCUdSRVBfUEFUVEVSTl9UWVBFX1BDUkUKK307CisKK3N0cnVjdCBncmVwX2V4cHIgeworCWVudW0gZ3JlcF9leHByX25vZGUgbm9kZTsKKwl1bnNpZ25lZCBoaXQ7CisJdW5pb24geworCQlzdHJ1Y3QgZ3JlcF9wYXQgKmF0b207CisJCXN0cnVjdCBncmVwX2V4cHIgKnVuYXJ5OworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGdyZXBfZXhwciAqbGVmdDsKKwkJCXN0cnVjdCBncmVwX2V4cHIgKnJpZ2h0OworCQl9IGJpbmFyeTsKKwl9IHU7Cit9OworCitzdHJ1Y3QgZ3JlcF9vcHQgeworCXN0cnVjdCBncmVwX3BhdCAqcGF0dGVybl9saXN0OworCXN0cnVjdCBncmVwX3BhdCAqKnBhdHRlcm5fdGFpbDsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKmhlYWRlcl9saXN0OworCXN0cnVjdCBncmVwX3BhdCAqKmhlYWRlcl90YWlsOworCXN0cnVjdCBncmVwX2V4cHIgKnBhdHRlcm5fZXhwcmVzc2lvbjsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IHByZWZpeF9sZW5ndGg7CisJcmVnZXhfdCByZWdleHA7CisJaW50IGxpbmVudW07CisJaW50IGNvbHVtbm51bTsKKwlpbnQgaW52ZXJ0OworCWludCBpZ25vcmVfY2FzZTsKKwlpbnQgc3RhdHVzX29ubHk7CisJaW50IG5hbWVfb25seTsKKwlpbnQgdW5tYXRjaF9uYW1lX29ubHk7CisJaW50IGNvdW50OworCWludCB3b3JkX3JlZ2V4cDsKKwlpbnQgZml4ZWQ7CisJaW50IGFsbF9tYXRjaDsKKwlpbnQgZGVidWc7CisjZGVmaW5lIEdSRVBfQklOQVJZX0RFRkFVTFQJMAorI2RlZmluZSBHUkVQX0JJTkFSWV9OT01BVENICTEKKyNkZWZpbmUgR1JFUF9CSU5BUllfVEVYVAkyCisJaW50IGJpbmFyeTsKKwlpbnQgYWxsb3dfdGV4dGNvbnY7CisJaW50IGV4dGVuZGVkOworCWludCB1c2VfcmVmbG9nX2ZpbHRlcjsKKwlpbnQgcGNyZTE7CisJaW50IHBjcmUyOworCWludCByZWxhdGl2ZTsKKwlpbnQgcGF0aG5hbWU7CisJaW50IG51bGxfZm9sbG93aW5nX25hbWU7CisJaW50IG9ubHlfbWF0Y2hpbmc7CisJaW50IGNvbG9yOworCWludCBtYXhfZGVwdGg7CisJaW50IGZ1bmNuYW1lOworCWludCBmdW5jYm9keTsKKwlpbnQgZXh0ZW5kZWRfcmVnZXhwX29wdGlvbjsKKwlpbnQgcGF0dGVybl90eXBlX29wdGlvbjsKKwlpbnQgaWdub3JlX2xvY2FsZTsKKwljaGFyIGNvbG9yc1tOUl9HUkVQX0NPTE9SU11bQ09MT1JfTUFYTEVOXTsKKwl1bnNpZ25lZCBwcmVfY29udGV4dDsKKwl1bnNpZ25lZCBwb3N0X2NvbnRleHQ7CisJdW5zaWduZWQgbGFzdF9zaG93bjsKKwlpbnQgc2hvd19odW5rX21hcms7CisJaW50IGZpbGVfYnJlYWs7CisJaW50IGhlYWRpbmc7CisJdm9pZCAqcHJpdjsKKworCXZvaWQgKCpvdXRwdXQpKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisJdm9pZCAqb3V0cHV0X3ByaXY7Cit9OworCit2b2lkIGluaXRfZ3JlcF9kZWZhdWx0cyhzdHJ1Y3QgcmVwb3NpdG9yeSAqKTsKK2ludCBncmVwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICopOwordm9pZCBncmVwX2luaXQoc3RydWN0IGdyZXBfb3B0ICosIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBncmVwX2Rlc3Ryb3kodm9pZCk7Cit2b2lkIGdyZXBfY29tbWl0X3BhdHRlcm5fdHlwZShlbnVtIGdyZXBfcGF0dGVybl90eXBlLCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCk7CisKK3ZvaWQgYXBwZW5kX2dyZXBfcGF0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpwYXQsIHNpemVfdCBwYXRsZW4sIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpOwordm9pZCBhcHBlbmRfZ3JlcF9wYXR0ZXJuKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpwYXQsIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpOwordm9pZCBhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybihzdHJ1Y3QgZ3JlcF9vcHQgKiwgZW51bSBncmVwX2hlYWRlcl9maWVsZCwgY29uc3QgY2hhciAqKTsKK3ZvaWQgY29tcGlsZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK3ZvaWQgZnJlZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK2ludCBncmVwX2J1ZmZlcihzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitzdHJ1Y3QgZ3JlcF9zb3VyY2UgeworCWNoYXIgKm5hbWU7CisKKwllbnVtIGdyZXBfc291cmNlX3R5cGUgeworCQlHUkVQX1NPVVJDRV9PSUQsCisJCUdSRVBfU09VUkNFX0ZJTEUsCisJCUdSRVBfU09VUkNFX0JVRiwKKwl9IHR5cGU7CisJdm9pZCAqaWRlbnRpZmllcjsKKworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwljaGFyICpwYXRoOyAvKiBmb3IgYXR0cmlidXRlIGxvb2t1cHMgKi8KKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXI7Cit9OworCit2b2lkIGdyZXBfc291cmNlX2luaXQoc3RydWN0IGdyZXBfc291cmNlICpncywgZW51bSBncmVwX3NvdXJjZV90eXBlIHR5cGUsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgIGNvbnN0IHZvaWQgKmlkZW50aWZpZXIpOwordm9pZCBncmVwX3NvdXJjZV9jbGVhcl9kYXRhKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpOwordm9pZCBncmVwX3NvdXJjZV9jbGVhcihzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKTsKK3ZvaWQgZ3JlcF9zb3VyY2VfbG9hZF9kcml2ZXIoc3RydWN0IGdyZXBfc291cmNlICpncywKKwkJCSAgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworCisKK2ludCBncmVwX3NvdXJjZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncyk7CisKK3N0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHRfZHVwKGNvbnN0IHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK2ludCBncmVwX3RocmVhZHNfb2soY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpOworCisvKgorICogTXV0ZXggdXNlZCBhcm91bmQgYWNjZXNzIHRvIHRoZSBhdHRyaWJ1dGVzIG1hY2hpbmVyeSBpZgorICogb3B0LT51c2VfdGhyZWFkcy4gIE11c3QgYmUgaW5pdGlhbGl6ZWQvZGVzdHJveWVkIGJ5IGNhbGxlcnMhCisgKi8KK2V4dGVybiBpbnQgZ3JlcF91c2VfbG9ja3M7CitleHRlcm4gcHRocmVhZF9tdXRleF90IGdyZXBfYXR0cl9tdXRleDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9oYXNoLmggYi9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhNGYxYQotLS0gL2Rldi9udWxsCisrKyBiL2hhc2guaApAQCAtMCwwICsxLDE2NiBAQAorI2lmbmRlZiBIQVNIX0gKKyNkZWZpbmUgSEFTSF9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworI2lmIGRlZmluZWQoU0hBMV9QUEMpCisjaW5jbHVkZSAicHBjL3NoYTEuaCIKKyNlbGlmIGRlZmluZWQoU0hBMV9BUFBMRSkKKyNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uRGlnZXN0Lmg+CisjZWxpZiBkZWZpbmVkKFNIQTFfT1BFTlNTTCkKKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorI2VsaWYgZGVmaW5lZChTSEExX0RDKQorI2luY2x1ZGUgInNoYTFkY19naXQuaCIKKyNlbHNlIC8qIFNIQTFfQkxLICovCisjaW5jbHVkZSAiYmxvY2stc2hhMS9zaGExLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoU0hBMjU2X0dDUllQVCkKKyNpbmNsdWRlICJzaGEyNTYvZ2NyeXB0LmgiCisjZWxpZiBkZWZpbmVkKFNIQTI1Nl9PUEVOU1NMKQorI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisjZWxzZQorI2luY2x1ZGUgInNoYTI1Ni9ibG9jay9zaGEyNTYuaCIKKyNlbmRpZgorCisjaWZuZGVmIHBsYXRmb3JtX1NIQV9DVFgKKy8qCisgKiBwbGF0Zm9ybSdzIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gb2YgU0hBLTE7IGNvdWxkIGJlIE9wZW5TU0wsCisgKiBibGtfU0hBLCBBcHBsZSBDb21tb25DcnlwdG8sIGV0Yy4uLiAgTm90ZSB0aGF0IHRoZSByZWxldmFudAorICogU0hBLTEgaGVhZGVyIG1heSBoYXZlIGFscmVhZHkgZGVmaW5lZCBwbGF0Zm9ybV9TSEFfQ1RYIGZvciBvdXIKKyAqIG93biBpbXBsZW1lbnRhdGlvbnMgbGlrZSBibG9jay1zaGExIGFuZCBwcGMtc2hhMSwgc28gd2UgbGlzdAorICogdGhlIGRlZmF1bHQgZm9yIE9wZW5TU0wgY29tcGF0aWJsZSBTSEEtMSBpbXBsZW1lbnRhdGlvbnMgaGVyZS4KKyAqLworI2RlZmluZSBwbGF0Zm9ybV9TSEFfQ1RYCVNIQV9DVFgKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMV9Jbml0CVNIQTFfSW5pdAorI2RlZmluZSBwbGF0Zm9ybV9TSEExX1VwZGF0ZQlTSEExX1VwZGF0ZQorI2RlZmluZSBwbGF0Zm9ybV9TSEExX0ZpbmFsICAgIAlTSEExX0ZpbmFsCisjZW5kaWYKKworI2RlZmluZSBnaXRfU0hBX0NUWAkJcGxhdGZvcm1fU0hBX0NUWAorI2RlZmluZSBnaXRfU0hBMV9Jbml0CQlwbGF0Zm9ybV9TSEExX0luaXQKKyNkZWZpbmUgZ2l0X1NIQTFfVXBkYXRlCQlwbGF0Zm9ybV9TSEExX1VwZGF0ZQorI2RlZmluZSBnaXRfU0hBMV9GaW5hbAkJcGxhdGZvcm1fU0hBMV9GaW5hbAorCisjaWZuZGVmIHBsYXRmb3JtX1NIQTI1Nl9DVFgKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMjU2X0NUWAlTSEEyNTZfQ1RYCisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9Jbml0CVNIQTI1Nl9Jbml0CisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9VcGRhdGUJU0hBMjU2X1VwZGF0ZQorI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfRmluYWwJU0hBMjU2X0ZpbmFsCisjZW5kaWYKKworI2RlZmluZSBnaXRfU0hBMjU2X0NUWAkJcGxhdGZvcm1fU0hBMjU2X0NUWAorI2RlZmluZSBnaXRfU0hBMjU2X0luaXQJCXBsYXRmb3JtX1NIQTI1Nl9Jbml0CisjZGVmaW5lIGdpdF9TSEEyNTZfVXBkYXRlCXBsYXRmb3JtX1NIQTI1Nl9VcGRhdGUKKyNkZWZpbmUgZ2l0X1NIQTI1Nl9GaW5hbAlwbGF0Zm9ybV9TSEEyNTZfRmluYWwKKworI2lmZGVmIFNIQTFfTUFYX0JMT0NLX1NJWkUKKyNpbmNsdWRlICJjb21wYXQvc2hhMS1jaHVua2VkLmgiCisjdW5kZWYgZ2l0X1NIQTFfVXBkYXRlCisjZGVmaW5lIGdpdF9TSEExX1VwZGF0ZQkJZ2l0X1NIQTFfVXBkYXRlX0NodW5rZWQKKyNlbmRpZgorCisvKgorICogTm90ZSB0aGF0IHRoZXNlIGNvbnN0YW50cyBhcmUgc3VpdGFibGUgZm9yIGluZGV4aW5nIHRoZSBoYXNoX2FsZ29zIGFycmF5IGFuZAorICogY29tcGFyaW5nIGFnYWluc3QgZWFjaCBvdGhlciwgYnV0IGFyZSBvdGhlcndpc2UgYXJiaXRyYXJ5LCBzbyB0aGV5IHNob3VsZCBub3QKKyAqIGJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgb3Igc2VyaWFsaXplZCB0byBkaXNrLiAgVG8ga25vdyB3aGV0aGVyIGEKKyAqIGdpdF9oYXNoX2FsZ28gc3RydWN0IHBvaW50cyB0byBzb21lIHVzYWJsZSBoYXNoIGZ1bmN0aW9uLCB0ZXN0IHRoZSBmb3JtYXRfaWQKKyAqIGZpZWxkIGZvciBiZWluZyBub24temVyby4gIFVzZSB0aGUgbmFtZSBmaWVsZCBmb3IgdXNlci12aXNpYmxlIHNpdHVhdGlvbnMgYW5kCisgKiB0aGUgZm9ybWF0X2lkIGZpZWxkIGZvciBmaXhlZC1sZW5ndGggZmllbGRzIG9uIGRpc2suCisgKi8KKy8qIEFuIHVua25vd24gaGFzaCBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgR0lUX0hBU0hfVU5LTk9XTiAwCisvKiBTSEEtMSAqLworI2RlZmluZSBHSVRfSEFTSF9TSEExIDEKKy8qIFNIQS0yNTYgICovCisjZGVmaW5lIEdJVF9IQVNIX1NIQTI1NiAyCisvKiBOdW1iZXIgb2YgYWxnb3JpdGhtcyBzdXBwb3J0ZWQgKGluY2x1ZGluZyB1bmtub3duKS4gKi8KKyNkZWZpbmUgR0lUX0hBU0hfTkFMR09TIChHSVRfSEFTSF9TSEEyNTYgKyAxKQorCisvKiBBIHN1aXRhYmx5IGFsaWduZWQgdHlwZSBmb3Igc3RhY2sgYWxsb2NhdGlvbnMgb2YgaGFzaCBjb250ZXh0cy4gKi8KK3VuaW9uIGdpdF9oYXNoX2N0eCB7CisJZ2l0X1NIQV9DVFggc2hhMTsKKwlnaXRfU0hBMjU2X0NUWCBzaGEyNTY7Cit9OwordHlwZWRlZiB1bmlvbiBnaXRfaGFzaF9jdHggZ2l0X2hhc2hfY3R4OworCit0eXBlZGVmIHZvaWQgKCpnaXRfaGFzaF9pbml0X2ZuKShnaXRfaGFzaF9jdHggKmN0eCk7Cit0eXBlZGVmIHZvaWQgKCpnaXRfaGFzaF91cGRhdGVfZm4pKGdpdF9oYXNoX2N0eCAqY3R4LCBjb25zdCB2b2lkICppbiwgc2l6ZV90IGxlbik7Cit0eXBlZGVmIHZvaWQgKCpnaXRfaGFzaF9maW5hbF9mbikodW5zaWduZWQgY2hhciAqaGFzaCwgZ2l0X2hhc2hfY3R4ICpjdHgpOworCitzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyB7CisJLyoKKwkgKiBUaGUgbmFtZSBvZiB0aGUgYWxnb3JpdGhtLCBhcyBhcHBlYXJzIGluIHRoZSBjb25maWcgZmlsZSBhbmQgaW4KKwkgKiBtZXNzYWdlcy4KKwkgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyogQSBmb3VyLWJ5dGUgdmVyc2lvbiBpZGVudGlmaWVyLCB1c2VkIGluIHBhY2sgaW5kaWNlcy4gKi8KKwl1aW50MzJfdCBmb3JtYXRfaWQ7CisKKwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIGluIGJpbmFyeS4gKi8KKwlzaXplX3QgcmF3c3o7CisKKwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIGluIGhleCBjaGFyYWN0ZXJzLiAqLworCXNpemVfdCBoZXhzejsKKworCS8qIFRoZSBibG9jayBzaXplIG9mIHRoZSBoYXNoLiAqLworCXNpemVfdCBibGtzejsKKworCS8qIFRoZSBoYXNoIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAqLworCWdpdF9oYXNoX2luaXRfZm4gaW5pdF9mbjsKKworCS8qIFRoZSBoYXNoIHVwZGF0ZSBmdW5jdGlvbi4gKi8KKwlnaXRfaGFzaF91cGRhdGVfZm4gdXBkYXRlX2ZuOworCisJLyogVGhlIGhhc2ggZmluYWxpemF0aW9uIGZ1bmN0aW9uLiAqLworCWdpdF9oYXNoX2ZpbmFsX2ZuIGZpbmFsX2ZuOworCisJLyogVGhlIE9JRCBvZiB0aGUgZW1wdHkgdHJlZS4gKi8KKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICplbXB0eV90cmVlOworCisJLyogVGhlIE9JRCBvZiB0aGUgZW1wdHkgYmxvYi4gKi8KKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICplbXB0eV9ibG9iOworfTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyBoYXNoX2FsZ29zW0dJVF9IQVNIX05BTEdPU107CisKKy8qCisgKiBSZXR1cm4gYSBHSVRfSEFTSF8qIGNvbnN0YW50IGJhc2VkIG9uIHRoZSBuYW1lLiAgUmV0dXJucyBHSVRfSEFTSF9VTktOT1dOIGlmCisgKiB0aGUgbmFtZSBkb2Vzbid0IG1hdGNoIGEga25vd24gYWxnb3JpdGhtLgorICovCitpbnQgaGFzaF9hbGdvX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisvKiBJZGVudGljYWwsIGV4Y2VwdCBiYXNlZCBvbiB0aGUgZm9ybWF0IElELiAqLworaW50IGhhc2hfYWxnb19ieV9pZCh1aW50MzJfdCBmb3JtYXRfaWQpOworLyogSWRlbnRpY2FsLCBleGNlcHQgYmFzZWQgb24gdGhlIGxlbmd0aC4gKi8KK2ludCBoYXNoX2FsZ29fYnlfbGVuZ3RoKGludCBsZW4pOworLyogSWRlbnRpY2FsLCBleGNlcHQgZm9yIGEgcG9pbnRlciB0byBzdHJ1Y3QgZ2l0X2hhc2hfYWxnby4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhhc2hfYWxnb19ieV9wdHIoY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKnApCit7CisJcmV0dXJuIHAgLSBoYXNoX2FsZ29zOworfQorCisvKiBUaGUgbGVuZ3RoIGluIGJ5dGVzIGFuZCBpbiBoZXggZGlnaXRzIG9mIGFuIG9iamVjdCBuYW1lIChTSEEtMSB2YWx1ZSkuICovCisjZGVmaW5lIEdJVF9TSEExX1JBV1NaIDIwCisjZGVmaW5lIEdJVF9TSEExX0hFWFNaICgyICogR0lUX1NIQTFfUkFXU1opCisvKiBUaGUgYmxvY2sgc2l6ZSBvZiBTSEEtMS4gKi8KKyNkZWZpbmUgR0lUX1NIQTFfQkxLU1ogNjQKKworLyogVGhlIGxlbmd0aCBpbiBieXRlcyBhbmQgaW4gaGV4IGRpZ2l0cyBvZiBhbiBvYmplY3QgbmFtZSAoU0hBLTI1NiB2YWx1ZSkuICovCisjZGVmaW5lIEdJVF9TSEEyNTZfUkFXU1ogMzIKKyNkZWZpbmUgR0lUX1NIQTI1Nl9IRVhTWiAoMiAqIEdJVF9TSEEyNTZfUkFXU1opCisvKiBUaGUgYmxvY2sgc2l6ZSBvZiBTSEEtMjU2LiAqLworI2RlZmluZSBHSVRfU0hBMjU2X0JMS1NaIDY0CisKKy8qIFRoZSBsZW5ndGggaW4gYnl0ZSBhbmQgaW4gaGV4IGRpZ2l0cyBvZiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBoYXNoIHZhbHVlLiAqLworI2RlZmluZSBHSVRfTUFYX1JBV1NaIEdJVF9TSEEyNTZfUkFXU1oKKyNkZWZpbmUgR0lUX01BWF9IRVhTWiBHSVRfU0hBMjU2X0hFWFNaCisvKiBUaGUgbGFyZ2VzdCBwb3NzaWJsZSBibG9jayBzaXplIGZvciBhbnkgc3VwcG9ydGVkIGhhc2guICovCisjZGVmaW5lIEdJVF9NQVhfQkxLU1ogR0lUX1NIQTI1Nl9CTEtTWgorCitzdHJ1Y3Qgb2JqZWN0X2lkIHsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07Cit9OworCisjZGVmaW5lIHRoZV9oYXNoX2FsZ28gdGhlX3JlcG9zaXRvcnktPmhhc2hfYWxnbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2hhc2htYXAuYyBiL2hhc2htYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTgxM2UxCi0tLSAvZGV2L251bGwKKysrIGIvaGFzaG1hcC5jCkBAIC0wLDAgKzEsMzIzIEBACisvKgorICogR2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoLWJhc2VkIGtleSB2YWx1ZSBtYXBwaW5ncy4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorCisjZGVmaW5lIEZOVjMyX0JBU0UgKCh1bnNpZ25lZCBpbnQpIDB4ODExYzlkYzUpCisjZGVmaW5lIEZOVjMyX1BSSU1FICgodW5zaWduZWQgaW50KSAweDAxMDAwMTkzKQorCit1bnNpZ25lZCBpbnQgc3RyaGFzaChjb25zdCBjaGFyICpzdHIpCit7CisJdW5zaWduZWQgaW50IGMsIGhhc2ggPSBGTlYzMl9CQVNFOworCXdoaWxlICgoYyA9ICh1bnNpZ25lZCBjaGFyKSAqc3RyKyspKQorCQloYXNoID0gKGhhc2ggKiBGTlYzMl9QUklNRSkgXiBjOworCXJldHVybiBoYXNoOworfQorCit1bnNpZ25lZCBpbnQgc3RyaWhhc2goY29uc3QgY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGludCBjLCBoYXNoID0gRk5WMzJfQkFTRTsKKwl3aGlsZSAoKGMgPSAodW5zaWduZWQgY2hhcikgKnN0cisrKSkgeworCQlpZiAoYyA+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+bWVtYmVyKSwgXAorCQkJCU9GRlNFVE9GX1ZBUihrZXl2YXIsIG1lbWJlcikpCisKKy8qCisgKiBSZW1vdmVzIGEgaGFzaG1hcCBlbnRyeSBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIGtleS4gSWYgdGhlIGhhc2htYXAgY29udGFpbnMKKyAqIGR1cGxpY2F0ZSBlbnRyaWVzIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQga2V5LCBvbmx5IG9uZSBvZiB0aGVtIHdpbGwgYmUKKyAqIHJlbW92ZWQuIFJldHVybnMgdGhlIHJlbW92ZWQgZW50cnksIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICoKKyAqIEFyZ3VtZW50IGV4cGxhbmF0aW9uIGlzIHRoZSBzYW1lIGFzIGluIGBoYXNobWFwX2dldGAuCisgKi8KK3N0cnVjdCBoYXNobWFwX2VudHJ5ICpoYXNobWFwX3JlbW92ZShzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqa2V5LAorCQkJCQljb25zdCB2b2lkICprZXlkYXRhKTsKKworLyoKKyAqIFJlbW92ZXMgYSBoYXNobWFwIGVudHJ5IGNvbnRhaW5lZCB3aXRoaW4gQGtleXZhciwKKyAqIHdoZXJlIEBrZXl2YXIgaXMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGNvbnRhaW5pbmcgYQorICogInN0cnVjdCBoYXNobWFwX2VudHJ5IiBAbWVtYmVyLgorICoKKyAqIFNlZSBgaGFzaG1hcF9nZXRgIGZvciBhbiBleHBsYW5hdGlvbiBvZiBAa2V5ZGF0YQorICoKKyAqIFJldHVybnMgdGhlIHJlcGxhY2VkIHBvaW50ZXIgd2hpY2ggaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyBAa2V5dmFyLAorICogb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKi8KKyNkZWZpbmUgaGFzaG1hcF9yZW1vdmVfZW50cnkobWFwLCBrZXl2YXIsIG1lbWJlciwga2V5ZGF0YSkgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldCggXAorCQkJaGFzaG1hcF9yZW1vdmUobWFwLCAmKGtleXZhciktPm1lbWJlciwga2V5ZGF0YSksIFwKKwkJCU9GRlNFVE9GX1ZBUihrZXl2YXIsIG1lbWJlcikpCisKKy8qCisgKiBSZXR1cm5zIHRoZSBgYnVja2V0YCBhbiBlbnRyeSBpcyBzdG9yZWQgaW4uCisgKiBVc2VmdWwgZm9yIG11bHRpdGhyZWFkZWQgcmVhZCBhY2Nlc3MuCisgKi8KK2ludCBoYXNobWFwX2J1Y2tldChjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLCB1bnNpZ25lZCBpbnQgaGFzaCk7CisKKy8qCisgKiBVc2VkIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcyBvZiBhIGhhc2htYXAuIE5vdGUgdGhhdCBpdCBpcworICogbm90IHNhZmUgdG8gYWRkIG9yIHJlbW92ZSBlbnRyaWVzIHRvIHRoZSBoYXNobWFwIHdoaWxlCisgKiBpdGVyYXRpbmcuCisgKi8KK3N0cnVjdCBoYXNobWFwX2l0ZXIgeworCXN0cnVjdCBoYXNobWFwICptYXA7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKm5leHQ7CisJdW5zaWduZWQgaW50IHRhYmxlcG9zOworfTsKKworLyogSW5pdGlhbGl6ZXMgYSBgaGFzaG1hcF9pdGVyYCBzdHJ1Y3R1cmUuICovCit2b2lkIGhhc2htYXBfaXRlcl9pbml0KHN0cnVjdCBoYXNobWFwICptYXAsIHN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpOworCisvKiBSZXR1cm5zIHRoZSBuZXh0IGhhc2htYXBfZW50cnksIG9yIE5VTEwgaWYgdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcy4gKi8KK3N0cnVjdCBoYXNobWFwX2VudHJ5ICpoYXNobWFwX2l0ZXJfbmV4dChzdHJ1Y3QgaGFzaG1hcF9pdGVyICppdGVyKTsKKworLyogSW5pdGlhbGl6ZXMgdGhlIGl0ZXJhdG9yIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbnRyeSwgaWYgYW55LiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqaGFzaG1hcF9pdGVyX2ZpcnN0KHN0cnVjdCBoYXNobWFwICptYXAsCisJCXN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpCit7CisJaGFzaG1hcF9pdGVyX2luaXQobWFwLCBpdGVyKTsKKwlyZXR1cm4gaGFzaG1hcF9pdGVyX25leHQoaXRlcik7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBmaXJzdCBlbnRyeSBpbiBAbWFwIHVzaW5nIEBpdGVyLCB3aGVyZSB0aGUgZW50cnkgaXMgb2YKKyAqIEB0eXBlIChlLmcuICJzdHJ1Y3QgZm9vIikgYW5kIEBtZW1iZXIgaXMgdGhlIG5hbWUgb2YgdGhlCisgKiAic3RydWN0IGhhc2htYXBfZW50cnkiIGluIEB0eXBlCisgKi8KKyNkZWZpbmUgaGFzaG1hcF9pdGVyX2ZpcnN0X2VudHJ5KG1hcCwgaXRlciwgdHlwZSwgbWVtYmVyKSBcCisJY29udGFpbmVyX29mX29yX251bGwoaGFzaG1hcF9pdGVyX2ZpcnN0KG1hcCwgaXRlciksIHR5cGUsIG1lbWJlcikKKworLyogaW50ZXJuYWwgbWFjcm8gZm9yIGhhc2htYXBfZm9yX2VhY2hfZW50cnkgKi8KKyNkZWZpbmUgaGFzaG1hcF9pdGVyX25leHRfZW50cnlfb2Zmc2V0KGl0ZXIsIG9mZnNldCkgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldChoYXNobWFwX2l0ZXJfbmV4dChpdGVyKSwgb2Zmc2V0KQorCisvKiBpbnRlcm5hbCBtYWNybyBmb3IgaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSAqLworI2RlZmluZSBoYXNobWFwX2l0ZXJfZmlyc3RfZW50cnlfb2Zmc2V0KG1hcCwgaXRlciwgb2Zmc2V0KSBcCisJY29udGFpbmVyX29mX29yX251bGxfb2Zmc2V0KGhhc2htYXBfaXRlcl9maXJzdChtYXAsIGl0ZXIpLCBvZmZzZXQpCisKKy8qCisgKiBpdGVyYXRlIHRocm91Z2ggQG1hcCB1c2luZyBAaXRlciwgQHZhciBpcyBhIHBvaW50ZXIgdG8gYSB0eXBlCisgKiBjb250YWluaW5nIGEgQG1lbWJlciB3aGljaCBpcyBhICJzdHJ1Y3QgaGFzaG1hcF9lbnRyeSIKKyAqLworI2RlZmluZSBoYXNobWFwX2Zvcl9lYWNoX2VudHJ5KG1hcCwgaXRlciwgdmFyLCBtZW1iZXIpIFwKKwlmb3IgKHZhciA9IGhhc2htYXBfaXRlcl9maXJzdF9lbnRyeV9vZmZzZXQobWFwLCBpdGVyLCBcCisJCQkJCQlPRkZTRVRPRl9WQVIodmFyLCBtZW1iZXIpKTsgXAorCQl2YXI7IFwKKwkJdmFyID0gaGFzaG1hcF9pdGVyX25leHRfZW50cnlfb2Zmc2V0KGl0ZXIsIFwKKwkJCQkJCU9GRlNFVE9GX1ZBUih2YXIsIG1lbWJlcikpKQorCisvKgorICogcmV0dXJucyBhIHBvaW50ZXIgb2YgdHlwZSBtYXRjaGluZyBAa2V5dmFyLCBvciBOVUxMIGlmIG5vdGhpbmcgZm91bmQuCisgKiBAa2V5dmFyIGlzIGEgcG9pbnRlciB0byBhIHN0cnVjdCBjb250YWluaW5nIGEKKyAqICJzdHJ1Y3QgaGFzaG1hcF9lbnRyeSIgQG1lbWJlci4KKyAqLworI2RlZmluZSBoYXNobWFwX2dldF9lbnRyeShtYXAsIGtleXZhciwgbWVtYmVyLCBrZXlkYXRhKSBcCisJY29udGFpbmVyX29mX29yX251bGxfb2Zmc2V0KCBcCisJCQkJaGFzaG1hcF9nZXQobWFwLCAmKGtleXZhciktPm1lbWJlciwga2V5ZGF0YSksIFwKKwkJCQlPRkZTRVRPRl9WQVIoa2V5dmFyLCBtZW1iZXIpKQorCisjZGVmaW5lIGhhc2htYXBfZ2V0X2VudHJ5X2Zyb21faGFzaChtYXAsIGhhc2gsIGtleWRhdGEsIHR5cGUsIG1lbWJlcikgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsKGhhc2htYXBfZ2V0X2Zyb21faGFzaChtYXAsIGhhc2gsIGtleWRhdGEpLCBcCisJCQkJdHlwZSwgbWVtYmVyKQorLyoKKyAqIHJldHVybnMgdGhlIG5leHQgZXF1YWwgcG9pbnRlciB0byBAdmFyLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqIEB2YXIgaXMgYSBwb2ludGVyIG9mIGFueSB0eXBlIGNvbnRhaW5pbmcgInN0cnVjdCBoYXNobWFwX2VudHJ5IgorICogQG1lbWJlciBpcyB0aGUgbmFtZSBvZiB0aGUgInN0cnVjdCBoYXNobWFwX2VudHJ5IiBmaWVsZAorICovCisjZGVmaW5lIGhhc2htYXBfZ2V0X25leHRfZW50cnkobWFwLCB2YXIsIG1lbWJlcikgXAorCWNvbnRhaW5lcl9vZl9vcl9udWxsX29mZnNldChoYXNobWFwX2dldF9uZXh0KG1hcCwgJih2YXIpLT5tZW1iZXIpLCBcCisJCQkJT0ZGU0VUT0ZfVkFSKHZhciwgbWVtYmVyKSkKKworLyoKKyAqIGl0ZXJhdGUgQG1hcCBzdGFydGluZyBmcm9tIEB2YXIsIHdoZXJlIEB2YXIgaXMgYSBwb2ludGVyIG9mIEB0eXBlCisgKiBhbmQgQG1lbWJlciBpcyB0aGUgbmFtZSBvZiB0aGUgInN0cnVjdCBoYXNobWFwX2VudHJ5IiBmaWVsZCBpbiBAdHlwZQorICovCisjZGVmaW5lIGhhc2htYXBfZm9yX2VhY2hfZW50cnlfZnJvbShtYXAsIHZhciwgbWVtYmVyKSBcCisJZm9yICg7IFwKKwkJdmFyOyBcCisJCXZhciA9IGhhc2htYXBfZ2V0X25leHRfZW50cnkobWFwLCB2YXIsIG1lbWJlcikpCisKKy8qCisgKiBEaXNhYmxlIGl0ZW0gY291bnRpbmcgYW5kIGF1dG9tYXRpYyByZWhhc2hpbmcgd2hlbiBhZGRpbmcvcmVtb3ZpbmcgaXRlbXMuCisgKgorICogTm9ybWFsbHksIHRoZSBoYXNobWFwIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIG1hcAorICogYW5kIHVzZXMgaXQgdG8gZHluYW1pY2FsbHkgcmVzaXplIGl0LiAgVGhpcyAoYm90aCB0aGUgY291bnRpbmcgYW5kCisgKiB0aGUgcmVzaXppbmcpIGNhbiBjYXVzZSBwcm9ibGVtcyB3aGVuIHRoZSBtYXAgaXMgYmVpbmcgdXNlZCBieQorICogdGhyZWFkZWQgY2FsbGVycyAoYmVjYXVzZSB0aGUgaGFzaG1hcCBjb2RlIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlCisgKiBsb2NraW5nIHN0cmF0ZWd5IHVzZWQgYnkgdGhlIHRocmVhZGVkIGNhbGxlcnMgYW5kIHRoZXJlZm9yZSwgZG9lcworICogbm90IGtub3cgaG93IHRvIHByb3RlY3QgdGhlICJwcml2YXRlX3NpemUiIGNvdW50ZXIpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaG1hcF9kaXNhYmxlX2l0ZW1fY291bnRpbmcoc3RydWN0IGhhc2htYXAgKm1hcCkKK3sKKwltYXAtPmRvX2NvdW50X2l0ZW1zID0gMDsKK30KKworLyoKKyAqIFJlLWVuYWJsZSBpdGVtIGNvdW50aW5nIHdoZW4gYWRkaW5nL3JlbW92aW5nIGl0ZW1zLgorICogSWYgY291bnRpbmcgaXMgY3VycmVudGx5IGRpc2FibGVkLCBpdCB3aWxsIGZvcmNlIGNvdW50IHRoZW0uCisgKiBJdCBXSUxMIE5PVCBhdXRvbWF0aWNhbGx5IHJlaGFzaCB0aGVtLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaG1hcF9lbmFibGVfaXRlbV9jb3VudGluZyhzdHJ1Y3QgaGFzaG1hcCAqbWFwKQoreworCXVuc2lnbmVkIGludCBuID0gMDsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisKKwlpZiAobWFwLT5kb19jb3VudF9pdGVtcykKKwkJcmV0dXJuOworCisJaGFzaG1hcF9pdGVyX2luaXQobWFwLCAmaXRlcik7CisJd2hpbGUgKGhhc2htYXBfaXRlcl9uZXh0KCZpdGVyKSkKKwkJbisrOworCisJbWFwLT5kb19jb3VudF9pdGVtcyA9IDE7CisJbWFwLT5wcml2YXRlX3NpemUgPSBuOworfQorCisvKiBTdHJpbmcgaW50ZXJuaW5nICovCisKKy8qCisgKiBSZXR1cm5zIHRoZSB1bmlxdWUsIGludGVybmVkIHZlcnNpb24gb2YgdGhlIHNwZWNpZmllZCBzdHJpbmcgb3IgZGF0YSwKKyAqIHNpbWlsYXIgdG8gdGhlIGBTdHJpbmcuaW50ZXJuYCBBUEkgaW4gSmF2YSBhbmQgLk5FVCwgcmVzcGVjdGl2ZWx5LgorICogSW50ZXJuZWQgc3RyaW5ncyByZW1haW4gdmFsaWQgZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MuCisgKgorICogQ2FuIGJlIHVzZWQgYXMgYFt4XXN0cmR1cCgpYCBvciBgeG1lbWR1cHpgIHJlcGxhY2VtZW50LCBleGNlcHQgdGhhdCBpbnRlcm5lZAorICogc3RyaW5ncyAvIGRhdGEgbXVzdCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKgorICogSW50ZXJuZWQgc3RyaW5ncyBhcmUgYmVzdCB1c2VkIGZvciBzaG9ydCBzdHJpbmdzIHdpdGggaGlnaCBwcm9iYWJpbGl0eSBvZgorICogZHVwbGljYXRlcy4KKyAqCisgKiBVc2VzIGEgaGFzaG1hcCB0byBzdG9yZSB0aGUgcG9vbCBvZiBpbnRlcm5lZCBzdHJpbmdzLgorICovCitjb25zdCB2b2lkICptZW1pbnRlcm4oY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnN0cmludGVybihjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIG1lbWludGVybihzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9oZWxwLmMgYi9oZWxwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2NzYyNAotLS0gL2Rldi9udWxsCisrKyBiL2hlbHAuYwpAQCAtMCwwICsxLDc5NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJsZXZlbnNodGVpbi5oIgorI2luY2x1ZGUgImhlbHAuaCIKKyNpbmNsdWRlICJjb21tYW5kLWxpc3QuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdHJ1Y3QgY2F0ZWdvcnlfZGVzY3JpcHRpb24geworCXVpbnQzMl90IGNhdGVnb3J5OworCWNvbnN0IGNoYXIgKmRlc2M7Cit9Oworc3RhdGljIHVpbnQzMl90IGNvbW1vbl9tYXNrID0KKwlDQVRfaW5pdCB8IENBVF93b3JrdHJlZSB8IENBVF9pbmZvIHwKKwlDQVRfaGlzdG9yeSB8IENBVF9yZW1vdGU7CitzdGF0aWMgc3RydWN0IGNhdGVnb3J5X2Rlc2NyaXB0aW9uIGNvbW1vbl9jYXRlZ29yaWVzW10gPSB7CisJeyBDQVRfaW5pdCwgTl8oInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIikgfSwKKwl7IENBVF93b3JrdHJlZSwgTl8oIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIikgfSwKKwl7IENBVF9pbmZvLCBOXygiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIikgfSwKKwl7IENBVF9oaXN0b3J5LCBOXygiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIpIH0sCisJeyBDQVRfcmVtb3RlLCBOXygiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIikgfSwKKwl7IDAsIE5VTEwgfQorfTsKK3N0YXRpYyBzdHJ1Y3QgY2F0ZWdvcnlfZGVzY3JpcHRpb24gbWFpbl9jYXRlZ29yaWVzW10gPSB7CisJeyBDQVRfbWFpbnBvcmNlbGFpbiwgTl8oIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIikgfSwKKwl7IENBVF9hbmNpbGxhcnltYW5pcHVsYXRvcnMsIE5fKCJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiKSB9LAorCXsgQ0FUX2FuY2lsbGFyeWludGVycm9nYXRvcnMsIE5fKCJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIikgfSwKKwl7IENBVF9mb3JlaWduc2NtaW50ZXJmYWNlLCBOXygiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiKSB9LAorCXsgQ0FUX3BsdW1iaW5nbWFuaXB1bGF0b3JzLCBOXygiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIikgfSwKKwl7IENBVF9wbHVtYmluZ2ludGVycm9nYXRvcnMsIE5fKCJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIikgfSwKKwl7IENBVF9zeW5jaGluZ3JlcG9zaXRvcmllcywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIikgfSwKKwl7IENBVF9wdXJlaGVscGVycywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiKSB9LAorCXsgMCwgTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZHJvcF9wcmVmaXgoY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgY2F0ZWdvcnkpCit7CisJY29uc3QgY2hhciAqbmV3X25hbWU7CisKKwlpZiAoc2tpcF9wcmVmaXgobmFtZSwgImdpdC0iLCAmbmV3X25hbWUpKQorCQlyZXR1cm4gbmV3X25hbWU7CisJaWYgKGNhdGVnb3J5ID09IENBVF9ndWlkZSAmJiBza2lwX3ByZWZpeChuYW1lLCAiZ2l0IiwgJm5ld19uYW1lKSkKKwkJcmV0dXJuIG5ld19uYW1lOworCXJldHVybiBuYW1lOworCit9CisKK3N0YXRpYyB2b2lkIGV4dHJhY3RfY21kcyhzdHJ1Y3QgY21kbmFtZV9oZWxwICoqcF9jbWRzLCB1aW50MzJfdCBtYXNrKQoreworCWludCBpLCBuciA9IDA7CisJc3RydWN0IGNtZG5hbWVfaGVscCAqY21kczsKKworCWlmIChBUlJBWV9TSVpFKGNvbW1hbmRfbGlzdCkgPT0gMCkKKwkJQlVHKCJlbXB0eSBjb21tYW5kX2xpc3RbXSBpcyBhIHNpZ24gb2YgYnJva2VuIGdlbmVyYXRlLWNtZGxpc3Quc2giKTsKKworCUFMTE9DX0FSUkFZKGNtZHMsIEFSUkFZX1NJWkUoY29tbWFuZF9saXN0KSArIDEpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZF9saXN0KTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjbWRuYW1lX2hlbHAgKmNtZCA9IGNvbW1hbmRfbGlzdCArIGk7CisKKwkJaWYgKCEoY21kLT5jYXRlZ29yeSAmIG1hc2spKQorCQkJY29udGludWU7CisKKwkJY21kc1tucl0gPSAqY21kOworCQljbWRzW25yXS5uYW1lID0gZHJvcF9wcmVmaXgoY21kLT5uYW1lLCBjbWQtPmNhdGVnb3J5KTsKKworCQlucisrOworCX0KKwljbWRzW25yXS5uYW1lID0gTlVMTDsKKwkqcF9jbWRzID0gY21kczsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWFuZF9saXN0KGNvbnN0IHN0cnVjdCBjbWRuYW1lX2hlbHAgKmNtZHMsCisJCQkgICAgICAgdWludDMyX3QgbWFzaywgaW50IGxvbmdlc3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBjbWRzW2ldLm5hbWU7IGkrKykgeworCQlpZiAoY21kc1tpXS5jYXRlZ29yeSAmIG1hc2spIHsKKwkJCXNpemVfdCBsZW4gPSBzdHJsZW4oY21kc1tpXS5uYW1lKTsKKwkJCXByaW50ZigiICAgJXMgICAiLCBjbWRzW2ldLm5hbWUpOworCQkJaWYgKGxvbmdlc3QgPiBsZW4pCisJCQkJbXB1dF9jaGFyKCcgJywgbG9uZ2VzdCAtIGxlbik7CisJCQlwdXRzKF8oY21kc1tpXS5oZWxwKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY21kX25hbWVfY21wKGNvbnN0IHZvaWQgKmVsZW0xLCBjb25zdCB2b2lkICplbGVtMikKK3sKKwljb25zdCBzdHJ1Y3QgY21kbmFtZV9oZWxwICplMSA9IGVsZW0xOworCWNvbnN0IHN0cnVjdCBjbWRuYW1lX2hlbHAgKmUyID0gZWxlbTI7CisKKwlyZXR1cm4gc3RyY21wKGUxLT5uYW1lLCBlMi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2NtZF9ieV9jYXRlZ29yeShjb25zdCBzdHJ1Y3QgY2F0ZWdvcnlfZGVzY3JpcHRpb24gKmNhdGRlc2MsCisJCQkJICBpbnQgKmxvbmdlc3RfcCkKK3sKKwlzdHJ1Y3QgY21kbmFtZV9oZWxwICpjbWRzOworCWludCBsb25nZXN0ID0gMDsKKwlpbnQgaSwgbnIgPSAwOworCXVpbnQzMl90IG1hc2sgPSAwOworCisJZm9yIChpID0gMDsgY2F0ZGVzY1tpXS5kZXNjOyBpKyspCisJCW1hc2sgfD0gY2F0ZGVzY1tpXS5jYXRlZ29yeTsKKworCWV4dHJhY3RfY21kcygmY21kcywgbWFzayk7CisKKwlmb3IgKGkgPSAwOyBjbWRzW2ldLm5hbWU7IGkrKywgbnIrKykgeworCQlpZiAobG9uZ2VzdCA8IHN0cmxlbihjbWRzW2ldLm5hbWUpKQorCQkJbG9uZ2VzdCA9IHN0cmxlbihjbWRzW2ldLm5hbWUpOworCX0KKwlRU09SVChjbWRzLCBuciwgY21kX25hbWVfY21wKTsKKworCWZvciAoaSA9IDA7IGNhdGRlc2NbaV0uZGVzYzsgaSsrKSB7CisJCXVpbnQzMl90IG1hc2sgPSBjYXRkZXNjW2ldLmNhdGVnb3J5OworCQljb25zdCBjaGFyICpkZXNjID0gY2F0ZGVzY1tpXS5kZXNjOworCisJCXByaW50ZigiXG4lc1xuIiwgXyhkZXNjKSk7CisJCXByaW50X2NvbW1hbmRfbGlzdChjbWRzLCBtYXNrLCBsb25nZXN0KTsKKwl9CisJZnJlZShjbWRzKTsKKwlpZiAobG9uZ2VzdF9wKQorCQkqbG9uZ2VzdF9wID0gbG9uZ2VzdDsKK30KKwordm9pZCBhZGRfY21kbmFtZShzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJc3RydWN0IGNtZG5hbWUgKmVudDsKKwlGTEVYX0FMTE9DX01FTShlbnQsIG5hbWUsIG5hbWUsIGxlbik7CisJZW50LT5sZW4gPSBsZW47CisKKwlBTExPQ19HUk9XKGNtZHMtPm5hbWVzLCBjbWRzLT5jbnQgKyAxLCBjbWRzLT5hbGxvYyk7CisJY21kcy0+bmFtZXNbY21kcy0+Y250KytdID0gZW50OworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9jbWRuYW1lcyhzdHJ1Y3QgY21kbmFtZXMgKmNtZHMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGNtZHMtPmNudDsgKytpKQorCQlmcmVlKGNtZHMtPm5hbWVzW2ldKTsKKwlmcmVlKGNtZHMtPm5hbWVzKTsKKwljbWRzLT5jbnQgPSAwOworCWNtZHMtPmFsbG9jID0gMDsKK30KKworc3RhdGljIGludCBjbWRuYW1lX2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBjbWRuYW1lICphID0gKihzdHJ1Y3QgY21kbmFtZSAqKilhXzsKKwlzdHJ1Y3QgY21kbmFtZSAqYiA9ICooc3RydWN0IGNtZG5hbWUgKiopYl87CisJcmV0dXJuIHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgdW5pcShzdHJ1Y3QgY21kbmFtZXMgKmNtZHMpCit7CisJaW50IGksIGo7CisKKwlpZiAoIWNtZHMtPmNudCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gaiA9IDE7IGkgPCBjbWRzLT5jbnQ7IGkrKykgeworCQlpZiAoIXN0cmNtcChjbWRzLT5uYW1lc1tpXS0+bmFtZSwgY21kcy0+bmFtZXNbai0xXS0+bmFtZSkpCisJCQlmcmVlKGNtZHMtPm5hbWVzW2ldKTsKKwkJZWxzZQorCQkJY21kcy0+bmFtZXNbaisrXSA9IGNtZHMtPm5hbWVzW2ldOworCX0KKworCWNtZHMtPmNudCA9IGo7Cit9CisKK3ZvaWQgZXhjbHVkZV9jbWRzKHN0cnVjdCBjbWRuYW1lcyAqY21kcywgc3RydWN0IGNtZG5hbWVzICpleGNsdWRlcykKK3sKKwlpbnQgY2ksIGNqLCBlaTsKKwlpbnQgY21wOworCisJY2kgPSBjaiA9IGVpID0gMDsKKwl3aGlsZSAoY2kgPCBjbWRzLT5jbnQgJiYgZWkgPCBleGNsdWRlcy0+Y250KSB7CisJCWNtcCA9IHN0cmNtcChjbWRzLT5uYW1lc1tjaV0tPm5hbWUsIGV4Y2x1ZGVzLT5uYW1lc1tlaV0tPm5hbWUpOworCQlpZiAoY21wIDwgMCkKKwkJCWNtZHMtPm5hbWVzW2NqKytdID0gY21kcy0+bmFtZXNbY2krK107CisJCWVsc2UgaWYgKGNtcCA9PSAwKSB7CisJCQllaSsrOworCQkJZnJlZShjbWRzLT5uYW1lc1tjaSsrXSk7CisJCX0gZWxzZSBpZiAoY21wID4gMCkKKwkJCWVpKys7CisJfQorCisJd2hpbGUgKGNpIDwgY21kcy0+Y250KQorCQljbWRzLT5uYW1lc1tjaisrXSA9IGNtZHMtPm5hbWVzW2NpKytdOworCisJY21kcy0+Y250ID0gY2o7Cit9CisKK3N0YXRpYyB2b2lkIHByZXR0eV9wcmludF9jbWRuYW1lcyhzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsIHVuc2lnbmVkIGludCBjb2xvcHRzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kcy0+Y250OyBpKyspCisJCXN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgY21kcy0+bmFtZXNbaV0tPm5hbWUpOworCS8qCisJICogYWx3YXlzIGVuYWJsZSBjb2x1bW4gZGlzcGxheSwgd2Ugb25seSBjb25zdWx0IGNvbHVtbi4qCisJICogYWJvdXQgbGF5b3V0IHN0cmF0ZWd5IGFuZCBzdHVmZgorCSAqLworCWNvbG9wdHMgPSAoY29sb3B0cyAmIH5DT0xfRU5BQkxFX01BU0spIHwgQ09MX0VOQUJMRUQ7CisJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJY29wdHMuaW5kZW50ID0gIiAgIjsKKwljb3B0cy5wYWRkaW5nID0gMjsKKwlwcmludF9jb2x1bW5zKCZsaXN0LCBjb2xvcHRzLCAmY29wdHMpOworCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKK30KKworc3RhdGljIHZvaWQgbGlzdF9jb21tYW5kc19pbl9kaXIoc3RydWN0IGNtZG5hbWVzICpjbWRzLAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlESVIgKmRpciA9IG9wZW5kaXIocGF0aCk7CisJc3RydWN0IGRpcmVudCAqZGU7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbGVuOworCisJaWYgKCFkaXIpCisJCXJldHVybjsKKwlpZiAoIXByZWZpeCkKKwkJcHJlZml4ID0gImdpdC0iOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLyIsIHBhdGgpOworCWxlbiA9IGJ1Zi5sZW47CisKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWNvbnN0IGNoYXIgKmVudDsKKwkJc2l6ZV90IGVudGxlbjsKKworCQlpZiAoIXNraXBfcHJlZml4KGRlLT5kX25hbWUsIHByZWZpeCwgJmVudCkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKCZidWYsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZGUtPmRfbmFtZSk7CisJCWlmICghaXNfZXhlY3V0YWJsZShidWYuYnVmKSkKKwkJCWNvbnRpbnVlOworCisJCWVudGxlbiA9IHN0cmxlbihlbnQpOworCQlzdHJpcF9zdWZmaXgoZW50LCAiLmV4ZSIsICZlbnRsZW4pOworCisJCWFkZF9jbWRuYW1lKGNtZHMsIGVudCwgZW50bGVuKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKwordm9pZCBsb2FkX2NvbW1hbmRfbGlzdChjb25zdCBjaGFyICpwcmVmaXgsCisJCXN0cnVjdCBjbWRuYW1lcyAqbWFpbl9jbWRzLAorCQlzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpCit7CisJY29uc3QgY2hhciAqZW52X3BhdGggPSBnZXRlbnYoIlBBVEgiKTsKKwljb25zdCBjaGFyICpleGVjX3BhdGggPSBnaXRfZXhlY19wYXRoKCk7CisKKwlpZiAoZXhlY19wYXRoKSB7CisJCWxpc3RfY29tbWFuZHNfaW5fZGlyKG1haW5fY21kcywgZXhlY19wYXRoLCBwcmVmaXgpOworCQlRU09SVChtYWluX2NtZHMtPm5hbWVzLCBtYWluX2NtZHMtPmNudCwgY21kbmFtZV9jb21wYXJlKTsKKwkJdW5pcShtYWluX2NtZHMpOworCX0KKworCWlmIChlbnZfcGF0aCkgeworCQljaGFyICpwYXRocywgKnBhdGgsICpjb2xvbjsKKwkJcGF0aCA9IHBhdGhzID0geHN0cmR1cChlbnZfcGF0aCk7CisJCXdoaWxlICgxKSB7CisJCQlpZiAoKGNvbG9uID0gc3RyY2hyKHBhdGgsIFBBVEhfU0VQKSkpCisJCQkJKmNvbG9uID0gMDsKKwkJCWlmICghZXhlY19wYXRoIHx8IHN0cmNtcChwYXRoLCBleGVjX3BhdGgpKQorCQkJCWxpc3RfY29tbWFuZHNfaW5fZGlyKG90aGVyX2NtZHMsIHBhdGgsIHByZWZpeCk7CisKKwkJCWlmICghY29sb24pCisJCQkJYnJlYWs7CisJCQlwYXRoID0gY29sb24gKyAxOworCQl9CisJCWZyZWUocGF0aHMpOworCisJCVFTT1JUKG90aGVyX2NtZHMtPm5hbWVzLCBvdGhlcl9jbWRzLT5jbnQsIGNtZG5hbWVfY29tcGFyZSk7CisJCXVuaXEob3RoZXJfY21kcyk7CisJfQorCWV4Y2x1ZGVfY21kcyhvdGhlcl9jbWRzLCBtYWluX2NtZHMpOworfQorCit2b2lkIGxpc3RfY29tbWFuZHModW5zaWduZWQgaW50IGNvbG9wdHMsCisJCSAgIHN0cnVjdCBjbWRuYW1lcyAqbWFpbl9jbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpCit7CisJaWYgKG1haW5fY21kcy0+Y250KSB7CisJCWNvbnN0IGNoYXIgKmV4ZWNfcGF0aCA9IGdpdF9leGVjX3BhdGgoKTsKKwkJcHJpbnRmX2xuKF8oImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIpLCBleGVjX3BhdGgpOworCQlwdXRjaGFyKCdcbicpOworCQlwcmV0dHlfcHJpbnRfY21kbmFtZXMobWFpbl9jbWRzLCBjb2xvcHRzKTsKKwkJcHV0Y2hhcignXG4nKTsKKwl9CisKKwlpZiAob3RoZXJfY21kcy0+Y250KSB7CisJCXByaW50Zl9sbihfKCJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiKSk7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXByZXR0eV9wcmludF9jbWRuYW1lcyhvdGhlcl9jbWRzLCBjb2xvcHRzKTsKKwkJcHV0Y2hhcignXG4nKTsKKwl9Cit9CisKK3ZvaWQgbGlzdF9jb21tb25fY21kc19oZWxwKHZvaWQpCit7CisJcHV0cyhfKCJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiKSk7CisJcHJpbnRfY21kX2J5X2NhdGVnb3J5KGNvbW1vbl9jYXRlZ29yaWVzLCBOVUxMKTsKK30KKwordm9pZCBsaXN0X2FsbF9tYWluX2NtZHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCXN0cnVjdCBjbWRuYW1lcyBtYWluX2NtZHMsIG90aGVyX2NtZHM7CisJaW50IGk7CisKKwltZW1zZXQoJm1haW5fY21kcywgMCwgc2l6ZW9mKG1haW5fY21kcykpOworCW1lbXNldCgmb3RoZXJfY21kcywgMCwgc2l6ZW9mKG90aGVyX2NtZHMpKTsKKwlsb2FkX2NvbW1hbmRfbGlzdCgiZ2l0LSIsICZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYWluX2NtZHMuY250OyBpKyspCisJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBtYWluX2NtZHMubmFtZXNbaV0tPm5hbWUpOworCisJY2xlYW5fY21kbmFtZXMoJm1haW5fY21kcyk7CisJY2xlYW5fY21kbmFtZXMoJm90aGVyX2NtZHMpOworfQorCit2b2lkIGxpc3RfYWxsX290aGVyX2NtZHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCXN0cnVjdCBjbWRuYW1lcyBtYWluX2NtZHMsIG90aGVyX2NtZHM7CisJaW50IGk7CisKKwltZW1zZXQoJm1haW5fY21kcywgMCwgc2l6ZW9mKG1haW5fY21kcykpOworCW1lbXNldCgmb3RoZXJfY21kcywgMCwgc2l6ZW9mKG90aGVyX2NtZHMpKTsKKwlsb2FkX2NvbW1hbmRfbGlzdCgiZ2l0LSIsICZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBvdGhlcl9jbWRzLmNudDsgaSsrKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgb3RoZXJfY21kcy5uYW1lc1tpXS0+bmFtZSk7CisKKwljbGVhbl9jbWRuYW1lcygmbWFpbl9jbWRzKTsKKwljbGVhbl9jbWRuYW1lcygmb3RoZXJfY21kcyk7Cit9CisKK3ZvaWQgbGlzdF9jbWRzX2J5X2NhdGVnb3J5KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCSAgIGNvbnN0IGNoYXIgKmNhdCkKK3sKKwlpbnQgaSwgbiA9IEFSUkFZX1NJWkUoY29tbWFuZF9saXN0KTsKKwl1aW50MzJfdCBjYXRfaWQgPSAwOworCisJZm9yIChpID0gMDsgY2F0ZWdvcnlfbmFtZXNbaV07IGkrKykgeworCQlpZiAoIXN0cmNtcChjYXQsIGNhdGVnb3J5X25hbWVzW2ldKSkgeworCQkJY2F0X2lkID0gMVVMIDw8IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWNhdF9pZCkKKwkJZGllKF8oInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciKSwgY2F0KTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3RydWN0IGNtZG5hbWVfaGVscCAqY21kID0gY29tbWFuZF9saXN0ICsgaTsKKworCQlpZiAoIShjbWQtPmNhdGVnb3J5ICYgY2F0X2lkKSkKKwkJCWNvbnRpbnVlOworCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgZHJvcF9wcmVmaXgoY21kLT5uYW1lLCBjbWQtPmNhdGVnb3J5KSk7CisJfQorfQorCit2b2lkIGxpc3RfY21kc19ieV9jb25maWcoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWNvbnN0IGNoYXIgKmNtZF9saXN0OworCisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgiY29tcGxldGlvbi5jb21tYW5kcyIsICZjbWRfbGlzdCkpCisJCXJldHVybjsKKworCXN0cmluZ19saXN0X3NvcnQobGlzdCk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMobGlzdCwgMCk7CisKKwl3aGlsZSAoKmNtZF9saXN0KSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqcCA9IHN0cmNocm51bChjbWRfbGlzdCwgJyAnKTsKKworCQlzdHJidWZfYWRkKCZzYiwgY21kX2xpc3QsIHAgLSBjbWRfbGlzdCk7CisJCWlmIChzYi5idWZbMF0gPT0gJy0nKQorCQkJc3RyaW5nX2xpc3RfcmVtb3ZlKGxpc3QsIHNiLmJ1ZiArIDEsIDApOworCQllbHNlCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQobGlzdCwgc2IuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJd2hpbGUgKCpwID09ICcgJykKKwkJCXArKzsKKwkJY21kX2xpc3QgPSBwOworCX0KK30KKwordm9pZCBsaXN0X2NvbW1vbl9ndWlkZXNfaGVscCh2b2lkKQoreworCXN0cnVjdCBjYXRlZ29yeV9kZXNjcmlwdGlvbiBjYXRkZXNjW10gPSB7CisJCXsgQ0FUX2d1aWRlLCBOXygiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiKSB9LAorCQl7IDAsIE5VTEwgfQorCX07CisJcHJpbnRfY21kX2J5X2NhdGVnb3J5KGNhdGRlc2MsIE5VTEwpOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0cnVjdCBzbG90X2V4cGFuc2lvbiB7CisJY29uc3QgY2hhciAqcHJlZml4OworCWNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyOworCXZvaWQgKCpmbikoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOworCWludCBmb3VuZDsKK307CisKK3ZvaWQgbGlzdF9jb25maWdfaGVscChpbnQgZm9yX2h1bWFuKQoreworCXN0cnVjdCBzbG90X2V4cGFuc2lvbiBzbG90X2V4cGFuc2lvbnNbXSA9IHsKKwkJeyAiYWR2aWNlIiwgIioiLCBsaXN0X2NvbmZpZ19hZHZpY2VzIH0sCisJCXsgImNvbG9yLmJyYW5jaCIsICI8c2xvdD4iLCBsaXN0X2NvbmZpZ19jb2xvcl9icmFuY2hfc2xvdHMgfSwKKwkJeyAiY29sb3IuZGVjb3JhdGUiLCAiPHNsb3Q+IiwgbGlzdF9jb25maWdfY29sb3JfZGVjb3JhdGVfc2xvdHMgfSwKKwkJeyAiY29sb3IuZGlmZiIsICI8c2xvdD4iLCBsaXN0X2NvbmZpZ19jb2xvcl9kaWZmX3Nsb3RzIH0sCisJCXsgImNvbG9yLmdyZXAiLCAiPHNsb3Q+IiwgbGlzdF9jb25maWdfY29sb3JfZ3JlcF9zbG90cyB9LAorCQl7ICJjb2xvci5pbnRlcmFjdGl2ZSIsICI8c2xvdD4iLCBsaXN0X2NvbmZpZ19jb2xvcl9pbnRlcmFjdGl2ZV9zbG90cyB9LAorCQl7ICJjb2xvci5yZW1vdGUiLCAiPHNsb3Q+IiwgbGlzdF9jb25maWdfY29sb3Jfc2lkZWJhbmRfc2xvdHMgfSwKKwkJeyAiY29sb3Iuc3RhdHVzIiwgIjxzbG90PiIsIGxpc3RfY29uZmlnX2NvbG9yX3N0YXR1c19zbG90cyB9LAorCQl7ICJmc2NrIiwgIjxtc2ctaWQ+IiwgbGlzdF9jb25maWdfZnNja19tc2dfaWRzIH0sCisJCXsgInJlY2VpdmUuZnNjayIsICI8bXNnLWlkPiIsIGxpc3RfY29uZmlnX2ZzY2tfbXNnX2lkcyB9LAorCQl7IE5VTEwsIE5VTEwsIE5VTEwgfQorCX07CisJY29uc3QgY2hhciAqKnA7CisJc3RydWN0IHNsb3RfZXhwYW5zaW9uICplOworCXN0cnVjdCBzdHJpbmdfbGlzdCBrZXlzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGk7CisKKwlmb3IgKHAgPSBjb25maWdfbmFtZV9saXN0OyAqcDsgcCsrKSB7CisJCWNvbnN0IGNoYXIgKnZhciA9ICpwOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJZm9yIChlID0gc2xvdF9leHBhbnNpb25zOyBlLT5wcmVmaXg7IGUrKykgeworCisJCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzLiVzIiwgZS0+cHJlZml4LCBlLT5wbGFjZWhvbGRlcik7CisJCQlpZiAoIXN0cmNhc2VjbXAodmFyLCBzYi5idWYpKSB7CisJCQkJZS0+Zm4oJmtleXMsIGUtPnByZWZpeCk7CisJCQkJZS0+Zm91bmQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlpZiAoIWUtPnByZWZpeCkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgma2V5cywgdmFyKTsKKwl9CisKKwlmb3IgKGUgPSBzbG90X2V4cGFuc2lvbnM7IGUtPnByZWZpeDsgZSsrKQorCQlpZiAoIWUtPmZvdW5kKQorCQkJQlVHKCJzbG90X2V4cGFuc2lvbiAlcy4lcyBpcyBub3QgdXNlZCIsCisJCQkgICAgZS0+cHJlZml4LCBlLT5wbGFjZWhvbGRlcik7CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZrZXlzKTsKKwlmb3IgKGkgPSAwOyBpIDwga2V5cy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnZhciA9IGtleXMuaXRlbXNbaV0uc3RyaW5nOworCQljb25zdCBjaGFyICp3aWxkY2FyZCwgKnRhZywgKmN1dDsKKworCQlpZiAoZm9yX2h1bWFuKSB7CisJCQlwdXRzKHZhcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXdpbGRjYXJkID0gc3RyY2hyKHZhciwgJyonKTsKKwkJdGFnID0gc3RyY2hyKHZhciwgJzwnKTsKKworCQlpZiAoIXdpbGRjYXJkICYmICF0YWcpIHsKKwkJCXB1dHModmFyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHdpbGRjYXJkICYmICF0YWcpCisJCQljdXQgPSB3aWxkY2FyZDsKKwkJZWxzZSBpZiAoIXdpbGRjYXJkICYmIHRhZykKKwkJCWN1dCA9IHRhZzsKKwkJZWxzZQorCQkJY3V0ID0gd2lsZGNhcmQgPCB0YWcgPyB3aWxkY2FyZCA6IHRhZzsKKworCQkvKgorCQkgKiBXZSBtYXkgcHJvZHVjZSBkdXBsaWNhdGVzLCBidXQgdGhhdCdzIHVwIHRvCisJCSAqIGdpdC1jb21wbGV0aW9uLmJhc2ggdG8gaGFuZGxlCisJCSAqLworCQlwcmludGYoIiUuKnNcbiIsIChpbnQpKGN1dCAtIHZhciksIHZhcik7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZrZXlzLCAwKTsKK30KKworc3RhdGljIGludCBnZXRfYWxpYXMoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSBkYXRhOworCisJaWYgKHNraXBfcHJlZml4KHZhciwgImFsaWFzLiIsICZ2YXIpKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgdmFyKS0+dXRpbCA9IHhzdHJkdXAodmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGlzdF9hbGxfY21kc19oZWxwKHZvaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0IG90aGVycyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBhbGlhc19saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IGNtZG5hbWVfaGVscCAqYWxpYXNlczsKKwlpbnQgaSwgbG9uZ2VzdDsKKworCXByaW50Zl9sbihfKCJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiKSk7CisJcHJpbnRfY21kX2J5X2NhdGVnb3J5KG1haW5fY2F0ZWdvcmllcywgJmxvbmdlc3QpOworCisJbGlzdF9hbGxfb3RoZXJfY21kcygmb3RoZXJzKTsKKwlpZiAob3RoZXJzLm5yKQorCQlwcmludGYoIlxuJXNcbiIsIF8oIkV4dGVybmFsIGNvbW1hbmRzIikpOworCWZvciAoaSA9IDA7IGkgPCBvdGhlcnMubnI7IGkrKykKKwkJcHJpbnRmKCIgICAlc1xuIiwgb3RoZXJzLml0ZW1zW2ldLnN0cmluZyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm90aGVycywgMCk7CisKKwlnaXRfY29uZmlnKGdldF9hbGlhcywgJmFsaWFzX2xpc3QpOworCXN0cmluZ19saXN0X3NvcnQoJmFsaWFzX2xpc3QpOworCisJZm9yIChpID0gMDsgaSA8IGFsaWFzX2xpc3QubnI7IGkrKykgeworCQlzaXplX3QgbGVuID0gc3RybGVuKGFsaWFzX2xpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKwkJaWYgKGxvbmdlc3QgPCBsZW4pCisJCQlsb25nZXN0ID0gbGVuOworCX0KKworCWlmIChhbGlhc19saXN0Lm5yKSB7CisJCXByaW50ZigiXG4lc1xuIiwgXygiQ29tbWFuZCBhbGlhc2VzIikpOworCQlBTExPQ19BUlJBWShhbGlhc2VzLCBhbGlhc19saXN0Lm5yICsgMSk7CisJCWZvciAoaSA9IDA7IGkgPCBhbGlhc19saXN0Lm5yOyBpKyspIHsKKwkJCWFsaWFzZXNbaV0ubmFtZSA9IGFsaWFzX2xpc3QuaXRlbXNbaV0uc3RyaW5nOworCQkJYWxpYXNlc1tpXS5oZWxwID0gYWxpYXNfbGlzdC5pdGVtc1tpXS51dGlsOworCQkJYWxpYXNlc1tpXS5jYXRlZ29yeSA9IDE7CisJCX0KKwkJYWxpYXNlc1thbGlhc19saXN0Lm5yXS5uYW1lID0gTlVMTDsKKwkJcHJpbnRfY29tbWFuZF9saXN0KGFsaWFzZXMsIDEsIGxvbmdlc3QpOworCQlmcmVlKGFsaWFzZXMpOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmYWxpYXNfbGlzdCwgMSk7Cit9CisKK2ludCBpc19pbl9jbWRsaXN0KHN0cnVjdCBjbWRuYW1lcyAqYywgY29uc3QgY2hhciAqcykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYy0+Y250OyBpKyspCisJCWlmICghc3RyY21wKHMsIGMtPm5hbWVzW2ldLT5uYW1lKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1dG9jb3JyZWN0Oworc3RhdGljIHN0cnVjdCBjbWRuYW1lcyBhbGlhc2VzOworCitzdGF0aWMgaW50IGdpdF91bmtub3duX2NtZF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqcDsKKworCWlmICghc3RyY21wKHZhciwgImhlbHAuYXV0b2NvcnJlY3QiKSkKKwkJYXV0b2NvcnJlY3QgPSBnaXRfY29uZmlnX2ludCh2YXIsdmFsdWUpOworCS8qIEFsc28gdXNlIGFsaWFzZXMgZm9yIGNvbW1hbmQgbG9va3VwICovCisJaWYgKHNraXBfcHJlZml4KHZhciwgImFsaWFzLiIsICZwKSkKKwkJYWRkX2NtZG5hbWUoJmFsaWFzZXMsIHAsIHN0cmxlbihwKSk7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBsZXZlbnNodGVpbl9jb21wYXJlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKwljb25zdCBzdHJ1Y3QgY21kbmFtZSAqY29uc3QgKmMxID0gcDEsICpjb25zdCAqYzIgPSBwMjsKKwljb25zdCBjaGFyICpzMSA9ICgqYzEpLT5uYW1lLCAqczIgPSAoKmMyKS0+bmFtZTsKKwlpbnQgbDEgPSAoKmMxKS0+bGVuOworCWludCBsMiA9ICgqYzIpLT5sZW47CisJcmV0dXJuIGwxICE9IGwyID8gbDEgLSBsMiA6IHN0cmNtcChzMSwgczIpOworfQorCitzdGF0aWMgdm9pZCBhZGRfY21kX2xpc3Qoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKm9sZCkKK3sKKwlpbnQgaTsKKwlBTExPQ19HUk9XKGNtZHMtPm5hbWVzLCBjbWRzLT5jbnQgKyBvbGQtPmNudCwgY21kcy0+YWxsb2MpOworCisJZm9yIChpID0gMDsgaSA8IG9sZC0+Y250OyBpKyspCisJCWNtZHMtPm5hbWVzW2NtZHMtPmNudCsrXSA9IG9sZC0+bmFtZXNbaV07CisJRlJFRV9BTkRfTlVMTChvbGQtPm5hbWVzKTsKKwlvbGQtPmNudCA9IDA7Cit9CisKKy8qIEFuIGVtcGlyaWNhbGx5IGRlcml2ZWQgbWFnaWMgbnVtYmVyICovCisjZGVmaW5lIFNJTUlMQVJJVFlfRkxPT1IgNworI2RlZmluZSBTSU1JTEFSX0VOT1VHSCh4KSAoKHgpIDwgU0lNSUxBUklUWV9GTE9PUikKKworc3RhdGljIGNvbnN0IGNoYXIgYmFkX2ludGVycHJldGVyX2FkdmljZVtdID0KKwlOXygiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorCSJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/Iik7CisKK2NvbnN0IGNoYXIgKmhlbHBfdW5rbm93bl9jbWQoY29uc3QgY2hhciAqY21kKQoreworCWludCBpLCBuLCBiZXN0X3NpbWlsYXJpdHkgPSAwOworCXN0cnVjdCBjbWRuYW1lcyBtYWluX2NtZHMsIG90aGVyX2NtZHM7CisJc3RydWN0IGNtZG5hbWVfaGVscCAqY29tbW9uX2NtZHM7CisKKwltZW1zZXQoJm1haW5fY21kcywgMCwgc2l6ZW9mKG1haW5fY21kcykpOworCW1lbXNldCgmb3RoZXJfY21kcywgMCwgc2l6ZW9mKG90aGVyX2NtZHMpKTsKKwltZW1zZXQoJmFsaWFzZXMsIDAsIHNpemVvZihhbGlhc2VzKSk7CisKKwlyZWFkX2Vhcmx5X2NvbmZpZyhnaXRfdW5rbm93bl9jbWRfY29uZmlnLCBOVUxMKTsKKworCWxvYWRfY29tbWFuZF9saXN0KCJnaXQtIiwgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCisJYWRkX2NtZF9saXN0KCZtYWluX2NtZHMsICZhbGlhc2VzKTsKKwlhZGRfY21kX2xpc3QoJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCVFTT1JUKG1haW5fY21kcy5uYW1lcywgbWFpbl9jbWRzLmNudCwgY21kbmFtZV9jb21wYXJlKTsKKwl1bmlxKCZtYWluX2NtZHMpOworCisJZXh0cmFjdF9jbWRzKCZjb21tb25fY21kcywgY29tbW9uX21hc2spOworCisJLyogVGhpcyBhYnVzZXMgY21kbmFtZS0+bGVuIGZvciBsZXZlbnNodGVpbiBkaXN0YW5jZSAqLworCWZvciAoaSA9IDAsIG4gPSAwOyBpIDwgbWFpbl9jbWRzLmNudDsgaSsrKSB7CisJCWludCBjbXAgPSAwOyAvKiBhdm9pZCBjb21waWxlciBzdHVwaWRpdHkgKi8KKwkJY29uc3QgY2hhciAqY2FuZGlkYXRlID0gbWFpbl9jbWRzLm5hbWVzW2ldLT5uYW1lOworCisJCS8qCisJCSAqIEFuIGV4YWN0IG1hdGNoIG1lYW5zIHdlIGhhdmUgdGhlIGNvbW1hbmQsIGJ1dAorCQkgKiBmb3Igc29tZSByZWFzb24gZXhlYydpbmcgaXQgZ2F2ZSB1cyBFTk9FTlQ7IHByb2JhYmx5CisJCSAqIGl0J3MgYSBiYWQgaW50ZXJwcmV0ZXIgaW4gdGhlICMhIGxpbmUuCisJCSAqLworCQlpZiAoIXN0cmNtcChjYW5kaWRhdGUsIGNtZCkpCisJCQlkaWUoXyhiYWRfaW50ZXJwcmV0ZXJfYWR2aWNlKSwgY21kLCBjbWQpOworCisJCS8qIERvZXMgdGhlIGNhbmRpZGF0ZSBhcHBlYXIgaW4gY29tbW9uX2NtZHMgbGlzdD8gKi8KKwkJd2hpbGUgKGNvbW1vbl9jbWRzW25dLm5hbWUgJiYKKwkJICAgICAgIChjbXAgPSBzdHJjbXAoY29tbW9uX2NtZHNbbl0ubmFtZSwgY2FuZGlkYXRlKSkgPCAwKQorCQkJbisrOworCQlpZiAoY29tbW9uX2NtZHNbbl0ubmFtZSAmJiAhY21wKSB7CisJCQkvKiBZZXMsIHRoaXMgaXMgb25lIG9mIHRoZSBjb21tb24gY29tbWFuZHMgKi8KKwkJCW4rKzsgLyogdXNlIHRoZSBlbnRyeSBmcm9tIGNvbW1vbl9jbWRzW10gKi8KKwkJCWlmIChzdGFydHNfd2l0aChjYW5kaWRhdGUsIGNtZCkpIHsKKwkJCQkvKiBHaXZlIHByZWZpeCBtYXRjaCBhIHZlcnkgZ29vZCBzY29yZSAqLworCQkJCW1haW5fY21kcy5uYW1lc1tpXS0+bGVuID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCW1haW5fY21kcy5uYW1lc1tpXS0+bGVuID0KKwkJCWxldmVuc2h0ZWluKGNtZCwgY2FuZGlkYXRlLCAwLCAyLCAxLCAzKSArIDE7CisJfQorCUZSRUVfQU5EX05VTEwoY29tbW9uX2NtZHMpOworCisJUVNPUlQobWFpbl9jbWRzLm5hbWVzLCBtYWluX2NtZHMuY250LCBsZXZlbnNodGVpbl9jb21wYXJlKTsKKworCWlmICghbWFpbl9jbWRzLmNudCkKKwkJZGllKF8oIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIikpOworCisJLyogc2tpcCBhbmQgY291bnQgcHJlZml4IG1hdGNoZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgbWFpbl9jbWRzLmNudCAmJiAhbWFpbl9jbWRzLm5hbWVzW25dLT5sZW47IG4rKykKKwkJOyAvKiBzdGlsbCBjb3VudGluZyAqLworCisJaWYgKG1haW5fY21kcy5jbnQgPD0gbikgeworCQkvKiBwcmVmaXggbWF0Y2hlcyB3aXRoIGV2ZXJ5dGhpbmc/IHRoYXQgaXMgdG9vIGFtYmlndW91cyAqLworCQliZXN0X3NpbWlsYXJpdHkgPSBTSU1JTEFSSVRZX0ZMT09SICsgMTsKKwl9IGVsc2UgeworCQkvKiBjb3VudCBhbGwgdGhlIG1vc3Qgc2ltaWxhciBvbmVzICovCisJCWZvciAoYmVzdF9zaW1pbGFyaXR5ID0gbWFpbl9jbWRzLm5hbWVzW24rK10tPmxlbjsKKwkJICAgICAobiA8IG1haW5fY21kcy5jbnQgJiYKKwkJICAgICAgYmVzdF9zaW1pbGFyaXR5ID09IG1haW5fY21kcy5uYW1lc1tuXS0+bGVuKTsKKwkJICAgICBuKyspCisJCQk7IC8qIHN0aWxsIGNvdW50aW5nICovCisJfQorCWlmIChhdXRvY29ycmVjdCAmJiBuID09IDEgJiYgU0lNSUxBUl9FTk9VR0goYmVzdF9zaW1pbGFyaXR5KSkgeworCQljb25zdCBjaGFyICphc3N1bWVkID0gbWFpbl9jbWRzLm5hbWVzWzBdLT5uYW1lOworCQltYWluX2NtZHMubmFtZXNbMF0gPSBOVUxMOworCQljbGVhbl9jbWRuYW1lcygmbWFpbl9jbWRzKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBfKCJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgIgorCQkJICAgICAid2hpY2ggZG9lcyBub3QgZXhpc3QuIiksCisJCQkgICBjbWQpOworCQlpZiAoYXV0b2NvcnJlY3QgPCAwKQorCQkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkJICAgXygiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0ICIKKwkJCQkgICAgICJ5b3UgbWVhbnQgJyVzJy4iKSwKKwkJCQkgICBhc3N1bWVkKTsKKwkJZWxzZSB7CisJCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCQkgICBfKCJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsICIKKwkJCQkgICAgICJhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIpLAorCQkJCSAgIChmbG9hdClhdXRvY29ycmVjdC8xMC4wLCBhc3N1bWVkKTsKKwkJCXNsZWVwX21pbGxpc2VjKGF1dG9jb3JyZWN0ICogMTAwKTsKKwkJfQorCQlyZXR1cm4gYXNzdW1lZDsKKwl9CisKKwlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIpLCBjbWQpOworCisJaWYgKFNJTUlMQVJfRU5PVUdIKGJlc3Rfc2ltaWxhcml0eSkpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBRXygiXG5UaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiLAorCQkJICAgICAgIlxuVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kcyBhcmUiLAorCQkJICAgbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcbiIsIG1haW5fY21kcy5uYW1lc1tpXS0+bmFtZSk7CisJfQorCisJZXhpdCgxKTsKK30KKworaW50IGNtZF92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBidWlsZF9vcHRpb25zID0gMDsKKwljb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIiksCisJCU5VTEwKKwl9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAiYnVpbGQtb3B0aW9ucyIsICZidWlsZF9vcHRpb25zLAorCQkJICJhbHNvIHByaW50IGJ1aWxkIG9wdGlvbnMiKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJLyoKKwkgKiBUaGUgZm9ybWF0IG9mIHRoaXMgc3RyaW5nIHNob3VsZCBiZSBrZXB0IHN0YWJsZSBmb3IgY29tcGF0aWJpbGl0eQorCSAqIHdpdGggZXh0ZXJuYWwgcHJvamVjdHMgdGhhdCByZWx5IG9uIHRoZSBvdXRwdXQgb2YgImdpdCB2ZXJzaW9uIi4KKwkgKgorCSAqIEFsd2F5cyBzaG93IHRoZSB2ZXJzaW9uLCBldmVuIGlmIG90aGVyIG9wdGlvbnMgYXJlIGdpdmVuLgorCSAqLworCXByaW50ZigiZ2l0IHZlcnNpb24gJXNcbiIsIGdpdF92ZXJzaW9uX3N0cmluZyk7CisKKwlpZiAoYnVpbGRfb3B0aW9ucykgeworCQlwcmludGYoImNwdTogJXNcbiIsIEdJVF9IT1NUX0NQVSk7CisJCWlmIChnaXRfYnVpbHRfZnJvbV9jb21taXRfc3RyaW5nWzBdKQorCQkJcHJpbnRmKCJidWlsdCBmcm9tIGNvbW1pdDogJXNcbiIsCisJCQkgICAgICAgZ2l0X2J1aWx0X2Zyb21fY29tbWl0X3N0cmluZyk7CisJCWVsc2UKKwkJCXByaW50Zigibm8gY29tbWl0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1aWxkXG4iKTsKKwkJcHJpbnRmKCJzaXplb2YtbG9uZzogJWRcbiIsIChpbnQpc2l6ZW9mKGxvbmcpKTsKKwkJcHJpbnRmKCJzaXplb2Ytc2l6ZV90OiAlZFxuIiwgKGludClzaXplb2Yoc2l6ZV90KSk7CisJCS8qIE5FRURTV09SSzogYWxzbyBzYXZlIGFuZCBvdXRwdXQgR0lULUJVSUxEX09QVElPTlM/ICovCisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2ltaWxhcl9yZWZfY2IgeworCWNvbnN0IGNoYXIgKmJhc2VfcmVmOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqc2ltaWxhcl9yZWZzOworfTsKKworc3RhdGljIGludCBhcHBlbmRfc2ltaWxhcl9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaW1pbGFyX3JlZl9jYiAqY2IgPSAoc3RydWN0IHNpbWlsYXJfcmVmX2NiICopKGNiX2RhdGEpOworCWNoYXIgKmJyYW5jaCA9IHN0cnJjaHIocmVmbmFtZSwgJy8nKSArIDE7CisKKwkvKiBBIHJlbW90ZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBpcyBkZWVtZWQgc2ltaWxhciAqLworCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpICYmCisJICAgICFzdHJjbXAoYnJhbmNoLCBjYi0+YmFzZV9yZWYpKQorCQlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoY2ItPnNpbWlsYXJfcmVmcywKKwkJCQkJIHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKHJlZm5hbWUsIDEpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBndWVzc19yZWZzKGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3Qgc2ltaWxhcl9yZWZfY2IgcmVmX2NiOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzaW1pbGFyX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCXJlZl9jYi5iYXNlX3JlZiA9IHJlZjsKKwlyZWZfY2Iuc2ltaWxhcl9yZWZzID0gJnNpbWlsYXJfcmVmczsKKwlmb3JfZWFjaF9yZWYoYXBwZW5kX3NpbWlsYXJfcmVmLCAmcmVmX2NiKTsKKwlyZXR1cm4gc2ltaWxhcl9yZWZzOworfQorCitOT1JFVFVSTiB2b2lkIGhlbHBfdW5rbm93bl9yZWYoY29uc3QgY2hhciAqcmVmLCBjb25zdCBjaGFyICpjbWQsCisJCQkgICAgICAgY29uc3QgY2hhciAqZXJyb3IpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IHN1Z2dlc3RlZF9yZWZzID0gZ3Vlc3NfcmVmcyhyZWYpOworCisJZnByaW50Zl9sbihzdGRlcnIsIF8oIiVzOiAlcyAtICVzIiksIGNtZCwgcmVmLCBlcnJvcik7CisKKwlpZiAoc3VnZ2VzdGVkX3JlZnMubnIgPiAwKSB7CisJCWZwcmludGZfbG4oc3RkZXJyLAorCQkJICAgUV8oIlxuRGlkIHlvdSBtZWFuIHRoaXM/IiwKKwkJCSAgICAgICJcbkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IiwKKwkJCSAgICAgIHN1Z2dlc3RlZF9yZWZzLm5yKSk7CisJCWZvciAoaSA9IDA7IGkgPCBzdWdnZXN0ZWRfcmVmcy5ucjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICJcdCVzXG4iLCBzdWdnZXN0ZWRfcmVmcy5pdGVtc1tpXS5zdHJpbmcpOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZzdWdnZXN0ZWRfcmVmcywgMCk7CisJZXhpdCgxKTsKK30KZGlmZiAtLWdpdCBhL2hlbHAuaCBiL2hlbHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQ1NWJlCi0tLSAvZGV2L251bGwKKysrIGIvaGVscC5oCkBAIC0wLDAgKzEsODkgQEAKKyNpZm5kZWYgSEVMUF9ICisjZGVmaW5lIEhFTFBfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IGNtZG5hbWVzIHsKKwlpbnQgYWxsb2M7CisJaW50IGNudDsKKwlzdHJ1Y3QgY21kbmFtZSB7CisJCXNpemVfdCBsZW47IC8qIGFsc28gdXNlZCBmb3Igc2ltaWxhcml0eSBpbmRleCBpbiBoZWxwLmMgKi8KKwkJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworCX0gKipuYW1lczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHV0X2NoYXIoY2hhciBjLCB1bnNpZ25lZCBpbnQgbnVtKQoreworCXdoaWxlIChudW0tLSkKKwkJcHV0Y2hhcihjKTsKK30KKwordm9pZCBsaXN0X2NvbW1vbl9jbWRzX2hlbHAodm9pZCk7Cit2b2lkIGxpc3RfYWxsX2NtZHNfaGVscCh2b2lkKTsKK3ZvaWQgbGlzdF9jb21tb25fZ3VpZGVzX2hlbHAodm9pZCk7Cit2b2lkIGxpc3RfY29uZmlnX2hlbHAoaW50IGZvcl9odW1hbik7CisKK3ZvaWQgbGlzdF9hbGxfbWFpbl9jbWRzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCk7Cit2b2lkIGxpc3RfYWxsX290aGVyX2NtZHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KTsKK3ZvaWQgbGlzdF9jbWRzX2J5X2NhdGVnb3J5KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCSAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5KTsKK3ZvaWQgbGlzdF9jbWRzX2J5X2NvbmZpZyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpOworY29uc3QgY2hhciAqaGVscF91bmtub3duX2NtZChjb25zdCBjaGFyICpjbWQpOwordm9pZCBsb2FkX2NvbW1hbmRfbGlzdChjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgICBzdHJ1Y3QgY21kbmFtZXMgKm1haW5fY21kcywKKwkJICAgICAgIHN0cnVjdCBjbWRuYW1lcyAqb3RoZXJfY21kcyk7Cit2b2lkIGFkZF9jbWRuYW1lKHN0cnVjdCBjbWRuYW1lcyAqY21kcywgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CisvKiBIZXJlIHdlIHJlcXVpcmUgdGhhdCBleGNsdWRlcyBpcyBhIHNvcnRlZCBsaXN0LiAqLwordm9pZCBleGNsdWRlX2NtZHMoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKmV4Y2x1ZGVzKTsKK2ludCBpc19pbl9jbWRsaXN0KHN0cnVjdCBjbWRuYW1lcyAqY21kcywgY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIGxpc3RfY29tbWFuZHModW5zaWduZWQgaW50IGNvbG9wdHMsIHN0cnVjdCBjbWRuYW1lcyAqbWFpbl9jbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpOworCisvKgorICogY2FsbCB0aGlzIHRvIGRpZSgpLCB3aGVuIGl0IGlzIHN1c3BlY3RlZCB0aGF0IHRoZSB1c2VyIG1pc3R5cGVkIGEKKyAqIHJlZiB0byB0aGUgY29tbWFuZCwgdG8gZ2l2ZSBzdWdnZXN0ZWQgImNvcnJlY3QiIHJlZnMuCisgKi8KK05PUkVUVVJOIHZvaWQgaGVscF91bmtub3duX3JlZihjb25zdCBjaGFyICpyZWYsIGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqZXJyb3IpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9jb25maWdfaXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkJICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgICAgY29uc3QgY2hhciAqc3RyKQoreworCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChsaXN0LCB4c3RyZm10KCIlcy4lcyIsIHByZWZpeCwgc3RyKSk7Cit9CisKKyNkZWZpbmUgZGVmaW5lX2xpc3RfY29uZmlnX2FycmF5KGFycmF5KQkJCQkJXAordm9pZCBsaXN0X2NvbmZpZ18jI2FycmF5KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KQlcCit7CQkJCQkJCQkJXAorCWludCBpOwkJCQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFycmF5KTsgaSsrKQkJCQlcCisJCWlmIChhcnJheVtpXSkJCQkJCQlcCisJCQlsaXN0X2NvbmZpZ19pdGVtKGxpc3QsIHByZWZpeCwgYXJyYXlbaV0pOwlcCit9CQkJCQkJCQkJXAorc3RydWN0IHN0cmluZ19saXN0CisKKyNkZWZpbmUgZGVmaW5lX2xpc3RfY29uZmlnX2FycmF5X2V4dHJhKGFycmF5LCB2YWx1ZXMpCQkJXAordm9pZCBsaXN0X2NvbmZpZ18jI2FycmF5KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KQlcCit7CQkJCQkJCQkJXAorCWludCBpOwkJCQkJCQkJXAorCXN0YXRpYyBjb25zdCBjaGFyICpleHRyYVtdID0gdmFsdWVzOwkJCQlcCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh0cmEpOyBpKyspCQkJCVwKKwkJbGlzdF9jb25maWdfaXRlbShsaXN0LCBwcmVmaXgsIGV4dHJhW2ldKTsJCVwKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnJheSk7IGkrKykJCQkJXAorCQlpZiAoYXJyYXlbaV0pCQkJCQkJXAorCQkJbGlzdF9jb25maWdfaXRlbShsaXN0LCBwcmVmaXgsIGFycmF5W2ldKTsJXAorfQkJCQkJCQkJCVwKK3N0cnVjdCBzdHJpbmdfbGlzdAorCisvKiBUaGVzZSBhcmUgYWN0dWFsbHkgc2NhdHRlcmVkIG92ZXIgbWFueSBDIGZpbGVzICovCit2b2lkIGxpc3RfY29uZmlnX2FkdmljZXMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBsaXN0X2NvbmZpZ19jb2xvcl9icmFuY2hfc2xvdHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBsaXN0X2NvbmZpZ19jb2xvcl9kZWNvcmF0ZV9zbG90cyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnByZWZpeCk7Cit2b2lkIGxpc3RfY29uZmlnX2NvbG9yX2RpZmZfc2xvdHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBsaXN0X2NvbmZpZ19jb2xvcl9ncmVwX3Nsb3RzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcHJlZml4KTsKK3ZvaWQgbGlzdF9jb25maWdfY29sb3JfaW50ZXJhY3RpdmVfc2xvdHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBsaXN0X2NvbmZpZ19jb2xvcl9zdGF0dXNfc2xvdHMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBsaXN0X2NvbmZpZ19jb2xvcl9zaWRlYmFuZF9zbG90cyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnByZWZpeCk7Cit2b2lkIGxpc3RfY29uZmlnX2ZzY2tfbXNnX2lkcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKKyNlbmRpZiAvKiBIRUxQX0ggKi8KZGlmZiAtLWdpdCBhL2hleC5jIGIvaGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3ZjAwYwotLS0gL2Rldi9udWxsCisrKyBiL2hleC5jCkBAIC0wLDAgKzEsMTE0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworY29uc3Qgc2lnbmVkIGNoYXIgaGV4dmFsX3RhYmxlWzI1Nl0gPSB7CisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDAwLTA3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDA4LTBmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDEwLTE3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDE4LTFmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDIwLTI3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDI4LTJmICovCisJICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywJCS8qIDMwLTM3ICovCisJICA4LCAgOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDM4LTNmICovCisJIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwJCS8qIDQwLTQ3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDQ4LTRmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDUwLTU3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDU4LTVmICovCisJIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwJCS8qIDYwLTY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDY4LTY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDcwLTc3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDc4LTdmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDgwLTg3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDg4LThmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDkwLTk3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDk4LTlmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGEwLWE3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGE4LWFmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGIwLWI3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGI4LWJmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGMwLWM3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGM4LWNmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGQwLWQ3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGQ4LWRmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGUwLWU3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGU4LWVmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGYwLWY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGY4LWZmICovCit9OworCitpbnQgaGV4X3RvX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJpbmFyeSwgY29uc3QgY2hhciAqaGV4LCBzaXplX3QgbGVuKQoreworCWZvciAoOyBsZW47IGxlbi0tLCBoZXggKz0gMikgeworCQl1bnNpZ25lZCBpbnQgdmFsID0gKGhleHZhbChoZXhbMF0pIDw8IDQpIHwgaGV4dmFsKGhleFsxXSk7CisKKwkJaWYgKHZhbCAmIH4weGZmKQorCQkJcmV0dXJuIC0xOworCQkqYmluYXJ5KysgPSB2YWw7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZ2V0X3NoYTFfaGV4KGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgdGhlX2hhc2hfYWxnby0+cmF3c3o7IGkrKykgeworCQlpbnQgdmFsID0gaGV4MmNocihoZXgpOworCQlpZiAodmFsIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJKnNoYTErKyA9IHZhbDsKKwkJaGV4ICs9IDI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZ2V0X29pZF9oZXgoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIGdldF9zaGExX2hleChoZXgsIG9pZC0+aGFzaCk7Cit9CisKK2ludCBwYXJzZV9vaWRfaGV4KGNvbnN0IGNoYXIgKmhleCwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICoqZW5kKQoreworCWludCByZXQgPSBnZXRfb2lkX2hleChoZXgsIG9pZCk7CisJaWYgKCFyZXQpCisJCSplbmQgPSBoZXggKyB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKwlyZXR1cm4gcmV0OworfQorCitjaGFyICpoYXNoX3RvX2hleF9hbGdvcF9yKGNoYXIgKmJ1ZmZlciwgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwKKwkJCSAgY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ29wKQoreworCXN0YXRpYyBjb25zdCBjaGFyIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCWNoYXIgKmJ1ZiA9IGJ1ZmZlcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhbGdvcC0+cmF3c3o7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsID0gKmhhc2grKzsKKwkJKmJ1ZisrID0gaGV4W3ZhbCA+PiA0XTsKKwkJKmJ1ZisrID0gaGV4W3ZhbCAmIDB4Zl07CisJfQorCSpidWYgPSAnXDAnOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworY2hhciAqb2lkX3RvX2hleF9yKGNoYXIgKmJ1ZmZlciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBoYXNoX3RvX2hleF9hbGdvcF9yKGJ1ZmZlciwgb2lkLT5oYXNoLCB0aGVfaGFzaF9hbGdvKTsKK30KKworY2hhciAqaGFzaF90b19oZXhfYWxnb3AoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ29wKQoreworCXN0YXRpYyBpbnQgYnVmbm87CisJc3RhdGljIGNoYXIgaGV4YnVmZmVyWzRdW0dJVF9NQVhfSEVYU1ogKyAxXTsKKwlidWZubyA9IChidWZubyArIDEpICUgQVJSQVlfU0laRShoZXhidWZmZXIpOworCXJldHVybiBoYXNoX3RvX2hleF9hbGdvcF9yKGhleGJ1ZmZlcltidWZub10sIGhhc2gsIGFsZ29wKTsKK30KKworY2hhciAqaGFzaF90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3AoaGFzaCwgdGhlX2hhc2hfYWxnbyk7Cit9CisKK2NoYXIgKm9pZF90b19oZXgoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBoYXNoX3RvX2hleF9hbGdvcChvaWQtPmhhc2gsIHRoZV9oYXNoX2FsZ28pOworfQpkaWZmIC0tZ2l0IGEvaHR0cC1iYWNrZW5kLmMgYi9odHRwLWJhY2tlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzMxNDRiCi0tLSAvZGV2L251bGwKKysrIGIvaHR0cC1iYWNrZW5kLmMKQEAgLTAsMCArMSw3OTUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorCitzdGF0aWMgY29uc3QgY2hhciBjb250ZW50X3R5cGVbXSA9ICJDb250ZW50LVR5cGUiOworc3RhdGljIGNvbnN0IGNoYXIgY29udGVudF9sZW5ndGhbXSA9ICJDb250ZW50LUxlbmd0aCI7CitzdGF0aWMgY29uc3QgY2hhciBsYXN0X21vZGlmaWVkW10gPSAiTGFzdC1Nb2RpZmllZCI7CitzdGF0aWMgaW50IGdldGFueWZpbGUgPSAxOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X3JlcXVlc3RfYnVmZmVyID0gMTAgKiAxMDI0ICogMTAyNDsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqcXVlcnlfcGFyYW1zOworCitzdHJ1Y3QgcnBjX3NlcnZpY2UgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqY29uZmlnX25hbWU7CisJdW5zaWduZWQgYnVmZmVyX2lucHV0IDogMTsKKwlzaWduZWQgZW5hYmxlZCA6IDI7Cit9OworCitzdGF0aWMgc3RydWN0IHJwY19zZXJ2aWNlIHJwY19zZXJ2aWNlW10gPSB7CisJeyAidXBsb2FkLXBhY2siLCAidXBsb2FkcGFjayIsIDEsIDEgfSwKKwl7ICJyZWNlaXZlLXBhY2siLCAicmVjZWl2ZXBhY2siLCAwLCAtMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2V0X3BhcmFtZXRlcnModm9pZCkKK3sKKwlpZiAoIXF1ZXJ5X3BhcmFtcykgeworCQljb25zdCBjaGFyICpxdWVyeSA9IGdldGVudigiUVVFUllfU1RSSU5HIik7CisKKwkJcXVlcnlfcGFyYW1zID0geGNhbGxvYygxLCBzaXplb2YoKnF1ZXJ5X3BhcmFtcykpOworCQl3aGlsZSAocXVlcnkgJiYgKnF1ZXJ5KSB7CisJCQljaGFyICpuYW1lID0gdXJsX2RlY29kZV9wYXJhbWV0ZXJfbmFtZSgmcXVlcnkpOworCQkJY2hhciAqdmFsdWUgPSB1cmxfZGVjb2RlX3BhcmFtZXRlcl92YWx1ZSgmcXVlcnkpOworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmk7CisKKwkJCWkgPSBzdHJpbmdfbGlzdF9sb29rdXAocXVlcnlfcGFyYW1zLCBuYW1lKTsKKwkJCWlmICghaSkKKwkJCQlpID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHF1ZXJ5X3BhcmFtcywgbmFtZSk7CisJCQllbHNlCisJCQkJZnJlZShpLT51dGlsKTsKKwkJCWktPnV0aWwgPSB2YWx1ZTsKKwkJfQorCX0KKwlyZXR1cm4gcXVlcnlfcGFyYW1zOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3BhcmFtZXRlcihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppOworCWkgPSBzdHJpbmdfbGlzdF9sb29rdXAoZ2V0X3BhcmFtZXRlcnMoKSwgbmFtZSk7CisJcmV0dXJuIGkgPyBpLT51dGlsIDogTlVMTDsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3N0YXRpYyB2b2lkIGZvcm1hdF93cml0ZShpbnQgZmQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0YXRpYyBjaGFyIGJ1ZmZlclsxMDI0XTsKKworCXZhX2xpc3QgYXJnczsKKwl1bnNpZ25lZCBuOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwluID0gdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlmIChuID49IHNpemVvZihidWZmZXIpKQorCQlkaWUoInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIpOworCisJd3JpdGVfb3JfZGllKGZkLCBidWZmZXIsIG4pOworfQorCitzdGF0aWMgdm9pZCBodHRwX3N0YXR1cyhzdHJ1Y3Qgc3RyYnVmICpoZHIsIHVuc2lnbmVkIGNvZGUsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJidWZfYWRkZihoZHIsICJTdGF0dXM6ICV1ICVzXHJcbiIsIGNvZGUsIG1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIGhkcl9zdHIoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJidWZfYWRkZihoZHIsICIlczogJXNcclxuIiwgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBoZHJfaW50KHN0cnVjdCBzdHJidWYgKmhkciwgY29uc3QgY2hhciAqbmFtZSwgdWludG1heF90IHZhbHVlKQoreworCXN0cmJ1Zl9hZGRmKGhkciwgIiVzOiAlIiBQUkl1TUFYICJcclxuIiwgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBoZHJfZGF0ZShzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKm5hbWUsIHRpbWVzdGFtcF90IHdoZW4pCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBzaG93X2RhdGUod2hlbiwgMCwgREFURV9NT0RFKFJGQzI4MjIpKTsKKwloZHJfc3RyKGhkciwgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBoZHJfbm9jYWNoZShzdHJ1Y3Qgc3RyYnVmICpoZHIpCit7CisJaGRyX3N0cihoZHIsICJFeHBpcmVzIiwgIkZyaSwgMDEgSmFuIDE5ODAgMDA6MDA6MDAgR01UIik7CisJaGRyX3N0cihoZHIsICJQcmFnbWEiLCAibm8tY2FjaGUiKTsKKwloZHJfc3RyKGhkciwgIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlIik7Cit9CisKK3N0YXRpYyB2b2lkIGhkcl9jYWNoZV9mb3JldmVyKHN0cnVjdCBzdHJidWYgKmhkcikKK3sKKwl0aW1lc3RhbXBfdCBub3cgPSB0aW1lKE5VTEwpOworCWhkcl9kYXRlKGhkciwgIkRhdGUiLCBub3cpOworCWhkcl9kYXRlKGhkciwgIkV4cGlyZXMiLCBub3cgKyAzMTUzNjAwMCk7CisJaGRyX3N0cihoZHIsICJDYWNoZS1Db250cm9sIiwgInB1YmxpYywgbWF4LWFnZT0zMTUzNjAwMCIpOworfQorCitzdGF0aWMgdm9pZCBlbmRfaGVhZGVycyhzdHJ1Y3Qgc3RyYnVmICpoZHIpCit7CisJc3RyYnVmX2FkZChoZHIsICJcclxuIiwgMik7CisJd3JpdGVfb3JfZGllKDEsIGhkci0+YnVmLCBoZHItPmxlbik7CisJc3RyYnVmX3JlbGVhc2UoaGRyKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIG5vdF9mb3VuZChzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCisJaHR0cF9zdGF0dXMoaGRyLCA0MDQsICJOb3QgRm91bmQiKTsKKwloZHJfbm9jYWNoZShoZHIpOworCWVuZF9oZWFkZXJzKGhkcik7CisKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJaWYgKGVyciAmJiAqZXJyKQorCQl2ZnByaW50ZihzdGRlcnIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlleGl0KDApOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQorc3RhdGljIE5PUkVUVVJOIHZvaWQgZm9yYmlkZGVuKHN0cnVjdCBzdHJidWYgKmhkciwgY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlodHRwX3N0YXR1cyhoZHIsIDQwMywgIkZvcmJpZGRlbiIpOworCWhkcl9ub2NhY2hlKGhkcik7CisJZW5kX2hlYWRlcnMoaGRyKTsKKworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlpZiAoZXJyICYmICplcnIpCisJCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCWV4aXQoMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbGVjdF9nZXRhbnlmaWxlKHN0cnVjdCBzdHJidWYgKmhkcikKK3sKKwlpZiAoIWdldGFueWZpbGUpCisJCWZvcmJpZGRlbihoZHIsICJVbnN1cHBvcnRlZCBzZXJ2aWNlOiBnZXRhbnlmaWxlIik7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfc3RyYnVmKHN0cnVjdCBzdHJidWYgKmhkciwKKwkJCWNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwloZHJfaW50KGhkciwgY29udGVudF9sZW5ndGgsIGJ1Zi0+bGVuKTsKKwloZHJfc3RyKGhkciwgY29udGVudF90eXBlLCB0eXBlKTsKKwllbmRfaGVhZGVycyhoZHIpOworCXdyaXRlX29yX2RpZSgxLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOworfQorCitzdGF0aWMgdm9pZCBzZW5kX2xvY2FsX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjb25zdCBjaGFyICp0aGVfdHlwZSwKKwkJCQljb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKnAgPSBnaXRfcGF0aGR1cCgiJXMiLCBuYW1lKTsKKwlzaXplX3QgYnVmX2FsbG9jID0gODE5MjsKKwljaGFyICpidWYgPSB4bWFsbG9jKGJ1Zl9hbGxvYyk7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHNiOworCisJZmQgPSBvcGVuKHAsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlub3RfZm91bmQoaGRyLCAiQ2Fubm90IG9wZW4gJyVzJzogJXMiLCBwLCBzdHJlcnJvcihlcnJubykpOworCWlmIChmc3RhdChmZCwgJnNiKSA8IDApCisJCWRpZV9lcnJubygiQ2Fubm90IHN0YXQgJyVzJyIsIHApOworCisJaGRyX2ludChoZHIsIGNvbnRlbnRfbGVuZ3RoLCBzYi5zdF9zaXplKTsKKwloZHJfc3RyKGhkciwgY29udGVudF90eXBlLCB0aGVfdHlwZSk7CisJaGRyX2RhdGUoaGRyLCBsYXN0X21vZGlmaWVkLCBzYi5zdF9tdGltZSk7CisJZW5kX2hlYWRlcnMoaGRyKTsKKworCWZvciAoOzspIHsKKwkJc3NpemVfdCBuID0geHJlYWQoZmQsIGJ1ZiwgYnVmX2FsbG9jKTsKKwkJaWYgKG4gPCAwKQorCQkJZGllX2Vycm5vKCJDYW5ub3QgcmVhZCAnJXMnIiwgcCk7CisJCWlmICghbikKKwkJCWJyZWFrOworCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCBuKTsKKwl9CisJY2xvc2UoZmQpOworCWZyZWUoYnVmKTsKKwlmcmVlKHApOworfQorCitzdGF0aWMgdm9pZCBnZXRfdGV4dF9maWxlKHN0cnVjdCBzdHJidWYgKmhkciwgY2hhciAqbmFtZSkKK3sKKwlzZWxlY3RfZ2V0YW55ZmlsZShoZHIpOworCWhkcl9ub2NhY2hlKGhkcik7CisJc2VuZF9sb2NhbF9maWxlKGhkciwgInRleHQvcGxhaW4iLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2xvb3NlX29iamVjdChzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNoYXIgKm5hbWUpCit7CisJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwloZHJfY2FjaGVfZm9yZXZlcihoZHIpOworCXNlbmRfbG9jYWxfZmlsZShoZHIsICJhcHBsaWNhdGlvbi94LWdpdC1sb29zZS1vYmplY3QiLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3BhY2tfZmlsZShzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNoYXIgKm5hbWUpCit7CisJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwloZHJfY2FjaGVfZm9yZXZlcihoZHIpOworCXNlbmRfbG9jYWxfZmlsZShoZHIsICJhcHBsaWNhdGlvbi94LWdpdC1wYWNrZWQtb2JqZWN0cyIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBnZXRfaWR4X2ZpbGUoc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICpuYW1lKQoreworCXNlbGVjdF9nZXRhbnlmaWxlKGhkcik7CisJaGRyX2NhY2hlX2ZvcmV2ZXIoaGRyKTsKKwlzZW5kX2xvY2FsX2ZpbGUoaGRyLCAiYXBwbGljYXRpb24veC1naXQtcGFja2VkLW9iamVjdHMtdG9jIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGh0dHBfY29uZmlnKHZvaWQpCit7CisJaW50IGksIHZhbHVlID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhciA9IFNUUkJVRl9JTklUOworCisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiaHR0cC5nZXRhbnlmaWxlIiwgJmdldGFueWZpbGUpOworCWdpdF9jb25maWdfZ2V0X3Vsb25nKCJodHRwLm1heHJlcXVlc3RidWZmZXIiLCAmbWF4X3JlcXVlc3RfYnVmZmVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJwY19zZXJ2aWNlKTsgaSsrKSB7CisJCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gJnJwY19zZXJ2aWNlW2ldOworCQlzdHJidWZfYWRkZigmdmFyLCAiaHR0cC4lcyIsIHN2Yy0+Y29uZmlnX25hbWUpOworCQlpZiAoIWdpdF9jb25maWdfZ2V0X2Jvb2wodmFyLmJ1ZiwgJnZhbHVlKSkKKwkJCXN2Yy0+ZW5hYmxlZCA9IHZhbHVlOworCQlzdHJidWZfcmVzZXQoJnZhcik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnZhcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnBjX3NlcnZpY2UgKnNlbGVjdF9zZXJ2aWNlKHN0cnVjdCBzdHJidWYgKmhkciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICpzdmNfbmFtZTsKKwlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnN2YyA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAoIXNraXBfcHJlZml4KG5hbWUsICJnaXQtIiwgJnN2Y19uYW1lKSkKKwkJZm9yYmlkZGVuKGhkciwgIlVuc3VwcG9ydGVkIHNlcnZpY2U6ICclcyciLCBuYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJwY19zZXJ2aWNlKTsgaSsrKSB7CisJCXN0cnVjdCBycGNfc2VydmljZSAqcyA9ICZycGNfc2VydmljZVtpXTsKKwkJaWYgKCFzdHJjbXAocy0+bmFtZSwgc3ZjX25hbWUpKSB7CisJCQlzdmMgPSBzOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXN2YykKKwkJZm9yYmlkZGVuKGhkciwgIlVuc3VwcG9ydGVkIHNlcnZpY2U6ICclcyciLCBuYW1lKTsKKworCWlmIChzdmMtPmVuYWJsZWQgPCAwKSB7CisJCWNvbnN0IGNoYXIgKnVzZXIgPSBnZXRlbnYoIlJFTU9URV9VU0VSIik7CisJCXN2Yy0+ZW5hYmxlZCA9ICh1c2VyICYmICp1c2VyKSA/IDEgOiAwOworCX0KKwlpZiAoIXN2Yy0+ZW5hYmxlZCkKKwkJZm9yYmlkZGVuKGhkciwgIlNlcnZpY2Ugbm90IGVuYWJsZWQ6ICclcyciLCBzdmMtPm5hbWUpOworCXJldHVybiBzdmM7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3RvX2NoaWxkKGludCBvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4sIGNvbnN0IGNoYXIgKnByb2dfbmFtZSkKK3sKKwlpZiAod3JpdGVfaW5fZnVsbChvdXQsIGJ1ZiwgbGVuKSA8IDApCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHRvICclcyciLCBwcm9nX25hbWUpOworfQorCisvKgorICogVGhpcyBpcyBiYXNpY2FsbHkgc3RyYnVmX3JlYWQoKSwgZXhjZXB0IHRoYXQgaWYgd2UKKyAqIGhpdCBtYXhfcmVxdWVzdF9idWZmZXIgd2UgZGllICh3ZSdkIHJhdGhlciByZWplY3QgYQorICogbWFsaWNpb3VzbHkgbGFyZ2UgcmVxdWVzdCB0aGFuIGNoZXcgdXAgaW5maW5pdGUgbWVtb3J5KS4KKyAqLworc3RhdGljIHNzaXplX3QgcmVhZF9yZXF1ZXN0X2VvZihpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKipvdXQpCit7CisJc2l6ZV90IGxlbiA9IDAsIGFsbG9jID0gODE5MjsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSB4bWFsbG9jKGFsbG9jKTsKKworCWlmIChtYXhfcmVxdWVzdF9idWZmZXIgPCBhbGxvYykKKwkJbWF4X3JlcXVlc3RfYnVmZmVyID0gYWxsb2M7CisKKwl3aGlsZSAoMSkgeworCQlzc2l6ZV90IGNudDsKKworCQljbnQgPSByZWFkX2luX2Z1bGwoZmQsIGJ1ZiArIGxlbiwgYWxsb2MgLSBsZW4pOworCQlpZiAoY250IDwgMCkgeworCQkJZnJlZShidWYpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyogcGFydGlhbCByZWFkIGZyb20gcmVhZF9pbl9mdWxsIG1lYW5zIHdlIGhpdCBFT0YgKi8KKwkJbGVuICs9IGNudDsKKwkJaWYgKGxlbiA8IGFsbG9jKSB7CisJCQkqb3V0ID0gYnVmOworCQkJcmV0dXJuIGxlbjsKKwkJfQorCisJCS8qIG90aGVyd2lzZSwgZ3JvdyBhbmQgdHJ5IGFnYWluIChpZiB3ZSBjYW4pICovCisJCWlmIChhbGxvYyA9PSBtYXhfcmVxdWVzdF9idWZmZXIpCisJCQlkaWUoInJlcXVlc3Qgd2FzIGxhcmdlciB0aGFuIG91ciBtYXhpbXVtIHNpemUgKCVsdSk7IgorCQkJICAgICIgdHJ5IHNldHRpbmcgR0lUX0hUVFBfTUFYX1JFUVVFU1RfQlVGRkVSIiwKKwkJCSAgICBtYXhfcmVxdWVzdF9idWZmZXIpOworCisJCWFsbG9jID0gYWxsb2NfbnIoYWxsb2MpOworCQlpZiAoYWxsb2MgPiBtYXhfcmVxdWVzdF9idWZmZXIpCisJCQlhbGxvYyA9IG1heF9yZXF1ZXN0X2J1ZmZlcjsKKwkJUkVBTExPQ19BUlJBWShidWYsIGFsbG9jKTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfcmVxdWVzdF9maXhlZF9sZW4oaW50IGZkLCBzc2l6ZV90IHJlcV9sZW4sIHVuc2lnbmVkIGNoYXIgKipvdXQpCit7CisJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKwlzc2l6ZV90IGNudCA9IDA7CisKKwlpZiAobWF4X3JlcXVlc3RfYnVmZmVyIDwgcmVxX2xlbikgeworCQlkaWUoInJlcXVlc3Qgd2FzIGxhcmdlciB0aGFuIG91ciBtYXhpbXVtIHNpemUgKCVsdSk6ICIKKwkJICAgICIlIiBQUkl1TUFYICI7IHRyeSBzZXR0aW5nIEdJVF9IVFRQX01BWF9SRVFVRVNUX0JVRkZFUiIsCisJCSAgICBtYXhfcmVxdWVzdF9idWZmZXIsICh1aW50bWF4X3QpcmVxX2xlbik7CisJfQorCisJYnVmID0geG1hbGxvYyhyZXFfbGVuKTsKKwljbnQgPSByZWFkX2luX2Z1bGwoZmQsIGJ1ZiwgcmVxX2xlbik7CisJaWYgKGNudCA8IDApIHsKKwkJZnJlZShidWYpOworCQlyZXR1cm4gLTE7CisJfQorCSpvdXQgPSBidWY7CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIHNzaXplX3QgZ2V0X2NvbnRlbnRfbGVuZ3RoKHZvaWQpCit7CisJc3NpemVfdCB2YWwgPSAtMTsKKwljb25zdCBjaGFyICpzdHIgPSBnZXRlbnYoIkNPTlRFTlRfTEVOR1RIIik7CisKKwlpZiAoc3RyICYmICpzdHIgJiYgIWdpdF9wYXJzZV9zc2l6ZV90KHN0ciwgJnZhbCkpCisJCWRpZSgiZmFpbGVkIHRvIHBhcnNlIENPTlRFTlRfTEVOR1RIOiAlcyIsIHN0cik7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9yZXF1ZXN0KGludCBmZCwgdW5zaWduZWQgY2hhciAqKm91dCwgc3NpemVfdCByZXFfbGVuKQoreworCWlmIChyZXFfbGVuIDwgMCkKKwkJcmV0dXJuIHJlYWRfcmVxdWVzdF9lb2YoZmQsIG91dCk7CisJZWxzZQorCQlyZXR1cm4gcmVhZF9yZXF1ZXN0X2ZpeGVkX2xlbihmZCwgcmVxX2xlbiwgb3V0KTsKK30KKworc3RhdGljIHZvaWQgaW5mbGF0ZV9yZXF1ZXN0KGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgaW50IG91dCwgaW50IGJ1ZmZlcl9pbnB1dCwgc3NpemVfdCByZXFfbGVuKQoreworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwl1bnNpZ25lZCBjaGFyICpmdWxsX3JlcXVlc3QgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgaW5fYnVmWzgxOTJdOworCXVuc2lnbmVkIGNoYXIgb3V0X2J1Zls4MTkyXTsKKwl1bnNpZ25lZCBsb25nIGNudCA9IDA7CisJaW50IHJlcV9sZW5fZGVmaW5lZCA9IHJlcV9sZW4gPj0gMDsKKwlzaXplX3QgcmVxX3JlbWFpbmluZ19sZW4gPSByZXFfbGVuOworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlnaXRfaW5mbGF0ZV9pbml0X2d6aXBfb25seSgmc3RyZWFtKTsKKworCXdoaWxlICgxKSB7CisJCXNzaXplX3QgbjsKKworCQlpZiAoYnVmZmVyX2lucHV0KSB7CisJCQlpZiAoZnVsbF9yZXF1ZXN0KQorCQkJCW4gPSAwOyAvKiBub3RoaW5nIGxlZnQgdG8gcmVhZCAqLworCQkJZWxzZQorCQkJCW4gPSByZWFkX3JlcXVlc3QoMCwgJmZ1bGxfcmVxdWVzdCwgcmVxX2xlbik7CisJCQlzdHJlYW0ubmV4dF9pbiA9IGZ1bGxfcmVxdWVzdDsKKwkJfSBlbHNlIHsKKwkJCXNzaXplX3QgYnVmZmVyX2xlbjsKKwkJCWlmIChyZXFfbGVuX2RlZmluZWQgJiYgcmVxX3JlbWFpbmluZ19sZW4gPD0gc2l6ZW9mKGluX2J1ZikpCisJCQkJYnVmZmVyX2xlbiA9IHJlcV9yZW1haW5pbmdfbGVuOworCQkJZWxzZQorCQkJCWJ1ZmZlcl9sZW4gPSBzaXplb2YoaW5fYnVmKTsKKwkJCW4gPSB4cmVhZCgwLCBpbl9idWYsIGJ1ZmZlcl9sZW4pOworCQkJc3RyZWFtLm5leHRfaW4gPSBpbl9idWY7CisJCQlpZiAocmVxX2xlbl9kZWZpbmVkICYmIG4gPiAwKQorCQkJCXJlcV9yZW1haW5pbmdfbGVuIC09IG47CisJCX0KKworCQlpZiAobiA8PSAwKQorCQkJZGllKCJyZXF1ZXN0IGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIGd6aXAgc3RyZWFtIik7CisJCXN0cmVhbS5hdmFpbF9pbiA9IG47CisKKwkJd2hpbGUgKDAgPCBzdHJlYW0uYXZhaWxfaW4pIHsKKwkJCWludCByZXQ7CisKKwkJCXN0cmVhbS5uZXh0X291dCA9IG91dF9idWY7CisJCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKG91dF9idWYpOworCisJCQlyZXQgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCBaX05PX0ZMVVNIKTsKKwkJCWlmIChyZXQgIT0gWl9PSyAmJiByZXQgIT0gWl9TVFJFQU1fRU5EKQorCQkJCWRpZSgiemxpYiBlcnJvciBpbmZsYXRpbmcgcmVxdWVzdCwgcmVzdWx0ICVkIiwgcmV0KTsKKworCQkJbiA9IHN0cmVhbS50b3RhbF9vdXQgLSBjbnQ7CisJCQl3cml0ZV90b19jaGlsZChvdXQsIG91dF9idWYsIHN0cmVhbS50b3RhbF9vdXQgLSBjbnQsIHByb2dfbmFtZSk7CisJCQljbnQgPSBzdHJlYW0udG90YWxfb3V0OworCisJCQlpZiAocmV0ID09IFpfU1RSRUFNX0VORCkKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKK2RvbmU6CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWNsb3NlKG91dCk7CisJZnJlZShmdWxsX3JlcXVlc3QpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3JlcXVlc3QoY29uc3QgY2hhciAqcHJvZ19uYW1lLCBpbnQgb3V0LCBzc2l6ZV90IHJlcV9sZW4pCit7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXNzaXplX3QgbiA9IHJlYWRfcmVxdWVzdCgwLCAmYnVmLCByZXFfbGVuKTsKKwlpZiAobiA8IDApCisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyByZXF1ZXN0IGJvZHkiKTsKKwl3cml0ZV90b19jaGlsZChvdXQsIGJ1ZiwgbiwgcHJvZ19uYW1lKTsKKwljbG9zZShvdXQpOworCWZyZWUoYnVmKTsKK30KKworc3RhdGljIHZvaWQgcGlwZV9maXhlZF9sZW5ndGgoY29uc3QgY2hhciAqcHJvZ19uYW1lLCBpbnQgb3V0LCBzaXplX3QgcmVxX2xlbikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1Zls4MTkyXTsKKwlzaXplX3QgcmVtYWluaW5nX2xlbiA9IHJlcV9sZW47CisKKwl3aGlsZSAocmVtYWluaW5nX2xlbiA+IDApIHsKKwkJc2l6ZV90IGNodW5rX2xlbmd0aCA9IHJlbWFpbmluZ19sZW4gPiBzaXplb2YoYnVmKSA/IHNpemVvZihidWYpIDogcmVtYWluaW5nX2xlbjsKKwkJc3NpemVfdCBuID0geHJlYWQoMCwgYnVmLCBjaHVua19sZW5ndGgpOworCQlpZiAobiA8IDApCisJCQlkaWVfZXJybm8oIlJlYWRpbmcgcmVxdWVzdCBmYWlsZWQiKTsKKwkJd3JpdGVfdG9fY2hpbGQob3V0LCBidWYsIG4sIHByb2dfbmFtZSk7CisJCXJlbWFpbmluZ19sZW4gLT0gbjsKKwl9CisKKwljbG9zZShvdXQpOworfQorCitzdGF0aWMgdm9pZCBydW5fc2VydmljZShjb25zdCBjaGFyICoqYXJndiwgaW50IGJ1ZmZlcl9pbnB1dCkKK3sKKwljb25zdCBjaGFyICplbmNvZGluZyA9IGdldGVudigiSFRUUF9DT05URU5UX0VOQ09ESU5HIik7CisJY29uc3QgY2hhciAqdXNlciA9IGdldGVudigiUkVNT1RFX1VTRVIiKTsKKwljb25zdCBjaGFyICpob3N0ID0gZ2V0ZW52KCJSRU1PVEVfQUREUiIpOworCWludCBnemlwcGVkX3JlcXVlc3QgPSAwOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzc2l6ZV90IHJlcV9sZW4gPSBnZXRfY29udGVudF9sZW5ndGgoKTsKKworCWlmIChlbmNvZGluZyAmJiAhc3RyY21wKGVuY29kaW5nLCAiZ3ppcCIpKQorCQlnemlwcGVkX3JlcXVlc3QgPSAxOworCWVsc2UgaWYgKGVuY29kaW5nICYmICFzdHJjbXAoZW5jb2RpbmcsICJ4LWd6aXAiKSkKKwkJZ3ppcHBlZF9yZXF1ZXN0ID0gMTsKKworCWlmICghdXNlciB8fCAhKnVzZXIpCisJCXVzZXIgPSAiYW5vbnltb3VzIjsKKwlpZiAoIWhvc3QgfHwgISpob3N0KQorCQlob3N0ID0gIihub25lKSI7CisKKwlpZiAoIWdldGVudigiR0lUX0NPTU1JVFRFUl9OQU1FIikpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNsZC5lbnZfYXJyYXksICJHSVRfQ09NTUlUVEVSX05BTUU9JXMiLCB1c2VyKTsKKwlpZiAoIWdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpKQorCQlhcmd2X2FycmF5X3B1c2hmKCZjbGQuZW52X2FycmF5LAorCQkJCSAiR0lUX0NPTU1JVFRFUl9FTUFJTD0lc0BodHRwLiVzIiwgdXNlciwgaG9zdCk7CisKKwljbGQuYXJndiA9IGFyZ3Y7CisJaWYgKGJ1ZmZlcl9pbnB1dCB8fCBnemlwcGVkX3JlcXVlc3QgfHwgcmVxX2xlbiA+PSAwKQorCQljbGQuaW4gPSAtMTsKKwljbGQuZ2l0X2NtZCA9IDE7CisJY2xkLmNsZWFuX29uX2V4aXQgPSAxOworCWNsZC53YWl0X2FmdGVyX2NsZWFuID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2xkKSkKKwkJZXhpdCgxKTsKKworCWNsb3NlKDEpOworCWlmIChnemlwcGVkX3JlcXVlc3QpCisJCWluZmxhdGVfcmVxdWVzdChhcmd2WzBdLCBjbGQuaW4sIGJ1ZmZlcl9pbnB1dCwgcmVxX2xlbik7CisJZWxzZSBpZiAoYnVmZmVyX2lucHV0KQorCQljb3B5X3JlcXVlc3QoYXJndlswXSwgY2xkLmluLCByZXFfbGVuKTsKKwllbHNlIGlmIChyZXFfbGVuID49IDApCisJCXBpcGVfZml4ZWRfbGVuZ3RoKGFyZ3ZbMF0sIGNsZC5pbiwgcmVxX2xlbik7CisJZWxzZQorCQljbG9zZSgwKTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY2xkKSkKKwkJZXhpdCgxKTsKK30KKworc3RhdGljIGludCBzaG93X3RleHRfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwljb25zdCBjaGFyICpuYW1lX25vbnMgPSBzdHJpcF9uYW1lc3BhY2UobmFtZSk7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gY2JfZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghbykKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfYWRkZihidWYsICIlc1x0JXNcbiIsIG9pZF90b19oZXgob2lkKSwgbmFtZV9ub25zKTsKKwlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIG8sIG5hbWUsIDApOworCQlpZiAoIW8pCisJCQlyZXR1cm4gMDsKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJXNcdCVzXnt9XG4iLCBvaWRfdG9faGV4KCZvLT5vaWQpLAorCQkJICAgIG5hbWVfbm9ucyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZXRfaW5mb19yZWZzKHN0cnVjdCBzdHJidWYgKmhkciwgY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZSA9IGdldF9wYXJhbWV0ZXIoInNlcnZpY2UiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaGRyX25vY2FjaGUoaGRyKTsKKworCWlmIChzZXJ2aWNlX25hbWUpIHsKKwkJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwgLyogc2VydmljZSBuYW1lICovLAorCQkJIi0tc3RhdGVsZXNzLXJwYyIsICItLWFkdmVydGlzZS1yZWZzIiwKKwkJCSIuIiwgTlVMTH07CisJCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gc2VsZWN0X3NlcnZpY2UoaGRyLCBzZXJ2aWNlX25hbWUpOworCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1hZHZlcnRpc2VtZW50IiwKKwkJCXN2Yy0+bmFtZSk7CisJCWhkcl9zdHIoaGRyLCBjb250ZW50X3R5cGUsIGJ1Zi5idWYpOworCQllbmRfaGVhZGVycyhoZHIpOworCisKKwkJaWYgKGRldGVybWluZV9wcm90b2NvbF92ZXJzaW9uX3NlcnZlcigpICE9IHByb3RvY29sX3YyKSB7CisJCQlwYWNrZXRfd3JpdGVfZm10KDEsICIjIHNlcnZpY2U9Z2l0LSVzXG4iLCBzdmMtPm5hbWUpOworCQkJcGFja2V0X2ZsdXNoKDEpOworCQl9CisKKwkJYXJndlswXSA9IHN2Yy0+bmFtZTsKKwkJcnVuX3NlcnZpY2UoYXJndiwgMCk7CisKKwl9IGVsc2UgeworCQlzZWxlY3RfZ2V0YW55ZmlsZShoZHIpOworCQlmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihzaG93X3RleHRfcmVmLCAmYnVmKTsKKwkJc2VuZF9zdHJidWYoaGRyLCAidGV4dC9wbGFpbiIsICZidWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGludCBzaG93X2hlYWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBjYl9kYXRhOworCisJaWYgKGZsYWcgJiBSRUZfSVNTWU1SRUYpIHsKKwkJY29uc3QgY2hhciAqdGFyZ2V0ID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsCisJCQkJCQkJUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJCQlOVUxMLCBOVUxMKTsKKworCQlpZiAodGFyZ2V0KQorCQkJc3RyYnVmX2FkZGYoYnVmLCAicmVmOiAlc1xuIiwgc3RyaXBfbmFtZXNwYWNlKHRhcmdldCkpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZXRfaGVhZChzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNoYXIgKmFyZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwloZWFkX3JlZl9uYW1lc3BhY2VkKHNob3dfaGVhZF9yZWYsICZidWYpOworCXNlbmRfc3RyYnVmKGhkciwgInRleHQvcGxhaW4iLCAmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2luZm9fcGFja3Moc3RydWN0IHN0cmJ1ZiAqaGRyLCBjaGFyICphcmcpCit7CisJc2l6ZV90IG9iamRpcmxlbiA9IHN0cmxlbihnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCXNpemVfdCBjbnQgPSAwOworCisJc2VsZWN0X2dldGFueWZpbGUoaGRyKTsKKwlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPnBhY2tfbG9jYWwpCisJCQljbnQrKzsKKwl9CisKKwlzdHJidWZfZ3JvdygmYnVmLCBjbnQgKiA1MyArIDIpOworCWZvciAocCA9IGdldF9hbGxfcGFja3ModGhlX3JlcG9zaXRvcnkpOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+cGFja19sb2NhbCkKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJQICVzXG4iLCBwLT5wYWNrX25hbWUgKyBvYmpkaXJsZW4gKyA2KTsKKwl9CisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCisJaGRyX25vY2FjaGUoaGRyKTsKKwlzZW5kX3N0cmJ1ZihoZHIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwgJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2NvbnRlbnRfdHlwZShzdHJ1Y3Qgc3RyYnVmICpoZHIsIGNvbnN0IGNoYXIgKmFjY2VwdGVkX3R5cGUpCit7CisJY29uc3QgY2hhciAqYWN0dWFsX3R5cGUgPSBnZXRlbnYoIkNPTlRFTlRfVFlQRSIpOworCisJaWYgKCFhY3R1YWxfdHlwZSkKKwkJYWN0dWFsX3R5cGUgPSAiIjsKKworCWlmIChzdHJjbXAoYWN0dWFsX3R5cGUsIGFjY2VwdGVkX3R5cGUpKSB7CisJCWh0dHBfc3RhdHVzKGhkciwgNDE1LCAiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZSIpOworCQloZHJfbm9jYWNoZShoZHIpOworCQllbmRfaGVhZGVycyhoZHIpOworCQlmb3JtYXRfd3JpdGUoMSwKKwkJCSJFeHBlY3RlZCBQT1NUIHdpdGggQ29udGVudC1UeXBlICclcycsIgorCQkJIiBidXQgcmVjZWl2ZWQgJyVzJyBpbnN0ZWFkLlxuIiwKKwkJCWFjY2VwdGVkX3R5cGUsIGFjdHVhbF90eXBlKTsKKwkJZXhpdCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZpY2VfcnBjKHN0cnVjdCBzdHJidWYgKmhkciwgY2hhciAqc2VydmljZV9uYW1lKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHtOVUxMLCAiLS1zdGF0ZWxlc3MtcnBjIiwgIi4iLCBOVUxMfTsKKwlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnN2YyA9IHNlbGVjdF9zZXJ2aWNlKGhkciwgc2VydmljZV9uYW1lKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1yZXF1ZXN0Iiwgc3ZjLT5uYW1lKTsKKwljaGVja19jb250ZW50X3R5cGUoaGRyLCBidWYuYnVmKTsKKworCWhkcl9ub2NhY2hlKGhkcik7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgImFwcGxpY2F0aW9uL3gtZ2l0LSVzLXJlc3VsdCIsIHN2Yy0+bmFtZSk7CisJaGRyX3N0cihoZHIsIGNvbnRlbnRfdHlwZSwgYnVmLmJ1Zik7CisKKwllbmRfaGVhZGVycyhoZHIpOworCisJYXJndlswXSA9IHN2Yy0+bmFtZTsKKwlydW5fc2VydmljZShhcmd2LCBzdmMtPmJ1ZmZlcl9pbnB1dCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZGVhZDsKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV93ZWJjZ2koY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwlpZiAoZGVhZCA8PSAxKSB7CisJCXN0cnVjdCBzdHJidWYgaGRyID0gU1RSQlVGX0lOSVQ7CisKKwkJdnJlcG9ydGYoImZhdGFsOiAiLCBlcnIsIHBhcmFtcyk7CisKKwkJaHR0cF9zdGF0dXMoJmhkciwgNTAwLCAiSW50ZXJuYWwgU2VydmVyIEVycm9yIik7CisJCWhkcl9ub2NhY2hlKCZoZHIpOworCQllbmRfaGVhZGVycygmaGRyKTsKKwl9CisJZXhpdCgwKTsgLyogd2Ugc3VjY2Vzc2Z1bGx5IHJlcG9ydGVkIGEgZmFpbHVyZSA7LSkgKi8KK30KKworc3RhdGljIGludCBkaWVfd2ViY2dpX3JlY3Vyc2luZyh2b2lkKQoreworCXJldHVybiBkZWFkKysgPiAxOworfQorCitzdGF0aWMgY2hhciogZ2V0ZGlyKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpwYXRoaW5mbyA9IGdldGVudigiUEFUSF9JTkZPIik7CisJY2hhciAqcm9vdCA9IGdldGVudigiR0lUX1BST0pFQ1RfUk9PVCIpOworCWNoYXIgKnBhdGggPSBnZXRlbnYoIlBBVEhfVFJBTlNMQVRFRCIpOworCisJaWYgKHJvb3QgJiYgKnJvb3QpIHsKKwkJaWYgKCFwYXRoaW5mbyB8fCAhKnBhdGhpbmZvKQorCQkJZGllKCJHSVRfUFJPSkVDVF9ST09UIGlzIHNldCBidXQgUEFUSF9JTkZPIGlzIG5vdCIpOworCQlpZiAoZGFlbW9uX2F2b2lkX2FsaWFzKHBhdGhpbmZvKSkKKwkJCWRpZSgiJyVzJzogYWxpYXNlZCIsIHBhdGhpbmZvKTsKKwkJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIHJvb3QpOworCQlpZiAocGF0aGluZm9bMF0gPT0gJy8nKQorCQkJcGF0aGluZm8rKzsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBwYXRoaW5mbyk7CisJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0gZWxzZSBpZiAocGF0aCAmJiAqcGF0aCkgeworCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKwl9IGVsc2UKKwkJZGllKCJObyBHSVRfUFJPSkVDVF9ST09UIG9yIFBBVEhfVFJBTlNMQVRFRCBmcm9tIHNlcnZlciIpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHNlcnZpY2VfY21kIHsKKwljb25zdCBjaGFyICptZXRob2Q7CisJY29uc3QgY2hhciAqcGF0dGVybjsKKwl2b2lkICgqaW1wKShzdHJ1Y3Qgc3RyYnVmICosIGNoYXIgKik7Cit9IHNlcnZpY2VzW10gPSB7CisJeyJHRVQiLCAiL0hFQUQkIiwgZ2V0X2hlYWR9LAorCXsiR0VUIiwgIi9pbmZvL3JlZnMkIiwgZ2V0X2luZm9fcmVmc30sCisJeyJHRVQiLCAiL29iamVjdHMvaW5mby9hbHRlcm5hdGVzJCIsIGdldF90ZXh0X2ZpbGV9LAorCXsiR0VUIiwgIi9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzJCIsIGdldF90ZXh0X2ZpbGV9LAorCXsiR0VUIiwgIi9vYmplY3RzL2luZm8vcGFja3MkIiwgZ2V0X2luZm9fcGFja3N9LAorCXsiR0VUIiwgIi9vYmplY3RzL1swLTlhLWZdezJ9L1swLTlhLWZdezM4fSQiLCBnZXRfbG9vc2Vfb2JqZWN0fSwKKwl7IkdFVCIsICIvb2JqZWN0cy9bMC05YS1mXXsyfS9bMC05YS1mXXs2Mn0kIiwgZ2V0X2xvb3NlX29iamVjdH0sCisJeyJHRVQiLCAiL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfVxcLnBhY2skIiwgZ2V0X3BhY2tfZmlsZX0sCisJeyJHRVQiLCAiL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezY0fVxcLnBhY2skIiwgZ2V0X3BhY2tfZmlsZX0sCisJeyJHRVQiLCAiL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfVxcLmlkeCQiLCBnZXRfaWR4X2ZpbGV9LAorCXsiR0VUIiwgIi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs2NH1cXC5pZHgkIiwgZ2V0X2lkeF9maWxlfSwKKworCXsiUE9TVCIsICIvZ2l0LXVwbG9hZC1wYWNrJCIsIHNlcnZpY2VfcnBjfSwKKwl7IlBPU1QiLCAiL2dpdC1yZWNlaXZlLXBhY2skIiwgc2VydmljZV9ycGN9Cit9OworCitzdGF0aWMgaW50IGJhZF9yZXF1ZXN0KHN0cnVjdCBzdHJidWYgKmhkciwgY29uc3Qgc3RydWN0IHNlcnZpY2VfY21kICpjKQoreworCWNvbnN0IGNoYXIgKnByb3RvID0gZ2V0ZW52KCJTRVJWRVJfUFJPVE9DT0wiKTsKKworCWlmIChwcm90byAmJiAhc3RyY21wKHByb3RvLCAiSFRUUC8xLjEiKSkgeworCQlodHRwX3N0YXR1cyhoZHIsIDQwNSwgIk1ldGhvZCBOb3QgQWxsb3dlZCIpOworCQloZHJfc3RyKGhkciwgIkFsbG93IiwKKwkJCSFzdHJjbXAoYy0+bWV0aG9kLCAiR0VUIikgPyAiR0VULCBIRUFEIiA6IGMtPm1ldGhvZCk7CisJfSBlbHNlCisJCWh0dHBfc3RhdHVzKGhkciwgNDAwLCAiQmFkIFJlcXVlc3QiKTsKKwloZHJfbm9jYWNoZShoZHIpOworCWVuZF9oZWFkZXJzKGhkcik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqbWV0aG9kID0gZ2V0ZW52KCJSRVFVRVNUX01FVEhPRCIpOworCWNoYXIgKmRpcjsKKwlzdHJ1Y3Qgc2VydmljZV9jbWQgKmNtZCA9IE5VTEw7CisJY2hhciAqY21kX2FyZyA9IE5VTEw7CisJaW50IGk7CisJc3RydWN0IHN0cmJ1ZiBoZHIgPSBTVFJCVUZfSU5JVDsKKworCXNldF9kaWVfcm91dGluZShkaWVfd2ViY2dpKTsKKwlzZXRfZGllX2lzX3JlY3Vyc2luZ19yb3V0aW5lKGRpZV93ZWJjZ2lfcmVjdXJzaW5nKTsKKworCWlmICghbWV0aG9kKQorCQlkaWUoIk5vIFJFUVVFU1RfTUVUSE9EIGZyb20gc2VydmVyIik7CisJaWYgKCFzdHJjbXAobWV0aG9kLCAiSEVBRCIpKQorCQltZXRob2QgPSAiR0VUIjsKKwlkaXIgPSBnZXRkaXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlcnZpY2VzKTsgaSsrKSB7CisJCXN0cnVjdCBzZXJ2aWNlX2NtZCAqYyA9ICZzZXJ2aWNlc1tpXTsKKwkJcmVnZXhfdCByZTsKKwkJcmVnbWF0Y2hfdCBvdXRbMV07CisKKwkJaWYgKHJlZ2NvbXAoJnJlLCBjLT5wYXR0ZXJuLCBSRUdfRVhURU5ERUQpKQorCQkJZGllKCJCb2d1cyByZWdleCBpbiBzZXJ2aWNlIHRhYmxlOiAlcyIsIGMtPnBhdHRlcm4pOworCQlpZiAoIXJlZ2V4ZWMoJnJlLCBkaXIsIDEsIG91dCwgMCkpIHsKKwkJCXNpemVfdCBuOworCisJCQlpZiAoc3RyY21wKG1ldGhvZCwgYy0+bWV0aG9kKSkKKwkJCQlyZXR1cm4gYmFkX3JlcXVlc3QoJmhkciwgYyk7CisKKwkJCWNtZCA9IGM7CisJCQluID0gb3V0WzBdLnJtX2VvIC0gb3V0WzBdLnJtX3NvOworCQkJY21kX2FyZyA9IHhtZW1kdXB6KGRpciArIG91dFswXS5ybV9zbyArIDEsIG4gLSAxKTsKKwkJCWRpcltvdXRbMF0ucm1fc29dID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXJlZ2ZyZWUoJnJlKTsKKwl9CisKKwlpZiAoIWNtZCkKKwkJbm90X2ZvdW5kKCZoZHIsICJSZXF1ZXN0IG5vdCBzdXBwb3J0ZWQ6ICclcyciLCBkaXIpOworCisJc2V0dXBfcGF0aCgpOworCWlmICghZW50ZXJfcmVwbyhkaXIsIDApKQorCQlub3RfZm91bmQoJmhkciwgIk5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIiwgZGlyKTsKKwlpZiAoIWdldGVudigiR0lUX0hUVFBfRVhQT1JUX0FMTCIpICYmCisJICAgIGFjY2VzcygiZ2l0LWRhZW1vbi1leHBvcnQtb2siLCBGX09LKSApCisJCW5vdF9mb3VuZCgmaGRyLCAiUmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQ6ICclcyciLCBkaXIpOworCisJaHR0cF9jb25maWcoKTsKKwltYXhfcmVxdWVzdF9idWZmZXIgPSBnaXRfZW52X3Vsb25nKCJHSVRfSFRUUF9NQVhfUkVRVUVTVF9CVUZGRVIiLAorCQkJCQkgICBtYXhfcmVxdWVzdF9idWZmZXIpOworCisJY21kLT5pbXAoJmhkciwgY21kX2FyZyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9odHRwLWZldGNoLmMgYi9odHRwLWZldGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyYWMxMQotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAtZmV0Y2guYwpAQCAtMCwwICsxLDgwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgImh0dHAuaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgaHR0cF9mZXRjaF91c2FnZVtdID0gImdpdCBodHRwLWZldGNoICIKKyJbLWNdIFstdF0gWy1hXSBbLXZdIFstLXJlY292ZXJdIFstdyByZWZdIFstLXN0ZGluXSBjb21taXQtaWQgdXJsIjsKKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CisJaW50IGNvbW1pdHNfb25fc3RkaW4gPSAwOworCWludCBjb21taXRzOworCWNvbnN0IGNoYXIgKip3cml0ZV9yZWYgPSBOVUxMOworCWNoYXIgKipjb21taXRfaWQ7CisJY2hhciAqdXJsID0gTlVMTDsKKwlpbnQgYXJnID0gMTsKKwlpbnQgcmMgPSAwOworCWludCBnZXRfdmVyYm9zZWx5ID0gMDsKKwlpbnQgZ2V0X3JlY292ZXIgPSAwOworCisJd2hpbGUgKGFyZyA8IGFyZ2MgJiYgYXJndlthcmddWzBdID09ICctJykgeworCQlpZiAoYXJndlthcmddWzFdID09ICd0JykgeworCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnYycpIHsKKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2EnKSB7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICd2JykgeworCQkJZ2V0X3ZlcmJvc2VseSA9IDE7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICd3JykgeworCQkJd3JpdGVfcmVmID0gJmFyZ3ZbYXJnICsgMV07CisJCQlhcmcrKzsKKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2gnKSB7CisJCQl1c2FnZShodHRwX2ZldGNoX3VzYWdlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbYXJnXSwgIi0tcmVjb3ZlciIpKSB7CisJCQlnZXRfcmVjb3ZlciA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXN0ZGluIikpIHsKKwkJCWNvbW1pdHNfb25fc3RkaW4gPSAxOworCQl9CisJCWFyZysrOworCX0KKwlpZiAoYXJnYyAhPSBhcmcgKyAyIC0gY29tbWl0c19vbl9zdGRpbikKKwkJdXNhZ2UoaHR0cF9mZXRjaF91c2FnZSk7CisJaWYgKGNvbW1pdHNfb25fc3RkaW4pIHsKKwkJY29tbWl0cyA9IHdhbGtlcl90YXJnZXRzX3N0ZGluKCZjb21taXRfaWQsICZ3cml0ZV9yZWYpOworCX0gZWxzZSB7CisJCWNvbW1pdF9pZCA9IChjaGFyICoqKSAmYXJndlthcmcrK107CisJCWNvbW1pdHMgPSAxOworCX0KKworCWlmIChhcmd2W2FyZ10pCisJCXN0cl9lbmRfdXJsX3dpdGhfc2xhc2goYXJndlthcmddLCAmdXJsKTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWh0dHBfaW5pdChOVUxMLCB1cmwsIDApOworCXdhbGtlciA9IGdldF9odHRwX3dhbGtlcih1cmwpOworCXdhbGtlci0+Z2V0X3ZlcmJvc2VseSA9IGdldF92ZXJib3NlbHk7CisJd2Fsa2VyLT5nZXRfcmVjb3ZlciA9IGdldF9yZWNvdmVyOworCisJcmMgPSB3YWxrZXJfZmV0Y2god2Fsa2VyLCBjb21taXRzLCBjb21taXRfaWQsIHdyaXRlX3JlZiwgdXJsKTsKKworCWlmIChjb21taXRzX29uX3N0ZGluKQorCQl3YWxrZXJfdGFyZ2V0c19mcmVlKGNvbW1pdHMsIGNvbW1pdF9pZCwgd3JpdGVfcmVmKTsKKworCWlmICh3YWxrZXItPmNvcnJ1cHRfb2JqZWN0X2ZvdW5kKSB7CisJCWZwcmludGYoc3RkZXJyLAorIlNvbWUgbG9vc2Ugb2JqZWN0IHdlcmUgZm91bmQgdG8gYmUgY29ycnVwdCwgYnV0IHRoZXkgbWlnaHQgYmUganVzdFxuIgorImEgZmFsc2UgJzQwNCBOb3QgRm91bmQnIGVycm9yIG1lc3NhZ2Ugc2VudCB3aXRoIGluY29ycmVjdCBIVFRQXG4iCisic3RhdHVzIGNvZGUuICBTdWdnZXN0IHJ1bm5pbmcgJ2dpdCBmc2NrJy5cbiIpOworCX0KKworCXdhbGtlcl9mcmVlKHdhbGtlcik7CisJaHR0cF9jbGVhbnVwKCk7CisKKwlmcmVlKHVybCk7CisKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9odHRwLXB1c2guYyBiL2h0dHAtcHVzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMmYzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9odHRwLXB1c2guYwpAQCAtMCwwICsxLDE5ODkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisKKyNpZmRlZiBFWFBBVF9ORUVEU19YTUxQQVJTRV9ICisjaW5jbHVkZSA8eG1scGFyc2UuaD4KKyNlbHNlCisjaW5jbHVkZSA8ZXhwYXQuaD4KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciBodHRwX3B1c2hfdXNhZ2VbXSA9CisiZ2l0IGh0dHAtcHVzaCBbLS1hbGxdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS12ZXJib3NlXSA8cmVtb3RlPiBbPGhlYWQ+Li4uXVxuIjsKKworI2lmbmRlZiBYTUxfU1RBVFVTX09LCitlbnVtIFhNTF9TdGF0dXMgeworICBYTUxfU1RBVFVTX09LID0gMSwKKyAgWE1MX1NUQVRVU19FUlJPUiA9IDAKK307CisjZGVmaW5lIFhNTF9TVEFUVVNfT0sgICAgMQorI2RlZmluZSBYTUxfU1RBVFVTX0VSUk9SIDAKKyNlbmRpZgorCisjZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgorCisvKiBEQVYgbWV0aG9kcyAqLworI2RlZmluZSBEQVZfTE9DSyAiTE9DSyIKKyNkZWZpbmUgREFWX01LQ09MICJNS0NPTCIKKyNkZWZpbmUgREFWX01PVkUgIk1PVkUiCisjZGVmaW5lIERBVl9QUk9QRklORCAiUFJPUEZJTkQiCisjZGVmaW5lIERBVl9QVVQgIlBVVCIKKyNkZWZpbmUgREFWX1VOTE9DSyAiVU5MT0NLIgorI2RlZmluZSBEQVZfREVMRVRFICJERUxFVEUiCisKKy8qIERBViBsb2NrIGZsYWdzICovCisjZGVmaW5lIERBVl9QUk9QX0xPQ0tXUiAoMXUgPDwgMCkKKyNkZWZpbmUgREFWX1BST1BfTE9DS0VYICgxdSA8PCAxKQorI2RlZmluZSBEQVZfTE9DS19PSyAoMXUgPDwgMikKKworLyogREFWIFhNTCBwcm9wZXJ0aWVzICovCisjZGVmaW5lIERBVl9DVFhfTE9DS0VOVFJZICIubXVsdGlzdGF0dXMucmVzcG9uc2UucHJvcHN0YXQucHJvcC5zdXBwb3J0ZWRsb2NrLmxvY2tlbnRyeSIKKyNkZWZpbmUgREFWX0NUWF9MT0NLVFlQRV9XUklURSAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLnByb3BzdGF0LnByb3Auc3VwcG9ydGVkbG9jay5sb2NrZW50cnkubG9ja3R5cGUud3JpdGUiCisjZGVmaW5lIERBVl9DVFhfTE9DS1RZUEVfRVhDTFVTSVZFICIubXVsdGlzdGF0dXMucmVzcG9uc2UucHJvcHN0YXQucHJvcC5zdXBwb3J0ZWRsb2NrLmxvY2tlbnRyeS5sb2Nrc2NvcGUuZXhjbHVzaXZlIgorI2RlZmluZSBEQVZfQUNUSVZFTE9DS19PV05FUiAiLnByb3AubG9ja2Rpc2NvdmVyeS5hY3RpdmVsb2NrLm93bmVyLmhyZWYiCisjZGVmaW5lIERBVl9BQ1RJVkVMT0NLX1RJTUVPVVQgIi5wcm9wLmxvY2tkaXNjb3ZlcnkuYWN0aXZlbG9jay50aW1lb3V0IgorI2RlZmluZSBEQVZfQUNUSVZFTE9DS19UT0tFTiAiLnByb3AubG9ja2Rpc2NvdmVyeS5hY3RpdmVsb2NrLmxvY2t0b2tlbi5ocmVmIgorI2RlZmluZSBEQVZfUFJPUEZJTkRfUkVTUCAiLm11bHRpc3RhdHVzLnJlc3BvbnNlIgorI2RlZmluZSBEQVZfUFJPUEZJTkRfTkFNRSAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLmhyZWYiCisjZGVmaW5lIERBVl9QUk9QRklORF9DT0xMRUNUSU9OICIubXVsdGlzdGF0dXMucmVzcG9uc2UucHJvcHN0YXQucHJvcC5yZXNvdXJjZXR5cGUuY29sbGVjdGlvbiIKKworLyogREFWIHJlcXVlc3QgYm9keSB0ZW1wbGF0ZXMgKi8KKyNkZWZpbmUgUFJPUEZJTkRfU1VQUE9SVEVETE9DS19SRVFVRVNUICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiID8+XG48RDpwcm9wZmluZCB4bWxuczpEPVwiREFWOlwiPlxuPEQ6cHJvcCB4bWxuczpSPVwiJXNcIj5cbjxEOnN1cHBvcnRlZGxvY2svPlxuPC9EOnByb3A+XG48L0Q6cHJvcGZpbmQ+IgorI2RlZmluZSBQUk9QRklORF9BTExfUkVRVUVTVCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiA/PlxuPEQ6cHJvcGZpbmQgeG1sbnM6RD1cIkRBVjpcIj5cbjxEOmFsbHByb3AvPlxuPC9EOnByb3BmaW5kPiIKKyNkZWZpbmUgTE9DS19SRVFVRVNUICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiID8+XG48RDpsb2NraW5mbyB4bWxuczpEPVwiREFWOlwiPlxuPEQ6bG9ja3Njb3BlPjxEOmV4Y2x1c2l2ZS8+PC9EOmxvY2tzY29wZT5cbjxEOmxvY2t0eXBlPjxEOndyaXRlLz48L0Q6bG9ja3R5cGU+XG48RDpvd25lcj5cbjxEOmhyZWY+bWFpbHRvOiVzPC9EOmhyZWY+XG48L0Q6b3duZXI+XG48L0Q6bG9ja2luZm8+IgorCisjZGVmaW5lIExPQ0tfVElNRSA2MDAKKyNkZWZpbmUgTE9DS19SRUZSRVNIIDMwCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIExPQ0FMICAgICgxdTw8MTYpCisjZGVmaW5lIFJFTU9URSAgICgxdTw8MTcpCisjZGVmaW5lIEZFVENISU5HICgxdTw8MTgpCisjZGVmaW5lIFBVU0hJTkcgICgxdTw8MTkpCisKKy8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHN5bWJvbGljIHJlZnMuIE9ubHkgd2l0aGluIHJlYXNvbiwgdGhvdWdoICovCisjZGVmaW5lIE1BWERFUFRIIDUKKworc3RhdGljIGludCBwdXNoaW5nOworc3RhdGljIGludCBhYm9ydGVkOworc3RhdGljIHNpZ25lZCBjaGFyIHJlbW90ZV9kaXJfZXhpc3RzWzI1Nl07CisKK3N0YXRpYyBpbnQgcHVzaF92ZXJib3NlbHk7CitzdGF0aWMgaW50IHB1c2hfYWxsID0gTUFUQ0hfUkVGU19OT05FOworc3RhdGljIGludCBmb3JjZV9hbGw7CitzdGF0aWMgaW50IGRyeV9ydW47CitzdGF0aWMgaW50IGhlbHBlcl9zdGF0dXM7CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm9iamVjdHM7CisKK3N0cnVjdCByZXBvIHsKKwljaGFyICp1cmw7CisJY2hhciAqcGF0aDsKKwlpbnQgcGF0aF9sZW47CisJaW50IGhhc19pbmZvX3JlZnM7CisJaW50IGNhbl91cGRhdGVfaW5mb19yZWZzOworCWludCBoYXNfaW5mb19wYWNrczsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja3M7CisJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVwbyAqcmVwbzsKKworZW51bSB0cmFuc2Zlcl9zdGF0ZSB7CisJTkVFRF9GRVRDSCwKKwlSVU5fRkVUQ0hfTE9PU0UsCisJUlVOX0ZFVENIX1BBQ0tFRCwKKwlORUVEX1BVU0gsCisJUlVOX01LQ09MLAorCVJVTl9QVVQsCisJUlVOX01PVkUsCisJQUJPUlRFRCwKKwlDT01QTEVURQorfTsKKworc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgeworCXN0cnVjdCBvYmplY3QgKm9iajsKKwljaGFyICp1cmw7CisJY2hhciAqZGVzdDsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2s7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM7CisJc3RydWN0IGJ1ZmZlciBidWZmZXI7CisJZW51bSB0cmFuc2Zlcl9zdGF0ZSBzdGF0ZTsKKwlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKwljaGFyIGVycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CisJbG9uZyBodHRwX2NvZGU7CisJdm9pZCAqdXNlckRhdGE7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3RfcXVldWVfaGVhZDsKKworc3RydWN0IHhtbF9jdHggeworCWNoYXIgKm5hbWU7CisJaW50IGxlbjsKKwljaGFyICpjZGF0YTsKKwl2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCB4bWxfY3R4ICpjdHgsIGludCB0YWdfY2xvc2VkKTsKKwl2b2lkICp1c2VyRGF0YTsKK307CisKK3N0cnVjdCByZW1vdGVfbG9jayB7CisJY2hhciAqdXJsOworCWNoYXIgKm93bmVyOworCWNoYXIgKnRva2VuOworCWNoYXIgdG1wZmlsZV9zdWZmaXhbR0lUX01BWF9IRVhTWiArIDFdOworCXRpbWVfdCBzdGFydF90aW1lOworCWxvbmcgdGltZW91dDsKKwlpbnQgcmVmcmVzaGluZzsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKm5leHQ7Cit9OworCisvKiBGbGFncyB0aGF0IGNvbnRyb2wgcmVtb3RlX2xzIHByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgUFJPQ0VTU19GSUxFUyAoMXUgPDwgMCkKKyNkZWZpbmUgUFJPQ0VTU19ESVJTICAoMXUgPDwgMSkKKyNkZWZpbmUgUkVDVVJTSVZFICAgICAoMXUgPDwgMikKKworLyogRmxhZ3MgdGhhdCByZW1vdGVfbHMgcGFzc2VzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLworI2RlZmluZSBJU19ESVIgKDF1IDw8IDApCisKK3N0cnVjdCByZW1vdGVfbHNfY3R4IHsKKwljaGFyICpwYXRoOworCXZvaWQgKCp1c2VyRnVuYykoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKTsKKwl2b2lkICp1c2VyRGF0YTsKKwlpbnQgZmxhZ3M7CisJY2hhciAqZGVudHJ5X25hbWU7CisJaW50IGRlbnRyeV9mbGFnczsKKwlzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqcGFyZW50OworfTsKKworLyogZ2V0X2Rhdl90b2tlbl9oZWFkZXJzIG9wdGlvbnMgKi8KK2VudW0gZGF2X2hlYWRlcl9mbGFnIHsKKwlEQVZfSEVBREVSX0lGID0gKDF1IDw8IDApLAorCURBVl9IRUFERVJfTE9DSyA9ICgxdSA8PCAxKSwKKwlEQVZfSEVBREVSX1RJTUVPVVQgPSAoMXUgPDwgMikKK307CisKK3N0YXRpYyBjaGFyICp4bWxfZW50aXRpZXMoY29uc3QgY2hhciAqcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRzdHJfeG1sX3F1b3RlZCgmYnVmLCBzKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY3VybF9zZXR1cF9odHRwX2dldChDVVJMICpjdXJsLCBjb25zdCBjaGFyICp1cmwsCisJCWNvbnN0IGNoYXIgKmN1c3RvbV9yZXEpCit7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBHRVQsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIGN1c3RvbV9yZXEpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfbnVsbCk7Cit9CisKK3N0YXRpYyB2b2lkIGN1cmxfc2V0dXBfaHR0cChDVVJMICpjdXJsLCBjb25zdCBjaGFyICp1cmwsCisJCWNvbnN0IGNoYXIgKmN1c3RvbV9yZXEsIHN0cnVjdCBidWZmZXIgKmJ1ZmZlciwKKwkJY3VybF93cml0ZV9jYWxsYmFjayB3cml0ZV9mbikKK3sKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFVULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEUsIGJ1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lORklMRVNJWkUsIGJ1ZmZlci0+YnVmLmxlbik7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgZnJlYWRfYnVmZmVyKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JT0NUTERBVEEsIGJ1ZmZlcik7CisjZW5kaWYKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVfZm4pOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBjdXN0b21fcmVxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpnZXRfZGF2X3Rva2VuX2hlYWRlcnMoc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrLCBlbnVtIGRhdl9oZWFkZXJfZmxhZyBvcHRpb25zKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycygpOworCisJaWYgKG9wdGlvbnMgJiBEQVZfSEVBREVSX0lGKSB7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJJZjogKDwlcz4pIiwgbG9jay0+dG9rZW4pOworCQlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCBidWYuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCX0KKwlpZiAob3B0aW9ucyAmIERBVl9IRUFERVJfTE9DSykgeworCQlzdHJidWZfYWRkZigmYnVmLCAiTG9jay1Ub2tlbjogPCVzPiIsIGxvY2stPnRva2VuKTsKKwkJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisJaWYgKG9wdGlvbnMgJiBEQVZfSEVBREVSX1RJTUVPVVQpIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlRpbWVvdXQ6IFNlY29uZC0lbGQiLCBsb2NrLT50aW1lb3V0KTsKKwkJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gZGF2X2hlYWRlcnM7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KTsKK3N0YXRpYyB2b2lkIHJlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCk7CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfcmVzcG9uc2Uodm9pZCAqY2FsbGJhY2tfZGF0YSkKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9CisJCShzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqKWNhbGxiYWNrX2RhdGE7CisKKwlmaW5pc2hfcmVxdWVzdChyZXF1ZXN0KTsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisKK3N0YXRpYyB2b2lkIHN0YXJ0X2ZldGNoX2xvb3NlKHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpvYmpfcmVxOworCisJb2JqX3JlcSA9IG5ld19odHRwX29iamVjdF9yZXF1ZXN0KHJlcG8tPnVybCwgJnJlcXVlc3QtPm9iai0+b2lkKTsKKwlpZiAob2JqX3JlcSA9PSBOVUxMKSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJcmV0dXJuOworCX0KKworCXNsb3QgPSBvYmpfcmVxLT5zbG90OworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOworCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OworCXJlcXVlc3QtPnNsb3QgPSBzbG90OworCXJlcXVlc3QtPnVzZXJEYXRhID0gb2JqX3JlcTsKKworCS8qIFRyeSB0byBnZXQgdGhlIHJlcXVlc3Qgc3RhcnRlZCwgYWJvcnQgdGhlIHJlcXVlc3Qgb24gZXJyb3IgKi8KKwlyZXF1ZXN0LT5zdGF0ZSA9IFJVTl9GRVRDSF9MT09TRTsKKwlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IEdFVCByZXF1ZXN0XG4iKTsKKwkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7CisJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X21rY29sKHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCWNoYXIgKmhleCA9IG9pZF90b19oZXgoJnJlcXVlc3QtPm9iai0+b2lkKTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKworCXJlcXVlc3QtPnVybCA9IGdldF9yZW1vdGVfb2JqZWN0X3VybChyZXBvLT51cmwsIGhleCwgMSk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7CisJY3VybF9zZXR1cF9odHRwX2dldChzbG90LT5jdXJsLCByZXF1ZXN0LT51cmwsIERBVl9NS0NPTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCByZXF1ZXN0LT5lcnJvcnN0cik7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJCXJlcXVlc3QtPnN0YXRlID0gUlVOX01LQ09MOworCX0gZWxzZSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJRlJFRV9BTkRfTlVMTChyZXF1ZXN0LT51cmwpOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzdGFydF9mZXRjaF9wYWNrZWQoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKKworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpjaGVja19yZXF1ZXN0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCXN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcTsKKworCXRhcmdldCA9IGZpbmRfc2hhMV9wYWNrKHJlcXVlc3QtPm9iai0+b2lkLmhhc2gsIHJlcG8tPnBhY2tzKTsKKwlpZiAoIXRhcmdldCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBmZXRjaCAlcywgd2lsbCBub3QgYmUgYWJsZSB0byB1cGRhdGUgc2VydmVyIGluZm8gcmVmc1xuIiwgb2lkX3RvX2hleCgmcmVxdWVzdC0+b2JqLT5vaWQpKTsKKwkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCXJldHVybjsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwJIkZldGNoaW5nIHBhY2sgJXNcbiIsCisJCWhhc2hfdG9faGV4KHRhcmdldC0+aGFzaCkpOworCWZwcmludGYoc3RkZXJyLCAiIHdoaWNoIGNvbnRhaW5zICVzXG4iLCBvaWRfdG9faGV4KCZyZXF1ZXN0LT5vYmotPm9pZCkpOworCisJcHJlcSA9IG5ld19odHRwX3BhY2tfcmVxdWVzdCh0YXJnZXQsIHJlcG8tPnVybCk7CisJaWYgKHByZXEgPT0gTlVMTCkgeworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJldHVybjsKKwl9CisJcHJlcS0+bHN0ID0gJnJlcG8tPnBhY2tzOworCisJLyogTWFrZSBzdXJlIHRoZXJlIGlzbid0IGFub3RoZXIgb3BlbiByZXF1ZXN0IGZvciB0aGlzIHBhY2sgKi8KKwl3aGlsZSAoY2hlY2tfcmVxdWVzdCkgeworCQlpZiAoY2hlY2tfcmVxdWVzdC0+c3RhdGUgPT0gUlVOX0ZFVENIX1BBQ0tFRCAmJgorCQkgICAgIXN0cmNtcChjaGVja19yZXF1ZXN0LT51cmwsIHByZXEtPnVybCkpIHsKKwkJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCQlyZXR1cm47CisJCX0KKwkJY2hlY2tfcmVxdWVzdCA9IGNoZWNrX3JlcXVlc3QtPm5leHQ7CisJfQorCisJcHJlcS0+c2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CisJcHJlcS0+c2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7CisJcmVxdWVzdC0+c2xvdCA9IHByZXEtPnNsb3Q7CisJcmVxdWVzdC0+dXNlckRhdGEgPSBwcmVxOworCisJLyogVHJ5IHRvIGdldCB0aGUgcmVxdWVzdCBzdGFydGVkLCBhYm9ydCB0aGUgcmVxdWVzdCBvbiBlcnJvciAqLworCXJlcXVlc3QtPnN0YXRlID0gUlVOX0ZFVENIX1BBQ0tFRDsKKwlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IEdFVCByZXF1ZXN0XG4iKTsKKwkJcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKKwkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9wdXQoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJY2hhciAqaGV4ID0gb2lkX3RvX2hleCgmcmVxdWVzdC0+b2JqLT5vaWQpOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgaGRyWzUwXTsKKwl2b2lkICp1bnBhY2tlZDsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwlpbnQgaGRybGVuOworCXNzaXplX3Qgc2l6ZTsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisKKwl1bnBhY2tlZCA9IHJlYWRfb2JqZWN0X2ZpbGUoJnJlcXVlc3QtPm9iai0+b2lkLCAmdHlwZSwgJmxlbik7CisJaGRybGVuID0geHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksICIlcyAlIlBSSXVNQVggLCB0eXBlX25hbWUodHlwZSksICh1aW50bWF4X3QpbGVuKSArIDE7CisKKwkvKiBTZXQgaXQgdXAgKi8KKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIHpsaWJfY29tcHJlc3Npb25fbGV2ZWwpOworCXNpemUgPSBnaXRfZGVmbGF0ZV9ib3VuZCgmc3RyZWFtLCBsZW4gKyBoZHJsZW4pOworCXN0cmJ1Zl9pbml0KCZyZXF1ZXN0LT5idWZmZXIuYnVmLCBzaXplKTsKKwlyZXF1ZXN0LT5idWZmZXIucG9zbiA9IDA7CisKKwkvKiBDb21wcmVzcyBpdCAqLworCXN0cmVhbS5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopcmVxdWVzdC0+YnVmZmVyLmJ1Zi5idWY7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemU7CisKKwkvKiBGaXJzdCBoZWFkZXIuLiAqLworCXN0cmVhbS5uZXh0X2luID0gKHZvaWQgKiloZHI7CisJc3RyZWFtLmF2YWlsX2luID0gaGRybGVuOworCXdoaWxlIChnaXRfZGVmbGF0ZSgmc3RyZWFtLCAwKSA9PSBaX09LKQorCQk7IC8qIG5vdGhpbmcgKi8KKworCS8qIFRoZW4gdGhlIGRhdGEgaXRzZWxmLi4gKi8KKwlzdHJlYW0ubmV4dF9pbiA9IHVucGFja2VkOworCXN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKKwl3aGlsZSAoZ2l0X2RlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpID09IFpfT0spCisJCTsgLyogbm90aGluZyAqLworCWdpdF9kZWZsYXRlX2VuZCgmc3RyZWFtKTsKKwlmcmVlKHVucGFja2VkKTsKKworCXJlcXVlc3QtPmJ1ZmZlci5idWYubGVuID0gc3RyZWFtLnRvdGFsX291dDsKKworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIkRlc3RpbmF0aW9uOiAiKTsKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgcmVwby0+dXJsLCBoZXgsIDApOworCXJlcXVlc3QtPmRlc3QgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJYXBwZW5kX3JlbW90ZV9vYmplY3RfdXJsKCZidWYsIHJlcG8tPnVybCwgaGV4LCAwKTsKKwlzdHJidWZfYWRkKCZidWYsIHJlcXVlc3QtPmxvY2stPnRtcGZpbGVfc3VmZml4LCB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDEpOworCXJlcXVlc3QtPnVybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7CisJY3VybF9zZXR1cF9odHRwKHNsb3QtPmN1cmwsIHJlcXVlc3QtPnVybCwgREFWX1BVVCwKKwkJCSZyZXF1ZXN0LT5idWZmZXIsIGZ3cml0ZV9udWxsKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlyZXF1ZXN0LT5zbG90ID0gc2xvdDsKKwkJcmVxdWVzdC0+c3RhdGUgPSBSVU5fUFVUOworCX0gZWxzZSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJRlJFRV9BTkRfTlVMTChyZXF1ZXN0LT51cmwpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RhcnRfbW92ZShzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnMgPSBodHRwX2NvcHlfZGVmYXVsdF9oZWFkZXJzKCk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7CisJY3VybF9zZXR1cF9odHRwX2dldChzbG90LT5jdXJsLCByZXF1ZXN0LT51cmwsIERBVl9NT1ZFKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCByZXF1ZXN0LT5kZXN0KTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiT3ZlcndyaXRlOiBUIik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlyZXF1ZXN0LT5zbG90ID0gc2xvdDsKKwkJcmVxdWVzdC0+c3RhdGUgPSBSVU5fTU9WRTsKKwl9IGVsc2UgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCUZSRUVfQU5EX05VTEwocmVxdWVzdC0+dXJsKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVmcmVzaF9sb2NrKHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzOworCWludCByYyA9IDA7CisKKwlsb2NrLT5yZWZyZXNoaW5nID0gMTsKKworCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfSUYgfCBEQVZfSEVBREVSX1RJTUVPVVQpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHBfZ2V0KHNsb3QtPmN1cmwsIGxvY2stPnVybCwgREFWX0xPQ0spOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXZfaGVhZGVycyk7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQkJZnByaW50ZihzdGRlcnIsICJMT0NLIEhUVFAgZXJyb3IgJWxkXG4iLAorCQkJCXJlc3VsdHMuaHR0cF9jb2RlKTsKKwkJfSBlbHNlIHsKKwkJCWxvY2stPnN0YXJ0X3RpbWUgPSB0aW1lKE5VTEwpOworCQkJcmMgPSAxOworCQl9CisJfQorCisJbG9jay0+cmVmcmVzaGluZyA9IDA7CisJY3VybF9zbGlzdF9mcmVlX2FsbChkYXZfaGVhZGVycyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2xvY2tzKHZvaWQpCit7CisJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrID0gcmVwby0+bG9ja3M7CisJdGltZV90IGN1cnJlbnRfdGltZSA9IHRpbWUoTlVMTCk7CisJaW50IHRpbWVfcmVtYWluaW5nOworCisJd2hpbGUgKGxvY2spIHsKKwkJdGltZV9yZW1haW5pbmcgPSBsb2NrLT5zdGFydF90aW1lICsgbG9jay0+dGltZW91dCAtCisJCQljdXJyZW50X3RpbWU7CisJCWlmICghbG9jay0+cmVmcmVzaGluZyAmJiB0aW1lX3JlbWFpbmluZyA8IExPQ0tfUkVGUkVTSCkgeworCQkJaWYgKCFyZWZyZXNoX2xvY2sobG9jaykpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIlVuYWJsZSB0byByZWZyZXNoIGxvY2sgZm9yICVzXG4iLAorCQkJCQlsb2NrLT51cmwpOworCQkJCWFib3J0ZWQgPSAxOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlsb2NrID0gbG9jay0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqZW50cnkgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisKKwlpZiAocmVxdWVzdCA9PSByZXF1ZXN0X3F1ZXVlX2hlYWQpIHsKKwkJcmVxdWVzdF9xdWV1ZV9oZWFkID0gcmVxdWVzdC0+bmV4dDsKKwl9IGVsc2UgeworCQl3aGlsZSAoZW50cnkgJiYgZW50cnktPm5leHQgIT0gcmVxdWVzdCkKKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCWlmIChlbnRyeSkKKwkJCWVudHJ5LT5uZXh0ID0gcmVxdWVzdC0+bmV4dDsKKwl9CisKKwlmcmVlKHJlcXVlc3QtPnVybCk7CisJZnJlZShyZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX3JlcXVlc3Qoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpvYmpfcmVxOworCisJcmVxdWVzdC0+Y3VybF9yZXN1bHQgPSByZXF1ZXN0LT5zbG90LT5jdXJsX3Jlc3VsdDsKKwlyZXF1ZXN0LT5odHRwX2NvZGUgPSByZXF1ZXN0LT5zbG90LT5odHRwX2NvZGU7CisJcmVxdWVzdC0+c2xvdCA9IE5VTEw7CisKKwkvKiBLZWVwIGxvY2tzIGFjdGl2ZSAqLworCWNoZWNrX2xvY2tzKCk7CisKKwlpZiAocmVxdWVzdC0+aGVhZGVycyAhPSBOVUxMKQorCQljdXJsX3NsaXN0X2ZyZWVfYWxsKHJlcXVlc3QtPmhlYWRlcnMpOworCisJLyogVVJMIGlzIHJldXNlZCBmb3IgTU9WRSBhZnRlciBQVVQgYW5kIHVzZWQgZHVyaW5nIEZFVENIICovCisJaWYgKHJlcXVlc3QtPnN0YXRlICE9IFJVTl9QVVQgJiYgcmVxdWVzdC0+c3RhdGUgIT0gUlVOX0ZFVENIX1BBQ0tFRCkgeworCQlGUkVFX0FORF9OVUxMKHJlcXVlc3QtPnVybCk7CisJfQorCisJaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9NS0NPTCkgeworCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgPT0gQ1VSTEVfT0sgfHwKKwkJICAgIHJlcXVlc3QtPmh0dHBfY29kZSA9PSA0MDUpIHsKKwkJCXJlbW90ZV9kaXJfZXhpc3RzW3JlcXVlc3QtPm9iai0+b2lkLmhhc2hbMF1dID0gMTsKKwkJCXN0YXJ0X3B1dChyZXF1ZXN0KTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiTUtDT0wgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlvaWRfdG9faGV4KCZyZXF1ZXN0LT5vYmotPm9pZCksCisJCQkJcmVxdWVzdC0+Y3VybF9yZXN1bHQsIHJlcXVlc3QtPmh0dHBfY29kZSk7CisJCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCQlhYm9ydGVkID0gMTsKKwkJfQorCX0gZWxzZSBpZiAocmVxdWVzdC0+c3RhdGUgPT0gUlVOX1BVVCkgeworCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spIHsKKwkJCXN0YXJ0X21vdmUocmVxdWVzdCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwJIlBVVCAlcyBmYWlsZWQsIGFib3J0aW5nICglZC8lbGQpXG4iLAorCQkJCW9pZF90b19oZXgoJnJlcXVlc3QtPm9iai0+b2lkKSwKKwkJCQlyZXF1ZXN0LT5jdXJsX3Jlc3VsdCwgcmVxdWVzdC0+aHR0cF9jb2RlKTsKKwkJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJCWFib3J0ZWQgPSAxOworCQl9CisJfSBlbHNlIGlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBSVU5fTU9WRSkgeworCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spIHsKKwkJCWlmIChwdXNoX3ZlcmJvc2VseSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICBzZW50ICVzXG4iLAorCQkJCQlvaWRfdG9faGV4KCZyZXF1ZXN0LT5vYmotPm9pZCkpOworCQkJcmVxdWVzdC0+b2JqLT5mbGFncyB8PSBSRU1PVEU7CisJCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIk1PVkUgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlvaWRfdG9faGV4KCZyZXF1ZXN0LT5vYmotPm9pZCksCisJCQkJcmVxdWVzdC0+Y3VybF9yZXN1bHQsIHJlcXVlc3QtPmh0dHBfY29kZSk7CisJCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCQlhYm9ydGVkID0gMTsKKwkJfQorCX0gZWxzZSBpZiAocmVxdWVzdC0+c3RhdGUgPT0gUlVOX0ZFVENIX0xPT1NFKSB7CisJCW9ial9yZXEgPSAoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKilyZXF1ZXN0LT51c2VyRGF0YTsKKworCQlpZiAoZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSkgPT0gMCkKKwkJCWlmIChvYmpfcmVxLT5yZW5hbWUgPT0gMCkKKwkJCQlyZXF1ZXN0LT5vYmotPmZsYWdzIHw9IChMT0NBTCB8IFJFTU9URSk7CisKKwkJLyogVHJ5IGZldGNoaW5nIHBhY2tlZCBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKHJlcXVlc3QtPm9iai0+ZmxhZ3MgJiBMT0NBTCkgeworCQkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworCQkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQl9IGVsc2UKKwkJCXN0YXJ0X2ZldGNoX3BhY2tlZChyZXF1ZXN0KTsKKworCX0gZWxzZSBpZiAocmVxdWVzdC0+c3RhdGUgPT0gUlVOX0ZFVENIX1BBQ0tFRCkgeworCQlpbnQgZmFpbCA9IDE7CisJCWlmIChyZXF1ZXN0LT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZ2V0IHBhY2sgZmlsZSAlc1xuJXMiLAorCQkJCXJlcXVlc3QtPnVybCwgY3VybF9lcnJvcnN0cik7CisJCX0gZWxzZSB7CisJCQlwcmVxID0gKHN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqKXJlcXVlc3QtPnVzZXJEYXRhOworCisJCQlpZiAocHJlcSkgeworCQkJCWlmIChmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSkgPT0gMCkKKwkJCQkJZmFpbCA9IDA7CisJCQkJcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKKwkJCX0KKwkJfQorCQlpZiAoZmFpbCkKKwkJCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCX0KK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgaW50IGlzX3J1bm5pbmdfcXVldWU7CitzdGF0aWMgaW50IGZpbGxfYWN0aXZlX3Nsb3Qodm9pZCAqdW51c2VkKQoreworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0OworCisJaWYgKGFib3J0ZWQgfHwgIWlzX3J1bm5pbmdfcXVldWUpCisJCXJldHVybiAwOworCisJZm9yIChyZXF1ZXN0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworCQlpZiAocmVxdWVzdC0+c3RhdGUgPT0gTkVFRF9GRVRDSCkgeworCQkJc3RhcnRfZmV0Y2hfbG9vc2UocmVxdWVzdCk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChwdXNoaW5nICYmIHJlcXVlc3QtPnN0YXRlID09IE5FRURfUFVTSCkgeworCQkJaWYgKHJlbW90ZV9kaXJfZXhpc3RzW3JlcXVlc3QtPm9iai0+b2lkLmhhc2hbMF1dID09IDEpIHsKKwkJCQlzdGFydF9wdXQocmVxdWVzdCk7CisJCQl9IGVsc2UgeworCQkJCXN0YXJ0X21rY29sKHJlcXVlc3QpOworCQkJfQorCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ2V0X3JlbW90ZV9vYmplY3RfbGlzdCh1bnNpZ25lZCBjaGFyIHBhcmVudCk7CisKK3N0YXRpYyB2b2lkIGFkZF9mZXRjaF9yZXF1ZXN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKworCWNoZWNrX2xvY2tzKCk7CisKKwkvKgorCSAqIERvbid0IGZldGNoIHRoZSBvYmplY3QgaWYgaXQncyBrbm93biB0byBleGlzdCBsb2NhbGx5CisJICogb3IgaXMgYWxyZWFkeSBpbiB0aGUgcmVxdWVzdCBxdWV1ZQorCSAqLworCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tvYmotPm9pZC5oYXNoWzBdXSA9PSAtMSkKKwkJZ2V0X3JlbW90ZV9vYmplY3RfbGlzdChvYmotPm9pZC5oYXNoWzBdKTsKKwlpZiAob2JqLT5mbGFncyAmIChMT0NBTCB8IEZFVENISU5HKSkKKwkJcmV0dXJuOworCisJb2JqLT5mbGFncyB8PSBGRVRDSElORzsKKwlyZXF1ZXN0ID0geG1hbGxvYyhzaXplb2YoKnJlcXVlc3QpKTsKKwlyZXF1ZXN0LT5vYmogPSBvYmo7CisJcmVxdWVzdC0+dXJsID0gTlVMTDsKKwlyZXF1ZXN0LT5sb2NrID0gTlVMTDsKKwlyZXF1ZXN0LT5oZWFkZXJzID0gTlVMTDsKKwlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfRkVUQ0g7CisJcmVxdWVzdC0+bmV4dCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwlyZXF1ZXN0X3F1ZXVlX2hlYWQgPSByZXF1ZXN0OworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlmaWxsX2FjdGl2ZV9zbG90cygpOworCXN0ZXBfYWN0aXZlX3Nsb3RzKCk7CisjZW5kaWYKK30KKworc3RhdGljIGludCBhZGRfc2VuZF9yZXF1ZXN0KHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQoreworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQ7CisKKwkvKiBLZWVwIGxvY2tzIGFjdGl2ZSAqLworCWNoZWNrX2xvY2tzKCk7CisKKwkvKgorCSAqIERvbid0IHB1c2ggdGhlIG9iamVjdCBpZiBpdCdzIGtub3duIHRvIGV4aXN0IG9uIHRoZSByZW1vdGUKKwkgKiBvciBpcyBhbHJlYWR5IGluIHRoZSByZXF1ZXN0IHF1ZXVlCisJICovCisJaWYgKHJlbW90ZV9kaXJfZXhpc3RzW29iai0+b2lkLmhhc2hbMF1dID09IC0xKQorCQlnZXRfcmVtb3RlX29iamVjdF9saXN0KG9iai0+b2lkLmhhc2hbMF0pOworCWlmIChvYmotPmZsYWdzICYgKFJFTU9URSB8IFBVU0hJTkcpKQorCQlyZXR1cm4gMDsKKwl0YXJnZXQgPSBmaW5kX3NoYTFfcGFjayhvYmotPm9pZC5oYXNoLCByZXBvLT5wYWNrcyk7CisJaWYgKHRhcmdldCkgeworCQlvYmotPmZsYWdzIHw9IFJFTU9URTsKKwkJcmV0dXJuIDA7CisJfQorCisJb2JqLT5mbGFncyB8PSBQVVNISU5HOworCXJlcXVlc3QgPSB4bWFsbG9jKHNpemVvZigqcmVxdWVzdCkpOworCXJlcXVlc3QtPm9iaiA9IG9iajsKKwlyZXF1ZXN0LT51cmwgPSBOVUxMOworCXJlcXVlc3QtPmxvY2sgPSBsb2NrOworCXJlcXVlc3QtPmhlYWRlcnMgPSBOVUxMOworCXJlcXVlc3QtPnN0YXRlID0gTkVFRF9QVVNIOworCXJlcXVlc3QtPm5leHQgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJcmVxdWVzdF9xdWV1ZV9oZWFkID0gcmVxdWVzdDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKwlzdGVwX2FjdGl2ZV9zbG90cygpOworI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmZXRjaF9pbmRpY2VzKHZvaWQpCit7CisJaW50IHJldDsKKworCWlmIChwdXNoX3ZlcmJvc2VseSkKKwkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIHBhY2sgbGlzdFxuIik7CisKKwlzd2l0Y2ggKGh0dHBfZ2V0X2luZm9fcGFja3MocmVwby0+dXJsLCAmcmVwby0+cGFja3MpKSB7CisJY2FzZSBIVFRQX09LOgorCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb25lX3JlbW90ZV9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCW9iaiA9IGxvb2t1cF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJaWYgKCFvYmopCisJCW9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKworCS8qIElnbm9yZSByZW1vdGUgb2JqZWN0cyB0aGF0IGRvbid0IGV4aXN0IGxvY2FsbHkgKi8KKwlpZiAoIW9iaikKKwkJcmV0dXJuOworCisJb2JqLT5mbGFncyB8PSBSRU1PVEU7CisJaWYgKCFvYmplY3RfbGlzdF9jb250YWlucyhvYmplY3RzLCBvYmopKQorCQlvYmplY3RfbGlzdF9pbnNlcnQob2JqLCAmb2JqZWN0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9sb2NrcHJvcF9jdHgoc3RydWN0IHhtbF9jdHggKmN0eCwgaW50IHRhZ19jbG9zZWQpCit7CisJaW50ICpsb2NrX2ZsYWdzID0gKGludCAqKWN0eC0+dXNlckRhdGE7CisKKwlpZiAodGFnX2Nsb3NlZCkgeworCQlpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9DVFhfTE9DS0VOVFJZKSkgeworCQkJaWYgKCgqbG9ja19mbGFncyAmIERBVl9QUk9QX0xPQ0tFWCkgJiYKKwkJCSAgICAoKmxvY2tfZmxhZ3MgJiBEQVZfUFJPUF9MT0NLV1IpKSB7CisJCQkJKmxvY2tfZmxhZ3MgfD0gREFWX0xPQ0tfT0s7CisJCQl9CisJCQkqbG9ja19mbGFncyAmPSBEQVZfTE9DS19PSzsKKwkJfSBlbHNlIGlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX0NUWF9MT0NLVFlQRV9XUklURSkpIHsKKwkJCSpsb2NrX2ZsYWdzIHw9IERBVl9QUk9QX0xPQ0tXUjsKKwkJfSBlbHNlIGlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX0NUWF9MT0NLVFlQRV9FWENMVVNJVkUpKSB7CisJCQkqbG9ja19mbGFncyB8PSBEQVZfUFJPUF9MT0NLRVg7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbG9ja19jdHgoc3RydWN0IHhtbF9jdHggKmN0eCwgaW50IHRhZ19jbG9zZWQpCit7CisJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrID0gKHN0cnVjdCByZW1vdGVfbG9jayAqKWN0eC0+dXNlckRhdGE7CisJZ2l0X2hhc2hfY3R4IGhhc2hfY3R4OworCXVuc2lnbmVkIGNoYXIgbG9ja190b2tlbl9oYXNoW0dJVF9NQVhfUkFXU1pdOworCisJaWYgKHRhZ19jbG9zZWQgJiYgY3R4LT5jZGF0YSkgeworCQlpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9BQ1RJVkVMT0NLX09XTkVSKSkgeworCQkJbG9jay0+b3duZXIgPSB4c3RyZHVwKGN0eC0+Y2RhdGEpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQUNUSVZFTE9DS19USU1FT1VUKSkgeworCQkJY29uc3QgY2hhciAqYXJnOworCQkJaWYgKHNraXBfcHJlZml4KGN0eC0+Y2RhdGEsICJTZWNvbmQtIiwgJmFyZykpCisJCQkJbG9jay0+dGltZW91dCA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX0FDVElWRUxPQ0tfVE9LRU4pKSB7CisJCQlsb2NrLT50b2tlbiA9IHhzdHJkdXAoY3R4LT5jZGF0YSk7CisKKwkJCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmhhc2hfY3R4KTsKKwkJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmaGFzaF9jdHgsIGxvY2stPnRva2VuLCBzdHJsZW4obG9jay0+dG9rZW4pKTsKKwkJCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKGxvY2tfdG9rZW5faGFzaCwgJmhhc2hfY3R4KTsKKworCQkJbG9jay0+dG1wZmlsZV9zdWZmaXhbMF0gPSAnXyc7CisJCQltZW1jcHkobG9jay0+dG1wZmlsZV9zdWZmaXggKyAxLCBoYXNoX3RvX2hleChsb2NrX3Rva2VuX2hhc2gpLCB0aGVfaGFzaF9hbGdvLT5oZXhzeik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9uZV9yZW1vdGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCitzdGF0aWMgdm9pZAoreG1sX3N0YXJ0X3RhZyh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKmF0dHMpCit7CisJc3RydWN0IHhtbF9jdHggKmN0eCA9IChzdHJ1Y3QgeG1sX2N0eCAqKXVzZXJEYXRhOworCWNvbnN0IGNoYXIgKmMgPSBzdHJjaHIobmFtZSwgJzonKTsKKwlpbnQgb2xkX25hbWVsZW4sIG5ld19sZW47CisKKwlpZiAoYyA9PSBOVUxMKQorCQljID0gbmFtZTsKKwllbHNlCisJCWMrKzsKKworCW9sZF9uYW1lbGVuID0gc3RybGVuKGN0eC0+bmFtZSk7CisJbmV3X2xlbiA9IG9sZF9uYW1lbGVuICsgc3RybGVuKGMpICsgMjsKKworCWlmIChuZXdfbGVuID4gY3R4LT5sZW4pIHsKKwkJY3R4LT5uYW1lID0geHJlYWxsb2MoY3R4LT5uYW1lLCBuZXdfbGVuKTsKKwkJY3R4LT5sZW4gPSBuZXdfbGVuOworCX0KKwl4c25wcmludGYoY3R4LT5uYW1lICsgb2xkX25hbWVsZW4sIGN0eC0+bGVuIC0gb2xkX25hbWVsZW4sICIuJXMiLCBjKTsKKworCUZSRUVfQU5EX05VTEwoY3R4LT5jZGF0YSk7CisKKwljdHgtPnVzZXJGdW5jKGN0eCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCit4bWxfZW5kX3RhZyh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgeG1sX2N0eCAqY3R4ID0gKHN0cnVjdCB4bWxfY3R4ICopdXNlckRhdGE7CisJY29uc3QgY2hhciAqYyA9IHN0cmNocihuYW1lLCAnOicpOworCWNoYXIgKmVwOworCisJY3R4LT51c2VyRnVuYyhjdHgsIDEpOworCisJaWYgKGMgPT0gTlVMTCkKKwkJYyA9IG5hbWU7CisJZWxzZQorCQljKys7CisKKwllcCA9IGN0eC0+bmFtZSArIHN0cmxlbihjdHgtPm5hbWUpIC0gc3RybGVuKGMpIC0gMTsKKwkqZXAgPSAwOworfQorCitzdGF0aWMgdm9pZAoreG1sX2NkYXRhKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBYTUxfQ2hhciAqcywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgeG1sX2N0eCAqY3R4ID0gKHN0cnVjdCB4bWxfY3R4ICopdXNlckRhdGE7CisJZnJlZShjdHgtPmNkYXRhKTsKKwljdHgtPmNkYXRhID0geG1lbWR1cHoocywgbGVuKTsKK30KKworc3RhdGljIHN0cnVjdCByZW1vdGVfbG9jayAqbG9ja19yZW1vdGUoY29uc3QgY2hhciAqcGF0aCwgbG9uZyB0aW1lb3V0KQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgYnVmZmVyIG91dF9idWZmZXIgPSB7IFNUUkJVRl9JTklULCAwIH07CisJc3RydWN0IHN0cmJ1ZiBpbl9idWZmZXIgPSBTVFJCVUZfSU5JVDsKKwljaGFyICp1cmw7CisJY2hhciAqZXA7CisJY2hhciB0aW1lb3V0X2hlYWRlclsyNV07CisJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrID0gTlVMTDsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnMgPSBodHRwX2NvcHlfZGVmYXVsdF9oZWFkZXJzKCk7CisJc3RydWN0IHhtbF9jdHggY3R4OworCWNoYXIgKmVzY2FwZWQ7CisKKwl1cmwgPSB4c3RyZm10KCIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKKworCS8qIE1ha2Ugc3VyZSBsZWFkaW5nIGRpcmVjdG9yaWVzIGV4aXN0IGZvciB0aGUgcmVtb3RlIHJlZiAqLworCWVwID0gc3RyY2hyKHVybCArIHN0cmxlbihyZXBvLT51cmwpICsgMSwgJy8nKTsKKwl3aGlsZSAoZXApIHsKKwkJY2hhciBzYXZlZF9jaGFyYWN0ZXIgPSBlcFsxXTsKKwkJZXBbMV0gPSAnXDAnOworCQlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwkJY3VybF9zZXR1cF9odHRwX2dldChzbG90LT5jdXJsLCB1cmwsIERBVl9NS0NPTCk7CisJCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYKKwkJCSAgICByZXN1bHRzLmh0dHBfY29kZSAhPSA0MDUpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIlVuYWJsZSB0byBjcmVhdGUgYnJhbmNoIHBhdGggJXNcbiIsCisJCQkJCXVybCk7CisJCQkJZnJlZSh1cmwpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgTUtDT0wgcmVxdWVzdFxuIik7CisJCQlmcmVlKHVybCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQllcFsxXSA9IHNhdmVkX2NoYXJhY3RlcjsKKwkJZXAgPSBzdHJjaHIoZXAgKyAxLCAnLycpOworCX0KKworCWVzY2FwZWQgPSB4bWxfZW50aXRpZXMoaWRlbnRfZGVmYXVsdF9lbWFpbCgpKTsKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIExPQ0tfUkVRVUVTVCwgZXNjYXBlZCk7CisJZnJlZShlc2NhcGVkKTsKKworCXhzbnByaW50Zih0aW1lb3V0X2hlYWRlciwgc2l6ZW9mKHRpbWVvdXRfaGVhZGVyKSwgIlRpbWVvdXQ6IFNlY29uZC0lbGQiLCB0aW1lb3V0KTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCB0aW1lb3V0X2hlYWRlcik7CisJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgIkNvbnRlbnQtVHlwZTogdGV4dC94bWwiKTsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisJY3VybF9zZXR1cF9odHRwKHNsb3QtPmN1cmwsIHVybCwgREFWX0xPQ0ssICZvdXRfYnVmZmVyLCBmd3JpdGVfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKKworCWxvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZigqbG9jaykpOworCWxvY2stPnRpbWVvdXQgPSAtMTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlYTUxfUGFyc2VyIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGUoTlVMTCk7CisJCQllbnVtIFhNTF9TdGF0dXMgcmVzdWx0OworCQkJY3R4Lm5hbWUgPSB4Y2FsbG9jKDEwLCAxKTsKKwkJCWN0eC5sZW4gPSAwOworCQkJY3R4LmNkYXRhID0gTlVMTDsKKwkJCWN0eC51c2VyRnVuYyA9IGhhbmRsZV9uZXdfbG9ja19jdHg7CisJCQljdHgudXNlckRhdGEgPSBsb2NrOworCQkJWE1MX1NldFVzZXJEYXRhKHBhcnNlciwgJmN0eCk7CisJCQlYTUxfU2V0RWxlbWVudEhhbmRsZXIocGFyc2VyLCB4bWxfc3RhcnRfdGFnLAorCQkJCQkgICAgICB4bWxfZW5kX3RhZyk7CisJCQlYTUxfU2V0Q2hhcmFjdGVyRGF0YUhhbmRsZXIocGFyc2VyLCB4bWxfY2RhdGEpOworCQkJcmVzdWx0ID0gWE1MX1BhcnNlKHBhcnNlciwgaW5fYnVmZmVyLmJ1ZiwKKwkJCQkJICAgaW5fYnVmZmVyLmxlbiwgMSk7CisJCQlmcmVlKGN0eC5uYW1lKTsKKwkJCWlmIChyZXN1bHQgIT0gWE1MX1NUQVRVU19PSykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiWE1MIGVycm9yOiAlc1xuIiwKKwkJCQkJWE1MX0Vycm9yU3RyaW5nKAorCQkJCQkJWE1MX0dldEVycm9yQ29kZShwYXJzZXIpKSk7CisJCQkJbG9jay0+dGltZW91dCA9IC0xOworCQkJfQorCQkJWE1MX1BhcnNlckZyZWUocGFyc2VyKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJlcnJvcjogY3VybCByZXN1bHQ9JWQsIEhUVFAgY29kZT0lbGRcbiIsCisJCQkJcmVzdWx0cy5jdXJsX3Jlc3VsdCwgcmVzdWx0cy5odHRwX2NvZGUpOworCQl9CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgTE9DSyByZXF1ZXN0XG4iKTsKKwl9CisKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdl9oZWFkZXJzKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0X2J1ZmZlci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZpbl9idWZmZXIpOworCisJaWYgKGxvY2stPnRva2VuID09IE5VTEwgfHwgbG9jay0+dGltZW91dCA8PSAwKSB7CisJCWZyZWUobG9jay0+dG9rZW4pOworCQlmcmVlKGxvY2stPm93bmVyKTsKKwkJZnJlZSh1cmwpOworCQlGUkVFX0FORF9OVUxMKGxvY2spOworCX0gZWxzZSB7CisJCWxvY2stPnVybCA9IHVybDsKKwkJbG9jay0+c3RhcnRfdGltZSA9IHRpbWUoTlVMTCk7CisJCWxvY2stPm5leHQgPSByZXBvLT5sb2NrczsKKwkJcmVwby0+bG9ja3MgPSBsb2NrOworCX0KKworCXJldHVybiBsb2NrOworfQorCitzdGF0aWMgaW50IHVubG9ja19yZW1vdGUoc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKnByZXYgPSByZXBvLT5sb2NrczsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnM7CisJaW50IHJjID0gMDsKKworCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfTE9DSyk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgbG9jay0+dXJsLCBEQVZfVU5MT0NLKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spCisJCQlyYyA9IDE7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiVU5MT0NLIEhUVFAgZXJyb3IgJWxkXG4iLAorCQkJCXJlc3VsdHMuaHR0cF9jb2RlKTsKKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBVTkxPQ0sgcmVxdWVzdFxuIik7CisJfQorCisJY3VybF9zbGlzdF9mcmVlX2FsbChkYXZfaGVhZGVycyk7CisKKwlpZiAocmVwby0+bG9ja3MgPT0gbG9jaykgeworCQlyZXBvLT5sb2NrcyA9IGxvY2stPm5leHQ7CisJfSBlbHNlIHsKKwkJd2hpbGUgKHByZXYgJiYgcHJldi0+bmV4dCAhPSBsb2NrKQorCQkJcHJldiA9IHByZXYtPm5leHQ7CisJCWlmIChwcmV2KQorCQkJcHJldi0+bmV4dCA9IGxvY2stPm5leHQ7CisJfQorCisJZnJlZShsb2NrLT5vd25lcik7CisJZnJlZShsb2NrLT51cmwpOworCWZyZWUobG9jay0+dG9rZW4pOworCWZyZWUobG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sb2Nrcyh2b2lkKQoreworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IHJlcG8tPmxvY2tzOworCisJZnByaW50ZihzdGRlcnIsICJSZW1vdmluZyByZW1vdGUgbG9ja3MuLi5cbiIpOworCXdoaWxlIChsb2NrKSB7CisJCXN0cnVjdCByZW1vdGVfbG9jayAqbmV4dCA9IGxvY2stPm5leHQ7CisJCXVubG9ja19yZW1vdGUobG9jayk7CisJCWxvY2sgPSBuZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2xvY2tzX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX2xvY2tzKCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90ZV9scyhjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsCisJCSAgICAgIHZvaWQgKCp1c2VyRnVuYykoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKSwKKwkJICAgICAgdm9pZCAqdXNlckRhdGEpOworCisvKiBleHRyYWN0IGhleCBmcm9tIHNoYXJkZWQgInh4L3h7Mzh9IiBmaWxlbmFtZSAqLworc3RhdGljIGludCBnZXRfb2lkX2hleF9mcm9tX29ianBhdGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWlmIChzdHJsZW4ocGF0aCkgIT0gdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaGV4X3RvX2J5dGVzKG9pZC0+aGFzaCwgcGF0aCwgMSkpCisJCXJldHVybiAtMTsKKwlwYXRoICs9IDI7CisJcGF0aCsrOyAvKiBza2lwICcvJyAqLworCisJcmV0dXJuIGhleF90b19ieXRlcyhvaWQtPmhhc2ggKyAxLCBwYXRoLCB0aGVfaGFzaF9hbGdvLT5yYXdzeiAtIDEpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2xzX29iamVjdChzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCit7CisJdW5zaWduZWQgaW50ICpwYXJlbnQgPSAodW5zaWduZWQgaW50ICopbHMtPnVzZXJEYXRhOworCWNvbnN0IGNoYXIgKnBhdGggPSBscy0+ZGVudHJ5X25hbWU7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoIXN0cmNtcChscy0+cGF0aCwgbHMtPmRlbnRyeV9uYW1lKSAmJiAobHMtPmZsYWdzICYgSVNfRElSKSkgeworCQlyZW1vdGVfZGlyX2V4aXN0c1sqcGFyZW50XSA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXNraXBfcHJlZml4KHBhdGgsICJvYmplY3RzLyIsICZwYXRoKSB8fAorCSAgICBnZXRfb2lkX2hleF9mcm9tX29ianBhdGgocGF0aCwgJm9pZCkpCisJCXJldHVybjsKKworCW9uZV9yZW1vdGVfb2JqZWN0KCZvaWQpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2xzX3JlZihzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCit7CisJaWYgKCFzdHJjbXAobHMtPnBhdGgsIGxzLT5kZW50cnlfbmFtZSkgJiYgKGxzLT5kZW50cnlfZmxhZ3MgJiBJU19ESVIpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiICAlc1xuIiwgbHMtPmRlbnRyeV9uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKGxzLT5kZW50cnlfZmxhZ3MgJiBJU19ESVIpKQorCQlvbmVfcmVtb3RlX3JlZihscy0+ZGVudHJ5X25hbWUpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVtb3RlX2xzX2N0eChzdHJ1Y3QgeG1sX2N0eCAqY3R4LCBpbnQgdGFnX2Nsb3NlZCkKK3sKKwlzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMgPSAoc3RydWN0IHJlbW90ZV9sc19jdHggKiljdHgtPnVzZXJEYXRhOworCisJaWYgKHRhZ19jbG9zZWQpIHsKKwkJaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfUFJPUEZJTkRfUkVTUCkgJiYgbHMtPmRlbnRyeV9uYW1lKSB7CisJCQlpZiAobHMtPmRlbnRyeV9mbGFncyAmIElTX0RJUikgeworCisJCQkJLyogZW5zdXJlIGNvbGxlY3Rpb24gbmFtZXMgZW5kIHdpdGggc2xhc2ggKi8KKwkJCQlzdHJfZW5kX3VybF93aXRoX3NsYXNoKGxzLT5kZW50cnlfbmFtZSwgJmxzLT5kZW50cnlfbmFtZSk7CisKKwkJCQlpZiAobHMtPmZsYWdzICYgUFJPQ0VTU19ESVJTKSB7CisJCQkJCWxzLT51c2VyRnVuYyhscyk7CisJCQkJfQorCQkJCWlmIChzdHJjbXAobHMtPmRlbnRyeV9uYW1lLCBscy0+cGF0aCkgJiYKKwkJCQkgICAgbHMtPmZsYWdzICYgUkVDVVJTSVZFKSB7CisJCQkJCXJlbW90ZV9scyhscy0+ZGVudHJ5X25hbWUsCisJCQkJCQkgIGxzLT5mbGFncywKKwkJCQkJCSAgbHMtPnVzZXJGdW5jLAorCQkJCQkJICBscy0+dXNlckRhdGEpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAobHMtPmZsYWdzICYgUFJPQ0VTU19GSUxFUykgeworCQkJCWxzLT51c2VyRnVuYyhscyk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9QUk9QRklORF9OQU1FKSAmJiBjdHgtPmNkYXRhKSB7CisJCQljaGFyICpwYXRoID0gY3R4LT5jZGF0YTsKKwkJCWlmICgqY3R4LT5jZGF0YSA9PSAnaCcpIHsKKwkJCQlwYXRoID0gc3Ryc3RyKHBhdGgsICIvLyIpOworCQkJCWlmIChwYXRoKSB7CisJCQkJCXBhdGggPSBzdHJjaHIocGF0aCsyLCAnLycpOworCQkJCX0KKwkJCX0KKwkJCWlmIChwYXRoKSB7CisJCQkJY29uc3QgY2hhciAqdXJsID0gcmVwby0+dXJsOworCQkJCWlmIChyZXBvLT5wYXRoKQorCQkJCQl1cmwgPSByZXBvLT5wYXRoOworCQkJCWlmIChzdHJuY21wKHBhdGgsIHVybCwgcmVwby0+cGF0aF9sZW4pKQorCQkJCQllcnJvcigiUGFyc2VkIHBhdGggJyVzJyBkb2VzIG5vdCBtYXRjaCB1cmw6ICclcyciLAorCQkJCQkgICAgICBwYXRoLCB1cmwpOworCQkJCWVsc2UgeworCQkJCQlwYXRoICs9IHJlcG8tPnBhdGhfbGVuOworCQkJCQlscy0+ZGVudHJ5X25hbWUgPSB4c3RyZHVwKHBhdGgpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX1BST1BGSU5EX0NPTExFQ1RJT04pKSB7CisJCQlscy0+ZGVudHJ5X2ZsYWdzIHw9IElTX0RJUjsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9QUk9QRklORF9SRVNQKSkgeworCQlGUkVFX0FORF9OVUxMKGxzLT5kZW50cnlfbmFtZSk7CisJCWxzLT5kZW50cnlfZmxhZ3MgPSAwOworCX0KK30KKworLyoKKyAqIE5FRURTV09SSzogcmVtb3RlX2xzKCkgaWdub3JlcyBpbmZvL3JlZnMgb24gdGhlIHJlbW90ZSBzaWRlLiAgQnV0IGl0CisgKiBzaG91bGQgX29ubHlfIGhlZWQgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhhdCBmaWxlLCBpbnN0ZWFkIG9mIHRyeWluZyB0bworICogZGV0ZXJtaW5lIHRoZSByZWZzIGZyb20gdGhlIHJlbW90ZSBmaWxlIHN5c3RlbSAoYmFkbHk6IGl0IGRvZXMgbm90IGV2ZW4KKyAqIGtub3cgYWJvdXQgcGFja2VkLXJlZnMpLgorICovCitzdGF0aWMgdm9pZCByZW1vdGVfbHMoY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLAorCQkgICAgICB2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscyksCisJCSAgICAgIHZvaWQgKnVzZXJEYXRhKQoreworCWNoYXIgKnVybCA9IHhzdHJmbXQoIiVzJXMiLCByZXBvLT51cmwsIHBhdGgpOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3Qgc3RyYnVmIGluX2J1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBidWZmZXIgb3V0X2J1ZmZlciA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnMgPSBodHRwX2NvcHlfZGVmYXVsdF9oZWFkZXJzKCk7CisJc3RydWN0IHhtbF9jdHggY3R4OworCXN0cnVjdCByZW1vdGVfbHNfY3R4IGxzOworCisJbHMuZmxhZ3MgPSBmbGFnczsKKwlscy5wYXRoID0geHN0cmR1cChwYXRoKTsKKwlscy5kZW50cnlfbmFtZSA9IE5VTEw7CisJbHMuZGVudHJ5X2ZsYWdzID0gMDsKKwlscy51c2VyRGF0YSA9IHVzZXJEYXRhOworCWxzLnVzZXJGdW5jID0gdXNlckZ1bmM7CisKKwlzdHJidWZfYWRkc3RyKCZvdXRfYnVmZmVyLmJ1ZiwgUFJPUEZJTkRfQUxMX1JFUVVFU1QpOworCisJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgIkRlcHRoOiAxIik7CisJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgIkNvbnRlbnQtVHlwZTogdGV4dC94bWwiKTsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisJY3VybF9zZXR1cF9odHRwKHNsb3QtPmN1cmwsIHVybCwgREFWX1BST1BGSU5ELAorCQkJJm91dF9idWZmZXIsIGZ3cml0ZV9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXZfaGVhZGVycyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZpbl9idWZmZXIpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spIHsKKwkJCVhNTF9QYXJzZXIgcGFyc2VyID0gWE1MX1BhcnNlckNyZWF0ZShOVUxMKTsKKwkJCWVudW0gWE1MX1N0YXR1cyByZXN1bHQ7CisJCQljdHgubmFtZSA9IHhjYWxsb2MoMTAsIDEpOworCQkJY3R4LmxlbiA9IDA7CisJCQljdHguY2RhdGEgPSBOVUxMOworCQkJY3R4LnVzZXJGdW5jID0gaGFuZGxlX3JlbW90ZV9sc19jdHg7CisJCQljdHgudXNlckRhdGEgPSAmbHM7CisJCQlYTUxfU2V0VXNlckRhdGEocGFyc2VyLCAmY3R4KTsKKwkJCVhNTF9TZXRFbGVtZW50SGFuZGxlcihwYXJzZXIsIHhtbF9zdGFydF90YWcsCisJCQkJCSAgICAgIHhtbF9lbmRfdGFnKTsKKwkJCVhNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihwYXJzZXIsIHhtbF9jZGF0YSk7CisJCQlyZXN1bHQgPSBYTUxfUGFyc2UocGFyc2VyLCBpbl9idWZmZXIuYnVmLAorCQkJCQkgICBpbl9idWZmZXIubGVuLCAxKTsKKwkJCWZyZWUoY3R4Lm5hbWUpOworCisJCQlpZiAocmVzdWx0ICE9IFhNTF9TVEFUVVNfT0spIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlhNTCBlcnJvcjogJXNcbiIsCisJCQkJCVhNTF9FcnJvclN0cmluZygKKwkJCQkJCVhNTF9HZXRFcnJvckNvZGUocGFyc2VyKSkpOworCQkJfQorCQkJWE1MX1BhcnNlckZyZWUocGFyc2VyKTsKKwkJfQorCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IFBST1BGSU5EIHJlcXVlc3RcbiIpOworCX0KKworCWZyZWUobHMucGF0aCk7CisJZnJlZSh1cmwpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXRfYnVmZmVyLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmluX2J1ZmZlcik7CisJY3VybF9zbGlzdF9mcmVlX2FsbChkYXZfaGVhZGVycyk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9yZW1vdGVfb2JqZWN0X2xpc3QodW5zaWduZWQgY2hhciBwYXJlbnQpCit7CisJY2hhciBwYXRoW10gPSAib2JqZWN0cy9YWC8iOworCXN0YXRpYyBjb25zdCBjaGFyIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCXVuc2lnbmVkIGludCB2YWwgPSBwYXJlbnQ7CisKKwlwYXRoWzhdID0gaGV4W3ZhbCA+PiA0XTsKKwlwYXRoWzldID0gaGV4W3ZhbCAmIDB4Zl07CisJcmVtb3RlX2Rpcl9leGlzdHNbdmFsXSA9IDA7CisJcmVtb3RlX2xzKHBhdGgsIChQUk9DRVNTX0ZJTEVTIHwgUFJPQ0VTU19ESVJTKSwKKwkJICBwcm9jZXNzX2xzX29iamVjdCwgJnZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbG9ja2luZ19hdmFpbGFibGUodm9pZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IHN0cmJ1ZiBpbl9idWZmZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYnVmZmVyIG91dF9idWZmZXIgPSB7IFNUUkJVRl9JTklULCAwIH07CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycygpOworCXN0cnVjdCB4bWxfY3R4IGN0eDsKKwlpbnQgbG9ja19mbGFncyA9IDA7CisJY2hhciAqZXNjYXBlZDsKKworCWVzY2FwZWQgPSB4bWxfZW50aXRpZXMocmVwby0+dXJsKTsKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIFBST1BGSU5EX1NVUFBPUlRFRExPQ0tfUkVRVUVTVCwgZXNjYXBlZCk7CisJZnJlZShlc2NhcGVkKTsKKworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJEZXB0aDogMCIpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCByZXBvLT51cmwsIERBVl9QUk9QRklORCwKKwkJCSZvdXRfYnVmZmVyLCBmd3JpdGVfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlYTUxfUGFyc2VyIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGUoTlVMTCk7CisJCQllbnVtIFhNTF9TdGF0dXMgcmVzdWx0OworCQkJY3R4Lm5hbWUgPSB4Y2FsbG9jKDEwLCAxKTsKKwkJCWN0eC5sZW4gPSAwOworCQkJY3R4LmNkYXRhID0gTlVMTDsKKwkJCWN0eC51c2VyRnVuYyA9IGhhbmRsZV9sb2NrcHJvcF9jdHg7CisJCQljdHgudXNlckRhdGEgPSAmbG9ja19mbGFnczsKKwkJCVhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZjdHgpOworCQkJWE1MX1NldEVsZW1lbnRIYW5kbGVyKHBhcnNlciwgeG1sX3N0YXJ0X3RhZywKKwkJCQkJICAgICAgeG1sX2VuZF90YWcpOworCQkJcmVzdWx0ID0gWE1MX1BhcnNlKHBhcnNlciwgaW5fYnVmZmVyLmJ1ZiwKKwkJCQkJICAgaW5fYnVmZmVyLmxlbiwgMSk7CisJCQlmcmVlKGN0eC5uYW1lKTsKKworCQkJaWYgKHJlc3VsdCAhPSBYTUxfU1RBVFVTX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJYTUwgZXJyb3I6ICVzXG4iLAorCQkJCQlYTUxfRXJyb3JTdHJpbmcoCisJCQkJCQlYTUxfR2V0RXJyb3JDb2RlKHBhcnNlcikpKTsKKwkJCQlsb2NrX2ZsYWdzID0gMDsKKwkJCX0KKwkJCVhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CisJCQlpZiAoIWxvY2tfZmxhZ3MpCisJCQkJZXJyb3IoIm5vIERBViBsb2NraW5nIHN1cHBvcnQgb24gJXMiLAorCQkJCSAgICAgIHJlcG8tPnVybCk7CisKKwkJfSBlbHNlIHsKKwkJCWVycm9yKCJDYW5ub3QgYWNjZXNzIFVSTCAlcywgcmV0dXJuIGNvZGUgJWQiLAorCQkJICAgICAgcmVwby0+dXJsLCByZXN1bHRzLmN1cmxfcmVzdWx0KTsKKwkJCWxvY2tfZmxhZ3MgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBzdGFydCBQUk9QRklORCByZXF1ZXN0IG9uICVzIiwgcmVwby0+dXJsKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmb3V0X2J1ZmZlci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZpbl9idWZmZXIpOworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworCisJcmV0dXJuIGxvY2tfZmxhZ3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKiphZGRfb25lX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3RfbGlzdCAqKnApCit7CisJc3RydWN0IG9iamVjdF9saXN0ICplbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvYmplY3RfbGlzdCkpOworCWVudHJ5LT5pdGVtID0gb2JqOworCWVudHJ5LT5uZXh0ID0gKnA7CisJKnAgPSBlbnRyeTsKKwlyZXR1cm4gJmVudHJ5LT5uZXh0OworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICoqcHJvY2Vzc19ibG9iKHN0cnVjdCBibG9iICpibG9iLAorCQkJCQkgc3RydWN0IG9iamVjdF9saXN0ICoqcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmYmxvYi0+b2JqZWN0OworCisJb2JqLT5mbGFncyB8PSBMT0NBTDsKKworCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJcmV0dXJuIHA7CisKKwlvYmotPmZsYWdzIHw9IFNFRU47CisJcmV0dXJuIGFkZF9vbmVfb2JqZWN0KG9iaiwgcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipwcm9jZXNzX3RyZWUoc3RydWN0IHRyZWUgKnRyZWUsCisJCQkJCSBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipwKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZ0cmVlLT5vYmplY3Q7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCisJb2JqLT5mbGFncyB8PSBMT0NBTDsKKworCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJcmV0dXJuIHA7CisJaWYgKHBhcnNlX3RyZWUodHJlZSkgPCAwKQorCQlkaWUoImJhZCB0cmVlIG9iamVjdCAlcyIsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisKKwlvYmotPmZsYWdzIHw9IFNFRU47CisJcCA9IGFkZF9vbmVfb2JqZWN0KG9iaiwgcCk7CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKQorCQlzd2l0Y2ggKG9iamVjdF90eXBlKGVudHJ5Lm1vZGUpKSB7CisJCWNhc2UgT0JKX1RSRUU6CisJCQlwID0gcHJvY2Vzc190cmVlKGxvb2t1cF90cmVlKHRoZV9yZXBvc2l0b3J5LCAmZW50cnkub2lkKSwKKwkJCQkJIHApOworCQkJYnJlYWs7CisJCWNhc2UgT0JKX0JMT0I6CisJCQlwID0gcHJvY2Vzc19ibG9iKGxvb2t1cF9ibG9iKHRoZV9yZXBvc2l0b3J5LCAmZW50cnkub2lkKSwKKwkJCQkJIHApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBTdWJwcm9qZWN0IGNvbW1pdCAtIG5vdCBpbiB0aGlzIHJlcG9zaXRvcnkgKi8KKwkJCWJyZWFrOworCQl9CisKKwlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworCXJldHVybiBwOworfQorCitzdGF0aWMgaW50IGdldF9kZWx0YShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IG9iamVjdF9saXN0ICoqcCA9ICZvYmplY3RzOworCWludCBjb3VudCA9IDA7CisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXZzKSkgIT0gTlVMTCkgeworCQlwID0gcHJvY2Vzc190cmVlKGdldF9jb21taXRfdHJlZShjb21taXQpLCBwKTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gTE9DQUw7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQljb3VudCArPSBhZGRfc2VuZF9yZXF1ZXN0KCZjb21taXQtPm9iamVjdCwgbG9jayk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJldnMtPnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnRyeSA9IHJldnMtPnBlbmRpbmcub2JqZWN0cyArIGk7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IGVudHJ5LT5pdGVtOworCQljb25zdCBjaGFyICpuYW1lID0gZW50cnktPm5hbWU7CisKKwkJaWYgKG9iai0+ZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IFNFRU4pKQorCQkJY29udGludWU7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQkJb2JqLT5mbGFncyB8PSBTRUVOOworCQkJcCA9IGFkZF9vbmVfb2JqZWN0KG9iaiwgcCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCQlwID0gcHJvY2Vzc190cmVlKChzdHJ1Y3QgdHJlZSAqKW9iaiwgcCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CKSB7CisJCQlwID0gcHJvY2Vzc19ibG9iKChzdHJ1Y3QgYmxvYiAqKW9iaiwgcCk7CisJCQljb250aW51ZTsKKwkJfQorCQlkaWUoInVua25vd24gcGVuZGluZyBvYmplY3QgJXMgKCVzKSIsIG9pZF90b19oZXgoJm9iai0+b2lkKSwgbmFtZSk7CisJfQorCisJd2hpbGUgKG9iamVjdHMpIHsKKwkJaWYgKCEob2JqZWN0cy0+aXRlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWNvdW50ICs9IGFkZF9zZW5kX3JlcXVlc3Qob2JqZWN0cy0+aXRlbSwgbG9jayk7CisJCW9iamVjdHMgPSBvYmplY3RzLT5uZXh0OworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCB1cGRhdGVfcmVtb3RlKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgYnVmZmVyIG91dF9idWZmZXIgPSB7IFNUUkJVRl9JTklULCAwIH07CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzOworCisJZGF2X2hlYWRlcnMgPSBnZXRfZGF2X3Rva2VuX2hlYWRlcnMobG9jaywgREFWX0hFQURFUl9JRik7CisKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsICIlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisJY3VybF9zZXR1cF9odHRwKHNsb3QtPmN1cmwsIGxvY2stPnVybCwgREFWX1BVVCwKKwkJCSZvdXRfYnVmZmVyLCBmd3JpdGVfbnVsbCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvdXRfYnVmZmVyLmJ1Zik7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUFVUIGVycm9yOiBjdXJsIHJlc3VsdD0lZCwgSFRUUCBjb2RlPSVsZFxuIiwKKwkJCQlyZXN1bHRzLmN1cmxfcmVzdWx0LCByZXN1bHRzLmh0dHBfY29kZSk7CisJCQkvKiBXZSBzaG91bGQgYXR0ZW1wdCByZWNvdmVyeT8gKi8KKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJc3RyYnVmX3JlbGVhc2UoJm91dF9idWZmZXIuYnVmKTsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgUFVUIHJlcXVlc3RcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOworCitzdGF0aWMgdm9pZCBvbmVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlyZWYgPSBhbGxvY19yZWYocmVmbmFtZSk7CisKKwlpZiAoaHR0cF9mZXRjaF9yZWYocmVwby0+dXJsLCByZWYpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiVW5hYmxlIHRvIGZldGNoIHJlZiAlcyBmcm9tICVzXG4iLAorCQkJcmVmbmFtZSwgcmVwby0+dXJsKTsKKwkJZnJlZShyZWYpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBGZXRjaCBhIGNvcHkgb2YgdGhlIG9iamVjdCBpZiBpdCBkb2Vzbid0IGV4aXN0IGxvY2FsbHkgLSBpdAorCSAqIG1heSBiZSByZXF1aXJlZCBmb3IgdXBkYXRpbmcgc2VydmVyIGluZm8gbGF0ZXIuCisJICovCisJaWYgKHJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzICYmICFoYXNfb2JqZWN0X2ZpbGUoJnJlZi0+b2xkX29pZCkpIHsKKwkJb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KCZyZWYtPm9sZF9vaWQpOworCQlmcHJpbnRmKHN0ZGVyciwJIiAgZmV0Y2ggJXMgZm9yICVzXG4iLAorCQkJb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkKSwgcmVmbmFtZSk7CisJCWFkZF9mZXRjaF9yZXF1ZXN0KG9iaik7CisJfQorCisJcmVmLT5uZXh0ID0gcmVtb3RlX3JlZnM7CisJcmVtb3RlX3JlZnMgPSByZWY7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9kYXZfcmVtb3RlX2hlYWRzKHZvaWQpCit7CisJcmVtb3RlX2xzKCJyZWZzLyIsIChQUk9DRVNTX0ZJTEVTIHwgUFJPQ0VTU19ESVJTIHwgUkVDVVJTSVZFKSwgcHJvY2Vzc19sc19yZWYsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmVtb3RlX2luZm9fcmVmKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscykKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAoc3RydWN0IHN0cmJ1ZiAqKWxzLT51c2VyRGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvOworCXN0cnVjdCByZWYgKnJlZjsKKworCXJlZiA9IGFsbG9jX3JlZihscy0+ZGVudHJ5X25hbWUpOworCisJaWYgKGh0dHBfZmV0Y2hfcmVmKHJlcG8tPnVybCwgcmVmKSAhPSAwKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIlVuYWJsZSB0byBmZXRjaCByZWYgJXMgZnJvbSAlc1xuIiwKKwkJCWxzLT5kZW50cnlfbmFtZSwgcmVwby0+dXJsKTsKKwkJYWJvcnRlZCA9IDE7CisJCWZyZWUocmVmKTsKKwkJcmV0dXJuOworCX0KKworCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZyZWYtPm9sZF9vaWQpOworCWlmICghbykgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJVbmFibGUgdG8gcGFyc2Ugb2JqZWN0ICVzIGZvciByZW1vdGUgcmVmICVzXG4iLAorCQkJb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkKSwgbHMtPmRlbnRyeV9uYW1lKTsKKwkJYWJvcnRlZCA9IDE7CisJCWZyZWUocmVmKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzXHQlc1xuIiwKKwkJICAgIG9pZF90b19oZXgoJnJlZi0+b2xkX29pZCksIGxzLT5kZW50cnlfbmFtZSk7CisKKwlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWcodGhlX3JlcG9zaXRvcnksIG8sIGxzLT5kZW50cnlfbmFtZSwgMCk7CisJCWlmIChvKQorCQkJc3RyYnVmX2FkZGYoYnVmLCAiJXNcdCVzXnt9XG4iLAorCQkJCSAgICBvaWRfdG9faGV4KCZvLT5vaWQpLCBscy0+ZGVudHJ5X25hbWUpOworCX0KKwlmcmVlKHJlZik7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZW1vdGVfaW5mb19yZWZzKHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYnVmZmVyIGJ1ZmZlciA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzOworCisJcmVtb3RlX2xzKCJyZWZzLyIsIChQUk9DRVNTX0ZJTEVTIHwgUkVDVVJTSVZFKSwKKwkJICBhZGRfcmVtb3RlX2luZm9fcmVmLCAmYnVmZmVyLmJ1Zik7CisJaWYgKCFhYm9ydGVkKSB7CisJCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfSUYpOworCisJCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwkJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCQljdXJsX3NldHVwX2h0dHAoc2xvdC0+Y3VybCwgbG9jay0+dXJsLCBEQVZfUFVULAorCQkJCSZidWZmZXIsIGZ3cml0ZV9udWxsKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJQVVQgZXJyb3I6IGN1cmwgcmVzdWx0PSVkLCBIVFRQIGNvZGU9JWxkXG4iLAorCQkJCQlyZXN1bHRzLmN1cmxfcmVzdWx0LCByZXN1bHRzLmh0dHBfY29kZSk7CisJCQl9CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlci5idWYpOworfQorCitzdGF0aWMgaW50IHJlbW90ZV9leGlzdHMoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICp1cmwgPSB4c3RyZm10KCIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKKwlpbnQgcmV0OworCisKKwlzd2l0Y2ggKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsIE5VTEwsIE5VTEwpKSB7CisJY2FzZSBIVFRQX09LOgorCQlyZXQgPSAxOworCQlicmVhazsKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgSFRUUF9FUlJPUjoKKwkJZXJyb3IoInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiLCB1cmwsIGN1cmxfZXJyb3JzdHIpOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXJldCA9IC0xOworCX0KKwlmcmVlKHVybCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZmV0Y2hfc3ltcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipzeW1yZWYsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwljaGFyICp1cmwgPSB4c3RyZm10KCIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlpZiAoaHR0cF9nZXRfc3RyYnVmKHVybCwgJmJ1ZmZlciwgTlVMTCkgIT0gSFRUUF9PSykKKwkJZGllKCJDb3VsZG4ndCBnZXQgJXMgZm9yIHJlbW90ZSBzeW1yZWZcbiVzIiwgdXJsLAorCQkgICAgY3VybF9lcnJvcnN0cik7CisJZnJlZSh1cmwpOworCisJRlJFRV9BTkRfTlVMTCgqc3ltcmVmKTsKKwlvaWRjbHIob2lkKTsKKworCWlmIChidWZmZXIubGVuID09IDApCisJCXJldHVybjsKKworCS8qIEN1dCBvZmYgdHJhaWxpbmcgbmV3bGluZS4gKi8KKwlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7CisKKwkvKiBJZiBpdCdzIGEgc3ltcmVmLCBzZXQgdGhlIHJlZm5hbWU7IG90aGVyd2lzZSB0cnkgZm9yIGEgc2hhMSAqLworCWlmIChza2lwX3ByZWZpeChidWZmZXIuYnVmLCAicmVmOiAiLCAmbmFtZSkpIHsKKwkJKnN5bXJlZiA9IHhtZW1kdXB6KG5hbWUsIGJ1ZmZlci5sZW4gLSAobmFtZSAtIGJ1ZmZlci5idWYpKTsKKwl9IGVsc2UgeworCQlnZXRfb2lkX2hleChidWZmZXIuYnVmLCBvaWQpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9tZXJnZV9iYXNlKHN0cnVjdCBvYmplY3RfaWQgKmhlYWRfb2lkLCBzdHJ1Y3QgcmVmICpyZW1vdGUpCit7CisJc3RydWN0IGNvbW1pdCAqaGVhZCA9IGxvb2t1cF9jb21taXRfb3JfZGllKGhlYWRfb2lkLCAiSEVBRCIpOworCXN0cnVjdCBjb21taXQgKmJyYW5jaCA9IGxvb2t1cF9jb21taXRfb3JfZGllKCZyZW1vdGUtPm9sZF9vaWQsCisJCQkJCQkgICAgIHJlbW90ZS0+bmFtZSk7CisKKwlyZXR1cm4gaW5fbWVyZ2VfYmFzZXMoYnJhbmNoLCBoZWFkKTsKK30KKworc3RhdGljIGludCBkZWxldGVfcmVtb3RlX2JyYW5jaChjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgZm9yY2UpCit7CisJc3RydWN0IHJlZiAqcmVmcyA9IHJlbW90ZV9yZWZzOworCXN0cnVjdCByZWYgKnJlbW90ZV9yZWYgPSBOVUxMOworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJY2hhciAqc3ltcmVmID0gTlVMTDsKKwlpbnQgbWF0Y2g7CisJaW50IHBhdGxlbiA9IHN0cmxlbihwYXR0ZXJuKTsKKwlpbnQgaTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJY2hhciAqdXJsOworCisJLyogRmluZCB0aGUgcmVtb3RlIGJyYW5jaChlcykgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBicmFuY2ggbmFtZSAqLworCWZvciAobWF0Y2ggPSAwOyByZWZzOyByZWZzID0gcmVmcy0+bmV4dCkgeworCQljaGFyICpuYW1lID0gcmVmcy0+bmFtZTsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuYW1lbGVuIDwgcGF0bGVuIHx8CisJCSAgICBtZW1jbXAobmFtZSArIG5hbWVsZW4gLSBwYXRsZW4sIHBhdHRlcm4sIHBhdGxlbikpCisJCQljb250aW51ZTsKKwkJaWYgKG5hbWVsZW4gIT0gcGF0bGVuICYmIG5hbWVbbmFtZWxlbiAtIHBhdGxlbiAtIDFdICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQltYXRjaCsrOworCQlyZW1vdGVfcmVmID0gcmVmczsKKwl9CisJaWYgKG1hdGNoID09IDApCisJCXJldHVybiBlcnJvcigiTm8gcmVtb3RlIGJyYW5jaCBtYXRjaGVzICVzIiwgcGF0dGVybik7CisJaWYgKG1hdGNoICE9IDEpCisJCXJldHVybiBlcnJvcigiTW9yZSB0aGFuIG9uZSByZW1vdGUgYnJhbmNoIG1hdGNoZXMgJXMiLAorCQkJICAgICBwYXR0ZXJuKTsKKworCS8qCisJICogUmVtb3RlIEhFQUQgbXVzdCBiZSBhIHN5bXJlZiAobm90IGV4YWN0bHkgZm9vbHByb29mOyBhIHJlbW90ZQorCSAqIHN5bWxpbmsgdG8gYSBzeW1yZWYgd2lsbCBsb29rIGxpa2UgYSBzeW1yZWYpCisJICovCisJZmV0Y2hfc3ltcmVmKCJIRUFEIiwgJnN5bXJlZiwgJmhlYWRfb2lkKTsKKwlpZiAoIXN5bXJlZikKKwkJcmV0dXJuIGVycm9yKCJSZW1vdGUgSEVBRCBpcyBub3QgYSBzeW1yZWYiKTsKKworCS8qIFJlbW90ZSBicmFuY2ggbXVzdCBub3QgYmUgdGhlIHJlbW90ZSBIRUFEICovCisJZm9yIChpID0gMDsgc3ltcmVmICYmIGkgPCBNQVhERVBUSDsgaSsrKSB7CisJCWlmICghc3RyY21wKHJlbW90ZV9yZWYtPm5hbWUsIHN5bXJlZikpCisJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBicmFuY2ggJXMgaXMgdGhlIGN1cnJlbnQgSEVBRCIsCisJCQkJICAgICByZW1vdGVfcmVmLT5uYW1lKTsKKwkJZmV0Y2hfc3ltcmVmKHN5bXJlZiwgJnN5bXJlZiwgJmhlYWRfb2lkKTsKKwl9CisKKwkvKiBSdW4gZXh0cmEgc2FuaXR5IGNoZWNrcyBpZiBkZWxldGUgaXMgbm90IGZvcmNlZCAqLworCWlmICghZm9yY2UpIHsKKwkJLyogUmVtb3RlIEhFQUQgbXVzdCByZXNvbHZlIHRvIGEga25vd24gb2JqZWN0ICovCisJCWlmIChzeW1yZWYpCisJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBIRUFEIHN5bXJlZnMgdG9vIGRlZXAiKTsKKwkJaWYgKGlzX251bGxfb2lkKCZoZWFkX29pZCkpCisJCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHJlbW90ZSBIRUFEIik7CisJCWlmICghaGFzX29iamVjdF9maWxlKCZoZWFkX29pZCkpCisJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBIRUFEIHJlc29sdmVzIHRvIG9iamVjdCAlc1xud2hpY2ggZG9lcyBub3QgZXhpc3QgbG9jYWxseSwgcGVyaGFwcyB5b3UgbmVlZCB0byBmZXRjaD8iLCBvaWRfdG9faGV4KCZoZWFkX29pZCkpOworCisJCS8qIFJlbW90ZSBicmFuY2ggbXVzdCByZXNvbHZlIHRvIGEga25vd24gb2JqZWN0ICovCisJCWlmIChpc19udWxsX29pZCgmcmVtb3RlX3JlZi0+b2xkX29pZCkpCisJCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHJlbW90ZSBicmFuY2ggJXMiLAorCQkJCSAgICAgcmVtb3RlX3JlZi0+bmFtZSk7CisJCWlmICghaGFzX29iamVjdF9maWxlKCZyZW1vdGVfcmVmLT5vbGRfb2lkKSkKKwkJCXJldHVybiBlcnJvcigiUmVtb3RlIGJyYW5jaCAlcyByZXNvbHZlcyB0byBvYmplY3QgJXNcbndoaWNoIGRvZXMgbm90IGV4aXN0IGxvY2FsbHksIHBlcmhhcHMgeW91IG5lZWQgdG8gZmV0Y2g/IiwgcmVtb3RlX3JlZi0+bmFtZSwgb2lkX3RvX2hleCgmcmVtb3RlX3JlZi0+b2xkX29pZCkpOworCisJCS8qIFJlbW90ZSBicmFuY2ggbXVzdCBiZSBhbiBhbmNlc3RvciBvZiByZW1vdGUgSEVBRCAqLworCQlpZiAoIXZlcmlmeV9tZXJnZV9iYXNlKCZoZWFkX29pZCwgcmVtb3RlX3JlZikpIHsKKwkJCXJldHVybiBlcnJvcigiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBhbiBhbmNlc3RvciAiCisJCQkJICAgICAib2YgeW91ciBjdXJyZW50IEhFQUQuXG4iCisJCQkJICAgICAiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwiCisJCQkJICAgICAiIHJ1bjpcblx0J2dpdCBodHRwLXB1c2ggLUQgJXMgJXMnIiwKKwkJCQkgICAgIHJlbW90ZV9yZWYtPm5hbWUsIHJlcG8tPnVybCwgcGF0dGVybik7CisJCX0KKwl9CisKKwkvKiBTZW5kIGRlbGV0ZSByZXF1ZXN0ICovCisJZnByaW50ZihzdGRlcnIsICJSZW1vdmluZyByZW1vdGUgYnJhbmNoICclcydcbiIsIHJlbW90ZV9yZWYtPm5hbWUpOworCWlmIChkcnlfcnVuKQorCQlyZXR1cm4gMDsKKwl1cmwgPSB4c3RyZm10KCIlcyVzIiwgcmVwby0+dXJsLCByZW1vdGVfcmVmLT5uYW1lKTsKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgdXJsLCBEQVZfREVMRVRFKTsKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlmcmVlKHVybCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKQorCQkJcmV0dXJuIGVycm9yKCJERUxFVEUgcmVxdWVzdCBmYWlsZWQgKCVkLyVsZCkiLAorCQkJCSAgICAgcmVzdWx0cy5jdXJsX3Jlc3VsdCwgcmVzdWx0cy5odHRwX2NvZGUpOworCX0gZWxzZSB7CisJCWZyZWUodXJsKTsKKwkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgREVMRVRFIHJlcXVlc3QiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnVuX3JlcXVlc3RfcXVldWUodm9pZCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAxOworCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJYWRkX2ZpbGxfZnVuY3Rpb24oTlVMTCwgZmlsbF9hY3RpdmVfc2xvdCk7CisjZW5kaWYKKwlkbyB7CisJCWZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKCk7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorCX0gd2hpbGUgKHJlcXVlc3RfcXVldWVfaGVhZCAmJiAhYWJvcnRlZCk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3Q7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKm5leHRfcmVxdWVzdDsKKwlzdHJ1Y3QgcmVmc3BlYyBycyA9IFJFRlNQRUNfSU5JVF9QVVNIOworCXN0cnVjdCByZW1vdGVfbG9jayAqcmVmX2xvY2sgPSBOVUxMOworCXN0cnVjdCByZW1vdGVfbG9jayAqaW5mb19yZWZfbG9jayA9IE5VTEw7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJaW50IGRlbGV0ZV9icmFuY2ggPSAwOworCWludCBmb3JjZV9kZWxldGUgPSAwOworCWludCBvYmplY3RzX3RvX3NlbmQ7CisJaW50IHJjID0gMDsKKwlpbnQgaTsKKwlpbnQgbmV3X3JlZnM7CisJc3RydWN0IHJlZiAqcmVmLCAqbG9jYWxfcmVmczsKKworCXJlcG8gPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVwbykpOworCisJYXJndisrOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyssIGFyZ3YrKykgeworCQljb25zdCBjaGFyICphcmcgPSAqYXJndjsKKworCQlpZiAoKmFyZyA9PSAnLScpIHsKKwkJCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikpIHsKKwkJCQlwdXNoX2FsbCA9IE1BVENIX1JFRlNfQUxMOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1mb3JjZSIpKSB7CisJCQkJZm9yY2VfYWxsID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tZHJ5LXJ1biIpKSB7CisJCQkJZHJ5X3J1biA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWhlbHBlci1zdGF0dXMiKSkgeworCQkJCWhlbHBlcl9zdGF0dXMgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpIHsKKwkJCQlwdXNoX3ZlcmJvc2VseSA9IDE7CisJCQkJaHR0cF9pc192ZXJib3NlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi1kIikpIHsKKwkJCQlkZWxldGVfYnJhbmNoID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi1EIikpIHsKKwkJCQlkZWxldGVfYnJhbmNoID0gMTsKKwkJCQlmb3JjZV9kZWxldGUgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLWgiKSkKKwkJCQl1c2FnZShodHRwX3B1c2hfdXNhZ2UpOworCQl9CisJCWlmICghcmVwby0+dXJsKSB7CisJCQljaGFyICpwYXRoID0gc3Ryc3RyKGFyZywgIi8vIik7CisJCQlzdHJfZW5kX3VybF93aXRoX3NsYXNoKGFyZywgJnJlcG8tPnVybCk7CisJCQlyZXBvLT5wYXRoX2xlbiA9IHN0cmxlbihyZXBvLT51cmwpOworCQkJaWYgKHBhdGgpIHsKKwkJCQlyZXBvLT5wYXRoID0gc3RyY2hyKHBhdGgrMiwgJy8nKTsKKwkJCQlpZiAocmVwby0+cGF0aCkKKwkJCQkJcmVwby0+cGF0aF9sZW4gPSBzdHJsZW4ocmVwby0+cGF0aCk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlyZWZzcGVjX2FwcGVuZG4oJnJzLCBhcmd2LCBhcmdjIC0gaSk7CisJCWJyZWFrOworCX0KKworI2lmbmRlZiBVU0VfQ1VSTF9NVUxUSQorCWRpZSgiZ2l0LXB1c2ggaXMgbm90IGF2YWlsYWJsZSBmb3IgaHR0cC9odHRwcyByZXBvc2l0b3J5IHdoZW4gbm90IGNvbXBpbGVkIHdpdGggVVNFX0NVUkxfTVVMVEkiKTsKKyNlbmRpZgorCisJaWYgKCFyZXBvLT51cmwpCisJCXVzYWdlKGh0dHBfcHVzaF91c2FnZSk7CisKKwlpZiAoZGVsZXRlX2JyYW5jaCAmJiBycy5uciAhPSAxKQorCQlkaWUoIllvdSBtdXN0IHNwZWNpZnkgb25seSBvbmUgYnJhbmNoIG5hbWUgd2hlbiBkZWxldGluZyBhIHJlbW90ZSBicmFuY2giKTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCW1lbXNldChyZW1vdGVfZGlyX2V4aXN0cywgLTEsIDI1Nik7CisKKwlodHRwX2luaXQoTlVMTCwgcmVwby0+dXJsLCAxKTsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaXNfcnVubmluZ19xdWV1ZSA9IDA7CisjZW5kaWYKKworCS8qIFZlcmlmeSBEQVYgY29tcGxpYW5jZS9sb2NrIHN1cHBvcnQgKi8KKwlpZiAoIWxvY2tpbmdfYXZhaWxhYmxlKCkpIHsKKwkJcmMgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX2xvY2tzX29uX3NpZ25hbCk7CisKKwkvKiBDaGVjayB3aGV0aGVyIHRoZSByZW1vdGUgaGFzIHNlcnZlciBpbmZvIGZpbGVzICovCisJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCXJlcG8tPmhhc19pbmZvX3JlZnMgPSByZW1vdGVfZXhpc3RzKCJpbmZvL3JlZnMiKTsKKwlyZXBvLT5oYXNfaW5mb19wYWNrcyA9IHJlbW90ZV9leGlzdHMoIm9iamVjdHMvaW5mby9wYWNrcyIpOworCWlmIChyZXBvLT5oYXNfaW5mb19yZWZzKSB7CisJCWluZm9fcmVmX2xvY2sgPSBsb2NrX3JlbW90ZSgiaW5mby9yZWZzIiwgTE9DS19USU1FKTsKKwkJaWYgKGluZm9fcmVmX2xvY2spCisJCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDE7CisJCWVsc2UgeworCQkJZXJyb3IoImNhbm5vdCBsb2NrIGV4aXN0aW5nIGluZm8vcmVmcyIpOworCQkJcmMgPSAxOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCWlmIChyZXBvLT5oYXNfaW5mb19wYWNrcykKKwkJZmV0Y2hfaW5kaWNlcygpOworCisJLyogR2V0IGEgbGlzdCBvZiBhbGwgbG9jYWwgYW5kIHJlbW90ZSBoZWFkcyB0byB2YWxpZGF0ZSByZWZzcGVjcyAqLworCWxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkZldGNoaW5nIHJlbW90ZSBoZWFkcy4uLlxuIik7CisJZ2V0X2Rhdl9yZW1vdGVfaGVhZHMoKTsKKwlydW5fcmVxdWVzdF9xdWV1ZSgpOworCisJLyogUmVtb3ZlIGEgcmVtb3RlIGJyYW5jaCBpZiAtZCBvciAtRCB3YXMgc3BlY2lmaWVkICovCisJaWYgKGRlbGV0ZV9icmFuY2gpIHsKKwkJY29uc3QgY2hhciAqYnJhbmNoID0gcnMuaXRlbXNbaV0uc3JjOworCQlpZiAoZGVsZXRlX3JlbW90ZV9icmFuY2goYnJhbmNoLCBmb3JjZV9kZWxldGUpID09IC0xKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBkZWxldGUgcmVtb3RlIGJyYW5jaCAlc1xuIiwKKwkJCQlicmFuY2gpOworCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJcHJpbnRmKCJlcnJvciAlcyBjYW5ub3QgcmVtb3ZlXG4iLCBicmFuY2gpOworCQl9CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBtYXRjaCB0aGVtIHVwICovCisJaWYgKG1hdGNoX3B1c2hfcmVmcyhsb2NhbF9yZWZzLCAmcmVtb3RlX3JlZnMsICZycywgcHVzaF9hbGwpKSB7CisJCXJjID0gLTE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJaWYgKCFyZW1vdGVfcmVmcykgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIpOworCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCXByaW50ZigiZXJyb3IgbnVsbCBubyBtYXRjaFxuIik7CisJCXJjID0gMDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCW5ld19yZWZzID0gMDsKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzdHJ1Y3QgYXJndl9hcnJheSBjb21taXRfYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCQlpZiAoIXJlZi0+cGVlcl9yZWYpCisJCQljb250aW51ZTsKKworCQlpZiAoaXNfbnVsbF9vaWQoJnJlZi0+cGVlcl9yZWYtPm5ld19vaWQpKSB7CisJCQlpZiAoZGVsZXRlX3JlbW90ZV9icmFuY2gocmVmLT5uYW1lLCAxKSA9PSAtMSkgeworCQkJCWVycm9yKCJDb3VsZCBub3QgcmVtb3ZlICVzIiwgcmVmLT5uYW1lKTsKKwkJCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCQkJcHJpbnRmKCJlcnJvciAlcyBjYW5ub3QgcmVtb3ZlXG4iLCByZWYtPm5hbWUpOworCQkJCXJjID0gLTQ7CisJCQl9CisJCQllbHNlIGlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50Zigib2sgJXNcbiIsIHJlZi0+bmFtZSk7CisJCQluZXdfcmVmcysrOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAob2lkZXEoJnJlZi0+b2xkX29pZCwgJnJlZi0+cGVlcl9yZWYtPm5ld19vaWQpKSB7CisJCQlpZiAocHVzaF92ZXJib3NlbHkpCisJCQkJZnByaW50ZihzdGRlcnIsICInJXMnOiB1cC10by1kYXRlXG4iLCByZWYtPm5hbWUpOworCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJcHJpbnRmKCJvayAlcyB1cCB0byBkYXRlXG4iLCByZWYtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWZvcmNlX2FsbCAmJgorCQkgICAgIWlzX251bGxfb2lkKCZyZWYtPm9sZF9vaWQpICYmCisJCSAgICAhcmVmLT5mb3JjZSkgeworCQkJaWYgKCFoYXNfb2JqZWN0X2ZpbGUoJnJlZi0+b2xkX29pZCkgfHwKKwkJCSAgICAhcmVmX25ld2VyKCZyZWYtPnBlZXJfcmVmLT5uZXdfb2lkLAorCQkJCSAgICAgICAmcmVmLT5vbGRfb2lkKSkgeworCQkJCS8qCisJCQkJICogV2UgZG8gbm90IGhhdmUgdGhlIHJlbW90ZSByZWYsIG9yCisJCQkJICogd2Uga25vdyB0aGF0IHRoZSByZW1vdGUgcmVmIGlzIG5vdAorCQkJCSAqIGFuIGFuY2VzdG9yIG9mIHdoYXQgd2UgYXJlIHRyeWluZyB0bworCQkJCSAqIHB1c2guICBFaXRoZXIgd2F5IHRoaXMgY2FuIGJlIGxvc2luZworCQkJCSAqIGNvbW1pdHMgYXQgdGhlIHJlbW90ZSBlbmQgYW5kIGxpa2VseQorCQkJCSAqIHdlIHdlcmUgbm90IHVwIHRvIGRhdGUgdG8gYmVnaW4gd2l0aC4KKwkJCQkgKi8KKwkJCQllcnJvcigicmVtb3RlICclcycgaXMgbm90IGFuIGFuY2VzdG9yIG9mXG4iCisJCQkJICAgICAgImxvY2FsICclcycuXG4iCisJCQkJICAgICAgIk1heWJlIHlvdSBhcmUgbm90IHVwLXRvLWRhdGUgYW5kICIKKwkJCQkgICAgICAibmVlZCB0byBwdWxsIGZpcnN0PyIsCisJCQkJICAgICAgcmVmLT5uYW1lLAorCQkJCSAgICAgIHJlZi0+cGVlcl9yZWYtPm5hbWUpOworCQkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCQlwcmludGYoImVycm9yICVzIG5vbi1mYXN0IGZvcndhcmRcbiIsIHJlZi0+bmFtZSk7CisJCQkJcmMgPSAtMjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlvaWRjcHkoJnJlZi0+bmV3X29pZCwgJnJlZi0+cGVlcl9yZWYtPm5ld19vaWQpOworCQluZXdfcmVmcysrOworCisJCWZwcmludGYoc3RkZXJyLCAidXBkYXRpbmcgJyVzJyIsIHJlZi0+bmFtZSk7CisJCWlmIChzdHJjbXAocmVmLT5uYW1lLCByZWYtPnBlZXJfcmVmLT5uYW1lKSkKKwkJCWZwcmludGYoc3RkZXJyLCAiIHVzaW5nICclcyciLCByZWYtPnBlZXJfcmVmLT5uYW1lKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbiAgZnJvbSAlc1xuICB0byAgICVzXG4iLAorCQkJb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkKSwgb2lkX3RvX2hleCgmcmVmLT5uZXdfb2lkKSk7CisJCWlmIChkcnlfcnVuKSB7CisJCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCQlwcmludGYoIm9rICVzXG4iLCByZWYtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBMb2NrIHJlbW90ZSBicmFuY2ggcmVmICovCisJCXJlZl9sb2NrID0gbG9ja19yZW1vdGUocmVmLT5uYW1lLCBMT0NLX1RJTUUpOworCQlpZiAocmVmX2xvY2sgPT0gTlVMTCkgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gbG9jayByZW1vdGUgYnJhbmNoICVzXG4iLAorCQkJCXJlZi0+bmFtZSk7CisJCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCQlwcmludGYoImVycm9yICVzIGxvY2sgZXJyb3JcbiIsIHJlZi0+bmFtZSk7CisJCQlyYyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNldCB1cCByZXZpc2lvbiBpbmZvIGZvciB0aGlzIHJlZnNwZWMgKi8KKwkJYXJndl9hcnJheV9wdXNoKCZjb21taXRfYXJndiwgIiIpOyAvKiBpZ25vcmVkICovCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY29tbWl0X2FyZ3YsICItLW9iamVjdHMiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjb21taXRfYXJndiwgb2lkX3RvX2hleCgmcmVmLT5uZXdfb2lkKSk7CisJCWlmICghcHVzaF9hbGwgJiYgIWlzX251bGxfb2lkKCZyZWYtPm9sZF9vaWQpKQorCQkJYXJndl9hcnJheV9wdXNoZigmY29tbWl0X2FyZ3YsICJeJXMiLAorCQkJCQkgb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkKSk7CisJCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXZzLCBzZXR1cF9naXRfZGlyZWN0b3J5KCkpOworCQlzZXR1cF9yZXZpc2lvbnMoY29tbWl0X2FyZ3YuYXJnYywgY29tbWl0X2FyZ3YuYXJndiwgJnJldnMsIE5VTEwpOworCQlyZXZzLmVkZ2VfaGludCA9IDA7IC8qIGp1c3QgaW4gY2FzZSAqLworCisJCS8qIEdlbmVyYXRlIGEgbGlzdCBvZiBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSBwdXNoZWQgKi8KKwkJcHVzaGluZyA9IDA7CisJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcoJnJldnMsIE5VTEwsIDApOworCQlvYmplY3RzX3RvX3NlbmQgPSBnZXRfZGVsdGEoJnJldnMsIHJlZl9sb2NrKTsKKwkJZmluaXNoX2FsbF9hY3RpdmVfc2xvdHMoKTsKKworCQkvKiBQdXNoIG1pc3Npbmcgb2JqZWN0cyB0byByZW1vdGUsIHRoaXMgd291bGQgYmUgYQorCQkgICBjb252ZW5pZW50IHRpbWUgdG8gcGFjayB0aGVtIGZpcnN0IGlmIGFwcHJvcHJpYXRlLiAqLworCQlwdXNoaW5nID0gMTsKKwkJaWYgKG9iamVjdHNfdG9fc2VuZCkKKwkJCWZwcmludGYoc3RkZXJyLCAiICAgIHNlbmRpbmcgJWQgb2JqZWN0c1xuIiwKKwkJCQlvYmplY3RzX3RvX3NlbmQpOworCisJCXJ1bl9yZXF1ZXN0X3F1ZXVlKCk7CisKKwkJLyogVXBkYXRlIHRoZSByZW1vdGUgYnJhbmNoIGlmIGFsbCB3ZW50IHdlbGwgKi8KKwkJaWYgKGFib3J0ZWQgfHwgIXVwZGF0ZV9yZW1vdGUoJnJlZi0+bmV3X29pZCwgcmVmX2xvY2spKQorCQkJcmMgPSAxOworCisJCWlmICghcmMpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICBkb25lXG4iKTsKKwkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQlwcmludGYoIiVzICVzXG4iLCAhcmMgPyAib2siIDogImVycm9yIiwgcmVmLT5uYW1lKTsKKwkJdW5sb2NrX3JlbW90ZShyZWZfbG9jayk7CisJCWNoZWNrX2xvY2tzKCk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmNvbW1pdF9hcmd2KTsKKwl9CisKKwkvKiBVcGRhdGUgcmVtb3RlIHNlcnZlciBpbmZvIGlmIGFwcHJvcHJpYXRlICovCisJaWYgKHJlcG8tPmhhc19pbmZvX3JlZnMgJiYgbmV3X3JlZnMpIHsKKwkJaWYgKGluZm9fcmVmX2xvY2sgJiYgcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVXBkYXRpbmcgcmVtb3RlIHNlcnZlciBpbmZvXG4iKTsKKwkJCWlmICghZHJ5X3J1bikKKwkJCQl1cGRhdGVfcmVtb3RlX2luZm9fcmVmcyhpbmZvX3JlZl9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHVwZGF0ZSBzZXJ2ZXIgaW5mb1xuIik7CisJCX0KKwl9CisKKyBjbGVhbnVwOgorCWlmIChpbmZvX3JlZl9sb2NrKQorCQl1bmxvY2tfcmVtb3RlKGluZm9fcmVmX2xvY2spOworCWZyZWUocmVwbyk7CisKKwlodHRwX2NsZWFudXAoKTsKKworCXJlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJd2hpbGUgKHJlcXVlc3QgIT0gTlVMTCkgeworCQluZXh0X3JlcXVlc3QgPSByZXF1ZXN0LT5uZXh0OworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3Q7CisJfQorCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvaHR0cC13YWxrZXIuYyBiL2h0dHAtd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxNWUzMgotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAtd2Fsa2VyLmMKQEAgLTAsMCArMSw2MzAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAibGlzdC5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK3N0cnVjdCBhbHRfYmFzZSB7CisJY2hhciAqYmFzZTsKKwlpbnQgZ290X2luZGljZXM7CisJc3RydWN0IHBhY2tlZF9naXQgKnBhY2tzOworCXN0cnVjdCBhbHRfYmFzZSAqbmV4dDsKK307CisKK2VudW0gb2JqZWN0X3JlcXVlc3Rfc3RhdGUgeworCVdBSVRJTkcsCisJQUJPUlRFRCwKKwlBQ1RJVkUsCisJQ09NUExFVEUKK307CisKK3N0cnVjdCBvYmplY3RfcmVxdWVzdCB7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBhbHRfYmFzZSAqcmVwbzsKKwllbnVtIG9iamVjdF9yZXF1ZXN0X3N0YXRlIHN0YXRlOworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCB7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyOworCWNvbnN0IGNoYXIgKmJhc2U7CisJc3RydWN0IHN0cmJ1ZiAqdXJsOworCXN0cnVjdCBzdHJidWYgKmJ1ZmZlcjsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlpbnQgaHR0cF9zcGVjaWZpYzsKK307CisKK3N0cnVjdCB3YWxrZXJfZGF0YSB7CisJY29uc3QgY2hhciAqdXJsOworCWludCBnb3RfYWx0ZXJuYXRlczsKKwlzdHJ1Y3QgYWx0X2Jhc2UgKmFsdDsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQob2JqZWN0X3F1ZXVlX2hlYWQpOworCitzdGF0aWMgdm9pZCBmZXRjaF9hbHRlcm5hdGVzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgY29uc3QgY2hhciAqYmFzZSk7CisKK3N0YXRpYyB2b2lkIHByb2Nlc3Nfb2JqZWN0X3Jlc3BvbnNlKHZvaWQgKmNhbGxiYWNrX2RhdGEpOworCitzdGF0aWMgdm9pZCBzdGFydF9vYmplY3RfcmVxdWVzdChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsCisJCQkJIHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOworCisJcmVxID0gbmV3X2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcS0+cmVwby0+YmFzZSwgJm9ial9yZXEtPm9pZCk7CisJaWYgKHJlcSA9PSBOVUxMKSB7CisJCW9ial9yZXEtPnN0YXRlID0gQUJPUlRFRDsKKwkJcmV0dXJuOworCX0KKwlvYmpfcmVxLT5yZXEgPSByZXE7CisKKwlzbG90ID0gcmVxLT5zbG90OworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX29iamVjdF9yZXNwb25zZTsKKwlzbG90LT5jYWxsYmFja19kYXRhID0gb2JqX3JlcTsKKworCS8qIFRyeSB0byBnZXQgdGhlIHJlcXVlc3Qgc3RhcnRlZCwgYWJvcnQgdGhlIHJlcXVlc3Qgb24gZXJyb3IgKi8KKwlvYmpfcmVxLT5zdGF0ZSA9IEFDVElWRTsKKwlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCW9ial9yZXEtPnN0YXRlID0gQUJPUlRFRDsKKwkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHJlcSk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9vYmplY3RfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEpCit7CisJaWYgKGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSkpCisJCXJldHVybjsKKworCWlmIChvYmpfcmVxLT5yZXEtPnJlbmFtZSA9PSAwKQorCQl3YWxrZXJfc2F5KG9ial9yZXEtPndhbGtlciwgImdvdCAlc1xuIiwgb2lkX3RvX2hleCgmb2JqX3JlcS0+b2lkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3Nfb2JqZWN0X3Jlc3BvbnNlKHZvaWQgKmNhbGxiYWNrX2RhdGEpCit7CisJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxID0KKwkJKHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqKWNhbGxiYWNrX2RhdGE7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyID0gb2JqX3JlcS0+d2Fsa2VyOworCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKKwlzdHJ1Y3QgYWx0X2Jhc2UgKmFsdCA9IGRhdGEtPmFsdDsKKworCXByb2Nlc3NfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpOworCW9ial9yZXEtPnN0YXRlID0gQ09NUExFVEU7CisKKwlub3JtYWxpemVfY3VybF9yZXN1bHQoJm9ial9yZXEtPnJlcS0+Y3VybF9yZXN1bHQsCisJCQkgICAgICBvYmpfcmVxLT5yZXEtPmh0dHBfY29kZSwKKwkJCSAgICAgIG9ial9yZXEtPnJlcS0+ZXJyb3JzdHIsCisJCQkgICAgICBzaXplb2Yob2JqX3JlcS0+cmVxLT5lcnJvcnN0cikpOworCisJLyogVXNlIGFsdGVybmF0ZXMgaWYgbmVjZXNzYXJ5ICovCisJaWYgKG1pc3NpbmdfdGFyZ2V0KG9ial9yZXEtPnJlcSkpIHsKKwkJZmV0Y2hfYWx0ZXJuYXRlcyh3YWxrZXIsIGFsdC0+YmFzZSk7CisJCWlmIChvYmpfcmVxLT5yZXBvLT5uZXh0ICE9IE5VTEwpIHsKKwkJCW9ial9yZXEtPnJlcG8gPQorCQkJCW9ial9yZXEtPnJlcG8tPm5leHQ7CisJCQlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcS0+cmVxKTsKKwkJCXN0YXJ0X29iamVjdF9yZXF1ZXN0KHdhbGtlciwgb2JqX3JlcSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlmaW5pc2hfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2Vfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQoreworCWlmIChvYmpfcmVxLT5yZXEgIT1OVUxMICYmIG9ial9yZXEtPnJlcS0+bG9jYWxmaWxlICE9IC0xKQorCQllcnJvcigiZmQgbGVha2FnZSBpbiByZWxlYXNlOiAlZCIsIG9ial9yZXEtPnJlcS0+bG9jYWxmaWxlKTsKKworCWxpc3RfZGVsKCZvYmpfcmVxLT5ub2RlKTsKKwlmcmVlKG9ial9yZXEpOworfQorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3N0YXRpYyBpbnQgZmlsbF9hY3RpdmVfc2xvdChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCit7CisJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcCwgKmhlYWQgPSAmb2JqZWN0X3F1ZXVlX2hlYWQ7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsIGhlYWQpIHsKKwkJb2JqX3JlcSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QsIG5vZGUpOworCQlpZiAob2JqX3JlcS0+c3RhdGUgPT0gV0FJVElORykgeworCQkJaWYgKGhhc19vYmplY3RfZmlsZSgmb2JqX3JlcS0+b2lkKSkKKwkJCQlvYmpfcmVxLT5zdGF0ZSA9IENPTVBMRVRFOworCQkJZWxzZSB7CisJCQkJc3RhcnRfb2JqZWN0X3JlcXVlc3Qod2Fsa2VyLCBvYmpfcmVxKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcmVmZXRjaChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpuZXdyZXE7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOworCisJbmV3cmVxID0geG1hbGxvYyhzaXplb2YoKm5ld3JlcSkpOworCW5ld3JlcS0+d2Fsa2VyID0gd2Fsa2VyOworCWhhc2hjcHkobmV3cmVxLT5vaWQuaGFzaCwgc2hhMSk7CisJbmV3cmVxLT5yZXBvID0gZGF0YS0+YWx0OworCW5ld3JlcS0+c3RhdGUgPSBXQUlUSU5HOworCW5ld3JlcS0+cmVxID0gTlVMTDsKKworCWh0dHBfaXNfdmVyYm9zZSA9IHdhbGtlci0+Z2V0X3ZlcmJvc2VseTsKKwlsaXN0X2FkZF90YWlsKCZuZXdyZXEtPm5vZGUsICZvYmplY3RfcXVldWVfaGVhZCk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJc3RlcF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGlzX2FsdGVybmF0ZV9hbGxvd2VkKGNvbnN0IGNoYXIgKnVybCkKK3sKKwljb25zdCBjaGFyICpwcm90b2NvbHNbXSA9IHsKKwkJImh0dHAiLCAiaHR0cHMiLCAiZnRwIiwgImZ0cHMiCisJfTsKKwlpbnQgaTsKKworCWlmIChodHRwX2ZvbGxvd19jb25maWcgIT0gSFRUUF9GT0xMT1dfQUxXQVlTKSB7CisJCXdhcm5pbmcoImFsdGVybmF0ZSBkaXNhYmxlZCBieSBodHRwLmZvbGxvd1JlZGlyZWN0czogJXMiLCB1cmwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm90b2NvbHMpOyBpKyspIHsKKwkJY29uc3QgY2hhciAqZW5kOworCQlpZiAoc2tpcF9wcmVmaXgodXJsLCBwcm90b2NvbHNbaV0sICZlbmQpICYmCisJCSAgICBzdGFydHNfd2l0aChlbmQsICI6Ly8iKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID49IEFSUkFZX1NJWkUocHJvdG9jb2xzKSkgeworCQl3YXJuaW5nKCJpZ25vcmluZyBhbHRlcm5hdGUgd2l0aCB1bmtub3duIHByb3RvY29sOiAlcyIsIHVybCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIWlzX3RyYW5zcG9ydF9hbGxvd2VkKHByb3RvY29sc1tpXSwgMCkpIHsKKwkJd2FybmluZygiaWdub3JpbmcgYWx0ZXJuYXRlIHdpdGggcmVzdHJpY3RlZCBwcm90b2NvbDogJXMiLCB1cmwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19hbHRlcm5hdGVzX3Jlc3BvbnNlKHZvaWQgKmNhbGxiYWNrX2RhdGEpCit7CisJc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCAqYWx0X3JlcSA9CisJCShzdHJ1Y3QgYWx0ZXJuYXRlc19yZXF1ZXN0ICopY2FsbGJhY2tfZGF0YTsKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIgPSBhbHRfcmVxLT53YWxrZXI7CisJc3RydWN0IHdhbGtlcl9kYXRhICpjZGF0YSA9IHdhbGtlci0+ZGF0YTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFsdF9yZXEtPnNsb3Q7CisJc3RydWN0IGFsdF9iYXNlICp0YWlsID0gY2RhdGEtPmFsdDsKKwljb25zdCBjaGFyICpiYXNlID0gYWx0X3JlcS0+YmFzZTsKKwljb25zdCBjaGFyIG51bGxfYnl0ZSA9ICdcMCc7CisJY2hhciAqZGF0YTsKKwlpbnQgaSA9IDA7CisKKwlub3JtYWxpemVfY3VybF9yZXN1bHQoJnNsb3QtPmN1cmxfcmVzdWx0LCBzbG90LT5odHRwX2NvZGUsCisJCQkgICAgICBjdXJsX2Vycm9yc3RyLCBzaXplb2YoY3VybF9lcnJvcnN0cikpOworCisJaWYgKGFsdF9yZXEtPmh0dHBfc3BlY2lmaWMpIHsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LIHx8CisJCSAgICAhYWx0X3JlcS0+YnVmZmVyLT5sZW4pIHsKKworCQkJLyogVHJ5IHJldXNpbmcgdGhlIHNsb3QgdG8gZ2V0IG5vbi1odHRwIGFsdGVybmF0ZXMgKi8KKwkJCWFsdF9yZXEtPmh0dHBfc3BlY2lmaWMgPSAwOworCQkJc3RyYnVmX3Jlc2V0KGFsdF9yZXEtPnVybCk7CisJCQlzdHJidWZfYWRkZihhbHRfcmVxLT51cmwsICIlcy9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIsCisJCQkJICAgIGJhc2UpOworCQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwKKwkJCQkJIGFsdF9yZXEtPnVybC0+YnVmKTsKKwkJCWFjdGl2ZV9yZXF1ZXN0cysrOworCQkJc2xvdC0+aW5fdXNlID0gMTsKKwkJCWlmIChzbG90LT5maW5pc2hlZCAhPSBOVUxMKQorCQkJCSgqc2xvdC0+ZmluaXNoZWQpID0gMDsKKwkJCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCQljZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAtMTsKKwkJCQlzbG90LT5pbl91c2UgPSAwOworCQkJCWlmIChzbG90LT5maW5pc2hlZCAhPSBOVUxMKQorCQkJCQkoKnNsb3QtPmZpbmlzaGVkKSA9IDE7CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCWlmICghbWlzc2luZ190YXJnZXQoc2xvdCkpIHsKKwkJCWNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IC0xOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZndyaXRlX2J1ZmZlcigoY2hhciAqKSZudWxsX2J5dGUsIDEsIDEsIGFsdF9yZXEtPmJ1ZmZlcik7CisJYWx0X3JlcS0+YnVmZmVyLT5sZW4tLTsKKwlkYXRhID0gYWx0X3JlcS0+YnVmZmVyLT5idWY7CisKKwl3aGlsZSAoaSA8IGFsdF9yZXEtPmJ1ZmZlci0+bGVuKSB7CisJCWludCBwb3NuID0gaTsKKwkJd2hpbGUgKHBvc24gPCBhbHRfcmVxLT5idWZmZXItPmxlbiAmJiBkYXRhW3Bvc25dICE9ICdcbicpCisJCQlwb3NuKys7CisJCWlmIChkYXRhW3Bvc25dID09ICdcbicpIHsKKwkJCWludCBva2F5ID0gMDsKKwkJCWludCBzZXJ2ZXJsZW4gPSAwOworCQkJc3RydWN0IGFsdF9iYXNlICpuZXdhbHQ7CisJCQlpZiAoZGF0YVtpXSA9PSAnLycpIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgY291bnRzCisJCQkJICogaHR0cDovL2dpdC5ob3N0L3B1Yi9zY20vbGludXguZ2l0LworCQkJCSAqIC0tLS0tLS0tLS0taGVyZV4KKwkJCQkgKiBzbyBtZW1jcHkoZHN0LCBiYXNlLCBzZXJ2ZXJsZW4pIHdpbGwKKwkJCQkgKiBjb3B5IHVwIHRvICIuLi5naXQuaG9zdCIuCisJCQkJICovCisJCQkJY29uc3QgY2hhciAqY29sb25fc3MgPSBzdHJzdHIoYmFzZSwiOi8vIik7CisJCQkJaWYgKGNvbG9uX3NzKSB7CisJCQkJCXNlcnZlcmxlbiA9IChzdHJjaHIoY29sb25fc3MgKyAzLCAnLycpCisJCQkJCQkgICAgIC0gYmFzZSk7CisJCQkJCW9rYXkgPSAxOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoIW1lbWNtcChkYXRhICsgaSwgIi4uLyIsIDMpKSB7CisJCQkJLyoKKwkJCQkgKiBSZWxhdGl2ZSBVUkw7IGNob3AgdGhlIGNvcnJlc3BvbmRpbmcKKwkJCQkgKiBudW1iZXIgb2Ygc3VicGF0aCBmcm9tIGJhc2UgKGFuZCAuLi8KKwkJCQkgKiBmcm9tIGRhdGEpLCBhbmQgY29uY2F0ZW5hdGUgdGhlIHJlc3VsdC4KKwkJCQkgKgorCQkJCSAqIFRoZSBjb2RlIGZpcnN0IGRyb3BzIC4uLyBmcm9tIGRhdGEsIGFuZAorCQkJCSAqIHRoZW4gZHJvcHMgb25lIC4uLyBmcm9tIGRhdGEgYW5kIG9uZSBwYXRoCisJCQkJICogZnJvbSBiYXNlLiAgSU9XLCBvbmUgZXh0cmEgLi4vIGlzIGRyb3BwZWQKKwkJCQkgKiBmcm9tIGRhdGEgdGhhbiBwYXRoIGlzIGRyb3BwZWQgZnJvbSBiYXNlLgorCQkJCSAqCisJCQkJICogVGhpcyBpcyBub3Qgd3JvbmcuICBUaGUgYWx0ZXJuYXRlIGluCisJCQkJICogICAgIGh0dHA6Ly9naXQuaG9zdC9wdWIvc2NtL2xpbnV4LmdpdC8KKwkJCQkgKiB0byBib3Jyb3cgZnJvbQorCQkJCSAqICAgICBodHRwOi8vZ2l0Lmhvc3QvcHViL3NjbS9saW51cy5naXQvCisJCQkJICogaXMgLi4vLi4vbGludXMuZ2l0L29iamVjdHMvLiAgWW91IG5lZWQKKwkJCQkgKiB0d28gLi4vLi4vIHRvIGJvcnJvdyBmcm9tIHlvdXIgZGlyZWN0CisJCQkJICogbmVpZ2hib3VyLgorCQkJCSAqLworCQkJCWkgKz0gMzsKKwkJCQlzZXJ2ZXJsZW4gPSBzdHJsZW4oYmFzZSk7CisJCQkJd2hpbGUgKGkgKyAyIDwgcG9zbiAmJgorCQkJCSAgICAgICAhbWVtY21wKGRhdGEgKyBpLCAiLi4vIiwgMykpIHsKKwkJCQkJZG8geworCQkJCQkJc2VydmVybGVuLS07CisJCQkJCX0gd2hpbGUgKHNlcnZlcmxlbiAmJgorCQkJCQkJIGJhc2Vbc2VydmVybGVuIC0gMV0gIT0gJy8nKTsKKwkJCQkJaSArPSAzOworCQkJCX0KKwkJCQkvKiBJZiB0aGUgc2VydmVyIGdvdCByZW1vdmVkLCBnaXZlIHVwLiAqLworCQkJCW9rYXkgPSBzdHJjaHIoYmFzZSwgJzonKSAtIGJhc2UgKyAzIDwKKwkJCQkgICAgICAgc2VydmVybGVuOworCQkJfSBlbHNlIGlmIChhbHRfcmVxLT5odHRwX3NwZWNpZmljKSB7CisJCQkJY2hhciAqY29sb24gPSBzdHJjaHIoZGF0YSArIGksICc6Jyk7CisJCQkJY2hhciAqc2xhc2ggPSBzdHJjaHIoZGF0YSArIGksICcvJyk7CisJCQkJaWYgKGNvbG9uICYmIHNsYXNoICYmIGNvbG9uIDwgZGF0YSArIHBvc24gJiYKKwkJCQkgICAgc2xhc2ggPCBkYXRhICsgcG9zbiAmJiBjb2xvbiA8IHNsYXNoKSB7CisJCQkJCW9rYXkgPSAxOworCQkJCX0KKwkJCX0KKwkJCWlmIChva2F5KSB7CisJCQkJc3RydWN0IHN0cmJ1ZiB0YXJnZXQgPSBTVFJCVUZfSU5JVDsKKwkJCQlzdHJidWZfYWRkKCZ0YXJnZXQsIGJhc2UsIHNlcnZlcmxlbik7CisJCQkJc3RyYnVmX2FkZCgmdGFyZ2V0LCBkYXRhICsgaSwgcG9zbiAtIGkpOworCQkJCWlmICghc3RyYnVmX3N0cmlwX3N1ZmZpeCgmdGFyZ2V0LCAib2JqZWN0cyIpKSB7CisJCQkJCXdhcm5pbmcoImlnbm9yaW5nIGFsdGVybmF0ZSB0aGF0IGRvZXMiCisJCQkJCQkiIG5vdCBlbmQgaW4gJ29iamVjdHMnOiAlcyIsCisJCQkJCQl0YXJnZXQuYnVmKTsKKwkJCQkJc3RyYnVmX3JlbGVhc2UoJnRhcmdldCk7CisJCQkJfSBlbHNlIGlmIChpc19hbHRlcm5hdGVfYWxsb3dlZCh0YXJnZXQuYnVmKSkgeworCQkJCQl3YXJuaW5nKCJhZGRpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZTogJXMiLAorCQkJCQkJdGFyZ2V0LmJ1Zik7CisJCQkJCW5ld2FsdCA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdhbHQpKTsKKwkJCQkJbmV3YWx0LT5uZXh0ID0gTlVMTDsKKwkJCQkJbmV3YWx0LT5iYXNlID0gc3RyYnVmX2RldGFjaCgmdGFyZ2V0LCBOVUxMKTsKKwkJCQkJbmV3YWx0LT5nb3RfaW5kaWNlcyA9IDA7CisJCQkJCW5ld2FsdC0+cGFja3MgPSBOVUxMOworCisJCQkJCXdoaWxlICh0YWlsLT5uZXh0ICE9IE5VTEwpCisJCQkJCQl0YWlsID0gdGFpbC0+bmV4dDsKKwkJCQkJdGFpbC0+bmV4dCA9IG5ld2FsdDsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHJidWZfcmVsZWFzZSgmdGFyZ2V0KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaSA9IHBvc24gKyAxOworCX0KKworCWNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGZldGNoX2FsdGVybmF0ZXMoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBjb25zdCBjaGFyICpiYXNlKQoreworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB1cmwgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgYWx0ZXJuYXRlc19yZXF1ZXN0IGFsdF9yZXE7CisJc3RydWN0IHdhbGtlcl9kYXRhICpjZGF0YSA9IHdhbGtlci0+ZGF0YTsKKworCS8qCisJICogSWYgYW5vdGhlciByZXF1ZXN0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQgZmV0Y2hpbmcgYWx0ZXJuYXRlcywKKwkgKiB3YWl0IGZvciB0aGVtIHRvIGFycml2ZSBhbmQgcmV0dXJuIHRvIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0J3MKKwkgKiBjdXJsIG1lc3NhZ2UKKwkgKi8KKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCXdoaWxlIChjZGF0YS0+Z290X2FsdGVybmF0ZXMgPT0gMCkgeworCQlzdGVwX2FjdGl2ZV9zbG90cygpOworCX0KKyNlbmRpZgorCisJLyogTm90aGluZyB0byBkbyBpZiB0aGV5J3ZlIGFscmVhZHkgYmVlbiBmZXRjaGVkICovCisJaWYgKGNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9PSAxKQorCQlyZXR1cm47CisKKwkvKiBTdGFydCB0aGUgZmV0Y2ggKi8KKwljZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAwOworCisJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKKwkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIGFsdGVybmF0ZXMgbGlzdCBmb3IgJXNcbiIsIGJhc2UpOworCisJc3RyYnVmX2FkZGYoJnVybCwgIiVzL29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMiLCBiYXNlKTsKKworCS8qCisJICogVXNlIGEgY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgcmVzdWx0LCBzaW5jZSBhbm90aGVyIHJlcXVlc3QKKwkgKiBtYXkgZmFpbCBhbmQgbmVlZCB0byBoYXZlIGFsdGVybmF0ZXMgbG9hZGVkIGJlZm9yZSBjb250aW51aW5nCisJICovCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX2FsdGVybmF0ZXNfcmVzcG9uc2U7CisJYWx0X3JlcS53YWxrZXIgPSB3YWxrZXI7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9ICZhbHRfcmVxOworCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwuYnVmKTsKKworCWFsdF9yZXEuYmFzZSA9IGJhc2U7CisJYWx0X3JlcS51cmwgPSAmdXJsOworCWFsdF9yZXEuYnVmZmVyID0gJmJ1ZmZlcjsKKwlhbHRfcmVxLmh0dHBfc3BlY2lmaWMgPSAxOworCWFsdF9yZXEuc2xvdCA9IHNsb3Q7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpCisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwllbHNlCisJCWNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IC0xOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJc3RyYnVmX3JlbGVhc2UoJnVybCk7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfaW5kaWNlcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBhbHRfYmFzZSAqcmVwbykKK3sKKwlpbnQgcmV0OworCisJaWYgKHJlcG8tPmdvdF9pbmRpY2VzKQorCQlyZXR1cm4gMDsKKworCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpCisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBwYWNrIGxpc3QgZm9yICVzXG4iLCByZXBvLT5iYXNlKTsKKworCXN3aXRjaCAoaHR0cF9nZXRfaW5mb19wYWNrcyhyZXBvLT5iYXNlLCAmcmVwby0+cGFja3MpKSB7CisJY2FzZSBIVFRQX09LOgorCWNhc2UgSFRUUF9NSVNTSU5HX1RBUkdFVDoKKwkJcmVwby0+Z290X2luZGljZXMgPSAxOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXBvLT5nb3RfaW5kaWNlcyA9IDA7CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHR0cF9mZXRjaF9wYWNrKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IGFsdF9iYXNlICpyZXBvLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQ7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOworCisJaWYgKGZldGNoX2luZGljZXMod2Fsa2VyLCByZXBvKSkKKwkJcmV0dXJuIC0xOworCXRhcmdldCA9IGZpbmRfc2hhMV9wYWNrKHNoYTEsIHJlcG8tPnBhY2tzKTsKKwlpZiAoIXRhcmdldCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgcGFjayAlc1xuIiwKKwkJCWhhc2hfdG9faGV4KHRhcmdldC0+aGFzaCkpOworCQlmcHJpbnRmKHN0ZGVyciwgIiB3aGljaCBjb250YWlucyAlc1xuIiwKKwkJCWhhc2hfdG9faGV4KHNoYTEpKTsKKwl9CisKKwlwcmVxID0gbmV3X2h0dHBfcGFja19yZXF1ZXN0KHRhcmdldCwgcmVwby0+YmFzZSk7CisJaWYgKHByZXEgPT0gTlVMTCkKKwkJZ290byBhYm9ydDsKKwlwcmVxLT5sc3QgPSAmcmVwby0+cGFja3M7CisJcHJlcS0+c2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChwcmVxLT5zbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgZmlsZSAlc1xuJXMiLCBwcmVxLT51cmwsCisJCQkgICAgICBjdXJsX2Vycm9yc3RyKTsKKwkJCWdvdG8gYWJvcnQ7CisJCX0KKwl9IGVsc2UgeworCQllcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwlyZXQgPSBmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7CisKK2Fib3J0OgorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgYWJvcnRfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQoreworCXJlbGVhc2Vfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfb2JqZWN0KHN0cnVjdCB3YWxrZXIgKndhbGtlciwgdW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwljaGFyICpoZXggPSBoYXNoX3RvX2hleChoYXNoKTsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPSBOVUxMOworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqaGVhZCA9ICZvYmplY3RfcXVldWVfaGVhZDsKKworCWxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSB7CisJCW9ial9yZXEgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9iamVjdF9yZXF1ZXN0LCBub2RlKTsKKwkJaWYgKGhhc2hlcShvYmpfcmVxLT5vaWQuaGFzaCwgaGFzaCkpCisJCQlicmVhazsKKwl9CisJaWYgKG9ial9yZXEgPT0gTlVMTCkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBmaW5kIHJlcXVlc3QgZm9yICVzIGluIHRoZSBxdWV1ZSIsIGhleCk7CisKKwlpZiAoaGFzX29iamVjdF9maWxlKCZvYmpfcmVxLT5vaWQpKSB7CisJCWlmIChvYmpfcmVxLT5yZXEgIT0gTlVMTCkKKwkJCWFib3J0X2h0dHBfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcS0+cmVxKTsKKwkJYWJvcnRfb2JqZWN0X3JlcXVlc3Qob2JqX3JlcSk7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJd2hpbGUgKG9ial9yZXEtPnN0YXRlID09IFdBSVRJTkcpCisJCXN0ZXBfYWN0aXZlX3Nsb3RzKCk7CisjZWxzZQorCXN0YXJ0X29iamVjdF9yZXF1ZXN0KHdhbGtlciwgb2JqX3JlcSk7CisjZW5kaWYKKworCS8qCisJICogb2JqX3JlcS0+cmVxIG1pZ2h0IGNoYW5nZSB3aGVuIGZldGNoaW5nIGFsdGVybmF0ZXMgaW4gdGhlIGNhbGxiYWNrCisJICogcHJvY2Vzc19vYmplY3RfcmVzcG9uc2U7IHRoZXJlZm9yZSwgdGhlICJzaG9ydGN1dCIgdmFyaWFibGUsIHJlcSwKKwkgKiBpcyB1c2VkIG9ubHkgYWZ0ZXIgd2UncmUgZG9uZSB3aXRoIHNsb3RzLgorCSAqLworCXdoaWxlIChvYmpfcmVxLT5zdGF0ZSA9PSBBQ1RJVkUpCisJCXJ1bl9hY3RpdmVfc2xvdChvYmpfcmVxLT5yZXEtPnNsb3QpOworCisJcmVxID0gb2JqX3JlcS0+cmVxOworCisJaWYgKHJlcS0+bG9jYWxmaWxlICE9IC0xKSB7CisJCWNsb3NlKHJlcS0+bG9jYWxmaWxlKTsKKwkJcmVxLT5sb2NhbGZpbGUgPSAtMTsKKwl9CisKKwlub3JtYWxpemVfY3VybF9yZXN1bHQoJnJlcS0+Y3VybF9yZXN1bHQsIHJlcS0+aHR0cF9jb2RlLAorCQkJICAgICAgcmVxLT5lcnJvcnN0ciwgc2l6ZW9mKHJlcS0+ZXJyb3JzdHIpKTsKKworCWlmIChvYmpfcmVxLT5zdGF0ZSA9PSBBQk9SVEVEKSB7CisJCXJldCA9IGVycm9yKCJSZXF1ZXN0IGZvciAlcyBhYm9ydGVkIiwgaGV4KTsKKwl9IGVsc2UgaWYgKHJlcS0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYKKwkJICAgcmVxLT5odHRwX2NvZGUgIT0gNDE2KSB7CisJCWlmIChtaXNzaW5nX3RhcmdldChyZXEpKQorCQkJcmV0ID0gLTE7IC8qIEJlIHNpbGVudCwgaXQgaXMgcHJvYmFibHkgaW4gYSBwYWNrLiAqLworCQllbHNlCisJCQlyZXQgPSBlcnJvcigiJXMgKGN1cmxfcmVzdWx0ID0gJWQsIGh0dHBfY29kZSA9ICVsZCwgc2hhMSA9ICVzKSIsCisJCQkJICAgIHJlcS0+ZXJyb3JzdHIsIHJlcS0+Y3VybF9yZXN1bHQsCisJCQkJICAgIHJlcS0+aHR0cF9jb2RlLCBoZXgpOworCX0gZWxzZSBpZiAocmVxLT56cmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQl3YWxrZXItPmNvcnJ1cHRfb2JqZWN0X2ZvdW5kKys7CisJCXJldCA9IGVycm9yKCJGaWxlICVzICglcykgY29ycnVwdCIsIGhleCwgcmVxLT51cmwpOworCX0gZWxzZSBpZiAoIW9pZGVxKCZvYmpfcmVxLT5vaWQsICZyZXEtPnJlYWxfb2lkKSkgeworCQlyZXQgPSBlcnJvcigiRmlsZSAlcyBoYXMgYmFkIGhhc2giLCBoZXgpOworCX0gZWxzZSBpZiAocmVxLT5yZW5hbWUgPCAwKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWxvb3NlX29iamVjdF9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmYnVmLCAmcmVxLT5vaWQpOworCQlyZXQgPSBlcnJvcigidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXMiLCBidWYuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHJlcSk7CisJcmVsZWFzZV9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZldGNoKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgdW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisJc3RydWN0IGFsdF9iYXNlICphbHRiYXNlID0gZGF0YS0+YWx0OworCisJaWYgKCFmZXRjaF9vYmplY3Qod2Fsa2VyLCBoYXNoKSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGFsdGJhc2UpIHsKKwkJaWYgKCFodHRwX2ZldGNoX3BhY2sod2Fsa2VyLCBhbHRiYXNlLCBoYXNoKSkKKwkJCXJldHVybiAwOworCQlmZXRjaF9hbHRlcm5hdGVzKHdhbGtlciwgZGF0YS0+YWx0LT5iYXNlKTsKKwkJYWx0YmFzZSA9IGFsdGJhc2UtPm5leHQ7CisJfQorCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGZpbmQgJXMgdW5kZXIgJXMiLCBoYXNoX3RvX2hleChoYXNoKSwKKwkJICAgICBkYXRhLT5hbHQtPmJhc2UpOworfQorCitzdGF0aWMgaW50IGZldGNoX3JlZihzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisJcmV0dXJuIGh0dHBfZmV0Y2hfcmVmKGRhdGEtPmFsdC0+YmFzZSwgcmVmKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCit7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOworCXN0cnVjdCBhbHRfYmFzZSAqYWx0LCAqYWx0X25leHQ7CisKKwlpZiAoZGF0YSkgeworCQlhbHQgPSBkYXRhLT5hbHQ7CisJCXdoaWxlIChhbHQpIHsKKwkJCWFsdF9uZXh0ID0gYWx0LT5uZXh0OworCisJCQlmcmVlKGFsdC0+YmFzZSk7CisJCQlmcmVlKGFsdCk7CisKKwkJCWFsdCA9IGFsdF9uZXh0OworCQl9CisJCWZyZWUoZGF0YSk7CisJCXdhbGtlci0+ZGF0YSA9IE5VTEw7CisJfQorfQorCitzdHJ1Y3Qgd2Fsa2VyICpnZXRfaHR0cF93YWxrZXIoY29uc3QgY2hhciAqdXJsKQoreworCWNoYXIgKnM7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHdhbGtlcl9kYXRhKSk7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHdhbGtlcikpOworCisJZGF0YS0+YWx0ID0geG1hbGxvYyhzaXplb2YoKmRhdGEtPmFsdCkpOworCWRhdGEtPmFsdC0+YmFzZSA9IHhzdHJkdXAodXJsKTsKKwlmb3IgKHMgPSBkYXRhLT5hbHQtPmJhc2UgKyBzdHJsZW4oZGF0YS0+YWx0LT5iYXNlKSAtIDE7ICpzID09ICcvJzsgLS1zKQorCQkqcyA9IDA7CisKKwlkYXRhLT5hbHQtPmdvdF9pbmRpY2VzID0gMDsKKwlkYXRhLT5hbHQtPnBhY2tzID0gTlVMTDsKKwlkYXRhLT5hbHQtPm5leHQgPSBOVUxMOworCWRhdGEtPmdvdF9hbHRlcm5hdGVzID0gLTE7CisKKwl3YWxrZXItPmNvcnJ1cHRfb2JqZWN0X2ZvdW5kID0gMDsKKwl3YWxrZXItPmZldGNoID0gZmV0Y2g7CisJd2Fsa2VyLT5mZXRjaF9yZWYgPSBmZXRjaF9yZWY7CisJd2Fsa2VyLT5wcmVmZXRjaCA9IHByZWZldGNoOworCXdhbGtlci0+Y2xlYW51cCA9IGNsZWFudXA7CisJd2Fsa2VyLT5kYXRhID0gZGF0YTsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJYWRkX2ZpbGxfZnVuY3Rpb24od2Fsa2VyLCAoaW50ICgqKSh2b2lkICopKSBmaWxsX2FjdGl2ZV9zbG90KTsKKyNlbmRpZgorCisJcmV0dXJuIHdhbGtlcjsKK30KZGlmZiAtLWdpdCBhL2h0dHAuYyBiL2h0dHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGEwZTUwCi0tLSAvZGV2L251bGwKKysrIGIvaHR0cC5jCkBAIC0wLDAgKzEsMjU0MiBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImh0dHAuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgInVybG1hdGNoLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfY3VybCA9IFRSQUNFX0tFWV9JTklUKENVUkwpOworc3RhdGljIGludCB0cmFjZV9jdXJsX2RhdGEgPSAxOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBjb29raWVzX3RvX3JlZGFjdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBhMDgKK2xvbmcgaW50IGdpdF9jdXJsX2lwcmVzb2x2ZSA9IENVUkxfSVBSRVNPTFZFX1dIQVRFVkVSOworI2Vsc2UKK2xvbmcgaW50IGdpdF9jdXJsX2lwcmVzb2x2ZTsKKyNlbmRpZgoraW50IGFjdGl2ZV9yZXF1ZXN0czsKK2ludCBodHRwX2lzX3ZlcmJvc2U7Citzc2l6ZV90IGh0dHBfcG9zdF9idWZmZXIgPSAxNiAqIExBUkdFX1BBQ0tFVF9NQVg7CisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYTA2CisjZGVmaW5lIExJQkNVUkxfQ0FOX0hBTkRMRV9BVVRIX0FOWQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbWluX2N1cmxfc2Vzc2lvbnMgPSAxOworc3RhdGljIGludCBjdXJsX3Nlc3Npb25fY291bnQ7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3N0YXRpYyBpbnQgbWF4X3JlcXVlc3RzID0gLTE7CitzdGF0aWMgQ1VSTE0gKmN1cmxtOworI2VuZGlmCisjaWZuZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKK3N0YXRpYyBDVVJMICpjdXJsX2RlZmF1bHQ7CisjZW5kaWYKKworI2RlZmluZSBQUkVWX0JVRl9TSVpFIDQwOTYKKworY2hhciBjdXJsX2Vycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CisKK3N0YXRpYyBpbnQgY3VybF9zc2xfdmVyaWZ5ID0gLTE7CitzdGF0aWMgaW50IGN1cmxfc3NsX3RyeTsKK3N0YXRpYyBjb25zdCBjaGFyICpjdXJsX2h0dHBfdmVyc2lvbiA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NlcnQ7CitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NpcGhlcmxpc3Q7CitzdGF0aWMgY29uc3QgY2hhciAqc3NsX3ZlcnNpb247CitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWxvbmcgc3NsX3ZlcnNpb247Cit9IHNzbHZlcnNpb25zW10gPSB7CisJeyAic3NsdjIiLCBDVVJMX1NTTFZFUlNJT05fU1NMdjIgfSwKKwl7ICJzc2x2MyIsIENVUkxfU1NMVkVSU0lPTl9TU0x2MyB9LAorCXsgInRsc3YxIiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxIH0sCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MjIwMAorCXsgInRsc3YxLjAiLCBDVVJMX1NTTFZFUlNJT05fVExTdjFfMCB9LAorCXsgInRsc3YxLjEiLCBDVVJMX1NTTFZFUlNJT05fVExTdjFfMSB9LAorCXsgInRsc3YxLjIiLCBDVVJMX1NTTFZFUlNJT05fVExTdjFfMiB9LAorI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MzQwMAorCXsgInRsc3YxLjMiLCBDVVJMX1NTTFZFUlNJT05fVExTdjFfMyB9LAorI2VuZGlmCit9OworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDMKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfa2V5OworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jYXBhdGg7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxMzA0CitzdGF0aWMgY29uc3QgY2hhciAqY3VybF9ub19wcm94eTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzJjMDAKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfcGlubmVka2V5OworI2VuZGlmCitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NhaW5mbzsKK3N0YXRpYyBsb25nIGN1cmxfbG93X3NwZWVkX2xpbWl0ID0gLTE7CitzdGF0aWMgbG9uZyBjdXJsX2xvd19zcGVlZF90aW1lID0gLTE7CitzdGF0aWMgaW50IGN1cmxfZnRwX25vX2Vwc3Y7CitzdGF0aWMgY29uc3QgY2hhciAqY3VybF9odHRwX3Byb3h5Oworc3RhdGljIGNvbnN0IGNoYXIgKmh0dHBfcHJveHlfYXV0aG1ldGhvZDsKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJbG9uZyBjdXJsYXV0aF9wYXJhbTsKK30gcHJveHlfYXV0aG1ldGhvZHNbXSA9IHsKKwl7ICJiYXNpYyIsIENVUkxBVVRIX0JBU0lDIH0sCisJeyAiZGlnZXN0IiwgQ1VSTEFVVEhfRElHRVNUIH0sCisJeyAibmVnb3RpYXRlIiwgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFIH0sCisJeyAibnRsbSIsIENVUkxBVVRIX05UTE0gfSwKKyNpZmRlZiBMSUJDVVJMX0NBTl9IQU5ETEVfQVVUSF9BTlkKKwl7ICJhbnlhdXRoIiwgQ1VSTEFVVEhfQU5ZIH0sCisjZW5kaWYKKwkvKgorCSAqIENVUkxBVVRIX0RJR0VTVF9JRSBoYXMgbm8gY29ycmVzcG9uZGluZyBjb21tYW5kLWxpbmUgb3B0aW9uIGluCisJICogY3VybCgxKSBhbmQgaXMgbm90IGluY2x1ZGVkIGluIENVUkxBVVRIX0FOWSwgc28gd2UgbGVhdmUgaXQgb3V0CisJICogaGVyZSwgdG9vCisJICovCit9OworI2lmZGVmIENVUkxHU1NBUElfREVMRUdBVElPTl9GTEFHCitzdGF0aWMgY29uc3QgY2hhciAqY3VybF9kZWxlZzsKK3N0YXRpYyBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJbG9uZyBjdXJsX2RlbGVnX3BhcmFtOworfSBjdXJsX2RlbGVnX2xldmVsc1tdID0geworCXsgIm5vbmUiLCBDVVJMR1NTQVBJX0RFTEVHQVRJT05fTk9ORSB9LAorCXsgInBvbGljeSIsIENVUkxHU1NBUElfREVMRUdBVElPTl9QT0xJQ1lfRkxBRyB9LAorCXsgImFsd2F5cyIsIENVUkxHU1NBUElfREVMRUdBVElPTl9GTEFHIH0sCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbCBwcm94eV9hdXRoID0gQ1JFREVOVElBTF9JTklUOworc3RhdGljIGNvbnN0IGNoYXIgKmN1cmxfcHJveHl1c2VycHdkOworc3RhdGljIGNvbnN0IGNoYXIgKmN1cmxfY29va2llX2ZpbGU7CitzdGF0aWMgaW50IGN1cmxfc2F2ZV9jb29raWVzOworc3RydWN0IGNyZWRlbnRpYWwgaHR0cF9hdXRoID0gQ1JFREVOVElBTF9JTklUOworc3RhdGljIGludCBodHRwX3Byb2FjdGl2ZV9hdXRoOworc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJfYWdlbnQ7CitzdGF0aWMgaW50IGN1cmxfZW1wdHlfYXV0aCA9IC0xOworCitlbnVtIGh0dHBfZm9sbG93X2NvbmZpZyBodHRwX2ZvbGxvd19jb25maWcgPSBIVFRQX0ZPTExPV19JTklUSUFMOworCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTcwMAorLyogVXNlIENVUkxPUFRfS0VZUEFTU1dEIGFzIGlzICovCisjZWxpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisjZGVmaW5lIENVUkxPUFRfS0VZUEFTU1dEIENVUkxPUFRfU1NMS0VZUEFTU1dECisjZWxzZQorI2RlZmluZSBDVVJMT1BUX0tFWVBBU1NXRCBDVVJMT1BUX1NTTENFUlRQQVNTV0QKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWwgY2VydF9hdXRoID0gQ1JFREVOVElBTF9JTklUOworc3RhdGljIGludCBzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZDsKKyNpZmRlZiBMSUJDVVJMX0NBTl9IQU5ETEVfQVVUSF9BTlkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGh0dHBfYXV0aF9tZXRob2RzID0gQ1VSTEFVVEhfQU5ZOworc3RhdGljIGludCBodHRwX2F1dGhfbWV0aG9kc19yZXN0cmljdGVkOworLyogTW9kZXMgZm9yIHdoaWNoIGVtcHR5X2F1dGggY2Fubm90IGFjdHVhbGx5IGhlbHAgdXMuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbXB0eV9hdXRoX3VzZWxlc3MgPQorCUNVUkxBVVRIX0JBU0lDCisjaWZkZWYgQ1VSTEFVVEhfRElHRVNUX0lFCisJfCBDVVJMQVVUSF9ESUdFU1RfSUUKKyNlbmRpZgorCXwgQ1VSTEFVVEhfRElHRVNUOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqcHJhZ21hX2hlYWRlcjsKK3N0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfaHR0cF9oZWFkZXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKK3N0YXRpYyBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqYWN0aXZlX3F1ZXVlX2hlYWQ7CisKK3N0YXRpYyBjaGFyICpjYWNoZWRfYWNjZXB0X2xhbmd1YWdlOworCitzdGF0aWMgY2hhciAqaHR0cF9zc2xfYmFja2VuZDsKKworc3RhdGljIGludCBodHRwX3NjaGFubmVsX2NoZWNrX3Jldm9rZSA9IDE7CisvKgorICogV2l0aCB0aGUgYmFja2VuZCBiZWluZyBzZXQgdG8gYHNjaGFubmVsYCwgc2V0dGluZyBzc2xDQWluZm8gd291bGQgb3ZlcnJpZGUKKyAqIHRoZSBDZXJ0aWZpY2F0ZSBTdG9yZSBpbiBjVVJMIHY3LjYwLjAgYW5kIGxhdGVyLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50CisgKiBieSBkZWZhdWx0LgorICovCitzdGF0aWMgaW50IGh0dHBfc2NoYW5uZWxfdXNlX3NzbF9jYWluZm87CisKK3NpemVfdCBmcmVhZF9idWZmZXIoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQoreworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IGJ1ZmZlcl87CisKKwlpZiAoc2l6ZSA+IGJ1ZmZlci0+YnVmLmxlbiAtIGJ1ZmZlci0+cG9zbikKKwkJc2l6ZSA9IGJ1ZmZlci0+YnVmLmxlbiAtIGJ1ZmZlci0+cG9zbjsKKwltZW1jcHkocHRyLCBidWZmZXItPmJ1Zi5idWYgKyBidWZmZXItPnBvc24sIHNpemUpOworCWJ1ZmZlci0+cG9zbiArPSBzaXplOworCisJcmV0dXJuIHNpemUgLyBlbHRzaXplOworfQorCisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKK2N1cmxpb2VyciBpb2N0bF9idWZmZXIoQ1VSTCAqaGFuZGxlLCBpbnQgY21kLCB2b2lkICpjbGllbnRwKQoreworCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IGNsaWVudHA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ1VSTElPQ01EX05PUDoKKwkJcmV0dXJuIENVUkxJT0VfT0s7CisKKwljYXNlIENVUkxJT0NNRF9SRVNUQVJUUkVBRDoKKwkJYnVmZmVyLT5wb3NuID0gMDsKKwkJcmV0dXJuIENVUkxJT0VfT0s7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gQ1VSTElPRV9VTktOT1dOQ01EOworCX0KK30KKyNlbmRpZgorCitzaXplX3QgZndyaXRlX2J1ZmZlcihjaGFyICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmJ1ZmZlcl8pCit7CisJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CisJc3RydWN0IHN0cmJ1ZiAqYnVmZmVyID0gYnVmZmVyXzsKKworCXN0cmJ1Zl9hZGQoYnVmZmVyLCBwdHIsIHNpemUpOworCXJldHVybiBubWVtYjsKK30KKworc2l6ZV90IGZ3cml0ZV9udWxsKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKQoreworCXJldHVybiBubWVtYjsKK30KKworc3RhdGljIHZvaWQgY2xvc2Vkb3duX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworCWFjdGl2ZV9yZXF1ZXN0cy0tOworCXNsb3QtPmluX3VzZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKwljbG9zZWRvd25fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJY3VybF9lYXN5X2dldGluZm8oc2xvdC0+Y3VybCwgQ1VSTElORk9fSFRUUF9DT0RFLCAmc2xvdC0+aHR0cF9jb2RlKTsKKworCWlmIChzbG90LT5maW5pc2hlZCAhPSBOVUxMKQorCQkoKnNsb3QtPmZpbmlzaGVkKSA9IDE7CisKKwkvKiBTdG9yZSBzbG90IHJlc3VsdHMgc28gdGhleSBjYW4gYmUgcmVhZCBhZnRlciB0aGUgc2xvdCBpcyByZXVzZWQgKi8KKwlpZiAoc2xvdC0+cmVzdWx0cyAhPSBOVUxMKSB7CisJCXNsb3QtPnJlc3VsdHMtPmN1cmxfcmVzdWx0ID0gc2xvdC0+Y3VybF9yZXN1bHQ7CisJCXNsb3QtPnJlc3VsdHMtPmh0dHBfY29kZSA9IHNsb3QtPmh0dHBfY29kZTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYTA4CisJCWN1cmxfZWFzeV9nZXRpbmZvKHNsb3QtPmN1cmwsIENVUkxJTkZPX0hUVFBBVVRIX0FWQUlMLAorCQkJCSAgJnNsb3QtPnJlc3VsdHMtPmF1dGhfYXZhaWwpOworI2Vsc2UKKwkJc2xvdC0+cmVzdWx0cy0+YXV0aF9hdmFpbCA9IDA7CisjZW5kaWYKKworCQljdXJsX2Vhc3lfZ2V0aW5mbyhzbG90LT5jdXJsLCBDVVJMSU5GT19IVFRQX0NPTk5FQ1RDT0RFLAorCQkJJnNsb3QtPnJlc3VsdHMtPmh0dHBfY29ubmVjdGNvZGUpOworCX0KKworCS8qIFJ1biBjYWxsYmFjayBpZiBhcHByb3ByaWF0ZSAqLworCWlmIChzbG90LT5jYWxsYmFja19mdW5jICE9IE5VTEwpCisJCXNsb3QtPmNhbGxiYWNrX2Z1bmMoc2xvdC0+Y2FsbGJhY2tfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHhtdWx0aV9yZW1vdmVfaGFuZGxlKHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxtLCBzbG90LT5jdXJsKTsKKyNlbmRpZgorfQorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY3VybF9tZXNzYWdlcyh2b2lkKQoreworCWludCBudW1fbWVzc2FnZXM7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJQ1VSTE1zZyAqY3VybF9tZXNzYWdlID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybG0sICZudW1fbWVzc2FnZXMpOworCisJd2hpbGUgKGN1cmxfbWVzc2FnZSAhPSBOVUxMKSB7CisJCWlmIChjdXJsX21lc3NhZ2UtPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKwkJCWludCBjdXJsX3Jlc3VsdCA9IGN1cmxfbWVzc2FnZS0+ZGF0YS5yZXN1bHQ7CisJCQlzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJCQl3aGlsZSAoc2xvdCAhPSBOVUxMICYmCisJCQkgICAgICAgc2xvdC0+Y3VybCAhPSBjdXJsX21lc3NhZ2UtPmVhc3lfaGFuZGxlKQorCQkJCXNsb3QgPSBzbG90LT5uZXh0OworCQkJaWYgKHNsb3QgIT0gTlVMTCkgeworCQkJCXhtdWx0aV9yZW1vdmVfaGFuZGxlKHNsb3QpOworCQkJCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9yZXN1bHQ7CisJCQkJZmluaXNoX2FjdGl2ZV9zbG90KHNsb3QpOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlJlY2VpdmVkIERPTkUgbWVzc2FnZSBmb3IgdW5rbm93biByZXF1ZXN0IVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gQ1VSTCBtZXNzYWdlIHJlY2VpdmVkOiAlZFxuIiwKKwkJCQkoaW50KWN1cmxfbWVzc2FnZS0+bXNnKTsKKwkJfQorCQljdXJsX21lc3NhZ2UgPSBjdXJsX211bHRpX2luZm9fcmVhZChjdXJsbSwgJm51bV9tZXNzYWdlcyk7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaHR0cF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKCJodHRwLnZlcnNpb24iLCB2YXIpKSB7CisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY3VybF9odHRwX3ZlcnNpb24sIHZhciwgdmFsdWUpOworCX0KKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2x2ZXJpZnkiLCB2YXIpKSB7CisJCWN1cmxfc3NsX3ZlcmlmeSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnNzbGNpcGhlcmxpc3QiLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF9jaXBoZXJsaXN0LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2x2ZXJzaW9uIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfdmVyc2lvbiwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydCIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZzc2xfY2VydCwgdmFyLCB2YWx1ZSk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMworCWlmICghc3RyY21wKCJodHRwLnNzbGtleSIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZzc2xfa2V5LCB2YXIsIHZhbHVlKTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYXBhdGgiLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmc3NsX2NhcGF0aCwgdmFyLCB2YWx1ZSk7CisjZW5kaWYKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYWluZm8iLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmc3NsX2NhaW5mbywgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydHBhc3N3b3JkcHJvdGVjdGVkIiwgdmFyKSkgeworCQlzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnNzbHRyeSIsIHZhcikpIHsKKwkJY3VybF9zc2xfdHJ5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsYmFja2VuZCIsIHZhcikpIHsKKwkJZnJlZShodHRwX3NzbF9iYWNrZW5kKTsKKwkJaHR0cF9zc2xfYmFja2VuZCA9IHhzdHJkdXBfb3JfbnVsbCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLnNjaGFubmVsY2hlY2tyZXZva2UiLCB2YXIpKSB7CisJCWh0dHBfc2NoYW5uZWxfY2hlY2tfcmV2b2tlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5zY2hhbm5lbHVzZXNzbGNhaW5mbyIsIHZhcikpIHsKKwkJaHR0cF9zY2hhbm5lbF91c2Vfc3NsX2NhaW5mbyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoImh0dHAubWluc2Vzc2lvbnMiLCB2YXIpKSB7CisJCW1pbl9jdXJsX3Nlc3Npb25zID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisjaWZuZGVmIFVTRV9DVVJMX01VTFRJCisJCWlmIChtaW5fY3VybF9zZXNzaW9ucyA+IDEpCisJCQltaW5fY3VybF9zZXNzaW9ucyA9IDE7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaWYgKCFzdHJjbXAoImh0dHAubWF4cmVxdWVzdHMiLCB2YXIpKSB7CisJCW1heF9yZXF1ZXN0cyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlpZiAoIXN0cmNtcCgiaHR0cC5sb3dzcGVlZGxpbWl0IiwgdmFyKSkgeworCQljdXJsX2xvd19zcGVlZF9saW1pdCA9IChsb25nKWdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAubG93c3BlZWR0aW1lIiwgdmFyKSkgeworCQljdXJsX2xvd19zcGVlZF90aW1lID0gKGxvbmcpZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLm5vZXBzdiIsIHZhcikpIHsKKwkJY3VybF9mdHBfbm9fZXBzdiA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnByb3h5IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjdXJsX2h0dHBfcHJveHksIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImh0dHAucHJveHlhdXRobWV0aG9kIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZodHRwX3Byb3h5X2F1dGhtZXRob2QsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImh0dHAuY29va2llZmlsZSIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZjdXJsX2Nvb2tpZV9maWxlLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCgiaHR0cC5zYXZlY29va2llcyIsIHZhcikpIHsKKwkJY3VybF9zYXZlX2Nvb2tpZXMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLnBvc3RidWZmZXIiLCB2YXIpKSB7CisJCWh0dHBfcG9zdF9idWZmZXIgPSBnaXRfY29uZmlnX3NzaXplX3QodmFyLCB2YWx1ZSk7CisJCWlmIChodHRwX3Bvc3RfYnVmZmVyIDwgMCkKKwkJCXdhcm5pbmcoXygibmVnYXRpdmUgdmFsdWUgZm9yIGh0dHAucG9zdGJ1ZmZlcjsgZGVmYXVsdGluZyB0byAlZCIpLCBMQVJHRV9QQUNLRVRfTUFYKTsKKwkJaWYgKGh0dHBfcG9zdF9idWZmZXIgPCBMQVJHRV9QQUNLRVRfTUFYKQorCQkJaHR0cF9wb3N0X2J1ZmZlciA9IExBUkdFX1BBQ0tFVF9NQVg7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLnVzZXJhZ2VudCIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmdXNlcl9hZ2VudCwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5lbXB0eWF1dGgiLCB2YXIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY21wKCJhdXRvIiwgdmFsdWUpKQorCQkJY3VybF9lbXB0eV9hdXRoID0gLTE7CisJCWVsc2UKKwkJCWN1cmxfZW1wdHlfYXV0aCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoImh0dHAuZGVsZWdhdGlvbiIsIHZhcikpIHsKKyNpZmRlZiBDVVJMR1NTQVBJX0RFTEVHQVRJT05fRkxBRworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmN1cmxfZGVsZWcsIHZhciwgdmFsdWUpOworI2Vsc2UKKwkJd2FybmluZyhfKCJEZWxlZ2F0aW9uIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjIyLjAiKSk7CisJCXJldHVybiAwOworI2VuZGlmCisJfQorCisJaWYgKCFzdHJjbXAoImh0dHAucGlubmVkcHVia2V5IiwgdmFyKSkgeworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzJjMDAKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJnNzbF9waW5uZWRrZXksIHZhciwgdmFsdWUpOworI2Vsc2UKKwkJd2FybmluZyhfKCJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiKSk7CisJCXJldHVybiAwOworI2VuZGlmCisJfQorCisJaWYgKCFzdHJjbXAoImh0dHAuZXh0cmFoZWFkZXIiLCB2YXIpKSB7CisJCWlmICghdmFsdWUpIHsKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQl9IGVsc2UgaWYgKCEqdmFsdWUpIHsKKwkJCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9odHRwX2hlYWRlcnMsIDApOworCQl9IGVsc2UgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV9odHRwX2hlYWRlcnMsIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5mb2xsb3dyZWRpcmVjdHMiLCB2YXIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY21wKHZhbHVlLCAiaW5pdGlhbCIpKQorCQkJaHR0cF9mb2xsb3dfY29uZmlnID0gSFRUUF9GT0xMT1dfSU5JVElBTDsKKwkJZWxzZSBpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJaHR0cF9mb2xsb3dfY29uZmlnID0gSFRUUF9GT0xMT1dfQUxXQVlTOworCQllbHNlCisJCQlodHRwX2ZvbGxvd19jb25maWcgPSBIVFRQX0ZPTExPV19OT05FOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGYWxsIGJhY2sgb24gdGhlIGRlZmF1bHQgb25lcyAqLworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IGN1cmxfZW1wdHlfYXV0aF9lbmFibGVkKHZvaWQpCit7CisJaWYgKGN1cmxfZW1wdHlfYXV0aCA+PSAwKQorCQlyZXR1cm4gY3VybF9lbXB0eV9hdXRoOworCisjaWZuZGVmIExJQkNVUkxfQ0FOX0hBTkRMRV9BVVRIX0FOWQorCS8qCisJICogT3VyIGxpYmN1cmwgaXMgdG9vIG9sZCB0byBkbyBBVVRIX0FOWSBpbiB0aGUgZmlyc3QgcGxhY2U7CisJICoganVzdCBkZWZhdWx0IHRvIHR1cm5pbmcgdGhlIGZlYXR1cmUgb2ZmLgorCSAqLworI2Vsc2UKKwkvKgorCSAqIEluIHRoZSBhdXRvbWF0aWMgY2FzZSwga2ljayBpbiB0aGUgZW1wdHktYXV0aAorCSAqIGhhY2sgYXMgbG9uZyBhcyB3ZSB3b3VsZCBwb3RlbnRpYWxseSB0cnkgc29tZQorCSAqIG1ldGhvZCBtb3JlIGV4b3RpYyB0aGFuICJCYXNpYyIgb3IgIkRpZ2VzdCIuCisJICoKKwkgKiBCdXQgb25seSBkbyB0aGlzIHdoZW4gdGhpcyBpcyBvdXIgc2Vjb25kIG9yCisJICogc3Vic2VxdWVudCByZXF1ZXN0LCBhcyBieSB0aGVuIHdlIGtub3cgd2hhdAorCSAqIG1ldGhvZHMgYXJlIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoaHR0cF9hdXRoX21ldGhvZHNfcmVzdHJpY3RlZCAmJgorCSAgICAoaHR0cF9hdXRoX21ldGhvZHMgJiB+ZW1wdHlfYXV0aF91c2VsZXNzKSkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9jdXJsX2h0dHBfYXV0aChDVVJMICpyZXN1bHQpCit7CisJaWYgKCFodHRwX2F1dGgudXNlcm5hbWUgfHwgISpodHRwX2F1dGgudXNlcm5hbWUpIHsKKwkJaWYgKGN1cmxfZW1wdHlfYXV0aF9lbmFibGVkKCkpCisJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9VU0VSUFdELCAiOiIpOworCQlyZXR1cm47CisJfQorCisJY3JlZGVudGlhbF9maWxsKCZodHRwX2F1dGgpOworCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTMwMQorCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1VTRVJOQU1FLCBodHRwX2F1dGgudXNlcm5hbWUpOworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BBU1NXT1JELCBodHRwX2F1dGgucGFzc3dvcmQpOworI2Vsc2UKKwl7CisJCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHVwID0gU1RSQlVGX0lOSVQ7CisJCS8qCisJCSAqIE5vdGUgdGhhdCB3ZSBhc3N1bWUgd2Ugb25seSBldmVyIGhhdmUgYSBzaW5nbGUgc2V0IG9mCisJCSAqIGNyZWRlbnRpYWxzIGluIGEgZ2l2ZW4gcHJvZ3JhbSBydW4sIHNvIHdlIGRvIG5vdCBoYXZlCisJCSAqIHRvIHdvcnJ5IGFib3V0IHVwZGF0aW5nIHRoaXMgYnVmZmVyLCBvbmx5IHNldHRpbmcgaXRzCisJCSAqIGluaXRpYWwgdmFsdWUuCisJCSAqLworCQlpZiAoIXVwLmxlbikKKwkJCXN0cmJ1Zl9hZGRmKCZ1cCwgIiVzOiVzIiwKKwkJCQlodHRwX2F1dGgudXNlcm5hbWUsIGh0dHBfYXV0aC5wYXNzd29yZCk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1VTRVJQV0QsIHVwLmJ1Zik7CisJfQorI2VuZGlmCit9CisKKy8qICp2YXIgbXVzdCBiZSBmcmVlLWFibGUgKi8KK3N0YXRpYyB2b2lkIHZhcl9vdmVycmlkZShjb25zdCBjaGFyICoqdmFyLCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAodmFsdWUpIHsKKwkJZnJlZSgodm9pZCAqKSp2YXIpOworCQkqdmFyID0geHN0cmR1cCh2YWx1ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfcHJveHlhdXRoX25hbWVfcGFzc3dvcmQoQ1VSTCAqcmVzdWx0KQoreworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzEzMDEKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFlVU0VSTkFNRSwKKwkJCXByb3h5X2F1dGgudXNlcm5hbWUpOworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWVBBU1NXT1JELAorCQkJcHJveHlfYXV0aC5wYXNzd29yZCk7CisjZWxzZQorCQlzdHJ1Y3Qgc3RyYnVmIHMgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmcywgcHJveHlfYXV0aC51c2VybmFtZSwKKwkJCQkJaXNfcmZjMzk4Nl91bnJlc2VydmVkKTsKKwkJc3RyYnVmX2FkZGNoKCZzLCAnOicpOworCQlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmcywgcHJveHlfYXV0aC5wYXNzd29yZCwKKwkJCQkJaXNfcmZjMzk4Nl91bnJlc2VydmVkKTsKKwkJY3VybF9wcm94eXVzZXJwd2QgPSBzdHJidWZfZGV0YWNoKCZzLCBOVUxMKTsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFlVU0VSUFdELCBjdXJsX3Byb3h5dXNlcnB3ZCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgaW5pdF9jdXJsX3Byb3h5X2F1dGgoQ1VSTCAqcmVzdWx0KQoreworCWlmIChwcm94eV9hdXRoLnVzZXJuYW1lKSB7CisJCWlmICghcHJveHlfYXV0aC5wYXNzd29yZCkKKwkJCWNyZWRlbnRpYWxfZmlsbCgmcHJveHlfYXV0aCk7CisJCXNldF9wcm94eWF1dGhfbmFtZV9wYXNzd29yZChyZXN1bHQpOworCX0KKworCXZhcl9vdmVycmlkZSgmaHR0cF9wcm94eV9hdXRobWV0aG9kLCBnZXRlbnYoIkdJVF9IVFRQX1BST1hZX0FVVEhNRVRIT0QiKSk7CisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYTA3IC8qIENVUkxPUFRfUFJPWFlBVVRIIGFuZCBDVVJMQVVUSF9BTlkgKi8KKwlpZiAoaHR0cF9wcm94eV9hdXRobWV0aG9kKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm94eV9hdXRobWV0aG9kcyk7IGkrKykgeworCQkJaWYgKCFzdHJjbXAoaHR0cF9wcm94eV9hdXRobWV0aG9kLCBwcm94eV9hdXRobWV0aG9kc1tpXS5uYW1lKSkgeworCQkJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1hZQVVUSCwKKwkJCQkJCXByb3h5X2F1dGhtZXRob2RzW2ldLmN1cmxhdXRoX3BhcmFtKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHByb3h5X2F1dGhtZXRob2RzKSkgeworCQkJd2FybmluZygidW5zdXBwb3J0ZWQgcHJveHkgYXV0aGVudGljYXRpb24gbWV0aG9kICVzOiB1c2luZyBhbnlhdXRoIiwKKwkJCQkJaHR0cF9wcm94eV9hdXRobWV0aG9kKTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1hZQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKwkJfQorCX0KKwllbHNlCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1hZQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGhhc19jZXJ0X3Bhc3N3b3JkKHZvaWQpCit7CisJaWYgKHNzbF9jZXJ0ID09IE5VTEwgfHwgc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgIT0gMSkKKwkJcmV0dXJuIDA7CisJaWYgKCFjZXJ0X2F1dGgucGFzc3dvcmQpIHsKKwkJY2VydF9hdXRoLnByb3RvY29sID0geHN0cmR1cCgiY2VydCIpOworCQljZXJ0X2F1dGgudXNlcm5hbWUgPSB4c3RyZHVwKCIiKTsKKwkJY2VydF9hdXRoLnBhdGggPSB4c3RyZHVwKHNzbF9jZXJ0KTsKKwkJY3JlZGVudGlhbF9maWxsKCZjZXJ0X2F1dGgpOworCX0KKwlyZXR1cm4gMTsKK30KKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzE5MDAKK3N0YXRpYyB2b2lkIHNldF9jdXJsX2tlZXBhbGl2ZShDVVJMICpjKQoreworCWN1cmxfZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFLCAxKTsKK30KKworI2VsaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTAwMAorc3RhdGljIGludCBzb2Nrb3B0X2NhbGxiYWNrKHZvaWQgKmNsaWVudCwgY3VybF9zb2NrZXRfdCBmZCwgY3VybHNvY2t0eXBlIHR5cGUpCit7CisJaW50IGthID0gMTsKKwlpbnQgcmM7CisJc29ja2xlbl90IGxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGthKTsKKworCWlmICh0eXBlICE9IENVUkxTT0NLVFlQRV9JUENYTikKKwkJcmV0dXJuIDA7CisKKwlyYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwgKHZvaWQgKikma2EsIGxlbik7CisJaWYgKHJjIDwgMCkKKwkJd2FybmluZ19lcnJubygidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0Iik7CisKKwlyZXR1cm4gMDsgLyogQ1VSTF9TT0NLT1BUX09LIG9ubHkgZXhpc3RzIHNpbmNlIGN1cmwgNy4yMS41ICovCit9CisKK3N0YXRpYyB2b2lkIHNldF9jdXJsX2tlZXBhbGl2ZShDVVJMICpjKQoreworCWN1cmxfZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9TT0NLT1BURlVOQ1RJT04sIHNvY2tvcHRfY2FsbGJhY2spOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgc2V0X2N1cmxfa2VlcGFsaXZlKENVUkwgKmMpCit7CisJLyogbm90IHN1cHBvcnRlZCBvbiBvbGRlciBjdXJsIHZlcnNpb25zICovCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcmVkYWN0X3NlbnNpdGl2ZV9oZWFkZXIoc3RydWN0IHN0cmJ1ZiAqaGVhZGVyKQoreworCWNvbnN0IGNoYXIgKnNlbnNpdGl2ZV9oZWFkZXI7CisKKwlpZiAoc2tpcF9wcmVmaXgoaGVhZGVyLT5idWYsICJBdXRob3JpemF0aW9uOiIsICZzZW5zaXRpdmVfaGVhZGVyKSB8fAorCSAgICBza2lwX3ByZWZpeChoZWFkZXItPmJ1ZiwgIlByb3h5LUF1dGhvcml6YXRpb246IiwgJnNlbnNpdGl2ZV9oZWFkZXIpKSB7CisJCS8qIFRoZSBmaXJzdCB0b2tlbiBpcyB0aGUgdHlwZSwgd2hpY2ggaXMgT0sgdG8gbG9nICovCisJCXdoaWxlIChpc3NwYWNlKCpzZW5zaXRpdmVfaGVhZGVyKSkKKwkJCXNlbnNpdGl2ZV9oZWFkZXIrKzsKKwkJd2hpbGUgKCpzZW5zaXRpdmVfaGVhZGVyICYmICFpc3NwYWNlKCpzZW5zaXRpdmVfaGVhZGVyKSkKKwkJCXNlbnNpdGl2ZV9oZWFkZXIrKzsKKwkJLyogRXZlcnl0aGluZyBlbHNlIGlzIG9wYXF1ZSBhbmQgcG9zc2libHkgc2Vuc2l0aXZlICovCisJCXN0cmJ1Zl9zZXRsZW4oaGVhZGVyLCAgc2Vuc2l0aXZlX2hlYWRlciAtIGhlYWRlci0+YnVmKTsKKwkJc3RyYnVmX2FkZHN0cihoZWFkZXIsICIgPHJlZGFjdGVkPiIpOworCX0gZWxzZSBpZiAoY29va2llc190b19yZWRhY3QubnIgJiYKKwkJICAgc2tpcF9wcmVmaXgoaGVhZGVyLT5idWYsICJDb29raWU6IiwgJnNlbnNpdGl2ZV9oZWFkZXIpKSB7CisJCXN0cnVjdCBzdHJidWYgcmVkYWN0ZWRfaGVhZGVyID0gU1RSQlVGX0lOSVQ7CisJCWNoYXIgKmNvb2tpZTsKKworCQl3aGlsZSAoaXNzcGFjZSgqc2Vuc2l0aXZlX2hlYWRlcikpCisJCQlzZW5zaXRpdmVfaGVhZGVyKys7CisKKwkJLyoKKwkJICogVGhlIGNvbnRlbnRzIG9mIGhlYWRlciBzdGFydGluZyBmcm9tIHNlbnNpdGl2ZV9oZWFkZXIgd2lsbAorCQkgKiBzdWJzZXF1ZW50bHkgYmUgb3ZlcnJpZGRlbiwgc28gaXQgaXMgZmluZSB0byBtdXRhdGUgdGhpcworCQkgKiBzdHJpbmcgKGhlbmNlIHRoZSBhc3NpZ25tZW50IHRvICJjaGFyICoiKS4KKwkJICovCisJCWNvb2tpZSA9IChjaGFyICopIHNlbnNpdGl2ZV9oZWFkZXI7CisKKwkJd2hpbGUgKGNvb2tpZSkgeworCQkJY2hhciAqZXF1YWxzOworCQkJY2hhciAqc2VtaWNvbG9uID0gc3Ryc3RyKGNvb2tpZSwgIjsgIik7CisJCQlpZiAoc2VtaWNvbG9uKQorCQkJCSpzZW1pY29sb24gPSAwOworCQkJZXF1YWxzID0gc3RyY2hybnVsKGNvb2tpZSwgJz0nKTsKKwkJCWlmICghZXF1YWxzKSB7CisJCQkJLyogaW52YWxpZCBjb29raWUsIGp1c3QgYXBwZW5kIGFuZCBjb250aW51ZSAqLworCQkJCXN0cmJ1Zl9hZGRzdHIoJnJlZGFjdGVkX2hlYWRlciwgY29va2llKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCSplcXVhbHMgPSAwOyAvKiB0ZW1wb3JhcmlseSBzZXQgdG8gTlVMIGZvciBsb29rdXAgKi8KKwkJCWlmIChzdHJpbmdfbGlzdF9sb29rdXAoJmNvb2tpZXNfdG9fcmVkYWN0LCBjb29raWUpKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmcmVkYWN0ZWRfaGVhZGVyLCBjb29raWUpOworCQkJCXN0cmJ1Zl9hZGRzdHIoJnJlZGFjdGVkX2hlYWRlciwgIj08cmVkYWN0ZWQ+Iik7CisJCQl9IGVsc2UgeworCQkJCSplcXVhbHMgPSAnPSc7CisJCQkJc3RyYnVmX2FkZHN0cigmcmVkYWN0ZWRfaGVhZGVyLCBjb29raWUpOworCQkJfQorCQkJaWYgKHNlbWljb2xvbikgeworCQkJCS8qCisJCQkJICogVGhlcmUgYXJlIG1vcmUgY29va2llcy4gKE9yLCBmb3Igc29tZQorCQkJCSAqIHJlYXNvbiwgdGhlIGlucHV0IHN0cmluZyBlbmRzIGluICI7ICIuKQorCQkJCSAqLworCQkJCXN0cmJ1Zl9hZGRzdHIoJnJlZGFjdGVkX2hlYWRlciwgIjsgIik7CisJCQkJY29va2llID0gc2VtaWNvbG9uICsgc3RybGVuKCI7ICIpOworCQkJfSBlbHNlIHsKKwkJCQljb29raWUgPSBOVUxMOworCQkJfQorCQl9CisKKwkJc3RyYnVmX3NldGxlbihoZWFkZXIsIHNlbnNpdGl2ZV9oZWFkZXIgLSBoZWFkZXItPmJ1Zik7CisJCXN0cmJ1Zl9hZGRidWYoaGVhZGVyLCAmcmVkYWN0ZWRfaGVhZGVyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN1cmxfZHVtcF9oZWFkZXIoY29uc3QgY2hhciAqdGV4dCwgdW5zaWduZWQgY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGhpZGVfc2Vuc2l0aXZlX2hlYWRlcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgKipoZWFkZXJzLCAqKmhlYWRlcjsKKworCXN0cmJ1Zl9hZGRmKCZvdXQsICIlcywgJTEwLjEwbGQgYnl0ZXMgKDB4JTguOGx4KVxuIiwKKwkJdGV4dCwgKGxvbmcpc2l6ZSwgKGxvbmcpc2l6ZSk7CisJdHJhY2Vfc3RyYnVmKCZ0cmFjZV9jdXJsLCAmb3V0KTsKKwlzdHJidWZfcmVzZXQoJm91dCk7CisJc3RyYnVmX2FkZCgmb3V0LCBwdHIsIHNpemUpOworCWhlYWRlcnMgPSBzdHJidWZfc3BsaXRfbWF4KCZvdXQsICdcbicsIDApOworCisJZm9yIChoZWFkZXIgPSBoZWFkZXJzOyAqaGVhZGVyOyBoZWFkZXIrKykgeworCQlpZiAoaGlkZV9zZW5zaXRpdmVfaGVhZGVyKQorCQkJcmVkYWN0X3NlbnNpdGl2ZV9oZWFkZXIoKmhlYWRlcik7CisJCXN0cmJ1Zl9pbnNlcnRzdHIoKCpoZWFkZXIpLCAwLCB0ZXh0KTsKKwkJc3RyYnVmX2luc2VydHN0cigoKmhlYWRlciksIHN0cmxlbih0ZXh0KSwgIjogIik7CisJCXN0cmJ1Zl9ydHJpbSgoKmhlYWRlcikpOworCQlzdHJidWZfYWRkY2goKCpoZWFkZXIpLCAnXG4nKTsKKwkJdHJhY2Vfc3RyYnVmKCZ0cmFjZV9jdXJsLCAoKmhlYWRlcikpOworCX0KKwlzdHJidWZfbGlzdF9mcmVlKGhlYWRlcnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworfQorCitzdGF0aWMgdm9pZCBjdXJsX2R1bXBfZGF0YShjb25zdCBjaGFyICp0ZXh0LCB1bnNpZ25lZCBjaGFyICpwdHIsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBpOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgaW50IHdpZHRoID0gNjA7CisKKwlzdHJidWZfYWRkZigmb3V0LCAiJXMsICUxMC4xMGxkIGJ5dGVzICgweCU4LjhseClcbiIsCisJCXRleHQsIChsb25nKXNpemUsIChsb25nKXNpemUpOworCXRyYWNlX3N0cmJ1ZigmdHJhY2VfY3VybCwgJm91dCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSB3aWR0aCkgeworCQlzaXplX3QgdzsKKworCQlzdHJidWZfcmVzZXQoJm91dCk7CisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIlczogIiwgdGV4dCk7CisJCWZvciAodyA9IDA7ICh3IDwgd2lkdGgpICYmIChpICsgdyA8IHNpemUpOyB3KyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgY2ggPSBwdHJbaSArIHddOworCisJCQlzdHJidWZfYWRkY2goJm91dCwKKwkJCQkgICAgICAgKGNoID49IDB4MjApICYmIChjaCA8IDB4ODApCisJCQkJICAgICAgID8gY2ggOiAnLicpOworCQl9CisJCXN0cmJ1Zl9hZGRjaCgmb3V0LCAnXG4nKTsKKwkJdHJhY2Vfc3RyYnVmKCZ0cmFjZV9jdXJsLCAmb3V0KTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7Cit9CisKK3N0YXRpYyBpbnQgY3VybF90cmFjZShDVVJMICpoYW5kbGUsIGN1cmxfaW5mb3R5cGUgdHlwZSwgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUsIHZvaWQgKnVzZXJwKQoreworCWNvbnN0IGNoYXIgKnRleHQ7CisJZW51bSB7IE5PX0ZJTFRFUiA9IDAsIERPX0ZJTFRFUiA9IDEgfTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQ1VSTElORk9fVEVYVDoKKwkJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2VfY3VybCwgIj09IEluZm86ICVzIiwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgQ1VSTElORk9fSEVBREVSX09VVDoKKwkJdGV4dCA9ICI9PiBTZW5kIGhlYWRlciI7CisJCWN1cmxfZHVtcF9oZWFkZXIodGV4dCwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplLCBET19GSUxURVIpOworCQlicmVhazsKKwljYXNlIENVUkxJTkZPX0RBVEFfT1VUOgorCQlpZiAodHJhY2VfY3VybF9kYXRhKSB7CisJCQl0ZXh0ID0gIj0+IFNlbmQgZGF0YSI7CisJCQljdXJsX2R1bXBfZGF0YSh0ZXh0LCAodW5zaWduZWQgY2hhciAqKWRhdGEsIHNpemUpOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1VSTElORk9fU1NMX0RBVEFfT1VUOgorCQlpZiAodHJhY2VfY3VybF9kYXRhKSB7CisJCQl0ZXh0ID0gIj0+IFNlbmQgU1NMIGRhdGEiOworCQkJY3VybF9kdW1wX2RhdGEodGV4dCwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplKTsKKwkJfQorCQlicmVhazsKKwljYXNlIENVUkxJTkZPX0hFQURFUl9JTjoKKwkJdGV4dCA9ICI8PSBSZWN2IGhlYWRlciI7CisJCWN1cmxfZHVtcF9oZWFkZXIodGV4dCwgKHVuc2lnbmVkIGNoYXIgKilkYXRhLCBzaXplLCBOT19GSUxURVIpOworCQlicmVhazsKKwljYXNlIENVUkxJTkZPX0RBVEFfSU46CisJCWlmICh0cmFjZV9jdXJsX2RhdGEpIHsKKwkJCXRleHQgPSAiPD0gUmVjdiBkYXRhIjsKKwkJCWN1cmxfZHVtcF9kYXRhKHRleHQsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgc2l6ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDVVJMSU5GT19TU0xfREFUQV9JTjoKKwkJaWYgKHRyYWNlX2N1cmxfZGF0YSkgeworCQkJdGV4dCA9ICI8PSBSZWN2IFNTTCBkYXRhIjsKKwkJCWN1cmxfZHVtcF9kYXRhKHRleHQsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgc2l6ZSk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgkJLyogd2UgaWdub3JlIHVua25vd24gdHlwZXMgYnkgZGVmYXVsdCAqLworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0dXBfY3VybF90cmFjZShDVVJMICpoYW5kbGUpCit7CisJaWYgKCF0cmFjZV93YW50KCZ0cmFjZV9jdXJsKSkKKwkJcmV0dXJuOworCWN1cmxfZWFzeV9zZXRvcHQoaGFuZGxlLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLCBjdXJsX3RyYWNlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGhhbmRsZSwgQ1VSTE9QVF9ERUJVR0RBVEEsIE5VTEwpOworfQorCisjaWZkZWYgQ1VSTFBST1RPX0hUVFAKK3N0YXRpYyBsb25nIGdldF9jdXJsX2FsbG93ZWRfcHJvdG9jb2xzKGludCBmcm9tX3VzZXIpCit7CisJbG9uZyBhbGxvd2VkX3Byb3RvY29scyA9IDA7CisKKwlpZiAoaXNfdHJhbnNwb3J0X2FsbG93ZWQoImh0dHAiLCBmcm9tX3VzZXIpKQorCQlhbGxvd2VkX3Byb3RvY29scyB8PSBDVVJMUFJPVE9fSFRUUDsKKwlpZiAoaXNfdHJhbnNwb3J0X2FsbG93ZWQoImh0dHBzIiwgZnJvbV91c2VyKSkKKwkJYWxsb3dlZF9wcm90b2NvbHMgfD0gQ1VSTFBST1RPX0hUVFBTOworCWlmIChpc190cmFuc3BvcnRfYWxsb3dlZCgiZnRwIiwgZnJvbV91c2VyKSkKKwkJYWxsb3dlZF9wcm90b2NvbHMgfD0gQ1VSTFBST1RPX0ZUUDsKKwlpZiAoaXNfdHJhbnNwb3J0X2FsbG93ZWQoImZ0cHMiLCBmcm9tX3VzZXIpKQorCQlhbGxvd2VkX3Byb3RvY29scyB8PSBDVVJMUFJPVE9fRlRQUzsKKworCXJldHVybiBhbGxvd2VkX3Byb3RvY29sczsKK30KKyNlbmRpZgorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PTB4MDcyZjAwCitzdGF0aWMgaW50IGdldF9jdXJsX2h0dHBfdmVyc2lvbl9vcHQoY29uc3QgY2hhciAqdmVyc2lvbl9zdHJpbmcsIGxvbmcgKm9wdCkKK3sKKwlpbnQgaTsKKwlzdGF0aWMgc3RydWN0IHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJbG9uZyBvcHRfdG9rZW47CisJfSBjaG9pY2VbXSA9IHsKKwkJeyAiSFRUUC8xLjEiLCBDVVJMX0hUVFBfVkVSU0lPTl8xXzEgfSwKKwkJeyAiSFRUUC8yIiwgQ1VSTF9IVFRQX1ZFUlNJT05fMiB9CisJfTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNob2ljZSk7IGkrKykgeworCQlpZiAoIXN0cmNtcCh2ZXJzaW9uX3N0cmluZywgY2hvaWNlW2ldLm5hbWUpKSB7CisJCQkqb3B0ID0gY2hvaWNlW2ldLm9wdF90b2tlbjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJd2FybmluZygidW5rbm93biB2YWx1ZSBnaXZlbiB0byBodHRwLnZlcnNpb246ICclcyciLCB2ZXJzaW9uX3N0cmluZyk7CisJcmV0dXJuIC0xOyAvKiBub3QgZm91bmQgKi8KK30KKworI2VuZGlmCisKK3N0YXRpYyBDVVJMICpnZXRfY3VybF9oYW5kbGUodm9pZCkKK3sKKwlDVVJMICpyZXN1bHQgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisJaWYgKCFyZXN1bHQpCisJCWRpZSgiY3VybF9lYXN5X2luaXQgZmFpbGVkIik7CisKKwlpZiAoIWN1cmxfc3NsX3ZlcmlmeSkgeworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsKKwl9IGVsc2UgeworCQkvKiBWZXJpZnkgYXV0aGVudGljaXR5IG9mIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUgKi8KKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDEpOworCQkvKiBUaGUgbmFtZSBpbiB0aGUgY2VydCBtdXN0IG1hdGNoIHdob20gd2UgdHJpZWQgdG8gY29ubmVjdCAqLworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMik7CisJfQorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MmYwMCAvLyA3LjQ3LjAKKyAgICBpZiAoY3VybF9odHRwX3ZlcnNpb24pIHsKKwkJbG9uZyBvcHQ7CisJCWlmICghZ2V0X2N1cmxfaHR0cF92ZXJzaW9uX29wdChjdXJsX2h0dHBfdmVyc2lvbiwgJm9wdCkpIHsKKwkJCS8qIFNldCByZXF1ZXN0IHVzZSBodHRwIHZlcnNpb24gKi8KKwkJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0hUVFBfVkVSU0lPTiwgb3B0KTsKKwkJfQorICAgIH0KKyNlbmRpZgorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwNworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX05FVFJDLCBDVVJMX05FVFJDX09QVElPTkFMKTsKKyNlbmRpZgorI2lmZGVmIExJQkNVUkxfQ0FOX0hBTkRMRV9BVVRIX0FOWQorCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9BTlkpOworI2VuZGlmCisKKyNpZmRlZiBDVVJMR1NTQVBJX0RFTEVHQVRJT05fRkxBRworCWlmIChjdXJsX2RlbGVnKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdXJsX2RlbGVnX2xldmVscyk7IGkrKykgeworCQkJaWYgKCFzdHJjbXAoY3VybF9kZWxlZywgY3VybF9kZWxlZ19sZXZlbHNbaV0ubmFtZSkpIHsKKwkJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9HU1NBUElfREVMRUdBVElPTiwKKwkJCQkJCWN1cmxfZGVsZWdfbGV2ZWxzW2ldLmN1cmxfZGVsZWdfcGFyYW0pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09IEFSUkFZX1NJWkUoY3VybF9kZWxlZ19sZXZlbHMpKQorCQkJd2FybmluZygiVW5rbm93biBkZWxlZ2F0aW9uIG1ldGhvZCAnJXMnOiB1c2luZyBkZWZhdWx0IiwKKwkJCQljdXJsX2RlbGVnKTsKKwl9CisjZW5kaWYKKworCWlmIChodHRwX3NzbF9iYWNrZW5kICYmICFzdHJjbXAoInNjaGFubmVsIiwgaHR0cF9zc2xfYmFja2VuZCkgJiYKKwkgICAgIWh0dHBfc2NoYW5uZWxfY2hlY2tfcmV2b2tlKSB7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MmMwMAorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfT1BUSU9OUywgQ1VSTFNTTE9QVF9OT19SRVZPS0UpOworI2Vsc2UKKwkJd2FybmluZyhfKCJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIpKTsKKyNlbmRpZgorCX0KKworCWlmIChodHRwX3Byb2FjdGl2ZV9hdXRoKQorCQlpbml0X2N1cmxfaHR0cF9hdXRoKHJlc3VsdCk7CisKKwlpZiAoZ2V0ZW52KCJHSVRfU1NMX1ZFUlNJT04iKSkKKwkJc3NsX3ZlcnNpb24gPSBnZXRlbnYoIkdJVF9TU0xfVkVSU0lPTiIpOworCWlmIChzc2xfdmVyc2lvbiAmJiAqc3NsX3ZlcnNpb24pIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNzbHZlcnNpb25zKTsgaSsrKSB7CisJCQlpZiAoIXN0cmNtcChzc2xfdmVyc2lvbiwgc3NsdmVyc2lvbnNbaV0ubmFtZSkpIHsKKwkJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xWRVJTSU9OLAorCQkJCQkJIHNzbHZlcnNpb25zW2ldLnNzbF92ZXJzaW9uKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNzbHZlcnNpb25zKSkKKwkJCXdhcm5pbmcoInVuc3VwcG9ydGVkIHNzbCB2ZXJzaW9uICVzOiB1c2luZyBkZWZhdWx0IiwKKwkJCQlzc2xfdmVyc2lvbik7CisJfQorCisJaWYgKGdldGVudigiR0lUX1NTTF9DSVBIRVJfTElTVCIpKQorCQlzc2xfY2lwaGVybGlzdCA9IGdldGVudigiR0lUX1NTTF9DSVBIRVJfTElTVCIpOworCWlmIChzc2xfY2lwaGVybGlzdCAhPSBOVUxMICYmICpzc2xfY2lwaGVybGlzdCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX0NJUEhFUl9MSVNULAorCQkJCXNzbF9jaXBoZXJsaXN0KTsKKworCWlmIChzc2xfY2VydCAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xDRVJULCBzc2xfY2VydCk7CisJaWYgKGhhc19jZXJ0X3Bhc3N3b3JkKCkpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0tFWVBBU1NXRCwgY2VydF9hdXRoLnBhc3N3b3JkKTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisJaWYgKHNzbF9rZXkgIT0gTlVMTCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMS0VZLCBzc2xfa2V5KTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKKwlpZiAoc3NsX2NhcGF0aCAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9DQVBBVEgsIHNzbF9jYXBhdGgpOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MmMwMAorCWlmIChzc2xfcGlubmVka2V5ICE9IE5VTEwpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BJTk5FRFBVQkxJQ0tFWSwgc3NsX3Bpbm5lZGtleSk7CisjZW5kaWYKKwlpZiAoaHR0cF9zc2xfYmFja2VuZCAmJiAhc3RyY21wKCJzY2hhbm5lbCIsIGh0dHBfc3NsX2JhY2tlbmQpICYmCisJICAgICFodHRwX3NjaGFubmVsX3VzZV9zc2xfY2FpbmZvKSB7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0NBSU5GTywgTlVMTCk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MzQwMAorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWV9DQUlORk8sIE5VTEwpOworI2VuZGlmCisJfSBlbHNlIGlmIChzc2xfY2FpbmZvICE9IE5VTEwpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0NBSU5GTywgc3NsX2NhaW5mbyk7CisKKwlpZiAoY3VybF9sb3dfc3BlZWRfbGltaXQgPiAwICYmIGN1cmxfbG93X3NwZWVkX3RpbWUgPiAwKSB7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0xPV19TUEVFRF9MSU1JVCwKKwkJCQkgY3VybF9sb3dfc3BlZWRfbGltaXQpOworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9MT1dfU1BFRURfVElNRSwKKwkJCQkgY3VybF9sb3dfc3BlZWRfdGltZSk7CisJfQorCisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTUFYUkVESVJTLCAyMCk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTMwMQorCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BPU1RSRURJUiwgQ1VSTF9SRURJUl9QT1NUX0FMTCk7CisjZWxpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxMTAxCisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUE9TVDMwMSwgMSk7CisjZW5kaWYKKyNpZmRlZiBDVVJMUFJPVE9fSFRUUAorCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1JFRElSX1BST1RPQ09MUywKKwkJCSBnZXRfY3VybF9hbGxvd2VkX3Byb3RvY29scygwKSk7CisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPVE9DT0xTLAorCQkJIGdldF9jdXJsX2FsbG93ZWRfcHJvdG9jb2xzKC0xKSk7CisjZWxzZQorCXdhcm5pbmcoXygiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IikpOworI2VuZGlmCisJaWYgKGdldGVudigiR0lUX0NVUkxfVkVSQk9TRSIpKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisJc2V0dXBfY3VybF90cmFjZShyZXN1bHQpOworCWlmIChnZXRlbnYoIkdJVF9UUkFDRV9DVVJMX05PX0RBVEEiKSkKKwkJdHJhY2VfY3VybF9kYXRhID0gMDsKKwlpZiAoZ2V0ZW52KCJHSVRfUkVEQUNUX0NPT0tJRVMiKSkgeworCQlzdHJpbmdfbGlzdF9zcGxpdCgmY29va2llc190b19yZWRhY3QsCisJCQkJICBnZXRlbnYoIkdJVF9SRURBQ1RfQ09PS0lFUyIpLCAnLCcsIC0xKTsKKwkJc3RyaW5nX2xpc3Rfc29ydCgmY29va2llc190b19yZWRhY3QpOworCX0KKworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1VTRVJBR0VOVCwKKwkJdXNlcl9hZ2VudCA/IHVzZXJfYWdlbnQgOiBnaXRfdXNlcl9hZ2VudCgpKTsKKworCWlmIChjdXJsX2Z0cF9ub19lcHN2KQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9GVFBfVVNFX0VQU1YsIDApOworCisjaWZkZWYgQ1VSTE9QVF9VU0VfU1NMCisJaWYgKGN1cmxfc3NsX3RyeSkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfVVNFX1NTTCwgQ1VSTFVTRVNTTF9UUlkpOworI2VuZGlmCisKKwkvKgorCSAqIENVUkwgYWxzbyBleGFtaW5lcyB0aGVzZSB2YXJpYWJsZXMgYXMgYSBmYWxsYmFjazsgYnV0IHdlIG5lZWQgdG8gcXVlcnkKKwkgKiB0aGVtIGhlcmUgaW4gb3JkZXIgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcHJvbXB0IGZvciBtaXNzaW5nIHBhc3N3b3JkIChjZi4KKwkgKiBpbml0X2N1cmxfcHJveHlfYXV0aCgpKS4KKwkgKgorCSAqIFVubGlrZSBtYW55IG90aGVyIGNvbW1vbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoZXNlIGFyZSBoaXN0b3JpY2FsbHkKKwkgKiBsb3dlcmNhc2Ugb25seS4gSXQgYXBwZWFycyB0aGF0IENVUkwgZGlkIG5vdCBrbm93IHRoaXMgYW5kIGltcGxlbWVudGVkCisJICogb25seSB1cHBlcmNhc2UgdmFyaWFudHMsIHdoaWNoIHdhcyBsYXRlciBjb3JyZWN0ZWQgdG8gdGFrZSBib3RoIC0gd2l0aAorCSAqIHRoZSBleGNlcHRpb24gb2YgaHR0cF9wcm94eSwgd2hpY2ggaXMgbG93ZXJjYXNlIG9ubHkgYWxzbyBpbiBDVVJMLiBBcworCSAqIHRoZSBsb3dlcmNhc2UgdmVyc2lvbnMgYXJlIHRoZSBoaXN0b3JpY2FsIHF1YXNpLXN0YW5kYXJkLCB0aGV5IHRha2UKKwkgKiBwcmVjZWRlbmNlIGhlcmUsIGFzIGluIENVUkwuCisJICovCisJaWYgKCFjdXJsX2h0dHBfcHJveHkpIHsKKwkJaWYgKGh0dHBfYXV0aC5wcm90b2NvbCAmJiAhc3RyY21wKGh0dHBfYXV0aC5wcm90b2NvbCwgImh0dHBzIikpIHsKKwkJCXZhcl9vdmVycmlkZSgmY3VybF9odHRwX3Byb3h5LCBnZXRlbnYoIkhUVFBTX1BST1hZIikpOworCQkJdmFyX292ZXJyaWRlKCZjdXJsX2h0dHBfcHJveHksIGdldGVudigiaHR0cHNfcHJveHkiKSk7CisJCX0gZWxzZSB7CisJCQl2YXJfb3ZlcnJpZGUoJmN1cmxfaHR0cF9wcm94eSwgZ2V0ZW52KCJodHRwX3Byb3h5IikpOworCQl9CisJCWlmICghY3VybF9odHRwX3Byb3h5KSB7CisJCQl2YXJfb3ZlcnJpZGUoJmN1cmxfaHR0cF9wcm94eSwgZ2V0ZW52KCJBTExfUFJPWFkiKSk7CisJCQl2YXJfb3ZlcnJpZGUoJmN1cmxfaHR0cF9wcm94eSwgZ2V0ZW52KCJhbGxfcHJveHkiKSk7CisJCX0KKwl9CisKKwlpZiAoY3VybF9odHRwX3Byb3h5ICYmIGN1cmxfaHR0cF9wcm94eVswXSA9PSAnXDAnKSB7CisJCS8qCisJCSAqIEhhbmRsZSBjYXNlIHdpdGggdGhlIGVtcHR5IGh0dHAucHJveHkgdmFsdWUgaGVyZSB0byBrZWVwCisJCSAqIGNvbW1vbiBjb2RlIGNsZWFuLgorCQkgKiBOQjogZW1wdHkgb3B0aW9uIGRpc2FibGVzIHByb3h5aW5nIGF0IGFsbC4KKwkJICovCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1hZLCAiIik7CisJfSBlbHNlIGlmIChjdXJsX2h0dHBfcHJveHkpIHsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxODAwCisJCWlmIChzdGFydHNfd2l0aChjdXJsX2h0dHBfcHJveHksICJzb2NrczVoIikpCisJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwKKwkJCQlDVVJMT1BUX1BST1hZVFlQRSwgQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRSk7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGN1cmxfaHR0cF9wcm94eSwgInNvY2tzNSIpKQorCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsCisJCQkJQ1VSTE9QVF9QUk9YWVRZUEUsIENVUkxQUk9YWV9TT0NLUzUpOworCQllbHNlIGlmIChzdGFydHNfd2l0aChjdXJsX2h0dHBfcHJveHksICJzb2NrczRhIikpCisJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwKKwkJCQlDVVJMT1BUX1BST1hZVFlQRSwgQ1VSTFBST1hZX1NPQ0tTNEEpOworCQllbHNlIGlmIChzdGFydHNfd2l0aChjdXJsX2h0dHBfcHJveHksICJzb2NrcyIpKQorCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsCisJCQkJQ1VSTE9QVF9QUk9YWVRZUEUsIENVUkxQUk9YWV9TT0NLUzQpOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MzQwMAorCQllbHNlIGlmIChzdGFydHNfd2l0aChjdXJsX2h0dHBfcHJveHksICJodHRwcyIpKQorCQkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsCisJCQkJQ1VSTE9QVF9QUk9YWVRZUEUsIENVUkxQUk9YWV9IVFRQUyk7CisjZW5kaWYKKwkJaWYgKHN0cnN0cihjdXJsX2h0dHBfcHJveHksICI6Ly8iKSkKKwkJCWNyZWRlbnRpYWxfZnJvbV91cmwoJnByb3h5X2F1dGgsIGN1cmxfaHR0cF9wcm94eSk7CisJCWVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiB1cmwgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZ1cmwsICJodHRwOi8vJXMiLCBjdXJsX2h0dHBfcHJveHkpOworCQkJY3JlZGVudGlhbF9mcm9tX3VybCgmcHJveHlfYXV0aCwgdXJsLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmdXJsKTsKKwkJfQorCisJCWlmICghcHJveHlfYXV0aC5ob3N0KQorCQkJZGllKCJJbnZhbGlkIHByb3h5IFVSTCAnJXMnIiwgY3VybF9odHRwX3Byb3h5KTsKKworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QUk9YWSwgcHJveHlfYXV0aC5ob3N0KTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxMzA0CisJCXZhcl9vdmVycmlkZSgmY3VybF9ub19wcm94eSwgZ2V0ZW52KCJOT19QUk9YWSIpKTsKKwkJdmFyX292ZXJyaWRlKCZjdXJsX25vX3Byb3h5LCBnZXRlbnYoIm5vX3Byb3h5IikpOworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9OT1BST1hZLCBjdXJsX25vX3Byb3h5KTsKKyNlbmRpZgorCX0KKwlpbml0X2N1cmxfcHJveHlfYXV0aChyZXN1bHQpOworCisJc2V0X2N1cmxfa2VlcGFsaXZlKHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzZXRfZnJvbV9lbnYoY29uc3QgY2hhciAqKnZhciwgY29uc3QgY2hhciAqZW52bmFtZSkKK3sKKwljb25zdCBjaGFyICp2YWwgPSBnZXRlbnYoZW52bmFtZSk7CisJaWYgKHZhbCkKKwkJKnZhciA9IHZhbDsKK30KKwordm9pZCBodHRwX2luaXQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwsIGludCBwcm9hY3RpdmVfYXV0aCkKK3sKKwljaGFyICpsb3dfc3BlZWRfbGltaXQ7CisJY2hhciAqbG93X3NwZWVkX3RpbWU7CisJY2hhciAqbm9ybWFsaXplZF91cmw7CisJc3RydWN0IHVybG1hdGNoX2NvbmZpZyBjb25maWcgPSB7IFNUUklOR19MSVNUX0lOSVRfRFVQIH07CisKKwljb25maWcuc2VjdGlvbiA9ICJodHRwIjsKKwljb25maWcua2V5ID0gTlVMTDsKKwljb25maWcuY29sbGVjdF9mbiA9IGh0dHBfb3B0aW9uczsKKwljb25maWcuY2FzY2FkZV9mbiA9IGdpdF9kZWZhdWx0X2NvbmZpZzsKKwljb25maWcuY2IgPSBOVUxMOworCisJaHR0cF9pc192ZXJib3NlID0gMDsKKwlub3JtYWxpemVkX3VybCA9IHVybF9ub3JtYWxpemUodXJsLCAmY29uZmlnLnVybCk7CisKKwlnaXRfY29uZmlnKHVybG1hdGNoX2NvbmZpZ19lbnRyeSwgJmNvbmZpZyk7CisJZnJlZShub3JtYWxpemVkX3VybCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmNvbmZpZy52YXJzLCAxKTsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzM4MDAKKwlpZiAoaHR0cF9zc2xfYmFja2VuZCkgeworCQljb25zdCBjdXJsX3NzbF9iYWNrZW5kICoqYmFja2VuZHM7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWludCBpOworCisJCXN3aXRjaCAoY3VybF9nbG9iYWxfc3Nsc2V0KC0xLCBodHRwX3NzbF9iYWNrZW5kLCAmYmFja2VuZHMpKSB7CisJCWNhc2UgQ1VSTFNTTFNFVF9VTktOT1dOX0JBQ0tFTkQ6CisJCQlzdHJidWZfYWRkZigmYnVmLCBfKCJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiAiCisJCQkJCSAgICAiU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiKSwKKwkJCQkJICAgIGh0dHBfc3NsX2JhY2tlbmQpOworCQkJZm9yIChpID0gMDsgYmFja2VuZHNbaV07IGkrKykKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiXG5cdCVzIiwgYmFja2VuZHNbaV0tPm5hbWUpOworCQkJZGllKCIlcyIsIGJ1Zi5idWYpOworCQljYXNlIENVUkxTU0xTRVRfTk9fQkFDS0VORFM6CisJCQlkaWUoXygiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiAiCisJCQkgICAgICAiY1VSTCB3YXMgYnVpbHQgd2l0aG91dCBTU0wgYmFja2VuZHMiKSwKKwkJCSAgICBodHRwX3NzbF9iYWNrZW5kKTsKKwkJY2FzZSBDVVJMU1NMU0VUX1RPT19MQVRFOgorCQkJZGllKF8oIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiKSwKKwkJCSAgICBodHRwX3NzbF9iYWNrZW5kKTsKKwkJY2FzZSBDVVJMU1NMU0VUX09LOgorCQkJYnJlYWs7IC8qIE9rYXkhICovCisJCX0KKwl9CisjZW5kaWYKKworCWlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spCisJCWRpZSgiY3VybF9nbG9iYWxfaW5pdCBmYWlsZWQiKTsKKworCWh0dHBfcHJvYWN0aXZlX2F1dGggPSBwcm9hY3RpdmVfYXV0aDsKKworCWlmIChyZW1vdGUgJiYgcmVtb3RlLT5odHRwX3Byb3h5KQorCQljdXJsX2h0dHBfcHJveHkgPSB4c3RyZHVwKHJlbW90ZS0+aHR0cF9wcm94eSk7CisKKwlpZiAocmVtb3RlKQorCQl2YXJfb3ZlcnJpZGUoJmh0dHBfcHJveHlfYXV0aG1ldGhvZCwgcmVtb3RlLT5odHRwX3Byb3h5X2F1dGhtZXRob2QpOworCisJcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKGh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnMoKSwKKwkJIlByYWdtYTogbm8tY2FjaGUiKTsKKwlub19wcmFnbWFfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQoaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycygpLAorCQkiUHJhZ21hOiIpOworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwl7CisJCWNoYXIgKmh0dHBfbWF4X3JlcXVlc3RzID0gZ2V0ZW52KCJHSVRfSFRUUF9NQVhfUkVRVUVTVFMiKTsKKwkJaWYgKGh0dHBfbWF4X3JlcXVlc3RzICE9IE5VTEwpCisJCQltYXhfcmVxdWVzdHMgPSBhdG9pKGh0dHBfbWF4X3JlcXVlc3RzKTsKKwl9CisKKwljdXJsbSA9IGN1cmxfbXVsdGlfaW5pdCgpOworCWlmICghY3VybG0pCisJCWRpZSgiY3VybF9tdWx0aV9pbml0IGZhaWxlZCIpOworI2VuZGlmCisKKwlpZiAoZ2V0ZW52KCJHSVRfU1NMX05PX1ZFUklGWSIpKQorCQljdXJsX3NzbF92ZXJpZnkgPSAwOworCisJc2V0X2Zyb21fZW52KCZzc2xfY2VydCwgIkdJVF9TU0xfQ0VSVCIpOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDMKKwlzZXRfZnJvbV9lbnYoJnNzbF9rZXksICJHSVRfU1NMX0tFWSIpOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorCXNldF9mcm9tX2Vudigmc3NsX2NhcGF0aCwgIkdJVF9TU0xfQ0FQQVRIIik7CisjZW5kaWYKKwlzZXRfZnJvbV9lbnYoJnNzbF9jYWluZm8sICJHSVRfU1NMX0NBSU5GTyIpOworCisJc2V0X2Zyb21fZW52KCZ1c2VyX2FnZW50LCAiR0lUX0hUVFBfVVNFUl9BR0VOVCIpOworCisJbG93X3NwZWVkX2xpbWl0ID0gZ2V0ZW52KCJHSVRfSFRUUF9MT1dfU1BFRURfTElNSVQiKTsKKwlpZiAobG93X3NwZWVkX2xpbWl0ICE9IE5VTEwpCisJCWN1cmxfbG93X3NwZWVkX2xpbWl0ID0gc3RydG9sKGxvd19zcGVlZF9saW1pdCwgTlVMTCwgMTApOworCWxvd19zcGVlZF90aW1lID0gZ2V0ZW52KCJHSVRfSFRUUF9MT1dfU1BFRURfVElNRSIpOworCWlmIChsb3dfc3BlZWRfdGltZSAhPSBOVUxMKQorCQljdXJsX2xvd19zcGVlZF90aW1lID0gc3RydG9sKGxvd19zcGVlZF90aW1lLCBOVUxMLCAxMCk7CisKKwlpZiAoY3VybF9zc2xfdmVyaWZ5ID09IC0xKQorCQljdXJsX3NzbF92ZXJpZnkgPSAxOworCisJY3VybF9zZXNzaW9uX2NvdW50ID0gMDsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlmIChtYXhfcmVxdWVzdHMgPCAxKQorCQltYXhfcmVxdWVzdHMgPSBERUZBVUxUX01BWF9SRVFVRVNUUzsKKyNlbmRpZgorCisJaWYgKGdldGVudigiR0lUX0NVUkxfRlRQX05PX0VQU1YiKSkKKwkJY3VybF9mdHBfbm9fZXBzdiA9IDE7CisKKwlpZiAodXJsKSB7CisJCWNyZWRlbnRpYWxfZnJvbV91cmwoJmh0dHBfYXV0aCwgdXJsKTsKKwkJaWYgKCFzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCAmJgorCQkgICAgZ2V0ZW52KCJHSVRfU1NMX0NFUlRfUEFTU1dPUkRfUFJPVEVDVEVEIikgJiYKKwkJICAgIHN0YXJ0c193aXRoKHVybCwgImh0dHBzOi8vIikpCisJCQlzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IDE7CisJfQorCisjaWZuZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKKwljdXJsX2RlZmF1bHQgPSBnZXRfY3VybF9oYW5kbGUoKTsKKyNlbmRpZgorfQorCit2b2lkIGh0dHBfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisKKwl3aGlsZSAoc2xvdCAhPSBOVUxMKSB7CisJCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpuZXh0ID0gc2xvdC0+bmV4dDsKKwkJaWYgKHNsb3QtPmN1cmwgIT0gTlVMTCkgeworCQkJeG11bHRpX3JlbW92ZV9oYW5kbGUoc2xvdCk7CisJCQljdXJsX2Vhc3lfY2xlYW51cChzbG90LT5jdXJsKTsKKwkJfQorCQlmcmVlKHNsb3QpOworCQlzbG90ID0gbmV4dDsKKwl9CisJYWN0aXZlX3F1ZXVlX2hlYWQgPSBOVUxMOworCisjaWZuZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKKwljdXJsX2Vhc3lfY2xlYW51cChjdXJsX2RlZmF1bHQpOworI2VuZGlmCisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWN1cmxfbXVsdGlfY2xlYW51cChjdXJsbSk7CisjZW5kaWYKKwljdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfaHR0cF9oZWFkZXJzLCAwKTsKKworCWN1cmxfc2xpc3RfZnJlZV9hbGwocHJhZ21hX2hlYWRlcik7CisJcHJhZ21hX2hlYWRlciA9IE5VTEw7CisKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKG5vX3ByYWdtYV9oZWFkZXIpOworCW5vX3ByYWdtYV9oZWFkZXIgPSBOVUxMOworCisJaWYgKGN1cmxfaHR0cF9wcm94eSkgeworCQlmcmVlKCh2b2lkICopY3VybF9odHRwX3Byb3h5KTsKKwkJY3VybF9odHRwX3Byb3h5ID0gTlVMTDsKKwl9CisKKwlpZiAocHJveHlfYXV0aC5wYXNzd29yZCkgeworCQltZW1zZXQocHJveHlfYXV0aC5wYXNzd29yZCwgMCwgc3RybGVuKHByb3h5X2F1dGgucGFzc3dvcmQpKTsKKwkJRlJFRV9BTkRfTlVMTChwcm94eV9hdXRoLnBhc3N3b3JkKTsKKwl9CisKKwlmcmVlKCh2b2lkICopY3VybF9wcm94eXVzZXJwd2QpOworCWN1cmxfcHJveHl1c2VycHdkID0gTlVMTDsKKworCWZyZWUoKHZvaWQgKilodHRwX3Byb3h5X2F1dGhtZXRob2QpOworCWh0dHBfcHJveHlfYXV0aG1ldGhvZCA9IE5VTEw7CisKKwlpZiAoY2VydF9hdXRoLnBhc3N3b3JkICE9IE5VTEwpIHsKKwkJbWVtc2V0KGNlcnRfYXV0aC5wYXNzd29yZCwgMCwgc3RybGVuKGNlcnRfYXV0aC5wYXNzd29yZCkpOworCQlGUkVFX0FORF9OVUxMKGNlcnRfYXV0aC5wYXNzd29yZCk7CisJfQorCXNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkID0gMDsKKworCUZSRUVfQU5EX05VTEwoY2FjaGVkX2FjY2VwdF9sYW5ndWFnZSk7Cit9CisKK3N0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpnZXRfYWN0aXZlX3Nsb3Qodm9pZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpuZXdzbG90OworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlpbnQgbnVtX3RyYW5zZmVyczsKKworCS8qIFdhaXQgZm9yIGEgc2xvdCB0byBvcGVuIHVwIGlmIHRoZSBxdWV1ZSBpcyBmdWxsICovCisJd2hpbGUgKGFjdGl2ZV9yZXF1ZXN0cyA+PSBtYXhfcmVxdWVzdHMpIHsKKwkJY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxtLCAmbnVtX3RyYW5zZmVycyk7CisJCWlmIChudW1fdHJhbnNmZXJzIDwgYWN0aXZlX3JlcXVlc3RzKQorCQkJcHJvY2Vzc19jdXJsX21lc3NhZ2VzKCk7CisJfQorI2VuZGlmCisKKwl3aGlsZSAoc2xvdCAhPSBOVUxMICYmIHNsb3QtPmluX3VzZSkKKwkJc2xvdCA9IHNsb3QtPm5leHQ7CisKKwlpZiAoc2xvdCA9PSBOVUxMKSB7CisJCW5ld3Nsb3QgPSB4bWFsbG9jKHNpemVvZigqbmV3c2xvdCkpOworCQluZXdzbG90LT5jdXJsID0gTlVMTDsKKwkJbmV3c2xvdC0+aW5fdXNlID0gMDsKKwkJbmV3c2xvdC0+bmV4dCA9IE5VTEw7CisKKwkJc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCQlpZiAoc2xvdCA9PSBOVUxMKSB7CisJCQlhY3RpdmVfcXVldWVfaGVhZCA9IG5ld3Nsb3Q7CisJCX0gZWxzZSB7CisJCQl3aGlsZSAoc2xvdC0+bmV4dCAhPSBOVUxMKQorCQkJCXNsb3QgPSBzbG90LT5uZXh0OworCQkJc2xvdC0+bmV4dCA9IG5ld3Nsb3Q7CisJCX0KKwkJc2xvdCA9IG5ld3Nsb3Q7CisJfQorCisJaWYgKHNsb3QtPmN1cmwgPT0gTlVMTCkgeworI2lmZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKKwkJc2xvdC0+Y3VybCA9IGdldF9jdXJsX2hhbmRsZSgpOworI2Vsc2UKKwkJc2xvdC0+Y3VybCA9IGN1cmxfZWFzeV9kdXBoYW5kbGUoY3VybF9kZWZhdWx0KTsKKyNlbmRpZgorCQljdXJsX3Nlc3Npb25fY291bnQrKzsKKwl9CisKKwlhY3RpdmVfcmVxdWVzdHMrKzsKKwlzbG90LT5pbl91c2UgPSAxOworCXNsb3QtPnJlc3VsdHMgPSBOVUxMOworCXNsb3QtPmZpbmlzaGVkID0gTlVMTDsKKwlzbG90LT5jYWxsYmFja19kYXRhID0gTlVMTDsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gTlVMTDsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfQ09PS0lFRklMRSwgY3VybF9jb29raWVfZmlsZSk7CisJaWYgKGN1cmxfc2F2ZV9jb29raWVzKQorCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfQ09PS0lFSkFSLCBjdXJsX2Nvb2tpZV9maWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgcHJhZ21hX2hlYWRlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBjdXJsX2Vycm9yc3RyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgTlVMTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgTlVMTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIE5VTEwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCBOVUxMKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVBMT0FELCAwKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEdFVCwgMSk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUkFOR0UsIE5VTEwpOworCisJLyoKKwkgKiBEZWZhdWx0IGZvbGxvd2luZyB0byBvZmYgdW5sZXNzICJBTFdBWVMiIGlzIGNvbmZpZ3VyZWQ7IHRoaXMgZ2l2ZXMKKwkgKiBjYWxsZXJzIGEgc2FuZSBzdGFydGluZyBwb2ludCwgYW5kIHRoZXkgY2FuIHR3ZWFrIGZvciBpbmRpdmlkdWFsCisJICogSFRUUF9GT0xMT1dfKiBjYXNlcyB0aGVtc2VsdmVzLgorCSAqLworCWlmIChodHRwX2ZvbGxvd19jb25maWcgPT0gSFRUUF9GT0xMT1dfQUxXQVlTKQorCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOworCWVsc2UKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAwKTsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBhMDgKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSVBSRVNPTFZFLCBnaXRfY3VybF9pcHJlc29sdmUpOworI2VuZGlmCisjaWZkZWYgTElCQ1VSTF9DQU5fSEFORExFX0FVVEhfQU5ZCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBBVVRILCBodHRwX2F1dGhfbWV0aG9kcyk7CisjZW5kaWYKKwlpZiAoaHR0cF9hdXRoLnBhc3N3b3JkIHx8IGN1cmxfZW1wdHlfYXV0aF9lbmFibGVkKCkpCisJCWluaXRfY3VybF9odHRwX2F1dGgoc2xvdC0+Y3VybCk7CisKKwlyZXR1cm4gc2xvdDsKK30KKworaW50IHN0YXJ0X2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJQ1VSTE1jb2RlIGN1cmxtX3Jlc3VsdCA9IGN1cmxfbXVsdGlfYWRkX2hhbmRsZShjdXJsbSwgc2xvdC0+Y3VybCk7CisJaW50IG51bV90cmFuc2ZlcnM7CisKKwlpZiAoY3VybG1fcmVzdWx0ICE9IENVUkxNX09LICYmCisJICAgIGN1cmxtX3Jlc3VsdCAhPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKKwkJd2FybmluZygiY3VybF9tdWx0aV9hZGRfaGFuZGxlIGZhaWxlZDogJXMiLAorCQkJY3VybF9tdWx0aV9zdHJlcnJvcihjdXJsbV9yZXN1bHQpKTsKKwkJYWN0aXZlX3JlcXVlc3RzLS07CisJCXNsb3QtPmluX3VzZSA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogV2Uga25vdyB0aGVyZSBtdXN0IGJlIHNvbWV0aGluZyB0byBkbywgc2luY2Ugd2UganVzdCBhZGRlZAorCSAqIHNvbWV0aGluZy4KKwkgKi8KKwljdXJsX211bHRpX3BlcmZvcm0oY3VybG0sICZudW1fdHJhbnNmZXJzKTsKKyNlbmRpZgorCXJldHVybiAxOworfQorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3N0cnVjdCBmaWxsX2NoYWluIHsKKwl2b2lkICpkYXRhOworCWludCAoKmZpbGwpKHZvaWQgKik7CisJc3RydWN0IGZpbGxfY2hhaW4gKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IGZpbGxfY2hhaW4gKmZpbGxfY2ZnOworCit2b2lkIGFkZF9maWxsX2Z1bmN0aW9uKHZvaWQgKmRhdGEsIGludCAoKmZpbGwpKHZvaWQgKikpCit7CisJc3RydWN0IGZpbGxfY2hhaW4gKm5ld19maWxsID0geG1hbGxvYyhzaXplb2YoKm5ld19maWxsKSk7CisJc3RydWN0IGZpbGxfY2hhaW4gKipsaW5rcCA9ICZmaWxsX2NmZzsKKwluZXdfZmlsbC0+ZGF0YSA9IGRhdGE7CisJbmV3X2ZpbGwtPmZpbGwgPSBmaWxsOworCW5ld19maWxsLT5uZXh0ID0gTlVMTDsKKwl3aGlsZSAoKmxpbmtwKQorCQlsaW5rcCA9ICYoKmxpbmtwKS0+bmV4dDsKKwkqbGlua3AgPSBuZXdfZmlsbDsKK30KKwordm9pZCBmaWxsX2FjdGl2ZV9zbG90cyh2b2lkKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisKKwl3aGlsZSAoYWN0aXZlX3JlcXVlc3RzIDwgbWF4X3JlcXVlc3RzKSB7CisJCXN0cnVjdCBmaWxsX2NoYWluICpmaWxsOworCQlmb3IgKGZpbGwgPSBmaWxsX2NmZzsgZmlsbDsgZmlsbCA9IGZpbGwtPm5leHQpCisJCQlpZiAoZmlsbC0+ZmlsbChmaWxsLT5kYXRhKSkKKwkJCQlicmVhazsKKworCQlpZiAoIWZpbGwpCisJCQlicmVhazsKKwl9CisKKwl3aGlsZSAoc2xvdCAhPSBOVUxMKSB7CisJCWlmICghc2xvdC0+aW5fdXNlICYmIHNsb3QtPmN1cmwgIT0gTlVMTAorCQkJJiYgY3VybF9zZXNzaW9uX2NvdW50ID4gbWluX2N1cmxfc2Vzc2lvbnMpIHsKKwkJCWN1cmxfZWFzeV9jbGVhbnVwKHNsb3QtPmN1cmwpOworCQkJc2xvdC0+Y3VybCA9IE5VTEw7CisJCQljdXJsX3Nlc3Npb25fY291bnQtLTsKKwkJfQorCQlzbG90ID0gc2xvdC0+bmV4dDsKKwl9Cit9CisKK3ZvaWQgc3RlcF9hY3RpdmVfc2xvdHModm9pZCkKK3sKKwlpbnQgbnVtX3RyYW5zZmVyczsKKwlDVVJMTWNvZGUgY3VybG1fcmVzdWx0OworCisJZG8geworCQljdXJsbV9yZXN1bHQgPSBjdXJsX211bHRpX3BlcmZvcm0oY3VybG0sICZudW1fdHJhbnNmZXJzKTsKKwl9IHdoaWxlIChjdXJsbV9yZXN1bHQgPT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKTsKKwlpZiAobnVtX3RyYW5zZmVycyA8IGFjdGl2ZV9yZXF1ZXN0cykgeworCQlwcm9jZXNzX2N1cmxfbWVzc2FnZXMoKTsKKwkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKwl9Cit9CisjZW5kaWYKKwordm9pZCBydW5fYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpCit7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlmZF9zZXQgcmVhZGZkczsKKwlmZF9zZXQgd3JpdGVmZHM7CisJZmRfc2V0IGV4Y2ZkczsKKwlpbnQgbWF4X2ZkOworCXN0cnVjdCB0aW1ldmFsIHNlbGVjdF90aW1lb3V0OworCWludCBmaW5pc2hlZCA9IDA7CisKKwlzbG90LT5maW5pc2hlZCA9ICZmaW5pc2hlZDsKKwl3aGlsZSAoIWZpbmlzaGVkKSB7CisJCXN0ZXBfYWN0aXZlX3Nsb3RzKCk7CisKKwkJaWYgKHNsb3QtPmluX3VzZSkgeworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBmMDQKKwkJCWxvbmcgY3VybF90aW1lb3V0OworCQkJY3VybF9tdWx0aV90aW1lb3V0KGN1cmxtLCAmY3VybF90aW1lb3V0KTsKKwkJCWlmIChjdXJsX3RpbWVvdXQgPT0gMCkgeworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChjdXJsX3RpbWVvdXQgPT0gLTEpIHsKKwkJCQlzZWxlY3RfdGltZW91dC50dl9zZWMgID0gMDsKKwkJCQlzZWxlY3RfdGltZW91dC50dl91c2VjID0gNTAwMDA7CisJCQl9IGVsc2UgeworCQkJCXNlbGVjdF90aW1lb3V0LnR2X3NlYyAgPSAgY3VybF90aW1lb3V0IC8gMTAwMDsKKwkJCQlzZWxlY3RfdGltZW91dC50dl91c2VjID0gKGN1cmxfdGltZW91dCAlIDEwMDApICogMTAwMDsKKwkJCX0KKyNlbHNlCisJCQlzZWxlY3RfdGltZW91dC50dl9zZWMgID0gMDsKKwkJCXNlbGVjdF90aW1lb3V0LnR2X3VzZWMgPSA1MDAwMDsKKyNlbmRpZgorCisJCQltYXhfZmQgPSAtMTsKKwkJCUZEX1pFUk8oJnJlYWRmZHMpOworCQkJRkRfWkVSTygmd3JpdGVmZHMpOworCQkJRkRfWkVSTygmZXhjZmRzKTsKKwkJCWN1cmxfbXVsdGlfZmRzZXQoY3VybG0sICZyZWFkZmRzLCAmd3JpdGVmZHMsICZleGNmZHMsICZtYXhfZmQpOworCisJCQkvKgorCQkJICogSXQgY2FuIGhhcHBlbiB0aGF0IGN1cmxfbXVsdGlfdGltZW91dCByZXR1cm5zIGEgcGF0aG9sb2dpY2FsbHkKKwkJCSAqIGxvbmcgdGltZW91dCB3aGVuIGN1cmxfbXVsdGlfZmRzZXQgcmV0dXJucyBubyBmaWxlIGRlc2NyaXB0b3JzCisJCQkgKiB0byByZWFkLiAgU2VlIGNvbW1pdCBtZXNzYWdlIGZvciBtb3JlIGRldGFpbHMuCisJCQkgKi8KKwkJCWlmIChtYXhfZmQgPCAwICYmCisJCQkgICAgKHNlbGVjdF90aW1lb3V0LnR2X3NlYyA+IDAgfHwKKwkJCSAgICAgc2VsZWN0X3RpbWVvdXQudHZfdXNlYyA+IDUwMDAwKSkgeworCQkJCXNlbGVjdF90aW1lb3V0LnR2X3NlYyAgPSAwOworCQkJCXNlbGVjdF90aW1lb3V0LnR2X3VzZWMgPSA1MDAwMDsKKwkJCX0KKworCQkJc2VsZWN0KG1heF9mZCsxLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZmRzLCAmc2VsZWN0X3RpbWVvdXQpOworCQl9CisJfQorI2Vsc2UKKwl3aGlsZSAoc2xvdC0+aW5fdXNlKSB7CisJCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9lYXN5X3BlcmZvcm0oc2xvdC0+Y3VybCk7CisJCWZpbmlzaF9hY3RpdmVfc2xvdChzbG90KTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKwljbG9zZWRvd25fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJaWYgKHNsb3QtPmN1cmwpIHsKKwkJeG11bHRpX3JlbW92ZV9oYW5kbGUoc2xvdCk7CisJCWlmIChjdXJsX3Nlc3Npb25fY291bnQgPiBtaW5fY3VybF9zZXNzaW9ucykgeworCQkJY3VybF9lYXN5X2NsZWFudXAoc2xvdC0+Y3VybCk7CisJCQlzbG90LT5jdXJsID0gTlVMTDsKKwkJCWN1cmxfc2Vzc2lvbl9jb3VudC0tOworCQl9CisJfQorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorfQorCit2b2lkIGZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKHZvaWQpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKworCXdoaWxlIChzbG90ICE9IE5VTEwpCisJCWlmIChzbG90LT5pbl91c2UpIHsKKwkJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJCXNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwkJfSBlbHNlIHsKKwkJCXNsb3QgPSBzbG90LT5uZXh0OworCQl9Cit9CisKKy8qIEhlbHBlcnMgZm9yIG1vZGlmeWluZyBhbmQgY3JlYXRpbmcgVVJMcyAqLworc3RhdGljIGlubGluZSBpbnQgbmVlZHNfcXVvdGUoaW50IGNoKQoreworCWlmICgoKGNoID49ICdBJykgJiYgKGNoIDw9ICdaJykpCisJCQl8fCAoKGNoID49ICdhJykgJiYgKGNoIDw9ICd6JykpCisJCQl8fCAoKGNoID49ICcwJykgJiYgKGNoIDw9ICc5JykpCisJCQl8fCAoY2ggPT0gJy8nKQorCQkJfHwgKGNoID09ICctJykKKwkJCXx8IChjaCA9PSAnLicpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNoYXIgKnF1b3RlX3JlZl91cmwoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcmVmKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqY3A7CisJaW50IGNoOworCisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIGJhc2UpOworCisJZm9yIChjcCA9IHJlZjsgKGNoID0gKmNwKSAhPSAwOyBjcCsrKQorCQlpZiAobmVlZHNfcXVvdGUoY2gpKQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiUlJTAyeCIsIGNoKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKCZidWYsICpjcCk7CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKwordm9pZCBhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwsCisJCQkgICAgICBjb25zdCBjaGFyICpoZXgsCisJCQkgICAgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KQoreworCWVuZF91cmxfd2l0aF9zbGFzaChidWYsIHVybCk7CisKKwlzdHJidWZfYWRkZihidWYsICJvYmplY3RzLyUuKnMvIiwgMiwgaGV4KTsKKwlpZiAoIW9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKKwkJc3RyYnVmX2FkZHN0cihidWYsIGhleCArIDIpOworfQorCitjaGFyICpnZXRfcmVtb3RlX29iamVjdF91cmwoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpoZXgsCisJCQkgICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybCgmYnVmLCB1cmwsIGhleCwgb25seV90d29fZGlnaXRfcHJlZml4KTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKwordm9pZCBub3JtYWxpemVfY3VybF9yZXN1bHQoQ1VSTGNvZGUgKnJlc3VsdCwgbG9uZyBodHRwX2NvZGUsCisJCQkgICBjaGFyICplcnJvcnN0ciwgc2l6ZV90IGVycm9ybGVuKQoreworCS8qCisJICogSWYgd2Ugc2VlIGEgZmFpbGluZyBodHRwIGNvZGUgd2l0aCBDVVJMRV9PSywgd2UgaGF2ZSB0dXJuZWQgb2ZmCisJICogRkFJTE9ORVJST1IgKHRvIGtlZXAgdGhlIHNlcnZlcidzIGN1c3RvbSBlcnJvciByZXNwb25zZSksIGFuZCBzaG91bGQKKwkgKiB0cmFuc2xhdGUgdGhlIGNvZGUgaW50byBmYWlsdXJlIGhlcmUuCisJICoKKwkgKiBMaWtld2lzZSwgaWYgd2Ugc2VlIGEgcmVkaXJlY3QgKDMweCBjb2RlKSwgdGhhdCBtZWFucyB3ZSB0dXJuZWQgb2ZmCisJICogcmVkaXJlY3QtZm9sbG93aW5nLCBhbmQgd2Ugc2hvdWxkIHRyZWF0IHRoZSByZXN1bHQgYXMgYW4gZXJyb3IuCisJICovCisJaWYgKCpyZXN1bHQgPT0gQ1VSTEVfT0sgJiYgaHR0cF9jb2RlID49IDMwMCkgeworCQkqcmVzdWx0ID0gQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUjsKKwkJLyoKKwkJICogTm9ybWFsbHkgY3VybCB3aWxsIGFscmVhZHkgaGF2ZSBwdXQgdGhlICJyZWFzb24gcGhyYXNlIgorCQkgKiBmcm9tIHRoZSBzZXJ2ZXIgaW50byBjdXJsX2Vycm9yc3RyOyB1bmZvcnR1bmF0ZWx5IHdpdGhvdXQKKwkJICogRkFJTE9ORVJST1IgaXQgaXMgbG9zdCwgc28gd2UgY2FuIGdpdmUgb25seSB0aGUgbnVtZXJpYworCQkgKiBzdGF0dXMgY29kZS4KKwkJICovCisJCXhzbnByaW50ZihlcnJvcnN0ciwgZXJyb3JsZW4sCisJCQkgICJUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogJWxkIiwKKwkJCSAgaHR0cF9jb2RlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2N1cmxfcmVzdWx0KHN0cnVjdCBzbG90X3Jlc3VsdHMgKnJlc3VsdHMpCit7CisJbm9ybWFsaXplX2N1cmxfcmVzdWx0KCZyZXN1bHRzLT5jdXJsX3Jlc3VsdCwgcmVzdWx0cy0+aHR0cF9jb2RlLAorCQkJICAgICAgY3VybF9lcnJvcnN0ciwgc2l6ZW9mKGN1cmxfZXJyb3JzdHIpKTsKKworCWlmIChyZXN1bHRzLT5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgeworCQljcmVkZW50aWFsX2FwcHJvdmUoJmh0dHBfYXV0aCk7CisJCWlmIChwcm94eV9hdXRoLnBhc3N3b3JkKQorCQkJY3JlZGVudGlhbF9hcHByb3ZlKCZwcm94eV9hdXRoKTsKKwkJcmV0dXJuIEhUVFBfT0s7CisJfSBlbHNlIGlmIChtaXNzaW5nX3RhcmdldChyZXN1bHRzKSkKKwkJcmV0dXJuIEhUVFBfTUlTU0lOR19UQVJHRVQ7CisJZWxzZSBpZiAocmVzdWx0cy0+aHR0cF9jb2RlID09IDQwMSkgeworCQlpZiAoaHR0cF9hdXRoLnVzZXJuYW1lICYmIGh0dHBfYXV0aC5wYXNzd29yZCkgeworCQkJY3JlZGVudGlhbF9yZWplY3QoJmh0dHBfYXV0aCk7CisJCQlyZXR1cm4gSFRUUF9OT0FVVEg7CisJCX0gZWxzZSB7CisjaWZkZWYgTElCQ1VSTF9DQU5fSEFORExFX0FVVEhfQU5ZCisJCQlodHRwX2F1dGhfbWV0aG9kcyAmPSB+Q1VSTEFVVEhfR1NTTkVHT1RJQVRFOworCQkJaWYgKHJlc3VsdHMtPmF1dGhfYXZhaWwpIHsKKwkJCQlodHRwX2F1dGhfbWV0aG9kcyAmPSByZXN1bHRzLT5hdXRoX2F2YWlsOworCQkJCWh0dHBfYXV0aF9tZXRob2RzX3Jlc3RyaWN0ZWQgPSAxOworCQkJfQorI2VuZGlmCisJCQlyZXR1cm4gSFRUUF9SRUFVVEg7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocmVzdWx0cy0+aHR0cF9jb25uZWN0Y29kZSA9PSA0MDcpCisJCQljcmVkZW50aWFsX3JlamVjdCgmcHJveHlfYXV0aCk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MGMwMAorCQlpZiAoIWN1cmxfZXJyb3JzdHJbMF0pCisJCQlzdHJsY3B5KGN1cmxfZXJyb3JzdHIsCisJCQkJY3VybF9lYXN5X3N0cmVycm9yKHJlc3VsdHMtPmN1cmxfcmVzdWx0KSwKKwkJCQlzaXplb2YoY3VybF9lcnJvcnN0cikpOworI2VuZGlmCisJCXJldHVybiBIVFRQX0VSUk9SOworCX0KK30KKworaW50IHJ1bl9vbmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCwKKwkJIHN0cnVjdCBzbG90X3Jlc3VsdHMgKnJlc3VsdHMpCit7CisJc2xvdC0+cmVzdWx0cyA9IHJlc3VsdHM7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQl4c25wcmludGYoY3VybF9lcnJvcnN0ciwgc2l6ZW9mKGN1cmxfZXJyb3JzdHIpLAorCQkJICAiZmFpbGVkIHRvIHN0YXJ0IEhUVFAgcmVxdWVzdCIpOworCQlyZXR1cm4gSFRUUF9TVEFSVF9GQUlMRUQ7CisJfQorCisJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCXJldHVybiBoYW5kbGVfY3VybF9yZXN1bHQocmVzdWx0cyk7Cit9CisKK3N0cnVjdCBjdXJsX3NsaXN0ICpodHRwX2NvcHlfZGVmYXVsdF9oZWFkZXJzKHZvaWQpCit7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZXh0cmFfaHR0cF9oZWFkZXJzKQorCQloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgaXRlbS0+c3RyaW5nKTsKKworCXJldHVybiBoZWFkZXJzOworfQorCitzdGF0aWMgQ1VSTGNvZGUgY3VybGluZm9fc3RyYnVmKENVUkwgKmN1cmwsIENVUkxJTkZPIGluZm8sIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljaGFyICpwdHI7CisJQ1VSTGNvZGUgcmV0OworCisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJcmV0ID0gY3VybF9lYXN5X2dldGluZm8oY3VybCwgaW5mbywgJnB0cik7CisJaWYgKCFyZXQgJiYgcHRyKQorCQlzdHJidWZfYWRkc3RyKGJ1ZiwgcHRyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2hlY2sgZm9yIGFuZCBleHRyYWN0IGEgY29udGVudC10eXBlIHBhcmFtZXRlci4gInJhdyIKKyAqIHNob3VsZCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgcG90ZW50aWFsCisgKiBwYXJhbWV0ZXIsIHdpdGggYW55IHdoaXRlc3BhY2UgYWxyZWFkeSByZW1vdmVkLgorICoKKyAqICJuYW1lIiBpcyB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBUaGUgdmFsdWUgaXMgYXBwZW5kZWQKKyAqIHRvICJvdXQiLgorICovCitzdGF0aWMgaW50IGV4dHJhY3RfcGFyYW0oY29uc3QgY2hhciAqcmF3LCBjb25zdCBjaGFyICpuYW1lLAorCQkJIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpOworCisJaWYgKHN0cm5jYXNlY21wKHJhdywgbmFtZSwgbGVuKSkKKwkJcmV0dXJuIC0xOworCXJhdyArPSBsZW47CisKKwlpZiAoKnJhdyAhPSAnPScpCisJCXJldHVybiAtMTsKKwlyYXcrKzsKKworCXdoaWxlICgqcmF3ICYmICFpc3NwYWNlKCpyYXcpICYmICpyYXcgIT0gJzsnKQorCQlzdHJidWZfYWRkY2gob3V0LCAqcmF3KyspOworCXJldHVybiAwOworfQorCisvKgorICogRXh0cmFjdCBhIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCB0eXBlLCB3aXRoIGFueQorICogc3BhY2VzIHN1cHByZXNzZWQsIGFsbCBsZXR0ZXJzIGxvd2VyY2FzZWQsIGFuZCBubyB0cmFpbGluZyAiOyIKKyAqIG9yIHBhcmFtZXRlcnMuCisgKgorICogTm90ZSB0aGF0IHdlIHdpbGwgc2lsZW50bHkgcmVtb3ZlIGV2ZW4gaW52YWxpZCB3aGl0ZXNwYWNlLiBGb3IKKyAqIGV4YW1wbGUsICJ0ZXh0IC8gcGxhaW4iIGlzIHNwZWNpZmljYWxseSBmb3JiaWRkZW4gYnkgUkZDIDI2MTYsCisgKiBidXQgInRleHQvcGxhaW4iIGlzIHRoZSBvbmx5IHJlYXNvbmFibGUgb3V0cHV0LCBhbmQgdGhpcyBrZWVwcworICogb3VyIGNvZGUgc2ltcGxlLgorICoKKyAqIElmIHRoZSAiY2hhcnNldCIgYXJndW1lbnQgaXMgbm90IE5VTEwsIHN0b3JlIHRoZSB2YWx1ZSBvZiBhbnkKKyAqIGNoYXJzZXQgcGFyYW1ldGVyIHRoZXJlLgorICoKKyAqIEV4YW1wbGU6CisgKiAgICJURVhUL1BMQUlOOyBjaGFyc2V0PXV0Zi04IiAtPiAidGV4dC9wbGFpbiIsICJ1dGYtOCIKKyAqICAgInRleHQgLyBwbGFpbiIgLT4gInRleHQvcGxhaW4iCisgKi8KK3N0YXRpYyB2b2lkIGV4dHJhY3RfY29udGVudF90eXBlKHN0cnVjdCBzdHJidWYgKnJhdywgc3RydWN0IHN0cmJ1ZiAqdHlwZSwKKwkJCQkgc3RydWN0IHN0cmJ1ZiAqY2hhcnNldCkKK3sKKwljb25zdCBjaGFyICpwOworCisJc3RyYnVmX3Jlc2V0KHR5cGUpOworCXN0cmJ1Zl9ncm93KHR5cGUsIHJhdy0+bGVuKTsKKwlmb3IgKHAgPSByYXctPmJ1ZjsgKnA7IHArKykgeworCQlpZiAoaXNzcGFjZSgqcCkpCisJCQljb250aW51ZTsKKwkJaWYgKCpwID09ICc7JykgeworCQkJcCsrOworCQkJYnJlYWs7CisJCX0KKwkJc3RyYnVmX2FkZGNoKHR5cGUsIHRvbG93ZXIoKnApKTsKKwl9CisKKwlpZiAoIWNoYXJzZXQpCisJCXJldHVybjsKKworCXN0cmJ1Zl9yZXNldChjaGFyc2V0KTsKKwl3aGlsZSAoKnApIHsKKwkJd2hpbGUgKGlzc3BhY2UoKnApIHx8ICpwID09ICc7JykKKwkJCXArKzsKKwkJaWYgKCFleHRyYWN0X3BhcmFtKHAsICJjaGFyc2V0IiwgY2hhcnNldCkpCisJCQlyZXR1cm47CisJCXdoaWxlICgqcCAmJiAhaXNzcGFjZSgqcCkpCisJCQlwKys7CisJfQorCisJaWYgKCFjaGFyc2V0LT5sZW4gJiYgc3RhcnRzX3dpdGgodHlwZS0+YnVmLCAidGV4dC8iKSkKKwkJc3RyYnVmX2FkZHN0cihjaGFyc2V0LCAiSVNPLTg4NTktMSIpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9hY2NlcHRfbGFuZ3VhZ2Uoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCS8qCisJICogTUFYX0RFQ0lNQUxfUExBQ0VTIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIDMuIElmIGl0IGlzIGxhcmdlciB0aGFuCisJICogdGhhdCwgcS12YWx1ZSB3aWxsIGJlIHNtYWxsZXIgdGhhbiAwLjAwMSwgdGhlIG1pbmltdW0gcS12YWx1ZSB0aGUKKwkgKiBIVFRQIHNwZWNpZmljYXRpb24gYWxsb3dzLiBTZWUKKwkgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNS4zLjEgZm9yIHEtdmFsdWUuCisJICovCisJY29uc3QgaW50IE1BWF9ERUNJTUFMX1BMQUNFUyA9IDM7CisJY29uc3QgaW50IE1BWF9MQU5HVUFHRV9UQUdTID0gMTAwMDsKKwljb25zdCBpbnQgTUFYX0FDQ0VQVF9MQU5HVUFHRV9IRUFERVJfU0laRSA9IDQwMDA7CisJY2hhciAqKmxhbmd1YWdlX3RhZ3MgPSBOVUxMOworCWludCBudW1fbGFuZ3MgPSAwOworCWNvbnN0IGNoYXIgKnMgPSBnZXRfcHJlZmVycmVkX2xhbmd1YWdlcygpOworCWludCBpOworCXN0cnVjdCBzdHJidWYgdGFnID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBEb24ndCBhZGQgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciBpZiBubyBsYW5ndWFnZSBpcyBwcmVmZXJyZWQuICovCisJaWYgKCFzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNwbGl0IHRoZSBjb2xvbi1zZXBhcmF0ZWQgc3RyaW5nIG9mIHByZWZlcnJlZCBsYW5ndWFnZXMgaW50bworCSAqIGxhbmd1YWdlX3RhZ3MgYXJyYXkuCisJICovCisJZG8geworCQkvKiBjb2xsZWN0IGxhbmd1YWdlIHRhZyAqLworCQlmb3IgKDsgKnMgJiYgKGlzYWxudW0oKnMpIHx8ICpzID09ICdfJyk7IHMrKykKKwkJCXN0cmJ1Zl9hZGRjaCgmdGFnLCAqcyA9PSAnXycgPyAnLScgOiAqcyk7CisKKwkJLyogc2tpcCAuY29kZXNldCwgQG1vZGlmaWVyIGFuZCBhbnkgb3RoZXIgdW5uZWNlc3NhcnkgcGFydHMgKi8KKwkJd2hpbGUgKCpzICYmICpzICE9ICc6JykKKwkJCXMrKzsKKworCQlpZiAodGFnLmxlbikgeworCQkJbnVtX2xhbmdzKys7CisJCQlSRUFMTE9DX0FSUkFZKGxhbmd1YWdlX3RhZ3MsIG51bV9sYW5ncyk7CisJCQlsYW5ndWFnZV90YWdzW251bV9sYW5ncyAtIDFdID0gc3RyYnVmX2RldGFjaCgmdGFnLCBOVUxMKTsKKwkJCWlmIChudW1fbGFuZ3MgPj0gTUFYX0xBTkdVQUdFX1RBR1MgLSAxKSAvKiAtMSBmb3IgJyonICovCisJCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgqcysrKTsKKworCS8qIHdyaXRlIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgaW50byBidWYgKi8KKwlpZiAobnVtX2xhbmdzKSB7CisJCWludCBsYXN0X2J1Zl9sZW4gPSAwOworCQlpbnQgbWF4X3E7CisJCWludCBkZWNpbWFsX3BsYWNlczsKKwkJY2hhciBxX2Zvcm1hdFszMl07CisKKwkJLyogYWRkICcqJyAqLworCQlSRUFMTE9DX0FSUkFZKGxhbmd1YWdlX3RhZ3MsIG51bV9sYW5ncyArIDEpOworCQlsYW5ndWFnZV90YWdzW251bV9sYW5ncysrXSA9ICIqIjsgLyogaXQncyBPSzsgdGhpcyB3b24ndCBiZSBmcmVlZCAqLworCisJCS8qIGNvbXB1dGUgZGVjaW1hbF9wbGFjZXMgKi8KKwkJZm9yIChtYXhfcSA9IDEsIGRlY2ltYWxfcGxhY2VzID0gMDsKKwkJICAgICBtYXhfcSA8IG51bV9sYW5ncyAmJiBkZWNpbWFsX3BsYWNlcyA8PSBNQVhfREVDSU1BTF9QTEFDRVM7CisJCSAgICAgZGVjaW1hbF9wbGFjZXMrKywgbWF4X3EgKj0gMTApCisJCQk7CisKKwkJeHNucHJpbnRmKHFfZm9ybWF0LCBzaXplb2YocV9mb3JtYXQpLCAiO3E9MC4lJTAlZGQiLCBkZWNpbWFsX3BsYWNlcyk7CisKKwkJc3RyYnVmX2FkZHN0cihidWYsICJBY2NlcHQtTGFuZ3VhZ2U6ICIpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1fbGFuZ3M7IGkrKykgeworCQkJaWYgKGkgPiAwKQorCQkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiLCAiKTsKKworCQkJc3RyYnVmX2FkZHN0cihidWYsIGxhbmd1YWdlX3RhZ3NbaV0pOworCisJCQlpZiAoaSA+IDApCisJCQkJc3RyYnVmX2FkZGYoYnVmLCBxX2Zvcm1hdCwgbWF4X3EgLSBpKTsKKworCQkJaWYgKGJ1Zi0+bGVuID4gTUFYX0FDQ0VQVF9MQU5HVUFHRV9IRUFERVJfU0laRSkgeworCQkJCXN0cmJ1Zl9yZW1vdmUoYnVmLCBsYXN0X2J1Zl9sZW4sIGJ1Zi0+bGVuIC0gbGFzdF9idWZfbGVuKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbGFzdF9idWZfbGVuID0gYnVmLT5sZW47CisJCX0KKwl9CisKKwkvKiBmcmVlIGxhbmd1YWdlIHRhZ3MgLS0gbGFzdCBvbmUgaXMgYSBzdGF0aWMgJyonICovCisJZm9yIChpID0gMDsgaSA8IG51bV9sYW5ncyAtIDE7IGkrKykKKwkJZnJlZShsYW5ndWFnZV90YWdzW2ldKTsKKwlmcmVlKGxhbmd1YWdlX3RhZ3MpOworfQorCisvKgorICogR2V0IGFuIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgd2hpY2ggaW5kaWNhdGVzIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VzLgorICoKKyAqIEV4YW1wbGVzOgorICogICBMQU5HVUFHRT0gLT4gIiIKKyAqICAgTEFOR1VBR0U9a286ZW4gLT4gIkFjY2VwdC1MYW5ndWFnZToga28sIGVuOyBxPTAuOSwgKjsgcT0wLjEiCisgKiAgIExBTkdVQUdFPWtvX0tSLlVURi04OnNyQGxhdGluIC0+ICJBY2NlcHQtTGFuZ3VhZ2U6IGtvLUtSLCBzcjsgcT0wLjksICo7IHE9MC4xIgorICogICBMQU5HVUFHRT1rbyBMQU5HPWVuX1VTLlVURi04IC0+ICJBY2NlcHQtTGFuZ3VhZ2U6IGtvLCAqOyBxPTAuMSIKKyAqICAgTEFOR1VBR0U9IExBTkc9ZW5fVVMuVVRGLTggLT4gIkFjY2VwdC1MYW5ndWFnZTogZW4tVVMsICo7IHE9MC4xIgorICogICBMQU5HVUFHRT0gTEFORz1DIC0+ICIiCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfYWNjZXB0X2xhbmd1YWdlKHZvaWQpCit7CisJaWYgKCFjYWNoZWRfYWNjZXB0X2xhbmd1YWdlKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXdyaXRlX2FjY2VwdF9sYW5ndWFnZSgmYnVmKTsKKwkJaWYgKGJ1Zi5sZW4gPiAwKQorCQkJY2FjaGVkX2FjY2VwdF9sYW5ndWFnZSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJfQorCisJcmV0dXJuIGNhY2hlZF9hY2NlcHRfbGFuZ3VhZ2U7Cit9CisKK3N0YXRpYyB2b2lkIGh0dHBfb3B0X3JlcXVlc3RfcmVtYWluZGVyKENVUkwgKmN1cmwsIG9mZl90IHBvcykKK3sKKwljaGFyIGJ1ZlsxMjhdOworCXhzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJSJQUkl1TUFYIi0iLCAodWludG1heF90KXBvcyk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JBTkdFLCBidWYpOworfQorCisvKiBodHRwX3JlcXVlc3QoKSB0YXJnZXRzICovCisjZGVmaW5lIEhUVFBfUkVRVUVTVF9TVFJCVUYJMAorI2RlZmluZSBIVFRQX1JFUVVFU1RfRklMRQkxCisKK3N0YXRpYyBpbnQgaHR0cF9yZXF1ZXN0KGNvbnN0IGNoYXIgKnVybCwKKwkJCXZvaWQgKnJlc3VsdCwgaW50IHRhcmdldCwKKwkJCWNvbnN0IHN0cnVjdCBodHRwX2dldF9vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IGh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnMoKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmFjY2VwdF9sYW5ndWFnZTsKKwlpbnQgcmV0OworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQR0VULCAxKTsKKworCWlmIChyZXN1bHQgPT0gTlVMTCkgeworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfTk9CT0RZLCAxKTsKKwl9IGVsc2UgeworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfTk9CT0RZLCAwKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHJlc3VsdCk7CisKKwkJaWYgKHRhcmdldCA9PSBIVFRQX1JFUVVFU1RfRklMRSkgeworCQkJb2ZmX3QgcG9zbiA9IGZ0ZWxsbyhyZXN1bHQpOworCQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCisJCQkJCSBmd3JpdGUpOworCQkJaWYgKHBvc24gPiAwKQorCQkJCWh0dHBfb3B0X3JlcXVlc3RfcmVtYWluZGVyKHNsb3QtPmN1cmwsIHBvc24pOworCQl9IGVsc2UKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAorCQkJCQkgZndyaXRlX2J1ZmZlcik7CisJfQorCisJYWNjZXB0X2xhbmd1YWdlID0gZ2V0X2FjY2VwdF9sYW5ndWFnZSgpOworCisJaWYgKGFjY2VwdF9sYW5ndWFnZSkKKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGFjY2VwdF9sYW5ndWFnZSk7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJQcmFnbWE6Iik7CisJaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy0+bm9fY2FjaGUpCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiBuby1jYWNoZSIpOworCWlmIChvcHRpb25zICYmIG9wdGlvbnMtPmluaXRpYWxfcmVxdWVzdCAmJgorCSAgICBodHRwX2ZvbGxvd19jb25maWcgPT0gSFRUUF9GT0xMT1dfSU5JVElBTCkKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKKworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBidWYuYnVmKTsKKworCS8qIEFkZCBhZGRpdGlvbmFsIGhlYWRlcnMgaGVyZSAqLworCWlmIChvcHRpb25zICYmIG9wdGlvbnMtPmV4dHJhX2hlYWRlcnMpIHsKKwkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgb3B0aW9ucy0+ZXh0cmFfaGVhZGVycykgeworCQkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGl0ZW0tPnN0cmluZyk7CisJCX0KKwl9CisKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRU5DT0RJTkcsICIiKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRkFJTE9ORVJST1IsIDApOworCisJcmV0ID0gcnVuX29uZV9zbG90KHNsb3QsICZyZXN1bHRzKTsKKworCWlmIChvcHRpb25zICYmIG9wdGlvbnMtPmNvbnRlbnRfdHlwZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHJhdyA9IFNUUkJVRl9JTklUOworCQljdXJsaW5mb19zdHJidWYoc2xvdC0+Y3VybCwgQ1VSTElORk9fQ09OVEVOVF9UWVBFLCAmcmF3KTsKKwkJZXh0cmFjdF9jb250ZW50X3R5cGUoJnJhdywgb3B0aW9ucy0+Y29udGVudF90eXBlLAorCQkJCSAgICAgb3B0aW9ucy0+Y2hhcnNldCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZyYXcpOworCX0KKworCWlmIChvcHRpb25zICYmIG9wdGlvbnMtPmVmZmVjdGl2ZV91cmwpCisJCWN1cmxpbmZvX3N0cmJ1ZihzbG90LT5jdXJsLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLAorCQkJCW9wdGlvbnMtPmVmZmVjdGl2ZV91cmwpOworCisJY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlICJiYXNlIiB1cmwgdG8gYSBtb3JlIGFwcHJvcHJpYXRlIHZhbHVlLCBhcyBkZWR1Y2VkIGJ5CisgKiByZWRpcmVjdHMgc2VlbiB3aGVuIHJlcXVlc3RpbmcgYSBVUkwgc3RhcnRpbmcgd2l0aCAidXJsIi4KKyAqCisgKiBUaGUgImFza2VkIiBwYXJhbWV0ZXIgaXMgYSBVUkwgdGhhdCB3ZSBhc2tlZCBjdXJsIHRvIGFjY2VzcywgYW5kIG11c3QgYmVnaW4KKyAqIHdpdGggImJhc2UiLgorICoKKyAqIFRoZSAiZ290IiBwYXJhbWV0ZXIgaXMgdGhlIFVSTCB0aGF0IGN1cmwgcmVwb3J0ZWQgdG8gdXMgYXMgd2hlcmUgd2UgZW5kZWQKKyAqIHVwLgorICoKKyAqIFJldHVybnMgMSBpZiB3ZSB1cGRhdGVkIHRoZSBiYXNlIHVybCwgMCBvdGhlcndpc2UuCisgKgorICogT3VyIGJhc2ljIHN0cmF0ZWd5IGlzIHRvIGNvbXBhcmUgImJhc2UiIGFuZCAiYXNrZWQiIHRvIGZpbmQgdGhlIGJpdHMKKyAqIHNwZWNpZmljIHRvIG91ciByZXF1ZXN0LiBXZSB0aGVuIHN0cmlwIHRob3NlIGJpdHMgb2ZmIG9mICJnb3QiIHRvIHlpZWxkIHRoZQorICogbmV3IGJhc2UuIFNvIGZvciBleGFtcGxlLCBpZiBvdXIgYmFzZSBpcyAiaHR0cDovL2V4YW1wbGUuY29tL2Zvby5naXQiLAorICogYW5kIHdlIGFzayBmb3IgImh0dHA6Ly9leGFtcGxlLmNvbS9mb28uZ2l0L2luZm8vcmVmcyIsIHdlIG1pZ2h0IGVuZCB1cAorICogd2l0aCAiaHR0cHM6Ly9vdGhlci5leGFtcGxlLmNvbS9mb28uZ2l0L2luZm8vcmVmcyIuIFdlIHdvdWxkIHdhbnQgdGhlCisgKiBuZXcgVVJMIHRvIGJlY29tZSAiaHR0cHM6Ly9vdGhlci5leGFtcGxlLmNvbS9mb28uZ2l0Ii4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBhc3N1bWVzIGEgc2FuZSByZWRpcmVjdCBzY2hlbWUuIEl0J3MgZW50aXJlbHkgcG9zc2libGUKKyAqIGluIHRoZSBleGFtcGxlIGFib3ZlIHRvIGVuZCB1cCBhdCBhIFVSTCB0aGF0IGRvZXMgbm90IGV2ZW4gZW5kIGluCisgKiAiaW5mby9yZWZzIi4gIEluIHN1Y2ggYSBjYXNlIHdlIGRpZS4gVGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8sIHN1Y2ggYQorICogc2NoZW1lIGlzIHVubGlrZWx5IHRvIHJlcHJlc2VudCBhIHJlYWwgZ2l0IHJlcG9zaXRvcnksIGFuZCBmYWlsaW5nIHRvCisgKiByZXdyaXRlIHRoZSBiYXNlIG9wZW5zIG9wdGlvbnMgZm9yIG1hbGljaW91cyByZWRpcmVjdHMgdG8gZG8gZnVubnkgdGhpbmdzLgorICovCitzdGF0aWMgaW50IHVwZGF0ZV91cmxfZnJvbV9yZWRpcmVjdChzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJCSAgICBjb25zdCBjaGFyICphc2tlZCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZ290KQoreworCWNvbnN0IGNoYXIgKnRhaWw7CisJc2l6ZV90IG5ld19sZW47CisKKwlpZiAoIXN0cmNtcChhc2tlZCwgZ290LT5idWYpKQorCQlyZXR1cm4gMDsKKworCWlmICghc2tpcF9wcmVmaXgoYXNrZWQsIGJhc2UtPmJ1ZiwgJnRhaWwpKQorCQlCVUcoInVwZGF0ZV91cmxfZnJvbV9yZWRpcmVjdDogJXMgaXMgbm90IGEgc3VwZXJzZXQgb2YgJXMiLAorCQkgICAgYXNrZWQsIGJhc2UtPmJ1Zik7CisKKwluZXdfbGVuID0gZ290LT5sZW47CisJaWYgKCFzdHJpcF9zdWZmaXhfbWVtKGdvdC0+YnVmLCAmbmV3X2xlbiwgdGFpbCkpCisJCWRpZShfKCJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisJCSAgICAgICIgIGFza2VkIGZvcjogJXNcbiIKKwkJICAgICAgIiAgIHJlZGlyZWN0OiAlcyIpLAorCQkgICAgYXNrZWQsIGdvdC0+YnVmKTsKKworCXN0cmJ1Zl9yZXNldChiYXNlKTsKKwlzdHJidWZfYWRkKGJhc2UsIGdvdC0+YnVmLCBuZXdfbGVuKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGh0dHBfcmVxdWVzdF9yZWF1dGgoY29uc3QgY2hhciAqdXJsLAorCQkJICAgICAgIHZvaWQgKnJlc3VsdCwgaW50IHRhcmdldCwKKwkJCSAgICAgICBzdHJ1Y3QgaHR0cF9nZXRfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgcmV0ID0gaHR0cF9yZXF1ZXN0KHVybCwgcmVzdWx0LCB0YXJnZXQsIG9wdGlvbnMpOworCisJaWYgKHJldCAhPSBIVFRQX09LICYmIHJldCAhPSBIVFRQX1JFQVVUSCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChvcHRpb25zICYmIG9wdGlvbnMtPmVmZmVjdGl2ZV91cmwgJiYgb3B0aW9ucy0+YmFzZV91cmwpIHsKKwkJaWYgKHVwZGF0ZV91cmxfZnJvbV9yZWRpcmVjdChvcHRpb25zLT5iYXNlX3VybCwKKwkJCQkJICAgICB1cmwsIG9wdGlvbnMtPmVmZmVjdGl2ZV91cmwpKSB7CisJCQljcmVkZW50aWFsX2Zyb21fdXJsKCZodHRwX2F1dGgsIG9wdGlvbnMtPmJhc2VfdXJsLT5idWYpOworCQkJdXJsID0gb3B0aW9ucy0+ZWZmZWN0aXZlX3VybC0+YnVmOworCQl9CisJfQorCisJaWYgKHJldCAhPSBIVFRQX1JFQVVUSCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogVGhlIHByZXZpb3VzIHJlcXVlc3QgbWF5IGhhdmUgcHV0IGNydWZ0IGludG8gb3VyIG91dHB1dCBzdHJlYW07IHdlCisJICogc2hvdWxkIGNsZWFyIGl0IG91dCBiZWZvcmUgbWFraW5nIG91ciBuZXh0IHJlcXVlc3QuCisJICovCisJc3dpdGNoICh0YXJnZXQpIHsKKwljYXNlIEhUVFBfUkVRVUVTVF9TVFJCVUY6CisJCXN0cmJ1Zl9yZXNldChyZXN1bHQpOworCQlicmVhazsKKwljYXNlIEhUVFBfUkVRVUVTVF9GSUxFOgorCQlpZiAoZmZsdXNoKHJlc3VsdCkpIHsKKwkJCWVycm9yX2Vycm5vKCJ1bmFibGUgdG8gZmx1c2ggYSBmaWxlIik7CisJCQlyZXR1cm4gSFRUUF9TVEFSVF9GQUlMRUQ7CisJCX0KKwkJcmV3aW5kKHJlc3VsdCk7CisJCWlmIChmdHJ1bmNhdGUoZmlsZW5vKHJlc3VsdCksIDApIDwgMCkgeworCQkJZXJyb3JfZXJybm8oInVuYWJsZSB0byB0cnVuY2F0ZSBhIGZpbGUiKTsKKwkJCXJldHVybiBIVFRQX1NUQVJUX0ZBSUxFRDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoIlVua25vd24gaHR0cF9yZXF1ZXN0IHRhcmdldCIpOworCX0KKworCWNyZWRlbnRpYWxfZmlsbCgmaHR0cF9hdXRoKTsKKworCXJldHVybiBodHRwX3JlcXVlc3QodXJsLCByZXN1bHQsIHRhcmdldCwgb3B0aW9ucyk7Cit9CisKK2ludCBodHRwX2dldF9zdHJidWYoY29uc3QgY2hhciAqdXJsLAorCQkgICAgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0LAorCQkgICAgc3RydWN0IGh0dHBfZ2V0X29wdGlvbnMgKm9wdGlvbnMpCit7CisJcmV0dXJuIGh0dHBfcmVxdWVzdF9yZWF1dGgodXJsLCByZXN1bHQsIEhUVFBfUkVRVUVTVF9TVFJCVUYsIG9wdGlvbnMpOworfQorCisvKgorICogRG93bmxvYWRzIGEgVVJMIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAqCisgKiBJZiBhIHByZXZpb3VzIGludGVycnVwdGVkIGRvd25sb2FkIGlzIGRldGVjdGVkIChpLmUuIGEgcHJldmlvdXMgdGVtcG9yYXJ5CisgKiBmaWxlIGlzIHN0aWxsIGFyb3VuZCkgdGhlIGRvd25sb2FkIGlzIHJlc3VtZWQuCisgKi8KK3N0YXRpYyBpbnQgaHR0cF9nZXRfZmlsZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJIHN0cnVjdCBodHRwX2dldF9vcHRpb25zICpvcHRpb25zKQoreworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiB0bXBmaWxlID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqcmVzdWx0OworCisJc3RyYnVmX2FkZGYoJnRtcGZpbGUsICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCXJlc3VsdCA9IGZvcGVuKHRtcGZpbGUuYnVmLCAiYSIpOworCWlmICghcmVzdWx0KSB7CisJCWVycm9yKCJVbmFibGUgdG8gb3BlbiBsb2NhbCBmaWxlICVzIiwgdG1wZmlsZS5idWYpOworCQlyZXQgPSBIVFRQX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmV0ID0gaHR0cF9yZXF1ZXN0X3JlYXV0aCh1cmwsIHJlc3VsdCwgSFRUUF9SRVFVRVNUX0ZJTEUsIG9wdGlvbnMpOworCWZjbG9zZShyZXN1bHQpOworCisJaWYgKHJldCA9PSBIVFRQX09LICYmIGZpbmFsaXplX29iamVjdF9maWxlKHRtcGZpbGUuYnVmLCBmaWxlbmFtZSkpCisJCXJldCA9IEhUVFBfRVJST1I7CitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCBodHRwX2dldF9vcHRpb25zIG9wdGlvbnMgPSB7MH07CisJY2hhciAqdXJsOworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IC0xOworCisJb3B0aW9ucy5ub19jYWNoZSA9IDE7CisKKwl1cmwgPSBxdW90ZV9yZWZfdXJsKGJhc2UsIHJlZi0+bmFtZSk7CisJaWYgKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWZmZXIsICZvcHRpb25zKSA9PSBIVFRQX09LKSB7CisJCXN0cmJ1Zl9ydHJpbSgmYnVmZmVyKTsKKwkJaWYgKGJ1ZmZlci5sZW4gPT0gdGhlX2hhc2hfYWxnby0+aGV4c3opCisJCQlyZXQgPSBnZXRfb2lkX2hleChidWZmZXIuYnVmLCAmcmVmLT5vbGRfb2lkKTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoYnVmZmVyLmJ1ZiwgInJlZjogIikpIHsKKwkJCXJlZi0+c3ltcmVmID0geHN0cmR1cChidWZmZXIuYnVmICsgNSk7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJZnJlZSh1cmwpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEhlbHBlcnMgZm9yIGZldGNoaW5nIHBhY2tzICovCitzdGF0aWMgY2hhciAqZmV0Y2hfcGFja19pbmRleCh1bnNpZ25lZCBjaGFyICpoYXNoLCBjb25zdCBjaGFyICpiYXNlX3VybCkKK3sKKwljaGFyICp1cmwsICp0bXA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChodHRwX2lzX3ZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBpbmRleCBmb3IgcGFjayAlc1xuIiwgaGFzaF90b19oZXgoaGFzaCkpOworCisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIGJhc2VfdXJsKTsKKwlzdHJidWZfYWRkZigmYnVmLCAib2JqZWN0cy9wYWNrL3BhY2stJXMuaWR4IiwgaGFzaF90b19oZXgoaGFzaCkpOworCXVybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMudGVtcCIsIHNoYTFfcGFja19pbmRleF9uYW1lKGhhc2gpKTsKKwl0bXAgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJaWYgKGh0dHBfZ2V0X2ZpbGUodXJsLCB0bXAsIE5VTEwpICE9IEhUVFBfT0spIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBpbmRleCAlcyIsIHVybCk7CisJCUZSRUVfQU5EX05VTEwodG1wKTsKKwl9CisKKwlmcmVlKHVybCk7CisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIGludCBmZXRjaF9hbmRfc2V0dXBfcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tzX2hlYWQsCisJdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqYmFzZV91cmwpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKm5ld19wYWNrOworCWNoYXIgKnRtcF9pZHggPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAoaGFzX3BhY2tfaW5kZXgoc2hhMSkpIHsKKwkJbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEsIHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpKTsKKwkJaWYgKCFuZXdfcGFjaykKKwkJCXJldHVybiAtMTsgLyogcGFyc2VfcGFja19pbmRleCgpIGFscmVhZHkgaXNzdWVkIGVycm9yIG1lc3NhZ2UgKi8KKwkJZ290byBhZGRfcGFjazsKKwl9CisKKwl0bXBfaWR4ID0gZmV0Y2hfcGFja19pbmRleChzaGExLCBiYXNlX3VybCk7CisJaWYgKCF0bXBfaWR4KQorCQlyZXR1cm4gLTE7CisKKwluZXdfcGFjayA9IHBhcnNlX3BhY2tfaW5kZXgoc2hhMSwgdG1wX2lkeCk7CisJaWYgKCFuZXdfcGFjaykgeworCQl1bmxpbmsodG1wX2lkeCk7CisJCWZyZWUodG1wX2lkeCk7CisKKwkJcmV0dXJuIC0xOyAvKiBwYXJzZV9wYWNrX2luZGV4KCkgYWxyZWFkeSBpc3N1ZWQgZXJyb3IgbWVzc2FnZSAqLworCX0KKworCXJldCA9IHZlcmlmeV9wYWNrX2luZGV4KG5ld19wYWNrKTsKKwlpZiAoIXJldCkgeworCQljbG9zZV9wYWNrX2luZGV4KG5ld19wYWNrKTsKKwkJcmV0ID0gZmluYWxpemVfb2JqZWN0X2ZpbGUodG1wX2lkeCwgc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSkpOworCX0KKwlmcmVlKHRtcF9pZHgpOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKKworYWRkX3BhY2s6CisJbmV3X3BhY2stPm5leHQgPSAqcGFja3NfaGVhZDsKKwkqcGFja3NfaGVhZCA9IG5ld19wYWNrOworCXJldHVybiAwOworfQorCitpbnQgaHR0cF9nZXRfaW5mb19wYWNrcyhjb25zdCBjaGFyICpiYXNlX3VybCwgc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkKQoreworCXN0cnVjdCBodHRwX2dldF9vcHRpb25zIG9wdGlvbnMgPSB7MH07CisJaW50IHJldCA9IDA7CisJY2hhciAqdXJsOworCWNvbnN0IGNoYXIgKmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCAib2JqZWN0cy9pbmZvL3BhY2tzIik7CisJdXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCW9wdGlvbnMubm9fY2FjaGUgPSAxOworCXJldCA9IGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWYsICZvcHRpb25zKTsKKwlpZiAocmV0ICE9IEhUVFBfT0spCisJCWdvdG8gY2xlYW51cDsKKworCWRhdGEgPSBidWYuYnVmOworCXdoaWxlICgqZGF0YSkgeworCQlpZiAoc2tpcF9wcmVmaXgoZGF0YSwgIlAgcGFjay0iLCAmZGF0YSkgJiYKKwkJICAgICFwYXJzZV9vaWRfaGV4KGRhdGEsICZvaWQsICZkYXRhKSAmJgorCQkgICAgc2tpcF9wcmVmaXgoZGF0YSwgIi5wYWNrIiwgJmRhdGEpICYmCisJCSAgICAoKmRhdGEgPT0gJ1xuJyB8fCAqZGF0YSA9PSAnXDAnKSkgeworCQkJZmV0Y2hfYW5kX3NldHVwX3BhY2tfaW5kZXgocGFja3NfaGVhZCwgb2lkLmhhc2gsIGJhc2VfdXJsKTsKKwkJfSBlbHNlIHsKKwkJCWRhdGEgPSBzdHJjaHJudWwoZGF0YSwgJ1xuJyk7CisJCX0KKwkJaWYgKCpkYXRhKQorCQkJZGF0YSsrOyAvKiBza2lwIHBhc3QgbmV3bGluZSAqLworCX0KKworY2xlYW51cDoKKwlmcmVlKHVybCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcSkKK3sKKwlpZiAocHJlcS0+cGFja2ZpbGUgIT0gTlVMTCkgeworCQlmY2xvc2UocHJlcS0+cGFja2ZpbGUpOworCQlwcmVxLT5wYWNrZmlsZSA9IE5VTEw7CisJfQorCXByZXEtPnNsb3QgPSBOVUxMOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmVxLT50bXBmaWxlKTsKKwlmcmVlKHByZXEtPnVybCk7CisJZnJlZShwcmVxKTsKK30KKworaW50IGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKipsc3Q7CisJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBwcmVxLT50YXJnZXQ7CisJY2hhciAqdG1wX2lkeDsKKwlzaXplX3QgbGVuOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGlwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY2xvc2VfcGFja19pbmRleChwKTsKKworCWZjbG9zZShwcmVxLT5wYWNrZmlsZSk7CisJcHJlcS0+cGFja2ZpbGUgPSBOVUxMOworCisJbHN0ID0gcHJlcS0+bHN0OworCXdoaWxlICgqbHN0ICE9IHApCisJCWxzdCA9ICYoKCpsc3QpLT5uZXh0KTsKKwkqbHN0ID0gKCpsc3QpLT5uZXh0OworCisJaWYgKCFzdHJpcF9zdWZmaXgocHJlcS0+dG1wZmlsZS5idWYsICIucGFjay50ZW1wIiwgJmxlbikpCisJCUJVRygicGFjayB0bXBmaWxlIGRvZXMgbm90IGVuZCBpbiAucGFjay50ZW1wPyIpOworCXRtcF9pZHggPSB4c3RyZm10KCIlLipzLmlkeC50ZW1wIiwgKGludClsZW4sIHByZXEtPnRtcGZpbGUuYnVmKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmaXAuYXJncywgImluZGV4LXBhY2siKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZpcC5hcmdzLCAiLW8iLCB0bXBfaWR4LCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2goJmlwLmFyZ3MsIHByZXEtPnRtcGZpbGUuYnVmKTsKKwlpcC5naXRfY21kID0gMTsKKwlpcC5ub19zdGRpbiA9IDE7CisJaXAubm9fc3Rkb3V0ID0gMTsKKworCWlmIChydW5fY29tbWFuZCgmaXApKSB7CisJCXVubGluayhwcmVxLT50bXBmaWxlLmJ1Zik7CisJCXVubGluayh0bXBfaWR4KTsKKwkJZnJlZSh0bXBfaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXVubGluayhzaGExX3BhY2tfaW5kZXhfbmFtZShwLT5oYXNoKSk7CisKKwlpZiAoZmluYWxpemVfb2JqZWN0X2ZpbGUocHJlcS0+dG1wZmlsZS5idWYsIHNoYTFfcGFja19uYW1lKHAtPmhhc2gpKQorCSB8fCBmaW5hbGl6ZV9vYmplY3RfZmlsZSh0bXBfaWR4LCBzaGExX3BhY2tfaW5kZXhfbmFtZShwLT5oYXNoKSkpIHsKKwkJZnJlZSh0bXBfaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWluc3RhbGxfcGFja2VkX2dpdCh0aGVfcmVwb3NpdG9yeSwgcCk7CisJZnJlZSh0bXBfaWR4KTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpuZXdfaHR0cF9wYWNrX3JlcXVlc3QoCisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldCwgY29uc3QgY2hhciAqYmFzZV91cmwpCit7CisJb2ZmX3QgcHJldl9wb3NuID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcTsKKworCXByZXEgPSB4Y2FsbG9jKDEsIHNpemVvZigqcHJlcSkpOworCXN0cmJ1Zl9pbml0KCZwcmVxLT50bXBmaWxlLCAwKTsKKwlwcmVxLT50YXJnZXQgPSB0YXJnZXQ7CisKKwllbmRfdXJsX3dpdGhfc2xhc2goJmJ1ZiwgYmFzZV91cmwpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJvYmplY3RzL3BhY2svcGFjay0lcy5wYWNrIiwKKwkJaGFzaF90b19oZXgodGFyZ2V0LT5oYXNoKSk7CisJcHJlcS0+dXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCXN0cmJ1Zl9hZGRmKCZwcmVxLT50bXBmaWxlLCAiJXMudGVtcCIsIHNoYTFfcGFja19uYW1lKHRhcmdldC0+aGFzaCkpOworCXByZXEtPnBhY2tmaWxlID0gZm9wZW4ocHJlcS0+dG1wZmlsZS5idWYsICJhIik7CisJaWYgKCFwcmVxLT5wYWNrZmlsZSkgeworCQllcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayIsCisJCSAgICAgIHByZXEtPnRtcGZpbGUuYnVmKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwlwcmVxLT5zbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHByZXEtPnBhY2tmaWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBwcmVxLT51cmwpOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLAorCQlub19wcmFnbWFfaGVhZGVyKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAorCSAqIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZgorCSAqLworCXByZXZfcG9zbiA9IGZ0ZWxsbyhwcmVxLT5wYWNrZmlsZSk7CisJaWYgKHByZXZfcG9zbj4wKSB7CisJCWlmIChodHRwX2lzX3ZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVzdW1pbmcgZmV0Y2ggb2YgcGFjayAlcyBhdCBieXRlICUiUFJJdU1BWCJcbiIsCisJCQkJaGFzaF90b19oZXgodGFyZ2V0LT5oYXNoKSwKKwkJCQkodWludG1heF90KXByZXZfcG9zbik7CisJCWh0dHBfb3B0X3JlcXVlc3RfcmVtYWluZGVyKHByZXEtPnNsb3QtPmN1cmwsIHByZXZfcG9zbik7CisJfQorCisJcmV0dXJuIHByZXE7CisKK2Fib3J0OgorCXN0cmJ1Zl9yZWxlYXNlKCZwcmVxLT50bXBmaWxlKTsKKwlmcmVlKHByZXEtPnVybCk7CisJZnJlZShwcmVxKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgb2JqZWN0cyAobG9vc2UpICovCitzdGF0aWMgc2l6ZV90IGZ3cml0ZV9zaGExX2ZpbGUoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCWludCBwb3NuID0gMDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSA9IGRhdGE7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBmcmVxLT5zbG90OworCisJaWYgKHNsb3QpIHsKKwkJQ1VSTGNvZGUgYyA9IGN1cmxfZWFzeV9nZXRpbmZvKHNsb3QtPmN1cmwsIENVUkxJTkZPX0hUVFBfQ09ERSwKKwkJCQkJCSZzbG90LT5odHRwX2NvZGUpOworCQlpZiAoYyAhPSBDVVJMRV9PSykKKwkJCUJVRygiY3VybF9lYXN5X2dldGluZm8gZm9yIEhUVFAgY29kZSBmYWlsZWQ6ICVzIiwKKwkJCQljdXJsX2Vhc3lfc3RyZXJyb3IoYykpOworCQlpZiAoc2xvdC0+aHR0cF9jb2RlID49IDMwMCkKKwkJCXJldHVybiBubWVtYjsKKwl9CisKKwlkbyB7CisJCXNzaXplX3QgcmV0dmFsID0geHdyaXRlKGZyZXEtPmxvY2FsZmlsZSwKKwkJCQkJKGNoYXIgKikgcHRyICsgcG9zbiwgc2l6ZSAtIHBvc24pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiBwb3NuIC8gZWx0c2l6ZTsKKwkJcG9zbiArPSByZXR2YWw7CisJfSB3aGlsZSAocG9zbiA8IHNpemUpOworCisJZnJlcS0+c3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKKwlmcmVxLT5zdHJlYW0ubmV4dF9pbiA9ICh2b2lkICopcHRyOworCWRvIHsKKwkJZnJlcS0+c3RyZWFtLm5leHRfb3V0ID0gZXhwbjsKKwkJZnJlcS0+c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihleHBuKTsKKwkJZnJlcS0+enJldCA9IGdpdF9pbmZsYXRlKCZmcmVxLT5zdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmZnJlcS0+YywgZXhwbiwKKwkJCQkJIHNpemVvZihleHBuKSAtIGZyZXEtPnN0cmVhbS5hdmFpbF9vdXQpOworCX0gd2hpbGUgKGZyZXEtPnN0cmVhbS5hdmFpbF9pbiAmJiBmcmVxLT56cmV0ID09IFpfT0spOworCXJldHVybiBubWVtYjsKK30KKworc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKm5ld19odHRwX29iamVjdF9yZXF1ZXN0KGNvbnN0IGNoYXIgKmJhc2VfdXJsLAorCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwljaGFyICpoZXggPSBvaWRfdG9faGV4KG9pZCk7CisJc3RydWN0IHN0cmJ1ZiBmaWxlbmFtZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcHJldmZpbGUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcHJldmxvY2FsOworCWNoYXIgcHJldl9idWZbUFJFVl9CVUZfU0laRV07CisJc3NpemVfdCBwcmV2X3JlYWQgPSAwOworCW9mZl90IHByZXZfcG9zbiA9IDA7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXE7CisKKwlmcmVxID0geGNhbGxvYygxLCBzaXplb2YoKmZyZXEpKTsKKwlzdHJidWZfaW5pdCgmZnJlcS0+dG1wZmlsZSwgMCk7CisJb2lkY3B5KCZmcmVxLT5vaWQsIG9pZCk7CisJZnJlcS0+bG9jYWxmaWxlID0gLTE7CisKKwlsb29zZV9vYmplY3RfcGF0aCh0aGVfcmVwb3NpdG9yeSwgJmZpbGVuYW1lLCBvaWQpOworCXN0cmJ1Zl9hZGRmKCZmcmVxLT50bXBmaWxlLCAiJXMudGVtcCIsIGZpbGVuYW1lLmJ1Zik7CisKKwlzdHJidWZfYWRkZigmcHJldmZpbGUsICIlcy5wcmV2IiwgZmlsZW5hbWUuYnVmKTsKKwl1bmxpbmtfb3Jfd2FybihwcmV2ZmlsZS5idWYpOworCXJlbmFtZShmcmVxLT50bXBmaWxlLmJ1ZiwgcHJldmZpbGUuYnVmKTsKKwl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKKworCWlmIChmcmVxLT5sb2NhbGZpbGUgIT0gLTEpCisJCWVycm9yKCJmZCBsZWFrYWdlIGluIHN0YXJ0OiAlZCIsIGZyZXEtPmxvY2FsZmlsZSk7CisJZnJlcS0+bG9jYWxmaWxlID0gb3BlbihmcmVxLT50bXBmaWxlLmJ1ZiwKKwkJCSAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCS8qCisJICogVGhpcyBjb3VsZCBoYXZlIGZhaWxlZCBkdWUgdG8gdGhlICJsYXp5IGRpcmVjdG9yeSBjcmVhdGlvbiI7CisJICogdHJ5IHRvIG1rZGlyIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LgorCSAqLworCWlmIChmcmVxLT5sb2NhbGZpbGUgPCAwICYmIGVycm5vID09IEVOT0VOVCkgeworCQljaGFyICpkaXIgPSBzdHJyY2hyKGZyZXEtPnRtcGZpbGUuYnVmLCAnLycpOworCQlpZiAoZGlyKSB7CisJCQkqZGlyID0gMDsKKwkJCW1rZGlyKGZyZXEtPnRtcGZpbGUuYnVmLCAwNzc3KTsKKwkJCSpkaXIgPSAnLyc7CisJCX0KKwkJZnJlcS0+bG9jYWxmaWxlID0gb3BlbihmcmVxLT50bXBmaWxlLmJ1ZiwKKwkJCQkgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwl9CisKKwlpZiAoZnJlcS0+bG9jYWxmaWxlIDwgMCkgeworCQllcnJvcl9lcnJubygiQ291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlICVzIiwKKwkJCSAgICBmcmVxLT50bXBmaWxlLmJ1Zik7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJZ2l0X2luZmxhdGVfaW5pdCgmZnJlcS0+c3RyZWFtKTsKKworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmZyZXEtPmMpOworCisJZnJlcS0+dXJsID0gZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGJhc2VfdXJsLCBoZXgsIDApOworCisJLyoKKwkgKiBJZiBhIHByZXZpb3VzIHRlbXAgZmlsZSBpcyBwcmVzZW50LCBwcm9jZXNzIHdoYXQgd2FzIGFscmVhZHkKKwkgKiBmZXRjaGVkLgorCSAqLworCXByZXZsb2NhbCA9IG9wZW4ocHJldmZpbGUuYnVmLCBPX1JET05MWSk7CisJaWYgKHByZXZsb2NhbCAhPSAtMSkgeworCQlkbyB7CisJCQlwcmV2X3JlYWQgPSB4cmVhZChwcmV2bG9jYWwsIHByZXZfYnVmLCBQUkVWX0JVRl9TSVpFKTsKKwkJCWlmIChwcmV2X3JlYWQ+MCkgeworCQkJCWlmIChmd3JpdGVfc2hhMV9maWxlKHByZXZfYnVmLAorCQkJCQkJICAgICAxLAorCQkJCQkJICAgICBwcmV2X3JlYWQsCisJCQkJCQkgICAgIGZyZXEpID09IHByZXZfcmVhZCkgeworCQkJCQlwcmV2X3Bvc24gKz0gcHJldl9yZWFkOworCQkJCX0gZWxzZSB7CisJCQkJCXByZXZfcmVhZCA9IC0xOworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAocHJldl9yZWFkID4gMCk7CisJCWNsb3NlKHByZXZsb2NhbCk7CisJfQorCXVubGlua19vcl93YXJuKHByZXZmaWxlLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnByZXZmaWxlKTsKKworCS8qCisJICogUmVzZXQgaW5mbGF0ZS9TSEExIGlmIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBwcmV2aW91cyB0ZW1wCisJICogZmlsZTsgYWxzbyByZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9jYWwgZmlsZS4KKwkgKi8KKwlpZiAocHJldl9yZWFkID09IC0xKSB7CisJCW1lbXNldCgmZnJlcS0+c3RyZWFtLCAwLCBzaXplb2YoZnJlcS0+c3RyZWFtKSk7CisJCWdpdF9pbmZsYXRlX2luaXQoJmZyZXEtPnN0cmVhbSk7CisJCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmZyZXEtPmMpOworCQlpZiAocHJldl9wb3NuPjApIHsKKwkJCXByZXZfcG9zbiA9IDA7CisJCQlsc2VlayhmcmVxLT5sb2NhbGZpbGUsIDAsIFNFRUtfU0VUKTsKKwkJCWlmIChmdHJ1bmNhdGUoZnJlcS0+bG9jYWxmaWxlLCAwKSA8IDApIHsKKwkJCQllcnJvcl9lcnJubygiQ291bGRuJ3QgdHJ1bmNhdGUgdGVtcG9yYXJ5IGZpbGUgJXMiLAorCQkJCQkgICAgZnJlcS0+dG1wZmlsZS5idWYpOworCQkJCWdvdG8gYWJvcnQ7CisJCQl9CisJCX0KKwl9CisKKwlmcmVxLT5zbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgZnJlcSk7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAwKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBmcmVxLT5lcnJvcnN0cik7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgZnJlcS0+dXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBkYXRhIGZyb20gYSBwcmV2aW91cyBmZXRjaAorCSAqIGF0dGVtcHQsIG9ubHkgZmV0Y2ggdGhlIGRhdGEgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlLgorCSAqLworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoaHR0cF9pc192ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlc3VtaW5nIGZldGNoIG9mIG9iamVjdCAlcyBhdCBieXRlICUiUFJJdU1BWCJcbiIsCisJCQkJaGV4LCAodWludG1heF90KXByZXZfcG9zbik7CisJCWh0dHBfb3B0X3JlcXVlc3RfcmVtYWluZGVyKGZyZXEtPnNsb3QtPmN1cmwsIHByZXZfcG9zbik7CisJfQorCisJcmV0dXJuIGZyZXE7CisKK2Fib3J0OgorCXN0cmJ1Zl9yZWxlYXNlKCZwcmV2ZmlsZSk7CisJZnJlZShmcmVxLT51cmwpOworCWZyZWUoZnJlcSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCWlmIChmcmVxLT5zbG90ID09IE5VTEwpCisJCXJldHVybjsKKwlmcmVxLT5jdXJsX3Jlc3VsdCA9IGZyZXEtPnNsb3QtPmN1cmxfcmVzdWx0OworCWZyZXEtPmh0dHBfY29kZSA9IGZyZXEtPnNsb3QtPmh0dHBfY29kZTsKKwlmcmVxLT5zbG90ID0gTlVMTDsKK30KKworaW50IGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBzdHJidWYgZmlsZW5hbWUgPSBTVFJCVUZfSU5JVDsKKworCWNsb3NlKGZyZXEtPmxvY2FsZmlsZSk7CisJZnJlcS0+bG9jYWxmaWxlID0gLTE7CisKKwlwcm9jZXNzX2h0dHBfb2JqZWN0X3JlcXVlc3QoZnJlcSk7CisKKwlpZiAoZnJlcS0+aHR0cF9jb2RlID09IDQxNikgeworCQl3YXJuaW5nKCJyZXF1ZXN0ZWQgcmFuZ2UgaW52YWxpZDsgd2UgbWF5IGFscmVhZHkgaGF2ZSBhbGwgdGhlIGRhdGEuIik7CisJfSBlbHNlIGlmIChmcmVxLT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQlpZiAoc3RhdChmcmVxLT50bXBmaWxlLmJ1ZiwgJnN0KSA9PSAwKQorCQkJaWYgKHN0LnN0X3NpemUgPT0gMCkKKwkJCQl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlLmJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisKKwlnaXRfaW5mbGF0ZV9lbmQoJmZyZXEtPnN0cmVhbSk7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4oZnJlcS0+cmVhbF9vaWQuaGFzaCwgJmZyZXEtPmMpOworCWlmIChmcmVxLT56cmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlLmJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFvaWRlcSgmZnJlcS0+b2lkLCAmZnJlcS0+cmVhbF9vaWQpKSB7CisJCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUuYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKwlsb29zZV9vYmplY3RfcGF0aCh0aGVfcmVwb3NpdG9yeSwgJmZpbGVuYW1lLCAmZnJlcS0+b2lkKTsKKwlmcmVxLT5yZW5hbWUgPSBmaW5hbGl6ZV9vYmplY3RfZmlsZShmcmVxLT50bXBmaWxlLmJ1ZiwgZmlsZW5hbWUuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZmlsZW5hbWUpOworCisJcmV0dXJuIGZyZXEtPnJlbmFtZTsKK30KKwordm9pZCBhYm9ydF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCXVubGlua19vcl93YXJuKGZyZXEtPnRtcGZpbGUuYnVmKTsKKworCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChmcmVxKTsKK30KKwordm9pZCByZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJaWYgKGZyZXEtPmxvY2FsZmlsZSAhPSAtMSkgeworCQljbG9zZShmcmVxLT5sb2NhbGZpbGUpOworCQlmcmVxLT5sb2NhbGZpbGUgPSAtMTsKKwl9CisJRlJFRV9BTkRfTlVMTChmcmVxLT51cmwpOworCWlmIChmcmVxLT5zbG90ICE9IE5VTEwpIHsKKwkJZnJlcS0+c2xvdC0+Y2FsbGJhY2tfZnVuYyA9IE5VTEw7CisJCWZyZXEtPnNsb3QtPmNhbGxiYWNrX2RhdGEgPSBOVUxMOworCQlyZWxlYXNlX2FjdGl2ZV9zbG90KGZyZXEtPnNsb3QpOworCQlmcmVxLT5zbG90ID0gTlVMTDsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmZyZXEtPnRtcGZpbGUpOworfQpkaWZmIC0tZ2l0IGEvaHR0cC5oIGIvaHR0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGFkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9odHRwLmgKQEAgLTAsMCArMSwyNTcgQEAKKyNpZm5kZWYgSFRUUF9ICisjZGVmaW5lIEhUVFBfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgPGN1cmwvZWFzeS5oPgorCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAidXJsLmgiCisKKy8qCisgKiBXZSBkZXRlY3QgYmFzZWQgb24gdGhlIGNVUkwgdmVyc2lvbiBpZiBtdWx0aS10cmFuc2ZlciBpcworICogdXNhYmxlIGluIHRoaXMgaW1wbGVtZW50YXRpb24gYW5kIGRlZmluZSB0aGlzIHN5bWJvbCBhY2NvcmRpbmdseS4KKyAqIFRoaXMgc2hvdWxkbid0IGJlIHNldCBieSB0aGUgTWFrZWZpbGUgb3IgYnkgdGhlIHVzZXIgKGUuZy4gdmlhIENGTEFHUykuCisgKi8KKyN1bmRlZiBVU0VfQ1VSTF9NVUxUSQorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTAwMAorI2RlZmluZSBVU0VfQ1VSTF9NVUxUSQorI2RlZmluZSBERUZBVUxUX01BWF9SRVFVRVNUUyA1CisjZW5kaWYKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MDcwNAorI2RlZmluZSBjdXJsX2dsb2JhbF9jbGVhbnVwKCkgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MDgwMAorI2RlZmluZSBjdXJsX2dsb2JhbF9pbml0KGEpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2VsaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MGMwMAorI2RlZmluZSBjdXJsX2dsb2JhbF9pbml0KGEpIGN1cmxfZ2xvYmFsX2luaXRfbWVtKGEsIHhtYWxsb2MsIGZyZWUsIFwKKwkJCQkJCXhyZWFsbG9jLCB4c3RyZHVwLCB4Y2FsbG9jKQorI2VuZGlmCisKKyNpZiAoTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcwYzA0KSB8fCAoTElCQ1VSTF9WRVJTSU9OX05VTSA9PSAweDA3MTAwMCkKKyNkZWZpbmUgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorI2VuZGlmCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzBhMDMKKyNkZWZpbmUgQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUiBDVVJMRV9IVFRQX05PVF9GT1VORAorI2VuZGlmCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzBjMDMKKyNkZWZpbmUgTk9fQ1VSTF9JT0NUTAorI2VuZGlmCisKKy8qCisgKiBDVVJMT1BUX1VTRV9TU0wgd2FzIGtub3duIGFzIENVUkxPUFRfRlRQX1NTTCB1cCB0byA3LjE2LjQsCisgKiBhbmQgdGhlIGNvbnN0YW50cyB3ZXJlIGtub3duIGFzIENVUkxGVFBTU0xfKgorKi8KKyNpZiAhZGVmaW5lZChDVVJMT1BUX1VTRV9TU0wpICYmIGRlZmluZWQoQ1VSTE9QVF9GVFBfU1NMKQorI2RlZmluZSBDVVJMT1BUX1VTRV9TU0wgQ1VSTE9QVF9GVFBfU1NMCisjZGVmaW5lIENVUkxVU0VTU0xfVFJZIENVUkxGVFBTU0xfVFJZCisjZW5kaWYKKworc3RydWN0IHNsb3RfcmVzdWx0cyB7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJbG9uZyBodHRwX2NvZGU7CisJbG9uZyBhdXRoX2F2YWlsOworCWxvbmcgaHR0cF9jb25uZWN0Y29kZTsKK307CisKK3N0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90IHsKKwlDVVJMICpjdXJsOworCWludCBpbl91c2U7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJbG9uZyBodHRwX2NvZGU7CisJaW50ICpmaW5pc2hlZDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzICpyZXN1bHRzOworCXZvaWQgKmNhbGxiYWNrX2RhdGE7CisJdm9pZCAoKmNhbGxiYWNrX2Z1bmMpKHZvaWQgKmRhdGEpOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpuZXh0OworfTsKKworc3RydWN0IGJ1ZmZlciB7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisJc2l6ZV90IHBvc247Cit9OworCisvKiBDdXJsIHJlcXVlc3QgcmVhZC93cml0ZSBjYWxsYmFja3MgKi8KK3NpemVfdCBmcmVhZF9idWZmZXIoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJidWYpOworc2l6ZV90IGZ3cml0ZV9idWZmZXIoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJidWYpOworc2l6ZV90IGZ3cml0ZV9udWxsKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorY3VybGlvZXJyIGlvY3RsX2J1ZmZlcihDVVJMICpoYW5kbGUsIGludCBjbWQsIHZvaWQgKmNsaWVudHApOworI2VuZGlmCisKKy8qIFNsb3QgbGlmZWN5Y2xlIGZ1bmN0aW9ucyAqLworc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmdldF9hY3RpdmVfc2xvdCh2b2lkKTsKK2ludCBzdGFydF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCk7Cit2b2lkIHJ1bl9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCk7Cit2b2lkIGZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKHZvaWQpOworCisvKgorICogVGhpcyB3aWxsIHJ1biBvbmUgc2xvdCB0byBjb21wbGV0aW9uIGluIGEgYmxvY2tpbmcgbWFubmVyLCBzaW1pbGFyIHRvIGhvdworICogY3VybF9lYXN5X3BlcmZvcm0gd291bGQgd29yayAoYnV0IHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoYXQsIGJlY2F1c2UKKyAqIHdlIGRvIG5vdCB3YW50IHRvIGludGVybWluZ2xlIGNhbGxzIHRvIGN1cmxfbXVsdGkgYW5kIGN1cmxfZWFzeSkuCisgKgorICovCitpbnQgcnVuX29uZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90LAorCQkgc3RydWN0IHNsb3RfcmVzdWx0cyAqcmVzdWx0cyk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQordm9pZCBmaWxsX2FjdGl2ZV9zbG90cyh2b2lkKTsKK3ZvaWQgYWRkX2ZpbGxfZnVuY3Rpb24odm9pZCAqZGF0YSwgaW50ICgqZmlsbCkodm9pZCAqKSk7Cit2b2lkIHN0ZXBfYWN0aXZlX3Nsb3RzKHZvaWQpOworI2VuZGlmCisKK3ZvaWQgaHR0cF9pbml0KHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsLAorCSAgICAgICBpbnQgcHJvYWN0aXZlX2F1dGgpOwordm9pZCBodHRwX2NsZWFudXAodm9pZCk7CitzdHJ1Y3QgY3VybF9zbGlzdCAqaHR0cF9jb3B5X2RlZmF1bHRfaGVhZGVycyh2b2lkKTsKKworZXh0ZXJuIGxvbmcgaW50IGdpdF9jdXJsX2lwcmVzb2x2ZTsKK2V4dGVybiBpbnQgYWN0aXZlX3JlcXVlc3RzOworZXh0ZXJuIGludCBodHRwX2lzX3ZlcmJvc2U7CitleHRlcm4gc3NpemVfdCBodHRwX3Bvc3RfYnVmZmVyOworZXh0ZXJuIHN0cnVjdCBjcmVkZW50aWFsIGh0dHBfYXV0aDsKKworZXh0ZXJuIGNoYXIgY3VybF9lcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOworCitlbnVtIGh0dHBfZm9sbG93X2NvbmZpZyB7CisJSFRUUF9GT0xMT1dfTk9ORSwKKwlIVFRQX0ZPTExPV19BTFdBWVMsCisJSFRUUF9GT0xMT1dfSU5JVElBTAorfTsKK2V4dGVybiBlbnVtIGh0dHBfZm9sbG93X2NvbmZpZyBodHRwX2ZvbGxvd19jb25maWc7CisKK3N0YXRpYyBpbmxpbmUgaW50IG1pc3NpbmdfX3RhcmdldChpbnQgY29kZSwgaW50IHJlc3VsdCkKK3sKKwlyZXR1cm4JLyogZmlsZTovLyBVUkwgLS0gZG8gd2UgZXZlciB1c2Ugb25lPz8/ICovCisJCShyZXN1bHQgPT0gQ1VSTEVfRklMRV9DT1VMRE5UX1JFQURfRklMRSkgfHwKKwkJLyogaHR0cDovLyBhbmQgaHR0cHM6Ly8gVVJMICovCisJCShjb2RlID09IDQwNCAmJiByZXN1bHQgPT0gQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUikgfHwKKwkJLyogZnRwOi8vIFVSTCAqLworCQkoY29kZSA9PSA1NTAgJiYgcmVzdWx0ID09IENVUkxFX0ZUUF9DT1VMRE5UX1JFVFJfRklMRSkKKwkJOworfQorCisjZGVmaW5lIG1pc3NpbmdfdGFyZ2V0KGEpIG1pc3NpbmdfX3RhcmdldCgoYSktPmh0dHBfY29kZSwgKGEpLT5jdXJsX3Jlc3VsdCkKKworLyoKKyAqIE5vcm1hbGl6ZSBjdXJsIHJlc3VsdHMgdG8gaGFuZGxlIENVUkxfRkFJTE9ORVJST1IgKG9yIGxhY2sgdGhlcmVvZikuIEZhaWxpbmcKKyAqIGh0dHAgY29kZXMgaGF2ZSB0aGVpciAicmVzdWx0IiBjb252ZXJ0ZWQgdG8gQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUiwgYW5kCisgKiBhbiBhcHByb3ByaWF0ZSBzdHJpbmcgcGxhY2VkIGluIHRoZSBlcnJvcnN0ciBidWZmZXIgKHBhc3MgY3VybF9lcnJvcnN0ciBpZgorICogeW91IGRvbid0IGhhdmUgYSBjdXN0b20gYnVmZmVyKS4KKyAqLwordm9pZCBub3JtYWxpemVfY3VybF9yZXN1bHQoQ1VSTGNvZGUgKnJlc3VsdCwgbG9uZyBodHRwX2NvZGUsIGNoYXIgKmVycm9yc3RyLAorCQkJICAgc2l6ZV90IGVycm9ybGVuKTsKKworLyogSGVscGVycyBmb3IgbW9kaWZ5aW5nIGFuZCBjcmVhdGluZyBVUkxzICovCit2b2lkIGFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmhleCwKKwkJCSAgICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpOworY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LAorCQkJICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpOworCisvKiBPcHRpb25zIGZvciBodHRwX2dldF8qKCkgKi8KK3N0cnVjdCBodHRwX2dldF9vcHRpb25zIHsKKwl1bnNpZ25lZCBub19jYWNoZToxLAorCQkgaW5pdGlhbF9yZXF1ZXN0OjE7CisKKwkvKiBJZiBub24tTlVMTCwgcmV0dXJucyB0aGUgY29udGVudC10eXBlIG9mIHRoZSByZXNwb25zZS4gKi8KKwlzdHJ1Y3Qgc3RyYnVmICpjb250ZW50X3R5cGU7CisKKwkvKgorCSAqIElmIG5vbi1OVUxMLCBhbmQgY29udGVudF90eXBlIGFib3ZlIGlzIG5vbi1OVUxMLCByZXR1cm5zCisJICogdGhlIGNoYXJzZXQgcGFyYW1ldGVyIGZyb20gdGhlIGNvbnRlbnQtdHlwZS4gSWYgbm9uZSBpcworCSAqIHByZXNlbnQsIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorCSAqLworCXN0cnVjdCBzdHJidWYgKmNoYXJzZXQ7CisKKwkvKgorCSAqIElmIG5vbi1OVUxMLCByZXR1cm5zIHRoZSBVUkwgd2UgZW5kZWQgdXAgYXQsIGluY2x1ZGluZyBhbnkKKwkgKiByZWRpcmVjdHMgd2UgZm9sbG93ZWQuCisJICovCisJc3RydWN0IHN0cmJ1ZiAqZWZmZWN0aXZlX3VybDsKKworCS8qCisJICogSWYgYm90aCBiYXNlX3VybCBhbmQgZWZmZWN0aXZlX3VybCBhcmUgbm9uLU5VTEwsIHRoZSBiYXNlIFVSTCB3aWxsCisJICogYmUgbXVuZ2VkIHRvIHJlZmxlY3QgYW55IHJlZGlyZWN0aW9ucyBnb2luZyBmcm9tIHRoZSByZXF1ZXN0ZWQgdXJsCisJICogdG8gZWZmZWN0aXZlX3VybC4gU2VlIHRoZSBkZWZpbml0aW9uIG9mIHVwZGF0ZV91cmxfZnJvbV9yZWRpcmVjdAorCSAqIGZvciBkZXRhaWxzLgorCSAqLworCXN0cnVjdCBzdHJidWYgKmJhc2VfdXJsOworCisJLyoKKwkgKiBJZiBub3QgTlVMTCwgY29udGFpbnMgYWRkaXRpb25hbCBIVFRQIGhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZQorCSAqIHJlcXVlc3QuIFRoZSBzdHJpbmdzIGluIHRoZSBsaXN0IG11c3Qgbm90IGJlIGZyZWVkIHVudGlsIGFmdGVyIHRoZQorCSAqIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4dHJhX2hlYWRlcnM7Cit9OworCisvKiBSZXR1cm4gdmFsdWVzIGZvciBodHRwX2dldF8qKCkgKi8KKyNkZWZpbmUgSFRUUF9PSwkJCTAKKyNkZWZpbmUgSFRUUF9NSVNTSU5HX1RBUkdFVAkxCisjZGVmaW5lIEhUVFBfRVJST1IJCTIKKyNkZWZpbmUgSFRUUF9TVEFSVF9GQUlMRUQJMworI2RlZmluZSBIVFRQX1JFQVVUSAk0CisjZGVmaW5lIEhUVFBfTk9BVVRICTUKKworLyoKKyAqIFJlcXVlc3RzIGEgVVJMIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBhIHN0cmJ1Zi4KKyAqCisgKiBJZiB0aGUgcmVzdWx0IHBvaW50ZXIgaXMgTlVMTCwgYSBIVFRQIEhFQUQgcmVxdWVzdCBpcyBtYWRlIGluc3RlYWQgb2YgR0VULgorICovCitpbnQgaHR0cF9nZXRfc3RyYnVmKGNvbnN0IGNoYXIgKnVybCwgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0LCBzdHJ1Y3QgaHR0cF9nZXRfb3B0aW9ucyAqb3B0aW9ucyk7CisKK2ludCBodHRwX2ZldGNoX3JlZihjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgcmVmICpyZWYpOworCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBwYWNrcyAqLworaW50IGh0dHBfZ2V0X2luZm9fcGFja3MoY29uc3QgY2hhciAqYmFzZV91cmwsCisJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tzX2hlYWQpOworCitzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgeworCWNoYXIgKnVybDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHN0OworCUZJTEUgKnBhY2tmaWxlOworCXN0cnVjdCBzdHJidWYgdG1wZmlsZTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKK307CisKK3N0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqbmV3X2h0dHBfcGFja19yZXF1ZXN0KAorCXN0cnVjdCBwYWNrZWRfZ2l0ICp0YXJnZXQsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKTsKK2ludCBmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKTsKK3ZvaWQgcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpOworCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBvYmplY3QgKi8KK3N0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0IHsKKwljaGFyICp1cmw7CisJc3RydWN0IHN0cmJ1ZiB0bXBmaWxlOworCWludCBsb2NhbGZpbGU7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJY2hhciBlcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOworCWxvbmcgaHR0cF9jb2RlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBvYmplY3RfaWQgcmVhbF9vaWQ7CisJZ2l0X2hhc2hfY3R4IGM7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWludCB6cmV0OworCWludCByZW5hbWU7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Cit9OworCitzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqbmV3X2h0dHBfb2JqZWN0X3JlcXVlc3QoCisJY29uc3QgY2hhciAqYmFzZV91cmwsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7Cit2b2lkIHByb2Nlc3NfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CitpbnQgZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOwordm9pZCBhYm9ydF9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKK3ZvaWQgcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKKworLyogc2V0dXAgcm91dGluZSBmb3IgY3VybF9lYXN5X3NldG9wdCBDVVJMT1BUX0RFQlVHRlVOQ1RJT04gKi8KK3ZvaWQgc2V0dXBfY3VybF90cmFjZShDVVJMICpoYW5kbGUpOworI2VuZGlmIC8qIEhUVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaWRlbnQuYyBiL2lkZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2NmVlNAotLS0gL2Rldi9udWxsCisrKyBiL2lkZW50LmMKQEAgLTAsMCArMSw2MzUgQEAKKy8qCisgKiBpZGVudC5jCisgKgorICogY3JlYXRlIGdpdCBpZGVudGlmaWVyIGxpbmVzIG9mIHRoZSBmb3JtICJuYW1lIDxlbWFpbD4gZGF0ZSIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTGludXMgVG9ydmFsZHMKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGdpdF9kZWZhdWx0X25hbWUgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGdpdF9kZWZhdWx0X2VtYWlsID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBnaXRfZGVmYXVsdF9kYXRlID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBnaXRfYXV0aG9yX25hbWUgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGdpdF9hdXRob3JfZW1haWwgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGdpdF9jb21taXR0ZXJfbmFtZSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCBzdHJidWYgZ2l0X2NvbW1pdHRlcl9lbWFpbCA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCBkZWZhdWx0X2VtYWlsX2lzX2JvZ3VzOworc3RhdGljIGludCBkZWZhdWx0X25hbWVfaXNfYm9ndXM7CisKK3N0YXRpYyBpbnQgaWRlbnRfdXNlX2NvbmZpZ19vbmx5OworCisjZGVmaW5lIElERU5UX05BTUVfR0lWRU4gMDEKKyNkZWZpbmUgSURFTlRfTUFJTF9HSVZFTiAwMgorI2RlZmluZSBJREVOVF9BTExfR0lWRU4gKElERU5UX05BTUVfR0lWRU58SURFTlRfTUFJTF9HSVZFTikKK3N0YXRpYyBpbnQgY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW47CitzdGF0aWMgaW50IGF1dGhvcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuOworc3RhdGljIGludCBpZGVudF9jb25maWdfZ2l2ZW47CisKKyNpZmRlZiBOT19HRUNPU19JTl9QV0VOVAorI2RlZmluZSBnZXRfZ2Vjb3MoaWdub3JlZCkgIiYiCisjZWxzZQorI2RlZmluZSBnZXRfZ2Vjb3Moc3RydWN0X3Bhc3N3ZCkgKChzdHJ1Y3RfcGFzc3dkKS0+cHdfZ2Vjb3MpCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwYXNzd2QgKnhnZXRwd3VpZF9zZWxmKGludCAqaXNfYm9ndXMpCit7CisJc3RydWN0IHBhc3N3ZCAqcHc7CisKKwllcnJubyA9IDA7CisJcHcgPSBnZXRwd3VpZChnZXR1aWQoKSk7CisJaWYgKCFwdykgeworCQlzdGF0aWMgc3RydWN0IHBhc3N3ZCBmYWxsYmFjazsKKwkJZmFsbGJhY2sucHdfbmFtZSA9ICJ1bmtub3duIjsKKyNpZm5kZWYgTk9fR0VDT1NfSU5fUFdFTlQKKwkJZmFsbGJhY2sucHdfZ2Vjb3MgPSAiVW5rbm93biI7CisjZW5kaWYKKwkJcHcgPSAmZmFsbGJhY2s7CisJCWlmIChpc19ib2d1cykKKwkJCSppc19ib2d1cyA9IDE7CisJfQorCXJldHVybiBwdzsKK30KKworc3RhdGljIHZvaWQgY29weV9nZWNvcyhjb25zdCBzdHJ1Y3QgcGFzc3dkICp3LCBzdHJ1Y3Qgc3RyYnVmICpuYW1lKQoreworCWNoYXIgKnNyYzsKKworCS8qIFRyYWRpdGlvbmFsbHkgR0VDT1MgZmllbGQgaGFkIG9mZmljZSBwaG9uZSBudW1iZXJzIGV0Yywgc2VwYXJhdGVkCisJICogd2l0aCBjb21tYXMuICBBbHNvICYgc3RhbmRzIGZvciBjYXBpdGFsaXplZCBmb3JtIG9mIHRoZSBsb2dpbiBuYW1lLgorCSAqLworCisJZm9yIChzcmMgPSBnZXRfZ2Vjb3Modyk7ICpzcmMgJiYgKnNyYyAhPSAnLCc7IHNyYysrKSB7CisJCWludCBjaCA9ICpzcmM7CisJCWlmIChjaCAhPSAnJicpCisJCQlzdHJidWZfYWRkY2gobmFtZSwgY2gpOworCQllbHNlIHsKKwkJCS8qIFNvcnJ5LCBNci4gTWNEb25hbGQuLi4gKi8KKwkJCXN0cmJ1Zl9hZGRjaChuYW1lLCB0b3VwcGVyKCp3LT5wd19uYW1lKSk7CisJCQlzdHJidWZfYWRkc3RyKG5hbWUsIHctPnB3X25hbWUgKyAxKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBhZGRfbWFpbG5hbWVfaG9zdChzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJRklMRSAqbWFpbG5hbWU7CisJc3RydWN0IHN0cmJ1ZiBtYWlsbmFtZWJ1ZiA9IFNUUkJVRl9JTklUOworCisJbWFpbG5hbWUgPSBmb3Blbl9vcl93YXJuKCIvZXRjL21haWxuYW1lIiwgInIiKTsKKwlpZiAoIW1haWxuYW1lKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3RyYnVmX2dldGxpbmUoJm1haWxuYW1lYnVmLCBtYWlsbmFtZSkgPT0gRU9GKSB7CisJCWlmIChmZXJyb3IobWFpbG5hbWUpKQorCQkJd2FybmluZ19lcnJubygiY2Fubm90IHJlYWQgL2V0Yy9tYWlsbmFtZSIpOworCQlzdHJidWZfcmVsZWFzZSgmbWFpbG5hbWVidWYpOworCQlmY2xvc2UobWFpbG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIHN1Y2Nlc3MhICovCisJc3RyYnVmX2FkZGJ1ZihidWYsICZtYWlsbmFtZWJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJm1haWxuYW1lYnVmKTsKKwlmY2xvc2UobWFpbG5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhbm9uaWNhbF9uYW1lKGNvbnN0IGNoYXIgKmhvc3QsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpbnQgc3RhdHVzID0gLTE7CisKKyNpZm5kZWYgTk9fSVBWNgorCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpOworCW1lbXNldCAoJmhpbnRzLCAnXDAnLCBzaXplb2YgKGhpbnRzKSk7CisJaGludHMuYWlfZmxhZ3MgPSBBSV9DQU5PTk5BTUU7CisJaWYgKCFnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCAmaGludHMsICZhaSkpIHsKKwkJaWYgKGFpICYmIGFpLT5haV9jYW5vbm5hbWUgJiYgc3RyY2hyKGFpLT5haV9jYW5vbm5hbWUsICcuJykpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBhaS0+YWlfY2Fub25uYW1lKTsKKwkJCXN0YXR1cyA9IDA7CisJCX0KKwkJZnJlZWFkZHJpbmZvKGFpKTsKKwl9CisjZWxzZQorCXN0cnVjdCBob3N0ZW50ICpoZSA9IGdldGhvc3RieW5hbWUoaG9zdCk7CisJaWYgKGhlICYmIHN0cmNocihoZS0+aF9uYW1lLCAnLicpKSB7CisJCXN0cmJ1Zl9hZGRzdHIob3V0LCBoZS0+aF9uYW1lKTsKKwkJc3RhdHVzID0gMDsKKwl9CisjZW5kaWYgLyogTk9fSVBWNiAqLworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgYWRkX2RvbWFpbm5hbWUoc3RydWN0IHN0cmJ1ZiAqb3V0LCBpbnQgKmlzX2JvZ3VzKQoreworCWNoYXIgYnVmW0hPU1RfTkFNRV9NQVggKyAxXTsKKworCWlmICh4Z2V0aG9zdG5hbWUoYnVmLCBzaXplb2YoYnVmKSkpIHsKKwkJd2FybmluZ19lcnJubygiY2Fubm90IGdldCBob3N0IG5hbWUiKTsKKwkJc3RyYnVmX2FkZHN0cihvdXQsICIobm9uZSkiKTsKKwkJKmlzX2JvZ3VzID0gMTsKKwkJcmV0dXJuOworCX0KKwlpZiAoc3RyY2hyKGJ1ZiwgJy4nKSkKKwkJc3RyYnVmX2FkZHN0cihvdXQsIGJ1Zik7CisJZWxzZSBpZiAoY2Fub25pY2FsX25hbWUoYnVmLCBvdXQpIDwgMCkgeworCQlzdHJidWZfYWRkZihvdXQsICIlcy4obm9uZSkiLCBidWYpOworCQkqaXNfYm9ndXMgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgY29weV9lbWFpbChjb25zdCBzdHJ1Y3QgcGFzc3dkICpwdywgc3RydWN0IHN0cmJ1ZiAqZW1haWwsCisJCSAgICAgICBpbnQgKmlzX2JvZ3VzKQoreworCS8qCisJICogTWFrZSB1cCBhIGZha2UgZW1haWwgYWRkcmVzcworCSAqIChuYW1lICsgJ0AnICsgaG9zdG5hbWUgWysgJy4nICsgZG9tYWlubmFtZV0pCisJICovCisJc3RyYnVmX2FkZHN0cihlbWFpbCwgcHctPnB3X25hbWUpOworCXN0cmJ1Zl9hZGRjaChlbWFpbCwgJ0AnKTsKKworCWlmICghYWRkX21haWxuYW1lX2hvc3QoZW1haWwpKQorCQlyZXR1cm47CS8qIHJlYWQgZnJvbSAiL2V0Yy9tYWlsbmFtZSIgKERlYmlhbikgKi8KKwlhZGRfZG9tYWlubmFtZShlbWFpbCwgaXNfYm9ndXMpOworfQorCitjb25zdCBjaGFyICppZGVudF9kZWZhdWx0X25hbWUodm9pZCkKK3sKKwlpZiAoIShpZGVudF9jb25maWdfZ2l2ZW4gJiBJREVOVF9OQU1FX0dJVkVOKSAmJiAhZ2l0X2RlZmF1bHRfbmFtZS5sZW4pIHsKKwkJY29weV9nZWNvcyh4Z2V0cHd1aWRfc2VsZigmZGVmYXVsdF9uYW1lX2lzX2JvZ3VzKSwgJmdpdF9kZWZhdWx0X25hbWUpOworCQlzdHJidWZfdHJpbSgmZ2l0X2RlZmF1bHRfbmFtZSk7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9uYW1lLmJ1ZjsKK30KKworY29uc3QgY2hhciAqaWRlbnRfZGVmYXVsdF9lbWFpbCh2b2lkKQoreworCWlmICghKGlkZW50X2NvbmZpZ19naXZlbiAmIElERU5UX01BSUxfR0lWRU4pICYmICFnaXRfZGVmYXVsdF9lbWFpbC5sZW4pIHsKKwkJY29uc3QgY2hhciAqZW1haWwgPSBnZXRlbnYoIkVNQUlMIik7CisKKwkJaWYgKGVtYWlsICYmIGVtYWlsWzBdKSB7CisJCQlzdHJidWZfYWRkc3RyKCZnaXRfZGVmYXVsdF9lbWFpbCwgZW1haWwpOworCQkJY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJCWF1dGhvcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJCX0gZWxzZSBpZiAoKGVtYWlsID0gcXVlcnlfdXNlcl9lbWFpbCgpKSAmJiBlbWFpbFswXSkgeworCQkJc3RyYnVmX2FkZHN0cigmZ2l0X2RlZmF1bHRfZW1haWwsIGVtYWlsKTsKKwkJCWZyZWUoKGNoYXIgKillbWFpbCk7CisJCX0gZWxzZQorCQkJY29weV9lbWFpbCh4Z2V0cHd1aWRfc2VsZigmZGVmYXVsdF9lbWFpbF9pc19ib2d1cyksCisJCQkJICAgJmdpdF9kZWZhdWx0X2VtYWlsLCAmZGVmYXVsdF9lbWFpbF9pc19ib2d1cyk7CisJCXN0cmJ1Zl90cmltKCZnaXRfZGVmYXVsdF9lbWFpbCk7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9lbWFpbC5idWY7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICppZGVudF9kZWZhdWx0X2RhdGUodm9pZCkKK3sKKwlpZiAoIWdpdF9kZWZhdWx0X2RhdGUubGVuKQorCQlkYXRlc3RhbXAoJmdpdF9kZWZhdWx0X2RhdGUpOworCXJldHVybiBnaXRfZGVmYXVsdF9kYXRlLmJ1ZjsKK30KKwordm9pZCByZXNldF9pZGVudF9kYXRlKHZvaWQpCit7CisJc3RyYnVmX3Jlc2V0KCZnaXRfZGVmYXVsdF9kYXRlKTsKK30KKworc3RhdGljIGludCBjcnVkKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlyZXR1cm4gIGMgPD0gMzIgIHx8CisJCWMgPT0gJy4nIHx8CisJCWMgPT0gJywnIHx8CisJCWMgPT0gJzonIHx8CisJCWMgPT0gJzsnIHx8CisJCWMgPT0gJzwnIHx8CisJCWMgPT0gJz4nIHx8CisJCWMgPT0gJyInIHx8CisJCWMgPT0gJ1xcJyB8fAorCQljID09ICdcJyc7Cit9CisKK3N0YXRpYyBpbnQgaGFzX25vbl9jcnVkKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlmb3IgKDsgKnN0cjsgc3RyKyspIHsKKwkJaWYgKCFjcnVkKCpzdHIpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQ29weSBvdmVyIGEgc3RyaW5nIHRvIHRoZSBkZXN0aW5hdGlvbiwgYnV0IGF2b2lkIHNwZWNpYWwKKyAqIGNoYXJhY3RlcnMgKCdcbicsICc8JyBhbmQgJz4nKSBhbmQgcmVtb3ZlIGNydWQgYXQgdGhlIGVuZAorICovCitzdGF0aWMgdm9pZCBzdHJidWZfYWRkc3RyX3dpdGhvdXRfY3J1ZChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3JjKQoreworCXNpemVfdCBpLCBsZW47CisJdW5zaWduZWQgY2hhciBjOworCisJLyogUmVtb3ZlIGNydWQgZnJvbSB0aGUgYmVnaW5uaW5nLi4gKi8KKwl3aGlsZSAoKGMgPSAqc3JjKSAhPSAwKSB7CisJCWlmICghY3J1ZChjKSkKKwkJCWJyZWFrOworCQlzcmMrKzsKKwl9CisKKwkvKiBSZW1vdmUgY3J1ZCBmcm9tIHRoZSBlbmQuLiAqLworCWxlbiA9IHN0cmxlbihzcmMpOworCXdoaWxlIChsZW4gPiAwKSB7CisJCWMgPSBzcmNbbGVuLTFdOworCQlpZiAoIWNydWQoYykpCisJCQlicmVhazsKKwkJLS1sZW47CisJfQorCisJLyoKKwkgKiBDb3B5IHRoZSByZXN0IHRvIHRoZSBidWZmZXIsIGJ1dCBhdm9pZCB0aGUgc3BlY2lhbAorCSAqIGNoYXJhY3RlcnMgJ1xuJyAnPCcgYW5kICc+JyB0aGF0IGFjdCBhcyBkZWxpbWl0ZXJzIG9uCisJICogYW4gaWRlbnRpZmljYXRpb24gbGluZS4gV2UgY2FuIG9ubHkgcmVtb3ZlIGNydWQsIG5ldmVyIGFkZCBpdCwKKwkgKiBzbyAnbGVuJyBpcyBvdXIgbWF4aW11bS4KKwkgKi8KKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJYyA9ICpzcmMrKzsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1xuJzogY2FzZSAnPCc6IGNhc2UgJz4nOgorCQkJY29udGludWU7CisJCX0KKwkJc2ItPmJ1ZltzYi0+bGVuKytdID0gYzsKKwl9CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKKy8qCisgKiBSZXZlcnNlIG9mIGZtdF9pZGVudCgpOyBnaXZlbiBhbiBpZGVudCBsaW5lLCBzcGxpdCB0aGUgZmllbGRzCisgKiB0byBhbGxvdyB0aGUgY2FsbGVyIHRvIHBhcnNlIGl0LgorICogU2lnbmFsIGEgc3VjY2VzcyBieSByZXR1cm5pbmcgMCwgYnV0IGRhdGUvdHogZmllbGRzIG9mIHRoZSByZXN1bHQKKyAqIGNhbiBzdGlsbCBiZSBOVUxMIGlmIHRoZSBpbnB1dCBsaW5lIG9ubHkgaGFzIHRoZSBuYW1lL2VtYWlsIHBhcnQKKyAqIChlLmcuIHJlYWRpbmcgZnJvbSBhIHJlZmxvZyBlbnRyeSkuCisgKi8KK2ludCBzcGxpdF9pZGVudF9saW5lKHN0cnVjdCBpZGVudF9zcGxpdCAqc3BsaXQsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqY3A7CisJc2l6ZV90IHNwYW47CisJaW50IHN0YXR1cyA9IC0xOworCisJbWVtc2V0KHNwbGl0LCAwLCBzaXplb2YoKnNwbGl0KSk7CisKKwlzcGxpdC0+bmFtZV9iZWdpbiA9IGxpbmU7CisJZm9yIChjcCA9IGxpbmU7ICpjcCAmJiBjcCA8IGxpbmUgKyBsZW47IGNwKyspCisJCWlmICgqY3AgPT0gJzwnKSB7CisJCQlzcGxpdC0+bWFpbF9iZWdpbiA9IGNwICsgMTsKKwkJCWJyZWFrOworCQl9CisJaWYgKCFzcGxpdC0+bWFpbF9iZWdpbikKKwkJcmV0dXJuIHN0YXR1czsKKworCWZvciAoY3AgPSBzcGxpdC0+bWFpbF9iZWdpbiAtIDI7IGxpbmUgPD0gY3A7IGNwLS0pCisJCWlmICghaXNzcGFjZSgqY3ApKSB7CisJCQlzcGxpdC0+bmFtZV9lbmQgPSBjcCArIDE7CisJCQlicmVhazsKKwkJfQorCWlmICghc3BsaXQtPm5hbWVfZW5kKSB7CisJCS8qIG5vIGh1bWFuIHJlYWRhYmxlIG5hbWUgKi8KKwkJc3BsaXQtPm5hbWVfZW5kID0gc3BsaXQtPm5hbWVfYmVnaW47CisJfQorCisJZm9yIChjcCA9IHNwbGl0LT5tYWlsX2JlZ2luOyBjcCA8IGxpbmUgKyBsZW47IGNwKyspCisJCWlmICgqY3AgPT0gJz4nKSB7CisJCQlzcGxpdC0+bWFpbF9lbmQgPSBjcDsKKwkJCWJyZWFrOworCQl9CisJaWYgKCFzcGxpdC0+bWFpbF9lbmQpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKgorCSAqIExvb2sgZnJvbSB0aGUgZW5kLW9mLWxpbmUgdG8gZmluZCB0aGUgdHJhaWxpbmcgIj4iIG9mIHRoZSBtYWlsCisJICogYWRkcmVzcywgZXZlbiB0aG91Z2ggd2Ugc2hvdWxkIGFscmVhZHkga25vdyBpdCBhcyBzcGxpdC0+bWFpbF9lbmQuCisJICogVGhpcyBjYW4gaGVscCBpbiBjYXNlcyBvZiBicm9rZW4gaWRlbnRzIHdpdGggYW4gZXh0cmEgIj4iIHNvbWV3aGVyZQorCSAqIGluIHRoZSBlbWFpbCBhZGRyZXNzLiAgTm90ZSB0aGF0IHdlIGFyZSBhc3N1bWluZyB0aGUgdGltZXN0YW1wIHdpbGwKKwkgKiBuZXZlciBoYXZlIGEgIj4iIGluIGl0LgorCSAqCisJICogTm90ZSB0aGF0IHdlIHdpbGwgYWx3YXlzIGZpbmQgc29tZSAiPiIgYmVmb3JlIGdvaW5nIG9mZiB0aGUgZnJvbnQgb2YKKwkgKiB0aGUgc3RyaW5nLCBiZWNhdXNlIHdpbGwgYWx3YXlzIGhpdCB0aGUgc3BsaXQtPm1haWxfZW5kIGNsb3NpbmcKKwkgKiBicmFja2V0LgorCSAqLworCWZvciAoY3AgPSBsaW5lICsgbGVuIC0gMTsgKmNwICE9ICc+JzsgY3AtLSkKKwkJOworCisJZm9yIChjcCA9IGNwICsgMTsgY3AgPCBsaW5lICsgbGVuICYmIGlzc3BhY2UoKmNwKTsgY3ArKykKKwkJOworCWlmIChsaW5lICsgbGVuIDw9IGNwKQorCQlnb3RvIHBlcnNvbl9vbmx5OworCXNwbGl0LT5kYXRlX2JlZ2luID0gY3A7CisJc3BhbiA9IHN0cnNwbihjcCwgIjAxMjM0NTY3ODkiKTsKKwlpZiAoIXNwYW4pCisJCWdvdG8gcGVyc29uX29ubHk7CisJc3BsaXQtPmRhdGVfZW5kID0gc3BsaXQtPmRhdGVfYmVnaW4gKyBzcGFuOworCWZvciAoY3AgPSBzcGxpdC0+ZGF0ZV9lbmQ7IGNwIDwgbGluZSArIGxlbiAmJiBpc3NwYWNlKCpjcCk7IGNwKyspCisJCTsKKwlpZiAobGluZSArIGxlbiA8PSBjcCB8fCAoKmNwICE9ICcrJyAmJiAqY3AgIT0gJy0nKSkKKwkJZ290byBwZXJzb25fb25seTsKKwlzcGxpdC0+dHpfYmVnaW4gPSBjcDsKKwlzcGFuID0gc3Ryc3BuKGNwICsgMSwgIjAxMjM0NTY3ODkiKTsKKwlpZiAoIXNwYW4pCisJCWdvdG8gcGVyc29uX29ubHk7CisJc3BsaXQtPnR6X2VuZCA9IHNwbGl0LT50el9iZWdpbiArIDEgKyBzcGFuOworCXJldHVybiAwOworCitwZXJzb25fb25seToKKwlzcGxpdC0+ZGF0ZV9iZWdpbiA9IE5VTEw7CisJc3BsaXQtPmRhdGVfZW5kID0gTlVMTDsKKwlzcGxpdC0+dHpfYmVnaW4gPSBOVUxMOworCXNwbGl0LT50el9lbmQgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZW52X2hpbnQgPQorTl8oIlxuIgorICAgIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyAgICJcbiIKKyAgICJSdW5cbiIKKyAgICJcbiIKKyAgICIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisgICAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisgICAiXG4iCisgICAidG8gc2V0IHlvdXIgYWNjb3VudFwncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorICAgIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyAgICJcbiIpOworCitjb25zdCBjaGFyICpmbXRfaWRlbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZW1haWwsCisJCSAgICAgIGVudW0gd2FudF9pZGVudCB3aG9zZV9pZGVudCwgY29uc3QgY2hhciAqZGF0ZV9zdHIsIGludCBmbGFnKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGlkZW50ID0gU1RSQlVGX0lOSVQ7CisJaW50IHN0cmljdCA9IChmbGFnICYgSURFTlRfU1RSSUNUKTsKKwlpbnQgd2FudF9kYXRlID0gIShmbGFnICYgSURFTlRfTk9fREFURSk7CisJaW50IHdhbnRfbmFtZSA9ICEoZmxhZyAmIElERU5UX05PX05BTUUpOworCisJaWYgKCFlbWFpbCkgeworCQlpZiAod2hvc2VfaWRlbnQgPT0gV0FOVF9BVVRIT1JfSURFTlQgJiYgZ2l0X2F1dGhvcl9lbWFpbC5sZW4pCisJCQllbWFpbCA9IGdpdF9hdXRob3JfZW1haWwuYnVmOworCQllbHNlIGlmICh3aG9zZV9pZGVudCA9PSBXQU5UX0NPTU1JVFRFUl9JREVOVCAmJiBnaXRfY29tbWl0dGVyX2VtYWlsLmxlbikKKwkJCWVtYWlsID0gZ2l0X2NvbW1pdHRlcl9lbWFpbC5idWY7CisJfQorCWlmICghZW1haWwpIHsKKwkJaWYgKHN0cmljdCAmJiBpZGVudF91c2VfY29uZmlnX29ubHkKKwkJICAgICYmICEoaWRlbnRfY29uZmlnX2dpdmVuICYgSURFTlRfTUFJTF9HSVZFTikpIHsKKwkJCWZwdXRzKF8oZW52X2hpbnQpLCBzdGRlcnIpOworCQkJZGllKF8oIm5vIGVtYWlsIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiKSk7CisJCX0KKwkJZW1haWwgPSBpZGVudF9kZWZhdWx0X2VtYWlsKCk7CisJCWlmIChzdHJpY3QgJiYgZGVmYXVsdF9lbWFpbF9pc19ib2d1cykgeworCQkJZnB1dHMoXyhlbnZfaGludCksIHN0ZGVycik7CisJCQlkaWUoXygidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIpLCBlbWFpbCk7CisJCX0KKwl9CisKKwlpZiAod2FudF9uYW1lKSB7CisJCWludCB1c2luZ19kZWZhdWx0ID0gMDsKKwkJaWYgKCFuYW1lKSB7CisJCQlpZiAod2hvc2VfaWRlbnQgPT0gV0FOVF9BVVRIT1JfSURFTlQgJiYgZ2l0X2F1dGhvcl9uYW1lLmxlbikKKwkJCQluYW1lID0gZ2l0X2F1dGhvcl9uYW1lLmJ1ZjsKKwkJCWVsc2UgaWYgKHdob3NlX2lkZW50ID09IFdBTlRfQ09NTUlUVEVSX0lERU5UICYmCisJCQkJCWdpdF9jb21taXR0ZXJfbmFtZS5sZW4pCisJCQkJbmFtZSA9IGdpdF9jb21taXR0ZXJfbmFtZS5idWY7CisJCX0KKwkJaWYgKCFuYW1lKSB7CisJCQlpZiAoc3RyaWN0ICYmIGlkZW50X3VzZV9jb25maWdfb25seQorCQkJICAgICYmICEoaWRlbnRfY29uZmlnX2dpdmVuICYgSURFTlRfTkFNRV9HSVZFTikpIHsKKwkJCQlmcHV0cyhfKGVudl9oaW50KSwgc3RkZXJyKTsKKwkJCQlkaWUoXygibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIikpOworCQkJfQorCQkJbmFtZSA9IGlkZW50X2RlZmF1bHRfbmFtZSgpOworCQkJdXNpbmdfZGVmYXVsdCA9IDE7CisJCQlpZiAoc3RyaWN0ICYmIGRlZmF1bHRfbmFtZV9pc19ib2d1cykgeworCQkJCWZwdXRzKF8oZW52X2hpbnQpLCBzdGRlcnIpOworCQkJCWRpZShfKCJ1bmFibGUgdG8gYXV0by1kZXRlY3QgbmFtZSAoZ290ICclcycpIiksIG5hbWUpOworCQkJfQorCQl9CisJCWlmICghKm5hbWUpIHsKKwkJCXN0cnVjdCBwYXNzd2QgKnB3OworCQkJaWYgKHN0cmljdCkgeworCQkJCWlmICh1c2luZ19kZWZhdWx0KQorCQkJCQlmcHV0cyhfKGVudl9oaW50KSwgc3RkZXJyKTsKKwkJCQlkaWUoXygiZW1wdHkgaWRlbnQgbmFtZSAoZm9yIDwlcz4pIG5vdCBhbGxvd2VkIiksIGVtYWlsKTsKKwkJCX0KKwkJCXB3ID0geGdldHB3dWlkX3NlbGYoTlVMTCk7CisJCQluYW1lID0gcHctPnB3X25hbWU7CisJCX0KKwkJaWYgKHN0cmljdCAmJiAhaGFzX25vbl9jcnVkKG5hbWUpKQorCQkJZGllKF8oIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIiksIG5hbWUpOworCX0KKworCXN0cmJ1Zl9yZXNldCgmaWRlbnQpOworCWlmICh3YW50X25hbWUpIHsKKwkJc3RyYnVmX2FkZHN0cl93aXRob3V0X2NydWQoJmlkZW50LCBuYW1lKTsKKwkJc3RyYnVmX2FkZHN0cigmaWRlbnQsICIgPCIpOworCX0KKwlzdHJidWZfYWRkc3RyX3dpdGhvdXRfY3J1ZCgmaWRlbnQsIGVtYWlsKTsKKwlpZiAod2FudF9uYW1lKQorCQkJc3RyYnVmX2FkZGNoKCZpZGVudCwgJz4nKTsKKwlpZiAod2FudF9kYXRlKSB7CisJCXN0cmJ1Zl9hZGRjaCgmaWRlbnQsICcgJyk7CisJCWlmIChkYXRlX3N0ciAmJiBkYXRlX3N0clswXSkgeworCQkJaWYgKHBhcnNlX2RhdGUoZGF0ZV9zdHIsICZpZGVudCkgPCAwKQorCQkJCWRpZShfKCJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIpLCBkYXRlX3N0cik7CisJCX0KKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cigmaWRlbnQsIGlkZW50X2RlZmF1bHRfZGF0ZSgpKTsKKwl9CisKKwlyZXR1cm4gaWRlbnQuYnVmOworfQorCitjb25zdCBjaGFyICpmbXRfbmFtZShlbnVtIHdhbnRfaWRlbnQgd2hvc2VfaWRlbnQpCit7CisJY2hhciAqbmFtZSA9IE5VTEw7CisJY2hhciAqZW1haWwgPSBOVUxMOworCisJc3dpdGNoICh3aG9zZV9pZGVudCkgeworCWNhc2UgV0FOVF9CTEFOS19JREVOVDoKKwkJYnJlYWs7CisJY2FzZSBXQU5UX0FVVEhPUl9JREVOVDoKKwkJbmFtZSA9IGdldGVudigiR0lUX0FVVEhPUl9OQU1FIik7CisJCWVtYWlsID0gZ2V0ZW52KCJHSVRfQVVUSE9SX0VNQUlMIik7CisJCWJyZWFrOworCWNhc2UgV0FOVF9DT01NSVRURVJfSURFTlQ6CisJCW5hbWUgPSBnZXRlbnYoIkdJVF9DT01NSVRURVJfTkFNRSIpOworCQllbWFpbCA9IGdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIGZtdF9pZGVudChuYW1lLCBlbWFpbCwgd2hvc2VfaWRlbnQsIE5VTEwsCisJCQlJREVOVF9TVFJJQ1QgfCBJREVOVF9OT19EQVRFKTsKK30KKworY29uc3QgY2hhciAqZ2l0X2F1dGhvcl9pbmZvKGludCBmbGFnKQoreworCWlmIChnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpKQorCQlhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCWlmIChnZXRlbnYoIkdJVF9BVVRIT1JfRU1BSUwiKSkKKwkJYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwlyZXR1cm4gZm10X2lkZW50KGdldGVudigiR0lUX0FVVEhPUl9OQU1FIiksCisJCQkgZ2V0ZW52KCJHSVRfQVVUSE9SX0VNQUlMIiksCisJCQkgV0FOVF9BVVRIT1JfSURFTlQsCisJCQkgZ2V0ZW52KCJHSVRfQVVUSE9SX0RBVEUiKSwKKwkJCSBmbGFnKTsKK30KKworY29uc3QgY2hhciAqZ2l0X2NvbW1pdHRlcl9pbmZvKGludCBmbGFnKQoreworCWlmIChnZXRlbnYoIkdJVF9DT01NSVRURVJfTkFNRSIpKQorCQljb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCWlmIChnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKSkKKwkJY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwlyZXR1cm4gZm10X2lkZW50KGdldGVudigiR0lUX0NPTU1JVFRFUl9OQU1FIiksCisJCQkgZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0VNQUlMIiksCisJCQkgV0FOVF9DT01NSVRURVJfSURFTlQsCisJCQkgZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0RBVEUiKSwKKwkJCSBmbGFnKTsKK30KKworc3RhdGljIGludCBpZGVudF9pc19zdWZmaWNpZW50KGludCB1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4pCit7CisjaWZuZGVmIFdJTkRPV1MKKwlyZXR1cm4gKHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiAmIElERU5UX01BSUxfR0lWRU4pOworI2Vsc2UKKwlyZXR1cm4gKHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiA9PSBJREVOVF9BTExfR0lWRU4pOworI2VuZGlmCit9CisKK2ludCBjb21taXR0ZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKHZvaWQpCit7CisJcmV0dXJuIGlkZW50X2lzX3N1ZmZpY2llbnQoY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4pOworfQorCitpbnQgYXV0aG9yX2lkZW50X3N1ZmZpY2llbnRseV9naXZlbih2b2lkKQoreworCXJldHVybiBpZGVudF9pc19zdWZmaWNpZW50KGF1dGhvcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuKTsKK30KKworc3RhdGljIGludCBzZXRfaWRlbnQoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJhdXRob3IubmFtZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJc3RyYnVmX3Jlc2V0KCZnaXRfYXV0aG9yX25hbWUpOworCQlzdHJidWZfYWRkc3RyKCZnaXRfYXV0aG9yX25hbWUsIHZhbHVlKTsKKwkJYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTkFNRV9HSVZFTjsKKwkJaWRlbnRfY29uZmlnX2dpdmVuIHw9IElERU5UX05BTUVfR0lWRU47CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImF1dGhvci5lbWFpbCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJc3RyYnVmX3Jlc2V0KCZnaXRfYXV0aG9yX2VtYWlsKTsKKwkJc3RyYnVmX2FkZHN0cigmZ2l0X2F1dGhvcl9lbWFpbCwgdmFsdWUpOworCQlhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCQlpZGVudF9jb25maWdfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29tbWl0dGVyLm5hbWUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmJ1Zl9yZXNldCgmZ2l0X2NvbW1pdHRlcl9uYW1lKTsKKwkJc3RyYnVmX2FkZHN0cigmZ2l0X2NvbW1pdHRlcl9uYW1lLCB2YWx1ZSk7CisJCWNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX05BTUVfR0lWRU47CisJCWlkZW50X2NvbmZpZ19naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb21taXR0ZXIuZW1haWwiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmJ1Zl9yZXNldCgmZ2l0X2NvbW1pdHRlcl9lbWFpbCk7CisJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9jb21taXR0ZXJfZW1haWwsIHZhbHVlKTsKKwkJY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJaWRlbnRfY29uZmlnX2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInVzZXIubmFtZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJc3RyYnVmX3Jlc2V0KCZnaXRfZGVmYXVsdF9uYW1lKTsKKwkJc3RyYnVmX2FkZHN0cigmZ2l0X2RlZmF1bHRfbmFtZSwgdmFsdWUpOworCQljb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCQlhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCQlpZGVudF9jb25maWdfZ2l2ZW4gfD0gSURFTlRfTkFNRV9HSVZFTjsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAidXNlci5lbWFpbCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJc3RyYnVmX3Jlc2V0KCZnaXRfZGVmYXVsdF9lbWFpbCk7CisJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9kZWZhdWx0X2VtYWlsLCB2YWx1ZSk7CisJCWNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJCWF1dGhvcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX01BSUxfR0lWRU47CisJCWlkZW50X2NvbmZpZ19naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9pZGVudF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLnVzZWNvbmZpZ29ubHkiKSkgeworCQlpZGVudF91c2VfY29uZmlnX29ubHkgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBzZXRfaWRlbnQodmFyLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9lbnZfaWYoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgaW50ICpnaXZlbiwgaW50IGJpdCkKK3sKKwlpZiAoKCpnaXZlbiAmIGJpdCkgfHwgZ2V0ZW52KGtleSkpCisJCXJldHVybjsgLyogbm90aGluZyB0byBkbyAqLworCXNldGVudihrZXksIHZhbHVlLCAwKTsKKwkqZ2l2ZW4gfD0gYml0OworfQorCit2b2lkIHByZXBhcmVfZmFsbGJhY2tfaWRlbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZW1haWwpCit7CisJc2V0X2Vudl9pZigiR0lUX0FVVEhPUl9OQU1FIiwgbmFtZSwKKwkJICAgJmF1dGhvcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuLCBJREVOVF9OQU1FX0dJVkVOKTsKKwlzZXRfZW52X2lmKCJHSVRfQVVUSE9SX0VNQUlMIiwgZW1haWwsCisJCSAgICZhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiwgSURFTlRfTUFJTF9HSVZFTik7CisJc2V0X2Vudl9pZigiR0lUX0NPTU1JVFRFUl9OQU1FIiwgbmFtZSwKKwkJICAgJmNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuLCBJREVOVF9OQU1FX0dJVkVOKTsKKwlzZXRfZW52X2lmKCJHSVRfQ09NTUlUVEVSX0VNQUlMIiwgZW1haWwsCisJCSAgICZjb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiwgSURFTlRfTUFJTF9HSVZFTik7Cit9CisKK3N0YXRpYyBpbnQgYnVmX2NtcChjb25zdCBjaGFyICphX2JlZ2luLCBjb25zdCBjaGFyICphX2VuZCwKKwkJICAgY29uc3QgY2hhciAqYl9iZWdpbiwgY29uc3QgY2hhciAqYl9lbmQpCit7CisJaW50IGFfbGVuID0gYV9lbmQgLSBhX2JlZ2luOworCWludCBiX2xlbiA9IGJfZW5kIC0gYl9iZWdpbjsKKwlpbnQgbWluID0gYV9sZW4gPCBiX2xlbiA/IGFfbGVuIDogYl9sZW47CisJaW50IGNtcDsKKworCWNtcCA9IG1lbWNtcChhX2JlZ2luLCBiX2JlZ2luLCBtaW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwlyZXR1cm4gYV9sZW4gLSBiX2xlbjsKK30KKworaW50IGlkZW50X2NtcChjb25zdCBzdHJ1Y3QgaWRlbnRfc3BsaXQgKmEsCisJICAgICAgY29uc3Qgc3RydWN0IGlkZW50X3NwbGl0ICpiKQoreworCWludCBjbXA7CisKKwljbXAgPSBidWZfY21wKGEtPm1haWxfYmVnaW4sIGEtPm1haWxfZW5kLAorCQkgICAgICBiLT5tYWlsX2JlZ2luLCBiLT5tYWlsX2VuZCk7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKworCXJldHVybiBidWZfY21wKGEtPm5hbWVfYmVnaW4sIGEtPm5hbWVfZW5kLAorCQkgICAgICAgYi0+bmFtZV9iZWdpbiwgYi0+bmFtZV9lbmQpOworfQpkaWZmIC0tZ2l0IGEvaW1hcC1zZW5kLmMgYi9pbWFwLXNlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzU0ZDhjCi0tLSAvZGV2L251bGwKKysrIGIvaW1hcC1zZW5kLmMKQEAgLTAsMCArMSwxNjA0IEBACisvKgorICogZ2l0LWltYXAtc2VuZCAtIGRyb3BzIHBhdGNoZXMgaW50byBhbiBpbWFwIERyYWZ0cyBmb2xkZXIKKyAqICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gaXN5bmMvbWJzeW5jIC0gbWFpbGJveCBzeW5jaHJvbml6ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBNaWNoYWVsIFIuIEVsa2lucyA8bWVAbXV0dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBPc3dhbGQgQnVkZGVuaGFnZW4gPG9zc2lAdXNlcnMuc2YubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlrZSBNY0Nvcm1hY2sKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2lmZGVmIE5PX09QRU5TU0wKK3R5cGVkZWYgdm9pZCAqU1NMOworI2VuZGlmCisjaWZkZWYgVVNFX0NVUkxfRk9SX0lNQVBfU0VORAorI2luY2x1ZGUgImh0dHAuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChVU0VfQ1VSTF9GT1JfSU1BUF9TRU5EKQorLyogQWx3YXlzIGRlZmF1bHQgdG8gY3VybCBpZiBpdCdzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgVVNFX0NVUkxfREVGQVVMVCAxCisjZWxzZQorLyogV2UgZG9uJ3QgaGF2ZSBjdXJsLCBzbyBjb250aW51ZSB0byB1c2UgdGhlIGhpc3RvcmljYWwgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgVVNFX0NVUkxfREVGQVVMVCAwCisjZW5kaWYKKworc3RhdGljIGludCB2ZXJib3NpdHk7CitzdGF0aWMgaW50IHVzZV9jdXJsID0gVVNFX0NVUkxfREVGQVVMVDsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbWFwX3NlbmRfdXNhZ2VbXSA9IHsgImdpdCBpbWFwLXNlbmQgWy12XSBbLXFdIFstLVtuby1dY3VybF0gPCA8bWJveD4iLCBOVUxMIH07CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGltYXBfc2VuZF9vcHRpb25zW10gPSB7CisJT1BUX19WRVJCT1NJVFkoJnZlcmJvc2l0eSksCisJT1BUX0JPT0woMCwgImN1cmwiLCAmdXNlX2N1cmwsICJ1c2UgbGliY3VybCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBJTUFQIHNlcnZlciIpLAorCU9QVF9FTkQoKQorfTsKKworI3VuZGVmIERSVl9PSworI2RlZmluZSBEUlZfT0sgICAgICAgICAgMAorI2RlZmluZSBEUlZfTVNHX0JBRCAgICAgLTEKKyNkZWZpbmUgRFJWX0JPWF9CQUQgICAgIC0yCisjZGVmaW5lIERSVl9TVE9SRV9CQUQgICAtMworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgaW1hcF9pbmZvKGNvbnN0IGNoYXIgKiwgLi4uKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCBpbWFwX3dhcm4oY29uc3QgY2hhciAqLCAuLi4pOworCitzdGF0aWMgY2hhciAqbmV4dF9hcmcoY2hhciAqKik7CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgaW50IG5mc25wcmludGYoY2hhciAqYnVmLCBpbnQgYmxlbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCitzdGF0aWMgaW50IG5mdmFzcHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJaW50IGxlbjsKKwljaGFyIHRtcFs4MTkyXTsKKworCWxlbiA9IHZzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCBmbXQsIGFwKTsKKwlpZiAobGVuIDwgMCkKKwkJZGllKCJGYXRhbDogT3V0IG9mIG1lbW9yeSIpOworCWlmIChsZW4gPj0gc2l6ZW9mKHRtcCkpCisJCWRpZSgiaW1hcCBjb21tYW5kIG92ZXJmbG93ISIpOworCSpzdHJwID0geG1lbWR1cHoodG1wLCBsZW4pOworCXJldHVybiBsZW47Cit9CisKK3N0cnVjdCBpbWFwX3NlcnZlcl9jb25mIHsKKwljaGFyICpuYW1lOworCWNoYXIgKnR1bm5lbDsKKwljaGFyICpob3N0OworCWludCBwb3J0OworCWNoYXIgKmZvbGRlcjsKKwljaGFyICp1c2VyOworCWNoYXIgKnBhc3M7CisJaW50IHVzZV9zc2w7CisJaW50IHNzbF92ZXJpZnk7CisJaW50IHVzZV9odG1sOworCWNoYXIgKmF1dGhfbWV0aG9kOworfTsKKworc3RhdGljIHN0cnVjdCBpbWFwX3NlcnZlcl9jb25mIHNlcnZlciA9IHsKKwlOVUxMLAkvKiBuYW1lICovCisJTlVMTCwJLyogdHVubmVsICovCisJTlVMTCwJLyogaG9zdCAqLworCTAsCS8qIHBvcnQgKi8KKwlOVUxMLAkvKiBmb2xkZXIgKi8KKwlOVUxMLAkvKiB1c2VyICovCisJTlVMTCwJLyogcGFzcyAqLworCTAsICAgCS8qIHVzZV9zc2wgKi8KKwkxLCAgIAkvKiBzc2xfdmVyaWZ5ICovCisJMCwgICAJLyogdXNlX2h0bWwgKi8KKwlOVUxMLAkvKiBhdXRoX21ldGhvZCAqLworfTsKKworc3RydWN0IGltYXBfc29ja2V0IHsKKwlpbnQgZmRbMl07CisJU1NMICpzc2w7Cit9OworCitzdHJ1Y3QgaW1hcF9idWZmZXIgeworCXN0cnVjdCBpbWFwX3NvY2tldCBzb2NrOworCWludCBieXRlczsKKwlpbnQgb2Zmc2V0OworCWNoYXIgYnVmWzEwMjRdOworfTsKKworc3RydWN0IGltYXBfY21kOworCitzdHJ1Y3QgaW1hcCB7CisJaW50IHVpZG5leHQ7IC8qIGZyb20gU0VMRUNUIHJlc3BvbnNlcyAqLworCXVuc2lnbmVkIGNhcHMsIHJjYXBzOyAvKiBDQVBBQklMSVRZIHJlc3VsdHMgKi8KKwkvKiBjb21tYW5kIHF1ZXVlICovCisJaW50IG5leHR0YWcsIG51bV9pbl9wcm9ncmVzcywgbGl0ZXJhbF9wZW5kaW5nOworCXN0cnVjdCBpbWFwX2NtZCAqaW5fcHJvZ3Jlc3MsICoqaW5fcHJvZ3Jlc3NfYXBwZW5kOworCXN0cnVjdCBpbWFwX2J1ZmZlciBidWY7IC8qIHRoaXMgaXMgQklHLCBzbyBwdXQgaXQgbGFzdCAqLworfTsKKworc3RydWN0IGltYXBfc3RvcmUgeworCS8qIGN1cnJlbnRseSBvcGVuIG1haWxib3ggKi8KKwljb25zdCBjaGFyICpuYW1lOyAvKiBmb3JlaWduISBtYXliZSBwcmVzZXQ/ICovCisJaW50IHVpZHZhbGlkaXR5OworCXN0cnVjdCBpbWFwICppbWFwOworCWNvbnN0IGNoYXIgKnByZWZpeDsKK307CisKK3N0cnVjdCBpbWFwX2NtZF9jYiB7CisJaW50ICgqY29udCkoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kICpjbWQsIGNvbnN0IGNoYXIgKnByb21wdCk7CisJdm9pZCAoKmRvbmUpKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZCAqY21kLCBpbnQgcmVzcG9uc2UpOworCXZvaWQgKmN0eDsKKwljaGFyICpkYXRhOworCWludCBkbGVuOworCWludCB1aWQ7Cit9OworCitzdHJ1Y3QgaW1hcF9jbWQgeworCXN0cnVjdCBpbWFwX2NtZCAqbmV4dDsKKwlzdHJ1Y3QgaW1hcF9jbWRfY2IgY2I7CisJY2hhciAqY21kOworCWludCB0YWc7Cit9OworCisjZGVmaW5lIENBUChjYXApIChpbWFwLT5jYXBzICYgKDEgPDwgKGNhcCkpKQorCitlbnVtIENBUEFCSUxJVFkgeworCU5PTE9HSU4gPSAwLAorCVVJRFBMVVMsCisJTElURVJBTFBMVVMsCisJTkFNRVNQQUNFLAorCVNUQVJUVExTLAorCUFVVEhfQ1JBTV9NRDUKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjYXBfbGlzdFtdID0geworCSJMT0dJTkRJU0FCTEVEIiwKKwkiVUlEUExVUyIsCisJIkxJVEVSQUwrIiwKKwkiTkFNRVNQQUNFIiwKKwkiU1RBUlRUTFMiLAorCSJBVVRIPUNSQU0tTUQ1IiwKK307CisKKyNkZWZpbmUgUkVTUF9PSyAgICAwCisjZGVmaW5lIFJFU1BfTk8gICAgMQorI2RlZmluZSBSRVNQX0JBRCAgIDIKKworc3RhdGljIGludCBnZXRfY21kX3Jlc3VsdChzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWQgKnRjbWQpOworCisKKyNpZm5kZWYgTk9fT1BFTlNTTAorc3RhdGljIHZvaWQgc3NsX3NvY2tldF9wZXJyb3IoY29uc3QgY2hhciAqZnVuYykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgZnVuYywgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzb2NrZXRfcGVycm9yKGNvbnN0IGNoYXIgKmZ1bmMsIHN0cnVjdCBpbWFwX3NvY2tldCAqc29jaywgaW50IHJldCkKK3sKKyNpZm5kZWYgTk9fT1BFTlNTTAorCWlmIChzb2NrLT5zc2wpIHsKKwkJaW50IHNzbGVyciA9IFNTTF9nZXRfZXJyb3Ioc29jay0+c3NsLCByZXQpOworCQlzd2l0Y2ggKHNzbGVycikgeworCQljYXNlIFNTTF9FUlJPUl9OT05FOgorCQkJYnJlYWs7CisJCWNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisJCQlwZXJyb3IoIlNTTF9jb25uZWN0Iik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0xfY29ubmVjdCIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJaWYgKHJldCA8IDApCisJCQlwZXJyb3IoZnVuYyk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVuZXhwZWN0ZWQgRU9GXG4iLCBmdW5jKTsKKwl9Cit9CisKKyNpZmRlZiBOT19PUEVOU1NMCitzdGF0aWMgaW50IHNzbF9zb2NrZXRfY29ubmVjdChzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2ssIGludCB1c2VfdGxzX29ubHksIGludCB2ZXJpZnkpCit7CisJZnByaW50ZihzdGRlcnIsICJTU0wgcmVxdWVzdGVkIGJ1dCBTU0wgc3VwcG9ydCBub3QgY29tcGlsZWQgaW5cbiIpOworCXJldHVybiAtMTsKK30KKworI2Vsc2UKKworc3RhdGljIGludCBob3N0X21hdGNoZXMoY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwlpZiAocGF0dGVyblswXSA9PSAnKicgJiYgcGF0dGVyblsxXSA9PSAnLicpIHsKKwkJcGF0dGVybiArPSAyOworCQlpZiAoIShob3N0ID0gc3RyY2hyKGhvc3QsICcuJykpKQorCQkJcmV0dXJuIDA7CisJCWhvc3QrKzsKKwl9CisKKwlyZXR1cm4gKmhvc3QgJiYgKnBhdHRlcm4gJiYgIXN0cmNhc2VjbXAoaG9zdCwgcGF0dGVybik7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2hvc3RuYW1lKFg1MDkgKmNlcnQsIGNvbnN0IGNoYXIgKmhvc3RuYW1lKQoreworCWludCBsZW47CisJWDUwOV9OQU1FICpzdWJqOworCWNoYXIgY25hbWVbMTAwMF07CisJaW50IGksIGZvdW5kOworCVNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKnN1YmpfYWx0X25hbWVzOworCisJLyogdHJ5IHRoZSBETlMgc3ViamVjdEFsdE5hbWVzICovCisJZm91bmQgPSAwOworCWlmICgoc3Vial9hbHRfbmFtZXMgPSBYNTA5X2dldF9leHRfZDJpKGNlcnQsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCBOVUxMLCBOVUxMKSkpIHsKKwkJaW50IG51bV9zdWJqX2FsdF9uYW1lcyA9IHNrX0dFTkVSQUxfTkFNRV9udW0oc3Vial9hbHRfbmFtZXMpOworCQlmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8IG51bV9zdWJqX2FsdF9uYW1lczsgaSsrKSB7CisJCQlHRU5FUkFMX05BTUUgKnN1YmpfYWx0X25hbWUgPSBza19HRU5FUkFMX05BTUVfdmFsdWUoc3Vial9hbHRfbmFtZXMsIGkpOworCQkJaWYgKHN1YmpfYWx0X25hbWUtPnR5cGUgPT0gR0VOX0ROUyAmJgorCQkJICAgIHN0cmxlbigoY29uc3QgY2hhciAqKXN1YmpfYWx0X25hbWUtPmQuaWE1LT5kYXRhKSA9PSAoc2l6ZV90KXN1YmpfYWx0X25hbWUtPmQuaWE1LT5sZW5ndGggJiYKKwkJCSAgICBob3N0X21hdGNoZXMoaG9zdG5hbWUsIChjb25zdCBjaGFyICopKHN1YmpfYWx0X25hbWUtPmQuaWE1LT5kYXRhKSkpCisJCQkJZm91bmQgPSAxOworCQl9CisJCXNrX0dFTkVSQUxfTkFNRV9wb3BfZnJlZShzdWJqX2FsdF9uYW1lcywgR0VORVJBTF9OQU1FX2ZyZWUpOworCX0KKwlpZiAoZm91bmQpCisJCXJldHVybiAwOworCisJLyogdHJ5IHRoZSBjb21tb24gbmFtZSAqLworCWlmICghKHN1YmogPSBYNTA5X2dldF9zdWJqZWN0X25hbWUoY2VydCkpKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBnZXQgY2VydGlmaWNhdGUgc3ViamVjdCIpOworCWlmICgobGVuID0gWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRChzdWJqLCBOSURfY29tbW9uTmFtZSwgY25hbWUsIHNpemVvZihjbmFtZSkpKSA8IDApCisJCXJldHVybiBlcnJvcigiY2Fubm90IGdldCBjZXJ0aWZpY2F0ZSBjb21tb24gbmFtZSIpOworCWlmIChzdHJsZW4oY25hbWUpID09IChzaXplX3QpbGVuICYmIGhvc3RfbWF0Y2hlcyhob3N0bmFtZSwgY25hbWUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3IoImNlcnRpZmljYXRlIG93bmVyICclcycgZG9lcyBub3QgbWF0Y2ggaG9zdG5hbWUgJyVzJyIsCisJCSAgICAgY25hbWUsIGhvc3RuYW1lKTsKK30KKworc3RhdGljIGludCBzc2xfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IGltYXBfc29ja2V0ICpzb2NrLCBpbnQgdXNlX3Rsc19vbmx5LCBpbnQgdmVyaWZ5KQoreworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDAwMDBMKQorCWNvbnN0IFNTTF9NRVRIT0QgKm1ldGg7CisjZWxzZQorCVNTTF9NRVRIT0QgKm1ldGg7CisjZW5kaWYKKwlTU0xfQ1RYICpjdHg7CisJaW50IHJldDsKKwlYNTA5ICpjZXJ0OworCisJU1NMX2xpYnJhcnlfaW5pdCgpOworCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsKKworCW1ldGggPSBTU0x2MjNfbWV0aG9kKCk7CisJaWYgKCFtZXRoKSB7CisJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0x2MjNfbWV0aG9kIik7CisJCXJldHVybiAtMTsKKwl9CisKKwljdHggPSBTU0xfQ1RYX25ldyhtZXRoKTsKKwlpZiAoIWN0eCkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX0NUWF9uZXciKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh1c2VfdGxzX29ubHkpCisJCVNTTF9DVFhfc2V0X29wdGlvbnMoY3R4LCBTU0xfT1BfTk9fU1NMdjIgfCBTU0xfT1BfTk9fU1NMdjMpOworCisJaWYgKHZlcmlmeSkKKwkJU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCwgU1NMX1ZFUklGWV9QRUVSLCBOVUxMKTsKKworCWlmICghU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoY3R4KSkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzb2NrLT5zc2wgPSBTU0xfbmV3KGN0eCk7CisJaWYgKCFzb2NrLT5zc2wpIHsKKwkJc3NsX3NvY2tldF9wZXJyb3IoIlNTTF9uZXciKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIVNTTF9zZXRfcmZkKHNvY2stPnNzbCwgc29jay0+ZmRbMF0pKSB7CisJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0xfc2V0X3JmZCIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghU1NMX3NldF93ZmQoc29jay0+c3NsLCBzb2NrLT5mZFsxXSkpIHsKKwkJc3NsX3NvY2tldF9wZXJyb3IoIlNTTF9zZXRfd2ZkIik7CisJCXJldHVybiAtMTsKKwl9CisKKyNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisJLyoKKwkgKiBTTkkgKFJGQzQzNjYpCisJICogT3BlblNTTCBkb2VzIG5vdCBkb2N1bWVudCB0aGlzIGZ1bmN0aW9uLCBidXQgdGhlIGltcGxlbWVudGF0aW9uCisJICogcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZSBhZnRlciBjYWxsaW5nIFNTTGVycigpLgorCSAqLworCXJldCA9IFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShzb2NrLT5zc2wsIHNlcnZlci5ob3N0KTsKKwlpZiAocmV0ICE9IDEpCisJCXdhcm5pbmcoIlNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZSglcykgZmFpbGVkLiIsIHNlcnZlci5ob3N0KTsKKyNlbmRpZgorCisJcmV0ID0gU1NMX2Nvbm5lY3Qoc29jay0+c3NsKTsKKwlpZiAocmV0IDw9IDApIHsKKwkJc29ja2V0X3BlcnJvcigiU1NMX2Nvbm5lY3QiLCBzb2NrLCByZXQpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHZlcmlmeSkgeworCQkvKiBtYWtlIHN1cmUgdGhlIGhvc3RuYW1lIG1hdGNoZXMgdGhhdCBvZiB0aGUgY2VydGlmaWNhdGUgKi8KKwkJY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzb2NrLT5zc2wpOworCQlpZiAoIWNlcnQpCisJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKTsKKwkJaWYgKHZlcmlmeV9ob3N0bmFtZShjZXJ0LCBzZXJ2ZXIuaG9zdCkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc29ja2V0X3JlYWQoc3RydWN0IGltYXBfc29ja2V0ICpzb2NrLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJc3NpemVfdCBuOworI2lmbmRlZiBOT19PUEVOU1NMCisJaWYgKHNvY2stPnNzbCkKKwkJbiA9IFNTTF9yZWFkKHNvY2stPnNzbCwgYnVmLCBsZW4pOworCWVsc2UKKyNlbmRpZgorCQluID0geHJlYWQoc29jay0+ZmRbMF0sIGJ1ZiwgbGVuKTsKKwlpZiAobiA8PSAwKSB7CisJCXNvY2tldF9wZXJyb3IoInJlYWQiLCBzb2NrLCBuKTsKKwkJY2xvc2Uoc29jay0+ZmRbMF0pOworCQljbG9zZShzb2NrLT5mZFsxXSk7CisJCXNvY2stPmZkWzBdID0gc29jay0+ZmRbMV0gPSAtMTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc29ja2V0X3dyaXRlKHN0cnVjdCBpbWFwX3NvY2tldCAqc29jaywgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBuOworI2lmbmRlZiBOT19PUEVOU1NMCisJaWYgKHNvY2stPnNzbCkKKwkJbiA9IFNTTF93cml0ZShzb2NrLT5zc2wsIGJ1ZiwgbGVuKTsKKwllbHNlCisjZW5kaWYKKwkJbiA9IHdyaXRlX2luX2Z1bGwoc29jay0+ZmRbMV0sIGJ1ZiwgbGVuKTsKKwlpZiAobiAhPSBsZW4pIHsKKwkJc29ja2V0X3BlcnJvcigid3JpdGUiLCBzb2NrLCBuKTsKKwkJY2xvc2Uoc29jay0+ZmRbMF0pOworCQljbG9zZShzb2NrLT5mZFsxXSk7CisJCXNvY2stPmZkWzBdID0gc29jay0+ZmRbMV0gPSAtMTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIHNvY2tldF9zaHV0ZG93bihzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2spCit7CisjaWZuZGVmIE5PX09QRU5TU0wKKwlpZiAoc29jay0+c3NsKSB7CisJCVNTTF9zaHV0ZG93bihzb2NrLT5zc2wpOworCQlTU0xfZnJlZShzb2NrLT5zc2wpOworCX0KKyNlbmRpZgorCWNsb3NlKHNvY2stPmZkWzBdKTsKKwljbG9zZShzb2NrLT5mZFsxXSk7Cit9CisKKy8qIHNpbXBsZSBsaW5lIGJ1ZmZlcmluZyAqLworc3RhdGljIGludCBidWZmZXJfZ2V0cyhzdHJ1Y3QgaW1hcF9idWZmZXIgKmIsIGNoYXIgKipzKQoreworCWludCBuOworCWludCBzdGFydCA9IGItPm9mZnNldDsKKworCSpzID0gYi0+YnVmICsgc3RhcnQ7CisKKwlmb3IgKDs7KSB7CisJCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBkYXRhIHRvIHJlYWQgdGhlIFxyXG4gc2VxdWVuY2UgKi8KKwkJaWYgKGItPm9mZnNldCArIDEgPj0gYi0+Ynl0ZXMpIHsKKwkJCWlmIChzdGFydCkgeworCQkJCS8qIHNoaWZ0IGRvd24gdXNlZCBieXRlcyAqLworCQkJCSpzID0gYi0+YnVmOworCisJCQkJYXNzZXJ0KHN0YXJ0IDw9IGItPmJ5dGVzKTsKKwkJCQluID0gYi0+Ynl0ZXMgLSBzdGFydDsKKworCQkJCWlmIChuKQorCQkJCQltZW1tb3ZlKGItPmJ1ZiwgYi0+YnVmICsgc3RhcnQsIG4pOworCQkJCWItPm9mZnNldCAtPSBzdGFydDsKKwkJCQliLT5ieXRlcyA9IG47CisJCQkJc3RhcnQgPSAwOworCQkJfQorCisJCQluID0gc29ja2V0X3JlYWQoJmItPnNvY2ssIGItPmJ1ZiArIGItPmJ5dGVzLAorCQkJCQkgc2l6ZW9mKGItPmJ1ZikgLSBiLT5ieXRlcyk7CisKKwkJCWlmIChuIDw9IDApCisJCQkJcmV0dXJuIC0xOworCisJCQliLT5ieXRlcyArPSBuOworCQl9CisKKwkJaWYgKGItPmJ1ZltiLT5vZmZzZXRdID09ICdccicpIHsKKwkJCWFzc2VydChiLT5vZmZzZXQgKyAxIDwgYi0+Ynl0ZXMpOworCQkJaWYgKGItPmJ1ZltiLT5vZmZzZXQgKyAxXSA9PSAnXG4nKSB7CisJCQkJYi0+YnVmW2ItPm9mZnNldF0gPSAwOyAgLyogdGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKwkJCQliLT5vZmZzZXQgKz0gMjsgLyogbmV4dCBsaW5lICovCisJCQkJaWYgKDAgPCB2ZXJib3NpdHkpCisJCQkJCXB1dHMoKnMpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisKKwkJYi0+b2Zmc2V0Kys7CisJfQorCS8qIG5vdCByZWFjaGVkICovCit9CisKK3N0YXRpYyB2b2lkIGltYXBfaW5mbyhjb25zdCBjaGFyICptc2csIC4uLikKK3sKKwl2YV9saXN0IHZhOworCisJaWYgKDAgPD0gdmVyYm9zaXR5KSB7CisJCXZhX3N0YXJ0KHZhLCBtc2cpOworCQl2cHJpbnRmKG1zZywgdmEpOworCQl2YV9lbmQodmEpOworCQlmZmx1c2goc3Rkb3V0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGltYXBfd2Fybihjb25zdCBjaGFyICptc2csIC4uLikKK3sKKwl2YV9saXN0IHZhOworCisJaWYgKC0yIDwgdmVyYm9zaXR5KSB7CisJCXZhX3N0YXJ0KHZhLCBtc2cpOworCQl2ZnByaW50ZihzdGRlcnIsIG1zZywgdmEpOworCQl2YV9lbmQodmEpOworCX0KK30KKworc3RhdGljIGNoYXIgKm5leHRfYXJnKGNoYXIgKipzKQoreworCWNoYXIgKnJldDsKKworCWlmICghcyB8fCAhKnMpCisJCXJldHVybiBOVUxMOworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqKnMpKQorCQkoKnMpKys7CisJaWYgKCEqKnMpIHsKKwkJKnMgPSBOVUxMOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKCoqcyA9PSAnIicpIHsKKwkJKysqczsKKwkJcmV0ID0gKnM7CisJCSpzID0gc3RyY2hyKCpzLCAnIicpOworCX0gZWxzZSB7CisJCXJldCA9ICpzOworCQl3aGlsZSAoKipzICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqKnMpKQorCQkJKCpzKSsrOworCX0KKwlpZiAoKnMpIHsKKwkJaWYgKCoqcykKKwkJCSooKnMpKysgPSAwOworCQlpZiAoISoqcykKKwkJCSpzID0gTlVMTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuZnNucHJpbnRmKGNoYXIgKmJ1ZiwgaW50IGJsZW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCB2YTsKKworCXZhX3N0YXJ0KHZhLCBmbXQpOworCWlmIChibGVuIDw9IDAgfHwgKHVuc2lnbmVkKShyZXQgPSB2c25wcmludGYoYnVmLCBibGVuLCBmbXQsIHZhKSkgPj0gKHVuc2lnbmVkKWJsZW4pCisJCUJVRygiYnVmZmVyIHRvbyBzbWFsbC4gUGxlYXNlIHJlcG9ydCBhIGJ1Zy4iKTsKKwl2YV9lbmQodmEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW1hcF9jbWQgKmlzc3VlX2ltYXBfY21kKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsCisJCQkJICAgICAgIHN0cnVjdCBpbWFwX2NtZF9jYiAqY2IsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwlzdHJ1Y3QgaW1hcF9jbWQgKmNtZDsKKwlpbnQgbiwgYnVmbDsKKwljaGFyIGJ1ZlsxMDI0XTsKKworCWNtZCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbWFwX2NtZCkpOworCW5mdmFzcHJpbnRmKCZjbWQtPmNtZCwgZm10LCBhcCk7CisJY21kLT50YWcgPSArK2ltYXAtPm5leHR0YWc7CisKKwlpZiAoY2IpCisJCWNtZC0+Y2IgPSAqY2I7CisJZWxzZQorCQltZW1zZXQoJmNtZC0+Y2IsIDAsIHNpemVvZihjbWQtPmNiKSk7CisKKwl3aGlsZSAoaW1hcC0+bGl0ZXJhbF9wZW5kaW5nKQorCQlnZXRfY21kX3Jlc3VsdChjdHgsIE5VTEwpOworCisJaWYgKCFjbWQtPmNiLmRhdGEpCisJCWJ1ZmwgPSBuZnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCAlc1xyXG4iLCBjbWQtPnRhZywgY21kLT5jbWQpOworCWVsc2UKKwkJYnVmbCA9IG5mc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkICVzeyVkJXN9XHJcbiIsCisJCQkJICBjbWQtPnRhZywgY21kLT5jbWQsIGNtZC0+Y2IuZGxlbiwKKwkJCQkgIENBUChMSVRFUkFMUExVUykgPyAiKyIgOiAiIik7CisKKwlpZiAoMCA8IHZlcmJvc2l0eSkgeworCQlpZiAoaW1hcC0+bnVtX2luX3Byb2dyZXNzKQorCQkJcHJpbnRmKCIoJWQgaW4gcHJvZ3Jlc3MpICIsIGltYXAtPm51bV9pbl9wcm9ncmVzcyk7CisJCWlmICghc3RhcnRzX3dpdGgoY21kLT5jbWQsICJMT0dJTiIpKQorCQkJcHJpbnRmKCI+Pj4gJXMiLCBidWYpOworCQllbHNlCisJCQlwcmludGYoIj4+PiAlZCBMT0dJTiA8dXNlcj4gPHBhc3M+XG4iLCBjbWQtPnRhZyk7CisJfQorCWlmIChzb2NrZXRfd3JpdGUoJmltYXAtPmJ1Zi5zb2NrLCBidWYsIGJ1ZmwpICE9IGJ1ZmwpIHsKKwkJZnJlZShjbWQtPmNtZCk7CisJCWZyZWUoY21kKTsKKwkJaWYgKGNiKQorCQkJZnJlZShjYi0+ZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoY21kLT5jYi5kYXRhKSB7CisJCWlmIChDQVAoTElURVJBTFBMVVMpKSB7CisJCQluID0gc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgY21kLT5jYi5kYXRhLCBjbWQtPmNiLmRsZW4pOworCQkJZnJlZShjbWQtPmNiLmRhdGEpOworCQkJaWYgKG4gIT0gY21kLT5jYi5kbGVuIHx8CisJCQkgICAgc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgIlxyXG4iLCAyKSAhPSAyKSB7CisJCQkJZnJlZShjbWQtPmNtZCk7CisJCQkJZnJlZShjbWQpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJY21kLT5jYi5kYXRhID0gTlVMTDsKKwkJfSBlbHNlCisJCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAxOworCX0gZWxzZSBpZiAoY21kLT5jYi5jb250KQorCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAxOworCWNtZC0+bmV4dCA9IE5VTEw7CisJKmltYXAtPmluX3Byb2dyZXNzX2FwcGVuZCA9IGNtZDsKKwlpbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgPSAmY21kLT5uZXh0OworCWltYXAtPm51bV9pbl9wcm9ncmVzcysrOworCXJldHVybiBjbWQ7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgaW50IGltYXBfZXhlYyhzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWRfY2IgKmNiLAorCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IGltYXBfY21kICpjbWRwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJY21kcCA9IGlzc3VlX2ltYXBfY21kKGN0eCwgY2IsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKCFjbWRwKQorCQlyZXR1cm4gUkVTUF9CQUQ7CisKKwlyZXR1cm4gZ2V0X2NtZF9yZXN1bHQoY3R4LCBjbWRwKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK3N0YXRpYyBpbnQgaW1hcF9leGVjX20oc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kX2NiICpjYiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IGltYXBfY21kICpjbWRwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJY21kcCA9IGlzc3VlX2ltYXBfY21kKGN0eCwgY2IsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKCFjbWRwKQorCQlyZXR1cm4gRFJWX1NUT1JFX0JBRDsKKworCXN3aXRjaCAoZ2V0X2NtZF9yZXN1bHQoY3R4LCBjbWRwKSkgeworCWNhc2UgUkVTUF9CQUQ6IHJldHVybiBEUlZfU1RPUkVfQkFEOworCWNhc2UgUkVTUF9OTzogcmV0dXJuIERSVl9NU0dfQkFEOworCWRlZmF1bHQ6IHJldHVybiBEUlZfT0s7CisJfQorfQorCitzdGF0aWMgaW50IHNraXBfaW1hcF9saXN0X2woY2hhciAqKnNwLCBpbnQgbGV2ZWwpCit7CisJY2hhciAqcyA9ICpzcDsKKworCWZvciAoOzspIHsKKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnMpKQorCQkJcysrOworCQlpZiAobGV2ZWwgJiYgKnMgPT0gJyknKSB7CisJCQlzKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKnMgPT0gJygnKSB7CisJCQkvKiBzdWJsaXN0ICovCisJCQlzKys7CisJCQlpZiAoc2tpcF9pbWFwX2xpc3RfbCgmcywgbGV2ZWwgKyAxKSkKKwkJCQlnb3RvIGJhaWw7CisJCX0gZWxzZSBpZiAoKnMgPT0gJyInKSB7CisJCQkvKiBxdW90ZWQgc3RyaW5nICovCisJCQlzKys7CisJCQlmb3IgKDsgKnMgIT0gJyInOyBzKyspCisJCQkJaWYgKCEqcykKKwkJCQkJZ290byBiYWlsOworCQkJcysrOworCQl9IGVsc2UgeworCQkJLyogYXRvbSAqLworCQkJZm9yICg7ICpzICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpzKTsgcysrKQorCQkJCWlmIChsZXZlbCAmJiAqcyA9PSAnKScpCisJCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFsZXZlbCkKKwkJCWJyZWFrOworCQlpZiAoISpzKQorCQkJZ290byBiYWlsOworCX0KKwkqc3AgPSBzOworCXJldHVybiAwOworCitiYWlsOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgc2tpcF9saXN0KGNoYXIgKipzcCkKK3sKKwlza2lwX2ltYXBfbGlzdF9sKHNwLCAwKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY2FwYWJpbGl0eShzdHJ1Y3QgaW1hcCAqaW1hcCwgY2hhciAqY21kKQoreworCWNoYXIgKmFyZzsKKwl1bnNpZ25lZCBpOworCisJaW1hcC0+Y2FwcyA9IDB4ODAwMDAwMDA7CisJd2hpbGUgKChhcmcgPSBuZXh0X2FyZygmY21kKSkpCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhcF9saXN0KTsgaSsrKQorCQkJaWYgKCFzdHJjbXAoY2FwX2xpc3RbaV0sIGFyZykpCisJCQkJaW1hcC0+Y2FwcyB8PSAxIDw8IGk7CisJaW1hcC0+cmNhcHMgPSBpbWFwLT5jYXBzOworfQorCitzdGF0aWMgaW50IHBhcnNlX3Jlc3BvbnNlX2NvZGUoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kX2NiICpjYiwKKwkJCSAgICAgICBjaGFyICpzKQoreworCXN0cnVjdCBpbWFwICppbWFwID0gY3R4LT5pbWFwOworCWNoYXIgKmFyZywgKnA7CisKKwlpZiAoIXMgfHwgKnMgIT0gJ1snKQorCQlyZXR1cm4gUkVTUF9PSzsJCS8qIG5vIHJlc3BvbnNlIGNvZGUgKi8KKwlzKys7CisJaWYgKCEocCA9IHN0cmNocihzLCAnXScpKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IG1hbGZvcm1lZCByZXNwb25zZSBjb2RlXG4iKTsKKwkJcmV0dXJuIFJFU1BfQkFEOworCX0KKwkqcCsrID0gMDsKKwlhcmcgPSBuZXh0X2FyZygmcyk7CisJaWYgKCFhcmcpIHsKKwkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBlbXB0eSByZXNwb25zZSBjb2RlXG4iKTsKKwkJcmV0dXJuIFJFU1BfQkFEOworCX0KKwlpZiAoIXN0cmNtcCgiVUlEVkFMSURJVFkiLCBhcmcpKSB7CisJCWlmICghKGFyZyA9IG5leHRfYXJnKCZzKSkgfHwgIShjdHgtPnVpZHZhbGlkaXR5ID0gYXRvaShhcmcpKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBtYWxmb3JtZWQgVUlEVkFMSURJVFkgc3RhdHVzXG4iKTsKKwkJCXJldHVybiBSRVNQX0JBRDsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcCgiVUlETkVYVCIsIGFyZykpIHsKKwkJaWYgKCEoYXJnID0gbmV4dF9hcmcoJnMpKSB8fCAhKGltYXAtPnVpZG5leHQgPSBhdG9pKGFyZykpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IG1hbGZvcm1lZCBORVhUVUlEIHN0YXR1c1xuIik7CisJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoIkNBUEFCSUxJVFkiLCBhcmcpKSB7CisJCXBhcnNlX2NhcGFiaWxpdHkoaW1hcCwgcyk7CisJfSBlbHNlIGlmICghc3RyY21wKCJBTEVSVCIsIGFyZykpIHsKKwkJLyogUkZDMjA2MCBzYXlzIHRoYXQgdGhlc2UgbWVzc2FnZXMgTVVTVCBiZSBkaXNwbGF5ZWQKKwkJICogdG8gdGhlIHVzZXIKKwkJICovCisJCWZvciAoOyBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKTsgcCsrKTsKKwkJZnByaW50ZihzdGRlcnIsICIqKiogSU1BUCBBTEVSVCAqKiogJXNcbiIsIHApOworCX0gZWxzZSBpZiAoY2IgJiYgY2ItPmN0eCAmJiAhc3RyY21wKCJBUFBFTkRVSUQiLCBhcmcpKSB7CisJCWlmICghKGFyZyA9IG5leHRfYXJnKCZzKSkgfHwgIShjdHgtPnVpZHZhbGlkaXR5ID0gYXRvaShhcmcpKSB8fAorCQkgICAgIShhcmcgPSBuZXh0X2FyZygmcykpIHx8ICEoKihpbnQgKiljYi0+Y3R4ID0gYXRvaShhcmcpKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBtYWxmb3JtZWQgQVBQRU5EVUlEIHN0YXR1c1xuIik7CisJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCX0KKwl9CisJcmV0dXJuIFJFU1BfT0s7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NtZF9yZXN1bHQoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kICp0Y21kKQoreworCXN0cnVjdCBpbWFwICppbWFwID0gY3R4LT5pbWFwOworCXN0cnVjdCBpbWFwX2NtZCAqY21kcCwgKipwY21kcDsKKwljaGFyICpjbWQ7CisJY29uc3QgY2hhciAqYXJnLCAqYXJnMTsKKwlpbnQgbiwgcmVzcCwgcmVzcDIsIHRhZzsKKworCWZvciAoOzspIHsKKwkJaWYgKGJ1ZmZlcl9nZXRzKCZpbWFwLT5idWYsICZjbWQpKQorCQkJcmV0dXJuIFJFU1BfQkFEOworCisJCWFyZyA9IG5leHRfYXJnKCZjbWQpOworCQlpZiAoIWFyZykgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBlbXB0eSByZXNwb25zZVxuIik7CisJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCX0KKwkJaWYgKCphcmcgPT0gJyonKSB7CisJCQlhcmcgPSBuZXh0X2FyZygmY21kKTsKKwkJCWlmICghYXJnKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiB1bmFibGUgdG8gcGFyc2UgdW50YWdnZWQgcmVzcG9uc2VcbiIpOworCQkJCXJldHVybiBSRVNQX0JBRDsKKwkJCX0KKworCQkJaWYgKCFzdHJjbXAoIk5BTUVTUEFDRSIsIGFyZykpIHsKKwkJCQkvKiByZmMyMzQyIE5BTUVTUEFDRSByZXNwb25zZS4gKi8KKwkJCQlza2lwX2xpc3QoJmNtZCk7IC8qIFBlcnNvbmFsIG1haWxib3hlcyAqLworCQkJCXNraXBfbGlzdCgmY21kKTsgLyogT3RoZXJzJyBtYWlsYm94ZXMgKi8KKwkJCQlza2lwX2xpc3QoJmNtZCk7IC8qIFNoYXJlZCBtYWlsYm94ZXMgKi8KKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCgiT0siLCBhcmcpIHx8ICFzdHJjbXAoIkJBRCIsIGFyZykgfHwKKwkJCQkgICAhc3RyY21wKCJOTyIsIGFyZykgfHwgIXN0cmNtcCgiQllFIiwgYXJnKSkgeworCQkJCWlmICgocmVzcCA9IHBhcnNlX3Jlc3BvbnNlX2NvZGUoY3R4LCBOVUxMLCBjbWQpKSAhPSBSRVNQX09LKQorCQkJCQlyZXR1cm4gcmVzcDsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCgiQ0FQQUJJTElUWSIsIGFyZykpIHsKKwkJCQlwYXJzZV9jYXBhYmlsaXR5KGltYXAsIGNtZCk7CisJCQl9IGVsc2UgaWYgKChhcmcxID0gbmV4dF9hcmcoJmNtZCkpKSB7CisJCQkJOyAvKgorCQkJCSAgICogVW5oYW5kbGVkIHJlc3BvbnNlLWRhdGEgd2l0aCBhdCBsZWFzdCB0d28gd29yZHMuCisJCQkJICAgKiBJZ25vcmUgaXQuCisJCQkJICAgKgorCQkJCSAgICogTkVFRFNXT1JLOiBQcmV2aW91c2x5IHRoaXMgY2FzZSBoYW5kbGVkICc8bnVtPiBFWElTVFMnCisJCQkJICAgKiBhbmQgJzxudW0+IFJFQ0VOVCcgYnV0IGFzIGEgcHJvYmFibHktdW5pbnRlbmRlZCBzaWRlCisJCQkJICAgKiBlZmZlY3QgaXQgaWdub3JlcyBvdGhlciB1bnJlY29nbml6ZWQgdHdvLXdvcmQKKwkJCQkgICAqIHJlc3BvbnNlcy4gIGltYXAtc2VuZCBkb2Vzbid0IGV2ZXIgdHJ5IHRvIHJlYWQKKwkJCQkgICAqIG1lc3NhZ2VzIG9yIG1haWxib3hlcyB0aGVzZSBkYXlzLCBzbyBjb25zaWRlcgorCQkJCSAgICogZWxpbWluYXRpbmcgdGhpcyBjYXNlLgorCQkJCSAgICovCisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5hYmxlIHRvIHBhcnNlIHVudGFnZ2VkIHJlc3BvbnNlXG4iKTsKKwkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQl9CisJCX0gZWxzZSBpZiAoIWltYXAtPmluX3Byb2dyZXNzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IHVuZXhwZWN0ZWQgcmVwbHk6ICVzICVzXG4iLCBhcmcsIGNtZCA/IGNtZCA6ICIiKTsKKwkJCXJldHVybiBSRVNQX0JBRDsKKwkJfSBlbHNlIGlmICgqYXJnID09ICcrJykgeworCQkJLyogVGhpcyBjYW4gaGFwcGVuIG9ubHkgd2l0aCB0aGUgbGFzdCBjb21tYW5kIHVuZGVyd2F5LCBhcworCQkJICAgaXQgZW5mb3JjZXMgYSByb3VuZC10cmlwLiAqLworCQkJY21kcCA9IChzdHJ1Y3QgaW1hcF9jbWQgKikoKGNoYXIgKilpbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgLQorCQkJICAgICAgIG9mZnNldG9mKHN0cnVjdCBpbWFwX2NtZCwgbmV4dCkpOworCQkJaWYgKGNtZHAtPmNiLmRhdGEpIHsKKwkJCQluID0gc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgY21kcC0+Y2IuZGF0YSwgY21kcC0+Y2IuZGxlbik7CisJCQkJRlJFRV9BTkRfTlVMTChjbWRwLT5jYi5kYXRhKTsKKwkJCQlpZiAobiAhPSAoaW50KWNtZHAtPmNiLmRsZW4pCisJCQkJCXJldHVybiBSRVNQX0JBRDsKKwkJCX0gZWxzZSBpZiAoY21kcC0+Y2IuY29udCkgeworCQkJCWlmIChjbWRwLT5jYi5jb250KGN0eCwgY21kcCwgY21kKSkKKwkJCQkJcmV0dXJuIFJFU1BfQkFEOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IHVuZXhwZWN0ZWQgY29tbWFuZCBjb250aW51YXRpb24gcmVxdWVzdFxuIik7CisJCQkJcmV0dXJuIFJFU1BfQkFEOworCQkJfQorCQkJaWYgKHNvY2tldF93cml0ZSgmaW1hcC0+YnVmLnNvY2ssICJcclxuIiwgMikgIT0gMikKKwkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQlpZiAoIWNtZHAtPmNiLmNvbnQpCisJCQkJaW1hcC0+bGl0ZXJhbF9wZW5kaW5nID0gMDsKKwkJCWlmICghdGNtZCkKKwkJCQlyZXR1cm4gRFJWX09LOworCQl9IGVsc2UgeworCQkJdGFnID0gYXRvaShhcmcpOworCQkJZm9yIChwY21kcCA9ICZpbWFwLT5pbl9wcm9ncmVzczsgKGNtZHAgPSAqcGNtZHApOyBwY21kcCA9ICZjbWRwLT5uZXh0KQorCQkJCWlmIChjbWRwLT50YWcgPT0gdGFnKQorCQkJCQlnb3RvIGdvdHRhZzsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5leHBlY3RlZCB0YWcgJXNcbiIsIGFyZyk7CisJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCWdvdHRhZzoKKwkJCWlmICghKCpwY21kcCA9IGNtZHAtPm5leHQpKQorCQkJCWltYXAtPmluX3Byb2dyZXNzX2FwcGVuZCA9IHBjbWRwOworCQkJaW1hcC0+bnVtX2luX3Byb2dyZXNzLS07CisJCQlpZiAoY21kcC0+Y2IuY29udCB8fCBjbWRwLT5jYi5kYXRhKQorCQkJCWltYXAtPmxpdGVyYWxfcGVuZGluZyA9IDA7CisJCQlhcmcgPSBuZXh0X2FyZygmY21kKTsKKwkJCWlmICghYXJnKQorCQkJCWFyZyA9ICIiOworCQkJaWYgKCFzdHJjbXAoIk9LIiwgYXJnKSkKKwkJCQlyZXNwID0gRFJWX09LOworCQkJZWxzZSB7CisJCQkJaWYgKCFzdHJjbXAoIk5PIiwgYXJnKSkKKwkJCQkJcmVzcCA9IFJFU1BfTk87CisJCQkJZWxzZSAvKmlmICghc3RyY21wKCJCQUQiLCBhcmcpKSovCisJCQkJCXJlc3AgPSBSRVNQX0JBRDsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgY29tbWFuZCAnJXMnIHJldHVybmVkIHJlc3BvbnNlICglcykgLSAlc1xuIiwKKwkJCQkJIXN0YXJ0c193aXRoKGNtZHAtPmNtZCwgIkxPR0lOIikgPworCQkJCQkJCWNtZHAtPmNtZCA6ICJMT0dJTiA8dXNlcj4gPHBhc3M+IiwKKwkJCQkJCQlhcmcsIGNtZCA/IGNtZCA6ICIiKTsKKwkJCX0KKwkJCWlmICgocmVzcDIgPSBwYXJzZV9yZXNwb25zZV9jb2RlKGN0eCwgJmNtZHAtPmNiLCBjbWQpKSA+IHJlc3ApCisJCQkJcmVzcCA9IHJlc3AyOworCQkJaWYgKGNtZHAtPmNiLmRvbmUpCisJCQkJY21kcC0+Y2IuZG9uZShjdHgsIGNtZHAsIHJlc3ApOworCQkJZnJlZShjbWRwLT5jYi5kYXRhKTsKKwkJCWZyZWUoY21kcC0+Y21kKTsKKwkJCWZyZWUoY21kcCk7CisJCQlpZiAoIXRjbWQgfHwgdGNtZCA9PSBjbWRwKQorCQkJCXJldHVybiByZXNwOworCQl9CisJfQorCS8qIG5vdCByZWFjaGVkICovCit9CisKK3N0YXRpYyB2b2lkIGltYXBfY2xvc2Vfc2VydmVyKHN0cnVjdCBpbWFwX3N0b3JlICppY3R4KQoreworCXN0cnVjdCBpbWFwICppbWFwID0gaWN0eC0+aW1hcDsKKworCWlmIChpbWFwLT5idWYuc29jay5mZFswXSAhPSAtMSkgeworCQlpbWFwX2V4ZWMoaWN0eCwgTlVMTCwgIkxPR09VVCIpOworCQlzb2NrZXRfc2h1dGRvd24oJmltYXAtPmJ1Zi5zb2NrKTsKKwl9CisJZnJlZShpbWFwKTsKK30KKworc3RhdGljIHZvaWQgaW1hcF9jbG9zZV9zdG9yZShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4KQoreworCWltYXBfY2xvc2Vfc2VydmVyKGN0eCk7CisJZnJlZShjdHgpOworfQorCisjaWZuZGVmIE5PX09QRU5TU0wKKworLyoKKyAqIGhleGNoYXIoKSBhbmQgY3JhbSgpIGZ1bmN0aW9ucyBhcmUgYmFzZWQgb24gdGhlIGNvZGUgZnJvbSB0aGUgaXN5bmMKKyAqIHByb2plY3QgKGh0dHA6Ly9pc3luYy5zZi5uZXQvKS4KKyAqLworc3RhdGljIGNoYXIgaGV4Y2hhcih1bnNpZ25lZCBpbnQgYikKK3sKKwlyZXR1cm4gYiA8IDEwID8gJzAnICsgYiA6ICdhJyArIChiIC0gMTApOworfQorCisjZGVmaW5lIEVOQ09ERURfU0laRShuKSAoNCAqIERJVl9ST1VORF9VUCgobiksIDMpKQorc3RhdGljIGNoYXIgKmNyYW0oY29uc3QgY2hhciAqY2hhbGxlbmdlXzY0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpwYXNzKQoreworCWludCBpLCByZXNwX2xlbiwgZW5jb2RlZF9sZW4sIGRlY29kZWRfbGVuOworCXVuc2lnbmVkIGNoYXIgaGFzaFsxNl07CisJY2hhciBoZXhbMzNdOworCWNoYXIgKnJlc3BvbnNlLCAqcmVzcG9uc2VfNjQsICpjaGFsbGVuZ2U7CisKKwkvKgorCSAqIGxlbmd0aCBvZiBjaGFsbGVuZ2VfNjQgKGkuZS4gYmFzZS02NCBlbmNvZGVkIHN0cmluZykgaXMgYSBnb29kCisJICogZW5vdWdoIHVwcGVyIGJvdW5kIGZvciBjaGFsbGVuZ2UgKGRlY29kZWQgcmVzdWx0KS4KKwkgKi8KKwllbmNvZGVkX2xlbiA9IHN0cmxlbihjaGFsbGVuZ2VfNjQpOworCWNoYWxsZW5nZSA9IHhtYWxsb2MoZW5jb2RlZF9sZW4pOworCWRlY29kZWRfbGVuID0gRVZQX0RlY29kZUJsb2NrKCh1bnNpZ25lZCBjaGFyICopY2hhbGxlbmdlLAorCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopY2hhbGxlbmdlXzY0LCBlbmNvZGVkX2xlbik7CisJaWYgKGRlY29kZWRfbGVuIDwgMCkKKwkJZGllKCJpbnZhbGlkIGNoYWxsZW5nZSAlcyIsIGNoYWxsZW5nZV82NCk7CisJaWYgKCFITUFDKEVWUF9tZDUoKSwgcGFzcywgc3RybGVuKHBhc3MpLCAodW5zaWduZWQgY2hhciAqKWNoYWxsZW5nZSwgZGVjb2RlZF9sZW4sIGhhc2gsIE5VTEwpKQorCQlkaWUoIkhNQUMgZXJyb3IiKTsKKworCWhleFszMl0gPSAwOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWhleFsyICogaV0gPSBoZXhjaGFyKChoYXNoW2ldID4+IDQpICYgMHhmKTsKKwkJaGV4WzIgKiBpICsgMV0gPSBoZXhjaGFyKGhhc2hbaV0gJiAweGYpOworCX0KKworCS8qIHJlc3BvbnNlOiAiPHVzZXI+IDxkaWdlc3QgaW4gaGV4PiIgKi8KKwlyZXNwb25zZSA9IHhzdHJmbXQoIiVzICVzIiwgdXNlciwgaGV4KTsKKwlyZXNwX2xlbiA9IHN0cmxlbihyZXNwb25zZSk7CisKKwlyZXNwb25zZV82NCA9IHhtYWxsb2N6KEVOQ09ERURfU0laRShyZXNwX2xlbikpOworCWVuY29kZWRfbGVuID0gRVZQX0VuY29kZUJsb2NrKCh1bnNpZ25lZCBjaGFyICopcmVzcG9uc2VfNjQsCisJCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKilyZXNwb25zZSwgcmVzcF9sZW4pOworCWlmIChlbmNvZGVkX2xlbiA8IDApCisJCWRpZSgiRVZQX0VuY29kZUJsb2NrIGVycm9yIik7CisJcmV0dXJuIChjaGFyICopcmVzcG9uc2VfNjQ7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBjaGFyICpjcmFtKGNvbnN0IGNoYXIgKmNoYWxsZW5nZV82NCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqcGFzcykKK3sKKwlkaWUoIklmIHlvdSB3YW50IHRvIHVzZSBDUkFNLU1ENSBhdXRoZW50aWNhdGUgbWV0aG9kLCAiCisJICAgICJ5b3UgaGF2ZSB0byBidWlsZCBnaXQtaW1hcC1zZW5kIHdpdGggT3BlblNTTCBsaWJyYXJ5LiIpOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBhdXRoX2NyYW1fbWQ1KHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZCAqY21kLCBjb25zdCBjaGFyICpwcm9tcHQpCit7CisJaW50IHJldDsKKwljaGFyICpyZXNwb25zZTsKKworCXJlc3BvbnNlID0gY3JhbShwcm9tcHQsIHNlcnZlci51c2VyLCBzZXJ2ZXIucGFzcyk7CisKKwlyZXQgPSBzb2NrZXRfd3JpdGUoJmN0eC0+aW1hcC0+YnVmLnNvY2ssIHJlc3BvbnNlLCBzdHJsZW4ocmVzcG9uc2UpKTsKKwlpZiAocmV0ICE9IHN0cmxlbihyZXNwb25zZSkpCisJCXJldHVybiBlcnJvcigiSU1BUCBlcnJvcjogc2VuZGluZyByZXNwb25zZSBmYWlsZWQiKTsKKworCWZyZWUocmVzcG9uc2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlcl9maWxsX2NyZWRlbnRpYWwoc3RydWN0IGltYXBfc2VydmVyX2NvbmYgKnNydmMsIHN0cnVjdCBjcmVkZW50aWFsICpjcmVkKQoreworCWlmIChzcnZjLT51c2VyICYmIHNydmMtPnBhc3MpCisJCXJldHVybjsKKworCWNyZWQtPnByb3RvY29sID0geHN0cmR1cChzcnZjLT51c2Vfc3NsID8gImltYXBzIiA6ICJpbWFwIik7CisJY3JlZC0+aG9zdCA9IHhzdHJkdXAoc3J2Yy0+aG9zdCk7CisKKwljcmVkLT51c2VybmFtZSA9IHhzdHJkdXBfb3JfbnVsbChzcnZjLT51c2VyKTsKKwljcmVkLT5wYXNzd29yZCA9IHhzdHJkdXBfb3JfbnVsbChzcnZjLT5wYXNzKTsKKworCWNyZWRlbnRpYWxfZmlsbChjcmVkKTsKKworCWlmICghc3J2Yy0+dXNlcikKKwkJc3J2Yy0+dXNlciA9IHhzdHJkdXAoY3JlZC0+dXNlcm5hbWUpOworCWlmICghc3J2Yy0+cGFzcykKKwkJc3J2Yy0+cGFzcyA9IHhzdHJkdXAoY3JlZC0+cGFzc3dvcmQpOworfQorCitzdGF0aWMgc3RydWN0IGltYXBfc3RvcmUgKmltYXBfb3Blbl9zdG9yZShzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiAqc3J2YywgY2hhciAqZm9sZGVyKQoreworCXN0cnVjdCBjcmVkZW50aWFsIGNyZWQgPSBDUkVERU5USUFMX0lOSVQ7CisJc3RydWN0IGltYXBfc3RvcmUgKmN0eDsKKwlzdHJ1Y3QgaW1hcCAqaW1hcDsKKwljaGFyICphcmcsICpyc3A7CisJaW50IHMgPSAtMSwgcHJlYXV0aDsKKworCWN0eCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpjdHgpKTsKKworCWN0eC0+aW1hcCA9IGltYXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqaW1hcCkpOworCWltYXAtPmJ1Zi5zb2NrLmZkWzBdID0gaW1hcC0+YnVmLnNvY2suZmRbMV0gPSAtMTsKKwlpbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgPSAmaW1hcC0+aW5fcHJvZ3Jlc3M7CisKKwkvKiBvcGVuIGNvbm5lY3Rpb24gdG8gSU1BUCBzZXJ2ZXIgKi8KKworCWlmIChzcnZjLT50dW5uZWwpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgdHVubmVsID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCWltYXBfaW5mbygiU3RhcnRpbmcgdHVubmVsICclcycuLi4gIiwgc3J2Yy0+dHVubmVsKTsKKworCQlhcmd2X2FycmF5X3B1c2goJnR1bm5lbC5hcmdzLCBzcnZjLT50dW5uZWwpOworCQl0dW5uZWwudXNlX3NoZWxsID0gMTsKKwkJdHVubmVsLmluID0gLTE7CisJCXR1bm5lbC5vdXQgPSAtMTsKKwkJaWYgKHN0YXJ0X2NvbW1hbmQoJnR1bm5lbCkpCisJCQlkaWUoImNhbm5vdCBzdGFydCBwcm94eSAlcyIsIHNydmMtPnR1bm5lbCk7CisKKwkJaW1hcC0+YnVmLnNvY2suZmRbMF0gPSB0dW5uZWwub3V0OworCQlpbWFwLT5idWYuc29jay5mZFsxXSA9IHR1bm5lbC5pbjsKKworCQlpbWFwX2luZm8oIm9rXG4iKTsKKwl9IGVsc2UgeworI2lmbmRlZiBOT19JUFY2CisJCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpMCwgKmFpOworCQlpbnQgZ2FpOworCQljaGFyIHBvcnRzdHJbNl07CisKKwkJeHNucHJpbnRmKHBvcnRzdHIsIHNpemVvZihwb3J0c3RyKSwgIiVkIiwgc3J2Yy0+cG9ydCk7CisKKwkJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisJCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisJCWhpbnRzLmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CisKKwkJaW1hcF9pbmZvKCJSZXNvbHZpbmcgJXMuLi4gIiwgc3J2Yy0+aG9zdCk7CisJCWdhaSA9IGdldGFkZHJpbmZvKHNydmMtPmhvc3QsIHBvcnRzdHIsICZoaW50cywgJmFpKTsKKwkJaWYgKGdhaSkgeworCQkJZnByaW50ZihzdGRlcnIsICJnZXRhZGRyaW5mbzogJXNcbiIsIGdhaV9zdHJlcnJvcihnYWkpKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpbWFwX2luZm8oIm9rXG4iKTsKKworCQlmb3IgKGFpMCA9IGFpOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkgeworCQkJY2hhciBhZGRyW05JX01BWEhPU1RdOworCisJCQlzID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwKKwkJCQkgICBhaS0+YWlfcHJvdG9jb2wpOworCQkJaWYgKHMgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlnZXRuYW1laW5mbyhhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4sIGFkZHIsCisJCQkJICAgIHNpemVvZihhZGRyKSwgTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QpOworCQkJaW1hcF9pbmZvKCJDb25uZWN0aW5nIHRvIFslc106JXMuLi4gIiwgYWRkciwgcG9ydHN0cik7CisKKwkJCWlmIChjb25uZWN0KHMsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSB7CisJCQkJY2xvc2Uocyk7CisJCQkJcyA9IC0xOworCQkJCXBlcnJvcigiY29ubmVjdCIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCQlmcmVlYWRkcmluZm8oYWkwKTsKKyNlbHNlIC8qIE5PX0lQVjYgKi8KKwkJc3RydWN0IGhvc3RlbnQgKmhlOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKworCQltZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisJCWFkZHIuc2luX3BvcnQgPSBodG9ucyhzcnZjLT5wb3J0KTsKKwkJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworCQlpbWFwX2luZm8oIlJlc29sdmluZyAlcy4uLiAiLCBzcnZjLT5ob3N0KTsKKwkJaGUgPSBnZXRob3N0YnluYW1lKHNydmMtPmhvc3QpOworCQlpZiAoIWhlKSB7CisJCQlwZXJyb3IoImdldGhvc3RieW5hbWUiKTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpbWFwX2luZm8oIm9rXG4iKTsKKworCQlhZGRyLnNpbl9hZGRyLnNfYWRkciA9ICooKGludCAqKSBoZS0+aF9hZGRyX2xpc3RbMF0pOworCisJCXMgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworCisJCWltYXBfaW5mbygiQ29ubmVjdGluZyB0byAlczolaHUuLi4gIiwgaW5ldF9udG9hKGFkZHIuc2luX2FkZHIpLCBudG9ocyhhZGRyLnNpbl9wb3J0KSk7CisJCWlmIChjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSkgeworCQkJY2xvc2Uocyk7CisJCQlzID0gLTE7CisJCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJfQorI2VuZGlmCisJCWlmIChzIDwgMCkgeworCQkJZnB1dHMoIkVycm9yOiB1bmFibGUgdG8gY29ubmVjdCB0byBzZXJ2ZXIuXG4iLCBzdGRlcnIpOworCQkJZ290byBiYWlsOworCQl9CisKKwkJaW1hcC0+YnVmLnNvY2suZmRbMF0gPSBzOworCQlpbWFwLT5idWYuc29jay5mZFsxXSA9IGR1cChzKTsKKworCQlpZiAoc3J2Yy0+dXNlX3NzbCAmJgorCQkgICAgc3NsX3NvY2tldF9jb25uZWN0KCZpbWFwLT5idWYuc29jaywgMCwgc3J2Yy0+c3NsX3ZlcmlmeSkpIHsKKwkJCWNsb3NlKHMpOworCQkJZ290byBiYWlsOworCQl9CisJCWltYXBfaW5mbygib2tcbiIpOworCX0KKworCS8qIHJlYWQgdGhlIGdyZWV0aW5nIHN0cmluZyAqLworCWlmIChidWZmZXJfZ2V0cygmaW1hcC0+YnVmLCAmcnNwKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IG5vIGdyZWV0aW5nIHJlc3BvbnNlXG4iKTsKKwkJZ290byBiYWlsOworCX0KKwlhcmcgPSBuZXh0X2FyZygmcnNwKTsKKwlpZiAoIWFyZyB8fCAqYXJnICE9ICcqJyB8fCAoYXJnID0gbmV4dF9hcmcoJnJzcCkpID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBpbnZhbGlkIGdyZWV0aW5nIHJlc3BvbnNlXG4iKTsKKwkJZ290byBiYWlsOworCX0KKwlwcmVhdXRoID0gMDsKKwlpZiAoIXN0cmNtcCgiUFJFQVVUSCIsIGFyZykpCisJCXByZWF1dGggPSAxOworCWVsc2UgaWYgKHN0cmNtcCgiT0siLCBhcmcpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiB1bmtub3duIGdyZWV0aW5nIHJlc3BvbnNlXG4iKTsKKwkJZ290byBiYWlsOworCX0KKwlwYXJzZV9yZXNwb25zZV9jb2RlKGN0eCwgTlVMTCwgcnNwKTsKKwlpZiAoIWltYXAtPmNhcHMgJiYgaW1hcF9leGVjKGN0eCwgTlVMTCwgIkNBUEFCSUxJVFkiKSAhPSBSRVNQX09LKQorCQlnb3RvIGJhaWw7CisKKwlpZiAoIXByZWF1dGgpIHsKKyNpZm5kZWYgTk9fT1BFTlNTTAorCQlpZiAoIXNydmMtPnVzZV9zc2wgJiYgQ0FQKFNUQVJUVExTKSkgeworCQkJaWYgKGltYXBfZXhlYyhjdHgsIE5VTEwsICJTVEFSVFRMUyIpICE9IFJFU1BfT0spCisJCQkJZ290byBiYWlsOworCQkJaWYgKHNzbF9zb2NrZXRfY29ubmVjdCgmaW1hcC0+YnVmLnNvY2ssIDEsCisJCQkJCSAgICAgICBzcnZjLT5zc2xfdmVyaWZ5KSkKKwkJCQlnb3RvIGJhaWw7CisJCQkvKiBjYXBhYmlsaXRpZXMgbWF5IGhhdmUgY2hhbmdlZCwgc28gZ2V0IHRoZSBuZXcgY2FwYWJpbGl0aWVzICovCisJCQlpZiAoaW1hcF9leGVjKGN0eCwgTlVMTCwgIkNBUEFCSUxJVFkiKSAhPSBSRVNQX09LKQorCQkJCWdvdG8gYmFpbDsKKwkJfQorI2VuZGlmCisJCWltYXBfaW5mbygiTG9nZ2luZyBpbi4uLlxuIik7CisJCXNlcnZlcl9maWxsX2NyZWRlbnRpYWwoc3J2YywgJmNyZWQpOworCisJCWlmIChzcnZjLT5hdXRoX21ldGhvZCkgeworCQkJc3RydWN0IGltYXBfY21kX2NiIGNiOworCisJCQlpZiAoIXN0cmNtcChzcnZjLT5hdXRoX21ldGhvZCwgIkNSQU0tTUQ1IikpIHsKKwkJCQlpZiAoIUNBUChBVVRIX0NSQU1fTUQ1KSkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIllvdSBzcGVjaWZpZWQgIgorCQkJCQkJIkNSQU0tTUQ1IGFzIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgIgorCQkJCQkJImJ1dCAlcyBkb2Vzbid0IHN1cHBvcnQgaXQuXG4iLCBzcnZjLT5ob3N0KTsKKwkJCQkJZ290byBiYWlsOworCQkJCX0KKwkJCQkvKiBDUkFNLU1ENSAqLworCisJCQkJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisJCQkJY2IuY29udCA9IGF1dGhfY3JhbV9tZDU7CisJCQkJaWYgKGltYXBfZXhlYyhjdHgsICZjYiwgIkFVVEhFTlRJQ0FURSBDUkFNLU1ENSIpICE9IFJFU1BfT0spIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBBVVRIRU5USUNBVEUgQ1JBTS1NRDUgZmFpbGVkXG4iKTsKKwkJCQkJZ290byBiYWlsOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGF1dGhlbnRpY2F0aW9uIG1ldGhvZDolc1xuIiwgc3J2Yy0+aG9zdCk7CisJCQkJZ290byBiYWlsOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKENBUChOT0xPR0lOKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiU2tpcHBpbmcgYWNjb3VudCAlc0Alcywgc2VydmVyIGZvcmJpZHMgTE9HSU5cbiIsCisJCQkJCXNydmMtPnVzZXIsIHNydmMtPmhvc3QpOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCWlmICghaW1hcC0+YnVmLnNvY2suc3NsKQorCQkJCWltYXBfd2FybigiKioqIElNQVAgV2FybmluZyAqKiogUGFzc3dvcmQgaXMgYmVpbmcgIgorCQkJCQkgICJzZW50IGluIHRoZSBjbGVhclxuIik7CisJCQlpZiAoaW1hcF9leGVjKGN0eCwgTlVMTCwgIkxPR0lOIFwiJXNcIiBcIiVzXCIiLCBzcnZjLT51c2VyLCBzcnZjLT5wYXNzKSAhPSBSRVNQX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBMT0dJTiBmYWlsZWRcbiIpOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJfQorCX0gLyogIXByZWF1dGggKi8KKworCWlmIChjcmVkLnVzZXJuYW1lKQorCQljcmVkZW50aWFsX2FwcHJvdmUoJmNyZWQpOworCWNyZWRlbnRpYWxfY2xlYXIoJmNyZWQpOworCisJLyogY2hlY2sgdGhlIHRhcmdldCBtYWlsYm94IGV4aXN0cyAqLworCWN0eC0+bmFtZSA9IGZvbGRlcjsKKwlzd2l0Y2ggKGltYXBfZXhlYyhjdHgsIE5VTEwsICJFWEFNSU5FIFwiJXNcIiIsIGN0eC0+bmFtZSkpIHsKKwljYXNlIFJFU1BfT0s6CisJCS8qIG9rICovCisJCWJyZWFrOworCWNhc2UgUkVTUF9CQUQ6CisJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogY291bGQgbm90IGNoZWNrIG1haWxib3hcbiIpOworCQlnb3RvIG91dDsKKwljYXNlIFJFU1BfTk86CisJCWlmIChpbWFwX2V4ZWMoY3R4LCBOVUxMLCAiQ1JFQVRFIFwiJXNcIiIsIGN0eC0+bmFtZSkgPT0gUkVTUF9PSykgeworCQkJaW1hcF9pbmZvKCJDcmVhdGVkIG1pc3NpbmcgbWFpbGJveFxuIik7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgbWlzc2luZyBtYWlsYm94XG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJyZWFrOworCX0KKworCWN0eC0+cHJlZml4ID0gIiI7CisJcmV0dXJuIGN0eDsKKworYmFpbDoKKwlpZiAoY3JlZC51c2VybmFtZSkKKwkJY3JlZGVudGlhbF9yZWplY3QoJmNyZWQpOworCWNyZWRlbnRpYWxfY2xlYXIoJmNyZWQpOworCisgb3V0OgorCWltYXBfY2xvc2Vfc3RvcmUoY3R4KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEluc2VydCBDUiBjaGFyYWN0ZXJzIGFzIG5lY2Vzc2FyeSBpbiAqbXNnIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IExGCisgKiBjaGFyYWN0ZXIgaW4gKm1zZyBpcyBwcmVjZWRlZCBieSBhIENSLgorICovCitzdGF0aWMgdm9pZCBsZl90b19jcmxmKHN0cnVjdCBzdHJidWYgKm1zZykKK3sKKwljaGFyICpuZXdfbXNnOworCXNpemVfdCBpLCBqOworCWNoYXIgbGFzdGM7CisKKwkvKiBGaXJzdCBwYXNzOiB0YWxseSwgaW4gaiwgdGhlIHNpemUgb2YgdGhlIG5ld19tc2cgc3RyaW5nOiAqLworCWZvciAoaSA9IGogPSAwLCBsYXN0YyA9ICdcMCc7IGkgPCBtc2ctPmxlbjsgaSsrKSB7CisJCWlmIChtc2ctPmJ1ZltpXSA9PSAnXG4nICYmIGxhc3RjICE9ICdccicpCisJCQlqKys7IC8qIGEgQ1Igd2lsbCBuZWVkIHRvIGJlIGFkZGVkIGhlcmUgKi8KKwkJbGFzdGMgPSBtc2ctPmJ1ZltpXTsKKwkJaisrOworCX0KKworCW5ld19tc2cgPSB4bWFsbG9jeihqKTsKKworCS8qCisJICogU2Vjb25kIHBhc3M6IHdyaXRlIHRoZSBuZXdfbXNnIHN0cmluZy4gIE5vdGUgdGhhdCB0aGlzIGxvb3AgaXMKKwkgKiBvdGhlcndpc2UgaWRlbnRpY2FsIHRvIHRoZSBmaXJzdCBwYXNzLgorCSAqLworCWZvciAoaSA9IGogPSAwLCBsYXN0YyA9ICdcMCc7IGkgPCBtc2ctPmxlbjsgaSsrKSB7CisJCWlmIChtc2ctPmJ1ZltpXSA9PSAnXG4nICYmIGxhc3RjICE9ICdccicpCisJCQluZXdfbXNnW2orK10gPSAnXHInOworCQlsYXN0YyA9IG5ld19tc2dbaisrXSA9IG1zZy0+YnVmW2ldOworCX0KKwlzdHJidWZfYXR0YWNoKG1zZywgbmV3X21zZywgaiwgaiArIDEpOworfQorCisvKgorICogU3RvcmUgbXNnIHRvIElNQVAuICBBbHNvIGRldGFjaCBhbmQgZnJlZSB0aGUgZGF0YSBmcm9tIG1zZy0+ZGF0YSwKKyAqIGxlYXZpbmcgbXNnLT5kYXRhIGVtcHR5LgorICovCitzdGF0aWMgaW50IGltYXBfc3RvcmVfbXNnKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBzdHJidWYgKm1zZykKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwlzdHJ1Y3QgaW1hcF9jbWRfY2IgY2I7CisJY29uc3QgY2hhciAqcHJlZml4LCAqYm94OworCWludCByZXQ7CisKKwlsZl90b19jcmxmKG1zZyk7CisJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisKKwljYi5kbGVuID0gbXNnLT5sZW47CisJY2IuZGF0YSA9IHN0cmJ1Zl9kZXRhY2gobXNnLCBOVUxMKTsKKworCWJveCA9IGN0eC0+bmFtZTsKKwlwcmVmaXggPSAhc3RyY21wKGJveCwgIklOQk9YIikgPyAiIiA6IGN0eC0+cHJlZml4OworCXJldCA9IGltYXBfZXhlY19tKGN0eCwgJmNiLCAiQVBQRU5EIFwiJXMlc1wiICIsIHByZWZpeCwgYm94KTsKKwlpbWFwLT5jYXBzID0gaW1hcC0+cmNhcHM7CisJaWYgKHJldCAhPSBEUlZfT0spCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gRFJWX09LOworfQorCitzdGF0aWMgdm9pZCB3cmFwX2luX2h0bWwoc3RydWN0IHN0cmJ1ZiAqbXNnKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIGNoYXIgKmNvbnRlbnRfdHlwZSA9ICJDb250ZW50LVR5cGU6IHRleHQvaHRtbDtcbiI7CisJc3RhdGljIGNoYXIgKnByZV9vcGVuID0gIjxwcmU+XG4iOworCXN0YXRpYyBjaGFyICpwcmVfY2xvc2UgPSAiPC9wcmU+XG4iOworCWNvbnN0IGNoYXIgKmJvZHkgPSBzdHJzdHIobXNnLT5idWYsICJcblxuIik7CisKKwlpZiAoIWJvZHkpCisJCXJldHVybjsgLyogSGVhZGVycyBidXQgbm8gYm9keTsgbm8gd3JhcHBpbmcgbmVlZGVkICovCisKKwlib2R5ICs9IDI7CisKKwlzdHJidWZfYWRkKCZidWYsIG1zZy0+YnVmLCBib2R5IC0gbXNnLT5idWYgLSAxKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGNvbnRlbnRfdHlwZSk7CisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcHJlX29wZW4pOworCXN0cmJ1Zl9hZGRzdHJfeG1sX3F1b3RlZCgmYnVmLCBib2R5KTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIHByZV9jbG9zZSk7CisKKwlzdHJidWZfcmVsZWFzZShtc2cpOworCSptc2cgPSBidWY7Cit9CisKKyNkZWZpbmUgQ0hVTktTSVpFIDB4MTAwMAorCitzdGF0aWMgaW50IHJlYWRfbWVzc2FnZShGSUxFICpmLCBzdHJ1Y3Qgc3RyYnVmICphbGxfbXNncykKK3sKKwlkbyB7CisJCWlmIChzdHJidWZfZnJlYWQoYWxsX21zZ3MsIENIVU5LU0laRSwgZikgPD0gMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKCFmZW9mKGYpKTsKKworCXJldHVybiBmZXJyb3IoZikgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfbWVzc2FnZXMoc3RydWN0IHN0cmJ1ZiAqYWxsX21zZ3MpCit7CisJaW50IGNvdW50ID0gMDsKKwljaGFyICpwID0gYWxsX21zZ3MtPmJ1ZjsKKworCXdoaWxlICgxKSB7CisJCWlmIChzdGFydHNfd2l0aChwLCAiRnJvbSAiKSkgeworCQkJcCA9IHN0cnN0cihwKzUsICJcbkZyb206ICIpOworCQkJaWYgKCFwKSBicmVhazsKKwkJCXAgPSBzdHJzdHIocCs3LCAiXG5EYXRlOiAiKTsKKwkJCWlmICghcCkgYnJlYWs7CisJCQlwID0gc3Ryc3RyKHArNywgIlxuU3ViamVjdDogIik7CisJCQlpZiAoIXApIGJyZWFrOworCQkJcCArPSAxMDsKKwkJCWNvdW50Kys7CisJCX0KKwkJcCA9IHN0cnN0cihwKzUsICJcbkZyb20gIik7CisJCWlmICghcCkKKwkJCWJyZWFrOworCQlwKys7CisJfQorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENvcHkgdGhlIG5leHQgbWVzc2FnZSBmcm9tIGFsbF9tc2dzLCBzdGFydGluZyBhdCBvZmZzZXQgKm9mcywgdG8KKyAqIG1zZy4gIFVwZGF0ZSAqb2ZzIHRvIHRoZSBzdGFydCBvZiB0aGUgZm9sbG93aW5nIG1lc3NhZ2UuICBSZXR1cm4KKyAqIHRydWUgaWZmIGEgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bGx5IGNvcGllZC4KKyAqLworc3RhdGljIGludCBzcGxpdF9tc2coc3RydWN0IHN0cmJ1ZiAqYWxsX21zZ3MsIHN0cnVjdCBzdHJidWYgKm1zZywgaW50ICpvZnMpCit7CisJY2hhciAqcCwgKmRhdGE7CisJc2l6ZV90IGxlbjsKKworCWlmICgqb2ZzID49IGFsbF9tc2dzLT5sZW4pCisJCXJldHVybiAwOworCisJZGF0YSA9ICZhbGxfbXNncy0+YnVmWypvZnNdOworCWxlbiA9IGFsbF9tc2dzLT5sZW4gLSAqb2ZzOworCisJaWYgKGxlbiA8IDUgfHwgIXN0YXJ0c193aXRoKGRhdGEsICJGcm9tICIpKQorCQlyZXR1cm4gMDsKKworCXAgPSBzdHJjaHIoZGF0YSwgJ1xuJyk7CisJaWYgKHApIHsKKwkJcCsrOworCQlsZW4gLT0gcCAtIGRhdGE7CisJCSpvZnMgKz0gcCAtIGRhdGE7CisJCWRhdGEgPSBwOworCX0KKworCXAgPSBzdHJzdHIoZGF0YSwgIlxuRnJvbSAiKTsKKwlpZiAocCkKKwkJbGVuID0gJnBbMV0gLSBkYXRhOworCisJc3RyYnVmX2FkZChtc2csIGRhdGEsIGxlbik7CisJKm9mcyArPSBsZW47CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9pbWFwX2NvbmZpZyh2b2lkKQoreworCWNvbnN0IGNoYXIgKnZhbCA9IE5VTEw7CisKKwlnaXRfY29uZmlnX2dldF9ib29sKCJpbWFwLnNzbHZlcmlmeSIsICZzZXJ2ZXIuc3NsX3ZlcmlmeSk7CisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiaW1hcC5wcmVmb3JtYXR0ZWRodG1sIiwgJnNlcnZlci51c2VfaHRtbCk7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJpbWFwLmZvbGRlciIsICZzZXJ2ZXIuZm9sZGVyKTsKKworCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoImltYXAuaG9zdCIsICZ2YWwpKSB7CisJCWlmICghdmFsKSB7CisJCQlnaXRfZGllX2NvbmZpZygiaW1hcC5ob3N0IiwgIk1pc3NpbmcgdmFsdWUgZm9yICdpbWFwLmhvc3QnIik7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RhcnRzX3dpdGgodmFsLCAiaW1hcDoiKSkKKwkJCQl2YWwgKz0gNTsKKwkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHZhbCwgImltYXBzOiIpKSB7CisJCQkJdmFsICs9IDY7CisJCQkJc2VydmVyLnVzZV9zc2wgPSAxOworCQkJfQorCQkJaWYgKHN0YXJ0c193aXRoKHZhbCwgIi8vIikpCisJCQkJdmFsICs9IDI7CisJCQlzZXJ2ZXIuaG9zdCA9IHhzdHJkdXAodmFsKTsKKwkJfQorCX0KKworCWdpdF9jb25maWdfZ2V0X3N0cmluZygiaW1hcC51c2VyIiwgJnNlcnZlci51c2VyKTsKKwlnaXRfY29uZmlnX2dldF9zdHJpbmcoImltYXAucGFzcyIsICZzZXJ2ZXIucGFzcyk7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJpbWFwLnBvcnQiLCAmc2VydmVyLnBvcnQpOworCWdpdF9jb25maWdfZ2V0X3N0cmluZygiaW1hcC50dW5uZWwiLCAmc2VydmVyLnR1bm5lbCk7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJpbWFwLmF1dGhtZXRob2QiLCAmc2VydmVyLmF1dGhfbWV0aG9kKTsKK30KKworc3RhdGljIGludCBhcHBlbmRfbXNnc190b19pbWFwKHN0cnVjdCBpbWFwX3NlcnZlcl9jb25mICpzZXJ2ZXIsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiogYWxsX21zZ3MsIGludCB0b3RhbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBpbWFwX3N0b3JlICpjdHggPSBOVUxMOworCWludCBvZnMgPSAwOworCWludCByOworCWludCBuID0gMDsKKworCWN0eCA9IGltYXBfb3Blbl9zdG9yZShzZXJ2ZXIsIHNlcnZlci0+Zm9sZGVyKTsKKwlpZiAoIWN0eCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBvcGVuIHN0b3JlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWN0eC0+bmFtZSA9IHNlcnZlci0+Zm9sZGVyOworCisJZnByaW50ZihzdGRlcnIsICJzZW5kaW5nICVkIG1lc3NhZ2Ulc1xuIiwgdG90YWwsICh0b3RhbCAhPSAxKSA/ICJzIiA6ICIiKTsKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBwZXJjZW50ID0gbiAqIDEwMCAvIHRvdGFsOworCisJCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCVkLyVkKSBkb25lXHIiLCBwZXJjZW50LCBuLCB0b3RhbCk7CisKKwkJaWYgKCFzcGxpdF9tc2coYWxsX21zZ3MsICZtc2csICZvZnMpKQorCQkJYnJlYWs7CisJCWlmIChzZXJ2ZXItPnVzZV9odG1sKQorCQkJd3JhcF9pbl9odG1sKCZtc2cpOworCQlyID0gaW1hcF9zdG9yZV9tc2coY3R4LCAmbXNnKTsKKwkJaWYgKHIgIT0gRFJWX09LKQorCQkJYnJlYWs7CisJCW4rKzsKKwl9CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCisJaW1hcF9jbG9zZV9zdG9yZShjdHgpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9GT1JfSU1BUF9TRU5ECitzdGF0aWMgQ1VSTCAqc2V0dXBfY3VybChzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiAqc3J2Yywgc3RydWN0IGNyZWRlbnRpYWwgKmNyZWQpCit7CisJQ1VSTCAqY3VybDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwljaGFyICp1cmlfZW5jb2RlZF9mb2xkZXI7CisKKwlpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKQorCQlkaWUoImN1cmxfZ2xvYmFsX2luaXQgZmFpbGVkIik7CisKKwljdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKworCWlmICghY3VybCkKKwkJZGllKCJjdXJsX2Vhc3lfaW5pdCBmYWlsZWQiKTsKKworCXNlcnZlcl9maWxsX2NyZWRlbnRpYWwoJnNlcnZlciwgY3JlZCk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VTRVJOQU1FLCBzZXJ2ZXIudXNlcik7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BBU1NXT1JELCBzZXJ2ZXIucGFzcyk7CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBzZXJ2ZXIudXNlX3NzbCA/ICJpbWFwczovLyIgOiAiaW1hcDovLyIpOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHNlcnZlci5ob3N0KTsKKwlpZiAoIXBhdGgubGVuIHx8IHBhdGguYnVmW3BhdGgubGVuIC0gMV0gIT0gJy8nKQorCQlzdHJidWZfYWRkY2goJnBhdGgsICcvJyk7CisKKwl1cmlfZW5jb2RlZF9mb2xkZXIgPSBjdXJsX2Vhc3lfZXNjYXBlKGN1cmwsIHNlcnZlci5mb2xkZXIsIDApOworCWlmICghdXJpX2VuY29kZWRfZm9sZGVyKQorCQlkaWUoImZhaWxlZCB0byBlbmNvZGUgc2VydmVyIGZvbGRlciIpOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHVyaV9lbmNvZGVkX2ZvbGRlcik7CisJY3VybF9mcmVlKHVyaV9lbmNvZGVkX2ZvbGRlcik7CisKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBwYXRoLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1JULCBzZXJ2ZXIucG9ydCk7CisKKwlpZiAoc2VydmVyLmF1dGhfbWV0aG9kKSB7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcyMjAwCisJCXdhcm5pbmcoIk5vIExPR0lOX09QVElPTlMgc3VwcG9ydCBpbiB0aGlzIGNVUkwgdmVyc2lvbiIpOworI2Vsc2UKKwkJc3RydWN0IHN0cmJ1ZiBhdXRoID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRzdHIoJmF1dGgsICJBVVRIPSIpOworCQlzdHJidWZfYWRkc3RyKCZhdXRoLCBzZXJ2ZXIuYXV0aF9tZXRob2QpOworCQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTE9HSU5fT1BUSU9OUywgYXV0aC5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYXV0aCk7CisjZW5kaWYKKwl9CisKKwlpZiAoIXNlcnZlci51c2Vfc3NsKQorCQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVNFX1NTTCwgKGxvbmcpQ1VSTFVTRVNTTF9UUlkpOworCisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBzZXJ2ZXIuc3NsX3ZlcmlmeSk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCBzZXJ2ZXIuc3NsX3ZlcmlmeSk7CisKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBmcmVhZF9idWZmZXIpOworCisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VQTE9BRCwgMUwpOworCisJaWYgKDAgPCB2ZXJib3NpdHkgfHwgZ2V0ZW52KCJHSVRfQ1VSTF9WRVJCT1NFIikpCisJCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9WRVJCT1NFLCAxTCk7CisJc2V0dXBfY3VybF90cmFjZShjdXJsKTsKKworCXJldHVybiBjdXJsOworfQorCitzdGF0aWMgaW50IGN1cmxfYXBwZW5kX21zZ3NfdG9faW1hcChzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiAqc2VydmVyLAorCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmKiBhbGxfbXNncywgaW50IHRvdGFsKQoreworCWludCBvZnMgPSAwOworCWludCBuID0gMDsKKwlzdHJ1Y3QgYnVmZmVyIG1zZ2J1ZiA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlDVVJMICpjdXJsOworCUNVUkxjb2RlIHJlcyA9IENVUkxFX09LOworCXN0cnVjdCBjcmVkZW50aWFsIGNyZWQgPSBDUkVERU5USUFMX0lOSVQ7CisKKwljdXJsID0gc2V0dXBfY3VybChzZXJ2ZXIsICZjcmVkKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBRERBVEEsICZtc2didWYpOworCisJZnByaW50ZihzdGRlcnIsICJzZW5kaW5nICVkIG1lc3NhZ2Ulc1xuIiwgdG90YWwsICh0b3RhbCAhPSAxKSA/ICJzIiA6ICIiKTsKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBwZXJjZW50ID0gbiAqIDEwMCAvIHRvdGFsOworCQlpbnQgcHJldl9sZW47CisKKwkJZnByaW50ZihzdGRlcnIsICIlNHUlJSAoJWQvJWQpIGRvbmVcciIsIHBlcmNlbnQsIG4sIHRvdGFsKTsKKworCQlwcmV2X2xlbiA9IG1zZ2J1Zi5idWYubGVuOworCQlpZiAoIXNwbGl0X21zZyhhbGxfbXNncywgJm1zZ2J1Zi5idWYsICZvZnMpKQorCQkJYnJlYWs7CisJCWlmIChzZXJ2ZXItPnVzZV9odG1sKQorCQkJd3JhcF9pbl9odG1sKCZtc2didWYuYnVmKTsKKwkJbGZfdG9fY3JsZigmbXNnYnVmLmJ1Zik7CisKKwkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lORklMRVNJWkVfTEFSR0UsCisJCQkJIChjdXJsX29mZl90KShtc2didWYuYnVmLmxlbi1wcmV2X2xlbikpOworCisJCXJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworCisJCWlmKHJlcyAhPSBDVVJMRV9PSykgeworCQkJZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfcGVyZm9ybSgpIGZhaWxlZDogJXNcbiIsCisJCQkJCWN1cmxfZWFzeV9zdHJlcnJvcihyZXMpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbisrOworCX0KKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisKKwljdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKwljdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKwlpZiAoY3JlZC51c2VybmFtZSkgeworCQlpZiAocmVzID09IENVUkxFX09LKQorCQkJY3JlZGVudGlhbF9hcHByb3ZlKCZjcmVkKTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwZDAxCisJCWVsc2UgaWYgKHJlcyA9PSBDVVJMRV9MT0dJTl9ERU5JRUQpCisjZWxzZQorCQllbHNlCisjZW5kaWYKKwkJCWNyZWRlbnRpYWxfcmVqZWN0KCZjcmVkKTsKKwl9CisKKwljcmVkZW50aWFsX2NsZWFyKCZjcmVkKTsKKworCXJldHVybiByZXMgIT0gQ1VSTEVfT0s7Cit9CisjZW5kaWYKKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGFsbF9tc2dzID0gU1RSQlVGX0lOSVQ7CisJaW50IHRvdGFsOworCWludCBub25naXRfb2s7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKKwlnaXRfaW1hcF9jb25maWcoKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIChjb25zdCBjaGFyICoqKWFyZ3YsICIiLCBpbWFwX3NlbmRfb3B0aW9ucywgaW1hcF9zZW5kX3VzYWdlLCAwKTsKKworCWlmIChhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMoaW1hcF9zZW5kX3VzYWdlLCBpbWFwX3NlbmRfb3B0aW9ucyk7CisKKyNpZm5kZWYgVVNFX0NVUkxfRk9SX0lNQVBfU0VORAorCWlmICh1c2VfY3VybCkgeworCQl3YXJuaW5nKCItLWN1cmwgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIik7CisJCXVzZV9jdXJsID0gMDsKKwl9CisjZWxpZiBkZWZpbmVkKE5PX09QRU5TU0wpCisJaWYgKCF1c2VfY3VybCkgeworCQl3YXJuaW5nKCItLW5vLWN1cmwgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkIik7CisJCXVzZV9jdXJsID0gMTsKKwl9CisjZW5kaWYKKworCWlmICghc2VydmVyLnBvcnQpCisJCXNlcnZlci5wb3J0ID0gc2VydmVyLnVzZV9zc2wgPyA5OTMgOiAxNDM7CisKKwlpZiAoIXNlcnZlci5mb2xkZXIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJubyBpbWFwIHN0b3JlIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAxOworCX0KKwlpZiAoIXNlcnZlci5ob3N0KSB7CisJCWlmICghc2VydmVyLnR1bm5lbCkgeworCQkJZnByaW50ZihzdGRlcnIsICJubyBpbWFwIGhvc3Qgc3BlY2lmaWVkXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJCXNlcnZlci5ob3N0ID0gInR1bm5lbCI7CisJfQorCisJLyogcmVhZCB0aGUgbWVzc2FnZXMgKi8KKwlpZiAocmVhZF9tZXNzYWdlKHN0ZGluLCAmYWxsX21zZ3MpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3IgcmVhZGluZyBpbnB1dFxuIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChhbGxfbXNncy5sZW4gPT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIm5vdGhpbmcgdG8gc2VuZFxuIik7CisJCXJldHVybiAxOworCX0KKworCXRvdGFsID0gY291bnRfbWVzc2FnZXMoJmFsbF9tc2dzKTsKKwlpZiAoIXRvdGFsKSB7CisJCWZwcmludGYoc3RkZXJyLCAibm8gbWVzc2FnZXMgdG8gc2VuZFxuIik7CisJCXJldHVybiAxOworCX0KKworCS8qIHdyaXRlIGl0IHRvIHRoZSBpbWFwIHNlcnZlciAqLworCisJaWYgKHNlcnZlci50dW5uZWwpCisJCXJldHVybiBhcHBlbmRfbXNnc190b19pbWFwKCZzZXJ2ZXIsICZhbGxfbXNncywgdG90YWwpOworCisjaWZkZWYgVVNFX0NVUkxfRk9SX0lNQVBfU0VORAorCWlmICh1c2VfY3VybCkKKwkJcmV0dXJuIGN1cmxfYXBwZW5kX21zZ3NfdG9faW1hcCgmc2VydmVyLCAmYWxsX21zZ3MsIHRvdGFsKTsKKyNlbmRpZgorCisJcmV0dXJuIGFwcGVuZF9tc2dzX3RvX2ltYXAoJnNlcnZlciwgJmFsbF9tc2dzLCB0b3RhbCk7Cit9CmRpZmYgLS1naXQgYS9pbnRlcmRpZmYuYyBiL2ludGVyZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MWQ2ODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbnRlcmRpZmYuYwpAQCAtMCwwICsxLDI4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImludGVyZGlmZi5oIgorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqaWRpZmZfcHJlZml4X2NiKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGF0YTsKK30KKwordm9pZCBzaG93X2ludGVyZGlmZihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgaW50IGluZGVudCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdHM7CisJc3RydWN0IHN0cmJ1ZiBwcmVmaXggPSBTVFJCVUZfSU5JVDsKKworCW1lbWNweSgmb3B0cywgJnJldi0+ZGlmZm9wdCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKKwlvcHRzLm91dHB1dF9wcmVmaXggPSBpZGlmZl9wcmVmaXhfY2I7CisJc3RyYnVmX2FkZGNoYXJzKCZwcmVmaXgsICcgJywgaW5kZW50KTsKKwlvcHRzLm91dHB1dF9wcmVmaXhfZGF0YSA9ICZwcmVmaXg7CisJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKKworCWRpZmZfdHJlZV9vaWQocmV2LT5pZGlmZl9vaWQxLCByZXYtPmlkaWZmX29pZDIsICIiLCAmb3B0cyk7CisJZGlmZmNvcmVfc3RkKCZvcHRzKTsKKwlkaWZmX2ZsdXNoKCZvcHRzKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwcmVmaXgpOworfQpkaWZmIC0tZ2l0IGEvaW50ZXJkaWZmLmggYi9pbnRlcmRpZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWM3MzBhCi0tLSAvZGV2L251bGwKKysrIGIvaW50ZXJkaWZmLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIElOVEVSRElGRl9ICisjZGVmaW5lIElOVEVSRElGRl9ICisKK3N0cnVjdCByZXZfaW5mbzsKKwordm9pZCBzaG93X2ludGVyZGlmZihzdHJ1Y3QgcmV2X2luZm8gKiwgaW50IGluZGVudCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaXRlcmF0b3IuaCBiL2l0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2OTAwZQotLS0gL2Rldi9udWxsCisrKyBiL2l0ZXJhdG9yLmgKQEAgLTAsMCArMSw4MSBAQAorI2lmbmRlZiBJVEVSQVRPUl9ICisjZGVmaW5lIElURVJBVE9SX0gKKworLyoKKyAqIEdlbmVyaWMgY29uc3RhbnRzIHJlbGF0ZWQgdG8gaXRlcmF0b3JzLgorICovCisKKy8qCisgKiBUaGUgYXR0ZW1wdCB0byBhZHZhbmNlIHRoZSBpdGVyYXRvciB3YXMgc3VjY2Vzc2Z1bDsgdGhlIGl0ZXJhdG9yCisgKiByZWZsZWN0cyB0aGUgbmV3IGN1cnJlbnQgZW50cnkuCisgKi8KKyNkZWZpbmUgSVRFUl9PSyAwCisKKy8qCisgKiBUaGUgaXRlcmF0b3IgaXMgZXhoYXVzdGVkIGFuZCBoYXMgYmVlbiBmcmVlZC4KKyAqLworI2RlZmluZSBJVEVSX0RPTkUgLTEKKworLyoKKyAqIFRoZSBpdGVyYXRvciBleHBlcmllbmNlZCBhbiBlcnJvci4gVGhlIGl0ZXJhdGlvbiBoYXMgYmVlbiBhYm9ydGVkCisgKiBhbmQgdGhlIGl0ZXJhdG9yIGhhcyBiZWVuIGZyZWVkLgorICovCisjZGVmaW5lIElURVJfRVJST1IgLTIKKworLyoKKyAqIFJldHVybiB2YWx1ZXMgZm9yIHNlbGVjdG9yIGZ1bmN0aW9ucyBmb3IgbWVyZ2UgaXRlcmF0b3JzLiBUaGUKKyAqIG51bWVyaWNhbCB2YWx1ZXMgb2YgdGhlc2UgY29uc3RhbnRzIGFyZSBpbXBvcnRhbnQgYW5kIG11c3QgYmUKKyAqIGNvbXBhdGlibGUgd2l0aCBJVEVSX0RPTkUgYW5kIElURVJfRVJST1IuCisgKi8KK2VudW0gaXRlcmF0b3Jfc2VsZWN0aW9uIHsKKwkvKiBFbmQgdGhlIGl0ZXJhdGlvbiB3aXRob3V0IGFuIGVycm9yOiAqLworCUlURVJfU0VMRUNUX0RPTkUgPSBJVEVSX0RPTkUsCisKKwkvKiBSZXBvcnQgYW4gZXJyb3IgYW5kIGFib3J0IHRoZSBpdGVyYXRpb246ICovCisJSVRFUl9TRUxFQ1RfRVJST1IgPSBJVEVSX0VSUk9SLAorCisJLyoKKwkgKiBUaGUgbmV4dCBncm91cCBvZiBjb25zdGFudHMgYXJlIG1hc2tzIHRoYXQgYXJlIHVzZWZ1bAorCSAqIG1haW5seSBpbnRlcm5hbGx5LgorCSAqLworCisJLyogVGhlIExTQiBzZWxlY3RzIHdoZXRoZXIgaXRlcjAvaXRlcjEgaXMgdGhlICJjdXJyZW50IiBpdGVyYXRvcjogKi8KKwlJVEVSX0NVUlJFTlRfU0VMRUNUSU9OX01BU0sgPSAweDAxLAorCisJLyogaXRlcjAgaXMgdGhlICJjdXJyZW50IiBpdGVyYXRvciB0aGlzIHJvdW5kOiAqLworCUlURVJfQ1VSUkVOVF9TRUxFQ1RJT05fMCA9IDB4MDAsCisKKwkvKiBpdGVyMSBpcyB0aGUgImN1cnJlbnQiIGl0ZXJhdG9yIHRoaXMgcm91bmQ6ICovCisJSVRFUl9DVVJSRU5UX1NFTEVDVElPTl8xID0gMHgwMSwKKworCS8qIFlpZWxkIHRoZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGl0ZXJhdG9yPyAqLworCUlURVJfWUlFTERfQ1VSUkVOVCA9IDB4MDIsCisKKwkvKiBEaXNjYXJkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWNvbmRhcnkgaXRlcmF0b3I/ICovCisJSVRFUl9TS0lQX1NFQ09OREFSWSA9IDB4MDQsCisKKwkvKgorCSAqIFRoZSBjb25zdGFudHMgdGhhdCBhIHNlbGVjdG9yIGZ1bmN0aW9uIHNob3VsZCB1c3VhbGx5CisJICogcmV0dXJuLgorCSAqLworCisJLyogWWllbGQgdGhlIHZhbHVlIGZyb20gaXRlcjA6ICovCisJSVRFUl9TRUxFQ1RfMCA9IElURVJfQ1VSUkVOVF9TRUxFQ1RJT05fMCB8IElURVJfWUlFTERfQ1VSUkVOVCwKKworCS8qIFlpZWxkIHRoZSB2YWx1ZSBmcm9tIGl0ZXIwIGFuZCBkaXNjYXJkIHRoZSBvbmUgZnJvbSBpdGVyMTogKi8KKwlJVEVSX1NFTEVDVF8wX1NLSVBfMSA9IElURVJfU0VMRUNUXzAgfCBJVEVSX1NLSVBfU0VDT05EQVJZLAorCisJLyogRGlzY2FyZCB0aGUgdmFsdWUgZnJvbSBpdGVyMCB3aXRob3V0IHlpZWxkaW5nIGFueXRoaW5nIHRoaXMgcm91bmQ6ICovCisJSVRFUl9TS0lQXzAgPSBJVEVSX0NVUlJFTlRfU0VMRUNUSU9OXzEgfCBJVEVSX1NLSVBfU0VDT05EQVJZLAorCisJLyogWWllbGQgdGhlIHZhbHVlIGZyb20gaXRlcjE6ICovCisJSVRFUl9TRUxFQ1RfMSA9IElURVJfQ1VSUkVOVF9TRUxFQ1RJT05fMSB8IElURVJfWUlFTERfQ1VSUkVOVCwKKworCS8qIFlpZWxkIHRoZSB2YWx1ZSBmcm9tIGl0ZXIxIGFuZCBkaXNjYXJkIHRoZSBvbmUgZnJvbSBpdGVyMDogKi8KKwlJVEVSX1NFTEVDVF8xX1NLSVBfMCA9IElURVJfU0VMRUNUXzEgfCBJVEVSX1NLSVBfU0VDT05EQVJZLAorCisJLyogRGlzY2FyZCB0aGUgdmFsdWUgZnJvbSBpdGVyMSB3aXRob3V0IHlpZWxkaW5nIGFueXRoaW5nIHRoaXMgcm91bmQ6ICovCisJSVRFUl9TS0lQXzEgPSBJVEVSX0NVUlJFTlRfU0VMRUNUSU9OXzAgfCBJVEVSX1NLSVBfU0VDT05EQVJZCit9OworCisjZW5kaWYgLyogSVRFUkFUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvanNvbi13cml0ZXIuYyBiL2pzb24td3JpdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkYjlkYgotLS0gL2Rldi9udWxsCisrKyBiL2pzb24td3JpdGVyLmMKQEAgLTAsMCArMSw0MTQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImpzb24td3JpdGVyLmgiCisKK3ZvaWQgandfaW5pdChzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCXN0cmJ1Zl9pbml0KCZqdy0+anNvbiwgMCk7CisJc3RyYnVmX2luaXQoJmp3LT5vcGVuX3N0YWNrLCAwKTsKKwlqdy0+bmVlZF9jb21tYSA9IDA7CisJanctPnByZXR0eSA9IDA7Cit9CisKK3ZvaWQgandfcmVsZWFzZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCXN0cmJ1Zl9yZWxlYXNlKCZqdy0+anNvbik7CisJc3RyYnVmX3JlbGVhc2UoJmp3LT5vcGVuX3N0YWNrKTsKK30KKworLyoKKyAqIEFwcGVuZCBKU09OLXF1b3RlZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBzdHJpbmcgdG8gJ291dCcuCisgKi8KK3N0YXRpYyB2b2lkIGFwcGVuZF9xdW90ZWRfc3RyaW5nKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqaW4pCit7CisJdW5zaWduZWQgY2hhciBjOworCisJc3RyYnVmX2FkZGNoKG91dCwgJyInKTsKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gJ1wwJykgeworCQlpZiAoYyA9PSAnIicpCisJCQlzdHJidWZfYWRkc3RyKG91dCwgIlxcXCIiKTsKKwkJZWxzZSBpZiAoYyA9PSAnXFwnKQorCQkJc3RyYnVmX2FkZHN0cihvdXQsICJcXFxcIik7CisJCWVsc2UgaWYgKGMgPT0gJ1xuJykKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiXFxuIik7CisJCWVsc2UgaWYgKGMgPT0gJ1xyJykKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiXFxyIik7CisJCWVsc2UgaWYgKGMgPT0gJ1x0JykKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiXFx0Iik7CisJCWVsc2UgaWYgKGMgPT0gJ1xmJykKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiXFxmIik7CisJCWVsc2UgaWYgKGMgPT0gJ1xiJykKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCAiXFxiIik7CisJCWVsc2UgaWYgKGMgPCAweDIwKQorCQkJc3RyYnVmX2FkZGYob3V0LCAiXFx1JTA0eCIsIGMpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2gob3V0LCBjKTsKKwl9CisJc3RyYnVmX2FkZGNoKG91dCwgJyInKTsKK30KKworc3RhdGljIHZvaWQgaW5kZW50X3ByZXR0eShzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IGp3LT5vcGVuX3N0YWNrLmxlbjsgaysrKQorCQlzdHJidWZfYWRkc3RyKCZqdy0+anNvbiwgIiAgIik7Cit9CisKKy8qCisgKiBCZWdpbiBhbiBvYmplY3Qgb3IgYXJyYXkgKGVpdGhlciB0b3AtbGV2ZWwgb3IgbmVzdGVkIHdpdGhpbiB0aGUgY3VycmVudGx5CisgKiBvcGVuIG9iamVjdCBvciBhcnJheSkuCisgKi8KK3N0YXRpYyB2b2lkIGJlZ2luKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNoYXIgY2hfb3BlbiwgaW50IHByZXR0eSkKK3sKKwlqdy0+cHJldHR5ID0gcHJldHR5OworCisJc3RyYnVmX2FkZGNoKCZqdy0+anNvbiwgY2hfb3Blbik7CisKKwlzdHJidWZfYWRkY2goJmp3LT5vcGVuX3N0YWNrLCBjaF9vcGVuKTsKKwlqdy0+bmVlZF9jb21tYSA9IDA7Cit9CisKKy8qCisgKiBBc3NlcnQgdGhhdCB0aGUgdG9wIG9mIHRoZSBvcGVuLXN0YWNrIGlzIGFuIG9iamVjdC4KKyAqLworc3RhdGljIHZvaWQgYXNzZXJ0X2luX29iamVjdChjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXkpCit7CisJaWYgKCFqdy0+b3Blbl9zdGFjay5sZW4pCisJCUJVRygianNvbi13cml0ZXI6IG9iamVjdDogbWlzc2luZyBqd19vYmplY3RfYmVnaW4oKTogJyVzJyIsIGtleSk7CisJaWYgKGp3LT5vcGVuX3N0YWNrLmJ1Zltqdy0+b3Blbl9zdGFjay5sZW4gLSAxXSAhPSAneycpCisJCUJVRygianNvbi13cml0ZXI6IG9iamVjdDogbm90IGluIG9iamVjdDogJyVzJyIsIGtleSk7Cit9CisKKy8qCisgKiBBc3NlcnQgdGhhdCB0aGUgdG9wIG9mIHRoZSBvcGVuLXN0YWNrIGlzIGFuIGFycmF5LgorICovCitzdGF0aWMgdm9pZCBhc3NlcnRfaW5fYXJyYXkoY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlpZiAoIWp3LT5vcGVuX3N0YWNrLmxlbikKKwkJQlVHKCJqc29uLXdyaXRlcjogYXJyYXk6IG1pc3NpbmcgandfYXJyYXlfYmVnaW4oKSIpOworCWlmIChqdy0+b3Blbl9zdGFjay5idWZbanctPm9wZW5fc3RhY2subGVuIC0gMV0gIT0gJ1snKQorCQlCVUcoImpzb24td3JpdGVyOiBhcnJheTogbm90IGluIGFycmF5Iik7Cit9CisKKy8qCisgKiBBZGQgY29tbWEgaWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gYSBtZW1iZXIgYXQgdGhpcyBsZXZlbC4KKyAqLworc3RhdGljIHZvaWQgbWF5YmVfYWRkX2NvbW1hKHN0cnVjdCBqc29uX3dyaXRlciAqancpCit7CisJaWYgKGp3LT5uZWVkX2NvbW1hKQorCQlzdHJidWZfYWRkY2goJmp3LT5qc29uLCAnLCcpOworCWVsc2UKKwkJanctPm5lZWRfY29tbWEgPSAxOworfQorCitzdGF0aWMgdm9pZCBmbXRfZG91YmxlKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludCBwcmVjaXNpb24sCisJCQkgICAgICBkb3VibGUgdmFsdWUpCit7CisJaWYgKHByZWNpc2lvbiA8IDApIHsKKwkJc3RyYnVmX2FkZGYoJmp3LT5qc29uLCAiJWYiLCB2YWx1ZSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBmbXQgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJmZtdCwgIiUlLiVkZiIsIHByZWNpc2lvbik7CisJCXN0cmJ1Zl9hZGRmKCZqdy0+anNvbiwgZm10LmJ1ZiwgdmFsdWUpOworCQlzdHJidWZfcmVsZWFzZSgmZm10KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9iamVjdF9jb21tb24oc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5KQoreworCWFzc2VydF9pbl9vYmplY3QoancsIGtleSk7CisJbWF5YmVfYWRkX2NvbW1hKGp3KTsKKworCWlmIChqdy0+cHJldHR5KSB7CisJCXN0cmJ1Zl9hZGRjaCgmanctPmpzb24sICdcbicpOworCQlpbmRlbnRfcHJldHR5KGp3KTsKKwl9CisKKwlhcHBlbmRfcXVvdGVkX3N0cmluZygmanctPmpzb24sIGtleSk7CisJc3RyYnVmX2FkZGNoKCZqdy0+anNvbiwgJzonKTsKKwlpZiAoanctPnByZXR0eSkKKwkJc3RyYnVmX2FkZGNoKCZqdy0+anNvbiwgJyAnKTsKK30KKworc3RhdGljIHZvaWQgYXJyYXlfY29tbW9uKHN0cnVjdCBqc29uX3dyaXRlciAqancpCit7CisJYXNzZXJ0X2luX2FycmF5KGp3KTsKKwltYXliZV9hZGRfY29tbWEoancpOworCisJaWYgKGp3LT5wcmV0dHkpIHsKKwkJc3RyYnVmX2FkZGNoKCZqdy0+anNvbiwgJ1xuJyk7CisJCWluZGVudF9wcmV0dHkoancpOworCX0KK30KKworLyoKKyAqIEFzc2VydCB0aGF0IHRoZSBnaXZlbiBKU09OIG9iamVjdCBvciBKU09OIGFycmF5IGhhcyBiZWVuIHByb3Blcmx5CisgKiB0ZXJtaW5hdGVkLiAgKEhhcyBjbG9zaW5nIGJyYWNrZXQuKQorICovCitzdGF0aWMgdm9pZCBhc3NlcnRfaXNfdGVybWluYXRlZChjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCWlmIChqdy0+b3Blbl9zdGFjay5sZW4pCisJCUJVRygianNvbi13cml0ZXI6IG9iamVjdDogbWlzc2luZyBqd19lbmQoKTogJyVzJyIsCisJCSAgICBqdy0+anNvbi5idWYpOworfQorCit2b2lkIGp3X29iamVjdF9iZWdpbihzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBpbnQgcHJldHR5KQoreworCWJlZ2luKGp3LCAneycsIHByZXR0eSk7Cit9CisKK3ZvaWQgandfb2JqZWN0X3N0cmluZyhzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCW9iamVjdF9jb21tb24oancsIGtleSk7CisJYXBwZW5kX3F1b3RlZF9zdHJpbmcoJmp3LT5qc29uLCB2YWx1ZSk7Cit9CisKK3ZvaWQgandfb2JqZWN0X2ludG1heChzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXksIGludG1heF90IHZhbHVlKQoreworCW9iamVjdF9jb21tb24oancsIGtleSk7CisJc3RyYnVmX2FkZGYoJmp3LT5qc29uLCAiJSJQUklkTUFYLCB2YWx1ZSk7Cit9CisKK3ZvaWQgandfb2JqZWN0X2RvdWJsZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXksIGludCBwcmVjaXNpb24sCisJCSAgICAgIGRvdWJsZSB2YWx1ZSkKK3sKKwlvYmplY3RfY29tbW9uKGp3LCBrZXkpOworCWZtdF9kb3VibGUoancsIHByZWNpc2lvbiwgdmFsdWUpOworfQorCit2b2lkIGp3X29iamVjdF90cnVlKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlvYmplY3RfY29tbW9uKGp3LCBrZXkpOworCXN0cmJ1Zl9hZGRzdHIoJmp3LT5qc29uLCAidHJ1ZSIpOworfQorCit2b2lkIGp3X29iamVjdF9mYWxzZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXkpCit7CisJb2JqZWN0X2NvbW1vbihqdywga2V5KTsKKwlzdHJidWZfYWRkc3RyKCZqdy0+anNvbiwgImZhbHNlIik7Cit9CisKK3ZvaWQgandfb2JqZWN0X2Jvb2woc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5LCBpbnQgdmFsdWUpCit7CisJaWYgKHZhbHVlKQorCQlqd19vYmplY3RfdHJ1ZShqdywga2V5KTsKKwllbHNlCisJCWp3X29iamVjdF9mYWxzZShqdywga2V5KTsKK30KKwordm9pZCBqd19vYmplY3RfbnVsbChzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXkpCit7CisJb2JqZWN0X2NvbW1vbihqdywga2V5KTsKKwlzdHJidWZfYWRkc3RyKCZqdy0+anNvbiwgIm51bGwiKTsKK30KKworc3RhdGljIHZvaWQgaW5jcmVhc2VfaW5kZW50KHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqancsCisJCQkgICAgaW50IGluZGVudCkKK3sKKwlpbnQgazsKKworCXN0cmJ1Zl9yZXNldChzYik7CisJZm9yIChrID0gMDsgayA8IGp3LT5qc29uLmxlbjsgaysrKSB7CisJCWNoYXIgY2ggPSBqdy0+anNvbi5idWZba107CisJCXN0cmJ1Zl9hZGRjaChzYiwgY2gpOworCQlpZiAoY2ggPT0gJ1xuJykKKwkJCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCBpbmRlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQga2lsbF9pbmRlbnQoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQljb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCWludCBrOworCWludCBlYXRfaXQgPSAwOworCisJc3RyYnVmX3Jlc2V0KHNiKTsKKwlmb3IgKGsgPSAwOyBrIDwganctPmpzb24ubGVuOyBrKyspIHsKKwkJY2hhciBjaCA9IGp3LT5qc29uLmJ1ZltrXTsKKwkJaWYgKGVhdF9pdCAmJiBjaCA9PSAnICcpCisJCQljb250aW51ZTsKKwkJaWYgKGNoID09ICdcbicpIHsKKwkJCWVhdF9pdCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQllYXRfaXQgPSAwOworCQlzdHJidWZfYWRkY2goc2IsIGNoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdWJfancoc3RydWN0IGpzb25fd3JpdGVyICpqdywKKwkJCSAgY29uc3Qgc3RydWN0IGpzb25fd3JpdGVyICp2YWx1ZSkKK3sKKwkvKgorCSAqIElmIGJvdGggYXJlIHByZXR0eSwgaW5jcmVhc2UgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBzdWJfancKKwkgKiB0byBiZXR0ZXIgZml0IHVuZGVyIHRoZSBzdXBlci4KKwkgKgorCSAqIElmIHRoZSBzdXBlciBpcyBwcmV0dHksIGJ1dCB0aGUgc3ViX2p3IGlzIGNvbXBhY3QsIGxlYXZlIHRoZQorCSAqIHN1Yl9qdyBjb21wYWN0LiAgKFdlIGRvbid0IHdhbnQgdG8gcGFyc2UgYW5kIHJlYnVpbGQgdGhlIHN1Yl9qdworCSAqIGZvciB0aGlzIGRlYnVnLWlzaCBmZWF0dXJlLikKKwkgKgorCSAqIElmIHRoZSBzdXBlciBpcyBjb21wYWN0LCBhbmQgdGhlIHN1Yl9qdyBpcyBwcmV0dHksIGNvbnZlcnQKKwkgKiB0aGUgc3ViX2p3IHRvIGNvbXBhY3QuCisJICoKKwkgKiBJZiBib3RoIGFyZSBjb21wYWN0LCBrZWVwIHRoZSBzdWJfancgY29tcGFjdC4KKwkgKi8KKwlpZiAoanctPnByZXR0eSAmJiBqdy0+b3Blbl9zdGFjay5sZW4gJiYgdmFsdWUtPnByZXR0eSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCWluY3JlYXNlX2luZGVudCgmc2IsIHZhbHVlLCBqdy0+b3Blbl9zdGFjay5sZW4gKiAyKTsKKwkJc3RyYnVmX2FkZGJ1ZigmanctPmpzb24sICZzYik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybjsKKwl9CisJaWYgKCFqdy0+cHJldHR5ICYmIHZhbHVlLT5wcmV0dHkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlraWxsX2luZGVudCgmc2IsIHZhbHVlKTsKKwkJc3RyYnVmX2FkZGJ1ZigmanctPmpzb24sICZzYik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybjsKKwl9CisKKwlzdHJidWZfYWRkYnVmKCZqdy0+anNvbiwgJnZhbHVlLT5qc29uKTsKK30KKworLyoKKyAqIEFwcGVuZCBleGlzdGluZyAocHJvcGVybHkgdGVybWluYXRlZCkgSlNPTiBzdWItZGF0YSAob2JqZWN0IG9yIGFycmF5KQorICogYXMtaXMgb250byB0aGUgZ2l2ZW4gSlNPTiBkYXRhLgorICovCit2b2lkIGp3X29iamVjdF9zdWJfancoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5LAorCQkgICAgICBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKnZhbHVlKQoreworCWFzc2VydF9pc190ZXJtaW5hdGVkKHZhbHVlKTsKKworCW9iamVjdF9jb21tb24oancsIGtleSk7CisJYXBwZW5kX3N1Yl9qdyhqdywgdmFsdWUpOworfQorCit2b2lkIGp3X29iamVjdF9pbmxpbmVfYmVnaW5fb2JqZWN0KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlvYmplY3RfY29tbW9uKGp3LCBrZXkpOworCisJandfb2JqZWN0X2JlZ2luKGp3LCBqdy0+cHJldHR5KTsKK30KKwordm9pZCBqd19vYmplY3RfaW5saW5lX2JlZ2luX2FycmF5KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlvYmplY3RfY29tbW9uKGp3LCBrZXkpOworCisJandfYXJyYXlfYmVnaW4oancsIGp3LT5wcmV0dHkpOworfQorCit2b2lkIGp3X2FycmF5X2JlZ2luKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludCBwcmV0dHkpCit7CisJYmVnaW4oancsICdbJywgcHJldHR5KTsKK30KKwordm9pZCBqd19hcnJheV9zdHJpbmcoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqdmFsdWUpCit7CisJYXJyYXlfY29tbW9uKGp3KTsKKwlhcHBlbmRfcXVvdGVkX3N0cmluZygmanctPmpzb24sIHZhbHVlKTsKK30KKwordm9pZCBqd19hcnJheV9pbnRtYXgoc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50bWF4X3QgdmFsdWUpCit7CisJYXJyYXlfY29tbW9uKGp3KTsKKwlzdHJidWZfYWRkZigmanctPmpzb24sICIlIlBSSWRNQVgsIHZhbHVlKTsKK30KKwordm9pZCBqd19hcnJheV9kb3VibGUoc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50IHByZWNpc2lvbiwgZG91YmxlIHZhbHVlKQoreworCWFycmF5X2NvbW1vbihqdyk7CisJZm10X2RvdWJsZShqdywgcHJlY2lzaW9uLCB2YWx1ZSk7Cit9CisKK3ZvaWQgandfYXJyYXlfdHJ1ZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCWFycmF5X2NvbW1vbihqdyk7CisJc3RyYnVmX2FkZHN0cigmanctPmpzb24sICJ0cnVlIik7Cit9CisKK3ZvaWQgandfYXJyYXlfZmFsc2Uoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlhcnJheV9jb21tb24oancpOworCXN0cmJ1Zl9hZGRzdHIoJmp3LT5qc29uLCAiZmFsc2UiKTsKK30KKwordm9pZCBqd19hcnJheV9ib29sKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludCB2YWx1ZSkKK3sKKwlpZiAodmFsdWUpCisJCWp3X2FycmF5X3RydWUoancpOworCWVsc2UKKwkJandfYXJyYXlfZmFsc2UoancpOworfQorCit2b2lkIGp3X2FycmF5X251bGwoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlhcnJheV9jb21tb24oancpOworCXN0cmJ1Zl9hZGRzdHIoJmp3LT5qc29uLCAibnVsbCIpOworfQorCit2b2lkIGp3X2FycmF5X3N1Yl9qdyhzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKnZhbHVlKQoreworCWFzc2VydF9pc190ZXJtaW5hdGVkKHZhbHVlKTsKKworCWFycmF5X2NvbW1vbihqdyk7CisJYXBwZW5kX3N1Yl9qdyhqdywgdmFsdWUpOworfQorCit2b2lkIGp3X2FycmF5X2FyZ2NfYXJndihzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgYXJnYzsgaysrKQorCQlqd19hcnJheV9zdHJpbmcoancsIGFyZ3Zba10pOworfQorCit2b2lkIGp3X2FycmF5X2FyZ3Yoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJd2hpbGUgKCphcmd2KQorCQlqd19hcnJheV9zdHJpbmcoancsICphcmd2KyspOworfQorCit2b2lkIGp3X2FycmF5X2lubGluZV9iZWdpbl9vYmplY3Qoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlhcnJheV9jb21tb24oancpOworCisJandfb2JqZWN0X2JlZ2luKGp3LCBqdy0+cHJldHR5KTsKK30KKwordm9pZCBqd19hcnJheV9pbmxpbmVfYmVnaW5fYXJyYXkoc3RydWN0IGpzb25fd3JpdGVyICpqdykKK3sKKwlhcnJheV9jb21tb24oancpOworCisJandfYXJyYXlfYmVnaW4oancsIGp3LT5wcmV0dHkpOworfQorCitpbnQgandfaXNfdGVybWluYXRlZChjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCXJldHVybiAhanctPm9wZW5fc3RhY2subGVuOworfQorCit2b2lkIGp3X2VuZChzdHJ1Y3QganNvbl93cml0ZXIgKmp3KQoreworCWNoYXIgY2hfb3BlbjsKKwlpbnQgbGVuOworCisJaWYgKCFqdy0+b3Blbl9zdGFjay5sZW4pCisJCUJVRygianNvbi13cml0ZXI6IHRvbyBtYW55IGp3X2VuZCgpOiAnJXMnIiwganctPmpzb24uYnVmKTsKKworCWxlbiA9IGp3LT5vcGVuX3N0YWNrLmxlbiAtIDE7CisJY2hfb3BlbiA9IGp3LT5vcGVuX3N0YWNrLmJ1ZltsZW5dOworCisJc3RyYnVmX3NldGxlbigmanctPm9wZW5fc3RhY2ssIGxlbik7CisJanctPm5lZWRfY29tbWEgPSAxOworCisJaWYgKGp3LT5wcmV0dHkpIHsKKwkJc3RyYnVmX2FkZGNoKCZqdy0+anNvbiwgJ1xuJyk7CisJCWluZGVudF9wcmV0dHkoancpOworCX0KKworCWlmIChjaF9vcGVuID09ICd7JykKKwkJc3RyYnVmX2FkZGNoKCZqdy0+anNvbiwgJ30nKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRjaCgmanctPmpzb24sICddJyk7Cit9CmRpZmYgLS1naXQgYS9qc29uLXdyaXRlci5oIGIvanNvbi13cml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzkwNmIwCi0tLSAvZGV2L251bGwKKysrIGIvanNvbi13cml0ZXIuaApAQCAtMCwwICsxLDEwNyBAQAorI2lmbmRlZiBKU09OX1dSSVRFUl9ICisjZGVmaW5lIEpTT05fV1JJVEVSX0gKKworLyoKKyAqIEpTT04gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGF0OgorICogWzFdIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzcxNTkudHh0CisgKiBbMl0gaHR0cDovL2pzb24ub3JnLworICoKKyAqIFRoZSBKU09OLXdyaXRlciBBUEkgYWxsb3dzIG9uZSB0byBidWlsZCBKU09OIGRhdGEgc3RydWN0dXJlcyB1c2luZyBhCisgKiBzaW1wbGUgd3JhcHBlciBhcm91bmQgYSAic3RydWN0IHN0cmJ1ZiIgYnVmZmVyLiAgSXQgaXMgaW50ZW5kZWQgYXMgYQorICogc2ltcGxlIEFQSSB0byBidWlsZCBvdXRwdXQgc3RyaW5nczsgaXQgaXMgbm90IGludGVuZGVkIHRvIGJlIGEgZ2VuZXJhbAorICogb2JqZWN0IG1vZGVsIGZvciBKU09OIGRhdGEuICBJbiBwYXJ0aWN1bGFyLCBpdCBkb2VzIG5vdCByZS1vcmRlciBrZXlzCisgKiBpbiBhbiBvYmplY3QgKGRpY3Rpb25hcnkpLCBpdCBkb2VzIG5vdCBkZS1kdXAga2V5cyBpbiBhbiBvYmplY3QsIGFuZAorICogaXQgZG9lcyBub3QgYWxsb3cgbG9va3VwIG9yIHBhcnNpbmcgb2YgSlNPTiBkYXRhLgorICoKKyAqIEFsbCBzdHJpbmcgdmFsdWVzIChib3RoIGtleXMgYW5kIHN0cmluZyByLXZhbHVlcykgYXJlIHByb3Blcmx5IHF1b3RlZAorICogYW5kIGVzY2FwZWQgaWYgdGhleSBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAqCisgKiBUaGVzZSByb3V0aW5lcyBjcmVhdGUgY29tcGFjdCBKU09OIGRhdGEgKHdpdGggbm8gdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSwKKyAqIG5ld2xpbmVzLCBvciBpbmRlbnRpbmcpLiAgSWYgeW91IGdldCBhbiB1bmV4cGVjdGVkIHJlc3BvbnNlLCB2ZXJpZnkKKyAqIHRoYXQgeW91J3JlIG5vdCBleHBlY3RpbmcgYSBwcmV0dHkgSlNPTiBzdHJpbmcuCisgKgorICogQm90aCAiSlNPTiBvYmplY3RzIiAoYWthIHNldHMgb2Ygay92IHBhaXJzKSBhbmQgIkpTT04gYXJyYXkiIGNhbiBiZQorICogY29uc3RydWN0ZWQgdXNpbmcgYSAnYmVnaW4gYXBwZW5kKiBlbmQnIG1vZGVsLgorICoKKyAqIE5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMgY2FuIGVpdGhlciBiZSBjb25zdHJ1Y3RlZCBib3R0b20gdXAgKGJ5CisgKiBjcmVhdGluZyBzdWIgb2JqZWN0L2FycmF5cyBmaXJzdCBhbmQgYXBwZW5kaW5nIHRoZW0gdG8gdGhlIHN1cGVyCisgKiBvYmplY3QvYXJyYXkpIC1vci0gYnkgYnVpbGRpbmcgdGhlbSBpbmxpbmUgaW4gb25lIHBhc3MuICBUaGlzIGlzIGEKKyAqIHBlcnNvbmFsIHN0eWxlIGFuZC9vciBkYXRhIHNoYXBlIGNob2ljZS4KKyAqCisgKiBTZWUgdC9oZWxwZXIvdGVzdC1qc29uLXdyaXRlci5jIGZvciB2YXJpb3VzIHVzYWdlIGV4YW1wbGVzLgorICoKKyAqIExJTUlUQVRJT05TOgorICogPT09PT09PT09PT09CisgKgorICogVGhlIEpTT04gc3BlY2lmaWNhdGlvbiBbMSwyXSBkZWZpbmVzIHN0cmluZyB2YWx1ZXMgYXMgVW5pY29kZSBkYXRhCisgKiBhbmQgcHJvYmFibHkgVVRGLTggZW5jb2RlZC4gIFRoZSBjdXJyZW50IGpzb24td3JpdGVyIEFQSSBkb2VzIG5vdAorICogZW5mb3JjZSB0aGlzIGFuZCB3aWxsIHdyaXRlIGFueSBzdHJpbmcgYXMgcmVjZWl2ZWQuICBIb3dldmVyLCBpdCB3aWxsCisgKiBwcm9wZXJseSBxdW90ZSBhbmQgYmFja3NsYXNoLWVzY2FwZSB0aGVtIGFzIG5lY2Vzc2FyeS4gIEl0IGlzIHVwIHRvCisgKiB0aGUgY2FsbGVyIHRvIFVURi04IGVuY29kZSB0aGVpciBzdHJpbmdzICpiZWZvcmUqIHBhc3NpbmcgdGhlbSB0byB0aGlzCisgKiBBUEkuICBUaGlzIGxheWVyIHNob3VsZCBub3QgaGF2ZSB0byB0cnkgdG8gZ3Vlc3MgdGhlIGVuY29kaW5nIG9yIGxvY2FsZQorICogb2YgdGhlIGdpdmVuIHN0cmluZ3MuCisgKi8KKworI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdHJ1Y3QganNvbl93cml0ZXIKK3sKKwkvKgorCSAqIEJ1ZmZlciBvZiB0aGUgaW4tcHJvZ3Jlc3MgSlNPTiBjdXJyZW50bHkgYmVpbmcgY29tcG9zZWQuCisJICovCisJc3RydWN0IHN0cmJ1ZiBqc29uOworCisJLyoKKwkgKiBTaW1wbGUgc3RhY2sgb2YgdGhlIGN1cnJlbnRseSBvcGVuIGFycmF5IGFuZCBvYmplY3QgZm9ybXMuCisJICogVGhpcyBpcyBhIHN0cmluZyBvZiAneycgYW5kICdbJyBjaGFyYWN0ZXJzIGluZGljYXRpbmcgdGhlCisJICogY3VycmVudGx5IHVudGVybWluYXRlZCBmb3Jtcy4gIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlCisJICogcHJvcGVybHkgY2xvc2luZyBjaGFyYWN0ZXIgaXMgdXNlZCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBhbmQKKwkgKiB0byBrbm93IHdoZW4gdGhlIEpTT04gaXMgY29tcGxldGVseSBjbG9zZWQuCisJICovCisJc3RydWN0IHN0cmJ1ZiBvcGVuX3N0YWNrOworCisJdW5zaWduZWQgaW50IG5lZWRfY29tbWE6MTsKKwl1bnNpZ25lZCBpbnQgcHJldHR5OjE7Cit9OworCisjZGVmaW5lIEpTT05fV1JJVEVSX0lOSVQgeyBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIDAsIDAgfQorCit2b2lkIGp3X2luaXQoc3RydWN0IGpzb25fd3JpdGVyICpqdyk7Cit2b2lkIGp3X3JlbGVhc2Uoc3RydWN0IGpzb25fd3JpdGVyICpqdyk7CisKK3ZvaWQgandfb2JqZWN0X2JlZ2luKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGludCBwcmV0dHkpOwordm9pZCBqd19hcnJheV9iZWdpbihzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBpbnQgcHJldHR5KTsKKwordm9pZCBqd19vYmplY3Rfc3RyaW5nKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgICAgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBqd19vYmplY3RfaW50bWF4KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSwgaW50bWF4X3QgdmFsdWUpOwordm9pZCBqd19vYmplY3RfZG91YmxlKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSwgaW50IHByZWNpc2lvbiwKKwkJICAgICAgZG91YmxlIHZhbHVlKTsKK3ZvaWQgandfb2JqZWN0X3RydWUoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5KTsKK3ZvaWQgandfb2JqZWN0X2ZhbHNlKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSk7Cit2b2lkIGp3X29iamVjdF9ib29sKHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSwgaW50IHZhbHVlKTsKK3ZvaWQgandfb2JqZWN0X251bGwoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5KTsKK3ZvaWQgandfb2JqZWN0X3N1Yl9qdyhzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICprZXksCisJCSAgICAgIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqdmFsdWUpOworCit2b2lkIGp3X29iamVjdF9pbmxpbmVfYmVnaW5fb2JqZWN0KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IGNoYXIgKmtleSk7Cit2b2lkIGp3X29iamVjdF9pbmxpbmVfYmVnaW5fYXJyYXkoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqa2V5KTsKKwordm9pZCBqd19hcnJheV9zdHJpbmcoc3RydWN0IGpzb25fd3JpdGVyICpqdywgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBqd19hcnJheV9pbnRtYXgoc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50bWF4X3QgdmFsdWUpOwordm9pZCBqd19hcnJheV9kb3VibGUoc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50IHByZWNpc2lvbiwgZG91YmxlIHZhbHVlKTsKK3ZvaWQgandfYXJyYXlfdHJ1ZShzdHJ1Y3QganNvbl93cml0ZXIgKmp3KTsKK3ZvaWQgandfYXJyYXlfZmFsc2Uoc3RydWN0IGpzb25fd3JpdGVyICpqdyk7Cit2b2lkIGp3X2FycmF5X2Jvb2woc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50IHZhbHVlKTsKK3ZvaWQgandfYXJyYXlfbnVsbChzdHJ1Y3QganNvbl93cml0ZXIgKmp3KTsKK3ZvaWQgandfYXJyYXlfc3ViX2p3KHN0cnVjdCBqc29uX3dyaXRlciAqancsIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqdmFsdWUpOwordm9pZCBqd19hcnJheV9hcmdjX2FyZ3Yoc3RydWN0IGpzb25fd3JpdGVyICpqdywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK3ZvaWQgandfYXJyYXlfYXJndihzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICoqYXJndik7CisKK3ZvaWQgandfYXJyYXlfaW5saW5lX2JlZ2luX29iamVjdChzdHJ1Y3QganNvbl93cml0ZXIgKmp3KTsKK3ZvaWQgandfYXJyYXlfaW5saW5lX2JlZ2luX2FycmF5KHN0cnVjdCBqc29uX3dyaXRlciAqancpOworCitpbnQgandfaXNfdGVybWluYXRlZChjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKmp3KTsKK3ZvaWQgandfZW5kKHN0cnVjdCBqc29uX3dyaXRlciAqancpOworCisjZW5kaWYgLyogSlNPTl9XUklURVJfSCAqLwpkaWZmIC0tZ2l0IGEva2hhc2guaCBiL2toYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjMjA5NQotLS0gL2Rldi9udWxsCisrKyBiL2toYXNoLmgKQEAgLTAsMCArMSwzNDMgQEAKKy8qIFRoZSBNSVQgTGljZW5zZQorCisgICBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIDIwMTEgYnkgQXR0cmFjdGl2ZSBDaGFvcyA8YXR0cmFjdG9yQGxpdmUuY28udWs+CisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICAgU09GVFdBUkUuCisqLworCisjaWZuZGVmIF9fQUNfS0hBU0hfSAorI2RlZmluZSBfX0FDX0tIQVNIX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorCisjZGVmaW5lIEFDX1ZFUlNJT05fS0hBU0hfSCAiMC4yLjgiCisKK3R5cGVkZWYgdWludDMyX3Qga2hpbnQzMl90OwordHlwZWRlZiB1aW50NjRfdCBraGludDY0X3Q7CisKK3R5cGVkZWYga2hpbnQzMl90IGtoaW50X3Q7Cit0eXBlZGVmIGtoaW50X3Qga2hpdGVyX3Q7CisKKyNkZWZpbmUgX19hY19pc2VtcHR5KGZsYWcsIGkpICgoZmxhZ1tpPj40XT4+KChpJjB4ZlUpPDwxKSkmMikKKyNkZWZpbmUgX19hY19pc2RlbChmbGFnLCBpKSAoKGZsYWdbaT4+NF0+PigoaSYweGZVKTw8MSkpJjEpCisjZGVmaW5lIF9fYWNfaXNlaXRoZXIoZmxhZywgaSkgKChmbGFnW2k+PjRdPj4oKGkmMHhmVSk8PDEpKSYzKQorI2RlZmluZSBfX2FjX3NldF9pc2RlbF9mYWxzZShmbGFnLCBpKSAoZmxhZ1tpPj40XSY9figxdWw8PCgoaSYweGZVKTw8MSkpKQorI2RlZmluZSBfX2FjX3NldF9pc2VtcHR5X2ZhbHNlKGZsYWcsIGkpIChmbGFnW2k+PjRdJj1+KDJ1bDw8KChpJjB4ZlUpPDwxKSkpCisjZGVmaW5lIF9fYWNfc2V0X2lzYm90aF9mYWxzZShmbGFnLCBpKSAoZmxhZ1tpPj40XSY9figzdWw8PCgoaSYweGZVKTw8MSkpKQorI2RlZmluZSBfX2FjX3NldF9pc2RlbF90cnVlKGZsYWcsIGkpIChmbGFnW2k+PjRdfD0xdWw8PCgoaSYweGZVKTw8MSkpCisKKyNkZWZpbmUgX19hY19mc2l6ZShtKSAoKG0pIDwgMTY/IDEgOiAobSk+PjQpCisKKyNkZWZpbmUga3JvdW5kdXAzMih4KSAoLS0oeCksICh4KXw9KHgpPj4xLCAoeCl8PSh4KT4+MiwgKHgpfD0oeCk+PjQsICh4KXw9KHgpPj44LCAoeCl8PSh4KT4+MTYsICsrKHgpKQorCitzdGF0aWMgaW5saW5lIGtoaW50X3QgX19hY19YMzFfaGFzaF9zdHJpbmcoY29uc3QgY2hhciAqcykKK3sKKwlraGludF90IGggPSAoa2hpbnRfdCkqczsKKwlpZiAoaCkgZm9yICgrK3MgOyAqczsgKytzKSBoID0gKGggPDwgNSkgLSBoICsgKGtoaW50X3QpKnM7CisJcmV0dXJuIGg7Cit9CisKKyNkZWZpbmUga2hfc3RyX2hhc2hfZnVuYyhrZXkpIF9fYWNfWDMxX2hhc2hfc3RyaW5nKGtleSkKKyNkZWZpbmUga2hfc3RyX2hhc2hfZXF1YWwoYSwgYikgKHN0cmNtcChhLCBiKSA9PSAwKQorCitzdGF0aWMgY29uc3QgZG91YmxlIF9fYWNfSEFTSF9VUFBFUiA9IDAuNzc7CisKKyNkZWZpbmUgX19LSEFTSF9UWVBFKG5hbWUsIGtoa2V5X3QsIGtodmFsX3QpIFwKKwl0eXBlZGVmIHN0cnVjdCB7IFwKKwkJa2hpbnRfdCBuX2J1Y2tldHMsIHNpemUsIG5fb2NjdXBpZWQsIHVwcGVyX2JvdW5kOyBcCisJCWtoaW50MzJfdCAqZmxhZ3M7IFwKKwkJa2hrZXlfdCAqa2V5czsgXAorCQlraHZhbF90ICp2YWxzOyBcCisJfSBraF8jI25hbWUjI190OworCisjZGVmaW5lIF9fS0hBU0hfUFJPVE9UWVBFUyhuYW1lLCBraGtleV90LCBraHZhbF90KQkgCQkJXAorCWtoXyMjbmFtZSMjX3QgKmtoX2luaXRfIyNuYW1lKHZvaWQpOwkJCQkJCVwKKwl2b2lkIGtoX2Rlc3Ryb3lfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgpOwkJCQkJXAorCXZvaWQga2hfY2xlYXJfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgpOwkJCQkJCVwKKwlraGludF90IGtoX2dldF8jI25hbWUoY29uc3Qga2hfIyNuYW1lIyNfdCAqaCwga2hrZXlfdCBrZXkpOyBcCisJaW50IGtoX3Jlc2l6ZV8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCwga2hpbnRfdCBuZXdfbl9idWNrZXRzKTsgXAorCWtoaW50X3Qga2hfcHV0XyMjbmFtZShraF8jI25hbWUjI190ICpoLCBraGtleV90IGtleSwgaW50ICpyZXQpOyBcCisJdm9pZCBraF9kZWxfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgsIGtoaW50X3QgeCk7CisKKyNkZWZpbmUgX19LSEFTSF9JTVBMKG5hbWUsIFNDT1BFLCBraGtleV90LCBraHZhbF90LCBraF9pc19tYXAsIF9faGFzaF9mdW5jLCBfX2hhc2hfZXF1YWwpIFwKKwlTQ09QRSBraF8jI25hbWUjI190ICpraF9pbml0XyMjbmFtZSh2b2lkKSB7CQkJCQkJCVwKKwkJcmV0dXJuIChraF8jI25hbWUjI190Kil4Y2FsbG9jKDEsIHNpemVvZihraF8jI25hbWUjI190KSk7CQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCVNDT1BFIHZvaWQga2hfcmVsZWFzZV8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQlmcmVlKGgtPmZsYWdzKTsJCQkJCQkJCQkJCQkJXAorCQlmcmVlKCh2b2lkICopaC0+a2V5cyk7CQkJCQkJCQkJCQlcCisJCWZyZWUoKHZvaWQgKiloLT52YWxzKTsJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQlcCisJU0NPUEUgdm9pZCBraF9kZXN0cm95XyMjbmFtZShraF8jI25hbWUjI190ICpoKQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJCQlcCisJCWlmIChoKSB7CQkJCQkJCQkJCQkJCQlcCisJCQlraF9yZWxlYXNlXyMjbmFtZShoKTsJCQkJCQkJCQkJXAorCQkJZnJlZShoKTsJCQkJCQkJCQkJCQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQlcCisJU0NPUEUgdm9pZCBraF9jbGVhcl8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQlpZiAoaCAmJiBoLT5mbGFncykgewkJCQkJCQkJCQkJXAorCQkJbWVtc2V0KGgtPmZsYWdzLCAweGFhLCBfX2FjX2ZzaXplKGgtPm5fYnVja2V0cykgKiBzaXplb2Yoa2hpbnQzMl90KSk7IFwKKwkJCWgtPnNpemUgPSBoLT5uX29jY3VwaWVkID0gMDsJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCVNDT1BFIGtoaW50X3Qga2hfZ2V0XyMjbmFtZShjb25zdCBraF8jI25hbWUjI190ICpoLCBraGtleV90IGtleSkgCVwKKwl7CQkJCQkJCQkJCQkJCQkJCQlcCisJCWlmIChoLT5uX2J1Y2tldHMpIHsJCQkJCQkJCQkJCQlcCisJCQlraGludF90IGssIGksIGxhc3QsIG1hc2ssIHN0ZXAgPSAwOyBcCisJCQltYXNrID0gaC0+bl9idWNrZXRzIC0gMTsJCQkJCQkJCQlcCisJCQlrID0gX19oYXNoX2Z1bmMoa2V5KTsgaSA9IGsgJiBtYXNrOwkJCQkJCQlcCisJCQlsYXN0ID0gaTsgXAorCQkJd2hpbGUgKCFfX2FjX2lzZW1wdHkoaC0+ZmxhZ3MsIGkpICYmIChfX2FjX2lzZGVsKGgtPmZsYWdzLCBpKSB8fCAhX19oYXNoX2VxdWFsKGgtPmtleXNbaV0sIGtleSkpKSB7IFwKKwkJCQlpID0gKGkgKyAoKytzdGVwKSkgJiBtYXNrOyBcCisJCQkJaWYgKGkgPT0gbGFzdCkgcmV0dXJuIGgtPm5fYnVja2V0czsJCQkJCQlcCisJCQl9CQkJCQkJCQkJCQkJCQkJXAorCQkJcmV0dXJuIF9fYWNfaXNlaXRoZXIoaC0+ZmxhZ3MsIGkpPyBoLT5uX2J1Y2tldHMgOiBpOwkJXAorCQl9IGVsc2UgcmV0dXJuIDA7CQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlTQ09QRSBpbnQga2hfcmVzaXplXyMjbmFtZShraF8jI25hbWUjI190ICpoLCBraGludF90IG5ld19uX2J1Y2tldHMpIFwKKwl7IC8qIFRoaXMgZnVuY3Rpb24gdXNlcyAwLjI1Km5fYnVja2V0cyBieXRlcyBvZiB3b3JraW5nIHNwYWNlIGluc3RlYWQgb2YgW3NpemVvZihrZXlfdCt2YWxfdCkrLjI1XSpuX2J1Y2tldHMuICovIFwKKwkJa2hpbnQzMl90ICpuZXdfZmxhZ3MgPSBOVUxMOwkJCQkJCQkJCQlcCisJCWtoaW50X3QgaiA9IDE7CQkJCQkJCQkJCQkJCVwKKwkJewkJCQkJCQkJCQkJCQkJCQlcCisJCQlrcm91bmR1cDMyKG5ld19uX2J1Y2tldHMpOyAJCQkJCQkJCQlcCisJCQlpZiAobmV3X25fYnVja2V0cyA8IDQpIG5ld19uX2J1Y2tldHMgPSA0OwkJCQkJXAorCQkJaWYgKGgtPnNpemUgPj0gKGtoaW50X3QpKG5ld19uX2J1Y2tldHMgKiBfX2FjX0hBU0hfVVBQRVIgKyAwLjUpKSBqID0gMDsJLyogcmVxdWVzdGVkIHNpemUgaXMgdG9vIHNtYWxsICovIFwKKwkJCWVsc2UgeyAvKiBoYXNoIHRhYmxlIHNpemUgdG8gYmUgY2hhbmdlZCAoc2hyaW5rIG9yIGV4cGFuZCk7IHJlaGFzaCAqLyBcCisJCQkJQUxMT0NfQVJSQVkobmV3X2ZsYWdzLCBfX2FjX2ZzaXplKG5ld19uX2J1Y2tldHMpKTsgXAorCQkJCWlmICghbmV3X2ZsYWdzKSByZXR1cm4gLTE7CQkJCQkJCQlcCisJCQkJbWVtc2V0KG5ld19mbGFncywgMHhhYSwgX19hY19mc2l6ZShuZXdfbl9idWNrZXRzKSAqIHNpemVvZihraGludDMyX3QpKTsgXAorCQkJCWlmIChoLT5uX2J1Y2tldHMgPCBuZXdfbl9idWNrZXRzKSB7CS8qIGV4cGFuZCAqLwkJXAorCQkJCQlSRUFMTE9DX0FSUkFZKGgtPmtleXMsIG5ld19uX2J1Y2tldHMpOyBcCisJCQkJCWlmIChraF9pc19tYXApIHsJCQkJCQkJCQlcCisJCQkJCQlSRUFMTE9DX0FSUkFZKGgtPnZhbHMsIG5ld19uX2J1Y2tldHMpOyBcCisJCQkJCX0JCQkJCQkJCQkJCQkJXAorCQkJCX0gLyogb3RoZXJ3aXNlIHNocmluayAqLwkJCQkJCQkJXAorCQkJfQkJCQkJCQkJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisJCWlmIChqKSB7IC8qIHJlaGFzaGluZyBpcyBuZWVkZWQgKi8JCQkJCQkJCVwKKwkJCWZvciAoaiA9IDA7IGogIT0gaC0+bl9idWNrZXRzOyArK2opIHsJCQkJCQlcCisJCQkJaWYgKF9fYWNfaXNlaXRoZXIoaC0+ZmxhZ3MsIGopID09IDApIHsJCQkJCVwKKwkJCQkJa2hrZXlfdCBrZXkgPSBoLT5rZXlzW2pdOwkJCQkJCQlcCisJCQkJCWtodmFsX3QgdmFsOwkJCQkJCQkJCQlcCisJCQkJCWtoaW50X3QgbmV3X21hc2s7CQkJCQkJCQkJXAorCQkJCQluZXdfbWFzayA9IG5ld19uX2J1Y2tldHMgLSAxOyAJCQkJCQlcCisJCQkJCWlmIChraF9pc19tYXApIHZhbCA9IGgtPnZhbHNbal07CQkJCQlcCisJCQkJCV9fYWNfc2V0X2lzZGVsX3RydWUoaC0+ZmxhZ3MsIGopOwkJCQkJXAorCQkJCQl3aGlsZSAoMSkgeyAvKiBraWNrLW91dCBwcm9jZXNzOyBzb3J0IG9mIGxpa2UgaW4gQ3Vja29vIGhhc2hpbmcgKi8gXAorCQkJCQkJa2hpbnRfdCBrLCBpLCBzdGVwID0gMDsgXAorCQkJCQkJayA9IF9faGFzaF9mdW5jKGtleSk7CQkJCQkJCVwKKwkJCQkJCWkgPSBrICYgbmV3X21hc2s7CQkJCQkJCQlcCisJCQkJCQl3aGlsZSAoIV9fYWNfaXNlbXB0eShuZXdfZmxhZ3MsIGkpKSBpID0gKGkgKyAoKytzdGVwKSkgJiBuZXdfbWFzazsgXAorCQkJCQkJX19hY19zZXRfaXNlbXB0eV9mYWxzZShuZXdfZmxhZ3MsIGkpOwkJCVwKKwkJCQkJCWlmIChpIDwgaC0+bl9idWNrZXRzICYmIF9fYWNfaXNlaXRoZXIoaC0+ZmxhZ3MsIGkpID09IDApIHsgLyoga2ljayBvdXQgdGhlIGV4aXN0aW5nIGVsZW1lbnQgKi8gXAorCQkJCQkJCXsga2hrZXlfdCB0bXAgPSBoLT5rZXlzW2ldOyBoLT5rZXlzW2ldID0ga2V5OyBrZXkgPSB0bXA7IH0gXAorCQkJCQkJCWlmIChraF9pc19tYXApIHsga2h2YWxfdCB0bXAgPSBoLT52YWxzW2ldOyBoLT52YWxzW2ldID0gdmFsOyB2YWwgPSB0bXA7IH0gXAorCQkJCQkJCV9fYWNfc2V0X2lzZGVsX3RydWUoaC0+ZmxhZ3MsIGkpOyAvKiBtYXJrIGl0IGFzIGRlbGV0ZWQgaW4gdGhlIG9sZCBoYXNoIHRhYmxlICovIFwKKwkJCQkJCX0gZWxzZSB7IC8qIHdyaXRlIHRoZSBlbGVtZW50IGFuZCBqdW1wIG91dCBvZiB0aGUgbG9vcCAqLyBcCisJCQkJCQkJaC0+a2V5c1tpXSA9IGtleTsJCQkJCQkJXAorCQkJCQkJCWlmIChraF9pc19tYXApIGgtPnZhbHNbaV0gPSB2YWw7CQkJXAorCQkJCQkJCWJyZWFrOwkJCQkJCQkJCQlcCisJCQkJCQl9CQkJCQkJCQkJCQkJXAorCQkJCQl9CQkJCQkJCQkJCQkJCVwKKwkJCQl9CQkJCQkJCQkJCQkJCQlcCisJCQl9CQkJCQkJCQkJCQkJCQkJXAorCQkJaWYgKGgtPm5fYnVja2V0cyA+IG5ld19uX2J1Y2tldHMpIHsgLyogc2hyaW5rIHRoZSBoYXNoIHRhYmxlICovIFwKKwkJCQlSRUFMTE9DX0FSUkFZKGgtPmtleXMsIG5ld19uX2J1Y2tldHMpOyBcCisJCQkJaWYgKGtoX2lzX21hcCkgUkVBTExPQ19BUlJBWShoLT52YWxzLCBuZXdfbl9idWNrZXRzKTsgXAorCQkJfQkJCQkJCQkJCQkJCQkJCVwKKwkJCWZyZWUoaC0+ZmxhZ3MpOyAvKiBmcmVlIHRoZSB3b3JraW5nIHNwYWNlICovCQkJCVwKKwkJCWgtPmZsYWdzID0gbmV3X2ZsYWdzOwkJCQkJCQkJCQlcCisJCQloLT5uX2J1Y2tldHMgPSBuZXdfbl9idWNrZXRzOwkJCQkJCQkJXAorCQkJaC0+bl9vY2N1cGllZCA9IGgtPnNpemU7CQkJCQkJCQkJXAorCQkJaC0+dXBwZXJfYm91bmQgPSAoa2hpbnRfdCkoaC0+bl9idWNrZXRzICogX19hY19IQVNIX1VQUEVSICsgMC41KTsgXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKwkJcmV0dXJuIDA7CQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCVNDT1BFIGtoaW50X3Qga2hfcHV0XyMjbmFtZShraF8jI25hbWUjI190ICpoLCBraGtleV90IGtleSwgaW50ICpyZXQpIFwKKwl7CQkJCQkJCQkJCQkJCQkJCQlcCisJCWtoaW50X3QgeDsJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKGgtPm5fb2NjdXBpZWQgPj0gaC0+dXBwZXJfYm91bmQpIHsgLyogdXBkYXRlIHRoZSBoYXNoIHRhYmxlICovIFwKKwkJCWlmIChoLT5uX2J1Y2tldHMgPiAoaC0+c2l6ZTw8MSkpIHsJCQkJCQkJXAorCQkJCWlmIChraF9yZXNpemVfIyNuYW1lKGgsIGgtPm5fYnVja2V0cyAtIDEpIDwgMCkgeyAvKiBjbGVhciAiZGVsZXRlZCIgZWxlbWVudHMgKi8gXAorCQkJCQkqcmV0ID0gLTE7IHJldHVybiBoLT5uX2J1Y2tldHM7CQkJCQkJXAorCQkJCX0JCQkJCQkJCQkJCQkJCVwKKwkJCX0gZWxzZSBpZiAoa2hfcmVzaXplXyMjbmFtZShoLCBoLT5uX2J1Y2tldHMgKyAxKSA8IDApIHsgLyogZXhwYW5kIHRoZSBoYXNoIHRhYmxlICovIFwKKwkJCQkqcmV0ID0gLTE7IHJldHVybiBoLT5uX2J1Y2tldHM7CQkJCQkJCVwKKwkJCX0JCQkJCQkJCQkJCQkJCQlcCisJCX0gLyogVE9ETzogdG8gaW1wbGVtZW50IGF1dG9tYXRpY2FsbHkgc2hyaW5raW5nOyByZXNpemUoKSBhbHJlYWR5IHN1cHBvcnQgc2hyaW5raW5nICovIFwKKwkJewkJCQkJCQkJCQkJCQkJCQlcCisJCQlraGludF90IGssIGksIHNpdGUsIGxhc3QsIG1hc2sgPSBoLT5uX2J1Y2tldHMgLSAxLCBzdGVwID0gMDsgXAorCQkJeCA9IHNpdGUgPSBoLT5uX2J1Y2tldHM7IGsgPSBfX2hhc2hfZnVuYyhrZXkpOyBpID0gayAmIG1hc2s7IFwKKwkJCWlmIChfX2FjX2lzZW1wdHkoaC0+ZmxhZ3MsIGkpKSB4ID0gaTsgLyogZm9yIHNwZWVkIHVwICovCVwKKwkJCWVsc2UgewkJCQkJCQkJCQkJCQkJXAorCQkJCWxhc3QgPSBpOyBcCisJCQkJd2hpbGUgKCFfX2FjX2lzZW1wdHkoaC0+ZmxhZ3MsIGkpICYmIChfX2FjX2lzZGVsKGgtPmZsYWdzLCBpKSB8fCAhX19oYXNoX2VxdWFsKGgtPmtleXNbaV0sIGtleSkpKSB7IFwKKwkJCQkJaWYgKF9fYWNfaXNkZWwoaC0+ZmxhZ3MsIGkpKSBzaXRlID0gaTsJCQkJXAorCQkJCQlpID0gKGkgKyAoKytzdGVwKSkgJiBtYXNrOyBcCisJCQkJCWlmIChpID09IGxhc3QpIHsgeCA9IHNpdGU7IGJyZWFrOyB9CQkJCQlcCisJCQkJfQkJCQkJCQkJCQkJCQkJXAorCQkJCWlmICh4ID09IGgtPm5fYnVja2V0cykgewkJCQkJCQkJXAorCQkJCQlpZiAoX19hY19pc2VtcHR5KGgtPmZsYWdzLCBpKSAmJiBzaXRlICE9IGgtPm5fYnVja2V0cykgeCA9IHNpdGU7IFwKKwkJCQkJZWxzZSB4ID0gaTsJCQkJCQkJCQkJCVwKKwkJCQl9CQkJCQkJCQkJCQkJCQlcCisJCQl9CQkJCQkJCQkJCQkJCQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKF9fYWNfaXNlbXB0eShoLT5mbGFncywgeCkpIHsgLyogbm90IHByZXNlbnQgYXQgYWxsICovCQlcCisJCQloLT5rZXlzW3hdID0ga2V5OwkJCQkJCQkJCQkJXAorCQkJX19hY19zZXRfaXNib3RoX2ZhbHNlKGgtPmZsYWdzLCB4KTsJCQkJCQkJXAorCQkJKytoLT5zaXplOyArK2gtPm5fb2NjdXBpZWQ7CQkJCQkJCQkJXAorCQkJKnJldCA9IDE7CQkJCQkJCQkJCQkJCVwKKwkJfSBlbHNlIGlmIChfX2FjX2lzZGVsKGgtPmZsYWdzLCB4KSkgeyAvKiBkZWxldGVkICovCQkJCVwKKwkJCWgtPmtleXNbeF0gPSBrZXk7CQkJCQkJCQkJCQlcCisJCQlfX2FjX3NldF9pc2JvdGhfZmFsc2UoaC0+ZmxhZ3MsIHgpOwkJCQkJCQlcCisJCQkrK2gtPnNpemU7CQkJCQkJCQkJCQkJCVwKKwkJCSpyZXQgPSAyOwkJCQkJCQkJCQkJCQlcCisJCX0gZWxzZSAqcmV0ID0gMDsgLyogRG9uJ3QgdG91Y2ggaC0+a2V5c1t4XSBpZiBwcmVzZW50IGFuZCBub3QgZGVsZXRlZCAqLyBcCisJCXJldHVybiB4OwkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlTQ09QRSB2b2lkIGtoX2RlbF8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCwga2hpbnRfdCB4KQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQlpZiAoeCAhPSBoLT5uX2J1Y2tldHMgJiYgIV9fYWNfaXNlaXRoZXIoaC0+ZmxhZ3MsIHgpKSB7CQkJXAorCQkJX19hY19zZXRfaXNkZWxfdHJ1ZShoLT5mbGFncywgeCk7CQkJCQkJCVwKKwkJCS0taC0+c2l6ZTsJCQkJCQkJCQkJCQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKwl9CisKKyNkZWZpbmUgS0hBU0hfREVDTEFSRShuYW1lLCBraGtleV90LCBraHZhbF90KQkJIAkJCQkJXAorCV9fS0hBU0hfVFlQRShuYW1lLCBraGtleV90LCBraHZhbF90KSAJCQkJCQkJCVwKKwlfX0tIQVNIX1BST1RPVFlQRVMobmFtZSwga2hrZXlfdCwga2h2YWxfdCkKKworI2RlZmluZSBLSEFTSF9JTklUMihuYW1lLCBTQ09QRSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKSBcCisJX19LSEFTSF9UWVBFKG5hbWUsIGtoa2V5X3QsIGtodmFsX3QpIAkJCQkJCQkJXAorCV9fS0hBU0hfSU1QTChuYW1lLCBTQ09QRSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKQorCisjZGVmaW5lIEtIQVNIX0lOSVQobmFtZSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKSBcCisJS0hBU0hfSU5JVDIobmFtZSwgTUFZQkVfVU5VU0VEIHN0YXRpYyBpbmxpbmUsIGtoa2V5X3QsIGtodmFsX3QsIGtoX2lzX21hcCwgX19oYXNoX2Z1bmMsIF9faGFzaF9lcXVhbCkKKworLyogT3RoZXIgY29udmVuaWVudCBtYWNyb3MuLi4gKi8KKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIFRlc3Qgd2hldGhlciBhIGJ1Y2tldCBjb250YWlucyBkYXRhLgorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcGFyYW0gIHggICAgIEl0ZXJhdG9yIHRvIHRoZSBidWNrZXQgW2toaW50X3RdCisgIEByZXR1cm4gICAgICAgMSBpZiBjb250YWluaW5nIGRhdGE7IDAgb3RoZXJ3aXNlIFtpbnRdCisgKi8KKyNkZWZpbmUga2hfZXhpc3QoaCwgeCkgKCFfX2FjX2lzZWl0aGVyKChoKS0+ZmxhZ3MsICh4KSkpCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBHZXQga2V5IGdpdmVuIGFuIGl0ZXJhdG9yCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEBwYXJhbSAgeCAgICAgSXRlcmF0b3IgdG8gdGhlIGJ1Y2tldCBba2hpbnRfdF0KKyAgQHJldHVybiAgICAgICBLZXkgW3R5cGUgb2Yga2V5c10KKyAqLworI2RlZmluZSBraF9rZXkoaCwgeCkgKChoKS0+a2V5c1t4XSkKKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEdldCB2YWx1ZSBnaXZlbiBhbiBpdGVyYXRvcgorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcGFyYW0gIHggICAgIEl0ZXJhdG9yIHRvIHRoZSBidWNrZXQgW2toaW50X3RdCisgIEByZXR1cm4gICAgICAgVmFsdWUgW3R5cGUgb2YgdmFsdWVzXQorICBAZGlzY3Vzc2lvbiAgIEZvciBoYXNoIHNldHMsIGNhbGxpbmcgdGhpcyByZXN1bHRzIGluIHNlZ2ZhdWx0LgorICovCisjZGVmaW5lIGtoX3ZhbChoLCB4KSAoKGgpLT52YWxzW3hdKQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgQWxpYXMgb2Yga2hfdmFsKCkKKyAqLworI2RlZmluZSBraF92YWx1ZShoLCB4KSAoKGgpLT52YWxzW3hdKQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgR2V0IHRoZSBzdGFydCBpdGVyYXRvcgorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcmV0dXJuICAgICAgIFRoZSBzdGFydCBpdGVyYXRvciBba2hpbnRfdF0KKyAqLworI2RlZmluZSBraF9iZWdpbihoKSAoa2hpbnRfdCkoMCkKKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEdldCB0aGUgZW5kIGl0ZXJhdG9yCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEByZXR1cm4gICAgICAgVGhlIGVuZCBpdGVyYXRvciBba2hpbnRfdF0KKyAqLworI2RlZmluZSBraF9lbmQoaCkgKChoKS0+bl9idWNrZXRzKQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgR2V0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGhhc2ggdGFibGUKKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHJldHVybiAgICAgICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGhhc2ggdGFibGUgW2toaW50X3RdCisgKi8KKyNkZWZpbmUga2hfc2l6ZShoKSAoKGgpLT5zaXplKQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgR2V0IHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZQorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcmV0dXJuICAgICAgIE51bWJlciBvZiBidWNrZXRzIGluIHRoZSBoYXNoIHRhYmxlIFtraGludF90XQorICovCisjZGVmaW5lIGtoX25fYnVja2V0cyhoKSAoKGgpLT5uX2J1Y2tldHMpCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBJdGVyYXRlIG92ZXIgdGhlIGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGUKKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHBhcmFtICBrdmFyICBWYXJpYWJsZSB0byB3aGljaCBrZXkgd2lsbCBiZSBhc3NpZ25lZAorICBAcGFyYW0gIHZ2YXIgIFZhcmlhYmxlIHRvIHdoaWNoIHZhbHVlIHdpbGwgYmUgYXNzaWduZWQKKyAgQHBhcmFtICBjb2RlICBCbG9jayBvZiBjb2RlIHRvIGV4ZWN1dGUKKyAqLworI2RlZmluZSBraF9mb3JlYWNoKGgsIGt2YXIsIHZ2YXIsIGNvZGUpIHsga2hpbnRfdCBfX2k7CQlcCisJZm9yIChfX2kgPSBraF9iZWdpbihoKTsgX19pICE9IGtoX2VuZChoKTsgKytfX2kpIHsJCVwKKwkJaWYgKCFraF9leGlzdChoLF9faSkpIGNvbnRpbnVlOwkJCQkJCVwKKwkJKGt2YXIpID0ga2hfa2V5KGgsX19pKTsJCQkJCQkJCVwKKwkJKHZ2YXIpID0ga2hfdmFsKGgsX19pKTsJCQkJCQkJCVwKKwkJY29kZTsJCQkJCQkJCQkJCQlcCisJfSB9CisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBJdGVyYXRlIG92ZXIgdGhlIHZhbHVlcyBpbiB0aGUgaGFzaCB0YWJsZQorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcGFyYW0gIHZ2YXIgIFZhcmlhYmxlIHRvIHdoaWNoIHZhbHVlIHdpbGwgYmUgYXNzaWduZWQKKyAgQHBhcmFtICBjb2RlICBCbG9jayBvZiBjb2RlIHRvIGV4ZWN1dGUKKyAqLworI2RlZmluZSBraF9mb3JlYWNoX3ZhbHVlKGgsIHZ2YXIsIGNvZGUpIHsga2hpbnRfdCBfX2k7CQlcCisJZm9yIChfX2kgPSBraF9iZWdpbihoKTsgX19pICE9IGtoX2VuZChoKTsgKytfX2kpIHsJCVwKKwkJaWYgKCFraF9leGlzdChoLF9faSkpIGNvbnRpbnVlOwkJCQkJCVwKKwkJKHZ2YXIpID0ga2hfdmFsKGgsX19pKTsJCQkJCQkJCVwKKwkJY29kZTsJCQkJCQkJCQkJCQlcCisJfSB9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9pZGhhc2hfYnlfdmFsdWUoc3RydWN0IG9iamVjdF9pZCBvaWQpCit7CisJcmV0dXJuIG9pZGhhc2goJm9pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9pZGVxX2J5X3ZhbHVlKHN0cnVjdCBvYmplY3RfaWQgYSwgc3RydWN0IG9iamVjdF9pZCBiKQoreworCXJldHVybiBvaWRlcSgmYSwgJmIpOworfQorCitLSEFTSF9JTklUKG9pZF9zZXQsIHN0cnVjdCBvYmplY3RfaWQsIGludCwgMCwgb2lkaGFzaF9ieV92YWx1ZSwgb2lkZXFfYnlfdmFsdWUpCisKK0tIQVNIX0lOSVQob2lkX21hcCwgc3RydWN0IG9iamVjdF9pZCwgdm9pZCAqLCAxLCBvaWRoYXNoX2J5X3ZhbHVlLCBvaWRlcV9ieV92YWx1ZSkKKworS0hBU0hfSU5JVChvaWRfcG9zLCBzdHJ1Y3Qgb2JqZWN0X2lkLCBpbnQsIDEsIG9pZGhhc2hfYnlfdmFsdWUsIG9pZGVxX2J5X3ZhbHVlKQorCisjZW5kaWYgLyogX19BQ19LSEFTSF9IICovCmRpZmYgLS1naXQgYS9rd3NldC5jIGIva3dzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQzOWUwCi0tLSAvZGV2L251bGwKKysrIGIva3dzZXQuYwpAQCAtMCwwICsxLDc3NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBjb3BpZWQgZnJvbSBjb21taXQgZTdhYzcxM2ReIGluIHRoZSBHTlUgZ3JlcCBnaXQKKyAqIHJlcG9zaXRvcnkuIEEgZmV3IHNtYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gYWRhcHQgdGhlIGNvZGUgdG8KKyAqIEdpdC4KKyAqLworCisvKiBrd3NldC5jIC0gc2VhcmNoIGZvciBhbnkgb2YgYSBzZXQgb2Yga2V5d29yZHMuCisgICBDb3B5cmlnaHQgMTk4OSwgMTk5OCwgMjAwMCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICovCisKKy8qIFdyaXR0ZW4gQXVndXN0IDE5ODkgYnkgTWlrZSBIYWVydGVsLgorICAgVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCAoRW1haWwpIGF0IHRoZSBhZGRyZXNzIG1pa2VAYWkubWl0LmVkdSwKKyAgIG9yIChVUyBtYWlsKSBhcyBNaWtlIEhhZXJ0ZWwgYy9vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gKi8KKworLyogVGhlIGFsZ29yaXRobSBpbXBsZW1lbnRlZCBieSB0aGVzZSByb3V0aW5lcyBiZWFycyBhIHN0YXJ0bGluZyByZXNlbWJsYW5jZQorICAgdG8gb25lIGRpc2NvdmVyZWQgYnkgQmVhdGUgQ29tbWVudHotV2FsdGVyLCBhbHRob3VnaCBpdCBpcyBub3QgaWRlbnRpY2FsLgorICAgU2VlICJBIFN0cmluZyBNYXRjaGluZyBBbGdvcml0aG0gRmFzdCBvbiB0aGUgQXZlcmFnZSwiIFRlY2huaWNhbCBSZXBvcnQsCisgICBJQk0tR2VybWFueSwgU2NpZW50aWZpYyBDZW50ZXIgSGVpZGVsYmVyZywgVGllcmdhcnRlbnN0cmFzc2UgMTUsIEQtNjkwMAorICAgSGVpZGVsYmVyZywgR2VybWFueS4gIFNlZSBhbHNvIEFobywgQS5WLiwgYW5kIE0uIENvcmFzaWNrLCAiRWZmaWNpZW50CisgICBTdHJpbmcgTWF0Y2hpbmc6ICBBbiBBaWQgdG8gQmlibGlvZ3JhcGhpYyBTZWFyY2gsIiBDQUNNIEp1bmUgMTk3NSwKKyAgIFZvbC4gMTgsIE5vLiA2LCB3aGljaCBkZXNjcmliZXMgdGhlIGZhaWx1cmUgZnVuY3Rpb24gdXNlZCBiZWxvdy4gKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpbmNsdWRlICJrd3NldC5oIgorI2luY2x1ZGUgImNvbXBhdC9vYnN0YWNrLmgiCisKKyNkZWZpbmUgTkNIQVIgKFVDSEFSX01BWCArIDEpCisvKiBhZGFwdGVyIGZvciBgeG1hbGxvYygpYCwgd2hpY2ggdGFrZXMgYHNpemVfdGAsIG5vdCBgbG9uZ2AgKi8KK3N0YXRpYyB2b2lkICpvYnN0YWNrX2NodW5rX2FsbG9jKGxvbmcgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA8IDApCisJCUJVRygiQ2Fubm90IGFsbG9jYXRlIGEgbmVnYXRpdmUgYW1vdW50OiAlbGQiLCBzaXplKTsKKwlyZXR1cm4geG1hbGxvYyhzaXplKTsKK30KKyNkZWZpbmUgb2JzdGFja19jaHVua19mcmVlIGZyZWUKKworI2RlZmluZSBVKGMpICgodW5zaWduZWQgY2hhcikgKGMpKQorCisvKiBCYWxhbmNlZCB0cmVlIG9mIGVkZ2VzIGFuZCBsYWJlbHMgbGVhdmluZyBhIGdpdmVuIHRyaWUgbm9kZS4gKi8KK3N0cnVjdCB0cmVlCit7CisgIHN0cnVjdCB0cmVlICpsbGluazsJCS8qIExlZnQgbGluazsgTVVTVCBiZSBmaXJzdCBmaWVsZC4gKi8KKyAgc3RydWN0IHRyZWUgKnJsaW5rOwkJLyogUmlnaHQgbGluayAodG8gbGFyZ2VyIGxhYmVscykuICovCisgIHN0cnVjdCB0cmllICp0cmllOwkJLyogVHJpZSBub2RlIHBvaW50ZWQgdG8gYnkgdGhpcyBlZGdlLiAqLworICB1bnNpZ25lZCBjaGFyIGxhYmVsOwkJLyogTGFiZWwgb24gdGhpcyBlZGdlLiAqLworICBjaGFyIGJhbGFuY2U7CQkJLyogRGlmZmVyZW5jZSBpbiBkZXB0aHMgb2Ygc3VidHJlZXMuICovCit9OworCisvKiBOb2RlIG9mIGEgdHJpZSByZXByZXNlbnRpbmcgYSBzZXQgb2YgcmV2ZXJzZWQga2V5d29yZHMuICovCitzdHJ1Y3QgdHJpZQoreworICB1bnNpZ25lZCBpbnQgYWNjZXB0aW5nOwkvKiBXb3JkIGluZGV4IG9mIGFjY2VwdGVkIHdvcmQsIG9yIHplcm8uICovCisgIHN0cnVjdCB0cmVlICpsaW5rczsJCS8qIFRyZWUgb2YgZWRnZXMgbGVhdmluZyB0aGlzIG5vZGUuICovCisgIHN0cnVjdCB0cmllICpwYXJlbnQ7CQkvKiBQYXJlbnQgb2YgdGhpcyBub2RlLiAqLworICBzdHJ1Y3QgdHJpZSAqbmV4dDsJCS8qIExpc3Qgb2YgYWxsIHRyaWUgbm9kZXMgaW4gbGV2ZWwgb3JkZXIuICovCisgIHN0cnVjdCB0cmllICpmYWlsOwkJLyogQWhvLUNvcmFzaWNrIGZhaWx1cmUgZnVuY3Rpb24uICovCisgIGludCBkZXB0aDsJCQkvKiBEZXB0aCBvZiB0aGlzIG5vZGUgZnJvbSB0aGUgcm9vdC4gKi8KKyAgaW50IHNoaWZ0OwkJCS8qIFNoaWZ0IGZ1bmN0aW9uIGZvciBzZWFyY2ggZmFpbHVyZXMuICovCisgIGludCBtYXhzaGlmdDsJCQkvKiBNYXggc2hpZnQgb2Ygc2VsZiBhbmQgZGVzY2VuZGFudHMuICovCit9OworCisvKiBTdHJ1Y3R1cmUgcmV0dXJuZWQgb3BhcXVlbHkgdG8gdGhlIGNhbGxlciwgY29udGFpbmluZyBldmVyeXRoaW5nLiAqLworc3RydWN0IGt3c2V0Cit7CisgIHN0cnVjdCBvYnN0YWNrIG9ic3RhY2s7CS8qIE9ic3RhY2sgZm9yIG5vZGUgYWxsb2NhdGlvbi4gKi8KKyAgaW50IHdvcmRzOwkJCS8qIE51bWJlciBvZiB3b3JkcyBpbiB0aGUgdHJpZS4gKi8KKyAgc3RydWN0IHRyaWUgKnRyaWU7CQkvKiBUaGUgdHJpZSBpdHNlbGYuICovCisgIGludCBtaW5kOwkJCS8qIE1pbmltdW0gZGVwdGggb2YgYW4gYWNjZXB0aW5nIG5vZGUuICovCisgIGludCBtYXhkOwkJCS8qIE1heGltdW0gZGVwdGggb2YgYW55IG5vZGUuICovCisgIHVuc2lnbmVkIGNoYXIgZGVsdGFbTkNIQVJdOwkvKiBEZWx0YSB0YWJsZSBmb3IgcmFwaWQgc2VhcmNoLiAqLworICBzdHJ1Y3QgdHJpZSAqbmV4dFtOQ0hBUl07CS8qIFRhYmxlIG9mIGNoaWxkcmVuIG9mIHRoZSByb290LiAqLworICBjaGFyICp0YXJnZXQ7CQkJLyogVGFyZ2V0IHN0cmluZyBpZiB0aGVyZSdzIG9ubHkgb25lLiAqLworICBpbnQgbWluZDI7CQkJLyogVXNlZCBpbiBCb3llci1Nb29yZSBzZWFyY2ggZm9yIG9uZSBzdHJpbmcuICovCisgIHVuc2lnbmVkIGNoYXIgY29uc3QgKnRyYW5zOyAgLyogQ2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRhYmxlLiAqLworfTsKKworLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBrZXl3b3JkIHNldCBvYmplY3QsIHJldHVybmluZyBhbiBvcGFxdWUKKyAgIHBvaW50ZXIgdG8gaXQuICBSZXR1cm4gTlVMTCBpZiBtZW1vcnkgaXMgbm90IGF2YWlsYWJsZS4gKi8KK2t3c2V0X3QKK2t3c2FsbG9jICh1bnNpZ25lZCBjaGFyIGNvbnN0ICp0cmFucykKK3sKKyAgc3RydWN0IGt3c2V0ICprd3NldDsKKworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgKikgeG1hbGxvYyhzaXplb2YgKHN0cnVjdCBrd3NldCkpOworCisgIG9ic3RhY2tfaW5pdCgma3dzZXQtPm9ic3RhY2spOworICBrd3NldC0+d29yZHMgPSAwOworICBrd3NldC0+dHJpZQorICAgID0gKHN0cnVjdCB0cmllICopIG9ic3RhY2tfYWxsb2MoJmt3c2V0LT5vYnN0YWNrLCBzaXplb2YgKHN0cnVjdCB0cmllKSk7CisgIGlmICgha3dzZXQtPnRyaWUpCisgICAgeworICAgICAga3dzZnJlZSgoa3dzZXRfdCkga3dzZXQpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBrd3NldC0+dHJpZS0+YWNjZXB0aW5nID0gMDsKKyAga3dzZXQtPnRyaWUtPmxpbmtzID0gTlVMTDsKKyAga3dzZXQtPnRyaWUtPnBhcmVudCA9IE5VTEw7CisgIGt3c2V0LT50cmllLT5uZXh0ID0gTlVMTDsKKyAga3dzZXQtPnRyaWUtPmZhaWwgPSBOVUxMOworICBrd3NldC0+dHJpZS0+ZGVwdGggPSAwOworICBrd3NldC0+dHJpZS0+c2hpZnQgPSAwOworICBrd3NldC0+bWluZCA9IElOVF9NQVg7CisgIGt3c2V0LT5tYXhkID0gLTE7CisgIGt3c2V0LT50YXJnZXQgPSBOVUxMOworICBrd3NldC0+dHJhbnMgPSB0cmFuczsKKworICByZXR1cm4gKGt3c2V0X3QpIGt3c2V0OworfQorCisvKiBUaGlzIHVwcGVyIGJvdW5kIGlzIHZhbGlkIGZvciBDSEFSX0JJVCA+PSA0IGFuZAorICAgZXhhY3QgZm9yIENIQVJfQklUIGluIHsgNC4uMTEsIDEzLCAxNSwgMTcsIDE5IH0uICovCisjZGVmaW5lIERFUFRIX1NJWkUgKENIQVJfQklUICsgQ0hBUl9CSVQvMikKKworLyogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBrZXl3b3JkIHNldC4gIFJldHVybiBOVUxMCisgICBmb3Igc3VjY2VzcywgYW4gZXJyb3IgbWVzc2FnZSBvdGhlcndpc2UuICovCitjb25zdCBjaGFyICoKK2t3c2luY3IgKGt3c2V0X3Qga3dzLCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3Qga3dzZXQgKmt3c2V0OworICByZWdpc3RlciBzdHJ1Y3QgdHJpZSAqdHJpZTsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBsYWJlbDsKKyAgcmVnaXN0ZXIgc3RydWN0IHRyZWUgKmxpbms7CisgIHJlZ2lzdGVyIGludCBkZXB0aDsKKyAgc3RydWN0IHRyZWUgKmxpbmtzW0RFUFRIX1NJWkVdOworICBlbnVtIHsgTCwgUiB9IGRpcnNbREVQVEhfU0laRV07CisgIHN0cnVjdCB0cmVlICp0LCAqciwgKmwsICpybCwgKmxyOworCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCAqKSBrd3M7CisgIHRyaWUgPSBrd3NldC0+dHJpZTsKKyAgdGV4dCArPSBsZW47CisKKyAgLyogRGVzY2VuZCB0aGUgdHJpZSAoYnVpbHQgb2YgcmV2ZXJzZWQga2V5d29yZHMpIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIsCisgICAgIGluc3RhbGxpbmcgbmV3IG5vZGVzIHdoZW4gbmVjZXNzYXJ5LiAqLworICB3aGlsZSAobGVuLS0pCisgICAgeworICAgICAgbGFiZWwgPSBrd3NldC0+dHJhbnMgPyBrd3NldC0+dHJhbnNbVSgqLS10ZXh0KV0gOiAqLS10ZXh0OworCisgICAgICAvKiBEZXNjZW5kIHRoZSB0cmVlIG9mIG91dGdvaW5nIGxpbmtzIGZvciB0aGlzIHRyaWUgbm9kZSwKKwkgbG9va2luZyBmb3IgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGFuZCBrZWVwaW5nIHRyYWNrCisJIG9mIHRoZSBwYXRoIGZvbGxvd2VkLiAqLworICAgICAgbGluayA9IHRyaWUtPmxpbmtzOworICAgICAgbGlua3NbMF0gPSAoc3RydWN0IHRyZWUgKikgJnRyaWUtPmxpbmtzOworICAgICAgZGlyc1swXSA9IEw7CisgICAgICBkZXB0aCA9IDE7CisKKyAgICAgIHdoaWxlIChsaW5rICYmIGxhYmVsICE9IGxpbmstPmxhYmVsKQorCXsKKwkgIGxpbmtzW2RlcHRoXSA9IGxpbms7CisJICBpZiAobGFiZWwgPCBsaW5rLT5sYWJlbCkKKwkgICAgZGlyc1tkZXB0aCsrXSA9IEwsIGxpbmsgPSBsaW5rLT5sbGluazsKKwkgIGVsc2UKKwkgICAgZGlyc1tkZXB0aCsrXSA9IFIsIGxpbmsgPSBsaW5rLT5ybGluazsKKwl9CisKKyAgICAgIC8qIFRoZSBjdXJyZW50IGNoYXJhY3RlciBkb2Vzbid0IGhhdmUgYW4gb3V0Z29pbmcgbGluayBhdAorCSB0aGlzIHRyaWUgbm9kZSwgc28gYnVpbGQgYSBuZXcgdHJpZSBub2RlIGFuZCBpbnN0YWxsCisJIGEgbGluayBpbiB0aGUgY3VycmVudCB0cmllIG5vZGUncyB0cmVlLiAqLworICAgICAgaWYgKCFsaW5rKQorCXsKKwkgIGxpbmsgPSAoc3RydWN0IHRyZWUgKikgb2JzdGFja19hbGxvYygma3dzZXQtPm9ic3RhY2ssCisJCQkJCSAgICAgICBzaXplb2YgKHN0cnVjdCB0cmVlKSk7CisJICBpZiAoIWxpbmspCisJICAgIHJldHVybiAibWVtb3J5IGV4aGF1c3RlZCI7CisJICBsaW5rLT5sbGluayA9IE5VTEw7CisJICBsaW5rLT5ybGluayA9IE5VTEw7CisJICBsaW5rLT50cmllID0gKHN0cnVjdCB0cmllICopIG9ic3RhY2tfYWxsb2MoJmt3c2V0LT5vYnN0YWNrLAorCQkJCQkJICAgICBzaXplb2YgKHN0cnVjdCB0cmllKSk7CisJICBpZiAoIWxpbmstPnRyaWUpCisJICAgIHsKKwkgICAgICBvYnN0YWNrX2ZyZWUoJmt3c2V0LT5vYnN0YWNrLCBsaW5rKTsKKwkgICAgICByZXR1cm4gIm1lbW9yeSBleGhhdXN0ZWQiOworCSAgICB9CisJICBsaW5rLT50cmllLT5hY2NlcHRpbmcgPSAwOworCSAgbGluay0+dHJpZS0+bGlua3MgPSBOVUxMOworCSAgbGluay0+dHJpZS0+cGFyZW50ID0gdHJpZTsKKwkgIGxpbmstPnRyaWUtPm5leHQgPSBOVUxMOworCSAgbGluay0+dHJpZS0+ZmFpbCA9IE5VTEw7CisJICBsaW5rLT50cmllLT5kZXB0aCA9IHRyaWUtPmRlcHRoICsgMTsKKwkgIGxpbmstPnRyaWUtPnNoaWZ0ID0gMDsKKwkgIGxpbmstPmxhYmVsID0gbGFiZWw7CisJICBsaW5rLT5iYWxhbmNlID0gMDsKKworCSAgLyogSW5zdGFsbCB0aGUgbmV3IHRyZWUgbm9kZSBpbiBpdHMgcGFyZW50LiAqLworCSAgaWYgKGRpcnNbLS1kZXB0aF0gPT0gTCkKKwkgICAgbGlua3NbZGVwdGhdLT5sbGluayA9IGxpbms7CisJICBlbHNlCisJICAgIGxpbmtzW2RlcHRoXS0+cmxpbmsgPSBsaW5rOworCisJICAvKiBCYWNrIHVwIHRoZSB0cmVlIGZpeGluZyB0aGUgYmFsYW5jZSBmbGFncy4gKi8KKwkgIHdoaWxlIChkZXB0aCAmJiAhbGlua3NbZGVwdGhdLT5iYWxhbmNlKQorCSAgICB7CisJICAgICAgaWYgKGRpcnNbZGVwdGhdID09IEwpCisJCS0tbGlua3NbZGVwdGhdLT5iYWxhbmNlOworCSAgICAgIGVsc2UKKwkJKytsaW5rc1tkZXB0aF0tPmJhbGFuY2U7CisJICAgICAgLS1kZXB0aDsKKwkgICAgfQorCisJICAvKiBSZWJhbGFuY2UgdGhlIHRyZWUgYnkgcG9pbnRlciByb3RhdGlvbnMgaWYgbmVjZXNzYXJ5LiAqLworCSAgaWYgKGRlcHRoICYmICgoZGlyc1tkZXB0aF0gPT0gTCAmJiAtLWxpbmtzW2RlcHRoXS0+YmFsYW5jZSkKKwkJCXx8IChkaXJzW2RlcHRoXSA9PSBSICYmICsrbGlua3NbZGVwdGhdLT5iYWxhbmNlKSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGxpbmtzW2RlcHRoXS0+YmFsYW5jZSkKKwkJeworCQljYXNlIChjaGFyKSAtMjoKKwkJICBzd2l0Y2ggKGRpcnNbZGVwdGggKyAxXSkKKwkJICAgIHsKKwkJICAgIGNhc2UgTDoKKwkJICAgICAgciA9IGxpbmtzW2RlcHRoXSwgdCA9IHItPmxsaW5rLCBybCA9IHQtPnJsaW5rOworCQkgICAgICB0LT5ybGluayA9IHIsIHItPmxsaW5rID0gcmw7CisJCSAgICAgIHQtPmJhbGFuY2UgPSByLT5iYWxhbmNlID0gMDsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlIFI6CisJCSAgICAgIHIgPSBsaW5rc1tkZXB0aF0sIGwgPSByLT5sbGluaywgdCA9IGwtPnJsaW5rOworCQkgICAgICBybCA9IHQtPnJsaW5rLCBsciA9IHQtPmxsaW5rOworCQkgICAgICB0LT5sbGluayA9IGwsIGwtPnJsaW5rID0gbHIsIHQtPnJsaW5rID0gciwgci0+bGxpbmsgPSBybDsKKwkJICAgICAgbC0+YmFsYW5jZSA9IHQtPmJhbGFuY2UgIT0gMSA/IDAgOiAtMTsKKwkJICAgICAgci0+YmFsYW5jZSA9IHQtPmJhbGFuY2UgIT0gKGNoYXIpIC0xID8gMCA6IDE7CisJCSAgICAgIHQtPmJhbGFuY2UgPSAwOworCQkgICAgICBicmVhazsKKwkJICAgIGRlZmF1bHQ6CisJCSAgICAgIGFib3J0ICgpOworCQkgICAgfQorCQkgIGJyZWFrOworCQljYXNlIDI6CisJCSAgc3dpdGNoIChkaXJzW2RlcHRoICsgMV0pCisJCSAgICB7CisJCSAgICBjYXNlIFI6CisJCSAgICAgIGwgPSBsaW5rc1tkZXB0aF0sIHQgPSBsLT5ybGluaywgbHIgPSB0LT5sbGluazsKKwkJICAgICAgdC0+bGxpbmsgPSBsLCBsLT5ybGluayA9IGxyOworCQkgICAgICB0LT5iYWxhbmNlID0gbC0+YmFsYW5jZSA9IDA7CisJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSBMOgorCQkgICAgICBsID0gbGlua3NbZGVwdGhdLCByID0gbC0+cmxpbmssIHQgPSByLT5sbGluazsKKwkJICAgICAgbHIgPSB0LT5sbGluaywgcmwgPSB0LT5ybGluazsKKwkJICAgICAgdC0+bGxpbmsgPSBsLCBsLT5ybGluayA9IGxyLCB0LT5ybGluayA9IHIsIHItPmxsaW5rID0gcmw7CisJCSAgICAgIGwtPmJhbGFuY2UgPSB0LT5iYWxhbmNlICE9IDEgPyAwIDogLTE7CisJCSAgICAgIHItPmJhbGFuY2UgPSB0LT5iYWxhbmNlICE9IChjaGFyKSAtMSA/IDAgOiAxOworCQkgICAgICB0LT5iYWxhbmNlID0gMDsKKwkJICAgICAgYnJlYWs7CisJCSAgICBkZWZhdWx0OgorCQkgICAgICBhYm9ydCAoKTsKKwkJICAgIH0KKwkJICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICBhYm9ydCAoKTsKKwkJfQorCisJICAgICAgaWYgKGRpcnNbZGVwdGggLSAxXSA9PSBMKQorCQlsaW5rc1tkZXB0aCAtIDFdLT5sbGluayA9IHQ7CisJICAgICAgZWxzZQorCQlsaW5rc1tkZXB0aCAtIDFdLT5ybGluayA9IHQ7CisJICAgIH0KKwl9CisKKyAgICAgIHRyaWUgPSBsaW5rLT50cmllOworICAgIH0KKworICAvKiBNYXJrIHRoZSBub2RlIHdlIGZpbmFsbHkgcmVhY2hlZCBhcyBhY2NlcHRpbmcsIGVuY29kaW5nIHRoZQorICAgICBpbmRleCBudW1iZXIgb2YgdGhpcyB3b3JkIGluIHRoZSBrZXl3b3JkIHNldCBzbyBmYXIuICovCisgIGlmICghdHJpZS0+YWNjZXB0aW5nKQorICAgIHRyaWUtPmFjY2VwdGluZyA9IDEgKyAyICoga3dzZXQtPndvcmRzOworICArK2t3c2V0LT53b3JkczsKKworICAvKiBLZWVwIHRyYWNrIG9mIHRoZSBsb25nZXN0IGFuZCBzaG9ydGVzdCBzdHJpbmcgb2YgdGhlIGtleXdvcmQgc2V0LiAqLworICBpZiAodHJpZS0+ZGVwdGggPCBrd3NldC0+bWluZCkKKyAgICBrd3NldC0+bWluZCA9IHRyaWUtPmRlcHRoOworICBpZiAodHJpZS0+ZGVwdGggPiBrd3NldC0+bWF4ZCkKKyAgICBrd3NldC0+bWF4ZCA9IHRyaWUtPmRlcHRoOworCisgIHJldHVybiBOVUxMOworfQorCisvKiBFbnF1ZXVlIHRoZSB0cmllIG5vZGVzIHJlZmVyZW5jZWQgZnJvbSB0aGUgZ2l2ZW4gdHJlZSBpbiB0aGUKKyAgIGdpdmVuIHF1ZXVlLiAqLworc3RhdGljIHZvaWQKK2VucXVldWUgKHN0cnVjdCB0cmVlICp0cmVlLCBzdHJ1Y3QgdHJpZSAqKmxhc3QpCit7CisgIGlmICghdHJlZSkKKyAgICByZXR1cm47CisgIGVucXVldWUodHJlZS0+bGxpbmssIGxhc3QpOworICBlbnF1ZXVlKHRyZWUtPnJsaW5rLCBsYXN0KTsKKyAgKCpsYXN0KSA9ICgqbGFzdCktPm5leHQgPSB0cmVlLT50cmllOworfQorCisvKiBDb21wdXRlIHRoZSBBaG8tQ29yYXNpY2sgZmFpbHVyZSBmdW5jdGlvbiBmb3IgdGhlIHRyaWUgbm9kZXMgcmVmZXJlbmNlZAorICAgZnJvbSB0aGUgZ2l2ZW4gdHJlZSwgZ2l2ZW4gdGhlIGZhaWx1cmUgZnVuY3Rpb24gZm9yIHRoZWlyIHBhcmVudCBhcworICAgd2VsbCBhcyBhIGxhc3QgcmVzb3J0IGZhaWx1cmUgbm9kZS4gKi8KK3N0YXRpYyB2b2lkCit0cmVlZmFpbHMgKHJlZ2lzdGVyIHN0cnVjdCB0cmVlIGNvbnN0ICp0cmVlLCBzdHJ1Y3QgdHJpZSBjb25zdCAqZmFpbCwKKwkgICBzdHJ1Y3QgdHJpZSAqcmVjb3Vyc2UpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCB0cmVlICpsaW5rOworCisgIGlmICghdHJlZSkKKyAgICByZXR1cm47CisKKyAgdHJlZWZhaWxzKHRyZWUtPmxsaW5rLCBmYWlsLCByZWNvdXJzZSk7CisgIHRyZWVmYWlscyh0cmVlLT5ybGluaywgZmFpbCwgcmVjb3Vyc2UpOworCisgIC8qIEZpbmQsIGluIHRoZSBjaGFpbiBvZiBmYWlscyBnb2luZyBiYWNrIHRvIHRoZSByb290LCB0aGUgZmlyc3QKKyAgICAgbm9kZSB0aGF0IGhhcyBhIGRlc2NlbmRhbnQgb24gdGhlIGN1cnJlbnQgbGFiZWwuICovCisgIHdoaWxlIChmYWlsKQorICAgIHsKKyAgICAgIGxpbmsgPSBmYWlsLT5saW5rczsKKyAgICAgIHdoaWxlIChsaW5rICYmIHRyZWUtPmxhYmVsICE9IGxpbmstPmxhYmVsKQorCWlmICh0cmVlLT5sYWJlbCA8IGxpbmstPmxhYmVsKQorCSAgbGluayA9IGxpbmstPmxsaW5rOworCWVsc2UKKwkgIGxpbmsgPSBsaW5rLT5ybGluazsKKyAgICAgIGlmIChsaW5rKQorCXsKKwkgIHRyZWUtPnRyaWUtPmZhaWwgPSBsaW5rLT50cmllOworCSAgcmV0dXJuOworCX0KKyAgICAgIGZhaWwgPSBmYWlsLT5mYWlsOworICAgIH0KKworICB0cmVlLT50cmllLT5mYWlsID0gcmVjb3Vyc2U7Cit9CisKKy8qIFNldCBkZWx0YSBlbnRyaWVzIGZvciB0aGUgbGlua3Mgb2YgdGhlIGdpdmVuIHRyZWUgc3VjaCB0aGF0CisgICB0aGUgcHJlZXhpc3RpbmcgZGVsdGEgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgZGVwdGguICovCitzdGF0aWMgdm9pZAordHJlZWRlbHRhIChyZWdpc3RlciBzdHJ1Y3QgdHJlZSBjb25zdCAqdHJlZSwKKwkgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgZGVwdGgsCisJICAgdW5zaWduZWQgY2hhciBkZWx0YVtdKQoreworICBpZiAoIXRyZWUpCisgICAgcmV0dXJuOworICB0cmVlZGVsdGEodHJlZS0+bGxpbmssIGRlcHRoLCBkZWx0YSk7CisgIHRyZWVkZWx0YSh0cmVlLT5ybGluaywgZGVwdGgsIGRlbHRhKTsKKyAgaWYgKGRlcHRoIDwgZGVsdGFbdHJlZS0+bGFiZWxdKQorICAgIGRlbHRhW3RyZWUtPmxhYmVsXSA9IGRlcHRoOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBBIGhhcyBldmVyeSBsYWJlbCBpbiBCLiAqLworc3RhdGljIGludAoraGFzZXZlcnkgKHJlZ2lzdGVyIHN0cnVjdCB0cmVlIGNvbnN0ICphLCByZWdpc3RlciBzdHJ1Y3QgdHJlZSBjb25zdCAqYikKK3sKKyAgaWYgKCFiKQorICAgIHJldHVybiAxOworICBpZiAoIWhhc2V2ZXJ5KGEsIGItPmxsaW5rKSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKCFoYXNldmVyeShhLCBiLT5ybGluaykpCisgICAgcmV0dXJuIDA7CisgIHdoaWxlIChhICYmIGItPmxhYmVsICE9IGEtPmxhYmVsKQorICAgIGlmIChiLT5sYWJlbCA8IGEtPmxhYmVsKQorICAgICAgYSA9IGEtPmxsaW5rOworICAgIGVsc2UKKyAgICAgIGEgPSBhLT5ybGluazsKKyAgcmV0dXJuICEhYTsKK30KKworLyogQ29tcHV0ZSBhIHZlY3RvciwgaW5kZXhlZCBieSBjaGFyYWN0ZXIgY29kZSwgb2YgdGhlIHRyaWUgbm9kZXMKKyAgIHJlZmVyZW5jZWQgZnJvbSB0aGUgZ2l2ZW4gdHJlZS4gKi8KK3N0YXRpYyB2b2lkCit0cmVlbmV4dCAoc3RydWN0IHRyZWUgY29uc3QgKnRyZWUsIHN0cnVjdCB0cmllICpuZXh0W10pCit7CisgIGlmICghdHJlZSkKKyAgICByZXR1cm47CisgIHRyZWVuZXh0KHRyZWUtPmxsaW5rLCBuZXh0KTsKKyAgdHJlZW5leHQodHJlZS0+cmxpbmssIG5leHQpOworICBuZXh0W3RyZWUtPmxhYmVsXSA9IHRyZWUtPnRyaWU7Cit9CisKKy8qIENvbXB1dGUgdGhlIHNoaWZ0IGZvciBlYWNoIHRyaWUgbm9kZSwgYXMgd2VsbCBhcyB0aGUgZGVsdGEKKyAgIHRhYmxlIGFuZCBuZXh0IGNhY2hlIGZvciB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQuICovCitjb25zdCBjaGFyICoKK2t3c3ByZXAgKGt3c2V0X3Qga3dzKQoreworICByZWdpc3RlciBzdHJ1Y3Qga3dzZXQgKmt3c2V0OworICByZWdpc3RlciBpbnQgaTsKKyAgcmVnaXN0ZXIgc3RydWN0IHRyaWUgKmN1cnI7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgY29uc3QgKnRyYW5zOworICB1bnNpZ25lZCBjaGFyIGRlbHRhW05DSEFSXTsKKworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgKikga3dzOworCisgIC8qIEluaXRpYWwgdmFsdWVzIGZvciB0aGUgZGVsdGEgdGFibGU7IHdpbGwgYmUgY2hhbmdlZCBsYXRlci4gIFRoZQorICAgICBkZWx0YSBlbnRyeSBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgdGhlIHNtYWxsZXN0IGRlcHRoIG9mIGFueQorICAgICBub2RlIGF0IHdoaWNoIGFuIG91dGdvaW5nIGVkZ2UgaXMgbGFiZWxlZCBieSB0aGF0IGNoYXJhY3Rlci4gKi8KKyAgbWVtc2V0KGRlbHRhLCBrd3NldC0+bWluZCA8IFVDSEFSX01BWCA/IGt3c2V0LT5taW5kIDogVUNIQVJfTUFYLCBOQ0hBUik7CisKKyAgLyogQ2hlY2sgaWYgd2UgY2FuIHVzZSB0aGUgc2ltcGxlIGJveWVyLW1vb3JlIGFsZ29yaXRobSwgaW5zdGVhZAorICAgICBvZiB0aGUgaGFpcnkgY29tbWVudHotd2FsdGVyIGFsZ29yaXRobS4gKi8KKyAgaWYgKGt3c2V0LT53b3JkcyA9PSAxICYmIGt3c2V0LT50cmFucyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGNoYXIgYzsKKworICAgICAgLyogTG9va2luZyBmb3IganVzdCBvbmUgc3RyaW5nLiAgRXh0cmFjdCBpdCBmcm9tIHRoZSB0cmllLiAqLworICAgICAga3dzZXQtPnRhcmdldCA9IG9ic3RhY2tfYWxsb2MoJmt3c2V0LT5vYnN0YWNrLCBrd3NldC0+bWluZCk7CisgICAgICBpZiAoIWt3c2V0LT50YXJnZXQpCisJcmV0dXJuICJtZW1vcnkgZXhoYXVzdGVkIjsKKyAgICAgIGZvciAoaSA9IGt3c2V0LT5taW5kIC0gMSwgY3VyciA9IGt3c2V0LT50cmllOyBpID49IDA7IC0taSkKKwl7CisJICBrd3NldC0+dGFyZ2V0W2ldID0gY3Vyci0+bGlua3MtPmxhYmVsOworCSAgY3VyciA9IGN1cnItPmxpbmtzLT50cmllOworCX0KKyAgICAgIC8qIEJ1aWxkIHRoZSBCb3llciBNb29yZSBkZWx0YS4gIEJveSB0aGF0J3MgZWFzeSBjb21wYXJlZCB0byBDVy4gKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBrd3NldC0+bWluZDsgKytpKQorCWRlbHRhW1Uoa3dzZXQtPnRhcmdldFtpXSldID0ga3dzZXQtPm1pbmQgLSAoaSArIDEpOworICAgICAgLyogRmluZCB0aGUgbWluaW1hbCBkZWx0YTIgc2hpZnQgdGhhdCB3ZSBtaWdodCBtYWtlIGFmdGVyCisJIGEgYmFja3dhcmRzIG1hdGNoIGhhcyBmYWlsZWQuICovCisgICAgICBjID0ga3dzZXQtPnRhcmdldFtrd3NldC0+bWluZCAtIDFdOworICAgICAgZm9yIChpID0ga3dzZXQtPm1pbmQgLSAyOyBpID49IDA7IC0taSkKKwlpZiAoa3dzZXQtPnRhcmdldFtpXSA9PSBjKQorCSAgYnJlYWs7CisgICAgICBrd3NldC0+bWluZDIgPSBrd3NldC0+bWluZCAtIChpICsgMSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVnaXN0ZXIgc3RydWN0IHRyaWUgKmZhaWw7CisgICAgICBzdHJ1Y3QgdHJpZSAqbGFzdCwgKm5leHRbTkNIQVJdOworCisgICAgICAvKiBUcmF2ZXJzZSB0aGUgbm9kZXMgb2YgdGhlIHRyaWUgaW4gbGV2ZWwgb3JkZXIsIHNpbXVsdGFuZW91c2x5CisJIGNvbXB1dGluZyB0aGUgZGVsdGEgdGFibGUsIGZhaWx1cmUgZnVuY3Rpb24sIGFuZCBzaGlmdCBmdW5jdGlvbi4gKi8KKyAgICAgIGZvciAoY3VyciA9IGxhc3QgPSBrd3NldC0+dHJpZTsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpCisJeworCSAgLyogRW5xdWV1ZSB0aGUgaW1tZWRpYXRlIGRlc2NlbmRhbnRzIGluIHRoZSBsZXZlbCBvcmRlciBxdWV1ZS4gKi8KKwkgIGVucXVldWUoY3Vyci0+bGlua3MsICZsYXN0KTsKKworCSAgY3Vyci0+c2hpZnQgPSBrd3NldC0+bWluZDsKKwkgIGN1cnItPm1heHNoaWZ0ID0ga3dzZXQtPm1pbmQ7CisKKwkgIC8qIFVwZGF0ZSB0aGUgZGVsdGEgdGFibGUgZm9yIHRoZSBkZXNjZW5kYW50cyBvZiB0aGlzIG5vZGUuICovCisJICB0cmVlZGVsdGEoY3Vyci0+bGlua3MsIGN1cnItPmRlcHRoLCBkZWx0YSk7CisKKwkgIC8qIENvbXB1dGUgdGhlIGZhaWx1cmUgZnVuY3Rpb24gZm9yIHRoZSBkZXNjZW5kYW50cyBvZiB0aGlzIG5vZGUuICovCisJICB0cmVlZmFpbHMoY3Vyci0+bGlua3MsIGN1cnItPmZhaWwsIGt3c2V0LT50cmllKTsKKworCSAgLyogVXBkYXRlIHRoZSBzaGlmdHMgYXQgZWFjaCBub2RlIGluIHRoZSBjdXJyZW50IG5vZGUncyBjaGFpbgorCSAgICAgb2YgZmFpbHMgYmFjayB0byB0aGUgcm9vdC4gKi8KKwkgIGZvciAoZmFpbCA9IGN1cnItPmZhaWw7IGZhaWw7IGZhaWwgPSBmYWlsLT5mYWlsKQorCSAgICB7CisJICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbm9kZSBoYXMgc29tZSBvdXRnb2luZyBlZGdlIHRoYXQgdGhlIGZhaWwKKwkJIGRvZXNuJ3QsIHRoZW4gdGhlIHNoaWZ0IGF0IHRoZSBmYWlsIHNob3VsZCBiZSBubyBsYXJnZXIKKwkJIHRoYW4gdGhlIGRpZmZlcmVuY2Ugb2YgdGhlaXIgZGVwdGhzLiAqLworCSAgICAgIGlmICghaGFzZXZlcnkoZmFpbC0+bGlua3MsIGN1cnItPmxpbmtzKSkKKwkJaWYgKGN1cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGggPCBmYWlsLT5zaGlmdCkKKwkJICBmYWlsLT5zaGlmdCA9IGN1cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGg7CisKKwkgICAgICAvKiBJZiB0aGUgY3VycmVudCBub2RlIGlzIGFjY2VwdGluZyB0aGVuIHRoZSBzaGlmdCBhdCB0aGUKKwkJIGZhaWwgYW5kIGl0cyBkZXNjZW5kYW50cyBzaG91bGQgYmUgbm8gbGFyZ2VyIHRoYW4gdGhlCisJCSBkaWZmZXJlbmNlIG9mIHRoZWlyIGRlcHRocy4gKi8KKwkgICAgICBpZiAoY3Vyci0+YWNjZXB0aW5nICYmIGZhaWwtPm1heHNoaWZ0ID4gY3Vyci0+ZGVwdGggLSBmYWlsLT5kZXB0aCkKKwkJZmFpbC0+bWF4c2hpZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOworCSAgICB9CisJfQorCisgICAgICAvKiBUcmF2ZXJzZSB0aGUgdHJpZSBpbiBsZXZlbCBvcmRlciBhZ2FpbiwgZml4aW5nIHVwIGFsbCBub2RlcyB3aG9zZQorCSBzaGlmdCBleGNlZWRzIHRoZWlyIGluaGVyaXRlZCBtYXhzaGlmdC4gKi8KKyAgICAgIGZvciAoY3VyciA9IGt3c2V0LT50cmllLT5uZXh0OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCkKKwl7CisJICBpZiAoY3Vyci0+bWF4c2hpZnQgPiBjdXJyLT5wYXJlbnQtPm1heHNoaWZ0KQorCSAgICBjdXJyLT5tYXhzaGlmdCA9IGN1cnItPnBhcmVudC0+bWF4c2hpZnQ7CisJICBpZiAoY3Vyci0+c2hpZnQgPiBjdXJyLT5tYXhzaGlmdCkKKwkgICAgY3Vyci0+c2hpZnQgPSBjdXJyLT5tYXhzaGlmdDsKKwl9CisKKyAgICAgIC8qIENyZWF0ZSBhIHZlY3RvciwgaW5kZXhlZCBieSBjaGFyYWN0ZXIgY29kZSwgb2YgdGhlIG91dGdvaW5nIGxpbmtzCisJIGZyb20gdGhlIHJvb3Qgbm9kZS4gKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0hBUjsgKytpKQorCW5leHRbaV0gPSBOVUxMOworICAgICAgdHJlZW5leHQoa3dzZXQtPnRyaWUtPmxpbmtzLCBuZXh0KTsKKworICAgICAgaWYgKCh0cmFucyA9IGt3c2V0LT50cmFucykgIT0gTlVMTCkKKwlmb3IgKGkgPSAwOyBpIDwgTkNIQVI7ICsraSkKKwkgIGt3c2V0LT5uZXh0W2ldID0gbmV4dFtVKHRyYW5zW2ldKV07CisgICAgICBlbHNlCisJQ09QWV9BUlJBWShrd3NldC0+bmV4dCwgbmV4dCwgTkNIQVIpOworICAgIH0KKworICAvKiBGaXggdGhpbmdzIHVwIGZvciBhbnkgdHJhbnNsYXRpb24gdGFibGUuICovCisgIGlmICgodHJhbnMgPSBrd3NldC0+dHJhbnMpICE9IE5VTEwpCisgICAgZm9yIChpID0gMDsgaSA8IE5DSEFSOyArK2kpCisgICAgICBrd3NldC0+ZGVsdGFbaV0gPSBkZWx0YVtVKHRyYW5zW2ldKV07CisgIGVsc2UKKyAgICBtZW1jcHkoa3dzZXQtPmRlbHRhLCBkZWx0YSwgTkNIQVIpOworCisgIHJldHVybiBOVUxMOworfQorCisvKiBGYXN0IGJveWVyLW1vb3JlIHNlYXJjaC4gKi8KK3N0YXRpYyBzaXplX3QKK2JtZXhlYyAoa3dzZXRfdCBrd3MsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplKQoreworICBzdHJ1Y3Qga3dzZXQgY29uc3QgKmt3c2V0OworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkMTsKKyAgcmVnaXN0ZXIgY2hhciBjb25zdCAqZXAsICpzcCwgKnRwOworICByZWdpc3RlciBpbnQgZCwgZ2MsIGksIGxlbiwgbWQyOworCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCBjb25zdCAqKSBrd3M7CisgIGxlbiA9IGt3c2V0LT5taW5kOworCisgIGlmIChsZW4gPT0gMCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKGxlbiA+IHNpemUpCisgICAgcmV0dXJuIC0xOworICBpZiAobGVuID09IDEpCisgICAgeworICAgICAgdHAgPSBtZW1jaHIgKHRleHQsIGt3c2V0LT50YXJnZXRbMF0sIHNpemUpOworICAgICAgcmV0dXJuIHRwID8gdHAgLSB0ZXh0IDogLTE7CisgICAgfQorCisgIGQxID0ga3dzZXQtPmRlbHRhOworICBzcCA9IGt3c2V0LT50YXJnZXQgKyBsZW47CisgIGdjID0gVShzcFstMl0pOworICBtZDIgPSBrd3NldC0+bWluZDI7CisgIHRwID0gdGV4dCArIGxlbjsKKworICAvKiBTaWduaWZpY2FuY2Ugb2YgMTI6IDEgKGluaXRpYWwgb2Zmc2V0KSArIDEwIChza2lwIGxvb3ApICsgMSAobWQyKS4gKi8KKyAgaWYgKHNpemUgPiAxMiAqIGxlbikKKyAgICAvKiAxMSBpcyBub3QgYSBidWcsIHRoZSBpbml0aWFsIG9mZnNldCBoYXBwZW5zIG9ubHkgb25jZS4gKi8KKyAgICBmb3IgKGVwID0gdGV4dCArIHNpemUgLSAxMSAqIGxlbjs7KQorICAgICAgeworCXdoaWxlICh0cCA8PSBlcCkKKwkgIHsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBpZiAoZCA9PSAwKQorCSAgICAgIGdvdG8gZm91bmQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGlmIChkID09IDApCisJICAgICAgZ290byBmb3VuZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgaWYgKGQgPT0gMCkKKwkgICAgICBnb3RvIGZvdW5kOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICB9CisJYnJlYWs7CisgICAgICBmb3VuZDoKKwlpZiAoVSh0cFstMl0pID09IGdjKQorCSAgeworCSAgICBmb3IgKGkgPSAzOyBpIDw9IGxlbiAmJiBVKHRwWy1pXSkgPT0gVShzcFstaV0pOyArK2kpCisJICAgICAgOworCSAgICBpZiAoaSA+IGxlbikKKwkgICAgICByZXR1cm4gdHAgLSBsZW4gLSB0ZXh0OworCSAgfQorCXRwICs9IG1kMjsKKyAgICAgIH0KKworICAvKiBOb3cgd2UgaGF2ZSBvbmx5IGEgZmV3IGNoYXJhY3RlcnMgbGVmdCB0byBzZWFyY2guICBXZQorICAgICBjYXJlZnVsbHkgYXZvaWQgZXZlciBwcm9kdWNpbmcgYW4gb3V0LW9mLWJvdW5kcyBwb2ludGVyLiAqLworICBlcCA9IHRleHQgKyBzaXplOworICBkID0gZDFbVSh0cFstMV0pXTsKKyAgd2hpbGUgKGQgPD0gZXAgLSB0cCkKKyAgICB7CisgICAgICBkID0gZDFbVSgodHAgKz0gZClbLTFdKV07CisgICAgICBpZiAoZCAhPSAwKQorCWNvbnRpbnVlOworICAgICAgaWYgKFUodHBbLTJdKSA9PSBnYykKKwl7CisJICBmb3IgKGkgPSAzOyBpIDw9IGxlbiAmJiBVKHRwWy1pXSkgPT0gVShzcFstaV0pOyArK2kpCisJICAgIDsKKwkgIGlmIChpID4gbGVuKQorCSAgICByZXR1cm4gdHAgLSBsZW4gLSB0ZXh0OworCX0KKyAgICAgIGQgPSBtZDI7CisgICAgfQorCisgIHJldHVybiAtMTsKK30KKworLyogSGFpcnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaC4gKi8KK3N0YXRpYyBzaXplX3QKK2N3ZXhlYyAoa3dzZXRfdCBrd3MsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gpCit7CisgIHN0cnVjdCBrd3NldCBjb25zdCAqa3dzZXQ7CisgIHN0cnVjdCB0cmllICogY29uc3QgKm5leHQ7CisgIHN0cnVjdCB0cmllIGNvbnN0ICp0cmllOworICBzdHJ1Y3QgdHJpZSBjb25zdCAqYWNjZXB0OworICBjaGFyIGNvbnN0ICpiZWcsICpsaW0sICptY2gsICpsbWNoOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGM7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgY29uc3QgKmRlbHRhOworICByZWdpc3RlciBpbnQgZDsKKyAgcmVnaXN0ZXIgY2hhciBjb25zdCAqZW5kLCAqcWxpbTsKKyAgcmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKnRyZWU7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgY29uc3QgKnRyYW5zOworCisgIGFjY2VwdCA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSByZWdpc3RlciBjb3BpZXMgYW5kIGxvb2sgZm9yIGVhc3kgd2F5cyBvdXQuICovCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCAqKSBrd3M7CisgIGlmIChsZW4gPCBrd3NldC0+bWluZCkKKyAgICByZXR1cm4gLTE7CisgIG5leHQgPSBrd3NldC0+bmV4dDsKKyAgZGVsdGEgPSBrd3NldC0+ZGVsdGE7CisgIHRyYW5zID0ga3dzZXQtPnRyYW5zOworICBsaW0gPSB0ZXh0ICsgbGVuOworICBlbmQgPSB0ZXh0OworICBpZiAoKGQgPSBrd3NldC0+bWluZCkgIT0gMCkKKyAgICBtY2ggPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgbWNoID0gdGV4dCwgYWNjZXB0ID0ga3dzZXQtPnRyaWU7CisgICAgICBnb3RvIG1hdGNoOworICAgIH0KKworICBpZiAobGVuID49IDQgKiBrd3NldC0+bWluZCkKKyAgICBxbGltID0gbGltIC0gNCAqIGt3c2V0LT5taW5kOworICBlbHNlCisgICAgcWxpbSA9IE5VTEw7CisKKyAgd2hpbGUgKGxpbSAtIGVuZCA+PSBkKQorICAgIHsKKyAgICAgIGlmIChxbGltICYmIGVuZCA8PSBxbGltKQorCXsKKwkgIGVuZCArPSBkIC0gMTsKKwkgIHdoaWxlICgoZCA9IGRlbHRhW2MgPSAqZW5kXSkgJiYgZW5kIDwgcWxpbSkKKwkgICAgeworCSAgICAgIGVuZCArPSBkOworCSAgICAgIGVuZCArPSBkZWx0YVtVKCplbmQpXTsKKwkgICAgICBlbmQgKz0gZGVsdGFbVSgqZW5kKV07CisJICAgIH0KKwkgICsrZW5kOworCX0KKyAgICAgIGVsc2UKKwlkID0gZGVsdGFbYyA9IChlbmQgKz0gZClbLTFdXTsKKyAgICAgIGlmIChkKQorCWNvbnRpbnVlOworICAgICAgYmVnID0gZW5kIC0gMTsKKyAgICAgIHRyaWUgPSBuZXh0W2NdOworICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZykKKwl7CisJICBtY2ggPSBiZWc7CisJICBhY2NlcHQgPSB0cmllOworCX0KKyAgICAgIGQgPSB0cmllLT5zaGlmdDsKKyAgICAgIHdoaWxlIChiZWcgPiB0ZXh0KQorCXsKKwkgIGMgPSB0cmFucyA/IHRyYW5zW1UoKi0tYmVnKV0gOiAqLS1iZWc7CisJICB0cmVlID0gdHJpZS0+bGlua3M7CisJICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQorCSAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorCSAgICAgIHRyZWUgPSB0cmVlLT5sbGluazsKKwkgICAgZWxzZQorCSAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsKKwkgIGlmICh0cmVlKQorCSAgICB7CisJICAgICAgdHJpZSA9IHRyZWUtPnRyaWU7CisJICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZykKKwkJeworCQkgIG1jaCA9IGJlZzsKKwkJICBhY2NlcHQgPSB0cmllOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgYnJlYWs7CisJICBkID0gdHJpZS0+c2hpZnQ7CisJfQorICAgICAgaWYgKG1jaCkKKwlnb3RvIG1hdGNoOworICAgIH0KKyAgcmV0dXJuIC0xOworCisgbWF0Y2g6CisgIC8qIEdpdmVuIGEga25vd24gbWF0Y2gsIGZpbmQgdGhlIGxvbmdlc3QgcG9zc2libGUgbWF0Y2ggYW5jaG9yZWQKKyAgICAgYXQgb3IgYmVmb3JlIGl0cyBzdGFydGluZyBwb2ludC4gIFRoaXMgaXMgbmVhcmx5IGEgdmVyYmF0aW0KKyAgICAgY29weSBvZiB0aGUgcHJlY2VkaW5nIG1haW4gc2VhcmNoIGxvb3BzLiAqLworICBpZiAobGltIC0gbWNoID4ga3dzZXQtPm1heGQpCisgICAgbGltID0gbWNoICsga3dzZXQtPm1heGQ7CisgIGxtY2ggPSBOVUxMOworICBkID0gMTsKKyAgd2hpbGUgKGxpbSAtIGVuZCA+PSBkKQorICAgIHsKKyAgICAgIGlmICgoZCA9IGRlbHRhW2MgPSAoZW5kICs9IGQpWy0xXV0pICE9IDApCisJY29udGludWU7CisgICAgICBiZWcgPSBlbmQgLSAxOworICAgICAgaWYgKCEodHJpZSA9IG5leHRbY10pKQorCXsKKwkgIGQgPSAxOworCSAgY29udGludWU7CisJfQorICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorCXsKKwkgIGxtY2ggPSBiZWc7CisJICBhY2NlcHQgPSB0cmllOworCX0KKyAgICAgIGQgPSB0cmllLT5zaGlmdDsKKyAgICAgIHdoaWxlIChiZWcgPiB0ZXh0KQorCXsKKwkgIGMgPSB0cmFucyA/IHRyYW5zW1UoKi0tYmVnKV0gOiAqLS1iZWc7CisJICB0cmVlID0gdHJpZS0+bGlua3M7CisJICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQorCSAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorCSAgICAgIHRyZWUgPSB0cmVlLT5sbGluazsKKwkgICAgZWxzZQorCSAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsKKwkgIGlmICh0cmVlKQorCSAgICB7CisJICAgICAgdHJpZSA9IHRyZWUtPnRyaWU7CisJICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorCQl7CisJCSAgbG1jaCA9IGJlZzsKKwkJICBhY2NlcHQgPSB0cmllOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgYnJlYWs7CisJICBkID0gdHJpZS0+c2hpZnQ7CisJfQorICAgICAgaWYgKGxtY2gpCisJeworCSAgbWNoID0gbG1jaDsKKwkgIGdvdG8gbWF0Y2g7CisJfQorICAgICAgaWYgKCFkKQorCWQgPSAxOworICAgIH0KKworICBpZiAoa3dzbWF0Y2gpCisgICAgeworICAgICAga3dzbWF0Y2gtPmluZGV4ID0gYWNjZXB0LT5hY2NlcHRpbmcgLyAyOworICAgICAga3dzbWF0Y2gtPm9mZnNldFswXSA9IG1jaCAtIHRleHQ7CisgICAgICBrd3NtYXRjaC0+c2l6ZVswXSA9IGFjY2VwdC0+ZGVwdGg7CisgICAgfQorICByZXR1cm4gbWNoIC0gdGV4dDsKK30KKworLyogU2VhcmNoIHRocm91Z2ggdGhlIGdpdmVuIHRleHQgZm9yIGEgbWF0Y2ggb2YgYW55IG1lbWJlciBvZiB0aGUKKyAgIGdpdmVuIGtleXdvcmQgc2V0LiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisgICB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nLCBvciBOVUxMIGlmIG5vIG1hdGNoIGlzIGZvdW5kLiAgSWYgRk9VTkRMRU4KKyAgIGlzIG5vbi1OVUxMIHN0b3JlIGluIHRoZSByZWZlcmVuY2VkIGxvY2F0aW9uIHRoZSBsZW5ndGggb2YgdGhlCisgICBtYXRjaGluZyBzdWJzdHJpbmcuICBTaW1pbGFybHksIGlmIEZPVU5ESURYIGlzIG5vbi1OVUxMLCBzdG9yZQorICAgaW4gdGhlIHJlZmVyZW5jZWQgbG9jYXRpb24gdGhlIGluZGV4IG51bWJlciBvZiB0aGUgcGFydGljdWxhcgorICAga2V5d29yZCBtYXRjaGVkLiAqLworc2l6ZV90Citrd3NleGVjIChrd3NldF90IGt3cywgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUsCisJIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gpCit7CisgIHN0cnVjdCBrd3NldCBjb25zdCAqa3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIGt3czsKKyAgaWYgKGt3c2V0LT53b3JkcyA9PSAxICYmIGt3c2V0LT50cmFucyA9PSBOVUxMKQorICAgIHsKKyAgICAgIHNpemVfdCByZXQgPSBibWV4ZWMgKGt3cywgdGV4dCwgc2l6ZSk7CisgICAgICBpZiAoa3dzbWF0Y2ggIT0gTlVMTCAmJiByZXQgIT0gKHNpemVfdCkgLTEpCisJeworCSAga3dzbWF0Y2gtPmluZGV4ID0gMDsKKwkgIGt3c21hdGNoLT5vZmZzZXRbMF0gPSByZXQ7CisJICBrd3NtYXRjaC0+c2l6ZVswXSA9IGt3c2V0LT5taW5kOworCX0KKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIGN3ZXhlYyhrd3MsIHRleHQsIHNpemUsIGt3c21hdGNoKTsKK30KKworLyogRnJlZSB0aGUgY29tcG9uZW50cyBvZiB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQuICovCit2b2lkCitrd3NmcmVlIChrd3NldF90IGt3cykKK3sKKyAgc3RydWN0IGt3c2V0ICprd3NldDsKKworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgKikga3dzOworICBvYnN0YWNrX2ZyZWUoJmt3c2V0LT5vYnN0YWNrLCBOVUxMKTsKKyAgZnJlZShrd3MpOworfQpkaWZmIC0tZ2l0IGEva3dzZXQuaCBiL2t3c2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwZWNhZQotLS0gL2Rldi9udWxsCisrKyBiL2t3c2V0LmgKQEAgLTAsMCArMSw2NSBAQAorI2lmbmRlZiBLV1NFVF9ICisjZGVmaW5lIEtXU0VUX0gKKworLyogVGhpcyBmaWxlIGhhcyBiZWVuIGNvcGllZCBmcm9tIGNvbW1pdCBlN2FjNzEzZF4gaW4gdGhlIEdOVSBncmVwIGdpdAorICogcmVwb3NpdG9yeS4gQSBmZXcgc21hbGwgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byBhZGFwdCB0aGUgY29kZSB0bworICogR2l0LgorICovCisKKy8qIGt3c2V0LmggLSBoZWFkZXIgZGVjbGFyaW5nIHRoZSBrZXl3b3JkIHNldCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTk4LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gKi8KKworLyogV3JpdHRlbiBBdWd1c3QgMTk4OSBieSBNaWtlIEhhZXJ0ZWwuCisgICBUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIChFbWFpbCkgYXQgdGhlIGFkZHJlc3MgbWlrZUBhaS5taXQuZWR1LAorICAgb3IgKFVTIG1haWwpIGFzIE1pa2UgSGFlcnRlbCBjL28gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAqLworCitzdHJ1Y3Qga3dzbWF0Y2gKK3sKKyAgaW50IGluZGV4OwkJCS8qIEluZGV4IG51bWJlciBvZiBtYXRjaGluZyBrZXl3b3JkLiAqLworICBzaXplX3Qgb2Zmc2V0WzFdOwkJLyogT2Zmc2V0IG9mIGVhY2ggc3VibWF0Y2guICovCisgIHNpemVfdCBzaXplWzFdOwkJLyogTGVuZ3RoIG9mIGVhY2ggc3VibWF0Y2guICovCit9OworCitzdHJ1Y3Qga3dzZXRfdDsKK3R5cGVkZWYgc3RydWN0IGt3c2V0X3QqIGt3c2V0X3Q7CisKKy8qIFJldHVybiBhbiBvcGFxdWUgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBrZXl3b3JkIHNldCwgb3IgTlVMTAorICAgaWYgZW5vdWdoIG1lbW9yeSBjYW5ub3QgYmUgb2J0YWluZWQuICBUaGUgYXJndW1lbnQgaWYgbm9uLU5VTEwKKyAgIHNwZWNpZmllcyBhIHRhYmxlIG9mIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgdG8gYmUgYXBwbGllZCB0byBhbGwKKyAgIHBhdHRlcm4gYW5kIHNlYXJjaCB0ZXh0LiAqLwora3dzZXRfdCBrd3NhbGxvYyh1bnNpZ25lZCBjaGFyIGNvbnN0ICopOworCisvKiBJbmNyZW1lbnRhbGx5IGV4dGVuZCB0aGUga2V5d29yZCBzZXQgdG8gaW5jbHVkZSB0aGUgZ2l2ZW4gc3RyaW5nLgorICAgUmV0dXJuIE5VTEwgZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIG1lc3NhZ2UuICBSZW1lbWJlciBhbiBpbmRleAorICAgbnVtYmVyIGZvciBlYWNoIGtleXdvcmQgaW5jbHVkZWQgaW4gdGhlIHNldC4gKi8KK2NvbnN0IGNoYXIgKmt3c2luY3Ioa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QpOworCisvKiBXaGVuIHRoZSBrZXl3b3JkIHNldCBoYXMgYmVlbiBjb21wbGV0ZWx5IGJ1aWx0LCBwcmVwYXJlIGl0IGZvcgorICAgdXNlLiAgUmV0dXJuIE5VTEwgZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIG1lc3NhZ2UuICovCitjb25zdCBjaGFyICprd3NwcmVwKGt3c2V0X3QpOworCisvKiBTZWFyY2ggdGhyb3VnaCB0aGUgZ2l2ZW4gYnVmZmVyIGZvciBhIG1lbWJlciBvZiB0aGUga2V5d29yZCBzZXQuCisgICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsZWZ0bW9zdCBsb25nZXN0IG1hdGNoIGZvdW5kLCBvciBOVUxMIGlmCisgICBubyBtYXRjaCBpcyBmb3VuZC4gIElmIGZvdW5kbGVuIGlzIG5vbi1OVUxMLCBzdG9yZSB0aGUgbGVuZ3RoIG9mCisgICB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nIGluIHRoZSBpbnRlZ2VyIGl0IHBvaW50cyB0by4gIFNpbWlsYXJseSwKKyAgIGlmIGZvdW5kaW5kZXggaXMgbm9uLU5VTEwsIHN0b3JlIHRoZSBpbmRleCBvZiB0aGUgcGFydGljdWxhcgorICAga2V5d29yZCBmb3VuZCB0aGVyZWluLiAqLworc2l6ZV90IGt3c2V4ZWMoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0cnVjdCBrd3NtYXRjaCAqKTsKKworLyogRGVhbGxvY2F0ZSB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQgYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBzdG9yYWdlLiAqLwordm9pZCBrd3NmcmVlKGt3c2V0X3QpOworCisjZW5kaWYgLyogS1dTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvbGV2ZW5zaHRlaW4uYyBiL2xldmVuc2h0ZWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2MzI2OQotLS0gL2Rldi9udWxsCisrKyBiL2xldmVuc2h0ZWluLmMKQEAgLTAsMCArMSw4NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibGV2ZW5zaHRlaW4uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgRGFtZXJhdS1MZXZlbnNodGVpbiBhbGdvcml0aG0gdG8KKyAqIGNhbGN1bGF0ZSBhIGRpc3RhbmNlIGJldHdlZW4gc3RyaW5ncy4KKyAqCisgKiBCYXNpY2FsbHksIGl0IHNheXMgaG93IG1hbnkgbGV0dGVycyBuZWVkIHRvIGJlIHN3YXBwZWQsIHN1YnN0aXR1dGVkLAorICogZGVsZXRlZCBmcm9tLCBvciBhZGRlZCB0byBzdHJpbmcxLCBhdCBsZWFzdCwgdG8gZ2V0IHN0cmluZzIuCisgKgorICogVGhlIGlkZWEgaXMgdG8gYnVpbGQgYSBkaXN0YW5jZSBtYXRyaXggZm9yIHRoZSBzdWJzdHJpbmdzIG9mIGJvdGgKKyAqIHN0cmluZ3MuICBUbyBhdm9pZCBhIGxhcmdlIHNwYWNlIGNvbXBsZXhpdHksIG9ubHkgdGhlIGxhc3QgdGhyZWUgcm93cworICogYXJlIGtlcHQgaW4gbWVtb3J5IChpZiBzd2FwcyBoYWQgdGhlIHNhbWUgb3IgaGlnaGVyIGNvc3QgYXMgb25lIGRlbGV0aW9uCisgKiBwbHVzIG9uZSBpbnNlcnRpb24sIG9ubHkgdHdvIHJvd3Mgd291bGQgYmUgbmVlZGVkKS4KKyAqCisgKiBBdCBhbnkgc3RhZ2UsICJpICsgMSIgZGVub3RlcyB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHN1YnN0cmluZyBvZgorICogc3RyaW5nMSB0aGF0IHRoZSBkaXN0YW5jZSBpcyBjYWxjdWxhdGVkIGZvci4KKyAqCisgKiByb3cyIGhvbGRzIHRoZSBjdXJyZW50IHJvdywgcm93MSB0aGUgcHJldmlvdXMgcm93IChpLmUuIGZvciB0aGUgc3Vic3RyaW5nCisgKiBvZiBzdHJpbmcxIG9mIGxlbmd0aCAiaSIpLCBhbmQgcm93MCB0aGUgcm93IGJlZm9yZSB0aGF0LgorICoKKyAqIEluIG90aGVyIHdvcmRzLCBhdCB0aGUgc3RhcnQgb2YgdGhlIGJpZyBsb29wLCByb3cyW2ogKyAxXSBjb250YWlucyB0aGUKKyAqIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgc3Vic3RyaW5nIG9mIHN0cmluZzEgb2YgbGVuZ3RoCisgKiAiaSIgYW5kIHRoZSBzdWJzdHJpbmcgb2Ygc3RyaW5nMiBvZiBsZW5ndGggImogKyAxIi4KKyAqCisgKiBBbGwgdGhlIGJpZyBsb29wIGRvZXMgaXMgZGV0ZXJtaW5lIHRoZSBwYXJ0aWFsIG1pbmltdW0tY29zdCBwYXRocy4KKyAqCisgKiBJdCBkb2VzIHNvIGJ5IGNhbGN1bGF0aW5nIHRoZSBjb3N0cyBvZiB0aGUgcGF0aCBlbmRpbmcgaW4gY2hhcmFjdGVycworICogaSAoaW4gc3RyaW5nMSkgYW5kIGogKGluIHN0cmluZzIpLCByZXNwZWN0aXZlbHksIGdpdmVuIHRoYXQgdGhlIGxhc3QKKyAqIG9wZXJhdGlvbiBpcyBhIHN1YnN0aXR1dGlvbiwgYSBzd2FwLCBhIGRlbGV0aW9uLCBvciBhbiBpbnNlcnRpb24uCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdGhlIGNvc3RzIHRvIGJlIHdlaWdodGVkOgorICoKKyAqIC0gdyAoYXMgaW4gInNXYXAiKQorICogLSBzIChhcyBpbiAiU3Vic3RpdHV0aW9uIikKKyAqIC0gYSAoZm9yIGluc2VydGlvbiwgQUtBICJBZGQiKQorICogLSBkIChhcyBpbiAiRGVsZXRpb24iKQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGFsZ29yaXRobSBjYWxjdWxhdGVzIGEgZGlzdGFuY2UgX2lmZl8gZCA9PSBhLgorICovCitpbnQgbGV2ZW5zaHRlaW4oY29uc3QgY2hhciAqc3RyaW5nMSwgY29uc3QgY2hhciAqc3RyaW5nMiwKKwkJaW50IHcsIGludCBzLCBpbnQgYSwgaW50IGQpCit7CisJaW50IGxlbjEgPSBzdHJsZW4oc3RyaW5nMSksIGxlbjIgPSBzdHJsZW4oc3RyaW5nMik7CisJaW50ICpyb3cwLCAqcm93MSwgKnJvdzI7CisJaW50IGksIGo7CisKKwlBTExPQ19BUlJBWShyb3cwLCBsZW4yICsgMSk7CisJQUxMT0NfQVJSQVkocm93MSwgbGVuMiArIDEpOworCUFMTE9DX0FSUkFZKHJvdzIsIGxlbjIgKyAxKTsKKworCWZvciAoaiA9IDA7IGogPD0gbGVuMjsgaisrKQorCQlyb3cxW2pdID0gaiAqIGE7CisJZm9yIChpID0gMDsgaSA8IGxlbjE7IGkrKykgeworCQlpbnQgKmR1bW15OworCisJCXJvdzJbMF0gPSAoaSArIDEpICogZDsKKwkJZm9yIChqID0gMDsgaiA8IGxlbjI7IGorKykgeworCQkJLyogc3Vic3RpdHV0aW9uICovCisJCQlyb3cyW2ogKyAxXSA9IHJvdzFbal0gKyBzICogKHN0cmluZzFbaV0gIT0gc3RyaW5nMltqXSk7CisJCQkvKiBzd2FwICovCisJCQlpZiAoaSA+IDAgJiYgaiA+IDAgJiYgc3RyaW5nMVtpIC0gMV0gPT0gc3RyaW5nMltqXSAmJgorCQkJCQlzdHJpbmcxW2ldID09IHN0cmluZzJbaiAtIDFdICYmCisJCQkJCXJvdzJbaiArIDFdID4gcm93MFtqIC0gMV0gKyB3KQorCQkJCXJvdzJbaiArIDFdID0gcm93MFtqIC0gMV0gKyB3OworCQkJLyogZGVsZXRpb24gKi8KKwkJCWlmIChyb3cyW2ogKyAxXSA+IHJvdzFbaiArIDFdICsgZCkKKwkJCQlyb3cyW2ogKyAxXSA9IHJvdzFbaiArIDFdICsgZDsKKwkJCS8qIGluc2VydGlvbiAqLworCQkJaWYgKHJvdzJbaiArIDFdID4gcm93MltqXSArIGEpCisJCQkJcm93MltqICsgMV0gPSByb3cyW2pdICsgYTsKKwkJfQorCisJCWR1bW15ID0gcm93MDsKKwkJcm93MCA9IHJvdzE7CisJCXJvdzEgPSByb3cyOworCQlyb3cyID0gZHVtbXk7CisJfQorCisJaSA9IHJvdzFbbGVuMl07CisJZnJlZShyb3cwKTsKKwlmcmVlKHJvdzEpOworCWZyZWUocm93Mik7CisKKwlyZXR1cm4gaTsKK30KZGlmZiAtLWdpdCBhL2xldmVuc2h0ZWluLmggYi9sZXZlbnNodGVpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDViZjMKLS0tIC9kZXYvbnVsbAorKysgYi9sZXZlbnNodGVpbi5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBMRVZFTlNIVEVJTl9ICisjZGVmaW5lIExFVkVOU0hURUlOX0gKKworaW50IGxldmVuc2h0ZWluKGNvbnN0IGNoYXIgKnN0cmluZzEsIGNvbnN0IGNoYXIgKnN0cmluZzIsCisJaW50IHN3YXBfcGVuYWx0eSwgaW50IHN1YnN0aXR1dGlvbl9wZW5hbHR5LAorCWludCBpbnNlcnRpb25fcGVuYWx0eSwgaW50IGRlbGV0aW9uX3BlbmFsdHkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpbmUtbG9nLmMgYi9saW5lLWxvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMTBlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9saW5lLWxvZy5jCkBAIC0wLDAgKzEsMTI4OSBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxpbmUtcmFuZ2UuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJsaW5lLWxvZy5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X2dyb3coc3RydWN0IHJhbmdlX3NldCAqcnMsIHNpemVfdCBleHRyYSkKK3sKKwlBTExPQ19HUk9XKHJzLT5yYW5nZXMsIHJzLT5uciArIGV4dHJhLCBycy0+YWxsb2MpOworfQorCisvKiBFaXRoZXIgaW5pdGlhbGl6YXRpb24gd291bGQgYmUgZmluZSAqLworI2RlZmluZSBSQU5HRV9TRVRfSU5JVCB7MH0KKwordm9pZCByYW5nZV9zZXRfaW5pdChzdHJ1Y3QgcmFuZ2Vfc2V0ICpycywgc2l6ZV90IHByZWFsbG9jKQoreworCXJzLT5hbGxvYyA9IHJzLT5uciA9IDA7CisJcnMtPnJhbmdlcyA9IE5VTEw7CisJaWYgKHByZWFsbG9jKQorCQlyYW5nZV9zZXRfZ3JvdyhycywgcHJlYWxsb2MpOworfQorCit2b2lkIHJhbmdlX3NldF9yZWxlYXNlKHN0cnVjdCByYW5nZV9zZXQgKnJzKQoreworCUZSRUVfQU5EX05VTEwocnMtPnJhbmdlcyk7CisJcnMtPmFsbG9jID0gcnMtPm5yID0gMDsKK30KKworLyogZHN0IG11c3QgYmUgdW5pbml0aWFsaXplZCEgKi8KK3N0YXRpYyB2b2lkIHJhbmdlX3NldF9jb3B5KHN0cnVjdCByYW5nZV9zZXQgKmRzdCwgc3RydWN0IHJhbmdlX3NldCAqc3JjKQoreworCXJhbmdlX3NldF9pbml0KGRzdCwgc3JjLT5ucik7CisJQ09QWV9BUlJBWShkc3QtPnJhbmdlcywgc3JjLT5yYW5nZXMsIHNyYy0+bnIpOworCWRzdC0+bnIgPSBzcmMtPm5yOworfQorCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfbW92ZShzdHJ1Y3QgcmFuZ2Vfc2V0ICpkc3QsIHN0cnVjdCByYW5nZV9zZXQgKnNyYykKK3sKKwlyYW5nZV9zZXRfcmVsZWFzZShkc3QpOworCWRzdC0+cmFuZ2VzID0gc3JjLT5yYW5nZXM7CisJZHN0LT5uciA9IHNyYy0+bnI7CisJZHN0LT5hbGxvYyA9IHNyYy0+YWxsb2M7CisJc3JjLT5yYW5nZXMgPSBOVUxMOworCXNyYy0+YWxsb2MgPSBzcmMtPm5yID0gMDsKK30KKworLyogdGFjayBvbiBhIF9uZXdfIHJhbmdlIF9hdCB0aGUgZW5kXyAqLwordm9pZCByYW5nZV9zZXRfYXBwZW5kX3Vuc2FmZShzdHJ1Y3QgcmFuZ2Vfc2V0ICpycywgbG9uZyBhLCBsb25nIGIpCit7CisJYXNzZXJ0KGEgPD0gYik7CisJcmFuZ2Vfc2V0X2dyb3cocnMsIDEpOworCXJzLT5yYW5nZXNbcnMtPm5yXS5zdGFydCA9IGE7CisJcnMtPnJhbmdlc1tycy0+bnJdLmVuZCA9IGI7CisJcnMtPm5yKys7Cit9CisKK3ZvaWQgcmFuZ2Vfc2V0X2FwcGVuZChzdHJ1Y3QgcmFuZ2Vfc2V0ICpycywgbG9uZyBhLCBsb25nIGIpCit7CisJYXNzZXJ0KHJzLT5uciA9PSAwIHx8IHJzLT5yYW5nZXNbcnMtPm5yLTFdLmVuZCA8PSBhKTsKKwlyYW5nZV9zZXRfYXBwZW5kX3Vuc2FmZShycywgYSwgYik7Cit9CisKK3N0YXRpYyBpbnQgcmFuZ2VfY21wKGNvbnN0IHZvaWQgKl9yLCBjb25zdCB2b2lkICpfcykKK3sKKwljb25zdCBzdHJ1Y3QgcmFuZ2UgKnIgPSBfcjsKKwljb25zdCBzdHJ1Y3QgcmFuZ2UgKnMgPSBfczsKKworCS8qIHRoaXMgY291bGQgYmUgc2ltcGx5ICdyZXR1cm4gci5zdGFydC1zLnN0YXJ0JywgYnV0IGZvciB0aGUgdHlwZXMgKi8KKwlpZiAoci0+c3RhcnQgPT0gcy0+c3RhcnQpCisJCXJldHVybiAwOworCWlmIChyLT5zdGFydCA8IHMtPnN0YXJ0KQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDaGVjayB0aGF0IHRoZSByYW5nZXMgYXJlIG5vbi1lbXB0eSwgc29ydGVkIGFuZCBub24tb3ZlcmxhcHBpbmcKKyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X2NoZWNrX2ludmFyaWFudHMoc3RydWN0IHJhbmdlX3NldCAqcnMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIXJzKQorCQlyZXR1cm47CisKKwlpZiAocnMtPm5yKQorCQlhc3NlcnQocnMtPnJhbmdlc1swXS5zdGFydCA8IHJzLT5yYW5nZXNbMF0uZW5kKTsKKworCWZvciAoaSA9IDE7IGkgPCBycy0+bnI7IGkrKykgeworCQlhc3NlcnQocnMtPnJhbmdlc1tpLTFdLmVuZCA8IHJzLT5yYW5nZXNbaV0uc3RhcnQpOworCQlhc3NlcnQocnMtPnJhbmdlc1tpXS5zdGFydCA8IHJzLT5yYW5nZXNbaV0uZW5kKTsKKwl9Cit9CisKKy8qCisgKiBJbi1wbGFjZSBwYXNzIG9mIHNvcnRpbmcgYW5kIG1lcmdpbmcgdGhlIHJhbmdlcyBpbiB0aGUgcmFuZ2Ugc2V0LAorICogdG8gZXN0YWJsaXNoIHRoZSBpbnZhcmlhbnRzIHdoZW4gd2UgZ2V0IHRoZSByYW5nZXMgZnJvbSB0aGUgdXNlcgorICovCit2b2lkIHNvcnRfYW5kX21lcmdlX3JhbmdlX3NldChzdHJ1Y3QgcmFuZ2Vfc2V0ICpycykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbyA9IDA7IC8qIG91dHB1dCBjdXJzb3IgKi8KKworCVFTT1JUKHJzLT5yYW5nZXMsIHJzLT5uciwgcmFuZ2VfY21wKTsKKworCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykgeworCQlpZiAocnMtPnJhbmdlc1tpXS5zdGFydCA9PSBycy0+cmFuZ2VzW2ldLmVuZCkKKwkJCWNvbnRpbnVlOworCQlpZiAobyA+IDAgJiYgcnMtPnJhbmdlc1tpXS5zdGFydCA8PSBycy0+cmFuZ2VzW28tMV0uZW5kKSB7CisJCQlpZiAocnMtPnJhbmdlc1tvLTFdLmVuZCA8IHJzLT5yYW5nZXNbaV0uZW5kKQorCQkJCXJzLT5yYW5nZXNbby0xXS5lbmQgPSBycy0+cmFuZ2VzW2ldLmVuZDsKKwkJfSBlbHNlIHsKKwkJCXJzLT5yYW5nZXNbb10uc3RhcnQgPSBycy0+cmFuZ2VzW2ldLnN0YXJ0OworCQkJcnMtPnJhbmdlc1tvXS5lbmQgPSBycy0+cmFuZ2VzW2ldLmVuZDsKKwkJCW8rKzsKKwkJfQorCX0KKwlhc3NlcnQobyA8PSBycy0+bnIpOworCXJzLT5uciA9IG87CisKKwlyYW5nZV9zZXRfY2hlY2tfaW52YXJpYW50cyhycyk7Cit9CisKKy8qCisgKiBVbmlvbiBvZiByYW5nZSBzZXRzIChpLmUuLCBzZXRzIG9mIGxpbmUgbnVtYmVycykuICBVc2VkIHRvIG1lcmdlCisgKiB0aGVtIHdoZW4gc2VhcmNoZXMgbWVldCBhdCBhIGNvbW1vbiBhbmNlc3Rvci4KKyAqCisgKiBUaGlzIGlzIGFsc28gd2hlcmUgdGhlIHJhbmdlcyBhcmUgY29uc29saWRhdGVkIGludG8gY2Fub25pY2FsIGZvcm06CisgKiBvdmVybGFwcGluZyBhbmQgYWRqYWNlbnQgcmFuZ2VzIGFyZSBtZXJnZWQsIGFuZCBlbXB0eSByYW5nZXMgYXJlCisgKiByZW1vdmVkLgorICovCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfdW5pb24oc3RydWN0IHJhbmdlX3NldCAqb3V0LAorCQkJICAgICBzdHJ1Y3QgcmFuZ2Vfc2V0ICphLCBzdHJ1Y3QgcmFuZ2Vfc2V0ICpiKQoreworCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CisJc3RydWN0IHJhbmdlICpyYSA9IGEtPnJhbmdlczsKKwlzdHJ1Y3QgcmFuZ2UgKnJiID0gYi0+cmFuZ2VzOworCS8qIGNhbm5vdCBtYWtlIGFuIGFsaWFzIG9mIG91dC0+cmFuZ2VzOiBpdCBtYXkgY2hhbmdlIGR1cmluZyBncm93ICovCisKKwlhc3NlcnQob3V0LT5uciA9PSAwKTsKKwl3aGlsZSAoaSA8IGEtPm5yIHx8IGogPCBiLT5ucikgeworCQlzdHJ1Y3QgcmFuZ2UgKm5ld19yYW5nZTsKKwkJaWYgKGkgPCBhLT5uciAmJiBqIDwgYi0+bnIpIHsKKwkJCWlmIChyYVtpXS5zdGFydCA8IHJiW2pdLnN0YXJ0KQorCQkJCW5ld19yYW5nZSA9ICZyYVtpKytdOworCQkJZWxzZSBpZiAocmFbaV0uc3RhcnQgPiByYltqXS5zdGFydCkKKwkJCQluZXdfcmFuZ2UgPSAmcmJbaisrXTsKKwkJCWVsc2UgaWYgKHJhW2ldLmVuZCA8IHJiW2pdLmVuZCkKKwkJCQluZXdfcmFuZ2UgPSAmcmFbaSsrXTsKKwkJCWVsc2UKKwkJCQluZXdfcmFuZ2UgPSAmcmJbaisrXTsKKwkJfSBlbHNlIGlmIChpIDwgYS0+bnIpICAgICAgLyogYiBleGhhdXN0ZWQgKi8KKwkJCW5ld19yYW5nZSA9ICZyYVtpKytdOworCQllbHNlICAgICAgICAgICAgICAgICAgICAgICAvKiBhIGV4aGF1c3RlZCAqLworCQkJbmV3X3JhbmdlID0gJnJiW2orK107CisJCWlmIChuZXdfcmFuZ2UtPnN0YXJ0ID09IG5ld19yYW5nZS0+ZW5kKQorCQkJOyAvKiBlbXB0eSByYW5nZSAqLworCQllbHNlIGlmICghb3V0LT5uciB8fCBvdXQtPnJhbmdlc1tvdXQtPm5yLTFdLmVuZCA8IG5ld19yYW5nZS0+c3RhcnQpIHsKKwkJCXJhbmdlX3NldF9ncm93KG91dCwgMSk7CisJCQlvdXQtPnJhbmdlc1tvdXQtPm5yXS5zdGFydCA9IG5ld19yYW5nZS0+c3RhcnQ7CisJCQlvdXQtPnJhbmdlc1tvdXQtPm5yXS5lbmQgPSBuZXdfcmFuZ2UtPmVuZDsKKwkJCW91dC0+bnIrKzsKKwkJfSBlbHNlIGlmIChvdXQtPnJhbmdlc1tvdXQtPm5yLTFdLmVuZCA8IG5ld19yYW5nZS0+ZW5kKSB7CisJCQlvdXQtPnJhbmdlc1tvdXQtPm5yLTFdLmVuZCA9IG5ld19yYW5nZS0+ZW5kOworCQl9CisJfQorfQorCisvKgorICogRGlmZmVyZW5jZSBvZiByYW5nZSBzZXRzIChvdXQgPSBhIFwgYikuICBQYXNzIHRoZSAiaW50ZXJlc3RpbmciCisgKiByYW5nZXMgYXMgJ2EnIGFuZCB0aGUgdGFyZ2V0IHNpZGUgb2YgdGhlIGRpZmYgYXMgJ2InOiBpdCByZW1vdmVzCisgKiB0aGUgcmFuZ2VzIGZvciB3aGljaCB0aGUgY29tbWl0IGlzIHJlc3BvbnNpYmxlLgorICovCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfZGlmZmVyZW5jZShzdHJ1Y3QgcmFuZ2Vfc2V0ICpvdXQsCisJCQkJICBzdHJ1Y3QgcmFuZ2Vfc2V0ICphLCBzdHJ1Y3QgcmFuZ2Vfc2V0ICpiKQoreworCXVuc2lnbmVkIGludCBpLCBqID0gIDA7CisJZm9yIChpID0gMDsgaSA8IGEtPm5yOyBpKyspIHsKKwkJbG9uZyBzdGFydCA9IGEtPnJhbmdlc1tpXS5zdGFydDsKKwkJbG9uZyBlbmQgPSBhLT5yYW5nZXNbaV0uZW5kOworCQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJCXdoaWxlIChqIDwgYi0+bnIgJiYgc3RhcnQgPj0gYi0+cmFuZ2VzW2pdLmVuZCkKKwkJCQkvKgorCQkJCSAqIGE6ICAgICAgICAgfC0tLS0tLS0KKwkJCQkgKiBiOiAtLS0tLS18CisJCQkJICovCisJCQkJaisrOworCQkJaWYgKGogPj0gYi0+bnIgfHwgZW5kIDwgYi0+cmFuZ2VzW2pdLnN0YXJ0KSB7CisJCQkJLyoKKwkJCQkgKiBiIGV4aGF1c3RlZCwgb3IKKwkJCQkgKiBhOiAgLS0tLXwKKwkJCQkgKiBiOiAgICAgICAgIHwtLS0tCisJCQkJICovCisJCQkJcmFuZ2Vfc2V0X2FwcGVuZChvdXQsIHN0YXJ0LCBlbmQpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHN0YXJ0ID49IGItPnJhbmdlc1tqXS5zdGFydCkgeworCQkJCS8qCisJCQkJICogYTogICAgIHwtLT8/Pz8KKwkJCQkgKiBiOiB8LS0tLS0tfAorCQkJCSAqLworCQkJCXN0YXJ0ID0gYi0+cmFuZ2VzW2pdLmVuZDsKKwkJCX0gZWxzZSBpZiAoZW5kID4gYi0+cmFuZ2VzW2pdLnN0YXJ0KSB7CisJCQkJLyoKKwkJCQkgKiBhOiB8LS0tLS18CisJCQkJICogYjogICAgfC0tPz8/Pz8KKwkJCQkgKi8KKwkJCQlpZiAoc3RhcnQgPCBiLT5yYW5nZXNbal0uc3RhcnQpCisJCQkJCXJhbmdlX3NldF9hcHBlbmQob3V0LCBzdGFydCwgYi0+cmFuZ2VzW2pdLnN0YXJ0KTsKKwkJCQlzdGFydCA9IGItPnJhbmdlc1tqXS5lbmQ7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZfcmFuZ2VzX2luaXQoc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmKQoreworCXJhbmdlX3NldF9pbml0KCZkaWZmLT5wYXJlbnQsIDApOworCXJhbmdlX3NldF9pbml0KCZkaWZmLT50YXJnZXQsIDApOworfQorCitzdGF0aWMgdm9pZCBkaWZmX3Jhbmdlc19yZWxlYXNlKHN0cnVjdCBkaWZmX3JhbmdlcyAqZGlmZikKK3sKKwlyYW5nZV9zZXRfcmVsZWFzZSgmZGlmZi0+cGFyZW50KTsKKwlyYW5nZV9zZXRfcmVsZWFzZSgmZGlmZi0+dGFyZ2V0KTsKK30KKworc3RhdGljIHZvaWQgbGluZV9sb2dfZGF0YV9pbml0KHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKQoreworCW1lbXNldChyLCAwLCBzaXplb2Yoc3RydWN0IGxpbmVfbG9nX2RhdGEpKTsKKwlyYW5nZV9zZXRfaW5pdCgmci0+cmFuZ2VzLCAwKTsKK30KKworc3RhdGljIHZvaWQgbGluZV9sb2dfZGF0YV9jbGVhcihzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcikKK3sKKwlyYW5nZV9zZXRfcmVsZWFzZSgmci0+cmFuZ2VzKTsKKwlpZiAoci0+cGFpcikKKwkJZGlmZl9mcmVlX2ZpbGVwYWlyKHItPnBhaXIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2xpbmVfbG9nX2RhdGEoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIpCit7CisJd2hpbGUgKHIpIHsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKm5leHQgPSByLT5uZXh0OworCQlsaW5lX2xvZ19kYXRhX2NsZWFyKHIpOworCQlmcmVlKHIpOworCQlyID0gbmV4dDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqCitzZWFyY2hfbGluZV9sb2dfZGF0YShzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqbGlzdCwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqKmluc2VydGlvbl9wb2ludCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcCA9IGxpc3Q7CisJaWYgKGluc2VydGlvbl9wb2ludCkKKwkJKmluc2VydGlvbl9wb2ludCA9IE5VTEw7CisJd2hpbGUgKHApIHsKKwkJaW50IGNtcCA9IHN0cmNtcChwLT5wYXRoLCBwYXRoKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gcDsKKwkJaWYgKGluc2VydGlvbl9wb2ludCAmJiBjbXAgPCAwKQorCQkJKmluc2VydGlvbl9wb2ludCA9IHA7CisJCXAgPSBwLT5uZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIE5vdGU6IHRha2VzIG93bmVyc2hpcCBvZiAncGF0aCcsIHdoaWNoIGhhcHBlbnMgdG8gYmUgd2hhdCB0aGUgb25seQorICogY2FsbGVyIG5lZWRzLgorICovCitzdGF0aWMgdm9pZCBsaW5lX2xvZ19kYXRhX2luc2VydChzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqKmxpc3QsCisJCQkJIGNoYXIgKnBhdGgsCisJCQkJIGxvbmcgYmVnaW4sIGxvbmcgZW5kKQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICppcDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcCA9IHNlYXJjaF9saW5lX2xvZ19kYXRhKCpsaXN0LCBwYXRoLCAmaXApOworCisJaWYgKHApIHsKKwkJcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUoJnAtPnJhbmdlcywgYmVnaW4sIGVuZCk7CisJCWZyZWUocGF0aCk7CisJCXJldHVybjsKKwl9CisKKwlwID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxpbmVfbG9nX2RhdGEpKTsKKwlwLT5wYXRoID0gcGF0aDsKKwlyYW5nZV9zZXRfYXBwZW5kKCZwLT5yYW5nZXMsIGJlZ2luLCBlbmQpOworCWlmIChpcCkgeworCQlwLT5uZXh0ID0gaXAtPm5leHQ7CisJCWlwLT5uZXh0ID0gcDsKKwl9IGVsc2UgeworCQlwLT5uZXh0ID0gKmxpc3Q7CisJCSpsaXN0ID0gcDsKKwl9Cit9CisKK3N0cnVjdCBjb2xsZWN0X2RpZmZfY2JkYXRhIHsKKwlzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmY7Cit9OworCitzdGF0aWMgaW50IGNvbGxlY3RfZGlmZl9jYihsb25nIHN0YXJ0X2EsIGxvbmcgY291bnRfYSwKKwkJCSAgIGxvbmcgc3RhcnRfYiwgbG9uZyBjb3VudF9iLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29sbGVjdF9kaWZmX2NiZGF0YSAqZCA9IGRhdGE7CisKKwlpZiAoY291bnRfYSA+PSAwKQorCQlyYW5nZV9zZXRfYXBwZW5kKCZkLT5kaWZmLT5wYXJlbnQsIHN0YXJ0X2EsIHN0YXJ0X2EgKyBjb3VudF9hKTsKKwlpZiAoY291bnRfYiA+PSAwKQorCQlyYW5nZV9zZXRfYXBwZW5kKCZkLT5kaWZmLT50YXJnZXQsIHN0YXJ0X2IsIHN0YXJ0X2IgKyBjb3VudF9iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxlY3RfZGlmZihtbWZpbGVfdCAqcGFyZW50LCBtbWZpbGVfdCAqdGFyZ2V0LCBzdHJ1Y3QgZGlmZl9yYW5nZXMgKm91dCkKK3sKKwlzdHJ1Y3QgY29sbGVjdF9kaWZmX2NiZGF0YSBjYmRhdGEgPSB7TlVMTH07CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCXhlY2ZnLmN0eGxlbiA9IHhlY2ZnLmludGVyaHVua2N0eGxlbiA9IDA7CisKKwljYmRhdGEuZGlmZiA9IG91dDsKKwl4ZWNmZy5odW5rX2Z1bmMgPSBjb2xsZWN0X2RpZmZfY2I7CisJbWVtc2V0KCZlY2IsIDAsIHNpemVvZihlY2IpKTsKKwllY2IucHJpdiA9ICZjYmRhdGE7CisJcmV0dXJuIHhkaV9kaWZmKHBhcmVudCwgdGFyZ2V0LCAmeHBwLCAmeGVjZmcsICZlY2IpOworfQorCisvKgorICogVGhlc2UgYXJlIGhhbmR5IGZvciBkZWJ1Z2dpbmcuICBSZW1vdmluZyB0aGVtIHdpdGggI2lmIDAgc2lsZW5jZXMKKyAqIHRoZSAidW51c2VkIGZ1bmN0aW9uIiB3YXJuaW5nLgorICovCisjaWYgMAorc3RhdGljIHZvaWQgZHVtcF9yYW5nZV9zZXQoc3RydWN0IHJhbmdlX3NldCAqcnMsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJaW50IGk7CisJcHJpbnRmKCJyYW5nZSBzZXQgJXMgKCVkIGl0ZW1zKTpcbiIsIGRlc2MsIHJzLT5ucik7CisJZm9yIChpID0gMDsgaSA8IHJzLT5ucjsgaSsrKQorCQlwcmludGYoIlx0WyVsZCwlbGRdXG4iLCBycy0+cmFuZ2VzW2ldLnN0YXJ0LCBycy0+cmFuZ2VzW2ldLmVuZCk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfbGluZV9sb2dfZGF0YShzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcikKK3sKKwljaGFyIGJ1Zls0MDk2XTsKKwl3aGlsZSAocikgeworCQlzbnByaW50ZihidWYsIDQwOTYsICJmaWxlICVzXG4iLCByLT5wYXRoKTsKKwkJZHVtcF9yYW5nZV9zZXQoJnItPnJhbmdlcywgYnVmKTsKKwkJciA9IHItPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX2RpZmZfcmFuZ2VzKHN0cnVjdCBkaWZmX3JhbmdlcyAqZGlmZiwgY29uc3QgY2hhciAqZGVzYykKK3sKKwlpbnQgaTsKKwlhc3NlcnQoZGlmZi0+cGFyZW50Lm5yID09IGRpZmYtPnRhcmdldC5ucik7CisJcHJpbnRmKCJkaWZmIHJhbmdlcyAlcyAoJWQgaXRlbXMpOlxuIiwgZGVzYywgZGlmZi0+cGFyZW50Lm5yKTsKKwlwcmludGYoIlx0cGFyZW50XHR0YXJnZXRcbiIpOworCWZvciAoaSA9IDA7IGkgPCBkaWZmLT5wYXJlbnQubnI7IGkrKykgeworCQlwcmludGYoIlx0WyVsZCwlbGRdXHRbJWxkLCVsZF1cbiIsCisJCSAgICAgICBkaWZmLT5wYXJlbnQucmFuZ2VzW2ldLnN0YXJ0LAorCQkgICAgICAgZGlmZi0+cGFyZW50LnJhbmdlc1tpXS5lbmQsCisJCSAgICAgICBkaWZmLT50YXJnZXQucmFuZ2VzW2ldLnN0YXJ0LAorCQkgICAgICAgZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXS5lbmQpOworCX0KK30KKyNlbmRpZgorCisKK3N0YXRpYyBpbnQgcmFuZ2VzX292ZXJsYXAoc3RydWN0IHJhbmdlICphLCBzdHJ1Y3QgcmFuZ2UgKmIpCit7CisJcmV0dXJuICEoYS0+ZW5kIDw9IGItPnN0YXJ0IHx8IGItPmVuZCA8PSBhLT5zdGFydCk7Cit9CisKKy8qCisgKiBHaXZlbiBhIGRpZmYgYW5kIHRoZSBzZXQgb2YgaW50ZXJlc3RpbmcgcmFuZ2VzLCBkZXRlcm1pbmUgYWxsIGh1bmtzCisgKiBvZiB0aGUgZGlmZiB3aGljaCB0b3VjaCAob3ZlcmxhcCkgYXQgbGVhc3Qgb25lIG9mIHRoZSBpbnRlcmVzdGluZworICogcmFuZ2VzIGluIHRoZSB0YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkIGRpZmZfcmFuZ2VzX2ZpbHRlcl90b3VjaGVkKHN0cnVjdCBkaWZmX3JhbmdlcyAqb3V0LAorCQkJCSAgICAgICBzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYsCisJCQkJICAgICAgIHN0cnVjdCByYW5nZV9zZXQgKnJzKQoreworCXVuc2lnbmVkIGludCBpLCBqID0gMDsKKworCWFzc2VydChvdXQtPnRhcmdldC5uciA9PSAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaWZmLT50YXJnZXQubnI7IGkrKykgeworCQl3aGlsZSAoZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXS5zdGFydCA+IHJzLT5yYW5nZXNbal0uZW5kKSB7CisJCQlqKys7CisJCQlpZiAoaiA9PSBycy0+bnIpCisJCQkJcmV0dXJuOworCQl9CisJCWlmIChyYW5nZXNfb3ZlcmxhcCgmZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXSwgJnJzLT5yYW5nZXNbal0pKSB7CisJCQlyYW5nZV9zZXRfYXBwZW5kKCZvdXQtPnBhcmVudCwKKwkJCQkJIGRpZmYtPnBhcmVudC5yYW5nZXNbaV0uc3RhcnQsCisJCQkJCSBkaWZmLT5wYXJlbnQucmFuZ2VzW2ldLmVuZCk7CisJCQlyYW5nZV9zZXRfYXBwZW5kKCZvdXQtPnRhcmdldCwKKwkJCQkJIGRpZmYtPnRhcmdldC5yYW5nZXNbaV0uc3RhcnQsCisJCQkJCSBkaWZmLT50YXJnZXQucmFuZ2VzW2ldLmVuZCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBBZGp1c3QgdGhlIGxpbmUgY291bnRzIGluICdycycgdG8gYWNjb3VudCBmb3IgdGhlIGxpbmVzCisgKiBhZGRlZC9yZW1vdmVkIGluIHRoZSBkaWZmLgorICovCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfc2hpZnRfZGlmZihzdHJ1Y3QgcmFuZ2Vfc2V0ICpvdXQsCisJCQkJIHN0cnVjdCByYW5nZV9zZXQgKnJzLAorCQkJCSBzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYpCit7CisJdW5zaWduZWQgaW50IGksIGogPSAwOworCWxvbmcgb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgcmFuZ2UgKnNyYyA9IHJzLT5yYW5nZXM7CisJc3RydWN0IHJhbmdlICp0YXJnZXQgPSBkaWZmLT50YXJnZXQucmFuZ2VzOworCXN0cnVjdCByYW5nZSAqcGFyZW50ID0gZGlmZi0+cGFyZW50LnJhbmdlczsKKworCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykgeworCQl3aGlsZSAoaiA8IGRpZmYtPnRhcmdldC5uciAmJiBzcmNbaV0uc3RhcnQgPj0gdGFyZ2V0W2pdLnN0YXJ0KSB7CisJCQlvZmZzZXQgKz0gKHBhcmVudFtqXS5lbmQtcGFyZW50W2pdLnN0YXJ0KQorCQkJCS0gKHRhcmdldFtqXS5lbmQtdGFyZ2V0W2pdLnN0YXJ0KTsKKwkJCWorKzsKKwkJfQorCQlyYW5nZV9zZXRfYXBwZW5kKG91dCwgc3JjW2ldLnN0YXJ0K29mZnNldCwgc3JjW2ldLmVuZCtvZmZzZXQpOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgZGlmZiBhbmQgdGhlIHNldCBvZiBpbnRlcmVzdGluZyByYW5nZXMsIG1hcCB0aGUgcmFuZ2VzCisgKiBhY3Jvc3MgdGhlIGRpZmYuICBUaGF0IGlzOiBvYnNlcnZlIHRoYXQgdGhlIHRhcmdldCBjb21taXQgdGFrZXMKKyAqIGJsYW1lIGZvciBhbGwgdGhlICsgKHRhcmdldC1zaWRlKSByYW5nZXMuICBTbyBmb3IgZXZlcnkgcGFpciBvZgorICogcmFuZ2VzIGluIHRoZSBkaWZmIHRoYXQgd2FzIHRvdWNoZWQsIHdlIHJlbW92ZSB0aGUgbGF0dGVyIGFuZCBhZGQKKyAqIGl0cyBwYXJlbnQgc2lkZS4KKyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X21hcF9hY3Jvc3NfZGlmZihzdHJ1Y3QgcmFuZ2Vfc2V0ICpvdXQsCisJCQkJICAgICAgc3RydWN0IHJhbmdlX3NldCAqcnMsCisJCQkJICAgICAgc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmLAorCQkJCSAgICAgIHN0cnVjdCBkaWZmX3JhbmdlcyAqKnRvdWNoZWRfb3V0KQoreworCXN0cnVjdCBkaWZmX3JhbmdlcyAqdG91Y2hlZCA9IHhtYWxsb2Moc2l6ZW9mKCp0b3VjaGVkKSk7CisJc3RydWN0IHJhbmdlX3NldCB0bXAxID0gUkFOR0VfU0VUX0lOSVQ7CisJc3RydWN0IHJhbmdlX3NldCB0bXAyID0gUkFOR0VfU0VUX0lOSVQ7CisKKwlkaWZmX3Jhbmdlc19pbml0KHRvdWNoZWQpOworCWRpZmZfcmFuZ2VzX2ZpbHRlcl90b3VjaGVkKHRvdWNoZWQsIGRpZmYsIHJzKTsKKwlyYW5nZV9zZXRfZGlmZmVyZW5jZSgmdG1wMSwgcnMsICZ0b3VjaGVkLT50YXJnZXQpOworCXJhbmdlX3NldF9zaGlmdF9kaWZmKCZ0bXAyLCAmdG1wMSwgZGlmZik7CisJcmFuZ2Vfc2V0X3VuaW9uKG91dCwgJnRtcDIsICZ0b3VjaGVkLT5wYXJlbnQpOworCXJhbmdlX3NldF9yZWxlYXNlKCZ0bXAxKTsKKwlyYW5nZV9zZXRfcmVsZWFzZSgmdG1wMik7CisKKwkqdG91Y2hlZF9vdXQgPSB0b3VjaGVkOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqY2hlY2tfc2luZ2xlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IG9iamVjdCAqY29tbWl0ID0gTlVMTDsKKwlpbnQgZm91bmQgPSAtMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLml0ZW07CisJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQlvYmogPSBkZXJlZl90YWcocmV2cy0+cmVwbywgb2JqLCBOVUxMLCAwKTsKKwkJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJZGllKCJOb24gY29tbWl0ICVzPyIsIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lKTsKKwkJaWYgKGNvbW1pdCkKKwkJCWRpZSgiTW9yZSB0aGFuIG9uZSBjb21taXQgdG8gZGlnIGZyb206ICVzIGFuZCAlcz8iLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tmb3VuZF0ubmFtZSk7CisJCWNvbW1pdCA9IG9iajsKKwkJZm91bmQgPSBpOworCX0KKworCWlmICghY29tbWl0KQorCQlkaWUoIk5vIGNvbW1pdCBzcGVjaWZpZWQ/Iik7CisKKwlyZXR1cm4gKHN0cnVjdCBjb21taXQgKikgY29tbWl0OworfQorCitzdGF0aWMgdm9pZCBmaWxsX2Jsb2Jfc2hhMShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWMpCit7CisJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWlmIChnZXRfdHJlZV9lbnRyeShyLCAmY29tbWl0LT5vYmplY3Qub2lkLCBzcGVjLT5wYXRoLCAmb2lkLCAmbW9kZSkpCisJCWRpZSgiVGhlcmUgaXMgbm8gcGF0aCAlcyBpbiB0aGUgY29tbWl0Iiwgc3BlYy0+cGF0aCk7CisJZmlsbF9maWxlc3BlYyhzcGVjLCAmb2lkLCAxLCBtb2RlKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZmlsbF9saW5lX2VuZHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYywKKwkJCSAgIGxvbmcgKmxpbmVzLAorCQkJICAgdW5zaWduZWQgbG9uZyAqKmxpbmVfZW5kcykKK3sKKwlpbnQgbnVtID0gMCwgc2l6ZSA9IDUwOworCWxvbmcgY3VyID0gMDsKKwl1bnNpZ25lZCBsb25nICplbmRzID0gTlVMTDsKKwljaGFyICpkYXRhID0gTlVMTDsKKworCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHIsIHNwZWMsIDApKQorCQlkaWUoIkNhbm5vdCByZWFkIGJsb2IgJXMiLCBvaWRfdG9faGV4KCZzcGVjLT5vaWQpKTsKKworCUFMTE9DX0FSUkFZKGVuZHMsIHNpemUpOworCWVuZHNbY3VyKytdID0gMDsKKwlkYXRhID0gc3BlYy0+ZGF0YTsKKwl3aGlsZSAobnVtIDwgc3BlYy0+c2l6ZSkgeworCQlpZiAoZGF0YVtudW1dID09ICdcbicgfHwgbnVtID09IHNwZWMtPnNpemUgLSAxKSB7CisJCQlBTExPQ19HUk9XKGVuZHMsIChjdXIgKyAxKSwgc2l6ZSk7CisJCQllbmRzW2N1cisrXSA9IG51bTsKKwkJfQorCQludW0rKzsKKwl9CisKKwkvKiBzaHJpbmsgdGhlIGFycmF5IHRvIGZpdCB0aGUgZWxlbWVudHMgKi8KKwlSRUFMTE9DX0FSUkFZKGVuZHMsIGN1cik7CisJKmxpbmVzID0gY3VyLTE7CisJKmxpbmVfZW5kcyA9IGVuZHM7Cit9CisKK3N0cnVjdCBudGhfbGluZV9jYiB7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWM7CisJbG9uZyBsaW5lczsKKwl1bnNpZ25lZCBsb25nICpsaW5lX2VuZHM7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqbnRoX2xpbmUodm9pZCAqZGF0YSwgbG9uZyBsaW5lKQoreworCXN0cnVjdCBudGhfbGluZV9jYiAqZCA9IGRhdGE7CisJYXNzZXJ0KGQgJiYgbGluZSA8PSBkLT5saW5lcyk7CisJYXNzZXJ0KGQtPnNwZWMgJiYgZC0+c3BlYy0+ZGF0YSk7CisKKwlpZiAobGluZSA9PSAwKQorCQlyZXR1cm4gKGNoYXIgKilkLT5zcGVjLT5kYXRhOworCWVsc2UKKwkJcmV0dXJuIChjaGFyICopZC0+c3BlYy0+ZGF0YSArIGQtPmxpbmVfZW5kc1tsaW5lXSArIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqCitwYXJzZV9saW5lcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCSAgICBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdHJpbmdfbGlzdCAqYXJncykKK3sKKwlsb25nIGxpbmVzID0gMDsKKwl1bnNpZ25lZCBsb25nICplbmRzID0gTlVMTDsKKwlzdHJ1Y3QgbnRoX2xpbmVfY2IgY2JfZGF0YTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2VzID0gTlVMTDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcDsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgYXJncykgeworCQljb25zdCBjaGFyICpuYW1lX3BhcnQsICpyYW5nZV9wYXJ0OworCQljaGFyICpmdWxsX25hbWU7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjOworCQlsb25nIGJlZ2luID0gMCwgZW5kID0gMDsKKwkJbG9uZyBhbmNob3I7CisKKwkJbmFtZV9wYXJ0ID0gc2tpcF9yYW5nZV9hcmcoaXRlbS0+c3RyaW5nLCByLT5pbmRleCk7CisJCWlmICghbmFtZV9wYXJ0IHx8ICpuYW1lX3BhcnQgIT0gJzonIHx8ICFuYW1lX3BhcnRbMV0pCisJCQlkaWUoIi1MIGFyZ3VtZW50IG5vdCAnc3RhcnQsZW5kOmZpbGUnIG9yICc6ZnVuY25hbWU6ZmlsZSc6ICVzIiwKKwkJCSAgICBpdGVtLT5zdHJpbmcpOworCQlyYW5nZV9wYXJ0ID0geHN0cm5kdXAoaXRlbS0+c3RyaW5nLCBuYW1lX3BhcnQgLSBpdGVtLT5zdHJpbmcpOworCQluYW1lX3BhcnQrKzsKKworCQlmdWxsX25hbWUgPSBwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMCwKKwkJCQkJbmFtZV9wYXJ0KTsKKworCQlzcGVjID0gYWxsb2NfZmlsZXNwZWMoZnVsbF9uYW1lKTsKKwkJZmlsbF9ibG9iX3NoYTEociwgY29tbWl0LCBzcGVjKTsKKwkJZmlsbF9saW5lX2VuZHMociwgc3BlYywgJmxpbmVzLCAmZW5kcyk7CisJCWNiX2RhdGEuc3BlYyA9IHNwZWM7CisJCWNiX2RhdGEubGluZXMgPSBsaW5lczsKKwkJY2JfZGF0YS5saW5lX2VuZHMgPSBlbmRzOworCisJCXAgPSBzZWFyY2hfbGluZV9sb2dfZGF0YShyYW5nZXMsIGZ1bGxfbmFtZSwgTlVMTCk7CisJCWlmIChwICYmIHAtPnJhbmdlcy5ucikKKwkJCWFuY2hvciA9IHAtPnJhbmdlcy5yYW5nZXNbcC0+cmFuZ2VzLm5yIC0gMV0uZW5kICsgMTsKKwkJZWxzZQorCQkJYW5jaG9yID0gMTsKKworCQlpZiAocGFyc2VfcmFuZ2VfYXJnKHJhbmdlX3BhcnQsIG50aF9saW5lLCAmY2JfZGF0YSwKKwkJCQkgICAgbGluZXMsIGFuY2hvciwgJmJlZ2luLCAmZW5kLAorCQkJCSAgICBmdWxsX25hbWUsIHItPmluZGV4KSkKKwkJCWRpZSgibWFsZm9ybWVkIC1MIGFyZ3VtZW50ICclcyciLCByYW5nZV9wYXJ0KTsKKwkJaWYgKCghbGluZXMgJiYgKGJlZ2luIHx8IGVuZCkpIHx8IGxpbmVzIDwgYmVnaW4pCisJCQlkaWUoImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIiwgbmFtZV9wYXJ0LCBsaW5lcyk7CisJCWlmIChiZWdpbiA8IDEpCisJCQliZWdpbiA9IDE7CisJCWlmIChlbmQgPCAxIHx8IGxpbmVzIDwgZW5kKQorCQkJZW5kID0gbGluZXM7CisJCWJlZ2luLS07CisJCWxpbmVfbG9nX2RhdGFfaW5zZXJ0KCZyYW5nZXMsIGZ1bGxfbmFtZSwgYmVnaW4sIGVuZCk7CisKKwkJZnJlZV9maWxlc3BlYyhzcGVjKTsKKwkJRlJFRV9BTkRfTlVMTChlbmRzKTsKKwl9CisKKwlmb3IgKHAgPSByYW5nZXM7IHA7IHAgPSBwLT5uZXh0KQorCQlzb3J0X2FuZF9tZXJnZV9yYW5nZV9zZXQoJnAtPnJhbmdlcyk7CisKKwlyZXR1cm4gcmFuZ2VzOworfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKmxpbmVfbG9nX2RhdGFfY29weV9vbmUoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJldCA9IHhtYWxsb2Moc2l6ZW9mKCpyZXQpKTsKKworCWFzc2VydChyKTsKKwlsaW5lX2xvZ19kYXRhX2luaXQocmV0KTsKKwlyYW5nZV9zZXRfY29weSgmcmV0LT5yYW5nZXMsICZyLT5yYW5nZXMpOworCisJcmV0LT5wYXRoID0geHN0cmR1cChyLT5wYXRoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqCitsaW5lX2xvZ19kYXRhX2NvcHkoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJldCA9IE5VTEw7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnRtcCA9IE5VTEwsICpwcmV2ID0gTlVMTDsKKworCWFzc2VydChyKTsKKwlyZXQgPSB0bXAgPSBwcmV2ID0gbGluZV9sb2dfZGF0YV9jb3B5X29uZShyKTsKKwlyID0gci0+bmV4dDsKKwl3aGlsZSAocikgeworCQl0bXAgPSBsaW5lX2xvZ19kYXRhX2NvcHlfb25lKHIpOworCQlwcmV2LT5uZXh0ID0gdG1wOworCQlwcmV2ID0gdG1wOworCQlyID0gci0+bmV4dDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBtZXJnZSB0d28gcmFuZ2Ugc2V0cyBhY3Jvc3MgZmlsZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqbGluZV9sb2dfZGF0YV9tZXJnZShzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqYSwKKwkJCQkJCSBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqYikKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqaGVhZCA9IE5VTEwsICoqcHAgPSAmaGVhZDsKKworCXdoaWxlIChhIHx8IGIpIHsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnNyYzsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnNyYzIgPSBOVUxMOworCQlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqZDsKKwkJaW50IGNtcDsKKwkJaWYgKCFhKQorCQkJY21wID0gMTsKKwkJZWxzZSBpZiAoIWIpCisJCQljbXAgPSAtMTsKKwkJZWxzZQorCQkJY21wID0gc3RyY21wKGEtPnBhdGgsIGItPnBhdGgpOworCQlpZiAoY21wIDwgMCkgeworCQkJc3JjID0gYTsKKwkJCWEgPSBhLT5uZXh0OworCQl9IGVsc2UgaWYgKGNtcCA9PSAwKSB7CisJCQlzcmMgPSBhOworCQkJYSA9IGEtPm5leHQ7CisJCQlzcmMyID0gYjsKKwkJCWIgPSBiLT5uZXh0OworCQl9IGVsc2UgeworCQkJc3JjID0gYjsKKwkJCWIgPSBiLT5uZXh0OworCQl9CisJCWQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgbGluZV9sb2dfZGF0YSkpOworCQlsaW5lX2xvZ19kYXRhX2luaXQoZCk7CisJCWQtPnBhdGggPSB4c3RyZHVwKHNyYy0+cGF0aCk7CisJCSpwcCA9IGQ7CisJCXBwID0gJmQtPm5leHQ7CisJCWlmIChzcmMyKQorCQkJcmFuZ2Vfc2V0X3VuaW9uKCZkLT5yYW5nZXMsICZzcmMtPnJhbmdlcywgJnNyYzItPnJhbmdlcyk7CisJCWVsc2UKKwkJCXJhbmdlX3NldF9jb3B5KCZkLT5yYW5nZXMsICZzcmMtPnJhbmdlcyk7CisJfQorCisJcmV0dXJuIGhlYWQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9saW5lX3JhbmdlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlKQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpvbGRfbGluZSA9IE5VTEw7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKm5ld19saW5lID0gTlVMTDsKKworCW9sZF9saW5lID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmxpbmVfbG9nX2RhdGEsICZjb21taXQtPm9iamVjdCk7CisJaWYgKG9sZF9saW5lICYmIHJhbmdlKSB7CisJCW5ld19saW5lID0gbGluZV9sb2dfZGF0YV9tZXJnZShvbGRfbGluZSwgcmFuZ2UpOworCQlmcmVlX2xpbmVfbG9nX2RhdGEob2xkX2xpbmUpOworCX0gZWxzZSBpZiAocmFuZ2UpCisJCW5ld19saW5lID0gbGluZV9sb2dfZGF0YV9jb3B5KHJhbmdlKTsKKworCWlmIChuZXdfbGluZSkKKwkJYWRkX2RlY29yYXRpb24oJnJldnMtPmxpbmVfbG9nX2RhdGEsICZjb21taXQtPm9iamVjdCwgbmV3X2xpbmUpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9jb21taXRfbGluZV9yYW5nZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcjsKKwlyID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmxpbmVfbG9nX2RhdGEsICZjb21taXQtPm9iamVjdCk7CisJaWYgKCFyKQorCQlyZXR1cm47CisJZnJlZV9saW5lX2xvZ19kYXRhKHIpOworCWFkZF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKmxvb2t1cF9saW5lX3JhbmdlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJICAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqZDsKKworCXJldCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QpOworCisJZm9yIChkID0gcmV0OyBkOyBkID0gZC0+bmV4dCkKKwkJcmFuZ2Vfc2V0X2NoZWNrX2ludmFyaWFudHMoJmQtPnJhbmdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhbWVfcGF0aHNfaW5fcGF0aHNwZWNfYW5kX3JhbmdlKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkJCSAgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJaW50IGk7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnI7CisKKwlmb3IgKGkgPSAwLCByID0gcmFuZ2U7IGkgPCBwYXRoc3BlYy0+bnIgJiYgcjsgaSsrLCByID0gci0+bmV4dCkKKwkJaWYgKHN0cmNtcChwYXRoc3BlYy0+aXRlbXNbaV0ubWF0Y2gsIHItPnBhdGgpKQorCQkJcmV0dXJuIDA7CisJaWYgKGkgPCBwYXRoc3BlYy0+bnIgfHwgcikKKwkJLyogZGlmZmVyZW50IG51bWJlciBvZiBwYXRoc3BlYyBpdGVtcyBhbmQgcmFuZ2VzICovCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3BhdGhzcGVjX2Zyb21fcmFuZ2VzKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkJICAgICAgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcjsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcnJheSA9IEFSR1ZfQVJSQVlfSU5JVDsKKwljb25zdCBjaGFyICoqcGF0aHM7CisKKwlmb3IgKHIgPSByYW5nZTsgcjsgciA9IHItPm5leHQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJyYXksIHItPnBhdGgpOworCXBhdGhzID0gYXJndl9hcnJheV9kZXRhY2goJmFycmF5KTsKKworCXBhcnNlX3BhdGhzcGVjKHBhdGhzcGVjLCAwLCBQQVRIU1BFQ19QUkVGRVJfRlVMTCwgIiIsIHBhdGhzKTsKKwkvKiBzdHJpbmdzIGFyZSBub3cgb3duZWQgYnkgcGF0aHNwZWMgKi8KKwlmcmVlKHBhdGhzKTsKK30KKwordm9pZCBsaW5lX2xvZ19pbml0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdHJpbmdfbGlzdCAqYXJncykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZTsKKworCWNvbW1pdCA9IGNoZWNrX3NpbmdsZV9jb21taXQocmV2KTsKKwlyYW5nZSA9IHBhcnNlX2xpbmVzKHJldi0+ZGlmZm9wdC5yZXBvLCBjb21taXQsIHByZWZpeCwgYXJncyk7CisJYWRkX2xpbmVfcmFuZ2UocmV2LCBjb21taXQsIHJhbmdlKTsKKworCXBhcnNlX3BhdGhzcGVjX2Zyb21fcmFuZ2VzKCZyZXYtPmRpZmZvcHQucGF0aHNwZWMsIHJhbmdlKTsKK30KKworc3RhdGljIHZvaWQgbW92ZV9kaWZmX3F1ZXVlKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqZHN0LAorCQkJICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqc3JjKQoreworCWFzc2VydChzcmMgIT0gZHN0KTsKKwltZW1jcHkoZHN0LCBzcmMsIHNpemVvZihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QpKTsKKwlESUZGX1FVRVVFX0NMRUFSKHNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlcl9kaWZmc19mb3JfcGF0aHMoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlLCBpbnQga2VlcF9kZWxldGlvbnMpCit7CisJaW50IGk7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IG91dHE7CisJRElGRl9RVUVVRV9DTEVBUigmb3V0cSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJnID0gTlVMTDsKKworCQlpZiAoIURJRkZfRklMRV9WQUxJRChwLT50d28pKSB7CisJCQlpZiAoa2VlcF9kZWxldGlvbnMpCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJCWVsc2UKKwkJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJCQljb250aW51ZTsKKwkJfQorCQlmb3IgKHJnID0gcmFuZ2U7IHJnOyByZyA9IHJnLT5uZXh0KSB7CisJCQlpZiAoIXN0cmNtcChyZy0+cGF0aCwgcC0+dHdvLT5wYXRoKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAocmcpCisJCQlkaWZmX3EoJm91dHEsIHApOworCQllbHNlCisJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJfQorCWZyZWUoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZSk7CisJZGlmZl9xdWV1ZWRfZGlmZiA9IG91dHE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpZmZfbWlnaHRfYmVfcmVuYW1lKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykKKwkJaWYgKCFESUZGX0ZJTEVfVkFMSUQoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+b25lKSkgeworCQkJLyogZnByaW50ZihzdGRlcnIsICJkaWZmX21pZ2h0X2JlX3JlbmFtZSBmb3VuZCBjcmVhdGlvbiBvZjogJXNcbiIsICovCisJCQkvKiAJZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+dHdvLT5wYXRoKTsgKi8KKwkJCXJldHVybiAxOworCQl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVlX2RpZmZzKHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSwKKwkJCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwKKwkJCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcXVldWUsCisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXQgKnBhcmVudCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwgKnBhcmVudF90cmVlX29pZDsKKworCWFzc2VydChjb21taXQpOworCisJdHJlZV9vaWQgPSBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCk7CisJcGFyZW50X3RyZWVfb2lkID0gcGFyZW50ID8gZ2V0X2NvbW1pdF90cmVlX29pZChwYXJlbnQpIDogTlVMTDsKKworCWlmIChvcHQtPmRldGVjdF9yZW5hbWUgJiYKKwkgICAgIXNhbWVfcGF0aHNfaW5fcGF0aHNwZWNfYW5kX3JhbmdlKCZvcHQtPnBhdGhzcGVjLCByYW5nZSkpIHsKKwkJY2xlYXJfcGF0aHNwZWMoJm9wdC0+cGF0aHNwZWMpOworCQlwYXJzZV9wYXRoc3BlY19mcm9tX3Jhbmdlcygmb3B0LT5wYXRoc3BlYywgcmFuZ2UpOworCX0KKwlESUZGX1FVRVVFX0NMRUFSKCZkaWZmX3F1ZXVlZF9kaWZmKTsKKwlkaWZmX3RyZWVfb2lkKHBhcmVudF90cmVlX29pZCwgdHJlZV9vaWQsICIiLCBvcHQpOworCWlmIChvcHQtPmRldGVjdF9yZW5hbWUgJiYgZGlmZl9taWdodF9iZV9yZW5hbWUoKSkgeworCQkvKiBtdXN0IGxvb2sgYXQgdGhlIGZ1bGwgdHJlZSBkaWZmIHRvIGRldGVjdCByZW5hbWVzICovCisJCWNsZWFyX3BhdGhzcGVjKCZvcHQtPnBhdGhzcGVjKTsKKwkJRElGRl9RVUVVRV9DTEVBUigmZGlmZl9xdWV1ZWRfZGlmZik7CisKKwkJZGlmZl90cmVlX29pZChwYXJlbnRfdHJlZV9vaWQsIHRyZWVfb2lkLCAiIiwgb3B0KTsKKworCQlmaWx0ZXJfZGlmZnNfZm9yX3BhdGhzKHJhbmdlLCAxKTsKKwkJZGlmZmNvcmVfc3RkKG9wdCk7CisJCWZpbHRlcl9kaWZmc19mb3JfcGF0aHMocmFuZ2UsIDApOworCX0KKwltb3ZlX2RpZmZfcXVldWUocXVldWUsICZkaWZmX3F1ZXVlZF9kaWZmKTsKK30KKworc3RhdGljIGNoYXIgKmdldF9udGhfbGluZShsb25nIGxpbmUsIHVuc2lnbmVkIGxvbmcgKmVuZHMsIHZvaWQgKmRhdGEpCit7CisJaWYgKGxpbmUgPT0gMCkKKwkJcmV0dXJuIChjaGFyICopZGF0YTsKKwllbHNlCisJCXJldHVybiAoY2hhciAqKWRhdGEgKyBlbmRzW2xpbmVdICsgMTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbGluZShjb25zdCBjaGFyICpwcmVmaXgsIGNoYXIgZmlyc3QsCisJCSAgICAgICBsb25nIGxpbmUsIHVuc2lnbmVkIGxvbmcgKmVuZHMsIHZvaWQgKmRhdGEsCisJCSAgICAgICBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqcmVzZXQsIEZJTEUgKmZpbGUpCit7CisJY2hhciAqYmVnaW4gPSBnZXRfbnRoX2xpbmUobGluZSwgZW5kcywgZGF0YSk7CisJY2hhciAqZW5kID0gZ2V0X250aF9saW5lKGxpbmUrMSwgZW5kcywgZGF0YSk7CisJaW50IGhhZF9ubCA9IDA7CisKKwlpZiAoZW5kID4gYmVnaW4gJiYgZW5kWy0xXSA9PSAnXG4nKSB7CisJCWVuZC0tOworCQloYWRfbmwgPSAxOworCX0KKworCWZwdXRzKHByZWZpeCwgZmlsZSk7CisJZnB1dHMoY29sb3IsIGZpbGUpOworCXB1dGMoZmlyc3QsIGZpbGUpOworCWZ3cml0ZShiZWdpbiwgMSwgZW5kLWJlZ2luLCBmaWxlKTsKKwlmcHV0cyhyZXNldCwgZmlsZSk7CisJcHV0YygnXG4nLCBmaWxlKTsKKwlpZiAoIWhhZF9ubCkKKwkJZnB1dHMoIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIsIGZpbGUpOworfQorCitzdGF0aWMgY2hhciAqb3V0cHV0X3ByZWZpeChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJY2hhciAqcHJlZml4ID0gIiI7CisKKwlpZiAob3B0LT5vdXRwdXRfcHJlZml4KSB7CisJCXN0cnVjdCBzdHJidWYgKnNiID0gb3B0LT5vdXRwdXRfcHJlZml4KG9wdCwgb3B0LT5vdXRwdXRfcHJlZml4X2RhdGEpOworCQlwcmVmaXggPSBzYi0+YnVmOworCX0KKworCXJldHVybiBwcmVmaXg7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfZGlmZl9oYWNreV9vbmUoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgaiA9IDA7CisJbG9uZyBwX2xpbmVzLCB0X2xpbmVzOworCXVuc2lnbmVkIGxvbmcgKnBfZW5kcyA9IE5VTEwsICp0X2VuZHMgPSBOVUxMOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyID0gcmFuZ2UtPnBhaXI7CisJc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmID0gJnJhbmdlLT5kaWZmOworCisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gJnJldi0+ZGlmZm9wdDsKKwljaGFyICpwcmVmaXggPSBvdXRwdXRfcHJlZml4KG9wdCk7CisJY29uc3QgY2hhciAqY19yZXNldCA9IGRpZmZfZ2V0X2NvbG9yKG9wdC0+dXNlX2NvbG9yLCBESUZGX1JFU0VUKTsKKwljb25zdCBjaGFyICpjX2ZyYWcgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9GUkFHSU5GTyk7CisJY29uc3QgY2hhciAqY19tZXRhID0gZGlmZl9nZXRfY29sb3Iob3B0LT51c2VfY29sb3IsIERJRkZfTUVUQUlORk8pOworCWNvbnN0IGNoYXIgKmNfb2xkID0gZGlmZl9nZXRfY29sb3Iob3B0LT51c2VfY29sb3IsIERJRkZfRklMRV9PTEQpOworCWNvbnN0IGNoYXIgKmNfbmV3ID0gZGlmZl9nZXRfY29sb3Iob3B0LT51c2VfY29sb3IsIERJRkZfRklMRV9ORVcpOworCWNvbnN0IGNoYXIgKmNfY29udGV4dCA9IGRpZmZfZ2V0X2NvbG9yKG9wdC0+dXNlX2NvbG9yLCBESUZGX0NPTlRFWFQpOworCisJaWYgKCFwYWlyIHx8ICFkaWZmKQorCQlyZXR1cm47CisKKwlpZiAocGFpci0+b25lLT5vaWRfdmFsaWQpCisJCWZpbGxfbGluZV9lbmRzKHJldi0+ZGlmZm9wdC5yZXBvLCBwYWlyLT5vbmUsICZwX2xpbmVzLCAmcF9lbmRzKTsKKwlmaWxsX2xpbmVfZW5kcyhyZXYtPmRpZmZvcHQucmVwbywgcGFpci0+dHdvLCAmdF9saW5lcywgJnRfZW5kcyk7CisKKwlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzJXNkaWZmIC0tZ2l0IGEvJXMgYi8lcyVzXG4iLCBwcmVmaXgsIGNfbWV0YSwgcGFpci0+b25lLT5wYXRoLCBwYWlyLT50d28tPnBhdGgsIGNfcmVzZXQpOworCWZwcmludGYob3B0LT5maWxlLCAiJXMlcy0tLSAlcyVzJXNcbiIsIHByZWZpeCwgY19tZXRhLAorCSAgICAgICBwYWlyLT5vbmUtPm9pZF92YWxpZCA/ICJhLyIgOiAiIiwKKwkgICAgICAgcGFpci0+b25lLT5vaWRfdmFsaWQgPyBwYWlyLT5vbmUtPnBhdGggOiAiL2Rldi9udWxsIiwKKwkgICAgICAgY19yZXNldCk7CisJZnByaW50ZihvcHQtPmZpbGUsICIlcyVzKysrIGIvJXMlc1xuIiwgcHJlZml4LCBjX21ldGEsIHBhaXItPnR3by0+cGF0aCwgY19yZXNldCk7CisJZm9yIChpID0gMDsgaSA8IHJhbmdlLT5yYW5nZXMubnI7IGkrKykgeworCQlsb25nIHBfc3RhcnQsIHBfZW5kOworCQlsb25nIHRfc3RhcnQgPSByYW5nZS0+cmFuZ2VzLnJhbmdlc1tpXS5zdGFydDsKKwkJbG9uZyB0X2VuZCA9IHJhbmdlLT5yYW5nZXMucmFuZ2VzW2ldLmVuZDsKKwkJbG9uZyB0X2N1ciA9IHRfc3RhcnQ7CisJCXVuc2lnbmVkIGludCBqX2xhc3Q7CisKKwkJd2hpbGUgKGogPCBkaWZmLT50YXJnZXQubnIgJiYgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5lbmQgPCB0X3N0YXJ0KQorCQkJaisrOworCQlpZiAoaiA9PSBkaWZmLT50YXJnZXQubnIgfHwgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5zdGFydCA+IHRfZW5kKQorCQkJY29udGludWU7CisKKwkJLyogU2NhbiBhaGVhZCB0byBkZXRlcm1pbmUgdGhlIGxhc3QgZGlmZiB0aGF0IGZhbGxzIGluIHRoaXMgcmFuZ2UgKi8KKwkJal9sYXN0ID0gajsKKwkJd2hpbGUgKGpfbGFzdCA8IGRpZmYtPnRhcmdldC5uciAmJiBkaWZmLT50YXJnZXQucmFuZ2VzW2pfbGFzdF0uc3RhcnQgPCB0X2VuZCkKKwkJCWpfbGFzdCsrOworCQlpZiAoal9sYXN0ID4gaikKKwkJCWpfbGFzdC0tOworCisJCS8qCisJCSAqIENvbXB1dGUgcGFyZW50IGh1bmsgaGVhZGVyczogd2Uga25vdyB0aGF0IHRoZSBkaWZmCisJCSAqIGhhcyB0aGUgY29ycmVjdCBsaW5lIG51bWJlcnMgKGJ1dCBub3QgYWxsIGh1bmtzKS4KKwkJICogU28gaXQgc3VmZmljZXMgdG8gc2hpZnQgdGhlIHN0YXJ0L2VuZCBhY2NvcmRpbmcgdG8KKwkJICogdGhlIGxpbmUgbnVtYmVycyBvZiB0aGUgZmlyc3QvbGFzdCBodW5rKHMpIHRoYXQKKwkJICogZmFsbCBpbiB0aGlzIHJhbmdlLgorCQkgKi8KKwkJaWYgKHRfc3RhcnQgPCBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLnN0YXJ0KQorCQkJcF9zdGFydCA9IGRpZmYtPnBhcmVudC5yYW5nZXNbal0uc3RhcnQgLSAoZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5zdGFydC10X3N0YXJ0KTsKKwkJZWxzZQorCQkJcF9zdGFydCA9IGRpZmYtPnBhcmVudC5yYW5nZXNbal0uc3RhcnQ7CisJCWlmICh0X2VuZCA+IGRpZmYtPnRhcmdldC5yYW5nZXNbal9sYXN0XS5lbmQpCisJCQlwX2VuZCA9IGRpZmYtPnBhcmVudC5yYW5nZXNbal9sYXN0XS5lbmQgKyAodF9lbmQtZGlmZi0+dGFyZ2V0LnJhbmdlc1tqX2xhc3RdLmVuZCk7CisJCWVsc2UKKwkJCXBfZW5kID0gZGlmZi0+cGFyZW50LnJhbmdlc1tqX2xhc3RdLmVuZDsKKworCQlpZiAoIXBfc3RhcnQgJiYgIXBfZW5kKSB7CisJCQlwX3N0YXJ0ID0gLTE7CisJCQlwX2VuZCA9IC0xOworCQl9CisKKwkJLyogTm93IG91dHB1dCBhIGRpZmYgaHVuayBmb3IgdGhpcyByYW5nZSAqLworCQlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzJXNAQCAtJWxkLCVsZCArJWxkLCVsZCBAQCVzXG4iLAorCQkgICAgICAgcHJlZml4LCBjX2ZyYWcsCisJCSAgICAgICBwX3N0YXJ0KzEsIHBfZW5kLXBfc3RhcnQsIHRfc3RhcnQrMSwgdF9lbmQtdF9zdGFydCwKKwkJICAgICAgIGNfcmVzZXQpOworCQl3aGlsZSAoaiA8IGRpZmYtPnRhcmdldC5uciAmJiBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLnN0YXJ0IDwgdF9lbmQpIHsKKwkJCWludCBrOworCQkJZm9yICg7IHRfY3VyIDwgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5zdGFydDsgdF9jdXIrKykKKwkJCQlwcmludF9saW5lKHByZWZpeCwgJyAnLCB0X2N1ciwgdF9lbmRzLCBwYWlyLT50d28tPmRhdGEsCisJCQkJCSAgIGNfY29udGV4dCwgY19yZXNldCwgb3B0LT5maWxlKTsKKwkJCWZvciAoayA9IGRpZmYtPnBhcmVudC5yYW5nZXNbal0uc3RhcnQ7IGsgPCBkaWZmLT5wYXJlbnQucmFuZ2VzW2pdLmVuZDsgaysrKQorCQkJCXByaW50X2xpbmUocHJlZml4LCAnLScsIGssIHBfZW5kcywgcGFpci0+b25lLT5kYXRhLAorCQkJCQkgICBjX29sZCwgY19yZXNldCwgb3B0LT5maWxlKTsKKwkJCWZvciAoOyB0X2N1ciA8IGRpZmYtPnRhcmdldC5yYW5nZXNbal0uZW5kICYmIHRfY3VyIDwgdF9lbmQ7IHRfY3VyKyspCisJCQkJcHJpbnRfbGluZShwcmVmaXgsICcrJywgdF9jdXIsIHRfZW5kcywgcGFpci0+dHdvLT5kYXRhLAorCQkJCQkgICBjX25ldywgY19yZXNldCwgb3B0LT5maWxlKTsKKwkJCWorKzsKKwkJfQorCQlmb3IgKDsgdF9jdXIgPCB0X2VuZDsgdF9jdXIrKykKKwkJCXByaW50X2xpbmUocHJlZml4LCAnICcsIHRfY3VyLCB0X2VuZHMsIHBhaXItPnR3by0+ZGF0YSwKKwkJCQkgICBjX2NvbnRleHQsIGNfcmVzZXQsIG9wdC0+ZmlsZSk7CisJfQorCisJZnJlZShwX2VuZHMpOworCWZyZWUodF9lbmRzKTsKK30KKworLyoKKyAqIE5FRURTV09SSzogbWFudWFsbHkgYnVpbGRpbmcgYSBkaWZmIGhlcmUgaXMgbm90IHRoZSBSaWdodAorICogVGhpbmcodG0pLiAgbG9nIC1MIHNob3VsZCBiZSBidWlsdCBpbnRvIHRoZSBkaWZmIHBpcGVsaW5lLgorICovCitzdGF0aWMgdm9pZCBkdW1wX2RpZmZfaGFja3koc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCAiJXNcbiIsIG91dHB1dF9wcmVmaXgoJnJldi0+ZGlmZm9wdCkpOworCXdoaWxlIChyYW5nZSkgeworCQlkdW1wX2RpZmZfaGFja3lfb25lKHJldiwgcmFuZ2UpOworCQlyYW5nZSA9IHJhbmdlLT5uZXh0OworCX0KK30KKworLyoKKyAqIFVubGlrZSBtb3N0IG90aGVyIGZ1bmN0aW9ucywgdGhpcyBkZXN0cnVjdGl2ZWx5IG9wZXJhdGVzIG9uCisgKiAncmFuZ2UnLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfZGlmZl9maWxlcGFpcihzdHJ1Y3QgcmV2X2luZm8gKnJldiwKKwkJCQkgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIsCisJCQkJIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSwKKwkJCQkgc3RydWN0IGRpZmZfcmFuZ2VzICoqZGlmZl9vdXQpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJnID0gcmFuZ2U7CisJc3RydWN0IHJhbmdlX3NldCB0bXA7CisJc3RydWN0IGRpZmZfcmFuZ2VzIGRpZmY7CisJbW1maWxlX3QgZmlsZV9wYXJlbnQsIGZpbGVfdGFyZ2V0OworCisJYXNzZXJ0KHBhaXItPnR3by0+cGF0aCk7CisJd2hpbGUgKHJnKSB7CisJCWFzc2VydChyZy0+cGF0aCk7CisJCWlmICghc3RyY21wKHJnLT5wYXRoLCBwYWlyLT50d28tPnBhdGgpKQorCQkJYnJlYWs7CisJCXJnID0gcmctPm5leHQ7CisJfQorCisJaWYgKCFyZykKKwkJcmV0dXJuIDA7CisJaWYgKHJnLT5yYW5nZXMubnIgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlhc3NlcnQocGFpci0+dHdvLT5vaWRfdmFsaWQpOworCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocmV2LT5kaWZmb3B0LnJlcG8sIHBhaXItPnR3bywgMCk7CisJZmlsZV90YXJnZXQucHRyID0gcGFpci0+dHdvLT5kYXRhOworCWZpbGVfdGFyZ2V0LnNpemUgPSBwYWlyLT50d28tPnNpemU7CisKKwlpZiAocGFpci0+b25lLT5vaWRfdmFsaWQpIHsKKwkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhyZXYtPmRpZmZvcHQucmVwbywgcGFpci0+b25lLCAwKTsKKwkJZmlsZV9wYXJlbnQucHRyID0gcGFpci0+b25lLT5kYXRhOworCQlmaWxlX3BhcmVudC5zaXplID0gcGFpci0+b25lLT5zaXplOworCX0gZWxzZSB7CisJCWZpbGVfcGFyZW50LnB0ciA9ICIiOworCQlmaWxlX3BhcmVudC5zaXplID0gMDsKKwl9CisKKwlkaWZmX3Jhbmdlc19pbml0KCZkaWZmKTsKKwlpZiAoY29sbGVjdF9kaWZmKCZmaWxlX3BhcmVudCwgJmZpbGVfdGFyZ2V0LCAmZGlmZikpCisJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICVzIiwgcGFpci0+b25lLT5wYXRoKTsKKworCS8qIE5FRURTV09SSyBzaG91bGQgYXBwbHkgc29tZSBoZXVyaXN0aWNzIHRvIHByZXZlbnQgbWlzbWF0Y2hlcyAqLworCWZyZWUocmctPnBhdGgpOworCXJnLT5wYXRoID0geHN0cmR1cChwYWlyLT5vbmUtPnBhdGgpOworCisJcmFuZ2Vfc2V0X2luaXQoJnRtcCwgMCk7CisJcmFuZ2Vfc2V0X21hcF9hY3Jvc3NfZGlmZigmdG1wLCAmcmctPnJhbmdlcywgJmRpZmYsIGRpZmZfb3V0KTsKKwlyYW5nZV9zZXRfcmVsZWFzZSgmcmctPnJhbmdlcyk7CisJcmFuZ2Vfc2V0X21vdmUoJnJnLT5yYW5nZXMsICZ0bXApOworCisJZGlmZl9yYW5nZXNfcmVsZWFzZSgmZGlmZik7CisKKwlyZXR1cm4gKCgqZGlmZl9vdXQpLT5wYXJlbnQubnIgPiAwKTsKK30KKworc3RhdGljIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkaWZmX2ZpbGVwYWlyX2R1cChzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcikKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqbmV3X2ZpbGVwYWlyID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGRpZmZfZmlsZXBhaXIpKTsKKwluZXdfZmlsZXBhaXItPm9uZSA9IHBhaXItPm9uZTsKKwluZXdfZmlsZXBhaXItPnR3byA9IHBhaXItPnR3bzsKKwluZXdfZmlsZXBhaXItPm9uZS0+Y291bnQrKzsKKwluZXdfZmlsZXBhaXItPnR3by0+Y291bnQrKzsKKwlyZXR1cm4gbmV3X2ZpbGVwYWlyOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2RpZmZxdWV1ZXMoaW50IG4sIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqZHEpCit7CisJaW50IGksIGo7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IGRxW2ldLm5yOyBqKyspCisJCQlkaWZmX2ZyZWVfZmlsZXBhaXIoZHFbaV0ucXVldWVbal0pOworCWZyZWUoZHEpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfYWxsX2ZpbGVzKHN0cnVjdCBsaW5lX2xvZ19kYXRhICoqcmFuZ2Vfb3V0LAorCQkJICAgICBzdHJ1Y3QgcmV2X2luZm8gKnJldiwKKwkJCSAgICAgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxdWV1ZSwKKwkJCSAgICAgc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlKQoreworCWludCBpLCBjaGFuZ2VkID0gMDsKKworCSpyYW5nZV9vdXQgPSBsaW5lX2xvZ19kYXRhX2NvcHkocmFuZ2UpOworCisJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX3JhbmdlcyAqcGFpcmRpZmYgPSBOVUxMOworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciA9IHF1ZXVlLT5xdWV1ZVtpXTsKKwkJaWYgKHByb2Nlc3NfZGlmZl9maWxlcGFpcihyZXYsIHBhaXIsICpyYW5nZV9vdXQsICZwYWlyZGlmZikpIHsKKwkJCS8qCisJCQkgKiBTdG9yZSBhd2F5IHRoZSBkaWZmIGZvciBsYXRlciBvdXRwdXQuICBXZQorCQkJICogdHVjayBpdCBpbiB0aGUgcmFuZ2VzIHdlIGdvdCBhcyBfaW5wdXRfLAorCQkJICogc2luY2UgdGhhdCdzIHRoZSBjb21taXQgdGhhdCBjYXVzZWQgdGhlCisJCQkgKiBkaWZmLgorCQkJICoKKwkJCSAqIE5FRURTV09SSyBub3QgZW5vdWdoIHdoZW4gd2UgZ2V0IGFyb3VuZCB0bworCQkJICogZG9pbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIHdpdGggbWVyZ2VzOworCQkJICogY3VycmVudGx5IGVhY2ggaW52b2NhdGlvbiBvbiBhIG1lcmdlIHBhcmVudAorCQkJICogdHJhc2hlcyB0aGUgcHJldmlvdXMgb25lJ3MgZGlmZi4KKwkJCSAqCisJCQkgKiBORUVEU1dPUksgdHJhbXBsZXMgb3ZlciBkYXRhIHN0cnVjdHVyZXMgbm90IG93bmVkIGhlcmUKKwkJCSAqLworCQkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJnID0gcmFuZ2U7CisJCQljaGFuZ2VkKys7CisJCQl3aGlsZSAocmcgJiYgc3RyY21wKHJnLT5wYXRoLCBwYWlyLT50d28tPnBhdGgpKQorCQkJCXJnID0gcmctPm5leHQ7CisJCQlhc3NlcnQocmcpOworCQkJcmctPnBhaXIgPSBkaWZmX2ZpbGVwYWlyX2R1cChxdWV1ZS0+cXVldWVbaV0pOworCQkJbWVtY3B5KCZyZy0+ZGlmZiwgcGFpcmRpZmYsIHNpemVvZihzdHJ1Y3QgZGlmZl9yYW5nZXMpKTsKKwkJfQorCQlmcmVlKHBhaXJkaWZmKTsKKwl9CisKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworaW50IGxpbmVfbG9nX3ByaW50KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisKKwlzaG93X2xvZyhyZXYpOworCWlmICghKHJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTk9fT1VUUFVUKSkgeworCQlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UgPSBsb29rdXBfbGluZV9yYW5nZShyZXYsIGNvbW1pdCk7CisJCWR1bXBfZGlmZl9oYWNreShyZXYsIHJhbmdlKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19yYW5nZXNfb3JkaW5hcnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCSAgc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlKQoreworCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IHF1ZXVlOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpwYXJlbnRfcmFuZ2U7CisJaW50IGNoYW5nZWQ7CisKKwlpZiAoY29tbWl0LT5wYXJlbnRzKQorCQlwYXJlbnQgPSBjb21taXQtPnBhcmVudHMtPml0ZW07CisKKwlxdWV1ZV9kaWZmcyhyYW5nZSwgJnJldi0+ZGlmZm9wdCwgJnF1ZXVlLCBjb21taXQsIHBhcmVudCk7CisJY2hhbmdlZCA9IHByb2Nlc3NfYWxsX2ZpbGVzKCZwYXJlbnRfcmFuZ2UsIHJldiwgJnF1ZXVlLCByYW5nZSk7CisJaWYgKHBhcmVudCkKKwkJYWRkX2xpbmVfcmFuZ2UocmV2LCBwYXJlbnQsIHBhcmVudF9yYW5nZSk7CisJZnJlZV9saW5lX2xvZ19kYXRhKHBhcmVudF9yYW5nZSk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19yYW5nZXNfbWVyZ2VfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJICAgICAgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKmRpZmZxdWV1ZXM7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKipjYW5kOworCXN0cnVjdCBjb21taXQgKipwYXJlbnRzOworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlpbnQgaTsKKwlpbnQgbnBhcmVudHMgPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOworCisJaWYgKG5wYXJlbnRzID4gMSAmJiByZXYtPmZpcnN0X3BhcmVudF9vbmx5KQorCQlucGFyZW50cyA9IDE7CisKKwlBTExPQ19BUlJBWShkaWZmcXVldWVzLCBucGFyZW50cyk7CisJQUxMT0NfQVJSQVkoY2FuZCwgbnBhcmVudHMpOworCUFMTE9DX0FSUkFZKHBhcmVudHMsIG5wYXJlbnRzKTsKKworCXAgPSBjb21taXQtPnBhcmVudHM7CisJZm9yIChpID0gMDsgaSA8IG5wYXJlbnRzOyBpKyspIHsKKwkJcGFyZW50c1tpXSA9IHAtPml0ZW07CisJCXAgPSBwLT5uZXh0OworCQlxdWV1ZV9kaWZmcyhyYW5nZSwgJnJldi0+ZGlmZm9wdCwgJmRpZmZxdWV1ZXNbaV0sIGNvbW1pdCwgcGFyZW50c1tpXSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5wYXJlbnRzOyBpKyspIHsKKwkJaW50IGNoYW5nZWQ7CisJCWNhbmRbaV0gPSBOVUxMOworCQljaGFuZ2VkID0gcHJvY2Vzc19hbGxfZmlsZXMoJmNhbmRbaV0sIHJldiwgJmRpZmZxdWV1ZXNbaV0sIHJhbmdlKTsKKwkJaWYgKCFjaGFuZ2VkKSB7CisJCQkvKgorCQkJICogVGhpcyBwYXJlbnQgY2FuIHRha2UgYWxsIHRoZSBibGFtZSwgc28gd2UKKwkJCSAqIGRvbid0IGZvbGxvdyBhbnkgb3RoZXIgcGF0aCBpbiBoaXN0b3J5CisJCQkgKi8KKwkJCWFkZF9saW5lX3JhbmdlKHJldiwgcGFyZW50c1tpXSwgY2FuZFtpXSk7CisJCQljbGVhcl9jb21taXRfbGluZV9yYW5nZShyZXYsIGNvbW1pdCk7CisJCQljb21taXRfbGlzdF9hcHBlbmQocGFyZW50c1tpXSwgJmNvbW1pdC0+cGFyZW50cyk7CisJCQlmcmVlKHBhcmVudHMpOworCQkJZnJlZShjYW5kKTsKKwkJCWZyZWVfZGlmZnF1ZXVlcyhucGFyZW50cywgZGlmZnF1ZXVlcyk7CisJCQkvKiBORUVEU1dPUksgbGVha2luZyBsaWtlIGEgc2lldmUgKi8KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBObyBzaW5nbGUgcGFyZW50IHRvb2sgdGhlIGJsYW1lLiAgV2UgYWRkIHRoZSBjYW5kaWRhdGVzCisJICogZnJvbSB0aGUgYWJvdmUgbG9vcCB0byB0aGUgcGFyZW50cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudHM7IGkrKykgeworCQlhZGRfbGluZV9yYW5nZShyZXYsIHBhcmVudHNbaV0sIGNhbmRbaV0pOworCX0KKworCWNsZWFyX2NvbW1pdF9saW5lX3JhbmdlKHJldiwgY29tbWl0KTsKKwlmcmVlKHBhcmVudHMpOworCWZyZWUoY2FuZCk7CisJZnJlZV9kaWZmcXVldWVzKG5wYXJlbnRzLCBkaWZmcXVldWVzKTsKKwlyZXR1cm4gMTsKKworCS8qIE5FRURTV09SSyBldmlsIG1lcmdlIGRldGVjdGlvbiBzdHVmZiAqLworCS8qIE5FRURTV09SSyBsZWFraW5nIGxpa2UgYSBzaWV2ZSAqLworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcmFuZ2VzX2FyYml0cmFyeV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UgPSBsb29rdXBfbGluZV9yYW5nZShyZXYsIGNvbW1pdCk7CisJaW50IGNoYW5nZWQgPSAwOworCisJaWYgKHJhbmdlKSB7CisJCWlmICghY29tbWl0LT5wYXJlbnRzIHx8ICFjb21taXQtPnBhcmVudHMtPm5leHQpCisJCQljaGFuZ2VkID0gcHJvY2Vzc19yYW5nZXNfb3JkaW5hcnlfY29tbWl0KHJldiwgY29tbWl0LCByYW5nZSk7CisJCWVsc2UKKwkJCWNoYW5nZWQgPSBwcm9jZXNzX3Jhbmdlc19tZXJnZV9jb21taXQocmV2LCBjb21taXQsIHJhbmdlKTsKKwl9CisKKwlpZiAoIWNoYW5nZWQpCisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBlbnVtIHJld3JpdGVfcmVzdWx0IGxpbmVfbG9nX3Jld3JpdGVfb25lKHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgY29tbWl0ICoqcHApCit7CisJZm9yICg7OykgeworCQlzdHJ1Y3QgY29tbWl0ICpwID0gKnBwOworCQlpZiAocC0+cGFyZW50cyAmJiBwLT5wYXJlbnRzLT5uZXh0KQorCQkJcmV0dXJuIHJld3JpdGVfb25lX29rOworCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpKQorCQkJcmV0dXJuIHJld3JpdGVfb25lX29rOworCQlpZiAoIXAtPnBhcmVudHMpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfbm9wYXJlbnRzOworCQkqcHAgPSBwLT5wYXJlbnRzLT5pdGVtOworCX0KK30KKworaW50IGxpbmVfbG9nX2ZpbHRlcihzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gcmV2LT5jb21taXRzOworCXN0cnVjdCBjb21taXRfbGlzdCAqb3V0ID0gTlVMTCwgKipwcCA9ICZvdXQ7CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRvX2ZyZWUgPSBOVUxMOworCQljb21taXQgPSBsaXN0LT5pdGVtOworCQlpZiAocHJvY2Vzc19yYW5nZXNfYXJiaXRyYXJ5X2NvbW1pdChyZXYsIGNvbW1pdCkpIHsKKwkJCSpwcCA9IGxpc3Q7CisJCQlwcCA9ICZsaXN0LT5uZXh0OworCQl9IGVsc2UKKwkJCXRvX2ZyZWUgPSBsaXN0OworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJZnJlZSh0b19mcmVlKTsKKwl9CisJKnBwID0gTlVMTDsKKworCWZvciAobGlzdCA9IG91dDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJCXJld3JpdGVfcGFyZW50cyhyZXYsIGxpc3QtPml0ZW0sIGxpbmVfbG9nX3Jld3JpdGVfb25lKTsKKworCXJldi0+Y29tbWl0cyA9IG91dDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGluZS1sb2cuaCBiL2xpbmUtbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlN2EyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpbmUtbG9nLmgKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBMSU5FX0xPR19ICisjZGVmaW5lIExJTkVfTE9HX0gKKworI2luY2x1ZGUgImRpZmZjb3JlLmgiCisKK3N0cnVjdCByZXZfaW5mbzsKK3N0cnVjdCBjb21taXQ7CisKKy8qIEEgcmFuZ2UgW3N0YXJ0LGVuZF0uICBMaW5lcyBhcmUgbnVtYmVyZWQgc3RhcnRpbmcgYXQgMCwgYW5kIHRoZQorICogcmFuZ2VzIGluY2x1ZGUgc3RhcnQgYnV0IGV4Y2x1ZGUgZW5kLiAqLworc3RydWN0IHJhbmdlIHsKKwlsb25nIHN0YXJ0LCBlbmQ7Cit9OworCisvKiBBIHNldCBvZiByYW5nZXMuICBUaGUgcmFuZ2VzIG11c3QgYWx3YXlzIGJlIGRpc2pvaW50IGFuZCBzb3J0ZWQuICovCitzdHJ1Y3QgcmFuZ2Vfc2V0IHsKKwl1bnNpZ25lZCBpbnQgYWxsb2MsIG5yOworCXN0cnVjdCByYW5nZSAqcmFuZ2VzOworfTsKKworLyogQSBkaWZmLCBlbmNvZGVkIGFzIHRoZSBzZXQgb2YgcHJlLSBhbmQgcG9zdC1pbWFnZSByYW5nZXMgd2hlcmUgdGhlCisgKiBmaWxlcyBkaWZmZXIuIEEgcGFpciBvZiByYW5nZXMgY29ycmVzcG9uZHMgdG8gYSBodW5rLiAqLworc3RydWN0IGRpZmZfcmFuZ2VzIHsKKwlzdHJ1Y3QgcmFuZ2Vfc2V0IHBhcmVudDsKKwlzdHJ1Y3QgcmFuZ2Vfc2V0IHRhcmdldDsKK307CisKK3ZvaWQgcmFuZ2Vfc2V0X2luaXQoc3RydWN0IHJhbmdlX3NldCAqLCBzaXplX3QgcHJlYWxsb2MpOwordm9pZCByYW5nZV9zZXRfcmVsZWFzZShzdHJ1Y3QgcmFuZ2Vfc2V0ICopOworLyogUmFuZ2UgaW5jbHVkZXMgc3RhcnQ7IGV4Y2x1ZGVzIGVuZCAqLwordm9pZCByYW5nZV9zZXRfYXBwZW5kX3Vuc2FmZShzdHJ1Y3QgcmFuZ2Vfc2V0ICosIGxvbmcgc3RhcnQsIGxvbmcgZW5kKTsKKy8qIE5ldyByYW5nZSBtdXN0IGJlZ2luIGF0IG9yIGFmdGVyIGVuZCBvZiBsYXN0IGFkZGVkIHJhbmdlICovCit2b2lkIHJhbmdlX3NldF9hcHBlbmQoc3RydWN0IHJhbmdlX3NldCAqLCBsb25nIHN0YXJ0LCBsb25nIGVuZCk7CisvKgorICogSW4tcGxhY2UgcGFzcyBvZiBzb3J0aW5nIGFuZCBtZXJnaW5nIHRoZSByYW5nZXMgaW4gdGhlIHJhbmdlIHNldCwKKyAqIHRvIHNvcnQgYW5kIG1ha2UgdGhlIHJhbmdlcyBkaXNqb2ludC4KKyAqLwordm9pZCBzb3J0X2FuZF9tZXJnZV9yYW5nZV9zZXQoc3RydWN0IHJhbmdlX3NldCAqKTsKKworLyogTGlua2VkIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZmlsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgcmFuZ2VzLiAgVGhlCisgKiBsaXN0IG11c3QgYmUga2VwdCBzb3J0ZWQgYnkgcGF0aC4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgZXZlbiB0aG91Z2ggdGhpcyBpcyBoaWdobHkgcmVkdW5kYW50LCBlYWNoCisgKiBsaW5lX2xvZ19kYXRhIG93bnMgaXRzICdwYXRoJy4KKyAqLworc3RydWN0IGxpbmVfbG9nX2RhdGEgeworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpuZXh0OworCWNoYXIgKnBhdGg7CisJY2hhciBzdGF0dXM7CisJc3RydWN0IHJhbmdlX3NldCByYW5nZXM7CisJaW50IGFyZ19hbGxvYywgYXJnX25yOworCWNvbnN0IGNoYXIgKiphcmdzOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworCXN0cnVjdCBkaWZmX3JhbmdlcyBkaWZmOworfTsKKwordm9pZCBsaW5lX2xvZ19pbml0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdHJpbmdfbGlzdCAqYXJncyk7CisKK2ludCBsaW5lX2xvZ19maWx0ZXIoc3RydWN0IHJldl9pbmZvICpyZXYpOworCitpbnQgbGluZV9sb2dfcHJpbnQoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKKyNlbmRpZiAvKiBMSU5FX0xPR19IICovCmRpZmYgLS1naXQgYS9saW5lLXJhbmdlLmMgYi9saW5lLXJhbmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1MDU4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpbmUtcmFuZ2UuYwpAQCAtMCwwICsxLDI5NSBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxpbmUtcmFuZ2UuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorCisvKgorICogUGFyc2Ugb25lIGl0ZW0gaW4gdGhlIC1MIG9wdGlvbgorICoKKyAqICdiZWdpbicgaXMgYXBwbGljYWJsZSBvbmx5IHRvIHJlbGF0aXZlIHJhbmdlIGFuY2hvcnMuIEFic29sdXRlIGFuY2hvcnMKKyAqIGlnbm9yZSB0aGlzIHZhbHVlLgorICoKKyAqIFdoZW4gcGFyc2luZyAiLUwgQSxCIiwgcGFyc2VfbG9jKCkgaXMgY2FsbGVkIG9uY2UgZm9yIEEgYW5kIG9uY2UgZm9yIEIuCisgKgorICogV2hlbiBwYXJzaW5nIEEsICdiZWdpbicgbXVzdCBiZSBhIG5lZ2F0aXZlIG51bWJlciwgdGhlIGFic29sdXRlIHZhbHVlIG9mCisgKiB3aGljaCBpcyB0aGUgbGluZSBhdCB3aGljaCByZWxhdGl2ZSBzdGFydC1vZi1yYW5nZSBhbmNob3JzIHNob3VsZCBiZQorICogYmFzZWQuIEJlZ2lubmluZyBvZiBmaWxlIGlzIHJlcHJlc2VudGVkIGJ5IC0xLgorICoKKyAqIFdoZW4gcGFyc2luZyBCLCAnYmVnaW4nIG11c3QgYmUgdGhlIHBvc2l0aXZlIGxpbmUgbnVtYmVyIGltbWVkaWF0ZWx5CisgKiBmb2xsb3dpbmcgdGhlIGxpbmUgY29tcHV0ZWQgZm9yICdBJy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2xvYyhjb25zdCBjaGFyICpzcGVjLCBudGhfbGluZV9mbl90IG50aF9saW5lLAorCQkJICAgICB2b2lkICpkYXRhLCBsb25nIGxpbmVzLCBsb25nIGJlZ2luLCBsb25nICpyZXQpCit7CisJY2hhciAqdGVybTsKKwljb25zdCBjaGFyICpsaW5lOworCWxvbmcgbnVtOworCWludCByZWdfZXJyb3I7CisJcmVnZXhfdCByZWdleHA7CisJcmVnbWF0Y2hfdCBtYXRjaFsxXTsKKworCS8qIEFsbG93ICItTCA8c29tZXRoaW5nPiwrMjAiIHRvIG1lYW4gc3RhcnRpbmcgYXQgPHNvbWV0aGluZz4KKwkgKiBmb3IgMjAgbGluZXMsIG9yICItTCA8c29tZXRoaW5nPiwtNSIgZm9yIDUgbGluZXMgZW5kaW5nIGF0CisJICogPHNvbWV0aGluZz4uCisJICovCisJaWYgKDEgPD0gYmVnaW4gJiYgKHNwZWNbMF0gPT0gJysnIHx8IHNwZWNbMF0gPT0gJy0nKSkgeworCQludW0gPSBzdHJ0b2woc3BlYyArIDEsICZ0ZXJtLCAxMCk7CisJCWlmICh0ZXJtICE9IHNwZWMgKyAxKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXR1cm4gdGVybTsKKwkJCWlmIChudW0gPT0gMCkKKwkJCQlkaWUoIi1MIGludmFsaWQgZW1wdHkgcmFuZ2UiKTsKKwkJCWlmIChzcGVjWzBdID09ICctJykKKwkJCQludW0gPSAwIC0gbnVtOworCQkJaWYgKDAgPCBudW0pCisJCQkJKnJldCA9IGJlZ2luICsgbnVtIC0gMjsKKwkJCWVsc2UgaWYgKCFudW0pCisJCQkJKnJldCA9IGJlZ2luOworCQkJZWxzZQorCQkJCSpyZXQgPSBiZWdpbiArIG51bSA+IDAgPyBiZWdpbiArIG51bSA6IDE7CisJCQlyZXR1cm4gdGVybTsKKwkJfQorCQlyZXR1cm4gc3BlYzsKKwl9CisJbnVtID0gc3RydG9sKHNwZWMsICZ0ZXJtLCAxMCk7CisJaWYgKHRlcm0gIT0gc3BlYykgeworCQlpZiAocmV0KSB7CisJCQlpZiAobnVtIDw9IDApCisJCQkJZGllKCItTCBpbnZhbGlkIGxpbmUgbnVtYmVyOiAlbGQiLCBudW0pOworCQkJKnJldCA9IG51bTsKKwkJfQorCQlyZXR1cm4gdGVybTsKKwl9CisKKwlpZiAoYmVnaW4gPCAwKSB7CisJCWlmIChzcGVjWzBdICE9ICdeJykKKwkJCWJlZ2luID0gLWJlZ2luOworCQllbHNlIHsKKwkJCWJlZ2luID0gMTsKKwkJCXNwZWMrKzsKKwkJfQorCX0KKworCWlmIChzcGVjWzBdICE9ICcvJykKKwkJcmV0dXJuIHNwZWM7CisKKwkvKiBpdCBjb3VsZCBiZSBhIHJlZ2V4cCBvZiBmb3JtIC8uLi4vICovCisJZm9yICh0ZXJtID0gKGNoYXIgKikgc3BlYyArIDE7ICp0ZXJtICYmICp0ZXJtICE9ICcvJzsgdGVybSsrKSB7CisJCWlmICgqdGVybSA9PSAnXFwnKQorCQkJdGVybSsrOworCX0KKwlpZiAoKnRlcm0gIT0gJy8nKQorCQlyZXR1cm4gc3BlYzsKKworCS8qIGluIHRoZSBzY2FuLW9ubHkgY2FzZSB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIHJlZ2V4ICovCisJaWYgKCFyZXQpCisJCXJldHVybiB0ZXJtKzE7CisKKwkvKiB0cnkgW3NwZWMrMSAuLiB0ZXJtLTFdIGFzIHJlZ2V4cCAqLworCSp0ZXJtID0gMDsKKwliZWdpbi0tOyAvKiBpbnB1dCBpcyBpbiBodW1hbiB0ZXJtcyAqLworCWxpbmUgPSBudGhfbGluZShkYXRhLCBiZWdpbik7CisKKwlpZiAoIShyZWdfZXJyb3IgPSByZWdjb21wKCZyZWdleHAsIHNwZWMgKyAxLCBSRUdfTkVXTElORSkpICYmCisJICAgICEocmVnX2Vycm9yID0gcmVnZXhlYygmcmVnZXhwLCBsaW5lLCAxLCBtYXRjaCwgMCkpKSB7CisJCWNvbnN0IGNoYXIgKmNwID0gbGluZSArIG1hdGNoWzBdLnJtX3NvOworCQljb25zdCBjaGFyICpubGluZTsKKworCQl3aGlsZSAoYmVnaW4rKyA8IGxpbmVzKSB7CisJCQlubGluZSA9IG50aF9saW5lKGRhdGEsIGJlZ2luKTsKKwkJCWlmIChsaW5lIDw9IGNwICYmIGNwIDwgbmxpbmUpCisJCQkJYnJlYWs7CisJCQlsaW5lID0gbmxpbmU7CisJCX0KKwkJKnJldCA9IGJlZ2luOworCQlyZWdmcmVlKCZyZWdleHApOworCQkqdGVybSsrID0gJy8nOworCQlyZXR1cm4gdGVybTsKKwl9CisJZWxzZSB7CisJCWNoYXIgZXJyYnVmWzEwMjRdOworCQlyZWdlcnJvcihyZWdfZXJyb3IsICZyZWdleHAsIGVycmJ1ZiwgMTAyNCk7CisJCWRpZSgiLUwgcGFyYW1ldGVyICclcycgc3RhcnRpbmcgYXQgbGluZSAlbGQ6ICVzIiwKKwkJICAgIHNwZWMgKyAxLCBiZWdpbiArIDEsIGVycmJ1Zik7CisJfQorfQorCitzdGF0aWMgaW50IG1hdGNoX2Z1bmNuYW1lKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKmJvbCwgY29uc3QgY2hhciAqZW9sKQoreworCWlmICh4ZWNmZykgeworCQljaGFyIGJ1ZlsxXTsKKwkJcmV0dXJuIHhlY2ZnLT5maW5kX2Z1bmMoYm9sLCBlb2wgLSBib2wsIGJ1ZiwgMSwKKwkJCQkJeGVjZmctPmZpbmRfZnVuY19wcml2KSA+PSAwOworCX0KKworCWlmIChib2wgPT0gZW9sKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNhbHBoYSgqYm9sKSB8fCAqYm9sID09ICdfJyB8fCAqYm9sID09ICckJykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX2Z1bmNuYW1lX21hdGNoaW5nX3JlZ2V4cCh4ZGVtaXRjb25mX3QgKnhlY2ZnLCBjb25zdCBjaGFyICpzdGFydCwKKwkJCQkJCSByZWdleF90ICpyZWdleHApCit7CisJaW50IHJlZ19lcnJvcjsKKwlyZWdtYXRjaF90IG1hdGNoWzFdOworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKmJvbCwgKmVvbDsKKwkJcmVnX2Vycm9yID0gcmVnZXhlYyhyZWdleHAsIHN0YXJ0LCAxLCBtYXRjaCwgMCk7CisJCWlmIChyZWdfZXJyb3IgPT0gUkVHX05PTUFUQ0gpCisJCQlyZXR1cm4gTlVMTDsKKwkJZWxzZSBpZiAocmVnX2Vycm9yKSB7CisJCQljaGFyIGVycmJ1ZlsxMDI0XTsKKwkJCXJlZ2Vycm9yKHJlZ19lcnJvciwgcmVnZXhwLCBlcnJidWYsIDEwMjQpOworCQkJZGllKCItTCBwYXJhbWV0ZXI6IHJlZ2V4ZWMoKSBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKKwkJfQorCQkvKiBkZXRlcm1pbmUgZXh0ZW50IG9mIGxpbmUgbWF0Y2hlZCAqLworCQlib2wgPSBzdGFydCttYXRjaFswXS5ybV9zbzsKKwkJZW9sID0gc3RhcnQrbWF0Y2hbMF0ucm1fZW87CisJCXdoaWxlIChib2wgPiBzdGFydCAmJiAqYm9sICE9ICdcbicpCisJCQlib2wtLTsKKwkJaWYgKCpib2wgPT0gJ1xuJykKKwkJCWJvbCsrOworCQl3aGlsZSAoKmVvbCAmJiAqZW9sICE9ICdcbicpCisJCQllb2wrKzsKKwkJaWYgKCplb2wgPT0gJ1xuJykKKwkJCWVvbCsrOworCQkvKiBpcyBpdCBhIGZ1bmNuYW1lIGxpbmU/ICovCisJCWlmIChtYXRjaF9mdW5jbmFtZSh4ZWNmZywgKGNoYXIqKSBib2wsIChjaGFyKikgZW9sKSkKKwkJCXJldHVybiBib2w7CisJCXN0YXJ0ID0gZW9sOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX3JhbmdlX2Z1bmNuYW1lKAorCWNvbnN0IGNoYXIgKmFyZywgbnRoX2xpbmVfZm5fdCBudGhfbGluZV9jYiwKKwl2b2lkICpjYl9kYXRhLCBsb25nIGxpbmVzLCBsb25nIGFuY2hvciwgbG9uZyAqYmVnaW4sIGxvbmcgKmVuZCwKKwljb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwljaGFyICpwYXR0ZXJuOworCWNvbnN0IGNoYXIgKnRlcm07CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2OworCXhkZW1pdGNvbmZfdCAqeGVjZmcgPSBOVUxMOworCWNvbnN0IGNoYXIgKnN0YXJ0OworCWNvbnN0IGNoYXIgKnA7CisJaW50IHJlZ19lcnJvcjsKKwlyZWdleF90IHJlZ2V4cDsKKworCWlmICgqYXJnID09ICdeJykgeworCQlhbmNob3IgPSAxOworCQlhcmcrKzsKKwl9CisKKwlhc3NlcnQoKmFyZyA9PSAnOicpOworCXRlcm0gPSBhcmcrMTsKKwl3aGlsZSAoKnRlcm0gJiYgKnRlcm0gIT0gJzonKSB7CisJCWlmICgqdGVybSA9PSAnXFwnICYmICoodGVybSsxKSkKKwkJCXRlcm0rKzsKKwkJdGVybSsrOworCX0KKwlpZiAodGVybSA9PSBhcmcrMSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFiZWdpbikgLyogc2tpcF9yYW5nZV9hcmcgY2FzZSAqLworCQlyZXR1cm4gdGVybTsKKworCXBhdHRlcm4gPSB4c3RybmR1cChhcmcrMSwgdGVybS0oYXJnKzEpKTsKKworCWFuY2hvci0tOyAvKiBpbnB1dCBpcyBpbiBodW1hbiB0ZXJtcyAqLworCXN0YXJ0ID0gbnRoX2xpbmVfY2IoY2JfZGF0YSwgYW5jaG9yKTsKKworCWRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChpc3RhdGUsIHBhdGgpOworCWlmIChkcnYgJiYgZHJ2LT5mdW5jbmFtZS5wYXR0ZXJuKSB7CisJCWNvbnN0IHN0cnVjdCB1c2VyZGlmZl9mdW5jbmFtZSAqcGUgPSAmZHJ2LT5mdW5jbmFtZTsKKwkJeGVjZmcgPSB4Y2FsbG9jKDEsIHNpemVvZigqeGVjZmcpKTsKKwkJeGRpZmZfc2V0X2ZpbmRfZnVuYyh4ZWNmZywgcGUtPnBhdHRlcm4sIHBlLT5jZmxhZ3MpOworCX0KKworCXJlZ19lcnJvciA9IHJlZ2NvbXAoJnJlZ2V4cCwgcGF0dGVybiwgUkVHX05FV0xJTkUpOworCWlmIChyZWdfZXJyb3IpIHsKKwkJY2hhciBlcnJidWZbMTAyNF07CisJCXJlZ2Vycm9yKHJlZ19lcnJvciwgJnJlZ2V4cCwgZXJyYnVmLCAxMDI0KTsKKwkJZGllKCItTCBwYXJhbWV0ZXIgJyVzJzogJXMiLCBwYXR0ZXJuLCBlcnJidWYpOworCX0KKworCXAgPSBmaW5kX2Z1bmNuYW1lX21hdGNoaW5nX3JlZ2V4cCh4ZWNmZywgKGNoYXIqKSBzdGFydCwgJnJlZ2V4cCk7CisJaWYgKCFwKQorCQlkaWUoIi1MIHBhcmFtZXRlciAnJXMnIHN0YXJ0aW5nIGF0IGxpbmUgJWxkOiBubyBtYXRjaCIsCisJCSAgICBwYXR0ZXJuLCBhbmNob3IgKyAxKTsKKwkqYmVnaW4gPSAwOworCXdoaWxlIChwID4gbnRoX2xpbmVfY2IoY2JfZGF0YSwgKmJlZ2luKSkKKwkJKCpiZWdpbikrKzsKKworCWlmICgqYmVnaW4gPj0gbGluZXMpCisJCWRpZSgiLUwgcGFyYW1ldGVyICclcycgbWF0Y2hlcyBhdCBFT0YiLCBwYXR0ZXJuKTsKKworCSplbmQgPSAqYmVnaW4rMTsKKwl3aGlsZSAoKmVuZCA8IGxpbmVzKSB7CisJCWNvbnN0IGNoYXIgKmJvbCA9IG50aF9saW5lX2NiKGNiX2RhdGEsICplbmQpOworCQljb25zdCBjaGFyICplb2wgPSBudGhfbGluZV9jYihjYl9kYXRhLCAqZW5kKzEpOworCQlpZiAobWF0Y2hfZnVuY25hbWUoeGVjZmcsIGJvbCwgZW9sKSkKKwkJCWJyZWFrOworCQkoKmVuZCkrKzsKKwl9CisKKwlyZWdmcmVlKCZyZWdleHApOworCWZyZWUoeGVjZmcpOworCWZyZWUocGF0dGVybik7CisKKwkvKiBjb21wZW5zYXRlIGZvciAxLWJhc2VkIG51bWJlcmluZyAqLworCSgqYmVnaW4pKys7CisKKwlyZXR1cm4gdGVybTsKK30KKworaW50IHBhcnNlX3JhbmdlX2FyZyhjb25zdCBjaGFyICphcmcsIG50aF9saW5lX2ZuX3QgbnRoX2xpbmVfY2IsCisJCSAgICB2b2lkICpjYl9kYXRhLCBsb25nIGxpbmVzLCBsb25nIGFuY2hvciwKKwkJICAgIGxvbmcgKmJlZ2luLCBsb25nICplbmQsCisJCSAgICBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwkqYmVnaW4gPSAqZW5kID0gMDsKKworCWlmIChhbmNob3IgPCAxKQorCQlhbmNob3IgPSAxOworCWlmIChhbmNob3IgPiBsaW5lcykKKwkJYW5jaG9yID0gbGluZXMgKyAxOworCisJaWYgKCphcmcgPT0gJzonIHx8ICgqYXJnID09ICdeJyAmJiAqKGFyZyArIDEpID09ICc6JykpIHsKKwkJYXJnID0gcGFyc2VfcmFuZ2VfZnVuY25hbWUoYXJnLCBudGhfbGluZV9jYiwgY2JfZGF0YSwKKwkJCQkJICAgbGluZXMsIGFuY2hvciwgYmVnaW4sIGVuZCwKKwkJCQkJICAgcGF0aCwgaXN0YXRlKTsKKwkJaWYgKCFhcmcgfHwgKmFyZykKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJYXJnID0gcGFyc2VfbG9jKGFyZywgbnRoX2xpbmVfY2IsIGNiX2RhdGEsIGxpbmVzLCAtYW5jaG9yLCBiZWdpbik7CisKKwlpZiAoKmFyZyA9PSAnLCcpCisJCWFyZyA9IHBhcnNlX2xvYyhhcmcgKyAxLCBudGhfbGluZV9jYiwgY2JfZGF0YSwgbGluZXMsICpiZWdpbiArIDEsIGVuZCk7CisKKwlpZiAoKmFyZykKKwkJcmV0dXJuIC0xOworCisJaWYgKCpiZWdpbiAmJiAqZW5kICYmICplbmQgPCAqYmVnaW4pIHsKKwkJU1dBUCgqZW5kLCAqYmVnaW4pOworCX0KKworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpza2lwX3JhbmdlX2FyZyhjb25zdCBjaGFyICphcmcsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmICgqYXJnID09ICc6JyB8fCAoKmFyZyA9PSAnXicgJiYgKihhcmcgKyAxKSA9PSAnOicpKQorCQlyZXR1cm4gcGFyc2VfcmFuZ2VfZnVuY25hbWUoYXJnLCBOVUxMLCBOVUxMLAorCQkJCQkgICAgMCwgMCwgTlVMTCwgTlVMTCwKKwkJCQkJICAgIE5VTEwsIGlzdGF0ZSk7CisKKwlhcmcgPSBwYXJzZV9sb2MoYXJnLCBOVUxMLCBOVUxMLCAwLCAtMSwgTlVMTCk7CisKKwlpZiAoKmFyZyA9PSAnLCcpCisJCWFyZyA9IHBhcnNlX2xvYyhhcmcrMSwgTlVMTCwgTlVMTCwgMCwgMCwgTlVMTCk7CisKKwlyZXR1cm4gYXJnOworfQpkaWZmIC0tZ2l0IGEvbGluZS1yYW5nZS5oIGIvbGluZS1yYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWJmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saW5lLXJhbmdlLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBMSU5FX1JBTkdFX0gKKyNkZWZpbmUgTElORV9SQU5HRV9ICisKK3N0cnVjdCBpbmRleF9zdGF0ZTsKKworLyoKKyAqIFBhcnNlIG9uZSBpdGVtIGluIGFuIC1MIGJlZ2luLGVuZCBvcHRpb24gdy5yLnQuIHRoZSBub3Rpb25hbCBmaWxlCisgKiBvYmplY3QgJ2NiX2RhdGEnIGNvbnNpc3Rpbmcgb2YgJ2xpbmVzJyBsaW5lcy4KKyAqCisgKiBUaGUgJ250aF9saW5lX2NiJyBjYWxsYmFjayBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc3RhcnQgb2YgdGhlCisgKiBsaW5lICdsbm8nIGluc2lkZSB0aGUgJ2NiX2RhdGEnLiAgVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBhbHJlYWR5CisgKiBoYXZlIGEgc3VpdGFibGUgbWFwIGF0IGhhbmQgdG8gbWFrZSB0aGlzIGEgY29uc3RhbnQtdGltZSBsb29rdXAuCisgKgorICogJ2FuY2hvcicgaXMgdGhlIDEtYmFzZWQgbGluZSBhdCB3aGljaCByZWxhdGl2ZSByYW5nZSBzcGVjaWZpY2F0aW9ucworICogc2hvdWxkIGJlIGFuY2hvcmVkLiBBYnNvbHV0ZSByYW5nZXMgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCAtMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICBUaGUKKyAqIGFjdHVhbCByYW5nZSBpcyBzdG9yZWQgaW4gKmJlZ2luIGFuZCAqZW5kLiAgVGhlIGNvdW50aW5nIHN0YXJ0cworICogYXQgMSEgIEluIGNhc2Ugb2YgZXJyb3IsIHRoZSBjYWxsZXIgc2hvdWxkIHNob3cgdXNhZ2UgbWVzc2FnZS4KKyAqLworCit0eXBlZGVmIGNvbnN0IGNoYXIgKigqbnRoX2xpbmVfZm5fdCkodm9pZCAqZGF0YSwgbG9uZyBsbm8pOworCitpbnQgcGFyc2VfcmFuZ2VfYXJnKGNvbnN0IGNoYXIgKmFyZywKKwkJICAgIG50aF9saW5lX2ZuX3QgbnRoX2xpbmVfY2IsCisJCSAgICB2b2lkICpjYl9kYXRhLCBsb25nIGxpbmVzLCBsb25nIGFuY2hvciwKKwkJICAgIGxvbmcgKmJlZ2luLCBsb25nICplbmQsCisJCSAgICBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKy8qCisgKiBTY2FuIHBhc3QgYSByYW5nZSBhcmd1bWVudCB0aGF0IGNvdWxkIGJlIHBhcnNlZCBieQorICogJ3BhcnNlX3JhbmdlX2FyZycsIHRvIGhlbHAgdGhlIGNhbGxlciBkZXRlcm1pbmUgdGhlIHN0YXJ0IG9mIHRoZQorICogZmlsZW5hbWUgaW4gJy1MIG4sbTpmaWxlJyBzeW50YXguCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgJ24sbScgcGFydCwgb3IKKyAqIE5VTEwgaW4gY2FzZSB0aGUgYXJndW1lbnQgaXMgb2J2aW91c2x5IG1hbGZvcm1lZC4KKyAqLworCitjb25zdCBjaGFyICpza2lwX3JhbmdlX2FyZyhjb25zdCBjaGFyICphcmcsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKKworI2VuZGlmIC8qIExJTkVfUkFOR0VfSCAqLwpkaWZmIC0tZ2l0IGEvbGluZWFyLWFzc2lnbm1lbnQuYyBiL2xpbmVhci1hc3NpZ25tZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmZmMwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpbmVhci1hc3NpZ25tZW50LmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBCYXNlZCBvbjogSm9ua2VyLCBSLiwgJiBWb2xnZW5hbnQsIEEuICgxOTg3KS4gPGk+QSBzaG9ydGVzdCBhdWdtZW50aW5nIHBhdGgKKyAqIGFsZ29yaXRobSBmb3IgZGVuc2UgYW5kIHNwYXJzZSBsaW5lYXIgYXNzaWdubWVudCBwcm9ibGVtczwvaT4uIENvbXB1dGluZywKKyAqIDM4KDQpLCAzMjUtMzQwLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsaW5lYXItYXNzaWdubWVudC5oIgorCisjZGVmaW5lIENPU1QoY29sdW1uLCByb3cpIGNvc3RbKGNvbHVtbikgKyBjb2x1bW5fY291bnQgKiAocm93KV0KKworLyoKKyAqIFRoZSBwYXJhbWV0ZXIgYGNvc3RgIGlzIHRoZSBjb3N0IG1hdHJpeDogdGhlIGNvc3QgdG8gYXNzaWduIGNvbHVtbiBqIHRvIHJvdworICogaSBpcyBgY29zdFtqICsgY29sdW1uX2NvdW50ICogaV0uCisgKi8KK3ZvaWQgY29tcHV0ZV9hc3NpZ25tZW50KGludCBjb2x1bW5fY291bnQsIGludCByb3dfY291bnQsIGludCAqY29zdCwKKwkJCWludCAqY29sdW1uMnJvdywgaW50ICpyb3cyY29sdW1uKQoreworCWludCAqdiwgKmQ7CisJaW50ICpmcmVlX3JvdywgZnJlZV9jb3VudCA9IDAsIHNhdmVkX2ZyZWVfY291bnQsICpwcmVkLCAqY29sOworCWludCBpLCBqLCBwaGFzZTsKKworCWlmIChjb2x1bW5fY291bnQgPCAyKSB7CisJCW1lbXNldChjb2x1bW4ycm93LCAwLCBzaXplb2YoaW50KSAqIGNvbHVtbl9jb3VudCk7CisJCW1lbXNldChyb3cyY29sdW1uLCAwLCBzaXplb2YoaW50KSAqIHJvd19jb3VudCk7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoY29sdW1uMnJvdywgLTEsIHNpemVvZihpbnQpICogY29sdW1uX2NvdW50KTsKKwltZW1zZXQocm93MmNvbHVtbiwgLTEsIHNpemVvZihpbnQpICogcm93X2NvdW50KTsKKwlBTExPQ19BUlJBWSh2LCBjb2x1bW5fY291bnQpOworCisJLyogY29sdW1uIHJlZHVjdGlvbiAqLworCWZvciAoaiA9IGNvbHVtbl9jb3VudCAtIDE7IGogPj0gMDsgai0tKSB7CisJCWludCBpMSA9IDA7CisKKwkJZm9yIChpID0gMTsgaSA8IHJvd19jb3VudDsgaSsrKQorCQkJaWYgKENPU1QoaiwgaTEpID4gQ09TVChqLCBpKSkKKwkJCQlpMSA9IGk7CisJCXZbal0gPSBDT1NUKGosIGkxKTsKKwkJaWYgKHJvdzJjb2x1bW5baTFdID09IC0xKSB7CisJCQkvKiByb3cgaTEgdW5hc3NpZ25lZCAqLworCQkJcm93MmNvbHVtbltpMV0gPSBqOworCQkJY29sdW1uMnJvd1tqXSA9IGkxOworCQl9IGVsc2UgeworCQkJaWYgKHJvdzJjb2x1bW5baTFdID49IDApCisJCQkJcm93MmNvbHVtbltpMV0gPSAtMiAtIHJvdzJjb2x1bW5baTFdOworCQkJY29sdW1uMnJvd1tqXSA9IC0xOworCQl9CisJfQorCisJLyogcmVkdWN0aW9uIHRyYW5zZmVyICovCisJQUxMT0NfQVJSQVkoZnJlZV9yb3csIHJvd19jb3VudCk7CisJZm9yIChpID0gMDsgaSA8IHJvd19jb3VudDsgaSsrKSB7CisJCWludCBqMSA9IHJvdzJjb2x1bW5baV07CisJCWlmIChqMSA9PSAtMSkKKwkJCWZyZWVfcm93W2ZyZWVfY291bnQrK10gPSBpOworCQllbHNlIGlmIChqMSA8IC0xKQorCQkJcm93MmNvbHVtbltpXSA9IC0yIC0gajE7CisJCWVsc2UgeworCQkJaW50IG1pbiA9IENPU1QoIWoxLCBpKSAtIHZbIWoxXTsKKwkJCWZvciAoaiA9IDE7IGogPCBjb2x1bW5fY291bnQ7IGorKykKKwkJCQlpZiAoaiAhPSBqMSAmJiBtaW4gPiBDT1NUKGosIGkpIC0gdltqXSkKKwkJCQkJbWluID0gQ09TVChqLCBpKSAtIHZbal07CisJCQl2W2oxXSAtPSBtaW47CisJCX0KKwl9CisKKwlpZiAoZnJlZV9jb3VudCA9PQorCSAgICAoY29sdW1uX2NvdW50IDwgcm93X2NvdW50ID8gcm93X2NvdW50IC0gY29sdW1uX2NvdW50IDogMCkpIHsKKwkJZnJlZSh2KTsKKwkJZnJlZShmcmVlX3Jvdyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBhdWdtZW50aW5nIHJvdyByZWR1Y3Rpb24gKi8KKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPCAyOyBwaGFzZSsrKSB7CisJCWludCBrID0gMDsKKworCQlzYXZlZF9mcmVlX2NvdW50ID0gZnJlZV9jb3VudDsKKwkJZnJlZV9jb3VudCA9IDA7CisJCXdoaWxlIChrIDwgc2F2ZWRfZnJlZV9jb3VudCkgeworCQkJaW50IHUxLCB1MjsKKwkJCWludCBqMSA9IDAsIGoyLCBpMDsKKworCQkJaSA9IGZyZWVfcm93W2srK107CisJCQl1MSA9IENPU1QoajEsIGkpIC0gdltqMV07CisJCQlqMiA9IC0xOworCQkJdTIgPSBJTlRfTUFYOworCQkJZm9yIChqID0gMTsgaiA8IGNvbHVtbl9jb3VudDsgaisrKSB7CisJCQkJaW50IGMgPSBDT1NUKGosIGkpIC0gdltqXTsKKwkJCQlpZiAodTIgPiBjKSB7CisJCQkJCWlmICh1MSA8IGMpIHsKKwkJCQkJCXUyID0gYzsKKwkJCQkJCWoyID0gajsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXUyID0gdTE7CisJCQkJCQl1MSA9IGM7CisJCQkJCQlqMiA9IGoxOworCQkJCQkJajEgPSBqOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKGoyIDwgMCkgeworCQkJCWoyID0gajE7CisJCQkJdTIgPSB1MTsKKwkJCX0KKworCQkJaTAgPSBjb2x1bW4ycm93W2oxXTsKKwkJCWlmICh1MSA8IHUyKQorCQkJCXZbajFdIC09IHUyIC0gdTE7CisJCQllbHNlIGlmIChpMCA+PSAwKSB7CisJCQkJajEgPSBqMjsKKwkJCQlpMCA9IGNvbHVtbjJyb3dbajFdOworCQkJfQorCisJCQlpZiAoaTAgPj0gMCkgeworCQkJCWlmICh1MSA8IHUyKQorCQkJCQlmcmVlX3Jvd1stLWtdID0gaTA7CisJCQkJZWxzZQorCQkJCQlmcmVlX3Jvd1tmcmVlX2NvdW50KytdID0gaTA7CisJCQl9CisJCQlyb3cyY29sdW1uW2ldID0gajE7CisJCQljb2x1bW4ycm93W2oxXSA9IGk7CisJCX0KKwl9CisKKwkvKiBhdWdtZW50YXRpb24gKi8KKwlzYXZlZF9mcmVlX2NvdW50ID0gZnJlZV9jb3VudDsKKwlBTExPQ19BUlJBWShkLCBjb2x1bW5fY291bnQpOworCUFMTE9DX0FSUkFZKHByZWQsIGNvbHVtbl9jb3VudCk7CisJQUxMT0NfQVJSQVkoY29sLCBjb2x1bW5fY291bnQpOworCWZvciAoZnJlZV9jb3VudCA9IDA7IGZyZWVfY291bnQgPCBzYXZlZF9mcmVlX2NvdW50OyBmcmVlX2NvdW50KyspIHsKKwkJaW50IGkxID0gZnJlZV9yb3dbZnJlZV9jb3VudF0sIGxvdyA9IDAsIHVwID0gMCwgbGFzdCwgazsKKwkJaW50IG1pbiwgYywgdTE7CisKKwkJZm9yIChqID0gMDsgaiA8IGNvbHVtbl9jb3VudDsgaisrKSB7CisJCQlkW2pdID0gQ09TVChqLCBpMSkgLSB2W2pdOworCQkJcHJlZFtqXSA9IGkxOworCQkJY29sW2pdID0gajsKKwkJfQorCisJCWogPSAtMTsKKwkJZG8geworCQkJbGFzdCA9IGxvdzsKKwkJCW1pbiA9IGRbY29sW3VwKytdXTsKKwkJCWZvciAoayA9IHVwOyBrIDwgY29sdW1uX2NvdW50OyBrKyspIHsKKwkJCQlqID0gY29sW2tdOworCQkJCWMgPSBkW2pdOworCQkJCWlmIChjIDw9IG1pbikgeworCQkJCQlpZiAoYyA8IG1pbikgeworCQkJCQkJdXAgPSBsb3c7CisJCQkJCQltaW4gPSBjOworCQkJCQl9CisJCQkJCWNvbFtrXSA9IGNvbFt1cF07CisJCQkJCWNvbFt1cCsrXSA9IGo7CisJCQkJfQorCQkJfQorCQkJZm9yIChrID0gbG93OyBrIDwgdXA7IGsrKykKKwkJCQlpZiAoY29sdW1uMnJvd1tjb2xba11dID09IC0xKQorCQkJCQlnb3RvIHVwZGF0ZTsKKworCQkJLyogc2NhbiBhIHJvdyAqLworCQkJZG8geworCQkJCWludCBqMSA9IGNvbFtsb3crK107CisKKwkJCQlpID0gY29sdW1uMnJvd1tqMV07CisJCQkJdTEgPSBDT1NUKGoxLCBpKSAtIHZbajFdIC0gbWluOworCQkJCWZvciAoayA9IHVwOyBrIDwgY29sdW1uX2NvdW50OyBrKyspIHsKKwkJCQkJaiA9IGNvbFtrXTsKKwkJCQkJYyA9IENPU1QoaiwgaSkgLSB2W2pdIC0gdTE7CisJCQkJCWlmIChjIDwgZFtqXSkgeworCQkJCQkJZFtqXSA9IGM7CisJCQkJCQlwcmVkW2pdID0gaTsKKwkJCQkJCWlmIChjID09IG1pbikgeworCQkJCQkJCWlmIChjb2x1bW4ycm93W2pdID09IC0xKQorCQkJCQkJCQlnb3RvIHVwZGF0ZTsKKwkJCQkJCQljb2xba10gPSBjb2xbdXBdOworCQkJCQkJCWNvbFt1cCsrXSA9IGo7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9IHdoaWxlIChsb3cgIT0gdXApOworCQl9IHdoaWxlIChsb3cgPT0gdXApOworCit1cGRhdGU6CisJCS8qIHVwZGF0aW5nIG9mIHRoZSBjb2x1bW4gcGllY2VzICovCisJCWZvciAoayA9IDA7IGsgPCBsYXN0OyBrKyspIHsKKwkJCWludCBqMSA9IGNvbFtrXTsKKwkJCXZbajFdICs9IGRbajFdIC0gbWluOworCQl9CisKKwkJLyogYXVnbWVudGF0aW9uICovCisJCWRvIHsKKwkJCWlmIChqIDwgMCkKKwkJCQlCVUcoIm5lZ2F0aXZlIGo6ICVkIiwgaik7CisJCQlpID0gcHJlZFtqXTsKKwkJCWNvbHVtbjJyb3dbal0gPSBpOworCQkJU1dBUChqLCByb3cyY29sdW1uW2ldKTsKKwkJfSB3aGlsZSAoaTEgIT0gaSk7CisJfQorCisJZnJlZShjb2wpOworCWZyZWUocHJlZCk7CisJZnJlZShkKTsKKwlmcmVlKHYpOworCWZyZWUoZnJlZV9yb3cpOworfQpkaWZmIC0tZ2l0IGEvbGluZWFyLWFzc2lnbm1lbnQuaCBiL2xpbmVhci1hc3NpZ25tZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRmZWE3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpbmVhci1hc3NpZ25tZW50LmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBMSU5FQVJfQVNTSUdOTUVOVF9ICisjZGVmaW5lIExJTkVBUl9BU1NJR05NRU5UX0gKKworLyoKKyAqIENvbXB1dGUgYW4gYXNzaWdubWVudCBvZiBjb2x1bW5zIC0+IHJvd3MgKGFuZCB2aWNlIHZlcnNhKSBzdWNoIHRoYXQgZXZlcnkKKyAqIGNvbHVtbiBpcyBhc3NpZ25lZCB0byBhdCBtb3N0IG9uZSByb3cgKGFuZCB2aWNlIHZlcnNhKSBtaW5pbWl6aW5nIHRoZQorICogb3ZlcmFsbCBjb3N0LgorICoKKyAqIFRoZSBwYXJhbWV0ZXIgYGNvc3RgIGlzIHRoZSBjb3N0IG1hdHJpeDogdGhlIGNvc3QgdG8gYXNzaWduIGNvbHVtbiBqIHRvIHJvdworICogaSBpcyBgY29zdFtqICsgY29sdW1uX2NvdW50ICogaV0uCisgKgorICogVGhlIGFycmF5cyBjb2x1bW4ycm93IGFuZCByb3cyY29sdW1uIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggdGhlIHJlc3BlY3RpdmUKKyAqIGFzc2lnbm1lbnRzICgtMSBmb3IgdW5hc3NpZ25lZCwgd2hpY2ggY2FuIGhhcHBlbiBvbmx5IGlmIGNvbHVtbl9jb3VudCAhPQorICogcm93X2NvdW50KS4KKyAqLwordm9pZCBjb21wdXRlX2Fzc2lnbm1lbnQoaW50IGNvbHVtbl9jb3VudCwgaW50IHJvd19jb3VudCwgaW50ICpjb3N0LAorCQkJaW50ICpjb2x1bW4ycm93LCBpbnQgKnJvdzJjb2x1bW4pOworCisvKiBUaGUgbWF4aW1hbCBjb3N0IGluIHRoZSBjb3N0IG1hdHJpeCAodG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cykuICovCisjZGVmaW5lIENPU1RfTUFYICgxPDwxNikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYyBiL2xpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NmJjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYwpAQCAtMCwwICsxLDM3MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidXJsLmgiCisKK3N0YXRpYyBpbnQgcGFyc2VfY29tYmluZV9maWx0ZXIoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJY29uc3QgY2hhciAqYXJnLAorCXN0cnVjdCBzdHJidWYgKmVycmJ1Zik7CisKKy8qCisgKiBQYXJzZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgdG8gdGhlICJmaWx0ZXIiIGtleXdvcmQuCisgKiBPbiB0aGUgY29tbWFuZCBsaW5lIHRoaXMgbG9va3MgbGlrZToKKyAqICAgICAgIC0tZmlsdGVyPTxhcmc+CisgKiBhbmQgaW4gdGhlIHBhY2sgcHJvdG9jb2wgYXM6CisgKiAgICAgICAiZmlsdGVyIiBTUCA8YXJnPgorICoKKyAqIFRoZSBmaWx0ZXIga2V5d29yZCB3aWxsIGJlIHVzZWQgYnkgbWFueSBjb21tYW5kcy4KKyAqIFNlZSBEb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0IGZvciBhbGxvd2VkIHZhbHVlcyBmb3IgPGFyZz4uCisgKgorICogQ2FwdHVyZSB0aGUgZ2l2ZW4gYXJnIGFzIHRoZSAiZmlsdGVyX3NwZWMiLiAgVGhpcyBjYW4gYmUgZm9yd2FyZGVkIHRvCisgKiBzdWJvcmRpbmF0ZSBjb21tYW5kcyB3aGVuIG5lY2Vzc2FyeSAoYWx0aG91Z2ggaXQncyBiZXR0ZXIgdG8gcGFzcyBpdCB0aHJvdWdoCisgKiBleHBhbmRfbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKCkgZmlyc3QpLiAgV2UgYWxzbyAiaW50ZXJuIiB0aGUgYXJnIGZvciB0aGUKKyAqIGNvbnZlbmllbmNlIG9mIHRoZSBjdXJyZW50IGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgZ2VudGx5X3BhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJY29uc3QgY2hhciAqYXJnLAorCXN0cnVjdCBzdHJidWYgKmVycmJ1ZikKK3sKKwljb25zdCBjaGFyICp2MDsKKworCWlmICghYXJnKQorCQlyZXR1cm4gMDsKKworCWlmIChmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlKQorCQlCVUcoImZpbHRlcl9vcHRpb25zIGFscmVhZHkgcG9wdWxhdGVkIik7CisKKwlpZiAoIXN0cmNtcChhcmcsICJibG9iOm5vbmUiKSkgeworCQlmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlID0gTE9GQ19CTE9CX05PTkU7CisJCXJldHVybiAwOworCisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICJibG9iOmxpbWl0PSIsICZ2MCkpIHsKKwkJaWYgKGdpdF9wYXJzZV91bG9uZyh2MCwgJmZpbHRlcl9vcHRpb25zLT5ibG9iX2xpbWl0X3ZhbHVlKSkgeworCQkJZmlsdGVyX29wdGlvbnMtPmNob2ljZSA9IExPRkNfQkxPQl9MSU1JVDsKKwkJCXJldHVybiAwOworCQl9CisKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgInRyZWU6IiwgJnYwKSkgeworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyh2MCwgJmZpbHRlcl9vcHRpb25zLT50cmVlX2V4Y2x1ZGVfZGVwdGgpKSB7CisJCQlzdHJidWZfYWRkc3RyKGVycmJ1ZiwgXygiZXhwZWN0ZWQgJ3RyZWU6PGRlcHRoPiciKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlID0gTE9GQ19UUkVFX0RFUFRIOworCQlyZXR1cm4gMDsKKworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAic3BhcnNlOm9pZD0iLCAmdjApKSB7CisJCWZpbHRlcl9vcHRpb25zLT5zcGFyc2Vfb2lkX25hbWUgPSB4c3RyZHVwKHYwKTsKKwkJZmlsdGVyX29wdGlvbnMtPmNob2ljZSA9IExPRkNfU1BBUlNFX09JRDsKKwkJcmV0dXJuIDA7CisKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgInNwYXJzZTpwYXRoPSIsICZ2MCkpIHsKKwkJaWYgKGVycmJ1ZikgeworCQkJc3RyYnVmX2FkZHN0cigKKwkJCQllcnJidWYsCisJCQkJXygic3BhcnNlOnBhdGggZmlsdGVycyBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQiKSk7CisJCX0KKwkJcmV0dXJuIDE7CisKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgImNvbWJpbmU6IiwgJnYwKSkgeworCQlyZXR1cm4gcGFyc2VfY29tYmluZV9maWx0ZXIoZmlsdGVyX29wdGlvbnMsIHYwLCBlcnJidWYpOworCisJfQorCS8qCisJICogUGxlYXNlIHVwZGF0ZSBfZ2l0X2ZldGNoKCkgaW4gZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdQorCSAqIGFkZCBuZXcgZmlsdGVycworCSAqLworCisJc3RyYnVmX2FkZGYoZXJyYnVmLCBfKCJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciKSwgYXJnKTsKKworCW1lbXNldChmaWx0ZXJfb3B0aW9ucywgMCwgc2l6ZW9mKCpmaWx0ZXJfb3B0aW9ucykpOworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqUkVTRVJWRURfTk9OX1dTID0gIn5gIUAjJF4mKigpW117fVxcOydcIiw8Pj8iOworCitzdGF0aWMgaW50IGhhc19yZXNlcnZlZF9jaGFyYWN0ZXIoCisJc3RydWN0IHN0cmJ1ZiAqc3ViX3NwZWMsIHN0cnVjdCBzdHJidWYgKmVycmJ1ZikKK3sKKwljb25zdCBjaGFyICpjID0gc3ViX3NwZWMtPmJ1ZjsKKwl3aGlsZSAoKmMpIHsKKwkJaWYgKCpjIDw9ICcgJyB8fCBzdHJjaHIoUkVTRVJWRURfTk9OX1dTLCAqYykpIHsKKwkJCXN0cmJ1Zl9hZGRmKAorCQkJCWVycmJ1ZiwKKwkJCQlfKCJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIpLAorCQkJCSpjKTsKKwkJCXJldHVybiAxOworCQl9CisJCWMrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9jb21iaW5lX3N1YmZpbHRlcigKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwlzdHJ1Y3Qgc3RyYnVmICpzdWJzcGVjLAorCXN0cnVjdCBzdHJidWYgKmVycmJ1ZikKK3sKKwlzaXplX3QgbmV3X2luZGV4ID0gZmlsdGVyX29wdGlvbnMtPnN1Yl9ucjsKKwljaGFyICpkZWNvZGVkOworCWludCByZXN1bHQ7CisKKwlBTExPQ19HUk9XX0JZKGZpbHRlcl9vcHRpb25zLT5zdWIsIGZpbHRlcl9vcHRpb25zLT5zdWJfbnIsIDEsCisJCSAgICAgIGZpbHRlcl9vcHRpb25zLT5zdWJfYWxsb2MpOworCisJZGVjb2RlZCA9IHVybF9wZXJjZW50X2RlY29kZShzdWJzcGVjLT5idWYpOworCisJcmVzdWx0ID0gaGFzX3Jlc2VydmVkX2NoYXJhY3RlcihzdWJzcGVjLCBlcnJidWYpIHx8CisJCWdlbnRseV9wYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKAorCQkJJmZpbHRlcl9vcHRpb25zLT5zdWJbbmV3X2luZGV4XSwgZGVjb2RlZCwgZXJyYnVmKTsKKworCWZyZWUoZGVjb2RlZCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBwYXJzZV9jb21iaW5lX2ZpbHRlcigKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwljb25zdCBjaGFyICphcmcsCisJc3RydWN0IHN0cmJ1ZiAqZXJyYnVmKQoreworCXN0cnVjdCBzdHJidWYgKipzdWJzcGVjcyA9IHN0cmJ1Zl9zcGxpdF9zdHIoYXJnLCAnKycsIDApOworCXNpemVfdCBzdWI7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAoIXN1YnNwZWNzWzBdKSB7CisJCXN0cmJ1Zl9hZGRzdHIoZXJyYnVmLCBfKCJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiKSk7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlmb3IgKHN1YiA9IDA7IHN1YnNwZWNzW3N1Yl0gJiYgIXJlc3VsdDsgc3ViKyspIHsKKwkJaWYgKHN1YnNwZWNzW3N1YiArIDFdKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBub3QgdGhlIGxhc3Qgc3Vic3BlYy4gUmVtb3ZlIHRyYWlsaW5nICIrIiBzbworCQkJICogd2UgY2FuIHBhcnNlIGl0LgorCQkJICovCisJCQlzaXplX3QgbGFzdCA9IHN1YnNwZWNzW3N1Yl0tPmxlbiAtIDE7CisJCQlhc3NlcnQoc3Vic3BlY3Nbc3ViXS0+YnVmW2xhc3RdID09ICcrJyk7CisJCQlzdHJidWZfcmVtb3ZlKHN1YnNwZWNzW3N1Yl0sIGxhc3QsIDEpOworCQl9CisJCXJlc3VsdCA9IHBhcnNlX2NvbWJpbmVfc3ViZmlsdGVyKAorCQkJZmlsdGVyX29wdGlvbnMsIHN1YnNwZWNzW3N1Yl0sIGVycmJ1Zik7CisJfQorCisJZmlsdGVyX29wdGlvbnMtPmNob2ljZSA9IExPRkNfQ09NQklORTsKKworY2xlYW51cDoKKwlzdHJidWZfbGlzdF9mcmVlKHN1YnNwZWNzKTsKKwlpZiAocmVzdWx0KSB7CisJCWxpc3Rfb2JqZWN0c19maWx0ZXJfcmVsZWFzZShmaWx0ZXJfb3B0aW9ucyk7CisJCW1lbXNldChmaWx0ZXJfb3B0aW9ucywgMCwgc2l6ZW9mKCpmaWx0ZXJfb3B0aW9ucykpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGFsbG93X3VuZW5jb2RlZChjaGFyIGNoKQoreworCWlmIChjaCA8PSAnICcgfHwgY2ggPT0gJyUnIHx8IGNoID09ICcrJykKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFzdHJjaHIoUkVTRVJWRURfTk9OX1dTLCBjaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlcl9zcGVjX2FwcGVuZF91cmxlbmNvZGUoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyLCBjb25zdCBjaGFyICpyYXcpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCByYXcsIGFsbG93X3VuZW5jb2RlZCk7CisJdHJhY2VfcHJpbnRmKCJBZGQgdG8gY29tYmluZSBmaWx0ZXItc3BlYzogJXNcbiIsIGJ1Zi5idWYpOworCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsdGVyLT5maWx0ZXJfc3BlYywgc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7Cit9CisKKy8qCisgKiBDaGFuZ2VzIGZpbHRlcl9vcHRpb25zIGludG8gYW4gZXF1aXZhbGVudCBMT0ZDX0NPTUJJTkUgZmlsdGVyIG9wdGlvbnMKKyAqIGluc3RhbmNlLiBEb2VzIG5vdCBkbyBhbnl0aGluZyBpZiBmaWx0ZXJfb3B0aW9ucyBpcyBhbHJlYWR5IExPRkNfQ09NQklORS4KKyAqLworc3RhdGljIHZvaWQgdHJhbnNmb3JtX3RvX2NvbWJpbmVfdHlwZSgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucykKK3sKKwlhc3NlcnQoZmlsdGVyX29wdGlvbnMtPmNob2ljZSk7CisJaWYgKGZpbHRlcl9vcHRpb25zLT5jaG9pY2UgPT0gTE9GQ19DT01CSU5FKQorCQlyZXR1cm47CisJeworCQljb25zdCBpbnQgaW5pdGlhbF9zdWJfYWxsb2MgPSAyOworCQlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpzdWJfYXJyYXkgPQorCQkJeGNhbGxvYyhpbml0aWFsX3N1Yl9hbGxvYywgc2l6ZW9mKCpzdWJfYXJyYXkpKTsKKwkJc3ViX2FycmF5WzBdID0gKmZpbHRlcl9vcHRpb25zOworCQltZW1zZXQoZmlsdGVyX29wdGlvbnMsIDAsIHNpemVvZigqZmlsdGVyX29wdGlvbnMpKTsKKwkJZmlsdGVyX29wdGlvbnMtPnN1YiA9IHN1Yl9hcnJheTsKKwkJZmlsdGVyX29wdGlvbnMtPnN1Yl9hbGxvYyA9IGluaXRpYWxfc3ViX2FsbG9jOworCX0KKwlmaWx0ZXJfb3B0aW9ucy0+c3ViX25yID0gMTsKKwlmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlID0gTE9GQ19DT01CSU5FOworCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsdGVyX29wdGlvbnMtPmZpbHRlcl9zcGVjLCB4c3RyZHVwKCJjb21iaW5lOiIpKTsKKwlmaWx0ZXJfc3BlY19hcHBlbmRfdXJsZW5jb2RlKAorCQlmaWx0ZXJfb3B0aW9ucywKKwkJbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKCZmaWx0ZXJfb3B0aW9ucy0+c3ViWzBdKSk7CisJLyoKKwkgKiBXZSBkb24ndCBuZWVkIHRoZSBmaWx0ZXJfc3BlYyBzdHJpbmdzIGZvciBzdWJmaWx0ZXIgc3BlY3MsIG9ubHkgdGhlCisJICogdG9wIGxldmVsLgorCSAqLworCXN0cmluZ19saXN0X2NsZWFyKCZmaWx0ZXJfb3B0aW9ucy0+c3ViWzBdLmZpbHRlcl9zcGVjLCAvKmZyZWVfdXRpbD0qLzApOworfQorCit2b2lkIGxpc3Rfb2JqZWN0c19maWx0ZXJfZGllX2lmX3BvcHVsYXRlZCgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucykKK3sKKwlpZiAoZmlsdGVyX29wdGlvbnMtPmNob2ljZSkKKwkJZGllKF8oIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiKSk7Cit9CisKK3ZvaWQgcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwljb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnJidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcGFyc2VfZXJyb3I7CisKKwlpZiAoIWZpbHRlcl9vcHRpb25zLT5jaG9pY2UpIHsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWx0ZXJfb3B0aW9ucy0+ZmlsdGVyX3NwZWMsIHhzdHJkdXAoYXJnKSk7CisKKwkJcGFyc2VfZXJyb3IgPSBnZW50bHlfcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigKKwkJCWZpbHRlcl9vcHRpb25zLCBhcmcsICZlcnJidWYpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE1ha2UgZmlsdGVyX29wdGlvbnMgYW4gTE9GQ19DT01CSU5FIHNwZWMgc28gd2UgY2FuIHRyaXZpYWxseQorCQkgKiBhZGQgc3Vic3BlY3MgdG8gaXQuCisJCSAqLworCQl0cmFuc2Zvcm1fdG9fY29tYmluZV90eXBlKGZpbHRlcl9vcHRpb25zKTsKKworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmZpbHRlcl9vcHRpb25zLT5maWx0ZXJfc3BlYywgeHN0cmR1cCgiKyIpKTsKKwkJZmlsdGVyX3NwZWNfYXBwZW5kX3VybGVuY29kZShmaWx0ZXJfb3B0aW9ucywgYXJnKTsKKwkJQUxMT0NfR1JPV19CWShmaWx0ZXJfb3B0aW9ucy0+c3ViLCBmaWx0ZXJfb3B0aW9ucy0+c3ViX25yLCAxLAorCQkJICAgICAgZmlsdGVyX29wdGlvbnMtPnN1Yl9hbGxvYyk7CisKKwkJcGFyc2VfZXJyb3IgPSBnZW50bHlfcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigKKwkJCSZmaWx0ZXJfb3B0aW9ucy0+c3ViW2ZpbHRlcl9vcHRpb25zLT5zdWJfbnIgLSAxXSwgYXJnLAorCQkJJmVycmJ1Zik7CisJfQorCWlmIChwYXJzZV9lcnJvcikKKwkJZGllKCIlcyIsIGVycmJ1Zi5idWYpOworfQorCitpbnQgb3B0X3BhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMgPSBvcHQtPnZhbHVlOworCisJaWYgKHVuc2V0IHx8ICFhcmcpCisJCWxpc3Rfb2JqZWN0c19maWx0ZXJfc2V0X25vX2ZpbHRlcihmaWx0ZXJfb3B0aW9ucyk7CisJZWxzZQorCQlwYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKGZpbHRlcl9vcHRpb25zLCBhcmcpOworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpsaXN0X29iamVjdHNfZmlsdGVyX3NwZWMoc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKQoreworCWlmICghZmlsdGVyLT5maWx0ZXJfc3BlYy5ucikKKwkJQlVHKCJubyBmaWx0ZXJfc3BlYyBhdmFpbGFibGUgZm9yIHRoaXMgZmlsdGVyIik7CisJaWYgKGZpbHRlci0+ZmlsdGVyX3NwZWMubnIgIT0gMSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGNvbmNhdHRlZCA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkX3NlcGFyYXRlZF9zdHJpbmdfbGlzdCgKKwkJCSZjb25jYXR0ZWQsICIiLCAmZmlsdGVyLT5maWx0ZXJfc3BlYyk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZmaWx0ZXItPmZpbHRlcl9zcGVjLCAvKmZyZWVfdXRpbD0qLzApOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoCisJCQkmZmlsdGVyLT5maWx0ZXJfc3BlYywgc3RyYnVmX2RldGFjaCgmY29uY2F0dGVkLCBOVUxMKSk7CisJfQorCisJcmV0dXJuIGZpbHRlci0+ZmlsdGVyX3NwZWMuaXRlbXNbMF0uc3RyaW5nOworfQorCitjb25zdCBjaGFyICpleHBhbmRfbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcikKK3sKKwlpZiAoZmlsdGVyLT5jaG9pY2UgPT0gTE9GQ19CTE9CX0xJTUlUKSB7CisJCXN0cnVjdCBzdHJidWYgZXhwYW5kZWRfc3BlYyA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmZXhwYW5kZWRfc3BlYywgImJsb2I6bGltaXQ9JWx1IiwKKwkJCSAgICBmaWx0ZXItPmJsb2JfbGltaXRfdmFsdWUpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmZmlsdGVyLT5maWx0ZXJfc3BlYywgLypmcmVlX3V0aWw9Ki8wKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKAorCQkJJmZpbHRlci0+ZmlsdGVyX3NwZWMsCisJCQlzdHJidWZfZGV0YWNoKCZleHBhbmRlZF9zcGVjLCBOVUxMKSk7CisJfQorCisJcmV0dXJuIGxpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYyhmaWx0ZXIpOworfQorCit2b2lkIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVsZWFzZSgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucykKK3sKKwlzaXplX3Qgc3ViOworCisJaWYgKCFmaWx0ZXJfb3B0aW9ucykKKwkJcmV0dXJuOworCXN0cmluZ19saXN0X2NsZWFyKCZmaWx0ZXJfb3B0aW9ucy0+ZmlsdGVyX3NwZWMsIC8qZnJlZV91dGlsPSovMCk7CisJZnJlZShmaWx0ZXJfb3B0aW9ucy0+c3BhcnNlX29pZF9uYW1lKTsKKwlmb3IgKHN1YiA9IDA7IHN1YiA8IGZpbHRlcl9vcHRpb25zLT5zdWJfbnI7IHN1YisrKQorCQlsaXN0X29iamVjdHNfZmlsdGVyX3JlbGVhc2UoJmZpbHRlcl9vcHRpb25zLT5zdWJbc3ViXSk7CisJZnJlZShmaWx0ZXJfb3B0aW9ucy0+c3ViKTsKKwltZW1zZXQoZmlsdGVyX29wdGlvbnMsIDAsIHNpemVvZigqZmlsdGVyX29wdGlvbnMpKTsKK30KKwordm9pZCBwYXJ0aWFsX2Nsb25lX3JlZ2lzdGVyKAorCWNvbnN0IGNoYXIgKnJlbW90ZSwKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucykKK3sKKwljaGFyICpjZmdfbmFtZTsKKwljaGFyICpmaWx0ZXJfbmFtZTsKKworCS8qIENoZWNrIGlmIGl0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCWlmICghcHJvbWlzb3JfcmVtb3RlX2ZpbmQocmVtb3RlKSkgeworCQlnaXRfY29uZmlnX3NldCgiY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiIsICIxIik7CisKKwkJLyogQWRkIHByb21pc29yIGNvbmZpZyBmb3IgdGhlIHJlbW90ZSAqLworCQljZmdfbmFtZSA9IHhzdHJmbXQoInJlbW90ZS4lcy5wcm9taXNvciIsIHJlbW90ZSk7CisJCWdpdF9jb25maWdfc2V0KGNmZ19uYW1lLCAidHJ1ZSIpOworCQlmcmVlKGNmZ19uYW1lKTsKKwl9CisKKwkvKgorCSAqIFJlY29yZCB0aGUgaW5pdGlhbCBmaWx0ZXItc3BlYyBpbiB0aGUgY29uZmlnIGFzCisJICogdGhlIGRlZmF1bHQgZm9yIHN1YnNlcXVlbnQgZmV0Y2hlcyBmcm9tIHRoaXMgcmVtb3RlLgorCSAqLworCWZpbHRlcl9uYW1lID0geHN0cmZtdCgicmVtb3RlLiVzLnBhcnRpYWxjbG9uZWZpbHRlciIsIHJlbW90ZSk7CisJLyogTkVFRFNXT1JLOiAnZXhwYW5kJyByZXN1bHQgbGVha2luZz8/PyAqLworCWdpdF9jb25maWdfc2V0KGZpbHRlcl9uYW1lLAorCQkgICAgICAgZXhwYW5kX2xpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYyhmaWx0ZXJfb3B0aW9ucykpOworCWZyZWUoZmlsdGVyX25hbWUpOworCisJLyogTWFrZSBzdXJlIHRoZSBjb25maWcgaW5mbyBhcmUgcmVzZXQgKi8KKwlwcm9taXNvcl9yZW1vdGVfcmVpbml0KCk7Cit9CisKK3ZvaWQgcGFydGlhbF9jbG9uZV9nZXRfZGVmYXVsdF9maWx0ZXJfc3BlYygKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwljb25zdCBjaGFyICpyZW1vdGUpCit7CisJc3RydWN0IHByb21pc29yX3JlbW90ZSAqcHJvbWlzb3IgPSBwcm9taXNvcl9yZW1vdGVfZmluZChyZW1vdGUpOworCXN0cnVjdCBzdHJidWYgZXJyYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkvKgorCSAqIFBhcnNlIGRlZmF1bHQgdmFsdWUsIGJ1dCBzaWxlbnRseSBpZ25vcmUgaXQgaWYgaXQgaXMgaW52YWxpZC4KKwkgKi8KKwlpZiAoIXByb21pc29yKQorCQlyZXR1cm47CisKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJmZpbHRlcl9vcHRpb25zLT5maWx0ZXJfc3BlYywKKwkJCSAgIHByb21pc29yLT5wYXJ0aWFsX2Nsb25lX2ZpbHRlcik7CisJZ2VudGx5X3BhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoZmlsdGVyX29wdGlvbnMsCisJCQkJCSBwcm9taXNvci0+cGFydGlhbF9jbG9uZV9maWx0ZXIsCisJCQkJCSAmZXJyYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyYnVmKTsKK30KZGlmZiAtLWdpdCBhL2xpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIGIvbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmYjM5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oCkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIExJU1RfT0JKRUNUU19GSUxURVJfT1BUSU9OU19ICisjZGVmaW5lIExJU1RfT0JKRUNUU19GSUxURVJfT1BUSU9OU19ICisKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyoKKyAqIFRoZSBsaXN0IG9mIGRlZmluZWQgZmlsdGVycyBmb3IgbGlzdC1vYmplY3RzLgorICovCitlbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfY2hvaWNlIHsKKwlMT0ZDX0RJU0FCTEVEID0gMCwKKwlMT0ZDX0JMT0JfTk9ORSwKKwlMT0ZDX0JMT0JfTElNSVQsCisJTE9GQ19UUkVFX0RFUFRILAorCUxPRkNfU1BBUlNFX09JRCwKKwlMT0ZDX0NPTUJJTkUsCisJTE9GQ19fQ09VTlQgLyogbXVzdCBiZSBsYXN0ICovCit9OworCitzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIHsKKwkvKgorCSAqICdmaWx0ZXJfc3BlYycgaXMgdGhlIHJhdyBhcmd1bWVudCB2YWx1ZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lCisJICogb3IgcHJvdG9jb2wgcmVxdWVzdC4gIChUaGUgcGFydCBhZnRlciB0aGUgIi0ta2V5d29yZD0iLikgIEZvcgorCSAqIGNvbW1hbmRzIHRoYXQgbGF1bmNoIGZpbHRlcmluZyBzdWItcHJvY2Vzc2VzLCBvciBmb3IgY29tbXVuaWNhdGlvbgorCSAqIG92ZXIgdGhlIG5ldHdvcmssIGRvbid0IHVzZSB0aGlzIHZhbHVlOyB1c2UgdGhlIHJlc3VsdCBvZgorCSAqIGV4cGFuZF9saXN0X29iamVjdHNfZmlsdGVyX3NwZWMoKSBpbnN0ZWFkLgorCSAqIFRvIGdldCB0aGUgcmF3IGZpbHRlciBzcGVjIGdpdmVuIGJ5IHRoZSB1c2VyLCB1c2UgdGhlIHJlc3VsdCBvZgorCSAqIGxpc3Rfb2JqZWN0c19maWx0ZXJfc3BlYygpLgorCSAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCBmaWx0ZXJfc3BlYzsKKworCS8qCisJICogJ2Nob2ljZScgaXMgZGV0ZXJtaW5lZCBieSBwYXJzaW5nIHRoZSBmaWx0ZXItc3BlYy4gIFRoaXMgaW5kaWNhdGVzCisJICogdGhlIGZpbHRlcmluZyBhbGdvcml0aG0gdG8gdXNlLgorCSAqLworCWVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9jaG9pY2UgY2hvaWNlOworCisJLyoKKwkgKiBDaG9pY2UgaXMgTE9GQ19ESVNBQkxFRCBiZWNhdXNlICItLW5vLWZpbHRlciIgd2FzIHJlcXVlc3RlZC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbm9fZmlsdGVyIDogMTsKKworCS8qCisJICogQkVHSU4gY2hvaWNlLXNwZWNpZmljIHBhcnNlZCB2YWx1ZXMgZnJvbSB3aXRoaW4gdGhlIGZpbHRlci1zcGVjLiBPbmx5CisJICogc29tZSB2YWx1ZXMgd2lsbCBiZSBkZWZpbmVkIGZvciBhbnkgZ2l2ZW4gY2hvaWNlLgorCSAqLworCisJY2hhciAqc3BhcnNlX29pZF9uYW1lOworCXVuc2lnbmVkIGxvbmcgYmxvYl9saW1pdF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHRyZWVfZXhjbHVkZV9kZXB0aDsKKworCS8qIExPRkNfQ09NQklORSB2YWx1ZXMgKi8KKworCS8qIFRoaXMgYXJyYXkgY29udGFpbnMgYWxsIHRoZSBzdWJmaWx0ZXJzIHdoaWNoIHRoaXMgZmlsdGVyIGNvbWJpbmVzLiAqLworCXNpemVfdCBzdWJfbnIsIHN1Yl9hbGxvYzsKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpzdWI7CisKKwkvKgorCSAqIEVORCBjaG9pY2Utc3BlY2lmaWMgcGFyc2VkIHZhbHVlcy4KKwkgKi8KK307CisKKy8qIE5vcm1hbGl6ZWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworI2RlZmluZSBDTF9BUkdfX0ZJTFRFUiAiZmlsdGVyIgorCit2b2lkIGxpc3Rfb2JqZWN0c19maWx0ZXJfZGllX2lmX3BvcHVsYXRlZCgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucyk7CisKKy8qCisgKiBQYXJzZXMgdGhlIGZpbHRlciBzcGVjIHN0cmluZyBnaXZlbiBieSBhcmcgYW5kIGVpdGhlciAoMSkgc2ltcGx5IHBsYWNlcyB0aGUKKyAqIHJlc3VsdCBpbiBmaWx0ZXJfb3B0aW9ucyBpZiBpdCBpcyBub3QgeWV0IHBvcHVsYXRlZCBvciAoMikgY29tYmluZXMgaXQgd2l0aAorICogdGhlIGZpbHRlciBhbHJlYWR5IGluIGZpbHRlcl9vcHRpb25zIGlmIGl0IGlzIGFscmVhZHkgcG9wdWxhdGVkLiBJbiB0aGUgY2FzZQorICogb2YgKDIpLCB0aGUgZmlsdGVyIHNwZWNzIGFyZSBjb21iaW5lZCBhcyBpZiBzcGVjaWZpZWQgd2l0aCAnY29tYmluZTonLgorICoKKyAqIERpZXMgYW5kIHByaW50cyBhIHVzZXItZmFjaW5nIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzLgorICovCit2b2lkIHBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJY29uc3QgY2hhciAqYXJnKTsKKworaW50IG9wdF9wYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KTsKKworI2RlZmluZSBPUFRfUEFSU0VfTElTVF9PQkpFQ1RTX0ZJTFRFUihmbykgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCBDTF9BUkdfX0ZJTFRFUiwgZm8sIE5fKCJhcmdzIiksIFwKKwkgIE5fKCJvYmplY3QgZmlsdGVyaW5nIiksIDAsIFwKKwkgIG9wdF9wYXJzZV9saXN0X29iamVjdHNfZmlsdGVyIH0KKworLyoKKyAqIFRyYW5zbGF0ZXMgYWJicmV2aWF0ZWQgbnVtYmVycyBpbiB0aGUgZmlsdGVyJ3MgZmlsdGVyX3NwZWMgaW50byB0aGVpcgorICogZnVsbHktZXhwYW5kZWQgZm9ybXMgKGUuZy4sICJsaW1pdDpibG9iPTFrIiBiZWNvbWVzICJsaW1pdDpibG9iPTEwMjQiKS4KKyAqIFJldHVybnMgYSBzdHJpbmcgb3duZWQgYnkgdGhlIGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBvYmplY3QuCisgKgorICogVGhpcyBmb3JtIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHJhdyBsaXN0X29iamVjdHNfZmlsdGVyX3NwZWMoKQorICogdmFsdWUgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggYSByZW1vdGUgcHJvY2VzcyBvciBzdWJwcm9jZXNzLgorICovCitjb25zdCBjaGFyICpleHBhbmRfbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcik7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBmaWx0ZXIgc3BlYyBzdHJpbmcgbW9yZSBvciBsZXNzIGluIHRoZSBmb3JtIGFzIHRoZSB1c2VyCisgKiBlbnRlcmVkIGl0LiBUaGlzIGZvcm0gb2YgdGhlIGZpbHRlcl9zcGVjIGNhbiBiZSB1c2VkIGluIHVzZXItZmFjaW5nCisgKiBtZXNzYWdlcy4gIFJldHVybnMgYSBzdHJpbmcgb3duZWQgYnkgdGhlIGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucworICogb2JqZWN0LgorICovCitjb25zdCBjaGFyICpsaXN0X29iamVjdHNfZmlsdGVyX3NwZWMoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKTsKKwordm9pZCBsaXN0X29iamVjdHNfZmlsdGVyX3JlbGVhc2UoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9vYmplY3RzX2ZpbHRlcl9zZXRfbm9fZmlsdGVyKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zKQoreworCWxpc3Rfb2JqZWN0c19maWx0ZXJfcmVsZWFzZShmaWx0ZXJfb3B0aW9ucyk7CisJZmlsdGVyX29wdGlvbnMtPm5vX2ZpbHRlciA9IDE7Cit9CisKK3ZvaWQgcGFydGlhbF9jbG9uZV9yZWdpc3RlcigKKwljb25zdCBjaGFyICpyZW1vdGUsCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMpOwordm9pZCBwYXJ0aWFsX2Nsb25lX2dldF9kZWZhdWx0X2ZpbHRlcl9zcGVjKAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zLAorCWNvbnN0IGNoYXIgKnJlbW90ZSk7CisKKyNlbmRpZiAvKiBMSVNUX09CSkVDVFNfRklMVEVSX09QVElPTlNfSCAqLwpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLWZpbHRlci5jIGIvbGlzdC1vYmplY3RzLWZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOGQ0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LW9iamVjdHMtZmlsdGVyLmMKQEAgLTAsMCArMSw3MTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLWZpbHRlci5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIgorI2luY2x1ZGUgIm9pZG1hcC5oIgorI2luY2x1ZGUgIm9pZHNldC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworLyoKKyAqIEZJTFRFUl9TSE9XTl9CVVRfUkVWSVNJVCAtLSB3ZSBzZXQgdGhpcyBiaXQgb24gdHJlZSBvYmplY3RzCisgKiB0aGF0IGhhdmUgYmVlbiBzaG93biwgYnV0IHNob3VsZCBiZSByZXZpc2l0ZWQgaWYgdGhleSBhcHBlYXIKKyAqIGluIHRoZSB0cmF2ZXJzYWwgKHVudGlsIHdlIG1hcmsgaXQgU0VFTikuICBUaGlzIGlzIGEgd2F5IHRvCisgKiBsZXQgdXMgc2lsZW50bHkgZGUtZHVwIGNhbGxzIHRvIHNob3coKSBpbiB0aGUgY2FsbGVyLiAgVGhpcworICogaXMgc3VidGx5IGRpZmZlcmVudCBmcm9tIHRoZSAicmV2aXNpb24uaDpTSE9XTiIgYW5kIHRoZQorICogInNoYTEtbmFtZS5jOk9ORUxJTkVfU0VFTiIgYml0cy4gIEFuZCBhbHNvIGRpZmZlcmVudCBmcm9tCisgKiB0aGUgbm9uLWRlLWR1cCB1c2FnZSBpbiBwYWNrLWJpdG1hcC5jCisgKi8KKyNkZWZpbmUgRklMVEVSX1NIT1dOX0JVVF9SRVZJU0lUICgxPDwyMSkKKworc3RydWN0IHN1YmZpbHRlciB7CisJc3RydWN0IGZpbHRlciAqZmlsdGVyOworCXN0cnVjdCBvaWRzZXQgc2VlbjsKKwlzdHJ1Y3Qgb2lkc2V0IG9taXRzOworCXN0cnVjdCBvYmplY3RfaWQgc2tpcF90cmVlOworCXVuc2lnbmVkIGlzX3NraXBwaW5nX3RyZWUgOiAxOworfTsKKworc3RydWN0IGZpbHRlciB7CisJZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCAoKmZpbHRlcl9vYmplY3RfZm4pKAorCQlzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3NpdHVhdGlvbiBmaWx0ZXJfc2l0dWF0aW9uLAorCQlzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCQljb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJc3RydWN0IG9pZHNldCAqb21pdHMsCisJCXZvaWQgKmZpbHRlcl9kYXRhKTsKKworCS8qCisJICogT3B0aW9uYWwuIElmIHRoaXMgZnVuY3Rpb24gaXMgc3VwcGxpZWQgYW5kIHRoZSBmaWx0ZXIgbmVlZHMKKwkgKiB0byBjb2xsZWN0IG9taXRzLCB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgYmVmb3JlCisJICogZnJlZV9mbiBpcyBjYWxsZWQuCisJICoKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIGZvbGxvd2luZyB0d28gY29uZGl0aW9ucyBob2xkOgorCSAqCisJICogICBhLiBBIHRyZWUgZmlsdGVyIGNhbiBhZGQgYW5kIHJlbW92ZSBvYmplY3RzIGFzIGFuIG9iamVjdAorCSAqICAgICAgZ3JhcGggaXMgdHJhdmVyc2VkLgorCSAqICAgYi4gQSBjb21iaW5lIGZpbHRlcidzIG9taXQgc2V0IGlzIHRoZSB1bmlvbiBvZiBhbGwgaXRzCisJICogICAgICBzdWJmaWx0ZXJzLCB3aGljaCBtYXkgaW5jbHVkZSB0cmVlOiBmaWx0ZXJzLgorCSAqCisJICogQXMgc3VjaCwgdGhlIG9taXRzIHNldHMgbXVzdCBiZSBzZXBhcmF0ZSBzZXRzLCBhbmQgY2FuIG9ubHkKKwkgKiBiZSB1bmlvbmVkIGFmdGVyIHRoZSB0cmF2ZXJzYWwgaXMgY29tcGxldGVkLgorCSAqLworCXZvaWQgKCpmaW5hbGl6ZV9vbWl0c19mbikoc3RydWN0IG9pZHNldCAqb21pdHMsIHZvaWQgKmZpbHRlcl9kYXRhKTsKKworCXZvaWQgKCpmcmVlX2ZuKSh2b2lkICpmaWx0ZXJfZGF0YSk7CisKKwl2b2lkICpmaWx0ZXJfZGF0YTsKKworCS8qIElmIG5vbi1OVUxMLCB0aGUgZmlsdGVyIGNvbGxlY3RzIGEgbGlzdCBvZiB0aGUgb21pdHRlZCBPSURzIGhlcmUuICovCisJc3RydWN0IG9pZHNldCAqb21pdHM7Cit9OworCitzdGF0aWMgZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCBmaWx0ZXJfYmxvYnNfbm9uZSgKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfc2l0dWF0aW9uIGZpbHRlcl9zaXR1YXRpb24sCisJc3RydWN0IG9iamVjdCAqb2JqLAorCWNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCWNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCXN0cnVjdCBvaWRzZXQgKm9taXRzLAorCXZvaWQgKmZpbHRlcl9kYXRhXykKK3sKKwlzd2l0Y2ggKGZpbHRlcl9zaXR1YXRpb24pIHsKKwlkZWZhdWx0OgorCQlCVUcoInVua25vd24gZmlsdGVyX3NpdHVhdGlvbjogJWQiLCBmaWx0ZXJfc2l0dWF0aW9uKTsKKworCWNhc2UgTE9GU19CRUdJTl9UUkVFOgorCQlhc3NlcnQob2JqLT50eXBlID09IE9CSl9UUkVFKTsKKwkJLyogYWx3YXlzIGluY2x1ZGUgYWxsIHRyZWUgb2JqZWN0cyAqLworCQlyZXR1cm4gTE9GUl9NQVJLX1NFRU4gfCBMT0ZSX0RPX1NIT1c7CisKKwljYXNlIExPRlNfRU5EX1RSRUU6CisJCWFzc2VydChvYmotPnR5cGUgPT0gT0JKX1RSRUUpOworCQlyZXR1cm4gTE9GUl9aRVJPOworCisJY2FzZSBMT0ZTX0JMT0I6CisJCWFzc2VydChvYmotPnR5cGUgPT0gT0JKX0JMT0IpOworCQlhc3NlcnQoKG9iai0+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+c3ViW3N1Yl0ub21pdHMgOiBOVUxMLAorCQkJJmZpbHRlcl9vcHRpb25zLT5zdWJbc3ViXSk7CisKKwlmaWx0ZXItPmZpbHRlcl9kYXRhID0gZDsKKwlmaWx0ZXItPmZpbHRlcl9vYmplY3RfZm4gPSBmaWx0ZXJfY29tYmluZTsKKwlmaWx0ZXItPmZyZWVfZm4gPSBmaWx0ZXJfY29tYmluZV9fZnJlZTsKKwlmaWx0ZXItPmZpbmFsaXplX29taXRzX2ZuID0gZmlsdGVyX2NvbWJpbmVfX2ZpbmFsaXplX29taXRzOworfQorCit0eXBlZGVmIHZvaWQgKCpmaWx0ZXJfaW5pdF9mbikoCisJc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyX29wdGlvbnMsCisJc3RydWN0IGZpbHRlciAqZmlsdGVyKTsKKworLyoKKyAqIE11c3QgbWF0Y2ggImVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9jaG9pY2UiLgorICovCitzdGF0aWMgZmlsdGVyX2luaXRfZm4gc19maWx0ZXJzW10gPSB7CisJTlVMTCwKKwlmaWx0ZXJfYmxvYnNfbm9uZV9faW5pdCwKKwlmaWx0ZXJfYmxvYnNfbGltaXRfX2luaXQsCisJZmlsdGVyX3RyZWVzX2RlcHRoX19pbml0LAorCWZpbHRlcl9zcGFyc2Vfb2lkX19pbml0LAorCWZpbHRlcl9jb21iaW5lX19pbml0LAorfTsKKworc3RydWN0IGZpbHRlciAqbGlzdF9vYmplY3RzX2ZpbHRlcl9faW5pdCgKKwlzdHJ1Y3Qgb2lkc2V0ICpvbWl0dGVkLAorCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zKQoreworCXN0cnVjdCBmaWx0ZXIgKmZpbHRlcjsKKwlmaWx0ZXJfaW5pdF9mbiBpbml0X2ZuOworCisJYXNzZXJ0KChzaXplb2Yoc19maWx0ZXJzKSAvIHNpemVvZihzX2ZpbHRlcnNbMF0pKSA9PSBMT0ZDX19DT1VOVCk7CisKKwlpZiAoZmlsdGVyX29wdGlvbnMtPmNob2ljZSA+PSBMT0ZDX19DT1VOVCkKKwkJQlVHKCJpbnZhbGlkIGxpc3Qtb2JqZWN0cyBmaWx0ZXIgY2hvaWNlOiAlZCIsCisJCSAgICBmaWx0ZXJfb3B0aW9ucy0+Y2hvaWNlKTsKKworCWluaXRfZm4gPSBzX2ZpbHRlcnNbZmlsdGVyX29wdGlvbnMtPmNob2ljZV07CisJaWYgKCFpbml0X2ZuKQorCQlyZXR1cm4gTlVMTDsKKworCWZpbHRlciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpmaWx0ZXIpKTsKKwlmaWx0ZXItPm9taXRzID0gb21pdHRlZDsKKwlpbml0X2ZuKGZpbHRlcl9vcHRpb25zLCBmaWx0ZXIpOworCXJldHVybiBmaWx0ZXI7Cit9CisKK2VudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9yZXN1bHQgbGlzdF9vYmplY3RzX2ZpbHRlcl9fZmlsdGVyX29iamVjdCgKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfc2l0dWF0aW9uIGZpbHRlcl9zaXR1YXRpb24sCisJc3RydWN0IG9iamVjdCAqb2JqLAorCWNvbnN0IGNoYXIgKnBhdGhuYW1lLAorCWNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCXN0cnVjdCBmaWx0ZXIgKmZpbHRlcikKK3sKKwlpZiAoZmlsdGVyICYmIChvYmotPmZsYWdzICYgTk9UX1VTRVJfR0lWRU4pKQorCQlyZXR1cm4gZmlsdGVyLT5maWx0ZXJfb2JqZWN0X2ZuKHIsIGZpbHRlcl9zaXR1YXRpb24sIG9iaiwKKwkJCQkJCXBhdGhuYW1lLCBmaWxlbmFtZSwKKwkJCQkJCWZpbHRlci0+b21pdHMsCisJCQkJCQlmaWx0ZXItPmZpbHRlcl9kYXRhKTsKKwkvKgorCSAqIE5vIGZpbHRlciBpcyBhY3RpdmUgb3IgdXNlciBnYXZlIG9iamVjdCBleHBsaWNpdGx5LiBJbiB0aGlzIGNhc2UsCisJICogYWx3YXlzIHNob3cgdGhlIG9iamVjdCAoZXhjZXB0IHdoZW4gTE9GU19FTkRfVFJFRSwgc2luY2UgdGhpcyB0cmVlCisJICogaGFkIGFscmVhZHkgYmVlbiBzaG93biB3aGVuIExPRlNfQkVHSU5fVFJFRSkuCisJICovCisJaWYgKGZpbHRlcl9zaXR1YXRpb24gPT0gTE9GU19FTkRfVFJFRSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIExPRlJfTUFSS19TRUVOIHwgTE9GUl9ET19TSE9XOworfQorCit2b2lkIGxpc3Rfb2JqZWN0c19maWx0ZXJfX2ZyZWUoc3RydWN0IGZpbHRlciAqZmlsdGVyKQoreworCWlmICghZmlsdGVyKQorCQlyZXR1cm47CisJaWYgKGZpbHRlci0+ZmluYWxpemVfb21pdHNfZm4gJiYgZmlsdGVyLT5vbWl0cykKKwkJZmlsdGVyLT5maW5hbGl6ZV9vbWl0c19mbihmaWx0ZXItPm9taXRzLCBmaWx0ZXItPmZpbHRlcl9kYXRhKTsKKwlmaWx0ZXItPmZyZWVfZm4oZmlsdGVyLT5maWx0ZXJfZGF0YSk7CisJZnJlZShmaWx0ZXIpOworfQpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLWZpbHRlci5oIGIvbGlzdC1vYmplY3RzLWZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDc4NGUKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LW9iamVjdHMtZmlsdGVyLmgKQEAgLTAsMCArMSw5NSBAQAorI2lmbmRlZiBMSVNUX09CSkVDVFNfRklMVEVSX0gKKyNkZWZpbmUgTElTVF9PQkpFQ1RTX0ZJTFRFUl9ICisKK3N0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnM7CitzdHJ1Y3Qgb2JqZWN0Oworc3RydWN0IG9pZHNldDsKK3N0cnVjdCByZXBvc2l0b3J5OworCisvKgorICogRHVyaW5nIGxpc3Qtb2JqZWN0IHRyYXZlcnNhbCB3ZSBhbGxvdyBjZXJ0YWluIG9iamVjdHMgdG8gYmUKKyAqIGZpbHRlcmVkIChvbWl0dGVkKSBmcm9tIHRoZSByZXN1bHQuICBUaGUgYWN0aXZlIGZpbHRlciB1c2VzCisgKiB0aGVzZSByZXN1bHQgdmFsdWVzIHRvIGd1aWRlIGxpc3Qtb2JqZWN0cy4KKyAqCisgKiBfWkVSTyAgICAgIDogRG8gbm90aGluZyB3aXRoIHRoZSBvYmplY3QgYXQgdGhpcyB0aW1lLiAgSXQgbWF5CisgKiAgICAgICAgICAgICAgYmUgcmV2aXNpdGVkIGlmIGl0IGFwcGVhcnMgaW4gYW5vdGhlciBwbGFjZSBpbgorICogICAgICAgICAgICAgIHRoZSB0cmVlIG9yIGluIGFub3RoZXIgY29tbWl0IGR1cmluZyB0aGUgb3ZlcmFsbAorICogICAgICAgICAgICAgIHRyYXZlcnNhbC4KKyAqCisgKiBfTUFSS19TRUVOIDogTWFyayB0aGlzIG9iamVjdCBhcyAiU0VFTiIgaW4gdGhlIG9iamVjdCBmbGFncy4KKyAqICAgICAgICAgICAgICBUaGlzIHdpbGwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHJldmlzaXRlZCBkdXJpbmcKKyAqICAgICAgICAgICAgICB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cmF2ZXJzYWwuICBUaGlzIERPRVMgTk9UCisgKiAgICAgICAgICAgICAgaW1wbHkgdGhhdCBpdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRzLgorICoKKyAqIF9ET19TSE9XICAgOiBTaG93IHRoaXMgb2JqZWN0IGluIHRoZSByZXN1bHRzIChjYWxsIHNob3coKSBvbiBpdCkuCisgKiAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgb2JqZWN0cyBzaG91bGQgb25seSBiZSBzaG93biBvbmNlLCBidXQKKyAqICAgICAgICAgICAgICB0aGlzIHJlc3VsdCBET0VTIE5PVCBpbXBseSB0aGF0IHdlIG1hcmsgaXQgU0VFTi4KKyAqCisgKiBfU0tJUF9UUkVFIDogVXNlZCBpbiBMT0ZTX0JFR0lOX1RSRUUgc2l0dWF0aW9uIC0gaW5kaWNhdGVzIHRoYXQKKyAqICAgICAgICAgICAgICB0aGUgdHJlZSdzIGNoaWxkcmVuIHNob3VsZCBub3QgYmUgaXRlcmF0ZWQgb3Zlci4gVGhpcworICogICAgICAgICAgICAgIGlzIHVzZWQgYXMgYW4gb3B0aW1pemF0aW9uIHdoZW4gYWxsIGNoaWxkcmVuIHdpbGwKKyAqICAgICAgICAgICAgICBkZWZpbml0ZWx5IGJlIGlnbm9yZWQuCisgKgorICogTW9zdCBvZiB0aGUgdGltZSwgeW91IHdhbnQgdGhlIGNvbWJpbmF0aW9uIChfTUFSS19TRUVOIHwgX0RPX1NIT1cpCisgKiBidXQgdGhleSBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5LCBzdWNoIGFzIHdoZW4gc3BhcnNlLWNoZWNrb3V0CisgKiBwYXR0ZXJuIG1hdGNoaW5nIGlzIGJlaW5nIGFwcGxpZWQuCisgKgorICogQSBfTUFSS19TRUVOIHdpdGhvdXQgX0RPX1NIT1cgY2FuIGJlIGNhbGxlZCBhIGhhcmQtb21pdCAtLSB0aGUKKyAqIG9iamVjdCBpcyBub3Qgc2hvd24gYW5kIHdpbGwgbmV2ZXIgYmUgcmVjb25zaWRlcmVkICh1bmxlc3MgYQorICogcHJldmlvdXMgaXRlcmF0aW9uIGhhcyBhbHJlYWR5IHNob3duIGl0KS4KKyAqCisgKiBBIF9ET19TSE9XIHdpdGhvdXQgX01BUktfU0VFTiBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvCisgKiBpbmNsdWRlIGEgZGlyZWN0b3J5LCBidXQgdGhlbiByZXZpc2l0IGl0IHRvIHNlbGVjdGl2ZWx5IGluY2x1ZGUKKyAqIG9yIG9taXQgb2JqZWN0cyB3aXRoaW4gaXQuCisgKgorICogQSBfWkVSTyBjYW4gYmUgY2FsbGVkIGEgcHJvdmlzaW9uYWwtb21pdCAtLSB0aGUgb2JqZWN0IGlzIE5PVCBzaG93biwKKyAqIGJ1dCAqbWF5KiBiZSByZXZpc2l0ZWQgKGlmIHRoZSBvYmplY3QgYXBwZWFycyBhZ2FpbiBpbiB0aGUgdHJhdmVyc2FsKS4KKyAqIFRoZXJlZm9yZSwgaXQgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIHJlc3VsdHMgKnVubGVzcyogYSBsYXRlcgorICogaXRlcmF0aW9uIGNhdXNlcyBpdCB0byBiZSBzaG93bi4KKyAqLworZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCB7CisJTE9GUl9aRVJPICAgICAgPSAwLAorCUxPRlJfTUFSS19TRUVOID0gMTw8MCwKKwlMT0ZSX0RPX1NIT1cgICA9IDE8PDEsCisJTE9GUl9TS0lQX1RSRUUgPSAxPDwyLAorfTsKKworZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3NpdHVhdGlvbiB7CisJTE9GU19CRUdJTl9UUkVFLAorCUxPRlNfRU5EX1RSRUUsCisJTE9GU19CTE9CCit9OworCitzdHJ1Y3QgZmlsdGVyOworCisvKgorICogQ29uc3RydWN0b3IgZm9yIHRoZSBzZXQgb2YgZGVmaW5lZCBsaXN0LW9iamVjdHMgZmlsdGVycy4KKyAqIFRoZSBgb21pdHRlZGAgc2V0IGlzIG9wdGlvbmFsLiBJdCBpcyBwb3B1bGF0ZWQgd2l0aCBvYmplY3RzIHRoYXQgdGhlCisgKiBmaWx0ZXIgZXhjbHVkZXMuIFRoaXMgc2V0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBmaW5hbGl6ZWQgdW50aWwKKyAqIGFmdGVyIGxpc3Rfb2JqZWN0c19maWx0ZXJfX2ZyZWUgaXMgY2FsbGVkIG9uIHRoZSByZXR1cm5lZCBgc3RydWN0CisgKiBmaWx0ZXIgKmAuCisgKi8KK3N0cnVjdCBmaWx0ZXIgKmxpc3Rfb2JqZWN0c19maWx0ZXJfX2luaXQoCisJc3RydWN0IG9pZHNldCAqb21pdHRlZCwKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucyk7CisKKy8qCisgKiBMZXRzIGBmaWx0ZXJgIGRlY2lkZSBob3cgdG8gaGFuZGxlIHRoZSBgb2JqYC4gSWYgYGZpbHRlcmAgaXMgTlVMTCwgdGhpcworICogZnVuY3Rpb24gYmVoYXZlcyBhcyBleHBlY3RlZCBpZiBubyBmaWx0ZXIgaXMgY29uZmlndXJlZDogYWxsIG9iamVjdHMgYXJlCisgKiBpbmNsdWRlZC4KKyAqLworZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCBsaXN0X29iamVjdHNfZmlsdGVyX19maWx0ZXJfb2JqZWN0KAorCXN0cnVjdCByZXBvc2l0b3J5ICpyLAorCWVudW0gbGlzdF9vYmplY3RzX2ZpbHRlcl9zaXR1YXRpb24gZmlsdGVyX3NpdHVhdGlvbiwKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJY29uc3QgY2hhciAqcGF0aG5hbWUsCisJY29uc3QgY2hhciAqZmlsZW5hbWUsCisJc3RydWN0IGZpbHRlciAqZmlsdGVyKTsKKworLyoKKyAqIERlc3Ryb3lzIGBmaWx0ZXJgIGFuZCBmaW5hbGl6ZXMgdGhlIGBvbWl0dGVkYCBzZXQsIGlmIHByZXNlbnQuIERvZXMKKyAqIG5vdGhpbmcgaWYgYGZpbHRlcmAgaXMgbnVsbC4KKyAqLwordm9pZCBsaXN0X29iamVjdHNfZmlsdGVyX19mcmVlKHN0cnVjdCBmaWx0ZXIgKmZpbHRlcik7CisKKyNlbmRpZiAvKiBMSVNUX09CSkVDVFNfRklMVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2xpc3Qtb2JqZWN0cy5jIGIvbGlzdC1vYmplY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5NTg5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpc3Qtb2JqZWN0cy5jCkBAIC0wLDAgKzEsNDIzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisKK3N0cnVjdCB0cmF2ZXJzYWxfY29udGV4dCB7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCXNob3dfb2JqZWN0X2ZuIHNob3dfb2JqZWN0OworCXNob3dfY29tbWl0X2ZuIHNob3dfY29tbWl0OworCXZvaWQgKnNob3dfZGF0YTsKKwlzdHJ1Y3QgZmlsdGVyICpmaWx0ZXI7Cit9OworCitzdGF0aWMgdm9pZCBwcm9jZXNzX2Jsb2Ioc3RydWN0IHRyYXZlcnNhbF9jb250ZXh0ICpjdHgsCisJCQkgc3RydWN0IGJsb2IgKmJsb2IsCisJCQkgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCSBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZibG9iLT5vYmplY3Q7CisJc2l6ZV90IHBhdGhsZW47CisJZW51bSBsaXN0X29iamVjdHNfZmlsdGVyX3Jlc3VsdCByOworCisJaWYgKCFjdHgtPnJldnMtPmJsb2Jfb2JqZWN0cykKKwkJcmV0dXJuOworCWlmICghb2JqKQorCQlkaWUoImJhZCBibG9iIG9iamVjdCIpOworCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBQcmUtZmlsdGVyIGtub3duLW1pc3Npbmcgb2JqZWN0cyB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgorCSAqIE90aGVyd2lzZSwgYSBtaXNzaW5nIG9iamVjdCBlcnJvciBtZXNzYWdlIG1heSBiZSByZXBvcnRlZAorCSAqIGxhdGVyIChkZXBlbmRpbmcgb24gb3RoZXIgZmlsdGVyaW5nIGNyaXRlcmlhKS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyIgcHJlLWZpbHRlcmluZworCSAqIG1heSBjYXVzZSB0aGUgYWN0dWFsIGZpbHRlciB0byByZXBvcnQgYW4gaW5jb21wbGV0ZSBsaXN0CisJICogb2YgbWlzc2luZyBvYmplY3RzLgorCSAqLworCWlmIChjdHgtPnJldnMtPmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cyAmJgorCSAgICAhaGFzX29iamVjdF9maWxlKCZvYmotPm9pZCkgJiYKKwkgICAgaXNfcHJvbWlzb3Jfb2JqZWN0KCZvYmotPm9pZCkpCisJCXJldHVybjsKKworCXBhdGhsZW4gPSBwYXRoLT5sZW47CisJc3RyYnVmX2FkZHN0cihwYXRoLCBuYW1lKTsKKwlyID0gbGlzdF9vYmplY3RzX2ZpbHRlcl9fZmlsdGVyX29iamVjdChjdHgtPnJldnMtPnJlcG8sCisJCQkJCSAgICAgICBMT0ZTX0JMT0IsIG9iaiwKKwkJCQkJICAgICAgIHBhdGgtPmJ1ZiwgJnBhdGgtPmJ1ZltwYXRobGVuXSwKKwkJCQkJICAgICAgIGN0eC0+ZmlsdGVyKTsKKwlpZiAociAmIExPRlJfTUFSS19TRUVOKQorCQlvYmotPmZsYWdzIHw9IFNFRU47CisJaWYgKHIgJiBMT0ZSX0RPX1NIT1cpCisJCWN0eC0+c2hvd19vYmplY3Qob2JqLCBwYXRoLT5idWYsIGN0eC0+c2hvd19kYXRhKTsKKwlzdHJidWZfc2V0bGVuKHBhdGgsIHBhdGhsZW4pOworfQorCisvKgorICogUHJvY2Vzc2luZyBhIGdpdGxpbmsgZW50cnkgY3VycmVudGx5IGRvZXMgbm90aGluZywgc2luY2UKKyAqIHdlIGRvIG5vdCByZWN1cnNlIGludG8gdGhlIHN1YnByb2plY3QuCisgKgorICogV2UgKmNvdWxkKiBldmVudHVhbGx5IGFkZCBhIGZsYWcgdGhhdCBhY3R1YWxseSBkb2VzIHRoYXQsCisgKiB3aGljaCB3b3VsZCBpbnZvbHZlOgorICogIC0gaXMgdGhlIHN1YnByb2plY3QgYWN0dWFsbHkgY2hlY2tlZCBvdXQ/CisgKiAgLSBpZiBzbywgc2VlIGlmIHRoZSBzdWJwcm9qZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQKKyAqICAgIHRvIHRoZSBhbHRlcm5hdGVzIGxpc3QsIGFuZCBhZGQgaXQgaWYgbm90LgorICogIC0gcHJvY2VzcyB0aGUgY29tbWl0IChvciB0YWcpIHRoZSBnaXRsaW5rIHBvaW50cyB0bworICogICAgcmVjdXJzaXZlbHkuCisgKgorICogSG93ZXZlciwgaXQncyB1bmNsZWFyIHdoZXRoZXIgdGhlcmUgaXMgcmVhbGx5IGV2ZXIgYW55CisgKiByZWFzb24gdG8gc2VlIHN1cGVycHJvamVjdHMgYW5kIHN1YnByb2plY3RzIGFzIHN1Y2ggYQorICogInVuaWZpZWQiIG9iamVjdCBwb29sIChwb3RlbnRpYWxseSByZXN1bHRpbmcgaW4gYSB0b3RhbGx5CisgKiBodW1vbmdvdXMgcGFjayAtIGF2b2lkaW5nIHdoaWNoIHdhcyB0aGUgd2hvbGUgcG9pbnQgb2YKKyAqIGhhdmluZyBnaXRsaW5rcyBpbiB0aGUgZmlyc3QgcGxhY2UhKS4KKyAqCisgKiBTbyBmb3Igbm93LCB0aGVyZSBpcyBqdXN0IGEgbm90ZSB0aGF0IHdlICpjb3VsZCogZm9sbG93CisgKiB0aGUgbGluaywgYW5kIGhvdyB0byBkbyBpdC4gV2hldGhlciBpdCBuZWNlc3NhcmlseSBtYWtlcworICogYW55IHNlbnNlIHdoYXQtc28tZXZlciB0byBldmVyIGRvIHRoYXQgaXMgYW5vdGhlciBpc3N1ZS4KKyAqLworc3RhdGljIHZvaWQgcHJvY2Vzc19naXRsaW5rKHN0cnVjdCB0cmF2ZXJzYWxfY29udGV4dCAqY3R4LAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lKQoreworCS8qIE5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc190cmVlKHN0cnVjdCB0cmF2ZXJzYWxfY29udGV4dCAqY3R4LAorCQkJIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCQkgY29uc3QgY2hhciAqbmFtZSk7CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfdHJlZV9jb250ZW50cyhzdHJ1Y3QgdHJhdmVyc2FsX2NvbnRleHQgKmN0eCwKKwkJCQkgIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqYmFzZSkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJZW51bSBpbnRlcmVzdGluZyBtYXRjaCA9IGN0eC0+cmV2cy0+ZGlmZm9wdC5wYXRoc3BlYy5uciA9PSAwID8KKwkJYWxsX2VudHJpZXNfaW50ZXJlc3RpbmcgOiBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCWlmIChtYXRjaCAhPSBhbGxfZW50cmllc19pbnRlcmVzdGluZykgeworCQkJbWF0Y2ggPSB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKGN0eC0+cmV2cy0+cmVwby0+aW5kZXgsCisJCQkJCQkgICAgICAgJmVudHJ5LCBiYXNlLCAwLAorCQkJCQkJICAgICAgICZjdHgtPnJldnMtPmRpZmZvcHQucGF0aHNwZWMpOworCQkJaWYgKG1hdGNoID09IGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZykKKwkJCQlicmVhazsKKwkJCWlmIChtYXRjaCA9PSBlbnRyeV9ub3RfaW50ZXJlc3RpbmcpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkgeworCQkJc3RydWN0IHRyZWUgKnQgPSBsb29rdXBfdHJlZShjdHgtPnJldnMtPnJlcG8sICZlbnRyeS5vaWQpOworCQkJaWYgKCF0KSB7CisJCQkJZGllKF8oImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCAiCisJCQkJICAgICAgImJ1dCBpcyBub3QgYSB0cmVlIiksCisJCQkJICAgIGVudHJ5LnBhdGgsIG9pZF90b19oZXgoJnRyZWUtPm9iamVjdC5vaWQpKTsKKwkJCX0KKwkJCXQtPm9iamVjdC5mbGFncyB8PSBOT1RfVVNFUl9HSVZFTjsKKwkJCXByb2Nlc3NfdHJlZShjdHgsIHQsIGJhc2UsIGVudHJ5LnBhdGgpOworCQl9CisJCWVsc2UgaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQkJcHJvY2Vzc19naXRsaW5rKGN0eCwgZW50cnkub2lkLmhhc2gsCisJCQkJCWJhc2UsIGVudHJ5LnBhdGgpOworCQllbHNlIHsKKwkJCXN0cnVjdCBibG9iICpiID0gbG9va3VwX2Jsb2IoY3R4LT5yZXZzLT5yZXBvLCAmZW50cnkub2lkKTsKKwkJCWlmICghYikgeworCQkJCWRpZShfKCJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIGJsb2IgbW9kZSwgIgorCQkJCSAgICAgICJidXQgaXMgbm90IGEgYmxvYiIpLAorCQkJCSAgICBlbnRyeS5wYXRoLCBvaWRfdG9faGV4KCZ0cmVlLT5vYmplY3Qub2lkKSk7CisJCQl9CisJCQliLT5vYmplY3QuZmxhZ3MgfD0gTk9UX1VTRVJfR0lWRU47CisJCQlwcm9jZXNzX2Jsb2IoY3R4LCBiLCBiYXNlLCBlbnRyeS5wYXRoKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc190cmVlKHN0cnVjdCB0cmF2ZXJzYWxfY29udGV4dCAqY3R4LAorCQkJIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCQkgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmdHJlZS0+b2JqZWN0OworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IGN0eC0+cmV2czsKKwlpbnQgYmFzZWxlbiA9IGJhc2UtPmxlbjsKKwllbnVtIGxpc3Rfb2JqZWN0c19maWx0ZXJfcmVzdWx0IHI7CisJaW50IGZhaWxlZF9wYXJzZTsKKworCWlmICghcmV2cy0+dHJlZV9vYmplY3RzKQorCQlyZXR1cm47CisJaWYgKCFvYmopCisJCWRpZSgiYmFkIHRyZWUgb2JqZWN0Iik7CisJaWYgKG9iai0+ZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IFNFRU4pKQorCQlyZXR1cm47CisKKwlmYWlsZWRfcGFyc2UgPSBwYXJzZV90cmVlX2dlbnRseSh0cmVlLCAxKTsKKwlpZiAoZmFpbGVkX3BhcnNlKSB7CisJCWlmIChyZXZzLT5pZ25vcmVfbWlzc2luZ19saW5rcykKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBQcmUtZmlsdGVyIGtub3duLW1pc3NpbmcgdHJlZSBvYmplY3RzIHdoZW4gZXhwbGljaXRseQorCQkgKiByZXF1ZXN0ZWQuICBUaGlzIG1heSBjYXVzZSB0aGUgYWN0dWFsIGZpbHRlciB0byByZXBvcnQKKwkJICogYW4gaW5jb21wbGV0ZSBsaXN0IG9mIG1pc3Npbmcgb2JqZWN0cy4KKwkJICovCisJCWlmIChyZXZzLT5leGNsdWRlX3Byb21pc29yX29iamVjdHMgJiYKKwkJICAgIGlzX3Byb21pc29yX29iamVjdCgmb2JqLT5vaWQpKQorCQkJcmV0dXJuOworCisJCWlmICghcmV2cy0+ZG9fbm90X2RpZV9vbl9taXNzaW5nX3RyZWUpCisJCQlkaWUoImJhZCB0cmVlIG9iamVjdCAlcyIsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJfQorCisJc3RyYnVmX2FkZHN0cihiYXNlLCBuYW1lKTsKKwlyID0gbGlzdF9vYmplY3RzX2ZpbHRlcl9fZmlsdGVyX29iamVjdChjdHgtPnJldnMtPnJlcG8sCisJCQkJCSAgICAgICBMT0ZTX0JFR0lOX1RSRUUsIG9iaiwKKwkJCQkJICAgICAgIGJhc2UtPmJ1ZiwgJmJhc2UtPmJ1ZltiYXNlbGVuXSwKKwkJCQkJICAgICAgIGN0eC0+ZmlsdGVyKTsKKwlpZiAociAmIExPRlJfTUFSS19TRUVOKQorCQlvYmotPmZsYWdzIHw9IFNFRU47CisJaWYgKHIgJiBMT0ZSX0RPX1NIT1cpCisJCWN0eC0+c2hvd19vYmplY3Qob2JqLCBiYXNlLT5idWYsIGN0eC0+c2hvd19kYXRhKTsKKwlpZiAoYmFzZS0+bGVuKQorCQlzdHJidWZfYWRkY2goYmFzZSwgJy8nKTsKKworCWlmIChyICYgTE9GUl9TS0lQX1RSRUUpCisJCXRyYWNlX3ByaW50ZigiU2tpcHBpbmcgY29udGVudHMgb2YgdHJlZSAlcy4uLlxuIiwgYmFzZS0+YnVmKTsKKwllbHNlIGlmICghZmFpbGVkX3BhcnNlKQorCQlwcm9jZXNzX3RyZWVfY29udGVudHMoY3R4LCB0cmVlLCBiYXNlKTsKKworCXIgPSBsaXN0X29iamVjdHNfZmlsdGVyX19maWx0ZXJfb2JqZWN0KGN0eC0+cmV2cy0+cmVwbywKKwkJCQkJICAgICAgIExPRlNfRU5EX1RSRUUsIG9iaiwKKwkJCQkJICAgICAgIGJhc2UtPmJ1ZiwgJmJhc2UtPmJ1ZltiYXNlbGVuXSwKKwkJCQkJICAgICAgIGN0eC0+ZmlsdGVyKTsKKwlpZiAociAmIExPRlJfTUFSS19TRUVOKQorCQlvYmotPmZsYWdzIHw9IFNFRU47CisJaWYgKHIgJiBMT0ZSX0RPX1NIT1cpCisJCWN0eC0+c2hvd19vYmplY3Qob2JqLCBiYXNlLT5idWYsIGN0eC0+c2hvd19kYXRhKTsKKworCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgYmFzZWxlbik7CisJZnJlZV90cmVlX2J1ZmZlcih0cmVlKTsKK30KKworc3RhdGljIHZvaWQgbWFya19lZGdlX3BhcmVudHNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCSAgICBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgICBzaG93X2VkZ2VfZm4gc2hvd19lZGdlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJaWYgKCEocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCWNvbnRpbnVlOworCQltYXJrX3RyZWVfdW5pbnRlcmVzdGluZyhyZXZzLT5yZXBvLCBnZXRfY29tbWl0X3RyZWUocGFyZW50KSk7CisJCWlmIChyZXZzLT5lZGdlX2hpbnQgJiYgIShwYXJlbnQtPm9iamVjdC5mbGFncyAmIFNIT1dOKSkgeworCQkJcGFyZW50LT5vYmplY3QuZmxhZ3MgfD0gU0hPV047CisJCQlzaG93X2VkZ2UocGFyZW50KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYWRkX2VkZ2VfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgc2hvd19lZGdlX2ZuIHNob3dfZWRnZSwKKwkJCSAgICAgc3RydWN0IG9pZHNldCAqc2V0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJc3RydWN0IHRyZWUgKnRyZWUgPSBnZXRfY29tbWl0X3RyZWUocGFyZW50KTsKKworCQlpZiAoIXRyZWUpCisJCQljb250aW51ZTsKKworCQlvaWRzZXRfaW5zZXJ0KHNldCwgJnRyZWUtPm9iamVjdC5vaWQpOworCisJCWlmICghKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQljb250aW51ZTsKKwkJdHJlZS0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisKKwkJaWYgKHJldnMtPmVkZ2VfaGludCAmJiAhKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgU0hPV04pKSB7CisJCQlwYXJlbnQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJCXNob3dfZWRnZShwYXJlbnQpOworCQl9CisJfQorfQorCit2b2lkIG1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBzaG93X2VkZ2VfZm4gc2hvd19lZGdlLAorCQkJICAgICAgaW50IHNwYXJzZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisJaW50IGk7CisKKwlpZiAoc3BhcnNlKSB7CisJCXN0cnVjdCBvaWRzZXQgc2V0OworCQlvaWRzZXRfaW5pdCgmc2V0LCAxNik7CisKKwkJZm9yIChsaXN0ID0gcmV2cy0+Y29tbWl0czsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGdldF9jb21taXRfdHJlZShjb21taXQpOworCisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJCXRyZWUtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCisJCQlvaWRzZXRfaW5zZXJ0KCZzZXQsICZ0cmVlLT5vYmplY3Qub2lkKTsKKwkJCWFkZF9lZGdlX3BhcmVudHMoY29tbWl0LCByZXZzLCBzaG93X2VkZ2UsICZzZXQpOworCQl9CisKKwkJbWFya190cmVlc191bmludGVyZXN0aW5nX3NwYXJzZShyZXZzLT5yZXBvLCAmc2V0KTsKKwkJb2lkc2V0X2NsZWFyKCZzZXQpOworCX0gZWxzZSB7CisJCWZvciAobGlzdCA9IHJldnMtPmNvbW1pdHM7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJCW1hcmtfdHJlZV91bmludGVyZXN0aW5nKHJldnMtPnJlcG8sCisJCQkJCQkJZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCkpOworCQkJCWlmIChyZXZzLT5lZGdlX2hpbnRfYWdncmVzc2l2ZSAmJiAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU0hPV04pKSB7CisJCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOworCQkJCQlzaG93X2VkZ2UoY29tbWl0KTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQltYXJrX2VkZ2VfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCwgcmV2cywgc2hvd19lZGdlKTsKKwkJfQorCX0KKworCWlmIChyZXZzLT5lZGdlX2hpbnRfYWdncmVzc2l2ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+Y21kbGluZS5ucjsgaSsrKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSByZXZzLT5jbWRsaW5lLnJldltpXS5pdGVtOworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvYmo7CisJCQlpZiAob2JqLT50eXBlICE9IE9CSl9DT01NSVQgfHwgIShvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQkJY29udGludWU7CisJCQltYXJrX3RyZWVfdW5pbnRlcmVzdGluZyhyZXZzLT5yZXBvLAorCQkJCQkJZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCkpOworCQkJaWYgKCEob2JqLT5mbGFncyAmIFNIT1dOKSkgeworCQkJCW9iai0+ZmxhZ3MgfD0gU0hPV047CisJCQkJc2hvd19lZGdlKGNvbW1pdCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJnRyZWUtPm9iamVjdCwgIiIpOworfQorCitzdGF0aWMgdm9pZCB0cmF2ZXJzZV90cmVlc19hbmRfYmxvYnMoc3RydWN0IHRyYXZlcnNhbF9jb250ZXh0ICpjdHgsCisJCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICpiYXNlKQoreworCWludCBpOworCisJYXNzZXJ0KGJhc2UtPmxlbiA9PSAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBjdHgtPnJldnMtPnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpwZW5kaW5nID0gY3R4LT5yZXZzLT5wZW5kaW5nLm9iamVjdHMgKyBpOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwZW5kaW5nLT5pdGVtOworCQljb25zdCBjaGFyICpuYW1lID0gcGVuZGluZy0+bmFtZTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IHBlbmRpbmctPnBhdGg7CisJCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJCWNvbnRpbnVlOworCQlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwkJCWN0eC0+c2hvd19vYmplY3Qob2JqLCBuYW1lLCBjdHgtPnNob3dfZGF0YSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXBhdGgpCisJCQlwYXRoID0gIiI7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJCXByb2Nlc3NfdHJlZShjdHgsIChzdHJ1Y3QgdHJlZSAqKW9iaiwgYmFzZSwgcGF0aCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CKSB7CisJCQlwcm9jZXNzX2Jsb2IoY3R4LCAoc3RydWN0IGJsb2IgKilvYmosIGJhc2UsIHBhdGgpOworCQkJY29udGludWU7CisJCX0KKwkJZGllKCJ1bmtub3duIHBlbmRpbmcgb2JqZWN0ICVzICglcykiLAorCQkgICAgb2lkX3RvX2hleCgmb2JqLT5vaWQpLCBuYW1lKTsKKwl9CisJb2JqZWN0X2FycmF5X2NsZWFyKCZjdHgtPnJldnMtPnBlbmRpbmcpOworfQorCitzdGF0aWMgdm9pZCBkb190cmF2ZXJzZShzdHJ1Y3QgdHJhdmVyc2FsX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBjc3A7IC8qIGNhbGxlZSdzIHNjcmF0Y2ggcGFkICovCisJc3RyYnVmX2luaXQoJmNzcCwgUEFUSF9NQVgpOworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oY3R4LT5yZXZzKSkgIT0gTlVMTCkgeworCQkvKgorCQkgKiBhbiB1bmludGVyZXN0aW5nIGJvdW5kYXJ5IGNvbW1pdCBtYXkgbm90IGhhdmUgaXRzIHRyZWUKKwkJICogcGFyc2VkIHlldCwgYnV0IHdlIGFyZSBub3QgZ29pbmcgdG8gc2hvdyB0aGVtIGFueXdheQorCQkgKi8KKwkJaWYgKCFjdHgtPnJldnMtPnRyZWVfb2JqZWN0cykKKwkJCTsgLyogZG8gbm90IGJvdGhlciBsb2FkaW5nIHRyZWUgKi8KKwkJZWxzZSBpZiAoZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCkpIHsKKwkJCXN0cnVjdCB0cmVlICp0cmVlID0gZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCk7CisJCQl0cmVlLT5vYmplY3QuZmxhZ3MgfD0gTk9UX1VTRVJfR0lWRU47CisJCQlhZGRfcGVuZGluZ190cmVlKGN0eC0+cmV2cywgdHJlZSk7CisJCX0gZWxzZSBpZiAoY29tbWl0LT5vYmplY3QucGFyc2VkKSB7CisJCQlkaWUoXygidW5hYmxlIHRvIGxvYWQgcm9vdCB0cmVlIGZvciBjb21taXQgJXMiKSwKKwkJCSAgICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQl9CisJCWN0eC0+c2hvd19jb21taXQoY29tbWl0LCBjdHgtPnNob3dfZGF0YSk7CisKKwkJaWYgKGN0eC0+cmV2cy0+dHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXIpCisJCQkvKgorCQkJICogTkVFRFNXT1JLOiBBZGRpbmcgdGhlIHRyZWUgYW5kIHRoZW4gZmx1c2hpbmcgaXQgaGVyZQorCQkJICogbmVlZHMgYSByZWFsbG9jYXRpb24gZm9yIGVhY2ggY29tbWl0LiBDYW4gd2UgcGFzcyB0aGUKKwkJCSAqIHRyZWUgZGlyZWN0b3J5IHdpdGhvdXQgYWxsb2NhdGlvbiBjaHVybj8KKwkJCSAqLworCQkJdHJhdmVyc2VfdHJlZXNfYW5kX2Jsb2JzKGN0eCwgJmNzcCk7CisJfQorCXRyYXZlcnNlX3RyZWVzX2FuZF9ibG9icyhjdHgsICZjc3ApOworCXN0cmJ1Zl9yZWxlYXNlKCZjc3ApOworfQorCit2b2lkIHRyYXZlcnNlX2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgc2hvd19jb21taXRfZm4gc2hvd19jb21taXQsCisJCQkgIHNob3dfb2JqZWN0X2ZuIHNob3dfb2JqZWN0LAorCQkJICB2b2lkICpzaG93X2RhdGEpCit7CisJc3RydWN0IHRyYXZlcnNhbF9jb250ZXh0IGN0eDsKKwljdHgucmV2cyA9IHJldnM7CisJY3R4LnNob3dfY29tbWl0ID0gc2hvd19jb21taXQ7CisJY3R4LnNob3dfb2JqZWN0ID0gc2hvd19vYmplY3Q7CisJY3R4LnNob3dfZGF0YSA9IHNob3dfZGF0YTsKKwljdHguZmlsdGVyID0gTlVMTDsKKwlkb190cmF2ZXJzZSgmY3R4KTsKK30KKwordm9pZCB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJc2hvd19jb21taXRfZm4gc2hvd19jb21taXQsCisJc2hvd19vYmplY3RfZm4gc2hvd19vYmplY3QsCisJdm9pZCAqc2hvd19kYXRhLAorCXN0cnVjdCBvaWRzZXQgKm9taXR0ZWQpCit7CisJc3RydWN0IHRyYXZlcnNhbF9jb250ZXh0IGN0eDsKKworCWN0eC5yZXZzID0gcmV2czsKKwljdHguc2hvd19vYmplY3QgPSBzaG93X29iamVjdDsKKwljdHguc2hvd19jb21taXQgPSBzaG93X2NvbW1pdDsKKwljdHguc2hvd19kYXRhID0gc2hvd19kYXRhOworCWN0eC5maWx0ZXIgPSBsaXN0X29iamVjdHNfZmlsdGVyX19pbml0KG9taXR0ZWQsIGZpbHRlcl9vcHRpb25zKTsKKwlkb190cmF2ZXJzZSgmY3R4KTsKKwlsaXN0X29iamVjdHNfZmlsdGVyX19mcmVlKGN0eC5maWx0ZXIpOworfQpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLmggYi9saXN0LW9iamVjdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTUyNjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGlzdC1vYmplY3RzLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBMSVNUX09CSkVDVFNfSAorI2RlZmluZSBMSVNUX09CSkVDVFNfSAorCitzdHJ1Y3QgY29tbWl0Oworc3RydWN0IG9iamVjdDsKK3N0cnVjdCByZXZfaW5mbzsKKwordHlwZWRlZiB2b2lkICgqc2hvd19jb21taXRfZm4pKHN0cnVjdCBjb21taXQgKiwgdm9pZCAqKTsKK3R5cGVkZWYgdm9pZCAoKnNob3dfb2JqZWN0X2ZuKShzdHJ1Y3Qgb2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK3ZvaWQgdHJhdmVyc2VfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICosIHNob3dfY29tbWl0X2ZuLCBzaG93X29iamVjdF9mbiwgdm9pZCAqKTsKKwordHlwZWRlZiB2b2lkICgqc2hvd19lZGdlX2ZuKShzdHJ1Y3QgY29tbWl0ICopOwordm9pZCBtYXJrX2VkZ2VzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICAgc2hvd19lZGdlX2ZuIHNob3dfZWRnZSwKKwkJCSAgICAgIGludCBzcGFyc2UpOworCitzdHJ1Y3Qgb2lkc2V0Oworc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9uczsKKwordm9pZCB0cmF2ZXJzZV9jb21taXRfbGlzdF9maWx0ZXJlZCgKKwlzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXJfb3B0aW9ucywKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJc2hvd19jb21taXRfZm4gc2hvd19jb21taXQsCisJc2hvd19vYmplY3RfZm4gc2hvd19vYmplY3QsCisJdm9pZCAqc2hvd19kYXRhLAorCXN0cnVjdCBvaWRzZXQgKm9taXR0ZWQpOworCisjZW5kaWYgLyogTElTVF9PQkpFQ1RTX0ggKi8KZGlmZiAtLWdpdCBhL2xpc3QuaCBiL2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjYwMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlzdC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogKG9yaWdpbmFsbHkgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeSBhbmQgVXNlcnNwYWNlIFJDVSkKKyAqIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBQaWVycmUtTWFyYyBGb3VybmllcgorICogQ29udmVyc2lvbiB0byBSQ1UgbGlzdC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXRoaWV1IERlc25veWVycyA8bWF0aGlldS5kZXNub3llcnNAZWZmaWNpb3MuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIExJU1RfSAorI2RlZmluZSBMSVNUX0gJMQorCisvKgorICogVGhlIGRlZmluaXRpb25zIG9mIHRoaXMgZmlsZSBhcmUgYWRvcHRlZCBmcm9tIHRob3NlIHdoaWNoIGNhbiBiZQorICogZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBoZWFkZXJzIHRvIGVuYWJsZSBwZW9wbGUgZmFtaWxpYXIgd2l0aCB0aGUKKyAqIGxhdHRlciBmaW5kIHRoZWlyIHdheSBpbiB0aGVzZSBzb3VyY2VzIGFzIHdlbGwuCisgKi8KKworLyogQmFzaWMgdHlwZSBmb3IgdGhlIGRvdWJsZS1saW5rIGxpc3QuICovCitzdHJ1Y3QgbGlzdF9oZWFkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqcHJldjsKK307CisKKy8qIGF2b2lkIGNvbmZsaWN0cyB3aXRoIEJTRC1vbmx5IHN5cy9xdWV1ZS5oICovCisjdW5kZWYgTElTVF9IRUFECisvKiBEZWZpbmUgYSB2YXJpYWJsZSB3aXRoIHRoZSBoZWFkIGFuZCB0YWlsIG9mIHRoZSBsaXN0LiAqLworI2RlZmluZSBMSVNUX0hFQUQobmFtZSkgXAorCXN0cnVjdCBsaXN0X2hlYWQgbmFtZSA9IHsgJihuYW1lKSwgJihuYW1lKSB9CisKKy8qIEluaXRpYWxpemUgYSBuZXcgbGlzdCBoZWFkLiAqLworI2RlZmluZSBJTklUX0xJU1RfSEVBRChwdHIpIFwKKwkocHRyKS0+bmV4dCA9IChwdHIpLT5wcmV2ID0gKHB0cikKKworI2RlZmluZSBMSVNUX0hFQURfSU5JVChuYW1lKSB7ICYobmFtZSksICYobmFtZSkgfQorCisvKiBBZGQgbmV3IGVsZW1lbnQgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3cCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwloZWFkLT5uZXh0LT5wcmV2ID0gbmV3cDsKKwluZXdwLT5uZXh0ID0gaGVhZC0+bmV4dDsKKwluZXdwLT5wcmV2ID0gaGVhZDsKKwloZWFkLT5uZXh0ID0gbmV3cDsKK30KKworLyogQWRkIG5ldyBlbGVtZW50IGF0IHRoZSB0YWlsIG9mIHRoZSBsaXN0LiAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqbmV3cCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwloZWFkLT5wcmV2LT5uZXh0ID0gbmV3cDsKKwluZXdwLT5uZXh0ID0gaGVhZDsKKwluZXdwLT5wcmV2ID0gaGVhZC0+cHJldjsKKwloZWFkLT5wcmV2ID0gbmV3cDsKK30KKworLyogUmVtb3ZlIGVsZW1lbnQgZnJvbSBsaXN0LiAqLworc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqcHJldiwgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0ID0gbmV4dDsKK30KKworLyogUmVtb3ZlIGVsZW1lbnQgZnJvbSBsaXN0LiAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVsZW0pCit7CisJX19saXN0X2RlbChlbGVtLT5wcmV2LCBlbGVtLT5uZXh0KTsKK30KKworLyogUmVtb3ZlIGVsZW1lbnQgZnJvbSBsaXN0LCBpbml0aWFsaXppbmcgdGhlIGVsZW1lbnQncyBsaXN0IHBvaW50ZXJzLiAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqZWxlbSkKK3sKKwlsaXN0X2RlbChlbGVtKTsKKwlJTklUX0xJU1RfSEVBRChlbGVtKTsKK30KKworLyogRGVsZXRlIGZyb20gbGlzdCwgYWRkIHRvIGFub3RoZXIgbGlzdCBhcyBoZWFkLiAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICplbGVtLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCV9fbGlzdF9kZWwoZWxlbS0+cHJldiwgZWxlbS0+bmV4dCk7CisJbGlzdF9hZGQoZWxlbSwgaGVhZCk7Cit9CisKKy8qIFJlcGxhY2UgYW4gb2xkIGVudHJ5LiAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfcmVwbGFjZShzdHJ1Y3QgbGlzdF9oZWFkICpvbGQsIHN0cnVjdCBsaXN0X2hlYWQgKm5ld3ApCit7CisJbmV3cC0+bmV4dCA9IG9sZC0+bmV4dDsKKwluZXdwLT5wcmV2ID0gb2xkLT5wcmV2OworCW5ld3AtPnByZXYtPm5leHQgPSBuZXdwOworCW5ld3AtPm5leHQtPnByZXYgPSBuZXdwOworfQorCisvKiBKb2luIHR3byBsaXN0cy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3NwbGljZShzdHJ1Y3QgbGlzdF9oZWFkICphZGQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJLyogRG8gbm90aGluZyBpZiB0aGUgbGlzdCB3aGljaCBnZXRzIGFkZGVkIGlzIGVtcHR5LiAqLworCWlmIChhZGQgIT0gYWRkLT5uZXh0KSB7CisJCWFkZC0+bmV4dC0+cHJldiA9IGhlYWQ7CisJCWFkZC0+cHJldi0+bmV4dCA9IGhlYWQtPm5leHQ7CisJCWhlYWQtPm5leHQtPnByZXYgPSBhZGQtPnByZXY7CisJCWhlYWQtPm5leHQgPSBhZGQtPm5leHQ7CisJfQorfQorCisvKiBHZXQgdHlwZWQgZWxlbWVudCBmcm9tIGxpc3QgYXQgYSBnaXZlbiBwb3NpdGlvbi4gKi8KKyNkZWZpbmUgbGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAorCSgodHlwZSAqKSAoKGNoYXIgKikgKHB0cikgLSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpKSkKKworLyogR2V0IGZpcnN0IGVudHJ5IGZyb20gYSBsaXN0LiAqLworI2RlZmluZSBsaXN0X2ZpcnN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcCisJbGlzdF9lbnRyeSgocHRyKS0+bmV4dCwgdHlwZSwgbWVtYmVyKQorCisvKiBJdGVyYXRlIGZvcndhcmQgb3ZlciB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QuICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IHBvcyAhPSAoaGVhZCk7IHBvcyA9IHBvcy0+bmV4dCkKKworLyoKKyAqIEl0ZXJhdGUgZm9yd2FyZCBvdmVyIHRoZSBlbGVtZW50cyBsaXN0LiBUaGUgbGlzdCBlbGVtZW50cyBjYW4gYmUKKyAqIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCB3aGlsZSBkb2luZyB0aGlzLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHAsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dCwgcCA9IHBvcy0+bmV4dDsgXAorCQlwb3MgIT0gKGhlYWQpOyBcCisJCXBvcyA9IHAsIHAgPSBwb3MtPm5leHQpCisKKy8qIEl0ZXJhdGUgYmFja3dhcmQgb3ZlciB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QuICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfcHJldihwb3MsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+cHJldjsgcG9zICE9IChoZWFkKTsgcG9zID0gcG9zLT5wcmV2KQorCisvKgorICogSXRlcmF0ZSBiYWNrd2FyZHMgb3ZlciB0aGUgZWxlbWVudHMgbGlzdC4gVGhlIGxpc3QgZWxlbWVudHMgY2FuIGJlCisgKiByZW1vdmVkIGZyb20gdGhlIGxpc3Qgd2hpbGUgZG9pbmcgdGhpcy4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3ByZXZfc2FmZShwb3MsIHAsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+cHJldiwgcCA9IHBvcy0+cHJldjsgXAorCQlwb3MgIT0gKGhlYWQpOyBcCisJCXBvcyA9IHAsIHAgPSBwb3MtPnByZXYpCisKK3N0YXRpYyBpbmxpbmUgaW50IGxpc3RfZW1wdHkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gaGVhZCA9PSBoZWFkLT5uZXh0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9yZXBsYWNlX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqb2xkLAorCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqbmV3cCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gb2xkLT5uZXh0OworCisJbGlzdF9kZWwob2xkKTsKKwlsaXN0X2FkZF90YWlsKG5ld3AsIGhlYWQpOworCUlOSVRfTElTVF9IRUFEKG9sZCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgYSBub3JtYWwgbGlzdF9oZWFkLCBleGNlcHQgdGhhdCBpdCBjYW4gYmUKKyAqIGRlY2xhcmVkIHZvbGF0aWxlIChlLmcuLCBpZiB5b3UgaGF2ZSBhIGxpc3QgdGhhdCBtYXkgYmUgYWNjZXNzZWQgZnJvbSBzaWduYWwKKyAqIGhhbmRsZXJzKS4KKyAqLworc3RydWN0IHZvbGF0aWxlX2xpc3RfaGVhZCB7CisJdm9sYXRpbGUgc3RydWN0IHZvbGF0aWxlX2xpc3RfaGVhZCAqbmV4dCwgKnByZXY7Cit9OworCisjZGVmaW5lIFZPTEFUSUxFX0xJU1RfSEVBRChuYW1lKSBcCisJdm9sYXRpbGUgc3RydWN0IHZvbGF0aWxlX2xpc3RfaGVhZCBuYW1lID0geyAmKG5hbWUpLCAmKG5hbWUpIH0KKworc3RhdGljIGlubGluZSB2b2lkIF9fdm9sYXRpbGVfbGlzdF9kZWwodm9sYXRpbGUgc3RydWN0IHZvbGF0aWxlX2xpc3RfaGVhZCAqcHJldiwKKwkJCQkgICAgICAgdm9sYXRpbGUgc3RydWN0IHZvbGF0aWxlX2xpc3RfaGVhZCAqbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0ID0gbmV4dDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZvbGF0aWxlX2xpc3RfZGVsKHZvbGF0aWxlIHN0cnVjdCB2b2xhdGlsZV9saXN0X2hlYWQgKmVsZW0pCit7CisJX192b2xhdGlsZV9saXN0X2RlbChlbGVtLT5wcmV2LCBlbGVtLT5uZXh0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdm9sYXRpbGVfbGlzdF9lbXB0eSh2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkID09IGhlYWQtPm5leHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2b2xhdGlsZV9saXN0X2FkZCh2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkICpuZXdwLAorCQkJCSAgICAgdm9sYXRpbGUgc3RydWN0IHZvbGF0aWxlX2xpc3RfaGVhZCAqaGVhZCkKK3sKKwloZWFkLT5uZXh0LT5wcmV2ID0gbmV3cDsKKwluZXdwLT5uZXh0ID0gaGVhZC0+bmV4dDsKKwluZXdwLT5wcmV2ID0gaGVhZDsKKwloZWFkLT5uZXh0ID0gbmV3cDsKK30KKworI2VuZGlmIC8qIExJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGwtbWVyZ2UuYyBiL2xsLW1lcmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1YTg5NwotLS0gL2Rldi9udWxsCisrKyBiL2xsLW1lcmdlLmMKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiBMb3cgbGV2ZWwgMy13YXkgaW4tY29yZSBmaWxlIG1lcmdlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKworc3RydWN0IGxsX21lcmdlX2RyaXZlcjsKKwordHlwZWRlZiBpbnQgKCpsbF9tZXJnZV9mbikoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqLAorCQkJICAgbW1idWZmZXJfdCAqcmVzdWx0LAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIG1tZmlsZV90ICpvcmlnLCBjb25zdCBjaGFyICpvcmlnX25hbWUsCisJCQkgICBtbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQkgICBtbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQkgICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cywKKwkJCSAgIGludCBtYXJrZXJfc2l6ZSk7CisKK3N0cnVjdCBsbF9tZXJnZV9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZGVzY3JpcHRpb247CisJbGxfbWVyZ2VfZm4gZm47CisJY29uc3QgY2hhciAqcmVjdXJzaXZlOworCXN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKm5leHQ7CisJY2hhciAqY21kbGluZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqbWVyZ2VfYXR0cmlidXRlczsKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqbG9hZF9tZXJnZV9hdHRyaWJ1dGVzKHZvaWQpCit7CisJaWYgKCFtZXJnZV9hdHRyaWJ1dGVzKQorCQltZXJnZV9hdHRyaWJ1dGVzID0gYXR0cl9jaGVja19pbml0bCgibWVyZ2UiLCAiY29uZmxpY3QtbWFya2VyLXNpemUiLCBOVUxMKTsKKwlyZXR1cm4gbWVyZ2VfYXR0cmlidXRlczsKK30KKwordm9pZCByZXNldF9tZXJnZV9hdHRyaWJ1dGVzKHZvaWQpCit7CisJYXR0cl9jaGVja19mcmVlKG1lcmdlX2F0dHJpYnV0ZXMpOworCW1lcmdlX2F0dHJpYnV0ZXMgPSBOVUxMOworfQorCisvKgorICogQnVpbHQtaW4gbG93LWxldmVscworICovCitzdGF0aWMgaW50IGxsX2JpbmFyeV9tZXJnZShjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpkcnZfdW51c2VkLAorCQkJICAgbW1idWZmZXJfdCAqcmVzdWx0LAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIG1tZmlsZV90ICpvcmlnLCBjb25zdCBjaGFyICpvcmlnX25hbWUsCisJCQkgICBtbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQkgICBtbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQkgICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cywKKwkJCSAgIGludCBtYXJrZXJfc2l6ZSkKK3sKKwltbWZpbGVfdCAqc3RvbGVuOworCWFzc2VydChvcHRzKTsKKworCS8qCisJICogVGhlIHRlbnRhdGl2ZSBtZXJnZSByZXN1bHQgaXMgdGhlIGNvbW1vbiBhbmNlc3RvciBmb3IgYW4KKwkgKiBpbnRlcm5hbCBtZXJnZS4gIEZvciB0aGUgZmluYWwgbWVyZ2UsIGl0IGlzICJvdXJzIiBieQorCSAqIGRlZmF1bHQgYnV0IC1Yb3Vycy8tWHRoZWlycyBjYW4gdHdlYWsgdGhlIGNob2ljZS4KKwkgKi8KKwlpZiAob3B0cy0+dmlydHVhbF9hbmNlc3RvcikgeworCQlzdG9sZW4gPSBvcmlnOworCX0gZWxzZSB7CisJCXN3aXRjaCAob3B0cy0+dmFyaWFudCkgeworCQlkZWZhdWx0OgorCQkJd2FybmluZygiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMgKCVzIHZzLiAlcykiLAorCQkJCXBhdGgsIG5hbWUxLCBuYW1lMik7CisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlIFhETF9NRVJHRV9GQVZPUl9PVVJTOgorCQkJc3RvbGVuID0gc3JjMTsKKwkJCWJyZWFrOworCQljYXNlIFhETF9NRVJHRV9GQVZPUl9USEVJUlM6CisJCQlzdG9sZW4gPSBzcmMyOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXN1bHQtPnB0ciA9IHN0b2xlbi0+cHRyOworCXJlc3VsdC0+c2l6ZSA9IHN0b2xlbi0+c2l6ZTsKKwlzdG9sZW4tPnB0ciA9IE5VTEw7CisKKwkvKgorCSAqIFdpdGggLVh0aGVpcnMgb3IgLVhvdXJzLCB3ZSBoYXZlIGNsZWFubHkgbWVyZ2VkOworCSAqIG90aGVyd2lzZSB3ZSBnb3QgYSBjb25mbGljdC4KKwkgKi8KKwlyZXR1cm4gKG9wdHMtPnZhcmlhbnQgPyAwIDogMSk7Cit9CisKK3N0YXRpYyBpbnQgbGxfeGRsX21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQltbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQljb25zdCBjaGFyICpwYXRoLAorCQkJbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCW1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCW1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJaW50IG1hcmtlcl9zaXplKQoreworCXhtcGFyYW1fdCB4bXA7CisJYXNzZXJ0KG9wdHMpOworCisJaWYgKG9yaWctPnNpemUgPiBNQVhfWERJRkZfU0laRSB8fAorCSAgICBzcmMxLT5zaXplID4gTUFYX1hESUZGX1NJWkUgfHwKKwkgICAgc3JjMi0+c2l6ZSA+IE1BWF9YRElGRl9TSVpFIHx8CisJICAgIGJ1ZmZlcl9pc19iaW5hcnkob3JpZy0+cHRyLCBvcmlnLT5zaXplKSB8fAorCSAgICBidWZmZXJfaXNfYmluYXJ5KHNyYzEtPnB0ciwgc3JjMS0+c2l6ZSkgfHwKKwkgICAgYnVmZmVyX2lzX2JpbmFyeShzcmMyLT5wdHIsIHNyYzItPnNpemUpKSB7CisJCXJldHVybiBsbF9iaW5hcnlfbWVyZ2UoZHJ2X3VudXNlZCwgcmVzdWx0LAorCQkJCSAgICAgICBwYXRoLAorCQkJCSAgICAgICBvcmlnLCBvcmlnX25hbWUsCisJCQkJICAgICAgIHNyYzEsIG5hbWUxLAorCQkJCSAgICAgICBzcmMyLCBuYW1lMiwKKwkJCQkgICAgICAgb3B0cywgbWFya2VyX3NpemUpOworCX0KKworCW1lbXNldCgmeG1wLCAwLCBzaXplb2YoeG1wKSk7CisJeG1wLmxldmVsID0gWERMX01FUkdFX1pFQUxPVVM7CisJeG1wLmZhdm9yID0gb3B0cy0+dmFyaWFudDsKKwl4bXAueHBwLmZsYWdzID0gb3B0cy0+eGRsX29wdHM7CisJaWYgKGdpdF94bWVyZ2Vfc3R5bGUgPj0gMCkKKwkJeG1wLnN0eWxlID0gZ2l0X3htZXJnZV9zdHlsZTsKKwlpZiAobWFya2VyX3NpemUgPiAwKQorCQl4bXAubWFya2VyX3NpemUgPSBtYXJrZXJfc2l6ZTsKKwl4bXAuYW5jZXN0b3IgPSBvcmlnX25hbWU7CisJeG1wLmZpbGUxID0gbmFtZTE7CisJeG1wLmZpbGUyID0gbmFtZTI7CisJcmV0dXJuIHhkbF9tZXJnZShvcmlnLCBzcmMxLCBzcmMyLCAmeG1wLCByZXN1bHQpOworfQorCitzdGF0aWMgaW50IGxsX3VuaW9uX21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQkgIG1tYnVmZmVyX3QgKnJlc3VsdCwKKwkJCSAgY29uc3QgY2hhciAqcGF0aF91bnVzZWQsCisJCQkgIG1tZmlsZV90ICpvcmlnLCBjb25zdCBjaGFyICpvcmlnX25hbWUsCisJCQkgIG1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cywKKwkJCSAgaW50IG1hcmtlcl9zaXplKQoreworCS8qIFVzZSB1bmlvbiBmYXZvciAqLworCXN0cnVjdCBsbF9tZXJnZV9vcHRpb25zIG87CisJYXNzZXJ0KG9wdHMpOworCW8gPSAqb3B0czsKKwlvLnZhcmlhbnQgPSBYRExfTUVSR0VfRkFWT1JfVU5JT047CisJcmV0dXJuIGxsX3hkbF9tZXJnZShkcnZfdW51c2VkLCByZXN1bHQsIHBhdGhfdW51c2VkLAorCQkJICAgIG9yaWcsIE5VTEwsIHNyYzEsIE5VTEwsIHNyYzIsIE5VTEwsCisJCQkgICAgJm8sIG1hcmtlcl9zaXplKTsKK30KKworI2RlZmluZSBMTF9CSU5BUllfTUVSR0UgMAorI2RlZmluZSBMTF9URVhUX01FUkdFIDEKKyNkZWZpbmUgTExfVU5JT05fTUVSR0UgMgorc3RhdGljIHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgbGxfbWVyZ2VfZHJ2W10gPSB7CisJeyAiYmluYXJ5IiwgImJ1aWx0LWluIGJpbmFyeSBtZXJnZSIsIGxsX2JpbmFyeV9tZXJnZSB9LAorCXsgInRleHQiLCAiYnVpbHQtaW4gMy13YXkgdGV4dCBtZXJnZSIsIGxsX3hkbF9tZXJnZSB9LAorCXsgInVuaW9uIiwgImJ1aWx0LWluIHVuaW9uIG1lcmdlIiwgbGxfdW5pb25fbWVyZ2UgfSwKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV90ZW1wKG1tZmlsZV90ICpzcmMsIGNoYXIgKnBhdGgsIHNpemVfdCBsZW4pCit7CisJaW50IGZkOworCisJeHNucHJpbnRmKHBhdGgsIGxlbiwgIi5tZXJnZV9maWxlX1hYWFhYWCIpOworCWZkID0geG1rc3RlbXAocGF0aCk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNyYy0+cHRyLCBzcmMtPnNpemUpIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgdGVtcC1maWxlIik7CisJY2xvc2UoZmQpOworfQorCisvKgorICogVXNlciBkZWZpbmVkIGxvdy1sZXZlbCBtZXJnZSBkcml2ZXIgc3VwcG9ydC4KKyAqLworc3RhdGljIGludCBsbF9leHRfbWVyZ2UoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZm4sCisJCQltbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQljb25zdCBjaGFyICpwYXRoLAorCQkJbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCW1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCW1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJaW50IG1hcmtlcl9zaXplKQoreworCWNoYXIgdGVtcFs0XVs1MF07CisJc3RydWN0IHN0cmJ1ZiBjbWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2VudHJ5IGRpY3RbNl07CisJc3RydWN0IHN0cmJ1ZiBwYXRoX3NxID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYXJnc1tdID0geyBOVUxMLCBOVUxMIH07CisJaW50IHN0YXR1cywgZmQsIGk7CisJc3RydWN0IHN0YXQgc3Q7CisJYXNzZXJ0KG9wdHMpOworCisJc3FfcXVvdGVfYnVmKCZwYXRoX3NxLCBwYXRoKTsKKwlkaWN0WzBdLnBsYWNlaG9sZGVyID0gIk8iOyBkaWN0WzBdLnZhbHVlID0gdGVtcFswXTsKKwlkaWN0WzFdLnBsYWNlaG9sZGVyID0gIkEiOyBkaWN0WzFdLnZhbHVlID0gdGVtcFsxXTsKKwlkaWN0WzJdLnBsYWNlaG9sZGVyID0gIkIiOyBkaWN0WzJdLnZhbHVlID0gdGVtcFsyXTsKKwlkaWN0WzNdLnBsYWNlaG9sZGVyID0gIkwiOyBkaWN0WzNdLnZhbHVlID0gdGVtcFszXTsKKwlkaWN0WzRdLnBsYWNlaG9sZGVyID0gIlAiOyBkaWN0WzRdLnZhbHVlID0gcGF0aF9zcS5idWY7CisJZGljdFs1XS5wbGFjZWhvbGRlciA9IE5VTEw7IGRpY3RbNV0udmFsdWUgPSBOVUxMOworCisJaWYgKGZuLT5jbWRsaW5lID09IE5VTEwpCisJCWRpZSgiY3VzdG9tIG1lcmdlIGRyaXZlciAlcyBsYWNrcyBjb21tYW5kIGxpbmUuIiwgZm4tPm5hbWUpOworCisJcmVzdWx0LT5wdHIgPSBOVUxMOworCXJlc3VsdC0+c2l6ZSA9IDA7CisJY3JlYXRlX3RlbXAob3JpZywgdGVtcFswXSwgc2l6ZW9mKHRlbXBbMF0pKTsKKwljcmVhdGVfdGVtcChzcmMxLCB0ZW1wWzFdLCBzaXplb2YodGVtcFsxXSkpOworCWNyZWF0ZV90ZW1wKHNyYzIsIHRlbXBbMl0sIHNpemVvZih0ZW1wWzJdKSk7CisJeHNucHJpbnRmKHRlbXBbM10sIHNpemVvZih0ZW1wWzNdKSwgIiVkIiwgbWFya2VyX3NpemUpOworCisJc3RyYnVmX2V4cGFuZCgmY21kLCBmbi0+Y21kbGluZSwgc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CisKKwlhcmdzWzBdID0gY21kLmJ1ZjsKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fVVNJTkdfU0hFTEwpOworCWZkID0gb3Blbih0ZW1wWzFdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZ290byBiYWQ7CisJaWYgKGZzdGF0KGZkLCAmc3QpKQorCQlnb3RvIGNsb3NlX2JhZDsKKwlyZXN1bHQtPnNpemUgPSBzdC5zdF9zaXplOworCXJlc3VsdC0+cHRyID0geG1hbGxvY3oocmVzdWx0LT5zaXplKTsKKwlpZiAocmVhZF9pbl9mdWxsKGZkLCByZXN1bHQtPnB0ciwgcmVzdWx0LT5zaXplKSAhPSByZXN1bHQtPnNpemUpIHsKKwkJRlJFRV9BTkRfTlVMTChyZXN1bHQtPnB0cik7CisJCXJlc3VsdC0+c2l6ZSA9IDA7CisJfQorIGNsb3NlX2JhZDoKKwljbG9zZShmZCk7CisgYmFkOgorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCXVubGlua19vcl93YXJuKHRlbXBbaV0pOworCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoX3NxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogbWVyZ2UuZGVmYXVsdCBhbmQgbWVyZ2UuZHJpdmVyIGNvbmZpZ3VyYXRpb24gaXRlbXMKKyAqLworc3RhdGljIHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmxsX3VzZXJfbWVyZ2UsICoqbGxfdXNlcl9tZXJnZV90YWlsOworc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfbGxfbWVyZ2U7CisKK3N0YXRpYyBpbnQgcmVhZF9tZXJnZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZm47CisJY29uc3QgY2hhciAqa2V5LCAqbmFtZTsKKwlpbnQgbmFtZWxlbjsKKworCWlmICghc3RyY21wKHZhciwgIm1lcmdlLmRlZmF1bHQiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZkZWZhdWx0X2xsX21lcmdlLCB2YXIsIHZhbHVlKTsKKworCS8qCisJICogV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGFueXRoaW5nIGJ1dCAibWVyZ2UuPG5hbWU+LnZhcmlhYmxlIjsKKwkgKiBlc3BlY2lhbGx5LCB3ZSBkbyBub3Qgd2FudCB0byBsb29rIGF0IHZhcmlhYmxlcyBzdWNoIGFzCisJICogIm1lcmdlLnN1bW1hcnkiLCAibWVyZ2UudG9vbCIsIGFuZCAibWVyZ2UudmVyYm9zaXR5Ii4KKwkgKi8KKwlpZiAocGFyc2VfY29uZmlnX2tleSh2YXIsICJtZXJnZSIsICZuYW1lLCAmbmFtZWxlbiwgJmtleSkgPCAwIHx8ICFuYW1lKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRmluZCBleGlzdGluZyBvbmUgYXMgd2UgbWlnaHQgYmUgcHJvY2Vzc2luZyBtZXJnZS48bmFtZT4udmFyMgorCSAqIGFmdGVyIHNlZWluZyBtZXJnZS48bmFtZT4udmFyMS4KKwkgKi8KKwlmb3IgKGZuID0gbGxfdXNlcl9tZXJnZTsgZm47IGZuID0gZm4tPm5leHQpCisJCWlmICghc3RybmNtcChmbi0+bmFtZSwgbmFtZSwgbmFtZWxlbikgJiYgIWZuLT5uYW1lW25hbWVsZW5dKQorCQkJYnJlYWs7CisJaWYgKCFmbikgeworCQlmbiA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIpKTsKKwkJZm4tPm5hbWUgPSB4bWVtZHVweihuYW1lLCBuYW1lbGVuKTsKKwkJZm4tPmZuID0gbGxfZXh0X21lcmdlOworCQkqbGxfdXNlcl9tZXJnZV90YWlsID0gZm47CisJCWxsX3VzZXJfbWVyZ2VfdGFpbCA9ICYoZm4tPm5leHQpOworCX0KKworCWlmICghc3RyY21wKCJuYW1lIiwga2V5KSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZmbi0+ZGVzY3JpcHRpb24sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImRyaXZlciIsIGtleSkpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGxhY2tzIHZhbHVlIiwgdmFyKTsKKwkJLyoKKwkJICogbWVyZ2UuPG5hbWU+LmRyaXZlciBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgbGluZToKKwkJICoKKwkJICoJY29tbWFuZC1saW5lCisJCSAqCisJCSAqIFRoZSBjb21tYW5kLWxpbmUgd2lsbCBiZSBpbnRlcnBvbGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nCisJCSAqIHRva2VucyBhbmQgaXMgZ2l2ZW4gdG8gdGhlIHNoZWxsOgorCQkgKgorCQkgKiAgICAlTyAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIHRoZSBtZXJnZSBiYXNlLgorCQkgKiAgICAlQSAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIG91ciB2ZXJzaW9uLgorCQkgKiAgICAlQiAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIHRoZSBvdGhlciBicmFuY2hlcycgdmVyc2lvbi4KKwkJICogICAgJUwgLSBjb25mbGljdCBtYXJrZXIgbGVuZ3RoCisJCSAqICAgICVQIC0gdGhlIG9yaWdpbmFsIHBhdGggKHNhZmVseSBxdW90ZWQgZm9yIHRoZSBzaGVsbCkKKwkJICoKKwkJICogVGhlIGV4dGVybmFsIG1lcmdlIGRyaXZlciBzaG91bGQgd3JpdGUgdGhlIHJlc3VsdHMgaW4gdGhlCisJCSAqIGZpbGUgbmFtZWQgYnkgJUEsIGFuZCBzaWduYWwgdGhhdCBpdCBoYXMgZG9uZSB3aXRoIHplcm8gZXhpdAorCQkgKiBzdGF0dXMuCisJCSAqLworCQlmbi0+Y21kbGluZSA9IHhzdHJkdXAodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgicmVjdXJzaXZlIiwga2V5KSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZmbi0+cmVjdXJzaXZlLCB2YXIsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplX2xsX21lcmdlKHZvaWQpCit7CisJaWYgKGxsX3VzZXJfbWVyZ2VfdGFpbCkKKwkJcmV0dXJuOworCWxsX3VzZXJfbWVyZ2VfdGFpbCA9ICZsbF91c2VyX21lcmdlOworCWdpdF9jb25maWcocmVhZF9tZXJnZV9jb25maWcsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZmluZF9sbF9tZXJnZV9kcml2ZXIoY29uc3QgY2hhciAqbWVyZ2VfYXR0cikKK3sKKwlzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmbjsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBpOworCisJaW5pdGlhbGl6ZV9sbF9tZXJnZSgpOworCisJaWYgKEFUVFJfVFJVRShtZXJnZV9hdHRyKSkKKwkJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfVEVYVF9NRVJHRV07CisJZWxzZSBpZiAoQVRUUl9GQUxTRShtZXJnZV9hdHRyKSkKKwkJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfQklOQVJZX01FUkdFXTsKKwllbHNlIGlmIChBVFRSX1VOU0VUKG1lcmdlX2F0dHIpKSB7CisJCWlmICghZGVmYXVsdF9sbF9tZXJnZSkKKwkJCXJldHVybiAmbGxfbWVyZ2VfZHJ2W0xMX1RFWFRfTUVSR0VdOworCQllbHNlCisJCQluYW1lID0gZGVmYXVsdF9sbF9tZXJnZTsKKwl9CisJZWxzZQorCQluYW1lID0gbWVyZ2VfYXR0cjsKKworCWZvciAoZm4gPSBsbF91c2VyX21lcmdlOyBmbjsgZm4gPSBmbi0+bmV4dCkKKwkJaWYgKCFzdHJjbXAoZm4tPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGZuOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGxfbWVyZ2VfZHJ2KTsgaSsrKQorCQlpZiAoIXN0cmNtcChsbF9tZXJnZV9kcnZbaV0ubmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gJmxsX21lcmdlX2RydltpXTsKKworCS8qIGRlZmF1bHQgdG8gdGhlIDMtd2F5ICovCisJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfVEVYVF9NRVJHRV07Cit9CisKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZV9maWxlKG1tZmlsZV90ICptbSwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHJidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAocmVub3JtYWxpemVfYnVmZmVyKGlzdGF0ZSwgcGF0aCwgbW0tPnB0ciwgbW0tPnNpemUsICZzdHJidWYpKSB7CisJCWZyZWUobW0tPnB0cik7CisJCW1tLT5zaXplID0gc3RyYnVmLmxlbjsKKwkJbW0tPnB0ciA9IHN0cmJ1Zl9kZXRhY2goJnN0cmJ1ZiwgTlVMTCk7CisJfQorfQorCitpbnQgbGxfbWVyZ2UobW1idWZmZXJfdCAqcmVzdWx0X2J1ZiwKKwkgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJICAgICBtbWZpbGVfdCAqYW5jZXN0b3IsIGNvbnN0IGNoYXIgKmFuY2VzdG9yX2xhYmVsLAorCSAgICAgbW1maWxlX3QgKm91cnMsIGNvbnN0IGNoYXIgKm91cl9sYWJlbCwKKwkgICAgIG1tZmlsZV90ICp0aGVpcnMsIGNvbnN0IGNoYXIgKnRoZWlyX2xhYmVsLAorCSAgICAgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJICAgICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2sgPSBsb2FkX21lcmdlX2F0dHJpYnV0ZXMoKTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGxsX21lcmdlX29wdGlvbnMgZGVmYXVsdF9vcHRzOworCWNvbnN0IGNoYXIgKmxsX2RyaXZlcl9uYW1lID0gTlVMTDsKKwlpbnQgbWFya2VyX3NpemUgPSBERUZBVUxUX0NPTkZMSUNUX01BUktFUl9TSVpFOworCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRyaXZlcjsKKworCWlmICghb3B0cykKKwkJb3B0cyA9ICZkZWZhdWx0X29wdHM7CisKKwlpZiAob3B0cy0+cmVub3JtYWxpemUpIHsKKwkJbm9ybWFsaXplX2ZpbGUoYW5jZXN0b3IsIHBhdGgsIGlzdGF0ZSk7CisJCW5vcm1hbGl6ZV9maWxlKG91cnMsIHBhdGgsIGlzdGF0ZSk7CisJCW5vcm1hbGl6ZV9maWxlKHRoZWlycywgcGF0aCwgaXN0YXRlKTsKKwl9CisKKwlnaXRfY2hlY2tfYXR0cihpc3RhdGUsIHBhdGgsIGNoZWNrKTsKKwlsbF9kcml2ZXJfbmFtZSA9IGNoZWNrLT5pdGVtc1swXS52YWx1ZTsKKwlpZiAoY2hlY2stPml0ZW1zWzFdLnZhbHVlKSB7CisJCW1hcmtlcl9zaXplID0gYXRvaShjaGVjay0+aXRlbXNbMV0udmFsdWUpOworCQlpZiAobWFya2VyX3NpemUgPD0gMCkKKwkJCW1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKwl9CisJZHJpdmVyID0gZmluZF9sbF9tZXJnZV9kcml2ZXIobGxfZHJpdmVyX25hbWUpOworCisJaWYgKG9wdHMtPnZpcnR1YWxfYW5jZXN0b3IpIHsKKwkJaWYgKGRyaXZlci0+cmVjdXJzaXZlKQorCQkJZHJpdmVyID0gZmluZF9sbF9tZXJnZV9kcml2ZXIoZHJpdmVyLT5yZWN1cnNpdmUpOworCX0KKwlpZiAob3B0cy0+ZXh0cmFfbWFya2VyX3NpemUpIHsKKwkJbWFya2VyX3NpemUgKz0gb3B0cy0+ZXh0cmFfbWFya2VyX3NpemU7CisJfQorCXJldHVybiBkcml2ZXItPmZuKGRyaXZlciwgcmVzdWx0X2J1ZiwgcGF0aCwgYW5jZXN0b3IsIGFuY2VzdG9yX2xhYmVsLAorCQkJICBvdXJzLCBvdXJfbGFiZWwsIHRoZWlycywgdGhlaXJfbGFiZWwsCisJCQkgIG9wdHMsIG1hcmtlcl9zaXplKTsKK30KKworaW50IGxsX21lcmdlX21hcmtlcl9zaXplKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7CisJaW50IG1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKworCWlmICghY2hlY2spCisJCWNoZWNrID0gYXR0cl9jaGVja19pbml0bCgiY29uZmxpY3QtbWFya2VyLXNpemUiLCBOVUxMKTsKKwlnaXRfY2hlY2tfYXR0cihpc3RhdGUsIHBhdGgsIGNoZWNrKTsKKwlpZiAoY2hlY2stPml0ZW1zWzBdLnZhbHVlKSB7CisJCW1hcmtlcl9zaXplID0gYXRvaShjaGVjay0+aXRlbXNbMF0udmFsdWUpOworCQlpZiAobWFya2VyX3NpemUgPD0gMCkKKwkJCW1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKwl9CisJcmV0dXJuIG1hcmtlcl9zaXplOworfQpkaWZmIC0tZ2l0IGEvbGwtbWVyZ2UuaCBiL2xsLW1lcmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlYjFiMgotLS0gL2Rldi9udWxsCisrKyBiL2xsLW1lcmdlLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBMb3cgbGV2ZWwgMy13YXkgaW4tY29yZSBmaWxlIG1lcmdlLgorICovCisKKyNpZm5kZWYgTExfTUVSR0VfSAorI2RlZmluZSBMTF9NRVJHRV9ICisKKyNpbmNsdWRlICJ4ZGlmZi94ZGlmZi5oIgorCisvKioKKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlOgorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC0gUHJlcGFyZSBhIGBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9uc2AgdG8gcmVjb3JkIG9wdGlvbnMuCisgKiAgIElmIHlvdSBoYXZlIG5vIHNwZWNpYWwgcmVxdWVzdHMsIHNraXAgdGhpcyBhbmQgcGFzcyBgTlVMTGAKKyAqICAgYXMgdGhlIGBvcHRzYCBwYXJhbWV0ZXIgdG8gdXNlIHRoZSBkZWZhdWx0IG9wdGlvbnMuCisgKgorICogLSBBbGxvY2F0ZSBhbiBtbWJ1ZmZlcl90IHZhcmlhYmxlIGZvciB0aGUgcmVzdWx0LgorICoKKyAqIC0gQWxsb2NhdGUgYW5kIGZpbGwgdmFyaWFibGVzIHdpdGggdGhlIGZpbGUncyBvcmlnaW5hbCBjb250ZW50CisgKiAgIGFuZCB0d28gbW9kaWZpZWQgdmVyc2lvbnMgKHVzaW5nIGByZWFkX21tZmlsZWAsIGZvciBleGFtcGxlKS4KKyAqCisgKiAtIENhbGwgYGxsX21lcmdlKClgLgorICoKKyAqIC0gUmVhZCB0aGUgbWVyZ2VkIGNvbnRlbnQgZnJvbSBgcmVzdWx0X2J1Zi5wdHJgIGFuZCBgcmVzdWx0X2J1Zi5zaXplYC4KKyAqCisgKiAtIFJlbGVhc2UgYnVmZmVycyB3aGVuIGZpbmlzaGVkLiAgQSBzaW1wbGUKKyAqICAgYGZyZWUoYW5jZXN0b3IucHRyKTsgZnJlZShvdXJzLnB0cik7IGZyZWUodGhlaXJzLnB0cik7CisgKiAgIGZyZWUocmVzdWx0X2J1Zi5wdHIpO2Agd2lsbCBkby4KKyAqCisgKiBJZiB0aGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgbWVyZ2UgY2xlYW5seSwgYGxsX21lcmdlYCB3aWxsIHJldHVybiBhCisgKiBub256ZXJvIHZhbHVlIGFuZCBgcmVzdWx0X2J1ZmAgd2lsbCBnZW5lcmFsbHkgaW5jbHVkZSBhIGRlc2NyaXB0aW9uIG9mCisgKiB0aGUgY29uZmxpY3QgYnJhY2tldGVkIGJ5IG1hcmtlcnMgc3VjaCBhcyB0aGUgdHJhZGl0aW9uYWwgYDw8PDw8PDxgCisgKiBhbmQgYD4+Pj4+Pj5gLgorICoKKyAqIFRoZSBgYW5jZXN0b3JfbGFiZWxgLCBgb3VyX2xhYmVsYCwgYW5kIGB0aGVpcl9sYWJlbGAgcGFyYW1ldGVycyBhcmUKKyAqIHVzZWQgdG8gbGFiZWwgdGhlIGRpZmZlcmVudCBzaWRlcyBvZiBhIGNvbmZsaWN0IGlmIHRoZSBtZXJnZSBkcml2ZXIKKyAqIHN1cHBvcnRzIHRoaXMuCisgKi8KKworCitzdHJ1Y3QgaW5kZXhfc3RhdGU7CisKKy8qKgorICogVGhpcyBkZXNjcmliZXMgdGhlIHNldCBvZiBvcHRpb25zIHRoZSBjYWxsaW5nIHByb2dyYW0gd2FudHMgdG8gYWZmZWN0CisgKiB0aGUgb3BlcmF0aW9uIG9mIGEgbG93LWxldmVsIChzaW5nbGUgZmlsZSkgbWVyZ2UuCisgKi8KK3N0cnVjdCBsbF9tZXJnZV9vcHRpb25zIHsKKworCS8qKgorCSAqIEJlaGF2ZSBhcyB0aG91Z2ggdGhpcyB3ZXJlIHBhcnQgb2YgYSBtZXJnZSBiZXR3ZWVuIGNvbW1vbiBhbmNlc3RvcnMgaW4KKwkgKiBhIHJlY3Vyc2l2ZSBtZXJnZSAobWVyZ2VzIG9mIGJpbmFyeSBmaWxlcyBtYXkgbmVlZCB0byBiZSBoYW5kbGVkCisJICogZGlmZmVyZW50bHkgaW4gc3VjaCBjYXNlcywgZm9yIGV4YW1wbGUpLiBJZiBhIGhlbHBlciBwcm9ncmFtIGlzCisJICogc3BlY2lmaWVkIGJ5IHRoZSBgW21lcmdlICI8ZHJpdmVyPiJdIHJlY3Vyc2l2ZWAgY29uZmlndXJhdGlvbiwgaXQgd2lsbAorCSAqIGJlIHVzZWQuCisJICovCisJdW5zaWduZWQgdmlydHVhbF9hbmNlc3RvciA6IDE7CisKKwkvKioKKwkgKiBSZXNvbHZlIGxvY2FsIGNvbmZsaWN0cyBhdXRvbWF0aWNhbGx5IGluIGZhdm9yIG9mIG9uZSBzaWRlIG9yIHRoZSBvdGhlcgorCSAqIChhcyBpbiAnZ2l0IG1lcmdlLWZpbGUnIGAtLW91cnNgL2AtLXRoZWlyc2AvYC0tdW5pb25gKS4gIENhbiBiZSBgMGAsCisJICogYFhETF9NRVJHRV9GQVZPUl9PVVJTYCwgYFhETF9NRVJHRV9GQVZPUl9USEVJUlNgLAorCSAqIG9yIGBYRExfTUVSR0VfRkFWT1JfVU5JT05gLgorCSAqLworCXVuc2lnbmVkIHZhcmlhbnQgOiAyOworCisJLyoqCisJICogUmVzbXVkZ2UgYW5kIGNsZWFuIHRoZSAiYmFzZSIsICJ0aGVpcnMiIGFuZCAib3VycyIgZmlsZXMgYmVmb3JlIG1lcmdpbmcuCisJICogVXNlIHRoaXMgd2hlbiB0aGUgbWVyZ2UgaXMgbGlrZWx5IHRvIGhhdmUgb3ZlcmxhcHBlZCB3aXRoIGEgY2hhbmdlIGluCisJICogc211ZGdlL2NsZWFuIG9yIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24gcnVsZXMuCisJICovCisJdW5zaWduZWQgcmVub3JtYWxpemUgOiAxOworCisJLyoqCisJICogSW5jcmVhc2UgdGhlIGxlbmd0aCBvZiBjb25mbGljdCBtYXJrZXJzIHNvIHRoYXQgbmVzdGVkIGNvbmZsaWN0cworCcKgKiBjYW4gYmUgZGlmZmVyZW50aWF0ZWQuCisJICovCisJdW5zaWduZWQgZXh0cmFfbWFya2VyX3NpemU7CisKKwkvKiBFeHRyYSB4cHBhcmFtX3QgZmxhZ3MgYXMgZGVmaW5lZCBpbiB4ZGlmZi94ZGlmZi5oLiAqLworCWxvbmcgeGRsX29wdHM7Cit9OworCisvKioKKyAqIFBlcmZvcm0gYSB0aHJlZS13YXkgc2luZ2xlLWZpbGUgbWVyZ2UgaW4gY29yZS4gIFRoaXMgaXMgYSB0aGluIHdyYXBwZXIKKyAqIGFyb3VuZCBgeGRsX21lcmdlYCB0aGF0IHRha2VzIHRoZSBwYXRoIGFuZCBhbnkgbWVyZ2UgYmFja2VuZCBzcGVjaWZpZWQgaW4KKyAqIGAuZ2l0YXR0cmlidXRlc2Agb3IgYC5naXQvaW5mby9hdHRyaWJ1dGVzYCBpbnRvIGFjY291bnQuCisgKiBSZXR1cm5zIDAgZm9yIGEgY2xlYW4gbWVyZ2UuCisgKi8KK2ludCBsbF9tZXJnZShtbWJ1ZmZlcl90ICpyZXN1bHRfYnVmLAorCSAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkgICAgIG1tZmlsZV90ICphbmNlc3RvciwgY29uc3QgY2hhciAqYW5jZXN0b3JfbGFiZWwsCisJICAgICBtbWZpbGVfdCAqb3VycywgY29uc3QgY2hhciAqb3VyX2xhYmVsLAorCSAgICAgbW1maWxlX3QgKnRoZWlycywgY29uc3QgY2hhciAqdGhlaXJfbGFiZWwsCisJICAgICBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkgICAgIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzKTsKKworaW50IGxsX21lcmdlX21hcmtlcl9zaXplKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgcmVzZXRfbWVyZ2VfYXR0cmlidXRlcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9sb2NrZmlsZS5jIGIvbG9ja2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZThhYjRmCi0tLSAvZGV2L251bGwKKysrIGIvbG9ja2ZpbGUuYwpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgSnVuaW8gQyBIYW1hbm8KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorCisvKgorICogcGF0aCA9IGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggbmFtZQorICoKKyAqIFJlbW92ZSB0aGUgbGFzdCBwYXRoIG5hbWUgZWxlbWVudCBmcm9tIHBhdGggKGxlYXZpbmcgdGhlIHByZWNlZGluZworICogIi8iLCBpZiBhbnkpLiAgSWYgcGF0aCBpcyBlbXB0eSBvciB0aGUgcm9vdCBkaXJlY3RvcnkgKCIvIiksIHNldAorICogcGF0aCB0byB0aGUgZW1wdHkgc3RyaW5nLgorICovCitzdGF0aWMgdm9pZCB0cmltX2xhc3RfcGF0aF9jb21wb25lbnQoc3RydWN0IHN0cmJ1ZiAqcGF0aCkKK3sKKwlpbnQgaSA9IHBhdGgtPmxlbjsKKworCS8qIGJhY2sgdXAgcGFzdCB0cmFpbGluZyBzbGFzaGVzLCBpZiBhbnkgKi8KKwl3aGlsZSAoaSAmJiBwYXRoLT5idWZbaSAtIDFdID09ICcvJykKKwkJaS0tOworCisJLyoKKwkgKiB0aGVuIGdvIGJhY2t3YXJkcyB1bnRpbCBhIHNsYXNoLCBvciB0aGUgYmVnaW5uaW5nIG9mIHRoZQorCSAqIHN0cmluZworCSAqLworCXdoaWxlIChpICYmIHBhdGgtPmJ1ZltpIC0gMV0gIT0gJy8nKQorCQlpLS07CisKKwlzdHJidWZfc2V0bGVuKHBhdGgsIGkpOworfQorCisKKy8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHN5bWJvbGljIGxpbmtzLiBPbmx5IHdpdGhpbiByZWFzb24sIHRob3VnaCAqLworI2RlZmluZSBNQVhERVBUSCA1CisKKy8qCisgKiBwYXRoIGNvbnRhaW5zIGEgcGF0aCB0aGF0IG1pZ2h0IGJlIGEgc3ltbGluay4KKyAqCisgKiBJZiBwYXRoIGlzIGEgc3ltbGluaywgYXR0ZW1wdCB0byBvdmVyd3JpdGUgaXQgd2l0aCBhIHBhdGggdG8gdGhlCisgKiByZWFsIGZpbGUgb3IgZGlyZWN0b3J5ICh3aGljaCBtYXkgb3IgbWF5IG5vdCBleGlzdCksIGZvbGxvd2luZyBhCisgKiBjaGFpbiBvZiBzeW1saW5rcyBpZiBuZWNlc3NhcnkuICBPdGhlcndpc2UsIGxlYXZlIHBhdGggdW5tb2RpZmllZC4KKyAqCisgKiBUaGlzIGlzIGEgYmVzdC1lZmZvcnQgcm91dGluZS4gIElmIGFuIGVycm9yIG9jY3VycywgcGF0aCB3aWxsCisgKiBlaXRoZXIgYmUgbGVmdCB1bm1vZGlmaWVkIG9yIHdpbGwgbmFtZSBhIGRpZmZlcmVudCBzeW1saW5rIGluIGEKKyAqIHN5bWxpbmsgY2hhaW4gdGhhdCBzdGFydGVkIHdpdGggdGhlIG9yaWdpbmFsIHBhdGguCisgKi8KK3N0YXRpYyB2b2lkIHJlc29sdmVfc3ltbGluayhzdHJ1Y3Qgc3RyYnVmICpwYXRoKQoreworCWludCBkZXB0aCA9IE1BWERFUFRIOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGxpbmsgPSBTVFJCVUZfSU5JVDsKKworCXdoaWxlIChkZXB0aC0tKSB7CisJCWlmIChzdHJidWZfcmVhZGxpbmsoJmxpbmssIHBhdGgtPmJ1ZiwgcGF0aC0+bGVuKSA8IDApCisJCQlicmVhazsKKworCQlpZiAoaXNfYWJzb2x1dGVfcGF0aChsaW5rLmJ1ZikpCisJCQkvKiBhYnNvbHV0ZSBwYXRoIHNpbXBseSByZXBsYWNlcyBwICovCisJCQlzdHJidWZfcmVzZXQocGF0aCk7CisJCWVsc2UKKwkJCS8qCisJCQkgKiBsaW5rIGlzIGEgcmVsYXRpdmUgcGF0aCwgc28gcmVwbGFjZSB0aGUKKwkJCSAqIGxhc3QgZWxlbWVudCBvZiBwIHdpdGggaXQuCisJCQkgKi8KKwkJCXRyaW1fbGFzdF9wYXRoX2NvbXBvbmVudChwYXRoKTsKKworCQlzdHJidWZfYWRkYnVmKHBhdGgsICZsaW5rKTsKKwl9CisJc3RyYnVmX3Jlc2V0KCZsaW5rKTsKK30KKworLyogTWFrZSBzdXJlIGVycm5vIGNvbnRhaW5zIGEgbWVhbmluZ2Z1bCB2YWx1ZSBvbiBlcnJvciAqLworc3RhdGljIGludCBsb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGZpbGVuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZmaWxlbmFtZSwgcGF0aCk7CisJaWYgKCEoZmxhZ3MgJiBMT0NLX05PX0RFUkVGKSkKKwkJcmVzb2x2ZV9zeW1saW5rKCZmaWxlbmFtZSk7CisKKwlzdHJidWZfYWRkc3RyKCZmaWxlbmFtZSwgTE9DS19TVUZGSVgpOworCWxrLT50ZW1wZmlsZSA9IGNyZWF0ZV90ZW1wZmlsZShmaWxlbmFtZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZmaWxlbmFtZSk7CisJcmV0dXJuIGxrLT50ZW1wZmlsZSA/IGxrLT50ZW1wZmlsZS0+ZmQgOiAtMTsKK30KKworLyoKKyAqIENvbnN0YW50cyBkZWZpbmluZyB0aGUgZ2FwcyBiZXR3ZWVuIGF0dGVtcHRzIHRvIGxvY2sgYSBmaWxlLiBUaGUKKyAqIGZpcnN0IGJhY2tvZmYgcGVyaW9kIGlzIGFwcHJveGltYXRlbHkgSU5JVElBTF9CQUNLT0ZGX01TCisgKiBtaWxsaXNlY29uZHMuIFRoZSBsb25nZXN0IGJhY2tvZmYgcGVyaW9kIGlzIGFwcHJveGltYXRlbHkKKyAqIChCQUNLT0ZGX01BWF9NVUxUSVBMSUVSICogSU5JVElBTF9CQUNLT0ZGX01TKSBtaWxsaXNlY29uZHMuCisgKi8KKyNkZWZpbmUgSU5JVElBTF9CQUNLT0ZGX01TIDFMCisjZGVmaW5lIEJBQ0tPRkZfTUFYX01VTFRJUExJRVIgMTAwMAorCisvKgorICogVHJ5IGxvY2tpbmcgcGF0aCwgcmV0cnlpbmcgd2l0aCBxdWFkcmF0aWMgYmFja29mZiBmb3IgYXQgbGVhc3QKKyAqIHRpbWVvdXRfbXMgbWlsbGlzZWNvbmRzLiBJZiB0aW1lb3V0X21zIGlzIDAsIHRyeSBsb2NraW5nIHRoZSBmaWxlCisgKiBleGFjdGx5IG9uY2UuIElmIHRpbWVvdXRfbXMgaXMgLTEsIHRyeSBpbmRlZmluaXRlbHkuCisgKi8KK3N0YXRpYyBpbnQgbG9ja19maWxlX3RpbWVvdXQoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgIGludCBmbGFncywgbG9uZyB0aW1lb3V0X21zKQoreworCWludCBuID0gMTsKKwlpbnQgbXVsdGlwbGllciA9IDE7CisJbG9uZyByZW1haW5pbmdfbXMgPSAwOworCXN0YXRpYyBpbnQgcmFuZG9tX2luaXRpYWxpemVkID0gMDsKKworCWlmICh0aW1lb3V0X21zID09IDApCisJCXJldHVybiBsb2NrX2ZpbGUobGssIHBhdGgsIGZsYWdzKTsKKworCWlmICghcmFuZG9tX2luaXRpYWxpemVkKSB7CisJCXNyYW5kKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkpOworCQlyYW5kb21faW5pdGlhbGl6ZWQgPSAxOworCX0KKworCWlmICh0aW1lb3V0X21zID4gMCkKKwkJcmVtYWluaW5nX21zID0gdGltZW91dF9tczsKKworCXdoaWxlICgxKSB7CisJCWxvbmcgYmFja29mZl9tcywgd2FpdF9tczsKKwkJaW50IGZkOworCisJCWZkID0gbG9ja19maWxlKGxrLCBwYXRoLCBmbGFncyk7CisKKwkJaWYgKGZkID49IDApCisJCQlyZXR1cm4gZmQ7IC8qIHN1Y2Nlc3MgKi8KKwkJZWxzZSBpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJcmV0dXJuIC0xOyAvKiBmYWlsdXJlIG90aGVyIHRoYW4gbG9jayBoZWxkICovCisJCWVsc2UgaWYgKHRpbWVvdXRfbXMgPiAwICYmIHJlbWFpbmluZ19tcyA8PSAwKQorCQkJcmV0dXJuIC0xOyAvKiBmYWlsdXJlIGR1ZSB0byB0aW1lb3V0ICovCisKKwkJYmFja29mZl9tcyA9IG11bHRpcGxpZXIgKiBJTklUSUFMX0JBQ0tPRkZfTVM7CisJCS8qIGJhY2sgb2ZmIGZvciBiZXR3ZWVuIDAuNzUqYmFja29mZl9tcyBhbmQgMS4yNSpiYWNrb2ZmX21zICovCisJCXdhaXRfbXMgPSAoNzUwICsgcmFuZCgpICUgNTAwKSAqIGJhY2tvZmZfbXMgLyAxMDAwOworCQlzbGVlcF9taWxsaXNlYyh3YWl0X21zKTsKKwkJcmVtYWluaW5nX21zIC09IHdhaXRfbXM7CisKKwkJLyogUmVjdXJzaW9uOiAobisxKV4yID0gbl4yICsgMm4gKyAxICovCisJCW11bHRpcGxpZXIgKz0gMipuICsgMTsKKwkJaWYgKG11bHRpcGxpZXIgPiBCQUNLT0ZGX01BWF9NVUxUSVBMSUVSKQorCQkJbXVsdGlwbGllciA9IEJBQ0tPRkZfTUFYX01VTFRJUExJRVI7CisJCWVsc2UKKwkJCW4rKzsKKwl9Cit9CisKK3ZvaWQgdW5hYmxlX3RvX2xvY2tfbWVzc2FnZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZXJyLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaWYgKGVyciA9PSBFRVhJU1QpIHsKKwkJc3RyYnVmX2FkZGYoYnVmLCBfKCJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG5cbiIKKwkJICAgICJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisJCSAgICAiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorCQkgICAgImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorCQkgICAgIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisJCSAgICAicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIpLAorCQkJICAgIGFic29sdXRlX3BhdGgocGF0aCksIHN0cmVycm9yKGVycikpOworCX0gZWxzZQorCQlzdHJidWZfYWRkZihidWYsIF8oIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIpLAorCQkJICAgIGFic29sdXRlX3BhdGgocGF0aCksIHN0cmVycm9yKGVycikpOworfQorCitOT1JFVFVSTiB2b2lkIHVuYWJsZV90b19sb2NrX2RpZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZXJyKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwl1bmFibGVfdG9fbG9ja19tZXNzYWdlKHBhdGgsIGVyciwgJmJ1Zik7CisJZGllKCIlcyIsIGJ1Zi5idWYpOworfQorCisvKiBUaGlzIHNob3VsZCByZXR1cm4gYSBtZWFuaW5nZnVsIGVycm5vIG9uIGZhaWx1cmUgKi8KK2ludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX3RpbWVvdXQoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICAgaW50IGZsYWdzLCBsb25nIHRpbWVvdXRfbXMpCit7CisJaW50IGZkID0gbG9ja19maWxlX3RpbWVvdXQobGssIHBhdGgsIGZsYWdzLCB0aW1lb3V0X21zKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlmIChmbGFncyAmIExPQ0tfRElFX09OX0VSUk9SKQorCQkJdW5hYmxlX3RvX2xvY2tfZGllKHBhdGgsIGVycm5vKTsKKwkJaWYgKGZsYWdzICYgTE9DS19SRVBPUlRfT05fRVJST1IpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCQl1bmFibGVfdG9fbG9ja19tZXNzYWdlKHBhdGgsIGVycm5vLCAmYnVmKTsKKwkJCWVycm9yKCIlcyIsIGJ1Zi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCX0KKwl9CisJcmV0dXJuIGZkOworfQorCitjaGFyICpnZXRfbG9ja2VkX2ZpbGVfcGF0aChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJldCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZHN0cigmcmV0LCBnZXRfdGVtcGZpbGVfcGF0aChsay0+dGVtcGZpbGUpKTsKKwlpZiAocmV0LmxlbiA8PSBMT0NLX1NVRkZJWF9MRU4gfHwKKwkgICAgc3RyY21wKHJldC5idWYgKyByZXQubGVuIC0gTE9DS19TVUZGSVhfTEVOLCBMT0NLX1NVRkZJWCkpCisJCUJVRygiZ2V0X2xvY2tlZF9maWxlX3BhdGgoKSBjYWxsZWQgZm9yIG1hbGZvcm1lZCBsb2NrIG9iamVjdCIpOworCS8qIHJlbW92ZSAiLmxvY2siOiAqLworCXN0cmJ1Zl9zZXRsZW4oJnJldCwgcmV0LmxlbiAtIExPQ0tfU1VGRklYX0xFTik7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7Cit9CisKK2ludCBjb21taXRfbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCWNoYXIgKnJlc3VsdF9wYXRoID0gZ2V0X2xvY2tlZF9maWxlX3BhdGgobGspOworCisJaWYgKGNvbW1pdF9sb2NrX2ZpbGVfdG8obGssIHJlc3VsdF9wYXRoKSkgeworCQlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCQlmcmVlKHJlc3VsdF9wYXRoKTsKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCQlyZXR1cm4gLTE7CisJfQorCWZyZWUocmVzdWx0X3BhdGgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbG9ja2ZpbGUuaCBiL2xvY2tmaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0MzA1MwotLS0gL2Rldi9udWxsCisrKyBiL2xvY2tmaWxlLmgKQEAgLTAsMCArMSwzMDcgQEAKKyNpZm5kZWYgTE9DS0ZJTEVfSAorI2RlZmluZSBMT0NLRklMRV9ICisKKy8qCisgKiBGaWxlIHdyaXRlLWxvY2tzIGFzIHVzZWQgYnkgR2l0LgorICoKKyAqIFRoZSBsb2NrZmlsZSBBUEkgc2VydmVzIHR3byBwdXJwb3NlczoKKyAqCisgKiAqIE11dHVhbCBleGNsdXNpb24gYW5kIGF0b21pYyBmaWxlIHVwZGF0ZXMuIFdoZW4gd2Ugd2FudCB0byBjaGFuZ2UKKyAqICAgYSBmaWxlLCB3ZSBjcmVhdGUgYSBsb2NrZmlsZSBgPGZpbGVuYW1lPi5sb2NrYCwgd3JpdGUgdGhlIG5ldworICogICBmaWxlIGNvbnRlbnRzIGludG8gaXQsIGFuZCB0aGVuIHJlbmFtZSB0aGUgbG9ja2ZpbGUgdG8gaXRzIGZpbmFsCisgKiAgIGRlc3RpbmF0aW9uIGA8ZmlsZW5hbWU+YC4gV2UgY3JlYXRlIHRoZSBgPGZpbGVuYW1lPi5sb2NrYCBmaWxlCisgKiAgIHdpdGggYE9fQ1JFQVR8T19FWENMYCBzbyB0aGF0IHdlIGNhbiBub3RpY2UgYW5kIGZhaWwgaWYgc29tZWJvZHkKKyAqICAgZWxzZSBoYXMgYWxyZWFkeSBsb2NrZWQgdGhlIGZpbGUsIHRoZW4gYXRvbWljYWxseSByZW5hbWUgdGhlCisgKiAgIGxvY2tmaWxlIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbiB0byBjb21taXQgdGhlIGNoYW5nZXMgYW5kCisgKiAgIHVubG9jayB0aGUgZmlsZS4KKyAqCisgKiAqIEF1dG9tYXRpYyBjcnVmdCByZW1vdmFsLiBJZiB0aGUgcHJvZ3JhbSBleGl0cyBhZnRlciB3ZSBsb2NrIGEKKyAqICAgZmlsZSBidXQgYmVmb3JlIHRoZSBjaGFuZ2VzIGhhdmUgYmVlbiBjb21taXR0ZWQsIHdlIHdhbnQgdG8gbWFrZQorICogICBzdXJlIHRoYXQgd2UgcmVtb3ZlIHRoZSBsb2NrZmlsZS4gVGhpcyBpcyBkb25lIGJ5IHJlbWVtYmVyaW5nIHRoZQorICogICBsb2NrZmlsZXMgd2UgaGF2ZSBjcmVhdGVkIGluIGEgbGlua2VkIGxpc3QgYW5kIHNldHRpbmcgdXAgYW4KKyAqICAgYGF0ZXhpdCgzKWAgaGFuZGxlciBhbmQgYSBzaWduYWwgaGFuZGxlciB0aGF0IGNsZWFuIHVwIHRoZQorICogICBsb2NrZmlsZXMuIFRoaXMgbWVjaGFuaXNtIGVuc3VyZXMgdGhhdCBvdXRzdGFuZGluZyBsb2NrZmlsZXMgYXJlCisgKiAgIGNsZWFuZWQgdXAgaWYgdGhlIHByb2dyYW0gZXhpdHMgKGluY2x1ZGluZyB3aGVuIGBkaWUoKWAgaXMKKyAqICAgY2FsbGVkKSBvciBpZiB0aGUgcHJvZ3JhbSBpcyB0ZXJtaW5hdGVkIGJ5IGEgc2lnbmFsLgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgbG9ja2ZpbGVzIG9ubHkgYmxvY2sgb3RoZXIgd3JpdGVycy4gUmVhZGVycyBkbyBub3QKKyAqIGJsb2NrLCBidXQgdGhleSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgZWl0aGVyIHRoZSBvbGQgY29udGVudHMgb2YKKyAqIHRoZSBmaWxlIG9yIHRoZSBuZXcgY29udGVudHMgb2YgdGhlIGZpbGUgKGFzc3VtaW5nIHRoYXQgdGhlCisgKiBmaWxlc3lzdGVtIGltcGxlbWVudHMgYHJlbmFtZSgyKWAgYXRvbWljYWxseSkuCisgKgorICogTW9zdCBvZiB0aGUgaGVhdnkgbGlmdGluZyBpcyBkb25lIGJ5IHRoZSB0ZW1wZmlsZSBtb2R1bGUgKHNlZQorICogInRlbXBmaWxlLmgiKS4KKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIGNhbGxlcjoKKyAqCisgKiAqIEFsbG9jYXRlcyBhIGBzdHJ1Y3QgbG9ja19maWxlYCB3aXRoIHdoYXRldmVyIHN0b3JhZ2UgZHVyYXRpb24geW91CisgKiAgIGRlc2lyZS4gVGhlIHN0cnVjdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZworICogICB1c2VkLCBidXQgaXQgaXMgZ29vZCBwcmFjdGljZSB0byBkbyBzbyB1c2luZyBieSBzZXR0aW5nIGl0IHRvCisgKiAgIGFsbC16ZXJvcyAob3IgdXNpbmcgdGhlIExPQ0tfSU5JVCBtYWNybykuIFRoaXMgcHV0cyB0aGUgb2JqZWN0IGluIGEKKyAqICAgY29uc2lzdGVudCBzdGF0ZSB0aGF0IGFsbG93cyB5b3UgdG8gY2FsbCByb2xsYmFja19sb2NrX2ZpbGUoKSBldmVuCisgKiAgIGlmIHRoZSBsb2NrIHdhcyBuZXZlciB0YWtlbiAoaW4gd2hpY2ggY2FzZSBpdCBpcyBhIG5vb3ApLgorICoKKyAqICogQXR0ZW1wdHMgdG8gY3JlYXRlIGEgbG9ja2ZpbGUgYnkgY2FsbGluZyBgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgpYC4KKyAqCisgKiAqIFdyaXRlcyBuZXcgY29udGVudCBmb3IgdGhlIGRlc3RpbmF0aW9uIGZpbGUgYnkgZWl0aGVyOgorICoKKyAqICAgKiB3cml0aW5nIHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgdGhlCisgKiAgICAgYGhvbGRfbG9ja19maWxlX2Zvcl8qKClgIGZ1bmN0aW9ucyAoYWxzbyBhdmFpbGFibGUgdmlhCisgKiAgICAgYGxvY2stPmZkYCkuCisgKgorICogICAqIGNhbGxpbmcgYGZkb3Blbl9sb2NrX2ZpbGUoKWAgdG8gZ2V0IGEgYEZJTEVgIHBvaW50ZXIgZm9yIHRoZQorICogICAgIG9wZW4gZmlsZSBhbmQgd3JpdGluZyB0byB0aGUgZmlsZSB1c2luZyBzdGRpby4KKyAqCisgKiAgIE5vdGUgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKQorICogICBpcyBtYXJrZWQgT19DTE9FWEVDLCBzbyB0aGUgbmV3IGNvbnRlbnRzIG11c3QgYmUgd3JpdHRlbiBieSB0aGUKKyAqICAgY3VycmVudCBwcm9jZXNzLCBub3QgYSBzcGF3bmVkIG9uZS4KKyAqCisgKiBXaGVuIGZpbmlzaGVkIHdyaXRpbmcsIHRoZSBjYWxsZXIgY2FuOgorICoKKyAqICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQgcmVuYW1lIHRoZSBsb2NrZmlsZSB0byBpdHMgZmluYWwKKyAqICAgZGVzdGluYXRpb24gYnkgY2FsbGluZyBgY29tbWl0X2xvY2tfZmlsZSgpYCBvcgorICogICBgY29tbWl0X2xvY2tfZmlsZV90bygpYC4KKyAqCisgKiAqIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgYW5kIHJlbW92ZSB0aGUgbG9ja2ZpbGUgYnkgY2FsbGluZworICogICBgcm9sbGJhY2tfbG9ja19maWxlKClgLgorICoKKyAqICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciB3aXRob3V0IHJlbW92aW5nIG9yIHJlbmFtaW5nIHRoZQorICogICBsb2NrZmlsZSBieSBjYWxsaW5nIGBjbG9zZV9sb2NrX2ZpbGVfZ2VudGx5KClgLCBhbmQgbGF0ZXIgY2FsbAorICogICBgY29tbWl0X2xvY2tfZmlsZSgpYCwgYGNvbW1pdF9sb2NrX2ZpbGVfdG8oKWAsCisgKiAgIGByb2xsYmFja19sb2NrX2ZpbGUoKWAsIG9yIGByZW9wZW5fbG9ja19maWxlKClgLgorICoKKyAqIEFmdGVyIHRoZSBsb2NrZmlsZSBpcyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2ssIHRoZSBgbG9ja19maWxlYAorICogb2JqZWN0IGNhbiBiZSBkaXNjYXJkZWQgb3IgcmV1c2VkLgorICoKKyAqIElmIHRoZSBwcm9ncmFtIGV4aXRzIGJlZm9yZSBgY29tbWl0X2xvY2tfZmlsZSgpYCwKKyAqIGBjb21taXRfbG9ja19maWxlX3RvKClgLCBvciBgcm9sbGJhY2tfbG9ja19maWxlKClgIGlzIGNhbGxlZCwgdGhlCisgKiB0ZW1wZmlsZSBtb2R1bGUgd2lsbCBjbG9zZSBhbmQgcmVtb3ZlIHRoZSBsb2NrZmlsZSwgdGhlcmVieSByb2xsaW5nCisgKiBiYWNrIGFueSB1bmNvbW1pdHRlZCBjaGFuZ2VzLgorICoKKyAqIElmIHlvdSBuZWVkIHRvIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgeW91IG9idGFpbmVkIGZyb20gYQorICogYGhvbGRfbG9ja19maWxlX2Zvcl8qKClgIGZ1bmN0aW9uIHlvdXJzZWxmLCBkbyBzbyBieSBjYWxsaW5nCisgKiBgY2xvc2VfbG9ja19maWxlX2dlbnRseSgpYC4gU2VlICJ0ZW1wZmlsZS5oIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKgorICogVW5kZXIgdGhlIGNvdmVycywgYSBsb2NrZmlsZSBpcyBqdXN0IGEgdGVtcGZpbGUgd2l0aCBhIGZldyBoZWxwZXIKKyAqIGZ1bmN0aW9ucy4gSW4gcGFydGljdWxhciwgdGhlIHN0YXRlIGRpYWdyYW0gYW5kIHRoZSBjbGVhbnVwCisgKiBtYWNoaW5lcnkgYXJlIGFsbCBpbXBsZW1lbnRlZCBpbiB0aGUgdGVtcGZpbGUgbW9kdWxlLgorICoKKyAqCisgKiBFcnJvciBoYW5kbGluZworICogLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgYGhvbGRfbG9ja19maWxlX2Zvcl8qKClgIGZ1bmN0aW9ucyByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3Igb24KKyAqIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZSAodW5sZXNzIGBMT0NLX0RJRV9PTl9FUlJPUmAgaXMgdXNlZDsgc2VlCisgKiAiZmxhZ3MiIGJlbG93KS4gT24gZXJyb3JzLCBgZXJybm9gIGRlc2NyaWJlcyB0aGUgcmVhc29uIGZvcgorICogZmFpbHVyZS4gRXJyb3JzIGNhbiBiZSByZXBvcnRlZCBieSBwYXNzaW5nIGBlcnJub2AgdG8KKyAqIGB1bmFibGVfdG9fbG9ja19tZXNzYWdlKClgIG9yIGB1bmFibGVfdG9fbG9ja19kaWUoKWAuCisgKgorICogU2ltaWxhcmx5LCBgY29tbWl0X2xvY2tfZmlsZWAsIGBjb21taXRfbG9ja19maWxlX3RvYCwgYW5kCisgKiBgY2xvc2VfbG9ja19maWxlYCByZXR1cm4gMCBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlIHRoZXkgc2V0IGBlcnJub2AKKyAqIGFwcHJvcHJpYXRlbHkgYW5kIHJldHVybiAtMS4gVGhlIGBjb21taXRgIHZhcmlhbnRzIChidXQgbm90IGBjbG9zZWApCisgKiBkbyB0aGVpciBiZXN0IHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYmVmb3JlIHJldHVybmluZy4KKyAqLworCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKworc3RydWN0IGxvY2tfZmlsZSB7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZTsKK307CisKKyNkZWZpbmUgTE9DS19JTklUIHsgTlVMTCB9CisKKy8qIFN0cmluZyBhcHBlbmRlZCB0byBhIGZpbGVuYW1lIHRvIGRlcml2ZSB0aGUgbG9ja2ZpbGUgbmFtZTogKi8KKyNkZWZpbmUgTE9DS19TVUZGSVggIi5sb2NrIgorI2RlZmluZSBMT0NLX1NVRkZJWF9MRU4gNQorCisKKy8qCisgKiBGbGFncworICogLS0tLS0KKyAqCisgKiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBiZSBwYXNzZWQgdG8gYGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKWAuCisgKi8KKworLyoKKyAqIElmIGEgbG9jayBpcyBhbHJlYWR5IHRha2VuIGZvciB0aGUgZmlsZSwgYGRpZSgpYCB3aXRoIGFuIGVycm9yCisgKiBtZXNzYWdlLiBJZiB0aGlzIGZsYWcgaXMgbm90IHNwZWNpZmllZCwgdHJ5aW5nIHRvIGxvY2sgYSBmaWxlIHRoYXQKKyAqIGlzIGFscmVhZHkgbG9ja2VkIHNpbGVudGx5IHJldHVybnMgLTEgdG8gdGhlIGNhbGxlciwgb3IgLi4uCisgKi8KKyNkZWZpbmUgTE9DS19ESUVfT05fRVJST1IgMQorCisvKgorICogLi4uIHRoaXMgZmxhZyBjYW4gYmUgcGFzc2VkIGluc3RlYWQgdG8gcmV0dXJuIC0xIGFuZCBnaXZlIHRoZSB1c3VhbAorICogZXJyb3IgbWVzc2FnZSB1cG9uIGFuIGVycm9yLgorICovCisjZGVmaW5lIExPQ0tfUkVQT1JUX09OX0VSUk9SIDQKKworLyoKKyAqIFVzdWFsbHkgc3ltYm9saWMgbGlua3MgaW4gdGhlIGRlc3RpbmF0aW9uIHBhdGggYXJlIHJlc29sdmVkLiBUaGlzCisgKiBtZWFucyB0aGF0ICgxKSB0aGUgbG9ja2ZpbGUgaXMgY3JlYXRlZCBieSBhZGRpbmcgIi5sb2NrIiB0byB0aGUKKyAqIHJlc29sdmVkIHBhdGgsIGFuZCAoMikgdXBvbiBjb21taXQsIHRoZSByZXNvbHZlZCBwYXRoIGlzCisgKiBvdmVyd3JpdHRlbi4gSG93ZXZlciwgaWYgYExPQ0tfTk9fREVSRUZgIGlzIHNldCwgdGhlbiB0aGUgbG9ja2ZpbGUKKyAqIGlzIGNyZWF0ZWQgYnkgYWRkaW5nICIubG9jayIgdG8gdGhlIHBhdGggYXJndW1lbnQgaXRzZWxmLiBUaGlzCisgKiBvcHRpb24gaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHdoZW4gZGV0YWNoaW5nIGEgc3ltYm9saWMgcmVmZXJlbmNlLAorICogd2hpY2ggZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHJlYXNvbnMsIGNhbiBiZSBhIHN5bWJvbGljIGxpbmsKKyAqIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHJlZmVycmVkLXRvLXJlZmVyZW5jZS4KKyAqLworI2RlZmluZSBMT0NLX05PX0RFUkVGIDIKKworLyoKKyAqIEF0dGVtcHQgdG8gY3JlYXRlIGEgbG9ja2ZpbGUgZm9yIHRoZSBmaWxlIGF0IGBwYXRoYCBhbmQgcmV0dXJuIGEKKyAqIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGluZyB0byBpdCwgb3IgLTEgb24gZXJyb3IuIElmIHRoZSBmaWxlIGlzCisgKiBjdXJyZW50bHkgbG9ja2VkLCByZXRyeSB3aXRoIHF1YWRyYXRpYyBiYWNrb2ZmIGZvciBhdCBsZWFzdAorICogdGltZW91dF9tcyBtaWxsaXNlY29uZHMuIElmIHRpbWVvdXRfbXMgaXMgMCwgdHJ5IGV4YWN0bHkgb25jZTsgaWYKKyAqIHRpbWVvdXRfbXMgaXMgLTEsIHJldHJ5IGluZGVmaW5pdGVseS4gVGhlIGZsYWdzIGFyZ3VtZW50IGFuZCBlcnJvcgorICogaGFuZGxpbmcgYXJlIGRlc2NyaWJlZCBhYm92ZS4KKyAqLworaW50IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dCgKKwkJc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsCisJCWludCBmbGFncywgbG9uZyB0aW1lb3V0X21zKTsKKworLyoKKyAqIEF0dGVtcHQgdG8gY3JlYXRlIGEgbG9ja2ZpbGUgZm9yIHRoZSBmaWxlIGF0IGBwYXRoYCBhbmQgcmV0dXJuIGEKKyAqIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGluZyB0byBpdCwgb3IgLTEgb24gZXJyb3IuIFRoZSBmbGFncworICogYXJndW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGFyZSBkZXNjcmliZWQgYWJvdmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoCisJCXN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoLAorCQlpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dChsaywgcGF0aCwgZmxhZ3MsIDApOworfQorCisvKgorICogUmV0dXJuIGEgbm9uemVybyB2YWx1ZSBpZmYgYGxrYCBpcyBjdXJyZW50bHkgbG9ja2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19sb2NrX2ZpbGVfbG9ja2VkKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCXJldHVybiBpc190ZW1wZmlsZV9hY3RpdmUobGstPnRlbXBmaWxlKTsKK30KKworLyoKKyAqIEFwcGVuZCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHRvIGBidWZgIGZvbGxvd2luZyB0aGUgZmFpbHVyZQorICogb2YgYGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKWAgdG8gbG9jayBgcGF0aGAuIGBlcnJgIHNob3VsZCBiZSB0aGUKKyAqIGBlcnJub2Agc2V0IGJ5IHRoZSBmYWlsaW5nIGNhbGwuCisgKi8KK3ZvaWQgdW5hYmxlX3RvX2xvY2tfbWVzc2FnZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZXJyLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmJ1Zik7CisKKy8qCisgKiBFbWl0IGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UgYW5kIGBkaWUoKWAgZm9sbG93aW5nIHRoZSBmYWlsdXJlCisgKiBvZiBgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgpYCB0byBsb2NrIGBwYXRoYC4gYGVycmAgc2hvdWxkIGJlIHRoZQorICogYGVycm5vYCBzZXQgYnkgdGhlIGZhaWxpbmcKKyAqIGNhbGwuCisgKi8KK05PUkVUVVJOIHZvaWQgdW5hYmxlX3RvX2xvY2tfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpOworCisvKgorICogQXNzb2NpYXRlIGEgc3RkaW8gc3RyZWFtIHdpdGggdGhlIGxvY2tmaWxlICh3aGljaCBtdXN0IHN0aWxsIGJlCisgKiBvcGVuKS4gUmV0dXJuIGBOVUxMYCAoKndpdGhvdXQqIHJvbGxpbmcgYmFjayB0aGUgbG9ja2ZpbGUpIG9uCisgKiBlcnJvci4gVGhlIHN0cmVhbSBpcyBjbG9zZWQgYXV0b21hdGljYWxseSB3aGVuCisgKiBgY2xvc2VfbG9ja19maWxlX2dlbnRseSgpYCBpcyBjYWxsZWQgb3Igd2hlbiB0aGUgZmlsZSBpcyBjb21taXR0ZWQgb3IKKyAqIHJvbGxlZCBiYWNrLgorICovCitzdGF0aWMgaW5saW5lIEZJTEUgKmZkb3Blbl9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJcmV0dXJuIGZkb3Blbl90ZW1wZmlsZShsay0+dGVtcGZpbGUsIG1vZGUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBsb2NrZmlsZS4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYQorICogZmllbGQgd2l0aGluIHRoZSBsb2NrX2ZpbGUgb2JqZWN0IGFuZCBzaG91bGQgbm90IGJlIGZyZWVkLgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF9sb2NrX2ZpbGVfcGF0aChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gZ2V0X3RlbXBmaWxlX3BhdGgobGstPnRlbXBmaWxlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2xvY2tfZmlsZV9mZChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gZ2V0X3RlbXBmaWxlX2ZkKGxrLT50ZW1wZmlsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRklMRSAqZ2V0X2xvY2tfZmlsZV9mcChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gZ2V0X3RlbXBmaWxlX2ZwKGxrLT50ZW1wZmlsZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHBhdGggb2YgdGhlIGZpbGUgdGhhdCBpcyBsb2NrZWQgYnkgdGhlIHNwZWNpZmllZAorICogbG9ja19maWxlIG9iamVjdC4gVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlIG1lbW9yeS4KKyAqLworY2hhciAqZ2V0X2xvY2tlZF9maWxlX3BhdGgoc3RydWN0IGxvY2tfZmlsZSAqbGspOworCisvKgorICogSWYgdGhlIGxvY2tmaWxlIGlzIHN0aWxsIG9wZW4sIGNsb3NlIGl0IChhbmQgdGhlIGZpbGUgcG9pbnRlciBpZiBpdAorICogaGFzIGJlZW4gb3BlbmVkIHVzaW5nIGBmZG9wZW5fbG9ja19maWxlKClgKSB3aXRob3V0IHJlbmFtaW5nIHRoZQorICogbG9ja2ZpbGUgb3ZlciB0aGUgZmlsZSBiZWluZyBsb2NrZWQuIFJldHVybiAwIHVwb24gc3VjY2Vzcy4gT24KKyAqIGZhaWx1cmUgdG8gYGNsb3NlKDIpYCwgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgKHRoZSBsb2NrZmlsZSBpcyBub3QKKyAqIHJvbGxlZCBiYWNrKS4gVXN1YWxseSBgY29tbWl0X2xvY2tfZmlsZSgpYCwgYGNvbW1pdF9sb2NrX2ZpbGVfdG8oKWAsCisgKiBvciBgcm9sbGJhY2tfbG9ja19maWxlKClgIHNob3VsZCBldmVudHVhbGx5IGJlIGNhbGxlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2xvc2VfbG9ja19maWxlX2dlbnRseShzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gY2xvc2VfdGVtcGZpbGVfZ2VudGx5KGxrLT50ZW1wZmlsZSk7Cit9CisKKy8qCisgKiBSZS1vcGVuIGEgbG9ja2ZpbGUgdGhhdCBoYXMgYmVlbiBjbG9zZWQgdXNpbmcgYGNsb3NlX2xvY2tfZmlsZV9nZW50bHkoKWAKKyAqIGJ1dCBub3QgeWV0IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQKKyAqIGEgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBsaWtlIHRoZSBmb2xsb3dpbmc6CisgKgorICogKiBMb2NrIGZpbGUuCisgKgorICogKiBXcml0ZSBuZXcgY29udGVudHMgdG8gbG9ja2ZpbGUsIHRoZW4gYGNsb3NlX2xvY2tfZmlsZV9nZW50bHkoKWAgdG8KKyAqICAgY2F1c2UgdGhlIGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gZGlzay4KKyAqCisgKiAqIFBhc3MgdGhlIG5hbWUgb2YgdGhlIGxvY2tmaWxlIHRvIGFub3RoZXIgcHJvZ3JhbSB0byBhbGxvdyBpdCAoYW5kCisgKiAgIG5vYm9keSBlbHNlKSB0byBpbnNwZWN0IHRoZSBjb250ZW50cyB5b3Ugd3JvdGUsIHdoaWxlIHN0aWxsCisgKiAgIGhvbGRpbmcgdGhlIGxvY2sgeW91cnNlbGYuCisgKgorICogKiBgcmVvcGVuX2xvY2tfZmlsZSgpYCB0byByZW9wZW4gdGhlIGxvY2tmaWxlLCB0cnVuY2F0aW5nIHRoZSBleGlzdGluZworICogICBjb250ZW50cy4gV3JpdGUgb3V0IHRoZSBuZXcgY29udGVudHMuCisgKgorICogKiBgY29tbWl0X2xvY2tfZmlsZSgpYCB0byBtYWtlIHRoZSBmaW5hbCB2ZXJzaW9uIHBlcm1hbmVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVvcGVuX2xvY2tfZmlsZShzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gcmVvcGVuX3RlbXBmaWxlKGxrLT50ZW1wZmlsZSk7Cit9CisKKy8qCisgKiBDb21taXQgdGhlIGNoYW5nZSByZXByZXNlbnRlZCBieSBgbGtgOiBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgKiBhbmQvb3IgZmlsZSBwb2ludGVyIGlmIHRoZXkgYXJlIHN0aWxsIG9wZW4gYW5kIHJlbmFtZSB0aGUgbG9ja2ZpbGUKKyAqIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbi4gUmV0dXJuIDAgdXBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlLCByb2xsCisgKiBiYWNrIHRoZSBsb2NrIGZpbGUgYW5kIHJldHVybiAtMSwgd2l0aCBgZXJybm9gIHNldCB0byB0aGUgdmFsdWUKKyAqIGZyb20gdGhlIGZhaWxpbmcgY2FsbCB0byBgY2xvc2UoMilgIG9yIGByZW5hbWUoMilgLiBJdCBpcyBhIGJ1ZyB0bworICogY2FsbCBgY29tbWl0X2xvY2tfZmlsZSgpYCBmb3IgYSBgbG9ja19maWxlYCBvYmplY3QgdGhhdCBpcyBub3QKKyAqIGN1cnJlbnRseSBsb2NrZWQuCisgKi8KK2ludCBjb21taXRfbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKTsKKworLyoKKyAqIExpa2UgYGNvbW1pdF9sb2NrX2ZpbGUoKWAsIGJ1dCByZW5hbWUgdGhlIGxvY2tmaWxlIHRvIHRoZSBwcm92aWRlZAorICogYHBhdGhgLiBgcGF0aGAgbXVzdCBiZSBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtIGFzIHRoZSBsb2NrIGZpbGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNvbW1pdF9sb2NrX2ZpbGVfdG8oc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHJlbmFtZV90ZW1wZmlsZSgmbGstPnRlbXBmaWxlLCBwYXRoKTsKK30KKworLyoKKyAqIFJvbGwgYmFjayBgbGtgOiBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZC9vciBmaWxlIHBvaW50ZXIgYW5kCisgKiByZW1vdmUgdGhlIGxvY2tmaWxlLiBJdCBpcyBhIE5PT1AgdG8gY2FsbCBgcm9sbGJhY2tfbG9ja19maWxlKClgCisgKiBmb3IgYSBgbG9ja19maWxlYCBvYmplY3QgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbW1pdHRlZCBvciByb2xsZWQKKyAqIGJhY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByb2xsYmFja19sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGspCit7CisJZGVsZXRlX3RlbXBmaWxlKCZsay0+dGVtcGZpbGUpOworfQorCisjZW5kaWYgLyogTE9DS0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxMjc0MgotLS0gL2Rldi9udWxsCisrKyBiL2xvZy10cmVlLmMKQEAgLTAsMCArMSw5MzkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAiaW50ZXJkaWZmLmgiCisjaW5jbHVkZSAicmFuZ2UtZGlmZi5oIgorCitzdGF0aWMgc3RydWN0IGRlY29yYXRpb24gbmFtZV9kZWNvcmF0aW9uID0geyAib2JqZWN0IG5hbWVzIiB9Oworc3RhdGljIGludCBkZWNvcmF0aW9uX2xvYWRlZDsKK3N0YXRpYyBpbnQgZGVjb3JhdGlvbl9mbGFnczsKKworc3RhdGljIGNoYXIgZGVjb3JhdGlvbl9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfQk9MRF9HUkVFTiwJLyogUkVGX0xPQ0FMICovCisJR0lUX0NPTE9SX0JPTERfUkVELAkvKiBSRUZfUkVNT1RFICovCisJR0lUX0NPTE9SX0JPTERfWUVMTE9XLAkvKiBSRUZfVEFHICovCisJR0lUX0NPTE9SX0JPTERfTUFHRU5UQSwJLyogUkVGX1NUQVNIICovCisJR0lUX0NPTE9SX0JPTERfQ1lBTiwJLyogUkVGX0hFQUQgKi8KKwlHSVRfQ09MT1JfQk9MRF9CTFVFLAkvKiBHUkFGVEVEICovCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29sb3JfZGVjb3JhdGVfc2xvdHNbXSA9IHsKKwlbREVDT1JBVElPTl9SRUZfTE9DQUxdCT0gImJyYW5jaCIsCisJW0RFQ09SQVRJT05fUkVGX1JFTU9URV0gPSAicmVtb3RlQnJhbmNoIiwKKwlbREVDT1JBVElPTl9SRUZfVEFHXQk9ICJ0YWciLAorCVtERUNPUkFUSU9OX1JFRl9TVEFTSF0JPSAic3Rhc2giLAorCVtERUNPUkFUSU9OX1JFRl9IRUFEXQk9ICJIRUFEIiwKKwlbREVDT1JBVElPTl9HUkFGVEVEXQk9ICJncmFmdGVkIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZWNvcmF0ZV9nZXRfY29sb3IoaW50IGRlY29yYXRlX3VzZV9jb2xvciwgZW51bSBkZWNvcmF0aW9uX3R5cGUgaXgpCit7CisJaWYgKHdhbnRfY29sb3IoZGVjb3JhdGVfdXNlX2NvbG9yKSkKKwkJcmV0dXJuIGRlY29yYXRpb25fY29sb3JzW2l4XTsKKwlyZXR1cm4gIiI7Cit9CisKK2RlZmluZV9saXN0X2NvbmZpZ19hcnJheShjb2xvcl9kZWNvcmF0ZV9zbG90cyk7CisKK2ludCBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICpzbG90X25hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBzbG90ID0gTE9PS1VQX0NPTkZJRyhjb2xvcl9kZWNvcmF0ZV9zbG90cywgc2xvdF9uYW1lKTsKKwlpZiAoc2xvdCA8IDApCisJCXJldHVybiAwOworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCXJldHVybiBjb2xvcl9wYXJzZSh2YWx1ZSwgZGVjb3JhdGlvbl9jb2xvcnNbc2xvdF0pOworfQorCisvKgorICogbG9nLXRyZWUuYyB1c2VzIERJRkZfT1BUX1RTVCBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0byB1c2UgY29sb3IKKyAqIGZvciBzaG93aW5nIHRoZSBjb21taXQgc2hhMSwgdXNlIHRoZSBzYW1lIGNoZWNrIGZvciAtLWRlY29yYXRlCisgKi8KKyNkZWZpbmUgZGVjb3JhdGVfZ2V0X2NvbG9yX29wdChvLCBpeCkgXAorCWRlY29yYXRlX2dldF9jb2xvcigobyktPnVzZV9jb2xvciwgaXgpCisKK3ZvaWQgYWRkX25hbWVfZGVjb3JhdGlvbihlbnVtIGRlY29yYXRpb25fdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqcmVzOworCUZMRVhfQUxMT0NfU1RSKHJlcywgbmFtZSwgbmFtZSk7CisJcmVzLT50eXBlID0gdHlwZTsKKwlyZXMtPm5leHQgPSBhZGRfZGVjb3JhdGlvbigmbmFtZV9kZWNvcmF0aW9uLCBvYmosIHJlcyk7Cit9CisKK2NvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmdldF9uYW1lX2RlY29yYXRpb24oY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWxvYWRfcmVmX2RlY29yYXRpb25zKE5VTEwsIERFQ09SQVRFX1NIT1JUX1JFRlMpOworCXJldHVybiBsb29rdXBfZGVjb3JhdGlvbigmbmFtZV9kZWNvcmF0aW9uLCBvYmopOworfQorCitzdGF0aWMgaW50IGFkZF9yZWZfZGVjb3JhdGlvbihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWVudW0gZGVjb3JhdGlvbl90eXBlIHR5cGUgPSBERUNPUkFUSU9OX05PTkU7CisJc3RydWN0IGRlY29yYXRpb25fZmlsdGVyICpmaWx0ZXIgPSAoc3RydWN0IGRlY29yYXRpb25fZmlsdGVyICopY2JfZGF0YTsKKworCWlmIChmaWx0ZXIgJiYgIXJlZl9maWx0ZXJfbWF0Y2gocmVmbmFtZSwKKwkJCSAgICAgIGZpbHRlci0+aW5jbHVkZV9yZWZfcGF0dGVybiwKKwkJCSAgICAgIGZpbHRlci0+ZXhjbHVkZV9yZWZfcGF0dGVybikpCisJCXJldHVybiAwOworCisJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsIGdpdF9yZXBsYWNlX3JlZl9iYXNlKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9yaWdpbmFsX29pZDsKKwkJaWYgKCFyZWFkX3JlcGxhY2VfcmVmcykKKwkJCXJldHVybiAwOworCQlpZiAoZ2V0X29pZF9oZXgocmVmbmFtZSArIHN0cmxlbihnaXRfcmVwbGFjZV9yZWZfYmFzZSksCisJCQkJJm9yaWdpbmFsX29pZCkpIHsKKwkJCXdhcm5pbmcoImludmFsaWQgcmVwbGFjZSByZWYgJXMiLCByZWZuYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisJCW9iaiA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9yaWdpbmFsX29pZCk7CisJCWlmIChvYmopCisJCQlhZGRfbmFtZV9kZWNvcmF0aW9uKERFQ09SQVRJT05fR1JBRlRFRCwgInJlcGxhY2VkIiwgb2JqKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCWlmICghb2JqKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX0xPQ0FMOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpCisJCXR5cGUgPSBERUNPUkFUSU9OX1JFRl9SRU1PVEU7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX1RBRzsKKwllbHNlIGlmICghc3RyY21wKHJlZm5hbWUsICJyZWZzL3N0YXNoIikpCisJCXR5cGUgPSBERUNPUkFUSU9OX1JFRl9TVEFTSDsKKwllbHNlIGlmICghc3RyY21wKHJlZm5hbWUsICJIRUFEIikpCisJCXR5cGUgPSBERUNPUkFUSU9OX1JFRl9IRUFEOworCisJYWRkX25hbWVfZGVjb3JhdGlvbih0eXBlLCByZWZuYW1lLCBvYmopOworCXdoaWxlIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQlvYmogPSAoKHN0cnVjdCB0YWcgKilvYmopLT50YWdnZWQ7CisJCWlmICghb2JqKQorCQkJYnJlYWs7CisJCWlmICghb2JqLT5wYXJzZWQpCisJCQlwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvYmotPm9pZCk7CisJCWFkZF9uYW1lX2RlY29yYXRpb24oREVDT1JBVElPTl9SRUZfVEFHLCByZWZuYW1lLCBvYmopOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfZ3JhZnRfZGVjb3JhdGlvbihjb25zdCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmZ3JhZnQtPm9pZCk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiAwOworCWFkZF9uYW1lX2RlY29yYXRpb24oREVDT1JBVElPTl9HUkFGVEVELCAiZ3JhZnRlZCIsICZjb21taXQtPm9iamVjdCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbG9hZF9yZWZfZGVjb3JhdGlvbnMoc3RydWN0IGRlY29yYXRpb25fZmlsdGVyICpmaWx0ZXIsIGludCBmbGFncykKK3sKKwlpZiAoIWRlY29yYXRpb25fbG9hZGVkKSB7CisJCWlmIChmaWx0ZXIpIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBmaWx0ZXItPmV4Y2x1ZGVfcmVmX3BhdHRlcm4pIHsKKwkJCQlub3JtYWxpemVfZ2xvYl9yZWYoaXRlbSwgTlVMTCwgaXRlbS0+c3RyaW5nKTsKKwkJCX0KKwkJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgZmlsdGVyLT5pbmNsdWRlX3JlZl9wYXR0ZXJuKSB7CisJCQkJbm9ybWFsaXplX2dsb2JfcmVmKGl0ZW0sIE5VTEwsIGl0ZW0tPnN0cmluZyk7CisJCQl9CisJCX0KKwkJZGVjb3JhdGlvbl9sb2FkZWQgPSAxOworCQlkZWNvcmF0aW9uX2ZsYWdzID0gZmxhZ3M7CisJCWZvcl9lYWNoX3JlZihhZGRfcmVmX2RlY29yYXRpb24sIGZpbHRlcik7CisJCWhlYWRfcmVmKGFkZF9yZWZfZGVjb3JhdGlvbiwgZmlsdGVyKTsKKwkJZm9yX2VhY2hfY29tbWl0X2dyYWZ0KGFkZF9ncmFmdF9kZWNvcmF0aW9uLCBmaWx0ZXIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGFiYnJldiwgRklMRSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwIDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcC0+aXRlbTsKKwkJZnByaW50ZihmaWxlLCAiICVzIiwgZmluZF91bmlxdWVfYWJicmV2KCZwYXJlbnQtPm9iamVjdC5vaWQsIGFiYnJldikpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19jaGlsZHJlbihzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgYWJicmV2KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZvcHQtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOworCWZvciAoIDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIiAlcyIsIGZpbmRfdW5pcXVlX2FiYnJldigmcC0+aXRlbS0+b2JqZWN0Lm9pZCwgYWJicmV2KSk7CisJfQorfQorCisvKgorICogRG8gd2UgaGF2ZSBIRUFEIGluIHRoZSBvdXRwdXQsIGFuZCBhbHNvIHRoZSBicmFuY2ggaXQgcG9pbnRzIGF0PworICogSWYgc28sIGZpbmQgdGhhdCBkZWNvcmF0aW9uIGVudHJ5IGZvciB0aGF0IGN1cnJlbnQgYnJhbmNoLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqY3VycmVudF9wb2ludGVkX2J5X0hFQUQoY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqZGVjb3JhdGlvbikKK3sKKwljb25zdCBzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpsaXN0LCAqaGVhZCA9IE5VTEw7CisJY29uc3QgY2hhciAqYnJhbmNoX25hbWUgPSBOVUxMOworCWludCBycnVfZmxhZ3M7CisKKwkvKiBGaXJzdCBmaW5kIEhFQUQgKi8KKwlmb3IgKGxpc3QgPSBkZWNvcmF0aW9uOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJaWYgKGxpc3QtPnR5cGUgPT0gREVDT1JBVElPTl9SRUZfSEVBRCkgeworCQkJaGVhZCA9IGxpc3Q7CisJCQlicmVhazsKKwkJfQorCWlmICghaGVhZCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBOb3cgcmVzb2x2ZSBhbmQgZmluZCB0aGUgbWF0Y2hpbmcgY3VycmVudCBicmFuY2ggKi8KKwlicmFuY2hfbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsICZycnVfZmxhZ3MpOworCWlmICghYnJhbmNoX25hbWUgfHwgIShycnVfZmxhZ3MgJiBSRUZfSVNTWU1SRUYpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghc3RhcnRzX3dpdGgoYnJhbmNoX25hbWUsICJyZWZzLyIpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIE9LLCBkbyB3ZSBoYXZlIHRoYXQgcmVmIGluIHRoZSBsaXN0PyAqLworCWZvciAobGlzdCA9IGRlY29yYXRpb247IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQlpZiAoKGxpc3QtPnR5cGUgPT0gREVDT1JBVElPTl9SRUZfTE9DQUwpICYmCisJCSAgICAhc3RyY21wKGJyYW5jaF9uYW1lLCBsaXN0LT5uYW1lKSkgeworCQkJcmV0dXJuIGxpc3Q7CisJCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzaG93X25hbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmRlY29yYXRpb24pCit7CisJaWYgKGRlY29yYXRpb25fZmxhZ3MgPT0gREVDT1JBVEVfU0hPUlRfUkVGUykKKwkJc3RyYnVmX2FkZHN0cihzYiwgcHJldHRpZnlfcmVmbmFtZShkZWNvcmF0aW9uLT5uYW1lKSk7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKHNiLCBkZWNvcmF0aW9uLT5uYW1lKTsKK30KKworLyoKKyAqIFRoZSBjYWxsZXIgbWFrZXMgc3VyZSB0aGVyZSBpcyBubyBmdW5ueSBjb2xvciBiZWZvcmUgY2FsbGluZy4KKyAqIGZvcm1hdF9kZWNvcmF0aW9uc19leHRlbmRlZCBtYWtlcyBzdXJlIHRoZSBzYW1lIGFmdGVyIHJldHVybi4KKyAqLwordm9pZCBmb3JtYXRfZGVjb3JhdGlvbnNfZXh0ZW5kZWQoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQlpbnQgdXNlX2NvbG9yLAorCQkJY29uc3QgY2hhciAqcHJlZml4LAorCQkJY29uc3QgY2hhciAqc2VwYXJhdG9yLAorCQkJY29uc3QgY2hhciAqc3VmZml4KQoreworCWNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmRlY29yYXRpb247CisJY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqY3VycmVudF9hbmRfSEVBRDsKKwljb25zdCBjaGFyICpjb2xvcl9jb21taXQgPQorCQlkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfQ09NTUlUKTsKKwljb25zdCBjaGFyICpjb2xvcl9yZXNldCA9CisJCWRlY29yYXRlX2dldF9jb2xvcih1c2VfY29sb3IsIERFQ09SQVRJT05fTk9ORSk7CisKKwlkZWNvcmF0aW9uID0gZ2V0X25hbWVfZGVjb3JhdGlvbigmY29tbWl0LT5vYmplY3QpOworCWlmICghZGVjb3JhdGlvbikKKwkJcmV0dXJuOworCisJY3VycmVudF9hbmRfSEVBRCA9IGN1cnJlbnRfcG9pbnRlZF9ieV9IRUFEKGRlY29yYXRpb24pOworCXdoaWxlIChkZWNvcmF0aW9uKSB7CisJCS8qCisJCSAqIFdoZW4gYm90aCBjdXJyZW50IGFuZCBIRUFEIGFyZSB0aGVyZSwgb25seQorCQkgKiBzaG93IEhFQUQtPmN1cnJlbnQgd2hlcmUgSEVBRCB3b3VsZCBoYXZlCisJCSAqIGFwcGVhcmVkLCBza2lwcGluZyB0aGUgZW50cnkgZm9yIGN1cnJlbnQuCisJCSAqLworCQlpZiAoZGVjb3JhdGlvbiAhPSBjdXJyZW50X2FuZF9IRUFEKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9jb21taXQpOworCQkJc3RyYnVmX2FkZHN0cihzYiwgcHJlZml4KTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yX3Jlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGRlY29yYXRlX2dldF9jb2xvcih1c2VfY29sb3IsIGRlY29yYXRpb24tPnR5cGUpKTsKKwkJCWlmIChkZWNvcmF0aW9uLT50eXBlID09IERFQ09SQVRJT05fUkVGX1RBRykKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAidGFnOiAiKTsKKworCQkJc2hvd19uYW1lKHNiLCBkZWNvcmF0aW9uKTsKKworCQkJaWYgKGN1cnJlbnRfYW5kX0hFQUQgJiYKKwkJCSAgICBkZWNvcmF0aW9uLT50eXBlID09IERFQ09SQVRJT05fUkVGX0hFQUQpIHsKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAiIC0+ICIpOworCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yX3Jlc2V0KTsKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCBkZWNvcmF0ZV9nZXRfY29sb3IodXNlX2NvbG9yLCBjdXJyZW50X2FuZF9IRUFELT50eXBlKSk7CisJCQkJc2hvd19uYW1lKHNiLCBjdXJyZW50X2FuZF9IRUFEKTsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yX3Jlc2V0KTsKKworCQkJcHJlZml4ID0gc2VwYXJhdG9yOworCQl9CisJCWRlY29yYXRpb24gPSBkZWNvcmF0aW9uLT5uZXh0OworCX0KKwlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9jb21taXQpOworCXN0cmJ1Zl9hZGRzdHIoc2IsIHN1ZmZpeCk7CisJc3RyYnVmX2FkZHN0cihzYiwgY29sb3JfcmVzZXQpOworfQorCit2b2lkIHNob3dfZGVjb3JhdGlvbnMoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAob3B0LT5zb3VyY2VzKSB7CisJCWNoYXIgKipzbG90ID0gcmV2aXNpb25fc291cmNlc19wZWVrKG9wdC0+c291cmNlcywgY29tbWl0KTsKKworCQlpZiAoc2xvdCAmJiAqc2xvdCkKKwkJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICJcdCVzIiwgKnNsb3QpOworCX0KKwlpZiAoIW9wdC0+c2hvd19kZWNvcmF0aW9ucykKKwkJcmV0dXJuOworCWZvcm1hdF9kZWNvcmF0aW9ucygmc2IsIGNvbW1pdCwgb3B0LT5kaWZmb3B0LnVzZV9jb2xvcik7CisJZnB1dHMoc2IuYnVmLCBvcHQtPmRpZmZvcHQuZmlsZSk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkaWdpdHNfaW5fbnVtYmVyKHVuc2lnbmVkIGludCBudW1iZXIpCit7CisJdW5zaWduZWQgaW50IGkgPSAxMCwgcmVzdWx0ID0gMTsKKwl3aGlsZSAoaSA8PSBudW1iZXIpIHsKKwkJaSAqPSAxMDsKKwkJcmVzdWx0Kys7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgZm10X291dHB1dF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKmZpbGVuYW1lLAorCQkJY29uc3QgY2hhciAqc3ViamVjdCwKKwkJCXN0cnVjdCByZXZfaW5mbyAqaW5mbykKK3sKKwljb25zdCBjaGFyICpzdWZmaXggPSBpbmZvLT5wYXRjaF9zdWZmaXg7CisJaW50IG5yID0gaW5mby0+bnI7CisJaW50IHN0YXJ0X2xlbiA9IGZpbGVuYW1lLT5sZW47CisJaW50IG1heF9sZW4gPSBzdGFydF9sZW4gKyBGT1JNQVRfUEFUQ0hfTkFNRV9NQVggLSAoc3RybGVuKHN1ZmZpeCkgKyAxKTsKKworCWlmICgwIDwgaW5mby0+cmVyb2xsX2NvdW50KQorCQlzdHJidWZfYWRkZihmaWxlbmFtZSwgInYlZC0iLCBpbmZvLT5yZXJvbGxfY291bnQpOworCXN0cmJ1Zl9hZGRmKGZpbGVuYW1lLCAiJTA0ZC0lcyIsIG5yLCBzdWJqZWN0KTsKKworCWlmIChtYXhfbGVuIDwgZmlsZW5hbWUtPmxlbikKKwkJc3RyYnVmX3NldGxlbihmaWxlbmFtZSwgbWF4X2xlbik7CisJc3RyYnVmX2FkZHN0cihmaWxlbmFtZSwgc3VmZml4KTsKK30KKwordm9pZCBmbXRfb3V0cHV0X2NvbW1pdChzdHJ1Y3Qgc3RyYnVmICpmaWxlbmFtZSwKKwkJICAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJICAgICAgIHN0cnVjdCByZXZfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCXN0cnVjdCBzdHJidWYgc3ViamVjdCA9IFNUUkJVRl9JTklUOworCisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiVmIiwgJnN1YmplY3QsICZjdHgpOworCWZtdF9vdXRwdXRfc3ViamVjdChmaWxlbmFtZSwgc3ViamVjdC5idWYsIGluZm8pOworCXN0cmJ1Zl9yZWxlYXNlKCZzdWJqZWN0KTsKK30KKwordm9pZCBmbXRfb3V0cHV0X2VtYWlsX3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCByZXZfaW5mbyAqb3B0KQoreworCWlmIChvcHQtPnRvdGFsID4gMCkgeworCQlzdHJidWZfYWRkZihzYiwgIlN1YmplY3Q6IFslcyVzJTAqZC8lZF0gIiwKKwkJCSAgICBvcHQtPnN1YmplY3RfcHJlZml4LAorCQkJICAgICpvcHQtPnN1YmplY3RfcHJlZml4ID8gIiAiIDogIiIsCisJCQkgICAgZGlnaXRzX2luX251bWJlcihvcHQtPnRvdGFsKSwKKwkJCSAgICBvcHQtPm5yLCBvcHQtPnRvdGFsKTsKKwl9IGVsc2UgaWYgKG9wdC0+dG90YWwgPT0gMCAmJiBvcHQtPnN1YmplY3RfcHJlZml4ICYmICpvcHQtPnN1YmplY3RfcHJlZml4KSB7CisJCXN0cmJ1Zl9hZGRmKHNiLCAiU3ViamVjdDogWyVzXSAiLAorCQkJICAgIG9wdC0+c3ViamVjdF9wcmVmaXgpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsICJTdWJqZWN0OiAiKTsKKwl9Cit9CisKK3ZvaWQgbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgY29uc3QgY2hhciAqKmV4dHJhX2hlYWRlcnNfcCwKKwkJCSAgICAgaW50ICpuZWVkXzhiaXRfY3RlX3AsCisJCQkgICAgIGludCBtYXliZV9tdWx0aXBhcnQpCit7CisJY29uc3QgY2hhciAqZXh0cmFfaGVhZGVycyA9IG9wdC0+ZXh0cmFfaGVhZGVyczsKKwljb25zdCBjaGFyICpuYW1lID0gb2lkX3RvX2hleChvcHQtPnplcm9fY29tbWl0ID8KKwkJCQkgICAgICAmbnVsbF9vaWQgOiAmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCSpuZWVkXzhiaXRfY3RlX3AgPSAwOyAvKiB1bmtub3duICovCisKKwlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiRnJvbSAlcyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDFcbiIsIG5hbWUpOworCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwlpZiAob3B0LT5tZXNzYWdlX2lkKSB7CisJCWZwcmludGYob3B0LT5kaWZmb3B0LmZpbGUsICJNZXNzYWdlLUlkOiA8JXM+XG4iLCBvcHQtPm1lc3NhZ2VfaWQpOworCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJfQorCWlmIChvcHQtPnJlZl9tZXNzYWdlX2lkcyAmJiBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+bnIgPiAwKSB7CisJCWludCBpLCBuOworCQluID0gb3B0LT5yZWZfbWVzc2FnZV9pZHMtPm5yOworCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiSW4tUmVwbHktVG86IDwlcz5cbiIsIG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5pdGVtc1tuLTFdLnN0cmluZyk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiJXM8JXM+XG4iLCAoaSA+IDAgPyAiXHQiIDogIlJlZmVyZW5jZXM6ICIpLAorCQkJICAgICAgIG9wdC0+cmVmX21lc3NhZ2VfaWRzLT5pdGVtc1tpXS5zdHJpbmcpOworCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJfQorCWlmIChvcHQtPm1pbWVfYm91bmRhcnkgJiYgbWF5YmVfbXVsdGlwYXJ0KSB7CisJCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHN1YmplY3RfYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIGZpbGVuYW1lID0gIFNUUkJVRl9JTklUOworCQkqbmVlZF84Yml0X2N0ZV9wID0gLTE7IC8qIE5FVkVSICovCisKKwkJc3RyYnVmX3Jlc2V0KCZzdWJqZWN0X2J1ZmZlcik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmZmVyKTsKKworCQlzdHJidWZfYWRkZigmc3ViamVjdF9idWZmZXIsCisJCQkgIiVzIgorCQkJICJNSU1FLVZlcnNpb246IDEuMFxuIgorCQkJICJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsiCisJCQkgIiBib3VuZGFyeT1cIiVzJXNcIlxuIgorCQkJICJcbiIKKwkJCSAiVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FICIKKwkJCSAiZm9ybWF0LlxuIgorCQkJICItLSVzJXNcbiIKKwkJCSAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyAiCisJCQkgImNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZFxuIgorCQkJICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG5cbiIsCisJCQkgZXh0cmFfaGVhZGVycyA/IGV4dHJhX2hlYWRlcnMgOiAiIiwKKwkJCSBtaW1lX2JvdW5kYXJ5X2xlYWRlciwgb3B0LT5taW1lX2JvdW5kYXJ5LAorCQkJIG1pbWVfYm91bmRhcnlfbGVhZGVyLCBvcHQtPm1pbWVfYm91bmRhcnkpOworCQlleHRyYV9oZWFkZXJzID0gc3ViamVjdF9idWZmZXIuYnVmOworCisJCWlmIChvcHQtPm51bWJlcmVkX2ZpbGVzKQorCQkJc3RyYnVmX2FkZGYoJmZpbGVuYW1lLCAiJWQiLCBvcHQtPm5yKTsKKwkJZWxzZQorCQkJZm10X291dHB1dF9jb21taXQoJmZpbGVuYW1lLCBjb21taXQsIG9wdCk7CisJCXN0cmJ1Zl9hZGRmKCZidWZmZXIsCisJCQkgIlxuLS0lcyVzXG4iCisJCQkgIkNvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyIKKwkJCSAiIG5hbWU9XCIlc1wiXG4iCisJCQkgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKwkJCSAiQ29udGVudC1EaXNwb3NpdGlvbjogJXM7IgorCQkJICIgZmlsZW5hbWU9XCIlc1wiXG5cbiIsCisJCQkgbWltZV9ib3VuZGFyeV9sZWFkZXIsIG9wdC0+bWltZV9ib3VuZGFyeSwKKwkJCSBmaWxlbmFtZS5idWYsCisJCQkgb3B0LT5ub19pbmxpbmUgPyAiYXR0YWNobWVudCIgOiAiaW5saW5lIiwKKwkJCSBmaWxlbmFtZS5idWYpOworCQlvcHQtPmRpZmZvcHQuc3RhdF9zZXAgPSBidWZmZXIuYnVmOworCQlzdHJidWZfcmVsZWFzZSgmZmlsZW5hbWUpOworCX0KKwkqZXh0cmFfaGVhZGVyc19wID0gZXh0cmFfaGVhZGVyczsKK30KKworc3RhdGljIHZvaWQgc2hvd19zaWdfbGluZXMoc3RydWN0IHJldl9pbmZvICpvcHQsIGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmJvbCkKK3sKKwljb25zdCBjaGFyICpjb2xvciwgKnJlc2V0LCAqZW9sOworCisJY29sb3IgPSBkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwKKwkJCQkgICBzdGF0dXMgPyBESUZGX1dISVRFU1BBQ0UgOiBESUZGX0ZSQUdJTkZPKTsKKwlyZXNldCA9IGRpZmZfZ2V0X2NvbG9yX29wdCgmb3B0LT5kaWZmb3B0LCBESUZGX1JFU0VUKTsKKwl3aGlsZSAoKmJvbCkgeworCQllb2wgPSBzdHJjaHJudWwoYm9sLCAnXG4nKTsKKwkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgIiVzJS4qcyVzJXMiLCBjb2xvciwgKGludCkoZW9sIC0gYm9sKSwgYm9sLCByZXNldCwKKwkJICAgICAgICplb2wgPyAiXG4iIDogIiIpOworCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJCWJvbCA9ICgqZW9sKSA/IChlb2wgKyAxKSA6IGVvbDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc2lnbmF0dXJlKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXlsb2FkID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzaWduYXR1cmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGdwZ19vdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3RhdHVzOworCisJaWYgKHBhcnNlX3NpZ25lZF9jb21taXQoY29tbWl0LCAmcGF5bG9hZCwgJnNpZ25hdHVyZSkgPD0gMCkKKwkJZ290byBvdXQ7CisKKwlzdGF0dXMgPSB2ZXJpZnlfc2lnbmVkX2J1ZmZlcihwYXlsb2FkLmJ1ZiwgcGF5bG9hZC5sZW4sCisJCQkJICAgICAgc2lnbmF0dXJlLmJ1Ziwgc2lnbmF0dXJlLmxlbiwKKwkJCQkgICAgICAmZ3BnX291dHB1dCwgTlVMTCk7CisJaWYgKHN0YXR1cyAmJiAhZ3BnX291dHB1dC5sZW4pCisJCXN0cmJ1Zl9hZGRzdHIoJmdwZ19vdXRwdXQsICJObyBzaWduYXR1cmVcbiIpOworCisJc2hvd19zaWdfbGluZXMob3B0LCBzdGF0dXMsIGdwZ19vdXRwdXQuYnVmKTsKKworIG91dDoKKwlzdHJidWZfcmVsZWFzZSgmZ3BnX291dHB1dCk7CisJc3RyYnVmX3JlbGVhc2UoJnBheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzaWduYXR1cmUpOworfQorCitzdGF0aWMgaW50IHdoaWNoX3BhcmVudChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgbnRoOworCWNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJZm9yIChudGggPSAwLCBwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CisJCWlmIChvaWRlcSgmcGFyZW50LT5pdGVtLT5vYmplY3Qub2lkLCBvaWQpKQorCQkJcmV0dXJuIG50aDsKKwkJbnRoKys7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBpc19jb21tb25fbWVyZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXJldHVybiAoY29tbWl0LT5wYXJlbnRzCisJCSYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dAorCQkmJiAhY29tbWl0LT5wYXJlbnRzLT5uZXh0LT5uZXh0KTsKK30KKworc3RhdGljIGludCBzaG93X29uZV9tZXJnZXRhZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKm9wdCA9IChzdHJ1Y3QgcmV2X2luZm8gKilkYXRhOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCB0YWcgKnRhZzsKKwlzdHJ1Y3Qgc3RyYnVmIHZlcmlmeV9tZXNzYWdlOworCWludCBzdGF0dXMsIG50aDsKKwlzaXplX3QgcGF5bG9hZF9zaXplLCBncGdfbWVzc2FnZV9vZmZzZXQ7CisKKwloYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIGV4dHJhLT52YWx1ZSwgZXh0cmEtPmxlbiwKKwkJCSB0eXBlX25hbWUoT0JKX1RBRyksICZvaWQpOworCXRhZyA9IGxvb2t1cF90YWcodGhlX3JlcG9zaXRvcnksICZvaWQpOworCWlmICghdGFnKQorCQlyZXR1cm4gLTE7IC8qIGVycm9yIG1lc3NhZ2UgYWxyZWFkeSBnaXZlbiAqLworCisJc3RyYnVmX2luaXQoJnZlcmlmeV9tZXNzYWdlLCAyNTYpOworCWlmIChwYXJzZV90YWdfYnVmZmVyKHRoZV9yZXBvc2l0b3J5LCB0YWcsIGV4dHJhLT52YWx1ZSwgZXh0cmEtPmxlbikpCisJCXN0cmJ1Zl9hZGRzdHIoJnZlcmlmeV9tZXNzYWdlLCAibWFsZm9ybWVkIG1lcmdldGFnXG4iKTsKKwllbHNlIGlmIChpc19jb21tb25fbWVyZ2UoY29tbWl0KSAmJgorCQkgb2lkZXEoJnRhZy0+dGFnZ2VkLT5vaWQsCisJCSAgICAgICAmY29tbWl0LT5wYXJlbnRzLT5uZXh0LT5pdGVtLT5vYmplY3Qub2lkKSkKKwkJc3RyYnVmX2FkZGYoJnZlcmlmeV9tZXNzYWdlLAorCQkJICAgICJtZXJnZWQgdGFnICclcydcbiIsIHRhZy0+dGFnKTsKKwllbHNlIGlmICgobnRoID0gd2hpY2hfcGFyZW50KCZ0YWctPnRhZ2dlZC0+b2lkLCBjb21taXQpKSA8IDApCisJCXN0cmJ1Zl9hZGRmKCZ2ZXJpZnlfbWVzc2FnZSwgInRhZyAlcyBuYW1lcyBhIG5vbi1wYXJlbnQgJXNcbiIsCisJCQkJICAgIHRhZy0+dGFnLCBvaWRfdG9faGV4KCZ0YWctPnRhZ2dlZC0+b2lkKSk7CisJZWxzZQorCQlzdHJidWZfYWRkZigmdmVyaWZ5X21lc3NhZ2UsCisJCQkgICAgInBhcmVudCAjJWQsIHRhZ2dlZCAnJXMnXG4iLCBudGggKyAxLCB0YWctPnRhZyk7CisJZ3BnX21lc3NhZ2Vfb2Zmc2V0ID0gdmVyaWZ5X21lc3NhZ2UubGVuOworCisJcGF5bG9hZF9zaXplID0gcGFyc2Vfc2lnbmF0dXJlKGV4dHJhLT52YWx1ZSwgZXh0cmEtPmxlbik7CisJc3RhdHVzID0gLTE7CisJaWYgKGV4dHJhLT5sZW4gPiBwYXlsb2FkX3NpemUpIHsKKwkJLyogY291bGQgaGF2ZSBhIGdvb2Qgc2lnbmF0dXJlICovCisJCWlmICghdmVyaWZ5X3NpZ25lZF9idWZmZXIoZXh0cmEtPnZhbHVlLCBwYXlsb2FkX3NpemUsCisJCQkJCSAgZXh0cmEtPnZhbHVlICsgcGF5bG9hZF9zaXplLAorCQkJCQkgIGV4dHJhLT5sZW4gLSBwYXlsb2FkX3NpemUsCisJCQkJCSAgJnZlcmlmeV9tZXNzYWdlLCBOVUxMKSkKKwkJCXN0YXR1cyA9IDA7IC8qIGdvb2QgKi8KKwkJZWxzZSBpZiAodmVyaWZ5X21lc3NhZ2UubGVuIDw9IGdwZ19tZXNzYWdlX29mZnNldCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnZlcmlmeV9tZXNzYWdlLCAiTm8gc2lnbmF0dXJlXG4iKTsKKwkJLyogb3RoZXJ3aXNlIHdlIGNvdWxkbid0IHZlcmlmeSwgd2hpY2ggaXMgc2hvd24gYXMgYmFkICovCisJfQorCisJc2hvd19zaWdfbGluZXMob3B0LCBzdGF0dXMsIHZlcmlmeV9tZXNzYWdlLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnZlcmlmeV9tZXNzYWdlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X21lcmdldGFnKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcmV0dXJuIGZvcl9lYWNoX21lcmdldGFnKHNob3dfb25lX21lcmdldGFnLCBjb21taXQsIG9wdCk7Cit9CisKK3N0YXRpYyB2b2lkIG5leHRfY29tbWVudGFyeV9ibG9jayhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJY29uc3QgY2hhciAqeCA9IG9wdC0+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+ZGF0ZV9tb2RlOworCWN0eC5kYXRlX21vZGVfZXhwbGljaXQgPSBvcHQtPmRhdGVfbW9kZV9leHBsaWNpdDsKKwljdHguYWJicmV2ID0gb3B0LT5kaWZmb3B0LmFiYnJldjsKKwljdHguYWZ0ZXJfc3ViamVjdCA9IGV4dHJhX2hlYWRlcnM7CisJY3R4LnByZXNlcnZlX3N1YmplY3QgPSBvcHQtPnByZXNlcnZlX3N1YmplY3Q7CisJY3R4LnJlZmxvZ19pbmZvID0gb3B0LT5yZWZsb2dfaW5mbzsKKwljdHguZm10ID0gb3B0LT5jb21taXRfZm9ybWF0OworCWN0eC5tYWlsbWFwID0gb3B0LT5tYWlsbWFwOworCWN0eC5jb2xvciA9IG9wdC0+ZGlmZm9wdC51c2VfY29sb3I7CisJY3R4LmV4cGFuZF90YWJzX2luX2xvZyA9IG9wdC0+ZXhwYW5kX3RhYnNfaW5fbG9nOworCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCWN0eC5yZXYgPSBvcHQ7CisJaWYgKG9wdC0+ZnJvbV9pZGVudC5tYWlsX2JlZ2luICYmIG9wdC0+ZnJvbV9pZGVudC5uYW1lX2JlZ2luKQorCQljdHguZnJvbV9pZGVudCA9ICZvcHQtPmZyb21faWRlbnQ7CisJaWYgKG9wdC0+Z3JhcGgpCisJCWN0eC5ncmFwaF93aWR0aCA9IGdyYXBoX3dpZHRoKG9wdC0+Z3JhcGgpOworCXByZXR0eV9wcmludF9jb21taXQoJmN0eCwgY29tbWl0LCAmbXNnYnVmKTsKKworCWlmIChvcHQtPmFkZF9zaWdub2ZmKQorCQlhcHBlbmRfc2lnbm9mZigmbXNnYnVmLCAwLCBBUFBFTkRfU0lHTk9GRl9ERURVUCk7CisKKwlpZiAoKGN0eC5mbXQgIT0gQ01JVF9GTVRfVVNFUkZPUk1BVCkgJiYKKwkgICAgY3R4Lm5vdGVzX21lc3NhZ2UgJiYgKmN0eC5ub3Rlc19tZXNzYWdlKSB7CisJCWlmIChjbWl0X2ZtdF9pc19tYWlsKGN0eC5mbXQpKQorCQkJbmV4dF9jb21tZW50YXJ5X2Jsb2NrKG9wdCwgJm1zZ2J1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgY3R4Lm5vdGVzX21lc3NhZ2UpOworCX0KKworCWlmIChvcHQtPnNob3dfbG9nX3NpemUpIHsKKwkJZnByaW50ZihvcHQtPmRpZmZvcHQuZmlsZSwgImxvZyBzaXplICVpXG4iLCAoaW50KW1zZ2J1Zi5sZW4pOworCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJfQorCisJLyoKKwkgKiBTZXQgb3B0LT5taXNzaW5nX25ld2xpbmUgaWYgbXNnYnVmIGRvZXNuJ3QKKwkgKiBlbmQgaW4gYSBuZXdsaW5lIChpbmNsdWRpbmcgaWYgaXQgaXMgZW1wdHkpCisJICovCisJaWYgKCFtc2didWYubGVuIHx8IG1zZ2J1Zi5idWZbbXNnYnVmLmxlbiAtIDFdICE9ICdcbicpCisJCW9wdC0+bWlzc2luZ19uZXdsaW5lID0gMTsKKwllbHNlCisJCW9wdC0+bWlzc2luZ19uZXdsaW5lID0gMDsKKworCWdyYXBoX3Nob3dfY29tbWl0X21zZyhvcHQtPmdyYXBoLCBvcHQtPmRpZmZvcHQuZmlsZSwgJm1zZ2J1Zik7CisJaWYgKG9wdC0+dXNlX3Rlcm1pbmF0b3IgJiYgIWNvbW1pdF9mb3JtYXRfaXNfZW1wdHkob3B0LT5jb21taXRfZm9ybWF0KSkgeworCQlpZiAoIW9wdC0+bWlzc2luZ19uZXdsaW5lKQorCQkJZ3JhcGhfc2hvd19wYWRkaW5nKG9wdC0+Z3JhcGgpOworCQlwdXRjKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uLCBvcHQtPmRpZmZvcHQuZmlsZSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7CisJZnJlZShjdHgubm90ZXNfbWVzc2FnZSk7CisKKwlpZiAoY21pdF9mbXRfaXNfbWFpbChjdHguZm10KSAmJiBvcHQtPmlkaWZmX29pZDEpIHsKKwkJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IGRxOworCisJCW1lbWNweSgmZHEsICZkaWZmX3F1ZXVlZF9kaWZmLCBzaXplb2YoZGlmZl9xdWV1ZWRfZGlmZikpOworCQlESUZGX1FVRVVFX0NMRUFSKCZkaWZmX3F1ZXVlZF9kaWZmKTsKKworCQluZXh0X2NvbW1lbnRhcnlfYmxvY2sob3B0LCBOVUxMKTsKKwkJZnByaW50Zl9sbihvcHQtPmRpZmZvcHQuZmlsZSwgIiVzIiwgb3B0LT5pZGlmZl90aXRsZSk7CisJCXNob3dfaW50ZXJkaWZmKG9wdCwgMik7CisKKwkJbWVtY3B5KCZkaWZmX3F1ZXVlZF9kaWZmLCAmZHEsIHNpemVvZihkaWZmX3F1ZXVlZF9kaWZmKSk7CisJfQorCisJaWYgKGNtaXRfZm10X2lzX21haWwoY3R4LmZtdCkgJiYgb3B0LT5yZGlmZjEpIHsKKwkJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IGRxOworCQlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdHM7CisKKwkJbWVtY3B5KCZkcSwgJmRpZmZfcXVldWVkX2RpZmYsIHNpemVvZihkaWZmX3F1ZXVlZF9kaWZmKSk7CisJCURJRkZfUVVFVUVfQ0xFQVIoJmRpZmZfcXVldWVkX2RpZmYpOworCisJCW5leHRfY29tbWVudGFyeV9ibG9jayhvcHQsIE5VTEwpOworCQlmcHJpbnRmX2xuKG9wdC0+ZGlmZm9wdC5maWxlLCAiJXMiLCBvcHQtPnJkaWZmX3RpdGxlKTsKKwkJLyoKKwkJICogUGFzcyBtaW5pbXVtIHJlcXVpcmVkIGRpZmYtb3B0aW9ucyB0byByYW5nZS1kaWZmOyBvdGhlcnMKKwkJICogY2FuIGJlIGFkZGVkIGxhdGVyIGlmIGRlZW1lZCBkZXNpcmFibGUuCisJCSAqLworCQlkaWZmX3NldHVwKCZvcHRzKTsKKwkJb3B0cy5maWxlID0gb3B0LT5kaWZmb3B0LmZpbGU7CisJCW9wdHMudXNlX2NvbG9yID0gb3B0LT5kaWZmb3B0LnVzZV9jb2xvcjsKKwkJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKKwkJc2hvd19yYW5nZV9kaWZmKG9wdC0+cmRpZmYxLCBvcHQtPnJkaWZmMiwKKwkJCQlvcHQtPmNyZWF0aW9uX2ZhY3RvciwgMSwgJm9wdHMsIE5VTEwpOworCisJCW1lbWNweSgmZGlmZl9xdWV1ZWRfZGlmZiwgJmRxLCBzaXplb2YoZGlmZl9xdWV1ZWRfZGlmZikpOworCX0KK30KKworaW50IGxvZ190cmVlX2RpZmZfZmx1c2goc3RydWN0IHJldl9pbmZvICpvcHQpCit7CisJb3B0LT5zaG93bl9kYXNoZXMgPSAwOworCWRpZmZjb3JlX3N0ZCgmb3B0LT5kaWZmb3B0KTsKKworCWlmIChkaWZmX3F1ZXVlX2lzX2VtcHR5KCkpIHsKKwkJaW50IHNhdmVkX2ZtdCA9IG9wdC0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0OworCQlvcHQtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwkJZGlmZl9mbHVzaCgmb3B0LT5kaWZmb3B0KTsKKwkJb3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBzYXZlZF9mbXQ7CisJCXJldHVybiAwOworCX0KKworCWlmIChvcHQtPmxvZ2luZm8gJiYgIW9wdC0+bm9fY29tbWl0X2lkKSB7CisJCXNob3dfbG9nKG9wdCk7CisJCWlmICgob3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiB+RElGRl9GT1JNQVRfTk9fT1VUUFVUKSAmJgorCQkgICAgb3B0LT52ZXJib3NlX2hlYWRlciAmJgorCQkgICAgb3B0LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUgJiYKKwkJICAgICFjb21taXRfZm9ybWF0X2lzX2VtcHR5KG9wdC0+Y29tbWl0X2Zvcm1hdCkpIHsKKwkJCS8qCisJCQkgKiBXaGVuIHNob3dpbmcgYSB2ZXJib3NlIGhlYWRlciAoaS5lLiBsb2cgbWVzc2FnZSksCisJCQkgKiBhbmQgbm90IGluIC0tcHJldHR5PW9uZWxpbmUgZm9ybWF0LCB3ZSB3b3VsZCB3YW50CisJCQkgKiBhbiBleHRyYSBuZXdsaW5lIGJldHdlZW4gdGhlIGVuZCBvZiBsb2cgYW5kIHRoZQorCQkJICogZGlmZi9kaWZmc3RhdCBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5LgorCQkJICovCisJCQlpbnQgcGNoID0gRElGRl9GT1JNQVRfRElGRlNUQVQgfCBESUZGX0ZPUk1BVF9QQVRDSDsKKwkJCWlmIChvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeCkgeworCQkJCXN0cnVjdCBzdHJidWYgKm1zZyA9IE5VTEw7CisJCQkJbXNnID0gb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXgoJm9wdC0+ZGlmZm9wdCwKKwkJCQkJb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXhfZGF0YSk7CisJCQkJZndyaXRlKG1zZy0+YnVmLCBtc2ctPmxlbiwgMSwgb3B0LT5kaWZmb3B0LmZpbGUpOworCQkJfQorCisJCQkvKgorCQkJICogV2UgbWF5IGhhdmUgc2hvd24gdGhyZWUtZGFzaGVzIGxpbmUgZWFybHkKKwkJCSAqIGJldHdlZW4gZ2VuZXJhdGVkIGNvbW1lbnRhcnkgKG5vdGVzLCBldGMuKQorCQkJICogYW5kIHRoZSBsb2cgbWVzc2FnZSwgaW4gd2hpY2ggY2FzZSB3ZSBvbmx5CisJCQkgKiB3YW50IGEgYmxhbmsgbGluZSBhZnRlciB0aGUgY29tbWVudGFyeQorCQkJICogd2l0aG91dCAoYW4gZXh0cmEpIHRocmVlLWRhc2hlcyBsaW5lLgorCQkJICogT3RoZXJ3aXNlLCB3ZSBzaG93IHRoZSB0aHJlZS1kYXNoZXMgbGluZSBpZgorCQkJICogd2UgYXJlIHNob3dpbmcgdGhlIHBhdGNoIHdpdGggZGlmZnN0YXQsIGJ1dAorCQkJICogaW4gdGhhdCBjYXNlLCB0aGVyZSBpcyBubyBleHRyYSBibGFuayBsaW5lCisJCQkgKiBhZnRlciB0aGUgdGhyZWUtZGFzaGVzIGxpbmUuCisJCQkgKi8KKwkJCWlmICghb3B0LT5zaG93bl9kYXNoZXMgJiYKKwkJCSAgICAocGNoICYgb3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpID09IHBjaCkKKwkJCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiLS0tIik7CisJCQlwdXRjKCdcbicsIG9wdC0+ZGlmZm9wdC5maWxlKTsKKwkJfQorCX0KKwlkaWZmX2ZsdXNoKCZvcHQtPmRpZmZvcHQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRvX2RpZmZfY29tYmluZWQoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlkaWZmX3RyZWVfY29tYmluZWRfbWVyZ2UoY29tbWl0LCBvcHQtPmRlbnNlX2NvbWJpbmVkX21lcmdlcywgb3B0KTsKKwlyZXR1cm4gIW9wdC0+bG9naW5mbzsKK30KKworLyoKKyAqIFNob3cgdGhlIGRpZmYgb2YgYSBjb21taXQuCisgKgorICogUmV0dXJuIHRydWUgaWYgd2UgcHJpbnRlZCBhbnkgbG9nIGluZm8gbWVzc2FnZXMKKyAqLworc3RhdGljIGludCBsb2dfdHJlZV9kaWZmKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBsb2dfaW5mbyAqbG9nKQoreworCWludCBzaG93ZWRfbG9nOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CisKKwlpZiAoIW9wdC0+ZGlmZiAmJiAhb3B0LT5kaWZmb3B0LmZsYWdzLmV4aXRfd2l0aF9zdGF0dXMpCisJCXJldHVybiAwOworCisJcGFyc2VfY29tbWl0X29yX2RpZShjb21taXQpOworCW9pZCA9IGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0KTsKKworCS8qIFJvb3QgY29tbWl0PyAqLworCXBhcmVudHMgPSBnZXRfc2F2ZWRfcGFyZW50cyhvcHQsIGNvbW1pdCk7CisJaWYgKCFwYXJlbnRzKSB7CisJCWlmIChvcHQtPnNob3dfcm9vdF9kaWZmKSB7CisJCQlkaWZmX3Jvb3RfdHJlZV9vaWQob2lkLCAiIiwgJm9wdC0+ZGlmZm9wdCk7CisJCQlsb2dfdHJlZV9kaWZmX2ZsdXNoKG9wdCk7CisJCX0KKwkJcmV0dXJuICFvcHQtPmxvZ2luZm87CisJfQorCisJLyogTW9yZSB0aGFuIG9uZSBwYXJlbnQ/ICovCisJaWYgKHBhcmVudHMgJiYgcGFyZW50cy0+bmV4dCkgeworCQlpZiAob3B0LT5pZ25vcmVfbWVyZ2VzKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKG9wdC0+Y29tYmluZV9tZXJnZXMpCisJCQlyZXR1cm4gZG9fZGlmZl9jb21iaW5lZChvcHQsIGNvbW1pdCk7CisJCWVsc2UgaWYgKG9wdC0+Zmlyc3RfcGFyZW50X29ubHkpIHsKKwkJCS8qCisJCQkgKiBHZW5lcmF0ZSBtZXJnZSBsb2cgZW50cnkgb25seSBmb3IgdGhlIGZpcnN0CisJCQkgKiBwYXJlbnQsIHNob3dpbmcgc3VtbWFyeSBkaWZmIG9mIHRoZSBvdGhlcnMKKwkJCSAqIHdlIG1lcmdlZCBfaW5fLgorCQkJICovCisJCQlwYXJzZV9jb21taXRfb3JfZGllKHBhcmVudHMtPml0ZW0pOworCQkJZGlmZl90cmVlX29pZChnZXRfY29tbWl0X3RyZWVfb2lkKHBhcmVudHMtPml0ZW0pLAorCQkJCSAgICAgIG9pZCwgIiIsICZvcHQtPmRpZmZvcHQpOworCQkJbG9nX3RyZWVfZGlmZl9mbHVzaChvcHQpOworCQkJcmV0dXJuICFvcHQtPmxvZ2luZm87CisJCX0KKworCQkvKiBJZiB3ZSBzaG93IGluZGl2aWR1YWwgZGlmZnMsIHNob3cgdGhlIHBhcmVudCBpbmZvICovCisJCWxvZy0+cGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwl9CisKKwlzaG93ZWRfbG9nID0gMDsKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisKKwkJcGFyc2VfY29tbWl0X29yX2RpZShwYXJlbnQpOworCQlkaWZmX3RyZWVfb2lkKGdldF9jb21taXRfdHJlZV9vaWQocGFyZW50KSwKKwkJCSAgICAgIG9pZCwgIiIsICZvcHQtPmRpZmZvcHQpOworCQlsb2dfdHJlZV9kaWZmX2ZsdXNoKG9wdCk7CisKKwkJc2hvd2VkX2xvZyB8PSAhb3B0LT5sb2dpbmZvOworCisJCS8qIFNldCB1cCB0aGUgbG9nIGluZm8gZm9yIHRoZSBuZXh0IHBhcmVudCwgaWYgYW55Li4gKi8KKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCWlmICghcGFyZW50cykKKwkJCWJyZWFrOworCQlsb2ctPnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisJCW9wdC0+bG9naW5mbyA9IGxvZzsKKwl9CisJcmV0dXJuIHNob3dlZF9sb2c7Cit9CisKK2ludCBsb2dfdHJlZV9jb21taXQoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbG9nX2luZm8gbG9nOworCWludCBzaG93biwgY2xvc2VfZmlsZSA9IG9wdC0+ZGlmZm9wdC5jbG9zZV9maWxlOworCisJbG9nLmNvbW1pdCA9IGNvbW1pdDsKKwlsb2cucGFyZW50ID0gTlVMTDsKKwlvcHQtPmxvZ2luZm8gPSAmbG9nOworCW9wdC0+ZGlmZm9wdC5jbG9zZV9maWxlID0gMDsKKworCWlmIChvcHQtPmxpbmVfbGV2ZWxfdHJhdmVyc2UpCisJCXJldHVybiBsaW5lX2xvZ19wcmludChvcHQsIGNvbW1pdCk7CisKKwlpZiAob3B0LT50cmFja19saW5lYXIgJiYgIW9wdC0+bGluZWFyICYmICFvcHQtPnJldmVyc2Vfb3V0cHV0X3N0YWdlKQorCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiXG4lc1xuIiwgb3B0LT5icmVha19iYXIpOworCXNob3duID0gbG9nX3RyZWVfZGlmZihvcHQsIGNvbW1pdCwgJmxvZyk7CisJaWYgKCFzaG93biAmJiBvcHQtPmxvZ2luZm8gJiYgb3B0LT5hbHdheXNfc2hvd19oZWFkZXIpIHsKKwkJbG9nLnBhcmVudCA9IE5VTEw7CisJCXNob3dfbG9nKG9wdCk7CisJCXNob3duID0gMTsKKwl9CisJaWYgKG9wdC0+dHJhY2tfbGluZWFyICYmICFvcHQtPmxpbmVhciAmJiBvcHQtPnJldmVyc2Vfb3V0cHV0X3N0YWdlKQorCQlmcHJpbnRmKG9wdC0+ZGlmZm9wdC5maWxlLCAiXG4lc1xuIiwgb3B0LT5icmVha19iYXIpOworCW9wdC0+bG9naW5mbyA9IE5VTEw7CisJbWF5YmVfZmx1c2hfb3JfZGllKG9wdC0+ZGlmZm9wdC5maWxlLCAic3Rkb3V0Iik7CisJaWYgKGNsb3NlX2ZpbGUpCisJCWZjbG9zZShvcHQtPmRpZmZvcHQuZmlsZSk7CisJcmV0dXJuIHNob3duOworfQpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuaCBiL2xvZy10cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2ODYyOAotLS0gL2Rldi9udWxsCisrKyBiL2xvZy10cmVlLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBMT0dfVFJFRV9ICisjZGVmaW5lIExPR19UUkVFX0gKKworI2luY2x1ZGUgInJldmlzaW9uLmgiCisKK3N0cnVjdCBsb2dfaW5mbyB7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0LCAqcGFyZW50OworfTsKKworc3RydWN0IGRlY29yYXRpb25fZmlsdGVyIHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmluY2x1ZGVfcmVmX3BhdHRlcm4sICpleGNsdWRlX3JlZl9wYXR0ZXJuOworfTsKKworaW50IHBhcnNlX2RlY29yYXRlX2NvbG9yX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnNsb3RfbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBpbml0X2xvZ190cmVlX29wdChzdHJ1Y3QgcmV2X2luZm8gKik7CitpbnQgbG9nX3RyZWVfZGlmZl9mbHVzaChzdHJ1Y3QgcmV2X2luZm8gKik7CitpbnQgbG9nX3RyZWVfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqLCBzdHJ1Y3QgY29tbWl0ICopOworaW50IGxvZ190cmVlX29wdF9wYXJzZShzdHJ1Y3QgcmV2X2luZm8gKiwgY29uc3QgY2hhciAqKiwgaW50KTsKK3ZvaWQgc2hvd19sb2coc3RydWN0IHJldl9pbmZvICpvcHQpOwordm9pZCBmb3JtYXRfZGVjb3JhdGlvbnNfZXh0ZW5kZWQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgaW50IHVzZV9jb2xvciwKKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBjb25zdCBjaGFyICpzZXBhcmF0b3IsCisJCQkgICAgIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CisjZGVmaW5lIGZvcm1hdF9kZWNvcmF0aW9ucyhzdHJidWYsIGNvbW1pdCwgY29sb3IpIFwKKwkJCSAgICAgZm9ybWF0X2RlY29yYXRpb25zX2V4dGVuZGVkKChzdHJidWYpLCAoY29tbWl0KSwgKGNvbG9yKSwgIiAoIiwgIiwgIiwgIikiKQordm9pZCBzaG93X2RlY29yYXRpb25zKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwordm9pZCBsb2dfd3JpdGVfZW1haWxfaGVhZGVycyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgICBjb25zdCBjaGFyICoqZXh0cmFfaGVhZGVyc19wLAorCQkJICAgICBpbnQgKm5lZWRfOGJpdF9jdGVfcCwKKwkJCSAgICAgaW50IG1heWJlX211bHRpcGFydCk7Cit2b2lkIGxvYWRfcmVmX2RlY29yYXRpb25zKHN0cnVjdCBkZWNvcmF0aW9uX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxhZ3MpOworCisjZGVmaW5lIEZPUk1BVF9QQVRDSF9OQU1FX01BWCA2NAordm9pZCBmbXRfb3V0cHV0X2NvbW1pdChzdHJ1Y3Qgc3RyYnVmICosIHN0cnVjdCBjb21taXQgKiwgc3RydWN0IHJldl9pbmZvICopOwordm9pZCBmbXRfb3V0cHV0X3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpzdWJqZWN0LCBzdHJ1Y3QgcmV2X2luZm8gKik7Cit2b2lkIGZtdF9vdXRwdXRfZW1haWxfc3ViamVjdChzdHJ1Y3Qgc3RyYnVmICosIHN0cnVjdCByZXZfaW5mbyAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9scy1yZWZzLmMgYi9scy1yZWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4YWVmNwotLS0gL2Rldi9udWxsCisrKyBiL2xzLXJlZnMuYwpAQCAtMCwwICsxLDExMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAibHMtcmVmcy5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8qCisgKiBDaGVjayBpZiBvbmUgb2YgdGhlIHByZWZpeGVzIGlzIGEgcHJlZml4IG9mIHRoZSByZWYuCisgKiBJZiBubyBwcmVmaXhlcyB3ZXJlIHByb3ZpZGVkLCBhbGwgcmVmcyBtYXRjaC4KKyAqLworc3RhdGljIGludCByZWZfbWF0Y2goY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKnByZWZpeGVzLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWludCBpOworCisJaWYgKCFwcmVmaXhlcy0+YXJnYykKKwkJcmV0dXJuIDE7IC8qIG5vIHJlc3RyaWN0aW9uICovCisKKwlmb3IgKGkgPSAwOyBpIDwgcHJlZml4ZXMtPmFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICpwcmVmaXggPSBwcmVmaXhlcy0+YXJndltpXTsKKworCQlpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgcHJlZml4KSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbHNfcmVmc19kYXRhIHsKKwl1bnNpZ25lZCBwZWVsOworCXVuc2lnbmVkIHN5bXJlZnM7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcHJlZml4ZXM7Cit9OworCitzdGF0aWMgaW50IHNlbmRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBsc19yZWZzX2RhdGEgKmRhdGEgPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKnJlZm5hbWVfbm9ucyA9IHN0cmlwX25hbWVzcGFjZShyZWZuYW1lKTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZmxpbmUgPSBTVFJCVUZfSU5JVDsKKworCWlmIChyZWZfaXNfaGlkZGVuKHJlZm5hbWVfbm9ucywgcmVmbmFtZSkpCisJCXJldHVybiAwOworCisJaWYgKCFyZWZfbWF0Y2goJmRhdGEtPnByZWZpeGVzLCByZWZuYW1lX25vbnMpKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGRmKCZyZWZsaW5lLCAiJXMgJXMiLCBvaWRfdG9faGV4KG9pZCksIHJlZm5hbWVfbm9ucyk7CisJaWYgKGRhdGEtPnN5bXJlZnMgJiYgZmxhZyAmIFJFRl9JU1NZTVJFRikgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHVudXNlZDsKKwkJY29uc3QgY2hhciAqc3ltcmVmX3RhcmdldCA9IHJlc29sdmVfcmVmX3Vuc2FmZShyZWZuYW1lLCAwLAorCQkJCQkJCSAgICAgICAmdW51c2VkLAorCQkJCQkJCSAgICAgICAmZmxhZyk7CisKKwkJaWYgKCFzeW1yZWZfdGFyZ2V0KQorCQkJZGllKCInJXMnIGlzIGEgc3ltcmVmIGJ1dCBpdCBpcyBub3Q/IiwgcmVmbmFtZSk7CisKKwkJc3RyYnVmX2FkZGYoJnJlZmxpbmUsICIgc3ltcmVmLXRhcmdldDolcyIsCisJCQkgICAgc3RyaXBfbmFtZXNwYWNlKHN5bXJlZl90YXJnZXQpKTsKKwl9CisKKwlpZiAoZGF0YS0+cGVlbCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKKwkJaWYgKCFwZWVsX3JlZihyZWZuYW1lLCAmcGVlbGVkKSkKKwkJCXN0cmJ1Zl9hZGRmKCZyZWZsaW5lLCAiIHBlZWxlZDolcyIsIG9pZF90b19oZXgoJnBlZWxlZCkpOworCX0KKworCXN0cmJ1Zl9hZGRjaCgmcmVmbGluZSwgJ1xuJyk7CisJcGFja2V0X3dyaXRlKDEsIHJlZmxpbmUuYnVmLCByZWZsaW5lLmxlbik7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVmbGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHNfcmVmc19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwkvKgorCSAqIFdlIG9ubHkgc2VydmUgZmV0Y2hlcyBvdmVyIHYyIGZvciBub3csIHNvIHJlc3BlY3Qgb25seSAidXBsb2FkcGFjayIKKwkgKiBjb25maWcuIFRoaXMgbWF5IG5lZWQgdG8gZXZlbnR1YWxseSBiZSBleHBhbmRlZCB0byAicmVjZWl2ZSIsIGJ1dCB3ZQorCSAqIGRvbid0IHlldCBrbm93IGhvdyB0aGF0IGluZm9ybWF0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIGxzLXJlZnMuCisJICovCisJcmV0dXJuIHBhcnNlX2hpZGVfcmVmc19jb25maWcodmFyLCB2YWx1ZSwgInVwbG9hZHBhY2siKTsKK30KKworaW50IGxzX3JlZnMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBhcmd2X2FycmF5ICprZXlzLAorCSAgICBzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgbHNfcmVmc19kYXRhIGRhdGE7CisKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisKKwlnaXRfY29uZmlnKGxzX3JlZnNfY29uZmlnLCBOVUxMKTsKKworCXdoaWxlIChwYWNrZXRfcmVhZGVyX3JlYWQocmVxdWVzdCkgIT0gUEFDS0VUX1JFQURfRkxVU0gpIHsKKwkJY29uc3QgY2hhciAqYXJnID0gcmVxdWVzdC0+bGluZTsKKwkJY29uc3QgY2hhciAqb3V0OworCisJCWlmICghc3RyY21wKCJwZWVsIiwgYXJnKSkKKwkJCWRhdGEucGVlbCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoInN5bXJlZnMiLCBhcmcpKQorCQkJZGF0YS5zeW1yZWZzID0gMTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAicmVmLXByZWZpeCAiLCAmb3V0KSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmZGF0YS5wcmVmaXhlcywgb3V0KTsKKwl9CisKKwloZWFkX3JlZl9uYW1lc3BhY2VkKHNlbmRfcmVmLCAmZGF0YSk7CisJZm9yX2VhY2hfbmFtZXNwYWNlZF9yZWYoc2VuZF9yZWYsICZkYXRhKTsKKwlwYWNrZXRfZmx1c2goMSk7CisJYXJndl9hcnJheV9jbGVhcigmZGF0YS5wcmVmaXhlcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9scy1yZWZzLmggYi9scy1yZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U1NjQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xzLXJlZnMuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIExTX1JFRlNfSAorI2RlZmluZSBMU19SRUZTX0gKKworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3QgYXJndl9hcnJheTsKK3N0cnVjdCBwYWNrZXRfcmVhZGVyOworaW50IGxzX3JlZnMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBhcmd2X2FycmF5ICprZXlzLAorCSAgICBzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVxdWVzdCk7CisKKyNlbmRpZiAvKiBMU19SRUZTX0ggKi8KZGlmZiAtLWdpdCBhL21haWxpbmZvLmMgYi9tYWlsaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MmZhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tYWlsaW5mby5jCkBAIC0wLDAgKzEsMTI1NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgIm1haWxpbmZvLmgiCisKK3N0YXRpYyB2b2lkIGNsZWFudXBfc3BhY2Uoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJc2l6ZV90IHBvcywgY250OworCWZvciAocG9zID0gMDsgcG9zIDwgc2ItPmxlbjsgcG9zKyspIHsKKwkJaWYgKGlzc3BhY2Uoc2ItPmJ1Zltwb3NdKSkgeworCQkJc2ItPmJ1Zltwb3NdID0gJyAnOworCQkJZm9yIChjbnQgPSAwOyBpc3NwYWNlKHNiLT5idWZbcG9zICsgY250ICsgMV0pOyBjbnQrKyk7CisJCQlzdHJidWZfcmVtb3ZlKHNiLCBwb3MgKyAxLCBjbnQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfc2FuZV9uYW1lKHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHN0cmJ1ZiAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqZW1haWwpCit7CisJc3RydWN0IHN0cmJ1ZiAqc3JjID0gbmFtZTsKKwlpZiAobmFtZS0+bGVuIDwgMyB8fCA2MCA8IG5hbWUtPmxlbiB8fCBzdHJwYnJrKG5hbWUtPmJ1ZiwgIkA8PiIpKQorCQlzcmMgPSBlbWFpbDsKKwllbHNlIGlmIChuYW1lID09IG91dCkKKwkJcmV0dXJuOworCXN0cmJ1Zl9yZXNldChvdXQpOworCXN0cmJ1Zl9hZGRidWYob3V0LCBzcmMpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9ib2d1c19mcm9tKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJLyogSm9obiBEb2UgPGpvaG5kb2U+ICovCisKKwljaGFyICpicmEsICprZXQ7CisJLyogVGhpcyBpcyBmYWxsYmFjaywgc28gZG8gbm90IGJvdGhlciBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4KKwkgKiBlLW1haWwgYWRkcmVzcy4KKwkgKi8KKwlpZiAobWktPmVtYWlsLmxlbikKKwkJcmV0dXJuOworCisJYnJhID0gc3RyY2hyKGxpbmUtPmJ1ZiwgJzwnKTsKKwlpZiAoIWJyYSkKKwkJcmV0dXJuOworCWtldCA9IHN0cmNocihicmEsICc+Jyk7CisJaWYgKCFrZXQpCisJCXJldHVybjsKKworCXN0cmJ1Zl9yZXNldCgmbWktPmVtYWlsKTsKKwlzdHJidWZfYWRkKCZtaS0+ZW1haWwsIGJyYSArIDEsIGtldCAtIGJyYSAtIDEpOworCisJc3RyYnVmX3Jlc2V0KCZtaS0+bmFtZSk7CisJc3RyYnVmX2FkZCgmbWktPm5hbWUsIGxpbmUtPmJ1ZiwgYnJhIC0gbGluZS0+YnVmKTsKKwlzdHJidWZfdHJpbSgmbWktPm5hbWUpOworCWdldF9zYW5lX25hbWUoJm1pLT5uYW1lLCAmbWktPm5hbWUsICZtaS0+ZW1haWwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5xdW90ZV9jb21tZW50KHN0cnVjdCBzdHJidWYgKm91dGJ1ZiwgY29uc3QgY2hhciAqaW4pCit7CisJaW50IGM7CisJaW50IHRha2VfbmV4dF9saXRlcmFsbHkgPSAwOworCisJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgJygnKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmICh0YWtlX25leHRfbGl0ZXJhbGx5ID09IDEpIHsKKwkJCXRha2VfbmV4dF9saXRlcmFsbHkgPSAwOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICdcXCc6CisJCQkJdGFrZV9uZXh0X2xpdGVyYWxseSA9IDE7CisJCQkJY29udGludWU7CisJCQljYXNlICcoJzoKKwkJCQlpbiA9IHVucXVvdGVfY29tbWVudChvdXRidWYsIGluKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyknOgorCQkJCXN0cmJ1Zl9hZGRjaChvdXRidWYsICcpJyk7CisJCQkJcmV0dXJuIGluOworCQkJfQorCQl9CisKKwkJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgYyk7CisJfQorCisJcmV0dXJuIGluOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5xdW90ZV9xdW90ZWRfc3RyaW5nKHN0cnVjdCBzdHJidWYgKm91dGJ1ZiwgY29uc3QgY2hhciAqaW4pCit7CisJaW50IGM7CisJaW50IHRha2VfbmV4dF9saXRlcmFsbHkgPSAwOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJaWYgKHRha2VfbmV4dF9saXRlcmFsbHkgPT0gMSkgeworCQkJdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ1xcJzoKKwkJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyInOgorCQkJCXJldHVybiBpbjsKKwkJCX0KKwkJfQorCisJCXN0cmJ1Zl9hZGRjaChvdXRidWYsIGMpOworCX0KKworCXJldHVybiBpbjsKK30KKworc3RhdGljIHZvaWQgdW5xdW90ZV9xdW90ZWRfcGFpcihzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgb3V0YnVmOworCWNvbnN0IGNoYXIgKmluID0gbGluZS0+YnVmOworCWludCBjOworCisJc3RyYnVmX2luaXQoJm91dGJ1ZiwgbGluZS0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICciJzoKKwkJCWluID0gdW5xdW90ZV9xdW90ZWRfc3RyaW5nKCZvdXRidWYsIGluKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICcoJzoKKwkJCWluID0gdW5xdW90ZV9jb21tZW50KCZvdXRidWYsIGluKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX2FkZGNoKCZvdXRidWYsIGMpOworCX0KKworCXN0cmJ1Zl9zd2FwKCZvdXRidWYsIGxpbmUpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXRidWYpOworCit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9mcm9tKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmZyb20pCit7CisJY2hhciAqYXQ7CisJc2l6ZV90IGVsOworCXN0cnVjdCBzdHJidWYgZjsKKworCXN0cmJ1Zl9pbml0KCZmLCBmcm9tLT5sZW4pOworCXN0cmJ1Zl9hZGRidWYoJmYsIGZyb20pOworCisJdW5xdW90ZV9xdW90ZWRfcGFpcigmZik7CisKKwlhdCA9IHN0cmNocihmLmJ1ZiwgJ0AnKTsKKwlpZiAoIWF0KSB7CisJCXBhcnNlX2JvZ3VzX2Zyb20obWksIGZyb20pOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFscmVhZHkgaGF2ZSBvbmUgZW1haWwsIGRvbid0IHRha2UgYW55IGNvbmZ1c2luZyBsaW5lcworCSAqLworCWlmIChtaS0+ZW1haWwubGVuICYmIHN0cmNocihhdCArIDEsICdAJykpCisJCWdvdG8gb3V0OworCisJLyogUGljayB1cCB0aGUgc3RyaW5nIGFyb3VuZCAnQCcsIHBvc3NpYmx5IGRlbGltaXRlZCB3aXRoIDw+CisJICogcGFpcjsgdGhhdCBpcyB0aGUgZW1haWwgcGFydC4KKwkgKi8KKwl3aGlsZSAoYXQgPiBmLmJ1ZikgeworCQljaGFyIGMgPSBhdFstMV07CisJCWlmIChpc3NwYWNlKGMpKQorCQkJYnJlYWs7CisJCWlmIChjID09ICc8JykgeworCQkJYXRbLTFdID0gJyAnOworCQkJYnJlYWs7CisJCX0KKwkJYXQtLTsKKwl9CisJZWwgPSBzdHJjc3BuKGF0LCAiIFxuXHRcclx2XGY+Iik7CisJc3RyYnVmX3Jlc2V0KCZtaS0+ZW1haWwpOworCXN0cmJ1Zl9hZGQoJm1pLT5lbWFpbCwgYXQsIGVsKTsKKwlzdHJidWZfcmVtb3ZlKCZmLCBhdCAtIGYuYnVmLCBlbCArIChhdFtlbF0gPyAxIDogMCkpOworCisJLyogVGhlIHJlbWFpbmRlciBpcyBuYW1lLiAgSXQgY291bGQgYmUKKwkgKgorCSAqIC0gIkpvaG4gRG9lIDxqb2huLmRvZUB4ej4iCQkJKGEpLCBvcgorCSAqIC0gImpvaG4uZG9lQHh6IChKb2huIERvZSkiCQkJKGIpLCBvcgorCSAqIC0gIkpvaG4gKHp6eikgRG9lIDxqb2huLmRvZUB4ej4gKENvbW1lbnQpIgkoYykKKwkgKgorCSAqIGJ1dCB3ZSBoYXZlIHJlbW92ZWQgdGhlIGVtYWlsIHBhcnQsIHNvCisJICoKKwkgKiAtIHJlbW92ZSBleHRyYSBzcGFjZXMgd2hpY2ggY291bGQgc3RheSBhZnRlciBlbWFpbCAoY2FzZSAnYycpLCBhbmQKKwkgKiAtIHRyaW0gZnJvbSBib3RoIGVuZHMsIHBvc3NpYmx5IHJlbW92aW5nIHRoZSAoKSBwYWlyIGF0IHRoZSBlbmQKKwkgKiAgIChjYXNlcyAnYScgYW5kICdiJykuCisJICovCisJY2xlYW51cF9zcGFjZSgmZik7CisJc3RyYnVmX3RyaW0oJmYpOworCWlmIChmLmJ1ZlswXSA9PSAnKCcgJiYgZi5sZW4gJiYgZi5idWZbZi5sZW4gLSAxXSA9PSAnKScpIHsKKwkJc3RyYnVmX3JlbW92ZSgmZiwgMCwgMSk7CisJCXN0cmJ1Zl9zZXRsZW4oJmYsIGYubGVuIC0gMSk7CisJfQorCisJZ2V0X3NhbmVfbmFtZSgmbWktPm5hbWUsICZmLCAmbWktPmVtYWlsKTsKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmZik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9oZWFkZXIoc3RydWN0IHN0cmJ1ZiAqKm91dCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpZiAoISpvdXQpIHsKKwkJKm91dCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwkJc3RyYnVmX2luaXQoKm91dCwgbGluZS0+bGVuKTsKKwl9IGVsc2UKKwkJc3RyYnVmX3Jlc2V0KCpvdXQpOworCisJc3RyYnVmX2FkZGJ1Zigqb3V0LCBsaW5lKTsKK30KKworLyogTk9URSBOT1RFIE5PVEUuICBXZSBkbyBub3QgY2xhaW0gd2UgZG8gZnVsbCBNSU1FLiAgV2UganVzdCBhdHRlbXB0CisgKiB0byBoYXZlIGVub3VnaCBoZXVyaXN0aWNzIHRvIGdyb2sgTUlNRSBlbmNvZGVkIHBhdGNoZXMgb2Z0ZW4gZm91bmQKKyAqIG9uIG91ciBtYWlsaW5nIGxpc3RzLiAgRm9yIGV4YW1wbGUsIHdlIGRvIG5vdCBldmVuIHRyZWF0IGhlYWRlciBsaW5lcworICogY2FzZSBpbnNlbnNpdGl2ZWx5LgorICovCisKK3N0YXRpYyBpbnQgc2x1cnBfYXR0cihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICphdHRyKQoreworCWNvbnN0IGNoYXIgKmVuZHMsICphcCA9IHN0cmNhc2VzdHIobGluZSwgbmFtZSk7CisJc2l6ZV90IHN6OworCisJc3RyYnVmX3NldGxlbihhdHRyLCAwKTsKKwlpZiAoIWFwKQorCQlyZXR1cm4gMDsKKwlhcCArPSBzdHJsZW4obmFtZSk7CisJaWYgKCphcCA9PSAnIicpIHsKKwkJYXArKzsKKwkJZW5kcyA9ICJcIiI7CisJfQorCWVsc2UKKwkJZW5kcyA9ICI7IFx0IjsKKwlzeiA9IHN0cmNzcG4oYXAsIGVuZHMpOworCXN0cmJ1Zl9hZGQoYXR0ciwgYXAsIHN6KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBoYXNfYXR0cl92YWx1ZShjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJjID0gc2x1cnBfYXR0cihsaW5lLCBuYW1lLCAmc2IpICYmICFzdHJjYXNlY21wKHNiLmJ1ZiwgdmFsdWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29udGVudF90eXBlKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiAqYm91bmRhcnkgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQoYm91bmRhcnksIGxpbmUtPmxlbik7CisKKwltaS0+Zm9ybWF0X2Zsb3dlZCA9IGhhc19hdHRyX3ZhbHVlKGxpbmUtPmJ1ZiwgImZvcm1hdD0iLCAiZmxvd2VkIik7CisJbWktPmRlbHNwID0gaGFzX2F0dHJfdmFsdWUobGluZS0+YnVmLCAiZGVsc3A9IiwgInllcyIpOworCisJaWYgKHNsdXJwX2F0dHIobGluZS0+YnVmLCAiYm91bmRhcnk9IiwgYm91bmRhcnkpKSB7CisJCXN0cmJ1Zl9pbnNlcnRzdHIoYm91bmRhcnksIDAsICItLSIpOworCQlpZiAoKyttaS0+Y29udGVudF90b3AgPj0gJm1pLT5jb250ZW50W01BWF9CT1VOREFSSUVTXSkgeworCQkJZXJyb3IoIlRvbyBtYW55IGJvdW5kYXJpZXMgdG8gaGFuZGxlIik7CisJCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKKwkJCW1pLT5jb250ZW50X3RvcCA9ICZtaS0+Y29udGVudFtNQVhfQk9VTkRBUklFU10gLSAxOworCQkJcmV0dXJuOworCQl9CisJCSoobWktPmNvbnRlbnRfdG9wKSA9IGJvdW5kYXJ5OworCQlib3VuZGFyeSA9IE5VTEw7CisJfQorCXNsdXJwX2F0dHIobGluZS0+YnVmLCAiY2hhcnNldD0iLCAmbWktPmNoYXJzZXQpOworCisJaWYgKGJvdW5kYXJ5KSB7CisJCXN0cmJ1Zl9yZWxlYXNlKGJvdW5kYXJ5KTsKKwkJZnJlZShib3VuZGFyeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29udGVudF90cmFuc2Zlcl9lbmNvZGluZyhzdHJ1Y3QgbWFpbGluZm8gKm1pLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJaWYgKHN0cmNhc2VzdHIobGluZS0+YnVmLCAiYmFzZTY0IikpCisJCW1pLT50cmFuc2Zlcl9lbmNvZGluZyA9IFRFX0JBU0U2NDsKKwllbHNlIGlmIChzdHJjYXNlc3RyKGxpbmUtPmJ1ZiwgInF1b3RlZC1wcmludGFibGUiKSkKKwkJbWktPnRyYW5zZmVyX2VuY29kaW5nID0gVEVfUVA7CisJZWxzZQorCQltaS0+dHJhbnNmZXJfZW5jb2RpbmcgPSBURV9ET05UQ0FSRTsKK30KKworc3RhdGljIGludCBpc19tdWx0aXBhcnRfYm91bmRhcnkoc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpjb250ZW50X3RvcCA9ICoobWktPmNvbnRlbnRfdG9wKTsKKworCXJldHVybiAoKGNvbnRlbnRfdG9wLT5sZW4gPD0gbGluZS0+bGVuKSAmJgorCQkhbWVtY21wKGxpbmUtPmJ1ZiwgY29udGVudF90b3AtPmJ1ZiwgY29udGVudF90b3AtPmxlbikpOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3N1YmplY3Qoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqc3ViamVjdCkKK3sKKwlzaXplX3QgYXQgPSAwOworCisJd2hpbGUgKGF0IDwgc3ViamVjdC0+bGVuKSB7CisJCWNoYXIgKnBvczsKKwkJc2l6ZV90IHJlbW92ZTsKKworCQlzd2l0Y2ggKHN1YmplY3QtPmJ1ZlthdF0pIHsKKwkJY2FzZSAncic6IGNhc2UgJ1InOgorCQkJaWYgKHN1YmplY3QtPmxlbiA8PSBhdCArIDMpCisJCQkJYnJlYWs7CisJCQlpZiAoKHN1YmplY3QtPmJ1ZlthdCArIDFdID09ICdlJyB8fAorCQkJICAgICBzdWJqZWN0LT5idWZbYXQgKyAxXSA9PSAnRScpICYmCisJCQkgICAgc3ViamVjdC0+YnVmW2F0ICsgMl0gPT0gJzonKSB7CisJCQkJc3RyYnVmX3JlbW92ZShzdWJqZWN0LCBhdCwgMyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlhdCsrOworCQkJYnJlYWs7CisJCWNhc2UgJyAnOiBjYXNlICdcdCc6IGNhc2UgJzonOgorCQkJc3RyYnVmX3JlbW92ZShzdWJqZWN0LCBhdCwgMSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnWyc6CisJCQlwb3MgPSBzdHJjaHIoc3ViamVjdC0+YnVmICsgYXQsICddJyk7CisJCQlpZiAoIXBvcykKKwkJCQlicmVhazsKKwkJCXJlbW92ZSA9IHBvcyAtIHN1YmplY3QtPmJ1ZiArIGF0ICsgMTsKKwkJCWlmICghbWktPmtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3QgfHwKKwkJCSAgICAoNyA8PSByZW1vdmUgJiYKKwkJCSAgICAgbWVtbWVtKHN1YmplY3QtPmJ1ZiArIGF0LCByZW1vdmUsICJQQVRDSCIsIDUpKSkKKwkJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCByZW1vdmUpOworCQkJZWxzZSB7CisJCQkJYXQgKz0gcmVtb3ZlOworCQkJCS8qCisJCQkJICogSWYgdGhlIGlucHV0IGhhZCBhIHNwYWNlIGFmdGVyIHRoZSBdLCBrZWVwCisJCQkJICogaXQuICBXZSBkb24ndCBib3RoZXIgd2l0aCBmaW5kaW5nIHRoZSBlbmQgb2YKKwkJCQkgKiB0aGUgc3BhY2UsIHNpbmNlIHdlIGxhdGVyIG5vcm1hbGl6ZSBpdAorCQkJCSAqIGFueXdheS4KKwkJCQkgKi8KKwkJCQlpZiAoaXNzcGFjZShzdWJqZWN0LT5idWZbYXRdKSkKKwkJCQkJYXQgKz0gMTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKwlzdHJidWZfdHJpbShzdWJqZWN0KTsKK30KKworI2RlZmluZSBNQVhfSERSX1BBUlNFRCAxMAorc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRlcltNQVhfSERSX1BBUlNFRF0gPSB7CisJIkZyb20iLCJTdWJqZWN0IiwiRGF0ZSIsCit9OworCitzdGF0aWMgaW5saW5lIGludCBza2lwX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBjb25zdCBjaGFyICpoZHIsCisJCQkgICAgICBjb25zdCBjaGFyICoqb3V0dmFsKQoreworCWNvbnN0IGNoYXIgKnZhbDsKKwlpZiAoIXNraXBfaXByZWZpeChsaW5lLT5idWYsIGhkciwgJnZhbCkgfHwKKwkgICAgKnZhbCsrICE9ICc6JykKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGlzc3BhY2UoKnZhbCkpCisJCXZhbCsrOworCSpvdXR2YWwgPSB2YWw7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaXNfZm9ybWF0X3BhdGNoX3NlcGFyYXRvcihjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCXN0YXRpYyBjb25zdCBjaGFyIFNBTVBMRVtdID0KKwkJIkZyb20gZTY4MDdmM2VmY2EyOGIzMGRlY2ZlY2IxNzMyYTU2YzdkYjExMzdlZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDFcbiI7CisJY29uc3QgY2hhciAqY3A7CisKKwlpZiAobGVuICE9IHN0cmxlbihTQU1QTEUpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXNraXBfcHJlZml4KGxpbmUsICJGcm9tICIsICZjcCkpCisJCXJldHVybiAwOworCWlmIChzdHJzcG4oY3AsICIwMTIzNDU2Nzg5YWJjZGVmIikgIT0gNDApCisJCXJldHVybiAwOworCWNwICs9IDQwOworCXJldHVybiAhbWVtY21wKFNBTVBMRSArIChjcCAtIGxpbmUpLCBjcCwgc3RybGVuKFNBTVBMRSkgLSAoY3AgLSBsaW5lKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmICpkZWNvZGVfcV9zZWdtZW50KGNvbnN0IHN0cnVjdCBzdHJidWYgKnFfc2VnLCBpbnQgcmZjMjA0NykKK3sKKwljb25zdCBjaGFyICppbiA9IHFfc2VnLT5idWY7CisJaW50IGM7CisJc3RydWN0IHN0cmJ1ZiAqb3V0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCXN0cmJ1Zl9pbml0KG91dCwgcV9zZWctPmxlbik7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlpZiAoYyA9PSAnPScpIHsKKwkJCWludCBjaCwgZCA9ICppbjsKKwkJCWlmIChkID09ICdcbicgfHwgIWQpCisJCQkJYnJlYWs7IC8qIGRyb3AgdHJhaWxpbmcgbmV3bGluZSAqLworCQkJY2ggPSBoZXgyY2hyKGluKTsKKwkJCWlmIChjaCA+PSAwKSB7CisJCQkJc3RyYnVmX2FkZGNoKG91dCwgY2gpOworCQkJCWluICs9IDI7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBnYXJiYWdlIC0tIGZhbGwgdGhyb3VnaCAqLworCQl9CisJCWlmIChyZmMyMDQ3ICYmIGMgPT0gJ18nKSAvKiByZmMyMDQ3IDQuMiAoMikgKi8KKwkJCWMgPSAweDIwOworCQlzdHJidWZfYWRkY2gob3V0LCBjKTsKKwl9CisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmRlY29kZV9iX3NlZ21lbnQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqYl9zZWcpCit7CisJLyogRGVjb2RlIGluLi5lcCwgcG9zc2libHkgaW4tcGxhY2UgdG8gb3QgKi8KKwlpbnQgYywgcG9zID0gMCwgYWNjID0gMDsKKwljb25zdCBjaGFyICppbiA9IGJfc2VnLT5idWY7CisJc3RydWN0IHN0cmJ1ZiAqb3V0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCXN0cmJ1Zl9pbml0KG91dCwgYl9zZWctPmxlbik7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlpZiAoYyA9PSAnKycpCisJCQljID0gNjI7CisJCWVsc2UgaWYgKGMgPT0gJy8nKQorCQkJYyA9IDYzOworCQllbHNlIGlmICgnQScgPD0gYyAmJiBjIDw9ICdaJykKKwkJCWMgLT0gJ0EnOworCQllbHNlIGlmICgnYScgPD0gYyAmJiBjIDw9ICd6JykKKwkJCWMgLT0gJ2EnIC0gMjY7CisJCWVsc2UgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzknKQorCQkJYyAtPSAnMCcgLSA1MjsKKwkJZWxzZQorCQkJY29udGludWU7IC8qIGdhcmJhZ2UgKi8KKwkJc3dpdGNoIChwb3MrKykgeworCQljYXNlIDA6CisJCQlhY2MgPSAoYyA8PCAyKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgKGMgPj4gNCkpKTsKKwkJCWFjYyA9IChjICYgMTUpIDw8IDQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3RyYnVmX2FkZGNoKG91dCwgKGFjYyB8IChjID4+IDIpKSk7CisJCQlhY2MgPSAoYyAmIDMpIDw8IDY7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJc3RyYnVmX2FkZGNoKG91dCwgKGFjYyB8IGMpKTsKKwkJCWFjYyA9IHBvcyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgaW50IGNvbnZlcnRfdG9fdXRmOChzdHJ1Y3QgbWFpbGluZm8gKm1pLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqbGluZSwgY29uc3QgY2hhciAqY2hhcnNldCkKK3sKKwljaGFyICpvdXQ7CisKKwlpZiAoIW1pLT5tZXRhaW5mb19jaGFyc2V0IHx8ICFjaGFyc2V0IHx8ICEqY2hhcnNldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2FtZV9lbmNvZGluZyhtaS0+bWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCkpCisJCXJldHVybiAwOworCW91dCA9IHJlZW5jb2RlX3N0cmluZyhsaW5lLT5idWYsIG1pLT5tZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0KTsKKwlpZiAoIW91dCkgeworCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKKwkJcmV0dXJuIGVycm9yKCJjYW5ub3QgY29udmVydCBmcm9tICVzIHRvICVzIiwKKwkJCSAgICAgY2hhcnNldCwgbWktPm1ldGFpbmZvX2NoYXJzZXQpOworCX0KKwlzdHJidWZfYXR0YWNoKGxpbmUsIG91dCwgc3RybGVuKG91dCksIHN0cmxlbihvdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX2hlYWRlcihzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICppdCkKK3sKKwljaGFyICppbiwgKmVwLCAqY3A7CisJc3RydWN0IHN0cmJ1ZiBvdXRidWYgPSBTVFJCVUZfSU5JVCwgKmRlYzsKKwlzdHJ1Y3Qgc3RyYnVmIGNoYXJzZXRfcSA9IFNUUkJVRl9JTklULCBwaWVjZWJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBmb3VuZF9lcnJvciA9IDE7IC8qIHBlc3NpbWlzbSAqLworCisJaW4gPSBpdC0+YnVmOworCXdoaWxlIChpbiAtIGl0LT5idWYgPD0gaXQtPmxlbiAmJiAoZXAgPSBzdHJzdHIoaW4sICI9PyIpKSAhPSBOVUxMKSB7CisJCWludCBlbmNvZGluZzsKKwkJc3RyYnVmX3Jlc2V0KCZjaGFyc2V0X3EpOworCQlzdHJidWZfcmVzZXQoJnBpZWNlYnVmKTsKKworCQlpZiAoaW4gIT0gZXApIHsKKwkJCS8qCisJCQkgKiBXZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhbiBlbmNvZGVkLXdvcmQKKwkJCSAqIHRoYXQgYmVnaW5zIGF0IGVwLCBidXQgdGhlcmUgaXMgc29tZXRoaW5nCisJCQkgKiBiZWZvcmUgdGhlIGVuY29kZWQgd29yZC4KKwkJCSAqLworCQkJY2hhciAqc2NhbjsKKwkJCWZvciAoc2NhbiA9IGluOyBzY2FuIDwgZXA7IHNjYW4rKykKKwkJCQlpZiAoIWlzc3BhY2UoKnNjYW4pKQorCQkJCQlicmVhazsKKworCQkJaWYgKHNjYW4gIT0gZXAgfHwgaW4gPT0gaXQtPmJ1ZikgeworCQkJCS8qCisJCQkJICogV2Ugc2hvdWxkIG5vdCBsb3NlIHRoYXQgInNvbWV0aGluZyIsCisJCQkJICogdW5sZXNzIHdlIGhhdmUganVzdCBwcm9jZXNzZWQgYW4KKwkJCQkgKiBlbmNvZGVkLXdvcmQsIGFuZCB0aGVyZSBpcyBvbmx5IExXUworCQkJCSAqIGJlZm9yZSB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBwcm9jZXNzLgorCQkJCSAqLworCQkJCXN0cmJ1Zl9hZGQoJm91dGJ1ZiwgaW4sIGVwIC0gaW4pOworCQkJfQorCQl9CisJCS8qIEUuZy4KKwkJICogZXAgOiAiPT9pc28tMjAyMi1qcD9CP0d5Ui4uLj89IGZvbyIKKwkJICogZXAgOiAiPT9JU08tODg1OS0xP1E/Rm9vPUZDYmFyPz0gYmF6IgorCQkgKi8KKwkJZXAgKz0gMjsKKworCQlpZiAoZXAgLSBpdC0+YnVmID49IGl0LT5sZW4gfHwgIShjcCA9IHN0cmNocihlcCwgJz8nKSkpCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCisJCWlmIChjcCArIDMgLSBpdC0+YnVmID4gaXQtPmxlbikKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisJCXN0cmJ1Zl9hZGQoJmNoYXJzZXRfcSwgZXAsIGNwIC0gZXApOworCisJCWVuY29kaW5nID0gY3BbMV07CisJCWlmICghZW5jb2RpbmcgfHwgY3BbMl0gIT0gJz8nKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJZXAgPSBzdHJzdHIoY3AgKyAzLCAiPz0iKTsKKwkJaWYgKCFlcCkKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisJCXN0cmJ1Zl9hZGQoJnBpZWNlYnVmLCBjcCArIDMsIGVwIC0gY3AgLSAzKTsKKwkJc3dpdGNoICh0b2xvd2VyKGVuY29kaW5nKSkgeworCQlkZWZhdWx0OgorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJY2FzZSAnYic6CisJCQlkZWMgPSBkZWNvZGVfYl9zZWdtZW50KCZwaWVjZWJ1Zik7CisJCQlicmVhazsKKwkJY2FzZSAncSc6CisJCQlkZWMgPSBkZWNvZGVfcV9zZWdtZW50KCZwaWVjZWJ1ZiwgMSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY29udmVydF90b191dGY4KG1pLCBkZWMsIGNoYXJzZXRfcS5idWYpKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKworCQlzdHJidWZfYWRkYnVmKCZvdXRidWYsIGRlYyk7CisJCXN0cmJ1Zl9yZWxlYXNlKGRlYyk7CisJCWZyZWUoZGVjKTsKKwkJaW4gPSBlcCArIDI7CisJfQorCXN0cmJ1Zl9hZGRzdHIoJm91dGJ1ZiwgaW4pOworCXN0cmJ1Zl9yZXNldChpdCk7CisJc3RyYnVmX2FkZGJ1ZihpdCwgJm91dGJ1Zik7CisJZm91bmRfZXJyb3IgPSAwOworcmVsZWFzZV9yZXR1cm46CisJc3RyYnVmX3JlbGVhc2UoJm91dGJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmNoYXJzZXRfcSk7CisJc3RyYnVmX3JlbGVhc2UoJnBpZWNlYnVmKTsKKworCWlmIChmb3VuZF9lcnJvcikKKwkJbWktPmlucHV0X2Vycm9yID0gLTE7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgImxpbmUiIGNvbnRhaW5zIGEgaGVhZGVyIG1hdGNoaW5nICJoZHIiLCBpbiB3aGljaCBjYXNlICJ2YWwiCisgKiB3aWxsIGNvbnRhaW4gdGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgd2l0aCBhbnkgUkZDMjA0NyBCIGFuZCBRIGVuY29kaW5nCisgKiB1bndyYXBwZWQsIGFuZCBvcHRpb25hbGx5IG5vcm1hbGl6ZSB0aGUgbWV0YSBpbmZvcm1hdGlvbiB0byB1dGY4LgorICovCitzdGF0aWMgaW50IHBhcnNlX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lLAorCQkJY29uc3QgY2hhciAqaGRyLAorCQkJc3RydWN0IG1haWxpbmZvICptaSwKKwkJCXN0cnVjdCBzdHJidWYgKnZhbCkKK3sKKwljb25zdCBjaGFyICp2YWxfc3RyOworCisJaWYgKCFza2lwX2hlYWRlcihsaW5lLCBoZHIsICZ2YWxfc3RyKSkKKwkJcmV0dXJuIDA7CisJc3RyYnVmX2FkZHN0cih2YWwsIHZhbF9zdHIpOworCWRlY29kZV9oZWFkZXIobWksIHZhbCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaGVhZGVyKHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQljb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lLAorCQkJc3RydWN0IHN0cmJ1ZiAqaGRyX2RhdGFbXSwgaW50IG92ZXJ3cml0ZSkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBzZWFyY2ggZm9yIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyAqLworCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CisJCWlmICgoIWhkcl9kYXRhW2ldIHx8IG92ZXJ3cml0ZSkgJiYKKwkJICAgIHBhcnNlX2hlYWRlcihsaW5lLCBoZWFkZXJbaV0sIG1pLCAmc2IpKSB7CisJCQloYW5kbGVfaGVhZGVyKCZoZHJfZGF0YVtpXSwgJnNiKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJCX0KKwl9CisKKwkvKiBDb250ZW50IHN0dWZmICovCisJaWYgKHBhcnNlX2hlYWRlcihsaW5lLCAiQ29udGVudC1UeXBlIiwgbWksICZzYikpIHsKKwkJaGFuZGxlX2NvbnRlbnRfdHlwZShtaSwgJnNiKTsKKwkJcmV0ID0gMTsKKwkJZ290byBjaGVja19oZWFkZXJfb3V0OworCX0KKwlpZiAocGFyc2VfaGVhZGVyKGxpbmUsICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIiwgbWksICZzYikpIHsKKwkJaGFuZGxlX2NvbnRlbnRfdHJhbnNmZXJfZW5jb2RpbmcobWksICZzYik7CisJCXJldCA9IDE7CisJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwl9CisJaWYgKHBhcnNlX2hlYWRlcihsaW5lLCAiTWVzc2FnZS1JZCIsIG1pLCAmc2IpKSB7CisJCWlmIChtaS0+YWRkX21lc3NhZ2VfaWQpCisJCQltaS0+bWVzc2FnZV9pZCA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJcmV0ID0gMTsKKwkJZ290byBjaGVja19oZWFkZXJfb3V0OworCX0KKworY2hlY2tfaGVhZGVyX291dDoKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgdGhlIGdpdmVuIGxpbmUgb3IgYW55IGxpbmUgYmVnaW5uaW5nIHdpdGggdGhlIGdpdmVuIGxpbmUgaXMgYW4KKyAqIGluLWJvZHkgaGVhZGVyICh0aGF0IGlzLCBjaGVja19oZWFkZXIgd2lsbCBzdWNjZWVkIHdoZW4gcGFzc2VkCisgKiBtaS0+c19oZHJfZGF0YSkuCisgKi8KK3N0YXRpYyBpbnQgaXNfaW5ib2R5X2hlYWRlcihjb25zdCBzdHJ1Y3QgbWFpbGluZm8gKm1pLAorCQkJICAgIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqdmFsOworCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKQorCQlpZiAoIW1pLT5zX2hkcl9kYXRhW2ldICYmIHNraXBfaGVhZGVyKGxpbmUsIGhlYWRlcltpXSwgJnZhbCkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX3RyYW5zZmVyX2VuY29kaW5nKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiAqcmV0OworCisJc3dpdGNoIChtaS0+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+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/CisJICoKKwkgKiBOT1RFISBUaGlzIGRlcGVuZHMgb24gdGhlIGNhbGxlciBoYXZpbmcgZG9uZSB0aGUKKwkgKiBwcm9wZXIgd2FybmluZyBhYm91dCByZW1vdmluZyBhIGZpbGUgdGhhdCBnb3QKKwkgKiBtb2RpZmllZCBpbiB0aGUgb3RoZXIgYnJhbmNoIQorCSAqLworCWlmICghb3VyIHx8ICF0aGVpcikgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCWlmIChiYXNlKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICghb3VyKQorCQkJb3VyID0gdGhlaXI7CisJCXJldHVybiByZWFkX29iamVjdF9maWxlKCZvdXItPm9iamVjdC5vaWQsICZ0eXBlLCBzaXplKTsKKwl9CisKKwlpZiAoZmlsbF9tbWZpbGVfYmxvYigmZjEsIG91cikgPCAwKQorCQlnb3RvIG91dF9ub19tbWZpbGU7CisJaWYgKGZpbGxfbW1maWxlX2Jsb2IoJmYyLCB0aGVpcikgPCAwKQorCQlnb3RvIG91dF9mcmVlX2YxOworCisJaWYgKGJhc2UpIHsKKwkJaWYgKGZpbGxfbW1maWxlX2Jsb2IoJmNvbW1vbiwgYmFzZSkgPCAwKQorCQkJZ290byBvdXRfZnJlZV9mMl9mMTsKKwl9IGVsc2UgeworCQljb21tb24ucHRyID0geHN0cmR1cCgiIik7CisJCWNvbW1vbi5zaXplID0gMDsKKwl9CisJcmVzID0gdGhyZWVfd2F5X2ZpbGVtZXJnZShpc3RhdGUsIHBhdGgsICZjb21tb24sICZmMSwgJmYyLCBzaXplKTsKKwlmcmVlX21tZmlsZSgmY29tbW9uKTsKK291dF9mcmVlX2YyX2YxOgorCWZyZWVfbW1maWxlKCZmMik7CitvdXRfZnJlZV9mMToKKwlmcmVlX21tZmlsZSgmZjEpOworb3V0X25vX21tZmlsZToKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtYmxvYnMuaCBiL21lcmdlLWJsb2JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLWJsb2JzLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBNRVJHRV9CTE9CU19ICisjZGVmaW5lIE1FUkdFX0JMT0JTX0gKKworc3RydWN0IGJsb2I7CitzdHJ1Y3QgaW5kZXhfc3RhdGU7CisKK3ZvaWQgKm1lcmdlX2Jsb2JzKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICosCisJCSAgc3RydWN0IGJsb2IgKiwgc3RydWN0IGJsb2IgKiwKKwkJICBzdHJ1Y3QgYmxvYiAqLCB1bnNpZ25lZCBsb25nICopOworCisjZW5kaWYgLyogTUVSR0VfQkxPQlNfSCAqLwpkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmMgYi9tZXJnZS1yZWN1cnNpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTRlNmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2UtcmVjdXJzaXZlLmMKQEAgLTAsMCArMSwzODkyIEBACisvKgorICogUmVjdXJzaXZlIE1lcmdlIGFsZ29yaXRobSBzdG9sZW4gZnJvbSBnaXQtbWVyZ2UtcmVjdXJzaXZlLnB5IGJ5CisgKiBGcmVkcmlrIEt1aXZpbmVuLgorICogVGhlIHRoaWV2ZXMgd2VyZSBBbGV4IFJpZXNlbiBhbmQgSm9oYW5uZXMgU2NoaW5kZWxpbiwgaW4gSnVuZS9KdWx5IDIwMDYKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisKKyNpbmNsdWRlICJhZHZpY2UuaCIKKyNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKworc3RydWN0IG1lcmdlX29wdGlvbnNfaW50ZXJuYWwgeworCWludCBjYWxsX2RlcHRoOworCWludCBuZWVkZWRfcmVuYW1lX2xpbWl0OworCXN0cnVjdCBoYXNobWFwIGN1cnJlbnRfZmlsZV9kaXJfc2V0OworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZl9jb25mbGljdF9maWxlX3NldDsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgdW5wYWNrX29wdHM7CisJc3RydWN0IGluZGV4X3N0YXRlIG9yaWdfaW5kZXg7Cit9OworCitzdHJ1Y3QgcGF0aF9oYXNobWFwX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlOworCWNoYXIgcGF0aFtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgcGF0aF9oYXNobWFwX2NtcChjb25zdCB2b2lkICpjbXBfZGF0YSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICAgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHBhdGhfaGFzaG1hcF9lbnRyeSAqYSwgKmI7CisJY29uc3QgY2hhciAqa2V5ID0ga2V5ZGF0YTsKKworCWEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IHBhdGhfaGFzaG1hcF9lbnRyeSwgZSk7CisJYiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBwYXRoX2hhc2htYXBfZW50cnksIGUpOworCisJaWYgKGlnbm9yZV9jYXNlKQorCQlyZXR1cm4gc3RyY2FzZWNtcChhLT5wYXRoLCBrZXkgPyBrZXkgOiBiLT5wYXRoKTsKKwllbHNlCisJCXJldHVybiBzdHJjbXAoYS0+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+bW9kZSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgc3RyYnVmID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUob3B0LT5yZXBvLT5pbmRleCwKKwkJCQkJCSAgICBwYXRoLCBidWYsIHNpemUsICZzdHJidWYpKSB7CisJCQkJZnJlZShidWYpOworCQkJCXNpemUgPSBzdHJidWYubGVuOworCQkJCWJ1ZiA9IHN0cmJ1Zl9kZXRhY2goJnN0cmJ1ZiwgTlVMTCk7CisJCQl9CisJCX0KKworCQlpZiAobWFrZV9yb29tX2Zvcl9wYXRoKG9wdCwgcGF0aCkgPCAwKSB7CisJCQl1cGRhdGVfd2QgPSAwOworCQkJZ290byBmcmVlX2J1ZjsKKwkJfQorCQlpZiAoU19JU1JFRyhjb250ZW50cy0+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+Y2FsbF9kZXB0aCAmJgorCQkgICAgdXBkYXRlX3N0YWdlcyhvcHQsIGEtPnBhdGgsIE5VTEwsIGEsIE5VTEwpKQorCQkJcmV0dXJuIC0xOworCX0KKworCWFkZCA9ICZjaS0+cmVuMi0+ZHN0X2VudHJ5LT5zdGFnZXNbZmxpcF9zdGFnZSgzKV07CisJaWYgKGlzX3ZhbGlkKGFkZCkpIHsKKwkJYWRkLT5wYXRoID0gbWZpLmJsb2IucGF0aCA9IGItPnBhdGg7CisJCWlmIChoYW5kbGVfZmlsZV9jb2xsaXNpb24ob3B0LCBiLT5wYXRoLAorCQkJCQkgIE5VTEwsIE5VTEwsCisJCQkJCSAgY2ktPnJlbjEtPmJyYW5jaCwKKwkJCQkJICBjaS0+cmVuMi0+YnJhbmNoLAorCQkJCQkgIGFkZCwgJm1maS5ibG9iKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJY2hhciAqbmV3X3BhdGggPSBmaW5kX3BhdGhfZm9yX2NvbmZsaWN0KG9wdCwgYi0+cGF0aCwKKwkJCQkJCQljaS0+cmVuMi0+YnJhbmNoLAorCQkJCQkJCWNpLT5yZW4xLT5icmFuY2gpOworCQlpZiAodXBkYXRlX2ZpbGUob3B0LCAwLCAmbWZpLmJsb2IsCisJCQkJbmV3X3BhdGggPyBuZXdfcGF0aCA6IGItPnBhdGgpKQorCQkJcmV0dXJuIC0xOworCQlmcmVlKG5ld19wYXRoKTsKKwkJaWYgKCFvcHQtPnByaXYtPmNhbGxfZGVwdGggJiYKKwkJICAgIHVwZGF0ZV9zdGFnZXMob3B0LCBiLT5wYXRoLCBOVUxMLCBOVUxMLCBiKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfcmVuYW1lX3JlbmFtZV8ydG8xKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJICAgICBzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpKQoreworCS8qIFR3byBmaWxlcywgYSAmIGIsIHdlcmUgcmVuYW1lZCB0byB0aGUgc2FtZSB0aGluZywgYy4gKi8KKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSA9IGNpLT5yZW4xLT5wYWlyLT5vbmU7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIgPSBjaS0+cmVuMi0+cGFpci0+b25lOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjMSA9IGNpLT5yZW4xLT5wYWlyLT50d287CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmMyID0gY2ktPnJlbjItPnBhaXItPnR3bzsKKwljaGFyICpwYXRoID0gYzEtPnBhdGg7IC8qID09IGMyLT5wYXRoICovCisJY2hhciAqcGF0aF9zaWRlXzFfZGVzYzsKKwljaGFyICpwYXRoX3NpZGVfMl9kZXNjOworCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpX2MxOworCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpX2MyOworCWludCBvc3RhZ2UxLCBvc3RhZ2UyOworCisJb3V0cHV0KG9wdCwgMSwgXygiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiAiCisJICAgICAgICJSZW5hbWUgJXMtPiVzIGluICVzLiAiCisJICAgICAgICJSZW5hbWUgJXMtPiVzIGluICVzIiksCisJICAgICAgIGEtPnBhdGgsIGMxLT5wYXRoLCBjaS0+cmVuMS0+YnJhbmNoLAorCSAgICAgICBiLT5wYXRoLCBjMi0+cGF0aCwgY2ktPnJlbjItPmJyYW5jaCk7CisKKwlwYXRoX3NpZGVfMV9kZXNjID0geHN0cmZtdCgidmVyc2lvbiBvZiAlcyBmcm9tICVzIiwgcGF0aCwgYS0+cGF0aCk7CisJcGF0aF9zaWRlXzJfZGVzYyA9IHhzdHJmbXQoInZlcnNpb24gb2YgJXMgZnJvbSAlcyIsIHBhdGgsIGItPnBhdGgpOworCW9zdGFnZTEgPSBjaS0+cmVuMS0+YnJhbmNoID09IG9wdC0+YnJhbmNoMSA/IDMgOiAyOworCW9zdGFnZTIgPSBmbGlwX3N0YWdlKG9zdGFnZTEpOworCWNpLT5yZW4xLT5zcmNfZW50cnktPnN0YWdlc1tvc3RhZ2UxXS5wYXRoID0gYS0+cGF0aDsKKwljaS0+cmVuMi0+c3JjX2VudHJ5LT5zdGFnZXNbb3N0YWdlMl0ucGF0aCA9IGItPnBhdGg7CisJaWYgKG1lcmdlX21vZGVfYW5kX2NvbnRlbnRzKG9wdCwgYSwgYzEsCisJCQkJICAgICZjaS0+cmVuMS0+c3JjX2VudHJ5LT5zdGFnZXNbb3N0YWdlMV0sCisJCQkJICAgIHBhdGhfc2lkZV8xX2Rlc2MsCisJCQkJICAgIG9wdC0+YnJhbmNoMSwgb3B0LT5icmFuY2gyLAorCQkJCSAgICAxICsgb3B0LT5wcml2LT5jYWxsX2RlcHRoICogMiwgJm1maV9jMSkgfHwKKwkgICAgbWVyZ2VfbW9kZV9hbmRfY29udGVudHMob3B0LCBiLAorCQkJCSAgICAmY2ktPnJlbjItPnNyY19lbnRyeS0+c3RhZ2VzW29zdGFnZTJdLAorCQkJCSAgICBjMiwgcGF0aF9zaWRlXzJfZGVzYywKKwkJCQkgICAgb3B0LT5icmFuY2gxLCBvcHQtPmJyYW5jaDIsCisJCQkJICAgIDEgKyBvcHQtPnByaXYtPmNhbGxfZGVwdGggKiAyLCAmbWZpX2MyKSkKKwkJcmV0dXJuIC0xOworCWZyZWUocGF0aF9zaWRlXzFfZGVzYyk7CisJZnJlZShwYXRoX3NpZGVfMl9kZXNjKTsKKwltZmlfYzEuYmxvYi5wYXRoID0gcGF0aDsKKwltZmlfYzIuYmxvYi5wYXRoID0gcGF0aDsKKworCXJldHVybiBoYW5kbGVfZmlsZV9jb2xsaXNpb24ob3B0LCBwYXRoLCBhLT5wYXRoLCBiLT5wYXRoLAorCQkJCSAgICAgY2ktPnJlbjEtPmJyYW5jaCwgY2ktPnJlbjItPmJyYW5jaCwKKwkJCQkgICAgICZtZmlfYzEuYmxvYiwgJm1maV9jMi5ibG9iKTsKK30KKworLyoKKyAqIEdldCB0aGUgZGlmZl9maWxlcGFpcnMgY2hhbmdlZCBiZXR3ZWVuIG9fdHJlZSBhbmQgdHJlZS4KKyAqLworc3RhdGljIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqZ2V0X2RpZmZwYWlycyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCQkgICAgICAgc3RydWN0IHRyZWUgKm9fdHJlZSwKKwkJCQkJICAgICAgIHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcmV0OworCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKworCXJlcG9fZGlmZl9zZXR1cChvcHQtPnJlcG8sICZvcHRzKTsKKwlvcHRzLmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJb3B0cy5mbGFncy5yZW5hbWVfZW1wdHkgPSAwOworCW9wdHMuZGV0ZWN0X3JlbmFtZSA9IG1lcmdlX2RldGVjdF9yZW5hbWUob3B0KTsKKwkvKgorCSAqIFdlIGRvIG5vdCBoYXZlIGxvZ2ljIHRvIGhhbmRsZSB0aGUgZGV0ZWN0aW9uIG9mIGNvcGllcy4gIEluCisJICogZmFjdCwgaXQgbWF5IG5vdCBldmVuIG1ha2Ugc2Vuc2UgdG8gYWRkIHN1Y2ggbG9naWM6IHdvdWxkIHdlCisJICogcmVhbGx5IHdhbnQgYSBjaGFuZ2UgdG8gYSBiYXNlIGZpbGUgdG8gYmUgcHJvcGFnYXRlZCB0aHJvdWdoCisJICogbXVsdGlwbGUgb3RoZXIgZmlsZXMgYnkgYSBtZXJnZT8KKwkgKi8KKwlpZiAob3B0cy5kZXRlY3RfcmVuYW1lID4gRElGRl9ERVRFQ1RfUkVOQU1FKQorCQlvcHRzLmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7CisJb3B0cy5yZW5hbWVfbGltaXQgPSAob3B0LT5yZW5hbWVfbGltaXQgPj0gMCkgPyBvcHQtPnJlbmFtZV9saW1pdCA6IDEwMDA7CisJb3B0cy5yZW5hbWVfc2NvcmUgPSBvcHQtPnJlbmFtZV9zY29yZTsKKwlvcHRzLnNob3dfcmVuYW1lX3Byb2dyZXNzID0gb3B0LT5zaG93X3JlbmFtZV9wcm9ncmVzczsKKwlvcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKKwlkaWZmX3RyZWVfb2lkKCZvX3RyZWUtPm9iamVjdC5vaWQsICZ0cmVlLT5vYmplY3Qub2lkLCAiIiwgJm9wdHMpOworCWRpZmZjb3JlX3N0ZCgmb3B0cyk7CisJaWYgKG9wdHMubmVlZGVkX3JlbmFtZV9saW1pdCA+IG9wdC0+cHJpdi0+bmVlZGVkX3JlbmFtZV9saW1pdCkKKwkJb3B0LT5wcml2LT5uZWVkZWRfcmVuYW1lX2xpbWl0ID0gb3B0cy5uZWVkZWRfcmVuYW1lX2xpbWl0OworCisJcmV0ID0geG1hbGxvYyhzaXplb2YoKnJldCkpOworCSpyZXQgPSBkaWZmX3F1ZXVlZF9kaWZmOworCisJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCWRpZmZfcXVldWVkX2RpZmYubnIgPSAwOworCWRpZmZfcXVldWVkX2RpZmYucXVldWUgPSBOVUxMOworCWRpZmZfZmx1c2goJm9wdHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHJlZV9oYXNfcGF0aChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhhc2h5OworCXVuc2lnbmVkIHNob3J0IG1vZGVfbzsKKworCXJldHVybiAhZ2V0X3RyZWVfZW50cnkociwKKwkJCSAgICAgICAmdHJlZS0+b2JqZWN0Lm9pZCwgcGF0aCwKKwkJCSAgICAgICAmaGFzaHksICZtb2RlX28pOworfQorCisvKgorICogUmV0dXJuIGEgbmV3IHN0cmluZyB0aGF0IHJlcGxhY2VzIHRoZSBiZWdpbm5pbmcgcG9ydGlvbiAod2hpY2ggbWF0Y2hlcworICogZW50cnktPmRpciksIHdpdGggZW50cnktPm5ld19kaXIuICBJbiBwZXJsLXNwZWFrOgorICogICBuZXdfcGF0aF9uYW1lID0gKG9sZF9wYXRoID1+IHMvZW50cnktPmRpci9lbnRyeS0+bmV3X2Rpci8pOworICogTk9URToKKyAqICAgQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgb2xkX3BhdGggc3RhcnRzIHdpdGggZW50cnktPmRpciArICcvJy4KKyAqLworc3RhdGljIGNoYXIgKmFwcGx5X2Rpcl9yZW5hbWUoc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmVudHJ5LAorCQkJICAgICAgY29uc3QgY2hhciAqb2xkX3BhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBuZXdfcGF0aCA9IFNUUkJVRl9JTklUOworCWludCBvbGRsZW4sIG5ld2xlbjsKKworCWlmIChlbnRyeS0+bm9uX3VuaXF1ZV9uZXdfZGlyKQorCQlyZXR1cm4gTlVMTDsKKworCW9sZGxlbiA9IHN0cmxlbihlbnRyeS0+ZGlyKTsKKwlpZiAoZW50cnktPm5ld19kaXIubGVuID09IDApCisJCS8qCisJCSAqIElmIHNvbWVvbmUgcmVuYW1lZC9tZXJnZWQgYSBzdWJkaXJlY3RvcnkgaW50byB0aGUgcm9vdAorCQkgKiBkaXJlY3RvcnkgKGUuZy4gJ3NvbWUvc3ViZGlyJyAtPiAnJyksIHRoZW4gd2Ugd2FudCB0bworCQkgKiBhdm9pZCByZXR1cm5pbmcKKwkJICogICAgICcnICsgJy9maWxlbmFtZScKKwkJICogYXMgdGhlIHJlbmFtZTsgd2UgbmVlZCB0byBtYWtlIG9sZF9wYXRoICsgb2xkbGVuIGFkdmFuY2UKKwkJICogcGFzdCB0aGUgJy8nIGNoYXJhY3Rlci4KKwkJICovCisJCW9sZGxlbisrOworCW5ld2xlbiA9IGVudHJ5LT5uZXdfZGlyLmxlbiArIChzdHJsZW4ob2xkX3BhdGgpIC0gb2xkbGVuKSArIDE7CisJc3RyYnVmX2dyb3coJm5ld19wYXRoLCBuZXdsZW4pOworCXN0cmJ1Zl9hZGRidWYoJm5ld19wYXRoLCAmZW50cnktPm5ld19kaXIpOworCXN0cmJ1Zl9hZGRzdHIoJm5ld19wYXRoLCAmb2xkX3BhdGhbb2xkbGVuXSk7CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmbmV3X3BhdGgsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBnZXRfcmVuYW1lZF9kaXJfcG9ydGlvbihjb25zdCBjaGFyICpvbGRfcGF0aCwgY29uc3QgY2hhciAqbmV3X3BhdGgsCisJCQkJICAgIGNoYXIgKipvbGRfZGlyLCBjaGFyICoqbmV3X2RpcikKK3sKKwljaGFyICplbmRfb2Zfb2xkLCAqZW5kX29mX25ldzsKKworCS8qIERlZmF1bHQgcmV0dXJuIHZhbHVlczogTlVMTCwgbWVhbmluZyBubyByZW5hbWUgKi8KKwkqb2xkX2RpciA9IE5VTEw7CisJKm5ld19kaXIgPSBOVUxMOworCisJLyoKKwkgKiBGb3IKKwkgKiAgICAiYS9iL2MvZC9lL2Zvby5jIiAtPiAiYS9iL3NvbWUvdGhpbmcvZWxzZS9lL2Zvby5jIgorCSAqIHRoZSAiZS9mb28uYyIgcGFydCBpcyB0aGUgc2FtZSwgd2UganVzdCB3YW50IHRvIGtub3cgdGhhdAorCSAqICAgICJhL2IvYy9kIiB3YXMgcmVuYW1lZCB0byAiYS9iL3NvbWUvdGhpbmcvZWxzZSIKKwkgKiBzbywgZm9yIHRoaXMgZXhhbXBsZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zICJhL2IvYy9kIiBpbgorCSAqICpvbGRfZGlyIGFuZCAiYS9iL3NvbWUvdGhpbmcvZWxzZSIgaW4gKm5ld19kaXIuCisJICovCisKKwkvKgorCSAqIElmIHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSBjaGFuZ2VkLCB3ZSBkb24ndCBjYXJlLiAgV2Ugd2FudAorCSAqIHRvIGtub3cgd2hpY2ggcG9ydGlvbiBvZiB0aGUgZGlyZWN0b3J5LCBpZiBhbnksIGNoYW5nZWQuCisJICovCisJZW5kX29mX29sZCA9IHN0cnJjaHIob2xkX3BhdGgsICcvJyk7CisJZW5kX29mX25ldyA9IHN0cnJjaHIobmV3X3BhdGgsICcvJyk7CisKKwkvKgorCSAqIElmIGVuZF9vZl9vbGQgaXMgTlVMTCwgb2xkX3BhdGggd2Fzbid0IGluIGEgZGlyZWN0b3J5LCBzbyB0aGVyZQorCSAqIGNvdWxkIG5vdCBiZSBhIGRpcmVjdG9yeSByZW5hbWUgKG91ciBydWxlIGVsc2V3aGVyZSB0aGF0IGEKKwkgKiBkaXJlY3Rvcnkgd2hpY2ggc3RpbGwgZXhpc3RzIGlzIG5vdCBjb25zaWRlcmVkIHRvIGhhdmUgYmVlbgorCSAqIHJlbmFtZWQgbWVhbnMgdGhlIHJvb3QgZGlyZWN0b3J5IGNhbiBuZXZlciBiZSByZW5hbWVkIC0tIGJlY2F1c2UKKwkgKiB0aGUgcm9vdCBkaXJlY3RvcnkgYWx3YXlzIGV4aXN0cykuCisJICovCisJaWYgKGVuZF9vZl9vbGQgPT0gTlVMTCkKKwkJcmV0dXJuOyAvKiBOb3RlOiAqb2xkX2RpciBhbmQgKm5ld19kaXIgYXJlIHN0aWxsIE5VTEwgKi8KKworCS8qCisJICogSWYgbmV3X3BhdGggY29udGFpbnMgbm8gZGlyZWN0b3J5IChlbmRfb2ZfbmV3IGlzIE5VTEwpLCB0aGVuIHdlCisJICogaGF2ZSBhIHJlbmFtZSBvZiBvbGRfcGF0aCdzIGRpcmVjdG9yeSB0byB0aGUgcm9vdCBkaXJlY3RvcnkuCisJICovCisJaWYgKGVuZF9vZl9uZXcgPT0gTlVMTCkgeworCQkqb2xkX2RpciA9IHhzdHJuZHVwKG9sZF9wYXRoLCBlbmRfb2Zfb2xkIC0gb2xkX3BhdGgpOworCQkqbmV3X2RpciA9IHhzdHJkdXAoIiIpOworCQlyZXR1cm47CisJfQorCisJLyogRmluZCB0aGUgZmlyc3Qgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciB0cmF2ZXJzaW5nIGJhY2t3YXJkcyAqLworCXdoaWxlICgqLS1lbmRfb2ZfbmV3ID09ICotLWVuZF9vZl9vbGQgJiYKKwkgICAgICAgZW5kX29mX29sZCAhPSBvbGRfcGF0aCAmJgorCSAgICAgICBlbmRfb2ZfbmV3ICE9IG5ld19wYXRoKQorCQk7IC8qIERvIG5vdGhpbmc7IGFsbCBpbiB0aGUgd2hpbGUgbG9vcCAqLworCisJLyoKKwkgKiBJZiBib3RoIGdvdCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlaXIgc3RyaW5ncywgdGhlbiB0aGUKKwkgKiBkaXJlY3RvcnkgZGlkbid0IGNoYW5nZSBhdCBhbGwsIG9ubHkgdGhlIGJhc2VuYW1lIGRpZC4KKwkgKi8KKwlpZiAoZW5kX29mX29sZCA9PSBvbGRfcGF0aCAmJiBlbmRfb2ZfbmV3ID09IG5ld19wYXRoICYmCisJICAgICplbmRfb2Zfb2xkID09ICplbmRfb2ZfbmV3KQorCQlyZXR1cm47IC8qIE5vdGU6ICpvbGRfZGlyIGFuZCAqbmV3X2RpciBhcmUgc3RpbGwgTlVMTCAqLworCisJLyoKKwkgKiBJZiBlbmRfb2ZfbmV3IGdvdCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgaXRzIHN0cmluZywgYW5kCisJICogZW5kX29mX29sZCBnb3QgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHNvbWUgc3ViZGlyZWN0b3J5LCB0aGVuCisJICogd2UgaGF2ZSBhIHJlbmFtZS9tZXJnZSBvZiBhIHN1YmRpcmVjdG9yeSBpbnRvIHRoZSByb290LCB3aGljaAorCSAqIG5lZWRzIHNsaWdodGx5IHNwZWNpYWwgaGFuZGxpbmcuCisJICoKKwkgKiBOb3RlOiBUaGVyZSBpcyBubyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBvcHBvc2l0ZSBjYXNlLCB3aXRoIGEKKwkgKiByZW5hbWUvbWVyZ2Ugb2YgdGhlIHJvb3QgZGlyZWN0b3J5IGludG8gc29tZSBzdWJkaXJlY3RvcnkKKwkgKiBiZWNhdXNlIGFzIG5vdGVkIGFib3ZlIHRoZSByb290IGRpcmVjdG9yeSBhbHdheXMgZXhpc3RzIHNvIGl0CisJICogY2Fubm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgcmVuYW1lZC4KKwkgKi8KKwlpZiAoZW5kX29mX25ldyA9PSBuZXdfcGF0aCAmJgorCSAgICBlbmRfb2Zfb2xkICE9IG9sZF9wYXRoICYmIGVuZF9vZl9vbGRbLTFdID09ICcvJykgeworCQkqb2xkX2RpciA9IHhzdHJuZHVwKG9sZF9wYXRoLCAtLWVuZF9vZl9vbGQgLSBvbGRfcGF0aCk7CisJCSpuZXdfZGlyID0geHN0cmR1cCgiIik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlJ3ZlIGZvdW5kIHRoZSBmaXJzdCBub24tbWF0Y2hpbmcgY2hhcmFjdGVyIGluIHRoZSBkaXJlY3RvcnkKKwkgKiBwYXRocy4gIFRoYXQgbWVhbnMgdGhlIGN1cnJlbnQgY2hhcmFjdGVycyB3ZSB3ZXJlIGxvb2tpbmcgYXQKKwkgKiB3ZXJlIHBhcnQgb2YgdGhlIGZpcnN0IG5vbi1tYXRjaGluZyBzdWJkaXIgbmFtZSBnb2luZyBiYWNrIGZyb20KKwkgKiB0aGUgZW5kIG9mIHRoZSBzdHJpbmdzLiAgR2V0IHRoZSB3aG9sZSBuYW1lIGJ5IGFkdmFuY2luZyBib3RoCisJICogZW5kX29mX29sZCBhbmQgZW5kX29mX25ldyB0byB0aGUgTkVYVCAnLycgY2hhcmFjdGVyLiAgVGhhdCB3aWxsCisJICogcmVwcmVzZW50IHRoZSBlbnRpcmUgZGlyZWN0b3J5IHJlbmFtZS4KKwkgKgorCSAqIFRoZSByZWFzb24gZm9yIHRoZSBpbmNyZW1lbnQgaXMgY2FzZXMgbGlrZQorCSAqICAgIGEvYi9zdGFyL2Zvby93aGF0ZXZlci5jIC0+IGEvYi90YXIvZm9vL3JhbmRvbS5jCisJICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGJhc2VuYW1lIGFuZCBnb2luZyBiYWNrIHRvIHRoZSBmaXJzdAorCSAqIG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIsIHdlJ3JlIG5vdyBjb21wYXJpbmc6CisJICogICAgYS9iL3MgICAgICAgICAgYW5kICAgICAgICAgYS9iLworCSAqIGFuZCB3ZSB3YW50IHRvIGJlIGNvbXBhcmluZzoKKwkgKiAgICBhL2Ivc3Rhci8gICAgICBhbmQgICAgICAgICBhL2IvdGFyLworCSAqIGJ1dCB3aXRob3V0IHRoZSBwcmUtaW5jcmVtZW50LCB0aGUgb25lIG9uIHRoZSByaWdodCB3b3VsZCBzdGF5CisJICogYS9iLy4KKwkgKi8KKwllbmRfb2Zfb2xkID0gc3RyY2hyKCsrZW5kX29mX29sZCwgJy8nKTsKKwllbmRfb2ZfbmV3ID0gc3RyY2hyKCsrZW5kX29mX25ldywgJy8nKTsKKworCS8qIENvcHkgdGhlIG9sZCBhbmQgbmV3IGRpcmVjdG9yaWVzIGludG8gKm9sZF9kaXIgYW5kICpuZXdfZGlyLiAqLworCSpvbGRfZGlyID0geHN0cm5kdXAob2xkX3BhdGgsIGVuZF9vZl9vbGQgLSBvbGRfcGF0aCk7CisJKm5ld19kaXIgPSB4c3RybmR1cChuZXdfcGF0aCwgZW5kX29mX25ldyAtIG5ld19wYXRoKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2hhc2htYXBfZW50cmllcyhzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlbmFtZXMsCisJCQkJICAgc3RydWN0IHN0cmluZ19saXN0ICppdGVtc190b19yZW1vdmUpCit7CisJaW50IGk7CisJc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmVudHJ5OworCisJZm9yIChpID0gMDsgaSA8IGl0ZW1zX3RvX3JlbW92ZS0+bnI7IGkrKykgeworCQllbnRyeSA9IGl0ZW1zX3RvX3JlbW92ZS0+aXRlbXNbaV0udXRpbDsKKwkJaGFzaG1hcF9yZW1vdmUoZGlyX3JlbmFtZXMsICZlbnRyeS0+ZW50LCBOVUxMKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoaXRlbXNfdG9fcmVtb3ZlLCAwKTsKK30KKworLyoKKyAqIFNlZSBpZiB0aGVyZSBpcyBhIGRpcmVjdG9yeSByZW5hbWUgZm9yIHBhdGgsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGZpbGUKKyAqIGxldmVsIGNvbmZsaWN0cyBmb3IgdGhlIHJlbmFtZWQgbG9jYXRpb24uICBJZiB0aGVyZSBpcyBhIHJlbmFtZSBhbmQKKyAqIHRoZXJlIGFyZSBubyBjb25mbGljdHMsIHJldHVybiB0aGUgbmV3IG5hbWUuICBPdGhlcndpc2UsIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgY2hhciAqaGFuZGxlX3BhdGhfbGV2ZWxfY29uZmxpY3RzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmVudHJ5LAorCQkJCQkgc3RydWN0IGhhc2htYXAgKmNvbGxpc2lvbnMsCisJCQkJCSBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwljaGFyICpuZXdfcGF0aCA9IE5VTEw7CisJc3RydWN0IGNvbGxpc2lvbl9lbnRyeSAqY29sbGlzaW9uX2VudDsKKwlpbnQgY2xlYW4gPSAxOworCXN0cnVjdCBzdHJidWYgY29sbGlzaW9uX3BhdGhzID0gU1RSQlVGX0lOSVQ7CisKKwkvKgorCSAqIGVudHJ5IGhhcyB0aGUgbWFwcGluZyBvZiBvbGQgZGlyZWN0b3J5IG5hbWUgdG8gbmV3IGRpcmVjdG9yeSBuYW1lCisJICogdGhhdCB3ZSB3YW50IHRvIGFwcGx5IHRvIHBhdGguCisJICovCisJbmV3X3BhdGggPSBhcHBseV9kaXJfcmVuYW1lKGVudHJ5LCBwYXRoKTsKKworCWlmICghbmV3X3BhdGgpIHsKKwkJLyogVGhpcyBzaG91bGQgb25seSBoYXBwZW4gd2hlbiBlbnRyeS0+bm9uX3VuaXF1ZV9uZXdfZGlyIHNldCAqLworCQlpZiAoIWVudHJ5LT5ub25fdW5pcXVlX25ld19kaXIpCisJCQlCVUcoImVudHJ5LT5ub25fdW5xaXVlX2RpciBub3Qgc2V0IGFuZCAhbmV3X3BhdGgiKTsKKwkJb3V0cHV0KG9wdCwgMSwgXygiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiAiCisJCQkgICAgICAgIlVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSBkaXJlY3RvcnkgIgorCQkJICAgICAgICIlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3RvcmllcywgIgorCQkJICAgICAgICJ3aXRoIG5vIGRlc3RpbmF0aW9uIGdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgIgorCQkJICAgICAgICJmaWxlcy4iKSwKKwkJICAgICAgIHBhdGgsIGVudHJ5LT5kaXIpOworCQljbGVhbiA9IDA7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogVGhlIGNhbGxlciBuZWVkcyB0byBoYXZlIGVuc3VyZWQgdGhhdCBpdCBoYXMgcHJlLXBvcHVsYXRlZAorCSAqIGNvbGxpc2lvbnMgd2l0aCBhbGwgcGF0aHMgdGhhdCBtYXAgdG8gbmV3X3BhdGguICBEbyBhIHF1aWNrIGNoZWNrCisJICogdG8gZW5zdXJlIHRoYXQncyB0aGUgY2FzZS4KKwkgKi8KKwljb2xsaXNpb25fZW50ID0gY29sbGlzaW9uX2ZpbmRfZW50cnkoY29sbGlzaW9ucywgbmV3X3BhdGgpOworCWlmIChjb2xsaXNpb25fZW50ID09IE5VTEwpCisJCUJVRygiY29sbGlzaW9uX2VudCBpcyBOVUxMIik7CisKKwkvKgorCSAqIENoZWNrIGZvciBvbmUtc2lkZWQgYWRkL2FkZC8uLi4vYWRkIGNvbmZsaWN0cywgaS5lLgorCSAqIHdoZXJlIGltcGxpY2l0IHJlbmFtZXMgZnJvbSB0aGUgb3RoZXIgc2lkZSBkb2luZworCSAqIGRpcmVjdG9yeSByZW5hbWUocykgY2FuIGFmZmVjdCB0aGlzIHNpZGUgb2YgaGlzdG9yeQorCSAqIHRvIHB1dCBtdWx0aXBsZSBwYXRocyBpbnRvIHRoZSBzYW1lIGxvY2F0aW9uLiAgV2FybgorCSAqIGFuZCBiYWlsIG9uIGRpcmVjdG9yeSByZW5hbWVzIGZvciBzdWNoIHBhdGhzLgorCSAqLworCWlmIChjb2xsaXNpb25fZW50LT5yZXBvcnRlZF9hbHJlYWR5KSB7CisJCWNsZWFuID0gMDsKKwl9IGVsc2UgaWYgKHRyZWVfaGFzX3BhdGgob3B0LT5yZXBvLCB0cmVlLCBuZXdfcGF0aCkpIHsKKwkJY29sbGlzaW9uX2VudC0+cmVwb3J0ZWRfYWxyZWFkeSA9IDE7CisJCXN0cmJ1Zl9hZGRfc2VwYXJhdGVkX3N0cmluZ19saXN0KCZjb2xsaXNpb25fcGF0aHMsICIsICIsCisJCQkJCQkgJmNvbGxpc2lvbl9lbnQtPnNvdXJjZV9maWxlcyk7CisJCW91dHB1dChvcHQsIDEsIF8oIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogRXhpc3RpbmcgIgorCQkJICAgICAgICJmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mIGltcGxpY2l0ICIKKwkJCSAgICAgICAiZGlyZWN0b3J5IHJlbmFtZShzKSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcgIgorCQkJICAgICAgICJwYXRoKHMpIHRoZXJlOiAlcy4iKSwKKwkJICAgICAgIG5ld19wYXRoLCBjb2xsaXNpb25fcGF0aHMuYnVmKTsKKwkJY2xlYW4gPSAwOworCX0gZWxzZSBpZiAoY29sbGlzaW9uX2VudC0+c291cmNlX2ZpbGVzLm5yID4gMSkgeworCQljb2xsaXNpb25fZW50LT5yZXBvcnRlZF9hbHJlYWR5ID0gMTsKKwkJc3RyYnVmX2FkZF9zZXBhcmF0ZWRfc3RyaW5nX2xpc3QoJmNvbGxpc2lvbl9wYXRocywgIiwgIiwKKwkJCQkJCSAmY29sbGlzaW9uX2VudC0+c291cmNlX2ZpbGVzKTsKKwkJb3V0cHV0KG9wdCwgMSwgXygiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwICIKKwkJCSAgICAgICAibW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyBpbXBsaWNpdCBkaXJlY3RvcnkgIgorCQkJICAgICAgICJyZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiKSwKKwkJICAgICAgIG5ld19wYXRoLCBjb2xsaXNpb25fcGF0aHMuYnVmKTsKKwkJY2xlYW4gPSAwOworCX0KKworCS8qIEZyZWUgbWVtb3J5IHdlIG5vIGxvbmdlciBuZWVkICovCisJc3RyYnVmX3JlbGVhc2UoJmNvbGxpc2lvbl9wYXRocyk7CisJaWYgKCFjbGVhbiAmJiBuZXdfcGF0aCkgeworCQlmcmVlKG5ld19wYXRoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIG5ld19wYXRoOworfQorCisvKgorICogVGhlcmUgYXJlIGEgY291cGxlIHRoaW5ncyB3ZSB3YW50IHRvIGRvIGF0IHRoZSBkaXJlY3RvcnkgbGV2ZWw6CisgKiAgIDEuIENoZWNrIGZvciBib3RoIHNpZGVzIHJlbmFtaW5nIHRvIHRoZSBzYW1lIHRoaW5nLCBpbiBvcmRlciB0byBhdm9pZAorICogICAgICBpbXBsaWNpdCByZW5hbWluZyBvZiBmaWxlcyB0aGF0IHNob3VsZCBiZSBsZWZ0IGluIHBsYWNlLiAgKFNlZQorICogICAgICB0ZXN0Y2FzZSA2YiBpbiB0NjA0MyBmb3IgZGV0YWlscy4pCisgKiAgIDIuIFBydW5lIGRpcmVjdG9yeSByZW5hbWVzIGlmIHRoZXJlIGFyZSBzdGlsbCBmaWxlcyBsZWZ0IGluIHRoZQorICogICAgICB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5LiAgVGhlc2UgcmVwcmVzZW50IGEgcGFydGlhbCBkaXJlY3RvcnkgcmVuYW1lLAorICogICAgICBpLmUuIGEgcmVuYW1lIHdoZXJlIG9ubHkgc29tZSBvZiB0aGUgZmlsZXMgd2l0aGluIHRoZSBkaXJlY3RvcnkKKyAqICAgICAgd2VyZSByZW5hbWVkIGVsc2V3aGVyZS4gIChUZWNobmljYWxseSwgdGhpcyBjb3VsZCBiZSBkb25lIGVhcmxpZXIKKyAqICAgICAgaW4gZ2V0X2RpcmVjdG9yeV9yZW5hbWVzKCksIGV4Y2VwdCB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbQorICogICAgICBkb2luZyB0aGUgcHJldmlvdXMgY2hlY2sgYW5kIHRodXMgZmFpbGluZyB0ZXN0Y2FzZSA2Yi4pCisgKiAgIDMuIENoZWNrIGZvciByZW5hbWUvcmVuYW1lKDF0bzIpIGNvbmZsaWN0cyAoYXQgdGhlIGRpcmVjdG9yeSBsZXZlbCkuCisgKiAgICAgIEluIHRoZSBmdXR1cmUsIHdlIGNvdWxkIHBvdGVudGlhbGx5IHJlY29yZCB0aGlzIGluZm8gYXMgd2VsbCBhbmQKKyAqICAgICAgb21pdCByZXBvcnRpbmcgcmVuYW1lL3JlbmFtZSgxdG8yKSBjb25mbGljdHMgZm9yIGVhY2ggcGF0aCB3aXRoaW4KKyAqICAgICAgdGhlIGFmZmVjdGVkIGRpcmVjdG9yaWVzLCB0aHVzIGNsZWFuaW5nIHVwIHRoZSBtZXJnZSBvdXRwdXQuCisgKiAgIE5PVEU6IFdlIGRvIE5PVCBjaGVjayBmb3IgcmVuYW1lL3JlbmFtZSgydG8xKSBjb25mbGljdHMgYXQgdGhlCisgKiAgICAgICAgIGRpcmVjdG9yeSBsZXZlbCwgYmVjYXVzZSBtZXJnaW5nIGRpcmVjdG9yaWVzIGlzIGZpbmUuICBJZiBpdAorICogICAgICAgICBjYXVzZXMgY29uZmxpY3RzIGZvciBmaWxlcyB3aXRoaW4gdGhvc2UgbWVyZ2VkIGRpcmVjdG9yaWVzLCB0aGVuCisgKiAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGRldGVjdGVkIGF0IHRoZSBpbmRpdmlkdWFsIHBhdGggbGV2ZWwuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9kaXJlY3RvcnlfbGV2ZWxfY29uZmxpY3RzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJCSAgICAgc3RydWN0IGhhc2htYXAgKmRpcl9yZV9oZWFkLAorCQkJCQkgICAgIHN0cnVjdCB0cmVlICpoZWFkLAorCQkJCQkgICAgIHN0cnVjdCBoYXNobWFwICpkaXJfcmVfbWVyZ2UsCisJCQkJCSAgICAgc3RydWN0IHRyZWUgKm1lcmdlKQoreworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSAqaGVhZF9lbnQ7CisJc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKm1lcmdlX2VudDsKKworCXN0cnVjdCBzdHJpbmdfbGlzdCByZW1vdmVfZnJvbV9oZWFkID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVtb3ZlX2Zyb21fbWVyZ2UgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeShkaXJfcmVfaGVhZCwgJml0ZXIsIGhlYWRfZW50LAorCQkJCWVudCAvKiBtZW1iZXIgbmFtZSAqLykgeworCQltZXJnZV9lbnQgPSBkaXJfcmVuYW1lX2ZpbmRfZW50cnkoZGlyX3JlX21lcmdlLCBoZWFkX2VudC0+ZGlyKTsKKwkJaWYgKG1lcmdlX2VudCAmJgorCQkgICAgIWhlYWRfZW50LT5ub25fdW5pcXVlX25ld19kaXIgJiYKKwkJICAgICFtZXJnZV9lbnQtPm5vbl91bmlxdWVfbmV3X2RpciAmJgorCQkgICAgIXN0cmJ1Zl9jbXAoJmhlYWRfZW50LT5uZXdfZGlyLCAmbWVyZ2VfZW50LT5uZXdfZGlyKSkgeworCQkJLyogMS4gUmVuYW1lZCBpZGVudGljYWxseTsgcmVtb3ZlIGl0IGZyb20gYm90aCBzaWRlcyAqLworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZW1vdmVfZnJvbV9oZWFkLAorCQkJCQkgICBoZWFkX2VudC0+ZGlyKS0+dXRpbCA9IGhlYWRfZW50OworCQkJc3RyYnVmX3JlbGVhc2UoJmhlYWRfZW50LT5uZXdfZGlyKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVtb3ZlX2Zyb21fbWVyZ2UsCisJCQkJCSAgIG1lcmdlX2VudC0+ZGlyKS0+dXRpbCA9IG1lcmdlX2VudDsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZtZXJnZV9lbnQtPm5ld19kaXIpOworCQl9IGVsc2UgaWYgKHRyZWVfaGFzX3BhdGgob3B0LT5yZXBvLCBoZWFkLCBoZWFkX2VudC0+ZGlyKSkgeworCQkJLyogMi4gVGhpcyB3YXNuJ3QgYSBkaXJlY3RvcnkgcmVuYW1lIGFmdGVyIGFsbCAqLworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZW1vdmVfZnJvbV9oZWFkLAorCQkJCQkgICBoZWFkX2VudC0+ZGlyKS0+dXRpbCA9IGhlYWRfZW50OworCQkJc3RyYnVmX3JlbGVhc2UoJmhlYWRfZW50LT5uZXdfZGlyKTsKKwkJfQorCX0KKworCXJlbW92ZV9oYXNobWFwX2VudHJpZXMoZGlyX3JlX2hlYWQsICZyZW1vdmVfZnJvbV9oZWFkKTsKKwlyZW1vdmVfaGFzaG1hcF9lbnRyaWVzKGRpcl9yZV9tZXJnZSwgJnJlbW92ZV9mcm9tX21lcmdlKTsKKworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoZGlyX3JlX21lcmdlLCAmaXRlciwgbWVyZ2VfZW50LAorCQkJCWVudCAvKiBtZW1iZXIgbmFtZSAqLykgeworCQloZWFkX2VudCA9IGRpcl9yZW5hbWVfZmluZF9lbnRyeShkaXJfcmVfaGVhZCwgbWVyZ2VfZW50LT5kaXIpOworCQlpZiAodHJlZV9oYXNfcGF0aChvcHQtPnJlcG8sIG1lcmdlLCBtZXJnZV9lbnQtPmRpcikpIHsKKwkJCS8qIDIuIFRoaXMgd2Fzbid0IGEgZGlyZWN0b3J5IHJlbmFtZSBhZnRlciBhbGwgKi8KKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVtb3ZlX2Zyb21fbWVyZ2UsCisJCQkJCSAgIG1lcmdlX2VudC0+ZGlyKS0+dXRpbCA9IG1lcmdlX2VudDsKKwkJfSBlbHNlIGlmIChoZWFkX2VudCAmJgorCQkJICAgIWhlYWRfZW50LT5ub25fdW5pcXVlX25ld19kaXIgJiYKKwkJCSAgICFtZXJnZV9lbnQtPm5vbl91bmlxdWVfbmV3X2RpcikgeworCQkJLyogMy4gcmVuYW1lL3JlbmFtZSgxdG8yKSAqLworCQkJLyoKKwkJCSAqIFdlIGNhbiBhc3N1bWUgaXQncyBub3QgcmVuYW1lL3JlbmFtZSgxdG8xKSBiZWNhdXNlCisJCQkgKiB0aGF0IHdhcyBjYXNlICgxKSwgYWxyZWFkeSBjaGVja2VkIGFib3ZlLiAgU28gd2UKKwkJCSAqIGtub3cgdGhhdCBoZWFkX2VudC0+bmV3X2RpciBhbmQgbWVyZ2VfZW50LT5uZXdfZGlyCisJCQkgKiBhcmUgZGlmZmVyZW50IHN0cmluZ3MuCisJCQkgKi8KKwkJCW91dHB1dChvcHQsIDEsIF8oIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogIgorCQkJCSAgICAgICAiUmVuYW1lIGRpcmVjdG9yeSAlcy0+JXMgaW4gJXMuICIKKwkJCQkgICAgICAgIlJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzIiksCisJCQkgICAgICAgaGVhZF9lbnQtPmRpciwgaGVhZF9lbnQtPm5ld19kaXIuYnVmLCBvcHQtPmJyYW5jaDEsCisJCQkgICAgICAgaGVhZF9lbnQtPmRpciwgbWVyZ2VfZW50LT5uZXdfZGlyLmJ1Ziwgb3B0LT5icmFuY2gyKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVtb3ZlX2Zyb21faGVhZCwKKwkJCQkJICAgaGVhZF9lbnQtPmRpciktPnV0aWwgPSBoZWFkX2VudDsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX2VudC0+bmV3X2Rpcik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlbW92ZV9mcm9tX21lcmdlLAorCQkJCQkgICBtZXJnZV9lbnQtPmRpciktPnV0aWwgPSBtZXJnZV9lbnQ7CisJCQlzdHJidWZfcmVsZWFzZSgmbWVyZ2VfZW50LT5uZXdfZGlyKTsKKwkJfQorCX0KKworCXJlbW92ZV9oYXNobWFwX2VudHJpZXMoZGlyX3JlX2hlYWQsICZyZW1vdmVfZnJvbV9oZWFkKTsKKwlyZW1vdmVfaGFzaG1hcF9lbnRyaWVzKGRpcl9yZV9tZXJnZSwgJnJlbW92ZV9mcm9tX21lcmdlKTsKK30KKworc3RhdGljIHN0cnVjdCBoYXNobWFwICpnZXRfZGlyZWN0b3J5X3JlbmFtZXMoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpwYWlycykKK3sKKwlzdHJ1Y3QgaGFzaG1hcCAqZGlyX3JlbmFtZXM7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCXN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICplbnRyeTsKKwlpbnQgaTsKKworCS8qCisJICogVHlwaWNhbGx5LCB3ZSB0aGluayBvZiBhIGRpcmVjdG9yeSByZW5hbWUgYXMgYWxsIGZpbGVzIGZyb20gYQorCSAqIGNlcnRhaW4gZGlyZWN0b3J5IGJlaW5nIG1vdmVkIHRvIGEgdGFyZ2V0IGRpcmVjdG9yeS4gIEhvd2V2ZXIsCisJICogd2hhdCBpZiBzb21lb25lIGZpcnN0IG1vdmVkIHR3byBmaWxlcyBmcm9tIHRoZSBvcmlnaW5hbAorCSAqIGRpcmVjdG9yeSBpbiBvbmUgY29tbWl0LCBhbmQgdGhlbiByZW5hbWVkIHRoZSBkaXJlY3RvcnkKKwkgKiBzb21ld2hlcmUgZWxzZSBpbiBhIGxhdGVyIGNvbW1pdD8gIEF0IG1lcmdlIHRpbWUsIHdlIGp1c3Qga25vdworCSAqIHRoYXQgZmlsZXMgZnJvbSB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5IHdlbnQgdG8gdHdvIGRpZmZlcmVudAorCSAqIHBsYWNlcywgYW5kIHRoYXQgdGhlIGJ1bGsgb2YgdGhlbSBlbmRlZCB1cCBpbiB0aGUgc2FtZSBwbGFjZS4KKwkgKiBXZSB3YW50IGVhY2ggZGlyZWN0b3J5IHJlbmFtZSB0byByZXByZXNlbnQgd2hlcmUgdGhlIGJ1bGsgb2YgdGhlCisJICogZmlsZXMgZnJvbSB0aGF0IGRpcmVjdG9yeSBlbmQgdXA7IHRoaXMgZnVuY3Rpb24gZXhpc3RzIHRvIGZpbmQKKwkgKiB3aGVyZSB0aGUgYnVsayBvZiB0aGUgZmlsZXMgd2VudC4KKwkgKgorCSAqIFRoZSBmaXJzdCBsb29wIGJlbG93IHNpbXBseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGZpbGUKKwkgKiByZW5hbWVzLCBmaW5kaW5nIG91dCBob3cgb2Z0ZW4gZWFjaCBkaXJlY3RvcnkgcmVuYW1lIHBhaXIKKwkgKiBwb3NzaWJpbGl0eSBvY2N1cnMuCisJICovCisJZGlyX3JlbmFtZXMgPSB4bWFsbG9jKHNpemVvZigqZGlyX3JlbmFtZXMpKTsKKwlkaXJfcmVuYW1lX2luaXQoZGlyX3JlbmFtZXMpOworCWZvciAoaSA9IDA7IGkgPCBwYWlycy0+bnI7ICsraSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJaW50ICpjb3VudDsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIgPSBwYWlycy0+cXVldWVbaV07CisJCWNoYXIgKm9sZF9kaXIsICpuZXdfZGlyOworCisJCS8qIEZpbGUgbm90IHBhcnQgb2YgZGlyZWN0b3J5IHJlbmFtZSBpZiBpdCB3YXNuJ3QgcmVuYW1lZCAqLworCQlpZiAocGFpci0+c3RhdHVzICE9ICdSJykKKwkJCWNvbnRpbnVlOworCisJCWdldF9yZW5hbWVkX2Rpcl9wb3J0aW9uKHBhaXItPm9uZS0+cGF0aCwgcGFpci0+dHdvLT5wYXRoLAorCQkJCQkmb2xkX2RpciwgICAgICAgICZuZXdfZGlyKTsKKwkJaWYgKCFvbGRfZGlyKQorCQkJLyogRGlyZWN0b3J5IGRpZG4ndCBjaGFuZ2UgYXQgYWxsOyBpZ25vcmUgdGhpcyBvbmUuICovCisJCQljb250aW51ZTsKKworCQllbnRyeSA9IGRpcl9yZW5hbWVfZmluZF9lbnRyeShkaXJfcmVuYW1lcywgb2xkX2Rpcik7CisJCWlmICghZW50cnkpIHsKKwkJCWVudHJ5ID0geG1hbGxvYyhzaXplb2YoKmVudHJ5KSk7CisJCQlkaXJfcmVuYW1lX2VudHJ5X2luaXQoZW50cnksIG9sZF9kaXIpOworCQkJaGFzaG1hcF9wdXQoZGlyX3JlbmFtZXMsICZlbnRyeS0+ZW50KTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUob2xkX2Rpcik7CisJCX0KKwkJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cCgmZW50cnktPnBvc3NpYmxlX25ld19kaXJzLCBuZXdfZGlyKTsKKwkJaWYgKCFpdGVtKSB7CisJCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZlbnRyeS0+cG9zc2libGVfbmV3X2RpcnMsCisJCQkJCQkgIG5ld19kaXIpOworCQkJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKGludCkpOworCQl9IGVsc2UgeworCQkJZnJlZShuZXdfZGlyKTsKKwkJfQorCQljb3VudCA9IGl0ZW0tPnV0aWw7CisJCSpjb3VudCArPSAxOworCX0KKworCS8qCisJICogRm9yIGVhY2ggZGlyZWN0b3J5IHdpdGggZmlsZXMgbW92ZWQgb3V0IG9mIGl0LCB3ZSBmaW5kIG91dCB3aGljaAorCSAqIHRhcmdldCBkaXJlY3RvcnkgcmVjZWl2ZWQgdGhlIG1vc3QgZmlsZXMgc28gd2UgY2FuIGRlY2xhcmUgaXQgdG8KKwkgKiBiZSB0aGUgIndpbm5pbmciIHRhcmdldCBsb2NhdGlvbiBmb3IgdGhlIGRpcmVjdG9yeSByZW5hbWUuICBUaGlzCisJICogd2lubmVyIGdldHMgcmVjb3JkZWQgaW4gbmV3X2Rpci4gIElmIHRoZXJlIGlzIG5vIHdpbm5lcgorCSAqIChtdWx0aXBsZSB0YXJnZXQgZGlyZWN0b3JpZXMgcmVjZWl2ZWQgdGhlIHNhbWUgbnVtYmVyIG9mIGZpbGVzKSwKKwkgKiB3ZSBzZXQgbm9uX3VuaXF1ZV9uZXdfZGlyLiAgT25jZSB3ZSd2ZSBkZXRlcm1pbmVkIHRoZSB3aW5uZXIgKG9yCisJICogdGhhdCB0aGVyZSBpcyBubyB3aW5uZXIpLCB3ZSBubyBsb25nZXIgbmVlZCBwb3NzaWJsZV9uZXdfZGlycy4KKwkgKi8KKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KGRpcl9yZW5hbWVzLCAmaXRlciwgZW50cnksCisJCQkJZW50IC8qIG1lbWJlciBuYW1lICovKSB7CisJCWludCBtYXggPSAwOworCQlpbnQgYmFkX21heCA9IDA7CisJCWNoYXIgKmJlc3QgPSBOVUxMOworCisJCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+cG9zc2libGVfbmV3X2RpcnMubnI7IGkrKykgeworCQkJaW50ICpjb3VudCA9IGVudHJ5LT5wb3NzaWJsZV9uZXdfZGlycy5pdGVtc1tpXS51dGlsOworCisJCQlpZiAoKmNvdW50ID09IG1heCkKKwkJCQliYWRfbWF4ID0gbWF4OworCQkJZWxzZSBpZiAoKmNvdW50ID4gbWF4KSB7CisJCQkJbWF4ID0gKmNvdW50OworCQkJCWJlc3QgPSBlbnRyeS0+cG9zc2libGVfbmV3X2RpcnMuaXRlbXNbaV0uc3RyaW5nOworCQkJfQorCQl9CisJCWlmIChiYWRfbWF4ID09IG1heCkKKwkJCWVudHJ5LT5ub25fdW5pcXVlX25ld19kaXIgPSAxOworCQllbHNlIHsKKwkJCWFzc2VydChlbnRyeS0+bmV3X2Rpci5sZW4gPT0gMCk7CisJCQlzdHJidWZfYWRkc3RyKCZlbnRyeS0+bmV3X2RpciwgYmVzdCk7CisJCX0KKwkJLyoKKwkJICogVGhlIHJlbGV2YW50IGRpcmVjdG9yeSBzdWItcG9ydGlvbiBvZiB0aGUgb3JpZ2luYWwgZnVsbAorCQkgKiBmaWxlcGF0aHMgd2VyZSB4c3RybmR1cCdlZCBiZWZvcmUgaW5zZXJ0aW5nIGludG8KKwkJICogcG9zc2libGVfbmV3X2RpcnMsIGFuZCBpbnN0ZWFkIG9mIG1hbnVhbGx5IGl0ZXJhdGluZyB0aGUKKwkJICogbGlzdCBhbmQgZnJlZSdpbmcgZWFjaCwganVzdCBsaWUgYW5kIHRlbGwKKwkJICogcG9zc2libGVfbmV3X2RpcnMgdGhhdCBpdCBkaWQgdGhlIHN0cmR1cCdpbmcgc28gdGhhdCBpdAorCQkgKiB3aWxsIGZyZWUgdGhlbSBmb3IgdXMuCisJCSAqLworCQllbnRyeS0+cG9zc2libGVfbmV3X2RpcnMuc3RyZHVwX3N0cmluZ3MgPSAxOworCQlzdHJpbmdfbGlzdF9jbGVhcigmZW50cnktPnBvc3NpYmxlX25ld19kaXJzLCAxKTsKKwl9CisKKwlyZXR1cm4gZGlyX3JlbmFtZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSAqY2hlY2tfZGlyX3JlbmFtZWQoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJCSAgc3RydWN0IGhhc2htYXAgKmRpcl9yZW5hbWVzKQoreworCWNoYXIgKnRlbXAgPSB4c3RyZHVwKHBhdGgpOworCWNoYXIgKmVuZDsKKwlzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSAqZW50cnkgPSBOVUxMOworCisJd2hpbGUgKChlbmQgPSBzdHJyY2hyKHRlbXAsICcvJykpKSB7CisJCSplbmQgPSAnXDAnOworCQllbnRyeSA9IGRpcl9yZW5hbWVfZmluZF9lbnRyeShkaXJfcmVuYW1lcywgdGVtcCk7CisJCWlmIChlbnRyeSkKKwkJCWJyZWFrOworCX0KKwlmcmVlKHRlbXApOworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZV9jb2xsaXNpb25zKHN0cnVjdCBoYXNobWFwICpjb2xsaXNpb25zLAorCQkJICAgICAgIHN0cnVjdCBoYXNobWFwICpkaXJfcmVuYW1lcywKKwkJCSAgICAgICBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnBhaXJzKQoreworCWludCBpOworCisJLyoKKwkgKiBNdWx0aXBsZSBmaWxlcyBjYW4gYmUgbWFwcGVkIHRvIHRoZSBzYW1lIHBhdGggZHVlIHRvIGRpcmVjdG9yeQorCSAqIHJlbmFtZXMgZG9uZSBieSB0aGUgb3RoZXIgc2lkZSBvZiBoaXN0b3J5LiAgU2luY2UgdGhhdCBvdGhlcgorCSAqIHNpZGUgb2YgaGlzdG9yeSBjb3VsZCBoYXZlIG1lcmdlZCBtdWx0aXBsZSBkaXJlY3RvcmllcyBpbnRvIG9uZSwKKwkgKiBpZiBvdXIgc2lkZSBvZiBoaXN0b3J5IGFkZGVkIHRoZSBzYW1lIGZpbGUgYmFzZW5hbWUgdG8gZWFjaCBvZgorCSAqIHRob3NlIGRpcmVjdG9yaWVzLCB0aGVuIGFsbCBOIG9mIHRoZW0gd291bGQgZ2V0IGltcGxpY2l0bHkKKwkgKiByZW5hbWVkIGJ5IHRoZSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBpbnRvIHRoZSBzYW1lIHBhdGgsCisJICogYW5kIHdlJ2QgZ2V0IGFuIGFkZC9hZGQvLi4uL2FkZCBjb25mbGljdCwgYW5kIGFsbCB0aG9zZSBhZGRzCisJICogZnJvbSAqdGhpcyogc2lkZSBvZiBoaXN0b3J5LiAgVGhpcyBpcyBub3QgcmVwcmVzZW50YWJsZSBpbiB0aGUKKwkgKiBpbmRleCwgYW5kIHVzZXJzIGFyZW4ndCBnb2luZyB0byBlYXNpbHkgYmUgYWJsZSB0byBtYWtlIHNlbnNlIG9mCisJICogaXQuICBTbyB3ZSBuZWVkIHRvIHByb3ZpZGUgYSBnb29kIHdhcm5pbmcgYWJvdXQgd2hhdCdzCisJICogaGFwcGVuaW5nLCBhbmQgZmFsbCBiYWNrIHRvIG5vLWRpcmVjdG9yeS1yZW5hbWUgZGV0ZWN0aW9uCisJICogYmVoYXZpb3IgZm9yIHRob3NlIHBhdGhzLgorCSAqCisJICogU2VlIHRlc3RjYXNlcyA5ZSBhbmQgYWxsIG9mIHNlY3Rpb24gNSBmcm9tIHQ2MDQzIGZvciBleGFtcGxlcy4KKwkgKi8KKwljb2xsaXNpb25faW5pdChjb2xsaXNpb25zKTsKKworCWZvciAoaSA9IDA7IGkgPCBwYWlycy0+bnI7ICsraSkgeworCQlzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSAqZGlyX3JlbmFtZV9lbnQ7CisJCXN0cnVjdCBjb2xsaXNpb25fZW50cnkgKmNvbGxpc2lvbl9lbnQ7CisJCWNoYXIgKm5ld19wYXRoOworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciA9IHBhaXJzLT5xdWV1ZVtpXTsKKworCQlpZiAocGFpci0+c3RhdHVzICE9ICdBJyAmJiBwYWlyLT5zdGF0dXMgIT0gJ1InKQorCQkJY29udGludWU7CisJCWRpcl9yZW5hbWVfZW50ID0gY2hlY2tfZGlyX3JlbmFtZWQocGFpci0+dHdvLT5wYXRoLAorCQkJCQkJICAgZGlyX3JlbmFtZXMpOworCQlpZiAoIWRpcl9yZW5hbWVfZW50KQorCQkJY29udGludWU7CisKKwkJbmV3X3BhdGggPSBhcHBseV9kaXJfcmVuYW1lKGRpcl9yZW5hbWVfZW50LCBwYWlyLT50d28tPnBhdGgpOworCQlpZiAoIW5ld19wYXRoKQorCQkJLyoKKwkJCSAqIGRpcl9yZW5hbWVfZW50LT5ub25fdW5pcXVlX25ld19wYXRoIGlzIHRydWUsIHdoaWNoCisJCQkgKiBtZWFucyB0aGVyZSBpcyBubyBkaXJlY3RvcnkgcmVuYW1lIGZvciB1cyB0byB1c2UsCisJCQkgKiB3aGljaCBtZWFucyBpdCB3b24ndCBjYXVzZSB1cyBhbnkgYWRkaXRpb25hbAorCQkJICogY29sbGlzaW9ucy4KKwkJCSAqLworCQkJY29udGludWU7CisJCWNvbGxpc2lvbl9lbnQgPSBjb2xsaXNpb25fZmluZF9lbnRyeShjb2xsaXNpb25zLCBuZXdfcGF0aCk7CisJCWlmICghY29sbGlzaW9uX2VudCkgeworCQkJY29sbGlzaW9uX2VudCA9IHhjYWxsb2MoMSwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgY29sbGlzaW9uX2VudHJ5KSk7CisJCQloYXNobWFwX2VudHJ5X2luaXQoJmNvbGxpc2lvbl9lbnQtPmVudCwKKwkJCQkJCXN0cmhhc2gobmV3X3BhdGgpKTsKKwkJCWhhc2htYXBfcHV0KGNvbGxpc2lvbnMsICZjb2xsaXNpb25fZW50LT5lbnQpOworCQkJY29sbGlzaW9uX2VudC0+dGFyZ2V0X2ZpbGUgPSBuZXdfcGF0aDsKKwkJfSBlbHNlIHsKKwkJCWZyZWUobmV3X3BhdGgpOworCQl9CisJCXN0cmluZ19saXN0X2luc2VydCgmY29sbGlzaW9uX2VudC0+c291cmNlX2ZpbGVzLAorCQkJCSAgIHBhaXItPnR3by0+cGF0aCk7CisJfQorfQorCitzdGF0aWMgY2hhciAqY2hlY2tfZm9yX2RpcmVjdG9yeV9yZW5hbWUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJc3RydWN0IHRyZWUgKnRyZWUsCisJCQkJCXN0cnVjdCBoYXNobWFwICpkaXJfcmVuYW1lcywKKwkJCQkJc3RydWN0IGhhc2htYXAgKmRpcl9yZW5hbWVfZXhjbHVzaW9ucywKKwkJCQkJc3RydWN0IGhhc2htYXAgKmNvbGxpc2lvbnMsCisJCQkJCWludCAqY2xlYW5fbWVyZ2UpCit7CisJY2hhciAqbmV3X3BhdGggPSBOVUxMOworCXN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5ICplbnRyeSA9IGNoZWNrX2Rpcl9yZW5hbWVkKHBhdGgsIGRpcl9yZW5hbWVzKTsKKwlzdHJ1Y3QgZGlyX3JlbmFtZV9lbnRyeSAqb2VudHJ5ID0gTlVMTDsKKworCWlmICghZW50cnkpCisJCXJldHVybiBuZXdfcGF0aDsKKworCS8qCisJICogVGhpcyBuZXh0IHBhcnQgaXMgYSBsaXR0bGUgd2VpcmQuICBXZSBkbyBub3Qgd2FudCB0byBkbyBhbgorCSAqIGltcGxpY2l0IHJlbmFtZSBpbnRvIGEgZGlyZWN0b3J5IHdlIHJlbmFtZWQgb24gb3VyIHNpZGUsIGJlY2F1c2UKKwkgKiB0aGF0IHdpbGwgcmVzdWx0IGluIGEgc3B1cmlvdXMgcmVuYW1lL3JlbmFtZSgxdG8yKSBjb25mbGljdC4gIEFuCisJICogZXhhbXBsZToKKwkgKiAgIEJhc2UgY29tbWl0OiBkdW1iZGlyL2FmaWxlLCBvdGhlcmRpci9iZmlsZQorCSAqICAgU2lkZSAxOiAgICAgIHNtcnRkaXIvYWZpbGUsIG90aGVyZGlyL2JmaWxlCisJICogICBTaWRlIDI6ICAgICAgZHVtYmRpci9hZmlsZSwgZHVtYmRpci9iZmlsZQorCSAqIEhlcmUsIHdoaWxlIHdvcmtpbmcgb24gU2lkZSAxLCB3ZSBjb3VsZCBub3RpY2UgdGhhdCBvdGhlcmRpciB3YXMKKwkgKiByZW5hbWVkL21lcmdlZCB0byBkdW1iZGlyLCBhbmQgY2hhbmdlIHRoZSBkaWZmX2ZpbGVwYWlyIGZvcgorCSAqIG90aGVyZGlyL2JmaWxlIGludG8gYSByZW5hbWUgaW50byBkdW1iZGlyL2JmaWxlLiAgSG93ZXZlciwgU2lkZQorCSAqIDIgd2lsbCBub3RpY2UgdGhlIHJlbmFtZSBmcm9tIGR1bWJkaXIgdG8gc21ydGRpciwgYW5kIGRvIHRoZQorCSAqIHRyYW5zaXRpdmUgcmVuYW1lIHRvIG1vdmUgaXQgZnJvbSBkdW1iZGlyL2JmaWxlIHRvCisJICogc21ydGRpci9iZmlsZS4gIFRoYXQgZ2l2ZXMgdXMgYmZpbGUgaW4gZHVtYmRpciB2cyBiZWluZyBpbgorCSAqIHNtcnRkaXIsIGEgcmVuYW1lL3JlbmFtZSgxdG8yKSBjb25mbGljdC4gIFdlIHJlYWxseSBqdXN0IHdhbnQKKwkgKiB0aGUgZmlsZSB0byBlbmQgdXAgaW4gc21ydGRpci4gIEFuZCB0aGUgd2F5IHRvIGFjaGlldmUgdGhhdCBpcworCSAqIHRvIG5vdCBsZXQgU2lkZTEgZG8gdGhlIHJlbmFtZSB0byBkdW1iZGlyLCBzaW5jZSB3ZSBrbm93IHRoYXQgaXMKKwkgKiB0aGUgc291cmNlIG9mIG9uZSBvZiBvdXIgZGlyZWN0b3J5IHJlbmFtZXMuCisJICoKKwkgKiBUaGF0J3Mgd2h5IG9lbnRyeSBhbmQgZGlyX3JlbmFtZV9leGNsdXNpb25zIGlzIGhlcmUuCisJICoKKwkgKiBBcyBpdCB0dXJucyBvdXQsIHRoaXMgYWxzbyBwcmV2ZW50cyBOLXdheSB0cmFuc2llbnQgcmVuYW1lCisJICogY29uZnVzaW9uOyBTZWUgdGVzdGNhc2VzIDljIGFuZCA5ZCBvZiB0NjA0My4KKwkgKi8KKwlvZW50cnkgPSBkaXJfcmVuYW1lX2ZpbmRfZW50cnkoZGlyX3JlbmFtZV9leGNsdXNpb25zLCBlbnRyeS0+bmV3X2Rpci5idWYpOworCWlmIChvZW50cnkpIHsKKwkJb3V0cHV0KG9wdCwgMSwgXygiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lICIKKwkJCSAgICAgICAidG8gJXMsIGJlY2F1c2UgJXMgaXRzZWxmIHdhcyByZW5hbWVkLiIpLAorCQkgICAgICAgZW50cnktPmRpciwgZW50cnktPm5ld19kaXIuYnVmLCBwYXRoLCBlbnRyeS0+bmV3X2Rpci5idWYpOworCX0gZWxzZSB7CisJCW5ld19wYXRoID0gaGFuZGxlX3BhdGhfbGV2ZWxfY29uZmxpY3RzKG9wdCwgcGF0aCwgZW50cnksCisJCQkJCQkgICAgICAgY29sbGlzaW9ucywgdHJlZSk7CisJCSpjbGVhbl9tZXJnZSAmPSAobmV3X3BhdGggIT0gTlVMTCk7CisJfQorCisJcmV0dXJuIG5ld19wYXRoOworfQorCitzdGF0aWMgdm9pZCBhcHBseV9kaXJlY3RvcnlfcmVuYW1lX21vZGlmaWNhdGlvbnMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQkJCSBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciwKKwkJCQkJCSBjaGFyICpuZXdfcGF0aCwKKwkJCQkJCSBzdHJ1Y3QgcmVuYW1lICpyZSwKKwkJCQkJCSBzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkJCQkJCSBzdHJ1Y3QgdHJlZSAqb190cmVlLAorCQkJCQkJIHN0cnVjdCB0cmVlICphX3RyZWUsCisJCQkJCQkgc3RydWN0IHRyZWUgKmJfdHJlZSwKKwkJCQkJCSBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVudHJpZXMpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IHN0YWdlID0gKHRyZWUgPT0gYV90cmVlID8gMiA6IDMpOworCWludCB1cGRhdGVfd2Q7CisKKwkvKgorCSAqIEluIGFsbCBjYXNlcyB3aGVyZSB3ZSBjYW4gZG8gZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24sCisJICogdW5wYWNrX3RyZWVzKCkgd2lsbCBoYXZlIHJlYWQgcGFpci0+dHdvLT5wYXRoIGludG8gdGhlCisJICogaW5kZXggYW5kIHRoZSB3b3JraW5nIGNvcHkuICBXZSBuZWVkIHRvIHJlbW92ZSBpdCBzbyB0aGF0CisJICogd2UgY2FuIGluc3RlYWQgcGxhY2UgaXQgYXQgbmV3X3BhdGguICBJdCBpcyBndWFyYW50ZWVkIHRvCisJICogbm90IGJlIHVudHJhY2tlZCAodW5wYWNrX3RyZWVzKCkgd291bGQgaGF2ZSBlcnJvcmVkIG91dAorCSAqIHNheWluZyB0aGUgZmlsZSB3b3VsZCBoYXZlIGJlZW4gb3ZlcndyaXR0ZW4pLCBidXQgaXQgbWlnaHQKKwkgKiBiZSBkaXJ0eSwgdGhvdWdoLgorCSAqLworCXVwZGF0ZV93ZCA9ICF3YXNfZGlydHkob3B0LCBwYWlyLT50d28tPnBhdGgpOworCWlmICghdXBkYXRlX3dkKQorCQlvdXRwdXQob3B0LCAxLCBfKCJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiKSwKKwkJICAgICAgIHBhaXItPnR3by0+cGF0aCk7CisJcmVtb3ZlX2ZpbGUob3B0LCAxLCBwYWlyLT50d28tPnBhdGgsICF1cGRhdGVfd2QpOworCisJLyogRmluZCBvciBjcmVhdGUgYSBuZXcgcmUtPmRzdF9lbnRyeSAqLworCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoZW50cmllcywgbmV3X3BhdGgpOworCWlmIChpdGVtKSB7CisJCS8qCisJCSAqIFNpbmNlIHdlJ3JlIHJlbmFtaW5nIG9uIHRoaXMgc2lkZSBvZiBoaXN0b3J5LCBhbmQgaXQncworCQkgKiBkdWUgdG8gYSBkaXJlY3RvcnkgcmVuYW1lIG9uIHRoZSBvdGhlciBzaWRlIG9mIGhpc3RvcnkKKwkJICogKHdoaWNoIHdlIG9ubHkgYWxsb3cgd2hlbiB0aGUgZGlyZWN0b3J5IGluIHF1ZXN0aW9uIG5vCisJCSAqIGxvbmdlciBleGlzdHMgb24gdGhlIG90aGVyIHNpZGUgb2YgaGlzdG9yeSksIHRoZQorCQkgKiBvcmlnaW5hbCBlbnRyeSBmb3IgcmUtPmRzdF9lbnRyeSBpcyBubyBsb25nZXIKKwkJICogbmVjZXNzYXJ5Li4uCisJCSAqLworCQlyZS0+ZHN0X2VudHJ5LT5wcm9jZXNzZWQgPSAxOworCisJCS8qCisJCSAqIC4uLmJlY2F1c2Ugd2UnbGwgYmUgdXNpbmcgdGhpcyBuZXcgb25lLgorCQkgKi8KKwkJcmUtPmRzdF9lbnRyeSA9IGl0ZW0tPnV0aWw7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogcmUtPmRzdF9lbnRyeSBpcyBmb3IgdGhlIGJlZm9yZS1kaXItcmVuYW1lIHBhdGgsIGFuZCB3ZQorCQkgKiBuZWVkIGl0IHRvIGhvbGQgaW5mb3JtYXRpb24gZm9yIHRoZSBhZnRlci1kaXItcmVuYW1lCisJCSAqIHBhdGguICBCZWZvcmUgY3JlYXRpbmcgYSBuZXcgZW50cnksIHdlIG5lZWQgdG8gbWFyayB0aGUKKwkJICogb2xkIG9uZSBhcyB1bm5lY2Vzc2FyeSAoLi4udW5sZXNzIGl0IGlzIHNoYXJlZCBieQorCQkgKiBzcmNfZW50cnksIGkuZS4gdGhpcyBkaWRuJ3QgdXNlIHRvIGJlIGEgcmVuYW1lLCBpbiB3aGljaAorCQkgKiBjYXNlIHdlIGNhbiBqdXN0IGFsbG93IHRoZSBub3JtYWwgcHJvY2Vzc2luZyB0byBoYXBwZW4KKwkJICogZm9yIGl0KS4KKwkJICovCisJCWlmIChwYWlyLT5zdGF0dXMgPT0gJ1InKQorCQkJcmUtPmRzdF9lbnRyeS0+cHJvY2Vzc2VkID0gMTsKKworCQlyZS0+ZHN0X2VudHJ5ID0gaW5zZXJ0X3N0YWdlX2RhdGEob3B0LT5yZXBvLCBuZXdfcGF0aCwKKwkJCQkJCSAgb190cmVlLCBhX3RyZWUsIGJfdHJlZSwKKwkJCQkJCSAgZW50cmllcyk7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoZW50cmllcywgbmV3X3BhdGgpOworCQlpdGVtLT51dGlsID0gcmUtPmRzdF9lbnRyeTsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgc3RhZ2VfZGF0YSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGF0aCB3ZSBhcmUKKwkgKiBtb3ZpbmcgaW50byBwbGFjZS4gIFRoYXQgc2xvdCB3aWxsIGJlIGVtcHR5IGFuZCBhdmFpbGFibGUgZm9yIHVzCisJICogdG8gd3JpdGUgdG8gYmVjYXVzZSBvZiB0aGUgY29sbGlzaW9uIGNoZWNrcyBpbgorCSAqIGhhbmRsZV9wYXRoX2xldmVsX2NvbmZsaWN0cygpLiAgSW4gb3RoZXIgd29yZHMsCisJICogcmUtPmRzdF9lbnRyeS0+c3RhZ2VzW3N0YWdlXS5vaWQgd2lsbCBiZSB0aGUgbnVsbF9vaWQsIHNvIGl0J3MKKwkgKiBvcGVuIGZvciB1cyB0byB3cml0ZSB0by4KKwkgKgorCSAqIEl0IG1heSBiZSB0ZW1wdGluZyB0byBhY3R1YWxseSB1cGRhdGUgdGhlIGluZGV4IGF0IHRoaXMgcG9pbnQgYXMKKwkgKiB3ZWxsLCB1c2luZyB1cGRhdGVfc3RhZ2VzX2Zvcl9zdGFnZV9kYXRhKCksIGJ1dCBhcyBwZXIgdGhlIGJpZworCSAqICJOT1RFIiBpbiB1cGRhdGVfc3RhZ2VzKCksIGRvaW5nIHNvIHdpbGwgbW9kaWZ5IHRoZSBjdXJyZW50CisJICogaW4tbWVtb3J5IGluZGV4IHdoaWNoIHdpbGwgYnJlYWsgY2FsbHMgdG8gd291bGRfbG9zZV91bnRyYWNrZWQoKQorCSAqIHRoYXQgd2UgbmVlZCB0byBtYWtlLiAgSW5zdGVhZCwgd2UgbmVlZCB0byBqdXN0IG1ha2Ugc3VyZSB0aGF0CisJICogdGhlIHZhcmlvdXMgaGFuZGxlX3JlbmFtZV8qKCkgZnVuY3Rpb25zIHVwZGF0ZSB0aGUgaW5kZXgKKwkgKiBleHBsaWNpdGx5IHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdW5wYWNrX3RyZWVzKCkgdG8gaGF2ZSBkb25lIGl0LgorCSAqLworCWdldF90cmVlX2VudHJ5KG9wdC0+cmVwbywKKwkJICAgICAgICZ0cmVlLT5vYmplY3Qub2lkLAorCQkgICAgICAgcGFpci0+dHdvLT5wYXRoLAorCQkgICAgICAgJnJlLT5kc3RfZW50cnktPnN0YWdlc1tzdGFnZV0ub2lkLAorCQkgICAgICAgJnJlLT5kc3RfZW50cnktPnN0YWdlc1tzdGFnZV0ubW9kZSk7CisKKwkvKgorCSAqIFJlY29yZCB0aGUgb3JpZ2luYWwgY2hhbmdlIHN0YXR1cyAob3IgJ3R5cGUnIG9mIGNoYW5nZSkuICBJZiBpdAorCSAqIHdhcyBvcmlnaW5hbGx5IGFuIGFkZCAoJ0EnKSwgdGhpcyBsZXRzIHVzIGRpZmZlcmVudGlhdGUgbGF0ZXIKKwkgKiBiZXR3ZWVuIGEgUkVOQU1FX0RFTEVURSBjb25mbGljdCBhbmQgUkVOQU1FX1ZJQV9ESVIgKHRoZXkKKwkgKiBvdGhlcndpc2UgbG9vayB0aGUgc2FtZSkuICBJZiBpdCB3YXMgb3JpZ2luYWxseSBhIHJlbmFtZSAoJ1InKSwKKwkgKiB0aGlzIGxldHMgdXMgcmVtZW1iZXIgYW5kIHJlcG9ydCBhY2N1cmF0ZWx5IGFib3V0IHRoZSB0cmFuc2l0aXZlCisJICogcmVuYW1pbmcgdGhhdCBvY2N1cnJlZCB2aWEgdGhlIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uLiAgQWxzbywKKwkgKiByZWNvcmQgdGhlIG9yaWdpbmFsIGRlc3RpbmF0aW9uIG5hbWUuCisJICovCisJcmUtPmRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZSA9IHBhaXItPnN0YXR1czsKKwlyZS0+ZGlyX3JlbmFtZV9vcmlnaW5hbF9kZXN0ID0gcGFpci0+dHdvLT5wYXRoOworCisJLyoKKwkgKiBXZSBkb24ndCBhY3R1YWxseSBsb29rIGF0IHBhaXItPnN0YXR1cyBhZ2FpbiwgYnV0IGl0IHNlZW1zCisJICogcGVkYWdvZ2ljYWxseSBjb3JyZWN0IHRvIGFkanVzdCBpdC4KKwkgKi8KKwlwYWlyLT5zdGF0dXMgPSAnUic7CisKKwkvKgorCSAqIEZpbmFsbHksIHJlY29yZCB0aGUgbmV3IGxvY2F0aW9uLgorCSAqLworCXBhaXItPnR3by0+cGF0aCA9IG5ld19wYXRoOworfQorCisvKgorICogR2V0IGluZm9ybWF0aW9uIG9mIGFsbCByZW5hbWVzIHdoaWNoIG9jY3VycmVkIGluICdwYWlycycsIG1ha2luZyB1c2Ugb2YKKyAqIGFueSBpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyBpbmZlcnJlZCBmcm9tIHRoZSBvdGhlciBzaWRlIG9mIGhpc3RvcnkuCisgKiBXZSBuZWVkIHRoZSB0aHJlZSB0cmVlcyBpbiB0aGUgbWVyZ2UgKCdvX3RyZWUnLCAnYV90cmVlJyBhbmQgJ2JfdHJlZScpCisgKiB0byBiZSBhYmxlIHRvIGFzc29jaWF0ZSB0aGUgY29ycmVjdCBjYWNoZSBlbnRyaWVzIHdpdGggdGhlIHJlbmFtZQorICogaW5mb3JtYXRpb247IHRyZWUgaXMgYWx3YXlzIGVxdWFsIHRvIGVpdGhlciBhX3RyZWUgb3IgYl90cmVlLgorICovCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICpnZXRfcmVuYW1lcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCSAgICAgICBjb25zdCBjaGFyICpicmFuY2gsCisJCQkJICAgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcGFpcnMsCisJCQkJICAgICAgIHN0cnVjdCBoYXNobWFwICpkaXJfcmVuYW1lcywKKwkJCQkgICAgICAgc3RydWN0IGhhc2htYXAgKmRpcl9yZW5hbWVfZXhjbHVzaW9ucywKKwkJCQkgICAgICAgc3RydWN0IHRyZWUgKnRyZWUsCisJCQkJICAgICAgIHN0cnVjdCB0cmVlICpvX3RyZWUsCisJCQkJICAgICAgIHN0cnVjdCB0cmVlICphX3RyZWUsCisJCQkJICAgICAgIHN0cnVjdCB0cmVlICpiX3RyZWUsCisJCQkJICAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqZW50cmllcywKKwkJCQkgICAgICAgaW50ICpjbGVhbl9tZXJnZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaGFzaG1hcCBjb2xsaXNpb25zOworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgY29sbGlzaW9uX2VudHJ5ICplOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVuYW1lczsKKworCWNvbXB1dGVfY29sbGlzaW9ucygmY29sbGlzaW9ucywgZGlyX3JlbmFtZXMsIHBhaXJzKTsKKwlyZW5hbWVzID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFpcnMtPm5yOyArK2kpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCXN0cnVjdCByZW5hbWUgKnJlOworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciA9IHBhaXJzLT5xdWV1ZVtpXTsKKwkJY2hhciAqbmV3X3BhdGg7IC8qIG5vbi1OVUxMIG9ubHkgd2l0aCBkaXJlY3RvcnkgcmVuYW1lcyAqLworCisJCWlmIChwYWlyLT5zdGF0dXMgIT0gJ0EnICYmIHBhaXItPnN0YXR1cyAhPSAnUicpIHsKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihwYWlyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW5ld19wYXRoID0gY2hlY2tfZm9yX2RpcmVjdG9yeV9yZW5hbWUob3B0LCBwYWlyLT50d28tPnBhdGgsIHRyZWUsCisJCQkJCQkgICAgICBkaXJfcmVuYW1lcywKKwkJCQkJCSAgICAgIGRpcl9yZW5hbWVfZXhjbHVzaW9ucywKKwkJCQkJCSAgICAgICZjb2xsaXNpb25zLAorCQkJCQkJICAgICAgY2xlYW5fbWVyZ2UpOworCQlpZiAocGFpci0+c3RhdHVzICE9ICdSJyAmJiAhbmV3X3BhdGgpIHsKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihwYWlyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmUgPSB4bWFsbG9jKHNpemVvZigqcmUpKTsKKwkJcmUtPnByb2Nlc3NlZCA9IDA7CisJCXJlLT5wYWlyID0gcGFpcjsKKwkJcmUtPmJyYW5jaCA9IGJyYW5jaDsKKwkJcmUtPmRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZSA9ICdcMCc7CisJCXJlLT5kaXJfcmVuYW1lX29yaWdpbmFsX2Rlc3QgPSBOVUxMOworCQlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGVudHJpZXMsIHJlLT5wYWlyLT5vbmUtPnBhdGgpOworCQlpZiAoIWl0ZW0pCisJCQlyZS0+c3JjX2VudHJ5ID0gaW5zZXJ0X3N0YWdlX2RhdGEob3B0LT5yZXBvLAorCQkJCQlyZS0+cGFpci0+b25lLT5wYXRoLAorCQkJCQlvX3RyZWUsIGFfdHJlZSwgYl90cmVlLCBlbnRyaWVzKTsKKwkJZWxzZQorCQkJcmUtPnNyY19lbnRyeSA9IGl0ZW0tPnV0aWw7CisKKwkJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChlbnRyaWVzLCByZS0+cGFpci0+dHdvLT5wYXRoKTsKKwkJaWYgKCFpdGVtKQorCQkJcmUtPmRzdF9lbnRyeSA9IGluc2VydF9zdGFnZV9kYXRhKG9wdC0+cmVwbywKKwkJCQkJcmUtPnBhaXItPnR3by0+cGF0aCwKKwkJCQkJb190cmVlLCBhX3RyZWUsIGJfdHJlZSwgZW50cmllcyk7CisJCWVsc2UKKwkJCXJlLT5kc3RfZW50cnkgPSBpdGVtLT51dGlsOworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHJlbmFtZXMsIHBhaXItPm9uZS0+cGF0aCk7CisJCWl0ZW0tPnV0aWwgPSByZTsKKwkJaWYgKG5ld19wYXRoKQorCQkJYXBwbHlfZGlyZWN0b3J5X3JlbmFtZV9tb2RpZmljYXRpb25zKG9wdCwgcGFpciwgbmV3X3BhdGgsCisJCQkJCQkJICAgICByZSwgdHJlZSwgb190cmVlLAorCQkJCQkJCSAgICAgYV90cmVlLCBiX3RyZWUsCisJCQkJCQkJICAgICBlbnRyaWVzKTsKKwl9CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KCZjb2xsaXNpb25zLCAmaXRlciwgZSwKKwkJCQllbnQgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJZnJlZShlLT50YXJnZXRfZmlsZSk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZlLT5zb3VyY2VfZmlsZXMsIDApOworCX0KKwloYXNobWFwX2ZyZWVfZW50cmllcygmY29sbGlzaW9ucywgc3RydWN0IGNvbGxpc2lvbl9lbnRyeSwgZW50KTsKKwlyZXR1cm4gcmVuYW1lczsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3JlbmFtZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCSAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqYV9yZW5hbWVzLAorCQkJICAgc3RydWN0IHN0cmluZ19saXN0ICpiX3JlbmFtZXMpCit7CisJaW50IGNsZWFuX21lcmdlID0gMSwgaSwgajsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYV9ieV9kc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBiX2J5X2RzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJY29uc3Qgc3RydWN0IHJlbmFtZSAqc3JlOworCisJZm9yIChpID0gMDsgaSA8IGFfcmVuYW1lcy0+bnI7IGkrKykgeworCQlzcmUgPSBhX3JlbmFtZXMtPml0ZW1zW2ldLnV0aWw7CisJCXN0cmluZ19saXN0X2luc2VydCgmYV9ieV9kc3QsIHNyZS0+cGFpci0+dHdvLT5wYXRoKS0+dXRpbAorCQkJPSAodm9pZCAqKXNyZTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGJfcmVuYW1lcy0+bnI7IGkrKykgeworCQlzcmUgPSBiX3JlbmFtZXMtPml0ZW1zW2ldLnV0aWw7CisJCXN0cmluZ19saXN0X2luc2VydCgmYl9ieV9kc3QsIHNyZS0+cGFpci0+dHdvLT5wYXRoKS0+dXRpbAorCQkJPSAodm9pZCAqKXNyZTsKKwl9CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGFfcmVuYW1lcy0+bnIgfHwgaiA8IGJfcmVuYW1lcy0+bnI7KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVuYW1lczEsICpyZW5hbWVzMkRzdDsKKwkJc3RydWN0IHJlbmFtZSAqcmVuMSA9IE5VTEwsICpyZW4yID0gTlVMTDsKKwkJY29uc3QgY2hhciAqcmVuMV9zcmMsICpyZW4xX2RzdDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmxvb2t1cDsKKworCQlpZiAoaSA+PSBhX3JlbmFtZXMtPm5yKSB7CisJCQlyZW4yID0gYl9yZW5hbWVzLT5pdGVtc1tqKytdLnV0aWw7CisJCX0gZWxzZSBpZiAoaiA+PSBiX3JlbmFtZXMtPm5yKSB7CisJCQlyZW4xID0gYV9yZW5hbWVzLT5pdGVtc1tpKytdLnV0aWw7CisJCX0gZWxzZSB7CisJCQlpbnQgY29tcGFyZSA9IHN0cmNtcChhX3JlbmFtZXMtPml0ZW1zW2ldLnN0cmluZywKKwkJCQkJICAgICBiX3JlbmFtZXMtPml0ZW1zW2pdLnN0cmluZyk7CisJCQlpZiAoY29tcGFyZSA8PSAwKQorCQkJCXJlbjEgPSBhX3JlbmFtZXMtPml0ZW1zW2krK10udXRpbDsKKwkJCWlmIChjb21wYXJlID49IDApCisJCQkJcmVuMiA9IGJfcmVuYW1lcy0+aXRlbXNbaisrXS51dGlsOworCQl9CisKKwkJLyogVE9ETzogcmVmYWN0b3IsIHNvIHRoYXQgMS8yIGFyZSBub3QgbmVlZGVkICovCisJCWlmIChyZW4xKSB7CisJCQlyZW5hbWVzMSA9IGFfcmVuYW1lczsKKwkJCXJlbmFtZXMyRHN0ID0gJmJfYnlfZHN0OworCQl9IGVsc2UgeworCQkJcmVuYW1lczEgPSBiX3JlbmFtZXM7CisJCQlyZW5hbWVzMkRzdCA9ICZhX2J5X2RzdDsKKwkJCVNXQVAocmVuMiwgcmVuMSk7CisJCX0KKworCQlpZiAocmVuMS0+cHJvY2Vzc2VkKQorCQkJY29udGludWU7CisJCXJlbjEtPnByb2Nlc3NlZCA9IDE7CisJCXJlbjEtPmRzdF9lbnRyeS0+cHJvY2Vzc2VkID0gMTsKKwkJLyogQlVHOiBXZSBzaG91bGQgb25seSBtYXJrIHNyY19lbnRyeSBhcyBwcm9jZXNzZWQgaWYgd2UKKwkJICogYXJlIG5vdCBkZWFsaW5nIHdpdGggYSByZW5hbWUgKyBhZGQtc291cmNlIGNhc2UuCisJCSAqLworCQlyZW4xLT5zcmNfZW50cnktPnByb2Nlc3NlZCA9IDE7CisKKwkJcmVuMV9zcmMgPSByZW4xLT5wYWlyLT5vbmUtPnBhdGg7CisJCXJlbjFfZHN0ID0gcmVuMS0+cGFpci0+dHdvLT5wYXRoOworCisJCWlmIChyZW4yKSB7CisJCQkvKiBPbmUgZmlsZSByZW5hbWVkIG9uIGJvdGggc2lkZXMgKi8KKwkJCWNvbnN0IGNoYXIgKnJlbjJfc3JjID0gcmVuMi0+cGFpci0+b25lLT5wYXRoOworCQkJY29uc3QgY2hhciAqcmVuMl9kc3QgPSByZW4yLT5wYWlyLT50d28tPnBhdGg7CisJCQllbnVtIHJlbmFtZV90eXBlIHJlbmFtZV90eXBlOworCQkJaWYgKHN0cmNtcChyZW4xX3NyYywgcmVuMl9zcmMpICE9IDApCisJCQkJQlVHKCJyZW4xX3NyYyAhPSByZW4yX3NyYyIpOworCQkJcmVuMi0+ZHN0X2VudHJ5LT5wcm9jZXNzZWQgPSAxOworCQkJcmVuMi0+cHJvY2Vzc2VkID0gMTsKKwkJCWlmIChzdHJjbXAocmVuMV9kc3QsIHJlbjJfZHN0KSAhPSAwKSB7CisJCQkJcmVuYW1lX3R5cGUgPSBSRU5BTUVfT05FX0ZJTEVfVE9fVFdPOworCQkJCWNsZWFuX21lcmdlID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJcmVuYW1lX3R5cGUgPSBSRU5BTUVfT05FX0ZJTEVfVE9fT05FOworCQkJCS8qIEJVRzogV2Ugc2hvdWxkIG9ubHkgcmVtb3ZlIHJlbjFfc3JjIGluCisJCQkJICogdGhlIGJhc2Ugc3RhZ2UgKHRoaW5rIG9mIHJlbmFtZSArCisJCQkJICogYWRkLXNvdXJjZSBjYXNlcykuCisJCQkJICovCisJCQkJcmVtb3ZlX2ZpbGUob3B0LCAxLCByZW4xX3NyYywgMSk7CisJCQkJdXBkYXRlX2VudHJ5KHJlbjEtPmRzdF9lbnRyeSwKKwkJCQkJICAgICByZW4xLT5wYWlyLT5vbmUsCisJCQkJCSAgICAgcmVuMS0+cGFpci0+dHdvLAorCQkJCQkgICAgIHJlbjItPnBhaXItPnR3byk7CisJCQl9CisJCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhyZW5hbWVfdHlwZSwgb3B0LCByZW4xLCByZW4yKTsKKwkJfSBlbHNlIGlmICgobG9va3VwID0gc3RyaW5nX2xpc3RfbG9va3VwKHJlbmFtZXMyRHN0LCByZW4xX2RzdCkpKSB7CisJCQkvKiBUd28gZGlmZmVyZW50IGZpbGVzIHJlbmFtZWQgdG8gdGhlIHNhbWUgdGhpbmcgKi8KKwkJCWNoYXIgKnJlbjJfZHN0OworCQkJcmVuMiA9IGxvb2t1cC0+dXRpbDsKKwkJCXJlbjJfZHN0ID0gcmVuMi0+cGFpci0+dHdvLT5wYXRoOworCQkJaWYgKHN0cmNtcChyZW4xX2RzdCwgcmVuMl9kc3QpICE9IDApCisJCQkJQlVHKCJyZW4xX2RzdCAhPSByZW4yX2RzdCIpOworCisJCQljbGVhbl9tZXJnZSA9IDA7CisJCQlyZW4yLT5wcm9jZXNzZWQgPSAxOworCQkJLyoKKwkJCSAqIEJVRzogV2Ugc2hvdWxkIG9ubHkgbWFyayBzcmNfZW50cnkgYXMgcHJvY2Vzc2VkCisJCQkgKiBpZiB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBhIHJlbmFtZSArIGFkZC1zb3VyY2UKKwkJCSAqIGNhc2UuCisJCQkgKi8KKwkJCXJlbjItPnNyY19lbnRyeS0+cHJvY2Vzc2VkID0gMTsKKworCQkJc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oUkVOQU1FX1RXT19GSUxFU19UT19PTkUsCisJCQkJCQkgICBvcHQsIHJlbjEsIHJlbjIpOworCQl9IGVsc2UgeworCQkJLyogUmVuYW1lZCBpbiAxLCBtYXliZSBjaGFuZ2VkIGluIDIgKi8KKwkJCS8qIHdlIG9ubHkgdXNlIHNoYTEgYW5kIG1vZGUgb2YgdGhlc2UgKi8KKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIHNyY19vdGhlciwgZHN0X290aGVyOworCQkJaW50IHRyeV9tZXJnZTsKKworCQkJLyoKKwkJCSAqIHVucGFja190cmVlcyBsb2FkcyBlbnRyaWVzIGZyb20gY29tbW9uLWNvbW1pdAorCQkJICogaW50byBzdGFnZSAxLCBmcm9tIGhlYWQtY29tbWl0IGludG8gc3RhZ2UgMiwgYW5kCisJCQkgKiBmcm9tIG1lcmdlLWNvbW1pdCBpbnRvIHN0YWdlIDMuICBXZSBrZWVwIHRyYWNrCisJCQkgKiBvZiB3aGljaCBzaWRlIGNvcnJlc3BvbmRzIHRvIHRoZSByZW5hbWUuCisJCQkgKi8KKwkJCWludCByZW5hbWVkX3N0YWdlID0gYV9yZW5hbWVzID09IHJlbmFtZXMxID8gMiA6IDM7CisJCQlpbnQgb3RoZXJfc3RhZ2UgPSAgIGFfcmVuYW1lcyA9PSByZW5hbWVzMSA/IDMgOiAyOworCisJCQkvKiBCVUc6IFdlIHNob3VsZCBvbmx5IHJlbW92ZSByZW4xX3NyYyBpbiB0aGUgYmFzZQorCQkJICogc3RhZ2UgYW5kIGluIG90aGVyX3N0YWdlICh0aGluayBvZiByZW5hbWUgKworCQkJICogYWRkLXNvdXJjZSBjYXNlKS4KKwkJCSAqLworCQkJcmVtb3ZlX2ZpbGUob3B0LCAxLCByZW4xX3NyYywKKwkJCQkgICAgcmVuYW1lZF9zdGFnZSA9PSAyIHx8ICF3YXNfdHJhY2tlZChvcHQsIHJlbjFfc3JjKSk7CisKKwkJCW9pZGNweSgmc3JjX290aGVyLm9pZCwKKwkJCSAgICAgICAmcmVuMS0+c3JjX2VudHJ5LT5zdGFnZXNbb3RoZXJfc3RhZ2VdLm9pZCk7CisJCQlzcmNfb3RoZXIubW9kZSA9IHJlbjEtPnNyY19lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5tb2RlOworCQkJb2lkY3B5KCZkc3Rfb3RoZXIub2lkLAorCQkJICAgICAgICZyZW4xLT5kc3RfZW50cnktPnN0YWdlc1tvdGhlcl9zdGFnZV0ub2lkKTsKKwkJCWRzdF9vdGhlci5tb2RlID0gcmVuMS0+ZHN0X2VudHJ5LT5zdGFnZXNbb3RoZXJfc3RhZ2VdLm1vZGU7CisJCQl0cnlfbWVyZ2UgPSAwOworCisJCQlpZiAob2lkZXEoJnNyY19vdGhlci5vaWQsICZudWxsX29pZCkgJiYKKwkJCSAgICByZW4xLT5kaXJfcmVuYW1lX29yaWdpbmFsX3R5cGUgPT0gJ0EnKSB7CisJCQkJc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oUkVOQU1FX1ZJQV9ESVIsCisJCQkJCQkJICAgb3B0LCByZW4xLCBOVUxMKTsKKwkJCX0gZWxzZSBpZiAob2lkZXEoJnNyY19vdGhlci5vaWQsICZudWxsX29pZCkpIHsKKwkJCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhSRU5BTUVfREVMRVRFLAorCQkJCQkJCSAgIG9wdCwgcmVuMSwgTlVMTCk7CisJCQl9IGVsc2UgaWYgKChkc3Rfb3RoZXIubW9kZSA9PSByZW4xLT5wYWlyLT50d28tPm1vZGUpICYmCisJCQkJICAgb2lkZXEoJmRzdF9vdGhlci5vaWQsICZyZW4xLT5wYWlyLT50d28tPm9pZCkpIHsKKwkJCQkvKgorCQkJCSAqIEFkZGVkIGZpbGUgb24gdGhlIG90aGVyIHNpZGUgaWRlbnRpY2FsIHRvCisJCQkJICogdGhlIGZpbGUgYmVpbmcgcmVuYW1lZDogY2xlYW4gbWVyZ2UuCisJCQkJICogQWxzbywgdGhlcmUgaXMgbm8gbmVlZCB0byBvdmVyd3JpdGUgdGhlCisJCQkJICogZmlsZSBhbHJlYWR5IGluIHRoZSB3b3JraW5nIGNvcHksIHNvIGNhbGwKKwkJCQkgKiB1cGRhdGVfZmlsZV9mbGFncygpIGluc3RlYWQgb2YKKwkJCQkgKiB1cGRhdGVfZmlsZSgpLgorCQkJCSAqLworCQkJCWlmICh1cGRhdGVfZmlsZV9mbGFncyhvcHQsCisJCQkJCQkgICAgICByZW4xLT5wYWlyLT50d28sCisJCQkJCQkgICAgICByZW4xX2RzdCwKKwkJCQkJCSAgICAgIDEsIC8qIHVwZGF0ZV9jYWNoZSAqLworCQkJCQkJICAgICAgMCAgLyogdXBkYXRlX3dkICAgICovKSkKKwkJCQkJY2xlYW5fbWVyZ2UgPSAtMTsKKwkJCX0gZWxzZSBpZiAoIW9pZGVxKCZkc3Rfb3RoZXIub2lkLCAmbnVsbF9vaWQpKSB7CisJCQkJLyoKKwkJCQkgKiBQcm9iYWJseSBub3QgYSBjbGVhbiBtZXJnZSwgYnV0IGl0J3MKKwkJCQkgKiBwcmVtYXR1cmUgdG8gc2V0IGNsZWFuX21lcmdlIHRvIDAgaGVyZSwKKwkJCQkgKiBiZWNhdXNlIGlmIHRoZSByZW5hbWUgbWVyZ2VzIGNsZWFubHkgYW5kCisJCQkJICogdGhlIG1lcmdlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgbmV3bHkgYWRkZWQKKwkJCQkgKiBmaWxlLCB0aGVuIHRoZSBtZXJnZSB3aWxsIGJlIGNsZWFuLgorCQkJCSAqLworCQkJCXNldHVwX3JlbmFtZV9jb25mbGljdF9pbmZvKFJFTkFNRV9BREQsCisJCQkJCQkJICAgb3B0LCByZW4xLCBOVUxMKTsKKwkJCX0gZWxzZQorCQkJCXRyeV9tZXJnZSA9IDE7CisKKwkJCWlmIChjbGVhbl9tZXJnZSA8IDApCisJCQkJZ290byBjbGVhbnVwX2FuZF9yZXR1cm47CisJCQlpZiAodHJ5X21lcmdlKSB7CisJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sICphLCAqYjsKKwkJCQlzcmNfb3RoZXIucGF0aCA9IChjaGFyICopcmVuMV9zcmM7CisKKwkJCQlvID0gcmVuMS0+cGFpci0+b25lOworCQkJCWlmIChhX3JlbmFtZXMgPT0gcmVuYW1lczEpIHsKKwkJCQkJYSA9IHJlbjEtPnBhaXItPnR3bzsKKwkJCQkJYiA9ICZzcmNfb3RoZXI7CisJCQkJfSBlbHNlIHsKKwkJCQkJYiA9IHJlbjEtPnBhaXItPnR3bzsKKwkJCQkJYSA9ICZzcmNfb3RoZXI7CisJCQkJfQorCQkJCXVwZGF0ZV9lbnRyeShyZW4xLT5kc3RfZW50cnksIG8sIGEsIGIpOworCQkJCXNldHVwX3JlbmFtZV9jb25mbGljdF9pbmZvKFJFTkFNRV9OT1JNQUwsCisJCQkJCQkJICAgb3B0LCByZW4xLCBOVUxMKTsKKwkJCX0KKwkJfQorCX0KK2NsZWFudXBfYW5kX3JldHVybjoKKwlzdHJpbmdfbGlzdF9jbGVhcigmYV9ieV9kc3QsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZiX2J5X2RzdCwgMCk7CisKKwlyZXR1cm4gY2xlYW5fbWVyZ2U7Cit9CisKK3N0cnVjdCByZW5hbWVfaW5mbyB7CisJc3RydWN0IHN0cmluZ19saXN0ICpoZWFkX3JlbmFtZXM7CisJc3RydWN0IHN0cmluZ19saXN0ICptZXJnZV9yZW5hbWVzOworfTsKKworc3RhdGljIHZvaWQgaW5pdGlhbF9jbGVhbnVwX3JlbmFtZShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnBhaXJzLAorCQkJCSAgIHN0cnVjdCBoYXNobWFwICpkaXJfcmVuYW1lcykKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IGRpcl9yZW5hbWVfZW50cnkgKmU7CisKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5KGRpcl9yZW5hbWVzLCAmaXRlciwgZSwKKwkJCQllbnQgLyogbWVtYmVyIG5hbWUgKi8pIHsKKwkJZnJlZShlLT5kaXIpOworCQlzdHJidWZfcmVsZWFzZSgmZS0+bmV3X2Rpcik7CisJCS8qIHBvc3NpYmxlX25ld19kaXJzIGFscmVhZHkgY2xlYXJlZCBpbiBnZXRfZGlyZWN0b3J5X3JlbmFtZXMgKi8KKwl9CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoZGlyX3JlbmFtZXMsIHN0cnVjdCBkaXJfcmVuYW1lX2VudHJ5LCBlbnQpOworCWZyZWUoZGlyX3JlbmFtZXMpOworCisJZnJlZShwYWlycy0+cXVldWUpOworCWZyZWUocGFpcnMpOworfQorCitzdGF0aWMgaW50IGRldGVjdF9hbmRfcHJvY2Vzc19yZW5hbWVzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJICAgICAgc3RydWN0IHRyZWUgKmNvbW1vbiwKKwkJCQkgICAgICBzdHJ1Y3QgdHJlZSAqaGVhZCwKKwkJCQkgICAgICBzdHJ1Y3QgdHJlZSAqbWVyZ2UsCisJCQkJICAgICAgc3RydWN0IHN0cmluZ19saXN0ICplbnRyaWVzLAorCQkJCSAgICAgIHN0cnVjdCByZW5hbWVfaW5mbyAqcmkpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpoZWFkX3BhaXJzLCAqbWVyZ2VfcGFpcnM7CisJc3RydWN0IGhhc2htYXAgKmRpcl9yZV9oZWFkLCAqZGlyX3JlX21lcmdlOworCWludCBjbGVhbiA9IDE7CisKKwlyaS0+aGVhZF9yZW5hbWVzID0gTlVMTDsKKwlyaS0+bWVyZ2VfcmVuYW1lcyA9IE5VTEw7CisKKwlpZiAoIW1lcmdlX2RldGVjdF9yZW5hbWUob3B0KSkKKwkJcmV0dXJuIDE7CisKKwloZWFkX3BhaXJzID0gZ2V0X2RpZmZwYWlycyhvcHQsIGNvbW1vbiwgaGVhZCk7CisJbWVyZ2VfcGFpcnMgPSBnZXRfZGlmZnBhaXJzKG9wdCwgY29tbW9uLCBtZXJnZSk7CisKKwlpZiAoKG9wdC0+ZGV0ZWN0X2RpcmVjdG9yeV9yZW5hbWVzID09IE1FUkdFX0RJUkVDVE9SWV9SRU5BTUVTX1RSVUUpIHx8CisJICAgIChvcHQtPmRldGVjdF9kaXJlY3RvcnlfcmVuYW1lcyA9PSBNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19DT05GTElDVCAmJgorCSAgICAgIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCkpIHsKKwkJZGlyX3JlX2hlYWQgPSBnZXRfZGlyZWN0b3J5X3JlbmFtZXMoaGVhZF9wYWlycyk7CisJCWRpcl9yZV9tZXJnZSA9IGdldF9kaXJlY3RvcnlfcmVuYW1lcyhtZXJnZV9wYWlycyk7CisKKwkJaGFuZGxlX2RpcmVjdG9yeV9sZXZlbF9jb25mbGljdHMob3B0LAorCQkJCQkJIGRpcl9yZV9oZWFkLCBoZWFkLAorCQkJCQkJIGRpcl9yZV9tZXJnZSwgbWVyZ2UpOworCX0gZWxzZSB7CisJCWRpcl9yZV9oZWFkICA9IHhtYWxsb2Moc2l6ZW9mKCpkaXJfcmVfaGVhZCkpOworCQlkaXJfcmVfbWVyZ2UgPSB4bWFsbG9jKHNpemVvZigqZGlyX3JlX21lcmdlKSk7CisJCWRpcl9yZW5hbWVfaW5pdChkaXJfcmVfaGVhZCk7CisJCWRpcl9yZW5hbWVfaW5pdChkaXJfcmVfbWVyZ2UpOworCX0KKworCXJpLT5oZWFkX3JlbmFtZXMgID0gZ2V0X3JlbmFtZXMob3B0LCBvcHQtPmJyYW5jaDEsIGhlYWRfcGFpcnMsCisJCQkJCWRpcl9yZV9tZXJnZSwgZGlyX3JlX2hlYWQsIGhlYWQsCisJCQkJCWNvbW1vbiwgaGVhZCwgbWVyZ2UsIGVudHJpZXMsCisJCQkJCSZjbGVhbik7CisJaWYgKGNsZWFuIDwgMCkKKwkJZ290byBjbGVhbnVwOworCXJpLT5tZXJnZV9yZW5hbWVzID0gZ2V0X3JlbmFtZXMob3B0LCBvcHQtPmJyYW5jaDIsIG1lcmdlX3BhaXJzLAorCQkJCQlkaXJfcmVfaGVhZCwgZGlyX3JlX21lcmdlLCBtZXJnZSwKKwkJCQkJY29tbW9uLCBoZWFkLCBtZXJnZSwgZW50cmllcywKKwkJCQkJJmNsZWFuKTsKKwlpZiAoY2xlYW4gPCAwKQorCQlnb3RvIGNsZWFudXA7CisJY2xlYW4gJj0gcHJvY2Vzc19yZW5hbWVzKG9wdCwgcmktPmhlYWRfcmVuYW1lcywgcmktPm1lcmdlX3JlbmFtZXMpOworCitjbGVhbnVwOgorCS8qCisJICogU29tZSBjbGVhbnVwIGlzIGRlZmVycmVkIHVudGlsIGNsZWFudXBfcmVuYW1lcygpIGJlY2F1c2UgdGhlCisJICogZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzdGlsbCBuZWVkZWQgYW5kIHJlZmVyZW5jZWQgaW4KKwkgKiBwcm9jZXNzX2VudHJ5KCkuICBCdXQgdGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB3ZSBjYW4gZnJlZSBub3cuCisJICovCisJaW5pdGlhbF9jbGVhbnVwX3JlbmFtZShoZWFkX3BhaXJzLCBkaXJfcmVfaGVhZCk7CisJaW5pdGlhbF9jbGVhbnVwX3JlbmFtZShtZXJnZV9wYWlycywgZGlyX3JlX21lcmdlKTsKKworCXJldHVybiBjbGVhbjsKK30KKworc3RhdGljIHZvaWQgZmluYWxfY2xlYW51cF9yZW5hbWUoc3RydWN0IHN0cmluZ19saXN0ICpyZW5hbWUpCit7CisJY29uc3Qgc3RydWN0IHJlbmFtZSAqcmU7CisJaW50IGk7CisKKwlpZiAocmVuYW1lID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCByZW5hbWUtPm5yOyBpKyspIHsKKwkJcmUgPSByZW5hbWUtPml0ZW1zW2ldLnV0aWw7CisJCWRpZmZfZnJlZV9maWxlcGFpcihyZS0+cGFpcik7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKHJlbmFtZSwgMSk7CisJZnJlZShyZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCBmaW5hbF9jbGVhbnVwX3JlbmFtZXMoc3RydWN0IHJlbmFtZV9pbmZvICpyZV9pbmZvKQoreworCWZpbmFsX2NsZWFudXBfcmVuYW1lKHJlX2luZm8tPmhlYWRfcmVuYW1lcyk7CisJZmluYWxfY2xlYW51cF9yZW5hbWUocmVfaW5mby0+bWVyZ2VfcmVuYW1lcyk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vaWRfc3RyYnVmKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpkc3QpCit7CisJdm9pZCAqYnVmOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJYnVmID0gcmVhZF9vYmplY3RfZmlsZShvaWQsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnIob3B0LCBfKCJjYW5ub3QgcmVhZCBvYmplY3QgJXMiKSwgb2lkX3RvX2hleChvaWQpKTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKGJ1Zik7CisJCXJldHVybiBlcnIob3B0LCBfKCJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIpLCBvaWRfdG9faGV4KG9pZCkpOworCX0KKwlzdHJidWZfYXR0YWNoKGRzdCwgYnVmLCBzaXplLCBzaXplICsgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmxvYl91bmNoYW5nZWQoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCSAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCisJCQkgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLAorCQkJICBpbnQgcmVub3JtYWxpemUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBvYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBhYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7IC8qIGFzc3VtZSBjaGFuZ2VkIGZvciBzYWZldHkgKi8KKwljb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlkeCA9IG9wdC0+cmVwby0+aW5kZXg7CisKKwlpZiAoYS0+bW9kZSAhPSBvLT5tb2RlKQorCQlyZXR1cm4gMDsKKwlpZiAob2lkZXEoJm8tPm9pZCwgJmEtPm9pZCkpCisJCXJldHVybiAxOworCWlmICghcmVub3JtYWxpemUpCisJCXJldHVybiAwOworCisJaWYgKHJlYWRfb2lkX3N0cmJ1ZihvcHQsICZvLT5vaWQsICZvYnVmKSB8fAorCSAgICByZWFkX29pZF9zdHJidWYob3B0LCAmYS0+b2lkLCAmYWJ1ZikpCisJCWdvdG8gZXJyb3JfcmV0dXJuOworCS8qCisJICogTm90ZTogYmluYXJ5IHwgaXMgdXNlZCBzbyB0aGF0IGJvdGggcmVub3JtYWxpemF0aW9ucyBhcmUKKwkgKiBwZXJmb3JtZWQuICBDb21wYXJpc29uIGNhbiBiZSBza2lwcGVkIGlmIGJvdGggZmlsZXMgYXJlCisJICogdW5jaGFuZ2VkIHNpbmNlIHRoZWlyIHNoYTFzIGhhdmUgYWxyZWFkeSBiZWVuIGNvbXBhcmVkLgorCSAqLworCWlmIChyZW5vcm1hbGl6ZV9idWZmZXIoaWR4LCBwYXRoLCBvYnVmLmJ1Ziwgb2J1Zi5sZW4sICZvYnVmKSB8CisJICAgIHJlbm9ybWFsaXplX2J1ZmZlcihpZHgsIHBhdGgsIGFidWYuYnVmLCBhYnVmLmxlbiwgJmFidWYpKQorCQlyZXQgPSAob2J1Zi5sZW4gPT0gYWJ1Zi5sZW4gJiYgIW1lbWNtcChvYnVmLmJ1ZiwgYWJ1Zi5idWYsIG9idWYubGVuKSk7CisKK2Vycm9yX3JldHVybjoKKwlzdHJidWZfcmVsZWFzZSgmb2J1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmFidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX21vZGlmeV9kZWxldGUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQljb25zdCBjaGFyICpwYXRoLAorCQkJCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvLAorCQkJCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLAorCQkJCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpiKQoreworCWNvbnN0IGNoYXIgKm1vZGlmeV9icmFuY2gsICpkZWxldGVfYnJhbmNoOworCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjaGFuZ2VkOworCisJaWYgKGlzX3ZhbGlkKGEpKSB7CisJCW1vZGlmeV9icmFuY2ggPSBvcHQtPmJyYW5jaDE7CisJCWRlbGV0ZV9icmFuY2ggPSBvcHQtPmJyYW5jaDI7CisJCWNoYW5nZWQgPSBhOworCX0gZWxzZSB7CisJCW1vZGlmeV9icmFuY2ggPSBvcHQtPmJyYW5jaDI7CisJCWRlbGV0ZV9icmFuY2ggPSBvcHQtPmJyYW5jaDE7CisJCWNoYW5nZWQgPSBiOworCX0KKworCXJldHVybiBoYW5kbGVfY2hhbmdlX2RlbGV0ZShvcHQsCisJCQkJICAgIHBhdGgsIE5VTEwsCisJCQkJICAgIG8sIGNoYW5nZWQsCisJCQkJICAgIG1vZGlmeV9icmFuY2gsIGRlbGV0ZV9icmFuY2gsCisJCQkJICAgIF8oIm1vZGlmeSIpLCBfKCJtb2RpZmllZCIpKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfY29udGVudF9tZXJnZShzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvICptZmksCisJCQkJc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCQljb25zdCBjaGFyICpwYXRoLAorCQkJCWludCBpc19kaXJ0eSwKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbywKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiwKKwkJCQlzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpKQoreworCWNvbnN0IGNoYXIgKnJlYXNvbiA9IF8oImNvbnRlbnQiKTsKKwl1bnNpZ25lZCBkZl9jb25mbGljdF9yZW1haW5zID0gMDsKKworCWlmICghaXNfdmFsaWQobykpCisJCXJlYXNvbiA9IF8oImFkZC9hZGQiKTsKKworCWFzc2VydChvLT5wYXRoICYmIGEtPnBhdGggJiYgYi0+cGF0aCk7CisJaWYgKGNpICYmIGRpcl9pbl93YXkob3B0LT5yZXBvLT5pbmRleCwgcGF0aCwgIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCwKKwkJCSAgICAgU19JU0dJVExJTksoY2ktPnJlbjEtPnBhaXItPnR3by0+bW9kZSkpKQorCQlkZl9jb25mbGljdF9yZW1haW5zID0gMTsKKworCWlmIChtZXJnZV9tb2RlX2FuZF9jb250ZW50cyhvcHQsIG8sIGEsIGIsIHBhdGgsCisJCQkJICAgIG9wdC0+YnJhbmNoMSwgb3B0LT5icmFuY2gyLAorCQkJCSAgICBvcHQtPnByaXYtPmNhbGxfZGVwdGggKiAyLCBtZmkpKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFdlIGNhbiBza2lwIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUgZmlsZSBpZmY6CisJICogICBhKSBUaGUgbWVyZ2UgaXMgY2xlYW4KKwkgKiAgIGIpIFRoZSBtZXJnZSBtYXRjaGVzIHdoYXQgd2FzIGluIEhFQUQgKGNvbnRlbnQsIG1vZGUsIHBhdGhuYW1lKQorCSAqICAgYykgVGhlIHRhcmdldCBwYXRoIGlzIHVzYWJsZSAoaS5lLiBub3QgaW52b2x2ZWQgaW4gRC9GIGNvbmZsaWN0KQorCSAqLworCWlmIChtZmktPmNsZWFuICYmIHdhc190cmFja2VkX2FuZF9tYXRjaGVzKG9wdCwgcGF0aCwgJm1maS0+YmxvYikgJiYKKwkgICAgIWRmX2NvbmZsaWN0X3JlbWFpbnMpIHsKKwkJaW50IHBvczsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCQlvdXRwdXQob3B0LCAzLCBfKCJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiKSwgcGF0aCk7CisJCWlmIChhZGRfY2FjaGVpbmZvKG9wdCwgJm1maS0+YmxvYiwgcGF0aCwKKwkJCQkgIDAsICghb3B0LT5wcml2LT5jYWxsX2RlcHRoICYmICFpc19kaXJ0eSksIDApKQorCQkJcmV0dXJuIC0xOworCQkvKgorCQkgKiBIb3dldmVyLCBhZGRfY2FjaGVpbmZvKCkgd2lsbCBkZWxldGUgdGhlIG9sZCBjYWNoZSBlbnRyeQorCQkgKiBhbmQgYWRkIGEgbmV3IG9uZS4gIFdlIG5lZWQgdG8gY29weSBvdmVyIGFueSBza2lwX3dvcmt0cmVlCisJCSAqIGZsYWcgdG8gYXZvaWQgbWFraW5nIHRoZSBmaWxlIGFwcGVhciBhcyBpZiBpdCB3ZXJlCisJCSAqIGRlbGV0ZWQgYnkgdGhlIHVzZXIuCisJCSAqLworCQlwb3MgPSBpbmRleF9uYW1lX3Bvcygmb3B0LT5wcml2LT5vcmlnX2luZGV4LCBwYXRoLCBzdHJsZW4ocGF0aCkpOworCQljZSA9IG9wdC0+cHJpdi0+b3JpZ19pbmRleC5jYWNoZVtwb3NdOworCQlpZiAoY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJCXBvcyA9IGluZGV4X25hbWVfcG9zKG9wdC0+cmVwby0+aW5kZXgsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisJCQljZSA9IG9wdC0+cmVwby0+aW5kZXgtPmNhY2hlW3Bvc107CisJCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfU0tJUF9XT1JLVFJFRTsKKwkJfQorCQlyZXR1cm4gbWZpLT5jbGVhbjsKKwl9CisKKwlpZiAoIW1maS0+Y2xlYW4pIHsKKwkJaWYgKFNfSVNHSVRMSU5LKG1maS0+YmxvYi5tb2RlKSkKKwkJCXJlYXNvbiA9IF8oInN1Ym1vZHVsZSIpOworCQlvdXRwdXQob3B0LCAxLCBfKCJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIpLAorCQkJCXJlYXNvbiwgcGF0aCk7CisJCWlmIChjaSAmJiAhZGZfY29uZmxpY3RfcmVtYWlucykKKwkJCWlmICh1cGRhdGVfc3RhZ2VzKG9wdCwgcGF0aCwgbywgYSwgYikpCisJCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChkZl9jb25mbGljdF9yZW1haW5zIHx8IGlzX2RpcnR5KSB7CisJCWNoYXIgKm5ld19wYXRoOworCQlpZiAob3B0LT5wcml2LT5jYWxsX2RlcHRoKSB7CisJCQlyZW1vdmVfZmlsZV9mcm9tX2luZGV4KG9wdC0+cmVwby0+aW5kZXgsIHBhdGgpOworCQl9IGVsc2UgeworCQkJaWYgKCFtZmktPmNsZWFuKSB7CisJCQkJaWYgKHVwZGF0ZV9zdGFnZXMob3B0LCBwYXRoLCBvLCBhLCBiKSkKKwkJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgZmlsZV9mcm9tX3N0YWdlMiA9IHdhc190cmFja2VkKG9wdCwgcGF0aCk7CisKKwkJCQlpZiAodXBkYXRlX3N0YWdlcyhvcHQsIHBhdGgsIE5VTEwsCisJCQkJCQkgIGZpbGVfZnJvbV9zdGFnZTIgPyAmbWZpLT5ibG9iIDogTlVMTCwKKwkJCQkJCSAgZmlsZV9mcm9tX3N0YWdlMiA/IE5VTEwgOiAmbWZpLT5ibG9iKSkKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCX0KKwkJbmV3X3BhdGggPSB1bmlxdWVfcGF0aChvcHQsIHBhdGgsIGNpLT5yZW4xLT5icmFuY2gpOworCQlpZiAoaXNfZGlydHkpIHsKKwkJCW91dHB1dChvcHQsIDEsIF8oIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIpLAorCQkJICAgICAgIHBhdGgpOworCQl9CisJCW91dHB1dChvcHQsIDEsIF8oIkFkZGluZyBhcyAlcyBpbnN0ZWFkIiksIG5ld19wYXRoKTsKKwkJaWYgKHVwZGF0ZV9maWxlKG9wdCwgMCwgJm1maS0+YmxvYiwgbmV3X3BhdGgpKSB7CisJCQlmcmVlKG5ld19wYXRoKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlmcmVlKG5ld19wYXRoKTsKKwkJbWZpLT5jbGVhbiA9IDA7CisJfSBlbHNlIGlmICh1cGRhdGVfZmlsZShvcHQsIG1maS0+Y2xlYW4sICZtZmktPmJsb2IsIHBhdGgpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuICFpc19kaXJ0eSAmJiBtZmktPmNsZWFuOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9yZW5hbWVfbm9ybWFsKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbywKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSwKKwkJCQljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiwKKwkJCQlzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpKQoreworCXN0cnVjdCByZW5hbWUgKnJlbiA9IGNpLT5yZW4xOworCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpOworCWludCBjbGVhbjsKKwlpbnQgc2lkZSA9IChyZW4tPmJyYW5jaCA9PSBvcHQtPmJyYW5jaDEgPyAyIDogMyk7CisKKwkvKiBNZXJnZSB0aGUgY29udGVudCBhbmQgd3JpdGUgaXQgb3V0ICovCisJY2xlYW4gPSBoYW5kbGVfY29udGVudF9tZXJnZSgmbWZpLCBvcHQsIHBhdGgsIHdhc19kaXJ0eShvcHQsIHBhdGgpLAorCQkJCSAgICAgbywgYSwgYiwgY2kpOworCisJaWYgKGNsZWFuICYmCisJICAgIG9wdC0+ZGV0ZWN0X2RpcmVjdG9yeV9yZW5hbWVzID09IE1FUkdFX0RJUkVDVE9SWV9SRU5BTUVTX0NPTkZMSUNUICYmCisJICAgIHJlbi0+ZGlyX3JlbmFtZV9vcmlnaW5hbF9kZXN0KSB7CisJCWlmICh1cGRhdGVfc3RhZ2VzKG9wdCwgcGF0aCwKKwkJCQkgIE5VTEwsCisJCQkJICBzaWRlID09IDIgPyAmbWZpLmJsb2IgOiBOVUxMLAorCQkJCSAgc2lkZSA9PSAyID8gTlVMTCA6ICZtZmkuYmxvYikpCisJCQlyZXR1cm4gLTE7CisJCWNsZWFuID0gMDsgLyogbm90IGNsZWFuLCBidXQgY29uZmxpY3RlZCAqLworCX0KKwlyZXR1cm4gY2xlYW47Cit9CisKK3N0YXRpYyB2b2lkIGRpcl9yZW5hbWVfd2FybmluZyhjb25zdCBjaGFyICptc2csCisJCQkgICAgICAgaW50IGlzX2FkZCwKKwkJCSAgICAgICBpbnQgY2xlYW4sCisJCQkgICAgICAgc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCSAgICAgICBzdHJ1Y3QgcmVuYW1lICpyZW4pCit7CisJY29uc3QgY2hhciAqb3RoZXJfYnJhbmNoOworCW90aGVyX2JyYW5jaCA9IChyZW4tPmJyYW5jaCA9PSBvcHQtPmJyYW5jaDEgPworCQkJb3B0LT5icmFuY2gyIDogb3B0LT5icmFuY2gxKTsKKwlpZiAoaXNfYWRkKSB7CisJCW91dHB1dChvcHQsIGNsZWFuID8gMiA6IDEsIG1zZywKKwkJICAgICAgIHJlbi0+cGFpci0+b25lLT5wYXRoLCByZW4tPmJyYW5jaCwKKwkJICAgICAgIG90aGVyX2JyYW5jaCwgcmVuLT5wYWlyLT50d28tPnBhdGgpOworCQlyZXR1cm47CisJfQorCW91dHB1dChvcHQsIGNsZWFuID8gMiA6IDEsIG1zZywKKwkgICAgICAgcmVuLT5wYWlyLT5vbmUtPnBhdGgsIHJlbi0+ZGlyX3JlbmFtZV9vcmlnaW5hbF9kZXN0LCByZW4tPmJyYW5jaCwKKwkgICAgICAgb3RoZXJfYnJhbmNoLCByZW4tPnBhaXItPnR3by0+cGF0aCk7Cit9CitzdGF0aWMgaW50IHdhcm5fYWJvdXRfZGlyX3JlbmFtZWRfZW50cmllcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJCQkgIHN0cnVjdCByZW5hbWUgKnJlbikKK3sKKwljb25zdCBjaGFyICptc2c7CisJaW50IGNsZWFuID0gMSwgaXNfYWRkOworCisJaWYgKCFyZW4pCisJCXJldHVybiBjbGVhbjsKKworCS8qIFJldHVybiBlYXJseSBpZiByZW4gd2FzIG5vdCBhZmZlY3RlZC9jcmVhdGVkIGJ5IGEgZGlyZWN0b3J5IHJlbmFtZSAqLworCWlmICghcmVuLT5kaXJfcmVuYW1lX29yaWdpbmFsX2Rlc3QpCisJCXJldHVybiBjbGVhbjsKKworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlhc3NlcnQob3B0LT5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPiBNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19OT05FKTsKKwlhc3NlcnQocmVuLT5kaXJfcmVuYW1lX29yaWdpbmFsX3R5cGUgPT0gJ0EnIHx8CisJICAgICAgIHJlbi0+ZGlyX3JlbmFtZV9vcmlnaW5hbF90eXBlID09ICdSJyk7CisKKwkvKiBDaGVjayB3aGV0aGVyIHRvIHRyZWF0IGRpcmVjdG9yeSByZW5hbWVzIGFzIGEgY29uZmxpY3QgKi8KKwljbGVhbiA9IChvcHQtPmRldGVjdF9kaXJlY3RvcnlfcmVuYW1lcyA9PSBNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19UUlVFKTsKKworCWlzX2FkZCA9IChyZW4tPmRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZSA9PSAnQScpOworCWlmIChyZW4tPmRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZSA9PSAnQScgJiYgY2xlYW4pIHsKKwkJbXNnID0gXygiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSAiCisJCQkiZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gJXM7IG1vdmluZyBpdCB0byAlcy4iKTsKKwl9IGVsc2UgaWYgKHJlbi0+ZGlyX3JlbmFtZV9vcmlnaW5hbF90eXBlID09ICdBJyAmJiAhY2xlYW4pIHsKKwkJbXNnID0gXygiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyAiCisJCQkiaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gJXMsICIKKwkJCSJzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIpOworCX0gZWxzZSBpZiAocmVuLT5kaXJfcmVuYW1lX29yaWdpbmFsX3R5cGUgPT0gJ1InICYmIGNsZWFuKSB7CisJCW1zZyA9IF8oIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgIgorCQkJImRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyBtb3ZpbmcgaXQgdG8gJXMuIik7CisJfSBlbHNlIGlmIChyZW4tPmRpcl9yZW5hbWVfb3JpZ2luYWxfdHlwZSA9PSAnUicgJiYgIWNsZWFuKSB7CisJCW1zZyA9IF8oIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgIgorCQkJImluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzLCAiCisJCQkic3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iKTsKKwl9IGVsc2UgeworCQlCVUcoIkltcG9zc2libGUgZGlyX3JlbmFtZV9vcmlnaW5hbF90eXBlL2NsZWFuIGNvbWJpbmF0aW9uIik7CisJfQorCWRpcl9yZW5hbWVfd2FybmluZyhtc2csIGlzX2FkZCwgY2xlYW4sIG9wdCwgcmVuKTsKKworCXJldHVybiBjbGVhbjsKK30KKworLyogUGVyIGVudHJ5IG1lcmdlIGZ1bmN0aW9uICovCitzdGF0aWMgaW50IHByb2Nlc3NfZW50cnkoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwKKwkJCSBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZW50cnkpCit7CisJaW50IGNsZWFuX21lcmdlID0gMTsKKwlpbnQgbm9ybWFsaXplID0gb3B0LT5yZW5vcm1hbGl6ZTsKKworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvID0gJmVudHJ5LT5zdGFnZXNbMV07CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEgPSAmZW50cnktPnN0YWdlc1syXTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiA9ICZlbnRyeS0+c3RhZ2VzWzNdOworCWludCBvX3ZhbGlkID0gaXNfdmFsaWQobyk7CisJaW50IGFfdmFsaWQgPSBpc192YWxpZChhKTsKKwlpbnQgYl92YWxpZCA9IGlzX3ZhbGlkKGIpOworCW8tPnBhdGggPSBhLT5wYXRoID0gYi0+cGF0aCA9IChjaGFyKilwYXRoOworCisJZW50cnktPnByb2Nlc3NlZCA9IDE7CisJaWYgKGVudHJ5LT5yZW5hbWVfY29uZmxpY3RfaW5mbykgeworCQlzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpID0gZW50cnktPnJlbmFtZV9jb25mbGljdF9pbmZvOworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdGVtcDsKKwkJaW50IHBhdGhfY2xlYW47CisKKwkJcGF0aF9jbGVhbiA9IHdhcm5fYWJvdXRfZGlyX3JlbmFtZWRfZW50cmllcyhvcHQsIGNpLT5yZW4xKTsKKwkJcGF0aF9jbGVhbiAmPSB3YXJuX2Fib3V0X2Rpcl9yZW5hbWVkX2VudHJpZXMob3B0LCBjaS0+cmVuMik7CisKKwkJLyoKKwkJICogRm9yIGNhc2VzIHdpdGggYSBzaW5nbGUgcmVuYW1lLCB7byxhLGJ9LT5wYXRoIGhhdmUgYWxsIGJlZW4KKwkJICogc2V0IHRvIHRoZSByZW5hbWUgdGFyZ2V0IHBhdGg7IHdlIG5lZWQgdG8gc2V0IHR3byBvZiB0aGVzZQorCQkgKiBiYWNrIHRvIHRoZSByZW5hbWUgc291cmNlLgorCQkgKiBGb3IgcmVuYW1lL3JlbmFtZSBjb25mbGljdHMsIHdlJ2xsIG1hbnVhbGx5IGZpeCBwYXRocyBiZWxvdy4KKwkJICovCisJCXRlbXAgPSAob3B0LT5icmFuY2gxID09IGNpLT5yZW4xLT5icmFuY2gpID8gYiA6IGE7CisJCW8tPnBhdGggPSB0ZW1wLT5wYXRoID0gY2ktPnJlbjEtPnBhaXItPm9uZS0+cGF0aDsKKwkJaWYgKGNpLT5yZW4yKSB7CisJCQlhc3NlcnQob3B0LT5icmFuY2gxID09IGNpLT5yZW4xLT5icmFuY2gpOworCQl9CisKKwkJc3dpdGNoIChjaS0+cmVuYW1lX3R5cGUpIHsKKwkJY2FzZSBSRU5BTUVfTk9STUFMOgorCQljYXNlIFJFTkFNRV9PTkVfRklMRV9UT19PTkU6CisJCQljbGVhbl9tZXJnZSA9IGhhbmRsZV9yZW5hbWVfbm9ybWFsKG9wdCwgcGF0aCwgbywgYSwgYiwKKwkJCQkJCQkgICBjaSk7CisJCQlicmVhazsKKwkJY2FzZSBSRU5BTUVfVklBX0RJUjoKKwkJCWNsZWFuX21lcmdlID0gaGFuZGxlX3JlbmFtZV92aWFfZGlyKG9wdCwgY2kpOworCQkJYnJlYWs7CisJCWNhc2UgUkVOQU1FX0FERDoKKwkJCS8qCisJCQkgKiBQcm9iYWJseSB1bmNsZWFuIG1lcmdlLCBidXQgaWYgdGhlIHJlbmFtZWQgZmlsZQorCQkJICogbWVyZ2VzIGNsZWFubHkgYW5kIHRoZSByZXN1bHQgY2FuIHRoZW4gYmUKKwkJCSAqIHR3by13YXkgbWVyZ2VkIGNsZWFubHkgd2l0aCB0aGUgYWRkZWQgZmlsZSwgSQorCQkJICogZ3Vlc3MgaXQncyBhIGNsZWFuIG1lcmdlPworCQkJICovCisJCQljbGVhbl9tZXJnZSA9IGhhbmRsZV9yZW5hbWVfYWRkKG9wdCwgY2kpOworCQkJYnJlYWs7CisJCWNhc2UgUkVOQU1FX0RFTEVURToKKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCWlmIChoYW5kbGVfcmVuYW1lX2RlbGV0ZShvcHQsIGNpKSkKKwkJCQljbGVhbl9tZXJnZSA9IC0xOworCQkJYnJlYWs7CisJCWNhc2UgUkVOQU1FX09ORV9GSUxFX1RPX1RXTzoKKwkJCS8qCisJCQkgKiBNYW51YWxseSBmaXggdXAgcGF0aHM7IG5vdGU6CisJCQkgKiByZW5bMTJdLT5wYWlyLT5vbmUtPnBhdGggYXJlIGVxdWFsLgorCQkJICovCisJCQlvLT5wYXRoID0gY2ktPnJlbjEtPnBhaXItPm9uZS0+cGF0aDsKKwkJCWEtPnBhdGggPSBjaS0+cmVuMS0+cGFpci0+dHdvLT5wYXRoOworCQkJYi0+cGF0aCA9IGNpLT5yZW4yLT5wYWlyLT50d28tPnBhdGg7CisKKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCWlmIChoYW5kbGVfcmVuYW1lX3JlbmFtZV8xdG8yKG9wdCwgY2kpKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CisJCQlicmVhazsKKwkJY2FzZSBSRU5BTUVfVFdPX0ZJTEVTX1RPX09ORToKKwkJCS8qCisJCQkgKiBNYW51YWxseSBmaXggdXAgcGF0aHM7IG5vdGUsCisJCQkgKiByZW5bMTJdLT5wYWlyLT50d28tPnBhdGggYXJlIGFjdHVhbGx5IGVxdWFsLgorCQkJICovCisJCQlvLT5wYXRoID0gTlVMTDsKKwkJCWEtPnBhdGggPSBjaS0+cmVuMS0+cGFpci0+dHdvLT5wYXRoOworCQkJYi0+cGF0aCA9IGNpLT5yZW4yLT5wYWlyLT50d28tPnBhdGg7CisKKwkJCS8qCisJCQkgKiBQcm9iYWJseSB1bmNsZWFuIG1lcmdlLCBidXQgaWYgdGhlIHR3byByZW5hbWVkCisJCQkgKiBmaWxlcyBtZXJnZSBjbGVhbmx5IGFuZCB0aGUgdHdvIHJlc3VsdGluZyBmaWxlcworCQkJICogY2FuIHRoZW4gYmUgdHdvLXdheSBtZXJnZWQgY2xlYW5seSwgSSBndWVzcyBpdCdzCisJCQkgKiBhIGNsZWFuIG1lcmdlPworCQkJICovCisJCQljbGVhbl9tZXJnZSA9IGhhbmRsZV9yZW5hbWVfcmVuYW1lXzJ0bzEob3B0LCBjaSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVudHJ5LT5wcm9jZXNzZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBhdGhfY2xlYW4gPCBjbGVhbl9tZXJnZSkKKwkJCWNsZWFuX21lcmdlID0gcGF0aF9jbGVhbjsKKwl9IGVsc2UgaWYgKG9fdmFsaWQgJiYgKCFhX3ZhbGlkIHx8ICFiX3ZhbGlkKSkgeworCQkvKiBDYXNlIEE6IERlbGV0ZWQgaW4gb25lICovCisJCWlmICgoIWFfdmFsaWQgJiYgIWJfdmFsaWQpIHx8CisJCSAgICAoIWJfdmFsaWQgJiYgYmxvYl91bmNoYW5nZWQob3B0LCBvLCBhLCBub3JtYWxpemUsIHBhdGgpKSB8fAorCQkgICAgKCFhX3ZhbGlkICYmIGJsb2JfdW5jaGFuZ2VkKG9wdCwgbywgYiwgbm9ybWFsaXplLCBwYXRoKSkpIHsKKwkJCS8qIERlbGV0ZWQgaW4gYm90aCBvciBkZWxldGVkIGluIG9uZSBhbmQKKwkJCSAqIHVuY2hhbmdlZCBpbiB0aGUgb3RoZXIgKi8KKwkJCWlmIChhX3ZhbGlkKQorCQkJCW91dHB1dChvcHQsIDIsIF8oIlJlbW92aW5nICVzIiksIHBhdGgpOworCQkJLyogZG8gbm90IHRvdWNoIHdvcmtpbmcgZmlsZSBpZiBpdCBkaWQgbm90IGV4aXN0ICovCisJCQlyZW1vdmVfZmlsZShvcHQsIDEsIHBhdGgsICFhX3ZhbGlkKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE1vZGlmeS9kZWxldGU7IGRlbGV0ZWQgc2lkZSBtYXkgaGF2ZSBwdXQgYSBkaXJlY3RvcnkgaW4gdGhlIHdheSAqLworCQkJY2xlYW5fbWVyZ2UgPSAwOworCQkJaWYgKGhhbmRsZV9tb2RpZnlfZGVsZXRlKG9wdCwgcGF0aCwgbywgYSwgYikpCisJCQkJY2xlYW5fbWVyZ2UgPSAtMTsKKwkJfQorCX0gZWxzZSBpZiAoKCFvX3ZhbGlkICYmIGFfdmFsaWQgJiYgIWJfdmFsaWQpIHx8CisJCSAgICghb192YWxpZCAmJiAhYV92YWxpZCAmJiBiX3ZhbGlkKSkgeworCQkvKiBDYXNlIEI6IEFkZGVkIGluIG9uZS4gKi8KKwkJLyogW25vdGhpbmd8ZGlyZWN0b3J5XSAtPiAoW25vdGhpbmd8ZGlyZWN0b3J5XSwgZmlsZSkgKi8KKworCQljb25zdCBjaGFyICphZGRfYnJhbmNoOworCQljb25zdCBjaGFyICpvdGhlcl9icmFuY2g7CisJCWNvbnN0IGNoYXIgKmNvbmY7CisJCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjb250ZW50czsKKworCQlpZiAoYV92YWxpZCkgeworCQkJYWRkX2JyYW5jaCA9IG9wdC0+YnJhbmNoMTsKKwkJCW90aGVyX2JyYW5jaCA9IG9wdC0+YnJhbmNoMjsKKwkJCWNvbnRlbnRzID0gYTsKKwkJCWNvbmYgPSBfKCJmaWxlL2RpcmVjdG9yeSIpOworCQl9IGVsc2UgeworCQkJYWRkX2JyYW5jaCA9IG9wdC0+YnJhbmNoMjsKKwkJCW90aGVyX2JyYW5jaCA9IG9wdC0+YnJhbmNoMTsKKwkJCWNvbnRlbnRzID0gYjsKKwkJCWNvbmYgPSBfKCJkaXJlY3RvcnkvZmlsZSIpOworCQl9CisJCWlmIChkaXJfaW5fd2F5KG9wdC0+cmVwby0+aW5kZXgsIHBhdGgsCisJCQkgICAgICAgIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCAmJiAhU19JU0dJVExJTksoYS0+bW9kZSksCisJCQkgICAgICAgMCkpIHsKKwkJCWNoYXIgKm5ld19wYXRoID0gdW5pcXVlX3BhdGgob3B0LCBwYXRoLCBhZGRfYnJhbmNoKTsKKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCW91dHB1dChvcHQsIDEsIF8oIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gIgorCQkJICAgICAgICJBZGRpbmcgJXMgYXMgJXMiKSwKKwkJCSAgICAgICBjb25mLCBwYXRoLCBvdGhlcl9icmFuY2gsIHBhdGgsIG5ld19wYXRoKTsKKwkJCWlmICh1cGRhdGVfZmlsZShvcHQsIDAsIGNvbnRlbnRzLCBuZXdfcGF0aCkpCisJCQkJY2xlYW5fbWVyZ2UgPSAtMTsKKwkJCWVsc2UgaWYgKG9wdC0+cHJpdi0+Y2FsbF9kZXB0aCkKKwkJCQlyZW1vdmVfZmlsZV9mcm9tX2luZGV4KG9wdC0+cmVwby0+aW5kZXgsIHBhdGgpOworCQkJZnJlZShuZXdfcGF0aCk7CisJCX0gZWxzZSB7CisJCQlvdXRwdXQob3B0LCAyLCBfKCJBZGRpbmcgJXMiKSwgcGF0aCk7CisJCQkvKiBkbyBub3Qgb3ZlcndyaXRlIGZpbGUgaWYgYWxyZWFkeSBwcmVzZW50ICovCisJCQlpZiAodXBkYXRlX2ZpbGVfZmxhZ3Mob3B0LCBjb250ZW50cywgcGF0aCwgMSwgIWFfdmFsaWQpKQorCQkJCWNsZWFuX21lcmdlID0gLTE7CisJCX0KKwl9IGVsc2UgaWYgKGFfdmFsaWQgJiYgYl92YWxpZCkgeworCQlpZiAoIW9fdmFsaWQpIHsKKwkJCS8qIENhc2UgQzogQWRkZWQgaW4gYm90aCAoY2hlY2sgZm9yIHNhbWUgcGVybWlzc2lvbnMpICovCisJCQlvdXRwdXQob3B0LCAxLAorCQkJICAgICAgIF8oIkNPTkZMSUNUIChhZGQvYWRkKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiKSwKKwkJCSAgICAgICBwYXRoKTsKKwkJCWNsZWFuX21lcmdlID0gaGFuZGxlX2ZpbGVfY29sbGlzaW9uKG9wdCwKKwkJCQkJCQkgICAgcGF0aCwgTlVMTCwgTlVMTCwKKwkJCQkJCQkgICAgb3B0LT5icmFuY2gxLAorCQkJCQkJCSAgICBvcHQtPmJyYW5jaDIsCisJCQkJCQkJICAgIGEsIGIpOworCQl9IGVsc2UgeworCQkJLyogY2FzZSBEOiBNb2RpZmllZCBpbiBib3RoLCBidXQgZGlmZmVyZW50bHkuICovCisJCQlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maTsKKwkJCWludCBpc19kaXJ0eSA9IDA7IC8qIHVucGFja190cmVlcyB3b3VsZCBoYXZlIGJhaWxlZCBpZiBkaXJ0eSAqLworCQkJY2xlYW5fbWVyZ2UgPSBoYW5kbGVfY29udGVudF9tZXJnZSgmbWZpLCBvcHQsIHBhdGgsCisJCQkJCQkJICAgaXNfZGlydHksCisJCQkJCQkJICAgbywgYSwgYiwgTlVMTCk7CisJCX0KKwl9IGVsc2UgaWYgKCFvX3ZhbGlkICYmICFhX3ZhbGlkICYmICFiX3ZhbGlkKSB7CisJCS8qCisJCSAqIHRoaXMgZW50cnkgd2FzIGRlbGV0ZWQgYWx0b2dldGhlci4gYV9tb2RlID09IDAgbWVhbnMKKwkJICogd2UgaGFkIHRoYXQgcGF0aCBhbmQgd2FudCB0byBhY3RpdmVseSByZW1vdmUgaXQuCisJCSAqLworCQlyZW1vdmVfZmlsZShvcHQsIDEsIHBhdGgsICFhLT5tb2RlKTsKKwl9IGVsc2UKKwkJQlVHKCJmYXRhbCBtZXJnZSBmYWlsdXJlLCBzaG91bGRuJ3QgaGFwcGVuLiIpOworCisJcmV0dXJuIGNsZWFuX21lcmdlOworfQorCitzdGF0aWMgaW50IG1lcmdlX3RyZWVzX2ludGVybmFsKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJc3RydWN0IHRyZWUgKmhlYWQsCisJCQkJc3RydWN0IHRyZWUgKm1lcmdlLAorCQkJCXN0cnVjdCB0cmVlICptZXJnZV9iYXNlLAorCQkJCXN0cnVjdCB0cmVlICoqcmVzdWx0KQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gb3B0LT5yZXBvLT5pbmRleDsKKwlpbnQgY29kZSwgY2xlYW47CisKKwlpZiAob3B0LT5zdWJ0cmVlX3NoaWZ0KSB7CisJCW1lcmdlID0gc2hpZnRfdHJlZV9vYmplY3Qob3B0LT5yZXBvLCBoZWFkLCBtZXJnZSwKKwkJCQkJICBvcHQtPnN1YnRyZWVfc2hpZnQpOworCQltZXJnZV9iYXNlID0gc2hpZnRfdHJlZV9vYmplY3Qob3B0LT5yZXBvLCBoZWFkLCBtZXJnZV9iYXNlLAorCQkJCQkgICAgICAgb3B0LT5zdWJ0cmVlX3NoaWZ0KTsKKwl9CisKKwlpZiAob2lkZXEoJm1lcmdlX2Jhc2UtPm9iamVjdC5vaWQsICZtZXJnZS0+b2JqZWN0Lm9pZCkpIHsKKwkJb3V0cHV0KG9wdCwgMCwgXygiQWxyZWFkeSB1cCB0byBkYXRlISIpKTsKKwkJKnJlc3VsdCA9IGhlYWQ7CisJCXJldHVybiAxOworCX0KKworCWNvZGUgPSB1bnBhY2tfdHJlZXNfc3RhcnQob3B0LCBtZXJnZV9iYXNlLCBoZWFkLCBtZXJnZSk7CisKKwlpZiAoY29kZSAhPSAwKSB7CisJCWlmIChzaG93KG9wdCwgNCkgfHwgb3B0LT5wcml2LT5jYWxsX2RlcHRoKQorCQkJZXJyKG9wdCwgXygibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIiksCisJCQkgICAgb2lkX3RvX2hleCgmaGVhZC0+b2JqZWN0Lm9pZCksCisJCQkgICAgb2lkX3RvX2hleCgmbWVyZ2UtPm9iamVjdC5vaWQpKTsKKwkJdW5wYWNrX3RyZWVzX2ZpbmlzaChvcHQpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHVubWVyZ2VkX2luZGV4KGlzdGF0ZSkpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0ICplbnRyaWVzOworCQlzdHJ1Y3QgcmVuYW1lX2luZm8gcmVfaW5mbzsKKwkJaW50IGk7CisJCS8qCisJCSAqIE9ubHkgbmVlZCB0aGUgaGFzaG1hcCB3aGlsZSBwcm9jZXNzaW5nIGVudHJpZXMsIHNvCisJCSAqIGluaXRpYWxpemUgaXQgaGVyZSBhbmQgZnJlZSBpdCB3aGVuIHdlIGFyZSBkb25lIHJ1bm5pbmcKKwkJICogdGhyb3VnaCB0aGUgZW50cmllcy4gS2VlcGluZyBpdCBpbiB0aGUgbWVyZ2Vfb3B0aW9ucyBhcworCQkgKiBvcHBvc2VkIHRvIGRlY2FyaW5nIGEgbG9jYWwgaGFzaG1hcCBpcyBmb3IgY29udmVuaWVuY2UKKwkJICogc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgaXQgdG8gYXJvdW5kLgorCQkgKi8KKwkJaGFzaG1hcF9pbml0KCZvcHQtPnByaXYtPmN1cnJlbnRfZmlsZV9kaXJfc2V0LCBwYXRoX2hhc2htYXBfY21wLAorCQkJICAgICBOVUxMLCA1MTIpOworCQlnZXRfZmlsZXNfZGlycyhvcHQsIGhlYWQpOworCQlnZXRfZmlsZXNfZGlycyhvcHQsIG1lcmdlKTsKKworCQllbnRyaWVzID0gZ2V0X3VubWVyZ2VkKG9wdC0+cmVwby0+aW5kZXgpOworCQljbGVhbiA9IGRldGVjdF9hbmRfcHJvY2Vzc19yZW5hbWVzKG9wdCwgbWVyZ2VfYmFzZSwgaGVhZCwgbWVyZ2UsCisJCQkJCQkgICBlbnRyaWVzLCAmcmVfaW5mbyk7CisJCXJlY29yZF9kZl9jb25mbGljdF9maWxlcyhvcHQsIGVudHJpZXMpOworCQlpZiAoY2xlYW4gPCAwKQorCQkJZ290byBjbGVhbnVwOworCQlmb3IgKGkgPSBlbnRyaWVzLT5uci0xOyAwIDw9IGk7IGktLSkgeworCQkJY29uc3QgY2hhciAqcGF0aCA9IGVudHJpZXMtPml0ZW1zW2ldLnN0cmluZzsKKwkJCXN0cnVjdCBzdGFnZV9kYXRhICplID0gZW50cmllcy0+aXRlbXNbaV0udXRpbDsKKwkJCWlmICghZS0+cHJvY2Vzc2VkKSB7CisJCQkJaW50IHJldCA9IHByb2Nlc3NfZW50cnkob3B0LCBwYXRoLCBlKTsKKwkJCQlpZiAoIXJldCkKKwkJCQkJY2xlYW4gPSAwOworCQkJCWVsc2UgaWYgKHJldCA8IDApIHsKKwkJCQkJY2xlYW4gPSByZXQ7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGVudHJpZXMtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBzdGFnZV9kYXRhICplID0gZW50cmllcy0+aXRlbXNbaV0udXRpbDsKKwkJCWlmICghZS0+cHJvY2Vzc2VkKQorCQkJCUJVRygidW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIsCisJCQkJICAgIGVudHJpZXMtPml0ZW1zW2ldLnN0cmluZyk7CisJCX0KKworCWNsZWFudXA6CisJCWZpbmFsX2NsZWFudXBfcmVuYW1lcygmcmVfaW5mbyk7CisKKwkJc3RyaW5nX2xpc3RfY2xlYXIoZW50cmllcywgMSk7CisJCWZyZWUoZW50cmllcyk7CisKKwkJaGFzaG1hcF9mcmVlX2VudHJpZXMoJm9wdC0+cHJpdi0+Y3VycmVudF9maWxlX2Rpcl9zZXQsCisJCQkJCXN0cnVjdCBwYXRoX2hhc2htYXBfZW50cnksIGUpOworCisJCWlmIChjbGVhbiA8IDApIHsKKwkJCXVucGFja190cmVlc19maW5pc2gob3B0KTsKKwkJCXJldHVybiBjbGVhbjsKKwkJfQorCX0KKwllbHNlCisJCWNsZWFuID0gMTsKKworCXVucGFja190cmVlc19maW5pc2gob3B0KTsKKworCWlmIChvcHQtPnByaXYtPmNhbGxfZGVwdGggJiYKKwkgICAgISgqcmVzdWx0ID0gd3JpdGVfaW5fY29yZV9pbmRleF9hc190cmVlKG9wdC0+cmVwbykpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gY2xlYW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldmVyc2VfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dCA9IE5VTEwsICpjdXJyZW50LCAqYmFja3VwOworCWZvciAoY3VycmVudCA9IGxpc3Q7IGN1cnJlbnQ7IGN1cnJlbnQgPSBiYWNrdXApIHsKKwkJYmFja3VwID0gY3VycmVudC0+bmV4dDsKKwkJY3VycmVudC0+bmV4dCA9IG5leHQ7CisJCW5leHQgPSBjdXJyZW50OworCX0KKwlyZXR1cm4gbmV4dDsKK30KKworLyoKKyAqIE1lcmdlIHRoZSBjb21taXRzIGgxIGFuZCBoMiwgcmV0dXJuIHRoZSByZXN1bHRpbmcgdmlydHVhbAorICogY29tbWl0IG9iamVjdCBhbmQgYSBmbGFnIGluZGljYXRpbmcgdGhlIGNsZWFubmVzcyBvZiB0aGUgbWVyZ2UuCisgKi8KK3N0YXRpYyBpbnQgbWVyZ2VfcmVjdXJzaXZlX2ludGVybmFsKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkJICAgIHN0cnVjdCBjb21taXQgKmgxLAorCQkJCSAgICBzdHJ1Y3QgY29tbWl0ICpoMiwKKwkJCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICptZXJnZV9iYXNlcywKKwkJCQkgICAgc3RydWN0IGNvbW1pdCAqKnJlc3VsdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKml0ZXI7CisJc3RydWN0IGNvbW1pdCAqbWVyZ2VkX21lcmdlX2Jhc2VzOworCXN0cnVjdCB0cmVlICpyZXN1bHRfdHJlZTsKKwlpbnQgY2xlYW47CisJY29uc3QgY2hhciAqYW5jZXN0b3JfbmFtZTsKKwlzdHJ1Y3Qgc3RyYnVmIG1lcmdlX2Jhc2VfYWJicmV2ID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc2hvdyhvcHQsIDQpKSB7CisJCW91dHB1dChvcHQsIDQsIF8oIk1lcmdpbmc6IikpOworCQlvdXRwdXRfY29tbWl0X3RpdGxlKG9wdCwgaDEpOworCQlvdXRwdXRfY29tbWl0X3RpdGxlKG9wdCwgaDIpOworCX0KKworCWlmICghbWVyZ2VfYmFzZXMpIHsKKwkJbWVyZ2VfYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXMoaDEsIGgyKTsKKwkJbWVyZ2VfYmFzZXMgPSByZXZlcnNlX2NvbW1pdF9saXN0KG1lcmdlX2Jhc2VzKTsKKwl9CisKKwlpZiAoc2hvdyhvcHQsIDUpKSB7CisJCXVuc2lnbmVkIGNudCA9IGNvbW1pdF9saXN0X2NvdW50KG1lcmdlX2Jhc2VzKTsKKworCQlvdXRwdXQob3B0LCA1LCBRXygiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIsCisJCQkJImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IiwgY250KSwgY250KTsKKwkJZm9yIChpdGVyID0gbWVyZ2VfYmFzZXM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KQorCQkJb3V0cHV0X2NvbW1pdF90aXRsZShvcHQsIGl0ZXItPml0ZW0pOworCX0KKworCW1lcmdlZF9tZXJnZV9iYXNlcyA9IHBvcF9jb21taXQoJm1lcmdlX2Jhc2VzKTsKKwlpZiAobWVyZ2VkX21lcmdlX2Jhc2VzID09IE5VTEwpIHsKKwkJLyogaWYgdGhlcmUgaXMgbm8gY29tbW9uIGFuY2VzdG9yLCB1c2UgYW4gZW1wdHkgdHJlZSAqLworCQlzdHJ1Y3QgdHJlZSAqdHJlZTsKKworCQl0cmVlID0gbG9va3VwX3RyZWUob3B0LT5yZXBvLCBvcHQtPnJlcG8tPmhhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisJCW1lcmdlZF9tZXJnZV9iYXNlcyA9IG1ha2VfdmlydHVhbF9jb21taXQob3B0LT5yZXBvLCB0cmVlLAorCQkJCQkJCSAiYW5jZXN0b3IiKTsKKwkJYW5jZXN0b3JfbmFtZSA9ICJlbXB0eSB0cmVlIjsKKwl9IGVsc2UgaWYgKG9wdC0+YW5jZXN0b3IgJiYgIW9wdC0+cHJpdi0+Y2FsbF9kZXB0aCkgeworCQlhbmNlc3Rvcl9uYW1lID0gb3B0LT5hbmNlc3RvcjsKKwl9IGVsc2UgaWYgKG1lcmdlX2Jhc2VzKSB7CisJCWFuY2VzdG9yX25hbWUgPSAibWVyZ2VkIGNvbW1vbiBhbmNlc3RvcnMiOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldigmbWVyZ2VfYmFzZV9hYmJyZXYsCisJCQkJCSAmbWVyZ2VkX21lcmdlX2Jhc2VzLT5vYmplY3Qub2lkLAorCQkJCQkgREVGQVVMVF9BQkJSRVYpOworCQlhbmNlc3Rvcl9uYW1lID0gbWVyZ2VfYmFzZV9hYmJyZXYuYnVmOworCX0KKworCWZvciAoaXRlciA9IG1lcmdlX2Jhc2VzOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkgeworCQljb25zdCBjaGFyICpzYXZlZF9iMSwgKnNhdmVkX2IyOworCQlvcHQtPnByaXYtPmNhbGxfZGVwdGgrKzsKKwkJLyoKKwkJICogV2hlbiB0aGUgbWVyZ2UgZmFpbHMsIHRoZSByZXN1bHQgY29udGFpbnMgZmlsZXMKKwkJICogd2l0aCBjb25mbGljdCBtYXJrZXJzLiBUaGUgY2xlYW5uZXNzIGZsYWcgaXMKKwkJICogaWdub3JlZCAodW5sZXNzIGluZGljYXRpbmcgYW4gZXJyb3IpLCBpdCB3YXMgbmV2ZXIKKwkJICogYWN0dWFsbHkgdXNlZCwgYXMgcmVzdWx0IG9mIG1lcmdlX3RyZWVzIGhhcyBhbHdheXMKKwkJICogb3ZlcndyaXR0ZW4gaXQ6IHRoZSBjb21taXR0ZWQgImNvbmZsaWN0cyIgd2VyZQorCQkgKiBhbHJlYWR5IHJlc29sdmVkLgorCQkgKi8KKwkJZGlzY2FyZF9pbmRleChvcHQtPnJlcG8tPmluZGV4KTsKKwkJc2F2ZWRfYjEgPSBvcHQtPmJyYW5jaDE7CisJCXNhdmVkX2IyID0gb3B0LT5icmFuY2gyOworCQlvcHQtPmJyYW5jaDEgPSAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIjsKKwkJb3B0LT5icmFuY2gyID0gIlRlbXBvcmFyeSBtZXJnZSBicmFuY2ggMiI7CisJCWlmIChtZXJnZV9yZWN1cnNpdmVfaW50ZXJuYWwob3B0LCBtZXJnZWRfbWVyZ2VfYmFzZXMsIGl0ZXItPml0ZW0sCisJCQkJCSAgICAgTlVMTCwgJm1lcmdlZF9tZXJnZV9iYXNlcykgPCAwKQorCQkJcmV0dXJuIC0xOworCQlvcHQtPmJyYW5jaDEgPSBzYXZlZF9iMTsKKwkJb3B0LT5icmFuY2gyID0gc2F2ZWRfYjI7CisJCW9wdC0+cHJpdi0+Y2FsbF9kZXB0aC0tOworCisJCWlmICghbWVyZ2VkX21lcmdlX2Jhc2VzKQorCQkJcmV0dXJuIGVycihvcHQsIF8oIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIpKTsKKwl9CisKKwlkaXNjYXJkX2luZGV4KG9wdC0+cmVwby0+aW5kZXgpOworCWlmICghb3B0LT5wcml2LT5jYWxsX2RlcHRoKQorCQlyZXBvX3JlYWRfaW5kZXgob3B0LT5yZXBvKTsKKworCW9wdC0+YW5jZXN0b3IgPSBhbmNlc3Rvcl9uYW1lOworCWNsZWFuID0gbWVyZ2VfdHJlZXNfaW50ZXJuYWwob3B0LAorCQkJCSAgICAgcmVwb19nZXRfY29tbWl0X3RyZWUob3B0LT5yZXBvLCBoMSksCisJCQkJICAgICByZXBvX2dldF9jb21taXRfdHJlZShvcHQtPnJlcG8sIGgyKSwKKwkJCQkgICAgIHJlcG9fZ2V0X2NvbW1pdF90cmVlKG9wdC0+cmVwbywKKwkJCQkJCQkgIG1lcmdlZF9tZXJnZV9iYXNlcyksCisJCQkJICAgICAmcmVzdWx0X3RyZWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZtZXJnZV9iYXNlX2FiYnJldik7CisJb3B0LT5hbmNlc3RvciA9IE5VTEw7ICAvKiBhdm9pZCBhY2NpZGVudGFsIHJlLXVzZSBvZiBvcHQtPmFuY2VzdG9yICovCisJaWYgKGNsZWFuIDwgMCkgeworCQlmbHVzaF9vdXRwdXQob3B0KTsKKwkJcmV0dXJuIGNsZWFuOworCX0KKworCWlmIChvcHQtPnByaXYtPmNhbGxfZGVwdGgpIHsKKwkJKnJlc3VsdCA9IG1ha2VfdmlydHVhbF9jb21taXQob3B0LT5yZXBvLCByZXN1bHRfdHJlZSwKKwkJCQkJICAgICAgIm1lcmdlZCB0cmVlIik7CisJCWNvbW1pdF9saXN0X2luc2VydChoMSwgJigqcmVzdWx0KS0+cGFyZW50cyk7CisJCWNvbW1pdF9saXN0X2luc2VydChoMiwgJigqcmVzdWx0KS0+cGFyZW50cy0+bmV4dCk7CisJfQorCXJldHVybiBjbGVhbjsKK30KKworc3RhdGljIGludCBtZXJnZV9zdGFydChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LCBzdHJ1Y3QgdHJlZSAqaGVhZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBTYW5pdHkgY2hlY2tzIG9uIG9wdCAqLworCWFzc2VydChvcHQtPnJlcG8pOworCisJYXNzZXJ0KG9wdC0+YnJhbmNoMSAmJiBvcHQtPmJyYW5jaDIpOworCisJYXNzZXJ0KG9wdC0+ZGV0ZWN0X3JlbmFtZXMgPj0gLTEgJiYKKwkgICAgICAgb3B0LT5kZXRlY3RfcmVuYW1lcyA8PSBESUZGX0RFVEVDVF9DT1BZKTsKKwlhc3NlcnQob3B0LT5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPj0gTUVSR0VfRElSRUNUT1JZX1JFTkFNRVNfTk9ORSAmJgorCSAgICAgICBvcHQtPmRldGVjdF9kaXJlY3RvcnlfcmVuYW1lcyA8PSBNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19UUlVFKTsKKwlhc3NlcnQob3B0LT5yZW5hbWVfbGltaXQgPj0gLTEpOworCWFzc2VydChvcHQtPnJlbmFtZV9zY29yZSA+PSAwICYmIG9wdC0+cmVuYW1lX3Njb3JlIDw9IE1BWF9TQ09SRSk7CisJYXNzZXJ0KG9wdC0+c2hvd19yZW5hbWVfcHJvZ3Jlc3MgPj0gMCAmJiBvcHQtPnNob3dfcmVuYW1lX3Byb2dyZXNzIDw9IDEpOworCisJYXNzZXJ0KG9wdC0+eGRsX29wdHMgPj0gMCk7CisJYXNzZXJ0KG9wdC0+cmVjdXJzaXZlX3ZhcmlhbnQgPj0gTUVSR0VfVkFSSUFOVF9OT1JNQUwgJiYKKwkgICAgICAgb3B0LT5yZWN1cnNpdmVfdmFyaWFudCA8PSBNRVJHRV9WQVJJQU5UX1RIRUlSUyk7CisKKwlhc3NlcnQob3B0LT52ZXJib3NpdHkgPj0gMCAmJiBvcHQtPnZlcmJvc2l0eSA8PSA1KTsKKwlhc3NlcnQob3B0LT5idWZmZXJfb3V0cHV0IDw9IDIpOworCWFzc2VydChvcHQtPm9idWYubGVuID09IDApOworCisJYXNzZXJ0KG9wdC0+cHJpdiA9PSBOVUxMKTsKKworCS8qIFNhbml0eSBjaGVjayBvbiByZXBvIHN0YXRlOyBpbmRleCBtdXN0IG1hdGNoIGhlYWQgKi8KKwlpZiAocmVwb19pbmRleF9oYXNfY2hhbmdlcyhvcHQtPnJlcG8sIGhlYWQsICZzYikpIHsKKwkJZXJyKG9wdCwgXygiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4gICVzIiksCisJCSAgICBzYi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gLTE7CisJfQorCisJb3B0LT5wcml2ID0geGNhbGxvYygxLCBzaXplb2YoKm9wdC0+cHJpdikpOworCXN0cmluZ19saXN0X2luaXQoJm9wdC0+cHJpdi0+ZGZfY29uZmxpY3RfZmlsZV9zZXQsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtZXJnZV9maW5hbGl6ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0KQoreworCWZsdXNoX291dHB1dChvcHQpOworCWlmICghb3B0LT5wcml2LT5jYWxsX2RlcHRoICYmIG9wdC0+YnVmZmVyX291dHB1dCA8IDIpCisJCXN0cmJ1Zl9yZWxlYXNlKCZvcHQtPm9idWYpOworCWlmIChzaG93KG9wdCwgMikpCisJCWRpZmZfd2Fybl9yZW5hbWVfbGltaXQoIm1lcmdlLnJlbmFtZWxpbWl0IiwKKwkJCQkgICAgICAgb3B0LT5wcml2LT5uZWVkZWRfcmVuYW1lX2xpbWl0LCAwKTsKKwlGUkVFX0FORF9OVUxMKG9wdC0+cHJpdik7Cit9CisKK2ludCBtZXJnZV90cmVlcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQlzdHJ1Y3QgdHJlZSAqaGVhZCwKKwkJc3RydWN0IHRyZWUgKm1lcmdlLAorCQlzdHJ1Y3QgdHJlZSAqbWVyZ2VfYmFzZSkKK3sKKwlpbnQgY2xlYW47CisJc3RydWN0IHRyZWUgKmlnbm9yZWQ7CisKKwlhc3NlcnQob3B0LT5hbmNlc3RvciAhPSBOVUxMKTsKKworCWlmIChtZXJnZV9zdGFydChvcHQsIGhlYWQpKQorCQlyZXR1cm4gLTE7CisJY2xlYW4gPSBtZXJnZV90cmVlc19pbnRlcm5hbChvcHQsIGhlYWQsIG1lcmdlLCBtZXJnZV9iYXNlLCAmaWdub3JlZCk7CisJbWVyZ2VfZmluYWxpemUob3B0KTsKKworCXJldHVybiBjbGVhbjsKK30KKworaW50IG1lcmdlX3JlY3Vyc2l2ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkgICAgc3RydWN0IGNvbW1pdCAqaDEsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICpoMiwKKwkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqbWVyZ2VfYmFzZXMsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICoqcmVzdWx0KQoreworCWludCBjbGVhbjsKKworCWFzc2VydChvcHQtPmFuY2VzdG9yID09IE5VTEwgfHwKKwkgICAgICAgIXN0cmNtcChvcHQtPmFuY2VzdG9yLCAiY29uc3RydWN0ZWQgbWVyZ2UgYmFzZSIpKTsKKworCWlmIChtZXJnZV9zdGFydChvcHQsIHJlcG9fZ2V0X2NvbW1pdF90cmVlKG9wdC0+cmVwbywgaDEpKSkKKwkJcmV0dXJuIC0xOworCWNsZWFuID0gbWVyZ2VfcmVjdXJzaXZlX2ludGVybmFsKG9wdCwgaDEsIGgyLCBtZXJnZV9iYXNlcywgcmVzdWx0KTsKKwltZXJnZV9maW5hbGl6ZShvcHQpOworCisJcmV0dXJuIGNsZWFuOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X3JlZihzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCisJb2JqZWN0ID0gZGVyZWZfdGFnKHJlcG8sIHBhcnNlX29iamVjdChyZXBvLCBvaWQpLAorCQkJICAgbmFtZSwgc3RybGVuKG5hbWUpKTsKKwlpZiAoIW9iamVjdCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfVFJFRSkKKwkJcmV0dXJuIG1ha2VfdmlydHVhbF9jb21taXQocmVwbywgKHN0cnVjdCB0cmVlKilvYmplY3QsIG5hbWUpOworCWlmIChvYmplY3QtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHBhcnNlX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKW9iamVjdCkpCisJCXJldHVybiBOVUxMOworCXJldHVybiAoc3RydWN0IGNvbW1pdCAqKW9iamVjdDsKK30KKworaW50IG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGVhZCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICptZXJnZSwKKwkJCSAgICBpbnQgbnVtX21lcmdlX2Jhc2VzLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiptZXJnZV9iYXNlcywKKwkJCSAgICBzdHJ1Y3QgY29tbWl0ICoqcmVzdWx0KQoreworCWludCBjbGVhbjsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQgPSBnZXRfcmVmKG9wdC0+cmVwbywgaGVhZCwgb3B0LT5icmFuY2gxKTsKKwlzdHJ1Y3QgY29tbWl0ICpuZXh0X2NvbW1pdCA9IGdldF9yZWYob3B0LT5yZXBvLCBtZXJnZSwgb3B0LT5icmFuY2gyKTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNhID0gTlVMTDsKKworCWlmIChtZXJnZV9iYXNlcykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9tZXJnZV9iYXNlczsgKytpKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpiYXNlOworCQkJaWYgKCEoYmFzZSA9IGdldF9yZWYob3B0LT5yZXBvLCBtZXJnZV9iYXNlc1tpXSwKKwkJCQkJICAgICBvaWRfdG9faGV4KG1lcmdlX2Jhc2VzW2ldKSkpKQorCQkJCXJldHVybiBlcnIob3B0LCBfKCJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciKSwKKwkJCQkJICAgb2lkX3RvX2hleChtZXJnZV9iYXNlc1tpXSkpOworCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGJhc2UsICZjYSk7CisJCX0KKwkJaWYgKG51bV9tZXJnZV9iYXNlcyA9PSAxKQorCQkJb3B0LT5hbmNlc3RvciA9ICJjb25zdHJ1Y3RlZCBtZXJnZSBiYXNlIjsKKwl9CisKKwlyZXBvX2hvbGRfbG9ja2VkX2luZGV4KG9wdC0+cmVwbywgJmxvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKwljbGVhbiA9IG1lcmdlX3JlY3Vyc2l2ZShvcHQsIGhlYWRfY29tbWl0LCBuZXh0X2NvbW1pdCwgY2EsCisJCQkJcmVzdWx0KTsKKwlpZiAoY2xlYW4gPCAwKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCXJldHVybiBjbGVhbjsKKwl9CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KG9wdC0+cmVwby0+aW5kZXgsICZsb2NrLAorCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKQorCQlyZXR1cm4gZXJyKG9wdCwgXygiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIpKTsKKworCXJldHVybiBjbGVhbiA/IDAgOiAxOworfQorCitzdGF0aWMgdm9pZCBtZXJnZV9yZWN1cnNpdmVfY29uZmlnKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQpCit7CisJY2hhciAqdmFsdWUgPSBOVUxMOworCWdpdF9jb25maWdfZ2V0X2ludCgibWVyZ2UudmVyYm9zaXR5IiwgJm9wdC0+dmVyYm9zaXR5KTsKKwlnaXRfY29uZmlnX2dldF9pbnQoImRpZmYucmVuYW1lbGltaXQiLCAmb3B0LT5yZW5hbWVfbGltaXQpOworCWdpdF9jb25maWdfZ2V0X2ludCgibWVyZ2UucmVuYW1lbGltaXQiLCAmb3B0LT5yZW5hbWVfbGltaXQpOworCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJkaWZmLnJlbmFtZXMiLCAmdmFsdWUpKSB7CisJCW9wdC0+ZGV0ZWN0X3JlbmFtZXMgPSBnaXRfY29uZmlnX3JlbmFtZSgiZGlmZi5yZW5hbWVzIiwgdmFsdWUpOworCQlmcmVlKHZhbHVlKTsKKwl9CisJaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmcoIm1lcmdlLnJlbmFtZXMiLCAmdmFsdWUpKSB7CisJCW9wdC0+ZGV0ZWN0X3JlbmFtZXMgPSBnaXRfY29uZmlnX3JlbmFtZSgibWVyZ2UucmVuYW1lcyIsIHZhbHVlKTsKKwkJZnJlZSh2YWx1ZSk7CisJfQorCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJtZXJnZS5kaXJlY3RvcnlyZW5hbWVzIiwgJnZhbHVlKSkgeworCQlpbnQgYm9vbHZhbCA9IGdpdF9wYXJzZV9tYXliZV9ib29sKHZhbHVlKTsKKwkJaWYgKDAgPD0gYm9vbHZhbCkgeworCQkJb3B0LT5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPSBib29sdmFsID8KKwkJCQlNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19UUlVFIDoKKwkJCQlNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19OT05FOworCQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiY29uZmxpY3QiKSkgeworCQkJb3B0LT5kZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXMgPQorCQkJCU1FUkdFX0RJUkVDVE9SWV9SRU5BTUVTX0NPTkZMSUNUOworCQl9IC8qIGF2b2lkIGVycm9yaW5nIG9uIHZhbHVlcyBmcm9tIGZ1dHVyZSB2ZXJzaW9ucyBvZiBnaXQgKi8KKwkJZnJlZSh2YWx1ZSk7CisJfQorCWdpdF9jb25maWcoZ2l0X3htZXJnZV9jb25maWcsIE5VTEwpOworfQorCit2b2lkIGluaXRfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkJc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pCit7CisJY29uc3QgY2hhciAqbWVyZ2VfdmVyYm9zaXR5OworCW1lbXNldChvcHQsIDAsIHNpemVvZihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucykpOworCisJb3B0LT5yZXBvID0gcmVwbzsKKworCW9wdC0+ZGV0ZWN0X3JlbmFtZXMgPSAtMTsKKwlvcHQtPmRldGVjdF9kaXJlY3RvcnlfcmVuYW1lcyA9IE1FUkdFX0RJUkVDVE9SWV9SRU5BTUVTX0NPTkZMSUNUOworCW9wdC0+cmVuYW1lX2xpbWl0ID0gLTE7CisKKwlvcHQtPnZlcmJvc2l0eSA9IDI7CisJb3B0LT5idWZmZXJfb3V0cHV0ID0gMTsKKwlzdHJidWZfaW5pdCgmb3B0LT5vYnVmLCAwKTsKKworCW9wdC0+cmVub3JtYWxpemUgPSAwOworCisJbWVyZ2VfcmVjdXJzaXZlX2NvbmZpZyhvcHQpOworCW1lcmdlX3ZlcmJvc2l0eSA9IGdldGVudigiR0lUX01FUkdFX1ZFUkJPU0lUWSIpOworCWlmIChtZXJnZV92ZXJib3NpdHkpCisJCW9wdC0+dmVyYm9zaXR5ID0gc3RydG9sKG1lcmdlX3ZlcmJvc2l0eSwgTlVMTCwgMTApOworCWlmIChvcHQtPnZlcmJvc2l0eSA+PSA1KQorCQlvcHQtPmJ1ZmZlcl9vdXRwdXQgPSAwOworfQorCitpbnQgcGFyc2VfbWVyZ2Vfb3B0KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnMpCit7CisJY29uc3QgY2hhciAqYXJnOworCisJaWYgKCFzIHx8ICEqcykKKwkJcmV0dXJuIC0xOworCWlmICghc3RyY21wKHMsICJvdXJzIikpCisJCW9wdC0+cmVjdXJzaXZlX3ZhcmlhbnQgPSBNRVJHRV9WQVJJQU5UX09VUlM7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAidGhlaXJzIikpCisJCW9wdC0+cmVjdXJzaXZlX3ZhcmlhbnQgPSBNRVJHRV9WQVJJQU5UX1RIRUlSUzsKKwllbHNlIGlmICghc3RyY21wKHMsICJzdWJ0cmVlIikpCisJCW9wdC0+c3VidHJlZV9zaGlmdCA9ICIiOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHMsICJzdWJ0cmVlPSIsICZhcmcpKQorCQlvcHQtPnN1YnRyZWVfc2hpZnQgPSBhcmc7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAicGF0aWVuY2UiKSkKKwkJb3B0LT54ZGxfb3B0cyA9IERJRkZfV0lUSF9BTEcob3B0LCBQQVRJRU5DRV9ESUZGKTsKKwllbHNlIGlmICghc3RyY21wKHMsICJoaXN0b2dyYW0iKSkKKwkJb3B0LT54ZGxfb3B0cyA9IERJRkZfV0lUSF9BTEcob3B0LCBISVNUT0dSQU1fRElGRik7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgocywgImRpZmYtYWxnb3JpdGhtPSIsICZhcmcpKSB7CisJCWxvbmcgdmFsdWUgPSBwYXJzZV9hbGdvcml0aG1fdmFsdWUoYXJnKTsKKwkJaWYgKHZhbHVlIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJLyogY2xlYXIgb3V0IHByZXZpb3VzIHNldHRpbmdzICovCisJCURJRkZfWERMX0NMUihvcHQsIE5FRURfTUlOSU1BTCk7CisJCW9wdC0+eGRsX29wdHMgJj0gflhERl9ESUZGX0FMR09SSVRITV9NQVNLOworCQlvcHQtPnhkbF9vcHRzIHw9IHZhbHVlOworCX0KKwllbHNlIGlmICghc3RyY21wKHMsICJpZ25vcmUtc3BhY2UtY2hhbmdlIikpCisJCURJRkZfWERMX1NFVChvcHQsIElHTk9SRV9XSElURVNQQUNFX0NIQU5HRSk7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiaWdub3JlLWFsbC1zcGFjZSIpKQorCQlESUZGX1hETF9TRVQob3B0LCBJR05PUkVfV0hJVEVTUEFDRSk7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiaWdub3JlLXNwYWNlLWF0LWVvbCIpKQorCQlESUZGX1hETF9TRVQob3B0LCBJR05PUkVfV0hJVEVTUEFDRV9BVF9FT0wpOworCWVsc2UgaWYgKCFzdHJjbXAocywgImlnbm9yZS1jci1hdC1lb2wiKSkKKwkJRElGRl9YRExfU0VUKG9wdCwgSUdOT1JFX0NSX0FUX0VPTCk7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAicmVub3JtYWxpemUiKSkKKwkJb3B0LT5yZW5vcm1hbGl6ZSA9IDE7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAibm8tcmVub3JtYWxpemUiKSkKKwkJb3B0LT5yZW5vcm1hbGl6ZSA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAibm8tcmVuYW1lcyIpKQorCQlvcHQtPmRldGVjdF9yZW5hbWVzID0gMDsKKwllbHNlIGlmICghc3RyY21wKHMsICJmaW5kLXJlbmFtZXMiKSkgeworCQlvcHQtPmRldGVjdF9yZW5hbWVzID0gMTsKKwkJb3B0LT5yZW5hbWVfc2NvcmUgPSAwOworCX0KKwllbHNlIGlmIChza2lwX3ByZWZpeChzLCAiZmluZC1yZW5hbWVzPSIsICZhcmcpIHx8CisJCSBza2lwX3ByZWZpeChzLCAicmVuYW1lLXRocmVzaG9sZD0iLCAmYXJnKSkgeworCQlpZiAoKG9wdC0+cmVuYW1lX3Njb3JlID0gcGFyc2VfcmVuYW1lX3Njb3JlKCZhcmcpKSA9PSAtMSB8fCAqYXJnICE9IDApCisJCQlyZXR1cm4gLTE7CisJCW9wdC0+ZGV0ZWN0X3JlbmFtZXMgPSAxOworCX0KKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgJF9fZ2l0X21lcmdlX3N0cmF0ZWd5X29wdGlvbnMgaW4KKwkgKiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91IGFkZCBuZXcgb3B0aW9ucworCSAqLworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmggYi9tZXJnZS1yZWN1cnNpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzg4NDdlCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2UtcmVjdXJzaXZlLmgKQEAgLTAsMCArMSwxMjQgQEAKKyNpZm5kZWYgTUVSR0VfUkVDVVJTSVZFX0gKKyNkZWZpbmUgTUVSR0VfUkVDVVJTSVZFX0gKKworI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdHJ1Y3QgY29tbWl0Oworc3RydWN0IGNvbW1pdF9saXN0Oworc3RydWN0IG9iamVjdF9pZDsKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHRyZWU7CisKK3N0cnVjdCBtZXJnZV9vcHRpb25zX2ludGVybmFsOworc3RydWN0IG1lcmdlX29wdGlvbnMgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCisJLyogcmVmIG5hbWVzIHVzZWQgaW4gY29uc29sZSBtZXNzYWdlcyBhbmQgY29uZmxpY3QgbWFya2VycyAqLworCWNvbnN0IGNoYXIgKmFuY2VzdG9yOworCWNvbnN0IGNoYXIgKmJyYW5jaDE7CisJY29uc3QgY2hhciAqYnJhbmNoMjsKKworCS8qIHJlbmFtZSByZWxhdGVkIG9wdGlvbnMgKi8KKwlpbnQgZGV0ZWN0X3JlbmFtZXM7CisJZW51bSB7CisJCU1FUkdFX0RJUkVDVE9SWV9SRU5BTUVTX05PTkUgPSAwLAorCQlNRVJHRV9ESVJFQ1RPUllfUkVOQU1FU19DT05GTElDVCA9IDEsCisJCU1FUkdFX0RJUkVDVE9SWV9SRU5BTUVTX1RSVUUgPSAyCisJfSBkZXRlY3RfZGlyZWN0b3J5X3JlbmFtZXM7CisJaW50IHJlbmFtZV9saW1pdDsKKwlpbnQgcmVuYW1lX3Njb3JlOworCWludCBzaG93X3JlbmFtZV9wcm9ncmVzczsKKworCS8qIHhkaWZmLXJlbGF0ZWQgb3B0aW9ucyAocGF0aWVuY2UsIGlnbm9yZSB3aGl0ZXNwYWNlLCBvdXJzL3RoZWlycykgKi8KKwlsb25nIHhkbF9vcHRzOworCWVudW0geworCQlNRVJHRV9WQVJJQU5UX05PUk1BTCA9IDAsCisJCU1FUkdFX1ZBUklBTlRfT1VSUywKKwkJTUVSR0VfVkFSSUFOVF9USEVJUlMKKwl9IHJlY3Vyc2l2ZV92YXJpYW50OworCisJLyogY29uc29sZSBvdXRwdXQgcmVsYXRlZCBvcHRpb25zICovCisJaW50IHZlcmJvc2l0eTsKKwl1bnNpZ25lZCBidWZmZXJfb3V0cHV0OyAvKiAxOiBvdXRwdXQgYXQgZW5kLCAyOiBrZWVwIGJ1ZmZlcmVkICovCisJc3RydWN0IHN0cmJ1ZiBvYnVmOyAgICAgLyogb3V0cHV0IGJ1ZmZlcjsgaWYgYnVmZmVyX291dHB1dCA9PSAyLCBjYWxsZXIKKwkJCQkgKiBtdXN0IGhhbmRsZSBhbmQgY2FsbCBzdHJidWZfcmVsZWFzZSAqLworCisJLyogbWlzY2VsbGFuZW91cyBjb250cm9sIG9wdGlvbnMgKi8KKwljb25zdCBjaGFyICpzdWJ0cmVlX3NoaWZ0OworCXVuc2lnbmVkIHJlbm9ybWFsaXplIDogMTsKKworCS8qIGludGVybmFsIGZpZWxkcyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiAqLworCXN0cnVjdCBtZXJnZV9vcHRpb25zX2ludGVybmFsICpwcml2OworfTsKKwordm9pZCBpbml0X21lcmdlX29wdGlvbnMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm9wdCwgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pOworCisvKiBwYXJzZSB0aGUgb3B0aW9uIGluIHMgYW5kIHVwZGF0ZSB0aGUgcmVsZXZhbnQgZmllbGQgb2Ygb3B0ICovCitpbnQgcGFyc2VfbWVyZ2Vfb3B0KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnMpOworCisvKgorICogUkVUVVJOIFZBTFVFUzogQWxsIHRoZSBtZXJnZV8qIGZ1bmN0aW9ucyBiZWxvdyByZXR1cm4gYSB2YWx1ZSBhcyBmb2xsb3dzOgorICogICA+IDAgICAgIE1lcmdlIHdhcyBjbGVhbgorICogICA9IDAgICAgIE1lcmdlIGhhZCBjb25mbGljdHMKKyAqICAgPCAwICAgICBNZXJnZSBoaXQgYW4gdW5leHBlY3RlZCBhbmQgdW5yZWNvdmVyYWJsZSBwcm9ibGVtIChlLmcuIGRpc2sKKyAqICAgICAgICAgICAgIGZ1bGwpIGFuZCBhYm9ydGVkIG1lcmdlIHBhcnQtd2F5IHRocm91Z2guCisgKi8KKworLyoKKyAqIHJlbmFtZS1kZXRlY3RpbmcgdGhyZWUtd2F5IG1lcmdlLCBubyByZWN1cnNpb24uCisgKgorICogT3V0cHV0czoKKyAqICAgLSBTZWUgUkVUVVJOIFZBTFVFUyBhYm92ZQorICogICAtIE5vIGNvbW1pdCBpcyBjcmVhdGVkCisgKiAgIC0gb3B0LT5yZXBvLT5pbmRleCBoYXMgdGhlIG5ldyBpbmRleAorICogICAtICRHSVRfSU5ERVhfRklMRSBpcyBub3QgdXBkYXRlZAorICogICAtIFRoZSB3b3JraW5nIHRyZWUgaXMgdXBkYXRlZCB3aXRoIHJlc3VsdHMgb2YgdGhlIG1lcmdlCisgKi8KK2ludCBtZXJnZV90cmVlcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQlzdHJ1Y3QgdHJlZSAqaGVhZCwKKwkJc3RydWN0IHRyZWUgKm1lcmdlLAorCQlzdHJ1Y3QgdHJlZSAqbWVyZ2VfYmFzZSk7CisKKy8qCisgKiBtZXJnZV9yZWN1cnNpdmUgaXMgbGlrZSBtZXJnZV90cmVlcygpIGJ1dCB3aXRoIHJlY3Vyc2l2ZSBhbmNlc3RvcgorICogY29uc29saWRhdGlvbiBhbmQsIGlmIHRoZSBjb21taXQgaXMgY2xlYW4sIGNyZWF0aW9uIG9mIGEgY29tbWl0LgorICoKKyAqIE5PVEU6IGVtcGlyaWNhbGx5LCBhYm91dCBhIGRlY2FkZSBhZ28gaXQgd2FzIGRldGVybWluZWQgdGhhdCB3aXRoIG1vcmUKKyAqICAgICAgIHRoYW4gdHdvIG1lcmdlIGJhc2VzLCBvcHRpbWFsIGJlaGF2aW9yIHdhcyBmb3VuZCB3aGVuIHRoZQorICogICAgICAgbWVyZ2VfYmFzZXMgd2VyZSBwYXNzZWQgaW4gdGhlIG9yZGVyIG9mIG9sZGVzdCBjb21taXQgdG8gbmV3ZXN0CisgKiAgICAgICBjb21taXQuICBBbHNvLCBtZXJnZV9iYXNlcyB3aWxsIGJlIGNvbnN1bWVkIChlbXB0aWVkKSBzbyBtYWtlIGEKKyAqICAgICAgIGNvcHkgaWYgeW91IG5lZWQgaXQuCisgKgorICogT3V0cHV0czoKKyAqICAgLSBTZWUgUkVUVVJOIFZBTFVFUyBhYm92ZQorICogICAtIElmIG1lcmdlIGlzIGNsZWFuLCBhIGNvbW1pdCBpcyBjcmVhdGVkIGFuZCBpdHMgYWRkcmVzcyB3cml0dGVuIHRvICpyZXN1bHQKKyAqICAgLSBvcHQtPnJlcG8tPmluZGV4IGhhcyB0aGUgbmV3IGluZGV4CisgKiAgIC0gJEdJVF9JTkRFWF9GSUxFIGlzIG5vdCB1cGRhdGVkCisgKiAgIC0gVGhlIHdvcmtpbmcgdHJlZSBpcyB1cGRhdGVkIHdpdGggcmVzdWx0cyBvZiB0aGUgbWVyZ2UKKyAqLworaW50IG1lcmdlX3JlY3Vyc2l2ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqb3B0LAorCQkgICAgc3RydWN0IGNvbW1pdCAqaDEsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICpoMiwKKwkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqbWVyZ2VfYmFzZXMsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICoqcmVzdWx0KTsKKworLyoKKyAqIG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljIGNhbiBvcGVyYXRlIG9uIHRyZWVzIGluc3RlYWQgb2YgY29tbWl0cywgYnkKKyAqIHdyYXBwaW5nIHRoZSB0cmVlcyBpbnRvIHZpcnR1YWwgY29tbWl0cywgYW5kIGNhbGxpbmcgbWVyZ2VfcmVjdXJzaXZlKCkuCisgKiBJdCBhbHNvIHdyaXRlcyBvdXQgdGhlIGluLW1lbW9yeSBpbmRleCB0byBkaXNrIGlmIHRoZSBtZXJnZSBpcyBzdWNjZXNzZnVsLgorICoKKyAqIE91dHB1dHM6CisgKiAgIC0gU2VlIFJFVFVSTiBWQUxVRVMgYWJvdmUKKyAqICAgLSBJZiBtZXJnZSBpcyBjbGVhbiwgYSBjb21taXQgaXMgY3JlYXRlZCBhbmQgaXRzIGFkZHJlc3Mgd3JpdHRlbiB0byAqcmVzdWx0CisgKiAgIC0gb3B0LT5yZXBvLT5pbmRleCBoYXMgdGhlIG5ldyBpbmRleAorICogICAtICRHSVRfSU5ERVhfRklMRSBpcyB1cGRhdGVkCisgKiAgIC0gVGhlIHdvcmtpbmcgdHJlZSBpcyB1cGRhdGVkIHdpdGggcmVzdWx0cyBvZiB0aGUgbWVyZ2UKKyAqLworaW50IG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvcHQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGVhZCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICptZXJnZSwKKwkJCSAgICBpbnQgbnVtX21lcmdlX2Jhc2VzLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiptZXJnZV9iYXNlcywKKwkJCSAgICBzdHJ1Y3QgY29tbWl0ICoqcmVzdWx0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tZXJnZS5jIGIvbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzFkNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2UuYwpAQCAtMCwwICsxLDEwOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImRpci5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqbWVyZ2VfYXJndW1lbnQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXJldHVybiBvaWRfdG9faGV4KGNvbW1pdCA/ICZjb21taXQtPm9iamVjdC5vaWQgOiB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlKTsKK30KKworaW50IHRyeV9tZXJnZV9jb21tYW5kKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgICBjb25zdCBjaGFyICpzdHJhdGVneSwgc2l6ZV90IHhvcHRzX25yLAorCQkgICAgICBjb25zdCBjaGFyICoqeG9wdHMsIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uLAorCQkgICAgICBjb25zdCBjaGFyICpoZWFkX2FyZywgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVzKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZhcmdzLCAibWVyZ2UtJXMiLCBzdHJhdGVneSk7CisJZm9yIChpID0gMDsgaSA8IHhvcHRzX25yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmFyZ3MsICItLSVzIiwgeG9wdHNbaV0pOworCWZvciAoaiA9IGNvbW1vbjsgajsgaiA9IGotPm5leHQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgbWVyZ2VfYXJndW1lbnQoai0+aXRlbSkpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tIik7CisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBoZWFkX2FyZyk7CisJZm9yIChqID0gcmVtb3RlczsgajsgaiA9IGotPm5leHQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgbWVyZ2VfYXJndW1lbnQoai0+aXRlbSkpOworCisJcmV0ID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJncy5hcmd2LCBSVU5fR0lUX0NNRCk7CisJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisKKwlkaXNjYXJkX2luZGV4KHItPmluZGV4KTsKKwlpZiAocmVwb19yZWFkX2luZGV4KHIpIDwgMCkKKwkJZGllKF8oImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIpKTsKKwlyZXNvbHZlX3VuZG9fY2xlYXJfaW5kZXgoci0+aW5kZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGNoZWNrb3V0X2Zhc3RfZm9yd2FyZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqaGVhZCwKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcmVtb3RlLAorCQkJICBpbnQgb3ZlcndyaXRlX2lnbm9yZSkKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZXNbTUFYX1VOUEFDS19UUkVFU107CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCWludCBpLCBucl90cmVlcyA9IDA7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCisJcmVmcmVzaF9pbmRleChyLT5pbmRleCwgUkVGUkVTSF9RVUlFVCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwlpZiAocmVwb19ob2xkX2xvY2tlZF9pbmRleChyLCAmbG9ja19maWxlLCBMT0NLX1JFUE9SVF9PTl9FUlJPUikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwltZW1zZXQoJnRyZWVzLCAwLCBzaXplb2YodHJlZXMpKTsKKwltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CisKKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KGhlYWQpOworCWlmICghdHJlZXNbbnJfdHJlZXMrK10pIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrX2ZpbGUpOworCQlyZXR1cm4gLTE7CisJfQorCXRyZWVzW25yX3RyZWVzXSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QocmVtb3RlKTsKKwlpZiAoIXRyZWVzW25yX3RyZWVzKytdKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9ja19maWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnJfdHJlZXM7IGkrKykgeworCQlwYXJzZV90cmVlKHRyZWVzW2ldKTsKKwkJaW5pdF90cmVlX2Rlc2ModCtpLCB0cmVlc1tpXS0+YnVmZmVyLCB0cmVlc1tpXS0+c2l6ZSk7CisJfQorCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCWlmIChvdmVyd3JpdGVfaWdub3JlKSB7CisJCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CisJCWRpci5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOworCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKwkJb3B0cy5kaXIgPSAmZGlyOworCX0KKworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuc3JjX2luZGV4ID0gci0+aW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSByLT5pbmRleDsKKwlvcHRzLnVwZGF0ZSA9IDE7CisJb3B0cy52ZXJib3NlX3VwZGF0ZSA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5mbiA9IHR3b3dheV9tZXJnZTsKKwlzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZvcHRzLCAibWVyZ2UiKTsKKworCWlmICh1bnBhY2tfdHJlZXMobnJfdHJlZXMsIHQsICZvcHRzKSkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisJCWNsZWFyX3VucGFja190cmVlc19wb3JjZWxhaW4oJm9wdHMpOworCQlyZXR1cm4gLTE7CisJfQorCWNsZWFyX3VucGFja190cmVlc19wb3JjZWxhaW4oJm9wdHMpOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleChyLT5pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWVyZ2Vzb3J0LmMgYi9tZXJnZXNvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZkZjJlCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2Vzb3J0LmMKQEAgLTAsMCArMSw3MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibWVyZ2Vzb3J0LmgiCisKK3N0cnVjdCBtZXJnZXNvcnRfc3VibGlzdCB7CisJdm9pZCAqcHRyOworCXVuc2lnbmVkIGxvbmcgbGVuOworfTsKKworc3RhdGljIHZvaWQgKmdldF9udGhfbmV4dCh2b2lkICpsaXN0LCB1bnNpZ25lZCBsb25nIG4sCisJCQkgIHZvaWQgKigqZ2V0X25leHRfZm4pKGNvbnN0IHZvaWQgKikpCit7CisJd2hpbGUgKG4tLSAmJiBsaXN0KQorCQlsaXN0ID0gZ2V0X25leHRfZm4obGlzdCk7CisJcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyB2b2lkICpwb3BfaXRlbShzdHJ1Y3QgbWVyZ2Vzb3J0X3N1Ymxpc3QgKmwsCisJCSAgICAgIHZvaWQgKigqZ2V0X25leHRfZm4pKGNvbnN0IHZvaWQgKikpCit7CisJdm9pZCAqcCA9IGwtPnB0cjsKKwlsLT5wdHIgPSBnZXRfbmV4dF9mbihsLT5wdHIpOworCWwtPmxlbiA9IGwtPnB0ciA/IChsLT5sZW4gLSAxKSA6IDA7CisJcmV0dXJuIHA7Cit9CisKK3ZvaWQgKmxsaXN0X21lcmdlc29ydCh2b2lkICpsaXN0LAorCQkgICAgICB2b2lkICooKmdldF9uZXh0X2ZuKShjb25zdCB2b2lkICopLAorCQkgICAgICB2b2lkICgqc2V0X25leHRfZm4pKHZvaWQgKiwgdm9pZCAqKSwKKwkJICAgICAgaW50ICgqY29tcGFyZV9mbikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCXVuc2lnbmVkIGxvbmcgbDsKKworCWlmICghbGlzdCkKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChsID0gMTsgOyBsICo9IDIpIHsKKwkJdm9pZCAqY3VycjsKKwkJc3RydWN0IG1lcmdlc29ydF9zdWJsaXN0IHAsIHE7CisKKwkJcC5wdHIgPSBsaXN0OworCQlxLnB0ciA9IGdldF9udGhfbmV4dChwLnB0ciwgbCwgZ2V0X25leHRfZm4pOworCQlpZiAoIXEucHRyKQorCQkJYnJlYWs7CisJCXAubGVuID0gcS5sZW4gPSBsOworCisJCWlmIChjb21wYXJlX2ZuKHAucHRyLCBxLnB0cikgPiAwKQorCQkJbGlzdCA9IGN1cnIgPSBwb3BfaXRlbSgmcSwgZ2V0X25leHRfZm4pOworCQllbHNlCisJCQlsaXN0ID0gY3VyciA9IHBvcF9pdGVtKCZwLCBnZXRfbmV4dF9mbik7CisKKwkJd2hpbGUgKHAucHRyKSB7CisJCQl3aGlsZSAocC5sZW4gfHwgcS5sZW4pIHsKKwkJCQl2b2lkICpwcmV2ID0gY3VycjsKKworCQkJCWlmICghcC5sZW4pCisJCQkJCWN1cnIgPSBwb3BfaXRlbSgmcSwgZ2V0X25leHRfZm4pOworCQkJCWVsc2UgaWYgKCFxLmxlbikKKwkJCQkJY3VyciA9IHBvcF9pdGVtKCZwLCBnZXRfbmV4dF9mbik7CisJCQkJZWxzZSBpZiAoY29tcGFyZV9mbihwLnB0ciwgcS5wdHIpID4gMCkKKwkJCQkJY3VyciA9IHBvcF9pdGVtKCZxLCBnZXRfbmV4dF9mbik7CisJCQkJZWxzZQorCQkJCQljdXJyID0gcG9wX2l0ZW0oJnAsIGdldF9uZXh0X2ZuKTsKKwkJCQlzZXRfbmV4dF9mbihwcmV2LCBjdXJyKTsKKwkJCX0KKwkJCXAucHRyID0gcS5wdHI7CisJCQlwLmxlbiA9IGw7CisJCQlxLnB0ciA9IGdldF9udGhfbmV4dChwLnB0ciwgbCwgZ2V0X25leHRfZm4pOworCQkJcS5sZW4gPSBxLnB0ciA/IGwgOiAwOworCisJCX0KKwkJc2V0X25leHRfZm4oY3VyciwgTlVMTCk7CisJfQorCXJldHVybiBsaXN0OworfQpkaWZmIC0tZ2l0IGEvbWVyZ2Vzb3J0LmggYi9tZXJnZXNvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDRjZmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2Vzb3J0LmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBNRVJHRVNPUlRfSAorI2RlZmluZSBNRVJHRVNPUlRfSAorCisvKgorICogU29ydCBsaW5rZWQgbGlzdCBpbiBwbGFjZS4KKyAqIC0gZ2V0X25leHRfZm4oKSByZXR1cm5zIHRoZSBuZXh0IGVsZW1lbnQgZ2l2ZW4gYW4gZWxlbWVudCBvZiBhIGxpbmtlZCBsaXN0LgorICogLSBzZXRfbmV4dF9mbigpIHRha2VzIHR3byBlbGVtZW50cyBBIGFuZCBCLCBhbmQgbWFrZXMgQiB0aGUgIm5leHQiIGVsZW1lbnQKKyAqICAgb2YgQSBvbiB0aGUgbGlzdC4KKyAqIC0gY29tcGFyZV9mbigpIHRha2VzIHR3byBlbGVtZW50cyBBIGFuZCBCLCBhbmQgcmV0dXJucyBuZWdhdGl2ZSwgMCwgcG9zaXRpdmUKKyAqICAgYXMgdGhlIHNhbWUgc2lnbiBhcyAic3VidHJhY3RpbmciIEIgZnJvbSBBLgorICovCit2b2lkICpsbGlzdF9tZXJnZXNvcnQodm9pZCAqbGlzdCwKKwkJICAgICAgdm9pZCAqKCpnZXRfbmV4dF9mbikoY29uc3Qgdm9pZCAqKSwKKwkJICAgICAgdm9pZCAoKnNldF9uZXh0X2ZuKSh2b2lkICosIHZvaWQgKiksCisJCSAgICAgIGludCAoKmNvbXBhcmVfZm4pKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9hcmF4aXMgYi9tZXJnZXRvb2xzL2FyYXhpcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjQwN2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9hcmF4aXMKQEAgLTAsMCArMSwxOCBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAtd2FpdCAtMiAiJExPQ0FMIiAiJFJFTU9URSIgPi9kZXYvbnVsbCAyPiYxCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC13YWl0IC1tZXJnZSAtMyAtYTEgXAorCQkJIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiID4vZGV2L251bGwgMj4mMQorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIC13YWl0IC0yIFwKKwkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJE1FUkdFRCIgPi9kZXYvbnVsbCAyPiYxCisJZmkKK30KKwordHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCgpIHsKKwllY2hvIGNvbXBhcmUKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvYmMgYi9tZXJnZXRvb2xzL2JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjllNjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2JjCkBAIC0wLDAgKzEsMjMgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiIFwKKwkJCS1tZXJnZW91dHB1dD0iJE1FUkdFRCIKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgXAorCQkJLW1lcmdlb3V0cHV0PSIkTUVSR0VEIgorCWZpCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJaWYgdHlwZSBiY29tcCA+L2Rldi9udWxsIDI+L2Rldi9udWxsCisJdGhlbgorCQllY2hvIGJjb21wCisJZWxzZQorCQllY2hvIGJjb21wYXJlCisJZmkKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvYmMzIGIvbWVyZ2V0b29scy9iYzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4ZGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvYmMzCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvYmMiCmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2NvZGVjb21wYXJlIGIvbWVyZ2V0b29scy9jb2RlY29tcGFyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjYwZThkCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9jb2RlY29tcGFyZQpAQCAtMCwwICsxLDIzIEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtTUY9IiRMT0NBTCIgLVRGPSIkUkVNT1RFIiAtQkY9IiRCQVNFIiBcCisJCQktUkY9IiRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLU1GPSIkTE9DQUwiIC1URj0iJFJFTU9URSIgXAorCQkJLVJGPSIkTUVSR0VEIgorCWZpCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJaWYgbWVyZ2VfbW9kZQorCXRoZW4KKwkJZWNobyBDb2RlTWVyZ2UKKwllbHNlCisJCWVjaG8gQ29kZUNvbXBhcmUKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9kZWx0YXdhbGtlciBiL21lcmdldG9vbHMvZGVsdGF3YWxrZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2ZjM3NAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZGVsdGF3YWxrZXIKQEAgLTAsMCArMSwyNSBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgPi9kZXYvbnVsbCAyPiYxCit9CisKK21lcmdlX2NtZCAoKSB7CisJIyBBZGRpbmcgJChwd2QpLyBpbiBmcm9udCBvZiAkTUVSR0VEIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LgorCSMgSG93ZXZlciB3aXRob3V0IGl0LCBEZWx0YVdhbGtlciAoYXQgbGVhc3QgdjEuOS44IG9uIFdpbmRvd3MpCisJIyBjcmFzaGVzIHdpdGggYSBKUkUgZXhjZXB0aW9uLiAgVGhlIERlbHRhV2Fsa2VyIHVzZXIgbWFudWFsLAorCSMgc2hvd3MgJChwd2QpLyB3aGVuZXZlciB0aGUgJy1tZXJnZWQnIG9wdGlvbnMgaXMgZ2l2ZW4uCisJIyBBZGRpbmcgaXQgaGVyZSBzZWVtcyB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbS4KKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgLW1lcmdlZD0iJChwd2QpLyRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIC1tZXJnZWQ9IiQocHdkKS8kTUVSR0VEIgorCWZpID4vZGV2L251bGwgMj4mMQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoICgpIHsKKwllY2hvIERlbHRhV2Fsa2VyCit9CisKK2V4aXRfY29kZV90cnVzdGFibGUgKCkgeworCXRydWUKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZGlmZm1lcmdlIGIvbWVyZ2V0b29scy9kaWZmbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2MzU1YgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZGlmZm1lcmdlCkBAIC0wLDAgKzEsMTggQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiID4vZGV2L251bGwgMj4mMQorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLW1lcmdlIC0tcmVzdWx0PSIkTUVSR0VEIiBcCisJCQkiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIC0tbWVyZ2UgXAorCQkJLS1yZXN1bHQ9IiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIgorCWZpCit9CisKK2V4aXRfY29kZV90cnVzdGFibGUgKCkgeworCXRydWUKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZGlmZnVzZSBiL21lcmdldG9vbHMvZGlmZnVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTNhZThiCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9kaWZmdXNlCkBAIC0wLDAgKzEsMTUgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIHwgY2F0Cit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCSIkTE9DQUwiICIkTUVSR0VEIiAiJFJFTU9URSIgXAorCQkJIiRCQVNFIiB8IGNhdAorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCSIkTE9DQUwiICIkTUVSR0VEIiAiJFJFTU9URSIgfCBjYXQKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9lY21lcmdlIGIvbWVyZ2V0b29scy9lY21lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNTEwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2VjbWVyZ2UKQEAgLTAsMCArMSwxNCBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLWRlZmF1bHQgLS1tb2RlPWRpZmYyICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJEJBU0UiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQktLWRlZmF1bHQgLS1tb2RlPW1lcmdlMyAtLXRvPSIkTUVSR0VEIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQktLWRlZmF1bHQgLS1tb2RlPW1lcmdlMiAtLXRvPSIkTUVSR0VEIgorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2VtZXJnZSBiL21lcmdldG9vbHMvZW1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxY2U1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2VtZXJnZQpAQCAtMCwwICsxLDI2IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC1mIGVtZXJnZS1maWxlcy1jb21tYW5kICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQktZiBlbWVyZ2UtZmlsZXMtd2l0aC1hbmNlc3Rvci1jb21tYW5kIFwKKwkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiIFwKKwkJCSIkKGJhc2VuYW1lICIkTUVSR0VEIikiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJLWYgZW1lcmdlLWZpbGVzLWNvbW1hbmQgXAorCQkJIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCSIkKGJhc2VuYW1lICIkTUVSR0VEIikiCisJZmkKK30KKwordHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCgpIHsKKwllY2hvIGVtYWNzCit9CisKK2V4aXRfY29kZV90cnVzdGFibGUgKCkgeworCXRydWUKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZXhhbWRpZmYgYi9tZXJnZXRvb2xzL2V4YW1kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MmIwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2V4YW1kaWZmCkBAIC0wLDAgKzEsMTYgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIC1uaAorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtbWVyZ2UgIiRMT0NBTCIgIiRCQVNFIiAiJFJFTU9URSIgLW86IiRNRVJHRUQiIC1uaAorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1tZXJnZSAiJExPQ0FMIiAiJFJFTU9URSIgLW86IiRNRVJHRUQiIC1uaAorCWZpCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJbWVyZ2V0b29sX2ZpbmRfd2luMzJfY21kICJFeGFtRGlmZi5jb20iICJFeGFtRGlmZiBQcm8iCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2d1aWZmeSBiL21lcmdldG9vbHMvZ3VpZmZ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMjNhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2d1aWZmeQpAQCAtMCwwICsxLDE4IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtcyAiJExPQ0FMIiBcCisJCSIkUkVNT1RFIiAiJEJBU0UiICIkTUVSR0VEIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1tICIkTE9DQUwiIFwKKwkJIiRSRU1PVEUiICIkTUVSR0VEIgorCWZpCit9CisKK2V4aXRfY29kZV90cnVzdGFibGUgKCkgeworCXRydWUKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZ3ZpbWRpZmYgYi9tZXJnZXRvb2xzL2d2aW1kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTViYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2d2aW1kaWZmCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvdmltZGlmZiIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZ3ZpbWRpZmYyIGIvbWVyZ2V0b29scy9ndmltZGlmZjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNWJiMAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZ3ZpbWRpZmYyCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvdmltZGlmZiIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZ3ZpbWRpZmYzIGIvbWVyZ2V0b29scy9ndmltZGlmZjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNWJiMAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZ3ZpbWRpZmYzCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvdmltZGlmZiIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMva2RpZmYzIGIvbWVyZ2V0b29scy9rZGlmZjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2NGVkNQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMva2RpZmYzCkBAIC0wLDAgKzEsMjcgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQktLUwxICIkTUVSR0VEIChBKSIgLS1MMiAiJE1FUkdFRCAoQikiIFwKKwkJIiRMT0NBTCIgIiRSRU1PVEUiID4vZGV2L251bGwgMj4mMQorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLWF1dG8gXAorCQkJLS1MMSAiJE1FUkdFRCAoQmFzZSkiIFwKKwkJCS0tTDIgIiRNRVJHRUQgKExvY2FsKSIgXAorCQkJLS1MMyAiJE1FUkdFRCAoUmVtb3RlKSIgXAorCQkJLW8gIiRNRVJHRUQiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJPi9kZXYvbnVsbCAyPiYxCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLS1hdXRvIFwKKwkJCS0tTDEgIiRNRVJHRUQgKExvY2FsKSIgXAorCQkJLS1MMiAiJE1FUkdFRCAoUmVtb3RlKSIgXAorCQkJLW8gIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCT4vZGV2L251bGwgMj4mMQorCWZpCit9CisKK2V4aXRfY29kZV90cnVzdGFibGUgKCkgeworCXRydWUKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMva29tcGFyZSBiL21lcmdldG9vbHMva29tcGFyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGMwYmZhCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9rb21wYXJlCkBAIC0wLDAgKzEsMTEgQEAKK2Nhbl9tZXJnZSAoKSB7CisJcmV0dXJuIDEKK30KKworZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworZXhpdF9jb2RlX3RydXN0YWJsZSAoKSB7CisJdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9tZWxkIGIvbWVyZ2V0b29scy9tZWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMDg0NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL21lbGQKQEAgLTAsMCArMSwzNiBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiB0ZXN0IC16ICIke21lbGRfaGFzX291dHB1dF9vcHRpb246K3NldH0iCisJdGhlbgorCQljaGVja19tZWxkX2Zvcl9vdXRwdXRfdmVyc2lvbgorCWZpCisKKwlpZiB0ZXN0ICIkbWVsZF9oYXNfb3V0cHV0X29wdGlvbiIgPSB0cnVlCisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLS1vdXRwdXQ9IiRNRVJHRUQiIFwKKwkJCSIkTE9DQUwiICIkQkFTRSIgIiRSRU1PVEUiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIgorCWZpCit9CisKKyMgQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgdXNlICdtZWxkIC0tb3V0cHV0IDxmaWxlPicKK2NoZWNrX21lbGRfZm9yX291dHB1dF92ZXJzaW9uICgpIHsKKwltZWxkX3BhdGg9IiQoZ2l0IGNvbmZpZyBtZXJnZXRvb2wubWVsZC5wYXRoKSIKKwltZWxkX3BhdGg9IiR7bWVsZF9wYXRoOi1tZWxkfSIKKworCWlmIG1lbGRfaGFzX291dHB1dF9vcHRpb249JChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wubWVsZC5oYXNPdXRwdXQpCisJdGhlbgorCQk6IHVzZSBjb25maWd1cmVkIHZhbHVlCisJZWxpZiAiJG1lbGRfcGF0aCIgLS1oZWxwIDI+JjEgfAorCQlncmVwIC1lICctLW91dHB1dD0nIC1lICdcW09QVElPTlwuXC5cLlxdJyA+L2Rldi9udWxsCisJdGhlbgorCQk6IG9sZCBvbmVzIG1lbnRpb24gLS1vdXRwdXQgYW5kIG5ldyBvbmVzIGp1c3Qgc2F5IE9QVElPTi4uLgorCQltZWxkX2hhc19vdXRwdXRfb3B0aW9uPXRydWUKKwllbHNlCisJCW1lbGRfaGFzX291dHB1dF9vcHRpb249ZmFsc2UKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9vcGVuZGlmZiBiL21lcmdldG9vbHMvb3BlbmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwOGRkNgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvb3BlbmRpZmYKQEAgLTAsMCArMSwxNCBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgfCBjYXQKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCS1hbmNlc3RvciAiJEJBU0UiIC1tZXJnZSAiJE1FUkdFRCIgfCBjYXQKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgXAorCQkJLW1lcmdlICIkTUVSR0VEIiB8IGNhdAorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3A0bWVyZ2UgYi9tZXJnZXRvb2xzL3A0bWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1YjI5MQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvcDRtZXJnZQpAQCAtMCwwICsxLDM2IEBACitkaWZmX2NtZCAoKSB7CisJZW1wdHlfZmlsZT0KKworCSMgcDRtZXJnZSBkb2VzIG5vdCBsaWtlIC9kZXYvbnVsbAorCWlmIHRlc3QgIi9kZXYvbnVsbCIgPSAiJExPQ0FMIgorCXRoZW4KKwkJTE9DQUw9IiQoY3JlYXRlX2VtcHR5X2ZpbGUpIgorCWZpCisJaWYgdGVzdCAiL2Rldi9udWxsIiA9ICIkUkVNT1RFIgorCXRoZW4KKwkJUkVNT1RFPSIkKGNyZWF0ZV9lbXB0eV9maWxlKSIKKwlmaQorCisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorCisJaWYgdGVzdCAtbiAiJGVtcHR5X2ZpbGUiCisJdGhlbgorCQlybSAtZiAiJGVtcHR5X2ZpbGUiCisJZmkKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAhICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCWNwIC0tICIkTE9DQUwiICIkQkFTRSIKKwkJY3JlYXRlX3ZpcnR1YWxfYmFzZSAiJEJBU0UiICIkUkVNT1RFIgorCWZpCisJIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRSRU1PVEUiICIkTE9DQUwiICIkTUVSR0VEIgorfQorCitjcmVhdGVfZW1wdHlfZmlsZSAoKSB7CisJZW1wdHlfZmlsZT0iJHtUTVBESVI6LS90bXB9L2dpdC1kaWZmdG9vbC1wNG1lcmdlLWVtcHR5LWZpbGUuJCQiCisJPiIkZW1wdHlfZmlsZSIKKworCXByaW50ZiAiJXMiICIkZW1wdHlfZmlsZSIKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvc21lcmdlIGIvbWVyZ2V0b29scy9zbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyZTZmNgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvc21lcmdlCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgbWVyZ2V0b29sICIkTE9DQUwiICIkUkVNT1RFIiAtbyAiJE1FUkdFRCIKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgbWVyZ2V0b29sICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIC1vICIkTUVSR0VEIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIG1lcmdldG9vbCAiJExPQ0FMIiAiJFJFTU9URSIgLW8gIiRNRVJHRUQiCisJZmkKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvdGtkaWZmIGIvbWVyZ2V0b29scy90a2RpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlNWNiNQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvdGtkaWZmCkBAIC0wLDAgKzEsMTYgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIC1hICIkQkFTRSIgLW8gIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1vICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSIKKwlmaQorfQorCitleGl0X2NvZGVfdHJ1c3RhYmxlICgpIHsKKwl0cnVlCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3RvcnRvaXNlbWVyZ2UgYi9tZXJnZXRvb2xzL3RvcnRvaXNlbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhYjY2NgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvdG9ydG9pc2VtZXJnZQpAQCAtMCwwICsxLDMyIEBACitjYW5fZGlmZiAoKSB7CisJcmV0dXJuIDEKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQliYXNlbmFtZT0iJChiYXNlbmFtZSAiJG1lcmdlX3Rvb2xfcGF0aCIgLmV4ZSkiCisJCWlmIHRlc3QgIiRiYXNlbmFtZSIgPSAidG9ydG9pc2VnaXRtZXJnZSIKKwkJdGhlbgorCQkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCQktYmFzZSAiJEJBU0UiIC1taW5lICIkTE9DQUwiIFwKKwkJCQktdGhlaXJzICIkUkVNT1RFIiAtbWVyZ2VkICIkTUVSR0VEIgorCQllbHNlCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJCS1iYXNlOiIkQkFTRSIgLW1pbmU6IiRMT0NBTCIgXAorCQkJCS10aGVpcnM6IiRSRU1PVEUiIC1tZXJnZWQ6IiRNRVJHRUQiCisJCWZpCisJZWxzZQorCQllY2hvICIkbWVyZ2VfdG9vbF9wYXRoIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSBiYXNlIiAxPiYyCisJCXJldHVybiAxCisJZmkKK30KKwordHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCgpIHsKKwlpZiB0eXBlIHRvcnRvaXNlZ2l0bWVyZ2UgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCXRoZW4KKwkJZWNobyB0b3J0b2lzZWdpdG1lcmdlCisJZWxzZQorCQllY2hvIHRvcnRvaXNlbWVyZ2UKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy92aW1kaWZmIGIvbWVyZ2V0b29scy92aW1kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDg2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL3ZpbWRpZmYKQEAgLTAsMCArMSw0OCBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAtUiAtZiAtZCBcCisJCS1jICd3aW5jbWQgbCcgLWMgJ2NkICRHSVRfUFJFRklYJyAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwljYXNlICIkMSIgaW4KKwlndmltZGlmZnx2aW1kaWZmKQorCQlpZiAkYmFzZV9wcmVzZW50CisJCXRoZW4KKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtZiAtZCAtYyAnNHdpbmNtZCB3IHwgd2luY21kIEonIFwKKwkJCQkiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIiAiJE1FUkdFRCIKKwkJZWxzZQorCQkJIiRtZXJnZV90b29sX3BhdGgiIC1mIC1kIC1jICd3aW5jbWQgbCcgXAorCQkJCSIkTE9DQUwiICIkTUVSR0VEIiAiJFJFTU9URSIKKwkJZmkKKwkJOzsKKwlndmltZGlmZjJ8dmltZGlmZjIpCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtZiAtZCAtYyAnd2luY21kIGwnIFwKKwkJCSIkTE9DQUwiICIkTUVSR0VEIiAiJFJFTU9URSIKKwkJOzsKKwlndmltZGlmZjN8dmltZGlmZjMpCisJCWlmICRiYXNlX3ByZXNlbnQKKwkJdGhlbgorCQkJIiRtZXJnZV90b29sX3BhdGgiIC1mIC1kIC1jICdoaWQgfCBoaWQgfCBoaWQnIFwKKwkJCQkiJExPQ0FMIiAiJFJFTU9URSIgIiRCQVNFIiAiJE1FUkdFRCIKKwkJZWxzZQorCQkJIiRtZXJnZV90b29sX3BhdGgiIC1mIC1kIC1jICdoaWQgfCBoaWQnIFwKKwkJCQkiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiCisJCWZpCisJCTs7CisJZXNhYworfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWNhc2UgIiQxIiBpbgorCWd2aW1kaWZmfGd2aW1kaWZmMnxndmltZGlmZjMpCisJCWVjaG8gZ3ZpbQorCQk7OworCXZpbWRpZmZ8dmltZGlmZjJ8dmltZGlmZjMpCisJCWVjaG8gdmltCisJCTs7CisJZXNhYworfQorCitleGl0X2NvZGVfdHJ1c3RhYmxlICgpIHsKKwl0cnVlCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3ZpbWRpZmYyIGIvbWVyZ2V0b29scy92aW1kaWZmMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE1YmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy92aW1kaWZmMgpAQCAtMCwwICsxIEBACisuICIkTUVSR0VfVE9PTFNfRElSL3ZpbWRpZmYiCmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3ZpbWRpZmYzIGIvbWVyZ2V0b29scy92aW1kaWZmMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE1YmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy92aW1kaWZmMwpAQCAtMCwwICsxIEBACisuICIkTUVSR0VfVE9PTFNfRElSL3ZpbWRpZmYiCmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3dpbm1lcmdlIGIvbWVyZ2V0b29scy93aW5tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQwMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy93aW5tZXJnZQpAQCAtMCwwICsxLDE1IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC11IC1lICIkTE9DQUwiICIkUkVNT1RFIgorCXJldHVybiAwCit9CisKK21lcmdlX2NtZCAoKSB7CisJIyBtZXJnZXRvb2wud2lubWVyZ2UudHJ1c3RFeGl0Q29kZSBpcyBpbXBsaWNpdGx5IGZhbHNlLgorCSMgdG91Y2ggJEJBQ0tVUCBzbyB0aGF0IHdlIGNhbiBjaGVja191bmNoYW5nZWQuCisJIiRtZXJnZV90b29sX3BhdGgiIC11IC1lIC1kbCBMb2NhbCAtZHIgUmVtb3RlIFwKKwkJIiRMT0NBTCIgIiRSRU1PVEUiICIkTUVSR0VEIgorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCW1lcmdldG9vbF9maW5kX3dpbjMyX2NtZCAiV2luTWVyZ2VVLmV4ZSIgIldpbk1lcmdlIgorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy94eGRpZmYgYi9tZXJnZXRvb2xzL3h4ZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTViOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy94eGRpZmYKQEAgLTAsMCArMSwyMyBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCS1SICdBY2NlbC5TZWFyY2g6ICJDdHJsK0YiJyBcCisJCS1SICdBY2NlbC5TZWFyY2hGb3J3YXJkOiAiQ3RybCtHIicgXAorCQkiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLVggLS1zaG93LW1lcmdlZC1wYW5lIFwKKwkJCS1SICdBY2NlbC5TYXZlQXNNZXJnZWQ6ICJDdHJsK1MiJyBcCisJCQktUiAnQWNjZWwuU2VhcmNoOiAiQ3RybCtGIicgXAorCQkJLVIgJ0FjY2VsLlNlYXJjaEZvcndhcmQ6ICJDdHJsK0ciJyBcCisJCQktLW1lcmdlZC1maWxlICIkTUVSR0VEIiAiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1YICRleHRyYSBcCisJCQktUiAnQWNjZWwuU2F2ZUFzTWVyZ2VkOiAiQ3RybCtTIicgXAorCQkJLVIgJ0FjY2VsLlNlYXJjaDogIkN0cmwrRiInIFwKKwkJCS1SICdBY2NlbC5TZWFyY2hGb3J3YXJkOiAiQ3RybCtHIicgXAorCQkJLS1tZXJnZWQtZmlsZSAiJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiCisJZmkKK30KZGlmZiAtLWdpdCBhL21pZHguYyBiL21pZHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTI3ZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWlkeC5jCkBAIC0wLDAgKzEsMTQyMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAibWlkeC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAidHJhY2UyLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworI2RlZmluZSBNSURYX1NJR05BVFVSRSAweDRkNDk0NDU4IC8qICJNSURYIiAqLworI2RlZmluZSBNSURYX1ZFUlNJT04gMQorI2RlZmluZSBNSURYX0JZVEVfRklMRV9WRVJTSU9OIDQKKyNkZWZpbmUgTUlEWF9CWVRFX0hBU0hfVkVSU0lPTiA1CisjZGVmaW5lIE1JRFhfQllURV9OVU1fQ0hVTktTIDYKKyNkZWZpbmUgTUlEWF9CWVRFX05VTV9QQUNLUyA4CisjZGVmaW5lIE1JRFhfSEFTSF9WRVJTSU9OIDEKKyNkZWZpbmUgTUlEWF9IRUFERVJfU0laRSAxMgorI2RlZmluZSBNSURYX01JTl9TSVpFIChNSURYX0hFQURFUl9TSVpFICsgdGhlX2hhc2hfYWxnby0+cmF3c3opCisKKyNkZWZpbmUgTUlEWF9NQVhfQ0hVTktTIDUKKyNkZWZpbmUgTUlEWF9DSFVOS19BTElHTk1FTlQgNAorI2RlZmluZSBNSURYX0NIVU5LSURfUEFDS05BTUVTIDB4NTA0ZTQxNGQgLyogIlBOQU0iICovCisjZGVmaW5lIE1JRFhfQ0hVTktJRF9PSURGQU5PVVQgMHg0ZjQ5NDQ0NiAvKiAiT0lERiIgKi8KKyNkZWZpbmUgTUlEWF9DSFVOS0lEX09JRExPT0tVUCAweDRmNDk0NDRjIC8qICJPSURMIiAqLworI2RlZmluZSBNSURYX0NIVU5LSURfT0JKRUNUT0ZGU0VUUyAweDRmNGY0NjQ2IC8qICJPT0ZGIiAqLworI2RlZmluZSBNSURYX0NIVU5LSURfTEFSR0VPRkZTRVRTIDB4NGM0ZjQ2NDYgLyogIkxPRkYiICovCisjZGVmaW5lIE1JRFhfQ0hVTktMT09LVVBfV0lEVEggKHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDY0X3QpKQorI2RlZmluZSBNSURYX0NIVU5LX0ZBTk9VVF9TSVpFIChzaXplb2YodWludDMyX3QpICogMjU2KQorI2RlZmluZSBNSURYX0NIVU5LX09GRlNFVF9XSURUSCAoMiAqIHNpemVvZih1aW50MzJfdCkpCisjZGVmaW5lIE1JRFhfQ0hVTktfTEFSR0VfT0ZGU0VUX1dJRFRIIChzaXplb2YodWludDY0X3QpKQorI2RlZmluZSBNSURYX0xBUkdFX09GRlNFVF9ORUVERUQgMHg4MDAwMDAwMAorCisjZGVmaW5lIFBBQ0tfRVhQSVJFRCBVSU5UX01BWAorCitzdGF0aWMgY2hhciAqZ2V0X21pZHhfZmlsZW5hbWUoY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK3sKKwlyZXR1cm4geHN0cmZtdCgiJXMvcGFjay9tdWx0aS1wYWNrLWluZGV4Iiwgb2JqZWN0X2Rpcik7Cit9CisKK3N0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICpsb2FkX211bHRpX3BhY2tfaW5kZXgoY29uc3QgY2hhciAqb2JqZWN0X2RpciwgaW50IGxvY2FsKQoreworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptID0gTlVMTDsKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisJc2l6ZV90IG1pZHhfc2l6ZTsKKwl2b2lkICptaWR4X21hcCA9IE5VTEw7CisJdWludDMyX3QgaGFzaF92ZXJzaW9uOworCWNoYXIgKm1pZHhfbmFtZSA9IGdldF9taWR4X2ZpbGVuYW1lKG9iamVjdF9kaXIpOworCXVpbnQzMl90IGk7CisJY29uc3QgY2hhciAqY3VyX3BhY2tfbmFtZTsKKworCWZkID0gZ2l0X29wZW4obWlkeF9uYW1lKTsKKworCWlmIChmZCA8IDApCisJCWdvdG8gY2xlYW51cF9mYWlsOworCWlmIChmc3RhdChmZCwgJnN0KSkgeworCQllcnJvcl9lcnJubyhfKCJmYWlsZWQgdG8gcmVhZCAlcyIpLCBtaWR4X25hbWUpOworCQlnb3RvIGNsZWFudXBfZmFpbDsKKwl9CisKKwltaWR4X3NpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCisJaWYgKG1pZHhfc2l6ZSA8IE1JRFhfTUlOX1NJWkUpIHsKKwkJZXJyb3IoXygibXVsdGktcGFjay1pbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIpLCBtaWR4X25hbWUpOworCQlnb3RvIGNsZWFudXBfZmFpbDsKKwl9CisKKwlGUkVFX0FORF9OVUxMKG1pZHhfbmFtZSk7CisKKwltaWR4X21hcCA9IHhtbWFwKE5VTEwsIG1pZHhfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCisJRkxFWF9BTExPQ19TVFIobSwgb2JqZWN0X2Rpciwgb2JqZWN0X2Rpcik7CisJbS0+ZmQgPSBmZDsKKwltLT5kYXRhID0gbWlkeF9tYXA7CisJbS0+ZGF0YV9sZW4gPSBtaWR4X3NpemU7CisJbS0+bG9jYWwgPSBsb2NhbDsKKworCW0tPnNpZ25hdHVyZSA9IGdldF9iZTMyKG0tPmRhdGEpOworCWlmIChtLT5zaWduYXR1cmUgIT0gTUlEWF9TSUdOQVRVUkUpCisJCWRpZShfKCJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIpLAorCQkgICAgICBtLT5zaWduYXR1cmUsIE1JRFhfU0lHTkFUVVJFKTsKKworCW0tPnZlcnNpb24gPSBtLT5kYXRhW01JRFhfQllURV9GSUxFX1ZFUlNJT05dOworCWlmIChtLT52ZXJzaW9uICE9IE1JRFhfVkVSU0lPTikKKwkJZGllKF8oIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiAlZCBub3QgcmVjb2duaXplZCIpLAorCQkgICAgICBtLT52ZXJzaW9uKTsKKworCWhhc2hfdmVyc2lvbiA9IG0tPmRhdGFbTUlEWF9CWVRFX0hBU0hfVkVSU0lPTl07CisJaWYgKGhhc2hfdmVyc2lvbiAhPSBNSURYX0hBU0hfVkVSU0lPTikKKwkJZGllKF8oImhhc2ggdmVyc2lvbiAldSBkb2VzIG5vdCBtYXRjaCIpLCBoYXNoX3ZlcnNpb24pOworCW0tPmhhc2hfbGVuID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisKKwltLT5udW1fY2h1bmtzID0gbS0+ZGF0YVtNSURYX0JZVEVfTlVNX0NIVU5LU107CisKKwltLT5udW1fcGFja3MgPSBnZXRfYmUzMihtLT5kYXRhICsgTUlEWF9CWVRFX05VTV9QQUNLUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX2NodW5rczsgaSsrKSB7CisJCXVpbnQzMl90IGNodW5rX2lkID0gZ2V0X2JlMzIobS0+ZGF0YSArIE1JRFhfSEVBREVSX1NJWkUgKworCQkJCQkgICAgIE1JRFhfQ0hVTktMT09LVVBfV0lEVEggKiBpKTsKKwkJdWludDY0X3QgY2h1bmtfb2Zmc2V0ID0gZ2V0X2JlNjQobS0+ZGF0YSArIE1JRFhfSEVBREVSX1NJWkUgKyA0ICsKKwkJCQkJCSBNSURYX0NIVU5LTE9PS1VQX1dJRFRIICogaSk7CisKKwkJaWYgKGNodW5rX29mZnNldCA+PSBtLT5kYXRhX2xlbikKKwkJCWRpZShfKCJpbnZhbGlkIGNodW5rIG9mZnNldCAodG9vIGxhcmdlKSIpKTsKKworCQlzd2l0Y2ggKGNodW5rX2lkKSB7CisJCQljYXNlIE1JRFhfQ0hVTktJRF9QQUNLTkFNRVM6CisJCQkJbS0+Y2h1bmtfcGFja19uYW1lcyA9IG0tPmRhdGEgKyBjaHVua19vZmZzZXQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTUlEWF9DSFVOS0lEX09JREZBTk9VVDoKKwkJCQltLT5jaHVua19vaWRfZmFub3V0ID0gKHVpbnQzMl90ICopKG0tPmRhdGEgKyBjaHVua19vZmZzZXQpOworCQkJCWJyZWFrOworCisJCQljYXNlIE1JRFhfQ0hVTktJRF9PSURMT09LVVA6CisJCQkJbS0+Y2h1bmtfb2lkX2xvb2t1cCA9IG0tPmRhdGEgKyBjaHVua19vZmZzZXQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgTUlEWF9DSFVOS0lEX09CSkVDVE9GRlNFVFM6CisJCQkJbS0+Y2h1bmtfb2JqZWN0X29mZnNldHMgPSBtLT5kYXRhICsgY2h1bmtfb2Zmc2V0OworCQkJCWJyZWFrOworCisJCQljYXNlIE1JRFhfQ0hVTktJRF9MQVJHRU9GRlNFVFM6CisJCQkJbS0+Y2h1bmtfbGFyZ2Vfb2Zmc2V0cyA9IG0tPmRhdGEgKyBjaHVua19vZmZzZXQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMDoKKwkJCQlkaWUoXygidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIpKTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQkvKgorCQkJCSAqIERvIG5vdGhpbmcgb24gdW5yZWNvZ25pemVkIGNodW5rcywgYWxsb3dpbmcgZnV0dXJlCisJCQkJICogZXh0ZW5zaW9ucyB0byBhZGQgb3B0aW9uYWwgY2h1bmtzLgorCQkJCSAqLworCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFtLT5jaHVua19wYWNrX25hbWVzKQorCQlkaWUoXygibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIHBhY2stbmFtZSBjaHVuayIpKTsKKwlpZiAoIW0tPmNodW5rX29pZF9mYW5vdXQpCisJCWRpZShfKCJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIpKTsKKwlpZiAoIW0tPmNodW5rX29pZF9sb29rdXApCisJCWRpZShfKCJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGxvb2t1cCBjaHVuayIpKTsKKwlpZiAoIW0tPmNodW5rX29iamVjdF9vZmZzZXRzKQorCQlkaWUoXygibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIikpOworCisJbS0+bnVtX29iamVjdHMgPSBudG9obChtLT5jaHVua19vaWRfZmFub3V0WzI1NV0pOworCisJbS0+cGFja19uYW1lcyA9IHhjYWxsb2MobS0+bnVtX3BhY2tzLCBzaXplb2YoKm0tPnBhY2tfbmFtZXMpKTsKKwltLT5wYWNrcyA9IHhjYWxsb2MobS0+bnVtX3BhY2tzLCBzaXplb2YoKm0tPnBhY2tzKSk7CisKKwljdXJfcGFja19uYW1lID0gKGNvbnN0IGNoYXIgKiltLT5jaHVua19wYWNrX25hbWVzOworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykgeworCQltLT5wYWNrX25hbWVzW2ldID0gY3VyX3BhY2tfbmFtZTsKKworCQljdXJfcGFja19uYW1lICs9IHN0cmxlbihjdXJfcGFja19uYW1lKSArIDE7CisKKwkJaWYgKGkgJiYgc3RyY21wKG0tPnBhY2tfbmFtZXNbaV0sIG0tPnBhY2tfbmFtZXNbaSAtIDFdKSA8PSAwKQorCQkJZGllKF8oIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciKSwKKwkJCSAgICAgIG0tPnBhY2tfbmFtZXNbaSAtIDFdLAorCQkJICAgICAgbS0+cGFja19uYW1lc1tpXSk7CisJfQorCisJdHJhY2UyX2RhdGFfaW50bWF4KCJtaWR4IiwgdGhlX3JlcG9zaXRvcnksICJsb2FkL251bV9wYWNrcyIsIG0tPm51bV9wYWNrcyk7CisJdHJhY2UyX2RhdGFfaW50bWF4KCJtaWR4IiwgdGhlX3JlcG9zaXRvcnksICJsb2FkL251bV9vYmplY3RzIiwgbS0+bnVtX29iamVjdHMpOworCisJcmV0dXJuIG07CisKK2NsZWFudXBfZmFpbDoKKwlmcmVlKG0pOworCWZyZWUobWlkeF9uYW1lKTsKKwlpZiAobWlkeF9tYXApCisJCW11bm1hcChtaWR4X21hcCwgbWlkeF9zaXplKTsKKwlpZiAoMCA8PSBmZCkKKwkJY2xvc2UoZmQpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIGNsb3NlX21pZHgoc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0pCit7CisJdWludDMyX3QgaTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJbXVubWFwKCh1bnNpZ25lZCBjaGFyICopbS0+ZGF0YSwgbS0+ZGF0YV9sZW4pOworCWNsb3NlKG0tPmZkKTsKKwltLT5mZCA9IC0xOworCisJZm9yIChpID0gMDsgaSA8IG0tPm51bV9wYWNrczsgaSsrKSB7CisJCWlmIChtLT5wYWNrc1tpXSkKKwkJCW0tPnBhY2tzW2ldLT5tdWx0aV9wYWNrX2luZGV4ID0gMDsKKwl9CisJRlJFRV9BTkRfTlVMTChtLT5wYWNrcyk7CisJRlJFRV9BTkRfTlVMTChtLT5wYWNrX25hbWVzKTsKK30KKworaW50IHByZXBhcmVfbWlkeF9wYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwgdWludDMyX3QgcGFja19pbnRfaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBwYWNrX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCWlmIChwYWNrX2ludF9pZCA+PSBtLT5udW1fcGFja3MpCisJCWRpZShfKCJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiKSwKKwkJICAgIHBhY2tfaW50X2lkLCBtLT5udW1fcGFja3MpOworCisJaWYgKG0tPnBhY2tzW3BhY2tfaW50X2lkXSkKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfYWRkZigmcGFja19uYW1lLCAiJXMvcGFjay8lcyIsIG0tPm9iamVjdF9kaXIsCisJCSAgICBtLT5wYWNrX25hbWVzW3BhY2tfaW50X2lkXSk7CisKKwlwID0gYWRkX3BhY2tlZF9naXQocGFja19uYW1lLmJ1ZiwgcGFja19uYW1lLmxlbiwgbS0+bG9jYWwpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYWNrX25hbWUpOworCisJaWYgKCFwKQorCQlyZXR1cm4gMTsKKworCXAtPm11bHRpX3BhY2tfaW5kZXggPSAxOworCW0tPnBhY2tzW3BhY2tfaW50X2lkXSA9IHA7CisJaW5zdGFsbF9wYWNrZWRfZ2l0KHIsIHApOworCWxpc3RfYWRkX3RhaWwoJnAtPm1ydSwgJnItPm9iamVjdHMtPnBhY2tlZF9naXRfbXJ1KTsKKworCXJldHVybiAwOworfQorCitpbnQgYnNlYXJjaF9taWR4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sIHVpbnQzMl90ICpyZXN1bHQpCit7CisJcmV0dXJuIGJzZWFyY2hfaGFzaChvaWQtPmhhc2gsIG0tPmNodW5rX29pZF9mYW5vdXQsIG0tPmNodW5rX29pZF9sb29rdXAsCisJCQkgICAgdGhlX2hhc2hfYWxnby0+cmF3c3osIHJlc3VsdCk7Cit9CisKK3N0cnVjdCBvYmplY3RfaWQgKm50aF9taWR4ZWRfb2JqZWN0X29pZChzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAorCQkJCQl1aW50MzJfdCBuKQoreworCWlmIChuID49IG0tPm51bV9vYmplY3RzKQorCQlyZXR1cm4gTlVMTDsKKworCWhhc2hjcHkob2lkLT5oYXNoLCBtLT5jaHVua19vaWRfbG9va3VwICsgbS0+aGFzaF9sZW4gKiBuKTsKKwlyZXR1cm4gb2lkOworfQorCitzdGF0aWMgb2ZmX3QgbnRoX21pZHhlZF9vZmZzZXQoc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sIHVpbnQzMl90IHBvcykKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpvZmZzZXRfZGF0YTsKKwl1aW50MzJfdCBvZmZzZXQzMjsKKworCW9mZnNldF9kYXRhID0gbS0+Y2h1bmtfb2JqZWN0X29mZnNldHMgKyBwb3MgKiBNSURYX0NIVU5LX09GRlNFVF9XSURUSDsKKwlvZmZzZXQzMiA9IGdldF9iZTMyKG9mZnNldF9kYXRhICsgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwlpZiAobS0+Y2h1bmtfbGFyZ2Vfb2Zmc2V0cyAmJiBvZmZzZXQzMiAmIE1JRFhfTEFSR0VfT0ZGU0VUX05FRURFRCkgeworCQlpZiAoc2l6ZW9mKG9mZl90KSA8IHNpemVvZih1aW50NjRfdCkpCisJCQlkaWUoXygibXVsdGktcGFjay1pbmRleCBzdG9yZXMgYSA2NC1iaXQgb2Zmc2V0LCBidXQgb2ZmX3QgaXMgdG9vIHNtYWxsIikpOworCisJCW9mZnNldDMyIF49IE1JRFhfTEFSR0VfT0ZGU0VUX05FRURFRDsKKwkJcmV0dXJuIGdldF9iZTY0KG0tPmNodW5rX2xhcmdlX29mZnNldHMgKyBzaXplb2YodWludDY0X3QpICogb2Zmc2V0MzIpOworCX0KKworCXJldHVybiBvZmZzZXQzMjsKK30KKworc3RhdGljIHVpbnQzMl90IG50aF9taWR4ZWRfcGFja19pbnRfaWQoc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sIHVpbnQzMl90IHBvcykKK3sKKwlyZXR1cm4gZ2V0X2JlMzIobS0+Y2h1bmtfb2JqZWN0X29mZnNldHMgKyBwb3MgKiBNSURYX0NIVU5LX09GRlNFVF9XSURUSCk7Cit9CisKK3N0YXRpYyBpbnQgbnRoX21pZHhlZF9wYWNrX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkgc3RydWN0IHBhY2tfZW50cnkgKmUsCisJCQkJIHVpbnQzMl90IHBvcykKK3sKKwl1aW50MzJfdCBwYWNrX2ludF9pZDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCWlmIChwb3MgPj0gbS0+bnVtX29iamVjdHMpCisJCXJldHVybiAwOworCisJcGFja19pbnRfaWQgPSBudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIHBvcyk7CisKKwlpZiAocHJlcGFyZV9taWR4X3BhY2sociwgbSwgcGFja19pbnRfaWQpKQorCQlkaWUoXygiZXJyb3IgcHJlcGFyaW5nIHBhY2tmaWxlIGZyb20gbXVsdGktcGFjay1pbmRleCIpKTsKKwlwID0gbS0+cGFja3NbcGFja19pbnRfaWRdOworCisJLyoKKwkqIFdlIGFyZSBhYm91dCB0byB0ZWxsIHRoZSBjYWxsZXIgd2hlcmUgdGhleSBjYW4gbG9jYXRlIHRoZQorCSogcmVxdWVzdGVkIG9iamVjdC4gIFdlIGJldHRlciBtYWtlIHN1cmUgdGhlIHBhY2tmaWxlIGlzCisJKiBzdGlsbCBoZXJlIGFuZCBjYW4gYmUgYWNjZXNzZWQgYmVmb3JlIHN1cHBseWluZyB0aGF0CisJKiBhbnN3ZXIsIGFzIGl0IG1heSBoYXZlIGJlZW4gZGVsZXRlZCBzaW5jZSB0aGUgTUlEWCB3YXMKKwkqIGxvYWRlZCEKKwkqLworCWlmICghaXNfcGFja192YWxpZChwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocC0+bnVtX2JhZF9vYmplY3RzKSB7CisJCXVpbnQzMl90IGk7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQludGhfbWlkeGVkX29iamVjdF9vaWQoJm9pZCwgbSwgcG9zKTsKKwkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9iYWRfb2JqZWN0czsgaSsrKQorCQkJaWYgKGhhc2hlcShvaWQuaGFzaCwKKwkJCQkgICBwLT5iYWRfb2JqZWN0X3NoYTEgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeiAqIGkpKQorCQkJCXJldHVybiAwOworCX0KKworCWUtPm9mZnNldCA9IG50aF9taWR4ZWRfb2Zmc2V0KG0sIHBvcyk7CisJZS0+cCA9IHA7CisKKwlyZXR1cm4gMTsKK30KKworaW50IGZpbGxfbWlkeF9lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqIHIsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICBzdHJ1Y3QgcGFja19lbnRyeSAqZSwKKwkJICAgIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptKQoreworCXVpbnQzMl90IHBvczsKKworCWlmICghYnNlYXJjaF9taWR4KG9pZCwgbSwgJnBvcykpCisJCXJldHVybiAwOworCisJcmV0dXJuIG50aF9taWR4ZWRfcGFja19lbnRyeShyLCBtLCBlLCBwb3MpOworfQorCisvKiBNYXRjaCAiZm9vLmlkeCIgYWdhaW5zdCBlaXRoZXIgImZvby5wYWNrIiBfb3JfICJmb28uaWR4Ii4gKi8KK3N0YXRpYyBpbnQgY21wX2lkeF9vcl9wYWNrX25hbWUoY29uc3QgY2hhciAqaWR4X29yX3BhY2tfbmFtZSwKKwkJCQljb25zdCBjaGFyICppZHhfbmFtZSkKK3sKKwkvKiBTa2lwIHBhc3QgYW55IGluaXRpYWwgbWF0Y2hpbmcgcHJlZml4LiAqLworCXdoaWxlICgqaWR4X25hbWUgJiYgKmlkeF9uYW1lID09ICppZHhfb3JfcGFja19uYW1lKSB7CisJCWlkeF9uYW1lKys7CisJCWlkeF9vcl9wYWNrX25hbWUrKzsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRpZG4ndCBtYXRjaCBjb21wbGV0ZWx5LCB3ZSBtYXkgaGF2ZSBtYXRjaGVkICJwYWNrLTEyMzQuIiBhbmQKKwkgKiBiZSBsZWZ0IHdpdGggImlkeCIgYW5kICJwYWNrIiByZXNwZWN0aXZlbHksIHdoaWNoIGlzIGFsc28gT0suIFdlIGRvCisJICogbm90IGhhdmUgdG8gY2hlY2sgZm9yICJpZHgiIGFuZCAiaWR4IiwgYmVjYXVzZSB0aGF0IHdvdWxkIGhhdmUgYmVlbgorCSAqIGEgY29tcGxldGUgbWF0Y2ggKGFuZCBpbiB0aGF0IGNhc2UgdGhlc2Ugc3RyY21wcyB3aWxsIGJlIGZhbHNlLCBidXQKKwkgKiB3ZSdsbCBjb3JyZWN0bHkgcmV0dXJuIDAgZnJvbSB0aGUgZmluYWwgc3RyY21wKCkgYmVsb3cuCisJICoKKwkgKiBUZWNobmljYWxseSB0aGlzIG1hdGNoZXMgImZvb2lkeCIgYW5kICJmb29wYWNrIiwgYnV0IHdlJ2QgbmV2ZXIgaGF2ZQorCSAqIHN1Y2ggbmFtZXMgaW4gdGhlIGZpcnN0IHBsYWNlLgorCSAqLworCWlmICghc3RyY21wKGlkeF9uYW1lLCAiaWR4IikgJiYgIXN0cmNtcChpZHhfb3JfcGFja19uYW1lLCAicGFjayIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhpcyBub3Qgb25seSBjaGVja3MgZm9yIGEgY29tcGxldGUgbWF0Y2gsIGJ1dCBhbHNvIG9yZGVycyBiYXNlZCBvbgorCSAqIHRoZSBmaXJzdCBub24taWRlbnRpY2FsIGNoYXJhY3Rlciwgd2hpY2ggbWVhbnMgb3VyIG9yZGVyaW5nIHdpbGwKKwkgKiBtYXRjaCBhIHJhdyBzdHJjbXAoKS4gVGhhdCBtYWtlcyBpdCBPSyB0byB1c2UgdGhpcyB0byBiaW5hcnkgc2VhcmNoCisJICogYSBuYWl2ZWx5LXNvcnRlZCBsaXN0LgorCSAqLworCXJldHVybiBzdHJjbXAoaWR4X29yX3BhY2tfbmFtZSwgaWR4X25hbWUpOworfQorCitpbnQgbWlkeF9jb250YWluc19wYWNrKHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCBjb25zdCBjaGFyICppZHhfb3JfcGFja19uYW1lKQoreworCXVpbnQzMl90IGZpcnN0ID0gMCwgbGFzdCA9IG0tPm51bV9wYWNrczsKKworCXdoaWxlIChmaXJzdCA8IGxhc3QpIHsKKwkJdWludDMyX3QgbWlkID0gZmlyc3QgKyAobGFzdCAtIGZpcnN0KSAvIDI7CisJCWNvbnN0IGNoYXIgKmN1cnJlbnQ7CisJCWludCBjbXA7CisKKwkJY3VycmVudCA9IG0tPnBhY2tfbmFtZXNbbWlkXTsKKwkJY21wID0gY21wX2lkeF9vcl9wYWNrX25hbWUoaWR4X29yX3BhY2tfbmFtZSwgY3VycmVudCk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIDE7CisJCWlmIChjbXAgPiAwKSB7CisJCQlmaXJzdCA9IG1pZCArIDE7CisJCQljb250aW51ZTsKKwkJfQorCQlsYXN0ID0gbWlkOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcHJlcGFyZV9tdWx0aV9wYWNrX2luZGV4X29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgaW50IGxvY2FsKQoreworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptX3NlYXJjaDsKKwlpbnQgY29uZmlnX3ZhbHVlOworCXN0YXRpYyBpbnQgZW52X3ZhbHVlID0gLTE7CisKKwlpZiAoZW52X3ZhbHVlIDwgMCkKKwkJZW52X3ZhbHVlID0gZ2l0X2Vudl9ib29sKEdJVF9URVNUX01VTFRJX1BBQ0tfSU5ERVgsIDApOworCisJaWYgKCFlbnZfdmFsdWUgJiYKKwkgICAgKHJlcG9fY29uZmlnX2dldF9ib29sKHIsICJjb3JlLm11bHRpcGFja2luZGV4IiwgJmNvbmZpZ192YWx1ZSkgfHwKKwkgICAgIWNvbmZpZ192YWx1ZSkpCisJCXJldHVybiAwOworCisJZm9yIChtX3NlYXJjaCA9IHItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXg7IG1fc2VhcmNoOyBtX3NlYXJjaCA9IG1fc2VhcmNoLT5uZXh0KQorCQlpZiAoIXN0cmNtcChvYmplY3RfZGlyLCBtX3NlYXJjaC0+b2JqZWN0X2RpcikpCisJCQlyZXR1cm4gMTsKKworCW0gPSBsb2FkX211bHRpX3BhY2tfaW5kZXgob2JqZWN0X2RpciwgbG9jYWwpOworCisJaWYgKG0pIHsKKwkJbS0+bmV4dCA9IHItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXg7CisJCXItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXggPSBtOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNpemVfdCB3cml0ZV9taWR4X2hlYWRlcihzdHJ1Y3QgaGFzaGZpbGUgKmYsCisJCQkJdW5zaWduZWQgY2hhciBudW1fY2h1bmtzLAorCQkJCXVpbnQzMl90IG51bV9wYWNrcykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ5dGVfdmFsdWVzWzRdOworCisJaGFzaHdyaXRlX2JlMzIoZiwgTUlEWF9TSUdOQVRVUkUpOworCWJ5dGVfdmFsdWVzWzBdID0gTUlEWF9WRVJTSU9OOworCWJ5dGVfdmFsdWVzWzFdID0gTUlEWF9IQVNIX1ZFUlNJT047CisJYnl0ZV92YWx1ZXNbMl0gPSBudW1fY2h1bmtzOworCWJ5dGVfdmFsdWVzWzNdID0gMDsgLyogdW51c2VkICovCisJaGFzaHdyaXRlKGYsIGJ5dGVfdmFsdWVzLCBzaXplb2YoYnl0ZV92YWx1ZXMpKTsKKwloYXNod3JpdGVfYmUzMihmLCBudW1fcGFja3MpOworCisJcmV0dXJuIE1JRFhfSEVBREVSX1NJWkU7Cit9CisKK3N0cnVjdCBwYWNrX2luZm8geworCXVpbnQzMl90IG9yaWdfcGFja19pbnRfaWQ7CisJY2hhciAqcGFja19uYW1lOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCXVuc2lnbmVkIGV4cGlyZWQgOiAxOworfTsKKworc3RhdGljIGludCBwYWNrX2luZm9fY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IHBhY2tfaW5mbyAqYSA9IChzdHJ1Y3QgcGFja19pbmZvICopX2E7CisJc3RydWN0IHBhY2tfaW5mbyAqYiA9IChzdHJ1Y3QgcGFja19pbmZvICopX2I7CisJcmV0dXJuIHN0cmNtcChhLT5wYWNrX25hbWUsIGItPnBhY2tfbmFtZSk7Cit9CisKK3N0cnVjdCBwYWNrX2xpc3QgeworCXN0cnVjdCBwYWNrX2luZm8gKmluZm87CisJdWludDMyX3QgbnI7CisJdWludDMyX3QgYWxsb2M7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm07CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKwl1bnNpZ25lZCBwYWNrX3BhdGhzX2NoZWNrZWQ7Cit9OworCitzdGF0aWMgdm9pZCBhZGRfcGFja190b19taWR4KGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwgc2l6ZV90IGZ1bGxfcGF0aF9sZW4sCisJCQkgICAgIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpwYWNrcyA9IChzdHJ1Y3QgcGFja19saXN0ICopZGF0YTsKKworCWlmIChlbmRzX3dpdGgoZmlsZV9uYW1lLCAiLmlkeCIpKSB7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocGFja3MtPnByb2dyZXNzLCArK3BhY2tzLT5wYWNrX3BhdGhzX2NoZWNrZWQpOworCQlpZiAocGFja3MtPm0gJiYgbWlkeF9jb250YWluc19wYWNrKHBhY2tzLT5tLCBmaWxlX25hbWUpKQorCQkJcmV0dXJuOworCisJCUFMTE9DX0dST1cocGFja3MtPmluZm8sIHBhY2tzLT5uciArIDEsIHBhY2tzLT5hbGxvYyk7CisKKwkJcGFja3MtPmluZm9bcGFja3MtPm5yXS5wID0gYWRkX3BhY2tlZF9naXQoZnVsbF9wYXRoLAorCQkJCQkJCSAgZnVsbF9wYXRoX2xlbiwKKwkJCQkJCQkgIDApOworCisJCWlmICghcGFja3MtPmluZm9bcGFja3MtPm5yXS5wKSB7CisJCQl3YXJuaW5nKF8oImZhaWxlZCB0byBhZGQgcGFja2ZpbGUgJyVzJyIpLAorCQkJCWZ1bGxfcGF0aCk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAob3Blbl9wYWNrX2luZGV4KHBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucCkpIHsKKwkJCXdhcm5pbmcoXygiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIiksCisJCQkJZnVsbF9wYXRoKTsKKwkJCWNsb3NlX3BhY2socGFja3MtPmluZm9bcGFja3MtPm5yXS5wKTsKKwkJCUZSRUVfQU5EX05VTEwocGFja3MtPmluZm9bcGFja3MtPm5yXS5wKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXBhY2tzLT5pbmZvW3BhY2tzLT5ucl0ucGFja19uYW1lID0geHN0cmR1cChmaWxlX25hbWUpOworCQlwYWNrcy0+aW5mb1twYWNrcy0+bnJdLm9yaWdfcGFja19pbnRfaWQgPSBwYWNrcy0+bnI7CisJCXBhY2tzLT5pbmZvW3BhY2tzLT5ucl0uZXhwaXJlZCA9IDA7CisJCXBhY2tzLT5ucisrOworCX0KK30KKworc3RydWN0IHBhY2tfbWlkeF9lbnRyeSB7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJdWludDMyX3QgcGFja19pbnRfaWQ7CisJdGltZV90IHBhY2tfbXRpbWU7CisJdWludDY0X3Qgb2Zmc2V0OworfTsKKworc3RhdGljIGludCBtaWR4X29pZF9jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICphID0gKGNvbnN0IHN0cnVjdCBwYWNrX21pZHhfZW50cnkgKilfYTsKKwljb25zdCBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpiID0gKGNvbnN0IHN0cnVjdCBwYWNrX21pZHhfZW50cnkgKilfYjsKKwlpbnQgY21wID0gb2lkY21wKCZhLT5vaWQsICZiLT5vaWQpOworCisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKworCWlmIChhLT5wYWNrX210aW1lID4gYi0+cGFja19tdGltZSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGEtPnBhY2tfbXRpbWUgPCBiLT5wYWNrX210aW1lKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBhLT5wYWNrX2ludF9pZCAtIGItPnBhY2tfaW50X2lkOworfQorCitzdGF0aWMgaW50IG50aF9taWR4ZWRfcGFja19taWR4X2VudHJ5KHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAorCQkJCSAgICAgIHN0cnVjdCBwYWNrX21pZHhfZW50cnkgKmUsCisJCQkJICAgICAgdWludDMyX3QgcG9zKQoreworCWlmIChwb3MgPj0gbS0+bnVtX29iamVjdHMpCisJCXJldHVybiAxOworCisJbnRoX21pZHhlZF9vYmplY3Rfb2lkKCZlLT5vaWQsIG0sIHBvcyk7CisJZS0+cGFja19pbnRfaWQgPSBudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIHBvcyk7CisJZS0+b2Zmc2V0ID0gbnRoX21pZHhlZF9vZmZzZXQobSwgcG9zKTsKKworCS8qIGNvbnNpZGVyIG9iamVjdHMgaW4gbWlkeCB0byBiZSBmcm9tICJvbGQiIHBhY2tzICovCisJZS0+cGFja19tdGltZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfcGFja19lbnRyeSh1aW50MzJfdCBwYWNrX2ludF9pZCwKKwkJCSAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCSAgICB1aW50MzJfdCBjdXJfb2JqZWN0LAorCQkJICAgIHN0cnVjdCBwYWNrX21pZHhfZW50cnkgKmVudHJ5KQoreworCWlmIChudGhfcGFja2VkX29iamVjdF9pZCgmZW50cnktPm9pZCwgcCwgY3VyX29iamVjdCkgPCAwKQorCQlkaWUoXygiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiKSwgY3VyX29iamVjdCk7CisKKwllbnRyeS0+cGFja19pbnRfaWQgPSBwYWNrX2ludF9pZDsKKwllbnRyeS0+cGFja19tdGltZSA9IHAtPm10aW1lOworCisJZW50cnktPm9mZnNldCA9IG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChwLCBjdXJfb2JqZWN0KTsKK30KKworLyoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIGFydGlmaWNpYWxseSBnZXQgaW50byBhIHN0YXRlIHdoZXJlIHRoZXJlIGFyZSBtYW55CisgKiBkdXBsaWNhdGUgY29waWVzIG9mIG9iamVjdHMuIFRoYXQgY2FuIGNyZWF0ZSBoaWdoIG1lbW9yeSBwcmVzc3VyZSBpZgorICogd2UgYXJlIHRvIGNyZWF0ZSBhIGxpc3Qgb2YgYWxsIG9iamVjdHMgYmVmb3JlIGRlLWR1cGxpY2F0aW9uLiBUbyByZWR1Y2UKKyAqIHRoaXMgbWVtb3J5IHByZXNzdXJlIHdpdGhvdXQgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBkcm9wLCBhdXRvbWF0aWNhbGx5CisgKiBncm91cCBvYmplY3RzIGJ5IHRoZSBmaXJzdCBieXRlIG9mIHRoZWlyIG9iamVjdCBpZC4gVXNlIHRoZSBJRFggZmFub3V0CisgKiB0YWJsZXMgdG8gZ3JvdXAgdGhlIGRhdGEsIGNvcHkgdG8gYSBsb2NhbCBhcnJheSwgdGhlbiBzb3J0LgorICoKKyAqIENvcHkgb25seSB0aGUgZGUtZHVwbGljYXRlZCBlbnRyaWVzIChzZWxlY3RlZCBieSBtb3N0LXJlY2VudCBtb2RpZmllZCB0aW1lCisgKiBvZiBhIHBhY2tmaWxlIGNvbnRhaW5pbmcgdGhlIG9iamVjdCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpnZXRfc29ydGVkX2VudHJpZXMoc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sCisJCQkJCQkgIHN0cnVjdCBwYWNrX2luZm8gKmluZm8sCisJCQkJCQkgIHVpbnQzMl90IG5yX3BhY2tzLAorCQkJCQkJICB1aW50MzJfdCAqbnJfb2JqZWN0cykKK3sKKwl1aW50MzJfdCBjdXJfZmFub3V0LCBjdXJfcGFjaywgY3VyX29iamVjdDsKKwl1aW50MzJfdCBhbGxvY19mYW5vdXQsIGFsbG9jX29iamVjdHMsIHRvdGFsX29iamVjdHMgPSAwOworCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKmVudHJpZXNfYnlfZmFub3V0ID0gTlVMTDsKKwlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpkZWR1cGxpY2F0ZWRfZW50cmllcyA9IE5VTEw7CisJdWludDMyX3Qgc3RhcnRfcGFjayA9IG0gPyBtLT5udW1fcGFja3MgOiAwOworCisJZm9yIChjdXJfcGFjayA9IHN0YXJ0X3BhY2s7IGN1cl9wYWNrIDwgbnJfcGFja3M7IGN1cl9wYWNrKyspCisJCXRvdGFsX29iamVjdHMgKz0gaW5mb1tjdXJfcGFja10ucC0+bnVtX29iamVjdHM7CisKKwkvKgorCSAqIEFzIHdlIGRlLWR1cGxpY2F0ZSBieSBmYW5vdXQgdmFsdWUsIHdlIGV4cGVjdCB0aGUgZmFub3V0CisJICogc2xpY2VzIHRvIGJlIGV2ZW5seSBkaXN0cmlidXRlZCwgd2l0aCBzb21lIG5vaXNlLiBIZW5jZSwKKwkgKiBhbGxvY2F0ZSBzbGlnaHRseSBtb3JlIHRoYW4gb25lIDI1NnRoLgorCSAqLworCWFsbG9jX29iamVjdHMgPSBhbGxvY19mYW5vdXQgPSB0b3RhbF9vYmplY3RzID4gMzIwMCA/IHRvdGFsX29iamVjdHMgLyAyMDAgOiAxNjsKKworCUFMTE9DX0FSUkFZKGVudHJpZXNfYnlfZmFub3V0LCBhbGxvY19mYW5vdXQpOworCUFMTE9DX0FSUkFZKGRlZHVwbGljYXRlZF9lbnRyaWVzLCBhbGxvY19vYmplY3RzKTsKKwkqbnJfb2JqZWN0cyA9IDA7CisKKwlmb3IgKGN1cl9mYW5vdXQgPSAwOyBjdXJfZmFub3V0IDwgMjU2OyBjdXJfZmFub3V0KyspIHsKKwkJdWludDMyX3QgbnJfZmFub3V0ID0gMDsKKworCQlpZiAobSkgeworCQkJdWludDMyX3Qgc3RhcnQgPSAwLCBlbmQ7CisKKwkJCWlmIChjdXJfZmFub3V0KQorCQkJCXN0YXJ0ID0gbnRvaGwobS0+Y2h1bmtfb2lkX2Zhbm91dFtjdXJfZmFub3V0IC0gMV0pOworCQkJZW5kID0gbnRvaGwobS0+Y2h1bmtfb2lkX2Zhbm91dFtjdXJfZmFub3V0XSk7CisKKwkJCWZvciAoY3VyX29iamVjdCA9IHN0YXJ0OyBjdXJfb2JqZWN0IDwgZW5kOyBjdXJfb2JqZWN0KyspIHsKKwkJCQlBTExPQ19HUk9XKGVudHJpZXNfYnlfZmFub3V0LCBucl9mYW5vdXQgKyAxLCBhbGxvY19mYW5vdXQpOworCQkJCW50aF9taWR4ZWRfcGFja19taWR4X2VudHJ5KG0sCisJCQkJCQkJICAgJmVudHJpZXNfYnlfZmFub3V0W25yX2Zhbm91dF0sCisJCQkJCQkJICAgY3VyX29iamVjdCk7CisJCQkJbnJfZmFub3V0Kys7CisJCQl9CisJCX0KKworCQlmb3IgKGN1cl9wYWNrID0gc3RhcnRfcGFjazsgY3VyX3BhY2sgPCBucl9wYWNrczsgY3VyX3BhY2srKykgeworCQkJdWludDMyX3Qgc3RhcnQgPSAwLCBlbmQ7CisKKwkJCWlmIChjdXJfZmFub3V0KQorCQkJCXN0YXJ0ID0gZ2V0X3BhY2tfZmFub3V0KGluZm9bY3VyX3BhY2tdLnAsIGN1cl9mYW5vdXQgLSAxKTsKKwkJCWVuZCA9IGdldF9wYWNrX2Zhbm91dChpbmZvW2N1cl9wYWNrXS5wLCBjdXJfZmFub3V0KTsKKworCQkJZm9yIChjdXJfb2JqZWN0ID0gc3RhcnQ7IGN1cl9vYmplY3QgPCBlbmQ7IGN1cl9vYmplY3QrKykgeworCQkJCUFMTE9DX0dST1coZW50cmllc19ieV9mYW5vdXQsIG5yX2Zhbm91dCArIDEsIGFsbG9jX2Zhbm91dCk7CisJCQkJZmlsbF9wYWNrX2VudHJ5KGN1cl9wYWNrLCBpbmZvW2N1cl9wYWNrXS5wLCBjdXJfb2JqZWN0LCAmZW50cmllc19ieV9mYW5vdXRbbnJfZmFub3V0XSk7CisJCQkJbnJfZmFub3V0Kys7CisJCQl9CisJCX0KKworCQlRU09SVChlbnRyaWVzX2J5X2Zhbm91dCwgbnJfZmFub3V0LCBtaWR4X29pZF9jb21wYXJlKTsKKworCQkvKgorCQkgKiBUaGUgYmF0Y2ggaXMgbm93IHNvcnRlZCBieSBPSUQgYW5kIHRoZW4gbXRpbWUgKGRlc2NlbmRpbmcpLgorCQkgKiBUYWtlIG9ubHkgdGhlIGZpcnN0IGR1cGxpY2F0ZS4KKwkJICovCisJCWZvciAoY3VyX29iamVjdCA9IDA7IGN1cl9vYmplY3QgPCBucl9mYW5vdXQ7IGN1cl9vYmplY3QrKykgeworCQkJaWYgKGN1cl9vYmplY3QgJiYgb2lkZXEoJmVudHJpZXNfYnlfZmFub3V0W2N1cl9vYmplY3QgLSAxXS5vaWQsCisJCQkJCQkmZW50cmllc19ieV9mYW5vdXRbY3VyX29iamVjdF0ub2lkKSkKKwkJCQljb250aW51ZTsKKworCQkJQUxMT0NfR1JPVyhkZWR1cGxpY2F0ZWRfZW50cmllcywgKm5yX29iamVjdHMgKyAxLCBhbGxvY19vYmplY3RzKTsKKwkJCW1lbWNweSgmZGVkdXBsaWNhdGVkX2VudHJpZXNbKm5yX29iamVjdHNdLAorCQkJICAgICAgICZlbnRyaWVzX2J5X2Zhbm91dFtjdXJfb2JqZWN0XSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBhY2tfbWlkeF9lbnRyeSkpOworCQkJKCpucl9vYmplY3RzKSsrOworCQl9CisJfQorCisJZnJlZShlbnRyaWVzX2J5X2Zhbm91dCk7CisJcmV0dXJuIGRlZHVwbGljYXRlZF9lbnRyaWVzOworfQorCitzdGF0aWMgc2l6ZV90IHdyaXRlX21pZHhfcGFja19uYW1lcyhzdHJ1Y3QgaGFzaGZpbGUgKmYsCisJCQkJICAgIHN0cnVjdCBwYWNrX2luZm8gKmluZm8sCisJCQkJICAgIHVpbnQzMl90IG51bV9wYWNrcykKK3sKKwl1aW50MzJfdCBpOworCXVuc2lnbmVkIGNoYXIgcGFkZGluZ1tNSURYX0NIVU5LX0FMSUdOTUVOVF07CisJc2l6ZV90IHdyaXR0ZW4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWNrczsgaSsrKSB7CisJCXNpemVfdCB3cml0ZWxlbjsKKworCQlpZiAoaW5mb1tpXS5leHBpcmVkKQorCQkJY29udGludWU7CisKKwkJaWYgKGkgJiYgc3RyY21wKGluZm9baV0ucGFja19uYW1lLCBpbmZvW2kgLSAxXS5wYWNrX25hbWUpIDw9IDApCisJCQlCVUcoImluY29ycmVjdCBwYWNrLWZpbGUgb3JkZXI6ICVzIGJlZm9yZSAlcyIsCisJCQkgICAgaW5mb1tpIC0gMV0ucGFja19uYW1lLAorCQkJICAgIGluZm9baV0ucGFja19uYW1lKTsKKworCQl3cml0ZWxlbiA9IHN0cmxlbihpbmZvW2ldLnBhY2tfbmFtZSkgKyAxOworCQloYXNod3JpdGUoZiwgaW5mb1tpXS5wYWNrX25hbWUsIHdyaXRlbGVuKTsKKwkJd3JpdHRlbiArPSB3cml0ZWxlbjsKKwl9CisKKwkvKiBhZGQgcGFkZGluZyB0byBiZSBhbGlnbmVkICovCisJaSA9IE1JRFhfQ0hVTktfQUxJR05NRU5UIC0gKHdyaXR0ZW4gJSBNSURYX0NIVU5LX0FMSUdOTUVOVCk7CisJaWYgKGkgPCBNSURYX0NIVU5LX0FMSUdOTUVOVCkgeworCQltZW1zZXQocGFkZGluZywgMCwgc2l6ZW9mKHBhZGRpbmcpKTsKKwkJaGFzaHdyaXRlKGYsIHBhZGRpbmcsIGkpOworCQl3cml0dGVuICs9IGk7CisJfQorCisJcmV0dXJuIHdyaXR0ZW47Cit9CisKK3N0YXRpYyBzaXplX3Qgd3JpdGVfbWlkeF9vaWRfZmFub3V0KHN0cnVjdCBoYXNoZmlsZSAqZiwKKwkJCQkgICAgc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqb2JqZWN0cywKKwkJCQkgICAgdWludDMyX3QgbnJfb2JqZWN0cykKK3sKKwlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpsaXN0ID0gb2JqZWN0czsKKwlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpsYXN0ID0gb2JqZWN0cyArIG5yX29iamVjdHM7CisJdWludDMyX3QgY291bnQgPSAwOworCXVpbnQzMl90IGk7CisKKwkvKgorCSogV3JpdGUgdGhlIGZpcnN0LWxldmVsIHRhYmxlICh0aGUgbGlzdCBpcyBzb3J0ZWQsCisJKiBidXQgd2UgdXNlIGEgMjU2LWVudHJ5IGxvb2t1cCB0byBiZSBhYmxlIHRvIGF2b2lkCisJKiBoYXZpbmcgdG8gZG8gZWlnaHQgZXh0cmEgYmluYXJ5IHNlYXJjaCBpdGVyYXRpb25zKS4KKwkqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpuZXh0ID0gbGlzdDsKKworCQl3aGlsZSAobmV4dCA8IGxhc3QgJiYgbmV4dC0+b2lkLmhhc2hbMF0gPT0gaSkgeworCQkJY291bnQrKzsKKwkJCW5leHQrKzsKKwkJfQorCisJCWhhc2h3cml0ZV9iZTMyKGYsIGNvdW50KTsKKwkJbGlzdCA9IG5leHQ7CisJfQorCisJcmV0dXJuIE1JRFhfQ0hVTktfRkFOT1VUX1NJWkU7Cit9CisKK3N0YXRpYyBzaXplX3Qgd3JpdGVfbWlkeF9vaWRfbG9va3VwKHN0cnVjdCBoYXNoZmlsZSAqZiwgdW5zaWduZWQgY2hhciBoYXNoX2xlbiwKKwkJCQkgICAgc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqb2JqZWN0cywKKwkJCQkgICAgdWludDMyX3QgbnJfb2JqZWN0cykKK3sKKwlzdHJ1Y3QgcGFja19taWR4X2VudHJ5ICpsaXN0ID0gb2JqZWN0czsKKwl1aW50MzJfdCBpOworCXNpemVfdCB3cml0dGVuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqb2JqID0gbGlzdCsrOworCisJCWlmIChpIDwgbnJfb2JqZWN0cyAtIDEpIHsKKwkJCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm5leHQgPSBsaXN0OworCQkJaWYgKG9pZGNtcCgmb2JqLT5vaWQsICZuZXh0LT5vaWQpID49IDApCisJCQkJQlVHKCJPSURzIG5vdCBpbiBvcmRlcjogJXMgPj0gJXMiLAorCQkJCSAgICBvaWRfdG9faGV4KCZvYmotPm9pZCksCisJCQkJICAgIG9pZF90b19oZXgoJm5leHQtPm9pZCkpOworCQl9CisKKwkJaGFzaHdyaXRlKGYsIG9iai0+b2lkLmhhc2gsIChpbnQpaGFzaF9sZW4pOworCQl3cml0dGVuICs9IGhhc2hfbGVuOworCX0KKworCXJldHVybiB3cml0dGVuOworfQorCitzdGF0aWMgc2l6ZV90IHdyaXRlX21pZHhfb2JqZWN0X29mZnNldHMoc3RydWN0IGhhc2hmaWxlICpmLCBpbnQgbGFyZ2Vfb2Zmc2V0X25lZWRlZCwKKwkJCQkJdWludDMyX3QgKnBlcm0sCisJCQkJCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm9iamVjdHMsIHVpbnQzMl90IG5yX29iamVjdHMpCit7CisJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqbGlzdCA9IG9iamVjdHM7CisJdWludDMyX3QgaSwgbnJfbGFyZ2Vfb2Zmc2V0ID0gMDsKKwlzaXplX3Qgd3JpdHRlbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm9iaiA9IGxpc3QrKzsKKworCQlpZiAocGVybVtvYmotPnBhY2tfaW50X2lkXSA9PSBQQUNLX0VYUElSRUQpCisJCQlCVUcoIm9iamVjdCAlcyBpcyBpbiBhbiBleHBpcmVkIHBhY2sgd2l0aCBpbnQtaWQgJWQiLAorCQkJICAgIG9pZF90b19oZXgoJm9iai0+b2lkKSwKKwkJCSAgICBvYmotPnBhY2tfaW50X2lkKTsKKworCQloYXNod3JpdGVfYmUzMihmLCBwZXJtW29iai0+cGFja19pbnRfaWRdKTsKKworCQlpZiAobGFyZ2Vfb2Zmc2V0X25lZWRlZCAmJiBvYmotPm9mZnNldCA+PiAzMSkKKwkJCWhhc2h3cml0ZV9iZTMyKGYsIE1JRFhfTEFSR0VfT0ZGU0VUX05FRURFRCB8IG5yX2xhcmdlX29mZnNldCsrKTsKKwkJZWxzZSBpZiAoIWxhcmdlX29mZnNldF9uZWVkZWQgJiYgb2JqLT5vZmZzZXQgPj4gMzIpCisJCQlCVUcoIm9iamVjdCAlcyByZXF1aXJlcyBhIGxhcmdlIG9mZnNldCAoJSJQUkl4NjQiKSBidXQgdGhlIE1JRFggaXMgbm90IHdyaXRpbmcgbGFyZ2Ugb2Zmc2V0cyEiLAorCQkJICAgIG9pZF90b19oZXgoJm9iai0+b2lkKSwKKwkJCSAgICBvYmotPm9mZnNldCk7CisJCWVsc2UKKwkJCWhhc2h3cml0ZV9iZTMyKGYsICh1aW50MzJfdClvYmotPm9mZnNldCk7CisKKwkJd3JpdHRlbiArPSBNSURYX0NIVU5LX09GRlNFVF9XSURUSDsKKwl9CisKKwlyZXR1cm4gd3JpdHRlbjsKK30KKworc3RhdGljIHNpemVfdCB3cml0ZV9taWR4X2xhcmdlX29mZnNldHMoc3RydWN0IGhhc2hmaWxlICpmLCB1aW50MzJfdCBucl9sYXJnZV9vZmZzZXQsCisJCQkJICAgICAgIHN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm9iamVjdHMsIHVpbnQzMl90IG5yX29iamVjdHMpCit7CisJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqbGlzdCA9IG9iamVjdHMsICplbmQgPSBvYmplY3RzICsgbnJfb2JqZWN0czsKKwlzaXplX3Qgd3JpdHRlbiA9IDA7CisKKwl3aGlsZSAobnJfbGFyZ2Vfb2Zmc2V0KSB7CisJCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKm9iajsKKwkJdWludDY0X3Qgb2Zmc2V0OworCisJCWlmIChsaXN0ID49IGVuZCkKKwkJCUJVRygidG9vIG1hbnkgbGFyZ2Utb2Zmc2V0IG9iamVjdHMiKTsKKworCQlvYmogPSBsaXN0Kys7CisJCW9mZnNldCA9IG9iai0+b2Zmc2V0OworCisJCWlmICghKG9mZnNldCA+PiAzMSkpCisJCQljb250aW51ZTsKKworCQloYXNod3JpdGVfYmUzMihmLCBvZmZzZXQgPj4gMzIpOworCQloYXNod3JpdGVfYmUzMihmLCBvZmZzZXQgJiAweGZmZmZmZmZmVUwpOworCQl3cml0dGVuICs9IDIgKiBzaXplb2YodWludDMyX3QpOworCisJCW5yX2xhcmdlX29mZnNldC0tOworCX0KKworCXJldHVybiB3cml0dGVuOworfQorCitzdGF0aWMgaW50IHdyaXRlX21pZHhfaW50ZXJuYWwoY29uc3QgY2hhciAqb2JqZWN0X2Rpciwgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sCisJCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpwYWNrc190b19kcm9wLCB1bnNpZ25lZCBmbGFncykKK3sKKwl1bnNpZ25lZCBjaGFyIGN1cl9jaHVuaywgbnVtX2NodW5rcyA9IDA7CisJY2hhciAqbWlkeF9uYW1lOworCXVpbnQzMl90IGk7CisJc3RydWN0IGhhc2hmaWxlICpmID0gTlVMTDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxrOworCXN0cnVjdCBwYWNrX2xpc3QgcGFja3M7CisJdWludDMyX3QgKnBhY2tfcGVybSA9IE5VTEw7CisJdWludDY0X3Qgd3JpdHRlbiA9IDA7CisJdWludDMyX3QgY2h1bmtfaWRzW01JRFhfTUFYX0NIVU5LUyArIDFdOworCXVpbnQ2NF90IGNodW5rX29mZnNldHNbTUlEWF9NQVhfQ0hVTktTICsgMV07CisJdWludDMyX3QgbnJfZW50cmllcywgbnVtX2xhcmdlX29mZnNldHMgPSAwOworCXN0cnVjdCBwYWNrX21pZHhfZW50cnkgKmVudHJpZXMgPSBOVUxMOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCWludCBsYXJnZV9vZmZzZXRzX25lZWRlZCA9IDA7CisJaW50IHBhY2tfbmFtZV9jb25jYXRfbGVuID0gMDsKKwlpbnQgZHJvcHBlZF9wYWNrcyA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisKKwltaWR4X25hbWUgPSBnZXRfbWlkeF9maWxlbmFtZShvYmplY3RfZGlyKTsKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhtaWR4X25hbWUpKSB7CisJCVVOTEVBSyhtaWR4X25hbWUpOworCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIiksCisJCQkgIG1pZHhfbmFtZSk7CisJfQorCisJaWYgKG0pCisJCXBhY2tzLm0gPSBtOworCWVsc2UKKwkJcGFja3MubSA9IGxvYWRfbXVsdGlfcGFja19pbmRleChvYmplY3RfZGlyLCAxKTsKKworCXBhY2tzLm5yID0gMDsKKwlwYWNrcy5hbGxvYyA9IHBhY2tzLm0gPyBwYWNrcy5tLT5udW1fcGFja3MgOiAxNjsKKwlwYWNrcy5pbmZvID0gTlVMTDsKKwlBTExPQ19BUlJBWShwYWNrcy5pbmZvLCBwYWNrcy5hbGxvYyk7CisKKwlpZiAocGFja3MubSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGFja3MubS0+bnVtX3BhY2tzOyBpKyspIHsKKwkJCUFMTE9DX0dST1cocGFja3MuaW5mbywgcGFja3MubnIgKyAxLCBwYWNrcy5hbGxvYyk7CisKKwkJCXBhY2tzLmluZm9bcGFja3MubnJdLm9yaWdfcGFja19pbnRfaWQgPSBpOworCQkJcGFja3MuaW5mb1twYWNrcy5ucl0ucGFja19uYW1lID0geHN0cmR1cChwYWNrcy5tLT5wYWNrX25hbWVzW2ldKTsKKwkJCXBhY2tzLmluZm9bcGFja3MubnJdLnAgPSBOVUxMOworCQkJcGFja3MuaW5mb1twYWNrcy5ucl0uZXhwaXJlZCA9IDA7CisJCQlwYWNrcy5ucisrOworCQl9CisJfQorCisJcGFja3MucGFja19wYXRoc19jaGVja2VkID0gMDsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwYWNrcy5wcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkFkZGluZyBwYWNrZmlsZXMgdG8gbXVsdGktcGFjay1pbmRleCIpLCAwKTsKKwllbHNlCisJCXBhY2tzLnByb2dyZXNzID0gTlVMTDsKKworCWZvcl9lYWNoX2ZpbGVfaW5fcGFja19kaXIob2JqZWN0X2RpciwgYWRkX3BhY2tfdG9fbWlkeCwgJnBhY2tzKTsKKwlzdG9wX3Byb2dyZXNzKCZwYWNrcy5wcm9ncmVzcyk7CisKKwlpZiAocGFja3MubSAmJiBwYWNrcy5uciA9PSBwYWNrcy5tLT5udW1fcGFja3MgJiYgIXBhY2tzX3RvX2Ryb3ApCisJCWdvdG8gY2xlYW51cDsKKworCWVudHJpZXMgPSBnZXRfc29ydGVkX2VudHJpZXMocGFja3MubSwgcGFja3MuaW5mbywgcGFja3MubnIsICZucl9lbnRyaWVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9lbnRyaWVzOyBpKyspIHsKKwkJaWYgKGVudHJpZXNbaV0ub2Zmc2V0ID4gMHg3ZmZmZmZmZikKKwkJCW51bV9sYXJnZV9vZmZzZXRzKys7CisJCWlmIChlbnRyaWVzW2ldLm9mZnNldCA+IDB4ZmZmZmZmZmYpCisJCQlsYXJnZV9vZmZzZXRzX25lZWRlZCA9IDE7CisJfQorCisJUVNPUlQocGFja3MuaW5mbywgcGFja3MubnIsIHBhY2tfaW5mb19jb21wYXJlKTsKKworCWlmIChwYWNrc190b19kcm9wICYmIHBhY2tzX3RvX2Ryb3AtPm5yKSB7CisJCWludCBkcm9wX2luZGV4ID0gMDsKKwkJaW50IG1pc3NpbmdfZHJvcHMgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBwYWNrcy5uciAmJiBkcm9wX2luZGV4IDwgcGFja3NfdG9fZHJvcC0+bnI7IGkrKykgeworCQkJaW50IGNtcCA9IHN0cmNtcChwYWNrcy5pbmZvW2ldLnBhY2tfbmFtZSwKKwkJCQkJIHBhY2tzX3RvX2Ryb3AtPml0ZW1zW2Ryb3BfaW5kZXhdLnN0cmluZyk7CisKKwkJCWlmICghY21wKSB7CisJCQkJZHJvcF9pbmRleCsrOworCQkJCXBhY2tzLmluZm9baV0uZXhwaXJlZCA9IDE7CisJCQl9IGVsc2UgaWYgKGNtcCA+IDApIHsKKwkJCQllcnJvcihfKCJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIpLAorCQkJCSAgICAgIHBhY2tzX3RvX2Ryb3AtPml0ZW1zW2Ryb3BfaW5kZXhdLnN0cmluZyk7CisJCQkJZHJvcF9pbmRleCsrOworCQkJCW1pc3NpbmdfZHJvcHMrKzsKKwkJCQlpLS07CisJCQl9IGVsc2UgeworCQkJCXBhY2tzLmluZm9baV0uZXhwaXJlZCA9IDA7CisJCQl9CisJCX0KKworCQlpZiAobWlzc2luZ19kcm9wcykgeworCQkJcmVzdWx0ID0gMTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworCS8qCisJICogcGFja19wZXJtIHN0b3JlcyBhIHBlcm11dGF0aW9uIGJldHdlZW4gcGFjay1pbnQtaWRzIGZyb20gdGhlCisJICogcHJldmlvdXMgbXVsdGktcGFjay1pbmRleCB0byB0aGUgbmV3IG9uZSB3ZSBhcmUgd3JpdGluZzoKKwkgKgorCSAqIHBhY2tfcGVybVtvbGRfaWRdID0gbmV3X2lkCisJICovCisJQUxMT0NfQVJSQVkocGFja19wZXJtLCBwYWNrcy5ucik7CisJZm9yIChpID0gMDsgaSA8IHBhY2tzLm5yOyBpKyspIHsKKwkJaWYgKHBhY2tzLmluZm9baV0uZXhwaXJlZCkgeworCQkJZHJvcHBlZF9wYWNrcysrOworCQkJcGFja19wZXJtW3BhY2tzLmluZm9baV0ub3JpZ19wYWNrX2ludF9pZF0gPSBQQUNLX0VYUElSRUQ7CisJCX0gZWxzZSB7CisJCQlwYWNrX3Blcm1bcGFja3MuaW5mb1tpXS5vcmlnX3BhY2tfaW50X2lkXSA9IGkgLSBkcm9wcGVkX3BhY2tzOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBhY2tzLm5yOyBpKyspIHsKKwkJaWYgKCFwYWNrcy5pbmZvW2ldLmV4cGlyZWQpCisJCQlwYWNrX25hbWVfY29uY2F0X2xlbiArPSBzdHJsZW4ocGFja3MuaW5mb1tpXS5wYWNrX25hbWUpICsgMTsKKwl9CisKKwlpZiAocGFja19uYW1lX2NvbmNhdF9sZW4gJSBNSURYX0NIVU5LX0FMSUdOTUVOVCkKKwkJcGFja19uYW1lX2NvbmNhdF9sZW4gKz0gTUlEWF9DSFVOS19BTElHTk1FTlQgLQorCQkJCQkocGFja19uYW1lX2NvbmNhdF9sZW4gJSBNSURYX0NIVU5LX0FMSUdOTUVOVCk7CisKKwlob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsaywgbWlkeF9uYW1lLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJZiA9IGhhc2hmZChsay50ZW1wZmlsZS0+ZmQsIGxrLnRlbXBmaWxlLT5maWxlbmFtZS5idWYpOworCUZSRUVfQU5EX05VTEwobWlkeF9uYW1lKTsKKworCWlmIChwYWNrcy5tKQorCQljbG9zZV9taWR4KHBhY2tzLm0pOworCisJY3VyX2NodW5rID0gMDsKKwludW1fY2h1bmtzID0gbGFyZ2Vfb2Zmc2V0c19uZWVkZWQgPyA1IDogNDsKKworCXdyaXR0ZW4gPSB3cml0ZV9taWR4X2hlYWRlcihmLCBudW1fY2h1bmtzLCBwYWNrcy5uciAtIGRyb3BwZWRfcGFja3MpOworCisJY2h1bmtfaWRzW2N1cl9jaHVua10gPSBNSURYX0NIVU5LSURfUEFDS05BTUVTOworCWNodW5rX29mZnNldHNbY3VyX2NodW5rXSA9IHdyaXR0ZW4gKyAobnVtX2NodW5rcyArIDEpICogTUlEWF9DSFVOS0xPT0tVUF9XSURUSDsKKworCWN1cl9jaHVuaysrOworCWNodW5rX2lkc1tjdXJfY2h1bmtdID0gTUlEWF9DSFVOS0lEX09JREZBTk9VVDsKKwljaHVua19vZmZzZXRzW2N1cl9jaHVua10gPSBjaHVua19vZmZzZXRzW2N1cl9jaHVuayAtIDFdICsgcGFja19uYW1lX2NvbmNhdF9sZW47CisKKwljdXJfY2h1bmsrKzsKKwljaHVua19pZHNbY3VyX2NodW5rXSA9IE1JRFhfQ0hVTktJRF9PSURMT09LVVA7CisJY2h1bmtfb2Zmc2V0c1tjdXJfY2h1bmtdID0gY2h1bmtfb2Zmc2V0c1tjdXJfY2h1bmsgLSAxXSArIE1JRFhfQ0hVTktfRkFOT1VUX1NJWkU7CisKKwljdXJfY2h1bmsrKzsKKwljaHVua19pZHNbY3VyX2NodW5rXSA9IE1JRFhfQ0hVTktJRF9PQkpFQ1RPRkZTRVRTOworCWNodW5rX29mZnNldHNbY3VyX2NodW5rXSA9IGNodW5rX29mZnNldHNbY3VyX2NodW5rIC0gMV0gKyBucl9lbnRyaWVzICogdGhlX2hhc2hfYWxnby0+cmF3c3o7CisKKwljdXJfY2h1bmsrKzsKKwljaHVua19vZmZzZXRzW2N1cl9jaHVua10gPSBjaHVua19vZmZzZXRzW2N1cl9jaHVuayAtIDFdICsgbnJfZW50cmllcyAqIE1JRFhfQ0hVTktfT0ZGU0VUX1dJRFRIOworCWlmIChsYXJnZV9vZmZzZXRzX25lZWRlZCkgeworCQljaHVua19pZHNbY3VyX2NodW5rXSA9IE1JRFhfQ0hVTktJRF9MQVJHRU9GRlNFVFM7CisKKwkJY3VyX2NodW5rKys7CisJCWNodW5rX29mZnNldHNbY3VyX2NodW5rXSA9IGNodW5rX29mZnNldHNbY3VyX2NodW5rIC0gMV0gKworCQkJCQkgICBudW1fbGFyZ2Vfb2Zmc2V0cyAqIE1JRFhfQ0hVTktfTEFSR0VfT0ZGU0VUX1dJRFRIOworCX0KKworCWNodW5rX2lkc1tjdXJfY2h1bmtdID0gMDsKKworCWZvciAoaSA9IDA7IGkgPD0gbnVtX2NodW5rczsgaSsrKSB7CisJCWlmIChpICYmIGNodW5rX29mZnNldHNbaV0gPCBjaHVua19vZmZzZXRzW2kgLSAxXSkKKwkJCUJVRygiaW5jb3JyZWN0IGNodW5rIG9mZnNldHM6ICUiUFJJdTY0IiBiZWZvcmUgJSJQUkl1NjQsCisJCQkgICAgY2h1bmtfb2Zmc2V0c1tpIC0gMV0sCisJCQkgICAgY2h1bmtfb2Zmc2V0c1tpXSk7CisKKwkJaWYgKGNodW5rX29mZnNldHNbaV0gJSBNSURYX0NIVU5LX0FMSUdOTUVOVCkKKwkJCUJVRygiY2h1bmsgb2Zmc2V0ICUiUFJJdTY0IiBpcyBub3QgcHJvcGVybHkgYWxpZ25lZCIsCisJCQkgICAgY2h1bmtfb2Zmc2V0c1tpXSk7CisKKwkJaGFzaHdyaXRlX2JlMzIoZiwgY2h1bmtfaWRzW2ldKTsKKwkJaGFzaHdyaXRlX2JlMzIoZiwgY2h1bmtfb2Zmc2V0c1tpXSA+PiAzMik7CisJCWhhc2h3cml0ZV9iZTMyKGYsIGNodW5rX29mZnNldHNbaV0pOworCisJCXdyaXR0ZW4gKz0gTUlEWF9DSFVOS0xPT0tVUF9XSURUSDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIldyaXRpbmcgY2h1bmtzIHRvIG11bHRpLXBhY2staW5kZXgiKSwKKwkJCQkJICBudW1fY2h1bmtzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NodW5rczsgaSsrKSB7CisJCWlmICh3cml0dGVuICE9IGNodW5rX29mZnNldHNbaV0pCisJCQlCVUcoImluY29ycmVjdCBjaHVuayBvZmZzZXQgKCUiUFJJdTY0IiAhPSAlIlBSSXU2NCIpIGZvciBjaHVuayBpZCAlIlBSSXgzMiwKKwkJCSAgICBjaHVua19vZmZzZXRzW2ldLAorCQkJICAgIHdyaXR0ZW4sCisJCQkgICAgY2h1bmtfaWRzW2ldKTsKKworCQlzd2l0Y2ggKGNodW5rX2lkc1tpXSkgeworCQkJY2FzZSBNSURYX0NIVU5LSURfUEFDS05BTUVTOgorCQkJCXdyaXR0ZW4gKz0gd3JpdGVfbWlkeF9wYWNrX25hbWVzKGYsIHBhY2tzLmluZm8sIHBhY2tzLm5yKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNSURYX0NIVU5LSURfT0lERkFOT1VUOgorCQkJCXdyaXR0ZW4gKz0gd3JpdGVfbWlkeF9vaWRfZmFub3V0KGYsIGVudHJpZXMsIG5yX2VudHJpZXMpOworCQkJCWJyZWFrOworCisJCQljYXNlIE1JRFhfQ0hVTktJRF9PSURMT09LVVA6CisJCQkJd3JpdHRlbiArPSB3cml0ZV9taWR4X29pZF9sb29rdXAoZiwgdGhlX2hhc2hfYWxnby0+cmF3c3osIGVudHJpZXMsIG5yX2VudHJpZXMpOworCQkJCWJyZWFrOworCisJCQljYXNlIE1JRFhfQ0hVTktJRF9PQkpFQ1RPRkZTRVRTOgorCQkJCXdyaXR0ZW4gKz0gd3JpdGVfbWlkeF9vYmplY3Rfb2Zmc2V0cyhmLCBsYXJnZV9vZmZzZXRzX25lZWRlZCwgcGFja19wZXJtLCBlbnRyaWVzLCBucl9lbnRyaWVzKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNSURYX0NIVU5LSURfTEFSR0VPRkZTRVRTOgorCQkJCXdyaXR0ZW4gKz0gd3JpdGVfbWlkeF9sYXJnZV9vZmZzZXRzKGYsIG51bV9sYXJnZV9vZmZzZXRzLCBlbnRyaWVzLCBucl9lbnRyaWVzKTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlCVUcoInRyeWluZyB0byB3cml0ZSB1bmtub3duIGNodW5rIGlkICUiUFJJeDMyLAorCQkJCSAgICBjaHVua19pZHNbaV0pOworCQl9CisKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlpZiAod3JpdHRlbiAhPSBjaHVua19vZmZzZXRzW251bV9jaHVua3NdKQorCQlCVUcoImluY29ycmVjdCBmaW5hbCBvZmZzZXQgJSJQUkl1NjQiICE9ICUiUFJJdTY0LAorCQkgICAgd3JpdHRlbiwKKwkJICAgIGNodW5rX29mZnNldHNbbnVtX2NodW5rc10pOworCisJZmluYWxpemVfaGFzaGZpbGUoZiwgTlVMTCwgQ1NVTV9GU1lOQyB8IENTVU1fSEFTSF9JTl9TVFJFQU0pOworCWNvbW1pdF9sb2NrX2ZpbGUoJmxrKTsKKworY2xlYW51cDoKKwlmb3IgKGkgPSAwOyBpIDwgcGFja3MubnI7IGkrKykgeworCQlpZiAocGFja3MuaW5mb1tpXS5wKSB7CisJCQljbG9zZV9wYWNrKHBhY2tzLmluZm9baV0ucCk7CisJCQlmcmVlKHBhY2tzLmluZm9baV0ucCk7CisJCX0KKwkJZnJlZShwYWNrcy5pbmZvW2ldLnBhY2tfbmFtZSk7CisJfQorCisJZnJlZShwYWNrcy5pbmZvKTsKKwlmcmVlKGVudHJpZXMpOworCWZyZWUocGFja19wZXJtKTsKKwlmcmVlKG1pZHhfbmFtZSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHdyaXRlX21pZHhfZmlsZShjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncykKK3sKKwlyZXR1cm4gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBOVUxMLCBOVUxMLCBmbGFncyk7Cit9CisKK3ZvaWQgY2xlYXJfbWlkeF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWNoYXIgKm1pZHggPSBnZXRfbWlkeF9maWxlbmFtZShyLT5vYmplY3RzLT5vZGItPnBhdGgpOworCisJaWYgKHItPm9iamVjdHMgJiYgci0+b2JqZWN0cy0+bXVsdGlfcGFja19pbmRleCkgeworCQljbG9zZV9taWR4KHItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXgpOworCQlyLT5vYmplY3RzLT5tdWx0aV9wYWNrX2luZGV4ID0gTlVMTDsKKwl9CisKKwlpZiAocmVtb3ZlX3BhdGgobWlkeCkpIHsKKwkJVU5MRUFLKG1pZHgpOworCQlkaWUoXygiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiKSwgbWlkeCk7CisJfQorCisJZnJlZShtaWR4KTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfbWlkeF9lcnJvcjsKKworc3RhdGljIHZvaWQgbWlkeF9yZXBvcnQoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2ZXJpZnlfbWlkeF9lcnJvciA9IDE7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKK30KKworc3RydWN0IHBhaXJfcG9zX3ZzX2lkCit7CisJdWludDMyX3QgcG9zOworCXVpbnQzMl90IHBhY2tfaW50X2lkOworfTsKKworc3RhdGljIGludCBjb21wYXJlX3BhaXJfcG9zX3ZzX2lkKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgcGFpcl9wb3NfdnNfaWQgKmEgPSAoc3RydWN0IHBhaXJfcG9zX3ZzX2lkICopX2E7CisJc3RydWN0IHBhaXJfcG9zX3ZzX2lkICpiID0gKHN0cnVjdCBwYWlyX3Bvc192c19pZCAqKV9iOworCisJcmV0dXJuIGItPnBhY2tfaW50X2lkIC0gYS0+cGFja19pbnRfaWQ7Cit9CisKKy8qCisgKiBMaW1pdCBjYWxscyB0byBkaXNwbGF5X3Byb2dyZXNzKCkgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisgKiBUaGUgaW50ZXJ2YWwgaGVyZSB3YXMgYXJiaXRyYXJpbHkgY2hvc2VuLgorICovCisjZGVmaW5lIFNQQVJTRV9QUk9HUkVTU19JTlRFUlZBTCAoMSA8PCAxMikKKyNkZWZpbmUgbWlkeF9kaXNwbGF5X3NwYXJzZV9wcm9ncmVzcyhwcm9ncmVzcywgbikgXAorCWRvIHsgXAorCQl1aW50NjRfdCBfbiA9IChuKTsgXAorCQlpZiAoKF9uICYgKFNQQVJTRV9QUk9HUkVTU19JTlRFUlZBTCAtIDEpKSA9PSAwKSBcCisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBfbik7IFwKKwl9IHdoaWxlICgwKQorCitpbnQgdmVyaWZ5X21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHBhaXJfcG9zX3ZzX2lkICpwYWlycyA9IE5VTEw7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSA9IGxvYWRfbXVsdGlfcGFja19pbmRleChvYmplY3RfZGlyLCAxKTsKKwl2ZXJpZnlfbWlkeF9lcnJvciA9IDA7CisKKwlpZiAoIW0pCisJCXJldHVybiAwOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIpLAorCQkJCQkgIG0tPm51bV9wYWNrcyk7CisJZm9yIChpID0gMDsgaSA8IG0tPm51bV9wYWNrczsgaSsrKSB7CisJCWlmIChwcmVwYXJlX21pZHhfcGFjayhyLCBtLCBpKSkKKwkJCW1pZHhfcmVwb3J0KCJmYWlsZWQgdG8gbG9hZCBwYWNrIGluIHBvc2l0aW9uICVkIiwgaSk7CisKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKKwkJdWludDMyX3Qgb2lkX2Zhbm91dDEgPSBudG9obChtLT5jaHVua19vaWRfZmFub3V0W2ldKTsKKwkJdWludDMyX3Qgb2lkX2Zhbm91dDIgPSBudG9obChtLT5jaHVua19vaWRfZmFub3V0W2kgKyAxXSk7CisKKwkJaWYgKG9pZF9mYW5vdXQxID4gb2lkX2Zhbm91dDIpCisJCQltaWR4X3JlcG9ydChfKCJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICUiUFJJeDMyIiA+ICUiUFJJeDMyIiA9IGZhbm91dFslZF0iKSwKKwkJCQkgICAgaSwgb2lkX2Zhbm91dDEsIG9pZF9mYW5vdXQyLCBpICsgMSk7CisJfQorCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9zcGFyc2VfcHJvZ3Jlc3MoXygiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IiksCisJCQkJCQkgbS0+bnVtX29iamVjdHMgLSAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX29iamVjdHMgLSAxOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQxLCBvaWQyOworCisJCW50aF9taWR4ZWRfb2JqZWN0X29pZCgmb2lkMSwgbSwgaSk7CisJCW50aF9taWR4ZWRfb2JqZWN0X29pZCgmb2lkMiwgbSwgaSArIDEpOworCisJCWlmIChvaWRjbXAoJm9pZDEsICZvaWQyKSA+PSAwKQorCQkJbWlkeF9yZXBvcnQoXygib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iKSwKKwkJCQkgICAgaSwgb2lkX3RvX2hleCgmb2lkMSksIG9pZF90b19oZXgoJm9pZDIpLCBpICsgMSk7CisKKwkJbWlkeF9kaXNwbGF5X3NwYXJzZV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwkvKgorCSAqIENyZWF0ZSBhbiBhcnJheSBtYXBwaW5nIGVhY2ggb2JqZWN0IHRvIGl0cyBwYWNrZmlsZSBpZC4gIFNvcnQgaXQKKwkgKiB0byBncm91cCB0aGUgb2JqZWN0cyBieSBwYWNrZmlsZS4gIFVzZSB0aGlzIHBlcm11dGF0aW9uIHRvIHZpc2l0CisJICogZWFjaCBvZiB0aGUgb2JqZWN0cyBhbmQgb25seSByZXF1aXJlIDEgcGFja2ZpbGUgdG8gYmUgb3BlbiBhdCBhCisJICogdGltZS4KKwkgKi8KKwlBTExPQ19BUlJBWShwYWlycywgbS0+bnVtX29iamVjdHMpOworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCXBhaXJzW2ldLnBvcyA9IGk7CisJCXBhaXJzW2ldLnBhY2tfaW50X2lkID0gbnRoX21pZHhlZF9wYWNrX2ludF9pZChtLCBpKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiKSwKKwkJCQkJCSBtLT5udW1fb2JqZWN0cyk7CisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgMCk7IC8qIFRPRE86IE1lYXN1cmUgUVNPUlQoKSBwcm9ncmVzcyAqLworCVFTT1JUKHBhaXJzLCBtLT5udW1fb2JqZWN0cywgY29tcGFyZV9wYWlyX3Bvc192c19pZCk7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9zcGFyc2VfcHJvZ3Jlc3MoXygiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIiksIG0tPm51bV9vYmplY3RzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IHBhY2tfZW50cnkgZTsKKwkJb2ZmX3QgbV9vZmZzZXQsIHBfb2Zmc2V0OworCisJCWlmIChpID4gMCAmJiBwYWlyc1tpLTFdLnBhY2tfaW50X2lkICE9IHBhaXJzW2ldLnBhY2tfaW50X2lkICYmCisJCSAgICBtLT5wYWNrc1twYWlyc1tpLTFdLnBhY2tfaW50X2lkXSkKKwkJeworCQkJY2xvc2VfcGFja19mZChtLT5wYWNrc1twYWlyc1tpLTFdLnBhY2tfaW50X2lkXSk7CisJCQljbG9zZV9wYWNrX2luZGV4KG0tPnBhY2tzW3BhaXJzW2ktMV0ucGFja19pbnRfaWRdKTsKKwkJfQorCisJCW50aF9taWR4ZWRfb2JqZWN0X29pZCgmb2lkLCBtLCBwYWlyc1tpXS5wb3MpOworCisJCWlmICghZmlsbF9taWR4X2VudHJ5KHIsICZvaWQsICZlLCBtKSkgeworCQkJbWlkeF9yZXBvcnQoXygiZmFpbGVkIHRvIGxvYWQgcGFjayBlbnRyeSBmb3Igb2lkWyVkXSA9ICVzIiksCisJCQkJICAgIHBhaXJzW2ldLnBvcywgb2lkX3RvX2hleCgmb2lkKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChvcGVuX3BhY2tfaW5kZXgoZS5wKSkgeworCQkJbWlkeF9yZXBvcnQoXygiZmFpbGVkIHRvIGxvYWQgcGFjay1pbmRleCBmb3IgcGFja2ZpbGUgJXMiKSwKKwkJCQkgICAgZS5wLT5wYWNrX25hbWUpOworCQkJYnJlYWs7CisJCX0KKworCQltX29mZnNldCA9IGUub2Zmc2V0OworCQlwX29mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUob2lkLmhhc2gsIGUucCk7CisKKwkJaWYgKG1fb2Zmc2V0ICE9IHBfb2Zmc2V0KQorCQkJbWlkeF9yZXBvcnQoXygiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJSJQUkl4NjQiICE9ICUiUFJJeDY0KSwKKwkJCQkgICAgcGFpcnNbaV0ucG9zLCBvaWRfdG9faGV4KCZvaWQpLCBtX29mZnNldCwgcF9vZmZzZXQpOworCisJCW1pZHhfZGlzcGxheV9zcGFyc2VfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJZnJlZShwYWlycyk7CisKKwlyZXR1cm4gdmVyaWZ5X21pZHhfZXJyb3I7Cit9CisKK2ludCBleHBpcmVfbWlkeF9wYWNrcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpCit7CisJdWludDMyX3QgaSwgKmNvdW50LCByZXN1bHQgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBwYWNrc190b19kcm9wID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0gPSBsb2FkX211bHRpX3BhY2tfaW5kZXgob2JqZWN0X2RpciwgMSk7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisKKwlpZiAoIW0pCisJCXJldHVybiAwOworCisJY291bnQgPSB4Y2FsbG9jKG0tPm51bV9wYWNrcywgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkNvdW50aW5nIHJlZmVyZW5jZWQgb2JqZWN0cyIpLAorCQkJCQkgIG0tPm51bV9vYmplY3RzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX29iamVjdHM7IGkrKykgeworCQlpbnQgcGFja19pbnRfaWQgPSBudGhfbWlkeGVkX3BhY2tfaW50X2lkKG0sIGkpOworCQljb3VudFtwYWNrX2ludF9pZF0rKzsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkZpbmRpbmcgYW5kIGRlbGV0aW5nIHVucmVmZXJlbmNlZCBwYWNrZmlsZXMiKSwKKwkJCQkJICBtLT5udW1fcGFja3MpOworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykgeworCQljaGFyICpwYWNrX25hbWU7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKKworCQlpZiAoY291bnRbaV0pCisJCQljb250aW51ZTsKKworCQlpZiAocHJlcGFyZV9taWR4X3BhY2sociwgbSwgaSkpCisJCQljb250aW51ZTsKKworCQlpZiAobS0+cGFja3NbaV0tPnBhY2tfa2VlcCkKKwkJCWNvbnRpbnVlOworCisJCXBhY2tfbmFtZSA9IHhzdHJkdXAobS0+cGFja3NbaV0tPnBhY2tfbmFtZSk7CisJCWNsb3NlX3BhY2sobS0+cGFja3NbaV0pOworCisJCXN0cmluZ19saXN0X2luc2VydCgmcGFja3NfdG9fZHJvcCwgbS0+cGFja19uYW1lc1tpXSk7CisJCXVubGlua19wYWNrX3BhdGgocGFja19uYW1lLCAwKTsKKwkJZnJlZShwYWNrX25hbWUpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlmcmVlKGNvdW50KTsKKworCWlmIChwYWNrc190b19kcm9wLm5yKQorCQlyZXN1bHQgPSB3cml0ZV9taWR4X2ludGVybmFsKG9iamVjdF9kaXIsIG0sICZwYWNrc190b19kcm9wLCBmbGFncyk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmcGFja3NfdG9fZHJvcCwgMCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IHJlcGFja19pbmZvIHsKKwl0aW1lc3RhbXBfdCBtdGltZTsKKwl1aW50MzJfdCByZWZlcmVuY2VkX29iamVjdHM7CisJdWludDMyX3QgcGFja19pbnRfaWQ7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfYnlfbXRpbWUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCByZXBhY2tfaW5mbyAqYSwgKmI7CisKKwlhID0gKGNvbnN0IHN0cnVjdCByZXBhY2tfaW5mbyAqKWFfOworCWIgPSAoY29uc3Qgc3RydWN0IHJlcGFja19pbmZvICopYl87CisKKwlpZiAoYS0+bXRpbWUgPCBiLT5tdGltZSkKKwkJcmV0dXJuIC0xOworCWlmIChhLT5tdGltZSA+IGItPm10aW1lKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxsX2luY2x1ZGVkX3BhY2tzX2FsbChzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkgICB1bnNpZ25lZCBjaGFyICppbmNsdWRlX3BhY2spCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykKKwkJaW5jbHVkZV9wYWNrW2ldID0gMTsKKworCXJldHVybiBtLT5udW1fcGFja3MgPCAyOworfQorCitzdGF0aWMgaW50IGZpbGxfaW5jbHVkZWRfcGFja3NfYmF0Y2goc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmluY2x1ZGVfcGFjaywKKwkJCQkgICAgIHNpemVfdCBiYXRjaF9zaXplKQoreworCXVpbnQzMl90IGksIHBhY2tzX3RvX3JlcGFjazsKKwlzaXplX3QgdG90YWxfc2l6ZTsKKwlzdHJ1Y3QgcmVwYWNrX2luZm8gKnBhY2tfaW5mbyA9IHhjYWxsb2MobS0+bnVtX3BhY2tzLCBzaXplb2Yoc3RydWN0IHJlcGFja19pbmZvKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKKwkJcGFja19pbmZvW2ldLnBhY2tfaW50X2lkID0gaTsKKworCQlpZiAocHJlcGFyZV9taWR4X3BhY2sociwgbSwgaSkpCisJCQljb250aW51ZTsKKworCQlwYWNrX2luZm9baV0ubXRpbWUgPSBtLT5wYWNrc1tpXS0+bXRpbWU7CisJfQorCisJZm9yIChpID0gMDsgYmF0Y2hfc2l6ZSAmJiBpIDwgbS0+bnVtX29iamVjdHM7IGkrKykgeworCQl1aW50MzJfdCBwYWNrX2ludF9pZCA9IG50aF9taWR4ZWRfcGFja19pbnRfaWQobSwgaSk7CisJCXBhY2tfaW5mb1twYWNrX2ludF9pZF0ucmVmZXJlbmNlZF9vYmplY3RzKys7CisJfQorCisJUVNPUlQocGFja19pbmZvLCBtLT5udW1fcGFja3MsIGNvbXBhcmVfYnlfbXRpbWUpOworCisJdG90YWxfc2l6ZSA9IDA7CisJcGFja3NfdG9fcmVwYWNrID0gMDsKKwlmb3IgKGkgPSAwOyB0b3RhbF9zaXplIDwgYmF0Y2hfc2l6ZSAmJiBpIDwgbS0+bnVtX3BhY2tzOyBpKyspIHsKKwkJaW50IHBhY2tfaW50X2lkID0gcGFja19pbmZvW2ldLnBhY2tfaW50X2lkOworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IG0tPnBhY2tzW3BhY2tfaW50X2lkXTsKKwkJc2l6ZV90IGV4cGVjdGVkX3NpemU7CisKKwkJaWYgKCFwKQorCQkJY29udGludWU7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkgfHwgIXAtPm51bV9vYmplY3RzKQorCQkJY29udGludWU7CisKKwkJZXhwZWN0ZWRfc2l6ZSA9IChzaXplX3QpKHAtPnBhY2tfc2l6ZQorCQkJCQkgKiBwYWNrX2luZm9baV0ucmVmZXJlbmNlZF9vYmplY3RzKTsKKwkJZXhwZWN0ZWRfc2l6ZSAvPSBwLT5udW1fb2JqZWN0czsKKworCQlpZiAoZXhwZWN0ZWRfc2l6ZSA+PSBiYXRjaF9zaXplKQorCQkJY29udGludWU7CisKKwkJcGFja3NfdG9fcmVwYWNrKys7CisJCXRvdGFsX3NpemUgKz0gZXhwZWN0ZWRfc2l6ZTsKKwkJaW5jbHVkZV9wYWNrW3BhY2tfaW50X2lkXSA9IDE7CisJfQorCisJZnJlZShwYWNrX2luZm8pOworCisJaWYgKHRvdGFsX3NpemUgPCBiYXRjaF9zaXplIHx8IHBhY2tzX3RvX3JlcGFjayA8IDIpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaWR4X3JlcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2Rpciwgc2l6ZV90IGJhdGNoX3NpemUsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXN1bHQgPSAwOworCXVpbnQzMl90IGk7CisJdW5zaWduZWQgY2hhciAqaW5jbHVkZV9wYWNrOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2VfbmFtZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptID0gbG9hZF9tdWx0aV9wYWNrX2luZGV4KG9iamVjdF9kaXIsIDEpOworCisJaWYgKCFtKQorCQlyZXR1cm4gMDsKKworCWluY2x1ZGVfcGFjayA9IHhjYWxsb2MobS0+bnVtX3BhY2tzLCBzaXplb2YodW5zaWduZWQgY2hhcikpOworCisJaWYgKGJhdGNoX3NpemUpIHsKKwkJaWYgKGZpbGxfaW5jbHVkZWRfcGFja3NfYmF0Y2gociwgbSwgaW5jbHVkZV9wYWNrLCBiYXRjaF9zaXplKSkKKwkJCWdvdG8gY2xlYW51cDsKKwl9IGVsc2UgaWYgKGZpbGxfaW5jbHVkZWRfcGFja3NfYWxsKG0sIGluY2x1ZGVfcGFjaykpCisJCWdvdG8gY2xlYW51cDsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICJwYWNrLW9iamVjdHMiKTsKKworCXN0cmJ1Zl9hZGRzdHIoJmJhc2VfbmFtZSwgb2JqZWN0X2Rpcik7CisJc3RyYnVmX2FkZHN0cigmYmFzZV9uYW1lLCAiL3BhY2svcGFjayIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGJhc2VfbmFtZS5idWYpOworCisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tcHJvZ3Jlc3MiKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItcSIpOworCisJc3RyYnVmX3JlbGVhc2UoJmJhc2VfbmFtZSk7CisKKwljbWQuZ2l0X2NtZCA9IDE7CisJY21kLmluID0gY21kLm91dCA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpIHsKKwkJZXJyb3IoXygiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIpKTsKKwkJcmVzdWx0ID0gMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQl1aW50MzJfdCBwYWNrX2ludF9pZCA9IG50aF9taWR4ZWRfcGFja19pbnRfaWQobSwgaSk7CisKKwkJaWYgKCFpbmNsdWRlX3BhY2tbcGFja19pbnRfaWRdKQorCQkJY29udGludWU7CisKKwkJbnRoX21pZHhlZF9vYmplY3Rfb2lkKCZvaWQsIG0sIGkpOworCQl4d3JpdGUoY21kLmluLCBvaWRfdG9faGV4KCZvaWQpLCB0aGVfaGFzaF9hbGdvLT5oZXhzeik7CisJCXh3cml0ZShjbWQuaW4sICJcbiIsIDEpOworCX0KKwljbG9zZShjbWQuaW4pOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjbWQpKSB7CisJCWVycm9yKF8oImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIikpOworCQlyZXN1bHQgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCBOVUxMLCBmbGFncyk7CisJbSA9IE5VTEw7CisKK2NsZWFudXA6CisJaWYgKG0pCisJCWNsb3NlX21pZHgobSk7CisJZnJlZShpbmNsdWRlX3BhY2spOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9taWR4LmggYi9taWR4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmYTM1NgotLS0gL2Rldi9udWxsCisrKyBiL21pZHguaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIE1JRFhfSAorI2RlZmluZSBNSURYX0gKKworI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKworc3RydWN0IG9iamVjdF9pZDsKK3N0cnVjdCBwYWNrX2VudHJ5Oworc3RydWN0IHJlcG9zaXRvcnk7CisKKyNkZWZpbmUgR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWCAiR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWCIKKworc3RydWN0IG11bHRpX3BhY2tfaW5kZXggeworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICpuZXh0OworCisJaW50IGZkOworCisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YTsKKwlzaXplX3QgZGF0YV9sZW47CisKKwl1aW50MzJfdCBzaWduYXR1cmU7CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uOworCXVuc2lnbmVkIGNoYXIgaGFzaF9sZW47CisJdW5zaWduZWQgY2hhciBudW1fY2h1bmtzOworCXVpbnQzMl90IG51bV9wYWNrczsKKwl1aW50MzJfdCBudW1fb2JqZWN0czsKKworCWludCBsb2NhbDsKKworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNodW5rX3BhY2tfbmFtZXM7CisJY29uc3QgdWludDMyX3QgKmNodW5rX29pZF9mYW5vdXQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY2h1bmtfb2lkX2xvb2t1cDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjaHVua19vYmplY3Rfb2Zmc2V0czsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjaHVua19sYXJnZV9vZmZzZXRzOworCisJY29uc3QgY2hhciAqKnBhY2tfbmFtZXM7CisJc3RydWN0IHBhY2tlZF9naXQgKipwYWNrczsKKwljaGFyIG9iamVjdF9kaXJbRkxFWF9BUlJBWV07Cit9OworCisjZGVmaW5lIE1JRFhfUFJPR1JFU1MgICAgICgxIDw8IDApCisKK3N0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICpsb2FkX211bHRpX3BhY2tfaW5kZXgoY29uc3QgY2hhciAqb2JqZWN0X2RpciwgaW50IGxvY2FsKTsKK2ludCBwcmVwYXJlX21pZHhfcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sIHVpbnQzMl90IHBhY2tfaW50X2lkKTsKK2ludCBic2VhcmNoX21pZHgoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwgdWludDMyX3QgKnJlc3VsdCk7CitzdHJ1Y3Qgb2JqZWN0X2lkICpudGhfbWlkeGVkX29iamVjdF9vaWQoc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKKwkJCQkJdWludDMyX3Qgbik7CitpbnQgZmlsbF9taWR4X2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBwYWNrX2VudHJ5ICplLCBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSk7CitpbnQgbWlkeF9jb250YWluc19wYWNrKHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCBjb25zdCBjaGFyICppZHhfb3JfcGFja19uYW1lKTsKK2ludCBwcmVwYXJlX211bHRpX3BhY2tfaW5kZXhfb25lKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBpbnQgbG9jYWwpOworCitpbnQgd3JpdGVfbWlkeF9maWxlKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKTsKK3ZvaWQgY2xlYXJfbWlkeF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK2ludCB2ZXJpZnlfbWlkeF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncyk7CitpbnQgZXhwaXJlX21pZHhfcGFja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKTsKK2ludCBtaWR4X3JlcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2Rpciwgc2l6ZV90IGJhdGNoX3NpemUsIHVuc2lnbmVkIGZsYWdzKTsKKwordm9pZCBjbG9zZV9taWR4KHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uYW1lLWhhc2guYyBiL25hbWUtaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTI2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9uYW1lLWhhc2guYwpAQCAtMCwwICsxLDczMSBAQAorLyoKKyAqIG5hbWUtaGFzaC5jCisgKgorICogSGFzaGluZyBuYW1lcyBpbiB0aGUgaW5kZXggc3RhdGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTGludXMgVG9ydmFsZHMKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisKK3N0cnVjdCBkaXJfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpwYXJlbnQ7CisJaW50IG5yOworCXVuc2lnbmVkIGludCBuYW1lbGVuOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgZGlyX2VudHJ5X2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVwdHIsCisJCQkgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSBjb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKmUxLCAqZTI7CisJY29uc3QgY2hhciAqbmFtZSA9IGtleWRhdGE7CisKKwllMSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5LCBlbnQpOworCWUyID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IGRpcl9lbnRyeSwgZW50KTsKKworCXJldHVybiBlMS0+bmFtZWxlbiAhPSBlMi0+bmFtZWxlbiB8fCBzdHJuY2FzZWNtcChlMS0+bmFtZSwKKwkJCW5hbWUgPyBuYW1lIDogZTItPm5hbWUsIGUxLT5uYW1lbGVuKTsKK30KKworc3RhdGljIHN0cnVjdCBkaXJfZW50cnkgKmZpbmRfZGlyX2VudHJ5X19oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQljb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZWxlbiwgdW5zaWduZWQgaW50IGhhc2gpCit7CisJc3RydWN0IGRpcl9lbnRyeSBrZXk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZrZXkuZW50LCBoYXNoKTsKKwlrZXkubmFtZWxlbiA9IG5hbWVsZW47CisJcmV0dXJuIGhhc2htYXBfZ2V0X2VudHJ5KCZpc3RhdGUtPmRpcl9oYXNoLCAma2V5LCBlbnQsIG5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IGRpcl9lbnRyeSAqZmluZF9kaXJfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lbGVuKQoreworCXJldHVybiBmaW5kX2Rpcl9lbnRyeV9faGFzaChpc3RhdGUsIG5hbWUsIG5hbWVsZW4sIG1lbWloYXNoKG5hbWUsIG5hbWVsZW4pKTsKK30KKworc3RhdGljIHN0cnVjdCBkaXJfZW50cnkgKmhhc2hfZGlyX2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgbmFtZWxlbikKK3sKKwkvKgorCSAqIFRocm93IGVhY2ggZGlyZWN0b3J5IGNvbXBvbmVudCBpbiB0aGUgaGFzaCBmb3IgcXVpY2sgbG9va3VwCisJICogZHVyaW5nIGEgZ2l0IHN0YXR1cy4gRGlyZWN0b3J5IGNvbXBvbmVudHMgYXJlIHN0b3JlZCB3aXRob3V0IHRoZWlyCisJICogY2xvc2luZyBzbGFzaC4gIERlc3BpdGUgc3VibW9kdWxlcyBiZWluZyBhIGRpcmVjdG9yeSwgdGhleSBuZXZlcgorCSAqIHJlYWNoIHRoaXMgcG9pbnQsIGJlY2F1c2UgdGhleSBhcmUgc3RvcmVkCisJICogaW4gaW5kZXhfc3RhdGUubmFtZV9oYXNoIChhcyBvcmRpbmFyeSBjYWNoZV9lbnRyaWVzKS4KKwkgKi8KKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkaXI7CisKKwkvKiBnZXQgbGVuZ3RoIG9mIHBhcmVudCBkaXJlY3RvcnkgKi8KKwl3aGlsZSAobmFtZWxlbiA+IDAgJiYgIWlzX2Rpcl9zZXAoY2UtPm5hbWVbbmFtZWxlbiAtIDFdKSkKKwkJbmFtZWxlbi0tOworCWlmIChuYW1lbGVuIDw9IDApCisJCXJldHVybiBOVUxMOworCW5hbWVsZW4tLTsKKworCS8qIGxvb2t1cCBleGlzdGluZyBlbnRyeSBmb3IgdGhhdCBkaXJlY3RvcnkgKi8KKwlkaXIgPSBmaW5kX2Rpcl9lbnRyeShpc3RhdGUsIGNlLT5uYW1lLCBuYW1lbGVuKTsKKwlpZiAoIWRpcikgeworCQkvKiBub3QgZm91bmQsIGNyZWF0ZSBpdCBhbmQgYWRkIHRvIGhhc2ggdGFibGUgKi8KKwkJRkxFWF9BTExPQ19NRU0oZGlyLCBuYW1lLCBjZS0+bmFtZSwgbmFtZWxlbik7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmZGlyLT5lbnQsIG1lbWloYXNoKGNlLT5uYW1lLCBuYW1lbGVuKSk7CisJCWRpci0+bmFtZWxlbiA9IG5hbWVsZW47CisJCWhhc2htYXBfYWRkKCZpc3RhdGUtPmRpcl9oYXNoLCAmZGlyLT5lbnQpOworCisJCS8qIHJlY3Vyc2l2ZWx5IGFkZCBtaXNzaW5nIHBhcmVudCBkaXJlY3RvcmllcyAqLworCQlkaXItPnBhcmVudCA9IGhhc2hfZGlyX2VudHJ5KGlzdGF0ZSwgY2UsIG5hbWVsZW4pOworCX0KKwlyZXR1cm4gZGlyOworfQorCitzdGF0aWMgdm9pZCBhZGRfZGlyX2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCS8qIEFkZCByZWZlcmVuY2UgdG8gdGhlIGRpcmVjdG9yeSBlbnRyeSAoYW5kIHBhcmVudHMgaWYgMCkuICovCisJc3RydWN0IGRpcl9lbnRyeSAqZGlyID0gaGFzaF9kaXJfZW50cnkoaXN0YXRlLCBjZSwgY2VfbmFtZWxlbihjZSkpOworCXdoaWxlIChkaXIgJiYgIShkaXItPm5yKyspKQorCQlkaXIgPSBkaXItPnBhcmVudDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2Rpcl9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwkvKgorCSAqIFJlbGVhc2UgcmVmZXJlbmNlIHRvIHRoZSBkaXJlY3RvcnkgZW50cnkuIElmIDAsIHJlbW92ZSBhbmQgY29udGludWUKKwkgKiB3aXRoIHBhcmVudCBkaXJlY3RvcnkuCisJICovCisJc3RydWN0IGRpcl9lbnRyeSAqZGlyID0gaGFzaF9kaXJfZW50cnkoaXN0YXRlLCBjZSwgY2VfbmFtZWxlbihjZSkpOworCXdoaWxlIChkaXIgJiYgISgtLWRpci0+bnIpKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKnBhcmVudCA9IGRpci0+cGFyZW50OworCQloYXNobWFwX3JlbW92ZSgmaXN0YXRlLT5kaXJfaGFzaCwgJmRpci0+ZW50LCBOVUxMKTsKKwkJZnJlZShkaXIpOworCQlkaXIgPSBwYXJlbnQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYXNoX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9IQVNIRUQpCisJCXJldHVybjsKKwljZS0+Y2VfZmxhZ3MgfD0gQ0VfSEFTSEVEOworCWhhc2htYXBfZW50cnlfaW5pdCgmY2UtPmVudCwgbWVtaWhhc2goY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSk7CisJaGFzaG1hcF9hZGQoJmlzdGF0ZS0+bmFtZV9oYXNoLCAmY2UtPmVudCk7CisKKwlpZiAoaWdub3JlX2Nhc2UpCisJCWFkZF9kaXJfZW50cnkoaXN0YXRlLCBjZSk7Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVfZW50cnlfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgIGNvbnN0IHZvaWQgKnJlbW92ZSkKK3sKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlMSwgKmNlMjsKKworCWNlMSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnksIGVudCk7CisJY2UyID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5LCBlbnQpOworCisJLyoKKwkgKiBGb3IgcmVtb3ZlX25hbWVfaGFzaCwgZmluZCB0aGUgZXhhY3QgZW50cnkgKHBvaW50ZXIgZXF1YWxpdHkpOyBmb3IKKwkgKiBpbmRleF9maWxlX2V4aXN0cywgZmluZCBhbGwgZW50cmllcyB3aXRoIG1hdGNoaW5nIGhhc2ggY29kZSBhbmQKKwkgKiBkZWNpZGUgd2hldGhlciB0aGUgZW50cnkgbWF0Y2hlcyBpbiBzYW1lX25hbWUuCisJICovCisJcmV0dXJuIHJlbW92ZSA/ICEoY2UxID09IGNlMikgOiAwOworfQorCitzdGF0aWMgaW50IGxhenlfdHJ5X3RocmVhZGVkID0gMTsKK3N0YXRpYyBpbnQgbGF6eV9ucl9kaXJfdGhyZWFkczsKKworLyoKKyAqIFNldCBhIG1pbmltdW0gbnVtYmVyIG9mIGNhY2hlX2VudHJpZXMgdGhhdCB3ZSB3aWxsIGhhbmRsZSBwZXIKKyAqIHRocmVhZCBhbmQgdXNlIHRoYXQgdG8gZGVjaWRlIGhvdyBtYW55IHRocmVhZHMgdG8gcnVuICh1cCB0bworICogdGhlIG51bWJlciBvbiB0aGUgc3lzdGVtKS4KKyAqCisgKiBGb3IgZ3VpZGFuY2Ugc2V0dGluZyB0aGUgbG93ZXIgcGVyLXRocmVhZCBib3VuZCwgc2VlOgorICogICAgIHQvaGVscGVyL3Rlc3QtbGF6eS1pbml0LW5hbWUtaGFzaCAtLWFuYWx5emUKKyAqLworI2RlZmluZSBMQVpZX1RIUkVBRF9DT1NUICgyMDAwKQorCisvKgorICogV2UgdXNlIG4gbXV0ZXhlcyB0byBndWFyZCBuIHBhcnRpdGlvbnMgb2YgdGhlICJpc3RhdGUtPmRpcl9oYXNoIgorICogaGFzaHRhYmxlLiAgU2luY2UgImZpbmQiIGFuZCAiaW5zZXJ0IiBvcGVyYXRpb25zIHdpbGwgaGFzaCB0byBhCisgKiBwYXJ0aWN1bGFyIGJ1Y2tldCBhbmQgbW9kaWZ5L3NlYXJjaCBhIHNpbmdsZSBjaGFpbiwgd2UgY2FuIHNheQorICogdGhhdCAiYWxsIGNoYWlucyBtb2QgbiIgYXJlIGd1YXJkZWQgYnkgdGhlIHNhbWUgbXV0ZXggLS0gcmF0aGVyCisgKiB0aGFuIGhhdmluZyBhIHNpbmdsZSBtdXRleCB0byBndWFyZCB0aGUgZW50aXJlIHRhYmxlLiAgKFRoaXMgZG9lcworICogcmVxdWlyZSB0aGF0IHdlIGRpc2FibGUgInJlaGFzaGluZyIgb24gdGhlIGhhc2h0YWJsZS4pCisgKgorICogU28sIGEgbGFyZ2VyIHZhbHVlIGhlcmUgZGVjcmVhc2VzIHRoZSBwcm9iYWJpbGl0eSBvZiBhIGNvbGxpc2lvbgorICogYW5kIHRoZSB0aW1lIHRoYXQgZWFjaCB0aHJlYWQgbXVzdCB3YWl0IGZvciB0aGUgbXV0ZXguCisgKi8KKyNkZWZpbmUgTEFaWV9NQVhfTVVURVggICAoMzIpCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgKmxhenlfZGlyX211dGV4X2FycmF5OworCisvKgorICogQW4gYXJyYXkgb2YgbGF6eV9lbnRyeSBpdGVtcyBpcyB1c2VkIGJ5IHRoZSBuIHRocmVhZHMgaW4KKyAqIHRoZSBkaXJlY3RvcnkgcGFyc2UgKGZpcnN0KSBwaGFzZSB0byAobG9jay1mcmVlKSBzdG9yZSB0aGUKKyAqIGludGVybWVkaWF0ZSByZXN1bHRzLiAgVGhlc2UgdmFsdWVzIGFyZSB0aGVuIHJlZmVyZW5jZWQgYnkKKyAqIHRoZSAyIHRocmVhZHMgaW4gdGhlIHNlY29uZCBwaGFzZS4KKyAqLworc3RydWN0IGxhenlfZW50cnkgeworCXN0cnVjdCBkaXJfZW50cnkgKmRpcjsKKwl1bnNpZ25lZCBpbnQgaGFzaF9kaXI7CisJdW5zaWduZWQgaW50IGhhc2hfbmFtZTsKK307CisKKy8qCisgKiBEZWNpZGUgaWYgd2Ugd2FudCB0byB1c2UgdGhyZWFkcyAoaWYgYXZhaWxhYmxlKSB0byBsb2FkCisgKiB0aGUgaGFzaCB0YWJsZXMuICBXZSBzZXQgImxhenlfbnJfZGlyX3RocmVhZHMiIHRvIHplcm8gd2hlbgorICogaXQgaXMgbm90IHdvcnRoIGl0LgorICovCitzdGF0aWMgaW50IGxvb2t1cF9sYXp5X3BhcmFtcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgbnJfY3B1czsKKworCWxhenlfbnJfZGlyX3RocmVhZHMgPSAwOworCisJaWYgKCFsYXp5X3RyeV90aHJlYWRlZCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHdlIGFyZSByZXNwZWN0aW5nIGNhc2UsIGp1c3QgdXNlIHRoZSBvcmlnaW5hbAorCSAqIGNvZGUgdG8gYnVpbGQgdGhlICJpc3RhdGUtPm5hbWVfaGFzaCIuICBXZSBkb24ndAorCSAqIG5lZWQgdGhlIGNvbXBsZXhpdHkgaGVyZS4KKwkgKi8KKwlpZiAoIWlnbm9yZV9jYXNlKQorCQlyZXR1cm4gMDsKKworCW5yX2NwdXMgPSBvbmxpbmVfY3B1cygpOworCWlmIChucl9jcHVzIDwgMikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXN0YXRlLT5jYWNoZV9uciA8IDIgKiBMQVpZX1RIUkVBRF9DT1NUKQorCQlyZXR1cm4gMDsKKworCWlmIChpc3RhdGUtPmNhY2hlX25yIDwgbnJfY3B1cyAqIExBWllfVEhSRUFEX0NPU1QpCisJCW5yX2NwdXMgPSBpc3RhdGUtPmNhY2hlX25yIC8gTEFaWV9USFJFQURfQ09TVDsKKwlsYXp5X25yX2Rpcl90aHJlYWRzID0gbnJfY3B1czsKKwlyZXR1cm4gbGF6eV9ucl9kaXJfdGhyZWFkczsKK30KKworLyoKKyAqIEluaXRpYWxpemUgbiBtdXRleGVzIGZvciB1c2Ugd2hlbiBzZWFyY2hpbmcgYW5kIGluc2VydGluZworICogaW50byAiaXN0YXRlLT5kaXJfaGFzaCIuICBBbGwgImRpciIgdGhyZWFkcyBhcmUgdHJ5aW5nCisgKiB0byBpbnNlcnQgcGFydGlhbCBwYXRobmFtZXMgaW50byB0aGUgaGFzaCBhcyB0aGV5IGl0ZXJhdGUKKyAqIG92ZXIgdGhlaXIgcG9ydGlvbnMgb2YgdGhlIGluZGV4LCBzbyBsb2NrIGNvbnRlbnRpb24gaXMKKyAqIGhpZ2guCisgKgorICogSG93ZXZlciwgdGhlIGhhc2htYXAgaXMgZ29pbmcgdG8gcHV0IGl0ZW1zIGludG8gYnVja2V0CisgKiBjaGFpbnMgYmFzZWQgb24gdGhlaXIgaGFzaCB2YWx1ZXMuICBVc2UgdGhhdCB0byBjcmVhdGUgbgorICogbXV0ZXhlcyBhbmQgbG9jayBvbiBtdXRleFtidWNrZXQoaGFzaCkgJSBuXS4gIFRoaXMgd2lsbAorICogZGVjcmVhc2UgdGhlIGNvbGxpc2lvbiByYXRlIGJ5IChob3BlZnVsbHkpIGEgZmFjdG9yIG9mIG4uCisgKi8KK3N0YXRpYyB2b2lkIGluaXRfZGlyX211dGV4KHZvaWQpCit7CisJaW50IGo7CisKKwlsYXp5X2Rpcl9tdXRleF9hcnJheSA9IHhjYWxsb2MoTEFaWV9NQVhfTVVURVgsIHNpemVvZihwdGhyZWFkX211dGV4X3QpKTsKKworCWZvciAoaiA9IDA7IGogPCBMQVpZX01BWF9NVVRFWDsgaisrKQorCQlpbml0X3JlY3Vyc2l2ZV9tdXRleCgmbGF6eV9kaXJfbXV0ZXhfYXJyYXlbal0pOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2Rpcl9tdXRleCh2b2lkKQoreworCWludCBqOworCisJZm9yIChqID0gMDsgaiA8IExBWllfTUFYX01VVEVYOyBqKyspCisJCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbGF6eV9kaXJfbXV0ZXhfYXJyYXlbal0pOworCisJZnJlZShsYXp5X2Rpcl9tdXRleF9hcnJheSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvY2tfZGlyX211dGV4KGludCBqKQoreworCXB0aHJlYWRfbXV0ZXhfbG9jaygmbGF6eV9kaXJfbXV0ZXhfYXJyYXlbal0pOworfQorCitzdGF0aWMgdm9pZCB1bmxvY2tfZGlyX211dGV4KGludCBqKQoreworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsYXp5X2Rpcl9tdXRleF9hcnJheVtqXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbXB1dGVfZGlyX2xvY2tfbnIoCisJY29uc3Qgc3RydWN0IGhhc2htYXAgKm1hcCwKKwl1bnNpZ25lZCBpbnQgaGFzaCkKK3sKKwlyZXR1cm4gaGFzaG1hcF9idWNrZXQobWFwLCBoYXNoKSAlIExBWllfTUFYX01VVEVYOworfQorCitzdGF0aWMgc3RydWN0IGRpcl9lbnRyeSAqaGFzaF9kaXJfZW50cnlfd2l0aF9wYXJlbnRfYW5kX3ByZWZpeCgKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpwYXJlbnQsCisJc3RydWN0IHN0cmJ1ZiAqcHJlZml4KQoreworCXN0cnVjdCBkaXJfZW50cnkgKmRpcjsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwlpbnQgbG9ja19ucjsKKworCS8qCisJICogRWl0aGVyIHdlIGhhdmUgYSBwYXJlbnQgZGlyZWN0b3J5IGFuZCBwYXRoIHdpdGggc2xhc2goZXMpCisJICogb3IgdGhlIGRpcmVjdG9yeSBpcyBhbiBpbW1lZGlhdGUgY2hpbGQgb2YgdGhlIHJvb3QgZGlyZWN0b3J5LgorCSAqLworCWFzc2VydCgocGFyZW50ICE9IE5VTEwpIF4gKHN0cmNocihwcmVmaXgtPmJ1ZiwgJy8nKSA9PSBOVUxMKSk7CisKKwlpZiAocGFyZW50KQorCQloYXNoID0gbWVtaWhhc2hfY29udChwYXJlbnQtPmVudC5oYXNoLAorCQkJcHJlZml4LT5idWYgKyBwYXJlbnQtPm5hbWVsZW4sCisJCQlwcmVmaXgtPmxlbiAtIHBhcmVudC0+bmFtZWxlbik7CisJZWxzZQorCQloYXNoID0gbWVtaWhhc2gocHJlZml4LT5idWYsIHByZWZpeC0+bGVuKTsKKworCWxvY2tfbnIgPSBjb21wdXRlX2Rpcl9sb2NrX25yKCZpc3RhdGUtPmRpcl9oYXNoLCBoYXNoKTsKKwlsb2NrX2Rpcl9tdXRleChsb2NrX25yKTsKKworCWRpciA9IGZpbmRfZGlyX2VudHJ5X19oYXNoKGlzdGF0ZSwgcHJlZml4LT5idWYsIHByZWZpeC0+bGVuLCBoYXNoKTsKKwlpZiAoIWRpcikgeworCQlGTEVYX0FMTE9DX01FTShkaXIsIG5hbWUsIHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbik7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmZGlyLT5lbnQsIGhhc2gpOworCQlkaXItPm5hbWVsZW4gPSBwcmVmaXgtPmxlbjsKKwkJZGlyLT5wYXJlbnQgPSBwYXJlbnQ7CisJCWhhc2htYXBfYWRkKCZpc3RhdGUtPmRpcl9oYXNoLCAmZGlyLT5lbnQpOworCisJCWlmIChwYXJlbnQpIHsKKwkJCXVubG9ja19kaXJfbXV0ZXgobG9ja19ucik7CisKKwkJCS8qIEFsbCBJIHJlYWxseSBuZWVkIGhlcmUgaXMgYW4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJihwYXJlbnQtPm5yKSkgKi8KKwkJCWxvY2tfbnIgPSBjb21wdXRlX2Rpcl9sb2NrX25yKCZpc3RhdGUtPmRpcl9oYXNoLCBwYXJlbnQtPmVudC5oYXNoKTsKKwkJCWxvY2tfZGlyX211dGV4KGxvY2tfbnIpOworCQkJcGFyZW50LT5ucisrOworCQl9CisJfQorCisJdW5sb2NrX2Rpcl9tdXRleChsb2NrX25yKTsKKworCXJldHVybiBkaXI7Cit9CisKKy8qCisgKiBoYW5kbGVfcmFuZ2VfMSgpIGFuZCBoYW5kbGVfcmFuZ2VfZGlyKCkgYXJlIGRlcml2ZWQgZnJvbQorICogY2xlYXJfY2VfZmxhZ3NfMSgpIGFuZCBjbGVhcl9jZV9mbGFnc19kaXIoKSBpbiB1bnBhY2stdHJlZXMuYworICogYW5kIGhhbmRsZSB0aGUgaXRlcmF0aW9uIG92ZXIgdGhlIGVudGlyZSBhcnJheSBvZiBpbmRleCBlbnRyaWVzLgorICogVGhleSB1c2UgcmVjdXJzaW9uIGZvciBhZGphY2VudCBlbnRyaWVzIGluIHRoZSBzYW1lIHBhcmVudAorICogZGlyZWN0b3J5LgorICovCitzdGF0aWMgaW50IGhhbmRsZV9yYW5nZV8xKAorCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCWludCBrX3N0YXJ0LAorCWludCBrX2VuZCwKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpwYXJlbnQsCisJc3RydWN0IHN0cmJ1ZiAqcHJlZml4LAorCXN0cnVjdCBsYXp5X2VudHJ5ICpsYXp5X2VudHJpZXMpOworCitzdGF0aWMgaW50IGhhbmRsZV9yYW5nZV9kaXIoCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJaW50IGtfc3RhcnQsCisJaW50IGtfZW5kLAorCXN0cnVjdCBkaXJfZW50cnkgKnBhcmVudCwKKwlzdHJ1Y3Qgc3RyYnVmICpwcmVmaXgsCisJc3RydWN0IGxhenlfZW50cnkgKmxhenlfZW50cmllcywKKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqZGlyX25ld19vdXQpCit7CisJaW50IHJjLCBrOworCWludCBpbnB1dF9wcmVmaXhfbGVuID0gcHJlZml4LT5sZW47CisJc3RydWN0IGRpcl9lbnRyeSAqZGlyX25ldzsKKworCWRpcl9uZXcgPSBoYXNoX2Rpcl9lbnRyeV93aXRoX3BhcmVudF9hbmRfcHJlZml4KGlzdGF0ZSwgcGFyZW50LCBwcmVmaXgpOworCisJc3RyYnVmX2FkZGNoKHByZWZpeCwgJy8nKTsKKworCS8qCisJICogU2NhbiBmb3J3YXJkIGluIHRoZSBpbmRleCBhcnJheSBmb3IgaW5kZXggZW50cmllcyBoYXZpbmcgdGhlIHNhbWUKKwkgKiBwYXRoIHByZWZpeCAodGhhdCBhcmUgYWxzbyBpbiB0aGlzIGRpcmVjdG9yeSkuCisJICovCisJaWYgKGtfc3RhcnQgKyAxID49IGtfZW5kKQorCQlrID0ga19lbmQ7CisJZWxzZSBpZiAoc3RybmNtcChpc3RhdGUtPmNhY2hlW2tfc3RhcnQgKyAxXS0+bmFtZSwgcHJlZml4LT5idWYsIHByZWZpeC0+bGVuKSA+IDApCisJCWsgPSBrX3N0YXJ0ICsgMTsKKwllbHNlIGlmIChzdHJuY21wKGlzdGF0ZS0+Y2FjaGVba19lbmQgLSAxXS0+bmFtZSwgcHJlZml4LT5idWYsIHByZWZpeC0+bGVuKSA9PSAwKQorCQlrID0ga19lbmQ7CisJZWxzZSB7CisJCWludCBiZWdpbiA9IGtfc3RhcnQ7CisJCWludCBlbmQgPSBrX2VuZDsKKwkJYXNzZXJ0KGJlZ2luID49IDApOworCQl3aGlsZSAoYmVnaW4gPCBlbmQpIHsKKwkJCWludCBtaWQgPSBiZWdpbiArICgoZW5kIC0gYmVnaW4pID4+IDEpOworCQkJaW50IGNtcCA9IHN0cm5jbXAoaXN0YXRlLT5jYWNoZVttaWRdLT5uYW1lLCBwcmVmaXgtPmJ1ZiwgcHJlZml4LT5sZW4pOworCQkJaWYgKGNtcCA9PSAwKSAvKiBtaWQgaGFzIHNhbWUgcHJlZml4OyBsb29rIGluIHNlY29uZCBwYXJ0ICovCisJCQkJYmVnaW4gPSBtaWQgKyAxOworCQkJZWxzZSBpZiAoY21wID4gMCkgLyogbWlkIGlzIHBhc3QgZ3JvdXA7IGxvb2sgaW4gZmlyc3QgcGFydCAqLworCQkJCWVuZCA9IG1pZDsKKwkJCWVsc2UKKwkJCQlkaWUoImNhY2hlIGVudHJ5IG91dCBvZiBvcmRlciIpOworCQl9CisJCWsgPSBiZWdpbjsKKwl9CisKKwkvKgorCSAqIFJlY3Vyc2UgYW5kIHByb2Nlc3Mgd2hhdCB3ZSBjYW4gb2YgdGhpcyBzdWJzZXQgW2tfc3RhcnQsIGspLgorCSAqLworCXJjID0gaGFuZGxlX3JhbmdlXzEoaXN0YXRlLCBrX3N0YXJ0LCBrLCBkaXJfbmV3LCBwcmVmaXgsIGxhenlfZW50cmllcyk7CisKKwlzdHJidWZfc2V0bGVuKHByZWZpeCwgaW5wdXRfcHJlZml4X2xlbik7CisKKwkqZGlyX25ld19vdXQgPSBkaXJfbmV3OworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBoYW5kbGVfcmFuZ2VfMSgKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwlpbnQga19zdGFydCwKKwlpbnQga19lbmQsCisJc3RydWN0IGRpcl9lbnRyeSAqcGFyZW50LAorCXN0cnVjdCBzdHJidWYgKnByZWZpeCwKKwlzdHJ1Y3QgbGF6eV9lbnRyeSAqbGF6eV9lbnRyaWVzKQoreworCWludCBpbnB1dF9wcmVmaXhfbGVuID0gcHJlZml4LT5sZW47CisJaW50IGsgPSBrX3N0YXJ0OworCisJd2hpbGUgKGsgPCBrX2VuZCkgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlX2sgPSBpc3RhdGUtPmNhY2hlW2tdOworCQljb25zdCBjaGFyICpuYW1lLCAqc2xhc2g7CisKKwkJaWYgKHByZWZpeC0+bGVuICYmIHN0cm5jbXAoY2Vfay0+bmFtZSwgcHJlZml4LT5idWYsIHByZWZpeC0+bGVuKSkKKwkJCWJyZWFrOworCisJCW5hbWUgPSBjZV9rLT5uYW1lICsgcHJlZml4LT5sZW47CisJCXNsYXNoID0gc3RyY2hyKG5hbWUsICcvJyk7CisKKwkJaWYgKHNsYXNoKSB7CisJCQlpbnQgbGVuID0gc2xhc2ggLSBuYW1lOworCQkJaW50IHByb2Nlc3NlZDsKKwkJCXN0cnVjdCBkaXJfZW50cnkgKmRpcl9uZXc7CisKKwkJCXN0cmJ1Zl9hZGQocHJlZml4LCBuYW1lLCBsZW4pOworCQkJcHJvY2Vzc2VkID0gaGFuZGxlX3JhbmdlX2Rpcihpc3RhdGUsIGssIGtfZW5kLCBwYXJlbnQsIHByZWZpeCwgbGF6eV9lbnRyaWVzLCAmZGlyX25ldyk7CisJCQlpZiAocHJvY2Vzc2VkKSB7CisJCQkJayArPSBwcm9jZXNzZWQ7CisJCQkJc3RyYnVmX3NldGxlbihwcmVmaXgsIGlucHV0X3ByZWZpeF9sZW4pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlzdHJidWZfYWRkY2gocHJlZml4LCAnLycpOworCQkJcHJvY2Vzc2VkID0gaGFuZGxlX3JhbmdlXzEoaXN0YXRlLCBrLCBrX2VuZCwgZGlyX25ldywgcHJlZml4LCBsYXp5X2VudHJpZXMpOworCQkJayArPSBwcm9jZXNzZWQ7CisJCQlzdHJidWZfc2V0bGVuKHByZWZpeCwgaW5wdXRfcHJlZml4X2xlbik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIEl0IGlzIHRvbyBleHBlbnNpdmUgdG8gdGFrZSBhIGxvY2sgdG8gaW5zZXJ0ICJjZV9rIgorCQkgKiBpbnRvICJpc3RhdGUtPm5hbWVfaGFzaCIgYW5kIGluY3JlbWVudCB0aGUgcmVmLWNvdW50CisJCSAqIG9uIHRoZSAicGFyZW50IiBkaXIuICBTbyB3ZSBkZWZlciBhY3R1YWxseSB1cGRhdGluZworCQkgKiBwZXJtYW5lbnQgZGF0YSBzdHJ1Y3R1cmVzIHVudGlsIHBoYXNlIDIgKHdoZXJlIHdlCisJCSAqIGNhbiBjaGFuZ2UgdGhlIGxvY2tpbmcgcmVxdWlyZW1lbnRzKSBhbmQgc2ltcGx5CisJCSAqIGFjY3VtdWxhdGUgb3VyIGN1cnJlbnQgcmVzdWx0cyBpbnRvIHRoZSBsYXp5X2VudHJpZXMKKwkJICogZGF0YSBhcnJheSkuCisJCSAqCisJCSAqIFdlIGRvIG5vdCBuZWVkIHRvIGxvY2sgdGhlIGxhenlfZW50cmllcyBhcnJheSBiZWNhdXNlCisJCSAqIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgY2VsbHMgaW4gdGhlIHJhbmdlCisJCSAqIFtrX3N0YXJ0LGtfZW5kKSB0aGF0IHRoaXMgdGhyZWFkIHdhcyBnaXZlbi4KKwkJICovCisJCWxhenlfZW50cmllc1trXS5kaXIgPSBwYXJlbnQ7CisJCWlmIChwYXJlbnQpIHsKKwkJCWxhenlfZW50cmllc1trXS5oYXNoX25hbWUgPSBtZW1paGFzaF9jb250KAorCQkJCXBhcmVudC0+ZW50Lmhhc2gsCisJCQkJY2Vfay0+bmFtZSArIHBhcmVudC0+bmFtZWxlbiwKKwkJCQljZV9uYW1lbGVuKGNlX2spIC0gcGFyZW50LT5uYW1lbGVuKTsKKwkJCWxhenlfZW50cmllc1trXS5oYXNoX2RpciA9IHBhcmVudC0+ZW50Lmhhc2g7CisJCX0gZWxzZSB7CisJCQlsYXp5X2VudHJpZXNba10uaGFzaF9uYW1lID0gbWVtaWhhc2goY2Vfay0+bmFtZSwgY2VfbmFtZWxlbihjZV9rKSk7CisJCX0KKworCQlrKys7CisJfQorCisJcmV0dXJuIGsgLSBrX3N0YXJ0OworfQorCitzdHJ1Y3QgbGF6eV9kaXJfdGhyZWFkX2RhdGEgeworCXB0aHJlYWRfdCBwdGhyZWFkOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlOworCXN0cnVjdCBsYXp5X2VudHJ5ICpsYXp5X2VudHJpZXM7CisJaW50IGtfc3RhcnQ7CisJaW50IGtfZW5kOworfTsKKworc3RhdGljIHZvaWQgKmxhenlfZGlyX3RocmVhZF9wcm9jKHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBsYXp5X2Rpcl90aHJlYWRfZGF0YSAqZCA9IF9kYXRhOworCXN0cnVjdCBzdHJidWYgcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisJaGFuZGxlX3JhbmdlXzEoZC0+aXN0YXRlLCBkLT5rX3N0YXJ0LCBkLT5rX2VuZCwgTlVMTCwgJnByZWZpeCwgZC0+bGF6eV9lbnRyaWVzKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJlZml4KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGxhenlfbmFtZV90aHJlYWRfZGF0YSB7CisJcHRocmVhZF90IHB0aHJlYWQ7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGU7CisJc3RydWN0IGxhenlfZW50cnkgKmxhenlfZW50cmllczsKK307CisKK3N0YXRpYyB2b2lkICpsYXp5X25hbWVfdGhyZWFkX3Byb2Modm9pZCAqX2RhdGEpCit7CisJc3RydWN0IGxhenlfbmFtZV90aHJlYWRfZGF0YSAqZCA9IF9kYXRhOworCWludCBrOworCisJZm9yIChrID0gMDsgayA8IGQtPmlzdGF0ZS0+Y2FjaGVfbnI7IGsrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlX2sgPSBkLT5pc3RhdGUtPmNhY2hlW2tdOworCQljZV9rLT5jZV9mbGFncyB8PSBDRV9IQVNIRUQ7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmY2Vfay0+ZW50LCBkLT5sYXp5X2VudHJpZXNba10uaGFzaF9uYW1lKTsKKwkJaGFzaG1hcF9hZGQoJmQtPmlzdGF0ZS0+bmFtZV9oYXNoLCAmY2Vfay0+ZW50KTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxhenlfdXBkYXRlX2Rpcl9yZWZfY291bnRzKAorCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCXN0cnVjdCBsYXp5X2VudHJ5ICpsYXp5X2VudHJpZXMpCit7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgaXN0YXRlLT5jYWNoZV9ucjsgaysrKSB7CisJCWlmIChsYXp5X2VudHJpZXNba10uZGlyKQorCQkJbGF6eV9lbnRyaWVzW2tdLmRpci0+bnIrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRocmVhZGVkX2xhenlfaW5pdF9uYW1lX2hhc2goCisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IGVycjsKKwlpbnQgbnJfZWFjaDsKKwlpbnQga19zdGFydDsKKwlpbnQgdDsKKwlzdHJ1Y3QgbGF6eV9lbnRyeSAqbGF6eV9lbnRyaWVzOworCXN0cnVjdCBsYXp5X2Rpcl90aHJlYWRfZGF0YSAqdGRfZGlyOworCXN0cnVjdCBsYXp5X25hbWVfdGhyZWFkX2RhdGEgKnRkX25hbWU7CisKKwlpZiAoIUhBVkVfVEhSRUFEUykKKwkJcmV0dXJuOworCisJa19zdGFydCA9IDA7CisJbnJfZWFjaCA9IERJVl9ST1VORF9VUChpc3RhdGUtPmNhY2hlX25yLCBsYXp5X25yX2Rpcl90aHJlYWRzKTsKKworCWxhenlfZW50cmllcyA9IHhjYWxsb2MoaXN0YXRlLT5jYWNoZV9uciwgc2l6ZW9mKHN0cnVjdCBsYXp5X2VudHJ5KSk7CisJdGRfZGlyID0geGNhbGxvYyhsYXp5X25yX2Rpcl90aHJlYWRzLCBzaXplb2Yoc3RydWN0IGxhenlfZGlyX3RocmVhZF9kYXRhKSk7CisJdGRfbmFtZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsYXp5X25hbWVfdGhyZWFkX2RhdGEpKTsKKworCWluaXRfZGlyX211dGV4KCk7CisKKwkvKgorCSAqIFBoYXNlIDE6CisJICogQnVpbGQgImlzdGF0ZS0+ZGlyX2hhc2giIHVzaW5nIG4gImRpciIgdGhyZWFkcyAoYW5kIGEgcmVhZC1vbmx5IGluZGV4KS4KKwkgKi8KKwlmb3IgKHQgPSAwOyB0IDwgbGF6eV9ucl9kaXJfdGhyZWFkczsgdCsrKSB7CisJCXN0cnVjdCBsYXp5X2Rpcl90aHJlYWRfZGF0YSAqdGRfZGlyX3QgPSB0ZF9kaXIgKyB0OworCQl0ZF9kaXJfdC0+aXN0YXRlID0gaXN0YXRlOworCQl0ZF9kaXJfdC0+bGF6eV9lbnRyaWVzID0gbGF6eV9lbnRyaWVzOworCQl0ZF9kaXJfdC0+a19zdGFydCA9IGtfc3RhcnQ7CisJCWtfc3RhcnQgKz0gbnJfZWFjaDsKKwkJaWYgKGtfc3RhcnQgPiBpc3RhdGUtPmNhY2hlX25yKQorCQkJa19zdGFydCA9IGlzdGF0ZS0+Y2FjaGVfbnI7CisJCXRkX2Rpcl90LT5rX2VuZCA9IGtfc3RhcnQ7CisJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZ0ZF9kaXJfdC0+cHRocmVhZCwgTlVMTCwgbGF6eV9kaXJfdGhyZWFkX3Byb2MsIHRkX2Rpcl90KTsKKwkJaWYgKGVycikKKwkJCWRpZShfKCJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiKSwgc3RyZXJyb3IoZXJyKSk7CisJfQorCWZvciAodCA9IDA7IHQgPCBsYXp5X25yX2Rpcl90aHJlYWRzOyB0KyspIHsKKwkJc3RydWN0IGxhenlfZGlyX3RocmVhZF9kYXRhICp0ZF9kaXJfdCA9IHRkX2RpciArIHQ7CisJCWlmIChwdGhyZWFkX2pvaW4odGRfZGlyX3QtPnB0aHJlYWQsIE5VTEwpKQorCQkJZGllKCJ1bmFibGUgdG8gam9pbiBsYXp5X2Rpcl90aHJlYWQiKTsKKwl9CisKKwkvKgorCSAqIFBoYXNlIDI6CisJICogSXRlcmF0ZSBvdmVyIGFsbCBpbmRleCBlbnRyaWVzIGFuZCBhZGQgdGhlbSB0byB0aGUgImlzdGF0ZS0+bmFtZV9oYXNoIgorCSAqIHVzaW5nIGEgc2luZ2xlICJuYW1lIiBiYWNrZ3JvdW5kIHRocmVhZC4KKwkgKiAoVGVzdGluZyBzaG93ZWQgaXQgd2Fzbid0IHdvcnRoIHJ1bm5pbmcgbW9yZSB0aGFuIDEgdGhyZWFkIGZvciB0aGlzLikKKwkgKgorCSAqIE1lYW53aGlsZSwgZmluaXNoIHVwZGF0aW5nIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHJlZi1jb3VudHMgZm9yIGVhY2gKKwkgKiBpbmRleCBlbnRyeSB1c2luZyB0aGUgY3VycmVudCB0aHJlYWQuICAoVGhpcyBzdGVwIGlzIHZlcnkgZmFzdCBhbmQKKwkgKiBkb2Vzbid0IG5lZWQgdGhyZWFkaW5nLikKKwkgKi8KKwl0ZF9uYW1lLT5pc3RhdGUgPSBpc3RhdGU7CisJdGRfbmFtZS0+bGF6eV9lbnRyaWVzID0gbGF6eV9lbnRyaWVzOworCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZ0ZF9uYW1lLT5wdGhyZWFkLCBOVUxMLCBsYXp5X25hbWVfdGhyZWFkX3Byb2MsIHRkX25hbWUpOworCWlmIChlcnIpCisJCWRpZShfKCJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIiksIHN0cmVycm9yKGVycikpOworCisJbGF6eV91cGRhdGVfZGlyX3JlZl9jb3VudHMoaXN0YXRlLCBsYXp5X2VudHJpZXMpOworCisJZXJyID0gcHRocmVhZF9qb2luKHRkX25hbWUtPnB0aHJlYWQsIE5VTEwpOworCWlmIChlcnIpCisJCWRpZShfKCJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIpLCBzdHJlcnJvcihlcnIpKTsKKworCWNsZWFudXBfZGlyX211dGV4KCk7CisKKwlmcmVlKHRkX25hbWUpOworCWZyZWUodGRfZGlyKTsKKwlmcmVlKGxhenlfZW50cmllcyk7Cit9CisKK3N0YXRpYyB2b2lkIGxhenlfaW5pdF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisKKwlpZiAoaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwl0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcigpOworCWhhc2htYXBfaW5pdCgmaXN0YXRlLT5uYW1lX2hhc2gsIGNhY2hlX2VudHJ5X2NtcCwgTlVMTCwgaXN0YXRlLT5jYWNoZV9ucik7CisJaGFzaG1hcF9pbml0KCZpc3RhdGUtPmRpcl9oYXNoLCBkaXJfZW50cnlfY21wLCBOVUxMLCBpc3RhdGUtPmNhY2hlX25yKTsKKworCWlmIChsb29rdXBfbGF6eV9wYXJhbXMoaXN0YXRlKSkgeworCQkvKgorCQkgKiBEaXNhYmxlIGl0ZW0gY291bnRpbmcgYW5kIGF1dG9tYXRpYyByZWhhc2hpbmcgYmVjYXVzZQorCQkgKiB3ZSBkbyBwZXItY2hhaW4gKG1vZCBuKSBsb2NraW5nIHJhdGhlciB0aGFuIHdob2xlIGhhc2htYXAKKwkJICogbG9ja2luZyBhbmQgd2UgbmVlZCB0byBwcmV2ZW50IHRoZSB0YWJsZS1zaXplIGZyb20gY2hhbmdpbmcKKwkJICogYW5kIGJ1Y2tldCBpdGVtcyBmcm9tIGJlaW5nIHJlZGlzdHJpYnV0ZWQuCisJCSAqLworCQloYXNobWFwX2Rpc2FibGVfaXRlbV9jb3VudGluZygmaXN0YXRlLT5kaXJfaGFzaCk7CisJCXRocmVhZGVkX2xhenlfaW5pdF9uYW1lX2hhc2goaXN0YXRlKTsKKwkJaGFzaG1hcF9lbmFibGVfaXRlbV9jb3VudGluZygmaXN0YXRlLT5kaXJfaGFzaCk7CisJfSBlbHNlIHsKKwkJaW50IG5yOworCQlmb3IgKG5yID0gMDsgbnIgPCBpc3RhdGUtPmNhY2hlX25yOyBucisrKQorCQkJaGFzaF9pbmRleF9lbnRyeShpc3RhdGUsIGlzdGF0ZS0+Y2FjaGVbbnJdKTsKKwl9CisKKwlpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCA9IDE7CisJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoImluaXRpYWxpemUgbmFtZSBoYXNoIik7Cit9CisKKy8qCisgKiBBIHRlc3Qgcm91dGluZSBmb3IgdC9oZWxwZXIvIHNvdXJjZXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdXNlZCBvciAwIHdoZW4KKyAqIHRoZSBub24tdGhyZWFkZWQgY29kZSBwYXRoIHdhcyB1c2VkLgorICoKKyAqIFJlcXVlc3RpbmcgdGhyZWFkaW5nIFdJTEwgTk9UIG92ZXJyaWRlIGd1YXJkcworICogaW4gbG9va3VwX2xhenlfcGFyYW1zKCkuCisgKi8KK2ludCB0ZXN0X2xhenlfaW5pdF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCB0cnlfdGhyZWFkZWQpCit7CisJbGF6eV9ucl9kaXJfdGhyZWFkcyA9IDA7CisJbGF6eV90cnlfdGhyZWFkZWQgPSB0cnlfdGhyZWFkZWQ7CisKKwlsYXp5X2luaXRfbmFtZV9oYXNoKGlzdGF0ZSk7CisKKwlyZXR1cm4gbGF6eV9ucl9kaXJfdGhyZWFkczsKK30KKwordm9pZCBhZGRfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWlmIChpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCkKKwkJaGFzaF9pbmRleF9lbnRyeShpc3RhdGUsIGNlKTsKK30KKwordm9pZCByZW1vdmVfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWlmICghaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQgfHwgIShjZS0+Y2VfZmxhZ3MgJiBDRV9IQVNIRUQpKQorCQlyZXR1cm47CisJY2UtPmNlX2ZsYWdzICY9IH5DRV9IQVNIRUQ7CisJaGFzaG1hcF9yZW1vdmUoJmlzdGF0ZS0+bmFtZV9oYXNoLCAmY2UtPmVudCwgY2UpOworCisJaWYgKGlnbm9yZV9jYXNlKQorCQlyZW1vdmVfZGlyX2VudHJ5KGlzdGF0ZSwgY2UpOworfQorCitzdGF0aWMgaW50IHNsb3dfc2FtZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yKQoreworCWlmIChsZW4xICE9IGxlbjIpCisJCXJldHVybiAwOworCisJd2hpbGUgKGxlbjEpIHsKKwkJdW5zaWduZWQgY2hhciBjMSA9ICpuYW1lMSsrOworCQl1bnNpZ25lZCBjaGFyIGMyID0gKm5hbWUyKys7CisJCWxlbjEtLTsKKwkJaWYgKGMxICE9IGMyKSB7CisJCQljMSA9IHRvdXBwZXIoYzEpOworCQkJYzIgPSB0b3VwcGVyKGMyKTsKKwkJCWlmIChjMSAhPSBjMikKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzYW1lX25hbWUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpY2FzZSkKK3sKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisKKwkvKgorCSAqIEFsd2F5cyBkbyBleGFjdCBjb21wYXJlLCBldmVuIGlmIHdlIHdhbnQgYSBjYXNlLWlnbm9yaW5nIGNvbXBhcmlzb247CisJICogd2UgZG8gdGhlIHF1aWNrIGV4YWN0IG9uZSBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIHRoZSBjb21tb24gY2FzZS4KKwkgKi8KKwlpZiAobGVuID09IG5hbWVsZW4gJiYgIW1lbWNtcChuYW1lLCBjZS0+bmFtZSwgbGVuKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWljYXNlKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbG93X3NhbWVfbmFtZShuYW1lLCBuYW1lbGVuLCBjZS0+bmFtZSwgbGVuKTsKK30KKworaW50IGluZGV4X2Rpcl9leGlzdHMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCXN0cnVjdCBkaXJfZW50cnkgKmRpcjsKKworCWxhenlfaW5pdF9uYW1lX2hhc2goaXN0YXRlKTsKKwlkaXIgPSBmaW5kX2Rpcl9lbnRyeShpc3RhdGUsIG5hbWUsIG5hbWVsZW4pOworCXJldHVybiBkaXIgJiYgZGlyLT5ucjsKK30KKwordm9pZCBhZGp1c3RfZGlybmFtZV9jYXNlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKnN0YXJ0UHRyID0gbmFtZTsKKwljb25zdCBjaGFyICpwdHIgPSBzdGFydFB0cjsKKworCWxhenlfaW5pdF9uYW1lX2hhc2goaXN0YXRlKTsKKwl3aGlsZSAoKnB0cikgeworCQl3aGlsZSAoKnB0ciAmJiAqcHRyICE9ICcvJykKKwkJCXB0cisrOworCisJCWlmICgqcHRyID09ICcvJykgeworCQkJc3RydWN0IGRpcl9lbnRyeSAqZGlyOworCisJCQlkaXIgPSBmaW5kX2Rpcl9lbnRyeShpc3RhdGUsIG5hbWUsIHB0ciAtIG5hbWUpOworCQkJaWYgKGRpcikgeworCQkJCW1lbWNweSgodm9pZCAqKXN0YXJ0UHRyLCBkaXItPm5hbWUgKyAoc3RhcnRQdHIgLSBuYW1lKSwgcHRyIC0gc3RhcnRQdHIpOworCQkJCXN0YXJ0UHRyID0gcHRyICsgMTsKKwkJCX0KKwkJCXB0cisrOworCQl9CisJfQorfQorCitzdHJ1Y3QgY2FjaGVfZW50cnkgKmluZGV4X2ZpbGVfZXhpc3RzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IGljYXNlKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJdW5zaWduZWQgaW50IGhhc2ggPSBtZW1paGFzaChuYW1lLCBuYW1lbGVuKTsKKworCWxhenlfaW5pdF9uYW1lX2hhc2goaXN0YXRlKTsKKworCWNlID0gaGFzaG1hcF9nZXRfZW50cnlfZnJvbV9oYXNoKCZpc3RhdGUtPm5hbWVfaGFzaCwgaGFzaCwgTlVMTCwKKwkJCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSwgZW50KTsKKwloYXNobWFwX2Zvcl9lYWNoX2VudHJ5X2Zyb20oJmlzdGF0ZS0+bmFtZV9oYXNoLCBjZSwgZW50KSB7CisJCWlmIChzYW1lX25hbWUoY2UsIG5hbWUsIG5hbWVsZW4sIGljYXNlKSkKKwkJCXJldHVybiBjZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgZnJlZV9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaWYgKCFpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCWlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkID0gMDsKKworCWhhc2htYXBfZnJlZSgmaXN0YXRlLT5uYW1lX2hhc2gpOworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZpc3RhdGUtPmRpcl9oYXNoLCBzdHJ1Y3QgZGlyX2VudHJ5LCBlbnQpOworfQpkaWZmIC0tZ2l0IGEvbmVnb3RpYXRvci9kZWZhdWx0LmMgYi9uZWdvdGlhdG9yL2RlZmF1bHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjc4ZjZiCi0tLSAvZGV2L251bGwKKysrIGIvbmVnb3RpYXRvci9kZWZhdWx0LmMKQEAgLTAsMCArMSwxNzYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRlZmF1bHQuaCIKKyNpbmNsdWRlICIuLi9jb21taXQuaCIKKyNpbmNsdWRlICIuLi9mZXRjaC1uZWdvdGlhdG9yLmgiCisjaW5jbHVkZSAiLi4vcHJpby1xdWV1ZS5oIgorI2luY2x1ZGUgIi4uL3JlZnMuaCIKKyNpbmNsdWRlICIuLi90YWcuaCIKKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgQ09NTU9OCQkoMVUgPDwgMikKKyNkZWZpbmUgQ09NTU9OX1JFRgkoMVUgPDwgMykKKyNkZWZpbmUgU0VFTgkJKDFVIDw8IDQpCisjZGVmaW5lIFBPUFBFRAkJKDFVIDw8IDUpCisKK3N0YXRpYyBpbnQgbWFya2VkOworCitzdHJ1Y3QgbmVnb3RpYXRpb25fc3RhdGUgeworCXN0cnVjdCBwcmlvX3F1ZXVlIHJldl9saXN0OworCWludCBub25fY29tbW9uX3JldnM7Cit9OworCitzdGF0aWMgdm9pZCByZXZfbGlzdF9wdXNoKHN0cnVjdCBuZWdvdGlhdGlvbl9zdGF0ZSAqbnMsCisJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IG1hcmspCit7CisJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBtYXJrKSkgeworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBtYXJrOworCisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJCXJldHVybjsKKworCQlwcmlvX3F1ZXVlX3B1dCgmbnMtPnJldl9saXN0LCBjb21taXQpOworCisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkKKwkJCW5zLT5ub25fY29tbW9uX3JldnMrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfbWFya3MoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwgcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpLCByZWZuYW1lLCAwKTsKKworCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJY2xlYXJfY29tbWl0X21hcmtzKChzdHJ1Y3QgY29tbWl0ICopbywKKwkJCQkgICBDT01NT04gfCBDT01NT05fUkVGIHwgU0VFTiB8IFBPUFBFRCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG1hcmtzIGEgcmV2IGFuZCBpdHMgYW5jZXN0b3JzIGFzIGNvbW1vbi4KKyAqIEluIHNvbWUgY2FzZXMsIGl0IGlzIGRlc2lyYWJsZSB0byBtYXJrIG9ubHkgdGhlIGFuY2VzdG9ycyAoZm9yIGV4YW1wbGUKKyAqIHdoZW4gb25seSB0aGUgc2VydmVyIGRvZXMgbm90IHlldCBrbm93IHRoYXQgdGhleSBhcmUgY29tbW9uKS4KKyAqLworc3RhdGljIHZvaWQgbWFya19jb21tb24oc3RydWN0IG5lZ290aWF0aW9uX3N0YXRlICpucywgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQlpbnQgYW5jZXN0b3JzX29ubHksIGludCBkb250X3BhcnNlKQoreworCWlmIChjb21taXQgIT0gTlVMTCAmJiAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gKHN0cnVjdCBvYmplY3QgKiljb21taXQ7CisKKwkJaWYgKCFhbmNlc3RvcnNfb25seSkKKwkJCW8tPmZsYWdzIHw9IENPTU1PTjsKKworCQlpZiAoIShvLT5mbGFncyAmIFNFRU4pKQorCQkJcmV2X2xpc3RfcHVzaChucywgY29tbWl0LCBTRUVOKTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkJCWlmICghYW5jZXN0b3JzX29ubHkgJiYgIShvLT5mbGFncyAmIFBPUFBFRCkpCisJCQkJbnMtPm5vbl9jb21tb25fcmV2cy0tOworCQkJaWYgKCFvLT5wYXJzZWQgJiYgIWRvbnRfcGFyc2UpCisJCQkJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQkJCQlyZXR1cm47CisKKwkJCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwkJCQkJcGFyZW50czsKKwkJCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQkJbWFya19jb21tb24obnMsIHBhcmVudHMtPml0ZW0sIDAsCisJCQkJCSAgICBkb250X3BhcnNlKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEdldCB0aGUgbmV4dCByZXYgdG8gc2VuZCwgaWdub3JpbmcgdGhlIGNvbW1vbi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmdldF9yZXYoc3RydWN0IG5lZ290aWF0aW9uX3N0YXRlICpucykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCisJd2hpbGUgKGNvbW1pdCA9PSBOVUxMKSB7CisJCXVuc2lnbmVkIGludCBtYXJrOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkJaWYgKG5zLT5yZXZfbGlzdC5uciA9PSAwIHx8IG5zLT5ub25fY29tbW9uX3JldnMgPT0gMCkKKwkJCXJldHVybiBOVUxMOworCisJCWNvbW1pdCA9IHByaW9fcXVldWVfZ2V0KCZucy0+cmV2X2xpc3QpOworCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKwkJcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBQT1BQRUQ7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkKKwkJCW5zLT5ub25fY29tbW9uX3JldnMtLTsKKworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT04pIHsKKwkJCS8qIGRvIG5vdCBzZW5kICJoYXZlIiwgYW5kIGlnbm9yZSBhbmNlc3RvcnMgKi8KKwkJCWNvbW1pdCA9IE5VTEw7CisJCQltYXJrID0gQ09NTU9OIHwgU0VFTjsKKwkJfSBlbHNlIGlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTl9SRUYpCisJCQkvKiBzZW5kICJoYXZlIiwgYW5kIGlnbm9yZSBhbmNlc3RvcnMgKi8KKwkJCW1hcmsgPSBDT01NT04gfCBTRUVOOworCQllbHNlCisJCQkvKiBzZW5kICJoYXZlIiwgYWxzbyBmb3IgaXRzIGFuY2VzdG9ycyAqLworCQkJbWFyayA9IFNFRU47CisKKwkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCWlmICghKHBhcmVudHMtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNFRU4pKQorCQkJCXJldl9saXN0X3B1c2gobnMsIHBhcmVudHMtPml0ZW0sIG1hcmspOworCQkJaWYgKG1hcmsgJiBDT01NT04pCisJCQkJbWFya19jb21tb24obnMsIHBhcmVudHMtPml0ZW0sIDEsIDApOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKwl9CisKKwlyZXR1cm4gJmNvbW1pdC0+b2JqZWN0Lm9pZDsKK30KKworc3RhdGljIHZvaWQga25vd25fY29tbW9uKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuLCBzdHJ1Y3QgY29tbWl0ICpjKQoreworCWlmICghKGMtPm9iamVjdC5mbGFncyAmIFNFRU4pKSB7CisJCXJldl9saXN0X3B1c2gobi0+ZGF0YSwgYywgQ09NTU9OX1JFRiB8IFNFRU4pOworCQltYXJrX2NvbW1vbihuLT5kYXRhLCBjLCAxLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF90aXAoc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm4sIHN0cnVjdCBjb21taXQgKmMpCit7CisJbi0+a25vd25fY29tbW9uID0gTlVMTDsKKwlyZXZfbGlzdF9wdXNoKG4tPmRhdGEsIGMsIFNFRU4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV4dChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbikKK3sKKwluLT5rbm93bl9jb21tb24gPSBOVUxMOworCW4tPmFkZF90aXAgPSBOVUxMOworCXJldHVybiBnZXRfcmV2KG4tPmRhdGEpOworfQorCitzdGF0aWMgaW50IGFjayhzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbiwgc3RydWN0IGNvbW1pdCAqYykKK3sKKwlpbnQga25vd25fdG9fYmVfY29tbW9uID0gISEoYy0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKTsKKwltYXJrX2NvbW1vbihuLT5kYXRhLCBjLCAwLCAxKTsKKwlyZXR1cm4ga25vd25fdG9fYmVfY29tbW9uOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuKQoreworCWNsZWFyX3ByaW9fcXVldWUoJigoc3RydWN0IG5lZ290aWF0aW9uX3N0YXRlICopbi0+ZGF0YSktPnJldl9saXN0KTsKKwlGUkVFX0FORF9OVUxMKG4tPmRhdGEpOworfQorCit2b2lkIGRlZmF1bHRfbmVnb3RpYXRvcl9pbml0KHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yKQoreworCXN0cnVjdCBuZWdvdGlhdGlvbl9zdGF0ZSAqbnM7CisJbmVnb3RpYXRvci0+a25vd25fY29tbW9uID0ga25vd25fY29tbW9uOworCW5lZ290aWF0b3ItPmFkZF90aXAgPSBhZGRfdGlwOworCW5lZ290aWF0b3ItPm5leHQgPSBuZXh0OworCW5lZ290aWF0b3ItPmFjayA9IGFjazsKKwluZWdvdGlhdG9yLT5yZWxlYXNlID0gcmVsZWFzZTsKKwluZWdvdGlhdG9yLT5kYXRhID0gbnMgPSB4Y2FsbG9jKDEsIHNpemVvZigqbnMpKTsKKwlucy0+cmV2X2xpc3QuY29tcGFyZSA9IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZTsKKworCWlmIChtYXJrZWQpCisJCWZvcl9lYWNoX3JlZihjbGVhcl9tYXJrcywgTlVMTCk7CisJbWFya2VkID0gMTsKK30KZGlmZiAtLWdpdCBhL25lZ290aWF0b3IvZGVmYXVsdC5oIGIvbmVnb3RpYXRvci9kZWZhdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzYThmMgotLS0gL2Rldi9udWxsCisrKyBiL25lZ290aWF0b3IvZGVmYXVsdC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBORUdPVElBVE9SX0RFRkFVTFRfSAorI2RlZmluZSBORUdPVElBVE9SX0RFRkFVTFRfSAorCitzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvcjsKKwordm9pZCBkZWZhdWx0X25lZ290aWF0b3JfaW5pdChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmVnb3RpYXRvci9za2lwcGluZy5jIGIvbmVnb3RpYXRvci9za2lwcGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZmJjNzYKLS0tIC9kZXYvbnVsbAorKysgYi9uZWdvdGlhdG9yL3NraXBwaW5nLmMKQEAgLTAsMCArMSwyNTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNraXBwaW5nLmgiCisjaW5jbHVkZSAiLi4vY29tbWl0LmgiCisjaW5jbHVkZSAiLi4vZmV0Y2gtbmVnb3RpYXRvci5oIgorI2luY2x1ZGUgIi4uL3ByaW8tcXVldWUuaCIKKyNpbmNsdWRlICIuLi9yZWZzLmgiCisjaW5jbHVkZSAiLi4vdGFnLmgiCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisvKgorICogQm90aCB1cyBhbmQgdGhlIHNlcnZlciBrbm93IHRoYXQgYm90aCBwYXJ0aWVzIGhhdmUgdGhpcyBvYmplY3QuCisgKi8KKyNkZWZpbmUgQ09NTU9OCQkoMVUgPDwgMikKKy8qCisgKiBUaGUgc2VydmVyIGhhcyB0b2xkIHVzIHRoYXQgaXQgaGFzIHRoaXMgb2JqZWN0LiBXZSBzdGlsbCBuZWVkIHRvIHRlbGwgdGhlCisgKiBzZXJ2ZXIgdGhhdCB3ZSBoYXZlIHRoaXMgb2JqZWN0IChvciBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzKSwgYnV0IHNpbmNlIHdlIGFyZQorICogZ29pbmcgdG8gZG8gdGhhdCwgd2UgZG8gbm90IG5lZWQgdG8gdGVsbCB0aGUgc2VydmVyIGFib3V0IGl0cyBhbmNlc3RvcnMuCisgKi8KKyNkZWZpbmUgQURWRVJUSVNFRAkoMVUgPDwgMykKKy8qCisgKiBUaGlzIGNvbW1pdCBoYXMgZW50ZXJlZCB0aGUgcHJpb3JpdHkgcXVldWUuCisgKi8KKyNkZWZpbmUgU0VFTgkJKDFVIDw8IDQpCisvKgorICogVGhpcyBjb21taXQgaGFzIGxlZnQgdGhlIHByaW9yaXR5IHF1ZXVlLgorICovCisjZGVmaW5lIFBPUFBFRAkJKDFVIDw8IDUpCisKK3N0YXRpYyBpbnQgbWFya2VkOworCisvKgorICogQW4gZW50cnkgaW4gdGhlIHByaW9yaXR5IHF1ZXVlLgorICovCitzdHJ1Y3QgZW50cnkgeworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCS8qCisJICogVXNlZCBvbmx5IGlmIGNvbW1pdCBpcyBub3QgQ09NTU9OLgorCSAqLworCXVpbnQxNl90IG9yaWdpbmFsX3R0bDsKKwl1aW50MTZfdCB0dGw7Cit9OworCitzdHJ1Y3QgZGF0YSB7CisJc3RydWN0IHByaW9fcXVldWUgcmV2X2xpc3Q7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2Ygbm9uLUNPTU1PTiBjb21taXRzIGluIHJldl9saXN0LgorCSAqLworCWludCBub25fY29tbW9uX3JldnM7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfLCB2b2lkICp1bnVzZWQpCit7CisJY29uc3Qgc3RydWN0IGVudHJ5ICphID0gYV87CisJY29uc3Qgc3RydWN0IGVudHJ5ICpiID0gYl87CisJcmV0dXJuIGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZShhLT5jb21taXQsIGItPmNvbW1pdCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKnJldl9saXN0X3B1c2goc3RydWN0IGRhdGEgKmRhdGEsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IG1hcmspCit7CisJc3RydWN0IGVudHJ5ICplbnRyeTsKKwljb21taXQtPm9iamVjdC5mbGFncyB8PSBtYXJrIHwgU0VFTjsKKworCWVudHJ5ID0geGNhbGxvYygxLCBzaXplb2YoKmVudHJ5KSk7CisJZW50cnktPmNvbW1pdCA9IGNvbW1pdDsKKwlwcmlvX3F1ZXVlX3B1dCgmZGF0YS0+cmV2X2xpc3QsIGVudHJ5KTsKKworCWlmICghKG1hcmsgJiBDT01NT04pKQorCQlkYXRhLT5ub25fY29tbW9uX3JldnMrKzsKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfbWFya3MoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwgcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCBvaWQpLCByZWZuYW1lLCAwKTsKKworCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJY2xlYXJfY29tbWl0X21hcmtzKChzdHJ1Y3QgY29tbWl0ICopbywKKwkJCQkgICBDT01NT04gfCBBRFZFUlRJU0VEIHwgU0VFTiB8IFBPUFBFRCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNYXJrIHRoaXMgU0VFTiBjb21taXQgYW5kIGFsbCBpdHMgU0VFTiBhbmNlc3RvcnMgYXMgQ09NTU9OLgorICovCitzdGF0aWMgdm9pZCBtYXJrX2NvbW1vbihzdHJ1Y3QgZGF0YSAqZGF0YSwgc3RydWN0IGNvbW1pdCAqYykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwlpZiAoYy0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKQorCQlyZXR1cm47CisJYy0+b2JqZWN0LmZsYWdzIHw9IENPTU1PTjsKKwlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiBQT1BQRUQpKQorCQlkYXRhLT5ub25fY29tbW9uX3JldnMtLTsKKworCWlmICghYy0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuOworCWZvciAocCA9IGMtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQkJbWFya19jb21tb24oZGF0YSwgcC0+aXRlbSk7CisJfQorfQorCisvKgorICogRW5zdXJlIHRoYXQgdGhlIHByaW9yaXR5IHF1ZXVlIGhhcyBhbiBlbnRyeSBmb3IgdG9fcHVzaCwgYW5kIGVuc3VyZSB0aGF0IHRoZQorICogZW50cnkgaGFzIHRoZSBjb3JyZWN0IGZsYWdzIGFuZCB0dGwuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDEgaWYgYW4gZW50cnkgd2FzIGZvdW5kIG9yIGNyZWF0ZWQsIGFuZCAwIG90aGVyd2lzZQorICogKGJlY2F1c2UgdGhlIGVudHJ5IGZvciB0aGlzIGNvbW1pdCBoYWQgYWxyZWFkeSBiZWVuIHBvcHBlZCkuCisgKi8KK3N0YXRpYyBpbnQgcHVzaF9wYXJlbnQoc3RydWN0IGRhdGEgKmRhdGEsIHN0cnVjdCBlbnRyeSAqZW50cnksCisJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICp0b19wdXNoKQoreworCXN0cnVjdCBlbnRyeSAqcGFyZW50X2VudHJ5OworCisJaWYgKHRvX3B1c2gtPm9iamVjdC5mbGFncyAmIFNFRU4pIHsKKwkJaW50IGk7CisJCWlmICh0b19wdXNoLT5vYmplY3QuZmxhZ3MgJiBQT1BQRUQpCisJCQkvKgorCQkJICogVGhlIGVudHJ5IGZvciB0aGlzIGNvbW1pdCBoYXMgYWxyZWFkeSBiZWVuIHBvcHBlZCwKKwkJCSAqIGR1ZSB0byBjbG9jayBza2V3LiBQcmV0ZW5kIHRoYXQgdGhpcyBwYXJlbnQgZG9lcyBub3QKKwkJCSAqIGV4aXN0LgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJLyoKKwkJICogRmluZCB0aGUgZXhpc3RpbmcgZW50cnkgYW5kIHVzZSBpdC4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5yZXZfbGlzdC5ucjsgaSsrKSB7CisJCQlwYXJlbnRfZW50cnkgPSBkYXRhLT5yZXZfbGlzdC5hcnJheVtpXS5kYXRhOworCQkJaWYgKHBhcmVudF9lbnRyeS0+Y29tbWl0ID09IHRvX3B1c2gpCisJCQkJZ290byBwYXJlbnRfZm91bmQ7CisJCX0KKwkJQlVHKCJtaXNzaW5nIHBhcmVudCBpbiBwcmlvcml0eSBxdWV1ZSIpOworcGFyZW50X2ZvdW5kOgorCQk7CisJfSBlbHNlIHsKKwkJcGFyZW50X2VudHJ5ID0gcmV2X2xpc3RfcHVzaChkYXRhLCB0b19wdXNoLCAwKTsKKwl9CisKKwlpZiAoZW50cnktPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgKENPTU1PTiB8IEFEVkVSVElTRUQpKSB7CisJCW1hcmtfY29tbW9uKGRhdGEsIHRvX3B1c2gpOworCX0gZWxzZSB7CisJCXVpbnQxNl90IG5ld19vcmlnaW5hbF90dGwgPSBlbnRyeS0+dHRsCisJCQk/IGVudHJ5LT5vcmlnaW5hbF90dGwgOiBlbnRyeS0+b3JpZ2luYWxfdHRsICogMyAvIDIgKyAxOworCQl1aW50MTZfdCBuZXdfdHRsID0gZW50cnktPnR0bAorCQkJPyBlbnRyeS0+dHRsIC0gMSA6IG5ld19vcmlnaW5hbF90dGw7CisJCWlmIChwYXJlbnRfZW50cnktPm9yaWdpbmFsX3R0bCA8IG5ld19vcmlnaW5hbF90dGwpIHsKKwkJCXBhcmVudF9lbnRyeS0+b3JpZ2luYWxfdHRsID0gbmV3X29yaWdpbmFsX3R0bDsKKwkJCXBhcmVudF9lbnRyeS0+dHRsID0gbmV3X3R0bDsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZ2V0X3JldihzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICp0b19zZW5kID0gTlVMTDsKKworCXdoaWxlICh0b19zZW5kID09IE5VTEwpIHsKKwkJc3RydWN0IGVudHJ5ICplbnRyeTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJCWludCBwYXJlbnRfcHVzaGVkID0gMDsKKworCQlpZiAoZGF0YS0+cmV2X2xpc3QubnIgPT0gMCB8fCBkYXRhLT5ub25fY29tbW9uX3JldnMgPT0gMCkKKwkJCXJldHVybiBOVUxMOworCisJCWVudHJ5ID0gcHJpb19xdWV1ZV9nZXQoJmRhdGEtPnJldl9saXN0KTsKKwkJY29tbWl0ID0gZW50cnktPmNvbW1pdDsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUE9QUEVEOworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikpCisJCQlkYXRhLT5ub25fY29tbW9uX3JldnMtLTsKKworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikgJiYgIWVudHJ5LT50dGwpCisJCQl0b19zZW5kID0gY29tbWl0OworCisJCXBhcnNlX2NvbW1pdChjb21taXQpOworCQlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJcGFyZW50X3B1c2hlZCB8PSBwdXNoX3BhcmVudChkYXRhLCBlbnRyeSwgcC0+aXRlbSk7CisKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT04pICYmICFwYXJlbnRfcHVzaGVkKQorCQkJLyoKKwkJCSAqIFRoaXMgY29tbWl0IGhhcyBubyBwYXJlbnRzLCBvciBhbGwgb2YgaXRzIHBhcmVudHMKKwkJCSAqIGhhdmUgYWxyZWFkeSBiZWVuIHBvcHBlZCAoZHVlIHRvIGNsb2NrIHNrZXcpLCBzbyBzZW5kCisJCQkgKiBpdCBhbnl3YXkuCisJCQkgKi8KKwkJCXRvX3NlbmQgPSBjb21taXQ7CisKKwkJZnJlZShlbnRyeSk7CisJfQorCisJcmV0dXJuICZ0b19zZW5kLT5vYmplY3Qub2lkOworfQorCitzdGF0aWMgdm9pZCBrbm93bl9jb21tb24oc3RydWN0IGZldGNoX25lZ290aWF0b3IgKm4sIHN0cnVjdCBjb21taXQgKmMpCit7CisJaWYgKGMtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCXJldHVybjsKKwlyZXZfbGlzdF9wdXNoKG4tPmRhdGEsIGMsIEFEVkVSVElTRUQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfdGlwKHN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuLCBzdHJ1Y3QgY29tbWl0ICpjKQoreworCW4tPmtub3duX2NvbW1vbiA9IE5VTEw7CisJaWYgKGMtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCXJldHVybjsKKwlyZXZfbGlzdF9wdXNoKG4tPmRhdGEsIGMsIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV4dChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbikKK3sKKwluLT5rbm93bl9jb21tb24gPSBOVUxMOworCW4tPmFkZF90aXAgPSBOVUxMOworCXJldHVybiBnZXRfcmV2KG4tPmRhdGEpOworfQorCitzdGF0aWMgaW50IGFjayhzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbiwgc3RydWN0IGNvbW1pdCAqYykKK3sKKwlpbnQga25vd25fdG9fYmVfY29tbW9uID0gISEoYy0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKTsKKwlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkKKwkJZGllKCJyZWNlaXZlZCBhY2sgZm9yIGNvbW1pdCAlcyBub3Qgc2VudCBhcyAnaGF2ZSdcbiIsCisJCSAgICBvaWRfdG9faGV4KCZjLT5vYmplY3Qub2lkKSk7CisJbWFya19jb21tb24obi0+ZGF0YSwgYyk7CisJcmV0dXJuIGtub3duX3RvX2JlX2NvbW1vbjsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZShzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbikKK3sKKwljbGVhcl9wcmlvX3F1ZXVlKCYoKHN0cnVjdCBkYXRhICopbi0+ZGF0YSktPnJldl9saXN0KTsKKwlGUkVFX0FORF9OVUxMKG4tPmRhdGEpOworfQorCit2b2lkIHNraXBwaW5nX25lZ290aWF0b3JfaW5pdChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcikKK3sKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwluZWdvdGlhdG9yLT5rbm93bl9jb21tb24gPSBrbm93bl9jb21tb247CisJbmVnb3RpYXRvci0+YWRkX3RpcCA9IGFkZF90aXA7CisJbmVnb3RpYXRvci0+bmV4dCA9IG5leHQ7CisJbmVnb3RpYXRvci0+YWNrID0gYWNrOworCW5lZ290aWF0b3ItPnJlbGVhc2UgPSByZWxlYXNlOworCW5lZ290aWF0b3ItPmRhdGEgPSBkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwlkYXRhLT5yZXZfbGlzdC5jb21wYXJlID0gY29tcGFyZTsKKworCWlmIChtYXJrZWQpCisJCWZvcl9lYWNoX3JlZihjbGVhcl9tYXJrcywgTlVMTCk7CisJbWFya2VkID0gMTsKK30KZGlmZiAtLWdpdCBhL25lZ290aWF0b3Ivc2tpcHBpbmcuaCBiL25lZ290aWF0b3Ivc2tpcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2RmYTZjCi0tLSAvZGV2L251bGwKKysrIGIvbmVnb3RpYXRvci9za2lwcGluZy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBORUdPVElBVE9SX1NLSVBQSU5HX0gKKyNkZWZpbmUgTkVHT1RJQVRPUl9TS0lQUElOR19ICisKK3N0cnVjdCBmZXRjaF9uZWdvdGlhdG9yOworCit2b2lkIHNraXBwaW5nX25lZ290aWF0b3JfaW5pdChzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciAqbmVnb3RpYXRvcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbm90ZXMtY2FjaGUuYyBiL25vdGVzLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3MzMxNAotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLWNhY2hlLmMKQEAgLTAsMCArMSw5OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibm90ZXMtY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorCitzdGF0aWMgaW50IG5vdGVzX2NhY2hlX21hdGNoX3ZhbGlkaXR5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZiwKKwkJCQkgICAgICBjb25zdCBjaGFyICp2YWxpZGl0eSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHByZXR0eV9jdHg7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJaWYgKHJlYWRfcmVmKHJlZiwgJm9pZCkgPCAwKQorCQlyZXR1cm4gMDsKKworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyLCAmb2lkLCAxKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnByZXR0eV9jdHgsIDAsIHNpemVvZihwcmV0dHlfY3R4KSk7CisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiVzIiwgJm1zZywgJnByZXR0eV9jdHgpOworCXN0cmJ1Zl90cmltKCZtc2cpOworCisJcmV0ID0gIXN0cmNtcChtc2cuYnVmLCB2YWxpZGl0eSk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG5vdGVzX2NhY2hlX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBub3Rlc19jYWNoZSAqYywKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsaWRpdHkpCit7CisJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZmxhZ3MgPSBOT1RFU19JTklUX1dSSVRBQkxFOworCisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCWMtPnZhbGlkaXR5ID0geHN0cmR1cCh2YWxpZGl0eSk7CisKKwlzdHJidWZfYWRkZigmcmVmLCAicmVmcy9ub3Rlcy8lcyIsIG5hbWUpOworCWlmICghbm90ZXNfY2FjaGVfbWF0Y2hfdmFsaWRpdHkociwgcmVmLmJ1ZiwgdmFsaWRpdHkpKQorCQlmbGFncyB8PSBOT1RFU19JTklUX0VNUFRZOworCWluaXRfbm90ZXMoJmMtPnRyZWUsIHJlZi5idWYsIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlLCBmbGFncyk7CisJc3RyYnVmX3JlbGVhc2UoJnJlZik7Cit9CisKK2ludCBub3Rlc19jYWNoZV93cml0ZShzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMpCit7CisJc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZCwgY29tbWl0X29pZDsKKworCWlmICghYyB8fCAhYy0+dHJlZS5pbml0aWFsaXplZCB8fCAhYy0+dHJlZS51cGRhdGVfcmVmIHx8CisJICAgICEqYy0+dHJlZS51cGRhdGVfcmVmKQorCQlyZXR1cm4gLTE7CisJaWYgKCFjLT50cmVlLmRpcnR5KQorCQlyZXR1cm4gMDsKKworCWlmICh3cml0ZV9ub3Rlc190cmVlKCZjLT50cmVlLCAmdHJlZV9vaWQpKQorCQlyZXR1cm4gLTE7CisJaWYgKGNvbW1pdF90cmVlKGMtPnZhbGlkaXR5LCBzdHJsZW4oYy0+dmFsaWRpdHkpLCAmdHJlZV9vaWQsIE5VTEwsCisJCQkmY29tbWl0X29pZCwgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKHVwZGF0ZV9yZWYoInVwZGF0ZSBub3RlcyBjYWNoZSIsIGMtPnRyZWUudXBkYXRlX3JlZiwgJmNvbW1pdF9vaWQsCisJCSAgICAgICBOVUxMLCAwLCBVUERBVEVfUkVGU19RVUlFVF9PTl9FUlIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKm5vdGVzX2NhY2hlX2dldChzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsIHN0cnVjdCBvYmplY3RfaWQgKmtleV9vaWQsCisJCSAgICAgIHNpemVfdCAqb3V0c2l6ZSkKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp2YWx1ZV9vaWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKnZhbHVlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXZhbHVlX29pZCA9IGdldF9ub3RlKCZjLT50cmVlLCBrZXlfb2lkKTsKKwlpZiAoIXZhbHVlX29pZCkKKwkJcmV0dXJuIE5VTEw7CisJdmFsdWUgPSByZWFkX29iamVjdF9maWxlKHZhbHVlX29pZCwgJnR5cGUsICZzaXplKTsKKworCSpvdXRzaXplID0gc2l6ZTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK2ludCBub3Rlc19jYWNoZV9wdXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCBzdHJ1Y3Qgb2JqZWN0X2lkICprZXlfb2lkLAorCQkgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IG9iamVjdF9pZCB2YWx1ZV9vaWQ7CisKKwlpZiAod3JpdGVfb2JqZWN0X2ZpbGUoZGF0YSwgc2l6ZSwgImJsb2IiLCAmdmFsdWVfb2lkKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gYWRkX25vdGUoJmMtPnRyZWUsIGtleV9vaWQsICZ2YWx1ZV9vaWQsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbm90ZXMtY2FjaGUuaCBiL25vdGVzLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmOGM5OAotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLWNhY2hlLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBOT1RFU19DQUNIRV9ICisjZGVmaW5lIE5PVEVTX0NBQ0hFX0gKKworI2luY2x1ZGUgIm5vdGVzLmgiCisKK3N0cnVjdCByZXBvc2l0b3J5OworCitzdHJ1Y3Qgbm90ZXNfY2FjaGUgeworCXN0cnVjdCBub3Rlc190cmVlIHRyZWU7CisJY2hhciAqdmFsaWRpdHk7Cit9OworCit2b2lkIG5vdGVzX2NhY2hlX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBub3Rlc19jYWNoZSAqYywKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsaWRpdHkpOworaW50IG5vdGVzX2NhY2hlX3dyaXRlKHN0cnVjdCBub3Rlc19jYWNoZSAqYyk7CisKK2NoYXIgKm5vdGVzX2NhY2hlX2dldChzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgc2l6ZV90CisJCSAgICAgICpvdXRzaXplKTsKK2ludCBub3Rlc19jYWNoZV9wdXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAvKiBOT1RFU19DQUNIRV9IICovCmRpZmYgLS1naXQgYS9ub3Rlcy1tZXJnZS5jIGIvbm90ZXMtbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmU3MjRmCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtbWVyZ2UuYwpAQCAtMCwwICsxLDc1NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAibm90ZXMtbWVyZ2UuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJub3Rlcy11dGlscy5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorCitzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciB7CisJc3RydWN0IG9iamVjdF9pZCBvYmosIGJhc2UsIGxvY2FsLCByZW1vdGU7Cit9OworCit2b2lkIGluaXRfbm90ZXNfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgIHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQoreworCW1lbXNldChvLCAwLCBzaXplb2Yoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMpKTsKKwlzdHJidWZfaW5pdCgmKG8tPmNvbW1pdF9tc2cpLCAwKTsKKwlvLT52ZXJib3NpdHkgPSBOT1RFU19NRVJHRV9WRVJCT1NJVFlfREVGQVVMVDsKKwlvLT5yZXBvID0gcjsKK30KKworc3RhdGljIGludCBwYXRoX3RvX29pZChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY2hhciBoZXhfb2lkW0dJVF9NQVhfSEVYU1pdOworCWludCBpID0gMDsKKwl3aGlsZSAoKnBhdGggJiYgaSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6KSB7CisJCWlmICgqcGF0aCAhPSAnLycpCisJCQloZXhfb2lkW2krK10gPSAqcGF0aDsKKwkJcGF0aCsrOworCX0KKwlpZiAoKnBhdGggfHwgaSAhPSB0aGVfaGFzaF9hbGdvLT5oZXhzeikKKwkJcmV0dXJuIC0xOworCXJldHVybiBnZXRfb2lkX2hleChoZXhfb2lkLCBvaWQpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9ub3Rlc19maWxlcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJY2FzZSBESUZGX1NUQVRVU19NT0RJRklFRDoKKwkJYXNzZXJ0KHAtPm9uZS0+bW9kZSA9PSBwLT50d28tPm1vZGUpOworCQlhc3NlcnQoIWlzX251bGxfb2lkKCZwLT5vbmUtPm9pZCkpOworCQlhc3NlcnQoIWlzX251bGxfb2lkKCZwLT50d28tPm9pZCkpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX0FEREVEOgorCQlhc3NlcnQoaXNfbnVsbF9vaWQoJnAtPm9uZS0+b2lkKSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKKwkJYXNzZXJ0KGlzX251bGxfb2lkKCZwLT50d28tPm9pZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCWFzc2VydCghc3RyY21wKHAtPm9uZS0+cGF0aCwgcC0+dHdvLT5wYXRoKSk7CisJcmV0dXJuIHBhdGhfdG9fb2lkKHAtPm9uZS0+cGF0aCwgb2lkKTsKK30KKworc3RhdGljIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpmaW5kX25vdGVzX21lcmdlX3BhaXJfcG9zKAorCQlzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqbGlzdCwgaW50IGxlbiwgc3RydWN0IG9iamVjdF9pZCAqb2JqLAorCQlpbnQgaW5zZXJ0X25ldywgaW50ICpvY2N1cGllZCkKK3sKKwkvKgorCSAqIEJvdGggZGlmZl90cmVlX3JlbW90ZSgpIGFuZCBkaWZmX3RyZWVfbG9jYWwoKSB0ZW5kIHRvIHByb2Nlc3MKKwkgKiBtZXJnZV9wYWlycyBpbiBhc2NlbmRpbmcgb3JkZXIuIFRoZXJlZm9yZSwgY2FjaGUgbGFzdCByZXR1cm5lZAorCSAqIGluZGV4LCBhbmQgc2VhcmNoIHNlcXVlbnRpYWxseSBmcm9tIHRoZXJlIHVudGlsIHRoZSBhcHByb3ByaWF0ZQorCSAqIHBvc2l0aW9uIGlzIGZvdW5kLgorCSAqCisJICogU2luY2UgaW5zZXJ0cyBvbmx5IGhhcHBlbiBmcm9tIGRpZmZfdHJlZV9yZW1vdGUoKSAod2hpY2ggbWFpbmx5CisJICogX2FwcGVuZHNfKSwgd2UgZG9uJ3QgY2FyZSB0aGF0IGluc2VydGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgdGhlCisJICogbGlzdCBpcyBleHBlbnNpdmUgKHVzaW5nIG1lbW1vdmUoKSkuCisJICovCisJc3RhdGljIGludCBsYXN0X2luZGV4OworCWludCBpID0gbGFzdF9pbmRleCA8IGxlbiA/IGxhc3RfaW5kZXggOiBsZW4gLSAxOworCWludCBwcmV2X2NtcCA9IDAsIGNtcCA9IC0xOworCXdoaWxlIChpID49IDAgJiYgaSA8IGxlbikgeworCQljbXAgPSBvaWRjbXAob2JqLCAmbGlzdFtpXS5vYmopOworCQlpZiAoIWNtcCkgLyogb2JqIGJlbG9uZ3MgQCBpICovCisJCQlicmVhazsKKwkJZWxzZSBpZiAoY21wIDwgMCAmJiBwcmV2X2NtcCA8PSAwKSAvKiBvYmogYmVsb25ncyA8IGkgKi8KKwkJCWktLTsKKwkJZWxzZSBpZiAoY21wIDwgMCkgLyogb2JqIGJlbG9uZ3MgYmV0d2VlbiBpLTEgYW5kIGkgKi8KKwkJCWJyZWFrOworCQllbHNlIGlmIChjbXAgPiAwICYmIHByZXZfY21wID49IDApIC8qIG9iaiBiZWxvbmdzID4gaSAqLworCQkJaSsrOworCQllbHNlIC8qIGlmIChjbXAgPiAwKSAqLyB7IC8qIG9iaiBiZWxvbmdzIGJldHdlZW4gaSBhbmQgaSsxICovCisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQlwcmV2X2NtcCA9IGNtcDsKKwl9CisJaWYgKGkgPCAwKQorCQlpID0gMDsKKwkvKiBvYmogYmVsb25ncyBhdCwgb3IgaW1tZWRpYXRlbHkgcHJlY2VkaW5nLCBpbmRleCBpICgwIDw9IGkgPD0gbGVuKSAqLworCisJaWYgKCFjbXApCisJCSpvY2N1cGllZCA9IDE7CisJZWxzZSB7CisJCSpvY2N1cGllZCA9IDA7CisJCWlmIChpbnNlcnRfbmV3ICYmIGkgPCBsZW4pIHsKKwkJCU1PVkVfQVJSQVkobGlzdCArIGkgKyAxLCBsaXN0ICsgaSwgbGVuIC0gaSk7CisJCQltZW1zZXQobGlzdCArIGksIDAsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpcikpOworCQl9CisJfQorCWxhc3RfaW5kZXggPSBpOworCXJldHVybiBsaXN0ICsgaTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfaWQgdW5pbml0aWFsaXplZCA9IHsKKwkiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZiIgXAorCSJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIgorfTsKKworc3RhdGljIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpkaWZmX3RyZWVfcmVtb3RlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmJhc2UsCisJCQkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcmVtb3RlLAorCQkJCQkJIGludCAqbnVtX2NoYW5nZXMpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHQ7CisJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmNoYW5nZXM7CisJaW50IGksIGxlbiA9IDA7CisKKwl0cmFjZV9wcmludGYoIlx0ZGlmZl90cmVlX3JlbW90ZShiYXNlID0gJS43cywgcmVtb3RlID0gJS43cylcbiIsCisJICAgICAgIG9pZF90b19oZXgoYmFzZSksIG9pZF90b19oZXgocmVtb3RlKSk7CisKKwlyZXBvX2RpZmZfc2V0dXAoby0+cmVwbywgJm9wdCk7CisJb3B0LmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJZGlmZl9zZXR1cF9kb25lKCZvcHQpOworCWRpZmZfdHJlZV9vaWQoYmFzZSwgcmVtb3RlLCAiIiwgJm9wdCk7CisJZGlmZmNvcmVfc3RkKCZvcHQpOworCisJY2hhbmdlcyA9IHhjYWxsb2MoZGlmZl9xdWV1ZWRfZGlmZi5uciwgc2l6ZW9mKHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKm1wOworCQlpbnQgb2NjdXBpZWQ7CisJCXN0cnVjdCBvYmplY3RfaWQgb2JqOworCisJCWlmICh2ZXJpZnlfbm90ZXNfZmlsZXBhaXIocCwgJm9iaikpIHsKKwkJCXRyYWNlX3ByaW50ZigiXHRcdENhbm5vdCBtZXJnZSBlbnRyeSAnJXMnICglYyk6ICIKKwkJCSAgICAgICAiJS43cyAtPiAlLjdzLiBTa2lwcGluZyFcbiIsIHAtPm9uZS0+cGF0aCwKKwkJCSAgICAgICBwLT5zdGF0dXMsIG9pZF90b19oZXgoJnAtPm9uZS0+b2lkKSwKKwkJCSAgICAgICBvaWRfdG9faGV4KCZwLT50d28tPm9pZCkpOworCQkJY29udGludWU7CisJCX0KKwkJbXAgPSBmaW5kX25vdGVzX21lcmdlX3BhaXJfcG9zKGNoYW5nZXMsIGxlbiwgJm9iaiwgMSwgJm9jY3VwaWVkKTsKKwkJaWYgKG9jY3VwaWVkKSB7CisJCQkvKiBXZSd2ZSBmb3VuZCBhbiBhZGRpdGlvbi9kZWxldGlvbiBwYWlyICovCisJCQlhc3NlcnQob2lkZXEoJm1wLT5vYmosICZvYmopKTsKKwkJCWlmIChpc19udWxsX29pZCgmcC0+b25lLT5vaWQpKSB7IC8qIGFkZGl0aW9uICovCisJCQkJYXNzZXJ0KGlzX251bGxfb2lkKCZtcC0+cmVtb3RlKSk7CisJCQkJb2lkY3B5KCZtcC0+cmVtb3RlLCAmcC0+dHdvLT5vaWQpOworCQkJfSBlbHNlIGlmIChpc19udWxsX29pZCgmcC0+dHdvLT5vaWQpKSB7IC8qIGRlbGV0aW9uICovCisJCQkJYXNzZXJ0KGlzX251bGxfb2lkKCZtcC0+YmFzZSkpOworCQkJCW9pZGNweSgmbXAtPmJhc2UsICZwLT5vbmUtPm9pZCk7CisJCQl9IGVsc2UKKwkJCQlhc3NlcnQoISJJbnZhbGlkIGV4aXN0aW5nIGNoYW5nZSByZWNvcmRlZCIpOworCQl9IGVsc2UgeworCQkJb2lkY3B5KCZtcC0+b2JqLCAmb2JqKTsKKwkJCW9pZGNweSgmbXAtPmJhc2UsICZwLT5vbmUtPm9pZCk7CisJCQlvaWRjcHkoJm1wLT5sb2NhbCwgJnVuaW5pdGlhbGl6ZWQpOworCQkJb2lkY3B5KCZtcC0+cmVtb3RlLCAmcC0+dHdvLT5vaWQpOworCQkJbGVuKys7CisJCX0KKwkJdHJhY2VfcHJpbnRmKCJcdFx0U3RvcmVkIHJlbW90ZSBjaGFuZ2UgZm9yICVzOiAlLjdzIC0+ICUuN3NcbiIsCisJCSAgICAgICBvaWRfdG9faGV4KCZtcC0+b2JqKSwgb2lkX3RvX2hleCgmbXAtPmJhc2UpLAorCQkgICAgICAgb2lkX3RvX2hleCgmbXAtPnJlbW90ZSkpOworCX0KKwlkaWZmX2ZsdXNoKCZvcHQpOworCWNsZWFyX3BhdGhzcGVjKCZvcHQucGF0aHNwZWMpOworCisJKm51bV9jaGFuZ2VzID0gbGVuOworCXJldHVybiBjaGFuZ2VzOworfQorCitzdGF0aWMgdm9pZCBkaWZmX3RyZWVfbG9jYWwoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkgICAgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmNoYW5nZXMsIGludCBsZW4sCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpsb2NhbCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdDsKKwlpbnQgaTsKKworCXRyYWNlX3ByaW50ZigiXHRkaWZmX3RyZWVfbG9jYWwobGVuID0gJWksIGJhc2UgPSAlLjdzLCBsb2NhbCA9ICUuN3MpXG4iLAorCSAgICAgICBsZW4sIG9pZF90b19oZXgoYmFzZSksIG9pZF90b19oZXgobG9jYWwpKTsKKworCXJlcG9fZGlmZl9zZXR1cChvLT5yZXBvLCAmb3B0KTsKKwlvcHQuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX3NldHVwX2RvbmUoJm9wdCk7CisJZGlmZl90cmVlX29pZChiYXNlLCBsb2NhbCwgIiIsICZvcHQpOworCWRpZmZjb3JlX3N0ZCgmb3B0KTsKKworCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldOworCQlzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqbXA7CisJCWludCBtYXRjaDsKKwkJc3RydWN0IG9iamVjdF9pZCBvYmo7CisKKwkJaWYgKHZlcmlmeV9ub3Rlc19maWxlcGFpcihwLCAmb2JqKSkgeworCQkJdHJhY2VfcHJpbnRmKCJcdFx0Q2Fubm90IG1lcmdlIGVudHJ5ICclcycgKCVjKTogIgorCQkJICAgICAgICIlLjdzIC0+ICUuN3MuIFNraXBwaW5nIVxuIiwgcC0+b25lLT5wYXRoLAorCQkJICAgICAgIHAtPnN0YXR1cywgb2lkX3RvX2hleCgmcC0+b25lLT5vaWQpLAorCQkJICAgICAgIG9pZF90b19oZXgoJnAtPnR3by0+b2lkKSk7CisJCQljb250aW51ZTsKKwkJfQorCQltcCA9IGZpbmRfbm90ZXNfbWVyZ2VfcGFpcl9wb3MoY2hhbmdlcywgbGVuLCAmb2JqLCAwLCAmbWF0Y2gpOworCQlpZiAoIW1hdGNoKSB7CisJCQl0cmFjZV9wcmludGYoIlx0XHRJZ25vcmluZyBsb2NhbC1vbmx5IGNoYW5nZSBmb3IgJXM6ICIKKwkJCSAgICAgICAiJS43cyAtPiAlLjdzXG4iLCBvaWRfdG9faGV4KCZvYmopLAorCQkJICAgICAgIG9pZF90b19oZXgoJnAtPm9uZS0+b2lkKSwKKwkJCSAgICAgICBvaWRfdG9faGV4KCZwLT50d28tPm9pZCkpOworCQkJY29udGludWU7CisJCX0KKworCQlhc3NlcnQob2lkZXEoJm1wLT5vYmosICZvYmopKTsKKwkJaWYgKGlzX251bGxfb2lkKCZwLT50d28tPm9pZCkpIHsgLyogZGVsZXRpb24gKi8KKwkJCS8qCisJCQkgKiBFaXRoZXIgdGhpcyBpcyBhIHRydWUgZGVsZXRpb24gKDEpLCBvciBpdCBpcyBwYXJ0CisJCQkgKiBvZiBhbiBBL0QgcGFpciAoMiksIG9yIEQvQSBwYWlyICgzKToKKwkJCSAqCisJCQkgKiAoMSkgbXAtPmxvY2FsIGlzIHVuaW5pdGlhbGl6ZWQ7IHNldCBpdCB0byBudWxsX3NoYTEKKwkJCSAqICgyKSBtcC0+bG9jYWwgaXMgbm90IHVuaW5pdGlhbGl6ZWQ7IGRvbid0IHRvdWNoIGl0CisJCQkgKiAoMykgbXAtPmxvY2FsIGlzIHVuaW5pdGlhbGl6ZWQ7IHNldCBpdCB0byBudWxsX3NoYTEKKwkJCSAqICAgICAod2lsbCBiZSBvdmVyd3JpdHRlbiBieSBmb2xsb3dpbmcgYWRkaXRpb24pCisJCQkgKi8KKwkJCWlmIChvaWRlcSgmbXAtPmxvY2FsLCAmdW5pbml0aWFsaXplZCkpCisJCQkJb2lkY2xyKCZtcC0+bG9jYWwpOworCQl9IGVsc2UgaWYgKGlzX251bGxfb2lkKCZwLT5vbmUtPm9pZCkpIHsgLyogYWRkaXRpb24gKi8KKwkJCS8qCisJCQkgKiBFaXRoZXIgdGhpcyBpcyBhIHRydWUgYWRkaXRpb24gKDEpLCBvciBpdCBpcyBwYXJ0CisJCQkgKiBvZiBhbiBBL0QgcGFpciAoMiksIG9yIEQvQSBwYWlyICgzKToKKwkJCSAqCisJCQkgKiAoMSkgbXAtPmxvY2FsIGlzIHVuaW5pdGlhbGl6ZWQ7IHNldCB0byBwLT50d28tPnNoYTEKKwkJCSAqICgyKSBtcC0+bG9jYWwgaXMgdW5pbml0aWFsaXplZDsgc2V0IHRvIHAtPnR3by0+c2hhMQorCQkJICogKDMpIG1wLT5sb2NhbCBpcyBudWxsX3NoYTE7ICAgICBzZXQgdG8gcC0+dHdvLT5zaGExCisJCQkgKi8KKwkJCWFzc2VydChpc19udWxsX29pZCgmbXAtPmxvY2FsKSB8fAorCQkJICAgICAgIG9pZGVxKCZtcC0+bG9jYWwsICZ1bmluaXRpYWxpemVkKSk7CisJCQlvaWRjcHkoJm1wLT5sb2NhbCwgJnAtPnR3by0+b2lkKTsKKwkJfSBlbHNlIHsgLyogbW9kaWZpY2F0aW9uICovCisJCQkvKgorCQkJICogVGhpcyBpcyBhIHRydWUgbW9kaWZpY2F0aW9uLiBwLT5vbmUtPnNoYTEgc2hhbGwKKwkJCSAqIG1hdGNoIG1wLT5iYXNlLCBhbmQgbXAtPmxvY2FsIHNoYWxsIGJlIHVuaW5pdGlhbGl6ZWQuCisJCQkgKiBTZXQgbXAtPmxvY2FsIHRvIHAtPnR3by0+c2hhMS4KKwkJCSAqLworCQkJYXNzZXJ0KG9pZGVxKCZwLT5vbmUtPm9pZCwgJm1wLT5iYXNlKSk7CisJCQlhc3NlcnQob2lkZXEoJm1wLT5sb2NhbCwgJnVuaW5pdGlhbGl6ZWQpKTsKKwkJCW9pZGNweSgmbXAtPmxvY2FsLCAmcC0+dHdvLT5vaWQpOworCQl9CisJCXRyYWNlX3ByaW50ZigiXHRcdFN0b3JlZCBsb2NhbCBjaGFuZ2UgZm9yICVzOiAlLjdzIC0+ICUuN3NcbiIsCisJCSAgICAgICBvaWRfdG9faGV4KCZtcC0+b2JqKSwgb2lkX3RvX2hleCgmbXAtPmJhc2UpLAorCQkgICAgICAgb2lkX3RvX2hleCgmbXAtPmxvY2FsKSk7CisJfQorCWRpZmZfZmx1c2goJm9wdCk7CisJY2xlYXJfcGF0aHNwZWMoJm9wdC5wYXRoc3BlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX25vdGVzX21lcmdlX3dvcmt0cmVlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQoreworCWlmICghby0+aGFzX3dvcmt0cmVlKSB7CisJCS8qCisJCSAqIE11c3QgZXN0YWJsaXNoIE5PVEVTX01FUkdFX1dPUktUUkVFLgorCQkgKiBBYm9ydCBpZiBOT1RFU19NRVJHRV9XT1JLVFJFRSBhbHJlYWR5IGV4aXN0cworCQkgKi8KKwkJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSkgJiYKKwkJICAgICFpc19lbXB0eV9kaXIoZ2l0X3BhdGgoTk9URVNfTUVSR0VfV09SS1RSRUUpKSkgeworCQkJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkJCWRpZShfKCJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgcHJldmlvdXMgIgorCQkJCSAgICAibm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuXG5QbGVhc2UsIHVzZSAiCisJCQkJICAgICInZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzICIKKwkJCQkgICAgIm1lcmdlIC0tYWJvcnQnIHRvIGNvbW1pdC9hYm9ydCB0aGUgIgorCQkJCSAgICAicHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyAiCisJCQkJICAgICJub3RlcyBtZXJnZS4iKSwgZ2l0X3BhdGgoIk5PVEVTX01FUkdFXyoiKSk7CisJCQllbHNlCisJCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAiCisJCQkJICAgICIoJXMgZXhpc3RzKS4iKSwgZ2l0X3BhdGgoIk5PVEVTX01FUkdFXyoiKSk7CisJCX0KKworCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChnaXRfcGF0aCgKKwkJCQlOT1RFU19NRVJHRV9XT1JLVFJFRSAiLy50ZXN0IikpKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIsCisJCQkJICBnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworCQlvLT5oYXNfd29ya3RyZWUgPSAxOworCX0gZWxzZSBpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSkpCisJCS8qIE5PVEVTX01FUkdFX1dPUktUUkVFIHNob3VsZCBhbHJlYWR5IGJlIGVzdGFibGlzaGVkICovCisJCWRpZSgibWlzc2luZyAnJXMnLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuIiwKKwkJICAgIGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2J1Zl90b193b3JrdHJlZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmosCisJCQkJICBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgZmQ7CisJY2hhciAqcGF0aCA9IGdpdF9wYXRoZHVwKE5PVEVTX01FUkdFX1dPUktUUkVFICIvJXMiLCBvaWRfdG9faGV4KG9iaikpOworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHBhdGgpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIiwgcGF0aCk7CisKKwlmZCA9IHhvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19FWENMIHwgT19DUkVBVCwgMDY2Nik7CisKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJc3NpemVfdCByZXQgPSB3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHNpemUpOworCQlpZiAocmV0IDwgMCkgeworCQkJLyogSWdub3JlIGVwaXBlICovCisJCQlpZiAoZXJybm8gPT0gRVBJUEUpCisJCQkJYnJlYWs7CisJCQlkaWVfZXJybm8oIm5vdGVzLW1lcmdlIik7CisJCX0KKwkJc2l6ZSAtPSByZXQ7CisJCWJ1ZiArPSByZXQ7CisJfQorCisJY2xvc2UoZmQpOworCWZyZWUocGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX25vdGVfdG9fd29ya3RyZWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGUpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl2b2lkICpidWYgPSByZWFkX29iamVjdF9maWxlKG5vdGUsICZ0eXBlLCAmc2l6ZSk7CisKKwlpZiAoIWJ1ZikKKwkJZGllKCJjYW5ub3QgcmVhZCBub3RlICVzIGZvciBvYmplY3QgJXMiLAorCQkgICAgb2lkX3RvX2hleChub3RlKSwgb2lkX3RvX2hleChvYmopKTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJibG9iIGV4cGVjdGVkIGluIG5vdGUgJXMgZm9yIG9iamVjdCAlcyIsCisJCSAgICBvaWRfdG9faGV4KG5vdGUpLCBvaWRfdG9faGV4KG9iaikpOworCXdyaXRlX2J1Zl90b193b3JrdHJlZShvYmosIGJ1Ziwgc2l6ZSk7CisJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IGxsX21lcmdlX2luX3dvcmt0cmVlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpwKQoreworCW1tYnVmZmVyX3QgcmVzdWx0X2J1ZjsKKwltbWZpbGVfdCBiYXNlLCBsb2NhbCwgcmVtb3RlOworCWludCBzdGF0dXM7CisKKwlyZWFkX21tYmxvYigmYmFzZSwgJnAtPmJhc2UpOworCXJlYWRfbW1ibG9iKCZsb2NhbCwgJnAtPmxvY2FsKTsKKwlyZWFkX21tYmxvYigmcmVtb3RlLCAmcC0+cmVtb3RlKTsKKworCXN0YXR1cyA9IGxsX21lcmdlKCZyZXN1bHRfYnVmLCBvaWRfdG9faGV4KCZwLT5vYmopLCAmYmFzZSwgTlVMTCwKKwkJCSAgJmxvY2FsLCBvLT5sb2NhbF9yZWYsICZyZW1vdGUsIG8tPnJlbW90ZV9yZWYsCisJCQkgIG8tPnJlcG8tPmluZGV4LCBOVUxMKTsKKworCWZyZWUoYmFzZS5wdHIpOworCWZyZWUobG9jYWwucHRyKTsKKwlmcmVlKHJlbW90ZS5wdHIpOworCisJaWYgKChzdGF0dXMgPCAwKSB8fCAhcmVzdWx0X2J1Zi5wdHIpCisJCWRpZSgiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiKTsKKworCXdyaXRlX2J1Zl90b193b3JrdHJlZSgmcC0+b2JqLCByZXN1bHRfYnVmLnB0ciwgcmVzdWx0X2J1Zi5zaXplKTsKKwlmcmVlKHJlc3VsdF9idWYucHRyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2Vfb25lX2NoYW5nZV9tYW51YWwoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkJICAgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKnAsCisJCQkJICAgc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJY29uc3QgY2hhciAqbHJlZiA9IG8tPmxvY2FsX3JlZiA/IG8tPmxvY2FsX3JlZiA6ICJsb2NhbCB2ZXJzaW9uIjsKKwljb25zdCBjaGFyICpycmVmID0gby0+cmVtb3RlX3JlZiA/IG8tPnJlbW90ZV9yZWYgOiAicmVtb3RlIHZlcnNpb24iOworCisJdHJhY2VfcHJpbnRmKCJcdFx0XHRtZXJnZV9vbmVfY2hhbmdlX21hbnVhbChvYmogPSAlLjdzLCBiYXNlID0gJS43cywgIgorCSAgICAgICAibG9jYWwgPSAlLjdzLCByZW1vdGUgPSAlLjdzKVxuIiwKKwkgICAgICAgb2lkX3RvX2hleCgmcC0+b2JqKSwgb2lkX3RvX2hleCgmcC0+YmFzZSksCisJICAgICAgIG9pZF90b19oZXgoJnAtPmxvY2FsKSwgb2lkX3RvX2hleCgmcC0+cmVtb3RlKSk7CisKKwkvKiBhZGQgIkNvbmZsaWN0czoiIHNlY3Rpb24gdG8gY29tbWl0IG1lc3NhZ2UgZmlyc3QgdGltZSB0aHJvdWdoICovCisJaWYgKCFvLT5oYXNfd29ya3RyZWUpCisJCXN0cmJ1Zl9hZGRzdHIoJihvLT5jb21taXRfbXNnKSwgIlxuXG5Db25mbGljdHM6XG4iKTsKKworCXN0cmJ1Zl9hZGRmKCYoby0+Y29tbWl0X21zZyksICJcdCVzXG4iLCBvaWRfdG9faGV4KCZwLT5vYmopKTsKKworCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJcHJpbnRmKCJBdXRvLW1lcmdpbmcgbm90ZXMgZm9yICVzXG4iLCBvaWRfdG9faGV4KCZwLT5vYmopKTsKKwljaGVja19ub3Rlc19tZXJnZV93b3JrdHJlZShvKTsKKwlpZiAoaXNfbnVsbF9vaWQoJnAtPmxvY2FsKSkgeworCQkvKiBEL0YgY29uZmxpY3QsIGNoZWNrb3V0IHAtPnJlbW90ZSAqLworCQlhc3NlcnQoIWlzX251bGxfb2lkKCZwLT5yZW1vdGUpKTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAxKQorCQkJcHJpbnRmKCJDT05GTElDVCAoZGVsZXRlL21vZGlmeSk6IE5vdGVzIGZvciBvYmplY3QgJXMgIgorCQkJCSJkZWxldGVkIGluICVzIGFuZCBtb2RpZmllZCBpbiAlcy4gVmVyc2lvbiBmcm9tICVzICIKKwkJCQkibGVmdCBpbiB0cmVlLlxuIiwKKwkJCQlvaWRfdG9faGV4KCZwLT5vYmopLCBscmVmLCBycmVmLCBycmVmKTsKKwkJd3JpdGVfbm90ZV90b193b3JrdHJlZSgmcC0+b2JqLCAmcC0+cmVtb3RlKTsKKwl9IGVsc2UgaWYgKGlzX251bGxfb2lkKCZwLT5yZW1vdGUpKSB7CisJCS8qIEQvRiBjb25mbGljdCwgY2hlY2tvdXQgcC0+bG9jYWwgKi8KKwkJYXNzZXJ0KCFpc19udWxsX29pZCgmcC0+bG9jYWwpKTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAxKQorCQkJcHJpbnRmKCJDT05GTElDVCAoZGVsZXRlL21vZGlmeSk6IE5vdGVzIGZvciBvYmplY3QgJXMgIgorCQkJCSJkZWxldGVkIGluICVzIGFuZCBtb2RpZmllZCBpbiAlcy4gVmVyc2lvbiBmcm9tICVzICIKKwkJCQkibGVmdCBpbiB0cmVlLlxuIiwKKwkJCQlvaWRfdG9faGV4KCZwLT5vYmopLCBycmVmLCBscmVmLCBscmVmKTsKKwkJd3JpdGVfbm90ZV90b193b3JrdHJlZSgmcC0+b2JqLCAmcC0+bG9jYWwpOworCX0gZWxzZSB7CisJCS8qICJyZWd1bGFyIiBjb25mbGljdCwgY2hlY2tvdXQgcmVzdWx0IG9mIGxsX21lcmdlKCkgKi8KKwkJY29uc3QgY2hhciAqcmVhc29uID0gImNvbnRlbnQiOworCQlpZiAoaXNfbnVsbF9vaWQoJnAtPmJhc2UpKQorCQkJcmVhc29uID0gImFkZC9hZGQiOworCQlhc3NlcnQoIWlzX251bGxfb2lkKCZwLT5sb2NhbCkpOworCQlhc3NlcnQoIWlzX251bGxfb2lkKCZwLT5yZW1vdGUpKTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAxKQorCQkJcHJpbnRmKCJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiBub3RlcyBmb3IgIgorCQkJCSJvYmplY3QgJXNcbiIsIHJlYXNvbiwKKwkJCQlvaWRfdG9faGV4KCZwLT5vYmopKTsKKwkJbGxfbWVyZ2VfaW5fd29ya3RyZWUobywgcCk7CisJfQorCisJdHJhY2VfcHJpbnRmKCJcdFx0XHRyZW1vdmluZyBmcm9tIHBhcnRpYWwgbWVyZ2UgcmVzdWx0XG4iKTsKKwlyZW1vdmVfbm90ZSh0LCBwLT5vYmouaGFzaCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtZXJnZV9vbmVfY2hhbmdlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJICAgIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpwLCBzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCkKK3sKKwkvKgorCSAqIFJldHVybiAwIGlmIGNoYW5nZSBpcyBzdWNjZXNzZnVsbHkgcmVzb2x2ZWQgKHN0b3JlZCBpbiBub3Rlc190cmVlKS4KKwkgKiBSZXR1cm4gMSBpcyBjaGFuZ2UgcmVzdWx0cyBpbiBhIGNvbmZsaWN0IChOT1Qgc3RvcmVkIGluIG5vdGVzX3RyZWUsCisJICogYnV0IGluc3RlYWQgd3JpdHRlbiB0byBOT1RFU19NRVJHRV9XT1JLVFJFRSB3aXRoIGNvbmZsaWN0IG1hcmtlcnMpLgorCSAqLworCXN3aXRjaCAoby0+c3RyYXRlZ3kpIHsKKwljYXNlIE5PVEVTX01FUkdFX1JFU09MVkVfTUFOVUFMOgorCQlyZXR1cm4gbWVyZ2Vfb25lX2NoYW5nZV9tYW51YWwobywgcCwgdCk7CisJY2FzZSBOT1RFU19NRVJHRV9SRVNPTFZFX09VUlM6CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJCXByaW50ZigiVXNpbmcgbG9jYWwgbm90ZXMgZm9yICVzXG4iLAorCQkJCQkJb2lkX3RvX2hleCgmcC0+b2JqKSk7CisJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBOT1RFU19NRVJHRV9SRVNPTFZFX1RIRUlSUzoKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAyKQorCQkJcHJpbnRmKCJVc2luZyByZW1vdGUgbm90ZXMgZm9yICVzXG4iLAorCQkJCQkJb2lkX3RvX2hleCgmcC0+b2JqKSk7CisJCWlmIChhZGRfbm90ZSh0LCAmcC0+b2JqLCAmcC0+cmVtb3RlLCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSkpCisJCQlCVUcoImNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlIGZhaWxlZCIpOworCQlyZXR1cm4gMDsKKwljYXNlIE5PVEVTX01FUkdFX1JFU09MVkVfVU5JT046CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJCXByaW50ZigiQ29uY2F0ZW5hdGluZyBsb2NhbCBhbmQgcmVtb3RlIG5vdGVzIGZvciAlc1xuIiwKKwkJCQkJCQlvaWRfdG9faGV4KCZwLT5vYmopKTsKKwkJaWYgKGFkZF9ub3RlKHQsICZwLT5vYmosICZwLT5yZW1vdGUsIGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUpKQorCQkJZGllKCJmYWlsZWQgdG8gY29uY2F0ZW5hdGUgbm90ZXMgIgorCQkJICAgICIoY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZSkiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBOT1RFU19NRVJHRV9SRVNPTFZFX0NBVF9TT1JUX1VOSVE6CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJCXByaW50ZigiQ29uY2F0ZW5hdGluZyB1bmlxdWUgbGluZXMgaW4gbG9jYWwgYW5kIHJlbW90ZSAiCisJCQkJIm5vdGVzIGZvciAlc1xuIiwgb2lkX3RvX2hleCgmcC0+b2JqKSk7CisJCWlmIChhZGRfbm90ZSh0LCAmcC0+b2JqLCAmcC0+cmVtb3RlLCBjb21iaW5lX25vdGVzX2NhdF9zb3J0X3VuaXEpKQorCQkJZGllKCJmYWlsZWQgdG8gY29uY2F0ZW5hdGUgbm90ZXMgIgorCQkJICAgICIoY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxKSIpOworCQlyZXR1cm4gMDsKKwl9CisJZGllKCJVbmtub3duIHN0cmF0ZWd5ICglaSkuIiwgby0+c3RyYXRlZ3kpOworfQorCitzdGF0aWMgaW50IG1lcmdlX2NoYW5nZXMoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmNoYW5nZXMsIGludCAqbnVtX2NoYW5nZXMsCisJCQkgc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJaW50IGksIGNvbmZsaWN0cyA9IDA7CisKKwl0cmFjZV9wcmludGYoIlx0bWVyZ2VfY2hhbmdlcyhudW1fY2hhbmdlcyA9ICVpKVxuIiwgKm51bV9jaGFuZ2VzKTsKKwlmb3IgKGkgPSAwOyBpIDwgKm51bV9jaGFuZ2VzOyBpKyspIHsKKwkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKnAgPSBjaGFuZ2VzICsgaTsKKwkJdHJhY2VfcHJpbnRmKCJcdFx0JS43czogJS43cyAtPiAlLjdzLyUuN3NcbiIsCisJCSAgICAgICBvaWRfdG9faGV4KCZwLT5vYmopLCBvaWRfdG9faGV4KCZwLT5iYXNlKSwKKwkJICAgICAgIG9pZF90b19oZXgoJnAtPmxvY2FsKSwKKwkJICAgICAgIG9pZF90b19oZXgoJnAtPnJlbW90ZSkpOworCisJCWlmIChvaWRlcSgmcC0+YmFzZSwgJnAtPnJlbW90ZSkpIHsKKwkJCS8qIG5vIHJlbW90ZSBjaGFuZ2U7IG5vdGhpbmcgdG8gZG8gKi8KKwkJCXRyYWNlX3ByaW50ZigiXHRcdFx0c2tpcHBpbmcgKG5vIHJlbW90ZSBjaGFuZ2UpXG4iKTsKKwkJfSBlbHNlIGlmIChvaWRlcSgmcC0+bG9jYWwsICZwLT5yZW1vdGUpKSB7CisJCQkvKiBzYW1lIGNoYW5nZSBpbiBsb2NhbCBhbmQgcmVtb3RlOyBub3RoaW5nIHRvIGRvICovCisJCQl0cmFjZV9wcmludGYoIlx0XHRcdHNraXBwaW5nIChsb2NhbCA9PSByZW1vdGUpXG4iKTsKKwkJfSBlbHNlIGlmIChvaWRlcSgmcC0+bG9jYWwsICZ1bmluaXRpYWxpemVkKSB8fAorCQkJICAgb2lkZXEoJnAtPmxvY2FsLCAmcC0+YmFzZSkpIHsKKwkJCS8qIG5vIGxvY2FsIGNoYW5nZTsgYWRvcHQgcmVtb3RlIGNoYW5nZSAqLworCQkJdHJhY2VfcHJpbnRmKCJcdFx0XHRubyBsb2NhbCBjaGFuZ2UsIGFkb3B0ZWQgcmVtb3RlXG4iKTsKKwkJCWlmIChhZGRfbm90ZSh0LCAmcC0+b2JqLCAmcC0+cmVtb3RlLAorCQkJCSAgICAgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpKQorCQkJCUJVRygiY29tYmluZV9ub3Rlc19vdmVyd3JpdGUgZmFpbGVkIik7CisJCX0gZWxzZSB7CisJCQkvKiBuZWVkIGZpbGUtbGV2ZWwgbWVyZ2UgYmV0d2VlbiBsb2NhbCBhbmQgcmVtb3RlICovCisJCQl0cmFjZV9wcmludGYoIlx0XHRcdG5lZWQgY29udGVudC1sZXZlbCBtZXJnZVxuIik7CisJCQljb25mbGljdHMgKz0gbWVyZ2Vfb25lX2NoYW5nZShvLCBwLCB0KTsKKwkJfQorCX0KKworCXJldHVybiBjb25mbGljdHM7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfZnJvbV9kaWZmcyhzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiYXNlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmxvY2FsLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnJlbW90ZSwKKwkJCSAgICBzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCkKK3sKKwlzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqY2hhbmdlczsKKwlpbnQgbnVtX2NoYW5nZXMsIGNvbmZsaWN0czsKKworCXRyYWNlX3ByaW50ZigiXHRtZXJnZV9mcm9tX2RpZmZzKGJhc2UgPSAlLjdzLCBsb2NhbCA9ICUuN3MsICIKKwkgICAgICAgInJlbW90ZSA9ICUuN3MpXG4iLCBvaWRfdG9faGV4KGJhc2UpLCBvaWRfdG9faGV4KGxvY2FsKSwKKwkgICAgICAgb2lkX3RvX2hleChyZW1vdGUpKTsKKworCWNoYW5nZXMgPSBkaWZmX3RyZWVfcmVtb3RlKG8sIGJhc2UsIHJlbW90ZSwgJm51bV9jaGFuZ2VzKTsKKwlkaWZmX3RyZWVfbG9jYWwobywgY2hhbmdlcywgbnVtX2NoYW5nZXMsIGJhc2UsIGxvY2FsKTsKKworCWNvbmZsaWN0cyA9IG1lcmdlX2NoYW5nZXMobywgY2hhbmdlcywgJm51bV9jaGFuZ2VzLCB0KTsKKwlmcmVlKGNoYW5nZXMpOworCisJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQlwcmludGYodC0+ZGlydHkgPworCQkgICAgICAgIk1lcmdlIHJlc3VsdDogJWkgdW5tZXJnZWQgbm90ZXMgYW5kIGEgZGlydHkgbm90ZXMgdHJlZVxuIiA6CisJCSAgICAgICAiTWVyZ2UgcmVzdWx0OiAlaSB1bm1lcmdlZCBub3RlcyBhbmQgYSBjbGVhbiBub3RlcyB0cmVlXG4iLAorCQkgICAgICAgY29uZmxpY3RzKTsKKworCXJldHVybiBjb25mbGljdHMgPyAtMSA6IDE7Cit9CisKK2ludCBub3Rlc19tZXJnZShzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJc3RydWN0IG5vdGVzX3RyZWUgKmxvY2FsX3RyZWUsCisJCXN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdF9vaWQpCit7CisJc3RydWN0IG9iamVjdF9pZCBsb2NhbF9vaWQsIHJlbW90ZV9vaWQ7CisJc3RydWN0IGNvbW1pdCAqbG9jYWwsICpyZW1vdGU7CisJc3RydWN0IGNvbW1pdF9saXN0ICpiYXNlcyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqYmFzZV9vaWQsICpiYXNlX3RyZWVfb2lkOworCWludCByZXN1bHQgPSAwOworCisJYXNzZXJ0KG8tPmxvY2FsX3JlZiAmJiBvLT5yZW1vdGVfcmVmKTsKKwlhc3NlcnQoIXN0cmNtcChvLT5sb2NhbF9yZWYsIGxvY2FsX3RyZWUtPnJlZikpOworCW9pZGNscihyZXN1bHRfb2lkKTsKKworCXRyYWNlX3ByaW50Zigibm90ZXNfbWVyZ2Uoby0+bG9jYWxfcmVmID0gJXMsIG8tPnJlbW90ZV9yZWYgPSAlcylcbiIsCisJICAgICAgIG8tPmxvY2FsX3JlZiwgby0+cmVtb3RlX3JlZik7CisKKwkvKiBEZXJlZmVyZW5jZSBvLT5sb2NhbF9yZWYgaW50byBsb2NhbF9zaGExICovCisJaWYgKHJlYWRfcmVmX2Z1bGwoby0+bG9jYWxfcmVmLCAwLCAmbG9jYWxfb2lkLCBOVUxMKSkKKwkJZGllKCJGYWlsZWQgdG8gcmVzb2x2ZSBsb2NhbCBub3RlcyByZWYgJyVzJyIsIG8tPmxvY2FsX3JlZik7CisJZWxzZSBpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KG8tPmxvY2FsX3JlZiwgMCkgJiYKKwkJaXNfbnVsbF9vaWQoJmxvY2FsX29pZCkpCisJCWxvY2FsID0gTlVMTDsgLyogbG9jYWxfb2lkID09IG51bGxfb2lkIGluZGljYXRlcyB1bmJvcm4gcmVmICovCisJZWxzZSBpZiAoIShsb2NhbCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKG8tPnJlcG8sICZsb2NhbF9vaWQpKSkKKwkJZGllKCJDb3VsZCBub3QgcGFyc2UgbG9jYWwgY29tbWl0ICVzICglcykiLAorCQkgICAgb2lkX3RvX2hleCgmbG9jYWxfb2lkKSwgby0+bG9jYWxfcmVmKTsKKwl0cmFjZV9wcmludGYoIlx0bG9jYWwgY29tbWl0OiAlLjdzXG4iLCBvaWRfdG9faGV4KCZsb2NhbF9vaWQpKTsKKworCS8qIERlcmVmZXJlbmNlIG8tPnJlbW90ZV9yZWYgaW50byByZW1vdGVfb2lkICovCisJaWYgKGdldF9vaWQoby0+cmVtb3RlX3JlZiwgJnJlbW90ZV9vaWQpKSB7CisJCS8qCisJCSAqIEZhaWxlZCB0byBnZXQgcmVtb3RlX29pZC4gSWYgby0+cmVtb3RlX3JlZiBsb29rcyBsaWtlIGFuCisJCSAqIHVuYm9ybiByZWYsIHBlcmZvcm0gdGhlIG1lcmdlIHVzaW5nIGFuIGVtcHR5IG5vdGVzIHRyZWUuCisJCSAqLworCQlpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KG8tPnJlbW90ZV9yZWYsIDApKSB7CisJCQlvaWRjbHIoJnJlbW90ZV9vaWQpOworCQkJcmVtb3RlID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWRpZSgiRmFpbGVkIHRvIHJlc29sdmUgcmVtb3RlIG5vdGVzIHJlZiAnJXMnIiwKKwkJCSAgICBvLT5yZW1vdGVfcmVmKTsKKwkJfQorCX0gZWxzZSBpZiAoIShyZW1vdGUgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShvLT5yZXBvLCAmcmVtb3RlX29pZCkpKSB7CisJCWRpZSgiQ291bGQgbm90IHBhcnNlIHJlbW90ZSBjb21taXQgJXMgKCVzKSIsCisJCSAgICBvaWRfdG9faGV4KCZyZW1vdGVfb2lkKSwgby0+cmVtb3RlX3JlZik7CisJfQorCXRyYWNlX3ByaW50ZigiXHRyZW1vdGUgY29tbWl0OiAlLjdzXG4iLCBvaWRfdG9faGV4KCZyZW1vdGVfb2lkKSk7CisKKwlpZiAoIWxvY2FsICYmICFyZW1vdGUpCisJCWRpZSgiQ2Fubm90IG1lcmdlIGVtcHR5IG5vdGVzIHJlZiAoJXMpIGludG8gZW1wdHkgbm90ZXMgcmVmICIKKwkJICAgICIoJXMpIiwgby0+cmVtb3RlX3JlZiwgby0+bG9jYWxfcmVmKTsKKwlpZiAoIWxvY2FsKSB7CisJCS8qIHJlc3VsdCA9PSByZW1vdGUgY29tbWl0ICovCisJCW9pZGNweShyZXN1bHRfb2lkLCAmcmVtb3RlX29pZCk7CisJCWdvdG8gZm91bmRfcmVzdWx0OworCX0KKwlpZiAoIXJlbW90ZSkgeworCQkvKiByZXN1bHQgPT0gbG9jYWwgY29tbWl0ICovCisJCW9pZGNweShyZXN1bHRfb2lkLCAmbG9jYWxfb2lkKTsKKwkJZ290byBmb3VuZF9yZXN1bHQ7CisJfQorCWFzc2VydChsb2NhbCAmJiByZW1vdGUpOworCisJLyogRmluZCBtZXJnZSBiYXNlcyAqLworCWJhc2VzID0gZ2V0X21lcmdlX2Jhc2VzKGxvY2FsLCByZW1vdGUpOworCWlmICghYmFzZXMpIHsKKwkJYmFzZV9vaWQgPSAmbnVsbF9vaWQ7CisJCWJhc2VfdHJlZV9vaWQgPSB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlOworCQlpZiAoby0+dmVyYm9zaXR5ID49IDQpCisJCQlwcmludGYoIk5vIG1lcmdlIGJhc2UgZm91bmQ7IGRvaW5nIGhpc3RvcnktbGVzcyBtZXJnZVxuIik7CisJfSBlbHNlIGlmICghYmFzZXMtPm5leHQpIHsKKwkJYmFzZV9vaWQgPSAmYmFzZXMtPml0ZW0tPm9iamVjdC5vaWQ7CisJCWJhc2VfdHJlZV9vaWQgPSBnZXRfY29tbWl0X3RyZWVfb2lkKGJhc2VzLT5pdGVtKTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQkJcHJpbnRmKCJPbmUgbWVyZ2UgYmFzZSBmb3VuZCAoJS43cylcbiIsCisJCQkgICAgICAgb2lkX3RvX2hleChiYXNlX29pZCkpOworCX0gZWxzZSB7CisJCS8qIFRPRE86IEhvdyB0byBoYW5kbGUgbXVsdGlwbGUgbWVyZ2UtYmFzZXM/ICovCisJCWJhc2Vfb2lkID0gJmJhc2VzLT5pdGVtLT5vYmplY3Qub2lkOworCQliYXNlX3RyZWVfb2lkID0gZ2V0X2NvbW1pdF90cmVlX29pZChiYXNlcy0+aXRlbSk7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMykKKwkJCXByaW50ZigiTXVsdGlwbGUgbWVyZ2UgYmFzZXMgZm91bmQuIFVzaW5nIHRoZSBmaXJzdCAiCisJCQkJIiglLjdzKVxuIiwgb2lkX3RvX2hleChiYXNlX29pZCkpOworCX0KKworCWlmIChvLT52ZXJib3NpdHkgPj0gNCkKKwkJcHJpbnRmKCJNZXJnaW5nIHJlbW90ZSBjb21taXQgJS43cyBpbnRvIGxvY2FsIGNvbW1pdCAlLjdzIHdpdGggIgorCQkJIm1lcmdlLWJhc2UgJS43c1xuIiwgb2lkX3RvX2hleCgmcmVtb3RlLT5vYmplY3Qub2lkKSwKKwkJCW9pZF90b19oZXgoJmxvY2FsLT5vYmplY3Qub2lkKSwKKwkJCW9pZF90b19oZXgoYmFzZV9vaWQpKTsKKworCWlmIChvaWRlcSgmcmVtb3RlLT5vYmplY3Qub2lkLCBiYXNlX29pZCkpIHsKKwkJLyogQWxyZWFkeSBtZXJnZWQ7IHJlc3VsdCA9PSBsb2NhbCBjb21taXQgKi8KKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAyKQorCQkJcHJpbnRmKCJBbHJlYWR5IHVwIHRvIGRhdGUhXG4iKTsKKwkJb2lkY3B5KHJlc3VsdF9vaWQsICZsb2NhbC0+b2JqZWN0Lm9pZCk7CisJCWdvdG8gZm91bmRfcmVzdWx0OworCX0KKwlpZiAob2lkZXEoJmxvY2FsLT5vYmplY3Qub2lkLCBiYXNlX29pZCkpIHsKKwkJLyogRmFzdC1mb3J3YXJkOyByZXN1bHQgPT0gcmVtb3RlIGNvbW1pdCAqLworCQlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCQlwcmludGYoIkZhc3QtZm9yd2FyZFxuIik7CisJCW9pZGNweShyZXN1bHRfb2lkLCAmcmVtb3RlLT5vYmplY3Qub2lkKTsKKwkJZ290byBmb3VuZF9yZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gbWVyZ2VfZnJvbV9kaWZmcyhvLCBiYXNlX3RyZWVfb2lkLAorCQkJCSAgZ2V0X2NvbW1pdF90cmVlX29pZChsb2NhbCksCisJCQkJICBnZXRfY29tbWl0X3RyZWVfb2lkKHJlbW90ZSksIGxvY2FsX3RyZWUpOworCisJaWYgKHJlc3VsdCAhPSAwKSB7IC8qIG5vbi10cml2aWFsIG1lcmdlICh3aXRoIG9yIHdpdGhvdXQgY29uZmxpY3RzKSAqLworCQkvKiBDb21taXQgKHBhcnRpYWwpIHJlc3VsdCAqLworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOworCQljb21taXRfbGlzdF9pbnNlcnQocmVtb3RlLCAmcGFyZW50cyk7IC8qIExJRk8gb3JkZXIgKi8KKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGxvY2FsLCAmcGFyZW50cyk7CisJCWNyZWF0ZV9ub3Rlc19jb21taXQoby0+cmVwbywgbG9jYWxfdHJlZSwgcGFyZW50cywgby0+Y29tbWl0X21zZy5idWYsCisJCQkJICAgIG8tPmNvbW1pdF9tc2cubGVuLCByZXN1bHRfb2lkKTsKKwl9CisKK2ZvdW5kX3Jlc3VsdDoKKwlmcmVlX2NvbW1pdF9saXN0KGJhc2VzKTsKKwlzdHJidWZfcmVsZWFzZSgmKG8tPmNvbW1pdF9tc2cpKTsKKwl0cmFjZV9wcmludGYoIm5vdGVzX21lcmdlKCk6IHJlc3VsdCA9ICVpLCByZXN1bHRfb2lkID0gJS43c1xuIiwKKwkgICAgICAgcmVzdWx0LCBvaWRfdG9faGV4KHJlc3VsdF9vaWQpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgbm90ZXNfbWVyZ2VfY29tbWl0KHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkgICAgICAgc3RydWN0IG5vdGVzX3RyZWUgKnBhcnRpYWxfdHJlZSwKKwkJICAgICAgIHN0cnVjdCBjb21taXQgKnBhcnRpYWxfY29tbWl0LAorCQkgICAgICAgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0X29pZCkKK3sKKwkvKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBmaWxlcyBpbiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIGFuZCBhZGQgYWxsCisJICogZm91bmQgbm90ZXMgdG8gJ3BhcnRpYWxfdHJlZScuIFdyaXRlIHRoZSB1cGRhdGVkIG5vdGVzIHRyZWUgdG8KKwkgKiB0aGUgREIsIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlIG9iamVjdCB3aGlsZSByZXVzaW5nIHRoZQorCSAqIGNvbW1pdCBtZXNzYWdlIGFuZCBwYXJlbnRzIGZyb20gJ3BhcnRpYWxfY29tbWl0Jy4KKwkgKiBGaW5hbGx5IHN0b3JlIHRoZSBuZXcgY29tbWl0IG9iamVjdCBPSUQgaW50byAncmVzdWx0X29pZCcuCisJICovCisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZTsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpidWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihwYXJ0aWFsX2NvbW1pdCwgTlVMTCk7CisJY29uc3QgY2hhciAqbXNnID0gc3Ryc3RyKGJ1ZmZlciwgIlxuXG4iKTsKKwlpbnQgYmFzZWxlbjsKKworCWdpdF9wYXRoX2J1ZigmcGF0aCwgTk9URVNfTUVSR0VfV09SS1RSRUUpOworCWlmIChvLT52ZXJib3NpdHkgPj0gMykKKwkJcHJpbnRmKCJDb21taXR0aW5nIG5vdGVzIGluIG5vdGVzIG1lcmdlIHdvcmt0cmVlIGF0ICVzXG4iLAorCQkJcGF0aC5idWYpOworCisJaWYgKCFtc2cgfHwgbXNnWzJdID09ICdcMCcpCisJCWRpZSgicGFydGlhbCBub3RlcyBjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiKTsKKwltc2cgKz0gMjsKKworCWRpciA9IG9wZW5kaXIocGF0aC5idWYpOworCWlmICghZGlyKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCBvcGVuICVzIiwgcGF0aC5idWYpOworCisJc3RyYnVmX2FkZGNoKCZwYXRoLCAnLycpOworCWJhc2VsZW4gPSBwYXRoLmxlbjsKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXN0cnVjdCBvYmplY3RfaWQgb2JqX29pZCwgYmxvYl9vaWQ7CisKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChnZXRfb2lkX2hleChlLT5kX25hbWUsICZvYmpfb2lkKSkgeworCQkJaWYgKG8tPnZlcmJvc2l0eSA+PSAzKQorCQkJCXByaW50ZigiU2tpcHBpbmcgbm9uLVNIQTEgZW50cnkgJyVzJXMnXG4iLAorCQkJCQlwYXRoLmJ1ZiwgZS0+ZF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX2FkZHN0cigmcGF0aCwgZS0+ZF9uYW1lKTsKKwkJLyogd3JpdGUgZmlsZSBhcyBibG9iLCBhbmQgYWRkIHRvIHBhcnRpYWxfdHJlZSAqLworCQlpZiAoc3RhdChwYXRoLmJ1ZiwgJnN0KSkKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIHN0YXQgJyVzJyIsIHBhdGguYnVmKTsKKwkJaWYgKGluZGV4X3BhdGgoby0+cmVwby0+aW5kZXgsICZibG9iX29pZCwgcGF0aC5idWYsICZzdCwgSEFTSF9XUklURV9PQkpFQ1QpKQorCQkJZGllKCJGYWlsZWQgdG8gd3JpdGUgYmxvYiBvYmplY3QgZnJvbSAnJXMnIiwgcGF0aC5idWYpOworCQlpZiAoYWRkX25vdGUocGFydGlhbF90cmVlLCAmb2JqX29pZCwgJmJsb2Jfb2lkLCBOVUxMKSkKKwkJCWRpZSgiRmFpbGVkIHRvIGFkZCByZXNvbHZlZCBub3RlICclcycgdG8gbm90ZXMgdHJlZSIsCisJCQkgICAgcGF0aC5idWYpOworCQlpZiAoby0+dmVyYm9zaXR5ID49IDQpCisJCQlwcmludGYoIkFkZGVkIHJlc29sdmVkIG5vdGUgZm9yIG9iamVjdCAlczogJXNcbiIsCisJCQkJb2lkX3RvX2hleCgmb2JqX29pZCksIG9pZF90b19oZXgoJmJsb2Jfb2lkKSk7CisJCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGJhc2VsZW4pOworCX0KKworCWNyZWF0ZV9ub3Rlc19jb21taXQoby0+cmVwbywgcGFydGlhbF90cmVlLCBwYXJ0aWFsX2NvbW1pdC0+cGFyZW50cywgbXNnLAorCQkJICAgIHN0cmxlbihtc2cpLCByZXN1bHRfb2lkKTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKHBhcnRpYWxfY29tbWl0LCBidWZmZXIpOworCWlmIChvLT52ZXJib3NpdHkgPj0gNCkKKwkJcHJpbnRmKCJGaW5hbGl6ZWQgbm90ZXMgbWVyZ2UgY29tbWl0OiAlc1xuIiwKKwkJCW9pZF90b19oZXgocmVzdWx0X29pZCkpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAwOworfQorCitpbnQgbm90ZXNfbWVyZ2VfYWJvcnQoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8pCit7CisJLyoKKwkgKiBSZW1vdmUgYWxsIGZpbGVzIHdpdGhpbiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLiBXZSBkbyBub3QgcmVtb3ZlCisJICogdGhlIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgZGlyZWN0b3J5IGl0c2VsZiwgc2luY2UgaXQgbWlnaHQgYmUKKwkgKiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgdXNlci4KKwkgKi8KKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlnaXRfcGF0aF9idWYoJmJ1ZiwgTk9URVNfTUVSR0VfV09SS1RSRUUpOworCWlmIChvLT52ZXJib3NpdHkgPj0gMykKKwkJcHJpbnRmKCJSZW1vdmluZyBub3RlcyBtZXJnZSB3b3JrdHJlZSBhdCAlcy8qXG4iLCBidWYuYnVmKTsKKwlyZXQgPSByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZidWYsIFJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25vdGVzLW1lcmdlLmggYi9ub3Rlcy1tZXJnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjljNzAKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy1tZXJnZS5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgTk9URVNfTUVSR0VfSAorI2RlZmluZSBOT1RFU19NRVJHRV9ICisKKyNpbmNsdWRlICJub3Rlcy11dGlscy5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdHJ1Y3QgY29tbWl0Oworc3RydWN0IG9iamVjdF9pZDsKK3N0cnVjdCByZXBvc2l0b3J5OworCisjZGVmaW5lIE5PVEVTX01FUkdFX1dPUktUUkVFICJOT1RFU19NRVJHRV9XT1JLVFJFRSIKKworZW51bSBub3Rlc19tZXJnZV92ZXJib3NpdHkgeworCU5PVEVTX01FUkdFX1ZFUkJPU0lUWV9ERUZBVUxUID0gMiwKKwlOT1RFU19NRVJHRV9WRVJCT1NJVFlfTUFYID0gNQorfTsKKworc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCWNvbnN0IGNoYXIgKmxvY2FsX3JlZjsKKwljb25zdCBjaGFyICpyZW1vdGVfcmVmOworCXN0cnVjdCBzdHJidWYgY29tbWl0X21zZzsKKwlpbnQgdmVyYm9zaXR5OworCWVudW0gbm90ZXNfbWVyZ2Vfc3RyYXRlZ3kgc3RyYXRlZ3k7CisJdW5zaWduZWQgaGFzX3dvcmt0cmVlOjE7Cit9OworCit2b2lkIGluaXRfbm90ZXNfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgIHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKTsKKworLyoKKyAqIE1lcmdlIG5vdGVzIGZyb20gby0+cmVtb3RlX3JlZiBpbnRvIG8tPmxvY2FsX3JlZgorICoKKyAqIFRoZSBnaXZlbiBub3Rlc190cmVlICdsb2NhbF90cmVlJyBtdXN0IGJlIHRoZSBub3Rlc190cmVlIHJlZmVyZW5jZWQgYnkgdGhlCisgKiBvLT5sb2NhbF9yZWYuIFRoaXMgaXMgdGhlIG5vdGVzX3RyZWUgaW4gd2hpY2ggdGhlIG9iamVjdC1sZXZlbCBtZXJnZSBpcworICogcGVyZm9ybWVkLgorICoKKyAqIFRoZSBjb21taXRzIGdpdmVuIGJ5IHRoZSB0d28gcmVmcyBhcmUgbWVyZ2VkLCBwcm9kdWNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG91dGNvbWVzOgorICoKKyAqIDEuIFRoZSBtZXJnZSB0cml2aWFsbHkgcmVzdWx0cyBpbiBhbiBleGlzdGluZyBjb21taXQgKGUuZy4gZmFzdC1mb3J3YXJkIG9yCisgKiAgICBhbHJlYWR5LXVwLXRvLWRhdGUpLiAnbG9jYWxfdHJlZScgaXMgdW50b3VjaGVkLCB0aGUgT0lEIG9mIHRoZSByZXN1bHQKKyAqICAgIGlzIHdyaXR0ZW4gaW50byAncmVzdWx0X29pZCcgYW5kIDAgaXMgcmV0dXJuZWQuCisgKiAyLiBUaGUgbWVyZ2Ugc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcywgcHJvZHVjaW5nIGEgbWVyZ2UgY29tbWl0LiBsb2NhbF90cmVlCisgKiAgICBjb250YWlucyB0aGUgdXBkYXRlZCBub3RlcyB0cmVlLCB0aGUgT0lEIG9mIHRoZSByZXN1bHRpbmcgY29tbWl0IGlzCisgKiAgICB3cml0dGVuIGludG8gJ3Jlc3VsdF9vaWQnLCBhbmQgMSBpcyByZXR1cm5lZC4KKyAqIDMuIFRoZSBtZXJnZSByZXN1bHRzIGluIGNvbmZsaWN0cy4gVGhpcyBpcyBzaW1pbGFyIHRvICMyIGluIHRoYXQgdGhlCisgKiAgICBwYXJ0aWFsIG1lcmdlIHJlc3VsdCAoaS5lLiBtZXJnZSByZXN1bHQgbWludXMgdGhlIHVubWVyZ2VkIGVudHJpZXMpCisgKiAgICBhcmUgc3RvcmVkIGluICdsb2NhbF90cmVlJywgYW5kIHRoZSBPSUQgb3IgdGhlIHJlc3VsdGluZyBjb21taXQKKyAqICAgICh0byBiZSBhbWVuZGVkIHdoZW4gdGhlIGNvbmZsaWN0cyBoYXZlIGJlZW4gcmVzb2x2ZWQpIGlzIHdyaXR0ZW4gaW50bworICogICAgJ3Jlc3VsdF9vaWQnLiBUaGUgdW5tZXJnZWQgZW50cmllcyBhcmUgd3JpdHRlbiBpbnRvIHRoZQorICogICAgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSBkaXJlY3Rvcnkgd2l0aCBjb25mbGljdCBtYXJrZXJzLgorICogICAgLTEgaXMgcmV0dXJuZWQuCisgKgorICogQm90aCBvLT5sb2NhbF9yZWYgYW5kIG8tPnJlbW90ZV9yZWYgbXVzdCBiZSBnaXZlbiAobm9uLU5VTEwpLCBidXQgZWl0aGVyIHJlZgorICogKGFsdGhvdWdoIG5vdCBib3RoKSBtYXkgcmVmZXIgdG8gYSBub24tZXhpc3Rpbmcgbm90ZXMgcmVmLCBpbiB3aGljaCBjYXNlCisgKiB0aGF0IG5vdGVzIHJlZiBpcyBpbnRlcnByZXRlZCBhcyBhbiBlbXB0eSBub3RlcyB0cmVlLCBhbmQgdGhlIG1lcmdlCisgKiB0cml2aWFsbHkgcmVzdWx0cyBpbiB3aGF0IHRoZSBvdGhlciByZWYgcG9pbnRzIHRvLgorICovCitpbnQgbm90ZXNfbWVyZ2Uoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCXN0cnVjdCBub3Rlc190cmVlICpsb2NhbF90cmVlLAorCQlzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHRfb2lkKTsKKworLyoKKyAqIEZpbmFsaXplIGNvbmZsaWN0IHJlc29sdXRpb24gZnJvbSBhbiBlYXJsaWVyIG5vdGVzX21lcmdlKCkKKyAqCisgKiBUaGUgZ2l2ZW4gbm90ZXMgdHJlZSAncGFydGlhbF90cmVlJyBtdXN0IGJlIHRoZSBub3Rlc190cmVlIGNvcnJlc3BvbmRpbmcgdG8KKyAqIHRoZSBnaXZlbiAncGFydGlhbF9jb21taXQnLCB0aGUgcGFydGlhbCByZXN1bHQgY29tbWl0IGNyZWF0ZWQgYnkgYSBwcmV2aW91cworICogY2FsbCB0byBub3Rlc19tZXJnZSgpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGhlIChub3cgcmVzb2x2ZWQpIG5vdGVzIGluIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUKKyAqIHRvICdwYXJ0aWFsX3RyZWUnLCBhbmQgY3JlYXRlIGEgZmluYWwgbm90ZXMgbWVyZ2UgY29tbWl0LCB0aGUgT0lEIG9mIHdoaWNoCisgKiB3aWxsIGJlIHN0b3JlZCBpbiAncmVzdWx0X29pZCcuCisgKi8KK2ludCBub3Rlc19tZXJnZV9jb21taXQoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCSAgICAgICBzdHJ1Y3Qgbm90ZXNfdHJlZSAqcGFydGlhbF90cmVlLAorCQkgICAgICAgc3RydWN0IGNvbW1pdCAqcGFydGlhbF9jb21taXQsCisJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHRfb2lkKTsKKworLyoKKyAqIEFib3J0IGNvbmZsaWN0IHJlc29sdXRpb24gZnJvbSBhbiBlYXJsaWVyIG5vdGVzX21lcmdlKCkKKyAqCisgKiBSZW1vdmVzIHRoZSBub3RlcyBtZXJnZSB3b3JrdHJlZSBpbiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLgorICovCitpbnQgbm90ZXNfbWVyZ2VfYWJvcnQoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25vdGVzLXV0aWxzLmMgYi9ub3Rlcy11dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjQ4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy11dGlscy5jCkBAIC0wLDAgKzEsMTg2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAibm90ZXMtdXRpbHMuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKK3ZvaWQgY3JlYXRlX25vdGVzX2NvbW1pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsCisJCQkgY29uc3QgY2hhciAqbXNnLCBzaXplX3QgbXNnX2xlbiwKKwkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHRfb2lkKQoreworCXN0cnVjdCBvYmplY3RfaWQgdHJlZV9vaWQ7CisKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCisJaWYgKHdyaXRlX25vdGVzX3RyZWUodCwgJnRyZWVfb2lkKSkKKwkJZGllKCJGYWlsZWQgdG8gd3JpdGUgbm90ZXMgdHJlZSB0byBkYXRhYmFzZSIpOworCisJaWYgKCFwYXJlbnRzKSB7CisJCS8qIERlZHVjZSBwYXJlbnQgY29tbWl0IGZyb20gdC0+cmVmICovCisJCXN0cnVjdCBvYmplY3RfaWQgcGFyZW50X29pZDsKKwkJaWYgKCFyZWFkX3JlZih0LT5yZWYsICZwYXJlbnRfb2lkKSkgeworCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gbG9va3VwX2NvbW1pdChyLCAmcGFyZW50X29pZCk7CisJCQlpZiAocGFyc2VfY29tbWl0KHBhcmVudCkpCisJCQkJZGllKCJGYWlsZWQgdG8gZmluZC9wYXJzZSBjb21taXQgJXMiLCB0LT5yZWYpOworCQkJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudCwgJnBhcmVudHMpOworCQl9CisJCS8qIGVsc2U6IHQtPnJlZiBwb2ludHMgdG8gbm90aGluZywgYXNzdW1lIHJvb3Qvb3JwaGFuIGNvbW1pdCAqLworCX0KKworCWlmIChjb21taXRfdHJlZShtc2csIG1zZ19sZW4sICZ0cmVlX29pZCwgcGFyZW50cywgcmVzdWx0X29pZCwgTlVMTCwKKwkJCU5VTEwpKQorCQlkaWUoIkZhaWxlZCB0byBjb21taXQgbm90ZXMgdHJlZSB0byBkYXRhYmFzZSIpOworfQorCit2b2lkIGNvbW1pdF9ub3RlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgY29tbWl0X29pZDsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJaWYgKCF0LT5pbml0aWFsaXplZCB8fCAhdC0+dXBkYXRlX3JlZiB8fCAhKnQtPnVwZGF0ZV9yZWYpCisJCWRpZShfKCJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiKSk7CisJaWYgKCF0LT5kaXJ0eSkKKwkJcmV0dXJuOyAvKiBkb24ndCBoYXZlIHRvIGNvbW1pdCBhbiB1bmNoYW5nZWQgdHJlZSAqLworCisJLyogUHJlcGFyZSBjb21taXQgbWVzc2FnZSBhbmQgcmVmbG9nIG1lc3NhZ2UgKi8KKwlzdHJidWZfYWRkc3RyKCZidWYsIG1zZyk7CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUoJmJ1Zik7CisKKwljcmVhdGVfbm90ZXNfY29tbWl0KHIsIHQsIE5VTEwsIGJ1Zi5idWYsIGJ1Zi5sZW4sICZjb21taXRfb2lkKTsKKwlzdHJidWZfaW5zZXJ0c3RyKCZidWYsIDAsICJub3RlczogIik7CisJdXBkYXRlX3JlZihidWYuYnVmLCB0LT51cGRhdGVfcmVmLCAmY29tbWl0X29pZCwgTlVMTCwgMCwKKwkJICAgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworaW50IHBhcnNlX25vdGVzX21lcmdlX3N0cmF0ZWd5KGNvbnN0IGNoYXIgKnYsIGVudW0gbm90ZXNfbWVyZ2Vfc3RyYXRlZ3kgKnMpCit7CisJaWYgKCFzdHJjbXAodiwgIm1hbnVhbCIpKQorCQkqcyA9IE5PVEVTX01FUkdFX1JFU09MVkVfTUFOVUFMOworCWVsc2UgaWYgKCFzdHJjbXAodiwgIm91cnMiKSkKKwkJKnMgPSBOT1RFU19NRVJHRV9SRVNPTFZFX09VUlM7CisJZWxzZSBpZiAoIXN0cmNtcCh2LCAidGhlaXJzIikpCisJCSpzID0gTk9URVNfTUVSR0VfUkVTT0xWRV9USEVJUlM7CisJZWxzZSBpZiAoIXN0cmNtcCh2LCAidW5pb24iKSkKKwkJKnMgPSBOT1RFU19NRVJHRV9SRVNPTFZFX1VOSU9OOworCWVsc2UgaWYgKCFzdHJjbXAodiwgImNhdF9zb3J0X3VuaXEiKSkKKwkJKnMgPSBOT1RFU19NRVJHRV9SRVNPTFZFX0NBVF9TT1JUX1VOSVE7CisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbWJpbmVfbm90ZXNfZm4gcGFyc2VfY29tYmluZV9ub3Rlc19mbihjb25zdCBjaGFyICp2KQoreworCWlmICghc3RyY2FzZWNtcCh2LCAib3ZlcndyaXRlIikpCisJCXJldHVybiBjb21iaW5lX25vdGVzX292ZXJ3cml0ZTsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2LCAiaWdub3JlIikpCisJCXJldHVybiBjb21iaW5lX25vdGVzX2lnbm9yZTsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2LCAiY29uY2F0ZW5hdGUiKSkKKwkJcmV0dXJuIGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAodiwgImNhdF9zb3J0X3VuaXEiKSkKKwkJcmV0dXJuIGNvbWJpbmVfbm90ZXNfY2F0X3NvcnRfdW5pcTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IG5vdGVzX3Jld3JpdGVfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYyA9IGNiOworCWlmIChzdGFydHNfd2l0aChrLCAibm90ZXMucmV3cml0ZS4iKSAmJiAhc3RyY21wKGsrMTQsIGMtPmNtZCkpIHsKKwkJYy0+ZW5hYmxlZCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghYy0+bW9kZV9mcm9tX2VudiAmJiAhc3RyY21wKGssICJub3Rlcy5yZXdyaXRlbW9kZSIpKSB7CisJCWlmICghdikKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJYy0+Y29tYmluZSA9IHBhcnNlX2NvbWJpbmVfbm90ZXNfZm4odik7CisJCWlmICghYy0+Y29tYmluZSkgeworCQkJZXJyb3IoXygiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIiksIHYpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghYy0+cmVmc19mcm9tX2VudiAmJiAhc3RyY21wKGssICJub3Rlcy5yZXdyaXRlcmVmIikpIHsKKwkJLyogbm90ZSB0aGF0IGEgcmVmcy8gcHJlZml4IGlzIGltcGxpZWQgaW4gdGhlCisJCSAqIHVuZGVybHlpbmcgZm9yX2VhY2hfZ2xvYl9yZWYgKi8KKwkJaWYgKHN0YXJ0c193aXRoKHYsICJyZWZzL25vdGVzLyIpKQorCQkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYihjLT5yZWZzLCB2KTsKKwkJZWxzZQorCQkJd2FybmluZyhfKCJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIgorCQkJCSIgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIiksIHYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZShjb25zdCBjaGFyICpjbWQpCit7CisJc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnKSk7CisJY29uc3QgY2hhciAqcmV3cml0ZV9tb2RlX2VudiA9IGdldGVudihHSVRfTk9URVNfUkVXUklURV9NT0RFX0VOVklST05NRU5UKTsKKwljb25zdCBjaGFyICpyZXdyaXRlX3JlZnNfZW52ID0gZ2V0ZW52KEdJVF9OT1RFU19SRVdSSVRFX1JFRl9FTlZJUk9OTUVOVCk7CisJYy0+Y21kID0gY21kOworCWMtPmVuYWJsZWQgPSAxOworCWMtPmNvbWJpbmUgPSBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlOworCWMtPnJlZnMgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3QpKTsKKwljLT5yZWZzLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisJYy0+cmVmc19mcm9tX2VudiA9IDA7CisJYy0+bW9kZV9mcm9tX2VudiA9IDA7CisJaWYgKHJld3JpdGVfbW9kZV9lbnYpIHsKKwkJYy0+bW9kZV9mcm9tX2VudiA9IDE7CisJCWMtPmNvbWJpbmUgPSBwYXJzZV9jb21iaW5lX25vdGVzX2ZuKHJld3JpdGVfbW9kZV9lbnYpOworCQlpZiAoIWMtPmNvbWJpbmUpCisJCQkvKgorCQkJICogVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorCQkJICogdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisJCQkgKiBpdHMgdmFsdWUuCisJCQkgKi8KKwkJCWVycm9yKF8oIkJhZCAlcyB2YWx1ZTogJyVzJyIpLCBHSVRfTk9URVNfUkVXUklURV9NT0RFX0VOVklST05NRU5ULAorCQkJCQlyZXdyaXRlX21vZGVfZW52KTsKKwl9CisJaWYgKHJld3JpdGVfcmVmc19lbnYpIHsKKwkJYy0+cmVmc19mcm9tX2VudiA9IDE7CisJCXN0cmluZ19saXN0X2FkZF9yZWZzX2Zyb21fY29sb25fc2VwKGMtPnJlZnMsIHJld3JpdGVfcmVmc19lbnYpOworCX0KKwlnaXRfY29uZmlnKG5vdGVzX3Jld3JpdGVfY29uZmlnLCBjKTsKKwlpZiAoIWMtPmVuYWJsZWQgfHwgIWMtPnJlZnMtPm5yKSB7CisJCXN0cmluZ19saXN0X2NsZWFyKGMtPnJlZnMsIDApOworCQlmcmVlKGMtPnJlZnMpOworCQlmcmVlKGMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYy0+dHJlZXMgPSBsb2FkX25vdGVzX3RyZWVzKGMtPnJlZnMsIE5PVEVTX0lOSVRfV1JJVEFCTEUpOworCXN0cmluZ19saXN0X2NsZWFyKGMtPnJlZnMsIDApOworCWZyZWUoYy0+cmVmcyk7CisJcmV0dXJuIGM7Cit9CisKK2ludCBjb3B5X25vdGVfZm9yX3Jld3JpdGUoc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpmcm9tX29iaiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdG9fb2JqKQoreworCWludCByZXQgPSAwOworCWludCBpOworCWZvciAoaSA9IDA7IGMtPnRyZWVzW2ldOyBpKyspCisJCXJldCA9IGNvcHlfbm90ZShjLT50cmVlc1tpXSwgZnJvbV9vYmosIHRvX29iaiwgMSwgYy0+Y29tYmluZSkgfHwgcmV0OworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmluaXNoX2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjLAorCQkJCSAgIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBjLT50cmVlc1tpXTsgaSsrKSB7CisJCWNvbW1pdF9ub3RlcyhyLCBjLT50cmVlc1tpXSwgbXNnKTsKKwkJZnJlZV9ub3RlcyhjLT50cmVlc1tpXSk7CisJfQorCWZyZWUoYy0+dHJlZXMpOworCWZyZWUoYyk7Cit9CmRpZmYgLS1naXQgYS9ub3Rlcy11dGlscy5oIGIvbm90ZXMtdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWIzYzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtdXRpbHMuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIE5PVEVTX1VUSUxTX0gKKyNkZWZpbmUgTk9URVNfVVRJTFNfSAorCisjaW5jbHVkZSAibm90ZXMuaCIKKworc3RydWN0IGNvbW1pdF9saXN0Oworc3RydWN0IG9iamVjdF9pZDsKK3N0cnVjdCByZXBvc2l0b3J5OworCisvKgorICogQ3JlYXRlIG5ldyBub3RlcyBjb21taXQgZnJvbSB0aGUgZ2l2ZW4gbm90ZXMgdHJlZQorICoKKyAqIFByb3BlcnRpZXMgb2YgdGhlIGNyZWF0ZWQgY29tbWl0OgorICogLSB0cmVlOiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdCB0byBhIHRyZWUgb2JqZWN0IHdpdGggd3JpdGVfbm90ZXNfdHJlZSgpLgorICogLSBwYXJlbnRzOiB0aGUgZ2l2ZW4gcGFyZW50cyBPUiAoaWYgTlVMTCkgdGhlIGNvbW1pdCByZWZlcmVuY2VkIGJ5IHQtPnJlZi4KKyAqIC0gYXV0aG9yL2NvbW1pdHRlcjogdGhlIGRlZmF1bHQgZGV0ZXJtaW5lZCBieSBjb21taXRfdHJlZSgpLgorICogLSBjb21taXQgbWVzc2FnZTogbXNnCisgKgorICogVGhlIHJlc3VsdGluZyBjb21taXQgU0hBMSBpcyBzdG9yZWQgaW4gcmVzdWx0X3NoYTEuCisgKi8KK3ZvaWQgY3JlYXRlX25vdGVzX2NvbW1pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsCisJCQkgY29uc3QgY2hhciAqbXNnLCBzaXplX3QgbXNnX2xlbiwKKwkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHRfb2lkKTsKKwordm9pZCBjb21taXRfbm90ZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICptc2cpOworCitlbnVtIG5vdGVzX21lcmdlX3N0cmF0ZWd5IHsKKwkJTk9URVNfTUVSR0VfUkVTT0xWRV9NQU5VQUwgPSAwLAorCQlOT1RFU19NRVJHRV9SRVNPTFZFX09VUlMsCisJCU5PVEVTX01FUkdFX1JFU09MVkVfVEhFSVJTLAorCQlOT1RFU19NRVJHRV9SRVNPTFZFX1VOSU9OLAorCQlOT1RFU19NRVJHRV9SRVNPTFZFX0NBVF9TT1JUX1VOSVEKK307CisKK3N0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyB7CisJc3RydWN0IG5vdGVzX3RyZWUgKip0cmVlczsKKwljb25zdCBjaGFyICpjbWQ7CisJaW50IGVuYWJsZWQ7CisJY29tYmluZV9ub3Rlc19mbiBjb21iaW5lOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmczsKKwlpbnQgcmVmc19mcm9tX2VudjsKKwlpbnQgbW9kZV9mcm9tX2VudjsKK307CisKK2ludCBwYXJzZV9ub3Rlc19tZXJnZV9zdHJhdGVneShjb25zdCBjaGFyICp2LCBlbnVtIG5vdGVzX21lcmdlX3N0cmF0ZWd5ICpzKTsKK3N0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqaW5pdF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKGNvbnN0IGNoYXIgKmNtZCk7CitpbnQgY29weV9ub3RlX2Zvcl9yZXdyaXRlKHN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYywKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZnJvbV9vYmosIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRvX29iaik7Cit2b2lkIGZpbmlzaF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgIHN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYywKKwkJCQkgICBjb25zdCBjaGFyICptc2cpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25vdGVzLmMgYi9ub3Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NGJhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy5jCkBAIC0wLDAgKzEsMTM1MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworLyoKKyAqIFVzZSBhIG5vbi1iYWxhbmNpbmcgc2ltcGxlIDE2LXRyZWUgc3RydWN0dXJlIHdpdGggc3RydWN0IGludF9ub2RlIGFzCisgKiBpbnRlcm5hbCBub2RlcywgYW5kIHN0cnVjdCBsZWFmX25vZGUgYXMgbGVhZiBub2Rlcy4gRWFjaCBpbnRfbm9kZSBoYXMgYQorICogMTYtYXJyYXkgb2YgcG9pbnRlcnMgdG8gaXRzIGNoaWxkcmVuLgorICogVGhlIGJvdHRvbSAyIGJpdHMgb2YgZWFjaCBwb2ludGVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHBvaW50ZXIgdHlwZQorICogLSBwdHIgJiAzID09IDAgLSBOVUxMIHBvaW50ZXIsIGFzc2VydChwdHIgPT0gTlVMTCkKKyAqIC0gcHRyICYgMyA9PSAxIC0gcG9pbnRlciB0byBuZXh0IGludGVybmFsIG5vZGUgLSBjYXN0IHRvIHN0cnVjdCBpbnRfbm9kZSAqCisgKiAtIHB0ciAmIDMgPT0gMiAtIHBvaW50ZXIgdG8gbm90ZSBlbnRyeSAtIGNhc3QgdG8gc3RydWN0IGxlYWZfbm9kZSAqCisgKiAtIHB0ciAmIDMgPT0gMyAtIHBvaW50ZXIgdG8gc3VidHJlZSBlbnRyeSAtIGNhc3QgdG8gc3RydWN0IGxlYWZfbm9kZSAqCisgKgorICogVGhlIHJvb3Qgbm9kZSBpcyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0cnVjdCBpbnRfbm9kZS4KKyAqLworc3RydWN0IGludF9ub2RlIHsKKwl2b2lkICphWzE2XTsKK307CisKKy8qCisgKiBMZWFmIG5vZGVzIGNvbWUgaW4gdHdvIHZhcmlhbnRzLCBub3RlIGVudHJpZXMgYW5kIHN1YnRyZWUgZW50cmllcywKKyAqIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIExTYiBvZiB0aGUgbGVhZiBub2RlIHBvaW50ZXIgKHNlZSBhYm92ZSkuCisgKiBBcyBhIG5vdGUgZW50cnksIHRoZSBrZXkgaXMgdGhlIFNIQTEgb2YgdGhlIHJlZmVyZW5jZWQgb2JqZWN0LCBhbmQgdGhlCisgKiB2YWx1ZSBpcyB0aGUgU0hBMSBvZiB0aGUgbm90ZSBvYmplY3QuCisgKiBBcyBhIHN1YnRyZWUgZW50cnksIHRoZSBrZXkgaXMgdGhlIHByZWZpeCBTSEExICh3L3RyYWlsaW5nIE5VTHMpIG9mIHRoZQorICogcmVmZXJlbmNlZCBvYmplY3QsIHVzaW5nIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGtleSB0byBzdG9yZSB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgcHJlZml4LiBUaGUgdmFsdWUgaXMgdGhlIFNIQTEgb2YgdGhlIHRyZWUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5vdGVzCisgKiBzdWJ0cmVlLgorICovCitzdHJ1Y3QgbGVhZl9ub2RlIHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGtleV9vaWQ7CisJc3RydWN0IG9iamVjdF9pZCB2YWxfb2lkOworfTsKKworLyoKKyAqIEEgbm90ZXMgdHJlZSBtYXkgY29udGFpbiBlbnRyaWVzIHRoYXQgYXJlIG5vdCBub3RlcywgYW5kIHRoYXQgZG8gbm90IGZvbGxvdworICogdGhlIG5hbWluZyBjb252ZW50aW9ucyBvZiBub3Rlcy4gVGhlcmUgYXJlIHR5cGljYWxseSBub25lL2ZldyBvZiB0aGVzZSwgYnV0CisgKiB3ZSBzdGlsbCBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlbS4gS2VlcCBhIHNpbXBsZSBsaW5rZWQgbGlzdCBzb3J0ZWQgYWxwaGEtCisgKiBiZXRpY2FsbHkgb24gdGhlIG5vbi1ub3RlIHBhdGguIFRoZSBsaXN0IGlzIHBvcHVsYXRlZCB3aGVuIHBhcnNpbmcgdHJlZQorICogb2JqZWN0cyBpbiBsb2FkX3N1YnRyZWUoKSwgYW5kIHRoZSBub24tbm90ZXMgYXJlIGNvcnJlY3RseSB3cml0dGVuIGJhY2sgaW50bworICogdGhlIHRyZWUgb2JqZWN0cyBwcm9kdWNlZCBieSB3cml0ZV9ub3Rlc190cmVlKCkuCisgKi8KK3N0cnVjdCBub25fbm90ZSB7CisJc3RydWN0IG5vbl9ub3RlICpuZXh0OyAvKiBncm91bmRlZCAobGFzdC0+bmV4dCA9PSBOVUxMKSAqLworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgaW50IG1vZGU7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7Cit9OworCisjZGVmaW5lIFBUUl9UWVBFX05VTEwgICAgIDAKKyNkZWZpbmUgUFRSX1RZUEVfSU5URVJOQUwgMQorI2RlZmluZSBQVFJfVFlQRV9OT1RFICAgICAyCisjZGVmaW5lIFBUUl9UWVBFX1NVQlRSRUUgIDMKKworI2RlZmluZSBHRVRfUFRSX1RZUEUocHRyKSAgICAgICAoKHVpbnRwdHJfdCkgKHB0cikgJiAzKQorI2RlZmluZSBDTFJfUFRSX1RZUEUocHRyKSAgICAgICAoKHZvaWQgKikgKCh1aW50cHRyX3QpIChwdHIpICYgfjMpKQorI2RlZmluZSBTRVRfUFRSX1RZUEUocHRyLCB0eXBlKSAoKHZvaWQgKikgKCh1aW50cHRyX3QpIChwdHIpIHwgKHR5cGUpKSkKKworI2RlZmluZSBHRVRfTklCQkxFKG4sIHNoYTEpICgoKChzaGExKVsobikgPj4gMV0pID4+ICgofihuKSAmIDB4MDEpIDw8IDIpKSAmIDB4MGYpCisKKyNkZWZpbmUgS0VZX0lOREVYICh0aGVfaGFzaF9hbGdvLT5yYXdzeiAtIDEpCisjZGVmaW5lIEZBTk9VVF9QQVRIX1NFUEFSQVRPUlMgKHRoZV9oYXNoX2FsZ28tPnJhd3N6IC0gMSkKKyNkZWZpbmUgRkFOT1VUX1BBVEhfU0VQQVJBVE9SU19NQVggKChHSVRfTUFYX0hFWFNaIC8gMikgLSAxKQorI2RlZmluZSBTVUJUUkVFX1NIQTFfUFJFRklYQ01QKGtleV9zaGExLCBzdWJ0cmVlX3NoYTEpIFwKKwkobWVtY21wKGtleV9zaGExLCBzdWJ0cmVlX3NoYTEsIHN1YnRyZWVfc2hhMVtLRVlfSU5ERVhdKSkKKworc3RydWN0IG5vdGVzX3RyZWUgZGVmYXVsdF9ub3Rlc190cmVlOworCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGRpc3BsYXlfbm90ZXNfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgc3RydWN0IG5vdGVzX3RyZWUgKipkaXNwbGF5X25vdGVzX3RyZWVzOworCitzdGF0aWMgdm9pZCBsb2FkX3N1YnRyZWUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBsZWFmX25vZGUgKnN1YnRyZWUsCisJCXN0cnVjdCBpbnRfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG4pOworCisvKgorICogU2VhcmNoIHRoZSB0cmVlIHVudGlsIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbiBmb3IgdGhlIGdpdmVuIGtleSBpcyBmb3VuZDoKKyAqIDEuIFN0YXJ0IGF0IHRoZSByb290IG5vZGUsIHdpdGggbiA9IDAKKyAqIDIuIElmIGFbMF0gYXQgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgYSBtYXRjaGluZyBzdWJ0cmVlIGVudHJ5LCB1bnBhY2sgdGhhdAorICogICAgc3VidHJlZSBlbnRyeSBhbmQgcmVtb3ZlIGl0OyByZXN0YXJ0IHNlYXJjaCBhdCB0aGUgY3VycmVudCBsZXZlbC4KKyAqIDMuIFVzZSB0aGUgbnRoIG5pYmJsZSBvZiB0aGUga2V5IGFzIGFuIGluZGV4IGludG8gYToKKyAqICAgIC0gSWYgYVtuXSBpcyBhbiBpbnRfbm9kZSwgcmVjdXJzZSBmcm9tICMyIGludG8gdGhhdCBub2RlIGFuZCBpbmNyZW1lbnQgbgorICogICAgLSBJZiBhIG1hdGNoaW5nIHN1YnRyZWUgZW50cnksIHVucGFjayB0aGF0IHN1YnRyZWUgZW50cnkgKGFuZCByZW1vdmUgaXQpOworICogICAgICByZXN0YXJ0IHNlYXJjaCBhdCB0aGUgY3VycmVudCBsZXZlbC4KKyAqICAgIC0gT3RoZXJ3aXNlLCB3ZSBoYXZlIGZvdW5kIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIGEgc3VidHJlZSBlbnRyeSB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5CisgKiAgICAgIC0gYSBub3RlIGVudHJ5IHdoaWNoIG1heSBvciBtYXkgbm90IG1hdGNoIHRoZSBrZXkKKyAqICAgICAgLSBhbiB1bnVzZWQgbGVhZiBub2RlIChOVUxMKQorICogICAgICBJbiBhbnkgY2FzZSwgc2V0ICp0cmVlIGFuZCAqbiwgYW5kIHJldHVybiBwb2ludGVyIHRvIHRoZSB0cmVlIGxvY2F0aW9uLgorICovCitzdGF0aWMgdm9pZCAqKm5vdGVfdHJlZV9zZWFyY2goc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBpbnRfbm9kZSAqKnRyZWUsCisJCXVuc2lnbmVkIGNoYXIgKm4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV9zaGExKQoreworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisJdW5zaWduZWQgY2hhciBpOworCXZvaWQgKnAgPSAoKnRyZWUpLT5hWzBdOworCisJaWYgKEdFVF9QVFJfVFlQRShwKSA9PSBQVFJfVFlQRV9TVUJUUkVFKSB7CisJCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUocCk7CisJCWlmICghU1VCVFJFRV9TSEExX1BSRUZJWENNUChrZXlfc2hhMSwgbC0+a2V5X29pZC5oYXNoKSkgeworCQkJLyogdW5wYWNrIHRyZWUgYW5kIHJlc3VtZSBzZWFyY2ggKi8KKwkJCSgqdHJlZSktPmFbMF0gPSBOVUxMOworCQkJbG9hZF9zdWJ0cmVlKHQsIGwsICp0cmVlLCAqbik7CisJCQlmcmVlKGwpOworCQkJcmV0dXJuIG5vdGVfdHJlZV9zZWFyY2godCwgdHJlZSwgbiwga2V5X3NoYTEpOworCQl9CisJfQorCisJaSA9IEdFVF9OSUJCTEUoKm4sIGtleV9zaGExKTsKKwlwID0gKCp0cmVlKS0+YVtpXTsKKwlzd2l0Y2ggKEdFVF9QVFJfVFlQRShwKSkgeworCWNhc2UgUFRSX1RZUEVfSU5URVJOQUw6CisJCSp0cmVlID0gQ0xSX1BUUl9UWVBFKHApOworCQkoKm4pKys7CisJCXJldHVybiBub3RlX3RyZWVfc2VhcmNoKHQsIHRyZWUsIG4sIGtleV9zaGExKTsKKwljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUocCk7CisJCWlmICghU1VCVFJFRV9TSEExX1BSRUZJWENNUChrZXlfc2hhMSwgbC0+a2V5X29pZC5oYXNoKSkgeworCQkJLyogdW5wYWNrIHRyZWUgYW5kIHJlc3VtZSBzZWFyY2ggKi8KKwkJCSgqdHJlZSktPmFbaV0gPSBOVUxMOworCQkJbG9hZF9zdWJ0cmVlKHQsIGwsICp0cmVlLCAqbik7CisJCQlmcmVlKGwpOworCQkJcmV0dXJuIG5vdGVfdHJlZV9zZWFyY2godCwgdHJlZSwgbiwga2V5X3NoYTEpOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAmKCgqdHJlZSktPmFbaV0pOworCX0KK30KKworLyoKKyAqIFRvIGZpbmQgYSBsZWFmX25vZGU6CisgKiBTZWFyY2ggdG8gdGhlIHRyZWUgbG9jYXRpb24gYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBrZXk6CisgKiBJZiBhIG5vdGUgZW50cnkgd2l0aCBtYXRjaGluZyBrZXksIHJldHVybiB0aGUgbm90ZSBlbnRyeSwgZWxzZSByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHN0cnVjdCBsZWFmX25vZGUgKm5vdGVfdHJlZV9maW5kKHN0cnVjdCBub3Rlc190cmVlICp0LAorCQlzdHJ1Y3QgaW50X25vZGUgKnRyZWUsIHVuc2lnbmVkIGNoYXIgbiwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5X3NoYTEpCit7CisJdm9pZCAqKnAgPSBub3RlX3RyZWVfc2VhcmNoKHQsICZ0cmVlLCAmbiwga2V5X3NoYTEpOworCWlmIChHRVRfUFRSX1RZUEUoKnApID09IFBUUl9UWVBFX05PVEUpIHsKKwkJc3RydWN0IGxlYWZfbm9kZSAqbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRSgqcCk7CisJCWlmIChoYXNoZXEoa2V5X3NoYTEsIGwtPmtleV9vaWQuaGFzaCkpCisJCQlyZXR1cm4gbDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBIb3cgdG8gY29uc29saWRhdGUgYW4gaW50X25vZGU6CisgKiBJZiB0aGVyZSBhcmUgPiAxIG5vbi1OVUxMIGVudHJpZXMsIGdpdmUgdXAgYW5kIHJldHVybiBub24temVyby4KKyAqIE90aGVyd2lzZSByZXBsYWNlIHRoZSBpbnRfbm9kZSBhdCB0aGUgZ2l2ZW4gaW5kZXggaW4gdGhlIGdpdmVuIHBhcmVudCBub2RlCisgKiB3aXRoIHRoZSBvbmx5IE5PVEUgZW50cnkgKG9yIGEgTlVMTCBlbnRyeSBpZiBubyBlbnRyaWVzKSBmcm9tIHRoZSBnaXZlbgorICogdHJlZSwgYW5kIHJldHVybiAwLgorICovCitzdGF0aWMgaW50IG5vdGVfdHJlZV9jb25zb2xpZGF0ZShzdHJ1Y3QgaW50X25vZGUgKnRyZWUsCisJc3RydWN0IGludF9ub2RlICpwYXJlbnQsIHVuc2lnbmVkIGNoYXIgaW5kZXgpCit7CisJdW5zaWduZWQgaW50IGk7CisJdm9pZCAqcCA9IE5VTEw7CisKKwlhc3NlcnQodHJlZSAmJiBwYXJlbnQpOworCWFzc2VydChDTFJfUFRSX1RZUEUocGFyZW50LT5hW2luZGV4XSkgPT0gdHJlZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAoR0VUX1BUUl9UWVBFKHRyZWUtPmFbaV0pICE9IFBUUl9UWVBFX05VTEwpIHsKKwkJCWlmIChwKSAvKiBtb3JlIHRoYW4gb25lIGVudHJ5ICovCisJCQkJcmV0dXJuIC0yOworCQkJcCA9IHRyZWUtPmFbaV07CisJCX0KKwl9CisKKwlpZiAocCAmJiAoR0VUX1BUUl9UWVBFKHApICE9IFBUUl9UWVBFX05PVEUpKQorCQlyZXR1cm4gLTI7CisJLyogcmVwbGFjZSB0cmVlIHdpdGggcCBpbiBwYXJlbnRbaW5kZXhdICovCisJcGFyZW50LT5hW2luZGV4XSA9IHA7CisJZnJlZSh0cmVlKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRvIHJlbW92ZSBhIGxlYWZfbm9kZToKKyAqIFNlYXJjaCB0byB0aGUgdHJlZSBsb2NhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIGxlYWZfbm9kZSdzIGtleToKKyAqIC0gSWYgbG9jYXRpb24gZG9lcyBub3QgaG9sZCBhIG1hdGNoaW5nIGVudHJ5LCBhYm9ydCBhbmQgZG8gbm90aGluZy4KKyAqIC0gQ29weSB0aGUgbWF0Y2hpbmcgZW50cnkncyB2YWx1ZSBpbnRvIHRoZSBnaXZlbiBlbnRyeS4KKyAqIC0gUmVwbGFjZSB0aGUgbWF0Y2hpbmcgbGVhZl9ub2RlIHdpdGggYSBOVUxMIGVudHJ5IChhbmQgZnJlZSB0aGUgbGVhZl9ub2RlKS4KKyAqIC0gQ29uc29saWRhdGUgaW50X25vZGVzIHJlcGVhdGVkbHksIHdoaWxlIHdhbGtpbmcgdXAgdGhlIHRyZWUgdG93YXJkcyByb290LgorICovCitzdGF0aWMgdm9pZCBub3RlX3RyZWVfcmVtb3ZlKHN0cnVjdCBub3Rlc190cmVlICp0LAorCQlzdHJ1Y3QgaW50X25vZGUgKnRyZWUsIHVuc2lnbmVkIGNoYXIgbiwKKwkJc3RydWN0IGxlYWZfbm9kZSAqZW50cnkpCit7CisJc3RydWN0IGxlYWZfbm9kZSAqbDsKKwlzdHJ1Y3QgaW50X25vZGUgKnBhcmVudF9zdGFja1tHSVRfTUFYX1JBV1NaXTsKKwl1bnNpZ25lZCBjaGFyIGksIGo7CisJdm9pZCAqKnAgPSBub3RlX3RyZWVfc2VhcmNoKHQsICZ0cmVlLCAmbiwgZW50cnktPmtleV9vaWQuaGFzaCk7CisKKwlhc3NlcnQoR0VUX1BUUl9UWVBFKGVudHJ5KSA9PSAwKTsgLyogbm8gdHlwZSBiaXRzIHNldCAqLworCWlmIChHRVRfUFRSX1RZUEUoKnApICE9IFBUUl9UWVBFX05PVEUpCisJCXJldHVybjsgLyogdHlwZSBtaXNtYXRjaCwgbm90aGluZyB0byByZW1vdmUgKi8KKwlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKCpwKTsKKwlpZiAoIW9pZGVxKCZsLT5rZXlfb2lkLCAmZW50cnktPmtleV9vaWQpKQorCQlyZXR1cm47IC8qIGtleSBtaXNtYXRjaCwgbm90aGluZyB0byByZW1vdmUgKi8KKworCS8qIHdlIGhhdmUgZm91bmQgYSBtYXRjaGluZyBlbnRyeSAqLworCW9pZGNweSgmZW50cnktPnZhbF9vaWQsICZsLT52YWxfb2lkKTsKKwlmcmVlKGwpOworCSpwID0gU0VUX1BUUl9UWVBFKE5VTEwsIFBUUl9UWVBFX05VTEwpOworCisJLyogY29uc29saWRhdGUgdGhpcyB0cmVlIGxldmVsLCBhbmQgcGFyZW50IGxldmVscywgaWYgcG9zc2libGUgKi8KKwlpZiAoIW4pCisJCXJldHVybjsgLyogY2Fubm90IGNvbnNvbGlkYXRlIHRvcCBsZXZlbCAqLworCS8qIGZpcnN0LCBidWlsZCBzdGFjayBvZiBhbmNlc3RvcnMgYmV0d2VlbiByb290IGFuZCBjdXJyZW50IG5vZGUgKi8KKwlwYXJlbnRfc3RhY2tbMF0gPSB0LT5yb290OworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaiA9IEdFVF9OSUJCTEUoaSwgZW50cnktPmtleV9vaWQuaGFzaCk7CisJCXBhcmVudF9zdGFja1tpICsgMV0gPSBDTFJfUFRSX1RZUEUocGFyZW50X3N0YWNrW2ldLT5hW2pdKTsKKwl9CisJYXNzZXJ0KGkgPT0gbiAmJiBwYXJlbnRfc3RhY2tbaV0gPT0gdHJlZSk7CisJLyogbmV4dCwgdW53aW5kIHN0YWNrIHVudGlsIG5vdGVfdHJlZV9jb25zb2xpZGF0ZSgpIGlzIGRvbmUgKi8KKwl3aGlsZSAoaSA+IDAgJiYKKwkgICAgICAgIW5vdGVfdHJlZV9jb25zb2xpZGF0ZShwYXJlbnRfc3RhY2tbaV0sIHBhcmVudF9zdGFja1tpIC0gMV0sCisJCQkJICAgICAgR0VUX05JQkJMRShpIC0gMSwgZW50cnktPmtleV9vaWQuaGFzaCkpKQorCQlpLS07Cit9CisKKy8qCisgKiBUbyBpbnNlcnQgYSBsZWFmX25vZGU6CisgKiBTZWFyY2ggdG8gdGhlIHRyZWUgbG9jYXRpb24gYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBsZWFmX25vZGUncyBrZXk6CisgKiAtIElmIGxvY2F0aW9uIGlzIHVudXNlZCAoTlVMTCksIHN0b3JlIHRoZSB0d2Vha2VkIHBvaW50ZXIgZGlyZWN0bHkgdGhlcmUKKyAqIC0gSWYgbG9jYXRpb24gaG9sZHMgYSBub3RlIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgbm90ZS10by1iZS1pbnNlcnRlZCwgdGhlbgorICogICBjb21iaW5lIHRoZSB0d28gbm90ZXMgKGJ5IGNhbGxpbmcgdGhlIGdpdmVuIGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24pLgorICogLSBJZiBsb2NhdGlvbiBob2xkcyBhIG5vdGUgZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBzdWJ0cmVlLXRvLWJlLWluc2VydGVkLAorICogICB0aGVuIHVucGFjayB0aGUgc3VidHJlZS10by1iZS1pbnNlcnRlZCBpbnRvIHRoZSBsb2NhdGlvbi4KKyAqIC0gSWYgbG9jYXRpb24gaG9sZHMgYSBtYXRjaGluZyBzdWJ0cmVlIGVudHJ5LCB1bnBhY2sgdGhlIHN1YnRyZWUgYXQgdGhhdAorICogICBsb2NhdGlvbiwgYW5kIHJlc3RhcnQgdGhlIGluc2VydCBvcGVyYXRpb24gZnJvbSB0aGF0IGxldmVsLgorICogLSBFbHNlLCBjcmVhdGUgYSBuZXcgaW50X25vZGUsIGhvbGRpbmcgYm90aCB0aGUgbm9kZS1hdC1sb2NhdGlvbiBhbmQgdGhlCisgKiAgIG5vZGUtdG8tYmUtaW5zZXJ0ZWQsIGFuZCBzdG9yZSB0aGUgbmV3IGludF9ub2RlIGludG8gdGhlIGxvY2F0aW9uLgorICovCitzdGF0aWMgaW50IG5vdGVfdHJlZV9pbnNlcnQoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBpbnRfbm9kZSAqdHJlZSwKKwkJdW5zaWduZWQgY2hhciBuLCBzdHJ1Y3QgbGVhZl9ub2RlICplbnRyeSwgdW5zaWduZWQgY2hhciB0eXBlLAorCQljb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXMpCit7CisJc3RydWN0IGludF9ub2RlICpuZXdfbm9kZTsKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCXZvaWQgKipwID0gbm90ZV90cmVlX3NlYXJjaCh0LCAmdHJlZSwgJm4sIGVudHJ5LT5rZXlfb2lkLmhhc2gpOworCWludCByZXQgPSAwOworCisJYXNzZXJ0KEdFVF9QVFJfVFlQRShlbnRyeSkgPT0gMCk7IC8qIG5vIHR5cGUgYml0cyBzZXQgKi8KKwlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKCpwKTsKKwlzd2l0Y2ggKEdFVF9QVFJfVFlQRSgqcCkpIHsKKwljYXNlIFBUUl9UWVBFX05VTEw6CisJCWFzc2VydCghKnApOworCQlpZiAoaXNfbnVsbF9vaWQoJmVudHJ5LT52YWxfb2lkKSkKKwkJCWZyZWUoZW50cnkpOworCQllbHNlCisJCQkqcCA9IFNFVF9QVFJfVFlQRShlbnRyeSwgdHlwZSk7CisJCXJldHVybiAwOworCWNhc2UgUFRSX1RZUEVfTk9URToKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgUFRSX1RZUEVfTk9URToKKwkJCWlmIChvaWRlcSgmbC0+a2V5X29pZCwgJmVudHJ5LT5rZXlfb2lkKSkgeworCQkJCS8qIHNraXAgY29uY2F0ZW5hdGlvbiBpZiBsID09IGVudHJ5ICovCisJCQkJaWYgKG9pZGVxKCZsLT52YWxfb2lkLCAmZW50cnktPnZhbF9vaWQpKSB7CisJCQkJCWZyZWUoZW50cnkpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJCQlyZXQgPSBjb21iaW5lX25vdGVzKCZsLT52YWxfb2lkLAorCQkJCQkJICAgICZlbnRyeS0+dmFsX29pZCk7CisJCQkJaWYgKCFyZXQgJiYgaXNfbnVsbF9vaWQoJmwtPnZhbF9vaWQpKQorCQkJCQlub3RlX3RyZWVfcmVtb3ZlKHQsIHRyZWUsIG4sIGVudHJ5KTsKKwkJCQlmcmVlKGVudHJ5KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUFRSX1RZUEVfU1VCVFJFRToKKwkJCWlmICghU1VCVFJFRV9TSEExX1BSRUZJWENNUChsLT5rZXlfb2lkLmhhc2gsCisJCQkJCQkgICAgZW50cnktPmtleV9vaWQuaGFzaCkpIHsKKwkJCQkvKiB1bnBhY2sgJ2VudHJ5JyAqLworCQkJCWxvYWRfc3VidHJlZSh0LCBlbnRyeSwgdHJlZSwgbik7CisJCQkJZnJlZShlbnRyeSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCWlmICghU1VCVFJFRV9TSEExX1BSRUZJWENNUChlbnRyeS0+a2V5X29pZC5oYXNoLCBsLT5rZXlfb2lkLmhhc2gpKSB7CisJCQkvKiB1bnBhY2sgJ2wnIGFuZCByZXN0YXJ0IGluc2VydCAqLworCQkJKnAgPSBOVUxMOworCQkJbG9hZF9zdWJ0cmVlKHQsIGwsIHRyZWUsIG4pOworCQkJZnJlZShsKTsKKwkJCXJldHVybiBub3RlX3RyZWVfaW5zZXJ0KHQsIHRyZWUsIG4sIGVudHJ5LCB0eXBlLAorCQkJCQkJY29tYmluZV9ub3Rlcyk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogbm9uLW1hdGNoaW5nIGxlYWZfbm9kZSAqLworCWFzc2VydChHRVRfUFRSX1RZUEUoKnApID09IFBUUl9UWVBFX05PVEUgfHwKKwkgICAgICAgR0VUX1BUUl9UWVBFKCpwKSA9PSBQVFJfVFlQRV9TVUJUUkVFKTsKKwlpZiAoaXNfbnVsbF9vaWQoJmVudHJ5LT52YWxfb2lkKSkgeyAvKiBza2lwIGluc2VydGlvbiBvZiBlbXB0eSBub3RlICovCisJCWZyZWUoZW50cnkpOworCQlyZXR1cm4gMDsKKwl9CisJbmV3X25vZGUgPSAoc3RydWN0IGludF9ub2RlICopIHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBpbnRfbm9kZSkpOworCXJldCA9IG5vdGVfdHJlZV9pbnNlcnQodCwgbmV3X25vZGUsIG4gKyAxLCBsLCBHRVRfUFRSX1RZUEUoKnApLAorCQkJICAgICAgIGNvbWJpbmVfbm90ZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJKnAgPSBTRVRfUFRSX1RZUEUobmV3X25vZGUsIFBUUl9UWVBFX0lOVEVSTkFMKTsKKwlyZXR1cm4gbm90ZV90cmVlX2luc2VydCh0LCBuZXdfbm9kZSwgbiArIDEsIGVudHJ5LCB0eXBlLCBjb21iaW5lX25vdGVzKTsKK30KKworLyogRnJlZSB0aGUgZW50aXJlIG5vdGVzIGRhdGEgY29udGFpbmVkIGluIHRoZSBnaXZlbiB0cmVlICovCitzdGF0aWMgdm9pZCBub3RlX3RyZWVfZnJlZShzdHJ1Y3QgaW50X25vZGUgKnRyZWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJdm9pZCAqcCA9IHRyZWUtPmFbaV07CisJCXN3aXRjaCAoR0VUX1BUUl9UWVBFKHApKSB7CisJCWNhc2UgUFRSX1RZUEVfSU5URVJOQUw6CisJCQlub3RlX3RyZWVfZnJlZShDTFJfUFRSX1RZUEUocCkpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgUFRSX1RZUEVfTk9URToKKwkJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQkJZnJlZShDTFJfUFRSX1RZUEUocCkpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG5vbl9ub3RlX2NtcChjb25zdCBzdHJ1Y3Qgbm9uX25vdGUgKmEsIGNvbnN0IHN0cnVjdCBub25fbm90ZSAqYikKK3sKKwlyZXR1cm4gc3RyY21wKGEtPnBhdGgsIGItPnBhdGgpOworfQorCisvKiBub3RlOiB0YWtlcyBvd25lcnNoaXAgb2YgcGF0aCBzdHJpbmcgKi8KK3N0YXRpYyB2b2lkIGFkZF9ub25fbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY2hhciAqcGF0aCwKKwkJdW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG5vbl9ub3RlICpwID0gdC0+cHJldl9ub25fbm90ZSwgKm47CisJbiA9IChzdHJ1Y3Qgbm9uX25vdGUgKikgeG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vbl9ub3RlKSk7CisJbi0+bmV4dCA9IE5VTEw7CisJbi0+cGF0aCA9IHBhdGg7CisJbi0+bW9kZSA9IG1vZGU7CisJaGFzaGNweShuLT5vaWQuaGFzaCwgc2hhMSk7CisJdC0+cHJldl9ub25fbm90ZSA9IG47CisKKwlpZiAoIXQtPmZpcnN0X25vbl9ub3RlKSB7CisJCXQtPmZpcnN0X25vbl9ub3RlID0gbjsKKwkJcmV0dXJuOworCX0KKworCWlmIChub25fbm90ZV9jbXAocCwgbikgPCAwKQorCQk7IC8qIGRvIG5vdGhpbmcgICovCisJZWxzZSBpZiAobm9uX25vdGVfY21wKHQtPmZpcnN0X25vbl9ub3RlLCBuKSA8PSAwKQorCQlwID0gdC0+Zmlyc3Rfbm9uX25vdGU7CisJZWxzZSB7CisJCS8qIG4gc29ydHMgYmVmb3JlIHQtPmZpcnN0X25vbl9ub3RlICovCisJCW4tPm5leHQgPSB0LT5maXJzdF9ub25fbm90ZTsKKwkJdC0+Zmlyc3Rfbm9uX25vdGUgPSBuOworCQlyZXR1cm47CisJfQorCisJLyogbiBzb3J0cyBlcXVhbCBvciBhZnRlciBwICovCisJd2hpbGUgKHAtPm5leHQgJiYgbm9uX25vdGVfY21wKHAtPm5leHQsIG4pIDw9IDApCisJCXAgPSBwLT5uZXh0OworCisJaWYgKG5vbl9ub3RlX2NtcChwLCBuKSA9PSAwKSB7IC8qIG4gfj0gcDsgb3ZlcndyaXRlIHAgd2l0aCBuICovCisJCWFzc2VydChzdHJjbXAocC0+cGF0aCwgbi0+cGF0aCkgPT0gMCk7CisJCXAtPm1vZGUgPSBuLT5tb2RlOworCQlvaWRjcHkoJnAtPm9pZCwgJm4tPm9pZCk7CisJCWZyZWUobik7CisJCXQtPnByZXZfbm9uX25vdGUgPSBwOworCQlyZXR1cm47CisJfQorCisJLyogbiBzb3J0cyBiZXR3ZWVuIHAgYW5kIHAtPm5leHQgKi8KKwluLT5uZXh0ID0gcC0+bmV4dDsKKwlwLT5uZXh0ID0gbjsKK30KKworc3RhdGljIHZvaWQgbG9hZF9zdWJ0cmVlKHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgbGVhZl9ub2RlICpzdWJ0cmVlLAorCQlzdHJ1Y3QgaW50X25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBuKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0X29pZDsKKwlzaXplX3QgcHJlZml4X2xlbjsKKwl2b2lkICpidWY7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJYnVmID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IodGhlX3JlcG9zaXRvcnksICZkZXNjLCAmc3VidHJlZS0+dmFsX29pZCk7CisJaWYgKCFidWYpCisJCWRpZSgiQ291bGQgbm90IHJlYWQgJXMgZm9yIG5vdGVzLWluZGV4IiwKKwkJICAgICBvaWRfdG9faGV4KCZzdWJ0cmVlLT52YWxfb2lkKSk7CisKKwlwcmVmaXhfbGVuID0gc3VidHJlZS0+a2V5X29pZC5oYXNoW0tFWV9JTkRFWF07CisJaWYgKHByZWZpeF9sZW4gPj0gaGFzaHN6KQorCQlCVUcoInByZWZpeF9sZW4gKCUiUFJJdU1BWCIpIGlzIG91dCBvZiByYW5nZSIsICh1aW50bWF4X3QpcHJlZml4X2xlbik7CisJaWYgKHByZWZpeF9sZW4gKiAyIDwgbikKKwkJQlVHKCJwcmVmaXhfbGVuICglIlBSSXVNQVgiKSBpcyB0b28gc21hbGwiLCAodWludG1heF90KXByZWZpeF9sZW4pOworCW1lbWNweShvYmplY3Rfb2lkLmhhc2gsIHN1YnRyZWUtPmtleV9vaWQuaGFzaCwgcHJlZml4X2xlbik7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJdW5zaWduZWQgY2hhciB0eXBlOworCQlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCQlzaXplX3QgcGF0aF9sZW4gPSBzdHJsZW4oZW50cnkucGF0aCk7CisKKwkJaWYgKHBhdGhfbGVuID09IDIgKiAoaGFzaHN6IC0gcHJlZml4X2xlbikpIHsKKwkJCS8qIFRoaXMgaXMgcG90ZW50aWFsbHkgdGhlIHJlbWFpbmRlciBvZiB0aGUgU0hBLTEgKi8KKworCQkJaWYgKCFTX0lTUkVHKGVudHJ5Lm1vZGUpKQorCQkJCS8qIG5vdGVzIG11c3QgYmUgYmxvYnMgKi8KKwkJCQlnb3RvIGhhbmRsZV9ub25fbm90ZTsKKworCQkJaWYgKGhleF90b19ieXRlcyhvYmplY3Rfb2lkLmhhc2ggKyBwcmVmaXhfbGVuLCBlbnRyeS5wYXRoLAorCQkJCQkgaGFzaHN6IC0gcHJlZml4X2xlbikpCisJCQkJZ290byBoYW5kbGVfbm9uX25vdGU7IC8qIGVudHJ5LnBhdGggaXMgbm90IGEgU0hBMSAqLworCisJCQl0eXBlID0gUFRSX1RZUEVfTk9URTsKKwkJfSBlbHNlIGlmIChwYXRoX2xlbiA9PSAyKSB7CisJCQkvKiBUaGlzIGlzIHBvdGVudGlhbGx5IGFuIGludGVybmFsIG5vZGUgKi8KKwkJCXNpemVfdCBsZW4gPSBwcmVmaXhfbGVuOworCisJCQlpZiAoIVNfSVNESVIoZW50cnkubW9kZSkpCisJCQkJLyogaW50ZXJuYWwgbm9kZXMgbXVzdCBiZSB0cmVlcyAqLworCQkJCWdvdG8gaGFuZGxlX25vbl9ub3RlOworCisJCQlpZiAoaGV4X3RvX2J5dGVzKG9iamVjdF9vaWQuaGFzaCArIGxlbisrLCBlbnRyeS5wYXRoLCAxKSkKKwkJCQlnb3RvIGhhbmRsZV9ub25fbm90ZTsgLyogZW50cnkucGF0aCBpcyBub3QgYSBTSEExICovCisKKwkJCS8qCisJCQkgKiBQYWQgdGhlIHJlc3Qgb2YgdGhlIFNIQS0xIHdpdGggemVyb3MsCisJCQkgKiBleGNlcHQgZm9yIHRoZSBsYXN0IGJ5dGUsIHdoZXJlIHdlIHdyaXRlCisJCQkgKiB0aGUgbGVuZ3RoOgorCQkJICovCisJCQltZW1zZXQob2JqZWN0X29pZC5oYXNoICsgbGVuLCAwLCBoYXNoc3ogLSBsZW4gLSAxKTsKKwkJCW9iamVjdF9vaWQuaGFzaFtLRVlfSU5ERVhdID0gKHVuc2lnbmVkIGNoYXIpbGVuOworCisJCQl0eXBlID0gUFRSX1RZUEVfU1VCVFJFRTsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoaXMgY2FuJ3QgYmUgcGFydCBvZiBhIG5vdGUgKi8KKwkJCWdvdG8gaGFuZGxlX25vbl9ub3RlOworCQl9CisKKwkJbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsKSk7CisJCW9pZGNweSgmbC0+a2V5X29pZCwgJm9iamVjdF9vaWQpOworCQlvaWRjcHkoJmwtPnZhbF9vaWQsICZlbnRyeS5vaWQpOworCQlpZiAobm90ZV90cmVlX2luc2VydCh0LCBub2RlLCBuLCBsLCB0eXBlLAorCQkJCSAgICAgY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZSkpCisJCQlkaWUoIkZhaWxlZCB0byBsb2FkICVzICVzIGludG8gbm90ZXMgdHJlZSAiCisJCQkgICAgImZyb20gJXMiLAorCQkJICAgIHR5cGUgPT0gUFRSX1RZUEVfTk9URSA/ICJub3RlIiA6ICJzdWJ0cmVlIiwKKwkJCSAgICBvaWRfdG9faGV4KCZvYmplY3Rfb2lkKSwgdC0+cmVmKTsKKworCQljb250aW51ZTsKKworaGFuZGxlX25vbl9ub3RlOgorCQkvKgorCQkgKiBEZXRlcm1pbmUgZnVsbCBwYXRoIGZvciB0aGlzIG5vbi1ub3RlIGVudHJ5LiBUaGUKKwkJICogZmlsZW5hbWUgaXMgYWxyZWFkeSBmb3VuZCBpbiBlbnRyeS5wYXRoLCBidXQgdGhlCisJCSAqIGRpcmVjdG9yeSBwYXJ0IG9mIHRoZSBwYXRoIG11c3QgYmUgZGVkdWNlZCBmcm9tIHRoZQorCQkgKiBzdWJ0cmVlIGNvbnRhaW5pbmcgdGhpcyBlbnRyeSBiYXNlZCBvbiBvdXIKKwkJICoga25vd2xlZGdlIHRoYXQgdGhlIG92ZXJhbGwgbm90ZXMgdHJlZSBmb2xsb3dzIGEKKwkJICogc3RyaWN0IGJ5dGUtYmFzZWQgcHJvZ3Jlc3NpdmUgZmFub3V0IHN0cnVjdHVyZQorCQkgKiAoaS5lLiB1c2luZyAyLzM4LCAyLzIvMzYsIGV0Yy4gZmFub3V0cykuCisJCSAqLworCQl7CisJCQlzdHJ1Y3Qgc3RyYnVmIG5vbl9ub3RlX3BhdGggPSBTVFJCVUZfSU5JVDsKKwkJCWNvbnN0IGNoYXIgKnEgPSBvaWRfdG9faGV4KCZzdWJ0cmVlLT5rZXlfb2lkKTsKKwkJCXNpemVfdCBpOworCQkJZm9yIChpID0gMDsgaSA8IHByZWZpeF9sZW47IGkrKykgeworCQkJCXN0cmJ1Zl9hZGRjaCgmbm9uX25vdGVfcGF0aCwgKnErKyk7CisJCQkJc3RyYnVmX2FkZGNoKCZub25fbm90ZV9wYXRoLCAqcSsrKTsKKwkJCQlzdHJidWZfYWRkY2goJm5vbl9ub3RlX3BhdGgsICcvJyk7CisJCQl9CisJCQlzdHJidWZfYWRkc3RyKCZub25fbm90ZV9wYXRoLCBlbnRyeS5wYXRoKTsKKwkJCWFkZF9ub25fbm90ZSh0LCBzdHJidWZfZGV0YWNoKCZub25fbm90ZV9wYXRoLCBOVUxMKSwKKwkJCQkgICAgIGVudHJ5Lm1vZGUsIGVudHJ5Lm9pZC5oYXNoKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgb3B0aW1hbCBvbi1kaXNrIGZhbm91dCBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBub3RlcyB0cmVlCisgKgorICogR2l2ZW4gYSAoc3ViKXRyZWUgYW5kIHRoZSBsZXZlbCBpbiB0aGUgaW50ZXJuYWwgdHJlZSBzdHJ1Y3R1cmUsIGRldGVybWluZQorICogd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGV4aXN0aW5nIGZhbm91dCBzaG91bGQgYmUgZXhwYW5kZWQgZm9yIHRoaXMKKyAqIChzdWIpdHJlZS4KKyAqCisgKiBWYWx1ZXMgb2YgdGhlICdmYW5vdXQnIHZhcmlhYmxlOgorICogLSAwOiBObyBmYW5vdXQgKGFsbCBub3RlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGluIHRoZSByb290IG5vdGVzIHRyZWUpCisgKiAtIDE6IDIvMzggZmFub3V0CisgKiAtIDI6IDIvMi8zNiBmYW5vdXQKKyAqIC0gMzogMi8yLzIvMzQgZmFub3V0CisgKiBldGMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRldGVybWluZV9mYW5vdXQoc3RydWN0IGludF9ub2RlICp0cmVlLCB1bnNpZ25lZCBjaGFyIG4sCisJCXVuc2lnbmVkIGNoYXIgZmFub3V0KQoreworCS8qCisJICogVGhlIGZvbGxvd2luZyBpcyBhIHNpbXBsZSBoZXVyaXN0aWMgdGhhdCB3b3JrcyB3ZWxsIGluIHByYWN0aWNlOgorCSAqIEZvciBlYWNoIGV2ZW4tbnVtYmVyZWQgMTYtdHJlZSBsZXZlbCAocmVtZW1iZXIgdGhhdCBlYWNoIG9uLWRpc2sKKwkgKiBmYW5vdXQgbGV2ZWwgY29ycmVzcG9uZHMgdG8gX3R3b18gMTYtdHJlZSBsZXZlbHMpLCBwZWVrIGF0IGFsbCAxNgorCSAqIGVudHJpZXMgYXQgdGhhdCB0cmVlIGxldmVsLiBJZiBhbGwgb2YgdGhlbSBhcmUgZWl0aGVyIGludF9ub2RlcyBvcgorCSAqIHN1YnRyZWUgZW50cmllcywgdGhlbiB0aGVyZSBhcmUgbGlrZWx5IHBsZW50eSBvZiBub3RlcyBiZWxvdyB0aGlzCisJICogbGV2ZWwsIHNvIHdlIHJldHVybiBhbiBpbmNyZW1lbnRlZCBmYW5vdXQuCisJICovCisJdW5zaWduZWQgaW50IGk7CisJaWYgKChuICUgMikgfHwgKG4gPiAyICogZmFub3V0KSkKKwkJcmV0dXJuIGZhbm91dDsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlzd2l0Y2ggKEdFVF9QVFJfVFlQRSh0cmVlLT5hW2ldKSkgeworCQljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCWNhc2UgUFRSX1RZUEVfSU5URVJOQUw6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBmYW5vdXQ7CisJCX0KKwl9CisJcmV0dXJuIGZhbm91dCArIDE7Cit9CisKKy8qIGhleCBvaWQgKyAnLycgYmV0d2VlbiBlYWNoIHBhaXIgb2YgaGV4IGRpZ2l0cyArIE5VTCAqLworI2RlZmluZSBGQU5PVVRfUEFUSF9NQVggR0lUX01BWF9IRVhTWiArIEZBTk9VVF9QQVRIX1NFUEFSQVRPUlNfTUFYICsgMQorCitzdGF0aWMgdm9pZCBjb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorCQl1bnNpZ25lZCBjaGFyIGZhbm91dCwgY2hhciAqcGF0aCkKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIGogPSAwOworCWNvbnN0IGNoYXIgKmhleF9oYXNoID0gaGFzaF90b19oZXgoaGFzaCk7CisJYXNzZXJ0KGZhbm91dCA8IHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwl3aGlsZSAoZmFub3V0KSB7CisJCXBhdGhbaSsrXSA9IGhleF9oYXNoW2orK107CisJCXBhdGhbaSsrXSA9IGhleF9oYXNoW2orK107CisJCXBhdGhbaSsrXSA9ICcvJzsKKwkJZmFub3V0LS07CisJfQorCXhzbnByaW50ZihwYXRoICsgaSwgRkFOT1VUX1BBVEhfTUFYIC0gaSwgIiVzIiwgaGV4X2hhc2ggKyBqKTsKK30KKworc3RhdGljIGludCBmb3JfZWFjaF9ub3RlX2hlbHBlcihzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGludF9ub2RlICp0cmVlLAorCQl1bnNpZ25lZCBjaGFyIG4sIHVuc2lnbmVkIGNoYXIgZmFub3V0LCBpbnQgZmxhZ3MsCisJCWVhY2hfbm90ZV9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl2b2lkICpwOworCWludCByZXQgPSAwOworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisJc3RhdGljIGNoYXIgcGF0aFtGQU5PVVRfUEFUSF9NQVhdOworCisJZmFub3V0ID0gZGV0ZXJtaW5lX2Zhbm91dCh0cmVlLCBuLCBmYW5vdXQpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CityZWRvOgorCQlwID0gdHJlZS0+YVtpXTsKKwkJc3dpdGNoIChHRVRfUFRSX1RZUEUocCkpIHsKKwkJY2FzZSBQVFJfVFlQRV9JTlRFUk5BTDoKKwkJCS8qIHJlY3Vyc2UgaW50byBpbnRfbm9kZSAqLworCQkJcmV0ID0gZm9yX2VhY2hfbm90ZV9oZWxwZXIodCwgQ0xSX1BUUl9UWVBFKHApLCBuICsgMSwKKwkJCQlmYW5vdXQsIGZsYWdzLCBmbiwgY2JfZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQkJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRShwKTsKKwkJCS8qCisJCQkgKiBTdWJ0cmVlIGVudHJpZXMgaW4gdGhlIG5vdGUgdHJlZSByZXByZXNlbnQgcGFydHMgb2YKKwkJCSAqIHRoZSBub3RlIHRyZWUgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBleHBsb3JlZC4gVGhlcmUKKwkJCSAqIGlzIGEgZGlyZWN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN1YnRyZWUgZW50cmllcyBhdAorCQkJICogbGV2ZWwgJ24nIGluIHRoZSB0cmVlLCBhbmQgdGhlICdmYW5vdXQnIHZhcmlhYmxlOgorCQkJICogU3VidHJlZSBlbnRyaWVzIGF0IGxldmVsICduIDwgMiAqIGZhbm91dCcgc2hvdWxkIGJlCisJCQkgKiBwcmVzZXJ2ZWQsIHNpbmNlIHRoZXkgY29ycmVzcG9uZCBleGFjdGx5IHRvIGEgZmFub3V0CisJCQkgKiBkaXJlY3RvcnkgaW4gdGhlIG9uLWRpc2sgc3RydWN0dXJlLiBIb3dldmVyLCBzdWJ0cmVlCisJCQkgKiBlbnRyaWVzIGF0IGxldmVsICduID49IDIgKiBmYW5vdXQnIHNob3VsZCBOT1QgYmUKKwkJCSAqIHByZXNlcnZlZCwgYnV0IHJhdGhlciBjb25zb2xpZGF0ZWQgaW50byB0aGUgYWJvdmUKKwkJCSAqIG5vdGVzIHRyZWUgbGV2ZWwuIFdlIGFjaGlldmUgdGhpcyBieSB1bmNvbmRpdGlvbmFsbHkKKwkJCSAqIHVucGFja2luZyBzdWJ0cmVlIGVudHJpZXMgdGhhdCBleGlzdCBiZWxvdyB0aGUKKwkJCSAqIHRocmVzaG9sZCBsZXZlbCBhdCAnbiA9IDIgKiBmYW5vdXQnLgorCQkJICovCisJCQlpZiAobiA8IDIgKiBmYW5vdXQgJiYKKwkJCSAgICBmbGFncyAmIEZPUl9FQUNIX05PVEVfWUlFTERfU1VCVFJFRVMpIHsKKwkJCQkvKiBpbnZva2UgY2FsbGJhY2sgd2l0aCBzdWJ0cmVlICovCisJCQkJdW5zaWduZWQgaW50IHBhdGhfbGVuID0KKwkJCQkJbC0+a2V5X29pZC5oYXNoW0tFWV9JTkRFWF0gKiAyICsgZmFub3V0OworCQkJCWFzc2VydChwYXRoX2xlbiA8IEZBTk9VVF9QQVRIX01BWCAtIDEpOworCQkJCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KGwtPmtleV9vaWQuaGFzaCwKKwkJCQkJCQkgICBmYW5vdXQsCisJCQkJCQkJICAgcGF0aCk7CisJCQkJLyogQ3JlYXRlIHRyYWlsaW5nIHNsYXNoLCBpZiBuZWVkZWQgKi8KKwkJCQlpZiAocGF0aFtwYXRoX2xlbiAtIDFdICE9ICcvJykKKwkJCQkJcGF0aFtwYXRoX2xlbisrXSA9ICcvJzsKKwkJCQlwYXRoW3BhdGhfbGVuXSA9ICdcMCc7CisJCQkJcmV0ID0gZm4oJmwtPmtleV9vaWQsICZsLT52YWxfb2lkLAorCQkJCQkgcGF0aCwKKwkJCQkJIGNiX2RhdGEpOworCQkJfQorCQkJaWYgKG4gPj0gMiAqIGZhbm91dCB8fAorCQkJICAgICEoZmxhZ3MgJiBGT1JfRUFDSF9OT1RFX0RPTlRfVU5QQUNLX1NVQlRSRUVTKSkgeworCQkJCS8qIHVucGFjayBzdWJ0cmVlIGFuZCByZXN1bWUgdHJhdmVyc2FsICovCisJCQkJdHJlZS0+YVtpXSA9IE5VTEw7CisJCQkJbG9hZF9zdWJ0cmVlKHQsIGwsIHRyZWUsIG4pOworCQkJCWZyZWUobCk7CisJCQkJZ290byByZWRvOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUFRSX1RZUEVfTk9URToKKwkJCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSBDTFJfUFRSX1RZUEUocCk7CisJCQljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChsLT5rZXlfb2lkLmhhc2gsIGZhbm91dCwKKwkJCQkJCSAgIHBhdGgpOworCQkJcmV0ID0gZm4oJmwtPmtleV9vaWQsICZsLT52YWxfb2lkLCBwYXRoLAorCQkJCSBjYl9kYXRhKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgeworCXN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICpuZXh0OworCXN0cnVjdCBzdHJidWYgYnVmOworCWNoYXIgcGF0aFsyXTsgLyogcGF0aCB0byBzdWJ0cmVlIGluIG5leHQsIGlmIGFueSAqLworfTsKKworc3RhdGljIGlubGluZSBpbnQgbWF0Y2hlc190cmVlX3dyaXRlX3N0YWNrKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICp0d3MsCisJCWNvbnN0IGNoYXIgKmZ1bGxfcGF0aCkKK3sKKwlyZXR1cm4gIGZ1bGxfcGF0aFswXSA9PSB0d3MtPnBhdGhbMF0gJiYKKwkJZnVsbF9wYXRoWzFdID09IHR3cy0+cGF0aFsxXSAmJgorCQlmdWxsX3BhdGhbMl0gPT0gJy8nOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV90cmVlX2VudHJ5KHN0cnVjdCBzdHJidWYgKmJ1ZiwgdW5zaWduZWQgaW50IG1vZGUsCisJCWNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBwYXRoX2xlbiwgY29uc3QKKwkJdW5zaWduZWQgY2hhciAqaGFzaCkKK3sKKwlzdHJidWZfYWRkZihidWYsICIlbyAlLipzJWMiLCBtb2RlLCBwYXRoX2xlbiwgcGF0aCwgJ1wwJyk7CisJc3RyYnVmX2FkZChidWYsIGhhc2gsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKK30KKworc3RhdGljIHZvaWQgdHJlZV93cml0ZV9zdGFja19pbml0X3N1YnRyZWUoc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgKnR3cywKKwkJY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqbjsKKwlhc3NlcnQoIXR3cy0+bmV4dCk7CisJYXNzZXJ0KHR3cy0+cGF0aFswXSA9PSAnXDAnICYmIHR3cy0+cGF0aFsxXSA9PSAnXDAnKTsKKwluID0gKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICopCisJCXhtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrKSk7CisJbi0+bmV4dCA9IE5VTEw7CisJc3RyYnVmX2luaXQoJm4tPmJ1ZiwgMjU2ICogKDMyICsgdGhlX2hhc2hfYWxnby0+aGV4c3opKTsgLyogYXNzdW1lIDI1NiBlbnRyaWVzIHBlciB0cmVlICovCisJbi0+cGF0aFswXSA9IG4tPnBhdGhbMV0gPSAnXDAnOworCXR3cy0+bmV4dCA9IG47CisJdHdzLT5wYXRoWzBdID0gcGF0aFswXTsKKwl0d3MtPnBhdGhbMV0gPSBwYXRoWzFdOworfQorCitzdGF0aWMgaW50IHRyZWVfd3JpdGVfc3RhY2tfZmluaXNoX3N1YnRyZWUoc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgKnR3cykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICpuID0gdHdzLT5uZXh0OworCXN0cnVjdCBvYmplY3RfaWQgczsKKwlpZiAobikgeworCQlyZXQgPSB0cmVlX3dyaXRlX3N0YWNrX2ZpbmlzaF9zdWJ0cmVlKG4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJcmV0ID0gd3JpdGVfb2JqZWN0X2ZpbGUobi0+YnVmLmJ1Ziwgbi0+YnVmLmxlbiwgdHJlZV90eXBlLCAmcyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlzdHJidWZfcmVsZWFzZSgmbi0+YnVmKTsKKwkJZnJlZShuKTsKKwkJdHdzLT5uZXh0ID0gTlVMTDsKKwkJd3JpdGVfdHJlZV9lbnRyeSgmdHdzLT5idWYsIDA0MDAwMCwgdHdzLT5wYXRoLCAyLCBzLmhhc2gpOworCQl0d3MtPnBhdGhbMF0gPSB0d3MtPnBhdGhbMV0gPSAnXDAnOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9lYWNoX25vdGVfaGVscGVyKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICp0d3MsCisJCWNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBtb2RlLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHBhdGgpOworCXVuc2lnbmVkIGludCBuID0gMDsKKwlpbnQgcmV0OworCisJLyogRGV0ZXJtaW5lIGNvbW1vbiBwYXJ0IG9mIHRyZWUgd3JpdGUgc3RhY2sgKi8KKwl3aGlsZSAodHdzICYmIDMgKiBuIDwgcGF0aF9sZW4gJiYKKwkgICAgICAgbWF0Y2hlc190cmVlX3dyaXRlX3N0YWNrKHR3cywgcGF0aCArIDMgKiBuKSkgeworCQluKys7CisJCXR3cyA9IHR3cy0+bmV4dDsKKwl9CisKKwkvKiB0d3MgcG9pbnQgdG8gbGFzdCBtYXRjaGluZyB0cmVlX3dyaXRlX3N0YWNrIGVudHJ5ICovCisJcmV0ID0gdHJlZV93cml0ZV9zdGFja19maW5pc2hfc3VidHJlZSh0d3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTdGFydCBzdWJ0cmVlcyBuZWVkZWQgdG8gc2F0aXNmeSBwYXRoICovCisJd2hpbGUgKDMgKiBuICsgMiA8IHBhdGhfbGVuICYmIHBhdGhbMyAqIG4gKyAyXSA9PSAnLycpIHsKKwkJdHJlZV93cml0ZV9zdGFja19pbml0X3N1YnRyZWUodHdzLCBwYXRoICsgMyAqIG4pOworCQluKys7CisJCXR3cyA9IHR3cy0+bmV4dDsKKwl9CisKKwkvKiBUaGVyZSBzaG91bGQgYmUgbm8gbW9yZSBkaXJlY3RvcnkgY29tcG9uZW50cyBpbiB0aGUgZ2l2ZW4gcGF0aCAqLworCWFzc2VydChtZW1jaHIocGF0aCArIDMgKiBuLCAnLycsIHBhdGhfbGVuIC0gKDMgKiBuKSkgPT0gTlVMTCk7CisKKwkvKiBGaW5hbGx5IGFkZCBnaXZlbiBlbnRyeSB0byB0aGUgY3VycmVudCB0cmVlIG9iamVjdCAqLworCXdyaXRlX3RyZWVfZW50cnkoJnR3cy0+YnVmLCBtb2RlLCBwYXRoICsgMyAqIG4sIHBhdGhfbGVuIC0gKDMgKiBuKSwKKwkJCSBvaWQtPmhhc2gpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB3cml0ZV9lYWNoX25vdGVfZGF0YSB7CisJc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgKnJvb3Q7CisJc3RydWN0IG5vbl9ub3RlICoqbm5fbGlzdDsKKwlzdHJ1Y3Qgbm9uX25vdGUgKm5uX3ByZXY7Cit9OworCitzdGF0aWMgaW50IHdyaXRlX2VhY2hfbm9uX25vdGVfdW50aWwoY29uc3QgY2hhciAqbm90ZV9wYXRoLAorCQlzdHJ1Y3Qgd3JpdGVfZWFjaF9ub3RlX2RhdGEgKmQpCit7CisJc3RydWN0IG5vbl9ub3RlICpwID0gZC0+bm5fcHJldjsKKwlzdHJ1Y3Qgbm9uX25vdGUgKm4gPSBwID8gcC0+bmV4dCA6ICpkLT5ubl9saXN0OworCWludCBjbXAgPSAwLCByZXQ7CisJd2hpbGUgKG4gJiYgKCFub3RlX3BhdGggfHwgKGNtcCA9IHN0cmNtcChuLT5wYXRoLCBub3RlX3BhdGgpKSA8PSAwKSkgeworCQlpZiAobm90ZV9wYXRoICYmIGNtcCA9PSAwKQorCQkJOyAvKiBkbyBub3RoaW5nLCBwcmVmZXIgbm90ZSB0byBub24tbm90ZSAqLworCQllbHNlIHsKKwkJCXJldCA9IHdyaXRlX2VhY2hfbm90ZV9oZWxwZXIoZC0+cm9vdCwgbi0+cGF0aCwgbi0+bW9kZSwKKwkJCQkJCSAgICAgJm4tPm9pZCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcCA9IG47CisJCW4gPSBuLT5uZXh0OworCX0KKwlkLT5ubl9wcmV2ID0gcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9lYWNoX25vdGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0X29pZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbm90ZV9vaWQsIGNoYXIgKm5vdGVfcGF0aCwKKwkJdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgd3JpdGVfZWFjaF9ub3RlX2RhdGEgKmQgPQorCQkoc3RydWN0IHdyaXRlX2VhY2hfbm90ZV9kYXRhICopIGNiX2RhdGE7CisJc2l6ZV90IG5vdGVfcGF0aF9sZW4gPSBzdHJsZW4obm90ZV9wYXRoKTsKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IDAxMDA2NDQ7CisKKwlpZiAobm90ZV9wYXRoW25vdGVfcGF0aF9sZW4gLSAxXSA9PSAnLycpIHsKKwkJLyogc3VidHJlZSBlbnRyeSAqLworCQlub3RlX3BhdGhfbGVuLS07CisJCW5vdGVfcGF0aFtub3RlX3BhdGhfbGVuXSA9ICdcMCc7CisJCW1vZGUgPSAwNDAwMDA7CisJfQorCWFzc2VydChub3RlX3BhdGhfbGVuIDw9IEdJVF9NQVhfSEVYU1ogKyBGQU5PVVRfUEFUSF9TRVBBUkFUT1JTKTsKKworCS8qIFdlYXZlIG5vbi1ub3RlIGVudHJpZXMgaW50byBub3RlIGVudHJpZXMgKi8KKwlyZXR1cm4gIHdyaXRlX2VhY2hfbm9uX25vdGVfdW50aWwobm90ZV9wYXRoLCBkKSB8fAorCQl3cml0ZV9lYWNoX25vdGVfaGVscGVyKGQtPnJvb3QsIG5vdGVfcGF0aCwgbW9kZSwgbm90ZV9vaWQpOworfQorCitzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCB7CisJc3RydWN0IG5vdGVfZGVsZXRlX2xpc3QgKm5leHQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKK307CisKK3N0YXRpYyBpbnQgcHJ1bmVfbm90ZXNfaGVscGVyKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGVfb2lkLCBjaGFyICpub3RlX3BhdGgsCisJCXZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG5vdGVfZGVsZXRlX2xpc3QgKipsID0gKHN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICoqKSBjYl9kYXRhOworCXN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICpuOworCisJaWYgKGhhc19vYmplY3RfZmlsZShvYmplY3Rfb2lkKSkKKwkJcmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gZm9yIHRoaXMgbm90ZSAqLworCisJLyogZmFpbGVkIHRvIGZpbmQgb2JqZWN0ID0+IHBydW5lIHRoaXMgbm90ZSAqLworCW4gPSAoc3RydWN0IG5vdGVfZGVsZXRlX2xpc3QgKikgeG1hbGxvYyhzaXplb2YoKm4pKTsKKwluLT5uZXh0ID0gKmw7CisJbi0+c2hhMSA9IG9iamVjdF9vaWQtPmhhc2g7CisJKmwgPSBuOworCXJldHVybiAwOworfQorCitpbnQgY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZShzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJfb2lkLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCkKK3sKKwljaGFyICpjdXJfbXNnID0gTlVMTCwgKm5ld19tc2cgPSBOVUxMLCAqYnVmOworCXVuc2lnbmVkIGxvbmcgY3VyX2xlbiwgbmV3X2xlbiwgYnVmX2xlbjsKKwllbnVtIG9iamVjdF90eXBlIGN1cl90eXBlLCBuZXdfdHlwZTsKKwlpbnQgcmV0OworCisJLyogcmVhZCBpbiBib3RoIG5vdGUgYmxvYiBvYmplY3RzICovCisJaWYgKCFpc19udWxsX29pZChuZXdfb2lkKSkKKwkJbmV3X21zZyA9IHJlYWRfb2JqZWN0X2ZpbGUobmV3X29pZCwgJm5ld190eXBlLCAmbmV3X2xlbik7CisJaWYgKCFuZXdfbXNnIHx8ICFuZXdfbGVuIHx8IG5ld190eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUobmV3X21zZyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIWlzX251bGxfb2lkKGN1cl9vaWQpKQorCQljdXJfbXNnID0gcmVhZF9vYmplY3RfZmlsZShjdXJfb2lkLCAmY3VyX3R5cGUsICZjdXJfbGVuKTsKKwlpZiAoIWN1cl9tc2cgfHwgIWN1cl9sZW4gfHwgY3VyX3R5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShjdXJfbXNnKTsKKwkJZnJlZShuZXdfbXNnKTsKKwkJb2lkY3B5KGN1cl9vaWQsIG5ld19vaWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiB3ZSB3aWxsIHNlcGFyYXRlIHRoZSBub3RlcyBieSB0d28gbmV3bGluZXMgYW55d2F5ICovCisJaWYgKGN1cl9tc2dbY3VyX2xlbiAtIDFdID09ICdcbicpCisJCWN1cl9sZW4tLTsKKworCS8qIGNvbmNhdGVuYXRlIGN1cl9tc2cgYW5kIG5ld19tc2cgaW50byBidWYgKi8KKwlidWZfbGVuID0gY3VyX2xlbiArIDIgKyBuZXdfbGVuOworCWJ1ZiA9IChjaGFyICopIHhtYWxsb2MoYnVmX2xlbik7CisJbWVtY3B5KGJ1ZiwgY3VyX21zZywgY3VyX2xlbik7CisJYnVmW2N1cl9sZW5dID0gJ1xuJzsKKwlidWZbY3VyX2xlbiArIDFdID0gJ1xuJzsKKwltZW1jcHkoYnVmICsgY3VyX2xlbiArIDIsIG5ld19tc2csIG5ld19sZW4pOworCWZyZWUoY3VyX21zZyk7CisJZnJlZShuZXdfbXNnKTsKKworCS8qIGNyZWF0ZSBhIG5ldyBibG9iIG9iamVjdCBmcm9tIGJ1ZiAqLworCXJldCA9IHdyaXRlX29iamVjdF9maWxlKGJ1ZiwgYnVmX2xlbiwgYmxvYl90eXBlLCBjdXJfb2lkKTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKHN0cnVjdCBvYmplY3RfaWQgKmN1cl9vaWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCkKK3sKKwlvaWRjcHkoY3VyX29pZCwgbmV3X29pZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21iaW5lX25vdGVzX2lnbm9yZShzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJfb2lkLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZGQgdGhlIGxpbmVzIGZyb20gdGhlIG5hbWVkIG9iamVjdCB0byBsaXN0LCB3aXRoIHRyYWlsaW5nCisgKiBuZXdsaW5lcyByZW1vdmVkLgorICovCitzdGF0aWMgaW50IHN0cmluZ19saXN0X2FkZF9ub3RlX2xpbmVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY2hhciAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwllbnVtIG9iamVjdF90eXBlIHQ7CisKKwlpZiAoaXNfbnVsbF9vaWQob2lkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiByZWFkX3NoYTFfZmlsZSBOVUwtdGVybWluYXRlcyAqLworCWRhdGEgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnQsICZsZW4pOworCWlmICh0ICE9IE9CSl9CTE9CIHx8ICFkYXRhIHx8ICFsZW4pIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIHQgIT0gT0JKX0JMT0IgfHwgIWRhdGE7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlIGlzIEVPTC10ZXJtaW5hdGVkLCB0aGlzIHdpbGwKKwkgKiBhZGQgYW4gZW1wdHkgc3RyaW5nIHRvIHRoZSBsaXN0LiAgQnV0IGl0IHdpbGwgYmUgcmVtb3ZlZAorCSAqIGxhdGVyLCBhbG9uZyB3aXRoIGFueSBlbXB0eSBzdHJpbmdzIHRoYXQgY2FtZSBmcm9tIGVtcHR5CisJICogbGluZXMgd2l0aGluIHRoZSBmaWxlLgorCSAqLworCXN0cmluZ19saXN0X3NwbGl0KGxpc3QsIGRhdGEsICdcbicsIC0xKTsKKwlmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0cmluZ19saXN0X2pvaW5fbGluZXNfaGVscGVyKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLAorCQkJCQkgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBjYl9kYXRhOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCBpdGVtLT5zdHJpbmcpOworCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCXJldHVybiAwOworfQorCitpbnQgY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxKHN0cnVjdCBvYmplY3RfaWQgKmN1cl9vaWQsCisJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc29ydF91bmlxX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAxOworCisJLyogcmVhZCBib3RoIG5vdGUgYmxvYiBvYmplY3RzIGludG8gdW5pcXVlX2xpbmVzICovCisJaWYgKHN0cmluZ19saXN0X2FkZF9ub3RlX2xpbmVzKCZzb3J0X3VuaXFfbGlzdCwgY3VyX29pZCkpCisJCWdvdG8gb3V0OworCWlmIChzdHJpbmdfbGlzdF9hZGRfbm90ZV9saW5lcygmc29ydF91bmlxX2xpc3QsIG5ld19vaWQpKQorCQlnb3RvIG91dDsKKwlzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoJnNvcnRfdW5pcV9saXN0LCAwKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZzb3J0X3VuaXFfbGlzdCk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJnNvcnRfdW5pcV9saXN0LCAwKTsKKworCS8qIGNyZWF0ZSBhIG5ldyBibG9iIG9iamVjdCBmcm9tIHNvcnRfdW5pcV9saXN0ICovCisJaWYgKGZvcl9lYWNoX3N0cmluZ19saXN0KCZzb3J0X3VuaXFfbGlzdCwKKwkJCQkgc3RyaW5nX2xpc3Rfam9pbl9saW5lc19oZWxwZXIsICZidWYpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdyaXRlX29iamVjdF9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIGJsb2JfdHlwZSwgY3VyX29pZCk7CisKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc29ydF91bmlxX2xpc3QsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3RyaW5nX2xpc3RfYWRkX29uZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgIGludCBmbGFnLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnMgPSBjYjsKKwlpZiAoIXVuc29ydGVkX3N0cmluZ19saXN0X2hhc19zdHJpbmcocmVmcywgcmVmbmFtZSkpCisJCXN0cmluZ19saXN0X2FwcGVuZChyZWZzLCByZWZuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBsaXN0IGFyZ3VtZW50IG11c3QgaGF2ZSBzdHJkdXBfc3RyaW5ncyBzZXQgb24gaXQuCisgKi8KK3ZvaWQgc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKmdsb2IpCit7CisJYXNzZXJ0KGxpc3QtPnN0cmR1cF9zdHJpbmdzKTsKKwlpZiAoaGFzX2dsb2Jfc3BlY2lhbHMoZ2xvYikpIHsKKwkJZm9yX2VhY2hfZ2xvYl9yZWYoc3RyaW5nX2xpc3RfYWRkX29uZV9yZWYsIGdsb2IsIGxpc3QpOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpZiAoZ2V0X29pZChnbG9iLCAmb2lkKSkKKwkJCXdhcm5pbmcoIm5vdGVzIHJlZiAlcyBpcyBpbnZhbGlkIiwgZ2xvYik7CisJCWlmICghdW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhsaXN0LCBnbG9iKSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBnbG9iKTsKKwl9Cit9CisKK3ZvaWQgc3RyaW5nX2xpc3RfYWRkX3JlZnNfZnJvbV9jb2xvbl9zZXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCQkgY29uc3QgY2hhciAqZ2xvYnMpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHNwbGl0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwljaGFyICpnbG9ic19jb3B5ID0geHN0cmR1cChnbG9icyk7CisJaW50IGk7CisKKwlzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZSgmc3BsaXQsIGdsb2JzX2NvcHksICc6JywgLTEpOworCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmc3BsaXQsIDApOworCisJZm9yIChpID0gMDsgaSA8IHNwbGl0Lm5yOyBpKyspCisJCXN0cmluZ19saXN0X2FkZF9yZWZzX2J5X2dsb2IobGlzdCwgc3BsaXQuaXRlbXNbaV0uc3RyaW5nKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZzcGxpdCwgMCk7CisJZnJlZShnbG9ic19jb3B5KTsKK30KKworc3RhdGljIGludCBub3Rlc19kaXNwbGF5X2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpbnQgKmxvYWRfcmVmcyA9IGNiOworCisJaWYgKCpsb2FkX3JlZnMgJiYgIXN0cmNtcChrLCAibm90ZXMuZGlzcGxheXJlZiIpKSB7CisJCWlmICghdikKKwkJCWNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19ieV9nbG9iKCZkaXNwbGF5X25vdGVzX3JlZnMsIHYpOworCX0KKworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpkZWZhdWx0X25vdGVzX3JlZih2b2lkKQoreworCWNvbnN0IGNoYXIgKm5vdGVzX3JlZiA9IE5VTEw7CisJaWYgKCFub3Rlc19yZWYpCisJCW5vdGVzX3JlZiA9IGdldGVudihHSVRfTk9URVNfUkVGX0VOVklST05NRU5UKTsKKwlpZiAoIW5vdGVzX3JlZikKKwkJbm90ZXNfcmVmID0gbm90ZXNfcmVmX25hbWU7IC8qIHZhbHVlIG9mIGNvcmUubm90ZXNSZWYgY29uZmlnICovCisJaWYgKCFub3Rlc19yZWYpCisJCW5vdGVzX3JlZiA9IEdJVF9OT1RFU19ERUZBVUxUX1JFRjsKKwlyZXR1cm4gbm90ZXNfcmVmOworfQorCit2b2lkIGluaXRfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IGNoYXIgKm5vdGVzX3JlZiwKKwkJY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQsIG9iamVjdF9vaWQ7CisJdW5zaWduZWQgc2hvcnQgbW9kZTsKKwlzdHJ1Y3QgbGVhZl9ub2RlIHJvb3RfdHJlZTsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJYXNzZXJ0KCF0LT5pbml0aWFsaXplZCk7CisKKwlpZiAoIW5vdGVzX3JlZikKKwkJbm90ZXNfcmVmID0gZGVmYXVsdF9ub3Rlc19yZWYoKTsKKworCWlmICghY29tYmluZV9ub3RlcykKKwkJY29tYmluZV9ub3RlcyA9IGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGU7CisKKwl0LT5yb290ID0gKHN0cnVjdCBpbnRfbm9kZSAqKSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgaW50X25vZGUpKTsKKwl0LT5maXJzdF9ub25fbm90ZSA9IE5VTEw7CisJdC0+cHJldl9ub25fbm90ZSA9IE5VTEw7CisJdC0+cmVmID0geHN0cmR1cF9vcl9udWxsKG5vdGVzX3JlZik7CisJdC0+dXBkYXRlX3JlZiA9IChmbGFncyAmIE5PVEVTX0lOSVRfV1JJVEFCTEUpID8gdC0+cmVmIDogTlVMTDsKKwl0LT5jb21iaW5lX25vdGVzID0gY29tYmluZV9ub3RlczsKKwl0LT5pbml0aWFsaXplZCA9IDE7CisJdC0+ZGlydHkgPSAwOworCisJaWYgKGZsYWdzICYgTk9URVNfSU5JVF9FTVBUWSB8fCAhbm90ZXNfcmVmIHx8CisJICAgIGdldF9vaWRfdHJlZWlzaChub3Rlc19yZWYsICZvYmplY3Rfb2lkKSkKKwkJcmV0dXJuOworCWlmIChmbGFncyAmIE5PVEVTX0lOSVRfV1JJVEFCTEUgJiYgcmVhZF9yZWYobm90ZXNfcmVmLCAmb2JqZWN0X29pZCkpCisJCWRpZSgiQ2Fubm90IHVzZSBub3RlcyByZWYgJXMiLCBub3Rlc19yZWYpOworCWlmIChnZXRfdHJlZV9lbnRyeSh0aGVfcmVwb3NpdG9yeSwgJm9iamVjdF9vaWQsICIiLCAmb2lkLCAmbW9kZSkpCisJCWRpZSgiRmFpbGVkIHRvIHJlYWQgbm90ZXMgdHJlZSByZWZlcmVuY2VkIGJ5ICVzICglcykiLAorCQkgICAgbm90ZXNfcmVmLCBvaWRfdG9faGV4KCZvYmplY3Rfb2lkKSk7CisKKwlvaWRjbHIoJnJvb3RfdHJlZS5rZXlfb2lkKTsKKwlvaWRjcHkoJnJvb3RfdHJlZS52YWxfb2lkLCAmb2lkKTsKKwlsb2FkX3N1YnRyZWUodCwgJnJvb3RfdHJlZSwgdC0+cm9vdCwgMCk7Cit9CisKK3N0cnVjdCBub3Rlc190cmVlICoqbG9hZF9ub3Rlc190cmVlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnMsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgY291bnRlciA9IDA7CisJc3RydWN0IG5vdGVzX3RyZWUgKip0cmVlczsKKwlBTExPQ19BUlJBWSh0cmVlcywgcmVmcy0+bnIgKyAxKTsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHJlZnMpIHsKKwkJc3RydWN0IG5vdGVzX3RyZWUgKnQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfdHJlZSkpOworCQlpbml0X25vdGVzKHQsIGl0ZW0tPnN0cmluZywgY29tYmluZV9ub3Rlc19pZ25vcmUsIGZsYWdzKTsKKwkJdHJlZXNbY291bnRlcisrXSA9IHQ7CisJfQorCXRyZWVzW2NvdW50ZXJdID0gTlVMTDsKKwlyZXR1cm4gdHJlZXM7Cit9CisKK3ZvaWQgaW5pdF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0KQoreworCW1lbXNldChvcHQsIDAsIHNpemVvZigqb3B0KSk7CisJb3B0LT51c2VfZGVmYXVsdF9ub3RlcyA9IC0xOworfQorCit2b2lkIGVuYWJsZV9kZWZhdWx0X2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQsIGludCAqc2hvd19ub3RlcykKK3sKKwlvcHQtPnVzZV9kZWZhdWx0X25vdGVzID0gMTsKKwkqc2hvd19ub3RlcyA9IDE7Cit9CisKK3ZvaWQgZW5hYmxlX3JlZl9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0LCBpbnQgKnNob3dfbm90ZXMsCisJCWNvbnN0IGNoYXIgKnJlZikgeworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZHN0cigmYnVmLCByZWYpOworCWV4cGFuZF9ub3Rlc19yZWYoJmJ1Zik7CisJc3RyaW5nX2xpc3RfYXBwZW5kKCZvcHQtPmV4dHJhX25vdGVzX3JlZnMsCisJCQlzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpKTsKKwkqc2hvd19ub3RlcyA9IDE7Cit9CisKK3ZvaWQgZGlzYWJsZV9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0LCBpbnQgKnNob3dfbm90ZXMpCit7CisJb3B0LT51c2VfZGVmYXVsdF9ub3RlcyA9IC0xOworCS8qIHdlIGhhdmUgYmVlbiBzdHJkdXAnaW5nIG91cnNlbHZlcywgc28gdHJpY2sKKwkgKiBzdHJpbmdfbGlzdCBpbnRvIGZyZWUoKWluZyBzdHJpbmdzICovCisJb3B0LT5leHRyYV9ub3Rlc19yZWZzLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmb3B0LT5leHRyYV9ub3Rlc19yZWZzLCAwKTsKKwlvcHQtPmV4dHJhX25vdGVzX3JlZnMuc3RyZHVwX3N0cmluZ3MgPSAwOworCSpzaG93X25vdGVzID0gMDsKK30KKwordm9pZCBsb2FkX2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQpCit7CisJY2hhciAqZGlzcGxheV9yZWZfZW52OworCWludCBsb2FkX2NvbmZpZ19yZWZzID0gMDsKKwlkaXNwbGF5X25vdGVzX3JlZnMuc3RyZHVwX3N0cmluZ3MgPSAxOworCisJYXNzZXJ0KCFkaXNwbGF5X25vdGVzX3RyZWVzKTsKKworCWlmICghb3B0IHx8IG9wdC0+dXNlX2RlZmF1bHRfbm90ZXMgPiAwIHx8CisJICAgIChvcHQtPnVzZV9kZWZhdWx0X25vdGVzID09IC0xICYmICFvcHQtPmV4dHJhX25vdGVzX3JlZnMubnIpKSB7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZGlzcGxheV9ub3Rlc19yZWZzLCBkZWZhdWx0X25vdGVzX3JlZigpKTsKKwkJZGlzcGxheV9yZWZfZW52ID0gZ2V0ZW52KEdJVF9OT1RFU19ESVNQTEFZX1JFRl9FTlZJUk9OTUVOVCk7CisJCWlmIChkaXNwbGF5X3JlZl9lbnYpIHsKKwkJCXN0cmluZ19saXN0X2FkZF9yZWZzX2Zyb21fY29sb25fc2VwKCZkaXNwbGF5X25vdGVzX3JlZnMsCisJCQkJCQkJICAgIGRpc3BsYXlfcmVmX2Vudik7CisJCQlsb2FkX2NvbmZpZ19yZWZzID0gMDsKKwkJfSBlbHNlCisJCQlsb2FkX2NvbmZpZ19yZWZzID0gMTsKKwl9CisKKwlnaXRfY29uZmlnKG5vdGVzX2Rpc3BsYXlfY29uZmlnLCAmbG9hZF9jb25maWdfcmVmcyk7CisKKwlpZiAob3B0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZvcHQtPmV4dHJhX25vdGVzX3JlZnMpCisJCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19ieV9nbG9iKCZkaXNwbGF5X25vdGVzX3JlZnMsCisJCQkJCQkgICAgIGl0ZW0tPnN0cmluZyk7CisJfQorCisJZGlzcGxheV9ub3Rlc190cmVlcyA9IGxvYWRfbm90ZXNfdHJlZXMoJmRpc3BsYXlfbm90ZXNfcmVmcywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRpc3BsYXlfbm90ZXNfcmVmcywgMCk7Cit9CisKK2ludCBhZGRfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0X29pZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbm90ZV9vaWQsIGNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlcykKK3sKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCXQtPmRpcnR5ID0gMTsKKwlpZiAoIWNvbWJpbmVfbm90ZXMpCisJCWNvbWJpbmVfbm90ZXMgPSB0LT5jb21iaW5lX25vdGVzOworCWwgPSAoc3RydWN0IGxlYWZfbm9kZSAqKSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgbGVhZl9ub2RlKSk7CisJb2lkY3B5KCZsLT5rZXlfb2lkLCBvYmplY3Rfb2lkKTsKKwlvaWRjcHkoJmwtPnZhbF9vaWQsIG5vdGVfb2lkKTsKKwlyZXR1cm4gbm90ZV90cmVlX2luc2VydCh0LCB0LT5yb290LCAwLCBsLCBQVFJfVFlQRV9OT1RFLCBjb21iaW5lX25vdGVzKTsKK30KKworaW50IHJlbW92ZV9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSkKK3sKKwlzdHJ1Y3QgbGVhZl9ub2RlIGw7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWFzc2VydCh0LT5pbml0aWFsaXplZCk7CisJaGFzaGNweShsLmtleV9vaWQuaGFzaCwgb2JqZWN0X3NoYTEpOworCW9pZGNscigmbC52YWxfb2lkKTsKKwlub3RlX3RyZWVfcmVtb3ZlKHQsIHQtPnJvb3QsIDAsICZsKTsKKwlpZiAoaXNfbnVsbF9vaWQoJmwudmFsX29pZCkpIC8qIG5vIG5vdGUgd2FzIHJlbW92ZWQgKi8KKwkJcmV0dXJuIDE7CisJdC0+ZGlydHkgPSAxOworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpnZXRfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBsZWFmX25vZGUgKmZvdW5kOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCWZvdW5kID0gbm90ZV90cmVlX2ZpbmQodCwgdC0+cm9vdCwgMCwgb2lkLT5oYXNoKTsKKwlyZXR1cm4gZm91bmQgPyAmZm91bmQtPnZhbF9vaWQgOiBOVUxMOworfQorCitpbnQgZm9yX2VhY2hfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgaW50IGZsYWdzLCBlYWNoX25vdGVfZm4gZm4sCisJCXZvaWQgKmNiX2RhdGEpCit7CisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCXJldHVybiBmb3JfZWFjaF9ub3RlX2hlbHBlcih0LCB0LT5yb290LCAwLCAwLCBmbGFncywgZm4sIGNiX2RhdGEpOworfQorCitpbnQgd3JpdGVfbm90ZXNfdHJlZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0KQoreworCXN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrIHJvb3Q7CisJc3RydWN0IHdyaXRlX2VhY2hfbm90ZV9kYXRhIGNiX2RhdGE7CisJaW50IHJldDsKKwlpbnQgZmxhZ3M7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWFzc2VydCh0LT5pbml0aWFsaXplZCk7CisKKwkvKiBQcmVwYXJlIGZvciB0cmF2ZXJzYWwgb2YgY3VycmVudCBub3RlcyB0cmVlICovCisJcm9vdC5uZXh0ID0gTlVMTDsgLyogbGFzdCBmb3J3YXJkIGVudHJ5IGluIGxpc3QgaXMgZ3JvdW5kZWQgKi8KKwlzdHJidWZfaW5pdCgmcm9vdC5idWYsIDI1NiAqICgzMiArIHRoZV9oYXNoX2FsZ28tPmhleHN6KSk7IC8qIGFzc3VtZSAyNTYgZW50cmllcyAqLworCXJvb3QucGF0aFswXSA9IHJvb3QucGF0aFsxXSA9ICdcMCc7CisJY2JfZGF0YS5yb290ID0gJnJvb3Q7CisJY2JfZGF0YS5ubl9saXN0ID0gJih0LT5maXJzdF9ub25fbm90ZSk7CisJY2JfZGF0YS5ubl9wcmV2ID0gTlVMTDsKKworCS8qIFdyaXRlIHRyZWUgb2JqZWN0cyByZXByZXNlbnRpbmcgY3VycmVudCBub3RlcyB0cmVlICovCisJZmxhZ3MgPSBGT1JfRUFDSF9OT1RFX0RPTlRfVU5QQUNLX1NVQlRSRUVTIHwKKwkJRk9SX0VBQ0hfTk9URV9ZSUVMRF9TVUJUUkVFUzsKKwlyZXQgPSBmb3JfZWFjaF9ub3RlKHQsIGZsYWdzLCB3cml0ZV9lYWNoX25vdGUsICZjYl9kYXRhKSB8fAorCSAgICAgIHdyaXRlX2VhY2hfbm9uX25vdGVfdW50aWwoTlVMTCwgJmNiX2RhdGEpIHx8CisJICAgICAgdHJlZV93cml0ZV9zdGFja19maW5pc2hfc3VidHJlZSgmcm9vdCkgfHwKKwkgICAgICB3cml0ZV9vYmplY3RfZmlsZShyb290LmJ1Zi5idWYsIHJvb3QuYnVmLmxlbiwgdHJlZV90eXBlLCByZXN1bHQpOworCXN0cmJ1Zl9yZWxlYXNlKCZyb290LmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBwcnVuZV9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICpsID0gTlVMTDsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJYXNzZXJ0KHQtPmluaXRpYWxpemVkKTsKKworCWZvcl9lYWNoX25vdGUodCwgMCwgcHJ1bmVfbm90ZXNfaGVscGVyLCAmbCk7CisKKwl3aGlsZSAobCkgeworCQlpZiAoZmxhZ3MgJiBOT1RFU19QUlVORV9WRVJCT1NFKQorCQkJcHJpbnRmKCIlc1xuIiwgaGFzaF90b19oZXgobC0+c2hhMSkpOworCQlpZiAoIShmbGFncyAmIE5PVEVTX1BSVU5FX0RSWVJVTikpCisJCQlyZW1vdmVfbm90ZSh0LCBsLT5zaGExKTsKKwkJbCA9IGwtPm5leHQ7CisJfQorfQorCit2b2lkIGZyZWVfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlpZiAodC0+cm9vdCkKKwkJbm90ZV90cmVlX2ZyZWUodC0+cm9vdCk7CisJZnJlZSh0LT5yb290KTsKKwl3aGlsZSAodC0+Zmlyc3Rfbm9uX25vdGUpIHsKKwkJdC0+cHJldl9ub25fbm90ZSA9IHQtPmZpcnN0X25vbl9ub3RlLT5uZXh0OworCQlmcmVlKHQtPmZpcnN0X25vbl9ub3RlLT5wYXRoKTsKKwkJZnJlZSh0LT5maXJzdF9ub25fbm90ZSk7CisJCXQtPmZpcnN0X25vbl9ub3RlID0gdC0+cHJldl9ub25fbm90ZTsKKwl9CisJZnJlZSh0LT5yZWYpOworCW1lbXNldCh0LCAwLCBzaXplb2Yoc3RydWN0IG5vdGVzX3RyZWUpKTsKK30KKworLyoKKyAqIEZpbGwgdGhlIGdpdmVuIHN0cmJ1ZiB3aXRoIHRoZSBub3RlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG9iamVjdC4KKyAqCisgKiBJZiB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzdHJ1Y3R1cmUgaXMgbm90IGluaXRpYWxpemVkLCBpdCB3aWxsIGJlIGF1dG8tCisgKiBpbml0aWFsaXplZCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAoc2VlIGRvY3VtZW50YXRpb24gZm9yIGluaXRfbm90ZXMoKSBhYm92ZSkuCisgKiBJZiB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBpcyBOVUxMLCB0aGUgaW50ZXJuYWwvZGVmYXVsdCBub3Rlc190cmVlIHdpbGwgYmUKKyAqIHVzZWQgaW5zdGVhZC4KKyAqCisgKiAocmF3ICE9IDApIGdpdmVzIHRoZSAlTiB1c2VyZm9ybWF0OyBvdGhlcndpc2UsIHRoZSBub3RlIG1lc3NhZ2UgaXMgZ2l2ZW4KKyAqIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZm9ybWF0X25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQsCisJCQlzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nLCBpbnQgcmF3KQoreworCXN0YXRpYyBjb25zdCBjaGFyIHV0ZjhbXSA9ICJ1dGYtOCI7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCWNoYXIgKm1zZywgKm1zZ19wOworCXVuc2lnbmVkIGxvbmcgbGluZWxlbiwgbXNnbGVuOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJaWYgKCF0LT5pbml0aWFsaXplZCkKKwkJaW5pdF9ub3Rlcyh0LCBOVUxMLCBOVUxMLCAwKTsKKworCW9pZCA9IGdldF9ub3RlKHQsIG9iamVjdF9vaWQpOworCWlmICghb2lkKQorCQlyZXR1cm47CisKKwlpZiAoIShtc2cgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZtc2dsZW4pKSB8fCB0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvdXRwdXRfZW5jb2RpbmcgJiYgKm91dHB1dF9lbmNvZGluZyAmJgorCSAgICAhaXNfZW5jb2RpbmdfdXRmOChvdXRwdXRfZW5jb2RpbmcpKSB7CisJCWNoYXIgKnJlZW5jb2RlZCA9IHJlZW5jb2RlX3N0cmluZyhtc2csIG91dHB1dF9lbmNvZGluZywgdXRmOCk7CisJCWlmIChyZWVuY29kZWQpIHsKKwkJCWZyZWUobXNnKTsKKwkJCW1zZyA9IHJlZW5jb2RlZDsKKwkJCW1zZ2xlbiA9IHN0cmxlbihtc2cpOworCQl9CisJfQorCisJLyogd2Ugd2lsbCBlbmQgdGhlIGFubm90YXRpb24gYnkgYSBuZXdsaW5lIGFueXdheSAqLworCWlmIChtc2dsZW4gJiYgbXNnW21zZ2xlbiAtIDFdID09ICdcbicpCisJCW1zZ2xlbi0tOworCisJaWYgKCFyYXcpIHsKKwkJY29uc3QgY2hhciAqcmVmID0gdC0+cmVmOworCQlpZiAoIXJlZiB8fCAhc3RyY21wKHJlZiwgR0lUX05PVEVTX0RFRkFVTFRfUkVGKSkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxuTm90ZXM6XG4iKTsKKwkJfSBlbHNlIHsKKwkJCXNraXBfcHJlZml4KHJlZiwgInJlZnMvIiwgJnJlZik7CisJCQlza2lwX3ByZWZpeChyZWYsICJub3Rlcy8iLCAmcmVmKTsKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiXG5Ob3RlcyAoJXMpOlxuIiwgcmVmKTsKKwkJfQorCX0KKworCWZvciAobXNnX3AgPSBtc2c7IG1zZ19wIDwgbXNnICsgbXNnbGVuOyBtc2dfcCArPSBsaW5lbGVuICsgMSkgeworCQlsaW5lbGVuID0gc3RyY2hybnVsKG1zZ19wLCAnXG4nKSAtIG1zZ19wOworCisJCWlmICghcmF3KQorCQkJc3RyYnVmX2FkZHN0cihzYiwgIiAgICAiKTsKKwkJc3RyYnVmX2FkZChzYiwgbXNnX3AsIGxpbmVsZW4pOworCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCX0KKworCWZyZWUobXNnKTsKK30KKwordm9pZCBmb3JtYXRfZGlzcGxheV9ub3Rlcyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3Rfb2lkLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nLCBpbnQgcmF3KQoreworCWludCBpOworCWFzc2VydChkaXNwbGF5X25vdGVzX3RyZWVzKTsKKwlmb3IgKGkgPSAwOyBkaXNwbGF5X25vdGVzX3RyZWVzW2ldOyBpKyspCisJCWZvcm1hdF9ub3RlKGRpc3BsYXlfbm90ZXNfdHJlZXNbaV0sIG9iamVjdF9vaWQsIHNiLAorCQkJICAgIG91dHB1dF9lbmNvZGluZywgcmF3KTsKK30KKworaW50IGNvcHlfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpmcm9tX29iaiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdG9fb2JqLAorCSAgICAgIGludCBmb3JjZSwgY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5vdGUgPSBnZXRfbm90ZSh0LCBmcm9tX29iaik7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZXhpc3Rpbmdfbm90ZSA9IGdldF9ub3RlKHQsIHRvX29iaik7CisKKwlpZiAoIWZvcmNlICYmIGV4aXN0aW5nX25vdGUpCisJCXJldHVybiAxOworCisJaWYgKG5vdGUpCisJCXJldHVybiBhZGRfbm90ZSh0LCB0b19vYmosIG5vdGUsIGNvbWJpbmVfbm90ZXMpOworCWVsc2UgaWYgKGV4aXN0aW5nX25vdGUpCisJCXJldHVybiBhZGRfbm90ZSh0LCB0b19vYmosICZudWxsX29pZCwgY29tYmluZV9ub3Rlcyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBleHBhbmRfbm90ZXNfcmVmKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmIChzdGFydHNfd2l0aChzYi0+YnVmLCAicmVmcy9ub3Rlcy8iKSkKKwkJcmV0dXJuOyAvKiB3ZSdyZSBoYXBweSAqLworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNiLT5idWYsICJub3Rlcy8iKSkKKwkJc3RyYnVmX2luc2VydHN0cihzYiwgMCwgInJlZnMvIik7CisJZWxzZQorCQlzdHJidWZfaW5zZXJ0c3RyKHNiLCAwLCAicmVmcy9ub3Rlcy8iKTsKK30KKwordm9pZCBleHBhbmRfbG9vc2Vfbm90ZXNfcmVmKHN0cnVjdCBzdHJidWYgKnNiKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0OworCisJaWYgKGdldF9vaWQoc2ItPmJ1ZiwgJm9iamVjdCkpIHsKKwkJLyogZmFsbGJhY2sgdG8gZXhwYW5kX25vdGVzX3JlZiAqLworCQlleHBhbmRfbm90ZXNfcmVmKHNiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9ub3Rlcy5oIGIvbm90ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTY4MmMzCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMuaApAQCAtMCwwICsxLDMzOCBAQAorI2lmbmRlZiBOT1RFU19ICisjZGVmaW5lIE5PVEVTX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3Qgc3RyYnVmOworCisvKgorICogRnVuY3Rpb24gdHlwZSBmb3IgY29tYmluaW5nIHR3byBub3RlcyBhbm5vdGF0aW5nIHRoZSBzYW1lIG9iamVjdC4KKyAqCisgKiBXaGVuIGFkZGluZyBhIG5ldyBub3RlIGFubm90YXRpbmcgdGhlIHNhbWUgb2JqZWN0IGFzIGFuIGV4aXN0aW5nIG5vdGUsIGl0IGlzCisgKiB1cCB0byB0aGUgY2FsbGVyIHRvIGRlY2lkZSBob3cgdG8gY29tYmluZSB0aGUgdHdvIG5vdGVzLiBUaGUgZGVjaXNpb24gaXMKKyAqIG1hZGUgYnkgcGFzc2luZyBpbiBhIGZ1bmN0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZm9ybS4gVGhlIGZ1bmN0aW9uIGFjY2VwdHMKKyAqIHR3byBvYmplY3RfaWRzIC0tIG9mIHRoZSBleGlzdGluZyBub3RlIGFuZCB0aGUgbmV3IG5vdGUsIHJlc3BlY3RpdmVseS4gVGhlCisgKiBmdW5jdGlvbiB0aGVuIGNvbWJpbmVzIHRoZSBub3RlcyBpbiB3aGF0ZXZlciB3YXkgaXQgc2VlcyBmaXQsIGFuZCB3cml0ZXMgdGhlCisgKiByZXN1bHRpbmcgb2lkIGludG8gdGhlIGZpcnN0IGFyZ3VtZW50IChjdXJfb2lkKS4gQSBub24temVybyByZXR1cm4KKyAqIHZhbHVlIGluZGljYXRlcyBmYWlsdXJlLgorICoKKyAqIFRoZSB0d28gZ2l2ZW4gb2JqZWN0X2lkcyBzaGFsbCBib3RoIGJlIG5vbi1OVUxMIGFuZCBkaWZmZXJlbnQgZnJvbSBlYWNoCisgKiBvdGhlci4gRWl0aGVyIG9mIHRoZW0gKGJ1dCBub3QgYm90aCkgbWF5IGJlID09IG51bGxfb2lkLCB3aGljaCBpbmRpY2F0ZXMgYW4KKyAqIGVtcHR5L25vbi1leGlzdGVudCBub3RlLiBJZiB0aGUgcmVzdWx0aW5nIG9pZCAoY3VyX29pZCkgaXMgPT0gbnVsbF9vaWQsCisgKiB0aGUgbm90ZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbm90ZXMgdHJlZS4KKyAqCisgKiBUaGUgZGVmYXVsdCBjb21iaW5lX25vdGVzIGZ1bmN0aW9uICh5b3UgZ2V0IHRoaXMgd2hlbiBwYXNzaW5nIE5VTEwpIGlzCisgKiBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlKCksIHdoaWNoIGFwcGVuZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgbm90ZSB0bworICogdGhlIGNvbnRlbnRzIG9mIHRoZSBleGlzdGluZyBub3RlLgorICovCit0eXBlZGVmIGludCAoKmNvbWJpbmVfbm90ZXNfZm4pKHN0cnVjdCBvYmplY3RfaWQgKmN1cl9vaWQsCisJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCk7CisKKy8qIENvbW1vbiBub3RlcyBjb21iaW5hdG9ycyAqLworaW50IGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUoc3RydWN0IG9iamVjdF9pZCAqY3VyX29pZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQpOworaW50IGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKHN0cnVjdCBvYmplY3RfaWQgKmN1cl9vaWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCk7CitpbnQgY29tYmluZV9ub3Rlc19pZ25vcmUoc3RydWN0IG9iamVjdF9pZCAqY3VyX29pZCwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkKTsKK2ludCBjb21iaW5lX25vdGVzX2NhdF9zb3J0X3VuaXEoc3RydWN0IG9iamVjdF9pZCAqY3VyX29pZCwKKwkJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkKTsKKworLyoKKyAqIE5vdGVzIHRyZWUgb2JqZWN0CisgKgorICogRW5jYXBzdWxhdGVzIHRoZSBpbnRlcm5hbCBub3RlcyB0cmVlIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggYSBub3RlcyByZWYuCisgKiBXaGVuZXZlciBhIHN0cnVjdCBub3Rlc190cmVlIHBvaW50ZXIgaXMgcmVxdWlyZWQgYmVsb3csIHlvdSBtYXkgcGFzcyBOVUxMIGluCisgKiBvcmRlciB0byB1c2UgdGhlIGRlZmF1bHQvaW50ZXJuYWwgbm90ZXMgdHJlZS4gRS5nLiB5b3Ugb25seSBuZWVkIHRvIHBhc3MgYQorICogbm9uLU5VTEwgdmFsdWUgaWYgeW91IG5lZWQgdG8gcmVmZXIgdG8gc2V2ZXJhbCBkaWZmZXJlbnQgbm90ZXMgdHJlZXMKKyAqIHNpbXVsdGFuZW91c2x5LgorICovCitleHRlcm4gc3RydWN0IG5vdGVzX3RyZWUgeworCXN0cnVjdCBpbnRfbm9kZSAqcm9vdDsKKwlzdHJ1Y3Qgbm9uX25vdGUgKmZpcnN0X25vbl9ub3RlLCAqcHJldl9ub25fbm90ZTsKKwljaGFyICpyZWY7CisJY2hhciAqdXBkYXRlX3JlZjsKKwljb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXM7CisJaW50IGluaXRpYWxpemVkOworCWludCBkaXJ0eTsKK30gZGVmYXVsdF9ub3Rlc190cmVlOworCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IG5vdGVzIHJlZi4KKyAqCisgKiBUaGUgZGVmYXVsdCBub3RlcyByZWYgaXMgdGhlIG5vdGVzIHJlZiB0aGF0IGlzIHVzZWQgd2hlbiBub3Rlc19yZWYgPT0gTlVMTAorICogaXMgcGFzc2VkIHRvIGluaXRfbm90ZXMoKS4KKyAqCisgKiBUaGlzIHRoZSBmaXJzdCBvZiB0aGUgZm9sbG93aW5nIHRvIGJlIGRlZmluZWQ6CisgKiAxLiBUaGUgJy0tcmVmJyBvcHRpb24gdG8gJ2dpdCBub3RlcycsIGlmIGdpdmVuCisgKiAyLiBUaGUgJEdJVF9OT1RFU19SRUYgZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHNldAorICogMy4gVGhlIHZhbHVlIG9mIHRoZSBjb3JlLm5vdGVzUmVmIGNvbmZpZyB2YXJpYWJsZSwgaWYgc2V0CisgKiA0LiBHSVRfTk9URVNfREVGQVVMVF9SRUYgKGkuZS4gInJlZnMvbm90ZXMvY29tbWl0cyIpCisgKi8KK2NvbnN0IGNoYXIgKmRlZmF1bHRfbm90ZXNfcmVmKHZvaWQpOworCisvKgorICogRmxhZ3MgY29udHJvbGxpbmcgYmVoYXZpb3VyIG9mIG5vdGVzIHRyZWUgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBEZWZhdWx0IGJlaGF2aW91ciBpcyB0byBpbml0aWFsaXplIHRoZSBub3RlcyB0cmVlIGZyb20gdGhlIHRyZWUgb2JqZWN0CisgKiBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIChvciBkZWZhdWx0KSBub3RlcyByZWYuCisgKi8KKyNkZWZpbmUgTk9URVNfSU5JVF9FTVBUWSAxCisKKy8qCisgKiBCeSBkZWZhdWx0LCB0aGUgbm90ZXMgdHJlZSBpcyBvbmx5IHJlYWRhYmxlLCBhbmQgdGhlIG5vdGVzIHJlZiBjYW4gYmUKKyAqIGFueSB0cmVlaXNoLiBUaGUgbm90ZXMgdHJlZSBjYW4gaG93ZXZlciBiZSBtYWRlIHdyaXRhYmxlIHdpdGggdGhpcyBmbGFnLAorICogaW4gd2hpY2ggY2FzZSBvbmx5IHN0cmljdCByZWYgbmFtZXMgY2FuIGJlIHVzZWQuCisgKi8KKyNkZWZpbmUgTk9URVNfSU5JVF9XUklUQUJMRSAyCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBnaXZlbiBub3Rlc190cmVlIHdpdGggdGhlIG5vdGVzIHRyZWUgc3RydWN0dXJlIGF0IHRoZSBnaXZlbgorICogcmVmLiBJZiBnaXZlbiByZWYgaXMgTlVMTCwgdGhlIHZhbHVlIG9mIHRoZSAkR0lUX05PVEVTX1JFRiBlbnZpcm9ubWVudAorICogdmFyaWFibGUgaXMgdXNlZCwgYW5kIGlmIHRoYXQgaXMgbWlzc2luZywgdGhlIGRlZmF1bHQgbm90ZXMgcmVmIGlzIHVzZWQKKyAqICgicmVmcy9ub3Rlcy9jb21taXRzIikuCisgKgorICogSWYgeW91IG5lZWQgdG8gcmUtaW5pdGlhbGl6ZSBhIG5vdGVzX3RyZWUgc3RydWN0dXJlIChlLmcuIHdoZW4gc3dpdGNoaW5nIGZyb20KKyAqIG9uZSBub3RlcyByZWYgdG8gYW5vdGhlciksIHlvdSBtdXN0IGZpcnN0IGRlLWluaXRpYWxpemUgdGhlIG5vdGVzX3RyZWUKKyAqIHN0cnVjdHVyZSBieSBjYWxsaW5nIGZyZWVfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKikuCisgKgorICogSWYgeW91IHBhc3MgdCA9PSBOVUxMLCB0aGUgZGVmYXVsdCBpbnRlcm5hbCBub3Rlc190cmVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCisgKgorICogVGhlIGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgYmVjb21lcyB0aGUgZGVmYXVsdCBjb21iaW5lX25vdGVzCisgKiBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG5vdGVzX3RyZWUuIElmIE5VTEwgaXMgcGFzc2VkLCB0aGUgZGVmYXVsdAorICogY29tYmluZV9ub3RlcyBmdW5jdGlvbiBpcyBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlKCkuCisgKgorICogUHJlY29uZGl0aW9uOiBUaGUgbm90ZXNfdHJlZSBzdHJ1Y3R1cmUgaXMgemVyb2VkICh0aGlzIGNhbiBiZSBhY2hpZXZlZCB3aXRoCisgKiBtZW1zZXQodCwgMCwgc2l6ZW9mKHN0cnVjdCBub3Rlc190cmVlKSkpCisgKi8KK3ZvaWQgaW5pdF9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbm90ZXNfcmVmLAorCQljb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXMsIGludCBmbGFncyk7CisKKy8qCisgKiBBZGQgdGhlIGdpdmVuIG5vdGUgb2JqZWN0IHRvIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZQorICoKKyAqIElmIHRoZXJlIGFscmVhZHkgZXhpc3RzIGEgbm90ZSBmb3IgdGhlIGdpdmVuIG9iamVjdF9zaGExLCB0aGUgZ2l2ZW4KKyAqIGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24gaXMgaW52b2tlZCB0byBicmVhayB0aGUgdGllLiBJZiBub3QgZ2l2ZW4gKGkuZS4KKyAqIGNvbWJpbmVfbm90ZXMgPT0gTlVMTCksIHRoZSBkZWZhdWx0IGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbgorICogbm90ZXNfdHJlZSBpcyB1c2VkLgorICoKKyAqIFBhc3Npbmcgbm90ZV9zaGExID09IG51bGxfc2hhMSBpbmRpY2F0ZXMgdGhlIGFkZGl0aW9uIG9mIGFuCisgKiBlbXB0eS9ub24tZXhpc3RlbnQgbm90ZS4gVGhpcyBpcyBhIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIG5vLW9wIHVubGVzcworICogdGhlcmUgYWxyZWFkeSBleGlzdHMgYSBub3RlIGZvciB0aGUgZ2l2ZW4gb2JqZWN0X3NoYTEsIEFORCBjb21iaW5pbmcgdGhhdAorICogbm90ZSB3aXRoIHRoZSBlbXB0eSBub3RlICh1c2luZyB0aGUgZ2l2ZW4gY29tYmluZV9ub3RlcyBmdW5jdGlvbikgcmVzdWx0cworICogaW4gYSBuZXcvY2hhbmdlZCBub3RlLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBtZWFucyBjb21iaW5lX25vdGVzIGZhaWxlZC4KKyAqCisgKiBJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIG1hZGUgYnkgYWRkX25vdGUoKSB0byB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzdHJ1Y3R1cmUKKyAqIGFyZSBub3QgcGVyc2lzdGVudCB1bnRpbCBhIHN1YnNlcXVlbnQgY2FsbCB0byB3cml0ZV9ub3Rlc190cmVlKCkgcmV0dXJucworICogemVyby4KKyAqLworaW50IGFkZF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvYmplY3Rfb2lkLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpub3RlX29pZCwgY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzKTsKKworLyoKKyAqIFJlbW92ZSB0aGUgZ2l2ZW4gbm90ZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzdHJ1Y3R1cmUKKyAqCisgKiBJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIG1hZGUgYnkgcmVtb3ZlX25vdGUoKSB0byB0aGUgZ2l2ZW4gbm90ZXNfdHJlZQorICogc3RydWN0dXJlIGFyZSBub3QgcGVyc2lzdGVudCB1bnRpbCBhIHN1YnNlcXVlbnQgY2FsbCB0byB3cml0ZV9ub3Rlc190cmVlKCkKKyAqIHJldHVybnMgemVyby4KKyAqCisgKiBSZXR1cm4gMCBpZiBhIG5vdGUgd2FzIHJlbW92ZWQ7IDEgaWYgdGhlcmUgd2FzIG5vIG5vdGUgdG8gcmVtb3ZlLgorICovCitpbnQgcmVtb3ZlX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iamVjdF9zaGExKTsKKworLyoKKyAqIEdldCB0aGUgbm90ZSBvYmplY3QgU0hBMSBjb250YWluaW5nIHRoZSBub3RlIGRhdGEgZm9yIHRoZSBnaXZlbiBvYmplY3QKKyAqCisgKiBSZXR1cm4gTlVMTCBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGhhcyBubyBub3Rlcy4KKyAqLworY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZ2V0X25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQpOworCisvKgorICogQ29weSBhIG5vdGUgZnJvbSBvbmUgb2JqZWN0IHRvIGFub3RoZXIgaW4gdGhlIGdpdmVuIG5vdGVzX3RyZWUuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSB0b19vYmogYWxyZWFkeSBoYXMgYSBub3RlIGFuZCAnZm9yY2UnIGlzIGZhbHNlLiBPdGhlcndpc2UsCisgKiByZXR1cm5zIG5vbi16ZXJvIGlmICdmb3JjZScgaXMgdHJ1ZSwgYnV0IHRoZSBnaXZlbiBjb21iaW5lX25vdGVzIGZ1bmN0aW9uCisgKiBmYWlsZWQgdG8gY29tYmluZSBmcm9tX29iaidzIG5vdGUgd2l0aCB0b19vYmoncyBleGlzdGluZyBub3RlLgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBtYWRlIGJ5IGNvcHlfbm90ZSgpIHRvIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZQorICogYXJlIG5vdCBwZXJzaXN0ZW50IHVudGlsIGEgc3Vic2VxdWVudCBjYWxsIHRvIHdyaXRlX25vdGVzX3RyZWUoKSByZXR1cm5zCisgKiB6ZXJvLgorICovCitpbnQgY29weV9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LAorCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmZyb21fb2JqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0b19vYmosCisJICAgICAgaW50IGZvcmNlLCBjb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXMpOworCisvKgorICogRmxhZ3MgY29udHJvbGxpbmcgYmVoYXZpb3VyIG9mIGZvcl9lYWNoX25vdGUoKQorICoKKyAqIERlZmF1bHQgYmVoYXZpb3VyIG9mIGZvcl9lYWNoX25vdGUoKSBpcyB0byB0cmF2ZXJzZSBldmVyeSBzaW5nbGUgbm90ZSBvYmplY3QKKyAqIGluIHRoZSBnaXZlbiBub3RlcyB0cmVlLCB1bnBhY2tpbmcgc3VidHJlZSBlbnRyaWVzIGFsb25nIHRoZSB3YXkuCisgKiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBiZSB1c2VkIHRvIGFsdGVyIHRoZSBkZWZhdWx0IGJlaGF2aW91cjoKKyAqCisgKiAtIERPTlRfVU5QQUNLX1NVQlRSRUVTIGNhdXNlcyBmb3JfZWFjaF9ub3RlKCkgTk9UIHRvIHVucGFjayBhbmQgcmVjdXJzZSBpbnRvCisgKiAgIHN1YnRyZWUgZW50cmllcyB3aGlsZSB0cmF2ZXJzaW5nIHRoZSBub3RlcyB0cmVlLiBUaGlzIGNhdXNlcyBub3RlcyB3aXRoaW4KKyAqICAgdGhvc2Ugc3VidHJlZXMgTk9UIHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIFVzZSB0aGlzIGZsYWcgaWYgeW91CisgKiAgIGRvbid0IHdhbnQgdG8gdHJhdmVyc2UgX2FsbF8gbm90ZXMsIGJ1dCBvbmx5IHdhbnQgdG8gdHJhdmVyc2UgdGhlIHBhcnRzCisgKiAgIG9mIHRoZSBub3RlcyB0cmVlIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gdW5wYWNrZWQgKHRoaXMgaW5jbHVkZXMgYXQgbGVhc3QKKyAqICAgYWxsIG5vdGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkL2NoYW5nZWQpLgorICoKKyAqIC0gWUlFTERfU1VCVFJFRVMgY2F1c2VzIGFueSBzdWJ0cmVlIGVudHJpZXMgdGhhdCBhcmUgZW5jb3VudGVyZWQgdG8gYmUKKyAqICAgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgYmVmb3JlIHJlY3Vyc2luZyBpbnRvIHRoZW0uIFN1YnRyZWUgZW50cmllcyBhcmUKKyAqICAgbm90IG5vdGUgb2JqZWN0cywgYnV0IHJlcHJlc2VudCBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgaW4gdGhlIG5vdGVzCisgKiAgIHRyZWUuIFdoZW4gcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgc3VidHJlZSBlbnRyaWVzIHdpbGwgaGF2ZSBhIHRyYWlsaW5nCisgKiAgIHNsYXNoIGluIHRoZWlyIHBhdGgsIHdoaWNoIHRoZSBjYWxsYmFjayBtYXkgdXNlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbgorICogICBub3RlIGVudHJpZXMgYW5kIHN1YnRyZWUgZW50cmllcy4gTm90ZSB0aGF0IGFscmVhZHktdW5wYWNrZWQgc3VidHJlZQorICogICBlbnRyaWVzIGFyZSBub3QgcGFydCBvZiB0aGUgbm90ZXMgdHJlZSwgYW5kIHdpbGwgdGhlcmVmb3JlIG5vdCBiZSB5aWVsZGVkLgorICogICBJZiB0aGlzIGZsYWcgaXMgdXNlZCB0b2dldGhlciB3aXRoIERPTlRfVU5QQUNLX1NVQlRSRUVTLCBmb3JfZWFjaF9ub3RlKCkKKyAqICAgd2lsbCB5aWVsZCB0aGUgc3VidHJlZSBlbnRyeSwgYnV0IG5vdCByZWN1cnNlIGludG8gaXQuCisgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfTk9URV9ET05UX1VOUEFDS19TVUJUUkVFUyAxCisjZGVmaW5lIEZPUl9FQUNIX05PVEVfWUlFTERfU1VCVFJFRVMgMgorCisvKgorICogSW52b2tlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggbm90ZSBpbiB0aGUgZ2l2ZW4gbm90ZXNfdHJlZQorICoKKyAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIG5vbnplcm8sIHRoZSBub3RlIHdhbGsgaXMgYWJvcnRlZCwgYW5kIHRoZSByZXR1cm4KKyAqIHZhbHVlIGZyb20gdGhlIGNhbGxiYWNrIGlzIHJldHVybmVkIGZyb20gZm9yX2VhY2hfbm90ZSgpLiBIZW5jZSwgYSB6ZXJvCisgKiByZXR1cm4gdmFsdWUgZnJvbSBmb3JfZWFjaF9ub3RlKCkgaW5kaWNhdGVzIHRoYXQgYWxsIG5vdGVzIHdlcmUgd2Fsa2VkCisgKiBzdWNjZXNzZnVsbHkuCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgTk9UIGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBub3RlcyB0cmVlLgorICogSW4gb3RoZXIgd29yZHMsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBOT1QgYmUgaW52b2tlZCAob24gdGhlIGN1cnJlbnQKKyAqIG5vdGVzIHRyZWUpIGZyb20gd2l0aGluIHRoZSBjYWxsYmFjazoKKyAqIC0gYWRkX25vdGUoKQorICogLSByZW1vdmVfbm90ZSgpCisgKiAtIGNvcHlfbm90ZSgpCisgKiAtIGZyZWVfbm90ZXMoKQorICovCit0eXBlZGVmIGludCBlYWNoX25vdGVfZm4oY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2JqZWN0X29pZCwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbm90ZV9vaWQsIGNoYXIgKm5vdGVfcGF0aCwKKwkJdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgaW50IGZsYWdzLCBlYWNoX25vdGVfZm4gZm4sCisJCXZvaWQgKmNiX2RhdGEpOworCisvKgorICogV3JpdGUgdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlIHRvIHRoZSBvYmplY3QgZGF0YWJhc2UKKyAqCisgKiBDcmVhdGVzIGEgbmV3IHRyZWUgb2JqZWN0IGVuY2Fwc3VsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdpdmVuCisgKiBub3Rlc190cmVlLCBhbmQgc3RvcmVzIGl0cyBvYmplY3QgaWQgaW50byB0aGUgJ3Jlc3VsdCcgYXJndW1lbnQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCisgKgorICogSU1QT1JUQU5UOiBDaGFuZ2VzIG1hZGUgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUgYXJlIG5vdCBwZXJzaXN0ZW50IHVudGlsCisgKiB0aGlzIGZ1bmN0aW9uIGhhcyByZXR1cm5lZCB6ZXJvLiBQbGVhc2UgYWxzbyByZW1lbWJlciB0byBjcmVhdGUgYQorICogY29ycmVzcG9uZGluZyBjb21taXQgb2JqZWN0LCBhbmQgdXBkYXRlIHRoZSBhcHByb3ByaWF0ZSBub3RlcyByZWYuCisgKi8KK2ludCB3cml0ZV9ub3Rlc190cmVlKHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQpOworCisvKiBGbGFncyBjb250cm9sbGluZyB0aGUgb3BlcmF0aW9uIG9mIHBydW5lICovCisjZGVmaW5lIE5PVEVTX1BSVU5FX1ZFUkJPU0UgMQorI2RlZmluZSBOT1RFU19QUlVORV9EUllSVU4gMgorLyoKKyAqIFJlbW92ZSBhbGwgbm90ZXMgYW5ub3RhdGluZyBub24tZXhpc3Rpbmcgb2JqZWN0cyBmcm9tIHRoZSBnaXZlbiBub3RlcyB0cmVlCisgKgorICogQWxsIG5vdGVzIGluIHRoZSBnaXZlbiBub3Rlc190cmVlIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBvYmplY3RzIHRoYXQgbm8KKyAqIGxvbmdlciBleGlzdCBpbiB0aGUgZGF0YWJhc2UsIGFyZSByZW1vdmVkIGZyb20gdGhlIG5vdGVzIHRyZWUuCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBtYWRlIGJ5IHBydW5lX25vdGVzKCkgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUKKyAqIHN0cnVjdHVyZSBhcmUgbm90IHBlcnNpc3RlbnQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gd3JpdGVfbm90ZXNfdHJlZSgpCisgKiByZXR1cm5zIHplcm8uCisgKi8KK3ZvaWQgcHJ1bmVfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGludCBmbGFncyk7CisKKy8qCisgKiBGcmVlIChhbmQgZGUtaW5pdGlhbGl6ZSkgdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlCisgKgorICogSU1QT1JUQU5UOiBDaGFuZ2VzIG1hZGUgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUgc2luY2UgdGhlIGxhc3QsIHN1Y2Nlc3NmdWwKKyAqIGNhbGwgdG8gd3JpdGVfbm90ZXNfdHJlZSgpIHdpbGwgYmUgbG9zdC4KKyAqLwordm9pZCBmcmVlX25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0KTsKKworc3RydWN0IHN0cmluZ19saXN0OworCitzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgeworCWludCB1c2VfZGVmYXVsdF9ub3RlczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfbm90ZXNfcmVmczsKK307CisKKy8qCisgKiBJbml0aWFsaXplIGEgZGlzcGxheV9ub3Rlc19vcHQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgKi8KK3ZvaWQgaW5pdF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0KTsKKworLyoKKyAqIFRoaXMgZmFtaWx5IG9mIGZ1bmN0aW9ucyBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBkaXNwbGF5IG9mIG5vdGVzLiBJbgorICogcGFydGljdWxhciwgJ2VuYWJsZV9kZWZhdWx0X2Rpc3BsYXlfbm90ZXMnIHdpbGwgZGlzcGxheSB0aGUgZGVmYXVsdCBub3RlcywKKyAqICdlbmFibGVfcmVmX2Rpc3BsYXlfbm90ZXMnIHdpbGwgZGlzcGxheSB0aGUgbm90ZXMgcmVmICdyZWYnIGFuZAorICogJ2Rpc2FibGVfZGlzcGxheV9ub3Rlcycgd2lsbCBkaXNhYmxlIG5vdGVzLCBpbmNsdWRpbmcgdGhvc2UgYWRkZWQgYnkgcHJldmlvdXMKKyAqIGludm9jYXRpb25zIG9mIHRoZSAnZW5hYmxlXypfZGlzcGxheV9ub3RlcycgZnVuY3Rpb25zLgorICoKKyAqICdzaG93X25vdGVzJyBpcyBhIHBvaW50ZXIgdG8gYSBib29sZWFuIHdoaWNoIHdpbGwgYmUgc2V0IHRvIDEgaWYgbm90ZXMgYXJlCisgKiBkaXNwbGF5ZWQsIGVsc2UgMC4gSXQgbXVzdCBub3QgYmUgTlVMTC4KKyAqLwordm9pZCBlbmFibGVfZGVmYXVsdF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0LCBpbnQgKnNob3dfbm90ZXMpOwordm9pZCBlbmFibGVfcmVmX2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQsIGludCAqc2hvd19ub3RlcywKKwkJY29uc3QgY2hhciAqcmVmKTsKK3ZvaWQgZGlzYWJsZV9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0LCBpbnQgKnNob3dfbm90ZXMpOworCisvKgorICogTG9hZCB0aGUgbm90ZXMgbWFjaGluZXJ5IGZvciBkaXNwbGF5aW5nIHNldmVyYWwgbm90ZXMgdHJlZXMuCisgKgorICogSWYgJ29wdCcgaXMgbm90IE5VTEwsIHRoZW4gaXQgc3BlY2lmaWVzIGFkZGl0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZQorICogZGlzcGxheWluZzoKKyAqCisgKiAtIHN1cHByZXNzX2RlZmF1bHRfbm90ZXMgaW5kaWNhdGVzIHRoYXQgdGhlIG5vdGVzIGZyb20KKyAqICAgY29yZS5ub3Rlc1JlZiBhbmQgbm90ZXMuZGlzcGxheVJlZiBzaG91bGQgbm90IGJlIGxvYWRlZC4KKyAqCisgKiAtIGV4dHJhX25vdGVzX3JlZnMgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIGdsb2JzIChpbiB0aGUgc2FtZSBzdHlsZQorICogICBhcyBub3Rlcy5kaXNwbGF5UmVmKSB3aGVyZSBub3RlcyBzaG91bGQgYmUgbG9hZGVkIGZyb20uCisgKi8KK3ZvaWQgbG9hZF9kaXNwbGF5X25vdGVzKHN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCAqb3B0KTsKKworLyoKKyAqIEFwcGVuZCBub3RlcyBmb3IgdGhlIGdpdmVuICdvYmplY3Rfc2hhMScgZnJvbSBhbGwgdHJlZXMgc2V0IHVwIGJ5CisgKiBsb2FkX2Rpc3BsYXlfbm90ZXMoKSB0byAnc2InLgorICoKKyAqIElmICdyYXcnIGlzIGZhbHNlIHRoZSBub3RlIHdpbGwgYmUgaW5kZW50ZWQgYnkgNCBwbGFjZXMgYW5kCisgKiBhICdOb3RlcyAocmVmbmFtZSk6JyBoZWFkZXIgYWRkZWQuCisgKgorICogWW91ICptdXN0KiBjYWxsIGxvYWRfZGlzcGxheV9ub3RlcygpIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIGZvcm1hdF9kaXNwbGF5X25vdGVzKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9iamVjdF9vaWQsCisJCQkgIHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcsIGludCByYXcpOworCisvKgorICogTG9hZCB0aGUgbm90ZXMgdHJlZSBmcm9tIGVhY2ggcmVmIGxpc3RlZCBpbiAncmVmcycuICBUaGUgb3V0cHV0IGlzCisgKiBhbiBhcnJheSBvZiBub3Rlc190cmVlKiwgdGVybWluYXRlZCBieSBhIE5VTEwuCisgKi8KK3N0cnVjdCBub3Rlc190cmVlICoqbG9hZF9ub3Rlc190cmVlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnMsIGludCBmbGFncyk7CisKKy8qCisgKiBBZGQgYWxsIHJlZnMgdGhhdCBtYXRjaCAnZ2xvYicgdG8gdGhlICdsaXN0Jy4KKyAqLwordm9pZCBzdHJpbmdfbGlzdF9hZGRfcmVmc19ieV9nbG9iKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqZ2xvYik7CisKKy8qCisgKiBBZGQgYWxsIHJlZnMgZnJvbSBhIGNvbG9uLXNlcGFyYXRlZCBnbG9iIGxpc3QgJ2dsb2JzJyB0byB0aGUgZW5kIG9mCisgKiAnbGlzdCcuICBFbXB0eSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLiAgVGhpcyBoZWxwZXIgaXMgdXNlZCB0bworICogcGFyc2UgR0lUX05PVEVTX0RJU1BMQVlfUkVGIHN0eWxlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAqLwordm9pZCBzdHJpbmdfbGlzdF9hZGRfcmVmc19mcm9tX2NvbG9uX3NlcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkJCSBjb25zdCBjaGFyICpnbG9icyk7CisKKy8qIEV4cGFuZCBpbnBsYWNlIGEgbm90ZSByZWYgbGlrZSAiZm9vIiBvciAibm90ZXMvZm9vIiBpbnRvICJyZWZzL25vdGVzL2ZvbyIgKi8KK3ZvaWQgZXhwYW5kX25vdGVzX3JlZihzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qCisgKiBTaW1pbGFyIHRvIGV4cGFuZF9ub3Rlc19yZWYsIGJ1dCB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlIHJlZiBjYW4gYmUgbG9jYXRlZAorICogdmlhIGdldF9zaGExIGZpcnN0LCBhbmQgb25seSBmYWxscyBiYWNrIHRvIGV4cGFuZF9ub3Rlc19yZWYgaW4gdGhlIGNhc2UKKyAqIHdoZXJlIGdldF9zaGExIGZhaWxzLgorICovCit2b2lkIGV4cGFuZF9sb29zZV9ub3Rlc19yZWYoc3RydWN0IHN0cmJ1ZiAqc2IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL29iamVjdC1zdG9yZS5oIGIvb2JqZWN0LXN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3MmZlZQotLS0gL2Rldi9udWxsCisrKyBiL29iamVjdC1zdG9yZS5oCkBAIC0wLDAgKzEsNDUwIEBACisjaWZuZGVmIE9CSkVDVF9TVE9SRV9ICisjZGVmaW5lIE9CSkVDVF9TVE9SRV9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9pZG1hcC5oIgorI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisKK3N0cnVjdCBvYmplY3RfZGlyZWN0b3J5IHsKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqbmV4dDsKKworCS8qCisJICogVXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiByZWFkZGlyKDMpIGNhbGxzIHdoZW4gd2UgYXJlIE9LCisJICogc2FjcmlmaWNpbmcgYWNjdXJhY3kgZHVlIHRvIHJhY2VzIGZvciBzcGVlZC4gVGhhdCBpbmNsdWRlcworCSAqIG9iamVjdCBleGlzdGVuY2Ugd2l0aCBPQkpFQ1RfSU5GT19RVUlDSywgYXMgd2VsbCBhcworCSAqIG91ciBzZWFyY2ggZm9yIHVuaXF1ZSBhYmJyZXZpYXRlZCBoYXNoZXMuIERvbid0IHVzZSBpdCBmb3IgdGFza3MKKwkgKiByZXF1aXJpbmcgZ3JlYXRlciBhY2N1cmFjeSEKKwkgKgorCSAqIEJlIHN1cmUgdG8gY2FsbCBvZGJfbG9hZF9sb29zZV9jYWNoZSgpIGJlZm9yZSB1c2luZy4KKwkgKi8KKwljaGFyIGxvb3NlX29iamVjdHNfc3ViZGlyX3NlZW5bMjU2XTsKKwlzdHJ1Y3Qgb2lkX2FycmF5IGxvb3NlX29iamVjdHNfY2FjaGVbMjU2XTsKKworCS8qCisJICogUGF0aCB0byB0aGUgYWx0ZXJuYXRpdmUgb2JqZWN0IHN0b3JlLiBJZiB0aGlzIGlzIGEgcmVsYXRpdmUgcGF0aCwKKwkgKiBpdCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKwkgKi8KKwljaGFyICpwYXRoOworfTsKKwordm9pZCBwcmVwYXJlX2FsdF9vZGIoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY2hhciAqY29tcHV0ZV9hbHRlcm5hdGVfcGF0aChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOwordHlwZWRlZiBpbnQgYWx0X29kYl9mbihzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqLCB2b2lkICopOworaW50IGZvcmVhY2hfYWx0X29kYihhbHRfb2RiX2ZuLCB2b2lkKik7Cit0eXBlZGVmIHZvaWQgYWx0ZXJuYXRlX3JlZl9mbihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKik7Cit2b2lkIGZvcl9lYWNoX2FsdGVybmF0ZV9yZWYoYWx0ZXJuYXRlX3JlZl9mbiwgdm9pZCAqKTsKKworLyoKKyAqIEFkZCB0aGUgZGlyZWN0b3J5IHRvIHRoZSBvbi1kaXNrIGFsdGVybmF0ZXMgZmlsZTsgdGhlIG5ldyBlbnRyeSB3aWxsIGFsc28KKyAqIHRha2UgZWZmZWN0IGluIHRoZSBjdXJyZW50IHByb2Nlc3MuCisgKi8KK3ZvaWQgYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShjb25zdCBjaGFyICpkaXIpOworCisvKgorICogQWRkIHRoZSBkaXJlY3RvcnkgdG8gdGhlIGluLW1lbW9yeSBsaXN0IG9mIGFsdGVybmF0ZXMgKGFsb25nIHdpdGggYW55CisgKiByZWN1cnNpdmUgYWx0ZXJuYXRlcyBpdCBwb2ludHMgdG8pLCBidXQgZG8gbm90IG1vZGlmeSB0aGUgb24tZGlzayBhbHRlcm5hdGVzCisgKiBmaWxlLgorICovCit2b2lkIGFkZF90b19hbHRlcm5hdGVzX21lbW9yeShjb25zdCBjaGFyICpkaXIpOworCisvKgorICogUG9wdWxhdGUgYW5kIHJldHVybiB0aGUgbG9vc2Ugb2JqZWN0IGNhY2hlIGFycmF5IGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgKiBnaXZlbiBvYmplY3QgSUQuCisgKi8KK3N0cnVjdCBvaWRfYXJyYXkgKm9kYl9sb29zZV9jYWNoZShzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyogRW1wdHkgdGhlIGxvb3NlIG9iamVjdCBjYWNoZSBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QgZGlyZWN0b3J5LiAqLwordm9pZCBvZGJfY2xlYXJfbG9vc2VfY2FjaGUoc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYik7CisKK3N0cnVjdCBwYWNrZWRfZ2l0IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBwYWNrbWFwX2VudDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1ydTsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndpbmRvd3M7CisJb2ZmX3QgcGFja19zaXplOworCWNvbnN0IHZvaWQgKmluZGV4X2RhdGE7CisJc2l6ZV90IGluZGV4X3NpemU7CisJdWludDMyX3QgbnVtX29iamVjdHM7CisJdWludDMyX3QgbnVtX2JhZF9vYmplY3RzOworCXVuc2lnbmVkIGNoYXIgKmJhZF9vYmplY3Rfc2hhMTsKKwlpbnQgaW5kZXhfdmVyc2lvbjsKKwl0aW1lX3QgbXRpbWU7CisJaW50IHBhY2tfZmQ7CisJaW50IGluZGV4OyAgICAgICAgICAgICAgLyogZm9yIGJ1aWx0aW4vcGFjay1vYmplY3RzLmMgKi8KKwl1bnNpZ25lZCBwYWNrX2xvY2FsOjEsCisJCSBwYWNrX2tlZXA6MSwKKwkJIHBhY2tfa2VlcF9pbl9jb3JlOjEsCisJCSBmcmVzaGVuZWQ6MSwKKwkJIGRvX25vdF9jbG9zZToxLAorCQkgcGFja19wcm9taXNvcjoxLAorCQkgbXVsdGlfcGFja19pbmRleDoxOworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX1JBV1NaXTsKKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmluZGV4OworCS8qIHNvbWV0aGluZyBsaWtlICIuZ2l0L29iamVjdHMvcGFjay94eHh4eC5wYWNrIiAqLworCWNoYXIgcGFja19uYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgbXVsdGlfcGFja19pbmRleDsKKworc3RhdGljIGlubGluZSBpbnQgcGFja19tYXBfZW50cnlfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeTIsCisJCQkJICAgICBjb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IGNoYXIgKmtleSA9IGtleWRhdGE7CisJY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnBnMSwgKnBnMjsKKworCXBnMSA9IGNvbnRhaW5lcl9vZihlbnRyeSwgY29uc3Qgc3RydWN0IHBhY2tlZF9naXQsIHBhY2ttYXBfZW50KTsKKwlwZzIgPSBjb250YWluZXJfb2YoZW50cnkyLCBjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCwgcGFja21hcF9lbnQpOworCisJcmV0dXJuIHN0cmNtcChwZzEtPnBhY2tfbmFtZSwga2V5ID8ga2V5IDogcGcyLT5wYWNrX25hbWUpOworfQorCitzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSB7CisJLyoKKwkgKiBTZXQgb2YgYWxsIG9iamVjdCBkaXJlY3RvcmllczsgdGhlIG1haW4gZGlyZWN0b3J5IGlzIGZpcnN0IChhbmQKKwkgKiBjYW5ub3QgYmUgTlVMTCBhZnRlciBpbml0aWFsaXphdGlvbikuIFN1YnNlcXVlbnQgZGlyZWN0b3JpZXMgYXJlCisJICogYWx0ZXJuYXRlcy4KKwkgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICoqb2RiX3RhaWw7CisJaW50IGxvYWRlZF9hbHRlcm5hdGVzOworCisJLyoKKwkgKiBBIGxpc3Qgb2YgYWx0ZXJuYXRlIG9iamVjdCBkaXJlY3RvcmllcyBsb2FkZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQ7CisJICogdGhpcyBzaG91bGQgbm90IGdlbmVyYWxseSBuZWVkIHRvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LCBidXQgd2lsbAorCSAqIHBvcHVsYXRlIHRoZSAib2RiIiBsaXN0IHdoZW4gcHJlcGFyZV9hbHRfb2RiKCkgaXMgcnVuLgorCSAqLworCWNoYXIgKmFsdGVybmF0ZV9kYjsKKworCS8qCisJICogT2JqZWN0cyB0aGF0IHNob3VsZCBiZSBzdWJzdGl0dXRlZCBieSBvdGhlciBvYmplY3RzCisJICogKHNlZSBnaXQtcmVwbGFjZSgxKSkuCisJICovCisJc3RydWN0IG9pZG1hcCAqcmVwbGFjZV9tYXA7CisJdW5zaWduZWQgcmVwbGFjZV9tYXBfaW5pdGlhbGl6ZWQgOiAxOworCXB0aHJlYWRfbXV0ZXhfdCByZXBsYWNlX211dGV4OyAvKiBwcm90ZWN0IG9iamVjdCByZXBsYWNlIGZ1bmN0aW9ucyAqLworCisJc3RydWN0IGNvbW1pdF9ncmFwaCAqY29tbWl0X2dyYXBoOworCXVuc2lnbmVkIGNvbW1pdF9ncmFwaF9hdHRlbXB0ZWQgOiAxOyAvKiBpZiBsb2FkaW5nIGhhcyBiZWVuIGF0dGVtcHRlZCAqLworCisJLyoKKwkgKiBwcml2YXRlIGRhdGEKKwkgKgorCSAqIHNob3VsZCBvbmx5IGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGJ5IHBhY2tmaWxlLmMgYW5kIG1pZHguYworCSAqLworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptdWx0aV9wYWNrX2luZGV4OworCisJLyoKKwkgKiBwcml2YXRlIGRhdGEKKwkgKgorCSAqIHNob3VsZCBvbmx5IGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGJ5IHBhY2tmaWxlLmMKKwkgKi8KKworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrZWRfZ2l0OworCS8qIEEgbW9zdC1yZWNlbnRseS11c2VkIG9yZGVyZWQgdmVyc2lvbiBvZiB0aGUgcGFja2VkX2dpdCBsaXN0LiAqLworCXN0cnVjdCBsaXN0X2hlYWQgcGFja2VkX2dpdF9tcnU7CisKKwkvKgorCSAqIEEgbWFwIG9mIHBhY2tmaWxlcyB0byBwYWNrZWRfZ2l0IHN0cnVjdHMgZm9yIHRyYWNraW5nIHdoaWNoCisJICogcGFja3MgaGF2ZSBiZWVuIGxvYWRlZCBhbHJlYWR5LgorCSAqLworCXN0cnVjdCBoYXNobWFwIHBhY2tfbWFwOworCisJLyoKKwkgKiBBIGZhc3QsIHJvdWdoIGNvdW50IG9mIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeS4KKwkgKiBUaGVzZSB0d28gZmllbGRzIGFyZSBub3QgbWVhbnQgZm9yIGRpcmVjdCBhY2Nlc3MuIFVzZQorCSAqIGFwcHJveGltYXRlX29iamVjdF9jb3VudCgpIGluc3RlYWQuCisJICovCisJdW5zaWduZWQgbG9uZyBhcHByb3hpbWF0ZV9vYmplY3RfY291bnQ7CisJdW5zaWduZWQgYXBwcm94aW1hdGVfb2JqZWN0X2NvdW50X3ZhbGlkIDogMTsKKworCS8qCisJICogV2hldGhlciBwYWNrZWRfZ2l0IGhhcyBhbHJlYWR5IGJlZW4gcG9wdWxhdGVkIHdpdGggdGhpcyByZXBvc2l0b3J5J3MKKwkgKiBwYWNrcy4KKwkgKi8KKwl1bnNpZ25lZCBwYWNrZWRfZ2l0X2luaXRpYWxpemVkIDogMTsKK307CisKK3N0cnVjdCByYXdfb2JqZWN0X3N0b3JlICpyYXdfb2JqZWN0X3N0b3JlX25ldyh2b2lkKTsKK3ZvaWQgcmF3X29iamVjdF9zdG9yZV9jbGVhcihzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqbyk7CisKKy8qCisgKiBQdXQgaW4gYGJ1ZmAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGxvY2FsIG9iamVjdCBkYXRhYmFzZSB0aGF0CisgKiB3b3VsZCBiZSB1c2VkIHRvIHN0b3JlIGEgbG9vc2Ugb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBvaWQuCisgKi8KK2NvbnN0IGNoYXIgKmxvb3NlX29iamVjdF9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCit2b2lkICptYXBfbG9vc2Vfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzaXplKTsKKwordm9pZCAqcmVhZF9vYmplY3RfZmlsZV9leHRlbmRlZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCQl1bnNpZ25lZCBsb25nICpzaXplLCBpbnQgbG9va3VwX3JlcGxhY2UpOworc3RhdGljIGlubGluZSB2b2lkICpyZXBvX3JlYWRfb2JqZWN0X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkJCSAgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlyZXR1cm4gcmVhZF9vYmplY3RfZmlsZV9leHRlbmRlZChyLCBvaWQsIHR5cGUsIHNpemUsIDEpOworfQorI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSByZWFkX29iamVjdF9maWxlKG9pZCwgdHlwZSwgc2l6ZSkgcmVwb19yZWFkX29iamVjdF9maWxlKHRoZV9yZXBvc2l0b3J5LCBvaWQsIHR5cGUsIHNpemUpCisjZW5kaWYKKworLyogUmVhZCBhbmQgdW5wYWNrIGFuIG9iamVjdCBmaWxlIGludG8gbWVtb3J5LCB3cml0ZSBtZW1vcnkgdG8gYW4gb2JqZWN0IGZpbGUgKi8KK2ludCBvaWRfb2JqZWN0X2luZm8oc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworaW50IGhhc2hfb2JqZWN0X2ZpbGUoY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ28sIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwKKwkJICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitpbnQgd3JpdGVfb2JqZWN0X2ZpbGUoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJICAgICAgY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworaW50IGhhc2hfb2JqZWN0X2ZpbGVfbGl0ZXJhbGx5KGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgICAgICAgY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIHVuc2lnbmVkIGZsYWdzKTsKKworLyoKKyAqIEFkZCBhbiBvYmplY3QgZmlsZSB0byB0aGUgaW4tbWVtb3J5IG9iamVjdCBzdG9yZSwgd2l0aG91dCB3cml0aW5nIGl0CisgKiB0byBkaXNrLgorICoKKyAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHdyaXRlX29iamVjdF9maWxlIHRvIHJlY29yZCB0aGUKKyAqIG9iamVjdCBpbiBwZXJzaXN0ZW50IHN0b3JhZ2UgYmVmb3JlIHdyaXRpbmcgYW55IG90aGVyIG5ldyBvYmplY3RzCisgKiB0aGF0IHJlZmVyZW5jZSBpdC4KKyAqLworaW50IHByZXRlbmRfb2JqZWN0X2ZpbGUodm9pZCAqLCB1bnNpZ25lZCBsb25nLCBlbnVtIG9iamVjdF90eXBlLAorCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworaW50IGZvcmNlX29iamVjdF9sb29zZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHRpbWVfdCBtdGltZSk7CisKKy8qCisgKiBPcGVuIHRoZSBsb29zZSBvYmplY3QgYXQgcGF0aCwgY2hlY2sgaXRzIGhhc2gsIGFuZCByZXR1cm4gdGhlIGNvbnRlbnRzLAorICogdHlwZSwgYW5kIHNpemUuIElmIHRoZSBvYmplY3QgaXMgYSBibG9iLCB0aGVuICJjb250ZW50cyIgbWF5IHJldHVybiBOVUxMLAorICogdG8gYWxsb3cgc3RyZWFtaW5nIG9mIGxhcmdlIGJsb2JzLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvciAoZGV0YWlscyBtYXkgYmUgd3JpdHRlbiB0byBzdGRlcnIpLgorICovCitpbnQgcmVhZF9sb29zZV9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZXhwZWN0ZWRfb2lkLAorCQkgICAgICBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkgICAgICB1bnNpZ25lZCBsb25nICpzaXplLAorCQkgICAgICB2b2lkICoqY29udGVudHMpOworCisjaWZuZGVmIE5PX1RIRV9SRVBPU0lUT1JZX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjZGVmaW5lIGhhc19zaGExX2ZpbGVfd2l0aF9mbGFncyhzaGExLCBmbGFncykgcmVwb19oYXNfc2hhMV9maWxlX3dpdGhfZmxhZ3ModGhlX3JlcG9zaXRvcnksIHNoYTEsIGZsYWdzKQorI2RlZmluZSBoYXNfc2hhMV9maWxlKHNoYTEpIHJlcG9faGFzX3NoYTFfZmlsZSh0aGVfcmVwb3NpdG9yeSwgc2hhMSkKKyNlbmRpZgorCisvKiBTYW1lIGFzIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBzdHJ1Y3Qgb2JqZWN0X2lkLiAqLworaW50IHJlcG9faGFzX29iamVjdF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IHJlcG9faGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWdzKTsKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgaGFzX29iamVjdF9maWxlKG9pZCkgcmVwb19oYXNfb2JqZWN0X2ZpbGUodGhlX3JlcG9zaXRvcnksIG9pZCkKKyNkZWZpbmUgaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Mob2lkLCBmbGFncykgcmVwb19oYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncyh0aGVfcmVwb3NpdG9yeSwgb2lkLCBmbGFncykKKyNlbmRpZgorCisvKgorICogUmV0dXJuIHRydWUgaWZmIGFuIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UgaGFzIGEgbG9vc2Ugb2JqZWN0CisgKiB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzcGVjdCByZXBsYWNlCisgKiByZWZlcmVuY2VzLgorICovCitpbnQgaGFzX2xvb3NlX29iamVjdF9ub25sb2NhbChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICopOworCit2b2lkIGFzc2VydF9vaWRfdHlwZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGVudW0gb2JqZWN0X3R5cGUgZXhwZWN0KTsKKworLyoKKyAqIEVuYWJsaW5nIHRoZSBvYmplY3QgcmVhZCBsb2NrIGFsbG93cyBtdWx0aXBsZSB0aHJlYWRzIHRvIHNhZmVseSBjYWxsIHRoZQorICogZm9sbG93aW5nIGZ1bmN0aW9ucyBpbiBwYXJhbGxlbDogcmVwb19yZWFkX29iamVjdF9maWxlKCksIHJlYWRfb2JqZWN0X2ZpbGUoKSwKKyAqIHJlYWRfb2JqZWN0X2ZpbGVfZXh0ZW5kZWQoKSwgcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoKSwgcmVhZF9vYmplY3QoKSwKKyAqIG9pZF9vYmplY3RfaW5mbygpIGFuZCBvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQoKS4KKyAqCisgKiBvYmpfcmVhZF9sb2NrKCkgYW5kIG9ial9yZWFkX3VubG9jaygpIG1heSBhbHNvIGJlIHVzZWQgdG8gcHJvdGVjdCBvdGhlcgorICogc2VjdGlvbiB3aGljaCBjYW5ub3QgZXhlY3V0ZSBpbiBwYXJhbGxlbCB3aXRoIG9iamVjdCByZWFkaW5nLiBTaW5jZSB0aGUgdXNlZAorICogbG9jayBpcyBhIHJlY3Vyc2l2ZSBtdXRleCwgdGhlc2Ugc2VjdGlvbnMgY2FuIGV2ZW4gY29udGFpbiBjYWxscyB0byBvYmplY3QKKyAqIHJlYWRpbmcgZnVuY3Rpb25zLiBIb3dldmVyLCBiZXdhcmUgdGhhdCBpbiB0aGVzZSBjYXNlcyB6bGliIGluZmxhdGlvbiB3b24ndAorICogYmUgcGVyZm9ybWVkIGluIHBhcmFsbGVsLCBsb3NpbmcgcGVyZm9ybWFuY2UuCisgKgorICogVE9ETzogb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKCkncyBjYWxsIHN0YWNrIGhhcyBhIHJlY3Vyc2l2ZSBiZWhhdmlvci4gSWYKKyAqIGFueSBvZiBpdHMgY2FsbGVlcyBlbmQgdXAgY2FsbGluZyBpdCwgdGhpcyByZWN1cnNpdmUgY2FsbCB3b24ndCBiZW5lZml0IGZyb20KKyAqIHBhcmFsbGVsIGluZmxhdGlvbi4KKyAqLwordm9pZCBlbmFibGVfb2JqX3JlYWRfbG9jayh2b2lkKTsKK3ZvaWQgZGlzYWJsZV9vYmpfcmVhZF9sb2NrKHZvaWQpOworCitleHRlcm4gaW50IG9ial9yZWFkX3VzZV9sb2NrOworZXh0ZXJuIHB0aHJlYWRfbXV0ZXhfdCBvYmpfcmVhZF9tdXRleDsKKworc3RhdGljIGlubGluZSB2b2lkIG9ial9yZWFkX2xvY2sodm9pZCkKK3sKKwlpZihvYmpfcmVhZF91c2VfbG9jaykKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZvYmpfcmVhZF9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvYmpfcmVhZF91bmxvY2sodm9pZCkKK3sKKwlpZihvYmpfcmVhZF91c2VfbG9jaykKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJm9ial9yZWFkX211dGV4KTsKK30KKworc3RydWN0IG9iamVjdF9pbmZvIHsKKwkvKiBSZXF1ZXN0ICovCisJZW51bSBvYmplY3RfdHlwZSAqdHlwZXA7CisJdW5zaWduZWQgbG9uZyAqc2l6ZXA7CisJb2ZmX3QgKmRpc2tfc2l6ZXA7CisJc3RydWN0IG9iamVjdF9pZCAqZGVsdGFfYmFzZV9vaWQ7CisJc3RydWN0IHN0cmJ1ZiAqdHlwZV9uYW1lOworCXZvaWQgKipjb250ZW50cDsKKworCS8qIFJlc3BvbnNlICovCisJZW51bSB7CisJCU9JX0NBQ0hFRCwKKwkJT0lfTE9PU0UsCisJCU9JX1BBQ0tFRCwKKwkJT0lfREJDQUNIRUQKKwl9IHdoZW5jZTsKKwl1bmlvbiB7CisJCS8qCisJCSAqIHN0cnVjdCB7CisJCSAqIAkuLi4gTm90aGluZyB0byBleHBvc2UgaW4gdGhpcyBjYXNlCisJCSAqIH0gY2FjaGVkOworCQkgKiBzdHJ1Y3QgeworCQkgKiAJLi4uIE5vdGhpbmcgdG8gZXhwb3NlIGluIHRoaXMgY2FzZQorCQkgKiB9IGxvb3NlOworCQkgKi8KKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrOworCQkJb2ZmX3Qgb2Zmc2V0OworCQkJdW5zaWduZWQgaW50IGlzX2RlbHRhOworCQl9IHBhY2tlZDsKKwl9IHU7Cit9OworCisvKgorICogSW5pdGlhbGl6ZXIgZm9yIGEgInN0cnVjdCBvYmplY3RfaW5mbyIgdGhhdCB3YW50cyBubyBpdGVtcy4gWW91IG1heQorICogYWxzbyBtZW1zZXQoKSB0aGUgbWVtb3J5IHRvIGFsbC16ZXJvZXMuCisgKi8KKyNkZWZpbmUgT0JKRUNUX0lORk9fSU5JVCB7TlVMTH0KKworLyogSW52b2tlIGxvb2t1cF9yZXBsYWNlX29iamVjdCgpIG9uIHRoZSBnaXZlbiBoYXNoICovCisjZGVmaW5lIE9CSkVDVF9JTkZPX0xPT0tVUF9SRVBMQUNFIDEKKy8qIEFsbG93IHJlYWRpbmcgZnJvbSBhIGxvb3NlIG9iamVjdCBmaWxlIG9mIHVua25vd24vYm9ndXMgdHlwZSAqLworI2RlZmluZSBPQkpFQ1RfSU5GT19BTExPV19VTktOT1dOX1RZUEUgMgorLyogRG8gbm90IHJldHJ5IHBhY2tlZCBzdG9yYWdlIGFmdGVyIGNoZWNraW5nIHBhY2tlZCBhbmQgbG9vc2Ugc3RvcmFnZSAqLworI2RlZmluZSBPQkpFQ1RfSU5GT19RVUlDSyA4CisvKiBEbyBub3QgY2hlY2sgbG9vc2Ugb2JqZWN0ICovCisjZGVmaW5lIE9CSkVDVF9JTkZPX0lHTk9SRV9MT09TRSAxNgorLyoKKyAqIERvIG5vdCBhdHRlbXB0IHRvIGZldGNoIHRoZSBvYmplY3QgaWYgbWlzc2luZyAoZXZlbiBpZiBmZXRjaF9pc19taXNzaW5nIGlzCisgKiBub256ZXJvKS4KKyAqLworI2RlZmluZSBPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCAzMgorLyoKKyAqIFRoaXMgaXMgbWVhbnQgZm9yIGJ1bGsgcHJlZmV0Y2hpbmcgb2YgbWlzc2luZyBibG9icyBpbiBhIHBhcnRpYWwKKyAqIGNsb25lLiBJbXBsaWVzIE9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUIGFuZCBPQkpFQ1RfSU5GT19RVUlDSworICovCisjZGVmaW5lIE9CSkVDVF9JTkZPX0ZPUl9QUkVGRVRDSCAoT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QgfCBPQkpFQ1RfSU5GT19RVUlDSykKKworaW50IG9pZF9vYmplY3RfaW5mb19leHRlbmRlZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2luZm8gKiwgdW5zaWduZWQgZmxhZ3MpOworCisvKgorICogSXRlcmF0ZSBvdmVyIHRoZSBmaWxlcyBpbiB0aGUgbG9vc2Utb2JqZWN0IHBhcnRzIG9mIHRoZSBvYmplY3QKKyAqIGRpcmVjdG9yeSAicGF0aCIsIHRyaWdnZXJpbmcgdGhlIGZvbGxvd2luZyBjYWxsYmFja3M6CisgKgorICogIC0gbG9vc2Vfb2JqZWN0IGlzIGNhbGxlZCBmb3IgZWFjaCBsb29zZSBvYmplY3Qgd2UgZmluZC4KKyAqCisgKiAgLSBsb29zZV9jcnVmdCBpcyBjYWxsZWQgZm9yIGFueSBmaWxlcyB0aGF0IGRvIG5vdCBhcHBlYXIgdG8gYmUKKyAqICAgIGxvb3NlIG9iamVjdHMuIE5vdGUgdGhhdCB3ZSBvbmx5IGxvb2sgaW4gdGhlIGxvb3NlIG9iamVjdAorICogICAgZGlyZWN0b3JpZXMgIm9iamVjdHMvWzAtOWEtZl17Mn0vIiwgc28gd2Ugd2lsbCBub3QgcmVwb3J0CisgKiAgICAib2JqZWN0cy9mb29iYXIiIGFzIGNydWZ0LgorICoKKyAqICAtIGxvb3NlX3N1YmRpciBpcyBjYWxsZWQgZm9yIGVhY2ggdG9wLWxldmVsIGhhc2hlZCBzdWJkaXJlY3RvcnkKKyAqICAgIG9mIHRoZSBvYmplY3QgZGlyZWN0b3J5IChlLmcuLCAiJE9CSkRJUi9mMCIpLiBJdCBpcyBjYWxsZWQKKyAqICAgIGFmdGVyIHRoZSBvYmplY3RzIGluIHRoZSBkaXJlY3RvcnkgYXJlIHByb2Nlc3NlZC4KKyAqCisgKiBBbnkgY2FsbGJhY2sgdGhhdCBpcyBOVUxMIHdpbGwgYmUgaWdub3JlZC4gQ2FsbGJhY2tzIHJldHVybmluZyBub24temVybworICogd2lsbCBlbmQgdGhlIGl0ZXJhdGlvbi4KKyAqCisgKiBJbiB0aGUgImJ1ZiIgdmFyaWFudCwgInBhdGgiIGlzIGEgc3RyYnVmIHdoaWNoIHdpbGwgYWxzbyBiZSB1c2VkIGFzIGEKKyAqIHNjcmF0Y2ggYnVmZmVyLCBidXQgcmVzdG9yZWQgdG8gaXRzIG9yaWdpbmFsIGNvbnRlbnRzIGJlZm9yZQorICogdGhlIGZ1bmN0aW9uIHJldHVybnMuCisgKi8KK3R5cGVkZWYgaW50IGVhY2hfbG9vc2Vfb2JqZWN0X2ZuKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBlYWNoX2xvb3NlX2NydWZ0X2ZuKGNvbnN0IGNoYXIgKmJhc2VuYW1lLAorCQkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQkJdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBlYWNoX2xvb3NlX3N1YmRpcl9mbih1bnNpZ25lZCBpbnQgbnIsCisJCQkJIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJIHZvaWQgKmRhdGEpOworaW50IGZvcl9lYWNoX2ZpbGVfaW5fb2JqX3N1YmRpcih1bnNpZ25lZCBpbnQgc3ViZGlyX25yLAorCQkJCXN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkJZWFjaF9sb29zZV9vYmplY3RfZm4gb2JqX2NiLAorCQkJCWVhY2hfbG9vc2VfY3J1ZnRfZm4gY3J1ZnRfY2IsCisJCQkJZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCXZvaWQgKmRhdGEpOworaW50IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICBlYWNoX2xvb3NlX29iamVjdF9mbiBvYmpfY2IsCisJCQkJICBlYWNoX2xvb3NlX2NydWZ0X2ZuIGNydWZ0X2NiLAorCQkJCSAgZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCSAgdm9pZCAqZGF0YSk7CitpbnQgZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXJfYnVmKHN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkJICAgICAgZWFjaF9sb29zZV9vYmplY3RfZm4gb2JqX2NiLAorCQkJCSAgICAgIGVhY2hfbG9vc2VfY3J1ZnRfZm4gY3J1ZnRfY2IsCisJCQkJICAgICAgZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpOworCisvKiBGbGFncyBmb3IgZm9yX2VhY2hfKl9vYmplY3QoKSBiZWxvdy4gKi8KK2VudW0gZm9yX2VhY2hfb2JqZWN0X2ZsYWdzIHsKKwkvKiBJdGVyYXRlIG9ubHkgb3ZlciBsb2NhbCBvYmplY3RzLCBub3QgYWx0ZXJuYXRlcy4gKi8KKwlGT1JfRUFDSF9PQkpFQ1RfTE9DQUxfT05MWSA9ICgxPDwwKSwKKworCS8qIE9ubHkgaXRlcmF0ZSBvdmVyIHBhY2tzIG9idGFpbmVkIGZyb20gdGhlIHByb21pc29yIHJlbW90ZS4gKi8KKwlGT1JfRUFDSF9PQkpFQ1RfUFJPTUlTT1JfT05MWSA9ICgxPDwxKSwKKworCS8qCisJICogVmlzaXQgb2JqZWN0cyB3aXRoaW4gYSBwYWNrIGluIHBhY2tmaWxlIG9yZGVyIHJhdGhlciB0aGFuIC5pZHggb3JkZXIKKwkgKi8KKwlGT1JfRUFDSF9PQkpFQ1RfUEFDS19PUkRFUiA9ICgxPDwyKSwKK307CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgYWxsIGFjY2Vzc2libGUgbG9vc2Ugb2JqZWN0cyB3aXRob3V0IHJlc3BlY3QgdG8KKyAqIHJlYWNoYWJpbGl0eS4gQnkgZGVmYXVsdCwgdGhpcyBpbmNsdWRlcyBib3RoIGxvY2FsIGFuZCBhbHRlcm5hdGUgb2JqZWN0cy4KKyAqIFRoZSBvcmRlciBpbiB3aGljaCBvYmplY3RzIGFyZSB2aXNpdGVkIGlzIHVuc3BlY2lmaWVkLgorICoKKyAqIEFueSBmbGFncyBzcGVjaWZpYyB0byBwYWNrcyBhcmUgaWdub3JlZC4KKyAqLworaW50IGZvcl9lYWNoX2xvb3NlX29iamVjdChlYWNoX2xvb3NlX29iamVjdF9mbiwgdm9pZCAqLAorCQkJICBlbnVtIGZvcl9lYWNoX29iamVjdF9mbGFncyBmbGFncyk7CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgYWxsIGFjY2Vzc2libGUgcGFja2VkIG9iamVjdHMgd2l0aG91dCByZXNwZWN0IHRvIHJlYWNoYWJpbGl0eS4KKyAqIEJ5IGRlZmF1bHQsIHRoaXMgaW5jbHVkZXMgYm90aCBsb2NhbCBhbmQgYWx0ZXJuYXRlIHBhY2tzLgorICoKKyAqIE5vdGUgdGhhdCBzb21lIG9iamVjdHMgbWF5IGFwcGVhciB0d2ljZSBpZiB0aGV5IGFyZSBmb3VuZCBpbiBtdWx0aXBsZSBwYWNrcy4KKyAqIEVhY2ggcGFjayBpcyB2aXNpdGVkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLiBCeSBkZWZhdWx0LCBvYmplY3RzIHdpdGhpbiBhCisgKiBwYWNrIGFyZSB2aXNpdGVkIGluIHBhY2staWR4IG9yZGVyIChpLmUuLCBzb3J0ZWQgYnkgb2lkKS4KKyAqLwordHlwZWRlZiBpbnQgZWFjaF9wYWNrZWRfb2JqZWN0X2ZuKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrLAorCQkJCSAgdWludDMyX3QgcG9zLAorCQkJCSAgdm9pZCAqZGF0YSk7CitpbnQgZm9yX2VhY2hfb2JqZWN0X2luX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgICAgZWFjaF9wYWNrZWRfb2JqZWN0X2ZuLCB2b2lkICpkYXRhLAorCQkJICAgIGVudW0gZm9yX2VhY2hfb2JqZWN0X2ZsYWdzIGZsYWdzKTsKK2ludCBmb3JfZWFjaF9wYWNrZWRfb2JqZWN0KGVhY2hfcGFja2VkX29iamVjdF9mbiwgdm9pZCAqLAorCQkJICAgZW51bSBmb3JfZWFjaF9vYmplY3RfZmxhZ3MgZmxhZ3MpOworCisjZW5kaWYgLyogT0JKRUNUX1NUT1JFX0ggKi8KZGlmZiAtLWdpdCBhL29iamVjdC5jIGIvb2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0Yzg2NgotLS0gL2Rldi9udWxsCisrKyBiL29iamVjdC5jCkBAIC0wLDAgKzEsNTgxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJyZXBsYWNlLW9iamVjdC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorCit1bnNpZ25lZCBpbnQgZ2V0X21heF9vYmplY3RfaW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaF9zaXplOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpnZXRfaW5kZXhlZF9vYmplY3QodW5zaWduZWQgaW50IGlkeCkKK3sKKwlyZXR1cm4gdGhlX3JlcG9zaXRvcnktPnBhcnNlZF9vYmplY3RzLT5vYmpfaGFzaFtpZHhdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqb2JqZWN0X3R5cGVfc3RyaW5nc1tdID0geworCU5VTEwsCQkvKiBPQkpfTk9ORSA9IDAgKi8KKwkiY29tbWl0IiwJLyogT0JKX0NPTU1JVCA9IDEgKi8KKwkidHJlZSIsCQkvKiBPQkpfVFJFRSA9IDIgKi8KKwkiYmxvYiIsCQkvKiBPQkpfQkxPQiA9IDMgKi8KKwkidGFnIiwJCS8qIE9CSl9UQUcgPSA0ICovCit9OworCitjb25zdCBjaGFyICp0eXBlX25hbWUodW5zaWduZWQgaW50IHR5cGUpCit7CisJaWYgKHR5cGUgPj0gQVJSQVlfU0laRShvYmplY3RfdHlwZV9zdHJpbmdzKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG9iamVjdF90eXBlX3N0cmluZ3NbdHlwZV07Cit9CisKK2ludCB0eXBlX2Zyb21fc3RyaW5nX2dlbnRseShjb25zdCBjaGFyICpzdHIsIHNzaXplX3QgbGVuLCBpbnQgZ2VudGxlKQoreworCWludCBpOworCisJaWYgKGxlbiA8IDApCisJCWxlbiA9IHN0cmxlbihzdHIpOworCisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUob2JqZWN0X3R5cGVfc3RyaW5ncyk7IGkrKykKKwkJaWYgKCFzdHJuY21wKHN0ciwgb2JqZWN0X3R5cGVfc3RyaW5nc1tpXSwgbGVuKSAmJgorCQkgICAgb2JqZWN0X3R5cGVfc3RyaW5nc1tpXVtsZW5dID09ICdcMCcpCisJCQlyZXR1cm4gaTsKKworCWlmIChnZW50bGUpCisJCXJldHVybiAtMTsKKworCWRpZShfKCJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIpLCBzdHIpOworfQorCisvKgorICogUmV0dXJuIGEgbnVtZXJpY2FsIGhhc2ggdmFsdWUgYmV0d2VlbiAwIGFuZCBuLTEgZm9yIHRoZSBvYmplY3Qgd2l0aAorICogdGhlIHNwZWNpZmllZCBzaGExLiAgbiBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gIFBsZWFzZSBub3RlIHRoYXQgdGhlCisgKiByZXR1cm4gdmFsdWUgaXMgKm5vdCogY29uc2lzdGVudCBhY3Jvc3MgY29tcHV0ZXIgYXJjaGl0ZWN0dXJlcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX29iaihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVuc2lnbmVkIGludCBuKQoreworCXJldHVybiBvaWRoYXNoKG9pZCkgJiAobiAtIDEpOworfQorCisvKgorICogSW5zZXJ0IG9iaiBpbnRvIHRoZSBoYXNoIHRhYmxlIGhhc2gsIHdoaWNoIGhhcyBsZW5ndGggc2l6ZSAod2hpY2gKKyAqIG11c3QgYmUgYSBwb3dlciBvZiAyKS4gIE9uIGNvbGxpc2lvbnMsIHNpbXBseSBvdmVyZmxvdyB0byB0aGUgbmV4dAorICogZW1wdHkgYnVja2V0LgorICovCitzdGF0aWMgdm9pZCBpbnNlcnRfb2JqX2hhc2goc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3Qgb2JqZWN0ICoqaGFzaCwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IGogPSBoYXNoX29iaigmb2JqLT5vaWQsIHNpemUpOworCisJd2hpbGUgKGhhc2hbal0pIHsKKwkJaisrOworCQlpZiAoaiA+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+dGFnX3N0YXRlKTsKKwlGUkVFX0FORF9OVUxMKG8tPm9iamVjdF9zdGF0ZSk7CisJRlJFRV9BTkRfTlVMTChvLT5zaGFsbG93X3N0YXQpOworfQpkaWZmIC0tZ2l0IGEvb2JqZWN0LmggYi9vYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGJhYmZjCi0tLSAvZGV2L251bGwKKysrIGIvb2JqZWN0LmgKQEAgLTAsMCArMSwxOTcgQEAKKyNpZm5kZWYgT0JKRUNUX0gKKyNkZWZpbmUgT0JKRUNUX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0cnVjdCBidWZmZXJfc2xhYjsKKworc3RydWN0IHBhcnNlZF9vYmplY3RfcG9vbCB7CisJc3RydWN0IG9iamVjdCAqKm9ial9oYXNoOworCWludCBucl9vYmpzLCBvYmpfaGFzaF9zaXplOworCisJLyogVE9ETzogbWlncmF0ZSBhbGxvY19zdGF0ZXMgdG8gbWVtLXBvb2w/ICovCisJc3RydWN0IGFsbG9jX3N0YXRlICpibG9iX3N0YXRlOworCXN0cnVjdCBhbGxvY19zdGF0ZSAqdHJlZV9zdGF0ZTsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdGUgKmNvbW1pdF9zdGF0ZTsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdGUgKnRhZ19zdGF0ZTsKKwlzdHJ1Y3QgYWxsb2Nfc3RhdGUgKm9iamVjdF9zdGF0ZTsKKwl1bnNpZ25lZCBjb21taXRfY291bnQ7CisKKwkvKiBwYXJlbnQgc3Vic3RpdHV0aW9ucyBmcm9tIC5naXQvaW5mby9ncmFmdHMgYW5kIC5naXQvc2hhbGxvdyAqLworCXN0cnVjdCBjb21taXRfZ3JhZnQgKipncmFmdHM7CisJaW50IGdyYWZ0c19hbGxvYywgZ3JhZnRzX25yOworCisJaW50IGlzX3NoYWxsb3c7CisJc3RydWN0IHN0YXRfdmFsaWRpdHkgKnNoYWxsb3dfc3RhdDsKKwljaGFyICphbHRlcm5hdGVfc2hhbGxvd19maWxlOworCisJaW50IGNvbW1pdF9ncmFmdF9wcmVwYXJlZDsKKworCXN0cnVjdCBidWZmZXJfc2xhYiAqYnVmZmVyX3NsYWI7Cit9OworCitzdHJ1Y3QgcGFyc2VkX29iamVjdF9wb29sICpwYXJzZWRfb2JqZWN0X3Bvb2xfbmV3KHZvaWQpOwordm9pZCBwYXJzZWRfb2JqZWN0X3Bvb2xfY2xlYXIoc3RydWN0IHBhcnNlZF9vYmplY3RfcG9vbCAqbyk7CisKK3N0cnVjdCBvYmplY3RfbGlzdCB7CisJc3RydWN0IG9iamVjdCAqaXRlbTsKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm5leHQ7Cit9OworCitzdHJ1Y3Qgb2JqZWN0X2FycmF5IHsKKwl1bnNpZ25lZCBpbnQgbnI7CisJdW5zaWduZWQgaW50IGFsbG9jOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgeworCQlzdHJ1Y3Qgb2JqZWN0ICppdGVtOworCQkvKgorCQkgKiBuYW1lIG9yIE5VTEwuICBJZiBub24tTlVMTCwgdGhlIG1lbW9yeSBwb2ludGVkIHRvCisJCSAqIGlzIG93bmVkIGJ5IHRoaXMgb2JqZWN0ICpleGNlcHQqIGlmIGl0IHBvaW50cyBhdAorCQkgKiBvYmplY3RfYXJyYXlfc2xvcGJ1Ziwgd2hpY2ggaXMgYSBzdGF0aWMgY29weSBvZiB0aGUKKwkJICogZW1wdHkgc3RyaW5nLgorCQkgKi8KKwkJY2hhciAqbmFtZTsKKwkJY2hhciAqcGF0aDsKKwkJdW5zaWduZWQgbW9kZTsKKwl9ICpvYmplY3RzOworfTsKKworI2RlZmluZSBPQkpFQ1RfQVJSQVlfSU5JVCB7IDAsIDAsIE5VTEwgfQorCisvKgorICogb2JqZWN0IGZsYWcgYWxsb2NhdGlvbjoKKyAqIHJldmlzaW9uLmg6ICAgICAgICAgICAgICAgMC0tLS0tLS0tLTEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUtLS0tMjgKKyAqIGZldGNoLXBhY2suYzogICAgICAgICAgICAgMDEKKyAqIG5lZ290aWF0b3IvZGVmYXVsdC5jOiAgICAgICAyLS01CisgKiB3YWxrZXIuYzogICAgICAgICAgICAgICAgIDAtMgorICogdXBsb2FkLXBhY2suYzogICAgICAgICAgICAgICAgNCAgICAgICAxMS0tLS0tMTQgIDE2LS0tLS0xOQorICogYnVpbHRpbi9ibGFtZS5jOiAgICAgICAgICAgICAgICAgICAgICAgIDEyLTEzCisgKiBiaXNlY3QuYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyAqIGJ1bmRsZS5jOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorICogaHR0cC1wdXNoLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LS0tLS0xOQorICogY29tbWl0LWdyYXBoLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQorICogY29tbWl0LXJlYWNoLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LS0tLS0xOQorICogc2hhMS1uYW1lLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisgKiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorICogYnVpbHRpbi9mc2NrLmM6ICAgICAgICAgICAwLS0zCisgKiBidWlsdGluL2luZGV4LXBhY2suYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAyMQorICogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisgKiBidWlsdGluL3JlZmxvZy5jOiAgICAgICAgICAgICAgICAgICAxMC0tMTIKKyAqIGJ1aWx0aW4vc2hvdy1icmFuY2guYzogICAgMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yNgorICogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMjEKKyAqLworI2RlZmluZSBGTEFHX0JJVFMgIDI5CisKKy8qCisgKiBUaGUgb2JqZWN0IHR5cGUgaXMgc3RvcmVkIGluIDMgYml0cy4KKyAqLworc3RydWN0IG9iamVjdCB7CisJdW5zaWduZWQgcGFyc2VkIDogMTsKKwl1bnNpZ25lZCB0eXBlIDogVFlQRV9CSVRTOworCXVuc2lnbmVkIGZsYWdzIDogRkxBR19CSVRTOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworY29uc3QgY2hhciAqdHlwZV9uYW1lKHVuc2lnbmVkIGludCB0eXBlKTsKK2ludCB0eXBlX2Zyb21fc3RyaW5nX2dlbnRseShjb25zdCBjaGFyICpzdHIsIHNzaXplX3QsIGludCBnZW50bGUpOworI2RlZmluZSB0eXBlX2Zyb21fc3RyaW5nKHN0cikgdHlwZV9mcm9tX3N0cmluZ19nZW50bHkoc3RyLCAtMSwgMCkKKworLyoKKyAqIFJldHVybiB0aGUgY3VycmVudCBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgb2JqZWN0IGhhc2htYXAuCisgKi8KK3Vuc2lnbmVkIGludCBnZXRfbWF4X29iamVjdF9pbmRleCh2b2lkKTsKKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IGZyb20gdGhlIHNwZWNpZmllZCBidWNrZXQgaW4gdGhlIG9iamVjdCBoYXNobWFwLgorICovCitzdHJ1Y3Qgb2JqZWN0ICpnZXRfaW5kZXhlZF9vYmplY3QodW5zaWduZWQgaW50KTsKKworLyoKKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2VlIGlmIHdlIGhhdmUgaGVhcmQgb2YgdGhlIG9iamVjdCBiZWZvcmUsIGJ1dAorICogaXQgY2FuIHJldHVybiAieWVzIHdlIGhhdmUsIGFuZCBoZXJlIGlzIGEgaGFsZi1pbml0aWFsaXNlZCBvYmplY3QiCisgKiBmb3IgYW4gb2JqZWN0IHRoYXQgd2UgaGF2ZW4ndCBsb2FkZWQvcGFyc2VkIHlldC4KKyAqCisgKiBXaGVuIHBhcnNpbmcgYSBjb21taXQgdG8gY3JlYXRlIGFuIGluLWNvcmUgY29tbWl0IG9iamVjdCwgaXRzCisgKiBwYXJlbnRzIGxpc3QgaG9sZHMgY29tbWl0IG9iamVjdHMgdGhhdCByZXByZXNlbnQgaXRzIHBhcmVudHMsIGJ1dAorICogdGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgbGF6aWx5IGluaXRpYWxpemVkIGFuZCBkbyBub3Qga25vdyB3aGF0CisgKiB0aGVpciB0cmVlcyBvciBwYXJlbnRzIGFyZSB5ZXQuICBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzdWNoIGEKKyAqIGhhbGYtaW5pdGlhbGlzZWQgb2JqZWN0cywgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplIHRoZW0KKyAqIGJ5IGNhbGxpbmcgcGFyc2Vfb2JqZWN0KCkgb24gdGhlbS4KKyAqLworc3RydWN0IG9iamVjdCAqbG9va3VwX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKwordm9pZCAqY3JlYXRlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpvYmopOworCit2b2lkICpvYmplY3RfYXNfdHlwZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IG9iamVjdCAqb2JqLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGludCBxdWlldCk7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBvYmplY3QsIGhhdmluZyBwYXJzZWQgaXQgdG8gZmluZCBvdXQgd2hhdCBpdCBpcy4KKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIG9iamVjdCBpcyBtaXNzaW5nIG9yIGNvcnJ1cHQuCisgKi8KK3N0cnVjdCBvYmplY3QgKnBhcnNlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIExpa2UgcGFyc2Vfb2JqZWN0LCBidXQgd2lsbCBkaWUoKSBpbnN0ZWFkIG9mIHJldHVybmluZyBOVUxMLiBJZiB0aGUKKyAqICJuYW1lIiBwYXJhbWV0ZXIgaXMgbm90IE5VTEwsIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBlcnJvciBtZXNzYWdlCisgKiAob3RoZXJ3aXNlLCB0aGUgaGV4IG9iamVjdCBJRCBpcyBnaXZlbikuCisgKi8KK3N0cnVjdCBvYmplY3QgKnBhcnNlX29iamVjdF9vcl9kaWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpuYW1lKTsKKworLyogR2l2ZW4gdGhlIHJlc3VsdCBvZiByZWFkX3NoYTFfZmlsZSgpLCByZXR1cm5zIHRoZSBvYmplY3QgYWZ0ZXIKKyAqIHBhcnNpbmcgaXQuICBlYXRlbl9wIGluZGljYXRlcyBpZiB0aGUgb2JqZWN0IGhhcyBhIGJvcnJvd2VkIGNvcHkKKyAqIG9mIGJ1ZmZlciBhbmQgdGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUoKSBpdC4KKyAqLworc3RydWN0IG9iamVjdCAqcGFyc2Vfb2JqZWN0X2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqYnVmZmVyLCBpbnQgKmVhdGVuX3ApOworCisvKiogUmV0dXJucyB0aGUgb2JqZWN0LCB3aXRoIHBvdGVudGlhbGx5IGV4Y2VzcyBtZW1vcnkgYWxsb2NhdGVkLiAqKi8KK3N0cnVjdCBvYmplY3QgKmxvb2t1cF91bmtub3duX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm9iamVjdF9saXN0X2luc2VydChzdHJ1Y3Qgb2JqZWN0ICppdGVtLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipsaXN0X3ApOworCitpbnQgb2JqZWN0X2xpc3RfY29udGFpbnMoc3RydWN0IG9iamVjdF9saXN0ICpsaXN0LCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCit2b2lkIG9iamVjdF9saXN0X2ZyZWUoc3RydWN0IG9iamVjdF9saXN0ICoqbGlzdCk7CisKKy8qIE9iamVjdCBhcnJheSBoYW5kbGluZyAuLiAqLwordm9pZCBhZGRfb2JqZWN0X2FycmF5KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpOwordm9pZCBhZGRfb2JqZWN0X2FycmF5X3dpdGhfcGF0aChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5LCB1bnNpZ25lZCBtb2RlLCBjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgbGFzdCBvYmplY3QKKyAqIGFmdGVyIHJlbW92aW5nIGl0cyBlbnRyeSBmcm9tIHRoZSBhcnJheS4gT3RoZXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhhdCBvYmplY3QgYXJlIGxlZnQgaW4gYW4gdW5zcGVjaWZpZWQgc3RhdGUgYW5kIHNob3VsZCBub3QgYmUKKyAqIGV4YW1pbmVkLgorICovCitzdHJ1Y3Qgb2JqZWN0ICpvYmplY3RfYXJyYXlfcG9wKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KTsKKwordHlwZWRlZiBpbnQgKCpvYmplY3RfYXJyYXlfZWFjaF9mdW5jX3QpKHN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKiwgdm9pZCAqKTsKKworLyoKKyAqIEFwcGx5IHdhbnQgdG8gZWFjaCBlbnRyeSBpbiBhcnJheSwgcmV0YWluaW5nIG9ubHkgdGhlIGVudHJpZXMgZm9yCisgKiB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLiAgUHJlc2VydmUgdGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzCisgKiB0aGF0IGFyZSByZXRhaW5lZC4KKyAqLwordm9pZCBvYmplY3RfYXJyYXlfZmlsdGVyKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5LAorCQkJIG9iamVjdF9hcnJheV9lYWNoX2Z1bmNfdCB3YW50LCB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIFJlbW92ZSBmcm9tIGFycmF5IGFsbCBidXQgdGhlIGZpcnN0IGVudHJ5IHdpdGggYSBnaXZlbiBuYW1lLgorICogV2FybmluZzogdGhpcyBmdW5jdGlvbiB1c2VzIGFuIE8oTl4yKSBhbGdvcml0aG0uCisgKi8KK3ZvaWQgb2JqZWN0X2FycmF5X3JlbW92ZV9kdXBsaWNhdGVzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KTsKKworLyoKKyAqIFJlbW92ZSBhbnkgb2JqZWN0cyBmcm9tIHRoZSBhcnJheSwgZnJlZWluZyBhbGwgdXNlZCBtZW1vcnk7IGFmdGVyd2FyZHMKKyAqIHRoZSBhcnJheSBpcyByZWFkeSB0byBzdG9yZSBtb3JlIG9iamVjdHMgd2l0aCBhZGRfb2JqZWN0X2FycmF5KCkuCisgKi8KK3ZvaWQgb2JqZWN0X2FycmF5X2NsZWFyKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KTsKKwordm9pZCBjbGVhcl9vYmplY3RfZmxhZ3ModW5zaWduZWQgZmxhZ3MpOworCisvKgorICogQ2xlYXIgdGhlIHNwZWNpZmllZCBvYmplY3QgZmxhZ3MgZnJvbSBhbGwgaW4tY29yZSBjb21taXQgb2JqZWN0cy4KKyAqLwordm9pZCBjbGVhcl9jb21taXRfbWFya3NfYWxsKHVuc2lnbmVkIGludCBmbGFncyk7CisKKyNlbmRpZiAvKiBPQkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvb2lkbWFwLmMgYi9vaWRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjNhYTAxCi0tLSAvZGV2L251bGwKKysrIGIvb2lkbWFwLmMKQEAgLTAsMCArMSw2MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2lkbWFwLmgiCisKK3N0YXRpYyBpbnQgb2lkbWFwX25lcShjb25zdCB2b2lkICpoYXNobWFwX2NtcF9mbl9kYXRhLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZTEsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplMiwKKwkJICAgICAgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3Qgb2lkbWFwX2VudHJ5ICphLCAqYjsKKworCWEgPSBjb250YWluZXJfb2YoZTEsIGNvbnN0IHN0cnVjdCBvaWRtYXBfZW50cnksIGludGVybmFsX2VudHJ5KTsKKwliID0gY29udGFpbmVyX29mKGUyLCBjb25zdCBzdHJ1Y3Qgb2lkbWFwX2VudHJ5LCBpbnRlcm5hbF9lbnRyeSk7CisKKwlpZiAoa2V5ZGF0YSkKKwkJcmV0dXJuICFvaWRlcSgmYS0+b2lkLCAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKSBrZXlkYXRhKTsKKwlyZXR1cm4gIW9pZGVxKCZhLT5vaWQsICZiLT5vaWQpOworfQorCit2b2lkIG9pZG1hcF9pbml0KHN0cnVjdCBvaWRtYXAgKm1hcCwgc2l6ZV90IGluaXRpYWxfc2l6ZSkKK3sKKwloYXNobWFwX2luaXQoJm1hcC0+bWFwLCBvaWRtYXBfbmVxLCBOVUxMLCBpbml0aWFsX3NpemUpOworfQorCit2b2lkIG9pZG1hcF9mcmVlKHN0cnVjdCBvaWRtYXAgKm1hcCwgaW50IGZyZWVfZW50cmllcykKK3sKKwlpZiAoIW1hcCkKKwkJcmV0dXJuOworCisJLyogVE9ETzogbWFrZSBvaWRtYXAgaXRzZWxmIG5vdCBkZXBlbmQgb24gc3RydWN0IGxheW91dHMgKi8KKwloYXNobWFwX2ZyZWVfKCZtYXAtPm1hcCwgZnJlZV9lbnRyaWVzID8gMCA6IC0xKTsKK30KKwordm9pZCAqb2lkbWFwX2dldChjb25zdCBzdHJ1Y3Qgb2lkbWFwICptYXAsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmtleSkKK3sKKwlpZiAoIW1hcC0+bWFwLmNtcGZuKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBoYXNobWFwX2dldF9mcm9tX2hhc2goJm1hcC0+bWFwLCBvaWRoYXNoKGtleSksIGtleSk7Cit9CisKK3ZvaWQgKm9pZG1hcF9yZW1vdmUoc3RydWN0IG9pZG1hcCAqbWFwLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICprZXkpCit7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnk7CisKKwlpZiAoIW1hcC0+bWFwLmNtcGZuKQorCQlvaWRtYXBfaW5pdChtYXAsIDApOworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeSwgb2lkaGFzaChrZXkpKTsKKwlyZXR1cm4gaGFzaG1hcF9yZW1vdmUoJm1hcC0+bWFwLCAmZW50cnksIGtleSk7Cit9CisKK3ZvaWQgKm9pZG1hcF9wdXQoc3RydWN0IG9pZG1hcCAqbWFwLCB2b2lkICplbnRyeSkKK3sKKwlzdHJ1Y3Qgb2lkbWFwX2VudHJ5ICp0b19wdXQgPSBlbnRyeTsKKworCWlmICghbWFwLT5tYXAuY21wZm4pCisJCW9pZG1hcF9pbml0KG1hcCwgMCk7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJnRvX3B1dC0+aW50ZXJuYWxfZW50cnksIG9pZGhhc2goJnRvX3B1dC0+b2lkKSk7CisJcmV0dXJuIGhhc2htYXBfcHV0KCZtYXAtPm1hcCwgJnRvX3B1dC0+aW50ZXJuYWxfZW50cnkpOworfQpkaWZmIC0tZ2l0IGEvb2lkbWFwLmggYi9vaWRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjZhODNhCi0tLSAvZGV2L251bGwKKysrIGIvb2lkbWFwLmgKQEAgLTAsMCArMSw5MyBAQAorI2lmbmRlZiBPSURNQVBfSAorI2RlZmluZSBPSURNQVBfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisKKy8qCisgKiBzdHJ1Y3Qgb2lkbWFwX2VudHJ5IGlzIGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhbiBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSwKKyAqIHdoaWNoIG11c3QgYmUgdXNlZCBhcyBmaXJzdCBtZW1iZXIgb2YgdXNlciBkYXRhIHN0cnVjdHVyZXMuCisgKgorICogVXNlcnMgc2hvdWxkIHNldCB0aGUgb2lkIGZpZWxkLiBvaWRtYXBfcHV0KCkgd2lsbCBwb3B1bGF0ZSB0aGUKKyAqIGludGVybmFsX2VudHJ5IGZpZWxkLgorICovCitzdHJ1Y3Qgb2lkbWFwX2VudHJ5IHsKKwkvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkgKi8KKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBpbnRlcm5hbF9lbnRyeTsKKworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworc3RydWN0IG9pZG1hcCB7CisJc3RydWN0IGhhc2htYXAgbWFwOworfTsKKworI2RlZmluZSBPSURNQVBfSU5JVCB7IHsgTlVMTCB9IH0KKworLyoKKyAqIEluaXRpYWxpemVzIGFuIG9pZG1hcCBzdHJ1Y3R1cmUuCisgKgorICogYG1hcGAgaXMgdGhlIG9pZG1hcCB0byBpbml0aWFsaXplLgorICoKKyAqIElmIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpcyBrbm93biBpbiBhZHZhbmNlLCB0aGUgYGluaXRpYWxfc2l6ZWAKKyAqIHBhcmFtZXRlciBtYXkgYmUgdXNlZCB0byBwcmVhbGxvY2F0ZSBhIHN1ZmZpY2llbnRseSBsYXJnZSB0YWJsZSBhbmQgdGh1cworICogcHJldmVudCBleHBlbnNpdmUgcmVzaXppbmcuIElmIDAsIHRoZSB0YWJsZSBpcyBkeW5hbWljYWxseSByZXNpemVkLgorICovCit2b2lkIG9pZG1hcF9pbml0KHN0cnVjdCBvaWRtYXAgKm1hcCwgc2l6ZV90IGluaXRpYWxfc2l6ZSk7CisKKy8qCisgKiBGcmVlcyBhbiBvaWRtYXAgc3RydWN0dXJlIGFuZCBhbGxvY2F0ZWQgbWVtb3J5LgorICoKKyAqIElmIGBmcmVlX2VudHJpZXNgIGlzIHRydWUsIGVhY2ggb2lkbWFwX2VudHJ5IGluIHRoZSBtYXAgaXMgZnJlZWQgYXMgd2VsbAorICogdXNpbmcgc3RkbGlicyBmcmVlKCkuCisgKi8KK3ZvaWQgb2lkbWFwX2ZyZWUoc3RydWN0IG9pZG1hcCAqbWFwLCBpbnQgZnJlZV9lbnRyaWVzKTsKKworLyoKKyAqIFJldHVybnMgdGhlIG9pZG1hcCBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBvaWQsIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICovCit2b2lkICpvaWRtYXBfZ2V0KGNvbnN0IHN0cnVjdCBvaWRtYXAgKm1hcCwKKwkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmtleSk7CisKKy8qCisgKiBBZGRzIG9yIHJlcGxhY2VzIGFuIG9pZG1hcCBlbnRyeS4KKyAqCisgKiAoKHN0cnVjdCBvaWRtYXBfZW50cnkgKikgZW50cnkpLT5pbnRlcm5hbF9lbnRyeSB3aWxsIGJlIHBvcHVsYXRlZCBieSB0aGlzCisgKiBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zIHRoZSByZXBsYWNlZCBlbnRyeSwgb3IgTlVMTCBpZiBub3QgZm91bmQgKGkuZS4gdGhlIGVudHJ5IHdhcyBhZGRlZCkuCisgKi8KK3ZvaWQgKm9pZG1hcF9wdXQoc3RydWN0IG9pZG1hcCAqbWFwLCB2b2lkICplbnRyeSk7CisKKy8qCisgKiBSZW1vdmVzIGFuIG9pZG1hcCBlbnRyeSBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIG9pZC4KKyAqCisgKiBSZXR1cm5zIHRoZSByZW1vdmVkIGVudHJ5LCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLwordm9pZCAqb2lkbWFwX3JlbW92ZShzdHJ1Y3Qgb2lkbWFwICptYXAsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmtleSk7CisKKworc3RydWN0IG9pZG1hcF9pdGVyIHsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGhfaXRlcjsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaWRtYXBfaXRlcl9pbml0KHN0cnVjdCBvaWRtYXAgKm1hcCwgc3RydWN0IG9pZG1hcF9pdGVyICppdGVyKQoreworCWhhc2htYXBfaXRlcl9pbml0KCZtYXAtPm1hcCwgJml0ZXItPmhfaXRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqb2lkbWFwX2l0ZXJfbmV4dChzdHJ1Y3Qgb2lkbWFwX2l0ZXIgKml0ZXIpCit7CisJLyogVE9ETzogdGhpcyBBUEkgY291bGQgYmUgcmV3b3JrZWQgdG8gZG8gY29tcGlsZS10aW1lIHR5cGUgY2hlY2tzICovCisJcmV0dXJuICh2b2lkICopaGFzaG1hcF9pdGVyX25leHQoJml0ZXItPmhfaXRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqb2lkbWFwX2l0ZXJfZmlyc3Qoc3RydWN0IG9pZG1hcCAqbWFwLAorCQkJCSAgICAgIHN0cnVjdCBvaWRtYXBfaXRlciAqaXRlcikKK3sKKwlvaWRtYXBfaXRlcl9pbml0KG1hcCwgaXRlcik7CisJLyogVE9ETzogdGhpcyBBUEkgY291bGQgYmUgcmV3b3JrZWQgdG8gZG8gY29tcGlsZS10aW1lIHR5cGUgY2hlY2tzICovCisJcmV0dXJuICh2b2lkICopb2lkbWFwX2l0ZXJfbmV4dChpdGVyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9vaWRzZXQuYyBiL29pZHNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2M2NlODEKLS0tIC9kZXYvbnVsbAorKysgYi9vaWRzZXQuYwpAQCAtMCwwICsxLDcyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvaWRzZXQuaCIKKwordm9pZCBvaWRzZXRfaW5pdChzdHJ1Y3Qgb2lkc2V0ICpzZXQsIHNpemVfdCBpbml0aWFsX3NpemUpCit7CisJbWVtc2V0KCZzZXQtPnNldCwgMCwgc2l6ZW9mKHNldC0+c2V0KSk7CisJaWYgKGluaXRpYWxfc2l6ZSkKKwkJa2hfcmVzaXplX29pZF9zZXQoJnNldC0+c2V0LCBpbml0aWFsX3NpemUpOworfQorCitpbnQgb2lkc2V0X2NvbnRhaW5zKGNvbnN0IHN0cnVjdCBvaWRzZXQgKnNldCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWRfc2V0KCZzZXQtPnNldCwgKm9pZCk7CisJcmV0dXJuIHBvcyAhPSBraF9lbmQoJnNldC0+c2V0KTsKK30KKworaW50IG9pZHNldF9pbnNlcnQoc3RydWN0IG9pZHNldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IGFkZGVkOworCWtoX3B1dF9vaWRfc2V0KCZzZXQtPnNldCwgKm9pZCwgJmFkZGVkKTsKKwlyZXR1cm4gIWFkZGVkOworfQorCitpbnQgb2lkc2V0X3JlbW92ZShzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlraGl0ZXJfdCBwb3MgPSBraF9nZXRfb2lkX3NldCgmc2V0LT5zZXQsICpvaWQpOworCWlmIChwb3MgPT0ga2hfZW5kKCZzZXQtPnNldCkpCisJCXJldHVybiAwOworCWtoX2RlbF9vaWRfc2V0KCZzZXQtPnNldCwgcG9zKTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBvaWRzZXRfY2xlYXIoc3RydWN0IG9pZHNldCAqc2V0KQoreworCWtoX3JlbGVhc2Vfb2lkX3NldCgmc2V0LT5zZXQpOworCW9pZHNldF9pbml0KHNldCwgMCk7Cit9CisKK3ZvaWQgb2lkc2V0X3BhcnNlX2ZpbGUoc3RydWN0IG9pZHNldCAqc2V0LCBjb25zdCBjaGFyICpwYXRoKQoreworCUZJTEUgKmZwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCWZwID0gZm9wZW4ocGF0aCwgInIiKTsKKwlpZiAoIWZwKQorCQlkaWUoImNvdWxkIG5vdCBvcGVuIG9iamVjdCBuYW1lIGxpc3Q6ICVzIiwgcGF0aCk7CisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZSgmc2IsIGZwKSkgeworCQljb25zdCBjaGFyICpwOworCQljb25zdCBjaGFyICpuYW1lOworCisJCS8qCisJCSAqIEFsbG93IHRyYWlsaW5nIGNvbW1lbnRzLCBsZWFkaW5nIHdoaXRlc3BhY2UKKwkJICogKGluY2x1ZGluZyBiZWZvcmUgY29tbWl0cyksIGFuZCBlbXB0eSBvciB3aGl0ZXNwYWNlCisJCSAqIG9ubHkgbGluZXMuCisJCSAqLworCQluYW1lID0gc3RyY2hyKHNiLmJ1ZiwgJyMnKTsKKwkJaWYgKG5hbWUpCisJCQlzdHJidWZfc2V0bGVuKCZzYiwgbmFtZSAtIHNiLmJ1Zik7CisJCXN0cmJ1Zl90cmltKCZzYik7CisJCWlmICghc2IubGVuKQorCQkJY29udGludWU7CisKKwkJaWYgKHBhcnNlX29pZF9oZXgoc2IuYnVmLCAmb2lkLCAmcCkgfHwgKnAgIT0gJ1wwJykKKwkJCWRpZSgiaW52YWxpZCBvYmplY3QgbmFtZTogJXMiLCBzYi5idWYpOworCQlvaWRzZXRfaW5zZXJ0KHNldCwgJm9pZCk7CisJfQorCWlmIChmZXJyb3IoZnApKQorCQlkaWVfZXJybm8oIkNvdWxkIG5vdCByZWFkICclcyciLCBwYXRoKTsKKwlmY2xvc2UoZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CmRpZmYgLS1naXQgYS9vaWRzZXQuaCBiL29pZHNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNDY1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9vaWRzZXQuaApAQCAtMCwwICsxLDEwMCBAQAorI2lmbmRlZiBPSURTRVRfSAorI2RlZmluZSBPSURTRVRfSAorCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgImtoYXNoLmgiCisKKy8qKgorICogVGhpcyBBUEkgaXMgc2ltaWxhciB0byBzaGExLWFycmF5LCBpbiB0aGF0IGl0IG1haW50YWlucyBhIHNldCBvZiBvYmplY3QgaWRzCisgKiBpbiBhIG1lbW9yeS1lZmZpY2llbnQgd2F5LiBUaGUgbWFqb3IgZGlmZmVyZW5jZXMgYXJlOgorICoKKyAqICAgMS4gSXQgdXNlcyBhIGhhc2gsIHNvIHdlIGNhbiBkbyBvbmxpbmUgZHVwbGljYXRlIHJlbW92YWwsIHJhdGhlciB0aGFuCisgKiAgICAgIHNvcnQtYW5kLXVuaXEgYXQgdGhlIGVuZC4gVGhpcyBjYW4gcmVkdWNlIG1lbW9yeSBmb290cHJpbnQgaWYgeW91IGhhdmUKKyAqICAgICAgYSBsYXJnZSBsaXN0IG9mIG9pZHMgd2l0aCBtYW55IGR1cGxpY2F0ZXMuCisgKgorICogICAyLiBUaGUgcGVyLXVuaXF1ZS1vaWQgbWVtb3J5IGZvb3RwcmludCBpcyBzbGlnaHRseSBoaWdoZXIgZHVlIHRvIGhhc2gKKyAqICAgICAgdGFibGUgb3ZlcmhlYWQuCisgKi8KKworLyoqCisgKiBBIHNpbmdsZSBvaWRzZXQ7IHNob3VsZCBiZSB6ZXJvLWluaXRpYWxpemVkIChvciB1c2UgT0lEU0VUX0lOSVQpLgorICovCitzdHJ1Y3Qgb2lkc2V0IHsKKwlraF9vaWRfc2V0X3Qgc2V0OworfTsKKworI2RlZmluZSBPSURTRVRfSU5JVCB7IHsgMCB9IH0KKworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIG9pZHNldCBzdHJ1Y3R1cmUgYHNldGAuCisgKgorICogSWYgYGluaXRpYWxfc2l6ZWAgaXMgYmlnZ2VyIHRoYW4gMCB0aGVuIHByZWFsbG9jYXRlIHRvIGFsbG93IGluc2VydGluZworICogdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMgd2l0aG91dCBmdXJ0aGVyIGFsbG9jYXRpb25zLgorICovCit2b2lkIG9pZHNldF9pbml0KHN0cnVjdCBvaWRzZXQgKnNldCwgc2l6ZV90IGluaXRpYWxfc2l6ZSk7CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlmZiBgc2V0YCBjb250YWlucyBgb2lkYC4KKyAqLworaW50IG9pZHNldF9jb250YWlucyhjb25zdCBzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qKgorICogSW5zZXJ0IHRoZSBvaWQgaW50byB0aGUgc2V0OyBhIGNvcHkgaXMgbWFkZSwgc28gIm9pZCIgZG9lcyBub3QgbmVlZAorICogdG8gcGVyc2lzdCBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIG9pZCB3YXMgYWxyZWFkeSBpbiB0aGUgc2V0LCAwIG90aGVyd2lzZS4gVGhpcyBjYW4gYmUgdXNlZAorICogdG8gcGVyZm9ybSBhbiBlZmZpY2llbnQgY2hlY2stYW5kLWFkZC4KKyAqLworaW50IG9pZHNldF9pbnNlcnQoc3RydWN0IG9pZHNldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisvKioKKyAqIFJlbW92ZSB0aGUgb2lkIGZyb20gdGhlIHNldC4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIG9pZCB3YXMgcHJlc2VudCBpbiB0aGUgc2V0LCAwIG90aGVyd2lzZS4KKyAqLworaW50IG9pZHNldF9yZW1vdmUoc3RydWN0IG9pZHNldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisvKioKKyAqIFJlbW92ZSBhbGwgZW50cmllcyBmcm9tIHRoZSBvaWRzZXQsIGZyZWVpbmcgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGgKKyAqIGl0LgorICovCit2b2lkIG9pZHNldF9jbGVhcihzdHJ1Y3Qgb2lkc2V0ICpzZXQpOworCisvKioKKyAqIEFkZCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgJ3BhdGgnIHRvIGFuIGluaXRpYWxpemVkIG9pZHNldC4gIEVhY2ggbGluZSBpcworICogYW4gdW5hYmJyZXZpYXRlZCBvYmplY3QgbmFtZS4gIENvbW1lbnRzIGJlZ2luIHdpdGggJyMnLCBhbmQgdHJhaWxpbmcgY29tbWVudHMKKyAqIGFyZSBhbGxvd2VkLiAgTGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBlbXB0eSBvciB3aGl0ZS1zcGFjZSBvbmx5IGxpbmVzIGFyZQorICogaWdub3JlZC4KKyAqLwordm9pZCBvaWRzZXRfcGFyc2VfZmlsZShzdHJ1Y3Qgb2lkc2V0ICpzZXQsIGNvbnN0IGNoYXIgKnBhdGgpOworCitzdHJ1Y3Qgb2lkc2V0X2l0ZXIgeworCWtoX29pZF9zZXRfdCAqc2V0OworCWtoaXRlcl90IGl0ZXI7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb2lkc2V0X2l0ZXJfaW5pdChzdHJ1Y3Qgb2lkc2V0ICpzZXQsCisJCQkJICAgIHN0cnVjdCBvaWRzZXRfaXRlciAqaXRlcikKK3sKKwlpdGVyLT5zZXQgPSAmc2V0LT5zZXQ7CisJaXRlci0+aXRlciA9IGtoX2JlZ2luKGl0ZXItPnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9iamVjdF9pZCAqb2lkc2V0X2l0ZXJfbmV4dChzdHJ1Y3Qgb2lkc2V0X2l0ZXIgKml0ZXIpCit7CisJZm9yICg7IGl0ZXItPml0ZXIgIT0ga2hfZW5kKGl0ZXItPnNldCk7IGl0ZXItPml0ZXIrKykgeworCQlpZiAoa2hfZXhpc3QoaXRlci0+c2V0LCBpdGVyLT5pdGVyKSkKKwkJCXJldHVybiAma2hfa2V5KGl0ZXItPnNldCwgaXRlci0+aXRlcisrKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9iamVjdF9pZCAqb2lkc2V0X2l0ZXJfZmlyc3Qoc3RydWN0IG9pZHNldCAqc2V0LAorCQkJCQkJICBzdHJ1Y3Qgb2lkc2V0X2l0ZXIgKml0ZXIpCit7CisJb2lkc2V0X2l0ZXJfaW5pdChzZXQsIGl0ZXIpOworCXJldHVybiBvaWRzZXRfaXRlcl9uZXh0KGl0ZXIpOworfQorCisjZW5kaWYgLyogT0lEU0VUX0ggKi8KZGlmZiAtLWdpdCBhL3BhY2stYml0bWFwLXdyaXRlLmMgYi9wYWNrLWJpdG1hcC13cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTQ5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLWJpdG1hcC13cml0ZS5jCkBAIC0wLDAgKzEsNTU3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1iaXRtYXAuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgInBhY2stb2JqZWN0cy5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorCitzdHJ1Y3QgYml0bWFwcGVkX2NvbW1pdCB7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBld2FoX2JpdG1hcCAqYml0bWFwOworCXN0cnVjdCBld2FoX2JpdG1hcCAqd3JpdGVfYXM7CisJaW50IGZsYWdzOworCWludCB4b3Jfb2Zmc2V0OworCXVpbnQzMl90IGNvbW1pdF9wb3M7Cit9OworCitzdHJ1Y3QgYml0bWFwX3dyaXRlciB7CisJc3RydWN0IGV3YWhfYml0bWFwICpjb21taXRzOworCXN0cnVjdCBld2FoX2JpdG1hcCAqdHJlZXM7CisJc3RydWN0IGV3YWhfYml0bWFwICpibG9iczsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnRhZ3M7CisKKwlraF9vaWRfbWFwX3QgKmJpdG1hcHM7CisJa2hfb2lkX21hcF90ICpyZXVzZWQ7CisJc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjazsKKworCXN0cnVjdCBiaXRtYXBwZWRfY29tbWl0ICpzZWxlY3RlZDsKKwl1bnNpZ25lZCBpbnQgc2VsZWN0ZWRfbnIsIHNlbGVjdGVkX2FsbG9jOworCisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKwlpbnQgc2hvd19wcm9ncmVzczsKKwl1bnNpZ25lZCBjaGFyIHBhY2tfY2hlY2tzdW1bR0lUX01BWF9SQVdTWl07Cit9OworCitzdGF0aWMgc3RydWN0IGJpdG1hcF93cml0ZXIgd3JpdGVyOworCit2b2lkIGJpdG1hcF93cml0ZXJfc2hvd19wcm9ncmVzcyhpbnQgc2hvdykKK3sKKwl3cml0ZXIuc2hvd19wcm9ncmVzcyA9IHNob3c7Cit9CisKKy8qKgorICogQnVpbGQgdGhlIGluaXRpYWwgdHlwZSBpbmRleCBmb3IgdGhlIHBhY2tmaWxlCisgKi8KK3ZvaWQgYml0bWFwX3dyaXRlcl9idWlsZF90eXBlX2luZGV4KHN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2ssCisJCQkJICAgIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmluZGV4LAorCQkJCSAgICB1aW50MzJfdCBpbmRleF9ucikKK3sKKwl1aW50MzJfdCBpOworCisJd3JpdGVyLmNvbW1pdHMgPSBld2FoX25ldygpOworCXdyaXRlci50cmVlcyA9IGV3YWhfbmV3KCk7CisJd3JpdGVyLmJsb2JzID0gZXdhaF9uZXcoKTsKKwl3cml0ZXIudGFncyA9IGV3YWhfbmV3KCk7CisJQUxMT0NfQVJSQVkodG9fcGFjay0+aW5fcGFja19wb3MsIHRvX3BhY2stPm5yX29iamVjdHMpOworCisJZm9yIChpID0gMDsgaSA8IGluZGV4X25yOyArK2kpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSAoc3RydWN0IG9iamVjdF9lbnRyeSAqKWluZGV4W2ldOworCQllbnVtIG9iamVjdF90eXBlIHJlYWxfdHlwZTsKKworCQlvZV9zZXRfaW5fcGFja19wb3ModG9fcGFjaywgZW50cnksIGkpOworCisJCXN3aXRjaCAob2VfdHlwZShlbnRyeSkpIHsKKwkJY2FzZSBPQkpfQ09NTUlUOgorCQljYXNlIE9CSl9UUkVFOgorCQljYXNlIE9CSl9CTE9COgorCQljYXNlIE9CSl9UQUc6CisJCQlyZWFsX3R5cGUgPSBvZV90eXBlKGVudHJ5KTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZWFsX3R5cGUgPSBvaWRfb2JqZWN0X2luZm8odG9fcGFjay0+cmVwbywKKwkJCQkJCSAgICAmZW50cnktPmlkeC5vaWQsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHJlYWxfdHlwZSkgeworCQljYXNlIE9CSl9DT01NSVQ6CisJCQlld2FoX3NldCh3cml0ZXIuY29tbWl0cywgaSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSl9UUkVFOgorCQkJZXdhaF9zZXQod3JpdGVyLnRyZWVzLCBpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKX0JMT0I6CisJCQlld2FoX3NldCh3cml0ZXIuYmxvYnMsIGkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpfVEFHOgorCQkJZXdhaF9zZXQod3JpdGVyLnRhZ3MsIGkpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRpZSgiTWlzc2luZyB0eXBlIGluZm9ybWF0aW9uIGZvciAlcyAoJWQvJWQpIiwKKwkJCSAgICBvaWRfdG9faGV4KCZlbnRyeS0+aWR4Lm9pZCksIHJlYWxfdHlwZSwKKwkJCSAgICBvZV90eXBlKGVudHJ5KSk7CisJCX0KKwl9Cit9CisKKy8qKgorICogQ29tcHV0ZSB0aGUgYWN0dWFsIGJpdG1hcHMKKyAqLworc3RhdGljIHN0cnVjdCBvYmplY3QgKipzZWVuX29iamVjdHM7CitzdGF0aWMgdW5zaWduZWQgaW50IHNlZW5fb2JqZWN0c19uciwgc2Vlbl9vYmplY3RzX2FsbG9jOworCitzdGF0aWMgaW5saW5lIHZvaWQgcHVzaF9iaXRtYXBwZWRfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGV3YWhfYml0bWFwICpyZXVzZWQpCit7CisJaWYgKHdyaXRlci5zZWxlY3RlZF9uciA+PSB3cml0ZXIuc2VsZWN0ZWRfYWxsb2MpIHsKKwkJd3JpdGVyLnNlbGVjdGVkX2FsbG9jID0gKHdyaXRlci5zZWxlY3RlZF9hbGxvYyArIDMyKSAqIDI7CisJCVJFQUxMT0NfQVJSQVkod3JpdGVyLnNlbGVjdGVkLCB3cml0ZXIuc2VsZWN0ZWRfYWxsb2MpOworCX0KKworCXdyaXRlci5zZWxlY3RlZFt3cml0ZXIuc2VsZWN0ZWRfbnJdLmNvbW1pdCA9IGNvbW1pdDsKKwl3cml0ZXIuc2VsZWN0ZWRbd3JpdGVyLnNlbGVjdGVkX25yXS5iaXRtYXAgPSByZXVzZWQ7CisJd3JpdGVyLnNlbGVjdGVkW3dyaXRlci5zZWxlY3RlZF9ucl0uZmxhZ3MgPSAwOworCisJd3JpdGVyLnNlbGVjdGVkX25yKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2FzX3NlZW4oc3RydWN0IG9iamVjdCAqb2JqZWN0KQoreworCUFMTE9DX0dST1coc2Vlbl9vYmplY3RzLCBzZWVuX29iamVjdHNfbnIgKyAxLCBzZWVuX29iamVjdHNfYWxsb2MpOworCXNlZW5fb2JqZWN0c1tzZWVuX29iamVjdHNfbnIrK10gPSBvYmplY3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9hbGxfc2Vlbih2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBzZWVuX29iamVjdHNfbnI7ICsraSkgeworCQlzZWVuX29iamVjdHNbaV0tPmZsYWdzICY9IH4oU0VFTiB8IEFEREVEIHwgU0hPV04pOworCX0KKwlzZWVuX29iamVjdHNfbnIgPSAwOworfQorCitzdGF0aWMgdWludDMyX3QgZmluZF9vYmplY3RfcG9zKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IHBhY2tsaXN0X2ZpbmQod3JpdGVyLnRvX3BhY2ssIG9pZCk7CisKKwlpZiAoIWVudHJ5KSB7CisJCWRpZSgiRmFpbGVkIHRvIHdyaXRlIGJpdG1hcCBpbmRleC4gUGFja2ZpbGUgZG9lc24ndCBoYXZlIGZ1bGwgY2xvc3VyZSAiCisJCQkiKG9iamVjdCAlcyBpcyBtaXNzaW5nKSIsIG9pZF90b19oZXgob2lkKSk7CisJfQorCisJcmV0dXJuIG9lX2luX3BhY2tfcG9zKHdyaXRlci50b19wYWNrLCBlbnRyeSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYml0bWFwICpiYXNlID0gZGF0YTsKKwliaXRtYXBfc2V0KGJhc2UsIGZpbmRfb2JqZWN0X3Bvcygmb2JqZWN0LT5vaWQpKTsKKwltYXJrX2FzX3NlZW4ob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKQoreworCW1hcmtfYXNfc2Vlbigoc3RydWN0IG9iamVjdCAqKWNvbW1pdCk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZF90b19pbmNsdWRlX3NldChzdHJ1Y3QgYml0bWFwICpiYXNlLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJa2hpdGVyX3QgaGFzaF9wb3M7CisJdWludDMyX3QgYml0bWFwX3BvcyA9IGZpbmRfb2JqZWN0X3BvcygmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCWlmIChiaXRtYXBfZ2V0KGJhc2UsIGJpdG1hcF9wb3MpKQorCQlyZXR1cm4gMDsKKworCWhhc2hfcG9zID0ga2hfZ2V0X29pZF9tYXAod3JpdGVyLmJpdG1hcHMsIGNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJaWYgKGhhc2hfcG9zIDwga2hfZW5kKHdyaXRlci5iaXRtYXBzKSkgeworCQlzdHJ1Y3QgYml0bWFwcGVkX2NvbW1pdCAqYmMgPSBraF92YWx1ZSh3cml0ZXIuYml0bWFwcywgaGFzaF9wb3MpOworCQliaXRtYXBfb3JfZXdhaChiYXNlLCBiYy0+Yml0bWFwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYml0bWFwX3NldChiYXNlLCBiaXRtYXBfcG9zKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2hvdWxkX2luY2x1ZGUoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpfZGF0YSkKK3sKKwlzdHJ1Y3QgYml0bWFwICpiYXNlID0gX2RhdGE7CisKKwlpZiAoIWFkZF90b19pbmNsdWRlX3NldChiYXNlLCBjb21taXQpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOworCisJCW1hcmtfYXNfc2Vlbigoc3RydWN0IG9iamVjdCAqKWNvbW1pdCk7CisKKwkJd2hpbGUgKHBhcmVudCkgeworCQkJcGFyZW50LT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCW1hcmtfYXNfc2Vlbigoc3RydWN0IG9iamVjdCAqKXBhcmVudC0+aXRlbSk7CisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZV94b3Jfb2Zmc2V0cyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBpbnQgTUFYX1hPUl9PRkZTRVRfU0VBUkNIID0gMTA7CisKKwlpbnQgaSwgbmV4dCA9IDA7CisKKwl3aGlsZSAobmV4dCA8IHdyaXRlci5zZWxlY3RlZF9ucikgeworCQlzdHJ1Y3QgYml0bWFwcGVkX2NvbW1pdCAqc3RvcmVkID0gJndyaXRlci5zZWxlY3RlZFtuZXh0XTsKKworCQlpbnQgYmVzdF9vZmZzZXQgPSAwOworCQlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJlc3RfYml0bWFwID0gc3RvcmVkLT5iaXRtYXA7CisJCXN0cnVjdCBld2FoX2JpdG1hcCAqdGVzdF94b3I7CisKKwkJZm9yIChpID0gMTsgaSA8PSBNQVhfWE9SX09GRlNFVF9TRUFSQ0g7ICsraSkgeworCQkJaW50IGN1cnIgPSBuZXh0IC0gaTsKKworCQkJaWYgKGN1cnIgPCAwKQorCQkJCWJyZWFrOworCisJCQl0ZXN0X3hvciA9IGV3YWhfcG9vbF9uZXcoKTsKKwkJCWV3YWhfeG9yKHdyaXRlci5zZWxlY3RlZFtjdXJyXS5iaXRtYXAsIHN0b3JlZC0+Yml0bWFwLCB0ZXN0X3hvcik7CisKKwkJCWlmICh0ZXN0X3hvci0+YnVmZmVyX3NpemUgPCBiZXN0X2JpdG1hcC0+YnVmZmVyX3NpemUpIHsKKwkJCQlpZiAoYmVzdF9iaXRtYXAgIT0gc3RvcmVkLT5iaXRtYXApCisJCQkJCWV3YWhfcG9vbF9mcmVlKGJlc3RfYml0bWFwKTsKKworCQkJCWJlc3RfYml0bWFwID0gdGVzdF94b3I7CisJCQkJYmVzdF9vZmZzZXQgPSBpOworCQkJfSBlbHNlIHsKKwkJCQlld2FoX3Bvb2xfZnJlZSh0ZXN0X3hvcik7CisJCQl9CisJCX0KKworCQlzdG9yZWQtPnhvcl9vZmZzZXQgPSBiZXN0X29mZnNldDsKKwkJc3RvcmVkLT53cml0ZV9hcyA9IGJlc3RfYml0bWFwOworCisJCW5leHQrKzsKKwl9Cit9CisKK3ZvaWQgYml0bWFwX3dyaXRlcl9idWlsZChzdHJ1Y3QgcGFja2luZ19kYXRhICp0b19wYWNrKQoreworCXN0YXRpYyBjb25zdCBkb3VibGUgUkVVU0VfQklUTUFQX1RIUkVTSE9MRCA9IDAuMjsKKworCWludCBpLCByZXVzZV9hZnRlciwgbmVlZF9yZXNldDsKKwlzdHJ1Y3QgYml0bWFwICpiYXNlID0gYml0bWFwX25ldygpOworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCisJd3JpdGVyLmJpdG1hcHMgPSBraF9pbml0X29pZF9tYXAoKTsKKwl3cml0ZXIudG9fcGFjayA9IHRvX3BhY2s7CisKKwlpZiAod3JpdGVyLnNob3dfcHJvZ3Jlc3MpCisJCXdyaXRlci5wcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKCJCdWlsZGluZyBiaXRtYXBzIiwgd3JpdGVyLnNlbGVjdGVkX25yKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModG9fcGFjay0+cmVwbywgJnJldnMsIE5VTEwpOworCXJldnMudGFnX29iamVjdHMgPSAxOworCXJldnMudHJlZV9vYmplY3RzID0gMTsKKwlyZXZzLmJsb2Jfb2JqZWN0cyA9IDE7CisJcmV2cy5ub193YWxrID0gMDsKKworCXJldnMuaW5jbHVkZV9jaGVjayA9IHNob3VsZF9pbmNsdWRlOworCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKKworCXJldXNlX2FmdGVyID0gd3JpdGVyLnNlbGVjdGVkX25yICogUkVVU0VfQklUTUFQX1RIUkVTSE9MRDsKKwluZWVkX3Jlc2V0ID0gMDsKKworCWZvciAoaSA9IHdyaXRlci5zZWxlY3RlZF9uciAtIDE7IGkgPj0gMDsgLS1pKSB7CisJCXN0cnVjdCBiaXRtYXBwZWRfY29tbWl0ICpzdG9yZWQ7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKworCQlraGl0ZXJfdCBoYXNoX3BvczsKKwkJaW50IGhhc2hfcmV0OworCisJCXN0b3JlZCA9ICZ3cml0ZXIuc2VsZWN0ZWRbaV07CisJCW9iamVjdCA9IChzdHJ1Y3Qgb2JqZWN0ICopc3RvcmVkLT5jb21taXQ7CisKKwkJaWYgKHN0b3JlZC0+Yml0bWFwID09IE5VTEwpIHsKKwkJCWlmIChpIDwgd3JpdGVyLnNlbGVjdGVkX25yIC0gMSAmJgorCQkJICAgIChuZWVkX3Jlc2V0IHx8CisJCQkgICAgICFpbl9tZXJnZV9iYXNlcyh3cml0ZXIuc2VsZWN0ZWRbaSArIDFdLmNvbW1pdCwKKwkJCQkJICAgICBzdG9yZWQtPmNvbW1pdCkpKSB7CisJCQkgICAgYml0bWFwX3Jlc2V0KGJhc2UpOworCQkJICAgIHJlc2V0X2FsbF9zZWVuKCk7CisJCQl9CisKKwkJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgb2JqZWN0LCAiIik7CisJCQlyZXZzLmluY2x1ZGVfY2hlY2tfZGF0YSA9IGJhc2U7CisKKwkJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQkJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKworCQkJdHJhdmVyc2VfY29tbWl0X2xpc3QoJnJldnMsIHNob3dfY29tbWl0LCBzaG93X29iamVjdCwgYmFzZSk7CisKKwkJCW9iamVjdF9hcnJheV9jbGVhcigmcmV2cy5wZW5kaW5nKTsKKworCQkJc3RvcmVkLT5iaXRtYXAgPSBiaXRtYXBfdG9fZXdhaChiYXNlKTsKKwkJCW5lZWRfcmVzZXQgPSAwOworCQl9IGVsc2UKKwkJCW5lZWRfcmVzZXQgPSAxOworCisJCWlmIChpID49IHJldXNlX2FmdGVyKQorCQkJc3RvcmVkLT5mbGFncyB8PSBCSVRNQVBfRkxBR19SRVVTRTsKKworCQloYXNoX3BvcyA9IGtoX3B1dF9vaWRfbWFwKHdyaXRlci5iaXRtYXBzLCBvYmplY3QtPm9pZCwgJmhhc2hfcmV0KTsKKwkJaWYgKGhhc2hfcmV0ID09IDApCisJCQlkaWUoIkR1cGxpY2F0ZSBlbnRyeSB3aGVuIHdyaXRpbmcgaW5kZXg6ICVzIiwKKwkJCSAgICBvaWRfdG9faGV4KCZvYmplY3QtPm9pZCkpOworCisJCWtoX3ZhbHVlKHdyaXRlci5iaXRtYXBzLCBoYXNoX3BvcykgPSBzdG9yZWQ7CisJCWRpc3BsYXlfcHJvZ3Jlc3Mod3JpdGVyLnByb2dyZXNzLCB3cml0ZXIuc2VsZWN0ZWRfbnIgLSBpKTsKKwl9CisKKwliaXRtYXBfZnJlZShiYXNlKTsKKwlzdG9wX3Byb2dyZXNzKCZ3cml0ZXIucHJvZ3Jlc3MpOworCisJY29tcHV0ZV94b3Jfb2Zmc2V0cygpOworfQorCisvKioKKyAqIFNlbGVjdCB0aGUgY29tbWl0cyB0aGF0IHdpbGwgYmUgYml0bWFwcGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5leHRfY29tbWl0X2luZGV4KHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBNSU5fQ09NTUlUUyA9IDEwMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IE1BWF9DT01NSVRTID0gNTAwMDsKKworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgTVVTVF9SRUdJT04gPSAxMDA7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBNSU5fUkVHSU9OID0gMjAwMDA7CisKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBuZXh0OworCisJaWYgKGlkeCA8PSBNVVNUX1JFR0lPTikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaWR4IDw9IE1JTl9SRUdJT04pIHsKKwkJb2Zmc2V0ID0gaWR4IC0gTVVTVF9SRUdJT047CisJCXJldHVybiAob2Zmc2V0IDwgTUlOX0NPTU1JVFMpID8gb2Zmc2V0IDogTUlOX0NPTU1JVFM7CisJfQorCisJb2Zmc2V0ID0gaWR4IC0gTUlOX1JFR0lPTjsKKwluZXh0ID0gKG9mZnNldCA8IE1BWF9DT01NSVRTKSA/IG9mZnNldCA6IE1BWF9DT01NSVRTOworCisJcmV0dXJuIChuZXh0ID4gTUlOX0NPTU1JVFMpID8gbmV4dCA6IE1JTl9DT01NSVRTOworfQorCitzdGF0aWMgaW50IGRhdGVfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IGNvbW1pdCAqYSA9ICooc3RydWN0IGNvbW1pdCAqKilfYTsKKwlzdHJ1Y3QgY29tbWl0ICpiID0gKihzdHJ1Y3QgY29tbWl0ICoqKV9iOworCXJldHVybiAobG9uZyliLT5kYXRlIC0gKGxvbmcpYS0+ZGF0ZTsKK30KKwordm9pZCBiaXRtYXBfd3JpdGVyX3JldXNlX2JpdG1hcHMoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjaykKK3sKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0OworCWlmICghKGJpdG1hcF9naXQgPSBwcmVwYXJlX2JpdG1hcF9naXQodG9fcGFjay0+cmVwbykpKQorCQlyZXR1cm47CisKKwl3cml0ZXIucmV1c2VkID0ga2hfaW5pdF9vaWRfbWFwKCk7CisJcmVidWlsZF9leGlzdGluZ19iaXRtYXBzKGJpdG1hcF9naXQsIHRvX3BhY2ssIHdyaXRlci5yZXVzZWQsCisJCQkJIHdyaXRlci5zaG93X3Byb2dyZXNzKTsKKwkvKgorCSAqIE5FRURTV09SSzogcmVidWlsZF9leGlzdGluZ19iaXRtYXBzKCkgbWFrZXMgd3JpdGVyLnJldXNlZCByZWZlcmVuY2UKKwkgKiBzb21lIGJpdG1hcHMgaW4gYml0bWFwX2dpdCwgc28gd2UgY2FuJ3QgZnJlZSB0aGUgbGF0dGVyLgorCSAqLworfQorCitzdGF0aWMgc3RydWN0IGV3YWhfYml0bWFwICpmaW5kX3JldXNlZF9iaXRtYXAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWtoaXRlcl90IGhhc2hfcG9zOworCisJaWYgKCF3cml0ZXIucmV1c2VkKQorCQlyZXR1cm4gTlVMTDsKKworCWhhc2hfcG9zID0ga2hfZ2V0X29pZF9tYXAod3JpdGVyLnJldXNlZCwgKm9pZCk7CisJaWYgKGhhc2hfcG9zID49IGtoX2VuZCh3cml0ZXIucmV1c2VkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4ga2hfdmFsdWUod3JpdGVyLnJldXNlZCwgaGFzaF9wb3MpOworfQorCit2b2lkIGJpdG1hcF93cml0ZXJfc2VsZWN0X2NvbW1pdHMoc3RydWN0IGNvbW1pdCAqKmluZGV4ZWRfY29tbWl0cywKKwkJCQkgIHVuc2lnbmVkIGludCBpbmRleGVkX2NvbW1pdHNfbnIsCisJCQkJICBpbnQgbWF4X2JpdG1hcHMpCit7CisJdW5zaWduZWQgaW50IGkgPSAwLCBqLCBuZXh0OworCisJUVNPUlQoaW5kZXhlZF9jb21taXRzLCBpbmRleGVkX2NvbW1pdHNfbnIsIGRhdGVfY29tcGFyZSk7CisKKwlpZiAod3JpdGVyLnNob3dfcHJvZ3Jlc3MpCisJCXdyaXRlci5wcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKCJTZWxlY3RpbmcgYml0bWFwIGNvbW1pdHMiLCAwKTsKKworCWlmIChpbmRleGVkX2NvbW1pdHNfbnIgPCAxMDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGluZGV4ZWRfY29tbWl0c19ucjsgKytpKQorCQkJcHVzaF9iaXRtYXBwZWRfY29tbWl0KGluZGV4ZWRfY29tbWl0c1tpXSwgTlVMTCk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBld2FoX2JpdG1hcCAqcmV1c2VkX2JpdG1hcCA9IE5VTEw7CisJCXN0cnVjdCBjb21taXQgKmNob3NlbiA9IE5VTEw7CisKKwkJbmV4dCA9IG5leHRfY29tbWl0X2luZGV4KGkpOworCisJCWlmIChpICsgbmV4dCA+PSBpbmRleGVkX2NvbW1pdHNfbnIpCisJCQlicmVhazsKKworCQlpZiAobWF4X2JpdG1hcHMgPiAwICYmIHdyaXRlci5zZWxlY3RlZF9uciA+PSBtYXhfYml0bWFwcykgeworCQkJd3JpdGVyLnNlbGVjdGVkX25yID0gbWF4X2JpdG1hcHM7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChuZXh0ID09IDApIHsKKwkJCWNob3NlbiA9IGluZGV4ZWRfY29tbWl0c1tpXTsKKwkJCXJldXNlZF9iaXRtYXAgPSBmaW5kX3JldXNlZF9iaXRtYXAoJmNob3Nlbi0+b2JqZWN0Lm9pZCk7CisJCX0gZWxzZSB7CisJCQljaG9zZW4gPSBpbmRleGVkX2NvbW1pdHNbaSArIG5leHRdOworCisJCQlmb3IgKGogPSAwOyBqIDw9IG5leHQ7ICsraikgeworCQkJCXN0cnVjdCBjb21taXQgKmNtID0gaW5kZXhlZF9jb21taXRzW2kgKyBqXTsKKworCQkJCXJldXNlZF9iaXRtYXAgPSBmaW5kX3JldXNlZF9iaXRtYXAoJmNtLT5vYmplY3Qub2lkKTsKKwkJCQlpZiAocmV1c2VkX2JpdG1hcCB8fCAoY20tPm9iamVjdC5mbGFncyAmIE5FRURTX0JJVE1BUCkgIT0gMCkgeworCQkJCQljaG9zZW4gPSBjbTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKGNtLT5wYXJlbnRzICYmIGNtLT5wYXJlbnRzLT5uZXh0KQorCQkJCQljaG9zZW4gPSBjbTsKKwkJCX0KKwkJfQorCisJCXB1c2hfYml0bWFwcGVkX2NvbW1pdChjaG9zZW4sIHJldXNlZF9iaXRtYXApOworCisJCWkgKz0gbmV4dCArIDE7CisJCWRpc3BsYXlfcHJvZ3Jlc3Mod3JpdGVyLnByb2dyZXNzLCBpKTsKKwl9CisKKwlzdG9wX3Byb2dyZXNzKCZ3cml0ZXIucHJvZ3Jlc3MpOworfQorCisKK3N0YXRpYyBpbnQgaGFzaHdyaXRlX2V3YWhfaGVscGVyKHZvaWQgKmYsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwkvKiBoYXNod3JpdGUgd2lsbCBkaWUgb24gZXJyb3IgKi8KKwloYXNod3JpdGUoZiwgYnVmLCBsZW4pOworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogV3JpdGUgdGhlIGJpdG1hcCBpbmRleCB0byBkaXNrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2JpdG1hcChzdHJ1Y3QgaGFzaGZpbGUgKmYsIHN0cnVjdCBld2FoX2JpdG1hcCAqYml0bWFwKQoreworCWlmIChld2FoX3NlcmlhbGl6ZV90byhiaXRtYXAsIGhhc2h3cml0ZV9ld2FoX2hlbHBlciwgZikgPCAwKQorCQlkaWUoIkZhaWxlZCB0byB3cml0ZSBiaXRtYXAgaW5kZXgiKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTFfYWNjZXNzKHNpemVfdCBwb3MsIHZvaWQgKnRhYmxlKQoreworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmluZGV4ID0gdGFibGU7CisJcmV0dXJuIGluZGV4W3Bvc10tPm9pZC5oYXNoOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9zZWxlY3RlZF9jb21taXRzX3YxKHN0cnVjdCBoYXNoZmlsZSAqZiwKKwkJCQkgICAgICBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippbmRleCwKKwkJCQkgICAgICB1aW50MzJfdCBpbmRleF9ucikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB3cml0ZXIuc2VsZWN0ZWRfbnI7ICsraSkgeworCQlzdHJ1Y3QgYml0bWFwcGVkX2NvbW1pdCAqc3RvcmVkID0gJndyaXRlci5zZWxlY3RlZFtpXTsKKworCQlpbnQgY29tbWl0X3BvcyA9CisJCQlzaGExX3BvcyhzdG9yZWQtPmNvbW1pdC0+b2JqZWN0Lm9pZC5oYXNoLCBpbmRleCwgaW5kZXhfbnIsIHNoYTFfYWNjZXNzKTsKKworCQlpZiAoY29tbWl0X3BvcyA8IDApCisJCQlCVUcoInRyeWluZyB0byB3cml0ZSBjb21taXQgbm90IGluIGluZGV4Iik7CisKKwkJaGFzaHdyaXRlX2JlMzIoZiwgY29tbWl0X3Bvcyk7CisJCWhhc2h3cml0ZV91OChmLCBzdG9yZWQtPnhvcl9vZmZzZXQpOworCQloYXNod3JpdGVfdTgoZiwgc3RvcmVkLT5mbGFncyk7CisKKwkJZHVtcF9iaXRtYXAoZiwgc3RvcmVkLT53cml0ZV9hcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZV9oYXNoX2NhY2hlKHN0cnVjdCBoYXNoZmlsZSAqZiwKKwkJCSAgICAgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaW5kZXgsCisJCQkgICAgIHVpbnQzMl90IGluZGV4X25yKQoreworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXhfbnI7ICsraSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IChzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICopaW5kZXhbaV07CisJCXVpbnQzMl90IGhhc2hfdmFsdWUgPSBodG9ubChlbnRyeS0+aGFzaCk7CisJCWhhc2h3cml0ZShmLCAmaGFzaF92YWx1ZSwgc2l6ZW9mKGhhc2hfdmFsdWUpKTsKKwl9Cit9CisKK3ZvaWQgYml0bWFwX3dyaXRlcl9zZXRfY2hlY2tzdW0odW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwloYXNoY3B5KHdyaXRlci5wYWNrX2NoZWNrc3VtLCBzaGExKTsKK30KKwordm9pZCBiaXRtYXBfd3JpdGVyX2ZpbmlzaChzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippbmRleCwKKwkJCSAgdWludDMyX3QgaW5kZXhfbnIsCisJCQkgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICB1aW50MTZfdCBvcHRpb25zKQoreworCXN0YXRpYyB1aW50MTZfdCBkZWZhdWx0X3ZlcnNpb24gPSAxOworCXN0YXRpYyB1aW50MTZfdCBmbGFncyA9IEJJVE1BUF9PUFRfRlVMTF9EQUc7CisJc3RydWN0IHN0cmJ1ZiB0bXBfZmlsZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBoYXNoZmlsZSAqZjsKKworCXN0cnVjdCBiaXRtYXBfZGlza19oZWFkZXIgaGVhZGVyOworCisJaW50IGZkID0gb2RiX21rc3RlbXAoJnRtcF9maWxlLCAicGFjay90bXBfYml0bWFwX1hYWFhYWCIpOworCisJZiA9IGhhc2hmZChmZCwgdG1wX2ZpbGUuYnVmKTsKKworCW1lbWNweShoZWFkZXIubWFnaWMsIEJJVE1BUF9JRFhfU0lHTkFUVVJFLCBzaXplb2YoQklUTUFQX0lEWF9TSUdOQVRVUkUpKTsKKwloZWFkZXIudmVyc2lvbiA9IGh0b25zKGRlZmF1bHRfdmVyc2lvbik7CisJaGVhZGVyLm9wdGlvbnMgPSBodG9ucyhmbGFncyB8IG9wdGlvbnMpOworCWhlYWRlci5lbnRyeV9jb3VudCA9IGh0b25sKHdyaXRlci5zZWxlY3RlZF9ucik7CisJaGFzaGNweShoZWFkZXIuY2hlY2tzdW0sIHdyaXRlci5wYWNrX2NoZWNrc3VtKTsKKworCWhhc2h3cml0ZShmLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSAtIEdJVF9NQVhfUkFXU1ogKyB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJZHVtcF9iaXRtYXAoZiwgd3JpdGVyLmNvbW1pdHMpOworCWR1bXBfYml0bWFwKGYsIHdyaXRlci50cmVlcyk7CisJZHVtcF9iaXRtYXAoZiwgd3JpdGVyLmJsb2JzKTsKKwlkdW1wX2JpdG1hcChmLCB3cml0ZXIudGFncyk7CisJd3JpdGVfc2VsZWN0ZWRfY29tbWl0c192MShmLCBpbmRleCwgaW5kZXhfbnIpOworCisJaWYgKG9wdGlvbnMgJiBCSVRNQVBfT1BUX0hBU0hfQ0FDSEUpCisJCXdyaXRlX2hhc2hfY2FjaGUoZiwgaW5kZXgsIGluZGV4X25yKTsKKworCWZpbmFsaXplX2hhc2hmaWxlKGYsIE5VTEwsIENTVU1fSEFTSF9JTl9TVFJFQU0gfCBDU1VNX0ZTWU5DIHwgQ1NVTV9DTE9TRSk7CisKKwlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHRtcF9maWxlLmJ1ZikpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IGJpdG1hcCBmaWxlIHJlYWRhYmxlIik7CisKKwlpZiAocmVuYW1lKHRtcF9maWxlLmJ1ZiwgZmlsZW5hbWUpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IGJpdG1hcCBmaWxlIHRvICclcyciLCBmaWxlbmFtZSk7CisKKwlzdHJidWZfcmVsZWFzZSgmdG1wX2ZpbGUpOworfQpkaWZmIC0tZ2l0IGEvcGFjay1iaXRtYXAuYyBiL3BhY2stYml0bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhOGQxMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stYml0bWFwLmMKQEAgLTAsMCArMSwxNDA1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJwYWNrLWJpdG1hcC5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKworLyoKKyAqIEFuIGVudHJ5IG9uIHRoZSBiaXRtYXAgaW5kZXgsIHJlcHJlc2VudGluZyB0aGUgYml0bWFwIGZvciBhIGdpdmVuCisgKiBjb21taXQuCisgKi8KK3N0cnVjdCBzdG9yZWRfYml0bWFwIHsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnJvb3Q7CisJc3RydWN0IHN0b3JlZF9iaXRtYXAgKnhvcjsKKwlpbnQgZmxhZ3M7Cit9OworCisvKgorICogVGhlIGFjdGl2ZSBiaXRtYXAgaW5kZXggZm9yIGEgcmVwb3NpdG9yeS4gQnkgZGVzaWduLCByZXBvc2l0b3JpZXMgb25seSBoYXZlCisgKiBhIHNpbmdsZSBiaXRtYXAgaW5kZXggYXZhaWxhYmxlICh0aGUgaW5kZXggZm9yIHRoZSBiaWdnZXN0IHBhY2tmaWxlIGluCisgKiB0aGUgcmVwb3NpdG9yeSksIHNpbmNlIGJpdG1hcCBpbmRleGVzIG5lZWQgZnVsbCBjbG9zdXJlLgorICoKKyAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYml0bWFwIGluZGV4IGF2YWlsYWJsZSAoZS5nLiBiZWNhdXNlIG9mIGFsdGVybmF0ZXMpLAorICogdGhlIGFjdGl2ZSBiaXRtYXAgaW5kZXggaXMgdGhlIGxhcmdlc3Qgb25lLgorICovCitzdHJ1Y3QgYml0bWFwX2luZGV4IHsKKwkvKiBQYWNrZmlsZSB0byB3aGljaCB0aGlzIGJpdG1hcCBpbmRleCBiZWxvbmdzIHRvICovCisJc3RydWN0IHBhY2tlZF9naXQgKnBhY2s7CisKKwkvKgorCSAqIE1hcmsgdGhlIGZpcnN0IGByZXVzZV9vYmplY3RzYCBpbiB0aGUgcGFja2ZpbGUgYXMgcmV1c2VkOgorCSAqIHRoZXkgd2lsbCBiZSBzZW50IGFzLWlzIHdpdGhvdXQgdXNpbmcgdGhlbSBmb3IgcmVwYWNraW5nCisJICogY2FsY3VsYXRpb25zCisJICovCisJdWludDMyX3QgcmV1c2Vfb2JqZWN0czsKKworCS8qIG1tYXBwZWQgYnVmZmVyIG9mIHRoZSB3aG9sZSBiaXRtYXAgaW5kZXggKi8KKwl1bnNpZ25lZCBjaGFyICptYXA7CisJc2l6ZV90IG1hcF9zaXplOyAvKiBzaXplIG9mIHRoZSBtbWFwZWQgYnVmZmVyICovCisJc2l6ZV90IG1hcF9wb3M7IC8qIGN1cnJlbnQgcG9zaXRpb24gd2hlbiBsb2FkaW5nIHRoZSBpbmRleCAqLworCisJLyoKKwkgKiBUeXBlIGluZGV4ZXMuCisJICoKKwkgKiBFYWNoIGJpdG1hcCBtYXJrcyB3aGljaCBvYmplY3RzIGluIHRoZSBwYWNrZmlsZSAgYXJlIG9mIHRoZSBnaXZlbgorCSAqIHR5cGUuIFRoaXMgcHJvdmlkZXMgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIHlpZWxkaW5nIHRoZSBvYmplY3RzIGZyb20KKwkgKiB0aGUgcGFja2ZpbGUgZHVyaW5nIGEgd2Fsaywgd2hpY2ggYWxsb3dzIGZvciBiZXR0ZXIgZGVsdGEgYmFzZXMuCisJICovCisJc3RydWN0IGV3YWhfYml0bWFwICpjb21taXRzOworCXN0cnVjdCBld2FoX2JpdG1hcCAqdHJlZXM7CisJc3RydWN0IGV3YWhfYml0bWFwICpibG9iczsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnRhZ3M7CisKKwkvKiBNYXAgZnJvbSBvYmplY3QgSUQgLT4gYHN0b3JlZF9iaXRtYXBgIGZvciBhbGwgdGhlIGJpdG1hcHBlZCBjb21taXRzICovCisJa2hfb2lkX21hcF90ICpiaXRtYXBzOworCisJLyogTnVtYmVyIG9mIGJpdG1hcHBlZCBjb21taXRzICovCisJdWludDMyX3QgZW50cnlfY291bnQ7CisKKwkvKiBJZiBub3QgTlVMTCwgdGhpcyBpcyBhIG5hbWUtaGFzaCBjYWNoZSBwb2ludGluZyBpbnRvIG1hcC4gKi8KKwl1aW50MzJfdCAqaGFzaGVzOworCisJLyoKKwkgKiBFeHRlbmRlZCBpbmRleC4KKwkgKgorCSAqIFdoZW4gdHJ5aW5nIHRvIHBlcmZvcm0gYml0bWFwIG9wZXJhdGlvbnMgd2l0aCBvYmplY3RzIHRoYXQgYXJlIG5vdAorCSAqIHBhY2tlZCBpbiBgcGFja2AsIHRoZXNlIG9iamVjdHMgYXJlIGFkZGVkIHRvIHRoaXMgImZha2UgaW5kZXgiIGFuZAorCSAqIGFyZSBhc3N1bWVkIHRvIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZmlsZSBmb3IgYWxsIG9wZXJhdGlvbnMKKwkgKi8KKwlzdHJ1Y3QgZWluZGV4IHsKKwkJc3RydWN0IG9iamVjdCAqKm9iamVjdHM7CisJCXVpbnQzMl90ICpoYXNoZXM7CisJCXVpbnQzMl90IGNvdW50LCBhbGxvYzsKKwkJa2hfb2lkX3Bvc190ICpwb3NpdGlvbnM7CisJfSBleHRfaW5kZXg7CisKKwkvKiBCaXRtYXAgcmVzdWx0IG9mIHRoZSBsYXN0IHBlcmZvcm1lZCB3YWxrICovCisJc3RydWN0IGJpdG1hcCAqcmVzdWx0OworCisJLyogImhhdmUiIGJpdG1hcCBmcm9tIHRoZSBsYXN0IHBlcmZvcm1lZCB3YWxrICovCisJc3RydWN0IGJpdG1hcCAqaGF2ZXM7CisKKwkvKiBWZXJzaW9uIG9mIHRoZSBiaXRtYXAgaW5kZXggKi8KKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXdhaF9iaXRtYXAgKmxvb2t1cF9zdG9yZWRfYml0bWFwKHN0cnVjdCBzdG9yZWRfYml0bWFwICpzdCkKK3sKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnBhcmVudDsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmNvbXBvc2VkOworCisJaWYgKHN0LT54b3IgPT0gTlVMTCkKKwkJcmV0dXJuIHN0LT5yb290OworCisJY29tcG9zZWQgPSBld2FoX3Bvb2xfbmV3KCk7CisJcGFyZW50ID0gbG9va3VwX3N0b3JlZF9iaXRtYXAoc3QtPnhvcik7CisJZXdhaF94b3Ioc3QtPnJvb3QsIHBhcmVudCwgY29tcG9zZWQpOworCisJZXdhaF9wb29sX2ZyZWUoc3QtPnJvb3QpOworCXN0LT5yb290ID0gY29tcG9zZWQ7CisJc3QtPnhvciA9IE5VTEw7CisKKwlyZXR1cm4gY29tcG9zZWQ7Cit9CisKKy8qCisgKiBSZWFkIGEgYml0bWFwIGZyb20gdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBvbiB0aGUgbW1hcGVkCisgKiBpbmRleCwgYW5kIGluY3JlYXNlIHRoZSByZWFkIHBvc2l0aW9uIGFjY29yZGluZ2x5CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXdhaF9iaXRtYXAgKnJlYWRfYml0bWFwXzEoc3RydWN0IGJpdG1hcF9pbmRleCAqaW5kZXgpCit7CisJc3RydWN0IGV3YWhfYml0bWFwICpiID0gZXdhaF9wb29sX25ldygpOworCisJc3NpemVfdCBiaXRtYXBfc2l6ZSA9IGV3YWhfcmVhZF9tbWFwKGIsCisJCWluZGV4LT5tYXAgKyBpbmRleC0+bWFwX3BvcywKKwkJaW5kZXgtPm1hcF9zaXplIC0gaW5kZXgtPm1hcF9wb3MpOworCisJaWYgKGJpdG1hcF9zaXplIDwgMCkgeworCQllcnJvcigiRmFpbGVkIHRvIGxvYWQgYml0bWFwIGluZGV4IChjb3JydXB0ZWQ/KSIpOworCQlld2FoX3Bvb2xfZnJlZShiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaW5kZXgtPm1hcF9wb3MgKz0gYml0bWFwX3NpemU7CisJcmV0dXJuIGI7Cit9CisKK3N0YXRpYyBpbnQgbG9hZF9iaXRtYXBfaGVhZGVyKHN0cnVjdCBiaXRtYXBfaW5kZXggKmluZGV4KQoreworCXN0cnVjdCBiaXRtYXBfZGlza19oZWFkZXIgKmhlYWRlciA9ICh2b2lkICopaW5kZXgtPm1hcDsKKworCWlmIChpbmRleC0+bWFwX3NpemUgPCBzaXplb2YoKmhlYWRlcikgKyB0aGVfaGFzaF9hbGdvLT5yYXdzeikKKwkJcmV0dXJuIGVycm9yKCJDb3JydXB0ZWQgYml0bWFwIGluZGV4IChtaXNzaW5nIGhlYWRlciBkYXRhKSIpOworCisJaWYgKG1lbWNtcChoZWFkZXItPm1hZ2ljLCBCSVRNQVBfSURYX1NJR05BVFVSRSwgc2l6ZW9mKEJJVE1BUF9JRFhfU0lHTkFUVVJFKSkgIT0gMCkKKwkJcmV0dXJuIGVycm9yKCJDb3JydXB0ZWQgYml0bWFwIGluZGV4IGZpbGUgKHdyb25nIGhlYWRlcikiKTsKKworCWluZGV4LT52ZXJzaW9uID0gbnRvaHMoaGVhZGVyLT52ZXJzaW9uKTsKKwlpZiAoaW5kZXgtPnZlcnNpb24gIT0gMSkKKwkJcmV0dXJuIGVycm9yKCJVbnN1cHBvcnRlZCB2ZXJzaW9uIGZvciBiaXRtYXAgaW5kZXggZmlsZSAoJWQpIiwgaW5kZXgtPnZlcnNpb24pOworCisJLyogUGFyc2Uga25vd24gYml0bWFwIGZvcm1hdCBvcHRpb25zICovCisJeworCQl1aW50MzJfdCBmbGFncyA9IG50b2hzKGhlYWRlci0+b3B0aW9ucyk7CisKKwkJaWYgKChmbGFncyAmIEJJVE1BUF9PUFRfRlVMTF9EQUcpID09IDApCisJCQlyZXR1cm4gZXJyb3IoIlVuc3VwcG9ydGVkIG9wdGlvbnMgZm9yIGJpdG1hcCBpbmRleCBmaWxlICIKKwkJCQkiKEdpdCByZXF1aXJlcyBCSVRNQVBfT1BUX0ZVTExfREFHKSIpOworCisJCWlmIChmbGFncyAmIEJJVE1BUF9PUFRfSEFTSF9DQUNIRSkgeworCQkJdW5zaWduZWQgY2hhciAqZW5kID0gaW5kZXgtPm1hcCArIGluZGV4LT5tYXBfc2l6ZSAtIHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCQkJaW5kZXgtPmhhc2hlcyA9ICgodWludDMyX3QgKillbmQpIC0gaW5kZXgtPnBhY2stPm51bV9vYmplY3RzOworCQl9CisJfQorCisJaW5kZXgtPmVudHJ5X2NvdW50ID0gbnRvaGwoaGVhZGVyLT5lbnRyeV9jb3VudCk7CisJaW5kZXgtPm1hcF9wb3MgKz0gc2l6ZW9mKCpoZWFkZXIpIC0gR0lUX01BWF9SQVdTWiArIHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0b3JlZF9iaXRtYXAgKnN0b3JlX2JpdG1hcChzdHJ1Y3QgYml0bWFwX2luZGV4ICppbmRleCwKKwkJCQkJICBzdHJ1Y3QgZXdhaF9iaXRtYXAgKnJvb3QsCisJCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgIHN0cnVjdCBzdG9yZWRfYml0bWFwICp4b3Jfd2l0aCwKKwkJCQkJICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0b3JlZF9iaXRtYXAgKnN0b3JlZDsKKwlraGl0ZXJfdCBoYXNoX3BvczsKKwlpbnQgcmV0OworCisJc3RvcmVkID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0b3JlZF9iaXRtYXApKTsKKwlzdG9yZWQtPnJvb3QgPSByb290OworCXN0b3JlZC0+eG9yID0geG9yX3dpdGg7CisJc3RvcmVkLT5mbGFncyA9IGZsYWdzOworCW9pZGNweSgmc3RvcmVkLT5vaWQsIG9pZCk7CisKKwloYXNoX3BvcyA9IGtoX3B1dF9vaWRfbWFwKGluZGV4LT5iaXRtYXBzLCBzdG9yZWQtPm9pZCwgJnJldCk7CisKKwkvKiBhIDAgcmV0dXJuIGNvZGUgbWVhbnMgdGhlIGluc2VydGlvbiBzdWNjZWVkZWQgd2l0aCBubyBjaGFuZ2VzLAorCSAqIGJlY2F1c2UgdGhlIFNIQTEgYWxyZWFkeSBleGlzdGVkIG9uIHRoZSBtYXAuIHRoaXMgaXMgYmFkLCB0aGVyZQorCSAqIHNob3VsZG4ndCBiZSBkdXBsaWNhdGVkIGNvbW1pdHMgaW4gdGhlIGluZGV4ICovCisJaWYgKHJldCA9PSAwKSB7CisJCWVycm9yKCJEdXBsaWNhdGUgZW50cnkgaW4gYml0bWFwIGluZGV4OiAlcyIsIG9pZF90b19oZXgob2lkKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWtoX3ZhbHVlKGluZGV4LT5iaXRtYXBzLCBoYXNoX3BvcykgPSBzdG9yZWQ7CisJcmV0dXJuIHN0b3JlZDsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCByZWFkX2JlMzIoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgKnBvcykKK3sKKwl1aW50MzJfdCByZXN1bHQgPSBnZXRfYmUzMihidWZmZXIgKyAqcG9zKTsKKwkoKnBvcykgKz0gc2l6ZW9mKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IHJlYWRfdTgoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBzaXplX3QgKnBvcykKK3sKKwlyZXR1cm4gYnVmZmVyWygqcG9zKSsrXTsKK30KKworI2RlZmluZSBNQVhfWE9SX09GRlNFVCAxNjAKKworc3RhdGljIGludCBsb2FkX2JpdG1hcF9lbnRyaWVzX3YxKHN0cnVjdCBiaXRtYXBfaW5kZXggKmluZGV4KQoreworCXVpbnQzMl90IGk7CisJc3RydWN0IHN0b3JlZF9iaXRtYXAgKnJlY2VudF9iaXRtYXBzW01BWF9YT1JfT0ZGU0VUXSA9IHsgTlVMTCB9OworCisJZm9yIChpID0gMDsgaSA8IGluZGV4LT5lbnRyeV9jb3VudDsgKytpKSB7CisJCWludCB4b3Jfb2Zmc2V0LCBmbGFnczsKKwkJc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXAgPSBOVUxMOworCQlzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqeG9yX2JpdG1hcCA9IE5VTEw7CisJCXVpbnQzMl90IGNvbW1pdF9pZHhfcG9zOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQljb21taXRfaWR4X3BvcyA9IHJlYWRfYmUzMihpbmRleC0+bWFwLCAmaW5kZXgtPm1hcF9wb3MpOworCQl4b3Jfb2Zmc2V0ID0gcmVhZF91OChpbmRleC0+bWFwLCAmaW5kZXgtPm1hcF9wb3MpOworCQlmbGFncyA9IHJlYWRfdTgoaW5kZXgtPm1hcCwgJmluZGV4LT5tYXBfcG9zKTsKKworCQludGhfcGFja2VkX29iamVjdF9pZCgmb2lkLCBpbmRleC0+cGFjaywgY29tbWl0X2lkeF9wb3MpOworCisJCWJpdG1hcCA9IHJlYWRfYml0bWFwXzEoaW5kZXgpOworCQlpZiAoIWJpdG1hcCkKKwkJCXJldHVybiAtMTsKKworCQlpZiAoeG9yX29mZnNldCA+IE1BWF9YT1JfT0ZGU0VUIHx8IHhvcl9vZmZzZXQgPiBpKQorCQkJcmV0dXJuIGVycm9yKCJDb3JydXB0ZWQgYml0bWFwIHBhY2sgaW5kZXgiKTsKKworCQlpZiAoeG9yX29mZnNldCA+IDApIHsKKwkJCXhvcl9iaXRtYXAgPSByZWNlbnRfYml0bWFwc1soaSAtIHhvcl9vZmZzZXQpICUgTUFYX1hPUl9PRkZTRVRdOworCisJCQlpZiAoeG9yX2JpdG1hcCA9PSBOVUxMKQorCQkJCXJldHVybiBlcnJvcigiSW52YWxpZCBYT1Igb2Zmc2V0IGluIGJpdG1hcCBwYWNrIGluZGV4Iik7CisJCX0KKworCQlyZWNlbnRfYml0bWFwc1tpICUgTUFYX1hPUl9PRkZTRVRdID0gc3RvcmVfYml0bWFwKAorCQkJaW5kZXgsIGJpdG1hcCwgJm9pZCwgeG9yX2JpdG1hcCwgZmxhZ3MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqcGFja19iaXRtYXBfZmlsZW5hbWUoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJc2l6ZV90IGxlbjsKKworCWlmICghc3RyaXBfc3VmZml4KHAtPnBhY2tfbmFtZSwgIi5wYWNrIiwgJmxlbikpCisJCUJVRygicGFja19uYW1lIGRvZXMgbm90IGVuZCBpbiAucGFjayIpOworCXJldHVybiB4c3RyZm10KCIlLipzLmJpdG1hcCIsIChpbnQpbGVuLCBwLT5wYWNrX25hbWUpOworfQorCitzdGF0aWMgaW50IG9wZW5fcGFja19iaXRtYXBfMShzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LCBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja2ZpbGUpCit7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKmlkeF9uYW1lOworCisJaWYgKG9wZW5fcGFja19pbmRleChwYWNrZmlsZSkpCisJCXJldHVybiAtMTsKKworCWlkeF9uYW1lID0gcGFja19iaXRtYXBfZmlsZW5hbWUocGFja2ZpbGUpOworCWZkID0gZ2l0X29wZW4oaWR4X25hbWUpOworCWZyZWUoaWR4X25hbWUpOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChiaXRtYXBfZ2l0LT5wYWNrKSB7CisJCXdhcm5pbmcoImlnbm9yaW5nIGV4dHJhIGJpdG1hcCBmaWxlOiAlcyIsIHBhY2tmaWxlLT5wYWNrX25hbWUpOworCQljbG9zZShmZCk7CisJCXJldHVybiAtMTsKKwl9CisKKwliaXRtYXBfZ2l0LT5wYWNrID0gcGFja2ZpbGU7CisJYml0bWFwX2dpdC0+bWFwX3NpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCWJpdG1hcF9naXQtPm1hcCA9IHhtbWFwKE5VTEwsIGJpdG1hcF9naXQtPm1hcF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJYml0bWFwX2dpdC0+bWFwX3BvcyA9IDA7CisJY2xvc2UoZmQpOworCisJaWYgKGxvYWRfYml0bWFwX2hlYWRlcihiaXRtYXBfZ2l0KSA8IDApIHsKKwkJbXVubWFwKGJpdG1hcF9naXQtPm1hcCwgYml0bWFwX2dpdC0+bWFwX3NpemUpOworCQliaXRtYXBfZ2l0LT5tYXAgPSBOVUxMOworCQliaXRtYXBfZ2l0LT5tYXBfc2l6ZSA9IDA7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2FkX3BhY2tfYml0bWFwKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQpCit7CisJYXNzZXJ0KGJpdG1hcF9naXQtPm1hcCk7CisKKwliaXRtYXBfZ2l0LT5iaXRtYXBzID0ga2hfaW5pdF9vaWRfbWFwKCk7CisJYml0bWFwX2dpdC0+ZXh0X2luZGV4LnBvc2l0aW9ucyA9IGtoX2luaXRfb2lkX3BvcygpOworCWlmIChsb2FkX3BhY2tfcmV2aW5kZXgoYml0bWFwX2dpdC0+cGFjaykpCisJCWdvdG8gZmFpbGVkOworCisJaWYgKCEoYml0bWFwX2dpdC0+Y29tbWl0cyA9IHJlYWRfYml0bWFwXzEoYml0bWFwX2dpdCkpIHx8CisJCSEoYml0bWFwX2dpdC0+dHJlZXMgPSByZWFkX2JpdG1hcF8xKGJpdG1hcF9naXQpKSB8fAorCQkhKGJpdG1hcF9naXQtPmJsb2JzID0gcmVhZF9iaXRtYXBfMShiaXRtYXBfZ2l0KSkgfHwKKwkJIShiaXRtYXBfZ2l0LT50YWdzID0gcmVhZF9iaXRtYXBfMShiaXRtYXBfZ2l0KSkpCisJCWdvdG8gZmFpbGVkOworCisJaWYgKGxvYWRfYml0bWFwX2VudHJpZXNfdjEoYml0bWFwX2dpdCkgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXJldHVybiAwOworCitmYWlsZWQ6CisJbXVubWFwKGJpdG1hcF9naXQtPm1hcCwgYml0bWFwX2dpdC0+bWFwX3NpemUpOworCWJpdG1hcF9naXQtPm1hcCA9IE5VTEw7CisJYml0bWFwX2dpdC0+bWFwX3NpemUgPSAwOworCisJa2hfZGVzdHJveV9vaWRfbWFwKGJpdG1hcF9naXQtPmJpdG1hcHMpOworCWJpdG1hcF9naXQtPmJpdG1hcHMgPSBOVUxMOworCisJa2hfZGVzdHJveV9vaWRfcG9zKGJpdG1hcF9naXQtPmV4dF9pbmRleC5wb3NpdGlvbnMpOworCWJpdG1hcF9naXQtPmV4dF9pbmRleC5wb3NpdGlvbnMgPSBOVUxMOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IG9wZW5fcGFja19iaXRtYXAoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlpbnQgcmV0ID0gLTE7CisKKwlhc3NlcnQoIWJpdG1hcF9naXQtPm1hcCk7CisKKwlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHIpOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAob3Blbl9wYWNrX2JpdG1hcF8xKGJpdG1hcF9naXQsIHApID09IDApCisJCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBiaXRtYXBfaW5kZXggKnByZXBhcmVfYml0bWFwX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0ID0geGNhbGxvYygxLCBzaXplb2YoKmJpdG1hcF9naXQpKTsKKworCWlmICghb3Blbl9wYWNrX2JpdG1hcChyLCBiaXRtYXBfZ2l0KSAmJiAhbG9hZF9wYWNrX2JpdG1hcChiaXRtYXBfZ2l0KSkKKwkJcmV0dXJuIGJpdG1hcF9naXQ7CisKKwlmcmVlX2JpdG1hcF9pbmRleChiaXRtYXBfZ2l0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGluY2x1ZGVfZGF0YSB7CisJc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdDsKKwlzdHJ1Y3QgYml0bWFwICpiYXNlOworCXN0cnVjdCBiaXRtYXAgKnNlZW47Cit9OworCitzdGF0aWMgaW5saW5lIGludCBiaXRtYXBfcG9zaXRpb25fZXh0ZW5kZWQoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWtoX29pZF9wb3NfdCAqcG9zaXRpb25zID0gYml0bWFwX2dpdC0+ZXh0X2luZGV4LnBvc2l0aW9uczsKKwlraGl0ZXJfdCBwb3MgPSBraF9nZXRfb2lkX3Bvcyhwb3NpdGlvbnMsICpvaWQpOworCisJaWYgKHBvcyA8IGtoX2VuZChwb3NpdGlvbnMpKSB7CisJCWludCBiaXRtYXBfcG9zID0ga2hfdmFsdWUocG9zaXRpb25zLCBwb3MpOworCQlyZXR1cm4gYml0bWFwX3BvcyArIGJpdG1hcF9naXQtPnBhY2stPm51bV9vYmplY3RzOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYml0bWFwX3Bvc2l0aW9uX3BhY2tmaWxlKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlvZmZfdCBvZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKG9pZC0+aGFzaCwgYml0bWFwX2dpdC0+cGFjayk7CisJaWYgKCFvZmZzZXQpCisJCXJldHVybiAtMTsKKworCXJldHVybiBmaW5kX3JldmluZGV4X3Bvc2l0aW9uKGJpdG1hcF9naXQtPnBhY2ssIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgYml0bWFwX3Bvc2l0aW9uKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IHBvcyA9IGJpdG1hcF9wb3NpdGlvbl9wYWNrZmlsZShiaXRtYXBfZ2l0LCBvaWQpOworCXJldHVybiAocG9zID49IDApID8gcG9zIDogYml0bWFwX3Bvc2l0aW9uX2V4dGVuZGVkKGJpdG1hcF9naXQsIG9pZCk7Cit9CisKK3N0YXRpYyBpbnQgZXh0X2luZGV4X2FkZF9vYmplY3Qoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGVpbmRleCAqZWluZGV4ID0gJmJpdG1hcF9naXQtPmV4dF9pbmRleDsKKworCWtoaXRlcl90IGhhc2hfcG9zOworCWludCBoYXNoX3JldDsKKwlpbnQgYml0bWFwX3BvczsKKworCWhhc2hfcG9zID0ga2hfcHV0X29pZF9wb3MoZWluZGV4LT5wb3NpdGlvbnMsIG9iamVjdC0+b2lkLCAmaGFzaF9yZXQpOworCWlmIChoYXNoX3JldCA+IDApIHsKKwkJaWYgKGVpbmRleC0+Y291bnQgPj0gZWluZGV4LT5hbGxvYykgeworCQkJZWluZGV4LT5hbGxvYyA9IChlaW5kZXgtPmFsbG9jICsgMTYpICogMyAvIDI7CisJCQlSRUFMTE9DX0FSUkFZKGVpbmRleC0+b2JqZWN0cywgZWluZGV4LT5hbGxvYyk7CisJCQlSRUFMTE9DX0FSUkFZKGVpbmRleC0+aGFzaGVzLCBlaW5kZXgtPmFsbG9jKTsKKwkJfQorCisJCWJpdG1hcF9wb3MgPSBlaW5kZXgtPmNvdW50OworCQllaW5kZXgtPm9iamVjdHNbZWluZGV4LT5jb3VudF0gPSBvYmplY3Q7CisJCWVpbmRleC0+aGFzaGVzW2VpbmRleC0+Y291bnRdID0gcGFja19uYW1lX2hhc2gobmFtZSk7CisJCWtoX3ZhbHVlKGVpbmRleC0+cG9zaXRpb25zLCBoYXNoX3BvcykgPSBiaXRtYXBfcG9zOworCQllaW5kZXgtPmNvdW50Kys7CisJfSBlbHNlIHsKKwkJYml0bWFwX3BvcyA9IGtoX3ZhbHVlKGVpbmRleC0+cG9zaXRpb25zLCBoYXNoX3Bvcyk7CisJfQorCisJcmV0dXJuIGJpdG1hcF9wb3MgKyBiaXRtYXBfZ2l0LT5wYWNrLT5udW1fb2JqZWN0czsKK30KKworc3RydWN0IGJpdG1hcF9zaG93X2RhdGEgeworCXN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQ7CisJc3RydWN0IGJpdG1hcCAqYmFzZTsKK307CisKK3N0YXRpYyB2b2lkIHNob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YV8pCit7CisJc3RydWN0IGJpdG1hcF9zaG93X2RhdGEgKmRhdGEgPSBkYXRhXzsKKwlpbnQgYml0bWFwX3BvczsKKworCWJpdG1hcF9wb3MgPSBiaXRtYXBfcG9zaXRpb24oZGF0YS0+Yml0bWFwX2dpdCwgJm9iamVjdC0+b2lkKTsKKworCWlmIChiaXRtYXBfcG9zIDwgMCkKKwkJYml0bWFwX3BvcyA9IGV4dF9pbmRleF9hZGRfb2JqZWN0KGRhdGEtPmJpdG1hcF9naXQsIG9iamVjdCwKKwkJCQkJCSAgbmFtZSk7CisKKwliaXRtYXBfc2V0KGRhdGEtPmJhc2UsIGJpdG1hcF9wb3MpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3RvX2luY2x1ZGVfc2V0KHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkgICAgICBzdHJ1Y3QgaW5jbHVkZV9kYXRhICpkYXRhLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGJpdG1hcF9wb3MpCit7CisJa2hpdGVyX3QgaGFzaF9wb3M7CisKKwlpZiAoZGF0YS0+c2VlbiAmJiBiaXRtYXBfZ2V0KGRhdGEtPnNlZW4sIGJpdG1hcF9wb3MpKQorCQlyZXR1cm4gMDsKKworCWlmIChiaXRtYXBfZ2V0KGRhdGEtPmJhc2UsIGJpdG1hcF9wb3MpKQorCQlyZXR1cm4gMDsKKworCWhhc2hfcG9zID0ga2hfZ2V0X29pZF9tYXAoYml0bWFwX2dpdC0+Yml0bWFwcywgKm9pZCk7CisJaWYgKGhhc2hfcG9zIDwga2hfZW5kKGJpdG1hcF9naXQtPmJpdG1hcHMpKSB7CisJCXN0cnVjdCBzdG9yZWRfYml0bWFwICpzdCA9IGtoX3ZhbHVlKGJpdG1hcF9naXQtPmJpdG1hcHMsIGhhc2hfcG9zKTsKKwkJYml0bWFwX29yX2V3YWgoZGF0YS0+YmFzZSwgbG9va3VwX3N0b3JlZF9iaXRtYXAoc3QpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYml0bWFwX3NldChkYXRhLT5iYXNlLCBiaXRtYXBfcG9zKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzaG91bGRfaW5jbHVkZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBpbmNsdWRlX2RhdGEgKmRhdGEgPSBfZGF0YTsKKwlpbnQgYml0bWFwX3BvczsKKworCWJpdG1hcF9wb3MgPSBiaXRtYXBfcG9zaXRpb24oZGF0YS0+Yml0bWFwX2dpdCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJaWYgKGJpdG1hcF9wb3MgPCAwKQorCQliaXRtYXBfcG9zID0gZXh0X2luZGV4X2FkZF9vYmplY3QoZGF0YS0+Yml0bWFwX2dpdCwKKwkJCQkJCSAgKHN0cnVjdCBvYmplY3QgKiljb21taXQsCisJCQkJCQkgIE5VTEwpOworCisJaWYgKCFhZGRfdG9faW5jbHVkZV9zZXQoZGF0YS0+Yml0bWFwX2dpdCwgZGF0YSwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwKKwkJCQliaXRtYXBfcG9zKSkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKKworCQl3aGlsZSAocGFyZW50KSB7CisJCQlwYXJlbnQtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBTRUVOOworCQkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYml0bWFwICpmaW5kX29iamVjdHMoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkgICBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJICAgc3RydWN0IG9iamVjdF9saXN0ICpyb290cywKKwkJCQkgICBzdHJ1Y3QgYml0bWFwICpzZWVuKQoreworCXN0cnVjdCBiaXRtYXAgKmJhc2UgPSBOVUxMOworCWludCBuZWVkc193YWxrID0gMDsKKworCXN0cnVjdCBvYmplY3RfbGlzdCAqbm90X21hcHBlZCA9IE5VTEw7CisKKwkvKgorCSAqIEdvIHRocm91Z2ggYWxsIHRoZSByb290cyBmb3IgdGhlIHdhbGsuIFRoZSBvbmVzIHRoYXQgaGF2ZSBiaXRtYXBzCisJICogb24gdGhlIGJpdG1hcCBpbmRleCB3aWxsIGJlIGBvcmBlZCB0b2dldGhlciB0byBmb3JtIGFuIGluaXRpYWwKKwkgKiBnbG9iYWwgcmVhY2hhYmlsaXR5IGFuYWx5c2lzLgorCSAqCisJICogVGhlIG9uZXMgd2l0aG91dCBiaXRtYXBzIGluIHRoZSBpbmRleCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUKKwkgKiBgbm90X21hcHBlZF9saXN0YCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgorCSAqLworCXdoaWxlIChyb290cykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSByb290cy0+aXRlbTsKKwkJcm9vdHMgPSByb290cy0+bmV4dDsKKworCQlpZiAob2JqZWN0LT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJCWtoaXRlcl90IHBvcyA9IGtoX2dldF9vaWRfbWFwKGJpdG1hcF9naXQtPmJpdG1hcHMsIG9iamVjdC0+b2lkKTsKKworCQkJaWYgKHBvcyA8IGtoX2VuZChiaXRtYXBfZ2l0LT5iaXRtYXBzKSkgeworCQkJCXN0cnVjdCBzdG9yZWRfYml0bWFwICpzdCA9IGtoX3ZhbHVlKGJpdG1hcF9naXQtPmJpdG1hcHMsIHBvcyk7CisJCQkJc3RydWN0IGV3YWhfYml0bWFwICpvcl93aXRoID0gbG9va3VwX3N0b3JlZF9iaXRtYXAoc3QpOworCisJCQkJaWYgKGJhc2UgPT0gTlVMTCkKKwkJCQkJYmFzZSA9IGV3YWhfdG9fYml0bWFwKG9yX3dpdGgpOworCQkJCWVsc2UKKwkJCQkJYml0bWFwX29yX2V3YWgoYmFzZSwgb3Jfd2l0aCk7CisKKwkJCQlvYmplY3QtPmZsYWdzIHw9IFNFRU47CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlvYmplY3RfbGlzdF9pbnNlcnQob2JqZWN0LCAmbm90X21hcHBlZCk7CisJfQorCisJLyoKKwkgKiBCZXN0IGNhc2Ugc2NlbmFyaW86IFdlIGZvdW5kIGJpdG1hcHMgZm9yIGFsbCB0aGUgcm9vdHMsCisJICogc28gdGhlIHJlc3VsdGluZyBgb3JgIGJpdG1hcCBoYXMgdGhlIGZ1bGwgcmVhY2hhYmlsaXR5IGFuYWx5c2lzCisJICovCisJaWYgKG5vdF9tYXBwZWQgPT0gTlVMTCkKKwkJcmV0dXJuIGJhc2U7CisKKwlyb290cyA9IG5vdF9tYXBwZWQ7CisKKwkvKgorCSAqIExldCdzIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHJvb3RzIHRoYXQgZG9uJ3QgaGF2ZSBiaXRtYXBzIHRvCisJICogY2hlY2sgaWYgd2UgY2FuIGRldGVybWluZSB0aGVtIHRvIGJlIHJlYWNoYWJsZSBmcm9tIHRoZSBleGlzdGluZworCSAqIGdsb2JhbCBiaXRtYXAuCisJICoKKwkgKiBJZiB3ZSBjYW5ub3QgZmluZCB0aGVtIGluIHRoZSBleGlzdGluZyBnbG9iYWwgYml0bWFwLCB3ZSdsbCBuZWVkCisJICogdG8gcHVzaCB0aGVtIHRvIGFuIGFjdHVhbCB3YWxrIGFuZCBydW4gaXQgdW50aWwgd2UgY2FuIGNvbmZpcm0KKwkgKiB0aGV5IGFyZSByZWFjaGFibGUKKwkgKi8KKwl3aGlsZSAocm9vdHMpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcm9vdHMtPml0ZW07CisJCWludCBwb3M7CisKKwkJcm9vdHMgPSByb290cy0+bmV4dDsKKwkJcG9zID0gYml0bWFwX3Bvc2l0aW9uKGJpdG1hcF9naXQsICZvYmplY3QtPm9pZCk7CisKKwkJaWYgKHBvcyA8IDAgfHwgYmFzZSA9PSBOVUxMIHx8ICFiaXRtYXBfZ2V0KGJhc2UsIHBvcykpIHsKKwkJCW9iamVjdC0+ZmxhZ3MgJj0gflVOSU5URVJFU1RJTkc7CisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCAiIik7CisJCQluZWVkc193YWxrID0gMTsKKwkJfSBlbHNlIHsKKwkJCW9iamVjdC0+ZmxhZ3MgfD0gU0VFTjsKKwkJfQorCX0KKworCWlmIChuZWVkc193YWxrKSB7CisJCXN0cnVjdCBpbmNsdWRlX2RhdGEgaW5jZGF0YTsKKwkJc3RydWN0IGJpdG1hcF9zaG93X2RhdGEgc2hvd19kYXRhOworCisJCWlmIChiYXNlID09IE5VTEwpCisJCQliYXNlID0gYml0bWFwX25ldygpOworCisJCWluY2RhdGEuYml0bWFwX2dpdCA9IGJpdG1hcF9naXQ7CisJCWluY2RhdGEuYmFzZSA9IGJhc2U7CisJCWluY2RhdGEuc2VlbiA9IHNlZW47CisKKwkJcmV2cy0+aW5jbHVkZV9jaGVjayA9IHNob3VsZF9pbmNsdWRlOworCQlyZXZzLT5pbmNsdWRlX2NoZWNrX2RhdGEgPSAmaW5jZGF0YTsKKworCQlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCisJCXNob3dfZGF0YS5iaXRtYXBfZ2l0ID0gYml0bWFwX2dpdDsKKwkJc2hvd19kYXRhLmJhc2UgPSBiYXNlOworCisJCXRyYXZlcnNlX2NvbW1pdF9saXN0KHJldnMsIHNob3dfY29tbWl0LCBzaG93X29iamVjdCwKKwkJCQkgICAgICZzaG93X2RhdGEpOworCX0KKworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdm9pZCBzaG93X2V4dGVuZGVkX29iamVjdHMoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkgIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgIHNob3dfcmVhY2hhYmxlX2ZuIHNob3dfcmVhY2gpCit7CisJc3RydWN0IGJpdG1hcCAqb2JqZWN0cyA9IGJpdG1hcF9naXQtPnJlc3VsdDsKKwlzdHJ1Y3QgZWluZGV4ICplaW5kZXggPSAmYml0bWFwX2dpdC0+ZXh0X2luZGV4OworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZWluZGV4LT5jb3VudDsgKytpKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iajsKKworCQlpZiAoIWJpdG1hcF9nZXQob2JqZWN0cywgYml0bWFwX2dpdC0+cGFjay0+bnVtX29iamVjdHMgKyBpKSkKKwkJCWNvbnRpbnVlOworCisJCW9iaiA9IGVpbmRleC0+b2JqZWN0c1tpXTsKKwkJaWYgKChvYmotPnR5cGUgPT0gT0JKX0JMT0IgJiYgIXJldnMtPmJsb2Jfb2JqZWN0cykgfHwKKwkJICAgIChvYmotPnR5cGUgPT0gT0JKX1RSRUUgJiYgIXJldnMtPnRyZWVfb2JqZWN0cykgfHwKKwkJICAgIChvYmotPnR5cGUgPT0gT0JKX1RBRyAmJiAhcmV2cy0+dGFnX29iamVjdHMpKQorCQkJY29udGludWU7CisKKwkJc2hvd19yZWFjaCgmb2JqLT5vaWQsIG9iai0+dHlwZSwgMCwgZWluZGV4LT5oYXNoZXNbaV0sIE5VTEwsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgaW5pdF90eXBlX2l0ZXJhdG9yKHN0cnVjdCBld2FoX2l0ZXJhdG9yICppdCwKKwkJCSAgICAgICBzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJICAgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9DT01NSVQ6CisJCWV3YWhfaXRlcmF0b3JfaW5pdChpdCwgYml0bWFwX2dpdC0+Y29tbWl0cyk7CisJCWJyZWFrOworCisJY2FzZSBPQkpfVFJFRToKKwkJZXdhaF9pdGVyYXRvcl9pbml0KGl0LCBiaXRtYXBfZ2l0LT50cmVlcyk7CisJCWJyZWFrOworCisJY2FzZSBPQkpfQkxPQjoKKwkJZXdhaF9pdGVyYXRvcl9pbml0KGl0LCBiaXRtYXBfZ2l0LT5ibG9icyk7CisJCWJyZWFrOworCisJY2FzZSBPQkpfVEFHOgorCQlld2FoX2l0ZXJhdG9yX2luaXQoaXQsIGJpdG1hcF9naXQtPnRhZ3MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygib2JqZWN0IHR5cGUgJWQgbm90IHN0b3JlZCBieSBiaXRtYXAgdHlwZSBpbmRleCIsIHR5cGUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb2JqZWN0c19mb3JfdHlwZSgKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCWVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJc2hvd19yZWFjaGFibGVfZm4gc2hvd19yZWFjaCkKK3sKKwlzaXplX3QgaSA9IDA7CisJdWludDMyX3Qgb2Zmc2V0OworCisJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisJZXdvcmRfdCBmaWx0ZXI7CisKKwlzdHJ1Y3QgYml0bWFwICpvYmplY3RzID0gYml0bWFwX2dpdC0+cmVzdWx0OworCisJaW5pdF90eXBlX2l0ZXJhdG9yKCZpdCwgYml0bWFwX2dpdCwgb2JqZWN0X3R5cGUpOworCisJZm9yIChpID0gMDsgaSA8IG9iamVjdHMtPndvcmRfYWxsb2MgJiYKKwkJCWV3YWhfaXRlcmF0b3JfbmV4dCgmZmlsdGVyLCAmaXQpOyBpKyspIHsKKwkJZXdvcmRfdCB3b3JkID0gb2JqZWN0cy0+d29yZHNbaV0gJiBmaWx0ZXI7CisJCXNpemVfdCBwb3MgPSAoaSAqIEJJVFNfSU5fRVdPUkQpOworCisJCWlmICghd29yZCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgQklUU19JTl9FV09SRDsgKytvZmZzZXQpIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJc3RydWN0IHJldmluZGV4X2VudHJ5ICplbnRyeTsKKwkJCXVpbnQzMl90IGhhc2ggPSAwOworCisJCQlpZiAoKHdvcmQgPj4gb2Zmc2V0KSA9PSAwKQorCQkJCWJyZWFrOworCisJCQlvZmZzZXQgKz0gZXdhaF9iaXRfY3R6NjQod29yZCA+PiBvZmZzZXQpOworCisJCQllbnRyeSA9ICZiaXRtYXBfZ2l0LT5wYWNrLT5yZXZpbmRleFtwb3MgKyBvZmZzZXRdOworCQkJbnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgYml0bWFwX2dpdC0+cGFjaywgZW50cnktPm5yKTsKKworCQkJaWYgKGJpdG1hcF9naXQtPmhhc2hlcykKKwkJCQloYXNoID0gZ2V0X2JlMzIoYml0bWFwX2dpdC0+aGFzaGVzICsgZW50cnktPm5yKTsKKworCQkJc2hvd19yZWFjaCgmb2lkLCBvYmplY3RfdHlwZSwgMCwgaGFzaCwgYml0bWFwX2dpdC0+cGFjaywgZW50cnktPm9mZnNldCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgaW5fYml0bWFwcGVkX3BhY2soc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCSAgICAgc3RydWN0IG9iamVjdF9saXN0ICpyb290cykKK3sKKwl3aGlsZSAocm9vdHMpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcm9vdHMtPml0ZW07CisJCXJvb3RzID0gcm9vdHMtPm5leHQ7CisKKwkJaWYgKGZpbmRfcGFja19lbnRyeV9vbmUob2JqZWN0LT5vaWQuaGFzaCwgYml0bWFwX2dpdC0+cGFjaykgPiAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYml0bWFwICpmaW5kX3RpcF9ibG9icyhzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCSAgICAgc3RydWN0IG9iamVjdF9saXN0ICp0aXBfb2JqZWN0cykKK3sKKwlzdHJ1Y3QgYml0bWFwICpyZXN1bHQgPSBiaXRtYXBfbmV3KCk7CisJc3RydWN0IG9iamVjdF9saXN0ICpwOworCisJZm9yIChwID0gdGlwX29iamVjdHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWludCBwb3M7CisKKwkJaWYgKHAtPml0ZW0tPnR5cGUgIT0gT0JKX0JMT0IpCisJCQljb250aW51ZTsKKworCQlwb3MgPSBiaXRtYXBfcG9zaXRpb24oYml0bWFwX2dpdCwgJnAtPml0ZW0tPm9pZCk7CisJCWlmIChwb3MgPCAwKQorCQkJY29udGludWU7CisKKwkJYml0bWFwX3NldChyZXN1bHQsIHBvcyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZmlsdGVyX2JpdG1hcF9ibG9iX25vbmUoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkgICAgc3RydWN0IG9iamVjdF9saXN0ICp0aXBfb2JqZWN0cywKKwkJCQkgICAgc3RydWN0IGJpdG1hcCAqdG9fZmlsdGVyKQoreworCXN0cnVjdCBlaW5kZXggKmVpbmRleCA9ICZiaXRtYXBfZ2l0LT5leHRfaW5kZXg7CisJc3RydWN0IGJpdG1hcCAqdGlwczsKKwlzdHJ1Y3QgZXdhaF9pdGVyYXRvciBpdDsKKwlld29yZF90IG1hc2s7CisJdWludDMyX3QgaTsKKworCS8qCisJICogVGhlIG5vbi1iaXRtYXAgdmVyc2lvbiBvZiB0aGlzIGZpbHRlciBuZXZlciByZW1vdmVzCisJICogYmxvYnMgd2hpY2ggdGhlIG90aGVyIHNpZGUgc3BlY2lmaWNhbGx5IGFza2VkIGZvciwKKwkgKiBzbyB3ZSBtdXN0IG1hdGNoIHRoYXQgYmVoYXZpb3IuCisJICovCisJdGlwcyA9IGZpbmRfdGlwX2Jsb2JzKGJpdG1hcF9naXQsIHRpcF9vYmplY3RzKTsKKworCS8qCisJICogV2UgY2FuIHVzZSB0aGUgYmxvYiB0eXBlLWJpdG1hcCB0byB3b3JrIGluIHdob2xlIHdvcmRzCisJICogZm9yIHRoZSBvYmplY3RzIHRoYXQgYXJlIGFjdHVhbGx5IGluIHRoZSBiaXRtYXBwZWQgcGFja2ZpbGUuCisJICovCisJZm9yIChpID0gMCwgaW5pdF90eXBlX2l0ZXJhdG9yKCZpdCwgYml0bWFwX2dpdCwgT0JKX0JMT0IpOworCSAgICAgaSA8IHRvX2ZpbHRlci0+d29yZF9hbGxvYyAmJiBld2FoX2l0ZXJhdG9yX25leHQoJm1hc2ssICZpdCk7CisJICAgICBpKyspIHsKKwkJaWYgKGkgPCB0aXBzLT53b3JkX2FsbG9jKQorCQkJbWFzayAmPSB+dGlwcy0+d29yZHNbaV07CisJCXRvX2ZpbHRlci0+d29yZHNbaV0gJj0gfm1hc2s7CisJfQorCisJLyoKKwkgKiBDbGVhciBhbnkgYmxvYnMgdGhhdCB3ZXJlbid0IGluIHRoZSBwYWNrZmlsZSAoYW5kIHNvIHdvdWxkIG5vdCBoYXZlCisJICogYmVlbiBjYXVnaHQgYnkgdGhlIGxvb3AgYWJvdmUuIFdlJ2xsIGhhdmUgdG8gY2hlY2sgdGhlbQorCSAqIGluZGl2aWR1YWxseS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZWluZGV4LT5jb3VudDsgaSsrKSB7CisJCXVpbnQzMl90IHBvcyA9IGkgKyBiaXRtYXBfZ2l0LT5wYWNrLT5udW1fb2JqZWN0czsKKwkJaWYgKGVpbmRleC0+b2JqZWN0c1tpXS0+dHlwZSA9PSBPQkpfQkxPQiAmJgorCQkgICAgYml0bWFwX2dldCh0b19maWx0ZXIsIHBvcykgJiYKKwkJICAgICFiaXRtYXBfZ2V0KHRpcHMsIHBvcykpCisJCQliaXRtYXBfdW5zZXQodG9fZmlsdGVyLCBwb3MpOworCX0KKworCWJpdG1hcF9mcmVlKHRpcHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2l6ZV9ieV9wb3Moc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkgICAgIHVpbnQzMl90IHBvcykKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjayA9IGJpdG1hcF9naXQtPnBhY2s7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IE9CSkVDVF9JTkZPX0lOSVQ7CisKKwlvaS5zaXplcCA9ICZzaXplOworCisJaWYgKHBvcyA8IHBhY2stPm51bV9vYmplY3RzKSB7CisJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqZW50cnkgPSAmcGFjay0+cmV2aW5kZXhbcG9zXTsKKwkJaWYgKHBhY2tlZF9vYmplY3RfaW5mbyh0aGVfcmVwb3NpdG9yeSwgcGFjaywKKwkJCQkgICAgICAgZW50cnktPm9mZnNldCwgJm9pKSA8IDApIHsKKwkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQkJbnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgcGFjaywgZW50cnktPm5yKTsKKwkJCWRpZShfKCJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiKSwgb2lkX3RvX2hleCgmb2lkKSk7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgZWluZGV4ICplaW5kZXggPSAmYml0bWFwX2dpdC0+ZXh0X2luZGV4OworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBlaW5kZXgtPm9iamVjdHNbcG9zIC0gcGFjay0+bnVtX29iamVjdHNdOworCQlpZiAob2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHRoZV9yZXBvc2l0b3J5LCAmb2JqLT5vaWQsICZvaSwgMCkgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCX0KKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfYml0bWFwX2Jsb2JfbGltaXQoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCQkgICAgIHN0cnVjdCBvYmplY3RfbGlzdCAqdGlwX29iamVjdHMsCisJCQkJICAgICBzdHJ1Y3QgYml0bWFwICp0b19maWx0ZXIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGxpbWl0KQoreworCXN0cnVjdCBlaW5kZXggKmVpbmRleCA9ICZiaXRtYXBfZ2l0LT5leHRfaW5kZXg7CisJc3RydWN0IGJpdG1hcCAqdGlwczsKKwlzdHJ1Y3QgZXdhaF9pdGVyYXRvciBpdDsKKwlld29yZF90IG1hc2s7CisJdWludDMyX3QgaTsKKworCXRpcHMgPSBmaW5kX3RpcF9ibG9icyhiaXRtYXBfZ2l0LCB0aXBfb2JqZWN0cyk7CisKKwlmb3IgKGkgPSAwLCBpbml0X3R5cGVfaXRlcmF0b3IoJml0LCBiaXRtYXBfZ2l0LCBPQkpfQkxPQik7CisJICAgICBpIDwgdG9fZmlsdGVyLT53b3JkX2FsbG9jICYmIGV3YWhfaXRlcmF0b3JfbmV4dCgmbWFzaywgJml0KTsKKwkgICAgIGkrKykgeworCQlld29yZF90IHdvcmQgPSB0b19maWx0ZXItPndvcmRzW2ldICYgbWFzazsKKwkJdW5zaWduZWQgb2Zmc2V0OworCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgQklUU19JTl9FV09SRDsgb2Zmc2V0KyspIHsKKwkJCXVpbnQzMl90IHBvczsKKworCQkJaWYgKCh3b3JkID4+IG9mZnNldCkgPT0gMCkKKwkJCQlicmVhazsKKwkJCW9mZnNldCArPSBld2FoX2JpdF9jdHo2NCh3b3JkID4+IG9mZnNldCk7CisJCQlwb3MgPSBpICogQklUU19JTl9FV09SRCArIG9mZnNldDsKKworCQkJaWYgKCFiaXRtYXBfZ2V0KHRpcHMsIHBvcykgJiYKKwkJCSAgICBnZXRfc2l6ZV9ieV9wb3MoYml0bWFwX2dpdCwgcG9zKSA+PSBsaW1pdCkKKwkJCQliaXRtYXBfdW5zZXQodG9fZmlsdGVyLCBwb3MpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGVpbmRleC0+Y291bnQ7IGkrKykgeworCQl1aW50MzJfdCBwb3MgPSBpICsgYml0bWFwX2dpdC0+cGFjay0+bnVtX29iamVjdHM7CisJCWlmIChlaW5kZXgtPm9iamVjdHNbaV0tPnR5cGUgPT0gT0JKX0JMT0IgJiYKKwkJICAgIGJpdG1hcF9nZXQodG9fZmlsdGVyLCBwb3MpICYmCisJCSAgICAhYml0bWFwX2dldCh0aXBzLCBwb3MpICYmCisJCSAgICBnZXRfc2l6ZV9ieV9wb3MoYml0bWFwX2dpdCwgcG9zKSA+PSBsaW1pdCkKKwkJCWJpdG1hcF91bnNldCh0b19maWx0ZXIsIHBvcyk7CisJfQorCisJYml0bWFwX2ZyZWUodGlwcyk7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX2JpdG1hcChzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJIHN0cnVjdCBvYmplY3RfbGlzdCAqdGlwX29iamVjdHMsCisJCQkgc3RydWN0IGJpdG1hcCAqdG9fZmlsdGVyLAorCQkJIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcikKK3sKKwlpZiAoIWZpbHRlciB8fCBmaWx0ZXItPmNob2ljZSA9PSBMT0ZDX0RJU0FCTEVEKQorCQlyZXR1cm4gMDsKKworCWlmIChmaWx0ZXItPmNob2ljZSA9PSBMT0ZDX0JMT0JfTk9ORSkgeworCQlpZiAoYml0bWFwX2dpdCkKKwkJCWZpbHRlcl9iaXRtYXBfYmxvYl9ub25lKGJpdG1hcF9naXQsIHRpcF9vYmplY3RzLAorCQkJCQkJdG9fZmlsdGVyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGZpbHRlci0+Y2hvaWNlID09IExPRkNfQkxPQl9MSU1JVCkgeworCQlpZiAoYml0bWFwX2dpdCkKKwkJCWZpbHRlcl9iaXRtYXBfYmxvYl9saW1pdChiaXRtYXBfZ2l0LCB0aXBfb2JqZWN0cywKKwkJCQkJCSB0b19maWx0ZXIsCisJCQkJCQkgZmlsdGVyLT5ibG9iX2xpbWl0X3ZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogZmlsdGVyIGNob2ljZSBub3QgaGFuZGxlZCAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBjYW5fZmlsdGVyX2JpdG1hcChzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zICpmaWx0ZXIpCit7CisJcmV0dXJuICFmaWx0ZXJfYml0bWFwKE5VTEwsIE5VTEwsIE5VTEwsIGZpbHRlcik7Cit9CisKK3N0cnVjdCBiaXRtYXBfaW5kZXggKnByZXBhcmVfYml0bWFwX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyAqZmlsdGVyKQoreworCXVuc2lnbmVkIGludCBpOworCisJc3RydWN0IG9iamVjdF9saXN0ICp3YW50cyA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9saXN0ICpoYXZlcyA9IE5VTEw7CisKKwlzdHJ1Y3QgYml0bWFwICp3YW50c19iaXRtYXAgPSBOVUxMOworCXN0cnVjdCBiaXRtYXAgKmhhdmVzX2JpdG1hcCA9IE5VTEw7CisKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0OworCisJLyoKKwkgKiBXZSBjYW4ndCBkbyBwYXRoc3BlYyBsaW1pdGluZyB3aXRoIGJpdG1hcHMsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdworCSAqIHdoaWNoIGNvbW1pdHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBvYmplY3QgY2hhbmdlcyAobGV0IGFsb25lCisJICogZXZlbiB3aGljaCBvYmplY3RzIGFyZSBhc3NvY2lhdGVkIHdpdGggd2hpY2ggcGF0aHMpLgorCSAqLworCWlmIChyZXZzLT5wcnVuZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWNhbl9maWx0ZXJfYml0bWFwKGZpbHRlcikpCisJCXJldHVybiBOVUxMOworCisJLyogdHJ5IHRvIG9wZW4gYSBiaXRtYXBwZWQgcGFjaywgYnV0IGRvbid0IHBhcnNlIGl0IHlldAorCSAqIGJlY2F1c2Ugd2UgbWF5IG5vdCBuZWVkIHRvIHVzZSBpdCAqLworCWJpdG1hcF9naXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqYml0bWFwX2dpdCkpOworCWlmIChvcGVuX3BhY2tfYml0bWFwKHJldnMtPnJlcG8sIGJpdG1hcF9naXQpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJZm9yIChpID0gMDsgaSA8IHJldnMtPnBlbmRpbmcubnI7ICsraSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0uaXRlbTsKKworCQlpZiAob2JqZWN0LT50eXBlID09IE9CSl9OT05FKQorCQkJcGFyc2Vfb2JqZWN0X29yX2RpZSgmb2JqZWN0LT5vaWQsIE5VTEwpOworCisJCXdoaWxlIChvYmplY3QtPnR5cGUgPT0gT0JKX1RBRykgeworCQkJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKikgb2JqZWN0OworCisJCQlpZiAob2JqZWN0LT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJmhhdmVzKTsKKwkJCWVsc2UKKwkJCQlvYmplY3RfbGlzdF9pbnNlcnQob2JqZWN0LCAmd2FudHMpOworCisJCQlvYmplY3QgPSBwYXJzZV9vYmplY3Rfb3JfZGllKGdldF90YWdnZWRfb2lkKHRhZyksIE5VTEwpOworCQl9CisKKwkJaWYgKG9iamVjdC0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJmhhdmVzKTsKKwkJZWxzZQorCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJndhbnRzKTsKKwl9CisKKwkvKgorCSAqIGlmIHdlIGhhdmUgYSBIQVZFUyBsaXN0LCBidXQgbm9uZSBvZiB0aG9zZSBoYXZlcyBpcyBjb250YWluZWQKKwkgKiBpbiB0aGUgcGFja2ZpbGUgdGhhdCBoYXMgYSBiaXRtYXAsIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8KKwkgKiBvcHRpbWl6ZSBoZXJlCisJICovCisJaWYgKGhhdmVzICYmICFpbl9iaXRtYXBwZWRfcGFjayhiaXRtYXBfZ2l0LCBoYXZlcykpCisJCWdvdG8gY2xlYW51cDsKKworCS8qIGlmIHdlIGRvbid0IHdhbnQgYW55dGhpbmcsIHdlJ3JlIGRvbmUgaGVyZSAqLworCWlmICghd2FudHMpCisJCWdvdG8gY2xlYW51cDsKKworCS8qCisJICogbm93IHdlJ3JlIGdvaW5nIHRvIHVzZSBiaXRtYXBzLCBzbyBsb2FkIHRoZSBhY3R1YWwgYml0bWFwIGVudHJpZXMKKwkgKiBmcm9tIGRpc2suIHRoaXMgaXMgdGhlIHBvaW50IG9mIG5vIHJldHVybjsgYWZ0ZXIgdGhpcyB0aGUgcmV2X2xpc3QKKwkgKiBiZWNvbWVzIGludmFsaWRhdGVkIGFuZCB3ZSBtdXN0IHBlcmZvcm0gdGhlIHJldndhbGsgdGhyb3VnaCBiaXRtYXBzCisJICovCisJaWYgKGxvYWRfcGFja19iaXRtYXAoYml0bWFwX2dpdCkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKwlvYmplY3RfYXJyYXlfY2xlYXIoJnJldnMtPnBlbmRpbmcpOworCisJaWYgKGhhdmVzKSB7CisJCXJldnMtPmlnbm9yZV9taXNzaW5nX2xpbmtzID0gMTsKKwkJaGF2ZXNfYml0bWFwID0gZmluZF9vYmplY3RzKGJpdG1hcF9naXQsIHJldnMsIGhhdmVzLCBOVUxMKTsKKwkJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCQlyZXZzLT5pZ25vcmVfbWlzc2luZ19saW5rcyA9IDA7CisKKwkJaWYgKGhhdmVzX2JpdG1hcCA9PSBOVUxMKQorCQkJQlVHKCJmYWlsZWQgdG8gcGVyZm9ybSBiaXRtYXAgd2FsayIpOworCX0KKworCXdhbnRzX2JpdG1hcCA9IGZpbmRfb2JqZWN0cyhiaXRtYXBfZ2l0LCByZXZzLCB3YW50cywgaGF2ZXNfYml0bWFwKTsKKworCWlmICghd2FudHNfYml0bWFwKQorCQlCVUcoImZhaWxlZCB0byBwZXJmb3JtIGJpdG1hcCB3YWxrIik7CisKKwlpZiAoaGF2ZXNfYml0bWFwKQorCQliaXRtYXBfYW5kX25vdCh3YW50c19iaXRtYXAsIGhhdmVzX2JpdG1hcCk7CisKKwlmaWx0ZXJfYml0bWFwKGJpdG1hcF9naXQsIHdhbnRzLCB3YW50c19iaXRtYXAsIGZpbHRlcik7CisKKwliaXRtYXBfZ2l0LT5yZXN1bHQgPSB3YW50c19iaXRtYXA7CisJYml0bWFwX2dpdC0+aGF2ZXMgPSBoYXZlc19iaXRtYXA7CisKKwlvYmplY3RfbGlzdF9mcmVlKCZ3YW50cyk7CisJb2JqZWN0X2xpc3RfZnJlZSgmaGF2ZXMpOworCisJcmV0dXJuIGJpdG1hcF9naXQ7CisKK2NsZWFudXA6CisJZnJlZV9iaXRtYXBfaW5kZXgoYml0bWFwX2dpdCk7CisJb2JqZWN0X2xpc3RfZnJlZSgmd2FudHMpOworCW9iamVjdF9saXN0X2ZyZWUoJmhhdmVzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdHJ5X3BhcnRpYWxfcmV1c2Uoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCSAgICAgIHNpemVfdCBwb3MsCisJCQkgICAgICBzdHJ1Y3QgYml0bWFwICpyZXVzZSwKKwkJCSAgICAgIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycykKK3sKKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwlvZmZfdCBvZmZzZXQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWlmIChwb3MgPj0gYml0bWFwX2dpdC0+cGFjay0+bnVtX29iamVjdHMpCisJCXJldHVybjsgLyogbm90IGFjdHVhbGx5IGluIHRoZSBwYWNrICovCisKKwlyZXZpZHggPSAmYml0bWFwX2dpdC0+cGFjay0+cmV2aW5kZXhbcG9zXTsKKwlvZmZzZXQgPSByZXZpZHgtPm9mZnNldDsKKwl0eXBlID0gdW5wYWNrX29iamVjdF9oZWFkZXIoYml0bWFwX2dpdC0+cGFjaywgd19jdXJzLCAmb2Zmc2V0LCAmc2l6ZSk7CisJaWYgKHR5cGUgPCAwKQorCQlyZXR1cm47IC8qIGJyb2tlbiBwYWNrZmlsZSwgcHVudCAqLworCisJaWYgKHR5cGUgPT0gT0JKX1JFRl9ERUxUQSB8fCB0eXBlID09IE9CSl9PRlNfREVMVEEpIHsKKwkJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJCWludCBiYXNlX3BvczsKKworCQkvKgorCQkgKiBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgYmFzZSBvYmplY3Qgc28gd2UgY2FuIGxvb2sgaXQgdXAKKwkJICogaW4gb3VyIGJpdG1hcHMuIElmIHdlIGNhbid0IGNvbWUgdXAgd2l0aCBhbiBvZmZzZXQsIG9yIGlmCisJCSAqIHRoYXQgb2Zmc2V0IGlzIG5vdCBpbiB0aGUgcmV2aWR4LCB0aGUgcGFjayBpcyBjb3JydXB0LgorCQkgKiBUaGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLCBzbyBqdXN0IHB1bnQgb24gdGhpcyBvYmplY3QsCisJCSAqIGFuZCB0aGUgbm9ybWFsIHNsb3cgcGF0aCB3aWxsIGNvbXBsYWluIGFib3V0IGl0IGluCisJCSAqIG1vcmUgZGV0YWlsLgorCQkgKi8KKwkJYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShiaXRtYXBfZ2l0LT5wYWNrLCB3X2N1cnMsCisJCQkJCSAgICAgJm9mZnNldCwgdHlwZSwgcmV2aWR4LT5vZmZzZXQpOworCQlpZiAoIWJhc2Vfb2Zmc2V0KQorCQkJcmV0dXJuOworCQliYXNlX3BvcyA9IGZpbmRfcmV2aW5kZXhfcG9zaXRpb24oYml0bWFwX2dpdC0+cGFjaywgYmFzZV9vZmZzZXQpOworCQlpZiAoYmFzZV9wb3MgPCAwKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIFdlIGFzc3VtZSBkZWx0YSBkZXBlbmRlbmNpZXMgYWx3YXlzIHBvaW50IGJhY2t3YXJkcy4gVGhpcworCQkgKiBsZXRzIHVzIGRvIGEgc2luZ2xlIHBhc3MsIGFuZCBpcyBiYXNpY2FsbHkgYWx3YXlzIHRydWUKKwkJICogZHVlIHRvIHRoZSB3YXkgT0ZTX0RFTFRBcyB3b3JrLiBZb3Ugd291bGQgbm90IHR5cGljYWxseQorCQkgKiBmaW5kIFJFRl9ERUxUQSBpbiBhIGJpdG1hcHBlZCBwYWNrLCBzaW5jZSB3ZSBvbmx5IGJpdG1hcAorCQkgKiBwYWNrcyB3ZSB3cml0ZSBmcmVzaCwgYW5kIE9GU19ERUxUQSBpcyB0aGUgZGVmYXVsdCkuIEJ1dAorCQkgKiBsZXQncyBkb3VibGUgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBwYWNrIHdhc24ndCB3cml0dGVuIHdpdGgKKwkJICogb2RkIHBhcmFtZXRlcnMuCisJCSAqLworCQlpZiAoYmFzZV9wb3MgPj0gcG9zKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIEFuZCBmaW5hbGx5LCBpZiB3ZSdyZSBub3Qgc2VuZGluZyB0aGUgYmFzZSBhcyBwYXJ0IG9mIG91cgorCQkgKiByZXVzZSBjaHVuaywgdGhlbiBkb24ndCBzZW5kIHRoaXMgb2JqZWN0IGVpdGhlci4gVGhlIGJhc2UKKwkJICogd291bGQgY29tZSBhZnRlciB1cywgYWxvbmcgd2l0aCBvdGhlciBvYmplY3RzIG5vdAorCQkgKiBuZWNlc3NhcmlseSBpbiB0aGUgcGFjaywgd2hpY2ggbWVhbnMgd2UnZCBuZWVkIHRvIGNvbnZlcnQKKwkJICogdG8gUkVGX0RFTFRBIG9uIHRoZSBmbHkuIEJldHRlciB0byBqdXN0IGxldCB0aGUgbm9ybWFsCisJCSAqIG9iamVjdF9lbnRyeSBjb2RlIHBhdGggaGFuZGxlIGl0LgorCQkgKi8KKwkJaWYgKCFiaXRtYXBfZ2V0KHJldXNlLCBiYXNlX3BvcykpCisJCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB3ZSBnb3QgaGVyZSwgdGhlbiB0aGUgb2JqZWN0IGlzIE9LIHRvIHJldXNlLiBNYXJrIGl0LgorCSAqLworCWJpdG1hcF9zZXQocmV1c2UsIHBvcyk7Cit9CisKK2ludCByZXVzZV9wYXJ0aWFsX3BhY2tmaWxlX2Zyb21fYml0bWFwKHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkJICAgICAgIHN0cnVjdCBwYWNrZWRfZ2l0ICoqcGFja2ZpbGVfb3V0LAorCQkJCSAgICAgICB1aW50MzJfdCAqZW50cmllcywKKwkJCQkgICAgICAgc3RydWN0IGJpdG1hcCAqKnJldXNlX291dCkKK3sKKwlzdHJ1Y3QgYml0bWFwICpyZXN1bHQgPSBiaXRtYXBfZ2l0LT5yZXN1bHQ7CisJc3RydWN0IGJpdG1hcCAqcmV1c2U7CisJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOworCXNpemVfdCBpID0gMDsKKwl1aW50MzJfdCBvZmZzZXQ7CisKKwlhc3NlcnQocmVzdWx0KTsKKworCXdoaWxlIChpIDwgcmVzdWx0LT53b3JkX2FsbG9jICYmIHJlc3VsdC0+d29yZHNbaV0gPT0gKGV3b3JkX3QpfjApCisJCWkrKzsKKworCS8qIERvbid0IG1hcmsgb2JqZWN0cyBub3QgaW4gdGhlIHBhY2tmaWxlICovCisJaWYgKGkgPiBiaXRtYXBfZ2l0LT5wYWNrLT5udW1fb2JqZWN0cyAvIEJJVFNfSU5fRVdPUkQpCisJCWkgPSBiaXRtYXBfZ2l0LT5wYWNrLT5udW1fb2JqZWN0cyAvIEJJVFNfSU5fRVdPUkQ7CisKKwlyZXVzZSA9IGJpdG1hcF93b3JkX2FsbG9jKGkpOworCW1lbXNldChyZXVzZS0+d29yZHMsIDB4RkYsIGkgKiBzaXplb2YoZXdvcmRfdCkpOworCisJZm9yICg7IGkgPCByZXN1bHQtPndvcmRfYWxsb2M7ICsraSkgeworCQlld29yZF90IHdvcmQgPSByZXN1bHQtPndvcmRzW2ldOworCQlzaXplX3QgcG9zID0gKGkgKiBCSVRTX0lOX0VXT1JEKTsKKworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEJJVFNfSU5fRVdPUkQ7ICsrb2Zmc2V0KSB7CisJCQlpZiAoKHdvcmQgPj4gb2Zmc2V0KSA9PSAwKQorCQkJCWJyZWFrOworCisJCQlvZmZzZXQgKz0gZXdhaF9iaXRfY3R6NjQod29yZCA+PiBvZmZzZXQpOworCQkJdHJ5X3BhcnRpYWxfcmV1c2UoYml0bWFwX2dpdCwgcG9zICsgb2Zmc2V0LCByZXVzZSwgJndfY3Vycyk7CisJCX0KKwl9CisKKwl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCisJKmVudHJpZXMgPSBiaXRtYXBfcG9wY291bnQocmV1c2UpOworCWlmICghKmVudHJpZXMpIHsKKwkJYml0bWFwX2ZyZWUocmV1c2UpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBEcm9wIGFueSByZXVzZWQgb2JqZWN0cyBmcm9tIHRoZSByZXN1bHQsIHNpbmNlIHRoZXkgd2lsbCBub3QKKwkgKiBuZWVkIHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseS4KKwkgKi8KKwliaXRtYXBfYW5kX25vdChyZXN1bHQsIHJldXNlKTsKKwkqcGFja2ZpbGVfb3V0ID0gYml0bWFwX2dpdC0+cGFjazsKKwkqcmV1c2Vfb3V0ID0gcmV1c2U7CisJcmV0dXJuIDA7Cit9CisKK2ludCBiaXRtYXBfd2Fsa19jb250YWlucyhzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJIHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBpZHg7CisKKwlpZiAoIWJpdG1hcCkKKwkJcmV0dXJuIDA7CisKKwlpZHggPSBiaXRtYXBfcG9zaXRpb24oYml0bWFwX2dpdCwgb2lkKTsKKwlyZXR1cm4gaWR4ID49IDAgJiYgYml0bWFwX2dldChiaXRtYXAsIGlkeCk7Cit9CisKK3ZvaWQgdHJhdmVyc2VfYml0bWFwX2NvbW1pdF9saXN0KHN0cnVjdCBiaXRtYXBfaW5kZXggKmJpdG1hcF9naXQsCisJCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgc2hvd19yZWFjaGFibGVfZm4gc2hvd19yZWFjaGFibGUpCit7CisJYXNzZXJ0KGJpdG1hcF9naXQtPnJlc3VsdCk7CisKKwlzaG93X29iamVjdHNfZm9yX3R5cGUoYml0bWFwX2dpdCwgT0JKX0NPTU1JVCwgc2hvd19yZWFjaGFibGUpOworCWlmIChyZXZzLT50cmVlX29iamVjdHMpCisJCXNob3dfb2JqZWN0c19mb3JfdHlwZShiaXRtYXBfZ2l0LCBPQkpfVFJFRSwgc2hvd19yZWFjaGFibGUpOworCWlmIChyZXZzLT5ibG9iX29iamVjdHMpCisJCXNob3dfb2JqZWN0c19mb3JfdHlwZShiaXRtYXBfZ2l0LCBPQkpfQkxPQiwgc2hvd19yZWFjaGFibGUpOworCWlmIChyZXZzLT50YWdfb2JqZWN0cykKKwkJc2hvd19vYmplY3RzX2Zvcl90eXBlKGJpdG1hcF9naXQsIE9CSl9UQUcsIHNob3dfcmVhY2hhYmxlKTsKKworCXNob3dfZXh0ZW5kZWRfb2JqZWN0cyhiaXRtYXBfZ2l0LCByZXZzLCBzaG93X3JlYWNoYWJsZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjb3VudF9vYmplY3RfdHlwZShzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCSAgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCXN0cnVjdCBiaXRtYXAgKm9iamVjdHMgPSBiaXRtYXBfZ2l0LT5yZXN1bHQ7CisJc3RydWN0IGVpbmRleCAqZWluZGV4ID0gJmJpdG1hcF9naXQtPmV4dF9pbmRleDsKKworCXVpbnQzMl90IGkgPSAwLCBjb3VudCA9IDA7CisJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisJZXdvcmRfdCBmaWx0ZXI7CisKKwlpbml0X3R5cGVfaXRlcmF0b3IoJml0LCBiaXRtYXBfZ2l0LCB0eXBlKTsKKworCXdoaWxlIChpIDwgb2JqZWN0cy0+d29yZF9hbGxvYyAmJiBld2FoX2l0ZXJhdG9yX25leHQoJmZpbHRlciwgJml0KSkgeworCQlld29yZF90IHdvcmQgPSBvYmplY3RzLT53b3Jkc1tpKytdICYgZmlsdGVyOworCQljb3VudCArPSBld2FoX2JpdF9wb3Bjb3VudDY0KHdvcmQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBlaW5kZXgtPmNvdW50OyArK2kpIHsKKwkJaWYgKGVpbmRleC0+b2JqZWN0c1tpXS0+dHlwZSA9PSB0eXBlICYmCisJCQliaXRtYXBfZ2V0KG9iamVjdHMsIGJpdG1hcF9naXQtPnBhY2stPm51bV9vYmplY3RzICsgaSkpCisJCQljb3VudCsrOworCX0KKworCXJldHVybiBjb3VudDsKK30KKwordm9pZCBjb3VudF9iaXRtYXBfY29tbWl0X2xpc3Qoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCSAgICAgIHVpbnQzMl90ICpjb21taXRzLCB1aW50MzJfdCAqdHJlZXMsCisJCQkgICAgICB1aW50MzJfdCAqYmxvYnMsIHVpbnQzMl90ICp0YWdzKQoreworCWFzc2VydChiaXRtYXBfZ2l0LT5yZXN1bHQpOworCisJaWYgKGNvbW1pdHMpCisJCSpjb21taXRzID0gY291bnRfb2JqZWN0X3R5cGUoYml0bWFwX2dpdCwgT0JKX0NPTU1JVCk7CisKKwlpZiAodHJlZXMpCisJCSp0cmVlcyA9IGNvdW50X29iamVjdF90eXBlKGJpdG1hcF9naXQsIE9CSl9UUkVFKTsKKworCWlmIChibG9icykKKwkJKmJsb2JzID0gY291bnRfb2JqZWN0X3R5cGUoYml0bWFwX2dpdCwgT0JKX0JMT0IpOworCisJaWYgKHRhZ3MpCisJCSp0YWdzID0gY291bnRfb2JqZWN0X3R5cGUoYml0bWFwX2dpdCwgT0JKX1RBRyk7Cit9CisKK3N0cnVjdCBiaXRtYXBfdGVzdF9kYXRhIHsKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0OworCXN0cnVjdCBiaXRtYXAgKmJhc2U7CisJc3RydWN0IHByb2dyZXNzICpwcmc7CisJc2l6ZV90IHNlZW47Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0X3Nob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYml0bWFwX3Rlc3RfZGF0YSAqdGRhdGEgPSBkYXRhOworCWludCBiaXRtYXBfcG9zOworCisJYml0bWFwX3BvcyA9IGJpdG1hcF9wb3NpdGlvbih0ZGF0YS0+Yml0bWFwX2dpdCwgJm9iamVjdC0+b2lkKTsKKwlpZiAoYml0bWFwX3BvcyA8IDApCisJCWRpZSgiT2JqZWN0IG5vdCBpbiBiaXRtYXA6ICVzXG4iLCBvaWRfdG9faGV4KCZvYmplY3QtPm9pZCkpOworCisJYml0bWFwX3NldCh0ZGF0YS0+YmFzZSwgYml0bWFwX3Bvcyk7CisJZGlzcGxheV9wcm9ncmVzcyh0ZGF0YS0+cHJnLCArK3RkYXRhLT5zZWVuKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGJpdG1hcF90ZXN0X2RhdGEgKnRkYXRhID0gZGF0YTsKKwlpbnQgYml0bWFwX3BvczsKKworCWJpdG1hcF9wb3MgPSBiaXRtYXBfcG9zaXRpb24odGRhdGEtPmJpdG1hcF9naXQsCisJCQkJICAgICAmY29tbWl0LT5vYmplY3Qub2lkKTsKKwlpZiAoYml0bWFwX3BvcyA8IDApCisJCWRpZSgiT2JqZWN0IG5vdCBpbiBiaXRtYXA6ICVzXG4iLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKworCWJpdG1hcF9zZXQodGRhdGEtPmJhc2UsIGJpdG1hcF9wb3MpOworCWRpc3BsYXlfcHJvZ3Jlc3ModGRhdGEtPnByZywgKyt0ZGF0YS0+c2Vlbik7Cit9CisKK3ZvaWQgdGVzdF9iaXRtYXBfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IG9iamVjdCAqcm9vdDsKKwlzdHJ1Y3QgYml0bWFwICpyZXN1bHQgPSBOVUxMOworCWtoaXRlcl90IHBvczsKKwlzaXplX3QgcmVzdWx0X3BvcGNudDsKKwlzdHJ1Y3QgYml0bWFwX3Rlc3RfZGF0YSB0ZGF0YTsKKwlzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0OworCisJaWYgKCEoYml0bWFwX2dpdCA9IHByZXBhcmVfYml0bWFwX2dpdChyZXZzLT5yZXBvKSkpCisJCWRpZSgiZmFpbGVkIHRvIGxvYWQgYml0bWFwIGluZGV4ZXMiKTsKKworCWlmIChyZXZzLT5wZW5kaW5nLm5yICE9IDEpCisJCWRpZSgieW91IG11c3Qgc3BlY2lmeSBleGFjdGx5IG9uZSBjb21taXQgdG8gdGVzdCIpOworCisJZnByaW50ZihzdGRlcnIsICJCaXRtYXAgdiVkIHRlc3QgKCVkIGVudHJpZXMgbG9hZGVkKVxuIiwKKwkJYml0bWFwX2dpdC0+dmVyc2lvbiwgYml0bWFwX2dpdC0+ZW50cnlfY291bnQpOworCisJcm9vdCA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1swXS5pdGVtOworCXBvcyA9IGtoX2dldF9vaWRfbWFwKGJpdG1hcF9naXQtPmJpdG1hcHMsIHJvb3QtPm9pZCk7CisKKwlpZiAocG9zIDwga2hfZW5kKGJpdG1hcF9naXQtPmJpdG1hcHMpKSB7CisJCXN0cnVjdCBzdG9yZWRfYml0bWFwICpzdCA9IGtoX3ZhbHVlKGJpdG1hcF9naXQtPmJpdG1hcHMsIHBvcyk7CisJCXN0cnVjdCBld2FoX2JpdG1hcCAqYm0gPSBsb29rdXBfc3RvcmVkX2JpdG1hcChzdCk7CisKKwkJZnByaW50ZihzdGRlcnIsICJGb3VuZCBiaXRtYXAgZm9yICVzLiAlZCBiaXRzIC8gJTA4eCBjaGVja3N1bVxuIiwKKwkJCW9pZF90b19oZXgoJnJvb3QtPm9pZCksIChpbnQpYm0tPmJpdF9zaXplLCBld2FoX2NoZWNrc3VtKGJtKSk7CisKKwkJcmVzdWx0ID0gZXdhaF90b19iaXRtYXAoYm0pOworCX0KKworCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJZGllKCJDb21taXQgJXMgZG9lc24ndCBoYXZlIGFuIGluZGV4ZWQgYml0bWFwIiwgb2lkX3RvX2hleCgmcm9vdC0+b2lkKSk7CisKKwlyZXZzLT50YWdfb2JqZWN0cyA9IDE7CisJcmV2cy0+dHJlZV9vYmplY3RzID0gMTsKKwlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCisJcmVzdWx0X3BvcGNudCA9IGJpdG1hcF9wb3Bjb3VudChyZXN1bHQpOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXZzKSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCisJdGRhdGEuYml0bWFwX2dpdCA9IGJpdG1hcF9naXQ7CisJdGRhdGEuYmFzZSA9IGJpdG1hcF9uZXcoKTsKKwl0ZGF0YS5wcmcgPSBzdGFydF9wcm9ncmVzcygiVmVyaWZ5aW5nIGJpdG1hcCBlbnRyaWVzIiwgcmVzdWx0X3BvcGNudCk7CisJdGRhdGEuc2VlbiA9IDA7CisKKwl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXZzLCAmdGVzdF9zaG93X2NvbW1pdCwgJnRlc3Rfc2hvd19vYmplY3QsICZ0ZGF0YSk7CisKKwlzdG9wX3Byb2dyZXNzKCZ0ZGF0YS5wcmcpOworCisJaWYgKGJpdG1hcF9lcXVhbHMocmVzdWx0LCB0ZGF0YS5iYXNlKSkKKwkJZnByaW50ZihzdGRlcnIsICJPSyFcbiIpOworCWVsc2UKKwkJZnByaW50ZihzdGRlcnIsICJNaXNtYXRjaCFcbiIpOworCisJZnJlZV9iaXRtYXBfaW5kZXgoYml0bWFwX2dpdCk7Cit9CisKK3N0YXRpYyBpbnQgcmVidWlsZF9iaXRtYXAodWludDMyX3QgKnJlcG9zaXRpb24sCisJCQkgIHN0cnVjdCBld2FoX2JpdG1hcCAqc291cmNlLAorCQkJICBzdHJ1Y3QgYml0bWFwICpkZXN0KQoreworCXVpbnQzMl90IHBvcyA9IDA7CisJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisJZXdvcmRfdCB3b3JkOworCisJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgc291cmNlKTsKKworCXdoaWxlIChld2FoX2l0ZXJhdG9yX25leHQoJndvcmQsICZpdCkpIHsKKwkJdWludDMyX3Qgb2Zmc2V0LCBiaXRfcG9zOworCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgQklUU19JTl9FV09SRDsgKytvZmZzZXQpIHsKKwkJCWlmICgod29yZCA+PiBvZmZzZXQpID09IDApCisJCQkJYnJlYWs7CisKKwkJCW9mZnNldCArPSBld2FoX2JpdF9jdHo2NCh3b3JkID4+IG9mZnNldCk7CisKKwkJCWJpdF9wb3MgPSByZXBvc2l0aW9uW3BvcyArIG9mZnNldF07CisJCQlpZiAoYml0X3BvcyA+IDApCisJCQkJYml0bWFwX3NldChkZXN0LCBiaXRfcG9zIC0gMSk7CisJCQllbHNlIC8qIGNhbid0IHJldXNlLCB3ZSBkb24ndCBoYXZlIHRoZSBvYmplY3QgKi8KKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQlwb3MgKz0gQklUU19JTl9FV09SRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWJ1aWxkX2V4aXN0aW5nX2JpdG1hcHMoc3RydWN0IGJpdG1hcF9pbmRleCAqYml0bWFwX2dpdCwKKwkJCSAgICAgc3RydWN0IHBhY2tpbmdfZGF0YSAqbWFwcGluZywKKwkJCSAgICAga2hfb2lkX21hcF90ICpyZXVzZWRfYml0bWFwcywKKwkJCSAgICAgaW50IHNob3dfcHJvZ3Jlc3MpCit7CisJdWludDMyX3QgaSwgbnVtX29iamVjdHM7CisJdWludDMyX3QgKnJlcG9zaXRpb247CisJc3RydWN0IGJpdG1hcCAqcmVidWlsZDsKKwlzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqc3RvcmVkOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCisJa2hpdGVyX3QgaGFzaF9wb3M7CisJaW50IGhhc2hfcmV0OworCisJbnVtX29iamVjdHMgPSBiaXRtYXBfZ2l0LT5wYWNrLT5udW1fb2JqZWN0czsKKwlyZXBvc2l0aW9uID0geGNhbGxvYyhudW1fb2JqZWN0cywgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX29iamVjdHM7ICsraSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IHJldmluZGV4X2VudHJ5ICplbnRyeTsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2U7CisKKwkJZW50cnkgPSAmYml0bWFwX2dpdC0+cGFjay0+cmV2aW5kZXhbaV07CisJCW50aF9wYWNrZWRfb2JqZWN0X2lkKCZvaWQsIGJpdG1hcF9naXQtPnBhY2ssIGVudHJ5LT5ucik7CisJCW9lID0gcGFja2xpc3RfZmluZChtYXBwaW5nLCAmb2lkKTsKKworCQlpZiAob2UpCisJCQlyZXBvc2l0aW9uW2ldID0gb2VfaW5fcGFja19wb3MobWFwcGluZywgb2UpICsgMTsKKwl9CisKKwlyZWJ1aWxkID0gYml0bWFwX25ldygpOworCWkgPSAwOworCisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoIlJldXNpbmcgYml0bWFwcyIsIDApOworCisJa2hfZm9yZWFjaF92YWx1ZShiaXRtYXBfZ2l0LT5iaXRtYXBzLCBzdG9yZWQsIHsKKwkJaWYgKHN0b3JlZC0+ZmxhZ3MgJiBCSVRNQVBfRkxBR19SRVVTRSkgeworCQkJaWYgKCFyZWJ1aWxkX2JpdG1hcChyZXBvc2l0aW9uLAorCQkJCQkgICAgbG9va3VwX3N0b3JlZF9iaXRtYXAoc3RvcmVkKSwKKwkJCQkJICAgIHJlYnVpbGQpKSB7CisJCQkJaGFzaF9wb3MgPSBraF9wdXRfb2lkX21hcChyZXVzZWRfYml0bWFwcywKKwkJCQkJCQkgIHN0b3JlZC0+b2lkLAorCQkJCQkJCSAgJmhhc2hfcmV0KTsKKwkJCQlraF92YWx1ZShyZXVzZWRfYml0bWFwcywgaGFzaF9wb3MpID0KKwkJCQkJYml0bWFwX3RvX2V3YWgocmVidWlsZCk7CisJCQl9CisJCQliaXRtYXBfcmVzZXQocmVidWlsZCk7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK2kpOworCQl9CisJfSk7CisKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlmcmVlKHJlcG9zaXRpb24pOworCWJpdG1hcF9mcmVlKHJlYnVpbGQpOworCXJldHVybiAwOworfQorCit2b2lkIGZyZWVfYml0bWFwX2luZGV4KHN0cnVjdCBiaXRtYXBfaW5kZXggKmIpCit7CisJaWYgKCFiKQorCQlyZXR1cm47CisKKwlpZiAoYi0+bWFwKQorCQltdW5tYXAoYi0+bWFwLCBiLT5tYXBfc2l6ZSk7CisJZXdhaF9wb29sX2ZyZWUoYi0+Y29tbWl0cyk7CisJZXdhaF9wb29sX2ZyZWUoYi0+dHJlZXMpOworCWV3YWhfcG9vbF9mcmVlKGItPmJsb2JzKTsKKwlld2FoX3Bvb2xfZnJlZShiLT50YWdzKTsKKwlraF9kZXN0cm95X29pZF9tYXAoYi0+Yml0bWFwcyk7CisJZnJlZShiLT5leHRfaW5kZXgub2JqZWN0cyk7CisJZnJlZShiLT5leHRfaW5kZXguaGFzaGVzKTsKKwliaXRtYXBfZnJlZShiLT5yZXN1bHQpOworCWJpdG1hcF9mcmVlKGItPmhhdmVzKTsKKwlmcmVlKGIpOworfQorCitpbnQgYml0bWFwX2hhc19vaWRfaW5fdW5pbnRlcmVzdGluZyhzdHJ1Y3QgYml0bWFwX2luZGV4ICpiaXRtYXBfZ2l0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIGJpdG1hcF9naXQgJiYKKwkJYml0bWFwX3dhbGtfY29udGFpbnMoYml0bWFwX2dpdCwgYml0bWFwX2dpdC0+aGF2ZXMsIG9pZCk7Cit9CmRpZmYgLS1naXQgYS9wYWNrLWJpdG1hcC5oIGIvcGFjay1iaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjAzMTIwCi0tLSAvZGV2L251bGwKKysrIGIvcGFjay1iaXRtYXAuaApAQCAtMCwwICsxLDg1IEBACisjaWZuZGVmIFBBQ0tfQklUTUFQX0gKKyNkZWZpbmUgUEFDS19CSVRNQVBfSAorCisjaW5jbHVkZSAiZXdhaC9ld29rLmgiCisjaW5jbHVkZSAia2hhc2guaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1vYmplY3RzLmgiCisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCByZXZfaW5mbzsKK3N0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnM7CisKK3N0YXRpYyBjb25zdCBjaGFyIEJJVE1BUF9JRFhfU0lHTkFUVVJFW10gPSB7J0InLCAnSScsICdUJywgJ00nfTsKKworc3RydWN0IGJpdG1hcF9kaXNrX2hlYWRlciB7CisJY2hhciBtYWdpY1tBUlJBWV9TSVpFKEJJVE1BUF9JRFhfU0lHTkFUVVJFKV07CisJdWludDE2X3QgdmVyc2lvbjsKKwl1aW50MTZfdCBvcHRpb25zOworCXVpbnQzMl90IGVudHJ5X2NvdW50OworCXVuc2lnbmVkIGNoYXIgY2hlY2tzdW1bR0lUX01BWF9SQVdTWl07Cit9OworCisjZGVmaW5lIE5FRURTX0JJVE1BUCAoMXU8PDIyKQorCitlbnVtIHBhY2tfYml0bWFwX29wdHMgeworCUJJVE1BUF9PUFRfRlVMTF9EQUcgPSAxLAorCUJJVE1BUF9PUFRfSEFTSF9DQUNIRSA9IDQsCit9OworCitlbnVtIHBhY2tfYml0bWFwX2ZsYWdzIHsKKwlCSVRNQVBfRkxBR19SRVVTRSA9IDB4MQorfTsKKwordHlwZWRlZiBpbnQgKCpzaG93X3JlYWNoYWJsZV9mbikoCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCWVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwlpbnQgZmxhZ3MsCisJdWludDMyX3QgaGFzaCwKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqZm91bmRfcGFjaywKKwlvZmZfdCBmb3VuZF9vZmZzZXQpOworCitzdHJ1Y3QgYml0bWFwX2luZGV4OworCitzdHJ1Y3QgYml0bWFwX2luZGV4ICpwcmVwYXJlX2JpdG1hcF9naXQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwordm9pZCBjb3VudF9iaXRtYXBfY29tbWl0X2xpc3Qoc3RydWN0IGJpdG1hcF9pbmRleCAqLCB1aW50MzJfdCAqY29tbWl0cywKKwkJCSAgICAgIHVpbnQzMl90ICp0cmVlcywgdWludDMyX3QgKmJsb2JzLCB1aW50MzJfdCAqdGFncyk7Cit2b2lkIHRyYXZlcnNlX2JpdG1hcF9jb21taXRfbGlzdChzdHJ1Y3QgYml0bWFwX2luZGV4ICosCisJCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgc2hvd19yZWFjaGFibGVfZm4gc2hvd19yZWFjaGFibGUpOwordm9pZCB0ZXN0X2JpdG1hcF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cyk7CitzdHJ1Y3QgYml0bWFwX2luZGV4ICpwcmVwYXJlX2JpdG1hcF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJIHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcik7CitpbnQgcmV1c2VfcGFydGlhbF9wYWNrZmlsZV9mcm9tX2JpdG1hcChzdHJ1Y3QgYml0bWFwX2luZGV4ICosCisJCQkJICAgICAgIHN0cnVjdCBwYWNrZWRfZ2l0ICoqcGFja2ZpbGUsCisJCQkJICAgICAgIHVpbnQzMl90ICplbnRyaWVzLAorCQkJCSAgICAgICBzdHJ1Y3QgYml0bWFwICoqcmV1c2Vfb3V0KTsKK2ludCByZWJ1aWxkX2V4aXN0aW5nX2JpdG1hcHMoc3RydWN0IGJpdG1hcF9pbmRleCAqLCBzdHJ1Y3QgcGFja2luZ19kYXRhICptYXBwaW5nLAorCQkJICAgICBraF9vaWRfbWFwX3QgKnJldXNlZF9iaXRtYXBzLCBpbnQgc2hvd19wcm9ncmVzcyk7Cit2b2lkIGZyZWVfYml0bWFwX2luZGV4KHN0cnVjdCBiaXRtYXBfaW5kZXggKik7CitpbnQgYml0bWFwX3dhbGtfY29udGFpbnMoc3RydWN0IGJpdG1hcF9pbmRleCAqLAorCQkJIHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIEFmdGVyIGEgdHJhdmVyc2FsIGhhcyBiZWVuIHBlcmZvcm1lZCBieSBwcmVwYXJlX2JpdG1hcF93YWxrKCksIHRoaXMgY2FuIGJlCisgKiBxdWVyaWVkIHRvIHNlZSBpZiBhIHBhcnRpY3VsYXIgb2JqZWN0IHdhcyByZWFjaGFibGUgZnJvbSBhbnkgb2YgdGhlCisgKiBvYmplY3RzIGZsYWdnZWQgYXMgVU5JTlRFUkVTVElORy4KKyAqLworaW50IGJpdG1hcF9oYXNfb2lkX2luX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGJpdG1hcF9pbmRleCAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCit2b2lkIGJpdG1hcF93cml0ZXJfc2hvd19wcm9ncmVzcyhpbnQgc2hvdyk7Cit2b2lkIGJpdG1hcF93cml0ZXJfc2V0X2NoZWNrc3VtKHVuc2lnbmVkIGNoYXIgKnNoYTEpOwordm9pZCBiaXRtYXBfd3JpdGVyX2J1aWxkX3R5cGVfaW5kZXgoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjaywKKwkJCQkgICAgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaW5kZXgsCisJCQkJICAgIHVpbnQzMl90IGluZGV4X25yKTsKK3ZvaWQgYml0bWFwX3dyaXRlcl9yZXVzZV9iaXRtYXBzKHN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2spOwordm9pZCBiaXRtYXBfd3JpdGVyX3NlbGVjdF9jb21taXRzKHN0cnVjdCBjb21taXQgKippbmRleGVkX2NvbW1pdHMsCisJCXVuc2lnbmVkIGludCBpbmRleGVkX2NvbW1pdHNfbnIsIGludCBtYXhfYml0bWFwcyk7Cit2b2lkIGJpdG1hcF93cml0ZXJfYnVpbGQoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjayk7Cit2b2lkIGJpdG1hcF93cml0ZXJfZmluaXNoKHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmluZGV4LAorCQkJICB1aW50MzJfdCBpbmRleF9uciwKKwkJCSAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgIHVpbnQxNl90IG9wdGlvbnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhY2stY2hlY2suYyBiL3BhY2stY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWQ2ZDhhCi0tLSAvZGV2L251bGwKKysrIGIvcGFjay1jaGVjay5jCkBAIC0wLDAgKzEsMjAyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK3N0cnVjdCBpZHhfZW50cnkgeworCW9mZl90ICAgICAgICAgICAgICAgIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgbnI7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfZW50cmllcyhjb25zdCB2b2lkICplMSwgY29uc3Qgdm9pZCAqZTIpCit7CisJY29uc3Qgc3RydWN0IGlkeF9lbnRyeSAqZW50cnkxID0gZTE7CisJY29uc3Qgc3RydWN0IGlkeF9lbnRyeSAqZW50cnkyID0gZTI7CisJaWYgKGVudHJ5MS0+b2Zmc2V0IDwgZW50cnkyLT5vZmZzZXQpCisJCXJldHVybiAtMTsKKwlpZiAoZW50cnkxLT5vZmZzZXQgPiBlbnRyeTItPm9mZnNldCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja19wYWNrX2NyYyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkgICBvZmZfdCBvZmZzZXQsIG9mZl90IGxlbiwgdW5zaWduZWQgaW50IG5yKQoreworCWNvbnN0IHVpbnQzMl90ICppbmRleF9jcmM7CisJdWludDMyX3QgZGF0YV9jcmMgPSBjcmMzMigwLCBOVUxMLCAwKTsKKworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBhdmFpbDsKKwkJdm9pZCAqZGF0YSA9IHVzZV9wYWNrKHAsIHdfY3Vycywgb2Zmc2V0LCAmYXZhaWwpOworCQlpZiAoYXZhaWwgPiBsZW4pCisJCQlhdmFpbCA9IGxlbjsKKwkJZGF0YV9jcmMgPSBjcmMzMihkYXRhX2NyYywgZGF0YSwgYXZhaWwpOworCQlvZmZzZXQgKz0gYXZhaWw7CisJCWxlbiAtPSBhdmFpbDsKKwl9IHdoaWxlIChsZW4pOworCisJaW5kZXhfY3JjID0gcC0+aW5kZXhfZGF0YTsKKwlpbmRleF9jcmMgKz0gMiArIDI1NiArIHAtPm51bV9vYmplY3RzICogKHRoZV9oYXNoX2FsZ28tPnJhd3N6LzQpICsgbnI7CisKKwlyZXR1cm4gZGF0YV9jcmMgIT0gbnRvaGwoKmluZGV4X2NyYyk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X3BhY2tmaWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkgICB2ZXJpZnlfZm4gZm4sCisJCQkgICBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1aW50MzJfdCBiYXNlX2NvdW50KQorCit7CisJb2ZmX3QgaW5kZXhfc2l6ZSA9IHAtPmluZGV4X3NpemU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXhfYmFzZSA9IHAtPmluZGV4X2RhdGE7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl0sICpwYWNrX3NpZzsKKwlvZmZfdCBvZmZzZXQgPSAwLCBwYWNrX3NpZ19vZnMgPSAwOworCXVpbnQzMl90IG5yX29iamVjdHMsIGk7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGlkeF9lbnRyeSAqZW50cmllczsKKworCWlmICghaXNfcGFja192YWxpZChwKSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBjYW5ub3QgYmUgYWNjZXNzZWQiLCBwLT5wYWNrX25hbWUpOworCisJci0+aGFzaF9hbGdvLT5pbml0X2ZuKCZjdHgpOworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyByZW1haW5pbmc7CisJCXVuc2lnbmVkIGNoYXIgKmluID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZyZW1haW5pbmcpOworCQlvZmZzZXQgKz0gcmVtYWluaW5nOworCQlpZiAoIXBhY2tfc2lnX29mcykKKwkJCXBhY2tfc2lnX29mcyA9IHAtPnBhY2tfc2l6ZSAtIHItPmhhc2hfYWxnby0+cmF3c3o7CisJCWlmIChvZmZzZXQgPiBwYWNrX3NpZ19vZnMpCisJCQlyZW1haW5pbmcgLT0gKHVuc2lnbmVkIGludCkob2Zmc2V0IC0gcGFja19zaWdfb2ZzKTsKKwkJci0+aGFzaF9hbGdvLT51cGRhdGVfZm4oJmN0eCwgaW4sIHJlbWFpbmluZyk7CisJfSB3aGlsZSAob2Zmc2V0IDwgcGFja19zaWdfb2ZzKTsKKwlyLT5oYXNoX2FsZ28tPmZpbmFsX2ZuKGhhc2gsICZjdHgpOworCXBhY2tfc2lnID0gdXNlX3BhY2socCwgd19jdXJzLCBwYWNrX3NpZ19vZnMsIE5VTEwpOworCWlmICghaGFzaGVxKGhhc2gsIHBhY2tfc2lnKSkKKwkJZXJyID0gZXJyb3IoIiVzIHBhY2sgY2hlY2tzdW0gbWlzbWF0Y2giLAorCQkJICAgIHAtPnBhY2tfbmFtZSk7CisJaWYgKCFoYXNoZXEoaW5kZXhfYmFzZSArIGluZGV4X3NpemUgLSByLT5oYXNoX2FsZ28tPmhleHN6LCBwYWNrX3NpZykpCisJCWVyciA9IGVycm9yKCIlcyBwYWNrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGl0cyBpbmRleCIsCisJCQkgICAgcC0+cGFja19uYW1lKTsKKwl1bnVzZV9wYWNrKHdfY3Vycyk7CisKKwkvKiBNYWtlIHN1cmUgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBpZHggaXMgdmFsaWQuICBTaW5jZSB3ZQorCSAqIGhhdmUgdmVyaWZpZWQgdGhhdCBucl9vYmplY3RzIG1hdGNoZXMgYmV0d2VlbiBpZHggYW5kIHBhY2ssCisJICogd2UgZG8gbm90IGRvIHNjYW4tc3RyZWFtaW5nIGNoZWNrIG9uIHRoZSBwYWNrIGZpbGUuCisJICovCisJbnJfb2JqZWN0cyA9IHAtPm51bV9vYmplY3RzOworCUFMTE9DX0FSUkFZKGVudHJpZXMsIG5yX29iamVjdHMgKyAxKTsKKwllbnRyaWVzW25yX29iamVjdHNdLm9mZnNldCA9IHBhY2tfc2lnX29mczsKKwkvKiBmaXJzdCBzb3J0IGVudHJpZXMgYnkgcGFjayBvZmZzZXQsIHNpbmNlIHVucGFja2luZyB0aGVtIGlzIG1vcmUgZWZmaWNpZW50IHRoYXQgd2F5ICovCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQllbnRyaWVzW2ldLm9mZnNldCA9IG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChwLCBpKTsKKwkJZW50cmllc1tpXS5uciA9IGk7CisJfQorCVFTT1JUKGVudHJpZXMsIG5yX29iamVjdHMsIGNvbXBhcmVfZW50cmllcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXZvaWQgKmRhdGE7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJb2ZmX3QgY3VycG9zOworCQlpbnQgZGF0YV92YWxpZDsKKworCQlpZiAobnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgcCwgZW50cmllc1tpXS5ucikgPCAwKQorCQkJQlVHKCJ1bmFibGUgdG8gZ2V0IG9pZCBvZiBvYmplY3QgJWx1IGZyb20gJXMiLAorCQkJICAgICh1bnNpZ25lZCBsb25nKWVudHJpZXNbaV0ubnIsIHAtPnBhY2tfbmFtZSk7CisKKwkJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCQlvZmZfdCBvZmZzZXQgPSBlbnRyaWVzW2ldLm9mZnNldDsKKwkJCW9mZl90IGxlbiA9IGVudHJpZXNbaSsxXS5vZmZzZXQgLSBvZmZzZXQ7CisJCQl1bnNpZ25lZCBpbnQgbnIgPSBlbnRyaWVzW2ldLm5yOworCQkJaWYgKGNoZWNrX3BhY2tfY3JjKHAsIHdfY3Vycywgb2Zmc2V0LCBsZW4sIG5yKSkKKwkJCQllcnIgPSBlcnJvcigiaW5kZXggQ1JDIG1pc21hdGNoIGZvciBvYmplY3QgJXMgIgorCQkJCQkgICAgImZyb20gJXMgYXQgb2Zmc2V0ICUiUFJJdU1BWCIiLAorCQkJCQkgICAgb2lkX3RvX2hleCgmb2lkKSwKKwkJCQkJICAgIHAtPnBhY2tfbmFtZSwgKHVpbnRtYXhfdClvZmZzZXQpOworCQl9CisKKwkJY3VycG9zID0gZW50cmllc1tpXS5vZmZzZXQ7CisJCXR5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihwLCB3X2N1cnMsICZjdXJwb3MsICZzaXplKTsKKwkJdW51c2VfcGFjayh3X2N1cnMpOworCisJCWlmICh0eXBlID09IE9CSl9CTE9CICYmIGJpZ19maWxlX3RocmVzaG9sZCA8PSBzaXplKSB7CisJCQkvKgorCQkJICogTGV0IGNoZWNrX29iamVjdF9zaWduYXR1cmUoKSBjaGVjayBpdCB3aXRoCisJCQkgKiB0aGUgc3RyZWFtaW5nIGludGVyZmFjZTsgbm8gcG9pbnQgc2x1cnBpbmcKKwkJCSAqIHRoZSBkYXRhIGluLWNvcmUgb25seSB0byBkaXNjYXJkLgorCQkJICovCisJCQlkYXRhID0gTlVMTDsKKwkJCWRhdGFfdmFsaWQgPSAwOworCQl9IGVsc2UgeworCQkJZGF0YSA9IHVucGFja19lbnRyeShyLCBwLCBlbnRyaWVzW2ldLm9mZnNldCwgJnR5cGUsICZzaXplKTsKKwkJCWRhdGFfdmFsaWQgPSAxOworCQl9CisKKwkJaWYgKGRhdGFfdmFsaWQgJiYgIWRhdGEpCisJCQllcnIgPSBlcnJvcigiY2Fubm90IHVucGFjayAlcyBmcm9tICVzIGF0IG9mZnNldCAlIlBSSXVNQVgiIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmb2lkKSwgcC0+cGFja19uYW1lLAorCQkJCSAgICAodWludG1heF90KWVudHJpZXNbaV0ub2Zmc2V0KTsKKwkJZWxzZSBpZiAoY2hlY2tfb2JqZWN0X3NpZ25hdHVyZShyLCAmb2lkLCBkYXRhLCBzaXplLCB0eXBlX25hbWUodHlwZSkpKQorCQkJZXJyID0gZXJyb3IoInBhY2tlZCAlcyBmcm9tICVzIGlzIGNvcnJ1cHQiLAorCQkJCSAgICBvaWRfdG9faGV4KCZvaWQpLCBwLT5wYWNrX25hbWUpOworCQllbHNlIGlmIChmbikgeworCQkJaW50IGVhdGVuID0gMDsKKwkJCWVyciB8PSBmbigmb2lkLCB0eXBlLCBzaXplLCBkYXRhLCAmZWF0ZW4pOworCQkJaWYgKGVhdGVuKQorCQkJCWRhdGEgPSBOVUxMOworCQl9CisJCWlmICgoKGJhc2VfY291bnQgKyBpKSAmIDEwMjMpID09IDApCisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBiYXNlX2NvdW50ICsgaSk7CisJCWZyZWUoZGF0YSk7CisKKwl9CisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgYmFzZV9jb3VudCArIGkpOworCWZyZWUoZW50cmllcyk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgdmVyaWZ5X3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJb2ZmX3QgaW5kZXhfc2l6ZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9iYXNlOworCWdpdF9oYXNoX2N0eCBjdHg7CisJdW5zaWduZWQgY2hhciBoYXNoW0dJVF9NQVhfUkFXU1pdOworCWludCBlcnIgPSAwOworCisJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBpbmRleCBub3Qgb3BlbmVkIiwgcC0+cGFja19uYW1lKTsKKwlpbmRleF9zaXplID0gcC0+aW5kZXhfc2l6ZTsKKwlpbmRleF9iYXNlID0gcC0+aW5kZXhfZGF0YTsKKworCS8qIFZlcmlmeSBTSEExIHN1bSBvZiB0aGUgaW5kZXggZmlsZSAqLworCXRoZV9oYXNoX2FsZ28tPmluaXRfZm4oJmN0eCk7CisJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjdHgsIGluZGV4X2Jhc2UsICh1bnNpZ25lZCBpbnQpKGluZGV4X3NpemUgLSB0aGVfaGFzaF9hbGdvLT5yYXdzeikpOworCXRoZV9oYXNoX2FsZ28tPmZpbmFsX2ZuKGhhc2gsICZjdHgpOworCWlmICghaGFzaGVxKGhhc2gsIGluZGV4X2Jhc2UgKyBpbmRleF9zaXplIC0gdGhlX2hhc2hfYWxnby0+cmF3c3opKQorCQllcnIgPSBlcnJvcigiUGFja2ZpbGUgaW5kZXggZm9yICVzIGhhc2ggbWlzbWF0Y2giLAorCQkJICAgIHAtPnBhY2tfbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworaW50IHZlcmlmeV9wYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgdmVyaWZ5X2ZuIGZuLAorCQlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1aW50MzJfdCBiYXNlX2NvdW50KQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKKworCWVyciB8PSB2ZXJpZnlfcGFja19pbmRleChwKTsKKwlpZiAoIXAtPmluZGV4X2RhdGEpCisJCXJldHVybiAtMTsKKworCWVyciB8PSB2ZXJpZnlfcGFja2ZpbGUociwgcCwgJndfY3VycywgZm4sIHByb2dyZXNzLCBiYXNlX2NvdW50KTsKKwl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3BhY2stb2JqZWN0cy5jIGIvcGFjay1vYmplY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhNDMzOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stb2JqZWN0cy5jCkBAIC0wLDAgKzEsMjIxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1vYmplY3RzLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworc3RhdGljIHVpbnQzMl90IGxvY2F0ZV9vYmplY3RfZW50cnlfaGFzaChzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSwKKwkJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJIGludCAqZm91bmQpCit7CisJdWludDMyX3QgaSwgbWFzayA9IChwZGF0YS0+aW5kZXhfc2l6ZSAtIDEpOworCisJaSA9IG9pZGhhc2gob2lkKSAmIG1hc2s7CisKKwl3aGlsZSAocGRhdGEtPmluZGV4W2ldID4gMCkgeworCQl1aW50MzJfdCBwb3MgPSBwZGF0YS0+aW5kZXhbaV0gLSAxOworCisJCWlmIChvaWRlcShvaWQsICZwZGF0YS0+b2JqZWN0c1twb3NdLmlkeC5vaWQpKSB7CisJCQkqZm91bmQgPSAxOworCQkJcmV0dXJuIGk7CisJCX0KKworCQlpID0gKGkgKyAxKSAmIG1hc2s7CisJfQorCisJKmZvdW5kID0gMDsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBjbG9zZXN0X3BvdzIodWludDMyX3QgdikKK3sKKwl2ID0gdiAtIDE7CisJdiB8PSB2ID4+IDE7CisJdiB8PSB2ID4+IDI7CisJdiB8PSB2ID4+IDQ7CisJdiB8PSB2ID4+IDg7CisJdiB8PSB2ID4+IDE2OworCXJldHVybiB2ICsgMTsKK30KKworc3RhdGljIHZvaWQgcmVoYXNoX29iamVjdHMoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeTsKKworCXBkYXRhLT5pbmRleF9zaXplID0gY2xvc2VzdF9wb3cyKHBkYXRhLT5ucl9vYmplY3RzICogMyk7CisJaWYgKHBkYXRhLT5pbmRleF9zaXplIDwgMTAyNCkKKwkJcGRhdGEtPmluZGV4X3NpemUgPSAxMDI0OworCisJZnJlZShwZGF0YS0+aW5kZXgpOworCXBkYXRhLT5pbmRleCA9IHhjYWxsb2MocGRhdGEtPmluZGV4X3NpemUsIHNpemVvZigqcGRhdGEtPmluZGV4KSk7CisKKwllbnRyeSA9IHBkYXRhLT5vYmplY3RzOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5ucl9vYmplY3RzOyBpKyspIHsKKwkJaW50IGZvdW5kOworCQl1aW50MzJfdCBpeCA9IGxvY2F0ZV9vYmplY3RfZW50cnlfaGFzaChwZGF0YSwKKwkJCQkJCSAgICAgICAmZW50cnktPmlkeC5vaWQsCisJCQkJCQkgICAgICAgJmZvdW5kKTsKKworCQlpZiAoZm91bmQpCisJCQlCVUcoIkR1cGxpY2F0ZSBvYmplY3QgaW4gaGFzaCIpOworCisJCXBkYXRhLT5pbmRleFtpeF0gPSBpICsgMTsKKwkJZW50cnkrKzsKKwl9Cit9CisKK3N0cnVjdCBvYmplY3RfZW50cnkgKnBhY2tsaXN0X2ZpbmQoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCisJCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXVpbnQzMl90IGk7CisJaW50IGZvdW5kOworCisJaWYgKCFwZGF0YS0+aW5kZXhfc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpID0gbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKHBkYXRhLCBvaWQsICZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAmcGRhdGEtPm9iamVjdHNbcGRhdGEtPmluZGV4W2ldIC0gMV07Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaW5fcGFja19ieV9pZHgoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKiptYXBwaW5nLCAqcDsKKwlpbnQgY250ID0gMCwgbnIgPSAxVSA8PCBPRV9JTl9QQUNLX0JJVFM7CisKKwlBTExPQ19BUlJBWShtYXBwaW5nLCBucik7CisJLyoKKwkgKiBvZV9pbl9wYWNrKCkgb24gYW4gYWxsLXplcm8nZCBvYmplY3RfZW50cnkKKwkgKiAoaS5lLiBpbl9wYWNrX2lkeCBhbHNvIHplcm8pIHNob3VsZCByZXR1cm4gTlVMTC4KKwkgKi8KKwltYXBwaW5nW2NudCsrXSA9IE5VTEw7CisJZm9yIChwID0gZ2V0X2FsbF9wYWNrcyhwZGF0YS0+cmVwbyk7IHA7IHAgPSBwLT5uZXh0LCBjbnQrKykgeworCQlpZiAoY250ID09IG5yKSB7CisJCQlmcmVlKG1hcHBpbmcpOworCQkJcmV0dXJuOworCQl9CisJCXAtPmluZGV4ID0gY250OworCQltYXBwaW5nW2NudF0gPSBwOworCX0KKwlwZGF0YS0+aW5fcGFja19ieV9pZHggPSBtYXBwaW5nOworfQorCisvKgorICogQSBuZXcgcGFjayBhcHBlYXJzIGFmdGVyIHByZXBhcmVfaW5fcGFja19ieV9pZHgoKSBoYXMgYmVlbgorICogcnVuLiBUaGlzIGlzIGxpa2VseSBhIHJhY2UuCisgKgorICogV2UgY291bGQgbWFwIHRoaXMgbmV3IHBhY2sgdG8gaW5fcGFja19ieV9pZHhbXSBhcnJheSwgYnV0IHRoZW4gd2UKKyAqIGhhdmUgdG8gZGVhbCB3aXRoIGZ1bGwgYXJyYXkgYW55d2F5LiBBbmQgc2luY2UgaXQncyBoYXJkIHRvIHRlc3QKKyAqIHRoaXMgZmFsbCBiYWNrIGNvZGUsIGp1c3Qgc3RheSBzaW1wbGUgYW5kIGZhbGwgYmFjayB0byB1c2luZworICogaW5fcGFja1tdIGFycmF5LgorICovCit2b2lkIG9lX21hcF9uZXdfcGFjayhzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrKQoreworCXVpbnQzMl90IGk7CisKKwlpZiAocGFjay0+aW5fcGFjaykKKwkJQlVHKCJwYWNraW5nX2RhdGEgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG8gcGFjayBhcnJheSIpOworCisJQUxMT0NfQVJSQVkocGFjay0+aW5fcGFjaywgcGFjay0+bnJfYWxsb2MpOworCisJZm9yIChpID0gMDsgaSA8IHBhY2stPm5yX29iamVjdHM7IGkrKykKKwkJcGFjay0+aW5fcGFja1tpXSA9IG9lX2luX3BhY2socGFjaywgcGFjay0+b2JqZWN0cyArIGkpOworCisJRlJFRV9BTkRfTlVMTChwYWNrLT5pbl9wYWNrX2J5X2lkeCk7Cit9CisKKy8qIGFzc3VtZSBwZGF0YSBpcyBhbHJlYWR5IHplcm8nZCBieSBjYWxsZXIgKi8KK3ZvaWQgcHJlcGFyZV9wYWNraW5nX2RhdGEoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBwYWNraW5nX2RhdGEgKnBkYXRhKQoreworCXBkYXRhLT5yZXBvID0gcjsKKworCWlmIChnaXRfZW52X2Jvb2woIkdJVF9URVNUX0ZVTExfSU5fUEFDS19BUlJBWSIsIDApKSB7CisJCS8qCisJCSAqIGRvIG5vdCBpbml0aWFsaXplIGluX3BhY2tfYnlfaWR4W10gdG8gZm9yY2UgdGhlCisJCSAqIHNsb3cgcGF0aCBpbiBvZV9pbl9wYWNrKCkKKwkJICovCisJfSBlbHNlIHsKKwkJcHJlcGFyZV9pbl9wYWNrX2J5X2lkeChwZGF0YSk7CisJfQorCisJcGRhdGEtPm9lX3NpemVfbGltaXQgPSBnaXRfZW52X3Vsb25nKCJHSVRfVEVTVF9PRV9TSVpFIiwKKwkJCQkJICAgICAxVSA8PCBPRV9TSVpFX0JJVFMpOworCXBkYXRhLT5vZV9kZWx0YV9zaXplX2xpbWl0ID0gZ2l0X2Vudl91bG9uZygiR0lUX1RFU1RfT0VfREVMVEFfU0laRSIsCisJCQkJCQkgICAxVUwgPDwgT0VfREVMVEFfU0laRV9CSVRTKTsKKwlpbml0X3JlY3Vyc2l2ZV9tdXRleCgmcGRhdGEtPm9kYl9sb2NrKTsKK30KKworc3RydWN0IG9iamVjdF9lbnRyeSAqcGFja2xpc3RfYWxsb2Moc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpuZXdfZW50cnk7CisKKwlpZiAocGRhdGEtPm5yX29iamVjdHMgPj0gcGRhdGEtPm5yX2FsbG9jKSB7CisJCXBkYXRhLT5ucl9hbGxvYyA9IChwZGF0YS0+bnJfYWxsb2MgICsgMTAyNCkgKiAzIC8gMjsKKwkJUkVBTExPQ19BUlJBWShwZGF0YS0+b2JqZWN0cywgcGRhdGEtPm5yX2FsbG9jKTsKKworCQlpZiAoIXBkYXRhLT5pbl9wYWNrX2J5X2lkeCkKKwkJCVJFQUxMT0NfQVJSQVkocGRhdGEtPmluX3BhY2ssIHBkYXRhLT5ucl9hbGxvYyk7CisJCWlmIChwZGF0YS0+ZGVsdGFfc2l6ZSkKKwkJCVJFQUxMT0NfQVJSQVkocGRhdGEtPmRlbHRhX3NpemUsIHBkYXRhLT5ucl9hbGxvYyk7CisKKwkJaWYgKHBkYXRhLT50cmVlX2RlcHRoKQorCQkJUkVBTExPQ19BUlJBWShwZGF0YS0+dHJlZV9kZXB0aCwgcGRhdGEtPm5yX2FsbG9jKTsKKworCQlpZiAocGRhdGEtPmxheWVyKQorCQkJUkVBTExPQ19BUlJBWShwZGF0YS0+bGF5ZXIsIHBkYXRhLT5ucl9hbGxvYyk7CisJfQorCisJbmV3X2VudHJ5ID0gcGRhdGEtPm9iamVjdHMgKyBwZGF0YS0+bnJfb2JqZWN0cysrOworCisJbWVtc2V0KG5ld19lbnRyeSwgMCwgc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlvaWRjcHkoJm5ld19lbnRyeS0+aWR4Lm9pZCwgb2lkKTsKKworCWlmIChwZGF0YS0+aW5kZXhfc2l6ZSAqIDMgPD0gcGRhdGEtPm5yX29iamVjdHMgKiA0KQorCQlyZWhhc2hfb2JqZWN0cyhwZGF0YSk7CisJZWxzZSB7CisJCWludCBmb3VuZDsKKwkJdWludDMyX3QgcG9zID0gbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKHBkYXRhLAorCQkJCQkJCSZuZXdfZW50cnktPmlkeC5vaWQsCisJCQkJCQkJJmZvdW5kKTsKKwkJaWYgKGZvdW5kKQorCQkJQlVHKCJkdXBsaWNhdGUgb2JqZWN0IGluc2VydGVkIGludG8gaGFzaCIpOworCQlwZGF0YS0+aW5kZXhbcG9zXSA9IHBkYXRhLT5ucl9vYmplY3RzOworCX0KKworCWlmIChwZGF0YS0+aW5fcGFjaykKKwkJcGRhdGEtPmluX3BhY2tbcGRhdGEtPm5yX29iamVjdHMgLSAxXSA9IE5VTEw7CisKKwlpZiAocGRhdGEtPnRyZWVfZGVwdGgpCisJCXBkYXRhLT50cmVlX2RlcHRoW3BkYXRhLT5ucl9vYmplY3RzIC0gMV0gPSAwOworCisJaWYgKHBkYXRhLT5sYXllcikKKwkJcGRhdGEtPmxheWVyW3BkYXRhLT5ucl9vYmplY3RzIC0gMV0gPSAwOworCisJcmV0dXJuIG5ld19lbnRyeTsKK30KKwordm9pZCBvZV9zZXRfZGVsdGFfZXh0KHN0cnVjdCBwYWNraW5nX2RhdGEgKnBkYXRhLAorCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YSwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmJhc2U7CisKKwlBTExPQ19HUk9XKHBkYXRhLT5leHRfYmFzZXMsIHBkYXRhLT5ucl9leHQgKyAxLCBwZGF0YS0+YWxsb2NfZXh0KTsKKwliYXNlID0gJnBkYXRhLT5leHRfYmFzZXNbcGRhdGEtPm5yX2V4dCsrXTsKKwltZW1zZXQoYmFzZSwgMCwgc2l6ZW9mKCpiYXNlKSk7CisJb2lkY3B5KCZiYXNlLT5pZHgub2lkLCBvaWQpOworCisJLyogVGhlc2UgZmxhZ3MgbWFyayB0aGF0IHdlIGFyZSBub3QgcGFydCBvZiB0aGUgYWN0dWFsIHBhY2sgb3V0cHV0LiAqLworCWJhc2UtPnByZWZlcnJlZF9iYXNlID0gMTsKKwliYXNlLT5maWxsZWQgPSAxOworCisJZGVsdGEtPmV4dF9iYXNlID0gMTsKKwlkZWx0YS0+ZGVsdGFfaWR4ID0gYmFzZSAtIHBkYXRhLT5leHRfYmFzZXMgKyAxOworfQpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmggYi9wYWNrLW9iamVjdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDg4ZTNlCi0tLSAvZGV2L251bGwKKysrIGIvcGFjay1vYmplY3RzLmgKQEAgLTAsMCArMSw0NTEgQEAKKyNpZm5kZWYgUEFDS19PQkpFQ1RTX0gKKyNkZWZpbmUgUEFDS19PQkpFQ1RTX0gKKworI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorI2luY2x1ZGUgInBhY2suaCIKKworc3RydWN0IHJlcG9zaXRvcnk7CisKKyNkZWZpbmUgREVGQVVMVF9ERUxUQV9DQUNIRV9TSVpFICgyNTYgKiAxMDI0ICogMTAyNCkKKworI2RlZmluZSBPRV9ERlNfU1RBVEVfQklUUwkyCisjZGVmaW5lIE9FX0RFUFRIX0JJVFMJCTEyCisjZGVmaW5lIE9FX0lOX1BBQ0tfQklUUwkJMTAKKyNkZWZpbmUgT0VfWl9ERUxUQV9CSVRTCQkyMAorLyoKKyAqIE5vdGUgdGhhdCBvZV9zZXRfc2l6ZSgpIGJlY29tZXMgZXhwZW5zaXZlIHdoZW4gdGhlIGdpdmVuIHNpemUgaXMKKyAqIGFib3ZlIHRoaXMgbGltaXQuIERvbid0IGxvd2VyIGl0IHRvbyBtdWNoLgorICovCisjZGVmaW5lIE9FX1NJWkVfQklUUwkJMzEKKyNkZWZpbmUgT0VfREVMVEFfU0laRV9CSVRTCTIzCisKKy8qCisgKiBTdGF0ZSBmbGFncyBmb3IgZGVwdGgtZmlyc3Qgc2VhcmNoIHVzZWQgZm9yIGFuYWx5emluZyBkZWx0YSBjeWNsZXMuCisgKgorICogVGhlIGRlcHRoIGlzIG1lYXN1cmVkIGluIGRlbHRhLWxpbmtzIHRvIHRoZSBiYXNlIChzbyBpZiBBIGlzIGEgZGVsdGEKKyAqIGFnYWluc3QgQiwgdGhlbiBBIGhhcyBhIGRlcHRoIG9mIDEsIGFuZCBCIGEgZGVwdGggb2YgMCkuCisgKi8KK2VudW0gZGZzX3N0YXRlIHsKKwlERlNfTk9ORSA9IDAsCisJREZTX0FDVElWRSwKKwlERlNfRE9ORSwKKwlERlNfTlVNX1NUQVRFUworfTsKKworLyoKKyAqIFRoZSBzaXplIG9mIHN0cnVjdCBuZWFybHkgZGV0ZXJtaW5lcyBwYWNrLW9iamVjdHMncyBtZW1vcnkKKyAqIGNvbnN1bXB0aW9uLiBUaGlzIHN0cnVjdCBpcyBwYWNrZWQgdGlnaHQgZm9yIHRoYXQgcmVhc29uLiBXaGVuIHlvdQorICogYWRkIG9yIHJlb3JkZXIgc29tZXRoaW5nIGluIHRoaXMgc3RydWN0LCB0aGluayBhIGJpdCBhYm91dCB0aGlzLgorICoKKyAqIGJhc2ljIG9iamVjdCBpbmZvCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICogaWR4Lm9pZCBpcyBmaWxsZWQgdXAgYmVmb3JlIGRlbHRhIHNlYXJjaGluZyBzdGFydHMuIGlkeC5jcmMzMiBpcworICogb25seSB2YWxpZCBhZnRlciB0aGUgb2JqZWN0IGlzIHdyaXR0ZW4gb3V0IGFuZCB3aWxsIGJlIHVzZWQgZm9yCisgKiBnZW5lcmF0aW5nIHRoZSBpbmRleC4gaWR4Lm9mZnNldCB3aWxsIGJlIGJvdGggZ3JhZHVhbGx5IHNldCBhbmQKKyAqIHVzZWQgaW4gd3JpdGluZyBwaGFzZSAoYmFzZSBvYmplY3RzIGdldCBvZmZzZXQgZmlyc3QsIHRoZW4gZGVsdGFzCisgKiByZWZlciB0byB0aGVtKQorICoKKyAqICJzaXplIiBpcyB0aGUgdW5jb21wcmVzc2VkIG9iamVjdCBzaXplLiBDb21wcmVzc2VkIHNpemUgb2YgdGhlIHJhdworICogZGF0YSBmb3IgYW4gb2JqZWN0IGluIGEgcGFjayBpcyBub3Qgc3RvcmVkIGFueXdoZXJlIGJ1dCBpcyBjb21wdXRlZAorICogYW5kIG1hZGUgYXZhaWxhYmxlIHdoZW4gcmV2ZXJzZSAuaWR4IGlzIG1hZGUuIE5vdGUgdGhhdCB3aGVuIGEKKyAqIGRlbHRhIGlzIHJldXNlZCwgInNpemUiIGlzIHRoZSB1bmNvbXByZXNzZWQgX2RlbHRhXyBzaXplLCBub3QgdGhlCisgKiBjYW5vbmljYWwgb25lIGFmdGVyIHRoZSBkZWx0YSBoYXMgYmVlbiBhcHBsaWVkLgorICoKKyAqICJoYXNoIiBjb250YWlucyBhIHBhdGggbmFtZSBoYXNoIHdoaWNoIGlzIHVzZWQgZm9yIHNvcnRpbmcgdGhlCisgKiBkZWx0YSBsaXN0IGFuZCBhbHNvIGR1cmluZyBkZWx0YSBzZWFyY2hpbmcuIE9uY2UgcHJlcGFyZV9wYWNrKCkKKyAqIHJldHVybnMgaXQncyBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIHNvdXJjZSBwYWNrIGluZm8KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoZSAoaW5fcGFjaywgaW5fcGFja19vZmZzZXQpIHR1cGxlIGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAqIG9iamVjdCBpbiB0aGUgc291cmNlIHBhY2suIGluX3BhY2tfaGVhZGVyX3NpemUgYWxsb3dzIHF1aWNrbHkKKyAqIHNraXBwaW5nIHRoZSBoZWFkZXIgYW5kIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSB6bGliIHN0cmVhbS4KKyAqCisgKiAidHlwZSIgYW5kICJpbl9wYWNrX3R5cGUiIGJvdGggZGVzY3JpYmUgb2JqZWN0IHR5cGUuIGluX3BhY2tfdHlwZQorICogbWF5IGNvbnRhaW4gYSBkZWx0YSB0eXBlLCB3aGlsZSB0eXBlIGlzIGFsd2F5cyB0aGUgY2Fub25pY2FsIHR5cGUuCisgKgorICogZGVsdGFzCisgKiAtLS0tLS0KKyAqIERlbHRhIGxpbmtzIChkZWx0YSwgZGVsdGFfY2hpbGQgYW5kIGRlbHRhX3NpYmxpbmcpIGFyZSBjcmVhdGVkIHRvCisgKiByZWZsZWN0IHRoYXQgZGVsdGEgZ3JhcGggZnJvbSB0aGUgc291cmNlIHBhY2sgdGhlbiB1cGRhdGVkIG9yIGFkZGVkCisgKiBkdXJpbmcgZGVsdGEgc2VhcmNoaW5nIHBoYXNlIHdoZW4gd2UgZmluZCBiZXR0ZXIgZGVsdGFzLgorICoKKyAqIGRlbHRhX2NoaWxkIGFuZCBkZWx0YV9zaWJsaW5nIGFyZSBsYXN0IG5lZWRlZCBpbgorICogY29tcHV0ZV93cml0ZV9vcmRlcigpLiAiZGVsdGEiIGFuZCAiZGVsdGFfc2l6ZSIgbXVzdCByZW1haW4gdmFsaWQKKyAqIGF0IG9iamVjdCB3cml0aW5nIHBoYXNlIGluIGNhc2UgdGhlIGRlbHRhIGlzIG5vdCBjYWNoZWQuCisgKgorICogSWYgYSBkZWx0YSBpcyBjYWNoZWQgaW4gbWVtb3J5IGFuZCBpcyBjb21wcmVzc2VkLCBkZWx0YV9kYXRhIHBvaW50cworICogdG8gdGhlIGRhdGEgYW5kIHpfZGVsdGFfc2l6ZSBjb250YWlucyB0aGUgY29tcHJlc3NlZCBzaXplLiBJZiBpdCdzCisgKiB1bmNvbXByZXNzZWQgWzFdLCB6X2RlbHRhX3NpemUgbXVzdCBiZSB6ZXJvLiBkZWx0YV9zaXplIGlzIGFsd2F5cworICogdGhlIHVuY29tcHJlc3NlZCBzaXplIGFuZCBtdXN0IGJlIHZhbGlkIGV2ZW4gaWYgdGhlIGRlbHRhIGlzIG5vdAorICogY2FjaGVkLgorICoKKyAqIFsxXSBkdXJpbmcgdHJ5X2RlbHRhIHBoYXNlIHdlIGRvbid0IGJvdGhlciB3aXRoIGNvbXByZXNzaW5nIGJlY2F1c2UKKyAqIHRoZSBkZWx0YSBjb3VsZCBiZSBxdWlja2x5IHJlcGxhY2VkIHdpdGggYSBiZXR0ZXIgb25lLgorICovCitzdHJ1Y3Qgb2JqZWN0X2VudHJ5IHsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgaWR4OworCXZvaWQgKmRlbHRhX2RhdGE7CS8qIGNhY2hlZCBkZWx0YSAodW5jb21wcmVzc2VkKSAqLworCW9mZl90IGluX3BhY2tfb2Zmc2V0OworCXVpbnQzMl90IGhhc2g7CQkJLyogbmFtZSBoaW50IGhhc2ggKi8KKwl1bnNpZ25lZCBzaXplXzpPRV9TSVpFX0JJVFM7CisJdW5zaWduZWQgc2l6ZV92YWxpZDoxOworCXVpbnQzMl90IGRlbHRhX2lkeDsJLyogZGVsdGEgYmFzZSBvYmplY3QgKi8KKwl1aW50MzJfdCBkZWx0YV9jaGlsZF9pZHg7IC8qIGRlbHRpZmllZCBvYmplY3RzIHdobyBiYXNlcyBtZSAqLworCXVpbnQzMl90IGRlbHRhX3NpYmxpbmdfaWR4OyAvKiBvdGhlciBkZWx0aWZpZWQgb2JqZWN0cyB3aG8KKwkJCQkgICAgICogdXNlcyB0aGUgc2FtZSBiYXNlIGFzIG1lCisJCQkJICAgICAqLworCXVuc2lnbmVkIGRlbHRhX3NpemVfOk9FX0RFTFRBX1NJWkVfQklUUzsgLyogZGVsdGEgZGF0YSBzaXplICh1bmNvbXByZXNzZWQpICovCisJdW5zaWduZWQgZGVsdGFfc2l6ZV92YWxpZDoxOworCXVuc2lnbmVkIGNoYXIgaW5fcGFja19oZWFkZXJfc2l6ZTsKKwl1bnNpZ25lZCBpbl9wYWNrX2lkeDpPRV9JTl9QQUNLX0JJVFM7CS8qIGFscmVhZHkgaW4gcGFjayAqLworCXVuc2lnbmVkIHpfZGVsdGFfc2l6ZTpPRV9aX0RFTFRBX0JJVFM7CisJdW5zaWduZWQgdHlwZV92YWxpZDoxOworCXVuc2lnbmVkIG5vX3RyeV9kZWx0YToxOworCXVuc2lnbmVkIHR5cGVfOlRZUEVfQklUUzsKKwl1bnNpZ25lZCBpbl9wYWNrX3R5cGU6VFlQRV9CSVRTOyAvKiBjb3VsZCBiZSBkZWx0YSAqLworCisJdW5zaWduZWQgcHJlZmVycmVkX2Jhc2U6MTsgLyoKKwkJCQkgICAgKiB3ZSBkbyBub3QgcGFjayB0aGlzLCBidXQgaXMgYXZhaWxhYmxlCisJCQkJICAgICogdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBvYmplY3QgdG8gZGVsdGEKKwkJCQkgICAgKiBvYmplY3RzIGFnYWluc3QuCisJCQkJICAgICovCisJdW5zaWduZWQgdGFnZ2VkOjE7IC8qIG5lYXIgdGhlIHZlcnkgdGlwIG9mIHJlZnMgKi8KKwl1bnNpZ25lZCBmaWxsZWQ6MTsgLyogYXNzaWduZWQgd3JpdGUtb3JkZXIgKi8KKwl1bnNpZ25lZCBkZnNfc3RhdGU6T0VfREZTX1NUQVRFX0JJVFM7CisJdW5zaWduZWQgZGVwdGg6T0VfREVQVEhfQklUUzsKKwl1bnNpZ25lZCBleHRfYmFzZToxOyAvKiBkZWx0YV9pZHggcG9pbnRzIG91dHNpZGUgcGFja2xpc3QgKi8KKworCS8qCisJICogcGFob2xlIHJlc3VsdHMgb24gNjQtYml0IGxpbnV4IChnY2MgYW5kIGNsYW5nKQorCSAqCisJICogICBzaXplOiA4MCwgYml0X3BhZGRpbmc6IDkgYml0cworCSAqCisJICogYW5kIG9uIDMyLWJpdCAoZ2NjKQorCSAqCisJICogICBzaXplOiA3NiwgYml0X3BhZGRpbmc6IDkgYml0cworCSAqLworfTsKKworc3RydWN0IHBhY2tpbmdfZGF0YSB7CisJc3RydWN0IHJlcG9zaXRvcnkgKnJlcG87CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqZWN0czsKKwl1aW50MzJfdCBucl9vYmplY3RzLCBucl9hbGxvYzsKKworCWludDMyX3QgKmluZGV4OworCXVpbnQzMl90IGluZGV4X3NpemU7CisKKwl1bnNpZ25lZCBpbnQgKmluX3BhY2tfcG9zOworCXVuc2lnbmVkIGxvbmcgKmRlbHRhX3NpemU7CisKKwkvKgorCSAqIE9ubHkgb25lIG9mIHRoZXNlIGNhbiBiZSBub24tTlVMTCBhbmQgdGhleSBoYXZlIGRpZmZlcmVudAorCSAqIHNpemVzLiBpZiBpbl9wYWNrX2J5X2lkeCBpcyBhbGxvY2F0ZWQsIG9lX2luX3BhY2soKSByZXR1cm5zCisJICogdGhlIHBhY2sgb2YgYW4gb2JqZWN0IHVzaW5nIGluX3BhY2tfaWR4IGZpZWxkLiBJZiBub3QsCisJICogaW5fcGFja1tdIGFycmF5IGlzIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluX3BhY2tfcG9zW10KKwkgKi8KKwlzdHJ1Y3QgcGFja2VkX2dpdCAqKmluX3BhY2tfYnlfaWR4OworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqaW5fcGFjazsKKworCS8qCisJICogRHVyaW5nIHBhY2tpbmcgd2l0aCBtdWx0aXBsZSB0aHJlYWRzLCBwcm90ZWN0IHRoZSBpbi1jb3JlCisJICogb2JqZWN0IGRhdGFiYXNlIGZyb20gY29uY3VycmVudCBhY2Nlc3Nlcy4KKwkgKi8KKwlwdGhyZWFkX211dGV4X3Qgb2RiX2xvY2s7CisKKwkvKgorCSAqIFRoaXMgbGlzdCBjb250YWlucyBlbnRyaWVzIGZvciBiYXNlcyB3aGljaCB3ZSBrbm93IHRoZSBvdGhlciBzaWRlCisJICogaGFzIChlLmcuLCB2aWEgcmVhY2hhYmlsaXR5IGJpdG1hcHMpLCBidXQgd2hpY2ggYXJlbid0IGluIG91cgorCSAqICJvYmplY3RzIiBsaXN0LgorCSAqLworCXN0cnVjdCBvYmplY3RfZW50cnkgKmV4dF9iYXNlczsKKwl1aW50MzJfdCBucl9leHQsIGFsbG9jX2V4dDsKKworCXVpbnRtYXhfdCBvZV9zaXplX2xpbWl0OworCXVpbnRtYXhfdCBvZV9kZWx0YV9zaXplX2xpbWl0OworCisJLyogZGVsdGEgaXNsYW5kcyAqLworCXVuc2lnbmVkIGludCAqdHJlZV9kZXB0aDsKKwl1bnNpZ25lZCBjaGFyICpsYXllcjsKK307CisKK3ZvaWQgcHJlcGFyZV9wYWNraW5nX2RhdGEoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBwYWNraW5nX2RhdGEgKnBkYXRhKTsKKworLyogUHJvdGVjdCBhY2Nlc3MgdG8gb2JqZWN0IGRhdGFiYXNlICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGFja2luZ19kYXRhX2xvY2soc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEpCit7CisJcHRocmVhZF9tdXRleF9sb2NrKCZwZGF0YS0+b2RiX2xvY2spOworfQorc3RhdGljIGlubGluZSB2b2lkIHBhY2tpbmdfZGF0YV91bmxvY2soc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEpCit7CisJcHRocmVhZF9tdXRleF91bmxvY2soJnBkYXRhLT5vZGJfbG9jayk7Cit9CisKK3N0cnVjdCBvYmplY3RfZW50cnkgKnBhY2tsaXN0X2FsbG9jKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBkYXRhLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpwYWNrbGlzdF9maW5kKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBkYXRhLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgcGFja19uYW1lX2hhc2goY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1aW50MzJfdCBjLCBoYXNoID0gMDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoaXMgZWZmZWN0aXZlbHkganVzdCBjcmVhdGVzIGEgc29ydGFibGUgbnVtYmVyIGZyb20gdGhlCisJICogbGFzdCBzaXh0ZWVuIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuIExhc3QgY2hhcmFjdGVycworCSAqIGNvdW50ICJtb3N0Iiwgc28gdGhpbmdzIHRoYXQgZW5kIGluICIuYyIgc29ydCB0b2dldGhlci4KKwkgKi8KKwl3aGlsZSAoKGMgPSAqbmFtZSsrKSAhPSAwKSB7CisJCWlmIChpc3NwYWNlKGMpKQorCQkJY29udGludWU7CisJCWhhc2ggPSAoaGFzaCA+PiAyKSArIChjIDw8IDI0KTsKKwl9CisJcmV0dXJuIGhhc2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBvYmplY3RfdHlwZSBvZV90eXBlKGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJcmV0dXJuIGUtPnR5cGVfdmFsaWQgPyBlLT50eXBlXyA6IE9CSl9CQUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfdHlwZShzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJICAgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKK3sKKwlpZiAodHlwZSA+PSBPQkpfQU5ZKQorCQlCVUcoIk9CSl9BTlkgY2Fubm90IGJlIHNldCBpbiBwYWNrLW9iamVjdHMgY29kZSIpOworCisJZS0+dHlwZV92YWxpZCA9IHR5cGUgPj0gT0JKX05PTkU7CisJZS0+dHlwZV8gPSAodW5zaWduZWQpdHlwZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2VfaW5fcGFja19wb3MoY29uc3Qgc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplKQoreworCXJldHVybiBwYWNrLT5pbl9wYWNrX3Bvc1tlIC0gcGFjay0+b2JqZWN0c107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfaW5fcGFja19wb3MoY29uc3Qgc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBwb3MpCit7CisJcGFjay0+aW5fcGFja19wb3NbZSAtIHBhY2stPm9iamVjdHNdID0gcG9zOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWNrZWRfZ2l0ICpvZV9pbl9wYWNrKGNvbnN0IHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplKQoreworCWlmIChwYWNrLT5pbl9wYWNrX2J5X2lkeCkKKwkJcmV0dXJuIHBhY2stPmluX3BhY2tfYnlfaWR4W2UtPmluX3BhY2tfaWR4XTsKKwllbHNlCisJCXJldHVybiBwYWNrLT5pbl9wYWNrW2UgLSBwYWNrLT5vYmplY3RzXTsKK30KKwordm9pZCBvZV9tYXBfbmV3X3BhY2soc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfaW5fcGFjayhzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCSAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWlmIChwYWNrLT5pbl9wYWNrX2J5X2lkeCkgeworCQlpZiAocC0+aW5kZXgpIHsKKwkJCWUtPmluX3BhY2tfaWR4ID0gcC0+aW5kZXg7CisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogV2UncmUgYWNjZXNzaW5nIHBhY2tzIGJ5IGluZGV4LCBidXQgdGhpcyBwYWNrIGRvZXNuJ3QgaGF2ZQorCQkgKiBhbiBpbmRleCAoZS5nLiwgYmVjYXVzZSBpdCB3YXMgYWRkZWQgc2luY2Ugd2UgY3JlYXRlZCB0aGUKKwkJICogaW5fcGFja19ieV9pZHggYXJyYXkpLiBCYWlsIHRvIG9lX21hcF9uZXdfcGFjaygpLCB3aGljaAorCQkgKiB3aWxsIGNvbnZlcnQgdXMgdG8gdXNpbmcgdGhlIGZ1bGwgaW5fcGFjayBhcnJheSwgYW5kIHRoZW4KKwkJICogZmFsbCB0aHJvdWdoIHRvIG91ciBpbl9wYWNrIGhhbmRsaW5nLgorCQkgKi8KKwkJb2VfbWFwX25ld19wYWNrKHBhY2spOworCX0KKwlwYWNrLT5pbl9wYWNrW2UgLSBwYWNrLT5vYmplY3RzXSA9IHA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9iamVjdF9lbnRyeSAqb2VfZGVsdGEoCisJCWNvbnN0IHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJaWYgKCFlLT5kZWx0YV9pZHgpCisJCXJldHVybiBOVUxMOworCWlmIChlLT5leHRfYmFzZSkKKwkJcmV0dXJuICZwYWNrLT5leHRfYmFzZXNbZS0+ZGVsdGFfaWR4IC0gMV07CisJZWxzZQorCQlyZXR1cm4gJnBhY2stPm9iamVjdHNbZS0+ZGVsdGFfaWR4IC0gMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfZGVsdGEoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhKQoreworCWlmIChkZWx0YSkKKwkJZS0+ZGVsdGFfaWR4ID0gKGRlbHRhIC0gcGFjay0+b2JqZWN0cykgKyAxOworCWVsc2UKKwkJZS0+ZGVsdGFfaWR4ID0gMDsKK30KKwordm9pZCBvZV9zZXRfZGVsdGFfZXh0KHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCSAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9iamVjdF9lbnRyeSAqb2VfZGVsdGFfY2hpbGQoCisJCWNvbnN0IHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJaWYgKGUtPmRlbHRhX2NoaWxkX2lkeCkKKwkJcmV0dXJuICZwYWNrLT5vYmplY3RzW2UtPmRlbHRhX2NoaWxkX2lkeCAtIDFdOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2Vfc2V0X2RlbHRhX2NoaWxkKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJICAgICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSwKKwkJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YSkKK3sKKwlpZiAoZGVsdGEpCisJCWUtPmRlbHRhX2NoaWxkX2lkeCA9IChkZWx0YSAtIHBhY2stPm9iamVjdHMpICsgMTsKKwllbHNlCisJCWUtPmRlbHRhX2NoaWxkX2lkeCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9iamVjdF9lbnRyeSAqb2VfZGVsdGFfc2libGluZygKKwkJY29uc3Qgc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpZiAoZS0+ZGVsdGFfc2libGluZ19pZHgpCisJCXJldHVybiAmcGFjay0+b2JqZWN0c1tlLT5kZWx0YV9zaWJsaW5nX2lkeCAtIDFdOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2Vfc2V0X2RlbHRhX3NpYmxpbmcoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqZSwKKwkJCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqZGVsdGEpCit7CisJaWYgKGRlbHRhKQorCQllLT5kZWx0YV9zaWJsaW5nX2lkeCA9IChkZWx0YSAtIHBhY2stPm9iamVjdHMpICsgMTsKKwllbHNlCisJCWUtPmRlbHRhX3NpYmxpbmdfaWR4ID0gMDsKK30KKwordW5zaWduZWQgbG9uZyBvZV9nZXRfc2l6ZV9zbG93KHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqZSk7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb2Vfc2l6ZShzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplKQoreworCWlmIChlLT5zaXplX3ZhbGlkKQorCQlyZXR1cm4gZS0+c2l6ZV87CisKKwlyZXR1cm4gb2VfZ2V0X3NpemVfc2xvdyhwYWNrLCBlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2Vfc2l6ZV9sZXNzX3RoYW4oc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqbGhzLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHJocykKK3sKKwlpZiAobGhzLT5zaXplX3ZhbGlkKQorCQlyZXR1cm4gbGhzLT5zaXplXyA8IHJoczsKKwlpZiAocmhzIDwgcGFjay0+b2Vfc2l6ZV9saW1pdCkgLyogcmhzIDwgMl54IDw9IGxocyA/ICovCisJCXJldHVybiAwOworCXJldHVybiBvZV9nZXRfc2l6ZV9zbG93KHBhY2ssIGxocykgPCByaHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9lX3NpemVfZ3JlYXRlcl90aGFuKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmxocywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByaHMpCit7CisJaWYgKGxocy0+c2l6ZV92YWxpZCkKKwkJcmV0dXJuIGxocy0+c2l6ZV8gPiByaHM7CisJaWYgKHJocyA8IHBhY2stPm9lX3NpemVfbGltaXQpIC8qIHJocyA8IDJeeCA8PSBsaHMgPyAqLworCQlyZXR1cm4gMTsKKwlyZXR1cm4gb2VfZ2V0X3NpemVfc2xvdyhwYWNrLCBsaHMpID4gcmhzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2Vfc2V0X3NpemUoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA8IHBhY2stPm9lX3NpemVfbGltaXQpIHsKKwkJZS0+c2l6ZV8gPSBzaXplOworCQllLT5zaXplX3ZhbGlkID0gMTsKKwl9IGVsc2UgeworCQllLT5zaXplX3ZhbGlkID0gMDsKKwkJaWYgKG9lX2dldF9zaXplX3Nsb3cocGFjaywgZSkgIT0gc2l6ZSkKKwkJCUJVRygiJ3NpemUnIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBvYmplY3Qgc2l6ZSEiKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvZV9kZWx0YV9zaXplKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpZiAoZS0+ZGVsdGFfc2l6ZV92YWxpZCkKKwkJcmV0dXJuIGUtPmRlbHRhX3NpemVfOworCisJLyoKKwkgKiBwYWNrLT5kZWx0YV9zaXplW10gY2FuJ3QgYmUgTlVMTCBiZWNhdXNlIG9lX3NldF9kZWx0YV9zaXplKCkKKwkgKiBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgd2hlbiBhIG5ldyBkZWx0YSBpcyBzYXZlZCB3aXRoCisJICogb2Vfc2V0X2RlbHRhKCkuCisJICogSWYgb2VfZGVsdGEoKSByZXR1cm5zIE5VTEwgKGkuZS4gZGVmYXVsdCBzdGF0ZSwgd2hpY2ggbWVhbnMKKwkgKiBkZWx0YV9zaXplX3ZhbGlkIGlzIGFsc28gZmFsc2UpLCB0aGVuIHRoZSBjYWxsZXIgbXVzdCBuZXZlcgorCSAqIGNhbGwgb2VfZGVsdGFfc2l6ZSgpLgorCSAqLworCXJldHVybiBwYWNrLT5kZWx0YV9zaXplW2UgLSBwYWNrLT5vYmplY3RzXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9lX3NldF9kZWx0YV9zaXplKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmIChzaXplIDwgcGFjay0+b2VfZGVsdGFfc2l6ZV9saW1pdCkgeworCQllLT5kZWx0YV9zaXplXyA9IHNpemU7CisJCWUtPmRlbHRhX3NpemVfdmFsaWQgPSAxOworCX0gZWxzZSB7CisJCXBhY2tpbmdfZGF0YV9sb2NrKHBhY2spOworCQlpZiAoIXBhY2stPmRlbHRhX3NpemUpCisJCQlBTExPQ19BUlJBWShwYWNrLT5kZWx0YV9zaXplLCBwYWNrLT5ucl9hbGxvYyk7CisJCXBhY2tpbmdfZGF0YV91bmxvY2socGFjayk7CisKKwkJcGFjay0+ZGVsdGFfc2l6ZVtlIC0gcGFjay0+b2JqZWN0c10gPSBzaXplOworCQllLT5kZWx0YV9zaXplX3ZhbGlkID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9lX3RyZWVfZGVwdGgoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGFjaywKKwkJCQkJIHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJaWYgKCFwYWNrLT50cmVlX2RlcHRoKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcGFjay0+dHJlZV9kZXB0aFtlIC0gcGFjay0+b2JqZWN0c107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvZV9zZXRfdHJlZV9kZXB0aChzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCSAgICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCB0cmVlX2RlcHRoKQoreworCWlmICghcGFjay0+dHJlZV9kZXB0aCkKKwkJQ0FMTE9DX0FSUkFZKHBhY2stPnRyZWVfZGVwdGgsIHBhY2stPm5yX2FsbG9jKTsKKwlwYWNrLT50cmVlX2RlcHRoW2UgLSBwYWNrLT5vYmplY3RzXSA9IHRyZWVfZGVwdGg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBvZV9sYXllcihzdHJ1Y3QgcGFja2luZ19kYXRhICpwYWNrLAorCQkJCSAgICAgc3RydWN0IG9iamVjdF9lbnRyeSAqZSkKK3sKKwlpZiAoIXBhY2stPmxheWVyKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcGFjay0+bGF5ZXJbZSAtIHBhY2stPm9iamVjdHNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2Vfc2V0X2xheWVyKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBhY2ssCisJCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqZSwKKwkJCQl1bnNpZ25lZCBjaGFyIGxheWVyKQoreworCWlmICghcGFjay0+bGF5ZXIpCisJCUNBTExPQ19BUlJBWShwYWNrLT5sYXllciwgcGFjay0+bnJfYWxsb2MpOworCXBhY2stPmxheWVyW2UgLSBwYWNrLT5vYmplY3RzXSA9IGxheWVyOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhY2stcmV2aW5kZXguYyBiL3BhY2stcmV2aW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjhhN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFjay1yZXZpbmRleC5jCkBAIC0wLDAgKzEsMjA1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYWNrLXJldmluZGV4LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKworLyoKKyAqIFBhY2sgaW5kZXggZm9yIGV4aXN0aW5nIHBhY2tzIGdpdmUgdXMgZWFzeSBhY2Nlc3MgdG8gdGhlIG9mZnNldHMgaW50bworICogY29ycmVzcG9uZGluZyBwYWNrIGZpbGUgd2hlcmUgZWFjaCBvYmplY3QncyBkYXRhIHN0YXJ0cywgYnV0IHRoZSBlbnRyaWVzCisgKiBkbyBub3Qgc3RvcmUgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgcmVwcmVzZW50YXRpb24gKHVuY29tcHJlc3NlZAorICogc2l6ZSBpcyBlYXNpbHkgYXZhaWxhYmxlIGJ5IGV4YW1pbmluZyB0aGUgcGFjayBlbnRyeSBoZWFkZXIpLiAgSXQgaXMKKyAqIGFsc28gcmF0aGVyIGV4cGVuc2l2ZSB0byBmaW5kIHRoZSBzaGExIGZvciBhbiBvYmplY3QgZ2l2ZW4gaXRzIG9mZnNldC4KKyAqCisgKiBUaGUgcGFjayBpbmRleCBmaWxlIGlzIHNvcnRlZCBieSBvYmplY3QgbmFtZSBtYXBwaW5nIHRvIG9mZnNldDsKKyAqIHRoaXMgcmV2aW5kZXggYXJyYXkgaXMgYSBsaXN0IG9mIG9mZnNldC9pbmRleF9uciBwYWlycworICogb3JkZXJlZCBieSBvZmZzZXQsIHNvIGlmIHlvdSBrbm93IHRoZSBvZmZzZXQgb2YgYW4gb2JqZWN0LCBuZXh0IG9mZnNldAorICogaXMgd2hlcmUgaXRzIHBhY2tlZCByZXByZXNlbnRhdGlvbiBlbmRzIGFuZCB0aGUgaW5kZXhfbnIgY2FuIGJlIHVzZWQgdG8KKyAqIGdldCB0aGUgb2JqZWN0IHNoYTEgZnJvbSB0aGUgbWFpbiBpbmRleC4KKyAqLworCisvKgorICogVGhpcyBpcyBhIGxlYXN0LXNpZ25pZmljYW50LWRpZ2l0IHJhZGl4IHNvcnQuCisgKgorICogSXQgc29ydHMgZWFjaCBvZiB0aGUgIm4iIGl0ZW1zIGluICJlbnRyaWVzIiBieSBpdHMgb2Zmc2V0IGZpZWxkLiBUaGUgIm1heCIKKyAqIHBhcmFtZXRlciBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBsYXJnZXN0IG9mZnNldCBpbiB0aGUgYXJyYXksCisgKiBhbmQgbGV0cyB1cyBxdWl0IHRoZSBzb3J0IGVhcmx5LgorICovCitzdGF0aWMgdm9pZCBzb3J0X3JldmluZGV4KHN0cnVjdCByZXZpbmRleF9lbnRyeSAqZW50cmllcywgdW5zaWduZWQgbiwgb2ZmX3QgbWF4KQoreworCS8qCisJICogV2UgdXNlIGEgImRpZ2l0IiBzaXplIG9mIDE2IGJpdHMuIFRoYXQga2VlcHMgb3VyIG1lbW9yeQorCSAqIHVzYWdlIHJlYXNvbmFibGUsIGFuZCB3ZSBjYW4gZ2VuZXJhbGx5IChmb3IgYSA0RyBvciBzbWFsbGVyCisJICogcGFja2ZpbGUpIHF1aXQgYWZ0ZXIgdHdvIHJvdW5kcyBvZiByYWRpeC1zb3J0aW5nLgorCSAqLworI2RlZmluZSBESUdJVF9TSVpFICgxNikKKyNkZWZpbmUgQlVDS0VUUyAoMSA8PCBESUdJVF9TSVpFKQorCS8qCisJICogV2Ugd2FudCB0byBrbm93IHRoZSBidWNrZXQgdGhhdCBhW2ldIHdpbGwgZ28gaW50byB3aGVuIHdlIGFyZSB1c2luZworCSAqIHRoZSBkaWdpdCB0aGF0IGlzIE4gYml0cyBmcm9tIHRoZSAobGVhc3Qgc2lnbmlmaWNhbnQpIGVuZC4KKwkgKi8KKyNkZWZpbmUgQlVDS0VUX0ZPUihhLCBpLCBiaXRzKSAoKChhKVsoaSldLm9mZnNldCA+PiAoYml0cykpICYgKEJVQ0tFVFMtMSkpCisKKwkvKgorCSAqIFdlIG5lZWQgTyhuKSB0ZW1wb3Jhcnkgc3RvcmFnZS4gUmF0aGVyIHRoYW4gZG8gYW4gZXh0cmEgY29weSBvZiB0aGUKKwkgKiBwYXJ0aWFsIHJlc3VsdHMgaW50byAiZW50cmllcyIsIHdlIHNvcnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUKKwkgKiByZWFsIGFycmF5IGFuZCB0ZW1wb3Jhcnkgc3RvcmFnZS4gSW4gZWFjaCBpdGVyYXRpb24gb2YgdGhlIGxvb3AsIHdlCisJICoga2VlcCB0cmFjayBvZiB0aGVtIHdpdGggYWxpYXMgcG9pbnRlcnMsIGFsd2F5cyBzb3J0aW5nIGZyb20gImZyb20iCisJICogdG8gInRvIi4KKwkgKi8KKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnRtcCwgKmZyb20sICp0bzsKKwlpbnQgYml0czsKKwl1bnNpZ25lZCAqcG9zOworCisJQUxMT0NfQVJSQVkocG9zLCBCVUNLRVRTKTsKKwlBTExPQ19BUlJBWSh0bXAsIG4pOworCWZyb20gPSBlbnRyaWVzOworCXRvID0gdG1wOworCisJLyoKKwkgKiBJZiAobWF4ID4+IGJpdHMpIGlzIHplcm8sIHRoZW4gd2Uga25vdyB0aGF0IHRoZSByYWRpeCBkaWdpdCB3ZSBhcmUKKwkgKiBvbiAoYW5kIGFueSBoaWdoZXIpIHdpbGwgYmUgemVybyBmb3IgYWxsIGVudHJpZXMsIGFuZCBvdXIgbG9vcCB3aWxsCisJICogYmUgYSBuby1vcCwgYXMgZXZlcnlib2R5IGxhbmRzIGluIHRoZSBzYW1lIHplcm8tdGggYnVja2V0LgorCSAqLworCWZvciAoYml0cyA9IDA7IG1heCA+PiBiaXRzOyBiaXRzICs9IERJR0lUX1NJWkUpIHsKKwkJdW5zaWduZWQgaTsKKworCQltZW1zZXQocG9zLCAwLCBCVUNLRVRTICogc2l6ZW9mKCpwb3MpKTsKKworCQkvKgorCQkgKiBXZSB3YW50IHBvc1tpXSB0byBzdG9yZSB0aGUgaW5kZXggb2YgdGhlIGxhc3QgZWxlbWVudCB0aGF0CisJCSAqIHdpbGwgZ28gaW4gYnVja2V0ICJpIiAoYWN0dWFsbHkgb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCkuCisJCSAqIFRvIGRvIHRoaXMsIHdlIGZpcnN0IGNvdW50IHRoZSBpdGVtcyB0aGF0IHdpbGwgZ28gaW4gZWFjaAorCQkgKiBidWNrZXQsIHdoaWNoIGdpdmVzIHVzIGEgcmVsYXRpdmUgb2Zmc2V0IGZyb20gdGhlIGxhc3QKKwkJICogYnVja2V0LiBXZSBjYW4gdGhlbiBjdW11bGF0aXZlbHkgYWRkIHRoZSBpbmRleCBmcm9tIHRoZQorCQkgKiBwcmV2aW91cyBidWNrZXQgdG8gZ2V0IHRoZSB0cnVlIGluZGV4LgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCXBvc1tCVUNLRVRfRk9SKGZyb20sIGksIGJpdHMpXSsrOworCQlmb3IgKGkgPSAxOyBpIDwgQlVDS0VUUzsgaSsrKQorCQkJcG9zW2ldICs9IHBvc1tpLTFdOworCisJCS8qCisJCSAqIE5vdyB3ZSBjYW4gZHJvcCB0aGUgZWxlbWVudHMgaW50byB0aGVpciBjb3JyZWN0IGJ1Y2tldHMgKGluCisJCSAqIG91ciB0ZW1wb3JhcnkgYXJyYXkpLiAgV2UgaXRlcmF0ZSB0aGUgcG9zIGNvdW50ZXIgYmFja3dhcmRzCisJCSAqIHRvIGF2b2lkIHVzaW5nIGFuIGV4dHJhIGluZGV4IHRvIGNvdW50IHVwLiBBbmQgc2luY2Ugd2UgYXJlCisJCSAqIGdvaW5nIGJhY2t3YXJkcyB0aGVyZSwgd2UgbXVzdCBhbHNvIGdvIGJhY2t3YXJkcyB0aHJvdWdoIHRoZQorCQkgKiBhcnJheSBpdHNlbGYsIHRvIGtlZXAgdGhlIHNvcnQgc3RhYmxlLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgd2UgdXNlIGFuIHVuc2lnbmVkIGl0ZXJhdG9yIHRvIG1ha2Ugc3VyZSB3ZSBjYW4KKwkJICogaGFuZGxlIDJeMzItMSBvYmplY3RzLCBldmVuIG9uIGEgMzItYml0IHN5c3RlbS4gQnV0IHRoaXMKKwkJICogbWVhbnMgd2UgY2Fubm90IHVzZSB0aGUgbW9yZSBvYnZpb3VzICJpID49IDAiIGxvb3AgY29uZGl0aW9uCisJCSAqIGZvciBjb3VudGluZyBiYWNrd2FyZHMsIGFuZCBtdXN0IGluc3RlYWQgY2hlY2sgZm9yCisJCSAqIHdyYXAtYXJvdW5kIHdpdGggVUlOVF9NQVguCisJCSAqLworCQlmb3IgKGkgPSBuIC0gMTsgaSAhPSBVSU5UX01BWDsgaS0tKQorCQkJdG9bLS1wb3NbQlVDS0VUX0ZPUihmcm9tLCBpLCBiaXRzKV1dID0gZnJvbVtpXTsKKworCQkvKgorCQkgKiBOb3cgInRvIiBjb250YWlucyB0aGUgbW9zdCBzb3J0ZWQgbGlzdCwgc28gd2Ugc3dhcCAiZnJvbSIgYW5kCisJCSAqICJ0byIgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKwkJICovCisJCVNXQVAoZnJvbSwgdG8pOworCX0KKworCS8qCisJICogSWYgd2UgZW5kZWQgd2l0aCBvdXIgZGF0YSBpbiB0aGUgb3JpZ2luYWwgYXJyYXksIGdyZWF0LiBJZiBub3QsCisJICogd2UgaGF2ZSB0byBtb3ZlIGl0IGJhY2sgZnJvbSB0aGUgdGVtcG9yYXJ5IHN0b3JhZ2UuCisJICovCisJaWYgKGZyb20gIT0gZW50cmllcykKKwkJQ09QWV9BUlJBWShlbnRyaWVzLCB0bXAsIG4pOworCWZyZWUodG1wKTsKKwlmcmVlKHBvcyk7CisKKyN1bmRlZiBCVUNLRVRfRk9SCisjdW5kZWYgQlVDS0VUUworI3VuZGVmIERJR0lUX1NJWkUKK30KKworLyoKKyAqIE9yZGVyZWQgbGlzdCBvZiBvZmZzZXRzIG9mIG9iamVjdHMgaW4gdGhlIHBhY2suCisgKi8KK3N0YXRpYyB2b2lkIGNyZWF0ZV9wYWNrX3JldmluZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWNvbnN0IHVuc2lnbmVkIG51bV9lbnQgPSBwLT5udW1fb2JqZWN0czsKKwl1bnNpZ25lZCBpOworCWNvbnN0IGNoYXIgKmluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKwljb25zdCB1bnNpZ25lZCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKworCUFMTE9DX0FSUkFZKHAtPnJldmluZGV4LCBudW1fZW50ICsgMSk7CisJaW5kZXggKz0gNCAqIDI1NjsKKworCWlmIChwLT5pbmRleF92ZXJzaW9uID4gMSkgeworCQljb25zdCB1aW50MzJfdCAqb2ZmXzMyID0KKwkJCSh1aW50MzJfdCAqKShpbmRleCArIDggKyBwLT5udW1fb2JqZWN0cyAqIChoYXNoc3ogKyA0KSk7CisJCWNvbnN0IHVpbnQzMl90ICpvZmZfNjQgPSBvZmZfMzIgKyBwLT5udW1fb2JqZWN0czsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9lbnQ7IGkrKykgeworCQkJY29uc3QgdWludDMyX3Qgb2ZmID0gbnRvaGwoKm9mZl8zMisrKTsKKwkJCWlmICghKG9mZiAmIDB4ODAwMDAwMDApKSB7CisJCQkJcC0+cmV2aW5kZXhbaV0ub2Zmc2V0ID0gb2ZmOworCQkJfSBlbHNlIHsKKwkJCQlwLT5yZXZpbmRleFtpXS5vZmZzZXQgPSBnZXRfYmU2NChvZmZfNjQpOworCQkJCW9mZl82NCArPSAyOworCQkJfQorCQkJcC0+cmV2aW5kZXhbaV0ubnIgPSBpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9lbnQ7IGkrKykgeworCQkJY29uc3QgdWludDMyX3QgaGwgPSAqKCh1aW50MzJfdCAqKShpbmRleCArIChoYXNoc3ogKyA0KSAqIGkpKTsKKwkJCXAtPnJldmluZGV4W2ldLm9mZnNldCA9IG50b2hsKGhsKTsKKwkJCXAtPnJldmluZGV4W2ldLm5yID0gaTsKKwkJfQorCX0KKworCS8qCisJICogVGhpcyBrbm93cyB0aGUgcGFjayBmb3JtYXQgLS0gdGhlIGhhc2ggdHJhaWxlcgorCSAqIGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGxhc3Qgb2JqZWN0IGRhdGEuCisJICovCisJcC0+cmV2aW5kZXhbbnVtX2VudF0ub2Zmc2V0ID0gcC0+cGFja19zaXplIC0gaGFzaHN6OworCXAtPnJldmluZGV4W251bV9lbnRdLm5yID0gLTE7CisJc29ydF9yZXZpbmRleChwLT5yZXZpbmRleCwgbnVtX2VudCwgcC0+cGFja19zaXplKTsKK30KKworaW50IGxvYWRfcGFja19yZXZpbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlpZiAoIXAtPnJldmluZGV4KSB7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQlyZXR1cm4gLTE7CisJCWNyZWF0ZV9wYWNrX3JldmluZGV4KHApOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGZpbmRfcmV2aW5kZXhfcG9zaXRpb24oc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9mcykKK3sKKwlpbnQgbG8gPSAwOworCWludCBoaSA9IHAtPm51bV9vYmplY3RzICsgMTsKKwljb25zdCBzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmluZGV4ID0gcC0+cmV2aW5kZXg7CisKKwlkbyB7CisJCWNvbnN0IHVuc2lnbmVkIG1pID0gbG8gKyAoaGkgLSBsbykgLyAyOworCQlpZiAocmV2aW5kZXhbbWldLm9mZnNldCA9PSBvZnMpIHsKKwkJCXJldHVybiBtaTsKKwkJfSBlbHNlIGlmIChvZnMgPCByZXZpbmRleFttaV0ub2Zmc2V0KQorCQkJaGkgPSBtaTsKKwkJZWxzZQorCQkJbG8gPSBtaSArIDE7CisJfSB3aGlsZSAobG8gPCBoaSk7CisKKwllcnJvcigiYmFkIG9mZnNldCBmb3IgcmV2aW5kZXgiKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0cnVjdCByZXZpbmRleF9lbnRyeSAqZmluZF9wYWNrX3JldmluZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvZnMpCit7CisJaW50IHBvczsKKworCWlmIChsb2FkX3BhY2tfcmV2aW5kZXgocCkpCisJCXJldHVybiBOVUxMOworCisJcG9zID0gZmluZF9yZXZpbmRleF9wb3NpdGlvbihwLCBvZnMpOworCisJaWYgKHBvcyA8IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHAtPnJldmluZGV4ICsgcG9zOworfQpkaWZmIC0tZ2l0IGEvcGFjay1yZXZpbmRleC5oIGIvcGFjay1yZXZpbmRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODMzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLXJldmluZGV4LmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBQQUNLX1JFVklOREVYX0gKKyNkZWZpbmUgUEFDS19SRVZJTkRFWF9ICisKK3N0cnVjdCBwYWNrZWRfZ2l0OworCitzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgeworCW9mZl90IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgbnI7Cit9OworCitpbnQgbG9hZF9wYWNrX3JldmluZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICpwKTsKK2ludCBmaW5kX3JldmluZGV4X3Bvc2l0aW9uKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvZnMpOworCitzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmZpbmRfcGFja19yZXZpbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2ZzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9wYWNrLXdyaXRlLmMgYi9wYWNrLXdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwMTdiZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2std3JpdGUuYwpAQCAtMCwwICsxLDM3OSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorCit2b2lkIHJlc2V0X3BhY2tfaWR4X29wdGlvbihzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpvcHRzKQoreworCW1lbXNldChvcHRzLCAwLCBzaXplb2YoKm9wdHMpKTsKKwlvcHRzLT52ZXJzaW9uID0gMjsKKwlvcHRzLT5vZmYzMl9saW1pdCA9IDB4N2ZmZmZmZmY7Cit9CisKK3N0YXRpYyBpbnQgc2hhMV9jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKmEgPSAqKHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKilfYTsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKmIgPSAqKHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKilfYjsKKwlyZXR1cm4gb2lkY21wKCZhLT5vaWQsICZiLT5vaWQpOworfQorCitzdGF0aWMgaW50IGNtcF91aW50MzIoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXVpbnQzMl90IGEgPSAqKCh1aW50MzJfdCAqKWFfKTsKKwl1aW50MzJfdCBiID0gKigodWludDMyX3QgKiliXyk7CisKKwlyZXR1cm4gKGEgPCBiKSA/IC0xIDogKGEgIT0gYik7Cit9CisKK3N0YXRpYyBpbnQgbmVlZF9sYXJnZV9vZmZzZXQob2ZmX3Qgb2Zmc2V0LCBjb25zdCBzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpvcHRzKQoreworCXVpbnQzMl90IG9mc3ZhbDsKKworCWlmICgob2Zmc2V0ID4+IDMxKSB8fCAob3B0cy0+b2ZmMzJfbGltaXQgPCBvZmZzZXQpKQorCQlyZXR1cm4gMTsKKwlpZiAoIW9wdHMtPmFub21hbHlfbnIpCisJCXJldHVybiAwOworCW9mc3ZhbCA9IG9mZnNldDsKKwlyZXR1cm4gISFic2VhcmNoKCZvZnN2YWwsIG9wdHMtPmFub21hbHksIG9wdHMtPmFub21hbHlfbnIsCisJCQkgc2l6ZW9mKG9mc3ZhbCksIGNtcF91aW50MzIpOworfQorCisvKgorICogT24gZW50cnkgKnNoYTEgY29udGFpbnMgdGhlIHBhY2sgY29udGVudCBTSEExIGhhc2gsIG9uIGV4aXQgaXQgaXMKKyAqIHRoZSBTSEExIGhhc2ggb2Ygc29ydGVkIG9iamVjdCBuYW1lcy4gVGhlIG9iamVjdHMgYXJyYXkgcGFzc2VkIGluCisgKiB3aWxsIGJlIHNvcnRlZCBieSBTSEExIG9uIGV4aXQuCisgKi8KK2NvbnN0IGNoYXIgKndyaXRlX2lkeF9maWxlKGNvbnN0IGNoYXIgKmluZGV4X25hbWUsIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKm9iamVjdHMsCisJCQkgICBpbnQgbnJfb2JqZWN0cywgY29uc3Qgc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqb3B0cywKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGhhc2hmaWxlICpmOworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKnNvcnRlZF9ieV9zaGEsICoqbGlzdCwgKipsYXN0OworCW9mZl90IGxhc3Rfb2JqX29mZnNldCA9IDA7CisJdWludDMyX3QgYXJyYXlbMjU2XTsKKwlpbnQgaSwgZmQ7CisJdWludDMyX3QgaW5kZXhfdmVyc2lvbjsKKworCWlmIChucl9vYmplY3RzKSB7CisJCXNvcnRlZF9ieV9zaGEgPSBvYmplY3RzOworCQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwkJbGFzdCA9IHNvcnRlZF9ieV9zaGEgKyBucl9vYmplY3RzOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgKytpKSB7CisJCQlpZiAob2JqZWN0c1tpXS0+b2Zmc2V0ID4gbGFzdF9vYmpfb2Zmc2V0KQorCQkJCWxhc3Rfb2JqX29mZnNldCA9IG9iamVjdHNbaV0tPm9mZnNldDsKKwkJfQorCQlRU09SVChzb3J0ZWRfYnlfc2hhLCBucl9vYmplY3RzLCBzaGExX2NvbXBhcmUpOworCX0KKwllbHNlCisJCXNvcnRlZF9ieV9zaGEgPSBsaXN0ID0gbGFzdCA9IE5VTEw7CisKKwlpZiAob3B0cy0+ZmxhZ3MgJiBXUklURV9JRFhfVkVSSUZZKSB7CisJCWFzc2VydChpbmRleF9uYW1lKTsKKwkJZiA9IGhhc2hmZF9jaGVjayhpbmRleF9uYW1lKTsKKwl9IGVsc2UgeworCQlpZiAoIWluZGV4X25hbWUpIHsKKwkJCXN0cnVjdCBzdHJidWYgdG1wX2ZpbGUgPSBTVFJCVUZfSU5JVDsKKwkJCWZkID0gb2RiX21rc3RlbXAoJnRtcF9maWxlLCAicGFjay90bXBfaWR4X1hYWFhYWCIpOworCQkJaW5kZXhfbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJnRtcF9maWxlLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXVubGluayhpbmRleF9uYW1lKTsKKwkJCWZkID0gb3BlbihpbmRleF9uYW1lLCBPX0NSRUFUfE9fRVhDTHxPX1dST05MWSwgMDYwMCk7CisJCQlpZiAoZmQgPCAwKQorCQkJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIiwgaW5kZXhfbmFtZSk7CisJCX0KKwkJZiA9IGhhc2hmZChmZCwgaW5kZXhfbmFtZSk7CisJfQorCisJLyogaWYgbGFzdCBvYmplY3QncyBvZmZzZXQgaXMgPj0gMl4zMSB3ZSBzaG91bGQgdXNlIGluZGV4IFYyICovCisJaW5kZXhfdmVyc2lvbiA9IG5lZWRfbGFyZ2Vfb2Zmc2V0KGxhc3Rfb2JqX29mZnNldCwgb3B0cykgPyAyIDogb3B0cy0+dmVyc2lvbjsKKworCS8qIGluZGV4IHZlcnNpb25zIDIgYW5kIGFib3ZlIG5lZWQgYSBoZWFkZXIgKi8KKwlpZiAoaW5kZXhfdmVyc2lvbiA+PSAyKSB7CisJCXN0cnVjdCBwYWNrX2lkeF9oZWFkZXIgaGRyOworCQloZHIuaWR4X3NpZ25hdHVyZSA9IGh0b25sKFBBQ0tfSURYX1NJR05BVFVSRSk7CisJCWhkci5pZHhfdmVyc2lvbiA9IGh0b25sKGluZGV4X3ZlcnNpb24pOworCQloYXNod3JpdGUoZiwgJmhkciwgc2l6ZW9mKGhkcikpOworCX0KKworCS8qCisJICogV3JpdGUgdGhlIGZpcnN0LWxldmVsIHRhYmxlICh0aGUgbGlzdCBpcyBzb3J0ZWQsCisJICogYnV0IHdlIHVzZSBhIDI1Ni1lbnRyeSBsb29rdXAgdG8gYmUgYWJsZSB0byBhdm9pZAorCSAqIGhhdmluZyB0byBkbyBlaWdodCBleHRyYSBiaW5hcnkgc2VhcmNoIGl0ZXJhdGlvbnMpLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKipuZXh0ID0gbGlzdDsKKwkJd2hpbGUgKG5leHQgPCBsYXN0KSB7CisJCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKm9iaiA9ICpuZXh0OworCQkJaWYgKG9iai0+b2lkLmhhc2hbMF0gIT0gaSkKKwkJCQlicmVhazsKKwkJCW5leHQrKzsKKwkJfQorCQlhcnJheVtpXSA9IGh0b25sKG5leHQgLSBzb3J0ZWRfYnlfc2hhKTsKKwkJbGlzdCA9IG5leHQ7CisJfQorCWhhc2h3cml0ZShmLCBhcnJheSwgMjU2ICogNCk7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBhY3R1YWwgU0hBMSBlbnRyaWVzLi4KKwkgKi8KKwlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJaWYgKGluZGV4X3ZlcnNpb24gPCAyKSB7CisJCQl1aW50MzJfdCBvZmZzZXQgPSBodG9ubChvYmotPm9mZnNldCk7CisJCQloYXNod3JpdGUoZiwgJm9mZnNldCwgNCk7CisJCX0KKwkJaGFzaHdyaXRlKGYsIG9iai0+b2lkLmhhc2gsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwkJaWYgKChvcHRzLT5mbGFncyAmIFdSSVRFX0lEWF9TVFJJQ1QpICYmCisJCSAgICAoaSAmJiBvaWRlcSgmbGlzdFstMl0tPm9pZCwgJm9iai0+b2lkKSkpCisJCQlkaWUoIlRoZSBzYW1lIG9iamVjdCAlcyBhcHBlYXJzIHR3aWNlIGluIHRoZSBwYWNrIiwKKwkJCSAgICBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCX0KKworCWlmIChpbmRleF92ZXJzaW9uID49IDIpIHsKKwkJdW5zaWduZWQgaW50IG5yX2xhcmdlX29mZnNldCA9IDA7CisKKwkJLyogd3JpdGUgdGhlIGNyYzMyIHRhYmxlICovCisJCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKm9iaiA9ICpsaXN0Kys7CisJCQl1aW50MzJfdCBjcmMzMl92YWwgPSBodG9ubChvYmotPmNyYzMyKTsKKwkJCWhhc2h3cml0ZShmLCAmY3JjMzJfdmFsLCA0KTsKKwkJfQorCisJCS8qIHdyaXRlIHRoZSAzMi1iaXQgb2Zmc2V0IHRhYmxlICovCisJCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKm9iaiA9ICpsaXN0Kys7CisJCQl1aW50MzJfdCBvZmZzZXQ7CisKKwkJCW9mZnNldCA9IChuZWVkX2xhcmdlX29mZnNldChvYmotPm9mZnNldCwgb3B0cykKKwkJCQkgID8gKDB4ODAwMDAwMDAgfCBucl9sYXJnZV9vZmZzZXQrKykKKwkJCQkgIDogb2JqLT5vZmZzZXQpOworCQkJb2Zmc2V0ID0gaHRvbmwob2Zmc2V0KTsKKwkJCWhhc2h3cml0ZShmLCAmb2Zmc2V0LCA0KTsKKwkJfQorCisJCS8qIHdyaXRlIHRoZSBsYXJnZSBvZmZzZXQgdGFibGUgKi8KKwkJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJCXdoaWxlIChucl9sYXJnZV9vZmZzZXQpIHsKKwkJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJCXVpbnQ2NF90IG9mZnNldCA9IG9iai0+b2Zmc2V0OworCQkJdWludDMyX3Qgc3BsaXRbMl07CisKKwkJCWlmICghbmVlZF9sYXJnZV9vZmZzZXQob2Zmc2V0LCBvcHRzKSkKKwkJCQljb250aW51ZTsKKwkJCXNwbGl0WzBdID0gaHRvbmwob2Zmc2V0ID4+IDMyKTsKKwkJCXNwbGl0WzFdID0gaHRvbmwob2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCQloYXNod3JpdGUoZiwgc3BsaXQsIDgpOworCQkJbnJfbGFyZ2Vfb2Zmc2V0LS07CisJCX0KKwl9CisKKwloYXNod3JpdGUoZiwgc2hhMSwgdGhlX2hhc2hfYWxnby0+cmF3c3opOworCWZpbmFsaXplX2hhc2hmaWxlKGYsIE5VTEwsIENTVU1fSEFTSF9JTl9TVFJFQU0gfCBDU1VNX0NMT1NFIHwKKwkJCQkgICAgKChvcHRzLT5mbGFncyAmIFdSSVRFX0lEWF9WRVJJRlkpCisJCQkJICAgID8gMCA6IENTVU1fRlNZTkMpKTsKKwlyZXR1cm4gaW5kZXhfbmFtZTsKK30KKworb2ZmX3Qgd3JpdGVfcGFja19oZWFkZXIoc3RydWN0IGhhc2hmaWxlICpmLCB1aW50MzJfdCBucl9lbnRyaWVzKQoreworCXN0cnVjdCBwYWNrX2hlYWRlciBoZHI7CisKKwloZHIuaGRyX3NpZ25hdHVyZSA9IGh0b25sKFBBQ0tfU0lHTkFUVVJFKTsKKwloZHIuaGRyX3ZlcnNpb24gPSBodG9ubChQQUNLX1ZFUlNJT04pOworCWhkci5oZHJfZW50cmllcyA9IGh0b25sKG5yX2VudHJpZXMpOworCWhhc2h3cml0ZShmLCAmaGRyLCBzaXplb2YoaGRyKSk7CisJcmV0dXJuIHNpemVvZihoZHIpOworfQorCisvKgorICogVXBkYXRlIHBhY2sgaGVhZGVyIHdpdGggb2JqZWN0X2NvdW50IGFuZCBjb21wdXRlIG5ldyBTSEExIGZvciBwYWNrIGRhdGEKKyAqIGFzc29jaWF0ZWQgdG8gcGFja19mZCwgYW5kIHdyaXRlIHRoYXQgU0hBMSBhdCB0aGUgZW5kLiAgVGhhdCBuZXcgU0hBMQorICogaXMgYWxzbyByZXR1cm5lZCBpbiBuZXdfcGFja19zaGExLgorICoKKyAqIElmIHBhcnRpYWxfcGFja19zaGExIGlzIG5vbiBudWxsLCB0aGVuIHRoZSBTSEExIG9mIHRoZSBleGlzdGluZyBwYWNrCisgKiAod2l0aG91dCB0aGUgaGVhZGVyIHVwZGF0ZSkgaXMgY29tcHV0ZWQgYW5kIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZQorICogb25lIHByb3ZpZGVkIGluIHBhcnRpYWxfcGFja19zaGExLiAgVGhlIHZhbGlkYXRpb24gaXMgcGVyZm9ybWVkIGF0CisgKiBwYXJ0aWFsX3BhY2tfb2Zmc2V0IGJ5dGVzIGluIHRoZSBwYWNrIGZpbGUuICBUaGUgU0hBMSBvZiB0aGUgcmVtYWluaW5nCisgKiBkYXRhIChpLmUuIGZyb20gcGFydGlhbF9wYWNrX29mZnNldCB0byB0aGUgZW5kKSBpcyB0aGVuIGNvbXB1dGVkIGFuZAorICogcmV0dXJuZWQgaW4gcGFydGlhbF9wYWNrX3NoYTEuCisgKgorICogTm90ZSB0aGF0IG5ld19wYWNrX3NoYTEgaXMgdXBkYXRlZCBsYXN0LCBzbyBib3RoIG5ld19wYWNrX3NoYTEgYW5kCisgKiBwYXJ0aWFsX3BhY2tfc2hhMSBjYW4gcmVmZXIgdG8gdGhlIHNhbWUgYnVmZmVyIGlmIHRoZSBjYWxsZXIgaXMgbm90CisgKiBpbnRlcmVzdGVkIGluIHRoZSByZXN1bHRpbmcgU0hBMSBvZiBwYWNrIGRhdGEgYWJvdmUgcGFydGlhbF9wYWNrX29mZnNldC4KKyAqLwordm9pZCBmaXh1cF9wYWNrX2hlYWRlcl9mb290ZXIoaW50IHBhY2tfZmQsCisJCQkgdW5zaWduZWQgY2hhciAqbmV3X3BhY2tfaGFzaCwKKwkJCSBjb25zdCBjaGFyICpwYWNrX25hbWUsCisJCQkgdWludDMyX3Qgb2JqZWN0X2NvdW50LAorCQkJIHVuc2lnbmVkIGNoYXIgKnBhcnRpYWxfcGFja19oYXNoLAorCQkJIG9mZl90IHBhcnRpYWxfcGFja19vZmZzZXQpCit7CisJaW50IGFsaWduZWRfc3osIGJ1Zl9zeiA9IDggKiAxMDI0OworCWdpdF9oYXNoX2N0eCBvbGRfaGFzaF9jdHgsIG5ld19oYXNoX2N0eDsKKwlzdHJ1Y3QgcGFja19oZWFkZXIgaGRyOworCWNoYXIgKmJ1ZjsKKwlzc2l6ZV90IHJlYWRfcmVzdWx0OworCisJdGhlX2hhc2hfYWxnby0+aW5pdF9mbigmb2xkX2hhc2hfY3R4KTsKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZuZXdfaGFzaF9jdHgpOworCisJaWYgKGxzZWVrKHBhY2tfZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQorCQlkaWVfZXJybm8oIkZhaWxlZCBzZWVraW5nIHRvIHN0YXJ0IG9mICclcyciLCBwYWNrX25hbWUpOworCXJlYWRfcmVzdWx0ID0gcmVhZF9pbl9mdWxsKHBhY2tfZmQsICZoZHIsIHNpemVvZihoZHIpKTsKKwlpZiAocmVhZF9yZXN1bHQgPCAwKQorCQlkaWVfZXJybm8oIlVuYWJsZSB0byByZXJlYWQgaGVhZGVyIG9mICclcyciLCBwYWNrX25hbWUpOworCWVsc2UgaWYgKHJlYWRfcmVzdWx0ICE9IHNpemVvZihoZHIpKQorCQlkaWVfZXJybm8oIlVuZXhwZWN0ZWQgc2hvcnQgcmVhZCBmb3IgaGVhZGVyIG9mICclcyciLAorCQkJICBwYWNrX25hbWUpOworCWlmIChsc2VlayhwYWNrX2ZkLCAwLCBTRUVLX1NFVCkgIT0gMCkKKwkJZGllX2Vycm5vKCJGYWlsZWQgc2Vla2luZyB0byBzdGFydCBvZiAnJXMnIiwgcGFja19uYW1lKTsKKwl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJm9sZF9oYXNoX2N0eCwgJmhkciwgc2l6ZW9mKGhkcikpOworCWhkci5oZHJfZW50cmllcyA9IGh0b25sKG9iamVjdF9jb3VudCk7CisJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZuZXdfaGFzaF9jdHgsICZoZHIsIHNpemVvZihoZHIpKTsKKwl3cml0ZV9vcl9kaWUocGFja19mZCwgJmhkciwgc2l6ZW9mKGhkcikpOworCXBhcnRpYWxfcGFja19vZmZzZXQgLT0gc2l6ZW9mKGhkcik7CisKKwlidWYgPSB4bWFsbG9jKGJ1Zl9zeik7CisJYWxpZ25lZF9zeiA9IGJ1Zl9zeiAtIHNpemVvZihoZHIpOworCWZvciAoOzspIHsKKwkJc3NpemVfdCBtLCBuOworCQltID0gKHBhcnRpYWxfcGFja19oYXNoICYmIHBhcnRpYWxfcGFja19vZmZzZXQgPCBhbGlnbmVkX3N6KSA/CisJCQlwYXJ0aWFsX3BhY2tfb2Zmc2V0IDogYWxpZ25lZF9zejsKKwkJbiA9IHhyZWFkKHBhY2tfZmQsIGJ1ZiwgbSk7CisJCWlmICghbikKKwkJCWJyZWFrOworCQlpZiAobiA8IDApCisJCQlkaWVfZXJybm8oIkZhaWxlZCB0byBjaGVja3N1bSAnJXMnIiwgcGFja19uYW1lKTsKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZuZXdfaGFzaF9jdHgsIGJ1Ziwgbik7CisKKwkJYWxpZ25lZF9zeiAtPSBuOworCQlpZiAoIWFsaWduZWRfc3opCisJCQlhbGlnbmVkX3N6ID0gYnVmX3N6OworCisJCWlmICghcGFydGlhbF9wYWNrX2hhc2gpCisJCQljb250aW51ZTsKKworCQl0aGVfaGFzaF9hbGdvLT51cGRhdGVfZm4oJm9sZF9oYXNoX2N0eCwgYnVmLCBuKTsKKwkJcGFydGlhbF9wYWNrX29mZnNldCAtPSBuOworCQlpZiAocGFydGlhbF9wYWNrX29mZnNldCA9PSAwKSB7CisJCQl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisJCQl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihoYXNoLCAmb2xkX2hhc2hfY3R4KTsKKwkJCWlmICghaGFzaGVxKGhhc2gsIHBhcnRpYWxfcGFja19oYXNoKSkKKwkJCQlkaWUoIlVuZXhwZWN0ZWQgY2hlY2tzdW0gZm9yICVzICIKKwkJCQkgICAgIihkaXNrIGNvcnJ1cHRpb24/KSIsIHBhY2tfbmFtZSk7CisJCQkvKgorCQkJICogTm93IGxldCdzIGNvbXB1dGUgdGhlIFNIQTEgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUKKwkJCSAqIHBhY2ssIHdoaWNoIGFsc28gbWVhbnMgbWFraW5nIHBhcnRpYWxfcGFja19vZmZzZXQKKwkJCSAqIGJpZyBlbm91Z2ggbm90IHRvIG1hdHRlciBhbnltb3JlLgorCQkJICovCisJCQl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZvbGRfaGFzaF9jdHgpOworCQkJcGFydGlhbF9wYWNrX29mZnNldCA9IH5wYXJ0aWFsX3BhY2tfb2Zmc2V0OworCQkJcGFydGlhbF9wYWNrX29mZnNldCAtPSBNU0IocGFydGlhbF9wYWNrX29mZnNldCwgMSk7CisJCX0KKwl9CisJZnJlZShidWYpOworCisJaWYgKHBhcnRpYWxfcGFja19oYXNoKQorCQl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihwYXJ0aWFsX3BhY2tfaGFzaCwgJm9sZF9oYXNoX2N0eCk7CisJdGhlX2hhc2hfYWxnby0+ZmluYWxfZm4obmV3X3BhY2tfaGFzaCwgJm5ld19oYXNoX2N0eCk7CisJd3JpdGVfb3JfZGllKHBhY2tfZmQsIG5ld19wYWNrX2hhc2gsIHRoZV9oYXNoX2FsZ28tPnJhd3N6KTsKKwlmc3luY19vcl9kaWUocGFja19mZCwgcGFja19uYW1lKTsKK30KKworY2hhciAqaW5kZXhfcGFja19sb2NrZmlsZShpbnQgaXBfb3V0KQoreworCWNoYXIgcGFja25hbWVbR0lUX01BWF9IRVhTWiArIDZdOworCWNvbnN0IGludCBsZW4gPSB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDY7CisKKwkvKgorCSAqIFRoZSBmaXJzdCB0aGluZyB3ZSBleHBlY3QgZnJvbSBpbmRleC1wYWNrJ3Mgb3V0cHV0CisJICogaXMgInBhY2tcdCU0MHNcbiIgb3IgImtlZXBcdCU0MHNcbiIgKDQ2IGJ5dGVzKSB3aGVyZQorCSAqICU0MHMgaXMgdGhlIG5ld2x5IGNyZWF0ZWQgcGFjayBTSEExIG5hbWUuICBJbiB0aGUgImtlZXAiCisJICogY2FzZSwgd2UgbmVlZCBpdCB0byByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgLmtlZXAgZmlsZQorCSAqIGxhdGVyIG9uLiAgSWYgd2UgZG9uJ3QgZ2V0IHRoYXQgdGhlbiB0b3VnaCBsdWNrIHdpdGggaXQuCisJICovCisJaWYgKHJlYWRfaW5fZnVsbChpcF9vdXQsIHBhY2tuYW1lLCBsZW4pID09IGxlbiAmJiBwYWNrbmFtZVtsZW4tMV0gPT0gJ1xuJykgeworCQljb25zdCBjaGFyICpuYW1lOworCQlwYWNrbmFtZVtsZW4tMV0gPSAwOworCQlpZiAoc2tpcF9wcmVmaXgocGFja25hbWUsICJrZWVwXHQiLCAmbmFtZSkpCisJCQlyZXR1cm4geHN0cmZtdCgiJXMvcGFjay9wYWNrLSVzLmtlZXAiLAorCQkJCSAgICAgICBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBuYW1lKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGUgcGVyLW9iamVjdCBoZWFkZXIgaXMgYSBwcmV0dHkgZGVuc2UgdGhpbmcsIHdoaWNoIGlzCisgKiAgLSBmaXJzdCBieXRlOiBsb3cgZm91ciBiaXRzIGFyZSAic2l6ZSIsIHRoZW4gdGhyZWUgYml0cyBvZiAidHlwZSIsCisgKiAgICBhbmQgdGhlIGhpZ2ggYml0IGlzICJzaXplIGNvbnRpbnVlcyIuCisgKiAgLSBlYWNoIGJ5dGUgYWZ0ZXJ3YXJkczogbG93IHNldmVuIGJpdHMgYXJlIHNpemUgY29udGludWF0aW9uLAorICogICAgd2l0aCB0aGUgaGlnaCBiaXQgYmVpbmcgInNpemUgY29udGludWVzIgorICovCitpbnQgZW5jb2RlX2luX3BhY2tfb2JqZWN0X2hlYWRlcih1bnNpZ25lZCBjaGFyICpoZHIsIGludCBoZHJfbGVuLAorCQkJCSBlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVpbnRtYXhfdCBzaXplKQoreworCWludCBuID0gMTsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlpZiAodHlwZSA8IE9CSl9DT01NSVQgfHwgdHlwZSA+IE9CSl9SRUZfREVMVEEpCisJCWRpZSgiYmFkIHR5cGUgJWQiLCB0eXBlKTsKKworCWMgPSAodHlwZSA8PCA0KSB8IChzaXplICYgMTUpOworCXNpemUgPj49IDQ7CisJd2hpbGUgKHNpemUpIHsKKwkJaWYgKG4gPT0gaGRyX2xlbikKKwkJCWRpZSgib2JqZWN0IHNpemUgaXMgdG9vIGVub3Jtb3VzIHRvIGZvcm1hdCIpOworCQkqaGRyKysgPSBjIHwgMHg4MDsKKwkJYyA9IHNpemUgJiAweDdmOworCQlzaXplID4+PSA3OworCQluKys7CisJfQorCSpoZHIgPSBjOworCXJldHVybiBuOworfQorCitzdHJ1Y3QgaGFzaGZpbGUgKmNyZWF0ZV90bXBfcGFja2ZpbGUoY2hhciAqKnBhY2tfdG1wX25hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiB0bXBuYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IGZkOworCisJZmQgPSBvZGJfbWtzdGVtcCgmdG1wbmFtZSwgInBhY2svdG1wX3BhY2tfWFhYWFhYIik7CisJKnBhY2tfdG1wX25hbWUgPSBzdHJidWZfZGV0YWNoKCZ0bXBuYW1lLCBOVUxMKTsKKwlyZXR1cm4gaGFzaGZkKGZkLCAqcGFja190bXBfbmFtZSk7Cit9CisKK3ZvaWQgZmluaXNoX3RtcF9wYWNrZmlsZShzdHJ1Y3Qgc3RyYnVmICpuYW1lX2J1ZmZlciwKKwkJCSBjb25zdCBjaGFyICpwYWNrX3RtcF9uYW1lLAorCQkJIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKndyaXR0ZW5fbGlzdCwKKwkJCSB1aW50MzJfdCBucl93cml0dGVuLAorCQkJIHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKnBhY2tfaWR4X29wdHMsCisJCQkgdW5zaWduZWQgY2hhciBoYXNoW10pCit7CisJY29uc3QgY2hhciAqaWR4X3RtcF9uYW1lOworCWludCBiYXNlbmFtZV9sZW4gPSBuYW1lX2J1ZmZlci0+bGVuOworCisJaWYgKGFkanVzdF9zaGFyZWRfcGVybShwYWNrX3RtcF9uYW1lKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgcGFjayBmaWxlIHJlYWRhYmxlIik7CisKKwlpZHhfdG1wX25hbWUgPSB3cml0ZV9pZHhfZmlsZShOVUxMLCB3cml0dGVuX2xpc3QsIG5yX3dyaXR0ZW4sCisJCQkJICAgICAgcGFja19pZHhfb3B0cywgaGFzaCk7CisJaWYgKGFkanVzdF9zaGFyZWRfcGVybShpZHhfdG1wX25hbWUpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBtYWtlIHRlbXBvcmFyeSBpbmRleCBmaWxlIHJlYWRhYmxlIik7CisKKwlzdHJidWZfYWRkZihuYW1lX2J1ZmZlciwgIiVzLnBhY2siLCBoYXNoX3RvX2hleChoYXNoKSk7CisKKwlpZiAocmVuYW1lKHBhY2tfdG1wX25hbWUsIG5hbWVfYnVmZmVyLT5idWYpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IHBhY2sgZmlsZSIpOworCisJc3RyYnVmX3NldGxlbihuYW1lX2J1ZmZlciwgYmFzZW5hbWVfbGVuKTsKKworCXN0cmJ1Zl9hZGRmKG5hbWVfYnVmZmVyLCAiJXMuaWR4IiwgaGFzaF90b19oZXgoaGFzaCkpOworCWlmIChyZW5hbWUoaWR4X3RtcF9uYW1lLCBuYW1lX2J1ZmZlci0+YnVmKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVuYW1lIHRlbXBvcmFyeSBpbmRleCBmaWxlIik7CisKKwlzdHJidWZfc2V0bGVuKG5hbWVfYnVmZmVyLCBiYXNlbmFtZV9sZW4pOworCisJZnJlZSgodm9pZCAqKWlkeF90bXBfbmFtZSk7Cit9CmRpZmYgLS1naXQgYS9wYWNrLmggYi9wYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjMDk0NQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2suaApAQCAtMCwwICsxLDEwNiBAQAorI2lmbmRlZiBQQUNLX0gKKyNkZWZpbmUgUEFDS19ICisKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKworc3RydWN0IHJlcG9zaXRvcnk7CisKKy8qCisgKiBQYWNrZWQgb2JqZWN0IGhlYWRlcgorICovCisjZGVmaW5lIFBBQ0tfU0lHTkFUVVJFIDB4NTA0MTQzNGIJLyogIlBBQ0siICovCisjZGVmaW5lIFBBQ0tfVkVSU0lPTiAyCisjZGVmaW5lIHBhY2tfdmVyc2lvbl9vayh2KSAoKHYpID09IGh0b25sKDIpIHx8ICh2KSA9PSBodG9ubCgzKSkKK3N0cnVjdCBwYWNrX2hlYWRlciB7CisJdWludDMyX3QgaGRyX3NpZ25hdHVyZTsKKwl1aW50MzJfdCBoZHJfdmVyc2lvbjsKKwl1aW50MzJfdCBoZHJfZW50cmllczsKK307CisKKy8qCisgKiBUaGUgZmlyc3QgZm91ciBieXRlcyBvZiBpbmRleCBmb3JtYXRzIGxhdGVyIHRoYW4gdmVyc2lvbiAxIHNob3VsZAorICogc3RhcnQgd2l0aCB0aGlzIHNpZ25hdHVyZSwgYXMgYWxsIG9sZGVyIGdpdCBiaW5hcmllcyB3b3VsZCBmaW5kIHRoaXMKKyAqIHZhbHVlIGlsbGVnYWwgYW5kIGFib3J0IHJlYWRpbmcgdGhlIGZpbGUuCisgKgorICogVGhpcyBpcyB0aGUgY2FzZSBiZWNhdXNlIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiBhIHBhY2tmaWxlCisgKiBjYW5ub3QgZXhjZWVkIDEsNDMxLDY2MCwwMDAgYXMgZXZlcnkgb2JqZWN0IHdvdWxkIG5lZWQgYXQgbGVhc3QKKyAqIDMgYnl0ZXMgb2YgZGF0YSBhbmQgdGhlIG92ZXJhbGwgcGFja2ZpbGUgY2Fubm90IGV4Y2VlZCA0IEdpQiB3aXRoCisgKiB2ZXJzaW9uIDEgb2YgdGhlIGluZGV4IGZpbGUgZHVlIHRvIHRoZSBvZmZzZXRzIGxpbWl0ZWQgdG8gMzIgYml0cy4KKyAqIENsZWFybHkgdGhlIHNpZ25hdHVyZSBleGNlZWRzIHRoaXMgbWF4aW11bS4KKyAqCisgKiBWZXJ5IG9sZCBnaXQgYmluYXJpZXMgd2lsbCBhbHNvIGNvbXBhcmUgdGhlIGZpcnN0IDQgYnl0ZXMgdG8gdGhlCisgKiBuZXh0IDQgYnl0ZXMgaW4gdGhlIGluZGV4IGFuZCBhYm9ydCB3aXRoIGEgIm5vbi1tb25vdG9uaWMgaW5kZXgiCisgKiBlcnJvciBpZiB0aGUgc2Vjb25kIDQgYnl0ZSB3b3JkIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmlyc3QgNAorICogYnl0ZSB3b3JkLiAgVGhpcyB3b3VsZCBiZSB0cnVlIGluIHRoZSBwcm9wb3NlZCBmdXR1cmUgaW5kZXgKKyAqIGZvcm1hdCBhcyBpZHhfc2lnbmF0dXJlIHdvdWxkIGJlIGdyZWF0ZXIgdGhhbiBpZHhfdmVyc2lvbi4KKyAqLworI2RlZmluZSBQQUNLX0lEWF9TSUdOQVRVUkUgMHhmZjc0NGY2MwkvKiAiXDM3N3RPYyIgKi8KKworc3RydWN0IHBhY2tfaWR4X29wdGlvbiB7CisJdW5zaWduZWQgZmxhZ3M7CisJLyogZmxhZyBiaXRzICovCisjZGVmaW5lIFdSSVRFX0lEWF9WRVJJRlkgMDEgLyogdmVyaWZ5IG9ubHksIGRvIG5vdCB3cml0ZSB0aGUgaWR4IGZpbGUgKi8KKyNkZWZpbmUgV1JJVEVfSURYX1NUUklDVCAwMgorCisJdWludDMyX3QgdmVyc2lvbjsKKwl1aW50MzJfdCBvZmYzMl9saW1pdDsKKworCS8qCisJICogTGlzdCBvZiBvZmZzZXRzIHRoYXQgd291bGQgZml0IHdpdGhpbiBvZmYzMl9saW1pdCBidXQKKwkgKiBuZWVkIHRvIGJlIHdyaXR0ZW4gb3V0IGFzIDY0LWJpdCBlbnRpdHkgZm9yIGJ5dGUtZm9yLWJ5dGUKKwkgKiB2ZXJpZmljYXRpb24uCisJICovCisJaW50IGFub21hbHlfYWxsb2MsIGFub21hbHlfbnI7CisJdWludDMyX3QgKmFub21hbHk7Cit9OworCit2b2lkIHJlc2V0X3BhY2tfaWR4X29wdGlvbihzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICopOworCisvKgorICogUGFja2VkIG9iamVjdCBpbmRleCBoZWFkZXIKKyAqLworc3RydWN0IHBhY2tfaWR4X2hlYWRlciB7CisJdWludDMyX3QgaWR4X3NpZ25hdHVyZTsKKwl1aW50MzJfdCBpZHhfdmVyc2lvbjsKK307CisKKy8qCisgKiBDb21tb24gcGFydCBvZiBvYmplY3Qgc3RydWN0dXJlIHVzZWQgZm9yIHdyaXRlX2lkeF9maWxlCisgKi8KK3N0cnVjdCBwYWNrX2lkeF9lbnRyeSB7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJdWludDMyX3QgY3JjMzI7CisJb2ZmX3Qgb2Zmc2V0OworfTsKKworCitzdHJ1Y3QgcHJvZ3Jlc3M7CisvKiBOb3RlLCB0aGUgZGF0YSBhcmd1bWVudCBjb3VsZCBiZSBOVUxMIGlmIG9iamVjdCB0eXBlIGlzIGJsb2IgKi8KK3R5cGVkZWYgaW50ICgqdmVyaWZ5X2ZuKShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGVudW0gb2JqZWN0X3R5cGUsIHVuc2lnbmVkIGxvbmcsIHZvaWQqLCBpbnQqKTsKKworY29uc3QgY2hhciAqd3JpdGVfaWR4X2ZpbGUoY29uc3QgY2hhciAqaW5kZXhfbmFtZSwgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqb2JqZWN0cywgaW50IG5yX29iamVjdHMsIGNvbnN0IHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CitpbnQgY2hlY2tfcGFja19jcmMoc3RydWN0IHBhY2tlZF9naXQgKnAsIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3Vycywgb2ZmX3Qgb2Zmc2V0LCBvZmZfdCBsZW4sIHVuc2lnbmVkIGludCBucik7CitpbnQgdmVyaWZ5X3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKik7CitpbnQgdmVyaWZ5X3BhY2soc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHBhY2tlZF9naXQgKiwgdmVyaWZ5X2ZuIGZuLCBzdHJ1Y3QgcHJvZ3Jlc3MgKiwgdWludDMyX3QpOworb2ZmX3Qgd3JpdGVfcGFja19oZWFkZXIoc3RydWN0IGhhc2hmaWxlICpmLCB1aW50MzJfdCk7Cit2b2lkIGZpeHVwX3BhY2tfaGVhZGVyX2Zvb3RlcihpbnQsIHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgY2hhciAqLCB1aW50MzJfdCwgdW5zaWduZWQgY2hhciAqLCBvZmZfdCk7CitjaGFyICppbmRleF9wYWNrX2xvY2tmaWxlKGludCBmZCk7CisKKy8qCisgKiBUaGUgImhkciIgb3V0cHV0IGJ1ZmZlciBzaG91bGQgYmUgYXQgbGVhc3QgdGhpcyBiaWcsIHdoaWNoIHdpbGwgaGFuZGxlIHNpemVzCisgKiB1cCB0byAyXjY3LgorICovCisjZGVmaW5lIE1BWF9QQUNLX09CSkVDVF9IRUFERVIgMTAKK2ludCBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKmhkciwgaW50IGhkcl9sZW4sCisJCQkJIGVudW0gb2JqZWN0X3R5cGUsIHVpbnRtYXhfdCk7CisKKyNkZWZpbmUgUEhfRVJST1JfRU9GCQkoLTEpCisjZGVmaW5lIFBIX0VSUk9SX1BBQ0tfU0lHTkFUVVJFCSgtMikKKyNkZWZpbmUgUEhfRVJST1JfUFJPVE9DT0wJKC0zKQoraW50IHJlYWRfcGFja19oZWFkZXIoaW50IGZkLCBzdHJ1Y3QgcGFja19oZWFkZXIgKik7CisKK3N0cnVjdCBoYXNoZmlsZSAqY3JlYXRlX3RtcF9wYWNrZmlsZShjaGFyICoqcGFja190bXBfbmFtZSk7Cit2b2lkIGZpbmlzaF90bXBfcGFja2ZpbGUoc3RydWN0IHN0cmJ1ZiAqbmFtZV9idWZmZXIsIGNvbnN0IGNoYXIgKnBhY2tfdG1wX25hbWUsIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKndyaXR0ZW5fbGlzdCwgdWludDMyX3QgbnJfd3JpdHRlbiwgc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqcGFja19pZHhfb3B0cywgdW5zaWduZWQgY2hhciBzaGExW10pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhY2tmaWxlLmMgYi9wYWNrZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTc1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrZmlsZS5jCkBAIC0wLDAgKzEsMjE2MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibGlzdC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAibWVyZ2Vzb3J0LmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgIm1pZHguaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKworY2hhciAqb2RiX3BhY2tfbmFtZShzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLAorCQkgICAgY29uc3QgY2hhciAqZXh0KQoreworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzL3BhY2svcGFjay0lcy4lcyIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCksCisJCSAgICBoYXNoX3RvX2hleChoYXNoKSwgZXh0KTsKKwlyZXR1cm4gYnVmLT5idWY7Cit9CisKK2NoYXIgKnNoYTFfcGFja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJcmV0dXJuIG9kYl9wYWNrX25hbWUoJmJ1Ziwgc2hhMSwgInBhY2siKTsKK30KKworY2hhciAqc2hhMV9wYWNrX2luZGV4X25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlyZXR1cm4gb2RiX3BhY2tfbmFtZSgmYnVmLCBzaGExLCAiaWR4Iik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja191c2VkX2N0cjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja19tbWFwX2NhbGxzOworc3RhdGljIHVuc2lnbmVkIGludCBwZWFrX3BhY2tfb3Blbl93aW5kb3dzOworc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX29wZW5fd2luZG93czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja19vcGVuX2ZkczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja19tYXhfZmRzOworc3RhdGljIHNpemVfdCBwZWFrX3BhY2tfbWFwcGVkOworc3RhdGljIHNpemVfdCBwYWNrX21hcHBlZDsKKworI2RlZmluZSBTWl9GTVQgUFJJdU1BWAorc3RhdGljIGlubGluZSB1aW50bWF4X3Qgc3pfZm10KHNpemVfdCBzKSB7IHJldHVybiBzOyB9CisKK3ZvaWQgcGFja19yZXBvcnQodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwKKwkJInBhY2tfcmVwb3J0OiBnZXRwYWdlc2l6ZSgpICAgICAgICAgICAgPSAlMTAiIFNaX0ZNVCAiXG4iCisJCSJwYWNrX3JlcG9ydDogY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplID0gJTEwIiBTWl9GTVQgIlxuIgorCQkicGFja19yZXBvcnQ6IGNvcmUucGFja2VkR2l0TGltaXQgICAgICA9ICUxMCIgU1pfRk1UICJcbiIsCisJCXN6X2ZtdChnZXRwYWdlc2l6ZSgpKSwKKwkJc3pfZm10KHBhY2tlZF9naXRfd2luZG93X3NpemUpLAorCQlzel9mbXQocGFja2VkX2dpdF9saW1pdCkpOworCWZwcmludGYoc3RkZXJyLAorCQkicGFja19yZXBvcnQ6IHBhY2tfdXNlZF9jdHIgICAgICAgICAgICA9ICUxMHVcbiIKKwkJInBhY2tfcmVwb3J0OiBwYWNrX21tYXBfY2FsbHMgICAgICAgICAgPSAlMTB1XG4iCisJCSJwYWNrX3JlcG9ydDogcGFja19vcGVuX3dpbmRvd3MgICAgICAgID0gJTEwdSAvICUxMHVcbiIKKwkJInBhY2tfcmVwb3J0OiBwYWNrX21hcHBlZCAgICAgICAgICAgICAgPSAiCisJCQkiJTEwIiBTWl9GTVQgIiAvICUxMCIgU1pfRk1UICJcbiIsCisJCXBhY2tfdXNlZF9jdHIsCisJCXBhY2tfbW1hcF9jYWxscywKKwkJcGFja19vcGVuX3dpbmRvd3MsIHBlYWtfcGFja19vcGVuX3dpbmRvd3MsCisJCXN6X2ZtdChwYWNrX21hcHBlZCksIHN6X2ZtdChwZWFrX3BhY2tfbWFwcGVkKSk7Cit9CisKKy8qCisgKiBPcGVuIGFuZCBtbWFwIHRoZSBpbmRleCBmaWxlIGF0IHBhdGgsIHBlcmZvcm0gYSBjb3VwbGUgb2YKKyAqIGNvbnNpc3RlbmN5IGNoZWNrcywgdGhlbiByZWNvcmQgaXRzIGluZm9ybWF0aW9uIHRvIHAuICBSZXR1cm4gMCBvbgorICogc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBjaGVja19wYWNrZWRfZ2l0X2lkeChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwl2b2lkICppZHhfbWFwOworCXNpemVfdCBpZHhfc2l6ZTsKKwlpbnQgZmQgPSBnaXRfb3BlbihwYXRoKSwgcmV0OworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IHVuc2lnbmVkIGludCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoZnN0YXQoZmQsICZzdCkpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQorCWlkeF9zaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwlpZiAoaWR4X3NpemUgPCA0ICogMjU2ICsgaGFzaHN6ICsgaGFzaHN6KSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIGVycm9yKCJpbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIsIHBhdGgpOworCX0KKwlpZHhfbWFwID0geG1tYXAoTlVMTCwgaWR4X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwljbG9zZShmZCk7CisKKwlyZXQgPSBsb2FkX2lkeChwYXRoLCBoYXNoc3osIGlkeF9tYXAsIGlkeF9zaXplLCBwKTsKKworCWlmIChyZXQpCisJCW11bm1hcChpZHhfbWFwLCBpZHhfc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbG9hZF9pZHgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgaW50IGhhc2hzeiwgdm9pZCAqaWR4X21hcCwKKwkgICAgIHNpemVfdCBpZHhfc2l6ZSwgc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJc3RydWN0IHBhY2tfaWR4X2hlYWRlciAqaGRyID0gaWR4X21hcDsKKwl1aW50MzJfdCB2ZXJzaW9uLCBuciwgaSwgKmluZGV4OworCisJaWYgKGlkeF9zaXplIDwgNCAqIDI1NiArIGhhc2hzeiArIGhhc2hzeikKKwkJcmV0dXJuIGVycm9yKCJpbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIsIHBhdGgpOworCWlmIChpZHhfbWFwID09IE5VTEwpCisJCXJldHVybiBlcnJvcigiZW1wdHkgZGF0YSIpOworCisJaWYgKGhkci0+aWR4X3NpZ25hdHVyZSA9PSBodG9ubChQQUNLX0lEWF9TSUdOQVRVUkUpKSB7CisJCXZlcnNpb24gPSBudG9obChoZHItPmlkeF92ZXJzaW9uKTsKKwkJaWYgKHZlcnNpb24gPCAyIHx8IHZlcnNpb24gPiAyKQorCQkJcmV0dXJuIGVycm9yKCJpbmRleCBmaWxlICVzIGlzIHZlcnNpb24gJSJQUkl1MzIKKwkJCQkgICAgICIgYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBiaW5hcnkiCisJCQkJICAgICAiICh0cnkgdXBncmFkaW5nIEdJVCB0byBhIG5ld2VyIHZlcnNpb24pIiwKKwkJCQkgICAgIHBhdGgsIHZlcnNpb24pOworCX0gZWxzZQorCQl2ZXJzaW9uID0gMTsKKworCW5yID0gMDsKKwlpbmRleCA9IGlkeF9tYXA7CisJaWYgKHZlcnNpb24gPiAxKQorCQlpbmRleCArPSAyOyAgLyogc2tpcCBpbmRleCBoZWFkZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJdWludDMyX3QgbiA9IG50b2hsKGluZGV4W2ldKTsKKwkJaWYgKG4gPCBucikKKwkJCXJldHVybiBlcnJvcigibm9uLW1vbm90b25pYyBpbmRleCAlcyIsIHBhdGgpOworCQluciA9IG47CisJfQorCisJaWYgKHZlcnNpb24gPT0gMSkgeworCQkvKgorCQkgKiBUb3RhbCBzaXplOgorCQkgKiAgLSAyNTYgaW5kZXggZW50cmllcyA0IGJ5dGVzIGVhY2gKKwkJICogIC0gMjQtYnl0ZSBlbnRyaWVzICogbnIgKG9iamVjdCBJRCArIDQtYnl0ZSBvZmZzZXQpCisJCSAqICAtIGhhc2ggb2YgdGhlIHBhY2tmaWxlCisJCSAqICAtIGZpbGUgY2hlY2tzdW0KKwkJICovCisJCWlmIChpZHhfc2l6ZSAhPSA0ICogMjU2ICsgbnIgKiAoaGFzaHN6ICsgNCkgKyBoYXNoc3ogKyBoYXNoc3opCisJCQlyZXR1cm4gZXJyb3IoIndyb25nIGluZGV4IHYxIGZpbGUgc2l6ZSBpbiAlcyIsIHBhdGgpOworCX0gZWxzZSBpZiAodmVyc2lvbiA9PSAyKSB7CisJCS8qCisJCSAqIE1pbmltdW0gc2l6ZToKKwkJICogIC0gOCBieXRlcyBvZiBoZWFkZXIKKwkJICogIC0gMjU2IGluZGV4IGVudHJpZXMgNCBieXRlcyBlYWNoCisJCSAqICAtIG9iamVjdCBJRCBlbnRyeSAqIG5yCisJCSAqICAtIDQtYnl0ZSBjcmMgZW50cnkgKiBucgorCQkgKiAgLSA0LWJ5dGUgb2Zmc2V0IGVudHJ5ICogbnIKKwkJICogIC0gaGFzaCBvZiB0aGUgcGFja2ZpbGUKKwkJICogIC0gZmlsZSBjaGVja3N1bQorCQkgKiBBbmQgYWZ0ZXIgdGhlIDQtYnl0ZSBvZmZzZXQgdGFibGUgbWlnaHQgYmUgYQorCQkgKiB2YXJpYWJsZSBzaXplZCB0YWJsZSBjb250YWluaW5nIDgtYnl0ZSBlbnRyaWVzCisJCSAqIGZvciBvZmZzZXRzIGxhcmdlciB0aGFuIDJeMzEuCisJCSAqLworCQl1bnNpZ25lZCBsb25nIG1pbl9zaXplID0gOCArIDQqMjU2ICsgbnIqKGhhc2hzeiArIDQgKyA0KSArIGhhc2hzeiArIGhhc2hzejsKKwkJdW5zaWduZWQgbG9uZyBtYXhfc2l6ZSA9IG1pbl9zaXplOworCQlpZiAobnIpCisJCQltYXhfc2l6ZSArPSAobnIgLSAxKSo4OworCQlpZiAoaWR4X3NpemUgPCBtaW5fc2l6ZSB8fCBpZHhfc2l6ZSA+IG1heF9zaXplKQorCQkJcmV0dXJuIGVycm9yKCJ3cm9uZyBpbmRleCB2MiBmaWxlIHNpemUgaW4gJXMiLCBwYXRoKTsKKwkJaWYgKGlkeF9zaXplICE9IG1pbl9zaXplICYmCisJCSAgICAvKgorCQkgICAgICogbWFrZSBzdXJlIHdlIGNhbiBkZWFsIHdpdGggbGFyZ2UgcGFjayBvZmZzZXRzLgorCQkgICAgICogMzEtYml0IHNpZ25lZCBvZmZzZXQgd29uJ3QgYmUgZW5vdWdoLCBuZWl0aGVyCisJCSAgICAgKiAzMi1iaXQgdW5zaWduZWQgb25lIHdpbGwgYmUuCisJCSAgICAgKi8KKwkJICAgIChzaXplb2Yob2ZmX3QpIDw9IDQpKQorCQkJcmV0dXJuIGVycm9yKCJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IGluICVzIiwgcGF0aCk7CisJfQorCisJcC0+aW5kZXhfdmVyc2lvbiA9IHZlcnNpb247CisJcC0+aW5kZXhfZGF0YSA9IGlkeF9tYXA7CisJcC0+aW5kZXhfc2l6ZSA9IGlkeF9zaXplOworCXAtPm51bV9vYmplY3RzID0gbnI7CisJcmV0dXJuIDA7Cit9CisKK2ludCBvcGVuX3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJY2hhciAqaWR4X25hbWU7CisJc2l6ZV90IGxlbjsKKwlpbnQgcmV0OworCisJaWYgKHAtPmluZGV4X2RhdGEpCisJCXJldHVybiAwOworCisJaWYgKCFzdHJpcF9zdWZmaXgocC0+cGFja19uYW1lLCAiLnBhY2siLCAmbGVuKSkKKwkJQlVHKCJwYWNrX25hbWUgZG9lcyBub3QgZW5kIGluIC5wYWNrIik7CisJaWR4X25hbWUgPSB4c3RyZm10KCIlLipzLmlkeCIsIChpbnQpbGVuLCBwLT5wYWNrX25hbWUpOworCXJldCA9IGNoZWNrX3BhY2tlZF9naXRfaWR4KGlkeF9uYW1lLCBwKTsKKwlmcmVlKGlkeF9uYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCit1aW50MzJfdCBnZXRfcGFja19mYW5vdXQoc3RydWN0IHBhY2tlZF9naXQgKnAsIHVpbnQzMl90IHZhbHVlKQoreworCWNvbnN0IHVpbnQzMl90ICpsZXZlbDFfb2ZzID0gcC0+aW5kZXhfZGF0YTsKKworCWlmICghbGV2ZWwxX29mcykgeworCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQkJcmV0dXJuIDA7CisJCWxldmVsMV9vZnMgPSBwLT5pbmRleF9kYXRhOworCX0KKworCWlmIChwLT5pbmRleF92ZXJzaW9uID4gMSkgeworCQlsZXZlbDFfb2ZzICs9IDI7CisJfQorCisJcmV0dXJuIG50b2hsKGxldmVsMV9vZnNbdmFsdWVdKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICphbGxvY19wYWNrZWRfZ2l0KGludCBleHRyYSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IHhtYWxsb2Moc3RfYWRkKHNpemVvZigqcCksIGV4dHJhKSk7CisJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCXAtPnBhY2tfZmQgPSAtMTsKKwlyZXR1cm4gcDsKK30KKworc3RydWN0IHBhY2tlZF9naXQgKnBhcnNlX3BhY2tfaW5kZXgodW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqaWR4X3BhdGgpCit7CisJY29uc3QgY2hhciAqcGF0aCA9IHNoYTFfcGFja19uYW1lKHNoYTEpOworCXNpemVfdCBhbGxvYyA9IHN0X2FkZChzdHJsZW4ocGF0aCksIDEpOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gYWxsb2NfcGFja2VkX2dpdChhbGxvYyk7CisKKwltZW1jcHkocC0+cGFja19uYW1lLCBwYXRoLCBhbGxvYyk7IC8qIGluY2x1ZGVzIE5VTCAqLworCWhhc2hjcHkocC0+aGFzaCwgc2hhMSk7CisJaWYgKGNoZWNrX3BhY2tlZF9naXRfaWR4KGlkeF9wYXRoLCBwKSkgeworCQlmcmVlKHApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgc2Nhbl93aW5kb3dzKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHJ1X3AsCisJc3RydWN0IHBhY2tfd2luZG93ICoqbHJ1X3csCisJc3RydWN0IHBhY2tfd2luZG93ICoqbHJ1X2wpCit7CisJc3RydWN0IHBhY2tfd2luZG93ICp3LCAqd19sOworCisJZm9yICh3X2wgPSBOVUxMLCB3ID0gcC0+d2luZG93czsgdzsgdyA9IHctPm5leHQpIHsKKwkJaWYgKCF3LT5pbnVzZV9jbnQpIHsKKwkJCWlmICghKmxydV93IHx8IHctPmxhc3RfdXNlZCA8ICgqbHJ1X3cpLT5sYXN0X3VzZWQpIHsKKwkJCQkqbHJ1X3AgPSBwOworCQkJCSpscnVfdyA9IHc7CisJCQkJKmxydV9sID0gd19sOworCQkJfQorCQl9CisJCXdfbCA9IHc7CisJfQorfQorCitzdGF0aWMgaW50IHVudXNlX29uZV93aW5kb3coc3RydWN0IHBhY2tlZF9naXQgKmN1cnJlbnQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnAsICpscnVfcCA9IE5VTEw7CisJc3RydWN0IHBhY2tfd2luZG93ICpscnVfdyA9IE5VTEwsICpscnVfbCA9IE5VTEw7CisKKwlpZiAoY3VycmVudCkKKwkJc2Nhbl93aW5kb3dzKGN1cnJlbnQsICZscnVfcCwgJmxydV93LCAmbHJ1X2wpOworCWZvciAocCA9IHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5wYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkKKwkJc2Nhbl93aW5kb3dzKHAsICZscnVfcCwgJmxydV93LCAmbHJ1X2wpOworCWlmIChscnVfcCkgeworCQltdW5tYXAobHJ1X3ctPmJhc2UsIGxydV93LT5sZW4pOworCQlwYWNrX21hcHBlZCAtPSBscnVfdy0+bGVuOworCQlpZiAobHJ1X2wpCisJCQlscnVfbC0+bmV4dCA9IGxydV93LT5uZXh0OworCQllbHNlCisJCQlscnVfcC0+d2luZG93cyA9IGxydV93LT5uZXh0OworCQlmcmVlKGxydV93KTsKKwkJcGFja19vcGVuX3dpbmRvd3MtLTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGNsb3NlX3BhY2tfd2luZG93cyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwl3aGlsZSAocC0+d2luZG93cykgeworCQlzdHJ1Y3QgcGFja193aW5kb3cgKncgPSBwLT53aW5kb3dzOworCisJCWlmICh3LT5pbnVzZV9jbnQpCisJCQlkaWUoInBhY2sgJyVzJyBzdGlsbCBoYXMgb3BlbiB3aW5kb3dzIHRvIGl0IiwKKwkJCSAgICBwLT5wYWNrX25hbWUpOworCQltdW5tYXAody0+YmFzZSwgdy0+bGVuKTsKKwkJcGFja19tYXBwZWQgLT0gdy0+bGVuOworCQlwYWNrX29wZW5fd2luZG93cy0tOworCQlwLT53aW5kb3dzID0gdy0+bmV4dDsKKwkJZnJlZSh3KTsKKwl9Cit9CisKK2ludCBjbG9zZV9wYWNrX2ZkKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWlmIChwLT5wYWNrX2ZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwljbG9zZShwLT5wYWNrX2ZkKTsKKwlwYWNrX29wZW5fZmRzLS07CisJcC0+cGFja19mZCA9IC0xOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgY2xvc2VfcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlpZiAocC0+aW5kZXhfZGF0YSkgeworCQltdW5tYXAoKHZvaWQgKilwLT5pbmRleF9kYXRhLCBwLT5pbmRleF9zaXplKTsKKwkJcC0+aW5kZXhfZGF0YSA9IE5VTEw7CisJfQorfQorCit2b2lkIGNsb3NlX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJY2xvc2VfcGFja193aW5kb3dzKHApOworCWNsb3NlX3BhY2tfZmQocCk7CisJY2xvc2VfcGFja19pbmRleChwKTsKK30KKwordm9pZCBjbG9zZV9vYmplY3Rfc3RvcmUoc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgKm8pCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwlmb3IgKHAgPSBvLT5wYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkKKwkJaWYgKHAtPmRvX25vdF9jbG9zZSkKKwkJCUJVRygid2FudCB0byBjbG9zZSBwYWNrIG1hcmtlZCAnZG8tbm90LWNsb3NlJyIpOworCQllbHNlCisJCQljbG9zZV9wYWNrKHApOworCisJaWYgKG8tPm11bHRpX3BhY2tfaW5kZXgpIHsKKwkJY2xvc2VfbWlkeChvLT5tdWx0aV9wYWNrX2luZGV4KTsKKwkJby0+bXVsdGlfcGFja19pbmRleCA9IE5VTEw7CisJfQorCisJY2xvc2VfY29tbWl0X2dyYXBoKG8pOworfQorCit2b2lkIHVubGlua19wYWNrX3BhdGgoY29uc3QgY2hhciAqcGFja19uYW1lLCBpbnQgZm9yY2VfZGVsZXRlKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpleHRzW10gPSB7Ii5wYWNrIiwgIi5pZHgiLCAiLmtlZXAiLCAiLmJpdG1hcCIsICIucHJvbWlzb3IifTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBwbGVuOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCBwYWNrX25hbWUpOworCXN0cmlwX3N1ZmZpeF9tZW0oYnVmLmJ1ZiwgJmJ1Zi5sZW4sICIucGFjayIpOworCXBsZW4gPSBidWYubGVuOworCisJaWYgKCFmb3JjZV9kZWxldGUpIHsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiLmtlZXAiKTsKKwkJaWYgKCFhY2Nlc3MoYnVmLmJ1ZiwgRl9PSykpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh0cyk7IGkrKykgeworCQlzdHJidWZfc2V0bGVuKCZidWYsIHBsZW4pOworCQlzdHJidWZfYWRkc3RyKCZidWYsIGV4dHNbaV0pOworCQl1bmxpbmsoYnVmLmJ1Zik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKKy8qCisgKiBUaGUgTFJVIHBhY2sgaXMgdGhlIG9uZSB3aXRoIHRoZSBvbGRlc3QgTVJVIHdpbmRvdywgcHJlZmVycmluZyBwYWNrcworICogd2l0aCBubyB1c2VkIHdpbmRvd3MsIG9yIHRoZSBvbGRlc3QgbXRpbWUgaWYgaXQgaGFzIG5vIHdpbmRvd3MgYWxsb2NhdGVkLgorICovCitzdGF0aWMgdm9pZCBmaW5kX2xydV9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBzdHJ1Y3QgcGFja2VkX2dpdCAqKmxydV9wLCBzdHJ1Y3QgcGFja193aW5kb3cgKiptcnVfdywgaW50ICphY2NlcHRfd2luZG93c19pbnVzZSkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKncsICp0aGlzX21ydV93OworCWludCBoYXNfd2luZG93c19pbnVzZSA9IDA7CisKKwkvKgorCSAqIFJlamVjdCB0aGlzIHBhY2sgaWYgaXQgaGFzIHdpbmRvd3MgYW5kIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkCisJICogb25lIGRvZXMgbm90LiAgSWYgdGhpcyBwYWNrIGRvZXMgbm90IGhhdmUgd2luZG93cywgcmVqZWN0CisJICogaXQgaWYgdGhlIHBhY2sgZmlsZSBpcyBuZXdlciB0aGFuIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIG9uZS4KKwkgKi8KKwlpZiAoKmxydV9wICYmICEqbXJ1X3cgJiYgKHAtPndpbmRvd3MgfHwgcC0+bXRpbWUgPiAoKmxydV9wKS0+bXRpbWUpKQorCQlyZXR1cm47CisKKwlmb3IgKHcgPSB0aGlzX21ydV93ID0gcC0+d2luZG93czsgdzsgdyA9IHctPm5leHQpIHsKKwkJLyoKKwkJICogUmVqZWN0IHRoaXMgcGFjayBpZiBhbnkgb2YgaXRzIHdpbmRvd3MgYXJlIGluIHVzZSwKKwkJICogYnV0IHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHBhY2sgZGlkIG5vdCBoYXZlIGFueQorCQkgKiBpbnVzZSB3aW5kb3dzLiAgT3RoZXJ3aXNlLCByZWNvcmQgdGhhdCB0aGlzIHBhY2sKKwkJICogaGFzIHdpbmRvd3MgaW4gdXNlLgorCQkgKi8KKwkJaWYgKHctPmludXNlX2NudCkgeworCQkJaWYgKCphY2NlcHRfd2luZG93c19pbnVzZSkKKwkJCQloYXNfd2luZG93c19pbnVzZSA9IDE7CisJCQllbHNlCisJCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHctPmxhc3RfdXNlZCA+IHRoaXNfbXJ1X3ctPmxhc3RfdXNlZCkKKwkJCXRoaXNfbXJ1X3cgPSB3OworCisJCS8qCisJCSAqIFJlamVjdCB0aGlzIHBhY2sgaWYgaXQgaGFzIHdpbmRvd3MgdGhhdCBoYXZlIGJlZW4KKwkJICogdXNlZCBtb3JlIHJlY2VudGx5IHRoYW4gdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcGFjay4KKwkJICogSWYgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcGFjayBoYWQgd2luZG93cyBpbnVzZSBhbmQKKwkJICogd2UgaGF2ZSBub3QgZW5jb3VudGVyZWQgYSB3aW5kb3cgaW4gdGhpcyBwYWNrIHRoYXQgaXMKKwkJICogaW51c2UsIHNraXAgdGhpcyBjaGVjayBzaW5jZSB3ZSBwcmVmZXIgYSBwYWNrIHdpdGggbm8KKwkJICogaW51c2Ugd2luZG93cyB0byBvbmUgdGhhdCBoYXMgaW51c2Ugd2luZG93cy4KKwkJICovCisJCWlmICgqbXJ1X3cgJiYgKmFjY2VwdF93aW5kb3dzX2ludXNlID09IGhhc193aW5kb3dzX2ludXNlICYmCisJCSAgICB0aGlzX21ydV93LT5sYXN0X3VzZWQgPiAoKm1ydV93KS0+bGFzdF91c2VkKQorCQkJcmV0dXJuOworCX0KKworCS8qCisJICogU2VsZWN0IHRoaXMgcGFjay4KKwkgKi8KKwkqbXJ1X3cgPSB0aGlzX21ydV93OworCSpscnVfcCA9IHA7CisJKmFjY2VwdF93aW5kb3dzX2ludXNlID0gaGFzX3dpbmRvd3NfaW51c2U7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2Vfb25lX3BhY2sodm9pZCkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgKmxydV9wID0gTlVMTDsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKm1ydV93ID0gTlVMTDsKKwlpbnQgYWNjZXB0X3dpbmRvd3NfaW51c2UgPSAxOworCisJZm9yIChwID0gdGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPnBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5wYWNrX2ZkID09IC0xKQorCQkJY29udGludWU7CisJCWZpbmRfbHJ1X3BhY2socCwgJmxydV9wLCAmbXJ1X3csICZhY2NlcHRfd2luZG93c19pbnVzZSk7CisJfQorCisJaWYgKGxydV9wKQorCQlyZXR1cm4gY2xvc2VfcGFja19mZChscnVfcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbWF4X2ZkX2xpbWl0KHZvaWQpCit7CisjaWZkZWYgUkxJTUlUX05PRklMRQorCXsKKwkJc3RydWN0IHJsaW1pdCBsaW07CisKKwkJaWYgKCFnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJmxpbSkpCisJCQlyZXR1cm4gbGltLnJsaW1fY3VyOworCX0KKyNlbmRpZgorCisjaWZkZWYgX1NDX09QRU5fTUFYCisJeworCQlsb25nIG9wZW5fbWF4ID0gc3lzY29uZihfU0NfT1BFTl9NQVgpOworCQlpZiAoMCA8IG9wZW5fbWF4KQorCQkJcmV0dXJuIG9wZW5fbWF4OworCQkvKgorCQkgKiBPdGhlcndpc2UsIHdlIGdvdCAtMSBmb3Igb25lIG9mIHRoZSB0d28KKwkJICogcmVhc29uczoKKwkJICoKKwkJICogKDEpIHN5c2NvbmYoKSBkaWQgbm90IHVuZGVyc3RhbmQgX1NDX09QRU5fTUFYCisJCSAqICAgICBhbmQgc2lnbmFsZWQgYW4gZXJyb3Igd2l0aCAtMTsgb3IKKwkJICogKDIpIHN5c2NvbmYoKSBzYWlkIHRoZXJlIGlzIG5vIGxpbWl0LgorCQkgKgorCQkgKiBXZSBfY291bGRfIGNsZWFyIGVycm5vIGJlZm9yZSBjYWxsaW5nIHN5c2NvbmYoKSB0bworCQkgKiB0ZWxsIHRoZXNlIHR3byBjYXNlcyBhcGFydCBhbmQgcmV0dXJuIGEgaHVnZSBudW1iZXIKKwkJICogaW4gdGhlIGxhdHRlciBjYXNlIHRvIGxldCB0aGUgY2FsbGVyIGNhcCBpdCB0byBhCisJCSAqIHZhbHVlIHRoYXQgaXMgbm90IHNvIHNlbGZpc2gsIGJ1dCBsZXR0aW5nIHRoZQorCQkgKiBmYWxsYmFjayBPUEVOX01BWCBjb2RlcGF0aCB0YWtlIGNhcmUgb2YgdGhlc2UgY2FzZXMKKwkJICogaXMgYSBsb3Qgc2ltcGxlci4KKwkJICovCisJfQorI2VuZGlmCisKKyNpZmRlZiBPUEVOX01BWAorCXJldHVybiBPUEVOX01BWDsKKyNlbHNlCisJcmV0dXJuIDE7IC8qIHNlZSB0aGUgY2FsbGVyIDstKSAqLworI2VuZGlmCit9CisKK2NvbnN0IGNoYXIgKnBhY2tfYmFzZW5hbWUoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJY29uc3QgY2hhciAqcmV0ID0gc3RycmNocihwLT5wYWNrX25hbWUsICcvJyk7CisJaWYgKHJldCkKKwkJcmV0ID0gcmV0ICsgMTsgLyogc2tpcCBwYXN0IHNsYXNoICovCisJZWxzZQorCQlyZXQgPSBwLT5wYWNrX25hbWU7IC8qIHdlIG9ubHkgaGF2ZSBhIGJhc2UgKi8KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSBhcyB0aGlzIGxlYWtzIHAtPnBhY2tfZmQgb24gZXJyb3IgcmV0dXJuOworICogY2FsbCBvcGVuX3BhY2tlZF9naXQoKSBpbnN0ZWFkLgorICovCitzdGF0aWMgaW50IG9wZW5fcGFja2VkX2dpdF8xKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBwYWNrX2hlYWRlciBoZHI7CisJdW5zaWduZWQgY2hhciBoYXNoW0dJVF9NQVhfUkFXU1pdOworCXVuc2lnbmVkIGNoYXIgKmlkeF9oYXNoOworCXNzaXplX3QgcmVhZF9yZXN1bHQ7CisJY29uc3QgdW5zaWduZWQgaGFzaHN6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisKKwlpZiAoIXAtPmluZGV4X2RhdGEpIHsKKwkJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm07CisJCWNvbnN0IGNoYXIgKnBhY2tfbmFtZSA9IHBhY2tfYmFzZW5hbWUocCk7CisKKwkJZm9yIChtID0gdGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXg7CisJCSAgICAgbTsgbSA9IG0tPm5leHQpIHsKKwkJCWlmIChtaWR4X2NvbnRhaW5zX3BhY2sobSwgcGFja19uYW1lKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICghbSAmJiBvcGVuX3BhY2tfaW5kZXgocCkpCisJCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGluZGV4IHVuYXZhaWxhYmxlIiwgcC0+cGFja19uYW1lKTsKKwl9CisKKwlpZiAoIXBhY2tfbWF4X2ZkcykgeworCQl1bnNpZ25lZCBpbnQgbWF4X2ZkcyA9IGdldF9tYXhfZmRfbGltaXQoKTsKKworCQkvKiBTYXZlIDMgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIsIDIyIGZvciB3b3JrICovCisJCWlmICgyNSA8IG1heF9mZHMpCisJCQlwYWNrX21heF9mZHMgPSBtYXhfZmRzIC0gMjU7CisJCWVsc2UKKwkJCXBhY2tfbWF4X2ZkcyA9IDE7CisJfQorCisJd2hpbGUgKHBhY2tfbWF4X2ZkcyA8PSBwYWNrX29wZW5fZmRzICYmIGNsb3NlX29uZV9wYWNrKCkpCisJCTsgLyogbm90aGluZyAqLworCisJcC0+cGFja19mZCA9IGdpdF9vcGVuKHAtPnBhY2tfbmFtZSk7CisJaWYgKHAtPnBhY2tfZmQgPCAwIHx8IGZzdGF0KHAtPnBhY2tfZmQsICZzdCkpCisJCXJldHVybiAtMTsKKwlwYWNrX29wZW5fZmRzKys7CisKKwkvKiBJZiB3ZSBjcmVhdGVkIHRoZSBzdHJ1Y3QgYmVmb3JlIHdlIGhhZCB0aGUgcGFjayB3ZSBsYWNrIHNpemUuICovCisJaWYgKCFwLT5wYWNrX3NpemUpIHsKKwkJaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBub3QgYSByZWd1bGFyIGZpbGUiLCBwLT5wYWNrX25hbWUpOworCQlwLT5wYWNrX3NpemUgPSBzdC5zdF9zaXplOworCX0gZWxzZSBpZiAocC0+cGFja19zaXplICE9IHN0LnN0X3NpemUpCisJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgc2l6ZSBjaGFuZ2VkIiwgcC0+cGFja19uYW1lKTsKKworCS8qIFZlcmlmeSB3ZSByZWNvZ25pemUgdGhpcyBwYWNrIGZpbGUgZm9ybWF0LiAqLworCXJlYWRfcmVzdWx0ID0gcmVhZF9pbl9mdWxsKHAtPnBhY2tfZmQsICZoZHIsIHNpemVvZihoZHIpKTsKKwlpZiAocmVhZF9yZXN1bHQgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oImVycm9yIHJlYWRpbmcgZnJvbSAlcyIsIHAtPnBhY2tfbmFtZSk7CisJaWYgKHJlYWRfcmVzdWx0ICE9IHNpemVvZihoZHIpKQorCQlyZXR1cm4gZXJyb3IoImZpbGUgJXMgaXMgZmFyIHRvbyBzaG9ydCB0byBiZSBhIHBhY2tmaWxlIiwgcC0+cGFja19uYW1lKTsKKwlpZiAoaGRyLmhkcl9zaWduYXR1cmUgIT0gaHRvbmwoUEFDS19TSUdOQVRVUkUpKQorCQlyZXR1cm4gZXJyb3IoImZpbGUgJXMgaXMgbm90IGEgR0lUIHBhY2tmaWxlIiwgcC0+cGFja19uYW1lKTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZHIuaGRyX3ZlcnNpb24pKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGlzIHZlcnNpb24gJSJQUkl1MzIiIGFuZCBub3QiCisJCQkiIHN1cHBvcnRlZCAodHJ5IHVwZ3JhZGluZyBHSVQgdG8gYSBuZXdlciB2ZXJzaW9uKSIsCisJCQlwLT5wYWNrX25hbWUsIG50b2hsKGhkci5oZHJfdmVyc2lvbikpOworCisJLyogU2tpcCBpbmRleCBjaGVja2luZyBpZiBpbiBtdWx0aS1wYWNrLWluZGV4ICovCisJaWYgKCFwLT5pbmRleF9kYXRhKQorCQlyZXR1cm4gMDsKKworCS8qIFZlcmlmeSB0aGUgcGFjayBtYXRjaGVzIGl0cyBpbmRleC4gKi8KKwlpZiAocC0+bnVtX29iamVjdHMgIT0gbnRvaGwoaGRyLmhkcl9lbnRyaWVzKSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBjbGFpbXMgdG8gaGF2ZSAlIlBSSXUzMiIgb2JqZWN0cyIKKwkJCSAgICAgIiB3aGlsZSBpbmRleCBpbmRpY2F0ZXMgJSJQUkl1MzIiIG9iamVjdHMiLAorCQkJICAgICBwLT5wYWNrX25hbWUsIG50b2hsKGhkci5oZHJfZW50cmllcyksCisJCQkgICAgIHAtPm51bV9vYmplY3RzKTsKKwlyZWFkX3Jlc3VsdCA9IHByZWFkX2luX2Z1bGwocC0+cGFja19mZCwgaGFzaCwgaGFzaHN6LAorCQkJCQlwLT5wYWNrX3NpemUgLSBoYXNoc3opOworCWlmIChyZWFkX3Jlc3VsdCA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubygiZXJyb3IgcmVhZGluZyBmcm9tICVzIiwgcC0+cGFja19uYW1lKTsKKwlpZiAocmVhZF9yZXN1bHQgIT0gaGFzaHN6KQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIHNpZ25hdHVyZSBpcyB1bmF2YWlsYWJsZSIsIHAtPnBhY2tfbmFtZSk7CisJaWR4X2hhc2ggPSAoKHVuc2lnbmVkIGNoYXIgKilwLT5pbmRleF9kYXRhKSArIHAtPmluZGV4X3NpemUgLSBoYXNoc3ogKiAyOworCWlmICghaGFzaGVxKGhhc2gsIGlkeF9oYXNoKSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBkb2VzIG5vdCBtYXRjaCBpbmRleCIsIHAtPnBhY2tfbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9wYWNrZWRfZ2l0KHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWlmICghb3Blbl9wYWNrZWRfZ2l0XzEocCkpCisJCXJldHVybiAwOworCWNsb3NlX3BhY2tfZmQocCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGluX3dpbmRvdyhzdHJ1Y3QgcGFja193aW5kb3cgKndpbiwgb2ZmX3Qgb2Zmc2V0KQoreworCS8qIFdlIG11c3QgcHJvbWlzZSBhdCBsZWFzdCBvbmUgZnVsbCBoYXNoIGFmdGVyIHRoZQorCSAqIG9mZnNldCBpcyBhdmFpbGFibGUgZnJvbSB0aGlzIHdpbmRvdywgb3RoZXJ3aXNlIHRoZSBvZmZzZXQKKwkgKiBpcyBub3QgYWN0dWFsbHkgaW4gdGhpcyB3aW5kb3cgYW5kIGEgZGlmZmVyZW50IHdpbmRvdyAod2hpY2gKKwkgKiBoYXMgdGhhdCBvbmUgaGFzaCBleGNlc3MpIG11c3QgYmUgdXNlZC4gIFRoaXMgaXMgdG8gc3VwcG9ydAorCSAqIHRoZSBvYmplY3QgaGVhZGVyIGFuZCBkZWx0YSBiYXNlIHBhcnNpbmcgcm91dGluZXMgYmVsb3cuCisJICovCisJb2ZmX3Qgd2luX29mZiA9IHdpbi0+b2Zmc2V0OworCXJldHVybiB3aW5fb2ZmIDw9IG9mZnNldAorCQkmJiAob2Zmc2V0ICsgdGhlX2hhc2hfYWxnby0+cmF3c3opIDw9ICh3aW5fb2ZmICsgd2luLT5sZW4pOworfQorCit1bnNpZ25lZCBjaGFyICp1c2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzb3IsCisJCW9mZl90IG9mZnNldCwKKwkJdW5zaWduZWQgbG9uZyAqbGVmdCkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndpbiA9ICp3X2N1cnNvcjsKKworCS8qIFNpbmNlIHBhY2tmaWxlcyBlbmQgaW4gYSBoYXNoIG9mIHRoZWlyIGNvbnRlbnQgYW5kIGl0J3MKKwkgKiBwb2ludGxlc3MgdG8gYXNrIGZvciBhbiBvZmZzZXQgaW50byB0aGUgbWlkZGxlIG9mIHRoYXQKKwkgKiBoYXNoLCBhbmQgdGhlIGluX3dpbmRvdyBmdW5jdGlvbiBhYm92ZSB3b3VsZG4ndCBtYXRjaAorCSAqIGRvbid0IGFsbG93IGFuIG9mZnNldCB0b28gY2xvc2UgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkgKi8KKwlpZiAoIXAtPnBhY2tfc2l6ZSAmJiBwLT5wYWNrX2ZkID09IC0xICYmIG9wZW5fcGFja2VkX2dpdChwKSkKKwkJZGllKCJwYWNrZmlsZSAlcyBjYW5ub3QgYmUgYWNjZXNzZWQiLCBwLT5wYWNrX25hbWUpOworCWlmIChvZmZzZXQgPiAocC0+cGFja19zaXplIC0gdGhlX2hhc2hfYWxnby0+cmF3c3opKQorCQlkaWUoIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2tmaWxlICh0cnVuY2F0ZWQgcGFjaz8pIik7CisJaWYgKG9mZnNldCA8IDApCisJCWRpZShfKCJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIpKTsKKworCWlmICghd2luIHx8ICFpbl93aW5kb3cod2luLCBvZmZzZXQpKSB7CisJCWlmICh3aW4pCisJCQl3aW4tPmludXNlX2NudC0tOworCQlmb3IgKHdpbiA9IHAtPndpbmRvd3M7IHdpbjsgd2luID0gd2luLT5uZXh0KSB7CisJCQlpZiAoaW5fd2luZG93KHdpbiwgb2Zmc2V0KSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIXdpbikgeworCQkJc2l6ZV90IHdpbmRvd19hbGlnbiA9IHBhY2tlZF9naXRfd2luZG93X3NpemUgLyAyOworCQkJb2ZmX3QgbGVuOworCisJCQlpZiAocC0+cGFja19mZCA9PSAtMSAmJiBvcGVuX3BhY2tlZF9naXQocCkpCisJCQkJZGllKCJwYWNrZmlsZSAlcyBjYW5ub3QgYmUgYWNjZXNzZWQiLCBwLT5wYWNrX25hbWUpOworCisJCQl3aW4gPSB4Y2FsbG9jKDEsIHNpemVvZigqd2luKSk7CisJCQl3aW4tPm9mZnNldCA9IChvZmZzZXQgLyB3aW5kb3dfYWxpZ24pICogd2luZG93X2FsaWduOworCQkJbGVuID0gcC0+cGFja19zaXplIC0gd2luLT5vZmZzZXQ7CisJCQlpZiAobGVuID4gcGFja2VkX2dpdF93aW5kb3dfc2l6ZSkKKwkJCQlsZW4gPSBwYWNrZWRfZ2l0X3dpbmRvd19zaXplOworCQkJd2luLT5sZW4gPSAoc2l6ZV90KWxlbjsKKwkJCXBhY2tfbWFwcGVkICs9IHdpbi0+bGVuOworCQkJd2hpbGUgKHBhY2tlZF9naXRfbGltaXQgPCBwYWNrX21hcHBlZAorCQkJCSYmIHVudXNlX29uZV93aW5kb3cocCkpCisJCQkJOyAvKiBub3RoaW5nICovCisJCQl3aW4tPmJhc2UgPSB4bW1hcF9nZW50bHkoTlVMTCwgd2luLT5sZW4sCisJCQkJUFJPVF9SRUFELCBNQVBfUFJJVkFURSwKKwkJCQlwLT5wYWNrX2ZkLCB3aW4tPm9mZnNldCk7CisJCQlpZiAod2luLT5iYXNlID09IE1BUF9GQUlMRUQpCisJCQkJZGllX2Vycm5vKCJwYWNrZmlsZSAlcyBjYW5ub3QgYmUgbWFwcGVkIiwKKwkJCQkJICBwLT5wYWNrX25hbWUpOworCQkJaWYgKCF3aW4tPm9mZnNldCAmJiB3aW4tPmxlbiA9PSBwLT5wYWNrX3NpemUKKwkJCQkmJiAhcC0+ZG9fbm90X2Nsb3NlKQorCQkJCWNsb3NlX3BhY2tfZmQocCk7CisJCQlwYWNrX21tYXBfY2FsbHMrKzsKKwkJCXBhY2tfb3Blbl93aW5kb3dzKys7CisJCQlpZiAocGFja19tYXBwZWQgPiBwZWFrX3BhY2tfbWFwcGVkKQorCQkJCXBlYWtfcGFja19tYXBwZWQgPSBwYWNrX21hcHBlZDsKKwkJCWlmIChwYWNrX29wZW5fd2luZG93cyA+IHBlYWtfcGFja19vcGVuX3dpbmRvd3MpCisJCQkJcGVha19wYWNrX29wZW5fd2luZG93cyA9IHBhY2tfb3Blbl93aW5kb3dzOworCQkJd2luLT5uZXh0ID0gcC0+d2luZG93czsKKwkJCXAtPndpbmRvd3MgPSB3aW47CisJCX0KKwl9CisJaWYgKHdpbiAhPSAqd19jdXJzb3IpIHsKKwkJd2luLT5sYXN0X3VzZWQgPSBwYWNrX3VzZWRfY3RyKys7CisJCXdpbi0+aW51c2VfY250Kys7CisJCSp3X2N1cnNvciA9IHdpbjsKKwl9CisJb2Zmc2V0IC09IHdpbi0+b2Zmc2V0OworCWlmIChsZWZ0KQorCQkqbGVmdCA9IHdpbi0+bGVuIC0geHNpemVfdChvZmZzZXQpOworCXJldHVybiB3aW4tPmJhc2UgKyBvZmZzZXQ7Cit9CisKK3ZvaWQgdW51c2VfcGFjayhzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnNvcikKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKncgPSAqd19jdXJzb3I7CisJaWYgKHcpIHsKKwkJdy0+aW51c2VfY250LS07CisJCSp3X2N1cnNvciA9IE5VTEw7CisJfQorfQorCitzdHJ1Y3QgcGFja2VkX2dpdCAqYWRkX3BhY2tlZF9naXQoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfbGVuLCBpbnQgbG9jYWwpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc2l6ZV90IGFsbG9jOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYSBjb3JyZXNwb25kaW5nIC5wYWNrIGZpbGUgZXhpc3RzIGFuZCB0aGF0CisJICogdGhlIGluZGV4IGxvb2tzIHNhbmUuCisJICovCisJaWYgKCFzdHJpcF9zdWZmaXhfbWVtKHBhdGgsICZwYXRoX2xlbiwgIi5pZHgiKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqICIucHJvbWlzb3IiIGlzIGxvbmcgZW5vdWdoIHRvIGhvbGQgYW55IHN1ZmZpeCB3ZSdyZSBhZGRpbmcgKGFuZAorCSAqIHRoZSB1c2UgeHNucHJpbnRmIGRvdWJsZS1jaGVja3MgdGhhdCkKKwkgKi8KKwlhbGxvYyA9IHN0X2FkZDMocGF0aF9sZW4sIHN0cmxlbigiLnByb21pc29yIiksIDEpOworCXAgPSBhbGxvY19wYWNrZWRfZ2l0KGFsbG9jKTsKKwltZW1jcHkocC0+cGFja19uYW1lLCBwYXRoLCBwYXRoX2xlbik7CisKKwl4c25wcmludGYocC0+cGFja19uYW1lICsgcGF0aF9sZW4sIGFsbG9jIC0gcGF0aF9sZW4sICIua2VlcCIpOworCWlmICghYWNjZXNzKHAtPnBhY2tfbmFtZSwgRl9PSykpCisJCXAtPnBhY2tfa2VlcCA9IDE7CisKKwl4c25wcmludGYocC0+cGFja19uYW1lICsgcGF0aF9sZW4sIGFsbG9jIC0gcGF0aF9sZW4sICIucHJvbWlzb3IiKTsKKwlpZiAoIWFjY2VzcyhwLT5wYWNrX25hbWUsIEZfT0spKQorCQlwLT5wYWNrX3Byb21pc29yID0gMTsKKworCXhzbnByaW50ZihwLT5wYWNrX25hbWUgKyBwYXRoX2xlbiwgYWxsb2MgLSBwYXRoX2xlbiwgIi5wYWNrIik7CisJaWYgKHN0YXQocC0+cGFja19uYW1lLCAmc3QpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisJCWZyZWUocCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIG9rLCBpdCBsb29rcyBzYW5lIGFzIGZhciBhcyB3ZSBjYW4gY2hlY2sgd2l0aG91dAorCSAqIGFjdHVhbGx5IG1hcHBpbmcgdGhlIHBhY2sgZmlsZS4KKwkgKi8KKwlwLT5wYWNrX3NpemUgPSBzdC5zdF9zaXplOworCXAtPnBhY2tfbG9jYWwgPSBsb2NhbDsKKwlwLT5tdGltZSA9IHN0LnN0X210aW1lOworCWlmIChwYXRoX2xlbiA8IHRoZV9oYXNoX2FsZ28tPmhleHN6IHx8CisJICAgIGdldF9zaGExX2hleChwYXRoICsgcGF0aF9sZW4gLSB0aGVfaGFzaF9hbGdvLT5oZXhzeiwgcC0+aGFzaCkpCisJCWhhc2hjbHIocC0+aGFzaCk7CisJcmV0dXJuIHA7Cit9CisKK3ZvaWQgaW5zdGFsbF9wYWNrZWRfZ2l0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaykKK3sKKwlpZiAocGFjay0+cGFja19mZCAhPSAtMSkKKwkJcGFja19vcGVuX2ZkcysrOworCisJcGFjay0+bmV4dCA9IHItPm9iamVjdHMtPnBhY2tlZF9naXQ7CisJci0+b2JqZWN0cy0+cGFja2VkX2dpdCA9IHBhY2s7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJnBhY2stPnBhY2ttYXBfZW50LCBzdHJoYXNoKHBhY2stPnBhY2tfbmFtZSkpOworCWhhc2htYXBfYWRkKCZyLT5vYmplY3RzLT5wYWNrX21hcCwgJnBhY2stPnBhY2ttYXBfZW50KTsKK30KKwordm9pZCAoKnJlcG9ydF9nYXJiYWdlKSh1bnNpZ25lZCBzZWVuX2JpdHMsIGNvbnN0IGNoYXIgKnBhdGgpOworCitzdGF0aWMgdm9pZCByZXBvcnRfaGVscGVyKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCSAgaW50IHNlZW5fYml0cywgaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKwlpZiAoc2Vlbl9iaXRzID09IChQQUNLRElSX0ZJTEVfUEFDS3xQQUNLRElSX0ZJTEVfSURYKSkKKwkJcmV0dXJuOworCisJZm9yICg7IGZpcnN0IDwgbGFzdDsgZmlyc3QrKykKKwkJcmVwb3J0X2dhcmJhZ2Uoc2Vlbl9iaXRzLCBsaXN0LT5pdGVtc1tmaXJzdF0uc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X3BhY2tfZ2FyYmFnZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGksIGJhc2VsZW4gPSAtMSwgZmlyc3QgPSAwLCBzZWVuX2JpdHMgPSAwOworCisJaWYgKCFyZXBvcnRfZ2FyYmFnZSkKKwkJcmV0dXJuOworCisJc3RyaW5nX2xpc3Rfc29ydChsaXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0LT5pdGVtc1tpXS5zdHJpbmc7CisJCWlmIChiYXNlbGVuICE9IC0xICYmCisJCSAgICBzdHJuY21wKHBhdGgsIGxpc3QtPml0ZW1zW2ZpcnN0XS5zdHJpbmcsIGJhc2VsZW4pKSB7CisJCQlyZXBvcnRfaGVscGVyKGxpc3QsIHNlZW5fYml0cywgZmlyc3QsIGkpOworCQkJYmFzZWxlbiA9IC0xOworCQkJc2Vlbl9iaXRzID0gMDsKKwkJfQorCQlpZiAoYmFzZWxlbiA9PSAtMSkgeworCQkJY29uc3QgY2hhciAqZG90ID0gc3RycmNocihwYXRoLCAnLicpOworCQkJaWYgKCFkb3QpIHsKKwkJCQlyZXBvcnRfZ2FyYmFnZShQQUNLRElSX0ZJTEVfR0FSQkFHRSwgcGF0aCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQliYXNlbGVuID0gZG90IC0gcGF0aCArIDE7CisJCQlmaXJzdCA9IGk7CisJCX0KKwkJaWYgKCFzdHJjbXAocGF0aCArIGJhc2VsZW4sICJwYWNrIikpCisJCQlzZWVuX2JpdHMgfD0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChwYXRoICsgYmFzZWxlbiwgImlkeCIpKQorCQkJc2Vlbl9iaXRzIHw9IDI7CisJfQorCXJlcG9ydF9oZWxwZXIobGlzdCwgc2Vlbl9iaXRzLCBmaXJzdCwgbGlzdC0+bnIpOworfQorCit2b2lkIGZvcl9lYWNoX2ZpbGVfaW5fcGFja19kaXIoY29uc3QgY2hhciAqb2JqZGlyLAorCQkJICAgICAgIGVhY2hfZmlsZV9pbl9wYWNrX2Rpcl9mbiBmbiwKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXNpemVfdCBkaXJuYW1lbGVuOworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmRlOworCisJc3RyYnVmX2FkZHN0cigmcGF0aCwgb2JqZGlyKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCAiL3BhY2siKTsKKwlkaXIgPSBvcGVuZGlyKHBhdGguYnVmKTsKKwlpZiAoIWRpcikgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJZXJyb3JfZXJybm8oInVuYWJsZSB0byBvcGVuIG9iamVjdCBwYWNrIGRpcmVjdG9yeTogJXMiLAorCQkJCSAgICBwYXRoLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwkJcmV0dXJuOworCX0KKwlzdHJidWZfYWRkY2goJnBhdGgsICcvJyk7CisJZGlybmFtZWxlbiA9IHBhdGgubGVuOworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZGUtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKCZwYXRoLCBkaXJuYW1lbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmcGF0aCwgZGUtPmRfbmFtZSk7CisKKwkJZm4ocGF0aC5idWYsIHBhdGgubGVuLCBkZS0+ZF9uYW1lLCBkYXRhKTsKKwl9CisKKwljbG9zZWRpcihkaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKK30KKworc3RydWN0IHByZXBhcmVfcGFja19kYXRhIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdhcmJhZ2U7CisJaW50IGxvY2FsOworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOworfTsKKworc3RhdGljIHZvaWQgcHJlcGFyZV9wYWNrKGNvbnN0IGNoYXIgKmZ1bGxfbmFtZSwgc2l6ZV90IGZ1bGxfbmFtZV9sZW4sCisJCQkgY29uc3QgY2hhciAqZmlsZV9uYW1lLCB2b2lkICpfZGF0YSkKK3sKKwlzdHJ1Y3QgcHJlcGFyZV9wYWNrX2RhdGEgKmRhdGEgPSAoc3RydWN0IHByZXBhcmVfcGFja19kYXRhICopX2RhdGE7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJc2l6ZV90IGJhc2VfbGVuID0gZnVsbF9uYW1lX2xlbjsKKworCWlmIChzdHJpcF9zdWZmaXhfbWVtKGZ1bGxfbmFtZSwgJmJhc2VfbGVuLCAiLmlkeCIpICYmCisJICAgICEoZGF0YS0+bSAmJiBtaWR4X2NvbnRhaW5zX3BhY2soZGF0YS0+bSwgZmlsZV9uYW1lKSkpIHsKKwkJc3RydWN0IGhhc2htYXBfZW50cnkgaGVudDsKKwkJY2hhciAqcGFja19uYW1lID0geHN0cmZtdCgiJS4qcy5wYWNrIiwgKGludCliYXNlX2xlbiwgZnVsbF9uYW1lKTsKKwkJdW5zaWduZWQgaW50IGhhc2ggPSBzdHJoYXNoKHBhY2tfbmFtZSk7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmaGVudCwgaGFzaCk7CisKKwkJLyogRG9uJ3QgcmVvcGVuIGEgcGFjayB3ZSBhbHJlYWR5IGhhdmUuICovCisJCWlmICghaGFzaG1hcF9nZXQoJmRhdGEtPnItPm9iamVjdHMtPnBhY2tfbWFwLCAmaGVudCwgcGFja19uYW1lKSkgeworCQkJcCA9IGFkZF9wYWNrZWRfZ2l0KGZ1bGxfbmFtZSwgZnVsbF9uYW1lX2xlbiwgZGF0YS0+bG9jYWwpOworCQkJaWYgKHApCisJCQkJaW5zdGFsbF9wYWNrZWRfZ2l0KGRhdGEtPnIsIHApOworCQl9CisJCWZyZWUocGFja19uYW1lKTsKKwl9CisKKwlpZiAoIXJlcG9ydF9nYXJiYWdlKQorCQlyZXR1cm47CisKKwlpZiAoIXN0cmNtcChmaWxlX25hbWUsICJtdWx0aS1wYWNrLWluZGV4IikpCisJCXJldHVybjsKKwlpZiAoZW5kc193aXRoKGZpbGVfbmFtZSwgIi5pZHgiKSB8fAorCSAgICBlbmRzX3dpdGgoZmlsZV9uYW1lLCAiLnBhY2siKSB8fAorCSAgICBlbmRzX3dpdGgoZmlsZV9uYW1lLCAiLmJpdG1hcCIpIHx8CisJICAgIGVuZHNfd2l0aChmaWxlX25hbWUsICIua2VlcCIpIHx8CisJICAgIGVuZHNfd2l0aChmaWxlX25hbWUsICIucHJvbWlzb3IiKSkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGRhdGEtPmdhcmJhZ2UsIGZ1bGxfbmFtZSk7CisJZWxzZQorCQlyZXBvcnRfZ2FyYmFnZShQQUNLRElSX0ZJTEVfR0FSQkFHRSwgZnVsbF9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9wYWNrZWRfZ2l0X29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY2hhciAqb2JqZGlyLCBpbnQgbG9jYWwpCit7CisJc3RydWN0IHByZXBhcmVfcGFja19kYXRhIGRhdGE7CisJc3RydWN0IHN0cmluZ19saXN0IGdhcmJhZ2UgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWRhdGEubSA9IHItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXg7CisKKwkvKiBsb29rIGZvciB0aGUgbXVsdGktcGFjay1pbmRleCBmb3IgdGhpcyBvYmplY3QgZGlyZWN0b3J5ICovCisJd2hpbGUgKGRhdGEubSAmJiBzdHJjbXAoZGF0YS5tLT5vYmplY3RfZGlyLCBvYmpkaXIpKQorCQlkYXRhLm0gPSBkYXRhLm0tPm5leHQ7CisKKwlkYXRhLnIgPSByOworCWRhdGEuZ2FyYmFnZSA9ICZnYXJiYWdlOworCWRhdGEubG9jYWwgPSBsb2NhbDsKKworCWZvcl9lYWNoX2ZpbGVfaW5fcGFja19kaXIob2JqZGlyLCBwcmVwYXJlX3BhY2ssICZkYXRhKTsKKworCXJlcG9ydF9wYWNrX2dhcmJhZ2UoZGF0YS5nYXJiYWdlKTsKKwlzdHJpbmdfbGlzdF9jbGVhcihkYXRhLmdhcmJhZ2UsIDApOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2tlZF9naXQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworLyoKKyAqIEdpdmUgYSBmYXN0LCByb3VnaCBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkuIFRoaXMKKyAqIGlnbm9yZXMgbG9vc2Ugb2JqZWN0cyBjb21wbGV0ZWx5LiBJZiB5b3UgaGF2ZSBhIGxvdCBvZiB0aGVtLCB0aGVuIGVpdGhlcgorICogeW91IHNob3VsZCByZXBhY2sgYmVjYXVzZSB5b3VyIHBlcmZvcm1hbmNlIHdpbGwgYmUgYXdmdWwsIG9yIHRoZXkgYXJlCisgKiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyBhYm91dCB0byBiZSBwcnVuZWQsIGluIHdoaWNoIGNhc2UgdGhleSdyZSBub3QgcmVhbGx5CisgKiBpbnRlcmVzdGluZyBhcyBhIG1lYXN1cmUgb2YgcmVwbyBzaXplIGluIHRoZSBmaXJzdCBwbGFjZS4KKyAqLwordW5zaWduZWQgbG9uZyByZXBvX2FwcHJveGltYXRlX29iamVjdF9jb3VudChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlpZiAoIXItPm9iamVjdHMtPmFwcHJveGltYXRlX29iamVjdF9jb3VudF92YWxpZCkgeworCQl1bnNpZ25lZCBsb25nIGNvdW50OworCQlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbTsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwkJcHJlcGFyZV9wYWNrZWRfZ2l0KHIpOworCQljb3VudCA9IDA7CisJCWZvciAobSA9IGdldF9tdWx0aV9wYWNrX2luZGV4KHIpOyBtOyBtID0gbS0+bmV4dCkKKwkJCWNvdW50ICs9IG0tPm51bV9vYmplY3RzOworCQlmb3IgKHAgPSByLT5vYmplY3RzLT5wYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCQljb250aW51ZTsKKwkJCWNvdW50ICs9IHAtPm51bV9vYmplY3RzOworCQl9CisJCXItPm9iamVjdHMtPmFwcHJveGltYXRlX29iamVjdF9jb3VudCA9IGNvdW50OworCX0KKwlyZXR1cm4gci0+b2JqZWN0cy0+YXBwcm94aW1hdGVfb2JqZWN0X2NvdW50OworfQorCitzdGF0aWMgdm9pZCAqZ2V0X25leHRfcGFja2VkX2dpdChjb25zdCB2b2lkICpwKQoreworCXJldHVybiAoKGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICopcCktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9uZXh0X3BhY2tlZF9naXQodm9pZCAqcCwgdm9pZCAqbmV4dCkKK3sKKwkoKHN0cnVjdCBwYWNrZWRfZ2l0ICopcCktPm5leHQgPSBuZXh0OworfQorCitzdGF0aWMgaW50IHNvcnRfcGFjayhjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKmEgPSBhXzsKKwljb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqYiA9IGJfOworCWludCBzdDsKKworCS8qCisJICogTG9jYWwgcGFja3MgdGVuZCB0byBjb250YWluIG9iamVjdHMgc3BlY2lmaWMgdG8gb3VyCisJICogdmFyaWFudCBvZiB0aGUgcHJvamVjdCB0aGFuIHJlbW90ZSBvbmVzLiAgSW4gYWRkaXRpb24sCisJICogcmVtb3RlIG9uZXMgY291bGQgYmUgb24gYSBuZXR3b3JrIG1vdW50ZWQgZmlsZXN5c3RlbS4KKwkgKiBGYXZvciBsb2NhbCBvbmVzIGZvciB0aGVzZSByZWFzb25zLgorCSAqLworCXN0ID0gYS0+cGFja19sb2NhbCAtIGItPnBhY2tfbG9jYWw7CisJaWYgKHN0KQorCQlyZXR1cm4gLXN0OworCisJLyoKKwkgKiBZb3VuZ2VyIHBhY2tzIHRlbmQgdG8gY29udGFpbiBtb3JlIHJlY2VudCBvYmplY3RzLAorCSAqIGFuZCBtb3JlIHJlY2VudCBvYmplY3RzIHRlbmQgdG8gZ2V0IGFjY2Vzc2VkIG1vcmUKKwkgKiBvZnRlbi4KKwkgKi8KKwlpZiAoYS0+bXRpbWUgPCBiLT5tdGltZSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYS0+bXRpbWUgPT0gYi0+bXRpbWUpCisJCXJldHVybiAwOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcmVhcnJhbmdlX3BhY2tlZF9naXQoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJci0+b2JqZWN0cy0+cGFja2VkX2dpdCA9IGxsaXN0X21lcmdlc29ydCgKKwkJci0+b2JqZWN0cy0+cGFja2VkX2dpdCwgZ2V0X25leHRfcGFja2VkX2dpdCwKKwkJc2V0X25leHRfcGFja2VkX2dpdCwgc29ydF9wYWNrKTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9wYWNrZWRfZ2l0X21ydShzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCUlOSVRfTElTVF9IRUFEKCZyLT5vYmplY3RzLT5wYWNrZWRfZ2l0X21ydSk7CisKKwlmb3IgKHAgPSByLT5vYmplY3RzLT5wYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkKKwkJbGlzdF9hZGRfdGFpbCgmcC0+bXJ1LCAmci0+b2JqZWN0cy0+cGFja2VkX2dpdF9tcnUpOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2tlZF9naXQoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCWlmIChyLT5vYmplY3RzLT5wYWNrZWRfZ2l0X2luaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwlwcmVwYXJlX2FsdF9vZGIocik7CisJZm9yIChvZGIgPSByLT5vYmplY3RzLT5vZGI7IG9kYjsgb2RiID0gb2RiLT5uZXh0KSB7CisJCWludCBsb2NhbCA9IChvZGIgPT0gci0+b2JqZWN0cy0+b2RiKTsKKwkJcHJlcGFyZV9tdWx0aV9wYWNrX2luZGV4X29uZShyLCBvZGItPnBhdGgsIGxvY2FsKTsKKwkJcHJlcGFyZV9wYWNrZWRfZ2l0X29uZShyLCBvZGItPnBhdGgsIGxvY2FsKTsKKwl9CisJcmVhcnJhbmdlX3BhY2tlZF9naXQocik7CisKKwlwcmVwYXJlX3BhY2tlZF9naXRfbXJ1KHIpOworCXItPm9iamVjdHMtPnBhY2tlZF9naXRfaW5pdGlhbGl6ZWQgPSAxOworfQorCit2b2lkIHJlcHJlcGFyZV9wYWNrZWRfZ2l0KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisKKwlvYmpfcmVhZF9sb2NrKCk7CisJZm9yIChvZGIgPSByLT5vYmplY3RzLT5vZGI7IG9kYjsgb2RiID0gb2RiLT5uZXh0KQorCQlvZGJfY2xlYXJfbG9vc2VfY2FjaGUob2RiKTsKKworCXItPm9iamVjdHMtPmFwcHJveGltYXRlX29iamVjdF9jb3VudF92YWxpZCA9IDA7CisJci0+b2JqZWN0cy0+cGFja2VkX2dpdF9pbml0aWFsaXplZCA9IDA7CisJcHJlcGFyZV9wYWNrZWRfZ2l0KHIpOworCW9ial9yZWFkX3VubG9jaygpOworfQorCitzdHJ1Y3QgcGFja2VkX2dpdCAqZ2V0X3BhY2tlZF9naXQoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJcHJlcGFyZV9wYWNrZWRfZ2l0KHIpOworCXJldHVybiByLT5vYmplY3RzLT5wYWNrZWRfZ2l0OworfQorCitzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqZ2V0X211bHRpX3BhY2tfaW5kZXgoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJcHJlcGFyZV9wYWNrZWRfZ2l0KHIpOworCXJldHVybiByLT5vYmplY3RzLT5tdWx0aV9wYWNrX2luZGV4OworfQorCitzdHJ1Y3QgcGFja2VkX2dpdCAqZ2V0X2FsbF9wYWNrcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbTsKKworCXByZXBhcmVfcGFja2VkX2dpdChyKTsKKwlmb3IgKG0gPSByLT5vYmplY3RzLT5tdWx0aV9wYWNrX2luZGV4OyBtOyBtID0gbS0+bmV4dCkgeworCQl1aW50MzJfdCBpOworCQlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX3BhY2tzOyBpKyspCisJCQlwcmVwYXJlX21pZHhfcGFjayhyLCBtLCBpKTsKKwl9CisKKwlyZXR1cm4gci0+b2JqZWN0cy0+cGFja2VkX2dpdDsKK30KKworc3RydWN0IGxpc3RfaGVhZCAqZ2V0X3BhY2tlZF9naXRfbXJ1KHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXByZXBhcmVfcGFja2VkX2dpdChyKTsKKwlyZXR1cm4gJnItPm9iamVjdHMtPnBhY2tlZF9naXRfbXJ1OworfQorCit1bnNpZ25lZCBsb25nIHVucGFja19vYmplY3RfaGVhZGVyX2J1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCXVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwl1bnNpZ25lZCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGM7CisJdW5zaWduZWQgbG9uZyB1c2VkID0gMDsKKworCWMgPSBidWZbdXNlZCsrXTsKKwkqdHlwZSA9IChjID4+IDQpICYgNzsKKwlzaXplID0gYyAmIDE1OworCXNoaWZ0ID0gNDsKKwl3aGlsZSAoYyAmIDB4ODApIHsKKwkJaWYgKGxlbiA8PSB1c2VkIHx8IGJpdHNpemVvZihsb25nKSA8PSBzaGlmdCkgeworCQkJZXJyb3IoImJhZCBvYmplY3QgaGVhZGVyIik7CisJCQlzaXplID0gdXNlZCA9IDA7CisJCQlicmVhazsKKwkJfQorCQljID0gYnVmW3VzZWQrK107CisJCXNpemUgKz0gKGMgJiAweDdmKSA8PCBzaGlmdDsKKwkJc2hpZnQgKz0gNzsKKwl9CisJKnNpemVwID0gc2l6ZTsKKwlyZXR1cm4gdXNlZDsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfc2l6ZV9mcm9tX2RlbHRhKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJCSAgb2ZmX3QgY3VycG9zKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7CisJdW5zaWduZWQgY2hhciBkZWx0YV9oZWFkWzIwXSwgKmluOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwlpbnQgc3Q7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCXN0cmVhbS5uZXh0X291dCA9IGRlbHRhX2hlYWQ7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihkZWx0YV9oZWFkKTsKKworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJZG8geworCQlpbiA9IHVzZV9wYWNrKHAsIHdfY3VycywgY3VycG9zLCAmc3RyZWFtLmF2YWlsX2luKTsKKwkJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwkJLyoKKwkJICogTm90ZTogdGhlIHdpbmRvdyBzZWN0aW9uIHJldHVybmVkIGJ5IHVzZV9wYWNrKCkgbXVzdCBiZQorCQkgKiBhdmFpbGFibGUgdGhyb3VnaG91dCBnaXRfaW5mbGF0ZSgpJ3MgdW5sb2NrZWQgZXhlY3V0aW9uLiBUbworCQkgKiBlbnN1cmUgbm8gb3RoZXIgdGhyZWFkIHdpbGwgbW9kaWZ5IHRoZSB3aW5kb3cgaW4gdGhlCisJCSAqIG1lYW50aW1lLCB3ZSByZWx5IG9uIHRoZSBwYWNrZWRfd2luZG93LmludXNlX2NudC4gVGhpcworCQkgKiBjb3VudGVyIGlzIGluY3JlbWVudGVkIGJlZm9yZSB3aW5kb3cgcmVhZGluZyBhbmQgY2hlY2tlZAorCQkgKiBiZWZvcmUgd2luZG93IGRpc3Bvc2FsLgorCQkgKgorCQkgKiBPdGhlciB3b3JyeWluZyBzZWN0aW9ucyBjb3VsZCBiZSB0aGUgY2FsbCB0byBjbG9zZV9wYWNrX2ZkKCksCisJCSAqIHdoaWNoIGNhbiBjbG9zZSBwYWNrcyBldmVuIHdpdGggaW4tdXNlIHdpbmRvd3MsIGFuZCB0bworCQkgKiByZXByZXBhcmVfcGFja2VkX2dpdCgpLiBSZWdhcmRpbmcgdGhlIGZvcm1lciwgbW1hcCBkb2Mgc2F5czoKKwkJICogImNsb3NpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBkb2VzIG5vdCB1bm1hcCB0aGUgcmVnaW9uIi4gQW5kCisJCSAqIGZvciB0aGUgbGF0dGVyLCBpdCB3b24ndCByZS1vcGVuIGFscmVhZHkgYXZhaWxhYmxlIHBhY2tzLgorCQkgKi8KKwkJb2JqX3JlYWRfdW5sb2NrKCk7CisJCXN0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCQlvYmpfcmVhZF9sb2NrKCk7CisJCWN1cnBvcyArPSBzdHJlYW0ubmV4dF9pbiAtIGluOworCX0gd2hpbGUgKChzdCA9PSBaX09LIHx8IHN0ID09IFpfQlVGX0VSUk9SKSAmJgorCQkgc3RyZWFtLnRvdGFsX291dCA8IHNpemVvZihkZWx0YV9oZWFkKSk7CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWlmICgoc3QgIT0gWl9TVFJFQU1fRU5EKSAmJiBzdHJlYW0udG90YWxfb3V0ICE9IHNpemVvZihkZWx0YV9oZWFkKSkgeworCQllcnJvcigiZGVsdGEgZGF0YSB1bnBhY2staW5pdGlhbCBmYWlsZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRXhhbWluZSB0aGUgaW5pdGlhbCBwYXJ0IG9mIHRoZSBkZWx0YSB0byBmaWd1cmUgb3V0CisJICogdGhlIHJlc3VsdCBzaXplLgorCSAqLworCWRhdGEgPSBkZWx0YV9oZWFkOworCisJLyogaWdub3JlIGJhc2Ugc2l6ZSAqLworCWdldF9kZWx0YV9oZHJfc2l6ZSgmZGF0YSwgZGVsdGFfaGVhZCtzaXplb2YoZGVsdGFfaGVhZCkpOworCisJLyogUmVhZCB0aGUgcmVzdWx0IHNpemUgKi8KKwlyZXR1cm4gZ2V0X2RlbHRhX2hkcl9zaXplKCZkYXRhLCBkZWx0YV9oZWFkK3NpemVvZihkZWx0YV9oZWFkKSk7Cit9CisKK2ludCB1bnBhY2tfb2JqZWN0X2hlYWRlcihzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCSBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkgb2ZmX3QgKmN1cnBvcywKKwkJCSB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwl1bnNpZ25lZCBjaGFyICpiYXNlOworCXVuc2lnbmVkIGxvbmcgbGVmdDsKKwl1bnNpZ25lZCBsb25nIHVzZWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJLyogdXNlX3BhY2soKSBhc3N1cmVzIHVzIHdlIGhhdmUgW2Jhc2UsIGJhc2UgKyAyMCkgYXZhaWxhYmxlCisJICogYXMgYSByYW5nZSB0aGF0IHdlIGNhbiBsb29rIGF0LiAgKEl0cyBhY3R1YWxseSB0aGUgaGFzaAorCSAqIHNpemUgdGhhdCBpcyBhc3N1cmVkLikgIFdpdGggb3VyIG9iamVjdCBoZWFkZXIgZW5jb2RpbmcKKwkgKiB0aGUgbWF4aW11bSBkZWZsYXRlZCBvYmplY3Qgc2l6ZSBpcyAyXjEzNywgd2hpY2ggaXMganVzdAorCSAqIGluc2FuZSwgc28gd2Uga25vdyB3b24ndCBleGNlZWQgd2hhdCB3ZSBoYXZlIGJlZW4gZ2l2ZW4uCisJICovCisJYmFzZSA9IHVzZV9wYWNrKHAsIHdfY3VycywgKmN1cnBvcywgJmxlZnQpOworCXVzZWQgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcl9idWZmZXIoYmFzZSwgbGVmdCwgJnR5cGUsIHNpemVwKTsKKwlpZiAoIXVzZWQpIHsKKwkJdHlwZSA9IE9CSl9CQUQ7CisJfSBlbHNlCisJCSpjdXJwb3MgKz0gdXNlZDsKKworCXJldHVybiB0eXBlOworfQorCit2b2lkIG1hcmtfYmFkX3BhY2tlZF9vYmplY3Qoc3RydWN0IHBhY2tlZF9naXQgKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgaTsKKwljb25zdCB1bnNpZ25lZCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKwlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX2JhZF9vYmplY3RzOyBpKyspCisJCWlmIChoYXNoZXEoc2hhMSwgcC0+YmFkX29iamVjdF9zaGExICsgaGFzaHN6ICogaSkpCisJCQlyZXR1cm47CisJcC0+YmFkX29iamVjdF9zaGExID0geHJlYWxsb2MocC0+YmFkX29iamVjdF9zaGExLAorCQkJCSAgICAgIHN0X211bHQoR0lUX01BWF9SQVdTWiwKKwkJCQkJICAgICAgc3RfYWRkKHAtPm51bV9iYWRfb2JqZWN0cywgMSkpKTsKKwloYXNoY3B5KHAtPmJhZF9vYmplY3Rfc2hhMSArIGhhc2hzeiAqIHAtPm51bV9iYWRfb2JqZWN0cywgc2hhMSk7CisJcC0+bnVtX2JhZF9vYmplY3RzKys7Cit9CisKK2NvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpoYXNfcGFja2VkX2FuZF9iYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCXVuc2lnbmVkIGk7CisKKwlmb3IgKHAgPSByLT5vYmplY3RzLT5wYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkKKwkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9iYWRfb2JqZWN0czsgaSsrKQorCQkJaWYgKGhhc2hlcShzaGExLAorCQkJCSAgIHAtPmJhZF9vYmplY3Rfc2hhMSArIHRoZV9oYXNoX2FsZ28tPnJhd3N6ICogaSkpCisJCQkJcmV0dXJuIHA7CisJcmV0dXJuIE5VTEw7Cit9CisKK29mZl90IGdldF9kZWx0YV9iYXNlKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkgICAgIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJICAgICBvZmZfdCAqY3VycG9zLAorCQkgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJICAgICBvZmZfdCBkZWx0YV9vYmpfb2Zmc2V0KQoreworCXVuc2lnbmVkIGNoYXIgKmJhc2VfaW5mbyA9IHVzZV9wYWNrKHAsIHdfY3VycywgKmN1cnBvcywgTlVMTCk7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7CisKKwkvKiB1c2VfcGFjaygpIGFzc3VyZWQgdXMgd2UgaGF2ZSBbYmFzZV9pbmZvLCBiYXNlX2luZm8gKyAyMCkKKwkgKiBhcyBhIHJhbmdlIHRoYXQgd2UgY2FuIGxvb2sgYXQgd2l0aG91dCB3YWxraW5nIG9mZiB0aGUKKwkgKiBlbmQgb2YgdGhlIG1hcHBlZCB3aW5kb3cuICBJdHMgYWN0dWFsbHkgdGhlIGhhc2ggc2l6ZQorCSAqIHRoYXQgaXMgYXNzdXJlZC4gIEFuIE9GU19ERUxUQSBsb25nZXIgdGhhbiB0aGUgaGFzaCBzaXplCisJICogaXMgc3R1cGlkLCBhcyB0aGVuIGEgUkVGX0RFTFRBIHdvdWxkIGJlIHNtYWxsZXIgdG8gc3RvcmUuCisJICovCisJaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSkgeworCQl1bnNpZ25lZCB1c2VkID0gMDsKKwkJdW5zaWduZWQgY2hhciBjID0gYmFzZV9pbmZvW3VzZWQrK107CisJCWJhc2Vfb2Zmc2V0ID0gYyAmIDEyNzsKKwkJd2hpbGUgKGMgJiAxMjgpIHsKKwkJCWJhc2Vfb2Zmc2V0ICs9IDE7CisJCQlpZiAoIWJhc2Vfb2Zmc2V0IHx8IE1TQihiYXNlX29mZnNldCwgNykpCisJCQkJcmV0dXJuIDA7ICAvKiBvdmVyZmxvdyAqLworCQkJYyA9IGJhc2VfaW5mb1t1c2VkKytdOworCQkJYmFzZV9vZmZzZXQgPSAoYmFzZV9vZmZzZXQgPDwgNykgKyAoYyAmIDEyNyk7CisJCX0KKwkJYmFzZV9vZmZzZXQgPSBkZWx0YV9vYmpfb2Zmc2V0IC0gYmFzZV9vZmZzZXQ7CisJCWlmIChiYXNlX29mZnNldCA8PSAwIHx8IGJhc2Vfb2Zmc2V0ID49IGRlbHRhX29ial9vZmZzZXQpCisJCQlyZXR1cm4gMDsgIC8qIG91dCBvZiBib3VuZCAqLworCQkqY3VycG9zICs9IHVzZWQ7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJLyogVGhlIGJhc2UgZW50cnkgX211c3RfIGJlIGluIHRoZSBzYW1lIHBhY2sgKi8KKwkJYmFzZV9vZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKGJhc2VfaW5mbywgcCk7CisJCSpjdXJwb3MgKz0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJfSBlbHNlCisJCWRpZSgiSSBhbSB0b3RhbGx5IHNjcmV3ZWQiKTsKKwlyZXR1cm4gYmFzZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBMaWtlIGdldF9kZWx0YV9iYXNlIGFib3ZlLCBidXQgd2UgcmV0dXJuIHRoZSBzaGExIGluc3RlYWQgb2YgdGhlIHBhY2sKKyAqIG9mZnNldC4gVGhpcyBtZWFucyBpdCBpcyBjaGVhcGVyIGZvciBSRUYgZGVsdGFzICh3ZSBkbyBub3QgaGF2ZSB0byBkbworICogdGhlIGZpbmFsIG9iamVjdCBsb29rdXApLCBidXQgbW9yZSBleHBlbnNpdmUgZm9yIE9GUyBkZWx0YXMgKHdlCisgKiBoYXZlIHRvIGxvYWQgdGhlIHJldmlkeCB0byBjb252ZXJ0IHRoZSBvZmZzZXQgYmFjayBpbnRvIGEgc2hhMSkuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2RlbHRhX2Jhc2Vfb2lkKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJICAgICAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJICAgICAgb2ZmX3QgY3VycG9zLAorCQkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICAgICAgb2ZmX3QgZGVsdGFfb2JqX29mZnNldCkKK3sKKwlpZiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCXVuc2lnbmVkIGNoYXIgKmJhc2UgPSB1c2VfcGFjayhwLCB3X2N1cnMsIGN1cnBvcywgTlVMTCk7CisJCW9pZHJlYWQob2lkLCBiYXNlKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9PRlNfREVMVEEpIHsKKwkJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHg7CisJCW9mZl90IGJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocCwgd19jdXJzLCAmY3VycG9zLAorCQkJCQkJICAgdHlwZSwgZGVsdGFfb2JqX29mZnNldCk7CisKKwkJaWYgKCFiYXNlX29mZnNldCkKKwkJCXJldHVybiAtMTsKKworCQlyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgYmFzZV9vZmZzZXQpOworCQlpZiAoIXJldmlkeCkKKwkJCXJldHVybiAtMTsKKworCQlyZXR1cm4gbnRoX3BhY2tlZF9vYmplY3RfaWQob2lkLCBwLCByZXZpZHgtPm5yKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHJldHJ5X2JhZF9wYWNrZWRfb2Zmc2V0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgIG9mZl90IG9ial9vZmZzZXQpCit7CisJaW50IHR5cGU7CisJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHg7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJcmV2aWR4ID0gZmluZF9wYWNrX3JldmluZGV4KHAsIG9ial9vZmZzZXQpOworCWlmICghcmV2aWR4KQorCQlyZXR1cm4gT0JKX0JBRDsKKwludGhfcGFja2VkX29iamVjdF9pZCgmb2lkLCBwLCByZXZpZHgtPm5yKTsKKwltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KHAsIG9pZC5oYXNoKTsKKwl0eXBlID0gb2lkX29iamVjdF9pbmZvKHIsICZvaWQsIE5VTEwpOworCWlmICh0eXBlIDw9IE9CSl9OT05FKQorCQlyZXR1cm4gT0JKX0JBRDsKKwlyZXR1cm4gdHlwZTsKK30KKworI2RlZmluZSBQT0lfU1RBQ0tfUFJFQUxMT0MgNjQKKworc3RhdGljIGVudW0gb2JqZWN0X3R5cGUgcGFja2VkX3RvX29iamVjdF90eXBlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkJICAgICAgb2ZmX3Qgb2JqX29mZnNldCwKKwkJCQkJICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJCQkgICAgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkJCSAgICAgIG9mZl90IGN1cnBvcykKK3sKKwlvZmZfdCBzbWFsbF9wb2lfc3RhY2tbUE9JX1NUQUNLX1BSRUFMTE9DXTsKKwlvZmZfdCAqcG9pX3N0YWNrID0gc21hbGxfcG9pX3N0YWNrOworCWludCBwb2lfc3RhY2tfbnIgPSAwLCBwb2lfc3RhY2tfYWxsb2MgPSBQT0lfU1RBQ0tfUFJFQUxMT0M7CisKKwl3aGlsZSAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBIHx8IHR5cGUgPT0gT0JKX1JFRl9ERUxUQSkgeworCQlvZmZfdCBiYXNlX29mZnNldDsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQkvKiBQdXNoIHRoZSBvYmplY3Qgd2UncmUgZ29pbmcgdG8gbGVhdmUgYmVoaW5kICovCisJCWlmIChwb2lfc3RhY2tfbnIgPj0gcG9pX3N0YWNrX2FsbG9jICYmIHBvaV9zdGFjayA9PSBzbWFsbF9wb2lfc3RhY2spIHsKKwkJCXBvaV9zdGFja19hbGxvYyA9IGFsbG9jX25yKHBvaV9zdGFja19ucik7CisJCQlBTExPQ19BUlJBWShwb2lfc3RhY2ssIHBvaV9zdGFja19hbGxvYyk7CisJCQlDT1BZX0FSUkFZKHBvaV9zdGFjaywgc21hbGxfcG9pX3N0YWNrLCBwb2lfc3RhY2tfbnIpOworCQl9IGVsc2UgeworCQkJQUxMT0NfR1JPVyhwb2lfc3RhY2ssIHBvaV9zdGFja19ucisxLCBwb2lfc3RhY2tfYWxsb2MpOworCQl9CisJCXBvaV9zdGFja1twb2lfc3RhY2tfbnIrK10gPSBvYmpfb2Zmc2V0OworCQkvKiBJZiBwYXJzaW5nIHRoZSBiYXNlIG9mZnNldCBmYWlscywganVzdCB1bndpbmQgKi8KKwkJYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShwLCB3X2N1cnMsICZjdXJwb3MsIHR5cGUsIG9ial9vZmZzZXQpOworCQlpZiAoIWJhc2Vfb2Zmc2V0KQorCQkJZ290byB1bndpbmQ7CisJCWN1cnBvcyA9IG9ial9vZmZzZXQgPSBiYXNlX29mZnNldDsKKwkJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsIHdfY3VycywgJmN1cnBvcywgJnNpemUpOworCQlpZiAodHlwZSA8PSBPQkpfTk9ORSkgeworCQkJLyogSWYgZ2V0dGluZyB0aGUgYmFzZSBpdHNlbGYgZmFpbHMsIHdlIGZpcnN0CisJCQkgKiByZXRyeSB0aGUgYmFzZSwgb3RoZXJ3aXNlIHVud2luZCAqLworCQkJdHlwZSA9IHJldHJ5X2JhZF9wYWNrZWRfb2Zmc2V0KHIsIHAsIGJhc2Vfb2Zmc2V0KTsKKwkJCWlmICh0eXBlID4gT0JKX05PTkUpCisJCQkJZ290byBvdXQ7CisJCQlnb3RvIHVud2luZDsKKwkJfQorCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX0JBRDoKKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3IoInVua25vd24gb2JqZWN0IHR5cGUgJWkgYXQgb2Zmc2V0ICUiUFJJdU1BWCIgaW4gJXMiLAorCQkgICAgICB0eXBlLCAodWludG1heF90KW9ial9vZmZzZXQsIHAtPnBhY2tfbmFtZSk7CisJCXR5cGUgPSBPQkpfQkFEOworCX0KKworb3V0OgorCWlmIChwb2lfc3RhY2sgIT0gc21hbGxfcG9pX3N0YWNrKQorCQlmcmVlKHBvaV9zdGFjayk7CisJcmV0dXJuIHR5cGU7CisKK3Vud2luZDoKKwl3aGlsZSAocG9pX3N0YWNrX25yKSB7CisJCW9ial9vZmZzZXQgPSBwb2lfc3RhY2tbLS1wb2lfc3RhY2tfbnJdOworCQl0eXBlID0gcmV0cnlfYmFkX3BhY2tlZF9vZmZzZXQociwgcCwgb2JqX29mZnNldCk7CisJCWlmICh0eXBlID4gT0JKX05PTkUpCisJCQlnb3RvIG91dDsKKwl9CisJdHlwZSA9IE9CSl9CQUQ7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCBkZWx0YV9iYXNlX2NhY2hlOworc3RhdGljIHNpemVfdCBkZWx0YV9iYXNlX2NhY2hlZDsKKworc3RhdGljIExJU1RfSEVBRChkZWx0YV9iYXNlX2NhY2hlX2xydSk7CisKK3N0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2tleSB7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2tleSBrZXk7CisJc3RydWN0IGxpc3RfaGVhZCBscnU7CisJdm9pZCAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX2VudHJ5X2hhc2goc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IGJhc2Vfb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCBoYXNoOworCisJaGFzaCA9ICh1bnNpZ25lZCBpbnQpKGludHB0cl90KXAgKyAodW5zaWduZWQgaW50KWJhc2Vfb2Zmc2V0OworCWhhc2ggKz0gKGhhc2ggPj4gOCkgKyAoaGFzaCA+PiAxNik7CisJcmV0dXJuIGhhc2g7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqCitnZXRfZGVsdGFfYmFzZV9jYWNoZV9lbnRyeShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3QgYmFzZV9vZmZzZXQpCit7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnksICplOworCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2tleSBrZXk7CisKKwlpZiAoIWRlbHRhX2Jhc2VfY2FjaGUuY21wZm4pCisJCXJldHVybiBOVUxMOworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeSwgcGFja19lbnRyeV9oYXNoKHAsIGJhc2Vfb2Zmc2V0KSk7CisJa2V5LnAgPSBwOworCWtleS5iYXNlX29mZnNldCA9IGJhc2Vfb2Zmc2V0OworCWUgPSBoYXNobWFwX2dldCgmZGVsdGFfYmFzZV9jYWNoZSwgJmVudHJ5LCAma2V5KTsKKwlyZXR1cm4gZSA/IGNvbnRhaW5lcl9vZihlLCBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSwgZW50KSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGVsdGFfYmFzZV9jYWNoZV9rZXlfZXEoY29uc3Qgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfa2V5ICphLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2tleSAqYikKK3sKKwlyZXR1cm4gYS0+cCA9PSBiLT5wICYmIGEtPmJhc2Vfb2Zmc2V0ID09IGItPmJhc2Vfb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGRlbHRhX2Jhc2VfY2FjaGVfaGFzaF9jbXAoY29uc3Qgdm9pZCAqdW51c2VkX2NtcF9kYXRhLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKnZhLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKnZiLAorCQkJCSAgICAgY29uc3Qgdm9pZCAqdmtleSkKK3sKKwljb25zdCBzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqYSwgKmI7CisJY29uc3Qgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfa2V5ICprZXkgPSB2a2V5OworCisJYSA9IGNvbnRhaW5lcl9vZih2YSwgY29uc3Qgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnksIGVudCk7CisJYiA9IGNvbnRhaW5lcl9vZih2YiwgY29uc3Qgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnksIGVudCk7CisKKwlpZiAoa2V5KQorCQlyZXR1cm4gIWRlbHRhX2Jhc2VfY2FjaGVfa2V5X2VxKCZhLT5rZXksIGtleSk7CisJZWxzZQorCQlyZXR1cm4gIWRlbHRhX2Jhc2VfY2FjaGVfa2V5X2VxKCZhLT5rZXksICZiLT5rZXkpOworfQorCitzdGF0aWMgaW50IGluX2RlbHRhX2Jhc2VfY2FjaGUoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IGJhc2Vfb2Zmc2V0KQoreworCXJldHVybiAhIWdldF9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KHAsIGJhc2Vfb2Zmc2V0KTsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgY2FjaGUsIGJ1dCBkbyBfbm90XyBmcmVlIHRoZSBhc3NvY2lhdGVkCisgKiBlbnRyeSBkYXRhLiBUaGUgY2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgImRhdGEiIGJ1ZmZlciwgYW5kCisgKiBzaG91bGQgY29weSBvdXQgYW55IGZpZWxkcyBpdCB3YW50cyBiZWZvcmUgZGV0YWNoaW5nLgorICovCitzdGF0aWMgdm9pZCBkZXRhY2hfZGVsdGFfYmFzZV9jYWNoZV9lbnRyeShzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50KQoreworCWhhc2htYXBfcmVtb3ZlKCZkZWx0YV9iYXNlX2NhY2hlLCAmZW50LT5lbnQsICZlbnQtPmtleSk7CisJbGlzdF9kZWwoJmVudC0+bHJ1KTsKKwlkZWx0YV9iYXNlX2NhY2hlZCAtPSBlbnQtPnNpemU7CisJZnJlZShlbnQpOworfQorCitzdGF0aWMgdm9pZCAqY2FjaGVfb3JfdW5wYWNrX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkgICBvZmZfdCBiYXNlX29mZnNldCwgdW5zaWduZWQgbG9uZyAqYmFzZV9zaXplLAorCQkJCSAgIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUpCit7CisJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmVudDsKKworCWVudCA9IGdldF9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KHAsIGJhc2Vfb2Zmc2V0KTsKKwlpZiAoIWVudCkKKwkJcmV0dXJuIHVucGFja19lbnRyeShyLCBwLCBiYXNlX29mZnNldCwgdHlwZSwgYmFzZV9zaXplKTsKKworCWlmICh0eXBlKQorCQkqdHlwZSA9IGVudC0+dHlwZTsKKwlpZiAoYmFzZV9zaXplKQorCQkqYmFzZV9zaXplID0gZW50LT5zaXplOworCXJldHVybiB4bWVtZHVweihlbnQtPmRhdGEsIGVudC0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2RlbHRhX2Jhc2VfY2FjaGUoc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmVudCkKK3sKKwlmcmVlKGVudC0+ZGF0YSk7CisJZGV0YWNoX2RlbHRhX2Jhc2VfY2FjaGVfZW50cnkoZW50KTsKK30KKwordm9pZCBjbGVhcl9kZWx0YV9iYXNlX2NhY2hlKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbHJ1LCAqdG1wOworCWxpc3RfZm9yX2VhY2hfc2FmZShscnUsIHRtcCwgJmRlbHRhX2Jhc2VfY2FjaGVfbHJ1KSB7CisJCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICplbnRyeSA9CisJCQlsaXN0X2VudHJ5KGxydSwgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnksIGxydSk7CisJCXJlbGVhc2VfZGVsdGFfYmFzZV9jYWNoZShlbnRyeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfZGVsdGFfYmFzZV9jYWNoZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3QgYmFzZV9vZmZzZXQsCisJdm9pZCAqYmFzZSwgdW5zaWduZWQgbG9uZyBiYXNlX3NpemUsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50ID0geG1hbGxvYyhzaXplb2YoKmVudCkpOworCXN0cnVjdCBsaXN0X2hlYWQgKmxydSwgKnRtcDsKKworCS8qCisJICogQ2hlY2sgcmVxdWlyZWQgdG8gYXZvaWQgcmVkdW5kYW50IGVudHJpZXMgd2hlbiBtb3JlIHRoYW4gb25lIHRocmVhZAorCSAqIGlzIHVucGFja2luZyB0aGUgc2FtZSBvYmplY3QsIGluIHVucGFja19lbnRyeSgpIChzaW5jZSBpdHMgcGhhc2VzIEkKKwkgKiBhbmQgSUlJIG1pZ2h0IHJ1biBjb25jdXJyZW50bHkgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMpLgorCSAqLworCWlmIChpbl9kZWx0YV9iYXNlX2NhY2hlKHAsIGJhc2Vfb2Zmc2V0KSkKKwkJcmV0dXJuOworCisJZGVsdGFfYmFzZV9jYWNoZWQgKz0gYmFzZV9zaXplOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxydSwgdG1wLCAmZGVsdGFfYmFzZV9jYWNoZV9scnUpIHsKKwkJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmYgPQorCQkJbGlzdF9lbnRyeShscnUsIHN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5LCBscnUpOworCQlpZiAoZGVsdGFfYmFzZV9jYWNoZWQgPD0gZGVsdGFfYmFzZV9jYWNoZV9saW1pdCkKKwkJCWJyZWFrOworCQlyZWxlYXNlX2RlbHRhX2Jhc2VfY2FjaGUoZik7CisJfQorCisJZW50LT5rZXkucCA9IHA7CisJZW50LT5rZXkuYmFzZV9vZmZzZXQgPSBiYXNlX29mZnNldDsKKwllbnQtPnR5cGUgPSB0eXBlOworCWVudC0+ZGF0YSA9IGJhc2U7CisJZW50LT5zaXplID0gYmFzZV9zaXplOworCWxpc3RfYWRkX3RhaWwoJmVudC0+bHJ1LCAmZGVsdGFfYmFzZV9jYWNoZV9scnUpOworCisJaWYgKCFkZWx0YV9iYXNlX2NhY2hlLmNtcGZuKQorCQloYXNobWFwX2luaXQoJmRlbHRhX2Jhc2VfY2FjaGUsIGRlbHRhX2Jhc2VfY2FjaGVfaGFzaF9jbXAsIE5VTEwsIDApOworCWhhc2htYXBfZW50cnlfaW5pdCgmZW50LT5lbnQsIHBhY2tfZW50cnlfaGFzaChwLCBiYXNlX29mZnNldCkpOworCWhhc2htYXBfYWRkKCZkZWx0YV9iYXNlX2NhY2hlLCAmZW50LT5lbnQpOworfQorCitpbnQgcGFja2VkX29iamVjdF9pbmZvKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJICAgICAgIG9mZl90IG9ial9vZmZzZXQsIHN0cnVjdCBvYmplY3RfaW5mbyAqb2kpCit7CisJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlvZmZfdCBjdXJwb3MgPSBvYmpfb2Zmc2V0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCS8qCisJICogV2UgYWx3YXlzIGdldCB0aGUgcmVwcmVzZW50YXRpb24gdHlwZSwgYnV0IG9ubHkgY29udmVydCBpdCB0bworCSAqIGEgInJlYWwiIHR5cGUgbGF0ZXIgaWYgdGhlIGNhbGxlciBpcyBpbnRlcmVzdGVkLgorCSAqLworCWlmIChvaS0+Y29udGVudHApIHsKKwkJKm9pLT5jb250ZW50cCA9IGNhY2hlX29yX3VucGFja19lbnRyeShyLCBwLCBvYmpfb2Zmc2V0LCBvaS0+c2l6ZXAsCisJCQkJCQkgICAgICAmdHlwZSk7CisJCWlmICghKm9pLT5jb250ZW50cCkKKwkJCXR5cGUgPSBPQkpfQkFEOworCX0gZWxzZSB7CisJCXR5cGUgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcihwLCAmd19jdXJzLCAmY3VycG9zLCAmc2l6ZSk7CisJfQorCisJaWYgKCFvaS0+Y29udGVudHAgJiYgb2ktPnNpemVwKSB7CisJCWlmICh0eXBlID09IE9CSl9PRlNfREVMVEEgfHwgdHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCQlvZmZfdCB0bXBfcG9zID0gY3VycG9zOworCQkJb2ZmX3QgYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShwLCAmd19jdXJzLCAmdG1wX3BvcywKKwkJCQkJCQkgICB0eXBlLCBvYmpfb2Zmc2V0KTsKKwkJCWlmICghYmFzZV9vZmZzZXQpIHsKKwkJCQl0eXBlID0gT0JKX0JBRDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCSpvaS0+c2l6ZXAgPSBnZXRfc2l6ZV9mcm9tX2RlbHRhKHAsICZ3X2N1cnMsIHRtcF9wb3MpOworCQkJaWYgKCpvaS0+c2l6ZXAgPT0gMCkgeworCQkJCXR5cGUgPSBPQkpfQkFEOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJKm9pLT5zaXplcCA9IHNpemU7CisJCX0KKwl9CisKKwlpZiAob2ktPmRpc2tfc2l6ZXApIHsKKwkJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgb2JqX29mZnNldCk7CisJCSpvaS0+ZGlza19zaXplcCA9IHJldmlkeFsxXS5vZmZzZXQgLSBvYmpfb2Zmc2V0OworCX0KKworCWlmIChvaS0+dHlwZXAgfHwgb2ktPnR5cGVfbmFtZSkgeworCQllbnVtIG9iamVjdF90eXBlIHB0b3Q7CisJCXB0b3QgPSBwYWNrZWRfdG9fb2JqZWN0X3R5cGUociwgcCwgb2JqX29mZnNldCwKKwkJCQkJICAgICB0eXBlLCAmd19jdXJzLCBjdXJwb3MpOworCQlpZiAob2ktPnR5cGVwKQorCQkJKm9pLT50eXBlcCA9IHB0b3Q7CisJCWlmIChvaS0+dHlwZV9uYW1lKSB7CisJCQljb25zdCBjaGFyICp0biA9IHR5cGVfbmFtZShwdG90KTsKKwkJCWlmICh0bikKKwkJCQlzdHJidWZfYWRkc3RyKG9pLT50eXBlX25hbWUsIHRuKTsKKwkJfQorCQlpZiAocHRvdCA8IDApIHsKKwkJCXR5cGUgPSBPQkpfQkFEOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAob2ktPmRlbHRhX2Jhc2Vfb2lkKSB7CisJCWlmICh0eXBlID09IE9CSl9PRlNfREVMVEEgfHwgdHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCQlpZiAoZ2V0X2RlbHRhX2Jhc2Vfb2lkKHAsICZ3X2N1cnMsIGN1cnBvcywKKwkJCQkJICAgICAgIG9pLT5kZWx0YV9iYXNlX29pZCwKKwkJCQkJICAgICAgIHR5cGUsIG9ial9vZmZzZXQpIDwgMCkgeworCQkJCXR5cGUgPSBPQkpfQkFEOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UKKwkJCW9pZGNscihvaS0+ZGVsdGFfYmFzZV9vaWQpOworCX0KKworCW9pLT53aGVuY2UgPSBpbl9kZWx0YV9iYXNlX2NhY2hlKHAsIG9ial9vZmZzZXQpID8gT0lfREJDQUNIRUQgOgorCQkJCQkJCSAgT0lfUEFDS0VEOworCitvdXQ6CisJdW51c2VfcGFjaygmd19jdXJzKTsKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19jb21wcmVzc2VkX2VudHJ5KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkJICAgIG9mZl90IGN1cnBvcywKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBzdDsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqaW47CisKKwlidWZmZXIgPSB4bWFsbG9jel9nZW50bHkoc2l6ZSk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiBOVUxMOworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisJc3RyZWFtLm5leHRfb3V0ID0gYnVmZmVyOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplICsgMTsKKworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJZG8geworCQlpbiA9IHVzZV9wYWNrKHAsIHdfY3VycywgY3VycG9zLCAmc3RyZWFtLmF2YWlsX2luKTsKKwkJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwkJLyoKKwkJICogTm90ZTogd2UgbXVzdCBlbnN1cmUgdGhlIHdpbmRvdyBzZWN0aW9uIHJldHVybmVkIGJ5CisJCSAqIHVzZV9wYWNrKCkgd2lsbCBiZSBhdmFpbGFibGUgdGhyb3VnaG91dCBnaXRfaW5mbGF0ZSgpJ3MKKwkJICogdW5sb2NrZWQgZXhlY3V0aW9uLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGNvbW1lbnQgYXQKKwkJICogZ2V0X3NpemVfZnJvbV9kZWx0YSgpIHRvIHNlZSBob3cgdGhpcyBpcyBkb25lLgorCQkgKi8KKwkJb2JqX3JlYWRfdW5sb2NrKCk7CisJCXN0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCQlvYmpfcmVhZF9sb2NrKCk7CisJCWlmICghc3RyZWFtLmF2YWlsX291dCkKKwkJCWJyZWFrOyAvKiB0aGUgcGF5bG9hZCBpcyBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUgKi8KKwkJY3VycG9zICs9IHN0cmVhbS5uZXh0X2luIC0gaW47CisJfSB3aGlsZSAoc3QgPT0gWl9PSyB8fCBzdCA9PSBaX0JVRl9FUlJPUik7CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWlmICgoc3QgIT0gWl9TVFJFQU1fRU5EKSB8fCBzdHJlYW0udG90YWxfb3V0ICE9IHNpemUpIHsKKwkJZnJlZShidWZmZXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiB2ZXJzaW9ucyBvZiB6bGliIGNhbiBjbG9iYmVyIHVuY29uc3VtZWQgcG9ydGlvbiBvZiBvdXRidWYgKi8KKwlidWZmZXJbc2l6ZV0gPSAnXDAnOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcGFja19hY2Nlc3NfbG9nKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvYmpfb2Zmc2V0KQoreworCXN0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHBhY2tfYWNjZXNzID0gVFJBQ0VfS0VZX0lOSVQoUEFDS19BQ0NFU1MpOworCXRyYWNlX3ByaW50Zl9rZXkoJnBhY2tfYWNjZXNzLCAiJXMgJSJQUkl1TUFYIlxuIiwKKwkJCSBwLT5wYWNrX25hbWUsICh1aW50bWF4X3Qpb2JqX29mZnNldCk7Cit9CisKK2ludCBkb19jaGVja19wYWNrZWRfb2JqZWN0X2NyYzsKKworI2RlZmluZSBVTlBBQ0tfRU5UUllfU1RBQ0tfUFJFQUxMT0MgNjQKK3N0cnVjdCB1bnBhY2tfZW50cnlfc3RhY2tfZW50IHsKKwlvZmZfdCBvYmpfb2Zmc2V0OworCW9mZl90IGN1cnBvczsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCitzdGF0aWMgdm9pZCAqcmVhZF9vYmplY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gb2kgPSBPQkpFQ1RfSU5GT19JTklUOworCXZvaWQgKmNvbnRlbnQ7CisJb2kudHlwZXAgPSB0eXBlOworCW9pLnNpemVwID0gc2l6ZTsKKwlvaS5jb250ZW50cCA9ICZjb250ZW50OworCisJaWYgKG9pZF9vYmplY3RfaW5mb19leHRlbmRlZChyLCBvaWQsICZvaSwgMCkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY29udGVudDsKK30KKwordm9pZCAqdW5wYWNrX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2JqX29mZnNldCwKKwkJICAgZW51bSBvYmplY3RfdHlwZSAqZmluYWxfdHlwZSwgdW5zaWduZWQgbG9uZyAqZmluYWxfc2l6ZSkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisJb2ZmX3QgY3VycG9zID0gb2JqX29mZnNldDsKKwl2b2lkICpkYXRhID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCB1bnBhY2tfZW50cnlfc3RhY2tfZW50IHNtYWxsX2RlbHRhX3N0YWNrW1VOUEFDS19FTlRSWV9TVEFDS19QUkVBTExPQ107CisJc3RydWN0IHVucGFja19lbnRyeV9zdGFja19lbnQgKmRlbHRhX3N0YWNrID0gc21hbGxfZGVsdGFfc3RhY2s7CisJaW50IGRlbHRhX3N0YWNrX25yID0gMCwgZGVsdGFfc3RhY2tfYWxsb2MgPSBVTlBBQ0tfRU5UUllfU1RBQ0tfUFJFQUxMT0M7CisJaW50IGJhc2VfZnJvbV9jYWNoZSA9IDA7CisKKwl3cml0ZV9wYWNrX2FjY2Vzc19sb2cocCwgb2JqX29mZnNldCk7CisKKwkvKiBQSEFTRSAxOiBkcmlsbCBkb3duIHRvIHRoZSBpbm5lcm1vc3QgYmFzZSBvYmplY3QgKi8KKwlmb3IgKDs7KSB7CisJCW9mZl90IGJhc2Vfb2Zmc2V0OworCQlpbnQgaTsKKwkJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmVudDsKKworCQllbnQgPSBnZXRfZGVsdGFfYmFzZV9jYWNoZV9lbnRyeShwLCBjdXJwb3MpOworCQlpZiAoZW50KSB7CisJCQl0eXBlID0gZW50LT50eXBlOworCQkJZGF0YSA9IGVudC0+ZGF0YTsKKwkJCXNpemUgPSBlbnQtPnNpemU7CisJCQlkZXRhY2hfZGVsdGFfYmFzZV9jYWNoZV9lbnRyeShlbnQpOworCQkJYmFzZV9mcm9tX2NhY2hlID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGRvX2NoZWNrX3BhY2tlZF9vYmplY3RfY3JjICYmIHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvYmpfb2Zmc2V0KTsKKwkJCW9mZl90IGxlbiA9IHJldmlkeFsxXS5vZmZzZXQgLSBvYmpfb2Zmc2V0OworCQkJaWYgKGNoZWNrX3BhY2tfY3JjKHAsICZ3X2N1cnMsIG9ial9vZmZzZXQsIGxlbiwgcmV2aWR4LT5ucikpIHsKKwkJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJCQludGhfcGFja2VkX29iamVjdF9pZCgmb2lkLCBwLCByZXZpZHgtPm5yKTsKKwkJCQllcnJvcigiYmFkIHBhY2tlZCBvYmplY3QgQ1JDIGZvciAlcyIsCisJCQkJICAgICAgb2lkX3RvX2hleCgmb2lkKSk7CisJCQkJbWFya19iYWRfcGFja2VkX29iamVjdChwLCBvaWQuaGFzaCk7CisJCQkJZGF0YSA9IE5VTEw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQl0eXBlID0gdW5wYWNrX29iamVjdF9oZWFkZXIocCwgJndfY3VycywgJmN1cnBvcywgJnNpemUpOworCQlpZiAodHlwZSAhPSBPQkpfT0ZTX0RFTFRBICYmIHR5cGUgIT0gT0JKX1JFRl9ERUxUQSkKKwkJCWJyZWFrOworCisJCWJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocCwgJndfY3VycywgJmN1cnBvcywgdHlwZSwgb2JqX29mZnNldCk7CisJCWlmICghYmFzZV9vZmZzZXQpIHsKKwkJCWVycm9yKCJmYWlsZWQgdG8gdmFsaWRhdGUgZGVsdGEgYmFzZSByZWZlcmVuY2UgIgorCQkJICAgICAgImF0IG9mZnNldCAlIlBSSXVNQVgiIGZyb20gJXMiLAorCQkJICAgICAgKHVpbnRtYXhfdCljdXJwb3MsIHAtPnBhY2tfbmFtZSk7CisJCQkvKiBiYWlsIHRvIHBoYXNlIDIsIGluIGhvcGVzIG9mIHJlY292ZXJ5ICovCisJCQlkYXRhID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogcHVzaCBvYmplY3QsIHByb2NlZWQgdG8gYmFzZSAqLworCQlpZiAoZGVsdGFfc3RhY2tfbnIgPj0gZGVsdGFfc3RhY2tfYWxsb2MKKwkJICAgICYmIGRlbHRhX3N0YWNrID09IHNtYWxsX2RlbHRhX3N0YWNrKSB7CisJCQlkZWx0YV9zdGFja19hbGxvYyA9IGFsbG9jX25yKGRlbHRhX3N0YWNrX25yKTsKKwkJCUFMTE9DX0FSUkFZKGRlbHRhX3N0YWNrLCBkZWx0YV9zdGFja19hbGxvYyk7CisJCQlDT1BZX0FSUkFZKGRlbHRhX3N0YWNrLCBzbWFsbF9kZWx0YV9zdGFjaywKKwkJCQkgICBkZWx0YV9zdGFja19ucik7CisJCX0gZWxzZSB7CisJCQlBTExPQ19HUk9XKGRlbHRhX3N0YWNrLCBkZWx0YV9zdGFja19ucisxLCBkZWx0YV9zdGFja19hbGxvYyk7CisJCX0KKwkJaSA9IGRlbHRhX3N0YWNrX25yKys7CisJCWRlbHRhX3N0YWNrW2ldLm9ial9vZmZzZXQgPSBvYmpfb2Zmc2V0OworCQlkZWx0YV9zdGFja1tpXS5jdXJwb3MgPSBjdXJwb3M7CisJCWRlbHRhX3N0YWNrW2ldLnNpemUgPSBzaXplOworCisJCWN1cnBvcyA9IG9ial9vZmZzZXQgPSBiYXNlX29mZnNldDsKKwl9CisKKwkvKiBQSEFTRSAyOiBoYW5kbGUgdGhlIGJhc2UgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9PRlNfREVMVEE6CisJY2FzZSBPQkpfUkVGX0RFTFRBOgorCQlpZiAoZGF0YSkKKwkJCUJVRygidW5wYWNrX2VudHJ5OiBsZWZ0IGxvb3AgYXQgYSB2YWxpZCBkZWx0YSIpOworCQlicmVhazsKKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJaWYgKCFiYXNlX2Zyb21fY2FjaGUpCisJCQlkYXRhID0gdW5wYWNrX2NvbXByZXNzZWRfZW50cnkocCwgJndfY3VycywgY3VycG9zLCBzaXplKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YSA9IE5VTEw7CisJCWVycm9yKCJ1bmtub3duIG9iamVjdCB0eXBlICVpIGF0IG9mZnNldCAlIlBSSXVNQVgiIGluICVzIiwKKwkJICAgICAgdHlwZSwgKHVpbnRtYXhfdClvYmpfb2Zmc2V0LCBwLT5wYWNrX25hbWUpOworCX0KKworCS8qIFBIQVNFIDM6IGFwcGx5IGRlbHRhcyBpbiBvcmRlciAqLworCisJLyogaW52YXJpYW50czoKKwkgKiAgICdkYXRhJyBob2xkcyB0aGUgYmFzZSBkYXRhLCBvciBOVUxMIGlmIHRoZXJlIHdhcyBjb3JydXB0aW9uCisJICovCisJd2hpbGUgKGRlbHRhX3N0YWNrX25yKSB7CisJCXZvaWQgKmRlbHRhX2RhdGE7CisJCXZvaWQgKmJhc2UgPSBkYXRhOworCQl2b2lkICpleHRlcm5hbF9iYXNlID0gTlVMTDsKKwkJdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplLCBiYXNlX3NpemUgPSBzaXplOworCQlpbnQgaTsKKworCQlkYXRhID0gTlVMTDsKKworCQlpZiAoYmFzZSkKKwkJCWFkZF9kZWx0YV9iYXNlX2NhY2hlKHAsIG9ial9vZmZzZXQsIGJhc2UsIGJhc2Vfc2l6ZSwgdHlwZSk7CisKKwkJaWYgKCFiYXNlKSB7CisJCQkvKgorCQkJICogV2UncmUgcHJvYmFibHkgaW4gZGVlcCBzaGl0LCBidXQgbGV0J3MgdHJ5IHRvIGZldGNoCisJCQkgKiB0aGUgcmVxdWlyZWQgYmFzZSBhbnl3YXkgZnJvbSBhbm90aGVyIHBhY2sgb3IgbG9vc2UuCisJCQkgKiBUaGlzIGlzIGNvc3RseSBidXQgc2hvdWxkIGhhcHBlbiBvbmx5IGluIHRoZSBwcmVzZW5jZQorCQkJICogb2YgYSBjb3JydXB0ZWQgcGFjaywgYW5kIGlzIGJldHRlciB0aGFuIGZhaWxpbmcgb3V0cmlnaHQuCisJCQkgKi8KKwkJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aWR4OworCQkJc3RydWN0IG9iamVjdF9pZCBiYXNlX29pZDsKKwkJCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvYmpfb2Zmc2V0KTsKKwkJCWlmIChyZXZpZHgpIHsKKwkJCQludGhfcGFja2VkX29iamVjdF9pZCgmYmFzZV9vaWQsIHAsIHJldmlkeC0+bnIpOworCQkJCWVycm9yKCJmYWlsZWQgdG8gcmVhZCBkZWx0YSBiYXNlIG9iamVjdCAlcyIKKwkJCQkgICAgICAiIGF0IG9mZnNldCAlIlBSSXVNQVgiIGZyb20gJXMiLAorCQkJCSAgICAgIG9pZF90b19oZXgoJmJhc2Vfb2lkKSwgKHVpbnRtYXhfdClvYmpfb2Zmc2V0LAorCQkJCSAgICAgIHAtPnBhY2tfbmFtZSk7CisJCQkJbWFya19iYWRfcGFja2VkX29iamVjdChwLCBiYXNlX29pZC5oYXNoKTsKKwkJCQliYXNlID0gcmVhZF9vYmplY3QociwgJmJhc2Vfb2lkLCAmdHlwZSwgJmJhc2Vfc2l6ZSk7CisJCQkJZXh0ZXJuYWxfYmFzZSA9IGJhc2U7CisJCQl9CisJCX0KKworCQlpID0gLS1kZWx0YV9zdGFja19ucjsKKwkJb2JqX29mZnNldCA9IGRlbHRhX3N0YWNrW2ldLm9ial9vZmZzZXQ7CisJCWN1cnBvcyA9IGRlbHRhX3N0YWNrW2ldLmN1cnBvczsKKwkJZGVsdGFfc2l6ZSA9IGRlbHRhX3N0YWNrW2ldLnNpemU7CisKKwkJaWYgKCFiYXNlKQorCQkJY29udGludWU7CisKKwkJZGVsdGFfZGF0YSA9IHVucGFja19jb21wcmVzc2VkX2VudHJ5KHAsICZ3X2N1cnMsIGN1cnBvcywgZGVsdGFfc2l6ZSk7CisKKwkJaWYgKCFkZWx0YV9kYXRhKSB7CisJCQllcnJvcigiZmFpbGVkIHRvIHVucGFjayBjb21wcmVzc2VkIGRlbHRhICIKKwkJCSAgICAgICJhdCBvZmZzZXQgJSJQUkl1TUFYIiBmcm9tICVzIiwKKwkJCSAgICAgICh1aW50bWF4X3QpY3VycG9zLCBwLT5wYWNrX25hbWUpOworCQkJZGF0YSA9IE5VTEw7CisJCQlmcmVlKGV4dGVybmFsX2Jhc2UpOworCQkJY29udGludWU7CisJCX0KKworCQlkYXRhID0gcGF0Y2hfZGVsdGEoYmFzZSwgYmFzZV9zaXplLAorCQkJCSAgIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUsCisJCQkJICAgJnNpemUpOworCisJCS8qCisJCSAqIFdlIGNvdWxkIG5vdCBhcHBseSB0aGUgZGVsdGE7IHdhcm4gdGhlIHVzZXIsIGJ1dCBrZWVwIGdvaW5nLgorCQkgKiBPdXIgZmFpbHVyZSB3aWxsIGJlIG5vdGljZWQgZWl0aGVyIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZgorCQkgKiB0aGUgbG9vcCwgb3IgaWYgdGhpcyBpcyB0aGUgZmluYWwgZGVsdGEsIGluIHRoZSBjYWxsZXIgd2hlbgorCQkgKiB3ZSByZXR1cm4gTlVMTC4gVGhvc2UgY29kZSBwYXRocyB3aWxsIHRha2UgY2FyZSBvZiBtYWtpbmcKKwkJICogYSBtb3JlIGV4cGxpY2l0IHdhcm5pbmcgYW5kIHJldHJ5aW5nIHdpdGggYW5vdGhlciBjb3B5IG9mCisJCSAqIHRoZSBvYmplY3QuCisJCSAqLworCQlpZiAoIWRhdGEpCisJCQllcnJvcigiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIik7CisKKwkJZnJlZShkZWx0YV9kYXRhKTsKKwkJZnJlZShleHRlcm5hbF9iYXNlKTsKKwl9CisKKwlpZiAoZmluYWxfdHlwZSkKKwkJKmZpbmFsX3R5cGUgPSB0eXBlOworCWlmIChmaW5hbF9zaXplKQorCQkqZmluYWxfc2l6ZSA9IHNpemU7CisKK291dDoKKwl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCisJaWYgKGRlbHRhX3N0YWNrICE9IHNtYWxsX2RlbHRhX3N0YWNrKQorCQlmcmVlKGRlbHRhX3N0YWNrKTsKKworCXJldHVybiBkYXRhOworfQorCitpbnQgYnNlYXJjaF9wYWNrKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnAsIHVpbnQzMl90ICpyZXN1bHQpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXhfZmFub3V0ID0gcC0+aW5kZXhfZGF0YTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9sb29rdXA7CisJY29uc3QgdW5zaWduZWQgaW50IGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCWludCBpbmRleF9sb29rdXBfd2lkdGg7CisKKwlpZiAoIWluZGV4X2Zhbm91dCkKKwkJQlVHKCJic2VhcmNoX3BhY2sgY2FsbGVkIHdpdGhvdXQgYSB2YWxpZCBwYWNrLWluZGV4Iik7CisKKwlpbmRleF9sb29rdXAgPSBpbmRleF9mYW5vdXQgKyA0ICogMjU2OworCWlmIChwLT5pbmRleF92ZXJzaW9uID09IDEpIHsKKwkJaW5kZXhfbG9va3VwX3dpZHRoID0gaGFzaHN6ICsgNDsKKwkJaW5kZXhfbG9va3VwICs9IDQ7CisJfSBlbHNlIHsKKwkJaW5kZXhfbG9va3VwX3dpZHRoID0gaGFzaHN6OworCQlpbmRleF9mYW5vdXQgKz0gODsKKwkJaW5kZXhfbG9va3VwICs9IDg7CisJfQorCisJcmV0dXJuIGJzZWFyY2hfaGFzaChvaWQtPmhhc2gsIChjb25zdCB1aW50MzJfdCopaW5kZXhfZmFub3V0LAorCQkJICAgIGluZGV4X2xvb2t1cCwgaW5kZXhfbG9va3VwX3dpZHRoLCByZXN1bHQpOworfQorCitpbnQgbnRoX3BhY2tlZF9vYmplY3RfaWQoc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJIHVpbnQzMl90IG4pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXggPSBwLT5pbmRleF9kYXRhOworCWNvbnN0IHVuc2lnbmVkIGludCBoYXNoc3ogPSB0aGVfaGFzaF9hbGdvLT5yYXdzejsKKwlpZiAoIWluZGV4KSB7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQlyZXR1cm4gLTE7CisJCWluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKwl9CisJaWYgKG4gPj0gcC0+bnVtX29iamVjdHMpCisJCXJldHVybiAtMTsKKwlpbmRleCArPSA0ICogMjU2OworCWlmIChwLT5pbmRleF92ZXJzaW9uID09IDEpIHsKKwkJb2lkcmVhZChvaWQsIGluZGV4ICsgKGhhc2hzeiArIDQpICogbiArIDQpOworCX0gZWxzZSB7CisJCWluZGV4ICs9IDg7CisJCW9pZHJlYWQob2lkLCBpbmRleCArIGhhc2hzeiAqIG4pOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBjaGVja19wYWNrX2luZGV4X3B0cihjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgY29uc3Qgdm9pZCAqdnB0cikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwdHIgPSB2cHRyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXJ0ID0gcC0+aW5kZXhfZGF0YTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBzdGFydCArIHAtPmluZGV4X3NpemU7CisJaWYgKHB0ciA8IHN0YXJ0KQorCQlkaWUoXygib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIiksCisJCSAgICBwLT5wYWNrX25hbWUpOworCS8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHVuZGVyZmxvdzsgLmlkeCBmaWxlcyBtdXN0IGJlIGF0IGxlYXN0IDggYnl0ZXMgKi8KKwlpZiAocHRyID49IGVuZCAtIDgpCisJCWRpZShfKCJvZmZzZXQgYmV5b25kIGVuZCBvZiBwYWNrIGluZGV4IGZvciAlcyAodHJ1bmNhdGVkIGluZGV4PykiKSwKKwkJICAgIHAtPnBhY2tfbmFtZSk7Cit9CisKK29mZl90IG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgdWludDMyX3QgbikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CisJY29uc3QgdW5zaWduZWQgaW50IGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCWluZGV4ICs9IDQgKiAyNTY7CisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPT0gMSkgeworCQlyZXR1cm4gbnRvaGwoKigodWludDMyX3QgKikoaW5kZXggKyAoaGFzaHN6ICsgNCkgKiBuKSkpOworCX0gZWxzZSB7CisJCXVpbnQzMl90IG9mZjsKKwkJaW5kZXggKz0gOCArIHAtPm51bV9vYmplY3RzICogKGhhc2hzeiArIDQpOworCQlvZmYgPSBudG9obCgqKCh1aW50MzJfdCAqKShpbmRleCArIDQgKiBuKSkpOworCQlpZiAoIShvZmYgJiAweDgwMDAwMDAwKSkKKwkJCXJldHVybiBvZmY7CisJCWluZGV4ICs9IHAtPm51bV9vYmplY3RzICogNCArIChvZmYgJiAweDdmZmZmZmZmKSAqIDg7CisJCWNoZWNrX3BhY2tfaW5kZXhfcHRyKHAsIGluZGV4KTsKKwkJcmV0dXJuIGdldF9iZTY0KGluZGV4KTsKKwl9Cit9CisKK29mZl90IGZpbmRfcGFja19lbnRyeV9vbmUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl1aW50MzJfdCByZXN1bHQ7CisKKwlpZiAoIWluZGV4KSB7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwloYXNoY3B5KG9pZC5oYXNoLCBzaGExKTsKKwlpZiAoYnNlYXJjaF9wYWNrKCZvaWQsIHAsICZyZXN1bHQpKQorCQlyZXR1cm4gbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KHAsIHJlc3VsdCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpc19wYWNrX3ZhbGlkKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCS8qIEFuIGFscmVhZHkgb3BlbiBwYWNrIGlzIGtub3duIHRvIGJlIHZhbGlkLiAqLworCWlmIChwLT5wYWNrX2ZkICE9IC0xKQorCQlyZXR1cm4gMTsKKworCS8qIElmIHRoZSBwYWNrIGhhcyBvbmUgd2luZG93IGNvbXBsZXRlbHkgY292ZXJpbmcgdGhlCisJICogZmlsZSBzaXplLCB0aGUgcGFjayBpcyBrbm93biB0byBiZSB2YWxpZCBldmVuIGlmCisJICogdGhlIGRlc2NyaXB0b3IgaXMgbm90IGN1cnJlbnRseSBvcGVuLgorCSAqLworCWlmIChwLT53aW5kb3dzKSB7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqdyA9IHAtPndpbmRvd3M7CisKKwkJaWYgKCF3LT5vZmZzZXQgJiYgdy0+bGVuID09IHAtPnBhY2tfc2l6ZSkKKwkJCXJldHVybiAxOworCX0KKworCS8qIEZvcmNlIHRoZSBwYWNrIHRvIG9wZW4gdG8gcHJvdmUgaXRzIHZhbGlkLiAqLworCXJldHVybiAhb3Blbl9wYWNrZWRfZ2l0KHApOworfQorCitzdHJ1Y3QgcGFja2VkX2dpdCAqZmluZF9zaGExX3BhY2soY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrcykKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCWZvciAocCA9IHBhY2tzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAoZmluZF9wYWNrX2VudHJ5X29uZShzaGExLCBwKSkKKwkJCXJldHVybiBwOworCX0KKwlyZXR1cm4gTlVMTDsKKworfQorCitzdGF0aWMgaW50IGZpbGxfcGFja19lbnRyeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBzdHJ1Y3QgcGFja19lbnRyeSAqZSwKKwkJCSAgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCW9mZl90IG9mZnNldDsKKworCWlmIChwLT5udW1fYmFkX29iamVjdHMpIHsKKwkJdW5zaWduZWQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9iYWRfb2JqZWN0czsgaSsrKQorCQkJaWYgKGhhc2hlcShvaWQtPmhhc2gsCisJCQkJICAgcC0+YmFkX29iamVjdF9zaGExICsgdGhlX2hhc2hfYWxnby0+cmF3c3ogKiBpKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisKKwlvZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKG9pZC0+aGFzaCwgcCk7CisJaWYgKCFvZmZzZXQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXZSBhcmUgYWJvdXQgdG8gdGVsbCB0aGUgY2FsbGVyIHdoZXJlIHRoZXkgY2FuIGxvY2F0ZSB0aGUKKwkgKiByZXF1ZXN0ZWQgb2JqZWN0LiAgV2UgYmV0dGVyIG1ha2Ugc3VyZSB0aGUgcGFja2ZpbGUgaXMKKwkgKiBzdGlsbCBoZXJlIGFuZCBjYW4gYmUgYWNjZXNzZWQgYmVmb3JlIHN1cHBseWluZyB0aGF0CisJICogYW5zd2VyLCBhcyBpdCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgc2luY2UgdGhlIGluZGV4IHdhcworCSAqIGxvYWRlZCEKKwkgKi8KKwlpZiAoIWlzX3BhY2tfdmFsaWQocCkpCisJCXJldHVybiAwOworCWUtPm9mZnNldCA9IG9mZnNldDsKKwllLT5wID0gcDsKKwlyZXR1cm4gMTsKK30KKworaW50IGZpbmRfcGFja19lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBzdHJ1Y3QgcGFja19lbnRyeSAqZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm07CisKKwlwcmVwYXJlX3BhY2tlZF9naXQocik7CisJaWYgKCFyLT5vYmplY3RzLT5wYWNrZWRfZ2l0ICYmICFyLT5vYmplY3RzLT5tdWx0aV9wYWNrX2luZGV4KQorCQlyZXR1cm4gMDsKKworCWZvciAobSA9IHItPm9iamVjdHMtPm11bHRpX3BhY2tfaW5kZXg7IG07IG0gPSBtLT5uZXh0KSB7CisJCWlmIChmaWxsX21pZHhfZW50cnkociwgb2lkLCBlLCBtKSkKKwkJCXJldHVybiAxOworCX0KKworCWxpc3RfZm9yX2VhY2gocG9zLCAmci0+b2JqZWN0cy0+cGFja2VkX2dpdF9tcnUpIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHBhY2tlZF9naXQsIG1ydSk7CisJCWlmICghcC0+bXVsdGlfcGFja19pbmRleCAmJiBmaWxsX3BhY2tfZW50cnkob2lkLCBlLCBwKSkgeworCQkJbGlzdF9tb3ZlKCZwLT5tcnUsICZyLT5vYmplY3RzLT5wYWNrZWRfZ2l0X21ydSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGhhc19vYmplY3RfcGFjayhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHBhY2tfZW50cnkgZTsKKwlyZXR1cm4gZmluZF9wYWNrX2VudHJ5KHRoZV9yZXBvc2l0b3J5LCBvaWQsICZlKTsKK30KKworaW50IGhhc19wYWNrX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKHN0YXQoc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSksICZzdCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitpbnQgZm9yX2VhY2hfb2JqZWN0X2luX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgICAgZWFjaF9wYWNrZWRfb2JqZWN0X2ZuIGNiLCB2b2lkICpkYXRhLAorCQkJICAgIGVudW0gZm9yX2VhY2hfb2JqZWN0X2ZsYWdzIGZsYWdzKQoreworCXVpbnQzMl90IGk7CisJaW50IHIgPSAwOworCisJaWYgKGZsYWdzICYgRk9SX0VBQ0hfT0JKRUNUX1BBQ0tfT1JERVIpIHsKKwkJaWYgKGxvYWRfcGFja19yZXZpbmRleChwKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX29iamVjdHM7IGkrKykgeworCQl1aW50MzJfdCBwb3M7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCWlmIChmbGFncyAmIEZPUl9FQUNIX09CSkVDVF9QQUNLX09SREVSKQorCQkJcG9zID0gcC0+cmV2aW5kZXhbaV0ubnI7CisJCWVsc2UKKwkJCXBvcyA9IGk7CisKKwkJaWYgKG50aF9wYWNrZWRfb2JqZWN0X2lkKCZvaWQsIHAsIHBvcykgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gZ2V0IHNoYTEgb2Ygb2JqZWN0ICV1IGluICVzIiwKKwkJCQkgICAgIHBvcywgcC0+cGFja19uYW1lKTsKKworCQlyID0gY2IoJm9pZCwgcCwgcG9zLCBkYXRhKTsKKwkJaWYgKHIpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHI7Cit9CisKK2ludCBmb3JfZWFjaF9wYWNrZWRfb2JqZWN0KGVhY2hfcGFja2VkX29iamVjdF9mbiBjYiwgdm9pZCAqZGF0YSwKKwkJCSAgIGVudW0gZm9yX2VhY2hfb2JqZWN0X2ZsYWdzIGZsYWdzKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCByID0gMDsKKwlpbnQgcGFja19lcnJvcnMgPSAwOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KHRoZV9yZXBvc2l0b3J5KTsKKwlmb3IgKHAgPSBnZXRfYWxsX3BhY2tzKHRoZV9yZXBvc2l0b3J5KTsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKChmbGFncyAmIEZPUl9FQUNIX09CSkVDVF9MT0NBTF9PTkxZKSAmJiAhcC0+cGFja19sb2NhbCkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGZsYWdzICYgRk9SX0VBQ0hfT0JKRUNUX1BST01JU09SX09OTFkpICYmCisJCSAgICAhcC0+cGFja19wcm9taXNvcikKKwkJCWNvbnRpbnVlOworCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKSB7CisJCQlwYWNrX2Vycm9ycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlyID0gZm9yX2VhY2hfb2JqZWN0X2luX3BhY2socCwgY2IsIGRhdGEsIGZsYWdzKTsKKwkJaWYgKHIpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHIgPyByIDogcGFja19lcnJvcnM7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3Byb21pc29yX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgc3RydWN0IHBhY2tlZF9naXQgKnBhY2ssCisJCQkgICAgICAgdWludDMyX3QgcG9zLAorCQkJICAgICAgIHZvaWQgKnNldF8pCit7CisJc3RydWN0IG9pZHNldCAqc2V0ID0gc2V0XzsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJaWYgKCFvYmopCisJCXJldHVybiAxOworCisJb2lkc2V0X2luc2VydChzZXQsIG9pZCk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSB0cmVlLCBjb21taXQsIG9yIHRhZywgdGhlIG9iamVjdHMgaXQgcmVmZXJzCisJICogdG8gYXJlIGFsc28gcHJvbWlzb3Igb2JqZWN0cy4gKEJsb2JzIHJlZmVyIHRvIG5vIG9iamVjdHMtPikKKwkgKi8KKwlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gKHN0cnVjdCB0cmVlICopb2JqOworCQlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCQlpZiAoaW5pdF90cmVlX2Rlc2NfZ2VudGx5KCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpKQorCQkJLyoKKwkJCSAqIEVycm9yIG1lc3NhZ2VzIGFyZSBnaXZlbiB3aGVuIHBhY2tzIGFyZQorCQkJICogdmVyaWZpZWQsIHNvIGRvIG5vdCBwcmludCBhbnkgaGVyZS4KKwkJCSAqLworCQkJcmV0dXJuIDA7CisJCXdoaWxlICh0cmVlX2VudHJ5X2dlbnRseSgmZGVzYywgJmVudHJ5KSkKKwkJCW9pZHNldF9pbnNlcnQoc2V0LCAmZW50cnkub2lkKTsKKwl9IGVsc2UgaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopIG9iajsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCisJCW9pZHNldF9pbnNlcnQoc2V0LCBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCkpOworCQlmb3IgKDsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQlvaWRzZXRfaW5zZXJ0KHNldCwgJnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQpOworCX0gZWxzZSBpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKikgb2JqOworCQlvaWRzZXRfaW5zZXJ0KHNldCwgZ2V0X3RhZ2dlZF9vaWQodGFnKSk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgaXNfcHJvbWlzb3Jfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IG9pZHNldCBwcm9taXNvcl9vYmplY3RzOworCXN0YXRpYyBpbnQgcHJvbWlzb3Jfb2JqZWN0c19wcmVwYXJlZDsKKworCWlmICghcHJvbWlzb3Jfb2JqZWN0c19wcmVwYXJlZCkgeworCQlpZiAoaGFzX3Byb21pc29yX3JlbW90ZSgpKSB7CisJCQlmb3JfZWFjaF9wYWNrZWRfb2JqZWN0KGFkZF9wcm9taXNvcl9vYmplY3QsCisJCQkJCSAgICAgICAmcHJvbWlzb3Jfb2JqZWN0cywKKwkJCQkJICAgICAgIEZPUl9FQUNIX09CSkVDVF9QUk9NSVNPUl9PTkxZKTsKKwkJfQorCQlwcm9taXNvcl9vYmplY3RzX3ByZXBhcmVkID0gMTsKKwl9CisJcmV0dXJuIG9pZHNldF9jb250YWlucygmcHJvbWlzb3Jfb2JqZWN0cywgb2lkKTsKK30KZGlmZiAtLWdpdCBhL3BhY2tmaWxlLmggYi9wYWNrZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MGFhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrZmlsZS5oCkBAIC0wLDAgKzEsMTkyIEBACisjaWZuZGVmIFBBQ0tGSUxFX0gKKyNkZWZpbmUgUEFDS0ZJTEVfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvaWRzZXQuaCIKKworLyogaW4gb2JqZWN0LXN0b3JlLmggKi8KK3N0cnVjdCBwYWNrZWRfZ2l0Oworc3RydWN0IG9iamVjdF9pbmZvOworCisvKgorICogR2VuZXJhdGUgdGhlIGZpbGVuYW1lIHRvIGJlIHVzZWQgZm9yIGEgcGFjayBmaWxlIHdpdGggY2hlY2tzdW0gInNoYTEiIGFuZAorICogZXh0ZW5zaW9uICJleHQiLiBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gaW50byB0aGUgc3RyYnVmICJidWYiLCBvdmVyd3JpdGluZworICogYW55IGV4aXN0aW5nIGNvbnRlbnRzLiBBIHBvaW50ZXIgdG8gYnVmLT5idWYgaXMgcmV0dXJuZWQgYXMgYSBjb252ZW5pZW5jZS4KKyAqCisgKiBFeGFtcGxlOiBvZGJfcGFja19uYW1lKG91dCwgc2hhMSwgImlkeCIpID0+ICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLTEyMzQuLmlkeCIKKyAqLworY2hhciAqb2RiX3BhY2tfbmFtZShzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmV4dCk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIChsb2NhbCkgcGFja2ZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIHNoYTEgaW4KKyAqIGl0cyBuYW1lLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gbWVtb3J5IHRoYXQgaXMKKyAqIG92ZXJ3cml0dGVuIGVhY2ggdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqLworY2hhciAqc2hhMV9wYWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIChsb2NhbCkgcGFjayBpbmRleCBmaWxlIHdpdGggdGhlIHNwZWNpZmllZAorICogc2hhMSBpbiBpdHMgbmFtZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIG1lbW9yeSB0aGF0IGlzCisgKiBvdmVyd3JpdHRlbiBlYWNoIHRpbWUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK2NoYXIgKnNoYTFfcGFja19pbmRleF9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisvKgorICogUmV0dXJuIHRoZSBiYXNlbmFtZSBvZiB0aGUgcGFja2ZpbGUsIG9taXR0aW5nIGFueSBjb250YWluaW5nIGRpcmVjdG9yeQorICogKGUuZy4sICJwYWNrLTEyMzRhYmNkWy4uLl0ucGFjayIpLgorICovCitjb25zdCBjaGFyICpwYWNrX2Jhc2VuYW1lKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKTsKKworc3RydWN0IHBhY2tlZF9naXQgKnBhcnNlX3BhY2tfaW5kZXgodW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqaWR4X3BhdGgpOworCit0eXBlZGVmIHZvaWQgZWFjaF9maWxlX2luX3BhY2tfZGlyX2ZuKGNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwgc2l6ZV90IGZ1bGxfcGF0aF9sZW4sCisJCQkJICAgICAgY29uc3QgY2hhciAqZmlsZV9wYWNoLCB2b2lkICpkYXRhKTsKK3ZvaWQgZm9yX2VhY2hfZmlsZV9pbl9wYWNrX2Rpcihjb25zdCBjaGFyICpvYmpkaXIsCisJCQkgICAgICAgZWFjaF9maWxlX2luX3BhY2tfZGlyX2ZuIGZuLAorCQkJICAgICAgIHZvaWQgKmRhdGEpOworCisvKiBBIGhvb2sgdG8gcmVwb3J0IGludmFsaWQgZmlsZXMgaW4gcGFjayBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgUEFDS0RJUl9GSUxFX1BBQ0sgMQorI2RlZmluZSBQQUNLRElSX0ZJTEVfSURYIDIKKyNkZWZpbmUgUEFDS0RJUl9GSUxFX0dBUkJBR0UgNAorZXh0ZXJuIHZvaWQgKCpyZXBvcnRfZ2FyYmFnZSkodW5zaWduZWQgc2Vlbl9iaXRzLCBjb25zdCBjaGFyICpwYXRoKTsKKwordm9pZCByZXByZXBhcmVfcGFja2VkX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Cit2b2lkIGluc3RhbGxfcGFja2VkX2dpdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHBhY2tlZF9naXQgKnBhY2spOworCitzdHJ1Y3QgcGFja2VkX2dpdCAqZ2V0X3BhY2tlZF9naXQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworc3RydWN0IGxpc3RfaGVhZCAqZ2V0X3BhY2tlZF9naXRfbXJ1KHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK3N0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICpnZXRfbXVsdGlfcGFja19pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CitzdHJ1Y3QgcGFja2VkX2dpdCAqZ2V0X2FsbF9wYWNrcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKy8qCisgKiBHaXZlIGEgcm91Z2ggY291bnQgb2Ygb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeS4gVGhpcyBzYWNyaWZpY2VzIGFjY3VyYWN5CisgKiBmb3Igc3BlZWQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmVwb19hcHByb3hpbWF0ZV9vYmplY3RfY291bnQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworI2RlZmluZSBhcHByb3hpbWF0ZV9vYmplY3RfY291bnQoKSByZXBvX2FwcHJveGltYXRlX29iamVjdF9jb3VudCh0aGVfcmVwb3NpdG9yeSkKKworc3RydWN0IHBhY2tlZF9naXQgKmZpbmRfc2hhMV9wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja3MpOworCit2b2lkIHBhY2tfcmVwb3J0KHZvaWQpOworCisvKgorICogbW1hcCB0aGUgaW5kZXggZmlsZSBmb3IgdGhlIHNwZWNpZmllZCBwYWNrZmlsZSAoaWYgaXQgaXMgbm90CisgKiBhbHJlYWR5IG1tYXBwZWQpLiAgUmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IG9wZW5fcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKKworLyoKKyAqIG11bm1hcCB0aGUgaW5kZXggZmlsZSBmb3IgdGhlIHNwZWNpZmllZCBwYWNrZmlsZSAoaWYgaXQgaXMKKyAqIGN1cnJlbnRseSBtbWFwcGVkKS4KKyAqLwordm9pZCBjbG9zZV9wYWNrX2luZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICopOworCitpbnQgY2xvc2VfcGFja19mZChzdHJ1Y3QgcGFja2VkX2dpdCAqcCk7CisKK3VpbnQzMl90IGdldF9wYWNrX2Zhbm91dChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgdWludDMyX3QgdmFsdWUpOworCit1bnNpZ25lZCBjaGFyICp1c2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqLCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90LCB1bnNpZ25lZCBsb25nICopOwordm9pZCBjbG9zZV9wYWNrX3dpbmRvd3Moc3RydWN0IHBhY2tlZF9naXQgKik7Cit2b2lkIGNsb3NlX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKik7Cit2b2lkIGNsb3NlX29iamVjdF9zdG9yZShzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqbyk7Cit2b2lkIHVudXNlX3BhY2soc3RydWN0IHBhY2tfd2luZG93ICoqKTsKK3ZvaWQgY2xlYXJfZGVsdGFfYmFzZV9jYWNoZSh2b2lkKTsKK3N0cnVjdCBwYWNrZWRfZ2l0ICphZGRfcGFja2VkX2dpdChjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9sZW4sIGludCBsb2NhbCk7CisKKy8qCisgKiBVbmxpbmsgdGhlIC5wYWNrIGFuZCBhc3NvY2lhdGVkIGV4dGVuc2lvbiBmaWxlcy4KKyAqIERvZXMgbm90IHVubGluayBpZiAnZm9yY2VfZGVsZXRlJyBpcyBmYWxzZSBhbmQgdGhlIHBhY2stZmlsZSBpcworICogbWFya2VkIGFzICIua2VlcCIuCisgKi8KK3ZvaWQgdW5saW5rX3BhY2tfcGF0aChjb25zdCBjaGFyICpwYWNrX25hbWUsIGludCBmb3JjZV9kZWxldGUpOworCisvKgorICogTWFrZSBzdXJlIHRoYXQgYSBwb2ludGVyIGFjY2VzcyBpbnRvIGFuIG1tYXAnZCBpbmRleCBmaWxlIGlzIHdpdGhpbiBib3VuZHMsCisgKiBhbmQgY2FuIHByb3ZpZGUgYXQgbGVhc3QgOCBieXRlcyBvZiBkYXRhLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciB2YXJpYWJsZS1sZW5ndGggc2VnbWVudHMgb2YgdGhlIGZpbGUKKyAqIChsaWtlIHRoZSA2NC1iaXQgZXh0ZW5kZWQgb2Zmc2V0IHRhYmxlKSwgYXMgd2UgY29tcGFyZSB0aGUgc2l6ZSB0byB0aGUKKyAqIGZpeGVkLWxlbmd0aCBwYXJ0cyB3aGVuIHdlIG9wZW4gdGhlIGZpbGUuCisgKi8KK3ZvaWQgY2hlY2tfcGFja19pbmRleF9wdHIoY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnAsIGNvbnN0IHZvaWQgKnB0cik7CisKKy8qCisgKiBQZXJmb3JtIGJpbmFyeSBzZWFyY2ggb24gYSBwYWNrLWluZGV4IGZvciBhIGdpdmVuIG9pZC4gUGFja2ZpbGUgaXMgZXhwZWN0ZWQgdG8KKyAqIGhhdmUgYSB2YWxpZCBwYWNrLWluZGV4LgorICoKKyAqIFNlZSAnYnNlYXJjaF9oYXNoJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworaW50IGJzZWFyY2hfcGFjayhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCB1aW50MzJfdCAqcmVzdWx0KTsKKworLyoKKyAqIFdyaXRlIHRoZSBvaWQgb2YgdGhlIG50aCBvYmplY3Qgd2l0aGluIHRoZSBzcGVjaWZpZWQgcGFja2ZpbGUgaW50byB0aGUgZmlyc3QKKyAqIHBhcmFtZXRlci4gT3BlbiB0aGUgaW5kZXggaWYgaXQgaXMgbm90IGFscmVhZHkgb3Blbi4gIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogbmVnYXRpdmUgb3RoZXJ3aXNlLgorICovCitpbnQgbnRoX3BhY2tlZF9vYmplY3RfaWQoc3RydWN0IG9iamVjdF9pZCAqLCBzdHJ1Y3QgcGFja2VkX2dpdCAqLCB1aW50MzJfdCBuKTsKKworLyoKKyAqIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBudGggb2JqZWN0IHdpdGhpbiB0aGUgc3BlY2lmaWVkIHBhY2tmaWxlLgorICogVGhlIGluZGV4IG11c3QgYWxyZWFkeSBiZSBvcGVuZWQuCisgKi8KK29mZl90IG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqLCB1aW50MzJfdCBuKTsKKworLyoKKyAqIElmIHRoZSBvYmplY3QgbmFtZWQgc2hhMSBpcyBwcmVzZW50IGluIHRoZSBzcGVjaWZpZWQgcGFja2ZpbGUsCisgKiByZXR1cm4gaXRzIG9mZnNldCB3aXRoaW4gdGhlIHBhY2tmaWxlOyBvdGhlcndpc2UsIHJldHVybiAwLgorICovCitvZmZfdCBmaW5kX3BhY2tfZW50cnlfb25lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBwYWNrZWRfZ2l0ICopOworCitpbnQgaXNfcGFja192YWxpZChzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKK3ZvaWQgKnVucGFja19lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHBhY2tlZF9naXQgKiwgb2ZmX3QsIGVudW0gb2JqZWN0X3R5cGUgKiwgdW5zaWduZWQgbG9uZyAqKTsKK3Vuc2lnbmVkIGxvbmcgdW5wYWNrX29iamVjdF9oZWFkZXJfYnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemVwKTsKK3Vuc2lnbmVkIGxvbmcgZ2V0X3NpemVfZnJvbV9kZWx0YShzdHJ1Y3QgcGFja2VkX2dpdCAqLCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90KTsKK2ludCB1bnBhY2tfb2JqZWN0X2hlYWRlcihzdHJ1Y3QgcGFja2VkX2dpdCAqLCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90ICosIHVuc2lnbmVkIGxvbmcgKik7CitvZmZfdCBnZXRfZGVsdGFfYmFzZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkgICAgIG9mZl90ICpjdXJwb3MsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJICAgICBvZmZfdCBkZWx0YV9vYmpfb2Zmc2V0KTsKKwordm9pZCByZWxlYXNlX3BhY2tfbWVtb3J5KHNpemVfdCk7CisKKy8qIGdsb2JhbCBmbGFnIHRvIGVuYWJsZSBleHRyYSBjaGVja3Mgd2hlbiBhY2Nlc3NpbmcgcGFja2VkIG9iamVjdHMgKi8KK2V4dGVybiBpbnQgZG9fY2hlY2tfcGFja2VkX29iamVjdF9jcmM7CisKK2ludCBwYWNrZWRfb2JqZWN0X2luZm8oc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywKKwkJICAgICAgIG9mZl90IG9mZnNldCwgc3RydWN0IG9iamVjdF9pbmZvICopOworCit2b2lkIG1hcmtfYmFkX3BhY2tlZF9vYmplY3Qoc3RydWN0IHBhY2tlZF9naXQgKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKmhhc19wYWNrZWRfYW5kX2JhZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKKy8qCisgKiBJZmYgYSBwYWNrIGZpbGUgaW4gdGhlIGdpdmVuIHJlcG9zaXRvcnkgY29udGFpbnMgdGhlIG9iamVjdCBuYW1lZCBieSBzaGExLAorICogcmV0dXJuIHRydWUgYW5kIHN0b3JlIGl0cyBsb2NhdGlvbiB0byBlLgorICovCitpbnQgZmluZF9wYWNrX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBwYWNrX2VudHJ5ICplKTsKKworaW50IGhhc19vYmplY3RfcGFjayhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitpbnQgaGFzX3BhY2tfaW5kZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKKy8qCisgKiBSZXR1cm4gMSBpZiBhbiBvYmplY3QgaW4gYSBwcm9taXNvciBwYWNrZmlsZSBpcyBvciByZWZlcnMgdG8gdGhlIGdpdmVuCisgKiBvYmplY3QsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgaXNfcHJvbWlzb3Jfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qCisgKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgZnV6eiB0ZXN0aW5nLgorICoKKyAqIGxvYWRfaWR4KCkgcGFyc2VzIGEgYmxvY2sgb2YgbWVtb3J5IGFzIGEgcGFja2ZpbGUgaW5kZXggYW5kIHB1dHMgdGhlIHJlc3VsdHMKKyAqIGludG8gYSBzdHJ1Y3QgcGFja2VkX2dpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4gSXQgaXMgZXhwb3NlZCBoZXJlIG9ubHkgc28gdGhhdCB3ZQorICogaGF2ZSBhIGNvbnZlbmllbnQgZW50cnktcG9pbnQgZm9yIGZ1enogdGVzdGluZy4gRm9yIHJlYWwgdXNlcywgeW91IHNob3VsZAorICogcHJvYmFibHkgdXNlIG9wZW5fcGFja19pbmRleCgpIG9yIHBhcnNlX3BhY2tfaW5kZXgoKSBpbnN0ZWFkLgorICovCitpbnQgbG9hZF9pZHgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgaW50IGhhc2hzeiwgdm9pZCAqaWR4X21hcCwKKwkgICAgIHNpemVfdCBpZHhfc2l6ZSwgc3RydWN0IHBhY2tlZF9naXQgKnApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhZ2VyLmMgYi9wYWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNDQ2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlci5jCkBAIC0wLDAgKzEsMjUwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKworI2lmbmRlZiBERUZBVUxUX1BBR0VSCisjZGVmaW5lIERFRkFVTFRfUEFHRVIgImxlc3MiCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhZ2VyX3Byb2Nlc3MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CitzdGF0aWMgY29uc3QgY2hhciAqcGFnZXJfcHJvZ3JhbTsKKworc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFnZXIoaW50IGluX3NpZ25hbCkKK3sKKwlpZiAoIWluX3NpZ25hbCkgeworCQlmZmx1c2goc3Rkb3V0KTsKKwkJZmZsdXNoKHN0ZGVycik7CisJfQorCS8qIHNpZ25hbCBFT0YgdG8gcGFnZXIgKi8KKwljbG9zZSgxKTsKKwljbG9zZSgyKTsKKwlpZiAoaW5fc2lnbmFsKQorCQlmaW5pc2hfY29tbWFuZF9pbl9zaWduYWwoJnBhZ2VyX3Byb2Nlc3MpOworCWVsc2UKKwkJZmluaXNoX2NvbW1hbmQoJnBhZ2VyX3Byb2Nlc3MpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYWdlcl9hdGV4aXQodm9pZCkKK3sKKwl3YWl0X2Zvcl9wYWdlcigwKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFnZXJfc2lnbmFsKGludCBzaWdubykKK3sKKwl3YWl0X2Zvcl9wYWdlcigxKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIGludCBjb3JlX3BhZ2VyX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCWlmICghc3RyY21wKHZhciwgImNvcmUucGFnZXIiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZwYWdlcl9wcm9ncmFtLCB2YXIsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqZ2l0X3BhZ2VyKGludCBzdGRvdXRfaXNfdHR5KQoreworCWNvbnN0IGNoYXIgKnBhZ2VyOworCisJaWYgKCFzdGRvdXRfaXNfdHR5KQorCQlyZXR1cm4gTlVMTDsKKworCXBhZ2VyID0gZ2V0ZW52KCJHSVRfUEFHRVIiKTsKKwlpZiAoIXBhZ2VyKSB7CisJCWlmICghcGFnZXJfcHJvZ3JhbSkKKwkJCXJlYWRfZWFybHlfY29uZmlnKGNvcmVfcGFnZXJfY29uZmlnLCBOVUxMKTsKKwkJcGFnZXIgPSBwYWdlcl9wcm9ncmFtOworCX0KKwlpZiAoIXBhZ2VyKQorCQlwYWdlciA9IGdldGVudigiUEFHRVIiKTsKKwlpZiAoIXBhZ2VyKQorCQlwYWdlciA9IERFRkFVTFRfUEFHRVI7CisJaWYgKCEqcGFnZXIgfHwgIXN0cmNtcChwYWdlciwgImNhdCIpKQorCQlwYWdlciA9IE5VTEw7CisKKwlyZXR1cm4gcGFnZXI7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3BhZ2VyX2VudihzdHJ1Y3QgYXJndl9hcnJheSAqZW52KQoreworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBpOworCWNoYXIgKnBhZ2VyX2VudiA9IHhzdHJkdXAoUEFHRVJfRU5WKTsKKwlpbnQgbiA9IHNwbGl0X2NtZGxpbmUocGFnZXJfZW52LCAmYXJndik7CisKKwlpZiAobiA8IDApCisJCWRpZSgibWFsZm9ybWVkIGJ1aWxkLXRpbWUgUEFHRVJfRU5WOiAlcyIsCisJCQlzcGxpdF9jbWRsaW5lX3N0cmVycm9yKG4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJY2hhciAqY3AgPSBzdHJjaHIoYXJndltpXSwgJz0nKTsKKworCQlpZiAoIWNwKQorCQkJZGllKCJtYWxmb3JtZWQgYnVpbGQtdGltZSBQQUdFUl9FTlYiKTsKKworCQkqY3AgPSAnXDAnOworCQlpZiAoIWdldGVudihhcmd2W2ldKSkgeworCQkJKmNwID0gJz0nOworCQkJYXJndl9hcnJheV9wdXNoKGVudiwgYXJndltpXSk7CisJCX0KKwl9CisJZnJlZShwYWdlcl9lbnYpOworCWZyZWUoYXJndik7Cit9CisKK3ZvaWQgcHJlcGFyZV9wYWdlcl9hcmdzKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpwYWdlcl9wcm9jZXNzLCBjb25zdCBjaGFyICpwYWdlcikKK3sKKwlhcmd2X2FycmF5X3B1c2goJnBhZ2VyX3Byb2Nlc3MtPmFyZ3MsIHBhZ2VyKTsKKwlwYWdlcl9wcm9jZXNzLT51c2Vfc2hlbGwgPSAxOworCXNldHVwX3BhZ2VyX2VudigmcGFnZXJfcHJvY2Vzcy0+ZW52X2FycmF5KTsKKwlwYWdlcl9wcm9jZXNzLT50cmFjZTJfY2hpbGRfY2xhc3MgPSAicGFnZXIiOworfQorCit2b2lkIHNldHVwX3BhZ2VyKHZvaWQpCit7CisJY29uc3QgY2hhciAqcGFnZXIgPSBnaXRfcGFnZXIoaXNhdHR5KDEpKTsKKworCWlmICghcGFnZXIpCisJCXJldHVybjsKKworCS8qCisJICogQWZ0ZXIgd2UgcmVkaXJlY3Qgc3RhbmRhcmQgb3V0cHV0LCB3ZSB3b24ndCBiZSBhYmxlIHRvIHVzZSBhbiBpb2N0bAorCSAqIHRvIGdldCB0aGUgdGVybWluYWwgc2l6ZS4gTGV0J3MgZ3JhYiBpdCBub3csIGFuZCB0aGVuIHNldCAkQ09MVU1OUworCSAqIHRvIGNvbW11bmljYXRlIGl0IHRvIGFueSBzdWItcHJvY2Vzc2VzLgorCSAqLworCXsKKwkJY2hhciBidWZbNjRdOworCQl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgdGVybV9jb2x1bW5zKCkpOworCQlzZXRlbnYoIkNPTFVNTlMiLCBidWYsIDApOworCX0KKworCXNldGVudigiR0lUX1BBR0VSX0lOX1VTRSIsICJ0cnVlIiwgMSk7CisKKwkvKiBzcGF3biB0aGUgcGFnZXIgKi8KKwlwcmVwYXJlX3BhZ2VyX2FyZ3MoJnBhZ2VyX3Byb2Nlc3MsIHBhZ2VyKTsKKwlwYWdlcl9wcm9jZXNzLmluID0gLTE7CisJYXJndl9hcnJheV9wdXNoKCZwYWdlcl9wcm9jZXNzLmVudl9hcnJheSwgIkdJVF9QQUdFUl9JTl9VU0UiKTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmcGFnZXJfcHJvY2VzcykpCisJCXJldHVybjsKKworCS8qIG9yaWdpbmFsIHByb2Nlc3MgY29udGludWVzLCBidXQgd3JpdGVzIHRvIHRoZSBwaXBlICovCisJZHVwMihwYWdlcl9wcm9jZXNzLmluLCAxKTsKKwlpZiAoaXNhdHR5KDIpKQorCQlkdXAyKHBhZ2VyX3Byb2Nlc3MuaW4sIDIpOworCWNsb3NlKHBhZ2VyX3Byb2Nlc3MuaW4pOworCisJLyogdGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHBhcmVudCB0ZXJtaW5hdGVzIGFmdGVyIHRoZSBwYWdlciAqLworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHdhaXRfZm9yX3BhZ2VyX3NpZ25hbCk7CisJYXRleGl0KHdhaXRfZm9yX3BhZ2VyX2F0ZXhpdCk7Cit9CisKK2ludCBwYWdlcl9pbl91c2Uodm9pZCkKK3sKKwlyZXR1cm4gZ2l0X2Vudl9ib29sKCJHSVRfUEFHRVJfSU5fVVNFIiwgMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gY2FjaGVkIHZhbHVlIChpZiBzZXQpIG9yICRDT0xVTU5TIGVudmlyb25tZW50IHZhcmlhYmxlIChpZgorICogc2V0IGFuZCBwb3NpdGl2ZSkgb3IgaW9jdGwoMSwgVElPQ0dXSU5TWikud3NfY29sIChpZiBwb3NpdGl2ZSksCisgKiBhbmQgZGVmYXVsdCB0byA4MCBpZiBhbGwgZWxzZSBmYWlscy4KKyAqLworaW50IHRlcm1fY29sdW1ucyh2b2lkKQoreworCXN0YXRpYyBpbnQgdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXA7CisKKwljaGFyICpjb2xfc3RyaW5nOworCWludCBuX2NvbHM7CisKKwlpZiAodGVybV9jb2x1bW5zX2F0X3N0YXJ0dXApCisJCXJldHVybiB0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cDsKKworCXRlcm1fY29sdW1uc19hdF9zdGFydHVwID0gODA7CisKKwljb2xfc3RyaW5nID0gZ2V0ZW52KCJDT0xVTU5TIik7CisJaWYgKGNvbF9zdHJpbmcgJiYgKG5fY29scyA9IGF0b2koY29sX3N0cmluZykpID4gMCkKKwkJdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXAgPSBuX2NvbHM7CisjaWZkZWYgVElPQ0dXSU5TWgorCWVsc2UgeworCQlzdHJ1Y3Qgd2luc2l6ZSB3czsKKwkJaWYgKCFpb2N0bCgxLCBUSU9DR1dJTlNaLCAmd3MpICYmIHdzLndzX2NvbCkKKwkJCXRlcm1fY29sdW1uc19hdF9zdGFydHVwID0gd3Mud3NfY29sOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHRlcm1fY29sdW1uc19hdF9zdGFydHVwOworfQorCisvKgorICogQ2xlYXIgdGhlIGVudGlyZSBsaW5lLCBsZWF2ZSBjdXJzb3IgaW4gZmlyc3QgY29sdW1uLgorICovCit2b2lkIHRlcm1fY2xlYXJfbGluZSh2b2lkKQoreworCWlmIChpc190ZXJtaW5hbF9kdW1iKCkpCisJCS8qCisJCSAqIEZhbGwgYmFjayB0byBwcmludCBhIHRlcm1pbmFsIHdpZHRoIHdvcnRoIG9mIHNwYWNlCisJCSAqIGNoYXJhY3RlcnMgKGhvcGluZyB0aGF0IHRoZSB0ZXJtaW5hbCBpcyBzdGlsbCBhcyB3aWRlCisJCSAqIGFzIGl0IHdhcyB1cG9uIHRoZSBmaXJzdCBjYWxsIHRvIHRlcm1fY29sdW1ucygpKS4KKwkJICovCisJCWZwcmludGYoc3RkZXJyLCAiXHIlKnNcciIsIHRlcm1fY29sdW1ucygpLCAiIik7CisJZWxzZQorCQkvKgorCQkgKiBPbiBub24tZHVtYiB0ZXJtaW5hbHMgdXNlIGFuIGVzY2FwZSBzZXF1ZW5jZSB0byBjbGVhcgorCQkgKiB0aGUgd2hvbGUgbGluZSwgbm8gbWF0dGVyIGhvdyB3aWRlIHRoZSB0ZXJtaW5hbC4KKwkJICovCisJCWZwdXRzKCJcclwwMzNbSyIsIHN0ZGVycik7Cit9CisKKy8qCisgKiBIb3cgbWFueSBjb2x1bW5zIGRvIHdlIG5lZWQgdG8gc2hvdyB0aGlzIG51bWJlciBpbiBkZWNpbWFsPworICovCitpbnQgZGVjaW1hbF93aWR0aCh1aW50bWF4X3QgbnVtYmVyKQoreworCWludCB3aWR0aDsKKworCWZvciAod2lkdGggPSAxOyBudW1iZXIgPj0gMTA7IHdpZHRoKyspCisJCW51bWJlciAvPSAxMDsKKwlyZXR1cm4gd2lkdGg7Cit9CisKK3N0cnVjdCBwYWdlcl9jb21tYW5kX2NvbmZpZ19kYXRhIHsKKwljb25zdCBjaGFyICpjbWQ7CisJaW50IHdhbnQ7CisJY2hhciAqdmFsdWU7Cit9OworCitzdGF0aWMgaW50IHBhZ2VyX2NvbW1hbmRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKnZkYXRhKQoreworCXN0cnVjdCBwYWdlcl9jb21tYW5kX2NvbmZpZ19kYXRhICpkYXRhID0gdmRhdGE7CisJY29uc3QgY2hhciAqY21kOworCisJaWYgKHNraXBfcHJlZml4KHZhciwgInBhZ2VyLiIsICZjbWQpICYmICFzdHJjbXAoY21kLCBkYXRhLT5jbWQpKSB7CisJCWludCBiID0gZ2l0X3BhcnNlX21heWJlX2Jvb2wodmFsdWUpOworCQlpZiAoYiA+PSAwKQorCQkJZGF0YS0+d2FudCA9IGI7CisJCWVsc2UgeworCQkJZGF0YS0+d2FudCA9IDE7CisJCQlkYXRhLT52YWx1ZSA9IHhzdHJkdXAodmFsdWUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybnMgMCBmb3IgIm5vIHBhZ2VyIiwgMSBmb3IgInVzZSBwYWdlciIsIGFuZCAtMSBmb3IgIm5vdCBzcGVjaWZpZWQiICovCitpbnQgY2hlY2tfcGFnZXJfY29uZmlnKGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlzdHJ1Y3QgcGFnZXJfY29tbWFuZF9jb25maWdfZGF0YSBkYXRhOworCisJZGF0YS5jbWQgPSBjbWQ7CisJZGF0YS53YW50ID0gLTE7CisJZGF0YS52YWx1ZSA9IE5VTEw7CisKKwlyZWFkX2Vhcmx5X2NvbmZpZyhwYWdlcl9jb21tYW5kX2NvbmZpZywgJmRhdGEpOworCisJaWYgKGRhdGEudmFsdWUpCisJCXBhZ2VyX3Byb2dyYW0gPSBkYXRhLnZhbHVlOworCXJldHVybiBkYXRhLndhbnQ7Cit9CmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLWNiLmMgYi9wYXJzZS1vcHRpb25zLWNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4YjU1YgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnNlLW9wdGlvbnMtY2IuYwpAQCAtMCwwICsxLDI5MyBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorCisvKi0tLS0tIHNvbWUgb2Z0ZW4gdXNlZCBvcHRpb25zIC0tLS0tKi8KKworaW50IHBhcnNlX29wdF9hYmJyZXZfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgdjsKKworCWlmICghYXJnKSB7CisJCXYgPSB1bnNldCA/IDAgOiBERUZBVUxUX0FCQlJFVjsKKwl9IGVsc2UgeworCQlpZiAoISphcmcpCisJCQlyZXR1cm4gZXJyb3IoXygib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIpLAorCQkJCSAgICAgb3B0LT5sb25nX25hbWUpOworCQl2ID0gc3RydG9sKGFyZywgKGNoYXIgKiopJmFyZywgMTApOworCQlpZiAoKmFyZykKKwkJCXJldHVybiBlcnJvcihfKCJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIiksCisJCQkJICAgICBvcHQtPmxvbmdfbmFtZSk7CisJCWlmICh2ICYmIHYgPCBNSU5JTVVNX0FCQlJFVikKKwkJCXYgPSBNSU5JTVVNX0FCQlJFVjsKKwkJZWxzZSBpZiAodiA+IHRoZV9oYXNoX2FsZ28tPmhleHN6KQorCQkJdiA9IHRoZV9oYXNoX2FsZ28tPmhleHN6OworCX0KKwkqKGludCAqKShvcHQtPnZhbHVlKSA9IHY7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfZXhwaXJ5X2RhdGVfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCWFyZyA9ICJuZXZlciI7CisJaWYgKHBhcnNlX2V4cGlyeV9kYXRlKGFyZywgKHRpbWVzdGFtcF90ICopb3B0LT52YWx1ZSkpCisJCWRpZShfKCJtYWxmb3JtZWQgZXhwaXJhdGlvbiBkYXRlICclcyciKSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9jb2xvcl9mbGFnX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgIGludCB1bnNldCkKK3sKKwlpbnQgdmFsdWU7CisKKwlpZiAoIWFyZykKKwkJYXJnID0gdW5zZXQgPyAibmV2ZXIiIDogKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwl2YWx1ZSA9IGdpdF9jb25maWdfY29sb3Jib29sKE5VTEwsIGFyZyk7CisJaWYgKHZhbHVlIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIpLAorCQkJICAgICBvcHQtPmxvbmdfbmFtZSk7CisJKihpbnQgKilvcHQtPnZhbHVlID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfdmVyYm9zaXR5X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgaW50IHVuc2V0KQoreworCWludCAqdGFyZ2V0ID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwlpZiAodW5zZXQpCisJCS8qIC0tbm8tcXVpZXQsIC0tbm8tdmVyYm9zZSAqLworCQkqdGFyZ2V0ID0gMDsKKwllbHNlIGlmIChvcHQtPnNob3J0X25hbWUgPT0gJ3YnKSB7CisJCWlmICgqdGFyZ2V0ID49IDApCisJCQkoKnRhcmdldCkrKzsKKwkJZWxzZQorCQkJKnRhcmdldCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKCp0YXJnZXQgPD0gMCkKKwkJCSgqdGFyZ2V0KS0tOworCQllbHNlCisJCQkqdGFyZ2V0ID0gLTE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X2NvbW1pdHMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlCVUdfT05fT1BUX05FRyh1bnNldCk7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCWlmIChnZXRfb2lkKGFyZywgJm9pZCkpCisJCXJldHVybiBlcnJvcigibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIiwgYXJnKTsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiBlcnJvcigibm8gc3VjaCBjb21taXQgJXMiLCBhcmcpOworCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsIG9wdC0+dmFsdWUpOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X2NvbW1pdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0ICoqdGFyZ2V0ID0gb3B0LT52YWx1ZTsKKworCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisJaWYgKGdldF9vaWQoYXJnLCAmb2lkKSkKKwkJcmV0dXJuIGVycm9yKCJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiLCBhcmcpOworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIGVycm9yKCJubyBzdWNoIGNvbW1pdCAlcyIsIGFyZyk7CisJKnRhcmdldCA9IGNvbW1pdDsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9vYmplY3RfbmFtZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKHVuc2V0KSB7CisJCW9pZF9hcnJheV9jbGVhcihvcHQtPnZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisJaWYgKGdldF9vaWQoYXJnLCAmb2lkKSkKKwkJcmV0dXJuIGVycm9yKF8oIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIiksIGFyZyk7CisJb2lkX2FycmF5X2FwcGVuZChvcHQtPnZhbHVlLCAmb2lkKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9vYmplY3RfaWQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICp0YXJnZXQgPSBvcHQtPnZhbHVlOworCisJaWYgKHVuc2V0KSB7CisJCSp0YXJnZXQgPSBudWxsX29pZDsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisJaWYgKGdldF9vaWQoYXJnLCAmb2lkKSkKKwkJcmV0dXJuIGVycm9yKF8oIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIiksIGFyZyk7CisJKnRhcmdldCA9IG9pZDsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF90ZXJ0aWFyeShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqdGFyZ2V0ID0gb3B0LT52YWx1ZTsKKworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisKKwkqdGFyZ2V0ID0gdW5zZXQgPyAyIDogMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNpemVfdCBwYXJzZV9vcHRpb25zX2NvdW50KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCkKK3sKKwlzaXplX3QgbiA9IDA7CisKKwlmb3IgKDsgb3B0ICYmIG9wdC0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHQrKykKKwkJbisrOworCXJldHVybiBuOworfQorCitzdHJ1Y3Qgb3B0aW9uICpwYXJzZV9vcHRpb25zX2R1cChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvKQoreworCXN0cnVjdCBvcHRpb24gbm9fb3B0aW9uc1tdID0geyBPUFRfRU5EKCkgfTsKKworCXJldHVybiBwYXJzZV9vcHRpb25zX2NvbmNhdChvLCBub19vcHRpb25zKTsKK30KKworc3RydWN0IG9wdGlvbiAqcGFyc2Vfb3B0aW9uc19jb25jYXQoY29uc3Qgc3RydWN0IG9wdGlvbiAqYSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqYikKK3sKKwlzdHJ1Y3Qgb3B0aW9uICpyZXQ7CisJc2l6ZV90IGFfbGVuID0gcGFyc2Vfb3B0aW9uc19jb3VudChhKTsKKwlzaXplX3QgYl9sZW4gPSBwYXJzZV9vcHRpb25zX2NvdW50KGIpOworCisJQUxMT0NfQVJSQVkocmV0LCBzdF9hZGQzKGFfbGVuLCBiX2xlbiwgMSkpOworCUNPUFlfQVJSQVkocmV0LCBhLCBhX2xlbik7CisJQ09QWV9BUlJBWShyZXQgKyBhX2xlbiwgYiwgYl9sZW4gKyAxKTsgLyogKyAxIGZvciBmaW5hbCBPUFRJT05fRU5EICovCisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcGFyc2Vfb3B0X3N0cmluZ19saXN0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICp2ID0gb3B0LT52YWx1ZTsKKworCWlmICh1bnNldCkgeworCQlzdHJpbmdfbGlzdF9jbGVhcih2LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKworCXN0cmluZ19saXN0X2FwcGVuZCh2LCBhcmcpOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X25vb3BfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBSZXBvcnQgdGhhdCB0aGUgb3B0aW9uIGlzIHVua25vd24sIHNvIHRoYXQgb3RoZXIgY29kZSBjYW4gaGFuZGxlCisgKiBpdC4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIGNhbGxiYWNrIHRvZ2V0aGVyIHdpdGgKKyAqIE9QVElPTl9MT1dMRVZFTF9DQUxMQkFDSyB0byBhbGxvdyBhbiBvcHRpb24gdG8gYmUgZG9jdW1lbnRlZCBpbiB0aGUKKyAqICItaCIgb3V0cHV0IGV2ZW4gaWYgaXQncyBub3QgYmVpbmcgaGFuZGxlZCBkaXJlY3RseSBieQorICogcGFyc2Vfb3B0aW9ucygpLgorICovCitlbnVtIHBhcnNlX29wdF9yZXN1bHQgcGFyc2Vfb3B0X3Vua25vd25fY2Ioc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCUJVR19PTl9PUFRfQVJHKGFyZyk7CisJcmV0dXJuIFBBUlNFX09QVF9VTktOT1dOOworfQorCisvKioKKyAqIFJlY3JlYXRlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBpbiB0aGUgc3RyYnVmLgorICovCitzdGF0aWMgaW50IHJlY3JlYXRlX29wdChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJidWZfcmVzZXQoc2IpOworCisJaWYgKG9wdC0+bG9uZ19uYW1lKSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHVuc2V0ID8gIi0tbm8tIiA6ICItLSIpOworCQlzdHJidWZfYWRkc3RyKHNiLCBvcHQtPmxvbmdfbmFtZSk7CisJCWlmIChhcmcpIHsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJz0nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGFyZyk7CisJCX0KKwl9IGVsc2UgaWYgKG9wdC0+c2hvcnRfbmFtZSAmJiAhdW5zZXQpIHsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnLScpOworCQlzdHJidWZfYWRkY2goc2IsIG9wdC0+c2hvcnRfbmFtZSk7CisJCWlmIChhcmcpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBhcmcpOworCX0gZWxzZQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBGb3IgYW4gb3B0aW9uIG9wdCwgcmVjcmVhdGVzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIGluIG9wdC0+dmFsdWUgd2hpY2gKKyAqIG11c3QgYmUgYW4gY2hhciogaW5pdGlhbGl6ZWQgdG8gTlVMTC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB3ZSBuZWVkIHRvIHBhc3MKKyAqIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIGFub3RoZXIgY29tbWFuZC4gU2luY2UgYW55IHByZXZpb3VzIHZhbHVlIHdpbGwgYmUKKyAqIG92ZXJ3cml0dGVuLCB0aGlzIGNhbGxiYWNrIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG9wdGlvbnMgd2hlcmUgdGhlIGxhc3QKKyAqIG9uZSB3aW5zLgorICovCitpbnQgcGFyc2Vfb3B0X3Bhc3N0aHJ1KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljaGFyICoqb3B0X3ZhbHVlID0gb3B0LT52YWx1ZTsKKworCWlmIChyZWNyZWF0ZV9vcHQoJnNiLCBvcHQsIGFyZywgdW5zZXQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJZnJlZSgqb3B0X3ZhbHVlKTsKKworCSpvcHRfdmFsdWUgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBGb3IgYW4gb3B0aW9uIG9wdCwgcmVjcmVhdGUgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24sIGFwcGVuZGluZyBpdCB0bworICogb3B0LT52YWx1ZSB3aGljaCBtdXN0IGJlIGEgYXJndl9hcnJheS4gVGhpcyBpcyB1c2VmdWwgd2hlbiB3ZSBuZWVkIHRvIHBhc3MKKyAqIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uLCB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLCB0byBhbm90aGVyCisgKiBjb21tYW5kLgorICovCitpbnQgcGFyc2Vfb3B0X3Bhc3N0aHJ1X2FyZ3YoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBhcmd2X2FycmF5ICpvcHRfdmFsdWUgPSBvcHQtPnZhbHVlOworCisJaWYgKHJlY3JlYXRlX29wdCgmc2IsIG9wdCwgYXJnLCB1bnNldCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlhcmd2X2FycmF5X3B1c2gob3B0X3ZhbHVlLCBzYi5idWYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLmMgYi9wYXJzZS1vcHRpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkNmJhYgotLS0gL2Rldi9udWxsCisrKyBiL3BhcnNlLW9wdGlvbnMuYwpAQCAtMCwwICsxLDEwMDggQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworc3RhdGljIGludCBkaXNhbGxvd19hYmJyZXZpYXRlZF9vcHRpb25zOworCisjZGVmaW5lIE9QVF9TSE9SVCAxCisjZGVmaW5lIE9QVF9VTlNFVCAyCisKK2ludCBvcHRidWcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICpyZWFzb24pCit7CisJaWYgKG9wdC0+bG9uZ19uYW1lKSB7CisJCWlmIChvcHQtPnNob3J0X25hbWUpCisJCQlyZXR1cm4gZXJyb3IoIkJVRzogc3dpdGNoICclYycgKC0tJXMpICVzIiwKKwkJCQkgICAgIG9wdC0+c2hvcnRfbmFtZSwgb3B0LT5sb25nX25hbWUsIHJlYXNvbik7CisJCXJldHVybiBlcnJvcigiQlVHOiBvcHRpb24gJyVzJyAlcyIsIG9wdC0+bG9uZ19uYW1lLCByZWFzb24pOworCX0KKwlyZXR1cm4gZXJyb3IoIkJVRzogc3dpdGNoICclYycgJXMiLCBvcHQtPnNob3J0X25hbWUsIHJlYXNvbik7Cit9CisKK3N0YXRpYyBlbnVtIHBhcnNlX29wdF9yZXN1bHQgZ2V0X2FyZyhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICoqYXJnKQoreworCWlmIChwLT5vcHQpIHsKKwkJKmFyZyA9IHAtPm9wdDsKKwkJcC0+b3B0ID0gTlVMTDsKKwl9IGVsc2UgaWYgKHAtPmFyZ2MgPT0gMSAmJiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQpKSB7CisJCSphcmcgPSAoY29uc3QgY2hhciAqKW9wdC0+ZGVmdmFsOworCX0gZWxzZSBpZiAocC0+YXJnYyA+IDEpIHsKKwkJcC0+YXJnYy0tOworCQkqYXJnID0gKisrcC0+YXJndjsKKwl9IGVsc2UKKwkJcmV0dXJuIGVycm9yKF8oIiVzIHJlcXVpcmVzIGEgdmFsdWUiKSwgb3B0bmFtZShvcHQsIGZsYWdzKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpeF9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipmaWxlKQoreworCWlmICghZmlsZSB8fCAhKmZpbGUgfHwgIXByZWZpeCB8fCBpc19hYnNvbHV0ZV9wYXRoKCpmaWxlKQorCSAgICB8fCAhc3RyY21wKCItIiwgKmZpbGUpKQorCQlyZXR1cm47CisJKmZpbGUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCAqZmlsZSk7Cit9CisKK3N0YXRpYyBlbnVtIHBhcnNlX29wdF9yZXN1bHQgb3B0X2NvbW1hbmRfbW9kZV9lcnJvcigKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJY29uc3Qgc3RydWN0IG9wdGlvbiAqYWxsX29wdHMsCisJaW50IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBvcHRpb24gKnRoYXQ7CisJc3RydWN0IHN0cmJ1ZiB0aGF0X25hbWUgPSBTVFJCVUZfSU5JVDsKKworCS8qCisJICogRmluZCB0aGUgb3RoZXIgb3B0aW9uIHRoYXQgd2FzIHVzZWQgdG8gc2V0IHRoZSB2YXJpYWJsZQorCSAqIGFscmVhZHksIGFuZCByZXBvcnQgdGhhdCB0aGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggaXQuCisJICovCisJZm9yICh0aGF0ID0gYWxsX29wdHM7IHRoYXQtPnR5cGUgIT0gT1BUSU9OX0VORDsgdGhhdCsrKSB7CisJCWlmICh0aGF0ID09IG9wdCB8fAorCQkgICAgISh0aGF0LT5mbGFncyAmIFBBUlNFX09QVF9DTURNT0RFKSB8fAorCQkgICAgdGhhdC0+dmFsdWUgIT0gb3B0LT52YWx1ZSB8fAorCQkgICAgdGhhdC0+ZGVmdmFsICE9ICooaW50ICopb3B0LT52YWx1ZSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0aGF0LT5sb25nX25hbWUpCisJCQlzdHJidWZfYWRkZigmdGhhdF9uYW1lLCAiLS0lcyIsIHRoYXQtPmxvbmdfbmFtZSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZ0aGF0X25hbWUsICItJWMiLCB0aGF0LT5zaG9ydF9uYW1lKTsKKwkJZXJyb3IoXygiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiKSwKKwkJICAgICAgb3B0bmFtZShvcHQsIGZsYWdzKSwgdGhhdF9uYW1lLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZ0aGF0X25hbWUpOworCQlyZXR1cm4gUEFSU0VfT1BUX0VSUk9SOworCX0KKwlyZXR1cm4gZXJyb3IoXygiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIpLAorCQkgICAgIG9wdG5hbWUob3B0LCBmbGFncykpOworfQorCitzdGF0aWMgZW51bSBwYXJzZV9vcHRfcmVzdWx0IGdldF92YWx1ZShzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmFsbF9vcHRzLAorCQkJCSAgICAgICBpbnQgZmxhZ3MpCit7CisJY29uc3QgY2hhciAqcywgKmFyZzsKKwljb25zdCBpbnQgdW5zZXQgPSBmbGFncyAmIE9QVF9VTlNFVDsKKwlpbnQgZXJyOworCisJaWYgKHVuc2V0ICYmIHAtPm9wdCkKKwkJcmV0dXJuIGVycm9yKF8oIiVzIHRha2VzIG5vIHZhbHVlIiksIG9wdG5hbWUob3B0LCBmbGFncykpOworCWlmICh1bnNldCAmJiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9OT05FRykpCisJCXJldHVybiBlcnJvcihfKCIlcyBpc24ndCBhdmFpbGFibGUiKSwgb3B0bmFtZShvcHQsIGZsYWdzKSk7CisJaWYgKCEoZmxhZ3MgJiBPUFRfU0hPUlQpICYmIHAtPm9wdCAmJiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykpCisJCXJldHVybiBlcnJvcihfKCIlcyB0YWtlcyBubyB2YWx1ZSIpLCBvcHRuYW1lKG9wdCwgZmxhZ3MpKTsKKworCS8qCisJICogR2l2aW5nIHRoZSBzYW1lIG1vZGUgb3B0aW9uIHR3aWNlLCBhbHRob3VnaCB1bm5lY2Vzc2FyeSwKKwkgKiBpcyBub3QgYSBncmF2ZSBlcnJvciwgc28gbGV0IGl0IHBhc3MuCisJICovCisJaWYgKChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX0NNRE1PREUpICYmCisJICAgICooaW50ICopb3B0LT52YWx1ZSAmJiAqKGludCAqKW9wdC0+dmFsdWUgIT0gb3B0LT5kZWZ2YWwpCisJCXJldHVybiBvcHRfY29tbWFuZF9tb2RlX2Vycm9yKG9wdCwgYWxsX29wdHMsIGZsYWdzKTsKKworCXN3aXRjaCAob3B0LT50eXBlKSB7CisJY2FzZSBPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0s6CisJCXJldHVybiBvcHQtPmxsX2NhbGxiYWNrKHAsIG9wdCwgTlVMTCwgdW5zZXQpOworCisJY2FzZSBPUFRJT05fQklUOgorCQlpZiAodW5zZXQpCisJCQkqKGludCAqKW9wdC0+dmFsdWUgJj0gfm9wdC0+ZGVmdmFsOworCQllbHNlCisJCQkqKGludCAqKW9wdC0+dmFsdWUgfD0gb3B0LT5kZWZ2YWw7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fTkVHQklUOgorCQlpZiAodW5zZXQpCisJCQkqKGludCAqKW9wdC0+dmFsdWUgfD0gb3B0LT5kZWZ2YWw7CisJCWVsc2UKKwkJCSooaW50ICopb3B0LT52YWx1ZSAmPSB+b3B0LT5kZWZ2YWw7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fQklUT1A6CisJCWlmICh1bnNldCkKKwkJCUJVRygiQklUT1AgY2FuJ3QgaGF2ZSB1bnNldCBmb3JtIik7CisJCSooaW50ICopb3B0LT52YWx1ZSAmPSB+b3B0LT5leHRyYTsKKwkJKihpbnQgKilvcHQtPnZhbHVlIHw9IG9wdC0+ZGVmdmFsOworCQlyZXR1cm4gMDsKKworCWNhc2UgT1BUSU9OX0NPVU5UVVA6CisJCWlmICgqKGludCAqKW9wdC0+dmFsdWUgPCAwKQorCQkJKihpbnQgKilvcHQtPnZhbHVlID0gMDsKKwkJKihpbnQgKilvcHQtPnZhbHVlID0gdW5zZXQgPyAwIDogKihpbnQgKilvcHQtPnZhbHVlICsgMTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9TRVRfSU5UOgorCQkqKGludCAqKW9wdC0+dmFsdWUgPSB1bnNldCA/IDAgOiBvcHQtPmRlZnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9TVFJJTkc6CisJCWlmICh1bnNldCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gTlVMTDsKKwkJZWxzZSBpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJcmV0dXJuIGdldF9hcmcocCwgb3B0LCBmbGFncywgKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSk7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fRklMRU5BTUU6CisJCWVyciA9IDA7CisJCWlmICh1bnNldCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gTlVMTDsKKwkJZWxzZSBpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJZXJyID0gZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlKTsKKworCQlpZiAoIWVycikKKwkJCWZpeF9maWxlbmFtZShwLT5wcmVmaXgsIChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUpOworCQlyZXR1cm4gZXJyOworCisJY2FzZSBPUFRJT05fQ0FMTEJBQ0s6CisJeworCQljb25zdCBjaGFyICpwX2FyZyA9IE5VTEw7CisJCWludCBwX3Vuc2V0OworCisJCWlmICh1bnNldCkKKwkJCXBfdW5zZXQgPSAxOworCQllbHNlIGlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX05PQVJHKQorCQkJcF91bnNldCA9IDA7CisJCWVsc2UgaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHICYmICFwLT5vcHQpCisJCQlwX3Vuc2V0ID0gMDsKKwkJZWxzZSBpZiAoZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAmYXJnKSkKKwkJCXJldHVybiAtMTsKKwkJZWxzZSB7CisJCQlwX3Vuc2V0ID0gMDsKKwkJCXBfYXJnID0gYXJnOworCQl9CisJCWlmIChvcHQtPmNhbGxiYWNrKQorCQkJcmV0dXJuICgqb3B0LT5jYWxsYmFjaykob3B0LCBwX2FyZywgcF91bnNldCkgPyAoLTEpIDogMDsKKwkJZWxzZQorCQkJcmV0dXJuICgqb3B0LT5sbF9jYWxsYmFjaykocCwgb3B0LCBwX2FyZywgcF91bnNldCk7CisJfQorCWNhc2UgT1BUSU9OX0lOVEVHRVI6CisJCWlmICh1bnNldCkgeworCQkJKihpbnQgKilvcHQtPnZhbHVlID0gMDsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRyAmJiAhcC0+b3B0KSB7CisJCQkqKGludCAqKW9wdC0+dmFsdWUgPSBvcHQtPmRlZnZhbDsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChnZXRfYXJnKHAsIG9wdCwgZmxhZ3MsICZhcmcpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoISphcmcpCisJCQlyZXR1cm4gZXJyb3IoXygiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIpLAorCQkJCSAgICAgb3B0bmFtZShvcHQsIGZsYWdzKSk7CisJCSooaW50ICopb3B0LT52YWx1ZSA9IHN0cnRvbChhcmcsIChjaGFyICoqKSZzLCAxMCk7CisJCWlmICgqcykKKwkJCXJldHVybiBlcnJvcihfKCIlcyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIiksCisJCQkJICAgICBvcHRuYW1lKG9wdCwgZmxhZ3MpKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9NQUdOSVRVREU6CisJCWlmICh1bnNldCkgeworCQkJKih1bnNpZ25lZCBsb25nICopb3B0LT52YWx1ZSA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkgeworCQkJKih1bnNpZ25lZCBsb25nICopb3B0LT52YWx1ZSA9IG9wdC0+ZGVmdmFsOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGdldF9hcmcocCwgb3B0LCBmbGFncywgJmFyZykpCisJCQlyZXR1cm4gLTE7CisJCWlmICghZ2l0X3BhcnNlX3Vsb25nKGFyZywgb3B0LT52YWx1ZSkpCisJCQlyZXR1cm4gZXJyb3IoXygiJXMgZXhwZWN0cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIgorCQkJCSAgICAgICAiIHdpdGggYW4gb3B0aW9uYWwgay9tL2cgc3VmZml4IiksCisJCQkJICAgICBvcHRuYW1lKG9wdCwgZmxhZ3MpKTsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlCVUcoIm9wdC0+dHlwZSAlZCBzaG91bGQgbm90IGhhcHBlbiIsIG9wdC0+dHlwZSk7CisJfQorfQorCitzdGF0aWMgZW51bSBwYXJzZV9vcHRfcmVzdWx0IHBhcnNlX3Nob3J0X29wdChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqYWxsX29wdHMgPSBvcHRpb25zOworCWNvbnN0IHN0cnVjdCBvcHRpb24gKm51bW9wdCA9IE5VTEw7CisKKwlmb3IgKDsgb3B0aW9ucy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRpb25zKyspIHsKKwkJaWYgKG9wdGlvbnMtPnNob3J0X25hbWUgPT0gKnAtPm9wdCkgeworCQkJcC0+b3B0ID0gcC0+b3B0WzFdID8gcC0+b3B0ICsgMSA6IE5VTEw7CisJCQlyZXR1cm4gZ2V0X3ZhbHVlKHAsIG9wdGlvbnMsIGFsbF9vcHRzLCBPUFRfU0hPUlQpOworCQl9CisKKwkJLyoKKwkJICogSGFuZGxlIHRoZSBudW1lcmljYWwgb3B0aW9uIGxhdGVyLCBleHBsaWNpdCBvbmUtZGlnaXQKKwkJICogb3B0aW9ucyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBpdC4KKwkJICovCisJCWlmIChvcHRpb25zLT50eXBlID09IE9QVElPTl9OVU1CRVIpCisJCQludW1vcHQgPSBvcHRpb25zOworCX0KKwlpZiAobnVtb3B0ICYmIGlzZGlnaXQoKnAtPm9wdCkpIHsKKwkJc2l6ZV90IGxlbiA9IDE7CisJCWNoYXIgKmFyZzsKKwkJaW50IHJjOworCisJCXdoaWxlIChpc2RpZ2l0KHAtPm9wdFtsZW5dKSkKKwkJCWxlbisrOworCQlhcmcgPSB4bWVtZHVweihwLT5vcHQsIGxlbik7CisJCXAtPm9wdCA9IHAtPm9wdFtsZW5dID8gcC0+b3B0ICsgbGVuIDogTlVMTDsKKwkJaWYgKG51bW9wdC0+Y2FsbGJhY2spCisJCQlyYyA9ICgqbnVtb3B0LT5jYWxsYmFjaykobnVtb3B0LCBhcmcsIDApID8gKC0xKSA6IDA7CisJCWVsc2UKKwkJCXJjID0gKCpudW1vcHQtPmxsX2NhbGxiYWNrKShwLCBudW1vcHQsIGFyZywgMCk7CisJCWZyZWUoYXJnKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyZXR1cm4gUEFSU0VfT1BUX1VOS05PV047Cit9CisKK3N0YXRpYyBpbnQgaGFzX3N0cmluZyhjb25zdCBjaGFyICppdCwgY29uc3QgY2hhciAqKmFycmF5KQoreworCXdoaWxlICgqYXJyYXkpCisJCWlmICghc3RyY21wKGl0LCAqKGFycmF5KyspKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX2FsaWFzKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9uZV9vcHQsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICphbm90aGVyX29wdCkKK3sKKwljb25zdCBjaGFyICoqZ3JvdXA7CisKKwlpZiAoIWN0eC0+YWxpYXNfZ3JvdXBzKQorCQlyZXR1cm4gMDsKKworCWlmICghb25lX29wdC0+bG9uZ19uYW1lIHx8ICFhbm90aGVyX29wdC0+bG9uZ19uYW1lKQorCQlyZXR1cm4gMDsKKworCWZvciAoZ3JvdXAgPSBjdHgtPmFsaWFzX2dyb3VwczsgKmdyb3VwOyBncm91cCArPSAzKSB7CisJCS8qIGl0IGFuZCBvdGhlciBhcmUgZnJvbSB0aGUgc2FtZSBmYW1pbHk/ICovCisJCWlmIChoYXNfc3RyaW5nKG9uZV9vcHQtPmxvbmdfbmFtZSwgZ3JvdXApICYmCisJCSAgICBoYXNfc3RyaW5nKGFub3RoZXJfb3B0LT5sb25nX25hbWUsIGdyb3VwKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcGFyc2Vfb3B0X3Jlc3VsdCBwYXJzZV9sb25nX29wdCgKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLCBjb25zdCBjaGFyICphcmcsCisJY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKK3sKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICphbGxfb3B0cyA9IG9wdGlvbnM7CisJY29uc3QgY2hhciAqYXJnX2VuZCA9IHN0cmNocm51bChhcmcsICc9Jyk7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqYWJicmV2X29wdGlvbiA9IE5VTEwsICphbWJpZ3VvdXNfb3B0aW9uID0gTlVMTDsKKwlpbnQgYWJicmV2X2ZsYWdzID0gMCwgYW1iaWd1b3VzX2ZsYWdzID0gMDsKKworCWZvciAoOyBvcHRpb25zLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdGlvbnMrKykgeworCQljb25zdCBjaGFyICpyZXN0LCAqbG9uZ19uYW1lID0gb3B0aW9ucy0+bG9uZ19uYW1lOworCQlpbnQgZmxhZ3MgPSAwLCBvcHRfZmxhZ3MgPSAwOworCisJCWlmICghbG9uZ19uYW1lKQorCQkJY29udGludWU7CisKK2FnYWluOgorCQlpZiAoIXNraXBfcHJlZml4KGFyZywgbG9uZ19uYW1lLCAmcmVzdCkpCisJCQlyZXN0ID0gTlVMTDsKKwkJaWYgKG9wdGlvbnMtPnR5cGUgPT0gT1BUSU9OX0FSR1VNRU5UKSB7CisJCQlpZiAoIXJlc3QpCisJCQkJY29udGludWU7CisJCQlpZiAoKnJlc3QgPT0gJz0nKQorCQkJCXJldHVybiBlcnJvcihfKCIlcyB0YWtlcyBubyB2YWx1ZSIpLAorCQkJCQkgICAgIG9wdG5hbWUob3B0aW9ucywgZmxhZ3MpKTsKKwkJCWlmICgqcmVzdCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvcHRpb25zLT52YWx1ZSkKKwkJCQkqKGludCAqKW9wdGlvbnMtPnZhbHVlID0gb3B0aW9ucy0+ZGVmdmFsOworCQkJcC0+b3V0W3AtPmNwaWR4KytdID0gYXJnIC0gMjsKKwkJCXJldHVybiBQQVJTRV9PUFRfRE9ORTsKKwkJfQorCQlpZiAoIXJlc3QpIHsKKwkJCS8qIGFiYnJldmlhdGVkPyAqLworCQkJaWYgKCEocC0+ZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKSAmJgorCQkJICAgICFzdHJuY21wKGxvbmdfbmFtZSwgYXJnLCBhcmdfZW5kIC0gYXJnKSkgeworaXNfYWJicmV2aWF0ZWQ6CisJCQkJaWYgKGFiYnJldl9vcHRpb24gJiYKKwkJCQkgICAgIWlzX2FsaWFzKHAsIGFiYnJldl9vcHRpb24sIG9wdGlvbnMpKSB7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoaXMgaXMgYWJicmV2aWF0ZWQsIGl0IGlzCisJCQkJCSAqIGFtYmlndW91cy4gU28gd2hlbiB0aGVyZSBpcyBubworCQkJCQkgKiBleGFjdCBtYXRjaCBsYXRlciwgd2UgbmVlZCB0bworCQkJCQkgKiBlcnJvciBvdXQuCisJCQkJCSAqLworCQkJCQlhbWJpZ3VvdXNfb3B0aW9uID0gYWJicmV2X29wdGlvbjsKKwkJCQkJYW1iaWd1b3VzX2ZsYWdzID0gYWJicmV2X2ZsYWdzOworCQkJCX0KKwkJCQlpZiAoIShmbGFncyAmIE9QVF9VTlNFVCkgJiYgKmFyZ19lbmQpCisJCQkJCXAtPm9wdCA9IGFyZ19lbmQgKyAxOworCQkJCWFiYnJldl9vcHRpb24gPSBvcHRpb25zOworCQkJCWFiYnJldl9mbGFncyA9IGZsYWdzIF4gb3B0X2ZsYWdzOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogbmVnYXRpb24gYWxsb3dlZD8gKi8KKwkJCWlmIChvcHRpb25zLT5mbGFncyAmIFBBUlNFX09QVF9OT05FRykKKwkJCQljb250aW51ZTsKKwkJCS8qIG5lZ2F0ZWQgYW5kIGFiYnJldmlhdGVkIHZlcnkgbXVjaD8gKi8KKwkJCWlmIChzdGFydHNfd2l0aCgibm8tIiwgYXJnKSkgeworCQkJCWZsYWdzIHw9IE9QVF9VTlNFVDsKKwkJCQlnb3RvIGlzX2FiYnJldmlhdGVkOworCQkJfQorCQkJLyogbmVnYXRlZD8gKi8KKwkJCWlmICghc3RhcnRzX3dpdGgoYXJnLCAibm8tIikpIHsKKwkJCQlpZiAoc2tpcF9wcmVmaXgobG9uZ19uYW1lLCAibm8tIiwgJmxvbmdfbmFtZSkpIHsKKwkJCQkJb3B0X2ZsYWdzIHw9IE9QVF9VTlNFVDsKKwkJCQkJZ290byBhZ2FpbjsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlmbGFncyB8PSBPUFRfVU5TRVQ7CisJCQlpZiAoIXNraXBfcHJlZml4KGFyZyArIDMsIGxvbmdfbmFtZSwgJnJlc3QpKSB7CisJCQkJLyogYWJicmV2aWF0ZWQgYW5kIG5lZ2F0ZWQ/ICovCisJCQkJaWYgKHN0YXJ0c193aXRoKGxvbmdfbmFtZSwgYXJnICsgMykpCisJCQkJCWdvdG8gaXNfYWJicmV2aWF0ZWQ7CisJCQkJZWxzZQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAoKnJlc3QpIHsKKwkJCWlmICgqcmVzdCAhPSAnPScpCisJCQkJY29udGludWU7CisJCQlwLT5vcHQgPSByZXN0ICsgMTsKKwkJfQorCQlyZXR1cm4gZ2V0X3ZhbHVlKHAsIG9wdGlvbnMsIGFsbF9vcHRzLCBmbGFncyBeIG9wdF9mbGFncyk7CisJfQorCisJaWYgKGRpc2FsbG93X2FiYnJldmlhdGVkX29wdGlvbnMgJiYgKGFtYmlndW91c19vcHRpb24gfHwgYWJicmV2X29wdGlvbikpCisJCWRpZSgiZGlzYWxsb3dlZCBhYmJyZXZpYXRlZCBvciBhbWJpZ3VvdXMgb3B0aW9uICclLipzJyIsCisJCSAgICAoaW50KShhcmdfZW5kIC0gYXJnKSwgYXJnKTsKKworCWlmIChhbWJpZ3VvdXNfb3B0aW9uKSB7CisJCWVycm9yKF8oImFtYmlndW91cyBvcHRpb246ICVzICIKKwkJCSIoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiKSwKKwkJCWFyZywKKwkJCShhbWJpZ3VvdXNfZmxhZ3MgJiBPUFRfVU5TRVQpID8gICJuby0iIDogIiIsCisJCQlhbWJpZ3VvdXNfb3B0aW9uLT5sb25nX25hbWUsCisJCQkoYWJicmV2X2ZsYWdzICYgT1BUX1VOU0VUKSA/ICAibm8tIiA6ICIiLAorCQkJYWJicmV2X29wdGlvbi0+bG9uZ19uYW1lKTsKKwkJcmV0dXJuIFBBUlNFX09QVF9IRUxQOworCX0KKwlpZiAoYWJicmV2X29wdGlvbikKKwkJcmV0dXJuIGdldF92YWx1ZShwLCBhYmJyZXZfb3B0aW9uLCBhbGxfb3B0cywgYWJicmV2X2ZsYWdzKTsKKwlyZXR1cm4gUEFSU0VfT1BUX1VOS05PV047Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfbm9kYXNoX29wdChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKK3sKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICphbGxfb3B0cyA9IG9wdGlvbnM7CisKKwlmb3IgKDsgb3B0aW9ucy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRpb25zKyspIHsKKwkJaWYgKCEob3B0aW9ucy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9EQVNIKSkKKwkJCWNvbnRpbnVlOworCQlpZiAob3B0aW9ucy0+c2hvcnRfbmFtZSA9PSBhcmdbMF0gJiYgYXJnWzFdID09ICdcMCcpCisJCQlyZXR1cm4gZ2V0X3ZhbHVlKHAsIG9wdGlvbnMsIGFsbF9vcHRzLCBPUFRfU0hPUlQpOworCX0KKwlyZXR1cm4gLTI7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3R5cG9zKGNvbnN0IGNoYXIgKmFyZywgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKK3sKKwlpZiAoc3RybGVuKGFyZykgPCAzKQorCQlyZXR1cm47CisKKwlpZiAoc3RhcnRzX3dpdGgoYXJnLCAibm8tIikpIHsKKwkJZXJyb3IoXygiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzKT8iKSwgYXJnKTsKKwkJZXhpdCgxMjkpOworCX0KKworCWZvciAoOyBvcHRpb25zLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdGlvbnMrKykgeworCQlpZiAoIW9wdGlvbnMtPmxvbmdfbmFtZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RhcnRzX3dpdGgob3B0aW9ucy0+bG9uZ19uYW1lLCBhcmcpKSB7CisJCQllcnJvcihfKCJkaWQgeW91IG1lYW4gYC0tJXNgICh3aXRoIHR3byBkYXNoZXMpPyIpLCBhcmcpOworCQkJZXhpdCgxMjkpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zX2NoZWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpCit7CisJaW50IGVyciA9IDA7CisJY2hhciBzaG9ydF9vcHRzWzEyOF07CisKKwltZW1zZXQoc2hvcnRfb3B0cywgJ1wwJywgc2l6ZW9mKHNob3J0X29wdHMpKTsKKwlmb3IgKDsgb3B0cy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRzKyspIHsKKwkJaWYgKChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQpICYmCisJCSAgICAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKSkKKwkJCWVyciB8PSBvcHRidWcob3B0cywgInVzZXMgaW5jb21wYXRpYmxlIGZsYWdzICIKKwkJCQkJIkxBU1RBUkdfREVGQVVMVCBhbmQgT1BUQVJHIik7CisJCWlmIChvcHRzLT5zaG9ydF9uYW1lKSB7CisJCQlpZiAoMHg3RiA8PSBvcHRzLT5zaG9ydF9uYW1lKQorCQkJCWVyciB8PSBvcHRidWcob3B0cywgImludmFsaWQgc2hvcnQgbmFtZSIpOworCQkJZWxzZSBpZiAoc2hvcnRfb3B0c1tvcHRzLT5zaG9ydF9uYW1lXSsrKQorCQkJCWVyciB8PSBvcHRidWcob3B0cywgInNob3J0IG5hbWUgYWxyZWFkeSB1c2VkIik7CisJCX0KKwkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCAmJgorCQkgICAgKChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpIHx8CisJCSAgICAgIShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykgfHwKKwkJICAgICAhKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PTkVHKSB8fAorCQkgICAgIG9wdHMtPmxvbmdfbmFtZSkpCisJCQllcnIgfD0gb3B0YnVnKG9wdHMsICJ1c2VzIGZlYXR1cmUgIgorCQkJCQkibm90IHN1cHBvcnRlZCBmb3IgZGFzaGxlc3Mgb3B0aW9ucyIpOworCQlzd2l0Y2ggKG9wdHMtPnR5cGUpIHsKKwkJY2FzZSBPUFRJT05fQ09VTlRVUDoKKwkJY2FzZSBPUFRJT05fQklUOgorCQljYXNlIE9QVElPTl9ORUdCSVQ6CisJCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CisJCWNhc2UgT1BUSU9OX05VTUJFUjoKKwkJCWlmICgob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKSB8fAorCQkJICAgICEob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpKQorCQkJCWVyciB8PSBvcHRidWcob3B0cywgInNob3VsZCBub3QgYWNjZXB0IGFuIGFyZ3VtZW50Iik7CisJCQlicmVhazsKKwkJY2FzZSBPUFRJT05fQ0FMTEJBQ0s6CisJCQlpZiAoIW9wdHMtPmNhbGxiYWNrICYmICFvcHRzLT5sbF9jYWxsYmFjaykKKwkJCQlCVUcoIk9QVElPTl9DQUxMQkFDSyBuZWVkcyBvbmUgY2FsbGJhY2siKTsKKwkJCWlmIChvcHRzLT5jYWxsYmFjayAmJiBvcHRzLT5sbF9jYWxsYmFjaykKKwkJCQlCVUcoIk9QVElPTl9DQUxMQkFDSyBjYW4ndCBoYXZlIHR3byBjYWxsYmFja3MiKTsKKwkJCWJyZWFrOworCQljYXNlIE9QVElPTl9MT1dMRVZFTF9DQUxMQkFDSzoKKwkJCWlmICghb3B0cy0+bGxfY2FsbGJhY2spCisJCQkJQlVHKCJPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0sgbmVlZHMgYSBjYWxsYmFjayIpOworCQkJaWYgKG9wdHMtPmNhbGxiYWNrKQorCQkJCUJVRygiT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLIG5lZWRzIG5vIGhpZ2ggbGV2ZWwgY2FsbGJhY2siKTsKKwkJCWJyZWFrOworCQljYXNlIE9QVElPTl9BTElBUzoKKwkJCUJVRygiT1BUX0FMSUFTKCkgc2hvdWxkIG5vdCByZW1haW4gYXQgdGhpcyBwb2ludC4gIgorCQkJICAgICJBcmUgeW91IHVzaW5nIHBhcnNlX29wdGlvbnNfc3RlcCgpIGRpcmVjdGx5P1xuIgorCQkJICAgICJUaGF0IGNhc2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIik7CisJCWRlZmF1bHQ6CisJCQk7IC8qIG9rLiAodXN1YWxseSBhY2NlcHRzIGFuIGFyZ3VtZW50KSAqLworCQl9CisJCWlmIChvcHRzLT5hcmdoICYmCisJCSAgICBzdHJjc3BuKG9wdHMtPmFyZ2gsICIgXyIpICE9IHN0cmxlbihvcHRzLT5hcmdoKSkKKwkJCWVyciB8PSBvcHRidWcob3B0cywgIm11bHRpLXdvcmQgYXJnaCBzaG91bGQgdXNlIGRhc2ggdG8gc2VwYXJhdGUgd29yZHMiKTsKKwl9CisJaWYgKGVycikKKwkJZXhpdCgxMjgpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zX3N0YXJ0XzEoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLCBpbnQgZmxhZ3MpCit7CisJY3R4LT5hcmdjID0gYXJnYzsKKwljdHgtPmFyZ3YgPSBhcmd2OworCWlmICghKGZsYWdzICYgUEFSU0VfT1BUX09ORV9TSE9UKSkgeworCQljdHgtPmFyZ2MtLTsKKwkJY3R4LT5hcmd2Kys7CisJfQorCWN0eC0+dG90YWwgPSBjdHgtPmFyZ2M7CisJY3R4LT5vdXQgICA9IGFyZ3Y7CisJY3R4LT5wcmVmaXggPSBwcmVmaXg7CisJY3R4LT5jcGlkeCA9ICgoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9BUkdWMCkgIT0gMCk7CisJY3R4LT5mbGFncyA9IGZsYWdzOworCWlmICgoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKSAmJgorCSAgICAoZmxhZ3MgJiBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKSAmJgorCSAgICAhKGZsYWdzICYgUEFSU0VfT1BUX09ORV9TSE9UKSkKKwkJQlVHKCJTVE9QX0FUX05PTl9PUFRJT04gYW5kIEtFRVBfVU5LTk9XTiBkb24ndCBnbyB0b2dldGhlciIpOworCWlmICgoZmxhZ3MgJiBQQVJTRV9PUFRfT05FX1NIT1QpICYmCisJICAgIChmbGFncyAmIFBBUlNFX09QVF9LRUVQX0FSR1YwKSkKKwkJQlVHKCJDYW4ndCBrZWVwIGFyZ3YwIGlmIHlvdSBkb24ndCBoYXZlIGl0Iik7CisJcGFyc2Vfb3B0aW9uc19jaGVjayhvcHRpb25zKTsKK30KKwordm9pZCBwYXJzZV9vcHRpb25zX3N0YXJ0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCSBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLCBpbnQgZmxhZ3MpCit7CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKKwlwYXJzZV9vcHRpb25zX3N0YXJ0XzEoY3R4LCBhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19uZWdhdGVkX2dpdGNvbXAoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cywgaW50IG5yX25vb3B0cykKK3sKKwlpbnQgcHJpbnRlZF9kYXNoZGFzaCA9IDA7CisKKwlmb3IgKDsgb3B0cy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRzKyspIHsKKwkJaW50IGhhc191bnNldF9mb3JtID0gMDsKKwkJY29uc3QgY2hhciAqbmFtZTsKKworCQlpZiAoIW9wdHMtPmxvbmdfbmFtZSkKKwkJCWNvbnRpbnVlOworCQlpZiAob3B0cy0+ZmxhZ3MgJiAoUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0NPTVBMRVRFKSkKKwkJCWNvbnRpbnVlOworCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9ORUcpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKG9wdHMtPnR5cGUpIHsKKwkJY2FzZSBPUFRJT05fU1RSSU5HOgorCQljYXNlIE9QVElPTl9GSUxFTkFNRToKKwkJY2FzZSBPUFRJT05fSU5URUdFUjoKKwkJY2FzZSBPUFRJT05fTUFHTklUVURFOgorCQljYXNlIE9QVElPTl9DQUxMQkFDSzoKKwkJY2FzZSBPUFRJT05fQklUOgorCQljYXNlIE9QVElPTl9ORUdCSVQ6CisJCWNhc2UgT1BUSU9OX0NPVU5UVVA6CisJCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CisJCQloYXNfdW5zZXRfZm9ybSA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWlmICghaGFzX3Vuc2V0X2Zvcm0pCisJCQljb250aW51ZTsKKworCQlpZiAoc2tpcF9wcmVmaXgob3B0cy0+bG9uZ19uYW1lLCAibm8tIiwgJm5hbWUpKSB7CisJCQlpZiAobnJfbm9vcHRzIDwgMCkKKwkJCQlwcmludGYoIiAtLSVzIiwgbmFtZSk7CisJCX0gZWxzZSBpZiAobnJfbm9vcHRzID49IDApIHsKKwkJCWlmIChucl9ub29wdHMgJiYgIXByaW50ZWRfZGFzaGRhc2gpIHsKKwkJCQlwcmludGYoIiAtLSIpOworCQkJCXByaW50ZWRfZGFzaGRhc2ggPSAxOworCQkJfQorCQkJcHJpbnRmKCIgLS1uby0lcyIsIG9wdHMtPmxvbmdfbmFtZSk7CisJCQlucl9ub29wdHMrKzsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBzaG93X2dpdGNvbXAoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0cykKK3sKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcmlnaW5hbF9vcHRzID0gb3B0czsKKwlpbnQgbnJfbm9vcHRzID0gMDsKKworCWZvciAoOyBvcHRzLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdHMrKykgeworCQljb25zdCBjaGFyICpzdWZmaXggPSAiIjsKKworCQlpZiAoIW9wdHMtPmxvbmdfbmFtZSkKKwkJCWNvbnRpbnVlOworCQlpZiAob3B0cy0+ZmxhZ3MgJiAoUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0NPTVBMRVRFKSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAob3B0cy0+dHlwZSkgeworCQljYXNlIE9QVElPTl9HUk9VUDoKKwkJCWNvbnRpbnVlOworCQljYXNlIE9QVElPTl9TVFJJTkc6CisJCWNhc2UgT1BUSU9OX0ZJTEVOQU1FOgorCQljYXNlIE9QVElPTl9JTlRFR0VSOgorCQljYXNlIE9QVElPTl9NQUdOSVRVREU6CisJCWNhc2UgT1BUSU9OX0NBTExCQUNLOgorCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PQVJHKQorCQkJCWJyZWFrOworCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykKKwkJCQlicmVhazsKKwkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQpCisJCQkJYnJlYWs7CisJCQlzdWZmaXggPSAiPSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9DT01QX0FSRykKKwkJCXN1ZmZpeCA9ICI9IjsKKwkJaWYgKHN0YXJ0c193aXRoKG9wdHMtPmxvbmdfbmFtZSwgIm5vLSIpKQorCQkJbnJfbm9vcHRzKys7CisJCXByaW50ZigiIC0tJXMlcyIsIG9wdHMtPmxvbmdfbmFtZSwgc3VmZml4KTsKKwl9CisJc2hvd19uZWdhdGVkX2dpdGNvbXAob3JpZ2luYWxfb3B0cywgLTEpOworCXNob3dfbmVnYXRlZF9naXRjb21wKG9yaWdpbmFsX29wdHMsIG5yX25vb3B0cyk7CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwlyZXR1cm4gUEFSU0VfT1BUX0NPTVBMRVRFOworfQorCisvKgorICogU2NhbiBhbmQgbWF5IHByb2R1Y2UgYSBuZXcgb3B0aW9uW10gYXJyYXksIHdoaWNoIHNob3VsZCBiZSB1c2VkCisgKiBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCAnb3B0aW9ucycuCisgKgorICogUmlnaHQgbm93IHRoaXMgaXMgb25seSB1c2VkIHRvIHByZXByb2Nlc3MgYW5kIHN1YnN0aXR1dGUKKyAqIE9QVElPTl9BTElBUy4KKyAqLworc3RhdGljIHN0cnVjdCBvcHRpb24gKnByZXByb2Nlc3Nfb3B0aW9ucyhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJCSBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKQoreworCXN0cnVjdCBvcHRpb24gKm5ld29wdDsKKwlpbnQgaSwgbnIsIGFsaWFzOworCWludCBucl9hbGlhc2VzID0gMDsKKworCWZvciAobnIgPSAwOyBvcHRpb25zW25yXS50eXBlICE9IE9QVElPTl9FTkQ7IG5yKyspIHsKKwkJaWYgKG9wdGlvbnNbbnJdLnR5cGUgPT0gT1BUSU9OX0FMSUFTKQorCQkJbnJfYWxpYXNlcysrOworCX0KKworCWlmICghbnJfYWxpYXNlcykKKwkJcmV0dXJuIE5VTEw7CisKKwlBTExPQ19BUlJBWShuZXdvcHQsIG5yICsgMSk7CisJQ09QWV9BUlJBWShuZXdvcHQsIG9wdGlvbnMsIG5yICsgMSk7CisKKwkvKiBlYWNoIGFsaWFzIGhhcyB0d28gc3RyaW5nIHBvaW50ZXJzIGFuZCBOVUxMICovCisJQ0FMTE9DX0FSUkFZKGN0eC0+YWxpYXNfZ3JvdXBzLCAzICogKG5yX2FsaWFzZXMgKyAxKSk7CisKKwlmb3IgKGFsaWFzID0gMCwgaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCWludCBzaG9ydF9uYW1lOworCQljb25zdCBjaGFyICpsb25nX25hbWU7CisJCWNvbnN0IGNoYXIgKnNvdXJjZTsKKwkJaW50IGo7CisKKwkJaWYgKG5ld29wdFtpXS50eXBlICE9IE9QVElPTl9BTElBUykKKwkJCWNvbnRpbnVlOworCisJCXNob3J0X25hbWUgPSBuZXdvcHRbaV0uc2hvcnRfbmFtZTsKKwkJbG9uZ19uYW1lID0gbmV3b3B0W2ldLmxvbmdfbmFtZTsKKwkJc291cmNlID0gbmV3b3B0W2ldLnZhbHVlOworCisJCWlmICghbG9uZ19uYW1lKQorCQkJQlVHKCJBbiBhbGlhcyBtdXN0IGhhdmUgbG9uZyBvcHRpb24gbmFtZSIpOworCisJCWZvciAoaiA9IDA7IGogPCBucjsgaisrKSB7CisJCQljb25zdCBjaGFyICpuYW1lID0gb3B0aW9uc1tqXS5sb25nX25hbWU7CisKKwkJCWlmICghbmFtZSB8fCBzdHJjbXAobmFtZSwgc291cmNlKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKG9wdGlvbnNbal0udHlwZSA9PSBPUFRJT05fQUxJQVMpCisJCQkJQlVHKCJObyBwbGVhc2UuIE5lc3RlZCBhbGlhc2VzIGFyZSBub3Qgc3VwcG9ydGVkLiIpOworCisJCQkvKgorCQkJICogTkVFRFNXT1JLOiB0aGlzIGlzIGEgYml0IGluY29uc2lzdGVudCBiZWNhdXNlCisJCQkgKiB1c2FnZV93aXRoX29wdGlvbnMoKSBvbiB0aGUgb3JpZ2luYWwgb3B0aW9uc1tdIHdpbGwgcHJpbnQKKwkJCSAqIGhlbHAgc3RyaW5nIGFzICJhbGlhcyBvZiAlcyIgYnV0ICJnaXQgY21kIC1oIiB3aWxsCisJCQkgKiBwcmludCB0aGUgb3JpZ2luYWwgaGVscCBzdHJpbmcuCisJCQkgKi8KKwkJCW1lbWNweShuZXdvcHQgKyBpLCBvcHRpb25zICsgaiwgc2l6ZW9mKCpuZXdvcHQpKTsKKwkJCW5ld29wdFtpXS5zaG9ydF9uYW1lID0gc2hvcnRfbmFtZTsKKwkJCW5ld29wdFtpXS5sb25nX25hbWUgPSBsb25nX25hbWU7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChqID09IG5yKQorCQkJQlVHKCJjb3VsZCBub3QgZmluZCBzb3VyY2Ugb3B0aW9uICclcycgb2YgYWxpYXMgJyVzJyIsCisJCQkgICAgc291cmNlLCBuZXdvcHRbaV0ubG9uZ19uYW1lKTsKKwkJY3R4LT5hbGlhc19ncm91cHNbYWxpYXMgKiAzICsgMF0gPSBuZXdvcHRbaV0ubG9uZ19uYW1lOworCQljdHgtPmFsaWFzX2dyb3Vwc1thbGlhcyAqIDMgKyAxXSA9IG9wdGlvbnNbal0ubG9uZ19uYW1lOworCQljdHgtPmFsaWFzX2dyb3Vwc1thbGlhcyAqIDMgKyAyXSA9IE5VTEw7CisJCWFsaWFzKys7CisJfQorCisJcmV0dXJuIG5ld29wdDsKK30KKworc3RhdGljIGludCB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqLAorCQkJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgKiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBpbnQsIGludCk7CisKK2ludCBwYXJzZV9vcHRpb25zX3N0ZXAoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywKKwkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdKQoreworCWludCBpbnRlcm5hbF9oZWxwID0gIShjdHgtPmZsYWdzICYgUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFApOworCisJLyogd2UgbXVzdCByZXNldCAtPm9wdCwgdW5rbm93biBzaG9ydCBvcHRpb24gbGVhdmUgaXQgZGFuZ2xpbmcgKi8KKwljdHgtPm9wdCA9IE5VTEw7CisKKwlmb3IgKDsgY3R4LT5hcmdjOyBjdHgtPmFyZ2MtLSwgY3R4LT5hcmd2KyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gY3R4LT5hcmd2WzBdOworCisJCWlmIChjdHgtPmZsYWdzICYgUEFSU0VfT1BUX09ORV9TSE9UICYmCisJCSAgICBjdHgtPmFyZ2MgIT0gY3R4LT50b3RhbCkKKwkJCWJyZWFrOworCisJCWlmICgqYXJnICE9ICctJyB8fCAhYXJnWzFdKSB7CisJCQlpZiAocGFyc2Vfbm9kYXNoX29wdChjdHgsIGFyZywgb3B0aW9ucykgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChjdHgtPmZsYWdzICYgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTikKKwkJCQlyZXR1cm4gUEFSU0VfT1BUX05PTl9PUFRJT047CisJCQljdHgtPm91dFtjdHgtPmNwaWR4KytdID0gY3R4LT5hcmd2WzBdOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBsb25lIC1oIGFza3MgZm9yIGhlbHAgKi8KKwkJaWYgKGludGVybmFsX2hlbHAgJiYgY3R4LT50b3RhbCA9PSAxICYmICFzdHJjbXAoYXJnICsgMSwgImgiKSkKKwkJCWdvdG8gc2hvd191c2FnZTsKKworCQkvKiBsb25lIC0tZ2l0LWNvbXBsZXRpb24taGVscGVyIGlzIGFza2VkIGJ5IGdpdC1jb21wbGV0aW9uLmJhc2ggKi8KKwkJaWYgKGN0eC0+dG90YWwgPT0gMSAmJiAhc3RyY21wKGFyZyArIDEsICItZ2l0LWNvbXBsZXRpb24taGVscGVyIikpCisJCQlyZXR1cm4gc2hvd19naXRjb21wKG9wdGlvbnMpOworCisJCWlmIChhcmdbMV0gIT0gJy0nKSB7CisJCQljdHgtPm9wdCA9IGFyZyArIDE7CisJCQlzd2l0Y2ggKHBhcnNlX3Nob3J0X29wdChjdHgsIG9wdGlvbnMpKSB7CisJCQljYXNlIFBBUlNFX09QVF9FUlJPUjoKKwkJCQlyZXR1cm4gUEFSU0VfT1BUX0VSUk9SOworCQkJY2FzZSBQQVJTRV9PUFRfVU5LTk9XTjoKKwkJCQlpZiAoY3R4LT5vcHQpCisJCQkJCWNoZWNrX3R5cG9zKGFyZyArIDEsIG9wdGlvbnMpOworCQkJCWlmIChpbnRlcm5hbF9oZWxwICYmICpjdHgtPm9wdCA9PSAnaCcpCisJCQkJCWdvdG8gc2hvd191c2FnZTsKKwkJCQlnb3RvIHVua25vd247CisJCQljYXNlIFBBUlNFX09QVF9OT05fT1BUSU9OOgorCQkJY2FzZSBQQVJTRV9PUFRfSEVMUDoKKwkJCWNhc2UgUEFSU0VfT1BUX0NPTVBMRVRFOgorCQkJCUJVRygicGFyc2Vfc2hvcnRfb3B0KCkgY2Fubm90IHJldHVybiB0aGVzZSIpOworCQkJY2FzZSBQQVJTRV9PUFRfRE9ORToKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjdHgtPm9wdCkKKwkJCQljaGVja190eXBvcyhhcmcgKyAxLCBvcHRpb25zKTsKKwkJCXdoaWxlIChjdHgtPm9wdCkgeworCQkJCXN3aXRjaCAocGFyc2Vfc2hvcnRfb3B0KGN0eCwgb3B0aW9ucykpIHsKKwkJCQljYXNlIFBBUlNFX09QVF9FUlJPUjoKKwkJCQkJcmV0dXJuIFBBUlNFX09QVF9FUlJPUjsKKwkJCQljYXNlIFBBUlNFX09QVF9VTktOT1dOOgorCQkJCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAqY3R4LT5vcHQgPT0gJ2gnKQorCQkJCQkJZ290byBzaG93X3VzYWdlOworCisJCQkJCS8qIGZha2UgYSBzaG9ydCBvcHRpb24gdGhpbmcgdG8gaGlkZSB0aGUgZmFjdCB0aGF0IHdlIG1heSBoYXZlCisJCQkJCSAqIHN0YXJ0ZWQgdG8gcGFyc2UgYWdncmVnYXRlZCBzdHVmZgorCQkJCQkgKgorCQkJCQkgKiBUaGlzIGlzIGxlYWt5LCB0b28gYmFkLgorCQkJCQkgKi8KKwkJCQkJY3R4LT5hcmd2WzBdID0geHN0cmR1cChjdHgtPm9wdCAtIDEpOworCQkJCQkqKGNoYXIgKiljdHgtPmFyZ3ZbMF0gPSAnLSc7CisJCQkJCWdvdG8gdW5rbm93bjsKKwkJCQljYXNlIFBBUlNFX09QVF9OT05fT1BUSU9OOgorCQkJCWNhc2UgUEFSU0VfT1BUX0NPTVBMRVRFOgorCQkJCWNhc2UgUEFSU0VfT1BUX0hFTFA6CisJCQkJCUJVRygicGFyc2Vfc2hvcnRfb3B0KCkgY2Fubm90IHJldHVybiB0aGVzZSIpOworCQkJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFhcmdbMl0gLyogIi0tIiAqLyB8fAorCQkgICAgIXN0cmNtcChhcmcgKyAyLCAiZW5kLW9mLW9wdGlvbnMiKSkgeworCQkJaWYgKCEoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKSkgeworCQkJCWN0eC0+YXJnYy0tOworCQkJCWN0eC0+YXJndisrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAhc3RyY21wKGFyZyArIDIsICJoZWxwLWFsbCIpKQorCQkJcmV0dXJuIHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChjdHgsIHVzYWdlc3RyLCBvcHRpb25zLCAxLCAwKTsKKwkJaWYgKGludGVybmFsX2hlbHAgJiYgIXN0cmNtcChhcmcgKyAyLCAiaGVscCIpKQorCQkJZ290byBzaG93X3VzYWdlOworCQlzd2l0Y2ggKHBhcnNlX2xvbmdfb3B0KGN0eCwgYXJnICsgMiwgb3B0aW9ucykpIHsKKwkJY2FzZSBQQVJTRV9PUFRfRVJST1I6CisJCQlyZXR1cm4gUEFSU0VfT1BUX0VSUk9SOworCQljYXNlIFBBUlNFX09QVF9VTktOT1dOOgorCQkJZ290byB1bmtub3duOworCQljYXNlIFBBUlNFX09QVF9IRUxQOgorCQkJZ290byBzaG93X3VzYWdlOworCQljYXNlIFBBUlNFX09QVF9OT05fT1BUSU9OOgorCQljYXNlIFBBUlNFX09QVF9DT01QTEVURToKKwkJCUJVRygicGFyc2VfbG9uZ19vcHQoKSBjYW5ub3QgcmV0dXJuIHRoZXNlIik7CisJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCQlicmVhazsKKwkJfQorCQljb250aW51ZTsKK3Vua25vd246CisJCWlmIChjdHgtPmZsYWdzICYgUEFSU0VfT1BUX09ORV9TSE9UKQorCQkJYnJlYWs7CisJCWlmICghKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKSkKKwkJCXJldHVybiBQQVJTRV9PUFRfVU5LTk9XTjsKKwkJY3R4LT5vdXRbY3R4LT5jcGlkeCsrXSA9IGN0eC0+YXJndlswXTsKKwkJY3R4LT5vcHQgPSBOVUxMOworCX0KKwlyZXR1cm4gUEFSU0VfT1BUX0RPTkU7CisKKyBzaG93X3VzYWdlOgorCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwoY3R4LCB1c2FnZXN0ciwgb3B0aW9ucywgMCwgMCk7Cit9CisKK2ludCBwYXJzZV9vcHRpb25zX2VuZChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgpCit7CisJaWYgKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfT05FX1NIT1QpCisJCXJldHVybiBjdHgtPnRvdGFsIC0gY3R4LT5hcmdjOworCisJTU9WRV9BUlJBWShjdHgtPm91dCArIGN0eC0+Y3BpZHgsIGN0eC0+YXJndiwgY3R4LT5hcmdjKTsKKwljdHgtPm91dFtjdHgtPmNwaWR4ICsgY3R4LT5hcmdjXSA9IE5VTEw7CisJcmV0dXJuIGN0eC0+Y3BpZHggKyBjdHgtPmFyZ2M7Cit9CisKK2ludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdLAorCQkgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90IGN0eDsKKwlzdHJ1Y3Qgb3B0aW9uICpyZWFsX29wdGlvbnM7CisKKwlkaXNhbGxvd19hYmJyZXZpYXRlZF9vcHRpb25zID0KKwkJZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9ESVNBTExPV19BQkJSRVZJQVRFRF9PUFRJT05TIiwgMCk7CisKKwltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOworCXJlYWxfb3B0aW9ucyA9IHByZXByb2Nlc3Nfb3B0aW9ucygmY3R4LCBvcHRpb25zKTsKKwlpZiAocmVhbF9vcHRpb25zKQorCQlvcHRpb25zID0gcmVhbF9vcHRpb25zOworCXBhcnNlX29wdGlvbnNfc3RhcnRfMSgmY3R4LCBhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGZsYWdzKTsKKwlzd2l0Y2ggKHBhcnNlX29wdGlvbnNfc3RlcCgmY3R4LCBvcHRpb25zLCB1c2FnZXN0cikpIHsKKwljYXNlIFBBUlNFX09QVF9IRUxQOgorCWNhc2UgUEFSU0VfT1BUX0VSUk9SOgorCQlleGl0KDEyOSk7CisJY2FzZSBQQVJTRV9PUFRfQ09NUExFVEU6CisJCWV4aXQoMCk7CisJY2FzZSBQQVJTRV9PUFRfTk9OX09QVElPTjoKKwljYXNlIFBBUlNFX09QVF9ET05FOgorCQlicmVhazsKKwlkZWZhdWx0OiAvKiBQQVJTRV9PUFRfVU5LTk9XTiAqLworCQlpZiAoY3R4LmFyZ3ZbMF1bMV0gPT0gJy0nKSB7CisJCQllcnJvcihfKCJ1bmtub3duIG9wdGlvbiBgJXMnIiksIGN0eC5hcmd2WzBdICsgMik7CisJCX0gZWxzZSBpZiAoaXNhc2NpaSgqY3R4Lm9wdCkpIHsKKwkJCWVycm9yKF8oInVua25vd24gc3dpdGNoIGAlYyciKSwgKmN0eC5vcHQpOworCQl9IGVsc2UgeworCQkJZXJyb3IoXygidW5rbm93biBub24tYXNjaWkgb3B0aW9uIGluIHN0cmluZzogYCVzJyIpLAorCQkJICAgICAgY3R4LmFyZ3ZbMF0pOworCQl9CisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZXN0ciwgb3B0aW9ucyk7CisJfQorCisJcHJlY29tcG9zZV9hcmd2KGFyZ2MsIGFyZ3YpOworCWZyZWUocmVhbF9vcHRpb25zKTsKKwlmcmVlKGN0eC5hbGlhc19ncm91cHMpOworCXJldHVybiBwYXJzZV9vcHRpb25zX2VuZCgmY3R4KTsKK30KKworc3RhdGljIGludCB1c2FnZV9hcmdoKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIEZJTEUgKm91dGZpbGUpCit7CisJY29uc3QgY2hhciAqczsKKwlpbnQgbGl0ZXJhbCA9IChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFApIHx8CisJCSFvcHRzLT5hcmdoIHx8ICEhc3RycGJyayhvcHRzLT5hcmdoLCAiKCk8PltdfCIpOworCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCisJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQlzID0gbGl0ZXJhbCA/ICJbPSVzXSIgOiAiWz08JXM+XSI7CisJCWVsc2UKKwkJCXMgPSBsaXRlcmFsID8gIlslc10iIDogIls8JXM+XSI7CisJZWxzZQorCQlzID0gbGl0ZXJhbCA/ICIgJXMiIDogIiA8JXM+IjsKKwlyZXR1cm4gdXRmOF9mcHJpbnRmKG91dGZpbGUsIHMsIG9wdHMtPmFyZ2ggPyBfKG9wdHMtPmFyZ2gpIDogXygiLi4uIikpOworfQorCisjZGVmaW5lIFVTQUdFX09QVFNfV0lEVEggMjQKKyNkZWZpbmUgVVNBR0VfR0FQICAgICAgICAgMgorCitzdGF0aWMgaW50IHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIGludCBmdWxsLCBpbnQgZXJyKQoreworCUZJTEUgKm91dGZpbGUgPSBlcnIgPyBzdGRlcnIgOiBzdGRvdXQ7CisJaW50IG5lZWRfbmV3bGluZTsKKworCWlmICghdXNhZ2VzdHIpCisJCXJldHVybiBQQVJTRV9PUFRfSEVMUDsKKworCWlmICghZXJyICYmIGN0eCAmJiBjdHgtPmZsYWdzICYgUEFSU0VfT1BUX1NIRUxMX0VWQUwpCisJCWZwcmludGYob3V0ZmlsZSwgImNhdCA8PFxcRU9GXG4iKTsKKworCWZwcmludGZfbG4ob3V0ZmlsZSwgXygidXNhZ2U6ICVzIiksIF8oKnVzYWdlc3RyKyspKTsKKwl3aGlsZSAoKnVzYWdlc3RyICYmICoqdXNhZ2VzdHIpCisJCS8qCisJCSAqIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKwkJICogb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorCQkgKi8KKwkJZnByaW50Zl9sbihvdXRmaWxlLCBfKCIgICBvcjogJXMiKSwgXygqdXNhZ2VzdHIrKykpOworCXdoaWxlICgqdXNhZ2VzdHIpIHsKKwkJaWYgKCoqdXNhZ2VzdHIpCisJCQlmcHJpbnRmX2xuKG91dGZpbGUsIF8oIiAgICAlcyIpLCBfKCp1c2FnZXN0cikpOworCQllbHNlCisJCQlmcHV0YygnXG4nLCBvdXRmaWxlKTsKKwkJdXNhZ2VzdHIrKzsKKwl9CisKKwluZWVkX25ld2xpbmUgPSAxOworCisJZm9yICg7IG9wdHMtPnR5cGUgIT0gT1BUSU9OX0VORDsgb3B0cysrKSB7CisJCXNpemVfdCBwb3M7CisJCWludCBwYWQ7CisKKwkJaWYgKG9wdHMtPnR5cGUgPT0gT1BUSU9OX0dST1VQKSB7CisJCQlmcHV0YygnXG4nLCBvdXRmaWxlKTsKKwkJCW5lZWRfbmV3bGluZSA9IDA7CisJCQlpZiAoKm9wdHMtPmhlbHApCisJCQkJZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIF8ob3B0cy0+aGVscCkpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmdWxsICYmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9ISURERU4pKQorCQkJY29udGludWU7CisKKwkJaWYgKG5lZWRfbmV3bGluZSkgeworCQkJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisJCQluZWVkX25ld2xpbmUgPSAwOworCQl9CisKKwkJcG9zID0gZnByaW50ZihvdXRmaWxlLCAiICAgICIpOworCQlpZiAob3B0cy0+c2hvcnRfbmFtZSkgeworCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkKKwkJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiJWMiLCBvcHRzLT5zaG9ydF9uYW1lKTsKKwkJCWVsc2UKKwkJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiLSVjIiwgb3B0cy0+c2hvcnRfbmFtZSk7CisJCX0KKwkJaWYgKG9wdHMtPmxvbmdfbmFtZSAmJiBvcHRzLT5zaG9ydF9uYW1lKQorCQkJcG9zICs9IGZwcmludGYob3V0ZmlsZSwgIiwgIik7CisJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiLS0lcyIsIG9wdHMtPmxvbmdfbmFtZSk7CisJCWlmIChvcHRzLT50eXBlID09IE9QVElPTl9OVU1CRVIpCisJCQlwb3MgKz0gdXRmOF9mcHJpbnRmKG91dGZpbGUsIF8oIi1OVU0iKSk7CisKKwkJaWYgKChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFApIHx8CisJCSAgICAhKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PQVJHKSkKKwkJCXBvcyArPSB1c2FnZV9hcmdoKG9wdHMsIG91dGZpbGUpOworCisJCWlmIChwb3MgPD0gVVNBR0VfT1BUU19XSURUSCkKKwkJCXBhZCA9IFVTQUdFX09QVFNfV0lEVEggLSBwb3M7CisJCWVsc2UgeworCQkJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisJCQlwYWQgPSBVU0FHRV9PUFRTX1dJRFRIOworCQl9CisJCWlmIChvcHRzLT50eXBlID09IE9QVElPTl9BTElBUykgeworCQkJZnByaW50ZihvdXRmaWxlLCAiJSpzIiwgcGFkICsgVVNBR0VfR0FQLCAiIik7CisJCQlmcHJpbnRmX2xuKG91dGZpbGUsIF8oImFsaWFzIG9mIC0tJXMiKSwKKwkJCQkgICAoY29uc3QgY2hhciAqKW9wdHMtPnZhbHVlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZwcmludGYob3V0ZmlsZSwgIiUqcyVzXG4iLCBwYWQgKyBVU0FHRV9HQVAsICIiLCBfKG9wdHMtPmhlbHApKTsKKwl9CisJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisKKwlpZiAoIWVyciAmJiBjdHggJiYgY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TSEVMTF9FVkFMKQorCQlmcHV0cygiRU9GXG4iLCBvdXRmaWxlKTsKKworCXJldHVybiBQQVJTRV9PUFRfSEVMUDsKK30KKwordm9pZCBOT1JFVFVSTiB1c2FnZV93aXRoX29wdGlvbnMoY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKKwkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpCit7CisJdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKE5VTEwsIHVzYWdlc3RyLCBvcHRzLCAwLCAxKTsKKwlleGl0KDEyOSk7Cit9CisKK3ZvaWQgTk9SRVRVUk4gdXNhZ2VfbXNnX29wdChjb25zdCBjaGFyICptc2csCisJCSAgIGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCSAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJZnByaW50ZihzdGRlcnIsICJmYXRhbDogJXNcblxuIiwgbXNnKTsKKwl1c2FnZV93aXRoX29wdGlvbnModXNhZ2VzdHIsIG9wdGlvbnMpOworfQorCitjb25zdCBjaGFyICpvcHRuYW1lKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgaW50IGZsYWdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlpZiAoZmxhZ3MgJiBPUFRfU0hPUlQpCisJCXN0cmJ1Zl9hZGRmKCZzYiwgInN3aXRjaCBgJWMnIiwgb3B0LT5zaG9ydF9uYW1lKTsKKwllbHNlIGlmIChmbGFncyAmIE9QVF9VTlNFVCkKKwkJc3RyYnVmX2FkZGYoJnNiLCAib3B0aW9uIGBuby0lcyciLCBvcHQtPmxvbmdfbmFtZSk7CisJZWxzZQorCQlzdHJidWZfYWRkZigmc2IsICJvcHRpb24gYCVzJyIsIG9wdC0+bG9uZ19uYW1lKTsKKworCXJldHVybiBzYi5idWY7Cit9CmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLmggYi9wYXJzZS1vcHRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjZTViYQotLS0gL2Rldi9udWxsCisrKyBiL3BhcnNlLW9wdGlvbnMuaApAQCAtMCwwICsxLDM0MCBAQAorI2lmbmRlZiBQQVJTRV9PUFRJT05TX0gKKyNkZWZpbmUgUEFSU0VfT1BUSU9OU19ICisKKy8qKgorICogUmVmZXIgdG8gRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0IGZvciB0aGUgQVBJIGRvYy4KKyAqLworCitlbnVtIHBhcnNlX29wdF90eXBlIHsKKwkvKiBzcGVjaWFsIHR5cGVzICovCisJT1BUSU9OX0VORCwKKwlPUFRJT05fQVJHVU1FTlQsCisJT1BUSU9OX0dST1VQLAorCU9QVElPTl9OVU1CRVIsCisJT1BUSU9OX0FMSUFTLAorCS8qIG9wdGlvbnMgd2l0aCBubyBhcmd1bWVudHMgKi8KKwlPUFRJT05fQklULAorCU9QVElPTl9ORUdCSVQsCisJT1BUSU9OX0JJVE9QLAorCU9QVElPTl9DT1VOVFVQLAorCU9QVElPTl9TRVRfSU5ULAorCS8qIG9wdGlvbnMgd2l0aCBhcmd1bWVudHMgKHVzdWFsbHkpICovCisJT1BUSU9OX1NUUklORywKKwlPUFRJT05fSU5URUdFUiwKKwlPUFRJT05fTUFHTklUVURFLAorCU9QVElPTl9DQUxMQkFDSywKKwlPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssCisJT1BUSU9OX0ZJTEVOQU1FCit9OworCitlbnVtIHBhcnNlX29wdF9mbGFncyB7CisJUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggPSAxLAorCVBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04gPSAyLAorCVBBUlNFX09QVF9LRUVQX0FSR1YwID0gNCwKKwlQQVJTRV9PUFRfS0VFUF9VTktOT1dOID0gOCwKKwlQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUCA9IDE2LAorCVBBUlNFX09QVF9PTkVfU0hPVCA9IDMyCit9OworCitlbnVtIHBhcnNlX29wdF9vcHRpb25fZmxhZ3MgeworCVBBUlNFX09QVF9PUFRBUkcgID0gMSwKKwlQQVJTRV9PUFRfTk9BUkcgICA9IDIsCisJUEFSU0VfT1BUX05PTkVHICAgPSA0LAorCVBBUlNFX09QVF9ISURERU4gID0gOCwKKwlQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUID0gMTYsCisJUEFSU0VfT1BUX05PREFTSCA9IDMyLAorCVBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAgPSA2NCwKKwlQQVJTRV9PUFRfU0hFTExfRVZBTCA9IDI1NiwKKwlQQVJTRV9PUFRfTk9DT01QTEVURSA9IDUxMiwKKwlQQVJTRV9PUFRfQ09NUF9BUkcgPSAxMDI0LAorCVBBUlNFX09QVF9DTURNT0RFID0gMjA0OAorfTsKKworZW51bSBwYXJzZV9vcHRfcmVzdWx0IHsKKwlQQVJTRV9PUFRfQ09NUExFVEUgPSAtMywKKwlQQVJTRV9PUFRfSEVMUCA9IC0yLAorCVBBUlNFX09QVF9FUlJPUiA9IC0xLAkvKiBtdXN0IGJlIHRoZSBzYW1lIGFzIGVycm9yKCkgKi8KKwlQQVJTRV9PUFRfRE9ORSA9IDAsCS8qIGZpeGVkIHNvIHRoYXQgInJldHVybiAwIiB3b3JrcyAqLworCVBBUlNFX09QVF9OT05fT1BUSU9OLAorCVBBUlNFX09QVF9VTktOT1dOCit9OworCitzdHJ1Y3Qgb3B0aW9uOwordHlwZWRlZiBpbnQgcGFyc2Vfb3B0X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworCitzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90OwordHlwZWRlZiBlbnVtIHBhcnNlX29wdF9yZXN1bHQgcGFyc2Vfb3B0X2xsX2NiKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CisKKy8qCisgKiBgdHlwZWA6OgorICogICBob2xkcyB0aGUgdHlwZSBvZiB0aGUgb3B0aW9uLCB5b3UgbXVzdCBoYXZlIGFuIE9QVElPTl9FTkQgbGFzdCBpbiB5b3VyCisgKiAgIGFycmF5LgorICoKKyAqIGBzaG9ydF9uYW1lYDo6CisgKiAgIHRoZSBjaGFyYWN0ZXIgdG8gdXNlIGFzIGEgc2hvcnQgb3B0aW9uIG5hbWUsICdcMCcgaWYgbm9uZS4KKyAqCisgKiBgbG9uZ19uYW1lYDo6CisgKiAgIHRoZSBsb25nIG9wdGlvbiBuYW1lLCB3aXRob3V0IHRoZSBsZWFkaW5nIGRhc2hlcywgTlVMTCBpZiBub25lLgorICoKKyAqIGB2YWx1ZWA6OgorICogICBzdG9yZXMgcG9pbnRlcnMgdG8gdGhlIHZhbHVlcyB0byBiZSBmaWxsZWQuCisgKgorICogYGFyZ2hgOjoKKyAqICAgdG9rZW4gdG8gZXhwbGFpbiB0aGUga2luZCBvZiBhcmd1bWVudCB0aGlzIG9wdGlvbiB3YW50cy4gS2VlcCBpdAorICogICBob21vZ2VuZW91cyBhY3Jvc3MgdGhlIHJlcG9zaXRvcnkuIFNob3VsZCBiZSB3cmFwcGVkIGJ5IE5fKCkgZm9yCisgKiAgIHRyYW5zbGF0aW9uLgorICoKKyAqIGBoZWxwYDo6CisgKiAgIHRoZSBzaG9ydCBoZWxwIGFzc29jaWF0ZWQgdG8gd2hhdCB0aGUgb3B0aW9uIGRvZXMuCisgKiAgIE11c3QgbmV2ZXIgYmUgTlVMTCAoZXhjZXB0IGZvciBPUFRJT05fRU5EKS4KKyAqICAgT1BUSU9OX0dST1VQIHVzZXMgdGhpcyBwb2ludGVyIHRvIHN0b3JlIHRoZSBncm91cCBoZWFkZXIuCisgKiAgIFNob3VsZCBiZSB3cmFwcGVkIGJ5IE5fKCkgZm9yIHRyYW5zbGF0aW9uLgorICoKKyAqIGBmbGFnc2A6OgorICogICBtYXNrIG9mIHBhcnNlX29wdF9vcHRpb25fZmxhZ3MuCisgKiAgIFBBUlNFX09QVF9PUFRBUkc6IHNheXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgb3B0aW9uYWwgKG5vdCBmb3IgQk9PTEVBTnMpCisgKiAgIFBBUlNFX09QVF9OT0FSRzogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnQKKyAqICAgUEFSU0VfT1BUX05PTkVHOiBzYXlzIHRoYXQgdGhpcyBvcHRpb24gY2Fubm90IGJlIG5lZ2F0ZWQKKyAqICAgUEFSU0VfT1BUX0hJRERFTjogdGhpcyBvcHRpb24gaXMgc2tpcHBlZCBpbiB0aGUgZGVmYXVsdCB1c2FnZSwgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgIHNob3duIG9ubHkgaW4gdGhlIGZ1bGwgdXNhZ2UuCisgKiAgIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQ6IHNheXMgdGhhdCB0aGlzIG9wdGlvbiB3aWxsIHRha2UgdGhlIGRlZmF1bHQKKyAqCQkJCXZhbHVlIGlmIG5vIGFyZ3VtZW50IGlzIGdpdmVuIHdoZW4gdGhlIG9wdGlvbgorICoJCQkJaXMgbGFzdCBvbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB0aGUgb3B0aW9uIGlzCisgKgkJCQlub3QgbGFzdCBpdCB3aWxsIHJlcXVpcmUgYW4gYXJndW1lbnQuCisgKgkJCQlTaG91bGQgbm90IGJlIHVzZWQgd2l0aCBQQVJTRV9PUFRfT1BUQVJHLgorICogICBQQVJTRV9PUFRfTk9EQVNIOiB0aGlzIG9wdGlvbiBkb2Vzbid0IHN0YXJ0IHdpdGggYSBkYXNoLgorICogICBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQOiBzYXlzIHRoYXQgYXJnaCBzaG91bGRuJ3QgYmUgZW5jbG9zZWQgaW4gYnJhY2tldHMKKyAqCQkJCShpLmUuICc8YXJnaD4nKSBpbiB0aGUgaGVscCBtZXNzYWdlLgorICoJCQkJVXNlZnVsIGZvciBvcHRpb25zIHdpdGggbXVsdGlwbGUgcGFyYW1ldGVycy4KKyAqICAgUEFSU0VfT1BUX05PQ09NUExFVEU6IGJ5IGRlZmF1bHQgYWxsIHZpc2libGUgb3B0aW9ucyBhcmUgY29tcGxldGFibGUKKyAqCQkJICAgYnkgZ2l0LWNvbXBsZXRpb24uYmFzaC4gVGhpcyBvcHRpb24gc3VwcHJlc3NlcyB0aGF0LgorICogICBQQVJTRV9PUFRfQ09NUF9BUkc6IHRoaXMgb3B0aW9uIGZvcmNlcyB0byBnaXQtY29tcGxldGlvbi5iYXNoIHRvCisgKgkJCSBjb21wbGV0ZSBhbiBvcHRpb24gYXMgLS1uYW1lPSBub3QgLS1uYW1lIGV2ZW4gaWYKKyAqCQkJIHRoZSBvcHRpb24gdGFrZXMgb3B0aW9uYWwgYXJndW1lbnQuCisgKgorICogYGNhbGxiYWNrYDo6CisgKiAgIHBvaW50ZXIgdG8gdGhlIGNhbGxiYWNrIHRvIHVzZSBmb3IgT1BUSU9OX0NBTExCQUNLCisgKgorICogYGRlZnZhbGA6OgorICogICBkZWZhdWx0IHZhbHVlIHRvIGZpbGwgKCotPnZhbHVlKSB3aXRoIGZvciBQQVJTRV9PUFRfT1BUQVJHLgorICogICBPUFRJT05fe0JJVCxTRVRfSU5UfSBzdG9yZSB0aGUge21hc2ssaW50ZWdlcn0gdG8gcHV0IGluIHRoZSB2YWx1ZSB3aGVuIG1ldC4KKyAqICAgQ0FMTEJBQ0tTIGNhbiB1c2UgaXQgbGlrZSB0aGV5IHdhbnQuCisgKgorICogYGxsX2NhbGxiYWNrYDo6CisgKiAgIHBvaW50ZXIgdG8gdGhlIGNhbGxiYWNrIHRvIHVzZSBmb3IgT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLCisgKgorICovCitzdHJ1Y3Qgb3B0aW9uIHsKKwllbnVtIHBhcnNlX29wdF90eXBlIHR5cGU7CisJaW50IHNob3J0X25hbWU7CisJY29uc3QgY2hhciAqbG9uZ19uYW1lOworCXZvaWQgKnZhbHVlOworCWNvbnN0IGNoYXIgKmFyZ2g7CisJY29uc3QgY2hhciAqaGVscDsKKworCWludCBmbGFnczsKKwlwYXJzZV9vcHRfY2IgKmNhbGxiYWNrOworCWludHB0cl90IGRlZnZhbDsKKwlwYXJzZV9vcHRfbGxfY2IgKmxsX2NhbGxiYWNrOworCWludHB0cl90IGV4dHJhOworfTsKKworI2RlZmluZSBPUFRfQklUX0YocywgbCwgdiwgaCwgYiwgZikgeyBPUFRJT05fQklULCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIFwKKwkJCQkgICAgICBQQVJTRV9PUFRfTk9BUkd8KGYpLCBOVUxMLCAoYikgfQorI2RlZmluZSBPUFRfQ09VTlRVUF9GKHMsIGwsIHYsIGgsIGYpIHsgT1BUSU9OX0NPVU5UVVAsIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkd8KGYpIH0KKyNkZWZpbmUgT1BUX1NFVF9JTlRfRihzLCBsLCB2LCBoLCBpLCBmKSB7IE9QVElPTl9TRVRfSU5ULCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJCSAgKGgpLCBQQVJTRV9PUFRfTk9BUkcgfCAoZiksIE5VTEwsIChpKSB9CisjZGVmaW5lIE9QVF9CT09MX0YocywgbCwgdiwgaCwgZikgICBPUFRfU0VUX0lOVF9GKHMsIGwsIHYsIGgsIDEsIGYpCisjZGVmaW5lIE9QVF9DQUxMQkFDS19GKHMsIGwsIHYsIGEsIGgsIGYsIGNiKQkJCVwKKwl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgKGEpLCAoaCksIChmKSwgKGNiKSB9CisjZGVmaW5lIE9QVF9TVFJJTkdfRihzLCBsLCB2LCBhLCBoLCBmKSAgIHsgT1BUSU9OX1NUUklORywgIChzKSwgKGwpLCAodiksIChhKSwgKGgpLCAoZikgfQorI2RlZmluZSBPUFRfSU5URUdFUl9GKHMsIGwsIHYsIGgsIGYpICAgICB7IE9QVElPTl9JTlRFR0VSLCAocyksIChsKSwgKHYpLCBOXygibiIpLCAoaCksIChmKSB9CisKKyNkZWZpbmUgT1BUX0VORCgpICAgICAgICAgICAgICAgICAgIHsgT1BUSU9OX0VORCB9CisjZGVmaW5lIE9QVF9BUkdVTUVOVChsLCB2LCBoKSAgICAgICB7IE9QVElPTl9BUkdVTUVOVCwgMCwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRywgTlVMTCwgMSB9CisjZGVmaW5lIE9QVF9HUk9VUChoKSAgICAgICAgICAgICAgICB7IE9QVElPTl9HUk9VUCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgKGgpIH0KKyNkZWZpbmUgT1BUX0JJVChzLCBsLCB2LCBoLCBiKSAgICAgIE9QVF9CSVRfRihzLCBsLCB2LCBoLCBiLCAwKQorI2RlZmluZSBPUFRfQklUT1AocywgbCwgdiwgaCwgc2V0LCBjbGVhcikgeyBPUFRJT05fQklUT1AsIChzKSwgKGwpLCAodiksIE5VTEwsIChoKSwgXAorCQkJCQkgICAgUEFSU0VfT1BUX05PQVJHfFBBUlNFX09QVF9OT05FRywgTlVMTCwgXAorCQkJCQkgICAgKHNldCksIE5VTEwsIChjbGVhcikgfQorI2RlZmluZSBPUFRfTkVHQklUKHMsIGwsIHYsIGgsIGIpICAgeyBPUFRJT05fTkVHQklULCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChiKSB9CisjZGVmaW5lIE9QVF9DT1VOVFVQKHMsIGwsIHYsIGgpICAgICBPUFRfQ09VTlRVUF9GKHMsIGwsIHYsIGgsIDApCisjZGVmaW5lIE9QVF9TRVRfSU5UKHMsIGwsIHYsIGgsIGkpICBPUFRfU0VUX0lOVF9GKHMsIGwsIHYsIGgsIGksIDApCisjZGVmaW5lIE9QVF9CT09MKHMsIGwsIHYsIGgpICAgICAgICBPUFRfQk9PTF9GKHMsIGwsIHYsIGgsIDApCisjZGVmaW5lIE9QVF9ISURERU5fQk9PTChzLCBsLCB2LCBoKSB7IE9QVElPTl9TRVRfSU5ULCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfSElEREVOLCBOVUxMLCAxfQorI2RlZmluZSBPUFRfQ01ETU9ERShzLCBsLCB2LCBoLCBpKSAgeyBPUFRJT05fU0VUX0lOVCwgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX0NNRE1PREV8UEFSU0VfT1BUX05PQVJHfFBBUlNFX09QVF9OT05FRywgTlVMTCwgKGkpIH0KKyNkZWZpbmUgT1BUX0lOVEVHRVIocywgbCwgdiwgaCkgICAgIE9QVF9JTlRFR0VSX0YocywgbCwgdiwgaCwgMCkKKyNkZWZpbmUgT1BUX01BR05JVFVERShzLCBsLCB2LCBoKSAgIHsgT1BUSU9OX01BR05JVFVERSwgKHMpLCAobCksICh2KSwgXAorCQkJCSAgICAgIE5fKCJuIiksIChoKSwgUEFSU0VfT1BUX05PTkVHIH0KKyNkZWZpbmUgT1BUX1NUUklORyhzLCBsLCB2LCBhLCBoKSAgIE9QVF9TVFJJTkdfRihzLCBsLCB2LCBhLCBoLCAwKQorI2RlZmluZSBPUFRfU1RSSU5HX0xJU1QocywgbCwgdiwgYSwgaCkgXAorCQkJCSAgICB7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgKGEpLCBcCisJCQkJICAgICAgKGgpLCAwLCAmcGFyc2Vfb3B0X3N0cmluZ19saXN0IH0KKyNkZWZpbmUgT1BUX1VZTihzLCBsLCB2LCBoKSAgICAgICAgIHsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsICZwYXJzZV9vcHRfdGVydGlhcnkgfQorI2RlZmluZSBPUFRfRVhQSVJZX0RBVEUocywgbCwgdiwgaCkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOXygiZXhwaXJ5LWRhdGUiKSwoaCksIDAsCVwKKwkgIHBhcnNlX29wdF9leHBpcnlfZGF0ZV9jYiB9CisjZGVmaW5lIE9QVF9DQUxMQkFDSyhzLCBsLCB2LCBhLCBoLCBmKSBPUFRfQ0FMTEJBQ0tfRihzLCBsLCB2LCBhLCBoLCAwLCBmKQorI2RlZmluZSBPUFRfTlVNQkVSX0NBTExCQUNLKHYsIGgsIGYpIFwKKwl7IE9QVElPTl9OVU1CRVIsIDAsIE5VTEwsICh2KSwgTlVMTCwgKGgpLCBcCisJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIChmKSB9CisjZGVmaW5lIE9QVF9GSUxFTkFNRShzLCBsLCB2LCBoKSAgICB7IE9QVElPTl9GSUxFTkFNRSwgKHMpLCAobCksICh2KSwgXAorCQkJCSAgICAgICBOXygiZmlsZSIpLCAoaCkgfQorI2RlZmluZSBPUFRfQ09MT1JfRkxBRyhzLCBsLCB2LCBoKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIE5fKCJ3aGVuIiksIChoKSwgUEFSU0VfT1BUX09QVEFSRywgXAorCQlwYXJzZV9vcHRfY29sb3JfZmxhZ19jYiwgKGludHB0cl90KSJhbHdheXMiIH0KKworI2RlZmluZSBPUFRfTk9PUF9OT0FSRyhzLCBsKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCBOVUxMLCBOVUxMLCBcCisJICBOXygibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIiksCQlcCisJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHLCBwYXJzZV9vcHRfbm9vcF9jYiB9CisKKyNkZWZpbmUgT1BUX0FMSUFTKHMsIGwsIHNvdXJjZV9sb25nX25hbWUpIFwKKwl7IE9QVElPTl9BTElBUywgKHMpLCAobCksIChzb3VyY2VfbG9uZ19uYW1lKSB9CisKKy8qCisgKiBwYXJzZV9vcHRpb25zKCkgd2lsbCBmaWx0ZXIgb3V0IHRoZSBwcm9jZXNzZWQgb3B0aW9ucyBhbmQgbGVhdmUgdGhlCisgKiBub24tb3B0aW9uIGFyZ3VtZW50cyBpbiBhcmd2W10uIGFyZ3YwIGlzIGFzc3VtZWQgcHJvZ3JhbSBuYW1lIGFuZAorICogc2tpcHBlZC4KKyAqCisgKiB1c2FnZXN0ciBzdHJpbmdzIHNob3VsZCBiZSBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uIHdpdGggTl8oKS4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGxlZnQgaW4gYXJndltdLgorICoKKyAqIEluIG9uZS1zaG90IG1vZGUsIGFyZ3YwIGlzIG5vdCBhIHByb2dyYW0gbmFtZSwgYXJndltdIGlzIGxlZnQKKyAqIHVudG91Y2hlZCBhbmQgcGFyc2Vfb3B0aW9ucygpIHJldHVybnMgdGhlIG51bWJlciBvZiBvcHRpb25zCisgKiBwcm9jZXNzZWQuCisgKi8KK2ludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCSAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sIGludCBmbGFncyk7CisKK05PUkVUVVJOIHZvaWQgdXNhZ2Vfd2l0aF9vcHRpb25zKGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQkJIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpOworCitOT1JFVFVSTiB2b2lkIHVzYWdlX21zZ19vcHQoY29uc3QgY2hhciAqbXNnLAorCQkJICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQkgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucyk7CisKK2ludCBvcHRidWcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICpyZWFzb24pOworY29uc3QgY2hhciAqb3B0bmFtZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGludCBmbGFncyk7CisKKy8qCisgKiBVc2UgdGhlc2UgYXNzZXJ0aW9ucyBmb3IgY2FsbGJhY2tzIHRoYXQgZXhwZWN0IHRvIGJlIGNhbGxlZCB3aXRoIE5PTkVHIGFuZAorICogTk9BUkcgcmVzcGVjdGl2ZWx5LCBhbmQgZG8gbm90IG90aGVyd2lzZSBoYW5kbGUgdGhlICJ1bnNldCIgYW5kICJhcmciCisgKiBwYXJhbWV0ZXJzLgorICovCisjZGVmaW5lIEJVR19PTl9PUFRfTkVHKHVuc2V0KSBkbyB7IFwKKwlpZiAoKHVuc2V0KSkgXAorCQlCVUcoIm9wdGlvbiBjYWxsYmFjayBkb2VzIG5vdCBleHBlY3QgbmVnYXRpb24iKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgQlVHX09OX09QVF9BUkcoYXJnKSBkbyB7IFwKKwlpZiAoKGFyZykpIFwKKwkJQlVHKCJvcHRpb24gY2FsbGJhY2sgZG9lcyBub3QgZXhwZWN0IGFuIGFyZ3VtZW50Iik7IFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBTaW1pbGFyIHRvIHRoZSBhc3NlcnRpb25zIGFib3ZlLCBidXQgY2hlY2tzIHRoYXQgImFyZyIgaXMgYWx3YXlzIG5vbi1OVUxMLgorICogVGhpcyBhc3NlcnRpb24gYWxzbyBpbXBsaWVzIEJVR19PTl9PUFRfTkVHKCksIGxldHRpbmcgeW91IGRlY2xhcmUgYm90aAorICogYXNzZXJ0aW9ucyBpbiBhIHNpbmdsZSBsaW5lLgorICovCisjZGVmaW5lIEJVR19PTl9PUFRfTkVHX05PQVJHKHVuc2V0LCBhcmcpIGRvIHsgXAorCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsgXAorCWlmKCEoYXJnKSkgXAorCQlCVUcoIm9wdGlvbiBjYWxsYmFjayBleHBlY3RzIGFuIGFyZ3VtZW50Iik7IFwKK30gd2hpbGUoMCkKKworLyotLS0tLSBpbmNyZW1lbnRhbCBhZHZhbmNlZCBBUElzIC0tLS0tKi8KKworLyoKKyAqIEl0J3Mgb2theSBmb3IgdGhlIGNhbGxlciB0byBjb25zdW1lIGFyZ3YvYXJnYyBpbiB0aGUgdXN1YWwgd2F5LgorICogT3RoZXIgZmllbGRzIG9mIHRoYXQgc3RydWN0dXJlIGFyZSBwcml2YXRlIHRvIHBhcnNlLW9wdGlvbnMgYW5kIHNob3VsZCBub3QKKyAqIGJlIG1vZGlmaWVkIGluIGFueSB3YXkuCisgKi8KK3N0cnVjdCBwYXJzZV9vcHRfY3R4X3QgeworCWNvbnN0IGNoYXIgKiphcmd2OworCWNvbnN0IGNoYXIgKipvdXQ7CisJaW50IGFyZ2MsIGNwaWR4LCB0b3RhbDsKKwljb25zdCBjaGFyICpvcHQ7CisJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwljb25zdCBjaGFyICoqYWxpYXNfZ3JvdXBzOyAvKiBtdXN0IGJlIGluIGdyb3VwcyBvZiAzIGVsZW1lbnRzISAqLworCXN0cnVjdCBvcHRpb24gKnVwZGF0ZWRfb3B0aW9uczsKK307CisKK3ZvaWQgcGFyc2Vfb3B0aW9uc19zdGFydChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywgaW50IGZsYWdzKTsKKworaW50IHBhcnNlX29wdGlvbnNfc3RlcChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10pOworCitpbnQgcGFyc2Vfb3B0aW9uc19lbmQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4KTsKKworc3RydWN0IG9wdGlvbiAqcGFyc2Vfb3B0aW9uc19kdXAoY29uc3Qgc3RydWN0IG9wdGlvbiAqYSk7CitzdHJ1Y3Qgb3B0aW9uICpwYXJzZV9vcHRpb25zX2NvbmNhdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICphLCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpiKTsKKworLyotLS0tLSBzb21lIG9mdGVuIHVzZWQgb3B0aW9ucyAtLS0tLSovCitpbnQgcGFyc2Vfb3B0X2FiYnJldl9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBwYXJzZV9vcHRfZXhwaXJ5X2RhdGVfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitpbnQgcGFyc2Vfb3B0X2NvbG9yX2ZsYWdfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitpbnQgcGFyc2Vfb3B0X3ZlcmJvc2l0eV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKy8qIHZhbHVlIGlzIHN0cnVjdCBvaWRfYXJyYXkqICovCitpbnQgcGFyc2Vfb3B0X29iamVjdF9uYW1lKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworLyogdmFsdWUgaXMgc3RydWN0IG9iamVjdF9pZCogKi8KK2ludCBwYXJzZV9vcHRfb2JqZWN0X2lkKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IHBhcnNlX29wdF9jb21taXRzKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IHBhcnNlX29wdF9jb21taXQoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitpbnQgcGFyc2Vfb3B0X3RlcnRpYXJ5KGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IHBhcnNlX29wdF9zdHJpbmdfbGlzdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBwYXJzZV9vcHRfbm9vcF9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2VudW0gcGFyc2Vfb3B0X3Jlc3VsdCBwYXJzZV9vcHRfdW5rbm93bl9jYihzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwKKwkJCQkJICAgY29uc3QgY2hhciAqLCBpbnQpOworaW50IHBhcnNlX29wdF9wYXNzdGhydShjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBwYXJzZV9vcHRfcGFzc3RocnVfYXJndihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKworI2RlZmluZSBPUFRfX1ZFUkJPU0UodmFyLCBoKSAgT1BUX0NPVU5UVVAoJ3YnLCAidmVyYm9zZSIsICh2YXIpLCAoaCkpCisjZGVmaW5lIE9QVF9fUVVJRVQodmFyLCBoKSAgICBPUFRfQ09VTlRVUCgncScsICJxdWlldCIsICAgKHZhciksIChoKSkKKyNkZWZpbmUgT1BUX19WRVJCT1NJVFkodmFyKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssICd2JywgInZlcmJvc2UiLCAodmFyKSwgTlVMTCwgTl8oImJlIG1vcmUgdmVyYm9zZSIpLCBcCisJICBQQVJTRV9PUFRfTk9BUkcsICZwYXJzZV9vcHRfdmVyYm9zaXR5X2NiLCAwIH0sIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgJ3EnLCAicXVpZXQiLCAodmFyKSwgTlVMTCwgTl8oImJlIG1vcmUgcXVpZXQiKSwgXAorCSAgUEFSU0VfT1BUX05PQVJHLCAmcGFyc2Vfb3B0X3ZlcmJvc2l0eV9jYiwgMCB9CisjZGVmaW5lIE9QVF9fRFJZX1JVTih2YXIsIGgpICBPUFRfQk9PTCgnbicsICJkcnktcnVuIiwgKHZhciksIChoKSkKKyNkZWZpbmUgT1BUX19GT1JDRSh2YXIsIGgsIGYpIE9QVF9DT1VOVFVQX0YoJ2YnLCAiZm9yY2UiLCAgICh2YXIpLCAoaCksIChmKSkKKyNkZWZpbmUgT1BUX19BQkJSRVYodmFyKSAgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiYWJicmV2IiwgKHZhciksIE5fKCJuIiksCVwKKwkgIE5fKCJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIpLAlcCisJICBQQVJTRV9PUFRfT1BUQVJHLCAmcGFyc2Vfb3B0X2FiYnJldl9jYiwgMCB9CisjZGVmaW5lIE9QVF9fQ09MT1IodmFyLCBoKSBcCisJT1BUX0NPTE9SX0ZMQUcoMCwgImNvbG9yIiwgKHZhciksIChoKSkKKyNkZWZpbmUgT1BUX0NPTFVNTihzLCBsLCB2LCBoKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIE5fKCJzdHlsZSIpLCAoaCksIFBBUlNFX09QVF9PUFRBUkcsIHBhcnNlb3B0X2NvbHVtbl9jYWxsYmFjayB9CisjZGVmaW5lIE9QVF9QQVNTVEhSVShzLCBsLCB2LCBhLCBoLCBmKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIChhKSwgKGgpLCAoZiksIHBhcnNlX29wdF9wYXNzdGhydSB9CisjZGVmaW5lIE9QVF9QQVNTVEhSVV9BUkdWKHMsIGwsIHYsIGEsIGgsIGYpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgKGEpLCAoaCksIChmKSwgcGFyc2Vfb3B0X3Bhc3N0aHJ1X2FyZ3YgfQorI2RlZmluZSBfT1BUX0NPTlRBSU5TX09SX1dJVEgobmFtZSwgdmFyaWFibGUsIGhlbHAsIGZsYWcpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgbmFtZSwgKHZhcmlhYmxlKSwgTl8oImNvbW1pdCIpLCAoaGVscCksIFwKKwkgIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQgfCBmbGFnLCBcCisJICBwYXJzZV9vcHRfY29tbWl0cywgKGludHB0cl90KSAiSEVBRCIgXAorCX0KKyNkZWZpbmUgT1BUX0NPTlRBSU5TKHYsIGgpIF9PUFRfQ09OVEFJTlNfT1JfV0lUSCgiY29udGFpbnMiLCB2LCBoLCBQQVJTRV9PUFRfTk9ORUcpCisjZGVmaW5lIE9QVF9OT19DT05UQUlOUyh2LCBoKSBfT1BUX0NPTlRBSU5TX09SX1dJVEgoIm5vLWNvbnRhaW5zIiwgdiwgaCwgUEFSU0VfT1BUX05PTkVHKQorI2RlZmluZSBPUFRfV0lUSCh2LCBoKSBfT1BUX0NPTlRBSU5TX09SX1dJVEgoIndpdGgiLCB2LCBoLCBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PTkVHKQorI2RlZmluZSBPUFRfV0lUSE9VVCh2LCBoKSBfT1BUX0NPTlRBSU5TX09SX1dJVEgoIndpdGhvdXQiLCB2LCBoLCBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PTkVHKQorI2RlZmluZSBPUFRfQ0xFQU5VUCh2KSBPUFRfU1RSSU5HKDAsICJjbGVhbnVwIiwgdiwgTl8oIm1vZGUiKSwgTl8oImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiKSkKKyNkZWZpbmUgT1BUX1BBVEhTUEVDX0ZST01fRklMRSh2KSBPUFRfRklMRU5BTUUoMCwgInBhdGhzcGVjLWZyb20tZmlsZSIsIHYsIE5fKCJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIpKQorI2RlZmluZSBPUFRfUEFUSFNQRUNfRklMRV9OVUwodikgIE9QVF9CT09MKDAsICJwYXRoc3BlYy1maWxlLW51bCIsIHYsIE5fKCJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhdGNoLWRlbHRhLmMgYi9wYXRjaC1kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Yzg1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaC1kZWx0YS5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBwYXRjaC1kZWx0YS5jOgorICogcmVjcmVhdGUgYSBidWZmZXIgZnJvbSBhIHNvdXJjZSBhbmQgdGhlIGRlbHRhIHByb2R1Y2VkIGJ5IGRpZmYtZGVsdGEuYworICoKKyAqIChDKSAyMDA1IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKwordm9pZCAqcGF0Y2hfZGVsdGEoY29uc3Qgdm9pZCAqc3JjX2J1ZiwgdW5zaWduZWQgbG9uZyBzcmNfc2l6ZSwKKwkJICBjb25zdCB2b2lkICpkZWx0YV9idWYsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSwKKwkJICB1bnNpZ25lZCBsb25nICpkc3Rfc2l6ZSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCAqdG9wOworCXVuc2lnbmVkIGNoYXIgKmRzdF9idWYsICpvdXQsIGNtZDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlpZiAoZGVsdGFfc2l6ZSA8IERFTFRBX1NJWkVfTUlOKQorCQlyZXR1cm4gTlVMTDsKKworCWRhdGEgPSBkZWx0YV9idWY7CisJdG9wID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgZGVsdGFfYnVmICsgZGVsdGFfc2l6ZTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgb3JpZyBmaWxlIHNpemUgbWF0Y2hlcyB3aGF0IHdlIGV4cGVjdCAqLworCXNpemUgPSBnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIHRvcCk7CisJaWYgKHNpemUgIT0gc3JjX3NpemUpCisJCXJldHVybiBOVUxMOworCisJLyogbm93IHRoZSByZXN1bHQgc2l6ZSAqLworCXNpemUgPSBnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIHRvcCk7CisJZHN0X2J1ZiA9IHhtYWxsb2N6KHNpemUpOworCisJb3V0ID0gZHN0X2J1ZjsKKwl3aGlsZSAoZGF0YSA8IHRvcCkgeworCQljbWQgPSAqZGF0YSsrOworCQlpZiAoY21kICYgMHg4MCkgeworCQkJdW5zaWduZWQgbG9uZyBjcF9vZmYgPSAwLCBjcF9zaXplID0gMDsKKyNkZWZpbmUgUEFSU0VfQ1BfUEFSQU0oYml0LCB2YXIsIHNoaWZ0KSBkbyB7IFwKKwkJCWlmIChjbWQgJiAoYml0KSkgeyBcCisJCQkJaWYgKGRhdGEgPj0gdG9wKSBcCisJCQkJCWdvdG8gYmFkX2xlbmd0aDsgXAorCQkJCXZhciB8PSAoKHVuc2lnbmVkKSAqZGF0YSsrIDw8IChzaGlmdCkpOyBcCisJCQl9IH0gd2hpbGUgKDApCisJCQlQQVJTRV9DUF9QQVJBTSgweDAxLCBjcF9vZmYsIDApOworCQkJUEFSU0VfQ1BfUEFSQU0oMHgwMiwgY3Bfb2ZmLCA4KTsKKwkJCVBBUlNFX0NQX1BBUkFNKDB4MDQsIGNwX29mZiwgMTYpOworCQkJUEFSU0VfQ1BfUEFSQU0oMHgwOCwgY3Bfb2ZmLCAyNCk7CisJCQlQQVJTRV9DUF9QQVJBTSgweDEwLCBjcF9zaXplLCAwKTsKKwkJCVBBUlNFX0NQX1BBUkFNKDB4MjAsIGNwX3NpemUsIDgpOworCQkJUEFSU0VfQ1BfUEFSQU0oMHg0MCwgY3Bfc2l6ZSwgMTYpOworI3VuZGVmIFBBUlNFX0NQX1BBUkFNCisJCQlpZiAoY3Bfc2l6ZSA9PSAwKSBjcF9zaXplID0gMHgxMDAwMDsKKwkJCWlmICh1bnNpZ25lZF9hZGRfb3ZlcmZsb3dzKGNwX29mZiwgY3Bfc2l6ZSkgfHwKKwkJCSAgICBjcF9vZmYgKyBjcF9zaXplID4gc3JjX3NpemUgfHwKKwkJCSAgICBjcF9zaXplID4gc2l6ZSkKKwkJCQlnb3RvIGJhZF9sZW5ndGg7CisJCQltZW1jcHkob3V0LCAoY2hhciAqKSBzcmNfYnVmICsgY3Bfb2ZmLCBjcF9zaXplKTsKKwkJCW91dCArPSBjcF9zaXplOworCQkJc2l6ZSAtPSBjcF9zaXplOworCQl9IGVsc2UgaWYgKGNtZCkgeworCQkJaWYgKGNtZCA+IHNpemUgfHwgY21kID4gdG9wIC0gZGF0YSkKKwkJCQlnb3RvIGJhZF9sZW5ndGg7CisJCQltZW1jcHkob3V0LCBkYXRhLCBjbWQpOworCQkJb3V0ICs9IGNtZDsKKwkJCWRhdGEgKz0gY21kOworCQkJc2l6ZSAtPSBjbWQ7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogY21kID09IDAgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBlbmNvZGluZworCQkJICogZXh0ZW5zaW9ucy4gSW4gdGhlIG1lYW4gdGltZSB3ZSBtdXN0IGZhaWwgd2hlbgorCQkJICogZW5jb3VudGVyaW5nIHRoZW0gKG1pZ2h0IGJlIGRhdGEgY29ycnVwdGlvbikuCisJCQkgKi8KKwkJCWVycm9yKCJ1bmV4cGVjdGVkIGRlbHRhIG9wY29kZSAwIik7CisJCQlnb3RvIGJhZDsKKwkJfQorCX0KKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChkYXRhICE9IHRvcCB8fCBzaXplICE9IDApIHsKKwkJYmFkX2xlbmd0aDoKKwkJZXJyb3IoImRlbHRhIHJlcGxheSBoYXMgZ29uZSB3aWxkIik7CisJCWJhZDoKKwkJZnJlZShkc3RfYnVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmRzdF9zaXplID0gb3V0IC0gZHN0X2J1ZjsKKwlyZXR1cm4gZHN0X2J1ZjsKK30KZGlmZiAtLWdpdCBhL3BhdGNoLWlkcy5jIGIvcGF0Y2gtaWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhYTZkNAotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoLWlkcy5jCkBAIC0wLDAgKzEsMTIzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKyNpbmNsdWRlICJwYXRjaC1pZHMuaCIKKworc3RhdGljIGludCBwYXRjaF9pZF9kZWZpbmVkKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwkvKiBtdXN0IGJlIDAgb3IgMSBwYXJlbnRzICovCisJcmV0dXJuICFjb21taXQtPnBhcmVudHMgfHwgIWNvbW1pdC0+cGFyZW50cy0+bmV4dDsKK30KKworaW50IGNvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBkaWZmX2hlYWRlcl9vbmx5LCBpbnQgc3RhYmxlKQoreworCWlmICghcGF0Y2hfaWRfZGVmaW5lZChjb21taXQpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoY29tbWl0LT5wYXJlbnRzKQorCQlkaWZmX3RyZWVfb2lkKCZjb21taXQtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5vaWQsCisJCQkgICAgICAmY29tbWl0LT5vYmplY3Qub2lkLCAiIiwgb3B0aW9ucyk7CisJZWxzZQorCQlkaWZmX3Jvb3RfdHJlZV9vaWQoJmNvbW1pdC0+b2JqZWN0Lm9pZCwgIiIsIG9wdGlvbnMpOworCWRpZmZjb3JlX3N0ZChvcHRpb25zKTsKKwlyZXR1cm4gZGlmZl9mbHVzaF9wYXRjaF9pZChvcHRpb25zLCBvaWQsIGRpZmZfaGVhZGVyX29ubHksIHN0YWJsZSk7Cit9CisKKy8qCisgKiBXaGVuIHdlIGNhbm5vdCBsb2FkIHRoZSBmdWxsIHBhdGNoLWlkIGZvciBib3RoIGNvbW1pdHMgZm9yIHdoYXRldmVyCisgKiByZWFzb24sIHRoZSBmdW5jdGlvbiByZXR1cm5zIC0xIChpLmUuIHJldHVybiBlcnJvciguLi4pKS4gRGVzcGl0ZQorICogdGhlICJuZXEiIGluIHRoZSBuYW1lIG9mIHRoaXMgZnVuY3Rpb24sIHRoZSBjYWxsZXIgb25seSBjYXJlcyBhYm91dAorICogdGhlIHJldHVybiB2YWx1ZSBiZWluZyB6ZXJvIChhIGFuZCBiIGFyZSBlcXVpdmFsZW50KSBvciBub24temVybyAoYQorICogYW5kIGIgYXJlIGRpZmZlcmVudCksIGFuZCByZXR1cm5pbmcgbm9uLXplcm8gd291bGQga2VlcCBib3RoIGluIHRoZQorICogcmVzdWx0LCBldmVuIGlmIHRoZXkgYWN0dWFsbHkgd2VyZSBlcXVpdmFsZW50LCBpbiBvcmRlciB0byBlcnIgb24KKyAqIHRoZSBzaWRlIG9mIHNhZmV0eS4gIFRoZSBhY3R1YWwgdmFsdWUgYmVpbmcgbmVnYXRpdmUgZG9lcyBub3QgaGF2ZQorICogYW55IHNpZ25pZmljYW5jZTsgb25seSB0aGF0IGl0IGlzIG5vbi16ZXJvIG1hdHRlcnMuCisgKi8KK3N0YXRpYyBpbnQgcGF0Y2hfaWRfbmVxKGNvbnN0IHZvaWQgKmNtcGZuX2RhdGEsCisJCQljb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCWNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQljb25zdCB2b2lkICp1bnVzZWRfa2V5ZGF0YSkKK3sKKwkvKiBORUVEU1dPUks6IGNvbnN0IGNvcnJlY3RuZXNzPyAqLworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCA9ICh2b2lkICopY21wZm5fZGF0YTsKKwlzdHJ1Y3QgcGF0Y2hfaWQgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBzdHJ1Y3QgcGF0Y2hfaWQsIGVudCk7CisJYiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIHN0cnVjdCBwYXRjaF9pZCwgZW50KTsKKworCWlmIChpc19udWxsX29pZCgmYS0+cGF0Y2hfaWQpICYmCisJICAgIGNvbW1pdF9wYXRjaF9pZChhLT5jb21taXQsIG9wdCwgJmEtPnBhdGNoX2lkLCAwLCAwKSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgZ2V0IHBhdGNoIElEIGZvciAlcyIsCisJCQlvaWRfdG9faGV4KCZhLT5jb21taXQtPm9iamVjdC5vaWQpKTsKKwlpZiAoaXNfbnVsbF9vaWQoJmItPnBhdGNoX2lkKSAmJgorCSAgICBjb21taXRfcGF0Y2hfaWQoYi0+Y29tbWl0LCBvcHQsICZiLT5wYXRjaF9pZCwgMCwgMCkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGdldCBwYXRjaCBJRCBmb3IgJXMiLAorCQkJb2lkX3RvX2hleCgmYi0+Y29tbWl0LT5vYmplY3Qub2lkKSk7CisJcmV0dXJuICFvaWRlcSgmYS0+cGF0Y2hfaWQsICZiLT5wYXRjaF9pZCk7Cit9CisKK2ludCBpbml0X3BhdGNoX2lkcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHBhdGNoX2lkcyAqaWRzKQoreworCW1lbXNldChpZHMsIDAsIHNpemVvZigqaWRzKSk7CisJcmVwb19kaWZmX3NldHVwKHIsICZpZHMtPmRpZmZvcHRzKTsKKwlpZHMtPmRpZmZvcHRzLmRldGVjdF9yZW5hbWUgPSAwOworCWlkcy0+ZGlmZm9wdHMuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwlkaWZmX3NldHVwX2RvbmUoJmlkcy0+ZGlmZm9wdHMpOworCWhhc2htYXBfaW5pdCgmaWRzLT5wYXRjaGVzLCBwYXRjaF9pZF9uZXEsICZpZHMtPmRpZmZvcHRzLCAyNTYpOworCXJldHVybiAwOworfQorCitpbnQgZnJlZV9wYXRjaF9pZHMoc3RydWN0IHBhdGNoX2lkcyAqaWRzKQoreworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZpZHMtPnBhdGNoZXMsIHN0cnVjdCBwYXRjaF9pZCwgZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3BhdGNoX2lkX2VudHJ5KHN0cnVjdCBwYXRjaF9pZCAqcGF0Y2gsCisJCQkgICAgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgICAgIHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRlcl9vbmx5X3BhdGNoX2lkOworCisJcGF0Y2gtPmNvbW1pdCA9IGNvbW1pdDsKKwlpZiAoY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcy0+ZGlmZm9wdHMsICZoZWFkZXJfb25seV9wYXRjaF9pZCwgMSwgMCkpCisJCXJldHVybiAtMTsKKworCWhhc2htYXBfZW50cnlfaW5pdCgmcGF0Y2gtPmVudCwgb2lkaGFzaCgmaGVhZGVyX29ubHlfcGF0Y2hfaWQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBhdGNoX2lkICpoYXNfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgICAgIHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwlzdHJ1Y3QgcGF0Y2hfaWQgcGF0Y2g7CisKKwlpZiAoIXBhdGNoX2lkX2RlZmluZWQoY29tbWl0KSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoJnBhdGNoLCAwLCBzaXplb2YocGF0Y2gpKTsKKwlpZiAoaW5pdF9wYXRjaF9pZF9lbnRyeSgmcGF0Y2gsIGNvbW1pdCwgaWRzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaGFzaG1hcF9nZXRfZW50cnkoJmlkcy0+cGF0Y2hlcywgJnBhdGNoLCBlbnQsIE5VTEwpOworfQorCitzdHJ1Y3QgcGF0Y2hfaWQgKmFkZF9jb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgICAgc3RydWN0IHBhdGNoX2lkcyAqaWRzKQoreworCXN0cnVjdCBwYXRjaF9pZCAqa2V5OworCisJaWYgKCFwYXRjaF9pZF9kZWZpbmVkKGNvbW1pdCkpCisJCXJldHVybiBOVUxMOworCisJa2V5ID0geGNhbGxvYygxLCBzaXplb2YoKmtleSkpOworCWlmIChpbml0X3BhdGNoX2lkX2VudHJ5KGtleSwgY29tbWl0LCBpZHMpKSB7CisJCWZyZWUoa2V5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaGFzaG1hcF9hZGQoJmlkcy0+cGF0Y2hlcywgJmtleS0+ZW50KTsKKwlyZXR1cm4ga2V5OworfQpkaWZmIC0tZ2l0IGEvcGF0Y2gtaWRzLmggYi9wYXRjaC1pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2JiMDRlCi0tLSAvZGV2L251bGwKKysrIGIvcGF0Y2gtaWRzLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBQQVRDSF9JRFNfSAorI2RlZmluZSBQQVRDSF9JRFNfSAorCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCBvYmplY3RfaWQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworc3RydWN0IHBhdGNoX2lkIHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IG9iamVjdF9pZCBwYXRjaF9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7Cit9OworCitzdHJ1Y3QgcGF0Y2hfaWRzIHsKKwlzdHJ1Y3QgaGFzaG1hcCBwYXRjaGVzOworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZm9wdHM7Cit9OworCitpbnQgY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50LCBpbnQpOworaW50IGluaXRfcGF0Y2hfaWRzKHN0cnVjdCByZXBvc2l0b3J5ICosIHN0cnVjdCBwYXRjaF9pZHMgKik7CitpbnQgZnJlZV9wYXRjaF9pZHMoc3RydWN0IHBhdGNoX2lkcyAqKTsKK3N0cnVjdCBwYXRjaF9pZCAqYWRkX2NvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBwYXRjaF9pZHMgKik7CitzdHJ1Y3QgcGF0Y2hfaWQgKmhhc19jb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqLCBzdHJ1Y3QgcGF0Y2hfaWRzICopOworCisjZW5kaWYgLyogUEFUQ0hfSURTX0ggKi8KZGlmZiAtLWdpdCBhL3BhdGguYyBiL3BhdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGNmNTkzCi0tLSAvZGV2L251bGwKKysrIGIvcGF0aC5jCkBAIC0wLDAgKzEsMTUzOSBAQAorLyoKKyAqIFV0aWxpdGllcyBmb3IgcGF0aHMgYW5kIHBhdGhuYW1lcworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKyNpbmNsdWRlICJwYXRoLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorCitzdGF0aWMgaW50IGdldF9zdF9tb2RlX2JpdHMoY29uc3QgY2hhciAqcGF0aCwgaW50ICptb2RlKQoreworCXN0cnVjdCBzdGF0IHN0OworCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJcmV0dXJuIC0xOworCSptb2RlID0gc3Quc3RfbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgYmFkX3BhdGhbXSA9ICIvYmFkLXBhdGgvIjsKKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmdldF9wYXRobmFtZSh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGhuYW1lX2FycmF5WzRdID0geworCQlTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVAorCX07CisJc3RhdGljIGludCBpbmRleDsKKwlzdHJ1Y3Qgc3RyYnVmICpzYiA9ICZwYXRobmFtZV9hcnJheVtpbmRleF07CisJaW5kZXggPSAoaW5kZXggKyAxKSAlIEFSUkFZX1NJWkUocGF0aG5hbWVfYXJyYXkpOworCXN0cmJ1Zl9yZXNldChzYik7CisJcmV0dXJuIHNiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2xlYW51cF9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJLyogQ2xlYW4gaXQgdXAgKi8KKwlpZiAoc2tpcF9wcmVmaXgocGF0aCwgIi4vIiwgJnBhdGgpKSB7CisJCXdoaWxlICgqcGF0aCA9PSAnLycpCisJCQlwYXRoKys7CisJfQorCXJldHVybiBwYXRoOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfY2xlYW51cF9wYXRoKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWNvbnN0IGNoYXIgKnBhdGggPSBjbGVhbnVwX3BhdGgoc2ItPmJ1Zik7CisJaWYgKHBhdGggPiBzYi0+YnVmKQorCQlzdHJidWZfcmVtb3ZlKHNiLCAwLCBwYXRoIC0gc2ItPmJ1Zik7Cit9CisKK2NoYXIgKm1rc25wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwl1bnNpZ25lZCBsZW47CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWxlbiA9IHZzbnByaW50ZihidWYsIG4sIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlmIChsZW4gPj0gbikgeworCQlzdHJsY3B5KGJ1ZiwgYmFkX3BhdGgsIG4pOworCQlyZXR1cm4gYnVmOworCX0KKwlyZXR1cm4gKGNoYXIgKiljbGVhbnVwX3BhdGgoYnVmKTsKK30KKworc3RhdGljIGludCBkaXJfcHJlZml4KGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZGlyKQoreworCWludCBsZW4gPSBzdHJsZW4oZGlyKTsKKwlyZXR1cm4gIXN0cm5jbXAoYnVmLCBkaXIsIGxlbikgJiYKKwkJKGlzX2Rpcl9zZXAoYnVmW2xlbl0pIHx8IGJ1ZltsZW5dID09ICdcMCcpOworfQorCisvKiAkYnVmID1+IG18JGRpci8rJGZpbGV8IGJ1dCB3aXRob3V0IHJlZ2V4ICovCitzdGF0aWMgaW50IGlzX2Rpcl9maWxlKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQoreworCWludCBsZW4gPSBzdHJsZW4oZGlyKTsKKwlpZiAoc3RybmNtcChidWYsIGRpciwgbGVuKSB8fCAhaXNfZGlyX3NlcChidWZbbGVuXSkpCisJCXJldHVybiAwOworCXdoaWxlIChpc19kaXJfc2VwKGJ1ZltsZW5dKSkKKwkJbGVuKys7CisJcmV0dXJuICFzdHJjbXAoYnVmICsgbGVuLCBmaWxlKTsKK30KKworc3RhdGljIHZvaWQgcmVwbGFjZV9kaXIoc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgbGVuLCBjb25zdCBjaGFyICpuZXdkaXIpCit7CisJaW50IG5ld2xlbiA9IHN0cmxlbihuZXdkaXIpOworCWludCBuZWVkX3NlcCA9IChidWYtPmJ1ZltsZW5dICYmICFpc19kaXJfc2VwKGJ1Zi0+YnVmW2xlbl0pKSAmJgorCQkhaXNfZGlyX3NlcChuZXdkaXJbbmV3bGVuIC0gMV0pOworCWlmIChuZWVkX3NlcCkKKwkJbGVuLS07CSAvKiBrZWVwIG9uZSBjaGFyLCB0byBiZSByZXBsYWNlZCB3aXRoICcvJyAgKi8KKwlzdHJidWZfc3BsaWNlKGJ1ZiwgMCwgbGVuLCBuZXdkaXIsIG5ld2xlbik7CisJaWYgKG5lZWRfc2VwKQorCQlidWYtPmJ1ZltuZXdsZW5dID0gJy8nOworfQorCitzdHJ1Y3QgY29tbW9uX2RpciB7CisJLyogTm90IGNvbnNpZGVyZWQgZ2FyYmFnZSBmb3IgcmVwb3J0X2xpbmtlZF9jaGVja291dF9nYXJiYWdlICovCisJdW5zaWduZWQgaWdub3JlX2dhcmJhZ2U6MTsKKwl1bnNpZ25lZCBpc19kaXI6MTsKKwkvKiBCZWxvbmdzIHRvIHRoZSBjb21tb24gZGlyLCB0aG91Z2ggaXQgbWF5IGNvbnRhaW4gcGF0aHMgdGhhdCBkb24ndCAqLworCXVuc2lnbmVkIGlzX2NvbW1vbjoxOworCWNvbnN0IGNoYXIgKnBhdGg7Cit9OworCitzdGF0aWMgc3RydWN0IGNvbW1vbl9kaXIgY29tbW9uX2xpc3RbXSA9IHsKKwl7IDAsIDEsIDEsICJicmFuY2hlcyIgfSwKKwl7IDAsIDEsIDEsICJjb21tb24iIH0sCisJeyAwLCAxLCAxLCAiaG9va3MiIH0sCisJeyAwLCAxLCAxLCAiaW5mbyIgfSwKKwl7IDAsIDAsIDAsICJpbmZvL3NwYXJzZS1jaGVja291dCIgfSwKKwl7IDEsIDEsIDEsICJsb2dzIiB9LAorCXsgMSwgMCwgMCwgImxvZ3MvSEVBRCIgfSwKKwl7IDAsIDEsIDAsICJsb2dzL3JlZnMvYmlzZWN0IiB9LAorCXsgMCwgMSwgMCwgImxvZ3MvcmVmcy9yZXdyaXR0ZW4iIH0sCisJeyAwLCAxLCAwLCAibG9ncy9yZWZzL3dvcmt0cmVlIiB9LAorCXsgMCwgMSwgMSwgImxvc3QtZm91bmQiIH0sCisJeyAwLCAxLCAxLCAib2JqZWN0cyIgfSwKKwl7IDAsIDEsIDEsICJyZWZzIiB9LAorCXsgMCwgMSwgMCwgInJlZnMvYmlzZWN0IiB9LAorCXsgMCwgMSwgMCwgInJlZnMvcmV3cml0dGVuIiB9LAorCXsgMCwgMSwgMCwgInJlZnMvd29ya3RyZWUiIH0sCisJeyAwLCAxLCAxLCAicmVtb3RlcyIgfSwKKwl7IDAsIDEsIDEsICJ3b3JrdHJlZXMiIH0sCisJeyAwLCAxLCAxLCAicnItY2FjaGUiIH0sCisJeyAwLCAxLCAxLCAic3ZuIiB9LAorCXsgMCwgMCwgMSwgImNvbmZpZyIgfSwKKwl7IDEsIDAsIDEsICJnYy5waWQiIH0sCisJeyAwLCAwLCAxLCAicGFja2VkLXJlZnMiIH0sCisJeyAwLCAwLCAxLCAic2hhbGxvdyIgfSwKKwl7IDAsIDAsIDAsIE5VTEwgfQorfTsKKworLyoKKyAqIEEgY29tcHJlc3NlZCB0cmllLiAgQSB0cmllIG5vZGUgY29uc2lzdHMgb2YgemVybyBvciBtb3JlIGNoYXJhY3RlcnMgdGhhdAorICogYXJlIGNvbW1vbiB0byBhbGwgZWxlbWVudHMgd2l0aCB0aGlzIHByZWZpeCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBzb21lCisgKiBjaGlsZHJlbi4gIElmIHZhbHVlIGlzIG5vdCBOVUxMLCB0aGUgdHJpZSBub2RlIGlzIGEgdGVybWluYWwgbm9kZS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzZXQgb2Ygc3RyaW5nczoKKyAqIGFiYworICogZGVmCisgKiBkZWZpbml0ZQorICogZGVmaW5pdGlvbgorICoKKyAqIFRoZSB0cmllIHdvdWxkIGxvb2sgbGlrZToKKyAqIHJvb3Q6IGxlbiA9IDAsIGNoaWxkcmVuIGEgYW5kIGQgbm9uLU5VTEwsIHZhbHVlID0gTlVMTC4KKyAqICAgIGE6IGxlbiA9IDIsIGNvbnRlbnRzID0gYmMsIHZhbHVlID0gKGRhdGEgZm9yICJhYmMiKQorICogICAgZDogbGVuID0gMiwgY29udGVudHMgPSBlZiwgY2hpbGRyZW4gaSBub24tTlVMTCwgdmFsdWUgPSAoZGF0YSBmb3IgImRlZiIpCisgKiAgICAgICBpOiBsZW4gPSAzLCBjb250ZW50cyA9IG5pdCwgY2hpbGRyZW4gZSBhbmQgaSBub24tTlVMTCwgdmFsdWUgPSBOVUxMCisgKiAgICAgICAgICAgZTogbGVuID0gMCwgY2hpbGRyZW4gYWxsIE5VTEwsIHZhbHVlID0gKGRhdGEgZm9yICJkZWZpbml0ZSIpCisgKiAgICAgICAgICAgaTogbGVuID0gMiwgY29udGVudHMgPSBvbiwgY2hpbGRyZW4gYWxsIE5VTEwsCisgKiAgICAgICAgICAgICAgdmFsdWUgPSAoZGF0YSBmb3IgImRlZmluaXRpb24iKQorICovCitzdHJ1Y3QgdHJpZSB7CisJc3RydWN0IHRyaWUgKmNoaWxkcmVuWzI1Nl07CisJaW50IGxlbjsKKwljaGFyICpjb250ZW50czsKKwl2b2lkICp2YWx1ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJpZSAqbWFrZV90cmllX25vZGUoY29uc3QgY2hhciAqa2V5LCB2b2lkICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgdHJpZSAqbmV3X25vZGUgPSB4Y2FsbG9jKDEsIHNpemVvZigqbmV3X25vZGUpKTsKKwluZXdfbm9kZS0+bGVuID0gc3RybGVuKGtleSk7CisJaWYgKG5ld19ub2RlLT5sZW4pIHsKKwkJbmV3X25vZGUtPmNvbnRlbnRzID0geG1hbGxvYyhuZXdfbm9kZS0+bGVuKTsKKwkJbWVtY3B5KG5ld19ub2RlLT5jb250ZW50cywga2V5LCBuZXdfbm9kZS0+bGVuKTsKKwl9CisJbmV3X25vZGUtPnZhbHVlID0gdmFsdWU7CisJcmV0dXJuIG5ld19ub2RlOworfQorCisvKgorICogQWRkIGEga2V5L3ZhbHVlIHBhaXIgdG8gYSB0cmllLiAgVGhlIGtleSBpcyBhc3N1bWVkIHRvIGJlIFwwLXRlcm1pbmF0ZWQuCisgKiBJZiB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgdmFsdWUgZm9yIHRoaXMga2V5LCByZXR1cm4gaXQuCisgKi8KK3N0YXRpYyB2b2lkICphZGRfdG9fdHJpZShzdHJ1Y3QgdHJpZSAqcm9vdCwgY29uc3QgY2hhciAqa2V5LCB2b2lkICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgdHJpZSAqY2hpbGQ7CisJdm9pZCAqb2xkOworCWludCBpOworCisJaWYgKCEqa2V5KSB7CisJCS8qIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBrZXkgKi8KKwkJb2xkID0gcm9vdC0+dmFsdWU7CisJCXJvb3QtPnZhbHVlID0gdmFsdWU7CisJCXJldHVybiBvbGQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJvb3QtPmxlbjsgaSsrKSB7CisJCWlmIChyb290LT5jb250ZW50c1tpXSA9PSBrZXlbaV0pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTcGxpdCB0aGlzIG5vZGU6IGNoaWxkIHdpbGwgY29udGFpbiB0aGlzIG5vZGUncworCQkgKiBleGlzdGluZyBjaGlsZHJlbi4KKwkJICovCisJCWNoaWxkID0geG1hbGxvYyhzaXplb2YoKmNoaWxkKSk7CisJCW1lbWNweShjaGlsZC0+Y2hpbGRyZW4sIHJvb3QtPmNoaWxkcmVuLCBzaXplb2Yocm9vdC0+Y2hpbGRyZW4pKTsKKworCQljaGlsZC0+bGVuID0gcm9vdC0+bGVuIC0gaSAtIDE7CisJCWlmIChjaGlsZC0+bGVuKSB7CisJCQljaGlsZC0+Y29udGVudHMgPSB4c3RybmR1cChyb290LT5jb250ZW50cyArIGkgKyAxLAorCQkJCQkJICAgY2hpbGQtPmxlbik7CisJCX0KKwkJY2hpbGQtPnZhbHVlID0gcm9vdC0+dmFsdWU7CisJCXJvb3QtPnZhbHVlID0gTlVMTDsKKwkJcm9vdC0+bGVuID0gaTsKKworCQltZW1zZXQocm9vdC0+Y2hpbGRyZW4sIDAsIHNpemVvZihyb290LT5jaGlsZHJlbikpOworCQlyb290LT5jaGlsZHJlblsodW5zaWduZWQgY2hhcilyb290LT5jb250ZW50c1tpXV0gPSBjaGlsZDsKKworCQkvKiBUaGlzIGlzIHRoZSBuZXdseS1hZGRlZCBjaGlsZC4gKi8KKwkJcm9vdC0+Y2hpbGRyZW5bKHVuc2lnbmVkIGNoYXIpa2V5W2ldXSA9CisJCQltYWtlX3RyaWVfbm9kZShrZXkgKyBpICsgMSwgdmFsdWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBXZSBoYXZlIG1hdGNoZWQgdGhlIGVudGlyZSBjb21wcmVzc2VkIHNlY3Rpb24gKi8KKwlpZiAoa2V5W2ldKSB7CisJCWNoaWxkID0gcm9vdC0+Y2hpbGRyZW5bKHVuc2lnbmVkIGNoYXIpa2V5W3Jvb3QtPmxlbl1dOworCQlpZiAoY2hpbGQpIHsKKwkJCXJldHVybiBhZGRfdG9fdHJpZShjaGlsZCwga2V5ICsgcm9vdC0+bGVuICsgMSwgdmFsdWUpOworCQl9IGVsc2UgeworCQkJY2hpbGQgPSBtYWtlX3RyaWVfbm9kZShrZXkgKyByb290LT5sZW4gKyAxLCB2YWx1ZSk7CisJCQlyb290LT5jaGlsZHJlblsodW5zaWduZWQgY2hhcilrZXlbcm9vdC0+bGVuXV0gPSBjaGlsZDsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJb2xkID0gcm9vdC0+dmFsdWU7CisJcm9vdC0+dmFsdWUgPSB2YWx1ZTsKKwlyZXR1cm4gb2xkOworfQorCit0eXBlZGVmIGludCAoKm1hdGNoX2ZuKShjb25zdCBjaGFyICp1bm1hdGNoZWQsIHZvaWQgKnZhbHVlLCB2b2lkICpiYXRvbik7CisKKy8qCisgKiBTZWFyY2ggYSB0cmllIGZvciBzb21lIGtleS4gIEZpbmQgdGhlIGxvbmdlc3QgLy1vci1cMC10ZXJtaW5hdGVkCisgKiBwcmVmaXggb2YgdGhlIGtleSBmb3Igd2hpY2ggdGhlIHRyaWUgY29udGFpbnMgYSB2YWx1ZS4gIElmIHRoZXJlIGlzCisgKiBubyBzdWNoIHByZWZpeCwgcmV0dXJuIC0xLiAgT3RoZXJ3aXNlIGNhbGwgZm4gd2l0aCB0aGUgdW5tYXRjaGVkCisgKiBwb3J0aW9uIG9mIHRoZSBrZXkgYW5kIHRoZSBmb3VuZCB2YWx1ZS4gIElmIGZuIHJldHVybnMgMCBvcgorICogcG9zaXRpdmUsIHRoZW4gcmV0dXJuIGl0cyByZXR1cm4gdmFsdWUuICBJZiBmbiByZXR1cm5zIG5lZ2F0aXZlLAorICogdGhlbiBjYWxsIGZuIHdpdGggdGhlIG5leHQtbG9uZ2VzdCAvLXRlcm1pbmF0ZWQgcHJlZml4IG9mIHRoZSBrZXkKKyAqIChpLmUuIGEgcGFyZW50IGRpcmVjdG9yeSkgZm9yIHdoaWNoIHRoZSB0cmllIGNvbnRhaW5zIGEgdmFsdWUsIGFuZAorICogaGFuZGxlIGl0cyByZXR1cm4gdmFsdWUgdGhlIHNhbWUgd2F5LiAgSWYgdGhlcmUgaXMgbm8gc2hvcnRlcgorICogLy10ZXJtaW5hdGVkIHByZWZpeCB3aXRoIGEgdmFsdWUgbGVmdCwgdGhlbiByZXR1cm4gdGhlIG5lZ2F0aXZlCisgKiByZXR1cm4gdmFsdWUgb2YgdGhlIG1vc3QgcmVjZW50IGZuIGludm9jYXRpb24uCisgKgorICogVGhlIGtleSBpcyBwYXJ0aWFsbHkgbm9ybWFsaXplZDogY29uc2VjdXRpdmUgc2xhc2hlcyBhcmUgc2tpcHBlZC4KKyAqCisgKiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIHRyaWUgY29udGFpbmluZyBvbmx5IFtsb2dzLAorICogbG9ncy9yZWZzL2Jpc2VjdF0sIGJvdGggd2l0aCB2YWx1ZXMsIGJ1dCBub3QgbG9ncy9yZWZzLgorICoKKyAqIHwga2V5ICAgICAgICAgICAgICAgIHwgdW5tYXRjaGVkICAgICAgfCBwcmVmaXggdG8gbm9kZSAgIHwgcmV0dXJuIHZhbHVlIHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKKyAqIHwgYSAgICAgICAgICAgICAgICAgIHwgbm90IGNhbGxlZCAgICAgfCBuL2EgICAgICAgICAgICAgIHwgLTEgICAgICAgICAgIHwKKyAqIHwgbG9nc3RvcmUgICAgICAgICAgIHwgbm90IGNhbGxlZCAgICAgfCBuL2EgICAgICAgICAgICAgIHwgLTEgICAgICAgICAgIHwKKyAqIHwgbG9ncyAgICAgICAgICAgICAgIHwgXDAgICAgICAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy8gICAgICAgICAgICAgIHwgLyAgICAgICAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzICAgICAgICAgIHwgL3JlZnMgICAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzLyAgICAgICAgIHwgL3JlZnMvICAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2IgICAgICAgIHwgL3JlZnMvYiAgICAgICAgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdGVkIHwgL3JlZnMvYmlzZWN0ZWQgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdCAgIHwgXDAgICAgICAgICAgICAgfCBsb2dzL3JlZnMvYmlzZWN0IHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdC8gIHwgLyAgICAgICAgICAgICAgfCBsb2dzL3JlZnMvYmlzZWN0IHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdC9hIHwgL2EgICAgICAgICAgICAgfCBsb2dzL3JlZnMvYmlzZWN0IHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgKElmIGZuIGluIHRoZSBwcmV2aW91cyBsaW5lIHJldHVybnMgLTEsIHRoZW4gZm4gaXMgY2FsbGVkIG9uY2UgbW9yZTopIHwKKyAqIHwgbG9ncy9yZWZzL2Jpc2VjdC9hIHwgL3JlZnMvYmlzZWN0L2EgfCBsb2dzICAgICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKKyAqLworc3RhdGljIGludCB0cmllX2ZpbmQoc3RydWN0IHRyaWUgKnJvb3QsIGNvbnN0IGNoYXIgKmtleSwgbWF0Y2hfZm4gZm4sCisJCSAgICAgdm9pZCAqYmF0b24pCit7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgdHJpZSAqY2hpbGQ7CisKKwlpZiAoISprZXkpIHsKKwkJLyogd2UgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGtleSAqLworCQlpZiAocm9vdC0+dmFsdWUgJiYgIXJvb3QtPmxlbikKKwkJCXJldHVybiBmbihrZXksIHJvb3QtPnZhbHVlLCBiYXRvbik7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcm9vdC0+bGVuOyBpKyspIHsKKwkJLyogUGFydGlhbCBwYXRoIG5vcm1hbGl6YXRpb246IHNraXAgY29uc2VjdXRpdmUgc2xhc2hlcy4gKi8KKwkJaWYgKGtleVtpXSA9PSAnLycgJiYga2V5W2krMV0gPT0gJy8nKSB7CisJCQlrZXkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyb290LT5jb250ZW50c1tpXSAhPSBrZXlbaV0pCisJCQlyZXR1cm4gLTE7CisJfQorCisJLyogTWF0Y2hlZCB0aGUgZW50aXJlIGNvbXByZXNzZWQgc2VjdGlvbiAqLworCWtleSArPSBpOworCWlmICghKmtleSkgeworCQkvKiBFbmQgb2Yga2V5ICovCisJCWlmIChyb290LT52YWx1ZSkKKwkJCXJldHVybiBmbihrZXksIHJvb3QtPnZhbHVlLCBiYXRvbik7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKiBQYXJ0aWFsIHBhdGggbm9ybWFsaXphdGlvbjogc2tpcCBjb25zZWN1dGl2ZSBzbGFzaGVzICovCisJd2hpbGUgKGtleVswXSA9PSAnLycgJiYga2V5WzFdID09ICcvJykKKwkJa2V5Kys7CisKKwljaGlsZCA9IHJvb3QtPmNoaWxkcmVuWyh1bnNpZ25lZCBjaGFyKSprZXldOworCWlmIChjaGlsZCkKKwkJcmVzdWx0ID0gdHJpZV9maW5kKGNoaWxkLCBrZXkgKyAxLCBmbiwgYmF0b24pOworCWVsc2UKKwkJcmVzdWx0ID0gLTE7CisKKwlpZiAocmVzdWx0ID49IDAgfHwgKCprZXkgIT0gJy8nICYmICprZXkgIT0gMCkpCisJCXJldHVybiByZXN1bHQ7CisJaWYgKHJvb3QtPnZhbHVlKQorCQlyZXR1cm4gZm4oa2V5LCByb290LT52YWx1ZSwgYmF0b24pOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3RydWN0IHRyaWUgY29tbW9uX3RyaWU7CitzdGF0aWMgaW50IGNvbW1vbl90cmllX2RvbmVfc2V0dXA7CisKK3N0YXRpYyB2b2lkIGluaXRfY29tbW9uX3RyaWUodm9pZCkKK3sKKwlzdHJ1Y3QgY29tbW9uX2RpciAqcDsKKworCWlmIChjb21tb25fdHJpZV9kb25lX3NldHVwKQorCQlyZXR1cm47CisKKwlmb3IgKHAgPSBjb21tb25fbGlzdDsgcC0+cGF0aDsgcCsrKQorCQlhZGRfdG9fdHJpZSgmY29tbW9uX3RyaWUsIHAtPnBhdGgsIHApOworCisJY29tbW9uX3RyaWVfZG9uZV9zZXR1cCA9IDE7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0ZV9jb21tb25fZGlyOiByZXR1cm5zIDEgaWYgdGhlIGRpcgorICogcHJlZml4IGlzIGNvbW1vbi4KKyAqLworc3RhdGljIGludCBjaGVja19jb21tb24oY29uc3QgY2hhciAqdW5tYXRjaGVkLCB2b2lkICp2YWx1ZSwgdm9pZCAqYmF0b24pCit7CisJc3RydWN0IGNvbW1vbl9kaXIgKmRpciA9IHZhbHVlOworCisJaWYgKGRpci0+aXNfZGlyICYmICh1bm1hdGNoZWRbMF0gPT0gMCB8fCB1bm1hdGNoZWRbMF0gPT0gJy8nKSkKKwkJcmV0dXJuIGRpci0+aXNfY29tbW9uOworCisJaWYgKCFkaXItPmlzX2RpciAmJiB1bm1hdGNoZWRbMF0gPT0gMCkKKwkJcmV0dXJuIGRpci0+aXNfY29tbW9uOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jb21tb25fZGlyKHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IGdpdF9kaXJfbGVuLAorCQkJICAgICAgY29uc3QgY2hhciAqY29tbW9uX2RpcikKK3sKKwljaGFyICpiYXNlID0gYnVmLT5idWYgKyBnaXRfZGlyX2xlbjsKKwlpbnQgaGFzX2xvY2tfc3VmZml4ID0gc3RyYnVmX3N0cmlwX3N1ZmZpeChidWYsIExPQ0tfU1VGRklYKTsKKworCWluaXRfY29tbW9uX3RyaWUoKTsKKwlpZiAodHJpZV9maW5kKCZjb21tb25fdHJpZSwgYmFzZSwgY2hlY2tfY29tbW9uLCBOVUxMKSA+IDApCisJCXJlcGxhY2VfZGlyKGJ1ZiwgZ2l0X2Rpcl9sZW4sIGNvbW1vbl9kaXIpOworCisJaWYgKGhhc19sb2NrX3N1ZmZpeCkKKwkJc3RyYnVmX2FkZHN0cihidWYsIExPQ0tfU1VGRklYKTsKK30KKwordm9pZCByZXBvcnRfbGlua2VkX2NoZWNrb3V0X2dhcmJhZ2Uodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3Qgc3RydWN0IGNvbW1vbl9kaXIgKnA7CisJaW50IGxlbjsKKworCWlmICghdGhlX3JlcG9zaXRvcnktPmRpZmZlcmVudF9jb21tb25kaXIpCisJCXJldHVybjsKKwlzdHJidWZfYWRkZigmc2IsICIlcy8iLCBnZXRfZ2l0X2RpcigpKTsKKwlsZW4gPSBzYi5sZW47CisJZm9yIChwID0gY29tbW9uX2xpc3Q7IHAtPnBhdGg7IHArKykgeworCQljb25zdCBjaGFyICpwYXRoID0gcC0+cGF0aDsKKwkJaWYgKHAtPmlnbm9yZV9nYXJiYWdlKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9zZXRsZW4oJnNiLCBsZW4pOworCQlzdHJidWZfYWRkc3RyKCZzYiwgcGF0aCk7CisJCWlmIChmaWxlX2V4aXN0cyhzYi5idWYpKQorCQkJcmVwb3J0X2dhcmJhZ2UoUEFDS0RJUl9GSUxFX0dBUkJBR0UsIHNiLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdF9naXRfcGF0aChjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBnaXRfZGlyX2xlbikKK3sKKwljb25zdCBjaGFyICpiYXNlID0gYnVmLT5idWYgKyBnaXRfZGlyX2xlbjsKKwlpZiAoaXNfZGlyX2ZpbGUoYmFzZSwgImluZm8iLCAiZ3JhZnRzIikpCisJCXN0cmJ1Zl9zcGxpY2UoYnVmLCAwLCBidWYtPmxlbiwKKwkJCSAgICAgIHJlcG8tPmdyYWZ0X2ZpbGUsIHN0cmxlbihyZXBvLT5ncmFmdF9maWxlKSk7CisJZWxzZSBpZiAoIXN0cmNtcChiYXNlLCAiaW5kZXgiKSkKKwkJc3RyYnVmX3NwbGljZShidWYsIDAsIGJ1Zi0+bGVuLAorCQkJICAgICAgcmVwby0+aW5kZXhfZmlsZSwgc3RybGVuKHJlcG8tPmluZGV4X2ZpbGUpKTsKKwllbHNlIGlmIChkaXJfcHJlZml4KGJhc2UsICJvYmplY3RzIikpCisJCXJlcGxhY2VfZGlyKGJ1ZiwgZ2l0X2Rpcl9sZW4gKyA3LCByZXBvLT5vYmplY3RzLT5vZGItPnBhdGgpOworCWVsc2UgaWYgKGdpdF9ob29rc19wYXRoICYmIGRpcl9wcmVmaXgoYmFzZSwgImhvb2tzIikpCisJCXJlcGxhY2VfZGlyKGJ1ZiwgZ2l0X2Rpcl9sZW4gKyA1LCBnaXRfaG9va3NfcGF0aCk7CisJZWxzZSBpZiAocmVwby0+ZGlmZmVyZW50X2NvbW1vbmRpcikKKwkJdXBkYXRlX2NvbW1vbl9kaXIoYnVmLCBnaXRfZGlyX2xlbiwgcmVwby0+Y29tbW9uZGlyKTsKK30KKworc3RhdGljIHZvaWQgc3RyYnVmX3dvcmt0cmVlX2dpdGRpcihzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJICAgY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCkKK3sKKwlpZiAoIXd0KQorCQlzdHJidWZfYWRkc3RyKGJ1ZiwgcmVwby0+Z2l0ZGlyKTsKKwllbHNlIGlmICghd3QtPmlkKQorCQlzdHJidWZfYWRkc3RyKGJ1ZiwgcmVwby0+Y29tbW9uZGlyKTsKKwllbHNlCisJCXN0cmJ1Zl9naXRfY29tbW9uX3BhdGgoYnVmLCByZXBvLCAid29ya3RyZWVzLyVzIiwgd3QtPmlkKTsKK30KKworc3RhdGljIHZvaWQgZG9fZ2l0X3BhdGgoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQljb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LCBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQljb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwlpbnQgZ2l0ZGlyX2xlbjsKKwlzdHJidWZfd29ya3RyZWVfZ2l0ZGlyKGJ1ZiwgcmVwbywgd3QpOworCWlmIChidWYtPmxlbiAmJiAhaXNfZGlyX3NlcChidWYtPmJ1ZltidWYtPmxlbiAtIDFdKSkKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy8nKTsKKwlnaXRkaXJfbGVuID0gYnVmLT5sZW47CisJc3RyYnVmX3ZhZGRmKGJ1ZiwgZm10LCBhcmdzKTsKKwlpZiAoIXd0KQorCQlhZGp1c3RfZ2l0X3BhdGgocmVwbywgYnVmLCBnaXRkaXJfbGVuKTsKKwlzdHJidWZfY2xlYW51cF9wYXRoKGJ1Zik7Cit9CisKK2NoYXIgKnJlcG9fZ2l0X3BhdGgoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCSAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlkb19naXRfcGF0aChyZXBvLCBOVUxMLCAmcGF0aCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnBhdGgsIE5VTEwpOworfQorCit2b2lkIHN0cmJ1Zl9yZXBvX2dpdF9wYXRoKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2l0X3BhdGgocmVwbywgTlVMTCwgc2IsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCitjaGFyICpnaXRfcGF0aF9idWYoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlkb19naXRfcGF0aCh0aGVfcmVwb3NpdG9yeSwgTlVMTCwgYnVmLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gYnVmLT5idWY7Cit9CisKK3ZvaWQgc3RyYnVmX2dpdF9wYXRoKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlkb19naXRfcGF0aCh0aGVfcmVwb3NpdG9yeSwgTlVMTCwgc2IsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCitjb25zdCBjaGFyICpnaXRfcGF0aChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpwYXRobmFtZSA9IGdldF9wYXRobmFtZSgpOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX2dpdF9wYXRoKHRoZV9yZXBvc2l0b3J5LCBOVUxMLCBwYXRobmFtZSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHBhdGhuYW1lLT5idWY7Cit9CisKK2NoYXIgKmdpdF9wYXRoZHVwKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX2dpdF9wYXRoKHRoZV9yZXBvc2l0b3J5LCBOVUxMLCAmcGF0aCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnBhdGgsIE5VTEwpOworfQorCitjaGFyICpta3BhdGhkdXAoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXN0cmJ1Zl9jbGVhbnVwX3BhdGgoJnNiKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworfQorCitjb25zdCBjaGFyICpta3BhdGgoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXN0cnVjdCBzdHJidWYgKnBhdGhuYW1lID0gZ2V0X3BhdGhuYW1lKCk7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlzdHJidWZfdmFkZGYocGF0aG5hbWUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiBjbGVhbnVwX3BhdGgocGF0aG5hbWUtPmJ1Zik7Cit9CisKK2NvbnN0IGNoYXIgKndvcmt0cmVlX2dpdF9wYXRoKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgKnBhdGhuYW1lID0gZ2V0X3BhdGhuYW1lKCk7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2l0X3BhdGgodGhlX3JlcG9zaXRvcnksIHd0LCBwYXRobmFtZSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHBhdGhuYW1lLT5idWY7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3dvcmt0cmVlX3BhdGgoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCSAgICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJc3RyYnVmX2FkZHN0cihidWYsIHJlcG8tPndvcmt0cmVlKTsKKwlpZihidWYtPmxlbiAmJiAhaXNfZGlyX3NlcChidWYtPmJ1ZltidWYtPmxlbiAtIDFdKSkKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy8nKTsKKworCXN0cmJ1Zl92YWRkZihidWYsIGZtdCwgYXJncyk7CisJc3RyYnVmX2NsZWFudXBfcGF0aChidWYpOworfQorCitjaGFyICpyZXBvX3dvcmt0cmVlX3BhdGgoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgYXJnczsKKworCWlmICghcmVwby0+d29ya3RyZWUpCisJCXJldHVybiBOVUxMOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlkb193b3JrdHJlZV9wYXRoKHJlcG8sICZwYXRoLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZwYXRoLCBOVUxMKTsKK30KKwordm9pZCBzdHJidWZfcmVwb193b3JrdHJlZV9wYXRoKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCWlmICghcmVwby0+d29ya3RyZWUpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fd29ya3RyZWVfcGF0aChyZXBvLCBzYiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7Cit9CisKKy8qIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLiAqLworc3RhdGljIGludCBkb19zdWJtb2R1bGVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCXN0cnVjdCBzdHJidWYgZ2l0X3N1Ym1vZHVsZV9jb21tb25fZGlyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBnaXRfc3VibW9kdWxlX2RpciA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlyZXQgPSBzdWJtb2R1bGVfdG9fZ2l0ZGlyKCZnaXRfc3VibW9kdWxlX2RpciwgcGF0aCk7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwOworCisJc3RyYnVmX2NvbXBsZXRlKCZnaXRfc3VibW9kdWxlX2RpciwgJy8nKTsKKwlzdHJidWZfYWRkYnVmKGJ1ZiwgJmdpdF9zdWJtb2R1bGVfZGlyKTsKKwlzdHJidWZfdmFkZGYoYnVmLCBmbXQsIGFyZ3MpOworCisJaWYgKGdldF9jb21tb25fZGlyX25vZW52KCZnaXRfc3VibW9kdWxlX2NvbW1vbl9kaXIsIGdpdF9zdWJtb2R1bGVfZGlyLmJ1ZikpCisJCXVwZGF0ZV9jb21tb25fZGlyKGJ1ZiwgZ2l0X3N1Ym1vZHVsZV9kaXIubGVuLCBnaXRfc3VibW9kdWxlX2NvbW1vbl9kaXIuYnVmKTsKKworCXN0cmJ1Zl9jbGVhbnVwX3BhdGgoYnVmKTsKKworY2xlYW51cDoKKwlzdHJidWZfcmVsZWFzZSgmZ2l0X3N1Ym1vZHVsZV9kaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZnaXRfc3VibW9kdWxlX2NvbW1vbl9kaXIpOworCXJldHVybiByZXQ7Cit9CisKK2NoYXIgKmdpdF9wYXRoZHVwX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgZXJyOworCXZhX2xpc3QgYXJnczsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZXJyID0gZG9fc3VibW9kdWxlX3BhdGgoJmJ1ZiwgcGF0aCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKGVycikgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCitpbnQgc3RyYnVmX2dpdF9wYXRoX3N1Ym1vZHVsZShzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgZXJyOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWVyciA9IGRvX3N1Ym1vZHVsZV9wYXRoKGJ1ZiwgcGF0aCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBkb19naXRfY29tbW9uX3BhdGgoY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwKKwkJCSAgICAgICB2YV9saXN0IGFyZ3MpCit7CisJc3RyYnVmX2FkZHN0cihidWYsIHJlcG8tPmNvbW1vbmRpcik7CisJaWYgKGJ1Zi0+bGVuICYmICFpc19kaXJfc2VwKGJ1Zi0+YnVmW2J1Zi0+bGVuIC0gMV0pKQorCQlzdHJidWZfYWRkY2goYnVmLCAnLycpOworCXN0cmJ1Zl92YWRkZihidWYsIGZtdCwgYXJncyk7CisJc3RyYnVmX2NsZWFudXBfcGF0aChidWYpOworfQorCitjb25zdCBjaGFyICpnaXRfY29tbW9uX3BhdGgoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiAqcGF0aG5hbWUgPSBnZXRfcGF0aG5hbWUoKTsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlkb19naXRfY29tbW9uX3BhdGgodGhlX3JlcG9zaXRvcnksIHBhdGhuYW1lLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gcGF0aG5hbWUtPmJ1ZjsKK30KKwordm9pZCBzdHJidWZfZ2l0X2NvbW1vbl9wYXRoKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX2dpdF9jb21tb25fcGF0aChyZXBvLCBzYiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7Cit9CisKK2ludCB2YWxpZGF0ZV9oZWFkcmVmKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciBidWZmZXJbMjU2XTsKKwljb25zdCBjaGFyICpyZWZuYW1lOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBmZDsKKwlzc2l6ZV90IGxlbjsKKworCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogTWFrZSBzdXJlIGl0IGlzIGEgInJlZnMvLi4iIHN5bWxpbmsgKi8KKwlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQlsZW4gPSByZWFkbGluayhwYXRoLCBidWZmZXIsIHNpemVvZihidWZmZXIpLTEpOworCQlpZiAobGVuID49IDUgJiYgIW1lbWNtcCgicmVmcy8iLCBidWZmZXIsIDUpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIEFueXRoaW5nIGVsc2UsIGp1c3Qgb3BlbiBpdCBhbmQgdHJ5IHRvIHNlZSBpZiBpdCBpcyBhIHN5bWJvbGljIHJlZi4KKwkgKi8KKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKwlsZW4gPSByZWFkX2luX2Z1bGwoZmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciktMSk7CisJY2xvc2UoZmQpOworCisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtMTsKKwlidWZmZXJbbGVuXSA9ICdcMCc7CisKKwkvKgorCSAqIElzIGl0IGEgc3ltYm9saWMgcmVmPworCSAqLworCWlmIChza2lwX3ByZWZpeChidWZmZXIsICJyZWY6IiwgJnJlZm5hbWUpKSB7CisJCXdoaWxlIChpc3NwYWNlKCpyZWZuYW1lKSkKKwkJCXJlZm5hbWUrKzsKKwkJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzLyIpKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJcyB0aGlzIGEgZGV0YWNoZWQgSEVBRD8KKwkgKi8KKwlpZiAoIWdldF9vaWRfaGV4KGJ1ZmZlciwgJm9pZCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3RydWN0IHBhc3N3ZCAqZ2V0cHdfc3RyKGNvbnN0IGNoYXIgKnVzZXJuYW1lLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBwYXNzd2QgKnB3OworCWNoYXIgKnVzZXJuYW1lX3ogPSB4bWVtZHVweih1c2VybmFtZSwgbGVuKTsKKwlwdyA9IGdldHB3bmFtKHVzZXJuYW1lX3opOworCWZyZWUodXNlcm5hbWVfeik7CisJcmV0dXJuIHB3OworfQorCisvKgorICogUmV0dXJuIGEgc3RyaW5nIHdpdGggfiBhbmQgfnVzZXIgZXhwYW5kZWQgdmlhIGdldHB3Ki4gIElmIGJ1ZiAhPSBOVUxMLAorICogdGhlbiBpdCBpcyBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcuIFJldHVybnMgTlVMTCBvbiBnZXRwdyBmYWlsdXJlIG9yCisgKiBpZiBwYXRoIGlzIE5VTEwuCisgKgorICogSWYgcmVhbF9ob21lIGlzIHRydWUsIHJlYWxfcGF0aCgkSE9NRSkgaXMgdXNlZCBpbiB0aGUgZXhwYW5zaW9uLgorICovCitjaGFyICpleHBhbmRfdXNlcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZWFsX2hvbWUpCit7CisJc3RydWN0IHN0cmJ1ZiB1c2VyX3BhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp0b19jb3B5ID0gcGF0aDsKKworCWlmIChwYXRoID09IE5VTEwpCisJCWdvdG8gcmV0dXJuX251bGw7CisJaWYgKHBhdGhbMF0gPT0gJ34nKSB7CisJCWNvbnN0IGNoYXIgKmZpcnN0X3NsYXNoID0gc3RyY2hybnVsKHBhdGgsICcvJyk7CisJCWNvbnN0IGNoYXIgKnVzZXJuYW1lID0gcGF0aCArIDE7CisJCXNpemVfdCB1c2VybmFtZV9sZW4gPSBmaXJzdF9zbGFzaCAtIHVzZXJuYW1lOworCQlpZiAodXNlcm5hbWVfbGVuID09IDApIHsKKwkJCWNvbnN0IGNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwkJCWlmICghaG9tZSkKKwkJCQlnb3RvIHJldHVybl9udWxsOworCQkJaWYgKHJlYWxfaG9tZSkKKwkJCQlzdHJidWZfYWRkX3JlYWxfcGF0aCgmdXNlcl9wYXRoLCBob21lKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkc3RyKCZ1c2VyX3BhdGgsIGhvbWUpOworI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCQkJY29udmVydF9zbGFzaGVzKHVzZXJfcGF0aC5idWYpOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcGFzc3dkICpwdyA9IGdldHB3X3N0cih1c2VybmFtZSwgdXNlcm5hbWVfbGVuKTsKKwkJCWlmICghcHcpCisJCQkJZ290byByZXR1cm5fbnVsbDsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnVzZXJfcGF0aCwgcHctPnB3X2Rpcik7CisJCX0KKwkJdG9fY29weSA9IGZpcnN0X3NsYXNoOworCX0KKwlzdHJidWZfYWRkc3RyKCZ1c2VyX3BhdGgsIHRvX2NvcHkpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZ1c2VyX3BhdGgsIE5VTEwpOworcmV0dXJuX251bGw6CisJc3RyYnVmX3JlbGVhc2UoJnVzZXJfcGF0aCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBGaXJzdCwgb25lIGRpcmVjdG9yeSB0byB0cnkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGFsZ29yaXRobS4KKyAqCisgKiAoMCkgSWYgInN0cmljdCIgaXMgZ2l2ZW4sIHRoZSBwYXRoIGlzIHVzZWQgYXMgZ2l2ZW4gYW5kIG5vIERXSU0gaXMKKyAqICAgICBkb25lLiBPdGhlcndpc2U6CisgKiAoMSkgIn4vcGF0aCIgdG8gbWVhbiBwYXRoIHVuZGVyIHRoZSBydW5uaW5nIHVzZXIncyBob21lIGRpcmVjdG9yeTsKKyAqICgyKSAifnVzZXIvcGF0aCIgdG8gbWVhbiBwYXRoIHVuZGVyIG5hbWVkIHVzZXIncyBob21lIGRpcmVjdG9yeTsKKyAqICgzKSAicmVsYXRpdmUvcGF0aCIgdG8gbWVhbiBjd2QgcmVsYXRpdmUgZGlyZWN0b3J5OyBvcgorICogKDQpICIvYWJzb2x1dGUvcGF0aCIgdG8gbWVhbiBhYnNvbHV0ZSBkaXJlY3RvcnkuCisgKgorICogVW5sZXNzICJzdHJpY3QiIGlzIGdpdmVuLCB3ZSBjaGVjayAiJXMvLmdpdCIsICIlcyIsICIlcy5naXQvLmdpdCIsICIlcy5naXQiCisgKiBpbiB0aGlzIG9yZGVyLiBXZSBzZWxlY3QgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIGEgdmFsaWQgZ2l0IHJlcG9zaXRvcnksIGFuZAorICogY2hkaXIoKSB0byBpdC4gSWYgbm9uZSBtYXRjaCwgb3Igd2UgZmFpbCB0byBjaGRpciwgd2UgcmV0dXJuIE5VTEwuCisgKgorICogSWYgYWxsIGdvZXMgd2VsbCwgd2UgcmV0dXJuIHRoZSBkaXJlY3Rvcnkgd2UgdXNlZCB0byBjaGRpcigpIChidXQKKyAqIGJlZm9yZSB+dXNlciBpcyBleHBhbmRlZCksIGF2b2lkaW5nIGdldGN3ZCgpIHJlc29sdmluZyBzeW1ib2xpYworICogbGlua3MuICBVc2VyIHJlbGF0aXZlIHBhdGhzIGFyZSBhbHNvIHJldHVybmVkIGFzIHRoZXkgYXJlIGdpdmVuLAorICogZXhjZXB0IERXSU0gc3VmZml4aW5nLgorICovCitjb25zdCBjaGFyICplbnRlcl9yZXBvKGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdHJpY3QpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdmFsaWRhdGVkX3BhdGggPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1c2VkX3BhdGggPSBTVFJCVUZfSU5JVDsKKworCWlmICghcGF0aCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXN0cmljdCkgeworCQlzdGF0aWMgY29uc3QgY2hhciAqc3VmZml4W10gPSB7CisJCQkiLy5naXQiLCAiIiwgIi5naXQvLmdpdCIsICIuZ2l0IiwgTlVMTCwKKwkJfTsKKwkJY29uc3QgY2hhciAqZ2l0ZmlsZTsKKwkJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKwkJaW50IGk7CisJCXdoaWxlICgoMSA8IGxlbikgJiYgKHBhdGhbbGVuLTFdID09ICcvJykpCisJCQlsZW4tLTsKKworCQkvKgorCQkgKiBXZSBjYW4gaGFuZGxlIGFyYml0cmFyeS1zaXplZCBidWZmZXJzLCBidXQgdGhpcyByZW1haW5zIGFzIGEKKwkJICogc2FuaXR5IGNoZWNrIG9uIHVudHJ1c3RlZCBpbnB1dC4KKwkJICovCisJCWlmIChQQVRIX01BWCA8PSBsZW4pCisJCQlyZXR1cm4gTlVMTDsKKworCQlzdHJidWZfcmVzZXQoJnVzZWRfcGF0aCk7CisJCXN0cmJ1Zl9yZXNldCgmdmFsaWRhdGVkX3BhdGgpOworCQlzdHJidWZfYWRkKCZ1c2VkX3BhdGgsIHBhdGgsIGxlbik7CisJCXN0cmJ1Zl9hZGQoJnZhbGlkYXRlZF9wYXRoLCBwYXRoLCBsZW4pOworCisJCWlmICh1c2VkX3BhdGguYnVmWzBdID09ICd+JykgeworCQkJY2hhciAqbmV3cGF0aCA9IGV4cGFuZF91c2VyX3BhdGgodXNlZF9wYXRoLmJ1ZiwgMCk7CisJCQlpZiAoIW5ld3BhdGgpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlzdHJidWZfYXR0YWNoKCZ1c2VkX3BhdGgsIG5ld3BhdGgsIHN0cmxlbihuZXdwYXRoKSwKKwkJCQkgICAgICBzdHJsZW4obmV3cGF0aCkpOworCQl9CisJCWZvciAoaSA9IDA7IHN1ZmZpeFtpXTsgaSsrKSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCXNpemVfdCBiYXNlbGVuID0gdXNlZF9wYXRoLmxlbjsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnVzZWRfcGF0aCwgc3VmZml4W2ldKTsKKwkJCWlmICghc3RhdCh1c2VkX3BhdGguYnVmLCAmc3QpICYmCisJCQkgICAgKFNfSVNSRUcoc3Quc3RfbW9kZSkgfHwKKwkJCSAgICAoU19JU0RJUihzdC5zdF9tb2RlKSAmJiBpc19naXRfZGlyZWN0b3J5KHVzZWRfcGF0aC5idWYpKSkpIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZ2YWxpZGF0ZWRfcGF0aCwgc3VmZml4W2ldKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0cmJ1Zl9zZXRsZW4oJnVzZWRfcGF0aCwgYmFzZWxlbik7CisJCX0KKwkJaWYgKCFzdWZmaXhbaV0pCisJCQlyZXR1cm4gTlVMTDsKKwkJZ2l0ZmlsZSA9IHJlYWRfZ2l0ZmlsZSh1c2VkX3BhdGguYnVmKTsKKwkJaWYgKGdpdGZpbGUpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmdXNlZF9wYXRoKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnVzZWRfcGF0aCwgZ2l0ZmlsZSk7CisJCX0KKwkJaWYgKGNoZGlyKHVzZWRfcGF0aC5idWYpKQorCQkJcmV0dXJuIE5VTEw7CisJCXBhdGggPSB2YWxpZGF0ZWRfcGF0aC5idWY7CisJfQorCWVsc2UgeworCQljb25zdCBjaGFyICpnaXRmaWxlID0gcmVhZF9naXRmaWxlKHBhdGgpOworCQlpZiAoZ2l0ZmlsZSkKKwkJCXBhdGggPSBnaXRmaWxlOworCQlpZiAoY2hkaXIocGF0aCkpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoaXNfZ2l0X2RpcmVjdG9yeSgiLiIpKSB7CisJCXNldF9naXRfZGlyKCIuIik7CisJCWNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0KCk7CisJCXJldHVybiBwYXRoOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGNhbGNfc2hhcmVkX3Blcm0oaW50IG1vZGUpCit7CisJaW50IHR3ZWFrOworCisJaWYgKGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpIDwgMCkKKwkJdHdlYWsgPSAtZ2V0X3NoYXJlZF9yZXBvc2l0b3J5KCk7CisJZWxzZQorCQl0d2VhayA9IGdldF9zaGFyZWRfcmVwb3NpdG9yeSgpOworCisJaWYgKCEobW9kZSAmIFNfSVdVU1IpKQorCQl0d2VhayAmPSB+MDIyMjsKKwlpZiAobW9kZSAmIFNfSVhVU1IpCisJCS8qIENvcHkgcmVhZCBiaXRzIHRvIGV4ZWN1dGUgYml0cyAqLworCQl0d2VhayB8PSAodHdlYWsgJiAwNDQ0KSA+PiAyOworCWlmIChnZXRfc2hhcmVkX3JlcG9zaXRvcnkoKSA8IDApCisJCW1vZGUgPSAobW9kZSAmIH4wNzc3KSB8IHR3ZWFrOworCWVsc2UKKwkJbW9kZSB8PSB0d2VhazsKKworCXJldHVybiBtb2RlOworfQorCisKK2ludCBhZGp1c3Rfc2hhcmVkX3Blcm0oY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgb2xkX21vZGUsIG5ld19tb2RlOworCisJaWYgKCFnZXRfc2hhcmVkX3JlcG9zaXRvcnkoKSkKKwkJcmV0dXJuIDA7CisJaWYgKGdldF9zdF9tb2RlX2JpdHMocGF0aCwgJm9sZF9tb2RlKSA8IDApCisJCXJldHVybiAtMTsKKworCW5ld19tb2RlID0gY2FsY19zaGFyZWRfcGVybShvbGRfbW9kZSk7CisJaWYgKFNfSVNESVIob2xkX21vZGUpKSB7CisJCS8qIENvcHkgcmVhZCBiaXRzIHRvIGV4ZWN1dGUgYml0cyAqLworCQluZXdfbW9kZSB8PSAobmV3X21vZGUgJiAwNDQ0KSA+PiAyOworCQluZXdfbW9kZSB8PSBGT1JDRV9ESVJfU0VUX0dJRDsKKwl9CisKKwlpZiAoKChvbGRfbW9kZSBeIG5ld19tb2RlKSAmIH5TX0lGTVQpICYmCisJCQljaG1vZChwYXRoLCAobmV3X21vZGUgJiB+U19JRk1UKSkgPCAwKQorCQlyZXR1cm4gLTI7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2FmZV9jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKmRpciwgaW50IHNoYXJlKQoreworCWlmIChta2RpcihkaXIsIDA3NzcpIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRUVYSVNUKSB7CisJCQlwZXJyb3IoZGlyKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAoc2hhcmUgJiYgYWRqdXN0X3NoYXJlZF9wZXJtKGRpcikpCisJCWRpZShfKCJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIpLCBkaXIpOworfQorCitzdGF0aWMgaW50IGhhdmVfc2FtZV9yb290KGNvbnN0IGNoYXIgKnBhdGgxLCBjb25zdCBjaGFyICpwYXRoMikKK3sKKwlpbnQgaXNfYWJzMSwgaXNfYWJzMjsKKworCWlzX2FiczEgPSBpc19hYnNvbHV0ZV9wYXRoKHBhdGgxKTsKKwlpc19hYnMyID0gaXNfYWJzb2x1dGVfcGF0aChwYXRoMik7CisJcmV0dXJuIChpc19hYnMxICYmIGlzX2FiczIgJiYgdG9sb3dlcihwYXRoMVswXSkgPT0gdG9sb3dlcihwYXRoMlswXSkpIHx8CisJICAgICAgICghaXNfYWJzMSAmJiAhaXNfYWJzMik7Cit9CisKKy8qCisgKiBHaXZlIHBhdGggYXMgcmVsYXRpdmUgdG8gcHJlZml4LgorICoKKyAqIFRoZSBzdHJidWYgbWF5IG9yIG1heSBub3QgYmUgdXNlZCwgc28gZG8gbm90IGFzc3VtZSBpdCBjb250YWlucyB0aGUKKyAqIHJldHVybmVkIHBhdGguCisgKi8KK2NvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqaW4sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IGluX2xlbiA9IGluID8gc3RybGVuKGluKSA6IDA7CisJaW50IHByZWZpeF9sZW4gPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7CisJaW50IGluX29mZiA9IDA7CisJaW50IHByZWZpeF9vZmYgPSAwOworCWludCBpID0gMCwgaiA9IDA7CisKKwlpZiAoIWluX2xlbikKKwkJcmV0dXJuICIuLyI7CisJZWxzZSBpZiAoIXByZWZpeF9sZW4pCisJCXJldHVybiBpbjsKKworCWlmIChoYXZlX3NhbWVfcm9vdChpbiwgcHJlZml4KSkKKwkJLyogYnlwYXNzIGRvc19kcml2ZSwgZm9yICJjOiIgaXMgaWRlbnRpY2FsIHRvICJDOiIgKi8KKwkJaSA9IGogPSBoYXNfZG9zX2RyaXZlX3ByZWZpeChpbik7CisJZWxzZSB7CisJCXJldHVybiBpbjsKKwl9CisKKwl3aGlsZSAoaSA8IHByZWZpeF9sZW4gJiYgaiA8IGluX2xlbiAmJiBwcmVmaXhbaV0gPT0gaW5bal0pIHsKKwkJaWYgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkgeworCQkJd2hpbGUgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkKKwkJCQlpKys7CisJCQl3aGlsZSAoaXNfZGlyX3NlcChpbltqXSkpCisJCQkJaisrOworCQkJcHJlZml4X29mZiA9IGk7CisJCQlpbl9vZmYgPSBqOworCQl9IGVsc2UgeworCQkJaSsrOworCQkJaisrOworCQl9CisJfQorCisJaWYgKAorCSAgICAvKiAicHJlZml4IiBzZWVtcyBsaWtlIHByZWZpeCBvZiAiaW4iICovCisJICAgIGkgPj0gcHJlZml4X2xlbiAmJgorCSAgICAvKgorCSAgICAgKiBidXQgIi9mb28iIGlzIG5vdCBhIHByZWZpeCBvZiAiL2Zvb2JhciIKKwkgICAgICogKGkuZS4gcHJlZml4IG5vdCBlbmQgd2l0aCAnLycpCisJICAgICAqLworCSAgICBwcmVmaXhfb2ZmIDwgcHJlZml4X2xlbikgeworCQlpZiAoaiA+PSBpbl9sZW4pIHsKKwkJCS8qIGluPSIvYS9iIiwgcHJlZml4PSIvYS9iIiAqLworCQkJaW5fb2ZmID0gaW5fbGVuOworCQl9IGVsc2UgaWYgKGlzX2Rpcl9zZXAoaW5bal0pKSB7CisJCQkvKiBpbj0iL2EvYi9jIiwgcHJlZml4PSIvYS9iIiAqLworCQkJd2hpbGUgKGlzX2Rpcl9zZXAoaW5bal0pKQorCQkJCWorKzsKKwkJCWluX29mZiA9IGo7CisJCX0gZWxzZSB7CisJCQkvKiBpbj0iL2EvYmJiL2MiLCBwcmVmaXg9Ii9hL2IiICovCisJCQlpID0gcHJlZml4X29mZjsKKwkJfQorCX0gZWxzZSBpZiAoCisJCSAgIC8qICJpbiIgaXMgc2hvcnQgdGhhbiAicHJlZml4IiAqLworCQkgICBqID49IGluX2xlbiAmJgorCQkgICAvKiAiaW4iIG5vdCBlbmQgd2l0aCAnLycgKi8KKwkJICAgaW5fb2ZmIDwgaW5fbGVuKSB7CisJCWlmIChpc19kaXJfc2VwKHByZWZpeFtpXSkpIHsKKwkJCS8qIGluPSIvYS9iIiwgcHJlZml4PSIvYS9iL2MvIiAqLworCQkJd2hpbGUgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkKKwkJCQlpKys7CisJCQlpbl9vZmYgPSBpbl9sZW47CisJCX0KKwl9CisJaW4gKz0gaW5fb2ZmOworCWluX2xlbiAtPSBpbl9vZmY7CisKKwlpZiAoaSA+PSBwcmVmaXhfbGVuKSB7CisJCWlmICghaW5fbGVuKQorCQkJcmV0dXJuICIuLyI7CisJCWVsc2UKKwkJCXJldHVybiBpbjsKKwl9CisKKwlzdHJidWZfcmVzZXQoc2IpOworCXN0cmJ1Zl9ncm93KHNiLCBpbl9sZW4pOworCisJd2hpbGUgKGkgPCBwcmVmaXhfbGVuKSB7CisJCWlmIChpc19kaXJfc2VwKHByZWZpeFtpXSkpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICIuLi8iKTsKKwkJCXdoaWxlIChpc19kaXJfc2VwKHByZWZpeFtpXSkpCisJCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKwkJaSsrOworCX0KKwlpZiAoIWlzX2Rpcl9zZXAocHJlZml4W3ByZWZpeF9sZW4gLSAxXSkpCisJCXN0cmJ1Zl9hZGRzdHIoc2IsICIuLi8iKTsKKworCXN0cmJ1Zl9hZGRzdHIoc2IsIGluKTsKKworCXJldHVybiBzYi0+YnVmOworfQorCisvKgorICogQSBzaW1wbGVyIGltcGxlbWVudGF0aW9uIG9mIHJlbGF0aXZlX3BhdGgKKyAqCisgKiBHZXQgcmVsYXRpdmUgcGF0aCBieSByZW1vdmluZyAicHJlZml4IiBmcm9tICJpbiIuIFRoaXMgZnVuY3Rpb24KKyAqIGZpcnN0IGFwcGVhcnMgaW4gdjEuNS42LTEtZzA0NGJiYmMsIGFuZCBtYWtlcyBnaXRfZGlyIHNob3J0ZXIKKyAqIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlIHdoZW4gdHJhdmVyc2luZyB0aGUgcGF0aCB0byB3b3JrX3RyZWUuCisgKi8KK2NvbnN0IGNoYXIgKnJlbW92ZV9sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqaW4sIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaSA9IDAsIGogPSAwOworCisJaWYgKCFwcmVmaXggfHwgIXByZWZpeFswXSkKKwkJcmV0dXJuIGluOworCXdoaWxlIChwcmVmaXhbaV0pIHsKKwkJaWYgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkgeworCQkJaWYgKCFpc19kaXJfc2VwKGluW2pdKSkKKwkJCQlyZXR1cm4gaW47CisJCQl3aGlsZSAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKQorCQkJCWkrKzsKKwkJCXdoaWxlIChpc19kaXJfc2VwKGluW2pdKSkKKwkJCQlqKys7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChpbltqXSAhPSBwcmVmaXhbaV0pIHsKKwkJCXJldHVybiBpbjsKKwkJfQorCQlpKys7CisJCWorKzsKKwl9CisJaWYgKAorCSAgICAvKiAiL2ZvbyIgaXMgYSBwcmVmaXggb2YgIi9mb28iICovCisJICAgIGluW2pdICYmCisJICAgIC8qICIvZm9vIiBpcyBub3QgYSBwcmVmaXggb2YgIi9mb29iYXIiICovCisJICAgICFpc19kaXJfc2VwKHByZWZpeFtpLTFdKSAmJiAhaXNfZGlyX3NlcChpbltqXSkKKwkgICApCisJCXJldHVybiBpbjsKKwl3aGlsZSAoaXNfZGlyX3NlcChpbltqXSkpCisJCWorKzsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlpZiAoIWluW2pdKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICIuIik7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKCZidWYsIGluICsgaik7CisJcmV0dXJuIGJ1Zi5idWY7Cit9CisKKy8qCisgKiBJdCBpcyBva2F5IGlmIGRzdCA9PSBzcmMsIGJ1dCB0aGV5IHNob3VsZCBub3Qgb3ZlcmxhcCBvdGhlcndpc2UuCisgKiBUaGUgImRzdCIgYnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyAic3JjIjsgbm9ybWFsaXppbmcgbWF5IHNocmluaworICogdGhlIHNpemUgb2YgdGhlIHBhdGgsIGJ1dCB3aWxsIG5ldmVyIGdyb3cgaXQuCisgKgorICogUGVyZm9ybXMgdGhlIGZvbGxvd2luZyBub3JtYWxpemF0aW9ucyBvbiBzcmMsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBkc3Q6CisgKiAtIEVuc3VyZXMgdGhhdCBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJy8nIChXaW5kb3dzIG9ubHkpCisgKiAtIFNxdWFzaGVzIHNlcXVlbmNlcyBvZiAnLycgZXhjZXB0ICIvL3NlcnZlci9zaGFyZSIgb24gV2luZG93cworICogLSBSZW1vdmVzICIuIiBjb21wb25lbnRzLgorICogLSBSZW1vdmVzICIuLiIgY29tcG9uZW50cywgYW5kIHRoZSBjb21wb25lbnRzIHRoZSBwcmVjZWRlIHRoZW0uCisgKiBSZXR1cm5zIGZhaWx1cmUgKG5vbi16ZXJvKSBpZiBhICIuLiIgY29tcG9uZW50IGFwcGVhcnMgYXMgZmlyc3QgcGF0aAorICogY29tcG9uZW50IGFueXRpbWUgZHVyaW5nIHRoZSBub3JtYWxpemF0aW9uLiBPdGhlcndpc2UsIHJldHVybnMgc3VjY2VzcyAoMCkuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcHVyZWx5IHRleHR1YWwuICBJdCBkb2VzIG5vdCBmb2xsb3cgc3ltbGlua3MsCisgKiB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgcGF0aCwgb3IgbWFrZSBhbnkgc3lzdGVtIGNhbGxzLgorICoKKyAqIHByZWZpeF9sZW4gIT0gTlVMTCBpcyBmb3IgYSBzcGVjaWZpYyBjYXNlIG9mIHByZWZpeF9wYXRoc3BlYygpOgorICogYXNzdW1lIHRoYXQgc3JjID09IGRzdCBhbmQgc3JjWzAuLnByZWZpeF9sZW4tMV0gaXMgYWxyZWFkeQorICogbm9ybWFsaXplZCwgYW55IHRpbWUgIi4uLyIgZWF0cyB1cCB0byB0aGUgcHJlZml4X2xlbiBwYXJ0LAorICogcHJlZml4X2xlbiBpcyByZWR1Y2VkLiBJbiB0aGUgZW5kIHByZWZpeF9sZW4gaXMgdGhlIHJlbWFpbmluZworICogcHJlZml4IHRoYXQgaGFzIG5vdCBiZWVuIG92ZXJyaWRkZW4gYnkgdXNlciBwYXRoc3BlYy4KKyAqCisgKiBORUVEU1dPUks6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBwZXJmb3JtIG5vcm1hbGl6YXRpb24gdy5yLnQuIHRyYWlsaW5nICcvJy4KKyAqIEZvciBldmVyeXRoaW5nIGJ1dCB0aGUgcm9vdCBmb2xkZXIgaXRzZWxmLCB0aGUgbm9ybWFsaXplZCBwYXRoIHNob3VsZCBub3QKKyAqIGVuZCB3aXRoIGEgJy8nLCB0aGVuIHRoZSBjYWxsZXJzIG5lZWQgdG8gYmUgZml4ZWQgdXAgYWNjb3JkaW5nbHkuCisgKgorICovCitpbnQgbm9ybWFsaXplX3BhdGhfY29weV9sZW4oY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCAqcHJlZml4X2xlbikKK3sKKwljaGFyICpkc3QwOworCWNvbnN0IGNoYXIgKmVuZDsKKworCS8qCisJICogQ29weSBpbml0aWFsIHBhcnQgb2YgYWJzb2x1dGUgcGF0aDogIi8iLCAiQzovIiwgIi8vc2VydmVyL3NoYXJlLyIuCisJICovCisJZW5kID0gc3JjICsgb2Zmc2V0XzFzdF9jb21wb25lbnQoc3JjKTsKKwl3aGlsZSAoc3JjIDwgZW5kKSB7CisJCWNoYXIgYyA9ICpzcmMrKzsKKwkJaWYgKGlzX2Rpcl9zZXAoYykpCisJCQljID0gJy8nOworCQkqZHN0KysgPSBjOworCX0KKwlkc3QwID0gZHN0OworCisJd2hpbGUgKGlzX2Rpcl9zZXAoKnNyYykpCisJCXNyYysrOworCisJZm9yICg7OykgeworCQljaGFyIGMgPSAqc3JjOworCisJCS8qCisJCSAqIEEgcGF0aCBjb21wb25lbnQgdGhhdCBiZWdpbnMgd2l0aCAuIGNvdWxkIGJlCisJCSAqIHNwZWNpYWw6CisJCSAqICgxKSAiLiIgYW5kIGVuZHMgICAtLSBpZ25vcmUgYW5kIHRlcm1pbmF0ZS4KKwkJICogKDIpICIuLyIgICAgICAgICAgIC0tIGlnbm9yZSB0aGVtLCBlYXQgc2xhc2ggYW5kIGNvbnRpbnVlLgorCQkgKiAoMykgIi4uIiBhbmQgZW5kcyAgLS0gc3RyaXAgb25lIGFuZCB0ZXJtaW5hdGUuCisJCSAqICg0KSAiLi4vIiAgICAgICAgICAtLSBzdHJpcCBvbmUsIGVhdCBzbGFzaCBhbmQgY29udGludWUuCisJCSAqLworCQlpZiAoYyA9PSAnLicpIHsKKwkJCWlmICghc3JjWzFdKSB7CisJCQkJLyogKDEpICovCisJCQkJc3JjKys7CisJCQl9IGVsc2UgaWYgKGlzX2Rpcl9zZXAoc3JjWzFdKSkgeworCQkJCS8qICgyKSAqLworCQkJCXNyYyArPSAyOworCQkJCXdoaWxlIChpc19kaXJfc2VwKCpzcmMpKQorCQkJCQlzcmMrKzsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoc3JjWzFdID09ICcuJykgeworCQkJCWlmICghc3JjWzJdKSB7CisJCQkJCS8qICgzKSAqLworCQkJCQlzcmMgKz0gMjsKKwkJCQkJZ290byB1cF9vbmU7CisJCQkJfSBlbHNlIGlmIChpc19kaXJfc2VwKHNyY1syXSkpIHsKKwkJCQkJLyogKDQpICovCisJCQkJCXNyYyArPSAzOworCQkJCQl3aGlsZSAoaXNfZGlyX3NlcCgqc3JjKSkKKwkJCQkJCXNyYysrOworCQkJCQlnb3RvIHVwX29uZTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBjb3B5IHVwIHRvIHRoZSBuZXh0ICcvJywgYW5kIGVhdCBhbGwgJy8nICovCisJCXdoaWxlICgoYyA9ICpzcmMrKykgIT0gJ1wwJyAmJiAhaXNfZGlyX3NlcChjKSkKKwkJCSpkc3QrKyA9IGM7CisJCWlmIChpc19kaXJfc2VwKGMpKSB7CisJCQkqZHN0KysgPSAnLyc7CisJCQl3aGlsZSAoaXNfZGlyX3NlcChjKSkKKwkJCQljID0gKnNyYysrOworCQkJc3JjLS07CisJCX0gZWxzZSBpZiAoIWMpCisJCQlicmVhazsKKwkJY29udGludWU7CisKKwl1cF9vbmU6CisJCS8qCisJCSAqIGRzdDAuLmRzdCBpcyBwcmVmaXggcG9ydGlvbiwgYW5kIGRzdFstMV0gaXMgJy8nOworCQkgKiBnbyB1cCBvbmUgbGV2ZWwuCisJCSAqLworCQlkc3QtLTsJLyogZ28gdG8gdHJhaWxpbmcgJy8nICovCisJCWlmIChkc3QgPD0gZHN0MCkKKwkJCXJldHVybiAtMTsKKwkJLyogV2luZG93czogZHN0Wy0xXSBjYW5ub3QgYmUgYmFja3NsYXNoIGFueW1vcmUgKi8KKwkJd2hpbGUgKGRzdDAgPCBkc3QgJiYgZHN0Wy0xXSAhPSAnLycpCisJCQlkc3QtLTsKKwkJaWYgKHByZWZpeF9sZW4gJiYgKnByZWZpeF9sZW4gPiBkc3QgLSBkc3QwKQorCQkJKnByZWZpeF9sZW4gPSBkc3QgLSBkc3QwOworCX0KKwkqZHN0ID0gJ1wwJzsKKwlyZXR1cm4gMDsKK30KKworaW50IG5vcm1hbGl6ZV9wYXRoX2NvcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJcmV0dXJuIG5vcm1hbGl6ZV9wYXRoX2NvcHlfbGVuKGRzdCwgc3JjLCBOVUxMKTsKK30KKworLyoKKyAqIHBhdGggPSBDYW5vbmljYWwgYWJzb2x1dGUgcGF0aAorICogcHJlZml4ZXMgPSBzdHJpbmdfbGlzdCBjb250YWluaW5nIG5vcm1hbGl6ZWQsIGFic29sdXRlIHBhdGhzIHdpdGhvdXQKKyAqIHRyYWlsaW5nIHNsYXNoZXMgKGV4Y2VwdCBmb3IgdGhlIHJvb3QgZGlyZWN0b3J5LCB3aGljaCBpcyBkZW5vdGVkIGJ5ICIvIikuCisgKgorICogRGV0ZXJtaW5lcywgZm9yIGVhY2ggcGF0aCBpbiBwcmVmaXhlcywgd2hldGhlciB0aGUgInByZWZpeCIKKyAqIGlzIGFuIGFuY2VzdG9yIGRpcmVjdG9yeSBvZiBwYXRoLiAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0CisgKiBhbmNlc3RvciBkaXJlY3RvcnksIGV4Y2x1ZGluZyBhbnkgdHJhaWxpbmcgc2xhc2hlcywgb3IgLTEgaWYgbm8gcHJlZml4CisgKiBpcyBhbiBhbmNlc3Rvci4gIChOb3RlIHRoYXQgdGhpcyBtZWFucyAwIGlzIHJldHVybmVkIGlmIHByZWZpeGVzIGlzCisgKiBbIi8iXS4pICIvZm9vIiBpcyBub3QgY29uc2lkZXJlZCBhbiBhbmNlc3RvciBvZiAiL2Zvb2JhciIuICBEaXJlY3RvcmllcworICogYXJlIG5vdCBjb25zaWRlcmVkIHRvIGJlIHRoZWlyIG93biBhbmNlc3RvcnMuICBwYXRoIG11c3QgYmUgaW4gYQorICogY2Fub25pY2FsIGZvcm06IGVtcHR5IGNvbXBvbmVudHMsIG9yICIuIiBvciAiLi4iIGNvbXBvbmVudHMgYXJlIG5vdAorICogYWxsb3dlZC4KKyAqLworaW50IGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcHJlZml4ZXMpCit7CisJaW50IGksIG1heF9sZW4gPSAtMTsKKworCWlmICghc3RyY21wKHBhdGgsICIvIikpCisJCXJldHVybiAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBwcmVmaXhlcy0+bnI7IGkrKykgeworCQljb25zdCBjaGFyICpjZWlsID0gcHJlZml4ZXMtPml0ZW1zW2ldLnN0cmluZzsKKwkJaW50IGxlbiA9IHN0cmxlbihjZWlsKTsKKworCQlpZiAobGVuID09IDEgJiYgY2VpbFswXSA9PSAnLycpCisJCQlsZW4gPSAwOyAvKiByb290IG1hdGNoZXMgYW55dGhpbmcsIHdpdGggbGVuZ3RoIDAgKi8KKwkJZWxzZSBpZiAoIXN0cm5jbXAocGF0aCwgY2VpbCwgbGVuKSAmJiBwYXRoW2xlbl0gPT0gJy8nKQorCQkJOyAvKiBtYXRjaCBvZiBsZW5ndGggbGVuICovCisJCWVsc2UKKwkJCWNvbnRpbnVlOyAvKiBubyBtYXRjaCAqLworCisJCWlmIChsZW4gPiBtYXhfbGVuKQorCQkJbWF4X2xlbiA9IGxlbjsKKwl9CisKKwlyZXR1cm4gbWF4X2xlbjsKK30KKworLyogc3RyaXAgYXJiaXRyYXJ5IGFtb3VudCBvZiBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBhdCBlbmQgb2YgcGF0aCAqLworc3RhdGljIGlubGluZSBpbnQgY2hvbXBfdHJhaWxpbmdfZGlyX3NlcChjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKQoreworCXdoaWxlIChsZW4gJiYgaXNfZGlyX3NlcChwYXRoW2xlbiAtIDFdKSkKKwkJbGVuLS07CisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIElmIHBhdGggZW5kcyB3aXRoIHN1ZmZpeCAoY29tcGxldGUgcGF0aCBjb21wb25lbnRzKSwgcmV0dXJucyB0aGUgb2Zmc2V0IG9mCisgKiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHBhdGggYmVmb3JlIHRoZSBzdWZmaXggKHNhbnMgdHJhaWxpbmcgZGlyZWN0b3J5CisgKiBzZXBhcmF0b3JzKSwgYW5kIC0xIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHNzaXplX3Qgc3RyaXBwZWRfcGF0aF9zdWZmaXhfb2Zmc2V0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlpbnQgcGF0aF9sZW4gPSBzdHJsZW4ocGF0aCksIHN1ZmZpeF9sZW4gPSBzdHJsZW4oc3VmZml4KTsKKworCXdoaWxlIChzdWZmaXhfbGVuKSB7CisJCWlmICghcGF0aF9sZW4pCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKGlzX2Rpcl9zZXAocGF0aFtwYXRoX2xlbiAtIDFdKSkgeworCQkJaWYgKCFpc19kaXJfc2VwKHN1ZmZpeFtzdWZmaXhfbGVuIC0gMV0pKQorCQkJCXJldHVybiAtMTsKKwkJCXBhdGhfbGVuID0gY2hvbXBfdHJhaWxpbmdfZGlyX3NlcChwYXRoLCBwYXRoX2xlbik7CisJCQlzdWZmaXhfbGVuID0gY2hvbXBfdHJhaWxpbmdfZGlyX3NlcChzdWZmaXgsIHN1ZmZpeF9sZW4pOworCQl9CisJCWVsc2UgaWYgKHBhdGhbLS1wYXRoX2xlbl0gIT0gc3VmZml4Wy0tc3VmZml4X2xlbl0pCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHBhdGhfbGVuICYmICFpc19kaXJfc2VwKHBhdGhbcGF0aF9sZW4gLSAxXSkpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gY2hvbXBfdHJhaWxpbmdfZGlyX3NlcChwYXRoLCBwYXRoX2xlbik7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGggZW5kcyB3aXRoIGNvbXBvbmVudHMsIGNvbnNpZGVyaW5nIG9ubHkgY29tcGxldGUgcGF0aAorICogY29tcG9uZW50cywgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAqLworaW50IGVuZHNfd2l0aF9wYXRoX2NvbXBvbmVudHMoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqY29tcG9uZW50cykKK3sKKwlyZXR1cm4gc3RyaXBwZWRfcGF0aF9zdWZmaXhfb2Zmc2V0KHBhdGgsIGNvbXBvbmVudHMpICE9IC0xOworfQorCisvKgorICogSWYgcGF0aCBlbmRzIHdpdGggc3VmZml4IChjb21wbGV0ZSBwYXRoIGNvbXBvbmVudHMpLCByZXR1cm5zIHRoZQorICogcGFydCBiZWZvcmUgc3VmZml4IChzYW5zIHRyYWlsaW5nIGRpcmVjdG9yeSBzZXBhcmF0b3JzKS4KKyAqIE90aGVyd2lzZSByZXR1cm5zIE5VTEwuCisgKi8KK2NoYXIgKnN0cmlwX3BhdGhfc3VmZml4KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlzc2l6ZV90IG9mZnNldCA9IHN0cmlwcGVkX3BhdGhfc3VmZml4X29mZnNldChwYXRoLCBzdWZmaXgpOworCisJcmV0dXJuIG9mZnNldCA9PSAtMSA/IE5VTEwgOiB4c3RybmR1cChwYXRoLCBvZmZzZXQpOworfQorCitpbnQgZGFlbW9uX2F2b2lkX2FsaWFzKGNvbnN0IGNoYXIgKnApCit7CisJaW50IHNsLCBuZG90OworCisJLyoKKwkgKiBUaGlzIHJlc3VycmVjdHMgdGhlIGJlbHRzIGFuZCBzdXNwZW5kZXJzIHBhcmFub2lhIGNoZWNrIGJ5IEhQQQorCSAqIGRvbmUgaW4gPDQzNTU2MEY3LjQwODAwMDZAenl0b3IuY29tPiB0aHJlYWQsIG5vdyBlbnRlcl9yZXBvKCkKKwkgKiBkb2VzIG5vdCBkbyBnZXRjd2QoKSBiYXNlZCBwYXRoIGNhbm9uaWNhbGl6YXRpb24uCisJICoKKwkgKiBzbCBiZWNvbWVzIHRydWUgaW1tZWRpYXRlbHkgYWZ0ZXIgc2VlaW5nICcvJyBhbmQgY29udGludWVzIHRvCisJICogYmUgdHJ1ZSBhcyBsb25nIGFzIGRvdHMgY29udGludWUgYWZ0ZXIgdGhhdCB3aXRob3V0IGludGVydmVuaW5nCisJICogbm9uLWRvdCBjaGFyYWN0ZXIuCisJICovCisJaWYgKCFwIHx8ICgqcCAhPSAnLycgJiYgKnAgIT0gJ34nKSkKKwkJcmV0dXJuIC0xOworCXNsID0gMTsgbmRvdCA9IDA7CisJcCsrOworCisJd2hpbGUgKDEpIHsKKwkJY2hhciBjaCA9ICpwKys7CisJCWlmIChzbCkgeworCQkJaWYgKGNoID09ICcuJykKKwkJCQluZG90Kys7CisJCQllbHNlIGlmIChjaCA9PSAnLycpIHsKKwkJCQlpZiAobmRvdCA8IDMpCisJCQkJCS8qIHJlamVjdCAvLywgLy4vIGFuZCAvLi4vICovCisJCQkJCXJldHVybiAtMTsKKwkJCQluZG90ID0gMDsKKwkJCX0KKwkJCWVsc2UgaWYgKGNoID09IDApIHsKKwkJCQlpZiAoMCA8IG5kb3QgJiYgbmRvdCA8IDMpCisJCQkJCS8qIHJlamVjdCAvLiQgYW5kIC8uLiQgKi8KKwkJCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiAwOworCQkJfQorCQkJZWxzZQorCQkJCXNsID0gbmRvdCA9IDA7CisJCX0KKwkJZWxzZSBpZiAoY2ggPT0gMCkKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChjaCA9PSAnLycpIHsKKwkJCXNsID0gMTsKKwkJCW5kb3QgPSAwOworCQl9CisJfQorfQorCisvKgorICogT24gTlRGUywgd2UgbmVlZCB0byBiZSBjYXJlZnVsIHRvIGRpc2FsbG93IGNlcnRhaW4gc3lub255bXMgb2YgdGhlIGAuZ2l0L2AKKyAqIGRpcmVjdG9yeToKKyAqCisgKiAtIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGZpbGUgbmFtZXMgdGhhdCBlbmQgaW4gc3BhY2VzIG9yIHBlcmlvZHMgYXJlCisgKiAgIGF1dG9tYXRpY2FsbHkgdHJpbW1lZC4gVGhlcmVmb3JlLCBgLmdpdCAuIC4gLi9gIGlzIGEgdmFsaWQgd2F5IHRvIHJlZmVyCisgKiAgIHRvIGAuZ2l0L2AuCisgKgorICogLSBGb3Igb3RoZXIgaGlzdG9yaWNhbCByZWFzb25zLCBmaWxlIG5hbWVzIHRoYXQgZG8gbm90IGNvbmZvcm0gdG8gdGhlIDguMworICogICBmb3JtYXQgKHVwIHRvIGVpZ2h0IGNoYXJhY3RlcnMgZm9yIHRoZSBiYXNlbmFtZSwgdGhyZWUgZm9yIHRoZSBmaWxlCisgKiAgIGV4dGVuc2lvbiwgY2VydGFpbiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIHN1Y2ggYXMgYCtgLCBldGMpIGFyZSBhc3NvY2lhdGVkCisgKiAgIHdpdGggYSBzby1jYWxsZWQgInNob3J0IG5hbWUiLCBhdCBsZWFzdCBvbiB0aGUgYEM6YCBkcml2ZSBieSBkZWZhdWx0LgorICogICBXaGljaCBtZWFucyB0aGF0IGBnaXR+MS9gIGlzIGEgdmFsaWQgd2F5IHRvIHJlZmVyIHRvIGAuZ2l0L2AuCisgKgorICogICBOb3RlOiBUZWNobmljYWxseSwgYC5naXQvYCBjb3VsZCByZWNlaXZlIHRoZSBzaG9ydCBuYW1lIGBnaXR+MmAgaWYgdGhlCisgKiAgIHNob3J0IG5hbWUgYGdpdH4xYCB3ZXJlIGFscmVhZHkgdXNlZC4gSW4gR2l0LCBob3dldmVyLCB3ZSBndWFyYW50ZWUgdGhhdAorICogICBgLmdpdGAgaXMgdGhlIGZpcnN0IGl0ZW0gaW4gYSBkaXJlY3RvcnksIHRoZXJlZm9yZSBpdCB3aWxsIGJlIGFzc29jaWF0ZWQKKyAqICAgd2l0aCB0aGUgc2hvcnQgbmFtZSBgZ2l0fjFgICh1bmxlc3Mgc2hvcnQgbmFtZXMgYXJlIGRpc2FibGVkKS4KKyAqCisgKiAtIEZvciB5ZXQgb3RoZXIgaGlzdG9yaWNhbCByZWFzb25zLCBOVEZTIHN1cHBvcnRzIHNvLWNhbGxlZCAiQWx0ZXJuYXRlIERhdGEKKyAqICAgU3RyZWFtcyIsIGkuZS4gbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZmlsZSwgcmVmZXJyZWQgdG8gdmlhCisgKiAgIGA8ZmlsZW5hbWU+OjxzdHJlYW0tbmFtZT46PHN0cmVhbS10eXBlPmAuIFRoZXJlIGV4aXN0cyBhIGRlZmF1bHQgc3RyZWFtCisgKiAgIHR5cGUgZm9yIGRpcmVjdG9yaWVzLCBhbGxvd2luZyBgLmdpdC9gIHRvIGJlIGFjY2Vzc2VkIHZpYQorICogICBgLmdpdDo6JElOREVYX0FMTE9DQVRJT04vYC4KKyAqCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAxLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc3BlY2lmaWVkIGZpbGUvZGlyZWN0b3J5CisgKiBuYW1lIHJlZmVycyB0byBhIGAuZ2l0YCBmaWxlIG9yIGRpcmVjdG9yeSwgb3IgdG8gYW55IG9mIHRoZXNlIHN5bm9ueW1zLCBhbmQKKyAqIEdpdCBzaG91bGQgdGhlcmVmb3JlIG5vdCB0cmFjayBpdC4KKyAqCisgKiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgX2FsbF8gQWx0ZXJuYXRlIERhdGEgU3RyZWFtcyBvZiBgLmdpdC9gIGFyZQorICogZm9yYmlkZGVuLCBub3QganVzdCBgOjokSU5ERVhfQUxMT0NBVElPTmAuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGBnaXQgZnNja2AgZXZlbiBvbiBwbGF0Zm9ybXMgd2hlcmUKKyAqIHRoZSBiYWNrc2xhc2ggaXMgYSByZWd1bGFyIGZpbGVuYW1lIGNoYXJhY3RlciwgdGhlcmVmb3JlIGl0IG5lZWRzIHRvIGhhbmRsZQorICogYmFja2xhc2ggY2hhcmFjdGVycyBpbiB0aGUgcHJvdmlkZWQgYG5hbWVgIHNwZWNpYWxseTogdGhleSBhcmUgaW50ZXJwcmV0ZWQKKyAqIGFzIGRpcmVjdG9yeSBzZXBhcmF0b3JzLgorICovCitpbnQgaXNfbnRmc19kb3RnaXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyIGM7CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3aGVuIHdlIGRvbid0IGZpbmQgYC5naXRgIG9yIGBnaXR+MWAgd2UgZW5kIHVwIHdpdGggYG5hbWVgCisJICogYWR2YW5jZWQgcGFydHdheSB0aHJvdWdoIHRoZSBzdHJpbmcuIFRoYXQncyBva2F5LCB0aG91Z2gsIGFzIHdlCisJICogcmV0dXJuIGltbWVkaWF0ZWx5IGluIHRob3NlIGNhc2VzLCB3aXRob3V0IGxvb2tpbmcgYXQgYG5hbWVgIGFueQorCSAqIGZ1cnRoZXIuCisJICovCisJYyA9ICoobmFtZSsrKTsKKwlpZiAoYyA9PSAnLicpIHsKKwkJLyogLmdpdCAqLworCQlpZiAoKChjID0gKihuYW1lKyspKSAhPSAnZycgJiYgYyAhPSAnRycpIHx8CisJCSAgICAoKGMgPSAqKG5hbWUrKykpICE9ICdpJyAmJiBjICE9ICdJJykgfHwKKwkJICAgICgoYyA9ICoobmFtZSsrKSkgIT0gJ3QnICYmIGMgIT0gJ1QnKSkKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAoYyA9PSAnZycgfHwgYyA9PSAnRycpIHsKKwkJLyogZ2l0IH4xICovCisJCWlmICgoKGMgPSAqKG5hbWUrKykpICE9ICdpJyAmJiBjICE9ICdJJykgfHwKKwkJICAgICgoYyA9ICoobmFtZSsrKSkgIT0gJ3QnICYmIGMgIT0gJ1QnKSB8fAorCQkgICAgKihuYW1lKyspICE9ICd+JyB8fAorCQkgICAgKihuYW1lKyspICE9ICcxJykKKwkJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMDsKKworCWZvciAoOzspIHsKKwkJYyA9ICoobmFtZSsrKTsKKwkJaWYgKCFjIHx8IGMgPT0gJ1xcJyB8fCBjID09ICcvJyB8fCBjID09ICc6JykKKwkJCXJldHVybiAxOworCQlpZiAoYyAhPSAnLicgJiYgYyAhPSAnICcpCisJCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNfbnRmc19kb3RfZ2VuZXJpYyhjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRvdGdpdF9uYW1lLAorCQkJICAgICAgIHNpemVfdCBsZW4sCisJCQkgICAgICAgY29uc3QgY2hhciAqZG90Z2l0X250ZnNfc2hvcnRuYW1lX3ByZWZpeCkKK3sKKwlpbnQgc2F3X3RpbGRlOworCXNpemVfdCBpOworCisJaWYgKChuYW1lWzBdID09ICcuJyAmJiAhc3RybmNhc2VjbXAobmFtZSArIDEsIGRvdGdpdF9uYW1lLCBsZW4pKSkgeworCQlpID0gbGVuICsgMTsKK29ubHlfc3BhY2VzX2FuZF9wZXJpb2RzOgorCQlmb3IgKDs7KSB7CisJCQljaGFyIGMgPSBuYW1lW2krK107CisJCQlpZiAoIWMgfHwgYyA9PSAnOicpCisJCQkJcmV0dXJuIDE7CisJCQlpZiAoYyAhPSAnICcgJiYgYyAhPSAnLicpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIElzIGl0IGEgcmVndWxhciBOVEZTIHNob3J0IG5hbWUsIGkuZS4gc2hvcnRlbmVkIHRvIDYgY2hhcmFjdGVycywKKwkgKiBmb2xsb3dlZCBieSB+MSwgLi4uIH40PworCSAqLworCWlmICghc3RybmNhc2VjbXAobmFtZSwgZG90Z2l0X25hbWUsIDYpICYmIG5hbWVbNl0gPT0gJ34nICYmCisJICAgIG5hbWVbN10gPj0gJzEnICYmIG5hbWVbN10gPD0gJzQnKSB7CisJCWkgPSA4OworCQlnb3RvIG9ubHlfc3BhY2VzX2FuZF9wZXJpb2RzOworCX0KKworCS8qCisJICogSXMgaXQgYSBmYWxsLWJhY2sgTlRGUyBzaG9ydCBuYW1lIChmb3IgZGV0YWlscywgc2VlCisJICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvOC4zX2ZpbGVuYW1lPworCSAqLworCWZvciAoaSA9IDAsIHNhd190aWxkZSA9IDA7IGkgPCA4OyBpKyspCisJCWlmIChuYW1lW2ldID09ICdcMCcpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAoc2F3X3RpbGRlKSB7CisJCQlpZiAobmFtZVtpXSA8ICcwJyB8fCBuYW1lW2ldID4gJzknKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKG5hbWVbaV0gPT0gJ34nKSB7CisJCQlpZiAobmFtZVsrK2ldIDwgJzEnIHx8IG5hbWVbaV0gPiAnOScpCisJCQkJcmV0dXJuIDA7CisJCQlzYXdfdGlsZGUgPSAxOworCQl9IGVsc2UgaWYgKGkgPj0gNikKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChuYW1lW2ldICYgMHg4MCkgeworCQkJLyoKKwkJCSAqIFdlIGtub3cgb3VyIG5lZWRsZXMgY29udGFpbiBvbmx5IEFTQ0lJLCBzbyB3ZSBjbGFtcAorCQkJICogaGVyZSB0byBtYWtlIHRoZSByZXN1bHRzIG9mIHRvbG93ZXIoKSBzYW5lLgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmICh0b2xvd2VyKG5hbWVbaV0pICE9IGRvdGdpdF9udGZzX3Nob3J0bmFtZV9wcmVmaXhbaV0pCisJCQlyZXR1cm4gMDsKKworCWdvdG8gb25seV9zcGFjZXNfYW5kX3BlcmlvZHM7Cit9CisKKy8qCisgKiBJbmxpbmUgaGVscGVyIHRvIG1ha2Ugc3VyZSBjb21waWxlciByZXNvbHZlcyBzdHJsZW4oKSBvbiBsaXRlcmFscyBhdAorICogY29tcGlsZSB0aW1lLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19udGZzX2RvdF9zdHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZG90Z2l0X25hbWUsCisJCQkJICBjb25zdCBjaGFyICpkb3RnaXRfbnRmc19zaG9ydG5hbWVfcHJlZml4KQoreworCXJldHVybiBpc19udGZzX2RvdF9nZW5lcmljKG5hbWUsIGRvdGdpdF9uYW1lLCBzdHJsZW4oZG90Z2l0X25hbWUpLAorCQkJCSAgIGRvdGdpdF9udGZzX3Nob3J0bmFtZV9wcmVmaXgpOworfQorCitpbnQgaXNfbnRmc19kb3RnaXRtb2R1bGVzKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGlzX250ZnNfZG90X3N0cihuYW1lLCAiZ2l0bW9kdWxlcyIsICJnaTdlYmEiKTsKK30KKworaW50IGlzX250ZnNfZG90Z2l0aWdub3JlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGlzX250ZnNfZG90X3N0cihuYW1lLCAiZ2l0aWdub3JlIiwgImdpMjUwYSIpOworfQorCitpbnQgaXNfbnRmc19kb3RnaXRhdHRyaWJ1dGVzKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGlzX250ZnNfZG90X3N0cihuYW1lLCAiZ2l0YXR0cmlidXRlcyIsICJnaTdkMjkiKTsKK30KKworaW50IGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbihjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHN0ciAmJiBzdHJbMF0gPT0gJy0nOworfQorCitjaGFyICp4ZGdfY29uZmlnX2hvbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY29uc3QgY2hhciAqaG9tZSwgKmNvbmZpZ19ob21lOworCisJYXNzZXJ0KGZpbGVuYW1lKTsKKwljb25maWdfaG9tZSA9IGdldGVudigiWERHX0NPTkZJR19IT01FIik7CisJaWYgKGNvbmZpZ19ob21lICYmICpjb25maWdfaG9tZSkKKwkJcmV0dXJuIG1rcGF0aGR1cCgiJXMvZ2l0LyVzIiwgY29uZmlnX2hvbWUsIGZpbGVuYW1lKTsKKworCWhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwlpZiAoaG9tZSkKKwkJcmV0dXJuIG1rcGF0aGR1cCgiJXMvLmNvbmZpZy9naXQvJXMiLCBob21lLCBmaWxlbmFtZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKnhkZ19jYWNoZV9ob21lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNvbnN0IGNoYXIgKmhvbWUsICpjYWNoZV9ob21lOworCisJYXNzZXJ0KGZpbGVuYW1lKTsKKwljYWNoZV9ob21lID0gZ2V0ZW52KCJYREdfQ0FDSEVfSE9NRSIpOworCWlmIChjYWNoZV9ob21lICYmICpjYWNoZV9ob21lKQorCQlyZXR1cm4gbWtwYXRoZHVwKCIlcy9naXQvJXMiLCBjYWNoZV9ob21lLCBmaWxlbmFtZSk7CisKKwlob21lID0gZ2V0ZW52KCJIT01FIik7CisJaWYgKGhvbWUpCisJCXJldHVybiBta3BhdGhkdXAoIiVzLy5jYWNoZS9naXQvJXMiLCBob21lLCBmaWxlbmFtZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK1JFUE9fR0lUX1BBVEhfRlVOQyhjaGVycnlfcGlja19oZWFkLCAiQ0hFUlJZX1BJQ0tfSEVBRCIpCitSRVBPX0dJVF9QQVRIX0ZVTkMocmV2ZXJ0X2hlYWQsICJSRVZFUlRfSEVBRCIpCitSRVBPX0dJVF9QQVRIX0ZVTkMoc3F1YXNoX21zZywgIlNRVUFTSF9NU0ciKQorUkVQT19HSVRfUEFUSF9GVU5DKG1lcmdlX21zZywgIk1FUkdFX01TRyIpCitSRVBPX0dJVF9QQVRIX0ZVTkMobWVyZ2VfcnIsICJNRVJHRV9SUiIpCitSRVBPX0dJVF9QQVRIX0ZVTkMobWVyZ2VfbW9kZSwgIk1FUkdFX01PREUiKQorUkVQT19HSVRfUEFUSF9GVU5DKG1lcmdlX2hlYWQsICJNRVJHRV9IRUFEIikKK1JFUE9fR0lUX1BBVEhfRlVOQyhmZXRjaF9oZWFkLCAiRkVUQ0hfSEVBRCIpCitSRVBPX0dJVF9QQVRIX0ZVTkMoc2hhbGxvdywgInNoYWxsb3ciKQpkaWZmIC0tZ2l0IGEvcGF0aC5oIGIvcGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZDZkY2EKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRoLmgKQEAgLTAsMCArMSwxOTkgQEAKKyNpZm5kZWYgUEFUSF9ICisjZGVmaW5lIFBBVEhfSAorCitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCBzdHJidWY7CisKKy8qCisgKiBUaGUgcmVzdWx0IHRvIGFsbCBmdW5jdGlvbnMgd2hpY2ggcmV0dXJuIHN0YXRpY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBtYXkgYmUKKyAqIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIgY2FsbCB0byBfYW55XyBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zLiBDb25zaWRlciB1c2luZworICogdGhlIHNhZmVyIHZhcmlhbnRzIHdoaWNoIG9wZXJhdGUgb24gc3RyYnVmcyBvciByZXR1cm4gYWxsb2NhdGVkIG1lbW9yeS4KKyAqLworCisvKgorICogUmV0dXJuIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgcGF0aC4KKyAqLworY29uc3QgY2hhciAqbWtwYXRoKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCisvKgorICogUmV0dXJuIGEgcGF0aC4KKyAqLworY2hhciAqbWtwYXRoZHVwKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCisvKgorICogQ29uc3RydWN0IGEgcGF0aCBhbmQgcGxhY2UgdGhlIHJlc3VsdCBpbiB0aGUgcHJvdmlkZWQgYnVmZmVyIGBidWZgLgorICovCitjaGFyICpta3NucGF0aChjaGFyICpidWYsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKKworLyoKKyAqIFRoZSBgZ2l0X2NvbW1vbl9wYXRoYCBmYW1pbHkgb2YgZnVuY3Rpb25zIHdpbGwgY29uc3RydWN0IGEgcGF0aCBpbnRvIGEKKyAqIHJlcG9zaXRvcnkncyBjb21tb24gZ2l0IGRpcmVjdG9yeSwgd2hpY2ggaXMgc2hhcmVkIGJ5IGFsbCB3b3JrdHJlZXMuCisgKi8KKworLyoKKyAqIENvbnN0cnVjdHMgYSBwYXRoIGludG8gdGhlIGNvbW1vbiBnaXQgZGlyZWN0b3J5IG9mIHJlcG9zaXRvcnkgYHJlcG9gIGFuZAorICogYXBwZW5kIGl0IGluIHRoZSBwcm92aWRlZCBidWZmZXIgYHNiYC4KKyAqLwordm9pZCBzdHJidWZfZ2l0X2NvbW1vbl9wYXRoKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworCisvKgorICogUmV0dXJuIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgcGF0aCBpbnRvIHRoZSBtYWluIHJlcG9zaXRvcnkncworICogKHRoZV9yZXBvc2l0b3J5KSBjb21tb24gZ2l0IGRpcmVjdG9yeS4KKyAqLworY29uc3QgY2hhciAqZ2l0X2NvbW1vbl9wYXRoKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCisKKy8qCisgKiBUaGUgYGdpdF9wYXRoYCBmYW1pbHkgb2YgZnVuY3Rpb25zIHdpbGwgY29uc3RydWN0IGEgcGF0aCBpbnRvIGEgcmVwb3NpdG9yeSdzCisgKiBnaXQgZGlyZWN0b3J5LgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHBlcmZvcm0gYWRqdXN0bWVudHMgdG8gdGhlIHJlc3VsdGFudCBwYXRoIHRvIGFjY291bnQKKyAqIGZvciBzcGVjaWFsIHBhdGhzIHdoaWNoIGFyZSBlaXRoZXIgY29uc2lkZXJlZCBjb21tb24gYW1vbmcgd29ya3RyZWVzIChlLmcuCisgKiBwYXRocyBpbnRvIHRoZSBvYmplY3QgZGlyZWN0b3J5KSBvciBoYXZlIGJlZW4gZXhwbGljaXRseSBzZXQgdmlhIGFuCisgKiBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciBjb25maWcgKGUuZy4gcGF0aCB0byB0aGUgaW5kZXggZmlsZSkuCisgKgorICogRm9yIGFuIGV4aGF1c3RpdmUgbGlzdCBvZiB0aGUgYWRqdXN0bWVudHMgbWFkZSBsb29rIGF0IGBjb21tb25fbGlzdGAgYW5kCisgKiBgYWRqdXN0X2dpdF9wYXRoYCBpbiBwYXRoLmMuCisgKi8KKworLyoKKyAqIFJldHVybiBhIHBhdGggaW50byB0aGUgZ2l0IGRpcmVjdG9yeSBvZiByZXBvc2l0b3J5IGByZXBvYC4KKyAqLworY2hhciAqcmVwb19naXRfcGF0aChjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCisvKgorICogQ29uc3RydWN0IGEgcGF0aCBpbnRvIHRoZSBnaXQgZGlyZWN0b3J5IG9mIHJlcG9zaXRvcnkgYHJlcG9gIGFuZCBhcHBlbmQgaXQKKyAqIHRvIHRoZSBwcm92aWRlZCBidWZmZXIgYHNiYC4KKyAqLwordm9pZCBzdHJidWZfcmVwb19naXRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworCisvKgorICogUmV0dXJuIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgcGF0aCBpbnRvIHRoZSBtYWluIHJlcG9zaXRvcnkncworICogKHRoZV9yZXBvc2l0b3J5KSBnaXQgZGlyZWN0b3J5LgorICovCitjb25zdCBjaGFyICpnaXRfcGF0aChjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworLyoKKyAqIFJldHVybiBhIHBhdGggaW50byB0aGUgbWFpbiByZXBvc2l0b3J5J3MgKHRoZV9yZXBvc2l0b3J5KSBnaXQgZGlyZWN0b3J5LgorICovCitjaGFyICpnaXRfcGF0aGR1cChjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworLyoKKyAqIENvbnN0cnVjdCBhIHBhdGggaW50byB0aGUgbWFpbiByZXBvc2l0b3J5J3MgKHRoZV9yZXBvc2l0b3J5KSBnaXQgZGlyZWN0b3J5CisgKiBhbmQgcGxhY2UgaXQgaW4gdGhlIHByb3ZpZGVkIGJ1ZmZlciBgYnVmYCwgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgd2lsbAorICogYmUgb3ZlcnJpZGRlbi4KKyAqLworY2hhciAqZ2l0X3BhdGhfYnVmKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBwYXRoIGludG8gdGhlIG1haW4gcmVwb3NpdG9yeSdzICh0aGVfcmVwb3NpdG9yeSkgZ2l0IGRpcmVjdG9yeQorICogYW5kIGFwcGVuZCBpdCB0byB0aGUgcHJvdmlkZWQgYnVmZmVyIGBzYmAuCisgKi8KK3ZvaWQgc3RyYnVmX2dpdF9wYXRoKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworLyoKKyAqIFJldHVybiBhIHBhdGggaW50byB0aGUgd29ya3RyZWUgb2YgcmVwb3NpdG9yeSBgcmVwb2AuCisgKgorICogSWYgdGhlIHJlcG9zaXRvcnkgZG9lc24ndCBoYXZlIGEgd29ya3RyZWUgTlVMTCBpcyByZXR1cm5lZC4KKyAqLworY2hhciAqcmVwb193b3JrdHJlZV9wYXRoKGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCisvKgorICogQ29uc3RydWN0IGEgcGF0aCBpbnRvIHRoZSB3b3JrdHJlZSBvZiByZXBvc2l0b3J5IGByZXBvYCBhbmQgYXBwZW5kIGl0CisgKiB0byB0aGUgcHJvdmlkZWQgYnVmZmVyIGBzYmAuCisgKgorICogSWYgdGhlIHJlcG9zaXRvcnkgZG9lc24ndCBoYXZlIGEgd29ya3RyZWUgbm90aGluZyB3aWxsIGJlIGFwcGVuZGVkIHRvIGBzYmAuCisgKi8KK3ZvaWQgc3RyYnVmX3JlcG9fd29ya3RyZWVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKKworLyoKKyAqIFJldHVybiBhIHBhdGggaW50byBhIHN1Ym1vZHVsZSdzIGdpdCBkaXJlY3RvcnkgbG9jYXRlZCBhdCBgcGF0aGAuICBgcGF0aGAKKyAqIG11c3Qgb25seSByZWZlcmVuY2UgYSBzdWJtb2R1bGUgb2YgdGhlIG1haW4gcmVwb3NpdG9yeSAodGhlX3JlcG9zaXRvcnkpLgorICovCitjaGFyICpnaXRfcGF0aGR1cF9zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBwYXRoIGludG8gYSBzdWJtb2R1bGUncyBnaXQgZGlyZWN0b3J5IGxvY2F0ZWQgYXQgYHBhdGhgIGFuZAorICogYXBwZW5kIGl0IHRvIHRoZSBwcm92aWRlZCBidWZmZXIgYHNiYC4gIGBwYXRoYCBtdXN0IG9ubHkgcmVmZXJlbmNlIGEKKyAqIHN1Ym1vZHVsZSBvZiB0aGUgbWFpbiByZXBvc2l0b3J5ICh0aGVfcmVwb3NpdG9yeSkuCisgKi8KK2ludCBzdHJidWZfZ2l0X3BhdGhfc3VibW9kdWxlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CisKK3ZvaWQgcmVwb3J0X2xpbmtlZF9jaGVja291dF9nYXJiYWdlKHZvaWQpOworCisvKgorICogWW91IGNhbiBkZWZpbmUgYSBzdGF0aWMgbWVtb2l6ZWQgZ2l0IHBhdGggbGlrZToKKyAqCisgKiAgICBzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9mb28sICJGT08iKQorICoKKyAqIG9yIHVzZSBvbmUgb2YgdGhlIGdsb2JhbCBvbmVzIGJlbG93LgorICovCisjZGVmaW5lIEdJVF9QQVRIX0ZVTkMoZnVuYywgZmlsZW5hbWUpIFwKKwljb25zdCBjaGFyICpmdW5jKHZvaWQpIFwKKwl7IFwKKwkJc3RhdGljIGNoYXIgKnJldDsgXAorCQlpZiAoIXJldCkgXAorCQkJcmV0ID0gZ2l0X3BhdGhkdXAoZmlsZW5hbWUpOyBcCisJCXJldHVybiByZXQ7IFwKKwl9CisKKyNkZWZpbmUgUkVQT19HSVRfUEFUSF9GVU5DKHZhciwgZmlsZW5hbWUpIFwKKwljb25zdCBjaGFyICpnaXRfcGF0aF8jI3ZhcihzdHJ1Y3QgcmVwb3NpdG9yeSAqcikgXAorCXsgXAorCQlpZiAoIXItPmNhY2hlZF9wYXRocy52YXIpIFwKKwkJCXItPmNhY2hlZF9wYXRocy52YXIgPSByZXBvX2dpdF9wYXRoKHIsIGZpbGVuYW1lKTsgXAorCQlyZXR1cm4gci0+Y2FjaGVkX3BhdGhzLnZhcjsgXAorCX0KKworc3RydWN0IHBhdGhfY2FjaGUgeworCWNvbnN0IGNoYXIgKmNoZXJyeV9waWNrX2hlYWQ7CisJY29uc3QgY2hhciAqcmV2ZXJ0X2hlYWQ7CisJY29uc3QgY2hhciAqc3F1YXNoX21zZzsKKwljb25zdCBjaGFyICptZXJnZV9tc2c7CisJY29uc3QgY2hhciAqbWVyZ2VfcnI7CisJY29uc3QgY2hhciAqbWVyZ2VfbW9kZTsKKwljb25zdCBjaGFyICptZXJnZV9oZWFkOworCWNvbnN0IGNoYXIgKmZldGNoX2hlYWQ7CisJY29uc3QgY2hhciAqc2hhbGxvdzsKK307CisKKyNkZWZpbmUgUEFUSF9DQUNIRV9JTklUIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9CisKK2NvbnN0IGNoYXIgKmdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfc3F1YXNoX21zZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Citjb25zdCBjaGFyICpnaXRfcGF0aF9tZXJnZV9tc2coc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfbWVyZ2VfcnIoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfbWVyZ2VfbW9kZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7Citjb25zdCBjaGFyICpnaXRfcGF0aF9tZXJnZV9oZWFkKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKK2NvbnN0IGNoYXIgKmdpdF9wYXRoX2ZldGNoX2hlYWQoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfc2hhbGxvdyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKworaW50IGVuZHNfd2l0aF9wYXRoX2NvbXBvbmVudHMoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqY29tcG9uZW50cyk7CisKKyNlbmRpZiAvKiBQQVRIX0ggKi8KZGlmZiAtLWdpdCBhL3BhdGhzcGVjLmMgYi9wYXRoc3BlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNDNlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRoc3BlYy5jCkBAIC0wLDAgKzEsNzQxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKworLyoKKyAqIEZpbmRzIHdoaWNoIG9mIHRoZSBnaXZlbiBwYXRoc3BlY3MgbWF0Y2ggaXRlbXMgaW4gdGhlIGluZGV4LgorICoKKyAqIEZvciBlYWNoIHBhdGhzcGVjLCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBzZWVuW10gYXJyYXkKKyAqICh3aGljaCBzaG91bGQgYmUgc3BlY3MgaXRlbXMgbG9uZywgaS5lLiB0aGUgc2FtZSBzaXplIGFzIHBhdGhzcGVjKQorICogdG8gdGhlIG5hdHVyZSBvZiB0aGUgImNsb3Nlc3QiIChpLmUuIG1vc3Qgc3BlY2lmaWMpIG1hdGNoIGZvdW5kIGZvcgorICogdGhhdCBwYXRoc3BlYyBpbiB0aGUgaW5kZXgsIGlmIGl0IHdhcyBhIGNsb3NlciB0eXBlIG9mIG1hdGNoIHRoYW4KKyAqIHRoZSBleGlzdGluZyBlbnRyeS4gIEFzIGFuIG9wdGltaXphdGlvbiwgbWF0Y2hpbmcgaXMgc2tpcHBlZAorICogYWx0b2dldGhlciBpZiBzZWVuW10gYWxyZWFkeSBvbmx5IGNvbnRhaW5zIG5vbi16ZXJvIGVudHJpZXMuCisgKgorICogSWYgc2VlbltdIGhhcyBub3QgYWxyZWFkeSBiZWVuIHdyaXR0ZW4gdG8sIGl0IG1heSBtYWtlIHNlbnNlCisgKiB0byB1c2UgZmluZF9wYXRoc3BlY3NfbWF0Y2hpbmdfYWdhaW5zdF9pbmRleCgpIGluc3RlYWQuCisgKi8KK3ZvaWQgYWRkX3BhdGhzcGVjX21hdGNoZXNfYWdhaW5zdF9pbmRleChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJCQljb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJY2hhciAqc2VlbikKK3sKKwlpbnQgbnVtX3VubWF0Y2hlZCA9IDAsIGk7CisKKwkvKgorCSAqIFNpbmNlIHdlIGFyZSB3YWxraW5nIHRoZSBpbmRleCBhcyBpZiB3ZSB3ZXJlIHdhbGtpbmcgdGhlIGRpcmVjdG9yeSwKKwkgKiB3ZSBoYXZlIHRvIG1hcmsgdGhlIG1hdGNoZWQgcGF0aHNwZWMgYXMgc2Vlbjsgb3RoZXJ3aXNlIHdlIHdpbGwKKwkgKiBtaXN0YWtlbmx5IHRoaW5rIHRoYXQgdGhlIHVzZXIgZ2F2ZSBhIHBhdGhzcGVjIHRoYXQgZGlkIG5vdCBtYXRjaAorCSAqIGFueXRoaW5nLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy0+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/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorCisgICBPciBpbiBDLCBmcm9tIGJ1aWx0aW4vcmV2ZXJ0LmM6CisKKyAgICAgICAvKiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siICovCisgICAgICAgZGllKF8oIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSwgYWN0aW9uX25hbWUob3B0cykpOworCitXZSBwcm92aWRlIHdyYXBwZXJzIGZvciBDLCBTaGVsbCBhbmQgUGVybCBwcm9ncmFtcy4gSGVyZSdzIGhvdyB0aGV5J3JlCit1c2VkOgorCitDOgorCisgLSBJbmNsdWRlIGJ1aWx0aW4uaCBhdCB0aGUgdG9wLCBpdCdsbCBwdWxsIGluIGdldHRleHQuaCwgd2hpY2gKKyAgIGRlZmluZXMgdGhlIGdldHRleHQgaW50ZXJmYWNlLiBDb25zdWx0IHdpdGggdGhlIGxpc3QgaWYgeW91IG5lZWQgdG8KKyAgIHVzZSBnZXR0ZXh0LmggZGlyZWN0bHkuCisKKyAtIFRoZSBDIGludGVyZmFjZSBpcyBhIHN1YnNldCBvZiB0aGUgbm9ybWFsIEdOVSBnZXR0ZXh0CisgICBpbnRlcmZhY2UuIFdlIGN1cnJlbnRseSBleHBvcnQgdGhlc2UgZnVuY3Rpb25zOgorCisgICAtIF8oKQorCisgICAgTWFyayBhbmQgdHJhbnNsYXRlIGEgc3RyaW5nLiBFLmcuOgorCisgICAgICAgIHByaW50ZihfKCJIRUFEIGlzIG5vdyBhdCAlcyIpLCBoZXgpOworCisgICAtIFFfKCkKKworICAgIE1hcmsgYW5kIHRyYW5zbGF0ZSBhIHBsdXJhbCBzdHJpbmcuIEUuZy46CisKKyAgICAgICAgcHJpbnRmKFFfKCIlZCBjb21taXQiLCAiJWQgY29tbWl0cyIsIG51bWJlcl9vZl9jb21taXRzKSk7CisKKyAgICBUaGlzIGlzIGp1c3QgYSB3cmFwcGVyIGZvciB0aGUgbmdldHRleHQoKSBmdW5jdGlvbi4KKworICAgLSBOXygpCisKKyAgICBBIG5vLW9wIHBhc3MtdGhyb3VnaCBtYWNybyBmb3IgbWFya2luZyBzdHJpbmdzIGluc2lkZSBzdGF0aWMKKyAgICBpbml0aWFsaXphdGlvbnMsIGUuZy46CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKnJlc2V0X3R5cGVfbmFtZXNbXSA9IHsKKyAgICAgICAgICAgIE5fKCJtaXhlZCIpLCBOXygic29mdCIpLCBOXygiaGFyZCIpLCBOXygibWVyZ2UiKSwgTl8oImtlZXAiKSwgTlVMTAorICAgICAgICB9OworCisgICAgQW5kIHRoZW4sIGxhdGVyOgorCisgICAgICAgIGRpZShfKCIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIpLAorICAgICAgICAgICAgICAgXyhyZXNldF90eXBlX25hbWVzW3Jlc2V0X3R5cGVdKSk7CisKKyAgICBIZXJlIF8oKSBjb3VsZG4ndCBoYXZlIHN0YXRpY2FsbHkgZGV0ZXJtaW5lZCB3aGF0IHRoZSB0cmFuc2xhdGlvbgorICAgIHN0cmluZyB3aWxsIGJlLCBidXQgc2luY2UgaXQgd2FzIGFscmVhZHkgbWFya2VkIGZvciB0cmFuc2xhdGlvbgorICAgIHdpdGggTl8oKSB0aGUgbG9vay11cCBpbiB0aGUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgc3VjY2VlZC4KKworU2hlbGw6CisKKyAtIFRoZSBHaXQgZ2V0dGV4dCBzaGVsbCBpbnRlcmZhY2UgaXMganVzdCBhIHdyYXBwZXIgZm9yCisgICBnZXR0ZXh0LnNoLiBJbXBvcnQgaXQgcmlnaHQgYWZ0ZXIgZ2l0LXNoLXNldHVwIGxpa2UgdGhpczoKKworICAgICAgIC4gZ2l0LXNoLXNldHVwCisgICAgICAgLiBnaXQtc2gtaTE4bgorCisgICBBbmQgdGhlbiB1c2UgdGhlIGdldHRleHQgb3IgZXZhbF9nZXR0ZXh0IGZ1bmN0aW9uczoKKworICAgICAgICMgRm9yIGNvbnN0YW50IGludGVyZmFjZSBtZXNzYWdlczoKKyAgICAgICBnZXR0ZXh0ICJBIG1lc3NhZ2UgZm9yIHRoZSB1c2VyIjsgZWNobworCisgICAgICAgIyBUbyBpbnRlcnBvbGF0ZSB2YXJpYWJsZXM6CisgICAgICAgZGV0YWlscz0ib2ggbm9lcyIKKyAgICAgICBldmFsX2dldHRleHQgIkFuIGVycm9yIG9jY3VycmVkOiBcJGRldGFpbHMiOyBlY2hvCisKKyAgIEluIGFkZGl0aW9uIHdlIGhhdmUgd3JhcHBlcnMgZm9yIG1lc3NhZ2VzIHRoYXQgZW5kIHdpdGggYSB0cmFpbGluZworICAgbmV3bGluZS4gSS5lLiB5b3UgY291bGQgd3JpdGUgdGhlIGFib3ZlIGFzOgorCisgICAgICAgIyBGb3IgY29uc3RhbnQgaW50ZXJmYWNlIG1lc3NhZ2VzOgorICAgICAgIGdldHRleHRsbiAiQSBtZXNzYWdlIGZvciB0aGUgdXNlciIKKworICAgICAgICMgVG8gaW50ZXJwb2xhdGUgdmFyaWFibGVzOgorICAgICAgIGRldGFpbHM9Im9oIG5vZXMiCisgICAgICAgZXZhbF9nZXR0ZXh0bG4gIkFuIGVycm9yIG9jY3VycmVkOiBcJGRldGFpbHMiCisKKyAgIE1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgR05VIGluZm8KKyAgIHBhZ2U6IGBpbmZvICcoZ2V0dGV4dClzaCdgLiBMb29raW5nIGF0IGdpdC1hbS5zaCAodGhlIGZpcnN0IHNoZWxsCisgICBjb21tYW5kIHRvIGJlIHRyYW5zbGF0ZWQpIGZvciBleGFtcGxlcyBpcyBhbHNvIHVzZWZ1bDoKKworICAgICAgIGdpdCBsb2cgLS1yZXZlcnNlIC1wIC0tZ3JlcD1pMThuIGdpdC1hbS5zaAorCitQZXJsOgorCisgLSBUaGUgR2l0OjpJMThOIG1vZHVsZSBwcm92aWRlcyBhIGxpbWl0ZWQgc3Vic2V0IG9mIHRoZQorICAgTG9jYWxlOjpNZXNzYWdlcyBmdW5jdGlvbmFsaXR5LCBlLmcuOgorCisgICAgICAgdXNlIEdpdDo6STE4TjsKKyAgICAgICBwcmludCBfXygiV2VsY29tZSB0byBHaXQhXG4iKTsKKyAgICAgICBwcmludGYgX18oIlRoZSBmb2xsb3dpbmcgZXJyb3Igb2NjdXJyZWQ6ICVzXG4iKSwgJGVycm9yOworCisgICBSdW4gYHBlcmxkb2MgcGVybC9HaXQvSTE4Ti5wbWAgZm9yIG1vcmUgaW5mby4KKworCitUZXN0aW5nIG1hcmtlZCBzdHJpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZW4gaWYgeW91J3ZlIGNvcnJlY3RseSBtYXJrZWQgcG9yY2VsYWluIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uCitzb21ldGhpbmcgaW4gdGhlIHRlc3Qgc3VpdGUgbWlnaHQgc3RpbGwgZGVwZW5kIG9uIHRoZSBVUyBFbmdsaXNoCit2ZXJzaW9uIG9mIHRoZSBzdHJpbmdzLCBlLmcuIHRvIGdyZXAgc29tZSBlcnJvciBtZXNzYWdlIG9yIG90aGVyCitvdXRwdXQuCisKK1RvIHNtb2tlIG91dCBpc3N1ZXMgbGlrZSB0aGVzZSwgR2l0IHRlc3RlZCB3aXRoIGEgdHJhbnNsYXRpb24gbW9kZSB0aGF0CitlbWl0cyBnaWJiZXJpc2ggb24gZXZlcnkgY2FsbCB0byBnZXR0ZXh0LiBUbyB1c2UgaXQgcnVuIHRoZSB0ZXN0IHN1aXRlCit3aXRoIGl0LCBlLmcuOgorCisgICAgY2QgdCAmJiBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj10cnVlIHByb3ZlIC1qIDkgLi90WzAtOV0qLnNoCisKK0lmIHRlc3RzIGJyZWFrIHdpdGggaXQgeW91IHNob3VsZCBpbnNwZWN0IHRoZW0gbWFudWFsbHkgYW5kIHNlZSBpZgord2hhdCB5b3UncmUgdHJhbnNsYXRpbmcgaXMgc2FuZSwgaS5lLiB0aGF0IHlvdSdyZSBub3QgdHJhbnNsYXRpbmcKK3BsdW1iaW5nIG91dHB1dC4KKworSWYgbm90IHlvdSBzaG91bGQgcmVwbGFjZSBjYWxscyB0byBncmVwIHdpdGggdGVzdF9pMThuZ3JlcCwgb3IKK3Rlc3RfY21wIGNhbGxzIHdpdGggdGVzdF9pMThuY21wLiBJZiB0aGF0J3Mgbm90IGVub3VnaCB5b3UgY2FuIHNraXAKK3RoZSB3aG9sZSB0ZXN0IGJ5IG1ha2luZyBpdCBkZXBlbmQgb24gdGhlIENfTE9DQUxFX09VVFBVVAorcHJlcmVxdWlzaXRlLiBTZWUgZXhpc3RpbmcgdGVzdCBmaWxlcyB3aXRoIHRoaXMgcHJlcmVxdWlzaXRlIGZvcgorZXhhbXBsZXMuCmRpZmYgLS1naXQgYS9wby9URUFNUyBiL3BvL1RFQU1TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMDUxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9URUFNUwpAQCAtMCwwICsxLDc0IEBACitDb3JlIEdpdCB0cmFuc2xhdGlvbiBsYW5ndWFnZSB0ZWFtcworKHBsZWFzZSBrZWVwIHRoZSBsaXN0IHNvcnRlZCBhbHBoYWJldGljYWxseSBvbiBsYW5ndWFnZSBmaWVsZCkKKworTGFuZ3VhZ2U6CWJnIChCdWxnYXJpYW4pCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vZ2l0LWwxMG4vZ2l0LXBvCitMZWFkZXI6CQlBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+CisKK0xhbmd1YWdlOgljYSAoQ2F0YWxhbikKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9Tb2Z0Y2F0YWxhL2dpdC1wbworTGVhZGVyOgkJSm9yZGkgTWFzIDxqbWFzQHNvZnRjYXRhbGEub3JnPgorTWVtYmVyczoJQWxleCBIZW5yaWUgPGFsZXhoZW5yaWUyNEBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglkZSAoR2VybWFuKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL3J1ZXN0ZXIvZ2l0LXBvLWRlCitMZWFkZXI6CQlNYXR0aGlhcyBSw7xzdGVyIDxtYXR0aGlhcy5ydWVzdGVyQGdtYWlsLmNvbT4KK01lbWJlcnM6CVJhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdtYWlsLmNvbT4KKwkJUGhpbGxpcCBTemVsYXQgPHBoaWxsaXAuc3plbGF0QGdtYWlsLmNvbT4KKworTGFuZ3VhZ2U6CWVsIChHcmVlaykKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS92eXJ1c3MvZ2l0LXBvLWVsCitMZWFkZXI6CQlKaW1teSBBbmdlbGFrb3MgPHZ5cnVzc0BoZWxsdWcuZ3I+CisKK0xhbmd1YWdlOgllcyAoU3BhbmlzaCkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9DaHJpc0FEUi9naXQtcG8KK0xlYWRlcjoJCUNocmlzdG9waGVyIETDrWF6IDxjaHJpc3RvcGhlci5kaWF6LnJpdkBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglmciAoRnJlbmNoKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL2puYXZpbGEvZ2l0CitMZWFkZXI6CQlKZWFuLU5vw6tsIEF2aWxhIDxqbi5hdmlsYUBmcmVlLmZyPgorTWVtYmVyczoJU8OpYmFzdGllbiBIZWxsZXUgPGZsYXNoY29kZUBmbGFzaHR1eC5vcmc+CisKK0xhbmd1YWdlOglpcyAoSWNlbGFuZGljKQorTGVhZGVyOgkJw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglpdCAoSXRhbGlhbikKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9BbGVzc2FuZHJvTWVudGkvZ2l0LXBvCitMZWFkZXI6CQlBbGVzc2FuZHJvIE1lbnRpIDxhbGVzc2FuZHJvLm1lbnRpQGFsZXNzYW5kcm9tZW50aS5pdD4KKworTGFuZ3VhZ2U6CWtvIChLb3JlYW4pCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vZ2l0LWwxMG4ta28vZ2l0LWwxMG4ta28vCitMZWFkZXI6CQlHd2FuLWd5ZW9uZyBNdW4gPGVsb25nYnVnQGdtYWlsLmNvbT4KK01lbWJlcnM6CUNoYW5nd29vIFJ5dSA8Y3dyeXVAZGViaWFuLm9yZz4KKwkJU2loeWVvbiBKYW5nIDx1bmVlZHNpaHllb25AZ21haWwuY29tPgorCitMYW5ndWFnZToJcHRfUFQgKFBvcnR1Z3Vlc2UgLSBQb3J0dWdhbCkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS92YXNjb29sL2dpdC1wby1wdC8KK0xlYWRlcjoJCVZhc2NvIEFsbWVpZGEgPHZhc2NvbWFsbWVpZGFAc2Fwby5wdD4KK01lbWJlcnM6CU1hcmNvIFNvdXNhIDxtYXJjb21zb3VzYSBBVCBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglydSAoUnVzc2lhbikKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9ESm0wMG4vZ2l0LXBvLXJ1LworTGVhZGVyOgkJRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuIEFUIG1haWwucnU+CitNZW1iZXJzOglpbnNvbG9yIDxpbnNvbG9yIEFUIGdtYWlsLmNvbT4KKworTGFuZ3VhZ2U6CXN2IChTd2VkaXNoKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL25hZm1vL2dpdC1sMTBuLXN2LworTGVhZGVyOgkJUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CisKK0xhbmd1YWdlOgl2aSAoVmlldG5hbWVzZSkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS92bndpbGRtYW4vZ2l0LworTGVhZGVyOgkJVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuIEFUIGdtYWlsLmNvbT4KK01lbWJlcnM6CU5ndXnhu4VuIFRow6FpIE5n4buNYyBEdXkgPHBjbG91ZHMgQVQgZ21haWwuY29tPgorCitMYW5ndWFnZToJemhfQ04gKFNpbXBsaWZpZWQgQ2hpbmVzZSkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9qaWFuZ3hpbi9naXQvCitMZWFkZXI6CQlKaWFuZyBYaW4gPHdvcmxkaGVsbG8ubmV0IEFUIGdtYWlsLmNvbT4KK01lbWJlcnM6CVJheSBDaGVuIDxvbGRzaGFycCBBVCBnbWFpbC5jb20+CisJCeS+neS6kSA8bGlseWRqd2cgQVQgZ21haWwuY29tPgorCQlGYW5neWkgWmhvdSA8bWUgQVQgZmFuZ3lpLmlvPgorCitMYW5ndWFnZToJemhfVFcgKFRyYWRpdGlvbmFsIENoaW5lc2UpCitSZXNwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL2wxMG4tdHcvZ2l0LXBvCitMZWFkZXI6IAlZaS1KeXVuIFBhbiA8cGFuOTM0MTIgQVQgZ21haWwuY29tPgorTWVtYmVyczoJRnJhbmtsaW4gV2VuZyA8ZnJhbmtsaW4gQVQgZ29vZGhvcnNlLmlkdi50dz4KZGlmZiAtLWdpdCBhL3BvL2JnLnBvIGIvcG8vYmcucG8KaW5kZXggNWFmNzhmMS4uMjliYTFjOCAxMDA2NDQKLS0tIGEvcG8vYmcucG8KKysrIGIvcG8vYmcucG8KQEAgLTEsMTUgKzEsMTY4IEBACi0jIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHBvLWZpbGUuCi0jIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNiBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+LgorIyBCdWxnYXJpYW4gdHJhbnNsYXRpb24gb2YgZ2l0IHBvLWZpbGUuCisjIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSwgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwgMjAyMCBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+LgogIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0IHBhY2thZ2UuCi0jIEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4sIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYuCisjIEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4sIDIwMTQsIDIwMTUsIDIwMTYsIDIwMTcsIDIwMTgsIDIwMTksIDIwMjAuCiAjCi0jCisjID09PT09PT09PT09PT09PT09PT09PT09PQorIyBESUNUSU9OQVJZIFRPIE1FUkdFIElOIEdJVCBHVUkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHJhbmdlINC00LjQsNC/0LDQt9C+0L0KKyMgYmFzZSDQsdCw0LfQsAorIyB0aXAg0LLRgNGK0YUKKyMgdW5yZWFjaGFibGUgb2JqZWN0INC90LXQtNC+0YHRgtC40LbQuNC8INC+0LHQtdC60YIKKyMgZGFuZ2xpbmcgb2JqZWN0cyDQvtCx0LXQutGCINC40LfQstGK0L0g0LrQu9C+0L0KKyMgZmFzdC1mb3J3YXJkINC/0YDQtdCy0YrRgNGC0LDQvdC1CisjIHRyZWUtbGV2ZWwgbWVyZ2Ug0YLRgNC40LLQuNCw0LvQvdC+INGB0LvQuNCy0LDQvdC1ICjRgNCw0LfQu9C40YfQvdC4INGE0LDQudC70L7QstC1INGB0LAg0L/RgNC+0LzQtdC90Y/QvdC4LCDRgdC70LjQstCwINGB0LUg0LrQsNGC0L4g0LTRitGA0LLQvikKKyMgYXV0b21hdGljIG1lcmdlINCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0YHQu9C40LLQsNC90LUgKNC10LTQvdCw0LrQstC4INGE0LDQudC70L7QstC1INGB0LAg0L/RgNC+0LzQtdC90Y/QvdC4LCDQvdC+INCyINC90LXQv9GA0LjQv9C+0LrRgNC40LLQsNGJ0Lgg0YHQtSDRh9Cw0YHRgtC4KQorIyByZWFsIG1lcmdlINGB0YrRidC40L3RgdC60L4g0YHQu9C40LLQsNC90LUgKNCwINC90LUg0L/RgNC10LLRitGA0YLQsNC90LUpCisjIHRocmVlLXdheSBtZXJnZSDRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUKKyMgb2N0b3B1cyBtZXJnZSDQvNC90L7QttC10YHRgtCy0LXQvdC+INGB0LvQuNCy0LDQvdC1CisjIHN0YWxlIHJlbW90ZSDRgdGC0LDRgNC+INGF0YDQsNC90LjQu9C40YnQtQorIyByZWJhc2Ug0L/RgNC10LHQsNC30LjRgNCw0LwKKyMgbWVyZ2UgYmFzZSDQsdCw0LfQsCDQt9CwINGB0LvQuNCy0LDQvdC1CisjIGZvcmNlIChwdXNoKSDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0LjQt9GC0LvQsNGB0LrQstCw0LwKKyMgc3Rhc2gvaW5kZXgg0LjQvdC00LXQutGBCisjIHNxdWFzaCBjb21taXQg0LLQutCw0YDQstCw0Lwg0L/QvtC00LDQstCw0L3QtSDQsiDQv9GA0LXQtNGF0L7QtNC90L7RgtC+CisjIGZpeHVwIGNvbW1pdCDQstC60LDRgNCy0LDQvCDQv9C+0LTQsNCy0LDQvdC1INCyINC/0YDQtdC00YXQvtC00L3QvtGC0L4g0LHQtdC3INGB0LvQtdC00LAKKyMgcm9vdCBjb21taXQg0L3QsNGH0LDQu9C90L4g0L/QvtC00LDQstCw0L3QtQorIyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoINGB0LvQtdC00Y/RiSDQutC70L7QvQorIyBnaXQgYnVuZGxlINC/0YDQsNGC0LrQsCDQvdCwIGdpdAorIyBiaXNlY3Qg0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUKKyMgYW0g0L/RgNC40LvQsNCz0LDQvCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0LrRgNGK0L/QutC4CisjIHdvcmtpbmcgZGlyZWN0b3J5L3RyZWUg4oCUINCy0LjQvdCw0LPQuCDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+LCBnaXQg0YHQu9C10LTQuCDRhtGP0LvQvtGC0L4g0LTRitGA0LLQviwg0LAg0L3QtSDQtNC40YDQtdC60YLQvtGA0LjQuCwg0YDQsNCx0L7RgtC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LfQsCBjd2QKKyMgc3dpdGNoIHRvIGJyYW5jaCDQv9GA0LXQvNC40L3QsNCy0LDQvCDQutGK0Lwg0LrQu9C+0L0KKyMgc3BhcnNlIGVudHJ5L2Jsb2Ig0YfQsNGB0YLQuNGH0L3QviDQuNC30YLQtdCz0LvQtdC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8v0L/RitGCL9C+0LHQtdC60YItQkxPQgorIyByZXZpc2lvbiByYW5nZSDQtNC40LDQv9Cw0LfQvtC9INC90LAg0LLQtdGA0YHQuNC40YLQtQorIyBjb3ZlciBsZXR0ZXIg0L/RgNC40LTRgNGD0LbQsNCy0LDRidC+INC/0LjRgdC80L4KKyMgcmVmZXJlbmNlIHJlcG9zaXRvcnkg0LXRgtCw0LvQvtC90L3QviDRhdGA0LDQvdC40LvQuNGJ0LUKKyMgZ3JhZnQg0L/RgNC40YHQsNC00LrQsAorIyBncmFmdGVkIHJlcG9zaXRvcnkg0YXRgNCw0L3QuNC70LjRidC1INGBINC/0YDQuNGB0LDQttC00LDQvdC1CisjIHJlcGxhY2UgcmVmcyDQt9Cw0LzQtdGB0YLQstCw0YnQuCDRg9C60LDQt9Cw0YLQtdC70LgKKyMgZW1iZWRkZWQgcmVwb3NpdG9yeSDQstCz0YDQsNC00LXQvdC+L9Cy0YrRgtGA0LXRiNC90L4g0YXRgNCw0L3QuNC70LjRidC1ICjQtNC+0LHQsNCy0Y/QvdC10YLQviDQvNGDINC1INCz0YDQtdGI0LrQsCkKKyMgdGhpbiBwYWNrINGB0YrQutGA0LDRgtC10L0g0L/QsNC60LXRggorIyBwYWNrIGZpbGUg0L/QsNC60LXRgtC10L0g0YTQsNC50LsKKyMgc3RhdCAoYSBmaWxlKSDQv9C+0LvRg9GH0LDQstCw0Lwg0LjQvdGE0L7RgNC80LDRhtC40Y8g0YfRgNC10Lcg4oCec3RhdOKAnCAo0LfQsCDRhNCw0LnQuykKKyMgbWl4ZWQgcmVzZXQg0YHQvNC10YHQtdC90L4g0LfQsNC90YPQu9GP0LLQsNC90LUgKNC40L3QtNC10LrRgdCwINC4INGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQsdC10Lcg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4pCisjIHNvZnQgcmVzZXQg0LzQtdC60L4g0LfQsNC90YPQu9GP0LLQsNC90LUgKNGB0LDQvNC+INGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQsdC10Lcg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4pCisjIGhhcmQgcmVzZXQg0L/RitC70L3QviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSAo0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+KQorIyBtZXJnZSByZXNldCDRgdC70Y/RgtC+INC30LDQvdGD0LvRj9Cy0LDQvdC1ICjRhtC10LvQuNGPINC40L3QtNC10LrRgSDQuCDQvtGC0YfQsNGB0YLQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDigJQg0LHQtdC3INGE0LDQudC70L7QstC10YLQtSDRgSDQv9GA0L7QvNC10L3QuCDQvNC10LbQtNGDINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC4INC40L3QtNC10LrRgdCwKQorIyBrZWVwIHJlc2V0INC30LDQv9Cw0LfQstCw0YnQviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSAo0L7RgtGH0LDRgdGC0Lgg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g4oCUINGE0LDQudC70L7QstC10YLQtSDRgSDQv9GA0L7QvNC10L3QuCDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+INC4IOKAnkhFQUTigJwpCisjIGNvbW1pdC1pc2gg0YPQutCw0LfQsNGC0LXQuyDQutGK0Lwg0L/QvtC00LDQstCw0L3QtQorIyBzZXF1ZW5jZSDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgi/Qv9C+0YDQtdC00LjRhtCwCisjIHdoaXRlc3BhY2Ugc3ltYm9sINC30L3QsNGG0Lgg0LfQsCDQuNC90YLQtdGA0LLQsNC70LgKKyMgc2hvcnRsb2cg0YHRitC60YDQsNGC0LXQvdC40Y8g0LbRg9GA0L3QsNC7CisjIGJhY2tpbmcgc3RvcmUg0LzRj9GB0YLQvtGC0L4g0LfQsCDRgdGK0YXRgNCw0L3QtdC90LjQtQorIyByZWplY3Qg0L7RgtGF0LLRitGA0LvQtdC90L4g0L/QsNGA0YfQtQorIyB0b3BpYyBicmFuY2gg0YLQtdC80LDRgtC40YfQtdC9INC60LvQvtC9CisjIGVtcHR5IGhlYWQg0LLRgNGK0YUg0LHQtdC3INC40YHRgtC+0YDQuNGPCisjIHRyZWUtaXNoINGD0LrQsNC30LDRgtC10Lsg0LrRitC8INC00YrRgNCy0L4KKyMgZGlydHkg0L3QtdGH0LjRgdGCLCDQvNGA0YrRgdC10L0gKNGE0LDQudC7LCDQuNC90LTQtdC60YEpCisjIGZhbGxiYWNrINGA0LXQt9C10YDQstC10L0g0LLQsNGA0LjQsNC90YIKKyMgcGF0aHNwZWMgbWFnaWMg0L7Qv9GG0LjRjyDQt9CwINC80LDQs9C40YfQtdGB0LrQuCDQv9GK0YLQuNGJ0LAKKyMgYml0bWFwIGluZGV4INC40L3QtNC10LrRgSDQvdCwINCx0LDQt9CwINCx0LjRgtC+0LLQuCDQvNCw0YHQutC4CisjIG1hcmsg0LzQsNGA0LrQtdGACisjIHBsdW1iaW5nINC60L7QvNCw0L3QtNC4INC+0YIg0YHQuNGB0YLQtdC80L3QviDQvdC40LLQvgorIyBwb3JjZWxhaW4g0LrQvtC80LDQvdC00Lgg0L7RgiDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQvdC40LLQvgorIyBwYWNrIFtub3VuXSDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyAtIGZpeG1lIGluIGdsb3NzYXJ5CisjIHJlcGFjayDQv9GA0LXQv9Cw0LrQtdGC0LjRgNCw0LwKKyMgbWFpbmxpbmUg0LHQsNC30L7QstC+INC/0L7QtNCw0LLQsNC90LUgLSDQv9GA0LggY2hlcnJ5LXBpY2sg0L3QsCBtZXJnZSAtINC60YrQvCDQutC+0Y8g0LLQtdGA0YHQuNGPINC00LAg0YHQtSDQuNC30YfQuNGB0LvRj9Cy0LAg0YDQsNC30LvQuNC60LDRgtCwCisjIHRva2VuINC70LXQutGB0LXQvNCwCisjIHRyYWlsZXIg0LXQv9C40LvQvtCzL9C30LDQstGK0YDRiNC10Log0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LUKKyMgY3dkINGC0LXQutGD0YnQsCDRgNCw0LHQvtGC0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjworIyB1bnRyYWNrZWQgY2FjaGUg0LrQtdGIINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtQorIyBicm9rZW4vY29ycnVwdCDQv9C+0LLRgNC10LTQtdC9CisjIHJlc3RvcmUg0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0LwKKyMgcHJlY2lvdXMgb2JqZWN0cyByZXBvINGF0YDQsNC90LjQu9C40YnQtSDRgSDQstCw0LbQvdC4INC+0LHQtdC60YLQuAorIyBsaW5rZWQgY2hlY2tvdXQg0YHQstGK0YDQt9Cw0L3QviDQuNC30YLQtdCz0LvRj9C90LUKKyMgdGVybSDRg9C/0YDQsNCy0LvRj9Cy0LDRidCwINC00YPQvNCwICjQt9CwIGdpdC1iaXNlY3QpCisjIG1lcmdldGFnINC10YLQuNC60LXRgiDQv9GA0Lgg0YHQu9C40LLQsNC90LUKKyMgcGFja2ZpbGUg0L/QsNC60LXRggorIyBwcm9taXNvcnkg0LPQsNGA0LDQvdGC0LjRgNCw0YksINCz0LDRgNCw0L3RgiBwcm9taXNvcnkgcGFja2ZpbGUg0LPQsNGA0LDQvdGC0LjRgNCw0Ykg0L/QsNC60LXRgiwgcHJvbWlzb3J5IHJlbW90ZSDRhdGA0LDQvdC40LvQuNGJ0LUt0LPQsNGA0LDQvdGCCisjIGRlbHRhIC0g0YDQsNC30LvQuNC60LAsINC00LXQu9GC0LAsINC+0LHQtdC60YIt0YDQsNC30LvQuNC60LAKKyMgPz8KKyMgcGVlbGVkIHRhZyAtINC/0YDQvtGB0LvQtdC00Y/QstCw0L3QtSDQvdCwINC10YLQuNC60LXRgiAtINC60L7Qs9Cw0YLQviDQtdGC0LjQutC10YIg0YHQvtGH0Lgg0LrRitC8INC00YDRg9CzINC10YLQuNC60LXRgiwg0LAg0L3QtSDQv9C+0LTQsNCy0LDQvdC1INC4INC/0YDQvtGB0LvQtdC00Y/QstCw0LzQtSDQv9C+0LTQvtCx0L3QviDQvdCwINGB0LjQvNCy0L7Qu9C90LAg0LLRgNGK0LfQutCwCisjIG5lc3RlZCB0YWcgLSDQvdC10L/RgNGP0Log0LXRgtC40LrQtdGCCisjIHN0cmlwIC0g0L/RgNC10LzQsNGF0LLQsNC8ICjQt9CwINC60L7QvNC/0L7QvdC10L3RgiDQv9GA0Lgg0YTQuNC70YLRgNC40YDQsNC90LUpCisjIHVucmVsYXRlZCBoaXN0b3JpZXMgLSDQvdC10LfQsNCy0LjRgdC40LzQuCDQuNGB0YLQvtGA0LjQuAorIyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24g0YLRitGA0YHQtdC90LUg0L3QsCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LjRjyDQvdCwINC+0LHQtdC60YLQuCDRgdGK0YfQtdGC0LDQvdC4INGBINC/0YDQvtC80LXQvdC4CisjIGh1bmsg0L/QsNGA0YfQtQorIyBiaW5hcnkgcGF0Y2gg0LTQstC+0LjRh9C90LAg0LrRgNGK0L/QutCwCisjIHJldmVyc2UtYXBwbHkg0L/RgNC40LvQsNCz0LDQvCDQsiDQvtCx0YDQsNGC0L3QsCDQv9C+0YHQvtC60LAKKyMgdG9kbyBmaWxlINGE0LDQudC7INGBINC60L7QvNCw0L3QtNC4CisjIHRvZG8gY29tbWFuZCDQt9Cw0L/Qu9Cw0L3Rg9Cy0LDQvdCwINC60L7QvNCw0L3QtNCwCisjIGFsdGVybmF0ZSDQsNC70YLQtdGA0L3QsNGC0LjQstC10L0g0LjQt9GC0L7Rh9C90LjQugorIyBzdXBlcnByb2plY3Qg0L7QsdGF0LLQsNGJ0LDRiSDQv9GA0L7QtdC60YIKKyMgc3BsaXQgaW5kZXgg0YDQsNC30LTQtdC70Y/QvdC1INC90LAg0LjQvdC00LXQutGB0LAKKyMgdHJ1bmNhdGUg0L7RgtGA0Y/Qt9Cy0LDQvAorIyBmb3JtYXQgc3RyaW5nINGE0L7RgNC80LDRgtC40YDQsNGJINC90LjQtworIyBob29rINC60YPQutCwCisjIGlnbm9yZWQgKGZpbGUpINC40LPQvdC+0YDQuNGA0LDQvSwg0L/QvtC90Y/QutC+0LPQsCAtINC/0YDQvtC/0YPRgdC90LDRggorIyBtYW51YWwsIG1hbiBwYWdlINGA0YrQutC+0LLQvtC00YHRgtCy0L4KKyMgZ3VpZGUg0LLRitCy0LXQtNC10L3QuNC1CisjIHBhcnRpYWwgY2xvbmUg0L3QtdC/0YrQu9C90L4g0YXRgNCw0L3QuNC70LjRidC1CisjIGNvdXNpbnMg0YHQtdGB0YLRgNC40L3RgdC60Lgg0LrQu9C+0L3QuAorIyBleHBpcmF0aW9uIGRhdGUg0LTQsNGC0LAg0L3QsCDRgdGA0L7QugorIyBpcyB3ZWxsIGZvcm1lZCDQtSDQv9C+INC/0YDQsNCy0LjQu9Cw0YLQsAorIyBuYW1lc3BhY2Ug0L/RgNC+0YHRgtGA0LDQvdGB0YLQstC+INC+0YIg0LjQvNC10L3QsAorIyByZXBvc2l0b3J5IGxheW91dCDRg9GB0YLRgNC+0LnRgdGC0LLQviDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4KKyMgY29sbGVjdGlvbi9zZXJpZXMgb2YgcGF0Y2hlcyDQv9C+0YDQtdC00LjRhtCwINC+0YIg0LrRgNGK0L/QutC4CisjIHJlY2lldmUg0L/QvtC70YPRh9Cw0LLQsNC8CisjIEJPTSDQvNCw0YDQutC10YAg0LfQsCDQv9C+0YDQtdC00L3QvtGB0YLRgtCwINC90LAg0LHQsNC50YLQvtCy0LXRgtC1CisjIGFja25vd2xlZGdtZW50IGxpbmUg0YDQtdC0INC30LAg0L/QvtGC0LLRitGA0LbQtNC10L3QuNC1CisjIHdhbnRlZC1yZWYg0LjRgdC60LDQvSDRg9C60LDQt9Cw0YLQtdC7CisjIGNodW5rINC+0YLQutGK0YEKKyMgY2xlYW4gZmlsdGVyINC00LXQutC+0LTQuNGA0LDRiSDRhNC40LvRgtGK0YAKKyMgc211ZGdlIGZpbHRlciDQutC+0LTQuNGA0LDRiSDRhNC40LvRgtGK0YAKKyMgbG9vc2Ugb2JqZWN0INC90LXQv9Cw0LrQtdGC0LjRgNCw0L0g0L7QsdC10LrRggorIyBmbHVzaCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCx0YPRhNC10YDQuNGC0LUKKyMgZmx1c2ggcGFja2V0INC40LfRh9C40YHRgtCy0LDRiSDQv9Cw0LrQtdGCCisjIGZvcmsg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0YbQtdGBCisjIGNhcGFiaWxpdGllcyDQstGK0LfQvNC+0LbQvdC+0YHRgtC4CisjIHJlbW90ZS1oZWxwZXIg0L3QsNGB0YDQtdGJ0L3QsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwCisjIGNvbW1hbmQgYWxpYXMg0L/RgdC10LLQtNC+0L3QuNC8INC90LAg0LrQvtC80LDQvdC00LAKKyMgcmVyZXJlINC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LfQsNC/0LDQt9C10L3QsCDQutC+0YDQtdC60YbQuNGPINC90LAg0YHQu9C40LLQsNC90LUg0YEg0LrQvtC90YTQu9C40LrRggorIyBwcmVpbWFnZSDQv9GA0LXQtNCy0LDRgNC40YLQtdC70LXQvSDQstCw0YDQuNCw0L3RggorIyBvZmZzZXQg0L7RgtC80LXRgdGC0LLQsNC90LUKKyMgbXVsdGktcGFjay1pbmRleCDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4CisjIHJhbmdlIGRpZmYg0LTQuNCw0L/QsNC30L7QvdC90LAg0YDQsNC30LvQuNC60LAKKyMgaW50ZXIgZGlmZiDRgNCw0LfQu9C40LrQsCDQsiDRgNCw0LfQu9C40LrQuNGC0LUKKyMgc3NsIGJhY2tlbmQg0YDQtdCw0LvQuNC30LDRhtC40Y8g0L3QsCBTU0wKKyMgZGVsdGEgaXNsYW5kINCz0YDRg9C/0LAg0YDQsNC30LvQuNC60LgKKyMgaXNsYW5kIG1hcmtzINCz0YDQsNC90LjRhtC4INC90LAg0LPRgNGD0L/QuNGC0LUKKyMgcmVmbG9nINC20YPRgNC90LDQuyDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUKKyMgaGFzaCDQutC+0L3RgtGA0L7Qu9C90LAg0YHRg9C80LAsINC40LfRh9C40YHQu9GP0LLQsNC90LUg0L3QsCDQutC+0L3RgtGA0L7Qu9C90LAg0YHRg9C80LAKKyMgZmFub3V0INC+0YLQutGK0YEgKNGA0LDQt9C/0LXRgNCy0LDQvdC1Pz8/KQorIyBpZHggLSBpbmRleCBvZiBwYWNrIGZpbGUsIDEgaW5kZXggcGVyIDEgcGFja2ZpbGUKKyMgbWlkeCAtIG11bHRpLXBhY2sgaW5kZXgsIGZvciBvYmplY3RzIGFjcm9zcyBtdWx0aXBsZSBwYWNrZmlsZXMKKyMgb3ZlcmxheSBtb2RlIC0g0L/RgNC40L/QvtC60YDQuNCy0LDRiSDRgNC10LbQuNC8ICjQv9GA0Lgg0LjQt9GC0LXQs9C70Y/QvWUpCisjIGluY3JlbWVudGFsIGZpbGUg0L3QsNGA0LDRgdGC0LLQsNGJINGE0LDQudC7CisjIHNwbGl0IChjb21taXQtZ3JhcGhyKSDRgNCw0LfQtNGA0L7QsdC10L0gKNCz0YDQsNGEINGBINC/0L7QtNCw0LLQsNC90LjRjykKKyMgY2xvYmJlciAoYSB0YWcpINC/0YDQtdC30LDQv9C40YHQstCw0LwgKNC10YLQuNC60LXRgikKKyMgYmxhbWUg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LDQstGC0L7RgNGB0YLQstC+CisjIHJlZm5hbWUg0LjQvNC1INC90LAg0YPQutCw0LfQsNGC0LXQuworIyBjb25lIHBhdHRlcm4gbWF0Y2hpbmcg0L/RitGC0LXQstC+0LTQvdC+INC90LDQv9Cw0YHQstCw0L3QtQorIyBuZWdhdGl2ZSBwYXR0ZXJuINC+0YLRgNC40YbQsNGC0LXQu9C10L0g0YjQsNCx0LvQvtC9CisjIGNvbG9yZWQgaHVuay9kaWZmINC+0YbQstC10YLQtdC90L4g0L/QsNGA0YfQtS/RgNCw0LfQu9C40LrQsAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMg4oCeJHZhcuKAnCAtINC80L7QttC1INC00LAg0L3QtSDRgdGA0LDQsdC+0YLQstCwINC30LAgc2hlbGwg0LjQvNCwIGdldHRleHQg0LggZXZhbF9nZXR0ZXh0IC0g0L/RgNC+0LLQtdGA0LrQsCAtINC90LDQvNC40YDQsNGCINGB0LUg0LvQtdGB0L3QviDQv9C+IOKAniQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZJWE1FCisjIEhFQUQgYXMgYSByZWZlcmVuY2UgdnMgaGVhZCBvZiBhIGJyYW5jaAorIyBnaXQgdXBkYXRlLWluZGV4IC1oINC40LfQstC10LbQtNCwINGB0LDQvNC+INC10LTQuNC9INGA0LXQtCwg0LAg0L3QtSDRhtGP0LvQsNGC0LAg0L/QvtC80L7RiSDQt9CwINC+0L/RhtC40LjRgtC1CisjIGdpdCBmZXRjaCAtLWFsINGA0LDQsdC+0YLQuCDQv9C+0LTQvtCx0L3QviDQvdCwIC0tYWxsCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBleHBvcnQgUE9fRklMRT1iZy5wbworIyBtc2dhdHRyaWIgLS1vbmx5LWZ1enp5ICAkUE9fRklMRSA+IHRvZG8xLnBvCisjIG1zZ2F0dHJpYiAtLXVudHJhbnNsYXRlZCAgJFBPX0ZJTEUgPiB0b2RvMi5wbworIyBtc2djYXQgdG9kbzEucG8gdG9kbzIucG8gPiB0b2RvLnBvCisjIGdyZXAgJ14jOiAnIHRvZG8ucG8gfCBzZWQgJ3MvXiM6IC8vJyB8IHRyICcgJyAnXG4nIHwgc2VkICdzLzpbMC05XSokLy8nID4gRklMRVMKKyMgZm9yIGkgaW4gYHNvcnQgLXUgRklMRVNgOyBkbyBjbnQ9YGdyZXAgJGkgRklMRVMgfCB3YyAtbGA7IGVjaG8gJGNudCAkaSA7ZG9uZSB8IHNvcnQgLW4KIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWkgbWFzdGVyXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE2LTEwLTEzIDE1OjE2KzAzMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTEwLTEzIDE1OjE2KzAzMDBcbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdCAyLjI1XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMjAtMDEtMDkgMTY6MjIrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDEtMDkgMTY6MzErMDEwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPlxuIgogIkxhbmd1YWdlLVRlYW06IEJ1bGdhcmlhbiA8ZGljdEBmc2EtYmcub3JnPlxuIgogIkxhbmd1YWdlOiBiZ1xuIgpAQCAtMTgsMjc5MCArMTcxLDI0Nzk0IEBACiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgogCi0jOiBnaXQtZ3VpLnNoOjg2NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgotbXNnc3RyICLQo9C60LDQt9Cw0L0g0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0g0YjRgNC40YTRgiDQsiDigJ4lc+KAnDoiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/IgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC10L0g0LDQvdCw0LvQuNC3IOKAlCDigJ4lc+KAnC4iCiAKLSM6IGdpdC1ndWkuc2g6OTE5Ci1tc2dpZCAiTWFpbiBGb250IgotbXNnc3RyICLQntGB0L3QvtCy0LXQvSDRiNGA0LjRhNGCIgorIzogYWRkLWludGVyYWN0aXZlLmM6NTAwIGFkZC1pbnRlcmFjdGl2ZS5jOjgwMSBzZXF1ZW5jZXIuYzozMjE2CisjOiBzZXF1ZW5jZXIuYzozNjU2IGJ1aWx0aW4vcmViYXNlLmM6ODcxIGJ1aWx0aW4vcmViYXNlLmM6MTY0MworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE5IGJ1aWx0aW4vcmViYXNlLmM6MjA2MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgogCi0jOiBnaXQtZ3VpLnNoOjkyMAotbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgotbXNnc3RyICLQqNGA0LjRhNGCINC30LAg0YDQsNC30LvQuNC60LjRgtC1L9C60L7QvdC30L7Qu9Cw0YLQsCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjU1NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI2OQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyOTQKK21zZ2lkICJiaW5hcnkiCittc2dzdHIgItC00LLQvtC40YfQvdC+IgogCi0jOiBnaXQtZ3VpLnNoOjkzNSBnaXQtZ3VpLnNoOjk0OSBnaXQtZ3VpLnNoOjk2MiBnaXQtZ3VpLnNoOjEwNTIgZ2l0LWd1aS5zaDoxMDcxCi0jOiBnaXQtZ3VpLnNoOjMxNDcKLW1zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKLW1zZ3N0ciAiZ2l0LWd1aTog0YTQsNGC0LDQu9C90LAg0LPRgNC10YjQutCwIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjEzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMzMgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgItC90LjRidC+IgogCi0jOiBnaXQtZ3VpLnNoOjkzNgotbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKLW1zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIGdpdCDQu9C40L/RgdCy0LAg0LIg0L/RitGC0Y8gKFBBVEgpLiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYxNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxNAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMjkKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgItC90Y/QvNCwINC/0YDQvtC80LXQvdC4IgogCi0jOiBnaXQtZ3VpLnNoOjk2MwotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICLQndC40LfRitGCINGBINCy0LXRgNGB0LjRj9GC0LAg0L3QsCBHaXQg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40L3RgtC10YDQv9GA0LXRgtC40YDQsNC9OiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY0MworbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUiCiAKLSM6IGdpdC1ndWkuc2g6OTg4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgotIlxuIgotIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCi0iXG4iCi0iJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgotIlxuIgotIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCi1tc2dzdHIgIiIKLSLQktC10YDRgdC40Y/RgtCwINC90LAgR2l0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtC/0YDQtdC00LXQu9C10L3QsC5cbiIKLSJcbiIKLSLQktC10YDRgdC40Y/RgtCwINC90LAg4oCeJXPigJwg0LjQt9Cz0LvQtdC20LTQsCwg0YfQtSDQtSDigJ4lc+KAnC5cbiIKLSJcbiIKLSLigJ4lc+KAnCDQuNC30LjRgdC60LLQsCBHaXQsINCy0LXRgNGB0LjRjyDQv9C+0L3QtSAxLjUuMC5cbiIKLSJcbiIKLSLQlNCwINGB0LUg0L/RgNC40LXQvNC1INC70LgsINGH0LUg4oCeJXPigJwg0LUg0LLQtdGA0YHQuNGPIOKAnjEuNS4w4oCcP1xuIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjY4IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC00L7QsdCw0LLRj9C90LUg0LIg0LjQvdC00LXQutGB0LAg0L3QsCDigJ4lc+KAnCIKIAotIzogZ2l0LWd1aS5zaDoxMjg1Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0L3QsCBHaXQg0L3QtSDQtSDQvtGC0LrRgNC40YLQsDoiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzQgYWRkLWludGVyYWN0aXZlLmM6ODYzIHNlcXVlbmNlci5jOjM0MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk1Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKIAotIzogZ2l0LWd1aS5zaDoxMzE5Ci1tc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INGA0L7QtNC40YLQtdC70YHQutCw0YLQsCAg0LTQuNGA0LXQutGC0L7RgNC40Y8uIgorIzogYWRkLWludGVyYWN0aXZlLmM6Njc3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJ1cGRhdGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidXBkYXRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCDRhNCw0LnQuyDQvtCx0L3QvtCy0LXQvVxuIgorbXNnc3RyWzFdICIlZCDRhNCw0LnQu9CwINC+0LHQvdC+0LLQtdC90LhcbiIKIAotIzogZ2l0LWd1aS5zaDoxMzI3Ci1tc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgotbXNnc3RyICLQk9C+0LvQviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsDoiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgItCR0JXQm9CV0JbQmtCQOiDigJ4lc+KAnCDQstC10YfQtSDQvdC1INGB0LUg0YHQu9C10LTQuC5cbiIKIAotIzogZ2l0LWd1aS5zaDoxMzM1Ci1tc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgItCg0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQu9C40L/RgdCy0LAiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MDAgYXBwbHkuYzo0MTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoyODEKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC30LDQv9C40YEg0LIg0LrQtdGI0LAg0YfRgNC10Lcg4oCebWFrZV9jYWNoZV9lbnRyeeKAnCDQt9CwIOKAniVz4oCcIgogCi0jOiBnaXQtZ3VpLnNoOjE1MDcgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDRhNCw0LnQu9Cw4oCmIgotCi0jOiBnaXQtZ3VpLnNoOjE1NjcKLW1zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgotbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC30LAg0L/RgNC+0LzQtdC90LXQvdC4INGE0LDQudC70L7QstC14oCmIgotCi0jOiBnaXQtZ3VpLnNoOjE2NDUKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICLQmtGD0LrQsNGC0LAg4oCecHJlcGFyZS1jb21taXQtbXNn4oCcINGB0LUg0LjQt9C/0YrQu9C90Y/QstCwINCyINC80L7QvNC10L3RgtCw4oCmIgotCi0jOiBnaXQtZ3VpLnNoOjE2NjIKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgotbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDQtSDQvtGC0YXQstGK0YDQu9C10L3QviDQvtGCINC60YPQutCw0YLQsCDigJ5wcmVwYXJlLWNvbW1pdC1tc2figJwuIgotCi0jOiBnaXQtZ3VpLnNoOjE4MjAgbGliL2Jyb3dzZXIudGNsOjI1MgotbXNnaWQgIlJlYWR5LiIKLW1zZ3N0ciAi0JPQvtGC0L7QstC+LiIKLQotIzogZ2l0LWd1aS5zaDoxOTg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkRpc3BsYXkgbGltaXQgKGd1aS5tYXhmaWxlc2Rpc3BsYXllZCA9ICVzKSByZWFjaGVkLCBub3Qgc2hvd2luZyBhbGwgJXMgZmlsZXMuIgotbXNnc3RyICIiCi0i0JTQvtGB0YLQuNCz0L3QsNGCINC1INC80LDQutGB0LjQvNCw0LvQvdC40Y/RgiDRgNCw0LfQvNC10YAg0L3QsCDRgdC/0LjRgdGK0LrQsCDQt9CwINC40LfQstC10LbQtNCw0L3QtShndWkuIgotIm1heGZpbGVzZGlzcGxheWVkID0gJXMpLCDRgdGK0L7RgtCy0LXRgtC90L4g0L3QtSDRgdCwINC/0L7QutCw0LfQsNC90Lgg0LLRgdC40YfQutC4ICVzINGE0LDQudC70LAuIgotCi0jOiBnaXQtZ3VpLnNoOjIxMDcKLW1zZ2lkICJVbm1vZGlmaWVkIgotbXNnc3RyICLQndC10L/RgNC+0LzQtdC90LXQvSIKLQotIzogZ2l0LWd1aS5zaDoyMTA5Ci1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgItCf0YDQvtC80LXQvdC10L0sINC90L4g0L3QtSDQtSDQsiDQuNC90LTQtdC60YHQsCIKLQotIzogZ2l0LWd1aS5zaDoyMTEwIGdpdC1ndWkuc2g6MjEyMgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICLQkiDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUiCi0KLSM6IGdpdC1ndWkuc2g6MjExMSBnaXQtZ3VpLnNoOjIxMjMKLW1zZ2lkICJQb3J0aW9ucyBzdGFnZWQgZm9yIGNvbW1pdCIKLW1zZ3N0ciAi0KfQsNGB0YLQuCDRgdCwINCyINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKLQotIzogZ2l0LWd1aS5zaDoyMTEyIGdpdC1ndWkuc2g6MjEyNAotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICLQkiDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUsINC90L4g0LvQuNC/0YHQstCwIgotCi0jOiBnaXQtZ3VpLnNoOjIxMTQKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINGE0LDQudC70LAg0LUg0YHQvNC10L3QtdC9LCDQvdC+INC90LUg0LUg0LIg0LjQvdC00LXQutGB0LAiCi0KLSM6IGdpdC1ndWkuc2g6MjExNSBnaXQtZ3VpLnNoOjIxMTYKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgb2xkIHR5cGUgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgItCS0LjQtNGK0YIg0L3QsCDRhNCw0LnQu9CwINC1INGB0LzQtdC90LXQvSwg0L3QviDQvdC+0LLQuNGP0YIg0LLQuNC0INC90LUg0LUg0LIg0LjQvdC00LXQutGB0LAiCi0KLSM6IGdpdC1ndWkuc2g6MjExNwotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCi1tc2dzdHIgItCS0LjQtNGK0YIg0L3QsCDRhNCw0LnQu9CwINC1INGB0LzQtdC90LXQvSDQuCDQtSDQsiDQuNC90LTQtdC60YHQsCIKLQotIzogZ2l0LWd1aS5zaDoyMTE4Ci1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZSBzdGFnZWQsIG1vZGlmaWNhdGlvbiBub3Qgc3RhZ2VkIgotbXNnc3RyICLQktC40LTRitGCINC90LAg0YTQsNC50LvQsCDQtSDRgdC80LXQvdC10L0g0LIg0LjQvdC00LXQutGB0LAsINC90L4g0L3QtSDQuCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4iCi0KLSM6IGdpdC1ndWkuc2g6MjExOQotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBmaWxlIG1pc3NpbmciCi1tc2dzdHIgItCS0LjQtNGK0YIg0L3QsCDRhNCw0LnQu9CwINC1INGB0LzQtdC90LXQvSDQsiDQuNC90LTQtdC60YHQsCwg0L3QviDRhNCw0LnQu9GK0YIg0LvQuNC/0YHQstCwIgotCi0jOiBnaXQtZ3VpLnNoOjIxMjEKLW1zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgItCd0LXRgdC70LXQtNC10L0iCi0KLSM6IGdpdC1ndWkuc2g6MjEyNgotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgItCb0LjQv9GB0LLQsNGJIgotCi0jOiBnaXQtZ3VpLnNoOjIxMjcKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCi1tc2dzdHIgItCSINC40L3QtNC10LrRgdCwINC30LAg0LjQt9GC0YDQuNCy0LDQvdC1IgotCi0jOiBnaXQtZ3VpLnNoOjIxMjgKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCi1tc2dzdHIgItCSINC40L3QtNC10LrRgdCwINC30LAg0LjQt9GC0YDQuNCy0LDQvdC1LCDQvdC+INC+0YnQtSDQs9C+INC40LzQsCIKLQotIzogZ2l0LWd1aS5zaDoyMTMwIGdpdC1ndWkuc2g6MjEzMSBnaXQtZ3VpLnNoOjIxMzIgZ2l0LWd1aS5zaDoyMTMzCi0jOiBnaXQtZ3VpLnNoOjIxMzQgZ2l0LWd1aS5zaDoyMTM1Ci1tc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKLW1zZ3N0ciAi0JjQt9C40YHQutCy0LAg0LrQvtGA0LjQs9C40YDQsNC90LUg0L/RgNC4INGB0LvQuNCy0LDQvdC1IgotCi0jOiBnaXQtZ3VpLnNoOjIxNzAKLW1zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICLQodGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwIOKAnmdpdGvigJzigKYsINC40LfRh9Cw0LrQsNC50YLQteKApiIKLQotIzogZ2l0LWd1aS5zaDoyMTgyCi1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCi1tc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXRr4oCcINC70LjQv9GB0LLQsCDQsiDQv9GK0YLQuNGJ0LDRgtCwLCDQvtC/0YDQtdC00LXQu9C10L3QuCDQvtGCINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCBQQVRILiIKLQotIzogZ2l0LWd1aS5zaDoyMjQxCi1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiCi1tc2dzdHIgIiIKLSLQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGd1aeKAnCDQu9C40L/RgdCy0LAg0LIg0L/RitGC0LjRidCw0YLQsCwg0L7Qv9GA0LXQtNC10LvQtdC90Lgg0L7RgiDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAgUEFUSC4iCi0KLSM6IGdpdC1ndWkuc2g6MjY3NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxCi1tc2dpZCAiUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC1IgotCi0jOiBnaXQtZ3VpLnNoOjI2NzcKLW1zZ2lkICJFZGl0IgotbXNnc3RyICLQoNC10LTQsNC60YLQuNGA0LDQvdC1IgotCi0jOiBnaXQtZ3VpLnNoOjI2NzkgbGliL2Nob29zZV9yZXYudGNsOjU2NwotbXNnaWQgIkJyYW5jaCIKLW1zZ3N0ciAi0JrQu9C+0L0iCi0KLSM6IGdpdC1ndWkuc2g6MjY4MiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU0Ci1tc2dpZCAiQ29tbWl0QEBub3VuIgotbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1IgotCi0jOiBnaXQtZ3VpLnNoOjI2ODUgbGliL21lcmdlLnRjbDoxMjcgbGliL21lcmdlLnRjbDoxNzQKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAi0KHQu9C40LLQsNC90LUiCi0KLSM6IGdpdC1ndWkuc2g6MjY4NiBsaWIvY2hvb3NlX3Jldi50Y2w6NTYzCi1tc2dpZCAiUmVtb3RlIgotbXNnc3RyICLQntGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCi0KLSM6IGdpdC1ndWkuc2g6MjY4OQotbXNnaWQgIlRvb2xzIgotbXNnc3RyICLQmtC+0LzQsNC90LTQuCIKLQotIzogZ2l0LWd1aS5zaDoyNjk4Ci1tc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCi1tc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LrQvtC/0LjQtSIKLQotIzogZ2l0LWd1aS5zaDoyNzA0Ci1tc2dpZCAiR2l0IEJhc2giCi1tc2dzdHIgIkJhc2gg0LfQsCBHaXQiCi0KLSM6IGdpdC1ndWkuc2g6MjcxNAotbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgotbXNnc3RyICLQoNCw0LfQs9C70LXQttC00LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCyINGC0LXQutGD0YnQuNGPINC60LvQvtC9IgotCi0jOiBnaXQtZ3VpLnNoOjI3MTgKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgotbXNnc3RyICLQoNCw0LfQs9C70LXQttC00LDQvdC1INC90LAg0YLQtdC60YPRidC40Y8g0LrQu9C+0L3igKYiCi0KLSM6IGdpdC1ndWkuc2g6MjcyMwotbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCi1tc2dzdHIgItCS0LjQt9GD0LDQu9C40LfQsNGG0LjRjyDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINGC0LXQutGD0YnQuNGPINC60LvQvtC9IgotCi0jOiBnaXQtZ3VpLnNoOjI3MjcKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgotbXNnc3RyICLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8g0L3QsCDQuNGB0YLQvtGA0LjRj9GC0LAg0L3QsCDQstGB0LjRh9C60Lgg0LrQu9C+0L3QvtCy0LUiCi0KLSM6IGdpdC1ndWkuc2g6MjczNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICLQoNCw0LfQs9C70LXQttC00LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCyIOKAniVz4oCcIgotCi0jOiBnaXQtZ3VpLnNoOjI3MzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgotbXNnc3RyICLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8g0L3QsCDQuNGB0YLQvtGA0LjRj9GC0LAg0L3QsCDigJ4lc+KAnCIKLQotIzogZ2l0LWd1aS5zaDoyNzQxIGxpYi9kYXRhYmFzZS50Y2w6NDAKLW1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICLQodGC0LDRgtC40YHRgtC40LrQsCDQvdCwINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90LgiCi0KLSM6IGdpdC1ndWkuc2g6Mjc0NCBsaWIvZGF0YWJhc2UudGNsOjMzCi1tc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCi1tc2dzdHIgItCa0L7QvNC/0YDQtdGB0LjRgNCw0L3QtSDQvdCwINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90LgiCi0KLSM6IGdpdC1ndWkuc2g6Mjc0NwotbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKLW1zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90LgiCi0KLSM6IGdpdC1ndWkuc2g6Mjc1NCBnaXQtZ3VpLnNoOjI3NTggZ2l0LWd1aS5zaDoyNzYyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC40LrQvtC90LAg0L3QsCDRgNCw0LHQvtGC0L3QuNGPINC/0LvQvtGCIgotCi0jOiBnaXQtZ3VpLnNoOjI3NzAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyMDEKLW1zZ2lkICJRdWl0IgotbXNnc3RyICLQodC/0LjRgNCw0L3QtSDQvdCwINC/0YDQvtCz0YDQsNC80LDRgtCwIgotCi0jOiBnaXQtZ3VpLnNoOjI3NzgKLW1zZ2lkICJVbmRvIgorIzogYWRkLWludGVyYWN0aXZlLmM6NzMwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjU1Cittc2dpZCAiUmV2ZXJ0IgogbXNnc3RyICLQntGC0LzRj9C90LAiCiAKLSM6IGdpdC1ndWkuc2g6Mjc4MQotbXNnaWQgIlJlZG8iCi1tc2dzdHIgItCf0L7QstGC0L7RgNC10L3QuNC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6NzQ2Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFEXnt0cmVlfeKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L0iCiAKLSM6IGdpdC1ndWkuc2g6Mjc4NSBnaXQtZ3VpLnNoOjMzOTkKLW1zZ2lkICJDdXQiCi1tc2dzdHIgItCe0YLRgNGP0LfQstCw0L3QtSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc4NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzMQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCDRhNCw0LnQuyDRgSDQvtGC0LzQtdC90LXQvdC4INC/0YDQvtC80LXQvdC4XG4iCittc2dzdHJbMV0gIiVkINGE0LDQudC70LAg0YEg0L7RgtC80LXQvdC10L3QuCDQv9GA0L7QvNC10L3QuFxuIgogCi0jOiBnaXQtZ3VpLnNoOjI3ODggZ2l0LWd1aS5zaDozNDAyIGdpdC1ndWkuc2g6MzQ3NiBnaXQtZ3VpLnNoOjM1NjIKLSM6IGxpYi9jb25zb2xlLnRjbDo2OQotbXNnaWQgIkNvcHkiCi1tc2dzdHIgItCa0L7Qv9C40YDQsNC90LUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICLQndGP0LzQsCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUuXG4iCiAKLSM6IGdpdC1ndWkuc2g6Mjc5MSBnaXQtZ3VpLnNoOjM0MDUKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAi0J/QvtGB0YLQsNCy0Y/QvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6ODM5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuCIKIAotIzogZ2l0LWd1aS5zaDoyNzk0IGdpdC1ndWkuc2g6MzQwOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjgKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzkKLW1zZ2lkICJEZWxldGUiCi1tc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCDRhNCw0LnQuyDQtNC+0LHQsNCy0LXQvVxuIgorbXNnc3RyWzFdICIlZCDRhNCw0LnQu9CwINC00L7QsdCw0LLQtdC90LhcbiIKIAotIzogZ2l0LWd1aS5zaDoyNzk4IGdpdC1ndWkuc2g6MzQxMiBnaXQtZ3VpLnNoOjM1NjYgbGliL2NvbnNvbGUudGNsOjcxCi1tc2dpZCAiU2VsZWN0IEFsbCIKLW1zZ3N0ciAi0JjQt9Cx0LjRgNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgItC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC1INC90LAg0L3QtdGB0LvRj9GC0L7RgtC+OiDigJ4lc+KAnCIKIAotIzogZ2l0LWd1aS5zaDoyODA3Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LXigKYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MDggYWRkLXBhdGNoLmM6MTMzMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAi0KHQsNC80L4g0LTQstC+0LjRh9C90Lgg0YTQsNC50LvQvtCy0LUg0YHQsCDQv9GA0L7QvNC10L3QtdC90LguXG4iCiAKLSM6IGdpdC1ndWkuc2g6MjgxMwotbXNnaWQgIkNoZWNrb3V0Li4uIgotbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LXigKYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTAgYWRkLXBhdGNoLmM6MTMyOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAi0J3Rj9C80LAg0L/RgNC+0LzQtdC90LguXG4iCiAKLSM6IGdpdC1ndWkuc2g6MjgxOQotbXNnaWQgIlJlbmFtZS4uLiIKLW1zZ3N0ciAi0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC14oCmIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQutGA0YrQv9C60LAiCiAKLSM6IGdpdC1ndWkuc2g6MjgyNAotbXNnaWQgIkRlbGV0ZS4uLiIKLW1zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC14oCmIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTUzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1NAorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICLQn9GA0LXQs9C70LXQtCDQvdCwINGA0LDQt9C70LjQutCw0YLQsCIKIAotIzogZ2l0LWd1aS5zaDoyODI5Ci1tc2dpZCAiUmVzZXQuLi4iCi1tc2dzdHIgItCe0YLQvNGP0L3QsCDQvdCwINC/0YDQvtC80LXQvdC40YLQteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MQorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwINGBINC/0YDQvtC80LXQvdC4IgogCi0jOiBnaXQtZ3VpLnNoOjI4MzkKLW1zZ2lkICJEb25lIgotbXNnc3RyICLQk9C+0YLQvtCy0L4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODMKK21zZ2lkICJhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LrRitC8INC/0YDQvtC80LXQvdC40YLQtSDQsiDQuNC90LTQtdC60YHQsCIKIAotIzogZ2l0LWd1aS5zaDoyODQxCi1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6OTg1Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgItCy0YDRitGJ0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINC40L3QtNC10LrRgdCwINC60YrQvCDRgdC+0YfQtdC90L7RgtC+INC+0YIg4oCeSEVBROKAnCIKIAotIzogZ2l0LWd1aS5zaDoyODUwIGdpdC1ndWkuc2g6MzMzNQotbXNnaWQgIk5ldyBDb21taXQiCi1tc2dzdHIgItCd0L7QstC+INC/0L7QtNCw0LLQsNC90LUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODcKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QuCDQuNC30LHQvtGAINC4INC/0YDQvtC80Y/QvdCwINC90LAg0L/QsNGA0YfQtdGC0LAg0LrQvtC0IgogCi0jOiBnaXQtZ3VpLnNoOjI4NTggZ2l0LWd1aS5zaDozMzQyCi1tc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCi1tc2dzdHIgItCf0L7Qv9GA0LDQstGP0L3QtSDQvdCwINC/0L7RgdC70LXQtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODkKK21zZ2lkICJ2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LAg0LzQtdC20LTRgyDRgdC+0YfQtdC90L7RgtC+INC+0YIg4oCeSEVBROKAnCDQuCDQuNC90LTQtdC60YHQsCIKIAotIzogZ2l0LWd1aS5zaDoyODY4IGdpdC1ndWkuc2g6MzI5NiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEwMQotbXNnaWQgIlJlc2NhbiIKLW1zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTEKK21zZ2lkICJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INC60YrQvCDQuNC90LTQtdC60YHQsCIKIAotIzogZ2l0LWd1aS5zaDoyODc0Ci1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICLQmtGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6OTk5IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNDgKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgItCf0L7QvNC+0Yk6IgogCi0jOiBnaXQtZ3VpLnNoOjI4ODAKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAi0JLRgdC40YfQutC4INC/0YDQvtC80LXQvdC10L3QuCDRhNCw0LnQu9C+0LLQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMQorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAgZdC00LjQvSDQtdC70LXQvNC10L3RgiIKIAotIzogZ2l0LWd1aS5zaDoyODg2Ci1tc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC+0YIg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMworbXNnaWQgInNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC10LvQtdC80LXQvdGC0LgiCiAKLSM6IGdpdC1ndWkuc2g6Mjg5MiBsaWIvaW5kZXgudGNsOjQ0MgotbXNnaWQgIlJldmVydCBDaGFuZ2VzIgotbXNnc3RyICLQktGA0YrRidCw0L3QtSDQvdCwINC+0YDQuNCz0LjQvdCw0LvQsCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDUKK21zZ2lkICJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0L3Rj9C60L7Qu9C60L4g0L/QvtGA0LXQtNC40YbQuCDQvtGCINC10LvQtdC80LXQvdGC0LgiCiAKLSM6IGdpdC1ndWkuc2g6MjkwMCBnaXQtZ3VpLnNoOjM2MTMgZ2l0LWd1aS5zaDozNjQ0Ci1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgItCf0L4t0LzQsNC70LrQviDQutC+0L3RgtC10LrRgdGCIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNyBhZGQtaW50ZXJhY3RpdmUuYzoxMDUyCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAi0LjQt9Cx0L7RgCDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwINGD0L3QuNC60LDQu9C10L0g0L/RgNC10YTQuNC60YEiCiAKLSM6IGdpdC1ndWkuc2g6MjkwNCBnaXQtZ3VpLnNoOjM2MTcgZ2l0LWd1aS5zaDozNjQ4Ci1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgItCf0L7QstC10YfQtSDQutC+0L3RgtC10LrRgdGCIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOQorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAi0LjQt9Cy0LDQttC00LDQvdC1INC90LAg0YPQutCw0LfQsNC90L7RgtC+INC+0YIg0LjQt9Cx0L7RgNCwIgogCi0jOiBnaXQtZ3VpLnNoOjI5MTEgZ2l0LWd1aS5zaDozMzA5IGdpdC1ndWkuc2g6MzQyMwotbXNnaWQgIlNpZ24gT2ZmIgotbXNnc3RyICLQn9C+0LTQv9C40YHQstCw0L3QtSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTEKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0LLRgdC40YfQutC4INC10LvQtdC80LXQvdGC0LgiCiAKLSM6IGdpdC1ndWkuc2g6MjkyNwotbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgotbXNnc3RyICLQm9C+0LrQsNC70L3QviDRgdC70LjQstCw0L3QteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTMKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIijQv9GA0LDQt9C90L4pINC/0YDQuNC60LvRjtGH0LLQsNC90LUg0L3QsCDQuNC30LHQuNGA0LDQvdC10YLQviIKIAotIzogZ2l0LWd1aS5zaDoyOTMyCi1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC14oCmIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTA1MAorbXNnaWQgInNlbGVjdCBhIG51bWJlcmVkIGl0ZW0iCittc2dzdHIgItC40LfQsdC+0YAg0L3QsCDQvdC+0LzQtdGA0LjRgNCw0L0g0LXQu9C10LzQtdC90YIiCiAKLSM6IGdpdC1ndWkuc2g6Mjk0NCBnaXQtZ3VpLnNoOjI5NzIKLW1zZ2lkICJBZGQuLi4iCi1tc2dzdHIgItCU0L7QsdCw0LLRj9C90LXigKYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDU0Cittc2dpZCAiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiKNC/0YDQsNC30L3Qvikg0LHQtdC3INC40LfQsdC+0YAg0L3QsCDQvdC40YnQviIKIAotIzogZ2l0LWd1aS5zaDoyOTQ4Ci1tc2dpZCAiUHVzaC4uLiIKLW1zZ3N0ciAi0JjQt9GC0LvQsNGB0LrQstCw0L3QteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjIgYnVpbHRpbi9jbGVhbi5jOjgyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NTEKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICLil4/il4/il48g0JrQvtC80LDQvdC00Lgg4peP4peP4pePIgogCi0jOiBnaXQtZ3VpLnNoOjI5NTIKLW1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgotbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQutC70L7QveKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjMgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAi0JjQt9Cx0L7RgCDQvdCwINGB0LvQtdC00LLQsNGJ0L4g0LTQtdC50YHRgtCy0LjQtSIKIAotIzogZ2l0LWd1aS5zaDoyOTYyIGdpdC1ndWkuc2g6MzU5NQotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgItCe0L/RhtC40LjigKYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICLQsiDQuNC90LTQtdC60YHQsCIKIAotIzogZ2l0LWd1aS5zaDoyOTczCi1tc2dpZCAiUmVtb3ZlLi4uIgotbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QteKApiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJ1bnN0YWdlZCIKK21zZ3N0ciAi0LjQt9Cy0YrQvSDQuNC90LTQtdC60YHQsCIKIAotIzogZ2l0LWd1aS5zaDoyOTgyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUKLW1zZ2lkICJIZWxwIgotbXNnc3RyICLQn9C+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/QvtC00LzQvtC00YPQu9CwIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBhcHBseS5jOjQ5NjUgYXBwbHkuYzo0OTY4IGJ1aWx0aW4vYW0uYzoyMTk3CisjOiBidWlsdGluL2FtLmM6MjIwMCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzMgYnVpbHRpbi9wdWxsLmM6MjA5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICLQv9GK0YIiCiAKLSM6IGdpdC1ndWkuc2g6MzY2NQotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0LLRgdC40YfQutC4INC60LvQvtC90Lgg0LIg0LjRgdGC0L7RgNC40Y/RgtCwINC30LAg0L/QvtC00LzQvtC00YPQu9CwIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTEyMgorbXNnaWQgImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSIKIAotIzogZ2l0LWd1aS5zaDozNjcwCi1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICLQodGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwIOKAnmdpdCBndWnigJwg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAiCisjCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAi0JjQt9GF0L7QtC5cbiIKIAotIzogZ2l0LWd1aS5zaDozNzA1Ci1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+IgorIzogYWRkLXBhdGNoLmM6MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAg0L3QsCDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyBbeSxuLGEscSxkJXMsP10/ICIKIAotIzogZ2l0LWd1aS5zaDozNzA3Ci1tc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKLW1zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+IgorIzogYWRkLXBhdGNoLmM6MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQuNC30YLRgNC40LLQsNC90LXRgtC+IFt5LG4sYSxxLGQlcyw/XT8gIgogCi0jOiBnaXQtZ3VpLnNoOjM3MDkKLW1zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCi1tc2dzdHIgItCY0LfQstCw0LbQtNCw0L3QtSDQvdCwINGA0LXQtNCwINC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4iCisjOiBhZGQtcGF0Y2guYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDRgtC+0LLQsCDQv9Cw0YDRh9C1IFt5LG4sYSxxLGQlcyw/XT8gIgogCi0jOiBnaXQtZ3VpLnNoOjM3MTIKLW1zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCi1tc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUiCisjOiBhZGQtcGF0Y2guYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0L3QsCDQv9Cw0YDRh9C10YLQviDigJ4lLipz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKIAotIzogZ2l0LWd1aS5zaDozNzE0Ci1tc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKLW1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtNC+0LLQtdGC0LUg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorIzogYWRkLXBhdGNoLmM6MTMwIGFkZC1wYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC90LAg0L7RhtCy0LXRgtC10L3QvtGC0L4g0L/QsNGA0YfQtSDigJ4lLipz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKIAotIzogZ2l0LWd1aS5zaDozNzE2Ci1tc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgotbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YDQtdC00LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorIzogYWRkLXBhdGNoLmM6MTc2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGRpZmYiCittc2dzdHIgItGA0LDQt9C70LjQutCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAiCiAKLSM6IGdpdC1ndWkuc2g6Mzc0MQotbXNnaWQgIkluaXRpYWxpemluZy4uLiIKLW1zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QteKApiIKKyM6IGFkZC1wYXRjaC5jOjE5NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgItC+0YbQstC10YLQtdC90LDRgtCwINGA0LDQt9C70LjQutCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKIAotIzogZ2l0LWd1aS5zaDozODg2Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzo1MDgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKK21zZ3N0ciAiIgorItC+0YfQsNC60LLQsCDRgdC1INGA0LXQtCDihJYlZCDQvtGCINC60L7QvdGC0LXQutGB0YLQsCDQslxuIgorIiUuKnMiCisKKyM6IGFkZC1wYXRjaC5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaHVua3MgZG8gbm90IG92ZXJsYXA6XG4iCisiJS4qc1xuIgorIlx0ZG9lcyBub3QgZW5kIHdpdGg6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorItC/0LDRgNGH0LXRgtCw0YLQsCDQutC+0LQg0L3QtSDRgdC1INC/0YDQuNC/0L7QutGA0LjQstCw0YI6XG4iCisiJS4qc1xuIgorIiAgICDQvdC1INC30LDQstGK0YDRiNCy0LAg0YE6XG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6Nzk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICLQoNGK0YfQvdC+INGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQsCDQutC+0LQg4oCUINC+0YLQtNC+0LvRgyDQuNC80LAg0L/QvtC00YHQutCw0LfQutCwLlxuIgorCisjOiBhZGQtcGF0Y2guYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyLigJTigJTigJRcbiIKKyLQl9CwINC00LAg0L/RgNC+0L/Rg9GB0L3QtdGC0LUg0YDQtdC00L7QstC10YLQtSwg0LfQsNC/0L7Rh9Cy0LDRidC4INGBIOKAniVj4oCcOiDQt9Cw0LzQtdC90LXRgtC1INC30L3QsNC60LAg0YEg4oCeIOKAnCAo0YHRgtCw0LLQsNGCICIKKyLQutC+0L3RgtC10LrRgdGCKVxuIgorItCX0LAg0LTQsCDQv9GA0L7Qv9GD0YHQvdC10YLQtSDRgNC10LTQvtCy0LXRgtC1LCDQt9Cw0L/QvtGH0LLQsNGJ0Lgg0YEg4oCeJWPigJw6INC40LfRgtGA0LjQudGC0LUg0LPQuC5cbiIKKyLQoNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC30LDQv9C+0YfQstCw0YIg0YEg4oCeJWPigJwg0YnQtSDQsdGK0LTQsNGCINC/0YDQvtC/0YPRgdC90LDRgtC4LlxuIgorCisjOiBhZGQtcGF0Y2guYzo4MTAKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuXG4iCittc2dzdHIgIiIKKyLQkNC60L4g0LrRgNGK0L/QutCw0YLQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20Lgg0YfQuNGB0YLQviwg0YDQtdC00LDQutGC0LjRgNCw0L3QvtGC0L4g0L/QsNGA0YfQtSDRidC1INCx0YrQtNC1ICIKKyLQvdC10LfQsNCx0LDQstC90L5cbiIKKyLQtNC+0LHQsNCy0LXQvdC+INC60YrQvCDQuNC90LTQtdC60YHQsC5cbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogYWRkLXBhdGNoLmM6ODE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTEyNgorbXNnaWQgIiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorItCQ0LrQviDQtSDQvdC10LLRitC30LzQvtC20L3QviDRh9C40YHRgtC+INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60L7QtNCwLCDRidC1INC80L7QttC1INC/0LDQuiDQtNCwINGA0LXQtNCw0LrRgtC40YDQsNGC0LUuICDQkNC60L5cbiIKKyLQuNC30YLRgNC40LXRgtC1INCy0YHQuNGH0LrQuCDRgNC10LTQvtCy0LUg0L7RgiDQv9Cw0YDRh9C10YLQviDQutC+0LQsINGC0L4g0YnQtSDQsdGK0LTQtSDQvtGB0YLQsNCy0LXQvdC+INC90LXQv9GA0L7QvNC10L3QtdC90L4sINCwXG4iCisi0YDQtdC00LDQutGC0LjRgNCw0L3QtdGC0L4g4oCUINC+0YLQutCw0LfQsNC90L4uXG4iCisKKyM6IGFkZC1wYXRjaC5jOjg1MQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0L/QsNGA0YfQtdGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBhZGQtcGF0Y2guYzo4OTUgYWRkLXBhdGNoLmM6MTI5NAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0IGFwcGx5IC0tY2FjaGVk4oCcIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6OTUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorItCg0LXQtNCw0LrRgtC40YDQsNC90L7RgtC+INC/0LDRgNGH0LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20LguICDQlNCwINGB0LUg0L/RgNC+0LTRitC70LbQuCDQu9C4INGBICIKKyLRgNC10LTQsNC60YLQuNGA0LDQvdC10YLQvj8gKNGC0LXQutGD0YnQuNGC0LUg0YDQtdC00LDQutGG0LjQuCDRidC1INGB0LUg0L7RgtC80LXQvdGP0YIg0L/RgNC4INC+0YLQutCw0LchKTog4oCeeeKAnCAo0LTQsCkvICIKKyLigJ5u4oCcICjQvdC1KT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDA5Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBhbmQgYWxsIHRoZSByZW1haW5pbmcgaHVua3NcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBub3IgYW55IG9mIHRoZSByZW1haW5pbmcgaHVua3NcbiIKK21zZ3N0ciAiIgorInkg4oCUINC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQsiDQuNC90LTQtdC60YHQsFxuIgorIm4g4oCUINCx0LXQtyDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0LIg0LjQvdC00LXQutGB0LBcbiIKKyJxIOKAlCDQuNC30YXQvtC0LCDQsdC10Lcg0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDQvtGB0YLQsNCy0LDRidC4INC/0LDRgNGH0LXRgtCwXG4iCisiYSDigJQg0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7QstCwINC4INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC/0LDRgNGH0LXRgtCwINCyINC40L3QtNC10LrRgdCwXG4iCisiZCDigJQg0LHQtdC3INC00L7QsdCw0LLRj9C90LUg0L3QsCDRgtC+0LLQsCDQuCDQstGB0LjRh9C60Lgg0L7RgdGC0LDQstCw0YnQuCDQv9Cw0YDRh9C10YLQsCDQsiDQuNC90LTQtdC60YHQsFxuIgorCisjOiBhZGQtcGF0Y2guYzoxMDE2Cittc2dpZCAiIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiaiDigJQg0LHQtdC3INGA0LXRiNC10L3QuNC1INC30LAg0L/QsNGA0YfQtdGC0L4sINC60YrQvCDRgdC70LXQtNCy0LDRidC+0YLQviDQv9Cw0YDRh9C1INCx0LXQtyDRgNC10YjQtdC90LjQtVxuIgorIkog4oCUINCx0LXQtyDRgNC10YjQtdC90LjQtSDQt9CwINC/0LDRgNGH0LXRgtC+LCDQutGK0Lwg0YHQu9C10LTQstCw0YnQvtGC0L4g0L/QsNGA0YfQtVxuIgorImsg4oCUINCx0LXQtyDRgNC10YjQtdC90LjQtSDQt9CwINC/0LDRgNGH0LXRgtC+LCDQutGK0Lwg0L/RgNC10LTQuNGI0L3QvtGC0L4g0L/QsNGA0YfQtSDQsdC10Lcg0YDQtdGI0LXQvdC40LVcbiIKKyJLIOKAlCDQsdC10Lcg0YDQtdGI0LXQvdC40LUg0LfQsCDQv9Cw0YDRh9C10YLQviwg0LrRitC8INC/0YDQtdC00LjRiNC90L7RgtC+INC/0LDRgNGH0LVcbiIKKyJnIOKAlCDQuNC30LHQvtGAINC60YrQvCDQutC+0LUg0L/QsNGA0YfQtSDQtNCwINGB0LUg0L/RgNC10LzQuNC90LVcbiIKKyIvIOKAlCDRgtGK0YDRgdC10L3QtSDQvdCwINC/0LDRgNGH0LUsINC90LDQv9Cw0YHQstCw0YnQviDQutGK0Lwg0LTQsNC00LXQvSDRgNC10LPRg9C70Y/RgNC10L0g0LjQt9GA0LDQt1xuIgorInMg4oCUINGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINGC0LXQutGD0YnQvtGC0L4g0L/QsNGA0YfQtSDQvdCwINC/0L4t0LzQsNC70LrQuFxuIgorImUg4oCUINGA0YrRh9C90L4g0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGC0LXQutGD0YnQvtGC0L4g0L/QsNGA0YfQtVxuIgorIj8g4oCUINC40LfQstC10LbQtNCw0L3QtSDQvdC1INC/0L7QvNC+0YnRgtCwXG4iCisKKyM6IGFkZC1wYXRjaC5jOjExMzcgYWRkLXBhdGNoLmM6MTE0NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgItCd0Y/QvNCwINC00YDRg9Cz0L4g0L/QsNGA0YfQtSDQv9GA0LXQtNC4INGC0L7QstCwIgorCisjOiBhZGQtcGF0Y2guYzoxMTQyIGFkZC1wYXRjaC5jOjExNTIKK21zZ2lkICJObyBuZXh0IGh1bmsiCittc2dzdHIgItCd0Y/QvNCwINC00YDRg9Cz0L4g0L/QsNGA0YfQtSDRgdC70LXQtCDRgtC+0LLQsCIKKworIzogYWRkLXBhdGNoLmM6MTE1OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgItCd0Y/QvNCwINC00YDRg9Cz0Lgg0L/QsNGA0YfQtdGC0LAiCisKKyM6IGFkZC1wYXRjaC5jOjExNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc3Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgItC60YrQvCDQutC+0LUg0L/QsNGA0YfQtSDQtNCwINGB0LUg0L/RgNC40LTQstC40LbQuCAo0LfQsCDQv9C+0LLQtdGH0LUg0LLQsNGA0LjQsNC90YLQuCDQvdCw0YLQuNGB0L3QtdGC0LUg4oCeZW50ZXLigJwpPyAiCisKKyM6IGFkZC1wYXRjaC5jOjExNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICLQutGK0Lwg0LrQvtC1INC/0LDRgNGH0LUg0LTQsCDRgdC1INC/0YDQuNC00LLQuNC20Lg/ICIKKworIzogYWRkLXBhdGNoLmM6MTE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0L3QvtC80LXRgDog4oCeJXPigJwiCisKKyM6IGFkZC1wYXRjaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuIgorbXNnc3RyWzBdICLQmNC80LAg0YHQsNC80L4gJWQg0L/QsNGA0YfQtS4iCittc2dzdHJbMV0gItCY0LzQsCDRgdCw0LzQviAlZCDQv9Cw0YDRh9C10YLQsC4iCisKKyM6IGFkZC1wYXRjaC5jOjExOTUKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2giCittc2dzdHIgItCd0Y/QvNCwINC00YDRg9Cz0Lgg0L/QsNGA0YfQtdGC0LAg0LfQsCDRgtGK0YDRgdC10L3QtSIKKworIzogYWRkLXBhdGNoLmM6MTIwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MjMKK21zZ2lkICJzZWFyY2ggZm9yIHJlZ2V4PyAiCittc2dzdHIgItC00LAg0YHQtSDRgtGK0YDRgdC4INGBINGA0LXQs9GD0LvRj9GA0LXQvSDQuNC30YDQsNC3PyAiCisKKyM6IGFkZC1wYXRjaC5jOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIgorbXNnc3RyICLQodCz0YDQtdGI0LXQvSDRgNC10LPRg9C70Y/RgNC10L0g0LjQt9GA0LDQtyDigJ4lc+KAnDogJXMiCisKKyM6IGFkZC1wYXRjaC5jOjEyMzMKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iCittc2dzdHIgItCd0LjQutC+0LUg0L/QsNGA0YfQtSDQvdC1INC90LDQv9Cw0YHQstCwINC90LAg0YDQtdCz0YPQu9GP0YDQvdC40Y8g0LjQt9GA0LDQtyIKKworIzogYWRkLXBhdGNoLmM6MTI0MAorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rIgorbXNnc3RyICLQotC+0LLQsCDQv9Cw0YDRh9C1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNCw0LfQtNC10LvQtdC90L4iCisKKyM6IGFkZC1wYXRjaC5jOjEyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgItCg0LDQt9C00LXQu9GP0L3QtSDQvdCwICVkINC/0LDRgNGH0LXRgtCwLiIKKworIzogYWRkLXBhdGNoLmM6MTI0OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgItCi0L7QstCwINC/0LDRgNGH0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGA0LXQtNCw0LrRgtC40YDQsNC90L4iCisKKyM6IGFkdmljZS5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIlc9C/0L7QtNGB0LrQsNC30LrQsDogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2NAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J7RgtCx0LjRgNCw0L3QtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8g0LUg0LHQu9C+0LrQuNGA0LDQvdC+INC+0YIg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUuIgorCisjOiBhZHZpY2UuYzoxNjYKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g0LUg0LHQu9C+0LrQuNGA0LDQvdC+INC+0YIg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUuIgorCisjOiBhZHZpY2UuYzoxNjgKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LXRgtC+INC1INCx0LvQvtC60LjRgNCw0L3QviDQvtGCINC90LXRgdC70LXRgtC4INGE0LDQudC70L7QstC1LiIKKworIzogYWR2aWNlLmM6MTcwCittc2dpZCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgItCY0LfQtNGK0YDQv9Cy0LDQvdC10YLQviDQtSDQsdC70L7QutC40YDQsNC90L4g0L7RgiDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGFkdmljZS5jOjE3MgorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgItCe0YLQvNGP0L3QsNGC0LAg0LUg0LHQu9C+0LrQuNGA0LDQvdCwINC+0YIg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUuIgorCisjOiBhZHZpY2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvICVzIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLQlNC10LnRgdGC0LLQuNC10YLQviDigJ4lc+KAnCDQtSDQsdC70L7QutC40YDQsNC90L4g0L7RgiDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGFkdmljZS5jOjE4MgorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgIiIKKyLQoNC10LTQsNC60YLQuNGA0LDQudGC0LUg0LPQuCDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviwg0Lgg0YLQvtCz0LDQstCwINC/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRkL3JtINCk0JDQmdCb4oCcLFxuIgorItC30LAg0LTQsCDQvtGC0LHQtdC70LXQttC40YLQtSDQutC+0YDQuNCz0LjRgNCw0L3QtdGC0L4g0LjQvC4gINCh0LvQtdC0INGC0L7QstCwINC40LfQstGK0YDRiNC10YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQvi4iCisKKyM6IGFkdmljZS5jOjE5MAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAi0JjQt9GF0L7QtCDQvtGCINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LDRgNCw0LTQuCDQvdC10LrQvtGA0LjQs9C40YDQsNC9INC60L7QvdGE0LvQuNC60YIuIgorCisjOiBhZHZpY2UuYzoxOTUgYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgItCd0LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDRgdC70LjQstCw0L3QtS4gICjQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5NRVJHRV9IRUFE4oCcINGB0YrRidC10YHRgtCy0YPQstCwKS4iCisKKyM6IGFkdmljZS5jOjE5NworbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgItCf0YDQvtC80LXQvdC40YLQtSDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INC/0L7QtNCw0LTQsNGCINC/0YDQtdC00Lgg0YHQu9C40LLQsNC90LUuIgorCisjOiBhZHZpY2UuYzoxOTgKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgItCY0LfRhdC+0LQg0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9Cw0YDQsNC00Lgg0L3QtdC30LDQstGK0YDRiNC10L3QviDRgdC70LjQstCw0L3QtS4iCisKKyM6IGFkdmljZS5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCiAiXG4iCi0iVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHByb2JhYmx5XG4iCi0iZ29pbmcgdG8gYmUgaWdub3JlZCBieSBhbnkgR2l0IHN1YnByb2Nlc3MgcnVuXG4iCi0iYnkgJXM6XG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgogIlxuIgogbXNnc3RyICIiCi0i0JLRitC30LzQvtC20L3QviDQtSDQtNCwINC40LzQsCDQv9GA0L7QsdC70LXQvCDRgdGK0YEg0YHRgNC10LTQsNGC0LAuXG4iCisi0JHQtdC70LXQttC60LA6INC/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/0YrQu9C10L0g0LjQvdC00LXQutGBIgorCisjOiBhcHBseS5jOjMxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICLQutGA0YrQv9C60LDRgtCwINGB0YrQvtGC0LLQtdGC0YHRgtCy0LAg0L3QsCDigJ4lc+KAnCAoJXMpLCDQutC+0LnRgtC+INC90LUg0YHRitCy0L/QsNC00LAg0L/QviDRgdGK0LTRitGA0LbQsNC90LjQtS4iCisKKyM6IGFwcGx5LmM6MzE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgItC60YDRitC/0LrQsNGC0LAg0YHRitC+0YLQstC10YLRgdGC0LLQsCDQvdCwIOKAniVz4oCcLCDQutC+0LnRgtC+INGC0YDRj9Cx0LLQsCDQtNCwINC1INC/0YDQsNC30LXQvSwg0L3QviDQvdC1INC1IgorCisjOiBhcHBseS5jOjMxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5lY2Vzc2FyeSBwb3N0aW1hZ2UgJXMgZm9yICclcycgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIiIKKyLQvdC10L7QsdGF0L7QtNC40LzQuNGP0YIg0YDQtdC30YPQu9GC0LDRgiDRgdC70LXQtCDQvtC/0LXRgNCw0YbQuNGP0YLQsCAg4oCUIOKAniVz4oCcINC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1ICIKKyLQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBhcHBseS5jOjMyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgItC00LLQvtC40YfQvdCw0YLQsCDQutGA0YrQv9C60LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70L7QttC10L3QsCDQstGK0YDRhdGDIOKAniVz4oCcIgorCisjOiBhcHBseS5jOjMyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyLQtNCy0L7QuNGH0L3QsNGC0LAg0LrRgNGK0L/QutCwINC30LAg4oCeJXPigJwg0LLQvtC00Lgg0LTQviDQvdC10L/RgNCw0LLQuNC70L3QuCDRgNC10LfRg9C70YLQsNGC0LggKNC+0YfQsNC60LLQsNGI0LUg0YHQtTog4oCeJXPigJwsINCwICIKKyLQsdC1INC/0L7Qu9GD0YfQtdC90L46IOKAniVz4oCcKSIKKworIzogYXBwbHkuYzozMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCwOiDigJ4lczolbGTigJwiCisKKyM6IGFwcGx5LmM6MzM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfRgtC10LPQu9C4IgorCisjOiBhcHBseS5jOjM0MDMgYXBwbHkuYzozNDE0IGFwcGx5LmM6MzQ2MCBtaWR4LmM6NjEgc2V0dXAuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYXBwbHkuYzozNDExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDigJ4lc+KAnCDRgdC70LXQtCDQv9GA0L7RgdC70LXQtNGP0LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdCwINCy0YDRitC30LrQsCIKKworIzogYXBwbHkuYzozNDQwIGFwcGx5LmM6MzY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg0YEg0L/RitGCIOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0LjQu9C4INC40LfRgtGA0LjRgiIKKworIzogYXBwbHkuYzozNTI2IGFwcGx5LmM6MzY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIuKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGFwcGx5LmM6MzUzNSBhcHBseS5jOjM3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INGB0YrQvtGC0LLQtdGC0YHRgtCy0LAg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogYXBwbHkuYzozNTcwCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorItCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4g0LvQuNC/0YHQstCw0YIg0L3QtdC+0LHRhdC+0LTQuNC80LjRgtC1INC+0LHQtdC60YLQuC1CTE9CLCDQt9CwINC00LAg0YHQtSDQv9GA0LXQvNC40L3QtSDQutGK0Lwg0YLRgNC+0LnQvdC+ICIKKyLRgdC70LjQstCw0L3QtS4iCisKKyM6IGFwcGx5LmM6MzU3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgItCf0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QteKAplxuIgorCisjOiBhcHBseS5jOjM1ODkgYXBwbHkuYzozNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgItGC0LXQutGD0YnQvtGC0L4g0YHRitC00YrRgNC20LDQvdC40LUg0L3QsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+IgorCisjOiBhcHBseS5jOjM2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QteKAplxuIgorCisjOiBhcHBseS5jOjM2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICLQmtC+0L3RhNC70LjQutGC0Lgg0L/RgNC4INC/0YDQuNC70LDQs9Cw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LDRgtCwINC60YrQvCDigJ4lc+KAnC5cbiIKKworIzogYXBwbHkuYzozNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLQmtGA0YrQv9C60LDRgtCwINCx0LUg0L/RgNC40LvQvtC20LXQvdCwINGH0LjRgdGC0L4g0LrRitC8IOKAniVz4oCcLlxuIgorCisjOiBhcHBseS5jOjM2NTAKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNGJ0LDRgtCwINC60YDRitC/0LrQsCDQvtGB0YLQsNCy0Y8g0YTQsNC50LvQsCDQvdC10L/RgNCw0LfQtdC9IgorCisjOiBhcHBseS5jOjM3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIuKAniVz4oCcOiDQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQiCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIuKAniVz4oCcINC1INC+0YIg0LLQuNC0IOKAniVv4oCcLCDQsCDRgdC1INC+0YfQsNC60LLQsNGI0LUg4oCeJW/igJwiCisKKyM6IGFwcGx5LmM6Mzg3NiBhcHBseS5jOjM4NzggcmVhZC1jYWNoZS5jOjgzMCByZWFkLWNhY2hlLmM6ODU2CisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/RitGCOiDigJ4lc+KAnCIKKworIzogYXBwbHkuYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJw6INCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINCyINC40L3QtNC10LrRgdCwIgorCisjOiBhcHBseS5jOjM5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLigJ4lc+KAnDog0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGFwcGx5LmM6Mzk1NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgItC90L7QstC40YLQtSDQv9GA0LDQstCwINC30LAg0LTQvtGB0YLRitC/ICglbykg0L3QsCDigJ4lc+KAnCDQvdC1INGB0YrQstC/0LDQtNCw0YIg0YHRitGBINGB0YLQsNGA0LjRgtC1ICglbykiCisKKyM6IGFwcGx5LmM6Mzk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIiIKKyLQvdC+0LLQuNGC0LUg0L/RgNCw0LLQsCDQt9CwINC00L7RgdGC0YrQvyAoJW8pINC90LAg4oCeJXPigJwg0L3QtSDRgdGK0LLQv9Cw0LTQsNGCINGB0YrRgSDRgdGC0LDRgNC40YLQtSAoJW8pINC90LAg4oCeJXPigJwiCisKKyM6IGFwcGx5LmM6Mzk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi0LfQsNGB0LXQs9C90LDRgtC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQtSDRgdC70LXQtCDRgdC40LzQstC+0LvQvdCwINCy0YDRitC30LrQsCIKKworIzogYXBwbHkuYzozOTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAi0JrRgNGK0L/QutCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQvtC20LXQvdCwIgorCisjOiBhcHBseS5jOjQwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgItCf0YDQvtCy0LXRgNGP0LLQsNC90LUg0L3QsCDQutGA0YrQv9C60LDRgtCwIOKAniVz4oCc4oCmIgorCisjOiBhcHBseS5jOjQwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINGB0YPQvNCw0YLQsCDQv9C+IFNIQTEg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAg0LvQuNC/0YHQstCwINC40LvQuCDQvdC1INC1INC00L7RgdGC0LDRgtGK0YfQvdCwICglcykuIgorCisjOiBhcHBseS5jOjQxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICLRgdC80Y/QvdCwINC90LAg0YDQtdC20LjQvNCwINC90LAg0LTQvtGB0YLRitC/0LAg0L3QsCDigJ4lc+KAnCwg0LrQvtC50YLQviDQvdC1INC1INCyINGC0LXQutGD0YnQuNGPINCy0YDRitGFIOKAnkhFQUTigJwiCisKKyM6IGFwcGx5LmM6NDEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0YHRg9C80LDRgtCwINC/0L4gU0hBMSDQu9C40L/RgdCy0LAg0LjQu9C4INC90LUg0LUg0LTQvtGB0YLQsNGC0YrRh9C90LAgKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INC60YrQvCDQstGA0LXQvNC10L3QvdC40Y8g0LjQvdC00LXQutGBIgorCisjOiBhcHBseS5jOjQxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9Cw0LfQuCDQsiDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cy0LDQtNC4INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGFwcGx5LmM6NDI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgItC/0L7QstGA0LXQtNC10L3QsCDQutGA0YrQv9C60LAg0LfQsCDQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IGFwcGx5LmM6NDMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0L3QvtCy0L7RgdGK0LfQtNCw0LTQtdC90LjRjyDRhNCw0LnQuyDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsCDRgdGK0LfQtNCw0LTQtSDQvNGP0YHRgtC+0YLQviDQt9CwINGB0YrRhdGA0LDQvdC10L3QuNC1INC90LAg0L3QvtCy0L7RgdGK0LfQtNCw0LTQtdC90LjRjyDRhNCw0LnQuyDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0MzE0IGFwcGx5LmM6NDQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INC30LDQv9C40YEg0LIg0LrQtdGI0LAg0LfQsCDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLQsiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C40YjQtSIKKworIzogYXBwbHkuYzo0MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICLQt9Cw0YLQstCw0YDRj9C90LUg0L3QsCDRhNCw0LnQu9CwIOKAniVz4oCcIgorCisjOiBhcHBseS5jOjQ0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LjRiNC1INGBINGA0LXQttC40Lwg0L3QsCDQtNC+0YHRgtGK0L8g4oCeJW/igJwiCisKKyM6IGFwcGx5LmM6NDUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICLQmtGA0YrQv9C60LDRgtCwIOKAniVz4oCcINCx0LUg0L/RgNC40LvQvtC20LXQvdCwINGH0LjRgdGC0L4uIgorCisjOiBhcHBseS5jOjQ1MzcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAi0LLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAiCisKKyM6IGFwcGx5LmM6NDU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg4oCeJSVz4oCcINGBICVkINC+0YLRhdCy0YrRgNC70LXQvdC+INC/0LDRgNGH0LXigKYiCittc2dzdHJbMV0gItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg4oCeJSVz4oCcINGBICVkINC+0YLRhdCy0YrRgNC70LXQvdC4INC/0LDRgNGH0LXRgtCw4oCmIgorCisjOiBhcHBseS5jOjQ1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICLRgdGK0LrRgNCw0YnQsNCy0LDQvdC1INC90LAg0LjQvNC10YLQviDQvdCwINGE0LDQudC70LAg0YEg0L7RgtGF0LLRitGA0LvQtdC90LjRgtC1INC/0LDRgNGH0LXRgtCwINC90LAg4oCeICUuKnMucmVq4oCcIgorCisjOiBhcHBseS5jOjQ1NTkgYnVpbHRpbi9mZXRjaC5jOjkwMSBidWlsdGluL2ZldGNoLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBhcHBseS5jOjQ1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiJWQt0YLQviDQv9Cw0YDRh9C1INCx0LUg0YPRgdC/0LXRiNC90L4g0L/RgNC40LvQvtC20LXQvdC+LiIKKworIzogYXBwbHkuYzo0NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiJWQt0YLQviDQv9Cw0YDRh9C1INCx0LUg0L7RgtGF0LLRitGA0LvQtdC90L4uIgorCisjOiBhcHBseS5jOjQ2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0L3QsNGC0LAg0LrRgNGK0L/QutCwOiDigJ4lc+KAnCIKKworIzogYXBwbHkuYzo0NzA0Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCy0YXQvtC0IgorCisjOiBhcHBseS5jOjQ3MjQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogYXBwbHkuYzo0ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgItC60YDRitC/0LrQsNGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC90LA6ICVzIgorCisjOiBhcHBseS5jOjQ5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAi0L/RgNC10L3QtdCx0YDQtdCz0L3QsNGC0LAg0LUgJWQg0LPRgNC10YjQutCwINCyINC30L3QsNGG0LjRgtC1INC30LAg0LjQvdGC0LXRgNCy0LDQu9C4IgorbXNnc3RyWzFdICLQv9GA0LXQvdC10LHRgNC10LPQvdCw0YLQuCDRgdCwICVkINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCIKKworIzogYXBwbHkuYzo0OTE0IGFwcGx5LmM6NDkyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCDRgNC10LQg0LTQvtCx0LDQstGPINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuC4iCittc2dzdHJbMV0gIiVkINGA0LXQtNCwINC00L7QsdCw0LLRj9GCINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuC4iCisKKyM6IGFwcGx5LmM6NDkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIiCisi0JTQvtCx0LDQstC10L0g0LUgJWQg0YDQtdC0INGB0LvQtdC0INC60L7RgNC10LrRhtC40Y/RgtCwINC90LAg0LPRgNC10YjQutC40YLQtSDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuC4iCittc2dzdHJbMV0gIiIKKyLQlNC+0LHQsNCy0LXQvdC4INGB0LAgJWQg0YDQtdC00LAg0YHQu9C10LQg0LrQvtGA0LXQutGG0LjRj9GC0LAg0L3QsCDQs9GA0LXRiNC60LjRgtC1INCyINC30L3QsNGG0LjRgtC1INC30LAg0LjQvdGC0LXRgNCy0LDQu9C4LiIKKworIzogYXBwbHkuYzo0OTM4IGJ1aWx0aW4vYWRkLmM6NTc5IGJ1aWx0aW4vbXYuYzozMDEgYnVpbHRpbi9ybS5jOjM5MAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0J3QvtCy0LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGFwcGx5LmM6NDk2NgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgItCx0LXQtyDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L3QsNC/0LDRgdCy0LDRidC4INC90LAg0LTQsNC00LXQvdC40Y8g0L/RitGCIgorCisjOiBhcHBseS5jOjQ5NjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L3QsNC/0LDRgdCy0LDRidC4INC90LAg0LTQsNC00LXQvdC40Y8g0L/RitGCIgorCisjOiBhcHBseS5jOjQ5NzEgYnVpbHRpbi9hbS5jOjIyMDYKK21zZ2lkICJudW0iCittc2dzdHIgItCR0KDQntCZIgorCisjOiBhcHBseS5jOjQ5NzIKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAi0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgtC+0LfQuCDQkdCg0J7QmSDQstC+0LTQtdGJ0Lgg0LXQu9C10LzQtdC90YLQuCDQvtGCINC/0YrRgtC40YnQsNGC0LAg0LIg0YDQsNC30LvQuNC60LDRgtCwIgorCisjOiBhcHBseS5jOjQ5NzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINGA0LXQtNC+0LLQtdGC0LUg0LTQvtCx0LDQstC10L3QuCDQvtGCINGC0LDQt9C4INC60YDRitC/0LrQsCIKKworIzogYXBwbHkuYzo0OTc3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCIKKworIzogYXBwbHkuYzo0OTgxCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LHRgNC+0Y8g0L3QsCDQtNC+0LHQsNCy0LXQvdC40YLQtSDQuCDQuNC30YLRgNC40YLQuNGC0LUg0YDQtdC00L7QstC1IgorCisjOiBhcHBseS5jOjQ5ODMKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDQvdCwINCy0YXQvtC00L3QuNGC0LUg0LTQsNC90L3QuCDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCwg0LHQtdC3INC00LXQudGB0YLQstC40YLQtdC70L3QviDQv9GA0LjQu9Cw0LPQsNC90LUiCisKKyM6IGFwcGx5LmM6NDk4NworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQvtC20LXQvdCwINC60YrQvCDRgtC10LrRg9GJ0LjRjyDQuNC90LTQtdC60YEiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1hcmsgbmV3IGZpbGVzIHdpdGggYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCIKK21zZ3N0ciAi0L7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINC90L7QstC40YLQtSDRhNCw0LnQu9C+0LLQtSDRgSDigJ5naXQgYWRkIC0taW50ZW50LXRvLWFkZOKAnCIKKworIzogYXBwbHkuYzo0OTkxCittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg0LHQtdC3INC/0YDQvtC80Y/QvdCwINC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgItC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsCwg0LrQvtGP0YLQviDQv9GA0L7QvNC10L3RjyDQuCDRhNCw0LnQu9C+0LLQtSDQuNC30LLRitC9INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBhcHBseS5jOjQ5OTYKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiIgorItC60YDRitC/0LrQsNGC0LAg0LTQsCDQsdGK0LTQtSDQv9GA0LjQu9C+0LbQtdC90LAuICDQntC/0YbQuNGP0YLQsCDRgdC1INC60L7QvNCx0LjQvdC40YDQsCDRgSDigJ4tLWNoZWNr4oCcL+KAni0tc3RhdOKAnC/igJ4tLSIKKyJzdW1tYXJ54oCcIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICLQv9GA0L7QsdCy0LDQvdC1INGBINGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QtSwg0LDQutC+INC60YDRitC/0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20Lgg0LTQuNGA0LXQutGC0L3QviIKKworIzogYXBwbHkuYzo1MDAwCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQstGA0LXQvNC10L3QtdC9INC40L3QtNC10LrRgSDQvdCwINCx0LDQt9CwINC90LAg0LLQutC70Y7Rh9C10L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQuNC90LTQtdC60YHQsCIKKworIzogYXBwbHkuYzo1MDAzIGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzMgYnVpbHRpbi9scy1maWxlcy5jOjUyNAorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLRgNCw0LfQtNC10LvRj9C90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwINGBINC90YPQu9C10LLQuNGPINC30L3QsNC6IOKAnk5VTOKAnCIKKworIzogYXBwbHkuYzo1MDA1Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLQtNCwINGB0LUg0L7RgdC40LPRg9GA0Lgg0LrQvtC90YLQtdC60YHRgiDQvtGCINC/0L7QvdC1INGC0LDQutGK0LIg0JHQoNCe0Jkg0YHRitCy0L/QsNC00LDRidC4INGA0LXQtNC+0LLQtSIKKworIzogYXBwbHkuYzo1MDA2IGJ1aWx0aW4vYW0uYzoyMTg1IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTAgYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1IgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAi0LfQsNGB0LjRh9Cw0L3QtSDQvdCwINC90L7QstC4INC40LvQuCDQv9GA0L7QvNC10L3QtdC90Lgg0YDQtdC00L7QstC1INGBINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCIKKworIzogYXBwbHkuYzo1MDEwIGFwcGx5LmM6NTAxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgIiIKKyLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCDQv9GA0Lgg0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBhcHBseS5jOjUwMTYKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAi0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCDQsiDQvtCx0YDQsNGC0L3QsCDQv9C+0YHQvtC60LAiCisKKyM6IGFwcGx5LmM6NTAxOAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICLQsdC10Lcg0LjQt9C40YHQutCy0LDQvdC1INC90LAg0LTQvtGA0Lgg0Lgg0LXQtNC40L0g0YDQtdC0INC60L7QvdGC0LXQutGB0YIiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLQvtGB0YLQsNCy0Y/QvdC1INC90LAg0L7RgtGF0LLRitGA0LvQtdC90LjRgtC1INC/0LDRgNGH0LXRgtCwINCy0YrQsiDRhNCw0LnQu9C+0LLQtSDRgSDRgNCw0LfRiNC40YDQtdC90LjQtSDigJ4ucmVq4oCcIgorCisjOiBhcHBseS5jOjUwMjIKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC30LDRgdGC0YrQv9Cy0LDRidC4INGB0LUg0L/QsNGA0YfQtdGC0LAiCisKKyM6IGFwcGx5LmM6NTAyMyBidWlsdGluL2FkZC5jOjMwOSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTUgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTggYnVpbHRpbi9mc2NrLmM6Nzc0CisjOiBidWlsdGluL2xvZy5jOjIxNjYgYnVpbHRpbi9tdi5jOjEyMyBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgItC/0L7QstC10YfQtSDQv9C+0LTRgNC+0LHQvdC+0YHRgtC4IgorCisjOiBhcHBseS5jOjUwMjUKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUg0L3QsCDQvdC10L/RgNCw0LLQuNC70L3QviDQu9C40L/RgdCy0LDRiSDQt9C90LDQuiDQt9CwINC90L7QsiDRgNC10LQg0LIg0LrRgNCw0Y8g0L3QsCDRhNCw0LnQuyIKKworIzogYXBwbHkuYzo1MDI4Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICLQsdC10Lcg0LTQvtCy0LXRgNGP0LLQsNC90LUg0L3QsCDQvdC+0LzQtdGA0LDRgtCwINC90LAg0YDQtdC00L7QstC10YLQtSDQsiDQt9Cw0LPQu9Cw0LLQvdC40YLQtSDRh9Cw0YHRgtC4INC90LAg0L/QsNGA0YfQtdGC0LDRgtCwIgorCisjOiBhcHBseS5jOjUwMzAgYnVpbHRpbi9hbS5jOjIxOTQKK21zZ2lkICJyb290IgorbXNnc3RyICLQndCQ0KfQkNCb0J3QkF/QlNCY0KDQldCa0KLQntCg0JjQryIKKworIzogYXBwbHkuYzo1MDMxCittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0LDQt9C4INCd0JDQp9CQ0JvQndCQX9CU0JjQoNCV0JrQotCe0KDQmNCvINC60YrQvCDQuNC80LXQvdCw0YLQsCDQvdCwINCy0YHQuNGH0LrQuCDRhNCw0LnQu9C+0LLQtSIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J4gW9Cf0KrQouKApl0iCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MTYKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSDQpdCg0JDQndCY0JvQmNCp0JUgWy0tZXhlYyDQmtCe0JzQkNCd0JTQkF0gW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J4gIgorIlvQn9Cq0KLigKZdIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSDQpdCg0JDQndCY0JvQmNCp0JUgWy0tZXhlYyDQmtCe0JzQkNCd0JTQkF0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTgwIGJ1aWx0aW4vYWRkLmM6NTU1IGJ1aWx0aW4vcm0uYzoyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQvdC1INGB0YrQstC/0LDQtNCwINGBINC90LjQutC+0Lkg0YTQsNC50LsiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgItGC0LDQutGK0LIg0YPQutCw0LfQsNGC0LXQuyDQvdGP0LzQsDogJS4qcyIKKworIzogYXJjaGl2ZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YI6IOKAniVz4oCcIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAi0L3QtSDQtSDQvtCx0LXQutGCLdC00YrRgNCy0L46ICVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgItGC0LXQutGD0YnQsNGC0LAg0YDQsNCx0L7RgtC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QtSDQtSDRgdC70LXQtNC10L3QsCIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAi0KTQntCg0JzQkNCiIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgItCk0J7QoNCc0JDQoiDQvdCwINCw0YDRhdC40LLQsCIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgItCf0KDQldCk0JjQmtChIgorCisjOiBhcmNoaXZlLmM6NDU5Cittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7Qt9C4INCf0KDQldCk0JjQmtChINC60YrQvCDQstGB0LXQutC4INC/0YrRgiDQsiDQsNGA0YXQuNCy0LAiCisKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMjkgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg5OQorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCittc2dzdHIgItCk0JDQmdCbIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQsNGA0YXQuNCy0LAg0LIg0YLQvtC30Lgg0KTQkNCZ0JsiCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg4oCeLmdpdGF0dHJpYnV0ZXPigJwg0LIg0YDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LDRgNGF0LjQstC40YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LDRgtCwINCz0YDQtdGI0LrQsCIKKworIzogYXJjaGl2ZS5jOjQ2NQorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgItGB0YrRhdGA0LDQvdC10L3QuNC1INCx0LXQtyDQutC+0LzQv9GA0LXRgdC40YDQsNC90LUiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgItCx0YrRgNC30L4g0LrQvtC80L/RgNC10YHQuNGA0LDQvdC1IgorCisjOiBhcmNoaXZlLmM6NDc0Cittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICLQtNC+0LHRgNC+INC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtSIKKworIzogYXJjaGl2ZS5jOjQ3NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LTRitGA0LbQsNC90LjRgtC1INGE0L7RgNC80LDRgtC4IgorCisjOiBhcmNoaXZlLmM6NDc5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9jbG9uZS5jOjExNgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODQKK21zZ2lkICJyZXBvIgorbXNnc3RyICLRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAi0LjQt9GC0LXQs9C70Y/QvdC1INC90LAg0LDRgNGF0LjQstCwINC+0YIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INCl0KDQkNCd0JjQm9CY0KnQlSIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LAiCisKKyM6IGFyY2hpdmUuYzo0ODIgYnVpbHRpbi9hcmNoaXZlLmM6OTQKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgItC/0YrRgiDQutGK0Lwg0L7RgtC00LDQu9C10YfQtdC90LDRgtCwINC60L7QvNCw0L3QtNCwIOKAnmdpdC11cGxvYWQtYXJjaGl2ZeKAnCIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L3QsCDQvtC/0YbQuNGPIOKAni0tcmVtb3Rl4oCcIgorCisjOiBhcmNoaXZlLmM6NDkxCittc2dpZCAiT3B0aW9uIC0tZXhlYyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1yZW1vdGUiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni0tZXhlY+KAnCDQuNC30LjRgdC60LLQsCDigJ4tLXJlbW90ZeKAnCIKKworIzogYXJjaGl2ZS5jOjQ5MworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0IgorbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L3QsCDQvtC/0YbQuNGPIOKAni0tb3V0cHV04oCcIgorCisjOiBhcmNoaXZlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgiDRhNC+0YDQvNCw0YIg0L3QsCDQsNGA0YXQuNCyOiDigJ4lc+KAnCIKKworIzogYXJjaGl2ZS5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICLQkNGA0LPRg9C80LXQvdGC0YrRgiDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQt9CwINGE0L7RgNC80LDMgNGC0LAg4oCeJXPigJw6IC0lZCIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgi1CTE9CIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0YDQsNCx0L7RgtC10L0iCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgItC90LXQv9C+0LTQtNGK0YDQttCw0L3QuCDQv9GA0LDQstCwINC30LAg0LTQvtGB0YLRitC/INC00L4g0YTQsNC50Ls6IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAi0YTQuNC70YLRitGA0YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRgtCw0YDRgtC40YDQsNC9IgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICLQtNC10YHQutGA0LjQv9GC0L7RgNGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdC90LDRgdC+0YfQtdC9IgorCisjOiBhcmNoaXZlLXRhci5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAi0YTQuNC70YLRitGA0YrRgiDigJ4lc+KAnCDQstGK0YDQvdCwINCz0YDQtdGI0LrQsCIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICLQv9GK0YLRj9GCINC90LUg0LUg0L/RgNCw0LLQuNC70L3QviDQutC+0LTQuNGA0LDQvSDQsiBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICLRgtCy0YrRgNC00LUg0LTRitC70YrQsyDQv9GK0YIgKCVkINC30L3QsNC60LAsIFNIQTE6ICVzKTogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6NDc5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQtNC10LrQvtC80L/RgNC10YHQuNGA0LDQvdC1INGBIOKAnmRlZmxhdGXigJwgKCVkKSIKKworIzogYXJjaGl2ZS16aXAuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICU8UFJJdU1BWD4iCittc2dzdHIgItCy0YDQtdC80LXQstCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC1INGC0LLRitGA0LTQtSDQs9C+0LvRj9C80LAg0LfQsCDRgtCw0LfQuCDRgdC40YHRgtC10LzQsDogJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICLigJ4lLipz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQt9CwINCw0YLRgNC40LHRg9GCIgorCisjOiBhdHRyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG5vdCBhbGxvd2VkOiAlczolZCIKK21zZ3N0ciAiJXM6INC60L7QvNCw0L3QtNCw0YLQsCDQvdC1INC1INC/0L7Qt9Cy0L7Qu9C10L3QsDog4oCeJXM6JWTigJwiCisKKyM6IGF0dHIuYzo0MDkKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyLQntGC0YDQuNGG0LDRgtC10LvQvdC40YLQtSDRiNCw0LHQu9C+0L3QuCDRgdC1INC40LPQvdC+0YDQuNGA0LDRgiDQsiDQsNGC0YDQuNCx0YPRgtC40YLQtSDQvdCwIGdpdC5cbiIKKyLQkNC60L4g0LLQuCDRgtGA0Y/QsdCy0LAg0L3QsNGH0LDQu9C90LAg0YPQtNC40LLQuNGC0LXQu9C90LAsINC/0L7Qu9C30LLQsNC50YLQtSDigJ5cXCHigJwuIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0YbQuNGC0LjRgNCw0L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnDogJXMiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgItCf0L7QstC10YfQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgtGK0YDRgdC4INC00LLQvtC40YfQvdC+IVxuIgorCisjOiBiaXNlY3QuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwiCisKKyM6IGJpc2VjdC5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisi0J3QtdC/0YDQsNCy0LjQu9C90LAg0LHQsNC30LAg0LfQsCDRgdC70LjQstCw0L3QtTogJXMuXG4iCisi0KHQu9C10LTQvtCy0LDRgtC10LvQvdC+INCz0YDQtdGI0LrQsNGC0LAg0LUg0LrQvtGA0LjQs9C40YDQsNC90LAg0LzQtdC20LTRgyDigJ4lc+KAnCDQuCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorItCd0L7QstCwINCx0LDQt9CwINC30LAg0YHQu9C40LLQsNC90LU6ICVzLlxuIgorItCh0LLQvtC50YHRgtCy0L7RgtC+INC1INC/0YDQvtC80LXQvdC10L3QviDQvNC10LbQtNGDIOKAniVz4oCcINC4IFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorItCR0LDQt9Cw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1IOKAniVz4oCcINC1ICVzLlxuIgorItCh0LvQtdC00L7QstCw0YLQtdC70L3QviDQv9GK0YDQstC+0YLQviAlcyDQv9C+0LTQsNCy0LDQvdC1INC1INC80LXQttC00YMg4oCeJXPigJwg0LggWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorItCd0Y/QutC+0Lgg0L7RgiDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC+0YIg4oCeJXPigJwg0L3QtSDRgdCwINC/0YDQtdC00YjQtdGB0YLQstC10L3QuNGG0Lgg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeJXPigJwuXG4iCisi0JTQstC+0LjRh9C90L7RgtC+INGC0YrRgNGB0LXQvdC1INGBIGdpdCBiaXNlY3Qg0L3Rj9C80LAg0LTQsCDRgNCw0LHQvtGC0Lgg0L/RgNCw0LLQuNC70L3Qvi5cbiIKKyLQlNCw0LvQuCDQvdC1INGB0YLQtSDQvtCx0YrRgNC60LDQu9C4INGD0LrQsNC30LDRgtC10LvQuNGC0LUg4oCeJXPigJwg0Lgg4oCeJXPigJw/XG4iCisKKyM6IGJpc2VjdC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisi0LHQsNC30LDRgtCwINC30LAg0YHQu9C40LLQsNC90LUg0LzQtdC20LTRgyDigJ4lc+KAnCDQuCBbJXNdINGC0YDRj9Cx0LLQsCDQtNCwINCx0YrQtNC1INC/0YDQtdGB0LrQvtGH0LXQvdCwLlxuIgorItCd0LUg0LzQvtC20LUg0LTQsCDRgdC80LUg0YHQuNCz0YPRgNC90LgsINGH0LUg0L/RitGA0LLQvtGC0L4gJXMg0L/QvtC00LDQstCw0L3QtSDQtSDQvNC10LbQtNGDIOKAniVz4oCcINC4IOKAniVz4oCcLlxuIgorItCU0LLQvtC40YfQvdC+0YLQviDRgtGK0YDRgdC10L3QtSDQv9GA0L7QtNGK0LvQttCw0LLQsC4iCisKKyM6IGJpc2VjdC5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICLQlNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtTog0YLRgNGP0LHQstCwINC00LAg0YHQtSDQv9GA0L7QstC10YDQuCDQsdCw0LfQsCDQt9CwINGB0LvQuNCy0LDQvdC1XG4iCisKKyM6IGJpc2VjdC5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAi0L3QtdC+0LHRhdC+0LTQuNC80LAg0LUg0LLQtdGA0YHQuNGPIOKAniVz4oCcIgorCisjOiBiaXNlY3QuYzo4ODQgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBiaXNlY3QuYzo5MjggYnVpbHRpbi9tZXJnZS5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYmlzZWN0LmM6OTU4Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0L7Rh9C40YLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC30LAg0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUiCisKKyM6IGJpc2VjdC5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAi4oCeJXPigJwgZSDQutCw0LrRgtC+IOKAniVz4oCcLCDRgtCw0LrQsCDQuCDigJ4lc+KAnFxuIgorCisjOiBiaXNlY3QuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyLQm9C40L/RgdCy0LAg0L/QvtC00YXQvtC00Y/RidC+INC30LAg0YLQtdGB0YLQstCw0L3QtSDQv9C+0LTQsNCy0LDQvdC1LlxuIgorItCf0YDQvtCy0LXRgNC10YLQtSDQv9Cw0YDQsNC80LXRgtGA0LjRgtC1INC30LAg0L/RitGC0LjRidCw0YLQsC5cbiIKKworIzogYmlzZWN0LmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIo0L/RgNC40LHQu9C40LfQuNGC0LXQu9C90L4gJWQg0YHRgtGK0L/QutCwKSIKK21zZ3N0clsxXSAiKNC/0YDQuNCx0LvQuNC30LjRgtC10LvQvdC+ICVkINGB0YLRitC/0LrQuCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICLQlNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtTog0L7RgdGC0LDQstCwICVkINCy0LXRgNGB0LjRjyDRgdC70LXQtCDRgtCw0LfQuCAlc1xuIgorbXNnc3RyWzFdICLQlNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtTog0L7RgdGC0LDQstCw0YIgJWQg0LLQtdGA0YHQuNC4INGB0LvQtdC0INGC0LDQt9C4ICVzXG4iCisKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tY29udGVudHPigJwg0Lgg4oCeLS1yZXZlcnNl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBibGFtZS5jOjI3MTQKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni0tY29udGVudHPigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC40LzQtSDQvdCwINC+0LHQtdC60YIg0L7RgiDQutGA0LDQudC90L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICIiCisi0JXQtNC90L7QstGA0LXQvNC10L3QvdC+0YLQviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0L7Qv9GG0LjQuNGC0LUg4oCeLS1yZXZlcnNl4oCcINC4IOKAni0tZmlyc3QtcGFyZW504oCcINC40LfQuNGB0LrQstCwICIKKyLRg9C60LDQt9Cy0LDQvdC10YLQviDQvdCwINC60YDQsNC50L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDEgc2VxdWVuY2VyLmM6MjA5MworIzogc2VxdWVuY2VyLmM6NDQ2MCBidWlsdGluL2NvbW1pdC5jOjEwNDAgYnVpbHRpbi9sb2cuYzozODggYnVpbHRpbi9sb2cuYzo5OTEKKyM6IGJ1aWx0aW4vbG9nLmM6MTUyMCBidWlsdGluL2xvZy5jOjE5MjUgYnVpbHRpbi9sb2cuYzoyMjE1IGJ1aWx0aW4vbWVyZ2UuYzo0MTEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEyOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDMKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxOTIKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+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/RgtCwIgorIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMzQ0IHNlcXVlbmNlci5jOjMxMDgKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+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/0LXRiNC90L4iCisKKyM6IGNvbG9yLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDRhtCy0Y/RgjogJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjgxMSBidWlsdGluL2FtLmM6MzU0IGJ1aWx0aW4vYW0uYzozOTgKKyM6IGJ1aWx0aW4vYW0uYzoxMzY2IGJ1aWx0aW4vYW0uYzoyMDA5IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKKworIzogY29tbWl0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMg0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1ISIKKworIzogY29tbWl0LmM6MTkzCiBtc2dpZCAiIgotIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKyLQn9C+0LTQtNGA0YrQttC60LDRgtCwINC90LAg4oCePEdJVF9ESVI+L2luZm8vZ3JhZnRz4oCcINC1INC+0YHRgtCw0YDRj9C70LAuXG4iCisi0JIg0LHRitC00LXRidCwINCy0LXRgNGB0LjRjyDQvdCwIEdpdCDRidC1INCx0YrQtNC1INC/0YDQtdC80LDRhdC90LDRgtCwLlxuIgorIlxuIgorItCc0L7QttC1INC00LAg0L/RgNC10L7QsdGA0LDQt9GD0LLQsNGC0LUg0L/RgNC40YHQsNC00LrQuNGC0LUg0LIg0LfQsNC80LXRgdGC0LLQsNGJ0LhcbiIKKyLRg9C60LDQt9Cw0YLQtdC70Lgg0YEg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVxuIgorIlxuIgorItCX0LAg0LTQsCDQuNC30LrQu9GO0YfQuNGC0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1LCDQv9C+0LvQt9Cy0LDQudGC0LUg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlIgorCisjOiBjb21taXQuYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDRgSDQvdC10LTQvtCy0LXRgNC10L0g0L/QvtC00L/QuNGBINC+0YIgR1BHLCDQutC+0LnRgtC+INGC0LLRitGA0LTQuCwg0YfQtSDQtSDQvdCwIOKAniVz4oCcLiIKKworIzogY29tbWl0LmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC1INGBINC90LXQv9GA0LDQstC40LvQtdC9INC/0L7QtNC/0LjRgSDQvtGCIEdQRywg0LrQvtC50YLQviDRgtCy0YrRgNC00LgsINGH0LUg0LUg0L3QsCDigJ4lc+KAnC4iCisKKyM6IGNvbW1pdC5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0LUg0LHQtdC3INC/0L7QtNC/0LjRgSDQvtGCIEdQRy4iCisKKyM6IGNvbW1pdC5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDRgSDQutC+0YDQtdC60YLQtdC9INC/0L7QtNC/0LjRgSDQvtGCIEdQRyDQvdCwIOKAniVz4oCcLlxuIgorCisjOiBjb21taXQuYzoxNDE1Cittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDQvdC1INC1INC60L7QtNC40YDQsNC90L4g0YEgVVRGLTguXG4iCisi0JzQvtC20LUg0LTQsCDQv9C+0L/RgNCw0LLQuNGC0LUg0L/QvtC00LDQstCw0L3QtdGC0L4g0LfQsNC10LTQvdC+INGB0YrRgSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC40LvQuCDQvNC+0LbQtSDQtNCwXG4iCisi0LfQsNC00LDQtNC10YLQtSDQv9C+0LvQt9Cy0LDQvdC+0YLQviDQutC+0LTQuNGA0LDQvdC1INCyINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeaTE4bi5jb21taXRlbmNvZGluZ+KAnC5cbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTMwCittc2dpZCAiY29tbWl0LWdyYXBoIGZpbGUgaXMgdG9vIHNtYWxsIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YEg0LPRgNCwzIDRhNCwINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQtSDRgtCy0YrRgNC00LUg0LzQsNC70YrQuiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICLQvtGC0L/QtdGH0LDRgtGK0LrRitGCINC90LAg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAgJVgg0L3QtSDRgdGK0LLQv9Cw0LTQsCDRgSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgItCy0LXRgNGB0LjRj9GC0LAg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCAlWCDQvdC1INGB0YrQstC/0LDQtNCwINGBICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICLQstC10YDRgdC40Y/RgtCwINC90LAg0LrQvtC90YLRgNC+0LvQvdCw0YLQsCDRgdGD0LzQsCDQvdCwINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwICVYINC90LUg0YHRitCy0L/QsNC00LAg0YEgJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzMgorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBsb29rdXAgdGFibGUgZW50cnkgbWlzc2luZzsgZmlsZSBtYXkgYmUgaW5jb21wbGV0ZSIKK21zZ3N0ciAiIgorItC30LDQv9C40YHRitGCINCyINGC0LDQsdC70LjRhtCw0YLQsCDQt9CwINC+0YLQutGK0YHQuCDQu9C40L/RgdCy0LAsINGE0LDQudC70YrRgiDQt9CwINCz0YDQsMyA0YTQsCDQvNC+0LbQtSDQtNCwINC1INC90LXQv9GK0LvQtdC9IgorCisjOiBjb21taXQtZ3JhcGguYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0L7RgtC80LXRgdGC0LLQsNC90LUg0L3QsCDQvtGC0LrRitGBOiAlMDh4JTA4eCIKKworIzogY29tbWl0LWdyYXBoLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgItC+0YLQutGK0YHRitGCICUwOHgg0YHQtSDRj9Cy0Y/QstCwINC80L3QvtCz0L7QutGA0LDRgtC90L4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM1MAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgbm8gYmFzZSBncmFwaHMgY2h1bmsiCittc2dzdHIgItCx0LDQt9C+0LLQuNGP0YIg0L7RgtC60YrRgSDQu9C40L/RgdCy0LAg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM2MAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAi0LLQtdGA0LjQs9Cw0YLQsCDQvdCwINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC90LUg0YHRitCy0L/QsNC00LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdC1ncmFwaCBjaGFpbjogbGluZSAnJXMnIG5vdCBhIGhhc2giCittc2dzdHIgIiIKKyLQs9GA0LXRiNC60LAg0LLRitCyINCy0LXRgNC40LPQsNGC0LAg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsDog0YDQtdC0IOKAniVz4oCcINC90LUg0LUg0LrQvtC90YLRgNC+0LvQvdCwINGB0YPQvNCwIgorCisjOiBjb21taXQtZ3JhcGguYzo0MzMKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICLQvdGP0LrQvtC4INGE0LDQudC70L7QstC1INC90LAg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQvtGC0LrRgNC40YLQuCIKKworIzogY29tbWl0LWdyYXBoLmM6NTY0IGNvbW1pdC1ncmFwaC5jOjYyNAorbXNnaWQgImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKyLQvdC10L/RgNCw0LLQuNC70L3QsCDQv9C+0LfQuNGG0LjRjyDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+LiAg0JLQtdGA0L7Rj9GC0L3QviDQs9GA0LDRhNGK0YIg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQtSDQv9C+0LLRgNC10LTQtdC9IgorCisjOiBjb21taXQtZ3JhcGguYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0ICVzIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg1OCBidWlsdGluL2FtLmM6MTI4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L3QvjogJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwMTcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgdHlwZSBvZiBvYmplY3QgJXMiCittc2dzdHIgItCy0LjQtNGK0YIg0L3QsCDQvtCx0LXQutGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0L/RgNC10LTQtdC70LXQvSIKKworIzogY29tbWl0LWdyYXBoLmM6MTA0OQorbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgItCX0LDRgNC10LbQtNCw0L3QtSDQvdCwINC/0L7Qt9C90LDRgtC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8g0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjYKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQoNCw0LfRiNC40YDRj9Cy0LDQvdC1INC90LAg0LTQvtGB0YLQuNC20LjQvNC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8g0LIg0LPRgNCwzIDRhNCwIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDg1Cittc2dpZCAiQ2xlYXJpbmcgY29tbWl0IG1hcmtzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi0JjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQvtGC0LHQtdC70Y/Qt9Cy0LDQvdC40Y/RgtCwINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTEwNAorbXNnaWQgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIgorbXNnc3RyICLQmNC30YfQuNGB0LvRj9Cy0LDQvdC1INC90LAg0L3QvtC80LXRgNCw0YLQsCDQvdCwINC/0L7QutC+0LvQtdC90LjRj9GC0LAg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIg0LPRgNCwzIDRhNCwINCyICVkINC/0LDQutC10YLQtdC9INGE0LDQudC7IgorbXNnc3RyWzFdICLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyINCz0YDQsMyA0YTQsCDQsiAlZCDQv9Cw0LrQtdGC0L3QuCDRhNCw0LnQu9CwIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGFkZGluZyBwYWNrICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyDigJ4lc+KAnCIKKworIzogY29tbWl0LWdyYXBoLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nIGluZGV4IGZvciAlcyIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQvtGC0LLQsNGA0Y/QvdC1INC90LAg0LjQvdC00LXQutGB0LAg0L3QsCDigJ4lc+KAnCIKKworIzogY29tbWl0LWdyYXBoLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWZzIgorbXNnc3RyWzBdICLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyINCz0YDQsMyA0YTQsCDQuNC30LzQtdC20LTRgyAlZCDRg9C60LDQt9Cw0YLQtdC7IgorbXNnc3RyWzFdICLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyINCz0YDQsMyA0YTQsCDQuNC30LzQtdC20LTRgyAlZCDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQvtCx0LXQutGCLdC/0L7QtNCw0LLQsNC90LU6IOKAniVz4oCcIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjU1Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiCittc2dzdHIgItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIg0LPRgNCwzIDRhNCwINC40LfQvNC10LbQtNGDINC/0LDQutC10YLQuNGA0LDQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNzAKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi0J/RgNC10LHRgNC+0Y/QstCw0L3QtSDQvdCwINGA0LDQt9C70LjRh9C90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyDQsiDQs9GA0LDMgNGE0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzMDAKK21zZ2lkICJGaW5kaW5nIGV4dHJhIGVkZ2VzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi0J7RgtC60YDQuNCy0LDQvdC1INC90LAg0L7RidC1INCy0YrRgNGF0L7QstC1INCyINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzQ2Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvcnJlY3QgbnVtYmVyIG9mIGJhc2UgZ3JhcGggaWRzIgorbXNnc3RyICLQv9GA0LDQstC40LvQvdC40Y/RgiDQsdGA0L7QuSDQvdCwINCx0LDQt9C+0LLQuNGC0LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQuCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0L/QuNGI0LUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNzkgbWlkeC5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiCittc2dzdHIgItGA0L7QtNC40YLQtdC70YHQutC40YLQtSDQtNC40YDQtdC60YLQvtGA0LjQuCDQvdCwIOKAniVz4oCcINC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0YHRitC30LTQsNC00LXQvdC4IgorCisjOiBjb21taXQtZ3JhcGguYzoxMzkxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAi0JfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIgJWQg0L/QsNGBIgorbXNnc3RyWzFdICLQl9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiAlZCDQv9Cw0YHQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5MgorbXNnaWQgInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YEg0LLQtdGA0LjQs9Cw0YLQsCDQvdCwINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCIKKworIzogY29tbWl0LWdyYXBoLmM6MTUwNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAi0L7RgdC90L7QstC90LjRj9GCINGE0LDQudC7INC90LAg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdC40LzQtdC90YPQstCw0L0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MjQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0YTQsNC50Lsg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzNworbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0YHRitGBINGB0LvQuNCy0LDQvdC40Y8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0sINC/0L7QstGC0LDRgNGP0Ykg0YHQtSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvdCwINC/0L7QtNCw0LLQsNC90LU6ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjcyCittc2dpZCAiTWVyZ2luZyBjb21taXQtZ3JhcGgiCittc2dzdHIgItCh0LvQuNCy0LDQvdC1INC90LAg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgItGE0L7RgNC80LDRgtGK0YIg0L3QsCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0LfQsNC/0LjRiNC1ICVkINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogY29tbWl0LWdyYXBoLmM6MTg3MworbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INC/0L7QtNCw0LLQsNC90LjRjyDQt9CwINC30LDQv9C40YHQstCw0L3QtSDQvdCwINCz0YDQsMyA0YTQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTk2MworbXNnaWQgInRoZSBjb21taXQtZ3JhcGggZmlsZSBoYXMgaW5jb3JyZWN0IGNoZWNrc3VtIGFuZCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAi0LPRgNCw0YTRitGCINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LUg0YEg0LPRgNC10YjQvdCwINGB0YPQvNCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDigJQg0LLQtdGA0L7Rj9GC0L3QviDQtSDQv9C+0LLRgNC10LTQtdC9IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTczCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAiIgorItC90LXQv9GA0LDQstC40LvQvdCwINC/0L7QtNGA0LXQtNCx0LAg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC/0L4g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LA6IOKAniVz4oCcICIKKyLQtSDQv9GA0LXQtNC4IOKAniVz4oCcLCDQsCDQvdC1INGC0YDRj9Cx0LLQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4MyBjb21taXQtZ3JhcGguYzoxOTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwINC+0YLQutGK0YEg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LA6IGZhbm91dFslZF0gPSAldSwg0LAgIgorItGC0YDRj9Cx0LLQsCDQtNCwINC1ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBjb21taXQtZ3JhcGgiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDA4Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiDQs9GA0LDMgNGE0LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisi0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQsiDQsdCw0LfQsNGC0LAg0L7RgiDQtNCw0L3QvdC4INC60YrQvCDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSAiCisi0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgdHJlZSBPSUQgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJXMgIT0gJXMiCittc2dzdHIgIiIKKyLQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGK0YIg0L3QsCDQvtCx0LXQutGCINC30LAg0LrQvtGA0LXQvdC+0LLQvtGC0L4g0LTRitGA0LLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwg0LIg0LPRgNCwzIDRhNCwINGBICIKKyLQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1IOKAniVz4oCcLCDQsCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDigJ4lc+KAnCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyBpcyB0b28gbG9uZyIKK21zZ3N0ciAi0YHQv9C40YHRitC60YrRgiDRgSDRgNC+0LTQuNGC0LXQu9C4INC90LAg4oCeJXPigJwg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LUg0L/RgNC10LrQsNC70LXQvdC+INC00YrQu9GK0LMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgItGA0L7QtNC40YLQtdC70Y/RgiDQvdCwIOKAniVz4oCcINCyINCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1IOKAniVz4oCcLCDQsCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDigJ4lc+KAnCIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICLRgdC/0LjRgdGK0LrRitGCINGBINGA0L7QtNC40YLQtdC70Lgg0L3QsCDigJ4lc+KAnCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQtSDQv9GA0LXQutCw0LvQtdC90L4g0LrRitGBIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIGdlbmVyYXRpb24gbnVtYmVyIHplcm8gZm9yIGNvbW1pdCAlcywgYnV0IG5vbi16ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAiIgorItC90L7QvNC10YDRitGCINC90LAg0L/QvtC60L7Qu9C10L3QuNC10YLQviDQvdCwINC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwg0LIg0LPRgNCwzIDRhNCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LUgMCwg0LAg0LTRgNGD0LPQsNC00LUgIgorItC90LUg0LUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisi0L3QvtC80LXRgNGK0YIg0L3QsCDQv9C+0LrQvtC70LXQvdC40LXRgtC+INC90LAg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC1IDAsINCwICIKKyLQtNGA0YPQs9Cw0LTQtSDQtSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICIiCisi0L3QvtC80LXRgNGK0YIg0L3QsCDQv9C+0LrQvtC70LXQvdC40LXRgtC+INC90LAg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQtSAldSwg0LAgIgorItC00YDRg9Cz0LDQtNC1INC1ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorItC00LDRgtCw0YLQsCDQvdCwINC/0L7QtNCw0LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQsiDQs9GA0LDMgNGE0LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQtSAlPFBSSXVNQVg+LCDQsCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSAiCisiJTxQUkl1TUFYPiIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLQv9Cw0LzQtdGC0YLQsCDRgdCy0YrRgNGI0LgiCisKKyM6IGNvbmZpZy5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCisiXHQlc1xuIgorImZyb21cbiIKKyJcdCVzXG4iCisiVGhpcyBtaWdodCBiZSBkdWUgdG8gY2lyY3VsYXIgaW5jbHVkZXMuIgorbXNnc3RyICIiCisi0LzQsNC60YHQuNC80LDQu9C90LDRgtCwINC00YrQu9Cx0L7Rh9C40L3QsCDQvdCwINCy0LvQsNCz0LDQvdC1ICglZCkg0LUg0L3QsNC00LLQuNGI0LXQvdCwINC/0YDQuCDQstC80YrQutCy0LDQvdC10YLQviDQvdCwOlxuIgorIiAgICAlc1xuIgorItC+0YJcbiIKKyIgICAgJXNcbiIKKyLQotC+0LLQsCDQvNC+0LbQtSDQtNCwINGB0LUg0LTRitC70LbQuCDQvdCwINC30LDRhtC40LrQu9GP0L3QtSDQv9GA0Lgg0LLQvNGK0LrQstCw0L3QtdGC0L4uIgorCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAi0L/RitGC0Y/RgiDQt9CwINCy0LzRitC60LLQsNC90LUg4oCeJXPigJzQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YDQsNC30YjQuNGA0LXQvSIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICLQvtGC0L3QvtGB0LjRgtC10LvQvdC40YLQtSDQstC80YrQutCy0LDQvdC40Y8g0L3QsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0YLRgNGP0LHQstCwINC00LAg0LjQtNCy0LDRgiDQvtGCINGE0LDQudC70L7QstC1IgorCisjOiBjb25maWcuYzoxOTcKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSBjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgItC+0YLQvdC+0YHQuNGC0LXQu9C90LjRgtC1INGD0YHQu9C+0LLQvdC4INC40LfRgNCw0LfQuCDQt9CwINCy0LzRitC60LLQsNC90LUg0YLRgNGP0LHQstCwINC00LAg0LjQtNCy0LDRgiDQvtGCINGE0LDQudC70L7QstC1IgorCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAi0LrQu9GO0YfRitGCINC90LUg0YHRitC00YrRgNC20LAg0YDQsNC30LTQtdC7OiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICLQutC70Y7Rh9GK0YIg0L3QtSDRgdGK0LTRitGA0LbQsCDQuNC80LUg0L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsDog4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LrQu9GO0Yc6IOKAniVz4oCcIgorCisjOiBjb25maWcuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgKG5ld2xpbmUpOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LrQu9GO0YcgKNC90L7QsiDRgNC10LQpOiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6NDQ4IGNvbmZpZy5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtdC9INC/0LDRgNCw0LzQtdGC0YrRgDog4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGE0L7RgNC80LDRgiDQsiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBibG9iICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRgNC10LQg0LfQsCDQvdCw0YHRgtGA0L7QudC60LggJWQg0LIgQkxPQiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRgNC10LQg0LfQsCDQvdCw0YHRgtGA0L7QudC60LggJWQg0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCDQt9CwINC90LDRgdGC0YDQvtC50LrQuCAlZCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGNvbmZpZy5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3VibW9kdWxlLWJsb2IgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCDQt9CwINC90LDRgdGC0YDQvtC50LrQuCAlZCDQsiBCTE9CINC30LAg0L/QvtC00LzQvtC00YPQuyDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBjb21tYW5kIGxpbmUgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCDQt9CwINC90LDRgdGC0YDQvtC50LrQuCAlZCDQvdCwINC60L7QvNCw0L3QtNC90LjRjyDRgNC10LQg4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCDQt9CwINC90LDRgdGC0YDQvtC50LrQuCAlZCDQsiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICLQuNC30LLRitC9INC00LjQsNC/0LDQt9C+0L3QsCIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQvNC10YDQvdCwINC10LTQuNC90LjRhtCwIgorCisjOiBjb25maWcuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRh9C40YHQu9C+0LLQsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINC30LAg4oCeJXPigJw6ICVzIgorCisjOiBjb25maWcuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGH0LjRgdC70L7QstCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDigJ4lc+KAnCDQsiBCTE9CIOKAniVz4oCcOiAlcyIKKworIzogY29uZmlnLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YfQuNGB0LvQvtCy0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwIOKAniVz4oCcINCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcOiAlcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGH0LjRgdC70L7QstCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDigJ4lc+KAnCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQ6ICVzIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YfQuNGB0LvQvtCy0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwIOKAniVz4oCcINCyIEJMT0Ig0L7RgiDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcOiAlcyIKKworIzogY29uZmlnLmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRh9C40YHQu9C+0LLQsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINC30LAg4oCeJXPigJwg0L3QsCDQutC+0LzQsNC90LTQvdC40Y8g0YDQtdC0IOKAniVz4oCcOiAlcyIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGH0LjRgdC70L7QstCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDigJ4lc+KAnCDQsiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAi0LTQvtC80LDRiNC90LDRgtCwINC/0LDQv9C60LAg0L3QsCDQv9C+0YLRgNC10LHQuNGC0LXQu9GPINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQsDog4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg0LLRgNC10LzQtSDQt9CwIOKAniVz4oCcIgorCisjOiBjb25maWcuYzoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAi0LTRitC70LbQuNC90LDRgtCwINC90LAg0YHRitC60YDQsNGJ0LDQstCw0L3QtSDQtSDQuNC30LLRitC9INC40L3RgtC10YDQstCw0LvQsCAoWzQ7IDQwXSk6ICVkIgorCisjOiBjb25maWcuYzoxMjIyIGNvbmZpZy5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC90LjQstC+INC90LAg0LrQvtC80L/RgNC10YHQuNGA0LDQvdC1OiAlZCIKKworIzogY29uZmlnLmM6MTMyNQorbXNnaWQgImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5jb3JlLmNvbW1lbnRDaGFy4oCcINGC0YDRj9Cx0LLQsCDQtNCwINC1INGB0LDQvNC+INC10LTQuNC9INC30L3QsNC6IgorCisjOiBjb25maWcuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC20LjQvCDQt9CwINGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0Lg6ICVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAniVz4oCcOiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgIiIKKyLRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQtdC00L3QsCDQvtGCINGB0LvQtdC00L3QuNGC0LUg0YHRgtC+0LnQvdC+0YHRgtC4OiDigJ5ub3RoaW5n4oCcICjQsdC10Lcg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQv9GA0Lgg0LvQuNC/0YHQsCAiCisi0L3QsCDRg9C60LDQt9Cw0YLQtdC7KSwg4oCebWF0Y2hpbmfigJwgKNCy0YHQuNGH0LrQuCDQutC70L7QvdC4INGB0YrRgSDRgdGK0LLQv9Cw0LTQsNGJ0Lgg0LjQvNC10L3QsCksICIKKyLigJ5zaW1wbGXigJwgKNC60LvQvtC90YrRgiDRgdGK0YEg0YHRitGJ0L7RgtC+INC40LzQtSwg0L7RgiDQutC+0LnRgtC+INGB0LUg0LjQt9C00YrRgNC/0LLQsCksIOKAnnVwc3RyZWFt4oCcICjQutC70L7QvdGK0YIsICIKKyLQvtGCINC60L7QudGC0L4g0YHQtSDQuNC30LTRitGA0L/QstCwKSDQuNC70Lgg4oCeY3VycmVudOKAnCAo0LrQu9C+0L3RitGCINGB0YrRgSDRgdGK0YnQvtGC0L4g0LjQvNC1KSIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC90LjQstC+INC90LAg0LrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC/0YDQuCDQv9Cw0LrQtdGC0LjRgNCw0L3QtTogJWQiCisKKyM6IGNvbmZpZy5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciCittc2dzdHIgItC+0LHQtdC60YLRitGCLUJMT0Ig4oCeJXPigJwg0YEg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDRgNC10LTQuCIKKworIzogY29uZmlnLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGJsb2IiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAniVz4oCcINC90LUg0YHQvtGH0Lgg0LrRitC8INC+0LHQtdC60YItQkxPQiIKKworIzogY29uZmlnLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgi1CTE9CIOKAniVz4oCcINGBINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC9IgorCisjOiBjb25maWcuYzoxNzQ1Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC4INC90LDRgdGC0YDQvtC50LrQuCDQvtGCINC60L7QvNCw0L3QtNC90LjRjyDRgNC10LQiCisKKyM6IGNvbmZpZy5jOjIwOTYKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvdCwINCz0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GH0LjRgtCw0L3QtdGC0L4g0L3QsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBjb25maWcuYzoyMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9ICVzOiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6MjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgIiIKKyLRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwIOKAnnNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZeKAnCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQvNC10LbQtNGDIDEg0LggMTAwLCDQsCDQvdC1ICIKKyIlZCIKKworIzogY29uZmlnLmM6MjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgItC90LXRgNCw0LfQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINC+0YIg0LrQvtC80LDQvdC00L3QuNGPINGA0LXQtCIKKworIzogY29uZmlnLmM6MjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINC90LDRgdGC0YDQvtC50LrQsCDigJ4lc+KAnCDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnCDQvdCwINGA0LXQtCDihJYlZCIKKworIzogY29uZmlnLmM6MjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDRgNCw0LfQtNC10Ls6IOKAniVz4oCcIgorCisjOiBjb25maWcuYzoyNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgItC30LDQtNCw0LTQtdC90Lgg0YHQsCDQvdGP0LrQvtC70LrQviDRgdGC0L7QudC90L7RgdGC0Lgg0LfQsCDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6MjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAi0L3QvtCy0LjRj9GCINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IGNvbmZpZy5jOjI3NTMgY29uZmlnLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAi0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC60LvRjtGH0LXQvSIKKworIzogY29uZmlnLmM6Mjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICLQvtGC0LLQsNGA0Y/QvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjI3OTkgYnVpbHRpbi9jb25maWcuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YjQsNCx0LvQvtC9OiAlcyIKKworIzogY29uZmlnLmM6MjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC10L0g0YTQsNC50Ls6IOKAniVz4oCcIgorCisjOiBjb25maWcuYzoyODM3IGNvbmZpZy5jOjMwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5mc3RhdOKAnCDQstGK0YDRhdGDIOKAniVz4oCcIgorCisjOiBjb25maWcuYzoyODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnm1tYXDigJwg0LLRitGA0YXRgyDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6Mjg1NyBjb25maWcuYzozMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdCwINGB0LzRj9C90LAg0L3QsCDQv9GA0LDQstCwINGBIOKAnmNobW9k4oCcINCy0YrRgNGF0YMg4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjI5NDIgY29uZmlnLmM6MzE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgItC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGP0YIg0YTQsNC50Lsg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgorCisjOiBjb25maWcuYzoyOTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LTQsNC00LUg0LTQsCDQtSDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6Mjk3OCBidWlsdGluL3JlbW90ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQsNGF0L3QtSIKKworIzogY29uZmlnLmM6MzA2OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINGA0LDQt9C00LXQuzogJXMiCisKKyM6IGNvbmZpZy5jOjMyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4lc+KAnCIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAi0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQv9GA0LXQutGK0YHQvdCwINCy0YDRitC30LrQsNGC0LAg0LLQtdC00L3QsNCz0LAg0YHQu9C10LQg0L7RgtCy0LDRgNGP0L3QtdGC0L4g0Z0iCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YfQtdGC0LUg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LlxuIgorIlxuIgorItCf0YDQvtCy0LXRgNC10YLQtSDQtNCw0LvQuCDRgtC+INGB0YrRidC10YHRgtCy0YPQstCwINC4INC00LDQu9C4INC40LzQsNGC0LUg0L/RgNCw0LLQsFxuIgorItC30LAg0LTQvtGB0YLRitC/LiIKKworIzogY29ubmVjdC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgJyVzJyIKK21zZ3N0ciAi0YHRitGA0LLRitGA0YrRgiDQvdC1INC/0L7QtNC00YrRgNC20LAg4oCeJXPigJwiCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgItGB0YrRgNCy0YrRgNGK0YIg0L3QtSDQv9C+0LTQtNGK0YDQttCwIOKAniVz4oCcIgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisi0YHQu9C10LQg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdCw0YLQsCDQvtCx0Y/QstCwINC90LAg0LLRitC30LzQvtC20L3QvtGB0YLQuNGC0LUg0YHQtSDQvtGH0LDQutCy0LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQsdGD0YTQtdGA0LjRgtC1IgorCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgItC/0YDQvtC/0YPRgdC60LDQvdC1INC90LAg0LLRitC30LzQvtC20L3QvtGB0YLQuNGC0LUg0YHQu9C10LQg0L/RitGA0LLQuNGPINGA0LXQtCDigJ4lc+KAnCIKKworIzogY29ubmVjdC5jOjI1MgorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9C90LAg0LPRgNC10YjQutCwOiDQvdC10L7Rh9Cw0LrQstCw0L3QuCDQstGK0LfQvNC+0LbQvdC+0YHRgtC4Xnt9IgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9C90LAg0LPRgNC10YjQutCwOiDQvtGH0LDQutCy0LAg0YHQtSBTSEExINC90LAg0L/Qu9C40YLRitC6INC+0LHQtdC60YIsINCwINCx0LUg0L/QvtC70YPRh9C10L3Qvjog4oCeJXPigJwiCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgItC+0YLRgdGA0LXRidC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC00LAg0LUg0L/Qu9C40YLQutC+IgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC/0LDQutC10YIiCisKKyM6IGNvbm5lY3QuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9C90LAg0LPRgNC10YjQutCwOiDQvdC10L7Rh9Cw0LrQstCw0L3QviDigJ4lc+KAnCIKKworIzogY29ubmVjdC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQvtGC0LPQvtCy0L7RgCDQvdCwIOKAnmxzLXJlZnPigJw6IOKAniVz4oCcIgorCisjOiBjb25uZWN0LmM6NDQ1Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgcmVmIGxpc3RpbmciCittc2dzdHIgItC+0YfQsNC60LLQsNGI0LUg0YHQtSDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCx0YPRhNC10YDQuNGC0LUg0YHQu9C10LQg0LjQt9Cx0YDQvtGP0LLQsNC90LXRgtC+INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSIKKworIzogY29ubmVjdC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItC/0YDQvtGC0L7QutC+0Lsg4oCeJXPigJwg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg4oCeU09fS0VFUEFMSVZF4oCcINC90LAg0LPQvdC10LfQtNC+IgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSDQvdCwIOKAniVz4oCc4oCmICIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAi4oCeJXPigJwgKNC/0L7RgNGCICVzKSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUgKOKAniVz4oCcKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiTG9va2luZyB1cCAlcyAuLi4gIgorIzogY29ubmVjdC5jOjY0MyBjb25uZWN0LmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lLlxuIgorIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCittc2dzdHIgIiIKKyLQs9C+0YLQvtCy0L4uXG4iCisi0KHQstGK0YDQt9Cy0LDQvdC1INC60YrQvCDigJ4lc+KAnCAo0L/QvtGA0YIgJXMp4oCmIgorCisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgogIiVzIgogbXNnc3RyICIiCi0i0J3QtdGD0YHQv9C10YjQvdC+INGC0YDQuNC10L3QtSDQvdCwINC60LvQvtC90Lg6XG4iCisi0L3QtdGD0YHQv9C10YjQvdC+INGB0LLRitGA0LfQstCw0L3QtSDQutGK0Lwg4oCeJXPigJw6XG4iCiAiJXMiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IFJlbmFtZSBCcmFuY2giCi1tc2dzdHIgIiVzICglcyk6INCf0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC60LvQvtC9IgorIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC10YLQviDQt9Cw0LLRitGA0YjQuC4iCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMwotbXNnaWQgIlJlbmFtZSBCcmFuY2giCi1tc2dzdHIgItCf0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC60LvQvtC9IgorIzogY29ubmVjdC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUgKCVzKSIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI4Ci1tc2dpZCAiUmVuYW1lIgotbXNnc3RyICLQn9GA0LXQuNC80LXQvdGD0LLQsNC90LUiCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQv9C+0YDRgiDigJ4lc+KAnCIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM4Ci1tc2dpZCAiQnJhbmNoOiIKLW1zZ3N0ciAi0JrQu9C+0L06IgorIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAi0L3QtdC+0LHQuNGH0LDQudC90L7RgtC+INC40LzQtSDQvdCwINGF0L7RgdGCIOKAniVz4oCcINC1INCx0LvQvtC60LjRgNCw0L3QviIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjQ2Ci1tc2dpZCAiTmV3IE5hbWU6IgotbXNnc3RyICLQndC+0LLQviDQuNC80LU6IgorIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICLQvdC10L7QsdC40YfQsNC50L3QuNGP0YIg0L/QvtGA0YIg4oCeJXPigJwg0LUg0LHQu9C+0LrQuNGA0LDQvSIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjgxCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgotbXNnc3RyICLQmNC30LHQtdGA0LXRgtC1INC60LvQvtC9INC30LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1LiIKKyM6IGNvbm5lY3QuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXJ0IHByb3h5ICVzIgorbXNnc3RyICLQv9C+0YHRgNC10LTQvdC40LrRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YLQsNGA0YLQuNGA0LAiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDIgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisjOiBjb25uZWN0LmM6OTI4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgIiIKKyLQvdC1INC1INGD0LrQsNC30LDQvSDQv9GK0YIuINCf0YDQvtCy0LXRgNC10YLQtSDRgdC40L3RgtCw0LrRgdC40YHQsCDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBoZWxwIHB1bGwiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg4oCeJXPigJwuIgorIzogY29ubmVjdC5jOjExMjMKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC00IgorbXNnc3RyICLQstCw0YDQuNCw0L3RgtGK0YIg0LfQsCDigJ5zc2jigJwg4oCUIOKAnnNpbXBsZeKAnCAo0L7Qv9GA0L7RgdGC0LXQvSksINC90LUg0L/QvtC00LTRitGA0LbQsCDQvtC/0YbQuNGP0YLQsCDigJ4tNOKAnCIKIAotIzogbGliL2Jyb3dzZXIudGNsOjE3Ci1tc2dpZCAiU3RhcnRpbmcuLi4iCi1tc2dzdHIgItCh0YLQsNGA0YLQuNGA0LDQvdC14oCmIgorIzogY29ubmVjdC5jOjExMzUKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC02IgorbXNnc3RyICLQstCw0YDQuNCw0L3RgtGK0YIg0LfQsCDigJ5zc2jigJwg4oCUIOKAnnNpbXBsZeKAnCAo0L7Qv9GA0L7RgdGC0LXQvSksINC90LUg0L/QvtC00LTRitGA0LbQsCDQvtC/0YbQuNGP0YLQsCDigJ4tNuKAnCIKIAotIzogbGliL2Jyb3dzZXIudGNsOjI3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogRmlsZSBCcm93c2VyIgotbXNnc3RyICIlcyAoJXMpOiDQpNCw0LnQu9C+0LIg0LHRgNCw0YPQt9GK0YAiCisjOiBjb25uZWN0LmM6MTE1MgorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwb3J0IgorbXNnc3RyICIiCisi0LLQsNGA0LjQsNC90YLRitGCINC30LAg4oCec3No4oCcIOKAlCDigJ5zaW1wbGXigJwgKNC+0L/RgNC+0YHRgtC10L0pLCDQvdC1INC/0L7QtNC00YrRgNC20LAg0LfQsNC00LDQstCw0L3QtdGC0L4g0L3QsCDQv9C+0YDRgiIKIAotIzogbGliL2Jyb3dzZXIudGNsOjEzMiBsaWIvYnJvd3Nlci50Y2w6MTQ5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAi0JfQsNGA0LXQttC00LDQvdC1INC90LAg4oCeJXPigJzigKYiCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAi0L3QtdC+0LHQuNGH0LDQudC90LjRj9GCINC/0YrRgiDigJ4lc+KAnCDQtSDQsdC70L7QutC40YDQsNC9IgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTkzCi1tc2dpZCAiW1VwIFRvIFBhcmVudF0iCi1tc2dzdHIgIlvQmtGK0Lwg0YDQvtC00LjRgtC10LvRj10iCisjOiBjb25uZWN0LmM6MTMxMQorbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0YbQtdGBIgogCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAiJXMgKCVzKTog0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiDQutC70L7QvdCwIgorIzogY29ubmVjdGVkLmM6ODkgYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINGB0LLRitGA0LfQsNC90L7RgdGC0YLQsCIKIAotIzogbGliL2Jyb3dzZXIudGNsOjI4MgotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCi1tc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg0LrQu9C+0L3QsCIKKyM6IGNvbm5lY3RlZC5jOjEwMQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgcmV2LWxpc3TigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfQv9GK0LvQvdC10L3QsC4iCiAKLSM6IGxpYi9icm93c2VyLnRjbDoyODggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjIKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE4Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzQKLW1zZ2lkICJCcm93c2UiCi1tc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUiCisjOiBjb25uZWN0ZWQuYzoxMjEKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0LXQvSDQt9Cw0L/QuNGBINC90LAg0YHQv9C40YHRitC60LAg0YEg0LLQtdGA0YHQuNC40YLQtSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCi1tc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcINC+0YIg4oCeJXPigJwiCisjOiBjb25uZWN0ZWQuYzoxMjgKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAi0YHRgtCw0L3QtNCw0YDRgtC90LjRj9GCINCy0YXQvtC0INC90LAg0YHQv9C40YHRitC60LAg0YEg0LLQtdGA0YHQuNC40YLQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNGC0LLQvtGA0LXQvSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCi1tc2dzdHIgItGE0LDRgtCw0LvQvdCwINCz0YDQtdGI0LrQsDog4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1IgorIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQtNC10LnRgdGC0LLQuNC1INC30LAg0LrRgNCw0Lkg0L3QsCDRgNC10LQ6ICVkIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMAotIzogbGliL3NzaGtleS50Y2w6NTUKLW1zZ2lkICJDbG9zZSIKLW1zZ3N0ciAi0JfQsNGC0LLQsNGA0Y/QvdC1IgorIzogY29udmVydC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzIgorbXNnc3RyICLQktGB0Y/QutCwINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGCINC+0YIg0LfQvdCw0YbQuCDigJ5DUkxG4oCcINGJ0LUg0LHRitC0ZSDQt9Cw0LzQtdC90LXQvdCwINGBIOKAnkxG4oCcINCyIOKAniVz4oCcLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCi1tc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L3QsNGB0YLRgNC+0LnQstCw0L3QtSDQvdCwINC+0L/RgNC+0YHRgtC10L0gZ2l0LXB1bGwg0LfQsCDigJ4lc+KAnC4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5Ci0jLCB0Y2wtZm9ybWF0CisjOiBjb252ZXJ0LmM6MjA5CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKLSJcbiIKLSJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgotIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICIiCi0i0JrQu9C+0L3RitGCIOKAniVz4oCcINGB0YrRidC10YHRgtCy0YPQstCwLlxuIgotIlxuIgotItCi0L7QuSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YLRgNC40LLQuNCw0LvQvdC+INGB0LvRj9GCINC00L4g4oCeJXPigJwuXG4iCi0i0J3QtdC+0LHRhdC+0LTQuNC80L4g0LUg0YHQu9C40LLQsNC90LUuIgorItCS0YHRj9C60LAg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QvtGB0YIg0L7RgiDQt9C90LDRhtC4IOKAnkNSTEbigJwg0YnQtSDQsdGK0LRlINC30LDQvNC10L3QtdC90LAg0YEg4oCeTEbigJwg0LIg4oCeJXPigJwuXG4iCisi0KTQsNC50LvRitGCINGJ0LUg0L7RgdGC0LDQvdC1INGBINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGC0LUg0LfQvdCw0YbQuCDQt9CwINC60YDQsNC5INC90LAg0YDQtdC0INCyINGA0LDQsdC+0YLQvdCw0YLQsCDQstC4ICIKKyLQtNC40YDQtdC60YLQvtGA0LjRjy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAi0KHRgtGA0LDRgtC10LPQuNGPINC30LAg0YHQu9C40LLQsNC90LUgIOKAniVz4oCcINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwLiIKKyM6IGNvbnZlcnQuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAiIgorItCS0YHQtdC60Lgg0LfQvdCw0Log4oCeTEbigJwg0YnQtSDQsdGK0LRlINC30LDQvNC10L3QtdC9INGBINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGC0YLQsCDQvtGCINC30L3QsNGG0Lgg4oCeQ1JMRuKAnCDQsiDigJ4lc+KAnC4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg4oCeJXPigJwuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAotbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKLW1zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQstC10YfQtSDQtSDQt9Cw0LrQu9GO0YfQtdC9LiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCiBtc2dzdHIgIiIKLSLQodGK0YHRgtC+0Y/QvdC40LXRgtC+INC/0YDQuCDQv9C+0YHQu9C10LTQvdCw0YLQsCDQv9GA0L7QstC10YDQutCwINC90LUg0L7RgtCz0L7QstCw0YDRjyDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCAiCi0i0YXRgNCw0L3QuNC70LjRidC10YLQvi5cbiIKLSJcbiIKLSLQndGP0LrQvtC5INC00YDRg9CzINC/0YDQvtGG0LXRgSDQt9CwIEdpdCDQtSDQv9GA0L7QvNC10L3QuNC7INGF0YDQsNC90LjQu9C40YnQtdGC0L4g0LzQtdC20LTRg9Cy0YDQtdC80LXQvdC90L4uINCh0YrRgdGC0L7Rj9C90LjQtdGC0L4gIgotItGC0YDRj9Cx0LLQsCDQtNCwINCx0YrQtNC1INC/0YDQvtCy0LXRgNC10L3Qviwg0L/RgNC10LTQuCDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INC90L7QsiDQutC70L7QvS5cbiIKLSJcbiIKLSLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsC5cbiIKKyLQktGB0LXQutC4INC30L3QsNC6IOKAnkxG4oCcINGJ0LUg0LHRitC0ZSDQt9Cw0LzQtdC90LXQvSDRgSDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgtGC0LAg0L7RgiDQt9C90LDRhtC4IOKAnkNSTEbigJwg0LIgIgorIuKAniVz4oCcLlxuIgorItCk0LDQudC70YrRgiDRidC1INC+0YHRgtCw0L3QtSDRgSDQv9GK0YDQstC+0L3QsNGH0LDQu9C90LjRgtC1INC30L3QsNGG0Lgg0LfQsCDQutGA0LDQuSDQvdCwINGA0LXQtCDQsiDRgNCw0LHQvtGC0L3QsNGC0LAg0LLQuCAiCisi0LTQuNGA0LXQutGC0L7RgNC40Y8uIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCi1tc2dzdHIgItCg0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDRgdC1INC/0YDQuNCy0LXQttC00LAg0LrRitC8IOKAniVz4oCc4oCmIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgotbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgotbXNnc3RyICLRhNCw0LnQu9CwINGB0LAg0LjQt9GC0LXQs9C70LXQvdC4IgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKIG1zZ3N0ciAiIgotItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40LfRgtC10LPQu9GP0L3QtdGC0L4g0L3QsCDigJ4lc+KAnCAo0L3QtdC+0LHRhdC+0LTQuNC80L4g0LUg0L/QvtGE0LDQudC70L7QstC+INGB0LvQuNCy0LDQvdC1KS4iCisi4oCeJXPigJwg0L3QtSDRgtGA0Y/QsdCy0LAg0LTQsCDRgdGK0LTRitGA0LbQsCDQvNCw0YDQutC10YAg0LfQsCDQv9C+0YDQtdC00L3QvtGB0YLRgtCwINC90LAg0LHQsNC50YLQvtCy0LXRgtC1IChCT00pINC/0YDQuCAiCisi0LrQvtC00LjRgNCw0L3QtSDigJ4lc+KAnCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAi0J3QtdC+0LHRhdC+0LTQuNC80L4g0LUg0L/QvtGE0LDQudC70L7QstC+INGB0LvQuNCy0LDQvdC1LiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKLW1zZ3N0ciAi0J7RgdGC0LDQstCw0L3QtSDQstGK0YDRhdGDINC60LvQvtC90LAg4oCeJXPigJwuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCi0iQ2hlY2tvdXQnLiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgogbXNnc3RyICIiCi0i0JLQtdGH0LUg0L3QtSDRgdGC0LUg0L3QsCDQu9C+0LrQsNC70LXQvSDQutC70L7QvS5cbiIKLSJcbiIKLSLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0YHRgtC1INC90LAg0LrQu9C+0L0sINGB0YrQt9C00LDQudGC0LUg0LHQsNC30LjRgNCw0L0g0L3QsCDigJ7QotC+0LLQsCDQvdC10YHQstGK0YDQt9Cw0L3QviDQuNC30YLQtdCz0LvRj9C90LXigJwuIgorItCk0LDQudC70YrRgiDigJ4lc+KAnCDRgdGK0LTRitGA0LbQsCDQvNCw0YDQutC10YAg0LfQsCDQv9C+0YDQtdC00L3QvtGB0YLRgtCwINC90LAg0LHQsNC50YLQvtCy0LXRgtC1IChCT00pLiAg0JjQt9C/0L7Qu9C30LLQsNC50YLQtSAiCisi4oCeVVRGLSUuKnPigJwg0LrQsNGC0L4g0LrQvtC00LjRgNCw0L3QtSDQt9CwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+LiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDMgbGliL2NoZWNrb3V0X29wLnRjbDo1MDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKLW1zZ3N0ciAi4oCeJXPigJwg0LUg0LjQt9GC0LXQs9C70LXQvS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKKyM6IGNvbnZlcnQuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHJlcXVpcmVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKIG1zZ3N0ciAiIgotItCX0LDQvdGD0LvRj9Cy0LDQvdC10YLQviDQvdCwIOKAniVz4oCcINC60YrQvCDigJ4lc+KAnCDRidC1INC00L7QstC10LTQtSDQtNC+INC30LDQs9GD0LHQstCw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNC90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjzoiCisi4oCeJXPigJwg0YLRgNGP0LHQstCwINC00LAg0YHRitC00YrRgNC20LAg0LzQsNGA0LrQtdGAINC30LAg0L/QvtGA0LXQtNC90L7RgdGC0YLQsCDQvdCwINCx0LDQudGC0L7QstC10YLQtSAoQk9NKSDQv9GA0Lgg0LrQvtC00LjRgNCw0L3QtSAiCisi4oCeJXPigJwiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAi0JLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDQt9Cw0LPRg9Cx0LXQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8g0LzQvtC20LUg0LTQsCDQtSDRgtGA0YPQtNC90L4uIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0ICclcyc/IgotbXNnc3RyICLQl9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwIOKAniVz4oCcPyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNzAgbGliL3Rvb2xzX2RsZy50Y2w6MzM2Ci1tc2dpZCAiVmlzdWFsaXplIgotbXNnc3RyICLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1Ci0jLCB0Y2wtZm9ybWF0CisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgotIlxuIgotIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCi0ieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCi0iXG4iCi0iVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgogbXNnc3RyICIiCi0i0J3QtdGD0YHQv9C10YjQvdC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvS5cbiIKLSJcbiIKLSLQoNCw0LHQvtGC0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LUg0YHQsNC80L4g0YfQsNGB0YLQuNGH0L3QviDQvtCx0L3QvtCy0LXQvdCwOiDRhNCw0LnQu9C+0LLQtdGC0LUg0YHQsCDQvtCx0L3QvtCy0LXQvdC4ICIKLSLRg9GB0L/QtdGI0L3Qviwg0L3QviDQvdGP0LrQvtC5INC+0YIg0LLRitGC0YDQtdGI0L3QuNGC0LUsINGB0LvRg9C20LXQsdC90Lgg0YTQsNC50LvQvtCy0LUg0L3QsCBHaXQg0L3QtSDQtSDQsdC40LsuXG4iCi0iXG4iCi0i0KLQvtCy0LAg0YHRitGB0YLQvtGP0L3QuNC1INC1INCw0LLQsNGA0LjQudC90L4g0Lgg0L3QtSDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INGB0LvRg9GH0LLQsC4g0J/RgNC+0LPRgNCw0LzQsNGC0LAg4oCeJXPigJwg0YnQtSAiCi0i0L/RgNC10YPRgdGC0LDQvdC+0LLQuCDRgNCw0LHQvtGC0LAuIgorItCS0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcINC70LjQv9GB0LLQsCDQvNCw0YDQutC10YAg0LfQsCDQv9C+0YDQtdC00L3QvtGB0YLRgtCwINC90LAg0LHQsNC50YLQvtCy0LXRgtC1IChCT00pLiAg0JfQsCDQutC+0LTQuNGA0LDQvdC1ICIKKyLQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC40LfQv9C+0LvQt9Cy0LDQudGC0LUgVVRGLSVzQkUg0LjQu9C4IFVURi0lc0xFICjQsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgiDQvtGCICIKKyLQv9C+0YDQtdC00L3QvtGB0YLRgtCwINC90LAg0LHQsNC50YLQvtCy0LXRgtC1KS4iCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NDEKLW1zZ2lkICJTZWxlY3QiCi1tc2dzdHIgItCY0LfQsdC+0YAiCisjOiBjb252ZXJ0LmM6NDE5IGNvbnZlcnQuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0LXQutC+0LTQuNGA0LDQvdC1INC90LAg4oCeJXPigJwg0L7RgiDigJ4lc+KAnCDQutGK0Lwg4oCeJXPigJwiCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NTUKLW1zZ2lkICJGb250IEZhbWlseSIKLW1zZ3N0ciAi0KjRgNC40YTRgiIKKyM6IGNvbnZlcnQuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW5jb2RpbmcgJyVzJyBmcm9tICVzIHRvICVzIGFuZCBiYWNrIGlzIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAi0J/RgNC10LrQvtC00LjRgNCw0L3QtdGC0L4g0L3QsCDigJ4lc+KAnCDQvtGCIOKAniVz4oCcINC60YrQvCDigJ4lc+KAnCDQuCDQvtCx0YDQsNGC0L3QviDQv9GA0L7QvNC10L3RjyDRhNCw0LnQu9CwIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc2Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICLQoNCw0LfQvNC10YAiCisjOiBjb252ZXJ0LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0YDQvtGG0LXRgSDQt9CwINCy0YrQvdGI0LXQvSDRhNC40LvRgtGK0YAg4oCeJXPigJwiCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKLW1zZ2lkICJGb250IEV4YW1wbGUiCi1tc2dzdHIgItCc0L7RgdGC0YDQsCIKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICLQstGF0L7QtNGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QtNCw0LTQtdC9INC90LAg0LLRitC90YjQvdC40Y8g0YTQuNC70YLRitGAIOKAniVz4oCcIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwNQorIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINCy0YrQvdGI0L3QuNGPINGE0LjQu9GC0YrRgCDigJ4lc+KAnDogJWQiCisKKyM6IGNvbnZlcnQuYzo3MzAgY29udmVydC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YfQtdGC0LXQvdC1INC+0YIg0LLRitC90YjQvdC40Y8g0YTQuNC70YLRitGAIOKAniVz4oCcIgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQstGK0L3RiNC90LjRjyDRhNC40LvRgtGK0YAg4oCeJXPigJwiCisKKyM6IGNvbnZlcnQuYzo4MzkKK21zZ2lkICJ1bmV4cGVjdGVkIGZpbHRlciB0eXBlIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0LLQuNC0INGE0LjQu9GC0YrRgCIKKworIzogY29udmVydC5jOjg1MAorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICLQv9GK0YLRj9GCINC1INC/0YDQtdC60LDQu9C10L3QviDQtNGK0LvRitCzINC30LAg0LLRitC90YjQtdC9INGE0LjQu9GC0YrRgCIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCi0iSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgogbXNnc3RyICIiCi0i0KLQvtCy0LAg0LUg0L/RgNC40LzQtdGA0LXQvSDRgtC10LrRgdGCLlxuIgotItCQ0LrQviDQstC4INGF0LDRgNC10YHQstCwINC60LDQuiDQuNC30LPQu9C10LbQtNCwLCDQuNC30LHQtdGA0LXRgtC1INGI0YDQuNGE0YLQsC4iCisi0LLRitC90YjQvdC40Y/RgiDRhNC40LvRgtGK0YAg4oCeJXPigJwg0LLQtdGH0LUg0L3QtSDQtSDQvdCw0LvQuNGH0LXQvSwg0LLRitC/0YDQtdC60Lgg0YfQtSDQvdC1INCy0YHQuNGH0LrQuCDQv9GK0YLQuNGJ0LAg0YHQsCAiCisi0YTQuNC70YLRgNC40YDQsNC90LgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzMKLW1zZ2lkICJHaXQgR3VpIgotbXNnc3RyICLQk9Cf0Jgg0L3QsCBHaXQiCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgIuKAnnRydWXigJwv4oCeZmFsc2XigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LAg0LrQvtC00LjRgNCw0L3QuNGPINC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTIKLW1zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCi1tc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC90L7QstC+INGF0YDQsNC90LjQu9C40YnQtSIKKyM6IGNvbnZlcnQuYzoxNDExIGNvbnZlcnQuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiVzOiDQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQtNC10LrQvtC00LjRgNCw0Ykg0YTQuNC70YLRitGAIOKAniVz4oCcIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4Ci1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICLQndC+0LLQvuKApiIKKyM6IGNvbnZlcnQuYzoxNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBzbXVkZ2UgZmlsdGVyICVzIGZhaWxlZCIKK21zZ3N0ciAiJXM6INC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QtNC40YDQsNGJINGE0LjQu9GC0YrRgCDigJ4lc+KAnCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTYKLW1zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0L4g0YXRgNCw0L3QuNC70LjRidC1IgorIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgItCyINCx0YrQtNC10YnQtdGC0L4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE2Ci1tc2dpZCAiQ2xvbmUuLi4iCi1tc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QteKApiIKKyM6IGRhdGUuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICLQv9GA0LXQtNC4ICU8UFJJdU1BWD4g0YHQtdC60YPQvdC00LAiCittc2dzdHJbMV0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDRgdC10LrRg9C90LTQuCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY0Ci1tc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICLQntGC0LLQsNGA0Y/QvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC+INGF0YDQsNC90LjQu9C40YnQtSIKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICLQv9GA0LXQtNC4ICU8UFJJdU1BWD4g0LzQuNC90YPRgtCwIgorbXNnc3RyWzFdICLQv9GA0LXQtNC4ICU8UFJJdU1BWD4g0LzQuNC90YPRgtC4IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyOQotbXNnaWQgIk9wZW4uLi4iCi1tc2dzdHIgItCe0YLQstCw0YDRj9C90LXigKYiCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICLQv9GA0LXQtNC4ICU8UFJJdU1BWD4g0YfQsNGBIgorbXNnc3RyWzFdICLQv9GA0LXQtNC4ICU8UFJJdU1BWD4g0YfQsNGB0LAiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQyCi1tc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKLW1zZ3N0ciAi0KHQutC+0YDQviDQv9C+0LvQt9Cy0LDQvdC4IgorIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDQtNC10L0iCittc2dzdHJbMV0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDQtNC10L3QsCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNDgKLW1zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKLW1zZ3N0ciAi0J7RgtCy0LDRgNGP0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtSDQv9C+0LvQt9Cy0LDQvdC+INC90LDRgdC60L7RgNC+OiIKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDRgdC10LTQvNC40YbQsCIKK21zZ3N0clsxXSAi0L/RgNC10LTQuCAlPFBSSXVNQVg+INGB0LXQtNC80LjRhtC4IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnDoiCisjOiBkYXRlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDQvNC10YHQtdGGIgorbXNnc3RyWzFdICLQv9GA0LXQtNC4ICU8UFJJdU1BWD4g0LzQtdGB0LXRhtCwIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxNwotbXNnaWQgIkRpcmVjdG9yeToiCi1tc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGPOiIKKyM6IGRhdGUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+INCz0L7QtNC40L3QsCIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDQs9C+0LTQuNC90LgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTczCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwOTgKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0IgorIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICLQv9GA0LXQtNC4ICVzINC4ICU8UFJJdU1BWD4g0LzQtdGB0LXRhiIKK21zZ3N0clsxXSAi0L/RgNC10LTQuCAlcyDQuCAlPFBSSXVNQVg+INC80LXRgdC10YbQsCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICLQktC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDigJ4lc+KAnC4iCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDQs9C+0LTQuNC90LAiCittc2dzdHJbMV0gItC/0YDQtdC00LggJTxQUkl1TUFYPiDQs9C+0LTQuNC90LgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgItCS0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINGE0LDQudC7IOKAniVz4oCcLiIKKyM6IGRlbHRhLWlzbGFuZHMuYzoyNzIKK21zZ2lkICJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiCittc2dzdHIgItCg0LDQt9C/0YDQvtGB0YLRgNCw0L3Rj9Cy0LDQvdC1INC90LAg0LPRgNCw0L3QuNGG0LjRgtC1INC90LAg0LPRgNGD0L/QuNGC0LUiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkxCi1tc2dpZCAiQ2xvbmUiCi1tc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSIKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQvtCx0LXQutGCLdC00YrRgNCy0L46ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNAotbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCi1tc2dzdHIgItCQ0LTRgNC10YEg0L3QsCDQuNC30YLQvtGH0L3QuNC60LA6IgorIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICLRgNC10LPRg9C70Y/RgNC90LjRj9GCINC40LfRgNCw0Lcg0L3QsCDQs9GA0YPQv9Cw0YLQsCDQt9CwIOKAniVz4oCcLCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNGA0LXQtNC10L06IOKAniVz4oCcIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxMwotbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgotbXNnc3RyICLQptC10LvQtdCy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y86IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMwotbXNnaWQgIkNsb25lIFR5cGU6IgotbXNnc3RyICLQktC40LQg0LrQu9C+0L3QuNGA0LDQvdC1OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjgKLW1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCi1tc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdC+ICjQsdGK0YDQt9C+LCDRh9Cw0YHRgtC40YfQvdC+INGB0L/QvtC00LXQu9GP0L3QtSDQvdCwINGE0LDQudC70L7QstC1LCDRgtCy0YrRgNC00Lgg0LLRgNGK0LfQutC4KSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzMKLW1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCi1tc2dzdHIgItCf0YrQu9C90L4gKNCx0LDQstC90L4sINC/0YrQu9C90L7RhtC10L3QvdC+INGA0LXQt9C10YDQstC90L4g0LrQvtC/0LjQtSkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTM4Ci1tc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCi1tc2dzdHIgItCh0L/QvtC00LXQu9C10L3QviAo0L3QsNC5LdCx0YrRgNC30L4sINC90LUg0YHQtSDQv9GA0LXQv9C+0YDRitGH0LLQsCwg0L3QtSDQv9GA0LDQstC4INGA0LXQt9C10YDQstC90L4g0LrQvtC/0LjQtSkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQ1Ci1tc2dpZCAiUmVjdXJzaXZlbHkgY2xvbmUgc3VibW9kdWxlcyB0b28iCi1tc2dzdHIgItCg0LXQutGD0YDRgdC40LLQvdC+INC60LvQvtC90LjRgNCw0L3QtSDQuCDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTc5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI2Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg0MgotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTA0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKLW1zZ3N0ciAi0KLQvtCy0LAg0L3QtSDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQ6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNQotbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAi0KHQsNC80L4g0LvQvtC60LDQu9C90Lgg0YXRgNCw0L3QuNC70LjRidCwINC80L7Qs9Cw0YIg0LTQsCDRgdC1INC60LvQvtC90LjRgNCw0YIg0YHRgtCw0L3QtNCw0YDRgtC90L4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE5Ci1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAi0KHQsNC80L4g0LvQvtC60LDQu9C90Lgg0YXRgNCw0L3QuNC70LjRidCwINC80L7Qs9Cw0YIg0LTQsCDRgdC1INC60LvQvtC90LjRgNCw0YIg0YHQv9C+0LTQtdC70LXQvdC+IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAi0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtdGC0L4g4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1MQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L3QsNGB0YLRgNC+0LnQstCw0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4t0LjQt9GC0L7Rh9C90LjQuiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjMKLW1zZ2lkICJDb3VudGluZyBvYmplY3RzIgotbXNnc3RyICLQn9GA0LXQsdGA0L7Rj9Cy0LDQvdC1INC90LAg0L7QsdC10LrRgtC4IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NAotbXNnaWQgImJ1Y2tldHMiCi1tc2dzdHIgItC60LvQtdGC0LrQuCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2ODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCi1tc2dzdHIgItCe0LHQtdC60YLQuNGC0LUv0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwL9GB0LjQvdC+0L3QuNC80LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LrQvtC/0LjRgNCw0L3QuDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKLW1zZ3N0ciAi0J3Rj9C80LAg0LrQsNC60LLQviDQtNCwINGB0LUg0LrQu9C+0L3QuNGA0LAg0L7RgiDigJ4lc+KAnC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQwCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk1MgotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAi0J7RgdC90L7QstC90LjRj9GCINC60LvQvtC9IOKAlCDigJ5tYXN0ZXLigJwg0L3QtSDQtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzM5Ci1tc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKLW1zZ3N0ciAi0J3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRgiDRgtCy0YrRgNC00Lgg0LLRgNGK0LfQutC4LiDQn9GA0LXQvNC40L3QsNCy0LAg0YHQtSDQutGK0Lwg0LrQvtC/0LjRgNCw0L3QtS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzUxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2xvbmluZyBmcm9tICVzIgotbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0L3QsCDigJ4lc+KAnCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKLW1zZ2lkICJDb3B5aW5nIG9iamVjdHMiCi1tc2dzdHIgItCa0L7Qv9C40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LgiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzgzCi1tc2dpZCAiS2lCIgotbXNnc3RyICJLaUIiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC60L7Qv9C40YDQsNC90LUg0L3QsCDQvtCx0LXQutGCOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTcKLW1zZ2lkICJMaW5raW5nIG9iamVjdHMiCi1tc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINCy0YDRitC30LrQuCDQutGK0Lwg0L7QsdC10LrRgtC40YLQtSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTgKLW1zZ2lkICJvYmplY3RzIgotbXNnc3RyICLQvtCx0LXQutGC0LgiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRgtCy0YrRgNC00LAg0LLRgNGK0LfQutCwINC60YrQvCDQvtCx0LXQutGCOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4ODEKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgogbXNnc3RyICIiCi0i0JrQu9C+0L3QuNGC0LUg0Lgg0L7QsdC10LrRgtC40YLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC40LfRgtC10LPQu9C10L3QuC4g0JfQsCDQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8gIgotItC/0L7Qs9C70LXQtNC90LXRgtC1INC40LfRhdC+0LTQsCDQvdCwINC60L7QvdC30L7Qu9Cw0YLQsC4iCisi0YDQtdCz0YPQu9GP0YDQvdC40Y/RgiDQuNC30YDQsNC3INC90LAg0LPRgNGD0L/QsNGC0LAg0LIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y8g0YTQsNC50Lsg0YHRitC00YrRgNC20LAg0L/QvtCy0LXRh9C1INC+0YIgIgorItC80LDQutGB0LjQvNCw0LvQvdC+INC/0L7QtNC00YrRgNC20LDQvdC40YLQtSAoJWQpINC/0YDQuNGF0LLQsNGJ0LDRidC4INCz0YDRg9C/0LgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkyCi1tc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICIiCi0i0JXRgtC40LrQtdGC0LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LjQt9GC0LXQs9C70LXQvdC4LiDQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LPQu9C10LTQvdC10YLQtSAiCi0i0LjQt9GF0L7QtNCwINC90LAg0LrQvtC90LfQvtC70LDRgtCwLiIKKyM6IGRlbHRhLWlzbGFuZHMuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2VkICVkIGlzbGFuZHMsIGRvbmUuXG4iCittc2dzdHIgItCe0YLQsdC10LvRj9C30LDQvdC4INGB0LAgJWQg0LPRgNGD0L/QuCwg0YDQsNCx0L7RgtCw0YLQsCDQv9GA0LjQutC70Y7Rh9C4LlxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNgotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSLQktGK0YDRhdGK0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9GA0LXQtNC10LvQtdC9LiDQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LPQu9C10LTQvdC10YLQtSAiCi0i0LjQt9GF0L7QtNCwINC90LAg0LrQvtC90LfQvtC70LDRgtCwLiIKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDRgSDQv9C+0LTRgNC10LTQsdCw0YLQsCDQvdCwINGB0YrQvtGC0LLQtdGC0YHRgtCy0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCi1tc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDRh9C40YHRgtC4IgorIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgItCi0YrRgNGB0LXQvdC1INC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y8g0L3QsCDQvtCx0LXQutGC0Lgg0YHRitGH0LXRgtCw0L3QuCDRgSDQv9GA0L7QvNC10L3QuCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzEKLW1zZ2lkICJDbG9uZSBmYWlsZWQuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LrQu9C+0L3QuNGA0LDQvdC1LiIKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgImdpdCBkaWZmIC0tbm8taW5kZXggW9Ce0J/QptCY0K/igKZdINCf0KrQoiDQn9Cq0KIiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Ci1tc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgotbXNnc3RyICLQndC1INC1INC/0L7Qu9GD0YfQtdC9INC60LvQvtC9INC/0L4g0L/QvtC00YDQsNC30LHQuNGA0LDQvdC1LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCi1tc2dzdHIgItCd0Y/QvNCwINC/0L7QtNCw0LLQsNC90LUg0L7RgtCz0L7QstCw0YDRj9GJ0L4g0L3QsCDigJ4lc+KAnC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYxCi1tc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjIgbGliL2luZGV4LnRjbDo3MCBsaWIvaW5kZXgudGNsOjEzNgotIzogbGliL2luZGV4LnRjbDoyMDcKLW1zZ2lkICJmaWxlcyIKLW1zZ3N0ciAi0YTQsNC50LvQvtCy0LUiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCi1tc2dpZCAiQ2Fubm90IGNsb25lIHN1Ym1vZHVsZXMuIgotbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LrQu9C+0L3QuNGA0LDRgi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTkwCi1tc2dpZCAiQ2xvbmluZyBzdWJtb2R1bGVzIgotbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LgiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNQotbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC40LfRgtC10LPQu9GP0L3QtS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OQotbXNnaWQgIk9wZW4iCi1tc2dzdHIgItCe0YLQstCw0YDRj9C90LUiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2OQotbXNnaWQgIlJlcG9zaXRvcnk6IgotbXNnc3RyICLQpdGA0LDQvdC40LvQuNGJ0LU6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC+0YLQstCw0YDRj9C90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcOiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjUyCi1tc2dpZCAiVGhpcyBEZXRhY2hlZCBDaGVja291dCIKLW1zZ3N0ciAi0KLQvtCy0LAg0L3QtdGB0LLRitGA0LfQsNC90L4g0LjQt9GC0LXQs9C70Y/QvdC1IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKLW1zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKLW1zZ3N0ciAi0JjQt9GA0LDQtyDQt9CwINCy0LXRgNGB0LjRjzoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgotbXNnaWQgIkxvY2FsIEJyYW5jaCIKLW1zZ3N0ciAi0JvQvtC60LDQu9C10L0g0LrQu9C+0L0iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NwotbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAi0KHQu9C10LTRj9GJINC60LvQvtC9IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODIgbGliL2Nob29zZV9yZXYudGNsOjU0NAotbXNnaWQgIlRhZyIKLW1zZ3N0ciAi0JXRgtC40LrQtdGCIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzIxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCi1tc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINCy0LXRgNGB0LjRjzogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDIKLW1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgItCd0LUg0LUg0LjQt9Cx0YDQsNC90LAg0LLQtdGA0YHQuNGPLiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjM1MAotbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgotbXNnc3RyICLQmNC30YDQsNC30YrRgiDQt9CwINCy0LXRgNGB0LjRjyDQtSDQv9GA0LDQt9C10L0uIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTM3Ci1tc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAi0J7QsdC90L7QstC10L0iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjUKLW1zZ2lkICJVUkwiCi1tc2dzdHIgItCQ0LTRgNC10YEiCi0KLSM6IGxpYi9jb21taXQudGNsOjkKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKIG1zZ2lkICIiCi0iVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKLSJcbiIKLSJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgotInRvIGFtZW5kLlxuIgorIk5vdCBhIGdpdCByZXBvc2l0b3J5LiBVc2UgLS1uby1pbmRleCB0byBjb21wYXJlIHR3byBwYXRocyBvdXRzaWRlIGEgd29ya2luZyAiCisidHJlZSIKIG1zZ3N0ciAiIgotItCd0Y/QvNCwINC60LDQutCy0L4g0LTQsCDRgdC1INC/0L7Qv9GA0LDQstC4LlxuIgotIlxuIgotItCp0LUg0YHRitC30LTQsNC00LXRgtC1INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtS4g0J/RgNC10LTQuCDQvdC10LPQviDQvdGP0LzQsCDQtNGA0YPQs9C4INC/0L7QtNCw0LLQsNC90LjRjywg0LrQvtC40YLQviAiCi0i0LTQsCDQv9C+0L/RgNCw0LLQuNGC0LUuXG4iCisi0J3QtSDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBnaXQuICDQn9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1uby1pbmRleOKAnCwg0LfQsCDQtNCwINGB0YDQsNCy0L3QuNGC0LUgIgorItC/0YrRgtC40YnQsCDQuNC30LLRitC9INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4CisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiIgorIiAg0J3QtdGD0YHQv9C10YjQvdC+INGA0LDQt9C/0L7Qt9C90LDQstCw0L3QtSDQvdCwIOKAniVz4oCcINC60LDRgtC+INC/0YDQvtGG0LXQvdGCLdC/0YDQsNCzINC30LAg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwINC/0L4gIgorItC00LjRgNC10LrRgtC+0YDQuNC4XG4iCisKKyM6IGRpZmYuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICDQndC10L/QvtC30L3QsNGCINC/0LDRgNCw0LzQtdGC0YrRgCDigJ4lc+KAnCDQt9CwINGB0YLQsNGC0LjRgdGC0LjQutCw0YLQsCDQv9C+INC00LjRgNC10LrRgtC+0YDQuNC4J1xuIgorCisjOiBkaWZmLmM6Mjk2CiBtc2dpZCAiIgotIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgotIlxuIgotIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCi0iY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKLSJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgogbXNnc3RyICIiCi0i0J/QviDQstGA0LXQvNC1INC90LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0L7Qv9GA0LDQstGP0YLQtS5cbiIKLSJcbiIKLSLQkiDQvNC+0LzQtdC90YLQsCDQstGB0LUg0L7RidC1INC90LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDQvtC/0LXRgNCw0YbQuNGPINC/0L4g0YHQu9C40LLQsNC90LUuINCd0LUg0LzQvtC20LUg0LTQsCDQv9C+0L/RgNCw0LLQuNGC0LUgIgotItC/0YDQtdC00LjRiNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUsINC+0YHQstC10L0g0LDQutC+INC/0YrRgNCy0L4g0L3QtSDQv9GA0LXRg9GB0YLQsNC90L7QstC40YLQtSDRgtC10LrRg9GJ0L7RgtC+INGB0LvQuNCy0LDQvdC1LlxuIgorItC90LDRgdGC0YDQvtC50LrQsNGC0LAg0LfQsCDRhtCy0Y/RgiDQt9CwINC/0YDQtdC80LXRgdGC0LLQsNC90LUg0YLRgNGP0LHQstCwINC00LAg0LUg0LXQtNC90LAg0L7Rgjog4oCebm/igJwgKNCx0LXQtyksICIKKyLigJ5kZWZhdWx04oCcICjRgdGC0LDQvdC00LDRgNGC0L3QviksIOKAnmJsb2Nrc+KAnCAo0L/QsNGA0YfQtdGC0LApLCDigJ56ZWJyYeKAnCAo0YDQsNC50LUpLCAiCisi4oCeZGltbWVkX3plYnJh4oCcICjRgtGK0LzQvdC+INGA0LDQudC1KSwg4oCecGxhaW7igJwgKNC+0LHQuNC60L3QvtCy0LXQvdC+KSIKIAotIzogbGliL2NvbW1pdC50Y2w6NDgKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0LTQsNC90L3QuNGC0LUg0L7RgiDQv9C+0LTQsNCy0LDQvdC1LCDQutC+0LjRgtC+INC00LAg0YHQtSDQv9C+0L/RgNCw0LLRj9GCOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NzUKLW1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgotbXNnc3RyICLQmNC00LXQvdGC0LjRhNC40LrQsNGG0LjRj9GC0LAg0LLQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9GA0LXQtNC10LvQtdC90LA6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo4MAotbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCi1tc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC/0L7Qu9C1IOKAnkdJVF9DT01NSVRURVJfSURFTlTigJw6IgotCi0jOiBsaWIvY29tbWl0LnRjbDoxMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKLW1zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTogVGNsINC90LUg0L/QvtC00LTRitGA0LbQsCDQutC+0LTQuNGA0LDQvdC10YLQviDigJ4lc+KAnC4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE0OQorIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorInVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnLCBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUtc3BhY2UtY2hhbmdlJywgIgorIidpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKIG1zZ3N0ciAiIgotItCh0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L/RgNC4INC/0L7RgdC70LXQtNC90LDRgtCwINC/0YDQvtCy0LXRgNC60LAg0L3QtSDQvtGC0LPQvtCy0LDRgNGPINC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwICIKLSLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+LlxuIgotIlxuIgotItCd0Y/QutC+0Lkg0LTRgNGD0LMg0L/RgNC+0YbQtdGBINC30LAgR2l0INC1INC/0YDQvtC80LXQvdC40Lsg0YXRgNCw0L3QuNC70LjRidC10YLQviDQvNC10LbQtNGD0LLRgNC10LzQtdC90L3Qvi4g0KHRitGB0YLQvtGP0L3QuNC10YLQviAiCi0i0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0L/RgNC+0LLQtdGA0LXQvdC+INC/0YDQtdC00Lgg0L3QvtCy0L4g0L/QvtC00LDQstCw0L3QtS5cbiIKLSJcbiIKLSLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsC5cbiIKKyLQvdC10L/QvtC00LTRitGA0LbQsNC9INGA0LXQttC40Lwg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvbG9yLW1vdmVkLXdzIG1vZGXigJwg4oCUwqDigJ4lc+KAnCwg0LLRitC30LzQvtC20L3QuNGC0LUgIgorItGB0YLQvtC50L3QvtGB0YLQuCDRgdCwIOKAnmlnbm9yZS1zcGFjZS1jaGFuZ2XigJwgKNC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC90LAg0L/RgNCw0LfQvdC40YLQtSAiCisi0LfQvdCw0YbQuCksIOKAnmlnbm9yZS1zcGFjZS1hdC1lb2zigJwgKNC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC90LAg0L/RgNCw0LfQvdC40YLQtSDQt9C90LDRhtC4ICIKKyLQsiDQutGA0LDRjyDQvdCwINGA0LXQtNCwKSwg4oCeaWdub3JlLWFsbC1zcGFjZeKAnCAo0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L/RgNCw0LfQvdC4INC30L3QsNGG0LgpLCAiCisi4oCeYWxsb3ctaW5kZW50YXRpb24tY2hhbmdl4oCcICjQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INCyINC/0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCDQt9CwICIKKyLRhNC+0YDQvNCw0YLQuNGA0LDQvdC1KSIKIAotIzogbGliL2NvbW1pdC50Y2w6MTczCi0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6MzMyCiBtc2dpZCAiIgotIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCi0iYmVmb3JlIGNvbW1pdHRpbmcuXG4iCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKIG1zZ3N0ciAiIgotItCd0LXRgdC70LXRgtC40YLQtSDRhNCw0LnQu9C+0LLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC/0L7QtNCw0LLQsNC90LguXG4iCi0iXG4iCi0i0JLRitCyINGE0LDQudC70LAg4oCeJXPigJwg0LjQvNCwINC60L7QvdGE0LvQuNC60YLQuCDQv9GA0Lgg0YHQu9C40LLQsNC90LUuINCX0LAg0LTQsCDQs9C+INC/0L7QtNCw0LTQtdGC0LUsINGC0YDRj9Cx0LLQsCDQv9GK0YDQstC+INC00LAgIgotItC60L7RgNC40LPQuNGA0LDRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0LTQsCDQtNC+0LHQsNCy0LjRgtC1INGE0LDQudC70LAg0LrRitC8INC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtS5cbiIKKyLigJ5jb2xvci1tb3ZlZC13c+KAnDog4oCeYWxsb3ctaW5kZW50YXRpb24tY2hhbmdl4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQtNGA0YPQs9C40YLQtSDRgNC10LbQuNC80LggIgorItC30LAg0L/RgNCw0LfQvdC4INC30L3QsNGG0LgiCiAKLSM6IGxpYi9jb21taXQudGNsOjE4MQotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmRpZmYuc3VibW9kdWxl4oCcIgorCisjOiBkaWZmLmM6NDY1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgogbXNnc3RyICIiCi0i0J3QtdC/0L7Qt9C90LDRgtC+INGB0YrRgdGC0L7Rj9C90LjQtSDQvdCwINGE0LDQudC7IOKAniVz4oCcLlxuIgotIlxuIgotItCk0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC00LDQtNC10L0g0YfRgNC10Lcg0YLQtdC60YPRidCw0YLQsCDQv9GA0L7Qs9GA0LDQvNCwLlxuIgorItCT0YDQtdGI0LrQuCDQsiDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmRpZmYuZGlyc3RhdOKAnDpcbiIKKyIlcyIKIAotIzogbGliL2NvbW1pdC50Y2w6MTg5CisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICIiCisi0LLRitC90YjQvdCw0YLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0YDQsNC30LvQuNC60Lgg0LfQsNCy0YrRgNGI0Lgg0L3QtdGD0YHQv9C10YjQvdC+LiAg0KHQv9C40YDQsNC90LUg0L3QsCDRgNCw0LHQvtGC0LDRgtCwINC/0YDQuCDigJ4lc+KAnCIKKworIzogZGlmZi5jOjQ1NDcKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorItCe0L/RhtC40LjRgtC1IOKAni0tbmFtZS1vbmx54oCcLCDigJ4tLW5hbWUtc3RhdHVz4oCcLCDigJ4tLWNoZWNr4oCcINC4IOKAni1z4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4ICIKKyLQtdC00L3QsCDRgSDQtNGA0YPQs9CwIgorCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tR+KAnCwg4oCeLVPigJwg0Lgg4oCeLS1maW5kLW9iamVjdOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDQtdC00L3QsCDRgSDQtNGA0YPQs9CwIgorCisjOiBkaWZmLmM6NDYyOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tLWZvbGxvd+KAnCDQuNC30LjRgdC60LLQsCDRgtC+0YfQvdC+INC10LTQuNC9INC/0YrRgiIKKworIzogZGlmZi5jOjQ2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeLS1zdGF04oCcOiAlcyIKKworIzogZGlmZi5jOjQ2ODEgZGlmZi5jOjQ2ODYgZGlmZi5jOjQ2OTEgZGlmZi5jOjQ2OTYgZGlmZi5jOjUyMDkKKyM6IHBhcnNlLW9wdGlvbnMuYzoxOTkgcGFyc2Utb3B0aW9ucy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQvtGH0LDQutCy0LAg0YfQuNGB0LvQviDQt9CwINCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGRpZmYuYzo0NzEzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKIG1zZ3N0ciAiIgotItCd0Y/QvNCwINC/0YDQvtC80LXQvdC4INC30LAg0L/QvtC00LDQstCw0L3QtS5cbiIKLSJcbiIKLSLQotGA0Y/QsdCy0LAg0LTQsCDQtNC+0LHQsNCy0LjRgtC1INC/0L7QvdC1INC10LTQuNC9INGE0LDQudC7INC60YrQvCDQuNC90LTQtdC60YHQsCwg0LfQsCDQtNCwINC/0L7QtNCw0LTQtdGC0LUuXG4iCisi0J3QtdGA0LDQt9C/0L7Qt9C90LDRgiDQv9Cw0YDQsNC80LXRgtGK0YAg0LrRitC8INC+0L/RhtC40Y/RgtCwIOKAni0tZGlyc3RhdC8tWOKAnDpcbiIKKyIlcyIKIAotIzogbGliL2NvbW1pdC50Y2w6MjA0CisjOiBkaWZmLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNoYW5nZSBjbGFzcyAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LLQuNC0INC/0YDQvtC80Y/QvdCwOiDigJ4lY+KAnCDQsiDigJ4tLWRpZmYtZmlsdGVyPSVz4oCcIgorCisjOiBkaWZmLmM6NDgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDRgdC70LXQtCDigJ53cy1lcnJvci1oaWdobGlnaHQ9JS4qc+KAnCIKKworIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1IgorCisjOiBkaWZmLmM6NDg4NiBkaWZmLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIDxuPi88bT4gZm9ybSIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC40LfQuNGB0LrQstCwINGB0YLQvtC50L3QvtGB0YLQuCDQt9CwINCc0JjQndCY0JzQkNCb0JXQnV8lJV/Qn9Cg0J7QnNCv0J3QkF/Ql9CQX9CY0JfQotCe0KfQndCY0JpfLyIKKyLQnNCQ0JrQodCY0JzQkNCb0JXQnV8lJV/Qn9Cg0J7QnNCv0J3QkF/Ql9CQX9CX0JDQnNCv0J3QkCDQvtGCIgorCisjOiBkaWZmLmM6NDkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgY2hhcmFjdGVyLCBnb3QgJyVzJyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0LjQt9C40YHQutCy0LAg0LfQvdCw0LosINCwINC90LU6IOKAniVz4oCcIgorCisjOiBkaWZmLmM6NDkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCw0YDQs9GD0LzQtdC90YIg0LfQsCDigJ4tLWNvbG9yLW1vdmVk4oCcOiDigJ4lc+KAnCIKKworIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC20LjQvCDigJ4lc+KAnCDQt9CwIOKAniAtLWNvbG9yLW1vdmVkLXdz4oCcIgorCisjOiBkaWZmLmM6NDk4NAogbXNnaWQgIiIKLSJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0iXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKLSJcbiIKLSItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCi0iLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKLSItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCisib3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCAiCisiXCJoaXN0b2dyYW1cIiIKIG1zZ3N0ciAiIgotItCX0LDQtNCw0LnRgtC1INC00L7QsdGA0L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1LlxuIgotIlxuIgotItCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg0YHQu9C10LTQvdC40Y8g0YTQvtGA0LzQsNGCOlxuIgotIlxuIgotIuKXjyDQn9GK0YDQstC4INGA0LXQtDog0L7Qv9C40YHQsNC90LjQtSDQsiDQtdC00L3QviDQuNC30YDQtdGH0LXQvdC40LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAuXG4iCi0i4pePINCS0YLQvtGA0Lgg0YDQtdC0OiDQv9GA0LDQt9C10L0uXG4iCi0i4pePINCe0YHRgtCw0L3QsNC70LjRgtC1INGA0LXQtNC+0LLQtTog0L7Qv9C40YjQtdGC0LUg0LfQsNGJ0L4g0YHQtSDQvdCw0LvQsNCz0LAg0YLQsNC30Lgg0L/RgNC+0LzRj9C90LAuXG4iCisi0L7Qv9GG0LjRj9GC0LAg0L/RgNC40LXQvNCwINGB0LvQtdC00L3QuNGC0LUg0LLQsNGA0LjQsNC90YLQuCDQt9CwINCw0LvQs9C+0YDQuNGC0YrQvCDQt9CwINGA0LDQt9C70LjQutC4OiDigJ5teWVyc+KAnCAo0L/QviAiCisi0JzQsNC50LXRgNGBKSwg4oCebWluaW1hbOKAnCAo0LzQuNC90LjQvNC40LfQuNGA0LDQvdC1INC90LAg0YDQsNC30LvQuNC60LjRgtC1KSwg4oCecGF0aWVuY2XigJwgKNC/0LDRgdC40LDQvdGBKSDQuCAiCisi4oCeaGlzdG9ncmFt4oCcICjRhdC40YHRgtC+0LPRgNCw0LzQtdC9KSIKIAotIzogbGliL2NvbW1pdC50Y2w6MjM1Ci1tc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCi1tc2dzdHIgItCY0LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDQutGD0LrQsNGC0LAg0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC14oCmIgorIzogZGlmZi5jOjUwMjAgZGlmZi5jOjUwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCB0byAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LDRgNCz0YPQvNC10L3RgiDQutGK0Lwg4oCeJXPigJwiCiAKLSM6IGxpYi9jb21taXQudGNsOjI1MAotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDQtSDQvtGC0YXQstGK0YDQu9C10L3QviDQvtGCINC60YPQutCw0YLQsCDQv9GA0LXQtNC4INC/0L7QtNCw0LLQsNC90LUuIgorIzogZGlmZi5jOjUxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgItC90LXRgNCw0LfQv9C+0LfQvdCw0YIg0L/QsNGA0LDQvNC10YLRitGAINC60YrQvCDQvtC/0YbQuNGP0YLQsCDigJ4tLXN1Ym1vZHVsZeKAnDog4oCeJXPigJwiCiAKLSM6IGxpYi9jb21taXQudGNsOjI2OQorIzogZGlmZi5jOjUyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0td29yZC1kaWZmIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LDRgNCz0YPQvNC10L3RgiDQutGK0Lwg4oCeLS13b3JkLWRpZmbigJw6IOKAniVz4oCcIgorCisjOiBkaWZmLmM6NTI1NworbXNnaWQgIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIgorbXNnc3RyICLQpNC+0YDQvNCw0YIg0L3QsCDQuNC30YXQvtC00LAg0LfQsCDRgNCw0LfQu9C40LrQuNGC0LUiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC60YDRitC/0LrQuCIKKworIzogZGlmZi5jOjUyNjIgYnVpbHRpbi9sb2cuYzoxNzMKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgItCR0KDQntCZIgorCisjOiBkaWZmLmM6NTI2OCBkaWZmLmM6NTI3MQorbXNnaWQgImdlbmVyYXRlIGRpZmZzIHdpdGggPG4+IGxpbmVzIGNvbnRleHQiCittc2dzdHIgItGE0LDQudC70L7QstC10YLQtSDRgSDRgNCw0LfQu9C40LrQuCDQtNCwINGB0LAg0YEg0LrQvtC90YLQtdC60YHRgiDRgSDRgtCw0LrRitCyINCR0KDQntCZINGA0LXQtNC+0LLQtSIKKworIzogZGlmZi5jOjUyNzMKK21zZ2lkICJnZW5lcmF0ZSB0aGUgZGlmZiBpbiByYXcgZm9ybWF0IgorbXNnc3RyICLRhNCw0LnQu9C+0LLQtdGC0LUg0YEg0YDQsNC30LvQuNC60Lgg0LTQsCDRgdCwINCyINGB0YPRgNC+0LIg0YTQvtGA0LzQsNGCIgorCisjOiBkaWZmLmM6NTI3NgorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXJhdyciCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni1wIC0tc3RhdOKAnCIKKworIzogZGlmZi5jOjUyODAKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1zdGF0JyIKK21zZ3N0ciAi0L/RgdC10LLQtNC+0L3QuNC8INC90LAg4oCeLXAgLS1zdGF04oCcIgorCisjOiBkaWZmLmM6NTI4NAorbXNnaWQgIm1hY2hpbmUgZnJpZW5kbHkgLS1zdGF0IgorbXNnc3RyICLigJ4tLXN0YXTigJwg0LLRitCyINGE0L7RgNC80LDRgiDQt9CwINGH0LXRgtC10L3QtSDQvtGCINC/0YDQvtCz0YDQsNC80LAiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC/0L7RgdC70LXQtNC90LjRjyDRgNC10LQg0L3QsCDigJ4tLXN0YXTigJwiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICLQn9CQ0KDQkNCc0JXQotCq0KBfMSwg0J/QkNCg0JDQnNCV0KLQqtCgXzIsIOKApiIKKworIzogZGlmZi5jOjUyOTAKIG1zZ2lkICIiCi0iWW91IGFyZSBhYm91dCB0byBjb21taXQgb24gYSBkZXRhY2hlZCBoZWFkLiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICIKLSJ0aGluZyB0byBkbyBiZWNhdXNlIGlmIHlvdSBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2ggeW91IHdpbGwgbG9zZSB5b3VyICIKLSJjaGFuZ2VzIGFuZCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvIHJldHJpZXZlIHRoZW0gbGF0ZXIgZnJvbSB0aGUgcmVmbG9nLiBZb3UgIgotInNob3VsZCBwcm9iYWJseSBjYW5jZWwgdGhpcyBjb21taXQgYW5kIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gY29udGludWUuXG4iCi0iIFxuIgotIiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcHJvY2VlZCB3aXRoIHlvdXIgQ29tbWl0PyIKKyJvdXRwdXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZWxhdGl2ZSBhbW91bnQgb2YgY2hhbmdlcyBmb3IgZWFjaCBzdWItZGlyZWN0b3J5IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQv9GA0LXQtNC10LvQtdC90LjQtdGC0L4g0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LfQsCDQstGB0Y/QutCwINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBkaWZmLmM6NTI5NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorbXNnc3RyICLQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDigJ4tLWRpcnN0YXQ9Y3VtdWxhdGl2ZeKAnCIKKworIzogZGlmZi5jOjUyOTgKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAi0L/RgdC10LLQtNC+0L3QuNC8INC90LAg4oCeLS1kaXJzdGF0PdCk0JDQmdCb0J7QktCVLNCf0JDQoNCQ0JzQldCi0KrQoF8xLNCf0JDQoNCQ0JzQldCi0KrQoF8yLOKApuKAnCIKKworIzogZGlmZi5jOjUzMDIKK21zZ2lkICJ3YXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIGNvbmZsaWN0IG1hcmtlcnMgb3Igd2hpdGVzcGFjZSBlcnJvcnMiCiBtc2dzdHIgIiIKLSLQqdC1INC/0L7QtNCw0LTQtdGC0LUg0LrRitC8INC90LXRgdCy0YrRgNC30LDQvSwg0L7RgtC00LXQu9GQ0L0g0YPQutCw0LfQsNGC0LXQuyDigJ5IRUFE4oCcLiDQotC+0LLQsCDQtSDQvtC/0LDRgdC90L4sINC30LDRidC+0YLQviAiCi0i0L/RgNC4INC/0YDQtdC80LjQvdCw0LLQsNC90LXRgtC+INC60YrQvCDQutC70L7QvSDRidC1INC30LDQs9GD0LHQuNGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INGB0LgsINC60LDRgtC+INC10LTQuNC90YHRgtCy0LXQvdC40Y/RgiDQvdCw0YfQuNC9ICIKLSLQtNCwINCz0Lgg0LLRitGA0L3QtdGC0LUg0YnQtSDQtSDRh9GA0LXQtyDQttGD0YDQvdCw0LvQsCDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUgKHJlZmxvZykuINCd0LDQuS3QstC10YDQvtGP0YLQvdC+INGC0YDRj9Cx0LLQsCAiCi0i0LTQsCDQvdC1INC/0YDQsNCy0LjRgtC1INGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUsINCwINC00LAg0YHRitC30LTQsNC00LXRgtC1INC90L7QsiDQutC70L7QvSwg0L/RgNC10LTQuCDQtNCwINC/0YDQvtC00YrQu9C20LjRgtC1LlxuIgotIiBcbiIKLSLQodC40LPRg9GA0L3QuCDQu9C4INGB0YLQtSwg0YfQtSDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30LLRitGA0YjQuNGC0LUg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1PyIKKyLQv9GA0LXQtNGD0L/RgNC10LbQtNCw0LLQsNC90LUsINCw0LrQviDQv9GA0L7QvNC10L3QuNGC0LUg0LLQvtC00Y/RgiDQtNC+INC80LDRgNC60LXRgNC4INC30LAg0LrQvtC90YTQu9C40LrRgiDQuNC70Lgg0LPRgNC10YjQutC4INCyICIKKyLQv9GA0LDQt9C90LjRgtC1INC30L3QsNGG0LgiCiAKLSM6IGxpYi9jb21taXQudGNsOjI5MAotbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICLQmNC30L/RitC70L3Rj9Cy0LDQvdC1INC90LAg0LrRg9C60LDRgtCwINC30LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QteKApiIKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAiIgorItGB0YrQutGA0LDRgtC10L3QviDRgNC10LfRjtC80LUg0L3QsCDRgdGK0LfQtNCw0LTQtdC90LjRgtC1LCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LjRgtC1INC4INGE0LDQudC70L7QstC10YLQtSDRgSDQv9GA0L7QvNGP0L3QsCDQvdCwICIKKyLRgNC10LbQuNC80LAg0L3QsCDQtNC+0YHRgtGK0L8iCiAKLSM6IGxpYi9jb21taXQudGNsOjMwNQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgotbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDQtSDQvtGC0YXQstGK0YDQu9C10L3QviDQvtGCINC60YPQutCw0YLQsCDQt9CwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L/RgNC4INC/0L7QtNCw0LLQsNC90LUuIgorIzogZGlmZi5jOjUzMDgKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDQv9GA0L7QvNC10L3QtdC90LjRgtC1INGE0LDQudC70L7QstC1IgogCi0jOiBsaWIvY29tbWl0LnRjbDozMTgKLW1zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCi1tc2dzdHIgItCf0L7QtNCw0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LXigKYiCisjOiBkaWZmLmM6NTMxMQorbXNnaWQgInNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC40LzQtdC90LDRgtCwINC4INGB0YLQsNGC0LjRgdGC0LjQutCw0YLQsCDQt9CwINC/0YDQvtC80LXQvdC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCiAKLSM6IGxpYi9jb21taXQudGNsOjMzNAotbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC00YrRgNCy0L7RgtC+ICh3cml0ZS10cmVlKToiCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICLQqNCY0KDQntCn0JjQndCQWyzQmNCc0JUt0KjQmNCg0J7Qp9CY0J3QkFss0JHQoNCe0JldXSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzM1IGxpYi9jb21taXQudGNsOjM4MiBsaWIvY29tbWl0LnRjbDo0MDMKLW1zZ2lkICJDb21taXQgZmFpbGVkLiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0L7QtNCw0LLQsNC90LUuIgorIzogZGlmZi5jOjUzMTQKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LAg0LfQsCDQv9GA0L7QvNC10L3QuNGC0LUiCiAKLSM6IGxpYi9jb21taXQudGNsOjM1MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCi1tc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC40LfQs9C70LXQttC00LAg0L/QvtCy0YDQtdC00LXQvdC+IgorIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICLQqNCY0KDQntCn0JjQndCQIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNTcKKyM6IGRpZmYuYzo1MzE3Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICLRgdGC0LDRgtC40YHRgtC40LrQsCDRgSDRgtCw0LrQsNCy0LAg0KjQmNCg0J7Qp9CY0J3QkCDQt9CwINC/0YDQvtC80LXQvdC40YLQtSIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAi0YHRgtCw0YLQuNGB0YLQuNC60LAg0LfQsCDQv9GA0L7QvNC10L3QuNGC0LUg0YEg0YLQsNC60LDQstCwINCo0JjQoNCe0KfQmNCd0JAg0L3QsCDQuNC80LXQvdCw0YLQsCIKKworIzogZGlmZi5jOjUzMjMKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgItGB0YLQsNGC0LjRgdGC0LjQutCwINC30LAg0L/RgNC+0LzQtdC90LjRgtC1INGBINGC0LDQutCw0LLQsCDQqNCY0KDQntCn0JjQndCQINC90LAg0LPRgNCwzIDRhNCwIgorCisjOiBkaWZmLmM6NTMyNQorbXNnaWQgIjxjb3VudD4iCittc2dzdHIgItCR0KDQntCZIgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC90LAg0JHQoNCe0Y8g0L3QsCDRgNC10LTQvtCy0LXRgtC1INCyINGB0YLQsNGC0LjRgdGC0LjQutCw0YLQsCDQt9CwINC/0YDQvtC80LXQvdC40YLQtSIKKworIzogZGlmZi5jOjUzMjkKK21zZ2lkICJnZW5lcmF0ZSBjb21wYWN0IHN1bW1hcnkgaW4gZGlmZnN0YXQiCittc2dzdHIgItC60YDQsNGC0LrQviDRgNC10LfRjtC80LUg0LIg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwINC30LAg0L/RgNC+0LzQtdC90LjRgtC1IgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC00LLQvtC40YfQvdCwINGA0LDQt9C70LjQutCwINCy0YrQsiDQstC40LQg0LfQsCDQv9GA0LjQu9Cw0LPQsNC90LUiCisKKyM6IGRpZmYuYzo1MzM1Cittc2dpZCAic2hvdyBmdWxsIHByZS0gYW5kIHBvc3QtaW1hZ2Ugb2JqZWN0IG5hbWVzIG9uIHRoZSBcImluZGV4XCIgbGluZXMiCittc2dzdHIgIiIKKyLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQv9GK0LvQvdC40YLQtSDQuNC80LXQvdCwINC90LAg0L7QsdC10LrRgtC4INCyINGA0LXQtNC+0LLQtdGC0LUg0LfQsCDQuNC90LTQtdC60YHQsCDQv9GA0Lgg0LLQsNGA0LjQsNC90YLQuNGC0LUgIgorItC/0YDQtdC00Lgg0Lgg0YHQu9C10LQg0L/RgNC+0LzRj9C90LDRgtCwIgorCisjOiBkaWZmLmM6NTMzNworbXNnaWQgInNob3cgY29sb3JlZCBkaWZmIgorbXNnc3RyICLRgNCw0LfQu9C40LrQuCDQsiDRhtCy0Y/RgiIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgItCS0JjQlCIKKworIzogZGlmZi5jOjUzMzkKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKIG1zZ3N0ciAiIgotItCd0Y/QvNCwINC/0YDQvtC80LXQvdC4INC30LAg0L/QvtC00LDQstCw0L3QtS5cbiIKLSJcbiIKLSLQkiDRgtC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1INC90LUg0YHQsCDQv9GA0L7QvNC10L3Rj9C90Lgg0L3QuNC60LDQutCy0Lgg0YTQsNC50LvQvtCy0LUsINCwINC4INC90LUg0LUg0L/QvtC00LDQstCw0L3QtSDRgdGK0YEgIgotItGB0LvQuNCy0LDQvdC1LlxuIgotIlxuIgotItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQt9Cw0L/QvtGH0L3QtSDQvdC+0LLQsCDQv9GA0L7QstC10YDQutCwLlxuIgorItCz0YDQtdGI0LrQuNGC0LUg0LIg0L/RgNCw0LfQvdC40YLQtSDQt9C90LDRhtC4INC00LAg0YHQtSDRg9C60LDQt9Cy0LDRgiDQsiDRgNC10LTQvtCy0LXRgtC1INC30LAg0LrQvtC90YLQtdC60YHRgtCwLCDQstCw0YDQuNCw0L3RgtC40YLQtSAiCisi0L/RgNC10LTQuCDQuCDRgdC70LXQtCDRgNCw0LfQu9C40LrQsNGC0LAsIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNjQKLW1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCi1tc2dzdHIgItCd0Y/QvNCwINC/0YDQvtC80LXQvdC4INC30LAg0L/QvtC00LDQstCw0L3QtS4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM4MQotbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCi1tc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9C+0LTQsNCy0LDQvdC1INC90LAg0LTRitGA0LLQvtGC0L4gKGNvbW1pdC10cmVlKToiCi0KLSM6IGxpYi9jb21taXQudGNsOjQwMgotbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKLW1zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSAodXBkYXRlLXJlZik6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo0OTUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCi1tc2dzdHIgItCj0YHQv9C10YjQvdC+INC/0L7QtNCw0LLQsNC90LUgJXM6ICVzIgotCi0jOiBsaWIvY29uc29sZS50Y2w6NTkKLW1zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgdC1INC40LfQstGK0YDRiNCy0LAg0LTQtdC50YHRgtCy0LjQtSwg0LjQt9GH0LDQutCw0LnRgtC14oCmIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MTg2Ci1tc2dpZCAiU3VjY2VzcyIKLW1zZ3N0ciAi0KPRgdC/0LXRhSIKLQotIzogbGliL2NvbnNvbGUudGNsOjIwMAotbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKLW1zZ3N0ciAi0JPRgNC10YjQutCwOiDQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0MgotbXNnaWQgIk51bWJlciBvZiBsb29zZSBvYmplY3RzIgotbXNnc3RyICLQkdGA0L7QuSDQvdC10L/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQzCi1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgItCU0LjRgdC60L7QstC+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQviDQt9Cw0LXRgtC+INC+0YIg0L3QtdC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NAotbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAi0JHRgNC+0Lkg0L/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ1Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgotbXNnc3RyICLQkdGA0L7QuSDQv9Cw0LrQtdGC0LgiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgItCU0LjRgdC60L7QstC+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQviDQt9Cw0LXRgtC+INC+0YIg0L/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ3Ci1tc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKLW1zZ3N0ciAi0J/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4INC30LAg0L7QutCw0YHRgtGA0Y/QvdC1IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ4Ci1tc2dpZCAiR2FyYmFnZSBmaWxlcyIKLW1zZ3N0ciAi0KTQsNC50LvQvtCy0LUg0LfQsCDQsdC+0LrQu9GD0LrQsCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo1NyBsaWIvb3B0aW9uLnRjbDoxODIgbGliL29wdGlvbi50Y2w6MTk3IGxpYi9vcHRpb24udGNsOjIyMAotIzogbGliL29wdGlvbi50Y2w6MjgyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXM6IgotbXNnc3RyICIlczoiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICIlcyAoJXMpOiDQodGC0LDRgtC40YHRgtC40LrQsCDQvdCwINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90LgiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKLW1zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgotbXNnc3RyICLQmtC+0LzQv9GA0LXRgdC40YDQsNC90LUg0L3QsCDQsdCw0LfQsNGC0LAg0YEg0LTQsNC90L3QuCDQt9CwINC+0LHQtdC60YLQuNGC0LUiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINCx0LDQt9Cw0YLQsCDRgSDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSDRgSDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDigJ5mc2NrLW9iamVjdHPigJwiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6NTM0MgogbXNnaWQgIiIKLSJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCi0iXG4iCi0iVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCi0idGhlIGRhdGFiYXNlLlxuIgotIlxuIgotIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorImRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycyBpbiAtLXJhdyBvciAiCisiLS1udW1zdGF0IgogbXNnc3RyICIiCi0i0JIg0YLQvtCy0LAg0YXRgNCw0L3QuNC70LjRidC1INCyINC80L7QvNC10L3RgtCwINC40LzQsCDQutGK0LwgJWkg0L3QtdC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuC5cbiIKLSJcbiIKLSLQl9CwINC00L7QsdGA0LAg0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70L3QvtGB0YIg0YHQtSDQv9GA0LXQv9C+0YDRitGH0LLQsCDQtNCwINC60L7QvNC/0YDQtdGB0LjRgNCw0YLQtSDQsdCw0LfQsNGC0LAg0YEg0LTQsNC90L3QuCDQt9CwICIKLSLQvtCx0LXQutGC0LjRgtC1LlxuIgotIlxuIgotItCU0LAg0YHQtSDQt9Cw0L/QvtGH0L3QtSDQu9C4INC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtdGC0L4/IgorItCx0LXQtyDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwLiAg0JTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LDRgiDQvdGD0LvQtdCy0Lgg0LHQsNC50YLQvtCy0LUg0LfQsCDRgNCw0LfQtNC10LvQuNGC0LXQu9C4ICIKKyLQvdCwINC/0L7Qu9C10YLQsCDQsiDQuNC30YXQvtC00LAg0L/RgNC4INC/0L7Qu9C30LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLXJhd+KAnCDQuNC70Lgg4oCeLS1udW1zdGF04oCcIgogCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QuCDQtNCw0L3QvdC4INC+0YIgR2l0OiAlcyIKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgItCf0KDQldCk0JjQmtChIgogCi0jOiBsaWIvZGlmZi50Y2w6NzcKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo1MzQ2Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mIFwiYS9cIiIKK21zZ3N0ciAi0L/RgNC10YTQuNC60YEg0LLQvNC10YHRgtC+IOKAnmEv4oCcINC30LAg0LjQt9GC0L7Rh9C90LjQuiIKKworIzogZGlmZi5jOjUzNDkKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBwcmVmaXggaW5zdGVhZCBvZiBcImIvXCIiCittc2dzdHIgItC/0YDQtdGE0LjQutGBINCy0LzQtdGB0YLQviDigJ5iL+KAnCDQt9CwINGG0LXQuyIKKworIzogZGlmZi5jOjUzNTIKK21zZ2lkICJwcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0IgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LTQvtC/0YrQu9C90LjRgtC10LvQtdC9INC/0YDQtdGE0LjQutGBINC30LAg0LLRgdC10LrQuCDRgNC10LQg0L3QsCDQuNC30YXQvtC00LAiCisKKyM6IGRpZmYuYzo1MzU1Cittc2dpZCAiZG8gbm90IHNob3cgYW55IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcmVmaXgiCittc2dzdHIgItCx0LXQtyDQv9GA0LXRhNC40LrRgSDQt9CwINC40LfRgtC+0YfQvdC40LrQsCDQuCDRhtC10LvRgtCwIgorCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQutC+0L3RgtC10LrRgdGCINC80LXQttC00YMg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QuNGC0LUg0L/QsNGA0YfQtdGC0LAg0YEg0YDQsNC30LvQuNC60Lgg0L7RgiDRg9C60LDQt9Cw0L3QuNGPICIKKyLQkdCg0J7QmSDRgNC10LTQvtCy0LUiCisKKyM6IGRpZmYuYzo1MzYyIGRpZmYuYzo1MzY3IGRpZmYuYzo1MzcyCittc2dpZCAiPGNoYXI+IgorbXNnc3RyICLQl9Cd0JDQmiIKKworIzogZGlmZi5jOjUzNjMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbnN0ZWFkIG9mICcrJyIKK21zZ3N0ciAi0LfQvdCw0Log0LLQvNC10YHRgtC+IOKAnivigJwg0LfQsCDQvdC+0LIg0LLQsNGA0LjQsNC90YIg0L3QsCDRgNC10LQiCisKKyM6IGRpZmYuYzo1MzY4Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICLQt9C90LDQuiDQstC80LXRgdGC0L4g4oCeLeKAnCDQt9CwINGB0YLQsNGAINCy0LDRgNC40LDQvdGCINC90LAg0YDQtdC0IgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgItC30L3QsNC6INCy0LzQtdGB0YLQviDigJ4g4oCcINC30LAg0LrQvtC90YLQtdC60YHRgiIKKworIzogZGlmZi5jOjUzNzYKK21zZ2lkICJEaWZmIHJlbmFtZSBvcHRpb25zIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0LfQsCDRgNCw0LfQu9C40LrQuCDRgSDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUiCisKKyM6IGRpZmYuYzo1Mzc3Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICLQnNCY0J3QmNCc0JDQm9CV0J1fJV/Qn9Cg0J7QnNCv0J3QkF/Ql9CQX9CY0JfQotCe0KfQndCY0JpbL9Cc0JDQmtCh0JjQnNCQ0JtF0J1fJV/Qn9Cg0J7QnNCv0J3QkF/Ql9CQX9CX0JDQnNCv0J3QkF0iCisKKyM6IGRpZmYuYzo1Mzc4Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgIiIKKyLQt9Cw0LzQtdGB0YLQstCw0L3QtSDQvdCwINC/0YrQu9C90LjRgtC1INC/0YDQvtC80LXQvdC4INGBINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGCINC+0YIg0LjQt9GC0YDQuNCy0LDQvdC1INC4INGB0YrQt9C00LDQstCw0L3QtSIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAi0LfQsNGB0LjRh9Cw0L3QtSDQvdCwINC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGP0YLQsCIKKworIzogZGlmZi5jOjUzODYKK21zZ2lkICJvbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcyIKK21zZ3N0ciAi0LHQtdC3INC/0YDQtdC00LLQsNGA0LjRgtC10LvQtdC9INCy0LDRgNC40LDQvdGCINC/0YDQuCDQuNC30YLRgNC40LLQsNC90LUiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAi0LfQsNGB0LjRh9Cw0L3QtSDQvdCwINC60L7Qv9C40YDQsNC90LjRj9GC0LAiCisKKyM6IGRpZmYuYzo1MzkzCittc2dpZCAidXNlIHVubW9kaWZpZWQgZmlsZXMgYXMgc291cmNlIHRvIGZpbmQgY29waWVzIgorbXNnc3RyICLRgtGK0YDRgdC10L3QtSDQvdCwINC60L7Qv9C40YDQsNC90L4g0Lgg0L7RgiDQvdC10L/RgNC+0LzQtdC90LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogZGlmZi5jOjUzOTUKK21zZ2lkICJkaXNhYmxlIHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgItCx0LXQtyDRgtGK0YDRgdC10L3QtSDQvdCwINC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGPIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICLQv9GA0LDQt9C90Lgg0L7QsdC10LrRgtC4INC60LDRgtC+INC40LfRgtC+0YfQvdC40Log0L/RgNC4INC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGPIgorCisjOiBkaWZmLmM6NTQwMAorbXNnaWQgImNvbnRpbnVlIGxpc3RpbmcgdGhlIGhpc3Rvcnkgb2YgYSBmaWxlIGJleW9uZCByZW5hbWVzIgorbXNnc3RyICIiCisi0L/RgNC+0LTRitC70LbQsNCy0LDQvdC1INC90LAg0LjQt9Cy0LXQttC00LDQvdC10YLQviDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDigJQg0LHQtdC3INC+0YLRgNGP0LfQstCw0L3QtdGC0L4g0L/RgNC4INC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGPICIKKyLQvdCwINGE0LDQudC7IgorCisjOiBkaWZmLmM6NTQwMwogbXNnaWQgIiIKLSJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKLSJcbiIKLSJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCi0idGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKLSJ0aGUgc2FtZSBzdGF0ZS4iCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgogbXNnc3RyICIiCi0i0J3QtSDRgdCwINC+0YLQutGA0LjRgtC4INGA0LDQt9C70LjQutC4LlxuIgotIlxuIgotItCd0Y/QvNCwINC/0YDQvtC80LXQvdC4INCyIOKAniVz4oCcLlxuIgotIlxuIgotItCS0YDQtdC80LXRgtC+INC90LAg0L/RgNC+0LzRj9C90LAg0L3QsCDRhNCw0LnQu9CwINC1INCx0LjQuyDQt9Cw0LTQsNC00LXQvSDQvtGCINC00YDRg9Cz0LAg0L/RgNC+0LPRgNCw0LzQsCwg0L3QviDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4gIgotItC80YMg0L3QtSDQtSDQv9GA0L7QvNC10L3QtdC90L4uXG4iCi0iXG4iCi0i0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRidC1INC30LDQv9C+0YfQvdC1INC90L7QstCwINC/0YDQvtCy0LXRgNC60LAg0LTQsNC70Lgg0L3Rj9C80LAg0LTRgNGD0LPQuCDRhNCw0LnQu9C+0LLQtSDQsiDRgtC+0LLQsCAiCi0i0YHRitGB0YLQvtGP0L3QuNC1LiIKKyLQsdC10Lcg0LfQsNGB0LjRh9Cw0L3QtSDQvdCwINC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGPL9C60L7Qv9C40YDQsNC90LjRjywg0LDQutC+INCx0YDQvtGP0YIg0LjQvCDQvdCw0LTQstC40YjQsNCy0LAg0YLQsNC30Lgg0YHRgtC+0LnQvdC+0YHRgiIKIAotIzogbGliL2RpZmYudGNsOjExNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKLW1zZ3N0ciAi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0YDQsNC30LvQuNC60LjRgtC1INCyIOKAniVz4oCc4oCmIgorIzogZGlmZi5jOjU0MDUKK21zZ2lkICJEaWZmIGFsZ29yaXRobSBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INC60YrQvCDQsNC70LPQvtGA0LjRgtGK0LzQsCDQt9CwINGA0LDQt9C70LjQutC4IgogCi0jOiBsaWIvZGlmZi50Y2w6MTQzCisjOiBkaWZmLmM6NTQwNworbXNnaWQgInByb2R1Y2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC90LAg0LLRitC30LzQvtC20L3QviDQvdCw0Lkt0LzQsNC70LrQsCDRgNCw0LfQu9C40LrQsCIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAi0LHQtdC3INC/0YDQvtC80LXQvdC4INCyINC/0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCDQv9GA0Lgg0YHRgNCw0LLQvdGP0LLQsNC90LUg0L3QsCDRgNC10LTQvtCy0LUiCisKKyM6IGRpZmYuYzo1NDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gYW1vdW50IG9mIHdoaXRlc3BhY2UiCittc2dzdHIgItCx0LXQtyDQv9GA0L7QvNC10L3QuCDQsiDQv9GA0LDQt9C90LjRgtC1INC30L3QsNGG0LgiCisKKyM6IGRpZmYuYzo1NDE2Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wiCittc2dzdHIgItCx0LXQtyDQv9GA0L7QvNC10L3QuCDQsiDQv9GA0LDQt9C90LjRgtC1INC30L3QsNGG0Lgg0LIg0LrRgNCw0Y8g0L3QsCDRgNC10LTQvtCy0LXRgtC1IgorCisjOiBkaWZmLmM6NTQxOQorbXNnaWQgImlnbm9yZSBjYXJyaWVyLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUiCittc2dzdHIgItCx0LXQtyDQv9GA0L7QvNC10L3QuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC60YDQsNC5INC90LAg0YDQtdC0IgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgItCx0LXQtyDQv9GA0L7QvNC10L3QuCDQsiDRgNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INGB0LAg0LjQt9GG0Y/Qu9C+INC+0YIg0L/RgNCw0LfQvdC4INC30L3QsNGG0LgiCisKKyM6IGRpZmYuYzo1NDI1Cittc2dpZCAiaGV1cmlzdGljIHRvIHNoaWZ0IGRpZmYgaHVuayBib3VuZGFyaWVzIGZvciBlYXN5IHJlYWRpbmciCittc2dzdHIgIiIKKyLQtdCy0YDQuNGB0YLQuNC60LAg0LfQsCDQv9GA0LXQvNC10YHRgtCy0LDQvdC1INC90LAg0LPRgNCw0L3QuNGG0LjRgtC1INC90LAg0L/QsNGA0YfQtdGC0LDRgtCwINC30LAg0YPQu9C10YHQvdGP0LLQsNC90LUg0L3QsCDRh9C10YLQtdC90LXRgtC+IgorCisjOiBkaWZmLmM6NTQyOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LAg0YfRgNC10Lcg0LDQu9Cz0L7RgNC40YLRitC8INC30LAg0L/QvtC00YDQtdC00LHQsCDQutCw0YLQviDQv9Cw0YHQuNCw0L3RgSIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsCDQv9C+INGF0LjRgdGC0L7Qs9GA0LDQvNC90LjRjyDQsNC70LPQvtGA0LjRgtGK0LwiCisKKyM6IGRpZmYuYzo1NDM0Cittc2dpZCAiPGFsZ29yaXRobT4iCittc2dzdHIgItCQ0JvQk9Ce0KDQmNCi0KrQnCIKKworIzogZGlmZi5jOjU0MzUKK21zZ2lkICJjaG9vc2UgYSBkaWZmIGFsZ29yaXRobSIKK21zZ3N0ciAi0LjQt9Cx0L7RgCDQvdCwINCQ0JvQk9Ce0KDQmNCi0KrQnNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGRpZmYuYzo1NDM3Cittc2dpZCAiPHRleHQ+IgorbXNnc3RyICLQotCV0JrQodCiIgorCisjOiBkaWZmLmM6NTQzOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiYW5jaG9yZWQgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LAg0YfRgNC10Lcg0LDQu9Cz0L7RgNC40YLRitC80LAg0YHRitGBINC30LDQutC+0YLQstGP0L3QtSIKKworIzogZGlmZi5jOjU0NDAgZGlmZi5jOjU0NDkgZGlmZi5jOjU0NTIKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgItCg0JXQltCY0JwiCisKKyM6IGRpZmYuYzo1NDQxCittc2dpZCAic2hvdyB3b3JkIGRpZmYsIHVzaW5nIDxtb2RlPiB0byBkZWxpbWl0IGNoYW5nZWQgd29yZHMiCittc2dzdHIgIiIKKyLRgNCw0LfQu9C40LrQsCDQv9C+INC00YPQvNC4LCDQutCw0YLQviDRgdC1INC/0L7Qu9C30LLQsCDRgtC+0LfQuCDQoNCV0JbQmNCcINC30LAg0L7RgtC00LXQu9GP0L3QtdGC0L4g0L3QsCDQv9GA0L7QvNC10L3QtdC90LjRgtC1INC00YPQvNC4IgorCisjOiBkaWZmLmM6NTQ0MyBkaWZmLmM6NTQ0NiBkaWZmLmM6NTQ5MQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgItCg0JXQk9Cj0JvQr9Cg0JXQnV/QmNCX0KDQkNCXIgorCisjOiBkaWZmLmM6NTQ0NAorbXNnaWQgInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIKK21zZ3N0ciAi0KDQldCT0KPQm9Cv0KDQldCdX9CY0JfQoNCQ0Jcg0LfQsCDRgNCw0LfQtNC10LvRj9C90LUg0L/QviDQtNGD0LzQuCIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PdCg0JXQk9Cj0JvQr9Cg0JXQnV/QmNCX0KDQkNCX4oCcIgorCisjOiBkaWZmLmM6NTQ1MAorbXNnaWQgIm1vdmVkIGxpbmVzIG9mIGNvZGUgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkiCittc2dzdHIgItGA0LDQt9C70LjRh9C10L0g0YbQstGP0YIg0LfQsCDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GA0LXQvNC10YHRgtC10L3QuNGC0LUg0YDQtdC00L7QstC1IgorCisjOiBkaWZmLmM6NTQ1MworbXNnaWQgImhvdyB3aGl0ZSBzcGFjZXMgYXJlIGlnbm9yZWQgaW4gLS1jb2xvci1tb3ZlZCIKK21zZ3N0ciAiIgorItGA0LXQttC40Lwg0LfQsCDQv9GA0LXRgdC60LDRh9Cw0L3QtdGC0L4g0L3QsCDQv9GA0LDQt9C90LjRgtC1INC30L3QsNGG0Lgg0L/RgNC4INC30LDQtNCw0LLQsNC90LXRgtC+INC90LAg4oCeLS1jb2xvci1tb3ZlZOKAnCIKKworIzogZGlmZi5jOjU0NTYKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgItCU0YDRg9Cz0Lgg0L7Qv9GG0LjQuCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBkaWZmLmM6NTQ1OAorbXNnaWQgIndoZW4gcnVuIGZyb20gc3ViZGlyLCBleGNsdWRlIGNoYW5nZXMgb3V0c2lkZSBhbmQgc2hvdyByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiIgorItC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtSDQvtGCINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNGPINC00LAg0YHQtSDQv9GA0LXQvdC10LHRgNC10LPQstCw0YIg0YDQsNC30LvQuNC60LjRgtC1INC40LfQstGK0L0g0L3QtdGPINC4INC00LAgIgorItGB0LUg0L/QvtC70LfQstCw0YIg0L7RgtC90L7RgdC40YLQtdC70L3QuCDQv9GK0YLQuNGJ0LAiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgItC+0LHRgNCw0LHQvtGC0LrQsCDQvdCwINCy0YHQuNGH0LrQuCDRhNCw0LnQu9C+0LLQtSDQutCw0YLQviDRgtC10LrRgdGC0L7QstC4IgorCisjOiBkaWZmLmM6NTQ2NAorbXNnaWQgInN3YXAgdHdvIGlucHV0cywgcmV2ZXJzZSB0aGUgZGlmZiIKK21zZ3N0ciAi0YDQsNC30LzRj9C90LAg0L3QsCDQtNCy0LDRgtCwINCy0YXQvtC00LAg4oCUINC+0LHRgNGK0YnQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQsNGC0LAiCisKKyM6IGRpZmYuYzo1NDY2Cittc2dpZCAiZXhpdCB3aXRoIDEgaWYgdGhlcmUgd2VyZSBkaWZmZXJlbmNlcywgMCBvdGhlcndpc2UiCittc2dzdHIgIiIKKyLQt9Cw0LLRitGA0YjQstCw0L3QtSDRgSDQutC+0LQg0LfQsCDRgdGK0YHRgtC+0Y/QvdC40LUgMSDQv9GA0Lgg0L3QsNC70LjRh9C40LXRgtC+INC90LAg0YDQsNC30LvQuNC60LgsINCwINCyINC/0YDQvtGC0LjQstC10L0gIgorItGB0LvRg9GH0LDQuSDigJQg0YEgMCIKKworIzogZGlmZi5jOjU0NjgKK21zZ2lkICJkaXNhYmxlIGFsbCBvdXRwdXQgb2YgdGhlIHByb2dyYW0iCittc2dzdHIgItCx0LXQtyDQstGB0Y/QutCw0LrRitCyINC40LfRhdC+0LQg0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCIKKworIzogZGlmZi5jOjU0NzAKK21zZ2lkICJhbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZCIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LLRitC90YjQvdCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZGlmZi5jOjU0NzIKK21zZ2lkICJydW4gZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzIgorbXNnc3RyICIiCisi0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQstGK0L3RiNC90Lgg0L/RgNC+0LPRgNCw0LzQuC3RhNC40LvRgtGA0Lgg0L/RgNC4INGB0YDQsNCy0L3QtdC90LjQtdGC0L4g0L3QsCDQtNCy0L7QuNGH0L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogZGlmZi5jOjU0NzQKK21zZ2lkICI8d2hlbj4iCittc2dzdHIgItCa0J7Qk9CQIgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0L/QvtC00LzQvtC00YPQu9C40YLQtSDQv9GA0Lgg0LjQt9Cy0LXQttC00LDQvdC10YLQviDQvdCwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogZGlmZi5jOjU0NzgKK21zZ2lkICI8Zm9ybWF0PiIKK21zZ3N0ciAi0KTQntCg0JzQkNCiIgorCisjOiBkaWZmLmM6NTQ3OQorbXNnaWQgInNwZWNpZnkgaG93IGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgYXJlIHNob3duIgorbXNnc3RyICLQvdCw0YfQuNC9INC30LAg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INCyINC/0L7QtNC80L7QtNGD0LvQuNGC0LUiCisKKyM6IGRpZmYuYzo1NDgzCittc2dpZCAiaGlkZSAnZ2l0IGFkZCAtTicgZW50cmllcyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi0LHQtdC3INCy0LrQu9GO0YfQstCw0L3QtSDQsiDQuNC90LTQtdC60YHQsCDQvdCwINC30LDQv9C40YHQuNGC0LUsINC00L7QsdCw0LLQtdC90Lgg0YEg4oCeZ2l0IGFkZCAtTuKAnCIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi0LLQutC70Y7Rh9Cy0LDQvdC1INCyINC40L3QtNC10LrRgdCwINC90LAg0LfQsNC/0LjRgdC40YLQtSwg0LTQvtCx0LDQstC10L3QuCDRgSDigJ5naXQgYWRkIC1O4oCcIgorCisjOiBkaWZmLmM6NTQ4OAorbXNnaWQgIjxzdHJpbmc+IgorbXNnc3RyICLQndCY0JciCisKKyM6IGRpZmYuYzo1NDg5CiBtc2dpZCAiIgotIkxPQ0FMOiBkZWxldGVkXG4iCi0iUkVNT1RFOlxuIgotbXNnc3RyICIiCi0i0JvQntCa0JDQm9Cd0J46INC40LfRgtGA0LjRglxuIgotItCe0KLQlNCQ0JvQldCn0JXQndCeOlxuIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisic3RyaW5nIgorbXNnc3RyICLRgtGK0YDRgdC10L3QtSDQvdCwINGA0LDQt9C70LjQutC4LCDQutC+0LjRgtC+INC/0YDQvtC80LXQvdGP0YIg0LHRgNC+0Y8g0L3QsCDQv9C+0Y/QstCwINC90LAg0YPQutCw0LfQsNC90LjRgtC1INC90LjQt9C+0LLQtSIKIAotIzogbGliL2RpZmYudGNsOjE0OAorIzogZGlmZi5jOjU0OTIKIG1zZ2lkICIiCi0iUkVNT1RFOiBkZWxldGVkXG4iCi0iTE9DQUw6XG4iCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJyZWdleCIKIG1zZ3N0ciAiIgotItCe0KLQlNCQ0JvQldCn0JXQndCeOiDQuNC30YLRgNC40YJcbiIKLSLQm9Ce0JrQkNCb0J3QnjpcbiIKKyLRgtGK0YDRgdC10L3QtSDQvdCwINGA0LDQt9C70LjQutC4LCDQutC+0LjRgtC+INC/0YDQvtC80LXQvdGP0YIg0LHRgNC+0Y8g0L3QsCDQv9C+0Y/QstCwINC90LAg0L3QuNC30L7QstC10YLQtSwg0LrQvtC40YLQviDQvdCw0L/QsNGB0LLQsNGCICIKKyLQvdCwINGA0LXQs9GD0LvRj9GA0L3QuNGPINC40LfRgNCw0LciCiAKLSM6IGxpYi9kaWZmLnRjbDoxNTUKLW1zZ2lkICJMT0NBTDpcbiIKLW1zZ3N0ciAi0JvQntCa0JDQm9Cd0J46XG4iCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90Lgg0YEg4oCeLUfigJwv4oCeLVPigJwiCiAKLSM6IGxpYi9kaWZmLnRjbDoxNTgKLW1zZ2lkICJSRU1PVEU6XG4iCi1tc2dzdHIgItCe0KLQlNCQ0JvQldCn0JXQndCeOlxuIgorIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgItCd0JjQl9GK0YIg0LrRitC8IOKAni1T4oCcINC00LAg0YHQtSDRgtGK0LvQutGD0LLQsCDQutCw0YLQviDRgNCw0LfRiNC40YDQtdC9INGA0LXQs9GD0LvRj9GA0LXQvSDQuNC30YDQsNC3INC/0L4gUE9TSVgiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMjAgbGliL2RpZmYudGNsOjM1NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QutCw0LfQsNC9IgorIzogZGlmZi5jOjU1MDEKK21zZ2lkICJjb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0YPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQv9C+0LTRgNC10LTQsdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiDQuNC30YXQvtC00LAiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMjEKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDRgNC10LbQtNCw0L3QtSDQvdCwINGE0LDQudC7OiIKKyM6IGRpZmYuYzo1NTAyCittc2dpZCAiPG9iamVjdC1pZD4iCittc2dzdHIgItCY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgX9Cd0JBf0J7QkdCV0JrQoiIKIAotIzogbGliL2RpZmYudGNsOjIyNwotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0ICjQv9C+0LTQvNC+0LTRg9C7KSIKLQotIzogbGliL2RpZmYudGNsOjIzOQotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAi4pePINCU0LLQvtC40YfQtdC9INGE0LDQudC7ICjRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QtSDRgdC1INC/0L7QutCw0LfQstCwKS4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyNDQKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo1NTAzCiBtc2dpZCAiIgotIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCi0iKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCi1tc2dzdHIgIiIKLSLil48g0J3QtdGB0LvQtdC00LXQvdC40Y/RgiDRhNCw0LnQuyDQtSAlZCDQsdCw0LnRgtCwLlxuIgotIuKXjyDQn9C+0LrQsNC30LLQsNGCINGB0LUg0YHQsNC80L4g0L/RitGA0LLQuNGC0LUgJWQg0LHQsNC50YLQsC5cbiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorIm9iamVjdCIKK21zZ3N0ciAi0YLRitGA0YHQtdC90LUg0L3QsCDRgNCw0LfQu9C40LrQuCwg0LrQvtC40YLQviDQv9GA0L7QvNC10L3Rj9GCINCx0YDQvtGPINC90LAg0L/QvtGP0LLQsCDQvdCwINGD0LrQsNC30LDQvdC40Y8g0L7QsdC10LrRgiIKIAotIzogbGliL2RpZmYudGNsOjI1MAotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjU1MDUKK21zZ2lkICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCittc2dzdHIgIlsoQXxDfER8TXxSfFR8VXxYfEIp4oCmWypdXSIKKworIzogZGlmZi5jOjU1MDYKK21zZ2lkICJzZWxlY3QgZmlsZXMgYnkgZGlmZiB0eXBlIgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0YTQsNC50LvQvtCy0LXRgtC1INC/0L4g0LLQuNC0INGA0LDQt9C70LjQutCwIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAi0KTQkNCZ0JsiCisKKyM6IGRpZmYuYzo1NTA5Cittc2dpZCAiT3V0cHV0IHRvIGEgc3BlY2lmaWMgZmlsZSIKK21zZ3N0ciAi0JjQt9GF0L7QtCDQutGK0Lwg0YPQutCw0LfQsNC90LjRjyDRhNCw0LnQuyIKKworIzogZGlmZi5jOjYxNjQKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorItGC0YrRgNGB0LXQvdC10YLQviDQvdCwINC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGPINC90LAg0L7QsdC10LrRgtC4INGB0YrRh9C10YLQsNC90Lgg0YEg0L/RgNC+0LzQtdC90Lgg0YHQtSDQv9GA0LXRgdC60LDRh9CwINC/0L7RgNCw0LTQuCAiCisi0LzQvdC+0LPQvtGC0L4g0YTQsNC50LvQvtCy0LUuIgorCisjOiBkaWZmLmM6NjE2NworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorItGD0YHRgtCw0L3QvtCy0LXQvdC4INGB0LAg0YHQsNC80L4g0YLQvtGH0L3QuNGC0LUg0LrQvtC/0LjRjyDQvdCwINC/0YDQvtC80LXQvdC10L3QuNGC0LUg0L/RitGC0LjRidCwINC/0L7RgNCw0LTQuCDQvNC90L7Qs9C+0YLQviAiCisi0YTQsNC50LvQvtCy0LUuIgorCisjOiBkaWZmLmM6NjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgItC30LDQtNCw0LnRgtC1INC/0YDQvtC80LXQvdC70LjQstCw0YLQsCDigJ4lc+KAnCDQtNCwINC1INC/0L7QvdC1ICVkINC4INC+0YLQvdC+0LLQviDQuNC30L/RitC70L3QtdGC0LUg0LrQvtC80LDQvdC00LDRgtCwLiIKKworIzogZGlyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCittc2dzdHIgItC/0YrRgtGP0YIg4oCeJXPigJwg0L3QtSDRgdGK0LLQv9Cw0LTQsCDRgSDQvdC40LrQvtC5INGE0LDQudC7INCyIGdpdCIKKworIzogZGlyLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINGI0LDQsdC70L7QvTog4oCeJXPigJwiCisKKyM6IGRpci5jOjY4MiBkaXIuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm46ICclcyciCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0L7RgtGA0LjRhtCw0YLQtdC70LXQvSDRiNCw0LHQu9C+0L06IOKAniVz4oCcIgorCisjOiBkaXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAiIgorItGE0LDQudC70YrRgiDQvtC/0YDQtdC00LXQu9GP0Ykg0YfQsNGB0YLQuNGH0L3QvtGB0YLRgtCwINC90LAg0LjQt9GC0LXQs9C70LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0LzQvtC20LUg0LTQsCDQuNC80LAg0L/RgNC+0LHQu9C10Lw6ICIKKyLRiNCw0LHQu9C+0L3RitGCIOKAniVz4oCcINGB0LUg0L/QvtCy0YLQsNGA0Y8iCisKKyM6IGRpci5jOjcyNAorbXNnaWQgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCittc2dzdHIgItC40LfQutC70Y7Rh9Cy0LDQvdC1INC90LAg0L/RitGC0LXQstC+0LTQvdC+0YLQviDQvdCw0L/QsNGB0LLQsNC90LUiCisKKyM6IGRpci5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDQt9CwINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSAo0LrQsNGC0L4gZ2l0aWdub3JlKSIKKworIzogZGlyLmM6MjA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvdCwIgorCisjOiBkaXIuYzoyNDE1Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgItC40LzQtdGC0L4g0Lgg0LLQtdGA0YHQuNGP0YLQsCDQvdCwINGP0LTRgNC+0YLQviDQvdC1INCx0Y/RhdCwINC/0L7Qu9GD0YfQtdC90LgiCisKKyM6IGRpci5jOjI1MzkKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIiIKKyLQutC10YjRitGCINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQtSDQuNC30LrQu9GO0YfQtdC9INC90LAg0YLQsNC30Lgg0YHQuNGB0YLQtdC80LAg0LjQu9C4INC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LUiCisKKyM6IGRpci5jOjMzNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgItGE0LDQudC70YrRgiDRgSDQuNC90LTQtdC60YHQsCDQtSDQv9C+0LLRgNC10LTQtdC9INCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4g4oCeJXPigJwiCisKKyM6IGRpci5jOjMzODggZGlyLmM6MzM5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40LjRgtC1INC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNCw0YIg0YHRitC30LTQsNC00LXQvdC4IgorCisjOiBkaXIuYzozNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwIGdpdCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvNC40LPRgNC40YDQsCDQvtGCIOKAniVz4oCcINC00L4g4oCeJXPigJwiCisKKyM6IGVkaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgItCf0L7QtNGB0LrQsNC30LrQsDog0YfQsNC60LAg0YHQtSDRgNC10LTQsNC60YLQvtGA0YrRgiDQstC4INC00LAg0LfQsNGC0LLQvtGA0Lgg0YTQsNC50LvQsCDigKYlYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAi0KTQuNC70YLRgNC40YDQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4iCisKKyM6IGVudHJ5LmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCec3RhdOKAnCDQstGK0YDRhdGDINGE0LDQudC70LAg4oCeJXPigJwiCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQv9GK0YIg0LrRitC8INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQsCDQvtGCINC40LzQtdC90LAg4oCeJXPigJwiCisKKyM6IGVudmlyb25tZW50LmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgR0lUX0RJUiB0byAnJXMnIgorbXNnc3RyICJHSVRfRElSINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQtNCw0LTQtSDQtNCwINC1IOKAniVz4oCcIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtC4INC30LAg0LjQt9C/0YrQu9C90LXQvdC40LUg4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazog0L7Rh9Cw0LrQstCwINGB0LUg0L/Qu9C40YLRitC6INGB0L/QuNGB0YrQuiIKKworIzogZmV0Y2gtcGFjay5jOjE1MworbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiDRgdC70LXQtCDQv9C70LjRgtGK0Log0YHQv9C40YHRitC6INGB0LUg0L7Rh9Cw0LrQstCwINC40LfRh9C40YHRgtCy0LDRiSDQv9Cw0LrQtdGCIOKAnmZsdXNo4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorImdpdCBmZXRjaC1wYWNrOiDQvtGH0LDQutCy0LAg0YHQtSDigJ5BQ0vigJwv4oCeTkFL4oCcLCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC9INC40LfRh9C40YHRgtCy0LDRiSDQv9Cw0LrQtdGCIOKAnmZsdXNo4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6INC+0YfQsNC60LLQsCDRgdC1IOKAnkFDS+KAnC/igJ5OQUvigJwsINCwINCx0LUg0L/QvtC70YPRh9C10L3QviDigJ4lc+KAnCIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgItC90LXQstGK0LfQvNC+0LbQvdC+INC/0LjRgdCw0L3QtSDQutGK0Lwg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdGF0ZWxlc3MtcnBj4oCcINC40LfQuNGB0LrQstCwICDigJ5tdWx0aV9hY2tfZGV0YWlsZWTigJwiCisKKyM6IGZldGNoLXBhY2suYzozNTYgZmV0Y2gtcGFjay5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQv9C70LjRgtGK0Log0YDQtdC0OiDigJ4lc+KAnCIKKworIzogZmV0Y2gtcGFjay5jOjM2MiBmZXRjaC1wYWNrLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L3QtdC/0LvQuNGC0YrQuiDRgNC10LQ6IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQu9C40L/RgdCy0LAiCisKKyM6IGZldGNoLXBhY2suYzozNjcgZmV0Y2gtcGFjay5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAi0LPRgNC10YjQutCwINCyINC+0LHQtdC60YLQsDog4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzozNjkgZmV0Y2gtcGFjay5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2hhbGxvdyBmb3VuZDogJXMiCittc2dzdHIgItC90LUg0LUg0L7RgtC60YDQuNGCINC/0LvQuNGC0YrQuiDQvtCx0LXQutGCOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MiBmZXRjaC1wYWNrLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQv9C70LjRgtGK0Log0LjQu9C4INC90LUg0L7QsdC10LrRgiwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdC+OiDigJ4lc+KAnCIKKworIzogZmV0Y2gtcGFjay5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgJWQgJXMiCittc2dzdHIgItC/0L7Qu9GD0YfQtdC90L4g0LHQtSAlcyAlZCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0L/QvtC00LDQstCw0L3QtTog4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgItC00LXQudGB0YLQstC40LXRgtC+INC30LDQstGK0YDRiNC4IgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICLQv9C+0LvRg9GH0LXQvdC+INCx0LUgJXMgKCVkKSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICLQntGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC90LAg4oCeJXPigJwg0LrQsNGC0L4g0L/RitC70L3QviIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAi0LLQtdGH0LUg0LjQvNCwIOKAniVz4oCcICglcykiCisKKyM6IGZldGNoLXBhY2suYzo4MTgKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGFjazog0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0L/RgNC+0YbQtdGBINC30LAg0LTQtdC80YPQu9GC0LjQv9C70LXQutGB0L7RgNCwIgorCisjOiBmZXRjaC1wYWNrLmM6ODI2Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9C90LAg0LPRgNC10YjQutCwOiDQvdC10L/RgNCw0LLQuNC70L3QsCDQt9Cw0LPQu9Cw0LLQvdCwINGH0LDRgdGCINC90LAg0L/QsNC60LXRgiIKKworIzogZmV0Y2gtcGFjay5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgImZldGNoLXBhY2s6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INC/0YDQvtGG0LXRgSDQt9CwIOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzo5MTgKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0LIg0LTQtdC80YPQu9GC0LjQv9C70LXQutGB0L7RgNCwIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgItCS0LXRgNGB0LjRj9GC0LAg0L3QsCDRgdGK0YDQstGK0YDQsCDQtTogJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L/QvtC00LTRitGA0LbQsCDigJ4lc+KAnCIKKworIzogZmV0Y2gtcGFjay5jOjk3MgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2xpZW50cyIKK21zZ3N0ciAi0KHRitGA0LLRitGA0YrRgiDQvdC1INC/0L7QtNC00YrRgNC20LAg0L/Qu9C40YLQutC4INC60LvQuNC10L3RgtC4IgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAi0KHRitGA0LLRitGA0YrRgiDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaGFsbG93LXNpbmNl4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzNworbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICLQodGK0YDQstGK0YDRitGCINC90LUg0L/QvtC00LTRitGA0LbQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLXNoYWxsb3ctZXhjbHVkZeKAnCIKKworIzogZmV0Y2gtcGFjay5jOjEwNDEKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIKK21zZ3N0ciAi0KHRitGA0LLRitGA0YrRgiDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1kZWVwZW7igJwiCisKKyM6IGZldGNoLXBhY2suYzoxMDU4Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgItC90Y/QvNCwINC+0LHRidC4INC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZmV0Y2gtcGFjay5jOjEwNzAgZmV0Y2gtcGFjay5jOjE1MzYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6INC90LXRg9GB0L/QtdGI0L3QviDQtNC+0YHRgtCw0LLRj9C90LUuIgorCisjOiBmZXRjaC1wYWNrLmM6MTIwOQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgcmVxdWVzdHMiCittc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC/0LvQuNGC0LrQuCDQt9Cw0Y/QstC60LgiCisKKyM6IGZldGNoLXBhY2suYzoxMjE2Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGZpbHRlciIKK21zZ3N0ciAi0KHRitGA0LLRitGA0YrRgiDQv9C+0LTQtNGK0YDQttCwINGE0LjQu9GC0YDQuCIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgItC90LXQstGK0LfQvNC+0LbQvdC+INC/0LjRgdCw0L3QtSDQutGK0Lwg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0L/RgNC+0YfQuNGC0LDQvdC1INC90LAg0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0L3QsCDRgNCw0LfQtNC10Lsg4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgItC+0YfQsNC60LLQsCDRgdC1IOKAniVz4oCcLCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC90L4g4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC9INGA0LXQtCDQt9CwINC/0L7RgtCy0YrRgNC20LTQtdC90LjQtTog4oCeJXPigJwiCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0L7QsdGA0LDQsdC+0YLQutCwINC90LAg0L/QvtGC0LLRitGA0LbQtNC10L3QuNGP0YLQsDogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICIiCisi0L7Rh9Cw0LrQstCw0YjQtSDRgdC1INC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDQtNCwINCx0YrQtNC1INC40LfQv9GA0LDRgtC10L0g0YHQu9C10LQg0L7RgtCz0L7QstC+0YAg0LfQsCDQs9C+0YLQvtCy0L3QvtGB0YIgKHJlYWR5KSIKKworIzogZmV0Y2gtcGFjay5jOjEzMjAKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgIiIKKyLQvtGH0LDQutCy0LDRiNC1INGB0LUg0YHQu9C10LQg0LvQuNC/0YHQsCDQvdCwINC+0YLQs9C+0LLQvtGAINC30LAg0LPQvtGC0L7QstC90L7RgdGCIChyZWFkeSkg0LTQsCDQvdC1INGB0LUg0YHQtSDQv9GA0LDRidCw0YIgIgorItC00YDRg9Cz0Lgg0YDQsNC30LTQtdC70LgiCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQvtCx0YDQsNCx0L7RgtC60LAg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC00YrQu9Cx0L7Rh9C40L3QsNGC0LAv0L/Qu9C40YLQutC+0YHRgtGC0LA6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0LjRgdC60LDQvSDRg9C60LDQt9Cw0YLQtdC7LCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC90L46IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIHdhbnRlZC1yZWY6ICclcyciCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDQuNGB0LrQsNC9INGD0LrQsNC30LDRgtC10Ls6IOKAniVz4oCcIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQvtCx0YDQsNCx0L7RgtC60LDRgtCwINC90LAg0LjRgdC60LDQvdC40YLQtSDRg9C60LDQt9Cw0YLQtdC70Lg6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCINC/0L7QtNGF0L7QtNGP0Ykg0LLRgNGK0YUg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg4Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QtSDQuNC30L/RgNCw0YLQuCDQstGB0LjRh9C60Lgg0L3QtdC+0LHRhdC+0LTQuNC80Lgg0L7QsdC10LrRgtC4LiIKKworIzogZmV0Y2gtcGFjay5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICLRgtCw0LrRitCyINC+0YLQtNCw0LvQtdGH0LXQvSDRg9C60LDQt9Cw0YLQtdC7INC90Y/QvNCwOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IGFsbG93IHJlcXVlc3QgZm9yIHVuYWR2ZXJ0aXNlZCBvYmplY3QgJXMiCittc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L3QtSDQv9C+0LfQstC+0LvRj9Cy0LAg0LfQsNGP0LLQutCwINC30LAg0L3QtdC+0LHRj9Cy0LXQvSDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjIzCittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0LLRgNC10LzQtdC90LXQvSDRhNCw0LnQuyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQsNGC0LAg0L3QtSDRg9GB0L/RjyDQtNCwINC30LDQv9C40YjQtSDRgdCw0LzQvtGB0YLQvtGP0YLQtdC70L3QuNGPINC/0L7QtNC/0LjRgSDQsiDigJ4lc+KAnCIKKworIzogZ3BnLWludGVyZmFjZS5jOjM5MAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQsNGC0LAg4oCeZ3Bn4oCcINC90LUg0L/QvtC00L/QuNGB0LAg0LTQsNC90L3QuNGC0LUuIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L3QtdC/0YDQsNCy0LjQu9C90LjRjyDRhtCy0Y/RgiDigJ4lLipz4oCcINCyIOKAnmxvZy5ncmFwaENvbG9yc+KAnCIKKworIzogZ3JlcC5jOjY2OAorbXNnaWQgIiIKKyJnaXZlbiBwYXR0ZXJuIGNvbnRhaW5zIE5VTEwgYnl0ZSAodmlhIC1mIDxmaWxlPikuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgIgorIndpdGggLVAgdW5kZXIgUENSRSB2MiIKK21zZ3N0ciAiIgorItC30LDQtNCw0LTQtdC90LjRj9GCINGI0LDQsdC70L7QvSDRgdGK0LTRitGA0LbQsCDQvdGD0LvQtdCyINC30L3QsNC6ICjQuNC00LLQsCDQvtGCIC1mIOKAntCk0JDQmdCb4oCcKS4gINCi0L7QstCwINGB0LUg0L/QvtC00LTRitGA0LbQsCAiCisi0LIg0LrQvtC80LHQuNC90LDRhtC40Y8g0YEg4oCeLVDigJwg0YHQsNC80L4g0L/RgNC4INC/0L7Qu9C30LLQsNC90LXRgtC+INC90LAg4oCeUENSRSB2MuKAnCIKKworIzogZ3JlcC5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIuKAniVz4oCcOiDRhNCw0LnQu9GK0YIg0YHQvtGH0LXQvSDQvtGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBncmVwLmM6MjE0MSBzZXR1cC5jOjE2NSBidWlsdGluL2Nsb25lLmM6NDExIGJ1aWx0aW4vZGlmZi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDigJ4lc+KAnCIKKworIzogZ3JlcC5jOjIxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAi4oCeJXPigJw6INC40LfRh9C40YLQsNC90LXRgtC+INCy0YrRgNC90LAg0L/Qvi3QvNCw0LvQutC+INCx0LDQudGC0L7QstC1INC+0YIg0L7Rh9Cw0LrQstCw0L3QvtGC0L4iCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+ICjQv9C+0LPQu9C10LTQvdC10YLQtTog4oCeZ2l0IGhlbHAgdHV0b3JpYWzigJwpIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAi0YDQsNCx0L7RgtCwINC/0L4g0YLQtdC60YPRidCw0YLQsCDQv9GA0L7QvNGP0L3QsCAo0L/QvtCz0LvQtdC00L3QtdGC0LU6IOKAnmdpdCBoZWxwIGV2ZXJ5ZGF54oCcKSIKKworIzogaGVscC5jOjI1Cittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICLQv9GA0LXQs9C70LXQtCDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQuCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+ICjQv9C+0LPQu9C10LTQvdC10YLQtTog4oCeZ2l0IGhlbHAgcmV2aXNpb25z4oCcKSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAi0YPQstC10LvQuNGH0LDQstCw0L3QtSwg0L7RgtCx0LXQu9GP0LfQstCw0L3QtSDQuCDQv9GA0L7QvNGP0L3QsCDQvdCwINC+0LHRidCw0YLQsCDQuNGB0YLQvtGA0LjRjyIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICLRgdGK0LLQvNC10YHRgtC90LAg0YDQsNCx0L7RgtCwICjQv9C+0LPQu9C10LTQvdC10YLQtTog4oCeZ2l0IGhlbHAgd29ya2Zsb3dz4oCcKSIKKworIzogaGVscC5jOjMxCittc2dpZCAiTWFpbiBQb3JjZWxhaW4gQ29tbWFuZHMiCittc2dzdHIgItCe0YHQvdC+0LLQvdC4INC60L7QvNCw0L3QtNC4INC+0YIg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0L3QuNCy0L4iCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAi0J/QvtC80L7RidC90Lgg0LrQvtC80LDQvdC00LggLyDQn9GA0L7QvNC10L3Rj9GJ0LgiCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgItCf0L7QvNC+0YnQvdC4INC60L7QvNCw0L3QtNC4IC8g0JfQsNC/0LjRgtCy0LDRidC4IgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAi0KHRitCy0LzQtdGB0YLQvdCwINGA0LDQsdC+0YLQsCDRgSDQtNGA0YPQs9C4INGF0L7RgNCwIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgItCa0L7QvNCw0L3QtNC4INC+0YIg0L3QuNGB0LrQviDQvdC40LLQviAvINCf0YDQvtC80LXQvdGP0YnQuCIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00Lgg0L7RgiDQvdC40YHQutC+INC90LjQstC+IC8g0JfQsNC/0LjRgtCy0LDRidC4IgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00Lgg0L7RgiDQvdC40YHQutC+INC90LjQstC+IC8g0KHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y8g0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGhlbHAuYzozOAorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiCittc2dzdHIgItCa0L7QvNCw0L3QtNC4INC+0YIg0L3QuNGB0LrQviDQvdC40LLQviAvINCU0L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQuNC90YHRgtGA0YPQvNC10L3RgtC4IgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAi0L3QsNC70LjRh9C90Lgg0LrQvtC80LDQvdC00Lgg0L3QsCBnaXQg0L7RgiDigJ4lc+KAnCIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00Lgg0L3QsCBnaXQg0L7RgiDQtNGA0YPQs9C4INC00LjRgNC10LrRgtC+0YDQuNC4INC+0YIg4oCeJFBBVEjigJwiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgItCi0L7QstCwINGB0LAg0L3QsNC5LdGH0LXRgdGC0L4g0LjQt9C/0L7Qu9C30LLQsNC90LjRgtC1INC60L7QvNCw0L3QtNC4INC90LAgR2l0OiIKKworIzogaGVscC5jOjM2MyBnaXQuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBjb21tYW5kIGxpc3RpbmcgdHlwZSAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC00LTRitGA0LbQsNC9INGB0L/QuNGB0YrQuiDQvtGCINC60L7QvNCw0L3QtNC4IOKAniVz4oCcIgorCisjOiBoZWxwLmM6NDAzCittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiCittc2dzdHIgItCf0L7Qv9GD0LvRj9GA0L3QuNGC0LUg0LLRitCy0LXQtNC10L3QuNGPINCyIEdpdCDRgdCwOiIKKworIzogaGVscC5jOjUxMgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAi0JfQsCDQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQmtCe0JzQkNCd0JTQkCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IGhlbHAg0JrQntCc0JDQndCU0JDigJwiCisKKyM6IGhlbHAuYzo1MTcKK21zZ2lkICJFeHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAi0JLRitC90YjQvdC4INC60L7QvNCw0L3QtNC4IgorCisjOiBoZWxwLmM6NTMyCittc2dpZCAiQ29tbWFuZCBhbGlhc2VzIgorbXNnc3RyICLQn9GB0LXQstC00L7QvdC40LzQuCDQvdCwINC60L7QvNCw0L3QtNC40YLQtSIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyLQmNC30LPQu9C10LbQtNCwLCDRh9C1IOKAniVz4oCcINC1INC60L7QvNCw0L3QtNCwINC90LAgZ2l0LCDQvdC+INGC0Y8g0L3QtSDQvNC+0LbQtSDQtNCwXG4iCisi0LHRitC00LUg0LjQt9C/0YrQu9C90LXQvdCwLiAg0JLQtdGA0L7Rj9GC0L3QviDQv9Cw0LrQtdGC0YrRgiDigJ5naXQtJXPigJwg0LUg0L/QvtCy0YDQtdC00LXQvS4iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAi0KHRgtGA0LDQvdC90L4sINC40LfQs9C70LXQttC00LAsINGH0LUg0L3QsCDRgdC40YHRgtC10LzQsNGC0LAg0LLQuCDQvdGP0LzQsCDQvdC40YLQviDQtdC00L3QsCDQutC+0LzQsNC90LTQsCDQvdCwIGdpdC4iCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INCf0YDQvtCx0LLQsNGF0YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDQutC+0LzQsNC90LTQsCDQvdCwIEdpdCDQvdCwINC40LzQtSDigJ4lc+KAnCwg0LAg0YLQsNC60LDQstCwICIKKyLQvdC1INGB0YrRidC10YHRgtCy0YPQstCwLiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICIiCisi0JjQt9C/0YrQu9C90LXQvdC40LXRgtC+INCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0L/RgNC+0LTRitC70LbQsNCy0LAsINC60LDRgtC+INGB0LUg0YHRh9C40YLQsCwg0YfQtSDQuNC80LDRgtC1INC/0YDQtdC00LLQuNC0IOKAniVz4oCcLiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICIiCisi0JjQt9C/0YrQu9C90LXQvdC40LXRgtC+INCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQv9GA0L7QtNGK0LvQttC4INGB0LvQtdC0ICUwLjFmINGB0LXQui4sINC60LDRgtC+INGB0LUg0YHRh9C40YLQsCwg0YfQtSAiCisi0LjQvNCw0YLQtSDQv9GA0LXQtNCy0LjQtCDigJ4lc+KAnC4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiDigJ4lc+KAnCDQvdC1INC1INC60L7QvNCw0L3QtNCwINC90LAgZ2l0LiAg0J/QvtCz0LvQtdC00L3QtdGC0LUg0LjQt9GF0L7QtNCwINC+0YIg4oCeZ2l0IC0taGVscOKAnC4iCisKKyM6IGhlbHAuYzo2OTkKIG1zZ2lkICIiCiAiXG4iCi0iKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCi0iKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZCBpcyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIgorbXNnc3RyWzBdICIiCisiXG4iCisi0J3QsNC5LdCx0LvQuNC30LrQsNGC0LAg0LrQvtC80LDQvdC00LAg0LUiCittc2dzdHJbMV0gIiIKKyJcbiIKKyLQndCw0Lkt0LHQu9C40LfQutC40YLQtSDQutC+0LzQsNC90LTQuCDRgdCwIgorCisjOiBoZWxwLmM6NzE0Cittc2dpZCAiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB2ZXJzaW9uIFvQntCf0KbQmNCv4oCmXSIKKworIzogaGVscC5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIOKAlCAlcyIKKworIzogaGVscC5jOjc4NworbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorItCa0L7QvNCw0L3QtNCwINGBINC/0L7QtNC+0LHQvdC+INC40LzQtSDQtToiCittc2dzdHJbMV0gIiIKKyJcbiIKKyLQmtC+0LzQsNC90LTQuCDRgSDQv9C+0LTQvtCx0L3QviDQuNC80LUg0YHQsDoiCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgogbXNnc3RyICIiCiAiXG4iCi0i4pePINCd0LXRgdC70LXQtNC10L3QuNGP0YIg0YTQsNC50Lsg0LUg0L7RgtGA0Y/Qt9Cw0L0g0LTQvtGC0YPQuiDQvtGCINC/0YDQvtCz0YDQsNC80LDRgtCwIOKAniVz4oCcLlxuIgotIuKXjyDQmNC30L/QvtC70LfQstCw0LnRgtC1INCy0YrQvdGI0LXQvSDRgNC10LTQsNC60YLQvtGALCDQt9CwINC00LAg0LLQuNC00LjRgtC1INGG0LXQu9C40Y8g0YTQsNC50LsuXG4iCisi4peP4peP4pePINCS0YrQstC10LTQtdGC0LUg0YHQsNC80L7Qu9C40YfQvdC+0YHRgi5cbiIKKyJcbiIKKyLQmNC30L/RitC70L3QtdGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcItCY0JzQlUBleGFtcGxlLmNvbVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwi0JLQkNCo0JXQotCeINCY0JzQlVwiXG4iCisiXG4iCisi0Lgg0LLRitCy0LXQtNC10YLQtSDQtNCw0L3QvdC4INC30LAg0YHQtdCx0LUg0YHQuC5cbiIKKyLQkNC60L4g0L/RgNC+0L/Rg9GB0L3QtdGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1nbG9iYWzigJwsINGB0LDQvNC+0LvQuNGH0L3QvtGB0YLRgtCwINC1INGB0LDQvNC+INC30LAg0YLQtdC60YPRidC+0YLQviAiCisi0YXRgNCw0L3QuNC70LjRidC1LlxuIgorIlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6NTgwCi1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgItCY0LfQsdGA0LDQvdC+0YLQviDQv9Cw0YDRh9C1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30LLQsNC00LXQvdC+INC+0YIg0LjQvdC00LXQutGB0LAuIgorIzogaWRlbnQuYzozNzkKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0LDQtNGA0LXRgSDQt9CwINC1LdC/0L7RidCwLCDQsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+0YLQviDQvtGC0LPQsNGC0LLQsNC90LUg0LUg0LjQt9C60LvRjtGH0LXQvdC+IgogCi0jOiBsaWIvZGlmZi50Y2w6NTg3Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICLQmNC30LHRgNCw0L3QvtGC0L4g0L/QsNGA0YfQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtCx0LDQstC10L3QviDQutGK0Lwg0LjQvdC00LXQutGB0LAuIgotCi0jOiBsaWIvZGlmZi50Y2w6NjY2Ci1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgItCY0LfQsdGA0LDQvdC40Y/RgiDRgNC10LQg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfQstCw0LTQtdC9INC+0YIg0LjQvdC00LXQutGB0LAuIgotCi0jOiBsaWIvZGlmZi50Y2w6Njc0Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICLQmNC30LHRgNCw0L3QuNGP0YIg0YDQtdC0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQtNC+0LHQsNCy0LXQvSDQutGK0Lwg0LjQvdC00LXQutGB0LAuIgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdC+0YLQviIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTeXN0ZW0gKCVzKSIKLW1zZ3N0ciAi0KHQuNGB0YLQtdC80L3QvtGC0L4gKCVzKSIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKLW1zZ2lkICJPdGhlciIKLW1zZ3N0ciAi0JTRgNGD0LPQviIKLQotIzogbGliL2Vycm9yLnRjbDoyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzOiBlcnJvciIKLW1zZ3N0ciAiJXM6INCz0YDQtdGI0LrQsCIKLQotIzogbGliL2Vycm9yLnRjbDozNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzOiB3YXJuaW5nIgotbXNnc3RyICIlczog0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSIKLQotIzogbGliL2Vycm9yLnRjbDo4MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIGhvb2sgZmFpbGVkOiIKLW1zZ3N0ciAiJXM6INCz0YDQtdGI0LrQsCDQvtGCINC60YPQutCw0YLQsCIKLQotIzogbGliL2Vycm9yLnRjbDo5NgotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCi1tc2dzdHIgItCf0YDQtdC00Lgg0LTQsCDQvNC+0LbQtdGC0LUg0LTQsCDQv9C+0LTQsNC00LXRgtC1LCDQutC+0YDQuNCz0LjRgNCw0LnRgtC1INCz0L7RgNC90LjRgtC1INCz0YDQtdGI0LrQuC4iCi0KLSM6IGxpYi9lcnJvci50Y2w6MTE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogZXJyb3IiCi1tc2dzdHIgIiVzICglcyk6INCz0YDQtdGI0LrQsCIKLQotIzogbGliL2luZGV4LnRjbDo2Ci1tc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgotbXNnc3RyICLQmNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrQu9GO0YfQtdC9LiIKLQotIzogbGliL2luZGV4LnRjbDoxNwotbXNnaWQgIkluZGV4IEVycm9yIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0LIg0LjQvdC00LXQutGB0LAiCi0KLSM6IGxpYi9pbmRleC50Y2w6MTkKLW1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKKyM6IGlkZW50LmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCiBtc2dzdHIgIiIKLSLQndC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQvdCwIEdpdC4g0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRidC1INC30LDQv9C+0YfQvdC1INC90L7QstCwINC/0YDQvtCy0LXRgNC60LAgIgotItC30LAg0YHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L3QtdGC0L4g0L3QsCBnaXQtZ3VpLiIKKyLQsNC00YDQtdGB0YrRgiDQt9CwINC1LdC/0L7RidCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LPQsNGC0L3QsNGCICjQvdCw0Lkt0LTQvtCx0YDQvtGC0L4g0L/RgNC10LTQv9C+0LvQvtC20LXQvdC40LUg0LHQtSAiCisi4oCeJXPigJwpIgogCi0jOiBsaWIvaW5kZXgudGNsOjMwCi1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgItCf0YDQvtC00YrQu9C20LDQstCw0L3QtSIKKyM6IGlkZW50LmM6NDAxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0LjQvNC1LCDQsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+0YLQviDQvtGC0LPQsNGC0LLQsNC90LUg0LUg0LjQt9C60LvRjtGH0LXQvdC+IgogCi0jOiBsaWIvaW5kZXgudGNsOjMzCi1tc2dpZCAiVW5sb2NrIEluZGV4IgotbXNnc3RyICLQntGC0LrQu9GO0YfQstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAi0LjQvNC10YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCz0LDRgtC90LDRgtC+ICjQvdCw0Lkt0LTQvtCx0YDQvtGC0L4g0L/RgNC10LTQv9C+0LvQvtC20LXQvdC40LUg0LHQtSDigJ4lc+KAnCkiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mjk0Ci1tc2dpZCAiVW5zdGFnaW5nIHNlbGVjdGVkIGZpbGVzIGZyb20gY29tbWl0IgotbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDQuNC30LHRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0L7RgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70LfQstCwINC/0YDQsNC30L3QviDQuNC80LUg0LrQsNGC0L4g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAgKNC30LAgPCVzPikiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mjk4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgotbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDigJ4lc+KAnCDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+IgorIzogaWRlbnQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZSBjb25zaXN0cyBvbmx5IG9mIGRpc2FsbG93ZWQgY2hhcmFjdGVyczogJXMiCittc2dzdHIgItC40LzQtdGC0L4g0YHRitC00YrRgNC20LAg0YHQsNC80L4g0L3QtdC/0L7Qt9Cy0L7Qu9C10L3QuCDQt9C90LDRhtC4OiDigJ4lc+KAnCIKIAotIzogbGliL2luZGV4LnRjbDozMzcKLW1zZ2lkICJSZWFkeSB0byBjb21taXQuIgotbXNnc3RyICLQk9C+0YLQvtCy0L3QvtGB0YIg0LfQsCDQv9C+0LTQsNCy0LDQvdC1LiIKKyM6IGlkZW50LmM6NDM2IGJ1aWx0aW4vY29tbWl0LmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRhNC+0YDQvNCw0YIg0L3QsCDQtNCw0YLQsDogJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzQ2Ci1tc2dpZCAiQWRkaW5nIHNlbGVjdGVkIGZpbGVzIgotbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQt9Cx0YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1IgorIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAi0L7QsdC10LrRgiDigJ4lc+KAnCDQsiDQtNGK0YDQstC+0YLQviDigJ4lc+KAnCDQtSDQvtGC0LHQtdC70Y/Qt9Cw0L0g0LrQsNGC0L4g0LTRitGA0LLQviwg0L3QviDQvdC1INC1IgogCi0jOiBsaWIvaW5kZXgudGNsOjM1MAotIywgdGNsLWZvcm1hdAorIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi0L7QsdC10LrRgiDigJ4lc+KAnCDQsiDQtNGK0YDQstC+0YLQviDigJ4lc+KAnCDQtSDQvtGC0LHQtdC70Y/Qt9Cw0L0g0LrQsNGC0L4gQkxPQiwg0L3QviDQvdC1INC1IgorCisjOiBsaXN0LW9iamVjdHMuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgcm9vdCB0cmVlIGZvciBjb21taXQgJXMiCittc2dzdHIgItC60L7RgNC10L3QvtCy0L7RgtC+INC00YrRgNCy0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDRgNC10LTQuCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgItC90Y/QvNCwINC00L7RgdGC0YrQvyDQtNC+INGH0LDRgdGC0LjRh9C90L4g0LjQt9GC0LXQs9C70LXQvdC40Y8g0L7QsdC10LrRgi1CTE9CINCyIOKAniVz4oCcIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBzcGFyc2UgZmlsdGVyIGRhdGEgaW4gJXMiCittc2dzdHIgIiIKKyLQtNCw0L3QvdC40YLQtSDQvtGCINGE0LjQu9GC0YrRgNCwINC30LAg0YfQsNGB0YLQuNGH0L3QuCDQuNC30YLQtdCz0LvQsNC90LjRjyDQsiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LDRgiDQsNC90LDQu9C40LfQuNGA0LDQvdC4IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDigJ50cmVlOtCU0KrQm9CR0J7Qp9CY0J3QkOKAnCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAi0L/QvtC00LTRgNGK0LbQutCw0YLQsCDQvdCwINGE0LjQu9GC0YDQuCDRgdGK0YEg4oCec3BhcnNlOnBhdGjigJwg0LUg0L/RgNC10LzQsNGF0L3QsNGC0LAiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQuNC70YLRitGAOiDigJ4lc+KAnCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorbXNnc3RyICLQt9C90LDQuiDQt9CwINC10LrRgNCw0L3QuNGA0LDQvdC1INCyINC/0L7QtNGE0LjQu9GC0YrRgDog4oCeJWPigJwiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjE0NAorbXNnaWQgImV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciBjb21iaW5lOiIKK21zZ3N0ciAi0LTQvtCx0LDQstC10YLQtSDQvdC10YnQviDRgdC70LXQtCDQutC+0LzQsdC40L3QuNGA0LDQvdC10YLQvjoiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDQutC+0LzQsdC40L3QuNGA0LDRgtC1INC80L3QvtC20LXRgdGC0LLQviDRhNC40LvRgtGA0LgiCisKKyM6IGxvY2tmaWxlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCittc2dzdHIgIiIKKyLQpNCw0LnQu9GK0YIt0LrQu9GO0YfQsNC70LrQsCDigJ4lcy5sb2Nr4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9OiAlc1xuIgorIlxuIgorItCY0LfQs9C70LXQttC00LAsINGH0LUg0Lgg0LTRgNGD0LMg0L/RgNC+0YbQtdGBINC90LAgZ2l0INC1INC/0YPRgdC90LDRgiDQsiDRgtC+0LLQsCDRhdGA0LDQvdC40LvQuNGJ0LUsINC90LDQv9GALlxuIgorItGA0LXQtNCw0LrRgtC+0YAsINGB0YLQsNGA0YLQuNGA0LDQvSDRgSDigJ5naXQgY29tbWl04oCcLiAg0KPQstC10YDQtdGC0LUg0YHQtSwg0YfQtSDQstGB0LjRh9C60Lgg0L/QvtC00L7QsdC90LhcbiIKKyLQv9GA0L7RhtC10YHQuCDRgdCwINGB0L/RgNC10L3QuCDQuCDQvtC/0LjRgtCw0LnRgtC1INC+0YLQvdC+0LLQvi4gINCQ0LrQviDRgtC+0LLQsCDQvdC1INC/0L7QvNC+0LPQvdC1LCDQstC10YDQvtGP0YLQvdCw0YLQsFxuIgorItC/0YDQuNGH0LjQvdCwINC1LCDRh9C1INC90Y/QutC+0Lkg0L/RgNC+0YbQtdGBINC90LAgZ2l0INCyINGC0L7QstCwINGF0YDQsNC90LjQu9C40YnQtSDQtSDQt9Cw0LHQuNC7LiAg0JfQsCDQtNCwXG4iCisi0L/RgNC+0LTRitC70LbQuNGC0LUg0YDQsNCx0L7RgtCwLCDRidC1INGC0YDRj9Cx0LLQsCDRgNGK0YfQvdC+INC00LAg0LjQt9GC0YDQuNC10YLQtSDRhNCw0LnQu9CwOiIKKworIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICLQpNCw0LnQu9GK0YIt0LrQu9GO0YfQsNC70LrQsCDigJ4lcy5sb2Nr4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9OiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAi0LrQtdGI0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODc0IGJ1aWx0aW4vYW0uYzoxOTA4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTM5IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTggYnVpbHRpbi9jbG9uZS5jOjgwOQorIzogYnVpbHRpbi9zdGFzaC5jOjI2NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC30LDQv9C40YHQstCw0L3QtSDQvdCwINC90L7QstC40Y8g0LjQvdC00LXQutGBIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTYKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKNC70L7RiNC+INC/0L7QtNCw0LLQsNC90LUpXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgIiIKKyLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5hZGRfY2FjaGVpbmZv4oCcINC30LAg0L/RitGC0Y8g4oCeJXPigJwuICDQodC70LjQstCw0L3QtdGC0L4g0LUgIgorItC/0YDQtdGD0YHRgtCw0L3QvtCy0LXQvdC+LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICIiCisi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeYWRkX2NhY2hlaW5mb+KAnCDQt9CwINC+0LHQvdC+0LLRj9Cy0LDQvdC10YLQviDQvdCwINC/0YrRgtGPIOKAniVz4oCcLiAgIgorItCh0LvQuNCy0LDQvdC10YLQviDQtSDQv9GA0LXRg9GB0YLQsNC90L7QstC10L3Qvi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQv9GK0YLRjyDigJ4lc+KAnCVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCeJXPigJwsINC30LAg0LTQsCDRgdC1INC+0YHQstC+0LHQvtC00Lgg0LzRj9GB0YLQviDQt9CwINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNGPXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg5OSBtZXJnZS1yZWN1cnNpdmUuYzo5MTgKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICI6INCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDQuNC80LAg0LrQvtC90YTQu9C40LrRgiDQtNC40YDQtdC60YLQvtGA0LjRjy/RhNCw0LnQuy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgIiIKKyLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDQtNC10LnRgdGC0LLQuNC10YLQviwg0LfQsCDQtNCwINC90LUg0YHQtSDQuNC30YLRgNC40LUg0L3QtdGB0LvQtdC00LXQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTQ5IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwgKCVzKSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcICglcykg0YHQtSDQvtGH0LDQutCy0LDRiNC1INC00LAg0LUgQkxPQiwg0LAg0L3QtSDQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyc6ICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lg6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdCw0YLQsCDQstGA0YrQt9C60LAg4oCeJXPigJw6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAiIgorItC90LUg0LUg0Y/RgdC90L4g0LrQsNC60LLQviDQtNCwINGB0LUg0L/RgNCw0LLQuCDRgSDQvtCx0LXQutGC0LAg4oCeJTIkc+KAnCAoJTMkcykg0YEg0L/RgNCw0LLQsCDQt9CwINC00L7RgdGC0YrQvyDigJ4lMSQwNm/igJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcICjQvdC1INC1INC40LfRgtC10LPQu9C10L0pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgbm90IHByZXNlbnQpIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwgKNC90Y/QvNCwINC/0L7QtNCw0LLQsNC90LjRjykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBkb24ndCBmb2xsb3cgbWVyZ2UtYmFzZSkiCittc2dzdHIgIiIKKyLQn9C+0LTQvNC+0LTRg9C70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHQu9GP0YIgKNCx0LDQt9Cw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1INC90LUg0L/RgNC10LTRiNC10YHRgtCy0LAgIgorItC/0L7QtNCw0LLQsNC90LjRj9GC0LApIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjEwIG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyB0byB0aGUgZm9sbG93aW5nIGNvbW1pdDoiCittc2dzdHIgItCf0YDQtdCy0YrRgNGC0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcINC00L4g0YHQu9C10LTQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMyBtZXJnZS1yZWN1cnNpdmUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMiCittc2dzdHIgItCf0YDQtdCy0YrRgNGC0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwgKNC70LjQv9GB0LLQsCDRgdC70LjQstCw0L3QtdGC0L4sINC60L7QtdGC0L4g0YHQtSDQv9GA0LXQtNGI0LXRgdGC0LLQsCAiCisi0L7RgiDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcICjQvdC1INC1INC/0YDQtdCy0YrRgNGC0LDQvdC1KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MworbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAiIgorItCe0YLQutGA0LjRgtC+INC1INGB0LvQuNCy0LDQvdC1LCDQutC+0LXRgtC+INC80L7QttC1INC00LAg0YDQtdGI0LDQstCwINC/0YDQvtCx0LvQtdC80LAg0YHRitGBINGB0LvQuNCy0LDQvdC10YLQviDQvdCwICIKKyLQv9C+0LTQvNC+0LTRg9C70LA6XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisi0JDQutC+INGC0L7QstCwINC1INGC0LDQutCwLCDQtNC+0LHQsNCy0LXRgtC1INCz0L4g0LrRitC8INC40L3QtNC10LrRgdCwINGBINC60L7QvNCw0L3QtNCwINC60LDRgtC+INGB0LvQtdC00L3QsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorItCi0L7QstCwINC/0YDQuNC10LzQsCDQv9GA0LXQtNC70L7QttC10L3QvtGC0L4uXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcICjQvtGC0LrRgNC40YLQuCDRgdCwINC80L3QvtC20LXRgdGC0LLQviDRgdC70LjQstCw0L3QuNGPKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTMzOAorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LLRitGC0YDQtdGI0L3QviDRgdC70LjQstCw0L3QtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQtNC+0LHQsNCy0Lgg0LIg0LHQsNC30LDRgtCwINGBINC00LDQvdC90LgiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgItCT0YDQtdGI0LrQsDog0LfQsCDQtNCwINC90LUg0YHQtSDQuNC30YLRgNC40LUg0L3QtdGB0LvQtdC00LXQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCwg0YHQtSDQt9Cw0L/QuNGB0LLQsCDQsiDigJ4lc+KAnC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKCVzL9C40LfRgtGA0LjQstCw0L3QtSk6IOKAniVz4oCcINC1INC40LfRgtGA0LjRgiDQsiAlcywg0LAg4oCeJXPigJwg0LIgJXMuICDQktC10YDRgdC40Y8gJXMg0L3QsCDigJ4lc+KAnCAiCisi0LUg0L7RgdGC0LDQstC10L3QsCDQsiDQtNGK0YDQstC+0YLQvi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKCVzL9C40LfRgtGA0LjQstCw0L3QtSk6IOKAniVz4oCcINC1INC40LfRgtGA0LjRgiDQsiAlcywg0LAg4oCeJXPigJwg0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSDQvdCwIOKAniVz4oCcINCyICIKKyIlcy4gINCS0LXRgNGB0LjRjyAlcyDQvdCwIOKAniVz4oCcINC1INC+0YHRgtCw0LLQtdC90LAg0LIg0LTRitGA0LLQvtGC0L4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyLQmtCe0J3QpNCb0JjQmtCiICglcy/QuNC30YLRgNC40LLQsNC90LUpOiDigJ4lc+KAnCDQtSDQuNC30YLRgNC40YIg0LIgJXMsINCwIOKAniVz4oCcINCyICVzLiAg0JLQtdGA0YHQuNGPICVzINC90LAg4oCeJXPigJwgIgorItC1INC+0YHRgtCw0LLQtdC90LAg0LIg0LTRitGA0LLQvtGC0L46ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAoJXMv0LjQt9GC0YDQuNCy0LDQvdC1KTog4oCeJXPigJwg0LUg0LjQt9GC0YDQuNGCINCyICVzLCDQsCDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIgIgorIiVzLiAg0JLQtdGA0YHQuNGPICVzINC90LAg4oCeJXPigJwg0LUg0L7RgdGC0LDQstC10L3QsCDQsiDQtNGK0YDQstC+0YLQvjogJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTIzCittc2dpZCAicmVuYW1lIgorbXNnc3RyICLQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjMKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLQv9GA0LXQuNC80LXQvdGD0LLQsNC9IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjAzIG1lcmdlLXJlY3Vyc2l2ZS5jOjI1MTkgbWVyZ2UtcmVjdXJzaXZlLmM6MzE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiCittc2dzdHIgItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC00LXQudGB0YLQstC40LXRgtC+LCDQt9CwINC00LAg0L3QtSDRgdC1INC40LfQs9GD0LHQuCDQv9GA0L7QvNC10L3QtdC90LjRj9GCIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXMsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gdGhlIHdheS4iCittc2dzdHIgIiIKKyLQntGC0LrQsNC3INC00LAg0YHQtSDQt9Cw0LPRg9Cx0Lgg0L3QtdGB0LvQtdC00LXQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCwg0LfQsNGJ0L7RgtC+INC1INC90LAg0LzRj9GB0YLQviwg0LrRitC00LXRgtC+INC/0YDQtdGH0LguIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1L9C00L7QsdCw0LLRj9C90LUpOiDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg0LrQu9C+0L0g4oCeJXPigJwsINCwICIKKyLigJ4lc+KAnCDQtSDQtNC+0LHQsNCy0LXQvSDQsiDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LIg4oCeJXPigJwsINC30LDRgtC+0LLQsCDRgdC1INC00L7QsdCw0LLRjyDQutCw0YLQviDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC00LXQudGB0YLQstC40LXRgtC+LCDQt9CwINC00LAg0L3QtSDRgdC1INC40LfQs9GD0LHQuCDQvdC10YHQu9C10LTQtdC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcLiAgIgorItCS0LzQtdGB0YLQviDQvdC10LPQviDRgdC1INC00L7QsdCw0LLRjyDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1L9C/0YDQtdC40LzQtdC90YPQstCw0L3QtSk6IOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDQutC70L7QvSAiCisi4oCeJXPigJwsINCwIOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDigJ4lc+KAnC8lcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzEKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAo0L3QtdC60L7RgNC40LPQuNGA0LDQvSDQutC+0L3RhNC70LjQutGCKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyLQmtCe0J3QpNCb0JjQmtCiICjQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUv0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1KTog4oCeJXPigJwg0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSDQvdCwIOKAniVz4oCcINCyINC60LvQvtC9ICIKKyLigJ4lc+KAnCwg0LAg4oCeJXPigJwg0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSDQvdCwIOKAniVz4oCcINCyIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKNGA0LDQt9C00LLQvtGP0LLQsNC90LUg0L/RgNC4INC/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPKTog0J3QtSDQtSDRj9GB0L3QviDQutGK0LTQtSDQtNCwINGB0LUgIgorItC/0L7RgdGC0LDQstC4IOKAniVz4oCcLCDQt9Cw0YnQvtGC0L4g0L3Rj9C60L7Qu9C60L4g0L3QvtCy0Lgg0LTQuNGA0LXQutGC0L7RgNC40Lgg0L/QvtC00LXQu9GP0YIg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAgIgorItC00LjRgNC10LrRgtC+0YDQuNGPIOKAniVz4oCcLCDQutCw0YLQviDQvdC40LrQvtGPINC90LUg0YHRitC00YrRgNC20LAg0LzQvdC+0LfQuNC90YHRgtCy0L4g0L7RgiDRhNCw0LnQu9C+0LLQtdGC0LUg0Z0uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKNC60L7RgdCy0LXQvdC+INC/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPKTog0YHQu9C10LTQvdC40Y/RgiDRhNCw0LnQuyDQuNC70Lgg0LTQuNGA0LXQutGC0L7RgNC40Y8gIgorIuKAniVz4oCcINC90LUg0L/QvtC30LLQvtC70Y/QstCw0YIg0LrQvtGB0LLQtdC90L7RgtC+INC/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINGB0LvQtdC00L3QuNGPINC/0YrRgi/QuNGJ0LA6ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyLQmtCe0J3QpNCb0JjQmtCiICjQutC+0YHQstC10L3QviDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyk6INC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC/0YrRgiAiCisi0YHRitC+0YLQstC10YLRgdGC0LLQsCDQvdCwIOKAniVz4oCcLiAg0JrQvtGB0LLQtdC90L4g0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LLQvtC00Lgg0LTQviDQv9C+0YHRgtCw0LLRj9C90LXRgtC+ICIKKyLQvdCwINGC0LXQt9C4INC/0YrRgtC40YnQsCDRgtCw0Lw6ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcy4gUmVuYW1lIGRpcmVjdG9yeSAlcy0iCisiPiVzIGluICVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1L9C/0YDQtdC40LzQtdC90YPQstCw0L3QtSk6IOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDQutC70L7QvSAiCisi4oCeJXPigJwsINCwIOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LXRgtC+INC90LAg4oCeJXPigJwg0L3QsCDigJ4lc+KAnCDQsiDigJ4lc+KAnCwg0LfQsNGJ0L7RgtC+ICIKKyLigJ4lc+KAnCDRgdGK0YnQviDQtSDRgSDQv9GA0L7QvNC10L3QtdC90L4g0LjQvNC1LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDExCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQvdC1INC1IEJMT0IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNzUKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgItC/0YDQvtC80Y/QvdCwIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDc1Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgItC/0YDQvtC80LXQvdC10L0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODcKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICLRgdGK0LTRitGA0LbQsNC90LjQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5MQorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUv0LTQvtCx0LDQstGP0L3QtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzExNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgItCf0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg4oCeJXPigJwgKNGB0LvQtdGC0LjRj9GCINGA0LXQt9GD0LvRgtCw0YIg0LUg0LjQtNC10L3RgtC40YfQtdC9INGB0YrRgSDRgdC10LPQsNGI0L3QuNGPKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEzNiBnaXQtc3VibW9kdWxlLnNoOjk5MworbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAi0J/QntCU0JzQntCU0KPQmyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAoJXMpOiDQmtC+0L3RhNC70LjQutGCINC/0YDQuCDRgdC70LjQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC60LDRgtC+IOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorItCe0LHQvdC+0LLQtdC9INC/0YrRgjog4oCeJXPigJwg0LUg0LTQvtCx0LDQstC10L0g0LIg4oCeJXPigJwg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y8sINC60L7Rj9GC0L4g0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdCwINCyICIKKyLigJ4lc+KAnC4gINCe0LHQtdC60YLRitGCINGB0LUg0LzQtdGB0YLQuCDQsiDigJ4lc+KAnC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgIgorImluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKNC80LXRgdGC0LAg0L3QsCDRhNCw0LnQu9C+0LLQtSk6IOKAniVz4oCcINC1INC00L7QsdCw0LLQtdC9INCyIOKAniVz4oCcINCyINC00LjRgNC10LrRgtC+0YDQuNGPLCDQutC+0Y/RgtC+INC1ICIKKyLQv9GA0LXQuNC80LXQvdGD0LLQsNC90LAg0LIg4oCeJXPigJwuICDQn9GA0LXQtNC70L7QttC10L3QuNC10YLQviDQtSDQtNCwINC/0YDQtdC80LXRgdGC0LjRgtC1INC+0LHQtdC60YLQsCDQsiDigJ4lc+KAnC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gIgorIiVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisi0J7QsdC90L7QstC10L0g0L/RitGCOiDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg4oCeJXPigJwg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y8sINC60L7Rj9GC0L4g0LUgIgorItC/0YDQtdC40LzQtdC90YPQstCw0L3QsCDQsiDigJ4lc+KAnC4gINCe0LHQtdC60YLRitGCINGB0LUg0LzQtdGB0YLQuCDQsiDigJ4lc+KAnC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgIgorIndhcyByZW5hbWVkIGluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKNC80LXRgdGC0LAg0L3QsCDRhNCw0LnQu9C+0LLQtSk6IOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDigJ4lc+KAnCDQsiDQtNC40YDQtdC60YLQvtGA0LjRjywgIgorItC60L7Rj9GC0L4g0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdCwINCyIOKAniVz4oCcLiAg0J/RgNC10LTQu9C+0LbQtdC90LjQtdGC0L4g0LUg0LTQsCDQv9GA0LXQvNC10YHRgtC40YLQtSDQvtCx0LXQutGC0LAg0LIg4oCeJXPigJwuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM5NworbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICLRhNCw0LnQuy/QtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQwMgorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjy/RhNCw0LnQuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKCVzKTog0KHRitGJ0LXRgdGC0LLRg9Cy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCDQuNC80LUg4oCeJXPigJwg0LIg4oCeJXPigJwuICDQlNC+0LHQsNCy0Y/QvdC1INC90LAg4oCeJXPigJwgIgorItC60LDRgtC+IOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDE4CisjLCBjLWZvcm1hdAogbXNnaWQgIkFkZGluZyAlcyIKIG1zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcIgogCi0jOiBsaWIvaW5kZXgudGNsOjM4MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YWdlICVkIHVudHJhY2tlZCBmaWxlcz8iCi1tc2dzdHIgItCU0LAg0YHQtSDQtNC+0LHQsNCy0Y/RgiDQu9C4ICVkINC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9CwINC60YrQvCDQuNC90LTQtdC60YHQsD8iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChhZGQvYWRkKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKNC00L7QsdCw0LLRj9C90LUv0LTQvtCx0LDQstGP0L3QtSk6INCa0L7QvdGE0LvQuNC60YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1INC90LAg4oCeJXPigJwiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mzg4Ci1tc2dpZCAiQWRkaW5nIGFsbCBjaGFuZ2VkIGZpbGVzIgotbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LLRgdC40YfQutC4INC/0YDQvtC80LXQvdC10L3QuCDRhNCw0LnQu9C+0LLQtSIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0NzEKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICLQktC10YfQtSDQtSDQvtCx0L3QvtCy0LXQvdC+ISIKIAotIzogbGliL2luZGV4LnRjbDo0MjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKLW1zZ3N0ciAi0JTQsCDRgdC1INC80LDRhdC90LDRgiDQu9C4INC/0YDQvtC80LXQvdC40YLQtSDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnD8iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0LTRitGA0LLQtdGC0LDRgtCwIOKAniVz4oCcINC4IOKAniVz4oCcIgogCi0jOiBsaWIvaW5kZXgudGNsOjQzMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKLW1zZ3N0ciAi0JTQsCDRgdC1INC80LDRhdC90LDRgiDQu9C4INC/0YDQvtC80LXQvdC40YLQtSDQsiDRgtC10LfQuCAlaSDRhNCw0LnQu9CwPyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1ODQKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LU6IgogCi0jOiBsaWIvaW5kZXgudGNsOjQzOAotbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKLW1zZ3N0ciAiIgotItCS0YHQuNGH0LrQuCDQv9GA0L7QvNC10L3QuCwg0LrQvtC40YLQviDQvdC1INGB0LAg0LHQuNC70Lgg0LLQutCw0YDQsNC90Lgg0LIg0LjQvdC00LXQutGB0LAsINGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4gIgotItC30LDQs9GD0LHQtdC90LguIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU5NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAi0L7RgtC60YDQuNGCINC1ICV1INC+0LHRiSDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjQujoiCittc2dzdHJbMV0gItC+0YLQutGA0LjRgtC4INGB0LAgJXUg0L7QsdGJ0Lgg0L/RgNC10LTRiNC10YHRgtCy0LXQvdC40YbQuDoiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDQxCi1tc2dpZCAiRG8gTm90aGluZyIKLW1zZ3N0ciAi0J3QuNGJ0L4g0LTQsCDQvdC1INGB0LUg0L/RgNCw0LLQuCIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NDcKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgItGB0LvQuNCy0LDQvdC10YLQviDQvdC1INCy0YrRgNC90LAg0L/QvtC00LDQstCw0L3QtSIKIAotIzogbGliL2luZGV4LnRjbDo0NTkKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgItCc0LDRhdCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsiDQuNC30LHRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCi0KLSM6IGxpYi9pbmRleC50Y2w6NDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICLQnNCw0YXQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg4oCeJXPigJwiCi0KLSM6IGxpYi9saW5lLnRjbDoxNwotbXNnaWQgIkdvdG8gTGluZToiCi1tc2dzdHIgItCa0YrQvCDRgNC10LQ6IgotCi0jOiBsaWIvbGluZS50Y2w6MjMKLW1zZ2lkICJHbyIKLW1zZ3N0ciAi0J/RgNC40LTQstC40LbQstCw0L3QtSIKLQotIzogbGliL21lcmdlLnRjbDoxMworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzcwNgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiICAlcyIKIG1zZ3N0ciAiIgotItCf0L4g0LLRgNC10LzQtSDQvdCwINC/0L7Qv9GA0LDQstGP0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQu9C40LLQsNC90LUuXG4iCi0iXG4iCi0i0KLRgNGP0LHQstCwINC00LAg0LfQsNCy0YrRgNGI0LjRgtC1INC/0L7Qv9GA0LDQstGP0L3QtdGC0L4g0L3QsCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUsINC/0YDQtdC00Lgg0LTQsCDQt9Cw0L/QvtGH0L3QtdGC0LUgIgotItGB0LvQuNCy0LDQvdC1LlxuIgorItCh0LvQuNCy0LDQvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0L3QsCDRgtC10LfQuCDRhNCw0LnQu9C+0LLQtTpcbiIKKyIgICAgJXMiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjcKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC10L0g0LDQvdCw0LvQuNC3INC90LAg0L7QsdC10LrRgtCwIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODIxIGJ1aWx0aW4vbWVyZ2UuYzo2OTQgYnVpbHRpbi9tZXJnZS5jOjg3NAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YEg0LjQvdC00LXQutGB0LAg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4IOKAniVz4oCcINC1INGC0LLRitGA0LTQtSDQvNCw0LvRitC6IgorCisjOiBtaWR4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUgMHglMDh4IGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgItC+0YLQv9C10YfQsNGC0YrQutGK0YIg0L3QsCDQuNC90LTQtdC60YHQsCDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0LggMHglMDh4INC90LUg0YHRitCy0L/QsNC00LAg0YEgMHglMDh4IgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0LLQtdGA0YHQuNGPINC90LAg0LjQvdC00LXQutGBINC30LAg0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQuCDigJQgJWQiCisKKyM6IG1pZHguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIHZlcnNpb24gJXUgZG9lcyBub3QgbWF0Y2giCittc2dzdHIgItCy0LXRgNGB0LjRj9GC0LAg0L3QsCDQvtGC0L/QtdGH0LDRgtGK0LrQsCAldSDQvdC1INGB0YrQstC/0LDQtNCwIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+ICjQv9GA0LXQutCw0LvQtdC90L4g0LPQvtC70Y/QvNC+KSDQvtGC0LzQtdGB0YLQstCw0L3QtSDQvdCwINC+0YLQutGK0YEiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIiCisi0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRitGCINC30LAg0LrRgNCw0LXQvSDQvtGC0LrRitGBINC90LAg0LjQvdC00LXQutGBINC30LAg0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQuCDRgdC1INGP0LLRj9Cy0LAg0L/Qvi0iCisi0YDQsNC90L4g0L7RgiDQvtGH0LDQutCy0LDQvdC+0YLQviIKKworIzogbWlkeC5jOjE0NQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiCittc2dzdHIgItC70LjQv9GB0LLQsCDQvtGC0LrRitGBIChwYWNrLW5hbWUpINC+0YIg0LjQvdC00LXQutGBINC30LAg0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQuCIKKworIzogbWlkeC5jOjE0NworbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0L7RgtC60YrRgSAoT0lEIGZhbm91dCkg0L7RgiDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4IgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgItC70LjQv9GB0LLQsCDQvtGC0LrRitGBIChPSUQgbG9va3VwKSDQvtGCINC40L3QtNC10LrRgSDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0LgiCisKKyM6IG1pZHguYzoxNTEKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IG9mZnNldHMgY2h1bmsiCittc2dzdHIgItC70LjQv9GB0LLQsCDQvtGC0LrRitGBINC30LAg0L7RgtC80LXRgdGC0LLQsNC90LjRj9GC0LAg0L3QsCDQvtCx0LXQutGC0Lgg0L7RgiDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4IgorCisjOiBtaWR4LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgIiIKKyLQvdC10L/RgNCw0LLQuNC70L3QsCDQv9C+0LTRgNC10LTQsdCwINC90LAg0LjQvNC10L3QsNGC0LAg0LIg0LjQvdC00LXQutGBINC30LAg0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQuDog4oCeJXPigJwg0YHQtSDQv9C+0Y/QstC4ICIKKyLQv9GA0LXQtNC4IOKAniVz4oCcIgorCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAiIgorItC90LXQv9GA0LDQstC40LvQtdC9INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LAg0L/QsNC60LXRgiAocGFjay1pbnQtaWQpOiAldSAo0L7RgiDQvtCx0YnQviAldSDQv9Cw0LrQtdGC0LgpIgorCisjOiBtaWR4LmM6MjYwCittc2dpZCAibXVsdGktcGFjay1pbmRleCBzdG9yZXMgYSA2NC1iaXQgb2Zmc2V0LCBidXQgb2ZmX3QgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisi0LjQvdC00LXQutGB0YrRgiDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0Lgg0YHRitC00YrRgNC20LAgNjQt0LHQuNGC0L7QstC4INC+0YLQvNC10YHRgtCy0LDQvdC40Y8sINC90L4g0YDQsNC30LzQtdGA0YrRgiDQvdCwICIKKyLigJ5vZmZfdOKAnCDQtSDQvdC10LTQvtGB0YLQsNGC0YrRh9C10L0iCisKKyM6IG1pZHguYzoyODgKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICIiCisi0LPRgNC10YjQutCwINC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0L/QsNC60LXRgtC10L0g0YTQsNC50Lsg0L3QsCDQsdCw0LfQsNGC0LAg0L3QsCDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4gIgorItC/0LDQutC10YLQuCIKKworIzogbWlkeC5jOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtCx0LDQstC10L0iCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC30LAg0L/QsNC60LXRgtC4IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSIKKworIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAi0L7QsdC10LrRgiAlZCDQsiDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7INC70LjQv9GB0LLQsCIKKworIzogbWlkeC5jOjg0MgorbXNnaWQgIkFkZGluZyBwYWNrZmlsZXMgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1INC60YrQvCDQuNC90LTQtdC60YEg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4IgorCisjOiBtaWR4LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3Qgc2VlIHBhY2stZmlsZSAlcyB0byBkcm9wIgorbXNnc3RyICLQv9Cw0LrQtdGC0L3QuNGP0YIg0YTQsNC50Lsg0LfQsCDRgtGA0LjQtdC90LUg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1IgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAi0JfQsNC/0LjRgSDQvdCwINC+0YLQutGK0YHQuCDQutGK0Lwg0LjQvdC00LXQutGBINC30LAg0LzQvdC+0LbQtdGB0YLQstC+INC/0LDQutC10YLQuCIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0LfQsCDQvNC90L7QttC10YHRgtCy0L4g0L/QsNC60LXRgtC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YfQuNGB0YLQtdC9INC/0YDQuCDigJ4lc+KAnCIKKworIzogbWlkeC5jOjExMDgKK21zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAi0KLRitGA0YHQtdC90LUg0L3QsCDRg9C60LDQt9Cw0L3QuNGC0LUg0L/QsNC60LXRgtC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKIG1zZ3N0ciAiIgotItCf0L7RgdC70LXQtNC90L4g0YPRgdGC0LDQvdC+0LLQtdC90L7RgtC+INGB0YrRgdGC0L7Rj9C90LjQtSDQvdC1INC+0YLQs9C+0LLQsNGA0Y8g0L3QsCDRgtC+0LLQsCDQsiDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+LlxuIgotIlxuIgotItCd0Y/QutC+0Lkg0LTRgNGD0LMg0L/RgNC+0YbQtdGBINC30LAgR2l0INC1INC/0YDQvtC80LXQvdC40Lsg0YXRgNCw0L3QuNC70LjRidC10YLQviDQvNC10LbQtNGD0LLRgNC10LzQtdC90L3Qvi4g0KHRitGB0YLQvtGP0L3QuNC10YLQviAiCi0i0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0L/RgNC+0LLQtdGA0LXQvdC+LCDQv9GA0LXQtNC4INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDRgdC70LjQstCw0L3QtS5cbiIKLSJcbiIKLSLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsC5cbiIKLSJcbiIKKyLQvdC10L/RgNCw0LLQuNC70L3QsCDQv9C+0LTRgNC10LTQsdCwINC90LAg0L7RgtC60YrRgdC4IChPSUQgZmFub3V0KTogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICIKKyIlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgogCi0jOiBsaWIvbWVyZ2UudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0CisjOiBtaWR4LmM6MTEyOAorbXNnaWQgIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiIgorItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQv9C+0LTRgNC10LTQsdCw0YLQsCDQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Lgg0L3QsCDQvtCx0LXQutGC0Lgg0LLRitCyINGE0LDQudC7INGBINC40L3QtNC10LrRgSDQutGK0LwgIgorItC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogbWlkeC5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIiIKKyLQvdC10L/RgNCw0LLQuNC70L3QsCDQv9C+0LTRgNC10LTQsdCwINC90LAg0L7RgtC60YrRgdC4IChPSUQgbG9va3VwKTogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgItCf0L7QtNGA0LXQtNCx0LAg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC/0L4g0L/QsNC60LXRgtC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IG1pZHguYzoxMTY0Cittc2dpZCAiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0L7RgtC80LXRgdGC0LLQsNC90LXRgtC+INC90LAg0L7QsdC10LrRgtC4IgorCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgItC30LDQv9C40YHRitGCINCyINC/0LDQutC10YLQsCDQt9CwINC+0LHQtdC60YLQsCBvaWRbJWRdID0gJXMg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDRgNC10LTQtdC9IgorCisjOiBtaWR4LmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdCwINC/0LDQutC10YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNGA0LXQtNC10L0iCisKKyM6IG1pZHguYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC+0YLQvNC10YHRgtCy0LDQvdC1INC90LAg0L7QsdC10LrRgiDQt9CwIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKKworIzogbWlkeC5jOjEyMjAKK21zZ2lkICJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgItCf0YDQtdCx0YDQvtGP0LLQsNC90LUg0L3QsCDRgdCy0YrRgNC30LDQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAi0KLRitGA0YHQtdC90LUg0Lgg0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0L3QtdGB0LLRitGA0LfQsNC90LjRgtC1INC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDigJ5wYWNrLW9iamVjdHPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YLQsNGA0YLQuNGA0LDQvdCwIgorCisjOiBtaWR4LmM6MTQwNworbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIgorbXNnc3RyICLQutC+0LzQsNC90LTQsNGC0LAg4oCecGFjay1vYmplY3Rz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0LLRitGA0YjQtdC90LAiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INC90LjRiNC60LAg0LfQsCDQtNC40YDQtdC60YLQvtGA0LjQuDogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQvdC40YjQutCwINC30LAg0LjQvNC10L3QsDogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9GH0LDQutCwINC90LjRiNC60LAg0LfQsCDQuNC80LXQvdCwOiAlcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgotIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgcHJldmlvdXMgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuXG4iCisiUGxlYXNlLCB1c2UgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyB0byAiCisiY29tbWl0L2Fib3J0IHRoZSBwcmV2aW91cyBtZXJnZSBiZWZvcmUgeW91IHN0YXJ0IGEgbmV3IG5vdGVzIG1lcmdlLiIKIG1zZ3N0ciAiIgotItCSINC80L7QvNC10L3RgtCwINGC0LXRh9C1INGB0LvQuNCy0LDQvdC1LCDQvdC+INC40LzQsCDQutC+0L3RhNC70LjQutGC0LguXG4iCisi0J3QtSDRgdGC0LUg0LfQsNCy0YrRgNGI0LjQu9C4INC/0YDQtdC00LjRiNC90L7RgtC+INGB0LvQuNCy0LDQvdC1INC90LAg0LHQtdC70LXQttC60LguICAo0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJXPigJwgIgorItGB0YrRidC10YHRgtCy0YPQstCwKS5cbiIKKyLQl9CwINC00LAg0LfQsNCy0YrRgNGI0LjRgtC1INC/0YDQtdC00LjRiNC90L7RgtC+INGB0LvQuNCy0LDQvdC1LCDQuNC30L/RitC70L3QtdGC0LU6XG4iCiAiXG4iCi0i0J/QvtCz0LvQtdC00L3QtdGC0LUg0YTQsNC50LvQsCDigJ4lc+KAnC5cbiIKKyIgICAgZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0XG4iCiAiXG4iCi0i0KLRgNGP0LHQstCwINC00LAg0LrQvtGA0LjQs9C40YDQsNGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQsiDQvdC10LPQviwg0LTQsCDQs9C+INC00L7QsdCw0LLQuNGC0LUg0LrRitC8INC40L3QtNC10LrRgdCwINC4INC00LAgIgotItC30LDQstGK0YDRiNC40YLQtSDRgtC10LrRg9GJ0L7RgtC+INGB0LvQuNCy0LDQvdC1INGH0YDQtdC3INC/0L7QtNCw0LLQsNC90LUuINCn0LDQuiDRgtC+0LPQsNCy0LAg0LzQvtC20LUg0LTQsCDQt9Cw0L/QvtGH0L3QtdGC0LUg0L3QvtCy0L4gIgotItGB0LvQuNCy0LDQvdC1LlxuIgorItCX0LAg0LTQsCDQvtGC0LzQtdC90LjRgtC1INC/0YDQtdC00LjRiNC90L7RgtC+INGB0LvQuNCy0LDQvdC1LCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBub3RlcyBtZXJnZSAtLWFib3J0IgogCi0jOiBsaWIvbWVyZ2UudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0CisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICIiCisi0J3QtSDRgdGC0LUg0LfQsNCy0YrRgNGI0LjQu9C4INGB0LvQuNCy0LDQvdC10YLQviDQvdCwINCx0LXQu9C10LbQutC40YLQtS4gICjQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCkuIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisi0J3QtdC40L3QuNGG0LjQsNC70LjQt9C40YDQsNC90L4g0LjQu9C4INC90LXRgNC10YTQtdGA0LjRgNCw0L3QviDQtNGK0YDQstC+INC30LAg0LHQtdC70LXQttC60Lgg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QtNCw0LTQtdC90L4iCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAnm5vdGVzLnJld3JpdGVNb2Rl4oCcOiDigJ4lc+KAnCIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiIKKyLQkdC10LvQtdC20LrQuNGC0LUg0LIg4oCeJXPigJwg0L3Rj9C80LAg0LTQsCDQsdGK0LTQsNGCINC/0YDQtdC30LDQv9C40YHQsNC90LgsINC30LDRidC+0YLQviDRgdCwINC40LfQstGK0L0g4oCecmVmcy9ub3Rlcy/igJwuIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mCisjLiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMKKyMuIGl0cyB2YWx1ZS4KKyMuCisjOiBub3Rlcy11dGlscy5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgItCX0LDQtNCw0LTQtdC90LAg0LUg0LvQvtGI0LAg0YHRgtC+0LnQvdC+0YHRgiDQvdCwINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCDigJ4lc+KAnDog4oCeJXPigJwiCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQg0L7QsdC10LrRgjog4oCeJXPigJwiCisKKyM6IG9iamVjdC5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgYSAlcywgbm90IGEgJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC1ICVzLCDQsCDQvdC1ICVzIgorCisjOiBvYmplY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGhhcyB1bmtub3duIHR5cGUgaWQgJWQiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC1INC90LXQv9C+0LfQvdCw0YIg0LLQuNC0OiAlZCIKKworIzogb2JqZWN0LmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L0iCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LAg0LIg0LrQvtC90YLRgNC+0LvQvdCw0YLQsCDRgdGD0LzQsDog4oCeJXPigJwiCisKKyM6IHBhY2tmaWxlLmM6NjI5Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIiIKKyLQvtGC0LzQtdGB0YLQstCw0L3QtSDQv9GA0LXQtNC4INC60YDQsNGPINC90LAg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyAo0LLRitC30LzQvtC20L3QviDQtSDQuNC90LTQtdC60YHRitGCINC00LAg0LUg0L/QvtCy0YDQtdC00LXQvSkiCisKKyM6IHBhY2tmaWxlLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgIiIKKyLQvtGC0LzQtdGB0YLQstCw0L3QtSDQv9GA0LXQtNC4INC90LDRh9Cw0LvQvtGC0L4g0L3QsCDQuNC90LTQtdC60YHQsCDQvdCwINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg4oCeJXPigJwgKNCy0YrQt9C80L7QttC90L4g0LUgIgorItC40L3QtNC10LrRgdGK0YIg0LTQsCDQtSDQv9C+0LLRgNC10LTQtdC9KSIKKworIzogcGFja2ZpbGUuYzoxODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAiIgorItC+0YLQvNC10YHRgtCy0LDQvdC1INC/0YDQtdC00Lgg0LrRgNCw0Y8g0L3QsCDQuNC90LTQtdC60YHQsCDQvdCwINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg4oCeJXPigJwgKNCy0YrQt9C80L7QttC90L4g0LUg0LjQvdC00LXQutGB0YrRgiAiCisi0LTQsCDQtSDQvtGC0YDRj9C30LDQvSkiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQuNC30LjRgdC60LLQsCDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAniVz4oCcINC4IOKAniVz4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC90LXRidC+IgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQtSDQvdCw0LvQuNGH0L3QsCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiIKKyLigJ4lc+KAnCDQvtGH0LDQutCy0LAg0L3QtdC+0YLRgNC40YbQsNGC0LXQu9C90L4g0YbRj9C70L4g0YfQuNGB0LvQviwg0LXQstC10L3RgtGD0LDQu9C90L4g0YHRitGBINGB0YPRhNC40LrRgSDigJ5r4oCcL+KAnm3igJwv4oCeZ+KAnCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgItC90LXQtdC00L3QvtC30L3QsNGH0L3QsCDQvtC/0YbQuNGPOiDigJ4lc+KAnCAo0LzQvtC20LUg0LTQsCDQtSDigJ4tLSVzJXPigJwg0LjQu9C4IOKAni0tJXMlc+KAnCkiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo0MjMgcGFyc2Utb3B0aW9ucy5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgeW91IG1lYW4gYC0tJXNgICh3aXRoIHR3byBkYXNoZXMgPykiCittc2dzdHIgIuKAni0tJXPigJwgKNGBIDIg0YLQuNGA0LXRgtCwKSDQu9C4INC40LzQsNGF0YLQtSDQv9GA0LXQtNCy0LjQtD8iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gYCVzJyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC+0L/RhtC40Y86IOKAniVz4oCcIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0YTQu9Cw0LMg4oCeJWPigJwiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub24tYXNjaWkgb3B0aW9uIGluIHN0cmluZzogYCVzJyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0LjQt9Cy0YrQvSDigJ5hc2NpaeKAnCDQsiDQvdC40LfQsDog4oCeJXPigJwiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODgKK21zZ2lkICIuLi4iCittc2dzdHIgIuKApiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgItGD0L/QvtGC0YDQtdCx0LA6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24uCisjLgorIzogcGFyc2Utb3B0aW9ucy5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgICAg0LjQu9C4OiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk1NQorbXNnaWQgIi1OVU0iCittc2dzdHIgIi3Qp9CY0KHQm9CeIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni0tJXPigJwiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoyMCBwYXJzZS1vcHRpb25zLWNiLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0L7Rh9Cw0LrQstCwINGH0LjRgdC70L4g0LfQsCDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQtNCw0YLQsCDQvdCwINGB0YDQvtC6OiDigJ4lc+KAnCIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC40LfQuNGB0LrQstCwINC90Y/QutC+0Y8g0L7RgiDRgdGC0L7QudC90L7RgdGC0LjRgtC1OiDigJ5hbHdheXPigJwgKNCy0LjQvdCw0LPQuCksICIKKyLigJ5hdXRv4oCcICjQsNCy0YLQvtC80LDRgtC40YfQvdC+KSDQuNC70Lgg4oCebmV2ZXLigJwgKNC90LjQutC+0LPQsCkiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0L7QsdC10LrRgiDigJ4lc+KAnCIKKworIzogcGF0aC5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAi0J3QtSDQvNC+0LPQsNGCINC00LAg0YHQtSDQtNCw0LTQsNGCINC/0YDQsNCy0LAg0LfQsCDQt9Cw0L/QuNGBINCyINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdCwINCz0YDRg9C/0LDRgtCwIgorCisjOiBwYXRoc3BlYy5jOjEzMAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICIiCisi0JXQutGA0LDQvdC40YDQsNGJ0LjRj9GCINC30L3QsNC6IOKAnlxc4oCc0L3QtSDQvNC+0LbQtSDQtNCwINC1INC/0L7RgdC70LXQtNC10L0g0LfQvdCw0Log0LIg0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDQsNGC0YDQuNCx0YPRgiIKKworIzogcGF0aHNwZWMuYzoxNDgKK21zZ2lkICJPbmx5IG9uZSAnYXR0cjonIHNwZWNpZmljYXRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgItCf0L7Qt9Cy0L7Qu9C10L3QviDQtSDRgdCw0LzQviDQtdC00L3QviDRg9C60LDQt9Cy0LDQvdC1INC90LAg4oCeYXR0cjrigJwuIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAi4oCeYXR0cjrigJwg0YLRgNGP0LHQstCwINC00LAg0YPQutCw0LfQstCwINGB0YLQvtC50L3QvtGB0YIiCisKKyM6IHBhdGhzcGVjLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINCw0YLRgNC40LHRg9GCOiDigJ4lc+KAnCIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQs9C70L7QsdCw0LvQvdC40YLQtSDQvdCw0YHRgtGA0L7QudC60Lgg0LfQsCDQv9GK0YLQuNGJ0LAg4oCeZ2xvYuKAnCDQuCDigJ5ub2dsb2LigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IHBhdGhzcGVjLmM6MjY2CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCiBtc2dzdHIgIiIKLSLQkiDQvNC+0LzQtdC90YLQsCDRgtC10YfQtSDQv9C+0LTQsNCy0LDQvdC1LlxuIgotIlxuIgotItCk0LDQudC70YrRgiDigJ4lc+KAnCDQtSDQv9GA0L7QvNC10L3QtdC9LlxuIgotIlxuIgotItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQstGK0YDRiNC40YLQtSDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUsINC/0YDQtdC00Lgg0LTQsCDQt9Cw0L/QvtGH0L3QtdGC0LUg0YHQu9C40LLQsNC90LUuINCi0LDQutCwINGJ0LUgIgotItC80L7QttC10YLQtSDQu9C10YHQvdC+INC00LAg0L/RgNC10YPRgdGC0LDQvdC+0LLQuNGC0LUg0YHQu9C40LLQsNC90LXRgtC+LCDQsNC60L4g0LLRitC30L3QuNC60L3QtSDQvdGD0LbQtNCwLlxuIgorItCz0LvQvtCx0LDQu9C90LDRgtCwINC90LDRgdGC0YDQvtC50LrQsCDQt9CwINC00L7RgdC70L7QstC90Lgg0L/RitGC0LjRidCwIOKAnmxpdGVyYWzigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINCy0YHQuNGH0LrQuCAiCisi0LTRgNGD0LPQuCDQs9C70L7QsdCw0LvQvdC4INC90LDRgdGC0YDQvtC50LrQuCDQt9CwINC/0YrRgtC40YnQsCIKIAotIzogbGliL21lcmdlLnRjbDoxMDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBvZiAlcyIKLW1zZ3N0ciAiJXMg0L7RgiDQvtCx0YnQviAlcyIKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQv9Cw0YDQsNC80LXRgtGK0YAg0LfQsCDQvtC/0YbQuNGP0YLQsCDQt9CwINC80LDQs9C40YfQtdGB0LrQuCDQv9GK0YLQuNGJ0LAg4oCecHJlZml44oCcIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgotbXNnc3RyICLQodC70LjQstCw0L3QtSDQvdCwIOKAniVz4oCcINC4IOKAniVz4oCc4oCmIgorIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwINC+0L/RhtC40Y/RgtCwINC30LAg0LzQsNCz0LjRh9C10YHQutC4INC/0YrRgtC40YnQsCDigJ4lLipz4oCcINCyIOKAniVz4oCcIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzNwotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICLQodC70LjQstCw0L3QtdGC0L4g0LfQsNCy0YrRgNGI0Lgg0YPRgdC/0LXRiNC90L4uIgorIzogcGF0aHNwZWMuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICLQl9C90LDQutGK0YIg4oCeKeKAnCDQu9C40L/RgdCy0LAg0LIg0L7Qv9GG0LjRj9GC0LAg0LfQsCDQvNCw0LPQuNGH0LXRgdC60Lgg0L/RitGC0LjRidCwINCyIOKAniVz4oCcIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEzOQotbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg4oCUINC40LzQsCDQutC+0L3RhNC70LjQutGC0Lgg0LfQsCDQutC+0YDQuNCz0LjRgNCw0L3QtS4iCisjOiBwYXRoc3BlYy5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAi0JzQsNCz0LjRh9C10YHQutC40YLQtSDQv9GK0YLQuNGJ0LAg4oCeJWPigJwg0YHQsCDQsdC10Lcg0YDQtdCw0LvQuNC30LDRhtC40Y8g0LfQsCDigJ4lc+KAnCIKIAotIzogbGliL21lcmdlLnRjbDoxNTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBNZXJnZSIKLW1zZ3N0ciAiJXMgKCVzKTog0KHQu9C40LLQsNC90LUiCisjOiBwYXRoc3BlYy5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6INC+0L/RhtC40LjRgtC1IOKAnmxpdGVyYWzigJwg0Lgg4oCeZ2xvYuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKIAotIzogbGliL21lcmdlLnRjbDoxNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBJbnRvICVzIgotbXNnc3RyICLQodC70LjQstCw0L3QtSDQsiDigJ4lc+KAnCIKKyM6IHBhdGhzcGVjLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXM6IOKAniVz4oCcINC1INC40LfQstGK0L0g0YXRgNCw0L3QuNC70LjRidC10YLQviIKIAotIzogbGliL21lcmdlLnRjbDoxODMKLW1zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKLW1zZ3N0ciAi0JLQtdGA0YHQuNGPINC30LAg0YHQu9C40LLQsNC90LUiCisjOiBwYXRoc3BlYy5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIuKAniVz4oCcICjQutC70LDQstC40Yg6IOKAniVj4oCcKSIKIAotIzogbGliL21lcmdlLnRjbDoyMTgKKyM6IHBhdGhzcGVjLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVzOiDQvNCw0LPQuNGH0LXRgdC60LjRgtC1INC/0YrRgtC40YnQsCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsNGCINC+0YIg0LrQvtC80LDQvdC00LDRgtCwIOKAniVz4oCcIgorCisjOiBwYXRoc3BlYy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgItC/0YrRgtGP0YIg4oCeJXPigJwg0LUg0YHQu9C10LQg0YHQuNC80LLQvtC70L3QsCDQstGA0YrQt9C60LAiCisKKyM6IHBhdGhzcGVjLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0YbQuNGC0LjRgNCw0L0g0YDQtdC0OiAlcyIKKworIzogcGt0LWxpbmUuYzo5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmbHVzaCBwYWNrZXQiCittc2dzdHIgItC/0LDQutC10YLRitGCINC30LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQsdGD0YTQtdGA0LjRgtC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9C40YjQtSIKKworIzogcGt0LWxpbmUuYzo5OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBkZWxpbSBwYWNrZXQiCittc2dzdHIgItGA0LDQt9C00LXQu9GP0YnQuNGP0YIg0L/QsNC60LXRgiDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0L/QuNGI0LUiCisKKyM6IHBrdC1saW5lLmM6MTA2Cittc2dpZCAiZmx1c2ggcGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LHRg9GE0LXRgNC40YLQtSDQv9GA0Lgg0LfQsNC/0LjRgSDQvdCwINC/0LDQutC10YIiCisKKyM6IHBrdC1saW5lLmM6MTQ2IHBrdC1saW5lLmM6MjMyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGltcG9zc2libHkgbG9uZyBsaW5lIgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC70L3QsCDQs9GA0LXRiNC60LA6INC/0YDQtdC60LDQu9C10L3QviDQtNGK0LvRitCzINGA0LXQtCIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC10L0g0LfQsNC/0LjRgSDQvdCwINC/0LDQutC10YIg0YEg0YTQvtGA0LzQsNGCIgorCisjOiBwa3QtbGluZS5jOjE5NgorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIgorbXNnc3RyICIiCisi0L3QtdGD0YHQv9C10YjQtdC9INC30LDQv9C40YEg0L3QsCDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyDigJQg0LTQsNC90L3QuNGC0LUg0L3QsNC00LLQuNGI0LDQstCw0YIg0LzQsNC60YHQuNC80LDQu9C90LjRj9GCINGA0LDQt9C80LXRgCDQvdCwICIKKyLQv9Cw0LrQtdGCIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0LXQvSDQt9Cw0L/QuNGBINC90LAg0L/QsNC60LXRgiIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INGH0LXRgtC10L3QtSIKKworIzogcGt0LWxpbmUuYzozMDMKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIKK21zZ3N0ciAi0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQvdC10L7Rh9Cw0LrQstCw0L3QviDQv9GA0LXQutGK0YHQvdCwINCy0YDRitC30LrQsNGC0LAiCisKKyM6IHBrdC1saW5lLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC70L3QsCDQs9GA0LXRiNC60LA6INC90LXQv9GA0LDQstC40Ltl0L0g0LfQvdCw0Log0LfQsCDQtNGK0LvQttC40L3QsCDQvdCwINGA0LXQtDogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAi0L/RgNC+0YLQvtC60L7Qu9C90LAg0LPRgNC10YjQutCwOiDQvdC10L/RgNCw0LLQuNC70L3QsCDQtNGK0LvQttC40L3QsCDQvdCwINGA0LXQtDogJWQiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvdCwINCz0YDQtdGI0LrQsDogJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQvdC40YjQutCwINC30LAg0LjQt9C/0YrQu9C90LXQvdC40LXRgtC+INC90LAg4oCebHN0YXTigJw6ICVzIgorCisjOiBwcmV0dHkuYzo5ODEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICLQsNGA0LPRg9C80LXQvdGC0YrRgiDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLS1wcmV0dHnigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAi0JvQuNC/0YHQstCwINCw0LTRgNC10YEg0LfQsCDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBwcm9taXNvci1yZW1vdGUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9taXNvciByZW1vdGUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisi0LjQvNC10YLQviDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LdCz0LDRgNCw0L3RgiDQvdC1INC80L7QttC1INC30LAg0LfQsNC/0L7Rh9Cy0LAg0YHRitGBINC30L3QsNC60LAg4oCeL+KAnDogJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LDRgtCwINC30LAg0LbRg9GA0L3QsNC70LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIOKAnmxvZ+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGC0LDRgNGC0LjRgNCwIgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgIiIKKyLQuNC30YXQvtC00YrRgiDQvtGCINC60L7QvNCw0L3QtNCw0YLQsCDQt9CwINC20YPRgNC90LDQu9CwINGBINC/0L7QtNCw0LLQsNC90LjRjyDigJ5sb2figJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LUiCisKKyM6IHJhbmdlLWRpZmYuYzo5NiBzZXF1ZW5jZXIuYzo1MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJyVzJyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC90L4iCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwIGdpdCDigJ4lLipz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKKworIzogcmFuZ2UtZGlmZi5jOjI4NQorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YLRitGA0YHQtdC90LUg0L3QsCDRgNCw0LfQu9C40LrQsCIKKworIzogcmFuZ2UtZGlmZi5jOjUxOCByYW5nZS1kaWZmLmM6NTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciCittc2dzdHIgItC20YPRgNC90LDQu9GK0YIg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvSIKKworIzogcmVhZC1jYWNoZS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIKK21zZ3N0ciAiIgorItC90Y/QvNCwINC00LAg0LHRitC00LUg0LTQvtCx0LDQstC10L0g0L/RgdC10LLQtNC+0L3QuNC8INC30LAg0YTQsNC50Lsg4oCeJXPigJwgKOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINCyINC40L3QtNC10LrRgdCwKSIKKworIzogcmVhZC1jYWNoZS5jOjY5NgorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQsiDQsdCw0LfQsNGC0LAg0L7RgiDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQv9GA0LDQt9C10L0g0L7QsdC10LrRgi1CTE9CIgorCisjOiByZWFkLWNhY2hlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisiJXM6INC80L7QttC1INC00LAg0LTQvtCx0LDQstGP0YLQtSDRgdCw0LzQviDQvtCx0LjQutC90L7QstC10L3QuCDRhNCw0LnQu9C+0LLQtSwg0YHQuNC80LLQvtC70L3QuCDQstGA0YrQt9C60Lgg0Lgg0LTQuNGA0LXQutGC0L7RgNC40LggIgorItC90LAgZ2l0IgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAi0L3QtSDQtSDQuNC30YLQtdCz0LvQtdC90L4g0L/QvtC00LDQstCw0L3QtSDQsiDigJ4lc+KAnCIKKworIzogcmVhZC1jYWNoZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40L3QtNC10LrRgdC40YDQsNC9IgorCisjOiByZWFkLWNhY2hlLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgJyVzJyB0byBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INCyINC40L3QtNC10LrRgdCwIgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgIuKAnnN0YXTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg0LLRitGA0YXRgyDigJ4lc+KAnCIKKworIzogcmVhZC1jYWNoZS5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSBjb250YWlucyBiYWNrc2xhc2g6ICclcyciCittc2dzdHIgItC40LzQtdGC0L4g0L3QsCDRhNCw0LnQuyDQsiDQtdC70LXQvNC10L3RgiDQvtGCINC+0LHQtdC60YIt0LTRitGA0LLQviDRgdGK0LTRitGA0LbQsCDigJ5cXOKAnDog4oCeJXPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIuKAniVz4oCcINGB0YrRidC10YHRgtCy0YPQstCwINC4INC60LDRgtC+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/0LjRgdC4INC30LAg4oCeJXPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzoxOTgzIHJlYWQtY2FjaGUuYzoyMjcxIHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogYnVpbHRpbi9hZGQuYzo0OTkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzggYnVpbHRpbi9jaGVja291dC5jOjQ3MAorIzogYnVpbHRpbi9jaGVja291dC5jOjY1NCBidWlsdGluL2NsZWFuLmM6OTY3IGJ1aWx0aW4vY29tbWl0LmM6MzY3CisjOiBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0OTkgYnVpbHRpbi9tdi5jOjE0NQorIzogYnVpbHRpbi9yZXNldC5jOjI0NiBidWlsdGluL3JtLmM6MjcxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgItGE0LDQudC70YrRgiDRgSDQuNC90LTQtdC60YHQsCDQtSDQv9C+0LLRgNC10LTQtdC9IgorCisjOiByZWFkLWNhY2hlLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQvdC40YjQutCwINC30LAg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQvtGCINC60LXRiNCwOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfRh9Cw0LrQsCDQvdC40YjQutCwINC30LAg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQvtGCINC60LXRiNCwOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzOiDQvdC10YPRgdC/0LXRiNC90L4g0L7RgtCy0LDRgNGP0L3QtSDQvdCwINGE0LDQudC70LAg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIlczog0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L7RgtCy0L7RgNC10L3QuNGPINC40L3QtNC10LrRgSDRgdGK0YEg4oCec3RhdOKAnCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlczog0YTQsNC50LvRitGCINC90LAg0LjQvdC00LXQutGB0LAg0LUg0L/Qvi3QvNCw0LvRitC6INC+0YIg0L7Rh9Cw0LrQstCw0L3QvtGC0L4iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiDQvdC10YPRgdC/0LXRiNC90L4g0LfQsNC00LXQu9GP0L3QtSDQvdCwINGB0YrQvtGC0LLQtdGC0YHRgtCy0LDRidCwINC/0LDQvNC10YIg0YfRgNC10Lcg4oCebW1hcOKAnCDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiByZWFkLWNhY2hlLmM6MjIyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0L3QuNGI0LrQsCDQt9CwINC30LDRgNC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9GI0LjRgNC10L3QuNGP0YLQsCDQvdCwINC40L3QtNC10LrRgdCwOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQvdC40YjQutCwINC30LAg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0YDQsNC30YjQuNGA0LXQvdC40Y/RgtCwINC90LAg0LjQvdC00LXQutGB0LA6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZnJlc2hlbiBzaGFyZWQgaW5kZXggJyVzJyIKK21zZ3N0ciAi0YHQv9C+0LTQtdC70LXQvdC40Y/RgiDQuNC90LTQtdC60YEg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7QsdC90L7QstC4IgorCisjOiByZWFkLWNhY2hlLmM6MjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gaW5kZXgsIGV4cGVjdCAlcyBpbiAlcywgZ290ICVzIgorbXNnc3RyICLQs9GA0LXRiNC60Lgg0LIg0LjQvdC00LXQutGB0LAg4oCUINCyIOKAniUyJHPigJwg0YHQtSDQvtGH0LDQutCy0LAg4oCeJTEkc+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdC+IOKAniUzJHPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzozMDI2IHN0cmJ1Zi5jOjExNDUgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNGC0LLQvtGA0LgiCisKKyM6IHJlYWQtY2FjaGUuYzozMTI5IHNlcXVlbmNlci5jOjI0Mjkgc2VxdWVuY2VyLmM6NDA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5zdGF04oCcINCy0YrRgNGF0YMg4oCeJXPigJwiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LAgZ2l0OiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogcmVhZC1jYWNoZS5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAi0L/RgNCw0LLQsNGC0LAg0LfQsCDQtNC+0YHRgtGK0L8g0LTQviDigJ4lc+KAnCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC/0L7Qv9GA0LDQstC10L3QuCIKKworIzogcmVhZC1jYWNoZS5jOjMzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIlczog0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INC10YLQsNC/IOKEljAiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjI2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJSZXNldCBjaGFuZ2VzP1xuIgotIlxuIgotIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCiBtc2dzdHIgIiIKLSLQlNCwINGB0LUg0LfQsNC90YPQu9GP0YIg0LvQuCDQv9GA0L7QvNC10L3QuNGC0LU/XG4iCi0iXG4iCi0i0JIg0YLQsNC60YrQsiDRgdC70YPRh9Cw0Lkg4peP0JLQodCY0KfQmtCY4pePINC90LXQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4g0LfQsNCz0YPQsdC10L3QuC5cbiIKLSJcbiIKLSLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LTQsCDRgdC1INC30LDQvdGD0LvRj9GCINC/0YDQvtC80LXQvdC40YLQtT8iCisi0J3QtdC/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsMKg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5yZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVja+KAnC4gICIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwINGB0LUg0L/RgNC10YHQutCw0YfQsC4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjQ1Ci1tc2dpZCAiQWJvcnRpbmciCi1tc2dzdHIgItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSIKLQotIzogbGliL21lcmdlLnRjbDoyNDUKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAi0YTQsNC50LvQsCDRgdGK0YEg0LfQsNC90YPQu9C10L3QuCDQv9GA0L7QvNC10L3QuCIKLQotIzogbGliL21lcmdlLnRjbDoyNzMKLW1zZ2lkICJBYm9ydCBmYWlsZWQuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1LiIKLQotIzogbGliL21lcmdlLnRjbDoyNzUKLW1zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCi1tc2dzdHIgItCj0YHQv9C10YjQvdC+INC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtS4g0JPQvtGC0L7QstC90L7RgdGCINC30LAg0YHQu9C10LTQstCw0YnQviDQtNC10LnRgdGC0LLQuNC1LiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6OAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCi1tc2dzdHIgItCU0LAg0YHQtSDQuNC30L/QvtC70LfQstCwINCx0LDQt9C+0LLQsNGC0LAg0LLQtdGA0YHQuNGPIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo5Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCi1tc2dzdHIgItCU0LAg0YHQtSDQuNC30L/QvtC70LfQstCwINCy0LXRgNGB0LjRj9GC0LAg0L7RgiDRgtC+0LfQuCDQutC70L7QvSIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTAKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgotbXNnc3RyICLQlNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQstC10YDRgdC40Y/RgtCwINC+0YIg0LTRgNGD0LPQuNGPINC60LvQvtC9IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAotIywgdGNsLWZvcm1hdAorIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzUKIG1zZ2lkICIiCi0iTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKICJcbiIKLSIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKICJcbiIKLSJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCiBtc2dzdHIgIiIKLSLQoNCw0LfQu9C40LrQsNGC0LAg0L/QvtC60LDQt9Cy0LAg0YHQsNC80L4g0YDQsNC30LvQuNC60LjRgtC1INGBINC60L7QvdGE0LvQuNC60YIuXG4iCiAiXG4iCi0i0KTQsNC50LvRitGCIOKAniVz4oCcINGJ0LUg0LHRitC00LUg0L/RgNC10LfQsNC/0LjRgdCw0L0uXG4iCisi0JrQvtC80LDQvdC00Lg6XG4iCisiIHAsIHBpY2sg0J/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+0LHRidC10L3QuNC10YLQvi5cbiIKICJcbiIKLSLQotCw0LfQuCDQvtC/0LXRgNCw0YbQuNGPINC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC80LXQvdC10L3QsCDRgdCw0LzQviDRh9GA0LXQtyDQt9Cw0L/QvtGH0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QtdGC0L4g0L3QsNC90L7QstC+LiIKKyLQnNC+0LbQtSDQtNCwINC/0YDQvtC80LXQvdGP0YLQtSDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+0YHRgtGC0LAg0L3QsCDRgNC10LTQvtCy0LXRgtC1IOKAlCDRgtC1INGB0LUg0LjQt9C/0YrQu9C90Y/QstCw0YJcbiIKKyLQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvQvdC+INC+0YLQs9C+0YDQtS3QvdCw0LTQvtC70YMuXG4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCi1tc2dzdHIgIiIKLSLQmNC30LPQu9C10LbQtNCwLCDRh9C1INCy0YHQtSDQvtGJ0LUg0LjQvNCwINC90LXQutC+0YDQuNCz0LjRgNCw0L3QuCDQutC+0L3RhNC70LjQutGC0Lgg0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwuINCU0LAg0YHQtSDQtNC+0LHQsNCy0LggIgotItC70Lgg0YTQsNC50LvRitGCINC60YrQvCDQuNC90LTQtdC60YHQsD8iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gItCf0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDigJ4lc+KAnCDQstGK0YDRhdGDIOKAniVz4oCcICglZCDQutC+0LzQsNC90LTQuCkiCittc2dzdHJbMV0gItCf0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDigJ4lc+KAnCDQstGK0YDRhdGDIOKAniVz4oCcICglZCDQutC+0LzQsNC90LTQsCkiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgotbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LrQvtGA0LXQutGG0LjRjyDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUg0LIg4oCeJXPigJwiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQotbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKLW1zZ3N0ciAiIgotItCa0L7QvdGE0LvQuNC60YLQuNGC0LUg0L/RgNC4INGB0LjQvNCy0L7Qu9C90Lgg0LLRgNGK0LfQutC4INC40LvQuCDQuNC30YLRgNC40LLQsNC90LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQutC+0YDQuNCz0LjRgNCw0L3QuCDRgSAiCi0i0LLRitC90YjQvdCwINC/0YDQvtCz0YDQsNC80LAuIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKLW1zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgotbXNnc3RyICLQpNCw0LnQu9GK0YIsINCyINC60L7QudGC0L4g0LUg0LrQvtC90YTQu9C40LrRgtGK0YIsINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI0NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgotbXNnc3RyICLQotC+0LLQsCDQvdC1INC1INCz0YDQsNGE0LjRh9C90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGB0LvQuNCy0LDQvdC1OiDigJ4lc+KAnCIKLQotIzogbGliL21lcmdldG9vbC50Y2w6Mjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgotbXNnc3RyICLQndC10L/QvtC00LTRitGA0LbQsNC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGB0LvQuNCy0LDQvdC1OiDigJ4lc+KAnCIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzEwCi1tc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCi1tc2dzdHIgItCf0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0YHQu9C40LLQsNC90LUg0LLQtdGH0LUg0LUg0YHRgtCw0YDRgtC40YDQsNC90LAuINCU0LAg0LHRitC00LUg0LvQuCDQuNC30LrQu9GO0YfQtdC90LA/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMzAKLSMsIHRjbC1mb3JtYXQKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKIG1zZ2lkICIiCi0iRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyJcbiIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgorbXNnc3RyICIiCisiXG4iCisi0J3QtSDQuNC30YLRgNC40LLQsNC50YLQtSDRgNC10LTQvtCy0LUuICDQn9C+0LTQsNCy0LDQvdC40Y/RgtCwINC80L7Qs9Cw0YIg0LTQsCDRgdC1INC/0YDQtdGB0LrQsNGH0LDRgiDRgSDQutC+0LzQsNC90LTQsNGC0LAgIgorIuKAnmRyb3DigJwuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQkNC60L4g0LjQt9GC0YDQuNC10YLQtSDRgNC10LQsINGB0YrQvtGC0LLQtdGC0YHRgtCy0LDRidC+0YLQviDQvNGDINC/0L7QtNCw0LLQsNC90LUg0YnQtSDQsdGK0LTQtSDQmNCX0KLQoNCY0KLQni5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3MQorbXNnaWQgIiIKKyJcbiIKKyJZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS5cbiIKKyJUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCSINC80L7QvNC10L3RgtCwINGA0LXQtNCw0LrRgtC40YDQsNGC0LUg0YTQsNC50LvQsCDRgSDQutC+0LzQsNC90LTQuNGC0LUg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INC40L3RgtC10YDQsNC60YLQuNCy0L3QviAiCisi0L/RgNC10LHQsNC30LjRgNCw0L3QtS5cbiIKKyLQl9CwINC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4g0YHQu9C10LQg0YLQvtCy0LAsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDgKK21zZ2lkICIiCisiXG4iCisiSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCQ0LrQviDQuNC30YLRgNC40LXRgtC1INCy0YHQuNGH0LrQviwg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4g0YnQtSDQsdGK0LTQtSDQv9GA0LXRg9GB0YLQsNC90L7QstC10L3Qvi5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODUgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk1NQorbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICLQn9GA0LDQt9C90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyDRgdCwINC60L7QvNC10L3RgtC40YDQsNC90LgiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwNSByZXJlcmUuYzo0ODUgcmVyZXJlLmM6NjkyIHNlcXVlbmNlci5jOjM1MzYKKyM6IHNlcXVlbmNlci5jOjM1NjIgc2VxdWVuY2VyLmM6NTI2MyBidWlsdGluL2ZzY2suYzozNDYgYnVpbHRpbi9yZWJhc2UuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9C40YjQtSIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJy4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC60L7Qv9C40YDQsCDQutCw0YLQviDigJ4lc+KAnC4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuXG4iCisiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iCittc2dzdHIgIiIKKyLQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDQvdGP0LrQvtC4INC/0L7QtNCw0LLQsNC90LjRjyDQvNC+0LbQtSDQtNCwINGB0LAg0L/RgNC+0L/Rg9GB0L3QsNGC0LguXG4iCisi0J/RgNC+0L/Rg9GB0L3QsNGC0Lgg0L/QvtC00LDQstCw0L3QuNGPICjQvdC+0LLQuNGC0LUg0YHQsCDQvdCw0Lkt0L7RgtCz0L7RgNC1KTpcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorItCX0LAg0LTQsCDQvdC1INC/0L7Qu9GD0YfQsNCy0LDRgtC1INGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSwg0LjQt9GA0LjRh9C90L4g0L/QvtC70LfQstCw0LnRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDigJ5kcm9w4oCcLlxuIgorIlxuIgorItCd0LDRgdGC0YDQvtC50LrQsNGC0LAg4oCecmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2vigJwg0YPQv9GA0LDQstC70Y/QstCwINC90LjQstC+0YLQviDQvdCwINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LVcbiIKKyLQktGK0LfQvNC+0LbQvdC40YLQtSDRgdGC0L7QudC90L7RgdGC0Lgg0YHQsCDigJ5pZ25vcmXigJwgKNC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC1KSwg4oCed2FybuKAnCAo0YHQsNC80L4gIgorItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUpXG4iCisi0LjQu9C4IOKAnmVycm9y4oCcICjRgdGH0LjRgtCw0L3QtSDQt9CwINCz0YDQtdGI0LrQsCkuXG4iCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INGB0L7Rh9C4INC60YrQvCDQv9C+0LfQstC+0LvQtdC9INC+0LHQtdC60YIhIgorCisjOiByZWZzLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGRhbmdsaW5nIHN5bXJlZiAlcyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC7INC90LAg0L7QsdC10LrRgiDQuNC30LLRitC9INC60LvQvtC9IOKAniVz4oCcIgorCisjOiByZWZzLmM6NjY5IHJlZi1maWx0ZXIuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGJyb2tlbiByZWYgJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0L/QvtCy0YDQtdC00LXQvdC40Y8g0YPQutCw0LfQsNGC0LXQuyDigJ4lc+KAnCIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC30LAg0LfQsNC/0LjRgTogJXMiCisKKyM6IHJlZnMuYzo4MTQgcmVmcy5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJyVzJyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LUiCisKKyM6IHJlZnMuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiByZWZzLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gd3JpdGluZyAnJXMnIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQvtCx0LXQutGCINC/0YDQuCDQt9Cw0L/QuNGB0LLQsNC90LXRgtC+INC90LAg4oCeJXPigJwiCisKKyM6IHJlZnMuYzo4MzMgc2VxdWVuY2VyLmM6NDA1IHNlcXVlbmNlci5jOjI3OTMgc2VxdWVuY2VyLmM6Mjk5NworIzogc2VxdWVuY2VyLmM6MzAxMSBzZXF1ZW5jZXIuYzozMjY5IHNlcXVlbmNlci5jOjUxNzkgc3RyYnVmLmM6MTE0MgorIzogd3JhcHBlci5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAi0LIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QuNGI0LUiCisKKyM6IHJlZnMuYzo4NjAgc3RyYnVmLmM6MTE0MCB3cmFwcGVyLmM6MTg4IHdyYXBwZXIuYzozNTggYnVpbHRpbi9hbS5jOjcxNAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQt9CwINC30LDQv9C40YEiCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQvtCx0LXQutGCINC/0YDQuCDQuNC30YLRgNC40LLQsNC90LXRgtC+INC90LAg4oCeJXPigJwiCisKKyM6IHJlZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgaGFzIGdhcCBhZnRlciAlcyIKK21zZ3N0ciAi0LjQvNCwINC/0YDQvtC/0YPRgdC60Lgg0LIg0LbRg9GA0L3QsNC70LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQt9CwINGD0LrQsNC30LDRgtC10LvRjyDigJ4lc+KAnCDRgdC70LXQtCDigJ4lc+KAnCIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICLQttGD0YDQvdCw0LvRitGCINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LfQsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeJXPigJwg0YHQstGK0YDRiNCy0LAg0L3QtdC+0YfQsNC60LLQsNC90L4g0YHQu9C10LQg4oCeJXPigJwiCisKKyM6IHJlZnMuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJXMgaXMgZW1wdHkiCittc2dzdHIgItC20YPRgNC90LDQu9GK0YIg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQt9CwINGD0LrQsNC30LDRgtC10LvRjyDigJ4lc+KAnCDQtSDQv9GA0LDQt9C10L0iCisKKyM6IHJlZnMuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC7INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0LHQvdC+0LLQuCDRgSDQs9GA0LXRiNC90L4g0LjQvNC1IOKAniVz4oCcIgorCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeJXPigJw6ICVzIgorCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAi0L3QtSDRgdCwINC/0L7Qt9Cy0L7Qu9C10L3QuCDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00L3QsCDQv9GA0L7QvNC10L3QuCDQvdCwINGD0LrQsNC30LDRgtC10LvRjyDigJ4lc+KAnCIKKworIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC40Y/RgtCwINC90LAg0YPQutCw0LfQsNGC0LXQu9C4INGB0LAg0LfQsNCx0YDQsNC90LXQvdC4INCyINGB0YDQtdC00Lgg0L/QvtC0INC60LDRgNCw0L3RgtC40L3QsCIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAsINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1IOKAniVz4oCcIgorCisjOiByZWZzLmM6MjE1NyByZWZzLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcHJvY2VzcyAnJXMnIGFuZCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgItC90LXQstGK0LfQvNC+0LbQvdC+INC1INC10LTQvdC+0LLRgNC10LzQtdC90L3QviDQtNCwINGB0LUg0L7QsdGA0LDQsdC+0YLQstCw0YIg4oCeJXPigJwg0Lgg4oCeJXPigJwiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDggcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgjogJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNTEgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9C40YLQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LDRgiDQuNC30YLRgNC40YLQuDogJXMiCisKKyM6IHJlZnNwZWMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZzcGVjICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGD0LrQsNC30LDRgtC10Ls6IOKAniVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6NDIgd3Qtc3RhdHVzLmM6MTkzOAorbXNnaWQgImdvbmUiCittc2dzdHIgItC40LfRgtGA0LjRgiIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICLQvdCw0L/RgNC10LQg0YEgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgItC90LDQt9Cw0LQg0YEgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICLQvdCw0L/RgNC10LQg0YEgJWQsINC90LDQt9Cw0LQg0YEgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCw0L0g0YTQvtGA0LzQsNGCOiAlJShjb2xvcjrQptCS0K/QoikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0YbQstGP0YI6ICUlKGNvbG9yOiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDRhtGP0LvQviDRh9C40YHQu9C+INC30LAg4oCecmVmbmFtZTpsc3RyaXA9JXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0YbRj9C70L4g0YfQuNGB0LvQviDQt9CwIOKAnnJlZm5hbWU6cnN0cmlwPSVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCw0YDQs9GD0LzQtdC90YIg0LfQsCDigJ4lJSglcynigJw6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKG9iamVjdHR5cGUpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShvYmplY3R0eXBlKSDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IHJlZi1maWx0ZXIuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdHNpemUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQsNGA0LPRg9C80LXQvdGCINC30LAgJSUob2JqZWN0c2l6ZSk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGRlbHRhYmFzZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGRlbHRhYmFzZSkg0L3QtSDQv9GA0LjQtdC80LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiByZWYtZmlsdGVyLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShib2R5KSDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IHJlZi1maWx0ZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKHN1YmplY3QpINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogcmVmLWZpbHRlci5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LDRgNCz0YPQvNC10L3RgiDigJ4lJSh0cmFpbGVycynigJw6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIGNvbnRlbnRzOmxpbmVzPSVzIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQv9C+0LvQvtC20LjRgtC10LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ5jb250ZW50czpsaW5lcz0lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQsNGA0LPRg9C80LXQvdGCINC30LAgJSUoY29udGVudHMpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQv9C+0LvQvtC20LjRgtC10LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ5vYmplY3RuYW1lOnNob3J0PSVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LDRgNCz0YPQvNC10L3RgiDQt9CwICUlKG9iamVjdG5hbWUpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgItC+0YfQsNC60LLQsNC9INGE0L7RgNC80LDRgjogJSUoYWxpZ2460KjQmNCg0J7Qp9CY0J3QkCzQn9Ce0JfQmNCm0JjQrykiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L/QvtC30LjRhtC40Y86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINGI0LjRgNC+0YfQuNC90LA6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCw0YDQs9GD0LzQtdC90YIg0LfQsCAlJShhbGlnbik6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQv9C+0LvQvtC20LjRgtC10LvQvdCwINGI0LjRgNC+0YfQuNC90LAg0YEg0LvQtdC60YHQtdC80LDRgtCwIOKAniUlKGFsaWduKeKAnCIKKworIzogcmVmLWZpbHRlci5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQsNGA0LPRg9C80LXQvdGCINC30LAg4oCeJSUoaWYp4oCcOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0L7QsdC10LrRgjog4oCeJS4qc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQviDQuNC80LUg0L3QsCDQvtCx0LXQutGCOiDigJ4lLipz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICLQvdC1INC1INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIGdpdCwg0LAg0L/QvtC70LXRgtC+IOKAniUuKnPigJwg0LjQt9C40YHQutCy0LAg0LTQvtGB0YLRitC/INC00LDQvdC90Lgg0L3QsCDQvtCx0LXQutGC0L3QuCIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgItGE0L7RgNC80LDRgjog0LvQtdC60YHQtdC80LDRgtCwICUlKGlmKSDQtSDQuNC30L/QvtC70LfQstCw0L3QsCDQsdC10Lcg0YHRitC+0YLQstC10YLQvdCw0YLQsCDRnSAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INC70LXQutGB0LXQvNCw0YLQsCAlJSh0aGVuKSDQtSDQuNC30L/QvtC70LfQstCw0L3QsCDQsdC10Lcg0YHRitC+0YLQstC10YLQvdCw0YLQsCDRnSAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgItGE0L7RgNC80LDRgjog0LvQtdC60YHQtdC80LDRgtCwICUlKHRoZW4pINC1INC40LfQv9C+0LvQt9Cy0LDQvdCwINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC/0YrRgiIKKworIzogcmVmLWZpbHRlci5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDQu9C10LrRgdC10LzQsNGC0LAgJSUodGhlbikg0LUg0LjQt9C/0L7Qu9C30LLQsNC90LAg0YHQu9C10LQgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDQu9C10LrRgdC10LzQsNGC0LAgJSUoZWxzZSkg0LUg0LjQt9C/0L7Qu9C30LLQsNC90LAg0LHQtdC3INGB0YrQvtGC0LLQtdGC0L3QsNGC0LAg0Z0gJSUoaWYpIgorCisjOiByZWYtZmlsdGVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INC70LXQutGB0LXQvNCw0YLQsCAlJShlbHNlKSDQtSDQuNC30L/QvtC70LfQstCw0L3QsCDQsdC10Lcg0YHRitC+0YLQstC10YLQvdCw0YLQsCDRnSAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDQu9C10LrRgdC10LzQsNGC0LAgJSUoZWxzZSkg0LUg0LjQt9C/0L7Qu9C30LLQsNC90LAg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC40L0g0L/RitGCIgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgItGE0L7RgNC80LDRgjog0LvQtdC60YHQtdC80LDRgtCwICUlKGVuZCkg0LUg0LjQt9C/0L7Qu9C30LLQsNC90LAg0LHQtdC3INGB0YrQvtGC0LLQtdGC0L3QsNGC0LAg0Z0iCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGE0L7RgNC80LDRgtC40YDQsNGJINC90LjQtyDigJ4lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAi0LjQt9Cy0YrQvSDQutC70L7QvSwg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMiCittc2dzdHIgItC40LfQstGK0L0g0LrQu9C+0L0sINC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDQvdC10YHQstGK0YDQt9Cw0L0g0YPQutCw0LfQsNGC0LXQuyDigJ5IRUFE4oCcINC/0YDQuCDigJ4lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAi0LjQt9Cy0YrQvSDQutC70L7QvSwg0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUg0L7RgiDigJ4lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjE1MDQKK21zZ2lkICJubyBicmFuY2giCittc2dzdHIgItC40LfQstGK0L0g0LrQu9C+0L0iCisKKyM6IHJlZi1maWx0ZXIuYzoxNTQwIHJlZi1maWx0ZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0LvQuNC/0YHQstCwINC30LAg4oCeJXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INCw0L3QsNC70LjQt9C40YDQsNC90LUg0YfRgNC10Lcg4oCecGFyc2Vfb2JqZWN0X2J1ZmZlcuKAnCDQvdCwIOKAniVz4oCcINC30LAg4oCeJXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAi0L7QsdC10LrRgiDRgdGK0YEg0YHQs9GA0LXRiNC10L0g0YTQvtGA0LzQsNGCINC/0YDQuCDigJ4lc+KAnCIKKworIzogcmVmLWZpbHRlci5jOjIwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9GPINGBINCz0YDQtdGI0L3QviDQuNC80LUg4oCeJXPigJwiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgItCz0YDQtdGI0LrQsCDQstGK0LIg0YTQvtGA0LzQsMyA0YLQsDog0LvQuNC/0YHQstCwINC70LXQutGB0LXQvNCw0YLQsCAlJShlbmQpIgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeJXPigJwg0Lgg4oCeLS1tZXJnZWTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4lc+KAnCDQuCDigJ4tLW5vLW1lcmdlZOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogcmVmLWZpbHRlci5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiByZWYtZmlsdGVyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INGB0L7Rh9C4INC60YrQvCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiByZW1vdGUuYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlnIHJlbW90ZSBzaG9ydGhhbmQgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiIgorItGB0YrQutGA0LDRidC10L3QuNC10YLQviDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC30LAg0LfQsNC/0L7Rh9Cy0LAg0YHRitGBINC30L3QsNC60LAg4oCeL+KAnDogJXMiCisKKyM6IHJlbW90ZS5jOjQxMworbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L0g0LUg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC40L0g0L/QsNC60LXRgiDQt9CwINC/0L7Qu9GD0YfQsNCy0LDQvdC1LCDRidC1INGB0LUg0L/QvtC70LfQstCwINC/0YrRgNCy0LjRj9GCIgorCisjOiByZW1vdGUuYzo0MjEKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L0g0LUg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC40L0g0L/QsNC60LXRgiDQt9CwINC40LfQv9GA0LDRidCw0L3QtSwg0YnQtSDRgdC1INC/0L7Qu9C30LLQsCDQv9GK0YDQstC40Y/RgiIKKworIzogcmVtb3RlLmM6NjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAi0J3QtdCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDRgdC1INC00L7RgdGC0LDQstGP0YIg0LXQtNC90L7QstGA0LXQvNC10L3QvdC+INC4IOKAniVz4oCcLCDQuCDigJ4lc+KAnCDQutGK0Lwg4oCeJXPigJwiCisKKyM6IHJlbW90ZS5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvtCx0LjQutC90L7QstC10L3QviDRgdC70LXQtNC4IOKAniVz4oCcLCDQsCDQvdC1IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICLigJ4lc+KAnCDRgdC70LXQtNC4INC60LDQutGC0L4g4oCeJXPigJwsINGC0LDQutCwINC4IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIgorbXNnc3RyICLQutC70Y7RhyDigJ4lc+KAnCDQvdCwINGI0LDQsdC70L7QvdCwINC90LUg0YHRitC00YrRgNC20LAg4oCeKuKAnCIKKworIzogcmVtb3RlLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbHVlICclcycgb2YgcGF0dGVybiBoYXMgbm8gJyonIgorbXNnc3RyICLRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINC90LAg0YjQsNCx0LvQvtC90LAg0L3QtSDRgdGK0LTRitGA0LbQsCDigJ4q4oCcIgorCisjOiByZW1vdGUuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueSIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg0L3QsCDQstC10YDRgdC40Y8t0LjQt9GC0L7Rh9C90LjQuiDigJ4lc+KAnCDQvdC1INGB0YrQstC/0LDQtNCwINGBINC90LjQutC+0Lkg0L7QsdC10LrRgiIKKworIzogcmVtb3RlLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCINC90LAg0LLQtdGA0YHQuNGPLdC40LfRgtC+0YfQvdC40Log4oCeJXPigJwg0YHRitCy0L/QsNC00LAg0YEg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC40L0g0L7QsdC10LrRgiIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorItCX0LDQtNCw0LTQtdC90LDRgtCwINGG0LXQuyDQvdC1INC1INC/0YrQu9C90L4g0LjQvNC1INC90LAg0YPQutCw0LfQsNGC0LXQuyAo0L3QtSDQt9Cw0L/QvtGH0LLQsCDRgSDigJ5yZWZzL+KAnCkuXG4iCisi0JHRj9GF0LAg0L/RgNC+0LHQstCw0L3QuCDRgdC70LXQtNC90LjRgtC1INCy0LDRgNC40LDQvdGC0Lg6XG4iCisiXG4iCisiICDigYMg0YPQutCw0LfQsNGC0LXQuyDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUsINC60L7QudGC0L4g0LTQsCDRgdGK0L7RgtCy0LXRgtGB0YLQstCwINC90LAg4oCeJXPigJw7XG4iCisiICDigYMg0LTQsNC70Lgg0LjQt9GC0LvQsNGB0LrQstCw0L3QuNGP0YIg0JjQl9Ci0J7Qp9Cd0JjQmiAo4oCeJXPigJwpINC1INGD0LrQsNC30LDRgtC10Lsg0LIg4oCecmVmcy97aGVhZHMsdGFnc30v4oCcLlxuIgorIiAgICDQn9GA0Lgg0YHRitCy0L/QsNC00LXQvdC40LUg0YHQtSDQtNC+0LHQsNCy0Y8g0YHRitC+0YLQstC10YLQtdC9INC/0YDQtdGE0LjQutGBIOKAnnJlZnMve2hlYWRzLHRhZ3N9L+KAnCDQt9CwXG4iCisiICAgINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUuXG4iCisiXG4iCisi0J3QuNC60L7QuSDQvtGCINCy0LDRgNC40LDQvdGC0LjRgtC1INC90LUg0YHRgNCw0LHQvtGC0LguICDQotGA0Y/QsdCy0LAg0YHQsNC80Lgg0LTQsCDRg9C60LDQttC10YLQtSDQv9GK0LvQvdC+0YLQviDQuNC80LUg0L3QsFxuIgorItGD0LrQsNC30LDRgtC10LvRjy4iCisKKyM6IHJlbW90ZS5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgY29tbWl0IG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKK21zZ3N0ciAiIgorItCY0JfQotCe0KfQndCY0JrRitGCINC1INC+0LHQtdC60YIt0L/QvtC00LDQstCw0L3QtS4gINCd0LUg0YbQtdC70LjRgtC1INC70Lgg0LLRgdGK0YnQvdC+0YHRgiDQtNCwINGB0YrQt9C00LDQtNC10YLQtSDQvdC+0LIg0LrQu9C+0L0gIgorItC60LDRgtC+XG4iCisi0LjQt9GC0LvQsNGB0LrQsNGC0LUg0LrRitC8IOKAniVzOnJlZnMvaGVhZHMvJXPigJw/IgorCisjOiByZW1vdGUuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorItCY0JfQotCe0KfQndCY0JrRitGCINC1INC+0LHQtdC60YIt0LXRgtC40LrQtdGCLiAg0J3QtSDRhtC10LvQuNGC0LUg0LvQuCDQstGB0YrRidC90L7RgdGCINC00LAg0YHRitC30LTQsNC00LXRgtC1INC90L7QsiDQutC70L7QvSAiCisi0LrQsNGC0L5cbiIKKyLQuNC30YLQu9Cw0YHQutCw0YLQtSDQutGK0Lwg4oCeJXM6cmVmcy90YWdzLyVz4oCcPyIKKworIzogcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorItCY0JfQotCe0KfQndCY0JrRitGCINC1INC+0LHQtdC60YIt0LTRitGA0LLQvi4gINCd0LUg0YbQtdC70LjRgtC1INC70Lgg0LLRgdGK0YnQvdC+0YHRgiDQtNCwINGB0YrQt9C00LDQtNC10YLQtSDQvdC+0LIg0LrQu9C+0L0g0LrQsNGC0L5cbiIKKyLQuNC30YLQu9Cw0YHQutCw0YLQtSDQutGK0Lwg4oCeJXM6cmVmcy90YWdzLyVz4oCcPyIKKworIzogcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBibG9iIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IGJsb2IgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorItCY0JfQotCe0KfQndCY0JrRitGCINC1INC+0LHQtdC60YItQkxPQi4gINCd0LUg0YbQtdC70LjRgtC1INC70Lgg0LLRgdGK0YnQvdC+0YHRgiDQtNCwINGB0YrQt9C00LDQtNC10YLQtSDQvdC+0LIg0LrQu9C+0L0g0LrQsNGC0L5cbiIKKyLQuNC30YLQu9Cw0YHQutCw0YLQtSDQutGK0Lwg4oCeJXM6cmVmcy90YWdzLyVz4oCcPyIKKworIzogcmVtb3RlLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYnJhbmNoIgorbXNnc3RyICLQvdC1INC1INC+0YLQutGA0LjRgiDQutC70L7QvSDRgdGK0L7RgtCy0LXRgtGB0YLQstCw0Ykg0L3QsCDigJ4lc+KAnCIKKworIzogcmVtb3RlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfRgtGA0LjQtTog0L7RgtC00LDQu9C10YfQtdC90LjRjyDRg9C60LDQt9Cw0YLQtdC7INC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IHJlbW90ZS5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQvdCwINCy0LXRgNGB0LjRjy3RhtC10Lsg4oCeJXPigJwg0YHRitCy0L/QsNC00LAg0YEg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC40L0g0L7QsdC10LrRgiIKKworIzogcmVtb3RlLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgIiIKKyLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQvdCwINCy0LXRgNGB0LjRjy3RhtC10Lsg4oCeJXPigJwg0YHRitC+0YLQstC10YLRgdGC0LLQsCDQuCDRidC1INC/0L7Qu9GD0YfQsNCy0LAg0L7RgiDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00LjQvSAiCisi0LjQt9GC0L7Rh9C90LjQuiIKKworIzogcmVtb3RlLmM6MTYyNyByZW1vdGUuYzoxNzI4Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INGB0L7Rh9C4INC60YrQvCDQutC70L7QvSIKKworIzogcmVtb3RlLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAi0L3Rj9C80LAg0LrQu9C+0L0g0L3QsCDQuNC80LUg4oCeJXPigJwiCisKKyM6IHJlbW90ZS5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgItC90LUg0LUg0LfQsNC00LDQtNC10L0g0LrQu9C+0L0t0LjQt9GC0L7Rh9C90LjQuiDQt9CwINC60LvQvtC90LAg4oCeJXPigJwiCisKKyM6IHJlbW90ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgItC60LvQvtC90YrRgi3QuNC30YLQvtGH0L3QuNC6IOKAniVz4oCcINC90LUg0LUg0YHRitGF0YDQsNC90LXQvSDQutCw0YLQviDRgdC70LXQtNGP0Ykg0LrQu9C+0L0iCisKKyM6IHJlbW90ZS5jOjE2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyLQu9C40L/RgdCy0LAg0LvQvtC60LDQu9C10L0g0YHQu9C10LTRj9GJINC60LvQvtC9INC30LAg0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtdGC0L4g0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1IOKAniVz4oCcINCyICIKKyLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzoxNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgItC90Y/QvNCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC60LvQvtC90YrRgiDigJ4lc+KAnCDQtNCwINGB0LvQtdC00Lgg0L3Rj9C60L7QuSDQtNGA0YPQsyIKKworIzogcmVtb3RlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCINC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwIOKAniVz4oCcINC90LUg0LLQutC70Y7Rh9Cy0LAg4oCeJXPigJwiCisKKyM6IHJlbW90ZS5jOjE2OTUKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCINC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdC1INCy0LrQu9GO0YfQstCwINGG0LXQuyAo4oCecHVzaC5kZWZhdWx04oCcINC1IOKAnm5vdGhpbmfigJwpIgorCisjOiByZW1vdGUuYzoxNzE3Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAi0L/RgNC+0YHRgtC+0YLQviAoc2ltcGxlKSDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LUg0YHRitC+0YLQstC10YLRgdGC0LLQsCDQvdCwINC10LTQvdCwINGG0LXQuyIKKworIzogcmVtb3RlLmM6MTg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvdC40Y/RgiDRg9C60LDQt9Cw0YLQtdC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IHJlbW90ZS5jOjE4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiBJZ25vcmluZyBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IgorbXNnc3RyICLigKIg0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQvdC10L7Rh9Cw0LrQstCw0L3QuNGPINC70L7QutCw0LvQtdC9INGD0LrQsNC30LDRgtC10Lsg4oCeJXPigJwiCisKKyM6IHJlbW90ZS5jOjIwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICLQotC+0LfQuCDQutC70L7QvSDRgdC70LXQtNC4IOKAniVz4oCcLCDQvdC+INGB0LvQtdC00LXQvdC40Y/RgiDQutC70L7QvSDQtSDQuNC30YLRgNC40YIuXG4iCisKKyM6IHJlbW90ZS5jOjIwMjMKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAo0LfQsCDQtNCwINC60L7RgNC40LPQuNGA0LDRgtC1INGC0L7QstCwLCDQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbeKAnClcbiIKKworIzogcmVtb3RlLmM6MjAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCINC1INCw0LrRgtGD0LDQu9C40LfQuNGA0LDQvSDQutGK0Lwg4oCeJXPigJwuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgItCa0LvQvtC90YrRgiDQstC4INC4IOKAniVz4oCcINGB0L7Rh9Cw0YIg0LrRitC8INGA0LDQt9C70LjRh9C90Lgg0L/QvtC00LDQstCw0L3QuNGPLlxuIgorCisjOiByZW1vdGUuYzoyMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiAgKNC30LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC/0L7Qu9C30LLQsNC50YLQtSDigJ4lc+KAnClcbiIKKworIzogcmVtb3RlLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICLQmtC70L7QvdGK0YIg0LLQuCDQtSDRgSAlMiRkINC/0L7QtNCw0LLQsNC90LUg0L/RgNC10LQg4oCeJTEkc+KAnC5cbiIKK21zZ3N0clsxXSAi0JrQu9C+0L3RitGCINCy0Lgg0LUg0YEgJTIkZCDQv9C+0LTQsNCy0LDQvdC40Y8g0L/RgNC10LQg4oCeJTEkc+KAnC5cbiIKKworIzogcmVtb3RlLmM6MjA0MworbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKNC/0YPQsdC70LjQutGD0LLQsNC50YLQtSDQu9C+0LrQsNC70L3QuNGC0LUg0YHQuCDQv9GA0L7QvNC10L3QuCDRh9GA0LXQtyDigJ5naXQgcHVzaOKAnClcbiIKKworIzogcmVtb3RlLmM6MjA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICLQmtC70L7QvdGK0YIg0LLQuCDQtSDRgSAlMiRkINC/0L7QtNCw0LLQsNC90LUg0LfQsNC0IOKAniUxJHPigJwg0Lgg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQstGK0YDRgtGP0L0uXG4iCittc2dzdHJbMV0gItCa0LvQvtC90YrRgiDQstC4INC1INGBICUyJGQg0L/QvtC00LDQstCw0L3QuNGPINC30LDQtCDigJ4lMSRz4oCcINC4INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10LLRitGA0YLRj9C9LlxuIgorCisjOiByZW1vdGUuYzoyMDU0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKNC+0LHQvdC+0LLQtdGC0LUg0LvQvtC60LDQu9C90LjRjyDRgdC4INC60LvQvtC9INGH0YDQtdC3IOKAnmdpdCBwdWxs4oCcKVxuIgorCisjOiByZW1vdGUuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g0YHQtSDQtSDQvtGC0LTQtdC70LjQuyDQvtGCIOKAniVz4oCcLFxuIgorItC00LLQsNGC0LAg0LjQvNCw0YIg0YHRitC+0YLQstC10YLQvdC+INC/0L4gJWQg0LggJWQg0L3QtdGB0YrQstC/0LDQtNCw0YnQuCDQv9C+0LTQsNCy0LDQvdC40Y8uXG4iCittc2dzdHJbMV0gIiIKKyLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9INGB0LUg0LUg0L7RgtC00LXQu9C40Lsg0L7RgiDigJ4lc+KAnCxcbiIKKyLQtNCy0LDRgtCwINC40LzQsNGCINGB0YrQvtGC0LLQtdGC0L3QviDQv9C+ICVkINC4ICVkINC90LXRgdGK0LLQv9Cw0LTQsNGJ0Lgg0L/QvtC00LDQstCw0L3QuNGPLlxuIgorCisjOiByZW1vdGUuYzoyMDY3Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICjRgdC70LXQudGC0LUg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDQsiDQu9C+0LrQsNC70L3QuNGPINGH0YDQtdC3IOKAnmdpdCBwdWxs4oCcKVxuIgorCisjOiByZW1vdGUuYzoyMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICLQvtGH0LDQutCy0LDQvdC+0YLQviDQuNC80LUg0L3QsCDQvtCx0LXQutGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdC+IgorCisjOiByZXBsYWNlLW9iamVjdC5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBsYWNlIHJlZiBuYW1lOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0YPQutCw0LfQsNGC0LXQuyDQt9CwINC30LDQvNGP0L3QsDog4oCeJXPigJwiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAi0L/QvtCy0YLQsNGA0Y/RiSDRgdC1INGD0LrQsNC30LDRgtC10Lsg0LfQsCDQt9Cw0LzRj9C90LA6IOKAniVz4oCcIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAi0LTRitC70LHQvtGH0LjQvdCw0YLQsCDQvdCwINC30LDQvNGP0L3QsCDQtSDQv9GA0LXQutCw0LvQtdC90L4g0LPQvtC70Y/QvNCwINC30LAg0L7QsdC10LrRgtCwOiDigJ4lc+KAnCIKKworIzogcmVyZXJlLmM6MjE3IHJlcmVyZS5jOjIyNiByZXJlcmUuYzoyMjkKK21zZ2lkICJjb3JydXB0IE1FUkdFX1JSIgorbXNnc3RyICLQv9C+0LLRgNC10LTQtdC9IOKAnk1FUkdFX1JS4oCcICjQt9Cw0L/QuNGBINC30LAg0LrQvtGA0LjQs9C40YDQsNC90LUg0L3QsCDQutC+0L3RhNC70LjQutGCKSIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICLQv9GA0LjQu9C+0LbQtdC90L7RgtC+INC60L7RgNC40LPQuNGA0LDQvdC1INC90LAg0LrQvtC90YTQu9C40LrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L3QviIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICLQs9GA0LXRiNC60Lgg0L/RgNC4INC30LDQv9C40YHQstCw0L3QtdGC0L4g0L3QsCDigJ4lc+KAnCAoJXMpIgorCisjOiByZXJlcmUuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZsdXNoICclcyciCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GH0LjRgdGC0LLQsNC90LXRgtC+INC90LAg0LHRg9GE0LXRgNC40YLQtSDQv9GA0Lgg0LfQsNC/0LjRgdCy0LDQvdC10YLQviDQvdCwIOKAniVz4oCcIgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIKK21zZ3N0ciAi0L/QsNGA0YfQtdGC0LDRgtCwINGBINC60L7QvdGE0LvQuNC60YLQuCDQsiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LDRgiIKKworIzogcmVyZXJlLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LLRgNC10LzQtSDQvdCwINC00L7RgdGC0YrQvy/RgdGK0LfQtNCw0LLQsNC90LUg0YfRgNC10Lcg4oCedXRpbWXigJwg0L3QsCDigJ4lc+KAnCIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0LXQvSDQt9Cw0L/QuNGBINC90LAg4oCeJXPigJwiCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiIgorIuKAniVz4oCcINC1INC00L7QsdCw0LLQtdC9INC60YrQvCDQuNC90LTQtdC60YHQsCDRgSDQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC30LDQv9Cw0LfQtdC90LAg0LrQvtGA0LXQutGG0LjRjyDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IHJlcmVyZS5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLiIKK21zZ3N0ciAi0JrQvtGA0LXQutGG0LjRj9GC0LAg0L3QsCDQutC+0L3RhNC70LjQutGC0LAg0L/RgNC4INGB0LvQuNCy0LDQvdC1INC90LAg4oCeJXPigJwg0LUg0LfQsNC/0LDQt9C10L3QsC4iCisKKyM6IHJlcmVyZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICIiCisi0JrQvtC90YTQu9C40LrRgtGK0YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1INC90LAg4oCeJXPigJwg0LUg0LrQvtGA0LjQs9C40YDQsNC9INGBINC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0L/RgNC10LTQuNGI0L3QsCAiCisi0LrQvtGA0LXQutGG0LjRjy4iCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgItC40LfQu9C40YjQvdC40Y/RgiDQvtCx0LXQutGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfRgtGA0LjQtSIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70L3QuNGP0YIg0LLQsNGA0LjQsNC90YIg0L3QsCDigJ4lc+KAnCDQtSDQt9Cw0L/QsNC30LXQvSIKKworIzogcmVyZXJlLmM6ODgxIHN1Ym1vZHVsZS5jOjIwNjcgYnVpbHRpbi9sb2cuYzoxODcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAi0LrQvtC90YTQu9C40LrRgtGK0YIg0LIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7QsdC90L7QstC4IgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0LfQsNC/0LDQt9C10L3QsCDQutC+0YDQtdC60YbQuNGPINC90LAg0LrQvtC90YTQu9C40LrRgiDQv9GA0Lgg4oCeJXPigJwiCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YLRgNC40LUiCisKKyM6IHJlcmVyZS5jOjEwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAi0J/RgNC10LTQstCw0YDQuNGC0LXQu9C90LjRj9GCINCy0LDRgNC40LDQvdGCINC90LAg4oCeJXPigJwg0LUg0L7QsdC90L7QstC10L0iCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAi0JfQsNC/0LDQt9C10L3QsNGC0LAg0LrQvtGA0LXQutGG0LjRjyDQvdCwINC60L7QvdGE0LvQuNC60YIg0L/RgNC4IOKAniVz4oCcINC1INC/0YDQtdC80LDRhdC90LDRgtCwXG4iCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ5yci1jYWNoZeKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0LgiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g0LUg0L/QvtCy0YDQtdC00LXQvSIKKworIzogcmV2aXNpb24uYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAi0KLQtdC60YPRidC40Y/RgiDQutC70L7QvSDigJ4lc+KAnCDQtSDQsdC10Lcg0L/QvtC00LDQstCw0L3QuNGPICIKKworIzogcmV2aXNpb24uYzoyNzA4Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tZmlyc3QtcGFyZW504oCcINC4IOKAni0tYmlzZWN04oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tTOKAnCDQv9C+0LTQtNGK0YDQttCwINC10LTQuNC90YHRgtCy0LXQvdC+INGE0L7RgNC80LDRgtC40YDQsNC90LXRgtC+INC90LAg0YDQsNC30LvQuNC60LjRgtC1INGB0L/QvtGA0LXQtCDQvtC/0YbQuNC40YLQtSDigJ4tIgorInDigJwg0Lgg4oCeLXPigJwiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYyCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L7RgtCy0LDRgNGP0L3QtSDQvdCwIOKAni9kZXYvbnVsbOKAnCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0LDRgdC40L3RhdGA0L7QvdC90LAg0L3QuNGI0LrQsDogJXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICclcycgaG9vayB3YXMgaWdub3JlZCBiZWNhdXNlIGl0J3Mgbm90IHNldCBhcyBleGVjdXRhYmxlLlxuIgorIllvdSBjYW4gZGlzYWJsZSB0aGlzIHdhcm5pbmcgd2l0aCBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgLiIKK21zZ3N0ciAiIgorItCa0YPQutCw0YLQsCDigJ4lc+KAnCDRgdC1INC/0YDQtdGB0LrQsNGH0LAsINC30LDRidC+0YLQviDQu9C40L/RgdCy0LDRgiDQv9GA0LDQstCwINC30LAg0LjQt9C/0YrQu9C90LXQvdC40LUuXG4iCisi0JfQsCDQtNCwINC40LfQutC70Y7Rh9C40YLQtSDRgtC+0LLQsCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1LCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiICAgIGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlIgorCisjOiBzZW5kLXBhY2suYzoxNDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICIiCisi0L3QtdC+0YfQsNC60LLQsNC9INC40LfRh9C40YHRgtCy0LDRiSDQv9Cw0LrQtdGCIOKAnmZsdXNo4oCcINC/0YDQuCDQuNC30YfQuNGC0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvtGCICIKKyLQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YDQsNC30L/QsNC60LXRgtC40YDQsNC90LUiCisKKyM6IHNlbmQtcGFjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgcmVtb3RlIHVucGFjayBzdGF0dXM6ICVzIgorbXNnc3RyICIiCisi0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRgNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L3QvjogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQvtGC0LTQsNC70LXRh9C10L3QviDRgNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QtTogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICLRgdC10YDRgtC40YTQuNC60LDRgtGK0YIg0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LTQv9C40YHQsNC9IgorCisjOiBzZW5kLXBhY2suYzo0MjMKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgItC+0YLRgdGA0LXRidC90LDRgtCwINGB0YLRgNCw0L3QsCDQvdC1INC/0L7QtNC00YrRgNC20LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLXNpZ25lZOKAnCIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisi0L7RgtGB0YDQtdGJ0L3QsNGC0LAg0YHRgtGA0LDQvdCwINC90LUg0L/QvtC00LTRitGA0LbQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INGBINC+0L/RhtC40Y/RgtCwIOKAni0tc2lnbmVk4oCcLCDQt9Cw0YLQvtCy0LAg0L3QtSDRgdC1ICIKKyLQuNC30L/QvtC70LfQstCwINGB0LXRgNGC0LjRhNC40LrQsNGCIgorCisjOiBzZW5kLXBhY2suYzo0MzcKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgItC/0L7Qu9GD0YfQsNCy0LDRidCw0YLQsCDRgdGC0YDQsNC90LAg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC40LfRgtC70LDRgdC60LLQsNC90LUg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLS1hdG9taWPigJwiCisKKyM6IHNlbmQtcGFjay5jOjQ0MgorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICLQvtGC0YHRgNC10YnQvdCw0YLQsCDRgdGC0YDQsNC90LAg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Lgg0L/RgNC4INC40LfRgtC70LDRgdC60LLQsNC90LUiCisKKyM6IHNlcXVlbmNlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICLQvdC10YHRitGJ0LXRgdGC0LLRg9Cy0LDRiSDRgNC10LbQuNC8INC90LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg4oCeJXPigJwg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IHNlcXVlbmNlci5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IHNlcXVlbmNlci5jOjMxMyBidWlsdGluL3JlYmFzZS5jOjc4MSBidWlsdGluL3JlYmFzZS5jOjE3MDYgYnVpbHRpbi9ybS5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IHNlcXVlbmNlci5jOjMyMworbXNnaWQgInJldmVydCIKK21zZ3N0ciAi0L7RgtC80Y/QvdCwIgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAi0L7RgtCx0LjRgNCw0L3QtSIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICJyZWJhc2UgLWkiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdC+INC00LXQudGB0YLQstC40LU6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzozODcKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorItGB0LvQtdC0INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUsINC+0YLQsdC10LvQtdC20LXRgtC1INGB0YrQvtGC0LLQtdGC0L3QuNGC0LVcbiIKKyLQv9GK0YLQuNGJ0LAg0YEg4oCeZ2l0IGFkZCDQn9Cq0KLigKbigJwg0LjQu9C4IOKAnmdpdCBybSDQn9Cq0KLigKbigJwuIgorCisjOiBzZXF1ZW5jZXIuYzozOTAKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorItGB0LvQtdC0INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUsINC+0YLQsdC10LvQtdC20LXRgtC1INGB0YrQvtGC0LLQtdGC0L3QuNGC0LVcbiIKKyLQv9GK0YLQuNGJ0LAg0YEg4oCeZ2l0IGFkZCDQn9Cq0KLigKbigJwg0LjQu9C4IOKAnmdpdCBybSDQn9Cq0KLigKbigJwsINGB0LvQtdC0INC60L7QtdGC0L5cbiIKKyLQv9C+0LTQsNC50YLQtSDRgNC10LfRg9C70YLQsNGC0LAg0YEg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBjb21taXQn4oCcLiIKKworIzogc2VxdWVuY2VyLmM6NDAzIHNlcXVlbmNlci5jOjI5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC60LvRjtGH0LgiCisKKyM6IHNlcXVlbmNlci5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZW9sIHRvICclcyciCittc2dzdHIgItC60YDQsNGP0YIg0L3QsCDRgNC10LQg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LjRiNC1INCyIOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzo0MTUgc2VxdWVuY2VyLmM6Mjc5OCBzZXF1ZW5jZXIuYzoyOTk5IHNlcXVlbmNlci5jOjMwMTMKKyM6IHNlcXVlbmNlci5jOjMyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQstGK0YDRiNC4IgorCisjOiBzZXF1ZW5jZXIuYzo0Mzggc2VxdWVuY2VyLmM6MTcwNyBzZXF1ZW5jZXIuYzoyODE4IHNlcXVlbmNlci5jOjMyNTkKKyM6IHNlcXVlbmNlci5jOjMzNjggYnVpbHRpbi9hbS5jOjI0NCBidWlsdGluL2NvbW1pdC5jOjc4MyBidWlsdGluL21lcmdlLmM6MTExNworIzogYnVpbHRpbi9yZWJhc2UuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBzZXF1ZW5jZXIuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIKK21zZ3N0ciAi0LvQvtC60LDQu9C90LjRgtC1INCy0Lgg0L/RgNC+0LzQtdC90Lgg0YnQtSDQsdGK0LTQsNGCINC/0YDQtdC30LDQv9C40YHQsNC90Lgg0L/RgNC4ICVzLiIKKworIzogc2VxdWVuY2VyLmM6NDY4Cittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICLQv9C+0LTQsNC50YLQtSDQuNC70Lgg0YHQutCw0YLQsNC50YLQtSDQv9GA0L7QvNC10L3QuNGC0LUsINC30LAg0LTQsCDQv9GA0L7QtNGK0LvQttC40YLQtSIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiDQv9GA0LXQstGK0YDRgtCw0L3QtSIKKworIzogc2VxdWVuY2VyLmM6NTM5IGJ1aWx0aW4vdGFnLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICLQndC10YHRitGJ0LXRgdGC0LLRg9Cy0LDRiSDRgNC10LbQuNC8INC90LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg4oCeJXPigJwiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6INC90L7QstC40Y/RgiDQuNC90LTQtdC60YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBzZXF1ZW5jZXIuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgItC00YrRgNCy0L7RgtC+INC90LAg0LrQtdGI0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC90L4iCisKKyM6IHNlcXVlbmNlci5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviwg0YHQvtGH0LXQvdC+INC+0YIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviIKKworIzogc2VxdWVuY2VyLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAi0LIg4oCeJS4qc+KAnCDQvdGP0LzQsCDQutC70Y7Rh9C+0LLQtSIKKworIzogc2VxdWVuY2VyLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgItGG0LjRgtC40YDQsNC90LXRgtC+INC90LAg0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GH0LjRgdGC0LXQvdC+IgorCisjOiBzZXF1ZW5jZXIuYzo3OTIgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MDUKKyM6IGJ1aWx0aW4vYW0uYzo3OTcgYnVpbHRpbi9tZXJnZS5jOjExMTQgYnVpbHRpbi9yZWJhc2UuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgItGE0LDQudC70YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvTog4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjgwMgorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgItC90LDRgdGC0YDQvtC50LrQsNGC0LAg0LfQsCDQsNCy0YLQvtGAIOKAnkdJVF9BVVRIT1JfTkFNReKAnCDQstC10YfQtSDQtSDQt9Cw0LTQsNC00LXQvdCwIgorCisjOiBzZXF1ZW5jZXIuYzo4MDcKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDQt9CwINC1LdC/0L7RidCwIOKAnkdJVF9BVVRIT1JfRU1BSUzigJwg0LLQtdGH0LUg0LUg0LfQsNC00LDQtNC10L3QsCIKKworIzogc2VxdWVuY2VyLmM6ODEyCittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDQt9CwINC00LDRgtCwIOKAnkdJVF9BVVRIT1JfREFUReKAnCDQstC10YfQtSDQtSDQt9Cw0LTQsNC00LXQvdCwIgorCisjOiBzZXF1ZW5jZXIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L/RgNC+0LzQtdC90LvQuNCy0LAg4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjgyMQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgItC90LDRgdGC0YDQvtC50LrQsNGC0LAg0LfQsCDQsNCy0YLQvtGAIOKAnkdJVF9BVVRIT1JfTkFNReKAnCDQu9C40L/RgdCy0LAiCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QudC60LDRgtCwINC30LAg0LUt0L/QvtGJ0LAg4oCeR0lUX0FVVEhPUl9FTUFJTOKAnCDQu9C40L/RgdCy0LAiCisKKyM6IHNlcXVlbmNlci5jOjgyNQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgItC90LDRgdGC0YDQvtC50LrQsNGC0LAg0LfQsCDQtNCw0YLQsCDigJ5HSVRfQVVUSE9SX0RBVEXigJwg0LvQuNC/0YHQstCwIgorCisjOiBzZXF1ZW5jZXIuYzo5MDIgc2VxdWVuY2VyLmM6MTQyNworbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRhNC+0YDQvNCw0YIg0L3QsCDRgNC10LQg0LfQsCDQuNC00LXQvdGC0LjRhNC40LrQsNGG0LjRjyIKKworIzogc2VxdWVuY2VyLmM6OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLQsiDRgtC+0LLQsCDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+INC40LzQsCDRgdC60LDRgtCw0L3QuCDQv9GA0L7QvNC10L3QuC5cbiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0LPQuCDQstC60LDRgNCw0YLQtSDQsiDQv9GA0LXQtNC40YjQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1LCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDRgdGK0LfQtNCw0LTQtdGC0LUg0L3QvtCy0L4g0L/QvtC00LDQstCw0L3QtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisi0Jgg0LIg0LTQstCw0YLQsCDRgdC70YPRh9Cw0Y8g0L/RgNC+0LTRitC70LbQsNCy0LDRgtC1INGB0LvQtdC0INGC0L7QstCwINGBINC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMTgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAiIgorItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60YPQutCw0YLQsCDQv9GA0Lgg0L/RgNC+0LzRj9C90LAg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1ICIKKyIocHJlcGFyZS1jb21taXQtbXNnKSIKKworIzogc2VxdWVuY2VyLmM6MTIyNAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorItCY0LzQtdGC0L4g0Lgg0LDQtNGA0LXRgdGK0YIg0LfQsCDQtS3Qv9C+0YnQsCDRgdCwINC90LDRgdGC0YDQvtC10L3QuCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC90LAg0LHQsNC30LDRgtCwINC90LAg0LjQvNC10YLQviDQvdCwXG4iCisi0L/QvtGC0YDQtdCx0LjRgtC10LvRjyDQuCDQuNC80LXRgtC+INC90LAg0LzQsNGI0LjQvdCw0YLQsC4gINCf0YDQvtCy0LXRgNC10YLQtSDQtNCw0LvQuCDRgdCwINCy0LXRgNC90LguICDQnNC+0LbQtdGC0LUg0LTQsCAiCisi0YHQv9GA0LXRgtC1XG4iCisi0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1INC60LDRgtC+INC40LfRgNC40YfQvdC+INC30LDQtNCw0LTQtdGC0LUg0YHRgtC+0LnQvdC+0YHRgtC40YLQtS4gINCY0LfQv9GK0LvQvdC10YLQtSDRgdC70LXQtNC90LDRgtCwICIKKyLQutC+0LzQsNC90LTQsFxuIgorItC4INGB0LvQtdC00LLQsNC50YLQtSDQuNC90YHRgtGA0YPQutGG0LjQuNGC0LUg0LIg0YLQtdC60YHRgtC+0LLQuNGPINCy0Lgg0YDQtdC00LDQutGC0L7RgCwg0LfQsCDQtNCwINGA0LXQtNCw0LrRgtC40YDQsNGC0LVcbiIKKyLQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRjyDRhNCw0LnQuzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyLQodC70LXQtCDQutCw0YLQviDQvdCw0L/RgNCw0LLQuNGC0LUg0YLQvtCy0LAsINC80L7QttC10YLQtSDQtNCwINC60L7RgNC40LPQuNGA0LDRgtC1INC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINCw0LLRgtC+0YDQsCDQvdCwXG4iCisi0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INGH0YDQtdC3OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIzNworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorItCY0LzQtdGC0L4g0Lgg0LDQtNGA0LXRgdGK0YIg0LfQsCDQtS3Qv9C+0YnQsCDRgdCwINC90LDRgdGC0YDQvtC10L3QuCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC90LAg0LHQsNC30LDRgtCwINC90LAg0LjQvNC10YLQviDQvdCwXG4iCisi0L/QvtGC0YDQtdCx0LjRgtC10LvRjyDQuCDQuNC80LXRgtC+INC90LAg0LzQsNGI0LjQvdCw0YLQsC4gINCf0YDQvtCy0LXRgNC10YLQtSDQtNCw0LvQuCDRgdCwINCy0LXRgNC90LguICDQnNC+0LbQtdGC0LUg0LTQsCAiCisi0YHQv9GA0LXRgtC1XG4iCisi0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1INC60LDRgtC+INC40LfRgNC40YfQvdC+INC30LDQtNCw0LTQtdGC0LUg0YHRgtC+0LnQvdC+0YHRgtC40YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCLQktCw0YjQtdGC0L4g0JjQvNC1XCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsINC/0LXQvdGH0L5AZXhhbXBsZS5jb21cbiIKKyJcbiIKKyLQodC70LXQtCDQutCw0YLQviDQvdCw0L/RgNCw0LLQuNGC0LUg0YLQvtCy0LAsINC80L7QttC10YLQtSDQtNCwINC60L7RgNC40LPQuNGA0LDRgtC1INC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINCw0LLRgtC+0YDQsCDQvdCwXG4iCisi0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INGH0YDQtdC3OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTI3OQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgItGC0L7QutGDINGJ0L4g0YHRitC30LTQsNC00LXQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviIKKworIzogc2VxdWVuY2VyLmM6MTI4MQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAi0YLQvtC60YMg0YnQviDRgdGK0LfQtNCw0LTQtdC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC90L4iCisKKyM6IHNlcXVlbmNlci5jOjEzMjcKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIGFmdGVyIGNyZWF0aW5nIGNvbW1pdCIKK21zZ3N0ciAiIgorItGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0YHQvtGH0LXQvdC+INC+0YIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtC+INGB0LvQtdC0ICIKKyLQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogc2VxdWVuY2VyLmM6MTMyOQorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgItC90LXRgdCy0YrRgNC30LDQvSDQstGA0YrRhSDigJ5IRUFE4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoxMzMzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAo0L3QsNGH0LDQu9C90L4g0L/QvtC00LDQstCw0L3QtSkiCisKKyM6IHNlcXVlbmNlci5jOjEzNTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L0iCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcIOKAniVz4oCcINGB0L7Rh9C4INC60YrQvCDQvdC10YnQviwg0LrQvtC10YLQviDQvdC1INC1INC/0L7QtNCw0LLQsNC90LUhIgorCisjOiBzZXF1ZW5jZXIuYzoxMzYwIHNlcXVlbmNlci5jOjE0NTggYnVpbHRpbi9jb21taXQuYzoxNTY5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICLQstGK0YDRhdC+0LLQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90L4iCisKKyM6IHNlcXVlbmNlci5jOjE0MTEgc2VxdWVuY2VyLmM6MjA1NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICLQsNCy0YLQvtGA0YrRgiDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvSIKKworIzogc2VxdWVuY2VyLmM6MTQzMQorbXNnaWQgImNvcnJ1cHRlZCBhdXRob3Igd2l0aG91dCBkYXRlIGluZm9ybWF0aW9uIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQsNCy0YLQvtGAINCx0LXQtyDQtNCw0YLQsCIKKworIzogc2VxdWVuY2VyLmM6MTQ0NyBidWlsdGluL2FtLmM6MTU2MSBidWlsdGluL21lcmdlLmM6Njg0Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCB3cml0ZS10cmVl4oCcINC90LUg0YPRgdC/0Y8g0LTQsCDQt9Cw0L/QuNGI0LUg0L7QsdC10LrRgi3QtNGK0YDQstC+IgorCisjOiBzZXF1ZW5jZXIuYzoxNDgwIHNlcXVlbmNlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+INC+0YIg4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjE1MTYgYnVpbHRpbi9hbS5jOjE1ODMgYnVpbHRpbi9jb21taXQuYzoxNjY4IGJ1aWx0aW4vbWVyZ2UuYzo4ODMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MDgKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg0LfQsCDQv9C+0LTQsNCy0LDQvdC10YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IHNlcXVlbmNlci5jOjE1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC90L4iCisKKyM6IHNlcXVlbmNlci5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgItGA0L7QtNC40YLQtdC70YHQutC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdC+IgorCisjOiBzZXF1ZW5jZXIuYzoxNjU2IHNlcXVlbmNlci5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC60L7QvNCw0L3QtNCwOiAlZCIKKworIzogc2VxdWVuY2VyLmM6MTcxNCBzZXF1ZW5jZXIuYzoxNzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAlZCBjb21taXRzLiIKK21zZ3N0ciAi0KLQvtCy0LAg0LUg0L7QsdC10LTQuNC90LXQvdC40LUg0L7RgiAlZCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IHNlcXVlbmNlci5jOjE3MjQKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAi0JfQsCDQstC60LDRgNCy0LDQvdC1INCyINC/0YDQtdC00YXQvtC00L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQstC4INGC0YDRj9Cx0LLQsCDRg9C60LDQt9Cw0YLQtdC7IOKAnkhFQUTigJwiCisKKyM6IHNlcXVlbmNlci5jOjE3MjYgc2VxdWVuY2VyLmM6MzMwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LUiCisKKyM6IHNlcXVlbmNlci5jOjE3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQutGK0Lwg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QvjogJXMiCisKKyM6IHNlcXVlbmNlci5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9Cw0LfQuCIKKworIzogc2VxdWVuY2VyLmM6MTc0MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAi0KLQvtCy0LAg0LUgMS3RgtC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtToiCisKKyM6IHNlcXVlbmNlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgItGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC60YrQvCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+IgorCisjOiBzZXF1ZW5jZXIuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgItCi0L7QstCwINC1INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDihJYlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLQodGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUg4oSWJWQg0YnQtSDQsdGK0LTQtSDQv9GA0LXRgdC60L7Rh9C10L3QvjoiCisKKyM6IHNlcXVlbmNlci5jOjE4NTAKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LUg0YHQu9GP0YIuIgorCisjOiBzZXF1ZW5jZXIuYzoxODU3Cittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICLQvdCw0YfQsNC70L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC60LDRgNCwINCyINC/0YDQtdC00YXQvtC00L3QvtGC0L4g0LzRgyIKKworIzogc2VxdWVuY2VyLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC1INGB0LvQuNCy0LDQvdC1LCDQvdC+INC90LUg0LUg0LTQsNC00LXQvdCwINC+0L/RhtC40Y/RgtCwIOKAni1t4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoxODg0IHNlcXVlbmNlci5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQvdGP0LzQsCDRgNC+0LTQuNGC0LXQuyAlZCIKKworIzogc2VxdWVuY2VyLmM6MTg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQstC70LjRh9Cw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxOTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6INC90LXRgNCw0LfQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC30LAg0YDQvtC00LjRgtC10LvRgdC60L7RgtC+INC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC40LzQtdC90YPQstCwINC90LAg4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJzigKYg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQvNC10L3QtdC90L46IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJzigKYg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70L7QttC10L3Qvjog4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjIxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczog0L3QtdGD0YHQv9C10YjQvdC+INC40LfRh9C40YLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6MjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiDQvdC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6MjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0Lg6IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoyMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnRzIGZvciAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0LjQt9C40YHQutCy0LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiBzZXF1ZW5jZXIuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCittc2dzdHIgIuKAniUuKnPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBzZXF1ZW5jZXIuYzoyMjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC0ICVkOiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzoyMzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAnJXMnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgItCR0LXQtyDQv9GA0LXQtNC40YjQvdC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjIzNDggYnVpbHRpbi9yZWJhc2UuYzoxNzIgYnVpbHRpbi9yZWJhc2UuYzoxOTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIzIGJ1aWx0aW4vcmViYXNlLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcycuIgorbXNnc3RyICLQvtGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGH0LXRgtC1LiIKKworIzogc2VxdWVuY2VyLmM6MjM4NAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQt9Cy0YrRgNGI0LLQsNC90L7RgtC+INCyINC80L7QvNC10L3RgtCwINC+0YLQsdC40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IHNlcXVlbmNlci5jOjIzOTEKK21zZ2lkICJjYW5jZWxsaW5nIGEgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC30LLRitGA0YjQstCw0L3QvtGC0L4g0LIg0LzQvtC80LXQvdGC0LAg0L7RgtC80Y/QvdCwINC90LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogc2VxdWVuY2VyLmM6MjQzNQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICLQutC+0YDQuNCz0LjRgNCw0LnRgtC1INGC0L7QstCwINGH0YDQtdC3IOKAnmdpdCByZWJhc2UgLS1lZGl0LXRvZG/igJwuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICLQvdC10LjQt9C/0L7Qu9C30LLQsNC10Lwg0YTQsNC50Lsg0YEg0L7Qv9C40YHQsNC90LjQtSDQvdCwINC/0YDQtdC00YHRgtC+0Y/RidC40YLQtSDQtNC10LnRgdGC0LLQuNGPOiDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MjQ0MgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAi0L3QuNC60L7QtSDQvtGCINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YDQsNC30L/QvtC30L3QsNC1LiIKKworIzogc2VxdWVuY2VyLmM6MjQ1MworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICIiCisi0L/QviDQstGA0LXQvNC1INC90LAg0L7RgtC80Y/QvdCwINC90LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtS4iCisKKyM6IHNlcXVlbmNlci5jOjI0NTUKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAi0L/QviDQstGA0LXQvNC1INC90LAg0L7RgtCx0LjRgNCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDQvtGC0LzRj9C90LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC1LiIKKworIzogc2VxdWVuY2VyLmM6MjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4lc+KAnDog4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjI2MzAKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtdGC0L4sINCyINC60L7QtdGC0L4g0LTRgNGD0LPQuNGC0LUg0LTQsCDRgdC1INCy0LrQsNGA0LDRgiwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCIKKworIzogc2VxdWVuY2VyLmM6MjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQsNC50Lsg0YEg0L7Qv9GG0LjQuDog4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjI3MzYgc2VxdWVuY2VyLmM6NDQ2MworbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvdC+INC1INC/0YDQsNC30L3QviDQvNC90L7QttC10YHRgtCy0L4g0L7RgiDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IHNlcXVlbmNlci5jOjI3NTIKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi0LIg0LzQvtC80LXQvdGC0LAg0LLQtdGH0LUg0YHQtSDQuNC30LLRitGA0YjQstCwINC+0YLQvNGP0L3QsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogc2VxdWVuY2VyLmM6Mjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdCnigJwiCisKKyM6IHNlcXVlbmNlci5jOjI3NTcKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLQsiDQvNC+0LzQtdC90YLQsCDQstC10YfQtSDRgdC1INC40LfQstGK0YDRiNCy0LAg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogc2VxdWVuY2VyLmM6Mjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KeKAnCIKKworIzogc2VxdWVuY2VyLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiIgorItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQt9CwINC+0L/RgNC10LTQtdC70Y/QvdC10YLQviDQvdCwINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGC0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUgIgorItGB0YrQt9C00LDQtNC10L3QsCIKKworIzogc2VxdWVuY2VyLmM6Mjc4OAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC60LvRjtGH0LgiCisKKyM6IHNlcXVlbmNlci5jOjI4NDggc2VxdWVuY2VyLmM6NDIwOQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorItCyINC80L7QvNC10L3RgtCwINC90LUg0YHQtSDQuNC30LLRitGA0YjQstCwINC+0YLQsdC40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8g0LjQu9C4INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDQutC70L7QvdCwIgorCisjOiBzZXF1ZW5jZXIuYzoyODUwIHNlcXVlbmNlci5jOjI4NjEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDRgdC+0YfQtdC90L4g0L7RgiDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L4iCisKKyM6IHNlcXVlbmNlci5jOjI4NTIgc2VxdWVuY2VyLmM6Mjg5NgorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisi0LTQtdC50YHRgtCy0LjQtdGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0LXQvdC+LCDQutC+0LPQsNGC0L4g0YHRgtC1INC90LAg0LrQu9C+0L0sINC60L7QudGC0L4g0YLQtdC/0YrRgNCy0LAgIgorItC/0YDQtdC00YHRgtC+0Lgg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBzZXF1ZW5jZXIuYzoyODgyIGJ1aWx0aW4vZ3JlcC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9OiAlcyIKKworIzogc2VxdWVuY2VyLmM6Mjg4NQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDQutGA0LDQuSDQvdCwINGE0LDQudC7IgorCisjOiBzZXF1ZW5jZXIuYzoyODkxCisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorItC30LDQv9Cw0LfQtdC90LjRj9GCINC/0YDQtdC00Lgg0LfQsNC/0L7Rh9Cy0LDQvdC10YLQviDQvdCwINC+0YLQsdC40YDQsNC90LXRgtC+INGE0LDQudC7INC30LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwg4oCUIOKAniVz4oCcINC1ICIKKyLQv9C+0LLRgNC10LTQtdC9IgorCisjOiBzZXF1ZW5jZXIuYzoyOTAyCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICIiCisi0JjQt9Cz0LvQtdC20LTQsCDRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC1INC/0YDQvtC80LXQvdC10L0uICDQn9GA0L7QstC10YDQtdGC0LUg0LrRitC8INC60LDQutCy0L4g0YHQvtGH0LguXG4iCisi0J3QtSDRgdC1INC/0YDQsNCy0Y/RgiDQv9GA0L7QvNC10L3QuC4iCisKKyM6IHNlcXVlbmNlci5jOjI5NDMKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgItCyINC80L7QvNC10L3RgtCwINC90LUg0YLQtdGH0LUg0L/RgNC10LHQsNC30LjRgNCw0L3QtSIKKworIzogc2VxdWVuY2VyLmM6Mjk1MQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICLQsiDQvNC+0LzQtdC90YLQsCDQvdC1INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBzZXF1ZW5jZXIuYzoyOTYxCittc2dpZCAiZmFpbGVkIHRvIHNraXAgdGhlIGNvbW1pdCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IHNlcXVlbmNlci5jOjI5NjgKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgItC90Y/QvNCwINC60LDQutCy0L4g0LTQsCDRgdC1INC/0YDQtdGB0LrQvtGH0LgiCisKKyM6IHNlcXVlbmNlci5jOjI5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorInRyeSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCittc2dzdHIgIiIKKyLQv9C+0LTQsNC70Lgg0LvQuCDRgdGC0LUg0LLQtdGH0LU/ICDQn9GA0L7QsdCy0LDQudGC0LUg0YE6XG4iCisiXG4iCisiICAgIGdpdCAlcyAtLWNvbnRpbnVlIgorCisjOiBzZXF1ZW5jZXIuYzozMDk1IHNlcXVlbmNlci5jOjQxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7QsdC90L7QstC4IgorCisjOiBzZXF1ZW5jZXIuYzozMTM0IHNlcXVlbmNlci5jOjQxMDEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBzZXF1ZW5jZXIuYzozMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC/0LjRgNCwINC60LDRgtC+IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzozMTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisi0JzQvtC20LUg0LTQsCDQv9GA0L7QvNC10L3QuNGC0LUg0L/QvtC00LDQstCw0L3QtdGC0L4g0YEg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyLQodC70LXQtCDQutCw0YLQviDQv9GA0LjQstGK0YDRiNC40YLQtSwg0L/RgNC+0LTRitC70LbQtdGC0LUg0YEg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJzigKYg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70L7QttC10L3Qvjog4oCeJS4qc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAi0J3QtdCy0YrQt9C80L7QttC90L4g0YHQu9C40LLQsNC90LUg0L3QsCDigJ4lLipz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzozMTkwIHNlcXVlbmNlci5jOjMxOTQgYnVpbHRpbi9kaWZmdG9vbC5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC60L7Qv9C40YDQsCDQutCw0YLQviDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MzIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1OiAlc1xuIgorIiVz0JzQvtC20LUg0LTQsCDQutC+0YDQuNCz0LjRgNCw0YLQtSDQv9GA0L7QsdC70LXQvNCwLCDRgdC70LXQtCDQutC+0LXRgtC+INC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMjcKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICLQuCDQv9GA0L7QvNC10L3RnSDQuNC90LTQtdC60YHQsCDQuC/QuNC70Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L5cbiIKKworIzogc2VxdWVuY2VyLmM6MzIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLQo9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtTogJXNcbiIKKyLQntGB0YLQsNCy0LDRgiDQvtGJ0LUg0L/RgNC+0LzQtdC90Lgg0LIg0LjQvdC00LXQutGB0LAg0LjQu9C4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+LlxuIgorItCi0YDRj9Cx0LLQsCDQtNCwINCz0Lgg0L/QvtC00LDQtNC10YLQtSDQuNC70Lgg0YHQutCw0YLQsNC10YLQtSDQuCDRgdC70LXQtCDRgtC+0LLQsCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQtdGC0LjQutC10YI6IOKAniUuKnPigJwiCisKKyM6IHNlcXVlbmNlci5jOjMzNDgKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINGE0LDQu9GI0LjQstC+INC90LDRh9Cw0LvQvdC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IHNlcXVlbmNlci5jOjMzNTMKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviwg0LIg0LrQvtC10YLQviDQtNGA0YPQs9C40YLQtSDQtNCwINGB0LUg0LLQutCw0YDQsNGCIgorCisjOiBzZXF1ZW5jZXIuYzozMzkxIGJ1aWx0aW4vcmViYXNlLmM6ODc2IGJ1aWx0aW4vcmViYXNlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgItC00YrRgNCy0L7RgtC+LCDRgdC+0YfQtdC90L4g0L7RgiDigJ4lc+KAnCwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtC+IgorCisjOiBzZXF1ZW5jZXIuYzozNDM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IHNlcXVlbmNlci5jOjM0NjcKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgItCx0LXQtyDRgtC10LrRg9GJ0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdC70LjQstCwIgorCisjOiBzZXF1ZW5jZXIuYzozNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJS4qcyciCittc2dzdHIgIuKAniUuKnPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBzZXF1ZW5jZXIuYzozNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gbWVyZ2U6ICclLipzJyIKK21zZ3N0ciAi0L3Rj9C80LAg0L3QuNGJ0L4g0LfQsCDRgdC70LjQstCw0L3QtTog4oCeJS4qc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MzUxMAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgItCy0YrRgNGF0YMg0L3QsNGH0LDQu9C90L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDQvNC90L7QttC10YHRgtCy0LXQvdC+INGB0LvQuNCy0LDQvdC1IgorCisjOiBzZXF1ZW5jZXIuYzozNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgY29tbWl0IG1lc3NhZ2Ugb2YgJyVzJyIKK21zZ3N0ciAi0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0LrRitC8IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvdC+IgorCisjOiBzZXF1ZW5jZXIuYzozNjg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIgorbXNnc3RyICLRgdC70LjQstCw0L3QtdGC0L4g0L3QsCDigJ4lLipz4oCcINC90LUg0LzQvtC20LUg0LTQsNC20LUg0LTQsCDQt9Cw0L/QvtGH0L3QtSIKKworIzogc2VxdWVuY2VyLmM6MzcwNAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgItGB0LvQuNCy0LDQvdC1OiDQvdC+0LLQuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvSIKKworIzogc2VxdWVuY2VyLmM6Mzc3MyBidWlsdGluL3JlYmFzZS5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRgdC60LDRgtCw0L3QvtGC0L4g0LUg0L/RgNC40LvQvtC20LXQvdC+LlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBzZXF1ZW5jZXIuYzozNzg4IGJ1aWx0aW4vcmViYXNlLmM6NzQ5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyLQn9GA0LjQu9Cw0LPQsNC90LXRgtC+INC90LAg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDRgdC60LDRgtCw0L3QvtGC0L4g0LTQvtCy0LXQtNC1INC00L4g0LrQvtC90YTQu9C40LrRgtC4LiAg0J/RgNC+0LzQtdC90LjRgtC1INCy0Lgg0YHQsFxuIgorItC90LDQtNC10LbQtNC90L4g0YHQutCw0YLQsNC90LguICDQnNC+0LbQtdGC0LUg0LTQsCDQv9GA0L7QsdCy0LDRgtC1INC00LAg0LPQuCDQv9GA0LjQu9C+0LbQuNGC0LUg0YfRgNC10Lcg4oCeZ2l0IHN0YXNoIHBvcOKAnFxuIgorItC40LvQuCDQtNCwINCz0Lgg0LjQt9GF0LLRitGA0LvQuNGC0LUg0YfRgNC10Lcg4oCeZ2l0IHN0YXNoIGRyb3DigJwsINC60L7Qs9Cw0YLQviDQv9C+0LjRgdC60LDRgtC1LlxuIgorCisjOiBzZXF1ZW5jZXIuYzozODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9GC0LXQs9C70LgiCisKKyM6IHNlcXVlbmNlci5jOjM4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQvtCx0LXQutGCIgorCisjOiBzZXF1ZW5jZXIuYzozODY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC00LXQu9C4IgorCisjOiBzZXF1ZW5jZXIuYzozODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICLQkdC1INGB0L/RgNGP0L3QviDQv9GA0Lgg4oCeSEVBROKAnFxuIgorCisjOiBzZXF1ZW5jZXIuYzozODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAi0JHQtSDRgdC/0YDRj9C90L4g0L/RgNC4IOKAniVz4oCcXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLQodC70LXQtNC90LDRgtCwINC30LDQv9C70LDQvdGD0LLQsNC90LAg0LrQvtC80LDQvdC00LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfQv9GK0LvQvdC10L3QsDpcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIlxuIgorItCi0Y8g0LUg0LfQsNC/0LvQsNC90YPQstCw0L3QsCDQt9CwINC/0L4t0LrRitGB0L3Qvi4gINCX0LAg0LTQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDQv9GA0LXQtNC4ICIKKyLQuNC30L/RitC70L3QtdC90LjQtSxcbiIKKyLRgNC10LTQsNC60YLQuNGA0LDQudGC0LUg0YHQv9C40YHRitC60LAg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgItCh0L/QuNGA0LDQvdC1INC/0YDQuCDigJ4lc+KAnOKApiAgJS4qc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC60L7QvNCw0L3QtNCwICVkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTA5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQt9CwIOKAnm9yaWctaGVhZOKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSIKKworIzogc2VxdWVuY2VyLmM6NDExNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg0LfQsCDigJ5vbnRv4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiBzZXF1ZW5jZXIuYzo0MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAi4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L0g0LTQviDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6NDIyMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtSwg0LfQsNGJ0L7RgtC+INC40LzQsCDQv9GA0L7QvNC10L3QuCwg0LrQvtC40YLQviDQvdC1INGB0LAg0LIg0LjQvdC00LXQutGB0LAuIgorCisjOiBzZXF1ZW5jZXIuYzo0MjMwCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgItC90LXRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0L/RgNCw0LLQuCIKKworIzogc2VxdWVuY2VyLmM6NDIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGE0LDQudC7OiDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6NDIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDRgdGK0LTRitGA0LbQsNC90LjQtTog4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjQyMzcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyLQkiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQuNC80LAg0L3QtdC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90LguICDQn9GK0YDQstC+INCz0Lgg0L/QvtC00LDQudGC0LUsINCwINGB0LvQtdC0INGC0L7QstCwXG4iCisi0L7RgtC90L7QstC+INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmViYXNlIC0tY29udGludWXigJwuIgorCisjOiBzZXF1ZW5jZXIuYzo0MjczIHNlcXVlbmNlci5jOjQzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IHNlcXVlbmNlci5jOjQzMjcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkNIRVJSWV9QSUNLX0hFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKKworIzogc2VxdWVuY2VyLmM6NDMzNAorbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQv9GA0L7QvNC10L3QuNGC0LUg0LIg0LjQvdC00LXQutGB0LAg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQv9C+0LTQsNC00LXQvdC4LiIKKworIzogc2VxdWVuY2VyLmM6NDQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQsdC10YDQtSDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6NDQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczog0L3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPIgorCisjOiBzZXF1ZW5jZXIuYzo0NDc5Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICLQv9GK0YDQstC+0L3QsNGH0LDQu9C90L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQvNC10L3QtdC90L4iCisKKyM6IHNlcXVlbmNlci5jOjQ5NTIKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiDQvdC10L/QvtC00LTRitGA0LbQsNC90Lgg0L7Qv9GG0LjQuCIKKworIzogc2VxdWVuY2VyLmM6NDk1NQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDog0LPRgNC10YjQutCwINC/0YDQuCDQv9C+0LTQs9C+0YLQvtCy0LrQsNGC0LAg0L3QsCDQstC10YDRgdC40LgiCisKKyM6IHNlcXVlbmNlci5jOjUxMTMKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLlxuIgorIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorbXNnc3RyICIiCisi0JzQvtC20LUg0LTQsCDQv9GA0L7QvNC10L3QuNGC0LUg0YLQvtCy0LAg0YEg0LrQvtC80LDQvdC00LjRgtC1IOKAnmdpdCByZWJhc2UgLS1lZGl0LXRvZG/igJwg0Lgg4oCeZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZeKAnCDRgdC70LXQtCDRgtC+0LLQsC5cbiIKKyLQnNC+0LbQtSDQuCDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INC/0YDQtdCx0LDQt9C40YDQsNC90LXRgtC+INGBINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgcmViYXNlIC0tYWJvcnTigJwuXG4iCisKKyM6IHNlcXVlbmNlci5jOjUyMjYgc2VxdWVuY2VyLmM6NTI0MworbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgItC90Y/QvNCwINC60LDQutCy0L4g0LTQsCDRgdC1INC/0YDQsNCy0LgiCisKKyM6IHNlcXVlbmNlci5jOjUyNTcKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICLQuNC30LvQuNGI0L3QuNGC0LUg0LrQvtC80LDQvdC00Lgg0LfQsCDQvtGC0LHQuNGA0LDQvdC1INC90LUg0LHRj9GF0LAg0L/RgNC10YHQutC+0YfQtdC90LgiCisKKyM6IHNlcXVlbmNlci5jOjUzNTEKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICLRgdC60YDQuNC/0YLRitGCINCy0LXRh9C1INC1INC/0YDQtdC/0L7QtNGA0LXQtNC10L0uIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0LjQt9Cy0YrQvSDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IgorCisjOiBzZXR1cC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiIKKyIlczog0LIg0YLQvtCy0LAg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviDQvdGP0LzQsCDRgtCw0LrRitCyINC/0YrRgi5cbiIKKyLQl9CwINC00LAg0YPQutCw0LfQstCw0YLQtSDQv9GK0YLQuNGJ0LAsINC60L7QuNGC0L4g0LvQvtC60LDQu9C90L4g0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsNGCLCDQuNC30L/QvtC70LfQstCw0LnRgtC1OlxuIgorIlxuIgorIiAgICBnaXQg0JrQntCc0JDQndCU0JAgLS0g0J/QqtCi4oCmIgorCisjOiBzZXR1cC5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyLQvdC10LXQtNC90L7Qt9C90LDRh9C10L0g0LDRgNCz0YPQvNC10L3RgiDigJ4lczog0L3QtdC/0L7Qt9C90LDRgtCwINCy0LXRgNGB0LjRjyDQuNC70Lgg0L/RitGC0Y/RgiDQvdC1INC1INGH0LDRgdGCINC+0YIg0YDQsNCx0L7RgtC90L7RgtC+ICIKKyLQtNGK0YDQstC+LlxuIgorItCg0LDQt9C00LXQu9GP0LnRgtC1INC/0YrRgtC40YnQsNGC0LAg0L7RgiDQstC10YDRgdC40LjRgtC1INGBIOKAni0t4oCcLCDQtdGC0L4g0YLQsNC60LA6XG4iCisiXG4iCisiICAgIGdpdCDQmtCe0JzQkNCd0JTQkCBb0JLQldCg0KHQmNCv4oCmXSAtLSBb0KTQkNCZ0JvigKZdIgorCisjOiBzZXR1cC5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJyVzJyBtdXN0IGNvbWUgYmVmb3JlIG5vbi1vcHRpb24gYXJndW1lbnRzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQv9GA0LXQtNC4INC/0YrRgNCy0LjRjyDQsNGA0LPRg9C80LXQvdGCLCDQutC+0LnRgtC+INC90LUg0LUg0L7Qv9GG0LjRjyIKKworIzogc2V0dXAuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorItC90LXQtdC00L3QvtC30L3QsNGH0LXQvSDQsNGA0LPRg9C80LXQvdGCIOKAniVz4oCcOiDQutCw0LrRgtC+INCy0LXRgNGB0LjRjywg0YLQsNC60LAg0Lgg0L/RitGCLlxuIgorItCg0LDQt9C00LXQu9GP0LnRgtC1INC/0YrRgtC40YnQsNGC0LAg0L7RgiDQstC10YDRgdC40LjRgtC1INGBIOKAni0t4oCcLCDQtdGC0L4g0YLQsNC60LA6XG4iCisiXG4iCisiICAgIGdpdCDQmtCe0JzQkNCd0JTQkCBb0JLQldCg0KHQmNCv4oCmXSAtLSBb0KTQkNCZ0JvigKZdIgorCisjOiBzZXR1cC5jOjM5MQorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC00LDQtNC1INGC0LXQutGD0YnQsCDRgNCw0LHQvtGC0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQv9GA0Lgg0L3QtdC/0YDQsNCy0LjQu9C90Lgg0L3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBzZXR1cC5jOjM5NQorbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICLRgtCw0LfQuCDQutC+0LzQsNC90LTQsCDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4INCyINGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4iCisKKyM6IHNldHVwLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICLQntGH0LDQutCy0LAg0YHQtSDQstC10YDRgdC40Y8g0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC90LAgZ2l0IDw9ICVkLCDQsCDQvdC1ICVkIgorCisjOiBzZXR1cC5jOjU0OQorbXNnaWQgInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOiIKK21zZ3N0ciAi0L7RgtC60YDQuNGC0Lgg0YHQsCDQvdC10L/QvtC30L3QsNGC0Lgg0YDQsNC30YjQuNGA0LXQvdC40Y8g0LIg0YXRgNCw0L3QuNC70LjRidC10YLQvjoiCisKKyM6IHNldHVwLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4IgorCisjOiBzZXR1cC5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQs9C+0LvRj9C8INGE0LDQudC7IOKAni5naXTigJw6IOKAniVz4oCcIgorCisjOiBzZXR1cC5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC/0YDQvtGH0LjRgtCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBzZXR1cC5jOjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINC90LAgZ2l0ZmlsZTogJXMiCisKKyM6IHNldHVwLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgItC70LjQv9GB0LLQsCDQv9GK0YIg0LIgZ2l0ZmlsZTog4oCeJXPigJwiCisKKyM6IHNldHVwLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi0L3QtSDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQ6ICVzIgorCisjOiBzZXR1cC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQv9GA0LXQutCw0LvQtdC90L4g0LPQvtC70Y/QvCIKKworIzogc2V0dXAuYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgItC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgZ2l0OiDigJ4lc+KAnCIKKworIzogc2V0dXAuYzo3MjAgc2V0dXAuYzo3MjIgc2V0dXAuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCy0LvQtdC30LUg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcIgorCisjOiBzZXR1cC5jOjcyNSBzZXR1cC5jOjc4MSBzZXR1cC5jOjc5MSBzZXR1cC5jOjgzMCBzZXR1cC5jOjgzOAorbXNnaWQgImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLQv9GA0L7RhtC10YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCy0YrRgNC90LUg0LrRitC8INC/0YDQtdC00LjRiNC90LDRgtCwINGA0LDQsdC+0YLQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBzZXR1cC5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDigJ4lKnMlcyVz4oCcIgorCisjOiBzZXR1cC5jOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQotC10LrRg9GJ0LDRgtCwINGA0LDQsdC+0YLQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90LAiCisKKyM6IHNldHVwLmM6MTA5OSBzZXR1cC5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC70LXQt9C1INCyINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCIKKworIzogc2V0dXAuYzoxMTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICIiCisi0L3QuNGC0L4g0YLQsNC30LgsINC90LjRgtC+INC60L7Rj9GC0L4g0Lgg0LTQsCDQtSDQvtGCINC/0L4t0LPQvtGA0L3QuNGC0LUg0LTQuNGA0LXQutGC0L7RgNC40LgsINC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgIgorImdpdDogJXMiCisKKyM6IHNldHVwLmM6MTExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyLQvdC40YLQviDRgtCw0LfQuCwg0L3QuNGC0L4g0LrQvtGP0YLQviDQuCDQtNCwINC1INC+0YIg0L/Qvi3Qs9C+0YDQvdC40YLQtSDQtNC40YDQtdC60YLQvtGA0LjQuCAo0LTQviDRgtC+0YfQutCw0YLQsCDQvdCwICIKKyLQvNC+0L3RgtC40YDQsNC90LUg4oCeJXPigJwpLCDQvdC1INC1INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIGdpdC5cbiIKKyJHaXQg0YDQsNCx0L7RgtC4INCyINGA0LDQvNC60LjRgtC1INC90LAg0LXQtNC90LAg0YTQsNC50LvQvtCy0LAg0YHQuNGB0YLQtdC80LAsINC30LDRidC+0YLQviDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAg0L3QsCDRgdGA0LXQtNCw0YLQsCAiCisi4oCeR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTeKAnCDQvdC1INC1INC30LDQtNCw0LTQtdC90LAuIgorCisjOiBzZXR1cC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyLQt9Cw0LTQsNC00LXQvdC40Y/RgiDQsiDigJ5jb3JlLnNoYXJlZFJlcG9zaXRvcnnigJwg0YDQtdC20LjQvCDQt9CwINC00L7RgdGC0YrQvyDQtNC+INGE0LDQudC70L7QstC1INC1INC90LXQv9GA0LDQstC40LvQtdC9ICIKKyIoMCUuM28pLlxuIgorItCh0L7QsdGB0YLQstC10L3QuNC60YrRgiDQvdCwINGE0LDQudC70LAg0YLRgNGP0LHQstCwINC00LAg0LjQvNCwINC/0YDQsNCy0LAg0LfQsCDQv9C40YHQsNC90LUg0Lgg0YfQtdGC0LXQvdC1LiIKKworIzogc2V0dXAuYzoxMjcxCittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeb3BlbuKAnCDQuNC70Lgg4oCeZHVw4oCcINCy0YrRgNGF0YMg4oCeL2Rldi9udWxs4oCcIgorCisjOiBzZXR1cC5jOjEyODYKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0YDQvtGG0LXRgSDRh9GA0LXQtyDigJ5mb3Jr4oCcIgorCisjOiBzZXR1cC5jOjEyOTEKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/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+KAnCDQtSDQv9GA0LDQt9C10L0iCisKKyM6IHNoYTEtZmlsZS5jOjEyNTIgc2hhMS1maWxlLmM6MjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLQvdC10L/QsNC60LXRgtC40YDQsNC90LjRj9GCINC+0LHQtdC60YIg4oCeJXPigJwg0LUg0L/QvtCy0YDQtdC00LXQvSIKKworIzogc2hhMS1maWxlLmM6MTI1NCBzaGExLWZpbGUuYzoyMzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLQs9GA0LXRiNC90Lgg0LTQsNC90L3QuCDQsiDQutGA0LDRjyDQvdCwINC90LXQv9Cw0LrQtdGC0LjRgNCw0L3QuNGPINC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IHNoYTEtZmlsZS5jOjEyOTYKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQg0L7QsdC10LrRgiIKKworIzogc2hhMS1maWxlLmM6MTM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICIiCisi0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YDQsNC30L/QsNC60LXRgtC40YDQsCDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbG93LXVua25vd24tIgorInR5cGXigJwiCisKKyM6IHNoYTEtZmlsZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC90LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGA0LDQt9C/0LDQutC10YLQuNGA0LDQvdCwIgorCisjOiBzaGExLWZpbGUuYzoxMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiIgorItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbG93LXVua25vd24tdHlwZeKAnCIKKworIzogc2hhMS1maWxlLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdCwIgorCisjOiBzaGExLWZpbGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IHNoYTEtZmlsZS5jOjE1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZW1lbnQgJXMgbm90IGZvdW5kIGZvciAlcyIKK21zZ3N0ciAi0LfQsNC80LXRgdGC0LjRgtC10LvRj9GCIOKAniVz4oCcINC90LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgiIKKworIzogc2hhMS1maWxlLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAi0L3QtdC/0LDQutC10YLQuNGA0LDQvdC40Y/RgiDQvtCx0LXQutGCIOKAniVz4oCcICjQsiDigJ4lc+KAnCkg0LUg0L/QvtCy0YDQtdC00LXQvSIKKworIzogc2hhMS1maWxlLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgItC/0LDQutC10YLQuNGA0LDQvdC40Y/RgiDQvtCx0LXQutGCIOKAniVz4oCcICjQsiDigJ4lc+KAnCkg0LUg0L/QvtCy0YDQtdC00LXQvSIKKworIzogc2hhMS1maWxlLmM6MTY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogc2hhMS1maWxlLmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAi0L/RgNCw0LLQsNGC0LAg0LfQsCDQtNC+0YHRgtGK0L8g0LTQviDigJ4lc+KAnCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC30LDQtNCw0LTQtdC90LgiCisKKyM6IHNoYTEtZmlsZS5jOjE3MTMKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9C40YEg0L3QsCDRhNCw0LnQuyIKKworIzogc2hhMS1maWxlLmM6MTczMgorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YLQstCw0YDRj9C90LXRgtC+INC90LAg0YTQsNC50LvQsCDRgSDQvdC10L/QsNC60LXRgtC40YDQsNC9INC+0LHQtdC60YIiCisKKyM6IHNoYTEtZmlsZS5jOjE3OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIGFkZGluZyBhbiBvYmplY3QgdG8gcmVwb3NpdG9yeSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiIgorItC90Y/QvNCwINC/0YDQsNCy0LAg0LfQsCDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L7QsdC10LrRgiDQutGK0Lwg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4g4oCeJXPigJwiCisKKyM6IHNoYTEtZmlsZS5jOjE3OTkKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSDQstGA0LXQvNC10L3QtdC9INGE0LDQudC7IgorCisjOiBzaGExLWZpbGUuYzoxODIzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9C40YHQsCDQvdCwINGE0LDQudC70LAg0YEg0L3QtdC/0LDQutC10YLQuNGA0LDQvSDQvtCx0LXQutGCIgorCisjOiBzaGExLWZpbGUuYzoxODI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAi0L3QvtCy0LjRj9GCINC+0LHQtdC60YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC80L/RgNC10YHQuNGA0LAg0YEg4oCeZGVmbGF0ZeKAnDogJWQiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0LjQutC70Y7Rh9Cy0LDQvdC1INC90LAg4oCeZGVmbGF0ZeKAnCDQstGK0YDRhdGDIOKAniVz4oCcOiAlZCIKKworIzogc2hhMS1maWxlLmM6MTgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mdXNlZCBieSB1bnN0YWJsZSBvYmplY3Qgc291cmNlIGRhdGEgZm9yICVzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/QvtGA0LDQtNC4INC90LXRgdGC0LDQsdC40LvQvdC40Y8g0LjQt9GC0L7Rh9C90LjQuiDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSDigJ4lc+KAnCIKKworIzogc2hhMS1maWxlLmM6MTg0NyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAlcyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDQstGA0LXQvNC1INC90LAg0LTQvtGB0YLRitC/L9GB0YrQt9C00LDQstCw0L3QtSDRh9GA0LXQtyDigJ51dGltZeKAnCDQvdCwIOKAniVz4oCcIgorCisjOiBzaGExLWZpbGUuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCINC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LUiCisKKyM6IHNoYTEtZmlsZS5jOjE5NjIKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAi0L/QvtCy0YDQtdC00LXQvdC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IHNoYTEtZmlsZS5jOjE5NzAKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAi0L/QvtCy0YDQtdC00LXQvSDQtdGC0LjQutC10YIiCisKKyM6IHNoYTEtZmlsZS5jOjIwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDRh9C10YLQtdC90LUg0L/QviDQstGA0LXQvNC1INC90LAg0LjQvdC00LXQutGB0LjRgNCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBzaGExLWZpbGUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IHJlYWQgd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgItC90LXQv9GK0LvQvdC+INC/0YDQvtGH0LjRgtCw0L3QtSDQv9C+INCy0YDQtdC80LUg0L3QsCDQuNC90LTQtdC60YHQuNGA0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IHNoYTEtZmlsZS5jOjIxNDUgc2hhMS1maWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC80YrQutC90LUg0LIg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKKworIzogc2hhMS1maWxlLmM6MjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICLQvdC10L/QvtC00LTRitGA0LbQsNC9INCy0LjQtCDRhNCw0LnQuzog4oCeJXPigJwiCisKKyM6IHNoYTEtZmlsZS5jOjIxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICLigJ4lc+KAnCDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDQvtCx0LXQutGCIgorCisjOiBzaGExLWZpbGUuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICLigJ4lc+KAnCDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDQvtCx0LXQutGCINC+0YIg0LLQuNC0IOKAniVz4oCcIgorCisjOiBzaGExLWZpbGUuYzoyMjEzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBzaGExLWZpbGUuYzoyNDAzIHNoYTEtZmlsZS5jOjI0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0LrQvtC90YLRgNC+0LvQvdCwINGB0YPQvNCwINC30LAg4oCeJXPigJwgKNGC0YDRj9Cx0LLQsCDQtNCwINC1ICVzKSIKKworIzogc2hhMS1maWxlLmM6MjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCebW1hcOKAnCDQstGK0YDRhdGDIOKAniVz4oCcIgorCisjOiBzaGExLWZpbGUuYzoyNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QsCIKKworIzogc2hhMS1maWxlLmM6MjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvdCwIgorCisjOiBzaGExLWZpbGUuYzoyNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgItGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QviIKKworIzogc2hhMS1uYW1lLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICLQutGK0YHQuNGP0YIgU0hBMSDigJ4lc+KAnCDQvdC1INC1INC10LTQvdC+0LfQvdCw0YfQtdC9IgorCisjOiBzaGExLW5hbWUuYzo0OTgKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICLQktGK0LfQvNC+0LbQvdC+0YHRgtC40YLQtSDRgdCwOiIKKworIzogc2hhMS1uYW1lLmM6Nzk3Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorItCf0YDQuCDQvdC+0YDQvNCw0LvQvdCwINGA0LDQsdC+0YLQsCBHaXQg0L3QuNC60L7Qs9CwINC90LUg0YHRitC30LTQsNCy0LAg0YPQutCw0LfQsNGC0LXQu9C4LCDQutC+0LjRgtC+INC30LDQstGK0YDRiNCy0LDRgiDRgSA0MFxuIgorItGI0LXRgdGC0L3QsNC00LXRgdC10YLQuNGH0L3QuCDQt9C90LDQutCwLCDQt9Cw0YnQvtGC0L4g0YHRgtCw0L3QtNCw0YDRgtC90L4g0YLQtSDRidC1INCx0YrQtNCw0YIg0L/RgNC10YHQutCw0YfQsNC90LguXG4iCisi0JLRitC30LzQvtC20L3QviDQtSDRgtCw0LrQuNCy0LAg0YPQutCw0LfQsNGC0LXQu9C4INC00LAg0YHQsCDRgdGK0LfQtNCw0LTQtdC90Lgg0YHQu9GD0YfQsNC50L3Qvi4gINCd0LDQv9GA0LjQvNC10YA6XG4iCisiXG4iCisiICAgIGdpdCBzd2l0Y2ggLWMgJEJSQU5DSCAkKGdpdCByZXYtcGFyc2Ug4oCmKVxuIgorIlxuIgorItC60YrQtNC10YLQviDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCDQvdCwINGB0YDQtdC00LDRgtCwIEJSQU5DSCDQtSDQv9GA0LDQt9C90LAsINC/0YDQuCDQutC+0LXRgtC+INGB0LVcbiIKKyLRgdGK0LfQtNCw0LLQsCDQv9C+0LTQvtCx0LXQvSDRg9C60LDQt9Cw0YLQtdC7LiAg0J/RgNC10LPQu9C10LTQsNC50YLQtSDRgtC10LfQuCDRg9C60LDQt9Cw0YLQtdC70Lgg0Lgg0LPQuCDQuNC30YLRgNC40LnRgtC1LiAg0JzQvtC20LUgIgorItC00LBcbiIKKyLRgdC/0YDQtdGC0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1INC60LDRgtC+INC40LfQv9GK0LvQvdC40YLQtSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIiCittc2dzdHIgIiV1LiUyLjJ1IEdpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQi9zIgorbXNnc3RyICIldS4lMi4ydSBHaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlCisjOiBzdHJidWYuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCIgorbXNnc3RyICIldS4lMi4ydSBNaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgTWlCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZQorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzIgorbXNnc3RyWzBdICIldSDQsdCw0LnRgiIKK21zZ3N0clsxXSAiJXUg0LHQsNC50YLQsCIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZS9zIgorbXNnaWRfcGx1cmFsICIldSBieXRlcy9zIgorbXNnc3RyWzBdICIldSDQsdCw0LnRgi/RgdC10LouIgorbXNnc3RyWzFdICIldSDQsdCw0LnRgtCwL9GB0LXQui4iCisKKyM6IHN0cmJ1Zi5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGVkaXQgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YDQtdC00LDQutGC0LjRgNCwIgorCisjOiBzdWJtb2R1bGUuYzoxMTQgc3VibW9kdWxlLmM6MTQzCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyLQndC10YHQu9C10YLQuNGC0LUg0YTQsNC50LvQvtCy0LUg4oCeLmdpdG1vZHVsZXPigJwg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQv9GA0L7QvNC10L3Rj9C90LguICDQn9GK0YDQstC+ICIKKyLQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICLQktGK0LIg0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQu9C40L/RgdCy0LAg0YDQsNC30LTQtdC7INC30LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCecGF0aD0lc+KAnCIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICLQl9Cw0L/QuNGB0YrRgiDigJ4lc+KAnCDQstGK0LIg0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0YDQvtC80LXQvdC10L3QuNGPINGE0LDQudC7IOKAni5naXRtb2R1bGVz4oCcINCyINC40L3QtNC10LrRgdCwIgorCisjOiBzdWJtb2R1bGUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgItCyINC90LXQv9C+0LTQs9C+0YLQstC10L3QuNGPINC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoc3BlYyAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgItCf0YrRgtGP0YIg4oCeJXPigJwg0LUg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniUuKnPigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAi0LfQsNC/0LjRgdGK0YIg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwgKCVzKSDQtSAlcywg0LAg0L3QtSDQv9C+0LTQsNCy0LDQvdC1ISIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjAxNgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUg0LrRitC8INC60LDQutCy0L4g0YHQvtGH0Lgg0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCIKKworIzogc3VibW9kdWxlLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtGB0YLRitC/0LXQvSIKKworIzogc3VibW9kdWxlLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgZ2l0IgorCisjOiBzdWJtb2R1bGUuYzoxNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3RhdHVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4INCyINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCIKKworIzogc3VibW9kdWxlLmM6MTgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBzdGF0dXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcIgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeY29yZS53b3JrdHJlZeKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YLRgNC40LUg0LIg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcIgorCisjOiBzdWJtb2R1bGUuYzoxOTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQvdC1INC1INGH0LjRgdGCIgorCisjOiBzdWJtb2R1bGUuYzoxOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnIGNvdWxkIG5vdCBiZSB1cGRhdGVkLiIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7QsdC90L7QstC4LiIKKworIzogc3VibW9kdWxlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzIGluc2lkZSBnaXQgZGlyICclLipzJyIKK21zZ3N0ciAi4oCeJXPigJwgKNC00LjRgNC10LrRgtC+0YDQuNGPINC90LAg0L/QvtC00LzQvtC00YPQuykg0LUg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LAgZ2l0OiDigJ4lLipz4oCcIgorCisjOiBzdWJtb2R1bGUuYzoyMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisi0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg4oCecmVsb2NhdGVfZ2l0ZGly4oCcINC30LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcLCDQutC+0LnRgtC+INC40LzQsCDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00L3QviAiCisi0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviIKKworIzogc3VibW9kdWxlLmM6MjA2MCBzdWJtb2R1bGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgItC40LzQtdGC0L4g0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC90LDQvNC10YDQtdC90L4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQtdGB0YLQuCDQsiDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCBnaXQiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorItCc0LjQs9GA0LjRgNCw0L3QtSDQvdCwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwIGdpdCDigJQg4oCeJXMlc+KAnCDQvtGCOlxuIgorIuKAniVz4oCcINC60YrQvFxuIgorIuKAniVz4oCcXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjIxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdCwINC+0LHRgNCw0LHQvtGC0LrQsCDQvdCwINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNC40YLQtSDQsiDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjIxOTgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgIuKAnmxzLXN0YXTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsCDQsiDigJ4uLuKAnCIKKworIzogc3VibW9kdWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgIuKAnmxzLXRyZWXigJwg0LfQsNCy0YrRgNGI0Lgg0YEg0L3QtdC+0YfQsNC60LLQsNC9INC40LfRhdC+0LTQtdC9INC60L7QtDogJWQiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgc3VzcGljaW91cyBzdWJtb2R1bGUgbmFtZTogJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0L/QvtC00L7Qt9GA0LjRgtC10LvQvdC+INC40LzQtSDQvdCwINC/0L7QtNC80L7QtNGD0Ls6IOKAniVz4oCcIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnN1Ym1vZHVsZS5mZXRjaGpvYnPigJwg0L3QtSDQv9GA0LjQtdC80LAg0L7RgtGA0LjRhtCw0YLQtdC70L3QuCDRgdGC0L7QudC90L7RgdGC0LgiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorIuKAniVz4oCcINGB0LUg0L/RgNC10YHQutCw0YfQsCwg0LfQsNGJ0L7RgtC+INC1INCy0YrQt9C80L7QttC90L4g0LTQsCDRgdC1INGC0YrQu9C60YPQstCwINC60LDRgtC+INC+0L/RhtC40Y8g0LfQsCDQutC+0LzQsNC90LTQvdC40Y8gIgorItGA0LXQtDogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4lc+KAnCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICLQl9Cw0L/QuNGB0YrRgiDigJ4lc+KAnCDQstGK0LIg0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0LzQtdC90LXQvSIKKworIzogdHJhaWxlci5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJydW5uaW5nIHRyYWlsZXIgY29tbWFuZCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LfQsNCy0YrRgNGI0LLQsNGJ0LDRgtCwINC60L7QvNCw0L3QtNCwIOKAniVz4oCcIgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAniVz4oCcIgorCisjOiB0cmFpbGVyLmM6NTM5IHRyYWlsZXIuYzo1NDQgYnVpbHRpbi9yZW1vdGUuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAi0YHRgtC+0LnQvdC+0YHRgtGC0LAg4oCeJXPigJwg0YHQtSDQv9C+0LLRgtCw0YDRjyDQsiDQvdCw0YHRgtGA0L7QudC60LjRgtC1IgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgItC/0YDQsNC30L3QsCDQt9Cw0LLRitGA0YjQstCw0YnQsCDQu9C10LrRgdC10LzQsCDQsiDQtdC/0LjQu9C+0LPQsCDigJ4lLipz4oCcIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAi0LLRhdC+0LTQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgItC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRh9C10YLQtSIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDigJ4lc+KAnCIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L7QsdC40LrQvdC+0LLQtdC9INGE0LDQudC7IgorCisjOiB0cmFpbGVyLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICLigJ4lc+KAnDog0L3Rj9C80LAg0L/RgNCw0LLQsCDQt9CwINC30LDQv9C40YHQstCw0L3QtSDQvdCwINGE0LDQudC70LAiCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgItCy0YDQtdC80LXQvdC90LjRj9GCINGE0LDQudC7INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCIKKworIzogdHJhaWxlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSB0ZW1wb3JhcnkgZmlsZSB0byAlcyIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0YTQsNC50Lsg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LAg0L3QsCDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIgorbXNnc3RyICLQmtC70L7QvdGK0YIg4oCeJXPigJwg0YnQtSDRgdC70LXQtNC4IOKAniVz4oCcINC+0YIg4oCeJXPigJxcbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIgorbXNnc3RyICLQv9GA0LDRgtC60LDRgtCwINC90LAgZ2l0IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90LAiCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInRyYW5zcG9ydDog0L3QtdC/0YDQsNCy0LjQu9C90LAg0L7Qv9GG0LjRjyDQt9CwINC00YrQu9Cx0L7Rh9C40L3QsDogJXMiCisKKyM6IHRyYW5zcG9ydC5jOjI2NgorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgIiIKKyLQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQstC40LbRgtC1INGA0LDQt9C00LXQu9CwIOKAnnByb3RvY29sLnZlcnNpb27igJwg0LIg4oCeZ2l0IGhlbHAgY29uZmln4oCcIgorCisjOiB0cmFuc3BvcnQuYzoyNjcKK21zZ2lkICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg0L3QsCDRgdGK0YDQstGK0YDQsCDQuNC30LjRgdC60LLQsNGCINC/0L7QvdC1INCy0LXRgNGB0LjRjyAyINC90LAg0L/RgNC+0YLQvtC60L7Qu9CwIgorCisjOiB0cmFuc3BvcnQuYzo2MzIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICLRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCedHJhbnNwb3J0LmNvbG9yLirigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YDQsNC30L/QvtC30L3QsNC1IgorCisjOiB0cmFuc3BvcnQuYzo3MDUKK21zZ2lkICJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC7INCy0LXRgNGB0LjRjyAyINCy0YHQtSDQvtGJ0LUg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC30LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ4lc+KAnDog4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAi0L/RgNC10L3QvtGB0YrRgiDQv9C+IOKAniVz4oCcINC90LUg0LUg0L/QvtC30LLQvtC70LXQvSIKKworIzogdHJhbnNwb3J0LmM6OTQ5Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1vdmVyLXJzeW5j4oCcINCy0LXRh9C1INC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAiIgorItCh0LvQtdC00L3QuNGC0LUg0L/RitGC0LjRidCwINC30LAg0L/QvtC00LzQvtC00YPQu9C4INGB0YrQtNGK0YDQttCw0YIg0L/RgNC+0LzQtdC90LgsXG4iCisi0LrQvtC40YLQviDQu9C40L/RgdCy0LDRgiDQvtGCINCy0YHQuNGH0LrQuCDQvtGC0LTQsNC70LXRh9C10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LA6XG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi0J/RgNC+0LHQstCw0LnRgtC1INC00LAg0LPQuCDQuNC30YLQu9Cw0YHQutCw0YLQtSDRh9GA0LXQtyDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorItC40LvQuCDQvtGC0LjQtNC10YLQtSDQsiDRgdGK0L7RgtCy0LXRgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC4INC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2hcbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTA1NgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAi0J/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjQtdGC0L4uIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQvdC10L7QsdGF0L7QtNC40LzQuCDQv9C+0LTQvNC+0LTRg9C70LgiCisKKyM6IHRyYW5zcG9ydC5jOjEzNDUgdHJhbnNwb3J0LWhlbHBlci5jOjY1NgorbXNnaWQgIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQvtGCINC/0YDQvtGC0L7QutC+0LvQsCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0LXQvSDQv9GK0LvQtdC9INC30LDQv9C40YEg0LrRitC8INC90LDRgdGA0LXRidC90LDRgtCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgcmVtb3RlIGhlbHBlciBmb3IgJyVzJyIKK21zZ3N0ciAi0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQsCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcwCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIiIKKyLRhNCw0LnQu9C+0LLQuNGP0YIg0LTQtdGB0LrRgNC40L/RgtC+0YAg0L7RgiDQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC00YPQsdC70LjRgNCwINGBICIKKyLigJ5kdXDigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgJXM7IHRoaXMgcmVtb3RlIGhlbHBlciBwcm9iYWJseSBuZWVkcyBuZXdlciAiCisidmVyc2lvbiBvZiBHaXQiCittc2dzdHIgIiIKKyLQvdC10L/QvtC30L3QsNGC0LAg0LfQsNC00YrQu9C20LjRgtC10LvQvdCwINGB0L/QvtGB0L7QsdC90L7RgdGCIOKAniVz4oCcLiAg0J3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCAiCisi0LLQtdGA0L7Rj9GC0L3QviDQuNC30LjRgdC60LLQsCDQvdC+0LLQsCDQstC10YDRgdC40Y8g0L3QsCBHaXQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTcKK21zZ2lkICJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiCittc2dzdHIgIiIKKyLQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINGC0YDRj9Cx0LLQsCDQtNCwINC/0L7QtNC00YrRgNC20LAg0YHQv9C+0YHQvtCx0L3QvtGB0YIg0LfQsCDQuNC30LHRgNC+0Y/QstCw0L3QtSDQvdCwICIKKyLRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtdC+0YfQsNC60LLQsNC90L4g0LLRitGA0L3QsDog4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxzbyBsb2NrZWQgJXMiCittc2dzdHIgIuKAniVz4oCcINC30LDQutC70Y7Rh9C4INC4IOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkyCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQsdGK0YDQt9C+INCy0L3QsNGB0Y/QvdC1IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTE1Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtdGC0L4g0L3QsCDQsdGK0YDQt9C+INCy0L3QsNGB0Y/QvdC1IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTQ0IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biByZXNwb25zZSB0byBjb25uZWN0OiAlcyIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC9INC+0YLQs9C+0LLQvtGAINC/0YDQuCDRgdCy0YrRgNC30LLQsNC90LU6IOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjExCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgItC/0YDQvtGC0L7QutC+0LvRitGCINC90LUg0L/QvtC00LTRitGA0LbQsCDQt9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINC/0YrRgiDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdCw0YLQsCDRg9GB0LvRg9Cz0LAiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTMKK21zZ2lkICJpbnZhbGlkIHJlbW90ZSBzZXJ2aWNlIHBhdGgiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC/0YrRgiDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdCw0YLQsCDRg9GB0LvRg9Cz0LAiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YHQstGK0YDQt9Cy0LDQvdC1INC60YrQvCDQv9C+0LTRg9GB0LvRg9Cz0LDRgtCwIOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICIiCisi0L7Rh9Cw0LrQstCwINGB0LUg0LjQu9C4INGD0YHQv9C10YUsINC40LvQuCDQs9GA0LXRiNC60LAsINC90L4g0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDQstGK0YDQvdCwIOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIKK21zZ3N0ciAi0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9Cw0LLRitGA0YjQuCDRgSDQvdC10L7Rh9Cw0LrQstCw0L0g0LjQt9GF0L7QtNC10L0g0LrQvtC0OiDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICLQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwIOKAniVz4oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQv9GA0L7QsdC4IOKAnmRyeS1ydW7igJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgItC90LDRgdGA0LXRidC90LDRgtCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg4oCeJXPigJwg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Y/RgtCwIOKAni0tc2lnbmVk4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICIiCisi0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDigJ4lc+KAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaWduZWQ9aWYtYXNrZWTigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMiCittc2dzdHIgItC90LDRgdGA0LXRidC90LDRgtCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg4oCeJXPigJwg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Y/RgtCwIOKAni0tYXRvbWlj4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciCittc2dzdHIgItC90LDRgdGA0LXRidC90LDRgtCwINC/0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg4oCeJXPigJwg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC+0L/RhtC40Lgg0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY0Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgIiIKKyLQvdCw0YHRgNC10YnQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC90LUg0L/QvtC00LTRitGA0LbQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1LiAg0J3QtdC+0LHRhdC+0LTQuNC80L4g0LUgIgorItC40LfQsdGA0L7Rj9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAnZm9yY2UnIgorbXNnc3RyICIiCisi0L3QsNGB0YDQtdGJ0L3QsNGC0LAg0L/QvtC80L7RidC90LAg0L/RgNC+0LPRgNCw0LzQsCDQvdC1INC/0L7QtNC00YrRgNC20LAg4oCeJXPigJwg0L/QvtC00LTRitGA0LbQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWZvcmNl4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cy0YrRgNGI0Lgg0LHRitGA0LfQviDQuNC30L3QsNGB0Y/QvdC1IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMQorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1leHBvcnQiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LXRgtC+INC90LAg0LrQvtC80LDQvdC00LDRgtCwINC30LAg0LHRitGA0LfQviDQuNC30L3QsNGB0Y/QvdC1IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKyLQndGP0LzQsCDQvtCx0YnQuCDRg9C60LDQt9Cw0YLQtdC70LgsINC90LUg0YHQsCDRg9C60LDQt9Cw0L3QuCDQvdC40LrQsNC60LLQuCDRg9C60LDQt9Cw0YLQtdC70Lgg4oCUINC90LjRidC+INC90Y/QvNCwINC00LAg0LHRitC00LVcbiIKKyLQvdCw0L/RgNCw0LLQtdC90L4uICDQn9GA0L7QsdCy0LDQudGC0LUg0LTQsCDRg9C60LDQttC10YLQtSDQutC70L7QvSwg0L3QsNC/0YAuIOKAnG1hc3RlcuKAnC5cbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L7RgtCz0L7QstC+0YAg0LIg0YHQv9C40YHRitC60LAg0YEg0YPQutCw0LfQsNGC0LXQu9C4OiDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCglcykgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YfQtdGC0LXQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRlKCVzKSBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0LXQvSDQt9Cw0L/QuNGBINCyIOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQvdC40YjQutCw0YLQsCDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIKK21zZ3N0ciAi0LfQsNCy0YrRgNGI0LLQsNC90LXRgtC+INC90LAg0L3QuNGI0LrQsNGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9GH0LDQutCwOiDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzAgdHJhbnNwb3J0LWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDQvdC40YjQutCwINC30LAg0LrQvtC/0LjRgNCw0L3QtSDQvdCwINC00LDQvdC90LjRgtC1OiDigJ4lc+KAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQgdG8gd2FpdCIKK21zZ3N0ciAi0L/RgNC+0YbQtdGB0YrRgiDQvdCwIOKAniVz4oCcINC90LUg0YPRgdC/0Y8g0LTQsCDQuNC30YfQsNC60LAg0YfRgNC10Lcg4oCed2FpdHBpZOKAnCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAniVz4oCcIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQzMyB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0MgorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDQvdC40YjQutCwINC30LAg0LrQvtC/0LjRgNCw0L3QtSDQvdCwINC00LDQvdC90LjRgtC1IgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC60YDQsNGC0YrQuiDQvtCx0LXQutGCLdC00YrRgNCy0L4iCisKKyM6IHRyZWUtd2Fsay5jOjM5Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90Lgg0L/RgNCw0LLQsCDQt9CwINC00L7RgdGC0YrQvyDQsiDQt9Cw0L/QuNGBINCyINC00YrRgNCy0L4iCisKKyM6IHRyZWUtd2Fsay5jOjQzCittc2dpZCAiZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAi0L/RgNCw0LfQvdC+INC40LzQtSDQvdCwINGE0LDQudC7INCyINC30LDQv9C40YEg0LIg0LTRitGA0LLQviIKKworIzogdHJlZS13YWxrLmM6MTE4Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC60YDQsNGC0YrQuiDRhNCw0LnQuy3QtNGK0YDQstC+IgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisi0JjQt9GC0LXQs9C70Y/QvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0L3QsCDRgtC10LfQuCDRhNCw0LnQu9C+0LLQtTpcbiIKKyIlJXPQn9C+0LTQsNC50YLQtSDQuNC70Lgg0YHQutCw0YLQsNC50YLQtSDQv9GA0L7QvNC10L3QuNGC0LUsINC30LAg0LTQsCDQv9GA0LXQvNC40L3QtdGC0LUg0LrRitC8INC90L7QsiDQutC70L7QvS4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi0JjQt9GC0LXQs9C70Y/QvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0L3QsCDRgtC10LfQuCDRhNCw0LnQu9C+0LLQtTpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorItCh0LvQuNCy0LDQvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0L3QsCDRgtC10LfQuCDRhNCw0LnQu9C+0LLQtTpcbiIKKyIlJXPQn9C+0LTQsNC50YLQtSDQuNC70Lgg0YHQutCw0YLQsNC50YLQtSDQv9GA0L7QvNC10L3QuNGC0LUsINC30LAg0LTQsCDRgdC70LXQtdGC0LUuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorItCh0LvQuNCy0LDQvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0L3QsCDRgtC10LfQuCDRhNCw0LnQu9C+0LLQtTpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIuKAniVz4oCcINGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCDQvdCwINGC0LXQt9C4INGE0LDQudC70L7QstC1OlxuIgorIiUlc9Cf0L7QtNCw0LnRgtC1INC40LvQuCDRgdC60LDRgtCw0LnRgtC1INC/0YDQvtC80LXQvdC40YLQtSwg0LfQsCDQtNCwINC40LfQstGK0YDRiNC40YLQtSDigJ4lc+KAnC4iCisKKyM6IHVucGFjay10cmVlcy5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisi4oCeJXPigJwg0YnQtSDQv9GA0LXQt9Cw0L/QuNGI0LUg0LvQvtC60LDQu9C90LjRgtC1INC/0YDQvtC80LXQvdC4INC90LAg0YLQtdC30Lgg0YTQsNC50LvQvtCy0LU6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlbTpcbiIKICIlcyIKIG1zZ3N0ciAiIgotItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GC0LXQs9C70Y/QvdC10YLQviDQvdCwINCy0LXRgNGB0LjQuDpcbiIKKyLQntCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNC90LjRgtC1INC00LjRgNC10LrRgtC+0YDQuNC4INGJ0LUg0LjQt9GC0YDQuNC1INC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LIg0YLRj9GFOlxuIgogIiVzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNTAKLSMsIHRjbC1mb3JtYXQKKyM6IHVucGFjay10cmVlcy5jOjEzMQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorItCY0LfRgtC10LPQu9GP0L3QtdGC0L4g0YnQtSDQuNC30YLRgNC40LUg0YLQtdC30Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+OlxuIgorIiUlc9Cf0YDQtdC80LXRgdGC0LXRgtC1INCz0Lgg0LjQu9C4INCz0Lgg0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINC/0YDQtdC80LjQvdC10YLQtSDQvdCwINC00YDRg9CzINC60LvQvtC9LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLQmNC30YLQtdCz0LvRj9C90LXRgtC+INGJ0LUg0LjQt9GC0YDQuNC1INGC0LXQt9C4INC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLQodC70LjQstCw0L3QtdGC0L4g0YnQtSDQuNC30YLRgNC40LUg0YLQtdC30Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+OlxuIgorIiUlc9Cf0YDQtdC80LXRgdGC0LXRgtC1INCz0Lgg0LjQu9C4INCz0Lgg0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINGB0LvQtdC10YLQtS4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisi0KHQu9C40LLQsNC90LXRgtC+INGJ0LUg0LjQt9GC0YDQuNC1INGC0LXQt9C4INC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyLigJ4lc+KAnCDRidC1INC40LfRgtGA0LjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVz0J/RgNC10LzQtdGB0YLQtdGC0LUg0LPQuCDQuNC70Lgg0LPQuCDQuNC30YLRgNC40LnRgtC1LCDQt9CwINC00LAg0LjQt9Cy0YrRgNGI0LjRgtC1IOKAniVz4oCcLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLigJ4lc+KAnCDRidC1INC40LfRgtGA0LjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisi0JjQt9GC0LXQs9C70Y/QvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVz0J/RgNC10LzQtdGB0YLQtdGC0LUg0LPQuCDQuNC70Lgg0LPQuCDQuNC30YLRgNC40LnRgtC1LCDQt9CwINC00LAg0YHQvNC10L3QuNGC0LUg0LrQu9C+0L0uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi0JjQt9GC0LXQs9C70Y/QvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorItCh0LvQuNCy0LDQvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDRgtC10LfQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L46XG4iCisiJSVz0J/RgNC10LzQtdGB0YLQtdGC0LUg0LPQuCDQuNC70Lgg0LPQuCDQuNC30YLRgNC40LnRgtC1LCDQt9CwINC00LAg0YHQu9C10LXRgtC1LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisi0KHQu9C40LLQsNC90LXRgtC+INGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INGC0LXQt9C4INC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi4oCeJXPigJwg0YnQtSDQv9GA0LXQt9Cw0L/QuNGI0LUg0YLQtdC30Lgg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+OlxuIgorIiUlc9Cf0YDQtdC80LXRgdGC0LXRgtC1INCz0Lgg0LjQu9C4INCz0Lgg0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINC40LfQstGK0YDRiNC40YLQtSDigJ4lc+KAnC4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuKAniVz4oCcINGJ0LUg0L/RgNC10LfQsNC/0LjRiNC1INGC0LXQt9C4INC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIKK21zZ3N0ciAi0JfQsNC/0LjRgdGK0YIg0LfQsCDigJ4lc+KAnCDRgdGK0LLQv9Cw0LTQsCDRgSDRgtC+0LfQuCDQt9CwIOKAniVz4oCcLiAg0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40YHQstC+0LguIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi0KfQsNGB0YLQuNGH0L3QvtGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvdC+OiDRgdC70LXQtNC90LjRgtC1INC30LDQv9C40YHQuCDQvdC1INGB0LAgIgorItCw0LrRgtGD0LDQu9C90Lg6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLQntCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDRh9Cw0YHRgtC40YfQvdC+0YLQviDQuNC30YLQtdCz0LvRj9C90LUg0YnQtSDQv9GA0LXQt9Cw0L/QuNGI0LUg0YLQtdC30Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+ICIKKyLQtNGK0YDQstC+OlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLQntCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDRh9Cw0YHRgtC40YfQvdC+0YLQviDQuNC30YLQtdCz0LvRj9C90LUg0YnQtSDQuNC30YLRgNC40LUg0YLQtdC30Lgg0YTQsNC50LvQvtCy0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+ICIKKyLQtNGK0YDQstC+OlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisi0J/QvtC00LzQvtC00YPQu9GK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9OlxuIgorIuKAniVz4oCcIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAi0J/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjQtdGC0L5cbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzE3Cittc2dpZCAiVXBkYXRpbmcgZmlsZXMiCittc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LUiCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorItGB0LvQtdC00L3QuNGC0LUg0L/RitGC0LjRidCwINGB0LAg0LIg0LrQvtC90YTQu9C40LrRgiAo0L3QsNC/0YAuINC/0YDQuCDRgNCw0LfQu9C40LrQsCDQsiDRgNC10LPQuNGB0YLRitGA0LBcbiIKKyLQstGK0LIg0YTQsNC50LvQvtCy0Lgg0YHQuNGB0YLQtdC80LgsINC60L7QuNGC0L4g0L3QtSDRgNCw0LfQu9C40YfQsNCy0LDRgiDQs9C70LDQstC90Lgg0L7RgiDQvNCw0LvQutC4INCx0YPQutCy0LgpXG4iCisi0Lgg0YHQsNC80L4g0LXQtNC40L0g0L7RgiDRg9GH0LDRgdGC0L3QuNGG0LjRgtC1INCyINC60L7QvdGE0LvQuNC60YLQsCDQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvjpcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0MQorbXNnaWQgIlVwZGF0aW5nIGluZGV4IGZsYWdzIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGE0LvQsNCz0L7QstC10YLQtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGF0LXQvNCwINC30LAg0LDQtNGA0LXRgSDQuNC70Lgg0YHRg9GE0LjQutGB0YrRgiDigJ46Ly/igJwg0LvQuNC/0YHQstCwIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINC10LrRgNCw0L3QuNGA0LDRidCwINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGCIOKAniVYWOKAnCIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAi0L3QtSDQtSDRg9C60LDQt9Cw0L3QsCDQvNCw0YjQuNC90LAsINCwINGB0YXQtdC80LDRgtCwINC90LUg0LUg4oCeZmlsZTrigJwiCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAi0L/RgNC4INGB0YXQtdC80LAg4oCeZmlsZTrigJwg0L3QtSDQvNC+0LbQtdGC0LUg0LTQsCDRg9C60LDQt9Cy0LDRgtC1INC90L7QvNC10YAg0L3QsCDQv9C+0YDRgiIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QuCDQt9C90LDRhtC4INCyINC40LzQtdGC0L4g0L3QsCDQvNCw0YjQuNC90LAiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L3QvtC80LXRgCDQvdCwINC/0L7RgNGCIgorCisjOiB1cmxtYXRjaC5jOjM3MQorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGH0LDRgdGCINC+0YIg0L/RitGC0Y8g4oCeLi7igJwiCisKKyM6IHdvcmt0cmVlLmM6MjU4IGJ1aWx0aW4vYW0uYzoyMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiB3b3JrdHJlZS5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIuKAniVz4oCcINCyINC+0YHQvdC+0LLQvdC+0YLQviDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+INC90LUg0LUg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviIKKworIzogd29ya3RyZWUuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICIiCisi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0YHRitC00YrRgNC20LAg0LDQsdGB0L7Qu9GO0YLQvdC40Y8g0L/RitGCINC60YrQvCDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC10YLQviDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiB3b3JrdHJlZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwLiIKKworIzogd29ya3RyZWUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0YTQsNC50Lsg0L3QsCAuZ2l0LCDQutC+0LQg0LfQsCDQs9GA0LXRiNC60LA6ICVkIgorCisjOiB3b3JrdHJlZS5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L7QsdGA0LDRgtC90L4g0LrRitC8IOKAniVz4oCcIgorCisjOiB3cmFwcGVyLmM6MTg2IHdyYXBwZXIuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC4INC30LAg0YfQtdGC0LXQvdC1LCDQuCDQt9CwINC30LDQv9C40YEiCisKKyM6IHdyYXBwZXIuYzozODcgd3JhcHBlci5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgItC90Y/QvNCwINC00L7RgdGC0YrQvyDQtNC+IOKAniVz4oCcIgorCisjOiB3cmFwcGVyLmM6NTk2Cittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLRgtC10LrRg9GJ0LDRgtCwINGA0LDQsdC+0YLQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPINC1INC90LXQtNC+0YHRgtGK0L/QvdCwIgorCisjOiB3dC1zdGF0dXMuYzoxNTgKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgItCd0LXRgdC70LXRgtC4INC/0YrRgtC40YnQsDoiCisKKyM6IHd0LXN0YXR1cy5jOjE4NyB3dC1zdGF0dXMuYzoyMTkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJlc3RvcmUgLS1zdGFnZWQg0KTQkNCZ0JvigKbigJwsINC30LAg0LTQsCDQuNC30LLQsNC00LjRgtC1INCk0JDQmdCb0LAg0L7RgiDQuNC90LTQtdC60YHQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE5MCB3dC1zdGF0dXMuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0LjQt9Cy0LDQtNC40YLQtSAiCisi0KTQkNCZ0JvQsCDQvtGCINC40L3QtNC10LrRgdCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJtIC0tY2FjaGVkICVzINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0LjQt9Cy0LDQtNC40YLQtSDQpNCQ0JnQm9CwINC+0YIg0LjQvdC00LXQutGB0LApIgorCisjOiB3dC1zdGF0dXMuYzoxOTcKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGQg0KTQkNCZ0JvigKbigJwsINC30LAg0LTQsCDRg9C60LDQttC10YLQtSDRgNCw0LfRgNC10YjQsNCy0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YLQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGQvcm0g0KTQkNCZ0JvigKbigJwsINGB0L/QvtGA0LXQtCDRgNC10YjQtdC90LjQtdGC0L4sINC60L7QtdGC0L4g0LjQt9Cx0LjRgNCw0YLQtSDQt9CwICIKKyLQutC+0L3RhNC70LjQutGC0LApIgorCisjOiB3dC1zdGF0dXMuYzoyMDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJtINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0YPQutCw0LbQtdGC0LUg0YDQsNC30YDQtdGI0LDQstCw0L3QtdGC0L4g0L3QsCDQutC+0L3RhNC70LjQutGC0LApIgorCisjOiB3dC1zdGF0dXMuYzoyMTEgd3Qtc3RhdHVzLmM6MTA3NAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0YnQtSDQsdGK0LTQsNGCINC/0L7QtNCw0LTQtdC90Lg6IgorCisjOiB3dC1zdGF0dXMuYzoyMzQgd3Qtc3RhdHVzLmM6MTA4MworbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0L3QtSDRgdCwINCyINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtToiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRkINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0L7QsdC90L7QstC40YLQtSDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1KSIKKworIzogd3Qtc3RhdHVzLmM6MjQwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGQvcm0g0KTQkNCZ0JvigKbigJwsINC30LAg0LTQsCDQvtCx0L3QvtCy0LjRgtC1INGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUpIgorCisjOiB3dC1zdGF0dXMuYzoyNDEKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJlc3RvcmUg0KTQkNCZ0JvigKbigJwsINC30LAg0LTQsCDQvtGC0YXQstGK0YDQu9C40YLQtSDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0YDQsNCx0L7RgtC90LDRgtCwICIKKyLQtNC40YDQtdC60YLQvtGA0LjRjykiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKNC/0L7QtNCw0LnRgtC1INC40LvQuCDQvtGC0YXQstGK0YDQu9C10YLQtSDQvdC10YHQu9C10LTQtdC90L7RgtC+INC40LvQuCDQv9GA0L7QvNC10L3QtdC90L7RgtC+INGB0YrQtNGK0YDQttCw0L3QuNC1INCyICIKKyLQv9C+0LTQvNC+0LTRg9C70LjRgtC1KSIKKworIzogd3Qtc3RhdHVzLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgJXMg0KTQkNCZ0JvigKbigJwsINC30LAg0LTQsCDQvtC/0YDQtdC00LXQu9C40YLQtSDQutCw0LrQstC+INCy0LrQu9GO0YfQstCw0YLQtSDQsiDQv9C+0LTQsNCy0LDQvdC10YLQvikiCisKKyM6IHd0LXN0YXR1cy5jOjI2OAorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgItC40LfRgtGA0LjRgtC4INCyINC00LLQsNGC0LAg0YHQu9GD0YfQsNGPOiIKKworIzogd3Qtc3RhdHVzLmM6MjcwCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICLQtNC+0LHQsNCy0LXQvdC4INC+0YIg0LLQsNGBOiIKKworIzogd3Qtc3RhdHVzLmM6MjcyCittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAi0LjQt9GC0YDQuNGC0Lgg0L7RgiDRgtGP0YU6IgorCisjOiB3dC1zdGF0dXMuYzoyNzQKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAi0LTQvtCx0LDQstC10L3QuCDQvtGCINGC0Y/RhToiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICLQuNC30YLRgNC40YLQuCDQvtGCINCy0LDRgToiCisKKyM6IHd0LXN0YXR1cy5jOjI3OAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICLQtNC+0LHQsNCy0LXQvdC4INC4INCyINC00LLQsNGC0LAg0YHQu9GD0YfQsNGPOiIKKworIzogd3Qtc3RhdHVzLmM6MjgwCittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgItC/0YDQvtC80LXQvdC10L3QuCDQuCDQsiDQtNCy0LDRgtCwINGB0LvRg9GH0LDRjzoiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAi0L3QvtCyINGE0LDQudC7OiIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAi0LrQvtC/0LjRgNCw0L06IgorCisjOiB3dC1zdGF0dXMuYzoyOTQKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAi0LjQt9GC0YDQuNGCOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk2Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICLQv9GA0L7QvNC10L3QtdC9OiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgItC/0YDQtdC40LzQtdC90YPQstCw0L06IgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAi0YHQvNGP0L3QsCDQvdCwINCy0LjQtNCwOiIKKworIzogd3Qtc3RhdHVzLmM6MzAyCittc2dpZCAidW5rbm93bjoiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQv9GA0L7QvNGP0L3QsDoiCisKKyM6IHd0LXN0YXR1cy5jOjMwNAorbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAi0L3QtdGB0LvRj9GCOiIKKworIzogd3Qtc3RhdHVzLmM6Mzg0Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAi0L3QvtCy0Lgg0L/QvtC00LDQstCw0L3QuNGPLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4NgorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAi0L/RgNC+0LzQtdC90LXQvdC+INGB0YrQtNGK0YDQttCw0L3QuNC1LCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4OAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgItC90LXRgdC70LXQtNC10L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAi0JjQvNCwICVkINGB0LrQsNGC0LDQstCw0L3QtS4iCittc2dzdHJbMV0gItCY0LzQsCAlZCDRgdC60LDRgtCw0LLQsNC90LjRjy4iCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70LjRgtC1INGB0LAg0L/RgNC+0LzQtdC90LXQvdC4LCDQvdC+INC90LUg0YHQsCDQvtCx0L3QvtCy0LXQvdC4OiIKKworIzogd3Qtc3RhdHVzLmM6OTQwCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90Lgg0LIg0L/QvtC00LzQvtC00YPQu9C40YLQtSDQt9CwINC/0L7QtNCw0LLQsNC90LU6IgorCisjOiB3dC1zdGF0dXMuYzoxMDIyCittc2dpZCAiIgorIkRvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLiIKK21zZ3N0ciAiIgorItCd0LUg0L/RgNC+0LzQtdC90Y/QudGC0LUg0Lgg0L3QtSDQuNC30YLRgNC40LLQsNC50YLQtSDQs9C+0YDQvdC40Y8g0YDQtdC0LlxuIgorItCS0YHQuNGH0LrQviDQvtGC0LTQvtC70YMg0YnQtSDQsdGK0LTQtSDQuNC30YLRgNC40YLQvi4iCisKKyM6IHd0LXN0YXR1cy5jOjExMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNvbXB1dGUgdGhlIGJyYW5jaCBhaGVhZC9iZWhpbmQgdmFsdWVzLlxuIgorIllvdSBjYW4gdXNlICctLW5vLWFoZWFkLWJlaGluZCcgdG8gYXZvaWQgdGhpcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCY0LfRh9C40YHQu9GP0LLQsNC90LXRgtC+INC90LAg0LHRgNC+0Y8g0YDQsNC30LvQuNGH0LDQstCw0YnQuCDRgdC1INC/0L7QtNCw0LLQsNC90LjRjyDQvtGC0L3QtSAlLjJmINGB0LXQui5cbiIKKyLQl9CwINC00LAg0LjQt9Cx0LXQs9C90LXRgtC1INGC0L7QstCwLCDQv9C+0LvQt9Cy0LDQudGC0LUg4oCeLS1uby1haGVhZC1iZWhpbmTigJwuXG4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDQKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgItCd0Y/QutC+0Lgg0L/RitGC0LjRidCwINC90LUg0YHQsCDRgdC70LXRgtC4LiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKNC60L7RgNC40LPQuNGA0LDQudGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQuCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IGNvbW1pdOKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IG1lcmdlIC0tYWJvcnTigJwsINC30LAg0LTQsCDQv9GA0LXRg9GB0YLQsNC90L7QstC40YLQtSDRgdC70LjQstCw0L3QtdGC0L4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTUzCittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAi0JLRgdC40YfQutC4INC60L7QvdGE0LvQuNC60YLQuCDRgdCwINGA0LXRiNC10L3QuCwg0L3QviDQv9GA0L7QtNGK0LvQttCw0LLQsNGC0LUg0YHQu9C40LLQsNC90LXRgtC+LiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGNvbW1pdOKAnCwg0LfQsCDQtNCwINC30LDQstGK0YDRiNC40YLQtSDRgdC70LjQstCw0L3QtdGC0L4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTY1Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQv9GA0LjQu9Cw0LPQsNGC0LUg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC60YDRitC/0LrQuCDRh9GA0LXQtyDigJ5naXQgYW3igJwuIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLQotC10LrRg9GJ0LDRgtCwINC60YDRitC/0LrQsCDQtSDQv9GA0LDQt9C90LAuIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LrQvtGA0LjQs9C40YDQsNC50YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INC4INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgYW0gLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNzQKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYW0gLS1za2lw4oCcLCDQt9CwINC00LAg0L/RgNC+0L/Rg9GB0L3QtdGC0LUg0YLQsNC30Lgg0LrRgNGK0L/QutCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTE3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGFtIC0tYWJvcnTigJwsINC30LAg0LTQsCDQstGK0LfRgdGC0LDQvdC+0LLQuNGC0LUg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC40Y8g0LrQu9C+0L0pIgorCisjOiB3dC1zdGF0dXMuYzoxMzA5Cittc2dpZCAiZ2l0LXJlYmFzZS10b2RvIGlzIG1pc3NpbmcuIgorbXNnc3RyICLigJ5naXQtcmViYXNlLXRvZG/igJwg0LvQuNC/0YHQstCwLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxMQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICLQndC1INGB0LAg0LjQt9C/0YrQu9C90LXQvdC4INC60L7QvNCw0L3QtNC4LiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICLQn9C+0YHQu9C10LTQvdC+INC40LfQv9GK0LvQvdC10L3QsCDQutC+0LzQsNC90LTQsCAo0LjQt9C/0YrQu9C90LXQvdCwINC1INC+0LHRidC+ICVkINC60L7QvNCw0L3QtNCwKToiCittc2dzdHJbMV0gItCf0L7RgdC70LXQtNC90L4g0LjQt9C/0YrQu9C90LXQvdC4INC60L7QvNCw0L3QtNC4ICjQuNC30L/RitC70L3QtdC90Lgg0YHQsCDQvtCx0YnQviAlZCDQutC+0LzQsNC90LTQuCk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgICjQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LjQvNCwINCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgItCd0LUg0L7RgdGC0LDQstCw0YIg0L/QvtCy0LXRh9C1INC60L7QvNCw0L3QtNC4LiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICLQodC70LXQtNCy0LDRidCwINC60L7QvNCw0L3QtNCwINC30LAg0LjQt9C/0YrQu9C90LXQvdC40LUgKNC+0YHRgtCw0LLQsCDQvtGJ0LUgJWQg0LrQvtC80LDQvdC00LApOiIKK21zZ3N0clsxXSAi0KHQu9C10LTQstCw0YnQuCDQutC+0LzQsNC90LTQuCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1ICjQvtGB0YLQsNCy0LDRgiDQvtGJ0LUgJWQg0LrQvtC80LDQvdC00LgpOiIKKworIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb+KAnCwg0LfQsCDQtNCwINGA0LDQt9Cz0LvQtdC00LDRgtC1INC4INGA0LXQtNCw0LrRgtC40YDQsNGC0LUpIgorCisjOiB3dC1zdGF0dXMuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1INC60LvQvtC90LAg4oCeJXPigJwg0LLRitGA0YXRgyDigJ4lc+KAnC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINC/0YDQtdCx0LDQt9C40YDQsNGC0LUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzcxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNC60L7RgNC40LPQuNGA0LDQudGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQuCDQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCByZWJhc2UgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJlYmFzZSAtLXNraXDigJwsINC30LAg0LTQsCDQv9GA0L7Qv9GD0YHQvdC10YLQtSDRgtCw0LfQuCDQutGA0YrQv9C60LApIgorCisjOiB3dC1zdGF0dXMuYzoxMzc1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmViYXNlIC0tYWJvcnTigJwsINC30LAg0LTQsCDQstGK0LfRgdGC0LDQvdC+0LLQuNGC0LUg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC40Y8g0LrQu9C+0L0pIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQstGB0LjRh9C60Lgg0LrQvtC90YTQu9C40LrRgtC4INGB0LAg0LrQvtGA0LjQs9C40YDQsNC90Lg6INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmViYXNlIC0tY29udGludWXigJwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGA0LDQt9C00LXQu9GP0YLQtSDQv9C+0LTQsNCy0LDQvdC1INC00L7QutCw0YLQviDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1INC60LvQvtC90LAg4oCeJXPigJwg0LLRitGA0YXRgyDigJ4lc+KAnC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzOTEKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YDQsNC30LTQtdC70Y/RgtC1INC/0L7QtNCw0LLQsNC90LUg0LTQvtC60LDRgtC+INC/0YDQtdCx0LDQt9C40YDQsNGC0LUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICjQodC70LXQtCDQutCw0YLQviDRgNCw0LHQvtGC0L3QvtGC0L4g0LLQuCDQtNGK0YDQstC+INGB0YLQsNC90LUg0YfQuNGB0YLQviwg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmViYXNlIC0tIgorImNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisi0JIg0LzQvtC80LXQvdGC0LAg0YDQtdC00LDQutGC0LjRgNCw0YLQtSDQv9C+0LTQsNCy0LDQvdC1INC00L7QutCw0YLQviDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1INC60LvQvtC90LAg4oCeJXPigJwg0LLRitGA0YXRgyDigJ4lc+KAnC4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGA0LXQtNCw0LrRgtC40YDQsNGC0LUg0L/QvtC00LDQstCw0L3QtSDQtNC+0LrQsNGC0L4g0L/RgNC10LHQsNC30LjRgNCw0YLQtS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgY29tbWl0IC0tYW1lbmTigJwsINC30LAg0LTQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1INGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MDgKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCByZWJhc2UgLS1jb250aW51ZeKAnCwg0YHQu9C10LQg0LrQsNGC0L4g0LfQsNCy0YrRgNGI0LjRgtC1INC/0YDQvtC80LXQvdC40YLQtSDRgdC4KSIKKworIzogd3Qtc3RhdHVzLmM6MTQxOQorbXNnaWQgIkNoZXJyeS1waWNrIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGPLiIKKworIzogd3Qtc3RhdHVzLmM6MTQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQvtGC0LHQuNGA0LDRgtC1INC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcLiIKKworIzogd3Qtc3RhdHVzLmM6MTQyOQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBjaGVycnktcGljayAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzMgorbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgICjQt9CwINC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUsINC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKNCy0YHQuNGH0LrQuCDQutC+0L3RhNC70LjQutGC0Lgg0YHQsCDQutC+0YDQuNCz0LjRgNCw0L3QuCwg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBjaGVycnktcGljayAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBjaGVycnktcGljayAtLXNraXDigJwsINC30LAg0LTQsCDQv9GA0L7Qv9GD0YHQvdC10YLQtSDRgtCw0LfQuCDQutGA0YrQv9C60LApIgorCisjOiB3dC1zdGF0dXMuYzoxNDM5Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBjaGVycnktcGljayAtLWFib3J04oCcLCDQt9CwINC00LAg0L7RgtC80LXQvdC40YLQtSDQstGB0LjRh9C60Lgg0LTQtdC50YHRgtCy0LjRjyDRgSAiCisi0L7RgtCx0LjRgNCw0L3QtSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDkKK21zZ2lkICJSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YLQtdGH0LUg0L7RgtC80Y/QvdCwINC90LAg0L/QvtC00LDQstCw0L3QtS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINC+0YLQvNC10L3Rj9GC0LUg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnC4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTgKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNC60L7RgNC40LPQuNGA0LDQudGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQuCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJldmVydCAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2MQorbXNnaWQgIiAgKHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAo0LfQsCDQtNCwINC/0YDQvtC00YrQu9C20LjRgtC1LCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJldmVydCAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LLRgdC40YfQutC4INC60L7QvdGE0LvQuNC60YLQuCDRgdCwINC60L7RgNC40LPQuNGA0LDQvdC4LCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJldmVydCAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmV2ZXJ0IC0tc2tpcOKAnCwg0LfQsCDQtNCwINC/0YDQvtC/0YPRgdC90LXRgtC1INGC0LDQt9C4INC60YDRitC/0LrQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmV2ZXJ0IC0tYWJvcnTigJwsINC30LAg0LTQsCDQv9GA0LXRg9GB0YLQsNC90L7QstC40YLQtSDQvtGC0LzRj9C90LDRgtCwINC90LAgIgorItC/0L7QtNCw0LLQsNC90LUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YLRitGA0YHQuNGC0LUg0LTQstC+0LjRh9C90L4sINC60LDRgtC+INGB0YLQtSDRgdGC0LDRgNGC0LjRgNCw0LvQuCDQvtGCINC60LvQvtC9IOKAniVz4oCcLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4MgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGC0YrRgNGB0LjRgtC1INC00LLQvtC40YfQvdC+LiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGJpc2VjdCByZXNldOKAnCwg0LfQsCDQtNCwINGB0LUg0LLRitGA0L3QtdGC0LUg0LrRitC8INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4gIgorItGB0YrRgdGC0L7Rj9C90LjQtSDQuCDQutC70L7QvSkiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICLQndCwINC60LvQvtC9ICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgItC40LfQstGK0YDRiNCy0LDRgtC1INC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INCy0YrRgNGF0YMgIgorCisjOiB3dC1zdGF0dXMuYzoxNzAzCittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAi0LjQt9Cy0YrRgNGI0LLQsNGC0LUg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQstGK0YDRhdGDICIKKworIzogd3Qtc3RhdHVzLmM6MTcxMworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgItCY0LfQstGK0L0g0LLRgdC40YfQutC4INC60LvQvtC90LguIgorCisjOiB3dC1zdGF0dXMuYzoxNzMwCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgItCf0YrRgNCy0L7QvdCw0YfQsNC70L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiB3dC1zdGF0dXMuYzoxNzMxCittc2dpZCAiTm8gY29tbWl0cyB5ZXQiCittc2dzdHIgItCS0YHQtSDQvtGJ0LUg0LvQuNC/0YHQstCw0YIg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ1Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQndC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDcKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICLQmNCz0L3QvtGA0LjRgNCw0L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogd3Qtc3RhdHVzLmM6MTc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisi0JHRj9GF0LAg0L3QtdC+0LHRhdC+0LTQuNC80LggJS4yZiDRgdC10LrRg9C90LTQuCDQt9CwINC40LfQsdGA0L7Rj9Cy0LDQvdC10YLQviDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUuXG4iCisi0JTQvtCx0LDQstGP0L3QtdGC0L4g0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tdW5v4oCcINC60YrQvCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHN0YXR1c+KAnCwg0YnQtSDRg9GB0LrQvtGA0LhcbiIKKyLQuNC30L/RitC70L3QtdC90LjQtdGC0L4sINC90L4g0YnQtSDRgtGA0Y/QsdCy0LAg0LTQsCDQtNC+0LHQsNCy0Y/RgtC1INC90L7QstC40YLQtSDRhNCw0LnQu9C+0LLQtSDRgNGK0YfQvdC+LlxuIgorItCX0LAg0L/QvtCy0LXRh9C1INC/0L7QtNGA0L7QsdC90L7RgdGC0Lgg0L/QvtCz0LvQtdC00L3QtdGC0LUg4oCeZ2l0IHN0YXR1cyBoZWxw4oCcLiIKKworIzogd3Qtc3RhdHVzLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICLQndC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INC90LUg0YHQsCDQuNC30LLQtdC00LXQvdC4JXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLXXigJwsINC30LAg0LTQsCDQuNC30LLQtdC00LXRgtC1INC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUpIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAi0J3Rj9C80LAg0L/RgNC+0LzQtdC90LgiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyLQutGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC90LUg0YHQsCDQtNC+0LHQsNCy0LXQvdC4INC/0YDQvtC80LXQvdC4ICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGTigJwg0Lgv0LjQu9C4ICIKKyLigJ5naXQgY29tbWl0IC1h4oCcKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgItC60YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDRgdCwINC00L7QsdCw0LLQtdC90Lgg0L/RgNC+0LzQtdC90LhcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisi0LrRitC8INC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INGB0LAg0LTQvtCx0LDQstC10L3QuCDQv9GA0L7QvNC10L3QuCwg0L3QviDQuNC80LAg0L3QvtCy0Lgg0YTQsNC50LvQvtCy0LUgIgorIijQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGTigJwsINC30LAg0LTQsCDQt9Cw0L/QvtGH0L3QtSDRgtGP0YXQvdC+0YLQviDRgdC70LXQtNC10L3QtSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAi0LrRitC8INC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INGB0LAg0LTQvtCx0LDQstC10L3QuCDQv9GA0L7QvNC10L3QuCwg0L3QviDQuNC80LAg0L3QvtCy0Lgg0YTQsNC50LvQvtCy0LVcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorItC70LjQv9GB0LLQsNGCINC60LDQutCy0LjRgtC+INC4INC00LAg0LUg0L/RgNC+0LzQtdC90LggKNGB0YrQt9C00LDQudGC0LUg0LjQu9C4INC60L7Qv9C40YDQsNC50YLQtSDRhNCw0LnQu9C+0LLQtSDQuCDQuNC30L/QvtC70LfQstCw0LnRgtC1ICIKKyLigJ5naXQgYWRk4oCcLCDQt9CwINC00LAg0LfQsNC/0L7Rh9C90LUg0YLRj9GF0L3QvtGC0L4g0YHQu9C10LTQtdC90LUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODUgd3Qtc3RhdHVzLmM6MTc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICLQu9C40L/RgdCy0LDRgiDQutCw0LrQstC40YLQviDQuCDQtNCwINC1INC/0YDQvtC80LXQvdC4XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorItC70LjQv9GB0LLQsNGCINC60LDQutCy0LjRgtC+INC4INC00LAg0LUg0L/RgNC+0LzQtdC90LggKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLXXigJwsINC30LAg0LTQsCDRgdC1INC40LfQstC10LTQsNGCINC4ICIKKyLQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1KVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW5cbiIKK21zZ3N0ciAi0LvQuNC/0YHQstCw0YIg0LrQsNC60LLQuNGC0L4g0Lgg0LTQsCDQtSDQv9GA0L7QvNC10L3QuCwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LUg0YfQuNGB0YLQvlxuIgorCisjOiB3dC1zdGF0dXMuYzoxOTA1Cittc2dpZCAiTm8gY29tbWl0cyB5ZXQgb24gIgorbXNnc3RyICLQktGB0LUg0L7RidC1INC70LjQv9GB0LLQsNGCINC/0L7QtNCw0LLQsNC90LjRjyDQsiAiCisKKyM6IHd0LXN0YXR1cy5jOjE5MDkKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEICjQuNC30LLRitC9INC60LvQvtC9KSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAi0YDQsNC30LvQuNGH0LXQvSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MiB3dC1zdGF0dXMuYzoxOTUwCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAi0L3QsNC30LDQtCDRgSAiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDUgd3Qtc3RhdHVzLmM6MTk0OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAi0L3QsNC/0YDQtdC0INGBICIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIKKyM6IHd0LXN0YXR1cy5jOjI0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINC40LfQstGK0YDRiNC40YLQtSDigJ4lc+KAnCwg0LfQsNGJ0L7RgtC+INC40LzQsCDQv9GA0L7QvNC10L3QuCwg0LrQvtC40YLQviDQvdC1INGB0LAg0LIg0LjQvdC00LXQutGB0LAuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc2Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQvtGB0LLQtdC9INGC0L7QstCwINCyINC40L3QtNC10LrRgdCwINC40LzQsCDQvdC10L/QvtC00LDQtNC10L3QuCDQv9GA0L7QvNC10L3QuC4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0LjQt9Cy0YrRgNGI0LjRgtC1IOKAniVz4oCcLCDQt9Cw0YnQvtGC0L4g0LIg0LjQvdC00LXQutGB0LAg0LjQvNCwINC90LXQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4LiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBb0J7Qn9Cm0JjQr+KApl0gWy0tXSDQn9Cq0KLigKYiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC9INC40LfRhdC+0LTQtdC9INC60L7QtCDQv9GA0Lgg0LPQtdC90LXRgNC40YDQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQsDogJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTIgYnVpbHRpbi9jb21taXQuYzoyODgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogYnVpbHRpbi9hZGQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzcKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0Lgg0YHQu9C10LQg0L7QsdC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0LjQvdC00LXQutGB0LAg0L3QtSDRgdCwINC00L7QsdCw0LLQtdC90Lgg0LrRitC8INC90LXQs9C+OiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTIgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC30LAg0LfQsNC/0LjRgS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY3Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICLQmtGA0YrQv9C60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvdCwIgorCisjOiBidWlsdGluL2FkZC5jOjI3MAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINC60YDRitC/0LrQsCIKKworIzogYnVpbHRpbi9hZGQuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDRhNCw0LnQu9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2FkZC5jOjI3NQorbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAi0J/RgNCw0LfQvdCwINC60YDRitC/0LrQsCwg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjQtdGC0L4uIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAi0JrRgNGK0L/QutCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQvtC20LXQvdCwIgorCisjOiBidWlsdGluL2FkZC5jOjI4OAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorItCh0LvQtdC00L3QuNGC0LUg0L/RitGC0LjRidCwINGJ0LUg0LHRitC00LDRgiDQuNCz0L3QvtGA0LjRgNCw0L3QuCDRgdC/0L7RgNC10LQg0L3Rj9C60L7QuSDQvtGCINGE0LDQudC70L7QstC10YLQtSDigJ4uZ2l0aWdub3Jl4oCcOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjMwOCBidWlsdGluL2NsZWFuLmM6OTEwIGJ1aWx0aW4vZmV0Y2guYzoxNjMgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMjMgYnVpbHRpbi9wdXNoLmM6NTQ4CisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDQgYnVpbHRpbi9ybS5jOjI0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgItC/0YDQvtCx0L3QviDQuNC30L/RitC70L3QtdC90LjQtSIKKworIzogYnVpbHRpbi9hZGQuYzozMTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90L4g0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC4IgorCisjOiBidWlsdGluL2FkZC5jOjMxMiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MiBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0LXQvSDQuNC30LHQvtGAINC90LAg0L/QsNGA0YfQtdGC0LAg0LrQvtC0IgorCisjOiBidWlsdGluL2FkZC5jOjMxMworbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAi0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGC0LXQutGD0YnQsNGC0LAg0YDQsNC30LvQuNC60LAg0Lgg0L/RgNC40LvQsNCz0LDQvdC1IgorCisjOiBidWlsdGluL2FkZC5jOjMxNAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQuCDQvdCwINC40L3QsNGH0LUg0LjQs9C90L7RgNC40YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2FkZC5jOjMxNQorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICLQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9hZGQuYzozMTYKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgItGD0LXQtNC90LDQutCy0Y/QstCw0L3QtSDQvdCwINC30L3QsNGG0LjRgtC1INC30LAg0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuyAo0LLQutC70Y7Rh9Cy0LAg0L7Qv9GG0LjRj9GC0LAg4oCeLXXigJwpIgorCisjOiBidWlsdGluL2FkZC5jOjMxNworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAi0L7RgtCx0LXQu9GP0LfQstCw0L3QtSDRgdCw0LzQviDQvdCwINGE0LDQutGC0LAsINGH0LUg0L/RitGC0Y/RgiDRidC1INCx0YrQtNC1INC00L7QsdCw0LLQtdC9INC/0L4t0LrRitGB0L3QviIKKworIzogYnVpbHRpbi9hZGQuYzozMTgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQstGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90Lgg0LIg0YHQu9C10LTQtdC90LjRgtC1INC4INC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIiIKKyLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0YrRgtC40YnQsNGC0LAsINC60L7QuNGC0L4g0YHQsCDQuNC30YLRgNC40YLQuCDQvtGCINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+ICjRgdGK0YnQvtGC0L4g0LrQsNGC0L4g4oCeLS0iCisibm8tYWxs4oCcKSIKKworIzogYnVpbHRpbi9hZGQuYzozMjMKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgItCx0LXQtyDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L3QvtCy0Lgg0YTQsNC50LvQvtCy0LUsINGB0LDQvNC+INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAiIgorItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LTQvtCx0LDQstC10L3QuCDQv9C+0YDQsNC00Lgg0LPRgNC10YjQutC4IgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorItC/0YDQvtCy0LXRgNC60LAsINGH0LUg0L/RgNC4INC/0YDQvtCx0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQstGB0LjRh9C60Lgg0YTQsNC50LvQvtCy0LUsINC00L7RgNC4INC4INC40LfRgtGA0LjRgtC40YLQtSwg0YHQtSAiCisi0LjQs9C90L7RgNC40YDQsNGCIgorCisjOiBidWlsdGluL2FkZC5jOjMyNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDQKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAi0LjQt9GA0LjRh9C90L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINGB0YLQvtC50L3QvtGB0YLRgtCwINC90LAg0YTQu9Cw0LPQsCDQtNCw0LvQuCDRhNCw0LnQu9GK0YIg0LUg0LjQt9C/0YrQu9C90LjQvCIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LDQstCw0L3QtSDQv9GA0Lgg0LTQvtCx0LDQstGP0L3QtSDQvdCwINCy0LPRgNCw0LTQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2FkZC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91J3ZlIGFkZGVkIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgaW5zaWRlIHlvdXIgY3VycmVudCByZXBvc2l0b3J5LlxuIgorIkNsb25lcyBvZiB0aGUgb3V0ZXIgcmVwb3NpdG9yeSB3aWxsIG5vdCBjb250YWluIHRoZSBjb250ZW50cyBvZlxuIgorInRoZSBlbWJlZGRlZCByZXBvc2l0b3J5IGFuZCB3aWxsIG5vdCBrbm93IGhvdyB0byBvYnRhaW4gaXQuXG4iCisiSWYgeW91IG1lYW50IHRvIGFkZCBhIHN1Ym1vZHVsZSwgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJJZiB5b3UgYWRkZWQgdGhpcyBwYXRoIGJ5IG1pc3Rha2UsIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlXG4iCisiaW5kZXggd2l0aDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorItCY0LfRgtC10LPQu9C40LvQuCDRgdGC0LUg0LTQvtC/0YrQu9C90LjRgtC10LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQsiDRgtC10LrRg9GJ0L7RgtC+LiAg0JrQvtCz0LDRgtC+INC60LvQvtC90LjRgNCw0YLQtSAiCisi0L7QsdGF0LLQsNGJ0LDRidC+0YLQvlxuIgorItGF0YDQsNC90LjQu9C40YnQtSDQvdGP0LzQsCDQtNCwINC/0L7Qu9GD0YfQuNGC0LUg0LLQs9GA0LDQtNC10L3QvtGC0L4sINC30LDRidC+0YLQviDQstGK0L3RiNC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQvdGP0LzQsCAiCisi0L/RgNC10LTRgdGC0LDQstCwXG4iCisi0LfQsCDQstGK0YLRgNC10YjQvdC+0YLQvi4gINCX0LAg0LTQsCDQtNC+0LHQsNCy0LjRgtC1INC/0L7QtNC80L7QtNGD0LssINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHN1Ym1vZHVsZSBhZGQg0JDQlNCg0JXQoSAlc1xuIgorIlxuIgorItCQ0LrQviDQtNC+0LHQsNCy0Y/QvdC10YLQviDQtSDQs9GA0LXRiNC60LAsINC80L7QttC1INC00LAg0LPQviDQuNC30LLQsNC00LjRgtC1INC+0YIg0LjQvdC00LXQutGB0LAg0YEg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyLQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LPQu9C10LTQvdC10YLQtSDigJ5naXQgaGVscCBzdWJtb2R1bGXigJwuIgorCisjOiBidWlsdGluL2FkZC5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmcgZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LLQs9GA0LDQtNC10L3QviDRhdGA0LDQvdC40LvQuNGJ0LU6ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICLQmNC30L/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwIOKAni1m4oCcLCDQt9CwINC00LAg0LPQuCDQtNC+0LHQsNCy0LjRgtC1INC90LDQuNGB0YLQuNC90LAuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDAwCittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC00L7QsdCw0LLRj9C90LUg0L3QsCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9hZGQuYzo0MjggYnVpbHRpbi9jb21taXQuYzozNDgKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLXBhdGhzcGVjLWZyb20tZmlsZeKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LLRgdGP0LrQsCDQvtGCINC+0L/RhtC40LjRgtC1IOKAni0tIgorImludGVyYWN0aXZl4oCcL+KAni0tcGF0Y2jigJwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDM0Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1lZGl0IgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLXBhdGhzcGVjLWZyb20tZmlsZeKAnCDQuCDigJ4tLWVkaXTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ2Cittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni1B4oCcINC4IOKAni114oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2FkZC5jOjQ0OQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni0taWdub3JlLW1pc3NpbmfigJwg0LjQt9C40YHQutCy0LAg4oCeLS1kcnktcnVu4oCcIgorCisjOiBidWlsdGluL2FkZC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YrRgNGK0YIg0LrRitC8IOKAni0tY2htb2TigJwg4oCUIOKAniVz4oCcINC80L7QttC1INC00LAg0LUg0LjQu9C4IOKAni144oCcLCDQuNC70Lgg4oCeK3jigJwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDcxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ4IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1wYXRoc3BlYy1mcm9tLWZpbGXigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINCw0YDQs9GD0LzQtdC90YLQuCwg0YPQutCw0LfQstCw0YnQuCDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjYwIGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzCittc2dpZCAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1wYXRoc3BlYy1maWxlLW51bOKAnCDQuNC30LjRgdC60LLQsCDQvtC/0YbQuNGPIOKAni0tcGF0aHNwZWMtZnJvbS1maWxl4oCcIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAi0J3QuNGJ0L4g0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdC+INC4INC90LjRidC+INC90LUg0LUg0LTQvtCx0LDQstC10L3Qvi5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgItCS0LXRgNC+0Y/RgtC90L4g0LjRgdC60LDRhdGC0LUg0LTQsCDQuNC30L/QvtC70LfQstCw0YLQtSDigJ5naXQgYWRkIC7igJw/XG4iCisKKyM6IGJ1aWx0aW4vYW0uYzozNDcKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAi0YHQutGA0LjQv9GC0YrRgiDQt9CwINCw0LLRgtC+0YAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBidWlsdGluL2FtLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIuKAniVz4oCcINCx0LUg0LjQt9GC0YDQuNGCINC+0YIg0LrRg9C60LDRgtCwIOKAnmFwcGx5cGF0Y2gtbXNn4oCcIgorCisjOiBidWlsdGluL2FtLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi0JTQsNC00LXQvdC40Y/RgiDQstGF0L7QtNC10L0g0YDQtdC0INC1INGBINC90LXQv9GA0LDQstC40LvQtdC9INGE0L7RgNC80LDRgjog4oCeJXPigJwuIgorCisjOiBidWlsdGluL2FtLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICLQkdC10LvQtdC20LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC/0LjRgNCwINC+0YIg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcIgorCisjOiBidWlsdGluL2FtLmM6NTM3Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5mc2Vla+KAnCIKKworIzogYnVpbHRpbi9hbS5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAi0LrRgNGK0L/QutCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzo3OTAKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiIgorItCh0LDQvNC+INC10LTQvdCwINC/0L7RgNC10LTQuNGG0LAg0L7RgiDQutGA0YrQv9C60Lgg0L7RgiDigJ5TdEdJVOKAnCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70LDQs9Cw0L3QsCDQsiDQtNCw0LTQtdC9INC80L7QvNC10L3RgiIKKworIzogYnVpbHRpbi9hbS5jOjgzOAorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg0LLRgNC10LzQtSIKKworIzogYnVpbHRpbi9hbS5jOjg0MyBidWlsdGluL2FtLmM6ODU1Cittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCDQt9CwINC00LDRgtCwIOKAnkRhdGXigJwiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTAKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0L7RgtC80LXRgdGC0LLQsNC90LUg0L3QsCDRh9Cw0YHQvtCy0LjRjyDQv9C+0Y/RgSIKKworIzogYnVpbHRpbi9hbS5jOjk0MworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAi0KTQvtGA0LzQsNGC0YrRgiDQvdCwINC60YDRitC/0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0L/RgNC10LTQtdC70LXQvS4iCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDggYnVpbHRpbi9jbG9uZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi9hbS5jOjk1MworbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAi0JrRgNGK0L/QutC40YLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINGA0LDQt9C00LXQu9C10L3QuC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICLQodC70LXQtCDQutC+0YDQuNCz0LjRgNCw0L3QtdGC0L4g0L3QsCDRgtC+0LfQuCDQv9GA0L7QsdC70LXQvCDQuNC30L/RitC70L3QtdGC0LUg4oCeJXMgLS1jb250aW51ZeKAnC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAi0JDQutC+INC/0YDQtdC00L/QvtGH0LjRgtCw0YLQtSDQtNCwINC/0YDQtdGB0LrQvtGH0LjRgtC1INGC0LDQt9C4INC60YDRitC/0LrQsCwg0LjQt9C/0YrQu9C90LXRgtC1IOKAniVzIC0tc2tpcOKAnC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAi0JfQsCDQtNCwINGB0LUg0LLRitGA0L3QtdGC0LUg0LrRitC8INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1LCDQuNC30L/RitC70L3QtdGC0LUg4oCeJXMgLS1hYm9ydOKAnC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTY5Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIiIKKyLQmtGA0YrQv9C60LDRgtCwINC1INC/0YDQsNGC0LXQvdCwINGBINGE0L7RgNC80LDRgtC40YDQsNC90LUg4oCeZm9ybWF0PWZsb3dlZOKAnC4gINCf0YDQsNC30L3QuNGC0LUg0LfQvdCw0YbQuCDQsiDQutGA0LDRjyDQvdCwICIKKyLRgNC10LTQvtCy0LXRgtC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0LPRg9Cx0Y/Rgi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTk3Cittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLQmtGA0YrQv9C60LDRgtCwINC1INC/0YDQsNC30L3QsC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXV0aG9yIGxpbmUgaW4gY29tbWl0ICVzIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0YDQtdC0INC30LAg0LDQstGC0L7RgNGB0YLQstC+INCyINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcIgorCisjOiBidWlsdGluL2FtLmM6MTI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgItCz0YDQtdGI0LXQvSDRgNC10LQg0YEg0LjQtNC10L3RgtC40YfQvdC+0YHRgjogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisi0JIg0YXRgNCw0L3QuNC70LjRidC10YLQviDQu9C40L/RgdCy0LDRgiDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0L7QsdC10LrRgtC4LUJMT0IsINC30LAg0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1INC60YrQvCDRgtGA0L7QudC90L4gIgorItGB0LvQuNCy0LDQvdC1LiIKKworIzogYnVpbHRpbi9hbS5jOjE0ODYKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICLQkdCw0LfQvtCy0L7RgtC+INC00YrRgNCy0L4g0YHQtSDRgNC10LrQvtC90YHRgtGA0YPQuNGA0LAg0L7RgiDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LIg0LjQvdC00LXQutGB0LDigKYiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTA1Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorItCa0YDRitC/0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20Lgg0LrRitC8INC+0LHQtdC60YLQuNGC0LUtQkxPQiDQsiDQuNC90LTQtdC60YHQsC5cbiIKKyLQlNCwINC90LUg0LHQuCDQtNCwINGB0YLQtSDRjyDRgNC10LTQsNC60YLQuNGA0LDQu9C4INC90LAg0YDRitC60LA/IgorCisjOiBidWlsdGluL2FtLmM6MTUxMQorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAi0J/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCwINC60YrQvCDQsdCw0LfQsNGC0LAg0Lgg0YLRgNC+0LnQvdC+INGB0LvQuNCy0LDQvdC14oCmIgorCisjOiBidWlsdGluL2FtLmM6MTUzNworbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTY5Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi0L/RgNC40LvQsNCz0LDQvdC1INCy0YrRgNGF0YMg0L/RgNCw0LfQvdCwINC40YHRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2FtLmM6MTYxNiBidWlsdGluL2FtLmM6MTYyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtC00YrQu9C20Lgg4oCUIOKAniVz4oCcINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuIgorCisjOiBidWlsdGluL2FtLmM6MTYzOAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAi0KLRj9C70L7RgtC+INC90LAg0LrRgNGK0L/QutCw0YLQsCDQt9CwINC/0YDQuNC70LDQs9Cw0L3QtSDQtToiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKyLQn9GA0LjQu9Cw0LPQsNC90LU/IOKAnnnigJwg4oCUINC00LAv4oCebuKAnCDigJQg0L3QtS/igJ5l4oCcIOKAlCDRgNC10LTQsNC60YLQuNGA0LDQvdC1L+KAnnbigJwg4oCUINC/0YDQtdCz0LvQtdC0L+KAnmHigJwg4oCUINC/0YDQuNC10LzQsNC90LUgIgorItC90LAg0LLRgdC40YfQutC+OiIKKworIzogYnVpbHRpbi9hbS5jOjE2OTUgYnVpbHRpbi9jb21taXQuYzozOTQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiIgorItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQtSDRh9C40YHRgjog0LrRgNGK0L/QutC40YLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC/0YDQuNC70L7QttC10L3QuCAo0LfQsNC80YrRgNGB0LXQvdC4INGB0LA6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE3MzkgYnVpbHRpbi9hbS5jOjE4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtTogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NTYKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgItCR0LXQtyDQv9GA0L7QvNC10L3QuCDigJQg0LrRgNGK0L/QutCw0YLQsCDQstC10YfQtSDQtSDQv9GA0LjQu9C+0LbQtdC90LAuIgorCisjOiBidWlsdGluL2FtLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsCDQv9GA0LggJXMgJS4qc+KAnCIKKworIzogYnVpbHRpbi9hbS5jOjE3NjYKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCcgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giCittc2dzdHIgIiIKKyLQl9CwINC00LAg0LLQuNC00LjRgtC1INC90LXRg9GB0L/QtdGI0L3QviDQv9GA0LjQu9C+0LbQtdC90Lgg0LrRgNGK0L/QutC4LCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwIOKAnmdpdCBhbSAtLXNob3ctIgorImN1cnJlbnQtcGF0Y2jigJwgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giCisKKyM6IGJ1aWx0aW4vYW0uYzoxODEwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisi0JHQtdC3INC/0YDQvtC80LXQvdC4IOKAlCDQstGK0LfQvNC+0LbQvdC+INC1INC00LAg0L3QtSDRgdGC0LUg0LjQt9C/0YrQu9C90LjQu9C4IOKAnmdpdCBhZGTigJwuXG4iCisi0JDQutC+INC90Y/QvNCwINC00YDRg9Cz0LAg0L/RgNC+0LzRj9C90LAg0LfQsCDQstC60LvRjtGH0LLQsNC90LUg0LIg0LjQvdC00LXQutGB0LAsINC90LDQuS3QstC10YDQvtGP0YLQvdC+INC90Y/QutC+0Y8g0LTRgNGD0LPQsFxuIgorItC60YDRitC/0LrQsCDQtSDQtNC+0LLQtdC70LAg0LTQviDRgdGK0YnQuNGC0LUg0L/RgNC+0LzQtdC90Lgg0Lgg0LIg0YLQsNC60YrQsiDRgdC70YPRh9Cw0Lkg0L/RgNC+0YHRgtC+INC/0YDQvtC/0YPRgdC90LXRgtC1INGC0LDQt9C4LiIKKworIzogYnVpbHRpbi9hbS5jOjE4MTcKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyLQmNC90LTQtdC60YHRitGCINCy0YHQtSDQvtGJ0LUg0YHRitC00YrRgNC20LAg0L3QtdGB0LvQtdGC0Lgg0L/RgNC+0LzQtdC90LguXG4iCisi0KHQu9C10LQg0LrQvtGA0LXQutGG0LjRjyDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBhZGTigJwg0LLRitGA0YXRgyDQv9C+0L/RgNCw0LLQtdC90LjRgtC1INGE0LDQudC70L7QstC1LlxuIgorItCX0LAg0LTQsCDQv9GA0LjQtdC80LXRgtC1IOKAntC40LfRgtGA0LjRgtC4INC+0YIg0YLRj9GF4oCcLCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJt4oCcINCy0YrRgNGF0YMg0LjQt9GC0YDQuNGC0LjRgtC1INGE0LDQudC70L7QstC1LiIKKworIzogYnVpbHRpbi9hbS5jOjE5MjQgYnVpbHRpbi9hbS5jOjE5MjggYnVpbHRpbi9hbS5jOjE5NDAgYnVpbHRpbi9yZXNldC5jOjM0NgorIzogYnVpbHRpbi9yZXNldC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INGA0LDQt9C/0L7Qt9C90LDRgiDQutCw0YLQviDQvtCx0LXQutGCLiIKKworIzogYnVpbHRpbi9hbS5jOjE5NzYKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRh9C40YHRgtC10L0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDIwCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyLQmNC30LPQu9C10LbQtNCwINGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LUg0L/RgNC+0LzQtdC90LXQvSDQuCDQvdC1INGB0L7Rh9C4INC60YrQvCDRgdGK0YnQuNGPINC+0LHQtdC60YIg0LrQsNC60YLQviDQv9C+ICIKKyLQstGA0LXQvNC10YLQvlxuIgorItC90LAg0L/QvtGB0LvQtdC00L3QvtGC0L4g0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0IGFt4oCcLiAg0KPQutCw0LfQsNGC0LXQu9GP0YIg0YHQtSDQt9Cw0LTQsNCy0LAg0LTQsCAiCisi0YHQvtGH0Lgg0LrRitC8XG4iCisi4oCeT1JJR19IRUFE4oCcIgorCisjOiBidWlsdGluL2FtLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4tLXBhdGNoLWZvcm1hdOKAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTUzCittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBb0J7Qn9Cm0JjQr+KApl0gWyjQpNCQ0JnQm1/QoV/Qn9Ce0KnQkHzQlNCY0KDQldCa0KLQntCg0JjQr1/QoV/Qn9Ce0KnQkCnigKZdIgorCisjOiBidWlsdGluL2FtLmM6MjE1NAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICJnaXQgYW0gW9Ce0J/QptCY0K/igKZdICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QsCDRgNCw0LHQvtGC0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYyCittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgItC40LfQvtGB0YLQsNCy0LXQvdCwINC+0L/RhtC40Y8sINGB0YrRidC10YHRgtCy0YPQstCwINC/0L4g0LjRgdGC0L7RgNC40YfQtdGB0LrQuCDQv9GA0LjRh9C40L3QuCwg0L3QuNGJ0L4g0L3QtSDQv9GA0LDQstC4IgorCisjOiBidWlsdGluL2FtLmM6MjE2NAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICLQtNCwINGB0LUg0L/RgNC10LzQuNC90LDQstCwINC60YrQvCDRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUg0L/RgNC4INC90YPQttC00LAuIgorCisjOiBidWlsdGluL2FtLmM6MjE2NSBidWlsdGluL2luaXQtZGIuYzo0OTQgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1OAorIzogYnVpbHRpbi9yZXBhY2suYzozMDQgYnVpbHRpbi9zdGFzaC5jOjgxMQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY3Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtCDQt9CwINC/0L7QtNC/0LjRgSDigJ5TaWduZWQtb2ZmLWJ54oCcINCyINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2FtLmM6MjE3MAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICLQv9GA0LXQutC+0LTQuNGA0LDQvdC1INCyIFVURi04ICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcyCittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni1r4oCcINC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1tYWlsaW5mb+KAnCIKKworIzogYnVpbHRpbi9hbS5jOjIxNzQKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLWLigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LW1haWxpbmZv4oCcIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tbeKAnCDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtbWFpbGluZm/igJwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc4Cittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAiIgorItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWtlZXAtY3LigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LW1haWxzcGxpdOKAnCDQt9CwINGE0L7RgNC80LDRgiDigJ5tYm944oCcIgorCisjOiBidWlsdGluL2FtLmM6MjE4MQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICIiCisi0LHQtdC3INC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWtlZXAtY3LigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LW1haWxzcGxpdOKAnCDQvdC10LfQsNCy0LjRgdC40LzQviAiCisi0L7RgiDigJ5hbS5rZWVwY3LigJwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg0Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHQutCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviDQv9GA0LXQtNC4INGA0LXQtNCwINC30LAg0L7RgtGA0Y/Qt9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2FtLmM6MjE4NiBidWlsdGluL2FtLmM6MjE4OSBidWlsdGluL2FtLmM6MjE5MiBidWlsdGluL2FtLmM6MjE5NQorIzogYnVpbHRpbi9hbS5jOjIxOTggYnVpbHRpbi9hbS5jOjIyMDEgYnVpbHRpbi9hbS5jOjIyMDQgYnVpbHRpbi9hbS5jOjIyMDcKKyM6IGJ1aWx0aW4vYW0uYzoyMjEzCittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAi0L/RgNC10LrQsNGA0LLQsNC90LUg0L/RgNC10Lcg4oCeZ2l0LWFwcGx54oCcIgorCisjOiBidWlsdGluL2FtLmM6MjIwMyBidWlsdGluL2NvbW1pdC5jOjEzODYgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzYgYnVpbHRpbi9ncmVwLmM6ODgzIGJ1aWx0aW4vbWVyZ2UuYzoyNDkKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2MCBidWlsdGluL3B1bGwuYzoyMTkgYnVpbHRpbi9yZWJhc2UuYzoxNDY5CisjOiBidWlsdGluL3JlcGFjay5jOjMxNSBidWlsdGluL3JlcGFjay5jOjMxOSBidWlsdGluL3JlcGFjay5jOjMyMQorIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MCBidWlsdGluL3Nob3ctcmVmLmM6MTcyIGJ1aWx0aW4vdGFnLmM6NDAzCisjOiBwYXJzZS1vcHRpb25zLmg6MTU0IHBhcnNlLW9wdGlvbnMuaDoxNzUgcGFyc2Utb3B0aW9ucy5oOjMxNgorbXNnaWQgIm4iCittc2dzdHIgItCR0KDQntCZIgorCisjOiBidWlsdGluL2FtLmM6MjIwOSBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgItCk0J7QoNCc0JDQoiIKKworIzogYnVpbHRpbi9hbS5jOjIyMTAKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgItGE0L7RgNC80LDRgiDQvdCwINC60YDRitC/0LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLQuNC30LHRgNCw0L3QviDQvtGCINCy0LDRgSDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQs9GA0LXRiNC60LAg0L/RgNC4INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICLQv9GA0L7QtNGK0LvQttCw0LLQsNC90LUg0L3QsCDQv9GA0LjQu9Cw0LPQsNC90LXRgtC+INC90LAg0LrRgNGK0L/QutC4INGB0LvQtdC0INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvNC4INC90LAg4oCeLS1jb250aW51ZeKAnCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINGC0LXQutGD0YnQsNGC0LAg0LrRgNGK0L/QutCwIgorCisjOiBidWlsdGluL2FtLmM6MjIyNworbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgIiIKKyLQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDRgdGK0YHRgtC+0Y/QvdC40LUg0L3QsCDQutC70L7QvdCwINC4INC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwICIKKyLQv9GA0LjQu9Cw0LPQsNC90LXRgtC+INC90LAg0LrRgNGK0L/QutCw0YLQsC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiIgorItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC/0YDQuNC70LDQs9Cw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LDRgtCwINCx0LXQtyDQv9GA0L7QvNGP0L3QsCDQutGK0Lwg0LrQvtC1INGB0L7Rh9C4IOKAnkhFQUTigJwuIgorCisjOiBidWlsdGluL2FtLmM6MjIzMworbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQuIgorbXNnc3RyICLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQv9GA0LjQu9Cw0LPQsNC90LDRgtCwINC60YDRitC/0LrQsC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM3Cittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICLQtNCw0YLQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUg0YDQsNC30LvQuNGH0L3QsCDQvtGCINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QsNGC0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM5Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INCy0YDQtdC80LUg0LrQsNGC0L4g0YLQvtCy0LAg0LfQsCDQsNCy0YLQvtGAIgorCisjOiBidWlsdGluL2FtLmM6MjI0MSBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUwNworIzogYnVpbHRpbi9tZXJnZS5jOjI4NiBidWlsdGluL3B1bGwuYzoxOTQgYnVpbHRpbi9yZWJhc2UuYzo1MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMyBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAi0JjQlNCV0J3QotCY0KTQmNCa0JDQotCe0KBf0J3QkF/QmtCb0K7QpyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDIgYnVpbHRpbi9yZWJhc2UuYzo1MTAgYnVpbHRpbi9yZWJhc2UuYzoxNTE0Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINGBIEdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDUKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKNC/0L7Qu9C30LLQsCDRgdC1INCy0YrRgtGA0LXRiNC90L4g0LfQsCDigJ5naXQtcmViYXNl4oCcKSIKKworIzogYnVpbHRpbi9hbS5jOjIyNjMKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyLQntC/0YbQuNC40YLQtSDigJ4tYuKAnC/igJ4tLWJpbmFyeeKAnCDQvtGC0LTQsNCy0L3QsCDQvdC1INC/0YDQsNCy0Y/RgiDQvdC40YnQviDQuFxuIgorItGJ0LUg0LHRitC00LDRgiDQv9GA0LXQvNCw0YXQvdCw0YLQuCDQsiDQsdGK0LTQtdGJ0LUuICDQndC1INCz0Lgg0L/QvtC70LfQstCw0LnRgtC1LiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30YfQuNGC0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorItC/0YDQtdC00LjRiNC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC30LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDigJ4lc+KAnCDQstGB0LUg0L7RidC1INGB0YrRidC10YHRgtCy0YPQstCwLCDQsCDQtSDQt9Cw0LTQsNC00LXQvSAiCisi0YTQsNC50Lsg4oCebWJveOKAnC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisi0J7RgtC60YDQuNGC0LAg0LUg0LjQt9C70LjRiNC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCeJXPigJwuXG4iCisi0JzQvtC20LXRgtC1INC00LAg0Y8g0LjQt9GC0YDQuNC10YLQtSDRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGFtIC0tYWJvcnTigJwuIgorCisjOiBidWlsdGluL2FtLmM6MjMxNQorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINC90LUg0YLQtdGH0LUg0L7Qv9C10YDQsNGG0LjRjyDQv9C+INC60L7RgNC40LPQuNGA0LDQvdC1INC4INC90Y/QvNCwINC60LDQuiDQtNCwINGB0LUg0L/RgNC+0LTRitC70LbQuC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QuNGP0YIg0YDQtdC20LjQvCDQuNC30LjRgdC60LLQsCDQutGA0YrQv9C60Lgg0L3QsCDQutC+0LzQsNC90LTQvdC40Y8g0YDQtdC0IgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBb0J7Qn9Cm0JjQr+KApl0gW9Ca0KDQqtCf0JrQkOKApl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgItCw0YDRhdC40LLQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICLQuNC30YXQvtC00YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10L3QsNGB0L7Rh9C10L0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INCb0LjQv9GB0LLQsCDQsNC00YDQtdGBINC30LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmU6INC+0YfQsNC60LLQsNGI0LUg0YHQtSDigJ5BQ0vigJwv4oCeTkFL4oCcLCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC9INC40LfRh9C40YHRgtCy0LDRiSDQv9Cw0LrQtdGCIOKAnmZsdXNo4oCcIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INC/0L7Qu9GD0YfQtdC9INC1IOKAnk5BQ0vigJwg4oCUICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INC/0YDQvtGC0L7QutC+0LvQvdCwINCz0YDQtdGI0LrQsCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjkKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INC+0YfQsNC60LLQsNGI0LUg0YHQtSDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCx0YPRhNC10YDQuNGC0LUg0YfRgNC10Lcg4oCeZmx1c2jigJwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyDQm9Ce0KjQniDQlNCe0JHQoNCeIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBb0J/QntCU0JDQktCQ0J3QlV0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNgorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSDQodCq0KHQotCe0K/QndCY0JUg0JLQldCg0KHQmNCvINCU0J7QkdCg0J4g0JvQntCo0J4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNworbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zINCa0J7QnNCQ0J3QlNCQINCU0J7QkdCg0J4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxnb29kX3Rlcm0+IDxiYWRfdGVybT4gWzx0ZXJtPl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrINCb0J7QqNCeINCU0J7QkdCg0J4g0KPQn9Cg0JDQktCb0K/QktCQ0KnQkF/QlNCj0JzQkCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8IC0tIgorInRlcm0tbmV3XSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8IC0tIgorInRlcm0tbmV3XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMwCittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH0iCisiPTx0ZXJtPl1bLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH0iCisiPTx0ZXJtPl1bLS1uby1jaGVja291dF0gW9Cb0J7QqNCeIFvQlNCe0JHQoNCe4oCmXV0gWy0tXSBb0J/QqtCi4oCmXSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C90LAg0YPQv9GA0LDQstC70Y/QstCw0YnQsCDQtNGD0LzQsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICclcycgYXMgYSB0ZXJtIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQstCz0YDQsNC00LXQvdCwINC60L7QvNCw0L3QtNCwINC4INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LrQsNGC0L4g0YPQv9GA0LDQstC70Y/QstCw0YnQsCDQtNGD0LzQsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHRlcm0gJyVzJyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LzQtdC90LjRgtC1INC30L3QsNGH0LXQvdC40LXRgtC+INC90LAg0YPQv9GA0LDQstC70Y/QstCw0YnQsNGC0LAg0LTRg9C80LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0LTQstC1INGA0LDQt9C70LjRh9C90Lgg0YPQv9GA0LDQstC70Y/QstCw0YnQuCDQtNGD0LzQuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAnkJJU0VDVF9URVJNU+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0LgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINC90LUg0YHQtSDQuNC30LLRitGA0YjQstCwINC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1LlxuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJXMnLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorItC/0YrRgNCy0L7QvdCw0YfQsNC70L3QviDRg9C60LDQt9Cw0L3QvtGC0L4g4oCeJXPigJwg0LIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1XG4iCisi0LjQt9GC0LXQs9C70LXQvdC+LiAg0J/RgNC+0LHQstCw0LnRgtC1INC00LAg0LjQt9C/0YrQu9C90LjRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgYmlzZWN0IHJlc2V0INCf0J7QlNCQ0JLQkNCd0JXigJwuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQsNGA0LPRg9C80LXQvdGCINC90LAg0YTRg9C90LrRhtC40Y/RgtCwIOKAnmJpc2VjdF93cml0ZeKAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZ2V0IHRoZSBvaWQgb2YgdGhlIHJldiAnJXMnIgorbXNnc3RyICLQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGK0YIg0L3QsCDQvtCx0LXQutGCINC90LAg0LLQtdGA0YHQuNGPIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJXMvJXMgYmlzZWN0IgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDQutC+0LzQsNC90LTQsDog0LIg0LzQvtC80LXQvdGC0LAg0YHQtSDQuNC30L/RitC70L3Rj9Cy0LAg0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUg0L/QviAlcy8lcy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisi0KLRgNGP0LHQstCwINC00LAg0LfQsNC00LDQtNC10YLQtSDQv9C+0L3QtSDQtdC00L3QsCDigJ4lc+KAnCDQuCDQtdC00L3QsCDigJ4lc+KAnCDQstC10YDRgdC40Y8uICAo0KLQvtCy0LAg0LzQvtC20LUg0LTQsCDRgdC1XG4iCisi0L3QsNC/0YDQsNCy0Lgg0YHRitC+0YLQstC10YLQvdC+INC4INGH0YDQtdC3INC60L7QvNCw0L3QtNC40YLQtSDigJ5naXQgYmlzZWN0ICVz4oCcINC4IOKAnmdpdCBiaXNlY3QgJXPigJwuKSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQv9C+0YfQvdC10YLQtSDQtNCy0L7QuNGH0L3QvtGC0L4g0YLRitGA0YHQtdC90LUg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBiaXNlY3Qgc3RhcnTigJwuXG4iCisi0KLRgNGP0LHQstCwINC00LAg0LfQsNC00LDQtNC10YLQtSDQv9C+0L3QtSDQtdC00L3QsCDigJ4lc+KAnCDQuCDQtdC00L3QsCDigJ4lc+KAnCDQstC10YDRgdC40Y8uICAo0KLQvtCy0LAg0LzQvtC20LUg0LTQsCDRgdC1XG4iCisi0L3QsNC/0YDQsNCy0Lgg0YHRitC+0YLQstC10YLQvdC+INC4INGH0YDQtdC3INC60L7QvNCw0L3QtNC40YLQtSDigJ5naXQgYmlzZWN0ICVz4oCcINC4IOKAnmdpdCBiaXNlY3QgJXPigJwuKSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNlY3Rpbmcgb25seSB3aXRoIGEgJXMgY29tbWl0IgorbXNnc3RyICLQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtSDRgdCw0LzQviDQv9C+IOKAniVz4oCcINC/0L7QtNCw0LLQsNC90LUuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzMwCittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgItCU0LAg0YHQtSDQv9GA0L7QtNGK0LvQttC4INC70Lg/IOKAnlnigJwg4oCUICDQlNCQLCDigJ5u4oCcIOKAlCDQvdC1IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc3Cittc2dpZCAibm8gdGVybXMgZGVmaW5lZCIKK21zZ3N0ciAi0L3QtSDRgdCwINGD0LrQsNC30LDQvdC4INGD0L/RgNCw0LLQu9GP0LLQsNGJ0Lgg0LTRg9C80LgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKyLQotC10LrRg9GJ0LjRgtC1INGD0L/RgNCw0LLQu9GP0LLQsNGJ0Lgg0LTRg9C80Lgg0YHQsDogJXMg0LfQsCDRgdGC0LDRgNC+0YLQviDRgdGK0YHRgtC+0Y/QvdC40LVcbiIKKyLQuCAlcyDQt9CwINC90L7QstC+0YLQviDRgdGK0YHRgtC+0Y/QvdC40LUuXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyLQvdCwIOKAnmdpdCBiaXNlY3QgdGVybXPigJwg0LUg0L/QvtC00LDQtNC10L0g0L3QtdC/0YDQsNCy0LjQu9C10L0g0LDRgNCz0YPQvNC10L3RgiDigJ4lc+KAnFxuIgorItCf0L7QtNC00YrRgNC20LDRgiDRgdC1INC+0L/RhtC40LjRgtC1IOKAni0tdGVybS1nb29k4oCcL+KAni0tdGVybS1vbGTigJwg0Lgg4oCeLS10ZXJtLWJhZOKAni/igJ4tLXRlcm0tbmV34oCcLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRjzogJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQuNC30LPQu9C10LbQtNCwINC60LDRgtC+INGD0LrQsNC30LDRgtC10Lsg0LrRitC8INCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUxMgorbXNnaWQgImJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0YPQutCw0LfQsNGC0LXQuyDigJ5IRUFE4oCcIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNraW5nIG91dCAnJXMnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHN0YXJ0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg4oCeJXPigJwuICDQmNC30L/RitC70L3QtdGC0LUg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBiaXNlY3Qgc3RhcnQgIgorItCh0KrQqdCV0KHQotCS0KPQktCQ0Klf0JrQm9Ce0J3igJwuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTQ4Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGC0YrRgNGB0Lgg0LTQstC+0LjRh9C90L4sINC60L7Qs9Cw0YLQviDQtSDQuNC30L/RitC70L3QtdC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmNnLXNlZWvigJwg0L7RgiAiCisi4oCeY29naXRv4oCcIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUxCittc2dpZCAiYmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0YPQutCw0LfQsNGC0LXQuyDigJ5IRUFE4oCcIOKAlCDQvdC10L7QsdC40YfQsNC10L0g0YHQuNC80LLQvtC70LXQvSDRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMQorbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgItC40LfQstGK0YDRiNCy0LDQvdC1INC90LAg4oCeZ2l0IGJpc2VjdCBuZXh04oCcIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDRg9C/0YDQsNCy0LvRj9Cy0LDRidC40YLQtSDQtNGD0LzQuCDQsiDigJ7igJwuZ2l0L0JJU0VDVF9URVJNU+KAnuKAnCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNQorbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAi0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0LTQstC+0LjRh9C90L7RgtC+INGC0YrRgNGB0LXQvdC1IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM3Cittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgItC/0YDQvtCy0LXRgNC60LAg0LfQsCDQvtGH0LDQutCy0LDQvdC40YLQtSDQstC10YDRgdC40LgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzkKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDQtNCy0L7QuNGH0L3QvtGC0L4g0YLRitGA0YHQtdC90LUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSBpbiBCSVNFQ1RfTE9HIgorbXNnc3RyICLQt9Cw0L/QuNGBINC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINC00LLQvtC40YfQvdC+0YLQviDRgtGK0YDRgdC10L3QtSDQsiDigJ5CSVNFQ1RfTE9H4oCcIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiIgorItC/0YDQvtCy0LXRgNC60LAg0Lgg0LfQsNC00LDQstCw0L3QtSDQvdCwINGD0L/RgNCw0LLQu9GP0LLQsNGJ0Lgg0LTRg9C80Lgg0LrRitC8INGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDQtNCy0L7QuNGH0L3QvtGC0L4g0YLRitGA0YHQtdC90LUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDUKK21zZ2lkICJjaGVjayB3aGV0aGVyIGJhZCBvciBnb29kIHRlcm1zIGV4aXN0IgorbXNnc3RyICLQv9GA0L7QstC10YDQutCwINC00LDQu9C4INGB0YrRidC10YHRgtCy0YPQstCw0YIg0L7QtNC+0LHRgNGP0LLQsNGJ0Lgv0L7RgtGF0LLRitGA0LvRj9GJ0Lgg0YPQv9GA0LDQstC70Y/QstCw0YnQuCDQtNGD0LzQuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRg9C/0YDQsNCy0LvRj9Cy0LDRidC40YLQtSDQtNGD0LzQuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAi0L3QsNGH0LDQu9C+INC90LAg0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTEKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICIiCisi0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeQklTRUNUX0hFQUTigJwg0LLQvNC10YHRgtC+INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MworbXNnaWQgIm5vIGxvZyBmb3IgQklTRUNUX1dSSVRFIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0LfQsNC/0LjRgSDQt9CwIOKAnkJJU0VDVF9XUklUReKAnCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MAorbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS13cml0ZS10ZXJtc+KAnCDQuNC30LjRgdC60LLQsCDRgtC+0YfQvdC+IDIg0LDRgNCz0YPQvNC10L3RgtCwIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njc0Cittc2dpZCAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgcmVxdWlyZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWJpc2VjdC1jbGVhbi1zdGF0ZeKAnCDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODEKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tYmlzZWN0LXJlc2V04oCcINC40LfQuNGB0LrQstCwINC40LvQuCAwINCw0YDQs9GD0LzQtdC90YLQuCwg0LjQu9C4IDEg4oCUINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODUKK21zZ2lkICItLWJpc2VjdC13cml0ZSByZXF1aXJlcyBlaXRoZXIgNCBvciA1IGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1iaXNlY3Qtd3JpdGXigJwg0LjQt9C40YHQutCy0LAgNCDQuNC70LggNSDQsNGA0LPRg9C80LXQvdGC0LAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTEKK21zZ2lkICItLWNoZWNrLWFuZC1zZXQtdGVybXMgcmVxdWlyZXMgMyBhcmd1bWVudHMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tY2hlY2stYW5kLXNldC10ZXJtc+KAnCDQuNC30LjRgdC60LLQsCAzINCw0YDQs9GD0LzQtdC90YLQsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5NworbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1iaXNlY3QtbmV4dC1jaGVja+KAnCDQuNC30LjRgdC60LLQsCAyINC40LvQuCAzINCw0YDQs9GD0LzQtdC90YLQsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMworbXNnaWQgIi0tYmlzZWN0LXRlcm1zIHJlcXVpcmVzIDAgb3IgMSBhcmd1bWVudCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1iaXNlY3QtdGVybXPigJwg0LjQt9C40YHQutCy0LAgMCDQuNC70LggMSDQsNGA0LPRg9C80LXQvdGC0LAiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFvQntCf0KbQmNCv4oCmXSBb0J7Qn9Cm0JjQr1/Ql9CQX9CS0JXQoNCh0JjQr9Ci0JDigKZdIFvQktCV0KDQodCY0K9dIFstLV0g0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICLQntCf0KbQmNCY0YLQtV/Ql9CQX9CS0JXQoNCh0JjQr9Ci0JAg0YHQsCDQtNC+0LrRg9C80LXQvdGC0LjRgNCw0L3QuCDQsiDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQviBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICLRgtGA0Y/QsdCy0LAg0LTQsCDQtSDRhtCy0Y/RgjogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgItGC0YDRj9Cx0LLQsCDQtNCwINC30LDQstGK0YDRiNCy0LAg0YEg0YbQstGP0YIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGG0LLRj9GCIOKAniVz4oCcINCyIOKAnmNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXPigJwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAnmJsYW1lLmNvbG9yaW5n4oCcIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIHJldmlzaW9uICVzIHRvIGlnbm9yZSIKK21zZ3N0ciAi0LLQtdGA0YHQuNGP0YLQsCDQt9CwINC/0YDQtdGB0LrQsNGH0LDQvdC1IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINCw0LLRgtC+0YDRgdGC0LLQvtGC0L4g0YEg0L3QsNC80LjRgNCw0L3QtdGC0L4g0LzRgywg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QviIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GA0LDQt9C90Lgg0YHRg9C80Lgg0L/QviBTSEExINC30LAg0LPRgNCw0L3QuNGH0L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCAiCisi0LUg0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorItCd0LDRh9Cw0LvQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8g0LTQsCDQvdC1INGB0LUg0YHRh9C40YLQsNGCINC30LAg0LPRgNCw0L3QuNGH0L3QuCAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0L7Qv9GG0LjRj9GC0LAg0LUgIgorItC40LfQutC70Y7Rh9C10L3QsCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDcKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDQt9CwINC40LfQstGK0YDRiNC10L3QuNGC0LUg0LTQtdC50YHRgtCy0LjRjyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi0J/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OQorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQtNC+0L/RitC70L3QuNGC0LXQu9C90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQvtC/0YDQtdC00LXQu9GP0L3QtdGC0L4g0L3QsCDQsNCy0YLQvtGA0YHRgtCy0L7RgtC+IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUwCittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90L7RgtC+INC40LzQtSDQvdCwINGE0LDQudC7ICjRgdGC0LDQvdC00LDRgNGC0L3QviDRgtC+0LLQsCDQtSDQsNCy0YLQvtC80LDRgtC40YfQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGP0YIg0L3QvtC80LXRgCDQvdCwINGA0LXQtCAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0L7Qv9GG0LjRj9GC0LAg0LUg0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQstGK0LIg0YTQvtGA0LzQsNGCINC30LAg0L/Qvi3QvdCw0YLQsNGC0YrRiNC90LAg0L7QsdGA0LDQsdC+0YLQutCwIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUzCittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisi0JjQt9Cy0LXQttC00LDQvdC1INCy0YrQsiDRhNC+0YDQvNCw0YIg0LfQsCDQutC+0LzQsNC90LTQuCDQvtGCINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC90LjQstC+INGBINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0LLRgdC10LrQuCAiCisi0YDQtdC0IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorItCY0LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YHRitGJ0LjRjyDRhNC+0YDQvNCw0YIg0LrQsNGC0L4g4oCeZ2l0LWFubm90YXRl4oCcICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCDQtSAiCisi0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QtdGE0L7RgNC80LDRgtC40YDQsNC90Lgg0LLRgNC10LzQtdC90LAgKNGB0YLQsNC90LTQsNGA0YLQvdC+INC+0L/RhtC40Y/RgtCwINC1INC40LfQutC70Y7Rh9C10L3QsCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YrQu9C90LjRgtC1INGB0YPQvNC4INC/0L4gU0hBMSAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0L7Qv9GG0LjRj9GC0LAg0LUg0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCR0LXQtyDQuNC80LUg0L3QsCDQsNCy0YLQvtGAINC4INCy0YDQtdC80LUg0L3QsCDQv9GA0L7QvNGP0L3QsCAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0L7Qv9GG0LjRj9GC0LAg0LUg0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC1LdC/0L7RidCw0YLQsCDQvdCwINCw0LLRgtC+0YDQsCwg0LAg0L3QtSDQuNC80LXRgtC+INC80YMgKNGB0YLQsNC90LTQsNGA0YLQvdC+INC+0L/RhtC40Y/RgtCwINC1ICIKKyLQuNC30LrQu9GO0YfQtdC90LApIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgItCR0LXQtyDRgNCw0LfQu9C40LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgItCS0JXQoNChIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwCittc2dpZCAiSWdub3JlIDxyZXY+IHdoZW4gYmxhbWluZyIKK21zZ3N0ciAi0J/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQktCV0KDQodC40Y/RgtCwINC/0YDQuCDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQsNCy0YLQvtGA0YHRgtCy0L7RgtC+IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYxCittc2dpZCAiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIKK21zZ3N0ciAi0J/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQstC10YDRgdC40LjRgtC1INGD0LrQsNC30LDQvdC4INCy0YrQsiDQpNCQ0JnQm9CwINC/0YDQuCDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQsNCy0YLQvtGA0YHRgtCy0L7RgtC+IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYyCittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAiIgorItC+0YbQstC10YLRj9Cy0LDQvdC1INC90LAg0L/QvtCy0YLQsNGA0Y/RidC40YLQtSDRgdC1INC80LXRgtCw0LTQsNC90L3QuCDQvtGCINC/0YDQtdC00LjRiNC90LjRjyDRgNC10LQg0LIg0YDQsNC30LvQuNGH0LXQvSDRhtCy0Y/RgiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAi0L7RhtCy0LXRgtGP0LLQsNC90LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1INC/0L4g0LLRitC30YDQsNGB0YIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjQKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgItCU0L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQuNC30YfQuNGB0LvQtdC90LjRjyDQt9CwINC/0L4t0LTQvtCx0YDQuCDRgNC10LfRg9C70YLQsNGC0LgiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjUKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgItCY0LfRh9C40YLQsNC90LUg0L3QsCDQstC10YDRgdC40LjRgtC1INC+0YIg0KTQkNCZ0JssINCwINC90LUg0YfRgNC10Lcg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5naXQtcmV2LWxpc3TigJwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINCk0JDQmdCb0LAg0LrQsNGC0L4g0LrRgNCw0LnQvdC+INC/0L7Qu9C+0LbQtdC90LjQtSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgItC90LDQv9Cw0YHQstCw0L3QtSDQvdCwINGA0LXQtNC+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICIiCisi0KLRitGA0YHQtdC90LUg0L3QsCDQutC+0L/QuNGA0LDQvdC4INGA0LXQtNC+0LLQtSDQutCw0LrRgtC+INCyINGA0LDQvNC60LjRgtC1INC90LAg0LXQtNC40L0g0YTQsNC50LssINGC0LDQutCwINC4INC+0YIg0LXQtNC40L0g0YTQsNC50LsgIgorItC60YrQvCDQtNGA0YPQsyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIiIKKyLQotGK0YDRgdC10L3QtSDQvdCwINC/0YDQtdC80LXRgdGC0LXQvdC4INGA0LXQtNC+0LLQtSDQutCw0LrRgtC+INCyINGA0LDQvNC60LjRgtC1INC90LAg0LXQtNC40L0g0YTQsNC50LssINGC0LDQutCwINC4INC+0YIg0LXQtNC40L0gIgorItGE0LDQudC7INC60YrQvCDQtNGA0YPQsyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIiIKKyLQmNC90YTQvtGA0LzQsNGG0LjRjyDRgdCw0LzQviDQt9CwINGA0LXQtNC+0LLQtdGC0LUg0LIg0LTQuNCw0L/QsNC30L7QvdCwINC+0YIgbiDQtNC+IG0g0LLQutC70Y7Rh9C40YLQtdC70L3Qvi4gINCR0YDQvtC10L3QtdGC0L4gIgorItC30LDQv9C+0YfQstCwINC+0YIgMSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjkyMQorbXNnaWQgIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLXByb2dyZXNz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4tLWluY3JlbWVudGFs4oCcINC4INGE0L7RgNC80LDMgNGC0LAg0L3QsCDQutC+0LzQsNC90LTQuNGC0LUgIgorItC+0YIg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0L3QuNCy0L4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTcyCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAi0L/RgNC10LTQuCA0INCz0L7QtNC40L3QuCDQuCAxMSDQvNC10YHQtdGG0LAiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICLQuNC80LAg0YHQsNC80L4gJTIkbHUg0YDQtdC0INCy0YrQsiDRhNCw0LnQu9CwIOKAniUxJHPigJwiCittc2dzdHJbMV0gItC40LzQsCDRgdCw0LzQviAlMiRsdSDRgNC10LTQsCDQstGK0LIg0YTQsNC50LvQsCDigJ4lMSRz4oCcIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgItCg0LXQtNC+0LLQtSDRgSDQsNCy0YLQvtGA0YHRgtCy0L4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggW9Ce0J/QptCY0K/igKZdIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBb0J7Qn9Cm0JjQr+KApl0gWy1sXSBbLWZdINCY0JzQlV/QndCQX9Ca0JvQntCdIFvQndCQ0KfQkNCb0J5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFvQntCf0KbQmNCv4oCmXSBbLXJdICgtZCB8IC1EKSDQmNCc0JVf0J3QkF/QmtCb0J7QneKApiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBb0J7Qn9Cm0JjQr+KApl0gKC1tIHwgLU0pIFvQodCi0JDQoF/QmtCb0J7QnV0g0J3QntCSX9Ca0JvQntCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFvQntCf0KbQmNCv4oCmXSAoLWMgfCAtQykgW9Ch0KLQkNCgX9Ca0JvQntCdXSDQndCe0JJf0JrQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFvQntCf0KbQmNCv4oCmXSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggW9Ce0J/QptCY0K/igKZdIFstciB8IC1hXSBbLS1mb3JtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQutC70L7QvdCwIOKAniVz4oCcLCDQutC+0LnRgtC+INC1INGB0LvRj9GCINC60YrQvCDigJ4lc+KAnCxcbiIKKyIgICAg0L3QviDQvtGJ0LUg0L3QtSDQtSDRgdC70Y/RgiDQutGK0Lwg0LLRitGA0YXQsCDigJ5IRUFE4oCcLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisi0L7RgtC60LDQt9Cy0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCwg0LrQvtC50YLQviDQvdC1INC1INGB0LvRj9GCINC60YrQvFxuIgorIiAgICDigJ4lc+KAnCwg0L3QviDQtSDRgdC70Y/RgiDQutGK0Lwg0LLRitGA0YXQsCDigJ5IRUFE4oCcLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICLQntCx0LXQutGC0YrRgi3Qv9C+0LTQsNCy0LDQvdC1INC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisi0JrQu9C+0L3RitGCIOKAniVz4oCcINC90LUg0LUg0YHQu9GP0YIg0L3QsNC/0YrQu9C90L4uICDQkNC60L4g0YHRgtC1INGB0LjQs9GD0YDQvdC4LCDRh9C1INC40YHQutCw0YLQtVxuIgorItC00LAg0LPQviDQuNC30YLRgNC40LXRgtC1LCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IGJyYW5jaCAtRCAlc+KAnC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg5Cittc2dpZCAiVXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y8g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tYeKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLWTigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICLQntCx0LXQutGC0YrRgi3Qv9C+0LTQsNCy0LDQvdC1LCDRgdC+0YfQtdC9INC+0YIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgYnJhbmNoICclcycgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtdGC0LUg0LTQsCDQuNC30YLRgNC40LXRgtC1INC60LvQvtC90LAg4oCeJXPigJwsINC60L7QudGC0L4g0LUg0LjQt9GC0LXQs9C70LXQvSDQsiDQv9GK0YLRjyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgItGB0LvQtdC00Y/RidC40Y/RgiDQutC70L7QvSDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi0LrQu9C+0L3RitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GC0YDQuNCy0LDQvdC10YLQviDQvdCwINGB0LvQtdC00Y/RidC40Y8g0LrQu9C+0L0g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L3QsCDQutC70L7QvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgItCY0LfRgtGA0LjRgiDRgdC70LXQtNGP0Ykg0LrQu9C+0L0g4oCeJXPigJwgKNGC0L7QuSDRgdC+0YfQtdGI0LUg0LrRitC8IOKAniVz4oCcKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgItCY0LfRgtGA0LjRgiDQutC70L7QvSDigJ4lc+KAnCAo0YLQvtC5INGB0L7Rh9C10YjQtSDQutGK0Lwg4oCeJXPigJwpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgItGE0L7RgNC80LDRgtC40YDQsNGJ0LjRj9GCINC90LjQtyDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L06ICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+LCDRgdC+0YfQtdC90L4g0L7RgiDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YPRgdGC0LDQvdC+0LLQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAoJXMpIHBvaW50cyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvIgorbXNnc3RyICLigJ5IRUFE4oCcICglcykg0YHQvtGH0Lgg0LjQt9Cy0YrQvSDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCecmVmcy9oZWFkc+KAnCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIHJlYmFzZWQgYXQgJXMiCittc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDRgdC1INC/0YDQtdCx0LDQt9C40YDQsCDQstGK0YDRhdGDIOKAniVz4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgItCi0YrRgNGB0Lgg0YHQtSDQtNCy0L7QuNGH0L3QviDQsiDQutC70L7QvdCwIOKAniVz4oCcINC/0YDQuCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgItC90LUg0LzQvtC20LXRgtC1INC00LAg0LrQvtC/0LjRgNCw0YLQtSDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSwg0LfQsNGJ0L7RgtC+INGB0YLQtSDQuNC30LLRitC9INC60L7QudGC0L4g0Lgg0LTQsCDQtSDQutC70L7QvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LXRgtC1INC00LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDRgtC1INGC0LXQutGD0YnQuNGPINC60LvQvtC9LCDQt9Cw0YnQvtGC0L4g0YHRgtC1INC40LfQstGK0L0g0LrQvtC50YLQviDQuCDQtNCwINC1INC60LvQvtC9IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQutC70L7QvTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQutC70L7QvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQutC+0L/QuNGA0LDQvdC1INC90LAg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciCittc2dzdHIgItCa0LvQvtC90YrRgiDRgSDQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg4oCeJXPigJwg0LUg0LrQvtC/0LjRgNCw0L0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICLQmtC70L7QvdGK0YIg0YEg0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1IOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgItCa0LvQvtC90YrRgiDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwsINC90L4g0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NgorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi0JrQu9C+0L3RitGCINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0sINC90L4g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y/RgiDRhNCw0LnQuyDQvdC1INC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2OAorbXNnaWQgIkJyYW5jaCBpcyBjb3BpZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLQmtC70L7QvdGK0YIg0LUg0LrQvtC/0LjRgNCw0L0sINC90L4g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y/RgiDRhNCw0LnQuyDQvdC1INC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisi0JLRitCy0LXQtNC10YLQtSDQvtC/0LjRgdCw0L3QuNC1INC90LAg0LrQu9C+0L3QsC5cbiIKKyIgICAgJXNcbiIKKyLQoNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC30LDQv9C+0YfQstCw0YIg0YEg4oCeJWPigJwsINGJ0LUg0LHRitC00LDRgiDQv9GA0L7Qv9GD0YHQvdCw0YLQuC5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgItCe0LHRidC4INC90LDRgdGC0YDQvtC50LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjAKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC60L7QvdGC0YDQvtC70L3QsNGC0LAg0YHRg9C80LAg0Lgg0YLQtdC80LDRgtCwLiAg0J/QvtCy0YLQsNGA0Y/QvdC10YLQviDQvdCwINC+0L/RhtC40Y/RgtCwINC/0YDQuNCx0LDQstGPICIKKyLQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjEKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICLQsdC10Lcg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90Lgg0YHRitC+0LHRidC10L3QuNGPIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0YDQtdC20LjQvNCwINC90LAg0YHQu9C10LTQtdC90LUgKNCy0LjQtiBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAi0LTQsCDQvdC1INGB0LUg0L/QvtC70LfQstCwIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUwNQorbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICLQutC70L7QvS3QuNC30YLQvtGH0L3QuNC6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAi0YHQvNGP0L3QsCDQvdCwINC60LvQvtC90LAt0LjQt9GC0L7Rh9C90LjQuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjcKK21zZ2lkICJ1bnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAi0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDQutC70L7QvS3QuNC30YLQvtGH0L3QuNC6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAi0YbQstC10YLQtdC9INC40LfRhdC+0LQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtSDQstGK0YDRhdGDINGB0LvQtdC00Y/RidC40YLQtSDQutC70L7QvdC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC60LvQvtC90LjRgtC1LCDQutC+0LjRgtC+INGB0YrQtNGK0YDQttCw0YIg0YLQvtCy0LAg0J/QntCU0JDQktCQ0J3QlSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQutC70L7QvdC40YLQtSwg0LrQvtC40YLQviDQvdC1INGB0YrQtNGK0YDQttCw0YIg0YLQvtCy0LAg0J/QntCU0JDQktCQ0J3QlSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICLQodC/0LXRhtC40LDQu9C90Lgg0LTQtdC50YHRgtCy0LjRjyDQvdCwIOKAnmdpdC1icmFuY2jigJw6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzOAorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0LrQsNC60YLQviDQvdCwINGB0LvQtdC00Y/RidC40YLQtSwg0YLQsNC60LAg0Lgg0L3QsCDQu9C+0LrQsNC70L3QuNGC0LUg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3QuCwg0LrQvtC40YLQviDRgdCwINC90LDQv9GK0LvQvdC+INGB0LvQtdGC0LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQxCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC4INC90LAg0LrQu9C+0L3QuCwg0LrQvtC40YLQviDQvdC1INGB0LAg0L3QsNC/0YrQu9C90L4g0YHQu9C10YLQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAiIgorItC/0YDQtdC80LXRgdGC0LLQsNC90LUv0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0LrQu9C+0L0g0Lgg0L/RgNC40L3QsNC00LvQtdC20LDRidC40Y/RgiDQvNGDINC20YPRgNC90LDQuyDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi0L/RgNC10LzQtdGB0YLQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQutC70L7QvSwg0LTQvtGA0Lgg0LDQutC+INC40LzQsCDQstC10YfQtSDQutC70L7QvSDRgSDRgtCw0LrQvtCy0LAg0LjQvNC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgItC60L7Qv9C40YDQsNC90LUg0L3QsCDQutC70L7QvSDQuCDQv9GA0LjQvdCw0LTQu9C10LbQsNGJ0LjRjyDQvNGDINC20YPRgNC90LDQuyDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLQutC+0L/QuNGA0LDQvdC1INC90LAg0LrQu9C+0L0sINC00L7RgNC4INCw0LrQviDQuNC80LAg0LLQtdGH0LUg0LrQu9C+0L0g0YEg0YLQsNC60L7QstCwINC40LzQtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDYKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDQutC70L7QvdC40YLQtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LzQtdGC0L4g0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LbRg9GA0L3QsNC70LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC90LAg0LrQu9C+0L3QsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTAKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAi0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINC+0L/QuNGB0LDQvdC40LXRgtC+INC90LAg0LrQu9C+0L3QsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0YHRitC30LTQsNCy0LDQvdC1LCDQv9GA0LXQvNC10YHRgtCy0LDQvdC1LCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUsINC40LfRgtGA0LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YHQu9C10YLQuNGC0LUg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC90LXRgdC70LXRgtC40YLQtSDQutC70L7QvdC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC/0L4g0LrQvtC70L7QvdC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyIGJ1aWx0aW4vbm90ZXMuYzo0MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTggYnVpbHRpbi9ub3Rlcy5jOjU4MSBidWlsdGluL25vdGVzLmM6NTg0CisjOiBidWlsdGluL3RhZy5jOjQzMworbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAi0J7QkdCV0JrQoiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTgKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC60LvQvtC90LjRgtC1INC90LAg0J7QkdCV0JrQotCQIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4IGJ1aWx0aW4vdGFnLmM6NDQwCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICLQv9C+0LTRgNC10LTQsdCw0YLQsCDQuCDRhNC40LvRgtGA0LjRgNCw0L3QtdGC0L4g0YLRgNC10YLQuNGA0LDRgiDQtdC00L3QsNC60LLQviDQvNCw0LvQutC40YLQtSDQuCDQs9C70LDQstC90LjRgtC1INCx0YPQutCy0LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAi0KTQntCg0JzQkNCiINC30LAg0LjQt9GF0L7QtNCwIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY4NCBidWlsdGluL2Nsb25lLmM6Nzg0Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgItCSINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ5yZWZzL2hlYWRz4oCcINC70LjQv9GB0LLQsCDRhNCw0LnQuyDigJ5IRUFE4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1jb2x1bW7igJwg0Lgg4oCeLS12ZXJib3Nl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICLQndC10L7QsdGF0L7QtNC40LzQviDQtSDQuNC80LUg0L3QsCDQutC70L7QvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0LfQsNC00LDQtNC10YLQtSDQvtC/0LjRgdCw0L3QuNC1INC90LAg0L3QtdGB0LLRitGA0LfQsNC9IOKAnkhFQUTigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU4Cittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1INC+0L/QuNGB0LDQvdC40LXRgtC+INC90LAg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC40L0g0LrQu9C+0L0g0LXQtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAi0JIg0LrQu9C+0L3QsCDigJ4lc+KAnCDQstGB0LUg0L7RidC1INC90Y/QvNCwINC/0L7QtNCw0LLQsNC90LjRjy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAi0JvQuNC/0YHQstCwINC60LvQvtC9INC90LAg0LjQvNC1IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODMKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LrQu9C+0L3QuCDQt9CwINC60L7Qv9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQuCDQutGK0Lwg0LrQvtC80LDQvdC00LDRgtCwINC30LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0Lgg0LrRitC8INC60L7QvNCw0L3QtNCw0YLQsCDQt9CwINGB0LvQtdC00LXQvdC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyLQodC70LXQtNC10L3QvtGC0L4g0L7RgiDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQtNCw0LTQtSDQtNCwINC1IOKAniVz4oCcLCDQt9Cw0YnQvtGC0L4g0YLQviDQvdC1INGB0L7Rh9C4INC60YrQvCAiCisi0L3QuNC60L7QuSDQutC70L7QvS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA0IGJ1aWx0aW4vYnJhbmNoLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgItCd0Y/QvNCwINC60LvQvtC9INC90LAg0LjQvNC1IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgItCd0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LrQu9C+0L0g0L3QsCDQuNC80LUg4oCeJXPigJwuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtC4INC60YrQvCDQutC+0LzQsNC90LTQsNGC0LAg0LfQsCDRgdC/0LjRgNCw0L3QtSDQvdCwINGB0LvQtdC00LXQvdC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyLQodC70LXQtNC10L3QvtGC0L4g0L7RgiDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQvNCw0YXQvdC1LCDQt9Cw0YnQvtGC0L4g0YLQviDQvdC1INGB0L7Rh9C4INC60YrQvCDQvdC40LrQvtC5INC60LvQvtC9LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICLQndGP0LzQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQutC70L7QvdGK0YIg4oCeJXPigJwg0LTQsCDRgdC70LXQtNC4INC90Y/QutC+0Lkg0LTRgNGD0LMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiIgorIlRoZSAtYSwgYW5kIC1yLCBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgdGFrZSBhIGJyYW5jaCBuYW1lLlxuIgorIkRpZCB5b3UgbWVhbiB0byB1c2U6IC1hfC1yIC0tbGlzdCA8cGF0dGVybj4/IgorbXNnc3RyICIiCisi0J7Qv9GG0LjQuNGC0LUg4oCeLWHigJwg0Lgg4oCeLXLigJwg0L3QsCDigJ5naXQgYnJhbmNo4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4INGBINC40LzQtSDQvdCwINC60LvQvtC9LlxuIgorItCf0YDQvtCx0LLQsNC50YLQtSDRgTog4oCeLWF8LXIgLS1saXN0INCo0JDQkdCb0J7QneKAnCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisi0J7Qv9GG0LjRj9GC0LAg4oCeLS1zZXQtdXBzdHJlYW3igJwg0LLQtdGH0LUg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAuICDQmNC30L/QvtC70LfQstCw0LnRgtC1IOKAni0tdHJhY2vigJwg0LjQu9C4IOKAni0tIgorInNldC11cHN0cmVhbS10b+KAnCIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNSBidWlsdGluL2J1bmRsZS5jOjIzCittc2dpZCAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iCittc2dzdHIgImdpdCBidW5kbGUgY3JlYXRlIFvQntCf0KbQmNCv4oCmXSDQpNCQ0JnQmyDQkNCg0JPQo9Cc0JXQndCiX9CX0JBfZ2l0X3Jldi1saXN04oCmIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBidW5kbGUgdmVyaWZ5IFvQntCf0KbQmNCv4oCmXSDQpNCQ0JnQm+KApiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNyBidWlsdGluL2J1bmRsZS5jOjMzCittc2dpZCAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzINCk0JDQmdCbIFvQmNCc0JVf0J3QkF/Qo9Ca0JDQl9CQ0KLQldCb4oCmXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOCBidWlsdGluL2J1bmRsZS5jOjM4Cittc2dpZCAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgdW5idW5kbGUg0KTQkNCZ0JsgW9CY0JzQlV/QndCQX9Cj0JrQkNCX0JDQotCV0JvigKZdIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIyOAorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QsNC/0YDQtdC00YrQutCwIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QsNC/0YDQtdC00YrQutCwINCy0YrQsiDRhNCw0LfQsNGC0LAg0L3QsCDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjczIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAiIgorItGB0YrRidC+0YLQviDQtNC10LnRgdGC0LLQuNC1INC60LDRgtC+INC+0L/RhtC40Y/RgtCwIOKAni0tYWxsLXByb2dyZXNz4oCcINC/0YDQuCDQuNC30LLQtdC20LTQsNC90LXRgtC+INC90LAg0L3QsNC/0YDQtdC00YrQutCwIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjkzCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAi0JfQsCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RgNCw0YLQutCwINC1INC90LXQvtCx0YXQvtC00LjQvNC+INGF0YDQsNC90LjQu9C40YnQtS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgItCx0LXQtyDQv9C+0LTRgNC+0LHQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L/RgNCw0YLQutC40YLQtSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICLQn9GA0LDRgtC60LDRgtCwIOKAniVz4oCcINC1INC90LDRgNC10LRcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjAKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgItCX0LAg0L/RgNC40LXQvNCw0L3QtdGC0L4g0L3QsCDQv9GA0LDRgtC60LAg0LUg0L3QtdC+0LHRhdC+0LTQuNC80L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjggYnVpbHRpbi9yZW1vdGUuYzoxNjA5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAi0L/QvtCy0LXRh9C1INC/0L7QtNGA0L7QsdC90L7RgdGC0LguICDQn9C+0YHRgtCw0LLRjyDRgdC1INC/0YDQtdC0INC/0L7QtNC60L7QvNCw0L3QtNCwIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE5MCBidWlsdGluL3JlbW90ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtCwINC/0L7QtNC60L7QvNCw0L3QtNCwOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCDQktCY0JQgfCAtLXRleHRjb252IC0tZmlsdGVycykgWy0tcGF0aD3Qn9Cq0KJdINCe0JHQldCa0KIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgItC80L7QttC1INC00LAg0YPQutCw0LbQtdGC0LUg0YHQsNC80L4g0LXQtNC90LAg0L/QsNC60LXRgtC90LAg0L7Qv9GG0LjRjyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiIgorItCS0JjQlNGK0YIg0LzQvtC20LUg0LTQsCDQtTog4oCeYmxvYuKAnCAoQkxPQiksIOKAnnRyZWXigJwgKNC00YrRgNCy0L4pLCDigJ5jb21taXTigJwgKNC/0L7QtNCw0LLQsNC90LUpLCAiCisi4oCedGFn4oCcICjQtdGC0LjQutC10YIpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM2Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLQuNC00LAg0L3QsCDQvtCx0LXQutGCIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQsNC30LzQtdGA0LAg0L3QsCDQvtCx0LXQutGCIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM5Cittc2dpZCAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIgorbXNnc3RyICLQuNC30YXQvtC0INGBIDAsINC60L7Qs9Cw0YLQviDQvdGP0LzQsCDQs9GA0LXRiNC60LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDAKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi0YTQvtGA0LzQsNGC0LjRgNCw0L3QviDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQvtCx0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiIgorItC00LAg0YHQtSDRgdGC0LDRgNGC0LjRgNCwINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LDQtNCw0LTQtdC90LAg0LIg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ50ZXh0Y29uduKAnCDQt9CwINC/0YDQtdC+0LHRgNCw0LfRg9Cy0LDQvdC1ICIKKyLQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINC+0LHQtdC60YLQsC1CTE9CIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiIgorItC00LAg0YHQtSDRgdGC0LDRgNGC0LjRgNCw0YIg0L/RgNC+0LPRgNCw0LzQuNGC0LUg0LfQsCDQv9GA0LXQvtCx0YDQsNC30YPQstCw0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINC+0LHQtdC60YLQuNGC0LUtQkxPQiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NSBnaXQtc3VibW9kdWxlLnNoOjk5MgorbXNnaWQgImJsb2IiCittc2dzdHIgItC+0LHQtdC60YItQkxPQiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NgorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLXRleHRjb2524oCcL+KAni0tZmlsdGVyc+KAnCDQuNC30LjRgdC60LLQsNGCINC/0YrRgiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OAorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC+0L/RhtC40LjRgtC1IOKAni1z4oCcINC4IOKAni104oCcINC00LAg0YDQsNCx0L7RgtGP0YIg0YEg0L/QvtCy0YDQtdC00LXQvdC4INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OQorbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAi0LHRg9GE0LXRgNC40YDQsNC90LUg0L3QsCDQuNC30YXQvtC00LAg0L7RgiDigJ4tLWJhdGNo4oCcIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjUxCittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0Lgg0YHRitC00YrRgNC20LDQvdC40LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC/0L7QtNCw0LTQtdC90Lgg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC+0LHQtdC60YLQuNGC0LUg0L/QvtC00LDQtNC10L3QuCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTkKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIiIKKyLRgdC70LXQtNCy0LDQvdC1INC90LAg0YHQuNC80LLQvtC70L3QuNGC0LUg0LLRgNGK0LfQutC4INGB0L7Rh9C10YnQuCDQsiDQtNGK0YDQstC+0YLQviAo0L/QvtC70LfQstCwINGB0LUg0YEg4oCeLS1iYXRjaOKAnCDQuNC70Lgg4oCeLS0iCisiYmF0Y2gtY2hlY2vigJwpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYxCittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLRgdC40YfQutC4INC+0LHQtdC60YLQuCDRgSDigJ4tLWJhdGNo4oCcINC40LvQuCDigJ4tLWJhdGNoLWNoZWNr4oCcIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICLQsdC10Lcg0L/QvtC00YDQtdC20LTQsNC90LUg0L3QsCDQuNC30YXQvtC00LAg0L7RgiDigJ4tLWJhdGNoLWFsbC1vYmplY3Rz4oCcIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwg0JDQotCg0JjQkdCj0KLigKZdIFstLV0g0J/QqtCi4oCmIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxNAorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8INCQ0KLQoNCY0JHQo9Ci4oCmXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQsNGC0YDQuNCx0YPRgtC4LCDQt9Cw0LTQsNC00LXQvdC4INCy0YrRgNGF0YMg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YTQsNC50LvQsCDigJ4uZ2l0YXR0cmlidXRlc+KAnCDRgdCw0LzQviDQvtGCINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjUgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNworbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLRgNCw0LfQtNC10LvRj9C90LUg0L3QsCDQstGF0L7QtNC90LjRgtC1INC4INC40LfRhdC+0LTQvdC40YLQtSDQt9Cw0L/QuNGB0Lgg0YEg0L3Rg9C70LXQstC40Y8g0LfQvdCw0Log4oCeTlVM4oCcIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM1IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDYKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgItCx0LXQtyDQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQvdCw0L/RgNC10LTRitC60LAiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjkKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QtdGB0YrQstC/0LDQtNCw0YnQuNGC0LUg0L/RitGC0LjRidCwIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMxCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAg0L/RgNC4INC/0YDQvtCy0LXRgNC60LDRgtCwIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MAorbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tc3RkaW7igJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC40LzQtdC90LAg0L3QsCDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYzCittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni164oCcINC40LfQuNGB0LrQstCwIOKAni0tc3RkaW7igJwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgItC90LUg0LUg0LfQsNC00LDQtNC10L0g0L/RitGCIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OQorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXF1aWV04oCcINC40LfQuNGB0LrQstCwINC00LAg0LUg0L/QvtC00LDQtNC10L0g0YLQvtGH0L3QviDQtdC00LjQvSDQv9GK0YIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcxCittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tcXVpZXTigJwg0Lgg4oCeLS12ZXJib3Nl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NAorbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tbm9uLW1hdGNoaW5n4oCcINC40LfQuNGB0LrQstCwIOKAni0tdmVyYm9zZeKAnCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgW9Ce0J/QptCY0K/igKZdINCa0J7QndCi0JDQmtCi4oCmIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLRh9C10YLQtdC90LUg0L3QsCDQutC+0L3RgtCw0LrRgtC4INC4INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICLQutC+0L3RgtCw0LrRgtGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC9OiAlcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDgKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgItC90LUg0YHQsCDRg9C60LDQt9Cw0L3QuCDQutC+0L3RgtCw0LrRgtC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBb0J7Qn9Cm0JjQr+KApl0gWy0tXSBb0KTQkNCZ0JvigKZdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgItC10YLQsNC/0YrRgiDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDigJ4x4oCcLCDigJ4y4oCcLCDigJ4z4oCcINC40LvQuCDigJ5hbGzigJwgKNCy0YHQuNGH0LrQuCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjQKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi0LjQt9GC0LXQs9C70Y/QvdC1INC90LAg0LLRgdC40YfQutC4INGE0LDQudC70L7QstC1INCyINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICLQv9GA0LXQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUsINC00L7RgNC4INC4INC00LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRgiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NworbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgItCx0LXQtyDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC/0YDQuCDQu9C40L/RgdCy0LDRidC4INGE0LDQudC70L7QstC1INC4INGE0LDQudC70L7QstC1INC90LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgItCx0LXQtyDQuNC30YLQtdCz0LvRj9C90LUg0L3QsCDQvdC+0LLQuCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICLQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzUKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwINC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAi0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INCy0YrQsiDQstGA0LXQvNC10L3QvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MgorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3OQorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAi0J3QmNCXIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAi0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQvdC+0LLQuCDRhNCw0LnQu9C+0LLQtSDQtNCwINGB0LUg0LTQvtCx0LDQstGPINC/0YDQtdGE0LjQutGB0LAg0J3QmNCXIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgItC60L7Qv9C40YDQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0L7RgiDRgtC+0LLQsCDRgdGK0YHRgtC+0Y/QvdC40LUg0L3QsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMxCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgW9Ce0J/QptCY0K/igKZdINCa0JvQntCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzIKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBb0J7Qn9Cm0JjQr+KApl0gW9Ca0JvQntCdXSAtLSDQpNCQ0JnQm+KApiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFvQntCf0KbQmNCv4oCmXSDQmtCb0J7QnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyCittc2dpZCAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCByZXN0b3JlIFvQntCf0KbQmNCv4oCmXSBbLS1zb3VyY2U90JrQm9Ce0J1dINCk0JDQmdCb4oCmIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgItCy0LDRiNCw0YLQsCDQstC10YDRgdC40Y8g0LvQuNC/0YHQstCwINCyINC/0YrRgtGPIOKAniVz4oCcIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi0YfRg9C20LTQsNGC0LAg0LLQtdGA0YHQuNGPINC70LjQv9GB0LLQsCDQsiDQv9GK0YLRjyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLQvdGP0LrQvtGPINC+0YIg0L3QtdC+0LHRhdC+0LTQuNC80LjRgtC1INCy0LXRgNGB0LjQuCDQu9C40L/RgdCy0LAg0LIg0L/RitGC0Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLQvdGP0LrQvtGPINC+0YIg0L3QtdC+0LHRhdC+0LTQuNC80LjRgtC1INCy0LXRgNGB0LjQuCDQu9C40L/RgdCy0LAg0LIg0L/RitGC0Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgItC/0YrRgtGP0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LvRj9C9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICLQoNC10LfRg9C70YLQsNGC0YrRgiDQt9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdC70Y/QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gItCf0YDQtdGB0YrQt9C00LDQtNC10L0g0LUgJWQg0LrQvtC90YTQu9C40LrRgiDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCittc2dzdHJbMV0gItCf0YDQtdGB0YrQt9C00LDQtNC10L3QuCDRgdCwICVkINC60L7QvdGE0LvQuNC60YLQsCDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAi0J7QsdC90L7QstC10L0g0LUgJWQg0L/RitGCINC+0YIg4oCeJXPigJwiCittc2dzdHJbMV0gItCe0LHQvdC+0LLQtdC90Lgg0YHQsCAlZCDQv9GK0YLRjyDQvtGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tIHRoZSBpbmRleCIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0clswXSAi0J7QsdC90L7QstC10L0g0LUgJWQg0L/RitGCINC+0YIg0LjQvdC00LXQutGB0LAiCittc2dzdHJbMV0gItCe0LHQvdC+0LLQtdC90Lgg0YHQsCAlZCDQv9GK0YLRjyDQvtGCINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDEyIGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTUgYnVpbHRpbi9jaGVja291dC5jOjQxOAorIzogYnVpbHRpbi9jaGVja291dC5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjUgYnVpbHRpbi9jaGVja291dC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIiIKKyLQndC10LLRitC30LzQvtC20L3QviDQtSDQtdC00L3QvtCy0YDQtdC80LXQvdC90L4g0LTQsCDQvtCx0L3QvtCy0Y/QstCw0YLQtSDQv9GK0YLQuNGJ0LAg0Lgg0LTQsCDQv9GA0LXQvNC40L3QtdGC0LUg0LrRitC8INC60LvQvtC90LAg4oCeJXPigJwuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIKK21zZ3N0ciAi0L3QtSDQtSDRg9C60LDQt9Cw0L3QviDQvdC40YLQviDigJ4lc+KAnCwg0L3QuNGC0L4g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC30LDQtNGK0LvQttC40YLQtdC70L3QsCwg0LrQvtCz0LDRgtC+IOKAniVz4oCcINC90LUg0LUg0LfQsNC00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NSBidWlsdGluL2NoZWNrb3V0LmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lMyRz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDQutCw0LrRgtC+INGBIOKAniUxJHPigJwsINGC0LDQutCwINC4INGBIOKAniUyJHPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgItC/0YrRgtGP0YIg4oCeJXPigJwg0L3QtSDQtSDRgdC70Y/RgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4MiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjEwMworbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLQv9GK0YDQstC+INGC0YDRj9Cx0LLQsCDQtNCwINC60L7RgNC40LPQuNGA0LDRgtC1INC40L3QtNC10LrRgdCwINGB0LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7QtNGK0LvQttC4INGBINC/0YDQvtC80LXQvdC4INCyINGB0LvQtdC00L3QuNGC0LUg0YTQsNC50LvQvtCy0LUsINC60L7QuNGC0L4g0YHQsCDQtNC+0LHQsNCy0LXQvdC4INCyICIKKyLQuNC90LTQtdC60YHQsDpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAi0JbRg9GA0L3QsNC70YrRgiDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0LfQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7RgdC70LXQtNC4OiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODc3Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LIg0LzQvtC80LXQvdGC0LAg0YHQvtGH0Lgg0LrRitC8IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgxIGJ1aWx0aW4vY2xvbmUuYzo3MTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCX0LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICLQktC10YfQtSDRgdGC0LUg0L3QsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLQn9GA0LXQvNC40L3QsNCy0LDQvdC1INC60YrQvCDQutC70L7QvdCwIOKAniVz4oCcINC4INC30LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQgYnVpbHRpbi9jaGVja291dC5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi0J/RgNC10LzQuNC90LDRhdGC0LUg0LrRitC8INC90L7QstC40Y8g0LrQu9C+0L0g4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLQn9GA0LXQvNC40L3QsNGF0YLQtSDQutGK0Lwg0LrQu9C+0L3QsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIuKApiDQuCDQvtGJ0LUgJWQuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQuNC30L7RgdGC0LDQstGP0YLQtSAlZCDQv9C+0LTQsNCy0LDQvdC1LCDQutC+0LXRgtC+INC90LUg0LUg0YHQstGK0YDQt9Cw0L3QviDQutGK0Lwg0L3QuNC60L7QuSDQutC70L7QvTpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0LjQt9C+0YHRgtCw0LLRj9GC0LUgJWQg0L/QvtC00LDQstCw0L3QuNGPLCDQutC+0LjRgtC+INC90LUg0YHQsCDRgdCy0YrRgNC30LDQvdC4INC60YrQvCDQvdC40LrQvtC5ICIKKyLQutC70L7QvTpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorItCQ0LrQviDQstGB0LUg0L/QsNC6INC40YHQutCw0YLQtSDQtNCwINC30LDQv9Cw0LfQuNGC0LUg0YLQsNC30Lgg0L/RgNC+0LzRj9C90LAg0YfRgNC10Lcg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LrQu9C+0L0sXG4iCisi0YHQtdCz0LAg0LUg0L3QsNC5LdC/0L7QtNGF0L7QtNGP0YnQuNGP0YIg0LfQsCDRgtC+0LLQsCDRh9GA0LXQtyDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2gg0JjQnNCVX9Cd0JBf0J3QntCS0JjQr1/QmtCb0J7QnSAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisi0JDQutC+INCy0YHQtSDQv9Cw0Log0LjRgdC60LDRgtC1INC00LAg0LfQsNC/0LDQt9C40YLQtSDRgtC10LfQuCDQv9GA0L7QvNC10L3QuCDRh9GA0LXQtyDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQutC70L7QvSxcbiIKKyLRgdC10LPQsCDQtSDQvdCw0Lkt0L/QvtC00YXQvtC00Y/RidC40Y/RgiDQt9CwINGC0L7QstCwINGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCDQmNCc0JVf0J3QkF/QndCe0JLQmNCvX9Ca0JvQntCdICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAi0LLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAg0L/RgNC4INC+0LHRhdC+0LbQtNCw0L3QtdGC0L4g0L3QsCDQstC10YDRgdC40LjRgtC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICLQn9GA0LXQtNC4INGC0L7QstCwIOKAnkhFQUTigJwg0YHQvtGH0LXRiNC1INC60YrQvCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTEgYnVpbHRpbi9jaGVja291dC5jOjEyODYKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgdGC0LUg0L3QsCDQutC70L7QvSwg0LrQvtC50YLQviDQstGB0LUg0L7RidC1INC90LUg0LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNzgKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgItC+0YfQsNC60LLQsCDRgdC1INGB0LDQvNC+INC10LTQuNC9INGD0LrQsNC30LDRgtC10LsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQtdC00LjQvSDRg9C60LDQt9Cw0YLQtdC7LCDQsCDRgdGC0LUg0L/QvtC00LDQu9C4ICVkLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY291bGQgYmUgYm90aCBhIGxvY2FsIGZpbGUgYW5kIGEgdHJhY2tpbmcgYnJhbmNoLlxuIgorIlBsZWFzZSB1c2UgLS0gKGFuZCBvcHRpb25hbGx5IC0tbm8tZ3Vlc3MpIHRvIGRpc2FtYmlndWF0ZSIKK21zZ3N0ciAiIgorIuKAniVz4oCcINC80L7QttC1INC00LAg0LUg0LrQsNC60YLQviDQu9C+0LrQsNC70LXQvSDRhNCw0LnQuywg0YLQsNC60LAg0Lgg0YHQu9C10LTRj9GJINC60LvQvtC9LiAg0JfQsCDRg9GC0L7Rh9C90Y/QstCw0L3QtVxuIgorItC/0L7Qu9C30LLQsNC50YLQtSDRgNCw0LfQtNC10LvQuNGC0LXQu9GPIOKAni0t4oCcICjQuCDQtdCy0LXQvdGC0YPQsNC70L3QviDQvtC/0YbQuNGP0YLQsCDigJ4tLW5vLWd1ZXNz4oCcKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDUgYnVpbHRpbi93b3JrdHJlZS5jOjI5MCBidWlsdGluL3dvcmt0cmVlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YPQutCw0LfQsNGC0LXQuzogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjU4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L7QsdC10LrRgi3QtNGK0YDQstC+OiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0LrQu9C+0L0sINCwINC90LUg0LXRgtC40LrQtdGCIOKAlCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgItC+0YfQsNC60LLQsCDRgdC1INC70L7QutCw0LvQtdC9LCDQsCDQvdC1INC+0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvSDigJQg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCwINGB0LUg0LrQu9C+0L0sINCwINC90LUg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgY29tbWl0ICclcyciCittc2dzdHIgItC+0YfQsNC60LLQsCDRgdC1INC60LvQvtC9LCDQsCDQvdC1INC/0L7QtNCw0LLQsNC90LUg4oCUIOKAniVz4oCcIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMyNworbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBtZXJnaW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi0L/QviDQstGA0LXQvNC1INC90LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdC80LjQvdC10YLQtSDQutGK0Lwg0LTRgNGD0LMg0LrQu9C+0L0uXG4iCisi0J/RgNC+0LHQstCw0LnRgtC1INGBIOKAnmdpdCBtZXJnZSAtLXF1aXTigJwg0LjQu9C4IOKAnmdpdCB3b3JrdHJlZSBhZGTigJwuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzMQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLQv9C+INCy0YDQtdC80LUg0L3QsCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0LrRgNGK0L/QutC4INC90LUg0LzQvtC20LUg0LTQsCDQv9GA0LXQvNC40L3QtdGC0LUg0LrRitC8INC00YDRg9CzICIKKyLQutC70L7QvS5cbiIKKyLQn9GA0L7QsdCy0LDQudGC0LUg0YEg4oCeZ2l0IGFtIC0tcXVpdOKAnCDQuNC70Lgg4oCeZ2l0IHdvcmt0cmVlIGFkZOKAnC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM1Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJlYmFzaW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmViYXNlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorItC/0L4g0LLRgNC10LzQtSDQvdCwINC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdC80LjQvdC10YLQtSDQutGK0Lwg0LTRgNGD0LMg0LrQu9C+0L0uXG4iCisi0J/RgNC+0LHQstCw0LnRgtC1INGBIOKAnmdpdCByZWJhc2UgLS1xdWl04oCcINC40LvQuCDigJ5naXQgd29ya3RyZWUgYWRk4oCcLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzkKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJDb25zaWRlciBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLQv9C+INCy0YDQtdC80LUg0L3QsCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGPINC90LUg0LzQvtC20LUg0LTQsCDQv9GA0LXQvNC40L3QtdGC0LUg0LrRitC8INC00YDRg9CzINC60LvQvtC9LlxuIgorItCf0YDQvtCx0LLQsNC50YLQtSDRgSDigJ5naXQgY2hlcnJ5LXBpY2sgLS1xdWl04oCcINC40LvQuCDigJ5naXQgd29ya3RyZWUgYWRk4oCcLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDMKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorItC/0L4g0LLRgNC10LzQtSDQvdCwINC+0YLQvNGP0L3QsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyDQvdC1INC80L7QttC1INC00LAg0L/RgNC10LzQuNC90LXRgtC1INC60YrQvCDQtNGA0YPQsyDQutC70L7QvS5cbiIKKyLQn9GA0L7QsdCy0LDQudGC0LUg0YEg4oCeZ2l0IHJldmVydCAtLXF1aXTigJwg0LjQu9C4IOKAnmdpdCB3b3JrdHJlZSBhZGTigJwuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0NworbXNnaWQgInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciCittc2dzdHIgItC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC00YDRg9CzINC60LvQvtC9INC/0L4g0LLRgNC10LzQtSDQvdCwINC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINC/0YrRgiDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80L4g0YEg0L/RgNC10LzQuNC90LDQstCw0L3QtdGC0L4g0L7RgiDQtdC00LjQvSDQutC70L7QvSDQutGK0Lwg0LTRgNGD0LMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQv9GA0LXQvNC40L3QsNCy0LDQvdC10YLQviDQvtGCINC10LTQuNC9INC60LvQvtC9INC60YrQvCDQtNGA0YPQsyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjkgYnVpbHRpbi9jaGVja291dC5jOjEzNzIgYnVpbHRpbi9jaGVja291dC5jOjEzNzUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IHRha2UgPHN0YXJ0LXBvaW50PiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGB0YrRgSDQt9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINCd0JDQp9CQ0JvQniIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIiIKKyLQl9CwINC00LAg0L/RgNC10LzQuNC90LXRgtC1INC60YrQvCDQutC70L7QvSwg0L/QvtC00LDQudGC0LUg0YPQutCw0LfQsNGC0LXQuywg0LrQvtC50YLQviDRgdC+0YfQuCDQutGK0Lwg0L/QvtC00LDQstCw0L3QtS4gIOKAniVz4oCcICIKKyLQvdC1INC1INGC0LDQutGK0LIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzk3Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICLQu9C40L/RgdCy0LAg0LDRgNCz0YPQvNC10L3RgiDigJQg0LrQu9C+0L0g0LjQu9C4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM5IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMyBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODUKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjEzOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0L/RgNC10LTRitC60LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQwCittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgItC40LfQstGK0YDRiNCy0LDQvdC1INC90LAg0YLRgNC+0LnQvdC+INGB0LvQuNCy0LDQvdC1INGBINC90L7QstC40Y8g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQxIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgItCh0KLQmNCbIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MgorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgItC00LXQudGB0YLQstC40LUg0L/RgNC4INC60L7QvdGE0LvQuNC60YIgKNGB0LvQuNCy0LDQvdC1INC40LvQuCDRgtGA0L7QudC90LAg0YDQsNC30LvQuNC60LApIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NCBidWlsdGluL3dvcmt0cmVlLmM6NTAzCittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICLQvtGC0LTQtdC70Y/QvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwg0LrRitC8INGD0LrQsNC30LDQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NQorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LrQvtC5INC60LvQvtC9INCx0LjQstCwINGB0LvQtdC00LXQvSDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC90L7QstC40Y8g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30YLQtdCz0LvRj9C90LUgKNCy0LDRiNC40YLQtSDQv9GA0L7QvNC10L3QuCDRidC1INCx0YrQtNCw0YIg0LfQsNC90YPQu9C10L3QuCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU5Cittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAi0J3QntCSX9Ca0JvQntCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1OQorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAi0L3QvtCyINC60LvQvtC9INCx0LXQtyDRgNC+0LTQuNGC0LXQuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjEgYnVpbHRpbi9tZXJnZS5jOjI4OAorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUgKNGB0YLQsNC90LTQsNGA0YLQvdC+KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjQKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgItCx0LXQtyDQv9GA0L7QstC10YDQutCwINC00LDQu9C4INC00YDRg9Cz0L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviDQtNGK0YDQttC4INGD0LrQsNC30LDRgtC10LvRjyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzcKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgItC40LfRgtC10LPQu9GP0L3QtSDQvdCwINCy0LDRiNCw0YLQsCDQstC10YDRgdC40Y8g0L3QsCDQvdC10YHQu9C10YLQuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgwCittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgItC40LfRgtC10LPQu9GP0L3QtSDQvdCwINGH0YPQttC00LDRgtCwINCy0LXRgNGB0LjRjyDQvdCwINC90LXRgdC70LXRgtC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODQKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgItCx0LXQtyDQvtCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0L3QsCDQuNC30LHRgNC+0LXQvdC40YLQtSDQv9GK0YLQuNGJ0LAg0YHQsNC80L4g0LTQviDRh9Cw0YHRgtC40YfQvdC+INC40LfRgtC10LPQu9C10L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTM3Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tYuKAnCwg4oCeLULigJwg0Lgg4oCeLS1vcnBoYW7igJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0LXQtNC90LAg0YEg0LTRgNGD0LPQsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NDAKK21zZ2lkICItcCBhbmQgLS1vdmVybGF5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni1w4oCcINC4IOKAni0tb3ZlcmxheeKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NzcKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tdHJhY2vigJwg0LjQt9C40YHQutCy0LAg0LjQvNC1INC90LAg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTgyCittc2dpZCAibWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0LjQvNC1INC90LAg0LrQu9C+0L0sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLWLigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzMQorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICLRg9C60LDQt9Cw0L0g0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/RitGCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCBhbmQgYSBicmFuY2ggJyVzJyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGl0IgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INC/0L7QtNCw0LLQsNC90LUsINC30LDRgtC+0LLQsCDQvtGCINC90LXQs9C+INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INC60LvQvtC9IOKAniVz4oCcIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dDog0L7Qv9GG0LjRj9GC0LAg4oCeLS1kZXRhY2jigJwg0L3QtSDQv9GA0LjQtdC80LAg0LDRgNCz0YPQvNC10L3Rgi3Qv9GK0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tcGF0aHNwZWMtZnJvbS1maWxl4oCcINC4IOKAni0tZGV0YWNo4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1NCBidWlsdGluL3Jlc2V0LmM6MzI0Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1wYXRoc3BlYy1mcm9tLWZpbGXigJwg0Lgg4oCeLS1wYXRjaOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjUKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6INC+0L/RhtC40LjRgtC1IOKAni0tb3Vyc+KAnC/igJ4tLXRoZWlyc+KAnCwg4oCeLS1mb3JjZeKAnCDQuCDigJ4tLW1lcmdl4oCcXG4iCisi0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0YEg0LjQt9GC0LXQs9C70Y/QvdC1INC+0YIg0LjQvdC00LXQutGB0LAuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY3MAorbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICLRgtGA0Y/QsdCy0LAg0LTQsCDRg9C60LDQttC10YLQtSDQv9C+0L3QtSDQtdC00LjQvSDQv9GK0YIg0LfQsCDQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJXZSBmb3VuZCAlZCByZW1vdGVzIHdpdGggYSByZWZlcmVuY2UgdGhhdCBtYXRjaGVkLiBTbyB3ZSBmZWxsIGJhY2tcbiIKKyJvbiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgYXJndW1lbnQgYXMgYSBwYXRoLCBidXQgZmFpbGVkIHRoZXJlIHRvbyFcbiIKKyJcbiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorIuKAniVz4oCcINGB0YrQstC/0LDQtNCwINGBINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC+0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvSDigJQg0L7RgtC60YDQuNGC0Lgg0YHQsCAlZCDQstGK0LfQvNC+0LbQvdC+0YHRgtC4LlxuIgorItCf0YDQvtCx0LDRgtCwINCw0YDQs9GD0LzQtdC90YLRitGCINC00LAg0YHQtSDRgtGK0LvQutGD0LLQsCDQutCw0YLQviDQv9GK0YIg0YHRitGJ0L4g0LHQtSDQvdC10YPRgdC/0LXRiNC90LAuXG4iCisiXG4iCisi0JDQutC+INC40YHQutCw0YLQtSDQtNCwINC40LfRgtC10LPQu9C40YLQtSDQutC70L7QvdCwINC+0YIg0LrQvtC90LrRgNC10YLQvdC+INGF0YDQsNC90LjQu9C40YnQtSwg0L3QsNC/0YAuIOKAnm9yaWdpbuKAnCxcbiIKKyLQuNC30YDQuNGH0L3QviDQs9C+INGD0LrQsNC20LXRgtC1INC60YrQvCDQvtC/0YbQuNGP0YLQsCDigJ4tLXRyYWNr4oCcOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4v0JjQnNCVX9Cd0JBf0JrQm9Ce0J1cbiIKKyJcbiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INCy0LjQvdCw0LPQuCDQtNCwINGB0LUg0L/RgNC10LTQv9C+0YfQuNGC0LAg0LrQvtC90LrRgNC10YLQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQv9GA0Lgg0L3QtdC10LTQvdC+0LfQvdCw0YfQvdC+XG4iCisi0JjQnNCVX9Cd0JBf0JrQm9Ce0J0sINC90LDQv9GALiDigJ5vcmlnaW7igJwsINC30LDQtNCw0LnRgtC1INGB0LvQtdC00L3QsNGC0LAg0L3QsNGB0YLRgNC+0LnQutCwINCyINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGPXG4iCisi0YTQsNC50Ls6XG4iCisiXG4iCisiICAgIGNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNCBidWlsdGluL2NoZWNrb3V0LmM6MTcxNiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NQorIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjcgYnVpbHRpbi9jbG9uZS5jOjEyMSBidWlsdGluL3JlbW90ZS5jOjE2OQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEgYnVpbHRpbi93b3JrdHJlZS5jOjQ5OSBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAiYnJhbmNoIgorbXNnc3RyICLQutC70L7QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTUKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC4INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC90L7QsiDQutC70L7QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUv0LfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQutC70L7QvSDQuCDQv9GA0LXQvNC40L3QsNCy0LDQvdC1INC60YrQvCDQvdC10LPQviIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQttGD0YDQvdCw0Lsg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC30LAg0L3QvtCyINC60LvQvtC9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMAorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorItC+0L/QuNGCINC30LAg0L7RgtCz0LDRgtCy0LDQvdC1INC90LAg0LjQvNC1INC90LAg0LrQu9C+0L0g0YHQu9C10LQg0L3QtdGD0YHQv9C10YjQtdC9INC+0L/QuNGCINGBIOKAnmdpdCBjaGVja291dCAiCisi0J3QldCh0KrQqdCV0KHQotCS0KPQktCQ0Klf0JrQm9Ce0J3igJwgKNGB0YLQsNC90LTQsNGA0YLQvdC+KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjEKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQv9GA0LjQv9C+0LrRgNC40LLQsNGJINGA0LXQttC40LwgKNGB0YLQsNC90LTQsNGA0YLQvdC+KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjYKK21zZ2lkICJjcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQuCDQv9GA0LXQvNC40L3QsNCy0LDQvdC1INC60YrQvCDQvdC+0LIg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY4Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtS/Qt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC60LvQvtC9INC4INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC90LXQs9C+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3MAorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IHN3aXRjaCA8bm8tc3VjaC1icmFuY2g+JyIKK21zZ3N0ciAiIgorItC+0L/QuNGCINC30LAg0L7RgtCz0LDRgtCy0LDQvdC1INC90LAg0LjQvNC1INC90LAg0LrQu9C+0L0g0YHQu9C10LQg0L3QtdGD0YHQv9C10YjQtdC9INC+0L/QuNGCINGBIOKAnmdpdCBzd2l0Y2ggIgorItCd0JXQodCq0KnQldCh0KLQktCj0JLQkNCpX9Ca0JvQntCd4oCcIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3MgorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAi0LfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA0Cittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAi0LrRitC8INC60L7QuSDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQtNGK0YDQstC+INC00LAg0YHQtSDQv9GA0LXQvNC40L3QtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDYKK21zZ2lkICJyZXN0b3JlIHRoZSBpbmRleCIKK21zZ3N0ciAi0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgwOAorbXNnaWQgInJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSAoZGVmYXVsdCkiCittc2dzdHIgItCy0YrQt9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMAorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLQv9GA0LXQvdC10LHRgNC10LPQstCw0L3QtSDQvdCwINC90LXRgdC70LXRgtC40YLQtSDQtdC70LXQvNC10L3RgtC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMQorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0L/RgNC40L/QvtC60YDQuNCy0LDRiSDRgNC10LbQuNC8IgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSDQqNCQ0JHQm9Ce0J1dIFsteCB8IC1YXSBbLS1dINCf0KrQouKApiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAi0KTQsNC50LvRitGCIOKAniVz4oCcINGJ0LUg0LHRitC00LUg0LjQt9GC0YDQuNGCXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgItCf0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgItCl0YDQsNC90LjQu9C40YnQtdGC0L4g4oCeJXPigJwg0YnQtSDQsdGK0LTQtSDQv9GA0LXRgdC60L7Rh9C10L3QvlxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbHN0YXQgJXNcbiIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnmxzdGF04oCcINC30LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyLQn9C+0LTRgdC60LDQt9C60LA6XG4iCisiMSAgICAgICAgICDigJQg0LjQt9Cx0L7RgCDQvdCwINC+0LHQtdC60YIg0YHQv9C+0YDQtdC0INGA0LXQtNCwXG4iCisi0J/QoNCV0KTQmNCa0KEgICAg4oCUINC40LfQsdC+0YAg0L3QsCDQtdC00LjQvdGB0YLQstC10L0g0L7QsdC10LrRgiDQv9C+INGC0L7Qt9C4INGD0L3QuNC60LDQu9C10L0g0L/RgNC10YTQuNC60YFcbiIKKyIgICAgICAgICAgIOKAlCAo0L/RgNCw0LfQvdC+KSDQvdC40YnQviDQtNCwINC90LUg0YHQtSDQuNC30LHQuNGA0LBcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmdcbiIKK21zZ3N0ciAiIgorItCf0L7QtNGB0LrQsNC30LrQsDpcbiIKKyIxICAgICAgICAgIOKAlCDQuNC30LHQvtGAINC90LAg0LXQtNC40L0g0L7QsdC10LrRglxuIgorIjMtNSAgICAgICAg4oCUINC00LjQsNC/0LDQt9C+0L0g0LfQsCDQuNC30LHQvtGAINC90LAg0L7QsdC10LrRgtC4XG4iCisiMi0zLDYtOSAgICDigJQg0LzQvdC+0LbQtdGB0YLQstC+INC00LjQsNC/0LDQt9C+0L3QuCDQt9CwINC40LfQsdC+0YAg0L3QsCDQvtCx0LXQutGC0LhcbiIKKyLQn9Cg0JXQpNCY0JrQoSAgICDigJQg0LjQt9Cx0L7RgCDQvdCwINC10LTQuNC90YHRgtCy0LXQvSDQvtCx0LXQutGCINC/0L4g0YLQvtC30Lgg0YPQvdC40LrQsNC70LXQvSDQv9GA0LXRhNC40LrRgVxuIgorIi3igKYgICAgICAgICDigJQg0L7RgtC80Y/QvdCwINC90LAg0LjQt9Cx0L7RgNCwINC90LAg0L7QsdC10LrRgtC4XG4iCisiKiAgICAgICAgICDigJQg0LjQt9Cx0LjRgNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQvtCx0LXQutGC0LhcbiIKKyIgICAgICAgICAgIOKAlCAo0L/RgNCw0LfQvdC+KSDQt9Cw0LLRitGA0YjQstCw0L3QtSDQvdCwINC40LfQsdC40YDQsNC90LXRgtC+XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LjQt9Cx0L7RgCAoJXMpLlxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAi0KjQsNCx0LvQvtC90Lgg0LfQsCDQuNCz0L3QvtGA0LjRgNCw0L3QuCDQtdC70LXQvNC10L3RgtC44omrICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0J3QuNC60L7QuSDQvtCx0LXQutGCINC90LUg0L3QsNC/0LDRgdCy0LAg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcyMQorbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgItCY0LfQsdC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg0LfQsCDQuNC30YLRgNC40LLQsNC90LUiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAi0JTQsCDRgdC1INC40LfRgtGA0LjQtSDQu9C4IOKAniVz4oCcPyDigJ554oCcIOKAlCAg0LTQsCwg4oCeTuKAnCDigJQg0J3QlSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjc5NQorbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisiY2xlYW4gICAgICAgICAgICAgICDigJQg0L3QsNGH0LDQu9C+INC90LAg0LjQt9GH0LjRgdGC0LLQsNC90LXRgtC+XG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICDigJQg0YjQsNCx0LvQvtC9INC30LAg0L7QsdC10LrRgtC4LCDQutC+0LjRgtC+INC00LAg0L3QtSDRgdC1INGC0YDQuNGP0YJcbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIOKAlCDQvdC+0LzQtdGA0LAg0L3QsCDQvtCx0LXQutGC0LgsINC60L7QuNGC0L4g0LTQsCDRgdC1INGC0YDQuNGP0YJcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIOKAlCDQv9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YHRj9C60L4g0LjQt9GC0YDQuNCy0LDQvdC1ICjQv9C+0LTQvtCx0L3QviDQvdCwIOKAnnJtIC1p4oCcKVxuIgorInF1aXQgICAgICAgICAgICAgICAg4oCUINC60YDQsNC5INC90LAg0LjQt9GH0LjRgdGC0LLQsNC90LXRgtC+XG4iCisiaGVscCAgICAgICAgICAgICAgICDigJQg0YLQvtC30Lgg0LrRgNCw0LlcbiIKKyI/ICAgICAgICAgICAgICAgICAgIOKAlCDQv9C+0LTRgdC60LDQt9C60LAg0LfQsCDRiNCw0LHQu9C+0L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzEKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICLQodC70LXQtNC90LjRj9GCINC+0LHQtdC60YIg0YnQtSDQsdGK0LTQtSDQuNC30YLRgNC40YI6IgorbXNnc3RyWzFdICLQodC70LXQtNC90LjRgtC1INC+0LHQtdC60YLQuCDRidC1INCx0YrQtNCw0YIg0LjQt9GC0YDQuNGC0Lg6IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgItCk0LDQudC70L7QstC10YLQtSDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INGB0LLRitGA0YjQuNGF0LAuICDQmNC30YXQvtC0INC+0YIg0L/RgNC+0LPRgNCw0LzQsNGC0LAuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA5Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSwg0LrQvtC40YLQviDRidC1INCx0YrQtNCw0YIg0LjQt9GC0YDQuNGC0LgiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfRgtGA0LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90L4g0LjQt9GC0YDQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE0Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDRhtC10LvQuCDQtNC40YDQtdC60YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNSBidWlsdGluL2Rlc2NyaWJlLmM6NTQ4IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTAKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMSBidWlsdGluL2xvZy5jOjE3NyBidWlsdGluL2xvZy5jOjE3OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NyBidWlsdGluL25hbWUtcmV2LmM6NDY0IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjYKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICLQqNCQ0JHQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTYKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINCo0JDQkdCb0J7QnSDQvtGCINGE0LDQudC70L7QstC1LCDQutC+0LjRgtC+INC00LAg0L3QtSDRgdC1INGC0YDQuNGP0YIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0Lgg0L3QsCDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTkKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0YHQsNC80L4g0L3QsCDQuNCz0L3QvtGA0LjRgNCw0L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzNworbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLXjigJwg0Lgg4oCeLVjigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNsZWFuLnJlcXVpcmVGb3JjZeKAnCDQtSDQt9Cw0LTQsNC00LXQvdCwINC60LDRgtC+INC40YHRgtC40L3QsCwg0LrQvtC10YLQviDQuNC30LjRgdC60LLQsCDQvdGP0LrQvtGPICIKKyLQvtGCINC+0L/RhtC40LjRgtC1IOKAni1p4oCcLCDigJ4tbuKAnCDQuNC70Lgg4oCeLWbigJwuICDQndGP0LzQsCDQtNCwINGB0LUg0LjQt9Cy0YrRgNGI0Lgg0LjQt9GH0LjRgdGC0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDQKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorItCd0LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeY2xlYW4ucmVxdWlyZUZvcmNl4oCcINC90LUg0LUg0LfQsNC00LDQtNC10L3QsCwg0L3QviDRgdGC0LDQvdC00LDRgNGC0L3QviDQtSDQuNGB0YLQuNC90LAsICIKKyLQutC+0LXRgtC+INC40LfQuNGB0LrQstCwINC90Y/QutC+0Y8g0L7RgiDQvtC/0YbQuNC40YLQtSDigJ4taeKAnCwg4oCeLW7igJwg0LjQu9C4IOKAni1m4oCcLiAg0J3Rj9C80LAg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4ICIKKyLQuNC30YfQuNGB0YLQstCw0L3QtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBb0J7Qn9Cm0JjQr+KApl0gWy0tXSDQpdCg0JDQndCY0JvQmNCp0JUgW9CU0JjQoNCV0JrQotCe0KDQmNCvXSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzCittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgItCx0LXQtyDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQgYnVpbHRpbi9jbG9uZS5jOjk2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OQorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LPQvtC70L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiIgorItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtS3QvtCz0LvQtdC00LDQu9C+ICjQstC60LvRjtGH0LLQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWJhcmXigJwg0LfQsCDQs9C+0LvQviDRhdGA0LDQvdC40LvQuNGJ0LUpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgItC60LvQvtC90LjRgNCw0L3QtSDQvtGCINC70L7QutCw0LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMgorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICLQsdC10Lcg0YLQstGK0YDQtNC4INCy0YDRitC30LrQuCwg0YTQsNC50LvQvtCy0LXRgtC1INCy0LjQvdCw0LPQuCDQtNCwINGB0LUg0LrQvtC/0LjRgNCw0YIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQstCw0L3QtSDQt9CwINGB0L/QvtC00LXQu9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAi0L/RitGCIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAi0LjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUg0L/RgNC4INGC0L7QstCwINC60LvQvtC90LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi0LHRgNC+0Lkg0L/QvtC00LzQvtC00YPQu9C4LCDQutC70L7QvdC40YDQsNC90Lgg0L/QsNGA0LDQu9C10LvQvdC+IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y8g0YEg0YjQsNCx0LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTIgYnVpbHRpbi9pbml0LWRiLmM6NDg3Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y8sINC60L7Rj9GC0L4g0YHRitC00YrRgNC20LAg0YjQsNCx0LvQvtC90LjRgtC1LCDQutC+0LjRgtC+INC00LAg0YHQtSDQv9C+0LvQt9Cy0LDRgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzkyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NQorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICLQtdGC0LDQu9C+0L3QvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODcKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXJlZmVyZW5jZeKAnCDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDRgdCw0LzQviDQv9GA0Lgg0LrQu9C+0L3QuNGA0LDQvdC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NCBidWlsdGluL3JlcGFjay5jOjMyNworbXNnaWQgIm5hbWUiCittc2dzdHIgItCY0JzQlSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgtC+0LLQsCDQmNCc0JUg0LLQvNC10YHRgtC+IOKAnm9yaWdpbuKAnCDQv9GA0Lgg0L/RgNC+0YHQu9C10LTRj9Cy0LDQvdC1INC90LAg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgItC40LfRgtC10LPQu9GP0L3QtSDQvdCwINGC0L7Qt9C4INCa0JvQntCdLCDQsCDQvdC1INGB0L7Rh9C10L3QuNGP0YIg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QuNGPINGD0LrQsNC30LDRgtC10Lsg4oCeSEVBROKAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgItC/0YrRgiDQutGK0Lwg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC11cGxvYWQtcGFja+KAnCDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4NDAKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyNworbXNnaWQgImRlcHRoIgorbXNnc3RyICLQlNCq0JvQkdCe0KfQmNCd0JAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgItC/0LvQuNGC0LrQviDQutC70L7QvdC40YDQsNC90LUg0LTQviDRgtCw0LfQuCDQlNCq0JvQkdCe0KfQmNCd0JAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjcgYnVpbHRpbi9mZXRjaC5jOjE3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODMKK21zZ2lkICJ0aW1lIgorbXNnc3RyICLQktCg0JXQnNCVIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgItC/0LvQuNGC0LrQviDQutC70L7QvdC40YDQsNC90LUg0LTQviDQvNC+0LzQtdC90YIg0LLRitCyINCy0YDQtdC80LXRgtC+IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5IGJ1aWx0aW4vZmV0Y2guYzoxNzIgYnVpbHRpbi9mZXRjaC5jOjE5NQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ1Cittc2dpZCAicmV2aXNpb24iCittc2dzdHIgItCS0JXQoNCh0JjQryIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAi0LfQsNC00YrQu9Cx0L7Rh9Cw0LLQsNC90LUg0L3QsCDQuNGB0YLQvtGA0LjRj9GC0LAg0L3QsCDQv9C70LjRgtC60L4g0YXRgNCw0L3QuNC70LjRidC1INC00L4g0LjQt9C60LvRjtGH0LLQsNGJINGD0LrQsNC30LDRgtC10LsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgIiIKKyLQutC70L7QvdC40YDQsNC90LUg0YHQsNC80L4g0L3QsCDQtdC00LjQvSDQutC70L7QvSDigJQg0LjQu9C4INGB0L7Rh9C10L3QuNGPINC+0YIg0L7RgtC00LDQu9C10YfQtdC90LjRjyDigJ5IRUFE4oCcLCDQuNC70Lgg0LjQt9GA0LjRh9C90L4gIgorItC30LDQtNCw0LTQtdC90LjRjyDRgSDigJ4tLWJyYW5jaOKAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAiIgorItCx0LXQtyDQutC70L7QvdC40YDQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuCwg0LrQsNGC0L4g0L/QvtGB0LvQtdC00LLQsNGJ0LjRgtC1INC00L7RgdGC0LDQstGP0L3QuNGPINC90Y/QvNCwINC00LAg0LPQuCDRgdC70LXQtNGP0YIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICLQstGB0LjRh9C60Lgg0LrQu9C+0L3QuNGA0LDQvdC4INC/0L7QtNC80L7QtNGD0LvQuCDRidC1INGB0LAg0L/Qu9C40YLQutC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAi0KHQm9Cj0JbQldCR0J3QkF/QlNCY0KDQldCa0KLQntCg0JjQryIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICLQvtGC0LTQtdC70L3QsCDQodCb0KPQltCV0JHQndCQX9CU0JjQoNCV0JrQotCe0KDQmNCvINC30LAgZ2l0INC40LfQstGK0L0g0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgItCa0JvQrtCnPdCh0KLQntCZ0J3QntCh0KIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LAg0L3QvtCy0L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjRh9C90Lgg0LfQsCDRgdGK0YDQstGK0YDQsCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAi0L7Qv9GG0LjRjyDQt9CwINC/0YDQtdC90L7RgSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjI0MAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgItGB0LDQvNC+INCw0LTRgNC10YHQuCBJUHY0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjQzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAi0YHQsNC80L4g0LDQtNGA0LXRgdC4IElQdjYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCB1c2UgdGhlaXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi0LLRgdC40YfQutC4INC60LvQvtC90LjRgNCw0L3QuCDQv9C+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+0L3QuNGA0LDRgtC1LFxuIgorItC4INC60L7QudGC0L4g0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0LjQt9GC0LXQs9C70LXQvSwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUyCittc2dpZCAiZmFpbGVkIHRvIGluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLRh9Cw0YHRgtC40YfQvdC+0YLQviDQuNC30YLQtdCz0LvRj9C90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQvdC40YbQuNCw0LvQuNC30LjRgNCwIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzc1Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0YHQvtGH0Lgg0LrRitC8INC90LXRidC+LFxuIgorItC60L7QtdGC0L4g0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4gINCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfRgtC10LPQu9C4INC+0L/RgNC10LTQtdC70LXQvSDQutC70L7QvS5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgItGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LTQs9C+0YLQstC10L3QviIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg1NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LfQsNC/0LjRgdCw0L3QuCDQsiDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRjyDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxOQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INC/0LDQutC10YLQuNGA0LDQvdC1INC30LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjEKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgItCy0YDQtdC80LXQvdC90LjRj9GCINGE0LDQudC7INC30LAg0LDQu9GC0LXRgNC90LDRgtC40LLQvdC4INC+0LHQtdC60YLQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU5IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk0OAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgItCf0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQuC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjMKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgItCi0YDRj9Cx0LLQsCDQtNCwINGD0LrQsNC20LXRgtC1INC60L7QtSDRhdGA0LDQvdC40LvQuNGJ0LUg0LjRgdC60LDRgtC1INC00LAg0LrQu9C+0L3QuNGA0LDRgtC1LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tYmFyZeKAnCDQuCDigJ4tLW9yaWdpbiAlc+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzkKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1iYXJl4oCcINC4IOKAni0tc2VwYXJhdGUtZ2l0LWRpcuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQvdC1INGB0YrRidC10YHRgtCy0YPQstCwINGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5OCBidWlsdGluL2ZldGNoLmM6MTc4NworIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgItC00YrQu9Cx0L7Rh9C40L3QsNGC0LAg0YLRgNGP0LHQstCwINC00LAg0LUg0L/QvtC70L7QttC40YLQtdC70L3QviDRhtGP0LvQviDRh9C40YHQu9C+LCDQsCDQvdC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICLRhtC10LvQtdCy0LjRj9GCINC/0YrRgiDigJ4lc+KAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCDQuCDQvdC1INC1INC/0YDQsNC30L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0LIg4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQvi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDMzIGJ1aWx0aW4vY2xvbmUuYzoxMDU0IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6MzAyIGJ1aWx0aW4vd29ya3RyZWUuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgItGA0L7QtNC40YLQtdC70YHQutC40YLQtSDQtNC40YDQtdC60YLQvtGA0LjQuCDQvdCwIOKAniVz4oCcINC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0YHRitC30LTQsNC00LXQvdC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAi0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3Qvi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0Lgg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LPQvtC70L4g0YXRgNCw0L3QuNC70LjRidC1INCyIOKAniVz4oCc4oCmXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSDQuCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LUg0LIg4oCeJXPigJzigKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwODQKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiIgorItCe0L/RhtC40Y/RgtCwIOKAni0tcmVjdXJzaXZl4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQvtC/0YbQuNC40YLQtSDigJ4tLXJlZmVyZW5jZeKAnCDQuCDigJ4tLXJlZmVyZW5jZS0iCisiaWYtYWJsZeKAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNDgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorItCf0YDQuCDQu9C+0LrQsNC70L3QviDQutC70L7QvdC40YDQsNC90LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1kZXB0aOKAnCDRgdC1INC/0YDQtdGB0LrQsNGH0LAuICDQn9C+0LvQt9Cy0LDQudGC0LUg0YHRhdC10LzQsNGC0LAgIgorIuKAnmZpbGU6Ly/igJwuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MAorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyLQn9GA0Lgg0LvQvtC60LDQu9C90L4g0LrQu9C+0L3QuNGA0LDQvdC1INC+0L/RhtC40Y/RgtCwIOKAni0tc2hhbGxvdy1zaW5jZeKAnCDRgdC1INC/0YDQtdGB0LrQsNGH0LAuICDQn9C+0LvQt9Cy0LDQudGC0LUgIgorItGB0YXQtdC80LDRgtCwIOKAnmZpbGU6Ly/igJwuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MgorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorItCf0YDQuCDQu9C+0LrQsNC70L3QviDQutC70L7QvdC40YDQsNC90LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaGFsbG93LWV4Y2x1ZGXigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwLiAg0J/QvtC70LfQstCw0LnRgtC1ICIKKyLRgdGF0LXQvNCw0YLQsCDigJ5maWxlOi8v4oCcLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyLQn9GA0Lgg0LvQvtC60LDQu9C90L4g0LrQu9C+0L3QuNGA0LDQvdC1INC+0L/RhtC40Y/RgtCwIOKAni0tZmlsdGVy4oCcINGB0LUg0L/RgNC10YHQutCw0YfQsC4gINCf0L7Qu9C30LLQsNC50YLQtSDRgdGF0LXQvNCw0YLQsCAiCisi4oCeZmlsZTovL+KAnC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU3Cittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAi0LrQu9C+0L3QuNGA0LDQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0LUg0L/Qu9C40YLQutC+LCDQt9Cw0YLQvtCy0LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1sb2NhbOKAnCDRgdC1INC/0YDQtdGB0LrQsNGH0LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYyCittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWxvY2Fs4oCcINGB0LUg0L/RgNC10YHQutCw0YfQsCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMzcgYnVpbHRpbi9jbG9uZS5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgItCe0YLQtNCw0LvQtdGH0LXQvdC40Y/RgiDQutC70L7QvSDigJ4lc+KAnCDQu9C40L/RgdCy0LAg0LIg0LrQu9C+0L3QuNGA0LDQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQ4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi0JjQt9Cz0LvQtdC20LTQsCDQutC70L7QvdC40YDQsNGF0YLQtSDQv9GA0LDQt9C90L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoxMAorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI4IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICLQutCw0Log0LTQsCDRgdC1INC/0L7QtNGA0LXQtNC4INGA0LXQt9GD0LvRgtCw0YLQsCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQvdCwINGI0LjRgNC+0YfQuNC90LAiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICLQn9C+0LvQtSDQsiDQt9C90LDRhtC4INC+0YLQu9GP0LLQviIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLQn9C+0LvQtSDQsiDQt9C90LDRhtC4INC+0YLQtNGP0YHQvdC+IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgItCf0L7Qu9C1INCyINC30L3QsNGG0Lgg0LzQtdC20LTRgyDQutC+0LvQvtC90LjRgtC1IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWNvbW1hbmTigJwg0YLRgNGP0LHQstCwINC00LAg0LUg0L/RitGA0LLQuNGP0YIg0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE4Cittc2dpZCAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dIFsoLUYgIgorIjxmaWxlPikuLi5dIDx0cmVlPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wINCg0J7QlNCY0KLQldCbKeKApl0gWy1TW9CY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgXV0gWygtbSDQodCq0J7QkdCp0JXQndCY0JUp4oCmXSBbKC1GICIKKyLQpNCQ0JnQmynigKZdINCU0KrQoNCS0J4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcGFyZW50ICVzIGlnbm9yZWQiCittc2dzdHIgItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L/QvtCy0YLQsNGA0Y/RiSDRgdC1INGA0L7QtNC40YLQtdC7OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjU2IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzYgYnVpbHRpbi9sb2cuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YI6IOKAniVz4oCcIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTog4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNGC0LLQvtGA0LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTEKK21zZ2lkICJwYXJlbnQiCittc2dzdHIgItGA0L7QtNC40YLQtdC7IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTEyCittc2dpZCAiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi0JjQlNCV0J3QotCY0KTQmNCa0JDQotCe0KAg0L3QsCDQvtCx0LXQutGC0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC10YLQvi3RgNC+0LTQuNGC0LXQuyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNCBidWlsdGluL2NvbW1pdC5jOjE0OTYgYnVpbHRpbi9tZXJnZS5jOjI3MAorIzogYnVpbHRpbi9ub3Rlcy5jOjQwOSBidWlsdGluL25vdGVzLmM6NTc1IGJ1aWx0aW4vc3Rhc2guYzoxNDY5CisjOiBidWlsdGluL3RhZy5jOjQxMgorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgItCh0KrQntCR0KnQldCd0JjQlSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNSBidWlsdGluL2NvbW1pdC5jOjE0OTYKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0KHQqtCe0JHQqdCV0J3QmNCVINC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE4Cittc2dpZCAicmVhZCBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L7RgiDQpNCQ0JnQmyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMSBidWlsdGluL2NvbW1pdC5jOjE1MDggYnVpbHRpbi9tZXJnZS5jOjI4NworIzogYnVpbHRpbi9wdWxsLmM6MTk1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE4Cittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICLQv9C+0LTQv9C40YHQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INGBIEdQRyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzMworbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICLRgtGA0Y/QsdCy0LAg0LTQsCDQtSDRgtC+0YfQvdC+INC10LTQvdC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgW9Ce0J/QptCY0K/igKZdIFstLV0g0J/QqtCi4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgW9Ce0J/QptCY0K/igKZdIFstLV0g0J/QqtCi4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisi0J/QvtC40YHQutCw0YXRgtC1INC00LAg0L/QvtC/0YDQsNCy0LjRgtC1INC/0L7RgdC70LXQtNC90L7RgtC+INGB0Lgg0L/QvtC00LDQstCw0L3QtS4gINCi0L7QstCwINC00LXQudGB0YLQstC40LUg0YnQtSDQv9GA0LXQstGK0YDQvdC1XG4iCisi0L/QvtC00LDQstCw0L3QtdGC0L4g0LIg0L/RgNCw0LfQvdC+LiAg0JzQvtC20LXRgtC1INC40LvQuCDQtNCwINCz0L4g0L/QvtCy0YLQvtGA0LjRgtC1INC60LDRgtC+INGA0LDQt9GA0LXRiNC40YLQtSDRgtCw0LrQuNCy0LAgIgorItC/0L7QtNCw0LLQsNC90LjRj1xuIgorItGBINC+0L/RhtC40Y/RgtCwIOKAni0tYWxsb3ctZW1wdHnigJwsINC40LvQuCDQtNCwINCz0L4g0LjQt9GC0YDQuNC10YLQtSDQvtGCINC40YHRgtC+0YDQuNGP0YLQsCDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisi4oCeZ2l0IHJlc2V0IEhFQURe4oCcLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU2Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgIiIKKyLQn9GA0LXQtNC40YjQvdC+0YLQviDQvtGC0LHRgNCw0L3QviDQv9C+0LTQsNCy0LDQvdC1INCy0LXRh9C1INC1INC/0YDQsNC30L3Qviwg0LrQsNGC0L4g0L3QsNC5LdCy0LXRgNC+0Y/RgtC90LDRgtCwINC/0YDQuNGH0LjQvdCwINC1XG4iCisi0LrQvtGA0LXQutGG0LjRjyDQvdCwINC60L7QvdGE0LvQuNC60YIuICDQkNC60L4g0LLRgdC1INC/0LDQuiDQuNGB0LrQsNGC0LUg0LTQsCDQs9C+INC/0L7Qu9C30LLQsNGC0LUsINC40LfQv9C+0LvQt9Cy0LDQudGC0LUgIgorItC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjMKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCittc2dzdHIgIiIKKyLQkiDQv9GA0L7RgtC40LLQtdC9INGB0LvRg9GH0LDQuSDQuNC30L/QvtC70LfQstCw0LnRgtC1INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2Cittc2dpZCAiIgorImFuZCB0aGVuIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyJ0byByZXN1bWUgY2hlcnJ5LXBpY2tpbmcgdGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorbXNnc3RyICIiCisi0YHQu9C10LQg0YLQvtCy0LAg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorItC4INGJ0LUg0L/RgNC+0LTRitC70LbQuNGC0LUg0LTQsCDQvtGC0LHQuNGA0LDRgtC1INC+0YHRgtCw0L3QsNC70LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjy5cbiIKKyLQl9CwINC00LAg0L/RgNC10YHQutC+0YfQuNGC0LUg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICLQstGK0YDRhdC+0LLQvtGC0L4g0LTRitGA0LLQviAoSEVBRCB0cmVlIG9iamVjdCkg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfQstCw0LTQtdC90L4g0L7RgiDQv9Cw0LrQtdGCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLWHigJwg0Lgg4oCeLS1wYXRoc3BlYy1mcm9tLWZpbGXigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWluY2x1ZGXigJwg0Lgg4oCeLS1vbmx54oCcINC40LfQuNGB0LrQstCw0YIg0LDRgNCz0YPQvNC10L3RgtC4LiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4MgorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC90YLQtdGA0LDQutGC0LjQstC90L4g0LTQvtCx0LDQstGP0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAi0JTRitGA0LLQvtGC0L4g0L3QsCDQvtGB0L3QvtCy0L3QuNGPINC60LXRiCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L3QviIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjMgYnVpbHRpbi9jb21taXQuYzo0NDYgYnVpbHRpbi9jb21taXQuYzo0OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgItC90L7QstC40Y/RgiDQuNC90LTQtdC60YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAi0L/QviDQstGA0LXQvNC1INC90LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cy0YrRgNGI0Lgg0YfQsNGB0YLQuNGH0L3QviDQv9C+0LTQsNCy0LDQvdC1LiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzcKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgItC/0L4g0LLRgNC10LzQtSDQvdCwINC+0YLQsdC40YDQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cy0YrRgNGI0Lgg0YfQsNGB0YLQuNGH0L3QviDQv9C+0LTQsNCy0LDQvdC1LiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICLQstGA0LXQvNC10L3QvdC40Y/RgiDQuNC90LTQtdC60YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQt9CwINCw0LLRgtC+0YAg0LIg0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0LvQuNC/0YHQstCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQt9CwINCw0LLRgtC+0YAg0LIg0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C90LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIzCittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/QsNGA0LDQvNC10YLRitGAINC60YrQvCDQvtC/0YbQuNGP0YLQsCDigJ4tLWF1dGhvcuKAnCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NzYKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQsdC10YDQtSDQt9C90LDQuiDQt9CwINC60L7QvNC10L3RgtCw0YAg4oCUINCyINGC0LXQutGD0YnQvtGC0L4g0YHRitC+0LHRidC10L3QuNC1INC30LAg0L/QvtC00LDQstCw0L3QtSDRgdCwICIKKyLQuNC30L/QvtC70LfQstCw0L3QuCDQstGB0LjRh9C60Lgg0L/QvtC00L7QsdC90Lgg0LfQvdCw0YbQuCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTQgYnVpbHRpbi9jb21taXQuYzo3NDcgYnVpbHRpbi9jb21taXQuYzoxMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICLRgdC70LXQtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtC+OiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjYgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIo0LjQt9GH0LjRgtCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtClcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDQsdC1INC/0YDQvtGH0LXRgtC10L3QviDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YHRitGBINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc2MyBidWlsdGluL2NvbW1pdC5jOjc3OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgItGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQstC60LDRgNCy0LDQvdC1IFNRVUFTSF9NU0cg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QviIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgItGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDRgdC70LjQstCw0L3QtSBNRVJHRV9NU0cg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QviIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MzAKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICLRiNCw0LHQu9C+0L3RitGCINC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCY0LfQs9C70LXQttC00LAsINGH0LUg0L/QvtC00LDQstCw0YLQtSDRgdC70LjQstCw0L3QtS4gINCQ0LrQviDRgtC+0LLQsCDQvdC1INC1INGC0LDQutCwLCDQuNC30YLRgNC40LnRgtC1INGE0LDQudC70LA6XG4iCisiXG4iCisiICAgICVzXG4iCisi0Lgg0L7Qv9C40YLQsNC50YLQtSDQvtGC0L3QvtCy0L4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCY0LfQs9C70LXQttC00LAsINGH0LUg0LjQt9Cy0YrRgNGI0LLQsNGC0LUg0L7RgtCx0YDQsNC90L4g0L/QvtC00LDQstCw0L3QtS4gINCQ0LrQviDRgtC+0LLQsCDQvdC1INC1INGC0LDQutCwLCDQuNC30YLRgNC40LnRgtC1ICIKKyLRhNCw0LnQu9CwOlxuIgorIlxuIgorIiAgICAlc1xuIgorItC4INC+0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisi0JLRitCy0LXQtNC10YLQtSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtS4gINCg0LXQtNC+0LLQtdGC0LUsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRglxuIgorItGBIOKAniVj4oCcLCDRidC1INCx0YrQtNCw0YIg0L/RgNC+0L/Rg9GB0L3QsNGC0LgsINCwINC/0YDQsNC30L3QviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LAg0L/QvtC00LDQstCw0L3QtdGC0L4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisi0JLRitCy0LXQtNC10YLQtSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtS4gINCg0LXQtNC+0LLQtdGC0LUsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRglxuIgorItGBIOKAniVj4oCcLCDRgdGK0YnQviDRidC1INCx0YrQtNCw0YIg0LLQutC70Y7Rh9C10L3QuCDigJQg0LzQvtC20LUg0LTQsCDQs9C4INC40LfRgtGA0LjQtdGC0LUg0LLQuNC1LiAg0J/RgNCw0LfQvdC+IFxuIgorItGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsCDQv9C+0LTQsNCy0LDQvdC10YLQvi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc9CQ0LLRgtC+0YA6ICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXPQlNCw0YLQsDogICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPQn9C+0LTQsNCy0LDRiTogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTI1Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTkyCittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9Cz0YDQsNC20LTQsNC90LUg0L3QsCDQtNGK0YDQstC10YLQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAwNiBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgItCf0L7QtNCw0LnRgtC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0YEg0L3Rj9C60L7RjyDQvtGCINC+0L/RhtC40LjRgtC1IOKAni1t4oCcINC40LvQuCDigJ4tRuKAnC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorItCe0L/RhtC40Y/RgtCwIOKAni0tYXV0aG9yICclcyfigJwg0L3QtSDQvtGC0LPQvtCy0LDRgNGPINC90LAg0YTQvtGA0LzQsMyA0YLQsCDigJ7QmNC80LUgPNC1LdC/0L7RidCwPuKAnCDQuCDQvdC1INGB0YrQstC/0LDQtNCwINGBICIKKyLQvdC40LrQvtC5INCw0LLRgtC+0YAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDRgNC10LbQuNC8INC30LAg0LjQs9C90L7RgNC40YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDgyIGJ1aWx0aW4vY29tbWl0LmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INGA0LXQttC40Lwg0LfQsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTIyCittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWxvbmfigJwg0Lgg4oCeLXrigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LguIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLXJlc2V0LWF1dGhvcuKAnCDQuCDigJ4tLWF1dGhvcuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3NQorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICLQndGP0LzQsCDQutCw0LrQstC+INC00LAg0LHRitC00LUg0L/QvtC/0YDQsNCy0LXQvdC+LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc4Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YHQtSDQuNC30LLRitGA0YjQstCwINGB0LvQuNCy0LDQvdC1LCDQvdC1INC80L7QttC10YLQtSDQtNCwINC/0L7Qv9GA0LDQstGP0YLQtS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSwg0L3QtSDQvNC+0LbQtdGC0LUg0LTQsCDQv9C+0L/RgNCw0LLRj9GC0LUuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODMKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLXNxdWFzaOKAnCDQuCDigJ4tLWZpeHVw4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni1j4oCcLCDigJ4tQ+KAnCwg4oCeLUbigJwg0Lgg4oCeLS1maXh1cOKAnOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni1t4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4tY+KAnCwg4oCeLUPigJwg0Lgg4oCeLUbigJwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDMKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICIiCisi0J7Qv9GG0LjRj9GC0LAg4oCeLS1yZXNldC1hdXRob3LigJwg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0YHQsNC80L4g0LfQsNC10LTQvdC+INGBIOKAni1D4oCcLCDigJ4tY+KAnCDQuNC70LhcbiIKKyLigJ4tLWFtZW5k4oCcLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjIwCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisi0J7Qv9GG0LjQuNGC0LUg4oCeLS1pbmNsdWRl4oCcLCDigJ4tLW9ubHnigJwsIOKAni0tYWxs4oCcLCDigJ4tLWludGVyYWN0aXZl4oCcINC4IOKAni0tcGF0Y2jigJwg0YHQsFxuIgorItC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1h4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgdGK0YEg0LfQsNC00LDQstCw0L3QtdGC0L4g0L3QsCDQv9GK0YLQuNGJ0LA6IOKAniVz4oCm4oCcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTcgYnVpbHRpbi9jb21taXQuYzoxNTE5Cittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICLQutGA0LDRgtC60LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTkgYnVpbHRpbi9jb21taXQuYzoxNTIxCittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0LrQu9C+0L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MQorbXNnaWQgInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YHQutCw0YLQsNC90L7RgtC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjMgYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgItC40LfRh9C40YHQu9GP0LLQsNC90LUg0L3QsCDRgtC+0YfQvdC40YLQtSDRgdGC0L7QudC90L7RgdGC0Lgg0L3QsNC/0YDQtdC0L9C90LDQt9Cw0LQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NQorbXNnaWQgInZlcnNpb24iCittc2dzdHIgItCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1IGJ1aWx0aW4vY29tbWl0LmM6MTUyNSBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NTAKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCINC90LAg0LjQt9GF0L7QtNCwINC30LAg0YfQtdGC0LXQvdC1INC+0YIg0L/RgNC+0LPRgNCw0LzQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4IGJ1aWx0aW4vY29tbWl0LmM6MTUyNworbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAi0L/QvtC00YDQvtCx0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4gKNGB0YLQsNC90LTQsNGA0YLQvdC+KSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzcxIGJ1aWx0aW4vY29tbWl0LmM6MTUzMAorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICLRgNCw0LfQtNC10LvRj9C90LUg0L3QsCDQtdC70LXQvNC10L3RgtC40YLQtSDRgSDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjEzNzcgYnVpbHRpbi9jb21taXQuYzoxNTMzCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTI1IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICLQoNCV0JbQmNCcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzQgYnVpbHRpbi9jb21taXQuYzoxNTMzCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtS4gINCS0YrQt9C80L7QttC90LjRgtC1INCg0JXQltCY0JzQuCDRgdCwIOKAnmFsbOKAnCAo0L/QvtC00YDQvtCx0L3QsCAiCisi0LjQvdGE0L7RgNC80LDRhtC40Y8pLCDigJ5ub3JtYWzigJwgKNC60YDQsNGC0LrQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyksIOKAnm5v4oCcICjQsdC10Lcg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSkuICAiCisi0KHRgtCw0L3QtNCw0YDRgtC90LjRj9GCINCg0JXQltCY0Jwg0LU6IOKAnmFsbOKAnC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OAorbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtS4gINCS0YrQt9C80L7QttC90LjRgtC1INCg0JXQltCY0JzQuCDRgdCwICIKKyLigJ50cmFkaXRpb25hbOKAnCAo0YLRgNCw0LTQuNGG0LjQvtC90LXQvSksIOKAnm1hdGNoaW5n4oCcICjQvdCw0L/QsNGB0LLQsNGJ0LgpLCDigJ5ub+KAnCAo0LHQtdC3INC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSAiCisi0YTQsNC50LvQvtCy0LUpLiAg0KHRgtCw0L3QtNCw0YDRgtC90LjRj9GCINCg0JXQltCY0Jwg0LU6IOKAnnRyYWRpdGlvbmFs4oCcLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICLQmtCe0JPQkCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0L/QvtC00LzQvtC00YPQu9C40YLQtS4gINCe0L/RhtC40Y8g0YEg0L3QtdC30LDQtNGK0LvQttC40YLQtdC70L3QsCDRgdGC0L7QudC90L7RgdGCIOKAlCAiCisi0LXQtNC90LAg0L7RgiDigJ5hbGzigJwgKNCy0YHQuNGH0LrQuCksIOKAnmRpcnR54oCcICjRgtC10LfQuCDRgSDQvdC10L/QvtC00LDQtNC10L3QuCDQv9GA0L7QvNC10L3QuCksICIKKyLigJ51bnRyYWNrZWTigJwgKNC90LXRgdC70LXQtNC10L3QuCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LIg0LrQvtC70L7QvdC4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODQKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgItCx0LXQtyDQt9Cw0YHQuNGH0LDQvdC1INC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAi0LfQsNGB0LjRh9Cw0L3QtSDQvdCwINC/0YDQtdC40LzQtdC90YPQstCw0L3QuNGP0YLQsCwg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQtNCw0LTQtSDQutC+0LXRhNC40YbQuNC10L3RgiDQvdCwINC/0YDQuNC70LjQutCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDYKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICLQndC10L/QvtC00LTRitGA0LbQsNC90LAg0LrQvtC80LHQuNC90LDRhtC40Y8g0L7RgiDQsNGA0LPRg9C80LXQvdGC0Lgg0LfQsCDQuNCz0L3QvtGA0LjRgNCw0L3QuCDQuCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4OQorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgItCx0LXQtyDQuNC90YTQvtGA0LzQsNGG0LjRjyDRgdC70LXQtCDRg9GB0L/QtdGI0L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTAKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgNCw0LfQu9C40LrQsNGC0LAg0LrRitC8INGI0LDQsdC70L7QvdCwINC30LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkyCittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDQt9CwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L/RgNC4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MyBidWlsdGluL21lcmdlLmM6Mjc0IGJ1aWx0aW4vdGFnLmM6NDE0Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi0LLQt9C40LzQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC+0YIg0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAi0JDQktCi0J7QoCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQkNCS0KLQntCgINC30LAg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NSBidWlsdGluL2djLmM6NTM4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi0JTQkNCi0JAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NQorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINCU0JDQotCQINC30LAg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NyBidWlsdGluL2NvbW1pdC5jOjE0OTggYnVpbHRpbi9jb21taXQuYzoxNDk5CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgItCf0J7QlNCQ0JLQkNCd0JUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NworbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQuCDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQvtGCINGD0LrQsNC30LDQvdC+0YLQviDQn9Ce0JTQkNCS0JDQndCVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTgKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC+0YIg0YPQutCw0LfQsNC90L7RgtC+INCf0J7QlNCQ0JLQkNCd0JUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L7RgtC+INGB0YrQvtCx0YnQtdC90LjQtSDQt9CwINCy0LrQsNGA0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0L3QvtGC0L4g0J/QntCU0JDQktCQ0J3QlSDQsiAiCisi0L/RgNC10LTRhdC+0LTQvdC+0YLQviDQsdC10Lcg0YHQu9C10LTQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L7RgtC+INGB0YrQvtCx0YnQtdC90LjQtSDQt9CwINCy0LrQsNGA0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0L3QvtGC0L4g0J/QntCU0JDQktCQ0J3QlSDQsiAiCisi0L/RgNC10LTQvdC+0YLQviIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiIgorItGB0LzRj9C90LAg0L3QsCDQsNCy0YLQvtGA0LAg0LTQsCDRgdGK0LLQv9Cw0LTQsCDRgSDQv9C+0LTQsNCy0LDRidC40Y8gKNC40LfQv9C+0LvQt9Cy0LAg0YHQtSDRgSDigJ4tQ+KAnC/igJ4tY+KAnC/igJ4tLWFtZW5k4oCcKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6Mjg5CisjOiBidWlsdGluL3B1bGwuYzoxNjQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9C+0LvQtSDQt9CwINC/0L7QtNC/0LjRgSDigJQg4oCeU2lnbmVkLW9mZi1ieTrigJwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0L3QuNGPINGI0LDQsdC70L7QvdC10L0g0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorbXNnaWQgImZvcmNlIGVkaXQgb2YgY29tbWl0IgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA2Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgItCy0LzRitC60LLQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INCyINGI0LDQsdC70L7QvdCwINC30LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0LfQsCDQuNC30LHQvtGAINC90LAg0YTQsNC50LvQvtCy0LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQv9GA0L7QvNC10L3QtdC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMworbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGD0LrQsNC30LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTQKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC00L7QsdCw0LLRj9C90LUg0L3QsCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE1Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9GA0L7QvNC10L3QuCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1INGB0LDQvNC+INC90LAg0YPQutCw0LfQsNC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTcKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiIgorItCx0LXQtyDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60YPQutC40YLQtSDQv9GA0LXQtNC4INC/0L7QtNCw0LLQsNC90LUg0Lgg0L/RgNC4INC/0YDQvtC80Y/QvdCwINC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwICIKKyLQv9C+0LTQsNCy0LDQvdC1IChwcmUtY29tbWl0INC4IGNvbW1pdC1tc2cpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICLQvtGC0L/QtdGH0LDRgtCy0LDQvdC1INC90LAg0YLQvtCy0LAsINC60L7QtdGC0L4g0LHQuCDQsdC40LvQviDQv9C+0LTQsNC00LXQvdC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzEKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgItC/0L7Qv9GA0LDQstGP0L3QtSDQvdCwINC/0YDQtdC00LjRiNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAi0LHQtdC3INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrRg9C60LDRgtCwINGB0LvQtdC0INC/0YDQtdC30LDQv9C40YHQstCw0L3QtSAocG9zdC1yZXdyaXRlKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM5Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC/0YDQsNC30L3QuCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0MQorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8g0YEg0L/RgNCw0LfQvdC4INGB0YrQvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgItCf0L7QstGA0LXQtNC10L0g0YTQsNC50Lsg0LfQsCDQstGK0YDRhdCwINC30LAg0YHQu9C40LLQsNC90LXRgtC+IOKAnk1FUkdFX0hFQUTigJwgKCVzKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIxCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAi0YDQtdC20LjQvNGK0YIg0L3QsCDRgdC70LjQstCw0L3QtSDigJ5NRVJHRV9NT0RF4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+OiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgItCd0LXQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg0L/QvtGA0LDQtNC4INC/0YDQsNC30L3QviDRgdGK0L7QsdGJ0LXQvdC40LUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgItCd0LXQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg0L/QvtGA0LDQtNC4INC90LXRgNC10LTQsNC60YLQuNGA0LDQvdC+INGB0YrQvtCx0YnQtdC90LjQtS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjg2Cittc2dpZCAiIgorInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC1INC+0LHQvdC+0LLQtdC90L4sINC90L4g0L3QvtCy0LjRj9GCINGE0LDQudC7INC30LAg0LjQvdC00LXQutGBIOKAnm5ld19pbmRleOKAnFxuIgorItC90LUg0LUg0LfQsNC/0LjRgdCw0L0uICDQn9GA0L7QstC10YDQtdGC0LUg0LTQsNC70Lgg0LTQuNGB0LrRitGCINC90LUg0LUg0L/RgNC10L/RitC70L3QtdC9INC40LvQuCDQvdC1INGB0YLQtVxuIgorItC/0YDQtdCy0LjRiNC40LvQuCDQtNC40YHQutC+0LLQsNGC0LAg0YHQuCDQutCy0L7RgtCwLiAg0JfQsCDQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIg0JTQmNCgX9Ce0JHQldCa0KLQmF0gWy0tc2hhbGxvd10gWy0tIgorIltuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyINCU0JjQoF/QntCR0JXQmtCi0JhdIFstLWFwcGVuZHwtLXNwbGl0XSBbLS0iCisicmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSDQntCf0KbQmNCYX9CX0JBf0KDQkNCX0JTQldCb0K/QndCVIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAzCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4NyBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDQKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg4Cittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICLQlNCY0KDQtdC60YLQvtGA0LjRj9GC0LBf0YFf0J7QkdCV0JrQotCYINC30LAg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LPRgNCwzIDRhNCwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICIiCisi0LDQutC+INCz0YDQsMyA0YTQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC1INGA0LDQt9C00YDQvtCx0LXQvSwg0LTQsCDRgdC1INC/0YDQvtCy0LXRgNGP0LLQsCDRgdCw0LzQviDRhNCw0LnQu9GK0YIg0L3QsCDQstGK0YDRhdCwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjczIHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICLQk9GA0LDRhNGK0YIg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lg6IOKAniVz4oCcIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgItC+0LHRhdC+0LbQtNCw0L3QtdGC0L4g0LTQsCDQt9Cw0L/QvtGH0L3QtSDQvtGCINCy0YHQuNGH0LrQuCDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA4Cittc2dpZCAic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIgorbXNnc3RyICIiCisi0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LfQsCDQuNC90LTQtdC60YHQuNGC0LUg0L3QsCDQv9Cw0LrQtdGC0LjRgtC1INC40LfQsdGA0L7QtdC90Lgg0L3QsCDQutC+0LzQsNC90LTQvdC40Y8g0YDQtdC0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgItC30LDQv9C+0YfQstCw0L3QtSDQvdCwINC+0LHRhdC+0LbQtNCw0L3QtdGC0L4g0L/RgNC4INC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L/QvtC00LDQtNC10L3QuCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEyCittc2dpZCAiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiIgorItCy0LrQu9GO0YfQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQv9C+0LTQsNCy0LDQvdC40Y8sINC60L7QuNGC0L4g0LLQtdGH0LUg0YHQsCDQstGK0LIg0YTQsNC50LvQsCDRgSDQs9GA0LDMgNGE0LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExNQorbXNnaWQgImFsbG93IHdyaXRpbmcgYW4gaW5jcmVtZW50YWwgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQt9Cw0L/QuNGBINC90LAg0L3QsNGA0LDRgdGC0LLQsNGJINGE0LDQudC7INGBINCz0YDQsMyA0YTQsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE3IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C10L0g0LHRgNC+0Lkg0L/QvtC00LDQstCw0L3QuNGPINCyINC90LXQsdCw0LfQvtCy0L4g0L3QuNCy0L4g0L3QsCDRgNCw0LfQtNGA0L7QsdC10L0g0LPRgNCw0YQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE5Cittc2dpZCAibWF4aW11bSByYXRpbyBiZXR3ZWVuIHR3byBsZXZlbHMgb2YgYSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyLQvNCw0LrRgdC40LzQsNC70L3QviDQvtGC0L3QvtGI0LXQvdC40LUg0L3QsCDQsdGA0L7RjyDQv9C+0LTQsNCy0LDQvdC40Y8g0LIg0LTQstC1INC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90Lgg0L3QuNCy0LAg0LIg0YDQsNC30LTRgNC+0LHQtdC9ICIKKyLQs9GA0LDRhCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzcKK21zZ2lkICJ1c2UgYXQgbW9zdCBvbmUgb2YgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb3IgLS1zdGRpbi1wYWNrcyIKK21zZ3N0ciAiIgorItC+0L/RhtC40LjRgtC1IOKAni0tcmVhY2hhYmxl4oCcLCDigJ4tLXN0ZGluLWNvbW1pdHPigJwg0Lgg4oCeLS1zdGRpbi1wYWNrc+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwMyBidWlsdGluL2Vudi0taGVscGVyLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LDRgNCz0YPQvNC10L3RgiDigJ4tLXR5cGXigJw6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNQorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICLRgdCw0LzQviDQv9C+INC10LTQuNC9INCy0LjQtCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjQKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAi0JzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtSDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGPINGE0LDQudC7IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LPQu9C+0LHQsNC70L3QuNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjYKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0LjRgdGC0LXQvNC90LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC10L0g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y8g0YTQsNC50Lsg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSBwZXItd29ya3RyZWUgY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y8g0YTQsNC50Lsg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LrQvtC/0LjQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LfQsNC00LDQtNC10L3QuNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDQpNCQ0JnQmyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICLQmNCU0JXQndCi0JjQpNCY0JrQkNCi0J7QoCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICIiCisi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRj9GC0LAg0L7RgiBCTE9CINGBINGC0L7Qt9C4INCY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgINC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAi0JTQtdC50YHRgtCy0LjQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtC+0LnQvdC+0YHRgjog0JjQnNCVIFvQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9Ch0KLQntCZ0J3QntCh0KLQotCQXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDRgdGC0L7QudC90L7RgdGC0Lg6INC60LvRjtGHIFvQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9Ch0KLQntCZ0J3QntCh0KLQotCQXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQvtC50L3QvtGB0YLQuNGC0LUg0LfQsCDQoNCV0JPQo9Cb0K/QoNCd0LjRj1/QmNCX0KDQkNCXOiDQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9CY0JzQldCi0J4gIgorIlvQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9Ch0KLQntCZ0J3QntCh0KLQotCQXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzUKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0L7QudC90L7RgdGC0YLQsCDQt9CwINGD0LrQsNC30LDQvdC40Y8g0LDQtNGA0LXRgTog0KDQkNCX0JTQldCbWy7Qn9Cg0J7QnNCV0J3Qm9CY0JLQkF0g0JDQlNCg0JXQoSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzYKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAiIgorItC30LDQvNGP0L3QsCDQvdCwINCy0YHQuNGH0LrQuCDRgdGK0LLQv9Cw0LTQsNGJ0Lgg0L/RgNC+0LzQtdC90LvQuNCy0Lg6INCY0JzQlSDQodCi0J7QmdCd0J7QodCiICIKKyJb0KDQldCT0KPQm9Cv0KDQldCdX9CY0JfQoNCQ0Jdf0JfQkF/QodCi0J7QmdCd0J7QodCi0KLQkF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L3QvtCy0LAg0L/RgNC+0LzQtdC90LvQuNCy0LA6INCY0JzQlSDQodCi0J7QmdCd0J7QodCiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOAorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC70LjQstCwOiDQmNCc0JUgW9Cg0JXQk9Cj0JvQr9Cg0JXQnV/QmNCX0KDQkNCXX9CX0JBf0KHQotCe0JnQndCe0KHQotCi0JBdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0YHRitCy0L/QsNC00LDRidC4OiDQmNCc0JUgW9Cg0JXQk9Cj0JvQr9Cg0JXQnV/QmNCX0KDQkNCXX9CX0JBf0KHQotCe0JnQndCe0KHQotCi0JBdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAi0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0YDQsNC30LTQtdC7OiDQodCi0JDQoNCeX9CY0JzQlSDQndCe0JLQnl/QmNCc0JUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQxCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YDQsNC30LTQtdC7OiDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgItC40LfQsdGA0L7Rj9Cy0LDQvdC1INC90LAg0LLRgdC40YfQutC4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICLQvtGC0LLQsNGA0Y/QvdC1INC90LAg0YDQtdC00LDQutGC0L7RgCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LfQsNC00LDQtNC10L3QuNGPINGG0LLRj9GCOiDQvdC+0LzQtdGAIFvRgdGC0LDQvdC00LDRgNGC0L3Qvl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ1Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC30LDQtNCw0LTQtdC90LjRjyDRhtCy0Y/Rgjog0L3QvtC80LXRgCAo0YHRgtCw0L3QtNCw0YDRgtC90LjRj9GCINC40LfRhdC+0LQg0LUg0YLQtdGA0LzQuNC90LDQuykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAi0JLQuNC0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NyBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgItGB0YLQvtC50L3QvtGB0YLRgtCwINC1INC+0YIg0YLQvtC30Lgg0LLQuNC0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OAorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQotCi0JAg0LUg4oCedHJ1ZeKAnCAo0LjRgdGC0LjQvdCwKSDQuNC70Lgg4oCeZmFsc2XigJwgKNC70YrQttCwKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQotCi0JAg0LUg0YbRj9C70L4sINC00LXRgdC10YLQuNGH0L3QviDRh9C40YHQu9C+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQotCi0JAg0LUg4oCeLS1ib29s4oCcICjQsdGD0LvQtdCy0LApINC40LvQuCDigJ4tLWludOKAnCAo0LTQtdGB0LXRgtC40YfQvdC+INGG0Y/Qu9C+INGH0LjRgdC70L4pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgItCh0KLQntCZ0J3QntCh0KLQotCQINC1INC/0YrRgiAo0LTQviDRhNCw0LnQuyDQuNC70Lgg0LTQuNGA0LXQutGC0L7RgNC40Y8pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICLRgdGC0L7QudC90L7RgdGC0YLQsCDQtSDQv9C10YDQuNC+0LQg0L3QsCDQstCw0LvQuNC00L3QvtGB0YIv0LfQsNC/0LDQt9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgIk90aGVyIgorbXNnc3RyICLQlNGA0YPQs9C4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi0YDQsNC30LTQtdC70Y/QvdC1INC90LAg0YHRgtC+0LnQvdC+0YHRgtC40YLQtSDRgSDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINC/0YDQvtC80LXQvdC70LjQstC40YLQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTYKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgItC/0YDQuCDRgtGK0YDRgdC10L3QtSDQtNCwINGB0LUg0YPQstCw0LbQsNGCINC4INC00LjRgNC10LrRgtC40LLQuNGC0LUg0LfQsCDQstC60LvRjtGH0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC80Y/RgdGC0L7RgtC+INC90LAg0LfQsNC00LDQstCw0L3QtSDQvdCwINC90LDRgdGC0YDQvtC50LrQsNGC0LAgKNGE0LDQudC7LCDRgdGC0LDQvdC00LDRgNGC0LXQvSDQstGF0L7QtCwgIgorItC+0LHQtdC60YItQkxPQiwg0LrQvtC80LDQvdC00LXQvSDRgNC10LQpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OCBidWlsdGluL2Vudi0taGVscGVyLmM6NDAKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQoiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgItGBIOKAni0tZ2V04oCcINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDRgdGC0LDQvdC00LDRgNGC0L3QsCDQodCi0J7QmdCd0J7QodCiINC/0YDQuCDQu9C40L/RgdCy0LDRidCwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCx0YDQvtC5INCw0YDQs9GD0LzQtdC90YLQuCwg0YLRgNGP0LHQstCwINC00LAg0LUg0YLQvtGH0L3QviAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCx0YDQvtC5INCw0YDQs9GD0LzQtdC90YLQuCwg0YLRgNGP0LHQstCwINC00LAg0LUg0L7RgiAlZCDQtNC+ICVkINCy0LrQu9GO0YfQuNGC0LXQu9C90L4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IHBhdHRlcm46ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRiNCw0LHQu9C+0L0g0LfQsCDQutC70Y7Rhzog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YTQvtGA0LzQsNGC0LjRgNCw0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC90LAg0L3QsNGB0YLRgNC+0LnQutCwOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCDQutCw0YLQviDRhtCy0Y/RgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAi0L3QtdGA0LDQt9C/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINGG0LLRj9GCIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5NiBidWlsdGluL2NvbmZpZy5jOjc0MgorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgItC90LUg0LUg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L/QvtC0IEdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTkKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC30LDQv9C40YHQstCw0L3QtSDQsiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUwMgorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItC+0LHQtdC60YLQuC1CTE9CINCyINC90LDRgdGC0YDQvtC50LrQuNGC0LUg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKK21zZ3N0ciAiIgorIiMg0KLQvtCy0LAg0LUg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60LjRj9GCINCy0Lgg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtdC9INGE0LDQudC7INC30LAgR2l0LlxuIgorIlt1c2VyXVxuIgorIiMg0J/RgNC+0LLQtdGA0LXRgtC1INC4INGA0LDQt9C60L7QvNC10L3RgtC40YDQsNC50YLQtSDRgdC70LXQtNC90LjRgtC1INC00LLQsCDRgNC10LTQsDpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjExCittc2dpZCAib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lIgorbXNnc3RyICLRgdCw0LzQviDQv9C+INC10LTQuNC9INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTYKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuKAni0tbG9jYWzigJwg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0YHQsNC80L4g0LIg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxOQorbXNnaWQgIi0tYmxvYiBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLigJ4tLWJsb2LigJwg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0YHQsNC80L4g0LIg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzOAorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgItC/0YDQvtC80LXQvdC70LjQstCw0YLQsCDigJ5IT01F4oCcINC90LUg0LUg0LfQsNC00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NTgKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS13b3JrdHJl4oCcINC90LUg0L/RgNC40LXQvNCwINC80L3QvtC20LXRgdGC0LLQviDRgNCw0LHQvtGC0L3QuCDQtNGK0YDQstC10YLQsCwg0L/RgNC10LTQuFxuIgorItCy0LrQu9GO0YfQstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfRiNC40YDQtdC90LjQtdGC0L4g0LIg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDigJ53b3JrdHJlZUNvbmZpZ+KAnC4gINCX0LBcbiIKKyLQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LLQuNC20YLQtSDRgNCw0LfQtNC10LvQsCDigJ5DT05GSUdVUkFUSU9OIEZJTEXigJwg0LJcbiIKKyLigJ5naXQgaGVscCB3b3JrdHJlZeKAnCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2ODgKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1nZXQtY29sb3LigJwg0L3QtSDRgdGK0L7RgtCy0LXRgtGB0YLQstCwINC90LAg0LLQuNC00LAg0L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkzCittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAi0YHQsNC80L4g0L/QviDQtdC00L3QviDQtNC10LnRgdGC0LLQuNC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwNgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1uYW1lLW9ubHnigJwg0LUg0L/RgNC40LvQvtC20LjQvNCwINGB0LDQvNC+INC60YrQvCDQvtC/0YbQuNC40YLQtSDigJ4tLWxpc3TigJwg0Lgg4oCeLS1nZXQtcmVnZXhw4oCcIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxMgorbXNnaWQgIiIKKyItLXNob3ctb3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIGFuZCAtLSIKKyJsaXN0IgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1zaG93LW9yaWdpbuKAnCDQtSDQv9GA0LjQu9C+0LbQuNC80LAg0YHQsNC80L4g0LrRitC8INC+0L/RhtC40LjRgtC1IOKAni0tZ2V04oCcLCDigJ4tLWdldC1hbGzigJwsICIKKyLigJ4tLWdldC1yZWdleHDigJwg0Lgg4oCeLS1saXN04oCcIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxOAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZGVmYXVsdOKAnCDQtSDQv9GA0LjQu9C+0LbQuNC80LAg0YHQsNC80L4g0LrRitC8INC+0L/RhtC40Y/RgtCwIOKAni0tZ2V04oCcIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICLQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczNAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0L7QsdGA0LDQsdC+0YLQutCw0YLQsCDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuC1CTE9CIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAi0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKyLQvNC90L7QttC10YHRgtCy0L4g0YHRgtC+0LnQvdC+0YHRgtC4INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LfQsNC80LXQvdGP0YIg0YEg0LXQtNC90LAuXG4iCisi0JfQsCDQtNCwINC/0YDQvtC80LXQvdC40YLQtSDigJ4lc+KAnCwg0L/QvtC70LfQstCw0LnRgtC1INGA0LXQs9GD0LvRj9GA0LXQvSDQuNC30YDQsNC3INC40LvQuCDQvtC/0YbQuNC40YLQtSDigJ4tLWFkZOKAnCDQuCDigJ4tLSIKKyJyZXBsYWNlLWFsbOKAnC4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODQ3IGJ1aWx0aW4vY29uZmlnLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggc2VjdGlvbjogJXMiCittc2dzdHIgItGC0LDQutGK0LIg0YDQsNC30LfQtdC7INC90Y/QvNCwOiAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C80LXRgNC40YLQtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0LLRitCyINGE0L7RgNC80LDRgiDQu9C10YHQvdC+INGH0LXRgtC40Lwg0L7RgiDRhdC+0YDQsCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIgorbXNnc3RyICJnaXQgZGVzY3JpYmUgW9Ce0J/QptCY0K/igKZdIFvQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/Qn9Ce0JTQkNCS0JDQndCV4oCmXSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBb0J7Qn9Cm0JjQr+KApl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAi0L7RgdC90L7QstC90L4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICLQutGA0LDRgtC60L4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAi0LDQvdC+0YLQuNGA0LDQvdC+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAi0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsNC90L7RgtC40YDQsNC9INC10YLQuNC60LXRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICLQsiDQsNC90L7RgtC40YDQsNC90LjRjyDQtdGC0LjQutC10YIg4oCeJXPigJwg0LvQuNC/0YHQstCwINCy0LPRgNCw0LTQtdC90L4g0LjQvNC1IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg4oCeJXPigJwg0YLRg9C6INC1INCy0YHRitGJ0L3QvtGB0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLQvdC40LrQvtC5INC10YLQuNC60LXRgiDQvdC1INC90LDQv9Cw0YHQstCwINGC0L7Rh9C90L4g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAi0J3QuNC60L7RjyDQstC10YDRgdC40Y8g0Lgg0LXRgtC40LrQtdGCINC90LUg0L3QsNC/0LDRgdCy0LDRgiDRgtC+0YfQvdC+LiAg0KLRitGA0YHQuCDRgdC1INC/0L4g0L7Qv9C40YHQsNC90LjQtVxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICLRgtGK0YDRgdC10L3QtdGC0L4g0L/RgNC40LrQu9GO0YfQuCDQv9GA0Lgg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorItCd0LjQutC+0Lkg0LDQvdC+0YLQuNGA0LDQvSDQtdGC0LjQutC10YIg0L3QtSDQvtC/0LjRgdCy0LAg4oCeJXPigJwuXG4iCisi0KHRitGJ0LXRgdGC0LLRg9Cy0LDRgiDQuCDQvdC10LDQvdC+0YLQuNGA0LDQvdC4INC10YLQuNC60LXRgtC4LiAg0J/RgNC+0LHQstCw0LnRgtC1INGBINC+0L/RhtC40Y/RgtCwIOKAni0tdGFnc+KAnC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorItCd0LjQutC+0Lkg0LXRgtC40LrQtdGCINC90LUg0L7Qv9C40YHQstCwIOKAniVz4oCcLlxuIgorItCf0YDQvtCx0LLQsNC50YLQtSDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsd2F5c+KAnCDQuNC70Lgg0YHRitC30LTQsNC50YLQtSDQtdGC0LjQutC10YLQuC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgItC/0YDQtdGC0YrRgNGB0LXQvdC4INGB0LAgJWx1INC/0L7QtNCw0LLQsNC90LjRj1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorItC+0YLQutGA0LjRgtC4INGB0LAg0L3QsNC0ICVpINC10YLQuNC60LXRgtCwLCDQuNC30LLQtdC00LXQvdC4INGB0LAg0L/QvtGB0LvQtdC00L3QuNGC0LUgJWksXG4iCisi0YLRitGA0YHQtdC90LXRgtC+INCx0LUg0L/RgNC10LrRgNCw0YLQtdC90L4g0L/RgNC4IOKAniVz4oCcLlxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgItC+0L/QuNGB0LDQvdC40LUg0L3QsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L3QuNGC0L4g0L/QvtC00LDQstCw0L3QtSwg0L3QuNGC0L4g0L7QsdC10LrRgi1CTE9CIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM3Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAi0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGC0LAsINC60L7QudGC0L4g0YHQu9C10LTQstCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzgKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDRgtGA0LDRgdC40YDQsNC90LUg0L3QsCDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwINC30LAg0YLRitGA0YHQtdC90LUg0L3QsCAiCisi0YHRgtCw0L3QtNCw0YDRgtC90LDRgtCwINCz0YDQtdGI0LrQsCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOQorbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC/0YDQvtC40LfQstC+0LvQtdC9INGD0LrQsNC30LDRgtC10LsiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDAKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQstGB0LXQutC4INC10YLQuNC60LXRgiDigJQg0LLQutC70Y7Rh9C40YLQtdC70L3QviDQuCDQvdC10LDQvdC+0YLQuNGA0LDQvdC40YLQtSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgItCy0LjQvdCw0LPQuCDQtNCwINGB0LUg0L/QvtC70LfQstCwINC00YrQu9Cz0LjRj9GCINGE0L7RgNC80LDRgiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi0L/RgNC+0YHQu9C10LTRj9Cy0LDQvdC1INGB0LDQvNC+INC90LAg0L/RitGA0LLQuNGPINGA0L7QtNC40YLQtdC7IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ1Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YLQvtGH0L3QuNGC0LUg0YHRitCy0L/QsNC00LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDcKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICLQtNCwINGB0LUg0YLRitGA0YHQuCDRgdCw0LzQviDQsiDRgtC+0LfQuCDQkdCg0J7QmSDQv9C+0YHQu9C10LTQvdC4INC10YLQuNC60LXRgtC4ICjRgdGC0LDQvdC00LDRgNGC0L3QvjogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ5Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0LTQsCDRgdC1INGC0YrRgNGB0Lgg0YHQsNC80L4g0LjQt9C80LXQttC00YMg0LXRgtC40LrQtdGC0LjRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDRgtC+0LfQuCDQqNCQ0JHQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTEKK21zZ2lkICJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItC00LAg0L3QtSDRgdC1INGC0YrRgNGB0Lgg0LjQt9C80LXQttC00YMg0LXRgtC40LrQtdGC0LjRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDRgtC+0LfQuCDQqNCQ0JHQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTMgYnVpbHRpbi9uYW1lLXJldi5jOjQ3MworbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC60YDQsNGC0LXQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YIg0LrQsNGC0L4g0YDQtdC30LXRgNCy0LXQvSDQstCw0YDQuNCw0L3RgiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NCBidWlsdGluL2Rlc2NyaWJlLmM6NTU3Cittc2dpZCAibWFyayIKK21zZ3N0ciAi0JzQkNCg0JrQldCgIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YLQsNC60YrQsiDQnNCQ0KDQmtCV0KAg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0LUg4oCeLWRpcnR54oCcKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OAorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICIiCisi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0LDQutGK0LIg0JzQkNCg0JrQldCgINC90LAg0YHRh9GD0L/QtdC90L7RgtC+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4gKNGB0YLQsNC90LTQsNGA0YLQvdC+INC1IOKAni1icm9rZW7igJwpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTc2Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tbG9uZ+KAnCDQuCDigJ4tLWFiYnJldj0w4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjA1Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgItCd0LUg0YHQsCDQvtGC0LrRgNC40YLQuCDQuNC80LXQvdCwIOKAlCDQvdC40YnQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9C40YHQsNC90L4uIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZGlydHnigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINGD0LrQsNC30LDRgtC10Lsg0LrRitC8INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTgKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgItC+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/QktCV0KDQodCY0JhdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUyCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKyLQk9GA0LXRiNC60LA6INC90LXQv9GA0LXQutC40YLQtSDQtdGC0LjQutC10YLQuCDQvdC1INGB0LUg0LjQt9C90LDRgdGP0YIsINC+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/RgtCwIOKAnmZldGNoLnBhcmFsbGVs4oCcINGC0YDRj9Cx0LLQsCDQtNCwINC1INC90LXQvtGC0YDQuNGG0LDRgtC10LvQvdCwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjIwNAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgItC00L7RgdGC0LDQstGP0L3QtSDQvtGCINCy0YHQuNGH0LrQuCDQvtGC0LTQsNC70LXRh9C10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEgYnVpbHRpbi9wdWxsLmM6MjQ4Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9mZXRjaCIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINC60LvQvtC9INC30LAg0YHQu9C10LTQtdC90LUg0LfQsCDQuNC30LTRitGA0L/QstCw0L3QtS/QtNC+0YHRgtCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MjA3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC60YrQvCDigJ4uZ2l0L0ZFVENIX0hFQUTigJwg0LLQvNC10YHRgtC+INC30LDQvNGP0L3QsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NSBidWlsdGluL3B1bGwuYzoyMTAKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvSDQv9GK0YIsINC60YrQtNC10YLQviDQtNCwINGB0LUg0LrQsNGH0Lgg0L/QsNC60LXRgtGK0YIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LvQvtC60LDQu9C10L0g0YPQutCw0LfQsNGC0LXQuyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAi0LTQvtGB0YLQsNCy0Y/QvdC1INC+0YIg0LzQvdC+0LbQtdGB0YLQstC+INC+0YLQtNCw0LvQtdGH0LXQvdC4INGF0YDQsNC90LjQu9C40YnQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQstGB0LjRh9C60Lgg0LXRgtC40LrQtdGC0Lgg0Lgg0L/RgNC40L3QsNC00LvQtdC20LDRidC4INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MgorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAi0LHQtdC3INC00L7RgdGC0LDQstGP0L3QtdGC0L4g0L3QsCDQstGB0LjRh9C60Lgg0LXRgtC40LrQtdGC0Lgg4oCeLS1uby10YWdz4oCcIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi0LHRgNC+0Lkg0L/QvtC00LzQvtC00YPQu9C4INC00L7RgdGC0LDQstC10L3QuCDQv9Cw0YDQsNC70LXQu9C90L4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINC60LvQvtC90LjRgtC1INGB0LvQtdC00Y/RidC4INCy0LXRh9C1INC90LXRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0Lgg0L7RgtC00LDQu9C10YfQtdC90Lgg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIiIKKyLQvtC60LDRgdGC0YDRj9C90LUg0L3QsCDQu9C+0LrQsNC70L3QuNGC0LUg0LXRgtC40LrQtdGC0LgsINC60L7QuNGC0L4g0LLQtdGH0LUg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsNGCINCyINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviAiCisi0YXRgNCw0L3QuNC70LjRidC1INC4INC/0YDQtdC30LDQv9C40YHQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC10L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9mZXRjaC5jOjE4MiBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgItCf0KDQmCDQndCj0JbQlNCQIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAi0YPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDRgNC10LrRg9GA0YHQuNCy0L3QvtGC0L4g0LTQvtGB0YLQsNCy0Y/QvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL3B1bGwuYzoyMjUKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQt9GC0LXQs9C70LXQvdC40YLQtSDQv9Cw0LrQtdGC0Lgg0YEg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OSBidWlsdGluL2ZldGNoLmM6MTc1IGJ1aWx0aW4vcHVsbC5jOjIyOAorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgItC30LDQtNGK0LvQsdC+0YfQsNCy0LDQvdC1INC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0L/Qu9C40YLQutC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICLQt9Cw0LTRitC70LHQvtGH0LDQstCw0L3QtSDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINC/0LvQuNGC0LrQviDRhdGA0LDQvdC40LvQuNGJ0LUg0LTQviDQvtC/0YDQtdC00LXQu9C10L3QviDQstGA0LXQvNC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIzMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICLQv9GA0LXQstGA0YrRidCw0L3QtSDQsiDQv9GK0LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgtC+0LLQsCDQv9GA0LXQtCDQv9GK0YLRjyDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MworbXNnaWQgIiIKKyJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgIgorImZpbGVzKSIKK21zZ3N0ciAiIgorItGB0YLQsNC90LTQsNGA0YLQvdC+INGA0LXQutGD0YDRgdC40LLQvdC+INC40LfRgtC10LPQu9GP0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUgKNGE0LDQudC70L7QstC10YLQtSDRgSDQvdCw0YHRgtGA0L7QudC60Lgg0YHQsCDRgSAiCisi0L/RgNC40L7RgNC40YLQtdGCKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMzQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgItC/0YDQuNC10LzQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LgsINC60L7QuNGC0L4g0L7QsdC90L7QstGP0LLQsNGCIOKAni5naXQvc2hhbGxvd+KAnCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMzYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgItCa0JDQoNCi0JBf0KFf0KPQmtCQ0JfQkNCi0JXQm9CYIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg5IGJ1aWx0aW4vcHVsbC5jOjIzNworbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICLRg9C60LDQt9Cy0LDQvdC1INC90LAg0JrQkNCg0KLQkNGC0LBf0KFf0KPQmtCQ0JfQkNCi0JXQm9CYINC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgItC00L7QutC70LDQtNCy0LDQvdC1LCDRh9C1INCy0YHQuNGH0LrQuCDQvtCx0LXQutGC0Lgg0LzQvtCz0LDRgiDRgdCwINC00L7RgdGC0LjQttC40LzQuCDQv9GA0Lgg0LfQsNC/0L7Rh9Cy0LDQvdC1INC+0YIg0YLQvtC30LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTkKK21zZ2lkICJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgItC40LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDigJ5nYyAtLWF1dG/igJwg0YHQu9C10LQg0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjI0NgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAi0L/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/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcINC90LUg0LjQt9C/0YDQsNGC0Lgg0LLRgdC40YfQutC4INC90LXQvtCx0YXQvtC00LjQvNC4INC+0LHQtdC60YLQuFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiIKKyLQvtGC0YXQstGK0YDQu9GP0L3QtSDQvdCwINCy0YrRgNGF0LAg4oCeJXPigJwsINC30LDRidC+0YLQviDQv9C70LjRgtC60LjRgtC1INGF0YDQsNC90LjQu9C40YnQsCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCICIKKyLQvtCx0L3QvtCy0Y/QstCw0L3QuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMTcgYnVpbHRpbi9mZXRjaC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgItCe0YIgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisi0L3Rj9C60L7QuCDQu9C+0LrQsNC70L3QuCDRg9C60LDQt9Cw0YLQtdC70Lgg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQvtCx0L3QvtCy0LXQvdC4LiAg0JjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsFxuIgorIuKAnmdpdCByZW1vdGUgcHJ1bmUgJXPigJwsINC30LAg0LTQsCDQv9GA0LXQvNCw0YXQvdC10YLQtSDQvtGB0YLQsNGA0LXQu9C40YLQtSDQutC70L7QvdC4LCDQutC+0LjRgtC+XG4iCisi0L/RgNC10LTQuNC30LLQuNC60LLQsNGCINC60L7QvdGE0LvQuNC60YLQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKNC+0LHQtdC60YLRitGCIOKAniVz4oCcINGJ0LUg0YHQtSDQvtC60LDQttC1INC40LfQstGK0L0g0LrQu9C+0L0pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICjQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQstC10YfQtSDQtSDQuNC30LLRitC9INC60LvQvtC9KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTgKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvQuNC30YLRgNC40YJdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1OSBidWlsdGluL3JlbW90ZS5jOjEwMzUKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIijQvdC40YnQvikiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINC00L7RgdGC0LDQstC40YLQtSDQsiDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSDigJ4lc+KAnCDQvdCwINGF0YDQsNC90LjQu9C40YnQtSwg0LrQvtC10YLQviDQvdC1INC1INCz0L7Qu9C+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICLQodGC0L7QudC90L7RgdGC0YLQsCDigJ4lMiRz4oCcINC30LAg0L7Qv9GG0LjRj9GC0LAg4oCeJTEkc+KAnCDQvdC1INC1INGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAniUzJHPigJwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwINC/0YDQuCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxMgorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAiIgorItC30LDRgdC10YfQtdC90Lgg0YHQsCDQvNC90L7QttC10YHRgtCy0L4g0LrQu9C+0L3QuCwg0YLQvtCy0LAg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC+INGBINC+0L/RhtC40Y/RgtCwIOKAni0tc2V0LXVwc3RyZWFt4oCcIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyNworbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YPQutCw0LfQstCw0YLQtSDQutC70L7QvSDQt9CwINGB0LvQtdC00LXQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC9INC10YLQuNC60LXRgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjkKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgdGFnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YPQutCw0LfQstCw0YLQtSDQutC70L7QvSDQt9CwINGB0LvQtdC00LXQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC9INC10YLQuNC60LXRgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzEKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCy0LjQtCDQutC70L7QvSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzMKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisi0L3QtSDQtSDQvtGC0LrRgNC40YIg0LrQu9C+0L0g0LfQsCDRgdC70LXQtNC10L3QtS5cbiIKKyLQotGA0Y/QsdCy0LAg0LjQt9GA0LjRh9C90L4g0LTQsCDQt9Cw0LTQsNC00LXRgtC1INC10LTQuNC9INC60LvQvtC9INGBINC+0L/RhtC40Y/RgtCwIOKAni0tc2V0LXVwc3RyZWFtIG9wdGlvbuKAnC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTU5IGJ1aWx0aW4vZmV0Y2guYzoxNjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY5IGJ1aWx0aW4vZmV0Y2guYzoxNjI0IGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtGB0YLQsNCy0LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmZXRjaCAnJXMnIChleGl0IGNvZGU6ICVkKVxuIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQtNC+0YHRgtCw0LLQuCAo0LjQt9GF0L7QtNC90LjRj9GCINC60L7QtCDQtTogJWQpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjg0Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLQndC1INGB0YLQtSDRg9C60LDQt9Cw0LvQuCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUuICDQl9Cw0LTQsNC50YLQtSDQuNC70Lgg0LDQtNGA0LXRgSwg0LjQu9C4INC40LzQtVxuIgorItC90LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1LCDQvtGC0LrRitC00LXRgtC+INC00LAg0YHQtSDQtNC+0YHRgtCw0LLRj9GCINC90L7QstC40YLQtSDQstC10YDRgdC40LguIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcyMQorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgItCi0YDRj9Cx0LLQsCDQtNCwINGD0LrQsNC20LXRgtC1INC40LzQtSDQvdCwINC10YLQuNC60LXRgi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcxCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi0J7RgtGA0LjRhtCw0YLQtdC70L3QsCDQtNGK0LvQsdC+0YfQuNC90LAg0LrQsNGC0L4g0LDRgNCz0YPQvNC10L3RgiDQvdCwIOKAni0tZGVlcGVu4oCcINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3MworbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tZGVlcGVu4oCcINC4IOKAni0tZGVwdGjigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzc4Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tZGVwdGjigJwg0Lgg4oCeLS11bnNoYWxsb3figJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgwCittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItC90LUg0LzQvtC20LXRgtC1INC00LAg0LjQt9C/0L7Qu9C30LLQsNGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS11bnNoYWxsb3figJwg0LLRitGA0YXRgyDQv9GK0LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3OTYKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAi0LrRitC8IOKAnmdpdCBmZXRjaCAtLWFsbOKAnCDQvdC1INC80L7QttC10YLQtSDQtNCwINC00L7QsdCw0LLQuNGC0LUg0LDRgNCz0YPQvNC10L3RgiDigJQg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5OAorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorItC60YrQvCDigJ5naXQgZmV0Y2ggLS1hbGzigJwg0L3QtSDQvNC+0LbQtdGC0LUg0LTQsCDQtNC+0LHQsNCy0LjRgtC1INCw0YDQs9GD0LzQtdC90YIg4oCUINGD0LrQsNC30LDRgtC10Lsg0L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgItCd0Y/QvNCwINC90LjRgtC+INC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSwg0L3QuNGC0L4g0LPRgNGD0L/QsCDQvtGCINGF0YDQsNC90LjQu9C40YnQsCDQvdCwINC40LzQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTQKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgItCj0LrQsNC30LLQsNC90LXRgtC+INC90LAg0LPRgNGD0L/QsCDQuCDRg9C60LDQt9Cy0LDQvdC10YLQviDQvdCwINCy0LXRgNGB0LjRjyDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MzIKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLWZpbHRlcuKAnCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70LfQstCwINGB0LDQvNC+INGBINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0YPQutCw0LfQsNC90L4g0LIgIgorItC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeZXh0ZW5zaW9ucy5wYXJ0aWFsQ2xvbmXigJwiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0g0KHQqtCe0JHQqdCV0J3QmNCVXSBbLS1sb2dbPdCR0KDQntCZXSB8IC0tbm8tbG9nXSBbLS1maWxlINCk0JDQmdCbXSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc0Cittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICIiCisi0LLQvNGK0LrQstCw0L3QtSDQvdCwINC20YPRgNC90LDQuyDRgdGK0YHRgtC+0Y/RiSDRgdC1INC+0YIg0L3QtSDQv9C+0LLQtdGH0LUg0L7RgiDQkdCg0J7QmSDQt9Cw0L/QuNGB0LAg0L7RgiDRgdGK0LrRgNCw0YLQtdC90LjRjyAiCisi0LbRg9GA0L3QsNC7IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICLQv9GB0LXQstC00L7QvdC40Lwg0L3QsCDigJ4tLWxvZ+KAnCAo0L7RgdGC0LDRgNGP0LvQvikiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MAorbXNnaWQgInRleHQiCittc2dzdHIgItCi0JXQmtCh0KIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MQorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAi0LfQsCDQvdCw0YfQsNC70L4g0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0KLQldCa0KHQoiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgyCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgItGE0LDQudC7LCDQvtGCINC60L7QudGC0L4g0LTQsCDRgdC1INGH0LXRgtC1IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+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+KAnCIKKworIworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICLQvdC10L/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+0L0g0LfQsCDQuNC30YLRgNC40LLQsNC90LUuIgorIzogYnVpbHRpbi9ncmVwLmM6MjkKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFvQntCf0KbQmNCv4oCmXSBbLWVdINCo0JDQkdCb0J7QnSBb0JLQldCg0KHQmNCv4oCmXSBbWy0tXSDQn9Cq0KLigKZdIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCi1tc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC60LvQvtC90Lgg0L7RgiDigJ4lc+KAnCIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6INC90LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvdC40YjQutCwOiAlcyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDAKLW1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKLW1zZ3N0ciAi0J3QtSDQtSDQuNC30LHRgNCw0L3QviDRhdGA0LDQvdC40LvQuNGJ0LUuIgorIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDQsdGA0L7QuSDQvdC40YjQutC4ICglZCkg0LfQsCAlcyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTY2FubmluZyAlcy4uLiIKLW1zZ3N0ciAi0J/RgNC10YLRitGA0YHQstCw0L3QtSDQvdCwIOKAniVz4oCc4oCmIgorIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNCBidWlsdGluL2luZGV4LXBhY2suYzoxNzI3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINC/0L7QtNC00YDRitC20LrQsCDQt9CwINC90LjRiNC60LguICDigJ4lc+KAnCDRidC1INGB0LUg0L/RgNC10L3QtdCx0YDQtdCz0L3QtSIKIAotIzogbGliL3NlYXJjaC50Y2w6NDgKLW1zZ2lkICJGaW5kOiIKLW1zZ3N0ciAi0KLRitGA0YHQtdC90LU6IgorIzogYnVpbHRpbi9ncmVwLmM6NDY3IGJ1aWx0aW4vZ3JlcC5jOjU5MiBidWlsdGluL2dyZXAuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICLQtNGK0YDQstC+0YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+ICglcykiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjUwCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAi0KHQu9C10LTQstCw0YnQsCDQv9C+0Y/QstCwIgorIzogYnVpbHRpbi9ncmVwLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4IOKAnmdyZXDigJwg0L7RgiDQvtCx0LXQutGCINC+0YIg0LLQuNC00LAgJXMiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjUxCi1tc2dpZCAiUHJldiIKLW1zZ3N0ciAi0J/RgNC10LTQuNGI0L3QsCDQv9C+0Y/QstCwIgorIzogYnVpbHRpbi9ncmVwLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVj4oCcINC+0YfQsNC60LLQsCDRh9C40YHQu9C+INC30LAg0LDRgNCz0YPQvNC10L3RgiIKIAotIzogbGliL3NlYXJjaC50Y2w6NTIKLW1zZ2lkICJSZWdFeHAiCi1tc2dzdHIgItCg0LXQs9CY0LfRgCIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INCyINC40L3QtNC10LrRgdCwLCDQsCDQvdC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgogCi0jOiBsaWIvc2VhcmNoLnRjbDo1NAotbXNnaWQgIkNhc2UiCi1tc2dzdHIgItCT0LvQsNCy0L3QuC/QvNCw0LvQutC4IgorIzogYnVpbHRpbi9ncmVwLmM6ODE3Cittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC4INCy0YrQsiDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0L3QtSDRgdCwINC/0L7QtCDRg9C/0YDQsNCy0LvQtdC90LjQtdGC0L4g0L3QsCBnaXQiCiAKLSM6IGxpYi9zaG9ydGN1dC50Y2w6OCBsaWIvc2hvcnRjdXQudGNsOjQzIGxpYi9zaG9ydGN1dC50Y2w6NzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBDcmVhdGUgRGVza3RvcCBJY29uIgotbXNnc3RyICIlcyAoJXMpOiDQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQutC+0L3QsCDQvdCwINGA0LDQsdC+0YLQvdC40Y8g0L/Qu9C+0YIiCisjOiBidWlsdGluL2dyZXAuYzo4MTkKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC4INCyINGB0LvQtdC00LXQvdC40YLQtSwg0Lgg0LIg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoyNCBsaWIvc2hvcnRjdXQudGNsOjY1Ci1tc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKLW1zZ3N0ciAi0JrQu9Cw0LLQuNGI0L3QsNGC0LAg0LrQvtC80LHQuNC90LDRhtC40Y8g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90LA6IgorIzogYnVpbHRpbi9ncmVwLmM6ODIxCittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDRg9C60LDQt9Cw0L3QuCDQsiDigJ4uZ2l0aWdub3Jl4oCcIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjE0MAotbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKLW1zZ3N0ciAi0JjQutC+0L3QsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90LA6IgorIzogYnVpbHRpbi9ncmVwLmM6ODIzCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICLRgNC10LrRg9GA0YHQuNCy0L3QviDRgtGK0YDRgdC10L3QtSDQstGK0LIg0LLRgdC40YfQutC4INC/0L7QtNC80L7QtNGD0LvQuCIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAi0KLQsNC30Lgg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCisjOiBidWlsdGluL2dyZXAuYzo4MjYKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQvdC1INGB0YrQstC/0LDQtNCw0YIiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQotbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgotbXNnc3RyICLQm9C40L/RgdCy0LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisjOiBidWlsdGluL2dyZXAuYzo4MjgKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICLQsdC10Lcg0LfQvdCw0YfQtdC90LjQtSDQvdCwINGA0LXQs9C40YHRgtGK0YDQsCDQvdCwINCx0YPQutCy0LjRgtC1ICjQs9C70LDQstC90Lgv0LzQsNC70LrQuCkiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAotbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0L3QsNGB0YLRgNC+0LnQutC4INC90LAg0L/RgNC+0LLQtdGA0LrQsNGC0LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAi0L3QsNC/0LDRgdCy0LDQvdC1INC90LAg0YjQsNCx0LvQvtC90LjRgtC1INGB0LDQvNC+INC/0L4g0LPRgNCw0L3QuNGG0LjRgtC1INC90LAg0LTRg9C80LjRgtC1IgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgItCf0L7Qu9C30LLQsNC90LUg0L3QsCDRgNC10YfQvdC40Log0LfQsCDQtdC30LjQuiDigJ4lc+KAnC4iCisjOiBidWlsdGluL2dyZXAuYzo4MzIKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtCy0LDQvdC1INC90LAg0LTQstC+0LjRh9C90LjRgtC1INGE0LDQudC70L7QstC1INC60LDRgtC+INGC0LXQutGB0YLQvtCy0LgiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MwotbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCi1tc2dzdHIgItCf0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0L/RgNCw0LLQvtC/0LjRgSDQtNCw0LbQtSDQvdC1INGB0YLQsNGA0YLQuNGA0LAg0YPRgdC/0LXRiNC90L4uIgorIzogYnVpbHRpbi9ncmVwLmM6ODM0Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINC00LLQvtC40YfQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCi1tc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiIgorItC+0LHRgNCw0LHQvtGC0LLQsNC90LUg0L3QsCDQtNCy0L7QuNGH0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0YfRgNC10Lcg0YTQuNC70YLRgNC4INC30LAg0L/RgNC10L7QsdGA0LDQt9GD0LLQsNC90LUg0LrRitC8INGC0LXQutGB0YIiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKLW1zZ2lkICJObyBTdWdnZXN0aW9ucyIKLW1zZ3N0ciAi0J3Rj9C80LAg0L/RgNC10LTQu9C+0LbQtdC90LjRjyIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzOQorbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INCyINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNC40YLQtSAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Ci1tc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgotbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuyDQvtGCINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0MQorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAi0L3QsNCy0LvQuNC30LDQvdC1INC80LDQutGB0LjQvNCw0LvQvdC+INC90LAg0YLQsNC30Lgg0JTQqtCb0JHQntCn0JjQndCQINCyINC00YrRgNCy0L7RgtC+IgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCi1tc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQsiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisjOiBidWlsdGluL2dyZXAuYzo4NDUKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi0YDQsNC30YjQuNGA0LXQvdC4INGA0LXQs9GD0LvRj9GA0L3QuCDQuNC30YDQsNC30Lgg0L/QviBQT1NJWCIKIAotIzogbGliL3NzaGtleS50Y2w6MzEKLW1zZ2lkICJObyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAi0J3QtSDRgdCwINC+0YLQutGA0LjRgtC4INC60LvRjtGH0L7QstC1LiIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0OAorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAi0L7RgdC90L7QstC90Lgg0YDQtdCz0YPQu9GP0YDQvdC4INC40LfRgNCw0LfQuCDQv9C+IFBPU0lYICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKLW1zZ3N0ciAi0J7RgtC60YDQuNGCINC1INC/0YPQsdC70LjRh9C10L0g0LrQu9GO0Ycg0LIg4oCeJXPigJwiCisjOiBidWlsdGluL2dyZXAuYzo4NTEKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAi0YjQsNCx0LvQvtC90LjRgtC1INGB0LAg0LTQvtGB0LvQvtCy0L3QuCDQvdC40LfQvtCy0LUiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjQwCi1tc2dpZCAiR2VuZXJhdGUgS2V5IgotbXNnc3RyICLQk9C10L3QtdGA0LjRgNCw0L3QtSDQvdCwINC60LvRjtGHIgorIzogYnVpbHRpbi9ncmVwLmM6ODU0Cittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICLRgNC10LPRg9C70Y/RgNC90Lgg0LjQt9GA0LDQt9C4INC90LAgUGVybCIKIAotIzogbGliL3NzaGtleS50Y2w6NTgKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQutGK0Lwg0YHQuNGB0YLQtdC80L3QuNGPINCx0YPRhNC10YAiCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QvtC80LXRgNCw0YLQsCDQvdCwINGA0LXQtNC+0LLQtdGC0LUiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjcyCi1tc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCi1tc2dzdHIgItCf0YPQsdC70LjRh9C90LjRj9GCINCy0Lgg0LrQu9GO0Ycg0LfQsCBPcGVuU1NIIgorIzogYnVpbHRpbi9ncmVwLmM6ODU4Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdC+0LzQtdGA0LAg0L3QsCDQutC+0LvQvtC90LDRgtCwINC90LAg0L/RitGA0LLQvtGC0L4g0L3QsNC/0LDRgdCy0LDQvdC1IgogCi0jOiBsaWIvc3Noa2V5LnRjbDo4MAotbXNnaWQgIkdlbmVyYXRpbmcuLi4iCi1tc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC14oCmIgorIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSIKIAotIzogbGliL3NzaGtleS50Y2w6ODYKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC+0YLQvdC+0YHQuNGC0LXQu9C90LjRgtC1INC40LzQtdC90LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0YHQv9GA0Y/QvNC+INC+0YHQvdC+0LLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwICIKKyLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IgorCisjOiBidWlsdGluL2dyZXAuYzo4NjQKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCx0LXQtyDQvdCw0L/QsNGB0LLQsNGJ0LjRgtC1INGA0LXQtNC+0LLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni0tZmlsZXMtd2l0aC1tYXRjaGVz4oCcIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjkKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSwg0LrQvtC40YLQviDQvdC1INGB0YrQtNGK0YDQttCw0YIg0YDQtdC0LCDQvdCw0L/QsNGB0LLQsNGJINC90LAgIgorItGI0LDQsdC70L7QvdCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwg0YHQu9C10LQg0LLRgdGP0LrQviDQuNC80LUg0L3QsCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YfQsNGB0YLQuNGC0LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INGB0YrQstC/0LDQtNCw0YIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NgorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCx0YDQvtGPINC90LAg0YHRitCy0L/QsNC00LXQvdC40Y/RgtCwINCy0LzQtdGB0YLQviDQvdCw0L/QsNGB0LLQsNGJ0LjRgtC1INGA0LXQtNC+0LLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc3Cittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgItC+0YbQstC10YLRj9Cy0LDQvdC1INC90LAg0L3QsNC/0LDRgdCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RgNCw0LfQtdC9INGA0LXQtCDQvNC10LbQtNGDINC90LDQv9Cw0YHQstCw0L3QuNGP0YLQsCDQvtGCINGA0LDQt9C70LjRh9C90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MQorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0YTQsNC50LvQsCDRgdCw0LzQviDQstC10LTQvdGK0LYg0LfQsCDQstGB0LjRh9C60Lgg0L3QsNC/0LDRgdCy0LDQvdC40Y8g0L7RgiDRgtC+0LfQuCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGC0LDQutGK0LIg0JHQoNCe0Jkg0YDQtdC00L7QstC1INC/0YDQtdC00Lgg0Lgg0YHQu9C10LQg0L3QsNC/0LDRgdCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtCw0LrRitCyINCR0KDQntCZINGA0LXQtNC+0LLQtSDQv9GA0LXQtNC4INC90LDQv9Cw0YHQstCw0L3QuNGP0YLQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg5Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtCw0LrRitCyINCR0KDQntCZINGA0LXQtNC+0LLQtSDRgdC70LXQtCDQvdCw0L/QsNGB0LLQsNC90LjRj9GC0LAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YLQsNC60YrQsiDQkdCg0J7QmSDRgNCw0LHQvtGC0LXRidC4INC90LjRiNC60LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgItC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAni1DINCR0KDQntCZ4oCcIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTUKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNC10LQg0YEg0LjQvNC10YLQviDQvdCwINGE0YPQvdC60YbQuNGP0YLQsCwg0LIg0LrQvtGP0YLQviDQtSDQvdCw0L/QsNGB0L3QsNGCINGI0LDQsdC70L7QvdCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTcKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L7QsdGF0LLQsNGJ0LDRidCw0YLQsCDRhNGD0L3QutGG0LjRjyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAwCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDRiNCw0LHQu9C+0L3QuNGC0LUg0L7RgiDQpNCQ0JnQmyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAyCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLQvdCw0L/QsNGB0LLQsNC90LUg0L3QsCDQqNCQ0JHQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgItC60L7QvNCx0LjQvdC40YDQsNC90LUg0L3QsCDRiNCw0LHQu9C+0L3QuNGC0LUg0YPQutCw0LfQsNC90Lgg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLWXigJwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICIiCisi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtC4gINCY0LfRhdC+0LTQvdC40Y/RgiDQutC+0LQg0YPQutCw0LfQstCwINC90LDQu9C40YfQuNC10YLQviDQvdCwICIKKyLQvdCw0L/QsNGB0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNC10LTQvtCy0LUg0YHQsNC80L4g0L7RgiDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0L3QsNC/0LDRgdCy0LDRgiDQvdCwINCy0YHQuNGH0LrQuCDRiNCw0LHQu9C+0L3QuCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC00YrRgNCy0L7RgtC+INC30LAg0LDQvdCw0LvQuNC3INC90LAg0YDQtdCz0YPQu9GP0YDQvdC40Y8g0LjQt9GA0LDQtyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAicGFnZXIiCittc2dzdHIgItC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9GA0LXQs9C70LXQtCDQv9C+INGB0YLRgNCw0L3QuNGG0LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyNAorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0LLQv9Cw0LTQsNGJ0LjRgtC1INGE0LDQudC70L7QstC1INCyINC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9GA0LXQs9C70LXQtCDQv9C+INGB0YLRgNCw0L3QuNGG0LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyOAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiIgorItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDRgdGC0LDRgNGC0LjRgNCw0L3QtdGC0L4g0L3QsCBncmVwKDEpICjRgtC10LrRg9GJ0LjRj9GCINC60L7QvNC/0LjQu9Cw0YIg0L/RgNC10L3QtdCx0YDQtdCz0LLQsCDRgtCw0LfQuCAiCisi0L7Qv9GG0LjRjykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5MgorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgItC90LUg0YHRgtC1INC30LDQtNCw0LvQuCDRiNCw0LHQu9C+0L0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjgKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1jYWNoZWTigJwg0Lgg4oCeLS11bnRyYWNrZWTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0YEg0LLQtdGA0YHQuNC4LiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgItCy0LXRgNGB0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQsdGK0LTQtSDQvtGC0LrRgNC40YLQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NworbXNnaWQgImludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9uLCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINC60L7QvNCx0LjQvdCw0YbQuNGPINC+0YIg0L7Qv9GG0LjQuCwg4oCeLS10aHJlYWRz4oCcINGJ0LUg0YHQtSDQv9GA0LXQvdC10LHRgNC10LPQvdC1IgorCisjOiBidWlsdGluL2dyZXAuYzoxMDcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICLQu9C40L/RgdCy0LAg0L/QvtC00LTRgNGK0LbQutCwINC30LAg0L3QuNGI0LrQuC4gIOKAni0tdGhyZWFkc+KAnCDRidC1INGB0LUg0L/RgNC10L3QtdCx0YDQtdCz0L3QtSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3MyBidWlsdGluL2luZGV4LXBhY2suYzoxNTMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDQsdGA0L7QuSDQvdC40YjQutC4OiAlZCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA5NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1vcGVuLWZpbGVzLWluLXBhZ2Vy4oCcINC40LfQuNGB0LrQstCwINGC0YrRgNGB0LXQvdC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTE5Cittc2dpZCAib3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAni0tcmVjdXJzZS1zdWJtb2R1bGVz4oCcIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI1Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLWNhY2hlZOKAnCDQuCDigJ4tLXVudHJhY2tlZOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDRgSDigJ4tLW5vLWluZGV44oCcIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMxCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiCittc2dzdHIgIiIKKyLQvtC/0YbQuNC40YLQtSDigJ4tLShuby0pZXhjbHVkZS1zdGFuZGFyZOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDRgSDRgtGK0YDRgdC10L3QtSDQv9C+INGB0LvQtdC00LXQvdC4ICIKKyLRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEzOQorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1jYWNoZWTigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGB0YrRgSDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgotIlxuIgotIiVzIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgogbXNnc3RyICIiCi0i0J/RgNC+0LPRgNCw0LzQsNGC0LAg4oCec3NoLWtleWdlbuKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRgtCw0YDRgtC40YDQsNC90LA6XG4iCi0iXG4iCi0iJXMiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCDQktCY0JRdIFstd10gWy0tcGF0aD3QpNCQ0JnQmyB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dIFstLV0gIgorItCk0JDQmdCb4oCmIgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTMKLW1zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQs9C10L3QtdGA0LjRgNCw0L3QtS4iCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODYKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAtLXN0ZGluLXBhdGhzIgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjAKLW1zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgotbXNnc3RyICLQk9C10L3QtdGA0LjRgNCw0L3QtdGC0L4g0LfQsNCy0YrRgNGI0Lgg0YPRgdC/0LXRiNC90L4sINCwINC90LUg0YHQsCDQvdCw0LzQtdGA0LXQvdC4INC60LvRjtGH0L7QstC1LiIKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICLQktCY0JQg0L3QsCDQvtCx0LXQutGC0LAiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjEyMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKLW1zZ3N0ciAi0JrQu9GO0YfRitGCINCy0Lgg0LUg0LIg4oCeJXPigJwiCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0L7QsdC10LrRgtCwINCyINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90Lgg0LfQsCDQvtCx0LXQutGC0LjRgtC1IgogCi0jOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgotbXNnc3RyICIlc+KApiAlKmkg0L7RgiDQvtCx0YnQviAlKmkgJXMgKCUzaSUlKSIKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC+0LHQtdC60YLQsCDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCiAKLSM6IGxpYi90b29scy50Y2w6NzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCi1tc2dzdHIgItCX0LAg0LjQt9C/0YrQu9C90LXQvdC40LXRgtC+INC90LAg4oCeJXPigJwg0YLRgNGP0LHQstCwINC00LAg0LjQt9Cx0LXRgNC10YLQtSDRhNCw0LnQuy4iCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINGE0LDQudC70LAg0LrQsNC60YLQviDQtSDigJQg0LHQtdC3INGE0LjQu9GC0YDQuCIKIAotIzogbGliL3Rvb2xzLnRjbDo5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJTEkcyBvbiBmaWxlIFwiJTIkc1wiPyIKLW1zZ3N0ciAi0KHQuNCz0YPRgNC90Lgg0LvQuCDRgdGC0LUsINGH0LUg0LjRgdC60LDRgtC1INC00LAg0LjQt9C/0YrQu9C90LjRgtC1IOKAniUxJHPigJwg0LLRitGA0YXRgyDRhNCw0LnQu9CwIOKAniUyJHPigJw/IgotCi0jOiBsaWIvdG9vbHMudGNsOjk2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgItCh0LjQs9GD0YDQvdC4INC70Lgg0YHRgtC1LCDRh9C1INC40YHQutCw0YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDigJ4lc+KAnD8iCi0KLSM6IGxpYi90b29scy50Y2w6MTE4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgItCa0L7QvNCw0L3QtNCwOiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxMTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nOiAlcyIKLW1zZ3N0ciAi0JjQt9C/0YrQu9C90LXQvdC40LU6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjE1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCi1tc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDQt9Cw0LLRitGA0YjQuCDRg9GB0L/QtdGI0L3QvjogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgotbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg0LLRitGA0L3QsCDQs9GA0LXRiNC60LA6ICVzIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IEFkZCBUb29sIgotbXNnc3RyICIlcyAoJXMpOiDQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LrQvtC80LDQvdC00LAiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI4Ci1tc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCi1tc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQutC+0LzQsNC90LTQsCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQKLW1zZ2lkICJBZGQgZ2xvYmFsbHkiCi1tc2dzdHIgItCT0LvQvtCx0LDQu9C90L4g0LTQvtCx0LDQstGP0L3QtSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDYKLW1zZ2lkICJUb29sIERldGFpbHMiCi1tc2dzdHIgItCf0L7QtNGA0L7QsdC90L7RgdGC0Lgg0LfQsCDQutC+0LzQsNC90LTQsNGC0LAiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ5Ci1tc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCi1tc2dzdHIgItCX0LAg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L/QvtC00LzQtdC90Y7RgtCwINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0LfQvdCw0LrQsCDigJ4v4oCcINC30LAg0YDQsNC30LTQtdC70LjRgtC10Ls6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo2MAotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICLQmtC+0LzQsNC90LTQsDoiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjcxCi1tc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKLW1zZ3N0ciAi0J/RgNC10LTQuCDQuNC30L/RitC70L3QtdC90LjQtSDQtNCwINGB0LUg0LjQt9Cy0LXQttC00LAg0LTQuNCw0LvQvtCz0L7QsiDQv9GA0L7Qt9C+0YDQtdGGIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NwotbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgotbXNnc3RyICLQn9C+0YLRgNC10LHQuNGC0LXQu9GP0YIg0LTQsCDRg9C60LDQttC1INCy0LXRgNGB0LjRjyAo0LfQsNC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCAkUkVWSVNJT04pIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4MgotbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgotbXNnc3RyICIiCi0i0J/QvtGC0YDQtdCx0LjRgtC10LvRj9GCINC00LAg0YPQutCw0LbQtSDQtNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LDRgNCz0YPQvNC10L3RgtC4ICjQt9Cw0LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwICRBUkdTKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6ODkKLW1zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCi1tc2dzdHIgItCR0LXQtyDQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQv9GA0L7Qt9C+0YDQtdGGINGBINC40LfRhdC+0LTQsCDQvtGCINC60L7QvNCw0L3QtNCw0YLQsCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6OTQKLW1zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgotbXNnc3RyICIiCi0i0KHRgtCw0YDRgtC40YDQsNC90LUg0YHQsNC80L4g0YHQu9C10LQg0LjQt9Cx0L7RgCDQvdCwINGA0LDQt9C70LjQutCwICjQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAgJEZJTEVOQU1FINC90LUg0LUg0L/RgNCw0LfQvdCwKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTE4Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKLW1zZ3N0ciAi0JfQsNC00LDQudGC0LUg0LjQvNC1INC30LAg0LrQvtC80LDQvdC00LDRgtCwLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA0CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIiIKKyLRgdGK0LfQtNCw0LLQsNC90LUg0Lgg0LjQt9GH0LjRgdC70Y/QstCw0L3QtSDQvdCwINC60L7QvdGC0YDQvtC70L3QuCDRgdGD0LzQuCDQvdCwINC/0YDQvtC40LfQstC+0LvQvdC4INC00LDQvdC90Lgg0LfQsCDQv9C+0LLRgNC10LTQtdC90LggIgorItC+0LHQtdC60YLQuCDQt9CwINGC0YDQsNGB0LjRgNCw0L3QtSDQvdCwIEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtCy0LDQvdC1INC90LAg0KTQkNCZ0JvQsCDQstGB0LUg0LXQtNC90L4g0LUg0YEg0YLQvtC30Lgg0L/RitGCIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQvdCw0LvQuNGH0L3QuCDQutC+0LzQsNC90LTQuCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAi0LHQtdC3INCy0YrQstC10LTQtdC90LjRjyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINGB0L/QuNGB0YrQuiDRgSDQstGK0LLQtdC00LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5Cittc2dpZCAicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0LLRgdC40YfQutC4INC60L7QvdGE0LjQs9GD0YDQuNGA0LDRidC4INC/0YDQvtC80LXQvdC70LjQstC4IgorCisjOiBidWlsdGluL2hlbHAuYzo1MQorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINGB0YLRgNCw0L3QuNGG0LAg0L7RgiDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQviIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0YHRgtGA0LDQvdC40YbQsCDQvtGCINGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+INCyINGD0LXQsSDQsdGA0LDRg9C30YrRgCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTQKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90LAg0YHRgtGA0LDQvdC40YbQsCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTYKK21zZ2lkICJwcmludCBjb21tYW5kIGRlc2NyaXB0aW9uIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvtC/0LjRgdCw0L3QuNC10YLQviDQvdCwINC60L7QvNCw0L3QtNCwIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gW9Ca0J7QnNCQ0J3QlNCQXSIKKworIzogYnVpbHRpbi9oZWxwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0YTQvtGA0LzQsNGCINC90LAg0L/QvtC80L7RidGC0LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNAorbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwIOKAnmVtYWNzY2xpZW504oCcLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTE3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICLQktC10YDRgdC40Y/RgtCwINC90LAg4oCeZW1hY3NjbGllbnTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgItCf0YDQtdC60LDQu9C10L3QviDRgdGC0LDRgNCwINCy0LXRgNGB0LjRjyDQvdCwIOKAnmVtYWNzY2xpZW504oCcIOKAlCAlZCAoPCAyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxNDMgYnVpbHRpbi9oZWxwLmM6MTY1IGJ1aWx0aW4vaGVscC5jOjE3NSBidWlsdGluL2hlbHAuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIuKAniVz4oCcOiDQv9GK0YIg0LrRitC8INC90LXQv9C+0LTQtNGK0YDQttCw0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC10LPQu9C10LQg0L3QsFxuIgorIiDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQvi4gINCS0LzQtdGB0YLQviDQvdC10Y8g0L/RgNC+0LHQstCw0LnRgtC1IOKAnm1hbi48dG9vbD4uY21k4oCcLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIuKAniVz4oCcOiDQutC+0LzQsNC90LTQsCDQt9CwINC/0L7QtNC00YrRgNC20LDQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9GA0LXQs9C70LXQtCDQvdCwXG4iCisiINGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+LiAg0JLQvNC10YHRgtC+INC90LXRjyDQv9GA0L7QsdCy0LDQudGC0LUg4oCebWFuLjx0b29sPi5wYXRo4oCcLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIuKAniVz4oCcOiDQvdC10L/QvtC30L3QsNGC0LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQtdCz0LvQtdC0INC90LAg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgItC90LjQutC+0Y8g0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQtdCz0LvQtdC0INC90LAg0YDRitC60L7QstC+0LTRgdGC0LLQviDQvdC1INGD0YHQv9GPINC00LAg0L7QsdGA0LDQsdC+0YLQuCDQt9Cw0Y/QstC60LDRgtCwIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICIiCisi0L3QuNC60L7RjyDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC10LPQu9C10LQg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QuNGC0LUg0YHRgtGA0LDQvdC40YbQuCDQvdC1INGD0YHQv9GPINC00LAg0L7QsdGA0LDQsdC+0YLQuCAiCisi0LfQsNGP0LLQutCw0YLQsCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM0IGJ1aWx0aW4vaGVscC5jOjQ0NSBnaXQuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciCittc2dzdHIgIuKAniVz4oCcINC1INC/0YHQtdCy0LTQvtC90LjQvCDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDggZ2l0LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQvdC40Lcg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmFsaWFzLiVz4oCcOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDc3IGJ1aWx0aW4vaGVscC5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAi0YPQv9C+0YLRgNC10LHQsDogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgaGVscCBjb25maWfigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LLQuNC0INC90LAg0L7QsdC10LrRgtCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAi0L7Rh9Cw0LrQstCw0L3QuNGP0YIg0L7QsdC10LrRgiDigJ4lc+KAnCDQvdC1INCx0LUg0L/QvtC70YPRh9C10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQg0L3QsCDQvtCx0LXQutGC0LAg4oCeJXPigJw6INC+0YfQsNC60LLQsNGI0LUg0YHQtSDigJ4lc+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0L/RitC70L3QuCAlZCDQsdCw0LnRgiIKK21zZ3N0clsxXSAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0YrQu9C90Y/RgiAlZCDQsdCw0LnRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDQutGA0LDQuSDQvdCwINGE0LDQudC7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjkKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INGH0LXRgtC10L3QtSDQvdCwINCy0YXQvtC00L3QuNGC0LUg0LTQsNC90L3QuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC4INGB0LAg0L/QvtCy0LXRh9C1INC+0YIg0L3QsNC70LjRh9C90LjRgtC1INCx0LDQudGC0L7QstC1IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo2MDQKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICLQv9Cw0LrQtdGC0L3QuNGP0YIg0YTQsNC50Lsg0LUg0L/RgNC10LrQsNC70LXQvdC+INCz0L7Qu9GP0Lwg0LfQsCDRgtC10LrRg9GJ0LDRgtCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDRgtC40L/QsCDigJ5vZmZfdOKAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkxIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo5NQorbXNnaWQgInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7INC90LDQtNCy0LjRiNCw0LLQsCDQvNCw0LrRgdC40LzQsNC70L3QuNGPINCy0YrQt9C80L7QttC10L0g0YDQsNC30LzQtdGAIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgItC90LXRgdGK0L7RgtCy0LXRgtGB0YLQstC40LUg0LIg0L/QvtC00L/QuNGB0LAg0LrRitC8INC/0LDQutC10YLQvdC40Y8g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICLQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQsmXRgNGB0LjRjyDigJ4lPFBSSXUzMj7igJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAi0L/QvtCy0YDQtdC00LXQvSDQvtCx0LXQutGCINCyINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg0L/RgNC4INC+0YLQvNC10YHRgtCy0LDQvdC1ICU8UFJJdU1BWD46ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAi0LTQtdC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtdGC0L4g0YEg4oCeaW5mbGF0ZeKAnCDQstGK0YDQvdCwICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICLRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC+0YLQvNC10YHRgtCy0LDQvdC10YLQviDQt9CwINC+0LHQtdC60YLQsC3RgNCw0LfQu9C40LrQsCDQstC+0LTQuCDQtNC+INC/0YDQtdC/0YrQu9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjMKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgItGB0YLQvtC50L3QvtGB0YLRgtCwINC90LAg0L7RgtC80LXRgdGC0LLQsNC90LXRgtC+INC30LAg0L7QsdC10LrRgtCwLdGA0LDQt9C70LjQutCwINC1INC40LfQstGK0L0g0LTQuNCw0L/QsNC30L7QvdCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQstC40LQg0L7QsdC10LrRgiAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTYyCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICLQvdC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuywg0LvQuNC/0YHQstCwICU8UFJJdU1BWD4g0LHQsNC50YIiCittc2dzdHJbMV0gItC90LXQvtGH0LDQutCy0LDQvSDQutGA0LDQuSDQvdCwINGE0LDQudC7LCDQu9C40L/RgdCy0LDRgiAlPFBSSXVNQVg+INCx0LDQudGC0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICLRgdC10YDQuNC+0LfQvdCwINCz0YDQtdGI0LrQsCDQv9GA0Lgg0LTQtdC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtSDRgSDigJ5pbmZsYXRl4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2NAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIiIKKyLQodCq0JLQn9CQ0JTQldCd0JjQlSDQndCQINCh0KLQntCZ0J3QntCh0KLQmNCi0JUg0JfQkCDQodCj0JzQmNCi0JUg0JfQkCBTSEExOiDigJ4lc+KAnCDQndCQINCU0JLQkCDQoNCQ0JfQm9CY0KfQndCYINCe0JHQldCa0KLQkCEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1NworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0IGluZm8gJXMiCittc2dzdHIgItGB0YrRidC10YHRgtCy0YPQstCw0YnQuNGP0YIg0L7QsdC10LrRgiDQsiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAi0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40Y/RgiDQvtCx0LXQutGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L7QsdC10LrRgi1CTE9CIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ1Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrZWQgb2JqZWN0IgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC/0YDQvtCy0LXRgNC60LDRgtCwINC90LAg0L/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgItCd0Y/QutC+0Lgg0L7QsdC10LrRgtC4LCDQvdCw0YHQu9C10LTQvdC40YbQuCDQvdCwIOKAniVz4oCcLCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7RgdGC0LjQs9C90LDRgtC4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTkgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUwCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70L7QttC10L3QsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLQn9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgItCY0L3QtNC10LrRgdC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTIKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDQtSDQv9C+0LLRgNC10LTQtdC9ICjQvdC10LXQtNC90LDQutCy0Lgg0YHRg9C80Lgg0L/QviBTSEExKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NworbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyDRgSDigJ5mc3RhdOKAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAi0LIg0LrRgNCw0Y8g0L3QsCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7INC40LzQsCDQv9C+0LLRgNC10LTQtdC90Lgg0LTQsNC90L3QuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3MgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgIiIKKyLRhNCw0YLQsNC70L3QsCDQs9GA0LXRiNC60LAg0LLRitCyINGE0YPQvdC60YbQuNGP0YLQsCDigJ5wYXJzZV9wYWNrX29iamVjdHPigJwuICDQotC+0LLQsCDQtSDQs9GA0LXRiNC60LAg0LIgR2l0LCAiCisi0LTQvtC60LvQsNC00LLQsNC50YLQtSDRjyDQvdCwINGA0LDQt9GA0LDQsdC+0YLRh9C40YbQuNGC0LUsINC60LDRgtC+INC/0YDQsNGC0LjRgtC1INC1LdC/0LjRgdC80L4g0L3QsCDQsNC00YDQtdGBOiDigJ5naXRAdmdlci4iCisia2VybmVsLm9yZ+KAnC4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTUKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDRgdGK0L7RgtCy0LXRgtC90LjRgtC1INGA0LDQt9C70LjQutC4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INC90LjRiNC60LA6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ2Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiIgorItGE0LDRgtCw0LvQvdCwINCz0YDQtdGI0LrQsCDQstGK0LIg0YTRg9C90LrRhtC40Y/RgtCwIOKAnmNvbmNsdWRlX3BhY2vigJwuICDQotC+0LLQsCDQtSDQs9GA0LXRiNC60LAg0LIgR2l0LCAiCisi0LTQvtC60LvQsNC00LLQsNC50YLQtSDRjyDQvdCwINGA0LDQt9GA0LDQsdC+0YLRh9C40YbQuNGC0LUsINC60LDRgtC+INC/0YDQsNGC0LjRgtC1INC1LdC/0LjRgdC80L4g0L3QsCDQsNC00YDQtdGBOiDigJ5naXRAdmdlci4iCisia2VybmVsLm9yZ+KAnC4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyWzBdICLQtNC10LnRgdGC0LLQuNC10YLQviDQt9Cw0LLRitGA0YjQuCDRgSAlZCDQu9C+0LrQsNC70LXQvSDQvtCx0LXQutGCIgorbXNnc3RyWzFdICLQtNC10LnRgdGC0LLQuNC10YLQviDQt9Cw0LLRitGA0YjQuCDRgSAlZCDQu9C+0LrQsNC70L3QuCDQvtCx0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIiIKKyLQndC10L7Rh9Cw0LrQstCw0L3QsCDQv9C+0YHQu9C10LTQstCw0YnQsCDRgdGD0LzQsCDQt9CwINCz0YDQtdGI0LrQuCDQt9CwIOKAniVz4oCcICjQv9GA0LjRh9C40L3QsNGC0LAg0LzQvtC20LUg0LTQsCDQtSDQs9GA0LXRiNC60LAg0LIgIgorItC00LjRgdC60LApIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICLQsiDQv9Cw0LrQtdGC0LAg0LjQvNCwICVkINC90LXQvdCw0L/QsNGB0LLQsNGJ0LAg0YDQsNC30LvQuNC60LAiCittc2dzdHJbMV0gItCyINC/0LDQutC10YLQsCDQuNC80LAgJWQg0L3QtdC90LDQv9Cw0YHQstCw0YnQuCDRgNCw0LfQu9C40LrQuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAi0LTQvtCx0LDQstC10L3QuNGP0YIg0L7QsdC10LrRgiDQvdC1INC80L7QttC1INC00LAg0YHQtSDQutC+0LzQv9GA0LXRgdC40YDQsCDRgSDigJ5kZWZsYXRl4oCcOiAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAi0LvQvtC60LDQu9C90LjRj9GCINC+0LHQtdC60YIg4oCeJXPigJwg0LUg0L/QvtCy0YDQtdC00LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAi0LjQvNC10YLQviDQvdCwINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg4oCeJXPigJwg0L3QtSDQt9Cw0LLRitGA0YjQstCwINC90LAg4oCeLnBhY2vigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBINC90LAg0YTQsNC50LvQsCDigJ4lc+KAnCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGC0LLQsNGA0Y/QvdC10YLQviDQvdCwINC30LDQv9C40YHQsNC90LjRjyDRhNCw0LnQuyDigJ4lc+KAnCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ1OQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDRgtCy0LDRgNGP0L3QtdGC0L4g0L3QsCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDczCittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4MQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0LfQsCDQuNC90LTQtdC60YHQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitGF0YDQsNC90LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L3QsCDQtSDQvdC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y8g0L/QsNC60LXRgtC40YDQsNC90LU6IOKAnnBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPuKAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAi0KHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40Y/RgiDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAi0KHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40Y/RgiDQuNC90LTQtdC60YEg0LfQsCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY0MworIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICIlZCDQvtCx0LXQutGCINC90LUg0LUg0YDQsNC30LvQuNC60LAiCittc2dzdHJbMV0gIiVkINC+0LHQtdC60YLQsCDQvdC1INGB0LAg0YDQsNC30LvQuNC60LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAi0LTRitC70LbQuNC90LDRgtCwINC90LAg0LLQtdGA0LjQs9Cw0YLQsCDQtSAlZDogJWx1INC+0LHQtdC60YIiCittc2dzdHJbMV0gItC00YrQu9C20LjQvdCw0YLQsCDQvdCwINCy0LXRgNC40LPQsNGC0LAg0LUgJWQ6ICVsdSDQvtCx0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2ODkKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAi0J/RgNC+0YbQtdGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0YHQtSDQstGK0YDQvdC1INC60YrQvCDQv9GA0LXQtNC40YjQvdCw0YLQsCDRgNCw0LHQvtGC0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzQxCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzc3Cittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZml4LXRoaW7igJwg0LjQt9C40YHQutCy0LAg4oCeLS1zdGRpbuKAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc3OQorbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi4oCeLS1zdGRpbuKAnCDQuNC30LjRgdC60LLQsCDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBnaXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODUKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tdmVyaWZ54oCcINC40LfQuNGB0LrQstCwINC40LzQtSDQvdCwINC/0LDQutC10YLQtdC9INGE0LDQudC7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODMzIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1ODEKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQv9GA0L7QstC10YDQutCwINGBIOKAnmZzY2vigJwg0L3QsCDQv9Cw0LrQtdGC0L3QuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LvRg9GH0Lgg0LjQvdGE0L7RgNC80LDRhtC40Y8g0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINGI0LDQsdC70L7QvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC90LAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICLQstGA0YrQt9C60LDRgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90LAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0YHQuNC80LLQvtC70L3QsCDQstGA0YrQt9C60LAg4oCeJXPigJwg0LIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC/0LjRgNCwINCyIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDRiNCw0LHQu9C+0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiCittc2dzdHIgItC90Y/QvNCwINGI0LDQsdC70L7QvdC4INCyIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgItGI0LDQsdC70L7QvdC40YLQtSDQvdGP0LzQsCDQtNCwINCx0YrQtNCw0YIg0LrQvtC/0LjRgNCw0L3QuCDQvtGCIOKAniVz4oCcOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICLRhNCw0LnQu9C+0LLQtSDQvtGCINCy0LjQtCAlZCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsNGCIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC80LXRgdGC0Lgg0LIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiIgorItCY0L3QuNGG0LjQsNC70LjQt9C40YDQsNC90LUg0L3QsNC90L7QstC+INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC+LCDRgdC/0L7QtNC10LvQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0INCyIOKAniVzJXPigJxcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LDQvdC+0LLQviDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQg0LIg4oCeJXMlc+KAnFxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtSDQvdCwINC/0YDQsNC30L3Qviwg0YHQv9C+0LTQtdC70LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCDQsiDigJ4lcyVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9C40YDQsNC90LUg0L3QsCDQv9GA0LDQt9C90L4g0YXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0INCyIOKAniVzJXPigJxcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDY4Cittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPdCU0JjQoNCV0JrQotCe0KDQmNCvX9ChX9Co0JDQkdCb0J7QndCYXSBbLS0iCisic2hhcmVkWz3Qn9Cg0JDQktCQXV0gW9CU0JjQoNCV0JrQotCe0KDQmNCvXSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgItC/0YDQsNCy0LAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiIgorItGD0LrQsNC30LLQsNC90LUsINGH0LUg0YXRgNCw0L3QuNC70LjRidC10YLQviDQvdCwIEdpdCDRidC1INCx0YrQtNC1INGB0L/QvtC00LXQu9C10L3QviDQvtGCINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9ICIKKyLQv9C+0YLRgNC10LHQuNGC0LXQuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI5IGJ1aWx0aW4vaW5pdC1kYi5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC70LXQt9C1INCyINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAo0LjQu9C4IC0td29yay10cmVlPdCU0JjQoNCV0JrQotCe0KDQmNCvKSDQuNC30LjRgdC60LLQsCDRg9C60LDQt9Cy0LDQvdC10YLQviDQvdCwICVzICjQuNC70LggLS1naXQtIgorImRpcj3QlNCY0KDQldCa0KLQntCg0JjQrykiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICLQoNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQsiDigJ4lc+KAnCDQtSDQvdC10LTQvtGB0YLRitC/0L3QviIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNgorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisi0JvQldCa0KHQldCc0JBbKD18OinQodCi0J7QmdCd0J7QodCiXSnigKZdIFvQpNCQ0JnQm+KApl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTUKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICLQtNC40YDQtdC60YLQvdC+INGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTYKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICLQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINC/0YDQsNC30L3QuNGC0LUg0LXQv9C40LvQvtC30LgiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTkKK21zZ2lkICJ3aGVyZSB0byBwbGFjZSB0aGUgbmV3IHRyYWlsZXIiCittc2dzdHIgItC60YrQtNC1INC00LAg0YHQtSDQv9C+0YHRgtCw0LLQuCDQvdC+0LLQuNGP0YIg0LXQv9C40LvQvtCzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1LCDQsNC60L4g0LXQv9C40LvQvtCzINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMworbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGlzIG1pc3NpbmciCittc2dzdHIgItC00LXQudGB0YLQstC40LUg0L/RgNC4INC70LjQv9GB0LLQsNGJINC10L/QuNC70L7QsyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC10L/QuNC70L7Qt9C40YLQtSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICLQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/RgNCw0LLQuNC70LDRgtCwINC30LAg0L3QsNGB0YLRgNC+0LnQutC40YLQtSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDcKK21zZ2lkICJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIKK21zZ3N0ciAi0YHQu9C40LLQsNC90LUg0L3QsCDRgdGC0L7QudC90L7RgdGC0LjRgtC1INC/0L7RgdC70LXQtNCy0LDQvdC1INC+0YIg0LfQvdCw0YbQuCDQt9CwINC40L3RgtC10YDQstCw0LvQuCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDgKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICLQvtC/0YbQuNC4INC/0YDQuCDQsNC90LDQu9C40LciCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgIuKAni0tLeKAnCDQvdGP0LzQsCDRgdC/0LXRhtC40LDQu9C90L4g0LfQvdCw0YfQtdC90LjQtSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTEKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICLQtdC/0LjQu9C+0LMiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEyCittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgItC10L/QuNC70L7Qt9C4INC30LAg0LTQvtCx0LDQstGP0L3QtSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS10cmFpbGVy4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4tLW5hbWUtb25seeKAnCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzMKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICLQvdC1INC1INC30LDQtNCw0LTQtdC9INCy0YXQvtC00LXQvSDRhNCw0LnQuyDQt9CwINGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQvNGP0YHRgtC+IgorCisjOiBidWlsdGluL2xvZy5jOjU2Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBb0J7Qn9Cm0JjQr+KApl0gW9CU0JjQkNCf0JDQl9Ce0J1f0J3QkF/QktCV0KDQodCY0JjQotCVXSBbWy0tXSDQn9Cq0KLigKZdIgorCisjOiBidWlsdGluL2xvZy5jOjU3Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFvQntCf0KbQmNCv4oCmXSDQntCR0JXQmtCi4oCmIgorCisjOiBidWlsdGluL2xvZy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0L7Qv9GG0LjRjyDigJ4tLWRlY29yYXRl4oCcOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQt9GF0L7QtNC90LjRjyDQutC+0LQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc1Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIiIKKyLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGE0LDQudC7INC30LAg0YHRitC+0YLQstC10YLRgdGC0LLQuNGP0YLQsCDQvdCwINC40LzQtdC90LDRgtCwINC4INCw0LTRgNC10YHQuNGC0LUg0L3QsCDQtS3Qv9C+0YnQsCAo4oCeLiIKKyJtYWlsbWFw4oCcKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzcKK21zZ2lkICJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgItGB0L/QtdGG0LjQsNC70LXQvSDRhNC+0YDQvNCw0YIg0YHQsNC80L4g0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDQvdCwINCo0JDQkdCb0J7QndCwIgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLQsdC10Lcg0YHQv9C10YbQuNCw0LvQtdC9INGE0L7RgNC80LDRgiDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0L3QsNC/0LDRgdCy0LDRidC4INC90LAg0KjQkNCR0JvQntCd0LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutC4INC90LAg0YTQvtGA0LzQsMyA0YLQsCDQvdCwINC40LfQstC10LbQtNCw0L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIiIKKyLQntCx0YDQsNCx0L7RgtCy0LDQvdC1INGB0LDQvNC+INC90LAg0YDQtdC00L7QstC10YLQtSDQstGK0LIg0YTQsNC50LvQsCDQsiDQtNC40LDQv9Cw0LfQvtC90LAg0L7RgiBuINC00L4gbSDQstC60LvRjtGH0LjRgtC10LvQvdC+LiAgIgorItCR0YDQvtC10L3QtdGC0L4g0LfQsNC/0L7Rh9Cy0LAg0L7RgiAxIgorCisjOiBidWlsdGluL2xvZy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgItCg0LXQt9GD0LvRgtCw0YI6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6INC/0L7QstGA0LXQtNC10L0g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUwIGJ1aWx0aW4vbG9nLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L06ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHR5cGU6ICVkIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0LXQvSDQstC40LQ6ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiCittc2dzdHIgIiVzOiDQvdC10L/RgNCw0LLQuNC70L3QviDQv9GA0LjQtNGA0YPQttCw0LLQsNGJ0L4g0L/QuNGB0LzQviDQvtGCINGA0LXQttC40LzQsCDQvdCwINC+0L/QuNGB0LDQvdC40LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODIxCittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAi0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDigJ5mb3JtYXQuaGVhZGVyc+KAnCIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQtNGK0LvQs9C+INC40LzQtSDQvdCwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQt9CwINC40LfRhdC+0LTQvdCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCLdC60YDRitC/0LrQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTY5Cittc2dpZCAibmVlZCBleGFjdGx5IG9uZSByYW5nZSIKK21zZ3N0ciAi0YLRgNGP0LHQstCwINC00LAg0LfQsNC00LDQtNC10YLQtSDRgtC+0YfQvdC+INC10LTQuNC9INC00LjQsNC/0LDQt9C+0L0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTc5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgItC90LUg0LUg0LTQuNCw0L/QsNC30L7QvSIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAi0L/RgNC40LTRgNGD0LbQsNCy0LDRidC+0YLQviDQv9C40YHQvNC+INGC0YDRj9Cx0LLQsCDQtNCwINC1INGE0L7RgNC80LDRgtC40YDQsNC90L4g0LrQsNGC0L4g0LUt0L/QuNGB0LzQviIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQ5Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBjb3Zlci1sZXR0ZXIgZmlsZSIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0YDQuNC00YDRg9C20LDQstCw0YnQviDQv9C40YHQvNC+IgorCisjOiBidWlsdGluL2xvZy5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINC90LAg0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0LfQsCDQvtGC0LPQvtCy0L7RgCDigJ5pbi1yZXBseS10b+KAnDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBb0J7Qn9Cm0JjQr+KApl0gW9Ce0KIgfCDQlNCY0JDQn9CQ0JfQntCdX9Cd0JBf0JLQldCg0KHQmNCY0KLQlV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICLQvNC+0LbQtSDQtNCwINGD0LrQsNC20LXRgtC1INC80LDQutGB0LjQvNGD0Lwg0LXQtNC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LfQsCDQuNC30YXQvtC0IgorCisjOiBidWlsdGluL2xvZy5jOjE0MjQgYnVpbHRpbi9sb2cuYzoyMTk3IGJ1aWx0aW4vbG9nLmM6MjE5OSBidWlsdGluL2xvZy5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21taXQgJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQviDQv9C+0LTQsNCy0LDQvdC1OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM0IGJ1aWx0aW4vcmVwbGFjZS5jOjU4IGJ1aWx0aW4vcmVwbGFjZS5jOjIwNworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0YPQutCw0LfQsNGC0LXQuyDQuNC70Lgg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L3QuNGJ0L4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgItGC0L7Rh9C90LDRgtCwINCx0LDQt9CwINC30LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtCwIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKK21zZ2lkICIiCisiZmFpbGVkIHRvIGdldCB1cHN0cmVhbSwgaWYgeW91IHdhbnQgdG8gcmVjb3JkIGJhc2UgY29tbWl0IGF1dG9tYXRpY2FsbHksXG4iCisicGxlYXNlIHVzZSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHRvIHRyYWNrIGEgcmVtb3RlIGJyYW5jaC5cbiIKKyJPciB5b3UgY291bGQgc3BlY2lmeSBiYXNlIGNvbW1pdCBieSAtLWJhc2U9PGJhc2UtY29tbWl0LWlkPiBtYW51YWxseSIKK21zZ3N0ciAiIgorItGB0LvQtdC00LXQvdC40Y/RgiDQutC70L7QvSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YPRgdGC0LDQvdC+0LLQtdC9LiAg0JDQutC+INC40YHQutCw0YLQtSDRgNGK0YfQvdC+INC00LAg0LPQvlxuIgorItC30LDQtNCw0LTQtdGC0LUsINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10b+KAnC5cbiIKKyLQnNC+0LbQtdGC0LUg0YDRitGH0L3QviDQtNCwINC30LDQtNCw0LTQtdGC0LUg0LHQsNC30L7QstC+INC/0L7QtNCw0LLQsNC90LUg0YfRgNC10Lcg4oCeLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD7igJwuIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjMKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICLRgtC+0YfQvdCw0YLQsCDQsdCw0LfQsCDQv9GA0Lgg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtCwIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgItCx0LDQt9C+0LLQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjQutGK0YIg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQstC10YDRgdC40LjRgtC1IgorCisjOiBidWlsdGluL2xvZy5jOjE0NzgKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAi0LHQsNC30L7QstC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQtSDQsiDRgdC/0LjRgdGK0LrQsCDRgSDQstC10YDRgdC40LjRgtC1IgorCisjOiBidWlsdGluL2xvZy5jOjE1MzEKK21zZ2lkICJjYW5ub3QgZ2V0IHBhdGNoIGlkIgorbXNnc3RyICLQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGK0YIg0L3QsCDQutGA0YrQv9C60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L7Qv9GA0LXQtNC10LvRj9C90LUg0L3QsCDQtNC40LDQv9Cw0LfQvtC90LjRgtC1INC30LAg0YDQsNC30LvQuNC60LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYyOQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgItC90L7QvNC10YDQsNGG0LjRjyDigJ5bUEFUQ0ggbi9tXeKAnCDQtNC+0YDQuCDQuCDQv9GA0Lgg0LXQtNC40L3RgdGC0LLQtdC90LAg0LrRgNGK0L/QutCwIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAi0L3QvtC80LXRgNCw0YbQuNGPIOKAnltQQVRDSF3igJwg0LTQvtGA0Lgg0Lgg0L/RgNC4INC80L3QvtC20LXRgdGC0LLQviDQutGA0YrQv9C60LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzNgorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQutGA0YrQv9C60LjRgtC1INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQuNC30YXQvtC0IgorCisjOiBidWlsdGluL2xvZy5jOjE2MzgKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L/RgNC40LTRgNGD0LbQsNCy0LDRidC+INC/0LjRgdC80L4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MAorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAi0L/RgNC+0YHRgtCwINGH0LjRgdC70L7QstCwINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGCINC30LAg0LjQvNC10L3QsNGC0LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUt0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDEKK21zZ2lkICJzZngiCittc2dzdHIgItCX0J3QkNCm0JgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MgorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGC0LXQt9C4INCX0J3QkNCm0Jgg0LfQsCDRgdGD0YTQuNC60YEg0LLQvNC10YHRgtC+IOKAni5wYXRjaOKAnCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ0Cittc2dpZCAic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIKK21zZ3N0ciAi0L3QvtC80LXRgNC40YDQsNC90LXRgtC+INC90LAg0LrRgNGK0L/QutC40YLQtSDQtNCwINC30LDQv9C+0YfQstCwINC+0YIg0YLQvtC30Lgg0JHQoNCe0JksINCwINC90LUg0YEgMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICLQvtGC0LHQtdC70Y/Qt9Cy0LDQvdC1LCDRh9C1INGC0L7QstCwINC1IE4t0YLQsNGC0LAg0L/QvtGA0LXQtNC90LAg0YDQtdC00LDQutGG0LjRjyDQvdCwINC/0L7RgNC10LTQuNGG0LDRgtCwINC+0YIg0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDgKK21zZ2lkICJVc2UgW1JGQyBQQVRDSF0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwIOKAnltSRkMgUEFUQ0hd4oCcINCy0LzQtdGB0YLQviDigJ5bUEFUQ0hd4oCcIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTEKK21zZ2lkICJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uLW1vZGUiCittc2dzdHIgItGA0LXQttC40Lwt0L/RgNC40LTRgNGD0LbQsNCy0LDRidC+LdC/0LjRgdC80L4t0L/Qvi3QvtC/0LjRgdCw0L3QuNC1IgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICIiCisi0LPQtdC90LXRgNC40YDQsNC90LUg0L3QsCDRh9Cw0YHRgtC40YLQtSDQvdCwINC/0YDQuNC00YDRg9C20LDQstCw0YnQvtGC0L4g0L/QuNGB0LzQviDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwINC+0L/QuNGB0LDQvdC40LXRgtC+INC90LAgIgorItC60LvQvtC90LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgtC+0LfQuCDigJ5b0J/QoNCV0KTQmNCa0KFd4oCcINCy0LzQtdGB0YLQviDigJ5bUEFUQ0hd4oCcIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTcKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC40LfRhdC+0LTQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQsiDRgtCw0LfQuCDQlNCY0KDQldCa0KLQntCg0JjQryIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgItCx0LXQtyDQtNC+0LHQsNCy0Y/QvdC1L9C80LDRhdCw0L3QtSDQvdCwINC/0YDQtdGE0LjQutGB0LAg4oCeW1BBVENIXeKAnCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYzCittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutC4INC80LXQttC00YMg0LTQstC+0LjRh9C90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICLQsiDQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDigJ5Gcm9tOuKAnCAo0L7Rgikg0LrQvtC90YLRgNC+0LvQvdCw0YLQsCDRgdGD0LzQsCDQtNCwINC1INGB0LDQvNC+INC+0YIg0L3Rg9C70LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAi0LHQtdC3INC60YDRitC/0LrQuCwg0LrQvtC40YLQviDQv9GA0LjRgdGK0YHRgtCy0LDRgiDQsiDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9IgorCisjOiBidWlsdGluL2xvZy5jOjE2NjkKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0LLRitCyINGE0L7RgNC80LDRgiDQt9CwINC60YDRitC/0LrQuCwg0LAg0L3QsCDQsiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPICjQutGA0YrQv9C60LAg0Lgg0YHRgtCw0YLQuNGB0YLQuNC60LApIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzEKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgItCe0L/RhtC40Lgg0L/RgNC4INC40LfQv9GA0LDRidCw0L3QtSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcyCittc2dpZCAiaGVhZGVyIgorbXNnc3RyICLQl9CQ0JPQm9CQ0JLQndCQX9Cn0JDQodCiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzMKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YLQsNC30Lgg0JfQkNCT0JvQkNCS0J3QkF/Qp9CQ0KHQoiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImVtYWlsIgorbXNnc3RyICLQlS3Qn9Ce0KnQkCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQt9Cw0LPQu9Cw0LLQvdCwINGH0LDRgdGCIOKAnlRvOuKAnCAo0LTQvikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LfQsNCz0LvQsNCy0L3QsCDRh9Cw0YHRgiDigJ5DYzrigJwgKNC4INC00L4pIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAi0JjQlNCV0J3QotCY0KfQndCe0KHQoiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc5Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorItC30LDQtNCw0LLQsNC90LUg0L3QsCDQsNC00YDQtdGB0LAg0LIg0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg4oCeRnJvbeKAnCAo0L7Rgikg0LTQsCDQtSDRgtCw0LfQuCDQmNCU0JXQndCi0JjQp9Cd0J7QodCiLiAg0JDQutC+ICIKKyLQvdC1INC1INC30LDQtNCw0LTQtdC90LAg0YLQsNC60LDQstCwLCDRgdC1INCy0LfQuNC80LAg0LDQtNGA0LXRgdCwINC90LAg0L/QvtC00LDQstCw0YnQuNGPIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODEKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICLQmNCU0JXQndCi0JjQpNCY0JrQkNCi0J7QoF/QndCQX9Ch0KrQntCR0KnQldCd0JjQlSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgyCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICIiCisi0L/RitGA0LLQvtGC0L4g0YHRitC+0LHRidC10L3QuNC1INC00LAg0LUg0LIg0L7RgtCz0L7QstC+0YAg0L3QsCDQtS3Qv9C40YHQvNC+0YLQviDRgSDRgtC+0LfQuCAiCisi0JjQlNCV0J3QotCY0KTQmNCa0JDQotCe0KBf0J3QkF/QodCq0J7QkdCp0JXQndCY0JUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MyBidWlsdGluL2xvZy5jOjE2ODYKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAi0LPRgNCw0L3QuNGG0LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgItC/0YDQuNC60YDQtdC/0Y/QvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg3Cittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAi0LLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCDQsiDRgtC10LrRgdGC0LAg0L3QsCDQv9C40YHQvNCw0YLQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkxCittc2dpZCAiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiCittc2dzdHIgIiIKKyLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC90LjRiNC60Lgg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40Y/RgtCwLiAg0KHQotCY0JvRitGCINC1IOKAnnNoYWxsb3figJwgKNC/0LvQuNGC0YrQuikg0LjQu9C4ICIKKyLigJ5kZWVw4oCcICjQtNGK0LvQsdC+0LopIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTMKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgItC/0L7QtNC/0LjRgSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk0Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QvtC70LUg0LfQsCDQv9C+0LTQv9C40YEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NQorbXNnaWQgImJhc2UtY29tbWl0IgorbXNnc3RyICLQkdCQ0JfQntCS0J5f0J/QntCU0JDQktCQ0J3QlSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk2Cittc2dpZCAiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC90LXQvtCx0YXQvtC00LjQvNC+0YLQviDQkdCQ0JfQvtCy0L4g0LTRitGA0LLQviDQutGK0Lwg0L/QvtGA0LXQtNC40YbQsNGC0LAg0L7RgiDQutGA0YrQv9C60LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0L7QtNC/0LjRgSDQvtGCINGE0LDQudC7IgorCisjOiBidWlsdGluL2xvZy5jOjE2OTkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDQutGA0YrQv9C60LjRgtC1IgorCisjOiBidWlsdGluL2xvZy5jOjE3MDEKK21zZ2lkICJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QsNC/0YDQtdC00YrQutCwINCy0YrQsiDRhNCw0LfQsNGC0LAg0L3QsCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQutGA0YrQv9C60LjRgtC1IgorCisjOiBidWlsdGluL2xvZy5jOjE3MDMKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmV2PiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INGB0L/RgNGP0LzQviDQktCV0KDQodC40Y/RgtCwINCyINC/0YDQuNC00YDRg9C20LDQstCw0YnQvtGC0L4g0L/QuNGB0LzQviDQuNC70Lgg0LXQtNC40L3RgdGC0LLQtdC90LAgIgorItC60YDRitC/0LrQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKyLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0YHQv9GA0Y/QvNC+INGD0LrQsNC30LDRgtC10LvRjyDQvdCwINCS0JXQoNCh0LjRj9GC0LAg0LIg0L/RgNC40LTRgNGD0LbQsNCy0LDRidC+0YLQviDQv9C40YHQvNC+ICIKKyLQuNC70Lgg0LXQtNC40L3RgdGC0LLQtdC90LAg0LrRgNGK0L/QutCwIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDgKK21zZ2lkICJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICLQv9GA0L7RhtC10L3RgiDQt9CwINC/0YDQtdGC0LXQs9C70Y/QvdC1INC/0YDQuCDQvtGG0LXQvdC60LAg0L3QsCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAi0LPRgNC10YjQvdCwINC40LTQtdC90YLQuNGH0L3QvtGB0YI6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDcKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLW7igJwg0Lgg4oCeLWvigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tc3ViamVjdC1wcmVmaXjigJwv4oCeLXJmY+KAnCDQuCDigJ4ta+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9sb2cuYzoxODE3Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1uYW1lLW9ubHnigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINCz0LXQvdC10YDQuNGA0LDQvdC10YLQviDQvdCwINC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9sb2cuYzoxODE5Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLW5hbWUtc3RhdHVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQs9C10L3QtdGA0LjRgNCw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgyMQorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1jaGVja+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LPQtdC90LXRgNC40YDQsNC90LXRgtC+INC90LAg0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL2xvZy5jOjE4NTQKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAiIgorItC40LfRhdC+0LTRitGCINC80L7QttC1INC00LAg0LjQu9C4INGB0YLQsNC90LTQsNGA0YLQvdC40Y/Rgiwg0LjQu9C4INC00LAg0LUg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y8sINC90L4g0L3QtSDQuCDQtNCy0LXRgtC1LiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTU4Cittc2dpZCAiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1pbnRlcmRpZmbigJwg0LjQt9C40YHQutCy0LAg0L7Qv9GG0LjRjyDigJ4tLWNvdmVyLWxldHRlcuKAnCDQuNC70Lgg0LXQtNC40L3RgdGC0LLQtdC90LAg0LrRgNGK0L/QutCwIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjIKK21zZ2lkICJJbnRlcmRpZmY6IgorbXNnc3RyICLQoNCw0LfQu9C40LrQsCDQsiDRgNCw0LfQu9C40LrQuNGC0LU6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJkaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LAg0LIg0YDQsNC30LvQuNC60LjRgtC1INGB0L/RgNGP0LzQviB2JWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tY3JlYXRpb24tZmFjdG9y4oCcINC40LfQuNGB0LrQstCwINC+0L/RhtC40Y8g4oCeLS1yYW5nZS1kaWZm4oCcIgorCisjOiBidWlsdGluL2xvZy5jOjE5NzMKK21zZ2lkICItLXJhbmdlLWRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1yYW5nZS1kaWZm4oCcINC40LfQuNGB0LrQstCwINC+0L/RhtC40Y8g4oCeLS1jb3Zlci1sZXR0ZXLigJwg0LjQu9C4INC10LTQuNC90YHRgtCy0LXQvdCwINC60YDRitC/0LrQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgxCittc2dpZCAiUmFuZ2UtZGlmZjoiCittc2dzdHIgItCU0LjQsNC/0LDQt9C+0L3QvdCwINGA0LDQt9C70LjQutCwOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICLQlNC40LDQv9Cw0LfQvtC90L3QsCDRgNCw0LfQu9C40LrQsCDRgdC/0YDRj9C80L4gdiVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDRgSDQv9C+0LTQv9C40YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC40LfRhdC+0LTQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFvQntCi0JTQkNCb0JXQp9CV0J1f0JrQm9Ce0J0gW9CS0KDQqtClIFvQn9Cg0JXQlNCV0JtdXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKyLQodC70LXQtNC10L3QuNGP0YIg0L7RgtC00LDQu9C10YfQtdC9INC60LvQvtC9INC90LUg0LHQtSDQvtGC0LrRgNC40YIsINC30LDRgtC+0LLQsCDQuNC30YDQuNGH0L3QviDQt9Cw0LTQsNC50YLQtSAiCisi0J7QotCU0JDQm9CV0KfQldCdX9Ca0JvQntCdLlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDcwCittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgW9Ce0J/QptCY0K/igKZdIFvQpNCQ0JnQm+KApl0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjYKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INGBINC10LTQvdC+0LHRg9C60LLQtdC90Lgg0YTQu9Cw0LPQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjgKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAi0LzQsNC70LrQuCDQsdGD0LrQstC4INC30LAg0YTQsNC50LvQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC00LAg0YHQtSDRgdGH0LXRgtCw0YIg0LfQsCDQvdC10L/RgNC+0LzQtdC90LXQvdC4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAi0LzQsNC70LrQuCDQsdGD0LrQstC4INC30LAg0YTQsNC50LvQvtCy0LXRgtC1INC30LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmZzbW9uaXRvciBjbGVhbuKAnCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMgorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQutC10YjQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LfRgtGA0LjRgtC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzOAorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LTRgNGD0LPQuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQs9C90L7RgNC40YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LzQtdGC0L4g0L3QsCDQvtCx0LXQutGC0LAg0LfQsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSwg0LrQvtC40YLQviDRgtGA0Y/QsdCy0LAg0LTQsCDQsdGK0LTQsNGCINC40LfRgtGA0LjRgtC4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQuNC80LXRgtC+INC90LAg0LTRgNGD0LPQuNGC0LUgKNC90LXRgdC70LXQtNC10L3QuNGC0LUpINC00LjRgNC10LrRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC30L3QsNGG0LjRgtC1INC30LAg0LrRgNCw0Lkg0L3QsCDRgNC10LQg0LLRitCyINGE0LDQudC70L7QstC10YLQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GA0LDQt9C90LjRgtC1INC00LjRgNC10LrRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdC10YHQu9C10YLQuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0L7RgtC80Y/QvdCwINC90LAg0YDQsNC30YDQtdGI0LXQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTgKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDQqNCQ0JHQm9Ce0J3QsCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgItGI0LDQsdC70L7QvdC40YLQtSDQt9CwINC40LPQvdC+0YDQuNGA0LDQvdC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQsNGCINC+0YIg0YLQvtC30Lgg0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjQKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAiIgorItC40LfRh9C40YLQsNC90LUg0L3QsCDQtNC+0L/RitC70L3QuNGC0LXQu9C90LjRgtC1INGI0LDQsdC70L7QvdC4INC30LAg0LjQs9C90L7RgNC40YDQsNC90LUg0L/QviDQtNC40YDQtdC60YLQvtGA0LjRjyDQvtGCINGC0L7Qt9C4INCk0JDQmdCbIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY2Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC+INC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDQvtGCIEdpdCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLQv9GK0YLQuNGJ0LDRgtCwINC00LAg0YHQsCDQvtGC0L3QvtGB0LjRgtC10LvQvdC4INGB0L/RgNGP0LzQviDQvtGB0L3QvtCy0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCDQv9GA0L7QtdC60YLQsCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICLRgNC10LrRg9GA0YHQuNCy0L3QviDQvtCx0YXQvtC20LTQsNC90LUg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NQorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAi0LPRgNC10YjQutCwLCDQsNC60L4g0L3Rj9C60L7QuSDQvtGCINGC0LXQt9C4INCk0JDQmdCb0L7QstC1INC90LUg0LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAi0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQniIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NworbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIiIKKyLRgdGH0LjRgtCw0L3QtSwg0YfQtSDQv9GK0YLQuNGJ0LDRgtCwINC40LfRgtGA0LjRgtC4INGB0LvQtdC0INCj0JrQkNCX0JDQotCV0JvRj1/QmtCq0Jxf0JTQqtCg0JLQniDQstGB0LUg0L7RidC1INGB0YrRidC10YHRgtCy0YPQstCw0YIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPdCa0J7QnNCQ0J3QlNCQXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFvQpdCg0JDQndCY0JvQmNCp0JUgW9Cj0JrQkNCX0JDQotCV0JvigKZdXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LDQtNGA0LXRgdC40YLQtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJleGVjIgorbXNnc3RyICLQmtCe0JzQkNCd0JTQkCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MSBidWlsdGluL2xzLXJlbW90ZS5jOjYzCittc2dpZCAicGF0aCBvZiBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSBob3N0IgorbXNnc3RyICLQv9GK0YIg0LrRitC8INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtdXBsb2FkLXBhY2vigJwg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QsNGC0LAg0LzQsNGI0LjQvdCwIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAi0YHQsNC80L4g0LXRgtC40LrQtdGC0LjRgtC1IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgItGB0LDQvNC+INCy0YrRgNGF0L7QstC10YLQtSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NworbXNnaWQgImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIgorbXNnc3RyICLQsdC10Lcg0L/RgNC+0YHQu9C10LTRj9Cy0LDQvdC1INC90LAg0L3QtdC/0YDQtdC60LjRgtC1INC10YLQuNC60LXRgtC4IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgItCy0LfQuNC80LDQvdC1INC/0YDQtdC00LLQuNC0INC90LAg4oCedXJsLtCR0JDQl9CQLmluc3RlYWRPZuKAnCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MgorbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAi0LjQt9GF0L7QtCDRgSDQutC+0LQgMiwg0LDQutC+INC90LUg0YHQtSDQvtGC0LrRgNC40Y/RgiDRgdGK0LLQv9Cw0LTQsNGJ0Lgg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvRjyDQt9Cw0LXQtNC90L4g0YEg0L7QsdC10LrRgtCwINGB0L7Rh9C10L0g0L7RgiDQvdC10LPQviIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBb0J7Qn9Cm0JjQr+KApl0g0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQniBb0J/QqtCi4oCmXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI4Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQtNGK0YDQstC10YLQsCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICLRgNC10LrRg9GA0YHQuNCy0L3QviDQvtCx0YXQvtC20LTQsNC90LUg0L/QvtC00LTRitGA0LLQtdGC0LDRgtCwIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzIKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQtNGK0YDQstC10YLQsNGC0LAg0L/RgNC4INGA0LXQutGD0YDRgdC40LLQvdC+0YLQviDQvtCx0YXQvtC20LTQsNC90LUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgItGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0YEg0L3Rg9C70LXQstC40Y8g0LfQvdCw0Log4oCeTlVM4oCcIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzYKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQvNC10YDQsCDQvdCwINC+0LHQtdC60YLQsCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM4IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MAorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQv9GK0LvQvdC40YLQtSDQuNC80LXQvdCwINC90LAg0L/RitGC0LjRidCw0YLQsCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ1Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YbRj9C70L7RgtC+INC00YrRgNCy0L4sINC90LUg0YHQsNC80L4g0L3QsCDRgtC10LrRg9GJ0LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPICjQstC60LvRjtGH0LLQsCDQvtC/0YbQuNGP0YLQsCAiCisi4oCeLS1mdWxsLW5hbWXigJwpIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICLQv9GA0LDQt9C90LAg0L/QvtGJ0LXQvdGB0LrQsCDQutGD0YLQuNGPIG1ib3g6IOKAniVz4oCcIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFvQntCf0KbQmNCv4oCmXSBb0J/QntCU0JDQktCQ0J3QleKApl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU3Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tbeKAnCDQuNC30LjRgdC60LLQsCDRgdGC0L7QudC90L7RgdGCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC40LfQuNGB0LrQstCwINGB0YLQvtC50L3QvtGB0YIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAi0J3Rj9C80LAg0YLQsNC60LDQstCwINGB0YLRgNCw0YLQtdCz0LjRjyDQt9CwINGB0LvQuNCy0LDQvdC1OiDigJ4lc+KAnC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLQndCw0LvQuNGH0L3QuNGC0LUg0YHRgtGA0LDRgtC10LPQuNC4INGB0LA6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLQlNC+0L/RitC70L3QuNGC0LXQu9C90LjRgtC1INGB0YLRgNCw0YLQtdCz0LjQuCDRgdCwOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NCBidWlsdGluL3B1bGwuYzoxNTIKK21zZ2lkICJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwINGB0LvQtdC0INC30LDQstGK0YDRiNCy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDcgYnVpbHRpbi9wdWxsLmM6MTU1Cittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsNGC0LAg0YHQu9C10LQg0LfQsNCy0YrRgNGI0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OCBidWlsdGluL3B1bGwuYzoxNTgKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIo0L/RgdC10LLQtNC+0L3QuNC8INC90LAg4oCeLS1zdGF04oCcKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MCBidWlsdGluL3B1bGwuYzoxNjEKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyLQtNC+0LHQsNCy0Y/QvdC1ICjQvdCwINC80LDQutGB0LjQvNGD0Lwg0YLQsNC60YrQsiDQkdCg0J7QmSkg0LfQsNC/0LjRgdC4INC+0YIg0YHRitC60YDQsNGC0LXQvdC40Y8g0LbRg9GA0L3QsNC7INCyINGB0YrQvtCx0YnQtdC90LjQtdGC0L4gIgorItC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MyBidWlsdGluL3B1bGwuYzoxNjcKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LXQtNC90L4g0L/QvtC00LDQstCw0L3QtSDQstC80LXRgdGC0L4g0LjQt9Cy0YrRgNGI0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NSBidWlsdGluL3B1bGwuYzoxNzAKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgItC40LfQstGK0YDRiNCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSDQv9GA0Lgg0YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUgKNGB0YLQsNC90LTQsNGA0YLQvdC+INC00LXQudGB0YLQstC40LUpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU3IGJ1aWx0aW4vcHVsbC5jOjE3MworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAi0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL21lcmdlLmM6MjU5Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC/0YDQtdCy0YrRgNGC0LDQvdC1ICjRgdGC0LDQvdC00LDRgNGC0L3QviDQtNC10LnRgdGC0LLQuNC1KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MSBidWlsdGluL3B1bGwuYzoxODAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUsINCw0LrQviDQv9GA0LXQstGK0YDRgtCw0L3QtdGC0L4g0LUg0L3QtdCy0YrQt9C80L7QttC90L4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjUgYnVpbHRpbi9wdWxsLmM6MTgzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLQv9GA0L7QstC10YDQutCwLCDRh9C1INGD0LrQsNC30LDQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC1INGBINC/0YDQsNCy0LjQu9C10L0g0L/QvtC00L/QuNGBINC90LAgR1BHIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY2IGJ1aWx0aW4vbm90ZXMuYzo3ODcgYnVpbHRpbi9wdWxsLmM6MTg3CisjOiBidWlsdGluL3JlYmFzZS5jOjUxMiBidWlsdGluL3JlYmFzZS5jOjE1MzEgYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAi0KHQotCg0JDQotCV0JPQmNCvIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY3IGJ1aWx0aW4vcHVsbC5jOjE4OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAi0KHQotCg0JDQotCV0JPQmNCvINC30LAg0YHQu9C40LLQsNC90LUsINC60L7Rj9GC0L4g0LTQsCDRgdC1INC/0L7Qu9C30LLQsCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgItCe0J/QptCY0K890KHQotCe0JnQndCe0KHQoiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL3B1bGwuYzoxOTIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLQntCf0KbQmNCvINC30LAg0LjQt9Cx0YDQsNC90LDRgtCwINGB0YLRgNCw0YLQtdCz0LjRjyDQt9CwINGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL21lcmdlLmM6MjcxCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICLQodCq0J7QkdCp0JXQndCY0JUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LXRgtC+INGB0YrRgSDRgdC70LjQstCw0L3QtSAo0L/RgNC4INGB0YrRidC40L3RgdC60Lgg0YHQu9C40LLQsNC90LjRjykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzgKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAi0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YLQtdC60YPRidC+0YLQviDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MAorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQsdC10Lcg0L/RgNC+0LzRj9C90LAg0L3QsCDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MgorbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLQv9GA0L7QtNGK0LvQttCw0LLQsNC90LUg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL21lcmdlLmM6Mjg0IGJ1aWx0aW4vcHVsbC5jOjE5OQorbXNnaWQgImFsbG93IG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC1INC90LAg0L3QtdC30LDQstC40YHQuNC80Lgg0LjRgdGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTAKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiIgorItCx0LXQtyDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60YPQutC40YLQtSDQv9GA0LXQtNC4INC/0L7QtNCw0LLQsNC90LUg0Lgg0YHQu9C40LLQsNC90LUg0Lgg0L/RgNC4INC/0YDQvtC80Y/QvdCwINC90LAgIgorItGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1IChwcmUtbWVyZ2UtY29tbWl0INC4IGNvbW1pdC1tc2cpIgorCisjOiBidWlsdGluL21lcmdlLmM6MzA3Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INGB0LrQsNGC0LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0LrQsNGC0LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQvtCx0LXQutGCOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMzOSBidWlsdGluL21lcmdlLmM6MzU2Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC/0YDQvtGH0LjRgtCw0L3QtSDQvdCwINC+0LHQtdC60YIt0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKNC90Y/QvNCwINC60LDQutCy0L4g0LTQsCDRgdC1INCy0LrQsNGA0LApIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAi0JLQutCw0YDQsNC90L4g0L/QvtC00LDQstCw0L3QtSDigJQg0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdGP0LzQsCDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9XG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICIiCisi0JvQuNC/0YHQstCwINGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSDigJQg0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdGP0LzQsCDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9XG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQvdC40Lcg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmJyYW5jaC4lcy5tZXJnZW9wdGlvbnPigJw6IOKAniVz4oCcIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA1Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAi0J/QvtC00LTRitGA0LbQsCDRgdC1INGB0LDQvNC+INGB0LvQuNCy0LDQvdC1INC90LAg0YLQvtGH0L3QviDQtNCy0LUg0LjRgdGC0L7RgNC40LguIgorCisjOiBidWlsdGluL21lcmdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGPINC30LAg0YDQtdC60YPRgNGB0LjQstC90L7RgtC+INGB0LvQuNCy0LDQvdC1IOKAnm1lcmdlLXJlY3Vyc2l2ZeKAnDog4oCeLVglc+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgItCe0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YfQtdGC0LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisi0KHQu9C40LLQsNC90LXRgtC+INC90Y/QvNCwINC00LAg0LHRitC00LUg0L/QvtC00LDQtNC10L3Qvi4gINCX0LAg0LfQsNCy0YrRgNGI0LLQsNC90LXRgtC+INC80YMg0Lgg0L/QvtC00LDQstCw0L3QtdGC0L4g0LzRgyAiCisi0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGNvbW1pdOKAnC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwMQorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyLQkiDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INC00L7QsdCw0LLQtdGC0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQv9GA0LjRh9C40L3QsNGC0LAg0LfQsFxuIgorItGB0LvQuNCy0LDQvdC10YLQviwg0L7RgdC+0LHQtdC90L4g0LDQutC+INGB0LvQuNCy0LDRgtC1INC+0LHQvdC+0LLQtdC9INC+0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvSDQsiDRgtC10LzQsNGC0LjRh9C10L0g0LrQu9C+0L0uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDYKK21zZ2lkICJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICLQn9GA0LDQt9C90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQtdC00L7RgtCy0YDQsNGC0Y/QstCwINC/0L7QtNCw0LLQsNC90LXRgtC+LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisi0KDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGBIOKAniVj4oCcLCDRidC1INCx0YrQtNCw0YIg0L/RgNC+0L/Rg9GB0L3QsNGC0LgsINCwINC/0YDQsNC30L3QvlxuIgorItGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsCDQv9C+0LTQsNCy0LDQvdC10YLQvi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2MgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAi0J/RgNCw0LfQvdC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICLQn9GK0YDQstC40Y/RgiDQtdGC0LDQvyDQvdCwINGB0LvQuNCy0LDQvdC10YLQviDQt9Cw0LLRitGA0YjQuC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0YHQu9C40LLQsNC90LUg4oCUINC60L7RgNC40LPQuNGA0LDQudGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQuCDQv9C+0LTQsNC50YLQtSAiCisi0YDQtdC30YPQu9GC0LDRgtCwLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTc3Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQndGP0LzQsCDRgtC10LrRg9GJINC60LvQvtC9LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3OQorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0KLQtdC60YPRidC40Y/RgiDQutC70L7QvSDQvdC1INGB0LvQtdC00Lgg0L3QuNC60L7QuS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODEKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g0L3QtSDRgdC70LXQtNC4INC90LjQutC+0Lkg0LrQu9C+0L0uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgItCd0LjQutC+0Lkg0LrQu9C+0L0g0L3QtSDRgdC70LXQtNC4INC60LvQvtC90LAg4oCeJXPigJwg0L7RgiDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINCyINGB0YDQtdC00LDRgtCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0LvQtdC1INCyIOKAniVz4oCcOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODAKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHQu9C10LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjgzCittc2dpZCAiLS1hYm9ydCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1hYm9ydOKAnCDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg3Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICIiCisi0J3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INGB0LvQuNCy0LDQvdC1LCDQt9Cw0YnQvtGC0L4g0LIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgdC1INC40LfQstGK0YDRiNCy0LAg0YLQsNC60L7QstCwICIKKyIo0LvQuNC/0YHQstCwINGD0LrQsNC30LDRgtC10Lsg4oCeTUVSR0VfSEVBROKAnCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NgorbXNnaWQgIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1xdWl04oCcINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDkKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWNvbnRpbnVl4oCcINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINC90LUg0YHQtSDQuNC30LLRitGA0YjQstCwINGB0LvQuNCy0LDQvdC1ICjQu9C40L/RgdCy0LAg0YPQutCw0LfQsNGC0LXQuyDigJ5NRVJHRV9IRUFE4oCcKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzI5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorItCd0LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDRgdC70LjQstCw0L3QtS4gICjQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5NRVJHRV9IRUFE4oCcINGB0YrRidC10YHRgtCy0YPQstCwKS5cbiIKKyLQn9C+0LTQsNC50YLQtSDQv9GA0L7QvNC10L3QuNGC0LUg0YHQuCwg0L/RgNC10LTQuCDQtNCwINC30LDQv9C+0YfQvdC10YLQtSDQvdC+0LLQviDRgdC70LjQstCw0L3QtS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM2Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorItCd0LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSAo0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeQ0hFUlJZX1BJQ0tfSEVBROKAnFxuIgorItGB0YrRidC10YHRgtCy0YPQstCwKS4gINCf0L7QtNCw0LnRgtC1INC/0YDQvtC80LXQvdC40YLQtSDRgdC4LCDQv9GA0LXQtNC4INC00LAg0LfQsNC/0L7Rh9C90LXRgtC1INC90L7QstC+INGB0LvQuNCy0LDQvdC1LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzkKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKyLQndC1INGB0YLQtSDQt9Cw0LLRitGA0YjQuNC70Lgg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUgKNGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkNIRVJSWV9QSUNLX0hFQUTigJxcbiIKKyLRgdGK0YnQtdGB0YLQstGD0LLQsCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tLXNxdWFzaOKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeLS1uby1mZuKAnC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU1Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1jb21taXQuIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tLXNxdWFzaOKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeLS1jb21taXTigJwuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3MQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICIiCisi0J3QtSDQtSDRg9C60LDQt9Cw0L3QviDQv9C+0LTQsNCy0LDQvdC1INC4INC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCebWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW3igJwg0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzODgKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAi0JLQutCw0YDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg0LLRitCyINCy0YDRitGFINCx0LXQtyDQuNGB0YLQvtGA0LjRjyDQstGB0LUg0L7RidC1INC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5MAorbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisi0J/QvtC90LXQttC1INCy0YrRgNGF0YrRgiDQtSDQsdC10Lcg0LjRgdGC0L7RgNC40Y8sINCy0YHQuNGH0LrQuCDRgdC70LjQstCw0L3QuNGPINGB0LAg0L/RgNC10LLRitGA0YLQsNC90LjRjywg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUgIgorItC40LfQstGK0YDRiNC4INGB0YrRidC40L3RgdC60L4g0YHQu9C40LLQsNC90LUg0LjQt9C40YHQutCy0LDQvdC+INC+0YIg0L7Qv9GG0LjRj9GC0LAg4oCeLS1uby1mZuKAnCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAi4oCeJXPigJwg4oCUINC90LUg0LUg0L3QtdGJ0L4sINC60L7QtdGC0L4g0LzQvtC20LUg0LTQsCDRgdC1INGB0LvQtdC1IgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NworbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgItCc0L7QttC10YLQtSDQtNCwINGB0LvQtdC10YLQtSDRgtC+0YfQvdC+INC10LTQvdC+INC/0L7QtNCw0LLQsNC90LUg0LLRitCyINCy0YDRitGFINCx0LXQtyDQuNGB0YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NzYKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICLQvdC10LfQsNCy0LjRgdC40LzQuCDQuNGB0YLQvtGA0LjQuCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdC70LXRj9GCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4NQorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgItCS0LXRh9C1INC1INC+0LHQvdC+0LLQtdC90L4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUg4oCeJXMuLiVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICLQn9GA0L7QsdCwINGB0YrRgSDRgdC70LjQstCw0L3QtSDQsiDRgNCw0LzQutC40YLQtSDQvdCwINC40L3QtNC10LrRgdCw4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NjkKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIKK21zZ3N0ciAi0JLQtdGH0LUg0LUg0L7QsdC90L7QstC10L3QviEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTc1Cittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDQv9GA0LXQstGK0YDRgtCw0L3QtSwg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjQtdGC0L4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5OCBidWlsdGluL21lcmdlLmM6MTY2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAi0J/RgNC40LLQtdC20LTQsNC90LUg0L3QsCDQtNGK0YDQstC+0YLQviDQutGK0Lwg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQvuKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAi0J/RgNC+0LHQstCw0L3QtSDRgdGK0YEg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1IOKAniVz4oCc4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLQndC40LrQvtGPINGB0YLRgNCw0YLQtdCz0LjRjyDQt9CwINGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQuNC30LLRitGA0YjQuCDRgdC70LjQstCw0L3QtdGC0L4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg0YHRitGBINGB0YLRgNCw0YLQtdCz0LjRjyDigJ4lc+KAnC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIiIKKyLQn9C+0LvQt9Cy0LAg0YHQtSDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwIOKAniVz4oCcLCDQutC+0Y/RgtC+INGJ0LUg0L/QvtC00LPQvtGC0LLQuCDQtNGK0YDQstC+0YLQviDQt9CwINC60L7RgNC40LPQuNGA0LDQvdC1INC90LAgIgorItGA0YrQutCwLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY3NworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisi0JDQstGC0L7QvNCw0YLQuNGH0L3QvtGC0L4g0YHQu9C40LLQsNC90LUg0LfQsNCy0YrRgNGI0Lgg0YPRgdC/0LXRiNC90L4uICDQodCw0LzQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC1INC40LfQstGK0YDRiNC10L3QviwgIgorItC30LDRidC+0YLQviDQsdC1INC30LDQtNCw0LTQtdC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1uby1jb21taXTigJwuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0g0J/QntCU0JDQktCQ0J3QlSDQn9Ce0JTQkNCS0JDQndCV4oCmIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMworbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMg0J/QntCU0JDQktCQ0J3QleKApiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzQKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50INCf0J7QlNCQ0JLQkNCd0JXigKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM1Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciDQn9Ce0JTQkNCS0JDQndCVXzEg0J/QntCU0JDQktCQ0J3QlV8yIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQg0KPQmtCQ0JfQkNCi0JXQmyBb0J/QntCU0JDQktCQ0J3QlV0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1MworbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLRgdC40YfQutC4INC+0LHRidC4INC/0YDQtdC00YjQtdGB0YLQstC10L3QuNGG0LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAiIgorItC+0YLQutGA0LjQstCw0L3QtSDQvdCwINC/0YDQtdC00YjQtdGB0YLQstC10L3QuNGG0LjRgtC1INC30LAg0LXQtNC90L7QutGA0LDRgtC90L4g0YHQu9C40LLQsNC90LUg0L3QsCDQvNC90L7QttC10YHRgtCy0L4g0LjRgdGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdC10LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtGCINC00YDRg9Cz0LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU5Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICLQn9Ce0JTQkNCS0JDQndCVXzEg0L/RgNC10LTRiNC10YHRgtCy0LXQvdC40Log0LvQuCDQtSDQvdCwINCf0J7QlNCQ0JLQkNCd0JVfMj8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE2MQorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICLQvtGC0LrRgNC40LLQsNC90LUg0LrRitC00LUg0J/QntCU0JDQktCQ0J3QldGC0L4g0YHQtSDQtSDQvtGC0LrQu9C+0L3QuNC70L4g0L7RgiDQuNGB0YLQvtGA0LjRj9GC0LAg0L3QsCDQo9Ca0JDQl9CQ0KLQldCb0Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjkKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgW9Ce0J/QptCY0K/igKZdIFstTCDQmNCc0JVfMSBbLUwg0J7QoNCY0JPQmNCd0JDQmyBbLUwg0JjQnNCVXzJdXV0g0KTQkNCZ0JtfMSDQntCg0JjQk1/QpNCQ0JnQmyAiCisi0KTQkNCZ0JtfMiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNC10LfRg9C70YLQsNGC0LjRgtC1INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQuNC30YXQvtC0IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNgorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICLRgdC70LjQstCw0L3QtSDQvdCwINCx0LDQt9Cw0YLQsCDQvdCwIOKAnmRpZmYz4oCcIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAi0L/RgNC4INC60L7QvdGE0LvQuNC60YLQuCDQtNCwINGB0LUg0L/QvtC70LfQstCwINC70L7QutCw0LvQvdCw0YLQsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgItC/0YDQuCDQutC+0L3RhNC70LjQutGC0Lgg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDRh9GD0LbQtNCw0YLQsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQxCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAi0L/RgNC4INC60L7QvdGE0LvQuNC60YLQuCDQtNCwINGB0LUg0L/QvtC70LfQstCwINC+0LHQtdC00LjQvdC10L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgItC/0YDQuCDQutC+0L3RhNC70LjQutGC0Lgg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDQvNCw0YDQutC10YAg0YEg0YLQsNC60YrQsiDQkdCg0J7QmSDQt9C90LDRhtC4IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAi0LHQtdC3INC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L/RgNC4INC60L7QvdGE0LvQuNC60YLQuCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDcKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuCDQt9CwINCk0JDQmdCbXzEv0J7QoNCY0JPQmNCd0JDQmy/QpNCQ0JnQm18yIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRjzog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC10L0g0LDQvdCw0LvQuNC3INC90LAg0L7QsdC10LrRgtCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2UuIElnbm9yaW5nICVzLiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZXMuIElnbm9yaW5nICVzLiIKK21zZ3N0clswXSAi0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0L/QvtCy0LXRh9C1INC+0YIgJWQg0LHQsNC30LAuICDigJ4lc+KAnCDRgdC1INC/0YDQtdGB0LrQsNGH0LAuIgorbXNnc3RyWzFdICLQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsNGCINC/0L7QstC10YfQtSDQvtGCICVkINCx0LDQt9C4LiAg4oCeJXPigJwg0YHQtSDQv9GA0LXRgdC60LDRh9CwLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2NQorbXNnaWQgIm5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgItC/0L7QtNC00YrRgNC20LAg0YHQtSDRgdCw0LzQviDRgdC70LjQstCw0L3QtSDQvdCwINGC0L7Rh9C90L4g0LTQstC1INC40YHRgtC+0YDQuNC4LiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlc1xuIgorbXNnc3RyICLQodC70LjQstCw0L3QtSDQvdCwIOKAniVz4oCcINGBIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICLQstGF0L7QtNC90LjRgtC1INC30LDQv9C40YHQuCDRgdCwINGA0LDQt9C00LXQu9C10L3QuCDRgSDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICLRgNCw0LfRgNC10YjQsNCy0LDQvdC1INC90LAg0LvQuNC/0YHQstCw0YnQuCDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU2Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICLRgNCw0LfRgNC10YjQsNCy0LDQvdC1INC90LAg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC/0L7QstC10YfQtSDQvtGCINC10LTQvdC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjkKK21zZ2lkICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU9PHNpemU+KSIKK21zZ3N0ciAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFvQntCf0KbQmNCv4oCmXSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT3QoNCQ0JfQnNCV0KApIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKyLQlNCY0KDQtdC60YLQvtGA0LjRj9GC0LBf0YFf0J7QkdCV0JrQotC4INGB0YrQtNGK0YDQttCwINC80L3QvtC20LXRgdGC0LLQviDQtNCy0L7QudC60Lgg0L/QsNC60LXRgtC90Lgg0YTQsNC50LvQvtCy0LUg0YHRitGBICIKKyLRgdGK0L7RgtCy0LXRgtC90LjRjyDQuNC8INC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjkKK21zZ2lkICIiCisiZHVyaW5nIHJlcGFjaywgY29sbGVjdCBwYWNrLWZpbGVzIG9mIHNtYWxsZXIgc2l6ZSBpbnRvIGEgYmF0Y2ggdGhhdCBpcyAiCisibGFyZ2VyIHRoYW4gdGhpcyBzaXplIgorbXNnc3RyICIiCisi0L/RgNC4INC/0YDQtdC/0LDQutC10YLQuNGA0LDQvdC1INC/0LDQutC10YLQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSwg0LrQvtC40YLQviDRgdCwINGBINC/0L4t0LzQsNC70YrQuiDQvtGCINGC0L7Qt9C4INGA0LDQt9C80LXRgCwg0LTQsCAiCisi0YHQtSDQvtCx0LXQtNC40L3Rj9Cy0LDRgiDQsiDQv9Cw0LrQtdGC0Lgg0YEg0L/Qvi3Qs9C+0LvRj9C8INC+0YIg0YLQvtC30Lgg0YDQsNC30LzQtdGAIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWJhdGNoLXNpemXigJwg0LjQt9C40YHQutCy0LAg0L/QvtC00LrQvtC80LDQvdC00LDRgtCwIOKAnnJlcGFja+KAnCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L/QvtC00LrQvtC80LDQvdC00LA6ICVzIgorCisjOiBidWlsdGluL212LmM6MTgKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFvQntCf0KbQmNCv4oCmXSDQntCR0JXQmtCi4oCmINCm0JXQmyIKKworIzogYnVpbHRpbi9tdi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAi0JTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC1INCyINC40L3QtNC10LrRgdCwLCDQvdC+INC90LUg0LUg0L/QvtC00LzQvtC00YPQuyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyLQl9CwINC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUsINC40LvQuCDQstC60LDRgNCw0LnRgtC1INC/0YDQvtC80LXQvdC40YLQtSDQv9C+INGE0LDQudC70LAg4oCeLmdpdG1vZHVsZXPigJwg0LIg0LjQvdC00LXQutGB0LAsXG4iCisi0LjQu9C4INCz0Lgg0YHQutCw0YLQsNC50YLQtSIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICLigJ4lLipz4oCcINCy0LXRh9C1INC1INCyINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL212LmM6MTI1Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LzQtdGB0YLQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0LTQvtGA0Lgg0YbQtdC70YLQsCDQtNCwINGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL212LmM6MTI3Cittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0LPRgNC10YjQutC40YLQtSDQv9GA0Lgg0L/RgNC10LzQtdGB0YLQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgItGG0LXQu9GC0LAg4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0Lgg0L3QtSDQtSDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9tdi5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LXRgtC+INC90LAg0L7QsdC10LrRgiDQvtGCIOKAniVz4oCcINC90LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC+0LHQtdC60YIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjyDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC10YHRgtC4INCyINGB0LXQsdC1INGB0LgiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTAKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjyDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC10YHRgtC4INCy0YrRgNGF0YMg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICLQv9GK0YDQstC+0L3QsNGH0LDQu9C90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC1INC/0YDQsNC30L3QsCIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgItC90LUg0LUg0L/QvtC0INC60L7QvdGC0YDQvtC70LAg0L3QsCBHaXQiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjcKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgItGG0LXQu9GC0LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAi0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzgKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICLQn9GA0LXQt9Cw0L/QuNGB0LLQsNC90LXRgtC+INC1INC90LXQstGK0LfQvNC+0LbQvdC+IgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLQvNC90L7QttC10YHRgtCy0L4g0LjQt9GC0L7Rh9C90LjRhtC4INC30LAg0LXQtNC90LAg0YbQtdC7IgorCisjOiBidWlsdGluL212LmM6MjQzCittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLRhtC10LvQtdCy0LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCDQvtCx0LXQutGCOiDigJ4lc+KAnCwg0YbQtdC7OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tdi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICLQn9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzcgYnVpbHRpbi9yZW1vdGUuYzo3MTYgYnVpbHRpbi9yZXBhY2suYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwMworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFvQntCf0KbQmNCv4oCmXSDQn9Ce0JTQkNCS0JDQndCV4oCmIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA0Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgW9Ce0J/QptCY0K/igKZdIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBb0J7Qn9Cm0JjQr+KApl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MgorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LjQvNC10L3QsNGC0LAgKNCx0LXQtyDRgdGD0LzQuNGC0LUg0L/QviBTSEExKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MworbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0YHQsNC80L4g0L3QsCDQtdGC0LjQutC10YLQuNGC0LUg0LfQsCDQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY1Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INGB0LDQvNC+INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0L3QsCDQqNCQ0JHQm9Ce0J3QsCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NworbXNnaWQgImlnbm9yZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDQvdCwINCo0JDQkdCb0J7QndCwIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY5Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQv9C+0LTQsNCy0LDQvdC40Y8sINC60L7QuNGC0L4g0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LTQvtGB0YLQuNCz0L3QsNGC0Lgg0L7RgiDQstGB0LjRh9C60LggIgorItGD0LrQsNC30LDRgtC10LvQuCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MAorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0YfQtdGC0LXQvdC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MQorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAi0LTQsCDRgdC1INC40LfQstC10LbQtNCw0YIg0Lgg0L3QtdC00LXRhNC40L3QuNGA0LDQvdC40YLQtSDQuNC80LXQvdCwICjRgdGC0LDQvdC00LDRgNGC0L3QsCDRgdGC0L7QudC90L7RgdGCINC90LAg0L7Qv9GG0LjRj9GC0LApIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDc3Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LjRgtC1INC90LAg0L7QsdC10LrRgtC4LdC10YLQuNC60LXRgtC4ICjQt9CwINCy0YrRgtGA0LXRiNC90Lgg0L3Rg9C20LTQuCkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkF0gW2xpc3QgW9Ce0JHQldCa0KJdXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0g0KHQqtCe0JHQqdCV0J3QmNCVICIKKyJ8IC1GINCk0JDQmdCbIHwgKC1jIHwgLUMpINCe0JHQldCa0KJdIFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkF0gY29weSBbLWZdINCe0JHQldCa0KJf0JjQl9Ci0J7Qp9Cd0JjQmiDQntCR0JXQmtCiX9Cm0JXQmyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSDQodCq0J7QkdCp0JXQndCY0JUgfCAiCisiLUYg0KTQkNCZ0JsgfCAoLWMgfCAtQykg0J7QkdCV0JrQol0gW9Ce0JHQldCa0KJdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkF0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gW9Ce0JHQldCa0KJdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSBzaG93IFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkF0gbWVyZ2UgWy12IHwgLXFdIFstcyDQodCi0KDQkNCi0JXQk9CY0K9dICIKKyLQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JAiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIHJlbW92ZSBb0J7QkdCV0JrQouKApl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIHBydW5lIFstbl0gWy12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFvQntCR0JXQmtCiXV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBb0J7Qn9Cm0JjQr+KApl0gW9Ce0JHQldCa0KJdIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgY29weSBb0J7Qn9Cm0JjQr+KApl0g0J7QkdCV0JrQol/QmNCX0KLQntCn0J3QmNCaINCe0JHQldCa0KJf0KbQldCbIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBb0J7QkdCV0JrQol/QmNCX0KLQntCn0J3QmNCaINCe0JHQldCa0KJf0KbQldCb4oCmXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFvQntCf0KbQmNCv4oCmXSBb0J7QkdCV0JrQol0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgW9Ce0JHQldCa0KJdIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBb0J7Qn9Cm0JjQr+KApl0g0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQIgorCisjOiBidWlsdGluL25vdGVzLmM6NzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBb0J7QkdCV0JrQol0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NworbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkyCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcKK21zZ2lkICJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6IgorbXNnc3RyICLQl9Cw0L/QuNGB0LLQsNC90LUv0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINCx0LXQu9C10LbQutC40YLQtSDQt9CwINGB0LvQtdC00L3QuNGPINC+0LHQtdC60YI6IgorCisjOiBidWlsdGluL25vdGVzLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC10YLQviDigJ5zaG934oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdC4INC30LAg0L7QsdC10LrRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1NAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LTQtdC90LDRgtCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC+0YIg0LTQtdC50YHRgtCy0LjQtdGC0L4g4oCec2hvd+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgItC00LXQudGB0YLQstC40LXRgtC+IOKAnnNob3figJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNCy0YrRgNGI0Lgg0LfQsCDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL25vdGVzLmM6MTk3Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICLQt9Cw0LTQsNC50YLQtSDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQsNGC0LAg0YEg0L3Rj9C60L7RjyDQvtGCINC+0L/RhtC40LjRgtC1IOKAni1t4oCcINC40LvQuCDigJ4tRuKAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIt0LHQtdC70LXQttC60LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgorCisjOiBidWlsdGluL25vdGVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICLRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQsNGC0LAg0LUg0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC40LvQuCDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL25vdGVzLmM6MjYzIGJ1aWx0aW4vbm90ZXMuYzozMTMgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjM4MyBidWlsdGluL25vdGVzLmM6NDM4IGJ1aWx0aW4vbm90ZXMuYzo1MjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEgYnVpbHRpbi9ub3Rlcy5jOjYxMCBidWlsdGluL25vdGVzLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUg0LrRitC8INC60LDQutCy0L4g0YHQvtGH0Lgg4oCeJXPigJwuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0uIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiIgorItGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINCx0LXQu9C10LbQutCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCy0LfQtdC80LUg0L7RgiDQvtCx0LXQutGCLCDQutC+0LnRgtC+INC90LUg0LUgQkxPQjog4oCeJXPigJwuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi0LLRhdC+0LTQtdC9INGA0LXQtCDRgSDQvdC10L/RgNCw0LLQuNC70LXQvSDRhNC+0YDQvNCw0YI6IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAi0LHQtdC70LXQttC60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC60L7Qv9C40YDQsCDQvtGCIOKAniVz4oCcINC60YrQvCDigJ4lc+KAnCIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorItC90Y/QvNCwINC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDigJ4lc+KAnCDQstGK0YDRhdGDINCx0LXQu9C10LbQutC40YLQtSDQsiDigJ4lc+KAnCwg0LfQsNGJ0L7RgtC+INGB0LAg0LjQt9Cy0YrQvSDigJ5yZWZzLyIKKyJub3Rlcy/igJwuIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0L/QsNGA0LDQvNC10YLRgNC4IgorCisjOiBidWlsdGluL25vdGVzLmM6Mzg5IGJ1aWx0aW4vbm90ZXMuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAi0L3Rj9C80LAg0LHQtdC70LXQttC60Lgg0LfQsCDQvtCx0LXQutGC0LAg4oCeJXPigJwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEwIGJ1aWx0aW4vbm90ZXMuYzo1NzYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICLQvdC40LcsINC60L7QudGC0L4g0LUg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0LHQtdC70LXQttC60LDRgtCwIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEzIGJ1aWx0aW4vbm90ZXMuYzo1NzkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAi0KTQkNCZ0Jsg0YHRitGBINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINCx0LXQu9C10LbQutCw0YLQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NTgyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQuCDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YPQutCw0LfQsNC90LjRjyDQntCR0JXQmtCiLdCx0LXQu9C10LbQutCwIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE5IGJ1aWx0aW4vbm90ZXMuYzo1ODUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgItC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNC90LjRjyDQntCR0JXQmtCiLdCx0LXQu9C10LbQutCwIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIyIGJ1aWx0aW4vbm90ZXMuYzo1ODgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgItC/0YDQuNC10LzQsNC90LUg0Lgg0L3QsCDQv9GA0LDQt9C90Lgg0LHQtdC70LXQttC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjMgYnVpbHRpbi9ub3Rlcy5jOjQ5NgorbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgItC30LDQvNGP0L3QsCDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuNGC0LUg0LHQtdC70LXQttC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyLQndC1INC80L7QttC1INC00LAg0YHQtSDQtNC+0LHQsNCy0Lgg0LHQtdC70LXQttC60LAsINC30LDRidC+0YLQviDRgtCw0LrQsNCy0LAg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LfQsCDQvtCx0LXQutGC0LAg4oCeJXPigJwuICAiCisi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tZuKAnCwg0LfQsCDQtNCwINC/0YDQtdC30LDQv9C40YjQtdGC0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC4INCx0LXQu9C10LbQutC4LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ2MyBidWlsdGluL25vdGVzLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAi0J/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40YLQtSDQsdC10LvQtdC20LrQuCDQt9CwINC+0LHQtdC60YLQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LHQtdC70LXQttC60LDRgtCwINC30LAg0L7QsdC10LrRgtCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTcKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL25vdGVzLmM6NDk5Cittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgIiIKKyLQt9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC30LAg0JrQntCc0JDQndCU0JDRgtCwLCDQutC+0Y/RgtC+INC/0YDQtdC30LDQv9C40YHQstCwINC/0L7QtNCw0LLQsNC90LjRjyAo0LLQutC70Y7Rh9Cy0LAgIgorItC+0L/RhtC40Y/RgtCwIOKAni0tc3RkaW7igJwpIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LzQsNC70LrQviDQv9Cw0YDQsNC80LXRgtGA0LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC/0LjRgNCwINCx0LXQu9C10LbQutCwLCDQt9Cw0YnQvtGC0L4g0YLQsNC60LDQstCwINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINC30LAg0L7QsdC10LrRgtCwIOKAniVz4oCcLiAgIgorItCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwsINC30LAg0LTQsCDQv9GA0LXQt9Cw0L/QuNGI0LXRgtC1INGB0YrRidC10YHRgtCy0YPQstCw0YnQuCDQsdC10LvQtdC20LrQuC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgItC90Y/QvNCwINCx0LXQu9C10LbQutC4INC30LAg0L7QsdC10LrRgtCwLdC40LfRgtC+0YfQvdC40Log4oCeJXPigJwuICDQndC1INC80L7QttC1INC00LAg0YHQtSDQutC+0L/QuNGA0LAuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyLQl9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINC+0L/RhtC40LjRgtC1IOKAni1t4oCcL+KAni1G4oCcL+KAni1j4oCcL+KAni1D4oCcINGBINC60L7QvNCw0L3QtNCw0YLQsCDigJ5lZGl04oCcINCy0LXRh9C1INC1ICIKKyLQvtGB0YLQsNGA0Y/Qu9C+LlxuIgorItCS0LzQtdGB0YLQviDRgtC+0LLQsCDQs9C4INC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0YEg0L/QvtC00LrQvtC80LDQvdC00LDRgtCwIOKAnmFkZOKAnDog4oCeZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tIgorIkPigJwuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5OT1RFU19NRVJHRV9QQVJUSUFM4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAnk5PVEVTX01FUkdFX1JFRuKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAi0YDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC90LAg4oCeZ2l0IG5vdGVzIG1lcmdl4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YLQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5OT1RFU19NRVJHRV9QQVJUSUFM4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL25vdGVzLmM6NzI0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+INC+0YIg4oCeTk9URVNfTUVSR0VfUEFSVElBTOKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LrRgNC40LUuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDQvtGCIOKAnk5PVEVTX01FUkdFX1BBUlRJQUzigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczOQorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1INC60YrQvCDQutCw0LrQstC+INGB0L7Rh9C4IOKAnk5PVEVTX01FUkdFX1JFRuKAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0MgorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0LHQtdC70LXQttC60LjRgtC1IgorCisjOiBidWlsdGluL25vdGVzLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDRgdGC0YDQsNGC0LXQs9C40Y8g0LfQsCDRgdC70LjQstCw0L3QtSDQvdCwINCx0LXQu9C10LbQutC4IOKAniVz4oCcIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICLQntCx0YnQuCDQvtC/0YbQuNC4IgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODgKK21zZ2lkICIiCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgorbXNnc3RyICIiCisi0LrQvtGA0LjQs9C40YDQsNC90LUg0L3QsCDQutC+0L3RhNC70LjQutGC0LjRgtC1INC/0YDQuCDRgdC70LjQstCw0L3QtSDQvdCwINCx0LXQu9C10LbQutC40YLQtSDRh9GA0LXQtyDRgtCw0LfQuCDQodCi0KDQkNCi0JXQk9CY0K8g4oCUICIKKyLigJ5tYW51YWzigJwgKNGA0YrRh9C90L4pLCDigJ5vdXJz4oCcICjQstCw0YjQsNGC0LAg0LLQtdGA0YHQuNGPKSwg4oCedGhlaXJz4oCcICjRh9GD0LbQtNCw0YLQsCDQstC10YDRgdC40Y8pLCAiCisi4oCedW5pb27igJwgKNC+0LHQtdC00LjQvdGP0LLQsNC90LUpLCDigJ5jYXRfc29ydF91bmlx4oCcICjQvtCx0LXQtNC40L3Rj9Cy0LDQvdC1LCDQv9C+0LTRgNC10LbQtNCw0L3QtSwg0YPQvdC40LrQsNC70L3QuCAiCisi0YDQtdC30YPQu9GC0LDRgtC4KSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LUg0L3QsCDQvdC10YHQu9C10YLQuCDQsdC10LvQtdC20LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgItC30LDQstGK0YDRiNCy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LXRgtC+INGH0YDQtdC3INC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvdC10YHQu9C10YLQuCDQsdC10LvQtdC20LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC60L7RgNC10LrRhtC40Y/RgtCwINC/0YDQuCDRgdC70LjQstCw0L3QtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwNworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1jb21taXTigJwsIOKAni0tYWJvcnTigJwg0Lgg4oCeLXPigJwv4oCeLS1zdHJhdGVneeKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgxMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAi0YLRgNGP0LHQstCwINC00LAg0YPQutCw0LbQtdGC0LUg0YPQutCw0LfQsNGC0LXQuyDQutGK0Lwg0LHQtdC70LXQttC60LAg0LfQsCDRgdC70LjQstCw0L3QtS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90LAg0YHRgtGA0LDRgtC10LPQuNGPINC60YrQvCDQvtC/0YbQuNGP0YLQsCDigJ4tc+KAnC/igJ4tLXN0cmF0ZWd54oCcOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJhIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAi0LIg0LzQvtC80LXQvdGC0LAg0YHQtSDQuNC30LLRitGA0YjQstCwINGB0LvQuNCy0LDQvdC1INC90LAg0LHQtdC70LXQttC60LjRgtC1INCyIOKAniVz4oCcINC/0YDQuCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0L/QsNC30Lgg0LLRgNGK0LfQutCwINC60YrQvCDRg9C60LDQt9Cw0YLQtdC70Y8g0L3QsCDRgtC10LrRg9GJ0LDRgtCwINCx0LXQu9C10LbQutCwICjigJ4lc+KAnCkuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkLiBGaXggY29uZmxpY3RzIGluICVzIGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLSIKKyJhYm9ydCcuXG4iCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg0L3QsCDQsdC10LvQtdC20LrQuNGC0LUuICDQoNCw0LfRgNC10YjQtdGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQsiDigJ4lc+KAnCDQuCDQv9C+0LTQsNC50YLQtSAiCisi0YDQtdC30YPQu9GC0LDRgtCwINGBIOKAnmdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdOKAnCDQuNC70Lgg0L/RgNC10YPRgdGC0LDQvdC+0LLQtdGC0LUg0YHQu9C40LLQsNC90LXRgtC+INGBICIKKyLQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnTigJwuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTcgYnVpbHRpbi90YWcuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutGA0LjQtSDQutGK0Lwg0LrQsNC60LLQviDRgdC+0YfQuCDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgItCd0Y/QvNCwINCx0LXQu9C10LbQutC4INC30LAg0L7QsdC10LrRgtCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgItC+0L/QuNGC0YrRgiDQt9CwINC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L3QsCDQvdC10YHRitGJ0LXRgdGC0LLRg9Cy0LDRidCwINCx0LXQu9C10LbQutCwINC90LUg0YHQtSDRgdGH0LjRgtCwINC30LAg0LPRgNC10YjQutCwIgorCisjOiBidWlsdGluL25vdGVzLmM6OTE1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINC+0LHQtdC60YLQuNGC0LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0IGJ1aWx0aW4vcHJ1bmUuYzoxMzAgYnVpbHRpbi93b3JrdHJlZS5jOjE2NAorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAi0YHQsNC80L4g0LjQt9Cy0LXQttC00LDQvdC1INCx0LXQtyDQtNC10LnRgdGC0LLQuNGC0LXQu9C90L4g0L7QutCw0YHRgtGA0Y/QvdC1IgorCisjOiBidWlsdGluL25vdGVzLmM6OTU1Cittc2dpZCAicmVwb3J0IHBydW5lZCBub3RlcyIKK21zZ3N0ciAi0LTQvtC60LvQsNC00LLQsNC90LUg0L3QsCDQvtC60LDRgdGC0YDQtdC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAi0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgItC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINCx0LXQu9C10LbQutCw0YLQsCDRgdC+0YfQtdC90LAg0L7RgiDRgtC+0LfQuCDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JAiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQv9C+0LTQutC+0LzQsNC90LTQsDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgW9Ce0J/QptCY0K/igKZdIFs8INCh0J/QmNCh0KrQml/QoV/Qo9Ca0JDQl9CQ0KLQldCb0JggfCA8INCh0J/QmNCh0KrQml/QoV/QntCR0JXQmtCi0JhdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFvQntCf0KbQmNCv4oCmXSDQn9Cg0JXQpNCY0JrQoV/QndCQX9CY0JzQldCi0J4gWzwg0KHQn9CY0KHQqtCaX9ChX9Cj0JrQkNCX0JDQotCV0JvQmCB8IDwgIgorItCh0J/QmNCh0KrQml/QoV/QntCR0JXQmtCi0JhdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICLQu9C+0YjQsCDQutC+0L3RgtGA0L7Qu9C90LAg0YHRg9C80LAg0LfQsCDQv9Cw0LrQtdGC0LjRgNCw0L3QuNGPINC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgItC/0LDQutC10YLQuNGA0LDQvSDQvtCx0LXQutGCINGBINCz0YDQtdGI0LrQuCDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAi0YDQtdC60YPRgNGB0LjQstC90LAg0YDQsNC30LvQuNC60LAg0LfQsCDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAi0L/QvtC00YDQtdC00LXQvdC4INCx0Y/RhdCwICV1INC+0LHQtdC60YLQsCwg0LAg0YHQtSDQvtGH0LDQutCy0LDRhdCwICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgaXMgaW52YWxpZDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC/0LDQutC10YLQtdC9INGE0LDQudC7OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcGFja2ZpbGUgZm9yIHJldXNlOiAlcyIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LLRgtC+0YDQvdC+INC+0YLQstC+0YDQtdC9IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgwMgorbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGC0YrRgNGB0LXQvdC1INCyINC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvSDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MTMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGH0LXRgtC10L3QtSDQvtGCINC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvSDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NDEKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICIiCisi0LjQt9C60LvRjtGH0LLQsNC90LUg0L3QsCDQt9Cw0L/QuNGB0LLQsNC90LXRgtC+INC90LAg0LHQuNGC0L7QstCw0YLQsCDQvNCw0YHQutCwLCDQv9Cw0LrQtdGC0LjRgtC1INGB0LAg0YDQsNC30LTQtdC70LXQvdC4INC/0L7RgNCw0LTQuCAiCisi0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDigJ5wYWNrLnBhY2tTaXplTGltaXTigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODU0Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICLQl9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkxNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC70YPRh9C10L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb3RlICU8UFJJdTMyPiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlPFBSSXUzMj4iCittc2dzdHIgItCx0Y/RhdCwINC30LDQv9C40YHQsNC90LggJTxQUkl1MzI+INC+0LHQtdC60YLQuCwg0LAg0YHQtSDQvtGH0LDQutCy0LDRhdCwICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMTY0Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIiIKKyLQuNC30LrQu9GO0YfQstCw0L3QtSDQvdCwINC30LDQv9C40YHQstCw0L3QtdGC0L4g0L3QsCDQsdC40YLQvtCy0LDRgtCwINC80LDRgdC60LAsINC30LDRidC+0YLQviDQvdGP0LrQvtC4INC+0LHQtdC60YLQuCDQvdGP0LzQsCDQtNCwINGB0LUgIgorItC/0LDQutC10YLQuNGA0LDRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LTQsNC70LXRh9C90L4g0L3QsNGH0LDQu9C+INC90LAg0L7RgtC80LXRgdGC0LLQsNC90LXRgtC+INC30LAg0L7QsdC10LrRgtC40YLQtS3RgNCw0LfQu9C40LrQsCDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIKK21zZ3N0ciAi0L3QtdC00L7RgdGC0LjQttC40LzQviDQvdCw0YfQsNC70L4g0L3QsCDQvtGC0LzQtdGB0YLQstCw0L3QtdGC0L4g0LfQsCDQvtCx0LXQutGC0LjRgtC1LdGA0LDQt9C70LjQutCwINC30LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTg3MAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgItCf0YDQtdCx0YDQvtGP0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICLRgNCw0LfQvNC10YDRitGCINC90LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC9IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC90LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC90LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMDEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0LUg0YEg0L3QtdC/0YDQsNCy0LjQu9C90LAg0LTRitC70LbQuNC90LAgKCU8UFJJdU1BWD4sINCwINC90LUgJTxQUkl1TUFYPikiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEyNQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgItC90LXQvtC/0YLQuNC80LjQt9C40YDQsNC9INC/0LDQutC10YIg4oCUINC/0LDQvNC10YLRgtCwINGB0LLRitGA0YjQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgItCU0LXQu9GC0LAg0LrQvtC80L/RgNC10YHQuNGP0YLQsCDRidC1INC40LfQv9C+0LvQt9Cy0LAg0LTQviAlZCDQvdC40YjQutC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIiIKKyLQvtCx0LXQutGC0LjRgtC1LCDQutC+0LjRgtC+INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7RgdGC0LjQs9C90LDRgtC4INC+0YIg0LXRgtC40LrQtdGC0LAg4oCeJXPigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQsNGCICIKKyLQv9Cw0LrQtdGC0LjRgNCw0L3QuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU5Cittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY1Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQsdGA0L7QuSDRgNCw0LfQu9C40LrQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisi0L7Rh9Cw0LrQstCwINGB0LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQutGA0LDQtdC9INC+0LHQtdC60YIsINCwINC90LU6XG4iCisiICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisi0L7Rh9Cw0LrQstCwINGB0LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDQvtCx0LXQutGCLCDQsCDQvdC1OlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODQ2Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeLS1taXNzaW5n4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MDUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDEzCittc2dpZCAiY2Fubm90IG9wZW4gcGFjayBpbmRleCIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdCwINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAi0L3QtdC/0LDQutC10YLQuNGA0LDQvdC40Y/RgiDQvtCx0LXQutGCINCyIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDIxCittc2dpZCAidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIKK21zZ3N0ciAi0L7RgdGC0LDQstCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0LAg0L3QtdC/0LDQutC10YLQuNGA0LDQvSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L3QsNC70L7QttC10L3QviIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MQorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgItGB0LrQvtGA0L7RiNC90LjRgtC1INC+0LHQtdC60YLQuCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7QsdCw0LLQtdC90LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICLQvdC10L/QvtC00LTRitGA0LbQsNC90LAg0LLQtdGA0YHQuNGPINC90LAg0LjQvdC00LXQutGB0LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y8g0L3QsCDQuNC90LTQtdC60YHQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM2Cittc2dpZCAiPHZlcnNpb24+Wyw8b2Zmc2V0Pl0iCittc2dzdHIgItCS0JXQoNCh0JjQr1ss0J7QotCc0JXQodCi0JLQkNCd0JVdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzcKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICIiCisi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAg0L3QsCDQv9Cw0LrQtdGC0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LLRitCyINGE0L7RgNC80LDMgNGC0LAg0YEg0YPQutCw0LfQsNC90LDRgtCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQwCittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C10L0g0YDQsNC30LzQtdGAINC90LAg0LLRgdC10LrQuCDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQyCittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0LfQsNC10YLQuCDQvtGCINC00YDRg9Cz0Lgg0YXRgNCw0L3QuNC70LjRidCwINC90LAg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDQKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0L/QsNC60LXRgtC40YDQsNC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ2Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC90LAg0L/RgNC+0LfQvtGA0LXRhtCwINC30LAg0L/QsNC60LXRgtC40YDQsNC90LUg0L/QviDQsdGA0L7QuSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0OAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIiIKKyLQvtCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0L3QsCDQv9GA0L7Qt9C+0YDQtdGG0LAg0LfQsCDQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQuCDQv9C+INC/0LDQvNC10YIg0L7RgdCy0LXQvSDQv9C+INCx0YDQvtC5INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUwCittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIiIKKyLQvNCw0LrRgdC40LzQsNC70L3QsCDQtNGK0LvQttC40L3QsCDQvdCwINCy0LXRgNC40LPQsNGC0LAg0L7RgiDRgNCw0LfQu9C40LrQuCwg0LrQvtGP0YLQviDQtSDQv9C+0LfQstC+0LvQtdC90LAg0LIg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUyCittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICLQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuNGC0LUg0YDQsNC30LvQuNC60LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NAorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgItC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NgorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg4oCeT0ZTX0RFTFRB4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTgKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICIiCisi0YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDQvdC40YjQutC4INC30LAg0L/RgNC10YLRitGA0YHQstCw0L3QtSDQvdCwINC90LDQuS3QtNC+0LHRgNC40YLQtSDRgdGK0LLQv9Cw0LTQtdC90LjRjyDQvdCwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAi0LHQtdC3INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0YDQsNC30LXQvSDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYyCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINCy0LXRgNGB0LjQuNGC0LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjQKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC00L4g0LLRgdC1INC+0YnQtSDQvdC10L/QsNC60LXRgtC40YDQsNC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIiIKKyLQstC60LvRjtGH0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L7QsdC10LrRgtC4LCDQutC+0LjRgtC+INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC00L7RgdGC0LjQs9C90LDRgiDQvtGCINC/0YDQvtC40LfQstC+0LvQtdC9ICIKKyLRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzAKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgItCy0LrQu9GO0YfQstCw0L3QtSDQuCDQvdCwINC+0LHQtdC60YLQuNGC0LUg0YHQvtGH0LXQvdC4INC+0YIg0LfQsNC/0LjRgdC40YLQtSDQsiDQttGD0YDQvdCw0LvQsCDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgItCy0LrQu9GO0YfQstCw0L3QtSDQuCDQvdCwINC+0LHQtdC60YLQuNGC0LUg0YHQvtGH0LXQvdC4INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3NgorbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/QsNC60LXRgtCwINC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQuNC30YXQvtC0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzgKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgIiIKKyLQstC60LvRjtGH0LLQsNC90LUg0Lgg0L3QsCDQvtCx0LXQutGC0LjRgtC1LdC10YLQuNC60LXRgtC4LCDQutC+0LjRgtC+INGB0L7Rh9Cw0YIg0LrRitC8INC+0LHQtdC60YLQuNGC0LUsINC60L7QuNGC0L4g0YnQtSDQsdGK0LTQsNGCICIKKyLQv9Cw0LrQtdGC0LjRgNCw0L3QuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgwCittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQvdC10LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MgorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0L/QsNC60LXRgtC40YDQsNC90LUg0Lgg0L3QsCDQvdC10LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NAorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLRgNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC90LXQtNC+0YHRgtC40LbQuNC80LjRgtC1INC+0LHQtdC60YLQuCwg0LrQvtC40YLQviDRgdCwINC/0L4t0L3QvtCy0Lgg0L7RgiDRgtC+0LLQsCDQktCg0JXQnNCVIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODcKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINCw0LvQs9C+0YDQuNGC0YrQvCDQt9CwINGH0LDRgdGC0LjRh9C90LAg0LTQvtGB0YLQuNC20LjQvNC+0YHRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg5Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINGB0YrQutGA0LDRgtC10L3QuCDQv9Cw0LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICLQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQv9C+0LTRhdC+0LTRj9GJ0L4g0LfQsCDQv9C70LjRgtC60L4g0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTMKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0LDQutC10YLQuNGC0LUsINC60L7QuNGC0L4g0YHQsCDQv9GA0LjQtNGA0YPQttC10L3QuCDQvtGCINGE0LDQudC7IOKAni5rZWVw4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTUKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHQutCw0L3QtSDQvdCwINGC0L7Qt9C4INC/0LDQutC10YIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NworbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgItC90LjQstC+INC90LAg0LrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC/0YDQuCDQv9Cw0LrQtdGC0LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk5Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0YDQvtC00LjRgtC10LvQuCDigJQg0LTQvtGA0Lgg0Lgg0YLQtdC30LgsINC60L7QuNGC0L4g0L3QvtGA0LzQsNC70L3QviDRgdCwINGB0LrRgNC40YLQuCDQv9GA0LggIgorItC/0YDQuNGB0LDQttC00LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDEKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuCDQuNC90LTQtdC60YHQuCDQvdCwINCx0LDQt9CwINCx0LjRgtC+0LLQuCDQvNCw0YHQutC4INC30LAg0YPRgdC60L7RgNGP0LLQsNC90LUg0L3QsCAiCisi0L/RgNC10LHRgNC+0Y/QstCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDMKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICIiCisi0LfQsNC/0LDQt9Cy0LDQvdC1INC4INC90LAg0LjQvdC00LXQutGBINC90LAg0LHQsNC30LAg0L/QvtCx0LjRgtC+0LLQsCDQvNCw0YHQutCwLCDQt9Cw0LXQtNC90L4g0YEg0LjQvdC00LXQutGB0LAg0LfQsCDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwNworbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IGlmIHBvc3NpYmxlIgorbXNnc3RyICLQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQuCDQvdCwINCx0LDQt9CwINCx0LjRgtC+0LLQuCDQvNCw0YHQutC4INC/0YDQuCDQstGK0LfQvNC+0LbQvdC+0YHRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzExCittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0LrQsNC6INC00LAg0YHQtSDQvtCx0YDQsNCx0L7RgtCy0LDRgiDQu9C40L/RgdCy0LDRidC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNAorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICLQsdC10Lcg0L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg0LIg0LPQsNGA0LDQvdGC0LjRgNCw0YnQuCDQv9Cw0LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNgorbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgItCx0LXQtyDQv9GA0L7QvNGP0L3QsCDQvdCwINCz0YDRg9C/0LjRgtC1INC/0YDQuCDQtNC10LvRgtCwINC60L7QvNC/0YDQtdGB0LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICLQstC10YDQuNCz0LDRgtCwINGBINGA0LDQt9C70LjQutC4INC1INC/0YDQtdC60LDQu9C10L3QviDQtNGK0LvQsdC+0LrQsCDigJQgJWQsINGJ0LUg0YHQtSDQv9C+0LvQt9Cy0LAgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAiIgorItCh0YLQvtC50L3QvtGB0YLRgtCwINC90LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5wYWNrLmRlbHRhQ2FjaGVMaW1pdOKAnCDQtSDQv9GA0LXQutCw0LvQtdC90L4g0LPQvtC70Y/QvNCwLiAg0KnQtSDRgdC1ICIKKyLQv9C+0LvQt9Cy0LAgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNAorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1tYXgtcGFjay1zaXpl4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LfQsCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9Cw0LrQtdGC0L3QuCAiCisi0YTQsNC50LvQvtCy0LUg0LfQsCDQv9GA0LXQvdC+0YEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNgorbXNnaWQgIm1pbmltdW0gcGFjayBzaXplIGxpbWl0IGlzIDEgTWlCIgorbXNnc3RyICLQvNC40L3QuNC80LDQu9C90LjRj9GCINGA0LDQt9C80LXRgCDQvdCwINC/0LDQutC10YLQuNGC0LUg0LUgMeKAik1pQiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS10aGlu4oCc0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQt9CwINGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1INGBICIKKyLQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNAorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1rZWVwLXVucmVhY2hhYmxl4oCcINC4IOKAni0tdW5wYWNrLXVucmVhY2hhYmxl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjAKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1maWx0ZXLigJwg0LjQt9C40YHQutCy0LAg4oCeLXN0ZG91dOKAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDgxCittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG90YWwgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCByZXVzZWQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pIgorbXNnc3RyICIiCisi0J7QsdGJ0L4gJTxQUkl1MzI+ICjRgNCw0LfQu9C40LrQuCAlPFBSSXUzMj4pLCDQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QuCAlPFBSSXUzMj4gKNGA0LDQt9C70LjQutC4ICIKKyIlPFBSSXUzMj4pIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi0L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQstGB0LjRh9C60L4iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTcKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4ICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6OQorbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQyCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC/0L7QstGC0LDRgNGP0YnQuNGC0LUg0YHQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMgorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSDQktCg0JXQnNCVXSBbLS1dIFvQktCg0KrQpeKApl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L7QutCw0YHRgtGA0LXQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQv9C+LdGB0YLQsNGA0Lgg0L7RgiDRgtC+0LLQsCDQktCg0JXQnNCVIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LDQstCw0L3QtSDQvdCwINC+0LHRhdC+0LbQtNCw0L3QtdGC0L4g0LTQviDQvtCx0LXQutGC0Lgg0LjQt9Cy0YrQvSDQs9Cw0YDQsNC90YLQuNGA0LDRidC4INC/0LDQutC10YLQuCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjE1MAorbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAi0YXRgNCw0L3QuNC70LjRidC1INGBINCy0LDQttC90Lgg0L7QsdC10LrRgtC4INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0LrQsNGB0YLRgNGPIgorCisjOiBidWlsdGluL3B1bGwuYzo2NiBidWlsdGluL3B1bGwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ4lc+KAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4Cittc2dpZCAiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFvQntCf0KbQmNCv4oCmXSBb0KXQoNCQ0J3QmNCb0JjQqdCVIFvQo9Ca0JDQl9CQ0KLQldCbX9Cd0JBf0JLQldCg0KHQmNCv4oCmXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLRg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINGA0LXQutGD0YDRgdC40LLQvdC+0YLQviDQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1IgorCisjOiBidWlsdGluL3B1bGwuYzoxNDYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0OQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAi0LLQvdCw0YHRj9C90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0YfRgNC10Lcg0L/RgNC10LHQsNC30LjRgNCw0L3QtSwg0LAg0L3QtSDRh9GA0LXQtyDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6NDY3IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI2Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L/RgNC10LLRitGA0YLQsNC90LjRjyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgItCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0YHQutCw0YLQsNCy0LDQvdC1L9C/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGB0LrQsNGC0LDQvdC+0YLQviDQv9GA0LXQtNC4INC4INGB0LvQtdC0INC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwMgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDQv9GA0Lgg0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL3B1bGwuYzoyMTIKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LvQvtC60LDQu9C90LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9wdWxsLmM6MjIwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLQsdGA0L7QuSDQv9C+0LTQvNC+0LTRg9C70Lgg0LjQt9C00YrRgNC/0LDQvdC4INC/0LDRgNCw0LvQtdC70L3QviIKKworIzogYnVpbHRpbi9wdWxsLmM6MzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCecHVsbC5mZuKAnDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNworbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLQnNC10LbQtNGDINGD0LrQsNC30LDRgtC10LvQuNGC0LUsINC60L7QuNGC0L4g0YLQvtC60YMg0YnQviDQtNC+0YHRgtCw0LLQuNGF0YLQtSwg0L3Rj9C80LAg0L/QvtC00YXQvtC00Y/RiSDQutCw0L3QtNC40LTQsNGCLCDQstGK0YDRhdGDICIKKyLQutC+0LnRgtC+INC00LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICIiCisi0JzQtdC20LTRgyDRg9C60LDQt9Cw0YLQtdC70LjRgtC1LCDQutC+0LjRgtC+INGC0L7QutGDINGJ0L4g0LTQvtGB0YLQsNCy0LjRhdGC0LUsINC90Y/QvNCwINC/0L7QtNGF0L7QtNGP0Ykg0LrQsNC90LTQuNC00LDRgiwg0LrQvtC50YLQviAiCisi0LTQsCDRgdC70LXQtdGC0LUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDAKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICIiCisi0J3QsNC5INCy0LXRgNC+0Y/RgtC90L4g0YHRgtC1INC/0L7QtNCw0LvQuCDRiNCw0LHQu9C+0L0g0LfQsCDRg9C60LDQt9Cw0YLQtdC70LgsINC60L7QudGC0L4g0L3QtSDQtSDQvdCw0L/QsNGB0L3QsNC7INGBINC90LjRidC+INCyICIKKyLQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyLQl9Cw0Y/QstC40YXRgtC1INC40LfQtNGK0YDQv9Cy0LDQvdC1INC+0YIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCwg0L3QviDQvdC1INGD0LrQsNC30LDRhdGC0LUg0LrQu9C+0L0uXG4iCisi0J/QvtC90LXQttC1INGC0L7QstCwINC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC10YLQviDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtSDQvdCwINGC0LXQutGD0YnQuNGPINC60LvQvtC9LCDRgtGA0Y/QsdCy0LBcbiIKKyLQtNCwINGD0LrQsNC20LXRgtC1INC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g0L3QsCDQutC+0LzQsNC90LTQvdC40Y8g0YDQtdC0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ4IGJ1aWx0aW4vcmViYXNlLmM6MTM3NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAi0JjQt9Cy0YrQvSDQstGB0LjRh9C60Lgg0LrQu9C+0L3QuC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgItCj0LrQsNC20LXRgtC1INCy0YrRgNGF0YMg0LrQvtC5INC60LvQvtC9INC40YHQutCw0YLQtSDQtNCwINC/0YDQtdCx0LDQt9C40YDQsNGC0LUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgItCj0LrQsNC20LXRgtC1INC60L7QuSDQutC70L7QvSDQuNGB0LrQsNGC0LUg0LTQsCDRgdC70LXQtdGC0LUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTMgYnVpbHRpbi9wdWxsLmM6NDY4Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi0JfQsCDQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L/QvtCz0LvQtdC00L3QtdGC0LUg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4g4oCeZ2l0LXB1bGwoMSnigJwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NjEgYnVpbHRpbi9wdWxsLmM6NDcwCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICLQntCi0JTQkNCb0JXQp9CV0J3Qnl/QpdCg0JDQndCY0JvQmNCp0JUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NzAgYnVpbHRpbi9wdWxsLmM6NDc1CisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY1Cittc2dpZCAiPGJyYW5jaD4iCittc2dzdHIgItCa0JvQntCdIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjMgYnVpbHRpbi9yZWJhc2UuYzoxMzczIGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0KLQtdC60YPRidC40Y/RgiDQutC70L7QvSDQvdC1INGB0LvQtdC00Lgg0L3QuNC60L7QuS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3MiBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAiIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQt9Cw0LTQsNC00LXRgtC1INC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YHQu9C10LTQtdC9INC60LvQvtC9LCDQvNC+0LbQtdGC0LUg0LTQsCDQvdCw0L/RgNCw0LLQuNGC0LUg0YLQvtCy0LAg0YEgIgorItC60L7QvNCw0L3QtNCw0YLQsDoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorItCX0LAg0YHQu9C40LLQsNC90LUg0LUg0YPQutCw0LfQsNC9INC+0YLQtNCw0LvQtdGH0LXQvdC40Y/RgiDRg9C60LDQt9Cw0YLQtdC7IOKAniVz4oCcLFxuIgorItC90L4g0YLQsNC60YrQsiDQvdC1INC1INC00L7RgdGC0LDQstC10L0uIgorCisjOiBidWlsdGluL3B1bGwuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgItC90LXQtNC+0YHRgtGK0L/QvdC+INC/0L7QtNCw0LLQsNC90LU6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4NjcKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgItCx0LXQtyDigJ4tLXZlcmlmeS1zaWduYXR1cmVz4oCcINC/0YDQuCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL3B1bGwuYzo5MjIKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLVtuby1dYXV0b3N0YXNo4oCcINC40LfQuNGB0LrQstCwIOKAni0tcmViYXNl4oCcIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINCy0YHQtSDQvtGJ0LUg0L3QtdGB0YrQt9C00LDQtNC10L0g0LrQu9C+0L0g0YEg0L/RgNC+0LzQtdC90LjRgtC1INC+0YIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgItC40LfQtNGK0YDQv9Cy0LDQvdC1INGBINC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgItGC0YDRj9Cx0LLQsCDQtNCwINC/0L7QtNCw0LTQtdGC0LUg0LjQu9C4INGB0LrQsNGC0LDQtdGC0LUg0L/RgNC+0LzQtdC90LjRgtC1LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorItC00L7RgdGC0LDQstGP0L3QtdGC0L4g0L7QsdC90L7QstC4INCy0YrRgNGF0LAg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvS4gINCg0LDQsdC+0YLQvdC+0YLQvlxuIgorItCy0Lgg0LrQvtC/0LjQtSDQsdC1INC/0YDQtdCy0YrRgNGC0Y/QvdC+INC+0YIg0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyLQoNCw0LHQvtGC0L3QvtGC0L4g0LLQuCDQutC+0L/QuNC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQstGK0YDRgtGP0L3Qvi5cbiIKKyLQodC70LXQtCDQutCw0YLQviDQt9Cw0L/QsNC30LjRgtC1INCy0YHQuNGH0LrQviDQvdC10L7QsdGF0L7QtNC40LzQviDQv9C+0YHQvtGH0LXQvdC+INC+0YIg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIiAgICBnaXQgZGlmZiAlc1xuIgorItC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyIgICAgZ2l0IHJlc2V0IC0taGFyZFxuIgorItC30LAg0LLRgNGK0YnQsNC90LUg0LrRitC8INC90L7RgNC80LDQu9C90L4g0YHRitGB0YLQvtGP0L3QuNC1LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC70LjQstCw0YLQtSDQvNC90L7QttC10YHRgtCy0L4g0LrQu9C+0L3QuCDQsiDQv9GA0LDQt9C10L0g0LLRitGA0YXQvtCyINGD0LrQsNC30LDRgtC10LsuIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQstGK0YDRhdGDINC/0L7QstC10YfQtSDQvtGCINC10LTQuNC9INC60LvQvtC9LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTkyCittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKyLQv9GA0LXQsdCw0LfQuNGA0LDQvdC10YLQviDQtSDQvdC10LLRitC30LzQvtC20L3QviDQt9Cw0YDQsNC00Lgg0LvQvtC60LDQu9C90L4g0LfQsNC/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/igKZdIFstLWV4ZWMg0JrQntCc0JDQndCU0JBdIFstLW9udG8g0J3QntCS0JBf0JHQkNCX0JBdIC0tcm9vdCBb0JrQm9Ce0J1dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6MjAxIGJ1aWx0aW4vcmViYXNlLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGB0L/QuNGB0YrQutCwINC30LAg0LjQt9C/0YrQu9C90LXQvdC40LU6IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NiBidWlsdGluL3JlYmFzZS5jOjIxMiBidWlsdGluL3JlYmFzZS5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9C40YjQtS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjcxCittc2dpZCAibm8gSEVBRD8iCittc2dzdHIgItCb0LjQv9GB0LLQsCDRg9C60LDQt9Cw0YLQtdC7IOKAnkhFQUTigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQstGA0LXQvNC10L3QvdCwINC00LjRgNC10LrRgtC+0YDQuNGPIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMwNAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICLQvdC10LLRitC30LzQvtC20L3QviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdCwINGA0LDQsdC+0YLQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNjIKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0YEg0LrQvtC80LDQvdC00LjRgtC1INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCz0LXQvdC10YDQuNGA0LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDAyCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tdXBzdHJlYW3igJwg0Lgg4oCeLS1vbnRv4oCcINC40LfQuNGB0LrQstCw0YIg0LHQsNC30L7QstC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjkKK21zZ2lkICJrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC/0YDQsNC30L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC/0YDQsNC30L3QuCDRgdGK0L7QsdGJ0LXQvdC40Y8g0L/RgNC4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcyCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgItC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINGB0YrRgSDRgdC70LjQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NAorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICIiCisi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC40YLQtSDRgtC+0YfQutC4INC90LAg0YDQsNC30LrQu9C+0L3Rj9Cy0LDQvdC1INC90LAg0YHQtdGB0YLRgNC40L3RgdC60LjRgtC1INC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc2Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISIKK21zZ3N0ciAi0L/RgNC10LzQtdGB0YLQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRgiDRgdGK0YEg4oCec3F1YXNoIeKAnC/igJxmaXh1cCHigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc3Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICLQv9C+0LTQv9C40YHQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc5IGJ1aWx0aW4vcmViYXNlLmM6MTQ1NQorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCwINGBINC/0YDQvtC80LXQvdC40YLQtSDQsiDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MQorbXNnaWQgImNvbnRpbnVlIHJlYmFzZSIKK21zZ3N0ciAi0L/RgNC+0LTRitC70LbQsNCy0LDQvdC1INC90LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgzCittc2dpZCAic2tpcCBjb21taXQiCittc2dzdHIgItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODQKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QiCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQutC+0LzQsNC90LTQuCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NgorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGC0LXQutGD0YnQsNGC0LAg0LrRgNGK0L/QutCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLRgdGK0LrRgNCw0YLQtdC90Lgg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQuCDQsiDRgdC/0LjRgdGK0LrQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgItC/0YrQu9C90Lgg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQuCDQsiDRgdC/0LjRgdGK0LrQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MworbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgItC/0YDQvtCy0LXRgNC60LAg0L3QsCDRgdC/0LjRgdGK0LrQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NQorbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgIiIKKyLQv9GA0LXQv9C+0LTRgNC10LbQtNCw0L3QtSDQvdCwINGA0LXQtNC+0LLQtdGC0LUg0LfQsCDQstC60LDRgNCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyICIKKyLQv9GA0LXQtNGF0L7QtNC90LjRgtC1INC40Lwg0YHRitGBINC4INCx0LXQtyDRgdC80LXQvdC4INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgItCy0LzRitC60LLQsNC90LUg0L3QsCDQutC+0LzQsNC90LTQuNGC0LUg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSDQsiDRgdC/0LjRgdGK0LrQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OAorbXNnaWQgIm9udG8iCittc2dzdHIgItCy0YrRgNGF0YMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LXQvdCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQtdC90LAg0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMworbXNnaWQgInNxdWFzaC1vbnRvIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1LCDQsiDQutC+0LXRgtC+INC00YDRg9Cz0LjRgtC1INC00LAg0YHQtSDQstC60LDRgNCw0YIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUsINCyINC60L7QtdGC0L4g0LTRgNGD0LPQuNGC0LUg0LTQsCDRgdC1INCy0LrQsNGA0LDRgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDYKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1INC90LAg0LjQt9GC0L7Rh9C90LjQutCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOAorbXNnaWQgImhlYWQtbmFtZSIKK21zZ3N0ciAi0LjQvNC1INC90LAg0LLRitGA0YXQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgItC40LzQtSDQvdCwINCy0YrRgNGF0LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEzCittc2dpZCAicmViYXNlIHN0cmF0ZWd5IgorbXNnc3RyICLRgdGC0YDQsNGC0LXQs9C40Y8g0L3QsCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgItC+0L/RhtC40Lgg0L3QsCDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNQorbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgItC+0L/RhtC40Lgg0L3QsCDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNgorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAi0L/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0LwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE3Cittc2dpZCAidGhlIGJyYW5jaCBvciBjb21taXQgdG8gY2hlY2tvdXQiCittc2dzdHIgItC60LvQvtC90YrRgiwg0LrRitC8INC60L7QudGC0L4g0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAi0LjQvNC1INC90LAg0LHQsNC30LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICLQuNC80LUg0L3QsCDQsdCw0LfQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTkKK21zZ2lkICJjbWQiCittc2dzdHIgItC60L7QvNCw0L3QtNCwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOQorbXNnaWQgInRoZSBjb21tYW5kIHRvIHJ1biIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LAg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjIgYnVpbHRpbi9yZWJhc2UuYzoxNTQwCittc2dpZCAiYXV0b21hdGljYWxseSByZS1zY2hlZHVsZSBhbnkgYGV4ZWNgIHRoYXQgZmFpbHMiCittc2dzdHIgIiIKKyLQsNCy0YLQvtC80LDRgtC40YfQvdC+INC/0L7QtNCw0LLQsNC90LUg0LfQsCDQv9C+0LLRgtC+0YDQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LjRgtC1INC30LDQstGK0YDRiNC40LvQuCDRgSDQvdC10YPRgdC/0LXRhSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NDAKK21zZ2lkICItLVtuby1dcmViYXNlLWNvdXNpbnMgaGFzIG5vIGVmZmVjdCB3aXRob3V0IC0tcmViYXNlLW1lcmdlcyIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1bbm8tXXJlYmFzZS1jb3VzaW5z4oCcINC40LfQuNGB0LrQstCw0YIg0L7Qv9GG0LjRj9GC0LAg4oCeLS1yZWJhc2UtbWVyZ2Vz4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIuKAniVz4oCcINC40LfQuNGB0LrQstCwINC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INC90L7QstCw0YLQsCDQsdCw0LfQsCwg0LfQsNC00LDQtNC10L3QsCDRgSDigJ5vbnRv4oCcOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGD0LrQsNC30LDRgtC10Lsg0LrRitC8INC/0YrRgNCy0L7QvdCw0YfQsNC70LXQvSDQstGA0YrRhSDigJ5vcmlnLWhlYWTigJw6IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBpbnZhbGlkIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDQvdCwIOKAnmFsbG93X3JlcmVyZV9hdXRvdXBkYXRl4oCcINGB0LUg0L/RgNC10YHQutCw0YfQsDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgItCf0YrRgtGP0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjg0OQorbXNnaWQgImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7Qv9GA0LXQtNC10LvQuCDQutGK0Lwg0LrQsNC60LLQviDQtNCwINGB0L7Rh9C4INGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MQorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorbXNnc3RyICIiCisi0KHQu9C10LQg0LrQvtGA0LjQs9C40YDQsNC90LXRgtC+INC90LAg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQvtGC0LHQtdC70LXQttC10YLQtSDRgNC10YjQsNCy0LDQvdC10YLQviDQuNC8INGH0YDQtdC3OlxuIgorIuKAnmdpdCBhZGQvcm0g0KTQkNCZ0Jtf0KFf0JrQntCd0KTQm9CY0JrQouKApuKAnCDQuCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlYmFzZSAtLWNvbnRpbnVl4oCcLlxuIgorItCQ0LrQviDQv9GA0LXQtNC/0L7Rh9C40YLQsNGC0LUg0LTQsCDQv9GA0LXRgdC60L7Rh9C40YLQtSDRgtCw0LfQuCDQutGA0YrQv9C60LAsINC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmViYXNlIC0tc2tpcOKAnC5cbiIKKyLQl9CwINC00LAg0L7RgtC60LDQttC10YLQtSDQv9GA0LXQsdCw0LfQuNGA0LDQvdC10YLQviDQuCDQtNCwINGB0LUg0LLRitGA0L3QtdGC0LUg0LrRitC8INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1LFxuIgorItC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmViYXNlIC0tYWJvcnTigJwuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorImdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlIHBhdGNoZXMgdG8gcmVwbGF5XG4iCisidGhlc2UgcmV2aXNpb25zOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLiIKK21zZ3N0ciAiIgorIlxuIgorItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/RgNC40LPQvtGC0LLRj9C90LXRgtC+INC90LAg0LrRgNGK0L/QutC40YLQtSDQt9CwINC/0YDQuNC70LDQs9Cw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNC90LjRgtC1INCy0LXRgNGB0LjQuDpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyLQkiDRgNC10LfRg9C70YLQsNGCINGC0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0YHQtSDQv9GA0LXQsdCw0LfQuNGA0LDRgi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorbXNnc3RyICIiCisiJXNcbiIKKyLQo9C60LDQttC10YLQtSDQstGK0YDRhdGDINC60L7QuSDQutC70L7QvSDQuNGB0LrQsNGC0LUg0LTQsCDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1LlxuIgorItCf0L7Qs9C70LXQtNC90LXRgtC1IOKAnmdpdC1yZWJhc2UoMSnigJxcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSDQmtCb0J7QnVxuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0LfQsNC00LDQtNC10YLQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINGB0LvQtdC00LXQvSDQutC70L7QvSwg0LzQvtC20LXRgtC1INC00LAg0L3QsNC/0YDQsNCy0LjRgtC1INGC0L7QstCwINGBICIKKyLQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMv0JrQm9Ce0J0gJXNcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDEzCittc2dpZCAiZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LjRgtC1INC30LAg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0YrQtNGK0YDQttCw0YIg0L3QvtCy0Lgg0YDQtdC00L7QstC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgItC/0YDQsNC30L3QsCDQutC+0LzQsNC90LTQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDYKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAi0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQstGK0YDRhdGDINC30LDQtNCw0LTQtdC90LjRjywg0LAg0L3QtSDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDgKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICLQt9CwINGC0LXQutGD0YnQsCDQsdCw0LfQsCDQtNCwINGB0LUg0L/QvtC70LfQstCwINCx0LDQt9Cw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDQuCDRgdC70LXQtNC10L3QvtGC0L4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MAorbXNnaWQgImFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4iCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQutGD0LrQsNGC0LAg0L/RgNC10LTQuCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUyCittc2dpZCAiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8uICDQktC60LvRjtGH0LLQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLW5vLXN0YXTigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1OAorbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCwINGBINC/0YDQvtC80LXQvdC40YLQtSDQsiDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjEKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICIiCisi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtCDQt9CwINC/0L7QtNC/0LjRgSDigJ5TaWduZWQtb2ZmLWJ54oCcINCyINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L3QsCDQstGB0Y/QutC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NAorbXNnaWQgIm1ha2UgY29tbWl0dGVyIGRhdGUgbWF0Y2ggYXV0aG9yIGRhdGUiCittc2dzdHIgItC00LDRgtCw0YLQsCDQvdCwINC/0L7QtNCw0LLQsNC90LUg0LTQsCDQtSDQtNCw0YLQsNGC0LAg0L7RgiDQsNCy0YLQvtGA0LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NgorbXNnaWQgImlnbm9yZSBhdXRob3IgZGF0ZSBhbmQgdXNlIGN1cnJlbnQgZGF0ZSIKK21zZ3N0ciAi0L/QvtC70LfQstCw0L3QtSDQvdCwINGC0LXQutGD0YnQsNGC0LAg0LTQsNGC0LAsINCwINC90LUg0YLQsNC30Lgg0L7RgiDQsNCy0YLQvtGA0LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OAorbXNnaWQgInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIKK21zZ3N0ciAi0L/RgdC10LLQtNC+0L3QuNC8INC90LAg4oCeLS1yZXNldC1hdXRob3ItZGF0ZeKAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDcwIGJ1aWx0aW4vcmViYXNlLmM6MTQ3NAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAi0L/QvtC00LDQstCwINGB0LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGFwcGx54oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzIKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIgorbXNnc3RyICLQsdC10Lcg0L/RgNC+0LzQtdC90Lgg0LIg0L/RgNCw0LfQvdC40YLQtSDQt9C90LDRhtC4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzYgYnVpbHRpbi9yZWJhc2UuYzoxNDc5Cittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICLQvtGC0LHQuNGA0LDQvdC1INC90LAg0LLRgdC40YfQutC4INC/0L7QtNCw0LLQsNC90LjRjyDQtNC+0YDQuCDQtNCwINC90Y/QvNCwINC/0YDQvtC80LXQvdC4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODEKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAi0L/RgNC+0LTRitC70LbQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODQKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICLQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINGC0LXQutGD0YnQsNGC0LAg0LrRgNGK0L/QutCwINC4INC/0YDQvtC00YrQu9C20LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg2Cittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0Lgg0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGPINC60LvQvtC9IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODkKK21zZ2lkICJhYm9ydCBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzIgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC90LUg0LHQtdC3INC/0YDQvtC80Y/QvdCwINC60YrQvCDQutCw0LrQstC+INGB0L7Rh9C4IOKAnkhFQUTigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YTQsNC50LvQsCDRgSDQutC+0LzQsNC90LTQuCDQv9GA0Lgg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAsINC60L7Rj9GC0L4g0YHQtSDQv9GA0LjQu9Cw0LPQsCDQuNC70Lgg0YHQu9C40LLQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk2Cittc2dpZCAidXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgItC/0YDQuCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0YHRgtGA0LDRgtC10LPQuNGPINC30LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwMAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICIiCisi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC/0L7RgtGA0LXQsdC40YLQtdC70Y8g0LTQsCDRgNC10LTQsNC60YLQuNGA0LAg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPINC30LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIo0L7RgdGC0LDRgNGP0LvQvikg0L/RgNC10YHRitC30LTQsNCy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LjRj9GC0LAg0LLQvNC10YHRgtC+INC00LAg0YHQtSDQv9GA0LXRgdC60LDRh9Cw0YIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwOQorbXNnaWQgInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0L/RgNCw0LfQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8g0L/RgNC4INC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMQorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkiCittc2dzdHIgIiIKKyLQv9GA0LXQvNC10YHRgtCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGB0YrRgSDigJ5zcXVhc2gh4oCcL+KAnGZpeHVwIeKAnCDQv9GA0Lgg4oCeLWnigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNworbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgItCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0YHQutCw0YLQsNCy0LDQvdC1L9C/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGB0LrQsNGC0LDQvdC+0YLQviDQv9GA0LXQtNC4INC4INGB0LvQtdC0INC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxOQorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICIiCisi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtNC+0LLQtSDRgSDQutC+0LzQsNC90LTQuCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1INGB0LvQtdC0INCy0YHRj9C60L4g0L/QvtC00LDQstCw0L3QtSDQsiAiCisi0YDQtdC00LDQutGC0LjRgNCw0L3QuNGPINGB0L/QuNGB0YrQuiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIzCittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyDRgSDQv9GA0LDQt9C90Lgg0YHRitC+0LHRidC10L3QuNGPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjYKK21zZ2lkICJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iCittc2dzdHIgItC+0L/QuNGCINC30LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC40Y/RgtCwINCy0LzQtdGB0YLQviDRgtC1INC00LAg0YHQtSDQv9GA0LXRgdC60LDRh9Cw0YIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyOQorbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAiIgorItC30LAg0LTQvtGD0YLQvtGH0L3Rj9Cy0LDQvdC10YLQviDQvdCwINGB0LvQtdC00LXQvdC40Y8g0LrQu9C+0L0sINC40LfQv9C+0LvQt9Cy0LDQudGC0LU6XG4iCisiXG4iCisiICAgIGdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMxCittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQt9Cw0LTQsNC00LXQvdCw0YLQsCDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwINC90LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi0L7Qv9GG0LjRjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM0Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgItCw0YDQs9GD0LzQtdC90YLRitGCINC00LAg0YHQtSDQv9C+0LTQsNC00LUg0L3QsCDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwINC30LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNworbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgItC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0LTQvtGB0YLQuNC20LjQvNC4INC/0L7QtNCw0LLQsNC90LjRjyDQtNC+INC90LDRh9Cw0LvQvdC+0YLQviDQuNC8INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi0L/QvtC00LTRgNGK0LbQutCw0YLQsCDQvdCwIOKAnnJlYmFzZS51c2VCdWlsdGlu4oCcINC1INC/0YDQtdC80LDRhdC90LDRgtCwLlxuIgorItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINCy0LjQttGC0LUg4oCeZ2l0IGhlbHAgY29uZmln4oCcLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYwCittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIiIKKyLQmNC30LPQu9C10LbQtNCwLCDRh9C1INGB0LXQs9CwINGB0LUg0L/RgNC40LvQsNCz0LDRgiDQutGA0YrQv9C60Lgg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1hbeKAnC4gINCd0LUg0LzQvtC20LUg0LTQsCAiCisi0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQsiDQvNC+0LzQtdC90YLQsC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwMQorbXNnaWQgIiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGlzIGRlcHJlY2F0ZWQuIFVzZSAtLXJlYmFzZS1tZXJnZXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLQntC/0YbQuNGP0YLQsCDigJ4tLXByZXNlcnZlLW1lcmdlc+KAnCDQtSDQvtGB0YLQsNGA0Y/Qu9CwLiAg0J/QvtC70LfQstCw0LnRgtC1IOKAni0tcmViYXNlLW1lcmdlc+KAnCDQstC80LXRgdGC0L4gIgorItC90LXRjy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwNgorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1vbnRvJyIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1rZWVwLWJhc2XigJwg0Lgg4oCeLS1vbnRv4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDgKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0ta2VlcC1iYXNl4oCcINC4IOKAni0tcm9vdOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAi0JjQt9Cz0LvQtdC20LTQsCDQsiDQvNC+0LzQtdC90YLQsCDQvdC1INGC0LXRh9C1INC/0YDQtdCx0LDQt9C40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYxNgorbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiIgorItCe0L/RhtC40Y/RgtCwIOKAni0tZWRpdC10b2Rv4oCcINC1INC00L7RgdGC0YrQv9C90LAg0YHQsNC80L4g0L/QviDQstGA0LXQvNC1INC90LAg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC/0YDQtdCx0LDQt9C40YDQsNC90LUuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MzkKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTEKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1INCy0YHQuNGH0LrQuCDQutC+0L3RhNC70LjQutGC0Lgg0L/RgNC4INGB0LvQuNCy0LDQvdC10YLQvi4gINCh0LvQtdC0INGC0L7QstCwXG4iCisi0L7RgtCx0LXQu9C10LbQtdGC0LUg0LrQvtGA0LjQs9C40YDQsNC90LXRgtC+INC40Lwg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBhZGTigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY3MAorbXNnaWQgImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgItC/0YDQvtC80LXQvdC40YLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC30LDQvdGD0LvQtdC90LgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbW92ZSBiYWNrIHRvICVzIgorbXNnc3RyICLQstGA0YrRidCw0L3QtdGC0L4g0LrRitC8IOKAniVz4oCcINC1INC90LXQstGK0LfQvNC+0LbQvdC+IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICVzIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQlc1xuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCVzXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS5cbiIKK21zZ3N0ciAiIgorItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4gINCS0YrQt9C80L7QttC90L4g0LvQuCDQtSDQtNCwINGB0YLQtVxuIgorItCyINC/0YDQvtGG0LXRgSDQvdCwINC00YDRg9Cz0L4g0L/RgNC10LHQsNC30LjRgNCw0L3QtT8g0JDQutC+INGC0L7QstCwINC1INGC0LDQutCwLCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiICAgICVzXG4iCisi0JDQutC+INC90LUg0YHRgtC1INCyINC/0YDQvtGG0LXRgSDQvdCwINC00YDRg9Cz0L4g0L/RgNC10LHQsNC30LjRgNCw0L3QtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIiAgICAlc1xuIgorItC4INC+0YLQvdC+0LLQviDQt9Cw0L/QvtGH0L3QtdGC0LUg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4uICDQotC10LrRg9GJ0L7RgtC+INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0YHQtSDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsCwgIgorItC30LBcbiIKKyLQtNCwINC90LUg0LfQsNCz0YPQsdC40YLQtSDRgdC70YPRh9Cw0LnQvdC+INC/0YDQvtC80LXQvdC4LlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NTcKK21zZ2lkICJzd2l0Y2ggYEMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAnkPigJwg0L7Rh9Cw0LrQstCwINGH0LjRgdC70L4g0LfQsCDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBtb2RlOiAlcyIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90LAg0YHRgtGA0LDRgtC10LPQuNGPOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODIwCittc2dpZCAiLS1zdHJhdGVneSByZXF1aXJlcyAtLW1lcmdlIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLXN0cmF0ZWd54oCcINC40LfQuNGB0LrQstCwINC90Y/QutC+0Y8g0L7RgiDQvtC/0YbQuNC40YLQtSDigJ4tLW1lcmdl4oCcINC40LvQuCDigJ4tLWludGVyYWN0aXZl4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NjAKK21zZ2lkICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWlyZXMgLS1leGVjIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWPigJwg0LjQt9C40YHQutCy0LAg0L3Rj9C60L7RjyDQvtGCINC+0L/RhtC40LjRgtC1IOKAni0tZXhlY+KAnCDQuNC70Lgg4oCeLS0iCisiaW50ZXJhY3RpdmXigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg3MgorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFtIG9wdGlvbnMgd2l0aCBlaXRoZXIgaW50ZXJhY3RpdmUgb3IgbWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorItC+0L/RhtC40LjRgtC1INC30LAg4oCeYW3igJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0YEg0L7Qv9GG0LjQuNGC0LUg0LfQsCDRgdC70LjQstCw0L3QtSDQuNC70Lgg0LfQsCDQuNC90YLQtdGA0LDQutGC0LjQstC90LAgIgorItGA0LDQsdC+0YLQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODkxCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLXByZXNlcnZlLW1lcmdlc+KAnCDQuCDigJ4tLXJlYmFzZS1tZXJnZXPigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5NQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisi0JPQoNCV0KjQmtCQOiDQvtC/0YbQuNC40YLQtSDigJ4tLXByZXNlcnZlLW1lcmdlc+KAnCDQuCDigJ4tLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWPigJwg0YHQsCAiCisi0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRgdC70LXQtNC10L0g0LrQu9C+0L06IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MjUKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0L3QvtCy0L4g0L3QsNGH0LDQu9C90L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAi4oCeJXPigJw6INC40LfQuNGB0LrQstCwINGB0LUg0YLQvtGH0L3QviDQtdC00L3QsCDQsdCw0LfQsCDQt9CwINGB0LvQuNCy0LDQvdC1INGBINC60LvQvtC90LAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIuKAniVz4oCcOiDQuNC30LjRgdC60LLQsCDRgdC1INGC0L7Rh9C90L4g0LXQtNC90LAg0LHQsNC30LAg0LfQsCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQgJyVzJyIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJXPigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAi0KTQkNCi0JDQm9Cd0JAg0JPQoNCV0KjQmtCQOiDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwINC60LvQvtC9IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgItCi0LDQutGK0LIg0YPQutCw0LfQsNGC0LXQuyDQvdGP0LzQsDogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAwNgorbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4sINGB0L7Rh9C10L3QviDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0NAorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0LrQsNGC0LDQtSDQsNCy0YLQvtC80LDRgtC40YfQvdC+IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC+0YfQsNC60LLQsNC9INGA0LXQt9GD0LvRgtCw0YIg0L/RgNC4INGB0LrQsNGC0LDQstCw0L3QtTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAi0JTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAlc1xuIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGB0LrQsNGC0LDQvdC+OiDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTkKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5naXQgcmVzZXQgLS1oYXJk4oCcIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNjgKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICLQn9GA0L7QvNC10L3QuNGC0LUg0YLRgNGP0LHQstCwINC40LvQuCDQtNCwINGB0LUg0L/QvtC00LDQtNCw0YIsINC40LvQuCDQtNCwINGB0LUg0YHQutCw0YLQsNGP0YIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1INC60YrQvCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTE5Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQtSDQvdCw0L/RitC70L3QviDQsNC60YLRg9Cw0LvQtdC9LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0LUg0L3QsNC/0YrQu9C90L4g0LDQutGC0YPQsNC70LXQvS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI5Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQtSDQvdCw0L/RitC70L3QviDQsNC60YLRg9Cw0LvQtdC9IOKAlCDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LHQsNC30LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0LUg0L3QsNC/0YrQu9C90L4g0LDQutGC0YPQsNC70LXQvSDigJQg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC/0YDQtdCx0LDQt9C40YDQsNC90LVcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgItCa0YPQutCw0YLQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1INC/0YDQtdC00Lgg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvtGC0YXQstGK0YDQu9C4INC/0YDQtdCx0LDQt9C40YDQsNC90LXRgtC+LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgItCf0YDQvtC80LXQvdC40YLQtSDQsiDigJ4lc+KAnDpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LjRgtC1INC+0YIg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIiIKKyLQn9GK0YDQstC+LCDRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC30LDQv9C+0YfQstCwINC00LAg0YHQvtGH0Lgg0LrRitC8INCx0LDQt9Cw0YLQsCwg0LLRitGA0YXRgyDQutC+0Y/RgtC+ICIKKyLQv9GA0LXQsdCw0LfQuNGA0LDRgtC14oCmXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE4MworbXNnaWQgIkNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LTQtdC70Z0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAi0J/RgNC10LLRitGA0YLQsNC90LUg0L3QsCDigJ4lc+KAnCDQutGK0Lwg4oCeJXPigJwuXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzIKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayDQlNCY0KDQldCa0KLQntCg0JjQr1/QndCQX0dJVCIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MzAKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLQodGC0LDQvdC00LDRgNGC0L3QviDQvdC1INC80L7QttC1INC00LAg0L7QsdC90L7QstC40YLQtSDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSDQsiDRhdGA0LDQvdC40LvQuNGJ0LUsINC60L7QtdGC0L4g0L3QtSDQtSDQs9C+0LvQvixcbiIKKyLQt9Cw0YnQvtGC0L4g0YLQvtCy0LAg0YnQtSDQtNC+0LLQtdC00LUg0LTQviDQvdC10YHRitC+0YLQstC10YLRgdGC0LLQuNGPINC90LAg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0YFcbiIKKyLRgtC+0LLQsCwg0LrQvtC10YLQviDRgdGC0LUg0LjQt9GC0LvQsNGB0LrQsNC70Lgg0Lgg0LfQsCDQtNCwINC/0YDQuNCy0LXQtNC10YLQtSDQtNGK0YDQstC+0YLQviDQutGK0Lwg4oCeSEVBROKAnCDRidC1INGC0YDRj9Cx0LLQsFxuIgorItC00LAg0LjQt9C/0YrQu9C90LjRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXQgLS1oYXJkXG4iCisiXG4iCisiXG4iCisi0JfQsCDQtNCwINC/0L7Qt9Cy0L7Qu9C40YLQtSDQv9C+0LTQvtCx0L3QviDQuNC30YLQu9Cw0YHQutCy0LDQvdC1LCDQsiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INGB0LvQtdC00LLQsCDQtNCwXG4iCisi0LfQsNC00LDQtNC10YLQtSDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2jigJwg0LTQsCDQtSDigJ5pZ25vcmXigJxcbiIKKyIo0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUpINC40LvQuCAg4oCed2FybuKAnCAo0YHQsNC80L4g0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSkuICDQndC1INGB0LUg0L/RgNC10L/QvtGA0YrRh9Cy0LAg0LTQsFxuIgorItC/0YDQsNCy0LjRgtC1INGC0L7QstCwLCDQvtGB0LLQtdC9INCw0LrQviDQv9C+INC00YDRg9CzINC90LDRh9C40L0g0L3QtSDRgdC40L3RhdGA0L7QvdC40LfQuNGA0LDRgtC1INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INGBXG4iCisi0YLQvtCy0LAsINC60L7QtdGC0L4g0LjQt9GC0LvQsNGB0LrQstCw0YLQtS5cbiIKKyJcbiIKKyLQl9CwINC00LAg0LfQsNCz0LvRg9GI0LjRgtC1INGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSwg0LrQsNGC0L4g0LfQsNC/0LDQt9C40YLQtSDRgdGC0LDQvdC00LDRgNGC0L3QvtGC0L4g0L/QvtCy0LXQtNC10L3QuNC1LFxuIgorItC30LDQtNCw0LnRgtC1INC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCecmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaOKAnCDQtNCwINC1IOKAnnJlZnVzZeKAnCAo0L7RgtC60LDQtykuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjg1MAorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorIid3YXJuJyBvciAnaWdub3JlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGVsZXRpbmcgdGhlXG4iCisiY3VycmVudCBicmFuY2gsIHdpdGggb3Igd2l0aG91dCBhIHdhcm5pbmcgbWVzc2FnZS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisi0KHRgtCw0L3QtNCw0YDRgtC90L4g0L3QtSDQvNC+0LbQtSDQtNCwINC40LfRgtGA0LjQtdGC0LUg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0sINC30LDRidC+0YLQviDRgdC70LXQtNCy0LDRidC+0YLQviDQutC70L7QvdC40YDQsNC90LVcbiIKKyLQvdCwINGC0LXQutGD0YnQvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INGJ0LUg0LUg0LHQtdC3INC90LjQutCw0LrQstC4INGE0LDQudC70L7QstC1LCDQsCDRgtC+0LLQsCDQtSDQvtCx0YrRgNC60LLQsNGJ0L4uXG4iCisiXG4iCisi0JfQsCDQtNCwINC80L7QttC1INC00LAg0LjQt9GC0YDQuNCy0LDRgtC1INGC0LXQutGD0YnQuNGPINC60LvQvtC9LCDQsiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INGB0LvQtdC00LLQsCDQtNCwXG4iCisi0LfQsNC00LDQtNC10YLQtSDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnTigJwg0LTQsCDQtSDigJ5pZ25vcmXigJxcbiIKKyIo0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUpINC40LvQuCAg4oCed2FybuKAnCAo0YHQsNC80L4g0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSkuXG4iCisiXG4iCisi0JfQsCDQtNCwINC30LDQs9C70YPRiNC40YLQtSDRgtC+0LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUsINC30LDQtNCw0LnRgtC1INC90LDRgdGC0YDQvtC50LrQsNGC0LBcbiIKKyLigJ5yZWNlaXZlLmRlbnlEZWxldGVDdXJyZW504oCcINC00LAg0LUg4oCecmVmdXNl4oCcICjQvtGC0LrQsNC3KS4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzNgorbXNnaWQgInF1aWV0IgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MAorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLQotGA0Y/QsdCy0LAg0LTQsCDRg9C60LDQttC10YLQtSDQtNC40YDQtdC60YLQvtGA0LjRjy4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT3QktCg0JXQnNCVXSBbLS1leHBpcmUtdW5yZWFjaGFibGU90JLQoNCV0JzQlV0gWy0tcmV3cml0ZV0gIgorIlstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0g0KPQmtCQ0JfQkNCi0JXQm+KApiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyMgorbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisi0KPQmtCQ0JfQkNCi0JXQm+KApiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyNQorbXNnaWQgImdpdCByZWZsb2cgZXhpc3RzIDxyZWY+IgorbXNnc3RyICJnaXQgcmVmbG9nIGV4aXN0cyDQo9Ca0JDQl9CQ0KLQldCbIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2NyBidWlsdGluL3JlZmxvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDQstGA0LXQvNC1IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICLQntGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC90LAg0LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0LjigKYiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDRgdC+0YfQuCDQvdCw0L3QuNC60YrQtNC1ISIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2OTUKK21zZ2lkICJubyByZWZsb2cgc3BlY2lmaWVkIHRvIGRlbGV0ZSIKK21zZ3N0ciAi0L3QtSDQtSDRg9C60LDQt9Cw0L0g0LbRg9GA0L3QsNC7INGBINC/0L7QtNCw0LLQsNC90LjRjyDQt9CwINC40LfRgtGA0LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQttGD0YDQvdCw0Lsg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZWZsb2cgZm9yICclcyciCittc2dzdHIgItC70LjQv9GB0LLQsCDQttGD0YDQvdCw0Lsg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRhNC+0YDQvNCw0YIg0L3QsCDRg9C60LDQt9Cw0YLQtdC7OiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCDQmtCb0J7QnV0gWy1tINCe0KHQndCe0JLQldCdX9Ca0JvQntCdXSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSDQmNCc0JUg0JDQlNCg0JXQoSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOCBidWlsdGluL3JlbW90ZS5jOjM4Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lINCh0KLQkNCg0J5f0JjQnNCVINCd0J7QktCeX9CY0JzQlSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjQzCittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAgYnVpbHRpbi9yZW1vdGUuYzo0OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQg0JjQnNCVICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCDQmtCb0J7QnSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0g0JjQnNCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyjQk9Cg0KPQn9CQIHwgIgorItCe0KLQlNCQ0JvQldCn0JXQndCeX9Cl0KDQkNCd0JjQm9CY0KnQlSnigKZdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0g0JjQnNCVINCa0JvQntCd4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1IGJ1aWx0aW4vcmVtb3RlLmM6NzQKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdINCY0JzQlSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0g0JjQnNCVINCd0J7Qkl/QkNCU0KDQldChIFvQodCi0JDQoF/QkNCU0KDQldChXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNyBidWlsdGluL3JlbW90ZS5jOjgwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkINCY0JzQlSDQndCe0JJf0JDQlNCg0JXQoSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOCBidWlsdGluL3JlbW90ZS5jOjgxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlINCY0JzQlSDQkNCU0KDQldChIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzCittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBb0J7Qn9Cm0JjQr+KApl0g0JjQnNCVINCQ0JTQoNCV0KEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzINCY0JzQlSDQmtCb0J7QneKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQg0JjQnNCVINCa0JvQntCd4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFvQntCf0KbQmNCv4oCmXSDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBb0J7Qn9Cm0JjQr+KApl0g0JjQnNCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFvQntCf0KbQmNCv4oCmXSBb0JPQoNCj0J/QkCB8INCe0KLQlNCQ0JvQldCn0JXQndCeX9Cl0KDQkNCd0JjQm9CY0KnQleKApl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorItCY0LfQv9C+0LvQt9Cy0LDQvdC10YLQviDRgdCw0LzQviDQvdCwIOKAni0tbWlycm9y4oCcINC1INC+0L/QsNGB0L3Qvi4gINCS0LzQtdGB0YLQviDRgtC+0LLQsFxuIgorItC/0L7Qu9C30LLQsNC50YLQtSDigJ4tLW1pcnJvcj1mZXRjaOKAnCDQuNC70Lgg4oCeLS1taXJyb3I9cHVzaOKAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeLS1taXJyb3LigJw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSDQutC70L7QvdC4INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LTQvtGB0YLQsNCy0LXQvdC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgItCy0L3QsNGB0Y/QvdC1INC90LAg0LLRgdC40YfQutC4INC10YLQuNC60LXRgtC4INC4INC/0YDQuNC90LDQtNC70LXQttCw0YnQuNGC0LUg0LjQvCDQvtCx0LXQutGC0Lgg0L/RgNC4INC00L7RgdGC0LDQstGP0L3QtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgItC80L7QttC1INC4INC00LAg0L3QtSDRgdC1INC00L7RgdGC0LDQstGP0YIg0L3QuNC60LDQutCy0Lgg0LXRgtC40LrQtdGC0LggKNGH0YDQtdC3INC+0L/RhtC40Y/RgtCwIOKAni0tbm8tdGFnc+KAnCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAi0LrQu9C+0L0v0Lgg0LfQsCDRgdC70LXQtNC10L3QtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICLQvtGB0L3QvtCy0LXQvSDQutC70L7QvSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzMKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAiIgorItC90LDRgdGC0YDQvtC50LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUsINC+0YIg0LrQvtC10YLQviDQtNCwINGB0LUg0LjQt9C00YrRgNC/0LLQsCDQuNC70Lgg0LTQvtGB0YLQsNCy0Y8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiIgorItC90Y/QvNCwINGB0LzQuNGB0YrQuyDQtNCwINGB0LUg0YPQutCw0LfQstCwINC+0YHQvdC+0LLQtdC9INC60LvQvtC9INC/0YDQuCDQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tbWlycm9y4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIiIKKyLRg9C60LDQt9Cy0LDQvdC10YLQviDQvdCwINGB0LvQtdC00LXQvdC4INC60LvQvtC90Lgg0LUg0YHQvNC40YHQu9C10L3QviDRgdCw0LzQviDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC4INGF0YDQsNC90LjQu9C40YnQsCwg0L7RgiAiCisi0LrQvtC40YLQviDRgdC1INC00L7RgdGC0LDQstGPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NCBidWlsdGluL3JlbW90ZS5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg0YEg0LjQvNC1IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTggYnVpbHRpbi9yZW1vdGUuYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC30LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgItCe0YHQvdC+0LLQvdC40Y/RgiDQutC70L7QvSDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L3QsNGB0YLRgNC+0LXQvSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgItCe0LHQtdC60YLQuNGC0LUg0LfQsCDQtNC+0YHRgtCw0LLRj9C90LUg0LfQsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeJXPigJwg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQv9C+0LvRg9GH0LXQvdC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MyBidWlsdGluL3JlbW90ZS5jOjQ1MQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIijRgdGK0LLQv9Cw0LTQsNGJ0LgpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ1NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIo0LfQsCDQuNC30YLRgNC40LLQsNC90LUpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYyOSBidWlsdGluL3JlbW90ZS5jOjc2NCBidWlsdGluL3JlbW90ZS5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJyVzJyIKK21zZ3N0ciAi0J3Rj9C80LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INC90LAg0LjQvNC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAi0KDQsNC30LTQtdC70YrRgiDigJ4lc+KAnCDQsiDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorItCd0LXRgdGC0LDQvdC00LDRgNGC0L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4INC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1INC90Y/QvNCwINC00LAg0LHRitC00LDRgiDQvtCx0L3QvtCy0LXQvdC4XG4iCisiICAgICVzXG4iCisiICDQn9GA0L7QvNC10L3QtdGC0LUg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDRgNGK0YfQvdC+LCDQsNC60L4g0LUg0L3QtdC+0LHRhdC+0LTQuNC80L4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMQorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisi0JHQtdC70LXQttC60LA6INCa0LvQvtC9INC40LfQstGK0L0g0LnQtdGA0LDRgNGF0LjRj9GC0LAg4oCecmVmcy9yZW1vdGVzL+KAnCDQvdC1INCx0LUg0LjQt9GC0YDQuNGCLlxuIgorItCY0LfRgtGA0LjQudGC0LUg0LPQviDRh9GA0LXQtyDQutC+0LzQsNC90LTQsNGC0LA6IgorbXNnc3RyWzFdICIiCisi0JHQtdC70LXQttC60LA6INCd0Y/QutC+0LvQutC+INC60LvQvtC90LAg0LjQt9Cy0YrQvSDQudC10YDQsNGA0YXQuNGP0YLQsCDigJ5yZWZzL3JlbW90ZXMv4oCcINC90LUg0LHRj9GF0LAg0LjQt9GC0YDQuNGC0LguXG4iCisi0JjQt9GC0YDQuNC50YLQtSDQs9C4INGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAi0KDQsNC30LTQtdC70YrRgiDigJ4lc+KAnCDQsiDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiINC90L7QsiAo0YHQu9C10LTQstCw0YnQvtGC0L4g0LTQvtGB0YLQsNCy0Y/QvdC1INGJ0LUg0LPQviDRgNCw0LfQv9C+0LvQvtC20Lgg0LIg4oCecmVtb3Rlcy8lc+KAnCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE5Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDRgdC70LXQtNC10L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiDRgdGC0LDRgCAo0LjQt9GC0YDQuNC50YLQtSDRh9GA0LXQtyDigJ5naXQgcmVtb3RlIHBydW5l4oCcKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjMKK21zZ2lkICIgPz8/IgorbXNnc3RyICIg0L3QtdGP0YHQvdC+INGB0YrRgdGC0L7Rj9C90LjQtSIKKworIyBDSEVDSworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LrQu9C+0L0g0LfQsCDRgdC70LjQstCw0L3QtSDigJ4lc+KAnC4gINCd0LXQstGK0LfQvNC+0LbQvdC+INC1INC00LAg0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQstGK0YDRhdGDINC/0L7QstC10YfQtSAiCisi0L7RgiAxINC60LvQvtC9IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INCy0YrRgNGF0YMg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1ICjRgdGK0YEg0YHQu9C40LLQsNC90LjRjykg0LLRitGA0YXRgyDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INCy0YrRgNGF0YMg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiINGB0LvQuNCy0LDQvdC1INGBINC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAi0YHQu9C40LLQsNC90LUg0YEg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS0qcyAgICBhbmQgd2l0aCByZW1vdGUgJXNcbiIKK21zZ3N0ciAiJS0qcyAgICDQuCDRgSDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAi0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICLQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzOAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgItCw0LrRgtGD0LDQu9C10L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MQorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgItC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQstGK0YDRgtC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAi0LvQvtC60LDQu9C90LjRj9GCINC1INC40LfQvtGB0YLQsNC90LDQuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzINC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30YLQu9Cw0YHQutCy0LAg0LrRitC8ICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzINC40LfRgtC70LDRgdC60LLQsCDQutGK0LwgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0LjQt9GC0LvQsNGB0LrQstCwINC60YrQvCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg0LjQt9GC0LvQsNGB0LrQstCwINC60YrQvCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI5Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgItCx0LXQtyDQt9Cw0Y/QstC60Lgg0LrRitC8INC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAi4pePINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICDQkNC00YDQtdGBINC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU4IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NCBidWlsdGluL3JlbW90ZS5jOjEzMTMKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKNCx0LXQtyDQsNC00YDQtdGBKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAg0JDQtNGA0LXRgSDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LU6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYgYnVpbHRpbi9yZW1vdGUuYzoxMTc4IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICDQutC70L7QvSDRgdC+0YfQtdC9INC+0YIgSEVBRDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIijQsdC10Lcg0L/RgNC+0LLQtdGA0LrQsCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OAorbXNnaWQgIih1bmtub3duKSIKK21zZ3N0ciAiKNC90LXQv9C+0LfQvdCw0YIpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorIiAg0LrQu9C+0L3RitGCINGB0L7Rh9C10L0g0L7RgiBIRUFEICjQutC70L7QvdGK0YIg0YPQutCw0LfQsNC9INCy0YrQsiDRhNCw0LnQu9CwIEhFQUQg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4gIgorItGF0YDQsNC90LjQu9C40YnQtVxuIgorIiAg0L3QtSDQtSDQtdC00L3QvtC30L3QsNGH0LXQvSDQuCDQtSDQvdGP0LrQvtC5INC+0YIg0YHQu9C10LTQvdC40YLQtSk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgINCe0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvTolcyIKK21zZ3N0clsxXSAiICDQntGC0LTQsNC70LXRh9C10L3QuCDQutC70L7QvdC4OiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTcgYnVpbHRpbi9yZW1vdGUuYzoxMjIzCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKNGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QtSDQsdC1INC/0YDQvtCy0LXRgNC10L3QvikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNgorbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgINCb0L7QutCw0LvQtdC9INC60LvQvtC9INC90LDRgdGC0YDQvtC10L0g0LfQsCDQuNC30LTRitGA0L/QstCw0L3QtSDRh9GA0LXQtyDigJ5naXQgcHVsbOKAnDoiCittc2dzdHJbMV0gIiAg0JvQvtC60LDQu9C90Lgg0LrQu9C+0L3QuCDQvdCw0YHRgtGA0L7QtdC90Lgg0LfQsCDQuNC30LTRitGA0L/QstCw0L3QtSDRh9GA0LXQtyDigJ5naXQgcHVsbOKAnDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNAorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAg0JvQvtC60LDQu9C90LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCDRidC1INCx0YrQtNCw0YIg0L/RgNC10L3QtdGB0LXQvdC4INGH0YDQtdC3IOKAniBwdXNo4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAg0JvQvtC60LDQu9C90LjRj9GCINGD0LrQsNC30LDRgtC10LssINC90LDRgdGC0YDQvtC10L0g0LfQsCDigJ5naXQgcHVzaOKAnCVzOiIKK21zZ3N0clsxXSAiICDQm9C+0LrQsNC70L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4LCDQvdCw0YHRgtGA0L7QtdC90Lgg0LfQsCDigJ5naXQgcHVzaOKAnCVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQxCittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAgcmVmcy9yZW1vdGVzL9CY0JzQlS9IRUFEINGB0L/QvtGA0LXQtCDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDMKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCByZWZzL3JlbW90ZXMv0JjQnNCVL0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1OAorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INGD0YHRgtCw0L3QvtCy0Lgg0L7RgtC00LDQu9C10YfQtdC90LjRj9GCINCy0YDRitGFIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjAKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorItCc0L3QvtC20LXRgdGC0LLQviDQutC70L7QvdC4INGBINCy0YrRgNGF0L7QstC1LiAg0JjQt9Cx0LXRgNC10YLQtSDQuNC30YDQuNGH0L3QviDQvdGP0LrQvtC5INC+0YIg0YLRj9GFINGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0YPQutCw0LfQsNGC0LXQuzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC90LDRgdGC0YDQvtC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAi4oCeJXPigJwg0YnQtSDRgdC1INC/0YDQtdCy0YrRgNC90LUg0LIg0L7QsdC10LrRgiDQuNC30LLRitC9INC60LvQvtC90LjRgtC1ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAi4oCeJXPigJwg0YHQtSDQv9GA0LXQstGK0YDQvdCwINCyINC+0LHQtdC60YIg0LjQt9Cy0YrQvSDQutC70L7QvdC40YLQtSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLQntC60LDRgdGC0YDRj9C90LUg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgItCw0LTRgNC10YE6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiIOKXjyBb0YnQtSDQsdGK0LTQtSDQvtC60LDRgdGC0YDQtdC90L5dICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiDil48gW9C+0LrQsNGB0YLRgNC10L3Qvl0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NAorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINC+0LPQu9C10LTQsNC70LDRgtCwINC90LAg0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INGF0YDQsNC90LjQu9C40YnQsCDRgdC70LXQtCDQtNC+0YHRgtCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNyBidWlsdGluL3JlbW90ZS5jOjE0OTEgYnVpbHRpbi9yZW1vdGUuYzoxNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgItCd0Y/QvNCwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdCwINC40LzQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUzCittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC60LvQvtC9IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjAKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICLQvdC1INC1INGD0LrQsNC30LDQvdC+INC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDc3Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgItC30LDQv9C40YLQstCw0L3QtSDQutGK0Lwg0LDQtNGA0LXRgdC40YLQtSDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LUsINCwINC90LUg0LfQsCDQtNC+0YHRgtCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3OQorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLRgdC40YfQutC4INCw0LTRgNC10YHQuCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgItC90LUg0LUg0LfQsNC00LDQtNC10L0g0LDQtNGA0LXRgSDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMworbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICLQv9GA0L7QvNGP0L3QsCDQvdCwINCw0LTRgNC10YHQuNGC0LUg0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzUKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LDQtNGA0LXRgdC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzcKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LDQtNGA0LXRgdC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDQKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tYWRk4oCcINC4IOKAni0tZGVsZXRl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSAo0YHRgtCw0YApINGE0L7RgNC80LDRgiDQt9CwINCw0LTRgNC10YE6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICLQotCw0LrRitCyINCw0LTRgNC10YEg0L3QtSDQtSDQvtGC0LrRgNC40YI6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTMKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgItCd0LjQutC+0Lkg0L7RgiDQsNC00YDQtdGB0LjRgtC1LCDQutC+0LjRgtC+INC90LUg0YHQsCDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LUsINC90Y/QvNCwINC00LAg0YHQtSDQuNC30YLRgNC40LUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisi0J/QvtGB0YLQtdC/0LXQvdC90L7RgtC+INC/0YDQtdC/0LDQutC10YLQuNGA0LDQvdC1INC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQviDRgSDQuNC90LTQtdC60YHQuCDQvdCwINCx0LDQt9CwINCx0LjRgtC+0LLQuCDQvNCw0YHQutC4LlxuIgorItCf0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCAtLW5vLXdyaXRlLWJpdG1hcC1pbmRleCDQuNC70Lgg0LjQt9C60LvRjtGH0LXRgtC1INC90LDRgdGC0YDQvtC50LrQsNGC0LBcbiIKKyLigJ5wYWNrLndyaXRlYml0bWFwc+KAnC4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorItC60L7QvNCw0L3QtNCw0YLQsCDigJ5wYWNrLW9iamVjdHPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsCDQt9CwINC/0YDQtdC/0LDQutC10YLQuNGA0LDQvdC10YLQviDQvdCwICIKKyLQs9Cw0YDQsNC90YLQuNGA0LDRidC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisicmVwYWNrOiDQvtGCIOKAnnBhY2stb2JqZWN0c+KAnCDRgdC1INC40LfQuNGB0LrQstCw0YIg0YDQtdC00L7QstC1INGB0LDQvNC+INGBINC/0YrQu9C90Lgg0YjQtdGB0YLQvdCw0LnRgdC10YLQuNGH0L3QuCAiCisi0YPQutCw0LfQsNGC0LXQu9C4LiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyNTQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorItC60L7QvNCw0L3QtNCw0YLQsCDigJ5wYWNrLW9iamVjdHPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINC30LDQstGK0YDRiNC4INC30LAg0L/RgNC10L/QsNC60LXRgtC40YDQsNC90LXRgtC+INC90LAgIgorItCz0LDRgNCw0L3RgtC40YDQsNGJ0LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAi0L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQstGB0LjRh9C60L4g0LIg0L/QsNC60LXRgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTQKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICIiCisi0YHRitGJ0L7RgtC+INC60LDRgtC+INC+0L/RhtC40Y/RgtCwIOKAni1h4oCcLiAg0JTQvtC/0YrQu9C90LjRgtC10LvQvdC+IOKAlCDQvdC10LTQvtGB0YLQuNC20LjQvNC40YLQtSDQvtCx0LXQutGC0Lgg0LTQsCDRgdGC0LDQvdCw0YIgIgorItC90LXQv9Cw0LrQtdGC0LjRgNCw0L3QuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTcKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgIiIKKyLQv9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC90LXQvdGD0LbQvdC40YLQtSDQv9Cw0LrQtdGC0LjRgNCw0L3QuCDRhNCw0LnQu9C+0LLQtSDQuCDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtIgorInBydW5lLXBhY2tlZOKAnCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTkKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tbm8tcmV1c2UtZGVsdGHigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LXBhY2stb2JqZWN0c+KAnCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKyLQv9C+0LTQsNCy0LDQvdC1INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1uby1yZXVzZS1vYmplY3TigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LXBhY2stb2JqZWN0c+KAnCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgItCx0LXQtyDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtdXBkYXRlLXNlcnZlci1pbmZv4oCcIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1sb2NhbOKAnCDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtcGFjay1vYmplY3Rz4oCcIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwOAorbXNnaWQgIndyaXRlIGJpdG1hcCBpbmRleCIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC4INC30LDQv9C40YHQstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdC4INC90LAg0LHQsNC30LAg0LHQuNGC0L7QstC4INC80LDRgdC60LgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEwCittc2dpZCAicGFzcyAtLWRlbHRhLWlzbGFuZHMgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tZGVsdGEtaXNsYW5kc+KAnCDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtcGFjay1vYmplY3Rz4oCcIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMQorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICLQtdCy0YDQuNGB0YLQuNGH0L3QsCDQtNCw0YLQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTIKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICIiCisi0L/RgNC4INC60L7QvNCx0LjQvdC40YDQsNC90LXRgtC+INGBINC+0L/RhtC40Y/RgtCwIOKAni1B4oCcIOKAlCDQsdC10Lcg0YDQsNC30L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC/0L4g0YHRgtCw0YDQuCDQvtGCICIKKyLRgtC+0LLQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTQKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0YEg4oCeLWHigJwg4oCUINC/0YDQtdC/0LDQutC10YLQuNGA0LDQvdC1INC90LAg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAi0YDQsNC30LzQtdGAINC90LAg0L/RgNC+0LfQvtGA0LXRhtCwINC30LAg0LTQtdC70YLQsCDQutC+0LzQv9GA0LXRgdC40Y/RgtCwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNyBidWlsdGluL3JlcGFjay5jOjMyMworbXNnaWQgImJ5dGVzIgorbXNnc3RyICLQsdCw0LnRgtC+0LLQtSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTgKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAiIgorItGB0YrRidC+0YLQviDQutCw0YLQviDQs9C+0YDQvdCw0YLQsCDQvtC/0YbQuNGPLCDQvdC+INC+0LPRgNCw0L3QuNGH0LXQvdC40LXRgtC+INC00LAg0LUg0L/QviDRgNCw0LfQvNC10YAg0L3QsCDQv9Cw0LzQtdGC0YLQsCwg0LAg0L3QtSAiCisi0L/QviDQsdGA0L7RjyDQvdCwINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICLQvtCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0L3QsCDQvNCw0LrRgdC40LzQsNC70L3QsNGC0LAg0LTRitC70LHQvtGH0LjQvdCwINC90LAg0LTQtdC70YLQsNGC0LAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIyCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIgorbXNnc3RyICLQvtCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0L3QsCDQvNCw0LrRgdC40LzQsNC70L3QuNGPINCx0YDQvtC5INC90LjRiNC60LgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggcGFja2ZpbGUiCittc2dzdHIgItC80LDQutGB0LjQvNCw0LvQtdC9INGA0LDQt9C80LXRgCDQvdCwINCy0YHQtdC60Lgg0L/QsNC60LXRgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjYKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAi0L/RgNC10L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1INCyINC/0LDQutC10YLQuCDQsdC10LvRj9C30LDQvdC4INGBIOKAni5rZWVw4oCcIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICLQsdC10Lcg0L/RgNC10L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDRgtC+0LfQuCDQv9Cw0LrQtdGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMzOAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgItC/0LDQutC10YLQuNGC0LUg0LIg0YXRgNCw0L3QuNC70LjRidC1INGBINCy0LDQttC90Lgg0L7QsdC10LrRgtC4INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGC0YDQuNGP0YIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWtlZXAtdW5yZWFjaGFibGXigJwg0Lgg4oCeLUHigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDI1Cittc2dpZCAiTm90aGluZyBuZXcgdG8gcGFjay4iCittc2dzdHIgItCd0LjRidC+INC90L7QstC+INC30LAg0L/QsNC60LXRgtC40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQl9CwINC00LAg0LHRitC00LDRgiDQt9Cw0LzQtdC90LXQvdC4INGBINC90L7QstC4INCy0LXRgNGB0LjQuCwg0L3Rj9C60L7QuFxuIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1INCx0Y/RhdCwINC/0YDQtdC40LzQtdC90YPQstCw0L3QuCwg0LrQsNGC0L4g0LrRitC8XG4iCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0LjQvNC10L3QsNGC0LAg0LjQvCDQsdC1INC00L7QsdCw0LLQtdC9INC/0YDQtdGE0LjQutGB0YrRgiDigJ5vbGQt4oCcLlxuIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INCi0LDQt9C4INC+0L/QtdGA0LDRhtC40Y8g0LHQtSDQvdC10YPRgdC/0LXRiNC90LAsINC60LDQutGC0L4g0Lgg0L7QsdGA0LDRgtC90LDRgtCwXG4iCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0LjMgCDigJQg0LfQsCDQstGA0YrRidCw0L3QtdGC0L4g0L3QsCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90LjRgtC1INC40LzQtdC90LAuXG4iCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0J/RgNC10LjQvNC10L3Rg9Cy0LDQudGC0LUg0YTQsNC50LvQvtCy0LXRgtC1INCyIOKAniVz4oCcINGA0YrRh9C90L46XG4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YLQsCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0g0J7QkdCV0JrQoiDQl9CQ0JzQr9Cd0JAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0INCe0JHQldCa0KIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCDQn9Ce0JTQkNCS0JDQndCVIFvQoNCe0JTQmNCi0JXQm+KApl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjYKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQg0J7QkdCV0JrQouKApiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD3QpNCe0KDQnNCQ0KJdIFstbCBb0KjQkNCR0JvQntCdXV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINGB0LAg0LfQsNC80LXRgdGC0LLQsNC90LU6IOKAniVz4oCcXG4iCisi0LLRitC30LzQvtC20L3QuNGC0LUg0YTQvtGA0LzQsNGC0Lgg0YHQsCDigJ5zaG9ydOKAnCAo0LrRgNCw0YLRitC6KSwg4oCebWVkaXVt4oCcICjRgdGA0LXQtNC10L0pINC4IOKAnmxvbmfigJwgKNC00YrQu9GK0LMpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCINC30LAg0LfQsNC80Y/QvdCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlcGxhY2UgcmVmICclcyciCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCINC30LAg0LfQsNC80Y/QvdCwINC1INC40LfRgtGA0LjRgjog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0LfQsCDRg9C60LDQt9Cw0YLQtdC7INC30LAg0LfQsNC80Y/QvdCwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GP0YIg0LfQsCDQt9Cw0LzRj9C90LAg4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorItCe0LHQtdC60YLQuNGC0LUg0YLRgNGP0LHQstCwINC00LAg0YHQsCDQtdC00L3QsNC60YrQsiDQstC40LQuXG4iCisi4oCeJXPigJwg0YHQvtGH0Lgg0LrRitC8INC30LDQvNC10L3QtdC9INC+0LHQtdC60YIg4oCeJXPigJwsXG4iCisi0LAg4oCeJXPigJwg0YHQvtGH0Lgg0LrRitC8INC30LDQvNC10YHRgtCy0LDRiSDQvtCx0LXQutGCINC+0YIg0LLQuNC0IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0g0LfQsCDQt9Cw0L/QuNGBIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNDIKK21zZ2lkICJjYXQtZmlsZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICLQuNC30L/RitC70L3QtdC90LjQtdGC0L4g0L3QsCDigJ5jYXQtZmlsZeKAnCDQt9Cw0LLRitGA0YjQuCDRgSDQs9GA0LXRiNC60LAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC30LAg0YfQtdGC0LXQvdC1IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzIKK21zZ2lkICJ1bmFibGUgdG8gc3Bhd24gbWt0cmVlIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdGK0LfQtNCw0LTQtSDQv9GA0L7RhtC10YEg0LfQsCDigJ5ta3RyZWXigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3NgorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gbWt0cmVlIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSDQvtGCIOKAnm1rdHJlZeKAnCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg1Cittc2dpZCAibWt0cmVlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIuKAnm1rdHJlZeKAnCDQt9Cw0LLRitGA0YjQuCDRgSDQs9GA0LXRiNC60LAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAi4oCebWt0cmVl4oCcINC90LUg0LLRitGA0L3QsCDQuNC80LUg0L3QsCDQvtCx0LXQutGCIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZzdGF0ICVzIgorbXNnc3RyICLigJ5mc3RhdOKAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCDQstGK0YDRhdGDIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0g0LIg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzIyIGJ1aWx0aW4vcmVwbGFjZS5jOjM3OCBidWlsdGluL3JlcGxhY2UuYzo0MjMKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0L7QsdC10LrRgjog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7Qv9GA0LXQtNC10LvQuCDQstC40LTRitGCINC90LAg0L7QsdC10LrRgtCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRhNCw0LnQu9CwINGBINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICLQvdC+0LLQuNGP0YIg0Lgg0YHRgtCw0YDQuNGP0YIg0L7QsdC10LrRgiDRgdCwINC10LTQuNC9INC4INGB0YrRiTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCDQutCw0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLQtdGC0LjQutC10YLRitGCINC/0YDQuCDRgdC70LjQstCw0L3QtSDQsiDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCBlINC90LXQv9GA0LDQstC40LvQtdC9IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLQtdGC0LjQutC10YLRitGCINC/0YDQuCDRgdC70LjQstCw0L3QtSDQsiDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCBlINC90LXQv9GA0LDQstC40LvQtdC9IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorItCf0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDRgdGK0LTRitGA0LbQsCDQtdGC0LjQutC10YLQsCDQv9GA0Lgg0YHQu9C40LLQsNC90LUg4oCeJXPigJwsINC60L7QudGC0L4g0LUgIgorItC40LfRhdCy0YrRgNC70LXQvSwg0LfQsNGC0L7QstCwINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1lZGl04oCcLCDQsCDQvdC1IOKAni0tZ3JhZnTigJwuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgItC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQtSDRgSDQv9C+0LTQv9C40YEg0L3QsCBHUEciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICLQn9C+0LTQv9C40YHRitGCINGJ0LUg0LHRitC00LUg0L/RgNC10LzQsNGF0L3QsNGCINCyINC30LDQvNC10L3Rj9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgItC30LDQvNC10L3Rj9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0LfQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L3QviIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdyYWZ0IGZvciAnJXMnIHVubmVjZXNzYXJ5IgorbXNnc3RyICLQv9GA0LjRgdCw0LTQutCw0YLQsCDQt9CwIOKAniVz4oCcINC1INC40LfQu9C40YjQvdCwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAi0L3QvtCy0L7RgtC+INC4INGB0YLQsNGA0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0YHQsCDQtdC00L3QviDQuCDRgdGK0YnQvjog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItGB0LvQtdC00L3QuNGC0LUg0L/RgNC40YHQsNC00LrQuCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC/0YDQtdC+0LHRgNCw0LfRg9Cy0LDRgjpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ3Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0L/QuNGB0YrQutCwINGBINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0LfQsCDQt9Cw0LzRj9C90LAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OAorbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0LfQsCDQt9Cw0LzRj9C90LAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OQorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRiSDQvtCx0LXQutGCIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTAKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICLRgdC80Y/QvdCwINC90LAg0YDQvtC00LjRgtC10LvQuNGC0LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKK21zZ2lkICJjb252ZXJ0IGV4aXN0aW5nIGdyYWZ0IGZpbGUiCittc2dzdHIgItC/0YDQtdC+0LHRgNCw0LfRg9Cy0LDQvdC1INC90LAg0YTQsNC50LvQsCDQt9CwINC/0YDQuNGB0LDQtNC60LjRgtC1IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTIKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICLQt9Cw0LzRj9C90LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8sINCw0LrQviDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU0Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICLQsdC10Lcg0YTQvtGA0LzQsNGC0LjRgNCw0L3QviDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g4oCUINC30LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1lZGl04oCcIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YLQvtC30Lgg0KTQntCg0JzQkNCiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjgKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWZvcm1hdOKAnCDQuNC30LjRgdC60LLQsCDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdC/0LjRgdGK0LoiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NgorbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1m4oCcINC40LfQuNGB0LrQstCwINC30LDQv9Cw0LfQstCw0L3QtdGC0L4g0L3QsCDQt9Cw0LzQtdGB0YLQuNGC0LXQuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTgwCittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1yYXfigJwg0LjQt9C40YHQutCy0LAg4oCeLS1lZGl04oCcIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODYKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1k4oCcINC40LfQuNGB0LrQstCwINC/0L7QvdC1INC10LTQuNC9INCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5MgorbXNnaWQgImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQsdGA0L7QuSDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5OAorbXNnaWQgIi1lIG5lZWRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tZeKAnCDQuNC30LjRgdC60LLQsCDQv9C+0L3QtSDQtdC00LjQvSDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDQKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1n4oCcINC40LfQuNGB0LrQstCwINC/0L7QvdC1INC10LTQuNC9INCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxMAorbXNnaWQgIi0tY29udmVydC1ncmFmdC1maWxlIHRha2VzIG5vIGFyZ3VtZW50IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWNvbnZlcnQtZ3JhZnQtZmlsZeKAnCDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNgorbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1s4oCcINC/0YDQuNC10LzQsCDRgtC+0YfQvdC+INC10LTQuNC9INGI0LDQsdC70L7QvSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0INCf0KrQouKApiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NjAKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAi0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC1INC90LAg0YfQuNGB0YLQuCDQutC+0YDQtdC60YbQuNC4INC90LAg0LrQvtC90YTQu9C40LrRgtC4INCyINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjc5Cittc2dpZCAiJ2dpdCByZXJlcmUgZm9yZ2V0JyB3aXRob3V0IHBhdGhzIGlzIGRlcHJlY2F0ZWQiCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgcmVyZXJlIGZvcmdldOKAnCDQuNC30LjRgdC60LLQsCDRg9C60LDQt9Cy0LDQvdC10YLQviDQvdCwINC/0YrRgiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQs9C10L3QtdGA0LjRgNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutCwINC30LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMgorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFvQn9Ce0JTQkNCS0JDQndCVXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gW9Cj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J5dIFstLV0g0J/QqtCi0JjQqdCQ4oCmIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gIgorIlvQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/QlNCq0KDQktCeXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBb0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQnl0gWy0tXSBb0J/QqtCi0JjQqdCQ4oCmXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgItGB0LzQtdGB0LXQvdC+IChtaXhlZCkiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgItC80LXQutC+IChzb2Z0KSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAiaGFyZCIKK21zZ3N0ciAi0L/RitC70L3QviAoaGFyZCkiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICLRgdC70Y/RgtC+IChtZXJnZSkiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgItC30LDQv9Cw0LfQstCw0YnQviAoa2VlcCkiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC1INC/0L7QstGA0LXQtNC10L0uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICLQlNGK0YDQstC+0YLQviwg0YHQvtGH0LXQvdC+INC+0YIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQvi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAi0JTRitGA0LLQvtGC0L4sINGB0L7Rh9C10L3QviDQvtGCIOKAniVz4oCcLCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINGB0L7Rh9C4INC60YrQvCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZXNldC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCAlcyDQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQv9C+INCy0YDQtdC80LUg0L3QsCDRgdC70LjQstCw0L3QtS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTQgYnVpbHRpbi9zdGFzaC5jOjUxOSBidWlsdGluL3N0YXNoLmM6NTk0CisjOiBidWlsdGluL3N0YXNoLmM6NjE4Cittc2dpZCAiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIKK21zZ3N0ciAi0L/Qvi3QvNCw0LvQutC+INC/0L7QtNGA0L7QsdC90L7RgdGC0LgsINC00LAg0YHQtSDQuNC30LLQtdC20LTQsNGCINGB0LDQvNC+INCz0YDQtdGI0LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAi0LjQvdC00LXQutGB0LAg0Lgg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINCx0LXQtyDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAi0YHQsNC80L4g0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINCx0LXQtyDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OSBidWlsdGluL3Jlc2V0LmM6MzAxCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAzCittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQvdC+INC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwOQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICIiCisi0L7RgtCx0LXQu9GP0LfQstCw0L3QtSDRgdCw0LzQviDQvdCwINGE0LDQutGC0LAsINGH0LUg0LjQt9GC0YDQuNGC0LjRgtC1INC/0YrRgtC40YnQsCDRidC1INCx0YrQtNCw0YIg0LTQvtCx0LDQstC10L3QuCDQv9C+LdC60YrRgdC90L4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAi0KHRgtC+0LnQvdC+0YHRgtGC0LAg4oCeJXPigJwg0L3QtSDQtSDRgNCw0LfQv9C+0LfQvdCw0YLQsCDQutCw0YLQviDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LAg0LLQtdGA0YHQuNGPLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0YDQsNC30L/QvtC30L3QsNGCINC60LDRgtC+INC00YrRgNCy0L4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzYwCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1wYXRjaOKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LLRgdGP0LrQsCDQvtGCINC+0L/RhtC40LjRgtC1IOKAni0taGFyZOKAnC/igJ4tLW1peGVk4oCcL+KAni0tIgorInNvZnTigJwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLW1peGVk4oCcINC90LUg0LHQuNCy0LAg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LfQsNC10LTQvdC+INGBINC/0YrRgtC40YnQsC4gINCS0LzQtdGB0YLQviDRgtC+0LLQsCAiCisi0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCByZXNldCAtLSDQn9Cq0KLigKbigJwuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINC40LfQstGK0YDRiNC40YLQtSAlcyDQt9Cw0L3Rg9C70Y/QstCw0L3QtSwg0LrQvtCz0LDRgtC+INGB0YLQtSDQt9Cw0LTQsNC70Lgg0J/QqtCiLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JIg0LPQvtC70L4g0YXRgNCw0L3QuNC70LjRidC1INC90LUg0LzQvtC20LUg0LTQsCDQuNC30LLRitGA0YjQuNGC0LUgJXMg0LfQsNC90YPQu9GP0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTEKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLU7igJwg0LjQt9C40YHQutCy0LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1taXhlZOKAnCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxMgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICLQn9GA0L7QvNC10L3QuCDQuNC30LLRitC9INC40L3QtNC10LrRgdCwINGB0LvQtdC0INC30LDQvdGD0LvRj9Cy0LDQvdC10YLQvjoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0LiAgWW91IGNhblxuIgorInVzZSAnLS1xdWlldCcgdG8gYXZvaWQgdGhpcy4gIFNldCB0aGUgY29uZmlnIHNldHRpbmcgcmVzZXQucXVpZXQgdG8gdHJ1ZVxuIgorInRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCY0LfQsdGA0L7Rj9Cy0LDQvdC10YLQviDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQuNC30LLRitC9INC40L3QtNC10LrRgdCwINGB0LvQtdC0INC30LDQvdGD0LvRj9Cy0LDQvdC1INC+0YLQvdC1ICUuMmYg0YHQtdC6LlxuIgorItCe0L/RhtC40Y/RgtCwIOKAni0tcXVpZXTigJwg0LfQsNCz0LvRg9GI0LDQstCwINGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSDQtdC00L3QvtC60YDQsNGC0L3Qvi4gINCX0LAg0L/QvtGB0YLQvtGP0L3QvdC+XG4iCisi0LfQsNCz0LvRg9GI0LDQstCw0L3QtSDQt9Cw0LTQsNC50YLQtSDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnJlc2V0LnF1aWV04oCcINC00LAg0LUg4oCedHJ1ZeKAnCAo0LjRgdGC0LjQvdCwKS5cbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC90YPQu9C10L0g0LrRitC8INCy0LXRgNGB0LjRjyDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICLQndC+0LLQuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvS4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0MTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0c+KAnCDQuCDigJ4tLW1pc3NpbmfigJwg0Lgg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0NzIKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIHJlcXVpcmVzIC0tb2JqZWN0cyIKK21zZ3N0ciAi0YTQuNC70YLRgNC40YDQsNC90LXRgtC+INC90LAg0L7QsdC10LrRgtC4INC40LfQuNGB0LrQstCwINC+0L/RhtC40Y/RgtCwIOKAni0tb2JqZWN0c+KAnCIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyMgorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAi0LrQvtC80LDQvdC00LDRgtCwIOKAnnJldi1saXN04oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQuNC30LLQtdC20LTQsNC90LXRgtC+INC90LAg0LHQtdC70LXQttC60LgiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjUKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLXVzZS1iaXRtYXAtaW5kZXggd2l0aCBvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXVzZS1iaXRtYXAtaW5kZXjigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINGE0LjQu9GC0YDQuNGA0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBb0J7Qn9Cm0JjQr+KApl0gLS0gW9CQ0KDQk9Cj0JzQldCd0KLigKZdIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L3QuNGP0YIg0L3QuNC3IOKAni0t4oCcINC00LAg0YHQtSDRgtGK0LvQutGD0LLQsCDQutCw0YLQviDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAi0YHQv9C40YDQsNC90LUg0L3QsCDQsNC90LDQu9C40LfQsCDRgdC70LXQtCDQv9GK0YDQstC40Y8g0LDRgNCz0YPQvNC10L3Rgiwg0LrQvtC50YLQviDQvdC1INC1INC+0L/RhtC40Y8iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE4Cittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAi0LjQt9GF0L7QtCDQsiDQtNGK0LvQs9C40Y8g0YTQvtGA0LzQsNGCIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjU1MQorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBb0J7Qn9Cm0JjQr+KApl0gLS0gW9CQ0KDQk9Cj0JzQldCd0KLigKZdXG4iCisiICAg0LjQu9C4OiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgW9CQ0KDQk9Cj0JzQldCd0KLigKZdXG4iCisiICAg0LjQu9C4OiBnaXQgcmV2LXBhcnNlIFvQntCf0KbQmNCv4oCmXSBb0JDQoNCT0KPQnNCV0J3QouKApl1cbiIKKyJcbiIKKyLQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0YrRgNCy0LjRjyDQstCw0YDQuNCw0L3RgiDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0iCisiaOKAnCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFvQntCf0KbQmNCv4oCmXSDQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/Qn9Ce0JTQkNCS0JDQndCV4oCmIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQg0J/QntCU0JrQntCc0JDQndCU0JAiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9Cf0J7QlNCQ0JLQkNCd0JXigKYiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sg0J/QntCU0JrQntCc0JDQndCU0JAiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwg0L7Rh9Cw0LrQstCwINC/0L7Qu9C+0LbQuNGC0LXQu9C90L4g0YfQuNGB0LvQviDQt9CwINCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiDQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0LfQsNCy0YrRgNGI0LLQsNC90LUg0L3QsCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0L7RgtCx0LjRgNCw0L3QuNGPINC40LvQuCDQvtGC0LzQtdC90Lgg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0L/RgNC+0LTRitC70LbQsNCy0LDQvdC1INC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC+0YLQsdC40YDQsNC90LjRjyDQuNC70Lgg0L7RgtC80LXQvdC4INC90LAg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgItC+0YLQvNGP0L3QsCDQvdCwINC/0L7RgNC10LTQuNGG0LAg0L7RgiDQvtGC0LHQuNGA0LDQvdC40Y8g0LjQu9C4INC+0YLQvNC10L3QuCDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAi0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0Lgg0L/RgNC+0LTRitC70LbQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICLQsdC10Lcg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICLQvdC+0LzQtdGAINC90LAg0YDQvtC00LjRgtC10LvRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICLQuNC30LHQvtGAINC90LAg0L7RgdC90L7QstC90LjRjyDRgNC+0LTQuNGC0LXQuyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi0YHRgtGA0LDRgtC10LPQuNGPINC90LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE2Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi0L7Qv9GG0LjRjyDQt9CwINGB0YLRgNCw0YLQtdCz0LjRj9GC0LAg0L3QsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjUKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QviDQv9GA0LDQt9C90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjkKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQt9C70LjRiNC90LjRgtC1LCDQv9GA0LDQt9C90Lgg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjIzMgorbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QsCDQvtGC0LzRj9C90LAiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQ1Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L7RgtCx0LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9ybS5jOjE5Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gW9Ce0J/QptCY0K/igKZdIFstLV0g0KTQkNCZ0JvigKYiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorItGB0LvQtdC00L3QuNGP0YIg0YTQsNC50Lsg0LUg0YHRitGBINGB0YrQtNGK0YDQttCw0L3QuNC1INCyINC40L3QtNC10LrRgdCwINGA0LDQt9C70LjRh9C90L4g0L7RgiDRgtC10LrRg9GJ0L7RgtC+INC80YMg0YHRitC00YrRgNC20LDQvdC40LUgIgorItC4XG4iCisi0YDQsNC30LvQuNGH0L3QviDQvtGCINGB0YrQvtGC0LLQtdGC0YHRgtCy0LDRidC+0YLQviDQvdCwIEhFQUQ6IgorbXNnc3RyWzFdICIiCisi0YHQu9C10LTQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDRgdCwINGB0YrRgSDRgdGK0LTRitGA0LbQsNC90LjQtSDQsiDQuNC90LTQtdC60YHQsCDRgNCw0LfQu9C40YfQvdC+INC+0YIg0YLQtdC60YPRidC+0YLQviDQuNC8ICIKKyLRgdGK0LTRitGA0LbQsNC90LjQtSDQuFxuIgorItGA0LDQt9C70LjRh9C90L4g0L7RgiDRgdGK0L7RgtCy0LXRgtGB0YLQstCw0YnQvtGC0L4g0L3QsCBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMgorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKNC30LAg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQuNC30L/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwIOKAni1m4oCcKSIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gItGB0LvQtdC00L3QuNGP0YIg0YTQsNC50Lsg0LUg0YEg0L/RgNC+0LzQtdC90LXQvdC+INGB0YrQtNGK0YDQttCw0L3QuNC1INCyINC40L3QtNC10LrRgdCwOiIKK21zZ3N0clsxXSAi0YHQu9C10LTQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDRgdCwINGBINC/0YDQvtC80LXQvdC10L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSDQsiDQuNC90LTQtdC60YHQsDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjAgYnVpbHRpbi9ybS5jOjIyOQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKNC30LAg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0YTQsNC50LvQsCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC+0L/RhtC40Y/RgtCwIOKAni0tY2FjaGVk4oCcLCDQsCDQt9CwINC/0YDQuNC90YPQtNC40YLQtdC70L3QvlxuIgorItC40LfRgtGA0LjQstCw0L3QtSDigJQg4oCeLWbigJwpIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICLRgdC70LXQtNC90LjRj9GCINGE0LDQudC7INC1INGBINC/0YDQvtC80LXQvdC10L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSIKK21zZ3N0clsxXSAi0YHQu9C10LTQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDRgdCwINGBINC/0YDQvtC80LXQvdC10L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgItC00LAg0L3QtSDRgdC1INC40LfQstC10LbQtNCw0YIg0LjQt9GC0YDQuNGC0LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDRgdCw0LzQviDQvtGCINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgItCy0YrQv9GA0LXQutC4INC/0YDQvtCy0LXRgNC60LDRgtCwINC30LAg0LDQutGC0YPQsNC70L3QvtGB0YLRgtCwINC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+IgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgItGA0LXQutGD0YDRgdC40LLQvdC+INC40LfRgtGA0LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9ybS5jOjI0NworbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICIiCisi0LjQt9GF0L7QtNC90LjRj9GCINC60L7QtCDQtNCwINC1IDAsINC00L7RgNC4INCw0LrQviDQvdC40LrQvtC5INGE0LDQudC7INC9ZSBlINC90LDQv9Cw0YHQvdCw0Lsg0YEg0YjQsNCx0LvQvtC90LAg0LfQsCAiCisi0LjQt9GC0YDQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JtLmM6Mjg5Cittc2dpZCAicGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyLQt9CwINC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUsINC40LvQuCDQstC60LDRgNCw0LnRgtC1INC/0YDQvtC80LXQvdC40YLQtSDQv9C+INGE0LDQudC70LAg4oCeLmdpdG1vZHVsZXPigJwg0LIg0LjQvdC00LXQutGB0LAsXG4iCisi0LjQu9C4INCz0Lgg0YHQutCw0YLQsNC50YLQtSIKKworIzogYnVpbHRpbi9ybS5jOjMwNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICLQsdC10Lcg0LjQt9C/0L7Qu9C30LLQsNC90LXRgtC+INC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLXLigJwg4oCeJXPigJwg0L3Rj9C80LAg0LTQsCDRgdC1INC40LfRgtGA0LjQtSDRgNC10LrRg9GA0YHQuNCy0L3QviIKKworIzogYnVpbHRpbi9ybS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybTog4oCeJXPigJwg0L3QtSDQvNC+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+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGRpc2FibGUpIDxvcHRpb25zPiIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSDQntCf0KbQmNCv4oCmIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjYzCittc2dpZCAidGhpcyB3b3JrdHJlZSBpcyBub3Qgc3BhcnNlIChzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgbm90IGV4aXN0KSIKK21zZ3N0ciAiIgorItGC0L7QstCwINC90LUg0LUg0YfQsNGB0YLQuNGH0L3QviDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+ICjQstC10YDQvtGP0YLQvdC+INC70LjQv9GB0LLQsCDRhNCw0LnQuyDigJ5zcGFyc2UtY2hlY2tvdXTigJwpIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI0MQorbXNnaWQgImZhaWxlZCB0byBzZXQgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBzZXR0aW5nIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZ+KAnCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNTgKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNzcKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICLQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LAg0YfQsNGB0YLQuNGH0L3QvtGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1INCyINC/0YrRgtC10LLQvtC00LXQvSDRgNC10LbQuNC8IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI4MworbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC90LAg0YfQsNGB0YLQuNGH0L3QvtGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0LgiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzgyCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8cGF0dGVybnM+KSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCDQqNCQ0JHQm9Ce0J3igKYpIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM5OQorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINGI0LDQsdC70L7QvdC40YLQtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDA1Cittc2dpZCAic2V0IHNwYXJzZS1jaGVja291dCBwYXR0ZXJucyIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINGI0LDQsdC70L7QvdC40YLQtSDQt9CwINGH0LDRgdGC0LjRh9C90L7RgtC+INC40LfRgtC10LPQu9GP0L3QtSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NjgKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi0LHQtdC3INC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YfQsNGB0YLQuNGH0L3QviDQuNC30YLQtdCz0LvRj9C90LUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDgwCittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozNworbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMyBidWlsdGluL3N0YXNoLmM6NDIKK21zZ2lkICJnaXQgc3Rhc2ggc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBzaG93IFvQntCf0KbQmNCv4oCmXSBb0KHQmtCQ0KLQkNCd0J5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ3Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFvQodCa0JDQotCQ0J3Qnl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBb0KHQmtCQ0KLQkNCd0J5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjYgYnVpbHRpbi9zdGFzaC5jOjYyCittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYnJhbmNoINCa0JvQntCdIFvQodCa0JDQotCQ0J3Qnl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjcKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4IGJ1aWx0aW4vc3Rhc2guYzo3NworbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2Ug0KHQqtCe0JHQqdCV0J3QmNCVXVxuIgorIiAgICAgICAgICBbLS1dIFvQn9Cq0KLigKZdXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjMxIGJ1aWx0aW4vc3Rhc2guYzo4NAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gW9Ch0KrQntCR0KnQldCd0JjQlV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MgorbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBb0KHQmtCQ0KLQkNCd0J5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTcKK21zZ2lkICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFvQodCa0JDQotCQ0J3Qnl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MgorbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSDQodCq0J7QkdCp0JXQndCY0JVdIFstcXwtLXF1aWV0XSDQn9Ce0JTQkNCS0JDQndCVIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L/QvtC00LDQstCw0L3QtSwg0L/RgNC40LvQuNGH0LDRidC+INC90LAg0L3QtdGJ0L4g0YHQutCw0YLQsNC90L4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIKK21zZ3N0ciAi0KPQutCw0LfQsNC90Lgg0YHQsCDQv9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQstC10YDRgdC40Lg6JXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NDkKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAi0J3QtSDQtSDQvtGC0LrRgNC40YLQviDQvdC40YnQviDRgdC60LDRgtCw0L3Qvi4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0LfQsCDRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBidWlsdGluL3N0YXNoLmM6MjI0IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzUKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3Rhc2ggY2xlYXLigJwg0L3QtSDQv9C+0LTQtNGK0YDQttCwINCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQwMworbXNnaWQgImNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi0L/QviDQstGA0LXQvNC1INC90LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQuNC70L7QttC40YLQtSDQvdC10YnQviDRgdC60LDRgtCw0L3QviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAi0YTQsNC50LvRitGCINGBINGA0LDQt9C70LjQutC40YLQtSDigJ4lc14h4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCz0LXQvdC10YDQuNGA0LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjEKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIiIKKyLQsiDQuNC90LTQtdC60YHQsCDQuNC80LAg0LrQvtC90YTQu9C40LrRgtC4LiAg0J/RgNC+0LHQstCw0LnRgtC1INC00LAg0LjQt9C/0YrQu9C90LjRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDQsdC10Lcg0L7Qv9GG0LjRj9GC0LAg4oCeLS0iCisiaW5kZXjigJwuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI3Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAi0LTRitGA0LLQvtGC0L4g0YHQvtGH0LXQvdC+INC+0YIg0LjQvdC00LXQutGB0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90L4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzYKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAi0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LLRitC30YHRgtCw0L3QvtCy0Y/RgiDQvtGCINGB0LrQsNGC0LDQvdC+0YLQviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgItCh0LvQuNCy0LDQvdC1INC90LAg4oCeJXPigJwg0YEg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODEKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQtSDQuNC30LLQsNC00LXQvSDQvtGCINGB0LrQsNGC0LDQvdC+0YLQvi4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MjEgYnVpbHRpbi9zdGFzaC5jOjYyMAorbXNnaWQgImF0dGVtcHQgdG8gcmVjcmVhdGUgdGhlIGluZGV4IgorbXNnc3RyICLQvtC/0LjRgiDQt9CwINC/0L7QstGC0L7RgNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAlcyAoJXMpIgorbXNnc3RyICLQmNC30YLRgNC40YLQvjog4oCeJXPigJwgKCVzKSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgItCh0LrQsNGC0LDQvdC+0YLQviDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGC0L4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0YPQutCw0LfQsNGC0LXQuyDQutGK0Lwg0L3QtdGJ0L4g0YHQutCw0YLQsNC90L4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAi0KHQutCw0YLQsNC90L7RgtC+INC1INC30LDQv9Cw0LfQtdC90L4g0LIg0YHQu9GD0YfQsNC5LCDRh9C1INCy0Lgg0L/QvtGC0YDRj9Cx0LLQsCDQvtGC0L3QvtCy0L4uIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU1IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICLQndC1INC1INGD0LrQsNC30LDQvdC+INC40LzQtSDQvdCwINC60LvQvtC9IgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk1IGJ1aWx0aW4vc3Rhc2guYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L0g0LTQsCDRgdC+0YfQuCDQutGK0Lwg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MTMgYnVpbHRpbi9zdGFzaC5jOjE0NzAgYnVpbHRpbi9zdGFzaC5jOjE1MDYKK21zZ2lkICJzdGFzaCBtZXNzYWdlIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INGB0LrQsNGC0LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyMworbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICLQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHN0YXNoIHN0b3Jl4oCcINC40LfQuNGB0LrQstCwINGC0L7Rh9C90L4g0LXQtNC40L0g0LDRgNCz0YPQvNC10L3Rgi3Qn9Ce0JTQkNCS0JDQndCVIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgItCd0LUg0YHQsCDQuNC30LHRgNCw0L3QuCDQvdC40LrQsNC60LLQuCDQv9GA0L7QvNC10L3QuCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNTAKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAi0JLRgdC1INC+0YnQtSDQu9C40L/RgdCy0LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTcyIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTY1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgItCh0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDRgtC10LrRg9GJ0LjRjyDQuNC90LTQtdC60YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90L4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTgxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0J3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC30LDQv9Cw0LfRj9GCIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE5MiBidWlsdGluL3N0YXNoLmM6MTIwMSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMQorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAi0KHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvdC+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTIyOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIzNAorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICLQodGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90L4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjc4IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzM4Cittc2dpZCAiQ2FuJ3QgdXNlIC0tcGF0Y2ggYW5kIC0taW5jbHVkZS11bnRyYWNrZWQgb3IgLS1hbGwgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLS1wYXRjaOKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeLS1pbmNsdWRlLXVudHJhY2tlZOKAnCDQuCDigJ4tLWFsbOKAnCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTQKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICLQn9GA0L7QsdCy0LDQudGC0LUg0LTQsCDQuNC30L/QvtC70LfQstCw0YLQtSDigJ5naXQgYWRk4oCcIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMwOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAi0J3Rj9C80LAg0L3QuNC60LDQutCy0Lgg0LvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90Lgg0LfQsCDRgdC60LDRgtCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzE2IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgItCh0LrQsNGC0LDQstCw0L3QtdGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINGB0YLQsNGA0YLQuNGA0LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzMxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICLQotC10LrRg9GJ0L7RgtC+INGB0YrRgdGC0L7Rj9C90LjQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICLQodGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC4INC40L3QtNC10LrRgdCwIGUg0LfQsNC/0LDQt9C10L3Qvjog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDI2IGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICLQn9GA0L7QvNC10L3QuNGC0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQt9Cw0L3Rg9C70LXQvdC4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2MSBidWlsdGluL3N0YXNoLmM6MTQ5NworbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2MyBidWlsdGluL3N0YXNoLmM6MTQ5OQorbXNnaWQgInN0YXNoIGluIHBhdGNoIG1vZGUiCittc2dzdHIgItGB0LrQsNGC0LDQstCw0L3QtSDQsiDRgNC10LbQuNC8INC30LAg0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NCBidWlsdGluL3N0YXNoLmM6MTUwMAorbXNnaWQgInF1aWV0IG1vZGUiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjYgYnVpbHRpbi9zdGFzaC5jOjE1MDIKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAi0YHQutCw0YLQsNCy0LDQvdC1INC4INC90LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjggYnVpbHRpbi9zdGFzaC5jOjE1MDQKK21zZ2lkICJpbmNsdWRlIGlnbm9yZSBmaWxlcyIKK21zZ3N0ciAi0YHQutCw0YLQsNCy0LDQvdC1INC4INC90LAg0LjQs9C90L7RgNC40YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhlYyAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90LgiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHQutCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDRgNC10LTQvtCy0LUsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRgiDRgSDigJ4j4oCcIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzo0MAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwIOKAniMg4oCcINCyINC90LDRh9Cw0LvQvtGC0L4g0L3QsCDQstGB0LXQutC4INGA0LXQtCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAi0J7Rh9Cw0LrQstCwINGB0LUg0L/RitC70L3QviDQuNC80LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC7LCDQsCDQvdC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIiIKKyLQutC+0LzQsNC90LTQsNGC0LAg4oCecHJpbnQtZGVmYXVsdC1yZW1vdGXigJwg0L3QsCDigJ5zdWJtb2R1bGUtLWhlbHBlcuKAnCDQvdC1INC/0YDQuNC10LzQsCDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQvNCw0YXQvdC1INC60L7QvNC/0L7QvdC10L3RgiDQvtGCINCw0LTRgNC10YHQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MAorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGPINC30LAg0L7Qv9GA0LXQtNC10LvRj9C90LXRgtC+INC90LAg0L7RgtC90L7RgdC40YLQtdC70L3QuNGC0LUg0L/RitGC0LjRidCwIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD3Qn9Cq0KJdIFvQn9Cq0KLigKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICLQktGK0LIg0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQvdC1INC1INC+0YLQutGA0LjRgiDQsNC00YDQtdGBINC30LAg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICLQktC70LjQt9Cw0L3QtSDQsiDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorItC40LfQv9GK0LvQvdC10L3QsNGC0LAg0LrQvtC80LDQvdC00LAg0LfQsNCy0YrRgNGI0Lgg0YEg0L3QtdC90YPQu9C10LIg0LjQt9GF0L7QtCDQt9CwIOKAniVz4oCcXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorItC40LfQv9GK0LvQvdC10L3QsNGC0LAg0LrQvtC80LDQvdC00LAg0LfQsNCy0YrRgNGI0Lgg0YEg0L3QtdC90YPQu9C10LIg0LjQt9GF0L7QtCDQv9GA0Lgg0L7QsdGF0L7QttC00LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSwgIgorItCy0LvQvtC20LXQvdC4INCyIOKAniVz4oCcXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICLQkdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQt9GF0L7QtCDQv9GA0Lgg0LLRitCy0LXQttC00LDQvdC10YLQviDQvdCwINCy0YHRj9C60LAg0LrQvtC80LDQvdC00LAg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTMKK21zZ2lkICJSZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgItCg0LXQutGD0YDRgdC40LLQvdC+INC+0LHRhdC+0LbQtNCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NzIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSDQmtCe0JzQkNCd0JTQkCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKyLQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAniVz4oCcINC70LjQv9GB0LLQsC4gINCf0YDQuNC10LzQsCDRgdC1LCDRh9C1INGC0L7QstCwINGF0YDQsNC90LjQu9C40YnQtSDQtSDQv9GA0LDQstC40LvQvdC40Y/RgiDQuNC30YLQvtGH0L3QuNC6ICIKKyLQt9CwINGB0LXQsdC1INGB0LguIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgNC10LPQuNGB0YLRgNC40YDQsNC90LUg0L3QsCDQsNC00YDQtdGBINC30LAg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAi0KDQtdCz0LjRgdGC0YDQuNGA0LDQvSDQtSDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcICglcykg0LfQsCDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQv9GA0LXQv9C+0YDRitGH0LLQsCDRgdC1INGA0LXQttC40Lwg0L3QsCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDRgNC10LPQuNGB0YLRgNC40YDQsNC90LUg0L3QsCDRgNC10LbQuNC80LAg0L3QsCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQt9CwINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEwCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgItCR0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9GA0Lgg0LjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtdGC0L4g0L3QsCDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFvQntCf0KbQmNCv4oCmXSBb0J/QqtCiXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgItCS0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINC70LjQv9GB0LLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0YrRgtGPIOKAniVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgcmVmIGluc2lkZSB0aGUgc3VibW9kdWxlICclcyciCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCINGB0L7Rh9C10L0g0L7RgiDigJ5IRUFE4oCcINCyINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODU0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgNC10LrRg9GA0YHQuNCy0L3QviDQvtCx0YXQvtC20LTQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi0JfQsNCz0LvRg9GI0LDQstCw0L3QtSDQvdCwINC40LfRhdC+0LTQsCDQt9CwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzkKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAiIgorItCY0LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0YPQutCw0LfQsNC90L4g0LIg0LjQvdC00LXQutGB0LAsINCwINC90LUg0YLQvtCy0LAg0L7RgiDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCDQvdCwICIKKyLQv9C+0LTQvNC+0LTRg9C70LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODAKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgItGA0LXQutGD0YDRgdC40LLQvdC+INC+0LHRhdC+0LbQtNCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODUKK21zZ2lkICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFvQn9Cq0KLigKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTA5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSDQn9Cq0KIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgItCh0LjQvdGF0YDQvtC90LjQt9C40YDQsNC90LUg0L3QsCDQsNC00YDQtdGB0LAg0L3QsCDQv9C+0LTQvNC+0LTRg9C7INC30LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC1INC90LAg0LDQtNGA0LXRgSDQt9CwINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0L7RgtC00LDQu9C10YfQtdC90LjRj9GCINCw0LTRgNC10YEg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC9IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvdC40Y/RgiDQsNC00YDQtdGBINC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7QvNC10L3QtdC9IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgItCR0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9GA0Lgg0YHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L3QtdGC0L4g0L3QsCDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBb0J/QqtCiXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyLQoNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvdCwINC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwg0YHRitC00YrRgNC20LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCeLmdpdOKAnC5cbiIKKyIo0LDQutC+INC40YHQutCw0YLQtSDQtNCwINCz0Lgg0LjQt9GC0YDQuNC10YLQtSDQt9Cw0LXQtNC90L4g0YEg0YbRj9C70LDRgtCwINC40Lwg0LjRgdGC0L7RgNC40Y8sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCecm0gLXJm4oCcKSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisi0KDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QsCDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcINGB0YrQtNGK0YDQttCwINC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4LiAg0JzQvtC20LXRgtC1INC00LAg0LPQuCAiCisi0L7RgtGF0LLRitGA0LvQuNGC0LUg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAi0JTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC1INC40LfRh9C40YHRgtC10L3QsFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICIiCisi0JTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC60YrQvCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGC0LBcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQv9GA0LDQt9C90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC30LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRj9GC0LAg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwgKCVzKSDQt9CwINC/0YrRgtGPIOKAniVz4oCcINC1INC/0YDQtdC80LDRhdC90LDRgtCwXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkwCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIiIKKyLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QuNGC0LUg0LTRitGA0LLQtdGC0LAg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1LCDQtNC+0YDQuCDQutC+0LPQsNGC0L4g0YLQtSDRgdGK0LTRitGA0LbQsNGCICIKKyLQu9C+0LrQsNC70L3QuCDQv9GA0L7QvNC10L3QuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTEKK21zZ2lkICJVbnJlZ2lzdGVyIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGA0LXQs9C40YHRgtGA0LDRhtC40LjRgtC1INC90LAg0LLRgdC40YfQutC4INC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBb0J/QqtCi4oCmXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ4tLWFsbOKAnCwg0LfQsCDQtNCwINC/0YDQtdC80LDRhdC90LXRgtC1INCy0YHQuNGH0LrQuCDQv9C+0LTQvNC+0LTRg9C70LgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjc1Cittc2dpZCAiIgorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorbXNnc3RyICIiCisi0JDQu9GC0LXRgNC90LDRgtC40LLQvdC40Y/RgiDQuNC30YLQvtGH0L3QuNC6LCDQvtC/0YDQtdC00LXQu9C10L0g0L7RgiDQvtCx0YXQstCw0YnQsNGJ0LjRjyDQv9GA0L7QtdC60YIg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0uXG4iCisi0JfQsCDQtNCwINC/0L7Qt9Cy0L7Qu9C40YLQtSDQvdCwIGdpdCDQtNCwINC60LvQvtC90LjRgNCwINCx0LXQtyDQsNC70YLQtdGA0L3QsNGC0LjQstC10L0g0LjQt9GC0L7Rh9C90LjQuiDQsiDRgtC+0LfQuCDRgdC70YPRh9Cw0LksXG4iCisi0LfQsNC00LDQudGC0LUg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5zdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneeKAnCDQtNCwINC1IOKAnmluZm/igJwg0LjQu9C4XG4iCisi0L/RgNC4INC60LvQvtC90LjRgNCw0L3QtSDQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1yZWZlcmVuY2UtaWYtYWJsZeKAnCDQstC80LXRgdGC0L4g4oCeLS1yZWZlcmVuY2XigJwuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgItC60YrQvCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INCw0LvRgtC10YDQvdCw0YLQuNCy0LXQvSDQuNC30YLQvtGH0L3QuNC6OiAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIiIKKyLQndC10L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCec3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3nigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbuKAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODMKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAi0LrRitC00LUg0LTQsCDRgdC1INC60LvQvtC90LjRgNCwINC90L7QstC40Y/RgiDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NgorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgItC40LzQtSDQvdCwINC90L7QstC40Y8g0L/QvtC00LzQvtC00YPQuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODkKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICLQsNC00YDQtdGBLCDQvtGCINC60L7QudGC0L4g0LTQsCDRgdC1INC60LvQvtC90LjRgNCwINC90L7QstC40Y/RgiDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NworbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAi0LTRitC70LHQvtGH0LjQvdCwINC90LAg0L/Qu9C40YLQutC40YLQtSDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk3Cittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QsNC/0YDQtdC00YrQutCwINC90LAg0LrQu9C+0L3QuNGA0LDQvdC10YLQviIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTkKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAi0L/RgNC10LTQvtGC0LLRgNCw0YLRj9Cy0LDQvdC1INC90LAg0LrQu9C+0L3QuNGA0LDQvdC1INCyINC90LXQv9GA0LDQt9C90LAg0LjRgdGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSAtLXVybCA8dXJsPiAtLXBhdGggPHBhdGg+IgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD3Qn9Cq0KJdIFstLXF1aWV0XSBbLS1yZWZlcmVuY2Ug0KXQoNCQ0J3QmNCb0JjQqdCVXSAiCisiWy0tbmFtZSDQmNCc0JVdIFstLWRlcHRoINCU0KrQm9CR0J7Qp9CY0J3QkF0gLS11cmwg0JDQlNCg0JXQoSAtLXBhdGgg0J/QqtCi4oCmIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICIiCisi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQvdC40YLQviDQtNCwINGB0LUg0YHRitC30LTQsNC00LUsINC90LjRgtC+INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LAgZ2l0INC90LAgIgorItC00YDRg9CzINC/0L7QtNC80L7QtNGD0LsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC60LvQvtC90LjRgNCw0L3QtSDQvdCwINCw0LTRgNC10YHQsCDigJ4lc+KAnCDQsiDQv9GK0YLRjyDigJ4lc+KAnCDQutCw0YLQviDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3Rvcnkgbm90IGVtcHR5OiAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0L3QtSDQtSDQv9GA0LDQt9C90LA6IOKAniVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC70YPRh9C10L3QsCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDRgNC10LbQuNC8INC90LAg0L7QsdC90L7QstGP0LLQsNC90LUg4oCeJXPigJwg0LfQsCDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGNvbmZpZ3VyZWQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QtdC9INC1INC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQttC40Lwg0L3QsCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDigJ4lc+KAnCDQt9CwINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniVz4oCcIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAi0J/RitGC0Y/RgiDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCDQvdC1INC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQsNC9IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5OAorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICLQktC10YDQvtGP0YLQvdC+INC40YHQutCw0YXRgtC1INC00LAg0LjQt9C/0L7Qu9C30LLQsNGC0LUg4oCedXBkYXRlIC0taW5pdOKAnD8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi0J/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQvdC10YHQu9C10YLQuNGPINC/0L7QtNC80L7QtNGD0Lsg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQn9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQtdC9INC+0L/QuNGCINC30LAg0LrQu9C+0L3QuNGA0LDQvdC1INC90LAg4oCeJXPigJwuICDQndCw0YHRgNC+0YfQtdC9INC1INCy0YLQvtGA0Lgg0L7Qv9C40YIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICIiCisi0JLRgtC+0YDQuCDQvdC10YPRgdC/0LXRiNC10L0g0L7Qv9C40YIg0LfQsCDQutC70L7QvdC40YDQsNC90LUg0L3QsCDigJ4lc+KAnC4gINCU0LXQudGB0YLQstC40LXRgtC+INGB0LUg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIwCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItC/0YrRgiDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc5Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgItC/0YrRgiDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4sINC/0YDQtdC3INCz0YDQsNC90LjRhtC40YLQtSDQvdCwINCy0LvQvtC20LXQvdC40YLQtSDQv9C+0LTQvNC+0LTRg9C70LgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODgzCittc2dpZCAicmViYXNlLCBtZXJnZSwgY2hlY2tvdXQgb3Igbm9uZSIKK21zZ3N0ciAiIgorIuKAnnJlYmFzZeKAnCAo0L/RgNC10LHQsNC30LjRgNCw0L3QtSksIOKAnm1lcmdl4oCcICjRgdC70LjQstCw0L3QtSksIOKAnmNoZWNrb3V04oCcICjQuNC30YLQtdCz0LvRj9C90LUpINC40LvQuCAiCisi4oCebm9uZeKAnCAo0L3QuNGJ0L4g0LTQsCDQvdC1INGB0LUg0L/RgNCw0LLQuCkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg5Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICLQn9C70LjRgtC60L4g0LrQu9C+0L3QuNGA0LDQvdC1LCDQvtGC0YDRj9C30LDQvdC+INC00L4g0YPQutCw0LfQsNC90LjRjyDQsdGA0L7QuSDQstC10YDRgdC40LgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODkyCittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAi0LHRgNC+0Lkg0L/QsNGA0LDQu9C10LvQvdC4INC/0YDQvtGG0LXRgdC4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NAorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAi0LTQsNC70Lgg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDQutC70L7QvdC40YDQsNC90LUg0LTQsCDQtSDQv9C70LjRgtC60L4sINC60LDQutGC0L4g0YHQtSDQv9GA0LXQv9C+0YDRitGH0LLQsCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTUKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QsNC/0YDQtdC00YrQutCwINC90LAg0LrQu9C+0L3QuNGA0LDQvdC10YLQviIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD3Qn9Cq0KJdIFvQn9Cq0KLigKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNworbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L/QsNGA0LDQvNC10YLRitGAINC60YrQvCDQvtC/0YbQuNGP0YLQsCDigJ4tLXVwZGF0ZeKAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgIiIKKyLQmtC70L7QvdGK0YIg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJXPigJwg0LUg0L3QsNGB0YLRgNC+0LXQvSDQtNCwINC90LDRgdC70LXQtNGP0LLQsCDQutC70L7QvdCwINC+0YIg0L7QsdGF0LLQsNGJ0LDRidC40Y8g0L/RgNC+0LXQutGCLCAiCisi0L3QviDRgtC+0Lkg0L3QtSDQtSDQvdCwINC90LjQutC+0Lkg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQstGA0YrQt9C60LAg0LrRitC8INGF0YDQsNC90LjQu9C40YnQtSDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjEKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAi0YDQtdC60YPRgNGB0LjQstC90L4g0L7QsdGF0L7QttC00LDQvdC1INC/0L7QtNC80L7QtNGD0LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTI3Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBb0J7Qn9Cm0JjQr+KApl0gW9Cf0KrQouKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTgzCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQv9C40YHQsNC90LXRgtC+INCy0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINC1INCx0LXQt9C+0L/QsNGB0L3QviIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODYKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LAg0LLRitCyINGE0LDQudC70LAg4oCeLmdpdG1vZHVsZXPigJwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkxCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnINCY0JzQlSBb0KHQotCe0JnQndCe0KHQol0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0INCY0JzQlSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTMKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIxMiBnaXQtc3VibW9kdWxlLnNoOjE3MworIywgc2gtZm9ybWF0Cittc2dpZCAicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4uZ2l0bW9kdWxlc+KAnCDRgtGA0Y/QsdCy0LAg0LTQsCDQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNjIgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIuKAniVz4oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLXN1cGVyLXByZWZpeOKAnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INC/0L7QtNC60L7QvNCw0L3QtNCwINC90LAg4oCec3VibW9kdWxlLS1oZWxwZXLigJwiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgW9Ce0J/QptCY0K/igKZdINCY0JzQlSBb0KPQmtCQ0JfQkNCi0JXQm10iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OQorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LPRgNC10YjQutCwINC30LAg0L3QtdGB0LLRitGA0LfQsNC90LggKNC90LXRgdC40LzQstC+0LvQvdC4KSDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQtdC9INGD0LrQsNC30LDRgtC10LsiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgItC60YDQsNGC0LrQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINGD0LrQsNC30LDRgtC10LvRjyIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgItC/0YDQuNGH0LjQvdCwIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICLQv9GA0LjRh9C40L3QsCDQt9CwINC+0LHQvdC+0LLRj9Cy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUg0JjQlNCV0J3QotCY0KTQmNCa0JDQotCe0KBf0J3QkF/QmtCb0K7Qp10gWy1mXSBbLW0g0KHQqtCe0JHQqdCV0J3QmNCVIHwgLUYg0KTQkNCZ0JtdXG4iCisiICAgICAgICDQldCi0JjQmtCV0KIgW9CS0KDQqtClXSIKKworIzogYnVpbHRpbi90YWcuYzoyNworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kINCV0KLQmNCa0JXQouKApiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uW9CR0KDQntCZXV0gWy0tY29udGFpbnMg0J/QntCU0JDQktCQ0J3QlV0gWy0tcG9pbnRzLWF0INCe0JHQldCa0KJdXG4iCisiICAgICAgICAgICBbLS1mb3JtYXQ90KTQntCg0JzQkNCiXSBbLS1bbm8tXW1lcmdlZCBb0J/QntCU0JDQktCQ0J3QlV1dIFvQqNCQ0JHQm9Ce0J3igKZdIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ90KTQntCg0JzQkNCiXSDQldCi0JjQmtCV0KLigKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi0LXRgtC40LrQtdGC0YrRgiDigJ4lc+KAnCDQvdC1INC1INC+0YLQutGA0LjRgi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAi0JjQt9GC0YDQuNGCINC1INC10YLQuNC60LXRgtGK0YIg4oCeJXPigJwgKNCx0LUg4oCeJXPigJwpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCS0YrQstC10LTQtdGC0LUg0YHRitC+0LHRidC10L3QuNC1INC30LAg0LXRgtC40LrQtdGC0LAuXG4iCisiICAgICVzXG4iCisi0KDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGBIOKAniVj4oCcLCDRidC1INCx0YrQtNCw0YIg0L/RgNC+0L/Rg9GB0L3QsNGC0LguXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLQktGK0LLQtdC00LXRgtC1INGB0YrQvtCx0YnQtdC90LjQtSDQt9CwINC10YLQuNC60LXRgi5cbiIKKyIgICAgJXNcbiIKKyLQoNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC30LDQv9C+0YfQstCw0YIg0YEg4oCeJWPigJwsINGB0YrRidC+INGJ0LUg0LHRitC00LDRgiDQstC60LvRjtGH0LXQvdC4IOKAlCDQvNC+0LbQtSDQtNCwINCz0LggIgorItC40LfRgtGA0LjQtdGC0LUg0LLQuNC1LlxuIgorCisjOiBidWlsdGluL3RhZy5jOjE5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QtNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjAwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0LfQsCDQtdGC0LjQutC10YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBjcmVhdGVkIGEgbmVzdGVkIHRhZy4gVGhlIG9iamVjdCByZWZlcnJlZCB0byBieSB5b3VyIG5ldyB0YWcgaXNcbiIKKyJhbHJlYWR5IGEgdGFnLiBJZiB5b3UgbWVhbnQgdG8gdGFnIHRoZSBvYmplY3QgdGhhdCBpdCBwb2ludHMgdG8sIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCittc2dzdHIgIiIKKyLQodGK0LfQtNCw0LvQuCDRgdGC0LUg0L3QtdC/0YDRj9C6INC10YLQuNC60LXRgiDigJQg0L7QsdC10LrRgtGK0YIsINGB0L7Rh9C10L0g0L7RgiDQvdC+0LLQvtGB0YrQt9C00LDQtNC10L3QuNGPINC10YLQuNC60LXRgixcbiIKKyLQtSDRgdGK0YnQviDQtdGC0LjQutC10YIuICDQkNC60L4g0LLQvNC10YHRgtC+INGC0L7QstCwINC40YHQutCw0YLQtSDQvdC+0LLQuNGP0YIg0LXRgtC40LrQtdGCINC00LAg0YHQvtGH0Lgg0LrRitC8INGC0L7QstCwLFxuIgorItC60L7QtdGC0L4g0YHQtSDRgdC+0YfQuCDQvtGCINGB0YLQsNGA0LjRjywg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgdGFnIC1mICVzICVzXnt9IgorCisjOiBidWlsdGluL3RhZy5jOjIzMgorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCy0LjQtCDQvtCx0LXQutGCLiIKKworIzogYnVpbHRpbi90YWcuYzoyODQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgItC70LjQv9GB0LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YLQsCIKKworIzogYnVpbHRpbi90YWcuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC10YLQuNC60LXRgtCwINC1INC30LDQv9Cw0LfQtdC90L4g0LLRitCyINGE0LDQudC70LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDQtdGC0LjQutC10YLQuNGC0LUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGC0L7Qt9C4INCR0KDQntCZINGA0LXQtNC+0LLQtSDQvtGCINCy0YHRj9C60L4g0YHRitC+0LHRidC10L3QuNC1INC30LAg0LXRgtC40LrQtdGCIgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi90YWcuYzo0MDcKK21zZ2lkICJ2ZXJpZnkgdGFncyIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC10YLQuNC60LXRgtC4IgorCisjOiBidWlsdGluL3RhZy5jOjQwOQorbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0LXRgtC40LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDExCittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICLQsNC90L7RgtC40YDQsNC90LXRgtC+INC90LAg0LXRgtC40LrQtdGC0Lgg0LjQt9C40YHQutCy0LAg0YHRitC+0LHRidC10L3QuNC1IgorCisjOiBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICLQodCq0J7QkdCp0JXQndCY0JUg0LfQsCDQtdGC0LjQutC10YIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE2Cittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAi0LDQvdC+0YLQuNGA0LDQvSDQtdGC0LjQutC10YIg0YEg0L/QvtC00L/QuNGBINC/0L4gR1BHIgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LTRgNGD0LMg0LrQu9GO0Ycg0LfQsCDQv9C+0LTQv9C40YHQstCw0L3QtdGC0L4g0L3QsCDQtdGC0LjQutC10YIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAi0LfQsNC80Y/QvdCwINC90LAg0LXRgtC40LrQtdGC0LAsINCw0LrQviDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi90YWcuYzo0MjEgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY5Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQttGD0YDQvdCw0Lsg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiBidWlsdGluL3RhZy5jOjQyMworbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0LfQsCDQuNC30LLQtdC20LTQsNC90LXRgtC+INC90LAg0LXRgtC40LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdC/0LjRgdGK0LrQsCDQvdCwINC10YLQuNC60LXRgtC40YLQtSDQv9C+INC60L7Qu9C+0L3QuCIKKworIzogYnVpbHRpbi90YWcuYzo0MjUgYnVpbHRpbi90YWcuYzo0MjcKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC10YLQuNC60LXRgtC40YLQtSwg0LrQvtC40YLQviDRgdGK0LTRitGA0LbQsNGCINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3RhZy5jOjQyNiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LXRgtC40LrQtdGC0LjRgtC1LCDQutC+0LjRgtC+INC90LUg0YHRitC00YrRgNC20LDRgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi90YWcuYzo0MjkKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDRgdC70LXRgtC40YLQtSDQtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi90YWcuYzo0MzAKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0L3QtdGB0LvQtdGC0LjRgtC1INC10YLQuNC60LXRgtC4IgorCisjOiBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQtdGC0LjQutC10YLQuNGC0LUg0L3QsCDQntCR0JXQmtCi0JAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tY29sdW1u4oCcINC4IOKAni1u4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tbuKAnCDQuNC30LjRgdC60LLQsCDRgNC10LbQuNC8INC90LAg0YHQv9C40YHRitC6LiIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tY29udGFpbnPigJwg0LjQt9C40YHQutCy0LAg0YDQtdC20LjQvCDQvdCwINGB0L/QuNGB0YrQui4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA4Cittc2dpZCAiLS1uby1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLWNvbnRhaW5z4oCcINC40LfQuNGB0LrQstCwICDRgNC10LbQuNC8INC90LAg0YHQv9C40YHRitC6LiIKKworIzogYnVpbHRpbi90YWcuYzo1MTAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLXBvaW50cy1hdOKAnCDQuNC30LjRgdC60LLQsCDRgNC10LbQuNC8INC90LAg0YHQv9C40YHRitC6LiIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1tZXJnZWTigJwg0Lgg4oCeLS1uby1tZXJnZWTigJwg0LjQt9C40YHQutCy0LDRgiDRgNC10LbQuNC8INC90LAg0YHQv9C40YHRitC6LiIKKworIzogYnVpbHRpbi90YWcuYzo1MjMKK21zZ2lkICJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni1G4oCcINC4IOKAni1t4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4LiIKKworIzogYnVpbHRpbi90YWcuYzo1NDIKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgItCf0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQuCIKKworIzogYnVpbHRpbi90YWcuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIuKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQt9CwINC10YLQuNC60LXRgi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLQtdGC0LjQutC10YLRitGCIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgItCe0LHQvdC+0LLQtdC9INC10YLQuNC60LXRgiDigJ4lc+KAnCAo0LHQtSDigJ4lc+KAnClcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMQorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICLQoNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTUgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGC0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQstGA0LXQvNC10YLQviDQvdCwINC/0YDQvtC80Y/QvdCwIChtdGltZSkg0L3QsCDRhNCw0LnQu9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE1NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICIiCisi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC/0L7Qu9GD0YfQtdC90LAg0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdC1INGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQu9C10LQgIgorItC00L7QsdCw0LLRj9C90LXRgtC+INC90LAg0L3QvtCyINGE0LDQudC7IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyLQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0L/QvtC70YPRh9C10L3QsCDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LUg0YHQtSDQv9GA0L7QvNC10L3RjyDRgdC70LXQtCAiCisi0LTQvtCx0LDQstGP0L3QtdGC0L4g0L3QsCDQvdC+0LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC/0L7Qu9GD0YfQtdC90LAg0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDRgdC1INC/0YDQvtC80LXQvdGPINGB0LvQtdC0ICIKKyLQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDQvdC+0LIg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTkxCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0YHQtSDQv9GA0L7QvNC10L3RjyDRgdC70LXQtCDQtNC+0LHQsNCy0Y/QvdC10YLQviAiCisi0L3QsCDRhNCw0LnQuyDQsiDQv9C+0LTQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyLQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0L/QvtC70YPRh9C10L3QsCDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC90LUg0YHQtSDQv9GA0L7QvNC10L3RjyDRgdC70LXQtCAiCisi0LjQt9GC0YDQuNCy0LDQvdC10YLQviDQvdCwINGE0LDQudC7IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxNQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC/0L7Qu9GD0YfQtdC90LAg0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdC1INGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQu9C10LQgIgorItC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjIKK21zZ2lkICIgT0siCittc2dzdHIgIiDQlNC+0LHRgNC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU5MQorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1pbmRleCBb0J7Qn9Cm0JjQr+KApl0gWy0tXSBb0KTQkNCZ0JvigKZdIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiIgorItC/0YDQvtC00YrQu9C20LDQstCw0L3QtSDRgSDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4sINC00L7RgNC4INC60L7Qs9Cw0YLQviDQuNC90LTQtdC60YHRitGCINGC0YDRj9Cx0LLQsCDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICLQv9C+0LTQvNC+0LTRg9C70LjRgtC1INC00LAg0YHQtSDQuNCz0L3QvtGA0LjRgNCw0YIg0L/RgNC4INC+0LHQvdC+0LLRj9Cy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODAKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAi0L3QvtCy0LjRgtC1INGE0LDQudC70L7QstC1INC00LAg0L3QtSDRgdC1INC40LPQvdC+0YDQuNGA0LDRgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAi0YTQsNC50LvQvtCy0LUg0LTQsCDQvNC+0LPQsNGCINC00LAg0LfQsNC80LXQvdGP0YIg0LTQuNGA0LXQutGC0L7RgNC40Lgg0Lgg0L7QsdGA0LDRgtC90L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg0Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQsNCy0LDQvdC1INC/0YDQuCDQu9C40L/RgdCy0LDRidC4INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NgorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLQvtCx0L3QvtCy0Y/QstCw0L3QtSDQtNC+0YDQuCDQuCDQuNC90LTQtdC60YHRitGCINC00LAg0YHRitC00YrRgNC20LAg0L3QtdGB0LvQtdGC0Lgg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OQorbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0L7RgiDRhNGD0L3QutGG0LjRj9GC0LAg4oCec3RhdOKAnCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgIiIKKyLQutCw0YLQviDQvtC/0YbQuNGP0YLQsCDigJ4tLXJlZnJlc2jigJwsINC90L4g0LTQsCDRgdC1INC/0YDQvtCy0LXRgNGP0YIg0Lgg0L7QsdC10LrRgtC40YLQtSwg0LrQvtC40YLQviDRgdCwINCx0LjQu9C4INC/0YDQuNC10YLQuCAiCisi0LfQsCDQvdC10L/RgNC+0LzQtdC90LXQvdC4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NworbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgItCg0JXQltCY0Jws0J7QkdCV0JrQoizQn9Cq0KIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk4Cittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQt9Cx0YDQvtC10L3QuNGC0LUg0L7QsdC10LrRgtC4INC60YrQvCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA4Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0YTQu9Cw0LMsINGH0LUg0YTQsNC50LvRitGCINC90LUg0YHQtSDQv9GA0L7QvNC10L3RjyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDExCittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICLQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINGE0LvQsNCz0LAsINGH0LUg0YTQsNC50LvRitGCINC90LUg0YHQtSDQv9GA0L7QvNC10L3RjyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE0Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINGE0LvQsNCzLCDRh9C1INGE0LDQudC70L7QstC10YLQtSDRgdCwINGB0LDQvNC+INC30LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNworbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICLQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINGE0LvQsNCz0LAsINGH0LUg0YTQsNC50LvQvtCy0LXRgtC1INGB0LAg0YHQsNC80L4g0LfQsCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAi0LHQtdC3INC/0YDQvtC80Y/QvdCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1INGB0LDQvNC+INC30LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INGB0LDQvNC+INC60YrQvCDQuNC90LTQtdC60YHQsCDQsdC10Lcg0LTQvtCx0LDQstGP0L3QtSDQutGK0Lwg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCDQt9CwINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNAorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGD0LrQsNC30LDQvdC40YLQtSDQv9GK0YLQuNGJ0LAsINC00L7RgNC4INC4INC00LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRgiDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI2Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICIiCisi0L/RgNC4INC60L7QvNCx0LjQvdC40YDQsNC90LUg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdGRpbuKAnCDigJQg0LLRhdC+0LTQvdC40YLQtSDRgNC10LTQvtCy0LUg0YHQsCDRgNCw0LfQtNC10LvQtdC90Lgg0YEg0L3Rg9C70LXQstC40Y8gIgorItCx0LDQudGCIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0YHQv9C40YHRitC60LAg0YEg0L/RitGC0LjRidCwINC30LAg0L7QsdC90L7QstGP0LLQsNC90LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC10LvQtdC80LXQvdGC0LjRgtC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCDQutGK0Lwg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiIgorItCy0YrQt9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC/0YDQtdC00Lgg0YHQu9C40LLQsNC90LUg0LjQu9C4INC90YPQttC00LAg0L7RgiDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQt9CwICIKKyLQuNC30LHRgNC+0LXQvdC40YLQtSDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INGB0LDQvNC+INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+LCDQutC+0LXRgtC+INGB0LUg0YDQsNC30LvQuNGH0LDQstCwINC+0YIg0YLQvtCy0LAg0LIg4oCeSEVBROKAnCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0LvQuNC/0YHQstCw0YIg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjRj9GC0LAg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINC40LfRhdC+0LQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIiCisi0LfQsNCx0YDQsNCy0Y/QvdC1INC90LAg0LfQsNC/0LjRgdCw0L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQvdC10YDQsNC30YDQtdGI0LXQvdC4INC60L7QvdGE0LvQuNC60YLQuCDigJQg0LfQsCDQutC+0LzQsNC90LTQuNGC0LUgIgorItC+0YIg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0L3QuNCy0L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1MworbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICLQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQsiDRgtC+0LfQuCDRhNC+0YDQvNCw0YIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUg0LjQu9C4INC40LfQutC70Y7Rh9Cy0LDQvdC1INC90LAg0YDQsNC30LTQtdC70Y/QvdC10YLQviDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgItCy0LrQu9GO0YfQstCw0L3QtS/QuNC30LrQu9GO0YfQstCw0L3QtSDQvdCwINC60LXRiNCwINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU5Cittc2dpZCAidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgItC/0YDQvtCy0LXRgNC60LAg0LTQsNC70Lgg0YTQsNC50LvQvtCy0LDRgtCwINGB0LjRgdGC0LXQvNCwINC/0L7QtNC00YrRgNC20LAg0LrQtdGIINC30LAg0L3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjEKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorItCy0LrQu9GO0YfQstCw0L3QtSDQvdCwINC60LXRiNCwINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQsdC10Lcg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYzCittc2dpZCAid3JpdGUgb3V0IHRoZSBpbmRleCBldmVuIGlmIGlzIG5vdCBmbGFnZ2VkIGFzIGNoYW5nZWQiCittc2dzdHIgItC30LDQv9C40YEg0L3QsCDQuNC90LTQtdC60YHQsCwg0LTQvtGA0Lgg0LTQsCDQvdC1INC1INC+0YLQsdC10LvRj9C30LDQvSDQutCw0YLQviDQv9GA0L7QvNC10L3QtdC9IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUg0LjQu9C4INC40LfQutC70Y7Rh9Cy0LDQvdC1INC90LAg0L3QsNCx0LvRjtC00LXQvdC40LXRgtC+INC90LAg0YTQsNC50LvQvtCy0LDRgtCwINGB0LjRgdGC0LXQvNCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAi0L7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSwg0YfQtSDQvNC+0LPQsNGCINC00LAg0YHQtSDRgdC70LXQtNGP0YIg0YfRgNC10Lcg0YTQsNC50LvQvtCy0LDRgtCwINGB0LjRgdGC0LXQvNCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICLQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINGE0LvQsNCz0LAg0LfQsCDRgdC70LXQtNC10L3QtdGC0L4g0YfRgNC10Lcg0YTQsNC50LvQvtCy0LDRgtCwINGB0LjRgdGC0LXQvNCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzMKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvcmUuc3BsaXRJbmRleOKAnCDQtSDQt9Cw0LTQsNC00LXQvdCwINC90LAg4oCeZmFsc2XigJwgKNC70YrQttCwKS4gINCh0LzQtdC90LXRgtC1INGPINC40LvQuCDRjyAiCisi0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINCy0LrQu9GO0YfQuNGC0LUg0YDQsNC30LTQtdC70Y/QvdC10YLQviDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvcmUuc3BsaXRJbmRleOKAnCDQtSDQt9Cw0LTQsNC00LXQvdCwINC90LAg4oCedHJ1ZeKAnCAo0LjRgdGC0LjQvdCwKS4gINCh0LzQtdC90LXRgtC1INGPINC40LvQuCAiCisi0Y8g0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINC40LfQutC70Y7Rh9C40YLQtSDRgNCw0LfQtNC10LvRj9C90LXRgtC+INC90LAg0LjQvdC00LXQutGB0LAuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTQKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvcmUudW50cmFja2VkQ2FjaGXigJwg0LUg0LfQsNC00LDQtNC10L3QsCDQvdCwIOKAnnRydWXigJwgKNC40YHRgtC40L3QsCkuICDQodC80LXQvdC10YLQtSDRjyAiCisi0LjQu9C4INGPINC40LfRgtGA0LjQudGC0LUsINC30LAg0LTQsCDQuNC30LrQu9GO0YfQuNGC0LUg0LrQtdGI0LAg0LfQsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgItCa0LXRiNGK0YIg0LfQsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INC1INC40LfQutC70Y7Rh9C10L0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorItCd0LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeY29yZS51bnRyYWNrZWRDYWNoZeKAnCDQtSDQt9Cw0LTQsNC00LXQvdCwINC90LAg4oCeZmFsc2XigJwgKNC70YrQttCwKS4gINCh0LzQtdC90LXRgtC1INGPICIKKyLQuNC70Lgg0Y8g0LjQt9GC0YDQuNC50YLQtSwg0LfQsCDQtNCwINCy0LrQu9GO0YfQuNGC0LUg0LrQtdGI0LAg0LfQsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGVuYWJsZWQgZm9yICclcyciCittc2dzdHIgItCa0LXRiNGK0YIg0LfQsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INC1INCy0LrQu9GO0YfQtdC9INC30LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxOAorbXNnaWQgImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyBzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGVuYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvcmUuZnNtb25pdG9y4oCcINC90LUg0LUg0LfQsNC00LDQtNC10L3QsC4gINCX0LDQtNCw0LnRgtC1INGPLCDQt9CwINC00LAg0LLQutC70Y7Rh9C40YLQtSAiCisi0YHQu9C10LTQtdC90LXRgtC+INGH0YDQtdC3INGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsC4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyMgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICLRgdC70LXQtNC10L3QtdGC0L4g0YfRgNC10Lcg0YTQsNC50LvQvtCy0LDRgtCwINGB0LjRgdGC0LXQvNCwINC1INCy0LrQu9GO0YfQtdC90L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvcmUuZnNtb25pdG9y4oCcINC1INC30LDQtNCw0LTQtdC90LAuICDQmNC30YLRgNC40LnRgtC1INGPLCDQt9CwINC00LAg0LjQt9C60LvRjtGH0LjRgtC1ICIKKyLRgdC70LXQtNC10L3QtdGC0L4g0YfRgNC10Lcg0YTQsNC50LvQvtCy0LDRgtCwINGB0LjRgdGC0LXQvNCwLiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI5Cittc2dpZCAiZnNtb25pdG9yIGRpc2FibGVkIgorbXNnc3RyICLRgdC70LXQtNC10L3QtdGC0L4g0YfRgNC10Lcg0YTQsNC50LvQvtCy0LDRgtCwINGB0LjRgdGC0LXQvNCwINC1INC40LfQutC70Y7Rh9C10L3QviIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFvQntCf0KbQmNCv4oCmXSAtZCDQmNCc0JVf0J3QkF/Qo9Ca0JDQl9CQ0KLQldCbIFvQodCi0JDQoNCQX9Ch0KLQntCZ0J3QntCh0KJdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFvQntCf0KbQmNCv4oCmXSDQmNCc0JVf0J3QkF/Qo9Ca0JDQl9CQ0KLQldCbINCd0J7QktCQX9Ch0KLQntCZ0J3QntCh0KIgW9Ch0KLQkNCg0JBf0KHQotCe0JnQndCe0KHQol0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBb0J7Qn9Cm0JjQr+KApl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9GPIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQmNCc0JXRgtC+X9Cd0JBf0KPQmtCQ0JfQkNCi0JXQm9GPLCDQsCDQvdC1INGC0L7QstCwLCDQutGK0Lwg0LrQvtC10YLQviDRgdC+0YfQuCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorItC90Y/QutC+0Lgg0L7RgiDQtdC70LXQvNC10L3RgtC40YLQtSDQv9C+0LTQsNC00LXQvdC4INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCDQt9Cw0LLRitGA0YjQstCw0YIg0YEg0L3Rg9C70LXQstC40Y8g0LfQvdCw0LogIgorIuKAnk5VTOKAnCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE1Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0L7RgiDQvdGD0LvQsNGC0LAiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiZ2l0IHVwbG9hZC1yZXBhY2sgW9Ce0J/QptCY0K/igKZdINCU0JjQoNCV0JrQotCe0KDQmNCvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICLQuNC30YXQvtC0INGB0LvQtdC0INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QsNGC0LAg0YDQsNC30LzRj9C90LAg0L3QsCDQt9Cw0Y/QstC60LAg0Lgg0L7RgtCz0L7QstC+0YAiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAi0LjQt9GF0L7QtCDRgdC70LXQtCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90LDRgtCwINC+0LHRj9Cy0LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNworbXNnaWQgImRvIG5vdCB0cnkgPGRpcmVjdG9yeT4vLmdpdC8gaWYgPGRpcmVjdG9yeT4gaXMgbm8gR2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorItC00LAg0L3QtSDRgdC1INGC0YrRgNGB0Lgg4oCe0JTQmNCg0JXQmtCi0J7QoNCY0K8vLmdpdC/igJwsINCw0LrQviDQlNCY0KDQldCa0KLQntCg0JjQr9GC0LAg0L3QtSDQtSDQv9C+0LQg0LrQvtC90YLRgNC+0LvQsCDQvdCwIEdpdCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgItGC0YDQsNC90YHRhNC10YDRitGCINC00LAg0YHQtSDQv9GA0LXRg9GB0YLQsNC90L7QstC4INGB0LvQtdC0INGC0L7Qt9C4INCR0KDQntCZINGB0LXQutGD0L3QtNC4IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0g0J/QntCU0JDQktCQ0J3QleKApiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjgKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OSBidWlsdGluL3ZlcmlmeS10YWcuYzozNworbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QtdC+0LHRgNCw0LHQvtGC0LXQvdC40Y8g0LjQt9GF0L7QtCDQvtGCINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDigJ5ncGfigJwiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSDQn9CQ0JrQldCi4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9C+0LTRgNC+0LHQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ90KTQntCg0JzQkNCiXSDQldCi0JjQmtCV0KLigKYiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQldCi0JjQmtCV0KLQuCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgW9Ce0J/QptCY0K/igKZdINCf0KrQoiBb0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0J/QntCU0JDQktCQ0J3QlV0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgW9Ce0J/QptCY0K/igKZdIFvQn9Cq0KJdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjAKK21zZ2lkICJnaXQgd29ya3RyZWUgbW92ZSA8d29ya3RyZWU+IDxuZXctcGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBtb3ZlIFvQlNCq0KDQktCeXSBb0J3QntCSX9Cf0KrQol0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIyCittc2dpZCAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8d29ya3RyZWU+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgcmVtb3ZlIFvQntCf0KbQmNCv4oCmXSBb0JTQqtCg0JLQnl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMworbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgdW5sb2NrIFvQn9Cq0KJdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ53b3JrdHJlZXMvJXPigJw6INC90LUg0LUg0L/RgNCw0LLQuNC70L3QsCDQv9C+0LTQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAnndvcmt0cmVlcy8lc+KAnDog0YTQsNC50LvRitGCIOKAnmdpdGRpcuKAnCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAgYnVpbHRpbi93b3JrdHJlZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiIgorItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAnndvcmt0cmVlcy8lc+KAnDog0YTQsNC50LvRitGCIOKAnmdpdGRpcuKAnCAoJXMpINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICU8UFJJdU1BWD4gYnl0ZXMsIHJlYWQgIgorIiU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCed29ya3RyZWVzLyVz4oCcOiDQuNC30YfQuNGC0LDQvdC10YLQviDQstGK0YDQvdCwINC/0L4t0LzQsNC70LrQviDQsdCw0LnRgtC+0LLQtSDQvtGCINC+0YfQsNC60LLQsNC90L7RgtC+ICIKKyIo0L7Rh9Cw0LrQstCw0L3QuDogJTxQUkl1TUFYPiDQsdCw0LnRgtCwLCDQv9C+0LvRg9GH0LXQvdC4OiAlPFBSSXVNQVg+KSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAnndvcmt0cmVlcy8lc+KAnDog0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQsNC50Lsg4oCeZ2l0ZGly4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAiIgorItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAnndvcmt0cmVlcy8lc+KAnDog0YTQsNC50LvRitGCIOKAnmdpdGRpcuKAnCDRgdC+0YfQuCDQvdC10YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC+ICIKKyLQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIgorbXNnc3RyICLQtNC+0LrQu9Cw0LTQstCw0L3QtSDQvdCwINC+0LrQsNGB0YLRgNC10L3QuNGC0LUg0YDQsNCx0L7RgtC90Lgg0LTRitGA0LLQtdGC0LAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjcKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi0L7QsdGP0LLRj9Cy0LDQvdC1INC90LAg0YDQsNCx0L7RgtC90LjRgtC1INC60L7Qv9C40Y8g0L/Qvi3RgdGC0LDRgNC4INC+0YIg0YLQvtCy0LAg0JLQoNCV0JzQlSDQt9CwINC+0YHRgtCw0YDQtdC70LgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICLQtNGK0YDQstC+0YLQviDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQvtCx0LDQstC10L3QviDQvdCw0L3QvtCy0L4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIuKAniVz4oCcINC70LjQv9GB0LLQsCwg0L3QviDQtSDQt9Cw0LrQu9GO0YfQtdC90L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQvi5cbiIKKyLQl9CwINC40LfRgNC40YfQvdC+INC30LDQtNCw0LLQsNC90LUg0L/QvtC70LfQstCw0LnRgtC1IOKAnmFkZCAtZuKAnCwg0LAg0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDigJQg4oCecHJ1bmXigJwg0LjQu9C4ICIKKyLigJ5yZW1vdmXigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYnIHRvIG92ZXJyaWRlLCBvciAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisi4oCeJXPigJwg0LvQuNC/0YHQstCwLCDQvdC+INC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QviDQutCw0YLQviDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+LlxuIgorItCX0LAg0LjQt9GA0LjRh9C90L4g0LfQsNC00LDQstCw0L3QtSDQv9C+0LvQt9Cy0LDQudGC0LUg4oCeYWRkIC1m4oCcLCDQsCDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1IOKAlCDigJ5wcnVuZeKAnCDQuNC70LggIgorIuKAnnJlbW92ZeKAnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzOSBidWlsdGluL3dvcmt0cmVlLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAi0J/RgNC40LPQvtGC0LLRj9C90LUg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviAo0L3QvtCyINC60LvQvtC9IOKAniVz4oCcKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiIgorItCf0YDQuNCz0L7RgtCy0Y/QvdC1INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gKNC30LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCwg0LrQvtC50YLQviDRgdC+0YfQtdGI0LUg0LrRitC8ICIKKyLigJ4lc+KAnCkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgItCf0YDQuNCz0L7RgtCy0Y/QvdC1INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gKNC40LfRgtC10LPQu9GP0L3QtSDQvdCwIOKAniVz4oCcKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICLQn9C+0LTQs9C+0YLQstGP0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4gKNGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDRgdCy0YrRgNC30LDQvTogJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LUg0JrQm9Ce0J3QsCwg0LTQvtGA0Lgg0Lgg0LTQsCDQtSDQuNC30YLQtdCz0LvQtdC9INCyINC00YDRg9Cz0L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC90L7QsiDQutC70L7QvSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMgorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC40LvQuCDQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDQKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0L/QvtC00LPQvtGC0LLRj9C90LUg0L3QsCDQvdC+0LLQvtGC0L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNQorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICLQvdC+0LLQvtGC0L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviDQtNCwINC+0YHRgtCw0L3QtSDQt9Cw0LrQu9GO0YfQtdC90L4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDgKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1icmFuY2goMSkpIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0YDQtdC20LjQvNCwINC90LAg0YHQu9C10LTQtdC90LUgKNCy0LjQtiBnaXQtYnJhbmNoKDEpKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMQorbXNnaWQgInRyeSB0byBtYXRjaCB0aGUgbmV3IGJyYW5jaCBuYW1lIHdpdGggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLQvtC/0LjRgiDQt9CwINC90LDQv9Cw0YHQstCw0L3QtSDQvdCwINC40LzQtdGC0L4g0L3QsCDQvdC+0LLQuNGPINC60LvQvtC9INGBINGC0L7QstCwINC90LAg0YHQu9C10LTRj9GJINC60LvQvtC9IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTE5Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLWLigJwsIOKAni1C4oCcINC4IOKAni0tZGV0YWNo4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4INC10LTQvdCwINGBINC00YDRg9Cz0LAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1ODAKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAi4oCeLS1bbm8tXXRyYWNr4oCcINC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINGB0LDQvNC+INC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0L3QvtCyINC60LvQvtC9IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjgwCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICLQv9GA0LjRh9C40L3QsCDQt9CwINC30LDQutC70Y7Rh9Cy0LDQvdC1IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjkyIGJ1aWx0aW4vd29ya3RyZWUuYzo3MjUgYnVpbHRpbi93b3JrdHJlZS5jOjc5OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjcKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAi0J7RgdC90L7QstC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60LvRjtGH0Lgg0LjQu9C4INC30LDQutC70Y7Rh9C4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIuKAniVz4oCcINCy0LXRh9C1INC1INC30LDQutC70Y7Rh9C10L3Qviwg0LfQsNGJ0L7RgtC+IOKAniVz4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIuKAniVz4oCcINCy0LXRh9C1INC1INC30LDQutC70Y7Rh9C10L3QviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBsb2NrZWQiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0LfQsNC60LvRjtGH0LXQvdC+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzcwCittc2dpZCAid29ya2luZyB0cmVlcyBjb250YWluaW5nIHN1Ym1vZHVsZXMgY2Fubm90IGJlIG1vdmVkIG9yIHJlbW92ZWQiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0LzQtdGB0YLQuNGC0LUg0LjQu9C4INC40LfRgtGA0LjQstCw0YLQtSDRgNCw0LHQvtGC0L3QuCDQtNGK0YDQstC10YLQsCwg0LIg0LrQvtC40YLQviDQuNC80LAg0L/QvtC00LzQvtC00YPQu9C4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzc4Cittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorItC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQv9GA0LXQvNC10YHRgtCy0LDQvdC1LCDQtNC+0YDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQtNCwINC90LUg0LUg0YfQuNGB0YLQviDQuNC70Lgg0LTQsCDQtSAiCisi0LfQsNC60LvRjtGH0LXQvdC+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAxIGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQvtGB0L3QvtCy0L3QviDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICLQuNC80LXRgtC+INC90LAg0YbQtdC70YLQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtC/0YDQtdC00LXQu9C4INC+0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFyZ2V0ICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItGG0LXQu9GC0LAg4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0L/RgNC10LzQtdGB0YLQuNGC0LUg0LfQsNC60LvRjtGH0LXQvdC+INGA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4sINC/0YDQuNGH0LjQvdCwINC30LAg0LfQsNC60LvRjtGH0LLQsNC90LXRgtC+OiAlc1xuIgorItC40LvQuCDQs9C+INC+0YLQutC70Y7Rh9C10YLQtSwg0LjQu9C4INCz0L4g0L/RgNC10LzQtdGB0YLQtdGC0LUg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INGBIOKAnm1vdmUgLWYgLWbigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjIKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdC80LXRgdGC0LjRgtC1INC30LDQutC70Y7Rh9C10L3QviDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+OlxuIgorItC40LvQuCDQs9C+INC+0YLQutC70Y7Rh9C10YLQtSwg0LjQu9C4INCz0L4g0L/RgNC10LzQtdGB0YLQtdGC0LUg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INGBIOKAnm1vdmUgLWYgLWbigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIiIKKyLQv9GA0L7QstC10YDQutC40YLQtSDRgdCwINC90LXRg9GB0L/QtdGI0L3QuCwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdC80LXRgdGC0LXQvdC+OiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC80LXRgdGC0Lgg0LIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINC40LfQv9GK0LvQvdC4IOKAnmdpdCBzdGF0dXPigJwg0LLRitGA0YXRgyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNvbnRhaW5zIG1vZGlmaWVkIG9yIHVudHJhY2tlZCBmaWxlcywgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICIiCisi4oCeJXPigJwg0YHRitC00YrRgNC20LAg0L/RgNC+0LzQtdC90LXQvdC4INC40LvQuCDQvdC+0LLQuCDRhNCw0LnQu9C+0LLQtSwg0LfQsCDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0LjQt9GC0YDQuNCy0LDQvdC1INC1ICIKKyLQvdC10L7QsdGF0L7QtNC40LzQsCDQvtC/0YbQuNGP0YLQsCDigJ4tLWZvcmNl4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcycsIGNvZGUgJWQiCittc2dzdHIgIiIKKyLQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHN0YXR1c+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCDQt9CwIOKAniVz4oCcLCDQutC+0LQg0LfQsCDQs9GA0LXRiNC60LA6ICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTEwCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorItC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30YLRgNC40LLQsNC90LUsINC00L7RgNC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC00LAg0L3QtSDQtSDRh9C40YHRgtC+INC40LvQuCDQtNCwINC1INC30LDQutC70Y7Rh9C10L3QviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLQvdC1INC80L7QttC1INC00LAg0LjQt9GC0YDQuNC10YLQtSDQt9Cw0LrQu9GO0YfQtdC90L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviwg0L/RgNC40YfQuNC90LAg0LfQsCDQt9Cw0LrQu9GO0YfQstCw0L3QtdGC0L46ICVzXG4iCisi0LjQu9C4INCz0L4g0L7RgtC60LvRjtGH0LXRgtC1LCDQuNC70Lgg0LPQviDQuNC30YLRgNC40LnRgtC1INC/0YDQuNC90YPQtNC40YLQtdC70L3QviDRgSDigJ5yZW1vdmUgLWYgLWbigJwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzUKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDQuNC30YLRgNC40LXRgtC1INC30LDQutC70Y7Rh9C10L3QviDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+OlxuIgorItC40LvQuCDQs9C+INC+0YLQutC70Y7Rh9C10YLQtSwg0LjQu9C4INCz0L4g0LjQt9GC0YDQuNC50YLQtSDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0YEg4oCecmVtb3ZlIC1mIC1m4oCcIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgItC/0YDQvtCy0LXRgNC60LjRgtC1INGB0LAg0L3QtdGD0YHQv9C10YjQvdC4LCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGC0L46ICVzIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxNQorbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg90J/QoNCV0KTQmNCa0KEvXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjgKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgItCf0KDQldCk0JjQmtChLyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjkKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgItC30LDQv9C40YEg0L3QsCDQvtCx0LXQutGCLdC00YrRgNCy0L4g0LfQsCDQv9C+0LTQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0LfQsNC/0L7Rh9Cy0LDRidCwINGBINGC0LDQt9C4INCf0KDQldCk0JjQmtChIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgItGB0LDQvNC+INC30LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQs9GA0LXRiNC60LgiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAnbWFyaycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICLQvtGH0LDQutCy0LAg0YHQtSDQutC+0LzQsNC90LTQsCDigJ5tYXJr4oCcLCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC90LA6IOKAniVz4oCcIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ3RvJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgItC+0YfQsNC60LLQsCDRgdC1INC60L7QvNCw0L3QtNCwIOKAnnRv4oCcLCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC90LA6IOKAniVz4oCcIgorCisjOiBmYXN0LWltcG9ydC5jOjMyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmVhdHVyZSAnJXMnIGZvcmJpZGRlbiBpbiBpbnB1dCB3aXRob3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorbXNnc3RyICLigJ4lc+KAnCDQuNC30LjRgdC60LLQsCDQuNC30YDQuNGH0L3QvtGC0L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tYWxsb3ctdW5zYWZlLWZlYXR1cmVz4oCcIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorItCf0YDQsNCy0LDRgtCwINC30LAg0LTQvtGB0YLRitC/INC00L4g0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINC30LAg0L/RgNC+0LPRgNCw0LzQvdC40YLQtSDQs9C90LXQt9C00LAg0YHQsCDQv9GA0LXQutCw0LvQtdC90L4gIgorItGB0LLQvtCx0L7QtNC90Lgg4oCUXG4iCisi0LTRgNGD0LPQuNGC0LUg0L/QvtGC0YDQtdCx0LjRgtC10LvQuCDQvNC+0LPQsNGCINC00LAg0L/QvtC70YPRh9Cw0YIg0LTQvtGB0YLRitC/INC00L4g0LrQtdGI0LjRgNCw0L3QuNGC0LUg0LLQuCDQv9Cw0YDQvtC70LguICDQl9CwINC00LBcbiIKKyLQutC+0YDQuNCz0LjRgNCw0YLQtSDRgtC+0LLQsCwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBjaG1vZCAwNzAwICVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNzIKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40Y/RgtCwINC30LAg0YLRgNCw0YHQuNGA0LDQvdC1INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LDRgtCwINCz0YDQtdGI0LrQsCIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC90LUg0LUg0L7RgtCx0LXQu9GP0LfQsNC90L4g0LrQsNGC0L4g0LTQvtGB0YLQuNC20LjQvNC+IgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTYyCittc2dpZCAidG9vIG1hbnkgY29tbWl0cyBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICLQv9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQv9C+0LTQsNCy0LDQvdC40Y8g0YHQsCDQvtGC0LHQtdC70Y/Qt9Cw0L3QuCDQutCw0YLQviDQtNC+0YHRgtC40LbQuNC80LgiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzo3Cittc2dpZCAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorbXNnc3RyICJ0ZXN0LXRvb2wgc2VydmUtdjIgW9Ce0J/QptCY0K/igKZdIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAi0LjQt9GF0L7QtCDRgdC70LXQtCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90LDRgtCwINC+0LHRj9Cy0LAg0L3QsCDQstGK0LfQvNC+0LbQvdC+0YHRgtC40YLQtSIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyDQn9Cq0KJdIFstYyDQmNCc0JU90KHQotCe0JnQndCe0KHQol1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs90J/QqtCiXV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI90J/QqtCiXSBbLS13b3JrLXRyZWU90J/QqtCiXSBbLS1uYW1lc3BhY2U90JjQnNCVXVxuIgorIiAgICAgICAgICAg0JrQntCc0JDQndCU0JAgW9CQ0KDQk+KApl0iCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKyJTZWUgJ2dpdCBoZWxwIGdpdCcgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzeXN0ZW0uIgorbXNnc3RyICIiCisi4oCeZ2l0IGhlbHAgLWHigJwg0LjQt9Cy0LXQttC00LAg0L3QsNC70LjRh9C90LjRgtC1INC/0L7QtNC60L7QvNCw0L3QtNC4LCDQsCDigJ5naXQgaGVscCAtZ+KAnCDQuNC30LLQtdC20LTQsCAiCisi0L3QsNC70LjRh9C90LjRgtC1XG4iCisi0LLRitCy0LXQtNC10L3QuNGPLiAg0JfQsCDQv9C+0LzQvtGJINC30LAg0YHQv9C10YbQuNGE0LjRh9C90LAg0JrQntCc0JDQndCU0JAg0L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBoZWxwINCa0J7QnNCQ0J3QlNCQ4oCcLCDQsCAiCisi0LfQsFxuIgorItC90Y/QutC+0LUg0L7Qv9GA0LXQtNC10LvQtdC90L4g0J/QntCd0K/QotCY0JUg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgaGVscCDQn9Ce0J3Qr9Ci0JjQleKAnC4gINCX0LAg0L/RgNC10LPQu9C10LQg0L3QsFxuIgorItGB0LjRgdGC0LXQvNCw0YLQsCDQt9CwINC/0L7QvNC+0Ykg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgaGVscCBnaXTigJwuIgorCisjOiBnaXQuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1naXQtZGly4oCcINC40LfQuNGB0LrQstCwINC00LjRgNC10LrRgtC+0YDQuNGPXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tbmFtZXNwYWNl4oCcINC40LfQuNGB0LrQstCwINC40LzQtVxuIgorCisjOiBnaXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXdvcmstdHJlZVxuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXdvcmstdHJlZeKAnCDQuNC30LjRgdC60LLQsCDQtNC40YDQtdC60YLQvtGA0LjRj1xuIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXN1cGVyLXByZWZpeOKAnCDQuNC30LjRgdC60LLQsCDQv9GA0LXRhNC40LrRgVxuIgorCisjOiBnaXQuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1j4oCcINC40LfQuNGB0LrQstCwINC90LjQtyDQt9CwINC90LDRgdGC0YDQvtC50LrQsFxuIgorCisjOiBnaXQuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtQ1xuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tQ+KAnCDQuNC30LjRgdC60LLQsCDQtNC40YDQtdC60YLQvtGA0LjRj1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGPOiDigJ4lc+KAnFxuIgorCisjOiBnaXQuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIGFsaWFzICclcyc6ICclcyciCittc2dzdHIgItC/0YDQuCDQt9Cw0LzQtdGB0YLQstCw0L3QtdGC0L4g0L3QsCDQv9GB0LXQstC00L7QvdC40Lwg4oCeJXPigJw6IOKAniVz4oCcIgorCisjOiBnaXQuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFsaWFzICclcycgY2hhbmdlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4iCisiWW91IGNhbiB1c2UgJyFnaXQnIGluIHRoZSBhbGlhcyB0byBkbyB0aGlzIgorbXNnc3RyICIiCisi0L/RgdC10LLQtNC+0L3QuNC80YrRgiDigJ4lc+KAnCDQv9GA0L7QvNC10L3RjyDQv9GA0L7QvNC10L3Qu9C40LLQuCDQvdCwINGB0YDQtdC00LDRgtCwLlxuIgorItCX0LAg0YLQvtCy0LAg0LzQvtC20LUg0LTQsCDQv9C+0LvQt9Cy0LDRgtC1IOKAniFnaXTigJwg0LIg0L/RgdC10LLQtNC+0L3QuNC80LAiCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgItC/0YDQsNC30LXQvSDQv9GB0LXQstC00L7QvdC40Lwg0LfQsCDigJ4lc+KAnCIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgItC30LDRhtC40LrQu9C10L0g0L/RgdC10LLQtNC+0L3QuNC8OiDigJ4lc+KAnCIKKworIzogZ2l0LmM6NDU5Cittc2dpZCAid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtCIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90LAg0LPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBINC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQuNC30YXQvtC0IgorCisjOiBnaXQuYzo0NjMKK21zZ2lkICJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDRgtCy0LDRgNGP0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtCIKKworIzogZ2l0LmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAi0LfQsNGG0LjQutC70Y/QvdC1INCyINC/0YHQtdCy0LTQvtC90LjQvNC40YLQtTog0LfQsNC80LXRgdGC0LLQsNC90LjRj9GC0LAg0L3QsCDigJ4lc+KAnCDQvdC1INC/0YDQuNC60LvRjtGH0LLQsNGCOiVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0LHRgNCw0LHQvtGC0Lgg0LrQsNGC0L4g0LLQs9GA0LDQtNC10L3QsCDQutC+0LzQsNC90LTQsCIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorItGD0L/QvtGC0YDQtdCx0LA6ICVzXG4iCisiXG4iCisKKyM6IGdpdC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIKK21zZ3N0ciAiIgorItC90LXRg9GB0L/QtdGI0L3QviDQt9Cw0LzQtdGB0YLQstCw0L3QtSDQvdCwINC/0YHQtdCy0LTQvtC90LjQvNCwIOKAniVz4oCcIOKAlCDRgNC10LfRg9C70YLQsNGC0YrRgiDigJ4lc+KAnCDQvdC1INC1INC60L7QvNCw0L3QtNCwINC90LAgIgorImdpdFxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgItC60L7QvNCw0L3QtNCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuDogJXNcbiIKKworIzogaHR0cC5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICIiCisi0L7RgtGA0LjRhtCw0YLQtdC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeaHR0cC5wb3N0YnVmZmVy4oCcLiAg0KnQtSDRgdC1INC/0L7Qu9C30LLQsCDRgdGC0LDQvdC00LDRgNGC0L3QsNGC0LA6ICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICLQo9C/0YDQsNCy0LvQtdC90LjQtdGC0L4g0L3QsCDQtNC10LvQtdCz0LjRgNCw0L3QtdGC0L4g0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0L7RgiBjVVJMIDwgNy4yMi4wIgorCisjOiBodHRwLmM6NDA4Cittc2dpZCAiUHVibGljIGtleSBwaW5uaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICLQl9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINC/0L7RgdGC0L7Rj9C90LXQvSDQv9GD0LHQu9C40YfQtdC9INC60LvRjtGHINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC+0YIgY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjg3NgorbXNnaWQgIkNVUkxTU0xPUFRfTk9fUkVWT0tFIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICLigJ5DVVJMU1NMT1BUX05PX1JFVk9LReKAnCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQvtGCIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo5NDkKK21zZ2lkICJQcm90b2NvbCByZXN0cmljdGlvbnMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjE5LjQiCittc2dzdHIgItCe0LPRgNCw0L3QuNGH0LDQstCw0L3QtdGC0L4g0L3QsCDQv9GA0L7RgtC+0LrQvtC70LjRgtC1INC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC+0YIgY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiCittc2dzdHIgItCd0LXQv9C+0LTQtNGK0YDQttCw0L3QsCDRgNC10LDQu9C40LfQsNGG0LjRjyDQvdCwIFNTTCDigJ4lc+KAnC4g0J/QvtC00LTRitGA0LbQsNGCINGB0LU6IgorCisjOiBodHRwLmM6MTA5MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGNVUkwgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMIGJhY2tlbmRzIgorbXNnc3RyICIiCisi0KDQtdCw0LvQuNC30LDRhtC40Y/RgtCwINC90LAgU1NMINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQtNCw0LTQtSDQtNCwINC1IOKAniVz4oCcOiBjVVJMINC1INC60L7QvNC/0LjQu9C40YDQsNC9INCx0LXQtyAiCisi0L/QvtC00LTRgNGK0LbQutCwINC90LAgU1NMIgorCisjOiBodHRwLmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IgorbXNnc3RyICIiCisi0KDQtdCw0LvQuNC30LDRhtC40Y/RgtCwINC90LAgU1NMINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQtNCw0LTQtSDQtNCwINC1IOKAniVz4oCcLCDQt9Cw0YnQvtGC0L4g0LLQtdGH0LUg0LUg0LfQsNC00LDQtNC10L3QsCAiCisi0LTRgNGD0LPQsCIKKworIzogaHR0cC5jOjE5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byB1cGRhdGUgdXJsIGJhc2UgZnJvbSByZWRpcmVjdGlvbjpcbiIKKyIgIGFza2VkIGZvcjogJXNcbiIKKyIgICByZWRpcmVjdDogJXMiCittc2dzdHIgIiIKKyLQsdCw0LfQvtCy0LjRj9GCINCw0LTRgNC10YEg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7QsdC90L7QstC4INGB0LvQtdC0INC/0YDQtdC90LDRgdC+0YfQstCw0L3QtTpcbiIKKyIgICAg4pePINC30LDRj9Cy0LXQvSDQsNC00YDQtdGBOiAlc1xuIgorIiAgICDil48g0L/RgNC10L3QsNGB0L7Rh9Cy0LDQvdC1OiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C90L4g0LXQutGA0LDQvdC40YDQsNC90LUg0LjQu9C4INGG0LjRgtC40YDQsNC90LUg0LIg0YHRgtC+0LnQvdC+0YHRgtGC0LAg0LrRitC8INC+0L/RhtC40Y8g0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1OiAiCisi4oCeJXPigJwiCisKKyM6IHJlbW90ZS1jdXJsLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAi4oCeJXNpbmZvL3JlZnPigJwg0LUg0L3QtdC40LfQv9C+0LvQt9Cy0LDQtdC80L4sINC/0YDQvtCy0LXRgNC10YLQtSDQtNCw0LvQuCDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBnaXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MzY0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGV4cGVjdGVkIHNlcnZpY2UsIGdvdCBmbHVzaCBwYWNrZXQiCittc2dzdHIgIiIKKyLQvdC10L/RgNCw0LLQuNC70LXQvSDQvtGC0LPQvtCy0L7RgCDQvtGCINGB0YrRgNCy0YrRgNCwOiDQvtGH0LDQutCy0LDRiNC1INGB0LUg0YPRgdC70YPQs9CwLCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC9INC40LfRh9C40YHRgtCy0LDRiSAiCisi0L/QsNC60LXRgiDigJ5mbHVzaOKAnCIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQvtGC0LPQvtCy0L7RgCDQvtGCINGB0YrRgNCy0YrRgNCwLCDQsdC1INC/0L7Qu9GD0YfQtdC90L46IOKAniVz4oCcIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcINC70LjQv9GB0LLQsCIKKworIzogcmVtb3RlLWN1cmwuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0aGVudGljYXRpb24gZmFpbGVkIGZvciAnJXMnIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRhtC40Y8g0LrRitC8IOKAniVz4oCcIgorCisjOiByZW1vdGUtY3VybC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICLQvdGP0LzQsCDQtNC+0YHRgtGK0L8g0LTQviDigJ4lc+KAnDogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIHRvICVzIgorbXNnc3RyICLQv9GA0LXQvdCw0YHQvtGH0LLQsNC90LUg0LrRitC8IOKAniVz4oCcIgorCisjOiByZW1vdGUtY3VybC5jOjU5MworbXNnaWQgInNob3VsZG4ndCBoYXZlIEVPRiB3aGVuIG5vdCBnZW50bGUgb24gRU9GIgorbXNnc3RyICLQv9C+0LvRg9GH0LXQvSDQtSBFT0YsINCyINGA0LXQttC40Lwg0LHQtdC3INC/0L7QtNC00YDRitC20LrQsCDQt9CwINGC0L7QstCwIgorCisjOiByZW1vdGUtY3VybC5jOjY3MworbXNnaWQgInVuYWJsZSB0byByZXdpbmQgcnBjIHBvc3QgZGF0YSAtIHRyeSBpbmNyZWFzaW5nIGh0dHAucG9zdEJ1ZmZlciIKK21zZ3N0ciAiIgorItC00LDQvdC90LjRgtC1INC30LAgUE9TVCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC/0YDQvtGH0LXRgtCw0YIg0L3QsNC90L7QstC+LCDQv9GA0L7QsdCy0LDQudGC0LUg0LTQsCDRg9Cy0LXQu9C40YfQuNGC0LUgIgorItC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeaHR0cC5wb3N0QnVmZmVy4oCcIgorCisjOiByZW1vdGUtY3VybC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSUEMgZmFpbGVkOyAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC+0YLQtNCw0LvQtdGH0LXQvdC+INC40LfQstC40LrQstCw0L3QtS4gICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICLRgtC+0LvQutC+0LLQsCDQs9C+0LvQtdC80Lgg0LjQt9GC0LvQsNGB0LrQstCw0L3QuNGPINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9GK0LvQvdGP0YIiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAiIgorItC30LDRj9Cy0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC00LXQutC+0LzQv9GA0LXRgdC40YDQsNC90LAsINCz0YDQtdGI0LrQsCDQvtGCIOKAnnpsaWLigJwg0L/RgNC4ICIKKyLQtNC10LrQvtC80L/RgNC10YHQuNGA0LDQvdC1OiAlZCIKKworIzogcmVtb3RlLWN1cmwuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBlbmQgZXJyb3IgJWQiCittc2dzdHIgIiIKKyLQt9Cw0Y/QstC60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQtNC10LrQvtC80L/RgNC10YHQuNGA0LDQvdCwOyDQs9GA0LXRiNC60LAg0L7RgiDigJ56bGli4oCcINC/0YDQuCDQt9Cw0LLRitGA0YjQstCw0L3QtTogJWQ8IgorCisjOiByZW1vdGUtY3VybC5jOjEwMjMKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgItC+0L/RgNC+0YHRgtC10L3QuNGP0YIg0YLRgNCw0L3RgdC/0L7RgNGCINC/0L4gaHR0cCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L/Qu9C40YLQutC4INC60LvQuNC10L3RgtC4IgorCisjOiByZW1vdGUtY3VybC5jOjEwMzcKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LTQvtGB0YLQsNCy0Y/QvdC1LiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg1Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICLRg9C80L3QuNGP0YIg0LLQsNGA0LjQsNC90YIg0L3QsCBodHRwINC90LUg0LzQvtC20LUg0LTQsCDQtNC+0YHRgtCw0LLRjyDQv9C+IFNIQTEiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEyOSByZW1vdGUtY3VybC5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC70L3QsCDQs9GA0LXRiNC60LA6INC+0YfQsNC60LLQsCDRgdC1IFNIQTEg0LjQu9C4INGD0LrQsNC30LDRgtC10LssINCwINCx0LUg0L/QvtC70YPRh9C10L3Qvjog4oCeJXPigJwiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE0NyByZW1vdGUtY3VybC5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAlcyIKK21zZ3N0ciAi0YLRgNCw0L3RgdC/0L7RgNGC0YrRgiDQv9C+IGh0dHAg0L3QtSDQv9C+0LTQtNGK0YDQttCwIOKAniVz4oCcIgorCisjOiByZW1vdGUtY3VybC5jOjExODMKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0LWh0dHAtcHVzaOKAnCIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY3Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6INGD0L/QvtGC0YDQtdCx0LA6IGdpdCByZW1vdGUtY3VybCDQpdCg0JDQndCY0JvQmNCp0JUgW9CQ0JTQoNCV0KFdIgorCisjOiByZW1vdGUtY3VybC5jOjEzOTkKK21zZ2lkICJyZW1vdGUtY3VybDogZXJyb3IgcmVhZGluZyBjb21tYW5kIHN0cmVhbSBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmw6INCz0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GH0LjRgtCw0L3QtdGC0L4g0L3QsCDQv9C+0YLQvtC60LAg0LrQvtC80LDQvdC00Lgg0L7RgiBnaXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwNgorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgInJlbW90ZS1jdXJsOiDQvtC/0LjRgiDQt9CwINC00L7RgdGC0LDQstGP0L3QtSDQsdC10Lcg0LvQvtC60LDQu9C90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiByZW1vdGUtY3VybC5jOjE0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDog0L3QtdC/0L7Qt9C90LDRgtCwINC60L7QvNCw0L3QtNCwIOKAniVz4oCcINC+0YIgZ2l0IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgItCQ0KDQk9Cj0JzQldCd0KLQmCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLRhNC40LvRgtGA0LjRgNCw0L3QtSDQv9C+INCy0LjQtCDQvdCwINC+0LHQtdC60YLQsCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICLQv9C10YDQuNC+0LQg0L3QsCDQstCw0LvQuNC00L3QvtGB0YIv0LfQsNC/0LDQt9Cy0LDQvdC1IgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICLQvdGD0LvQtdCy0LAg0L7Qv9C10YDQsNGG0LjRjyAo0LfQsCDRgdGK0LLQvNC10YHRgtC40LzQvtGB0YIg0YEg0L/RgNC10LTQuNGI0L3QuCDQstC10YDRgdC40LgpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICLQv9C+0LLQtdGH0LUg0L/QvtC00YDQvtCx0L3QvtGB0YLQuCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgItC/0L4t0LzQsNC70LrQviDQv9C+0LTRgNC+0LHQvdC+0YHRgtC4IgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzE3Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgItC00LAg0YHQtSDQv9C+0LrQsNC30LLQsNGCINGC0LDQutGK0LIg0JHQoNCe0Jkg0YbQuNGE0YDQuCDQvtGCINGB0YPQvNC40YLQtSDQv9C+IFNIQTEiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICLQutC+0Lgg0L/RgNCw0LfQvdC4INC30L3QsNGG0Lgg0LggI9C60L7QvNC10L3RgtCw0YDQuCDQtNCwINGB0LUg0LzQsNGF0LDRgiDQvtGCINGB0YrQvtCx0YnQtdC90LjRj9GC0LAiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzcKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC/0YrRgtC40YnQsNGC0LAg0L7RgiDQpNCQ0JnQmyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzOAorbXNnaWQgIiIKKyJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorItC/0YDQuCDQv9C+0LvQt9Cy0LDQvdC10YLQviDQvdCwIOKAni0tcGF0aHNwZWMtZnJvbS1maWxl4oCcLCDQv9GK0YLQuNGJ0LDRgtCwINGB0LAg0YDQsNC30LTQtdC70LXQvdC4INGBINC90YPQu9C10LLQuNGPICIKKyLQt9C90LDQuiDigJ5OVUzigJwiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgItCa0JvQrtCnIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICLQuNC80LUg0L3QsCDQv9C+0LvQtdGC0L4sINC/0L4g0LrQvtC10YLQviDQtNCwINC1INC/0L7QtNGA0LXQtNCx0LDRgtCwIgorCisjOiByZXJlcmUuaDo0NAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorItC/0YDQuCDQstGK0LfQvNC+0LbQvdC+0YHRgiDQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGA0LXRiNC10L3QuNC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YLQsCDQt9CwINC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAgIgorItC40L3QtNC10LrRgdCwIgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90LUg0LUg0YHQstGK0YDQt9Cw0L0g0Lgg0LUg0L/RgNC4ICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90LUg0LUg0YHQstGK0YDQt9Cw0L0g0Lgg0LUg0L7RgtC00LXQu9C1zIDQvSDQvtGCICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDRhNCw0LnQu9CwINC60YrQvCDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0LrRgNGK0L/QutC4INC+0YIg0L/QvtGJ0LXQvdGB0LrQsCDQutGD0YLQuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LrRitC8INGA0LXQtNC+0LLQtdGC0LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUzCittc2dpZCAiQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQutGA0YrQv9C60LAg0LrRitC8INGE0LDQudC70L7QstC10YLQtSDQuC/QuNC70Lgg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU0Cittc2dpZCAiSW1wb3J0IGEgR05VIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdCIKK21zZ3N0ciAi0JLQvdCw0YHRj9C90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHTlUgQXJjaCDQsiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU1Cittc2dpZCAiQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINCw0YDRhdC40LIg0YEg0YTQsNC50LvQvtCy0LXRgtC1INC+0YIg0LjQvNC10L3QvtCy0LDQvdC+INC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU2Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAi0JTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAsINC60L7Rj9GC0L4g0LUg0L/RgNC40YfQuNC90LjQu9CwINCz0YDQtdGI0LrQsCIKKworIzogY29tbWFuZC1saXN0Lmg6NTcKK21zZ2lkICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQstC10YDRgdC40Y/RgtCwINC4INCw0LLRgtC+0YDQsCDQvdCwINC/0L7RgdC70LXQtNC90LDRgtCwINC/0YDQvtC80Y/QvdCwINC90LAg0LLRgdC10LrQuCDQvtGCINGA0LXQtNC+0LLQtdGC0LUg0L3QsCAiCisi0YTQsNC50LsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSwg0YHRitC30LTQsNCy0LDQvdC1LCDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQutC70L7QvdC4IgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICLQnNC10YHRgtC10L3QtSDQvdCwINC+0LHQtdC60YLQuCDQuCDRg9C60LDQt9Cw0YLQtdC70Lgg0L/QviDQsNGA0YXQuNCy0LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYwCittc2dpZCAiUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorItCf0YDQtdC00L7RgdGC0LDQstGP0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQuNC70Lgg0LLQuNC00LAg0Lgg0YDQsNC30LzQtdGA0LjRgtC1INC90LAg0L7QsdC10LrRgtC4INC+0YIg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo2MQorbXNnaWQgIkRpc3BsYXkgZ2l0YXR0cmlidXRlcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0LDRgtGA0LjQsdGD0YLQuNGC0LUg0L3QsCBnaXQgKGdpdGF0dHJpYnV0ZXMpIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgItCY0LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LPRgNC10YjQutC4INCyINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSAoZ2l0aWdub3JlKSIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQutCw0L3QvtC90LjRh9C90LjRgtC1INC40LzQtSDQuCDQsNC00YDQtdGBINC90LAg0LUt0L/QvtGJ0LAg0L3QsCDQutC+0L3RgtCw0LrRgtC40YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIiIKKyLQn9GA0LXQvNC40L3QsNCy0LDQvdC1INC60YrQvCDQtNGA0YPQsyDQutC70L7QvSDQuNC70Lgg0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItCa0L7Qv9C40YDQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtSDQvtGCINC40L3QtNC10LrRgdCwINC60YrQvCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQuNC80LXRgtC+INC90LAg0YPQutCw0LfQsNGC0LXQu9GPINC1INC/0L4g0L/RgNCw0LLQuNC70LDRgtCwIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAiIgorItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjywg0LrQvtC40YLQviDQvtGJ0LUg0L3QtSDRgdCwINC/0L7QtNCw0LTQtdC90Lgg0LrRitC8INC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQvtGCINGB0YrRidC10YHRgtCy0YPQstCw0YnQuCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgItCT0YDQsNGE0LjRh9C90LAg0LDQu9GC0LXRgNC90LDRgtC40LLQsCDQvdCwIOKAnmdpdC1jb21taXTigJwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogY29tbWFuZC1saXN0Lmg6NzEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtSDQsiDQvdC+0LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC/0L4g0LrQvtC70L7QvdC4IgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90Lgg0LIg0YXRgNCw0L3QuNC70LjRidC10YLQviIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgItCX0LDQv9C40YEg0Lgg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSDRgSDQs9GA0LDMgNGE0LAg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC90LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NQorbXNnaWQgIkNyZWF0ZSBhIG5ldyBjb21taXQgb2JqZWN0IgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvdC+0LIg0L7QsdC10LrRgi3Qv9C+0LTQsNCy0LDQvdC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0Lgg0LfQsNC00LDQstCw0L3QtSDQvdCwINCz0LvQvtCx0LDQu9C90Lgg0L3QsNGB0YLRgNC+0LnQutC4INC40LvQuCDQvdCw0YHRgtGA0L7QudC60Lgg0L3QsCDQvtC/0YDQtdC00LXQu9C10L3QviAiCisi0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NworbXNnaWQgIkNvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uIgorbXNnc3RyICIiCisi0J/RgNC10LHRgNC+0Y/QstCw0L3QtSDQvdCwINC90LXQv9Cw0LrQtdGC0LjRgNCw0L3QuNGC0LUg0L7QsdC10LrRgtC4INC4INC60L7Qu9C60L4g0LTQuNGB0LrQvtCy0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstC+INC30LDQtdC80LDRgiIKKworIzogY29tbWFuZC1saXN0Lmg6NzgKK21zZ2lkICJSZXRyaWV2ZSBhbmQgc3RvcmUgdXNlciBjcmVkZW50aWFscyIKK21zZ3N0ciAi0J/QvtC70YPRh9Cw0LLQsNC90LUg0Lgg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRhtC40Y/RgtCwINC90LAg0L/QvtGC0YDQtdCx0LjRgtC10LsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc5Cittc2dpZCAiSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkiCittc2dzdHIgItCf0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDQstGA0LXQvNC10L3QvdC+INC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC/0LDRgNC+0LvQuCDQsiDQv9Cw0LzQtdGC0YLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6ODAKK21zZ2lkICJIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzayIKK21zZ3N0ciAiIgorItCf0L7QvNC+0YnQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQuNC00LXQvdGC0LjRhNC40LrQsNGG0LjRj9GC0LAg0L3QsCDQv9C+0YLRgNC10LHQuNGC0LXQuyDQvdCwINC00LjRgdC60LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgxCittc2dpZCAiRXhwb3J0IGEgc2luZ2xlIGNvbW1pdCB0byBhIENWUyBjaGVja291dCIKK21zZ3N0ciAi0JjQt9C90LDRgdGP0L3QtSDQvdCwINC10LTQvdC+INC/0L7QtNCw0LLQsNC90LUg0LrQsNGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1INCyIENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6ODIKK21zZ2lkICJTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZSIKK21zZ3N0ciAi0JjQt9C90LDRgdGP0L3QtSDQvdCwINC00LDQvdC90LjRgtC1INCy0Lgg0L7RgiDQtNGA0YPQs9CwINGB0LjRgdGC0LXQvNCwINC30LAg0LrQvtC90YLRgNC+0Lsg0L3QsCDQstC10YDRgdC40LjRgtC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICLQldC80YPQu9Cw0YbQuNGPINC90LAg0YHRitGA0LLRitGAINC30LAgQ1ZTINC30LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgItCh0LjQu9C90L4g0L7Qv9GA0L7RgdGC0LXQvSDRgdGK0YDQstGK0YAg0LfQsCDRhdGA0LDQvdC40LvQuNGJ0LAg0L3QsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg1Cittc2dpZCAiR2l2ZSBhbiBvYmplY3QgYSBodW1hbiByZWFkYWJsZSBuYW1lIGJhc2VkIG9uIGFuIGF2YWlsYWJsZSByZWYiCittc2dzdHIgIiIKKyLQl9Cw0LTQsNCy0LDQvdC1INC90LAg0LjQvNC1INGD0LTQvtCx0L3QviDQt9CwINC/0L7RgtGA0LXQsdC40YLQtdC70LjRgtC1INC90LAg0L7QsdC10LrRgiDQstGK0Lcg0L7RgdC90L7QstCwINC90LAg0L3QsNC70LjRh9C10L0gIgorItGD0LrQsNC30LDRgtC10LsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQsNC30LvQuNC60LjRgtC1INC80LXQttC00YMg0L/QvtC00LDQstCw0L3QuNGP0YLQsCwg0LLQtdGA0YHQuNC40YLQtSwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICLQodGA0LDQstC90Y/QstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC1INC+0YIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0Lgg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg4Cittc2dpZCAiQ29tcGFyZSBhIHRyZWUgdG8gdGhlIHdvcmtpbmcgdHJlZSBvciBpbmRleCIKK21zZ3N0ciAi0KHRgNCw0LLQvdGP0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgt0LTRitGA0LLQviDRgSDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQuCDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorItCh0YDQsNCy0L3Rj9Cy0LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC4INC/0YDQsNCy0LDRgtCwINC30LAg0LTQvtGB0YLRitC/INC90LAg0L7QsdC10LrRgtC40YLQtS1CTE9CINGH0YDQtdC3INC00LLQsCAiCisi0L7QsdC10LrRgtCwLdC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkwCittc2dpZCAiU2hvdyBjaGFuZ2VzIHVzaW5nIGNvbW1vbiBkaWZmIHRvb2xzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0YfRgNC10Lcg0YHRgtCw0L3QtNCw0YDRgtC90LjRgtC1INC40L3RgdGC0YDRg9C80LXQvdGC0Lgg0LfQsCDRgtC+0LLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINC00LDQvdC90LjRgtC1INC+0YIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MgorbXNnaWQgIkJhY2tlbmQgZm9yIGZhc3QgR2l0IGRhdGEgaW1wb3J0ZXJzIgorbXNnc3RyICLQr9C00YDQviDQt9CwINCx0YrRgNC30L4g0LLQvdCw0YHRj9C90LUg0L3QsCDQtNCw0L3QvdC4INCyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LUg0L3QsCDQvtCx0LXQutGC0Lgg0Lgg0YPQutCw0LfQsNGC0LXQu9C4INC+0YIg0LTRgNGD0LPQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk0Cittc2dpZCAiUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgItCf0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0LvQuNC/0YHQstCw0YnQuCDQvtCx0LXQutGC0Lgg0L7RgiDQtNGA0YPQs9C+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6OTUKK21zZ2lkICJSZXdyaXRlIGJyYW5jaGVzIgorbXNnc3RyICLQn9GA0LXQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDQutC70L7QvdC4IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSDRgdC70LjQstCw0L3QtSIKKworIzogY29tbWFuZC1saXN0Lmg6OTcKK21zZ2lkICJPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINCy0YHQtdC60Lgg0YPQutCw0LfQsNGC0LXQuyIKKworIzogY29tbWFuZC1saXN0Lmg6OTgKK21zZ2lkICJQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uIgorbXNnc3RyICLQn9C+0LTQs9C+0YLQstGP0L3QtSDQvdCwINC60YDRitC/0LrQuCDQt9CwINC40LfQv9GA0LDRidCw0L3QtSDQv9C+INC1LdC/0L7RidCwIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OQorbXNnaWQgIlZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINC+0LHQtdC60YLQuNGC0LUg0Lgg0LLRgNGK0LfQutC40YLQtSDRgtGP0YUg0LIg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCDQt9CwINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMAorbXNnaWQgIkNsZWFudXAgdW5uZWNlc3NhcnkgZmlsZXMgYW5kIG9wdGltaXplIHRoZSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLQmNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINC90LXQvdGD0LbQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQuCDQvtC/0YLQuNC80LjQt9C40YDQsNC90LUg0L3QsCDQu9C+0LrQsNC70L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQvdCwINC/0L7QtNCw0LLQsNC90LUg0L7RgiDQsNGA0YXQuNCyINC90LAg4oCeZ2l0LWFyY2hpdmXigJwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMgorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0L3QsCDRiNCw0LHQu9C+0L0iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMworbXNnaWQgIkEgcG9ydGFibGUgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBHaXQiCittc2dzdHIgItCT0YDQsNGE0LjRh9C10L0g0LjQvdGC0LXRgNGE0LXQudGBINC60YrQvCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNAorbXNnaWQgIkNvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlIgorbXNnc3RyICIiCisi0JjQt9GH0LjRgdC70Y/QstCw0L3QtSDQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LAg0L7QsdC10LrRgiDQuCDQtdCy0LXQvdGC0YPQsNC70L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvtCx0LXQutGCLUJMT0IgIgorItC+0YIg0YTQsNC50LsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC/0L7QvNC+0YnRgtCwINC30LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDYKK21zZ2lkICJTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQIgorbXNnc3RyICLQodGK0YDQstGK0YDQvdCwINGA0LXQsNC70LjQt9Cw0YbQuNGPINC90LAgR2l0INC/0L4gSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INC/0L4gSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA4Cittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgSFRUUC9EQVYgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0L7QsdC10LrRgtC4INC/0L4gSFRUUC9EQVYg0LrRitC8INC00YDRg9Cz0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDkKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGZyb20gc3RkaW4gdG8gYW4gSU1BUCBmb2xkZXIiCittc2dzdHIgItCY0LfQv9GA0LDRidCw0L3QtSDQvdCwINC/0L7RgNC10LTQuNGG0LAg0L7RgiDQutGA0YrQv9C60Lgg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0INC60YrQvCDQv9Cw0L/QutCwINC/0L4gSU1BUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTEwCittc2dpZCAiQnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0L/QsNC60LXRgtC10L0g0LjQvdC00LXQutGBINC30LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRiSDQv9Cw0LrQtdGC0LjRgNCw0L0g0LDRgNGF0LjQsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0YDQsNC30L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQg0LjQu9C4INC30LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC+IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTIKK21zZ2lkICJJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiIKK21zZ3N0ciAi0J3QtdC30LDQsdCw0LLQvdC+INGA0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LLQuCDRhdGA0LDQvdC40LvQuNGJ0LUg0YfRgNC10Lcg4oCeZ2l0d2Vi4oCcIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTMKK21zZ2lkICJBZGQgb3IgcGFyc2Ugc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBjb21taXQgbWVzc2FnZXMiCittc2dzdHIgIiIKKyLQlNC+0LHQsNCy0Y/QvdC1INC40LvQuCDQvtCx0YDQsNCx0L7RgtC60LAg0L3QsCDRgdGC0YDRg9C60YLRg9GA0LjRgNCw0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQsiDRgdGK0L7QsdGJ0LXQvdC40Y/RgtCwINC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTQKK21zZ2lkICJUaGUgR2l0IHJlcG9zaXRvcnkgYnJvd3NlciIKK21zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE1Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LbRg9GA0L3QsNC70LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YTQsNC50LvQvtCy0LXRgtC1INCyINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQsiDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINC+0LHQtdC60YIt0LTRitGA0LLQviIKKworIzogY29tbWFuZC1saXN0Lmg6MTE5Cittc2dpZCAiRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSIKK21zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0LrRgNGK0L/QutCwINC4INCw0LLRgtC+0YDRgdGC0LLQvtGC0L4g0L7RgiDQtS3Qv9C40YHQvNC+IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgItCf0YDQvtGB0YLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0YDQsNC30LTQtdC70Y/QvdC1INC90LAg0YTQsNC50LvQvtCy0LUg0LLRitCyINGE0L7RgNC80LDRgiBVTklYIG1ib3giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICLQodC70LjQstCw0L3QtSDQvdCwINC00LLQtSDQuNC70Lgg0L/QvtCy0LXRh9C1INC/0L7RgNC10LTQuNGG0Lgv0LjRgdGC0L7RgNC40Lgg0L7RgiDQv9GA0L7QvNC10L3QuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTIyCittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC90LDQuS3Qv9C+0LTRhdC+0LTRj9GJ0LjRgtC1INC+0LHRidC4INC/0YDQtdC00YjQtdGB0YLQstC10L3QuNGG0Lgg0LfQsCDRgdC70LjQstCw0L3QtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTIzCittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC1INC90LAg0YLRgNC+0LnQvdC+INGB0LvQuNCy0LDQvdC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjQKK21zZ2lkICJSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nIgorbXNnc3RyICLQodC70LjQstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSwg0LrQvtC40YLQviDRgdC1INC90YPQttC00LDRj9GCINC+0YIg0YLQvtCy0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdCw0YLQsCDQv9C+0LzQvtGJ0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg4oCeZ2l0LW1lcmdlLWluZGV44oCcIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAi0JjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQv9GA0L7Qs9GA0LDQvNC40YLQtSDQt9CwINC60L7RgNC40LPQuNGA0LDQvdC1INC90LAg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGC0YDQvtC50L3QviDRgdC70LjQstCw0L3QtSDQsdC10Lcg0L/RgNC+0LzRj9C90LAg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgItCX0LDQv9C40YEg0Lgg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC40L3QtNC10LrRgdC40YLQtSDQt9CwINC80L3QvtC20LXRgdGC0LLQviDQv9Cw0LrQtdGC0LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvtCx0LXQutGCLdC10YLQuNC60LXRgiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC+0LHQtdC60YIt0LTRitGA0LLQviDQvtGCINGC0LXQutGB0YIg0LLRitCyINGE0L7RgNC80LDRgiDigJ5scy10cmVl4oCcIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzEKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgItCf0YDQtdC80LXRgdGC0LLQsNC90LUg0LjQu9C4INC/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINGE0LDQudC7LCDQtNC40YDQtdC60YLQvtGA0LjRjyDQuNC70Lgg0YHQuNC80LLQvtC70L3QsCDQstGA0YrQt9C60LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMgorbXNnaWQgIkZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMiCittc2dzdHIgItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC40LzQtdC90LDRgtCwINC00LDQtNC10L3QuCDQvdCwINCy0LXRgNGB0LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6MTMzCittc2dpZCAiQWRkIG9yIGluc3BlY3Qgb2JqZWN0IG5vdGVzIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC40LvQuCDQv9GA0LXQs9C70LXQtCDQvdCwINCx0LXQu9C10LbQutC4INC60YrQvCDQvtCx0LXQutGCIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAi0JLQvdCw0YHRj9C90LUg0Lgg0L/QvtC00LDQstCw0L3QtSDQutGK0Lwg0YXRgNCw0L3QuNC70LjRidCwINC90LAgUGVyZm9yY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0LDQutC10YLQuNGA0LDQvSDQsNGA0YXQuNCyINC+0YIg0L7QsdC10LrRgtC4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzYKK21zZ2lkICJGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzIgorbXNnc3RyICLQndCw0LzQuNGA0LDQvdC1INC90LAg0L/QvtCy0YLQsNGA0Y/RidC4INGB0LUg0L/QsNC60LXRgtC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNworbXNnaWQgIlBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcyIKK21zZ3N0ciAi0J/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQstGK0YDRhdC+0LLQtdGC0LUg0Lgg0LXRgtC40LrQtdGC0LjRgtC1INC30LAg0LHRitGA0Lcg0LTQvtGB0YLRitC/INC00L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKyLQn9C+0LzQvtGJ0L3QuCDQv9GA0L7Qs9GA0LDQvNC4INC30LAg0LDQvdCw0LvQuNC30LAg0L3QsCDQv9Cw0YDQsNC80LXRgtGA0LjRgtC1INC30LAg0LTQvtGB0YLRitC/INC00L4g0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzkKK21zZ2lkICJDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaCIKK21zZ3N0ciAi0JPQtdC90LXRgNC40YDQsNC90LUg0L3QsCDRg9C90LjQutCw0LvQtdC9INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LAg0LrRgNGK0L/QutCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDAKK21zZ2lkICJQcnVuZSBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgItCe0LrQsNGB0YLRgNGP0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQvdC10LTQvtGB0YLQuNC20LjQvNC4INC+0LHQtdC60YLQuCDQsiDQsdCw0LfQsNGC0LAg0L7RgiDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQxCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQtNC+0L/RitC70L3QuNGC0LXQu9C90LjRgtC1INC+0LHQtdC60YLQuCwg0LrQvtC40YLQviDQstC10YfQtSDRgdCwINCyINC/0LDQutC10YLQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDIKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQuCDQstC90LDRgdGP0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQvtGCINC00YDRg9Cz0L4g0YXRgNCw0L3QuNC70LjRidC1INC40LvQuCDQutC70L7QvSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSDRg9C60LDQt9Cw0YLQtdC70Lgg0Lgg0YHQstGK0YDQt9Cw0L3QuNGC0LUg0YEg0YLRj9GFINC+0LHQtdC60YLQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ0Cittc2dpZCAiQXBwbGllcyBhIHF1aWx0IHBhdGNoc2V0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0LrRgNGK0L/QutC4INC+0YIgcXVpbHQg0LrRitC8INGC0LXQutGD0YnQuNGPINC60LvQvtC9IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDUKK21zZ2lkICJDb21wYXJlIHR3byBjb21taXQgcmFuZ2VzIChlLmcuIHR3byB2ZXJzaW9ucyBvZiBhIGJyYW5jaCkiCittc2dzdHIgItCh0YDQsNCy0L3Rj9Cy0LDQvdC1INC90LAg0LTQstCwINC00LjQsNC/0LDQt9C+0L3QsCDQvtGCINC/0L7QtNCw0LLQsNC90LjRjyAo0L3QsNC/0YAuINC00LLQtSDQstC10YDRgdC40Lgg0L3QsCDQutC70L7QvSkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgItCY0LfRh9C40YLQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC+0LHQtdC60YIt0LTRitGA0LLQviDQsiDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCy0YrRgNGF0YMg0LTRgNGD0LMg0LLRgNGK0YUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQuNC30YLQu9Cw0YHQutCw0L3QvtGC0L4g0LIg0YXRgNCw0L3QuNC70LjRidC10YLQviIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LIg0LbRg9GA0L3QsNC70LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICLQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINC90LDQsdC+0YAg0L7RgiDRgdC70LXQtNC10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MQorbXNnaWQgIlBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkiCittc2dzdHIgItCf0LDQutC10YLQuNGA0LDQvdC1INC90LAg0L3QtdC/0LDQutC10YLQuNGA0LDQvdC40YLQtSDQvtCx0LXQutGC0Lgg0LIg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTIKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cyIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1LCDQuNC30LLQtdC20LTQsNC90LUsINC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvQuCDQt9CwINC30LDQvNGP0L3QsCDQvdCwINC+0LHQtdC60YLQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUzCittc2dpZCAiR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMiCittc2dzdHIgItCe0LHQvtCx0YnQtdC90LjQtSDQvdCwINC/0YDQtdC00YHRgtC+0Y/RidC40YLQtSDQv9GA0L7QvNC10L3QuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAi0J/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQstC10YfQtSDQt9Cw0L/QsNC30LXQvdC+INC60L7RgNC40LPQuNGA0LDQvdC1INC90LAg0LrQvtC90YTQu9C40LrRgiDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLQn9GA0LjQstC10LbQtNCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC60YrQvCDQt9Cw0LTQsNC00LXQvdC+0YLQviDRgdGK0YHRgtC+0Y/QvdC40LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICLQktGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTcKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICLQntGC0LzQtdC90Y/QvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC4INC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU4Cittc2dpZCAiTGlzdHMgY29tbWl0IG9iamVjdHMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINCyINC+0LHRgNCw0YLQvdCwINGF0YDQvtC90L7Qu9C+0LPQuNGH0LXRgdC60LAg0L/QvtC00YDQtdC00LHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAi0JjQt9Cx0L7RgCDQuCDQv9GA0L7QvNGP0L3QsCDQvdCwINC/0LDRgNCw0LzQtdGC0YDQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYwCittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC1INC+0YIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0Lgg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzIgorbXNnc3RyICLQmNC30L/RgNCw0YnQsNC90LUg0L3QsCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0LrRgNGK0L/QutC4INC/0L4g0LUt0L/QvtGJ0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MgorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgItCY0LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg0L/QviDQv9GA0L7RgtC+0LrQvtC70LAg0L3QsCBHaXQg0LrRitC8INC00YDRg9Cz0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjMKK21zZ2lkICJSZXN0cmljdGVkIGxvZ2luIHNoZWxsIGZvciBHaXQtb25seSBTU0ggYWNjZXNzIgorbXNnc3RyICLQntCz0YDQsNC90LjRh9C10L3QsCDQstGF0L7QtNC90LAg0L7QsdCy0LjQstC60LAg0LfQsCDQtNC+0YHRgtGK0L8g0L/RgNC10LcgU1NIINGB0LDQvNC+INC00L4gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAi0J7QsdC+0LHRidC10L0g0LjQt9GF0L7QtCDQvtGCIOKAnmdpdCBsb2figJwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40YfQvdC40YLQtSDQstC40LTQvtCy0LUg0L7QsdC10LrRgtC4INCyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LrQu9C+0L3QuNGC0LUg0Lgg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiDRgtGP0YUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NworbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwINC90LAg0L/QsNC60LXRgtC40YDQsNC90LjRjyDQsNGA0YXQuNCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjgKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INCyINC70L7QutCw0LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L3QsCBHaXQg0LfQsCDQuNC90YLQtdGA0L3QsNGG0LjQvtC90LDQu9C40LfQsNGG0LjRjyDQvdCwINGB0LrRgNC40L/RgtC+0LLQtdGC0LUg0L3QsCDQvtCx0LLQuNCy0LrQsNGC0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MAorbXNnaWQgIkNvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwIEdpdCDQt9CwINGB0LrRgNC40L/RgtC+0LLQtdGC0LUg0L3QsCDQvtCx0LLQuNCy0LrQsNGC0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1INC4INC/0YDQvtC80Y/QvdCwINC90LAg0YfQsNGB0YLQuNGH0L3QvtGC0L4g0LjQt9GC0LXQs9C70Y/QvdC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgItCh0LrQsNGC0LDQstCw0L3QtSDQvdCwINC90LXQv9C+0LTQsNC00LXQvdC40YLQtSDQv9GA0L7QvNC10L3QuCDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINGE0LDQudC70LAg0LrRitC8INC40L3QtNC10LrRgdCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzQKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC40LfQu9C40YjQvdC40YLQtSDQt9C90LDRhtC4INC30LAg0LjQvdGC0LXRgNCy0LDQu9C4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC1LCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQuNC70Lgg0YDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICLQlNCy0YPQv9C+0YHQvtGH0L3QsCDRgNCw0LHQvtGC0LAg0LzQtdC20LTRgyDRhdGA0LDQvdC40LvQuNGJ0LAg0L/QvtC0IFN1YnZlcnNpb24g0LggR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgItCf0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC00YDRg9CzINC60LvQvtC9IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUsINC/0YDQvtC80Y/QvdCwINC4INC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGB0LjQvNCy0L7Qu9C90Lgg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1LCDRgdGK0LfQtNCw0LLQsNC90LUsINC40LfRgtGA0LjQstCw0L3QtSwg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC10YLQuNC60LXRgtC4INC/0L7QtNC/0LjRgdCw0L3QuCDRgSBHUEciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQstGA0LXQvNC10L3QtdC9INGE0LDQudC7INGB0YrRgSDRgdGK0YnQvtGC0L4g0YHRitC00YrRgNC20LDQvdC40LUg0LrQsNGC0L4g0L7QsdC10LrRgtGK0YItQkxPQiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICLQoNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuCDQvtGCINC/0LDQutC10YLQuNGA0LDQvSDQsNGA0YXQuNCyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODMKK21zZ2lkICJSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQoNC10LPQuNGB0YLRgNC40YDQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0L7RgiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQsiDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg0Cittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICLQkdC10LfQvtC/0LDRgdC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0L7QsdC10LrRgiDQsiDRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODUKK21zZ2lkICJVcGRhdGUgYXV4aWxpYXJ5IGluZm8gZmlsZSB0byBoZWxwIGR1bWIgc2VydmVycyIKK21zZ3N0ciAiIgorItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YTQsNC50LvQsCDRgSDQtNC+0L/RitC70L3QuNGC0LXQu9C90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LIg0L/QvtC80L7RiSDQvdCwINC+0L/RgNC+0YHRgtC10L3QuNGC0LUg0YHRitGA0LLRitGA0LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICLQmNC30L/RgNCw0YnQsNC90LUg0L3QsCDQsNGA0YXQuNCy0LAg0L7QsdGA0LDRgtC90L4g0LrRitC8IOKAnmdpdC1hcmNoaXZl4oCcIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODcKK21zZ2lkICJTZW5kIG9iamVjdHMgcGFja2VkIGJhY2sgdG8gZ2l0LWZldGNoLXBhY2siCittc2dzdHIgItCY0LfQv9GA0LDRidCw0L3QtSDQvdCwINC/0LDQutC10YLQuNGA0LDQvdC40YLQtSDQvtCx0LXQutGC0Lgg0L7QsdGA0LDRgtC90L4g0LrRitC8IOKAnmdpdC1mZXRjaC1wYWNr4oCcIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODgKK21zZ2lkICJTaG93IGEgR2l0IGxvZ2ljYWwgdmFyaWFibGUiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC70L7Qs9C40YfQtdGB0LrQsCDQv9GA0L7QvNC10L3Qu9C40LLQsCDQvdCwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0L7QtNC/0LjRgdC40YLQtSBHUEcg0LLRitGA0YXRgyDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTAKK21zZ2lkICJWYWxpZGF0ZSBwYWNrZWQgR2l0IGFyY2hpdmUgZmlsZXMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQv9Cw0LrQtdGC0LjRgNCw0L3QuNGC0LUg0LDRgNGF0LjQstC90Lgg0YTQsNC50LvQvtCy0LUg0L3QsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIHRhZ3MiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQv9C+0LTQv9C40YHQuNGC0LUgR1BHINCy0YrRgNGF0YMg0LXRgtC40LrQtdGC0LjRgtC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICLQo9C10LEg0LjQvdGC0LXRgNGE0LXQudGBINC90LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTMKK21zZ2lkICJTaG93IGxvZ3Mgd2l0aCBkaWZmZXJlbmNlIGVhY2ggY29tbWl0IGludHJvZHVjZXMiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC20YPRgNC90LDQuyDRgSDRgNCw0LfQu9C40LrQuNGC0LUsINCy0YrQstC10LTQtdC90Lgg0YEg0LLRgdGP0LrQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAi0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQvNC90L7QttC10YHRgtCy0L4g0YDQsNCx0L7RgtC90Lgg0LTRitGA0LLQtdGC0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NQorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC+0LHQtdC60YIt0LTRitGA0LLQviDQvtGCINGC0LXQutGD0YnQuNGPINC40L3QtNC10LrRgSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAi0KPQutCw0LfQstCw0L3QtSDQvdCwINCw0YLRgNC40LHRg9GC0Lgg0LrRitC8INC/0YrRgiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICLQmtC+0LzQsNC90LTQtdC9INGA0LXQtCDQuCDQutC+0L3QstC10L3RhtC40Lgg0L3QsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgItCS0YrQstC10LbQtNCw0Ykg0YPRgNC+0Log0LIgR2l0INC30LAg0YDQsNC30YDQsNCx0L7RgtGH0LjRhtC4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiR2l0INC30LAg0L/QvtGC0YDQtdCx0LjRgtC10LvQuCDQvdCwIENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LLQsNC90LUg0L3QsCDQuNC30LPQu9C10LTQsCDQvdCwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAi0J/QvtC70LXQt9C10L0g0LzQuNC90LjQvNCw0LvQtdC9INC90LDQsdC+0YAg0L7RgiDQutC+0LzQsNC90LTQuCDQt9CwINC10LbQtdC00L3QtdCy0L3QsNGC0LAg0YDQsNCx0L7RgtCwINGBIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiQSBHaXQgR2xvc3NhcnkiCittc2dzdHIgItCg0LXRh9C90LjQuiDRgSDRgtC10YDQvNC40L3QuNGC0LUg0L3QsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMworbXNnaWQgIkhvb2tzIHVzZWQgYnkgR2l0IgorbXNnc3RyICLQmtGD0LrQuCDQvdCwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAi0KPQutCw0LfQstCw0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSwg0LrQvtC40YLQviDQtNCwINCx0YrQtNCw0YIg0L3QsNGA0L7Rh9C90L4g0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICLQlNC10YTQuNC90LjRgNCw0L3QtSDQvdCwINGB0LLQvtC50YHRgtCy0LDRgtCwINC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MjA2Cittc2dpZCAiR2l0IG5hbWVzcGFjZXMiCittc2dzdHIgItCf0YDQvtGB0YLRgNCw0L3RgdGC0LLQsCDQvtGCINC40LzQtdC90LAg0L3QsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNworbXNnaWQgIkdpdCBSZXBvc2l0b3J5IExheW91dCIKK21zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L4g0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC90LAgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDgKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgItCj0LrQsNC30LLQsNC90LUg0L3QsCDQstC10YDRgdC40Lgg0Lgg0LTQuNCw0L/QsNC30L7QvdC4INCyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA5Cittc2dpZCAiTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIiCittc2dzdHIgItCc0L7QvdGC0LjRgNCw0L3QtSDQvdCwINC10LTQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQsiDQtNGA0YPQs9C+IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTAKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICLQktGK0LLQtdC20LTQsNGJINGD0YDQvtC6INC30LAgR2l0OiDQstGC0L7RgNCwINGH0LDRgdGCIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgItCS0YrQstC10LbQtNCw0Ykg0YPRgNC+0Log0LfQsCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMgorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAi0J7QsdGJINC/0YDQtdCz0LvQtdC0INC90LAg0L/RgNC10L/QvtGA0YrRh9Cy0LDQvdC40YLQtSDQvdCw0YfQuNC90Lgg0LfQsCDRgNCw0LHQvtGC0LAg0YEgR2l0IgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgItCX0LDQv9C+0YfQvdC10YLQtSDQutCw0YLQviDQuNC30L/RitC70L3QuNGC0LUg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBiaXNlY3Qgc3RhcnTigJwiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo2MAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAi0JTQsCDRgdC1INC40LfQstGK0YDRiNC4INC70Lgg0LDQstGC0L7QvNCw0YLQuNGH0L3Qvj8g4oCeWeKAnCDigJQgINCU0JAsIOKAnm7igJwg4oCUINC90LUiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y86IOKAniR7YXJnfeKAnCIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRiaXNlY3RlZF9oZWFkIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y86IOKAniRiaXNlY3RlZF9oZWFk4oCcIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPOiDigJ4ke3Jldn3igJwiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBiaXNlY3QgJHtURVJNX0JBRH3igJwg0L/RgNC40LXQvNCwINGB0LDQvNC+INC10LTQuNC9INCw0YDQs9GD0LzQtdC90YIuIgorCisjOiBnaXQtYmlzZWN0LnNoOjIwOQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgItCd0LUg0LUg0LfQsNC00LDQtNC10L0g0LbRg9GA0L3QsNC70LXQvSDRhNCw0LnQuyIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgIiIKKyLQltGD0YDQvdCw0LvQvdC40Y/RgiDRhNCw0LnQuyDigJ4ke2ZpbGV94oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9LCDQt9CwINC00LAg0YHQtSDQuNC30L/RitC70L3Rj9GCICIKKyLQutC+0LzQsNC90LTQuNGC0LUg0L7RgiDQvdC10LPQviDQvdCw0L3QvtCy0L4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICIiCisi0J3QtdC/0L7Qt9C90LDRgtCwINC60L7QvNCw0L3QtNCwLiAg0JLRitC30LzQvtC20L3QuNGC0LUg0LLQsNGA0LjQsNC90YLQuCDRgdCwOiDigJ5zdGFydOKAnCwg4oCeZ29vZOKAnCwg4oCeYmFk4oCcLCDigJ5za2lw4oCcIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MQorbXNnaWQgImJpc2VjdCBydW4gZmFpbGVkOiBubyBjb21tYW5kIHByb3ZpZGVkLiIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1LCDQvdC1INC1INC30LDQtNCw0LTQtdC90LAg0LrQvtC80LDQvdC00LAuIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NgorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAi0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeJHtjb21tYW5kfeKAnCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorItC90LXRg9GB0L/QtdGI0L3QviDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtTpcbiIKKyLQuNC30YXQvtC00L3QuNGP0YIg0LrQvtC0INC+0YIg0LrQvtC80LDQvdC00LDRgtCwIOKAniR7Y29tbWFuZH3igJwg0LUgJHtyZXN9IOKAlCDRgtC+0LLQsCDQtSDQuNC30LLRitC9INC40L3RgtC10YDQstCw0LvQsCAiCisiWzAsIDEyOCkiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgItC00LLQvtC40YfQvdC+0YLQviDRgtGK0YDRgdC10L3QtSDQvdC1INC80L7QttC1INC00LAg0L/RgNC+0LTRitC70LbQuCIKKworIzogZ2l0LWJpc2VjdC5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisi0L3QtdGD0YHQv9C10YjQvdC+INC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1OlxuIgorItGE0YPQvdC60YbQuNGP0YLQsCDigJ5iaXNlY3Rfc3RhdGUgJHtzdGF0ZX3igJwg0LfQsNCy0YrRgNGI0Lgg0YEg0LrQvtC0INC30LAg0LPRgNC10YjQutCwICR7cmVzfSIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTIKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgItGD0YHQv9C10YjQvdC+INC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1IgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgdC1INC40LfQstGK0YDRiNCy0LAg0LTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICLQk9GA0LXRiNC60LA6INCh0LvQuNCy0LDQvdC10YLQviDRidC1INC/0YDQtdC30LDQv9C40YjQtSDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90Lgg0L3QsCDRgtC10LfQuCDRhNCw0LnQu9C+0LLQtToiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C90L7RgtC+INGB0LvQuNCy0LDQvdC1INC90LUg0YHRgNCw0LHQvtGC0LguIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgItCd0LUg0YLRgNGP0LHQstCwINC00LAg0YHQtSDQv9GA0LDQstC4INC80L3QvtC20LXRgdGC0LLQtdC90L4g0YHQu9C40LLQsNC90LUuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1INC+0LHRidC+INC/0L7QtNCw0LLQsNC90LUg0YEg4oCeJHByZXR0eV9uYW1l4oCcIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICLQktC10YfQtSDQtSDQvtCx0L3QvtCy0LXQvdC+INC00L4g4oCeJHByZXR0eV9uYW1l4oCcIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgItCf0YDQtdCy0YrRgNGC0LDQvdC1INC00L4g4oCeJHByZXR0eV9uYW1l4oCcIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi0J7Qv9C40YIg0LfQsCDQv9GA0L7RgdGC0L4g0YHQu9C40LLQsNC90LUg0YEg4oCeJHByZXR0eV9uYW1l4oCcIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDoxMDIKK21zZ2lkICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKK21zZ3N0ciAi0J/RgNC+0YHRgtC+0YLQviDRgdC70LjQstCw0L3QtSDQvdC1INGB0YDQsNCx0L7RgtC4LCDQv9GA0L7QsdCy0LAg0YHQtSDQsNCy0YLQvtC80LDRgtC40YfQvdC+INGB0LvQuNCy0LDQvdC1LiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAi0JLRgNC10LzQtdC90L3QuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIiIKKyLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4ke3JlZl9zdGFzaH3igJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9INC00LAg0YHQvtGH0Lgg0LrRitC8IOKAniR7d19jb21taXR94oCcIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgItCT0KDQldCo0JrQkDog0LrQvtC80LDQvdC00LDRgtCwIOKAnnN0YXNoIHB1c2jigJwg0L3QtSDQv9GA0LjQtdC80LAg0L7Qv9GG0LjRj9GC0LAg4oCeJG9wdGlvbuKAnCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICIiCisi0KHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGA0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQuCDQuNC90LTQtdC60YHQsCDRgdCwINC30LDQv9Cw0LfQtdC90Lg6IOKAniRzdGFzaF9tc2figJwiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC+0L/RhtC40Y86ICR7b3B0fSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgItCj0LrQsNC30LDQvdC4INGB0LAg0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LLQtdGA0YHQuNC4OiDigJ4ke1JFVn3igJwiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJHtyZWZlcmVuY2V94oCcINC1INCz0YDQtdGI0LXQvSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIuKAniR7YXJnc33igJwg0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1LCDQv9GA0LjQu9C40YfQsNGJ0L4g0L3QsCDQvdC10YnQviDRgdC60LDRgtCw0L3QviIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICLigJ4ke2FyZ3N94oCcINC90LUg0LUg0YPQutCw0LfQsNGC0LXQuyDQutGK0Lwg0L3QtdGJ0L4g0YHQutCw0YLQsNC90L4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYyMgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi0J/QviDQstGA0LXQvNC1INC90LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQuNC70L7QttC40YLQtSDQvdC10YnQviDRgdC60LDRgtCw0L3QviIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzAKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICIiCisi0JIg0LjQvdC00LXQutGB0LAg0LjQvNCwINC60L7QvdGE0LvQuNC60YLQuC4gINCf0YDQvtCx0LLQsNC50YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDQutC+0LzQsNC90LTQsNGC0LAg0LHQtdC3INC+0L/RhtC40Y/RgtCwIOKAni0tIgorImluZGV44oCcLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzIKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLQlNGK0YDQstC+0YLQviDRgdC+0YfQtdC90L4g0L7RgiDQuNC90LTQtdC60YHQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QviIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NDEKK21zZ2lkICJDb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCBlbnRyeSIKK21zZ3N0ciAi0J3QtdGB0LvQtdC00LXQvdC4INGE0LDQudC70L7QstC1INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LLRitC30YHRgtCw0L3QvtCy0Y/RgiDQvtGCINGB0LrQsNGC0LDQvdC+0YLQviIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC40LfQstCw0LTQtdC90Lgg0L7RgiDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgItCY0LfRgtGA0LjRgtC+INC1INGB0LrQsNGC0LDQvdC+0YLQviDigJ4ke1JFVn3igJwgKCRzKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgItCh0LrQsNGC0LDQvdC+0YLQviDigJ4ke1JFVn3igJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgtC+IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjc5MgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKNCX0LAg0LTQsCDQs9C4INCy0YrQt9GB0YLQsNC90L7QstC40YLQtSwg0LjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3Rhc2ggYXBwbHnigJwpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIwMgorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisi0J7RgtC90L7RgdC40YLQtdC70LXQvSDQv9GK0YIg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDRgdCw0LzQviDQvtGCINC+0YHQvdC+0LLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviAiCisi0LTRitGA0LLQviIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIiIKKyLQsNC00YDQtdGBINC90LAg0YXRgNCw0L3QuNC70LjRidC1OiDigJ4ke3JlcG994oCcINGC0YDRj9Cx0LLQsCDQuNC70Lgg0LTQsCDQtSDQsNCx0YHQvtC70Y7RgtC10L0sINC40LvQuCDQtNCwINC30LDQv9C+0YfQstCwINGBICIKKyLigJ4uL+KAnCDQuNC70Lgg4oCeLi4v4oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIuKAniR7c21fcGF0aH3igJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCBhbmQgaXMgbm90IGEgc3VibW9kdWxlIgorbXNnc3RyICLigJ4ke3NtX3BhdGh94oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINCyINC40L3QtNC10LrRgdCwINC4INC90LUg0LUg0L/QvtC00LzQvtC00YPQuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAi0LIg4oCeJHtzbV9wYXRofeKAnCDQvdC1INC1INC40LfRgtC10LPQu9C10L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyLQodC70LXQtNC90LjRj9GCINC/0YrRgiDRgdC1INC40LPQvdC+0YDQuNGA0LAg0L/QvtGA0LDQtNC4INC90Y/QutC+0Lkg0L7RgiDRhNCw0LnQu9C+0LLQtdGC0LUg4oCeLmdpdGlnbm9yZeKAnDpcbiIKKyIke3NtX3BhdGh9XG4iCisi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tZuKAnCwg0LDQutC+INC30LAg0LTQsCDQs9C+INC00L7QsdCw0LLQuNGC0LUg0L3QsNC40YHRgtC40L3QsC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INCyIOKAniR7c21fcGF0aH3igJwg0LrRitC8INC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIuKAniR7c21fcGF0aH3igJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAsINCwINC90LUg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICIiCisi0J7RgtC60YDQuNGC0LAg0LUg0LvQvtC60LDQu9C90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCBHaXQg4oCUIOKAniR7c21fbmFtZX3igJwsINC60L7Rj9GC0L4g0YHQvtGH0Lgg0LrRitC8ICIKKyLQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0YXRgNCw0L3QuNC70LjRidCwOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0L/RgNC10LjQt9C/0L7Qu9C30LLQsNGC0LUg0YLQsNC30Lgg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCBnaXQsINCy0LzQtdGB0YLQviDQtNCwINC60LvQvtC90LjRgNCw0YLQtSAiCisi0L7RgtC90L7QstC+XG4iCisiICAgICRyZWFscmVwb1xuIgorItC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1mb3JjZeKAnC4gINCQ0LrQviDQu9C+0LrQsNC70L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCBnaXQg0L3QtSDQtSDQt9CwXG4iCisi0L/RgNCw0LLQuNC70L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC40LvQuCDQsNC60L4g0L3QtSDQt9C90LDQtdGC0LUg0LrQsNC60LLQviDQvtC30L3QsNGH0LDQstCwINGC0L7QstCwLCDQuNC30L/QvtC70LfQstCw0LnRgtC1XG4iCisi0LTRgNGD0LPQviDQuNC80LUg0LrQsNGC0L4g0LDRgNCz0YPQvNC10L3RgiDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLS1uYW1l4oCcLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgItCQ0LrRgtC40LLQuNGA0LDQvdC1INC90LAg0LvQvtC60LDQu9C90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4ke3NtX25hbWV94oCcINC90LDQvdC+0LLQvi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRitGCIOKAniR7c21fcGF0aH3igJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtC10LPQu9C10L0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4ke3NtX3BhdGh94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniR7c21fcGF0aH3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQotC10LrRg9GJ0LDRgtCwINCy0LXRgNGB0LjRjyDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCDQsiDigJ4ke2Rpc3BsYXlwYXRofeKAnCDQu9C40L/RgdCy0LAiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC00L7RgdGC0LDQstGP0L3QtSDQsiDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4ke3NtX3BhdGh94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisi0KLQtdC60YPRidCw0YLQsCDQstC10YDRgdC40Y8g4oCeJHtyZW1vdGVfbmFtZX0vJHticmFuY2h94oCcINCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7c21fcGF0aH3igJwgIgorItC70LjQv9GB0LLQsCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc7IHRyeWluZyB0byBkaXJlY3RseSBmZXRjaCAiCisiJHNoYTE6IgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INC00L7RgdGC0LDQstGP0L3QtSDQsiDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4ke2Rpc3BsYXlwYXRofeKAnCwg0L7Qv9C40YIg0LfQsCDQtNC40YDQtdC60YLQvdC+ICIKKyLQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDigJ4ke3NoYTF94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorItCf0L7QtNC80L7QtNGD0LvRitGCINCyINC/0YrRgtGPIOKAniRkaXNwbGF5cGF0aOKAnCDQtSDQtNC+0YHRgtCw0LLQtdC9LCDQvdC+INC90LUg0YHRitC00YrRgNC20LAg0L7QsdC10LrRgtCwINGB0YrRgSDRgdGD0LzQsFxuIgorIuKAniR7c2hhMX3igJwuICDQlNC40YDQtdC60YLQvdC+0YLQviDQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDRgtC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1INC1INC90LXRg9GB0L/QtdGI0L3Qvi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQuNC30YLQtdCz0LvRj9C90LUg0L3QsCDQstC10YDRgdC40Y8g4oCeJHtzaGExfeKAnCDQsiDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4ke2Rpc3BsYXlwYXRofeKAnCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAi0J/RitGCINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7ZGlzcGxheXBhdGh94oCcOiDQuNC30YLQtdCz0LvQtdC90LAg0LUg0LLQtdGA0YHQuNGPIOKAniR7c2hhMX3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwINCy0LXRgNGB0LjRjyDigJ4ke3NoYTF94oCcINCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7ICIKKyLigJ4ke2Rpc3BsYXlwYXRofeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAi0J/RitGCINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7ZGlzcGxheXBhdGh94oCcOiDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INCy0YrRgNGF0YMg0LLQtdGA0YHQuNGPIOKAniR7c2hhMX3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSDQvdCwINCy0LXRgNGB0LjRjyDigJ4ke3NoYTF94oCcINCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7ZGlzcGxheXBhdGh94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzOAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICLQn9GK0YIg0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHtkaXNwbGF5cGF0aH3igJw6INGB0LvQuNCy0LDQvdC1INGBINCy0LXRgNGB0LjRjyDigJ4ke3NoYTF94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAniR7Y29tbWFuZH0gJHtzaGExfeKAnCDQsiDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyAiCisi4oCeJHtkaXNwbGF5cGF0aH3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAi0J/RitGCINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniR7ZGlzcGxheXBhdGh94oCcOiDigJ4ke2NvbW1hbmR9ICR7c2hhMX3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdCwINC+0LHRgNCw0LHQvtGC0LrQsCDQvdCwINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNC40YLQtSDQsiDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4ke2Rpc3BsYXlwYXRofeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4ODYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWNhY2hlZOKAnCDQuCDigJ4tLWZpbGVz4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkzOAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0YDQtdC20LjQvCDigJ4ke21vZF9kc3R94oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIiCisiICDQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDigJ4ke2Rpc3BsYXlfbmFtZX3igJwg0L3QtSDRgdGK0LTRitGA0LbQsCDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4ke3NoYTFfc3JjfeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiIgorIiAg0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog4oCeJHtkaXNwbGF5X25hbWV94oCcINC90LUg0YHRitC00YrRgNC20LAg0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJHtzaGExX2RzdH3igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTY0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKyIgINCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6IOKAniR7ZGlzcGxheV9uYW1lfeKAnCDQvdC1INGB0YrQtNGK0YDQttCwINC90LjQutC+0LUg0L7RgiDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwICIKKyLigJ4ke3NoYTFfc3JjfeKAnCDQuCDigJ4ke3NoYTFfZHN0feKAnCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICLQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LPQu9C10LTQvdC10YLQtSDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQviDQvdCwIOKAnmdpdC0ke2NtZH0oMSnigJwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDkKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YHQutCw0YLQsNC90L7RgtC+INC1INC/0YDQuNC70L7QttC10L3Qvi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAi4oCeJHN0YXNoX3NoYTHigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICLQn9GA0LXQsdCw0LfQuNGA0LDQvdC1ICgkbmV3X2NvdW50LyR0b3RhbCkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMDcKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1pdD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisi0JrQvtC80LDQvdC00Lg6XG4iCisiIHAsIHBpY2sg0J/QntCU0JDQktCQ0J3QlSAgIOKAlCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQvlxuIgorIiByLCByZXdvcmQg0J/QntCU0JDQktCQ0J3QlSDigJQg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4sINC90L4g0YHQvNGP0L3QsCDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LzRg1xuIgorIiBlLCBlZGl0INCf0J7QlNCQ0JLQkNCd0JUgICDigJQg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0Lgg0YHQv9C40YDQsNC90LUg0L/RgNC4INC90LXQs9C+INC30LAg0L7RidC1ICIKKyLQv9GA0L7QvNC10L3QuFxuIgorIiBzLCBzcXVhc2gg0J/QntCU0JDQktCQ0J3QlSDigJQg0LLQutCw0YDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INCyINC/0YDQtdC00YXQvtC00L3QvtGC0L4g0LzRg1xuIgorIiBmLCBmaXh1cCDQn9Ce0JTQkNCS0JDQndCVICDigJQg0LLQutCw0YDQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INCyINC/0YDQtdC00YXQvtC00L3QvtGC0L4g0LzRgywg0LHQtdC3INGB0LzRj9C90LAg0L3QsFxuIgorIiAgICAgICAgICAgICAgICAgICAgICDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+XG4iCisiIHgsIGV4ZWMg0J/QntCU0JDQktCQ0J3QlSAgIOKAlCDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCwINC60YrQvCDQvtCx0LLQuNCy0LrQsNGC0LA6INC+0YHRgtCw0L3QsNC70LDRgtCwINGH0LDRgdGCICIKKyLQvdCwXG4iCisiICAgICAgICAgICAgICAgICAgICAgINGA0LXQtNCwXG4iCisiIGQsIGRyb3Ag0J/QntCU0JDQktCQ0J3QlSAgIOKAlCDQv9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+XG4iCisiIGwsIGxhYmVsINCV0KLQmNCa0JXQoiAgICDigJQg0LfQsNC00LDQstCw0L3QtSDQvdCwINC10YLQuNC60LXRgiDQvdCwINGD0LrQsNC30LDQvdC+0YLQviDQvtGCIEhFQURcbiIKKyIgdCwgcmVzZXQg0JXQotCY0JrQldCiICAgIOKAlCDQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwIEhFQUQg0LrRitC8INCV0KLQmNCa0JXQotCwXG4iCisiIG0sIG1lcmdlIFstQyDQn9Ce0JTQkNCS0JDQndCVIHwgLWMg0J/QntCU0JDQktCQ0J3QlV0g0JXQotCY0JrQldCiIFsjINCV0JTQmNCdX9Cg0JXQlF1cbiIKKyIgICAgICAgICAgICAgICAgICAgIOKAlCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSDRgdC70LjQstCw0L3QtSDRgdGK0YEg0YHRitC+0LHRidC10L3QuNC10YLQviDQvtGCXG4iCisiICAgICAgICAgICAgICAgICAgICAgINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSAo0LjQu9C4INGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L7RgiDQldCU0JjQnV/QoNCV0JQsXG4iCisiICAgICAgICAgICAgICAgICAgICAgINCw0LrQviDQvdC1INC1INC30LDQtNCw0LTQtdC90L4g0L/QvtC00LDQstCw0L3QtSDRgdGK0YEg0YHQu9C40LLQsNC90LUuICDQoSDQvtC/0YbQuNGP0YLQsFxuIgorIiAgICAgICAgICAgICAgICAgICAgICDigJ4tYyDQn9Ce0JTQkNCS0JDQndCV4oCcLCDQvNC+0LbQtSDQtNCwINGB0LzQtdC90LjRgtC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4uXG4iCisiXG4iCisi0JzQvtC20LUg0LTQsCDQv9GA0L7QvNC10L3Rj9GC0LUg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QvtGB0YLRgtCwINC90LAg0YDQtdC00L7QstC10YLQtSDigJQg0YLQtSDRgdC1INC40LfQv9GK0LvQvdGP0LLQsNGCXG4iCisi0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QviDQvtGC0LPQvtGA0LUt0L3QsNC00L7Qu9GDLlxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyLQnNC+0LbQtSDQtNCwINC/0YDQvtC80LXQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQviDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorItCh0LvQtdC0INC60LDRgtC+INC/0YDQuNCy0YrRgNGI0LjRgtC1LCDQv9GA0L7QtNGK0LvQttC10YLQtSDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiRzaGExOiDRgtC+0LLQsCDQvdC1INC1INC/0L7QtNCw0LLQsNC90LUsINC60L7QtdGC0L4g0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LHRgNCw0L3QviIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjMzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC/0L7QtNCw0LLQsNC90LU6IOKAniRzaGEx4oCcIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzY0Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAiIgorItCX0LDQvNC10YHRgtCy0LDRidCw0YLQsCDRgdGD0LzQsCDQv9C+IFNIQTEg0LfQsCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC90LAiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAi0J/RgNC10LLRitGA0YLQsNC90LUg0LTQviDigJ4kc2hhMeKAnCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LLRitGA0YLQuCDQtNC+IOKAniRzaGEx4oCcIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L3QsNGB0L7Rh9C4INC60YrQvCDigJ4kZmlyc3RfcGFyZW504oCcIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0LzQsNGH0LrQsDog4oCeJHNoYTHigJwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/QvtCy0YLQsNGA0Y/QvdC10YLQviDQvdCwINGB0LvQuNCy0LDQvdC10YLQviDQvdCwIOKAniRzaGEx4oCcIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAi4oCeJHNoYTHigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCx0LXRgNC1LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICLQotC+0LLQsCDQtSDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUg4oSWJHtufToiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLQodGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUg4oSWJHtufSDRidC1INCx0YrQtNC1INC/0YDQtdGB0LrQvtGH0LXQvdC+LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICLQotC+0LLQsCDQtSDQvtCx0LXQtNC40L3QtdC90LjQtSDQvtGCICRjb3VudCDQv9C+0LTQsNCy0LDQvdC1LiIKK21zZ3N0clsxXSAi0KLQvtCy0LAg0LUg0L7QsdC10LTQuNC90LXQvdC40LUg0L7RgiAkY291bnQg0L/QvtC00LDQstCw0L3QuNGPLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgItCd0L7QstC+0YLQviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUg4oCeJGZpeHVwX21zZ+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QviIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NQorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorbXNnc3RyICLQotC+0LLQsCDQtSDQvtCx0LXQtNC40L3QtdC90LjQtSDQvtGCIDIg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTM2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NzkKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC00LDQtNC1ICRzaGEx4oCmICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisi0J/QvtC00LDQstCw0L3QtdGC0L4g0L3QtSDQvNC+0LbQtSDQt9CwINC00LUg0L/RgNC+0LzQtdC90Lgg0YHQu9C10LQg0YPRgdC/0LXRiNC90L7RgtC+INC+0YLQsdC40YDQsNC90LUg0L3QsCDigJ4kc2hhMeKApuKAnCAkcmVzdC5cbiIKKyLQndCw0Lkt0LLQtdGA0L7Rj9GC0L3QuNGC0LUg0L/RgNC40YfQuNC90Lgg0YHQsCDQv9GA0LDQt9C90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INC40LvQuCDQvdC10YPRgdC/0LXRiNC90L4gIgorItC40LfQv9GK0LvQvdC10L3QuNC1XG4iCisi0L3QsCDQutGD0LrQsNGC0LAg0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC1LiAg0JDQutC+INC40LzQsNGC0LUg0L/RgNC+0LHQu9C10Lwg0YEg0LrRg9C60LDRgtCwLCDRidC1INGC0YDRj9Cx0LLQsCDQtNCwINCz0L4gIgorItC60L7RgNC40LPQuNGA0LDRgtC1LFxuIgorItC/0YDQtdC00Lgg0LTQsCDQvNC+0LbQtdGC0LUg0LTQsCDQv9GA0L7QvNC10L3QuNGC0LUg0L/QvtC00LDQstCw0L3QtdGC0L4uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAi0KHQv9C40YDQsNC90LUg0L/RgNC4IOKAniRzaGExX2FiYnJlduKApuKAnCAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLQkdC10Lcg0L/RgNC10LTRhdC+0LTQvdC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg4oCeJHNxdWFzaF9zdHlsZeKAnCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YHQtSDQuNC30L/RitC70L3Rj9Cy0LA6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1OiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQuCDQv9GA0L7QvNC10L3QuCDQuNC90LTQtdC60YHQsCDQuC/QuNC70Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi0JzQvtC20LUg0LTQsCDQutC+0YDQuNCz0LjRgNCw0YLQtSDQv9GA0L7QsdC70LXQvNCwLCDRgdC70LXQtCDQutC+0LXRgtC+INC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0XG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorItCj0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1OiAkcmVzdFxuIgorItCe0YHRgtCw0LLQsNGCINC+0YnQtSDQv9GA0L7QvNC10L3QuCDQsiDQuNC90LTQtdC60YHQsCDQuNC70Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4uXG4iCisi0KLRgNGP0LHQstCwINC00LAg0LPQuCDQv9C+0LTQsNC00LXRgtC1INC40LvQuCDRgdC60LDRgtCw0LXRgtC1INC4INGB0LvQtdC0INGC0L7QstCwINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0LrQvtC80LDQvdC00LA6ICRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgItCa0L7RgNC40LPQuNGA0LDQudGC0LUg0YLQvtCy0LAg0YfRgNC10Lcg4oCeZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb+KAnC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICLQo9GB0L/QtdGI0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INC4INC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg4oCeJGhlYWRfbmFtZeKAnC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTIKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkNIRVJSWV9QSUNLX0hFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorItCSINC40L3QtNC10LrRgdCwINC40LzQsCDQv9GA0L7QvNC10L3QuC4gINCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQs9C4INCy0LrQsNGA0LDRgtC1INCyXG4iCisi0L/RgNC10LTQuNGI0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSwg0LjQt9C/0YrQu9C90LXRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0YHRitC30LTQsNC00LXRgtC1INC90L7QstC+INC/0L7QtNCw0LLQsNC90LUsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorItCYINCyINC00LLQsNGC0LAg0YHQu9GD0YfQsNGPINGB0LvQtdC0INC60LDRgtC+INC/0YDQuNCy0YrRgNGI0LjRgtC1LCDQv9GA0L7QtNGK0LvQttC10YLQtSDRgSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM0Cittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YIg0LDQstGC0L7RgCDQt9CwINC/0L7Qv9GA0LDQstGP0L3QtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisi0JIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LjQvNCwINC90LXQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4LiAg0J/RitGA0LLQviDQs9C4INC/0L7QtNCw0LnRgtC1LCDQsCDRgdC70LXQtCDRgtC+0LLQsFxuIgorItC+0YLQvdC+0LLQviDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlYmFzZSAtLWNvbnRpbnVl4oCcLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ4Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgItCf0YDQvtC80LXQvdC40YLQtSDQsiDQuNC90LTQtdC60YHQsCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC/0L7QtNCw0LTQtdC90LguIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NjUKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgItCi0LXQutGB0YLQvtCy0LjRj9GCINGA0LXQtNCw0LrRgtC+0YAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YLQsNGA0YLQuNGA0LDQvSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIuKAniRzd2l0Y2hfdG/igJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9GC0LXQs9C70LgiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAi0JvQuNC/0YHQstCwINGD0LrQsNC30LDRgtC10Lsg4oCeSEVBROKAnCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKK21zZ3N0ciAi0JLRgNC10LzQtdC90L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCeJHN0YXRlX2RpcuKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTExCittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgItCf0YDQtdCx0LDQt9C40YDQsNC90LXRgtC+INC90LUg0LUg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICIiCisi0J/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwICRzaG9ydHJldmlzaW9ucyDQstGK0YDRhdGDICRzaG9ydG9udG8gKCR0b2RvY291bnQg0LrQvtC80LDQvdC00LApIgorbXNnc3RyWzFdICIiCisi0J/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwICRzaG9ydHJldmlzaW9ucyDQstGK0YDRhdGDICRzaG9ydG9udG8gKCR0b2RvY291bnQg0LrQvtC80LDQvdC00LgpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTk3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDAyCittc2dpZCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiCittc2dzdHIgItCh0L/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/RgiDQsiDQuNC90LTQtdC60YHQsCFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQzCittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgItCU0LAg0YHQtSDQv9GA0LjQu9C+0LbQsNGCINC70Lgg0LrRitC8INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+PyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0NgorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgItCd0LjRidC+INC90LUg0LUg0L/RgNC40LvQvtC20LXQvdC+LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgItC/0YDQtdC90LXQsdGA0LXQs9Cy0LDQvdC1INC90LAg0L3QtdGB0LvRj9GC0L7RgtC+OiDigJ4lc+KAnFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAg0L3QsCDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGC0L7QstCwINC/0LDRgNGH0LUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KHQutCw0YLQsNCy0LDQvdC1INC90LAg0L/RgNC+0LzRj9C90LDRgtCwINC90LAg0L/RgNCw0LLQsNGC0LAg0LfQsCDQtNC+0YHRgtGK0L8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KHQutCw0YLQsNCy0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KHQutCw0YLQsNCy0LDQvdC1INC90LAg0YLQvtCy0LAg0L/QsNGA0YfQtSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCY0LfQstCw0LbQtNCw0L3QtSDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsCDQvdCwINC/0YDQsNCy0LDRgtCwINC30LAg0LTQvtGB0YLRitC/IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDRgtC+0LLQsCDQv9Cw0YDRh9C1IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAg0L3QsCDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyDQutGK0Lwg0LjQvdC00LXQutGB0LAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviDQutGK0Lwg0LjQvdC00LXQutGB0LAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGC0L7QstCwINC/0LDRgNGH0LUg0LrRitC8INC40L3QtNC10LrRgdCwIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorItCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L/RgNC+0LzRj9C90LDRgtCwINCyINC/0YDQsNCy0LDRgtCwINC30LAg0LTQvtGB0YLRitC/INC+0YIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksbixxLGEsZCIKKyIlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQuNC30YLRgNC40LLQsNC90LXRgtC+INC+0YIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorItCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L/RgNC+0LzRj9C90LDRgtCwINCyINC/0YDQsNCy0LDRgtCwINC30LAg0LTQvtGB0YLRitC/INC+0YIg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksIgorIm4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorItCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC10YLQviDQvtGCINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQtdC80LDRhdCy0LDQvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0L7RgiDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsCDQsiDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyDQvtGCINC40L3QtNC10LrRgdCwINC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IFt5LG4sIgorInEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L7RgiDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0LDRgNGH0LXRgtC+INC+0YIg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsCDQsiDQv9GA0LDQstCw0YLQsCDQt9CwINC00L7RgdGC0YrQvyDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksbixxLGEsZCIKKyIlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC40LfRgtGA0LjQstCw0L3QtdGC0L4g0LrRitC8INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAi0J3Rj9C80LAg0LTRgNGD0LPQuCDQv9Cw0YDRh9C10YLQsFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcydcbiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0L3QvtC80LXRgDog4oCeJXPigJxcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gItCY0LzQsCDRgdCw0LzQviAlZCDQv9Cw0YDRh9C1LlxuIgorbXNnc3RyWzFdICLQmNC80LAg0YHQsNC80L4gJWQg0L/QsNGA0YfQtdGC0LAuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICLQndGP0LzQsCDQtNGA0YPQs9C4INC/0LDRgNGH0LXRgtCwINC30LAg0YLRitGA0YHQtdC90LVcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICLQodCz0YDQtdGI0LXQvSDRgNC10LPRg9C70Y/RgNC10L0g0LjQt9GA0LDQtyDigJ4lc+KAnDogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgItCd0LjQutC+0LUg0L/QsNGA0YfQtSDQvdC1INC90LDQv9Cw0YHQstCwINC90LAg0YDQtdCz0YPQu9GP0YDQvdC40Y8g0LjQt9GA0LDQt1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjgwCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICLQndGP0LzQsCDQtNGA0YPQs9C+INC/0LDRgNGH0LUg0L/RgNC10LTQuCDRgtC+0LLQsFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgItCd0Y/QvNCwINC00YDRg9Cz0L4g0L/QsNGA0YfQtSDRgdC70LXQtCDRgtC+0LLQsFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTIKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICLQotC+0LLQsCDQv9Cw0YDRh9C1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNCw0LfQtNC10LvQtdC90L5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAi0KDQsNC30LTQtdC70Y/QvdC1INC90LAgJWQg0L/QsNGA0YfQtS5cbiIKK21zZ3N0clsxXSAi0KDQsNC30LTQtdC70Y/QvdC1INC90LAgJWQg0L/QsNGA0YfQtdGC0LAuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwOAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAi0KLQvtCy0LAg0L/QsNGA0YfQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YDQtdC00LDQutGC0LjRgNCw0L3QvlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIOKAlCDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwINGBINC/0YDQvtC80LXQvdC40YLQtVxuIgorInVwZGF0ZSAgICAgICAg4oCUINC00L7QsdCw0LLRj9C90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0LrRitC8INC/0YDQvtC80LXQvdC40YLQtSDQslxuIgorIiAgICAgICAgICAgICAgICDQuNC90LTQtdC60YHQsFxuIgorInJldmVydCAgICAgICAg4oCUINC+0YLQvNGP0L3QsCDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsiDQuNC90LTQtdC60YHQsCDQutGK0Lwg0YHRitGB0YLQvtGP0L3QuNC10YLQviDRgdC+0YfQtdC90L4g0L7RgiAiCisi4oCeSEVBROKAnFxuIgorInBhdGNoICAgICAgICAg4oCUINC40LfQsdC40YDQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQsCDQutC+0LQg0Lgg0L7QsdC90L7QstGP0LLQsNC90LUg0L/QvtC10LTQuNC90LjRh9C90L5cbiIKKyJkaWZmICAgICAgICAgIOKAlCDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQsNGC0LAg0LzQtdC20LTRgyDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YHQvtGH0LXQvdC+0YLQviDQvtGCICIKKyLigJ5IRUFE4oCcXG4iCisiICAgICAgICAgICAgICAgINC4INC40L3QtNC10LrRgdCwXG4iCisiYWRkIHVudHJhY2tlZCDigJQg0LTQvtCx0LDQstGP0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LrRitC8INC/0YDQvtC80LXQvdC40YLQtSDQsiDQuNC90LTQtdC60YHQsFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI1Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAi4oCeLS3igJwg0LvQuNC/0YHQstCwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QsCDRgdGC0YDQsNGC0LXQs9C40Y8g0LfQsCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQutGA0YrQv9C60LA6IOKAniVz4oCcIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAi0YPQutCw0LfQsNC9INC1INC90LXQv9GA0LDQstC40LvQtdC9INCw0YDQs9GD0LzQtdC90YIg4oCeJXPigJwsINCwINGB0LUg0L7Rh9Cw0LrQstCwIOKAni0t4oCcLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgIiIKKyLRgNCw0LfQu9C40LrQsNGC0LAg0LzQtdC20LTRgyDQvNC10YHRgtC90LjRjyDRh9Cw0YHQvtCy0Lgg0L/QvtGP0YEg0LggR01UINGB0YrQtNGK0YDQttCwINC00YDQvtCx0L3QsCDRh9Cw0YHRgiDQvtGCINC80LjQvdGD0YLQsFxuIgorIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsNGC0LAg0LzQtdC20LTRgyDQvNC10YHRgtC90LjRjyDRh9Cw0YHQvtCy0LjRjyDQv9C+0Y/RgSDQuCBHTVQg0LUgMjQg0YfQsNGB0LAg0LjQu9C4INC/0L7QstC10YfQtVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyOQorbXNnaWQgInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIKK21zZ3N0ciAiIgorItGC0LXQutGB0YLQvtCy0LjRj9GCINGA0LXQtNCw0LrRgtC+0YAg0L/RgNC40LrQu9GO0YfQuCDRgNCw0LHQvtGC0LDRgtCwINGBINCz0YDQtdGI0LrQsCwg0LLRgdC40YfQutC+INGB0LUg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIuKAniVz4oCcINGB0YrQtNGK0YDQttCwINCy0YDQtdC80LXQvdC90LAg0LLQtdGA0YHQuNGPINC90LAg0L/QvtC00LPQvtGC0LLRj9C90L7RgtC+INC1LdC/0LjRgdC80L4uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICLigJ4lcy5maW5hbOKAnCDRgdGK0LTRitGA0LbQsCDQv9C+0LTQs9C+0YLQstC10L3QvtGC0L4g0LUt0L/QuNGB0LzQvi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0MDgKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZHVtcC1hbGlhc2Vz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQtNGA0YPQs9C40YLQtSDQvtC/0YbQuNC4XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDgxIGdpdC1zZW5kLWVtYWlsLnBlcmw6NjgzCittc2dpZCAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBmb3JtYXQtcGF0Y2jigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90Lgg0LjQt9Cy0YrQvSDRhdGA0LDQvdC40LvQuNGJ0LVcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisi4oCeYmF0Y2gtc2l6ZeKAnCDQuCDigJ5yZWxvZ2lu4oCcINGC0YDRj9Cx0LLQsCDQtNCwINGB0LUg0YPQutCw0LfQstCw0YIg0LfQsNC10LTQvdC+ICjQuNC70Lgg0YfRgNC10Lcg0LrQvtC80LDQvdC00L3QuNGPICIKKyLRgNC10LQsINC40LvQuCDRh9GA0LXQtyDQvdCw0YHRgtGA0L7QudC60LjRgtC1KVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tc3VwcHJlc3MtY2MgZmllbGQ6ICclcydcbiIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtC+INC/0L7Qu9C1INC30LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdXBwcmVzcy1jY+KAnDog4oCeJXPigJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwIOKAni0tY29uZmlybeKAnDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC/0YHQtdCy0LTQvtC90LjQvNC4INC30LAgc2VuZG1haWwg0YHRitC00YrRgNC20LDRidC4INC60LDQstC40YfQutC4ICjigJ5cIuKAnCkg0L3QtSDRgdC1ICIKKyLQv9C+0LTQtNGK0YDQttCw0YI6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6IOKAnjppbmNsdWRlOuKAnCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQv9GA0LXQvdCw0YHQvtGH0LLQsNC90LjRjyDigJ4vZmlsZeKAnCDQuNC70Lgg4oCefHBpcGXigJwg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LDRgjogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0YDQtdC00YrRgiDQt9CwIOKAnnNlbmRtYWls4oCcINC90LUg0LUg0YDQsNC30L/QvtC30L3QsNGCOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAsINC90L4g0LjQvNC10YLQviDQvNC+0LbQtSDQtNCwINC+0LfQvdCw0YfQsNCy0LAg0Lgg0LTQuNCw0L/QsNC30L7QvSDQvtGCINC/0L7QtNCw0LLQsNC90LjRjyxcbiIKKyLQt9CwINC60L7QudGC0L4g0LTQsCDRgdC1INGB0YrQt9C00LDQtNCw0YIg0LrRgNGK0L/QutC4LiAg0JzQvtC20LUg0LjQt9GA0LjRh9C90L4g0LTQsCDRg9C60LDQttC10YLQtSDQt9C90LDRh9C10L3QuNC10YLQviDQutCw0YLQvjpcbiIKKyJcbiIKKyIgICAg4pePINGD0LrQsNC20LXRgtC1IOKAni4vJXPigJwg0LfQsCDRhNCw0LnQuztcbiIKKyIgICAg4pePINC40LfQv9C+0LvQt9Cy0LDRgtC1INC+0L/RhtC40Y/RgtCwIOKAni0tZm9ybWF0LXBhdGNo4oCcINC30LAg0LTQuNCw0L/QsNC30L7QvS5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4OiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2OTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorImZhdGFsOiAlczogJXNcbiIKKyJ3YXJuaW5nOiBubyBwYXRjaGVzIHdlcmUgc2VudFxuIgorbXNnc3RyICIiCisi0KTQkNCi0JDQm9Cd0JAg0JPQoNCV0KjQmtCQOiAlczogJXNcbiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQvdC1INGB0LAg0L/RgNCw0YLQtdC90Lgg0L3QuNC60LDQutCy0Lgg0LrRgNGK0L/QutC4XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzA1Cittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorItCd0LUg0YHQsCDRg9C60LDQt9Cw0L3QuCDQutGA0YrQv9C60LghXG4iCisiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk5vIHN1YmplY3QgbGluZSBpbiAlcz8iCittc2dzdHIgItCSIOKAniVz4oCcINC70LjQv9GB0LLQsCDRgtC10LzQsCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LfQsCDQt9Cw0L/QuNGBOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyLQoNC10LTQvtCy0LXRgtC1INC30LDQv9C+0YfQstCw0YnQuCDRgSDigJ5HSVQ64oCcINGJ0LUg0LHRitC00LDRgiDQv9GA0LXRgdC60LDRh9Cw0L3QuC5cbiIKKyLQlNC+0LHRgNC1INC1INC00LAg0LLQutC70Y7Rh9C40YLQtSDRgdGC0LDRgtC40YHRgtC40LrQsCDQvdCwINGA0LDQt9C70LjQutC40YLQtSDQuNC70Lgg0L3Rj9C60LDQutCy0LAg0YLQsNCx0LvQuNGG0LAg0L3QsCAiCisi0YHRitC00YrRgNC20LDQvdC40LXRgtC+XG4iCisi0L3QsCDQv9C+0LTQs9C+0YLQstGP0L3QsNGC0LAg0LrRgNGK0L/QutCwLlxuIgorIlxuIgorItCY0LfRgtGA0LjQudGC0LUg0LLRgdC40YfQutC+LCDQsNC60L4g0L3QtSDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30L/RgNCw0YLQuNGC0LUg0L7QsdC+0LHRidCw0LLQsNGJ0L4g0L/QuNGB0LzQvi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lg6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIuKAniVzLmZpbmFs4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAi0J7QsdC+0LHRidCw0LLQsNGJ0L7RgtC+INC/0LjRgdC80L4g0LUg0L/RgNCw0LfQvdC+INC4INGB0LUg0L/RgNC10YHQutCw0YfQsFxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAi0KHQuNCz0YPRgNC90Lgg0LvQuCDRgdGC0LUsINGH0LUg0LjRgdC60LDRgtC1INC00LAg0L/QvtC70LfQstCw0YLQtSDigJ4lc+KAnCBbeS9OXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxMworbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorItCh0LvQtdC00L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0YHQsCA4INCx0LjRgtC+0LLQuCwg0L3QviDQvdC1INGB0LAg0YEg0L7QsdGP0LLQtdC90LAg0LfQsNCz0LvQsNCy0L3QsCDRh9Cw0YHRgiDigJ5Db250ZW50LSIKKyJUcmFuc2Zlci1FbmNvZGluZ+KAnC5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTgKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICLQmtC+0LUgOCDQsdC40YLQvtCy0L4g0LrQvtC00LjRgNCw0L3QtSDRgdC1INC/0L7Qu9C30LLQsCBb0YHRgtCw0L3QtNCw0YDRgtC90L46IFVURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorItCd0LjRidC+INC90Y/QvNCwINC00LAg0YHQtSDQv9GA0LDRgtC4LCDQt9Cw0YnQvtGC0L4g0LrRgNGK0L/QutCw0YLQsFxuIgorIiAgICAlc1xuIgorItCy0YHQtSDQvtGJ0LUg0LUg0YEg0YjQsNCx0LvQvtC90L3QvtGC0L4g0LfQsNCz0LvQsNCy0LjQtSDigJ4qKiogU1VCSkVDVCBIRVJFICoqKuKAnC4gINCf0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsFxuIgorIuKAni0tZm9yY2XigJwsINCw0LrQviDRgdGC0LUg0YHQuNCz0YPRgNC90LgsINGH0LUg0YLQvtGH0L3QviDRgtC+0LLQsCDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30L/RgNCw0YLQuNGC0LUuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTQ1Cittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAi0J3QsCDQutC+0Lkg0LTQsCDRgdC1INC/0YDQsNGC0Y/RgiDQtS3Qv9C40YHQvNCw0YLQsCAo0L3QtdC30LDQtNGK0LvQttC40YLQtdC70L3QviDQv9C+0LvQtSkiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgItCk0JDQotCQ0JvQndCQINCT0KDQldCo0JrQkDog4oCeJXPigJwg0LUg0L/RgdC10LLQtNC+0L3QuNC8INC90LAg0YHQtdCx0LUg0YHQuFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIiIKKyLQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvdCwINGB0YrQvtCx0YnQtdC90LjQtSDigJ5NZXNzYWdlLUlE4oCcLCDQutC+0LXRgtC+INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINC30LAg0L7QsdGP0LLRj9Cy0LDQvdC10YLQviAiCisi0L3QsCDQvtGC0LPQvtCy0L7RgCDigJ5Jbi1SZXBseS1Ub+KAnCAo0L3QtdC30LDQtNGK0LvQttC40YLQtdC70L3QviDQv9C+0LvQtSkiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAzMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstC70LXRh9C1INCw0LTRgNC10YEg0L7RgiDigJ4lc+KAnFxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0NQorbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAiIgorItCa0LDQutCy0L4g0LTQsCDRgdC1INC90LDQv9GA0LDQstC4INGBINGC0L7Qt9C4INCw0LTRgNC10YE/IOKAnnHigJwgKNGB0L/QuNGA0LDQvdC1KSwg4oCeZOKAnCAo0LjQt9GC0YDQuNCy0LDQvdC1KSwgIgorIuKAnmXigJwgKNGA0LXQtNCw0LrRgtC40YDQsNC90LUpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM2MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0J/RitGC0Y/RgiDQutGK0Lwg0YHQtdGA0YLQuNGE0LjQutCw0YIg4oCeJXPigJwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAg0JrRitC8INGB0L/QuNGB0YrQutCwINGBINC/0L7Qu9GD0YfQsNGC0LXQu9C40YLQtSAo4oCeQ2PigJwpINGB0LAg0LTQvtCx0LDQstC10L3QuCDQuCDQtNGA0YPQs9C40YLQtVxuIgorIiAgICDQsNC00YDQtdGB0Lgg0L3QsCDQtS3Qv9C+0YnQsCwg0LrQvtC40YLQviDRgdCwINGD0L/QvtC80LXQvdCw0YLQuCDQsiDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LBcbiIKKyIgICAg0L/QvtC00LDQstCw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAuICDQodGC0LDQvdC00LDRgNGC0L3QviDQutC+0LzQsNC90LTQsNGC0LAg4oCec2VuZC1lbWFpbOKAnFxuIgorIiAgICDQv9C40YLQsCDQt9CwINGC0L7QstCwINC/0YDQtdC00Lgg0LjQt9C/0YDQsNGJ0LDQvdC1LiAg0JzQvtC20LXRgtC1INC00LAg0L/RgNC10LzQtdC90LjRgtC1INGC0L7QstCwXG4iCisiICAgINC/0L7QstC10LTQtdC90LjQtSDRh9GA0LXQtyDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnNlbmRlbWFpbC5jb25maXJt4oCcLlxuIgorIlxuIgorIiAgICDQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHNlbmQtZW1haWwgLS1oZWxw4oCcINC/0YDQtdC00L7RgdGC0LDQstGPINC+0YnQtVxuIgorIiAgICDQuNC90YTQvtGA0LzQsNGG0LjRjy4gINCX0LAg0LTQsCDQt9Cw0L/QsNC30LjRgtC1INGC0LXQutGD0YnQvtGC0L4g0L/QvtCy0LXQtNC10L3QuNC1INC4INC00LAg0L3QtVxuIgorIiAgICDQv9C+0LvRg9GH0LDQstCw0YLQtSDQv9C+0LLQtdGH0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1LCDQuNC30L/RitC70L3QtdGC0LU6XG4iCisiICAgIOKAnmdpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0b+KAnC5cbiIKKyJcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSBbbl0gW2VdIFtxXSBbYV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MAorbXNnaWQgIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCk6ICIKK21zZ3N0ciAiIgorItCY0LfQv9GA0LDRidCw0L3QtSDQvdCwINC1LdC/0LjRgdC80L7RgtC+PyDigJ554oCcICjQtNCwKSwg4oCebuKAnCAo0L3QtSksIOKAnmXigJwgKNGA0LXQtNCw0LrRgtC40YDQsNC90LUpLCDigJ5x4oCcICjQuNC30YXQvtC0KSwgIgorIuKAnmHigJwgKNCy0YHQuNGH0LrQvik6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYzCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIgorbXNnc3RyICLQmNC30LjRgdC60LLQsNC90LUg0L3QsCDQvtGC0LPQvtCy0L7RgCDQutGK0Lwg0YLQvtCy0LAg0LUt0L/QuNGB0LzQviIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkxCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAi0KHRitGA0LLRitGA0YrRgiDQt9CwIFNNVFAg0L3QtSDQtSDQvdCw0YHRgtGA0L7QtdC9INC/0YDQsNCy0LjQu9C90L4uIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICLQodGK0YDQstGK0YDRitGCINC90LUg0L/QvtC00LTRitGA0LbQsCDigJ5TVEFSVFRMU+KAnCEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0MyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAgU1RBUlRUTFMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisi0J/QvtC00YHQuNGB0YLQtdC80LDRgtCwINC30LAgU01UUCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0LAuICDQn9GA0L7QstC10YDQtdGC0LUg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDQuCAiCisi0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsDog4oCeLS1zbXRwLWRlYnVn4oCcLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30L/RgNCw0YLQtdC9XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICLQn9GA0L7QsdCwINC30LAg0LjQt9C/0YDQsNGJ0LDQvdC1INC90LAg4oCeJXPigJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAi0JjQt9C/0YDQsNGJ0LDQvdC1INC90LAg4oCeJXPigJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAi0KPRgdC/0LXRhSDQv9GA0Lgg0L/RgNC+0LHQsNGC0LAuICDQntGCINC20YPRgNC90LDQu9CwOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgItCj0YHQv9C10YUuICDQntGCINC20YPRgNC90LDQu9CwOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTEKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAi0KDQtdC30YPQu9GC0LDRgjogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTQKK21zZ2lkICJSZXN1bHQ6IE9LXG4iCittc2dzdHIgItCg0LXQt9GD0LvRgtCw0YI6INGD0YHQv9C10YVcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjU5IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY3OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkg0JTQvtCx0LDQstGP0L3QtSDQvdCwIOKAntGP0Lo6ICVz4oCcINC+0YIg0YDQtdC0IOKAniVz4oCcXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkg0JTQvtCx0LDQstGP0L3QtSDQvdCwIOKAntC00L46ICVz4oCcINC+0YIg0YDQtdC0IOKAniVz4oCcXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKNC90LUtbWJveCkg0JTQvtCx0LDQstGP0L3QtSDQvdCwIOKAntGP0Lo6ICVz4oCcINC+0YIg0YDQtdC0IOKAniVz4oCcXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIo0YLRj9C70L4pINCU0L7QsdCw0LLRj9C90LUg0L3QsCDigJ7Rj9C6OiAlc+KAnCDQvtGCINGA0LXQtCDigJ4lc+KAnFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIgorbXNnc3RyICIoJXMpINCd0LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdC1INC40LfQv9GK0LvQvdC4IOKAniVz4oCcIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSDQlNC+0LHQsNCy0Y/QvdC1INC90LAg4oCeJXM6ICVz4oCcINC+0YI6IOKAniVz4oCcXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykg0L/RgNC+0LPRgNCw0LzQvdC40Y/RgiDQutCw0L3QsNC7INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDRgtCy0L7RgNC4INC30LAg0LjQt9C/0YrQu9C90LXQvdC40LXRgtC+INC90LAg4oCeJXPigJwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAi0YHRitC+0LHRidC10L3QuNC10YLQviDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RgNCw0YLQuCDRh9GA0LXQtyA3INCx0LjRgtC+0LLQuCDQt9C90LDRhtC4IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MTMKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQutC+0LTQuNGA0LDQvdC1INC30LAg0L/RgNC10L3QvtGBIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTQgZ2l0LXNlbmQtZW1haWwucGVybDoyMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4OiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyIKK21zZ3N0ciAi4oCeJXPigJw6INC60YDRitC/0LrQsNGC0LAg0YHRitC00YrRgNC20LAg0YDQtdC0INGBINC90LDQtCA5ODgg0LfQvdCw0LrQsCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICLigJ4lc+KAnCDRgdC1INC/0YDQvtC/0YPRgdC60LAsINC30LDRidC+0YLQviDQtSDRgSDRgNCw0LfRiNC40YDQtdC90LjQtSDQt9CwINCw0YDRhdC40LLQtdC9INGE0LDQudC7OiDigJ4lc+KAnC5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgItCd0LDQuNGB0YLQuNC90LAg0LvQuCDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30L/RgNCw0YLQuNGC0LUg4oCeJXPigJw/IFt5fE5dOiAiCmRpZmYgLS1naXQgYS9wby9jYS5wbyBiL3BvL2NhLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNGMxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9wby9jYS5wbwpAQCAtMCwwICsxLDI0MzcyIEBACisjIENhdGFsYW4gdHJhbnNsYXRpb25zIGZvciBHaXQuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgQWxleCBIZW5yaWUgPGFsZXhoZW5yaWUyNEBnbWFpbC5jb20+LCAyMDE0LTIwMTYuCisjIEpvcmRpIE1hcyBpIEhlcm7DoG5kZXogPGptYXNAc29mdGNhdGFsYS5vcmc+LCAyMDE2LTIwMTkKKyMKKyMgVGVybWlub2xvZ2lhIGkgY3JpdGVyaXMgdXRpbGl0emF0cworIworIyAgIEFuZ2zDqHMgICAgICAgICAgIHwgIENhdGFsw6AKKyMgICAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICBhaGVhZCAgICAgICAgICAgIHwgIGRhdmFudCBwZXIKKyMgICBhbWVuZCAgICAgICAgICAgIHwgIGVzbWVuYXIKKyMgICBidW5kbGUgICAgICAgICAgIHwgIGZhcmNlbGwKKyMgICBicm9rZW4gICAgICAgICAgIHwgIG1hbG3DqHMKKyMgICBkZWx0YSAgICAgICAgICAgIHwgIGRpZmVyw6huY2lhCisjICAgZGVwcmVjYXRlZCAgICAgICB8ICBlbiBkZXPDunMKKyMgICBkcnkgICAgICAgICAgICAgIHwgIHNpbXVsYWNpw7MKKyMgICBmYXRhbCAgICAgICAgICAgIHwgIGZhdGFsCisjICAgaG9vayAgICAgICAgICAgICB8ICBsbGlnYW0KKyMgICBodW5rICAgICAgICAgICAgIHwgIHRyb3MKKyMgICBub3Qgc3VwcG9ydGVkICAgIHwgIG5vIGVzdMOgIGFkbcOocworIyAgIHJlcG9zaXRvcnkgICAgICAgfCAgZGlww7JzaXQKKyMgICBzZXR0aW5nICAgICAgICAgIHwgIHBhcsOgbWV0cmUKKyMgICBza2lwICAgICAgICAgICAgIHwgIG9tZXRyZQorIyAgIHNxdWVsY2ggICAgICAgICAgfCAgc2lsZW5jaWFyCisjICAgdG9rZW4gICAgICAgICAgICB8ICB0ZXN0aW1vbmkKKyMgICB1bnNldCAgICAgICAgICAgIHwgIGRlc2Fzc2lnbmFyCisjICAgdXBzdHJlYW0gICAgICAgICB8ICBmb250CisjCisjIEFsZ3VucyB0ZXJtZXMgcXVlIHPDs24gb3JkcmVzIGVzcGVjw61maXF1ZXMgZGVsIGdpdCBpIGQnw6BtYml0IG1vbHQgdMOoY25pYworIyBoZW0gZGVjaWRpdCBubyB0cmFkdWlyLWxvcyBwZXIgZmFjaWxpdGFyLW5lIGxhIGNvbXByZXNzacOzIGEgbCd1c3VhcmkgaSBwZXJxdcOoCisjIG5vIHRlbmVuIHVuYSB0cmFuc2NlbmTDqG5jaWEgYWwgZ3JhbiBww7pibGljLiBFcyB0cmFjdGEgZGUgY2Fzb3Mgc2ltaWxhcnMKKyMgYSDCq3BpbmfCuyBlbiBsJ8OgbWJpdCBkZSB4YXJ4ZXMuCisjCisjIFRlcm1lcyBxdWUgbWFudGVuaW0gZW4gYW5nbMOoczoKKyMKKyMKKyMgICBBbmdsw6hzICAgICAgICAgICB8ICBDYXRhbMOgCisjICAgLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgYmxhbWUgICAgICAgICAgICB8ICDCq2JsYW1lwrsKKyMgICBIRUFEICAgICAgICAgICAgIHwgIEhFQUQgKGYsIGxhIGJyYW5jYSkKKyMgICBjaGVycnkgcGljayAgICAgIHwgIMKrY2hlcnJ5IHBpY2vCuworIyAgIHJlYmFzZSAgICAgICAgICAgfCAgwqtyZWJhc2XCuworIyAgIHN0YWdlICAgICAgICAgICAgfCAgwqtzdGFnZcK7CisjICAgc3Rhc2ggICAgICAgICAgICB8ICDCq3N0YXNowrsKKyMgICBzcXVhc2ggICAgICAgICAgIHwgIMKrc3F1YXNowrsKKyMgICB0cmFpbGVyICAgICAgICAgIHwgIMKrdHJhaWxlcsK7CisjICAgdW5zdGFnZSAgICAgICAgICB8ICDCq3Vuc3RhZ2XCuworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTktMTItMzAgMDg6NDgrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDEtMDkgMTA6MTArMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSm9yZGkgTWFzIDxqbWFzQHNvZnRjYXRhbGEub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IENhdGFsYW5cbiIKKyJMYW5ndWFnZTogY2FcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogUG9lZGl0IDIuMi40XG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgIlBlcmTDsyAoJXMpPyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTAwIGFkZC1pbnRlcmFjdGl2ZS5jOjgwMSBzZXF1ZW5jZXIuYzozMjE2CisjOiBzZXF1ZW5jZXIuYzozNjU2IGJ1aWx0aW4vcmViYXNlLmM6ODcxIGJ1aWx0aW4vcmViYXNlLmM6MTY0MworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE5IGJ1aWx0aW4vcmViYXNlLmM6MjA2MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBsJ8OtbmRleCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTU1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAiYmluYXJpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNzgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzMyCittc2dpZCAibm90aGluZyIKK21zZ3N0ciAicmVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTQKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzI5Cittc2dpZCAidW5jaGFuZ2VkIgorbXNnc3RyICJzZW5zZSBjYW52aXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY0MworbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAiQWN0dWFsaXR6YSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjY4IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmZXIgwqtzdGFnZcK7IMKrJXPCuyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njc0IGFkZC1pbnRlcmFjdGl2ZS5jOjg2MyBzZXF1ZW5jZXIuYzozNDA5CisjOiBidWlsdGluL3JlYmFzZS5jOjg5NQorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBpbmRleCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ8OtbmRleCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njc3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJ1cGRhdGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidXBkYXRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJhY3R1YWxpdHphdCAlZCBjYW3DrVxuIgorbXNnc3RyWzFdICJhY3R1YWxpdHphdHMgJWQgY2FtaW5zXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAibm90YTogJXMgZXN0w6AgYXJhIHNlbnNlIHNlZ3VpbWVudC5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzAwIGFwcGx5LmM6NDEwOCBidWlsdGluL2NoZWNrb3V0LmM6MjgxCisjOiBidWlsdGluL3Jlc2V0LmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIm1ha2VfY2FjaGVfZW50cnkgaGEgZmFsbGF0IHBlciBhbCBjYW3DrSDCqyVzwrsiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjczMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAiUmV2ZXJ0ZWl4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NDYKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIEhFQURee3RyZWV9IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3ODQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAicmV2ZXJ0aXQgJWQgY2Ftw61cbiIKK21zZ3N0clsxXSAicmV2ZXJ0aXRzICVkIGNhbWluc1xuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICJTZW5zZSBmaXR4ZXJzIG5vIHNlZ3VpdHMuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjgzOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY4OQorbXNnaWQgIkFkZCB1bnRyYWNrZWQiCittc2dzdHIgIkFmZWdlaXggc2Vuc2Ugc2VndWltZW50IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NjYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiYWZlZ2l0ICVkIGNhbcOtXG4iCittc2dzdHJbMV0gImFmZWdpdHMgJWQgY2FtaW5zXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg5NgorIywgIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzIgorbXNnc3RyICJzJ2VzdMOgIGlnbm9yYW50IGFsbMOyIG5vIGZ1c2lvbmF0OiAlcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTA4IGFkZC1wYXRjaC5jOjEzMzEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk9ubHkgYmluYXJ5IGZpbGVzIGNoYW5nZWQuXG4iCittc2dzdHIgIk5vbcOpcyBzJ2hhbiBjYW52aWF0IGVscyBmaXR4ZXJzIGJpbmFyaXMuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxMCBhZGQtcGF0Y2guYzoxMzI5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICJTZW5zZSBjYW52aXMuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNzYKK21zZ2lkICJQYXRjaCB1cGRhdGUiCittc2dzdHIgIkFjdHVhbGl0emFjacOzIGRlbCBwZWRhw6ciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk1MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTQKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAiUmV2aXNldSBsZXMgZGlmZXLDqG5jaWVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODEKK21zZ2lkICJzaG93IHBhdGhzIHdpdGggY2hhbmdlcyIKK21zZ3N0ciAibW9zdHJhIGVscyBjYW1pbnMgYW1iIGNhbnZpcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTgzCittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4NQorbXNnaWQgInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4NworbXNnaWQgInBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseSIKK21zZ3N0ciAic2VsZWNjaW9uYSBlbHMgdHJvc3NvcyBpIGFjdHVhbGl0emEgc2VsZWN0aXZhbWVudCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg5Cittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInZpc3VhbGl0emEgbGVzIGRpZmVyw6huY2llcyBlbnRyZSBIRUFEIGkgbCfDrW5kZXgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk5MQorbXNnaWQgImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTkgYWRkLWludGVyYWN0aXZlLmM6MTA0OAorbXNnaWQgIlByb21wdCBoZWxwOiIKK21zZ3N0ciAiTW9zdHJhIGFqdWRhOiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMQorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICJzZWxlY2Npb25ldSB1biDDum5pYyDDrXRlbSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMworbXNnaWQgInNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zIgorbXNnc3RyICJzZWxlY2Npb25ldSB1biByYW5nIGQnw610ZW1zIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA1Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAic2VsZWNjaW9uZXUgcmFuZ3MgbcO6bHRpcGxlcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNyBhZGQtaW50ZXJhY3RpdmUuYzoxMDUyCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAic2VsZWNjaW9uZXUgdW4gw610ZW0gYmFzYW50LXNlIGVuIHVuIHByZWZpeCDDum5pYyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOQorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAiZGVzc2VsZWNjaW9uYSBlbHMgw610ZW1zIGVzcGVjaWZpY2F0cyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMQorbXNnaWQgImNob29zZSBhbGwgaXRlbXMiCittc2dzdHIgImVzY29sbGl1IHRvdHMgZWxzIMOtdGVtcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMworbXNnaWQgIihlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiKGJ1aXQpIGZpbmFsaXR6YSBsYSBzZWxlY2Npw7MiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTAKK21zZ2lkICJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIgorbXNnc3RyICJzZWxlY2Npb25ldSB1biDDrXRlbSBudW1lcmF0IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDU0Cittc2dpZCAiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiKGJ1aXQpIG5vIHNlbGVjY2lvbmlzIHJlcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA2MiBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBPcmRyZXMgKioqIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDYzIGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODQ4Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIkkgYXJhIHF1w6giCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJzdGFnZWQiCittc2dzdHIgInN0YWdlZCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICJ1bnN0YWdlZCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBhcHBseS5jOjQ5NjUgYXBwbHkuYzo0OTY4IGJ1aWx0aW4vYW0uYzoyMTk3CisjOiBidWlsdGluL2FtLmM6MjIwMCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzMgYnVpbHRpbi9wdWxsLmM6MjA5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICJjYW3DrSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEyMgorbXNnaWQgImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyIGwnw61uZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAiQWTDqXUuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICJDYW52aWEgZWwgbW9kZSBkZSDCq3N0YWdlwrsgW3ksbixhLHEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICJTdXByaW1laXggwqtzdGFnZcK7IFt5LG4sYSxxLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIkZlciB1biDCq3N0YWdlwrsgZCdhcXVlc3QgdHJvcyBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNhcMOnYWxlcmEgZGVsIHRyb3MgwqslLipzwrsiCisKKyM6IGFkZC1wYXRjaC5jOjEzMCBhZGQtcGF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjYXDDp2FsZXJhIGRlbCB0cm9zIGFjb2xvcmlkYSDCqyUuKnPCuyIKKworIzogYWRkLXBhdGNoLmM6MTc2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGRpZmYiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIGRpZmYiCisKKyM6IGFkZC1wYXRjaC5jOjE5NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIGRpZmYgYWNvbG9yaXQiCisKKyM6IGFkZC1wYXRjaC5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgY29udGV4dCBsaW5lICMlZCBpblxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJzJ2VzcGVyYXZhIGxhIGzDrW5pYSBhbWIgY29udGluZ3V0ICMlZCBhXG4iCisiJS4qcyIKKworCisjOiBhZGQtcGF0Y2guYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6Nzk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICIiCisiTW9kZSBkJ2VkaWNpw7MgZGUgdHJvc3NvcyBtYW51YWwgLSB2ZWdldSBtw6lzIGF2YWxsIHBlciB1bmEgZ3VpYSByw6BwaWRhLlxuIgorCisjOiBhZGQtcGF0Y2guYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyJQZXIgc3VwcmltaXIgwqslY8K7IGzDrW5pZXMsIGNvbnZlcnRpdS1sZXMgYSAnICcgKGNvbnRleHQpLlxuIgorIlBlciBzdXByaW1pciDCqyVjwrsgbMOtbmllcywgc3VwcmltaXUtbGVzLlxuIgorIkxlcyBsw61uaWVzIHF1ZSBjb21lbmNpbiBwZXIgJWMgc2VyYW4gc3VwcmltaWRlcy5cbiIKKworIzogYWRkLXBhdGNoLmM6ODEwCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLlxuIgorbXNnc3RyICIiCisiU2kgZWwgcGVkYcOnIHMnYXBsaWNhIGNvcnJlY3RhbWVudCwgZWwgdHJvcyBlZGl0YXQgZXMgbWFyY2Fyw6AgaW1tZWRpYXRhbWVudFxuIgorInBlciDCq3N0YWdpbmfCuy5cbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogYWRkLXBhdGNoLmM6ODE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTEyNgorbXNnaWQgIiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorIlNpIG5vIHMnYXBsaWNhIGNvcnJlY3RhbWVudCwgdGluZHJldSB1bmEgb3BvcnR1bml0YXQgcGVyIGVkaXRhci1sb1xuIgorImRlIG5vdS4gU2kgdG90ZXMgbGVzIGzDrW5pZXMgZGVsIHRyb3Mgc2Ugc3VwcmltZWl4ZW4sIGxsYXZvcnMgbCdlZGljacOzICIKKyJzJ2F2b3J0YVxuIgorImkgZWwgdHJvcyBlcyBkZWl4YSBzZW5zZSBjYXAgY2FudmkuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjg1MQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY2Fww6dhbGVyYSBkZWwgdHJvcyIKKworIzogYWRkLXBhdGNoLmM6ODk1IGFkZC1wYXRjaC5jOjEyOTQKK21zZ2lkICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBmYWlsZWQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyMuCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyM6IGFkZC1wYXRjaC5jOjk1MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMzkKK21zZ2lkICIiCisiWW91ciBlZGl0ZWQgaHVuayBkb2VzIG5vdCBhcHBseS4gRWRpdCBhZ2FpbiAoc2F5aW5nIFwibm9cIiBkaXNjYXJkcyEpIFt5L25dPyAiCittc2dzdHIgIiIKKyJFbCB0cm9zIGVkaXRhdCBubyBzJ2FwbGljYS4gRWRpdGV1LWxvIGRlIG5vdSAoc2kgcmVzcG9uZXUgXCJub1wiIGVzICIKKyJkZXNjYXJ0YXLDoCkgW3kvbl0/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwOQorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgYW5kIGFsbCB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCittc2dzdHIgIiIKKyJ5IC0gZmVzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zXG4iCisibiAtIG5vIGZhY2lzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zXG4iCisicSAtIHN1cnQ7IG5vIGZhY2lzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zIG8gZGUgY2FwIGFsdHJlIHJlc3RhbnRcbiIKKyJhIC0gZmVzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zIGkgZGUgdG90YSBsYSByZXN0YSBkZSB0cm9zc29zIGRlbCBmaXR4ZXJcbiIKKyJkIC0gbm8gZmFjaXMgwqtzdGFnZcK7IGQnYXF1ZXN0IHRyb3MgbyBkZSBjYXAgYWx0cmUgcmVzdGFudCBkZWwgZml0eGVyXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEwMTYKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJqIC0gZGVpeGEgYXF1ZXN0IHRyb3Mgc2Vuc2UgZGVjaWRpciwgdmV1cmUgZWwgdHJvcyBzZW5zZSBkZWNpZGlyIHNlZ8O8ZW50XG4iCisiSiAtIGRlaXhhIGFxdWVzdCB0cm9zIHNlbnNlIGRlY2lkaXIsIHZldXJlIGVsIHRyb3Mgc2Vnw7xlbnRcbiIKKyJrIC0gZGVpeGEgYXF1ZXN0IHRyb3Mgc2Vuc2UgZGVjaWRpciwgdmV1cmUgZWwgdHJvcyBzZW5zZSBkZWNpZGlyIGFudGVyaW9yXG4iCisiSyAtIGRlaXhhIGFxdWVzdCB0cm9zIHNlbnNlIGRlY2lkaXIsIHZldXJlIGVsIHRyb3MgYW50ZXJpb3JcbiIKKyJnIC0gc2VsZWNjaW9uYSBlbCB0cm9zIG9uIHZvbGV1IGFuYXJcbiIKKyIvIC0gY2VyY2EgdW4gdHJvcyBxdWUgY29pbmNpZGVpeGkgYW1iIGwnZXhwcmVzc2nDsyByZWd1bGFyIGRvbmFkYVxuIgorInMgLSBkaXZpZGVpeCBlbCB0cm9zIGFjdHVhbCBlbiB0cm9zc29zIG3DqXMgcGV0aXRzXG4iCisiZSAtIGVkaXRhIG1hbnVhbG1lbnQgZWwgdHJvcyBhY3R1YWxcbiIKKyI/IC0gbW9zdHJhIGwnYWp1ZGFcbiIKKworIzogYWRkLXBhdGNoLmM6MTEzNyBhZGQtcGF0Y2guYzoxMTQ3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAiU2Vuc2UgdHJvcyBwcmV2aSIKKworIzogYWRkLXBhdGNoLmM6MTE0MiBhZGQtcGF0Y2guYzoxMTUyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICJObyBoaSBoYSB0cm9zIHNlZ8O8ZW50IgorCisjOiBhZGQtcGF0Y2guYzoxMTU4Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290byIKK21zZ3N0ciAiTm8gaGkgaGEgYWx0cmVzIHRyb3Nzb3Mgb24gYW5hci1oaSIKKworIzogYWRkLXBhdGNoLmM6MTE2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAidsOpcyBhIHF1aW4gdHJvcyAoPHJldD4gcGVyIHZldXJlJ24gbcOpcyk/ICIKKworIzogYWRkLXBhdGNoLmM6MTE3MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzkKK21zZ2lkICJnbyB0byB3aGljaCBodW5rPyAiCittc2dzdHIgInbDqXMgYSBxdWluIHRyb3M/ICIKKworIzogYWRkLXBhdGNoLmM6MTE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAiTsO6bWVybyBubyB2w6BsaWQ6IMKrJXPCuyIKKworIzogYWRkLXBhdGNoLmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS4iCittc2dzdHJbMF0gIk5vbcOpcyAlZCB0cm9zIGRpc3BvbmlibGUuIgorbXNnc3RyWzFdICJOb23DqXMgJWQgdHJvc3NvcyBkaXNwb25pYmxlcy4iCisKKyM6IGFkZC1wYXRjaC5jOjExOTUKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2giCittc2dzdHIgIk5vIGhpIGhhIGNhcCBhbHRyZSB0cm9zIGEgY2VyY2FyIgorCisjOiBhZGQtcGF0Y2guYzoxMjAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAiQ2VyY2EgcGVyIGV4cHJlc3Npw7MgcmVndWxhcj8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAiRXhwcmVzc2nDsyByZWd1bGFyIGRlIGNlcmNhIG1hbCBmb3JtYWRhICVzOiAlcyIKKworIzogYWRkLXBhdGNoLmM6MTIzMworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAiTm8gaGkgaGEgdHJvc3NvcyBxdWUgY29pbmNpZGVpeGluIGFtYiBlbCBwYXRyw7MgZG9uYXQiCisKKyM6IGFkZC1wYXRjaC5jOjEyNDAKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiTm8gZXMgcG90IGRpdmlkaXIgYXF1ZXN0IHRyb3MiCisKKyM6IGFkZC1wYXRjaC5jOjEyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIkRpdmlkZWl4IGVuICVkIHRyb3Nzb3MuIgorCisjOiBhZGQtcGF0Y2guYzoxMjQ4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiTm8gZXMgcG90IGVkaXRhciBhcXVlc3QgdHJvcyIKKworIzogYWR2aWNlLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaGludDogJS4qcyVzXG4iCittc2dzdHIgIiVzcGlzdGE6ICUuKnMlc1xuIgorCisjOiBhZHZpY2UuYzoxNjQKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIkZlciDCq2NoZXJyeSBwaWNrwrsgbm8gw6lzIHBvc3NpYmxlIHBlcnF1w6ggdGVuaXUgZml0eGVycyBzZW5zZSBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE2NgorbXNnaWQgIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJDb21ldHJlIG5vIMOpcyBwb3NzaWJsZSBwZXJxdcOoIHRlbml1IGZpdHhlcnMgc2Vuc2UgZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxNjgKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiRnVzaW9uYXIgbm8gw6lzIHBvc3NpYmxlIHBlcnF1w6ggdGVuaXUgZml0eGVycyBzZW5zZSBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE3MAorbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJCYWl4YXIgbm8gw6lzIHBvc3NpYmxlIHBlcnF1w6ggdGVuaXUgZml0eGVycyBzZW5zZSBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE3MgorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIlJldmVydGlyIG5vIMOpcyBwb3NzaWJsZSBwZXJxdcOoIHRlbml1IGZpdHhlcnMgc2Vuc2UgZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvICVzIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJObyDDqXMgcG9zc2libGUgJXMgcGVycXXDqCB0ZW5pdSBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTgyCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIkFycmVnbGV1LWxvcyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwsIGkgZGVzcHLDqXMgdXNldVxuIgorIidnaXQgYWRkL3JtIDxmaXR4ZXI+JyBzZWdvbnMgc2lndWkgYXByb3BpYXQgcGVyIGEgbWFyY2FyIGxhXG4iCisicmVzb2x1Y2nDsyBpIGZldSB1bmEgY29taXNzacOzLiIKKworIzogYWR2aWNlLmM6MTkwCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIgorbXNnc3RyICJTJ2VzdMOgIHNvcnRpbnQgYSBjYXVzYSBkJ3VuIGNvbmZsaWN0ZSBubyByZXNvbHQuIgorCisjOiBhZHZpY2UuYzoxOTUgYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIk5vIGhldSBjb25jbMOycyBsYSB2b3N0cmEgZnVzacOzIChNRVJHRV9IRUFEIGV4aXN0ZWl4KS4iCisKKyM6IGFkdmljZS5jOjE5NworbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgIkNvbWV0ZXUgZWxzIHZvc3RyZXMgY2FudmlzIGFiYW5zIGRlIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTk4Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICJTJ2VzdMOgIHNvcnRpbnQgYSBjYXVzYSBkJ3VuYSBmdXNpw7Mgbm8gdGVybWluYWRhLiIKKworIzogYWR2aWNlLmM6MjA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgorIlxuIgorbXNnc3RyICIiCisiQXbDrXM6IHMnZXN0w6AgY2FudmlhbnQgYSDCqyVzwrsuXG4iCisiXG4iCisiRXN0ZXUgZW4gdW4gZXN0YXQgZGUgwqtIRUFEIHNlcGFyYXTCuy4gUG9kZXUgbWlyYXIgYWwgdm9sdGFudCwgZmVyIGNhbnZpc1xuIgorImV4cGVyaW1lbnRhbHMgaSBjb21ldHJlJ2xzLCBpIHBvZGV1IGRlc2NhcnRhciBxdWFsc2V2b2wgY29taXNzacOzIHF1ZSBmZXVcbiIKKyJlbiBhcXVlc3QgZXN0YXQgc2Vuc2UgY2FwIGJyYW5jYSByZWFsaXR6YW50IHVuIGFsdHJlIGFnYWZhbWVudC5cbiIKKyJcbiIKKyJTaSB2b2xldSBjcmVhciB1bmEgYnJhbmNhIG5vdmEgcGVyIGEgY29uc2VydmFyIGxlcyBjb21pc3Npb25zIHF1ZSBjcmVldSxcbiIKKyJwb2RlciBmZXItaG8gKGFyYSBvIG3DqXMgdGFyZCkgdXNhbnQgLWIgZGUgbm91IGFtYiBsJ29yZHJlIGNoZWNrb3V0LlxuIgorIkV4ZW1wbGU6XG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgPG5vbS1kZS1icmFuY2Etbm92YT5cbiIKKworIzogYWxpYXMuYzo1MAorbXNnaWQgImNtZGxpbmUgZW5kcyB3aXRoIFxcIgorbXNnc3RyICJsYSBsw61uaWEgZCdvcmRyZXMgYWNhYmEgYW1iIFxcIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib3BjacOzIGQnZXNwYWkgZW4gYmxhbmMgwqslc8K7IG5vIHJlY29uZWd1ZGEiCisKKyM6IGFwcGx5LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJvcGNpw7MgaWdub3JhIGwnZXNwYWkgZW4gYmxhbmMgwqslc8K7IG5vIHJlY29uZWd1ZGEiCisKKyM6IGFwcGx5LmM6MTM1Cittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0IGkgLS0zd2F5IG5vIGVzIHBvZGVuIHVzYXIganVudHMuIgorCisjOiBhcHBseS5jOjEzNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCBpIC0tM3dheSBubyBlcyBwb2RlbiB1c2FyIGp1bnRzLiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSBmb3JhIGQndW4gZGlww7JzaXQiCisKKyM6IGFwcGx5LmM6MTUxCittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCBmb3JhIGQndW4gZGlww7JzaXQiCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIGZvcmEgZCd1biBkaXDDsnNpdCIKKworIzogYXBwbHkuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IHByZXBhcmFyIGwnZXhwcmVzc2nDsyByZWd1bGFyIGRlIG1hcmNhIGRlIHRlbXBzICVzIgorCisjOiBhcHBseS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMgaGEgcmV0b3JuYXQgJWQgcGVyIGwnZW50cmFkYTogJXMiCisKKyM6IGFwcGx5LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdHJvYmFyIGVsIG5vbSBkZSBmaXR4ZXIgZW4gZWwgcGVkYcOnIGEgbGEgbMOtbmlhICVkIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGluY29ycmVjdGUgLSBzJ2VzcGVyYXZhIC9kZXYvbnVsbCwgcydoYSByZWJ1dCAlcyBlbiBsYSAiCisibMOtbmlhICVkIgorCisjOiBhcHBseS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgaW5jb3JyZWN0ZSAtIG5vbSBkZSBmaXR4ZXIgbm91IGluY29uc2lzdGVudCBlbiBsYSBsw61uaWEgIgorIiVkIgorCisjOiBhcHBseS5jOjkyOQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgaW5jb3JyZWN0ZSAtIG5vbSBkZSBmaXR4ZXIgYW50aWMgaW5jb25zaXN0ZW50IGVuIGxhICIKKyJsw61uaWEgJWQiCisKKyM6IGFwcGx5LmM6OTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgaW5jb3JyZWN0ZSAtIHMnZXNwZXJhdmEgL2Rldi9udWxsIGVuIGxhIGzDrW5pYSAlZCIKKworIzogYXBwbHkuYzo5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIG9uIGxpbmUgJWQ6ICVzIgorbXNnc3RyICJtb2RlIG5vIHbDoGxpZCBlbiBsYSBsw61uaWEgJWQ6ICVzIgorCisjOiBhcHBseS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgImzDrW5pZXMgZGUgY2Fww6dhbGVyYSAlZCBpICVkIGluY29uc2lzdGVudHMiCisKKyM6IGFwcGx5LmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisiYSBsYSBjYXDDp2FsZXJhIGRlIGdpdCBkaWZmIGxpIG1hbmNhIGluZm9ybWFjacOzIGRlIG5vbSBkZSBmaXR4ZXIgZW4gZWxpbWluYXIgIgorIiVkIGNvbXBvbmVudCBkZSBub20gZGUgY2Ftw60gaW5pY2lhbCAobMOtbmlhICVkKSIKK21zZ3N0clsxXSAiIgorImEgbGEgY2Fww6dhbGVyYSBkZSBnaXQgZGlmZiBsaSBtYW5jYSBpbmZvcm1hY2nDsyBkZSBub20gZGUgZml0eGVyIGVuIGVsaW1pbmFyICIKKyIlZCBjb21wb25lbnRzIGRlIG5vbSBkZSBjYW3DrSBpbmljaWFsIChsw61uaWEgJWQpIgorCisjOiBhcHBseS5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lICVkKSIKK21zZ3N0ciAiIgorImEgbGEgY2Fww6dhbGVyYSBkZSBnaXQgZGlmZiBsaSBtYW5jYSBpbmZvcm1hY2nDsyBkZSBub20gZGUgZml0eGVyIChsw61uaWEgJWQpIgorCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvbXB0ZTogbMOtbmlhIGluZXNwZXJhZGE6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJmcmFnbWVudCBkZSBwZWRhw6cgc2Vuc2UgY2Fww6dhbGVyYSBhIGxhIGzDrW5pYSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoxNzUzCittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgImVsIGZpdHhlciBub3UgZGVww6huIGRlbHMgY29udGluZ3V0cyBhbnRpY3MiCisKKyM6IGFwcGx5LmM6MTc1NQorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImVsIGZpdHhlciBzdXByaW1pdCBlbmNhcmEgdMOpIGNvbnRpbmd1dHMiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBlZGHDpyBtYWxtw6hzIGEgbGEgbMOtbmlhICVkIgorCisjOiBhcHBseS5jOjE4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgImVsIGZpdHhlciBub3UgJXMgZGVww6huIGRlbHMgY29udGluZ3V0cyBhbnRpY3MiCisKKyM6IGFwcGx5LmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJlbCBmaXR4ZXIgc3VwcmltaXQgJXMgZW5jYXJhIHTDqSBjb250aW5ndXRzIgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogYWR2ZXJ0w6huY2lhOiBlbCBmaXR4ZXIgJXMgcXVlZGEgYnVpdCBwZXLDsiBubyBzZSBzdXByaW1laXgiCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJwZWRhw6cgYmluYXJpIG1hbG3DqHMgYSBsYSBsw61uaWEgJWQ6ICUuKnMiCisKKyM6IGFwcGx5LmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBlZGHDpyBiaW5hcmkgbm8gcmVjb25lZ3V0IGEgbGEgbMOtbmlhICVkIgorCisjOiBhcHBseS5jOjIxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAicGVkYcOnIGFtYiBub23DqXMgZXNjb21icmFyaWVzIGEgbGEgbMOtbmlhICVkIgorCisjOiBhcHBseS5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgbCdlbmxsYcOnIHNpbWLDsmxpYyAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgbyBsbGVnaXIgJXMiCisKKyM6IGFwcGx5LmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgImluaWNpIGRlIGzDrW5pYSBubyB2w6BsaWQ6IMKrJWPCuyIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiRWwgdHJvcyAjJWQgaGEgdGluZ3V0IMOoeGl0IGEgJWQgKGRlc3BsYcOnYW1lbnQgZCclZCBsw61uaWEpLiIKK21zZ3N0clsxXSAiRWwgdHJvcyAjJWQgaGEgdGluZ3V0IMOoeGl0IGEgJWQgKGRlc3BsYcOnYW1lbnQgZGUgJWQgbMOtbmllcykuIgorCisjOiBhcHBseS5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiRWwgY29udGV4dCBzJ2hhIHJlZHXDr3QgYSAoJWxkLyVsZCkgcGVyIGEgYXBsaWNhciBlbCBmcmFnbWVudCBhICVkIgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorInRvdCBjZXJjYW50OlxuIgorIiUuKnMiCisKKyM6IGFwcGx5LmM6MzA5NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICJtYW5xdWVuIGxlcyBkYWRlcyBkZSBwZWRhw6cgYmluYXJpIGRlIMKrJXPCuyIKKworIzogYXBwbHkuYzozMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgYXBsaWNhciBhbCByZXbDqXMgdW4gcGVkYcOnIGJpbmFyaSBzZW5zZSBlbCB0cm9zIHJldsOpcyBhIMKrJXPCuyIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAiIgorIm5vIGVzIHBvdCBhcGxpY2FyIHVuIHBlZGHDpyBiaW5hcmkgYSDCqyVzwrsgc2Vuc2UgbGEgbMOtbmlhIGQnw61uZGV4IGNvbXBsZXRhIgorCisjOiBhcHBseS5jOjMxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICIiCisiZWwgcGVkYcOnIHMnYXBsaWNhIGEgwqslc8K7ICglcyksIGVsIHF1YWwgbm8gY29pbmNpZGVpeCBhbWIgZWxzIGNvbnRpbmd1dHMgIgorImFjdHVhbHMuIgorCisjOiBhcHBseS5jOjMxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICJlbCBwZWRhw6cgcydhcGxpY2EgYSB1biDCqyVzwrsgYnVpdCBwZXLDsiBubyDDqXMgYnVpdCIKKworIzogYXBwbHkuYzozMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGxhIHBvc3RpbWF0Z2UgJXMgbmVjZXNzw6ByaWEgcGVyIGEgwqslc8K7IgorCisjOiBhcHBseS5jOjMyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgImVsIHBlZGHDpyBiaW5hcmkgbm8gcydhcGxpY2EgYSDCqyVzwrsiCisKKyM6IGFwcGx5LmM6MzIwNworIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorImVsIHBlZGHDpyBiaW5hcmkgYSDCqyVzwrsgY3JlYSB1biByZXN1bHRhdCBpbmNvcnJlY3RlIChzJ2VzcGVyYXZhICVzLCBzJ2hhICIKKyJyZWJ1dCAlcykiCisKKyM6IGFwcGx5LmM6MzIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAiZWwgcGVkYcOnIGhhIGZhbGxhdDogJXM6JWxkIgorCisjOiBhcHBseS5jOjMzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJubyBlcyBwb3QgYWdhZmFyICVzIgorCisjOiBhcHBseS5jOjM0MDMgYXBwbHkuYzozNDE0IGFwcGx5LmM6MzQ2MCBtaWR4LmM6NjEgc2V0dXAuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyICVzIgorCisjOiBhcHBseS5jOjM0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAicydlc3TDoCBsbGVnaW50IGRlIMKrJXPCuyBtw6lzIGVubGzDoCBkJ3VuIGVubGxhw6cgc2ltYsOybGljIgorCisjOiBhcHBseS5jOjM0NDAgYXBwbHkuYzozNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICJlbCBjYW3DrSAlcyBzJ2hhIGNhbnZpYXQgZGUgbm9tIC8gcydoYSBzdXByaW1pdCIKKworIzogYXBwbHkuYzozNTI2IGFwcGx5LmM6MzY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBubyBleGlzdGVpeCBlbiBsJ8OtbmRleCIKKworIzogYXBwbHkuYzozNTM1IGFwcGx5LmM6MzcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiBubyBjb2luY2lkZWl4IGFtYiBsJ8OtbmRleCIKKworIzogYXBwbHkuYzozNTcwCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorImFsIGRpcMOyc2l0IGxpIG1hbmNhIGVsIGJsb2IgbmVjZXNzYXJpIHBlciBhIHJldHJvY2VkaXIgYSB1bmEgZnVzacOzIGRlIDMgdmllcy4iCisKKyM6IGFwcGx5LmM6MzU3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgcmV0cm9jZWRpbnQgYSB1bmEgZnVzacOzIGRlIDMgdmllcy4uLlxuIgorCisjOiBhcHBseS5jOjM1ODkgYXBwbHkuYzozNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIm5vIGVzIHBvZGVuIGxsZWdpciBlbHMgY29udGluZ3V0cyBhY3R1YWxzIGRlIMKrJXPCuyIKKworIzogYXBwbHkuYzozNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmV0cm9jZWRpciBhIHVuYSBmdXNpw7MgZGUgMyB2aWVzLi4uXG4iCisKKyM6IGFwcGx5LmM6MzYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIlMnaGEgYXBsaWNhdCBlbCBwZWRhw6cgYSDCqyVzwrsgYW1iIGNvbmZsaWN0ZXMuXG4iCisKKyM6IGFwcGx5LmM6MzYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgY2xlYW5seS5cbiIKK21zZ3N0ciAiUydoYSBhcGxpY2F0IGVsIHBlZGHDpyBhIMKrJXPCuyBuZXRhbWVudC5cbiIKKworIzogYXBwbHkuYzozNjUwCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAiZWwgcGVkYcOnIGQnZWxpbWluYWNpw7MgZGVpeGEgZWxzIGNvbnRpbmd1dHMgZGVscyBmaXR4ZXJzIgorCisjOiBhcHBseS5jOjM3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiB0aXB1cyBlcnJvbmkiCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIMOpcyBkZWwgdGlwdXMgJW8sIHMnZXNwZXJhdmEgJW8iCisKKyM6IGFwcGx5LmM6Mzg3NiBhcHBseS5jOjM4NzggcmVhZC1jYWNoZS5jOjgzMCByZWFkLWNhY2hlLmM6ODU2CisjOiByZWFkLWNhY2hlLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAiY2Ftw60gbm8gdsOgbGlkOiDCqyVzwrsiCisKKyM6IGFwcGx5LmM6MzkzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBqYSBleGlzdGVpeCBlbiBsJ8OtbmRleCIKKworIzogYXBwbHkuYzozOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IGphIGV4aXN0ZWl4IGVuIGVsIGRpcmVjdG9yaSBkZSB0cmViYWxsIgorCisjOiBhcHBseS5jOjM5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICJlbCBtb2RlIG5vdSAoJW8pIGRlICVzIG5vIGNvaW5jaWRlaXggYW1iIGVsIG1vZGUgYW50aWMgKCVvKSIKKworIzogYXBwbHkuYzozOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiZWwgbW9kZSBub3UgKCVvKSBkZSAlcyBubyBjb2luY2lkZWl4IGFtYiBlbCBtb2RlIGFudGljICglbykgZGUgJXMiCisKKyM6IGFwcGx5LmM6Mzk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiZWwgZml0eGVyIGFmZWN0YXQgwqslc8K7IMOpcyBtw6lzIGVubGzDoCBkJ3VuIGVubGxhw6cgc2ltYsOybGljIgorCisjOiBhcHBseS5jOjM5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogZWwgcGVkYcOnIG5vIHMnYXBsaWNhIgorCisjOiBhcHBseS5jOjQwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBlbCBwZWRhw6cgJXMuLi4iCisKKyM6IGFwcGx5LmM6NDA5MworIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJmYWx0YSBsYSBpbmZvcm1hY2nDsyBzaGExIG8gw6lzIGluw7p0aWwgcGVyIGFsIHN1Ym3DsmR1bCAlcyIKKworIzogYXBwbHkuYzo0MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAiY2FudmkgZGUgbW9kZSBwZXIgYSAlcywgZWwgcXVhbCBubyBlc3TDoCBlbiBsYSBIRUFEIGFjdHVhbCIKKworIzogYXBwbHkuYzo0MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzICglcykuIgorbXNnc3RyICJmYWx0YSBpbmZvcm1hY2nDsyBzaGExIG8gw6lzIGluw7p0aWwgKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhZmVnaXIgJXMgYSBsJ8OtbmRleCB0ZW1wb3JhbCIKKworIzogYXBwbHkuYzo0MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbCfDrW5kZXggdGVtcG9yYWwgYSAlcyIKKworIzogYXBwbHkuYzo0MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlbGltaW5hciAlcyBkZSBsJ8OtbmRleCIKKworIzogYXBwbHkuYzo0Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAicGVkYcOnIG1hbG3DqHMgcGVyIGFsIHN1Ym3DsmR1bCAlcyIKKworIzogYXBwbHkuYzo0MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGZlciBzdGF0IGFsIGZpdHhlciBub3ZhbWVudCBjcmVhdCDCqyVzwrsiCisKKyM6IGFwcGx5LmM6NDMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgorIm5vIHMnaGEgcG9ndXQgY3JlYXIgdW4gbWFnYXR6ZW0gZGUgcmVjb2x6YW1lbnQgcGVyIGFsIGZpdHhlciBub3ZhbWVudCBjcmVhdCAiCisiJXMiCisKKyM6IGFwcGx5LmM6NDMxNCBhcHBseS5jOjQ0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWZlZ2lyIHVuYSBlbnRyYWRhIGRlIGNhdSBwZXIgYSAlcyIKKworIzogYXBwbHkuYzo0MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGEgwqslc8K7IgorCisjOiBhcHBseS5jOjQzNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgInMnZXN0w6AgdGFuY2FudCBlbCBmaXR4ZXIgwqslc8K7IgorCisjOiBhcHBseS5jOjQ0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIGZpdHhlciDCqyVzwrsgbW9kZSAlbyIKKworIzogYXBwbHkuYzo0NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIkVsIHBlZGHDpyAlcyBzJ2hhIGFwbGljYXQgbmV0YW1lbnQuIgorCisjOiBhcHBseS5jOjQ1MzcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiZXJyb3IgaW50ZXJuIgorCisjOiBhcHBseS5jOjQ1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICJTJ2VzdMOgIGFwbGljYW50IGVsIHBlZGHDpyAlJXMgYW1iICVkIHJlYnVpZy4uLiIKK21zZ3N0clsxXSAiUydlc3TDoCBhcGxpY2FudCBlbCBwZWRhw6cgJSVzIGFtYiAlZCByZWJ1dGpvcy4uLiIKKworIzogYXBwbHkuYzo0NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAicydlc3TDoCB0cnVuY2FudCBlbCBub20gZGVsIGZpdHhlciAucmVqIGEgJS4qcy5yZWoiCisKKyM6IGFwcGx5LmM6NDU1OSBidWlsdGluL2ZldGNoLmM6OTAxIGJ1aWx0aW4vZmV0Y2guYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICJubyBlcyBwb3Qgb2JyaXIgJXMiCisKKyM6IGFwcGx5LmM6NDU3MworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJFbCB0cm9zICMlZCBzJ2hhIGFwbGljYXQgbmV0YW1lbnQuIgorCisjOiBhcHBseS5jOjQ1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICJTJ2hhIHJlYnV0amF0IGVsIHRyb3MgIyVkLiIKKworIzogYXBwbHkuYzo0Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIlMnaGEgb23DqHMgZWwgcGVkYcOnIMKrJXPCuy4iCisKKyM6IGFwcGx5LmM6NDcwNAorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiZW50cmFkYSBubyByZWNvbmVndWRhIgorCisjOiBhcHBseS5jOjQ3MjQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGVsIGZpdHhlciBkJ8OtbmRleCIKKworIzogYXBwbHkuYzo0ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIm5vIGVzIHBvdCBvYnJpciBlbCBwZWRhw6cgwqslc8K7OiAlcyIKKworIzogYXBwbHkuYzo0OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gInMnaGEgc2lsZW5jaWF0ICVkIGVycm9yIGQnZXNwYWkgZW4gYmxhbmMiCittc2dzdHJbMV0gInMnaGFuIHNpbGVuY2lhdCAlZCBlcnJvcnMgZCdlc3BhaSBlbiBibGFuYyIKKworIzogYXBwbHkuYzo0OTE0IGFwcGx5LmM6NDkyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBsw61uaWEgYWZlZ2VpeCBlcnJvcnMgZCdlc3BhaSBlbiBibGFuYy4iCittc2dzdHJbMV0gIiVkIGzDrW5pZXMgYWZlZ2VpeGVuIGVycm9ycyBkJ2VzcGFpIGVuIGJsYW5jLiIKKworIzogYXBwbHkuYzo0OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiIKKyJTJ2hhIGFwbGljYXQgJWQgbMOtbmlhIGRlc3Byw6lzIGQnYXJyZWdsYXIgZWxzIGVycm9ycyBkJ2VzcGFpIGVuIGJsYW5jLiIKK21zZ3N0clsxXSAiIgorIlMnaGFuIGFwbGljYXQgJWQgbMOtbmllcyBkZXNwcsOpcyBkJ2FycmVnbGFyIGVscyBlcnJvcnMgZCdlc3BhaSBlbiBibGFuYy4iCisKKyM6IGFwcGx5LmM6NDkzOCBidWlsdGluL2FkZC5jOjU3OSBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzozOTAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXNjcml1cmUgdW4gZml0eGVyIGQnw61uZGV4IG5vdSIKKworIzogYXBwbHkuYzo0OTY2Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAibm8gYXBsaXF1aXMgZWxzIGNhbnZpcyBxdWUgY29pbmNpZGVpeGluIGFtYiBlbCBjYW3DrSBkb25hdCIKKworIzogYXBwbHkuYzo0OTY5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiYXBsaWNhIGVscyBjYW52aXMgcXVlIGNvaW5jaWRlaXhpbiBhbWIgZWwgY2Ftw60gZG9uYXQiCisKKyM6IGFwcGx5LmM6NDk3MSBidWlsdGluL2FtLmM6MjIwNgorbXNnaWQgIm51bSIKK21zZ3N0ciAibsO6bWVybyIKKworIzogYXBwbHkuYzo0OTcyCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIiIKKyJlbGltaW5hIDxub21icmU+IGJhcnJlcyBvYmxpccO8ZXMgaW5pY2lhbHMgZGVscyBjYW1pbnMgZGUgZGlmZXLDqG5jaWEgIgorInRyYWRpY2lvbmFscyIKKworIzogYXBwbHkuYzo0OTc1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JhIGFmZWdpbWVudHMgZmV0cyBwZWwgcGVkYcOnIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIiIKKyJlbiBsbG9jIGQnYXBsaWNhciBlbCBwZWRhw6csIGVtZXQgbGVzIGVzdGFkw61zdGlxdWVzIGRlIGRpZmVyw6huY2lhIGRlIGwnZW50cmFkYSIKKworIzogYXBwbHkuYzo0OTgxCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAibW9zdHJhIGVsIG5vbWJyZSBkZSBsw61uaWVzIGFmZWdpZGVzIGkgc3VwcmltaWRlcyBlbiBub3RhY2nDsyBkZWNpbWFsIgorCisjOiBhcHBseS5jOjQ5ODMKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJlbiBsbG9jIGQnYXBsaWNhciBlbCBwZWRhw6csIGVtZXQgdW4gcmVzdW0gZGUgbCdlbnRyYWRhIgorCisjOiBhcHBseS5jOjQ5ODUKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICJlbiBsbG9jIGQnYXBsaWNhciBlbCBwZWRhw6csIHZlZ2VzIHNpIGVsIHBlZGHDpyDDqXMgYXBsaWNhYmxlIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgImFzc2VndXJhIHF1ZSBlbCBwZWRhw6cgc2lndWkgYXBsaWNhYmxlIGEgbCfDrW5kZXggYWN0dWFsIgorCisjOiBhcHBseS5jOjQ5ODkKK21zZ2lkICJtYXJrIG5ldyBmaWxlcyB3aXRoIGBnaXQgYWRkIC0taW50ZW50LXRvLWFkZGAiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTkxCittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImFwbGljYSB1biBwZWRhw6cgc2Vuc2UgdG9jYXIgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBhcHBseS5jOjQ5OTMKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICJhY2NlcHRhIHVuIHBlZGHDpyBxdWUgdG9xdWkgZm9yYSBkZSBsJ8OgcmVhIGRlIHRyZWJhbGwiCisKKyM6IGFwcGx5LmM6NDk5NgorbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICJhcGxpY2EgZWwgcGVkYcOnIHRhbWLDqSAodXNldSBhbWIgLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiaW50ZW50YSB1bmEgZnVzacOzIGRlIHRyZXMgdmllcyBzaSBlbCBwZWRhw6cgbm8gcydhcGxpY2EiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICJjb25zdHJ1ZWl4IHVuIMOtbmRleCB0ZW1wb3JhbCBiYXNhdCBlbiBsYSBpbmZvcm1hY2nDsyBkJ8OtbmRleCBpbmNydXN0YWRhIgorCisjOiBhcHBseS5jOjUwMDMgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImVscyBjYW1pbnMgc2Ugc2VwYXJlbiBhbWIgZWwgY2Fyw6BjdGVyIE5VTCIKKworIzogYXBwbHkuYzo1MDA1Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICJhc3NlZ3VyYSd0IHF1ZSBhbG1lbnlzIDxuPiBsw61uaWVzIGRlIGNvbnRleHQgY29pbmNpZGVpeGluIgorCisjOiBhcHBseS5jOjUwMDYgYnVpbHRpbi9hbS5jOjIxODUgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OAorIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDAgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxMCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImFjY2nDsyIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKyJkZXRlY3RhIGxlcyBsw61uaWVzIG5vdmVzIG8gbW9kaWZpY2FkZXMgcXVlIHRpbmd1aW4gZXJyb3JzIGQnZXNwYWkgZW4gYmxhbmMiCisKKyM6IGFwcGx5LmM6NTAxMCBhcHBseS5jOjUwMTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJpZ25vcmEgZWxzIGNhbnZpcyBkJ2VzcGFpIGVuIGJsYW5jIGVuIGNlcmNhciBjb250ZXh0IgorCisjOiBhcHBseS5jOjUwMTYKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiYXBsaWNhIGVsIHBlZGHDpyBhbCByZXbDqXMiCisKKyM6IGFwcGx5LmM6NTAxOAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICJubyBlc3BlcmlzIGFsbWVueXMgdW5hIGzDrW5pYSBkZSBjb250ZXh0IgorCisjOiBhcHBseS5jOjUwMjAKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAiZGVpeGEgZWxzIHRyb3Nzb3MgcmVidXRqYXRzIGVuIGZpdHhlcnMgKi5yZWogY29ycmVzcG9uZW50cyIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgInBlcm1ldCB0cm9zc29zIGVuY2F2YWxjYW50cyIKKworIzogYXBwbHkuYzo1MDIzIGJ1aWx0aW4vYWRkLmM6MzA5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NSBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5OCBidWlsdGluL2ZzY2suYzo3NzQKKyM6IGJ1aWx0aW4vbG9nLmM6MjE2NiBidWlsdGluL212LmM6MTIzIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAic2lndWVzIGRldGFsbGF0IgorCisjOiBhcHBseS5jOjUwMjUKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAidG9sZXJhIHVuYSBsw61uaWEgbm92YSBpbmNvcnJlY3RhbWVudCBkZXRlY3RhZGEgYWwgZmluYWwgZGVsIGZpdHhlciIKKworIzogYXBwbHkuYzo1MDI4Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJubyBjb25macOvcyBlbiBlbHMgcmVjb21wdGVzIGRlIGzDrW5pYSBlbiBsZXMgY2Fww6dhbGVyZXMgZGVscyB0cm9zc29zIgorCisjOiBhcHBseS5jOjUwMzAgYnVpbHRpbi9hbS5jOjIxOTQKK21zZ2lkICJyb290IgorbXNnc3RyICJhcnJlbCIKKworIzogYXBwbHkuYzo1MDMxCittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAiYW50ZXBvc2EgPGFycmVsPiBhIHRvdHMgZWxzIG5vbXMgZGUgZml0eGVyIgorCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPG9wY2lvbnM+XSA8YXJicmU+IFs8Y2Ftw60+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxkaXDDsnNpdD4gWy0tZXhlYyA8b3JkcmU+XSBbPG9wY2lvbnM+XSA8YXJicmU+ICIKKyJbPGNhbcOtPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxkaXDDsnNpdD4gWy0tZXhlYyA8b3JkcmU+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozNzIgYnVpbHRpbi9hZGQuYzoxODAgYnVpbHRpbi9hZGQuYzo1NTUgYnVpbHRpbi9ybS5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJsJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIMKrJXPCuyBubyBoYSBjb2luY2lkaXQgYW1iIGNhcCBmaXR4ZXIiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgIm5vIGV4aXN0ZWl4IGxhIHJlZmVyw6huY2lhOiAlLipzIgorCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAibm8gw6lzIHVuIG5vbSBkJ29iamVjdGUgdsOgbGlkOiAlcyIKKworIzogYXJjaGl2ZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB0cmVlIG9iamVjdDogJXMiCittc2dzdHIgIm5vIMOpcyB1biBvYmplY3RlIGQnYXJicmU6ICVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgIm5vIGVzIHNlZ3VlaXggZWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwgYWN0dWFsIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiZm10IgorbXNnc3RyICJmb3JtYXQiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0IGQnYXJ4aXUiCisKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9sb2cuYzoxNjUzCittc2dpZCAicHJlZml4IgorbXNnc3RyICJwcmVmaXgiCisKKyM6IGFyY2hpdmUuYzo0NTkKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICJhbnRlcG9zYSBlbCBwcmVmaXggYSBjYWRhIG5vbSBkZSBjYW3DrSBlbiBsJ2FyeGl1IgorCisjOiBhcmNoaXZlLmM6NDYwIGJ1aWx0aW4vYmxhbWUuYzo4NjEgYnVpbHRpbi9ibGFtZS5jOjg2NSBidWlsdGluL2JsYW1lLmM6ODY2CisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE3IGJ1aWx0aW4vY29uZmlnLmM6MTI5IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYyCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OCBidWlsdGluL2dyZXAuYzo4OTkKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUgYnVpbHRpbi9scy1maWxlcy5jOjU2MCBidWlsdGluL2xzLWZpbGVzLmM6NTYzCisjOiBidWlsdGluL25vdGVzLmM6NDEyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxOTAKK21zZ2lkICJmaWxlIgorbXNnc3RyICJmaXR4ZXIiCisKKyM6IGFyY2hpdmUuYzo0NjEgYnVpbHRpbi9hcmNoaXZlLmM6OTAKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgImVzY3JpdSBsJ2FyeGl1IGEgYXF1ZXN0IGZpdHhlciIKKworIzogYXJjaGl2ZS5jOjQ2MworbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImxsZWdlaXggLmdpdGF0dHJpYnV0ZXMgZW4gZWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwiCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICJpbmZvcm1hIGRlIGZpdHhlcnMgYXJ4aXZhdHMgZW4gc3RkZXJyIgorCisjOiBhcmNoaXZlLmM6NDY1Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAibm9tw6lzIGVtbWFnYXR6ZW1hIgorCisjOiBhcmNoaXZlLmM6NDY2Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJjb21wcmltZWl4IG3DqXMgcsOgcGlkYW1lbnQiCisKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImNvbXByaW1laXggbWlsbG9yIgorCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICJsbGlzdGEgZWxzIGZvcm1hdHMgZCdhcnhpdSBhZG1lc29zIgorCisjOiBhcmNoaXZlLmM6NDc5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9jbG9uZS5jOjExNgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODQKK21zZ2lkICJyZXBvIgorbXNnc3RyICJkaXDDsnNpdCIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICJyZWN1cGVyYSBsJ2FyeGl1IGRlbCBkaXDDsnNpdCByZW1vdCA8ZGlww7JzaXQ+IgorCisjOiBhcmNoaXZlLmM6NDgxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJvcmRyZSIKKworIzogYXJjaGl2ZS5jOjQ4MiBidWlsdGluL2FyY2hpdmUuYzo5NAorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAiY2Ftw60gYSBsJ29yZHJlIGdpdC11cGxvYWQtYXJjaGl2ZSByZW1vdGEiCisKKyM6IGFyY2hpdmUuYzo0ODkKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIKK21zZ3N0ciAiT3BjacOzIGluZXNwZXJhZGEgLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiTCdvcGNpw7MgLS1leGVjIG5vbcOpcyBlcyBwb3QgdXNhciBqdW50YW1lbnQgYW1iIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIk9wY2nDsyBpbmVzcGVyYWRhIC0tb3V0cHV0IgorCisjOiBhcmNoaXZlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiRm9ybWF0IGQnYXJ4aXUgZGVzY29uZWd1dCDCqyVzwrsiCisKKyM6IGFyY2hpdmUuYzo1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXJndW1lbnQgbm90IHN1cHBvcnRlZCBmb3IgZm9ybWF0ICclcyc6IC0lZCIKK21zZ3N0ciAiUGFyw6BtZXRyZSBubyBhZG3DqHMgcGVyIGFsIGZvcm1hdCDCqyVzwrs6IC0lZCIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICJubyBlcyBwb3QgdHJhbnNtZXRyZSBlbCBibG9iICVzIgorCisjOiBhcmNoaXZlLXRhci5jOjI2NiBhcmNoaXZlLXppcC5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBmaWxlIG1vZGU6IDAlbyAoU0hBMTogJXMpIgorbXNnc3RyICJtb2RlIGRlIGZpdHhlciBubyBjb21wYXRpYmxlOiAwJW8gKFNIQTE6ICVzKSIKKworIzogYXJjaGl2ZS10YXIuYzoyOTMgYXJjaGl2ZS16aXAuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgwqslc8K7IgorCisjOiBhcmNoaXZlLXRhci5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJyVzJyBmaWx0ZXIiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgaW5pY2lhciBlbCBmaWx0cmUgwqslc8K7IgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlZGlyaWdpciBlbCBkZXNjcmlwdG9yIgorCisjOiBhcmNoaXZlLXRhci5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAiwqslc8K7IGVycm9yIHJlcG9ydGF0IHBlbCBmaWx0cmUiCisKKyM6IGFyY2hpdmUtemlwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggaXMgbm90IHZhbGlkIFVURi04OiAlcyIKK21zZ3N0ciAiZWwgY2Ftw60gbm8gw6lzIHbDoGxpZCBlbiBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICJlbCBjYW3DrSDDqXMgbWFzc2EgbGxhcmcgKCVkIGNhcsOgY3RlcnMsIFNIQTE6ICVzKTogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6NDc5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiZXJyb3IgZGUgZGVmbGFjacOzICglZCkiCisKKyM6IGFyY2hpdmUtemlwLmM6NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlPFBSSXVNQVg+IgorbXNnc3RyICJtYXJjYSBkZSB0ZW1wcyBtYXNzYSBncmFuIHBlciBhIGFxdWVzdCBzaXN0ZW1hOiAlPFBSSXVNQVg+IgorCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiUuKnMgbm8gw6lzIHVuIG5vbSBkJ2F0cmlidXQgdsOgbGlkIgorCisjOiBhdHRyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG5vdCBhbGxvd2VkOiAlczolZCIKK21zZ3N0ciAiJXMgbm8gZXN0w6AgcGVybcOoczogJXM6JWQiCisKKyM6IGF0dHIuYzo0MDkKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyJFbHMgcGF0cm9ucyBuZWdhdGl1cyBzJ2lnbm9yZW4gZW4gZWxzIGF0cmlidXRzIGRlIGdpdFxuIgorIlVzZXUgJ1xcIScgcGVyIGV4Y2xhbWFjacOzIGNhcGRhdmFudGVyYSBsaXRlcmFsLiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIkNvbWVudGFyaSBhbWIgY29tZXRlcyBlcnLDsm5pZXMgZW4gZWwgZml0eGVyIMKrJXPCuzogJXMiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgIk5vIHBvZGVtIGJpc2VjYXIgbcOpcyFcbiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICJObyDDqXMgdW4gbm9tIGRlIGNvbWlzc2nDsyB2w6BsaWQgJXMiCisKKyM6IGJpc2VjdC5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiTGEgYmFzZSBkZSBmdXNpw7MgJXMgw6lzIGVycsOybmlhLlxuIgorIkFpeMOyIHZvbCBkaXIgcXVlIGVsIGRlZmVjdGUgcydoYSBhcnJlZ2xhdCBlbnRyZSAlcyBpIFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiTGEgYmFzZSBkZSBmdXNpw7MgJXMgw6lzIG5vdmEuXG4iCisiTGEgcHJvcGlldGF0IHMnaGEgY2FudmlhdCBlbnRyZSAlcyBpIFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkxhIGJhc2UgZGUgZnVzacOzICVzIMOpcyAlcy5cbiIKKyJBaXjDsiB2b2wgZGlyIHF1ZSBsYSBwcmltZXJhIGNvbWlzc2nDsyDCqyVzwrsgw6lzIGVudHJlICVzIGkgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorIkFsZ3VuZXMgcmV2aXNpb25zICVzIG5vIHPDs24gZWxzIGF2YW50cGFzc2F0cyBkZSBsYSByZXZpc2nDsyAlcy5cbiIKKyJnaXQgYmlzZWN0IG5vIHBvdCBmdW5jaW9uYXIgY29ycmVjdGFtZW50IGVuIGFxdWVzdCBjYXMuXG4iCisiUG90c2VyIGhldSBjb25mw7NzIGxlcyByZXZpc2lvbnMgJXMgaSAlcz9cbiIKKworIzogYmlzZWN0LmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCittc2dzdHIgIiIKKyJzJ2hhIGQnb21ldHJlIGxhIGJhc2UgZGUgZnVzacOzIGVudHJlICVzIGkgWyVzXS5cbiIKKyJMbGF2b3JzLCBubyBwb2RlbSBlc3RhciBzZWd1cnMgcXVlIGxhIHByaW1lcmEgY29taXNzacOzICVzIHNpZ3VpIGVudHJlICVzIGkgIgorIiVzLlxuIgorIkNvbnRpbnVlbSBkZSB0b3RlcyBtYW5lcmVzLiIKKworIzogYmlzZWN0LmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgIkJpc2VjYW50OiBzJ2hhIGRlIHByb3ZhciB1bmEgYmFzZSBkZSBmdXNpw7NcbiIKKworIzogYmlzZWN0LmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIgorbXNnc3RyICJlcyBuZWNlc3NpdGEgdW5hIHJldmlzacOzICVzIgorCisjOiBiaXNlY3QuYzo4ODQgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbCBmaXR4ZXIgwqslc8K7IgorCisjOiBiaXNlY3QuYzo5MjggYnVpbHRpbi9tZXJnZS5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciDCqyVzwrsiCisKKyM6IGJpc2VjdC5jOjk1OAorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICJsYSBsZWN0dXJhIGRlIGxlcyByZWZlcsOobmNpZXMgZGUgYmlzZWNjacOzIGhhIGZhbGxhdCIKKworIzogYmlzZWN0LmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyBlcmEgYW1iZMOzcyAlcyBpICVzXG4iCisKKyM6IGJpc2VjdC5jOjk4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgdHJvYmF0IGNhcCBjb21pc3Npw7MgY29tcHJvdmFibGUuXG4iCisiUG90c2VyIGhldSBjb21lbsOnYXQgYW1iIHBhcsOgbWV0cmVzIGRlIGNhbcOtIGluY29ycmVjdGVzP1xuIgorCisjOiBiaXNlY3QuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIihhcHJveGltYWRhbWVudCAlZCBwYXMpIgorbXNnc3RyWzFdICIoYXByb3hpbWFkYW1lbnQgJWQgcGFzc29zKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjLgorIzogYmlzZWN0LmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dpZF9wbHVyYWwgIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dzdHJbMF0gIkJpc2VjYW50OiBtYW5jYSAlZCByZXZpc2nDsyBhIHByb3ZhciBkZXNwcsOpcyBkJ2FxdWVzdGEgJXNcbiIKK21zZ3N0clsxXSAiQmlzZWNhbnQ6IG1hbnF1ZW4gJWQgcmV2aXNpb25zIGEgcHJvdmFyIGRlc3Byw6lzIGQnYXF1ZXN0YSAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIGkgLS1yZXZlcnNlIG5vIGZ1bmNpb25lbiBiw6kganVudGVzLiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICJubyBlcyBwb3QgdXNhciAtLWNvbnRlbnRzIGFtYiBlbCBub20gZCdvYmplY3RlIGRlIGxhIGNvbWlzc2nDsyBmaW5hbCIKKworIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICIiCisiLS1yZXZlcnNlIGkgLS1maXJzdC1wYXJlbnQtdG9nZXRoZXIgcmVxdWVyZWl4ZW4gdW5hIMO6bHRpbWEgY29taXNzacOzICIKKyJlc3BlY2lmaWNhZGEiCisKKyM6IGJsYW1lLmM6Mjc0NCBidW5kbGUuYzoxNjcgcmVmLWZpbHRlci5jOjIyMDMgcmVtb3RlLmM6MTk0MSBzZXF1ZW5jZXIuYzoyMDkzCisjOiBzZXF1ZW5jZXIuYzo0NDYwIGJ1aWx0aW4vY29tbWl0LmM6MTA0MCBidWlsdGluL2xvZy5jOjM4OCBidWlsdGluL2xvZy5jOjk5MQorIzogYnVpbHRpbi9sb2cuYzoxNTIwIGJ1aWx0aW4vbG9nLmM6MTkyNSBidWlsdGluL2xvZy5jOjIyMTUgYnVpbHRpbi9tZXJnZS5jOjQxMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE5MgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICJsYSBjb25maWd1cmFjacOzIGRlbCBwYXNzZWlnIHBlciByZXZpc2lvbnMgaGEgZmFsbGF0IgorCisjOiBibGFtZS5jOjI3NjIKK21zZ2lkICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgorbXNnc3RyICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IGp1bnRzIHJlcXVlcmVpeGVuIHVuIHJhbmcgZGUgbGEgY2FkZW5hIGRlIG1hcmVzICIKKyJwcmltZXJlcyIKKworIzogYmxhbWUuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAibm8gaGkgaGEgdGFsIGNhbcOtICVzIGVuICVzIgorCisjOiBibGFtZS5jOjI3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBlbCBibG9iICVzIHBlciBhbCBjYW3DrSAlcyIKKworIzogYnJhbmNoLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCittc2dzdHIgIiIKKyJcbiIKKyJEZXNwcsOpcyBkZSBjb3JyZWdpciBsYSBjYXVzYSBkZSBsJ2Vycm9yLCBwb2RldVxuIgorImludGVudGFyIGNvcnJlZ2lyIGxhIGluZm9ybWFjacOzIGRlIHNlZ3VpbWVudCByZW1vdFxuIgorImludm9jYW50IFwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCisKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiTm8gcydlc3TDoCBlc3RhYmxpbnQgbGEgYnJhbmNhICVzIGNvbSBhIGxhIHNldmEgcHLDsnBpYSBmb250LiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIMKrJXPCuyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgYnJhbmNhIHJlbW90YSDCqyVzwrsgZGUgwqslc8K7ICIKKyJmZW50IMKrcmViYXNlwrsuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJy4iCittc2dzdHIgIiIKKyJMYSBicmFuY2Egwqslc8K7IGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSBicmFuY2EgcmVtb3RhIMKrJXPCuyBkZSDCqyVzwrsuIgorCisjOiBicmFuY2guYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIMKrJXPCuyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgYnJhbmNhIGxvY2FsIMKrJXPCuyBmZW50ICIKKyLCq3JlYmFzZcK7LiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiTGEgYnJhbmNhIMKrJXPCuyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgYnJhbmNhIGxvY2FsIMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSDCqyVzwrsgZXN0w6AgY29uZmlndXJhZGEgcGVyIGEgc2VndWlyIGxhIHJlZmVyw6huY2lhIHJlbW90YSDCqyVzwrsgZmVudCAiCisiwqtyZWJhc2XCuy4iCisKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSDCqyVzwrsgZXN0w6AgY29uZmlndXJhZGEgcGVyIGEgc2VndWlyIGxhIHJlZmVyw6huY2lhIHJlbW90YSDCqyVzwrsuIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSDCqyVzwrsgZXN0w6AgY29uZmlndXJhZGEgcGVyIGEgc2VndWlyIGxhIHJlZmVyw6huY2lhIGxvY2FsIMKrJXPCuyBmZW50ICIKKyLCq3JlYmFzZcK7LiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIkxhIGJyYW5jYSDCqyVzwrsgZXN0w6AgY29uZmlndXJhZGEgcGVyIGEgc2VndWlyIGxhIHJlZmVyw6huY2lhIGxvY2FsIMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiTm8gZXMgcG90IGVzY3JpdXJlIGxhIGNvbmZpZ3VyYWNpw7MgZGUgbGEgYnJhbmNhIGZvbnQiCisKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICJObyBzZWd1aW50OiBpbmZvcm1hY2nDsyBhbWJpZ3VhIHBlciBhIGxhIHJlZmVyw6huY2lhICVzIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW4gbm9tIGRlIGJyYW5jYSB2w6BsaWQuIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIlVuYSBicmFuY2EgYW1iIG5vbSDCqyVzwrsgamEgZXhpc3RlaXguIgorCisjOiBicmFuY2guYzoyMTMKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5vIGVzIHBvdCBhY3R1YWxpdHphciBsYSBicmFuY2EgYWN0dWFsIGEgbGEgZm9yw6dhLiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisiTm8gZXMgcG90IGNvbmZpZ3VyYXIgbGEgaW5mb3JtYWNpw7MgZGUgc2VndWltZW50OyBlbCBwdW50IGluaWNpYWwgwqslc8K7IG5vIMOpcyAiCisidW5hIGJyYW5jYS4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsYSBicmFuY2EgZm9udCBkZW1hbmFkYSDCqyVzwrsgbm8gZXhpc3RlaXgiCisKKyM6IGJyYW5jaC5jOjIzNworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIlNpIHRlbml1IHBlbnNhdCBiYXNhciBlbCB2b3N0cmUgdHJlYmFsbCBlbiB1bmEgYnJhbmNhXG4iCisiZm9udCBxdWUgamEgZXhpc3RlaXggYWwgcmVtb3QsIHBvdCBzZXIgcXVlIG5lY2Vzc2l0ZXVcbiIKKyJleGVjdXRhciDCq2dpdCBmZXRjaMK7IHBlciBhIG9idGVuaXItbGEuXG4iCisiXG4iCisiU2kgdGVuaXUgcGVuc2F0IHB1amFyIHVuYSBicmFuY2EgbG9jYWwgbm92YSBxdWUgc2VndWlyw6BcbiIKKyJsYSBzZXZhIGNvbnRyYXBhcnQgcmVtb3RhLCBwb3Qgc2VyIHF1ZSB2dWxndWV1IHVzYXJcbiIKKyLCq2dpdCBwdXNoIC11wrsgcGVyIGEgZXN0YWJsaXIgbGEgY29uZmlndXJhY2nDsyBmb250XG4iCisibWVudHJlIHB1Z2V1LiIKKworIzogYnJhbmNoLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm8gw6lzIHVuIG5vbSBkJ29iamVjdGUgdsOgbGlkOiDCqyVzwrsuIgorCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm9tIGQnb2JqZWN0ZSBhbWJpZ3U6IMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICJObyDDqXMgdW4gcHVudCBkZSByYW1pZmljYWNpw7MgdsOgbGlkOiDCqyVzwrsuIgorCisjOiBicmFuY2guYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIsKrJXPCuyBqYSBzJ2hhIGFnYWZhdCBhIMKrJXPCuyIKKworIzogYnJhbmNoLmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIgorbXNnc3RyICJIRUFEIGRlIGwnYXJicmUgZGUgdHJlYmFsbCAlcyBubyBlc3TDoCBhY3R1YWxpdHphdCIKKworIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiwqslc8K7IG5vIHNlbWJsYSB1biBmaXR4ZXIgZGUgZmFyY2VsbCB2MiIKKworIzogYnVuZGxlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICJjYXDDp2FsZXJhIG5vIHJlY29uZWd1ZGE6ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMzQ0IHNlcXVlbmNlci5jOjMxMDgKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgwqslc8K7IgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiQWwgZGlww7JzaXQgbGkgbWFucXVlbiBhcXVlc3RlcyBjb21pc3Npb25zIHByZXJlcXVlcmlkZXM6IgorCisjOiBidW5kbGUuYzoxNDYKK21zZ2lkICJuZWVkIGEgcmVwb3NpdG9yeSB0byB2ZXJpZnkgYSBidW5kbGUiCittc2dzdHIgImNhbCB1biBkaXDDsnNpdCBwZXIgdmVyaWZpY2FyIHVuIGZhcmNlbGwiCisKKyM6IGJ1bmRsZS5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiRWwgZmFyY2VsbCBjb250w6kgYXF1ZXN0YSByZWZlcsOobmNpYToiCittc2dzdHJbMV0gIkVsIGZhcmNlbGwgY29udMOpIGFxdWVzdGVzICVkIHJlZmVyw6huY2llczoiCisKKyM6IGJ1bmRsZS5jOjIwNAorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJFbCBmYXJjZWxsIHJlZ2lzdHJhIHVuYSBoaXN0w7JyaWEgY29tcGxldGEuIgorCisjOiBidW5kbGUuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkVsIGZhcmNlbGwgcmVxdWVyZWl4IGFxdWVzdGEgcmVmZXLDqG5jaWE6IgorbXNnc3RyWzFdICJFbCBmYXJjZWxsIHJlcXVlcmVpeCBhcXVlc3RlcyAlZCByZWZlcsOobmNpZXM6IgorCisjOiBidW5kbGUuYzoyNzMKK21zZ2lkICJ1bmFibGUgdG8gZHVwIGJ1bmRsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGR1cGxpY2FyIGVsIGRlc2NyaXB0b3IgZGVsIGZhcmNlbGwiCisKKyM6IGJ1bmRsZS5jOjI4MAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgZWwgcGFjay1vYmplY3RzIgorCisjOiBidW5kbGUuYzoyOTEKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAiRWwgcGFjay1vYmplY3RzIHMnaGEgbW9ydCIKKworIzogYnVuZGxlLmM6MzMzCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAiRWwgcmV2LWxpc3QgcydoYSBtb3J0IgorCisjOiBidW5kbGUuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgImxlcyBvcGNpb25zIGRlIGxhIGxsaXN0YSBkZSByZXZpc2lvbnMgZXhjbG91ZW4gbGEgcmVmZXLDqG5jaWEgwqslc8K7IgorCisjOiBidW5kbGUuYzo0NjEgYnVpbHRpbi9sb2cuYzoyMDMgYnVpbHRpbi9sb2cuYzoxODE0IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSBubyByZWNvbmVndXQ6ICVzIgorCisjOiBidW5kbGUuYzo0NjkKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiUydlc3TDoCByZWZ1c2FudCBjcmVhciB1biBmYXJjZWxsIGJ1aXQuIgorCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgY3JlYXIgwqslc8K7IgorCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgIkwnaW5kZXgtcGFjayBzJ2hhIG1vcnQiCisKKyM6IGNvbG9yLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgInZhbG9yIGRlIGNvbG9yIG5vIHbDoGxpZDogJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjgxMSBidWlsdGluL2FtLmM6MzU0IGJ1aWx0aW4vYW0uYzozOTgKKyM6IGJ1aWx0aW4vYW0uYzoxMzY2IGJ1aWx0aW4vYW0uYzoyMDA5IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyICVzIgorCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyBubyDDqXMgdW5hIGNvbWlzc2nDsyEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorCisjOiBjb21taXQuYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkxhIGNvbWlzc2nDsyAlcyB0w6kgdW5hIHNpZ25hdHVyYSBHUEcgbm8gZmlhYmxlLCBzdXBvc2FkYW1lbnQgZGUgJXMuIgorCisjOiBjb21taXQuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICJMYSBjb21pc3Npw7MgJXMgdMOpIHVuYSBzaWduYXR1cmEgR1BHIGluY29ycmVjdGEgc3Vwb3NhZGFtZW50IGRlICVzLiIKKworIzogY29tbWl0LmM6MTE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICJMYSBjb21pc3Npw7MgJXMgbm8gdMOpIHNpZ25hdHVyYSBHUEcuIgorCisjOiBjb21taXQuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiTGEgY29taXNzacOzICVzIHTDqSB1bmEgc2lnbmF0dXJhIEdQRyBib25hIGRlICVzXG4iCisKKyM6IGNvbW1pdC5jOjE0MTUKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgIiIKKyJBZHZlcnTDqG5jaWE6IGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyBubyDDqXMgY29tcGF0aWJsZSBhbWIgVVRGLTguXG4iCisiUG90c2VyIHZvbGV1IGVzbWVuYXItbG8gZGVzcHLDqXMgZGUgY29ycmVnaXIgZWwgbWlzc2F0Z2UsIG8gZXN0YWJsaXJcbiIKKyJsYSB2YXJpYWJsZSBkZSBjb25maWd1cmFjacOzIGkxOG4uY29tbWl0ZW5jb2RpbmcgYSBsYSBjb2RpZmljYWNpw7MgcXVlXG4iCisidXNpIGVsIHZvc3RyZSBwcm9qZWN0ZS5cbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTMwCittc2dpZCAiY29tbWl0LWdyYXBoIGZpbGUgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIKK21zZ3N0ciAiIgorImxhIHNpZ25hdHVyYSBkZWwgZ3JhZiBkZSBjb21pc3Npb25zICVYIG5vIGNvaW5jaWRlaXggYW1iIGxhIHNpZ25hdHVyYSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgImxhIHZlcnNpw7MgZGVsIGdyYWYgZGUgY29taXNzaW9ucyAlWCBubyBjb2luY2lkZWl4IGFtYiBsYSB2ZXJzacOzICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICIiCisibGEgdmVyc2nDsyBkZWwgaGFzaCBkZWwgZ3JhZiBkZSBjb21pc3Npb25zICVYIG5vIGNvaW5jaWRlaXggYW1iIGxhIHZlcnNpw7MgJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzMgorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBsb29rdXAgdGFibGUgZW50cnkgbWlzc2luZzsgZmlsZSBtYXkgYmUgaW5jb21wbGV0ZSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzozNTAKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM2MAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAibGEgY2FkZW5hIGRlbCBncmFmIGRlIGNvbWlzc2lvbnMgbm8gY29pbmNpZGVpeCIKKworIzogY29tbWl0LWdyYXBoLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo0MzMKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICJubyBlcyBwb2RlbiB0cm9iYXIgdG90cyBlbHMgZml0eGVycyBkZWwgZ3JhZiBkZSBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzo1NjQgY29tbWl0LWdyYXBoLmM6NjI0Cittc2dpZCAiaW52YWxpZCBjb21taXQgcG9zaXRpb24uIGNvbW1pdC1ncmFwaCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiIgorInBvc2ljacOzIGRlIGxhIGNvbWlzc2nDsyBubyB2w6BsaWRhLiBQcm9iYWJsZW1lbnQgZWwgZ3JhZiBkZSBjb21pc3Npb25zIGVzdMOgICIKKyJtYWxtw6hzIgorCisjOiBjb21taXQtZ3JhcGguYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSBjb21pc3Npw7MgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg1OCBidWlsdGluL2FtLmM6MTI4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7MgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwMTcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgdHlwZSBvZiBvYmplY3QgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCB0aXB1cyBkZSBsJ29iamVjdGU6ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDQ5Cittc2dpZCAiTG9hZGluZyBrbm93biBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiUydlc3RhbiBjYXJyZWdhbnQgY29taXNzaW9ucyBjb25lZ3VkZXMgYWwgZ3JhZiBkZSBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDY2Cittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiUydlc3RhbiBleHBhbmRpbnQgbGVzIGNvbWlzc2lvbnMgYWJhc3RhYmxlcyBhbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwODUKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJTJ2VzdGFuIG5ldGVqYW50IGxlcyBtYXJxdWVzIGRlIGNvbWlzc2lvbnMgYWwgZ3JhZiBkZSBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTA0Cittc2dpZCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiCittc2dzdHIgIlMnZXN0YW4gY2FsY3VsYW50IGVscyBub21icmVzIGRlIGdlbmVyYWNpw7MgZGVsIGdyYWYgZGUgY29taXNzaW9ucyIKKworIzogY29tbWl0LWdyYXBoLmM6MTE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrcyIKK21zZ3N0clswXSAiUydlc3RhbiBjZXJjYW50IGxlcyBjb21pc3Npb25zIHBlbCBncmFmIGRlIGNvbWlzc2lvbnMgZW4gJWQgcGFxdWV0IgorbXNnc3RyWzFdICJTJ2VzdGFuIGNlcmNhbnQgbGVzIGNvbWlzc2lvbnMgcGVsIGdyYWYgZGUgY29taXNzaW9ucyBlbiAlZCBwYXF1ZXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGFkZGluZyBwYWNrICVzIgorbXNnc3RyICJlcnJvciBlbiBhZmVnaXIgcGFxdWV0ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9icmlyIGwnw61uZGV4IHBlciDCqyVzwrsiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiIgorIlMnZXN0YW4gY2VyY2FudCBsZXMgY29taXNzaW9ucyBwZWwgZ3JhZiBkZSBjb21pc3Npb25zIGRlcyBkZSAlZCByZWZlcsOobmNpYSIKK21zZ3N0clsxXSAiIgorIlMnZXN0YW4gY2VyY2FudCBsZXMgY29taXNzaW9ucyBwZWwgZ3JhZiBkZSBjb21pc3Npb25zIGRlcyBkZSAlZCByZWZlcsOobmNpZXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAiaWRlbnRpZmljYWRvciBkJ29iamVjdGUgZGUgY29taXNzacOzIG5vIHbDoGxpZDogJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNTUKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorIlMnZXN0YW4gY2VyY2FudCBsZXMgY29taXNzaW9ucyBwZWwgZ3JhZiBkZSBjb21pc3Npb25zIGVudHJlIGVscyBvYmplY3RlcyAiCisiZW1wYXF1ZXRhdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNzAKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiUydlc3RhbiBjb21wdGFudCBsZXMgY29taXNzaW9ucyBkaWZlcmVudHMgYWwgZ3JhZiBkZSBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAwCittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlMnZXN0YW4gY2VyY2FudCBsZXMgdm9yZXMgYWRkaWNpb25hbHMgYWwgZ3JhZiBkZSBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzQ2Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvcnJlY3QgbnVtYmVyIG9mIGJhc2UgZ3JhcGggaWRzIgorbXNnc3RyICIiCisicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBlbCBub21icmUgY29ycmVjdGUgZCdpZHMgYmFzZSBkZWwgZ3JhZiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM3OSBtaWR4LmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIKK21zZ3N0ciAibm8gcydoYW4gcG9ndXQgY3JlYXIgZWxzIGRpcmVjdG9yaXMgaW5pY2lhbHMgZGUgwqslc8K7IgorCisjOiBjb21taXQtZ3JhcGguYzoxMzkxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgwqslc8K7IgorCisjOiBjb21taXQtZ3JhcGguYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzIgorbXNnaWRfcGx1cmFsICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIgorbXNnc3RyWzBdICJTJ2VzdMOgIGVzY3JpdmludCBlbCBncmFmIGRlIGNvbWlzc2lvbnMgZW4gJWQgcGFzIgorbXNnc3RyWzFdICJTJ2VzdMOgIGVzY3JpdmludCBlbCBncmFmIGRlIGNvbWlzc2lvbnMgZW4gJWQgcGFzc29zIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDkyCittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZml0eGVyIGQnZW5jYWRlbmFtZW50IGRlbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MDQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY2FudmlhciBlbCBub20gZGVsIGZpdHhlciBiYXNlIGRlbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MjQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiIgorIm5vIHMnaGEgcG9ndXQgY2FudmlhciBlbCBub20gZGVsIGZpdHhlciB0ZW1wb3JhbCBkZWwgZ3JhZiBkZSBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjM1Cittc2dpZCAiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiCittc2dzdHIgIlMnZXN0YW4gZXNjYW5lamFudCBsZXMgY29taXNzaW9ucyBmdXNpb25hZGVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZHVwbGljYXRlIGNvbW1pdCBpZCAlcyIKK21zZ3N0ciAiaWQgZGUgY29taXNzacOzIGR1cGxpY2F0ICVzIG5vIGVzcGVyYXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NzAKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiUydlc3TDoCBmdXNpb25hbnQgZWwgZ3JhZiBkZSBjb21pc3Npb25zIgorCisjOiBjb21taXQtZ3JhcGguYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICJlbCBmb3JtYXQgZGVsIGdyYWYgZGUgY29taXNzaW9ucyBubyBwb3QgZXNjcml1cmUgJWQgY29taXNzaW9ucyIKKworIzogY29tbWl0LWdyYXBoLmM6MTg3MQorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgIm1hc3NhIGNvbWlzc2lvbnMgcGVyIGVzY3JpdXJlIHVuIGdyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NjEKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKyJlbCBmaXR4ZXIgY29tbWl0LWdyYXBoIChncmFmIGRlIGNvbWlzc2lvbnMpIHTDqSB1bmEgc3VtYSBkZSB2ZXJpZmljYWNpw7MgIgorImluY29ycmVjdGEgaSBwcm9iYWJsZW1lbnQgw6lzIGNvcnJ1cHRlIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTgxIGNvbW1pdC1ncmFwaC5jOjE5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhbmFsaXR6YXIgbGEgY29taXNzacOzICVzIGRlbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMDYKK21zZ2lkICJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlMnZXN0YW4gdmVyaWZpY2FudCBsZXMgY29taXNzaW9ucyBhbCBncmFmIGRlIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbcOycmlhIGVzZ290YWRhIgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBleHBhbmRpciBlbCBjYW3DrSBkJ2luY2x1c2nDsyDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjE1MQorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAibGVzIGluY2x1c2lvbnMgZGUgY29uZmlndXJhY2nDsyByZWxhdGl2ZXMgaGFuIGRlIHZlbmlyIGRlIGZpdHhlcnMiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiIgorImVscyBjb25kaWNpb25hbHMgZCdpbmNsdXNpw7MgZGUgY29uZmlndXJhY2nDsyByZWxhdGl1cyBoYW4gZGUgdmVuaXIgZGUgZml0eGVycyIKKworIzogY29uZmlnLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIGEgc2VjdGlvbjogJXMiCittc2dzdHIgImxhIGNsYXUgbm8gY29udMOpIHVuYSBzZWNjacOzOiDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAibGEgY2xhdSBubyBjb250w6kgdW4gbm9tIGRlIHZhcmlhYmxlOiDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAiY2xhdSBubyB2w6BsaWRhOiAlcyIKKworIzogY29uZmlnLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiCittc2dzdHIgImNsYXUgbm8gdsOgbGlkYSAobMOtbmVhIG5vdmEpOiAlcyIKKworIzogY29uZmlnLmM6NDQ4IGNvbmZpZy5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSBkZSBjb25maWd1cmFjacOzIGVycm9uaTogJXMiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgImZvcm1hdCBlcnJvbmkgYSAlcyIKKworIzogY29uZmlnLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBibG9iICVzIgorbXNnc3RyICJsw61uaWEgZGUgY29uZmlndXJhY2nDsyAlZCBlcnLDsm5pYSBlbiBlbCBibG9iICVzIgorCisjOiBjb25maWcuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgImzDrW5pYSBkZSBjb25maWd1cmFjacOzICVkIGVycsOybmlhIGVuIGVsIGZpdHhlciAlcyIKKworIzogY29uZmlnLmM6ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibMOtbmlhIGRlIGNvbmZpZ3VyYWNpw7MgJWQgZXJyw7JuaWEgZW4gbCdlbnRyYWRhIGVzdMOgbmRhcmQiCisKKyM6IGNvbmZpZy5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3VibW9kdWxlLWJsb2IgJXMiCittc2dzdHIgImzDrW5pYSBkZSBjb25maWd1cmFjacOzICVkIGVycsOybmlhIGVuIGVsIGJsb2IgZGUgc3VibcOyZHVsICVzIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAibMOtbmlhIGRlIGNvbmZpZ3VyYWNpw7MgJWQgZXJyw7JuaWEgZW4gbGEgbMOtbmlhIGQnb3JkcmVzICVzIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICJsw61uaWEgZGUgY29uZmlndXJhY2nDsyAlZCBlcnLDsm5pYSBlbiAlcyIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICJmb3JhIGRlIHJhbmciCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAidW5pdGF0IG5vIHbDoGxpZGEiCisKKyM6IGNvbmZpZy5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgInZhbG9yIGRlIGNvbmZpZ3VyYWNpw7MgbnVtw6hyaWMgZXJyb25pIMKrJXPCuyBwZXIgwqslc8K7OiAlcyIKKworIzogY29uZmlnLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICJ2YWxvciBkZSBjb25maWd1cmFjacOzIG51bcOocmljIGVycm9uaSDCqyVzwrsgcGVyIMKrJXPCuyBlbiBlbCBibG9iICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgZGUgY29uZmlndXJhY2nDsyBudW3DqHJpYyDCqyVzwrsgZXJyb25pIHBlciDCqyVzwrsgZW4gZWwgZml0eGVyICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIiIKKyJ2YWxvciBkZSBjb25maWd1cmFjacOzIG51bcOocmljIMKrJXPCuyBlcnJvbmkgcGVyIMKrJXPCuyBlbiBsJ2VudHJhZGEgZXN0w6BuZGFyZDogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICIiCisidmFsb3IgZGUgY29uZmlndXJhY2nDsyBudW3DqHJpYyDCqyVzwrsgZXJyb25pJyBwZXIgwqslc8K7IGVuIGVsIGJsb2IgZGUgc3VibcOyZHVsICIKKyIlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIKK21zZ3N0ciAiIgorInZhbG9yIGRlIGNvbmZpZ3VyYWNpw7MgbnVtw6hyaWMgwqslc8K7IGVycm9uaSBwZXIgwqslc8K7IGVuIGxhIGzDrW5pYSBkJ29yZHJlcyAlczogIgorIiVzIgorCisjOiBjb25maWcuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgZGUgY29uZmlndXJhY2nDsyBudW3DqHJpYyBpbmNvcnJlY3RlIMKrJXPCuyBwZXIgwqslc8K7IGVuICVzOiAlcyIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGV4cGFuZGlyIGVsIGRpcmVjdG9yaSBkJ3VzdWFyaSBlbjogwqslc8K7IgorCisjOiBjb25maWcuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLCqyVzwrsgcGVyIGEgwqslc8K7IG5vIMOpcyB1bmEgbWFyY2EgZGUgdGVtcHMgdsOgbGlkYSIKKworIzogY29uZmlnLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTIyMiBjb25maWcuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICJuaXZlbGwgZGUgY29tcHJlc3Npw7MgZGUgemxpYiBpbmNvcnJlY3RlICVkIgorCisjOiBjb25maWcuYzoxMzI1Cittc2dpZCAiY29yZS5jb21tZW50Q2hhciBzaG91bGQgb25seSBiZSBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICJtb2RlIGRlIGNyZWFjacOzIGQnb2JqZWN0ZSBubyB2w6BsaWQ6ICVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgInZhbG9yIG5vIHbDoGxpZCBwZXIgYSAlcyIKKworIzogY29uZmlnLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAidmFsb3Igbm8gdsOgbGlkIHBlciBhICVzOiAlcyIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm5pdmVsbCBkZSBjb21wcmVzc2nDsyBkZSBwYXF1ZXQgJWQgRXJyb25pIgorCisjOiBjb25maWcuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIGNvbmZpZyBibG9iIG9iamVjdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIGwnb2JqZWN0ZSBibG9iIGRlIGNvbmZpZ3VyYWNpw7Mgwqslc8K7IgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAibGEgcmVmZXLDqG5jaWEgwqslc8K7IG5vIGFzc2VueWFsYSBhIHVuIGJsb2IiCisKKyM6IGNvbmZpZy5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgY29uZmlnIGJsb2IgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCByZXNvbGRyZSBlbCBibG9iIGRlIGNvbmZpZ3VyYWNpw7M6IMKrJXPCuyIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYW5hbGl0emFyICVzIgorCisjOiBjb25maWcuYzoxNzQ1Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNvbmZpZ3VyYWNpw7MgZGUgbGEgbMOtbmlhIGQnb3JkcmVzIgorCisjOiBjb25maWcuYzoyMDk2Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICJ1biBlcnJvciBkZXNjb25lZ3V0IGhhIG9jb3JyZWd1dCBlbiBsbGVnaXIgZWxzIGZpdHhlcnMgZGUgY29uZmlndXJhY2nDsyIKKworIzogY29uZmlnLmM6MjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIlcyBubyB2w6BsaWQ6IMKrJXPCuyIKKworIzogY29uZmlnLmM6MjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgInZhbG9yIMKrJWTCuyBhIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSBoYSBkJ2VzdGFyIGVudHJlIDAgaSAxMDAiCisKKyM6IGNvbmZpZy5jOjIzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciDCqyVzwrsgZGUgbGEgY29uZmlndXJhY2nDsyBkZSBsYSBsw61uaWEgZCdvcmRyZXMiCisKKyM6IGNvbmZpZy5jOjIzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICJ2YXJpYWJsZSBkZSBjb25maWd1cmFjacOzIMKrJXPCuyBlcnLDsm5pYSBlbiBlbCBmaXR4ZXIgwqslc8K7IGEgbGEgbMOtbmlhICVkIgorCisjOiBjb25maWcuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lICclcyciCittc2dzdHIgIm5vbSBkZSBzZWNjacOzIG5vIHbDoGxpZCDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjI0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgdMOpIG3Dumx0aXBsZXMgdmFsb3JzIgorCisjOiBjb25maWcuYzoyNTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJubyBlcyBwb3QgZXNjcml1cmUgdW4gbm91IGZpdHhlciBkZSBjb25maWd1cmFjacOzICVzIgorCisjOiBjb25maWcuYzoyNzUzIGNvbmZpZy5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYmxvY2FyIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzICVzIgorCisjOiBjb25maWcuYzoyNzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgJXMiCittc2dzdHIgInMnZXN0w6Agb2JyaW50ICVzIgorCisjOiBjb25maWcuYzoyNzk5IGJ1aWx0aW4vY29uZmlnLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0dGVybjogJXMiCittc2dzdHIgInBhdHLDsyBubyB2w6BsaWQ6ICVzIgorCisjOiBjb25maWcuYzoyODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImZpdHhlciBkZSBjb25maWd1cmFjacOzIG5vIHbDoGxpZCAlcyIKKworIzogY29uZmlnLmM6MjgzNyBjb25maWcuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiaGEgZmFsbGF0IMKrZnN0YXTCuyBhICVzIgorCisjOiBjb25maWcuYzoyODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIMKrbW1hcMK7IMKrJXPCuyIKKworIzogY29uZmlnLmM6Mjg1NyBjb25maWcuYzozMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiaGEgZmFsbGF0IGNobW9kIGEgJXMiCisKKyM6IGNvbmZpZy5jOjI5NDIgY29uZmlnLmM6MzE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7Mgwqslc8K7IgorCisjOiBjb25maWcuYzoyOTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzdGFibGlyIMKrJXPCuyBhIMKrJXPCuyIKKworIzogY29uZmlnLmM6Mjk3OCBidWlsdGluL3JlbW90ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBkZXNhc3NpZ25hciDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjMwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICJub20gZGUgc2VjY2nDsyBubyB2w6BsaWRhOiAlcyIKKworIzogY29uZmlnLmM6MzIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICJmYWx0YSBlbCB2YWxvciBwZXIgwqslc8K7IgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICJlbCBjb3N0YXQgcmVtb3QgaGEgcGVuamF0IGVuIGVsIG1vbWVudCBkZSBjb250YWN0ZSBpbmljaWFsIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGRlbCBkaXDDsnNpdCByZW1vdC5cbiIKKyJcbiIKKyJBc3NlZ3VyZXUtdm9zIHF1ZSB0aW5ndWV1IGVscyBwZXJtaXNvc1xuIgorImQnYWNjw6lzIGNvcnJlY3RlcyBpIHF1ZSBlbCBkaXDDsnNpdCBleGlzdGVpeGkuIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICJlbCBzZXJ2aWRvciBubyDDqXMgY29tcGF0aWJsZSBhbWIgwqslc8K7IgorCisjOiBjb25uZWN0LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgZmVhdHVyZSAnJXMnIgorbXNnc3RyICJlbCBzZXJ2aWRvciBubyDDqXMgY29tcGF0aWJsZSBhbWIgbGEgY2FyYWN0ZXLDrXN0aWNhIMKrJXPCuyIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjI1MgorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZGUgcHJvdG9jb2w6IHMnZXNwZXJhdmEgc2hhbGxvdyBzaGEtMSwgcydoYSByZWJ1dCDCqyVzwrsiCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjMxMworbXNnaWQgImludmFsaWQgcGFja2V0IgorbXNnc3RyICJwYXF1ZXQgbm8gdsOgbGlkIgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZGUgcHJvdG9jb2w6IG5vIHMnZXNwZXJhdmEgwqslc8K7IgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgInJlc3Bvc3RhIGRlIGxzLXJlZnMgbm8gdsOgbGlkYTogJXMiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiZWwgcHJvdG9jb2wgwqslc8K7IG5vIMOpcyBjb21wYXRpYmxlIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzdGFibGlyIFNPX0tFRVBBTElWRSBhbCBzw7Jjb2wiCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgIlMnZXN0w6AgY2VyY2FudCAlcy4uLiIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0cm9iYXIgJXMgKHBvcnQgJXMpICglcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIKKyM6IGNvbm5lY3QuYzo2NDMgY29ubmVjdC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZS5cbiIKKyJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorbXNnc3RyICIiCisiZmV0LlxuIgorIlMnZXN0w6AgY29ubmVjdGFudCBhICVzIChwb3J0ICVzKSAuLi4gIgorCisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgorIiVzIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCBjb25uZWN0YXIgYSAlczpcbiIKKyIlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICJmZXQuIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdHJvYmFyICVzICglcykiCisKKyM6IGNvbm5lY3QuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwb3J0ICVzIgorbXNnc3RyICJwb3J0IGRlc2NvbmVndXQgJXMiCisKKyM6IGNvbm5lY3QuYzo4NDUgY29ubmVjdC5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBob3N0bmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgInMnaGEgYmxvcXVlamF0IGVsIG5vbSBlc3RyYW55IGQnYW1maXRyacOzIMKrJXPCuyIKKworIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICJzJ2hhIGJsb3F1ZWphdCBlbCBwb3J0IGVzdHJhbnkgwqslc8K7IgorCisjOiBjb25uZWN0LmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGFydCBwcm94eSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBpbmljaWFyIHNlcnZpZG9yIGludGVybWVkaWFyaSDCqyVzwrsiCisKKyM6IGNvbm5lY3QuYzo5MjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZDsgc2VlICdnaXQgaGVscCBwdWxsJyBmb3IgdmFsaWQgdXJsIHN5bnRheCIKK21zZ3N0ciAiIgorIm5vIHMnaGEgZXNwZWNpZmljYXQgdW4gY2Ftw607IHZlZ2V1IMKrZ2l0IGhlbHAgcHVsbMK7IHBlciBsYSBzaW50YXhpIHbDoGxpZGEgcGVyICIKKyJVUkwiCisKKyM6IGNvbm5lY3QuYzoxMTIzCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAibGEgdmFyaWFudCDCq3NpbXBsZcK7IGQnc3NoIG5vIMOpcyBjb21wYXRpYmxlIGFtYiAtNCIKKworIzogY29ubmVjdC5jOjExMzUKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC02IgorbXNnc3RyICJsYSB2YXJpYW50IMKrc2ltcGxlwrsgZCdzc2ggbm8gw6lzIGNvbXBhdGlibGUgYW1iIC02IgorCisjOiBjb25uZWN0LmM6MTE1MgorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwb3J0IgorbXNnc3RyICJsYSB2YXJpYW50IMKrc2ltcGxlwrsgZCdzc2ggbm8gcGVybWV0IGRlZmluaXIgZWwgcG9ydCIKKworIzogY29ubmVjdC5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwYXRobmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgInMnaGEgYmxvcXVlamF0IGVsIG5vbSBkZSBmaXR4ZXIgZXN0cmFueSDCqyVzwrsiCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYmlmdXJjYXIiCisKKyM6IGNvbm5lY3RlZC5jOjg5IGJ1aWx0aW4vZnNjay5jOjIwOCBidWlsdGluL3BydW5lLmM6NDMKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBsYSBjb25uZWN0aXZpdGF0IgorCisjOiBjb25uZWN0ZWQuYzoxMDEKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyICdnaXQgcmV2LWxpc3QnIgorCisjOiBjb25uZWN0ZWQuYzoxMjEKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgImVzY3JpcHR1cmEgZmFsbGFkYSBhbCByZXYtbGlzdCIKKworIzogY29ubmVjdGVkLmM6MTI4Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gdGFuY2FyIGwnc3RkaW4gZGVsIHJldi1saXN0IgorCisjOiBjb252ZXJ0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgY3JsZl9hY3Rpb24gJWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzIgorbXNnc3RyICJDUkxGIGVzIHJlZW1wbGHDp8OgIHBlciBMRiBlbiAlcyIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJDUkxGIHNlcsOgIHJlZW1wbGHDp2F0IHBlciBMRiBlbiAlcy5cbiIKKyJFbCBmaXR4ZXIgdGluZHLDoCBlbHMgc2V1cyB0ZXJtaW5hZG9ycyBkZSBsw61uaWEgb3JpZ2luYWxzIGVuIGVsIHZvc3RyZSAiCisiZGlyZWN0b3JpIGRlIHRyZWJhbGwiCisKKyM6IGNvbnZlcnQuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAiTEYgZXMgcmVlbXBsYcOnw6AgcGVyIExGIGVuICVzIgorCisjOiBjb252ZXJ0LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkxGIHNlcsOgIHJlZW1wbGHDp2F0IHBlciBDUkxGIGVuICVzLlxuIgorIkVsIGZpdHhlciB0aW5kcsOgIGVscyBzZXVzIHRlcm1pbmFkb3JzIGRlIGzDrW5pYSBvcmlnaW5hbHMgZW4gZWwgdm9zdHJlICIKKyJkaXJlY3RvcmkgZGUgdHJlYmFsbCIKKworIzogY29udmVydC5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcHJvaGliaXRlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjb2RpZmljYXIgwqslc8K7IGRlcyBkZSAlcyBhICVzIgorCisjOiBjb252ZXJ0LmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVuY29kaW5nICclcycgZnJvbSAlcyB0byAlcyBhbmQgYmFjayBpcyBub3QgdGhlIHNhbWUiCittc2dzdHIgImNvZGlmaWNhciDCqyVzwrsgZGVzIGRlICVzIGEgJXMgaSBjYXAgZW5yZXJlIG5vIMOpcyBlbCBtYXRlaXgiCisKKyM6IGNvbnZlcnQuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgYmlmdXJjYXIgcGVyIGEgZXhlY3V0YXIgZWwgZmlsdHJlIGV4dGVybiDCqyVzwrsiCisKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgYWxpbWVudGFyIGwnZW50cmFkYSBhbCBmaWx0cmUgZXh0ZXJuIMKrJXPCuyIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgImVsIGZpbHRyZSBleHRlcm4gwqslc8K7IGhhIGZhbGxhdCAlZCIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgImxhIGxlY3R1cmEgZGVsIGZpbHRyZSBleHRlcm4gwqslc8K7IGhhIGZhbGxhdCIKKworIzogY29udmVydC5jOjczNiBjb252ZXJ0LmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZWwgZmlsdHJlIGV4dGVybiDCqyVzwrsgaGEgZmFsbGF0IgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAidGlwdXMgZGUgZmlsdHJlIGluZXNwZXJhdCIKKworIzogY29udmVydC5jOjg1MAorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4dGVybmFsIGZpbHRlciAnJXMnIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZSBhbHRob3VnaCBub3QgYWxsIHBhdGhzIGhhdmUgIgorImJlZW4gZmlsdGVyZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjEyMjMKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoxNDExIGNvbnZlcnQuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiVzOiBlbCBmaWx0cmUgZGUgbmV0ZWphdCDCqyVzwrsgaGEgZmFsbGF0IgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFjdHVhbGl0emFyIGVscyBmaXR4ZXJzIgorCisjOiBkYXRlLmM6MTM4Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiZW4gZWwgZnV0dXIiCisKKyM6IGRhdGUuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICJmYSAlPFBSSXVNQVg+IHNlZ29uIgorbXNnc3RyWzFdICJmYSAlPFBSSXVNQVg+IHNlZ29ucyIKKworIzogZGF0ZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbWludXRlcyBhZ28iCittc2dzdHJbMF0gImZhICU8UFJJdU1BWD4gbWludXQiCittc2dzdHJbMV0gImZhICU8UFJJdU1BWD4gbWludXRzIgorCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICJmYSAlPFBSSXVNQVg+IGhvcmEiCittc2dzdHJbMV0gImZhICU8UFJJdU1BWD4gaG9yZXMiCisKKyM6IGRhdGUuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICJmYSAlPFBSSXVNQVg+IGRpYSIKK21zZ3N0clsxXSAiZmEgJTxQUkl1TUFYPiBkaWVzIgorCisjOiBkYXRlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gd2Vla3MgYWdvIgorbXNnc3RyWzBdICJmYSAlPFBSSXVNQVg+IHNldG1hbmEiCittc2dzdHJbMV0gImZhICU8UFJJdU1BWD4gc2V0bWFuZXMiCisKKyM6IGRhdGUuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiZmEgJTxQUkl1TUFYPiBtZXMiCittc2dzdHJbMV0gImZhICU8UFJJdU1BWD4gbWVzb3MiCisKKyM6IGRhdGUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IGFueSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBhbnlzIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gImZhICVzIGkgJTxQUkl1TUFYPiBtZXMiCittc2dzdHJbMV0gImZhICVzIGkgJTxQUkl1TUFYPiBtZXNvcyIKKworIzogZGF0ZS5jOjE5NyBkYXRlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMgYWdvIgorbXNnc3RyWzBdICJmYSAlPFBSSXVNQVg+IGFueSIKK21zZ3N0clsxXSAiZmEgJTxQUkl1TUFYPiBhbnlzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjcyCittc2dpZCAiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIgorbXNnc3RyICJTJ2VzdGFuIHByb3BhZ2FudCBsZXMgbWFycXVlcyBkJ2lsbGEiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICJvYmplY3RlIGQnYXJicmUgbWFsbcOocyAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICIiCisicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjYXJyZWdhciBsJ2V4cHJlc3Npw7MgcmVndWxhciBkZSBsJ2lsbGEgcGVyIMKrJXPCuzogJXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaXNsYW5kIHJlZ2V4IGZyb20gY29uZmlnIGhhcyB0b28gbWFueSBjYXB0dXJlIGdyb3VwcyAobWF4PSVkKSIKK21zZ3N0ciAiIgorImwnZXhwcmVzc2nDsyByZWd1bGFyIGRlIGwnaWxsYSBkZXMgZGUgbGEgY29uZmlndXJhY2nDsyB0w6kgbWFzc2EgZ3J1cHMgZGUgIgorImNhcHR1cmEgKG3DoHg9JWQpIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIgorbXNnc3RyICJNYXJjYWRlcyAlZCBpbGxlcywgZmV0LlxuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBlbCBmaXR4ZXIgZCdvcmRyZXMgwqslc8K7IgorCisjOiBkaWZmY29yZS1yZW5hbWUuYzo1NDMKK21zZ2lkICJQZXJmb3JtaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiUydlc3TDoCByZWFsaXR6YW50IHVuYSBkZXRlY2Npw7MgaW5leGFjdGEgZGUgY2FudmlzIGRlIG5vbSIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wY2lvbnM+XSA8Y2Ftw60+IDxjYW3DrT4iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisiTm8gw6lzIHVuIGRpcMOyc2l0IEdpdC4gVXNldSAtLW5vLWluZGV4IHBlciBhIGNvbXBhcmFyIGRvcyBjYW1pbnMgZm9yYSBkZWwgIgorImRpcmVjdG9yaSBkZSB0cmViYWxsIgorCisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiIgorIiAgUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhbmFsaXR6YXIgZWwgcGVyY2VudGF0Z2UgbGltaXRhbnQgZGUgZGlyc3RhdCAiCisiwqslc8K7XG4iCisKKyM6IGRpZmYuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICBQYXLDoG1ldHJlIGRlIGRpcnN0YXQgZGVzY29uZWd1dCDCqyVzwrtcbiIKKworIzogZGlmZi5jOjI5NgorbXNnaWQgIiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkLXplYnJhJywgJ3BsYWluJyIKK21zZ3N0ciAiIgorImVsIHBhcsOgbWV0cmUgZGUgY29sb3IgZW4gbW92aW1lbnQgaGEgZGUgc2VyIMKrbm/CuywgwqtkZWZhdWx0wrssIMKrYmxvY2tzwrssICIKKyLCq3plYnJhwrssIMKrZGltbWVkLXplYnJhwrsgbyDCq3BsYWluwrsiCisKKyM6IGRpZmYuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnLCBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUtc3BhY2UtY2hhbmdlJywgIgorIidpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MzMyCittc2dpZCAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgIgorIndoaXRlc3BhY2UgbW9kZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIKK21zZ3N0ciAiIgorIlZhbG9yIGRlc2NvbmVndXQgZGUgbGEgdmFyaWFibGUgZGUgY29uZmlndXJhY2nDsyBkZSAnZGlmZi5zdWJtb2R1bGUnOiDCqyVzwrsiCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJTJ2hhbiB0cm9iYXQgZXJyb3JzIGVuIGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7MgJ2RpZmYuZGlyc3RhdCc6XG4iCisiJXMiCisKKyM6IGRpZmYuYzo0MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgImVsIGRpZmYgZXh0ZXJuYWwgcydoYSBtb3J0LCBzJ2VzdMOgIGF0dXJhbnQgYSAlcyIKKworIzogZGlmZi5jOjQ1NDcKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgaSAtcyBzw7NuIG3DunR1YW1lbnQgZXhjbG9lbnRzIgorCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItRywgLVMgYW5kIC0tZmluZC1vYmplY3Qgc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cyIKKworIzogZGlmZi5jOjQ2MjgKK21zZ2lkICItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIKK21zZ3N0ciAiLS1mb2xsb3cgcmVxdWVyZWl4IGV4YWN0YW1lbnQgdW5hIGVzcGVjaWZpY2FjacOzIGRlIGNhbcOtIgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgInZhbG9yIC0tc3RhdCBubyB2w6BsaWQ6ICVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5OSBwYXJzZS1vcHRpb25zLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiVzIGVzcGVyYSB1biB2YWxvciBudW3DqHJpYyIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYW5hbGl0emFyIGVsIHBhcsOgbWV0cmUgZCdvcGNpw7MgZGUgLS1kaXJzdGF0Ly1YOlxuIgorIiVzIgorCisjOiBkaWZmLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNoYW5nZSBjbGFzcyAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCittc2dzdHIgImNsYXNzZSBkZSBjYW52aSDCqyVjwrsgZGVzY29uZWd1ZGEgYSAtLWRpZmYtZmlsdGVyPSVzIgorCisjOiBkaWZmLmM6NDgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorbXNnc3RyICJ2YWxvciBkZXNjb25lZ3V0IGRlc3Byw6lzIGRlIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorCisjOiBkaWZmLmM6NDgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIMKrJXPCuyIKKworIzogZGlmZi5jOjQ4ODYgZGlmZi5jOjQ4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyA8bj4vPG0+IGZvcm0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIGNoYXJhY3RlciwgZ290ICclcyciCittc2dzdHIgIiVzIGVzcGVyYXZhIHVuIGNhcsOgY3RlciwgcydoYSByZWJ1dCDCqyVzwrsiCisKKyM6IGRpZmYuYzo0OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWNvbG9yLW1vdmVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSAtLWNvbG9yLW1vdmVkIGluY29ycmVjdGU6ICVzIgorCisjOiBkaWZmLmM6NDk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICJtb2RlIMKrJXPCuyBubyB2w6BsaWQgZW4gLWNvbG9yLW1vdmVkLXdzIgorCisjOiBkaWZmLmM6NDk4NAorbXNnaWQgIiIKKyJvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgYW5kICIKKyJcImhpc3RvZ3JhbVwiIgorbXNnc3RyICIiCisibCdvcGNpw7MgZGlmZi1hbGdvcml0aG0gYWNjZXB0YSDCq215ZXJzwrssIMKrbWluaW1hbMK7LCDCq3BhdGllbmNlwrsgaSDCq2hpc3RvZ3JhbcK7IgorCisjOiBkaWZmLmM6NTAyMCBkaWZmLmM6NTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHRvICVzIgorbXNnc3RyICJhcmd1bWVudCBubyB2w6BsaWQgYSAlcyIKKworIzogZGlmZi5jOjUxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIiIKKyJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFuYWxpdHphciBlbCBwYXLDoG1ldHJlIGQnb3BjacOzIGRlIC0tc3VibW9kdWxlOiDCqyVzwrsiCisKKyM6IGRpZmYuYzo1MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgInBhcsOgbWV0cmUgLS13b3JkLWRpZmYgaW5jb3JyZWN0ZTogJXMiCisKKyM6IGRpZmYuYzo1MjU3Cittc2dpZCAiRGlmZiBvdXRwdXQgZm9ybWF0IG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZGVsIGZvcm1hdCBkZSBzb3J0aWRhIGRlbCBkaWZmIgorCisjOiBkaWZmLmM6NTI1OSBkaWZmLmM6NTI2NQorbXNnaWQgImdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJnZW5lcmFudCBwZWRhw6ciCisKKyM6IGRpZmYuYzo1MjYyIGJ1aWx0aW4vbG9nLmM6MTczCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgIm9tZXQgbGEgc29ydGlkYSBkZSBkaWZlcsOobmNpZXMiCisKKyM6IGRpZmYuYzo1MjY3IGRpZmYuYzo1MzgxIGRpZmYuYzo1Mzg4Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGRpZmYuYzo1MjY4IGRpZmYuYzo1MjcxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzIGFtYiA8bj4gbMOtbmllcyBkZSBjb250ZXh0IgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgImdlbmVyYSBlbCBkaWZmIGVuIGZvcm1hdCBjcnUiCisKKyM6IGRpZmYuYzo1Mjc2Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAic2luw7JuaW0gZGUgcGVyIGEgwqstcCAtLXJhd8K7IgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICJzaW7Dsm5pbSBkZSBwZXIgYSDCqy1wIC0tc3RhdMK7IgorCisjOiBkaWZmLmM6NTI4NAorbXNnaWQgIm1hY2hpbmUgZnJpZW5kbHkgLS1zdGF0IgorbXNnc3RyICJsbGVnaWJsZSBwZXIgbcOgcXVpbmEgLS1zdGF0IgorCisjOiBkaWZmLmM6NTI4NworbXNnaWQgIm91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgLS1zdGF0IgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGwnw7psdGltYSBsw61uaWEgZGUgLS1zdGF0IgorCisjOiBkaWZmLmM6NTI4OSBkaWZmLmM6NTI5NworbXNnaWQgIjxwYXJhbTEscGFyYW0yPi4uLiIKK21zZ3N0ciAiPHBhcmFtMSxwYXJhbTI+Li4uIgorCisjOiBkaWZmLmM6NTI5MAorbXNnaWQgIiIKKyJvdXRwdXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZWxhdGl2ZSBhbW91bnQgb2YgY2hhbmdlcyBmb3IgZWFjaCBzdWItZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mjk0Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCittc2dzdHIgInNpbsOybmltIHBlciAtZGlyc3RhdD1jdW11bGF0aXZlIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICJzaW7Dsm5pbSBwZXIgLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4iCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGVscyBub21zIGRlIGZpdHhlcnMgY2FudmlhdHMiCisKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyBlbHMgbm9tcyBpIGwnZXN0YXQgZGVscyBmaXR4ZXJzIGNhbnZpYXRzIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgImdlbmVyYSBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICI8YW1wbGFkYT4iCisKKyM6IGRpZmYuYzo1MzE3Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICJnZW5lcmEgZGlmZnN0YXQgYW1iIHVuYSBhbXBsYWRhIGRvbmFkYSIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzdGF0IGFtYiB1biBub20gZCdhbXBsYWRhIGRvbmF0IgorCisjOiBkaWZmLmM6NTMyMworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBncmFwaCB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzdGF0IGFtYiB1bmEgYW1wbGFkYSBkZSBncmFmIGRvbmFkYSIKKworIzogZGlmZi5jOjUzMjUKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICI8Y29tcHRhZG9yPiIKKworIzogZGlmZi5jOjUzMjYKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGxpbWl0ZWQgbGluZXMiCittc2dzdHIgImdlbmVyYSBkaWZmc3RhdCBhbWIgbMOtbmllcyBsaW1pdGFkZXMiCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICJnZW5lcmEgdW4gcmVzdW0gY29tcGFjdGUgYSBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMzIKK21zZ2lkICJvdXRwdXQgYSBiaW5hcnkgZGlmZiB0aGF0IGNhbiBiZSBhcHBsaWVkIgorbXNnc3RyICJkaWZmIGFtYiBzb3J0aWRhIGJpbmFyaWEgcXVlIHBvdCBzZXIgYXBsaWNhZGEiCisKKyM6IGRpZmYuYzo1MzM1Cittc2dpZCAic2hvdyBmdWxsIHByZS0gYW5kIHBvc3QtaW1hZ2Ugb2JqZWN0IG5hbWVzIG9uIHRoZSBcImluZGV4XCIgbGluZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMzcKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAibW9zdHJhIHVuIGRpZmYgYW1iIGNvbG9ycyIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0MgorbXNnaWQgIiIKKyJkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMgaW4gLS1yYXcgb3IgIgorIi0tbnVtc3RhdCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0NSBkaWZmLmM6NTM0OCBkaWZmLmM6NTM1MSBkaWZmLmM6NTQ1NworbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICI8cHJlZml4PiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzQ5Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgXCJiL1wiIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzUyCittc2dpZCAicHJlcGVuZCBhbiBhZGRpdGlvbmFsIHByZWZpeCB0byBldmVyeSBsaW5lIG9mIG91dHB1dCIKK21zZ3N0ciAiYWZlZ2lyIHVuIHByZWZpeCBhZGRpY2lvbmFsIHBlciBhIGNhZGEgbMOtbmlhIGRlIHNvcnRpZGEiCisKKyM6IGRpZmYuYzo1MzU1Cittc2dpZCAiZG8gbm90IHNob3cgYW55IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcmVmaXgiCittc2dzdHIgIm5vIG1vc3RyaXMgY2FwIHByZWZpeCBkJ29yaWdlbiBvIGRlc3TDrSIKKworIzogZGlmZi5jOjUzNTgKKyMsIGZ1enp5Cittc2dpZCAic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIKK21zZ3N0ciAiQ3JlYSB1biBjbG9uIHN1cGVyZmljaWFsIHRydW5jYXQgYWwgbm9tYnJlIGRlIHJldmlzaW9ucyBlc3BlY2lmaWNhdCIKKworIzogZGlmZi5jOjUzNjIgZGlmZi5jOjUzNjcgZGlmZi5jOjUzNzIKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgIjxjaGFyPiIKKworIzogZGlmZi5jOjUzNjMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbnN0ZWFkIG9mICcrJyIKK21zZ3N0ciAiIgorImVzcGVjaWZpcXVldSBlbCBjYXLDoGN0ZXIgcGVyIGEgaW5kaWNhciB1bmEgbMOtbmlhIG5vdmEgZW4gY29tcHRlcyBkZSDCqyvCuyIKKworIzogZGlmZi5jOjUzNjgKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYW4gb2xkIGxpbmUgaW5zdGVhZCBvZiAnLSciCittc2dzdHIgIiIKKyJlc3BlY2lmaXF1ZXUgZWwgY2Fyw6BjdGVyIHBlciBhIGluZGljYXIgdW5hIGzDrW5pYSBhbnRpZ2EgZW4gY29tcHRlcyBkZSDCqy3CuyIKKworIzogZGlmZi5jOjUzNzMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBjb250ZXh0IGluc3RlYWQgb2YgJyAnIgorbXNnc3RyICJlc3BlY2lmaXF1ZXUgZWwgY2Fyw6BjdGVyIHBlciBhIGluZGljYXIgY29udGV4dCBlbiBjb21wdGVzIGRlIMKrIMK7IgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZGUgY2FudmkgZGUgbm9tIGRlbCBkaWZmIgorCisjOiBkaWZmLmM6NTM3NworbXNnaWQgIjxuPlsvPG0+XSIKK21zZ3N0ciAiPG4+Wy88bT5dIgorCisjOiBkaWZmLmM6NTM3OAorbXNnaWQgImJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQgY3JlYXRlIgorbXNnc3RyICIiCisiZGl2aWRlaXggZWxzIGNhbnZpcyBkZSByZWVzY3JpcHR1cmEgY29tcGxldGEgZW4gcGFyZWxscyBkZSBzdXByaW1pciBpIGNyZWFyIgorCisjOiBkaWZmLmM6NTM4MgorbXNnaWQgImRldGVjdCByZW5hbWVzIgorbXNnc3RyICJkZXRlY3RhIGVscyBjYW52aXMgZGUgbm9tcyIKKworIzogZGlmZi5jOjUzODYKK21zZ2lkICJvbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcyIKK21zZ3N0ciAib21ldCBsZXMgcHJlaW1hdGdlcyBwZXIgbGVzIHN1cHJlc3Npb25zIgorCisjOiBkaWZmLmM6NTM4OQorbXNnaWQgImRldGVjdCBjb3BpZXMiCittc2dzdHIgImRldGVjdGEgY8OycGllcyIKKworIzogZGlmZi5jOjUzOTMKK21zZ2lkICJ1c2UgdW5tb2RpZmllZCBmaWxlcyBhcyBzb3VyY2UgdG8gZmluZCBjb3BpZXMiCittc2dzdHIgInVzYSBlbHMgZml0eGVycyBubyBtb2RpZmljYXRzIGNvbSBhIGZvbnQgcGVyIHRyb2JhciBjw7JwaWVzIgorCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiaW5oYWJpbGl0YSBsYSBkZXRlY2Npw7MgZGUgY2FudmlzIGRlIG5vbSIKKworIzogZGlmZi5jOjUzOTgKK21zZ2lkICJ1c2UgZW1wdHkgYmxvYnMgYXMgcmVuYW1lIHNvdXJjZSIKK21zZ3N0ciAidXNhIGVscyBibG9icyBidWl0cyBjb20gYSBmb250IGRlIGNhbnZpIGRlIG5vbSIKKworIzogZGlmZi5jOjU0MDAKK21zZ2lkICJjb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcyIKK21zZ3N0ciAiIgorImNvbnRpbnVhIGxsaXN0YW50IGwnaGlzdMOycmljIGQndW4gdW4gZml0eGVyIG3DqXMgZW5sbMOgIGRlbHMgY2FudmlzIGRlIG5vbSIKKworIzogZGlmZi5jOjU0MDMKK21zZ2lkICIiCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkJ2FsZ29yaXNtZSBEaWZmIgorCisjOiBkaWZmLmM6NTQwNworbXNnaWQgInByb2R1Y2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYiCittc2dzdHIgInByb2R1ZWl4IGVsIGRpZmYgbcOpcyBwZXRpdCBwb3NzaWJsZSIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiaWdub3JhIGVscyBlc3BhaSBlbiBibGFuYyBlbiBjb21wYXJhciBsw61uaWVzIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICJpZ25vcmEgZWxzIGNhbnZpcyBlbiBsYSBxdWFudGl0YXQgZCdlc3BhaSBlbiBibGFuYyIKKworIzogZGlmZi5jOjU0MTYKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTCIKK21zZ3N0ciAiaWdub3JhIGVscyBjYW52aXMgZCdlc3BhaSBlbiBibGFuYyBhbCBmaW5hbCBkZSBsYSBsw61uaWEiCisKKyM6IGRpZmYuYzo1NDE5Cittc2dpZCAiaWdub3JlIGNhcnJpZXItcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSIKK21zZ3N0ciAiaWdub3JhIGVscyByZXRvcm5zIGRlIGzDrW5pYSBhbCBmaW5hbCBkZSBsYSBsw61uaWEiCisKKyM6IGRpZmYuYzo1NDIyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAiaWdub3JhIGVscyBjYW52aXMgZW4gbMOtbmllcyBxdWUgZXN0YW4gZW4gYmxhbmMiCisKKyM6IGRpZmYuYzo1NDI1Cittc2dpZCAiaGV1cmlzdGljIHRvIHNoaWZ0IGRpZmYgaHVuayBib3VuZGFyaWVzIGZvciBlYXN5IHJlYWRpbmciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MjgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImdlbmVyYSBkaWZmIHVzYW50IGwnYWxnb3Jpc21lIMKrcGF0aWVuY2UgZGlmZsK7IgorCisjOiBkaWZmLmM6NTQzMgorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiaGlzdG9ncmFtIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImdlbmVyYSBkaWZmIHVzYW50IGwnYWxnb3Jpc21lIMKraGlzdG9ncmFtIGRpZmbCuyIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAiPGFsZ29yaXNtZT4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgImVzY29sbGl1IHVuIGFsZ29yaXNtZSBwZWwgZGlmZiIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIjx0ZXh0PiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImdlbmVyYSBkaWZmIHVzYW50IGwnYWxnb3Jpc21lIMKrYW5jaG9yZWQgZGlmZsK7IgorCisjOiBkaWZmLmM6NTQ0MCBkaWZmLmM6NTQ0OSBkaWZmLmM6NTQ1MgorbXNnaWQgIjxtb2RlPiIKK21zZ3N0ciAiPG1vZGU+IgorCisjOiBkaWZmLmM6NTQ0MQorbXNnaWQgInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDQzIGRpZmYuYzo1NDQ2IGRpZmYuYzo1NDkxCittc2dpZCAiPHJlZ2V4PiIKK21zZ3N0ciAiPHJlZ2V4PiIKKworIzogZGlmZi5jOjU0NDQKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgImVxdWl2YWxlbnQgYSAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IgorCisjOiBkaWZmLmM6NTQ1MAorbXNnaWQgIm1vdmVkIGxpbmVzIG9mIGNvZGUgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkiCittc2dzdHIgImxlcyBsw61uaWVzIGRlIGNvZGkgcXVlIHMnaGEgbW9ndXQgcydhY29sb3JlaXhlbiBkaWZlcmVudCIKKworIzogZGlmZi5jOjU0NTMKK21zZ2lkICJob3cgd2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkIGluIC0tY29sb3ItbW92ZWQiCittc2dzdHIgImNvbSBzJ2lnbm9yZW4gZWxzIGVzcGFpcyBlbiBibGFuYyBhIC0tY29sb3ItbW92ZWQiCisKKyM6IGRpZmYuYzo1NDU2Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICJBbHRyZXMgb3BjaW9ucyBkaWZmIgorCisjOiBkaWZmLmM6NTQ1OAorbXNnaWQgIndoZW4gcnVuIGZyb20gc3ViZGlyLCBleGNsdWRlIGNoYW5nZXMgb3V0c2lkZSBhbmQgc2hvdyByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAicXVhbiBzJ2V4ZWN1dGEgZGVzIGQndW4gc3ViZGlyZWN0b3JpLCBleGNsb3UgZWxzIGNhbnZpcyBkZSBmb3JhIGkgbW9zdHJhIGVscyBjYW1pbnMgcmVsYXRpdXMiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgInRyYWN0YSB0b3RzIGVscyBmaXR4ZXJzIGNvbSBhIHRleHQiCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIgorbXNnc3RyICJpbnRlcmNhbnZpYSBlbHMgZHVlcyBlbnRyYWRhLCBpbnZlcnRlaXggZWwgZGlmZiIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAic3VydCBhbWIgMSBzaSBoaSBoYSBkaWZlcsOobmNpZXMsIDAgZW4gY2FzIGNvbnRyYXJpIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAiaW5oYWJpbGl0YSB0b3RlcyBsZXMgc29ydGlkZXMgZGVsIHByb2dyYW1hIgorCisjOiBkaWZmLmM6NTQ3MAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDcyCittc2dpZCAicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiPHF1YW4+IgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAiaWdub3JhIGVscyBjYW52aXMgYWxzIHN1Ym3DsmR1bHMgZW4gbGEgZ2VuZXJhY2nDsyBkZWwgZGlmZiIKKworIzogZGlmZi5jOjU0NzgKK21zZ2lkICI8Zm9ybWF0PiIKK21zZ3N0ciAiPGZvcm1hdD4iCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgImVzcGVjaWZpcXVldSBjb20gZXMgbW9zdHJlbiBlbHMgY2FudmlzIGFscyBzdWJtw7JkdWxzIgorCisjOiBkaWZmLmM6NTQ4MworIywgZnV6enkKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJ1c2EgLmdpdGF0dHJpYnV0ZXMgbm9tw6lzIGRlcyBkZSBsJ8OtbmRleCIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ4OAorbXNnaWQgIjxzdHJpbmc+IgorbXNnc3RyICI8Y2FkZW5hPiIKKworIzogZGlmZi5jOjU0ODkKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJzdHJpbmciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0OTIKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJyZWdleCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICJtb3N0cmEgdG90cyBlbHMgY2FudmlzIGFtYiBlbCBjb25qdW50IGRlIGNhbnZpcyBhbWIgLVMgbyAtRyIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgInRyYWN0YSA8Y2FkZW5hPiBhIC1TIGNvbSBhIGV4cHJlc3Npw7MgcmVndWxhciBQT1NJWCBhbXBsaWFkYSIKKworIzogZGlmZi5jOjU1MDEKK21zZ2lkICJjb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiY29udHJvbGEgbCdvcmRyZSBhbWIgZWwgcXVhbCBlbHMgZml0eGVycyBhcGFyZWl4ZW4gZW4gbGEgc29ydGlkYSIKKworIzogZGlmZi5jOjU1MDIKK21zZ2lkICI8b2JqZWN0LWlkPiIKK21zZ3N0ciAiPGlkIGRlIGwnb2JqZWN0ZT4iCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAic2VsZWNjaW9uZXUgZWxzIGZpdHhlcnMgcGVyIHRpcHVzIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NTA4Cittc2dpZCAiPGZpbGU+IgorbXNnc3RyICI8Zml0eGVyPiIKKworIzogZGlmZi5jOjU1MDkKK21zZ2lkICJPdXRwdXQgdG8gYSBzcGVjaWZpYyBmaWxlIgorbXNnc3RyICJTb3J0aWRhIGEgdW4gZml0eGVyIGVzcGVjw61maWMiCisKKyM6IGRpZmYuYzo2MTY0Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJzJ2hhIG9tw6hzIGxhIGRldGVjY2nDsyBkZSBjYW52aSBkZSBub20gaW5leGFjdGEgYSBjYXVzYSBkZSBtYXNzYSBmaXR4ZXJzLiIKKworIzogZGlmZi5jOjYxNjcKK21zZ2lkICJvbmx5IGZvdW5kIGNvcGllcyBmcm9tIG1vZGlmaWVkIHBhdGhzIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJub23DqXMgcydoYW4gdHJvYmF0IGPDsnBpZXMgZGVzIGRlIGNhbWlucyBtb2RpZmljYXRzIGEgY2F1c2EgZGUgbWFzc2EgZml0eGVycy4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAiIgorInBvdHNlciB2b2xldSBlc3RhYmxpciBsYSB2b3N0cmEgdmFyaWFibGUgJXMgYSBhbG1lbnlzICVkIGkgdG9ybmFyIGEgaW50ZW50YXIgIgorImwnb3JkcmUuIgorCisjOiBkaXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAiIgorImwnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gwqslc8K7IG5vIGhhIGNvaW5jaWRpdCBhbWIgY2FwIGZpdHhlciBxdWUgZ2l0IGNvbmVndWkiCisKKyM6IGRpci5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAicGF0csOzIG5vIHJlY29uZWd1dDogwqslc8K7IgorCisjOiBkaXIuYzo2ODIgZGlyLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJwYXRyw7MgbmVnYXRpdSBubyByZWNvbmVndXQ6IMKrJXPCuyIKKworIzogZGlyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IGhhdmUgaXNzdWVzOiBwYXR0ZXJuICclcycgaXMgcmVwZWF0ZWQiCittc2dzdHIgIiIKKworIzogZGlyLmM6NzI0Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAiaW5oYWJpbGl0YSBsYSBjb2luY2lkw6huY2lhIGRlIHBhdHJvbnMgwqtjb25lwrsiCisKKyM6IGRpci5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCB1c2FyICVzIGNvbSBhIGZpdHhlciBkJ2V4Y2x1c2nDsyIKKworIzogZGlyLmM6MjA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBlbCBkaXJlY3Rvcmkgwqslc8K7IgorCisjOiBkaXIuYzoyNDE1Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2J0ZW5pciBlbCBub21icmUgaSBsYSBpbmZvcm1hY2nDsyBkZWwgbnVjbGkiCisKKyM6IGRpci5jOjI1MzkKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIiIKKyJsYSBtZW3DsnJpYSBjYXUgbm8gc2VndWlkYSBlc3TDoCBpbmhhYmlsaXRhZGEgZW4gYXF1ZXN0IHNpc3RlbWEgbyB1YmljYWNpw7MiCisKKyM6IGRpci5jOjMzNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgImVsIGZpdHhlciBkJ8OtbmRleCBhbCBkaXDDsnNpdCAlcyDDqXMgbWFsbcOocyIKKworIzogZGlyLmM6MzM4OCBkaXIuYzozMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBjcmVhciBkaXJlY3RvcmlzIHBlciAlcyIKKworIzogZGlyLmM6MzQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG1pZ3JhciBlbCBkaXJlY3RvcmkgZGUgwqslc8K7IGEgwqslc8K7IgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICIiCisKKyM6IGVudHJ5LmM6MTc4Cittc2dpZCAiRmlsdGVyaW5nIGNvbnRlbnQiCittc2dzdHIgIlMnZXN0w6AgZmlsdHJhbnQgZWwgY29udGluZ3V0IgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIMKrc3RhdMK7IHNvYnJlIGVsIGZpdHhlciDCqyVzwrsiCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICIiCisKKyM6IGVudmlyb25tZW50LmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgR0lUX0RJUiB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzdGFibGlyIEdJVF9ESVIgYSDCqyVzwrsiCisKKyM6IGV4ZWMtY21kLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIgorbXNnc3RyICJoaSBoYSBtYXNzYSBhcmd1bWVudHMgcGVyIGEgZXhlY3V0YXIgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogbGxpc3RhIHN1cGVyZmljaWFsIGVzcGVyYWRhIgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCisjLCBmdXp6eQorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBsbGlzdGEgc3VwZXJmaWNpYWwgZXNwZXJhZGEiCisKKyM6IGZldGNoLXBhY2suYzoxNjQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogcydlc3BlcmF2YSBBQ0svTkFLLCBzJ2hhIHJlYnV0IHVuIHBhcXVldCBkZSBuZXRlamEiCisKKyM6IGZldGNoLXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogcydlc3BlcmF2YSBBQ0svTkFLLCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgYWwgcmVtb3QiCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMgcmVxdWVyZWl4IG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImzDrW5pYSBkZSBzaGFsbG93IG5vIHbDoGxpZGE6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJsw61uaWEgZCd1bnNoYWxsb3cgbm8gdsOgbGlkYTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjQgZmV0Y2gtcGFjay5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIm9iamVjdGUgbm8gdHJvYmF0OiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJlcnJvciBlbiBvYmplY3RlOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAibm8gcydoYSB0cm9iYXQgY2FwIHNoYWxsb3c6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzcyIGZldGNoLXBhY2suYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgInMnZXNwZXJhdmEgc2hhbGxvdy91bnNoYWxsb3csIHMnaGEgcmVidXQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICJzJ2hhIHJlYnV0ICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICJjb21pc3Npw7Mgbm8gdsOgbGlkYSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ2MgorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAicydhYmFuZG9uYSIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgImZldCIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAicydoYSByZWJ1dCAlcyAoJWQpICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiCittc2dzdHIgIlMnZXN0w6AgbWFyY2FudCAlcyBjb20gYSBjb21wbGV0IgorCisjOiBmZXRjaC1wYWNrLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICJqYSBlcyB0w6kgJXMgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrOiBubyBzJ2hhIHBvZ3V0IGJpZnVyY2FyIGRlbCBkZXNtdWx0aXBsZXhvciBkZSBiYW5kYSBsYXRlcmFsIgorCisjOiBmZXRjaC1wYWNrLmM6ODI2Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2w6IGNhcMOnYWxlcmEgZGUgcGFxdWV0IGVycsOybmlhIgorCisjOiBmZXRjaC1wYWNrLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiAlcyIKK21zZ3N0ciAiZmV0Y2gtcGFjazogbm8gZXMgcG90IGJpZnVyY2FyIGRlICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiJXMgaGEgZmFsbGF0IgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZXJyb3IgZW4gZGVzbXVsdGlwbGV4b3IgZGUgYmFuZGEgbGF0ZXJhbCIKKworIzogZmV0Y2gtcGFjay5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICJMYSB2ZXJzacOzIGRlbCBzZXJ2aWRvciDDqXMgJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgIkVsIHNlcnZpZG9yIGFjY2VwdGEgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIHBlcm1ldCBjbGllbnRzIHN1cGVyZmljaWFscyIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gYWRtZXQgLS1zaGFsbG93LWV4Y2x1ZGUiCisKKyM6IGZldGNoLXBhY2suYzoxMDQxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IC0tZGVlcGVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICJjYXAgY29taXNzacOzIGVuIGNvbcO6IgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogbCdvYnRlbmNpw7MgaGEgZmFsbGF0LiIKKworIzogZmV0Y2gtcGFjay5jOjEyMDkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBwZXJtZXQgcGV0aWNpb25zIHN1cGVyZmljaWFscyIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJFbCBzZXJ2aWRvciBhY2NlcHRhIGZpbHRyYXRnZSIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbGEgcGV0aWNpw7MgYWwgcmVtb3QiCisKKyM6IGZldGNoLXBhY2suYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAiZXJyb3IgZW4gbGxlZ2lyIGxhIGNhcMOnYWxlcmEgZGUgbGEgc2VjY2nDsyDCqyVzwrsiCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgInMnZXNwZXJhdmEgwqslc8K7LCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICJsw61uaWEgZGUgY29uZmlybWFjacOzIGluZXNwZXJhZGE6IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBhY2tzOiAlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBwcm9jZXNzYXIgZWxzIGFja3M6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTMxOAorbXNnaWQgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIKK21zZ3N0ciAicydlc3BlcmEgbCdlbnZpYW1lbnQgZGVsIGZpdHhlciBkZSBwYXF1ZXQgZGVzcHLDqXMgZGUgwqtyZWFkecK7IgorCisjOiBmZXRjaC1wYWNrLmM6MTMyMAorbXNnaWQgImV4cGVjdGVkIG5vIG90aGVyIHNlY3Rpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgbm8gJ3JlYWR5JyIKK21zZ3N0ciAicydlc3BlcmEgcXVlIGNhcCBhbHRyYSBzZWNjaW9ucyBzJ2VudmnDryBkZXNwcsOpcyBkZSBubyDCq3JlYWR5wrsiCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBwcm9jZXNzYXIgbGEgaW5mb3JtYWNpw7Mgc3VwZXJmaWNpYWw6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAicydlc3BlcmF2YSB3YW50ZWQtcmVmLCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIgorbXNnc3RyICJ3YW50ZWQtcmVmIGluZXNwZXJhdDogwqslc8K7IgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBwcm9jZXNzYXIgbGVzIHJlZmVyw6huY2llcyBkZXNpdGphZGVzOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAibm8gaGkgaGEgY2FwIEhFQUQgcmVtb3QgY29pbmNpZGVudCIKKworIzogZmV0Y2gtcGFjay5jOjE3ODUgYnVpbHRpbi9jbG9uZS5jOjY4OAorbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICJlbCByZW1vdCBubyBoYSBlbnZpYXQgdG90cyBlbHMgb2JqZWN0ZXMgbmVjZXNzYXJpcyIKKworIzogZmV0Y2gtcGFjay5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJubyBleGlzdGVpeCBsYSByZWZlcsOobmNpYSByZW1vdGEgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBwZXJtZXQgc29swrdsaWNpdGFyIG9iamVjdGVzIG5vIGFudW5jaWF0cyAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyMworbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZml0eGVyIHRlbXBvcmFsIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGxhIHNpZ25hdHVyYSBzZXBhcmFkYSBhIMKrJXPCuyIKKworIzogZ3BnLWludGVyZmFjZS5jOjM5MAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIGhhIGZhbGxhdCBlbiBzaWduYXIgbGVzIGRhZGVzIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgImlnbm9yYSBlbCBjb2xvciBubyB2w6BsaWQgwqslLipzwrsgZW4gbG9nLmdyYXBoQ29sb3JzIgorCisjOiBncmVwLmM6NjY4Cittc2dpZCAiIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgorbXNnc3RyICIiCisKKyM6IGdyZXAuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLCqyVzwrs6IG5vIHMnaGEgcG9ndXQgbGxlZ2lyICVzIgorCisjOiBncmVwLmM6MjE0MSBzZXR1cC5jOjE2NSBidWlsdGluL2Nsb25lLmM6NDExIGJ1aWx0aW4vZGlmZi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmVyIHN0YXQgYSDCqyVzwrsiCisKKyM6IGdyZXAuYzoyMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIsKrJXPCuzogbGVjdHVyYSBjdXJ0YSIKKworIzogaGVscC5jOjIzCittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgImNvbWVuw6dhciB1bmEgw6ByZWEgZGUgdHJlYmFsbCAodmVnZXUgdGFtYsOpOiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICJ0cmViYWxsYXIgZW4gZWwgY2FudmkgYWN0dWFsICh2ZWdldSB0YW1iw6k6IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKKworIzogaGVscC5jOjI1Cittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICJleGFtaW5hciBsYSBoaXN0w7JyaWEgaSBsJ2VzdGF0ICh2ZWdldSB0YW1iw6k6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgImZlciBjcsOpaXhlciwgbWFyY2FyIGkgYWp1c3RhciBsYSB2b3N0cmEgaGlzdMOycmlhIGNvbXVuYSIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJjb2zCt2xhYm9yYXIgKHZlZ2V1IHRhbWLDqTogZ2l0IGhlbHAgd29ya2Zsb3cpIgorCisjOiBoZWxwLmM6MzEKK21zZ2lkICJNYWluIFBvcmNlbGFpbiBDb21tYW5kcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzIKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAiSW50ZXJhY2Npb25hciBhbWIgYWx0cmVzIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIk9yZHJlcyBkZSBiYWl4IG5pdmVsbCAvIE1hbmlwdWxhZG9ycyIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiT3JkcmVzIGRlIGJhaXggbml2ZWxsIC8gSW50ZXJyb2dhZG9ycyIKKworIzogaGVscC5jOjM3Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2luZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgIk9yZHJlcyBkZSBiYWl4IG5pdmVsbCAvIFNpbmNyb25pdHphY2nDsyBkZSBkaXDDsnNpdHMiCisKKyM6IGhlbHAuYzozOAorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiCittc2dzdHIgIk9yZHJlcyBkZSBiYWl4IG5pdmVsbCAvIEFqdWRhbnRzIGludGVybnMiCisKKyM6IGhlbHAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICJvcmRyZXMgZGUgZ2l0IGRpc3BvbmlibGVzIGVuIMKrJXPCuyIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAib3JkcmVzIGRlIGdpdCBkaXNwb25pYmxlcyBkJ2FsdHJlcyBsbG9jcyBlbiBlbCB2b3N0cmUgJFBBVEgiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIiIKKyJBcXVlc3RlcyBzw7NuIG9yZHJlcyBkZWwgR2l0IGhhYml0dWFsbWVudCB1c2FkZXMgZW4gZGl2ZXJzZXMgc2l0dWFjaW9uczoiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAidGlwdXMgZGUgbGxpc3RhdCBkZSBsJ29yZHJlIG5vIGNvbXBhdGlibGUgwqslc8K7IgorCisjOiBoZWxwLmM6NDAzCittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiCittc2dzdHIgIkxlcyBndWllcyBkZSBHaXQgY29tdW5lcyBzw7NuOiIKKworIzogaGVscC5jOjUxMgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAiVmVnZXUgwqtnaXQgaGVscCA8b3JkcmU+wrsgcGVyIGxsZWdpciBzb2JyZSB1biBzdWJvcmRyZSBlc3BlY8OtZmljIgorCisjOiBoZWxwLmM6NTE3Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIk9yZHJlcyBleHRlcm5lcyIKKworIzogaGVscC5jOjUzMgorbXNnaWQgIkNvbW1hbmQgYWxpYXNlcyIKK21zZ3N0ciAiw4BsaWVzIGQnb3JkcmVzIgorCisjOiBoZWxwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIsKrJXPCuyBzZW1ibGEgdW4gb3JkcmUgZGUgZ2l0LCBwZXLDsiBubyBoZW0gcG9ndXRcbiIKKyJleGVjdXRhci1sYS4gUG90IHNlciBxdWUgZ2l0LSVzIGVzdGlndWkgbWFsbcOocz8iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiQWkuIEVsIHZvc3RyZSBzaXN0ZW1hIG5vIGluZm9ybWEgZGUgY2FwIG9yZHJlIGRlIEdpdC4iCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiIgorIkFEVkVSVMOITkNJQTogSGV1IGludm9jYXQgdW4gb3JkcmUgZGUgR2l0IGFtYiBub20gwqslc8K7LCBsYSBxdWFsIG5vIGV4aXN0ZWl4LiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJFbCBwcm9jw6lzIGNvbnRpbnVhcsOgLCBwcmVzc3Vwb3NhbnQgcXVlIHZvbMOtZXUgZGlyIMKrJXPCuy4iCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiIgorIkVsIHByb2PDqXMgY29udGludWFyw6AgZW4gJTAuMWYgc2Vnb25zLCBwcmVzc3Vwb3NhbnQgcXVlIHZvbMOtZXUgZGlyIMKrJXPCuy4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiDCqyVzwrsgbm8gw6lzIHVuIG9yZHJlIGRlIGdpdC4gVmVnZXUgwqtnaXQgLS1oZWxwwrsuIgorCisjOiBoZWxwLmM6Njk5Cittc2dpZCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZCBpcyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIgorbXNnc3RyWzBdICIiCisiXG4iCisiTCdvcmRyZSBtw6lzIHNpbWlsYXIgw6lzIgorbXNnc3RyWzFdICIiCisiXG4iCisiTGVzIG9yZHJlcyBtw6lzIHNpbWlsYXJzIHPDs24iCisKKyM6IGhlbHAuYzo3MTQKK21zZ2lkICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHZlcnNpb24gWzxvcGNpb25zPl0iCisKKyM6IGhlbHAuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiVzOiAlcyAtICVzIgorCisjOiBoZWxwLmM6Nzg3Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisiVm9sw61ldSBkaXIgYWl4w7I/IgorbXNnc3RyWzFdICIiCisiXG4iCisiVm9sw61ldSBkaXIgdW4gZCdhcXVlc3RzPyIKKworIzogaWRlbnQuYzozNDkKK21zZ2lkICIiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogRGlndWV1LW1lIHF1aSBzb3UuXG4iCisiXG4iCisiRXhlY3V0ZXVcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInVzdWFyaUBkb21pbmkuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiRWwgdm9zdHJlIG5vbVwiXG4iCisiXG4iCisicGVyIGEgZXN0YWJsaXIgbGEgaWRlbnRpdGF0IHByZWRldGVybWluYWRhIGRlbCB2b3N0cmUgY29tcHRlLlxuIgorIk9tZXRldSAtLWdsb2JhbCBwZXIgYSBlc3RhYmxpciBsYSBpZGVudGl0YXQgbm9tw6lzIGVuIGFxdWVzdCBkaXDDsnNpdC5cbiIKKworIzogaWRlbnQuYzozNzkKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICIiCisibm8gcydoYSBwcm9wb3JjaW9uYXQgY2FwIGFkcmXDp2EgZWxlY3Ryw7JuaWNhIGkgbGEgZGV0ZWNjacOzIGF1dG9tw6B0aWNhIGVzdMOgICIKKyJpbmhhYmlsaXRhZGEiCisKKyM6IGlkZW50LmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgIiIKKyJubyBzJ2hhIHBvZ3V0IGRldGVjdGFyIGF1dG9tw6B0aWNhbWVudCB1bmEgYWRyZcOnYSBlbGVjdHLDsm5pY2EgdsOgbGlkYSAocydoYSAiCisicmVidXQgwqslc8K7KSIKKworIzogaWRlbnQuYzo0MDEKK21zZ2lkICJubyBuYW1lIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIiIKKyJubyBzJ2hhIHByb3BvcmNpb25hdCBjYXAgbm9tIGkgbGEgZGV0ZWNjacOzIGF1dG9tw6B0aWNhIGVzdMOgIGluaGFiaWxpdGFkYSIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBkZXRlY3RhciBhdXRvbcOgdGljYW1lbnQgZWwgbm9tIChzJ2hhIHJlYnV0IMKrJXPCuykiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAibm9tIGQnaWRlbnRpdGF0IGJ1aXQgKHBlciA8JXM+KSBubyDDqXMgcGVybcOocyIKKworIzogaWRlbnQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZSBjb25zaXN0cyBvbmx5IG9mIGRpc2FsbG93ZWQgY2hhcmFjdGVyczogJXMiCittc2dzdHIgImVsIG5vbSBjb250w6kgbm9tw6lzIGNhcsOgY3RlcnMgbm8gcGVybWVzb3M6ICVzIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0IGRlIGRhdGEgbm8gdsOgbGlkOiAlcyIKKworIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAibCdlbnRyYWRhIMKrJXPCuyBhIGwnYXJicmUgJXMgdMOpIG1vZGUgZCdhcmJyZSwgcGVyw7Igbm8gw6lzIHVuIGFyYnJlIgorCisjOiBsaXN0LW9iamVjdHMuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyBibG9iIG1vZGUsIGJ1dCBpcyBub3QgYSBibG9iIgorbXNnc3RyICJsJ2VudHJhZGEgwqslc8K7IGEgbCdhcmJyZSAlcyB0w6kgbW9kZSBibG9iLCBwZXLDsiBubyDDqXMgdW4gYmxvYiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIGwnYXJyZWwgZGUgbCdhcmJyZSBwZXIgbGEgY29taXNzacOzICVzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWNjZWRpciBhIMKrJXPCuyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjU4Cittc2dpZCAiZXhwZWN0ZWQgJ3RyZWU6PGRlcHRoPiciCittc2dzdHIgInMnZXNwZXJhdmEgwqt0cmVlOjxwcm9mdW5kaXRhdD7CuyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciCittc2dzdHIgImZpbHRyZSBkJ2VzcGVjaWZpY2FjacOzIG5vIHbDoGxpZDogwqslc8K7IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVzdCBlc2NhcGUgY2hhciBpbiBzdWItZmlsdGVyLXNwZWM6ICclYyciCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTQ0Cittc2dpZCAiZXhwZWN0ZWQgc29tZXRoaW5nIGFmdGVyIGNvbWJpbmU6IgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgIm5vIGVzIHBvZGVuIGNvbWJpbmFyIG3Dumx0aXBsZXMgZXNwZWNpZmljYWNpb25zIGRlIGZpbHRyYXRnZSIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgY3JlYXIgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJTZW1ibGEgcXVlIHVuIGFsdHJlIHByb2PDqXMgZGUgZ2l0IHMnZXN0w6AgZXhlY3V0YW50IGVuIGFxdWVzdFxuIgorImRpcMOyc2l0LCBwZXIgZXhlbXBsZSwgdW4gZWRpdG9yIG9iZXJ0IHBlciDCq2dpdCBjb21taXTCuy4gXG4iCisiQXNzZWd1cmV1LXZvcyBxdWUgdG90cyBlbHMgcHJvY2Vzc29zIHMnaGFnaW4gYWNhYmF0IGlcbiIKKyJsbGF2b3JzIHByb3ZldSBkZSBub3UuIFNpIGVuY2FyYSBmYWxsYSwgcG90IHNlciBxdWUgdW4gcHJvY8OpcyBkZVxuIgorImdpdCBoYSB0aW5ndXQgdW4gZXJyb3I6XG4iCisiZWxpbWluZXUgZWwgZml0eGVyIG1hbnVhbG1lbnQgcGVyIGEgY29udGludWFyLiIKKworIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNyZWFyIMKrJXMubG9ja8K7OiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbGEgbWVtw7JyaWEgY2F1IgorCisjOiBtZXJnZS5jOjEwNyByZXJlcmUuYzo3MjAgYnVpbHRpbi9hbS5jOjE4NzQgYnVpbHRpbi9hbS5jOjE5MDgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MzkgYnVpbHRpbi9jaGVja291dC5jOjc5OCBidWlsdGluL2Nsb25lLmM6ODA5CisjOiBidWlsdGluL3N0YXNoLmM6MjY0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIHVuIGZpdHhlciBkJ8OtbmRleCBub3UiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NworbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoY29taXNzacOzIGVycsOybmlhKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRpbmZvX2NhY2hlIGhhIGZhbGxhdCBwZXIgYWwgY2Ftw60gwqslc8K7OyBpbnRlcnJvbXBlbnQgbGEgZnVzacOzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICIiCisiYWRkaW5mb19jYWNoZSBoYSBmYWxsYXQgYWwgcmVmcmVzY2FyIGVsIGNhbcOtIMKrJXPCuzsgaW50ZXJyb21wZW50IGxhIGZ1c2nDsy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNyZWFyIGVsIGNhbcOtIMKrJXPCuyVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiUydlc3TDoCBlbGltaW5hbnQgJXMgcGVyIGEgZmVyIGVzcGFpIHBlciBhbCBzdWJkaXJlY3RvcmlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTEwIG1lcmdlLXJlY3Vyc2l2ZS5jOjkyOQorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogcG90c2VyIHVuIGNvbmZsaWN0ZSBEL0Y/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJzJ2VzdMOgIHJlZnVzYW50IHBlcmRyZSBlbCBmaXR4ZXIgbm8gc2VndWl0IGEgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjAgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGwnb2JqZWN0ZSAlcyDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICJibG9iIGVzcGVyYXQgcGVyIGEgJXMgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7OiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmZXIgbCdlbmxsYcOnIHNpbWLDsmxpYyDCqyVzwrs6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIm5vIHNlIHNhcCBxdcOoIGZlciBhbWIgJTA2byAlcyDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmdXNpb25hciBlbCBzdWJtw7JkdWwgJXMgKG5vIGVzdMOgIGFnYWZhdCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZnVzaW9uYXIgZWwgc3VibcOyZHVsICVzIChubyBoaSBoYSBjb21pc3Npb25zKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiIgorIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZnVzaW9uYXIgZWwgc3VibcOyZHVsICVzIChsZXMgY29taXNzaW9ucyBubyAiCisic2VndWVpeGVuIG1lcmdlLWJhc2UpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjIxIG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyB0byB0aGUgZm9sbG93aW5nIGNvbW1pdDoiCittc2dzdHIgIkF2YW7Dp2FtZW50IHLDoHBpZCBkZWwgc3VibcOyZHVsICVzIGEgbGEgc2Vnw7xlbnQgY29taXNzacOzOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyNCBtZXJnZS1yZWN1cnNpdmUuYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMiCittc2dzdHIgIkF2YW7Dp2FtZW50IHLDoHBpZCBhbCBzdWJtw7JkdWwgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIgorbXNnc3RyICIiCisiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmdXNpb25hciBlbCBzdWJtw7JkdWwgJXMgKHNlbnNlIGF2YW7Dp2FtZW50IHLDoHBpZCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjQKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIlMnaGEgdHJvYmF0IHVuYSBwb3NzaWJsZSByZXNvbHVjacOzIGRlIGZ1c2nDsyBwZWwgc3VibcOyZHVsOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG11bHRpcGxlIG1lcmdlcyBmb3VuZCkiCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGZ1c2lvbmFyIGVsIHN1Ym3DsmR1bCAlcyAocydoYW4gdHJvYmF0IG3Dumx0aXBsZXMgIgorImZ1c2lvbnMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQ5Cittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXhlY3V0YXIgbGEgZnVzacOzIGludGVybmEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhZmVnaXIgJXMgYSBsYSBiYXNlIGRlIGRhZGVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiUydlc3TDoCBhdXRvZnVzaW9uYW50ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICIiCisiRXJyb3I6IHMnZXN0w6AgcmVmdXNhbnQgcGVyZHJlIGVsIGZpdHhlciBubyBzZWd1aXQgYSAlczsgZW4gY29tcHRlcyBzJ2hhICIKKyJlc2NyaXQgYSAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNURTogKCVzL3N1cHJlc3Npw7MpOiAlcyBzdXByaW1pdCBlbiAlcyBpICVzIGVuICVzLiBMYSB2ZXJzacOzICVzIGRlICVzICIKKyJzJ2hhIGRlaXhhdCBlbiBsJ2FyYnJlLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJQ1RFOiAoJXMvc3VwcmVzc2nDsyk6ICVzIHN1cHJpbWl0IGVuICVzIGkgJXMgYSAlcyBlbiAlcy4gTGEgdmVyc2nDsyAlcyAiCisiZGUgJXMgcydoYSBkZWl4YXQgZW4gbCdhcmJyZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNURTogKCVzL3N1cHJlc3Npw7MpOiAlcyBzdXByaW1pdCBlbiAlcyBpICVzIGVuICVzLiBMYSB2ZXJzacOzICVzIGRlICVzICIKKyJzJ2hhIGRlaXhhdCBlbiBsJ2FyYnJlIGEgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVEU6ICglcy9zdXByZXNzacOzKTogJXMgc3VwcmltaXQgZW4gJXMgaSAlcyBhICVzIGVuICVzLiBMYSB2ZXJzacOzICVzICIKKyJkZSAlcyBzJ2hhIGRlaXhhdCBlbiBsJ2FyYnJlIGEgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTM0Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICJjYW52aSBkZSBub20iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJjYW52aWF0IGRlIG5vbSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYxNCBtZXJnZS1yZWN1cnNpdmUuYzoyNTMwIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICJTJ2VzdMOgIHJlZnVzYW50IGEgcGVyZHJlIGVsIGZpdHhlciBicnV0IGEgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgcmVmdXNhbnQgcGVyZHJlIGVsIGZpdHhlciBubyBzZWd1aXQgYSDCqyVzwrssIG1hbGdyYXQgcXVlIGVzdMOgIGVuIG1pZyAiCisiZGUgbCdvcGVyYWNpw7MuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisiQ09ORkxJQ1RFIChjYW52aSBkZSBub20vYWZlZ2ltZW50KTogQ2FudmkgZGUgbm9tICVzLT4lcyBhICVzLiAgUydoYSBhZmVnaXQgIgorIiVzIGEgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIMOpcyB1biBkaXJlY3RvcmkgZW4gJXM7IHMnZXN0w6AgYWZlZ2ludCBjb20gYSAlcyBlbiBsbG9jIGQnYWl4w7IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKyJzJ2VzdMOgIHJlZnVzYW50IHBlcmRyZSBlbCBmaXR4ZXIgbm8gc2VndWl0IGEgJXM7IGVuIGNvbXB0ZXMsIHMnZXN0w6AgYWZlZ2ludCAiCisiY29tIGEgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNURSAoY2FudmkgZGUgbm9tL2NhbnZpIGRlIG5vbSk6IENhbnZpIGRlIG5vbSDCqyVzwrstPsKrJXPCuyBlbiBsYSBicmFuY2EgIgorIsKrJXPCuyBjYW52aSBkZSBub20gwqslc8K7LT7CqyVzwrsgZW4gwqslc8K7JXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NDIKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAoZGVpeGF0IHNlbnNlIHJlc29sdWNpw7MpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNURSAoY2FudmkgZGUgbm9tL2NhbnZpIGRlIG5vbSk6IENhbnZpIGRlIG5vbSAlcy0+JXMgZW4gJXMuIENhbnZpIGRlICIKKyJub20gJXMtPiVzIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElDVEUgKGNhbnZpIGRlIG5vbS9jYW52aSBkZSBub20pOiBjYW52aSBkZSBub20gJXMtPiVzIGVuICVzLiBDYW52aSBkZSAiCisibm9tIGRlIGRpcmVjdG9yaSAlcy0+JXMgZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIkFWw41TOiBTJ2VzdMOgIGV2aXRhbnQgYXBsaWNhciBlbCBjYW52aSBkZSBub20gJXMgLT4gJXMgYSAlcywgcGVycXXDqCAlcyBlbGwgIgorIm1hdGVpeCBqYSBoYXZpYSBjYW52aWF0IGRlIG5vbS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGwnb2JqZWN0ZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAibCdvYmplY3RlICVzIG5vIMOpcyB1biBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICJtb2RpZmljYWNpw7MiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAibW9kaWZpY2F0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDk4Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiY29udGluZ3V0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTAyCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAiYWZlZ2ltZW50L2FmZWdpbWVudCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIlMnaGEgb23DqHMgJXMgKGVsIGZ1c2lvbmF0IMOpcyBpZ3VhbCBhIGwnZXhpc3RlbnQpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ3IGdpdC1zdWJtb2R1bGUuc2g6OTkzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzdWJtw7JkdWwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIkNPTkZMSUNURSAoJXMpOiBDb25mbGljdGUgZGUgZnVzacOzIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJTJ2VzdMOgIGFmZWdpbnQgY29tIGEgJXMgZW4gbGxvYyBkJ2FpeMOyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkICIKKyJpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAiCisiJXM7IG1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIlMnZXN0w6AgZWxpbWluYW50ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDA4Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgImZpdHhlci9kaXJlY3RvcmkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MTMKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAiZGlyZWN0b3JpL2ZpdHhlciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNURSAoJXMpOiBIaSBoYSB1biBkaXJlY3RvcmkgYW1iIG5vbSAlcyBlbiAlcy4gUydlc3TDoCBhZmVnaW50ICVzIGNvbSBhICIKKyIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIlMnZXN0w6AgYWZlZ2ludCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJDT05GTElDVEUgKGFmZWdpbWVudC9hZmVnaW1lbnQpOiBDb25mbGljdGUgZGUgZnVzacOzIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDgyCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAiSmEgZXN0w6AgYWwgZGlhISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgImxhIGZ1c2nDsyBkZWxzIGFyYnJlcyAlcyBpICVzIGhhIGZhbGxhdCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU5NQorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICJTJ2VzdMOgIGZ1c2lvbmFudDoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gInMnaGEgdHJvYmF0ICV1IGF2YW50cGFzc2F0IGVuIGNvbcO6OiIKK21zZ3N0clsxXSAicydoYW4gdHJvYmF0ICV1IGF2YW50cGFzc2F0cyBlbiBjb23DujoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NTgKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgImxhIGZ1c2nDsyBubyBoYSByZXRvcm5hdCBjYXAgY29taXNzacOzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisiRWxzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmFuIHBlciBsYSBmdXNpw7M6XG4iCisiICAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZSDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4MzIgYnVpbHRpbi9tZXJnZS5jOjY5NCBidWlsdGluL21lcmdlLmM6ODc0Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ8OtbmRleC4iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJlbCBjYW3DrSDCqyVzwrsgbm8gdMOpIGxhIHNldmEgdmVyc2nDsyIKKworIzogbWlkeC5jOjEwOAorbXNnaWQgImludmFsaWQgY2h1bmsgb2Zmc2V0ICh0b28gbGFyZ2UpIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDcKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE1MQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgIiIKKworIzogbWlkeC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6Mjg4Cittc2dpZCAiZXJyb3IgcHJlcGFyaW5nIHBhY2tmaWxlIGZyb20gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGVsIGZpdHhlciBkJ29yZHJlcyDCqyVzwrsiCisKKyM6IG1pZHguYzo0NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBvYnJpciDCqyVzwrsiCisKKyM6IG1pZHguYzo1MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2NhdGUgb2JqZWN0ICVkIGluIHBhY2tmaWxlIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBsJ29iamVjdGUgwqslc8K7LiIKKworIzogbWlkeC5jOjg0MgorIywgZnV6enkKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbmV0ZWphciBsJ8OtbmRleCIKKworIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTA1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbmV0ZWphciBsJ8OtbmRleCIKKworIzogbWlkeC5jOjExMDgKK21zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiUydlc3RhbiBjZXJjYW50IGZpdHhlcnMgZGUgcGFxdWV0cyByZWZlcmVuY2lhdHMiCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMjgKK21zZ2lkICJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIlMnZXN0YW4gb3JkZW5hbnQgZWxzIG9iamVjdGVzIHBlciBmaXR4ZXIgZGUgcGFxdWV0IgorCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAiUydlc3RhbiB2ZXJpZmljYW50IGVscyBkZXNwbGHDp2FtZW50cyBkZWxzIG9iamVjdGVzIgorCisjOiBtaWR4LmM6MTE4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjayBlbnRyeSBmb3Igb2lkWyVkXSA9ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFmZWdpciB1bmEgZW50cmFkYSBkZSBjYXUgcGVyIGEgJXMiCisKKyM6IG1pZHguYzoxMTg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgZml0eGVyIGQnb3JkcmVzIMKrJXPCuyIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTIyMAorbXNnaWQgIkNvdW50aW5nIHJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiUydlc3RhbiBjb21wdGFudCBlbHMgb2JqZWN0ZXMgcmVmZXJlbmNpYXRzIgorCisjOiBtaWR4LmM6MTIzMAorbXNnaWQgIkZpbmRpbmcgYW5kIGRlbGV0aW5nIHVucmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIlMnZXN0YW4gY2VyY2FudCBpIHN1cHJpbWludCBlbHMgZml0eGVycyBkZSBwYXF1ZXRzIG5vIHJlZmVyZW5jaWF0cyIKKworIzogbWlkeC5jOjEzODgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIGVsIHBhY2stb2JqZWN0cyIKKworIzogbWlkeC5jOjE0MDcKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmaW5hbGl0emFyIGVsIHBhY2stb2JqZWN0cyIKKworIzogbmFtZS1oYXNoLmM6NTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGZpbDogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsOiAlcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisiTm8gaGV1IGFjYWJhdCBsYSB2b3N0cmEgZnVzacOzIGRlIG5vdGVzIHByw6h2aWEgKCVzIGV4aXN0ZWl4KS5cbiIKKyJVc2V1IMKrZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0wrsgbyDCq2dpdCBub3RlcyBtZXJnZSAtLWFib3J0wrsgcGVyIGEgY29tZXRyZS8iCisiYXZvcnRhciBsYSBmdXNpw7MgcHLDqHZpYSBhYmFucyBkZSBjb21lbsOnYXIgdW5hIGZ1c2nDsyBkZSBub3RlcyBub3ZhLiIKKworIzogbm90ZXMtbWVyZ2UuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLiIKK21zZ3N0ciAiTm8gaGV1IGNvbmNsw7JzIGxhIHZvc3RyYSBmdXNpw7MgZGUgbm90ZXMgKCVzIGV4aXN0ZWl4KS4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIk5vIGVzIHBvdCBjb21ldHJlIHVuIGFyYnJlIGRlIG5vdGVzIG5vIGluaWNpYWxpdHphdCAvIG5vIHJlZmVyZW5jaWF0IgorCisjOiBub3Rlcy11dGlscy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIlZhbG9yIGRlIG5vdGVzLnJld3JpdGVNb2RlIGVycm9uaTogwqslc8K7IgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiUydlc3TDoCByZWZ1c2FudCByZWVzY3JpdXJlIGxlcyBub3RlcyBlbiAlcyAoZm9yYSBkZSByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3IgZXJyb25pIGRlICVzOiDCqyVzwrsiCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICJ0aXB1cyBkJ29iamVjdGUgwqslc8K7IG5vIHbDoGxpZCIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAibCdvYmplY3RlICVzIMOpcyAlcywgbm8gcGFzICVzIgorCisjOiBvYmplY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGhhcyB1bmtub3duIHR5cGUgaWQgJWQiCittc2dzdHIgImwnb2JqZWN0ZSAlcyB0w6kgdW4gaWRlbnRpZmljYWRvciBkZSB0aXB1cyAlZCBkZXNjb25lZ3V0IgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZTogJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiIgorCisjOiBwYWNrZmlsZS5jOjY0MQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJkZXNwbGHDp2FtZW50IGFiYW5zIGRlIGxhIGZpIGRlbCBmaXR4ZXIgZGUgcGFxdWV0ICguaWR4IHRyZW5jYXQ/KSIKKworIzogcGFja2ZpbGUuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAiIgorImRlc3BsYcOnYW1lbnQgYWJhbnMgZCdpbmljaSBkJ8OtbmRleCBkZSBwYXF1ZXQgcGVyIGEgJXMgKMOtbmRleCBjb3Jyb21wdXQ/KSIKKworIzogcGFja2ZpbGUuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAiIgorImRlc3BsYcOnYW1lbnQgbcOpcyBlbmxsw6AgZGUgbGEgZmkgZCfDrW5kZXggZGUgcGFxdWV0IHBlciBhICVzICjDrW5kZXggdHJ1bmNhdD8pIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJXMgcmVxdWVyZWl4IHVuIHZhbG9yIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIMOpcyBpbmNvbXBhdGlibGUgYW1iICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiJXM6IMOpcyBpbmNvbXBhdGlibGUgYW1iIGFsZ3VuYSBhbHRyYSBjb3NhIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiVzIG5vIGFjY2VwdGEgY2FwIHZhbG9yIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXNuJ3QgYXZhaWxhYmxlIgorbXNnc3RyICIlcyBubyDDqXMgZGlzcG9uaWJsZSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMyBwYXJzZS1vcHRpb25zLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIm9wY2nDsyBkZXNjb25lZ3VkYSDCqyVzwrsiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAiwqtzd2l0Y2jCuyDCqyVjwrsgZGVzY29uZWd1dCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICJvcGNpw7Mgbm8gYXNjaWkgZGVzY29uZWd1ZGEgZW4gbGEgY2FkZW5hOiDCqyVzwrsiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODgKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIsO6czogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiIG86ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTU1Cittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLU5VTSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBvZiAtLSVzIgorbXNnc3RyICLDoGxpZXMgZGUgLS0lcyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJsJ29wY2nDsyDCqyVzwrsgZXNwZXJhIHVuIHZhbG9yIG51bcOocmljIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICJkYXRhIGRlIHZlbmNpbWVudCDCqyVzwrsgbWFsIGZvcm1hZGEiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgImwnb3BjacOzIMKrJXPCuyBlc3BlcmEgwqthbHdheXPCuywgwqthdXRvwrsgbyDCq25ldmVywrsiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tIGQnb2JqZWN0ZSDCqyVzwrsgbWFsIGZvcm1hdCIKKworIzogcGF0aC5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBmZXIgJXMgZXNjcml2aWJsZSBwZWwgZ3J1cCIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAiIgorIkVsIGNhcsOgY3RlciBkJ2VzY2FwYW1lbnQgwqtcXMK7IG5vIGVzdMOgIHBlcm3DqHMgY29tIGEgw7psdGltIGNhcsOgY3RlciBlbiB1biAiCisidmFsb3IgZCd1biBhdHJpYnV0IgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiTm9tw6lzIGVzIHBlcm1ldCB1bmEgZXNwZWNpZmljYWNpw7MgwqthdHRyOsK7LiIKKworIzogcGF0aHNwZWMuYzoxNTEKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgInVuYSBlc3BlY2lmaWNhY2nDsyBkJ2F0cmlidXQgbm8gcG90IGVzdGFyIGJ1aWRhIgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICJub20gZCdhdHJpYnV0IG5vIHbDoGxpZCAlcyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisiZWxzIHBhcsOgbWV0cmVzIGQnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gwqtnbG9iwrsgaSDCq25vZ2xvYsK7IGdsb2JhbHMgc8OzbiAiCisiaW5jb21wYXRpYmxlcyIKKworIzogcGF0aHNwZWMuYzoyNjYKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisiZWwgcGFyw6BtZXRyZSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIMKrbGl0ZXJhbMK7IGdsb2JhbCDDqXMgaW5jb21wYXRpYmxlIGFtYiAiCisidG90cyBlbHMgYWx0cmVzIHBhcsOgbWV0cmVzIGQnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gZ2xvYmFscyIKKworIzogcGF0aHNwZWMuYzozMDYKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgInBhcsOgbWV0cmUgbm8gdsOgbGlkIHBlciBhIGxhIG3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIMKrcHJlZml4wrsiCisKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIk3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIG5vIHbDoGxpZGEgJyUuKnMnIGVuIMKrJXPCuyIKKworIzogcGF0aHNwZWMuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICLCqynCuyBtYW5jYW50IGFsIGZpbmFsIGRlIGxhIG3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIGVuIMKrJXPCuyIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIk3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIG5vIGltcGxlbWVudGFkYSDCqyVjwrsgZW4gwqslc8K7IgorCisjOiBwYXRoc3BlYy5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6IMKrbGl0ZXJhbMK7IGkgwqtnbG9iwrsgc8OzbiBpbmNvbXBhdGlibGVzIgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiDCqyVzwrsgw6lzIGZvcmEgZGVsIGRpcMOyc2l0IgorCisjOiBwYXRoc3BlYy5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIsKrJXPCuyAobW5lbcOybmljOiDCqyVjwrspIgorCisjOiBwYXRoc3BlYy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisiJXM6IGFxdWVzdGEgb3JkcmUgbm8gZXN0w6AgYWRtZXNhIGFtYiBsYSBtw6BnaWEgZCdlc3BlY2lmaWNhY2nDsyBkZSBjYW3DrTogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibCdlc3BlY2lmaWNhY2nDsyBkZSBjYW3DrSDCqyVzwrsgw6lzIG3DqXMgZW5sbMOgIGQndW4gZW5sbGHDpyBzaW1iw7JsaWMiCisKKyM6IHBhdGhzcGVjLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBwYXF1ZXQgZGUgYnVpZGF0Z2UiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIHBhcXVldCBkZWxpbSIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGVsIHBhcXVldCBkZSBidWlkYXRnZSIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sOiBsb25naXR1ZCBkZSBsw61uaWEgaW1wb3NzaWJsZSIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICJoYSBmYWxsYXQgbCdlc2NyaXB0dXJhIGRlbCBwYXF1ZXQgYW1iIGZvcm1hdCIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAiIgorIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgcGFxdWV0IC0gbGVzIGRhZGVzIGV4Y2VkZWl4ZW4gbGEgbWlkYSBtw6B4aW1hIGRlbCAiCisicGFxdWV0IgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgcGFxdWV0IgorCisjOiBwa3QtbGluZS5jOjI5NQorbXNnaWQgInJlYWQgZXJyb3IiCittc2dzdHIgImVycm9yIGRlIGxlY3R1cmEiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgImVsIHJlbW90IGhhIHBlbmphdCBpbmVzcGVyYWRhbWVudCIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sOiBjYXLDoGN0ZXIgZGUgbG9uZ2l0dWQgZGUgbMOtbmlhIGVycm9uaTogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2w6IGxvbmdpdHVkIGRlIGzDrW5pYSBlcnLDsm5pYSAlZCIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJyb3IgcmVtb3Q6ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiUydlc3TDoCBhY3R1YWxpdHphbnQgbCfDrW5kZXgiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGZpbDogJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIGZvcm1hdCAtLXByZXR0eSIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6MjMKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIlJlbW90IHNlbnNlIFVSTCIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgYGxvZ2AiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgaW5pY2lhciDCq2xvZ8K7IgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGxhIHNvcnRpZGEgZGUgwqtsb2fCuyIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7Mgwqslc8K7IgorCisjOiByYW5nZS1kaWZmLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBnaXQgaGVhZGVyICclLipzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgbGEgY2Fww6dhbGVyYSBkZSBsYSBnaWYgwqslLipzwrsiCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBnZW5lcmFyIGVsIGRpZmYiCisKKyM6IHJhbmdlLWRpZmYuYzo1MTggcmFuZ2UtZGlmZi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZGUgcmVnaXN0cmUgcGVyIMKrJXPCuyIKKworIzogcmVhZC1jYWNoZS5jOjY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIKK21zZ3N0ciAibm8gcydhZmVnaXLDoCBsJ8OgbGllcyDCqyVzwrs6ICjCqyVzwrsgamEgZXhpc3RlaXggZW4gbCfDrW5kZXgpIgorCisjOiByZWFkLWNhY2hlLmM6Njk2Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIm5vIGVzIHBvdCBjcmVhciB1biBibG9iIGJ1aXQgYSBsYSBiYXNlIGRlIGRhZGVzIGQnb2JqZWN0ZXMiCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlczogbm9tw6lzIHBvdCBhZmVnaXIgZml0eGVycyBub3JtYWxzLCBlbmxsYcOnb3Mgc2ltYsOybGljcyBvIGRpcmVjdG9yaXMgZ2l0IgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIsKrJXPCuyBubyBhc3NlbnlhbGEgdW5hIGNvbWlzc2nDsyIKKworIzogcmVhZC1jYWNoZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGluZGV4YXIgZWwgZml0eGVyIMKrJXPCuyIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWZlZ2lyIMKrJXPCuyBhIGwnw61uZGV4IgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIMKrc3RhdMK7IGEgwqslc8K7IgorCisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICLCqyVzwrsgYXBhcmVpeCBjb20gYSBmaXR4ZXIgaSBjb20gYSBkaXJlY3RvcmkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNTMxCittc2dpZCAiUmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiQWN0dWFsaXR6YSBsJ8OtbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gZXN0w6AgZXN0YWJsZXJ0YSwgcGVyw7IgZWwgdmFsb3Igbm8gw6lzIHbDoGxpZC5cbiIKKyJTJ2VzdMOgIHVzYW50IGxhIHZlcnNpw7MgJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiR0lUX0lOREVYX1ZFUlNJT04gZXN0w6AgZXN0YWJsZXJ0YSwgcGVyw7IgZWwgdmFsb3Igbm8gw6lzIHbDoGxpZC5cbiIKKyJTJ2VzdMOgIHVzYW50IGxhIHZlcnNpw7MgJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICJzaWduYXR1cmEgbWFsbWVzYSAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICJ2ZXJzacOzIGQnw61uZGV4IGluY29ycmVjdGEgJWQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI0Cittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgInNpZ25hdHVyYSBzaGExIG1hbG1lc2EgYWwgZml0eGVyIGQnw61uZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MTc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIKK21zZ3N0ciAibCfDrW5kZXggdXNhIGwnZXh0ZW5zacOzICUuNHMsIHF1ZSBubyBlcyBwb3QgZW50ZW5kcmUiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICJzJ2VzdMOgIGlnbm9yYW50IGwnZXh0ZW5zacOzICUuNHMiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAiRm9ybWF0IGQnZW50cmFkYSBkJ8OtbmRleCBkZXNjb25lZ3VkYSDCqzB4JTA4eMK7IgorCisjOiByZWFkLWNhY2hlLmM6MTgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICJjYW1wIGRlbCBub20gbWFsIGZvcm1hdGF0IGwnaW5kZXgsIGNhbcOtIGEgcHJvcCDCqyVzwrsiCisKKyM6IHJlYWQtY2FjaGUuYzoxODY2Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE4NjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgIm5vbSBkJ2lkZW50aXRhdCBidWl0IChwZXIgPCVzPikgbm8gw6lzIHBlcm3DqHMiCisKKyM6IHJlYWQtY2FjaGUuYzoxODcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAibm8gcydoYW4gcG9ndXQgY3JlYXIgZGlyZWN0b3JpcyBwZXIgJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoxOTc4IHJlYWQtY2FjaGUuYzoyMjY2IHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogYnVpbHRpbi9hZGQuYzo0OTkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzggYnVpbHRpbi9jaGVja291dC5jOjQ3MAorIzogYnVpbHRpbi9jaGVja291dC5jOjY1NCBidWlsdGluL2NsZWFuLmM6OTY3IGJ1aWx0aW4vY29tbWl0LmM6MzY3CisjOiBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0OTkgYnVpbHRpbi9tdi5jOjE0NQorIzogYnVpbHRpbi9yZXNldC5jOjI0NiBidWlsdGluL3JtLmM6MjcxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgImZpdHhlciBkJ8OtbmRleCBtYWxtw6hzIgorCisjOiByZWFkLWNhY2hlLmM6MjExOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBmaWw6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjEzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIlczogcydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBlbHMgZml0eGVycyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsJ8OtbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlczogZml0eGVyIGQnw61uZGV4IG3DqXMgcGV0aXQgcXVlIHMnZXNwZXJhdmEiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBubyBlcyBwb3QgbWFwYXIgZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MjIxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBmaWw6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI0NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZmlsOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVmcmVzY2FyIGwnw61uZGV4IGNvbXBhcnRpdCDCqyVzwrsiCisKKyM6IHJlYWQtY2FjaGUuYzoyMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIsOtbmRleCBtYWxtw6hzLCBzJ2VzcGVyYXZhICVzIGEgJXMsIHMnaGEgcmVidXQgJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMDIxIHN0cmJ1Zi5jOjExNDUgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0YW5jYXIgwqslc8K7IgorCisjOiByZWFkLWNhY2hlLmM6MzEyNCBzZXF1ZW5jZXIuYzoyNDI5IHNlcXVlbmNlci5jOjQwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmZXIgc3RhdCBhIMKrJXPCuyIKKworIzogcmVhZC1jYWNoZS5jOjMxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZGlyZWN0b3JpIGdpdDogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGRlc2VubGxhw6dhcjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIHJldmlzacOzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMzMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAibm8gZXMgcG90IGNhbnZpYXIgZGUgZGlyZWN0b3JpIGEgJXMiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCittc2dzdHIgIiIKKyJObyBzJ2hhIHJlY29uZWd1dCBlbCBwYXLDoG1ldHJlICVzIHBlciByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gUydlc3TDoCAiCisiaWdub3JhbnQuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozNQorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPcmRyZXM6XG4iCisiIHAsIHBpY2sgPSB1c2EgbGEgY29taXNzacOzXG4iCisiIHIsIHJld29yZCA9IHVzYSBsYSBjb21pc3Npw7MsIHBlcsOyIGVkaXRhIGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDs1xuIgorIiBlLCBlZGl0ID0gdXNhIGxhIGNvbWlzc2nDsywgcGVyw7IgYXR1cmEndCBwZXIgYSBlc21lbmFyXG4iCisiIHMsIHNxdWFzaCA9IHVzYSBsYSBjb21pc3Npw7MsIHBlcsOyIGZ1c2lvbmEnbCBhIGxhIGNvbWlzc2nDsyBwcsOodmlhXG4iCisiIGYsIGZpeHVwID0gY29tIFwic3F1YXNoXCIsIHBlcsOyIGRlc2NhcnRhIGVsIG1pc3NhdGdlIGRlIHJlZ2lzdHJlIGQnYXF1ZXN0YSAiCisiY29taXNzacOzXG4iCisiIHgsIGV4ZWMgPSBleGVjdXRhIGwnb3JkcmUgKGxhIHJlc3RhIGRlIGxhIGzDrW5pYSkgdXNhbnQgbCdpbnTDqHJwcmV0ICIKKyJkJ29yZHJlc1xuIgorIiBkLCBkcm9wID0gZWxpbWluYSBsYSBjb21pc3Npw7NcbiIKKyJcbiIKKyJFcyBwb3QgY2FudmlhciBsJ29yZHJlIGQnYXF1ZXN0ZXMgbMOtbmllczsgcydleGVjdXRlbiBkZSBkYWx0IGEgYmFpeC5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiUmViYXNhICRzaG9ydHJldmlzaW9ucyBzb2JyZSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IG9yZHJlKSIKK21zZ3N0clsxXSAiUmViYXNhICRzaG9ydHJldmlzaW9ucyBzb2JyZSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IG9yZHJlcykiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vIGVsaW1pbmV1IGNhcCBsw61uaWEuIFVzZXUgwqtkcm9wwrsgZXhwbMOtY2l0YW1lbnQgcGVyIGEgZWxpbWluYXIgdW5hICIKKyJjb21pc3Npw7MuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTaSBlbGltaW5ldSB1bmEgbMOtbmlhIGFxdcOtLCBFUyBQRVJEUsOAIEFRVUVMTEEgQ09NSVNTScOTLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODcxCittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRXN0ZXUgZWRpdGFudCBlbCBmaXR4ZXIgZGUgY29zZXMgYSBmZXIgZCd1biDCq3JlYmFzZcK7IGludGVyYWN0aXUgZW4gbWFyeGEuXG4iCisiUGVyIGEgY29udGludWFyIGVsIMKrcmViYXNlwrsgZGVzcHLDqXMgZCdlZGl0YXIsIGV4ZWN1dGV1OlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTm8gb2JzdGFudCwgc2kgZWxpbWluZXUgdG90LCBzJ2F2b3J0YXLDoCBlbCDCq3JlYmFzZcK7LlxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIlRpbmd1ZXUgZW4gY29tcHRlIHF1ZSBsZXMgY29taXNzaW9ucyBidWlkZXMgZXN0YW4gY29tZW50YWRlcyIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA1IHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzUzNgorIzogc2VxdWVuY2VyLmM6MzU2MiBzZXF1ZW5jZXIuYzo1MjYzIGJ1aWx0aW4vZnNjay5jOjM0NiBidWlsdGluL3JlYmFzZS5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSDCqyVzwrsiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcycuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNvcGlhciDCqyVzwrsgYSDCqyVzwrsuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOlxuIgorbXNnc3RyICIiCisiQWR2ZXJ0w6huY2lhOiBwb3Qgc2VyIHF1ZSBhbGd1bmVzIGNvbWlzc2lvbnMgcydoYWdpbiBkZXNjYXJ0YXQgIgorImFjY2lkZW50YWxtZW50LlxuIgorIkxlcyBjb21pc3Npb25zIGRlc2NhcnRhZGVzIChtw6lzIG5vdmEgYSBtw6lzIHZlbGxhKTpcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBlciBhIGV2aXRhciBhcXVlc3QgbWlzc2F0Z2UsIHVzZXUgXCJkcm9wXCIgcGVyIGEgZWxpbWluYXIgZXhwbMOtY2l0YW1lbnQgdW5hICIKKyJjb21pc3Npw7MuXG4iCisiXG4iCisiVXNldSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgcGVyIGEgY2FudmlhciBlbCBuaXZlbGwgIgorImQnYWR2ZXJ0w6huY2llcy5cbiIKKyJFbHMgY29tcG9ydGFtZW50cyBwb3NzaWJsZXMgc8OzbjogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKworIzogcmVmcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIiVzIG5vIGFwdW50YSBhIHVuIG9iamVjdGUgdsOgbGlkIgorCisjOiByZWZzLmM6NjY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgInMnZXN0w6AgaWdub3JhbnQgbGEgcmVmZXLDqG5jaWEgdHJlbmNhZGEgJXMiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAicydlc3TDoCBpZ25vcmFudCBsYSByZWZlcsOobmNpYSB0cmVuY2FkYSAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciDCqyVzwrsgcGVyIGEgZXNjcmlwdHVyYTogJXMiCisKKyM6IHJlZnMuYzo4MTQgcmVmcy5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgbGEgcmVmZXLDqG5jaWEgwqslc8K7IgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsYSByZWZlcsOobmNpYSDCqyVzwrsgamEgZXhpc3RlaXgiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIklEIGQnb2JqZWN0ZSBubyBlc3BlcmF0IGVuIGVzY3JpdXJlIMKrJXPCuyIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6Mjc5MyBzZXF1ZW5jZXIuYzoyOTk3CisjOiBzZXF1ZW5jZXIuYzozMDExIHNlcXVlbmNlci5jOjMyNjkgc2VxdWVuY2VyLmM6NTE3OSBzdHJidWYuYzoxMTQyCisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGEgwqslc8K7IgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNDAgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyIMKrJXPCuyBwZXIgYSBlc2NyaXB0dXJhIgorCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAiSUQgZCdvYmplY3RlIG5vIGVzcGVyYXQgZW4gc3VwcmltaXIgwqslc8K7IgorCisjOiByZWZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJXMgaXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgInMnZXN0w6AgcmVmdXNhbnQgbGEgcmVmZXLDqG5jaWEgYW1iIG5vbSBtYWxtw6hzIMKrJXPCuyIKKworIzogcmVmcy5jOjEyMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7OiAlcyIKKworIzogcmVmcy5jOjIwMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJub20gZCdpZGVudGl0YXQgYnVpdCAocGVyIDwlcz4pIG5vIMOpcyBwZXJtw6hzIgorCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAibm8gZXN0w6AgcGVybcOocyBhY3R1YWxpdHphciBsZXMgcmVmZXLDqG5jaWVzIGVuIHVuIGVudG9ybiBkZSBxdWFyYW50ZW5hIgorCisjOiByZWZzLmM6MjE1MSByZWZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICLCqyVzwrsgZXhpc3RlaXg7IG5vIGVzIHBvdCBjcmVhciDCqyVzwrsiCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAibm8gZXMgcG9kZW4gcHJvY2Vzc2FyIMKrJXPCuyBpIMKrJXPCuyBhIGxhIHZlZ2FkYSIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlbGltaW5hciBsYSByZWZlcsOobmNpYSAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0OCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHN1cHJpbWlyIGxhIHJlZmVyw6huY2lhICVzOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI1MSByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBzdXByaW1pciBsZXMgcmVmZXLDqG5jaWVzOiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAicmVmc3BlYyBubyB2w6BsaWRhOiDCqyVzwrsiCisKKyM6IHJlZi1maWx0ZXIuYzo0MiB3dC1zdGF0dXMuYzoxOTM4Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAibm8gaGkgw6lzIgorCisjOiByZWYtZmlsdGVyLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQiCittc2dzdHIgImRhdmFudCBwZXIgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgImRhcnJlcmUgcGVyICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZCIKK21zZ3N0ciAiZGF2YW50IHBlciAlZCwgZGFycmVyZSBwZXIgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAiZm9ybWF0IGVzcGVyYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICJjb2xvciBubyByZWNvbmVndXQ6ICUlKGNvbG9yOiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICJ2YWxvciBlbnRlciBlc3BlcmF0IHBlbCBub20gZGUgcmVmZXLDqG5jaWE6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgInZhbG9yIGVudGVyIGVzcGVyYXQgcGVsIG5vbSBkZSByZWZlcsOobmNpYTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgInBhcsOgbWV0cmUgJSUoJXMpIGRlc2NvbmVndXQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKG9iamVjdHR5cGUpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShzdWJqZWN0KSBubyBhY2NlcHRhIHBhcsOgbWV0cmVzIgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgInBhcsOgbWV0cmUgJSUob2JqZWN0c2l6ZSkgbm8gcmVjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IHJlZi1maWx0ZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKHN1YmplY3QpIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJwYXLDoG1ldHJlICUlKHRyYWlsZXJzKSBkZXNjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAidmFsb3IgcG9zaXRpdSBlc3BlcmF0IGNvbnTDqTpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSAlJShjb250ZW50cykgbm8gcmVjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJ2YWxvciBwb3NpdGl1IGVzcGVyYXQgbm9tIGQnb2JqZWN0ZTpjdXJ0PSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgInBhcsOgbWV0cmUgJSUob2JqZWN0bmFtZSkgbm8gcmVjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgImZvcm1hdCBlc3BlcmF0OiAlJShhbGlnbjo8YW1wbGFkYT4sPHBvc2ljacOzPikiCisKKyM6IHJlZi1maWx0ZXIuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBvc2l0aW9uOiVzIgorbXNnc3RyICJwb3NpY2nDsyBubyByZWNvbmVndWRhOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAiYW1wbGFkYSBubyByZWNvbmVndWRhOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJwYXLDoG1ldHJlICUlKGFsaWduKSBubyByZWNvbmVndXQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICJhbXBsYWRhIHBvc2l0aXZhIGVzcGVyYWRhIGFtYiBsJ8OgdG9tICUlKGFsaWduKSIKKworIzogcmVmLWZpbHRlci5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSAlJShpZikgbm8gcmVjb25lZ3V0OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAibm9tIGRlIGNhbXAgbWFsIGZvcm1hdDogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbSBkZSBjYW1wIGRlc2NvbmVndXQ6ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5LCBidXQgdGhlIGZpZWxkICclLipzJyByZXF1aXJlcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGEiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUoaWYpIHNlbnNlIHVuIMOgdG9tICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUodGhlbikgc2Vuc2UgdW4gw6B0b20gJSUoaWYpIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJmb3JtYXQ6IHMnaGEgdXNhdCBsJ8OgdG9tICUlKHRoZW4pIG3DqXMgZCd1biBjb3AiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUodGhlbikgZGVzcHLDqXMgZGUgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0OiBzJ2hhIHVzYXQgbCfDoHRvbSAlJShlbHNlKSBzZW5zZSB1biDDoHRvbSAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUoZWxzZSkgc2Vuc2UgdW4gw6B0b20gJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdDogcydoYSB1c2F0IGwnw6B0b20gJSUoZWxzZSkgbcOpcyBkJ3VuIGNvcCIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICJmb3JtYXQ6IHMnaGEgdXNhdCBsJ8OgdG9tICUlKGVuZCkgc2Vuc2UgbCfDoHRvbSBjb3JyZXNwb25lbnQiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgImNhZGVuYSBkZSBmb3JtYXQgbWFsIGZvcm1hdCAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAic2Vuc2UgYnJhbmNhLCBzJ2VzdMOgIGZlbnQgwqtyZWJhc2XCuyAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICJzZW5zZSBicmFuY2EsIHMnZXN0w6AgZmVudCDCq3JlYmFzZcK7IGQndW4gwqtIRUFEwrsgJXMgbm8gYWRqdW50YXQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMiCittc2dzdHIgIihzZW5zZSBicmFuY2EsIGJpc2VjY2nDsyBjb21lbsOnYWRhIGVuICVzKSIKKworIzogcmVmLWZpbHRlci5jOjE1MDQKK21zZ2lkICJubyBicmFuY2giCittc2dzdHIgInNlbnNlIGJyYW5jYSIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJtYW5jYSBsJ29iamVjdGUgJXMgcGVyIGEgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIKK21zZ3N0ciAicGFyc2Vfb2JqZWN0X2J1ZmZlciBoYSBmYWxsYXQgZW4gJXMgcGVyIGEgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAib2JqZWN0ZSBtYWwgZm9ybWF0IGEgwqslc8K7IgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAicydlc3TDoCBpZ25vcmFudCBsYSByZWZlcsOobmNpYSBhbWIgbm9tIG1hbG3DqHMgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgImZvcm1hdDogbWFuY2EgbCfDoHRvbSAlJShlbmQpIgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAibCdvcGNpw7Mgwqslc8K7IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tbWVyZ2VkIgorCisjOiByZWYtZmlsdGVyLmM6MjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLW1lcmdlZCIKK21zZ3N0ciAibCdvcGNpw7Mgwqslc8K7IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tbm8tbWVyZ2VkIgorCisjOiByZWYtZmlsdGVyLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm5vbSBkJ29iamVjdGUgJXMgbWFsIGZvcm1hdCIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAibCdvcGNpw7Mgwqslc8K7IGhhIGQnYXB1bnRhciBhIHVuYSBjb21pc3Npw7MiCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjQxMworbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo0MjEKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICJObyBlcyBwb2RlbiBvYnRlbmlyIGFtYmTDs3MgJXMgaSAlcyBhICVzIgorCisjOiByZW1vdGUuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgZ2VuZXJhbG1lbnQgc2VndWVpeCAlcywgbm8gJXMiCisKKyM6IHJlbW90ZS5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIHNlZ3VlaXggYW1iZMOzcyAlcyBpICVzIgorCisjOiByZW1vdGUuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgIiVzOiBubyBjb2luY2lkZWl4IGFtYiBsJ8OtbmRleCIKKworIzogcmVtb3RlLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGJsb2Igb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgYmxvYiBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAiwqslc8K7IG5vIGVzIHBvdCByZXNvbGRyZSBhIHVuYSBicmFuY2EiCisKKyM6IHJlbW90ZS5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHN1cHJpbWlyIMKrJXPCuzogbGEgcmVmZXLDqG5jaWEgcmVtb3RhIG5vIGV4aXN0ZWl4IgorCisjOiByZW1vdGUuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNjI3IHJlbW90ZS5jOjE3MjgKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIG5vIGFzc2VueWFsYSBjYXAgYnJhbmNhIgorCisjOiByZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJubyBleGlzdGVpeCBsYSBicmFuY2E6IMKrJXPCuyIKKworIzogcmVtb3RlLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiY2FwIGZvbnQgY29uZmlndXJhZGEgcGVyIGEgbGEgYnJhbmNhIMKrJXPCuyIKKworIzogcmVtb3RlLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibGEgYnJhbmNhIGZvbnQgwqslc8K7IG5vIHMnZW1tYWdhdHplbWEgY29tIGEgYnJhbmNhIGFtYiBzZWd1aW1lbnQgcmVtb3QiCisKKyM6IHJlbW90ZS5jOjE2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJlbCBkZXN0w60gZGUgcHVqYWRhIMKrJXPCuyBlbiBlbCByZW1vdCDCqyVzwrsgbm8gdMOpIGNhcCBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCIKKworIzogcmVtb3RlLmM6MTY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICJsYSBicmFuY2Egwqslc8K7IG5vIHTDqSBjYXAgcmVtb3QgYWwgcXVhbCBwdWphciIKKworIzogcmVtb3RlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgImxlcyBlc3BlY2lmaWNhY2lvbnMgZGUgcmVmZXLDqG5jaWEgZGUgwqslc8K7IG5vIGluY2xvdWVuIMKrJXPCuyIKKworIzogcmVtb3RlLmM6MTY5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAicHVzaCBubyB0w6kgZGVzdMOtIChwdXNoLmRlZmF1bHQgw6lzIMKrbm90aGluZykiCisKKyM6IHJlbW90ZS5jOjE3MTcKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICJubyBlcyBwb3QgcmVzb2xkcmUgdW5hIHB1amFkYSAnc2ltcGxlJyBhIHVuIHNvbCBkZXN0w60iCisKKyM6IHJlbW90ZS5jOjE4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSByZWZlcsOobmNpYSByZW1vdGEgJXMiCisKKyM6IHJlbW90ZS5jOjE4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiBJZ25vcmluZyBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgIGJhc2FkYSBlbiDCqyVzwrssIHBlcsOyIGxhIGZvbnQgbm8gaGkgw6lzLlxuIgorCisjOiByZW1vdGUuYzoyMDIzCittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBwZXIgYSBhcnJlZ2xhcilcbiIKKworIzogcmVtb3RlLmM6MjAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAiTGEgdm9zdHJhIGJyYW5jYSBlc3TDoCBhbCBkaWEgYW1iIMKrJXPCuy5cbiIKKworIzogcmVtb3RlLmM6MjAzMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAiTGEgdm9zdHJhIGJyYW5jYSBpIMKrJXPCuyBlcyByZWZlcmVpeGVuIGEgZGlmZXJlbnRzIGNvbWlzc2lvbnMuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIkxhIHZvc3RyYSBicmFuY2EgZXN0w6AgJTIkZCBjb21pc3Npw7MgcGVyIGRhdmFudCBkZSDCqyUxJHPCuy5cbiIKK21zZ3N0clsxXSAiTGEgdm9zdHJhIGJyYW5jYSBlc3TDoCAlMiRkIGNvbWlzc2lvbnMgcGVyIGRhdmFudCBkZSDCqyUxJHPCuy5cbiIKKworIzogcmVtb3RlLmM6MjA0MworbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcHVzaFwiIHBlciBhIHB1YmxpY2FyIGxlcyB2b3N0cmVzIGNvbWlzc2lvbnMgbG9jYWxzKVxuIgorCisjOiByZW1vdGUuYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgICUyJGQgY29taXNzacOzIHBlciBkYXJyZXJlIGRlIMKrJTEkc8K7LCBpIHBvdCBhdmFuw6dhci1zZSAiCisicsOgcGlkYW1lbnQuXG4iCittc2dzdHJbMV0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgICUyJGQgY29taXNzaW9ucyBwZXIgZGFycmVyZSBkZSDCqyUxJHPCuywgaSBwb3QgYXZhbsOnYXItIgorInNlIHLDoHBpZGFtZW50LlxuIgorCisjOiByZW1vdGUuYzoyMDU0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKHVzZXUgwqtnaXQgcHVsbMK7IHBlciBhIGFjdHVhbGl0emFyIGxhIHZvc3RyYSBicmFuY2EgbG9jYWwpXG4iCisKKyM6IHJlbW90ZS5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiTGEgdm9zdHJhIGJyYW5jYSBpIMKrJXPCuyBoYW4gZGl2ZXJnaXQsXG4iCisiaSB0ZW5lbiAlZCBpICVkIGNvbWlzc2nDsyBkaXN0aW50YSBjYWRhIHVuYSwgcmVzcGVjdGl2YW1lbnQuXG4iCittc2dzdHJbMV0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGkgwqslc8K7IGhhbiBkaXZlcmdpdCxcbiIKKyJpIHRlbmVuICVkIGkgJWQgY29taXNzaW9ucyBkaXN0aW50ZXMgY2FkYSB1bmEsIHJlc3BlY3RpdmFtZW50LlxuIgorCisjOiByZW1vdGUuYzoyMDY3Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICh1c2V1IMKrZ2l0IHB1bGzCuyBwZXIgYSBmdXNpb25hciBsYSBicmFuY2EgcmVtb3RhIGEgbGEgdm9zdHJhKVxuIgorCisjOiByZW1vdGUuYzoyMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgYW5hbGl0emFyIGVsIG5vbSBkZSBsJ29iamVjdGUgZXNwZXJhdCDCqyVzwrsiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICJub20gZGUgbGEgcmVmZXLDqG5jaWEgcmVlbXBsYcOnYWRhIGluY29ycmVjdGU6ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcmVwbGFjZSByZWY6ICVzIgorbXNnc3RyICJzdXByaW1laXggbGVzIHJlZmVyw6huY2llcyByZWVtcGxhw6dhZGVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAibGEgcHJvZnVuZGl0YXQgZGUgcmVlbXBsYcOnYW1lbnQgw6lzIG1hc3NhIGFsdGEgcGVyIGwnb2JqZWN0ZSAlcyIKKworIzogcmVyZXJlLmM6MjE3IHJlcmVyZS5jOjIyNiByZXJlcmUuYzoyMjkKK21zZ2lkICJjb3JydXB0IE1FUkdFX1JSIgorbXNnc3RyICJNRVJHRV9SUiBjb3JydXB0ZSIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIHJlZ2lzdHJlIMKrcmVyZXJlwrsiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAicydoYW4gcHJvZHXDr3QgZXJyb3JzIGVuIGVzY3JpdXJlIMKrJXPCuyAoJXMpIgorCisjOiByZXJlcmUuYzo0OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGZlciBzdGF0IGEgwqslc8K7IgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGFuYWxpdHphciBlbHMgcGVkYcOnb3MgZW4gY29uZmxpY3RlIGEgwqslc8K7IgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmZXIgwqtmYWlsZWQgdXRpbWUoKcK7IGEgwqslc8K7IgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImxhIGNyZWFjacOzIGRlIMKrJXPCuyBoYSBmYWxsYXQiCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6ODAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgc3ltbGluayBlbiDCqyVzwrsgwqslc8K7IgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZGUgcmVnaXN0cmUgwqslc8K7IgorCisjOiByZXJlcmUuYzo4ODEgc3VibW9kdWxlLmM6MjA2NyBidWlsdGluL2xvZy5jOjE4NzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDM2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZGlyZWN0b3JpIMKrJXPCuyIKKworIzogcmVyZXJlLmM6MTA1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgYSDCqyVzwrsiCisKKyM6IHJlcmVyZS5jOjEwNjggcmVyZXJlLmM6MTA3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFmZWdpciBlbCByZXN1bHRhdCBkZSBmdXNpw7MgcGVyIGEgwqslc8K7IgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgcmVhZGxpbmsgZW4gwqslc8K7IgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJzdXByaW1laXggbGVzIHJlZmVyw6huY2llcyByZWVtcGxhw6dhZGVzIgorCisjOiByZXJlcmUuYzoxMDk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGb3Jnb3QgcmVzb2x1dGlvbiBmb3IgJyVzJ1xuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZGUgcmVnaXN0cmUgwqslc8K7IgorCisjOiByZXJlcmUuYzoxMTk5CisjLCBmdXp6eQorbXNnaWQgInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciBsJ2FyYnJlIGNhdSIKKworIzogcmV2aXNpb24uYzoyNDk3Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAibGEgdm9zdHJhIGJyYW5jYSBhY3R1YWwgc2VtYmxhIG1hbG1lc2EiCisKKyM6IHJldmlzaW9uLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgImxhIGJyYW5jYSBhY3R1YWwgwqslc8K7IGVuY2FyYSBubyB0w6kgY2FwIGNvbWlzc2nDsyIKKworIzogcmV2aXNpb24uYzoyNzA4Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tYmlzZWN0IgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIiIKKworIzogcnVuLWNvbW1hbmQuYzo3NjIKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgL2Rldi9udWxsIgorCisjOiBydW4tY29tbWFuZC5jOjEyNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBmaWw6ICVzIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiIgorInBhcXVldCBkZSBuZXRlamEgbm8gZXNwZXJhdCBxdWFuIGVzdGF2YSBsbGVnaW50IGwnZXN0YXQgZGVsIGRlc2VtcGFxdWV0YW1lbnQgIgorInJlbW90IgorCisjOiBzZW5kLXBhY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdlc3RhdCBkZWwgZGVzZW1wYXF1ZXRhbWVudCByZW1vdDogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZWwgZGVzZW1wYXF1ZXRhbWVudCByZW1vdDogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHNpZ25hciBlbCBjZXJ0aWZpY2F0IGRlIHB1amFkYSIKKworIzogc2VuZC1wYWNrLmM6NDIzCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICJlbCBkZXN0w60gcmVjZXB0b3Igbm8gYWRtZXQgcHVqYXIgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorIm5vIHMnZXN0w6AgZW52aWFudCB1bmEgY2VydGlmaWNhY2nDsyBkZSBwdWphZGEgcGVycXXDqCBlbCBkZXN0w60gcmVjZXB0b3Igbm8gIgorImFkbWV0IHB1amFyIC0tc2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MzcKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgImVsIGRlc3TDrSByZWNlcHRvciBubyBhZG1ldCBwdWphciAtLWF0b21pYyIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgImVsIGRlc3TDrSByZWNlcHRvciBubyBhZG1ldCBvcGNpb25zIGRlIHB1amFkYSIKKworIzogc2VxdWVuY2VyLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG1lc3NhZ2UgY2xlYW51cCBtb2RlICclcyciCittc2dzdHIgIm1vZGUgZGUgbmV0ZWphIMKrJXPCuyBubyB2w6BsaWQgZW4gbGEgY29taXNzacOzIGRlbCBtaXNzYXRnZSIKKworIzogc2VxdWVuY2VyLmM6Mjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgc3VwcmltaXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjMxMyBidWlsdGluL3JlYmFzZS5jOjc4MSBidWlsdGluL3JlYmFzZS5jOjE3MDYgYnVpbHRpbi9ybS5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgc3VwcmltaXIgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozMjMKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgInJldmVydGlyIgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgInJlYmFzZSAtaSIKK21zZ3N0ciAicmViYXNlIC1pIgorCisjOiBzZXF1ZW5jZXIuYzozMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gYWN0aW9uOiAlZCIKK21zZ3N0ciAiQWNjacOzIGRlc2NvbmVndWRhOiAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzg3Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJkZXNwcsOpcyBkZSByZXNvbGRyZSBlbHMgY29uZmxpY3RlcywgbWFycXVldSBlbHMgY2FtaW5zXG4iCisiY29ycmVnaXRzIGFtYiAnZ2l0IGFkZCA8Y2FtaW5zPicgbyAnZ2l0IHJtIDxjYW1pbnM+JyIKKworIzogc2VxdWVuY2VyLmM6MzkwCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyJkZXNwcsOpcyBkZSByZXNvbGRyZSBlbHMgY29uZmxpY3RlcywgbWFycXVldSBlbHMgY2FtaW5zXG4iCisiY29ycmVnaXRzIGFtYiAnZ2l0IGFkZCA8Y2FtaW5zPicgbyAnZ2l0IHJtIDxjYW1pbnM+J1xuIgorImkgY29tZXRldSBlbCByZXN1bHRhdCBhbWIgJ2dpdCBjb21taXQnIgorCisjOiBzZXF1ZW5jZXIuYzo0MDMgc2VxdWVuY2VyLmM6Mjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGJsb3F1ZWphciDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZW9sIHRvICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgdGVybWluYWRvciBkZSBsw61uaWEgYSDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQxNSBzZXF1ZW5jZXIuYzoyNzk4IHNlcXVlbmNlci5jOjI5OTkgc2VxdWVuY2VyLmM6MzAxMworIzogc2VxdWVuY2VyLmM6MzI3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmaW5hbGl0emFyIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDM4IHNlcXVlbmNlci5jOjE3MDcgc2VxdWVuY2VyLmM6MjgxOCBzZXF1ZW5jZXIuYzozMjU5CisjOiBzZXF1ZW5jZXIuYzozMzY4IGJ1aWx0aW4vYW0uYzoyNDQgYnVpbHRpbi9jb21taXQuYzo3ODMgYnVpbHRpbi9tZXJnZS5jOjExMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgImVscyB2b3N0cmVzIGNhbnZpcyBsb2NhbHMgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjQ2OAorbXNnaWQgImNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiY29tZXRldSBlbHMgdm9zdHJlcyBjYW52aXMgbyBmZXUgdW4gwqtzdGFzaMK7IHBlciBhIHByb2NlZGlyLiIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiBhdmFuw6cgcsOgcGlkIgorCisjOiBzZXF1ZW5jZXIuYzo1MzkgYnVpbHRpbi90YWcuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIk1vZGUgZGUgbmV0ZWphIG5vIHbDoGxpZCAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UgLWkiLgorIy4KKyM6IHNlcXVlbmNlci5jOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogTm8gcydoYSBwb2d1dCBlc2NyaXVyZSB1biBmaXR4ZXIgZCfDrW5kZXggbm91IgorCisjOiBzZXF1ZW5jZXIuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgbCdhcmJyZSBjYXUiCisKKyM6IHNlcXVlbmNlci5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIGNvbWlzc2nDsyBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo3NDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgwqslLipzwrsiCisKKyM6IHNlcXVlbmNlci5jOjc1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhZmVnaXIgZWwgcmVzdWx0YXQgZGUgZnVzacOzIHBlciBhIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NzkyIHdyYXBwZXIuYzoxOTAgd3JhcHBlci5jOjM2MCBidWlsdGluL2FtLmM6NzA1CisjOiBidWlsdGluL2FtLmM6Nzk3IGJ1aWx0aW4vbWVyZ2UuYzoxMTE0IGJ1aWx0aW4vcmViYXNlLmM6MTA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyIMKrJXPCuyBwZXIgYSBsZWN0dXJhIgorCisjOiBzZXF1ZW5jZXIuYzo4MDIKK21zZ2lkICInR0lUX0FVVEhPUl9OQU1FJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICJKYSBzJ2hhIGRvbmF0IMKrR0lUX0FVVEhPUl9OQU1FwrsiCisKKyM6IHNlcXVlbmNlci5jOjgwNworbXNnaWQgIidHSVRfQVVUSE9SX0VNQUlMJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICJKYSBzJ2hhIGRvbmF0IMKrR0lUX0FVVEhPUl9FTUFJTMK7IgorCisjOiBzZXF1ZW5jZXIuYzo4MTIKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICJKYSBzJ2hhIGRvbmF0IMKrR0lUX0FVVEhPUl9EQVRFwrsiCisKKyM6IHNlcXVlbmNlci5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhcmlhYmxlICclcyciCittc2dzdHIgInZhcmlhYmxlICDCqyVzwrsgZGVzY29uZWd1ZGEiCisKKyM6IHNlcXVlbmNlci5jOjgyMQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgImZhbHRhIMKrR0lUX0FVVEhPUl9OQU1FwrsiCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIgorbXNnc3RyICJmYWx0YSDCq0dJVF9BVVRIT1JfRU1BSUzCuyIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAiZmFsdGEgwqtHSVRfQVVUSE9SX0RBVEXCuyIKKworIzogc2VxdWVuY2VyLmM6OTAyIHNlcXVlbmNlci5jOjE0MjcKKyMsIGZ1enp5Cittc2dpZCAibWFsZm9ybWVkIGlkZW50IGxpbmUiCittc2dzdHIgImzDrW5pYSBkJ2VudHJhZGEgbWFsIGZvcm1hZGE6IMKrJXPCuy4iCisKKyM6IHNlcXVlbmNlci5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisidGVuaXUgY2FudmlzIMKrc3RhZ2VkwrsgZW4gZWwgdm9zdHJlIGFyYnJlIGRlIHRyZWJhbGxcbiIKKyJTaSBhcXVlc3RzIGNhbnZpcyBlc3RhbiBwZW5zYXRzIHBlciBmZXIgwqtzcXVhc2jCuyBhIGxhIGNvbWlzc2nDsyBwcsOodmlhLCAiCisiZXhlY3V0ZXU6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJTaSBzw7NuIHBlciBhIGZvcm1hciB1bmEgY29taXNzacOzIG5vdmEsIGV4ZWN1dGV1OlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkVuIGFtYmTDs3MgY2Fzb3MsIHF1YW4gaMOgZ2l1IHRlcm1pbmF0LCBjb250aW51ZXUgYW1iOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMTgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAiZWwgbGxpZ2FtIMKrcHJlcGFyZS1jb21taXQtbXNnwrsgaGEgZmFsbGF0IgorCisjOiBzZXF1ZW5jZXIuYzoxMjI0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiUydoYW4gY29uZmlndXJhdCBlbCB2b3N0cmUgbm9tIGkgYWRyZcOnYSBlbGVjdHLDsm5pY2FcbiIKKyJhdXRvbcOgdGljYW1lbnQgYmFzYW50LXNlIGVuIGVsIHZvc3RyZSBub20gZCd1c3VhcmkgaSBub20gZGUgbcOgcXVpbmEuIFxuIgorIkNvbXByb3ZldSBxdWUgc2lndWluIGNvcnJlY3Rlcy4gUG9kZXUgc3VwcmltaXIgYXF1ZXN0XG4iCisibWlzc2F0Z2UgZXN0YWJsaW50LWxvcyBleHBsw61jaXRhbWVudC4gRXhlY3V0ZXUgbCdvcmRyZSBzZWfDvGVudCBpXG4iCisic2VndWl1IGxlcyBpbnN0cnVjY2lvbnMgZW4gZWwgdm9zdHJlIGVkaXRvciBwZXIgZWRpdGFyIGVsIHZvc3RyZVxuIgorImZpdHhlciBkZSBjb25maWd1cmFjacOzOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIkRlc3Byw6lzIGRlIGZlciBhaXjDsiwgcG9kZXUgZXNtZW5hciBsYSBpZGVudGl0YXQgdXNhZGEgcGVyIGEgYXF1ZXN0YVxuIgorImNvbWlzc2nDsyBhbWI6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjM3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiUydoYW4gY29uZmlndXJhdCBlbCB2b3N0cmUgbm9tIGkgYWRyZcOnYSBlbGVjdHLDsm5pY2FcbiIKKyJhdXRvbcOgdGljYW1lbnQgYmFzYXRzIGVuIGVsIHZvc3RyZSBub20gZCd1c3VhcmkgaSBub20gZGUgbcOgcXVpbmEuIFxuIgorIkNvbXByb3ZldSBxdWUgc2lndWluIGNvcnJlY3Rlcy4gUG9kZXUgc3VwcmltaXIgYXF1ZXN0XG4iCisibWlzc2F0Z2UgZXN0YWJsaW50LWxvcyBleHBsw61jaXRhbWVudDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJFbCBWb3N0cmUgTm9tXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHR1QGV4YW1wbGUuY29tXG4iCisiXG4iCisiRGVzcHLDqXMgZGUgZmVyIGFpeMOyLCBwb2RldSBhcnJlZ2xhciBsYSBpZGVudGl0YXQgdXNhZGEgcGVyIGEgYXF1ZXN0YVxuIgorImNvbWlzc2nDsyBhbWI6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjc5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0cm9iYXIgbGEgY29taXNzacOzIG5vdmFtZW50IGNyZWFkYSIKKworIzogc2VxdWVuY2VyLmM6MTI4MQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY29taXNzacOzIG5vdmFtZW50IGNyZWFkYSIKKworIzogc2VxdWVuY2VyLmM6MTMyNworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIEhFQUQgZGVzcHLDqXMgZGUgY3JlYXIgbGEgY29taXNzacOzIgorCisjOiBzZXF1ZW5jZXIuYzoxMzI5Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSEVBRCBzZXBhcmF0IgorCisjOiBzZXF1ZW5jZXIuYzoxMzMzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoY29taXNzacOzIGQnYXJyZWwpIgorCisjOiBzZXF1ZW5jZXIuYzoxMzU0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJIRUFEICVzIG5vIMOpcyB1bmEgY29taXNzacOzISIKKworIzogc2VxdWVuY2VyLmM6MTM2MCBzZXF1ZW5jZXIuYzoxNDU4IGJ1aWx0aW4vY29tbWl0LmM6MTU2OQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY29taXNzacOzIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE0MTEgc2VxdWVuY2VyLmM6MjA1NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ2F1dG9yIGRlIGxhIGNvbWlzc2nDsyIKKworIzogc2VxdWVuY2VyLmM6MTQzMQorIywgZnV6enkKK21zZ2lkICJjb3JydXB0ZWQgYXV0aG9yIHdpdGhvdXQgZGF0ZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiYWN0dWFsaXR6YSBsYSBpbmZvcm1hY2nDsyBkJ2VzdGFkw61zdGlxdWVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNDQ3IGJ1aWx0aW4vYW0uYzoxNTYxIGJ1aWx0aW4vbWVyZ2UuYzo2ODQKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBoYSBmYWxsYXQgZW4gZXNjcml1cmUgdW4gYXJicmUiCisKKyM6IHNlcXVlbmNlci5jOjE0ODAgc2VxdWVuY2VyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb21taXQgbWVzc2FnZSBmcm9tICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyBkZXMgZGUgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoxNTE2IGJ1aWx0aW4vYW0uYzoxNTgzIGJ1aWx0aW4vY29tbWl0LmM6MTY2OCBidWlsdGluL21lcmdlLmM6ODgzCisjOiBidWlsdGluL21lcmdlLmM6OTA4Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjcml1cmUgbCdvYmplY3RlIGRlIGNvbWlzc2nDsyIKKworIzogc2VxdWVuY2VyLmM6MTU3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7MgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNvbWlzc2nDsyBwYXJlICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjU2IHNlcXVlbmNlci5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAib3JkcmUgZGVzY29uZWd1ZGE6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNzE0IHNlcXVlbmNlci5jOjE3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICJBaXjDsiDDqXMgdW5hIGNvbWJpbmFjacOzIGRlICVkIGNvbWlzc2lvbnMuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI0Cittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgImNhbCB1biBIRUFEIHBlciByZXBhcmFyLWhvIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI2IHNlcXVlbmNlci5jOjMzMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI4Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGVzY3JpdXJlIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MTc0MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAiQXF1ZXN0IMOpcyBlbCAxciBtaXNzYXRnZSBkZSBjb21pc3Npw7M6IgorCisjOiBzZXF1ZW5jZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7M6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIkFxdWVzdCDDqXMgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzICMlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJFbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgbsO6bS4gIyVkIHMnb21ldHLDoDoiCisKKyM6IHNlcXVlbmNlci5jOjE4NTAKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJlbCB2b3N0cmUgZml0eGVyIGQnw61uZGV4IGVzdMOgIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogc2VxdWVuY2VyLmM6MTg1NworIywgZnV6enkKK21zZ2lkICJjYW5ub3QgZml4dXAgcm9vdCBjb21taXQiCittc2dzdHIgIm5vIGVzIHBvdCB0cm9iYXIgbGEgY29taXNzacOzICVzICglcykiCisKKyM6IHNlcXVlbmNlci5jOjE4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJsYSBjb21pc3Npw7MgJXMgw6lzIHVuYSBmdXNpw7MgcGVyw7Igbm8gcydoYSBkb25hdCBjYXAgb3BjacOzIC1tLiIKKworIzogc2VxdWVuY2VyLmM6MTg4NCBzZXF1ZW5jZXIuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAibGEgY29taXNzacOzICVzIG5vIHTDqSBwYXJlICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxODk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJubyBlcyBwb3Qgb2J0ZW5pciBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGUgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxOTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IG5vIGVzIHBvdCBhbmFsaXR6YXIgbGEgY29taXNzacOzIHBhcmUgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY2FudmlhciBlbCBub20gwqslc8K7IGEgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmV2ZXJ0aXIgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFwbGljYXIgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogcydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbCfDrW5kZXgiCisKKyM6IHNlcXVlbmNlci5jOjIxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogcydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBsJ8OtbmRleCIKKworIzogc2VxdWVuY2VyLmM6MjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICIlcyBubyBhY2NlcHRhIHBhcsOgbWV0cmVzOiDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjIxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICJmYWx0ZW4gZWxzIGFyZ3VtZW50cyBwZXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjIyMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImzDrW5pYSBubyB2w6BsaWRhICVkOiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzoyMzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAnJXMnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIk5vIGVzIHBvdCDCqyVzwrsgc2Vuc2UgdW5hIGNvbWlzc2nDsyBwcsOodmlhIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ4IGJ1aWx0aW4vcmViYXNlLmM6MTcyIGJ1aWx0aW4vcmViYXNlLmM6MTk3CisjOiBidWlsdGluL3JlYmFzZS5jOjIyMyBidWlsdGluL3JlYmFzZS5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgwqslc8K7LiIKKworIzogc2VxdWVuY2VyLmM6MjM4NAorIywgZnV6enkKK21zZ2lkICJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5pIGhpIGhhIGNhcCDCq2NoZXJyeSBwaWNrwrsgbmkgY2FwIHJldmVyc2nDsyBlbiBjdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyMzkxCisjLCBmdXp6eQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5pIGhpIGhhIGNhcCDCq2NoZXJyeSBwaWNrwrsgbmkgY2FwIHJldmVyc2nDsyBlbiBjdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyNDM1Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgImNvcnJlZ2l1LWhvIHVzYW50IMKrZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb8K7LiIKKworIzogc2VxdWVuY2VyLmM6MjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAiZnVsbCBkJ2luc3RydWNjaW9ucyBpbnVzYWJsZTogwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyNDQyCittc2dpZCAibm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICJubyBzJ2hhIGFuYWxpdHphdCBjYXAgY29taXNzacOzLiIKKworIzogc2VxdWVuY2VyLmM6MjQ1MworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIMKrY2hlcnJ5IHBpY2vCuyBkdXJhbnQgdW5hIHJldmVyc2nDsy4iCisKKyM6IHNlcXVlbmNlci5jOjI0NTUKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAibm8gZXMgcG90IHJldmVydGlyIGR1cmFudCB1biDCq2NoZXJyeSBwaWNrwrsuIgorCisjOiBzZXF1ZW5jZXIuYzoyNTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAidmFsb3Igbm8gdsOgbGlkIHBlciBhICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjYzMAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgImZ1bGwgZCdvcGNpb25zIG1hbCBmb3JtYXQ6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MjczNiBzZXF1ZW5jZXIuYzo0NDYzCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgImNvbmp1bnQgZGUgY29taXNzaW9ucyBidWl0IHBhc3NhdCIKKworIzogc2VxdWVuY2VyLmM6Mjc1MgorIywgZnV6enkKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAidW4gwqtjaGVycnkgcGlja8K7IG8gdW5hIHJldmVyc2nDsyBqYSBlc3TDoCBlbiBjdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJpbnRlbnRldSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI3NTcKKyMsIGZ1enp5Cittc2dpZCAiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAidW4gwqtjaGVycnkgcGlja8K7IG8gdW5hIHJldmVyc2nDsyBqYSBlc3TDoCBlbiBjdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgImludGVudGV1IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKKworIzogc2VxdWVuY2VyLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbCBkaXJlY3RvcmkgZGUgc2Vxw7xlbmNpYWRvciDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjI3ODgKK21zZ2lkICJjb3VsZCBub3QgbG9jayBIRUFEIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGJsb3F1ZWphciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyODQ4IHNlcXVlbmNlci5jOjQyMDkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5pIGhpIGhhIGNhcCDCq2NoZXJyeSBwaWNrwrsgbmkgY2FwIHJldmVyc2nDsyBlbiBjdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyODUwIHNlcXVlbmNlci5jOjI4NjEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJubyBlcyBwb3QgcmVzb2xkcmUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjg1MiBzZXF1ZW5jZXIuYzoyODk2Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIm5vIGVzIHBvdCBhdm9ydGFyIGRlcyBkJ3VuYSBicmFuY2EgcXVlIGVuY2FyYSBoYSBkZSBuw6BpeGVyIgorCisjOiBzZXF1ZW5jZXIuYzoyODgyIGJ1aWx0aW4vZ3JlcC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJubyBlcyBwb3Qgb2JyaXIgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyODg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyc6ICVzIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIMKrJXPCuzogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI4ODUKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJmaW5hbCBkZSBmaXR4ZXIgaW5lc3BlcmF0IgorCisjOiBzZXF1ZW5jZXIuYzoyODkxCisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiZWwgZml0eGVyIEhFQUQgZW1tYWdhdHplbWF0IGFiYW5zIGRlIGZlciDCq2NoZXJyeSBwaWNrwrsgwqslc8K7IMOpcyBtYWxtw6hzIgorCisjOiBzZXF1ZW5jZXIuYzoyOTAyCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICJTZW1ibGEgcXVlIGhldSBtb2d1dCBIRUFEIHNlbnNlIHJlYm9iaW5hciwgY29tcHJvdmV1LWhvIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI5NDMKKyMsIGZ1enp5Cittc2dpZCAibm8gcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJObyBoaSBoYSB1biDCq3JlYmFzZcK7IGVuIGN1cnM/IgorCisjOiBzZXF1ZW5jZXIuYzoyOTUxCisjLCBmdXp6eQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICJuaSBoaSBoYSBjYXAgwqtjaGVycnkgcGlja8K7IG5pIGNhcCByZXZlcnNpw7MgZW4gY3VycyIKKworIzogc2VxdWVuY2VyLmM6Mjk2MQorIywgZnV6enkKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGwnb2JqZWN0ZSBkZSBjb21pc3Npw7MiCisKKyM6IHNlcXVlbmNlci5jOjI5NjgKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMDk1IHNlcXVlbmNlci5jOjQxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciAlcyIKKworIzogc2VxdWVuY2VyLmM6MzEzNCBzZXF1ZW5jZXIuYzo0MTAxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiTm8gZXMgcG90IGxsZWdpciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjb3BpYXIgwqslc8K7IGEgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozMTU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIlBvZGV1IGVzbWVuYXIgbGEgY29taXNzacOzIGFyYSwgYW1iXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJVbmEgdmVnYWRhIHF1ZSBlc3RpZ3VldSBzYXRpc2ZldCBhbWIgZWxzIHZvc3RyZXMgY2FudmlzLCBleGVjdXRldVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBzZXF1ZW5jZXIuYzozMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAlcy4uLiAlLipzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFwbGljYXIgJXMuLi4gJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBmdXNpb25hciAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMTkwIHNlcXVlbmNlci5jOjMxOTQgYnVpbHRpbi9kaWZmdG9vbC5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY29waWFyIMKrJXPCuyBhIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MzIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiaGEgZmFsbGF0OiAlc1xuIgorIiVzUG9kZXUgc29sdWNpb25hciBlbCBwcm9ibGVtYSwgaSBsbGF2b3JzIGV4ZWN1dGFyXG4iCisiXG4iCisiIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjI3Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAiaSBoYSBmZXQgY2FudmlzIGEgbCfDrW5kZXggaS9vIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImwnZXhlY3VjacOzIGhhIHRpbmd1dCDDqHhpdDogJXNcbiIKKyJwZXLDsiBoYSBkZWl4YXQgY2FudmlzIGEgbCfDrW5kZXggaS9vIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorIkNvbWV0ZXUgbyBmZXUgwqtzdGFzaMK7IGRlbHMgdm9zdHJlcyBjYW52aXMsIGkgbGxhdm9ycyBleGVjdXRldVxuIgorIlxuIgorIiBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGxhYmVsIG5hbWU6ICclLipzJyIKK21zZ3N0ciAibm9tIGQnZXRpcXVldGEgbm8gcGVybcOoczogwqslLipzwrsiCisKKyM6IHNlcXVlbmNlci5jOjMzNDgKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICJubyBoaSBoYSByZXMgYSBjb21ldHJlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMzNTMKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMzOTEgYnVpbHRpbi9yZWJhc2UuYzo4NzYgYnVpbHRpbi9yZWJhc2UuYzo4ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY2VyY2FyIGwnYXJicmUgZGUgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzozNDM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozNDY3CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAiTm8gZXMgcG90IMKrJXPCuyBzZW5zZSB1bmEgY29taXNzacOzIHByw6h2aWEiCisKKyM6IHNlcXVlbmNlci5jOjM0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgwqslLipzwrsiCisKKyM6IHNlcXVlbmNlci5jOjM0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICJubyBoaSBoYSByZXMgcGVyIGZ1c2lvbmFyIMKrJS4qc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozNTEwCittc2dpZCAib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gdG9wIG9mIGEgW25ldyByb290XSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNTI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDszogJXMiCisKKyM6IHNlcXVlbmNlci5jOjM2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV2ZW4gYXR0ZW1wdCB0byBtZXJnZSAnJS4qcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZnVzaW9uYXIgwqslLipzwrsiCisKKyM6IHNlcXVlbmNlci5jOjM3MDQKKyMsIGZ1enp5Cittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IE5vIHMnaGEgcG9ndXQgZXNjcml1cmUgdW4gZml0eGVyIGQnw61uZGV4IG5vdSIKKworIzogc2VxdWVuY2VyLmM6Mzc3MyBidWlsdGluL3JlYmFzZS5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAiUydoYSBhcGxpY2F0IGVsIMKrc3Rhc2jCuyBhdXRvbcOgdGljYW1lbnQuXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJubyBlcyBwb3QgZW1tYWdhdHplbWFyICVzIgorCisjOiBzZXF1ZW5jZXIuYzozNzg4IGJ1aWx0aW4vcmViYXNlLmM6NzQ5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyJMJ2FwbGljYWNpw7MgZGVsIMKrc3Rhc2jCuyBhdXRvbcOgdGljIGhhIHJlc3VsdGF0IGVuIGNvbmZsaWN0ZXMuXG4iCisiRWxzIHZvc3RyZXMgY2FudmlzIGVzdGFuIHNlZ3VycyBlbiBlbCDCq3N0YXNowrsuXG4iCisiUG9kZXUgZXhlY3V0YXIgXCJnaXQgc3Rhc2ggcG9wXCIgbyBcImdpdCBzdGFzaCBkcm9wXCIgZW4gcXVhbHNldm9sIG1vbWVudC5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzg0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJubyBlcyBwb3QgYWdhZmFyICVzIgorCisjOiBzZXF1ZW5jZXIuYzozODYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgdmFsaWQgT0lEIgorbXNnc3RyICLCqyVzwrsgbm8gw6lzIHVuIHRlcm1lIHbDoGxpZCIKKworIzogc2VxdWVuY2VyLmM6Mzg2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzc5Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHNlcGFyYXIgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mzg4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIkF0dXJhdCBhICVzLi4uICAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4ODUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAiQXR1cmF0IGEgJXMuLi4gICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzXG4iCisiSXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQ7IFRvIGVkaXQgdGhlIGNvbW1hbmQgYmVmb3JlIGNvbnRpbnVpbmcsIHBsZWFzZVxuIgorImVkaXQgdGhlIHRvZG8gbGlzdCBmaXJzdDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozOTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAiQXR1cmF0IGEgJXMuLi4gICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6NDA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgIm9yZHJlICVkIGRlc2NvbmVndWRhIgorCisjOiBzZXF1ZW5jZXIuYzo0MTA5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciBvcmlnLWhlYWQiCisKKyM6IHNlcXVlbmNlci5jOjQxMTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnb250byciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyICdvbnRvJyIKKworIzogc2VxdWVuY2VyLmM6NDEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlIEhFQUQgdG8gJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgSEVBRCBhICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MjIxCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIk5vIGVzIHBvdCBmZXIgwqtyZWJhc2XCuzogdGVuaXUgY2FudmlzIMKrdW5zdGFnZWTCuy4iCisKKyM6IHNlcXVlbmNlci5jOjQyMzAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAibm8gZXMgcG90IGVzbWVuYXIgdW5hIGNvbWlzc2nDsyBubyBleGlzdGVudCIKKworIzogc2VxdWVuY2VyLmM6NDIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgImZpdHhlciBubyB2w6BsaWQ6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICJjb250aW5ndXQgbm8gdsOgbGlkOiDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQyMzcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJUZW5pdSBjYW52aXMgbm8gY29tZXNvcyBlbiBlbCB2b3N0cmUgYXJicmUgZGUgdHJlYmFsbC4gXG4iCisiUHJpbWVyIGNvbWV0ZXUtbG9zIGkgZGVzcHLDqXMgZXhlY3V0ZXUgJ2dpdCByZWJhc2UgLS1jb250aW51ZScgZGUgbm91LiIKKworIzogc2VxdWVuY2VyLmM6NDI3MyBzZXF1ZW5jZXIuYzo0MzEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbCBmaXR4ZXIgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo0MzI3Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVsaW1pbmFyIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjQzMzQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTm8gcydoYW4gcG9ndXQgY29tZXRyZSBlbHMgY2FudmlzIMKrc3RhZ2VkwrsuIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlczogbm8gZXMgcG90IGZlciDCq2NoZXJyeSBwaWNrwrsgYSAlcyIKKworIzogc2VxdWVuY2VyLmM6NDQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczogcmV2aXNpw7MgaW5jb3JyZWN0YSIKKworIzogc2VxdWVuY2VyLmM6NDQ3OQorbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAibm8gZXMgcG90IHJldmVydGlyIGNvbSBhIGNvbWlzc2nDsyBpbmljaWFsIgorCisjOiBzZXF1ZW5jZXIuYzo0OTUyCittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogb3BjaW9ucyBubyBnZXN0aW9uYWRlcyIKKworIzogc2VxdWVuY2VyLmM6NDk1NQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogcydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBwcmVwYXJhciBsZXMgcmV2aXNpb25zIgorCisjOiBzZXF1ZW5jZXIuYzo1MTEzCittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIlBvZGV1IGFycmVnbGFyIGFpeMOyIGFtYiAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgaSBkZXNwcsOpcyAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisKKyM6IHNlcXVlbmNlci5jOjUyMjYgc2VxdWVuY2VyLmM6NTI0MworbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgInJlcyBhIGZlciIKKworIzogc2VxdWVuY2VyLmM6NTI1NworbXNnaWQgImNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IG9tZXRyZSBsZXMgb3JkcmVzIMKrcGlja3PCuyBubyBuZWNlc3PDoHJpZXMiCisKKyM6IHNlcXVlbmNlci5jOjUzNTEKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICJsJ3NjcmlwdCBqYSBlc3RhdmEgZW5kcmXDp2F0LiIKKworIzogc2V0dXAuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIsKrJXPCuyDDqXMgZm9yYSBkZWwgZGlww7JzaXQiCisKKyM6IHNldHVwLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiBubyBoaSBoYSB0YWwgY2Ftw60gZW4gbCdhcmJyZSBkZSB0cmViYWxsLlxuIgorIlVzZXUgwqtnaXQgPG9yZHJlPiAtLSA8Y2Ftw60+Li4uwrsgcGVyIGEgZXNwZWNpZmljYXIgY2FtaW5zIHF1ZSBubyBleGlzdGVpeGluICIKKyJsb2NhbG1lbnQuIgorCisjOiBzZXR1cC5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJwYXLDoG1ldHJlIGFtYmlndSDCqyVzwrs6IHJldmlzacOzIG5vIGNvbmVndWRhIG8gZWwgY2Ftw60gbm8gw6lzIGVuIGwnYXJicmUgZGUgIgorInRyZWJhbGwuXG4iCisiVXNldSDCqy0twrsgcGVyIGEgc2VwYXJhciBlbHMgY2FtaW5zIGRlIGxlcyByZXZpc2lvbnM6XG4iCisiJ2dpdCA8b3JkcmU+IFs8cmV2aXNpw7M+Li4uXSAtLSBbPGZpdHhlcj4uLi5dJyIKKworIzogc2V0dXAuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAibCdvcGNpw7Mgwqslc8K7IGhhIGRlIHZlbmlyIGFiYW5zIGRlbHMgYXJndW1lbnRzIG9wY2lvbmFscyIKKworIzogc2V0dXAuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorInBhcsOgbWV0cmUgYW1iaWd1IMKrJXPCuzogYW1iZMOzcyB1bmEgcmV2aXNpw7MgaSB1biBub20gZGUgZml0eGVyXG4iCisiVXNldSAnLS0nIHBlciBhIHNlcGFyYXIgZWxzIGNhbWlucyBkZSBsZXMgcmV2aXNpb25zOlxuIgorIidnaXQgPG9yZHJlPiBbPHJldmlzacOzPi4uLl0gLS0gWzxmaXR4ZXI+Li4uXSciCisKKyM6IHNldHVwLmM6MzkxCittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgIiIKKyJubyBzJ2hhIHBvZ3V0IGNvbmZpZ3VyYXIgdW4gYXJicmUgZGUgdHJlYmFsbCB1dGlsaXR6YW50IHVuYSBjb25maWd1cmFjacOzIG5vICIKKyJ2w6BsaWRhIgorCisjOiBzZXR1cC5jOjM5NQorbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICJhcXVlc3RhIG9wZXJhY2nDsyBzJ2hhIGQnZXhlY3V0YXIgZW4gdW4gYXJicmUgZGUgdHJlYmFsbCIKKworIzogc2V0dXAuYzo1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiCittc2dzdHIgIlMnZXNwZXJhdmEgdW5hIHZlcnNpw7MgZGUgZGlww7JzaXQgZGUgZ2l0IDw9ICVkLCBzJ2hhIHRyb2JhdCAlZCIKKworIzogc2V0dXAuYzo1NDkKK21zZ2lkICJ1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9ucyBmb3VuZDoiCittc2dzdHIgInMnaGFuIHRyb2JhdCBleHRlbnNpb25zIGRlIGRpcMOyc2l0IGRlc2NvbmVndWRlczoiCisKKyM6IHNldHVwLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBvYnJpciDCqyVzwrsiCisKKyM6IHNldHVwLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAibWFzc2EgbGFyZyBwZXIgYSBzZXIgdW4gZml0eGVyIC5naXQ6IMKrJXPCuyIKKworIzogc2V0dXAuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiZXJyb3IgZW4gbGxlZ2lyICVzIgorCisjOiBzZXR1cC5jOjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0IGdpdGZpbGUgbm8gdsOgbGlkOiAlcyIKKworIzogc2V0dXAuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIKK21zZ3N0ciAic2Vuc2UgY2Ftw60gYWwgZ2l0ZmlsZTogJXMiCisKKyM6IHNldHVwLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAibm8gw6lzIHVuIGRpcMOyc2l0IGRlIGdpdDogJXMiCisKKyM6IHNldHVwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIsKrJCVzwrsgbWFzc2EgZ3JhbiIKKworIzogc2V0dXAuYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgIm5vIMOpcyB1biBkaXDDsnNpdCBkZSBnaXQ6IMKrJXPCuyIKKworIzogc2V0dXAuYzo3MjAgc2V0dXAuYzo3MjIgc2V0dXAuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBjYW52aWFyIGRlIGRpcmVjdG9yaSBhIMKrJXPCuyIKKworIzogc2V0dXAuYzo3MjUgc2V0dXAuYzo3ODEgc2V0dXAuYzo3OTEgc2V0dXAuYzo4MzAgc2V0dXAuYzo4MzgKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAibm8gZXMgcG90IHRvcm5hciBhbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCBhY3R1YWwiCisKKyM6IHNldHVwLmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclKnMlcyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmZXIgc3RhdCBhIMKrJSpzJXMlc8K7IgorCisjOiBzZXR1cC5jOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCBhY3R1YWwiCisKKyM6IHNldHVwLmM6MTA5OSBzZXR1cC5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgY2FudmlhciBhIMKrJXPCuyIKKworIzogc2V0dXAuYzoxMTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICJubyDDqXMgdW4gZGlww7JzaXQgZGUgZ2l0IChuaSBjYXAgZGVscyBkaXJlY3RvcmlzIHBhcmVzKTogJXMiCisKKyM6IHNldHVwLmM6MTExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyJubyB1biBkaXDDsnNpdCBkZSBnaXQgKG5pIGNhcCBwYXJlIGZpbnMgYWwgcHVudCBkZSBtdW50YXRnZSAlcylcbiIKKyJTJ2F0dXJhIGEgbGEgZnJvbnRlcmEgZGUgc2lzdGVtYSBkZSBmaXR4ZXJzIChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNICIKKyJubyBlc3TDoCBlc3RhYmxlcnQpLiIKKworIzogc2V0dXAuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisiaGkgaGEgdW4gcHJvYmxlbWEgYW1iIGVsIHZhbG9yIGRlIG1vZGUgZGUgZml0eGVyIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAiCisiKDAlLjNvKS5cbiIKKyJFbCBwcm9waWV0YXJpIGRlbHMgZml0eGVycyBzZW1wcmUgaGEgZGUgdGVuaXIgcGVybWlzb3MgZGUgbGVjdHVyYSBpICIKKyJlc2NyaXB0dXJhLiIKKworIzogc2V0dXAuYzoxMjcxCittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBvYnJpciAvZGV2L251bGwgbyBkdXAiCisKKyM6IHNldHVwLmM6MTI4NgorbXNnaWQgImZvcmsgZmFpbGVkIgorbXNnc3RyICJlbCDCq2ZvcmvCuyBoYSBmYWxsYXQiCisKKyM6IHNldHVwLmM6MTI5MQorbXNnaWQgInNldHNpZCBmYWlsZWQiCittc2dzdHIgImwnwqtzdGFzaMK7IGhhIGZhbGxhdCIKKworIzogc2hhMS1maWxlLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3Q7IGNoZWNrIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZTogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NTgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ29iamVjdGU6ICVzIgorCisjOiBzaGExLWZpbGUuYzo2MjUKKyMsIGZ1enp5Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBlc2NyaXVyZSBlbHMgcGFyw6BtZXRyZXMgYWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiCisKKyM6IHNoYTEtZmlsZS5jOjY0MworIywgZnV6enkKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiBzaGExLWZpbGUuYzo2NTAKKyMsIGZ1enp5Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIHVuIGZpdHhlciBkJ8OtbmRleCBub3UiCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImVsIGNhbcOtIMKrJXPCuyBubyBleGlzdGVpeCIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICIiCisiRW5jYXJhIG5vIHNlIHN1cG9ydGEgZWwgZGlww7JzaXQgZGUgcmVmZXLDqG5jaWEgwqslc8K7IGNvbSBhIGFnYWZhbWVudCBlbmxsYcOnYXQuIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiZWwgZGlww7JzaXQgZGUgcmVmZXLDqG5jaWEgwqslc8K7IG5vIMOpcyB1biBkaXDDsnNpdCBsb2NhbC4iCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgImVsIGRpcMOyc2l0IGRlIHJlZmVyw6huY2lhIMKrJXPCuyDDqXMgc3VwZXJmaWNpYWwiCisKKyM6IHNoYTEtZmlsZS5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiCittc2dzdHIgImVsIGRpcMOyc2l0IGRlIHJlZmVyw6huY2lhIMKrJXPCuyDDqXMgZW1wZWx0YXQiCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo5NjQKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAibW1hcCBoYSBmYWxsYXQiCisKKyM6IHNoYTEtZmlsZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiCittc2dzdHIgImVsIHRpcHVzIGQnb2JqZWN0ZSAlcyDDqXMgYnVpdCIKKworIzogc2hhMS1maWxlLmM6MTI1MiBzaGExLWZpbGUuYzoyMzkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ29iamVjdGUgwqslc8K7IgorCisjOiBzaGExLWZpbGUuYzoxMjU0IHNoYTEtZmlsZS5jOjIzOTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ29iamVjdGU6ICVzIgorCisjOiBzaGExLWZpbGUuYzoxMjk2CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUiCittc2dzdHIgImVsIHRpcHVzIGQnb2JqZWN0ZSDDqXMgaW5jb3JyZWN0ZS4iCisKKyM6IHNoYTEtZmlsZS5jOjEzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMzgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciAlcyIKKworIzogc2hhMS1maWxlLmM6MTM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTM5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciAlcyIKKworIzogc2hhMS1maWxlLmM6MTU4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBsJ29iamVjdGUgwqslc8K7LiIKKworIzogc2hhMS1maWxlLmM6MTU4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZW1lbnQgJXMgbm90IGZvdW5kIGZvciAlcyIKK21zZ3N0ciAibm8gcydoYW4gdHJvYmF0IGxlcyBwbGFudGlsbGVzICVzIgorCisjOiBzaGExLWZpbGUuYzoxNTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAibCdvYmplY3RlIGxvY2FsICVzIMOpcyBtYWxtw6hzIgorCisjOiBzaGExLWZpbGUuYzoxNTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2JqZWN0ZSBsb2NhbCAlcyDDqXMgbWFsbcOocyIKKworIzogc2hhMS1maWxlLmM6MTY5OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE3MDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIHJldmlzacOzOiAlcyIKKworIzogc2hhMS1maWxlLmM6MTcxMworIywgZnV6enkKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICJlc2NyaXB0dXJhIGZhbGxhZGEgYWwgcmV2LWxpc3QiCisKKyM6IHNoYTEtZmlsZS5jOjE3MzIKKyMsIGZ1enp5Cittc2dpZCAiZXJyb3Igd2hlbiBjbG9zaW5nIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICJlcnJvciBlbiB0YW5jYXIgZWwgZml0eGVyIGRlIHBhcXVldCIKKworIzogc2hhMS1maWxlLmM6MTc5NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3OTkKKyMsIGZ1enp5Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciB1biDDrW5kZXggdGVtcG9yYWwiCisKKyM6IHNoYTEtZmlsZS5jOjE4MjMKKyMsIGZ1enp5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGwnb2JqZWN0ZSBkZSBub3RhIgorCisjOiBzaGExLWZpbGUuYzoxODI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZGVzaW5mbGFyIGwnb2JqZWN0ZSBhbm5leGF0ICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIgorbXNnc3RyICJoYSBmYWxsYXQgZnN0YXQgYSAlcyIKKworIzogc2hhMS1maWxlLmM6MTgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mdXNlZCBieSB1bnN0YWJsZSBvYmplY3Qgc291cmNlIGRhdGEgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9icmlyIMKrJXPCuyIKKworIzogc2hhMS1maWxlLmM6MTkyMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsJ29iamVjdGUgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE5NjIKKyMsIGZ1enp5Cittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgImF1dG9yIGNvcnJlZ2l0IGRlIGxhIGNvbWlzc2nDsyIKKworIzogc2hhMS1maWxlLmM6MTk3MAorIywgZnV6enkKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAiaW5mb3JtYSBkZSBsZXMgZXRpcXVldGVzIgorCisjOiBzaGExLWZpbGUuYzoyMDY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGVycm9yIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJlcnJvciBlbiBsbGVnaXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIwNzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInNob3J0IHJlYWQgd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgbCfDrW5kZXgiCisKKyM6IHNoYTEtZmlsZS5jOjIxNDUgc2hhMS1maWxlLmM6MjE1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiZ3BnIGhhIGZhbGxhdCBlbiBzaWduYXIgbGVzIGRhZGVzIgorCisjOiBzaGExLWZpbGUuYzoyMTYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICJ2ZXJzacOzIGQnw61uZGV4IG5vIGNvbXBhdGlibGUgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIxODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1bmEgdGVybWUgdsOgbGlkIgorCisjOiBzaGExLWZpbGUuYzoyMTg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgbm8gw6lzIHVuIG9iamVjdGUgZGUgwqslc8K7IHbDoGxpZCIKKworIzogc2hhMS1maWxlLmM6MjIxMyBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0MDMgc2hhMS1maWxlLmM6MjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjI0MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciAlcyIKKworIzogc2hhMS1maWxlLmM6MjQzOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIGNvbnRhY3RlOiAlcyIKKworIzogc2hhMS1uYW1lLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJsJ1NIQTEgJXMgY3VydCDDqXMgYW1iaWd1IgorCisjOiBzaGExLW5hbWUuYzo0OTgKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICJFbHMgY2FuZGlkYXRzIHPDs246IgorCisjOiBzaGExLW5hbWUuYzo3OTcKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBub3JtYWxtZW50IG1haSBjcmVhIHVuYSByZWZlcsOobmNpYSBxdWUgYWNhYmkgYW1iIDQwIGNhcsOgY3RlcnNcbiIKKyJoZXhhZGVjaW1hbHMgcGVycXXDqCBzJ2lnbm9yYXLDoCBxdWFuIG5vbcOpcyBlc3BlY2lmaXF1ZXUgNDAgY2Fyw6BjdGVyc1xuIgorImhleGFkZWNpbWFscy4gQXF1ZXN0ZXMgcmVmZXLDqG5jaWVzIGVzIHBvZGVuIGNyZWFyIHBlciBlcnJvci4gUGVyXG4iCisiZXhlbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJvbiDCqyRicsK7IMOpcyBkJ2FsZ3VuYSBtYW5lcmEgYnVpZGEgaSB1bmEgcmVmZXLDqG5jaWEgZGUgNDAgY2Fyw6BjdGVyc1xuIgorImhleGFkZWNpbWFscy4gRXhhbWluZXUgYXF1ZXN0ZXMgcmVmZXLDqG5jaWVzIGkgcG90c2VyXG4iCisic3VwcmltaXUtbGVzLiBEZXNhY3RpdmV1IGFxdWVzdCBtaXNzYXRnZSBleGVjdXRhbnRcbiIKKyLCq2dpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlwrsiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZQorIzogc3RyYnVmLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCL3MiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlCisjOiBzdHJidWYuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIvcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQi9zIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlCisjOiBzdHJidWYuYzo4NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzIgorbXNnc3RyWzBdICIldSBieXRlIgorbXNnc3RyWzFdICIldSBieXRlcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUvcyIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMvcyIKK21zZ3N0clswXSAib2N0ZXRzIgorbXNnc3RyWzFdICJvY3RldHMiCisKKyM6IHN0cmJ1Zi5jOjExNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIMKrJXPCuyIKKworIzogc3VibW9kdWxlLmM6MTE0IHN1Ym1vZHVsZS5jOjE0MworbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisiTm8gZXMgcG90IGNhbnZpYXIgdW4gLmdpdG1vZHVsZXMgbm8gZnVzaW9uYXQsIHByaW1lciByZXNvbGV1IGVscyBjb25mbGljdGVzICIKKyJkZSBmdXNpw7MiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSBzZWNjacOzIGVuIC5naXRtb2R1bGVzIG9uIHBhdGg9JXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlbGltaW5hciBsJ2VudHJhZGEgZGUgLmdpdG1vZHVsZXMgcGVyIGEgJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NQorbXNnaWQgInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCittc2dzdHIgImwnYWxsaXN0YW1lbnQgZGVsIC5naXRtb2R1bGVzIGFjdHVhbGl0emF0IGhhIGZhbGxhdCIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJhbCBzdWJtw7JkdWwgc2Vuc2UgcG9wdWxhciDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoc3BlYyAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgIkwnZXNwZWNpZmljYWNpw7Mgwqslc8K7IMOpcyBlbiBlbCBzdWJtw7JkdWwgwqslLipzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAibCdlbnRyYWRhIGRlbCBzdWJtw7JkdWwgwqslc8K7ICglcykgw6lzIGEgJXMsIG5vIMOpcyB1bmEgY29taXNzacOzIgorCisjOiBzdWJtb2R1bGUuYzoxMTQ3IGJ1aWx0aW4vYnJhbmNoLmM6NjgwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDE2Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVzb2xkcmUgSEVBRCBjb20gYSByZWZlcsOobmNpYSB2w6BsaWRhLiIKKworIzogc3VibW9kdWxlLmM6MTQ4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjZXJjYXIgcmVjdXJzaXZhbWVudCBhbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiwqslc8K7IG5vIHJlY29uZWd1dCBjb20gdW4gZGlww7JzaXQgZ2l0IgorCisjOiBzdWJtb2R1bGUuYzoxNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgaW5pY2lhciDCq2dpdCBzdGF0dXPCuyBhbCBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyICdnaXQgc3RhdHVzJyBhbCBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdW5zZXQgY29yZS53b3JrdHJlZSBzZXR0aW5nIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyICdnaXQgc3RhdHVzJyBhbCBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoxOTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAiZWwgc3VibcOyZHVsIMKrJXPCuyB0w6kgbCfDrW5kZXggYnJ1dCIKKworIzogc3VibW9kdWxlLmM6MTk1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICJTdWJtw7JkdWxzIGNhbnZpYXRzIHBlcsOyIG5vIGFjdHVhbGl0emF0czoiCisKKyM6IHN1Ym1vZHVsZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicmVsb2NhdGVfZ2l0ZGlyIGZvciBzdWJtb2R1bGUgJyVzJyB3aXRoIG1vcmUgdGhhbiBvbmUgd29ya3RyZWUgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorIm5vIGVzdMOgIGFkbcOocyByZWxvY2F0ZV9naXRkaXIgcGVyIGFsIHN1Ym3DsmR1bCDCqyVzwrsgYW1iIG3DqXMgZCd1biBhcmJyZSBkZSAiCisidHJlYmFsbCIKKworIzogc3VibW9kdWxlLmM6MjA2MCBzdWJtb2R1bGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgdHJvYmF0IGVsIG5vbSBwZWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogc3VibW9kdWxlLmM6MjA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBtb3ZlICclcycgaW50byBhbiBleGlzdGluZyBnaXQgZGlyIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgbWlncmFudCBlbCBkaXJlY3RvcmkgZGUgwqslcyVzwrsgZGVzIGRlXG4iCisiwqslc8K7IGFcbiIKKyLCqyVzwrtcbiIKKworIzogc3VibW9kdWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNlcmNhciByZWN1cnNpdmFtZW50IGFsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjIxOTgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgaW5pY2lhciBscy1maWxlcyBhIC4uIgorCisjOiBzdWJtb2R1bGUuYzoyMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSBoYSByZXRvcm5hdCB1biBjb2RpIGRlIHJldG9ybiAlZCBubyBlc3BlcmF0IgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MjM2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAicydlc3TDoCBpZ25vcmFudCBsYSByZWZlcsOobmNpYSBhbWIgbm9tIG1hbG3DqHMgJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzozMDMKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZXMgbm90IGFsbG93ZWQgZm9yIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCittc2dzdHIgIm5vIGVzIHBlcm1ldGVuIGVscyB2YWxvcnMgbmVnYXRpdXMgYSBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICclcycgd2hpY2ggbWF5IGJlIGludGVycHJldGVkIGFzIGEgY29tbWFuZC1saW5lIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAidmFsb3Igbm8gdsOgbGlkIHBlciBhICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgbCdlbnRyYWRhIGRlIC5naXRtb2R1bGVzICVzIgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICJsJ2V4ZWN1Y2nDsyBkZSBsJ29yZHJlIGRlIHJlbW9sYyDCqyVzwrsgaGEgZmFsbGF0IgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAidmFsb3IgZGVzY29uZWd1dCDCqyVzwrsgcGVyIGEgbGEgY2xhdSDCqyVzwrsiCisKKyM6IHRyYWlsZXIuYzo1MzkgdHJhaWxlci5jOjU0NCBidWlsdGluL3JlbW90ZS5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICJtw6lzIGQndW4gJXMiCisKKyM6IHRyYWlsZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAidGVzdGltb25pIGRlIHJlbW9sYyBidWl0IGVuIGVsIHJlbW9sYyAnJS4qcyciCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZCdlbnRyYWRhIMKrJXPCuyIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGRlcyBkZSBzdGRpbiIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmZXIgc3RhdCBhICVzIgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiZWwgZml0eGVyICVzIG5vIMOpcyB1biBmaXR4ZXIgcmVndWxhciIKKworIzogdHJhaWxlci5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIKK21zZ3N0ciAiZWwgZml0eGVyICVzIG5vIMOpcyBncmF2YWJsZSBwZXIgbCd1c3VhcmkiCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZml0eGVyIHRlbXBvcmFsIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNhbnZpYXIgZWwgbm9tIGRlbCBmaXR4ZXIgdGVtcG9yYWwgYSAlcyIKKworIzogdHJhbnNwb3J0LmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIgorbXNnc3RyICJDYW52aWFyaWEgbGEgZm9udCBkZSDCqyVzwrsgYSDCqyVzwrsgZGUgwqslc8K7XG4iCisKKyM6IHRyYW5zcG9ydC5jOjE0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInRyYW5zcG9ydDogb3BjacOzIGRlIHByb2Z1bmRpdGF0IG5vIHbDoGxpZGEgwqslc8K7IgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorIywgZnV6enkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ3NjcmlwdCBkJ2F1dG9yIgorCisjOiB0cmFuc3BvcnQuYzo3MDUKK21zZ2lkICJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICJ2YWxvciBkZXNjb25lZ3V0IMKrJXPCuyBwZXIgYSBsYSBjbGF1IMKrJXPCuyIKKworIzogdHJhbnNwb3J0LmM6ODk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAibm8gcydoYSB0cm9iYXQgbGEgYnJhbmNhIMKrJXPCuy4iCisKKyM6IHRyYW5zcG9ydC5jOjk0OQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIiIKKyJFbHMgY2FtaW5zIGRlIHN1Ym3DsmR1bCBzZWfDvGVudHMgY29udGVuZW4gY2FudmlzIHF1ZSBub1xuIgorImVzIHBvZGVuIHRyb2JhciBlbiBjYXAgcmVtb3Q6XG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiSW50ZW50ZXVcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm8gY2FudmlhciBkZSBkaXJlY3RvcmkgYWwgY2Ftw60gaSB1c2V1XG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInBlciBhIHB1amFyLWxvcyBhIHVuIHJlbW90LlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDU2Cittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICJTJ2VzdMOgIGF2b3J0YW50LiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorIywgZnV6enkKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBhbGwgbmVlZGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY2VyY2FyIHJlY3Vyc2l2YW1lbnQgYWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU2CisjLCBmdXp6eQorbXNnaWQgIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICJvcGNpw7Mgbm8gYWRtZXNhIGFtYiAtLXJlY3Vyc2Utc3VibW9kdWxlcy4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MSB0cmFuc3BvcnQtaGVscGVyLmM6OTAKKyMsIGZ1enp5Cittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAiaW1wcmltZWl4IGwnZXN0YXQgZGVzIGRlIGwnYWp1ZGFudCByZW1vdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgcmVtb3RlIGhlbHBlciBmb3IgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhZmVnaXIgZWwgcmVzdWx0YXQgZGUgZnVzacOzIHBlciBhIMKrJXPCuyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcwCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciCittc2dzdHIgImJsb2IgZXNwZXJhdCBwZXIgYSAlcyDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxzbyBsb2NrZWQgJXMiCittc2dzdHIgIiVzIHRhbWLDqSBoYSBibG9xdWVqYXQgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0OTIKKyMsIGZ1enp5Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIMKrc3Rhc2jCuy4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MTUKKyMsIGZ1enp5Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAiZXJyb3IgZW4gdGFuY2FyIGVsIGZpdHhlciBkZSBwYXF1ZXQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDQgdHJhbnNwb3J0LWhlbHBlci5jOjExMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXIgbGEgcmVmZXLDqG5jaWEgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiCittc2dzdHIgIm9wY2nDsyBkZXNjb25lZ3VkYTogJXNcbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxMQorbXNnaWQgInNldHRpbmcgcmVtb3RlIHNlcnZpY2UgcGF0aCBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTMKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICJyZWZlcsOobmNpYSBubyB2w6BsaWRhOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjb25uZWN0IHRvIHN1YnNlcnZpY2UgJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjczNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgImJsb2IgZXNwZXJhdCBwZXIgYSAlcyDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIKK21zZ3N0ciAibHMtdHJlZSBoYSByZXRvcm5hdCB1biBjb2RpIGRlIHJldG9ybiAlZCBubyBlc3BlcmF0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBhZG1ldCAtLWRlZXBlbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IC0tc2hhbGxvdy1zaW5jZSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgImVsIGRlc3TDrSByZWNlcHRvciBubyBhZG1ldCBwdWphciAtLXNpZ25lZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIGFkbWV0IC0tc2hhbGxvdy1zaW5jZSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAiZWwgZGVzdMOtIHJlY2VwdG9yIG5vIGFkbWV0IG9wY2lvbnMgZGUgcHVqYWRhIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY0Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gYWRtZXQgLS1kZWVwZW4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE2CisjLCBmdXp6eQorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBleGVjdXRhciDCq3N0YXNowrsuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMQorIywgZnV6enkKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICJlcnJvciBlbiB0YW5jYXIgZWwgZml0eGVyIGRlIHBhcXVldCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKyJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICJmdWxsIGQnb3BjaW9ucyBtYWwgZm9ybWF0OiDCqyVzwrsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIiVzIGhhIGZhbGxhdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndyaXRlKCVzKSBmYWlsZWQiCittc2dzdHIgIiVzIGhhIGZhbGxhdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgIiVzIGhhIGZhbGxhdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM3MCB0cmFuc3BvcnQtaGVscGVyLmM6MTM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQgdG8gd2FpdCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiVzIGhhIGZhbGxhdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzMgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDIKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAib2JqZWN0ZSBkJ2FyYnJlIG1hc3NhIGN1cnQiCisKKyM6IHRyZWUtd2Fsay5jOjM5Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAibW9kZSBtYWwgZm9ybWF0IGVuIGVudHJhZGEgZCdhcmJyZSIKKworIzogdHJlZS13YWxrLmM6NDMKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJub20gZGUgZml0eGVyIGJ1aXQgZW4gdW5hIGVudHJhZGEgZCdhcmJyZSIKKworIzogdHJlZS13YWxrLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSBjb250YWlucyBiYWNrc2xhc2g6ICclcyciCittc2dzdHIgIiIKKworIzogdHJlZS13YWxrLmM6MTI0Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAiZml0eGVyIGQnYXJicmUgbWFzc2EgY3VydCIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkVscyB2b3N0cmVzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmllbiBwZXIgIgorImFnYWZhcjpcbiIKKyIlJXNDb21ldGV1IGVscyB2b3N0cmVzIGNhbnZpcyBvIGZldSDCq3N0YXNowrsgYWJhbnMgZGUgY2FudmlhciBkZSBicmFuY2EuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkVscyB2b3N0cmVzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmllbiBwZXIgIgorImFnYWZhcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkVscyB2b3N0cmVzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmllbiBwZXIgIgorImZ1c2lvbmFyOlxuIgorIiUlc0NvbWV0ZXUgZWxzIHZvc3RyZXMgY2FudmlzIG8gZmV1IMKrc3Rhc2jCuyBhYmFucyBkZSBmdXNpb25hci4iCisKKyM6IHVucGFjay10cmVlcy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRWxzIHZvc3RyZXMgY2FudmlzIGxvY2FscyBhbHMgZml0eGVycyBzZWfDvGVudHMgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiZnVzaW9uYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJFbHMgdm9zdHJlcyBjYW52aXMgbG9jYWxzIGFscyBmaXR4ZXJzIHNlZ8O8ZW50cyBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICVzOlxuIgorIiUlc0NvbWV0ZXUgZWxzIHZvc3RyZXMgY2FudmlzIG8gZmV1IMKrc3Rhc2jCuyBhYmFucyBkZSAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRWxzIHZvc3RyZXMgY2FudmlzIGxvY2FscyBhbHMgZml0eGVycyBzZWfDvGVudHMgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisiRW4gYWN0dWFsaXR6YXIgZWxzIGRpcmVjdG9yaXMgc2Vnw7xlbnRzIHBlcmRyaWEgZml0eGVycyBubyBzZWd1aXRzIGVuIGVsOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzJ2VsaW1pbmFyaWVuIHBlciAiCisiYWdhZmFyOlxuIgorIiUlc01vdmV1LWxvcyBvIGVsaW1pbmV1LWxvcyBhYmFucyBkZSBjYW52aWFyIGRlIGJyYW5jYS4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRWxzIHNlZ8O8ZW50cyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIHMnZWxpbWluYXJpZW4gcGVyICIKKyJhZ2FmYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiRWxzIHNlZ8O8ZW50cyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIHMnZWxpbWluYXJpZW4gcGVyICIKKyJmdXNpb25hcjpcbiIKKyIlJXNNb3ZldS1sb3MgbyBlbGltaW5ldS1sb3MgYWJhbnMgZGUgZnVzaW9uYXIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzJ2VsaW1pbmFyaWVuIHBlciAiCisiZnVzaW9uYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiRWxzIHNlZ8O8ZW50cyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIHMnZWxpbWluYXJpZW4gcGVyICVzOlxuIgorIiUlc01vdmV1LWxvcyBvIGVsaW1pbmV1LWxvcyBhYmFucyBkZSAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRWxzIHNlZ8O8ZW50cyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIHMnZWxpbWluYXJpZW4gcGVyICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICIKKyJhZ2FmYXI6XG4iCisiJSVzTW92ZXUtbG9zIG8gZWxpbWluZXUtbG9zIGFiYW5zIGRlIGNhbnZpYXIgZGUgYnJhbmNhLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICIKKyJhZ2FmYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICIKKyJmdXNpb25hcjpcbiIKKyIlJXNNb3ZldS1sb3MgbyBlbGltaW5ldS1sb3MgYWJhbnMgZGUgZnVzaW9uYXIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJFbHMgc2Vnw7xlbnRzIGZpdHhlcnMgbm8gc2VndWl0cyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiZnVzaW9uYXI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkVscyBzZWfDvGVudHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyICIKKyIlczpcbiIKKyIlJXNNb3ZldS1sb3MgbyBlbGltaW5ldS1sb3MgYWJhbnMgZGUgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJFbHMgc2Vnw7xlbnRzIGZpdHhlcnMgbm8gc2VndWl0cyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiJXM6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIkwnZW50cmFkYSDCqyVzwrsgZW5jYXZhbGNhIGFtYiDCqyVzwrsuICBObyBlcyBwb3QgdmluY3VsYXIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiTm8gZXMgcG90IGFjdHVhbGl0emFyIGwnYWdhZmFtZW50IHBhcmNpYWw6IGxlcyBlbnRyYWRlcyBzZWfDvGVudHMgbm8gZXN0YW4gYWwgIgorImRpYTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkVscyBmaXR4ZXJzIHNlZ8O8ZW50cyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgc2Ugc29icmVlc2NyaXVyaWVuIHBlciAiCisiYWN0dWFsaXR6YXIgbCdhZ2FmYW1lbnQgcGFyY2lhbDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiRWxzIGZpdHhlcnMgc2Vnw7xlbnRzIGVuIGwnYXJicmUgZGUgdHJlYmFsbCBzJ2VsaW1pbmFyaWVuIHBlciBhY3R1YWxpdHphciAiCisibCdhZ2FmYW1lbnQgcGFyY2lhbDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBhY3R1YWxpdHphciBlbCBzdWJtw7JkdWw6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICJTJ2VzdMOgIGF2b3J0YW50XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICJTJ2VzdGFuIGFjdHVhbGl0emFudCBlbHMgZml0eGVycyIKKworIzogdW5wYWNrLXRyZWVzLmM6MzQ5Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorIm9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtKSBhbmQgb25seSBvbmUgZnJvbSB0aGUgc2FtZVxuIgorImNvbGxpZGluZyBncm91cCBpcyBpbiB0aGUgd29ya2luZyB0cmVlOlxuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDEKKyMsIGZ1enp5Cittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIlMnZXN0YW4gYWN0dWFsaXR6YW50IGVscyBmaXR4ZXJzIgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJsJ2VzcXVlbWEgZCdVUkwgbm8gw6lzIHbDoGxpZCBvIGxpIG1hbmNhIGVsIHN1Zml4ICc6Ly8nIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInNlccO8w6huY2lhIGQnZXNjYXBhbWVudCAlWFggbm8gdsOgbGlkYSIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAibWFuY2EgbGEgbcOgcXVpbmEgaSBsJ2VzcXVlbWEgbm8gw6lzICdmaWxlOiciCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAidW4gVVJMICdmaWxlOicgbm8gcG90IHRlbmlyIG7Dum1lcm8gZGUgcG9ydCIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJoaSBoYSBjYXLDoGN0ZXJzIG5vIHbDoGxpZHMgZW4gZWwgbm9tIGRlIG3DoHF1aW5hIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm7Dum1lcm8gZGUgcG9ydCBubyB2w6BsaWQiCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAic2VnbWVudCBkZSBjYW3DrSAnLi4nIG5vIHbDoGxpZCIKKworIzogd29ya3RyZWUuYzoyNTggYnVpbHRpbi9hbS5jOjIwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgwqslc8K7IgorCisjOiB3b3JrdHJlZS5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIsKrJXPCuyBubyBleGlzdGVpeCIKKworIzogd29ya3RyZWUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW4gZml0eGVyIC5naXQsIGNvZGkgZCdlcnJvciAlZCIKKworIzogd29ya3RyZWUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIsKrJXPCuyBubyBhc3NlbnlhbGEgZGUgdG9ybmFkYSBhIMKrJXPCuyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgwqslc8K7IHBlciBhIGxlY3R1cmEgaSBlc2NyaXB0dXJhIgorCisjOiB3cmFwcGVyLmM6Mzg3IHdyYXBwZXIuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjY2VkaXIgYSDCqyVzwrsiCisKKyM6IHdyYXBwZXIuYzo1OTYKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCBhY3R1YWwiCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiQ2FtaW5zIHNlbnNlIGZ1c2lvbmFyOiIKKworIzogd3Qtc3RhdHVzLmM6MTg3IHd0LXN0YXR1cy5jOjIxOQorIywgZnV6enkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCByZXNldCAlcyA8Zml0eGVyPi4uLlwiIHBlciBhIGZlciDCq3Vuc3RhZ2XCuykiCisKKyM6IHd0LXN0YXR1cy5jOjE5MCB3dC1zdGF0dXMuYzoyMjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IHJlc2V0ICVzIDxmaXR4ZXI+Li4uXCIgcGVyIGEgZmVyIMKrdW5zdGFnZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBybSAtLWNhY2hlZCA8Zml0eGVyPi4uLlwiIHBlciBhIGZlciDCq3Vuc3RhZ2XCuykiCisKKyM6IHd0LXN0YXR1cy5jOjE5NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBhZGQgPGZpdHhlcj4uLi5cIiBwZXIgYSBzZW55YWxhciByZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MTk5IHd0LXN0YXR1cy5jOjIwMworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHVzZXUgXCJnaXQgYWRkL3JtIDxmaXR4ZXI+Li4uXCIgc2Vnb25zIHNpZ3VpIGFwcm9waWF0IHBlciBhIHNlbnlhbGFyICIKKyJyZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MjAxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcm0gPGZpdHhlcj4uLi5cIiBwZXIgYSBzZW55YWxhciByZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MjExIHd0LXN0YXR1cy5jOjEwNzQKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkNhbnZpcyBhIGNvbWV0cmU6IgorCisjOiB3dC1zdGF0dXMuYzoyMzQgd3Qtc3RhdHVzLmM6MTA4MworbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiQ2FudmlzIG5vIMKrc3RhZ2VkwrsgcGVyIGEgY29tZXRyZToiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IGFkZCA8Zml0eGVyPi4uLlwiIHBlciBhIGFjdHVhbGl0emFyIHF1w6ggZXMgY29tZXRyw6ApIgorCisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBhZGQvcm0gPGZpdHhlcj4uLi5cIiBwZXIgYSBhY3R1YWxpdHphciBxdcOoIGVzIGNvbWV0csOgKSIKKworIzogd3Qtc3RhdHVzLmM6MjQxCisjLCBmdXp6eQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAodXNldSBcImdpdCBjaGVja291dCAtLSA8Zml0eGVyPi4uLlwiIHBlciBhIGRlc2NhcnRhciBlbHMgY2FudmlzIGVuIGVsICIKKyJkaXJlY3RvcmkgZGUgdHJlYmFsbCkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGNvbWV0ZXUgbyBkZXNjYXJ0ZXUgZWwgY29udGluZ3V0IG1vZGlmaWNhdCBvIG5vIHNlZ3VpdCBlbiBlbHMgc3VibcOyZHVscykiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCAlcyA8Zml0eGVyPi4uLlwiIHBlciBhIGluY2xvdXJlLWhvIGVuIGVsIHF1ZSBlcyBjb21ldHLDoCkiCisKKyM6IHd0LXN0YXR1cy5jOjI2OAorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgInN1cHJpbWl0IHBlciBhbWJkw7NzOiIKKworIzogd3Qtc3RhdHVzLmM6MjcwCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICJhZmVnaXQgcGVyIG5vc2FsdHJlczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgInN1cHJpbWl0IHBlciBlbGxzOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc0Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgImFmZWdpdCBwZXIgZWxsczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICJzdXByaW1pdCBwZXIgbm9zYWx0cmVzOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc4Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgImFmZWdpdCBwZXIgYW1iZMOzczoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmljYXQgcGVyIGFtYmTDs3M6IgorCisjOiB3dC1zdGF0dXMuYzoyOTAKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgImZpdHhlciBub3U6IgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICJjb3BpYXQ6IgorCisjOiB3dC1zdGF0dXMuYzoyOTQKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAic3VwcmltaXQ6IgorCisjOiB3dC1zdGF0dXMuYzoyOTYKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgIm1vZGlmaWNhdDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5OAorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICJjYW52aWF0IGRlIG5vbToiCisKKyM6IHd0LXN0YXR1cy5jOjMwMAorbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICJjYW52aWF0IGRlIHRpcHVzOiIKKworIzogd3Qtc3RhdHVzLmM6MzAyCittc2dpZCAidW5rbm93bjoiCittc2dzdHIgImRlc2NvbmVndXQ6IgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgInNlbnNlIGZ1c2lvbmFyOiIKKworIzogd3Qtc3RhdHVzLmM6Mzg0Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAiY29taXNzaW9ucyBub3ZlcywgIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRpbmd1dCBtb2RpZmljYXQsICIKKworIzogd3Qtc3RhdHVzLmM6Mzg4Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGluZ3V0IG5vIHNlZ3VpdCwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAiTCfCq3N0YXNowrsgdMOpIGFjdHVhbG1lbnQgJWQgZW50cmFkYSIKK21zZ3N0clsxXSAiTCfCq3N0YXNowrsgdMOpIGFjdHVhbG1lbnQgJWQgZW50cmFkZXMiCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJTdWJtw7JkdWxzIGNhbnZpYXRzIHBlcsOyIG5vIGFjdHVhbGl0emF0czoiCisKKyM6IHd0LXN0YXR1cy5jOjk0MAorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkNhbnZpcyBkZSBzdWJtw7JkdWwgYSBjb21ldHJlOiIKKworIzogd3Qtc3RhdHVzLmM6MTAyMgorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKyJObyBtb2RpZmlxdWV1IG8gc3VwcmltaXUgbGEgbMOtbmlhIGRlIGRhbHQuXG4iCisiVG90IGVsIHF1ZSBoaSBoYSBhIHNvdGEgcydpZ25vcmFyw6AuIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NAorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAiVGVuaXUgY2FtaW5zIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZXhlY3V0ZXUgXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiBwZXIgYSBhdm9ydGFyIGxhIGZ1c2nDsykiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJUb3RzIGVscyBjb25mbGljdGVzIGVzdGFuIGFycmVnbGF0cyBwZXLDsiBlbmNhcmEgZXN0ZXUgZnVzaW9uYW50LiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgY29tbWl0XCIgcGVyIGEgY29uY2xvdXJlIGxhIGZ1c2nDsykiCisKKyM6IHd0LXN0YXR1cy5jOjExNjUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIkVzdGV1IGVubWlnIGQndW5hIHNlc3Npw7MgYW0uIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJFbCBwZWRhw6cgYWN0dWFsIGVzdMOgIGJ1aXQuIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYXJyZWdsZXUgZWxzIGNvbmZsaWN0ZXMgaSBkZXNwcsOpcyBleGVjdXRldSBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgYW0gLS1za2lwXCIgcGVyIGEgb21ldHJlIGFxdWVzdCBwZWRhw6cpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IGFtIC0tYWJvcnRcIiBwZXIgYSByZXN0YXVyYXIgbGEgYnJhbmNhIG9yaWdpbmFsKSIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAiTWFuY2EgZ2l0LXJlYmFzZS10b2RvLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxMQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICJObyBzJ2hhIGZldCBjYXAgb3JkcmUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIsOabHRpbWEgb3JkcmUgZmV0YSAoJWQgb3JkcmUgZmV0YSk6IgorbXNnc3RyWzFdICLDmmx0aW1lcyBvcmRyZXMgZmV0ZXMgKCVkIG9yZHJlcyBmZXRlcyk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgICh2ZWdldSBtw6lzIGVuIGVsIGZpdHhlciAlcykiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzAKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICJObyBtYW5jYSBjYXAgb3JkcmUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIk9yZHJlIHNlZ8O8ZW50IGEgZmVyIChtYW5jYSAlZCBvcmRyZSk6IgorbXNnc3RyWzFdICJPcmRyZXMgc2Vnw7xlbnRzIGEgZmVyIChtYW5xdWVuICVkIG9yZHJlcyk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzQxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHBlciBhIHZldXJlIGkgZWRpdGFyKSIKKworIzogd3Qtc3RhdHVzLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBlc3RldSBmZW50IMKrcmViYXNlwrsgZGUgbGEgYnJhbmNhIMKrJXPCuyBlbiDCqyVzwrsuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IGZlbnQgwqtyZWJhc2XCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZGVzcHLDqXMgZXhlY3V0ZXUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHBlciBhIG9tZXRyZSBhcXVlc3QgcGVkYcOnKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHBlciBhIGFnYWZhciBsYSBicmFuY2Egb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodG90cyBlbHMgY29uZmxpY3RlcyBlc3RhbiBhcnJlZ2xhdHM6IGV4ZWN1dGV1IFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJBY3R1YWxtZW50IGVzdGV1IGRpdmlkaW50IHVuYSBjb21pc3Npw7MgbWVudHJlIGVzIGZhIMKrcmViYXNlwrsgZGUgbGEgYnJhbmNhICIKKyLCqyVzwrsgZW4gwqslc8K7LiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IGRpdmlkaW50IHVuYSBjb21pc3Npw7MgZHVyYW50IHVuIMKrcmViYXNlwrsuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChVbmEgdmVnYWRhIHF1ZSBlbCB2b3N0cmUgZGlyZWN0b3JpIGRlIHRyZWJhbGwgc2lndWkgbmV0LCBleGVjdXRldSBcImdpdCAiCisicmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIkFjdHVhbG1lbnQgZXN0ZXUgZWRpdGFudCB1bmEgY29taXNzacOzIG1lbnRyZSBlcyBmYSDCq3JlYmFzZcK7IGRlIGxhIGJyYW5jYSAiCisiwqslc8K7IGVuIMKrJXPCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkFjdHVhbG1lbnQgZXN0ZXUgZWRpdGFudCB1bmEgY29taXNzacOzIGR1cmFudCB1biDCq3JlYmFzZcK7LiIKKworIzogd3Qtc3RhdHVzLmM6MTQwNgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBwZXIgYSBlc21lbmFyIGxhIGNvbWlzc2nDsyBhY3R1YWwpIgorCisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAodXNldSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHVuYSB2ZWdhZGEgcXVlIGVzdGlndWV1IHNhdGlzZmV0IGFtYiBlbHMgIgorInZvc3RyZXMgY2FudmlzKSIKKworIzogd3Qtc3RhdHVzLmM6MTQxOQorIywgZnV6enkKK21zZ2lkICJDaGVycnktcGljayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJuaSBoaSBoYSBjYXAgwqtjaGVycnkgcGlja8K7IG5pIGNhcCByZXZlcnNpw7MgZW4gY3VycyIKKworIzogd3Qtc3RhdHVzLmM6MTQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IGZlbnQgwqtjaGVycnkgcGlja8K7IGEgbGEgY29taXNzacOzICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTQyOQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChhcnJlZ2xldSBlbHMgY29uZmxpY3RlcyBpIGV4ZWN1dGV1IFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzIKKyMsIGZ1enp5Cittc2dpZCAiICAocnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZXhlY3V0ZXUgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNQorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodG90cyBlbHMgY29uZmxpY3RlcyBlc3RhbiBhcnJlZ2xhdHM6IGV4ZWN1dGV1IFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiCisiXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3CisjLCBmdXp6eQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IGFtIC0tc2tpcFwiIHBlciBhIG9tZXRyZSBhcXVlc3QgcGVkYcOnKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAodXNldSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgcGVyIGEgY2FuY2VswrdsYXIgbCdvcGVyYWNpw7MgZGUgwqtjaGVycnkgIgorInBpY2vCuykiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDkKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgImF2b3J0YSBsYSBmdXNpw7MgZW4gY3VycyBhY3R1YWwiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkFjdHVhbG1lbnQgZXN0ZXUgcmV2ZXJ0aW50IGxhIGNvbWlzc2nDsyAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTgKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZXhlY3V0ZXUgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjEKKyMsIGZ1enp5Cittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChhcnJlZ2xldSBlbHMgY29uZmxpY3RlcyBpIGV4ZWN1dGV1IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY0Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodG90cyBlbHMgY29uZmxpY3RlcyBlc3RhbiBhcnJlZ2xhdHM6IGV4ZWN1dGV1IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY2CisjLCBmdXp6eQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCByZWJhc2UgLS1za2lwXCIgcGVyIGEgb21ldHJlIGFxdWVzdCBwZWRhw6cpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHVzZXUgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiBwZXIgYSBjYW5jZWzCt2xhciBsJ29wZXJhY2nDsyBkZSByZXZlcnNpw7MpIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBlc3RldSBiaXNlY2FudCwgaGV1IGNvbWVuw6dhdCBkZXMgZGUgbGEgYnJhbmNhIMKrJXPCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0ODIKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IGJpc2VjYW50LiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBiaXNlY3QgcmVzZXRcIiBwZXIgYSB0b3JuYXIgYSBsYSBicmFuY2Egb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxNjk0Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiRW4gbGEgYnJhbmNhICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIsKrcmViYXNlwrsgaW50ZXJhY3RpdSBlbiBjdXJzOyBzb2JyZSAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDMKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLCq3JlYmFzZcK7IGVuIGN1cnM7IHNvYnJlICIKKworIzogd3Qtc3RhdHVzLmM6MTcxMworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIkFjdHVhbG1lbnQgbm8gcyfDqXMgZW4gY2FwIGJyYW5jYS4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MzAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiQ29taXNzacOzIGluaWNpYWwiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiTm8gcydoYSBmZXQgY2FwIGNvbWlzc2nDsyBlbmNhcmEiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkZpdHhlcnMgbm8gc2VndWl0cyIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIkZpdHhlcnMgaWdub3JhdHMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIkhhIHRyaWdhdCAlLjJmIHNlZ29ucyBlbnVtZXJhciBlbHMgZml0eGVycyBubyBzZWd1aXRzLlxuIgorIidzdGF0dXMgLXVubycgcG90IGFjY2VsZXJhci1obywgcGVyw7IgaGV1IGQnYW5hciBhbWIgY29tcHRlIGRlIG5vXG4iCisib2JsaWRhci12b3MgZCdhZmVnaXIgZml0eGVycyBub3VzIHZvc2FsdHJlcyBtYXRlaXhvcyAodmVnZXVcbiIKKyInZ2l0IGhlbHAgc3RhdHVzJykuIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIkVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMgbm8gZXN0YW4gbGxpc3RhdHMlcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAodXNldSBsJ29wY2nDsyAtdSBwZXIgYSBtb3N0cmFyIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMpIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiU2Vuc2UgY2FudmlzIgorCisjOiB3dC1zdGF0dXMuYzoxNzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisibm8gaGkgaGEgY2FudmlzIGFmZWdpdHMgYSBjb21ldHJlICh1c2V1IFwiZ2l0IGFkZFwiIG8gXCJnaXQgY29tbWl0IC1hXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAibm8gaGkgaGEgY2FudmlzIGFmZWdpdHMgYSBjb21ldHJlXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorIm5vIGhpIGhhIHJlcyBhZmVnaXQgYSBjb21ldHJlIHBlcsOyIGhpIGhhIGZpdHhlcnMgbm8gc2VndWl0cyAodXNldSBcImdpdCBhZGQiCisiXCIgcGVyIGEgc2VndWlyLWxvcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAibm8gaGkgaGEgcmVzIGFmZWdpdCBhIGNvbWV0cmUgcGVyw7IgaGkgaGEgZml0eGVycyBubyBzZWd1aXRzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyJubyBoaSBoYSByZXMgYSBjb21ldHJlIChjcmVldS9jb3BpZXUgZml0eGVycyBpIHVzZXUgXCJnaXQgYWRkXCIgcGVyIGEgc2VndWlyLSIKKyJsb3MpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODUgd3Qtc3RhdHVzLmM6MTc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICJubyBoaSBoYSByZXMgYSBjb21ldHJlXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorIm5vIGhpIGhhIHJlcyBhIGNvbWV0cmUgKHVzZXUgLXUgcGVyIGEgbW9zdHJhciBlbHMgZml0eGVycyBubyBzZWd1aXRzKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW5cbiIKK21zZ3N0ciAibm8gaGkgaGEgcmVzIGEgY29tZXRyZSwgbCdhcmJyZSBkZSB0cmViYWxsIGVzdMOgIG5ldFxuIgorCisjOiB3dC1zdGF0dXMuYzoxOTA1Cittc2dpZCAiTm8gY29tbWl0cyB5ZXQgb24gIgorbXNnc3RyICJObyBzJ2hhIGZldCBjYXAgY29taXNzacOzIGVuY2FyYSBhICIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKHNlbnNlIGJyYW5jYSkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDAKK21zZ2lkICJkaWZmZXJlbnQiCittc2dzdHIgImRpZmVyZW50IgorCisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJkYXJyZXJlICIKKworIzogd3Qtc3RhdHVzLmM6MTk0NSB3dC1zdGF0dXMuYzoxOTQ4Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJkYXZhbnQgcGVyICIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIKKyM6IHd0LXN0YXR1cy5jOjI0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAibm8gZXMgcG90ICVzOiBUZW5pdSBjYW52aXMgwqt1bnN0YWdlZMK7LiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3NgorbXNnaWQgImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiYWRkaWNpb25hbG1lbnQsIGVsIHZvc3RyZSDDrW5kZXggY29udMOpIGNhbnZpcyBzZW5zZSBjb21ldHJlLiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIm5vIGVzIHBvdCAlczogRWwgdm9zdHJlIMOtbmRleCBjb250w6kgY2FudmlzIHNlbnNlIGNvbWV0cmUuIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZGVzZW5sbGHDp2FyIMKrJXPCuyIKKworIzogYnVpbHRpbi9hZGQuYzoyNgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs8b3BjaW9ucz5dIFstLV0gPGVzcGVjaWZpY2FjacOzLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJlc3RhdCBkZSBkaWZmIGluZXNwZXJhdCAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo5MiBidWlsdGluL2NvbW1pdC5jOjI4OAorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBlbHMgZml0eGVycyIKKworIzogYnVpbHRpbi9hZGQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAiZWxpbWluYSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzcKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiQ2FudmlzIMKrdW5zdGFnZWTCuyBkZXNwcsOpcyBkJ2FjdHVhbGl0emFyIGwnw61uZGV4OiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTIgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGwnw61uZGV4IgorCisjOiBidWlsdGluL2FkZC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciDCqyVzwrsgcGVyIGEgZXNjcmlwdHVyYS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY3Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIHBlZGHDpyIKKworIzogYnVpbHRpbi9hZGQuYzoyNzAKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAibCdlZGljacOzIGRlbCBwZWRhw6cgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2FkZC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGZlciBzdGF0IGEgwqslc8K7IgorCisjOiBidWlsdGluL2FkZC5jOjI3NQorbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiRWwgcGVkYcOnIMOpcyBidWl0LiBTJ2hhIGF2b3J0YXQuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhcGxpY2FyIMKrJXPCuyIKKworIzogYnVpbHRpbi9hZGQuYzoyODgKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKyJFbHMgY2FtaW5zIHNlZ8O8ZW50cyBzJ2lnbm9yZW4gcGVyIHVuIGRlbHMgdm9zdHJlcyBmaXR4ZXJzIC5naXRpZ25vcmU6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA4IGJ1aWx0aW4vY2xlYW4uYzo5MTAgYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL212LmM6MTI0CisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU2IGJ1aWx0aW4vcHVsbC5jOjIyMyBidWlsdGluL3B1c2guYzo1NDgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM0NCBidWlsdGluL3JtLmM6MjQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAibWFyeGEgZW4gc2VjIgorCisjOiBidWlsdGluL2FkZC5jOjMxMQorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgInJlY3VsbCBpbnRlcmFjdGl1IgorCisjOiBidWlsdGluL2FkZC5jOjMxMiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MiBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgInNlbGVjY2lvbmEgZWxzIHRyb3Nzb3MgaW50ZXJhY3RpdmFtZW50IgorCisjOiBidWlsdGluL2FkZC5jOjMxMworbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAiZWRpdGEgbGEgZGlmZXLDqG5jaWEgYWN0dWFsIGkgYXBsaWNhLWxhIgorCisjOiBidWlsdGluL2FkZC5jOjMxNAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAicGVybWV0IGFmZWdpciBmaXR4ZXJzIHF1ZSBkJ2FsdHJhIG1hbmVyYSBzJ2lnbm9yZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE1Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgImFjdHVhbGl0emEgZWxzIGZpdHhlcnMgc2VndWl0cyIKKworIzogYnVpbHRpbi9hZGQuYzozMTYKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMTcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInJlZ2lzdHJhIG5vbcOpcyBlbCBmZXQgcXVlIGVsIGNhbcOtIHMnYWZlZ2lyw6AgbcOpcyB0YXJkIgorCisjOiBidWlsdGluL2FkZC5jOjMxOAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiYWZlZ2VpeCBlbHMgY2FudmlzIGRlIHRvdHMgZWxzIGZpdHhlcnMgc2VndWl0cyBpIG5vIHNlZ3VpdHMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmEgZWxzIGNhbWlucyBlbGltaW5hdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIChlbCBtYXRlaXggcXVlIC0tbm8tYWxsKSIKKworIzogYnVpbHRpbi9hZGQuYzozMjMKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIm5vIGFmZWdlaXhpcywgbm9tw6lzIGFjdHVhbGl0emEgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAibm9tw6lzIG9tZXQgZWxzIGZpdHhlcnMgcXVlIG5vIGVzIHBvZGVuIGFmZWdpciBhIGNhdXNhIGQnZXJyb3JzIgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorImNvbXByb3ZldSBzaSBlbHMgZml0eGVycyAtIGZpbnMgaSB0b3QgZWxzIGFic2VudHMgLSBzJ2lnbm9yZW4gZW4gbWFyeGEgZW4gc2VjIgorCisjOiBidWlsdGluL2FkZC5jOjMyNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDQKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAicGFzc2EgcGVyIGFsdCBlbCBiaXQgZXhlY3V0YWJsZSBkZWxzIGZpdHhlcnMgbGxpc3RhdHMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI5Cittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICJhdmlzYSdtIHF1YW4gcydhZmVnZWl4aSB1biBkaXDDsnNpdCBpbmNydXN0YXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiSGV1IGFmZWdpdCB1biBhbHRyZSBkaXDDsnNpdCBnaXQgZGlucyBkZWwgZGlww7JzaXQgYWN0dWFsLlxuIgorIkVscyBjbG9ucyBkZSBkaXDDsnNpdHMgZXh0ZXJucyBubyBjb250aW5kcmFuIGVscyBjb250aW5ndXRzIGRlXG4iCisiZGVsIGRpcMOyc2l0IGluY3J1c3RhdCBpIG5vIHNhYnJhbiBjb20gb2J0ZW5pci1oby5cbiIKKyJTaSB2b2zDrWV1IGFmZWdpciB1biBzdWJtw7JkdWwsIHVzZXU6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIlNpIGhldSBhZmVnaXQgYXF1ZXN0IGNhbcOtIHBlciBlcnJvciwgcG9kZXUgc3VwcmltaXItbG8gZGVcbiIKKyJsJ8OtbmRleCBhbWI6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJWZWdldSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIHBlciBhIG3DqXMgaW5mb3JtYWNpw7MuIgorCisjOiBidWlsdGluL2FkZC5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmcgZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJzJ2VzdMOgIGFmZWdpbnQgdW4gZGlww7JzaXQgaW5jcnVzdGF0OiAlcyIKKworIzogYnVpbHRpbi9hZGQuYzozOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAiVXNldSAtZiBzaSByZWFsbWVudCBlbHMgdm9sZXUgYWZlZ2lyLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQwMAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImwnYWZlZ2ltZW50IGRlIGZpdHhlcnMgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2FkZC5jOjQyOCBidWlsdGluL2NvbW1pdC5jOjM0OAorIywgZnV6enkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tYmlzZWN0IgorCisjOiBidWlsdGluL2FkZC5jOjQzNAorIywgZnV6enkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tYmlzZWN0IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSBpIC11IHPDs24gbcO6dHVhbWVudCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL2FkZC5jOjQ0OQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIkwnb3BjacOzIC0taWdub3JlLW1pc3Npbmcgbm9tw6lzIGVzIHBvdCB1c2FyIGp1bnRhbWVudCBhbWIgLS1kcnktcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgImVsIHBhcsOgbWV0cmUgLS1jaG1vZCDCqyVzwrsgaGEgZGUgc2VyIG8gLXggbyAreCIKKworIzogYnVpbHRpbi9hZGQuYzo0NzEgYnVpbHRpbi9jaGVja291dC5jOjE2NDggYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcKKyMsIGZ1enp5Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIgorbXNnc3RyICItLXBhdGNoIMOpcyBpbmNvbXBhdGlibGUgYW1iIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjYwIGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzCittc2dpZCAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiTm8gcydoYSBlc3BlY2lmaWNhdCByZXMsIG5vIHMnaGEgYWZlZ2l0IHJlcy5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIlBvdHNlciB2b2zDrWV1IGRpciDCq2dpdCBhZGQgLsK7P1xuIgorCisjOiBidWlsdGluL2FtLmM6MzQ3Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnc2NyaXB0IGQnYXV0b3IiCisKKyM6IGJ1aWx0aW4vYW0uYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIKK21zZ3N0ciAicydoYSBzdXByaW1pdCDCqyVzwrsgcGVsIGxsaWdhbSBhcHBseXBhdGNoLW1zZyIKKworIzogYnVpbHRpbi9hbS5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIkzDrW5pYSBkJ2VudHJhZGEgbWFsIGZvcm1hZGE6IMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY29waWFyIGxlcyBub3RlcyBkZSDCqyVzwrsgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MzcKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgImZzZWVrIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9hbS5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgcGVkYcOnIMKrJXPCuyIKKworIzogYnVpbHRpbi9hbS5jOjc5MAorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJOb23DqXMgdW5hIHPDqHJpZSBkZSBwZWRhw6dvcyBTdEdJVCBlcyBwb3QgYXBsaWNhciBhIGxhIHZlZ2FkYSIKKworIzogYnVpbHRpbi9hbS5jOjgzOAorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJtYXJjYSBkZSB0ZW1wcyBubyB2w6BsaWRhIgorCisjOiBidWlsdGluL2FtLmM6ODQzIGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAibMOtbmlhIERhdGUgbm8gdsOgbGlkYSIKKworIzogYnVpbHRpbi9hbS5jOjg1MAorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICJkZXNwbGHDp2FtZW50IGRlIHpvbmEgZGUgdGVtcHMgbm8gdsOgbGlkIgorCisjOiBidWlsdGluL2FtLmM6OTQzCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJMYSBkZXRlY2Npw7MgZGUgZm9ybWF0IGRlIHBlZGHDpyBoYSBmYWxsYXQuIgorCisjOiBidWlsdGluL2FtLmM6OTQ4IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjcmVhciBlbCBkaXJlY3Rvcmkgwqslc8K7IgorCisjOiBidWlsdGluL2FtLmM6OTUzCittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGRpdmlkaXIgZWxzIHBlZGHDp29zLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIlF1YW4gaMOgZ2l1IHJlc29sdCBhcXVlc3QgcHJvYmxlbWEsIGV4ZWN1dGV1IFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICIiCisiU2kgcHJlZmVyaXUgb21ldHJlIGFxdWVzdCBwZWRhw6csIGV4ZWN1dGV1IFwiJXMgLS1za2lwXCIgZW4gbGxvYyBkJ2FpeMOyLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICIiCisiUGVyIGEgcmVzdGF1cmFyIGxhIGJyYW5jYSBvcmlnaW5hbCBpIGRlaXhhciBkJ2FwZWRhw6dhciwgZXhlY3V0ZXUgXCIlcyAtLWFib3J0IgorIlwiLiIKKworIzogYnVpbHRpbi9hbS5jOjExNjkKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTE5NworbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiRWwgcGVkYcOnIGVzdMOgIGJ1aXQuIgorCisjOiBidWlsdGluL2FtLmM6MTI2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhdXRob3IgbGluZSBpbiBjb21taXQgJXMiCittc2dzdHIgIk1hbmNhIGVsIG5vbSBkZSBicmFuY2E7IHByb3ZldSAtYiIKKworIzogYnVpbHRpbi9hbS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICJsw61uaWEgZCdpZGVudGl0YXQgbm8gdsOgbGlkYTogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiQWwgZGlww7JzaXQgbGkgbWFucXVlbiBlbHMgYmxvYnMgbmVjZXNzYXJpcyBwZXIgYSByZXRyb2NlZGlyIGEgdW5hIGZ1c2nDsyBkZSAzICIKKyJ2aWVzLiIKKworIzogYnVpbHRpbi9hbS5jOjE0ODYKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICJTJ2VzdMOgIHVzYW50IGxhIGluZm9ybWFjacOzIGQnw61uZGV4IHBlciBhIHJlY29uc3RydWlyIHVuIGFyYnJlIGJhc2UuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTA1Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIkhldSBlZGl0YXQgZWwgdm9zdHJlIHBlZGHDpyBhIG3DoD9cbiIKKyJObyBzJ2FwbGljYSBhbHMgYmxvYnMgcmVjb3JkYXRzIGVuIGVsIHNldSDDrW5kZXguIgorCisjOiBidWlsdGluL2FtLmM6MTUxMQorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiUydlc3TDoCByZXRyb2NlZGludCBhIGFwZWRhw6dhciBsYSBiYXNlIGkgdW5hIGZ1c2nDsyBkZSAzIHZpZXMuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTM3Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmdXNpb25hciBlbHMgY2FudmlzLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NjkKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJzJ2VzdMOgIGFwbGljYW50IGEgdW5hIGhpc3TDsnJpYSBidWlkYSIKKworIzogYnVpbHRpbi9hbS5jOjE2MTYgYnVpbHRpbi9hbS5jOjE2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJubyBlcyBwb3QgcmVwcmVuZHJlOiAlcyBubyBleGlzdGVpeC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjM4Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJFbCBjb3MgZGUgbGEgY29taXNzacOzIMOpczoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKyJWb2xldSBhcGxpY2FyLWxvPyBbeV1lcy9bbl1vL1tlXWRpdGEvW3ZdaXN1YWxpdHphIGVsIHBlZGHDpy9bYV1jY2VwdGEnbHMgIgorInRvdHM6ICIKKworIzogYnVpbHRpbi9hbS5jOjE2OTUgYnVpbHRpbi9jb21taXQuYzozOTQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBmaXR4ZXIgZCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiw41uZGV4IGJydXQ6IG5vIGVzIHBvZGVuIGFwbGljYXIgcGVkYcOnb3MgKGJydXRzOiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzM5IGJ1aWx0aW4vYW0uYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICJTJ2VzdMOgIGFwbGljYW50OiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc1NgorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiU2Vuc2UgY2FudmlzIC0tIEVsIHBlZGHDpyBqYSBzJ2hhIGFwbGljYXQuIgorCisjOiBidWlsdGluL2FtLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiRWwgcGVkYcOnIGhhIGZhbGxhdCBhICVzICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY2Cittc2dpZCAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2gnIHRvIHNlZSB0aGUgZmFpbGVkIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODEwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiQ2FwIGNhbnZpIC0gaGV1IG9ibGlkYXQgZCd1c2FyICdnaXQgYWRkJz9cbiIKKyJTaSBubyBoaSBoYSByZXMgcGVyIGZlciDCq3N0YWdlwrssIHByb2JhYmxlbWVudCBhbGd1bmEgYWx0cmEgY29zYSBqYSBoYVxuIgorImludHJvZHXDr3QgZWxzIG1hdGVpeG9zIGNhbnZpczsgcG90c2VyIHZvbGV1IG9tZXRyZSBhcXVlc3QgcGVkYcOnLiIKKworIzogYnVpbHRpbi9hbS5jOjE4MTcKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyJFbmNhcmEgdGVuaXUgY2FtaW5zIHNlbnNlIGZ1c2lvbmFyIGEgbCfDrW5kZXguXG4iCisiSGV1IGRlIGZlciAnZ2l0IGFkZCcgYSBjYWRhIGZpdHhlciBhbWIgY29uZmxpY3RlcyByZXNvbHRzIHBlciBtYXJjYXItbG9zIGNvbSAiCisiYSB0YWwuXG4iCisiUG9kZXUgZXhlY3V0YXIgYGdpdCBybWAgZW4gdW4gZml0eGVyIHBlciBhY2NlcHRhciBcInN1cHJpbWl0IHBlciBlbGxzXCIgcGVsICIKKyJmaXR4ZXIuIgorCisjOiBidWlsdGluL2FtLmM6MTkyNCBidWlsdGluL2FtLmM6MTkyOCBidWlsdGluL2FtLmM6MTk0MCBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZSDCqyVzwrsuIgorCisjOiBidWlsdGluL2FtLmM6MTk3NgorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBuZXRlamFyIGwnw61uZGV4IgorCisjOiBidWlsdGluL2FtLmM6MjAyMAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiU2VtYmxhIHF1ZSBoZXUgbW9ndXQgSEVBRCBkZXNwcsOpcyBkZSBsJ8O6bHRpbWEgZmFsbGFkYSBkZSAnYW0nLlxuIgorIk5vIHMnZXN0w6AgcmVib2JpbmFudCBhIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJWYWxvciBubyB2w6BsaWQgcGVyIGEgLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE1MworbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzxvcGNpb25zPl0gWyg8YsO6c3RpYT4gfCA8ZGlyZWN0b3JpLWRlLWNvcnJldT4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIxNTQKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3BjaW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImV4ZWN1dGEgaW50ZXJhY3RpdmFtZW50IgorCisjOiBidWlsdGluL2FtLmM6MjE2MgorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJvcGNpw7MgaGlzdMOycmljYSAtLSBuby1vcCIKKworIzogYnVpbHRpbi9hbS5jOjIxNjQKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAicGVybWV0IHJldHJvY2VkaXIgYSB1bmEgZnVzacOzIGRlIDMgdmllcyBzaSDDqXMgbmVjZXNzYXJpIgorCisjOiBidWlsdGluL2FtLmM6MjE2NSBidWlsdGluL2luaXQtZGIuYzo0OTQgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1OAorIzogYnVpbHRpbi9yZXBhY2suYzozMDQgYnVpbHRpbi9zdGFzaC5jOjgxMQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICJzaWxlbmNpw7NzIgorCisjOiBidWlsdGluL2FtLmM6MjE2NworbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImFmZWdlaXggdW5hIGzDrW5pYSDCq1NpZ25lZC1vZmYtYnnCuyBhbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcwCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgInJlY29kaWZpY2EgZW4gdXRmOCAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhIGwnaW5kaWNhZG9yIC1rIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3NAorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhIGwnaW5kaWNhZG9yIC1iIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhIGwnaW5kaWNhZG9yIC1tIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3OAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgInBhc3NhIGwnaW5kaWNhZG9yIC0ta2VlcC1jciBhIGdpdC1tYWlsc3BsaXQgcGVyIGFsIGZvcm1hdCBtYm94IgorCisjOiBidWlsdGluL2FtLmM6MjE4MQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICIiCisibm8gcGFzc2lzIGwnaW5kaWNhZG9yIC0ta2VlcC1jciBhIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgZCdhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg0Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICJlbGltaW5hIHRvdCBhYmFucyBkJ3VuYSBsw61uaWEgZGUgdGlzb3JlcyIKKworIzogYnVpbHRpbi9hbS5jOjIxODYgYnVpbHRpbi9hbS5jOjIxODkgYnVpbHRpbi9hbS5jOjIxOTIgYnVpbHRpbi9hbS5jOjIxOTUKKyM6IGJ1aWx0aW4vYW0uYzoyMTk4IGJ1aWx0aW4vYW0uYzoyMjAxIGJ1aWx0aW4vYW0uYzoyMjA0IGJ1aWx0aW4vYW0uYzoyMjA3CisjOiBidWlsdGluL2FtLmM6MjIxMworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgInBhc3NhLWhvIGEgdHJhdsOpcyBkZSBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjAzIGJ1aWx0aW4vY29tbWl0LmM6MTM4NiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NiBidWlsdGluL2dyZXAuYzo4ODMgYnVpbHRpbi9tZXJnZS5jOjI0OQorIzogYnVpbHRpbi9wdWxsLmM6MTYwIGJ1aWx0aW4vcHVsbC5jOjIxOSBidWlsdGluL3JlYmFzZS5jOjE0NjkKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE1IGJ1aWx0aW4vcmVwYWNrLmM6MzE5IGJ1aWx0aW4vcmVwYWNrLmM6MzIxCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUwIGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzIgYnVpbHRpbi90YWcuYzo0MDMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTQgcGFyc2Utb3B0aW9ucy5oOjE3NSBwYXJzZS1vcHRpb25zLmg6MzE2Cittc2dpZCAibiIKK21zZ3N0ciAibiIKKworIzogYnVpbHRpbi9hbS5jOjIyMDkgYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1IGJ1aWx0aW4vdGFnLmM6NDM3IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICJmb3JtYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjEwCittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICJlbCBmb3JtYXQgZW4gZWwgcXVhbCBlc3RhbiBlbHMgcGVkYcOnb3MiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJwYXNzYSBwZXIgYWx0IGVsIG1pc3NhdGdlIGQnZXJyb3Igc2kgZmFsbGEgbCdhcGxpY2FjacOzIGRlbCBwZWRhw6ciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE4Cittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAic2VndWVpeCBhcGxpY2FudCBwZWRhw6dvcyBkZXNwcsOpcyBkZSByZXNvbGRyZSB1biBjb25mbGljdGUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgInNpbsOybmltcyBkZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIm9tZXQgZWwgcGVkYcOnIGFjdHVhbCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjcKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICJyZXN0YXVyYSBsYSBicmFuY2Egb3JpZ2luYWwgaSBhdm9ydGEgbCdvcGVyYWNpw7MgZCdhcGVkYcOnYW1lbnQuIgorCisjOiBidWlsdGluL2FtLmM6MjIzMAorbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkLiIKK21zZ3N0ciAibW9zdHJhIGVsIHBlZGHDpyBxdWUgcydlc3TDoCBhcGxpY2FudC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM3Cittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICJtZW50ZWl4IHNvYnJlIGxhIGRhdGEgZGVsIGNvbWl0ZW50IgorCisjOiBidWlsdGluL2FtLmM6MjIzOQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgInVzYSBlbCBtYXJjIGRlIHRlbXBzIGFjdHVhbCBwZXIgbGEgZGF0YSBkJ2F1dG9yIgorCisjOiBidWlsdGluL2FtLmM6MjI0MSBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUwNworIzogYnVpbHRpbi9tZXJnZS5jOjI4NiBidWlsdGluL3B1bGwuYzoxOTQgYnVpbHRpbi9yZWJhc2UuYzo1MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMyBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAiSUQgZGUgY2xhdSIKKworIzogYnVpbHRpbi9hbS5jOjIyNDIgYnVpbHRpbi9yZWJhc2UuYzo1MTAgYnVpbHRpbi9yZWJhc2UuYzoxNTE0Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAic2lnbmEgbGVzIGNvbWlzc2lvbnMgYW1iIEdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDUKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKMO6cyBpbnRlcm4gcGVyIGEgZ2l0LXJlYmFzZSkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYzCittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisiRmEgbW9sdCBxdWUgbCdvcGNpw7MgLWIvLS1iaW5hcnkgbm8gaGEgZmV0IHJlcywgaVxuIgorInMnZWxpbWluYXLDoC4gTm8gbCd1c2V1IG3DqXMuIgorCisjOiBidWlsdGluL2FtLmM6MjI3MAorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorInVuIGRpcmVjdG9yaSBkZSDCq3JlYmFzZcK7IGFudGVyaW9yICVzIGVuY2FyYSBleGlzdGVpeCBwZXLDsiBzJ2hhIGRvbmF0IHVuYSAiCisiYsO6c3RpYS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisiUydoYSB0cm9iYXQgdW4gZGlyZWN0b3JpICVzIGV4dHJhdmlhdC5cbiIKKyJVc2V1IFwiZ2l0IGFtIC0tYWJvcnRcIiBwZXIgYSBlbGltaW5hci1sby4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE1Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiVW5hIG9wZXJhY2nDsyBkZSByZXNvbHVjacOzIG5vIGVzdMOgIGVuIGN1cnM7IG5vIHJlcHJlbmVtLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjUKK21zZ2lkICJpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIHBhdGNoZXMgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPG9wY2lvbnM+XSBbPHBlZGHDpz4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGZpdHhlciBkJ2FyeGl1IMKrJXPCuyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlZGlyaWdpciBsYSBzb3J0aWRhIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlOiBSZW1vdCBzZW5zZSBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IHMnZXNwZXJhdmEgQUNLL05BSywgcydoYSByZWJ1dCB1biBwYXF1ZXQgZGUgbmV0ZWphIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6ICVzIE5BQ0siCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZXJyb3IgZGUgcHJvdG9jb2wiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBzJ2VzcGVyYXZhIHVuYSBuZXRlamEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8bWFsX3Rlcm1lPiA8Ym9uX3Rlcm1lPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorIywgZnV6enkKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKKyMsIGZ1enp5Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC13cml0ZSBbLS1uby1sb2ddIDxzdGF0ZT4gPHJldmlzaW9uPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPG1hbF90ZXJtZT4gPGJvbl90ZXJtZT4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNworIywgZnV6enkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8bWFsX3Rlcm1lPiA8Ym9uX3Rlcm1lPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4CisjLCBmdXp6eQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxnb29kX3Rlcm0+IDxiYWRfdGVybT4gWzx0ZXJtPl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxtYWxfdGVybWU+IDxib25fdGVybWU+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKKyMsIGZ1enp5Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8IC0tIgorInRlcm0tbmV3XSIKK21zZ3N0ciAiIgorInBhcsOgbWV0cmUgbm8gdsOgbGlkICRhcmcgcGVyIGEgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIkxlcyBvcGNpb25zIGFkbWVzZXMgc8OzbjogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBpIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1biB0ZXJtZSB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAibm8gZXMgcG90IHVzYXIgbCdvcmRyZSBpbnRlcm5hIMKrJXPCuyBjb20gYSB0ZXJtZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHRlcm0gJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGNhbnZpYXIgZWwgc2lnbmlmaWNhdCBkZWwgdGVybWUgwqslc8K7IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTExCittc2dpZCAicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIgorbXNnc3RyICJ1c2V1IGRvcyB0ZXJtZXMgZGlzdGludGVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyIGVsIEJJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIk5vIGVzdGVtIGJpc2VjYW50LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW4gdGVybWUgdsOgbGlkIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBhZ2FmYXIgbGEgSEVBRCBvcmlnaW5hbCAnJGJyYW5jaCcuXG4iCisiUHJvdmV1ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21pc3Npw7M+Jy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJQYXLDoG1ldHJlIGJpc2VjdF93cml0ZSBpbmNvcnJlY3RlOiAkc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGNhbnZpYXIgZWwgc2lnbmlmaWNhdCBkZWwgdGVybWUgwqslc8K7IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZml0eGVyIMKrJXPCuyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJXMvJXMgYmlzZWN0IgorbXNnc3RyICIiCisiT3JkcmUgbm8gdsOgbGlkYTogYWN0dWFsbWVudCBlc3RldSBlbiB1bmEgYmlzZWNjacOzICRURVJNX0JBRC8kVEVSTV9HT09ELiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiQ2FsIGRvbmFyLW1lIGFsbWVueXMgdW5hIHJldmlzacOzICRiYWRfc3luIGkgdW5hICRnb29kX3N5bi5cbiIKKyIoUG9kZXUgdXNhciBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBpIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBwZXIgYWl4w7IuKSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJDYWwgY29tZW7Dp2FyIGFtYiBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJEZXNwcsOpcyBjYWwgZG9uYXItbWUgYWxtZW55cyB1bmEgcmV2aXNpw7MgJGdvb2Rfc3luIGkgdW5hICRiYWRfc3luLlxuIgorIihQb2RldSB1c2FyIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGkgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIHBlciBhaXjDsi4pIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzIyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiaXNlY3Rpbmcgb25seSB3aXRoIGEgJXMgY29tbWl0IgorbXNnc3RyICJBZHZlcnTDqG5jaWE6IGJpc2VjYW50IGFtYiBub23DqXMgY29taXNzacOzICRURVJNX0JBRC4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMzAKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAiTidlc3RldSBzZWd1ciBbWS9uXT8gIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc3Cittc2dpZCAibm8gdGVybXMgZGVmaW5lZCIKK21zZ3N0ciAiY2FwIHRlcm1lIGRlZmluaXQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyJwYXLDoG1ldHJlIG5vIHbDoGxpZCAkYXJnIHBlciBhICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJMZXMgb3BjaW9ucyBhZG1lc2VzIHPDs246IC0tdGVybS1nb29kfC0tdGVybS1vbGQgaSAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICJwb3NpY2nDsyBubyByZWNvbmVndWRhOiVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICInJGFyZycgbm8gc2VtYmxhIHVuYSByZXZpc2nDsyB2w6BsaWRhIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTEyCisjLCBmdXp6eQorbXNnaWQgImJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiSEVBRCBpbmNvcnJlY3RlIC0gQ2FsIHVuIEhFQUQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNoZWNraW5nIG91dCAnJXMnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHN0YXJ0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJMJ2FnYWZhbWVudCBkZSAnJHN0YXJ0X2hlYWQnIGhhIGZhbGxhdC4gUHJvdmV1ICdnaXQgYmlzZWN0IHJlc2V0IDxicmFuY2EtIgorInbDoGxpZGE+Jy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NDgKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICJubyBlcyBiaXNlY2Fyw6AgZW4gdW4gYXJicmUgZW4gZWwgcXVhbCBzJ2hhIGZldCBjZy1zZWVrIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUxCisjLCBmdXp6eQorbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIkhFQUQgaW5jb3JyZWN0ZSAtIHJlZmVyw6huY2lhIHNpbWLDsmxpY2EgZXN0cmFueWEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICJmaXR4ZXIgbm8gdsOgbGlkOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzEKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICJyZWFsaXR6YSAnZ2l0IGJpc2VjdCBuZXh0JyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAiZXNjcml1IGVscyB0ZXJtZXMgYSAuZ2l0L0JJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNQorbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAibmV0ZWphIGwnZXN0YXQgZGUgbGEgYmlzZWNjacOzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM3Cittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgImNvbXByb3ZhIGxlcyByZXZpc2lvbnMgZXNwZXJhZGVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM5CisjLCBmdXp6eQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIm5ldGVqYSBsJ2VzdGF0IGRlIGxhIGJpc2VjY2nDsyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorIywgZnV6enkKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSBpbiBCSVNFQ1RfTE9HIgorbXNnc3RyICJuZXRlamEgbCdlc3RhdCBkZSBsYSBiaXNlY2Npw7MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDMKKyMsIGZ1enp5Cittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAibmV0ZWphIGwnZXN0YXQgZGUgbGEgYmlzZWNjacOzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ3CisjLCBmdXp6eQorbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBldGlxdWV0ZXMgZGUgbCdvYmplY3RlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ5Cittc2dpZCAic3RhcnQgdGhlIGJpc2VjdCBzZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTEKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICJhY3R1YWxpdHphIEJJU0VDVF9IRUFEIGVuIGxsb2MgZCdhZ2FmYXIgbGEgY29taXNzacOzIGFjdHVhbCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MworbXNnaWQgIm5vIGxvZyBmb3IgQklTRUNUX1dSSVRFIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzAKK21zZ2lkICItLXdyaXRlLXRlcm1zIHJlcXVpcmVzIHR3byBhcmd1bWVudHMiCittc2dzdHIgIi0td3JpdGUtdGVybXMgcmVxdWVyZWl4IGRvcyBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NAorbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgbm8gYWNjZXB0YSBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4MQorIywgZnV6enkKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODUKKyMsIGZ1enp5Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIG5vIGFjY2VwdGEgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTEKKyMsIGZ1enp5Cittc2dpZCAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1jbGVhbi1zdGF0ZSBubyBhY2NlcHRhIHBhcsOgbWV0cmVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njk3CisjLCBmdXp6eQorbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgbm8gYWNjZXB0YSBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMworIywgZnV6enkKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0td3JpdGUtdGVybXMgcmVxdWVyZWl4IGRvcyBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMxCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzxvcGNpb25zPl0gWzxvcGNpb25zLWRlLXJldmlzacOzPl0gWzxyZXZpc2nDsz5dIFstLV0gZml0eGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiZXMgZG9jdW1lbnRlbiBsZXMgPG9wY2lvbnMtZGUtcmV2aXNpw7M+IGVuIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICJyZXNwZWN0YSBlbHMgY29sb3JzIGRlbCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgImlnbm9yYSBlbCBjb2xvciBubyB2w6BsaWQgwqslLipzwrsgZW4gbG9nLmdyYXBoQ29sb3JzIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzQ3CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICJ2YWxvciBubyB2w6BsaWQgcGVyIGEgLS1taXNzaW5nIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCByZXZpc2lvbiAlcyB0byBpZ25vcmUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgbGEgcmV2aXNpw7M6ICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ0Cittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAiTW9zdHJhIGxlcyBlbnRyYWRlcyDCq2JsYW1lwrsgbWVudHJlIGxlcyB0cm9iZW0sIGluY3JlbWVudGFsbWVudCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJNb3N0cmEgdW4gU0hBLTEgZW4gYmxhbmMgcGVyIGxlcyBjb21pc3Npb25zIGRlIGZyb250ZXJhIChQZXIgZGVmZWN0ZTogIgorImRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ2Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiTm8gdHJhY3RpcyBsZXMgY29taXNzaW9ucyBkJ2FycmVsIGNvbSBhIGzDrW1pdHMgKFBlciBkZWZlY3RlOiBkZXNhY3RpdmF0KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIk1vc3RyYSBsZXMgZXN0YWTDrXN0aXF1ZXMgZGUgcHJldSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ4Cittc2dpZCAiRm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJGb3LDp2EgbCdpbmZvcm1lIGRlIHByb2dyw6lzIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIk1vc3RyYSBsYSBwdW50dWFjacOzIGRlIHNvcnRpZGEgZGUgbGVzIGVudHJhZGVzIMKrYmxhbWXCuyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICJNb3N0cmEgZWwgbm9tIGRlIGZpdHhlciBvcmlnaW5hbCAoUGVyIGRlZmVjdGU6IGF1dG9tw6B0aWMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUxCittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0cmEgZWwgbsO6bWVybyBkZSBsw61uaWEgb3JpZ2luYWwgKFBlciBkZWZlY3RlOiBkZXNhY3RpdmF0KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIlByZXNlbnRhIGVuIHVuIGZvcm1hdCBkaXNzZW55YXQgcGVyIGNvbnN1bXBjacOzIHBlciBtw6BxdWluYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTW9zdHJhIGVsIGZvcm1hdCBkZSBwb3JjZWxsYW5hIGFtYiBpbmZvcm1hY2nDsyBkZSBjb21pc3Npw7MgcGVyIGzDrW5pYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJVc2EgZWwgbWF0ZWl4IG1vZGUgZGUgc29ydGlkYSBxdWUgZ2l0LWFubm90YXRlIChQZXIgZGVmZWN0ZTogZGVzYWN0aXZhdCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTUKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYSBsYSBtYXJjYSBkZSB0ZW1wcyBjcnVhIChQZXIgZGVmZWN0ZTogZGVzYWN0aXZhdCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYSBsJ1NIQTEgZGUgY29taXNzacOzIGxsYXJnIChQZXIgZGVmZWN0ZTogZGVzYWN0aXZhdCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTcKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJPbWV0IGVsIG5vbSBkJ2F1dG9yIGkgbGEgbWFyY2EgZGUgdGVtcHMgKFBlciBkZWZlY3RlOiBkZXNhY3RpdmF0KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIk1vc3RyYSBsJ2FkcmXDp2EgZWxlY3Ryw7JuaWNhIGRlIGwnYXV0b3IgZW4gbGxvYyBkZWwgbm9tIChQZXIgZGVmZWN0ZTogIgorImRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIklnbm9yYSBsZXMgZGlmZXLDqG5jaWVzIGQnZXNwYWkgZW4gYmxhbmMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAgYnVpbHRpbi9sb2cuYzoxNzAyCittc2dpZCAicmV2IgorbXNnc3RyICJyZXYiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAKKyMsIGZ1enp5Cittc2dpZCAiSWdub3JlIDxyZXY+IHdoZW4gYmxhbWluZyIKK21zZ3N0ciAiaWdub3JhIGwnw61uZGV4IGVuIGNvbXByb3ZhciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorIywgZnV6enkKK21zZ2lkICJJZ25vcmUgcmV2aXNpb25zIGZyb20gPGZpbGU+IgorbXNnc3RyICJsbGVnaXUgZWwgbWlzc2F0Z2UgZGVzIGQndW4gZml0eGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYyCittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjQKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgIkdhc3RhIGNpY2xlcyBleHRyZXMgcGVyIGEgdHJvYmFyIHVuYSBjb2luY2lkw6huY2lhIG1pbGxvciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NQorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiVXNhIGxlcyByZXZpc2lvbnMgZGUgPGZpdHhlcj4gZW4gbGxvYyBkJ2ludm9jYXIgZ2l0LXJldi1saXN0IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY2Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiVXNhIGVscyBjb250aW5ndXRzIGRlIDxmaXR4ZXI+IGNvbSBhIGxhIGltYXRnZSBmaW5hbCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgInB1bnR1YWNpw7MiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJUcm9iYSBjw7JwaWVzIGRlIGzDrW5pYSBkaW5zIGkgYSB0cmF2w6lzIGRlbHMgZml0eGVycyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIlRyb2JhIG1vdmltZW50cyBkZSBsw61uaWEgZGlucyBpIGEgdHJhdsOpcyBkZWxzIGZpdHhlcnMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJQcm9jZXNzYSBub23DqXMgZWwgcmFuZyBkZSBsw61uaWVzIG4sbSwgY29tcHRhbnQgZGVzIGQnMSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjkyMQorbXNnaWQgIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiCittc2dzdHIgIiIKKyJubyBlcyBwb3QgdXNhciAtLXByb2dyZXNzIGFtYiBlbHMgZm9ybWF0cyAtLWluY3JlbWVudGFsIG8gZGUgcG9yY2VsbGFuYSIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5NzIKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICJmYSA0IGFueXMgaSAxMSBtZXNvcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gImVsIGZpdHhlciAlcyB0w6kgbm9tw6lzICVsdSBsw61uaWEiCittc2dzdHJbMV0gImVsIGZpdHhlciAlcyB0w6kgbm9tw6lzICVsdSBsw61uaWVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIlMnZXN0w6AgZmVudCB1biDCq2JsYW1lwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcGNpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9ucz5dIFstbF0gWy1mXSA8bm9tLWRlLWJyYW5jYT4gWzxwdW50LWluaWNpYWw+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbnM+XSBbLXJdICgtZCB8IC1EKSA8bm9tLWRlLWJyYW5jYT4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcGNpb25zPl0gKC1tIHwgLU0pIFs8YnJhbmNhLWFudGlnYT5dIDxicmFuY2Etbm92YT4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcGNpb25zPl0gKC1jIHwgLUMpIFs8YnJhbmNhLWFudGlnYT5dIDxicmFuY2Etbm92YT4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisicydlc3TDoCBzdXByaW1pbnQgbGEgYnJhbmNhIMKrJXPCuyBxdWUgcydoYVxuIgorIiAgICAgICAgIGZ1c2lvbmF0IGEgwqslc8K7LCBwZXLDsiBlbmNhcmEgbm9cbiIKKyIgICAgICAgICBzJ2hhIGZ1c2lvbmF0IGEgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIm5vIHMnZXN0w6Agc3VwcmltaW50IGxhIGJyYW5jYSDCqyVzwrsgcXVlIGVuY2FyYSBub1xuIgorIiAgICAgICAgIHMnaGEgZnVzaW9uYXQgYSDCqyVzwrssIGVuY2FyYSBxdWUgZXN0w6BcbiIKKyIgICAgICAgICBmdXNpb25hZGEgYSBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsJ29iamVjdGUgZGUgY29taXNzacOzIGRlIMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIMKrJXPCuyBubyBlc3TDoCB0b3RhbG1lbnQgZnVzaW9uYWRhLlxuIgorIlNpIGVzdGV1IHNlZ3VyIHF1ZSBsYSB2b2xldSBzdXByaW1pciwgZXhlY3V0ZXUgJ2dpdCBicmFuY2ggLUQgJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJMJ2FjdHVhbGl0emFjacOzIGRlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJubyBlcyBwb3QgdXNhciAtYSBhbWIgLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsJ29iamVjdGUgZGUgY29taXNzacOzIGRlIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgYnJhbmNoICclcycgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiTm8gZXMgcG90IHN1cHJpbWlyIGxhIGJyYW5jYSDCqyVzwrsgYWdhZmFkYSBhIMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIm5vIHMnaGEgdHJvYmF0IGxhIGJyYW5jYSBhbWIgc2VndWltZW50IHJlbW90IMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIm5vIHMnaGEgdHJvYmF0IGxhIGJyYW5jYSDCqyVzwrsuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycm9yIGVuIHN1cHJpbWlyIGxhIGJyYW5jYSBhbWIgc2VndWltZW50IHJlbW90IMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycm9yIGVuIHN1cHJpbWlyIGxhIGJyYW5jYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiUydoYSBzdXByaW1pdCBsYSBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCAlcyAoZXJhICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIlMnaGEgc3VwcmltaXQgbGEgYnJhbmNhICVzIChlcmEgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNhZGVuYSBkZSBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYwCisjLCBmdXp6eQorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgbGEgY29taXNzacOzIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIkhFQUQgbm8gdHJvYmF0IHNvdGEgcmVmcy9oZWFkcyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICJTJ2VzdMOgIGZlbnQgwqtyZWJhc2XCuyBlbiBsYSBicmFuY2EgJXMgYSAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICJMYSBicmFuY2EgJXMgcydlc3TDoCBiaXNlY2FudCBhICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwMgorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAibm8gZXMgcG90IGNvcGlhciBicmFuY2EgYWN0dWFsIG1lbnRyZSBubyBzJ8OpcyBhIGNhcC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIm5vIGVzIHBvdCBjYW52aWFyIGVsIG5vbSBkZSBsYSBicmFuY2EgYWN0dWFsIG1lbnRyZSBubyBzJ8OpcyBhIGNhcC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIk5vbSBkZSBicmFuY2Egbm8gdsOgbGlkOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIkVsIGNhbnZpIGRlIG5vbSBkZSBicmFuY2EgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0NAorbXNnaWQgIkJyYW5jaCBjb3B5IGZhaWxlZCIKK21zZ3N0ciAiTGEgY8OycGlhIGRlIGxhIGJyYW5jYSBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciCittc2dzdHIgIlMnaGEgY3JlYXQgdW5hIGPDsnBpYSBkJ3VuYSBicmFuY2EgbWFsIGFub21lbmFkYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJTJ2hhIGNhbnZpYXQgZWwgbm9tIGRlIGxhIGJyYW5jYSBtYWwgYW5vbWVuYWRhIMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiUydoYSBjYW52aWF0IGVsIG5vbSBkZSBsYSBicmFuY2EgYSAlcywgcGVyw7IgSEVBRCBubyBlc3TDoCBhY3R1YWxpdHphdCEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIGVzdMOgIGNhbnZpYWRhIGRlIG5vbSwgcGVyw7IgbCdhY3R1YWxpdHphY2nDsyBkZWwgZml0eGVyIGRlICIKKyJjb25maWd1cmFjacOzIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjgKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSBlc3TDoCBjb3BpYWRhLCBwZXLDsiBsJ2FjdHVhbGl0emFjacOzIGRlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBoYSAiCisiZmFsbGF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisiRWRpdGV1IGxhIGRlc2NyaXBjacOzIGRlIGxhIGJyYW5jYVxuIgorIiAgJXNcbiIKKyJTJ2VsaW1pbmFyYW4gbGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIGFtYiDCqyVjwrsuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE4Cittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGdlbsOocmlxdWVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMAorbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICJtb3N0cmEgZWwgaGFzaCBpIGwnYXNzdW1wdGUsIGRvbmV1IGR1ZXMgdmVnYWRlcyBwZXIgbGEgYnJhbmNhIGZvbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAib21ldCBlbHMgbWlzc2F0Z2VzIGluZm9ybWF0aXVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJjb25maWd1cmEgZWwgbW9kZSBkZSBzZWd1aW1lbnQgKHZlZ2V1IGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICJubyB1c2FyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUwNQorbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICJmb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiY2FudmlhIGxhIGluZm9ybWFjacOzIGRlIGZvbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3CisjLCBmdXp6eQorbXNnaWQgInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJEZXNhc3NpZ25hIGxhIGluZm9ybWFjacOzIGRlIGZvbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJ1c2Egc29ydGlkYSBjb2xvcmFkYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhY3R1YSBlbiBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIGJyYW5xdWVzIHF1ZSBjb250aW5ndWluIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBicmFucXVlcyBxdWUgbm8gY29udGluZ3VpbiBsYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM3Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAiQWNjaW9ucyBkZSBnaXQtYnJhbmNoIGVzcGVjw61maXF1ZXM6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzOAorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJsbGlzdGEgbGVzIGJyYW5xdWVzIGFtYiBzZWd1aW1lbnQgcmVtb3QgaSBsZXMgbG9jYWxzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MAorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJzdXByaW1laXggbGEgYnJhbmNhIHNpIGVzdMOgIGNvbXBsZXRhbWVudCBmdXNpb25hZGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQxCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAic3VwcmltZWl4IGxhIGJyYW5jYSAoZW5jYXJhIHF1ZSBubyBlc3RpZ3VpIGZ1c2lvbmFkYSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIm1vdS9jYW52aWEgZGUgbm9tIHVuYSBicmFuY2EgaSBlbCBzZXUgcmVnaXN0cmUgZGUgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAibW91L2NhbnZpYSBkZSBub20gdW5hIGJyYW5jYSwgZW5jYXJhIHF1ZSBlbCBkZXN0w60gZXhpc3RlaXhpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImNvcGlhIHVuYSBicmFuY2EgaSBlbCBzZXUgcmVnaXN0cmUgZGUgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJjb3BpYSB1bmEgYnJhbmNhLCBlbmNhcmEgcXVlIGVsIGRlc3TDrSBleGlzdGVpeGkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgImxsaXN0YSBlbHMgbm9tcyBkZSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3CisjLCBmdXp6eQorbXNnaWQgInNob3cgY3VycmVudCBicmFuY2ggbmFtZSIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIGJyYW5jYSBhY3R1YWwuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OAorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJjcmVhIGVsIHJlZ2lzdHJlIGRlIHJlZmVyw6huY2lhIGRlIGxhIGJyYW5jYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTAKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAiZWRpdGEgbGEgZGVzY3JpcGNpw7MgZGUgbGEgYnJhbmNhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgImZvcsOnYSBjcmVhY2nDsywgbW92aW1lbnQvY2FudmkgZGUgbm9tLCBzdXByZXNzacOzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBicmFucXVlcyBxdWUgcydoYW4gZnVzaW9uYXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBicmFucXVlcyBxdWUgbm8gcydoYW4gZnVzaW9uYXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJsbGlzdGEgbGVzIGJyYW5xdWVzIGVuIGNvbHVtbmVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyIGJ1aWx0aW4vbm90ZXMuYzo0MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTggYnVpbHRpbi9ub3Rlcy5jOjU4MSBidWlsdGluL25vdGVzLmM6NTg0CisjOiBidWlsdGluL3RhZy5jOjQzMworbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAib2JqZWN0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTgKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIGJyYW5xdWVzIGRlIGwnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjAgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQ0MAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAibCdvcmRlbmFjacOzIGkgZWwgZmlsdHJhdGdlIGRpc3RpbmdlaXhlbiBlbnRyZSBtYWrDunNjdWxlcyBpIG1pbsO6c2N1bGVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4IGJ1aWx0aW4vdGFnLmM6NDM4CisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgImZvcm1hdCBhIHVzYXIgZW4gbGEgc29ydGlkYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NAorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEIG5vIHRyb2JhdCBzb3RhIHJlZnMvaGVhZHMhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gaSAtLXZlcmJvc2Ugc8OzbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJjYWwgZWwgbm9tIGRlIGJyYW5jYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJObyBlcyBwb3QgZG9uYXIgZGVzY3JpcGNpw7MgYSB1biBIRUFEIHNlcGFyYXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU4Cittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgIm5vIGVzIHBvdCBlZGl0YXIgbGEgZGVzY3JpcGNpw7MgZGUgbcOpcyBkJ3VuYSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICJFbmNhcmEgbm8gaGkgaGEgY2FwIGNvbWlzc2nDsyBlbiBsYSBicmFuY2Egwqslc8K7LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICJObyBoaSBoYSBjYXAgYnJhbmNhIGFtYiBub20gwqslc8K7LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODMKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAiaGkgaGEgbWFzc2EgYnJhbnF1ZXMgcGVyIGEgdW5hIG9wZXJhY2nDsyBkZSBjw7JwaWEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgImhpIGhhIG1hc3NhIGFyZ3VtZW50cyBwZXIgYSB1bmEgb3BlcmFjacOzIHJlbW90YSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiaGkgaGEgbWFzc2EgYXJndW1lbnRzIHBlciBhIGVzdGFibGlyIHVuYSBub3ZhIGZvbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorIm5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgbGEgZm9udCBkZSBIRUFEIGNvbSBhICVzIHF1YW4gbm8gYXNzZW55YWxhIGNhcCBicmFuY2EuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwNCBidWlsdGluL2JyYW5jaC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICJubyBleGlzdGVpeCBsYSBicmFuY2Egwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibGEgYnJhbmNhIMKrJXPCuyBubyBleGlzdGVpeCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgImhpIGhhIG1hc3NhIGFyZ3VtZW50cyBwZXIgYSBkZXNhc3NpZ25hciBsYSBmb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJubyBzJ2hhIHBvZ3V0IGRlc2Fzc2lnbmFyIGxhIGZvbnQgZGUgSEVBRCBwZXJxdcOoIG5vIGFzc2VueWFsYSBjYXAgYnJhbmNhLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJMYSBicmFuY2Egwqslc8K7IG5vIHTDqSBpbmZvcm1hY2nDsyBkZSBmb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCittc2dzdHIgIiIKKyJsZXMgb3BjaW9ucyAtYSBpIC1yIGEgJ2dpdCBicmFuY2gnIG5vIHRlbmVuIHNlbnRpdCBhbWIgdW4gbm9tIGRlIGJyYW5jYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisiTCdvcGNpw7MgLS1zZXQtdXBzdHJlYW0gamEgbm8gZXN0w6Agc3Vwb3J0YWRhLiBVc2V1IGVuIGNvbXB0ZXMgLS10cmFjayBvIC0tc2V0LSIKKyJ1cHN0cmVhbS10by4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworIywgZnV6enkKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzxvcGNpb25zPl0gPG5vbT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYgYnVpbHRpbi9idW5kbGUuYzoyOAorIywgZnV6enkKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBybSBbPG9wY2lvbnM+XSBbLS1dIDxmaXR4ZXI+Li4uIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE3IGJ1aWx0aW4vYnVuZGxlLmM6MzMKK21zZ2lkICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTggYnVpbHRpbi9idW5kbGUuYzozOAorbXNnaWQgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjI4Cittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIm5vIG1vc3RyaXMgbCdpbmRpY2Fkb3IgZGUgcHJvZ3LDqXMiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjMwCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAibW9zdHJhIGwnaW5kaWNhZG9yIGRlIHByb2dyw6lzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICJtb3N0cmEgbCdpbmRpY2Fkb3IgZGUgcHJvZ3LDqXMgZHVyYW50IGxhIGZhc2UgZCdlc2NyaXB0dXJhIGQnb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM1Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJzaW1pbGFyIGEgLS1hbGwtcHJvZ3Jlc3MgcXVhbiBsJ2luZGljYWRvciBkZSBwcm9ncsOpcyBlcyBtb3N0cmEiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6OTMKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICJDYWwgdW4gZGlww7JzaXQgcGVyIGEgZmVyIHVuIGZhcmNlbGwuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjEwNAorIywgZnV6enkKK21zZ2lkICJkbyBub3Qgc2hvdyBidW5kbGUgZGV0YWlscyIKK21zZ3N0ciAibm8gbW9zdHJpcyBsZXMgZXRpcXVldGVzIHBlbGFkZXMiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMgZXN0w6AgYsOpXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJDYWwgdW4gZGlww7JzaXQgcGVyIGEgZGVzZmVyIHVuIGZhcmNlbGwuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2OCBidWlsdGluL3JlbW90ZS5jOjE2MDkKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICJzaWd1ZXMgZGV0YWxsYXQ7IHMnaGEgZGUgY29swrdsb2NhciBhYmFucyBkJ3VuIHN1Ym9yZHJlIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE5MCBidWlsdGluL3JlbW90ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiU3Vib3JkcmUgZGVzY29uZWd1ZGE6ICVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0aXB1cz4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzIFstLXBhdGg9PGNhbcOtPl0pIDxvYmplY3RlPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTcKKyMsIGZ1enp5Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgIkNhcCBub20gZGUgYnJhbmNhIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM1Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI8dGlwdXM+IHBvdCBzZXIgdW4gZGU6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM2Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAibW9zdHJhIGVsIHRpcHVzIGRlIGwnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIm1vc3RyYSBsYSBtaWRhIGRlIGwnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAic3VydCBhbWIgemVybyBxdWFuIG5vIGhpIGhhIGVycm9yIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQwCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImltcHJpbWVpeCBiZWxsYW1lbnQgZWwgY29udGluZ3V0IGRlIGwnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MgorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJlbiBlbHMgb2JqZWN0ZXMgZGUgYmxvYiwgZXhlY3V0YSB0ZXh0Y29udiBlbiBlbCBjb250aW5ndXQgZGUgbCdvYmplY3RlIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiIgorImVuIGVscyBvYmplY3RlcyBkZSBibG9iLCBleGVjdXRhIGVscyBmaWx0cmVzIGVuIGVsIGNvbnRpbmd1dCBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDo5OTIKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ2Cittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgInVzYSB1biBjYW3DrSBlc3BlY8OtZmljIHBlciBhIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ4Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICJwZXJtZXQgcXVlIC1zIGkgLXQgZnVuY2lvbmluIGFtYiBvYmplY3RlcyB0cmVuY2F0cy9tYWxtZXNvcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OQorbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAicG9zYSBsYSBzb3J0aWRhIGRlIC0tYmF0Y2ggZW4gbWVtw7JyaWEgaW50ZXJtw6hkaWEiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKyJtb3N0cmEgbGEgaW5mb3JtYWNpw7MgaSBjb250aW5ndXQgZGVscyBvYmplY3RlcyByZWJ1dHMgZGUgbCdlbnRyYWRhIGVzdMOgbmRhcmQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTUKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm1vc3RyYSBpbmZvcm1hY2nDsyBzb2JyZSBlbHMgb2JqZWN0ZXMgcmVidXRzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisic2VndWVpeCBlbHMgZW5sbGHDp29zIHNpbWLDsmxpY3MgZW4gbCdhcmJyZSAocyd1c2EgYW1iIC0tYmF0Y2ggbyAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIm1vc3RyYSB0b3RzIGVscyBvYmplY3RlcyBhbWIgLS1iYXRjaCBvIC0tYmF0Y2gtY2hlY2siCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjMKK21zZ2lkICJkbyBub3Qgb3JkZXIgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTMKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHJpYnV0Pi4uLl0gWy0tXSA8bm9tLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTQKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXRyaWJ1dD4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiaW5mb3JtYSBkZSB0b3RzIGVscyBhdHJpYnV0cyBlc3RhYmxlcnRzIGVuIGVsIGZpdHhlciIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjIKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAidXNhIC5naXRhdHRyaWJ1dGVzIG5vbcOpcyBkZXMgZGUgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjUgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsbGVnZWl4IGVscyBub21zIGRlIGZpdHhlciBkZSBzdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjUgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNworbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJhY2FiYSBlbHMgcmVnaXN0cmVzIGQnZW50cmFkYSBpIGRlIHNvcnRpZGEgYW1iIHVuIGNhcsOgY3RlciBOVUwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0MzUgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNgorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAib21ldCBlbHMgaW5mb3JtZXMgZGUgcHJvZ3LDqXMiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjkKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAibW9zdHJhIGVscyBjYW1pbnMgZCdlbnRyYWRhIHF1ZSBubyBjb2luY2lkZWl4aW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiaWdub3JhIGwnw61uZGV4IGVuIGNvbXByb3ZhciIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjAKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICJubyBlcyBwb2RlbiBlc3BlY2lmaWNhciBub21zIGRlIGNhbcOtIGFtYiAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiBub23DqXMgdMOpIHNlbnRpdCBhbWIgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjUKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAiY2FwIGNhbcOtIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OQorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IG5vbcOpcyDDqXMgdsOgbGlkIGFtYiB1biBzb2wgbm9tIGRlIGNhbcOtIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICJubyBlcyBwb2RlbiBlc3BlY2lmaWNhciAtLXF1aWV0IGkgLS12ZXJib3NlIGFsaG9yYSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzQKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyDDqXMgdsOgbGlkIG5vbcOpcyBhbWIgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wY2lvbnM+XSA8Y29udGFjdGU+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJ0YW1iw6kgbGxlZ2VpeCBlbHMgY29udGFjdGVzIGRlcyBkZSBzdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBlbCBjb250YWN0ZTogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICJubyBoaSBoYSBjb250YWN0ZXMgZXNwZWNpZmljYXRzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPG9wY2lvbnM+XSBbLS1dIFs8Zml0eGVyPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAiwqtzdGFnZcK7IGhhIGRlIHNlciBlbnRyZSAxIGkgMyBvIGFsbCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJhZ2FmYSB0b3RzIGVscyBmaXR4ZXJzIGVuIGwnw61uZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJmb3LDp2EgbGEgc29icmVlc2NyaXB0dXJhIGRlIGZpdHhlcnMgZXhpc3RlbnRzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorImNhcCBhZHZlcnTDqG5jaWEgcGVyIGEgZml0eGVycyBleGlzdGVudHMgaSBmaXR4ZXJzIHF1ZSBubyBzaWd1aW4gYSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAibm8gYWdhZmlzIGZpdHhlcnMgbm91cyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICJhY3R1YWxpdHphIGxhIGluZm9ybWFjacOzIGQnZXN0YWTDrXN0aXF1ZXMgZW4gZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsbGVnZWl4IGxhIGxsaXN0YSBkZSBjYW1pbnMgZGVzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc3Cittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICJlc2NyaXUgZWwgY29udGluZ3V0IGEgZml0eGVycyB0ZW1wb3JhbHMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODgKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODgyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njc5Cittc2dpZCAic3RyaW5nIgorbXNnc3RyICJjYWRlbmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJlbiBjcmVhciBmaXR4ZXJzLCBhbnRlcG9zYSA8Y2FkZW5hPiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4MQorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICJjb3BpYSBlbHMgZml0eGVycyBkZXMgZGUgwqtzdGFnZcK7IGFtYiBub20iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMQorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3BjaW9ucz5dIDxicmFuY2E+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzIKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wY2lvbnM+XSBbPGJyYW5jYT5dIC0tIDxmaXR4ZXI+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzcKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcGNpb25zPl0gPGJyYW5jYT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MgorIywgZnV6enkKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3BjaW9ucz5dIFs8YnJhbmNhPl0gLS0gPGZpdHhlcj4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUgYnVpbHRpbi9jaGVja291dC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiZWwgY2Ftw60gwqslc8K7IG5vIHTDqSBsYSBub3N0cmEgdmVyc2nDsyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NyBidWlsdGluL2NoZWNrb3V0LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgImVsIGNhbcOtIMKrJXPCuyBubyB0w6kgbGEgc2V2YSB2ZXJzacOzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgImVsIGNhbcOtIMKrJXPCuyBubyB0w6kgdG90ZXMgbGVzIHZlcnNpb25zIG5lY2Vzc8OgcmllcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgImVsIGNhbcOtIMKrJXPCuyBubyB0w6kgbGVzIHZlcnNpb25zIG5lY2Vzc8OgcmllcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiY2Ftw60gwqslc8K7OiBubyBlcyBwb3QgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYWZlZ2lyIGVsIHJlc3VsdGF0IGRlIGZ1c2nDsyBwZXIgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiZXRpcXVldGEgZGUgZnVzacOzIGluY29ycmVjdGEgZW4gbGEgY29taXNzacOzIMKrJXPCuyIKK21zZ3N0clsxXSAiZXRpcXVldGEgZGUgZnVzacOzIGluY29ycmVjdGEgZW4gbGEgY29taXNzacOzIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAiYWN0dWFsaXR6YXQgJWQgY2Ftw61cbiIKK21zZ3N0clsxXSAiYWN0dWFsaXR6YXRzICVkIGNhbWluc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tIHRoZSBpbmRleCIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0clswXSAiUydoYSBhY3R1YWxpdHphdCB1biBjYW3DrSBkZXMgZGUgbCfDrW5kZXgiCittc2dzdHJbMV0gIlMnaGEgYWN0dWFsaXR6YXQgJWQgY2FtaW5zIGRlcyBkZSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQxMiBidWlsdGluL2NoZWNrb3V0LmM6NDE1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICLCqyVzwrsgbm8gZXMgcG90IHVzYXIgYW1iIGFjdHVhbGl0emFjacOzIGRlIGNhbWlucyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiwqslc8K7IG5vIGVzIHBvdCB1c2FyIGFtYiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIiIKKyJObyBlcyBwb2RlbiBhY3R1YWxpdHphciBlbHMgY2FtaW5zIGkgY2FudmlhciBhIGxhIGJyYW5jYSDCqyVzwrsgYSBsYSB2ZWdhZGEuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiwqslc8K7IG5vIGVzIHBvdCB1c2FyIGFtYiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDUgYnVpbHRpbi9jaGVja291dC5jOjQ1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBubyBlcyBwb3QgdXNhciBhbWIgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgImVsIGNhbcOtIMKrJXPCuyBlc3TDoCBzZW5zZSBmdXNpb25hciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4MiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjgyCittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgImhldSBkZSBwcmltZXIgcmVzb2xkcmUgZWwgdm9zdHJlIMOtbmRleCBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiTm8gZXMgcG90IGZlciByZWZsb2cgcGVyIGEgwqslc8K7OiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODc3Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQgYXJhIMOpcyBhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgxIGJ1aWx0aW4vY2xvbmUuYzo3MTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgSEVBRCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJSZXN0YWJsZWl4IGxhIGJyYW5jYSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiSmEgZW4gwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlMnaGEgY2FudmlhdCBpIHJlc3RhYmxlcnQgYSBsYSBicmFuY2Egwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQgYnVpbHRpbi9jaGVja291dC5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUydoYSBjYW52aWF0IGEgbGEgYnJhbmNhIG5vdmEgwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUydoYSBjYW52aWF0IGEgbGEgYnJhbmNhIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gaSAlZCBtw6lzLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiQWR2ZXJ0w6huY2lhOiBlc3RldSBkZWl4YW50IGVucmVyZSAlZCBjb21pc3Npw7MsIG5vXG4iCisidmluY3VsYWRhIGEgY2FwIGRlIGxlcyB2b3N0cmVzIGJyYW5xdWVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJBZHZlcnTDqG5jaWE6IGVzdGV1IGRlaXhhbnQgZW5yZXJlICVkIGNvbWlzc2lvbnMsIG5vXG4iCisidmluY3VsYWRlcyBhIGNhcCBkZSBsZXMgdm9zdHJlcyBicmFucXVlczpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIlNpIGxhIHZvbGV1IG1hbnRlbmlyIGNyZWFudCB1bmEgYnJhbmNhIG5vdmEsIGFyYSBwb3Qgc2VyIHVuIGJvbiBtb21lbnRcbiIKKyJwZXIgYSBmZXItaG8gYW1iOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxub20tZGUtYnJhbmNhLW5vdmE+ICVzXG4iCisiXG4iCittc2dzdHJbMV0gIiIKKyJTaSBsZXMgdm9sZXUgbWFudGVuaXIgY3JlYW50IHVuYSBicmFuY2Egbm92YSwgYXJhIHBvdCBzZXIgdW4gYm9uIG1vbWVudFxuIgorInBlciBhIGZlci1obyBhbWI6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5vbS1kZS1icmFuY2Etbm92YT4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJlcnJvciBpbnRlcm4gZW4gZWwgcGFzc2VpZyBwZXIgcmV2aXNpb25zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICJMYSBwb3NpY2nDsyBkZSBIRUFEIGFudGVyaW9yIGVyYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTEgYnVpbHRpbi9jaGVja291dC5jOjEyODYKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJTb3UgZW4gdW5hIGJyYW5jYSBxdWUgZW5jYXJhIGhhIGRlIG7DqWl4ZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc4CisjLCBmdXp6eQorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCIKK21zZ3N0ciAicydlc3BlcmF2YSBub23DqXMgdW5hIHJlZmVyw6huY2lhLCBzJ2hhbiBkb25hdCAlZC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICJzJ2VzcGVyYXZhIG5vbcOpcyB1bmEgcmVmZXLDqG5jaWEsIHMnaGFuIGRvbmF0ICVkLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY291bGQgYmUgYm90aCBhIGxvY2FsIGZpbGUgYW5kIGEgdHJhY2tpbmcgYnJhbmNoLlxuIgorIlBsZWFzZSB1c2UgLS0gKGFuZCBvcHRpb25hbGx5IC0tbm8tZ3Vlc3MpIHRvIGRpc2FtYmlndWF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NSBidWlsdGluL3dvcmt0cmVlLmM6MjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJyZWZlcsOobmNpYSBubyB2w6BsaWRhOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTggYnVpbHRpbi9jaGVja291dC5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJsYSByZWZlcsOobmNpYSBubyDDqXMgdW4gYXJicmU6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsJ29iamVjdGUgJXMgwqslc8K7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgIiIKKyJMYSBicmFuY2Egwqslc8K7IGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSBicmFuY2EgcmVtb3RhIMKrJXPCuyBkZSDCqyVzwrsuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwOCBidWlsdGluL2NoZWNrb3V0LmM6MTMxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCAnJXMnIgorbXNnc3RyICJzJ2VzcGVyYXZhIHNoYWxsb3cvdW5zaGFsbG93LCBzJ2hhIHJlYnV0ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMxMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAiTGEgdm9zdHJhIGJyYW5jYSBlc3TDoCBhbCBkaWEgYW1iIMKrJXPCuy5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMjcKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzMQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzUKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM5Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQzCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDcKKyMsIGZ1enp5Cittc2dpZCAieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIKK21zZ3N0ciAiQWN0dWFsbWVudCBlc3RldSBiaXNlY2FudC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU0Cittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgImVscyBjYW1pbnMgbm8gZXMgcG9kZW4gdXNhciBhbWIgY2FudmkgZGUgYnJhbmNhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NyBidWlsdGluL2NoZWNrb3V0LmM6MTM2MSBidWlsdGluL2NoZWNrb3V0LmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLCqyVzwrsgbm8gZXMgcG90IHVzYXIgYW1iIGNhbnZpIGRlIGJyYW5jYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjkgYnVpbHRpbi9jaGVja291dC5jOjEzNzIgYnVpbHRpbi9jaGVja291dC5jOjEzNzUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICLCqyVzwrsgbm8gZXMgcG90IHVzYXIgYW1iIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IHRha2UgPHN0YXJ0LXBvaW50PiIKK21zZ3N0ciAiwqslc8K7IG5vIGVzIHBvdCB1c2FyIGFtYiBhY3R1YWxpdHphY2nDsyBkZSBjYW1pbnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJObyBlcyBwb3QgY2FudmlhciBsYSBicmFuY2EgYSBsYSBubyBjb21pc3Npw7Mgwqslc8K7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5NworIywgZnV6enkKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBvciBjb21taXQgYXJndW1lbnQiCittc2dzdHIgIk1hbmNhIGVsIG5vbSBkZSBicmFuY2E7IHByb3ZldSAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MzkgYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTIKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEzIGJ1aWx0aW4vZmV0Y2guYzoxNjcgYnVpbHRpbi9tZXJnZS5jOjI4NQorIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjcgYnVpbHRpbi9wdWxsLmM6MTM4IGJ1aWx0aW4vcHVzaC5jOjU2MworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzQKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgImZvcsOnYSBsJ2luZm9ybWUgZGUgcHJvZ3LDqXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQwCittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgInJlYWxpdHphIHVuYSBmdXNpw7MgZGUgMyB2aWVzIGFtYiBsYSBicmFuY2Egbm92YSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDEgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAiZXN0aWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQyCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAiZXN0aWwgZGUgY29uZmxpY3RlIChmdXNpw7MgbyBkaWZmMykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU0IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDMKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgInNlcGFyYSBIRUFEIGEgbGEgY29taXNzacOzIGFub21lbmFkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTUKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZXN0YWJsZWl4IGxhIGluZm9ybWFjacOzIGRlIGZvbnQgZGUgbGEgYnJhbmNhIG5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgImFnYWZhIGEgbGEgZm9yw6dhIChkZXNjYXJ0YSBxdWFsc2V2b2wgbW9kaWZpY2FjacOzIGxvY2FsKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJicmFuY2Etbm92YSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgImJyYW5jYSDDsnJmZW5hIG5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYxIGJ1aWx0aW4vbWVyZ2UuYzoyODgKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgImFjdHVhbGl0emEgZWxzIGZpdHhlcnMgaWdub3JhdHMgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjQKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIm5vIGNvbXByb3ZpcyBzaSBhbHRyZSBhcmJyZSBkZSB0cmViYWxsIHTDqSBsYSByZWZlcsOobmNpYSBkb25hZGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDc3Cittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJhZ2FmYSBsYSB2ZXJzacOzIG5vc3RyYSBkZWxzIGZpdHhlcnMgc2Vuc2UgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgwCittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImFnYWZhIGxhIHZlcnNpw7Mgc2V2YSBkZWxzIGZpdHhlcnMgc2Vuc2UgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJubyBsaW1pdGlzIGxlcyBlc3BlY2lmaWNhY2lvbnMgZGUgY2Ftw60gbm9tw6lzIGEgZW50cmFkZXMgZGlzcGVyc2VzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUzNworbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIGkgLS1vcnBoYW4gc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NDAKKyMsIGZ1enp5Cittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItbiBpIC1rIHPDs24gbcO6dHVhbWVudCBleGNsb2VudHMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU3NworbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBuZWNlc3NpdGEgdW4gbm9tIGRlIGJyYW5jYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1ODIKKyMsIGZ1enp5Cittc2dpZCAibWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIgorbXNnc3RyICJNYW5jYSBlbCBub20gZGUgYnJhbmNhOyBwcm92ZXUgLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCByZXNvbGRyZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjMxCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgImVzcGVjaWZpY2FjacOzIGRlIGNhbcOtIG5vIHbDoGxpZGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKyLCqyVzwrsgbm8gw6lzIHVuYSBjb21pc3Npw7MgaSBsYSBicmFuY2Egwqslc8K7IG5vIGVzIHBvdCBjcmVhciBhIHBhcnRpciBkJ2FxdWVzdGEgIgorImNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIG5vIGFjY2VwdGEgdW4gcGFyw6BtZXRyZSBkZSBjYW3DrSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjUxCisjLCBmdXp6eQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDDqXMgaW5jb21wYXRpYmxlIGFtYiAtLWJpc2VjdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NTQgYnVpbHRpbi9yZXNldC5jOjMyNAorIywgZnV6enkKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDDqXMgaW5jb21wYXRpYmxlIGFtYiAtLWJpc2VjdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjUKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBpIC0tbWVyZ2Ugc8OzbiBpbmNvbXBhdGlibGVzIGVuXG4iCisiYWdhZmFyIGRlIGwnw61uZGV4LiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NzAKKyMsIGZ1enp5Cittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgIkhldSBkJ2VzcGVjaWZpY2FyIHVuIGRpcmVjdG9yaS4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIG1hdGNoZWQgbW9yZSB0aGFuIG9uZSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLlxuIgorIldlIGZvdW5kICVkIHJlbW90ZXMgd2l0aCBhIHJlZmVyZW5jZSB0aGF0IG1hdGNoZWQuIFNvIHdlIGZlbGwgYmFja1xuIgorIm9uIHRyeWluZyB0byByZXNvbHZlIHRoZSBhcmd1bWVudCBhcyBhIHBhdGgsIGJ1dCBmYWlsZWQgdGhlcmUgdG9vIVxuIgorIlxuIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorIlxuIgorIklmIHlvdSdkIGxpa2UgdG8gYWx3YXlzIGhhdmUgY2hlY2tvdXRzIG9mIGFuIGFtYmlndW91cyA8bmFtZT4gcHJlZmVyXG4iCisib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NyBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTY5CisjOiBidWlsdGluL3JlbW90ZS5jOjE3MSBidWlsdGluL3dvcmt0cmVlLmM6NDk5IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDEKK21zZ2lkICJicmFuY2giCittc2dzdHIgImJyYW5jYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTUKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JlYSBpIGFnYWZhIHVuYSBicmFuY2Egbm92YSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICJjcmVhL3Jlc3RhYmxlaXggaSBhZ2FmYSB1bmEgYnJhbmNhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxOAorbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgImNyZWEgdW4gcmVnaXN0cmUgZGUgcmVmZXLDqG5jaWEgcGVyIGEgbGEgYnJhbmNhIG5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIwCisjLCBmdXp6eQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIKK21zZ3N0ciAiZHVidGEgJ2dpdCBjaGVja291dCA8Y2FwLWJyYW5jYS1haXjDrT4nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMQorIywgZnV6enkKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIKK21zZ3N0ciAicG9kYSBsZXMgcmVmZXLDqG5jaWVzIHNvbHRlcyAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NgorIywgZnV6enkKK21zZ2lkICJjcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2giCittc2dzdHIgImNyZWEgaSBhZ2FmYSB1bmEgYnJhbmNhIG5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY4CisjLCBmdXp6eQorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgc3dpdGNoIHRvIGEgYnJhbmNoIgorbXNnc3RyICJjcmVhL3Jlc3RhYmxlaXggaSBhZ2FmYSB1bmEgYnJhbmNhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3MAorIywgZnV6enkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgImR1YnRhICdnaXQgY2hlY2tvdXQgPGNhcC1icmFuY2EtYWl4w60+JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzIKKyMsIGZ1enp5Cittc2dpZCAidGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zIgorbXNnc3RyICJhZ2FmYSBhIGxhIGZvcsOnYSAoZGVzY2FydGEgcXVhbHNldm9sIG1vZGlmaWNhY2nDsyBsb2NhbCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA0CisjLCBmdXp6eQorbXNnaWQgIndoaWNoIHRyZWUtaXNoIHRvIGNoZWNrb3V0IGZyb20iCittc2dzdHIgImxsZWdlaXggbCdvYmplY3RlIGRlcyBkZSBzdGRpbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDYKKyMsIGZ1enp5Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGwnw61uZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgwOAorIywgZnV6enkKK21zZ2lkICJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIgorbXNnc3RyICJNb3N0cmEgbCdlc3RhdCBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODEwCisjLCBmdXp6eQorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJzJ2VzdMOgIGlnbm9yYW50ICVzIG5vIGZ1c2lvbmF0XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODExCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHLDsz5dIFsteCB8IC1YXSBbLS1dIDxjYW1pbnM+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiUydlc3TDoCBlbGltaW5hbnQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJFbGltaW5hcmlhICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIlMnZXN0w6Agb21ldGVudCBlbCBkaXDDsnNpdCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIk9tZXRyaWEgZWwgZGlww7JzaXQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZWxpbWluYXIgJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxzdGF0ICVzXG4iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIHN0YXQgYSAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyJBanVkYTpcbiIKKyIxICAgICAgICAgIC0gc2VsZWNjaW9uYSB1biDDrXRlbSBudW1lcmF0XG4iCisiZm9vICAgICAgICAtIHNlbGVjY2lvbmEgdW4gw610ZW0gYmFzYXQgZW4gdW4gcHJlZml4IMO6bmljXG4iCisiICAgICAgICAgICAtIChidWl0KSBubyBzZWxlY2Npb25pcyByZXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmdcbiIKK21zZ3N0ciAiIgorIkFqdWRhOlxuIgorIjEgICAgICAgICAgLSBzZWxlY2Npb25hIHVuIHNvbCDDrXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY2Npb25hIHVuIHJhbmcgZCfDrXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWNjaW9uYSBtw7psdGlwbGVzIHJhbmdzXG4iCisiZm9vICAgICAgICAtIHNlbGVjY2lvbmEgdW4gw610ZW0gYmFzYXQgZW4gdW4gcHJlZml4IMO6bmljXG4iCisiLS4uLiAgICAgICAtIGRlc3NlbGVjY2lvbmEgZWxzIMOtdGVtcyBzZWxlY2Npb25hdHNcbiIKKyIqICAgICAgICAgIC0gdHJpYSB0b3RzIGVscyDDrXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGJ1aXQpIGZpbmFsaXR6YSBsYSBzZWxlY2Npw7NcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICJQZXJkw7MgKCVzKT9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIkludHJvZHXDr3UgZWxzIHBhdHJvbnMgYSBpZ25vcmFyPj4gIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICJBRFZFUlTDiE5DSUE6IE5vIGVzIHBvZGVuIHRyb2JhciDDrXRlbXMgcXVlIGNvaW5jaWRlaXhpbiBhbWI6ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiU2VsZWNjaW9uYSBlbHMgw610ZW1zIGEgc3VwcmltaXIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiVm9sZXUgZWxpbWluYXIgJXMgW3kvTl0/ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjc5NQorbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIGNvbWVuw6dhIGEgbmV0ZWphclxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsb3Ugw610ZW1zIGRlIHN1cHJlc3Npw7NcbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWNjaW9uYSDDrXRlbXMgYSBzdXByaW1pciBwZXIgbsO6bWVyb3NcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybWEgY2FkYSBzdXByZXNzacOzIChjb20gXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBkZWl4YSBkZSBuZXRlamFyXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIGFxdWVzdGEgcGFudGFsbGFcbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gYWp1ZGEgZGUgc2VsZWNjacOzIGRlIGwnYXbDrXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzEKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICJFbGltaW5hcmlhIGwnw610ZW0gc2Vnw7xlbnQ6IgorbXNnc3RyWzFdICJFbGltaW5hcmlhIGVscyDDrXRlbXMgc2Vnw7xlbnRzOiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg0NworbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICJObyBoaSBoYSBtw6lzIGZpdHhlcnMgYSBuZXRlamFyOyBzJ2VzdMOgIHNvcnRpbnQuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA5Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgIm5vIGltcHJpbWVpeGlzIGVscyBub21zIGRlbHMgZml0eGVycyBlbGltaW5hdHMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiZm9yw6dhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgIm5ldGVqYSBpbnRlcmFjdGl2YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAiZWxpbWluYSBkaXJlY3RvcmlzIHNlbmNlcnMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTUgYnVpbHRpbi9kZXNjcmliZS5jOjU0OCBidWlsdGluL2Rlc2NyaWJlLmM6NTUwCisjOiBidWlsdGluL2dyZXAuYzo5MDEgYnVpbHRpbi9sb2cuYzoxNzcgYnVpbHRpbi9sb2cuYzoxNzkKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTcgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NCBidWlsdGluL25hbWUtcmV2LmM6NDY2CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAicGF0csOzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgImFmZWdpdSA8cGF0csOzPiBwZXIgYSBpZ25vcmFyIGxlcyByZWdsZXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICJlbGltaW5hIGVscyBmaXR4ZXJzIGlnbm9yYXRzLCB0YW1iw6kiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTkKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJlbGltaW5hIG5vbcOpcyBlbHMgZml0eGVycyBpZ25vcmF0cyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzNworbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLXggaSAtWCBubyBlcyBwb2RlbiB1c2FyIGp1bnRzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQxCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGVzdMOgIGVzdGFibGVydGEgZW4gY2VydCBpIG5pIC1pLCAtbiBuaSAtZiBzJ2hhbiBpbmRpY2F0OyAiCisicmVmdXNhbnQgbmV0ZWphciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIMOpcyBwZXIgZGVmZWN0ZSBjZXJ0IGkgbmkgLWksIC1uIG5pIC1mIHMnaGFuIGluZGljYXQ7ICIKKyJyZWZ1c2FudCBuZXRlamFyIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8b3BjaW9ucz5dIFstLV0gPGRpcMOyc2l0PiBbPGRpcmVjdG9yaT5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAibm8gZmFjaXMgY2FwIGFnYWZhbWVudCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0IGJ1aWx0aW4vY2xvbmUuYzo5NiBidWlsdGluL2luaXQtZGIuYzo0ODkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgImNyZWEgdW4gZGlww7JzaXQgbnUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICJjcmVhIHVuIGRpcMOyc2l0IG1pcmFsbCAoaW1wbGljYSBiYXJlKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMAorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJwZXIgYSBjbG9uYXIgZGVzIGQndW4gZGlww7JzaXQgbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDIKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAibm8gdXNpcyBlbmxsYcOnb3MgZHVycyBsb2NhbHMsIHNlbXByZSBjb3BpYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJjb25maWd1cmEgY29tIGEgZGlww7JzaXQgY29tcGFydGl0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgImVzcGVjaWZpY2FjacOzIGRlIGNhbcOtIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAiaW5pY2lhbGl0emEgZWxzIHN1Ym3DsmR1bHMgZW4gZWwgY2xvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibm9tYnJlIGRlIHN1Ym3DsmR1bHMgY2xvbmF0cyBlbiBwYXJhbMK3bGVsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAiZGlyZWN0b3JpLWRlLXBsYW50aWxsYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJkaXJlY3RvcmkgZGVzIGRlbCBxdWFsIHMndXNhcmFuIGxlcyBwbGFudGlsbGVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg1Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgImRpcMOyc2l0IGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk0CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NworbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgInVzYSAtLXJlZmVyZW5jZSBub23DqXMgZW4gY2xvbmFyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NCBidWlsdGluL3JlcGFjay5jOjMyNworbXNnaWQgIm5hbWUiCittc2dzdHIgIm5vbSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAidXNhIDxub20+IGVuIGxsb2MgZGUgJ29yaWdpbicgcGVyIGEgc2VndWlyIGxhIGZvbnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjIKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICJhZ2FmYSA8YnJhbmNhPiBlbiBsbG9jIGRlIGxhIEhFQUQgZGVsIHJlbW90IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAiY2Ftw60gYSBnaXQtdXBsb2FkLXBhY2sgZW4gZWwgcmVtb3QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4NDAKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyNworbXNnaWQgImRlcHRoIgorbXNnc3RyICJwcm9mdW5kaXRhdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiY3JlYSB1biBjbG9uIHN1cGVyZmljaWFsIGRlIHRhbCBwcm9mdW5kaXRhdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MworbXNnaWQgInRpbWUiCittc2dzdHIgImhvcmEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjgKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIHNpbmNlIGEgc3BlY2lmaWMgdGltZSIKK21zZ3N0ciAiY3JlYSB1biBjbG9uIHN1cGVyZmljaWFsIGRlcyBkJ3VuYSBob3JhIGVzcGVjw61maWNhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5IGJ1aWx0aW4vZmV0Y2guYzoxNzIgYnVpbHRpbi9mZXRjaC5jOjE5NQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ1Cittc2dpZCAicmV2aXNpb24iCittc2dzdHIgInJldmlzacOzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMwIGJ1aWx0aW4vZmV0Y2guYzoxNzMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICJhcHJvZnVuZGVpeCBsYSBoaXN0w7JyaWEgZCd1biBjbG9uIHN1cGVyZmljaWFsLCBleGNsb2VudCB1bmEgcmV2aXNpw7MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgImNsb25hIG5vbcOpcyB1bmEgYnJhbmNhLCBIRUFEIG8gLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzQKK21zZ2lkICJkb24ndCBjbG9uZSBhbnkgdGFncywgYW5kIG1ha2UgbGF0ZXIgZmV0Y2hlcyBub3QgdG8gZm9sbG93IHRoZW0iCittc2dzdHIgIiIKKyJubyBjbG9uZXUgY2FwIGV0aXF1ZXRhLCBpIGZldSBxdWUgZWxzIMKrZmV0Y2jCuyBzZWfDvGVudHMgbm8gZWxzIHNlZ3VlaXhlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgInF1YWxzZXZvbCBzdWJtw7JkdWwgY2xvbmF0IHNlcsOgIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZGlyZWN0b3JpIGRlIGdpdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJzZXBhcmEgZWwgZGlyZWN0b3JpIGRlIGdpdCBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgImNsYXU9dmFsb3IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgImVzdGFibGVpeCBsYSBjb25maWd1cmFjacOzIGRpbnMgZGVsIGRpcMOyc2l0IG5vdSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAiZXNwZWPDrWZpYyBhbCBzZXJ2aWRvciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAib3BjacOzIGEgdHJhbnNtZXRyZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjI0MAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgInVzYSBub23DqXMgYWRyZWNlcyBJUHY0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjQzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAidXNhIG5vbcOpcyBhZHJlY2VzIElQdjYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKKyMsIGZ1enp5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgInF1YWxzZXZvbCBzdWJtw7JkdWwgY2xvbmF0IHNlcsOgIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTUxCittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB0byBpbmNsdWRlIG9ubHkgZmlsZXMgYXQgcm9vdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjg3Cittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgZW5kZXZpbmFyIGNhcCBub20gZGUgZGlyZWN0b3JpLlxuIgorIkVzcGVjaWZpcXVldSB1biBkaXJlY3RvcmkgZW4gbGEgbMOtbmlhIGQnb3JkcmVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImluZm86IENvdWxkIG5vdCBhZGQgYWx0ZXJuYXRlIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJpbmZvOiBObyBzJ2hhIHBvZ3V0IGFmZWdpciB1biBhbHRlcm5hdGl1IHBlciBhIMKrJXPCuzogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXhpc3RlaXggaSBubyDDqXMgZGlyZWN0b3JpIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGEgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNyZWFyIGwnZW5sbGHDpyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNvcGlhciBlbCBmaXR4ZXIgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBpdGVyYXRlIG92ZXIgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlbGltaW5hciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiZmV0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHdpdGggJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iCittc2dzdHIgIiIKKyJFbCBjbG9uYXRnZSBoYSB0aW5ndXQgw6h4aXQsIHBlcsOyIGwnYWdhZmFtZW50IGhhXG4iCisiZmFsbGF0LiBQb2RldSBpbnNwZWNjaW9uYXIgcXXDqCBzJ2hhIGFnYWZhdCBhbWJcbiIKKyInZ2l0IHN0YXR1cycgaSB0b3JuYXIgYSBpbnRlbnRhciBsJ2FnYWZhbWVudCBhbWJcbiIKKyInZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgdHJvYmFyIGxhIGJyYW5jYSByZW1vdGEgJXMgcGVyIGEgY2xvbmFyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUyCisjLCBmdXp6eQorbXNnaWQgImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmaW5hbGl0emFyIMKrJXPCuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorImxhIEhFQUQgcmVtb3QgZXMgcmVmZXJlaXggYSB1bmEgcmVmZXLDqG5jaWEgcXVlIG5vIGV4aXN0ZWl4OyBubyBzJ2hhIHBvZ3V0ICIKKyJhZ2FmYXIuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDYKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFnYWZhciBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NTYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcGFyYW1ldGVycyB0byBjb25maWcgZmlsZSIKK21zZ3N0ciAibm8gcydoYW4gcG9ndXQgZXNjcml1cmUgZWxzIHBhcsOgbWV0cmVzIGFsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTE5Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAibm8gZXMgcG90IHJlZW1wYXF1ZXRhciBwZXIgYSBuZXRlamFyIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIxCittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJubyBlcyBwb3QgZGVzZW5sbGHDp2FyIGVsIGZpdHhlciBkJ2FsdGVybmF0aXZlcyB0ZW1wb3JhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1OSBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NDgKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJIaSBoYSBtYXNzYSBwYXLDoG1ldHJlcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjMKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIkhldSBkJ2VzcGVjaWZpY2FyIHVuIGRpcMOyc2l0IHBlciBhIGNsb25hci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJsZXMgb3BjaW9ucyAtLWJhcmUgaSAtLW9yaWdpbiAlcyBzw7NuIGluY29tcGF0aWJsZXMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc5Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSBpIC0tc2VwYXJhdGUtZ2l0LWRpciBzw7NuIGluY29tcGF0aWJsZXMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTkyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZWwgZGlww7JzaXQgwqslc8K7IG5vIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4IGJ1aWx0aW4vZmV0Y2guYzoxNzg3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAibGEgcHJvZnVuZGl0YXQgJXMgbm8gw6lzIG5vbWJyZSBwb3NpdGl1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICJlbCBjYW3DrSBkZXN0w60gwqslc8K7IGphIGV4aXN0ZWl4IGkgbm8gw6lzIHVuIGRpcmVjdG9yaSBidWl0LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJsJ2FyYnJlIGRlIHRyZWJhbGwgwqslc8K7IGphIGV4aXN0ZWl4LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzMgYnVpbHRpbi9jbG9uZS5jOjEwNTQgYnVpbHRpbi9kaWZmdG9vbC5jOjI3MQorIzogYnVpbHRpbi9sb2cuYzoxODY2IGJ1aWx0aW4vd29ya3RyZWUuYzozMDIgYnVpbHRpbi93b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAibm8gcydoYW4gcG9ndXQgY3JlYXIgZWxzIGRpcmVjdG9yaXMgaW5pY2lhbHMgZGUgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbCBkaXJlY3RvcmkgZCdhcmJyZSBkZSB0cmViYWxsIMKrJXPCuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgY2xvbmFudCBhbCBkaXDDsnNpdCBudSDCqyVzwrsuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiUydlc3TDoCBjbG9uYW50IGEgwqslc8K7Li4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDg0Cittc2dpZCAiIgorImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtIgorImFibGUiCittc2dzdHIgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBubyDDqXMgY29tcGF0aWJsZSBhbWIgYW1iZMOzcyAtLXJlZmVyZW5jZSBpIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0OAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWRlcHRoIHMnaWdub3JhIGVuIGVscyBjbG9ucyBsb2NhbHM7IHVzZXUgZmlsZTovLyBlbiBsbG9jIGQnYWl4w7IuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MAorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLXNoYWxsb3ctc2luY2UgcydpZ25vcmEgZW4gZWxzIGNsb25zIGxvY2FsczsgdXNldSBmaWxlOi8vIGVuIGxsb2MgZCdhaXjDsi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUyCittc2dpZCAiLS1zaGFsbG93LWV4Y2x1ZGUgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1zaGFsbG93LWV4Y2x1ZGUgcydpZ25vcmEgZW4gZWxzIGNsb25zIGxvY2FsczsgdXNldSBmaWxlOi8vIGVuIGxsb2MgZCdhaXjDsi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU0Cittc2dpZCAiLS1maWx0ZXIgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWZpbHRlciBzJ2lnbm9yYSBlbiBlbHMgY2xvbnMgbG9jYWxzOyB1c2V1IGZpbGU6Ly8gZW4gbGxvYyBkJ2FpeMOyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTcKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICJlbCBkaXDDsnNpdCBmb250IMOpcyBzdXBlcmZpY2lhbCwgcydlc3TDoCBpZ25vcmFudCAtLWxvY2FsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MgorbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAiLS1sb2NhbCBzJ2lnbm9yYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMzcgYnVpbHRpbi9jbG9uZS5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIkxhIGJyYW5jYSByZW1vdGEgJXMgbm8gZXMgdHJvYmEgZW4gbGEgZm9udCAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNDgKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJTZW1ibGEgcXVlIGhldSBjbG9uYXQgdW4gZGlww7JzaXQgYnVpdC4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJjZXJjYSBsZXMgdmFyaWFibGVzIGRlIGNvbmZpZ3VyYWNpw7MiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgImRpc3Bvc2ljacOzIGEgdXNhciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIkFtcGxhZGEgbcOgeGltYSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIkVzcGFpIGQnZW5jb2l4aW5hZGEgZW4gZWwgbWFyZ2UgZXNxdWVycmUiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAiRXNwYWkgZCdlbmNvaXhpbmFkYSBlbiBlbCBtYXJnZSBkcmV0IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIkVzcGFpIGQnZW5jb2l4aW5hZGEgZW50cmUgY29sdW1uZXMiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZCBoYSBkZSBzZXIgZWwgcHJpbWVyIHBhcsOgbWV0cmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmlsZT4pLi4uXSA8dHJlZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcGFyZW50ICVzIGlnbm9yZWQiCittc2dzdHIgInN1cHJpbWVpeCBsZXMgcmVmZXLDqG5jaWVzIHJlZW1wbGHDp2FkZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAibm8gw6lzIHVuIG5vbSBkJ29iamVjdGUgdsOgbGlkOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgwqslc8K7IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgaGEgZmFsbGF0IGVuIGVzY3JpdXJlIHVuIGFyYnJlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCB3cml0ZS10cmVlIGhhIGZhbGxhdCBlbiBlc2NyaXVyZSB1biBhcmJyZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMQorIywgZnV6enkKK21zZ2lkICJwYXJlbnQiCittc2dzdHIgInBhcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKKyMsIGZ1enp5Cittc2dpZCAiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBsJ29iamVjdGUgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NiBidWlsdGluL21lcmdlLmM6MjcwCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NjkKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAibWlzc2F0Z2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNDk2Cittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIm1pc3NhdGdlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorIywgZnV6enkKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgImxsZWdpdSBlbCBtaXNzYXRnZSBkZXMgZCd1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjEgYnVpbHRpbi9jb21taXQuYzoxNTA4IGJ1aWx0aW4vbWVyZ2UuYzoyODcKKyM6IGJ1aWx0aW4vcHVsbC5jOjE5NSBidWlsdGluL3JldmVydC5jOjExOAorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAic2lnbmEgbGEgY29taXNzacOzIGFtYiBHUEciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzMKKyMsIGZ1enp5Cittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgIkNhbCBleGFjdGFtZW50IHVuIHJhbmcuIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCisjLCBmdXp6eQorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQiCittc2dzdHIgImdpdCB3cml0ZS10cmVlIGhhIGZhbGxhdCBlbiBlc2NyaXVyZSB1biBhcmJyZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MQorbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs8b3BjaW9ucz5dIFstLV0gPGVzcGVjaWZpY2FjacOzLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs8b3BjaW9ucz5dIFstLV0gPGVzcGVjaWZpY2FjacOzLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorIkhldSBkZW1hbmF0IGVzbWVuYXIgbGEgY29taXNzacOzIG3DqXMgcmVjZW50LCBwZXLDsiBmZXIgYWl4w7IgbGFcbiIKKyJkZWl4YXJpYSBidWlkYS4gUG9kZXUgcmVwZXRpciBsYSB2b3N0cmEgb3JkcmUgYW1iIC0tYWxsb3ctZW1wdHksIG9cbiIKKyJwb2RldSBlbGltaW5hciBsYSBjb21pc3Npw7MgcGVyIGNvbXBsZXQgYW1iIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTYKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVsIMKrY2hlcnJ5IHBpY2vCuyBwcmV2aSBqYSBlc3TDoCBidWl0LCBwb3NzaWJsZW1lbnQgYSBjYXVzYSBkZSByZXNvbHVjacOzIGRlICIKKyJjb25mbGljdGUuXG4iCisiU2kgZWwgdm9sZXUgY29tZXRyZSBkZSB0b3RlcyBtYW5lcmVzLCB1c2V1OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MworIywgZnV6enkKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCittc2dzdHIgIkQnYWx0cmEgbWFuZXJhLCB1c2V1IMKrZ2l0IHJlc2V0wrtcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBkZXNlbXBhcXVldGFyIGwnb2JqZWN0ZSBkJ2FyYnJlIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUxCisjLCBmdXp6eQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLWEgbm8gdMOpIHNlbnRpdCBhbWIgY2FtaW5zLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIi0taW5jbHVkZS8tLW9ubHkgbm8gdMOpIHNlbnRpdCBzZW5zZSBjYW3DrS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc2Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgdW4gw61uZGV4IHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4MgorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImwnYWZlZ2ltZW50IGludGVyYWN0aXUgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyIGwnw61uZGV4IHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5OAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGFjdHVhbGl0emFyIGwnYXJicmUgcHJpbmNpcGFsIGRlIG1lbcOycmlhIGNhdSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjMgYnVpbHRpbi9jb21taXQuYzo0NDYgYnVpbHRpbi9jb21taXQuYzo0OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgZml0eGVyIG5ld19pbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzUKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgdW5hIGNvbWlzc2nDsyBwYXJjaWFsIGR1cmFudCB1bmEgZnVzacOzLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzcKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgdW5hIGNvbWlzc2nDsyBwYXJjaWFsIGR1cmFudCB1biDCq2NoZXJyeSBwaWNrwrsuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4NQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgdW4gZml0eGVyIGQnw61uZGV4IHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJhIGxhIGNvbWlzc2nDsyDCqyVzwrsgbGkgbWFuY2EgbGEgY2Fww6dhbGVyYSBkJ2F1dG9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICJsYSBjb21pc3Npw7Mgwqslc8K7IHTDqSB1bmEgbMOtbmlhIGQnYXV0b3IgbWFsIGZvcm1hZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIzCittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyw6BtZXRyZSAtLWF1dGhvciBtYWwgZm9ybWF0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY3NgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisibm8gZXMgcG90IHNlbGVjY2lvbmFyIHVuIGNhcsOgY3RlciBkZSBjb21lbnRhcmkgcXVlXG4iCisibm8gc2lndWkgdXNhdCBlbiBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgYWN0dWFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxNCBidWlsdGluL2NvbW1pdC5jOjc0NyBidWlsdGluL2NvbW1pdC5jOjEwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdHJvYmFyIGxhIGNvbWlzc2nDsyAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjYgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIocydlc3TDoCBsbGVnaW50IGVsIG1pc3NhdGdlIGRlIHJlZ2lzdHJlIGRlcyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZClcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgcmVnaXN0cmUgZGVzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZGUgcmVnaXN0cmUgwqslc8K7IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc2MyBidWlsdGluL2NvbW1pdC5jOjc3OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzcwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODMwCittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsYSBwbGFudGlsbGEgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZW1ibGEgcXVlIHBvZGV1IGVzdGFyIGNvbWV0ZW50IHVuYSBmdXNpw7MuXG4iCisiU2kgYWl4w7Igbm8gw6lzIGNvcnJlY3RlLCBlbGltaW5ldSBlbCBmaXR4ZXJcbiIKKyJcdCVzXG4iCisiaSBpbnRlbnRldS1obyBkZSBub3UuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlbWJsYSBxdWUgcG9kZXUgZXN0YXIgY29tZXRlbnQgdW4gwqtjaGVycnkgcGlja8K7LlxuIgorIlNpIGFpeMOyIG5vIMOpcyBjb3JyZWN0ZSwgZWxpbWluZXUgZWwgZml0eGVyXG4iCisiXHQlc1xuIgorImkgaW50ZW50ZXUtaG8gZGUgbm91LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW50cm9kdcOvdSBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGVscyB2b3N0cmVzIGNhbnZpcy5cbiIKKyJTJ2lnbm9yYXJhbiBsZXMgbMOtbmllcyBxdWUgY29tZW5jaW4gYW1iIMKrJWPCuywgaSB1biBtaXNzYXRnZSBkZVxuIgorImNvbWlzc2nDsyBidWl0IGF2b3J0YSBsYSBjb21pc3Npw7MuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW50cm9kdcOvdSBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGVscyB2b3N0cmVzIGNhbnZpcy5cbiIKKyJFcyBtYW50aW5kcmFuIGxlcyBsw61uaWVzIHF1ZSBjb21lbmNpbiBhbWIgwqslY8K7OyBwb2RldSBlbGltaW5hci1sZXMgIgorInZvc2FsdHJlc1xuIgorIm1hdGVpeG9zIHNpIHZvbGV1LiBVbiBtaXNzYXRnZSBidWl0IGF2b3J0YSBsYSBjb21pc3Npw7MuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNBdXRvcjogICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXRhOiAgICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQ29taXRlbnQ6ICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkyNQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJObyBlcyBwb3QgbGxlZ2lyIGwnw61uZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5MgorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJFcnJvciBlbiBjb25zdHJ1aXIgYXJicmVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDYgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJFc3BlY2lmaXF1ZXUgZWwgbWlzc2F0Z2UgdXNhbnQgbCdvcGNpw7MgLW0gbyBsJ29wY2nDsyAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yIMKrJXPCuyBubyDDqXMgwqtOb20gPGFkcmXDp2EtZWxlY3Ryw7JuaWNhPsK7IGkgbm8gY29pbmNpZGVpeCBhbWJcbiIKKyJjYXAgYXV0b3IgZXhpc3RlbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICJtb2RlIGlnbm9yYXQgbm8gdsOgbGlkIMKrJXPCuyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDgyIGJ1aWx0aW4vY29tbWl0LmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIk1vZGUgZGUgZml0eGVycyBubyBzZWd1aXRzIG5vIHbDoGxpZCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyMgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIGkgLXogc8OzbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJVc2FyIGFtYmTDs3MgLS1yZXNldC1hdXRob3IgaSAtLWF1dGhvciBubyB0w6kgc2VudGl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzUKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiTm8gdGVuaXUgcmVzIGEgZXNtZW5hci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3OAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkVzdGV1IGVubWlnIGQndW5hIGZ1c2nDsyAtLSBubyBlcyBwb3QgZXNtZW5hci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkVzdGV1IGVubWlnIGQndW4gwqtjaGVycnkgcGlja8K7IC0tIG5vIGVzIHBvdCBlc21lbmFyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiTGVzIG9wY2lvbnMgLS1zcXVhc2ggaSAtLWZpeHVwIG5vIGVzIHBvZGVuIHVzYXIganVudGVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTMKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiTm9tw6lzIHVuIGRlIC1jLy1DLy1GLy0tZml4dXAgZXMgcG90IHVzYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTUKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICJMJ29wY2nDsyAtbSBubyBlcyBwb3QgY29tYmluYXIgYW1iIC1jLy1DLy1GLy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwMworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIG5vbcOpcyBlcyBwb3QgdXNhciBhbWIgLUMsIC1jIG8gLS1hbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyMAorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiTm9tw6lzIHVuIGRlIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGVzIHBvdCB1c2FyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi1hIG5vIHTDqSBzZW50aXQgYW1iIGNhbWlucy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NyBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgIm1vc3RyYSBsJ2VzdGF0IGNvbmNpc2FtZW50IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTkgYnVpbHRpbi9jb21taXQuYzoxNTIxCittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIm1vc3RyYSBsYSBpbmZvcm1hY2nDsyBkZSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MQorbXNnaWQgInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iCittc2dzdHIgIm1vc3RyYSBsYSBpbmZvcm1hY2nDsyBkZSDCq3N0YXNowrsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MyBidWlsdGluL2NvbW1pdC5jOjE1MjMKK21zZ2lkICJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjUKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjUgYnVpbHRpbi9jb21taXQuYzoxNTI1IGJ1aWx0aW4vcHVzaC5jOjU0OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY1MAorbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJzb3J0aWRhIGxsZWdpYmxlIHBlciBtw6BxdWluYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4IGJ1aWx0aW4vY29tbWl0LmM6MTUyNworbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAibW9zdHJhIGwnZXN0YXQgZW4gZm9ybWF0IGxsYXJnIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MSBidWlsdGluL2NvbW1pdC5jOjE1MzAKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAiYWNhYmEgbGVzIGVudHJhZGVzIGFtYiBOVUwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjEzNzcgYnVpbHRpbi9jb21taXQuYzoxNTMzCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTI1IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICJtb2RlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzQgYnVpbHRpbi9jb21taXQuYzoxNTMzCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisibW9zdHJhIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMsIG1vZGVzIG9wY2lvbmFsczogYWxsLCBub3JtYWwsIG5vLiAoUGVyICIKKyJkZWZlY3RlOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzgKK21zZ2lkICIiCisic2hvdyBpZ25vcmVkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gKERlZmF1bHQ6ICIKKyJ0cmFkaXRpb25hbCkiCittc2dzdHIgIiIKKyJtb3N0cmEgZWxzIGZpdHhlcnMgaWdub3JhdHMsIG1vZGVzIG9wY2lvbmFsczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gIgorIihQZXIgZGVmZWN0ZTogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODAgcGFyc2Utb3B0aW9ucy5oOjE5MgorbXNnaWQgIndoZW4iCittc2dzdHIgInF1YW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MQorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImlnbm9yYSBlbHMgY2FudmlzIGFscyBzdWJtw7JkdWxzLCBvcGNpb25hbCBxdWFuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuIChQZXIgIgorImRlZmVjdGU6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgIm1vc3RyYSBlbHMgZml0eGVycyBubyBzZWd1aXRzIGVuIGNvbHVtbmVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODQKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgIm5vIGRldGVjdGlzIGNhbnZpcyBkZSBub21zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAiZGV0ZWN0YSBjYW52aXMgZGUgbm9tcywgaSBvcGNpb25hbG1lbnQgZXN0YWJsZWl4IHVuIMOtbmRleCBkZSBzZW1ibGFuw6dhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDYKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4OQorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIm9tZXQgZWwgcmVzdW0gZGVzcHLDqXMgZCd1bmEgY29taXNzacOzIHJlZWl4aWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTAKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIm1vc3RyYSBsYSBkaWZlcsOobmNpYSBlbiBsYSBwbGFudGlsbGEgZGUgbWlzc2F0Z2UgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTIKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGRlIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkzIGJ1aWx0aW4vbWVyZ2UuYzoyNzQgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsbGVnaXUgZWwgbWlzc2F0Z2UgZGVzIGQndW4gZml0eGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJhdXRob3IiCittc2dzdHIgImF1dG9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAiYXV0b3IgY29ycmVnaXQgZGUgbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgImRhdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NQorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAiZGF0YSBjb3JyZWdpZGEgZGUgbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcgYnVpbHRpbi9jb21taXQuYzoxNDk4IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorIzogYnVpbHRpbi9jb21taXQuYzoxNTAwIHBhcnNlLW9wdGlvbnMuaDozMjggcmVmLWZpbHRlci5oOjkyCittc2dpZCAiY29tbWl0IgorbXNnc3RyICJjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NworbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyZXVzYSBpIGVkaXRhIGVsIG1pc3NhdGdlIGRlIGxhIGNvbWlzc2nDsyBlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OAorbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyZXVzYSBlbCBtaXNzYXRnZSBkZSBsYSBjb21pc3Npw7MgZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisidXNhIGVsIG1pc3NhdGdlIGZvcm1hdGF0IGRlIMKrc3F1YXNowrsgYXV0b23DoHRpYyBwZXIgYSBjb3JyZWdpciBsYSBjb21pc3Npw7MgIgorImVzcGVjaWZpY2FkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJ1c2EgZWwgbWlzc2F0Z2UgZm9ybWF0YXQgZGUgwqtzcXVhc2jCuyBhdXRvbcOgdGljIHBlciBhIMKrc3F1YXNowrsgYSBsYSBjb21pc3Npw7MgIgorImVzcGVjaWZpY2FkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAibCdhdXRvciBkZSBsYSBjb21pc3Npw7MgamEgc8OzYyBqbyAocyd1c2EgYW1iIC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIgYnVpbHRpbi9sb2cuYzoxNjM0IGJ1aWx0aW4vbWVyZ2UuYzoyODkKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NCBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAiYWZlZ2VpeCBTaWduZWQtb2ZmLWJ5OiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICJ1c2EgZWwgZml0eGVyIGRlIHBsYW50aWxsYSBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgImZvcsOnYSBsJ2VkaWNpw7MgZGUgbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiaW5jbG91IGwnZXN0YXQgZW4gbGEgcGxhbnRpbGxhIGRlIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZGVscyBjb250aW5ndXRzIGRlIGxlcyBjb21pc3Npb25zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTIKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImNvbWV0IHRvdHMgZWxzIGZpdHhlcnMgY2FudmlhdHMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMworbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAiYWZlZ2VpeCBlbHMgZml0eGVycyBlc3BlY2lmaWNhdHMgYSBsJ8OtbmRleCBwZXIgYSBjb21ldHJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTQKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAiYWZlZ2VpeCBlbHMgZml0eGVycyBpbnRlcmFjdGl2YW1lbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImFmZWdlaXggZWxzIGNhbnZpcyBpbnRlcmFjdGl2YW1lbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAiY29tZXQgbm9tw6lzIGVscyBmaXR4ZXJzIGVzcGVjaWZpY2F0cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgImV2aXRhIGVscyBsbGlnYW1zIGRlIHByZWNvbWlzc2nDsyBpIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE4Cittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAibW9zdHJhIHF1w6ggZXMgY29tZXRyaWEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMQorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiZXNtZW5hIGxhIGNvbWlzc2nDsyBhbnRlcmlvciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTMyCittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICJldml0YSBlbCBsbGlnYW0gZGUgcG9zdCBlc2NyaXB0dXJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzkKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJlc3TDoCBiw6kgcmVnaXN0cmFyIHVuIGNhbnZpIGJ1aXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0MQorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgImVzdMOgIGLDqSByZWdpc3RyYXIgdW4gY2FudmkgYW1iIG1pc3NhdGdlIGJ1aXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICJGaXR4ZXIgTUVSR0VfSEVBRCBtYWxtw6hzICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDszogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJTJ2VzdMOgIGF2b3J0YW50IGxhIGNvbWlzc2nDsyBhIGNhdXNhIGQndW4gbWlzc2F0Z2UgZGUgY29taXNzacOzIGJ1aXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIlMnZXN0w6AgYXZvcnRhbnQgbGEgY29taXNzacOzOyBubyBoZXUgZWRpdGF0IGVsIG1pc3NhdGdlLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2ODYKKyMsIGZ1enp5Cittc2dpZCAiIgorInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJzJ2hhIGFjdHVhbGl0emF0IGVsIGRpcMOyc2l0LCBwZXLDsiBubyBlcyBwb3QgZXNjcml1cmUgZWxcbiIKKyJmaXR4ZXIgbmV3X2luZGV4LiBDb21wcm92ZXUgcXVlIGVsIGRpc2Mgbm8gZXN0aWd1aSBwbGUgaVxuIgorInF1ZSBubyBzJ2hhZ2kgZXhjZWRpdCBsYSBxdW90YSwgaSBkZXNwcsOpcyBmZXUgXG4iCisiwqtnaXQgcmVzZXQgSEVBRMK7IHBlciBhIHJlY3VwZXJhci1oby4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDggYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDMKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg3IGJ1aWx0aW4vZmV0Y2guYzoxNzkgYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAiZGlyIgorbXNnc3RyICJkaXJlY3RvcmkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDQKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg4Cittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTEKK21zZ2lkICJpZiB0aGUgY29tbWl0LWdyYXBoIGlzIHNwbGl0LCBvbmx5IHZlcmlmeSB0aGUgdGlwIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3MyB0L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYzoyMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNvbWlzc2nDsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA2Cittc2dpZCAic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwOAorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTIKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE1CisjLCBmdXp6eQorbXNnaWQgImFsbG93IHdyaXRpbmcgYW4gaW5jcmVtZW50YWwgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIkVzY3JpdSBpIHZlcmlmaWNhIGVscyBmaXR4ZXJzIGNvbW1pdC1ncmFwaCBkZSBHaXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE3IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExOQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTAzIGJ1aWx0aW4vZW52LS1oZWxwZXIuYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSAtLXR5cGUgbm8gcmVjb25lZ3V0LCAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMTUKK21zZ2lkICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIKK21zZ3N0ciAibm9tw6lzIHVuIHRpcHVzIGNhZGEgY29wIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNAorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICJVYmljYWNpw7MgZGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgInVzYSBlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBnbG9iYWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRlbCBzaXN0ZW1hIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNworbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgZGVsIGRpcMOyc2l0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSBwZXItd29ya3RyZWUgY29uZmlnIGZpbGUiCittc2dzdHIgInVzYSB1biBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBwZXIgZGlww7JzaXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgZG9uYXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiSUQgZGUgYmxvYiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICJsbGVnZWl4IGxhIGNvbmZpZ3VyYWNpw7MgZGUgbCdvYmplY3RlIGRlIGJsb2IgZG9uYXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICJBY2Npw7MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idMOpbiB2YWxvcjogbm9tIFtyZWdleC1kZS12YWxvcnNdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMworbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0w6luIHRvdHMgZWxzIHZhbG9yczogY2xhdSBbcmVnZXgtZGUtdmFsb3JzXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0w6luIHZhbG9ycyBkZSByZWdleHA6IHJlZ2V4LWRlLW5vbXMgW3JlZ2V4LWRlLXZhbG9yc10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAib2J0w6luIGVsIHZhbG9yIGVzcGVjw61maWMgcGVyIGEgbCdVUkw6IHNlY2Npw7NbLnZhcmlhYmxlXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgIiIKKyJyZWVtcGxhw6dhIHRvdGVzIGxlcyB2YXJpYWJsZXMgcXVlIGNvaW5jaWRlaXhlbjogbm9tIHZhbG9yIFtyZWdleF9kZV92YWxvcnNdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAiYWZlZ2VpeCB1bmEgdmFyaWFibGUgbm92YTogbm9tIHZhbG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOAorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImVsaW1pbmEgdW5hIHZhcmlhYmxlOiBub20gW3JlZ2V4LWRlLXZhbG9yc10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImVsaW1pbmEgdG90ZXMgbGVzIGNvaW5jaWTDqG5jaWVzOiBub20gW3JlZ2V4LWRlLXZhbG9yc10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJjYW52aWEgZWwgbm9tIGRlIHNlY2Npw7M6IG5vbS1hbnRpYyBub20tbm91IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgImVsaW1pbmEgdW5hIHNlY2Npw7M6IG5vbSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDIKK21zZ2lkICJsaXN0IGFsbCIKK21zZ3N0ciAibGxpc3RhIHRvdHMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIm9icmUgdW4gZWRpdG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJ0cm9iYSBlbCBjb2xvciBjb25maWd1cmF0OiByYW51cmEgW3BlciBkZWZlY3RlXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAidHJvYmEgZWwgcGFyw6BtZXRyZSBkZSBjb2xvcjogcmFudXJhIFtzdGRvdXQtw6lzLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVGlwdXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozOAorbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiZWwgdmFsb3IgdMOpIGRvbmF0IGFxdWVzdCB0aXB1cyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDgKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgImVsIHZhbG9yIMOpcyBcInRydWVcIiBvIFwiZmFsc2VcIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiZWwgdmFsb3Igw6lzIHVuIG5vbWJyZSBkZWNpbWFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAiZWwgdmFsb3Igw6lzIC0tYm9vbCBvIC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgImVsIHZhbG9yIMOpcyB1biBjYW3DrSAobm9tIGRlIGZpdHhlciBvIGRpcmVjdG9yaSkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUyCittc2dpZCAidmFsdWUgaXMgYW4gZXhwaXJ5IGRhdGUiCittc2dzdHIgImVsIHZhbG9yIMOpcyB1bmEgZGF0YSBkZSB2ZW5jaW1lbnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUzCittc2dpZCAiT3RoZXIiCittc2dzdHIgIkFsdHJlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiYWNhYmEgZWxzIHZhbG9ycyBhbWIgdW4gb2N0ZXQgTlVMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NQorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyBlbHMgbm9tcyBkZSB2YXJpYWJsZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTYKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgInJlc3BlY3RhIGxlcyBkaXJlY3RpdmVzIGQnaW5jbHVzacOzIGVuIGNlcmNhciIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTcKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICIiCisibW9zdHJhIGwnb3JpZ2VuIGRlIGxhIGNvbmZpZ3VyYWNpw7MgKGZpdHhlciwgZW50cmFkYSBlc3TDoG5kYXJkLCBibG9iLCBsw61uaWEgIgorImQnb3JkcmVzKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTggYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQwCittc2dpZCAidmFsdWUiCittc2dzdHIgInZhbG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgInBhdHLDsyBkZSBsYSBjbGF1IG5vIHbDoGxpZDogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICIiCisicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmb3JtYXRhciBlbCB2YWxvciBwZXIgZGVmZWN0ZSBkZSBsYSBjb25maWd1cmFjacOzOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBhbmFsaXR6YXIgZWwgY29sb3Igwqslc8K7IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBlbCB2YWxvciBkZSBjb2xvciBwZXIgZGVmZWN0ZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTYgYnVpbHRpbi9jb25maWcuYzo3NDIKK21zZ2lkICJub3QgaW4gYSBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJubyDDqXMgZW4gdW4gZGlyZWN0b3JpIGdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTkKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIm5vIHMnYWRtZXQgZXNjcml1cmUgYSBzdGRpbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MDIKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiYXbDrXM6IGVsIHNvYnJlbm9tIGRlIHNlbmRtYWlsIGFtYiBjb21ldGVzIG5vIGVzdMOgIHN1cG9ydGF0OiAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyBBaXjDsiDDqXMgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgZGVsIEdpdCBkZSBsJ3VzdWFyaS5cbiIKKyJbdXNlcl1cbiIKKyIjIEFkYXB0ZXUgaSBkZXNjb21lbnRldSBsZXMgbMOtbmllcyBzZWfDvGVudHM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxMQorbXNnaWQgIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZSIKK21zZ3N0ciAibm9tw6lzIHVuIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGNhZGEgY29wIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxNgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCBub23DqXMgZXMgcG90IHVzYXIgZGlucyBkJ3VuIGRpcMOyc2l0IGdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTkKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1ibG9iIG5vbcOpcyBlcyBwb3QgdXNhciBkaW5zIGQndW4gZGlww7JzaXQgZ2l0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzOAorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiRIT01FIG5vIGVzdMOgIGVzdGFibGVydGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjU4Cittc2dpZCAiIgorIi0td29ya3RyZWUgY2Fubm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIHVubGVzcyB0aGUgY29uZmlnXG4iCisiZXh0ZW5zaW9uIHdvcmt0cmVlQ29uZmlnIGlzIGVuYWJsZWQuIFBsZWFzZSByZWFkIFwiQ09ORklHVVJBVElPTiBGSUxFXCJcbiIKKyJzZWN0aW9uIGluIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmb3IgZGV0YWlscyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4OAorbXNnaWQgIi0tZ2V0LWNvbG9yIGFuZCB2YXJpYWJsZSB0eXBlIGFyZSBpbmNvaGVyZW50IgorbXNnc3RyICItLWdldC1jb2xvciBpIGVsIHRpcHVzIGRlIHZhcmlhYmxlIHPDs24gaW5jb2hlcmVudHMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkzCittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAibm9tw6lzIHVuYSBhY2Npw7MgY2FkYSBjb3AiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IG5vbcOpcyDDqXMgYXBsaWNhYmxlIGEgLS1saXN0IG8gLS1nZXQtcmVnZXhwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxMgorbXNnaWQgIiIKKyItLXNob3ctb3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIGFuZCAtLSIKKyJsaXN0IgorbXNnc3RyICIiCisiLS1zaG93LW9yaWdpbiBub23DqXMgw6lzIGFwbGljYWJsZSBhIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgaSAtLWxpc3QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE4Cittc2dpZCAiLS1kZWZhdWx0IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCIKK21zZ3N0ciAiLS1kZWZhdWx0IG5vbcOpcyDDqXMgYXBsaWNhYmxlIGEgLS1nZXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIMKrJXPCuyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIHByb2Nlc3NhbnQgZWxzIGZpdHhlcnMgZGUgY29uZmlndXJhY2nDsyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIm5vIGhpIGhhIGNvbXBhdGliaWxpdGF0IHBlciBhIGwnZWRpY2nDsyBhIHN0ZGluIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibm8gaGkgaGEgY29tcGF0aWJpbGl0YXQgcGVyIGwnZWRpY2nDsyBkZSBibG9icyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBjcmVhciBlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKyJubyBlcyBwb2RlbiBzb2JyZWVzY3JpdXJlIG3Dumx0aXBsZXMgdmFsb3JzIGFtYiB1biBzb2wgdmFsb3JcbiIKKyIgICAgICAgVXNldSB1bmEgZXhwcmVzc2nDsyByZWd1bGFyLCAtLWFkZCBvIC0tcmVwbGFjZS1hbGwgcGVyIGEgY2FudmlhciAlcy4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODQ3IGJ1aWx0aW4vY29uZmlnLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggc2VjdGlvbjogJXMiCittc2dzdHIgIm5vIGV4aXN0ZWl4IGxhIHNlY2Npw7M6ICVzIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiaW1wcmltZWl4IGxlcyBtaWRlcyBlbiB1biBmb3JtYXQgbGxlZ2libGUgcGVscyBodW1hbnMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8b3BjaW9ucz5dIFs8Y29taXNzacOzPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxvcGNpb25zPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAiZGF2YW50IHBlciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgImxsZXVnZXIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiYW5vdGF0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAibCdldGlxdWV0YSBhbm90YWRhICVzIG5vIMOpcyBkaXNwb25pYmxlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImwnZXRpcXVldGEgYW5vdGFkYSAlcyBubyB0w6kgbm9tIGluY3J1c3RhdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJsJ2V0aXF1ZXRhIMKrJXPCuyByZWFsbWVudCDDqXMgwqslc8K7IGFxdcOtIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAiY2FwIGV0aXF1ZXRhIGNvaW5jaWRlaXggZXhhY3RhbWVudCBhbWIgwqslc8K7IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4YWN0IG1hdGNoIG9uIHJlZnMgb3IgdGFncywgc2VhcmNoaW5nIHRvIGRlc2NyaWJlXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAicydoYSBmaW5hbGl0emF0IGxhIGNlcmNhIGEgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIkNhcCBldGlxdWV0YSBhbm90YWRhIHBvdCBkZXNjcml1cmUgwqslc8K7LlxuIgorIk5vIG9ic3RhbnQsIGhpIGhhdmlhIGV0aXF1ZXRlcyBubyBhbm90YWRlczogcHJvdmV1IC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIkNhcCBldGlxdWV0YSBwb3QgZGVzY3JpdXJlIMKrJXPCuy5cbiIKKyJQcm92ZXUgLS1hbHdheXMsIG8gY3JlZXUgYWxndW5lcyBldGlxdWV0ZXMuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIlbHUgY29taXNzaW9ucyB0cmF2ZXNzYWRlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorInMnaGFuIHRyb2JhdCBtw6lzIGRlICVpIGV0aXF1ZXRlczogcydoYW4gbGxpc3RhdCBsZXMgJWkgbcOpcyByZWNlbnRzXG4iCisicydoYSByZW51bmNpYXQgbGEgY2VyY2EgYSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgImRlc2NyaXUgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgbm8gw6lzIHVuIG5vbSBkJ29iamVjdGUgdsOgbGlkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzIG5vIMOpcyB1bmEgY29taXNzacOzIG8gdW4gYmxvYiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNworbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgInRyb2JhIGwnZXRpcXVldGEgcXVlIHZpbmd1aSBkZXNwcsOpcyBkZSBsYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzgKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJlc3RyYXTDqGdpYSBkZSBjZXJjYSBkZSBkZXB1cmFjacOzIGVuIHN0ZGVyciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOQorbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICJ1c2EgcXVhbHNldm9sIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQwCittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgInVzYSBxdWFsc2V2b2wgZXRpcXVldGEsIGZpbnMgaSB0b3QgYXF1ZWxsZXMgc2Vuc2UgYW5vdGFyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQxCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAic2VtcHJlIHVzYSBlbCBmb3JtYXQgbGxhcmciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDIKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgIm5vbcOpcyBzZWd1ZWl4IGxhIHByaW1lcmEgbWFyZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgImVtZXQgbm9tw6lzIGNvaW5jaWTDqG5jaWVzIGV4YWN0ZXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDcKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICJjb25zaWRlcmEgbGVzIDxuPiBldGlxdWV0ZXMgbcOpcyByZWNlbnRzIChwZXIgZGVmZWN0ZTogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ5Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm9tw6lzIGNvbnNpZGVyYSBsZXMgZXRpcXVldGVzIHF1ZSBjb2luY2lkZWl4ZW4gYW1iIDxwYXRyw7M+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJubyBjb25zaWRlcmlzIGxlcyBldGlxdWV0ZXMgcXVlIG5vIGNvaW5jaWRlaXhlbiBhbWIgPHBhdHLDsz4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTMgYnVpbHRpbi9uYW1lLXJldi5jOjQ3MworbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAibW9zdHJhIGwnb2JqZWN0ZSBkZSBjb21pc3Npw7MgYWJyZXZpYXQgY29tIGEgc2lzdGVtYSBhbHRlcm5hdGl1IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU0IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTcKK21zZ2lkICJtYXJrIgorbXNnc3RyICJtYXJjYSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NQorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAiYW5uZXhhIDxtYXJjYT4gZW4gbCdhcmJyZSBkZSB0cmViYWxsIGJydXQgKHBlciBkZWZlY3RlOiBcIi1kaXJ0eVwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OAorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICJhbm5leGEgPG1hcmNhPiBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgYnJ1dCAocGVyIGRlZmVjdGU6IFwiLWJyb2tlblwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3NgorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcgw6lzIGluY29tcGF0aWJsZSBhbWIgLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYwNQorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCBjYXAgbm9tLCBubyBlcyBwb3QgZGVzY3JpdXJlIHJlcy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTYKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSDDqXMgaW5jb21wYXRpYmxlIGFtYiBsZXMgY29taXNzaW9ucyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1OAorbXNnaWQgIi0tYnJva2VuIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1icm9rZW4gw6lzIGluY29tcGF0aWJsZSBhbWIgbGVzIGNvbWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICLCqyVzwrs6IG5vIMOpcyBuaSBmaXR4ZXIgcmVndWxhciBuaSBlbmxsYcOnIHNpbWLDsmxpYyIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3BjacOzIG5vIHbDoGxpZGE6ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzozNTAKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTm8gw6lzIHVuIGRpcMOyc2l0IGRlIGdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJzJ2hhIGRvbmF0IHVuIG9iamVjdGUgbm8gdsOgbGlkIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJzJ2hhIGRvbmF0IG3DqXMgZGUgZG9zIGJsb2JzOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJzJ2hhIGRvbmF0IGwnb2JqZWN0ZSBubyBnZXN0aW9uYXQgwqslc8K7LiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzxvcGNpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxjYW3DrT4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgImhhIGZhbGxhdDogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgbCdlbmxsYcOnIHNpbWLDsmxpYyAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciBkJ2VubGxhw6cgc2ltYsOybGljICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IGxsZWdpciBsJ29iamVjdGUgJXMgcGVyIGwnZW5sbGHDpyBzaW1iw7JsaWMgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTMKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisiZWxzIGZvcm1hdHMgZGUgZGlmZiBjb21iaW5hdHMgKCctYycgYW5kICctLWNjJykgbm8gc8OzbiBhZG1lc29zIFxuIgorImVuIGVsIG1vZGUgZGlmZiBwZXIgZGlyZWN0b3JpcyAoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgInMnaGFuIG1vZGlmaWNhdCBhbWJkw7NzIGZpdHhlcnM6IMKrJXPCuyBpIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzYKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAicydoYSBkZWl4YXQgdW4gZml0eGVyIGRlIGwnYXJicmUgZGUgdHJlYmFsbC4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICJleGlzdGVpeCB1biBmaXR4ZXIgdGVtcG9yYWwgYSDCqyVzwrsuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ4Cittc2dpZCAieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iCittc2dzdHIgInBvZGV1IG5ldGVqYXIgbyByZWN1cGVyYXItbG9zLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5NworbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICJ1dGlsaXR6YSBgZGlmZi5ndWl0b29sYCBlbiBjb21wdGVzIGRlIGBkaWZmLnRvb2xgIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk5Cittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgImZlcyB1biBkaWZmIGRlIHRvdCBlbCBkaXJlY3RvcmkiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDEKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgIm5vIHByZWd1bnRpcyBhYmFucyBkJ2V4ZWN1dGFyIGwnZWluYSBkaWZmIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA2Cittc2dpZCAidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiCittc2dzdHIgInV0aWxpdHphIGVubGxhw6dvcyBzaW1iw7JsaWNzIGVuIG1vZGUgZGlyLWRpZmYiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDcKK21zZ2lkICJ0b29sIgorbXNnc3RyICJlaW5hIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICJ1dGlsaXR6YSBsJ2VpbmEgZGUgZGlmZiBlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTAKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgIiIKKyJpbXByaW1laXggdW5hIGxsaXN0YSBkZSB0b3RlcyBsZXMgZWluZXMgZGlmZiBxdWUgcG9kZXUgdXNhciBhbWIgYC0tdG9vbGAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAiIgorImZlcyBxdWUgJ2dpdC1kaWZmdG9vbCcgc3VydGkgcXVhbiBsJ2VpbmEgZGUgZGlmZiBpbnZvY2FkYSB0b3JuYSB1biBjb2RpIGRlICIKKyJzb3J0aWRhIGRpZmVyZW50IGRlIHplcm8iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTYKK21zZ2lkICJzcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMiCittc2dzdHIgImVzcGVjaWZpcXVldSB1biBvcmRyZSBwZXJzb25hbGl0emF0IHBlciB2ZXVyZSBkaWZmcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNworbXNnaWQgInBhc3NlZCB0byBgZGlmZmAiCittc2dzdHIgInBhc3NhLWhvIGEgwqtkaWZmwrsiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICJkaWZmdG9vbCByZXF1ZXJlaXggd29ya3RyZWUgbyAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzM5Cittc2dpZCAiLS1kaXItZGlmZiBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWRpci1kaWZmIMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDIKK21zZ2lkICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBzw7NuIG3DunR1YW1lbnQgZXhjbG9lbnRzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzUwCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICJubyBzJ2hhIHByb3BvcmNpb25hdCA8dG9vbD4gcGVyIC0tdG9vbD08dG9vbD4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTcKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgIm5vIHMnaGEgcHJvcG9yY2lvbmF0IDxjbWQ+IHBlciAtLWV4dGNtZD08Y21kPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3BjaW9ucz4gPGVudi12YXI+IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6MzcgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAidHlwZSIKK21zZ3N0ciAidGlwdXMiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MQorbXNnaWQgImRlZmF1bHQgZm9yIGdpdF9lbnZfKiguLi4pIHRvIGZhbGwgYmFjayBvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDMKK21zZ2lkICJiZSBxdWlldCBvbmx5IHVzZSBnaXRfZW52XyooKSB2YWx1ZSBhcyBleGl0IGNvZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB3aXRoIGAtLXR5cGU9Ym9vbGAsIG5vdCBgJXNgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCIKKyIlc2AiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI5Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtvcGNpb25zLWRlLWxsaXN0YS1kZS1yZXZpc2lvbnNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUyCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTIKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICJtb3N0cmEgZWwgcHJvZ3LDqXMgZGVzcHLDqXMgZGUgPG4+IG9iamVjdGVzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAic2VsZWNjaW9uYSBsYSBnZXN0acOzIGRlIGxlcyBldGlxdWV0ZXMgc2lnbmFkZXMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAic2VsZWNjaW9uYSBsYSBnZXN0acOzIGRlIGxlcyBldGlxdWV0ZXMgcXVlIGV0aXF1ZXRpbiBvYmplY3RlcyBmaWx0cmF0cyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjAKKyMsIGZ1enp5Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCittc2dzdHIgInNlbGVjY2lvbmEgbGEgZ2VzdGnDsyBkZSBsZXMgZXRpcXVldGVzIHF1ZSBldGlxdWV0aW4gb2JqZWN0ZXMgZmlsdHJhdHMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIkJvbGNhIGxlcyBtYXJxdWVzIGEgYXF1ZXN0IGZpdHhlciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjUKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIkltcG9ydGEgbGVzIG1hcnF1ZXMgZCdhcXVlc3QgZml0eGVyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorIywgZnV6enkKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJJbXBvcnRhIGxlcyBtYXJxdWVzIGQnYXF1ZXN0IGZpdHhlciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAiRmluZ2VpeCB1biBldGlxdWV0YWRvciBxdWFuIGVscyBlbiBtYW5jYSB1biBhIGxlcyBldGlxdWV0ZXMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIkltcHJpbWVpeCBsJ2FyYnJlIGNvbXBsZXQgZGUgY2FkYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc1Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIlVzYSBsYSBjYXJhY3RlcsOtc3RpY2EgZG9uZSBwZXIgYSBhY2FiYXIgZWwgY29ycmVudCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzYKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIk9tZXQgbCdlbWlzc2nDsyBkZSBkYWRlcyBkZSBibG9iIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NyBidWlsdGluL2xvZy5jOjE3MDUKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICJlc3BlY2lmaWNhY2nDsyBkZSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzgKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIkFwbGljYSBsJ2VzcGVjaWZpY2FjacOzIGRlIHJlZmVyw6huY2lhIGEgbGVzIHJlZmVyw6huY2llcyBleHBvcnRhZGVzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OQorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgImFub25pbWl0emEgbGEgc29ydGlkYSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODEKK21zZ2lkICJSZWZlcmVuY2UgcGFyZW50cyB3aGljaCBhcmUgbm90IGluIGZhc3QtZXhwb3J0IHN0cmVhbSBieSBvYmplY3QgaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTIyMAorbXNnaWQgIkNhbm5vdCBwYXNzIGJvdGggLS1pbXBvcnQtbWFya3MgYW5kIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzQKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPG9wY2lvbnM+XSBbPGRpcMOyc2l0PiBbPGVzcGVjaWZpY2FjacOzLWRlLXJlZmVyw6huY2lhPi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzUKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8b3BjaW9ucz5dIDxncnVwPiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM2Cittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3BjaW9ucz5dIFsoPGRpcMOyc2l0PiB8IDxncnVwPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjIwNAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIm9idMOpbiBkZSB0b3RzIGVscyByZW1vdHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEgYnVpbHRpbi9wdWxsLmM6MjQ4CisjLCBmdXp6eQorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvZmV0Y2giCittc2dzdHIgImVzdGFibGVpeCBsYSBmb250IHBlciBhIGdpdCBwdWxsL3N0YXR1cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MyBidWlsdGluL3B1bGwuYzoyMDcKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgImFubmV4YSBhIC5naXQvRkVUQ0hfSEVBRCBlbiBsbG9jIGRlIHNvYnJlZXNjcml1cmUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MjEwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICJjYW3DrSBhbCBxdWFsIHB1amFyIGVsIHBhcXVldCBhbCBjb3N0YXQgcmVtb3QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICJmb3LDp2EgbGEgc29icmVlc2NyaXB0dXJhIGRlIGxhIHJlZmVyw6huY2lhIGxvY2FsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ4Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICJvYnTDqW4gZGUgbcO6bHRpcGxlcyByZW1vdHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTAgYnVpbHRpbi9wdWxsLmM6MjE0Cittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAib2J0w6luIHRvdGVzIGxlcyBldGlxdWV0ZXMgaSB0b3RzIGVscyBvYmplY3RlcyBhc3NvY2lhdHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTIKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIm5vIG9idGluZ3VpcyBsZXMgZXRpcXVldGVzICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibm9tYnJlIGRlIHN1Ym3DsmR1bHMgb2J0aW5ndXRzIGVuIHBhcmFswrdsZWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgInBvZGEgbGVzIGJyYW5xdWVzIGFtYiBzZWd1aW1lbnQgcmVtb3QgcXVlIGphIG5vIGVzdGlndWluIGVuIGVsIHJlbW90IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJzb3RhIGRlbWFuZGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjAKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250cm9sYSBsJ29idGVuY2nDsyByZWN1cnNpdmEgZGUgc3VibcOyZHVscyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL3B1bGwuYzoyMjUKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAicmV0w6luIGVsIHBhcXVldCBiYWl4YXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAicGVybWV0IGwnYWN0dWFsaXR6YWNpw7MgZGUgbGEgcmVmZXLDqG5jaWEgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OSBidWlsdGluL2ZldGNoLmM6MTc1IGJ1aWx0aW4vcHVsbC5jOjIyOAorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgImFwcm9mdW5kZWl4IGxhIGhpc3TDsnJpYSBkJ3VuIGNsb24gc3VwZXJmaWNpYWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzEKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIKK21zZ3N0ciAiYXByb2Z1bmRlaXggbGEgaGlzdMOycmlhIGQndW4gY2xvbiBzdXBlcmZpY2lhbCBiYXNhdCBlbiB0ZW1wcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NyBidWlsdGluL3B1bGwuYzoyMzEKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY29udmVydGVpeCBlbiB1biBkaXDDsnNpdCBjb21wbGV0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAiYW50ZXBvc2EgYWl4w7IgYSBsYSBzb3J0aWRhIGRlIGNhbcOtIGRlbCBzdWJtw7JkdWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKyJwZXIgZGVmZWN0ZSBwZXIgYSBsJ29idGVuY2nDsyByZWN1cnNpdmEgZGUgc3VibcOyZHVscyAocHJpb3JpdGF0IG3DqXMgYmFpeGEgcXVlICIKKyJlbHMgZml0eGVycyBkZSBjb25maWd1cmFjacOzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMzQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgImFjY2VwdGEgbGVzIHJlZmVyw6huY2llcyBxdWUgYWN0dWFsaXR6aW4gLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg4IGJ1aWx0aW4vcHVsbC5jOjIzNgorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAibWFwYSBkZSByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODkgYnVpbHRpbi9wdWxsLmM6MjM3Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgIm1vc3RyYSBlbCBtYXBhIGRlIHJlZmVyw6huY2llcyBkJ29idGVuY2nDsyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5NgorbXNnaWQgInJlcG9ydCB0aGF0IHdlIGhhdmUgb25seSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoaXMgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTkKKyMsIGZ1enp5Cittc2dpZCAicnVuICdnYyAtLWF1dG8nIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJwb2RhIGVscyByZW1vdHMgZGVzcHLDqXMgZCdvYnRlbmlyLWxvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMSBidWlsdGluL3B1bGwuYzoyNDYKK21zZ2lkICJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMworIywgZnV6enkKK21zZ2lkICJ3cml0ZSB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJwb2RhIGVscyByZW1vdHMgZGVzcHLDqXMgZCdvYnRlbmlyLWxvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMworbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSByZWZlcsOobmNpYSBIRUFEIHJlbW90YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICJsYSBjb25maWd1cmFjacOzIGZldGNoLm91dHB1dCBjb250w6kgdW4gdmFsb3Igbm8gdsOgbGlkICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIm9iamVjdGUgJXMgbm8gdHJvYmF0IgorCisjOiBidWlsdGluL2ZldGNoLmM6NzU1Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbYWwgZGlhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OCBidWlsdGluL2ZldGNoLmM6Nzg0IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJbcmVidXRqYXRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgIm5vIGVzIHBvdCBvYnRlbmlyIGVuIGxhIGJyYW5jYSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlthY3R1YWxpdHphY2nDsyBkJ2V0aXF1ZXRhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4MCBidWlsdGluL2ZldGNoLmM6ODE3IGJ1aWx0aW4vZmV0Y2guYzo4MzkKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciBsYSByZWZlcsOobmNpYSBsb2NhbCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDYKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIltldGlxdWV0YSBub3ZhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwOQorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW2JyYW5jYSBub3ZhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW3JlZmVyw6huY2lhIG5vdmFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiYWN0dWFsaXR6YWNpw7MgZm9yw6dhZGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJub24tZmFzdC1mb3J3YXJkIgorbXNnc3RyICJzZW5zZSBhdmFuw6cgcsOgcGlkIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc3Cittc2dpZCAiIgorIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLFxuIgorImJ1dCB0aGF0IGNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiBUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorImZsYWcgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyBubyBoYSBlbnZpYXQgdG90cyBlbHMgb2JqZWN0ZXMgbmVjZXNzYXJpc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiIKKyJyZWJ1dGphICVzIHBlcnF1w6ggbm8gZXMgcGVybWV0IHF1ZSBsZXMgYXJyZWxzIHN1cGVyZmljaWFscyBzJ2FjdHVhbGl0emluIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAxNyBidWlsdGluL2ZldGNoLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiRGUgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisiYWxndW5lcyByZWZlcsOobmNpZXMgbG9jYWxzIG5vIHMnaGFuIHBvZ3V0IGFjdHVhbGl0emFyO1xuIgorIiBpbnRlbnRldSBleGVjdXRhciAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgcGVyIGEgZWxpbWluYXJcbiIKKyIgcXVhbHNldm9sIGJyYW5jYSBhbnRpZ2EgbyBjb25mbGljdGl2YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIGVzIHRvcm5hcsOgIHBlbmphbnQpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBzJ2hhIHRvcm5hdCBwZW5qYW50KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTgKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIltzdXByaW1pdF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU5IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNQorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKGNhcCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUydlc3TDoCByZWZ1c2FudCBvYnRlbmlyIGVuIGxhIGJyYW5jYSBhY3R1YWwgJXMgZCd1biBkaXDDsnNpdCBubyBudSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiTCdvcGNpw7Mgwqslc8K7IGFtYiB2YWxvciDCqyVzwrsgbm8gw6lzIHbDoGxpZGEgcGVyIGEgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiUydpZ25vcmEgbCdvcGNpw7Mgwqslc8K7IHBlciBhICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEyCittc2dpZCAibXVsdGlwbGUgYnJhbmNoZXMgZGV0ZWN0ZWQsIGluY29tcGF0aWJsZSB3aXRoIC0tc2V0LXVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI3CisjLCBmdXp6eQorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJsYSBicmFuY2EgZm9udCDCqyVzwrsgbm8gcydlbW1hZ2F0emVtYSBjb20gYSBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjkKKyMsIGZ1enp5Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHRhZyIKK21zZ3N0ciAiZXN0YWJsZWl4IGxhIGZvbnQgcGVyIGEgZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzMQorIywgZnV6enkKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICJ0aXB1cyBkJ29iamVjdGUgZGVzY29uZWd1dCAlZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzMKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTU5IGJ1aWx0aW4vZmV0Y2guYzoxNjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIlMnZXN0w6Agb2J0ZW5pbnQgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NjkgYnVpbHRpbi9mZXRjaC5jOjE2MjQgYnVpbHRpbi9yZW1vdGUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc3RhYmxpciDCqyVzwrsgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjg0Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJDYXAgZGlww7JzaXQgcmVtb3QgZXNwZWNpZmljYXQuIEVzcGVjaWZpcXVldSB1biBVUkwgb1xuIgorInVuIG5vbSByZW1vdCBkZWwgcXVhbCBlcyBkZXVlbiBvYnRlbmlyIGxlcyByZXZpc2lvbnMgbm92ZXMuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcyMQorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIk5lY2Vzc2l0ZXUgZXNwZWNpZmljYXIgdW4gbm9tIGQnZXRpcXVldGEuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3MQorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk5vIHMnYWRtZXQgdW5hIHByb2Z1bmRpdGF0IG5lZ2F0aXZhIGVuIC0tZGVlcGVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3MworbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZGVlcGVuIGkgLS1kZXB0aCBzw7NuIG3DunR1YW1lbnQgZXhjbG9lbnRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3OAorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICItLWRlcHRoIGkgLS11bnNoYWxsb3cgbm8gZXMgcG9kZW4gdXNhciBqdW50cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODAKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS11bnNoYWxsb3cgZW4gdW4gZGlww7JzaXQgY29tcGxldCBubyB0w6kgc2VudGl0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5NgorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCBubyBhY2NlcHRhIHVuIHBhcsOgbWV0cmUgZGUgZGlww7JzaXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzk4Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBubyB0w6kgc2VudGl0IGFtYiBlc3BlY2lmaWNhY2lvbnMgZGUgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIk5vIGV4aXN0ZWl4IHVuIHJlbW90IG5pIHVuIGdydXAgcmVtb3Q6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgxNAorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiT2J0ZW5pciB1biBncnVwIGkgZXNwZWNpZmljYXIgcmVmZXLDqG5jaWVzIG5vIHTDqSBzZW50aXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMyCittc2dpZCAiIgorIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcmVtb3RlIGNvbmZpZ3VyZWQgaW4gZXh0ZW5zaW9ucy4iCisicGFydGlhbGNsb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1pc3NhdGdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpdHhlcj5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgImVtcGxlbmEgZWwgcmVnaXN0cmUgYW1iIDxuPiBlbnRyYWRlcyBkZWwgcmVnaXN0cmUgY3VydCBjb20gYSBtw6B4aW0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgIsOgbGllcyBwZXIgLS1sb2cgKGVuIGRlc8O6cykiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MAorbXNnaWQgInRleHQiCittc2dzdHIgInRleHQiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MQorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAidXNhIDx0ZXh0PiBjb20gYSBpbmljaSBkZSBtaXNzYXRnZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgyCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgImZpdHhlciBkZWwgcXVhbCBsbGVnaXIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs8b3BjaW9ucz5dIFs8cGF0csOzPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbWlzc2nDsz5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKyJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29taXNzacOzPl1dIFstLW5vLWNvbnRhaW5zIFs8Y29taXNzacOzPl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgIiIKKyJwb3NhIGVscyBtYXJjYWRvcnMgZGUgcG9zaWNpw7MgZGUgZm9ybWEgYWRlcXVhZGEgcGVyIGEgaW50w6hycHJldHMgZCdvcmRyZXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgInBvc2EgZWxzIG1hcmNhZG9ycyBkZSBwb3NpY2nDsyBlbnRyZSBjb21ldGVzIGFkZXF1YWRlcyBwZXIgYWwgcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICJwb3NhIGVscyBtYXJjYWRvcnMgZGUgcG9zaWNpw7MgZW50cmUgY29tZXRlcyBhZGVxdWFkZXMgcGVyIGFsIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICJwb3NhIGVscyBtYXJjYWRvcnMgZGUgcG9zaWNpw7MgZW50cmUgY29tZXRlcyBhZGVxdWFkZXMgcGVyIGFsIFRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIDxuPiByZWZlcsOobmNpZXMgY29pbmNpZGVudHMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzkgYnVpbHRpbi90YWcuYzo0MzkKK21zZ2lkICJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiCittc2dzdHIgInJlc3BlY3RhIGVscyBjb2xvcnMgZGVsIGZvcm1hdCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgcmVmZXLDqG5jaWVzIHF1ZSBhc3NlbnlhbGluIGwnb2JqZWN0ZSBkb25hdCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIHJlZmVyw6huY2llcyBxdWUgcydoYW4gZnVzaW9uYXQiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgcmVmZXLDqG5jaWVzIHF1ZSBubyBzJ2hhbiBmdXNpb25hdCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIHJlZmVyw6huY2llcyBxdWUgY29udGluZ3VpbiBsYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDcKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyByZWZlcsOobmNpZXMgcXVlIG5vIGNvbnRpbmd1aW4gbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL2ZzY2suYzo2OCBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9mc2NrLmM6MTQ4Cittc2dpZCAidW5rbm93biIKK21zZ3N0ciAiZGVzY29uZWd1dCIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgImVycm9yIGVuICVzICVzOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZyBpbiAlcyAlczogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MTQzIGJ1aWx0aW4vZnNjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gbGluayBmcm9tICU3cyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICJ0aXB1cyBkJ29iamVjdGUgaW5jb3JyZWN0ZSBlbiBsJ2VubGxhw6ciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAibWFuY2EgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAiaW5hYmFzdGFibGUgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgIlMnZXN0YW4gYWN0dWFsaXR6YW50ICVzLi4lc1xuIgorCisjOiBidWlsdGluL2ZzY2suYzozMzkKKyMsIGZ1enp5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGZpdHhlciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmluYWxpdHphciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IGxhIGNvbm5lY3Rpdml0YXQgKCVkIG9iamVjdGVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICJTJ2VzdMOgIGNvbXByb3ZhbnQgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAiZW5sbGHDp29zIHRyZW5jYXRzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAiYXJyZWwgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVzOiBvYmplY3RlIGNvcnJ1cHRlIG8gbm8gdHJvYmF0IgorCisjOiBidWlsdGluL2ZzY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIgJXM6IGVudHJhZGEgZGUgcmVmZXLDqG5jaWEgbm8gdsOgbGlkYSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZWZsb2cgJXMtPiVzIgorbXNnc3RyICJTJ2VzdMOgIGNvbXByb3ZhbnQgZWwgY2FudmkgZGUgbm9tIGRlIMKrJXPCuyBhIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2ZzY2suYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIgorbXNnc3RyICIlczogcHVudGVyIHNoYTEgbm8gdsOgbGlkOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgIiVzOiBubyDDqXMgdW5hIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgImF2w61zOiBubyBoaSBoYSByZWZlcsOobmNpZXMgcGVyIGRlZmVjdGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZzogJXMiCittc2dzdHIgIiVzOiBvYmplY3RlIGNvcnJ1cHRlIG8gbm8gdHJvYmF0OiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY291bGQgbm90IGJlIHBhcnNlZDogJXMiCittc2dzdHIgIiVzOiBubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ29iamVjdGU6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgImZpdHhlciBzaGExIG1hbG3DqHM6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICJTJ2VzdMOgIGNvbXByb3ZhbnQgZWwgZGlyZWN0b3JpIGQnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9mc2NrLmM6Njc1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yaWVzIgorbXNnc3RyICJTJ2VzdGFuIGNvbXByb3ZhbnQgZWxzIGRpcmVjdG9yaXMgZCdvYmplY3RlIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgbGluayIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IGwnZW5sbGHDpyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICIlcyBubyB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiCittc2dzdHIgIiVzIC0gbm8gw6lzIHVuYSBjb3NhIHF1ZSBwdWd1ZW0gZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aWNlOiAlcyBwb2ludHMgdG8gYW4gdW5ib3JuIGJyYW5jaCAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyNAorbXNnaWQgIkNoZWNraW5nIGNhY2hlIHRyZWUiCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBsJ2FyYnJlIGRlIGxhIG1lbcOycmlhIGNhdSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBsJ2FyYnJlIHByaW5jaXBhbCBkZSBtZW3DsnJpYSBjYXUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzY5Cittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgWzxvcGNpb25zPl0gWzxvYmplY3RlPi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NQorbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhIGVscyBvYmplY3RlcyBwZW5qYW50cyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc3Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgImluZm9ybWEgZGUgbGVzIGV0aXF1ZXRlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc4Cittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgImluZm9ybWEgZGVscyBub2RlcyBkJ2FycmVsIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiZmVzIGVscyBvYmplY3RlcyBkJ8OtbmRleCBub2RlcyBkZSBjYXAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MAorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiZmVzIHF1ZSBlbHMgcmVnaXN0cmVzIGRlIHJlZmVyw6huY2llcyBzaWd1aW4gbm9kZXMgZGUgY2FwIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJ0YW1iw6kgY29uc2lkZXJhIGVscyBwYXF1ZXRzIGkgZWxzIG9iamVjdGVzIGFsdGVybmF0aXVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiY29tcHJvdmEgbm9tw6lzIGxhIGNvbm5lY3Rpdml0YXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MworbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiaGFiaWxpdGEgbGEgY29tcHJvdmFjacOzIG3DqXMgZXN0cmljdGEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICJlc2NyaXUgb2JqZWN0ZXMgcGVuamFudHMgYSAuZ2l0L2xvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NiBidWlsdGluL3BydW5lLmM6MTMyCittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAibW9zdHJhIGVsIHByb2dyw6lzIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJtb3N0cmEgZWxzIG5vbXMgZGV0YWxsYXRzIGRlbHMgb2JqZWN0ZXMgYWJhc3RhYmxlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6ODQ2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNQorbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIlMnZXN0YW4gY29tcHJvdmFudCBlbHMgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBtaXNzaW5nIgorbXNnc3RyICJtb3N0cmEgbGEgbWlkYSBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg4NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICJzJ2VzcGVyYXZhIHNoYWxsb3cvdW5zaGFsbG93LCBzJ2hhIHJlYnV0ICVzIgorCisjOiBidWlsdGluL2djLmM6MzUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmc3RhdCAlczogJXMiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmVyIGZzdGF0ICVzOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICclcycgdmFsdWUgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBtb3VyZSDCqyVzwrsgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGZlciBzdGF0IGVuIMKrJXPCuyIKKworIzogYnVpbHRpbi9nYy5jOjQ4NCBidWlsdGluL25vdGVzLmM6MjQwIGJ1aWx0aW4vdGFnLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgwqslc8K7IgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiTCfDumx0aW1hIGV4ZWN1Y2nDsyBkZSBnYyBoYSBpbmZvcm1hdCBlbCBzZWfDvGVudC4gQ29ycmVnaXVcbiIKKyJsYSBjYXVzYSBwcmltb3JkaWFsIGkgZWxpbWluZXUgJXMuXG4iCisiTm8gZXMgcmVhbGl0emFyw6AgbGEgbmV0ZWphIGF1dG9tw6B0aWNhIGZpbnMgcXVlIHMnZWxpbWluaSBlbCBmaXR4ZXIuXG4iCisiXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAicG9kYSBvYmplY3RlcyBzZW5zZSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9nYy5jOjU0MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAic2lndWVzIG3DqXMgZXhoYXVzdGl1IChlbCB0ZW1wcyBkJ2V4ZWN1Y2nDsyBhdWdtZW50YSkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJoYWJpbGl0YSBlbCBtb2RlIGRlIHJlY29sbGlkYSBkJ2VzY29tYnJhcmllcyBhdXRvbcOgdGljYSIKKworIzogYnVpbHRpbi9nYy5jOjU0NQorbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICJmb3LDp2EgbCdleGVjdWNpw7MgZGUgZ2MgZW5jYXJhIHF1ZSBoaSBwdWd1aSBoYXZlciB1biBhbHRyZSBnYyBleGVjdXRhbnQiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDgKK21zZ2lkICJyZXBhY2sgYWxsIG90aGVyIHBhY2tzIGV4Y2VwdCB0aGUgbGFyZ2VzdCBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBnYy5sb2dleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIHZhbG9yIGdjLmxvZ2V4cGlyeSAlcyIKKworIzogYnVpbHRpbi9nYy5jOjU3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgdmFsb3IgZ2MubG9nZXhwaXJ5ICVzIgorCisjOiBidWlsdGluL2djLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisiUydlc3TDoCBlbXBhcXVldGFudCBlbCBkaXDDsnNpdCBhdXRvbcOgdGljYW1lbnQgZW4gZWwgcmVyZWZvbnMgcGVyIGEgdW4gIgorInJlbmRpbWVudCDDsnB0aW0uXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisiUydlc3TDoCBlbXBhcXVldGFudCBhdXRvbcOgdGljYW1lbnQgZWwgZGlww7JzaXQgcGVyIGEgdW4gcmVuZGltZW50IMOycHRpbS5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICJWZWdldSDCq2dpdCBoZWxwIGdjwrsgcGVyIGEgbmV0ZWphIG1hbnVhbC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2MgaXMgYWxyZWFkeSBydW5uaW5nIG9uIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2UgaWYgbm90KSIKK21zZ3N0ciAiIgorImdjIGphIHMnZXN0w6AgZXhlY3V0YW50IGVuIGxhIG3DoHF1aW5hIMKrJXPCuyBwaWQgJTxQUkl1TUFYPiAodXNldSAtLWZvcmNlIHNpIG5vKSIKKworIzogYnVpbHRpbi9nYy5jOjY5NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorIkhpIGhhIG1hc3NhIG9iamVjdGVzIHNvbHRzIGluYWJhc3RhYmxlczsgZXhlY3V0ZXUgJ2dpdCBwcnVuZScgcGVyIGEgZWxpbWluYXItIgorImxvcy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI5Cittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPG9wY2lvbnM+XSBbLWVdIDxwYXRyw7M+IFs8cmV2aXNpw7M+Li4uXSBbWy0tXSA8Y2Ftw60+Li4uXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcDogcydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjcmVhciBmaWw6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgInMnaGEgZXNwZWNpZmljYXQgdW4gbm9tYnJlIGRlIGZpbHMgbm8gdsOgbGlkICglZCkgcGVyIGEgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorIy4gdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorIy4gZ3JlcC50aHJlYWRzCisjLgorIzogYnVpbHRpbi9ncmVwLmM6Mjg3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzQgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyNworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgIm5vIGhpIGhhIHN1cG9ydCBkZSBmaWxzLCBzJ2VzdMOgIGlnbm9yYW50ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0NjcgYnVpbHRpbi9ncmVwLmM6NTkyIGJ1aWx0aW4vZ3JlcC5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGwnYXJicmUgKCVzKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgZ3JlcCBkZXMgZCd1biBvYmplY3RlIGRlIHRpcHVzICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAibCdvcGNpw7MgwqslY8K7IGVzcGVyYSB1biB2YWxvciBudW3DqHJpYyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE1Cittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiY2VyY2EgZW4gbCfDrW5kZXggZW4gbGxvYyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNworbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICJjZXJjYSBlbiBjb250aW5ndXRzIG5vIGdlc3Rpb25hdHMgcGVyIGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE5Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJjZXJjYSB0YW50IGVuIGZpdHhlcnMgc2VndWl0cyBjb20gZW4gbm8gc2VndWl0cyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIxCittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICJpZ25vcmEgZWxzIGZpdHhlcnMgZXNwZWNpZmljYXRzIG1pdGphbsOnYW50ICcuZ2l0aWdub3JlJyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIzCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICJjZXJjYSByZWN1cnNpdmFtZW50IGEgY2FkYSBzdWJtw7JkdWwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNgorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJtb3N0cmEgbGVzIGzDrW5pZXMgbm8gY29pbmNpZGVudHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOAorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgImNvaW5jaWTDqG5jaWEgaW5zZW5zaWJsZSBhIG1hasO6c2N1bGEgaSBtaW7DunNjdWxhIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAiY29pbmNpZGVpeCBhbWIgZWxzIHBhdHJvbnMgbm9tw6lzIGFscyBsw61taXRzIGRlIHBhcmF1bGEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMgorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgInByb2Nlc3NhIGVscyBmaXR4ZXJzIGJpbmFyaXMgY29tIGEgdGV4dCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM0Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJubyBjb2luY2lkZWl4aXMgYW1iIGVscyBwYXRyb25zIGVuIGVscyBmaXR4ZXJzIGJpbmFyaXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAicHJvY2Vzc2EgZWxzIGZpdHhlcnMgYmluYXJpcyBhbWIgZmlsdHJlcyBkZSB0ZXh0Y29udiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiY2VyY2EgYWxzIHN1YmRpcmVjdG9yaWVzIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0MQorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAiZGVzY2VuZGVpeCBjb20gYSBtw6B4aW0gPHByb2Z1bmRpdGF0PiBuaXZlbGxzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDUKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXNhIGxlcyBleHByZXNzaW9ucyByZWd1bGFycyBQT1NJWCBhbXBsaWFkZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0OAorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAidXNhIGxlcyBleHByZXNzaW9ucyByZWd1bGFycyBQT1NJWCBiw6BzaXF1ZXMgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUxCittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgImludGVycHJldGEgZWxzIHBhdHJvbnMgY29tIGEgY2FkZW5lcyBmaXhlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU0Cittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1c2EgbGVzIGV4cHJlc3Npb25zIHJlZ3VsYXJzIGNvbXBhdGlibGVzIGFtYiBQZXJsIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAibW9zdHJhIGVscyBuw7ptZXJvcyBkZSBsw61uaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OAorbXNnaWQgInNob3cgY29sdW1uIG51bWJlciBvZiBmaXJzdCBtYXRjaCIKK21zZ3N0ciAibW9zdHJhIGVsIG5vbWJyZSBkZSBjb2x1bW5hIGRlIGxhIHByaW1lcmEgY29pbmNpZMOobmNpYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIm5vIG1vc3RyaXMgZWxzIG5vbXMgZGUgZml0eGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjAKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAibW9zdHJhIGVscyBub21zIGRlIGZpdHhlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAibW9zdHJhIGVscyBub21zIGRlIGZpdHhlciByZWxhdGl1cyBhbCBkaXJlY3Rvcmkgc3VwZXJpb3IiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NAorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyBlbHMgbm9tcyBkZSBmaXR4ZXIgZW4gbGxvYyBkZSBsZXMgbMOtbmllcyBjb2luY2lkZW50cyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgInNpbsOybmltIGRlIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjkKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIG5vbXMgZGVscyBmaXR4ZXJzIHNlbnNlIGNvaW5jaWTDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MQorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgImltcHJpbWVpeCBOVUwgZGVzcHLDqXMgZGVscyBub21zIGRlIGZpdHhlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyBsZXMgcGFydHMgZGUgY29pbmNpZGVudHMgZGUgbGEgbMOtbmlhIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzYKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJtb3N0cmEgZWwgbm9tYnJlIGRlIGNvaW5jaWTDqG5jaWVzIGVuIGxsb2MgZGUgbGVzIGzDrW5pZXMgY29pbmNpZGVudHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICJyZXNzYWx0YSBsZXMgY29pbmNpZMOobmNpZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICJpbXByaW1laXggdW5hIGzDrW5pYSBidWlkYSBlbnRyZSBjb2luY2lkw6huY2llcyBkZSBmaXR4ZXJzIGRpc3RpbnRzIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODEKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisibW9zdHJhIGVsIG5vbSBkZSBmaXR4ZXIgbm9tw6lzIHVuYSB2ZWdhZGEgYSBkYWx0IGRlIGxlcyBjb2luY2lkw6huY2llcyBkZWwgIgorIm1hdGVpeCBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJtb3N0cmEgPG4+IGzDrW5pZXMgZGUgY29udGV4dCBhYmFucyBpIGRlc3Byw6lzIGQndW5hIGNvaW5jaWTDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYSA8bj4gbMOtbmllcyBkZSBjb250ZXh0IGFiYW5zIGQndW5hIGNvaW5jaWTDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4OQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAibW9zdHJhIDxuPiBsw61uaWVzIGRlIGNvbnRleHQgZGVzcHLDqXMgZCd1bmEgY29pbmNpZMOobmNpYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkxCittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAidXNhIDxuPiBmaWxzIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgImRyZWNlcmEgcGVyIC1DIE5VTSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk1Cittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAibW9zdHJhIHVuYSBsw61uaWEgYW1iIGVsIG5vbSBkZSBmdW5jacOzIGFiYW5zIGRlIGxlcyBjb2luY2lkw6huY2llcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgIm1vc3RyYSBsYSBmdW5jacOzIGNpcmN1bWRhbnQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICJsbGVnZWl4IGVscyBwYXRyb25zIGRlcyBkJ3VuIGZpdHhlciIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAyCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJjb2luY2lkZWl4IGFtYiA8cGF0csOzPiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA0Cittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiY29tYmluYSBlbHMgcGF0cm9ucyBlc3BlY2lmaWNhdHMgYW1iIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiaW5kaWNhIGNvaW5jaWTDqG5jaWEgYW1iIGVzdGF0IGRlIHNvcnRpZGEgc2Vuc2Ugc29ydGlkYSB0ZXh0dWFsIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTgKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICIiCisibW9zdHJhIG5vbcOpcyBsZXMgY29pbmNpZMOobmNpZXMgZGVscyBmaXR4ZXJzIHF1ZSBjb2luY2lkZWl4aW4gYW1iIHRvdHMgZWxzICIKKyJwYXRyb25zIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjAKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAibW9zdHJhIGwnYXJicmUgZCdhbsOgbGlzaSBkZSBsJ2V4cHJlc3Npw7MgZ3JlcCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAicGFnZXIiCittc2dzdHIgInBhZ2luYWRvciIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIm1vc3RyYSBlbHMgZml0eGVycyBjb2luY2lkZW50cyBlbiBlbCBwYWdpbmFkb3IiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyOAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAicGVybWV0IGxhIGludm9jYWNpw7MgZGUgZ3JlcCgxKSAoaWdub3JhdCBwZXIgYXF1ZXN0YSBjb21waWxhY2nDsykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5MgorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIm5vIHMnaGEgZG9uYXQgY2FwIHBhdHLDsyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyOAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICItLW5vLWluZGV4IG8gLS11bnRyYWNrZWQgbm8gZXMgcG90IHVzYXIgYW1iIHJldmlzaW9ucyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgbGEgcmV2aXNpw7M6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3Cittc2dpZCAiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAiY29tYmluYWNpw7MgZCdvcGNpb25zIG5vIHbDoGxpZGEsIHMnZXN0w6AgaWdub3JhbnQgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJubyBoaSBoYSBzdXBvcnQgZGUgZmlscywgcydlc3TDoCBpZ25vcmFudCAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNzMgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzMSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAicydoYSBlc3BlY2lmaWNhdCB1biBub21icmUgZGUgZmlscyBubyB2w6BsaWQgKCVkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA5NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG5vbcOpcyBmdW5jaW9uYSBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMTkKK21zZ2lkICJvcHRpb24gbm90IHN1cHBvcnRlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorbXNnc3RyICJvcGNpw7Mgbm8gYWRtZXNhIGFtYiAtLXJlY3Vyc2Utc3VibW9kdWxlcy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjUKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tY2FjaGVkIG8gLS11bnRyYWNrZWQgbm8gZXMgcG90IHVzYXIgYW1iIC0tbm8taW5kZXguIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMxCisjLCBmdXp6eQorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIgorbXNnc3RyICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBubyBlcyBwb3QgdXNhciBwZXIgYWxzIGNvbnRpbmd1dHMgc2VndWl0cy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzkKKyMsIGZ1enp5Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICJzJ2hhbiBkb25hdCBhbWJkw7NzIC0tY2FjaGVzIGkgYXJicmVzLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1Cittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+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+IgorbXNnc3RyICJnaXQgbXYgWzxvcGNpb25zPl0gPGZvbnQ+Li4uIDxkZXN0w60+IgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICJFbCBkaXJlY3RvcmkgJXMgw6lzIGVuIGwnw61uZGV4IGkgbm8gaGkgaGEgY2FwIHN1Ym3DsmR1bD8iCisKKyM6IGJ1aWx0aW4vbXYuYzo4NQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiRmV1IMKrc3RhZ2XCuyBkZWxzIHZvc3RyZXMgY2FudmlzIGEgLmdpdG1vZHVsZXMgbyBmZXUgwqtzdGFzaMK7IGRlbHMgbWF0ZWl4b3MgIgorInBlciBhIHByb2NlZGlyIgorCisjOiBidWlsdGluL212LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgaW4gaW5kZXgiCittc2dzdHIgIiUuKnMgw6lzIGVuIGwnw61uZGV4IgorCisjOiBidWlsdGluL212LmM6MTI1Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJmb3LDp2EgZWwgbW92aW1lbnQgLyBjYW52aSBkZSBub20gZW5jYXJhIHF1ZSBlbCBkZXN0w60gZXhpc3RlaXhpIgorCisjOiBidWlsdGluL212LmM6MTI3Cittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgIm9tZXQgZWxzIGVycm9ycyBkZSBtb3ZpbWVudCAvIGNhbnZpIGRlIG5vbSIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiZWwgZGVzdMOtIMKrJXPCuyBubyDDqXMgdW4gZGlyZWN0b3JpIgorCisjOiBidWlsdGluL212LmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IGVsIGNhbnZpIGRlIG5vbSBkZSDCqyVzwrsgYSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgImZvbnQgaW5jb3JyZWN0YSIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIm5vIGVzIHBvdCBtb3VyZSB1biBkaXJlY3RvcmkgYSBkaW5zIGQnZWxsIG1hdGVpeCIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBtb3VyZSB1biBkaXJlY3Rvcmkgc29icmUgdW4gZml0eGVyIgorCisjOiBidWlsdGluL212LmM6MTk5Cittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAiZWwgZGlyZWN0b3JpIGZvbnQgZXN0w6AgYnVpdCIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIm5vIGVzdMOgIHNvdGEgY29udHJvbCBkZSB2ZXJzaW9ucyIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiZWwgZGVzdMOtIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgInMnZXN0w6Agc29icmVlc2NyaXZpbnQgwqslc8K7IgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiTm8gZXMgcG90IHNvYnJlZXNjcml1cmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDEKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIm3Dumx0aXBsZXMgZm9udHMgcGVyIGFsIG1hdGVpeCBkZXN0w60iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImVsIGRpcmVjdG9yaSBkZXN0w60gbm8gZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCBvcmlnZW49JXMsIGRlc3TDrT0lcyIKKworIzogYnVpbHRpbi9tdi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICJTJ2VzdMOgIGNhbnZpYW50IGVsIG5vbSBkZSAlcyBhICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzcgYnVpbHRpbi9yZW1vdGUuYzo3MTYgYnVpbHRpbi9yZXBhY2suYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImVsIGNhbnZpIGRlbCBub20gZGUgwqslc8K7IGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwMworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3BjaW9ucz5dIDxjb21pc3Npw7M+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA0Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcGNpb25zPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3BjaW9ucz5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjIKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgZWxzIG5vbXMgKHNlbnNlIFNIQS0xKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MworbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAibm9tw6lzIHVzYSBsZXMgZXRpcXVldGVzIHBlciBhIGFub21lbmFyIGxlcyBjb21pc3Npb25zIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY1Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIm5vbcOpcyB1c2EgbGVzIHJlZmVyw6huY2llcyBxdWUgY29pbmNpZGVpeGluIGFtYiA8cGF0csOzPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NworbXNnaWQgImlnbm9yZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiaWdub3JhIGxlcyByZWZlcsOobmNpZXMgcXVlIGNvaW5jaWRlaXhpbiBhbWIgPHBhdHLDsz4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjkKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICJsbGlzdGEgdG90ZXMgbGVzIGNvbWlzc2lvbnMgYWJhc3RhYmxlcyBkZSB0b3RlcyBsZXMgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDcwCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJsbGVnZWl4IGRlIHN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDcxCittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJwZXJtZXQgaW1wcmltaXIgZWxzIG5vbXMgYHVuZGVmaW5lZGAgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3NworbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICJkZXNyZWZlcmVuY2lhIGxlcyBldGlxdWV0ZXMgZW4gbCdlbnRyYWRhICjDunMgaW50ZXJuKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gW2xsaXN0YSBbPG9iamVjdGU+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSAiCisiPG1pc3NhdGdlPiB8IC1GIDxmaXR4ZXI+IHwgKC1jIHwgLUMpIDxvYmplY3RlPl0gWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBjb3B5IFstZl0gPGQnb2JqZWN0ZT4gPGEtb2JqZWN0ZT4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tICIKKyI8bWlzc2F0Z2U+IHwgLUYgPGZpdHhlcj4gfCAoLWMgfCAtQykgPG9iamVjdGU+XSBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBzaG93IFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8ZXN0cmF0w6hnaWE+XSAiCisiPHJlZmVyw6huY2lhLWRlLW5vdGVzPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIHJlbW92ZSBbPG9iamVjdGU+Li4uXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uXSBbLXZdIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIHBydW5lIFstbl0gWy12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGxpc3RhIFs8b2JqZWN0ZT5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYWRkIFs8b3BjaW9ucz5dIFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgY29weSBbPG9wY2lvbnM+XSA8ZCdvYmplY3RlPiA8YS1vYmplY3RlPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxkJ29iamVjdGU+IDxhLW9iamVjdGU+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs8b3BjaW9ucz5dIFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs8b3BjaW9ucz5dIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiRXNjcml2aXUvZWRpdGV1IGxlcyBub3RlcyBwZXIgbCdvYmplY3RlIHNlZ8O8ZW50OiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBpbmljaWFyICdzaG93JyBwZXIgYSBsJ29iamVjdGUgwqslc8K7IgorCisjOiBidWlsdGluL25vdGVzLmM6MTU0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgbGEgc29ydGlkYSBkZSAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGZpbmFsaXR6YXIgJ3Nob3cnIHBlciBhIGwnb2JqZWN0ZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTcKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgIiIKKyJlc3BlY2lmaXF1ZXUgZWwgY29udGluZ3V0IGRlIGxhIG5vdGEgZmVudCBzZXJ2aXIgbCdvcGNpw7MgLW0gbyBsJ29wY2nDsyAtRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ29iamVjdGUgZGUgbm90YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAicydoYW4gZGVpeGF0IGVscyBjb250aW5ndXRzIGRlIGxhIG5vdGEgZW4gJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyIG8gbGxlZ2lyIMKrJXPCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiByZXNvbGRyZSDCqyVzwrsgY29tIGEgcmVmZXLDqG5jaWEgdsOgbGlkYS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBsJ29iamVjdGUgwqslc8K7LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIm5vIGVzIHBvZGVuIGxsZWdpciBsZXMgZGFkZXMgZGUgbm9kZSBkZSBsJ29iamVjdGUgbm8gZGUgYmxvYiDCqyVzwrsuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAibMOtbmlhIGQnZW50cmFkYSBtYWwgZm9ybWFkYTogwqslc8K7LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjb3BpYXIgbGVzIG5vdGVzIGRlIMKrJXPCuyBhIMKrJXPCuyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAicydlc3TDoCByZWZ1c2FudCAlcyBsZXMgbm90ZXMgZW4gJXMgKGZvcmEgZGUgcmVmcy9ub3Rlcy8pIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAibWFzc2EgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODkgYnVpbHRpbi9ub3Rlcy5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJubyBzJ2hhIHRyb2JhdCBjYXAgbm90YSBwZXIgYSBsJ29iamVjdGUgJXMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEwIGJ1aWx0aW4vbm90ZXMuYzo1NzYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICJhbm90YSBlbHMgY29udGluZ3V0cyBjb20gYSBjYWRlbmEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTMgYnVpbHRpbi9ub3Rlcy5jOjU3OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJhbm90YSBlbHMgY29udGluZ3V0cyBlbiB1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTYgYnVpbHRpbi9ub3Rlcy5jOjU4MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAicmV1c2EgaSBlZGl0YSBsJ29iamVjdGUgZGUgbm90YSBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxOSBidWlsdGluL25vdGVzLmM6NTg1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJyZXVzYSBsJ29iamVjdGUgZGUgbm90YSBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICJwZXJtZXQgbCdlbW1hZ2F0emVtYXRnZSBkJ3VuYSBub3RhIGJ1aWRhIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICJyZWVtcGxhw6dhIGxlcyBub3RlcyBleGlzdGVudHMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJObyBlcyBwb2RlbiBhZmVnaXIgbGVzIG5vdGVzLiBTJ2hhbiB0cm9iYXQgbm90ZXMgZXhpc3RlbnRzIGRlIGwnb2JqZWN0ZSAlcy4gIgorIlVzZXUgJy1mJyBwZXIgYSBzb2JyZWVzY3JpdXJlIGxlcyBub3RlcyBleGlzdGVudHMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlMnZXN0YW4gc29icmVlc2NyaXZpbnQgbGVzIG5vdGVzIGV4aXN0ZW50cyBkZSBsJ29iamVjdGUgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3NSBidWlsdGluL25vdGVzLmM6NjM3IGJ1aWx0aW4vbm90ZXMuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlMnZXN0w6AgZWxpbWluYW50IGxhIG5vdGEgZGUgbCdvYmplY3RlICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTcKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgb2JqZWN0ZXMgZGVzIGRlIHN0ZGluIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk5Cittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgIiIKKyJjYXJyZWdhIGxhIGNvbmZpZ3VyYWNpw7MgZGUgcmVlc2NyaXB0dXJhIHBlciBhIDxvcmRyZT4gKGltcGxpY2EgLS1zdGRpbikiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTcKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgImhpIGhhIG1hc3NhIHBvY3MgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiTm8gZXMgcG9kZW4gY29waWFyIGxlcyBub3Rlcy4gUydoYW4gdHJvYmF0IG5vdGVzIGV4aXN0ZW50cyBkZSBsJ29iamVjdGUgJXMuICIKKyJVc2V1ICctZicgcGVyIGEgc29icmVlc2NyaXVyZSBsZXMgbm90ZXMgZXhpc3RlbnRzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAibWFucXVlbiBub3RlcyBhIGwnb2JqZWN0ZSBmb250ICVzLiBObyBlcyBwb3QgY29waWFyLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiRXMgZGVzYWNvbnNlbGxlbiBsZXMgb3BjaW9ucyAtbS8tRi8tYy8tQyBlbiBmYXZvciBkZSBsYSBzdWJvcmRyZSAnZWRpdCcuXG4iCisiVXNldSDCq2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUPCuyBlbiBsbG9jIGQnYWl4w7IuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHN1cHJpbWlyIGxhIHJlZmVyw6huY2lhIE5PVEVTX01FUkdFX1BBUlRJQUwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gc3VwcmltaXIgbGEgcmVmZXLDqG5jaWEgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAiIgorInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZWxpbWluYXIgbCdhcmJyZSBkZSB0cmViYWxsIGRlICdnaXQgbm90ZXMgbWVyZ2UnIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIyCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGxhIHJlZmVyw6huY2lhIE5PVEVTX01FUkdFX1BBUlRJQUwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0cm9iYXIgY2FwIGNvbWlzc2nDsyBkZSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY29taXNzacOzIGRlIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzM5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHJlc29sZHJlIE5PVEVTX01FUkdFX1JFRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0MgorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBmaW5hbGl0emFyIGxhIGZ1c2nDsyBkZSBub3RlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIgorbXNnc3RyICJlc3RyYXTDqGdpYSBkZSBmdXNpw7MgZGUgbm90ZXMgZGVzY29uZWd1ZGEgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZ2VuZXJhbHMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGRlIGZ1c2nDsyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyJyZXNvbCBlbHMgY29uZmxpY3RlcyBkZSBub3RhIHVzYW50IGwnZXN0cmF0w6hnaWEgZG9uYWRhIChtYW51YWwvb3Vycy90aGVpcnMvIgorInVuaW9uL2NhdF9zb3J0X3VuaXEpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiUydlc3RhbiBjb21ldGVudCBsZXMgbm90ZXMgc2Vuc2UgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJmaW5hbGl0emEgbGEgZnVzacOzIGRlIG5vdGVzIGNvbWV0ZW50IGxlcyBub3RlcyBzZW5zZSBmdXNpb25hciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIlMnZXN0w6AgYXZvcnRhbnQgbGEgcmVzb2x1Y2nDsyBkZSBmdXNpw7MgZGUgbm90ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiYXZvcnRhIGxhIGZ1c2nDsyBkZSBub3RlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwNworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAibm8gZXMgcG90IGNvbWJpbmFyIC0tY29tbWl0LCAtLWFib3J0IGkgLXMvLS1zdHJhdGVneSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgxMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAiY2FsIGVzcGVjaWZpY2FyIHVuYSByZWZlcsOobmNpYSBkZSBub3RlcyBhIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL25vdGVzLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgIi1zLy0tc3RyYXRlZ3kgZGVzY29uZWd1ZGE6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICJ1bmEgZnVzacOzIGRlIG5vdGVzIGEgJXMgamEgZXN0w6AgZW4gY3VycyBhICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgIiIKKyJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVtbWFnYXR6ZW1hciBsJ2VubGxhw6cgYSBsYSByZWZlcsOobmNpYSBkZSBub3RlcyAiCisiYWN0dWFsICglcykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIkxhIGZ1c2nDsyBkZSBub3RlcyBhdXRvbcOgdGljYSBoYSBmYWxsYXQuIEFycmVnbGV1IGVscyBjb25mbGljdGVzIGVuICVzIGkgIgorImNvbWV0ZXUgZWwgcmVzdWx0YXQgYW1iICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvIGF2b3J0ZXUgbGEgZnVzacOzIGFtYiAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0Jy5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NyBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiByZXNvbGRyZSDCqyVzwrsgY29tIGEgcmVmZXLDqG5jaWEgdsOgbGlkYS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIkwnb2JqZWN0ZSAlcyBubyB0w6kgY2FwIG5vdGFcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAibCdpbnRlbnQgZCdlbGltaW5hciB1bmEgbm90YSBubyBleGlzdGVudCBubyDDqXMgdW4gZXJyb3IiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgbm9tcyBkJ29iamVjdGUgZGVzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0IGJ1aWx0aW4vcHJ1bmUuYzoxMzAgYnVpbHRpbi93b3JrdHJlZS5jOjE2NAorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAibm8gZWxpbWluaXMsIG5vbcOpcyBtb3N0cmEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICJpbmZvcm1hIGRlIG5vdGVzIHBvZGFkZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgInJlZmVyw6huY2lhIGRlIG5vdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgInVzYSBsZXMgbm90ZXMgZGUgPHJlZmVyw6huY2lhLWRlLW5vdGVzPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzQgYnVpbHRpbi9zdGFzaC5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAic3Vib3JkcmUgZGVzY29uZWd1ZGE6ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3BjaW9ucz4uLi5dIFs8IDxsbGlzdGEtZGUtcmVmZXLDqG5jaWVzPiB8IDwgIgorIjxsbGlzdGEtZGUtb2JqZWN0ZXM+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MworbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wY2lvbnM+Li4uXSA8bm9tLWJhc2U+IFs8IDxsbGlzdGEtZGUtcmVmZXLDqG5jaWVzPiB8IDwgIgorIjxsbGlzdGEtZGUtb2JqZWN0ZXM+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgImlnbm9yYSBlbHMgb2JqZWN0ZXMgZW1wYXF1ZXRhdHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJpZ25vcmEgZWxzIG9iamVjdGVzIGVtcGFxdWV0YXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjU3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgIm5vIHMnaGEgcmVidXQgbCdvYmplY3RlIGVzcGVyYXQgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9yZGVyZWQgJXUgb2JqZWN0cywgZXhwZWN0ZWQgJTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBpcyBpbnZhbGlkOiAlcyIKK21zZ3N0ciAiJXMgbm8gdsOgbGlkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcGFja2ZpbGUgZm9yIHJldXNlOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBvIGxsZWdpciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MDIKKyMsIGZ1enp5Cittc2dpZCAidW5hYmxlIHRvIHNlZWsgaW4gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGVsIGZpdHhlciBkJ8OtbmRleCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MTMKKyMsIGZ1enp5Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjg0MQorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgcGFja3MgYXJlIHNwbGl0IGR1ZSB0byBwYWNrLnBhY2tTaXplTGltaXQiCittc2dzdHIgIiIKKyJzJ2VzdMOgIGluaGFiaWxpdGFudCBsJ2VzY3JpcHR1cmEgZGUgbWFwZXMgZGUgYml0cywgZXMgZGl2aWRlaXhlbiBlbHMgcGFxdWV0cyAiCisiYSBjYXVzYSBkZSBwYWNrLnBhY2tTaXplTGltaXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODU0Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICJTJ2VzdGFuIGVzY3JpdmludCBlbHMgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTE3IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZmVyIHN0YXQgYSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjExNjQKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAiIgorInMnZXN0w6AgaW5oYWJpbGl0YW50IGwnZXNjcmlwdHVyYSBkZSBtYXBlcyBkZSBiaXRzLCBwZXJxdcOoIGFsZ3VucyBvYmplY3RlcyBubyAiCisicydlbXBhcXVldGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICJlbCBkZXNwbGHDp2FtZW50IGRlIGJhc2UgZGUgZGlmZXLDqG5jaWVzIGVzdMOgIGZvcmEgZGUgbMOtbWl0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNjAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICJlbCBkZXNwbGHDp2FtZW50IGRlIGJhc2UgZGUgZGlmZXLDqG5jaWVzIGVzdMOgIGZvcmEgZGUgbMOtbWl0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODcwCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUydlc3RhbiBjb21wdGFudCBlbHMgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAwMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG1vdXJlICVzIGEgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnb2JqZWN0ZTogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMDEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJvYmplY3RlICVzIG5vIHRyb2JhdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTI1Cittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICJpbmNsb3UgZWxzIG9iamVjdGVzIGFiYXN0YWJsZXMgZGUgcXVhbHNldm9sIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTkKK21zZ2lkICJDb21wcmVzc2luZyBvYmplY3RzIgorbXNnc3RyICJTJ2VzdGFuIGNvbXByaW1pbnQgZWxzIG9iamVjdGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjUKK21zZ2lkICJpbmNvbnNpc3RlbmN5IHdpdGggZGVsdGEgY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODQ2Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJ2YWxvciBubyB2w6BsaWQgcGVyIGEgLS1taXNzaW5nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MDUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDEzCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2sgaW5kZXgiCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgcHJlYWQgZW4gZWwgZml0eGVyIGRlIHBhcXVldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCBhdCAlcyBjb3VsZCBub3QgYmUgZXhhbWluZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDIxCisjLCBmdXp6eQorbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbCdvYmplY3RlIGRlIG5vdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmV2ICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgwqslc8K7IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uICclcyciCittc2dzdHIgInJldmlzacOzIGluY29ycmVjdGUgwqslc8K7IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDEKK21zZ2lkICJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBhZmVnaXIgZWxzIG9iamVjdGVzIHJlY2VudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICJ2ZXJzacOzIGQnw61uZGV4IG5vIGNvbXBhdGlibGUgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJ2ZXJzacOzIGQnw61uZGV4IGluY29ycmVjdGEgwqslc8K7IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzYKK21zZ2lkICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKK21zZ3N0ciAiPHZlcnNpw7M+Wyw8ZGVzcGxhw6dhbWVudD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzcKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICIiCisiZXNjcml1IGVsIGZpdHhlciBkJ8OtbmRleCBkZSBwYXF1ZXQgZW4gbGEgdmVyc2nDsyBkZSBmb3JtYXQgZCfDrW5kZXggIgorImVzcGVjaWZpY2FkYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQwCittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAibWlkYSBtw6B4aW1hIGRlIGNhZGEgZml0eGVyIGVtcGFxdWV0YXQgZGUgc29ydGlkYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQyCittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICJpZ25vcmEgZWxzIG9iamVjdGVzIHByZXN0YXRzIGQndW4gZW1tYWdhdHplbWF0Z2UgZCdvYmplY3RlcyBhbHRlcm5hdGl1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDQKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgImlnbm9yYSBlbHMgb2JqZWN0ZXMgZW1wYXF1ZXRhdHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImxpbWl0YSBsYSBmaW5lc3RyYSBkJ2VtcGFxdWV0YW1lbnQgcGVyIG9iamVjdGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDgKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICIiCisibGltaXRhIGxhIGZpbmVzdHJhIGQnZW1wYXF1ZXRhbWVudCBwZXIgbWVtw7JyaWEgYSBtw6lzIGRlbCBsw61taXQgZCdvYmplY3RlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUwCittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIiIKKyJsb25naXR1ZCBtw6B4aW1hIGRlIGxhIGNhZGVuYSBkZSBkaWZlcsOobmNpZXMgcGVybWVzYSBlbiBlbCBwYXF1ZXQgcmVzdWx0YW50IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTIKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgInJldXNhIGxlcyBkaWZlcsOobmNpZXMgZXhpc3RlbnRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTQKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICJyZXVzYSBlbHMgb2JqZWN0ZXMgZXhpc3RlbnRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTYKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgInVzYSBvYmplY3RlcyBPRlNfREVMVEEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1OAorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgInVzYSBmaWxzIGVuIGNlcmNhciBsZXMgbWlsbG9yZXMgY29pbmNpZMOobmNpZXMgZGUgZGlmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjAKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICJubyBjcmXDr3MgdW5hIGVtaXNzacOzIGRlIHBhcXVldCBidWlkYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYyCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgcGFyw6BtZXRyZXMgZGUgcmV2aXNpw7MgZGVzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjQKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAibGltaXRhIGVscyBvYmplY3RlcyBhbHMgcXVhbHMgZW5jYXJhIG5vIHMnaGFnaW4gZW1wYXF1ZXRhdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgImluY2xvdSBlbHMgb2JqZWN0ZXMgYWJhc3RhYmxlcyBkZSBxdWFsc2V2b2wgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiIgorImluY2xvdSBlbHMgb2JqZWN0ZXMgYWxzIHF1YWxzIGZhY2luIHJlZmVyw6huY2lhIGxlcyBlbnRyYWRlcyBkZWwgcmVnaXN0cmUgZGUgIgorInJlZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjczCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiaW5jbG91IGVscyBvYmplY3RlcyBhbHMgcXVhbHMgZmFjaSByZWZlcsOobmNpYSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc2Cittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICJlbWV0IGVsIHBhcXVldCBhIHN0ZG91dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc4Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICIiCisiaW5jbG91IGVscyBvYmplY3RlcyBkJ2V0aXF1ZXRhIHF1ZSBmYWNpbiByZWZlcsOobmNpYSBhbHMgb2JqZWN0ZXMgYSBlbXBhcXVldGFyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInJldMOpbiBlbHMgb2JqZWN0ZXMgaW5hYmFzdGFibGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODIKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImVtcGFxdWV0YSBlbHMgb2JqZWN0ZXMgaW5hYmFzdGFibGVzIHNvbHRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODQKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZGVzZW1wYXF1ZXRhIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMgbcOpcyBub3VzIHF1ZSA8aG9yYT4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NworbXNnaWQgInVzZSB0aGUgc3BhcnNlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg5Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgImNyZWEgcGFxdWV0cyBwcmltcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkxCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgImNyZWEgcGFxdWV0cyBhZGVxdWF0cyBwZXIgYSBsZXMgb2J0ZW5jaW9ucyBzdXBlcmZpY2lhbHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MworbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgImlnbm9yYSBlbHMgcGFxdWV0cyBxdWUgdGluZ3VpbiB1biBmaXR4ZXIgLmtlZXAgY29ycmVzcG9uZW50IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTUKKyMsIGZ1enp5Cittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAidXNhIGVsIHBhcXVldCBwcmltIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTcKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJuaXZlbGwgZGUgY29tcHJlc3Npw7MgZGUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTkKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAibm8gYW1hZ3VpcyBsZXMgY29taXNzaW9ucyBwZXIgZW1wZWx0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDEKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyJ1c2EgdW4gw61uZGV4IGRlIG1hcGEgZGUgYml0cywgc2kgZXN0w6AgZGlzcG9uaWJsZSwgcGVyIGEgYWNjZWxlcmFyIGVsICIKKyJyZWNvbXB0ZSBkJ29iamVjdGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDMKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICJlc2NyaXUgdW4gw61uZGV4IGRlIG1hcGEgZGUgYml0cyBqdW50YW1lbnQgYW1iIGwnw61uZGV4IGRlIHBhcXVldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzA3CisjLCBmdXp6eQorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IGlmIHBvc3NpYmxlIgorbXNnc3RyICJlc2NyaXUgw61uZGV4IGRlIG1hcGEgZGUgYml0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzExCittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiZ2VzdGnDsyBkZWxzIG9iamVjdGVzIGFic2VudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNAorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNgorIywgZnV6enkKK21zZ2lkICJyZXNwZWN0IGlzbGFuZHMgZHVyaW5nIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJtaWRhIGRlIGxhIGZpbmVzdHJhIHF1ZSBzJ3VzYSBwZXIgYSBjb21wcmVzc2nDsyBkZSBkaWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBjaGFpbiBkZXB0aCAlZCBpcyB0b28gZGVlcCwgZm9yY2luZyAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA0Cittc2dpZCAiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA2Cittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCisjLCBmdXp6eQorbXNnaWQgIi0tdGhpbiBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhbiBpbmRleGFibGUgcGFjayIKK21zZ3N0ciAiLS1maXgtdGhpbiBubyBlcyBwb3QgdXNhciBzZW5zZSAtLXN0ZGluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKKyMsIGZ1enp5Cittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgaSAtQSBzw7NuIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgIm5vIGVzIHBvdCB1c2FyIC1hIGFtYiAtZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDgxCittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUydlc3RhbiBlbnVtZXJhbnQgZWxzIG9iamVjdGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG90YWwgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCByZXVzZWQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pIgorbXNnc3RyICIiCisiVG90YWwgJTxQUkl1MzI+IChkaWZlcsOobmNpZXMgJTxQUkl1MzI+KSwgcmV1c2F0ICU8UFJJdTMyPiAoZGlmZXLDqG5jaWVzICIKKyIlPFBSSXUzMj4pIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE2Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICJlbXBhcXVldGEtaG8gdG90IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgInBvZGEgbGVzIHJlZmVyw6huY2llcyBzb2x0ZXMgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiUydlc3RhbiBlbGltaW5hbnQgb2JqZWN0ZXMgZHVwbGljYXRzIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPGhvcmE+XSBbLS1dIFs8aGVhZD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTMxCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICJpbmZvcm1hIGQnb2JqZWN0ZXMgcG9kYXRzIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImZlcyBjYWR1Y2FyIGVscyBvYmplY3RlcyBtw6lzIHZlbGxzIHF1ZSA8aG9yYT4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTUwCittc2dpZCAiY2Fubm90IHBydW5lIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJubyBlcyBwb3QgcG9kYXIgZW4gdW4gZGlww7JzaXQgZCdvYmplY3RlcyBwcmVjaW9zb3MiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY2IGJ1aWx0aW4vcHVsbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVmFsb3Igbm8gdsOgbGlkIHBlciBhICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzxvcGNpb25zPl0gWzxkaXDDsnNpdD4gWzxlc3BlY2lmaWNhY2nDsy1kZS1yZWZlcsOobmNpYT4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQyCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgImNvbnRyb2xhIGwnb2J0ZW5jacOzIHJlY3Vyc2l2YSBkZSBzdWJtw7JkdWxzIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAiT3BjaW9ucyByZWxhY2lvbmFkZXMgYW1iIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgImluY29ycG9yYSBlbHMgY2FudmlzIGZlbnQgwqtyZWJhc2XCuyBlbiBsbG9jIGRlIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL3B1bGwuYzoxNzcgYnVpbHRpbi9yZWJhc2UuYzo0NjcgYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgInBlcm1ldCBsJ2F2YW7DpyByw6BwaWQiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4NgorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIgcmViYXNlIgorbXNnc3RyICIiCisiZmVzIMKrc3Rhc2jCuyBpIMKrc3Rhc2ggcG9wwrsgYXV0b23DoHRpY2FtZW50IGFiYW5zIGkgZGVzcHLDqXMgZGUgZmVyIMKrcmViYXNlwrsiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwMgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiT3BjaW9ucyByZWxhY2lvbmFkZXMgYW1iIG9idGVuaXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIxMgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgImZvcsOnYSBsYSBzb2JyZWVzY3JpcHR1cmEgZGUgbGEgYnJhbmNhIGxvY2FsIgorCisjOiBidWlsdGluL3B1bGwuYzoyMjAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm5vbWJyZSBkZSBzdWJtw7JkdWxzIGJhaXhhdHMgZW4gcGFyYWzCt2xlbCIKKworIzogYnVpbHRpbi9wdWxsLmM6MzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJWYWxvciBubyB2w6BsaWQgcGVyIGEgcHVsbC5mZjogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNworbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJObyBoaSBoYSBjYXAgY2FuZGlkYXQgc29icmUgZWwgcXVhbCBmZXIgwqtyZWJhc2XCuyBlbnRyZSBsZXMgcmVmZXLDqG5jaWVzIHF1ZSAiCisiYWNhYmV1IGQnb2J0ZW5pci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICIiCisiTm8gaGkgaGEgY2FuZGlkYXRzIHBlciBhIGZ1c2lvbmFyIGVudHJlIGxlcyByZWZlcsOobmNpZXMgcXVlIGFjYWJldSBkJ29idGVuaXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDAKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICIiCisiR2VuZXJhbG1lbnQgYWl4w7Igdm9sIGRpciBxdWUgaGV1IHByb3Zlw690IHVuYSBlc3BlY2lmaWNhY2nDsyBkZVxuIgorInJlZmVyw6huY2lhIGRlIGNvbW9kw60gcXVlIG5vIHRlbmlhIGNhcCBjb2luY2lkw6huY2lhIGVuIGVsIGNvc3RhdCByZW1vdC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiSGV1IGRlbWFuYXQgYmFpeGFyIGRlbCByZW1vdCDCqyVzwrssIHBlcsOyIG5vIGhldSBlc3BlY2lmaWNhdCBjYXAgYnJhbmNhLlxuIgorIlBlcnF1w6ggYXF1ZXN0IG5vIMOpcyBlbCByZW1vdCBjb25maWd1cmF0IHBlciBkZWZlY3RlIHBlciBhIGxhIHZvc3RyYVxuIgorImJyYW5jYSBhY3R1YWwsIGhldSBkJ2VzcGVjaWZpY2FyIHVuYSBicmFuY2EgZW4gbGEgbMOtbmlhIGQnb3JkcmVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ4IGJ1aWx0aW4vcmViYXNlLmM6MTM3NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBubyBzb3UgZW4gY2FwIGJyYW5jYS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIkVzcGVjaWZpcXVldSBzb2JyZSBxdWluYSBicmFuY2Egdm9sZXUgZmVyIMKrcmViYXNlwrsuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIkVzcGVjaWZpcXVldSBhbWIgcXVpbmEgYnJhbmNhIHZvbGV1IGZ1c2lvbmFyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUzIGJ1aWx0aW4vcHVsbC5jOjQ2OAorbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlZlZ2V1IGdpdC1wdWxsKDEpIHBlciBkZXRhbGxzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDU1IGJ1aWx0aW4vcHVsbC5jOjQ2MSBidWlsdGluL3B1bGwuYzo0NzAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MSBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjxyZW1vdD4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NzAgYnVpbHRpbi9wdWxsLmM6NDc1CisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY1Cittc2dpZCAiPGJyYW5jaD4iCittc2dzdHIgIjxicmFuY2E+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NjMgYnVpbHRpbi9yZWJhc2UuYzoxMzczIGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIGluZm9ybWFjacOzIGRlIHNlZ3VpbWVudCBwZXIgYSBsYSBicmFuY2EgYWN0dWFsLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDcyIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICIiCisiU2kgdm9sZXUgZXN0YWJsaXIgaW5mb3JtYWNpw7MgZGUgc2VndWltZW50IHBlciBhIGFxdWVzdGEgYnJhbmNhLCBwb2RldSBmZXItaG8gIgorImFtYjoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkxhIHZvc3RyYSBjb25maWd1cmFjacOzIGVzcGVjaWZpY2EgZnVzaW9uYXIgYW1iIGxhIHJlZmVyw6huY2lhIMKrJXPCu1xuIgorImRlbCByZW1vdCwgcGVyw7Igbm8gcydoYSBvYnRpbmd1dCB0YWwgcmVmZXLDqG5jaWEuIgorCisjOiBidWlsdGluL3B1bGwuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWNjZWRpciBhIGxhIGNvbWlzc2nDsyAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODY3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICJzJ2VzdMOgIGlnbm9yYW50IC0tdmVyaWZ5LXNpZ25hdHVyZXMgZW4gZmVyIMKrcmViYXNlwrsiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgImwnb3BjacOzIC0tW25vLV0tYXV0b3N0YXNoIMOpcyB2w6BsaWQgbm9tw6lzIGFtYiAtLXJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzMAorbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJTJ2VzdMOgIGFjdHVhbGl0emFudCB1bmEgYnJhbmNhIG5vIG5hc2N1ZGEgYW1iIGNhbnZpcyBhZmVnaXRzIGEgbCfDrW5kZXguIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzQKK21zZ2lkICJwdWxsIHdpdGggcmViYXNlIgorbXNnc3RyICJiYWl4YXIgZmVudCDCq3JlYmFzZcK7IgorCisjOiBidWlsdGluL3B1bGwuYzo5MzUKK21zZ2lkICJwbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJjb21ldGV1LWxvcyBvIGVtbWFnYXR6ZW1ldS1sb3MuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisibCdvYnRlbmNpw7MgaGEgYWN0dWFsaXR6YXQgSEVBRCBkZSBsYSBicmFuY2EgYWN0dWFsLlxuIgorInMnZXN0w6AgYXZhbsOnYW50IHLDoHBpZGFtZW50IGVsIHZvc3RyZSBhcmJyZSBkZSB0cmViYWxsIGRlcyBkZVxuIgorImxhIGNvbWlzc2nDsyAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJObyBlcyBwb3QgYXZhbsOnYXIgcsOgcGlkYW1lbnQgZWwgdm9zdHJlIGFyYnJlIGRlIHRyZWJhbGwuXG4iCisiRGVzcHLDqXMgZCdhc3NlZ3VyYXIgcXVlIGjDoGdpdSBkZXNhdCBxdWFsc2V2b2wgY29zYSBwcmVjaW9zYSBkZSBsYSBzb3J0aWRhICIKKyJkZVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJleGVjdXRldVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInBlciBhIHJlY3VwZXJhci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk4MQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICJObyBlcyBwb2RlbiBmdXNpb25hciBtw7psdGlwbGVzIGJyYW5xdWVzIGEgdW4gSEVBRCBidWl0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTg1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAiTm8gZXMgcG90IGZlciDCq3JlYmFzZcK7IHNvYnJlIG3Dumx0aXBsZXMgYnJhbnF1ZXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5OTIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiIgorIm5vIGVzIHBvdCBmZXIgwqtyZWJhc2XCuyBhbWIgbW9kaWZpY2FjaW9ucyBhbHMgc3VibcOyZHVscyBlbnJlZ2lzdHJhZGVzICIKKyJsb2NhbG1lbnQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs8b3BjaW9ucz5dIFs8ZGlww7JzaXQ+IFs8ZXNwZWNpZmljYWNpw7MtZGUtcmVmZXLDqG5jaWE+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjExMgorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAiYWJyZXZpYXR1cmEgZCdldGlxdWV0YSBzZW5zZSA8dGFnPiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTIyCittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIi0tZGVsZXRlIG5vbcOpcyBhY2NlcHRhIG5vbXMgZGUgcmVmZXLDqG5jaWEgZGUgZGVzdMOtIHNlbnppbGxzIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiUGVyIGEgdHJpYXIgcXVhbHNldm9sIG9wY2nDsyBwZXJtYW5lbnRtZW50LCB2ZWdldSBwdXNoLmRlZmF1bHQgYSAnZ2l0IGhlbHAgIgorImNvbmZpZycuIgorCisjOiBidWlsdGluL3B1c2guYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCittc2dzdHIgIiIKKyJMYSBicmFuY2EgZm9udCBkZSBsYSB2b3N0cmEgYnJhbmNhIGFjdHVhbCBubyBjb2luY2lkZWl4XG4iCisiYW1iIGVsIG5vbSBkZSBsYSB2b3N0cmEgYnJhbmNhIGFjdHVhbC4gUGVyIGEgcHVqYXItbGEgYSBsYVxuIgorImJyYW5jYSBmb250IGVuIGVsIHJlbW90LCB1c2V1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJQZXIgYSBwdWphciBhIGxhIGJyYW5jYSBkZWwgbWF0ZWl4IG5vbSBlbiBlbCByZW1vdCwgdXNldVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyJBY3R1YWxtZW50IG5vIHNvdSBlbiBjYXAgYnJhbmNhLlxuIgorIlBlciBhIHB1amFyIGxhIGhpc3TDsnJpYSBxdWUgY29uZHVlaXggYSBsJ2VzdGF0IGFjdHVhbFxuIgorIihIRUFEIHNlcGFyYXQpIGFyYSwgdXNldVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxub20tZGUtYnJhbmNhLXJlbW90YT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIGFjdHVhbCAlcyBubyB0w6kgY2FwIGJyYW5jYSBmb250LlxuIgorIlBlciBhIHB1amFyIGxhIGJyYW5jYSBhY3R1YWwgaSBlc3RhYmxpciBlbCByZW1vdCBjb20gYSBmb250LCB1c2V1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSBhY3R1YWwgJXMgdMOpIG3Dumx0aXBsZXMgYnJhbnF1ZXMgZm9udHMsIHMnZXN0w6AgcmVmdXNhbnQgcHVqYXIuIgorCisjOiBidWlsdGluL3B1c2guYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorIkVzdGV1IHB1amFudCBhbCByZW1vdCDCqyVzwrssIHF1ZSBubyDDqXMgbGEgZm9udCBkZSBsYSB2b3N0cmFcbiIKKyJicmFuY2EgYWN0dWFsIMKrJXPCuywgc2Vuc2UgZGlyLW1lIHF1w6ggcHVqYXIgcGVyIGEgYWN0dWFsaXR6YXJcbiIKKyJxdWluYSBicmFuY2EgcmVtb3RhLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjcwCittc2dpZCAiIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgIiIKKyJObyBoZXUgZXNwZWNpZmljYXQgY2FwIGVzcGVjaWZpY2FjacOzIGRlIHJlZmVyw6huY2lhIGEgcHVqYXIsIGkgcHVzaC5kZWZhdWx0ICIKKyLDqXMgXCJub3RoaW5nXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoyNzcKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJTJ2hhbiByZWJ1dGphdCBsZXMgYWN0dWFsaXR6YWNpb25zIHBlcnF1w6ggZWwgcHVudCBkZSBsYSB2b3N0cmEgYnJhbmNhXG4iCisiYWN0dWFsIGVzdMOgIGRhcnJlcmUgZGUgbGEgc2V2YSBicmFuY2EgcmVtb3RhIGNvcnJlc3BvbmVudC4gSW50ZWdyZXVcbiIKKyJlbHMgY2FudmlzIHJlbW90cyAocGVyIGV4ZW1wbGUsICdnaXQgcHVsbCAuLi4nKSBhYmFucyBkZSBwdWphciBkZSBub3UuXG4iCisiVmVnZXUgbGEgJ05vdGEgc29icmUgYXZhbsOnb3MgcsOgcGlkcycgYSAnZ2l0IHB1c2ggLS1oZWxwJyBwZXIgZGV0YWxscy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4MworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlMnaGFuIHJlYnV0amF0IGxlcyBhY3R1YWxpdHphY2lvbnMgcGVycXXDqCB1biBwdW50IGRlIGJyYW5jYSBwdWphZGFcbiIKKyJlc3TDoCBkYXJyZXJlIGRlIGxhIHNldmEgYnJhbmNhIHJlbW90YSBjb3JyZXNwb25lbnQuIEFnYWZldSBhcXVlc3RhXG4iCisiYnJhbmNhIGkgaW50ZWdyZXUgZWxzIGNhbnZpcyByZW1vdHMgKHBlciBleGVtcGxlLCAnZ2l0IHB1bGwgLi4uJylcbiIKKyJhYmFucyBkZSBwdWphciBkZSBub3UuXG4iCisiVmVnZXUgbGEgJ05vdGEgc29icmUgYXZhbsOnb3MgcsOgcGlkcycgYSAnZ2l0IHB1c2ggLS1oZWxwJyBwZXIgZGV0YWxscy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4OQorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJTJ2hhbiByZWJ1dGphdCBsZXMgYWN0dWFsaXR6YWNpb25zIHBlcnF1w6ggZWwgcmVtb3QgY29udMOpIGNhbnZpc1xuIgorInF1ZSBubyB0ZW5pdSBsb2NhbG1lbnQuIEFpeMOyIGFjb3N0dW1hIGEgc2VyIGNhdXNhdCBwZXIgdW4gYWx0cmUgZGlww7JzaXRcbiIKKyJxdWUgaGEgcHVqYXQgYSBsYSBtYXRlaXhhIHJlZmVyw6huY2lhLiBQb3Qgc2VyIHF1ZSBwcmltZXIgdnVsZ3VldVxuIgorImludGVncmFyIGVscyBjYW52aXMgcmVtb3RzIChwZXIgZXhlbXBsZSwgJ2dpdCBwdWxsIC4uLicpIGFiYW5zIGRlXG4iCisicHVqYXIgZGUgbm91LlxuIgorIlZlZ2V1IGxhICdOb3RhIHNvYnJlIGF2YW7Dp29zIHLDoHBpZHMnIGEgJ2dpdCBwdXNoIC0taGVscCcgcGVyIGRldGFsbHMuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTYKK21zZ2lkICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGFnIGFscmVhZHkgZXhpc3RzIGluIHRoZSByZW1vdGUuIgorbXNnc3RyICIiCisiUydoYW4gcmVidXRqYXQgbGVzIGFjdHVhbGl0emFjaW9ucyBwZXJxdcOoIGwnZXRpcXVldGEgamEgZXhpc3RlaXggZW4gZWwgcmVtb3QuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIk5vIHBvZGV1IGFjdHVhbGl0emFyIHVuYSByZWZlcsOobmNpYSByZW1vdGEgcXVlIGFzc2VueWFsYSB1blxuIgorIm9iamVjdGUgbm8gZGUgY29taXNzacOzLCBuaSBhY3R1YWxpdHphciB1bmEgcmVmZXLDqG5jaWEgcmVtb3RhIHBlclxuIgorImZlciBxdWUgYXNzZW55YWxpIHVuIG9iamVjdGUgbm8gZGUgY29taXNzacOzLCBzZW5zZSB1c2FyIGwnb3BjacOzXG4iCisiJy0tZm9yY2UnLlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICJTJ2VzdMOgIHB1amFudCBhICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBwdWphciBhbGd1bmVzIHJlZmVyw6huY2llcyBhIMKrJXPCuyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAiZGlww7JzaXQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MyBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgInB1amEgdG90ZXMgbGVzIHJlZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJyZWZsZWN0ZWl4IHRvdGVzIGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NgorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICJzdXByaW1laXggbGVzIHJlZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ3Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICJwdWphIGxlcyBldGlxdWV0ZXMgKG5vIGVzIHBvdCB1c2FyIGFtYiAtLWFsbCBvIC0tbWlycm9yKSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY3Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAiZm9yw6dhIGxlcyBhY3R1YWxpdHphY2lvbnMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MiBidWlsdGluL3NlbmQtcGFjay5jOjE4MQorbXNnaWQgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKK21zZ3N0ciAiPG5vbS1kZS1yZWZlcsOobmNpYT46PGVzcGVyYXQ+IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAicmVxdWVyZWl4IHF1ZSBlbCB2YWxvciBhbnRpYyBkZSBsYSByZWZlcsOobmNpYSBzaWd1aSBkJ2FxdWVzdCB2YWxvciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250cm9sYSBsYSBwdWphZGEgcmVjdXJzaXZhIGRlbHMgc3VibcOyZHVscyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAidXNhIGVsIHBhcXVldCBwcmltIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICJwcm9ncmFtYSBxdWUgcmVwIGVscyBwYXF1ZXRzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAiZXN0YWJsZWl4IGxhIGZvbnQgcGVyIGEgZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjQKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAicG9kYSBsZXMgcmVmZXLDqG5jaWVzIGVsaW1pbmFkZXMgbG9jYWxtZW50IgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiZXZpdGEgZWwgbGxpZ2FtIGRlIHByZXB1amFkYSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3Cittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICJwdWphIGxlcyBldGlxdWV0ZXMgYWJzZW50cyBwZXLDsiByZWxsZXZhbnRzIgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAic2lnbmEgbGEgcHVqYWRhIGFtYiBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJkZW1hbmEgdW5hIHRyYW5zYWNjacOzIGF0w7JtaWNhIGFsIGNvc3RhdCByZW1vdCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkwCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tYWxsLCAtLW1pcnJvciBpIC0tdGFncyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkyCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIG5vIHTDqSBzZW50aXQgc2Vuc2UgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3B1c2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAiZGlww7JzaXQgaW5jb3JyZWN0ZSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMworbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiTm8gaGkgaGEgY2FwIGRlc3TDrSBkZSBwdWphZGEgY29uZmlndXJhdC5cbiIKKyJFc3BlY2lmaXF1ZXUgbCdVUkwgZGVzIGRlIGxhIGzDrW5pYSBkJ29yZHJlcyBvIGLDqSBjb25maWd1cmV1IHVuIGRpcMOyc2l0IHJlbW90ICIKKyJmZW50IHNlcnZpclxuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bm9tPiA8dXJsPlxuIgorIlxuIgorImkgZGVzcHLDqXMgcHVnZXUgZmVudCBzZXJ2aXIgZWwgbm9tIHJlbW90XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxub20+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgaSAtLXRhZ3Mgc8OzbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo2MzAKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLWFsbCBubyBlcyBwb3QgY29tYmluYXIgYW1iIGVzcGVjaWZpY2FjaW9ucyBkZSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM0Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciBpIC0tdGFncyBzw7NuIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNgorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIG5vIGVzIHBvdCBjb21iaW5hciBhbWIgZXNwZWNpZmljYWNpb25zIGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL3B1c2guYzo2MzkKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgaSAtLW1pcnJvciBzw7NuIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0MworbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgImxlcyBvcGNpb25zIGRlIHB1amFkYSBubyBoYW4gZGUgdGVuaXIgY2Fyw6BjdGVycyBkZSBsw61uaWEgbm92YSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OQorIywgZnV6enkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iCittc2dzdHIgImdpdCBtZXJnZSBbPG9wY2lvbnM+XSBbPGNvbWlzc2nDsz4uLi5dIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorIywgZnV6enkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8YmFzZT4gPG9sZC10aXA+IDxuZXctdGlwPiIKK21zZ3N0ciAiZ2l0IG12IFs8b3BjaW9ucz5dIDxmb250Pi4uLiA8ZGVzdMOtPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjIKK21zZ2lkICJQZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI0Cittc2dpZCAidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIKK21zZ3N0ciAidXRpbGl0emEgY29sb3JzIHNpbXBsZXMgZGUgZGlmZiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKKyMsIGZ1enp5Cittc2dpZCAibm90ZXMiCittc2dzdHIgIm5vdGVzIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorIywgZnV6enkKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBsb2cnIgorbXNnc3RyICJwYXNzYS1obyBhIMKrZ2l0IGFtwrsiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICJjYXAgLi4gZW4gcmFuZzogwqslc8K7IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo2NAorbXNnaWQgInNpbmdsZSBhcmcgZm9ybWF0IG11c3QgYmUgc3ltbWV0cmljIHJhbmdlIgorbXNnc3RyICJlbCBmb3JtYXQgZGUgbCdhcmd1bWVudCDDum5pYyBoYSBkZSBzZXIgZGUgcmFuZyBzaW3DqHRyaWMiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjc5Cittc2dpZCAibmVlZCB0d28gY29tbWl0IHJhbmdlcyIKK21zZ3N0ciAiY2FsZW4gZG9zIHJhbmdzIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08Zml0eGVyPl0gKC0tZW1wdHkgfCA8YXJicmUxPiBbPGFyYnJlMj4gWzxhcmJyZTM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgImVzY3JpdSBsJ8OtbmRleCByZXN1bHRhbnQgYWwgPGZpdHhlcj4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI3Cittc2dpZCAib25seSBlbXB0eSB0aGUgaW5kZXgiCittc2dzdHIgIm5vbcOpcyBidWlkYSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjkKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJTJ2VzdMOgIGZ1c2lvbmFudCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICJyZWFsaXR6YSB1bmEgZnVzacOzIGEgbcOpcyBkJ3VuYSBsZWN0dXJhIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAiZnVzacOzIGRlIDMgdmllcyBzaSBubyBjYWwgZnVzacOzIGEgbml2ZWxsIGRlIGZpdHhlcnMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiZnVzacOzIGRlIDMgdmllcyBlbiBwcmVzw6huY2lhIGQnYWZlZ2ltZW50cyBpIGVsaW1pbmFjaW9ucyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzcKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJlbCBtYXRlaXggcXVlIC1tLCBwZXLDsiBkZXNjYXJ0YSBsZXMgZW50cmFkZXMgbm8gZnVzaW9uYWRlcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjxzdWJkaXJlY3Rvcmk+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAibGxlZ2l1IGwnYXJicmUgYSBsJ8OtbmRleCBzb3RhIDxzdWJkaXJlY3Rvcmk+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDIKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICJhY3R1YWxpdHphIGwnYXJicmUgZGUgdHJlYmFsbCBhbWIgZWwgcmVzdWx0YXQgZGUgZnVzacOzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAicGVybWV0IHF1ZSBlbHMgZml0eGVycyBleHBsw61jaXRhbWVudCBpZ25vcmF0cyBzZSBzb2JyZWVzY3JpZ3VpbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDgKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgIm5vIGNvbXByb3ZpcyBsJ2FyYnJlIGRlIHRyZWJhbGwgZGVzcHLDqXMgZGUgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ5Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJubyBhY3R1YWxpdHppcyBsJ8OtbmRleCBuaSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUxCittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICJvbWV0IGwnYXBsaWNhY2nDsyBkZWwgZmlsdHJlIGQnYWdhZmFtZW50IHBhcmNpYWwiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUzCittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICJkZXB1cmEgdW5wYWNrLXRyZWVzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1NworIywgZnV6enkKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAib21ldCBlbHMgbWlzc2F0Z2VzIGluZm9ybWF0aXVzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE4OAorIywgZnV6enkKK21zZ2lkICJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiaGV1IGRlIHByaW1lciByZXNvbGRyZSBlbCB2b3N0cmUgw61uZGV4IGFjdHVhbCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMgorIywgZnV6enkKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPiB8IC0ta2VlcC1iYXNlXSAiCisiWzx1cHN0cmVhbT4gWzxicmFuY2g+XV0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8ZGlww7JzaXQ+IFstLWV4ZWMgPG9yZHJlPl0gWzxvcGNpb25zPl0gPGFyYnJlPiAiCisiWzxjYW3DrT4uLi5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM0Cittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCBbPGJyYW5jaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYKK21zZ2lkICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCittc2dzdHIgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzcgYnVpbHRpbi9yZWJhc2UuYzoyMDEgYnVpbHRpbi9yZWJhc2UuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIgorbXNnc3RyICJsbGlzdGEgcGVyIGEgZmVyIGluZXN0YWJsZTogwqslc8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NiBidWlsdGluL3JlYmFzZS5jOjIxMiBidWlsdGluL3JlYmFzZS5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgYSDCqyVzwrsuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI3MQorbXNnaWQgIm5vIEhFQUQ/IgorbXNnc3RyICJubyBoaSBoYSBjYXAgSEVBRD8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGZpdHhlciB0ZW1wb3JhbCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMDQKK21zZ2lkICJjb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBtYXJjYXIgY29tIGEgaW50ZXJhY3RpdSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNjIKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGdlbmVyYXIgbGEgbGxpc3RhIHBlciBhIGZlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0MDIKK21zZ2lkICJhIGJhc2UgY29tbWl0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCAtLXVwc3RyZWFtIG9yIC0tb250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ1NworbXNnaWQgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjkKK21zZ2lkICJrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIm1hbnTDqW4gbGVzIGNvbWlzc2lvbnMgYnVpZGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAicGVybWV0IGxlcyBjb21pc3Npb25zIGFtYiBtaXNzYXRnZXMgYnVpdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcyCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgImZlcyDCq3JlYmFzZcK7IGRlIGxlcyBjb21pc3Npb25zIGRlIGZ1c2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzQKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NgorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzcKK21zZ2lkICJzaWduIGNvbW1pdHMiCittc2dzdHIgInNpZ25hIGxlcyBjb21pc3Npb25zIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3OSBidWlsdGluL3JlYmFzZS5jOjE0NTUKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgxCittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICJjb250aW51YSBlbCDCq3JlYmFzZcK7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MworbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICJvbWV0IGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODQKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImVkaXRhIGxhIGxsaXN0YSBhIGZlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODYKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJtb3N0cmEgZWwgcGVkYcOnIGFjdHVhbCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODkKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiZXNjdXLDp2EgZWxzIGlkcyBkZSBsZXMgY29taXNzaW9ucyBlbiBsYSBsbGlzdGEgcGVyIGEgZmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImV4cGFuZGVpeCBlbHMgaWRzIGRlIGxlcyBjb21pc3Npb25zIGVuIGxhIGxsaXN0YSBwZXIgYSBmZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkzCittc2dpZCAiY2hlY2sgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiY29tcHJvdmEgbGEgbGxpc3RhIGEgZmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NQorbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgInJlb3JnYW5pdHphIGxlcyBsw61uaWVzIMKrZml4dXAvcGlja8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NworbXNnaWQgImluc2VydCBleGVjIGNvbW1hbmRzIGluIHRvZG8gbGlzdCIKK21zZ3N0ciAiZXhwYW5kZWl4IGxlcyBvcmRyZXMgZXhlYyBlbiBsYSBsbGlzdGEgcGVyIGEgZmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OAorbXNnaWQgIm9udG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKKyMsIGZ1enp5Cittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgInJldmlzacOzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorIywgZnV6enkKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAicmV2aXNpw7MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAzCittc2dpZCAic3F1YXNoLW9udG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDQKK21zZ2lkICJzcXVhc2ggb250byIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorIywgZnV6enkKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICJEZXNhc3NpZ25hIGxhIGluZm9ybWFjacOzIGRlIGZvbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4CisjLCBmdXp6eQorbXNnaWQgImhlYWQtbmFtZSIKK21zZ3N0ciAiY2FudmkgZGUgbm9tIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOAorIywgZnV6enkKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgImRhdmFudCBwZXIgIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMworIywgZnV6enkKK21zZ2lkICJyZWJhc2Ugc3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdMOoZ2lhIGRlIGZ1c2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTQKKyMsIGZ1enp5Cittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAiZXN0cmF0w6hnaWEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE1CisjLCBmdXp6eQorbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgIm9wY2lvbnMgZGUgZGVjb3JhY2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJzd2l0Y2gtdG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTcKK21zZ2lkICJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorIywgZnV6enkKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgIm5vbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTgKKyMsIGZ1enp5Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJub20gZGVsIHJlbW90IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOQorIywgZnV6enkKK21zZ2lkICJjbWQiCittc2dzdHIgIm9yZHJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOQorbXNnaWQgInRoZSBjb21tYW5kIHRvIHJ1biIKK21zZ3N0ciAibCdvcmRyZSBhIGV4ZWN1dGFyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMiBidWlsdGluL3JlYmFzZS5jOjE1NDAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0MAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMgcmVxdWVyZWl4IHVuIMKrcmViYXNlwrsgaW50ZXJhY3RpdSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgJ29udG8nOiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzdGFibGlyIMKrJXPCuyBhIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICJmaXR4ZXIgbm8gdsOgbGlkOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXIgwqslc8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIk5vIGVzIHBvdCBlbW1hZ2F0emVtYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODQ5Cittc2dpZCAiY291bGQgbm90IGRldGVybWluZSBIRUFEIHJldmlzaW9uIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGRldGVybWluYXIgbGEgcmV2aXNpw7MgZGUgSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo5NzIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxCittc2dpZCAiIgorIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCittc2dzdHIgIiIKKyJSZXNvbGV1IHRvdHMgZWxzIGNvbmZsaWN0ZXMgbWFudWFsbWVudCwgbWFycXVldS1sb3MgY29tIGEgcmVzb2x0cyBhbWJcbiIKKyLCq2dpdCBhZGQvcm0gPGZpdHhlcnMgYW1iIGNvbmZsaWN0ZT7CuywgbGxhdm9ycyBleGVjdXRldSDCq2dpdCByZWJhc2UgLS0iCisiY29udGludWXCuy5cbiIKKyJQb2RldSBlbiBjb21wdGVzIG9tZXRyZSBhcXVlc3RhIGNvbWlzc2nDszogZXhlY3V0ZXUgwqtnaXQgcmViYXNlIC0tc2tpcMK7LlxuIgorIlBlciBhIGF2b3J0YXIgaSB0b3JuYXIgYSBsJ2VzdGF0IGFudGVyaW9yIGFiYW5zIGRlIGwnb3JkcmUgwqtnaXQgcmViYXNlwrssICIKKyJleGVjdXRldSDCq2dpdCByZWJhc2UgLS1hYm9ydMK7LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheVxuIgorInRoZXNlIHJldmlzaW9uczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlc1xuIgorIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKyJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCittc2dzdHIgIiIKKyIlc1xuIgorIkVzcGVjaWZpcXVldSBzb2JyZSBxdcOoIGJyYW5jYSB2b2xldSBmZXIgwqtyZWJhc2XCuy5cbiIKKyJWZWdldSBnaXQtcmViYXNlKDEpIHBlciBkZXRhbGxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNhPidcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiU2kgdm9sZXUgZXN0YWJsaXIgaW5mb3JtYWNpw7MgZGUgc2VndWltZW50IHBlciBhIGFxdWVzdGEgYnJhbmNhLCBwb2RldSBmZXItaG8gIgorImFtYjpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTMKKyMsIGZ1enp5Cittc2dpZCAiZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAiZXhwYW5kZWl4IGxlcyBvcmRyZXMgZXhlYyBlbiBsYSBsbGlzdGEgcGVyIGEgZmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ2Cittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgImZlcyB1biDCq3JlYmFzZcK7IGVuIGxhIGJyYW5jYSBkb25hZGEgZW4gY29tcHRlcyBkZSBsYSBmb250IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDgKKyMsIGZ1enp5Cittc2dpZCAidXNlIHRoZSBtZXJnZS1iYXNlIG9mIHVwc3RyZWFtIGFuZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQgYmFzZSIKK21zZ3N0ciAibGEgYnJhbmNhIGZvbnQgZGVtYW5hZGEgwqslc8K7IG5vIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTAKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJwZXJtZXQgYWwgbGxpZ2FtIHByZS1yZWJhc2UgZXhlY3V0YXItc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MgorbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAic2lsZW5jacOzcy4gSW1wbGljYSAtLW5vLXN0YXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1OAorIywgZnV6enkKK21zZ2lkICJkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIm5vIG1vc3RyaXMgbGVzIGVzdGFkw61zdGlxdWVzIGRlIGRpZmVyw6huY2lhIGFsIGZpbmFsIGRlIGxhIGZ1c2nDsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDYxCisjLCBmdXp6eQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiCittc2dzdHIgImFmZWdlaXggdW5hIGzDrW5pYSDCq1NpZ25lZC1vZmYtYnnCuyBhbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NAorIywgZnV6enkKK21zZ2lkICJtYWtlIGNvbW1pdHRlciBkYXRlIG1hdGNoIGF1dGhvciBkYXRlIgorbXNnc3RyICJBZ3J1cGEgcGVyIMKrY29taXR0ZXLCuyBlbiBjb21wdGVzIGRlIHBlciBhdXRvciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY2Cittc2dpZCAiaWdub3JlIGF1dGhvciBkYXRlIGFuZCB1c2UgY3VycmVudCBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OAorIywgZnV6enkKK21zZ2lkICJzeW5vbnltIG9mIC0tcmVzZXQtYXV0aG9yLWRhdGUiCittc2dzdHIgInNpbsOybmltIGRlIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzAgYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICJwYXNzYS1obyBhIMKrZ2l0LWFwcGx5wrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MgorIywgZnV6enkKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIgorbXNnc3RyICJpZ25vcmEgZWxzIGNhbnZpcyBkJ2VzcGFpIGVuIGJsYW5jIGFsIGZpbmFsIGRlIGxhIGzDrW5pYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDc2IGJ1aWx0aW4vcmViYXNlLmM6MTQ3OQorbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAiwqtjaGVycnkgcGlja8K7IHRvdGVzIGxlcyBjb21pc3Npb25zLCBpbmNsw7pzIGxlcyBubyBjYW52aWFkZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICJjb250aW51YSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg0Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAib21ldCBlbCBwZWRhw6cgYWN0dWFsIGkgY29udGludWEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NgorbXNnaWQgImFib3J0IGFuZCBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCIKK21zZ3N0ciAiaW50ZXJyb21wIGkgYWdhZmEgbGEgYnJhbmNhIG9yaWdpbmFsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODkKK21zZ2lkICJhYm9ydCBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzIgorbXNnc3RyICJpbnRlcnJvbXAgcGVyw7IgbWFudMOpIEhFQUQgb24gw6lzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiZWRpdGEgbGEgbGxpc3RhIGRlIGNvc2VzIGEgZmVyIGR1cmFudCB1biDCq3JlYmFzZcK7IGludGVyYWN0aXUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgIm1vc3RyYSBlbCBwZWRhw6cgcXVlIHMnZXN0w6AgYXBsaWNhbnQgbyBmdXNpb25hbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5NgorIywgZnV6enkKK21zZ2lkICJ1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSIKK21zZ3N0ciAiZXN0cmF0w6hnaWEgZGUgZnVzacOzIGEgdXNhciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTAwCittc2dpZCAibGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxpc3Qgb2YgY29tbWl0cyB0byByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA0CisjLCBmdXp6eQorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAiaW50ZW50YSByZWNyZWFyIGxlcyAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwOQorIywgZnV6enkKK21zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCittc2dzdHIgInByZXNlcnZhIGxlcyBjb21pc3Npb25zIGluaWNpYWxtZW50IGJ1aWRlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTExCittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTcKKyMsIGZ1enp5Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciIKK21zZ3N0ciAiIgorImZlcyDCq3N0YXNowrsgaSDCq3N0YXNoIHBvcMK7IGF1dG9tw6B0aWNhbWVudCBhYmFucyBpIGRlc3Byw6lzIGRlIGZlciDCq3JlYmFzZcK7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTkKK21zZ2lkICJhZGQgZXhlYyBsaW5lcyBhZnRlciBlYWNoIGNvbW1pdCBvZiB0aGUgZWRpdGFibGUgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKKyMsIGZ1enp5Cittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJwZXJtZXQgbGVzIGNvbWlzc2lvbnMgYW1iIG1pc3NhdGdlcyBidWl0cyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI2Cittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyOQorIywgZnV6enkKK21zZ2lkICJ1c2UgJ21lcmdlLWJhc2UgLS1mb3JrLXBvaW50JyB0byByZWZpbmUgdXBzdHJlYW0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmZXLDqG5jaWE+IFs8Y29taXNzacOzPl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMQorbXNnaWQgInVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInV0aWxpdHphIGwnZXN0cmF0w6hnaWEgZGUgZnVzacOzIGRvbmFkYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMzIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE1Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICJvcGNpw7MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNAorbXNnaWQgInBhc3MgdGhlIGFyZ3VtZW50IHRocm91Z2ggdG8gdGhlIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJwYXNzYSBsJ2FyZ3VtZW50IGEgbCdlc3RyYXTDqGdpYSBkZSBmdXNpw7MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNworbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgImZlcyDCq3JlYmFzZcK7IGRlIHRvdGVzIGxlcyBjb21pc3Npb25zIGFjY2Vzc2libGVzIGZpbnMgbCdhcnJlbCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU0Cittc2dpZCAiIgorInRoZSByZWJhc2UudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQhXG4iCisiU2VlIGl0cyBlbnRyeSBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYwCittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIlNlbWJsYSBxdWUgwqtnaXQgYW3CuyBlc3TDoCBlbiBjdXJzLiBObyBlcyBwb3QgZmVyIMKrcmViYXNlwrsuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDEKKyMsIGZ1enp5Cittc2dpZCAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiZXJyb3I6IG5vIGVzIHBvdCBjb21iaW5hciDCqy0tcHJlc2VydmUtbWVyZ2VzwrsgYW1iIMKrLS1yZWJhc2UtbWVyZ2VzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwNgorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgImVycm9yOiBubyBlcyBwb3QgY29tYmluYXIgwqstLXJlYmFzZS1tZXJnZXPCuyBhbWIgwqstLXN0cmF0ZWd5wrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwOAorIywgZnV6enkKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciCittc2dzdHIgImVycm9yOiBubyBlcyBwb3QgY29tYmluYXIgwqstLXJlYmFzZS1tZXJnZXPCuyBhbWIgwqstLXN0cmF0ZWd5wrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYxMgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgIk5vIGhpIGhhIHVuIMKrcmViYXNlwrsgZW4gY3Vycz8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYxNgorbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiTCdhY2Npw7MgLS1lZGl0LXRvZG8gbm9tw6lzIGVzIHBvdCB1c2FyIGR1cmFudCB1biDCq3JlYmFzZcK7IGludGVyYWN0aXUuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MzkKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJObyBlcyBwb3QgbGxlZ2lyIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MQorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIkhldSBkJ2VkaXRhciB0b3RzIGVscyBjb25mbGljdGVzIGRlIGZ1c2nDsyBpIGRlc3Byw6lzXG4iCisibWFyY2FyLWxvcyBjb20gYSByZXNvbHRzIGZlbnQgc2VydmlyIGdpdCBhZGQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY3MAorbXNnaWQgImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIm5vIHMnaGFuIHBvZ3V0IGRlc2NhcnRhciBlbHMgY2FudmlzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdG9ybmFyIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTczNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICVzIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQlc1xuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCVzXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS5cbiIKK21zZ3N0ciAiIgorIlNlbWJsYSBxdWUgamEgaGkgaGEgdW4gZGlyZWN0b3JpICRzdGF0ZV9kaXJfYmFzZSwgaVxuIgorImVtIHByZWd1bnRvIHNpIGVzdGV1IGVubWlnIGQndW4gYWx0cmUgwqtyZWJhc2XCuy4gU2kgYXF1ZXN0IMOpcyBlbFxuIgorImNhcywgcHJvdmV1XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiU2kgbm8gw6lzIGVsIGNhcywgXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImkgZXhlY3V0ZXUtbWUgZGUgbm91LiBNJ2F0dXJvIHBlciBzaSBlbmNhcmEgaGkgdGVuaXUgYWxndW5hIGNvc2FcbiIKKyJkZSB2YWxvci4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1NworbXNnaWQgInN3aXRjaCBgQycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiwqtzd2l0Y2jCuyDCq2PCuyBlc3BlcmEgdW4gdmFsb3IgbnVtw6hyaWMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICJNb2RlIGRlc2NvbmVndXQ6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MjAKK21zZ2lkICItLXN0cmF0ZWd5IHJlcXVpcmVzIC0tbWVyZ2Ugb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1zdHJhdGVneSByZXF1ZXJlaXggLS1tZXJnZSBvIC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2MAorIywgZnV6enkKK21zZ2lkICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWlyZXMgLS1leGVjIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tc3RyYXRlZ3kgcmVxdWVyZWl4IC0tbWVyZ2UgbyAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NzIKK21zZ2lkICJjYW5ub3QgY29tYmluZSBhbSBvcHRpb25zIHdpdGggZWl0aGVyIGludGVyYWN0aXZlIG9yIG1lcmdlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODkxCisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKK21zZ3N0ciAiZXJyb3I6IG5vIGVzIHBvdCBjb21iaW5hciDCqy0tcHJlc2VydmUtbWVyZ2VzwrsgYW1iIMKrLS1yZWJhc2UtbWVyZ2VzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5NQorIywgZnV6enkKK21zZ2lkICIiCisiZXJyb3I6IGNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjJyIKK21zZ3N0ciAiZXJyb3I6IG5vIGVzIHBvdCBjb21iaW5hciDCqy0tcHJlc2VydmUtbWVyZ2VzwrsgYW1iIMKrLS1yZWJhc2UtbWVyZ2VzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgImZvbnQgbm8gdsOgbGlkYTogwqslc8K7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MjUKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciB1bmEgY29taXNzacOzIGFycmVsIG5vdmEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIHdpdGggYnJhbmNoIgorbXNnc3RyICJDYWwgZXhhY3RhbWVudCB1biByYW5nLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIkNhbCBleGFjdGFtZW50IHVuIHJhbmcuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIk5vIGFzc2VueWFsYSB1bmEgY29taXNzacOzIHbDoGxpZGE6ICRvbnRvX25hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICJmYXRhbDogbm8gaGkgaGEgdGFsIGJyYW5jYTogJGJyYW5jaF9uYW1lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIk5vIGhpIGhhIHRhbCByZWZlcsOobmNpYTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAwNgorIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHRvIGEgcmV2aXNpb24iCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgbGEgY29taXNzacOzIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0NAorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIk5vIGVzIHBvdCBlbW1hZ2F0emVtYXIgYXV0b23DoHRpY2FtZW50IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgImZpbmFsIGRlIGZpdHhlciBpbmVzcGVyYXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZGlyZWN0b3JpIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJXNcbiIKK21zZ3N0ciAiUydoYSBjcmVhdCB1biBtYWdhdHplbSBhdXRvbcOgdGljOiAkc3Rhc2hfYWJicmV2IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTkKKyMsIGZ1enp5Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXIgb3JpZy1oZWFkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNjgKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJDb21ldGV1LWxvcyBvIGVtbWFnYXR6ZW1ldS1sb3MuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY29tbXV0YXIgYSAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTE5Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiSEVBRCBlc3TDoCBhbCBkaWEuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAiTGEgYnJhbmNhIGFjdHVhbCAlcyBlc3TDoCBhbCBkaWEuXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIkxhIGJyYW5jYSBhY3R1YWwgZXN0w6AgYWwgZGlhLCDCq3JlYmFzZcK7IGZvcsOnYXQuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC5cbiIKK21zZ3N0ciAiTGEgYnJhbmNhIGFjdHVhbCAlcyBlc3TDoCBhbCBkaWE7IMKrcmViYXNlwrsgZm9yw6dhdC5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIkVsIGxsaWdhbSBwcmUtwqtyZWJhc2XCuyBoYSByZWZ1c2F0IGEgZmVyIMKrcmViYXNlwrsuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiQ2FudmlzIGEgICVzOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICJDYW52aXMgZGUgJXMgYSAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLlxuIgorbXNnc3RyICIiCisiUHJpbWVyLCBzJ2VzdMOgIHJlYm9iaW5hbnQgSEVBRCBwZXIgYSByZXByb2R1aXIgZWwgdm9zdHJlIHRyZWJhbGwgYWwgIgorImRhbXVudC4uLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODMKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgc2VwYXJhciBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJXMgdG8gJXMuXG4iCittc2dzdHIgIkF2YW7DpyByw6BwaWQgJXMgYSAlcy5cbiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzozMgorbXNnaWQgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorbXNnc3RyICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MzAKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJQZXIgZGVmZWN0ZSwgZXMgZGVuZWdhIGFjdHVhbGl0emFyIGxhIGJyYW5jYSBhY3R1YWwgZW4gdW4gZGlww7JzaXQgbm9cbiIKKyJudSwgcGVycXXDqCBmYXJpYSBsJ8OtbmRleCBpIGwnYXJicmUgZGUgdHJlYmFsbCBpbmNvbnNpc3RlbnRzIGFtYiBlbFxuIgorInF1ZSBow6BnaXUgcHVqYXQsIGkgcmVxdWVyaXJpYSAnZ2l0IHJlc2V0IC0taGFyZCcgcGVyIGEgZmVyIHF1ZVxuIgorImwnYXJicmUgZGUgdHJlYmFsbCBjb2luY2lkZWl4aSBhbWIgSEVBRC5cbiIKKyJcbiIKKyJQb2RldSBlc3RhYmxpciBsYSB2YXJpYWJsZSBkZSBjb25maWd1cmFjacOzXG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGEgJ2lnbm9yZScgbyAnd2FybicgZW4gZWwgZGlww7JzaXQgcmVtb3RcbiIKKyJwZXIgYSBwZXJtZXRyZSBwdWphciBhIGxhIHNldmEgYnJhbmNhIGFjdHVhbDsgbm8gb2JzdGFudCwgbm8gZXNcbiIKKyJyZWNvbWFuYSBhaXjDsiBhIG1lbnlzIHF1ZSBow6BnaXUgZGVjaWRpdCBhY3R1YWxpdHphciBlbCBzZXUgYXJicmUgZW5cbiIKKyJhbGd1bmEgYWx0cmEgbWFuZXJhIHBlciBhIGNvaW5jaWRpciBhbWIgZWwgcXVlIGjDoGdpdSBwdWphdC5cbiIKKyJcbiIKKyJQZXIgYSBzaWxlbmNpYXIgYXF1ZXN0IG1pc3NhdGdlIGkgbWFudGVuaXIgZWwgY29tcG9ydGFtZW50XG4iCisicHJlZGV0ZXJtaW5hdCwgZXN0YWJsaXUgbGEgdmFyaWFibGUgZGUgY29uZmlndXJhY2nDs1xuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBhICdyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NTAKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlBlciBkZWZlY3RlLCBlcyBkZW5lZ2Egc3VwcmltaXIgbGEgYnJhbmNhIGFjdHVhbCwgcGVycXXDqCBlbFxuIgorIidnaXQgY2xvbmUnIHNlZ8O8ZW50IG5vIHJlc3VsdGFyw6AgZW4gY2FwIGZpdHhlciBhZ2FmYXQsIGNhdXNhbnRcbiIKKyJjb25mdXNpw7MuXG4iCisiXG4iCisiUG9kZXUgZXN0YWJsaXIgbGEgdmFyaWFibGUgZGUgY29uZmlndXJhY2nDs1xuIgorIidyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBhICd3YXJuJyBvICdpZ25vcmUnIGVuIGVsIGRpcMOyc2l0IHJlbW90XG4iCisicGVyIGEgcGVybWV0cmUgc3VwcmltaXIgbGEgYnJhbmNhIGFjdHVhbCwgYW1iIHVuIG1pc3NhdGdlXG4iCisiZCdhZHZlcnTDqG5jaWEgbyBzZW5zZS5cbiIKKyJcbiIKKyJQZXIgYSBzaWxlbmNpYXIgYXF1ZXN0IG1pc3NhdGdlLCBwb2RldSBlc3RhYmxpci1sYSBhICdyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTM2Cittc2dpZCAicXVpZXQiCittc2dzdHIgInNpbGVuY2nDs3MiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MAorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJIZXUgZCdlc3BlY2lmaWNhciB1biBkaXJlY3RvcmkuIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjE3Cittc2dpZCAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyMgorbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NjcgYnVpbHRpbi9yZWZsb2cuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW5hIG1hcmNhIGRlIHRlbXBzIHbDoGxpZGEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICJyZXTDqW4gZWxzIG9iamVjdGVzIGluYWJhc3RhYmxlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIG5vd2hlcmUhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk1CisjLCBmdXp6eQorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICJjYXAgcmVtb3QgZXNwZWNpZmljYXQiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZWZsb2c6ICVzIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIGRlIHJlZ2lzdHJlIHBlciDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdCBkZSByZWZlcsOobmNpYSBubyB2w6BsaWQ6ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc2NAorbXNnaWQgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jYT5dIFstbSA8bWVzdHJhPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5vbT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTggYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8YW50aWM+IDxub3U+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDxub20+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNhPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMgorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdydXA+IHwgPHJlbW90PikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5vbT4gPGJyYW5jYT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUgYnVpbHRpbi9yZW1vdGUuYzo3NAorbXNnaWQgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxub20+IDx1cmwtbm91PiBbPHVybC1hbnRpYz5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5vbT4gPHVybC1ub3U+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5vbT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzMKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8b3BjaW9ucz5dIDxub20+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUzCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bm9tPiA8YnJhbmNhPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5vbT4gPGJyYW5jYT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTkKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxvcGNpb25zPl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wY2lvbnM+XSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wY2lvbnM+XSBbPGdydXA+IHwgPHJlbW90Pl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIlMnZXN0w6AgYWN0dWFsaXR6YW50ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMAorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyItLW1pcnJvciDDqXMgcGVyaWxsw7NzIGkgZXN0w6AgZW4gZGVzw7pzOyBcbiIKKyJcdCB1c2V1IC0tbWlycm9yPWZldGNoIG9cbiIKKyJcdCAtLW1pcnJvcj1wdXNoIGVuIGxsb2MgZCdhaXjDsiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJwYXLDoG1ldHJlIGRlIHJlZmxleGnDsyBkZXNjb25lZ3V0OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICJvYnTDqW4gbGVzIGJyYW5xdWVzIHJlbW90ZXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY1Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiZW4gb2J0ZW5pciwgaW1wb3J0YSB0b3RlcyBsZXMgZXRpcXVldGVzIGkgdG90cyBlbHMgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY4Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICJvIG5vIG9idGluZ3VpcyBjYXAgZXRpcXVldGEgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiYnJhbnF1ZXMgYSBzZWd1aXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAiYnJhbmNhIG1lc3RyYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzMKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAiZXN0YWJsZWl4IGVsIHJlbW90IGNvbSBhIG1pcmFsbCBhbCBxdWFsIHB1amFyIG8gZGVsIHF1YWwgb2J0ZW5pciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICJlc3BlY2lmaWNhciB1bmEgYnJhbmNhIG1lc3RyYSBubyB0w6kgc2VudGl0IGFtYiAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisiZXNwZWNpZmljYXIgbGVzIGJyYW5xdWVzIGEgc2VndWlyIHTDqSBzZW50aXQgbm9tw6lzIGFtYiBtaXJhbGxzIGQnb2J0ZW5jacOzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NCBidWlsdGluL3JlbW90ZS5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJlbCByZW1vdCAlcyBqYSBleGlzdGVpeC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk4IGJ1aWx0aW4vcmVtb3RlLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW4gbm9tIGRlIHJlbW90IHbDoGxpZCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNvbmZpZ3VyYXIgbGEgbWVzdHJhIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgZWwgbWFwYSBkJ29idGVuY2nDsyBkZSBsJ2VzcGVjaWZpY2FjacOzIGRlIHJlZmVyw6huY2lhICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MyBidWlsdGluL3JlbW90ZS5jOjQ1MQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihjb2luY2lkZW50KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTUKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKHN1cHJpbWlyKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MjkgYnVpbHRpbi9yZW1vdGUuYzo3NjQgYnVpbHRpbi9yZW1vdGUuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICclcyciCittc2dzdHIgIk5vIGV4aXN0ZWl4IGVsIHJlbW90IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY2FudmlhciBlbCBub20gZGUgbGEgc2VjY2nDsyBkZSBjb25maWd1cmFjacOzIMKrJXPCuyBhIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiTm8gcydlc3TDoCBhY3R1YWxpdHphbnQgbCdlc3BlY2lmaWNhY2nDsyBkZSByZWZlcsOobmNpZXMgZCdvYnRlbmNpw7Mgbm8gcGVyICIKKyJkZWZlY3RlXG4iCisiXHQlc1xuIgorIlx0QWN0dWFsaXR6ZXUgbGEgY29uZmlndXJhY2nDsyBtYW51YWxtZW50IHNpIMOpcyBuZWNlc3NhcmkuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGEgc3VwcmVzc2nDsyBkZSDCqyVzwrsgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGEgY3JlYWNpw7MgZGUgwqslc8K7IGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDEKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIk5vdGE6IFVuYSBicmFuY2EgZm9yYSBkZSBsYSBqZXJhcnF1aWEgcmVmcy9yZW1vdGVzLyBubyBzJ2hhIGVsaW1pbmF0O1xuIgorInBlciBhIHN1cHJpbWlyLWxhLCB1c2V1OiIKK21zZ3N0clsxXSAiIgorIk5vdGE6IEFsZ3VuZXMgYnJhbnF1ZXMgZm9yYSBkZSBsYSBqZXJhcnF1aWEgcmVmcy9yZW1vdGVzLyBubyBzJ2hhbiAiCisiZWxpbWluYXQ7XG4iCisicGVyIGEgc3VwcmltaXItbGVzLCB1c2V1OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVsaW1pbmFyIGxhIHNlY2Npw7MgZGUgY29uZmlndXJhY2nDsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIG5vdSAobGEgcHLDsnhpbWEgb2J0ZW5jacOzIGVtbWFnYXR6ZW1hcsOgIGEgcmVtb3Rlcy8lcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE5Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiBzZWd1aXQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBlc3RhbmNhdCAodXNldSAnZ2l0IHJlbW90ZSBwcnVuZScgcGVyIGEgZWxpbWluYXIpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMworbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAiYnJhbmNoLiVzLm1lcmdlIG5vIHbDoGxpZDsgbm8gZXMgcG90IGZlciDCq3JlYmFzZcK7IHNvYnJlID4gMSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiZXMgZmEgwqtyZWJhc2XCuyBpbnRlcmFjdGl2YW1lbnQgc29icmUgZWwgcmVtb3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiZXMgZmEgwqtyZWJhc2XCuyBpbnRlcmFjdGl2YW1lbnQgc29icmUgZWwgcmVtb3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgImVzIGZhIMKrcmViYXNlwrsgc29icmUgZWwgcmVtb3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgImVzIGZ1c2lvbmEgYW1iIGVsIHJlbW90ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgImVzIGZ1c2lvbmEgYW1iIGVsIHJlbW90ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIGkgYW1iIGVsIHJlbW90ICVzXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiY3JlYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJzdXByaW1laXgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzOAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgImFsIGRpYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQxCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAiYXZhbsOnIHLDoHBpZCBwb3NzaWJsZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQ0Cittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxvY2FsIG5vIGFjdHVhbGl0emF0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgZm9yw6dhIGEgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgcHVqYSBhICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgZm9yw6dhIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHB1amEgYSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI5Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgIm5vIGNvbnN1bHRpcyBlbHMgcmVtb3RzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogcmVtb3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIGQnb2J0ZW5jacOzOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU4IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NCBidWlsdGluL3JlbW90ZS5jOjEzMTMKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKHNlbnNlIFVSTCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MiBidWlsdGluL3JlbW90ZS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCBkZSBwdWphZGE6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYgYnVpbHRpbi9yZW1vdGUuYzoxMTc4IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBCcmFuY2EgZGUgSEVBRDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIihubyBjb25zdWx0YXQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzgKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIihkZXNjb25lZ3V0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiIKKyIgIEJyYW5jYSBkZSBIRUFEIChsYSBIRUFEIHJlbW90IMOpcyBhbWJpZ3VhLCBwb3Qgc2VyIHVuIGRlbHMgc2Vnw7xlbnRzKTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgQnJhbmNhIHJlbW90YTolcyIKK21zZ3N0clsxXSAiICBCcmFucXVlcyByZW1vdGVzOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTcgYnVpbHRpbi9yZW1vdGUuYzoxMjIzCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKGVzdGF0IG5vIGNvbnN1bHRhdCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNgorbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgIEJyYW5jYSBsb2NhbCBjb25maWd1cmFkYSBwZXIgYSDCq2dpdCBwdWxswrs6IgorbXNnc3RyWzFdICIgIEJyYW5xdWVzIGxvY2FscyBjb25maWd1cmFkZXMgcGVyIGEgwqtnaXQgcHVsbMK7OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE0Cittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICDCq2dpdCBwdXNowrsgcmVmbGVjdGlyw6AgbGVzIHJlZmVyw6huY2llcyBsb2NhbHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBSZWZlcsOobmNpYSBsb2NhbCBjb25maWd1cmFkYSBwZXIgYSDCq2dpdCBwdXNowrslczoiCittc2dzdHJbMV0gIiAgUmVmZXLDqG5jaWVzIGxvY2FscyBjb25maWd1cmFkZXMgcGVyIGEgwqtnaXQgcHVzaMK7JXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDEKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgImVzdGFibGVpeCByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQgc2Vnb25zIGVsIHJlbW90IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDMKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICJzdXByaW1laXggcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTgKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICJObyBlcyBwb3QgZGV0ZXJtaW5hciBsYSBIRUFEIHJlbW90YSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjYwCittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIk3Dumx0aXBsZXMgYnJhbnF1ZXMgZGUgSEVBRCByZW1vdGVzLiBUcmlldS1uZSB1bmEgZXhwbMOtY2l0YW1lbnQgYW1iOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgc3VwcmltaXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJObyDDqXMgdW5hIHJlZmVyw6huY2lhIHbDoGxpZGE6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNvbmZpZ3VyYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgZXMgdG9ybmFyw6AgcGVuamFudCEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBzJ2hhIHRvcm5hdCBwZW5qYW50ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIlMnZXN0w6AgcG9kYW50ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFtwb2RhcmlhXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBbcG9kYXRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzQKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJwb2RhIGVscyByZW1vdHMgZGVzcHLDqXMgZCdvYnRlbmlyLWxvcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM3IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5MSBidWlsdGluL3JlbW90ZS5jOjE1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiTm8gaGkgaGEgdGFsIHJlbW90IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUzCittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAiYWZlZ2VpeCBicmFuY2EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImNhcCByZW1vdCBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDc3Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgImNvbnN1bHRhIGVscyBVUkwgZGUgcHVqYWRhIGVuIGxsb2MgZGVscyBVUkwgZCdvYnRlbmNpw7MiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3OQorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAicmV0b3JuYSB0b3RzIGVscyBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUwNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICJjYXAgVVJMIGNvbmZpZ3VyYXQgcGVyIGFsIHJlbW90IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTMzCittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIm1hbmlwdWxhIGVscyBVUkwgZGUgcHVqYWRhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzUKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJhZmVnZWl4IFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM3Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgInN1cHJpbWVpeCBlbHMgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDQKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkIC0tZGVsZXRlIG5vIHTDqSBzZW50aXQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIlBhdHLDsyBkJ1VSTCBhbnRpYyBubyB2w6BsaWQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCB0YWwgVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkzCittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICJObyBzZSBzdXByaW1pcmFuIHRvdHMgZWxzIFVSTCBubyBkZSBwdWphZGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI4Cittc2dpZCAiIgorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCittc2dzdHIgIiIKKyJFbHMgcmVlbXBhcXVldGFtZW50cyBpbmNyZW1lbnRhbHMgc8OzbiBpbmNvbXBhdGlibGVzIGFtYiBlbHMgw61uZGV4cyBkZSAiCisiYml0bWFwcy4gIFVzZXVcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvIGluaGFiaWxpdGV1IGVsIHBhcsOgbWV0cmUgZGUgY29uZmlndXJhY2nDsyBwYWNrLiIKKyJ3cml0ZWJpdG1hcHMuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5MQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMzAgYnVpbHRpbi9yZXBhY2suYzo0MTYKK21zZ2lkICJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyNTQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICJlbXBhcXVldGEtaG8gdG90IGVuIHVuIMO6bmljIHBhcXVldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTQKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICJlbCBtYXRlaXggcXVlIC1hLCBpIHNvbHRhIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk3Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICJlbGltaW5hIGVscyBwYXF1ZXRzIHJlZHVuZGFudHMsIGkgZXhlY3V0ZXUgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTkKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2EgLS1uby1yZXVzZS1kZWx0YSBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAxCittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzYSAtLW5vLXJldXNlLW9iamVjdCBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAzCittc2dpZCAiZG8gbm90IHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorbXNnc3RyICJubyBleGVjdXRpcyBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzYSAtLWxvY2FsIGEgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgImVzY3JpdSDDrW5kZXggZGUgbWFwYSBkZSBiaXRzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorIywgZnV6enkKK21zZ2lkICJwYXNzIC0tZGVsdGEtaXNsYW5kcyB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzYSAtLWxvY2FsIGEgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTEKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAiZGF0YSBhcHJveGltYWRhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgImFtYiAtQSwgbm8gc29sdGlzIGVscyBvYmplY3RlcyBtw6lzIHZlbGxzIHF1ZSBhcXVlc3QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImFtYiAtYSwgcmVlbXBhcXVldGEgZWxzIG9iamVjdGVzIGluYWJhc3RhYmxlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTYKK21zZ2lkICJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgIm1pZGEgZGUgbGEgZmluZXN0cmEgcXVlIHMndXNhIHBlciBhIGNvbXByZXNzacOzIGRlIGRpZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTcgYnVpbHRpbi9yZXBhY2suYzozMjMKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAib2N0ZXRzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxOAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisiZWwgbWF0ZWl4IHF1ZSBsJ2FudGVyaW9yLCBwZXLDsiBsaW1pdGEgbGEgbWlkYSBkZSBtZW3DsnJpYSBlbiBsbG9jIGRlbCBub21icmUgIgorImQnZW50cmFkZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJsaW1pdGEgbGEgcHJvZnVuZGl0YXQgbcOgeGltYSBkZSBsZXMgZGlmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAibGltaXRhIGVsIG5vbWJyZSBtw6B4aW0gZGUgZmlscyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAibWlkYSBtw6B4aW1hIGRlIGNhZGEgZml0eGVyIGRlIHBhcXVldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjYKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAicmVlbXBhcXVldGEgZWxzIG9iamVjdGVzIGVuIHBhcXVldHMgbWFyY2F0cyBhbWIgLmtlZXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4CisjLCBmdXp6eQorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICJjcmVhIHBhcXVldHMgcHJpbXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzM4Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAibm8gZXMgcG9kZW4gc3VwcmltaXIgcGFxdWV0cyBlbiB1biBkaXDDsnNpdCBkJ29iamVjdGVzIHByZWNpb3NvcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNDIKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSBpIC1BIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjUKKyMsIGZ1enp5Cittc2dpZCAiTm90aGluZyBuZXcgdG8gcGFjay4iCittc2dzdHIgInVzYSBlbCBwYXF1ZXQgcHJpbSIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZWxpbWluYXIgwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0ZT4gPHJlZW1wbGHDp2FtZW50PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdGU+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbWlzc2nDsz4gWzxtYXJlPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjYKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdGU+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXRyw7M+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiCittc2dzdHIgIm5vIHMnaGEgdHJvYmF0IGxhIGJyYW5jYSDCqyVzwrsuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAic3VwcmltZWl4IGxlcyByZWZlcsOobmNpZXMgcmVlbXBsYcOnYWRlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICLCqyVzwrsgbm8gw6lzIHVuIG5vbSBkZSByZW1vdCB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZWwgZGVzdMOtIMKrJXPCuyBqYSBleGlzdGVpeCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPYmplY3RzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZS5cbiIKKyInJXMnIHBvaW50cyB0byBhIHJlcGxhY2VkIG9iamVjdCBvZiB0eXBlICclcydcbiIKKyJ3aGlsZSAnJXMnIHBvaW50cyB0byBhIHJlcGxhY2VtZW50IG9iamVjdCBvZiB0eXBlICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgwqslc8K7IHBlciBhIGVzY3JpcHR1cmEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBvIGxsZWdpciAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCisjLCBmdXp6eQorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGwnYXJicmUgKCVzKSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjc2CisjLCBmdXp6eQorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gbWt0cmVlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBsJ2FyYnJlICglcykiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4NQorIywgZnV6enkKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAibGEgcmV2ZXJzacOzIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg5CisjLCBmdXp6eQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAiZWwgcmVtb3Qgbm8gaGEgZW52aWF0IHRvdHMgZWxzIG9iamVjdGVzIG5lY2Vzc2FyaXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZzdGF0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyICVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKKyMsIGZ1enp5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ29iamVjdGUgZGUgbm90YSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzIyIGJ1aWx0aW4vcmVwbGFjZS5jOjM3OCBidWlsdGluL3JlcGxhY2UuYzo0MjMKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIk5vIMOpcyB1biBub20gZCdvYmplY3RlIHbDoGxpZDogwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIGdyZXAgZGVzIGQndW4gb2JqZWN0ZSBkZSB0aXB1cyAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzQyCisjLCBmdXp6eQorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICJsYSBsZWN0dXJhIGRlIGxlcyByZWZlcsOobmNpZXMgZGUgYmlzZWNjacOzIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGxhIGNvbWlzc2nDsyBIRUFEIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJldGlxdWV0YSBkZSBmdXNpw7MgaW5jb3JyZWN0YSBlbiBsYSBjb21pc3Npw7Mgwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJldGlxdWV0YSBkZSBmdXNpw7MgbWFsIGZvcm1hZGEgZW4gbGEgY29taXNzacOzIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyJsYSBjb21pc3Npw7Mgb3JpZ2luYWwgwqslc8K7IGNvbnTDqSBsJ2V0aXF1ZXRhIGRlIGZ1c2nDsyDCqyVzwrsgcXVlIGVzIGRlc2NhcnRhOyAiCisidXNldSAtLWVkaXQgZW4gbGxvYyBkZSAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgImxhIGNvbWlzc2nDsyBvcmlnaW5hbCDCqyVzwrsgdMOpIHVuYSBzaWduYXR1cmEgZ3BnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjkKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAicydlbGltaW5hcsOgIGxhIHNpZ25hdHVyYSBlbiBsYSBjb21pc3Npw7MgZGUgcmVlbXBsYcOnYW1lbnQhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbGEgY29taXNzacOzIGRlIHJlZW1wbGHDp2FtZW50IHBlciBhOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJncmFmdCBmb3IgJyVzJyB1bm5lY2Vzc2FyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibGEgY29taXNzacOzIG5vdmEgw6lzIGxhIG1hdGVpeGEgcXVlIGwnYW50aWdhOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjb252ZXJ0IHRoZSBmb2xsb3dpbmcgZ3JhZnQocyk6XG4iCisiJXMiCittc2dzdHIgIkVsaW1pbmFyaWEgbCfDrXRlbSBzZWfDvGVudDoiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0NworbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICJsbGlzdGEgbGVzIHJlZmVyw6huY2llcyByZWVtcGxhw6dhZGVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICJzdXByaW1laXggbGVzIHJlZmVyw6huY2llcyByZWVtcGxhw6dhZGVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAiZWRpdGEgdW4gb2JqZWN0ZSBleGlzdGVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIKK21zZ3N0ciAiY2FudmlhIGxlcyBtYXJlcyBkJ3VuYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorIywgZnV6enkKK21zZ2lkICJjb252ZXJ0IGV4aXN0aW5nIGdyYWZ0IGZpbGUiCittc2dzdHIgImZvcsOnYSBsYSBzb2JyZWVzY3JpcHR1cmEgZGUgZml0eGVycyBleGlzdGVudHMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MgorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgInJlZW1wbGHDp2EgbGEgcmVmZXLDqG5jaWEgc2kgZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NAorbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAibm8gaW1wcmltZWl4aXMgYmVsbGFtZW50IGVscyBjb250aW5ndXRzIHBlciBhIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJ1c2EgYXF1ZXN0IGZvcm1hdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTY4CisjLCBmdXp6eQorbXNnaWQgIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciCittc2dzdHIgIi0tZml4LXRoaW4gbm8gZXMgcG90IHVzYXIgc2Vuc2UgLS1zdGRpbiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc2CisjLCBmdXp6eQorbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIi16IG5vbcOpcyB0w6kgc2VudGl0IGFtYiAtLXN0ZGluIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODAKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXJhdyBub23DqXMgdMOpIHNlbnRpdCBhbWIgLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODYKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkyCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIm5vbWJyZSBpbmNvcnJlY3RlIGQnYXJndW1lbnRzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1OTgKK21zZ2lkICItZSBuZWVkcyBleGFjdGx5IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWUgbmVjZXNzaXRhIGV4YWN0YW1lbnQgdW4gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNAorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWcgbmVjZXNzaXRhIGFsbWVueXMgdW4gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxMAorbXNnaWQgIi0tY29udmVydC1ncmFmdC1maWxlIHRha2VzIG5vIGFyZ3VtZW50IgorbXNnc3RyICItLWNvbnZlcnQtZ3JhZnQtZmlsZSBhcmd1bWVudHMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNgorbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgIm5vbcOpcyBlcyBwb3QgZXNwZWNpZmljYXIgdW4gcGF0csOzIGFtYiAtbCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxjYW3DrT4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgInJlZ2lzdHJhIGxlcyByZXNvbHVjaW9ucyBuZXRlcyBlbiBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICJzJ2hhIHBvZ3V0IGdlbmVyYXIgZWwgZGlmZiBwZXIgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMgorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29taXNzacOzPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworIywgZnV6enkKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPGFyYnJlPl0gWy0tXSA8Y2FtaW5zPi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPGFyYnJlPl0gWy0tXSBbPGNhbWlucz4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAibWl4dCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAic3VhdSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAiaGFyZCIKK21zZ3N0ciAiZHVyIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAiZnVzacOzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJrZWVwIgorbXNnc3RyICJyZXRlbmltZW50IgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODIKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAiTm8gdGVuaXUgdW4gSEVBRCB2w6BsaWQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHRyb2JhciBsJ2FyYnJlIGRlIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY2VyY2FyIGwnYXJicmUgZGUgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIGFyYSDDqXMgYSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJObyBlcyBwb3QgZmVyIHVuIHJlc3RhYmxpbWVudCBkZSAlcyBlbm1pZyBkJ3VuYSBmdXNpw7MuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk0IGJ1aWx0aW4vc3Rhc2guYzo1MTkgYnVpbHRpbi9zdGFzaC5jOjU5NAorIzogYnVpbHRpbi9zdGFzaC5jOjYxOAorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgInNpZ3VlcyBzaWxlbmNpw7NzLCBub23DqXMgaW5mb3JtYSBkJ2Vycm9ycyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJyZXN0YWJsZWl4IEhFQUQgaSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAicmVzdGFibGVpeCBub23DqXMgSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OSBidWlsdGluL3Jlc2V0LmM6MzAxCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAicmVzdGFibGVpeCBIRUFELCBsJ8OtbmRleCBpIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAicmVzdGFibGVpeCBIRUFEIHBlcsOyIHJldMOpbiBlbHMgY2FudmlzIGxvY2FscyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwOQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJyZWdpc3RyYSBub23DqXMgZWwgZmV0IHF1ZSBlbHMgY2FtaW5zIGVsaW1pbmF0cyBzJ2FmZWdpcmFuIGRlc3Byw6lzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVzb2xkcmUgwqslc8K7IGNvbSBhIHJldmlzacOzIHbDoGxpZGEuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiByZXNvbGRyZSDCqyVzwrsgY29tIGEgYXJicmUgdsOgbGlkLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2MAorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCDDqXMgaW5jb21wYXRpYmxlIGFtYiAtLXtoYXJkLG1peGVkLHNvZnR9IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1taXhlZCBhbWIgY2FtaW5zIGVzdMOgIGVuIGRlc8O6czsgdXNldSAnZ2l0IHJlc2V0IC0tIDxjYW1pbnM+JyBlbiBsbG9jICIKKyJkJ2FpeMOyLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIk5vIGVzIHBvdCByZXN0YWJsaXIgZGUgJXMgYW1iIGNhbWlucy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgImVsIHJlc3RhYmxpbWVudCBkZSAlcyBubyBlcyBwZXJtZXQgZW4gdW4gZGlww7JzaXQgbnUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTEKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiLU4gbm9tw6lzIGVzIHBvdCB1c2FyIGFtYiAtLW1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIkNhbnZpcyDCq3Vuc3RhZ2VkwrsgZGVzcHLDqXMgZGVsIHJlc3RhYmxpbWVudDoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0LiAgWW91IGNhblxuIgorInVzZSAnLS1xdWlldCcgdG8gYXZvaWQgdGhpcy4gIFNldCB0aGUgY29uZmlnIHNldHRpbmcgcmVzZXQucXVpZXQgdG8gdHJ1ZVxuIgorInRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHJlc3RhYmxpciBlbCBmaXR4ZXIgZCfDrW5kZXggYSBsYSByZXZpc2nDsyDCqyVzwrsuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBmaXR4ZXIgZCfDrW5kZXggbm91LiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQxMQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgIm5vIGVzIHBvdCBjb21iaW5hciAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBpIC0tbWlzc2luZyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ3MgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICJlbCBmaWx0cmF0Z2UgZCdvYmplY3RlcyByZXF1ZXJlaXggLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTIyCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJlbCByZXYtbGlzdCBubyBwZXJtZXQgbW9zdHJhciBub3RlcyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyNQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tdXNlLWJpdG1hcC1pbmRleCB3aXRoIG9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIm5vIGVzIHBvdCBjb21iaW5hciAtLXVzZS1iaXRtYXAtaW5kZXggYW1iIGVsIGZpbHRyYXRnZSBkJ29iamVjdGVzIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3BjaW9ucz5dIC0tIFs8cGFyw6BtZXRyZXM+Li4uXSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgInJldMOpbiBlbCDCqy0twrsgcGFzc2F0IGNvbSBhIHBhcsOgbWV0cmUiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE1Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICJkZWl4YSBkJ2FuYWxpdHphciBkZXNwcsOpcyBkZWwgcHJpbWVyIHBhcsOgbWV0cmUgbm8gZCdvcGNpw7MiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE4Cittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAiZW1ldCBlbiBmb3JtYSBsbGFyZ2EgZW5nYW54YWRhIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjU1MQorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wY2lvbnM+XSAtLSBbPHBhcsOgbWV0cmVzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8cGFyw6BtZXRyZT4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcGNpb25zPl0gWzxwYXLDoG1ldHJlPi4uLl1cbiIKKyJcbiIKKyJFeGVjdXRldSBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIHBlciBtw6lzIGluZm9ybWFjacOzIHNvYnJlIGwnw7pzICIKKyJpbmljaWFsLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs8b3BjaW9ucz5dIDxjb21pc3Npw7M+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPHN1Ym9yZHJlPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMAorbXNnaWQgImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCBjaGVycnktcGljayBbPG9wY2lvbnM+XSA8Y29taXNzacOzPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayA8c3Vib3JkcmU+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgImwnb3BjacOzIMKrJXPCuyBlc3BlcmEgdW4gbm9tYnJlIG1ham9yIHF1ZSB6ZXJvIgorCisjOiBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMgbm8gZXMgcG90IHVzYXIgYW1iICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImFjYWJhIGxhIHNlccO8w6huY2lhIGRlIHJldmVyc2nDsyBvIGVsIMKrY2hlcnJ5IHBpY2vCuyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJyZXByw6huIGxhIHNlccO8w6huY2lhIGRlIHJldmVyc2nDsyBvIGVsIMKrY2hlcnJ5IHBpY2vCuyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJjYW5jZWzCt2xhIGxhIHNlccO8w6huY2lhIGRlIHJldmVyc2nDsyBvIGVsIMKrY2hlcnJ5IHBpY2vCuyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAib21ldCBsYSBjb21pc3Npw7MgYWN0dWFsIGkgY29udGludWEiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgIm5vIGNvbWV0aXMgYXV0b23DoHRpY2FtZW50IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJlZGl0YSBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZWwgcGFyZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICJzZWxlY2Npb25hIGxhIGzDrW5pYSBwcmluY2lwYWwgZGVsIHBhcmUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdMOoZ2lhIGRlIGZ1c2nDsyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJvcGNpw7MgZCdlc3RyYXTDqGdpYSBkZSBmdXNpw7MiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJub20gZGUgbGEgY29taXNzacOzIGEgYW5uZXhhciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAicHJlc2VydmEgbGVzIGNvbWlzc2lvbnMgaW5pY2lhbG1lbnQgYnVpZGVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJyZXTDqW4gbGVzIGNvbWlzc2lvbnMgcmVkdW5kYW50cyBpIGJ1aWRlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJsYSByZXZlcnNpw7MgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL3JldmVydC5jOjI0NQorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiZWwgwqtjaGVycnkgcGlja8K7IGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9ybS5jOjE5Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gWzxvcGNpb25zPl0gWy0tXSA8Zml0eGVyPi4uLiIKKworIzogYnVpbHRpbi9ybS5jOjIwNworbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnc3RyWzBdICIiCisiZWwgZml0eGVyIHNlZ8O8ZW50IHTDqSBjb250aW5ndXQgwqtzdGFnZcK7IGRpZmVyZW50IGQnYW1iZMOzcyBlbFxuIgorImZpdHhlciBpIGxhIEhFQUQ6IgorbXNnc3RyWzFdICIiCisiZWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHRlbmVuIGNvbnRpbmd1dCDCq3N0YWdlwrsgZGlmZXJlbnQgZCdhbWJkw7NzXG4iCisiZWwgZml0eGVyIGkgbGEgSEVBRDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTIKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1c2V1IC1mIHBlciBhIGZvcsOnYXIgbCdlbGltaW5hY2nDsykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICJlbCBmaXR4ZXIgc2Vnw7xlbnQgdMOpIGNhbnZpcyDCq3N0YWdlZMK7IGVuIGwnw61uZGV4OiIKK21zZ3N0clsxXSAiZWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHRlbmVuIGNhbnZpcyDCq3N0YWdlZMK7IGVuIGwnw61uZGV4OiIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIodXNldSAtLWNhY2hlZCBwZXIgYSBtYW50ZW5pciBlbCBmaXR4ZXIsIG8gLWYgcGVyIGEgZm9yw6dhciBsJ2VsaW1pbmFjacOzKSIKKworIzogYnVpbHRpbi9ybS5jOjIyNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAiZWwgZml0eGVyIHNlZ8O8ZW50IHTDqSBtb2RpZmljYWNpb25zIGxvY2FsczoiCittc2dzdHJbMV0gImVscyBmaXR4ZXJzIHNlZ8O8ZW50cyB0ZW5lbiBtb2RpZmljYWNpb25zIGxvY2FsczoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDIKK21zZ2lkICJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIgorbXNnc3RyICJubyBsbGlzdGlzIGVscyBmaXR4ZXJzIGVsaW1pbmF0cyIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJub23DqXMgZWxpbWluYSBkZSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICJwYXNzYSBwZXIgYWx0IGxhIGNvbXByb3ZhY2nDsyBkJ2FjdHVhbGl0YXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAicGVybWV0IGwnZWxpbWluYWNpw7MgcmVjdXJzaXZhIgorCisjOiBidWlsdGluL3JtLmM6MjQ3Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgInN1cnQgYW1iIGVzdGF0IHplcm8gZW5jYXJhIHF1ZSByZXMgaGFnaSBjb2luY2lkaXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODkKKyMsIGZ1enp5Cittc2dpZCAicGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJGZXUgwqtzdGFnZcK7IGRlbHMgdm9zdHJlcyBjYW52aXMgYSAuZ2l0bW9kdWxlcyBvIGZldSDCq3N0YXNowrsgZGVscyBtYXRlaXhvcyAiCisicGVyIGEgcHJvY2VkaXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAibm8gcydlc3TDoCBlbGltaW5hbnQgwqslc8K7IHJlY3Vyc2l2YW1lbnQgc2Vuc2UgLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IG5vIHMnaGEgcG9ndXQgZWxpbWluYXIgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLSIKKyJwYWNrPTxwYXF1ZXQtZGVsLWdpdC1yZWNlaXZlPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSAiCisiWzxtw6BxdWluYT46XTxkaXJlY3Rvcmk+IFs8cmVmZXLDqG5jaWE+Li4uXVxuIgorIiAgLS1hbGwgaSBlc3BlY2lmaWNhY2nDsyA8cmVmZXLDqG5jaWE+IGV4cGzDrWNpdGEgc8OzbiBtw7p0dWFtZW50IGV4Y2xvZW50cy4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgIm5vbSBkZWwgcmVtb3QiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgInVzYSBlbCBwcm90b2NvbCBSUEMgc2Vuc2UgZXN0YXQiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc4Cittc2dpZCAicmVhZCByZWZzIGZyb20gc3RkaW4iCittc2dzdHIgImxsZWdlaXggbGVzIHJlZmVyw6huY2llcyBkZXMgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiaW1wcmltZWl4IGwnZXN0YXQgZGVzIGRlIGwnYWp1ZGFudCByZW1vdCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE0CisjLCBmdXp6eQorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs8b3BjaW9ucz5dIFs8cmFuZy1kZS1yZXZpc2lvbnM+XSBbWy0tXSBbPGNhbcOtPi4uLl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjQKK21zZ2lkICJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIgorbXNnc3RyICJBZ3J1cGEgcGVyIMKrY29taXR0ZXLCuyBlbiBjb21wdGVzIGRlIHBlciBhdXRvciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAib3JkZW5hIGxhIHNvcnRpZGEgc2Vnb25zIGVsIG5vbWJyZSBkZSBjb21pc3Npb25zIHBlciBhdXRvciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2OAorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICIiCisiT21ldCBsZXMgZGVzY3JpcGNpb25zIGRlIGNvbWlzc2nDsywgbm9tw6lzIHByb3ZlZWl4IGVsIHJlY29tcHRlIGRlIGNvbWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzAKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICJNb3N0cmEgbCdhZHJlw6dhIGVsZWN0csOybmljYSBkZSBjYWRhIGF1dG9yIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcxCittc2dpZCAiPHc+Wyw8aTE+Wyw8aTI+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiQWp1c3RhIGxlcyBsw61uaWVzIGRlIGxhIHNvcnRpZGEiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDEKKyMsIGZ1enp5Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiaGkgaGEgbWFzc2EgYXJndW1lbnRzIHBlciBhIGRlc2Fzc2lnbmFyIGxhIGZvbnQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHF1YW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2aXNpw7M+IHwgPGdsb2I+KS4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxNworbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZmVyw6huY2lhPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gInMnZXN0w6AgaWdub3JhbnQgJXM7IG5vIGVzIHBvdCBnZXN0aW9uYXIgbcOpcyBkZSAlZCByZWZlcsOobmNpYSIKK21zZ3N0clsxXSAicydlc3TDoCBpZ25vcmFudCAlczsgbm8gZXMgcG9kZW4gZ2VzdGlvbmFyIG3DqXMgZGUgJWQgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAibm8gaGkgaGEgcmVmZXLDqG5jaWVzIGNvaW5jaWRlbnRzIGFtYiAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAibW9zdHJhIGxlcyBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IGkgbGVzIGxvY2FscyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJtb3N0cmEgbGVzIGJyYW5xdWVzIGFtYiBzZWd1aW1lbnQgcmVtb3QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDkKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICJjb2xvcmEgJyohKy0nIGNvcnJlc3BvbmVudCBhIGxhIGJyYW5jYSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MQorbXNnaWQgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIgorbXNnc3RyICJtb3N0cmEgPG4+IGNvbWlzc2lvbnMgZGVzcHLDqXMgZGUgbCdhdmFudHBhc3NhdCBjb23DuiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAic2luw7JuaW0gZGUgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJvbWV0IGFub21lbmFyIGNhZGVuZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5jbG91IGxhIGJyYW5jYSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTgKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgImFub21lbmEgbGVzIGNvbWlzc2lvbnMgYW1iIGVscyBzZXVzIG5vbXMgZCdvYmplY3RlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAibW9zdHJhIGxlcyBiYXNlcyBkZSBmdXNpw7MgcG9zc2libGVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYyCittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAibW9zdHJhIGxlcyByZWZlcsOobmNpZXMgaW5hYmFzdGFibGVzIGRlIHF1YWxzZXZvbCBhbHRyYSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAibW9zdHJhIGxlcyBjb21pc3Npb25zIGVuIG9yZHJlIHRvcG9sw7JnaWMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyBsZXMgY29taXNzaW9ucyBxdWUgbm8gc2lndWluIGVuIGxhIHByaW1lcmEgYnJhbmNhIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY5Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICJtb3N0cmEgbGVzIGZ1c2lvbnMgYWJhc3RhYmxlcyBkZSBub23DqXMgdW5hIHB1bnRhIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICJvcmRlbmEgdG9wb2zDsmdpY2FtZW50LCBtYW50ZW5pbnQgbCdvcmRyZSBkZSBkYXRlcyBvbiBzaWd1aSBwb3NzaWJsZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIm1vc3RyYSBsZXMgPG4+IGVudHJhZGVzIG3DqXMgcmVjZW50cyBjb21lbsOnYW50IGEgbGEgYmFzZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcxMQorbXNnaWQgIiIKKyItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIKK21zZ3N0ciAiIgorIi0tcmVmbG9nIMOpcyBpbmNvbXBhdGlibGUgYW1iIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgbyAtLW1lcmdlLWJhc2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzUKK21zZ2lkICJubyBicmFuY2hlcyBnaXZlbiwgYW5kIEhFQUQgaXMgbm90IHZhbGlkIgorbXNnc3RyICJubyBzJ2hhIGRvbmF0IGNhcCBicmFuY2EsIGkgSEVBRCBubyDDqXMgdsOgbGlkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM4Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAibCdvcGNpw7MgLS1yZWZsb2cgbmVjZXNzaXRhIHVuIG5vbSBkZSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAiZXMgcG90IG1vc3RyYXIgbm9tw6lzICVkIGVudHJhZGEgYSBsYSB2ZWdhZGEuIgorbXNnc3RyWzFdICJlcyBwb2RlbiBtb3N0cmFyIG5vbcOpcyAlZCBlbnRyYWRlcyBhIGxhIHZlZ2FkYS4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWYgJXMiCittc2dzdHIgIm5vIGhpIGhhIHRhbCByZWZlcsOobmNpYSAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAibm8gZXMgcG90IGdlc3Rpb25hciBtw6lzIGQnJWQgcmV2aXNpw7MuIgorbXNnc3RyWzFdICJubyBlcyBwb2RlbiBnZXN0aW9uYXIgbcOpcyBkZSAlZCByZXZpc2lvbnMuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1bmEgcmVmZXLDqG5jaWEgdsOgbGlkYS4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgIm5vIGVzIHBvdCB0cm9iYXIgbGEgY29taXNzacOzICVzICglcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHLDsz4uLi5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTMKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0csOzPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGxlcyBldGlxdWV0ZXMgKGVzIHBvdCBjb21iaW5hciBhbWIgaGVhZHMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAibW9zdHJhIG5vbcOpcyBlbHMgY2FwcyAoZXMgcG90IGNvbWJpbmFyIGFtYiB0YWdzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgIiIKKyJjb21wcm92YWNpw7MgZGUgcmVmZXLDqG5jaWEgbcOpcyBlc3RyaWN0YSwgcmVxdWVyZWl4IGVsIGNhbcOtIGRlIHJlZmVyw6huY2lhICIKKyJleGFjdGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAibW9zdHJhIGxhIHJlZmVyw6huY2lhIEhFQUQsIGVuY2FyYSBxdWUgZXMgZmlsdHLDqXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiZGVzcmVmZXJlbmNpYSBsZXMgZXRpcXVldGVzIGEgSUQgZCdvYmplY3RlIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTczCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJtb3N0cmEgZWwgaGFzaCBTSEExIHVzYW50IG5vbcOpcyA8bj4geGlmcmVzIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIm5vIGltcHJpbWVpeGlzIGVscyByZXN1bHRhdHMgYSBzdGRvdXQgKMO6dGlsIGFtYiAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJtb3N0cmEgbGVzIHJlZmVyw6huY2llcyBkZSBzdGRpbiBxdWUgbm8gc2lndWluIGVuIGVsIGRpcMOyc2l0IGxvY2FsIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIwCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSA8b3B0aW9ucz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo2MQorbXNnaWQgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMjAKK21zZ2lkICJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIzNworbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI1NgorbXNnaWQgImluaXRpYWxpemUgdGhlIHNwYXJzZS1jaGVja291dCBpbiBjb25lIG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNjIKKyMsIGZ1enp5Cittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIm9tZXQgbCdhcGxpY2FjacOzIGRlbCBmaWx0cmUgZCdhZ2FmYW1lbnQgcGFyY2lhbCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIG9icmlyICclcyciCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzYxCisjLCBmdXp6eQorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0ICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNzgKKyMsIGZ1enp5Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIgorbXNnc3RyICJsbGVnZWl4IGxlcyBhY3R1YWxpdHphY2lvbnMgZGVzIGRlIHN0ZGluIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM4NAorIywgZnV6enkKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJvbWV0IGwnYXBsaWNhY2nDsyBkZWwgZmlsdHJlIGQnYWdhZmFtZW50IHBhcmNpYWwiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDQ3CisjLCBmdXp6eQorbXNnaWQgImRpc2FibGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJvbWV0IGwnYXBsaWNhY2nDsyBkZWwgZmlsdHJlIGQnYWdhZmFtZW50IHBhcmNpYWwiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDU5CisjLCBmdXp6eQorbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMiBidWlsdGluL3N0YXNoLmM6MzcKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjMgYnVpbHRpbi9zdGFzaC5jOjQyCisjLCBmdXp6eQorbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs8b3BjaW9ucz5dIDxub20+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ3Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjIKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9ucz5dIFstbF0gWy1mXSA8bm9tLWRlLWJyYW5jYT4gWzxwdW50LWluaWNpYWw+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI3IGJ1aWx0aW4vc3Rhc2guYzo2NworbXNnaWQgImdpdCBzdGFzaCBjbGVhciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjggYnVpbHRpbi9zdGFzaC5jOjc3Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MzEgYnVpbHRpbi9zdGFzaC5jOjg0Cittc2dpZCAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIKK21zZ2lkICJnaXQgc3Rhc2ggcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NworbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzIKK21zZ2lkICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3MnIG5vIMOpcyB1bmEgY29taXNzacOzIGRlIHRpcHVzIG1hZ2F0emVtIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICJTJ2hhbiBlc3BlY2lmaWNhdCBtYXNzYSByZXZpc2lvbnM6ICRSRVYiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NDkKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgY2FwIMKrc3Rhc2jCuy4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1biBub20gZGUgcmVtb3QgdsOgbGlkIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjI0IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzUKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciBhbWIgcGFyw6BtZXRyZXMgbm8gZXN0w6AgaW1wbGVtZW50YXQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDMKKyMsIGZ1enp5Cittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJObyBlcyBwb3QgYXBsaWNhciB1biBtYWdhdHplbSBlbm1pZyBkJ3VuYSBmdXNpw7MiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGdlbmVyYXIgbGEgbGxpc3RhIHBlciBhIGZlciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyMQorIywgZnV6enkKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIkhpIGhhIGNvbmZsaWN0ZXMgZW4gbCfDrW5kZXguIFByb3ZldS1obyBzZW5zZSAtLWluZGV4LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyNworIywgZnV6enkKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGRlc2FyIGwnYXJicmUgZCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzYKKyMsIGZ1enp5Cittc2dpZCAiY291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2giCittc2dzdHIgIk5vIHMnaGFuIHBvZ3V0IHJlc3RhdXJhciBlbHMgZml0eGVycyBubyBzZWd1aXRzIGRlcyBkZWwgwqtzdGFzaMK7IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgIlMnZXN0w6AgZnVzaW9uYW50ICVzIGFtYiAlc1xuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYwIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJMJ8OtbmRleCBubyBlc3RhdmEgc2Vuc2UgZW1tYWdhdHplbWFyLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMSBidWlsdGluL3N0YXNoLmM6NjIwCisjLCBmdXp6eQorbXNnaWQgImF0dGVtcHQgdG8gcmVjcmVhdGUgdGhlIGluZGV4IgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAlcyAoJXMpIgorbXNnc3RyICIke1JFVn0gKCRzKSBkZXNjYXJ0YWRhIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogTm8gcydoYSBwb2d1dCBkZXNjYXJ0YXIgbCdlbnRyYWRhIGRlIG1hZ2F0emVtIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyBubyDDqXMgdW5hIHJlZmVyw6huY2lhIGRlIG1hZ2F0emVtIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjMyIGdpdC1sZWdhY3ktc3Rhc2guc2g6Njk1Cittc2dpZCAiVGhlIHN0YXNoIGVudHJ5IGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCittc2dzdHIgIkVzIGNvbnNlcnZhIGwnZW50cmFkYSDCq3N0YXNowrsgZW4gY2FzIHF1ZSBsYSBuZWNlc3NpdGV1IGFsdHJhIHZlZ2FkYS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTMKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkNhcCBub20gZGUgYnJhbmNhIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk1IGJ1aWx0aW4vc3Rhc2guYzo4MzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IGFjdHVhbGl0emFyICRyZWZfc3Rhc2ggYW1iICR3X2NvbW1pdCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxMyBidWlsdGluL3N0YXNoLmM6MTQ3MCBidWlsdGluL3N0YXNoLmM6MTUwNgorIywgZnV6enkKK21zZ2lkICJzdGFzaCBtZXNzYWdlIgorbXNnc3RyICJtaXNzYXRnZSBkJ2V0aXF1ZXRhIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODIzCisjLCBmdXp6eQorbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICItLWJpc2VjdC1jbGVhbi1zdGF0ZSBubyBhY2NlcHRhIHBhcsOgbWV0cmVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIk5vIGhpIGhhIGNhbnZpcyBzZWxlY2Npb25hdHMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTQ1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIkVuY2FyYSBubyB0ZW5pdSBsYSBjb21pc3Npw7MgaW5pY2lhbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiTm8gZXMgcG90IGRlc2FyIGwnZXN0YXQgZCfDrW5kZXggYWN0dWFsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE4MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE4MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIk5vIGVzIHBvZGVuIGRlc2FyIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTkyIGJ1aWx0aW4vc3Rhc2guYzoxMjAxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICJObyBlcyBwb3QgZGVzYXIgbCdlc3RhdCBkJ2FyYnJlIGRlIHRyZWJhbGwgYWN0dWFsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTIyOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIzNAorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICJObyBlcyBwb3QgcmVnaXN0cmFyIGwnZXN0YXQgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3OCBnaXQtbGVnYWN5LXN0YXNoLnNoOjMzOAorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIk5vIGVzIHBvZGVuIHVzYXIgLS1wYXRjaCBpIC0taW5jbHVkZS11bnRyYWNrZWQgbyAtLWFsbCBhIGxhIHZlZ2FkYSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTQKKyMsIGZ1enp5Cittc2dpZCAiRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPyIKK21zZ3N0ciAiUG90c2VyIHZvbMOtZXUgZGlyIMKrZ2l0IGFkZCAuwrs/XG4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzA5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzQ2Cittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJObyBoaSBoYSBjYW52aXMgbG9jYWxzIGEgZGVzYXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzE2IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIk5vIGVzIHBvdCBpbmljaWFsaXR6YXIgZWwgbWFnYXR6ZW0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzMxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJObyBlcyBwb3QgZGVzYXIgbCdlc3RhdCBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgIlMnaGFuIGRlc2F0IGVsIGRpcmVjdG9yaSBkZSB0cmViYWxsIGkgbCdlc3RhdCBkJ8OtbmRleCAkc3Rhc2hfbXNnIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQyNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM4NQorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiTm8gZXMgcG9kZW4gZWxpbWluYXIgZWxzIGNhbnZpcyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYxIGJ1aWx0aW4vc3Rhc2guYzoxNDk3CisjLCBmdXp6eQorbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgIkFjdHVhbGl0emEgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYzIGJ1aWx0aW4vc3Rhc2guYzoxNDk5Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NCBidWlsdGluL3N0YXNoLmM6MTUwMAorIywgZnV6enkKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICJzaWxlbmNpw7NzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NiBidWlsdGluL3N0YXNoLmM6MTUwMgorIywgZnV6enkKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAibW9zdHJhIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gY29sdW1uZXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY4IGJ1aWx0aW4vc3Rhc2guYzoxNTA0CisjLCBmdXp6eQorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICJlbGltaW5hIG5vbcOpcyBlbHMgZml0eGVycyBpZ25vcmF0cyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXhlY3V0YXIgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICIiCisib21ldCBpIGVsaW1pbmEgdG90ZXMgbGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIGFtYiBlbCBjYXLDoGN0ZXIgZGUgY29tZW50YXJpIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzo0MAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAiYW50ZXBvc2EgZWwgY2Fyw6BjdGVyIGRlIGNvbWVudGFyaSBpIHVuIGVzcGFpIGEgY2FkYSBsw61uaWEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIlMnZXNwZXJhIHVuIG5vbSBkZSByZWZlcsOobmNpYSBwbGUsIHMnaGEgcmVidXQgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGRlc3B1bGxhciB1biBjb21wb25lbnQgZGUgbCd1cmwgwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgwCittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiw6BuY29yYSBhbHRlcm5hdGl2YSBwZXIgYWxzIGNhbWlucyByZWxhdGl1cyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PGNhbcOtPl0gWzxjYW3DrT4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCBjYXAgdXJsIHBlciBhbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqslc8K7IGEgLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICJTJ2VzdMOgIGVudHJhbnQgYSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgIk9tZXQgbGEgc29ydGlkYSBlbiBlbnRyYXIgbCdvcmRyZSBkZSBjYWRhIHN1Ym3DsmR1bCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiSW5jbG91IHJlY3Vyc2l2YW1lbnQgZWxzIHN1Ym3DsmR1bHMgaW1icmljYXRzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTcyCisjLCBmdXp6eQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPG9yZHJlPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCB0cm9iYXIgbGEgY29uZmlndXJhY2nDsyDCqyVzwrsuIFMnYXNzdW1laXggcXVlIGFxdWVzdCBkaXDDsnNpdCDDqXMgIgorImVsIHNldSBkaXDDsnNpdCBmb250IGF1dG9yaXR6YXQuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVnaXN0cmFyIGwndXJsIHBlciBhbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIlMnaGEgcmVnaXN0cmF0IGVsIHN1Ym3DsmR1bCDCqyVzwrsgKCVzKSBwZXIgYWwgY2Ftw60gwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIiIKKyJhZHZlcnTDqG5jaWE6IHNlIHN1Z2dlcmVpeCBlbCBtb2RlIGQnYWN0dWFsaXR6YWNpw7MgcGVyIG9yZHJlIHBlciBhbCBzdWJtw7JkdWwgIgorIsKrJXPCu1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVnaXN0cmFyIGVsIG1vZGUgZCdhY3R1YWxpdHphY2nDsyBwZXIgYWwgY2Ftw60gZGUgIgorInN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiT21ldCBsYSBzb3J0aWRhIGQnaW5pY2lhbGl0emFyIHVuIHN1Ym3DsmR1bCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorIywgZnV6enkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxjYW3DrT5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgY2FwIG1hcGF0Z2UgZGUgc3VibcOyZHVsIGEgLmdpdG1vZHVsZXMgcGVyIGFsIGNhbcOtIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGxhIHJlZmVyw6huY2lhIGEgSEVBRCBkaW5zIGRlbCBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODU0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY2VyY2FyIHJlY3Vyc2l2YW1lbnQgYWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE4OQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJTdXByaW1laXggbGEgc29ydGlkYSBkZSBsJ2VzdGF0IGRlbCBzdWJtw7JkdWwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzkKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODgwCittc2dpZCAicmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJpbmNsb3UgcmVjdXJzaXZhbWVudCBlbHMgc3VibcOyZHVscyBpbWJyaW5jYXRzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MDkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxjYW3DrT4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIlMnZXN0w6Agc2luY3Jvbml0emFudCBsJ3VybCBkZWwgc3VibcOyZHVsIHBlciBhIMKrJXPCu1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcmVnaXN0cmFyIGwndXJsIHBlciBhbCBjYW3DrSBkZWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKyJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9idGVuaXIgZWwgcmVtb3QgcGVyIGRlZmVjdGUgcGVsIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAicydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBhY3R1YWxpdHphciBlbCByZW1vdCBwZWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICJPbWV0IGxhIHNvcnRpZGEgZGUgbGEgc2luY3Jvbml0emFjacOzIGRlIGwndXJsIGRlbCBzdWJtw7JkdWwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDU4Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8Y2Ftw60+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJMJ2FyYnJlIGRlIHRyZWJhbGwgZGUgc3VibcOyZHVsIMKrJXPCuyBjb250w6kgdW4gZGlyZWN0b3JpIC5naXRcbiIKKyIodXNldSAncm0gLXJmJyBzaSByZWFsbWVudCB2b2xldSBlbGltaW5hci1sbywgaW5jbG9lbnQgdG90YSBsYSBzZXZhIGhpc3TDsnJpYSkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gZGlzY2FyZCAiCisidGhlbSIKK21zZ3N0ciAiIgorIkwnYXJicmUgZGUgdHJlYmFsbCBkZWwgc3VibcOyZHVsIMKrJXPCuyBjb250w6kgbW9kaWZpY2FjaW9ucyBsb2NhbHM7IHVzZXUgJy1mJyAiCisicGVyIGEgZGVzY2FydGFyLWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICJTJ2hhIG5ldGVqYXQgZWwgZGlyZWN0b3JpIMKrJXPCu1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVsaW1pbmFyIGwnYXJicmUgZGUgdHJlYmFsbCBkZSBzdWJtw7JkdWwgwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbCBkaXJlY3RvcmkgZGUgc3VibcOyZHVsIGJ1aXQgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiUydoYSBkZXNyZWdpc3RyYXQgZWwgc3VibcOyZHVsIMKrJXPCuyAoJXMpIHBlciBhbCBjYW3DrSDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTAKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorIlN1cHJpbWVpeCBlbHMgYXJicmVzIGRlIHRyZWJhbGwgZGVscyBzdWJtw7JkdWxzIGZpbnMgaSB0b3Qgc2kgY29udGVuZW4gY2FudmlzICIKKyJsb2NhbHMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiRGVzcmVnaXN0cmEgcmVjdXJzaXZhbWVudCB0b3RzIGVscyBzdWJtw7JkdWxzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5NgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPGNhbcOtPi4uLl1dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxMAorbXNnaWQgIlVzZSAnLS1hbGwnIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIlVzZXUgJy0tYWxsJyBzaSByZWFsbWVudCB2b2xldSBkZXNpbmljaWFsaXR6YXIgdG90cyBlbHMgc3VibcOyZHVscyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyNzUKK21zZ2lkICIiCisiQW4gYWx0ZXJuYXRlIGNvbXB1dGVkIGZyb20gYSBzdXBlcnByb2plY3QncyBhbHRlcm5hdGUgaXMgaW52YWxpZC5cbiIKKyJUbyBhbGxvdyBHaXQgdG8gY2xvbmUgd2l0aG91dCBhbiBhbHRlcm5hdGUgaW4gc3VjaCBhIGNhc2UsIHNldFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRvICdpbmZvJyBvciwgZXF1aXZhbGVudGx5LCBjbG9uZSB3aXRoXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIGluc3RlYWQgb2YgJy0tcmVmZXJlbmNlJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIgorbXNnc3RyICJlbCBzdWJtw7JkdWwgwqslc8K7IG5vIHBvdCBhZmVnaXIgdW4gYWx0ZXJuYXRpdTogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJObyBlcyByZWNvbmVpeCBlbCB2YWxvciDCqyVzwrsgcGVyIGEgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiTm8gZXMgcmVjb25laXggZWwgdmFsb3Igwqslc8K7IHBlciBhIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODMKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAiYSBvbiBlcyBjbG9uYXLDoCBlbCBzdWJtw7JkdWwgbm91IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NgorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIm5vbSBkZWwgc3VibcOyZHVsIG5vdSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODkKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICJ1cmwgZGVsIHF1YWwgY2xvbmFyIGVsIHN1Ym3DsmR1bCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgInByb2Z1bmRpdGF0IGRlbHMgY2xvbnMgc3VwZXJmaWNpYWxzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NworbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgImZvcsOnYSBlbCBwcm9ncsOpcyBkZWwgY2xvbmF0Z2UiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk5CisjLCBmdXp6eQorbXNnaWQgImRpc2FsbG93IGNsb25pbmcgaW50byBub24tZW1wdHkgZGlyZWN0b3J5IgorbXNnc3RyICJzJ2VzdMOgIGFwbGljYW50IGEgdW5hIGhpc3TDsnJpYSBidWlkYSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDcKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxjYW3DrT5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxkaXDDsnNpdD5dIFstLW5hbWUgPG5vbT5dIFstLWRlcHRoIDxwcm9mdW5kaXRhdD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8Y2Ftw60+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZWwgY2xvbmF0Z2UgZGUgwqslc8K7IGFsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyVzwrsgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAiZWwgZGlyZWN0b3JpIGZvbnQgZXN0w6AgYnVpdCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBzdWJtb2R1bGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9idGVuaXIgZWwgZGlyZWN0b3JpIGRlIHN1Ym3DsmR1bCBwZXIgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiTW9kZSBkJ2FjdHVhbGl0emFjacOzIMKrJXPCuyBubyB2w6BsaWQgcGVyIGFsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiTW9kZSBkJ2FjdHVhbGl0emFjacOzIMKrJXPCuyBjb25maWd1cmF0IG5vIHbDoGxpZCBwZXIgYWwgY2Ftw60gZGUgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIkVsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyVzwrsgbm8gZXN0w6AgaW5pY2lhbGl0emF0IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5OAorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICJQb3RzZXIgdm9sZXUgdXNhciAndXBkYXRlIC0taW5pdCc/IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIlMnZXN0w6Agb21ldGVudCBlbCBzdWJtw7JkdWwgbm8gZnVzaW9uYXQgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJTJ2VzdMOgIG9tZXRlbnQgZWwgc3VibcOyZHVsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjbG9uYXIgwqslc8K7LiBTJ2hhIHByb2dyYW1hdCB1biByZWludGVudCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycgYSBzZWNvbmQgdGltZSwgYWJvcnRpbmciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgcGVyIHNlZ29uIGNvcCBlbiBjbG9uYXIgwqslc8K7LCBzJ2VzdMOgIGF2b3J0YW50IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMAorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJjYW3DrSBhIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzkKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAiY2Ftw60gYSBsJ2FyYnJlIGRlIHRyZWJhbGwsIGEgdHJhdsOpcyBkZSBmcm9udGVyZXMgZGUgc3VibcOyZHVscyBuaWF0cyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODMKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvIG5vbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg5Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICJDcmVhIHVuIGNsb24gc3VwZXJmaWNpYWwgdHJ1bmNhdCBhbCBub21icmUgZGUgcmV2aXNpb25zIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5MgorbXNnaWQgInBhcmFsbGVsIGpvYnMiCittc2dzdHIgInRhc3F1ZXMgcGFyYWzCt2xlbGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NAorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAic2kgZWwgY2xvbmF0Z2UgaW5pY2lhbCBoYSBkZSBzZWd1aXIgbGEgcmVjb21hbmFjacOzIGRlIHN1cGVyZmljaWFsaXRhdCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTUKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJubyBpbXByaW1laXhpcyBlbCBwcm9ncsOpcyBkZWwgY2xvbmF0Z2UiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA0CisjLCBmdXp6eQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGVfY2xvbmUgWy0tcHJlZml4PTxjYW3DrT5dIFs8Y2Ftw60+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTcKK21zZ2lkICJiYWQgdmFsdWUgZm9yIHVwZGF0ZSBwYXJhbWV0ZXIiCittc2dzdHIgInZhbG9yIGluY29ycmVjdGUgcGVyIGFsIHBhcsOgbWV0cmUgdXBkYXRlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlICglcykgYnJhbmNoIGNvbmZpZ3VyZWQgdG8gaW5oZXJpdCBicmFuY2ggZnJvbSBzdXBlcnByb2plY3QsIGJ1dCAiCisidGhlIHN1cGVycHJvamVjdCBpcyBub3Qgb24gYW55IGJyYW5jaCIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSBkZSBzdWJtw7JkdWwgKCVzKSBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBoZXJldGFyIGxhIGJyYW5jYSBkZWwgIgorInN1cGVycHJvamVjdGUsIHBlcsOyIGVsIHN1cGVycHJvamVjdGUgbm8gw6lzIGVuIGNhcCBicmFuY2EiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCBnZXN0b3IgZGVsIGRpcMOyc2l0IHBlbCBzdWJtw7JkdWwgwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMQorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICJpbmNsb3UgcmVjdXJzaXZhbWVudCBhbHMgc3VibcOyZHVscyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjcKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGVtYmVkLWdpdC1kaXIgWzxjYW3DrT4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE4MworbXNnaWQgImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgImNvbXByb3ZhIHNpIMOpcyBzZWd1ciBlc2NyaXVyZSBhbCBmaXR4ZXIgLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTg2CisjLCBmdXp6eQorbXNnaWQgInVuc2V0IHRoZSBjb25maWcgaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgImwnYWxsaXN0YW1lbnQgZGVsIC5naXRtb2R1bGVzIGFjdHVhbGl0emF0IGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTEKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIG5hbWUgW3ZhbG9yXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTIKKyMsIGZ1enp5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBuYW1lIFt2YWxvcl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkzCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTIgZ2l0LXN1Ym1vZHVsZS5zaDoxNzMKKyMsIGZ1enp5LCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkZldSDCq3N0YWdlwrsgZGVscyB2b3N0cmVzIGNhbnZpcyBhIC5naXRtb2R1bGVzIG8gZmV1IMKrc3Rhc2jCuyBkZWxzIG1hdGVpeG9zICIKKyJwZXIgYSBwcm9jZWRpciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNjIgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiVzIG5vIGFkbWV0IC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIsKrJXPCuyBubyDDqXMgdW4gc3Vib3JkcmUgdsOgbGlkIGRlIHN1Ym1vZHVsZS0taGVscGVyIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs8b3BjaW9ucz5dIDxub20+IFs8cmVmZXLDqG5jaWE+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxub20+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAib21ldCBlbCBtaXNzYXRnZSBkJ2Vycm9yIGRlIHJlZmVyw6huY2llcyBubyBzaW1iw7JsaXF1ZXMgKHNlcGFyYWRlcykiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICJzdXByaW1laXggbGEgcmVmZXLDqG5jaWEgc2ltYsOybGljYSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAiZXNjdXLDp2EgbGEgc29ydGlkYSBkZSByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIgorbXNnc3RyICJyYcOzIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJyYcOzIGRlIGwnYWN0dWFsaXR6YWNpw7MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjUKKyMsIGZ1enp5Cittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dXG4iCisiXHRcdDx0YWduYW1lPiBbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8aWQtZGUtY2xhdT5dIFstZl0gWy1tIDxtaXNzYXRnZT4gfCAtRiA8Zml0eGVyPl0gPG5vbS0iCisiZCdldGlxdWV0YT4gWzxjYXA+XSIKKworIzogYnVpbHRpbi90YWcuYzoyNworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDxub20tZCdldGlxdWV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjgKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstbls8bm9tYnJlPl1dIFstLWNvbnRhaW5zIDxjb21pc3Npw7M+XSBbLS1uby1jb250YWlucyA8Y29taXNzacOzPl0gIgorIlstLXBvaW50cy1hdCA8b2JqZWN0ZT5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21pc3Npw7M+XV0gWzxwYXRyw7M+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8bm9tLWQnZXRpcXVldGE+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIm5vIHMnaGEgdHJvYmF0IGwnZXRpcXVldGEgwqslc8K7LiIKKworIzogYnVpbHRpbi90YWcuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJTJ2hhIHN1cHJpbWl0IGwnZXRpcXVldGEgwqslc8K7IChlcmEgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVzY3Jpdml1IGVsIG1pc3NhdGdlIGRlIGwnZXRpcXVldGE6XG4iCisiICAlc1xuIgorIkxlcyBsw61uaWVzIHF1ZSBjb21lbmNpbiBhbWIgwqslY8K7IHMnaWdub3JhcmFuLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXNjcml2aXUgZWwgbWlzc2F0Z2UgZGUgbCdldGlxdWV0YTpcbiIKKyIgICVzXG4iCisiTGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIGFtYiDCqyVjwrsgZXMgcmV0aW5kcmFuOyBwb2RldSBlbGltaW5hci1sZXMgcGVyIHbDs3MgIgorIm1hdGVpeCBzaSB2b2xldS5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxOTgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHNpZ25hciBsJ2V0aXF1ZXRhIgorCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBmaXR4ZXIgZCdldGlxdWV0YSIKKworIzogYnVpbHRpbi90YWcuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIzMgorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgImVsIHRpcHVzIGQnb2JqZWN0ZSDDqXMgaW5jb3JyZWN0ZS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mjg0Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICJubyBoaSBoYSBjYXAgbWlzc2F0Z2UgZCdldGlxdWV0YT8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIlMnaGEgZGVpeGF0IGVsIG1pc3NhdGdlIGRlIGwnZXRpcXVldGEgZW4gJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAibGxpc3RhIGVscyBub21zIGQnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgImltcHJpbWVpeCA8bj4gbMOtbmllcyBkZSBjYWRhIG1pc3NhdGdlIGQnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA2Cittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgInN1cHJpbWVpeCBsZXMgZXRpcXVldGVzIgorCisjOiBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJ2ZXJpZmljYSBsZXMgZXRpcXVldGVzIgorCisjOiBidWlsdGluL3RhZy5jOjQwOQorbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGRlIGNyZWFjacOzIGQnZXRpcXVldGVzIgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiZXRpcXVldGEgYW5vdGFkYSwgbmVjZXNzaXRhIHVuIG1pc3NhdGdlIgorCisjOiBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICJtaXNzYXRnZSBkJ2V0aXF1ZXRhIgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgImZvcsOnYSBsJ2VkaWNpw7MgZGVsIG1pc3NhdGdlIGRlIGwnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE2Cittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAiZXRpcXVldGEgYW5vdGFkYSBpIHNpZ25hZGEgcGVyIEdQRyIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJ1c2EgdW5hIGFsdHJhIGNsYXUgcGVyIGEgc2lnbmFyIGwnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAicmVlbXBsYcOnYSBsJ2V0aXF1ZXRhIHNpIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL3RhZy5jOjQyMSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgImNyZWEgdW4gcmVnaXN0cmUgZGUgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3RhZy5jOjQyMworbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZGUgbGxpc3RhdCBkJ2V0aXF1ZXRlcyIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgIm1vc3RyYSBsYSBsbGlzdGEgZCdldGlxdWV0ZXMgZW4gY29sdW1uZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBldGlxdWV0ZXMgcXVlIGNvbnRpbmd1aW4gbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL3RhZy5jOjQyNiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgZXRpcXVldGVzIHF1ZSBubyBjb250aW5ndWluIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi90YWcuYzo0MjkKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBldGlxdWV0ZXMgcXVlIHMnaGFuIGZ1c2lvbmF0IgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBldGlxdWV0ZXMgcXVlIG5vIHMnaGFuIGZ1c2lvbmF0IgorCisjOiBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBldGlxdWV0ZXMgZGUgbCdvYmplY3RlIgorCisjOiBidWlsdGluL3RhZy5jOjQ4MgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBpIC1uIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiZXMgcGVybWV0IGwnb3BjacOzIC1uIG5vbcOpcyBhbWIgbW9kZSBsbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiZXMgcGVybWV0IGwnb3BjacOzIC0tY29udGFpbnMgbm9tw6lzIGFtYiBtb2RlIGxsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo1MDgKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJlcyBwZXJtZXQgbCdvcGNpw7MgLS1uby1jb250YWlucyBub23DqXMgYW1iIG1vZGUgbGxpc3RhIgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJlcyBwZXJtZXQgLS1wb2ludHMtYXQgb3B0aW9uIG5vbcOpcyBhbWIgbW9kZSBsbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEyCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImVzIHBlcm1ldGVuIGxlcyBvcGNpb25zIC0tbWVyZ2VkIGkgLS1uby1tZXJnZWQgbm9tw6lzIGFtYiBtb2RlIGxsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo1MjMKK21zZ2lkICJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIm5vbcOpcyBlcyBwZXJtZXQgdW5hIG9wY2nDsyAtRiBvIC1tLiIKKworIzogYnVpbHRpbi90YWcuYzo1NDIKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgIm1hc3NhIHBhcsOgbWV0cmVzIgorCisjOiBidWlsdGluL3RhZy5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1biBub20gZCdldGlxdWV0YSB2w6BsaWQuIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAibCdldGlxdWV0YSDCqyVzwrsgamEgZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiRXRpcXVldGEgwqslc8K7IGFjdHVhbGl0emFkYSAoZXJhICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTAxCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIlMnZXN0YW4gZGVzZW1wYXF1ZXRhbnQgZWxzIG9iamVjdGVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNyZWFyIGVsIGRpcmVjdG9yaSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNyZWFyIGVsIGZpdHhlciAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHN1cHJpbWlyIGVsIGZpdHhlciAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTUgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gc3VwcmltaXIgZWwgZGlyZWN0b3JpICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICJTJ2VzdMOgIHByb3ZhbnQgbXRpbWUgZW4gwqslc8K7ICIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAiIgorImxhIGluZm9ybWFjacOzIGQnc3RhdCBkZSBkaXJlY3Rvcmkgbm8gY2FudmlhIGRlc3Byw6lzIGQnYWZlZ2lyIHVuIGZpdHhlciBub3UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTY3Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImxhIGluZm9ybWFjacOzIGQnc3RhdCBkZSBkaXJlY3Rvcmkgbm8gY2FudmlhIGRlc3Byw6lzIGQnYWZlZ2lyIHVuIGRpcmVjdG9yaSBub3UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTgwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorImxhIGluZm9ybWFjacOzIGQnc3RhdCBkZSBkaXJlY3RvcmkgY2FudmlhIGRlc3Byw6lzIGQnYWN0dWFsaXR6YXIgdW4gZml0eGVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJsYSBpbmZvcm1hY2nDsyBkJ3N0YXQgZGUgZGlyZWN0b3JpIGNhbnZpYSBkZXNwcsOpcyBkJ2FmZWdpciB1biBmaXR4ZXIgZGlucyAiCisiZCd1biBzdWJkaXJlY3RvcmkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisibGEgaW5mb3JtYWNpw7MgZCdzdGF0IGRlIGRpcmVjdG9yaSBubyBjYW52aWEgZGVzcHLDqXMgZGUgc3VwcmltaXIgdW4gZml0eGVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxNQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibGEgaW5mb3JtYWNpw7MgZCdzdGF0IGRlIGRpcmVjdG9yaSBubyBjYW52aWEgZGVzcHLDqXMgZGUgc3VwcmltaXIgdW4gZGlyZWN0b3JpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMgorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIEQnYWNvcmQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8b3BjaW9ucz5dIFstLV0gWzxmaXR4ZXI+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgIiIKKyJjb250aW51YSBsJ2FjdHVhbGl0emFjacOzIGVuY2FyYSBxdWUgbCfDrW5kZXggbmVjZXNzaXRpIHVuYSBhY3R1YWxpdHphY2nDsyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAiYWN0dWFsaXR6YTogaWdub3JhIGVscyBzdWJtw7JkdWxzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MAorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICJubyBpZ25vcmlzIGVscyBmaXR4ZXJzIG5vdXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgImRlaXhhIHF1ZSBlbHMgZml0eGVycyByZWVtcGxhY2luIGVscyBkaXJlY3RvcmlzIGkgdmljZXZlcnNhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgInRpbmd1ZXMgZW4gY29tcHRlIGVscyBmaXR4ZXJzIGFic2VudHMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NgorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJhY3R1YWxpdHphIGVuY2FyYSBxdWUgbCfDrW5kZXggY29udGluZ3VpIGVudHJhZGVzIG5vIGZ1c2lvbmFkZXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJhY3R1YWxpdHphIGxhIGluZm9ybWFjacOzIGQnZXN0YWTDrXN0aXF1ZXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJjb20gLS1yZWZyZXNoLCBwZXLDsiBpZ25vcmEgZWwgcGFyw6BtZXRyZSBhc3N1bWUtdW5jaGFuZ2VkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NworbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjxtb2RlPiw8b2JqZWN0ZT4sPGNhbcOtPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgImFmZWdlaXggbCdlbnRyYWRhIGVzcGVjaWZpY2FkYSBhIGwnw61uZGV4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDgKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgIm1hcmNhIGVscyBmaXR4ZXJzIGNvbSBhIFwibm8gY2FudmlhbnRcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDExCittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICJuZXRlamEgZWwgYml0IGFzc3VtZWQtdW5jaGFuZ2VkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTQKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICJtYXJjYSBlbHMgZml0eGVycyBjb20gYSBcIm5vbcOpcyDDrW5kZXhcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIm5ldGVqYSBlbCBiaXQgc2tpcC13b3JrdHJlZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjIKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorIm5vbcOpcyBhZmVnZWl4IGEgbCfDrW5kZXg7IG5vIGFmZWdlaXhpcyBlbCBjb250aW5ndXQgYSBsYSBiYXNlIGRlIGRhZGVzICIKKyJkJ29iamVjdGVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjQKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICIiCisiZWxpbWluYSBlbHMgY2FtaW5zIGFub21lbmF0cyBlbmNhcmEgcXVlIGVzdGlndWluIHByZXNlbnRzIGVuIGwnYXJicmUgZGUgIgorInRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiYW1iIC0tc3RkaW46IGxlcyBsw61uaWVzIGQnZW50cmFkYSBhY2FiZW4gYW1iIG9jdGV0cyBudWxzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsbGVnZWl4IGxhIGxsaXN0YSBkZSBjYW1pbnMgYSBhY3R1YWxpdHphciBkZXMgZGUgbCdlbnRyYWRhIGVzdMOgbmRhcmQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzMgorbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICJhZmVnZWl4IGxlcyBlbnRyYWRlcyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCBhIGwnw61uZGV4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzYKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgInJlZW1wbGVuYSBsZXMgwqtzdGFnZcK7ICMyIGkgIzMgcGVyIGFscyBjYW1pbnMgbGxpc3RhdHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJub23DqXMgYWN0dWFsaXR6YSBsZXMgZW50cmFkZXMgcXVlIGRpZmVyZWl4aW4gZGUgSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiaWdub3JhIGVscyBmaXR4ZXJzIGFic2VudHMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDcKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImluZm9ybWEgZGUgbGVzIGFjY2lvbnMgZW4gbGEgc29ydGlkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiKHBlciBhIHBvcmNlbGxhbmVzKSBvYmxpZGEndCBkZWxzIGNvbmZsaWN0ZXMgbm8gcmVzb2x0cyBuaSBkZXNhdHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1MworbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICJlc2NyaXUgbCfDrW5kZXggZW4gYXF1ZXN0IGZvcm1hdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgImhhYmlsaXRhIG8gaW5oYWJpbGl0YSBsJ8OtbmRleCBkaXZpZGl0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgImhhYmlsaXRhL2luaGFiaWxpdGEgbGEgbWVtw7JyaWEgY2F1IG5vIHNlZ3VpZGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1OQorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJwcm92YSBzaSBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgYWRtZXQgbGEgbWVtw7JyaWEgY2F1IG5vIHNlZ3VpZGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MQorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICJoYWJpbGl0YSBsYSBtZW3DsnJpYSBjYXUgbm8gc2VndWlkYSBzZW5zZSBwcm92YXIgZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIgorbXNnc3RyICJoYWJpbGl0YSBvIGluaGFiaWxpdGEgZWwgbW9uaXRvciBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAibWFyY2EgZWxzIGZpdHhlcnMgY29tIGEgdsOgbGlkcyBwZWwgZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICJuZXRlamEgZWwgYml0IGRlIHZhbGlkZXNhIGRlbCBmc21vbml0b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE3MworbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImVuYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCBlc3TDoCBlc3RhYmxlcnQgYSBmYWxzOyBlbGltaW5ldS1sbyBvIGNhbnZpYXItbG8sIHNpIHJlYWxtZW50ICIKKyJ2b2xldSBoYWJpbGl0YXIgbCfDrW5kZXggZGl2aWRpdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTgyCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IGVzdMOgIGVzdGFibGVydCBhIGNlcnQ7IGVsaW1pbmV1LWxvIG8gY2FudmlldS1sbywgc2kgcmVhbG1lbnQgIgorInZvbGV1IGluaGFiaWxpdGFyIGwnw61uZGV4IGRpdmlkaXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5NAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0w6AgZXN0YWJsZXJ0IGEgY2VydDsgZWxpbWluZXUtbG8gbyBjYW52aWV1LWxvLCBzaSAiCisicmVhbG1lbnQgdm9sZXUgaW5oYWJpbGl0YXIgZWwgY2F1IG5vIHNlZ3VpdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk4Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJMYSBtZW3DsnJpYSBjYXUgbm8gc2VndWlkYSBlc3TDoCBpbmhhYmlsaXRhZGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0w6AgZXN0YWJsZXJ0IGEgZmFsczsgZWxpbWluZXUtbG8gbyBjYW52aWFyLWxvLCBzaSAiCisicmVhbG1lbnQgdm9sZXUgaGFiaWxpdGFyIGVsIGNhdSBubyBzZWd1aXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiTGEgbWVtw7JyaWEgY2F1IG5vIHNlZ3VpZGEgZXN0w6AgaGFiaWxpdGFkYSBwZXIgYSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxOAorbXNnaWQgImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyBzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGVuYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciBlc3TDoCBlc3RhYmxlcnQgYSBmYWxzOyBlc3RhYmxpdS1sbyBhIGNlcnQgc2kgcmVhbG1lbnQgdm9sZXUgIgorImhhYmlsaXRhciBmc21vbml0b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyMgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICJmc21vbml0b3IgaGFiaWxpdGF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjUKK21zZ2lkICIiCisiY29yZS5mc21vbml0b3IgaXMgc2V0OyByZW1vdmUgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3IgZXN0w6AgZXN0YWJsZXJ0IGEgY2VydDsgZWxpbWluZXUtbG8gc2kgcmVhbG1lbnQgdm9sZXUgIgorImluaGFiaWxpdGFyIGZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI5Cittc2dpZCAiZnNtb25pdG9yIGRpc2FibGVkIgorbXNnc3RyICJmc21vbml0b3IgaW5oYWJpbGl0YXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPG9wY2lvbnM+XSAtZCA8bm9tLWRlLXJlZmVyw6huY2lhPiBbPHZhbG9yLWFudGljPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiIgorImdpdCB1cGRhdGUtcmVmIFs8b3BjaW9ucz5dICAgIDxub20tZGUtcmVmZXLDqG5jaWE+IDx2YWxvci1ub3U+IFs8dmFsb3ItYW50aWM+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTIKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3BjaW9ucz5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgInN1cHJpbWVpeCBsYSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgImFjdHVhbGl0emEgPG5vbSBkZSByZWZlcsOobmNpYT4sIG5vIGxhIHF1ZSBhcHVudGkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgInN0ZGluIHTDqSBwYXLDoG1ldHJlcyBhY2FiYXRzIGFtYiBOVUwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsbGVnZWl4IGxlcyBhY3R1YWxpdHphY2lvbnMgZGVzIGRlIHN0ZGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICJhY3R1YWxpdHphIGVscyBmaXR4ZXJzIGQnaW5mb3JtYWNpw7MgZGVzIGRlIHplcm8iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiZ2l0IHVwbG9hZC1wYWNrIFs8b3BjaW9ucz5dIDxkaXJlY3Rvcmk+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICJzdXJ0IGRlc3Byw6lzIGQndW4gc29sIGludGVyY2FudmkgZGUgc29swrdsaWNpdHVkL3Jlc3Bvc3RhIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgInN1cnQgaW1tZWRpYXRhbWVudCBkZXNwcsOpcyBkZSBsJ2FudW5jaSBpbmljaWFsIGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJubyBpbnRlbnRpcyA8ZGlyZWN0b3JpPi8uZ2l0LyBzaSA8ZGlyZWN0b3JpPiBubyDDqXMgY2FwIGRpcmVjdG9yaSBkZWwgR2l0IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjkKK21zZ2lkICJpbnRlcnJ1cHQgdHJhbnNmZXIgYWZ0ZXIgPG4+IHNlY29uZHMgb2YgaW5hY3Rpdml0eSIKK21zZ3N0ciAiaW50ZXJyb21wIGxhIHRyYW5zZmVyw6huY2lhIGRlc3Byw6lzIGRlIDxuPiBzZWdvbnMgZCdpbmFjdGl2aXRhdCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21pc3Npw7M+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OAorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAiaW1wcmltZWl4IGVscyBjb250aW5ndXRzIGRlIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgImltcHJpbWVpeCBsYSBzb3J0aWRhIGNydWEgZGUgbCdlc3RhdCBncGciCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFxdWV0Pi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAiZGV0YWxsYXQiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGVzdGFkw61zdGlxdWVzIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDxldGlxdWV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJpbXByaW1laXggZWxzIGNvbnRpbmd1dHMgZGUgbCdldGlxdWV0YSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxvcGNpb25zPl0gPGNhbcOtPiBbPGNvbW1pdC1pc2g+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcGNpb25zPl0gPGNhbcOtPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA8YXJicmUgZGUgdHJlYmFsbD4gPGNhbcOtLW5vdT4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8b3B0aW9ucz5dIDx3b3JrdHJlZT4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3BjaW9ucz5dIDxhcmJyZSBkZSB0cmViYWxsPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSB1bmxvY2sgPGNhbcOtPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHN1cHJpbWlyIMKrJXPCuyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJFbGltaW5hY2nDsyBkZSB3b3JrdHJlZXMvJXM6IG5vIMOpcyB1biBkaXJlY3RvcmkgdsOgbGlkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiRWxpbWluYWNpw7MgZGUgd29ya3RyZWVzLyVzOiBlbCBmaXR4ZXIgZ2l0ZGlyIG5vIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAgYnVpbHRpbi93b3JrdHJlZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiRWxpbWluYWNpw7MgZGUgd29ya3RyZWVzLyVzOiBubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZ2l0ZGlyICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlJlbW92aW5nIHdvcmt0cmVlcy8lczogc2hvcnQgcmVhZCAoZXhwZWN0ZWQgJTxQUkl1TUFYPiBieXRlcywgcmVhZCAiCisiJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKyJTJ2VzdGFuIHN1cHJpbWludCBlbHMgYXJicmVzIGRlIHRyZWJhbGwvJXM6IGxlY3R1cmEgY3VydGEgKHMnZXNwZXJhdmVuICIKKyIlPFBSSXVNQVg+IGJ5dGVzLCBsbGVnaXRzICU8UFJJdU1BWD4pIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIKK21zZ3N0ciAiRWxpbWluYWNpw7MgZGUgd29ya3RyZWVzLyVzOiBmaXR4ZXIgZ2l0ZGlyIG5vIHbDoGxpZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIiIKKyJFbGltaW5hY2nDsyBkZSB3b3JrdHJlZXMvJXM6IGVsIGZpdHhlciBnaXRkaXIgZXMgcmVmZXJlaXggYSB1bmEgdWJpY2FjacOzIG5vICIKKyJleGlzdGVudCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiaW5mb3JtYSBkZWxzIGFyYnJlcyBkZSB0cmViYWxsIHBvZGF0cyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NworbXNnaWQgImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJmZXMgY2FkdWNhciBlbHMgYXJicmVzIGRlIHRyZWJhbGwgbcOpcyB2ZWxscyBxdWUgPGhvcmE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIsKrJXPCuyBqYSBleGlzdGVpeCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdG9ybmFyIGEgYWZlZ2lyIGEgbCdhcmJyZSBkZSB0cmViYWxsIMKrJXPCuyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYnIHRvIG92ZXJyaWRlLCBvciAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBkaXJlY3RvcmkgZGUgwqslc8K7IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM5IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChuZXcgYnJhbmNoICclcycpIgorbXNnc3RyICJTJ2VzdMOgIHByZXBhcmFudCBsJ2FyYnJlIGRlIHRyZWJhbGwgKGJyYW5jYSBub3ZhIMKrJXPCuykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChyZXNldHRpbmcgYnJhbmNoICclcyc7IHdhcyBhdCAlcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGNoZWNraW5nIG91dCAnJXMnKSIKK21zZ3N0ciAiUydlc3TDoCBwcmVwYXJhbnQgbCdhcmJyZSBkZSB0cmViYWxsIChzJ2VzdMOgIGFnYWZhbnQgwqslc8K7KSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICJTJ2VzdMOgIHByZXBhcmFudCBsJ2FyYnJlIGRlIHRyZWJhbGwgKEhFQUQgJXMgc2VwYXJhdCkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTcKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgImFnYWZhIDxicmFuY2E+IGVuY2FyYSBxdWUgc2lndWkgYWdhZmFkYSBlbiBhbHRyZSBhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAwCittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JlYSB1bmEgYnJhbmNhIG5vdmEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDIKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgImNyZWEgbyByZXN0YWJsZWl4IHVuYSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDQKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiZW1wbGVuYSBsJ2FyYnJlIGRlIHRyZWJhbGwgbm91IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA1Cittc2dpZCAia2VlcCB0aGUgbmV3IHdvcmtpbmcgdHJlZSBsb2NrZWQiCittc2dzdHIgIm1hbnTDqW4gbCdhcmJyZSBkZSB0cmViYWxsIG5vdSBibG9xdWVqYXQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDgKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1icmFuY2goMSkpIgorbXNnc3RyICJjb25maWd1cmEgZWwgbW9kZSBkZSBzZWd1aW1lbnQgKHZlZ2V1IGdpdC1icmFuY2goMSkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTExCittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJwcm92YSBkZSBmZXIgY29pbmNpZGlyIGVsIG5vbSBkZSBsYSBicmFuY2Egbm92YSBhbWIgdW5hIGJyYW5jYSBhbWIgc2VndWltZW50ICIKKyJyZW1vdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxOQorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBpIC0tZGV0YWNoIHPDs24gbcO6dHVhbWVudCBleGNsb2VudHMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1ODAKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiLS1bbm8tXXRyYWNrIG5vbcOpcyBlcyBwb3QgdXNhciBzaSBlcyBjcmVhIHVuYSBicmFuY2Egbm92YSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4MAorbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAicmHDsyBwZXIgYmxvcXVlamFyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjkyIGJ1aWx0aW4vd29ya3RyZWUuYzo3MjUgYnVpbHRpbi93b3JrdHJlZS5jOjc5OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiwqslc8K7IG5vIMOpcyB1biBhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjcKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiTm8gZXMgcG90IGJsb3F1ZWphciBuaSBkZXNibG9xdWVqYXIgbCdhcmJyZSBkZSB0cmViYWxsIHByaW5jaXBhbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICLCqyVzwrsgamEgZXN0w6AgYmxvcXVlamF0LCByYcOzOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCIKK21zZ3N0ciAiwqslc8K7IGphIGVzdMOgIGJsb3F1ZWphdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBsb2NrZWQiCittc2dzdHIgIsKrJXPCuyBubyBlc3TDoCBibG9xdWVqYXQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzAKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiZWxzIGFyYnJlcyBkZSB0cmViYWxsIHF1ZSBjb250ZW50IHN1Ym3DsmR1bHMgbm8gZXMgcG9kZW4gbW91cmUgbyBzdXByaW1pciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc3OAorbXNnaWQgImZvcmNlIG1vdmUgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgImZvcsOnYSBlbCBtb3ZpbWVudCBlbmNhcmEgcXVlIGwnYXJicmUgZGUgdHJlYmFsbCBlc3RpZ3VpIGJydXQgbyBibG9xdWVqYXQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDEgYnVpbHRpbi93b3JrdHJlZS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGEgbWFpbiB3b3JraW5nIHRyZWUiCittc2dzdHIgIsKrJXPCuyDDqXMgdW4gYXJicmUgZGUgdHJlYmFsbCBwcmluY2lwYWwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpZ3VyZSBvdXQgZGVzdGluYXRpb24gbmFtZSBmcm9tICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZGVkdWlyIGVsIG5vbSBkZSBkZXN0w60gZGVzIGRlIMKrJXPCuyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZWwgZGVzdMOtIMKrJXPCuyBqYSBleGlzdGVpeCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIk5vIGVzIHBvZGVuIGVsaW1pbmFyIGVscyBjYW52aXMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIk5vIGVzIHBvZGVuIGVsaW1pbmFyIGVscyBjYW52aXMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJsYSB2YWxpZGFjacOzIGhhIGZhbGxhdCwgbm8gZXMgcG90IG1vdXJlIGwnYXJicmUgZGUgdHJlYmFsbDogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG1vdXJlIMKrJXPCuyBhIMKrJXPCuyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIMKrZ2l0IHN0YXR1c8K7IGEgwqslc8K7IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGV4ZWN1dGFyIMKrZ2l0IHN0YXR1c8K7IGEgwqslc8K7LCBjb2RpICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTEwCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiZm9yw6dhIGxhIHN1cHJlc3Npw7MgZW5jYXJhIHF1ZSBsJ2FyYnJlIGRlIHRyZWJhbGwgZXN0aWd1aSBicnV0IG8gYmxvcXVlamF0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIk5vIGVzIHBvZGVuIGVsaW1pbmFyIGVscyBjYW52aXMgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICJObyBlcyBwb2RlbiBlbGltaW5hciBlbHMgY2FudmlzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPHByZWZpeD4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiZXNjcml1IGwnb2JqZWN0ZSBkJ2FyYnJlIHBlciBhIHVuIHN1YmRpcmVjdG9yaSA8cHJlZml4PiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzEKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICJub23DqXMgw7p0aWwgcGVyIGEgbGEgZGVwdXJhY2nDsyIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIlMnZXNwZXJhdmEgbCdvcmRyZSDCq21hcmvCuywgcydoYSByZWJ1dCAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJTJ2VzcGVyYXZhIGwnb3JkcmUgwqt0b8K7LCBzJ2hhIHJlYnV0IMKrJXPCuyIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIkVscyBwZXJtaXNvcyBlbiBlbCB2b3N0cmUgZGlyZWN0b3JpIGRlIHPDsmNvbCBzw7NuIG1hc3NhIGxpYmVyYWxzO1xuIgorInBvdCBzZXIgcXVlIGFsdHJlcyB1c3VhcmlzIHBvZGVuIGxsZWdpciBsZXMgdm9zdHJlcyBjcmVkZW5jaWFscy5cbiIKKyJDb25zaWRlcmV1IGV4ZWN1dGFyOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiaW1wcmltZWl4IGVscyBtaXNzYXRnZXMgZGUgZGVwdXJhY2nDsyBhIHN0ZGVyciIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImxhIGNvbWlzc2nDsyAlcyBubyBlc3TDoCBtYXJjYWRhIGNvbSBhYmFzdGFibGUiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIm1hc3NlcyBjb21pc3Npb24gbWFyY2FkZXMgY29tIGFiYXN0YWJsZSIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjcKK21zZ2lkICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iCittc2dzdHIgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wY2lvbnM+XSIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgInN1cnQgaW1tZWRpYXRhbWVudCBkZXNwcsOpcyBkJ2FudW5jaWFyIGxlcyBmdW5jaW9uYWxpdGF0cyIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKyJTZWUgJ2dpdCBoZWxwIGdpdCcgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiwqtnaXQgaGVscCAtYcK7IGkgwqtnaXQgaGVscCAtZ8K7IGxsaXN0ZW4gc3Vib3JkcmVzIGRpc3BvbmlibGVzIGlcbiIKKyJhbGd1bmVzIGd1aWVzIGRlIGNvbmNlcHRlLiBWZWdldSDCq2dpdCBoZWxwIDxvcmRyZT7CuyBvXG4iCisiwqtnaXQgaGVscCA8Y29uY2VwdGU+wrsgcGVyIGEgbGxlZ2lyIHNvYnJlIHVuIHN1Ym9yZHJlIG8gY29uY2VwdGUgZXNwZWPDrWZpYy5cbiIKKyJWZWdldSDCq2dpdCBoZWxwIGdpdMK7IHBlciBhIHVuYSB2aXNpw7MgZ2VuZXJhbCBkZWwgc2lzdGVtYS4iCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICJubyBzJ2hhIGVzcGVjaWZpY2F0IHVuIGRpcmVjdG9yaSBwZXIgLS1naXQtZGlyXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgIm5vIHMnaGEgZXNwZWNpZmljYXQgdW4gbm9tIGQnZXNwYWkgcGVyIC0tbmFtZXNwYWNlXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIm5vIHMnaGEgZXNwZWNpZmljYXQgdW4gZGlyZWN0b3JpIHBlciAtLXdvcmstdHJlZVxuIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICJubyBzJ2hhIGVzcGVjaWZpY2F0IGNhcCBwcmVmaXggcGVyIGEgLS1zdXBlci1wcmVmaXhcbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYyBlc3BlcmEgdW5hIGNhZGVuYSBkZSBjb25maWd1cmFjacOzXG4iCisKKyM6IGdpdC5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgIm5vIHMnaGEgZXNwZWNpZmljYXQgdW4gZGlyZWN0b3JpIHBlciAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIm9wY2nDsyBkZXNjb25lZ3VkYTogJXNcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGFsaWFzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGFsaWFzOiAlcyIKK21zZ3N0ciAiw6BsaWVzIHJlY3Vyc2l1OiAlcyIKKworIzogZ2l0LmM6NDU5Cittc2dpZCAid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImZhbGxhZGEgZCdlc2NyaXB0dXJhIGVuIGxhIHNvcnRpZGEgZXN0w6BuZGFyZCIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZmFsbGFkYSBkJ2VzY3JpcHR1cmEgZGVzY29uZWd1ZGEgZW4gbGEgc29ydGlkYSBlc3TDoG5kYXJkIgorCisjOiBnaXQuYzo0NjMKK21zZ2lkICJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJoYSBmYWxsYXQgZWwgdGFuY2FtZW50IGVuIGxhIHNvcnRpZGEgZXN0w6BuZGFyZCIKKworIzogZ2l0LmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo4NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgJXMgYXMgYSBidWlsdGluIgorbXNnc3RyICJubyBlcyBwb3QgdXNhciAgJXMgY29tIGEgZml0eGVyIGQnZXhjbHVzacOzIgorCisjOiBnaXQuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiw7pzOiAlc1xuIgorIlxuIgorCisjOiBnaXQuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGV4ZWN1dGFyIGwnb3JkcmUgwqslc8K7OiAlc1xuIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgInZhbG9yIG5lZ2F0aXUgcGVyIGh0dHAucG9zdGJ1ZmZlcjsgdXRpbGl0emFudCBlbCB2YWxvciAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAiTm8gcydhZG1ldCBlbCBjb250cm9sIGRlIGRlbGVnYWNpw7MgYW1iIGVsIGNVUkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIk5vIHMnYWRtZXQgbCdlbmdhbnggZGUgY2xhdSBww7pibGljYSBhbWIgY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjg3NgorIywgZnV6enkKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiTm8gcydhZG1ldCBsJ2VuZ2FueCBkZSBjbGF1IHDDumJsaWNhIGFtYiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6OTQ5CisjLCBmdXp6eQorbXNnaWQgIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIKK21zZ3N0ciAiTm8gcydhZG1ldCBsJ2VuZ2FueCBkZSBjbGF1IHDDumJsaWNhIGFtYiBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTA5MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGNVUkwgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMIGJhY2tlbmRzIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRvcm5hciBhICRoZWFkX25hbWUiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCBhY3R1YWxpdHphciBsJ1VSTCBiYXNlIGRlcyBkZSBsYSByZWRpcmVjY2nDszpcbiIKKyIgIHBldGljacOzOiAlc1xuIgorIiAgIHJlZGlyZWNjacOzOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAidmFsb3IgcGFyY2lhbCBubyB2w6BsaWQ6IMKrJXPCuyIKKworIzogcmVtb3RlLWN1cmwuYzoyNjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAiwqslc8K7IG5vIHJlY29uZWd1dCBjb20gdW4gZGlww7JzaXQgZ2l0IgorCisjOiByZW1vdGUtY3VybC5jOjM2NAorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IHMnZXNwZXJhdmEgQUNLL05BSywgcydoYSByZWJ1dCB1biBwYXF1ZXQgZGUgbmV0ZWphIgorCisjOiByZW1vdGUtY3VybC5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJyZWZlcsOobmNpYSBubyB2w6BsaWRhOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAibm8gcydoYSB0cm9iYXQgZWwgZGlww7JzaXQgwqslc8K7IgorCisjOiByZW1vdGUtY3VybC5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICclcyciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYXV0ZW50aWNhciBwZXIgwqslc8K7IgorCisjOiByZW1vdGUtY3VybC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjY2VkaXIgYSDCqyVzwrs6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAicydlc3TDoCByZWRpcmlnaW50IGEgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo3MzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICJTVEFSVFRMUyBoYSBmYWxsYXQhICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworIywgZnV6enkKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAibm8gZXMgcG90IHVzYXIgICVzIGNvbSBhIGZpdHhlciBkJ2V4Y2x1c2nDsyIKKworIzogcmVtb3RlLWN1cmwuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAyMworIywgZnV6enkKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIHBlcm1ldCBjbGllbnRzIHN1cGVyZmljaWFscyIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM3CisjLCBmdXp6eQorbXNnaWQgImZldGNoIGZhaWxlZC4iCittc2dzdHIgImwnwqtzdGFzaMK7IGhhIGZhbGxhdCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg1Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEyOSByZW1vdGUtY3VybC5jOjExMzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZGUgcHJvdG9jb2w6IHMnZXNwZXJhdmEgc2hhbGxvdyBzaGEtMSwgcydoYSByZWJ1dCDCqyVzwrsiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE0NyByZW1vdGUtY3VybC5jOjEyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImxhIHZhcmlhbnQgwqtzaW1wbGXCuyBkJ3NzaCBubyDDqXMgY29tcGF0aWJsZSBhbWIgLTQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4MworIywgZnV6enkKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAibCfCq3N0YXNowrsgaGEgZmFsbGF0IgorCisjOiByZW1vdGUtY3VybC5jOjEzNjcKK21zZ2lkICJyZW1vdGUtY3VybDogdXNhZ2U6IGdpdCByZW1vdGUtY3VybCA8cmVtb3RlPiBbPHVybD5dIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwNgorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgImFyZ3MiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg2Cittc2dpZCAib2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAiZmlsdHJhdGdlIGQnb2JqZWN0ZSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJkYXRhLWRlLWNhZHVjaXRhdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE5NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAib3BlcmFjacOzIG51bMK3bGEgKHBlciBhIGNvbXBhdGliaWxpdGF0IGFtYiB2ZXJzaW9ucyBhbnRlcmlvcnMpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJzaWd1ZXMgbcOpcyBkZXRhbGxhdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgInNpZ3VlcyBtw6lzIGRpc2NyZXQiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTcKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAidXNhIDxuPiB4aWZyZXMgcGVyIHByZXNlbnRhciBlbHMgU0hBLTEiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJjb20gc3VwcmltaXIgZWxzIGVzcGFpcyBpICNjb21lbnRhcmlzIGRlbCBtaXNzYXRnZSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNworIywgZnV6enkKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgcGF0cm9ucyBkZXMgZCd1biBmaXR4ZXIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJlbHMgY2FtaW5zIHNlIHNlcGFyZW4gYW1iIGVsIGNhcsOgY3RlciBOVUwiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgImNsYXUiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIm5vbSBkZWwgY2FtcCBlbiBlbCBxdWFsIG9yZGVuYXIiCisKKyM6IHJlcmVyZS5oOjQ0Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisiYWN0dWFsaXR6YSBsJ8OtbmRleCBhbWIgbGEgcmVzb2x1Y2nDsyBkZSBjb25mbGljdGUgcmV1c2FkYSBzaSDDqXMgcG9zc2libGUiCisKKyM6IHd0LXN0YXR1cy5oOjY3Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUQgc2VwYXJhdCBhICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIHNlcGFyYXQgZGUgIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQWZlZ2VpeCBlbHMgY29udGluZ3V0cyBkZWxzIGZpdHhlcnMgYSBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICJBcGxpY2EgdW5hIHPDqHJpZSBkZSBwZWRhw6dvcyBkZXMgZCd1bmEgYsO6c3RpYSBkZSBjb3JyZXUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQW5vdGEgbGVzIGzDrW5pZXMgZGVsIGZpdHhlciBhbWIgbGEgaW5mb3JtYWNpw7MgZGUgbGEgY29taXNzacOzIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQXBsaWNhIHVuIHBlZGHDpyBhIGZpdHhlciBpL28gYSBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJJbXBvcnRhIHVuIGRpcMOyc2l0IEdOVSBBcmNoIGEgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICJDcmVhIHVuIGFyeGl1IGRlIGZpdHhlcnMgZGVzIGQndW4gYXJicmUgYW1iIG5vbSIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJUcm9iYSBwZXIgY2VyY2EgYmluw6ByaWEgZWwgY2FudmkgcXVlIGhhZ2kgaW50cm9kdcOvdCB1biBkZWZlY3RlIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorIk1vc3RyYSBxdWluYSByZXZpc2nDsyBpIGF1dG9yIGhhIG1vZGlmaWNhdCBwZXIgw7psdGltIGNvcCBjYWRhIGzDrW5pYSBkJ3VuICIKKyJmaXR4ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkxsaXN0YSwgY3JlYSBvIHN1cHJpbWVpeCBicmFucXVlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgIiIKKyJQcm92ZWVpeCBjb250aW5ndXQgbyBpbmZvcm1hY2nDsyBkZWwgdGlwdXMgaSBtaWRhIHBlciBhbHMgb2JqZWN0ZXMgZGVsIGRpcMOyc2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo2MQorbXNnaWQgIkRpc3BsYXkgZ2l0YXR0cmlidXRlcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTW9zdHJhIGxhIGluZm9ybWFjacOzIGRlIC5naXRhdHRyaWJ1dGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgIkRlcHVyYSBnaXRpZ25vcmUgLyBmaXR4ZXJzIGQnZXhjbHVzacOzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworIywgZnV6enkKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJNb3N0cmEgbCdhZHJlw6dhIGVsZWN0csOybmljYSBkZSBjYWRhIGF1dG9yIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQ2FudmlhIGRlIGJyYW5jYSBvIHJlc3RhdXJhIGVscyBmaXR4ZXJzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkNvcGlhIGZpdHhlcnMgZGVzIGRlIGwnw61uZGV4IGEgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NgorbXNnaWQgIkVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkIgorbXNnc3RyICJBc3NlZ3VyYSBxdWUgdW4gbm9tIGRlIHJlZmVyw6huY2lhIGVzdMOgIGJlbiBmb3JtYXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICJUcm9iYSBsZXMgY29taXNzaW9ucyBxdWUgZW5jYXJhIHMnaGFuIGQnYXBsaWNhciBhIGxhIGZvbnQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkFwbGljYSBlbHMgY2FudmlzIGludHJvZHXDr3RzIHBlciBhbGd1bmVzIGNvbWlzc2lvbnMgZXhpc3RlbnRzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OQorbXNnaWQgIkdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0IgorbXNnc3RyICJBbHRlcm5hdGl2YSBncsOgZmljYSBhIGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlN1cHJpbWVpeCBlbHMgZml0eGVycyBubyBzZWd1aXRzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6NzEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIkNsb25hIHVuIGRpcMOyc2l0IGEgdW4gZGlyZWN0b3JpIG5vdSIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAiTW9zdHJhIGxlcyBkYWRlcyBlbiBjb2x1bW5lcyIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVnaXN0cmEgZWxzIGNhbnZpcyBhbCBkaXDDsnNpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIkVzY3JpdSBpIHZlcmlmaWNhIGVscyBmaXR4ZXJzIGNvbW1pdC1ncmFwaCBkZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc1Cittc2dpZCAiQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIkNyZWEgdW4gb2JqZWN0ZSBkZSBjb21pc3Npw7Mgbm91IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIk9idMOpIG8gZXN0YWJsZWl4IG9wY2lvbnMgZGUgZGlww7JzaXQgbyBnbG9iYWxzIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NworbXNnaWQgIkNvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICJBanVkYW50IHBlciBhIGVtbWFnYXR6ZW1hciBjcmVkZW5jaWFscyBhIGRpc2MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgxCittc2dpZCAiRXhwb3J0IGEgc2luZ2xlIGNvbW1pdCB0byBhIENWUyBjaGVja291dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MgorbXNnaWQgIlNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgzCittc2dpZCAiQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQiCittc2dzdHIgIlVuIGVtdWxhZG9yIGRlIHNlcnZpZG9yIENWUyBwZXIgYWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgIlVuIHNlcnZpZG9yIHJlYWxtZW50IHNlbnppbGwgcGVyIGEgZGlww7JzaXRzIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiIgorIkTDs25hIHVuIG5vbSBsbGVnaWJsZSBwZXIgaHVtYW5zIGJhc2FudC1zZSBlbiBsZXMgcmVmZXLDqG5jaWVzIGRpc3BvbmlibGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKyJNb3N0cmEgZWxzIGNhbnZpcyBlbnRyZSBjb21pc3Npb25zLCBsYSBjb21pc3Npw7MgaSBsJ2FyYnJlIGRlIHRyZWJhbGwsIGV0YyIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIkNvbXBhcmEgZml0eGVycyBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgaSBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJDb21wYXJhIHVuIGFyYnJlIGFtYiBsJ2FyYnJlIGRlIHRyZWJhbGwgbyBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiTW9zdHJhIGVscyBjYW52aXMgdXNhbnQgZWluZXMgZGlmZiBjb211bmVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICJFeHBsb3JhZG9yIGRlIGRhZGVzIGRlbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIlJlcmVmb25zIHBlciBhIGltcG9ydGFkb3JzIHLDoHBpZHMgZGUgZGFkZXMgZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkJhaXhhIG9iamVjdGVzIGkgcmVmZXLDqG5jaWVzIGQndW4gYWx0cmUgZGlww7JzaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk0Cittc2dpZCAiUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlJlcCBlbHMgb2JqZWN0ZXMgcXVlIG1hbnF1ZW4gZGVzIGQndW4gYWx0cmUgZGlww7JzaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAiVG9ybmEgYSBlc2NyaXVyZSBsZXMgYnJhbnF1ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJQcm9kdWVpeCB1biBtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGUgZnVzacOzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAiTW9zdHJhIGxhIGluZm9ybWFjacOzIGVuIGNhZGEgcmVmZXLDqG5jaWEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAiUHJlcGFyYSBwZWRhw6dvcyBwZXIgZW52aWFyLWxvcyBwZXIgY29ycmV1IGVsZWN0csOybmljIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OQorbXNnaWQgIlZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZSIKK21zZ3N0ciAiVmVyaWZpY2EgbGEgY29ubmVjdGl2aXRhdCBpIHZhbGlkZXNhIGRlbCBvYmplY3RlcyBhIGxhIGJhc2UgZGUgZGFkZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMAorbXNnaWQgIkNsZWFudXAgdW5uZWNlc3NhcnkgZmlsZXMgYW5kIG9wdGltaXplIHRoZSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJOZXRlamEgZWxzIGZpdHhlcnMgaW5uZWNlc3NhcmlzIGkgb3B0aW1pdHphIGVsIGRpcMOyc2l0IGxvY2FsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkltcHJpbWVpeCBsZXMgbMOtbmllcyBjb2luY2lkZW50cyBhbWIgdW4gcGF0csOzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDMKK21zZ2lkICJBIHBvcnRhYmxlIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gR2l0IgorbXNnc3RyICJVbmEgaW50ZXJmw61jaWUgZ3LDoGZpYyBwb3J0YWJsZSBwZXIgYWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDQKK21zZ2lkICJDb21wdXRlIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiQ2FsY3VsYSBsJ0lEIGRlIGwnb2JqZWN0ZSBpIG9wY2lvbmFsbWVudCBjcmVhIHVuIGJsb2IgZGVzIGRlbCBmaXR4ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIk1vc3RyYSBpbmZvcm1hY2nDsyBkJ2FqdWRhIGRlbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAiQmFpeGEgZGVzIGQndW4gZGlww7JzaXQgR2l0IHJlbW90IHZpYSBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKKyMsIGZ1enp5Cittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgSFRUUC9EQVYgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJCYWl4YSBvYmplY3RlcyBpIHJlZmVyw6huY2llcyBkJ3VuIGFsdHJlIGRpcMOyc2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDkKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGZyb20gc3RkaW4gdG8gYW4gSU1BUCBmb2xkZXIiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEwCittc2dpZCAiQnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTEKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiQ3JlYSB1biBkaXDDsnNpdCBkZSBHaXQgYnVpdCBvIHJlaW5pY2lhbGl0emEgdW4gZXhpc3RlbnQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMgorbXNnaWQgIkluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMworbXNnaWQgIkFkZCBvciBwYXJzZSBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGluIGNvbW1pdCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTQKK21zZ2lkICJUaGUgR2l0IHJlcG9zaXRvcnkgYnJvd3NlciIKK21zZ3N0ciAiRWwgbmF2ZWdhZG9yIGRlIGRpcMOyc2l0cyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNQorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIk1vc3RyYSBlbHMgcmVnaXN0cmVzIGRlIGNvbWlzc2nDsyIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIk1vc3RyYSBpbmZvcm1hY2nDsyBzb2JyZSBlbHMgZml0eGVyIGEgbCfDrW5kZXggaSBhIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgIk1vc3RyYSBsZXMgcmVmZXLDqG5jaWVzIGQndW4gZGlww7JzaXQgcmVtb3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIk1vc3RyYSBlbHMgY29udGluZ3V0cyBkJ3VuIG9iamVjdGUgZGUgbCdhcmJyZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTE5Cittc2dpZCAiRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTIxCittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIlVuZWl4IGR1ZXMgbyBtw6lzIGhpc3TDsnJpZXMgZGUgZGVzZW52b2x1cGFtZW50IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjIKKyMsIGZ1enp5Cittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgInRyb2JhIGVscyBhdmFudHBhc3NhdHMgcGVyIGEgdW5hIHNvbGEgZnVzacOzIGQnbiB2aWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKKyMsIGZ1enp5Cittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgIlMnZXN0w6AgcmV0cm9jZWRpbnQgYSB1bmEgZnVzacOzIGRlIDMgdmllcy4uLlxuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjQKKyMsIGZ1enp5Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAiZnVzacOzIGRlIDMgdmllcyBzaSBubyBjYWwgZnVzacOzIGEgbml2ZWxsIGRlIGZpdHhlcnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgIiIKKyJFeGVjdXRhIGVpbmVzIGRlIHJlc29sdWNpw7MgZGUgY29uZmxpY3RlcyBwZXIgYSByZXNvbGRyZSBjb25mbGljdGVzIGRlIGZ1c3Npw7MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNworbXNnaWQgIlNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIkNyZWEgdW4gb2JqZWN0ZSBldGlxdWV0YSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJNb3UgbyBjYW52aWEgZGUgbm9tIGEgdW4gZml0eGVyLCBkaXJlY3RvcmkgbyBlbmxsYcOnIHNpbWLDsmxpYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTMyCittc2dpZCAiRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzMKK21zZ2lkICJBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMiCittc2dzdHIgIkFmZWdlaXggbyBpbnNwZWNjaW9uYSBub3RlcyBkZSBsJ29iamVjdGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNAorbXNnaWQgIkltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJJbXBvcnRhIGRlcyBkZSBpIGVudmlhIGEgZGlww7JzaXRzIFBlcmZvcmNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICJDcmVhIHVuIGFyeGl1IGVtcGFxdWV0YXQgZCdvYmplY3RlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAiVHJvYmEgZml0eGVycyBlbXBhcXVldGF0cyByZWR1bmRhbnRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICJDYWxjdWxhIHVuIGlkZW50aWZpY2Fkb3Igw7puaWNhIHBlciBhIGNhZGEgcGVkYcOnIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDAKK21zZ2lkICJQcnVuZSBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIlBvZGEgdG90cyBlbHMgb2JqZWN0ZXMgbm8gYWNjZXNzaWJsZXMgZGUgbGEgYmFzZSBkZSBkYWRlcyBkJ29iamVjdGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDEKK21zZ2lkICJSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQyCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJPYnTDqW4gaSBpbnRlZ3JhIGFtYiB1biBhbHRyZSBkaXDDsnNpdCBvIHVuYSBicmFuY2EgbG9jYWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorIkFjdHVhbGl0emEgbGVzIHJlZmVyw6huY2llcyByZW1vdGVzIGp1bnRhbWVudCBhbWIgZWxzIG9iamVjdGVzIGFzc29jaWF0cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ0CisjLCBmdXp6eQorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIGZvbnQgcGVyIGRlZmVjdGUgZGVmaW5pZGEgcGVyIGEgbGEgYnJhbmNhIGFjdHVhbC4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NQorbXNnaWQgIkNvbXBhcmUgdHdvIGNvbW1pdCByYW5nZXMgKGUuZy4gdHdvIHZlcnNpb25zIG9mIGEgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKKyMsIGZ1enp5Cittc2dpZCAiUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWN0dWFsaXR6YSBsYSBpbmZvcm1hY2nDsyBkJ2VzdGFkw61zdGlxdWVzIGVuIGVsIGZpdHhlciBkJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICJUb3JuYSBhIGFwbGljYXIgbGVzIGNvbWlzc2lvbnMgc29icmUgdW4gYWx0cmUgcHVudCBkZSBiYXNhbWVudCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ4CisjLCBmdXp6eQorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVnaXN0cmEgZWxzIGNhbnZpcyBhbCBkaXDDsnNpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5CisjLCBmdXp6eQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIm1vc3RyYSBsYSBpbmZvcm1hY2nDsyBkZSByZXNvbHVjacOzIGRlIGRlc2ZldCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUwCisjLCBmdXp6eQorbXNnaWQgIk1hbmFnZSBzZXQgb2YgdHJhY2tlZCByZXBvc2l0b3JpZXMiCittc2dzdHIgIlJlZ2lzdHJhIGVscyBjYW52aXMgYWwgZGlww7JzaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MQorIywgZnV6enkKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCBmb3JhIGQndW4gZGlww7JzaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorIywgZnV6enkKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cyIKK21zZ3N0ciAiIgorIkNyZWEsIGxsaXN0YSwgc3VwcmltZWl4IG8gdmVyaWZpY2EgdW4gb2JqZWN0ZSBkJ2V0aXF1ZXRhIHNpZ25hdCBhbWIgR1BHIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTQKK21zZ2lkICJSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICJSZXN0YWJsZWl4IGxhIEhFQUQgYWN0dWFsIGEgbCdlc3RhdCBlc3BlY2lmaWNhdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU2Cittc2dpZCAiUmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIlJlc3RhdXJhIGVscyBmaXR4ZXJzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU3Cittc2dpZCAiUmV2ZXJ0IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAiUmV2ZXJ0ZWl4IGNvbWlzc2lvbnMgZXhpc3RlbnRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIk1vc3RyYSBsZXMgY29taXNzaW9ucyBlbiBvcmRyZSB0b3BvbMOyZ2ljIGludmVycyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAiRXNjb2xsZWl4IGkgcGVyc29uYWxpdHphIGVscyBwYXLDoG1ldHJlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTYwCittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIkVsaW1pbmEgZml0eGVycyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwgaSBkZSBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgIkVudmlhIHVuYSBjb2zCt2xlY2Npw7MgZGUgcGVkYcOnb3MgY29tIGEgY29ycmV1cyBlbGVjdHLDsm5pY3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MgorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlB1amEgb2JqZWN0ZXMgc29icmUgZWwgcHJvdG9jb2wgR2l0IGEgdW4gYWx0cmUgZGlww7JzaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY0Cittc2dpZCAiU3VtbWFyaXplICdnaXQgbG9nJyBvdXRwdXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIk1vc3RyYSBkaXZlcnNvcyB0aXB1cyBkJ29iamVjdGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjYKK21zZ2lkICJTaG93IGJyYW5jaGVzIGFuZCB0aGVpciBjb21taXRzIgorbXNnc3RyICJNb3N0cmEgbGVzIGJyYW5xdWVzIGkgbGVzIHNldmVzIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NworbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgIk1vc3RyYSBsJ8OtbmRleCBkJ2FyeGl1cyBlbXBhcXVldGF0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjgKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJMbGlzdGEgbGVzIHJlZmVyw6huY2llcyBlbiB1biBkaXDDsnNpdCBsb2NhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MAorbXNnaWQgIkNvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUiCittc2dzdHIgIkNvZGkgZGUgc2NyaXB0cyBkZSBjb25maWd1cmFjacOzIGNvbXVucyBwZWwgR2l0IHNoZWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKKyMsIGZ1enp5Cittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICIlczogamEgZXhpc3RlaXggZW4gZWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworIywgZnV6enkKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICJBZmVnZWl4IGVscyBjb250aW5ndXRzIGRlbHMgZml0eGVycyBhIGwnw61uZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzQKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICJNb3N0cmEgbCdlc3RhdCBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICJTdXByaW1laXggbCdlc3BhaSBlbiBibGFuYyBpbm5lY2Vzc2FyaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAiSW5pY2lhbGl0emEsIGFjdHVhbGl0emEgbyBpbnNwZWNjaW9uYSBzdWJtw7JkdWxzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzcKK21zZ2lkICJCaWRpcmVjdGlvbmFsIG9wZXJhdGlvbiBiZXR3ZWVuIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGFuZCBHaXQiCittc2dzdHIgIk9wZXJhY2nDsyBiaWRpcmVjY2lvbmFsIGVudHJlIHVuIGRpcMOyc2l0IGEgU3VidmVyc2lvbiBpIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICJDb21tdXRhIGJyYW5xdWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJMbGVnZWl4LCBtb2RpZmljYSBpIHN1cHJpbWVpeCByZWZlcsOobmNpZXMgc2ltYsOybGlxdWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiIgorIkNyZWEsIGxsaXN0YSwgc3VwcmltZWl4IG8gdmVyaWZpY2EgdW4gb2JqZWN0ZSBkJ2V0aXF1ZXRhIHNpZ25hdCBhbWIgR1BHIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODEKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAiQ3JlYSB1biBmaXR4ZXIgdGVtcG9yYWwgYW1iIGVscyBjb250aW5ndXRzIGRlbHMgYmxvYnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MgorbXNnaWQgIlVucGFjayBvYmplY3RzIGZyb20gYSBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAiRGVzZW1wYXF1ZXRhIG9iamVjdGVzIGQndW4gYXJ4aXUgZW1wYXF1ZXRhdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiUmVnaXN0cmEgZWxzIGNvbnRpbmd1dHMgZGVsIGZpdHhlciBlbiBsJ2FyYnJlIGRlIHRyZWJhbGwgYSBsJ8OtbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg0Cittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICIiCisiQWN0dWFsaXR6YSBlbCBub20gZGUgbCdvYmplY3RlIGVtbWFnYXR6ZW1hIGVuIHVuYSByZWZlcsOobmNpYSBkZSBmb3JtYSBzZWd1cmEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICJFbnZpYSBsJ2FyeGl1IGRlIHRvcm5hZGEgYWwgZ2l0LWFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NworbXNnaWQgIlNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjayIKK21zZ3N0ciAiRW52aWEgZWxzIG9iamVjdGVzIGVtcGFxdWV0YXRzIGRlIHRvcm5hZGEgYWwgZ2l0LWZldGNoLXBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OAorbXNnaWQgIlNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZSIKK21zZ3N0ciAiTW9zdHJhIHVuYSB2YXJpYWJsZSBsw7JnaWNhIGRlbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgIlZlcmlmaWNhIGxhIHNpZ25hdHVyYSBHUEcgZGUgbGVzIGNvbWlzc2lvbnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MAorbXNnaWQgIlZhbGlkYXRlIHBhY2tlZCBHaXQgYXJjaGl2ZSBmaWxlcyIKK21zZ3N0ciAiVmFsaWRhIGVscyBmaXR4ZXJzIGQnYXJ4aXVzIEdpdCBlbXBhcXVldGF0cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTkxCittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAiVmVyaWZpY2EgbGEgc2lnbmF0dXJhIEdQRyBkZSBsZXMgZXRpcXVldGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICJJbnRlcmbDrWNpZSB3ZWIgZGVsIEdpdCAoaW50ZXJmw61jaWUgd2ViIHBlbHMgZGlww7JzaXRzIEdpdCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIlNob3cgbG9ncyB3aXRoIGRpZmZlcmVuY2UgZWFjaCBjb21taXQgaW50cm9kdWNlcyIKK21zZ3N0ciAiTW9zdHJhIHJlZ2lzdHJlcyBhbWIgbGEgZGlmZXLDqG5jaWEgaW50cm9kdcOvZGEgcGVyIGNhZGEgY29taXNzacOzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiR2VzdGlvbmEgbcO6bHRpcGxlcyBhcmJyZXMgZGUgdHJlYmFsbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk1Cittc2dpZCAiQ3JlYXRlIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiQ3JlYSB1biBvYmplY3RlIGFyYnJlIGRlcyBkZSBsJ8OtbmRleCBhY3R1YWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NgorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgIkxhIGRlZmluaWNpw7MgZCdhdHJpYnV0cyBwZXIgY2Ftw60iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NworbXNnaWQgIkdpdCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGFuZCBjb252ZW50aW9ucyIKK21zZ3N0ciAiSW50ZXJmw61jaWUgaSBjb252ZW5jaW9ucyBkZSBsYSBsw61uaWEgZCdvcmRyZXMgZGVsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk4Cittc2dpZCAiQSBHaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycyIKK21zZ3N0ciAiVW4gdHV0b3JpYWwgYsOgc2ljIGRlbCBHaXQgcGVyIGEgZGVzZW52b2x1cGFkb3JzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiR2l0IHBlciBhIHVzdWFyaXMgZGVsIENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCisjLCBmdXp6eQorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICJvbWV0IGxhIHNvcnRpZGEgZGUgZGlmZXLDqG5jaWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0IgorbXNnc3RyICJVbiBjb25qdW50IG3DrW5pbSDDunRpbCBkJ29yZHJlcyBkacOgcmllcyBkZWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDIKK21zZ2lkICJBIEdpdCBHbG9zc2FyeSIKK21zZ3N0ciAiVW4gZ2xvc3NhcmkgZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAiTGxpZ2FtcyB1dGlsaXR6YXRzIHBlbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNAorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIkVzcGVjaWZpY2EgZWxzIGZpdHhlcnMgaW50ZW5jaW9uYWxtZW50IG5vIHNlZ3VpdHMgYSBpZ25vcmFyIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiTGEgZGVmaW5pY2nDsyBkZSBsZXMgcHJvcGlldGF0cyBkZSBzdWJtw7JkdWxzIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDYKK21zZ2lkICJHaXQgbmFtZXNwYWNlcyIKK21zZ3N0ciAiRXNwYWlzIGRlIG5vbXMgZGVsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJEaXNwb3NpY2nDsyBkZWwgZGlww7JzaXQgZGVsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA4Cittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICJMJ2VzcGVjaWZpY2FjacOzIGRlIHJldmlzaW9ucyBpIHJhbmdzIHBlciBhbCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOQorbXNnaWQgIk1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdDogcGFydCB0d28iCittc2dzdHIgIlVuIHR1dG9yaWFsIGQnaW50cm9kdWNjacOzIGFsIEdpdDogc2Vnb25hIHBhcnQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMQorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCIKK21zZ3N0ciAiVW4gdHV0b3JpYWwgZCdpbnRyb2R1Y2Npw7MgYWwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTIKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIlVuYSB2aXNpw7MgZGUgY29uanVudCBkZSBmbHV4b3MgZGUgdHJlYmFsbCByZWNvbWFuYXRzIGFtYiBHaXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiQ2FsIGNvbWVuw6dhciBwZXIgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo2MAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiVm9sZXUgcXVlIGhvIGZhY2kgcGVyIHZvc3TDqCBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiSW50cm9kdWNjacOzIGRlIHJldmlzacOzIGVycsOybmlhOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIkVudHJhZGEgZGUgcmV2aXNpw7MgZXJyw7JuaWE6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiSW50cm9kdWNjacOzIGRlIHJldmlzacOzIGVycsOybmlhOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjEzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgcG90IGFjY2VwdGFyIG5vbcOpcyB1biBwYXLDoG1ldHJlLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJDYXAgZml0eGVyIGRlIHJlZ2lzdHJlIGRvbmF0IgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciAkZmlsZSBwZXIgYSByZXByb2R1Y2Npw7MiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBkZSBxdcOoIHBhcmxldT8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQxCittc2dpZCAiYmlzZWN0IHJ1biBmYWlsZWQ6IG5vIGNvbW1hbmQgcHJvdmlkZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJzJ2VzdMOgIGV4ZWN1dGFudCAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorImVsIHBhcyBkZSBiaXNlY2Npw7MgaGEgZmFsbGF0OlxuIgorImVsIGNvZGkgZGUgc29ydGlkYSAkcmVzIGRlICckY29tbWFuZCcgw6lzIDwgMCBvID49IDEyOCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzkKK21zZ2lkICJiaXNlY3QgcnVuIGNhbm5vdCBjb250aW51ZSBhbnkgbW9yZSIKK21zZ3N0ciAiZWwgcGFzIGRlIGJpc2VjY2nDsyBubyBwb3QgY29udGludWFyIG3DqXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorImVsIHBhcyBkZSBiaXNlY2Npw7MgaGEgZmFsbGF0OlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBoYSBzb3J0aXQgYW1iIGVsIGNvZGkgZCdlcnJvciAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAicGFzIGRlIGJpc2VjY2nDsyByZWVpeGl0IgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiTm8gZXN0ZW0gYmlzZWNhbnQuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiRXJyb3I6IEVscyB2b3N0cmVzIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHNlIHNvYnJlZXNjcml1cmllbiBwZXIgIgorImZ1c2lvbmFyIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MQorbXNnaWQgIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorbXNnc3RyICJMYSBmdXNpw7MgYXV0b23DoHRpY2Egbm8gaGEgZnVuY2lvbmF0LiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICJObyBzJ2hhIGRlIGZlciB1biBwb3AuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCB0cm9iYXIgY2FwIGNvbWlzc2nDsyBlbiBjb23DuiBhbWIgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJKYSBlc3TDoCBhbCBkaWEgYW1iICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICJTJ2VzdMOgIGF2YW7Dp2FudCByw6BwaWRhbWVudCBhOiAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjk3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJTJ2VzdMOgIGludGVudGFudCB1bmEgZnVzacOzIHNpbXBsZSBhbWIgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDoxMDIKK21zZ2lkICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKK21zZ3N0ciAiIgorIkxhIGZ1c2nDsyBzaW1wbGUgbm8gaGEgZnVuY2lvbmF0LCBzJ2VzdMOgIGludGVudGFudCB1bmEgZnVzacOzIGF1dG9tw6B0aWNhLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiTm8gZXMgcG90IGVsaW1pbmFyIGwnw61uZGV4IHRlbXBvcmFsIChhaXjDsiBubyBwb3QgcGFzc2FyKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAiTm8gZXMgcG90IGFjdHVhbGl0emFyICRyZWZfc3Rhc2ggYW1iICR3X2NvbW1pdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAiUydoYW4gZGVzYXQgZWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwgaSBsJ2VzdGF0IGQnw61uZGV4ICRzdGFzaF9tc2ciCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAib3BjacOzIGRlc2NvbmVndWRhOiAkb3B0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiUydoYW4gZXNwZWNpZmljYXQgbWFzc2EgcmV2aXNpb25zOiAkUkVWIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2Ugbm8gw6lzIHVuYSByZWZlcsOobmNpYSB2w6BsaWRhIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBubyDDqXMgdW5hIGNvbWlzc2nDsyBkZSB0aXB1cyBtYWdhdHplbSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIG5vIMOpcyB1bmEgcmVmZXLDqG5jaWEgZGUgbWFnYXR6ZW0iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgbCfDrW5kZXgiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjIyCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJObyBlcyBwb3QgYXBsaWNhciB1biBtYWdhdHplbSBlbm1pZyBkJ3VuYSBmdXNpw7MiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMwCittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiSGkgaGEgY29uZmxpY3RlcyBlbiBsJ8OtbmRleC4gUHJvdmV1LWhvIHNlbnNlIC0taW5kZXguIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMgorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZGVzYXIgbCdhcmJyZSBkJ8OtbmRleCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NDEKK21zZ2lkICJDb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiTm8gcydoYW4gcG9ndXQgcmVzdGF1cmFyIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZGVzIGRlbCDCq3N0YXNowrsiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjY2Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIk5vIGVzIHBvdCBmZXIgwqt1bnN0YWdlwrsgZGVscyBmaXR4ZXJzIG1vZGlmaWNhdHMiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICIke1JFVn0gKCRzKSBkZXNjYXJ0YWRhIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBObyBzJ2hhIHBvZ3V0IGRlc2NhcnRhciBsJ2VudHJhZGEgZGUgbWFnYXR6ZW0iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzkyCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoUGVyIHJlc3RhdXJhci1sZXMgdGVjbGVnZXUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjAyCittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKyJFbCBjYW3DrSByZWxhdGl1IG5vbcOpcyBlcyBwb3QgdXNhciBkZXMgZGVsIG5pdmVsbCBzdXBlcmlvciBkZSBsJ2FyYnJlIGRlICIKKyJ0cmViYWxsIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMgorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiVVJMIGRlIGRpcMOyc2l0OiAnJHJlcG8nIGhhIGRlIHNlciBhYnNvbHV0IG8gY29tZW7Dp2FyIGFtYiAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiJyRzbV9wYXRoJyBqYSBleGlzdGVpeCBlbiBsJ8OtbmRleCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIickc21fcGF0aCcgamEgZXhpc3RlaXggZW4gbCfDrW5kZXggaSBubyDDqXMgc3VibcOyZHVsIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0MQorIywgZnV6enksIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiZWwgY2Ftw60gwqslc8K7IG5vIHTDqSBsYSBzZXZhIHZlcnNpw7MiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQ3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAiIgorIkVsIGNhbcOtIHNlZ8O8ZW50IHMnaWdub3JhIHBlciB1biBkZWxzIHZvc3RyZXMgZml0eGVycyAuZ2l0aWdub3JlOlxuIgorIiRzbV9wYXRoXG4iCisiVXNldSAtZiBzaSByZWFsbWVudCB2b2xldSBhZmVnaXItbG8uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIlMnZXN0w6AgYWZlZ2ludCBlbCBkaXDDsnNpdCBleGlzdGVudCBhICckc21fcGF0aCcgYSBsJ8OtbmRleCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIGphIGV4aXN0ZWl4IGkgbm8gw6lzIHVuIGRpcMOyc2l0IGRlIGdpdCB2w6BsaWQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKyJFcyB0cm9iYSB1biBkaXJlY3RvcmkgZGUgZ2l0IHBlciBhICckc21fbmFtZScgbG9jYWxtZW50IGFtYiBlbHMgcmVtb3RzOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyJTaSB2b2xldSByZXVzYXIgYXF1ZXN0IGRpcmVjdG9yaSBkZSBnaXQgbG9jYWwgZW4gbGxvYyBkZSBjbG9uYXIgZGUgbm91IGRlXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2V1IGwnb3BjacOzICctLWZvcmNlJy4gU2kgZWwgZGlyZWN0b3JpIGRlIGdpdCBsb2NhbCBubyDDqXMgZWwgZGlww7JzaXQgIgorImNvcnJlY3RlXG4iCisibyBubyBlc3RldSBzZWd1ciBkZSBxdcOoIHZvbCBkaXIgYWl4w7IsIHRyaWV1IHVuIGFsdHJlIG5vbSBhbWIgbCdvcGNpw7MgJy0tIgorIm5hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIiIKKyJTJ2VzdMOgIHJlYWN0aXZhbnQgZWwgZGlyZWN0b3JpIGRlIGdpdCBsb2NhbCBwZXIgYWwgc3VibcOyZHVsICckc21fbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFnYWZhciBlbCBzdWJtw7JkdWwgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYWZlZ2lyIGVsIHN1Ym3DsmR1bCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHJlZ2lzdHJhciBlbCBzdWJtw7JkdWwgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1ODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSByZXZpc2nDsyBhY3R1YWwgZW4gZWwgY2Ftw60gZGUgc3VibcOyZHVsICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAiCisiJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgdHJvYmFyIGxhIHJldmlzacOzIGFjdHVhbCBkZSAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gZW4gZWwgIgorImNhbcOtIGRlIHN1Ym3DsmR1bCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxMworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoICIKKyIkc2hhMToiCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgZW4gZWwgY2Ftw60gZGUgc3VibcOyZHVsIMKrJGRpc3BsYXlwYXRowrs7IHMnZXN0w6AgIgorImludGVudGFudCBvYnRlbmlyIGRpcmVjdGFtZW50ICRzaGExOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyJTJ2hhIG9idGluZ3V0IGVuIGVsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyRkaXNwbGF5cGF0aMK7LCBwZXLDsiBubyBjb250ZW5pYSAkc2hhMS4gIgorIkwnb2J0ZW5jacOzIGRpcmVjdGEgZCdhcXVlbGxhIGNvbWlzc2nDsyBoYSBmYWxsYXQuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYWdhZmFyIMKrJHNoYTHCuyBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgwqskZGlzcGxheXBhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJDYW3DrSBkZSBzdWJtw7JkdWwgwqskZGlzcGxheXBhdGjCuzogcydoYSBhZ2FmYXQgwqskc2hhMcK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBmZXIgwqtyZWJhc2XCuyDCqyRzaGExwrsnIGVuIGVsIGNhbcOtIGRlIHN1Ym3DsmR1bCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICJDYW3DrSBkZSBzdWJtw7JkdWwgwqskZGlzcGxheXBhdGjCuzogcydoYSBmZXQgwqtyZWJhc2XCuyBlbiDCqyRzaGExwrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBmdXNpb25hciDCqyRzaGExwrsgZW4gZWwgY2Ftw60gZGUgc3VibcOyZHVsIMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIkNhbcOtIGRlIHN1Ym3DsmR1bCDCqyRkaXNwbGF5cGF0aMK7OiBzJ2hhIGZ1c2lvbmF0IGVuIMKrJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIkwnZXhlY3VjacOzIGRlIMKrJGNvbW1hbmQgJHNoYTHCuyBoYSBmYWxsYXQgZW4gZWwgY2Ftw60gZGUgc3VibcOyZHVsICIKKyLCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIkNhbcOtIGRlIHN1Ym3DsmR1bCDCqyRkaXNwbGF5cGF0aMK7OiDCqyRjb21tYW5kICRzaGExwrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiByZWNvcnJlIHJlY3Vyc2l2YW1lbnQgZGlucyBkZWwgY2Ftw60gZGUgc3VibcOyZHVsICIKKyLCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg4NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIkwnb3BjacOzIC0tY2FjaGVkIG5vIGVzIHBvdCB1c2FyIGFtYiBsJ29wY2nDsyAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkzOAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJtb2RlIGluZXNwZXJhdCAkbW9kX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICBBdsOtczogJGRpc3BsYXlfbmFtZSBubyBjb250w6kgbGEgY29taXNzacOzICRzaGExX3NyYyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBBdsOtczogJGRpc3BsYXlfbmFtZSBubyBjb250w6kgbGEgY29taXNzacOzICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiICBBdsOtczogJGRpc3BsYXlfbmFtZSBubyBjb250w6kgbGVzIGNvbWlzc2lvbnMgJHNoYTFfc3JjIGkgJHNoYTFfZHN0IgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlZlZ2V1IGdpdC0ke2NtZH0oMSkgcGVyIGRldGFsbHMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTA5Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICJTJ2hhIGFwbGljYXQgbCfCq2F1dG9zdGFzaMK7LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICJObyBlcyBwb3QgZW1tYWdhdHplbWFyICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICJTJ2VzdMOgIGZlbnQgwqtyZWJhc2XCuyAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPcmRyZXM6XG4iCisiIHAsIHBpY2sgPGNvbWlzc2nDsz4gPSB1c2EgbGEgY29taXNzacOzXG4iCisiIHIsIHJld29yZCA8Y29taXNzacOzPiA9IHVzYSBsYSBjb21pc3Npw7MsIHBlcsOyIGVkaXRhIGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDs1xuIgorIiBlLCBlZGl0IDxjb21pc3Npw7M+ID0gdXNhIGxhIGNvbWlzc2nDsywgcGVyw7IgYXR1cmEndCBwZXIgYSBlc21lbmFyXG4iCisiIHMsIHNxdWFzaCA8Y29taXNzacOzPiA9IHVzYSBsYSBjb21pc3Npw7MsIHBlcsOyIGZ1c2lvbmEnbCBhIGxhIGNvbWlzc2nDsyBwcsOodmlhXG4iCisiIGYsIGZpeHVwIDxjb21pc3Npw7M+ID0gY29tIFwic3F1YXNoXCIsIHBlcsOyIGRlc2NhcnRhIGVsIG1pc3NhdGdlIGRlIHJlZ2lzdHJlIGQnYXF1ZXN0YSAiCisiY29taXNzacOzXG4iCisiIHgsIGV4ZWMgPSBleGVjdXRhIGwnb3JkcmUgKGxhIHJlc3RhIGRlIGxhIGzDrW5pYSkgdXNhbnQgbCdpbnTDqHJwcmV0ICIKKyJkJ29yZHJlc1xuIgorIiBkLCBkcm9wID0gZWxpbWluYSBsYSBjb21pc3Npw7NcbiIKKyJcbiIKKyJFcyBwb3QgY2FudmlhciBsJ29yZHJlIGQnYXF1ZXN0ZXMgbMOtbmllczsgcydleGVjdXRlbiBkZSBkYWx0IGEgYmFpeC5cbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiUG9kZXUgZXNtZW5hciBsYSBjb21pc3Npw7MgYXJhLCBhbWJcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIlVuYSB2ZWdhZGEgcXVlIGVzdGlndWV1IHNhdGlzZmV0IGFtYiBlbHMgdm9zdHJlcyBjYW52aXMsIGV4ZWN1dGV1XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMTogbm8gw6lzIHVuYSBjb21pc3Npw7MgcXVlIGVzIHB1Z3VpIGVzY29sbGlyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAiTm9tIGRlIGNvbWlzc2nDsyBubyB2w6BsaWQ6ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzY0Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAiTm8gZXMgcG90IGVzY3JpdXJlIGVsIHNoYTEgcmVlbXBsYcOnYW50IGRlIGxhIGNvbWlzc2nDsyBhY3R1YWwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiQXZhbsOnIHLDoHBpZCBhICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJObyBlcyBwb3QgYXZhbsOnYXIgcsOgcGlkYW1lbnQgYSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJObyBlcyBwb3QgbW91cmUgSEVBRCBhICRmaXJzdF9wYXJlbnQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAiUydlc3TDoCByZWZ1c2FudCBmZXIgwqtzcXVhc2jCuyBhIHVuYSBmdXNpw7M6ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICJFcnJvciBlbiByZWZlciBsYSBmdXNpw7MgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVzY29sbGlyICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgIkFxdWVzdCDDqXMgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIG7Dum0uICR7bn06IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiRWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIG7Dum0uICR7bn0gcydvbWV0csOgOiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICJBaXjDsiDDqXMgdW5hIGNvbWJpbmFjacOzIGRlICRjb3VudCBjb21pc3Npw7MuIgorbXNnc3RyWzFdICJBaXjDsiDDqXMgdW5hIGNvbWJpbmFjacOzIGRlICRjb3VudCBjb21pc3Npb25zLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIk5vIGVzIHBvdCBlc2NyaXVyZSAkZml4dXBfbXNnIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIkFpeMOyIMOpcyB1bmEgY29tYmluYWNpw7MgZGUgMiBjb21pc3Npb25zLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUzNiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTc5CisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXBsaWNhciAkc2hhMS4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgZXNtZW5hciBsYSBjb21pc3Npw7MgZGVzcHLDqXMgZCdlc2NvbGxpciBhbWIgw6h4aXQgJHNoYTEuLi4gIgorIiRyZXN0XG4iCisiQWl4w7Igw6lzIHByb2JhYmxlbWVudCBhIGNhdXNhIGQndW4gbWlzc2F0Z2UgZGUgY29taXNzacOzIGJ1aXQsIG8gZWwgbGxpZ2FtIGRlXG4iCisicHJlY29taXNzacOzIGhhIGZhbGxhdC4gU2kgZWwgbGxpZ2FtIGRlIHByZWNvbWlzc2nDsyBoYSBmYWxsYXQsIHBvdCBzZXIgcXVlXG4iCisibmVjZXNzaXRldSByZXNvbGRyZSBlbCBwcm9ibGVtYSBhYmFucyBxdWUgcHVndWV1IGNhbnZpYXIgZWwgbWlzc2F0Z2UgZGVcbiIKKyJjb21pc3Npw7MuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAiUydoYSBhdHVyYXQgYSAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiTm8gZXMgcG90ICckc3F1YXNoX3N0eWxlJyBzZW5zZSB1bmEgY29taXNzacOzIHByw6h2aWEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZzogJHJlc3QiCittc2dzdHIgIlMnZXN0w6AgZXhlY3V0YW50OiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgIkwnZXhlY3VjacOzIGhhIGZhbGxhdDogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTMKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiaSBoYSBmZXQgY2FudmlzIGEgbCfDrW5kZXggbyBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiUG9kZXUgYXJyZWdsYXIgZWwgcHJvYmxlbWEsIGkgbGxhdm9ycyBleGVjdXRldVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0XG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIkwnZXhlY3VjacOzIGhhIHRpbmd1dCDDqHhpdDogJHJlc3RcbiIKKyJwZXLDsiBoYSBkZWl4YXQgY2FudmlzIGEgbCfDrW5kZXggbyBsJ2FyYnJlIGRlIHRyZWJhbGxcbiIKKyJDb21ldGV1IG8gZW1tYWdhdHplbWV1IGVscyB2b3N0cmVzIGNhbnZpcywgaSBsbGF2b3JzIGV4ZWN1dGV1XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIk9yZHJlIGRlc2NvbmVndWRhOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcyMAorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJDb3JyZWdpdS1obyB1c2FudCDCq2dpdCByZWJhc2UgLS1lZGl0LXRvZG/Cuy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICJTJ2hhIGZldCDCq3JlYmFzZcK7IGkgYWN0dWFsaXR6YXQgJGhlYWRfbmFtZSBhbWIgw6h4aXQuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEyCittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVsaW1pbmFyIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJUZW5pdSBjYW52aXMgwqtzdGFnZcK7IGVuIGVsIHZvc3RyZSBhcmJyZSBkZSB0cmViYWxsLlxuIgorIlNpIGFxdWVzdHMgY2FudmlzIHPDs24gcGVyIGZlciDCq3NxdWFzaMK7XG4iCisiYSBsYSBjb21pc3Npw7MgcHLDqHZpYSwgZXhlY3V0ZXU6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJTaSBzw7NuIHBlciBhIGZvcm1hciB1bmEgY29taXNzacOzIG5vdmEsIGV4ZWN1dGV1OlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkVuIGFtYmTDs3MgY2Fzb3MsIHF1YW4gaMOgZ2l1IHRlcm1pbmF0LCBjb250aW51ZXUgYW1iOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiIgorIkhpIGhhIGhhZ3V0IHVuIGVycm9yIGVuIGludGVudGFyIHRyb2JhciBsYSBpZGVudGl0YXQgZCdhdXRvciBwZXIgYSBlc21lbmFyICIKKyJsYSBjb21pc3Npw7MiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzkKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIlRlbml1IGNhbnZpcyBubyBjb21lc29zIGVuIGVsIHZvc3RyZSBhcmJyZSBkZSB0cmViYWxsLiBcbiIKKyJQcmltZXIgY29tZXRldS1sb3MgaSBkZXNwcsOpcyBleGVjdXRldSDCq2dpdCByZWJhc2UgLS1jb250aW51ZcK7IGRlIG5vdS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJObyBzJ2hhbiBwb2d1dCBjb21ldHJlIGVscyBjYW52aXMgwqtzdGFnZWTCuy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBleGVjdXRhciBsJ2VkaXRvciIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYWdhZmFyICRzd2l0Y2hfdG8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIEhFQUQ/IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNyZWFyIGVsICRzdGF0ZV9kaXIgdGVtcG9yYWwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBtYXJjYXIgY29tIGEgaW50ZXJhY3RpdSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0MworIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAiRmVzIMKrcmViYXNlwrsgJHNob3J0cmV2aXNpb25zIHNvYnJlICRzaG9ydG9udG8gKCR0b2RvY291bnQgb3JkcmUpIgorbXNnc3RyWzFdICJGZXMgwqtyZWJhc2XCuyAkc2hvcnRyZXZpc2lvbnMgc29icmUgJHNob3J0b250byAoJHRvZG9jb3VudCBvcmRyZXMpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTk3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDAyCittc2dpZCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiCittc2dzdHIgIk5vIHMnaGFuIHBvZ3V0IGluaWNpYXIgbGVzIGNvbWlzc2lvbnMgcmVlc2NyaXRlcyIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgIsO6czogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBjYW52aWFyIGRlIGRpcmVjdG9yaSBhICRjZHVwLCBlbCBuaXZlbGwgc3VwZXJpb3IgZGUgbCdhcmJyZSBkZSAiCisidHJlYmFsbCIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIwMCBnaXQtc2gtc2V0dXAuc2g6MjA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiZmF0YWw6IG5vIGVzIHBvdCB1c2FyICRwcm9ncmFtX25hbWUgc2Vuc2UgdW4gYXJicmUgZGUgdHJlYmFsbC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTm8gZXMgcG90IGZlciDCq3JlYmFzZcK7OiB0ZW5pdSBjYW52aXMgwqt1bnN0YWdlZMK7LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTm8gZXMgcG9kZW4gcmVlc2NyaXVyZSBicmFucXVlczogVGVuaXUgY2FudmlzIMKrdW5zdGFnZWTCuy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIk5vIGVzIHBvdCBiYWl4YXIgZmVudCDCq3JlYmFzZcK7OiBUZW5pdSBjYW52aXMgwqt1bnN0YWdlZMK7LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJObyBlcyBwb3QgJGFjdGlvbjogVGVuaXUgY2FudmlzIMKrdW5zdGFnZWTCuy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDMKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJObyBlcyBwb3QgZmVyIMKrcmViYXNlwrs6IEVsIHZvc3RyZSDDrW5kZXggY29udMOpIGNhbnZpcyBzZW5zZSBjb21ldHJlLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiTm8gZXMgcG90IGJhaXhhciBmZW50IMKrcmViYXNlwrs6IEVsIHZvc3RyZSDDrW5kZXggY29udMOpIGNhbnZpcyBzZW5zZSBjb21ldHJlLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIk5vIGVzIHBvdCAkYWN0aW9uOiBFbCB2b3N0cmUgw61uZGV4IGNvbnTDqSBjYW52aXMgc2Vuc2UgY29tZXRyZS4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIkFkZGljaW9uYWxtZW50LCBlbCB2b3N0cmUgw61uZGV4IGNvbnTDqSBjYW52aXMgc2Vuc2UgY29tZXRyZS4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzMKK21zZ2lkICJZb3UgbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICIiCisiSGV1IGQnZXhlY3V0YXIgYXF1ZXN0YSBvcmRyZSBkZXMgZGVsIG5pdmVsbCBzdXBlcmlvciBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZGV0ZXJtaW5hciBlbCBjYW3DrSBhYnNvbHV0IGRlbCBkaXJlY3RvcmkgZGUgZ2l0IgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTEycyAlMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ0b3VjaGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidG91Y2hlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJtb2RpZmljYXQgJWQgY2Ftw61cbiIKK21zZ3N0clsxXSAibW9kaWZpY2F0ICVkIGNhbWluc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTMKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnc3RyICIiCisiU2kgZWwgcGVkYcOnIHMnYXBsaWNhIGNvcnJlY3RhbWVudCwgZWwgdHJvcyBlZGl0YXQgZXMgbWFyY2Fyw6AgaW1tZWRpYXRhbWVudFxuIgorInBlciDCq3N0YWdpbmfCuy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiU2kgZWwgcGVkYcOnIHMnYXBsaWNhIGNvcnJlY3RhbWVudCwgZWwgdHJvcyBlZGl0YXQgZXMgbWFyY2Fyw6AgaW1tZWRpYXRhbWVudFxuIgorInBlciDCq3N0YXNoaW5nwrsuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTaSBlbCBwZWRhw6cgcydhcGxpY2EgY29ycmVjdGFtZW50LCBlbCB0cm9zIGVkaXRhdCBlcyBtYXJjYXLDoCBpbW1lZGlhdGFtZW50XG4iCisicGVyIMKrdW5zdGFnaW5nwrsuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDcxCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBlZGHDpyBzJ2FwbGljYSBjb3JyZWN0YW1lbnQsIGVsIHRyb3MgZWRpdGF0IGVzIG1hcmNhcsOgIGltbWVkaWF0YW1lbnRcbiIKKyJwZXIgYXBsaWNhci1zZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKyJTaSBlbCBwZWRhw6cgcydhcGxpY2EgY29ycmVjdGFtZW50LCBlbCB0cm9zIGVkaXRhdCBlcyBtYXJjYXLDoCBpbW1lZGlhdGFtZW50XG4iCisicGVyIGRlc2NhcnRhci1zZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgInMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjcml1cmUgYWwgZml0eGVyIGQnZWRpY2nDsyBkZWwgdHJvczogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIlBlciBzdXByaW1pciDCqyVzwrsgbMOtbmllcywgZmV1LWxlcyBsw61uaWVzICcgJyAoY29udGV4dCkuXG4iCisiUGVyIHN1cHJpbWlyIMKrJXPCuyBsw61uaWVzLCBzdXByaW1pdS1sZXMuXG4iCisiTGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIHBlciAlcyBzZXJhbiBzdXByaW1pZGVzLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExNDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICJzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBhbCBmaXR4ZXIgZCdlZGljacOzIGRlbCB0cm9zOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGZlcyDCq3N0YWdlwrsgZCdhcXVlc3QgdHJvc1xuIgorIm4gLSBubyBmYWNpcyDCq3N0YWdlwrsgZCdhcXVlc3QgdHJvc1xuIgorInEgLSBzdXJ0OyBubyBmYWNpcyDCq3N0YWdlwrsgZCdhcXVlc3QgdHJvcyBvIGRlIGNhcCBhbHRyZSByZXN0YW50XG4iCisiYSAtIGZlcyDCq3N0YWdlwrsgZCdhcXVlc3QgdHJvcyBpIHRvdGEgbGEgcmVzdGEgZGUgdHJvc3NvcyBkZWwgZml0eGVyXG4iCisiZCAtIG5vIGZhY2lzIMKrc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zIG8gZGUgY2FwIGFsdHJlIHJlc3RhbnQgZGVsIGZpdHhlciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU0Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGZlcyDCq3N0YXNowrsgZCdhcXVlc3QgdHJvc1xuIgorIm4gLSBubyBmYWNpcyDCq3N0YXNowrsgZCdhcXVlc3QgdHJvc1xuIgorInEgLSBzdXJ0OyBubyBmYWNpcyDCq3N0YXNowrsgZCdhcXVlc3QgdHJvcyBvIGRlIGNhcCBhbHRyZSByZXN0YW50XG4iCisiYSAtIGZlcyDCq3N0YXNowrsgZCdhcXVlc3QgdHJvcyBpIHRvdGEgbGEgcmVzdGEgZGUgdHJvc3NvcyBkZWwgZml0eGVyXG4iCisiZCAtIG5vIGZhY2lzIMKrc3Rhc2jCuyBkJ2FxdWVzdCB0cm9zIG8gZGUgY2FwIGFsdHJlIHJlc3RhbnQgZGVsIGZpdHhlciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBmZXMgwqt1bnN0YWdlwrsgZCdhcXVlc3QgdHJvc1xuIgorIm4gLSBubyBmYWNpcyDCq3Vuc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zXG4iCisicSAtIHN1cnQ7IG5vIGZhY2lzIMKrdW5zdGFnZcK7IGQnYXF1ZXN0IHRyb3MgbyBkZSBjYXAgYWx0cmUgcmVzdGFudFxuIgorImEgLSBmZXMgwqt1bnN0YWdlwrsgZCdhcXVlc3QgdHJvcyBpIHRvdGEgbGEgcmVzdGEgZGUgdHJvc3NvcyBkZWwgZml0eGVyXG4iCisiZCAtIG5vIGZhY2lzIMKrdW5zdGFnZcK7IGQnYXF1ZXN0IHRyb3MgbyBkZSBjYXAgYWx0cmUgcmVzdGFudCBkZWwgZml0eGVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhIGFxdWVzdCB0cm9zIGEgbCfDrW5kZXhcbiIKKyJuIC0gbm8gYXBsaXF1aXMgYXF1ZXN0IHRyb3MgYSBsJ8OtbmRleFxuIgorInEgLSBzdXJ0OyBubyBhcGxpcXVpcyBhcXVlc3QgdHJvcyBuaSBjYXAgZGVscyBwZW5kZW50c1xuIgorImEgLSBhcGxpY2EgYXF1ZXN0IHRyb3MgaSB0b3RzIGVscyB0cm9zc29zIHBvc3RlcmlvcnMgZW4gZWwgZml0eGVyXG4iCisiZCAtIG5vIGFwbGlxdWlzIGFxdWVzdCB0cm9zIG5pIGNhcCBkZWxzIHRyb3Nzb3MgcG9zdGVyaW9ycyBlbiBlbCBmaXR4ZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTAKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkZXNjYXJ0YSBhcXVlc3QgdHJvcyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGxcbiIKKyJuIC0gbm8gZGVzY2FydGlzIGFxdWVzdCB0cm9zIGRlcyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGxcbiIKKyJxIC0gc3VydDsgbm8gYXBsaXF1aXMgYXF1ZXN0IHRyb3MgbmkgY2FwIGRlbHMgcGVuZGVudHNcbiIKKyJhIC0gZGVzY2FydGEgYXF1ZXN0IHRyb3MgaSB0b3RzIGVscyB0cm9zc29zIHBvc3RlcmlvcnMgZW4gZWwgZml0eGVyXG4iCisiZCAtIG5vIGRlc2NhcnRpcyBhcXVlc3QgdHJvcyBuaSBjYXAgZGVscyB0cm9zc29zIHBvc3RlcmlvcnMgZW4gZWwgZml0eGVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzgKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRlc2NhcnRhIGFxdWVzdCB0cm9zIGRlIGwnw61uZGV4IGkgZGUgbCdhcmJyZSBkZSB0cmViYWxsXG4iCisibiAtIG5vIGRlc2NhcnRpcyBhcXVlc3QgdHJvcyBkZXMgZGUgbCfDrW5kZXggaSBkZSBsJ2FyYnJlIGRlIHRyZWJhbGxcbiIKKyJxIC0gc3VydDsgbm8gYXBsaXF1aXMgYXF1ZXN0IHRyb3MgbmkgY2FwIGRlbHMgcGVuZGVudHNcbiIKKyJhIC0gZGVzY2FydGEgYXF1ZXN0IHRyb3MgaSB0b3RzIGVscyB0cm9zc29zIHBvc3RlcmlvcnMgZW4gZWwgZml0eGVyXG4iCisiZCAtIG5vIGRlc2NhcnRpcyBhcXVlc3QgdHJvcyBuaSBjYXAgZGVscyB0cm9zc29zIHBvc3RlcmlvcnMgZW4gZWwgZml0eGVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcGxpY2EgYXF1ZXN0IHRyb3MgYSBsJ8OtbmRleCBpIGwnYXJicmUgZGUgdHJlYmFsbFxuIgorIm4gLSBubyBhcGxpcXVpcyBhcXVlc3QgdHJvcyBkZXMgZGUgbCfDrW5kZXggaSBkZSBsJ2FyYnJlIGRlIHRyZWJhbGxcbiIKKyJxIC0gc3VydDsgbm8gYXBsaXF1aXMgYXF1ZXN0IHRyb3MgbmkgY2FwIGRlbHMgcGVuZGVudHNcbiIKKyJhIC0gYXBsaWNhIGFxdWVzdCB0cm9zIGkgdG90cyBlbHMgdHJvc3NvcyBwb3N0ZXJpb3JzIGVuIGVsIGZpdHhlclxuIgorImQgLSBubyBhcGxpcXVpcyBhcXVlc3QgdHJvcyBuaSBjYXAgZGVscyB0cm9zc29zIHBvc3RlcmlvcnMgZW4gZWwgZml0eGVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhIGFxdWVzdCB0cm9zIGEgbCdhcmJyZSBkZSB0cmViYWxsXG4iCisibiAtIG5vIGFwbGlxdWlzIGFxdWVzdCB0cm9zIGEgbCdhcmJyZSBkZSB0cmViYWxsXG4iCisicSAtIHN1cnQ7IG5vIGFwbGlxdWlzIGFxdWVzdCB0cm9zIG5pIGNhcCBkZWxzIHBlbmRlbnRzXG4iCisiYSAtIGFwbGljYSBhcXVlc3QgdHJvcyBpIHRvdHMgZWxzIHRyb3Nzb3MgcG9zdGVyaW9ycyBlbiBlbCBmaXR4ZXJcbiIKKyJkIC0gbm8gYXBsaXF1aXMgYXF1ZXN0IHRyb3MgbmkgY2FwIGRlbHMgdHJvc3NvcyBwb3N0ZXJpb3JzIGVuIGVsIGZpdHhlciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIHNlbGVjY2lvbmEgZWwgdHJvcyBvbiB2b2xldSBhbmFyXG4iCisiLyAtIGNlcmNhIHVuIHRyb3MgcXVlIGNvaW5jaWRlaXhpIGFtYiBsJ2V4cHJlc3Npw7MgcmVndWxhciBkb25hZGFcbiIKKyJqIC0gZGVpeGEgYXF1ZXN0IHRyb3Mgc2Vuc2UgZGVjaWRpciwgdmV1cmUgZWwgdHJvcyBzZW5zZSBkZWNpZGlyIHNlZ8O8ZW50XG4iCisiSiAtIGRlaXhhIGFxdWVzdCB0cm9zIHNlbnNlIGRlY2lkaXIsIHZldXJlIGVsIHRyb3Mgc2Vnw7xlbnRcbiIKKyJrIC0gZGVpeGEgYXF1ZXN0IHRyb3Mgc2Vuc2UgZGVjaWRpciwgdmV1cmUgZWwgdHJvcyBzZW5zZSBkZWNpZGlyIGFudGVyaW9yXG4iCisiSyAtIGRlaXhhIGFxdWVzdCB0cm9zIHNlbnNlIGRlY2lkaXIsIHZldXJlIGVsIHRyb3MgYW50ZXJpb3JcbiIKKyJzIC0gZGl2aWRlaXggZWwgdHJvcyBhY3R1YWwgZW4gdHJvc3NvcyBtw6lzIHBldGl0c1xuIgorImUgLSBlZGl0YSBtYW51YWxtZW50IGVsIHRyb3MgYWN0dWFsXG4iCisiPyAtIG1vc3RyYSBsJ2FqdWRhXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICJFbHMgdHJvc3NvcyBzZWxlY2Npb25hdHMgbm8gYXBsaXF1ZW4gYSBsJ8OtbmRleFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDMKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAiVm9sZXUgYXBsaWNhci1sb3MgaWd1YWxtZW50IGEgbCdhcmJyZSBkZSB0cmViYWxsPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0NgorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgIk5vIHMnaGEgYXBsaWNhdCByZXMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAicydlc3TDoCBpZ25vcmFudCAlcyBubyBmdXNpb25hdFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkNhbnZpYSBlbCBtb2RlIGRlIMKrc3RhZ2XCuyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTdXByaW1laXggwqtzdGFnZcK7IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJGZXIgdW4gwqtzdGFnZcK7IGQnYXF1ZXN0IHRyb3MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQ2FudmlhIGVsIG1vZGUgZGUgwqtzdGFzaMK7IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlN1cHJpbWVpeCDCq3N0YXNowrsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkZlciB1biDCq3N0YXNowrsgZCdhcXVlc3QgdHJvcyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkNhbnZpYSBlbCBtb2RlIGRlIMKrdW5zdGFnZcK7IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU3VwcmltZWl4IMKrVW5zdGFnZcK7IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkZlciB1biDCq3Vuc3RhZ2XCuyBkJ2FxdWVzdCB0cm9zIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwbGljYSBlbCBjYW52aSBkZSBtb2RlIGEgbCfDrW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhIGwnZXNib3JyYXQgYSBsJ8OtbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhIGFxdWVzdCB0cm9zIGEgbCfDrW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEZXNjYXJ0YSBlbCBjYW52aSBkZSBtb2RlIGRlcyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEZXNjYXJ0YSBsJ2VzYm9ycmF0IGRlcyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiRGVzY2FydGEgYXF1ZXN0IHRyb3MgZGVzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiRGVzY2FydGEgZWwgY2FudmkgZGUgbW9kZSBkZXMgZGUgbCfDrW5kZXggaSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCIKKyIlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIkRlc2NhcnRhIGxhIHN1cHJlc3Npw7MgZGVzIGRlIGwnw61uZGV4IGkgbCdhcmJyZSBkZSB0cmViYWxsIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJEZXNjYXJ0YSBhcXVlc3QgdHJvcyBkZXMgZGUgbCfDrW5kZXggaSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJBcGxpY2EgZWwgY2FudmkgZGUgbW9kZSBhIGwnw61uZGV4IGkgbCdhcmJyZSBkZSB0cmViYWxsIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcGxpY2EgbGEgc3VwcmVzc2nDsyBhIGwnw61uZGV4IGkgbCdhcmJyZSBkZSB0cmViYWxsIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhIGFxdWVzdCB0cm9zIGEgbCfDrW5kZXggaSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhIGVsIGNhbnZpIGRlIG1vZGUgYSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhIGxhIHN1cHJlc3Npw7MgYSBsJ2FyYnJlIGRlIHRyZWJhbGwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwbGljYSBhcXVlc3QgdHJvcyBhIGwnYXJicmUgZGUgdHJlYmFsbCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTcwCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICJObyBoaSBoYSBhbHRyZXMgdHJvc3NvcyBvbiBhbmFyLWhpXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU4OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICJOw7ptZXJvIG5vIHbDoGxpZDogwqslc8K7XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICJOb23DqXMgJWQgdHJvcyBkaXNwb25pYmxlLlxuIgorbXNnc3RyWzFdICJOb23DqXMgJWQgdHJvc3NvcyBkaXNwb25pYmxlcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgIk5vIGhpIGhhIGNhcCBhbHRyZSB0cm9zIGEgY2VyY2FyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYzNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXNcbiIKK21zZ3N0ciAiRXhwcmVzc2nDsyByZWd1bGFyIGRlIGNlcmNhIG1hbCBmb3JtYWRhICVzOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NDYKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIKK21zZ3N0ciAiTm8gaGkgaGEgdHJvc3NvcyBxdWUgY29pbmNpZGVpeGluIGFtYiBlbCBwYXRyw7MgZG9uYXRcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjU4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4MAorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmtcbiIKK21zZ3N0ciAiU2Vuc2UgdHJvcyBwcmV2aVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIk5vIGhpIGhhIHRyb3Mgc2Vnw7xlbnRcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjkyCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiTm8gZXMgcG90IGRpdmlkaXIgYXF1ZXN0IHRyb3NcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjk4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiRGl2aWRlaXggZW4gJWQgdHJvcy5cbiIKK21zZ3N0clsxXSAiRGl2aWRlaXggZW4gJWQgdHJvc3Nvcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJObyBlcyBwb3QgZWRpdGFyIGFxdWVzdCB0cm9zXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzczCittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorInN0YXR1cyAgICAgICAgLSBtb3N0cmEgZWxzIGNhbWlucyBhbWIgY2FudmlzXG4iCisidXBkYXRlICAgICAgICAtIGFmZWdlaXggbCdlc3RhdCBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwgYWwgY29uanVudCBkZSBjYW52aXMgIgorIsKrc3RhZ2VkwrtcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0ZWl4IGVsIGNvbmp1bnQgZGUgY2FudmlzIGRlIMKrc3RhZ2VkwrsgYSBsYSB2ZXJzacOzIEhFQURcbiIKKyJwYXRjaCAgICAgICAgIC0gc2VsZWNjaW9uYSB0cm9zc29zIGkgYWN0dWFsaXR6YSdscyBzZWxlY3RpdmFtZW50XG4iCisiZGlmZiAgICAgICAgICAtIG1vc3RyYSBsYSBkaWZlcsOobmNpYSBlbnRyZSBIRUFEIGkgbCfDrW5kZXhcbiIKKyJhZGQgdW50cmFja2VkIC0gYWZlZ2VpeCBlbCBjb250aW5ndXQgZGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMgYWwgY29uanVudCBkZSAiCisiY2FudmlzIMKrc3RhZ2VkwrtcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5NQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxNQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNQorbXNnaWQgIm1pc3NpbmcgLS0iCittc2dzdHIgIm1hbmNhIC0tIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICJkZXNjb25lZ3V0IC0tcGF0Y2ggbW9kZTogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICJhcmd1bWVudCAlcyBubyB2w6BsaWQsIHMnZXNwZXJhdmEgLS0iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICJsYSB6b25hIGxvY2FsIGRpZmVyZWl4IGRlIEdNVCBwZXIgdW4gaW50ZXJ2YWwgcXVlIG5vIMOpcyBkZSBtaW51dHNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDUgZ2l0LXNlbmQtZW1haWwucGVybDoxNTEKK21zZ2lkICJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIKK21zZ3N0ciAiZWwgZGVzcGxhw6dhbWVudCBkZSBsYSB6b25hIGxvY2FsIMOpcyBtw6lzIGdyYW4gbyBpZ3VhbCBhIDI0IGhvcmVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICJsJ2VkaXRvciBubyBoYSBzb3J0aXQgY29ycmVjdGFtZW50LCBhdm9ydGFudC1obyB0b3QiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIsKrJXPCuyBjb250w6kgdW5hIHZlcnNpw7MgaW50ZXJtw6hkaWEgZGVsIGNvcnJldSBxdWUgZXN0w6B2ZXUgcmVkYWN0YW50LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMuZmluYWwnIGNvbnRhaW5zIHRoZSBjb21wb3NlZCBlbWFpbC5cbiIKK21zZ3N0ciAiJyVzLmZpbmFsJyBjb250w6kgZWwgY29ycmV1IHJlZGFjdGF0LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQwOAorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiLS1kdW1wLWFsaWFzZXMgw6lzIGluY29tcGF0aWJsZSBhbWIgYWx0cmVzIG9wY2lvbnNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODEgZ2l0LXNlbmQtZW1haWwucGVybDo2ODMKK21zZ2lkICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorbXNnc3RyICJObyBlcyBwb3QgZXhlY3V0YXIgZ2l0IGZvcm1hdC1wYXRjaCBkZXMgZGUgZm9yYSBkZWwgZGlww7JzaXRcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICJDYW1wIC0tc3VwcHJlc3MtY2MgZGVzY29uZWd1dDogwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAiLS1jb25maXJtIHNldHRpbmcgZGVzY29uZWd1dDogwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgImF2w61zOiBlbCBzb2JyZW5vbSBkZSBzZW5kbWFpbCBhbWIgY29tZXRlcyBubyBlc3TDoCBzdXBvcnRhdDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYDppbmNsdWRlOmAgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXbDrXM6IGA6aW5jbHVkZTpgIG5vIGVzdMOgIHN1cG9ydGF0OiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXbDrXM6IGxlcyByZWRpcmVjY2lvbnMgYC9maWxlYCBvciBgfHBpcGUgbm8gc8OzbiBhZG1lc2VzOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICJhdsOtczogbm8gZXMgcG90IHJlY29uw6hpeGVyIGxhIGzDrW5pYSBzZW5kbWFpbDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisiRWwgZml0eGVyIMKrJXPCuyBleGlzdGVpeCBwZXLDsiB0YW1iw6kgcG90IHNlciB1biByYW5nIGRlIGNvbWlzc2lvbnNcbiIKKyJwZXIgcHJvZHVpciBwZWRhw6dvcy4gRGVzYW1iaWfDvGV1Li4uXG4iCisiXG4iCisiICAgICogRGllbnQgXCIuLyVzXCIgc2kgdm9sw61ldSBlc3BlY2lmaWNhciBhcXVlc3QgZml0eGVyOyBvXG4iCisiICAgICogUHJvcG9yY2lvbmFudCBsJ29wY2nDsyAtLWZvcm1hdC1wYXRjaCBzaSB2b2zDrWV1IGVzcGVjaWZpY2FyIHVuIHJhbmcuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBvYnJpciBlbCBkaXJlY3RvcmkgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisiYXbDrXM6IG5vIHMnaGFuIGVudmlhdCBwZWRhw6dvc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBzJ2hhbiBlc3BlY2lmaWNhdCBmaXR4ZXJzIGRlIHBlZGHDp1xuIgorIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJObyBzdWJqZWN0IGxpbmUgaW4gJXM/IgorbXNnc3RyICJTZW5zZSBhc3N1bXB0ZSBhICVzPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIG9icmlyIHBlciBlc2NyaXB0dXJhICVzOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyJTZSBzdXByaW1pcmFuIGxlcyBsw61uaWVzIHF1ZSBjb21lbmNlbiBhbWIgXCJHSVQ6XCIuXG4iCisiQ29uc2lkZXJldSBpbmNsb3VyZSB1biBkaWZmc3RhdCBnbG9iYWwgbyB1bmEgdGF1bGEgZGUgY29udGluZ3V0c1xuIgorInBlciBjYWRhIHBlZGHDpyBxdWUgZXN0ZXUgZXNjcml2aW50LlxuIgorIlxuIgorIk5ldGVnZXUgZWwgY29udGluZ3V0IGRlbCBjb3Mgc2kgbm8gdm9sZXUgZW52aWFyIHVuIHJlc3VtLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlczogJXMiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2JyaXIgJXMuZmluYWw6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgyMworbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIkVsIGNvcnJldSBlbGVjdHLDsm5pYyBkZSByZXN1bSBlc3TDoCBidWl0LCBzJ29tZXRcbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwIFt5L05dIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JXM+IFt5L05dPyAiCittc2dzdHIgIkVzdGV1IHNlZ3VyIHF1ZSB2b2xldSB1c2FyIDwlcz4gW3kvTl0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKyJFbHMgZml0eGVycyBzZWfDvGVudHMgc8OzbiA4Yml0LCBwZXLDsiBubyBkZWNsYXJlbiB1biBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTgKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICJRdWluYSBjb2RpZmljYWNpw7MgZGUgOCBiaXRzIGhhdXJpYSBkZSBkZWNsYXJhciBbVVRGLThdPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSAiCisid2FudCB0byBzZW5kLlxuIgorbXNnc3RyICIiCisiUydoYSByZWZ1c2F0IGEgZW52aWFyIHBlcnF1w6ggZWwgcGVkYcOnXG4iCisiXHQlc1xuIgorInBlcnF1w6ggbGEgcGxhbnRpbGxhIHTDqSBsJ2Fzc3VtcHRlICcqKiogU1VCSkVDVCBIRVJFICoqKicuIFBhc3NldSAtLWZvcmNlIHNpICIKKyJyZWFsbWVudCB2b2xldSBlbnZpYXItbG8uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTQ1Cittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAiIgorIkEgcXVpIHMnaGF1cmllbiBkJ2VudmlhciBlbHMgY29ycmV1cyBlbGVjdHLDsm5pY3MgKHNpIHMnaGFuIGQnZW52aWFyIGEgYWxnw7opPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGFsaWFzICclcycgZXhwYW5kcyB0byBpdHNlbGZcbiIKK21zZ3N0ciAiZmF0YWw6IGwnw6BsaWVzIMKrJXPCuyBzJ2V4cGFuZGVpeCBhIHNpIG1hdGVpeFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIiIKKyJTJ2hhIGQndXNhciBlbCBNZXNzYWdlLUlEIGNvbSBhIEluLVJlcGx5LVRvIHBlbCBwcmltZXIgY29ycmV1IChzaSBuJ2hpIGhhICIKKyJjYXApPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAzMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICJlcnJvcjogbm8gcydoYSBwb2d1dCBleHRyZXVyZSB1bmEgYWRyZcOnYSB2w6BsaWRhIGRlOiAlc1xuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0NQorbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAiUXXDqCBjYWwgZmVyIGFtYiBhcXVlc3RhIGFkcmXDp2E/IChbcV1zdXJ0fFtkXWVzY2FydGF8W2VdZGl0YSk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJlbCBjYW3DrSBDQSDCqyVzwrsgbm8gZXhpc3RlaXgiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAgTGEgbGxpc3RhIGRlIENjIGRlIHNvYnJlIHMnaGEgYW1wbGlhdCBhbWIgYWRyZWNlcyBhZGRpY2lvbmFsc1xuIgorIiAgICB0cm9iYWRlcyBhbCBtaXNzYXRnZSBkZSBsYSBjb21pc3Npw7MgZGVsIHBlZGHDpy4gUGVyIGRlZmVjdGUsIFxuIgorIiAgICBzZW5kLWVtYWlsIHByZWd1bnRhIGFiYW5zIGQnZW52aWFyIGVsIG1pc3NhdGdlIHF1YW4gYWl4w7Igc3VjY2VlaXguXG4iCisiICAgIEFxdWVzdCBjb21wb3J0YW1lbnQgZXN0w6AgY29udHJvbGF0IHBlbCBwYXLDoG1ldHJlIGRlIGNvbmZpZ3VyYWNpw7NcbiIKKyIgICAgc2VuZGVtYWlsLmNvbmZpcm0uXG4iCisiXG4iCisiICAgIFBlciBhIGluZm9ybWFjacOzIGFkZGljaW9uYWwsIGV4ZWN1dGV1ICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLlxuIgorIiAgICBQZXIgbWFudGVuaXIgZWwgY29tcG9ydGFtZW50IGFjdHVhbCwgcGVyw7Igc2lsZW5jaWFyIGFxdWVzdFxuIgorIiAgICBtaXNzYXRnZSwgZXhlY3V0ZXUgJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIiIKKyJWb2xldSBlbnZpYXIgYXF1ZXN0IGNvcnJldSBlbGVjdHLDsm5pYz8gKFt5XXPDrXxbbl1vfFtlXWRpdGF8W3Fdc3VydHxbYV10b3QpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAiUmVxdWVyZWl4IHJlc3Bvc3RhIGVuIGVudmlhciBlbCBjb3JyZXUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ5MQorbXNnaWQgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCittc2dzdHIgIkVsIHNlcnZpZG9yIFNNVFAgcmVxdWVyaXQgbm8gZXN0w6AgY29ycmVjdGFtZW50IGRlZmluaXQuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICJFbCBzZXJ2aWRvciBubyBhZG1ldCBTVEFSVFRMUyEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0MyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAiU1RBUlRUTFMgaGEgZmFsbGF0ISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTU2Cittc2dpZCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgaW5pY2lhbGl0emFyIFNNVFAgY29ycmVjdGFtZW50LiBDb21wcm92ZXUtaG8gbGEgY29uZmlndXJhY2nDsyBpICIKKyJ1c2V1IC0tc210cC1kZWJ1Zy4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVudmlhciAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRHJ5LVNlbnQgJXNcbiIKK21zZ3N0ciAiU2ltdWxhY2nDsyBkJ2VudmlhbWVudCAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICJFbnZpYXQgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiU2ltdWxhY2nDsyBkZSBjb3JyZWN0ZS4gRWwgcmVnaXN0cmUgZGl1OlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIkNvcnJlY3RlLiBFbCByZWdpc3RyZSBkaXU6IFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTEKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAiUmVzdWx0YXQ6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICJSZXN1bHRhdDogY29ycmVjdGVcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAibm8gZXMgcG90IG9icmlyIGVsIGZpdHhlciAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjU5IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY3OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgUydlc3TDoCBhZmVnaW50IGNjOiAlcyBkZXMgZGUgbGEgbMOtbmlhIMKrJXPCu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIFMnZXN0w6AgYWZlZ2ludCBhOiAlcyBkZXMgZGUgbGEgbMOtbmlhIMKrJXPCu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG5vbi1tYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihubyBtYm94KSBTJ2VzdMOgIGFmZWdpbnQgY2M6ICVzIGRlcyBkZSBsYSBsw61uaWEgwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIoY29zKSBTJ2VzdMOgIGFmZWdpbnQgY2M6ICVzIGRlcyBkZSBsYSBsw61uaWEgwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykgbm8gcydoYSBwb2d1dCBleGVjdXRhciDCqyVzwrsiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIEFkZGluZyAlczogJXMgZnJvbTogJyVzJ1xuIgorbXNnc3RyICIoJXMpIFMnZXN0w6AgYWZlZ2ludCAlczogJXMgZGVzIGRlOiDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiKCVzKSBzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHRhbmNhciBlbCBjb25kdWN0ZSDCqyVzwrsiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAibm8gZXMgcG90IGVudmlhciBlbCBtaXNzYXRnZSBlbiA3IGJpdHMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgImNvZGlmaWNhY2nDsyBkZSB0cmFuc2ZlcsOobmNpYSBubyB2w6BsaWRhIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTQgZ2l0LXNlbmQtZW1haWwucGVybDoyMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciAlczogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBjb250YWlucyBhIGxpbmUgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnMiCittc2dzdHIgIiVzOiBlbCBwZWRhw6cgY29udMOpIHVuYSBsw61uaWEgbcOpcyBncmFuIGRlIDk5OCBjYXLDoGN0ZXJzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIlMnZXN0w6Agb21ldGVudCAlcyBhbWIgZWwgc3VmaXggZGUgY8OycGlhIGRlIHNlZ3VyZXRhdCDCqyVzwrsuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCAiW3l8Tl0iIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBzZW5kICVzPyBbeXxOXTogIgorbXNnc3RyICJFc3RldSBzZWd1ciBxdWUgdm9sZXUgZW52aWFyICVzPyBbeXxOXTogIgpkaWZmIC0tZ2l0IGEvcG8vZGUucG8gYi9wby9kZS5wbwppbmRleCBhOGQ1ZjYxLi4wNWJlYTIwIDEwMDY0NAotLS0gYS9wby9kZS5wbworKysgYi9wby9kZS5wbwpAQCAtMSwyODc0ICsxLDI0OTYwIEBACi0jIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gR2VybWFuLgotIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlLCBldCBhbC4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgotIyBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+LCAyMDA3CisjIEdlcm1hbiB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgQ29weXJpZ2h0IChDKSAyMDE5IE1hdHRoaWFzIFLDvHN0ZXIgPG1hdHRoaWFzLnJ1ZXN0ZXJAZ21haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIE1hdHRoaWFzIFLDvHN0ZXIgPG1hdHRoaWFzLnJ1ZXN0ZXJAZ21haWwuY29tPiwgMjAxOS4KKyMgUmFsZiBUaGllbG93IDxyYWxmLnRoaWVsb3dAZ21haWwuY29tPiwgMjAxMC0yMDE5LgogIwogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMC0wMi0wOCAyMjo1NCswMTAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAyMC0wMi0wOSAyMjo0MCswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gU3RpbW1pbmcgPGNocmlzdGlhbkBjc3RpbW1pbmcuZGU+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogR2VybWFuXG4iCi0iTGFuZ3VhZ2U6IGRlX0RFXG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxOS0xMi0zMCAwODo0OCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0xMS0yOCAxODoxMCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNYXR0aGlhcyBSw7xzdGVyIDxtYXR0aGlhcy5ydWVzdGVyQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBNYXR0aGlhcyBSw7xzdGVyIDxtYXR0aGlhcy5ydWVzdGVyQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZTogZGVcbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgogIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgogIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiE9MSk7XG4iCiAKLSM6IGdpdC1ndWkuc2g6ODQ3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCi1tc2dzdHIgIlVuZ8O8bHRpZ2UgWmVpY2hlbnNhdHotQW5nYWJlIGluICVzOiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgIldpZSBiaXR0ZSAoJXMpPyIKIAotIzogZ2l0LWd1aS5zaDo5MDEKLW1zZ2lkICJNYWluIEZvbnQiCi1tc2dzdHIgIlByb2dyYW1tc2NocmlmdGFydCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjUwMCBhZGQtaW50ZXJhY3RpdmUuYzo4MDEgc2VxdWVuY2VyLmM6MzIxNgorIzogc2VxdWVuY2VyLmM6MzY1NiBidWlsdGluL3JlYmFzZS5jOjg3MSBidWlsdGluL3JlYmFzZS5jOjE2NDMKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAxOSBidWlsdGluL3JlYmFzZS5jOjIwNjMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiS29ubnRlIGRlbiBJbmRleCBuaWNodCBsZXNlbi4iCiAKLSM6IGdpdC1ndWkuc2g6OTAyCi1tc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCi1tc2dzdHIgIlZlcmdsZWljaC1TY2hyaWZ0YXJ0IgorIzogYWRkLWludGVyYWN0aXZlLmM6NTU1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAiQmluw6RyIgogCi0jOiBnaXQtZ3VpLnNoOjkxNyBnaXQtZ3VpLnNoOjkzMSBnaXQtZ3VpLnNoOjk0NCBnaXQtZ3VpLnNoOjEwMzQgZ2l0LWd1aS5zaDoxMDUzCi0jOiBnaXQtZ3VpLnNoOjMyMTIKLW1zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKLW1zZ3N0ciAiZ2l0LWd1aTogUHJvZ3JhbW1mZWhsZXIiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNzgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzMyCittc2dpZCAibm90aGluZyIKK21zZ3N0ciAiTmljaHRzIgogCi0jOiBnaXQtZ3VpLnNoOjkxOAotbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKLW1zZ3N0ciAiR2l0IGthbm4gaW0gUEFUSCBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAidW52ZXLDpG5kZXJ0IgogCi0jOiBnaXQtZ3VpLnNoOjk0NQotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICJHaXQgVmVyc2lvbnNhbmdhYmUga2FubiBuaWNodCBlcmthbm50IHdlcmRlbjoiCi0KLSM6IGdpdC1ndWkuc2g6OTcwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgotIlxuIgotIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCi0iXG4iCi0iJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgotIlxuIgotIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCi1tc2dzdHIgIiIKLSJEaWUgVmVyc2lvbiB2b24gR2l0IGthbm4gbmljaHQgYmVzdGltbXQgd2VyZGVuLlxuIgotIlxuIgotIsK7JXPCqyBiZWhhdXB0ZXQsIGVzIHNlaSBWZXJzaW9uIMK7JXPCqy5cbiIKLSJcbiIKLSIlcyBiZW7DtnRpZ3QgbWluZGVzdGVucyBHaXQgMS41LjAgb2RlciBow7ZoZXIuXG4iCi0iXG4iCi0iU29sbCBhbmdlbm9tbWVuIHdlcmRlbiwgwrslc8KrIHNlaSBWZXJzaW9uIDEuNS4wP1xuIgotCi0jOiBnaXQtZ3VpLnNoOjEyNjcKLW1zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCi1tc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyBuaWNodCBnZWZ1bmRlbjoiCi0KLSM6IGdpdC1ndWkuc2g6MTMwMQotbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCi1tc2dzdHIgIiIKLSJFcyBrb25udGUgbmljaHQgaW4gZGFzIG9iZXJzdGUgVmVyemVpY2huaXMgZGVyIEFyYmVpdHNrb3BpZSBnZXdlY2hzZWx0ICIKLSJ3ZXJkZW46IgotCi0jOiBnaXQtZ3VpLnNoOjEzMDkKLW1zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCi1tc2dzdHIgIkJsb8OfZXMgUmVwb3NpdG9yeSBrYW5uIG5pY2h0IGJlbnV0enQgd2VyZGVuOiIKLQotIzogZ2l0LWd1aS5zaDoxMzE3Ci1tc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIktlaW4gQXJiZWl0c3ZlcnplaWNobmlzIgotCi0jOiBnaXQtZ3VpLnNoOjE0OTEgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICJEYXRlaXN0YXR1cyBha3R1YWxpc2llcmVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE1NTEKLW1zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgotbXNnc3RyICJOYWNoIGdlw6RuZGVydGVuIERhdGVpZW4gc3VjaGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE2MjkKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICJBdWZydWZlbiBkZXMgwrtwcmVwYXJlLWNvbW1pdC1tc2cgaG9va8KrLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE2NDYKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgotbXNnc3RyICJDb21taXQgYWJnZWxlaG50IGR1cmNoIMK7cHJlcGFyZS1jb21taXQtbXNnIGhvb2vCqy4iCi0KLSM6IGdpdC1ndWkuc2g6MTgwNCBsaWIvYnJvd3Nlci50Y2w6MjUyCi1tc2dpZCAiUmVhZHkuIgotbXNnc3RyICJCZXJlaXQuIgotCi0jOiBnaXQtZ3VpLnNoOjE5NjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iRGlzcGxheSBsaW1pdCAoZ3VpLm1heGZpbGVzZGlzcGxheWVkID0gJXMpIHJlYWNoZWQsIG5vdCBzaG93aW5nIGFsbCAlcyBmaWxlcy4iCi1tc2dzdHIgIiIKLSJBbnplaWdlbGltaXQgZXJyZWljaHQgKGd1aS5tYXhmaWxlc2Rpc3BsYXllZCA9ICVzKSBmw7xyIEFuemFobCBFaW50csOkZ2UuIEVzICIKLSJ3ZXJkZW4gbmljaHQgYWxsZSAlcyBEYXRlaWVuIGdlemVpZ3QuIgotCi0jOiBnaXQtZ3VpLnNoOjIwOTEKLW1zZ2lkICJVbm1vZGlmaWVkIgotbXNnc3RyICJVbnZlcsOkbmRlcnQiCi0KLSM6IGdpdC1ndWkuc2g6MjA5MwotbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJWZXLDpG5kZXJ0LCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKLQotIzogZ2l0LWd1aS5zaDoyMDk0IGdpdC1ndWkuc2g6MjEwNgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJCZXJlaXRnZXN0ZWxsdCB6dW0gQ29tbWl0dGVuIgotCi0jOiBnaXQtZ3VpLnNoOjIwOTUgZ2l0LWd1aS5zaDoyMTA3Ci1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIlRlaWx3ZWlzZSBiZXJlaXRnZXN0ZWxsdCB6dW0gQ29tbWl0dGVuIgotCi0jOiBnaXQtZ3VpLnNoOjIwOTYgZ2l0LWd1aS5zaDoyMTA4Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCi1tc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBDb21taXR0ZW4sIGZlaGxlbmQiCi0KLSM6IGdpdC1ndWkuc2g6MjA5OAotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJEYXRlaXR5cCBnZcOkbmRlcnQsIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgotCi0jOiBnaXQtZ3VpLnNoOjIwOTkgZ2l0LWd1aS5zaDoyMTAwCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG9sZCB0eXBlIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJEYXRlaXR5cCBnZcOkbmRlcnQsIGFsdGVyIERhdGVpdHlwIGJlcmVpdGdlc3RlbGx0IgotCi0jOiBnaXQtZ3VpLnNoOjIxMDEKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgotbXNnc3RyICJEYXRlaXR5cCBnZcOkbmRlcnQsIGJlcmVpdGdlc3RlbGx0IgotCi0jOiBnaXQtZ3VpLnNoOjIxMDIKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgbW9kaWZpY2F0aW9uIG5vdCBzdGFnZWQiCi1tc2dzdHIgIkRhdGVpdHlwLcOEbmRlcnVuZyBiZXJlaXRnZXN0ZWxsdCwgSW5oYWx0c8OkbmRlcnVuZyBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKLQotIzogZ2l0LWd1aS5zaDoyMTAzCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZSBzdGFnZWQsIGZpbGUgbWlzc2luZyIKLW1zZ3N0ciAiRGF0ZWl0eXAtw4RuZGVydW5nIGJlcmVpdGdlc3RlbGx0LCBEYXRlaSBnZWzDtnNjaHQiCi0KLSM6IGdpdC1ndWkuc2g6MjEwNQotbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiVW52ZXJzaW9uaWVydCwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCi0KLSM6IGdpdC1ndWkuc2g6MjExMAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgIkZlaGxlbmQiCi0KLSM6IGdpdC1ndWkuc2g6MjExMQotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKLW1zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEzDtnNjaGVuIgotCi0jOiBnaXQtZ3VpLnNoOjIxMTIKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCi1tc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBMw7ZzY2hlbiwgdHJvdHpkZW0gdm9yaGFuZGVuIgotCi0jOiBnaXQtZ3VpLnNoOjIxMTQgZ2l0LWd1aS5zaDoyMTE1IGdpdC1ndWkuc2g6MjExNiBnaXQtZ3VpLnNoOjIxMTcKLSM6IGdpdC1ndWkuc2g6MjExOCBnaXQtZ3VpLnNoOjIxMTkKLW1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgotbXNnc3RyICJLb25mbGlrdGF1ZmzDtnN1bmcgbsO2dGlnIgotCi0jOiBnaXQtZ3VpLnNoOjIxNjQKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKLW1zZ3N0ciAiR2l0ayBrYW5uIGltIFBBVEggbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiIKLQotIzogZ2l0LWd1aS5zaDoyMjEwIGdpdC1ndWkuc2g6MjI0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXJ0aW5nICVzLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICIlcyB3aXJkIGdlc3RhcnRldC4uLiBiaXR0ZSB3YXJ0ZW4uIgotCi0jOiBnaXQtZ3VpLnNoOjIyMjQKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKLW1zZ3N0ciAiwrtHaXQgZ3Vpwqsga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcyNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCi1tc2dpZCAiUmVwb3NpdG9yeSIKLW1zZ3N0ciAiUmVwb3NpdG9yeSIKLQotIzogZ2l0LWd1aS5zaDoyNzI3Ci1tc2dpZCAiRWRpdCIKLW1zZ3N0ciAiQmVhcmJlaXRlbiIKLQotIzogZ2l0LWd1aS5zaDoyNzI5IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjcKLW1zZ2lkICJCcmFuY2giCi1tc2dzdHIgIkJyYW5jaCIKLQotIzogZ2l0LWd1aS5zaDoyNzMyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTQKLW1zZ2lkICJDb21taXRAQG5vdW4iCi1tc2dzdHIgIkNvbW1pdCIKLQotIzogZ2l0LWd1aS5zaDoyNzM1IGxpYi9tZXJnZS50Y2w6MTI3IGxpYi9tZXJnZS50Y2w6MTc0Ci1tc2dpZCAiTWVyZ2UiCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiIKLQotIzogZ2l0LWd1aS5zaDoyNzM2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjMKLW1zZ2lkICJSZW1vdGUiCi1tc2dzdHIgIkV4dGVybiIKLQotIzogZ2l0LWd1aS5zaDoyNzM5Ci1tc2dpZCAiVG9vbHMiCi1tc2dzdHIgIldlcmt6ZXVnZSIKLQotIzogZ2l0LWd1aS5zaDoyNzQ4Ci1tc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCi1tc2dzdHIgIkFyYmVpdHNrb3BpZSBpbSBEYXRlaW1hbmFnZXIgw7ZmZm5lbiIKLQotIzogZ2l0LWd1aS5zaDoyNzYzCi1tc2dpZCAiR2l0IEJhc2giCi1tc2dzdHIgIkdpdCBCYXNoIgotCi0jOiBnaXQtZ3VpLnNoOjI3NzIKLW1zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKLW1zZ3N0ciAiQWt0dWVsbGVuIEJyYW5jaCBkdXJjaGJsw6R0dGVybiIKLQotIzogZ2l0LWd1aS5zaDoyNzc2Ci1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKLW1zZ3N0ciAiQnJhbmNoIGR1cmNoYmzDpHR0ZXJuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODEKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICJBa3R1ZWxsZW4gQnJhbmNoIGRhcnN0ZWxsZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc4NQotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCi1tc2dzdHIgIkhpc3RvcmllIGFsbGVyIEJyYW5jaGVzIGRhcnN0ZWxsZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICJCcmFuY2ggwrslc8KrIGR1cmNoYmzDpHR0ZXJuIgotCi0jOiBnaXQtZ3VpLnNoOjI3OTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgotbXNnc3RyICJIaXN0b3JpZSB2b24gwrslc8KrIGRhcnN0ZWxsZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc5OSBsaWIvZGF0YWJhc2UudGNsOjQwCi1tc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKLW1zZ3N0ciAiRGF0ZW5iYW5rc3RhdGlzdGlrIgotCi0jOiBnaXQtZ3VpLnNoOjI4MDIgbGliL2RhdGFiYXNlLnRjbDozMwotbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgotbXNnc3RyICJEYXRlbmJhbmsga29tcHJpbWllcmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI4MDUKLW1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCi1tc2dzdHIgIkRhdGVuYmFuayDDvGJlcnByw7xmZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjgxMiBnaXQtZ3VpLnNoOjI4MTYgZ2l0LWd1aS5zaDoyODIwCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAiRGVza3RvcC1JY29uIGVyc3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyODI4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjA5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjE3Ci1tc2dpZCAiUXVpdCIKLW1zZ3N0ciAiQmVlbmRlbiIKLQotIzogZ2l0LWd1aS5zaDoyODM2Ci1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAiUsO8Y2tnw6RuZ2lnIgotCi0jOiBnaXQtZ3VpLnNoOjI4MzkKLW1zZ2lkICJSZWRvIgotbXNnc3RyICJXaWVkZXJob2xlbiIKLQotIzogZ2l0LWd1aS5zaDoyODQzIGdpdC1ndWkuc2g6MzQ2MQotbXNnaWQgIkN1dCIKLW1zZ3N0ciAiQXVzc2NobmVpZGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI4NDYgZ2l0LWd1aS5zaDozNDY0IGdpdC1ndWkuc2g6MzU0MCBnaXQtZ3VpLnNoOjM2MzMKLSM6IGxpYi9jb25zb2xlLnRjbDo2OQotbXNnaWQgIkNvcHkiCi1tc2dzdHIgIktvcGllcmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI4NDkgZ2l0LWd1aS5zaDozNDY3Ci1tc2dpZCAiUGFzdGUiCi1tc2dzdHIgIkVpbmbDvGdlbiIKLQotIzogZ2l0LWd1aS5zaDoyODUyIGdpdC1ndWkuc2g6MzQ3MCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM5Ci0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjgKLW1zZ2lkICJEZWxldGUiCi1tc2dzdHIgIkzDtnNjaGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI4NTYgZ2l0LWd1aS5zaDozNDc0IGdpdC1ndWkuc2g6MzYzNyBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICJBbGxlIGF1c3fDpGhsZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjg2NQotbXNnaWQgIkNyZWF0ZS4uLiIKLW1zZ3N0ciAiRXJzdGVsbGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI4NzEKLW1zZ2lkICJDaGVja291dC4uLiIKLW1zZ3N0ciAiQXVzY2hlY2tlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyODc3Ci1tc2dpZCAiUmVuYW1lLi4uIgotbXNnc3RyICJVbWJlbmVubmVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI4ODIKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIkzDtnNjaGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI4ODcKLW1zZ2lkICJSZXNldC4uLiIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gdmVyd2VyZmVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI4OTcKLW1zZ2lkICJEb25lIgotbXNnc3RyICJGZXJ0aWciCi0KLSM6IGdpdC1ndWkuc2g6Mjg5OQotbXNnaWQgIkNvbW1pdEBAdmVyYiIKLW1zZ3N0ciAiQ29tbWl0dGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI5MDggZ2l0LWd1aS5zaDozNDAwCi1tc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCi1tc2dzdHIgIkxldHp0ZW4gQ29tbWl0IG5hY2hiZXNzZXJuIgotCi0jOiBnaXQtZ3VpLnNoOjI5MTggZ2l0LWd1aS5zaDozMzYxIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTAxCi1tc2dpZCAiUmVzY2FuIgotbXNnc3RyICJOZXUgbGFkZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjkyNAotbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKLW1zZ3N0ciAiRsO8ciBDb21taXQgYmVyZWl0c3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDoyOTMwCi1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCi1tc2dzdHIgIkdlw6RuZGVydGUgRGF0ZWllbiBmw7xyIENvbW1pdCBiZXJlaXRzdGVsbGVuIgotCi0jOiBnaXQtZ3VpLnNoOjI5MzYKLW1zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgotbXNnc3RyICJBdXMgQ29tbWl0LUJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKLQotIzogZ2l0LWd1aS5zaDoyOTQyIGxpYi9pbmRleC50Y2w6NTIxCi1tc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIHZlcndlcmZlbiIKLQotIzogZ2l0LWd1aS5zaDoyOTUwIGdpdC1ndWkuc2g6MzcwMCBnaXQtZ3VpLnNoOjM3MzEKLW1zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKLW1zZ3N0ciAiV2VuaWdlciBaZWlsZW4gYW56ZWlnZW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjk1NCBnaXQtZ3VpLnNoOjM3MDQgZ2l0LWd1aS5zaDozNzM1Ci1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgIk1laHIgWmVpbGVuIGFuemVpZ2VuIgotCi0jOiBnaXQtZ3VpLnNoOjI5NjEgZ2l0LWd1aS5zaDozMzc0IGdpdC1ndWkuc2g6MzQ4NQotbXNnaWQgIlNpZ24gT2ZmIgotbXNnc3RyICJBYnplaWNobmVuIgotCi0jOiBnaXQtZ3VpLnNoOjI5NzcKLW1zZ2lkICJMb2NhbCBNZXJnZS4uLiIKLW1zZ3N0ciAiTG9rYWxlcyBadXNhbW1lbmbDvGhyZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjk4MgotbXNnaWQgIkFib3J0IE1lcmdlLi4uIgotbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gYWJicmVjaGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5OTQgZ2l0LWd1aS5zaDozMDIyCi1tc2dpZCAiQWRkLi4uIgotbXNnc3RyICJOZXVlcyBoaW56dWbDvGdlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTk4Ci1tc2dpZCAiUHVzaC4uLiIKLW1zZ3N0ciAiVmVyc2VuZGVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjMwMDIKLW1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgotbXNnc3RyICJCcmFuY2ggbMO2c2NoZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MzAxMiBnaXQtZ3VpLnNoOjM2NjYKLW1zZ2lkICJPcHRpb25zLi4uIgotbXNnc3RyICJPcHRpb25lbi4uLiIKLQotIzogZ2l0LWd1aS5zaDozMDIzCi1tc2dpZCAiUmVtb3ZlLi4uIgotbXNnc3RyICJFbnRmZXJuZW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MzAzMiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY3Ci1tc2dpZCAiSGVscCIKLW1zZ3N0ciAiSGlsZmUiCi0KLSM6IGdpdC1ndWkuc2g6MzAzNiBnaXQtZ3VpLnNoOjMwNDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MCBsaWIvYWJvdXQudGNsOjE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvdXQgJXMiCi1tc2dzdHIgIsOcYmVyICVzIgotCi0jOiBnaXQtZ3VpLnNoOjMwNjQKLW1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKLW1zZ3N0ciAiT25saW5lLURva3VtZW50YXRpb24iCi0KLSM6IGdpdC1ndWkuc2g6MzA2NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzMKLW1zZ2lkICJTaG93IFNTSCBLZXkiCi1tc2dzdHIgIlNTSC1TY2hsw7xzc2VsIGFuemVpZ2VuIgotCi0jOiBnaXQtZ3VpLnNoOjMwOTcgZ2l0LWd1aS5zaDozMjI5Ci1tc2dpZCAidXNhZ2U6IgotbXNnc3RyICJWZXJ3ZW5kdW5nOiIKLQotIzogZ2l0LWd1aS5zaDozMTAxIGdpdC1ndWkuc2g6MzIzMwotbXNnaWQgIlVzYWdlIgotbXNnc3RyICJWZXJ3ZW5kdW5nIgotCi0jOiBnaXQtZ3VpLnNoOjMxODIgbGliL2JsYW1lLnRjbDo1NzUKLW1zZ2lkICJFcnJvciIKLW1zZ3N0ciAiRmVobGVyIgotCi0jOiBnaXQtZ3VpLnNoOjMyMTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLW1zZ3N0ciAiIgotIkZlaGxlcjogVmVyemVpY2huaXMgwrslc8KrIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW46IERhdGVpIG9kZXIgVmVyemVpY2huaXMgIgotIm5pY2h0IGdlZnVuZGVuIgotCi0jOiBnaXQtZ3VpLnNoOjMyNDYKLW1zZ2lkICJDdXJyZW50IEJyYW5jaDoiCi1tc2dzdHIgIkFrdHVlbGxlciBCcmFuY2g6IgotCi0jOiBnaXQtZ3VpLnNoOjMyNzEKLW1zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgotbXNnc3RyICJOaWNodCBiZXJlaXRnZXN0ZWxsdGUgw4RuZGVydW5nZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzI5MwotbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCi1tc2dzdHIgIkJlcmVpdHN0ZWxsdW5nICh6dW0gQ29tbWl0dGVuKSIKLQotIzogZ2l0LWd1aS5zaDozMzY3Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAiQWxsZXMgYmVyZWl0c3RlbGxlbiIKLQotIzogZ2l0LWd1aS5zaDozMzg2IGxpYi90cmFuc3BvcnQudGNsOjEzNwotbXNnaWQgIlB1c2giCi1tc2dzdHIgIlZlcnNlbmRlbiIKLQotIzogZ2l0LWd1aS5zaDozNDEzCi1tc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIkVyc3RlIENvbW1pdC1CZXNjaHJlaWJ1bmc6IgotCi0jOiBnaXQtZ3VpLnNoOjM0MTQKLW1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTmFjaGdlYmVzc2VydGUgQmVzY2hyZWlidW5nOiIKLQotIzogZ2l0LWd1aS5zaDozNDE1Ci1tc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTmFjaGdlYmVzc2VydGUgZXJzdGUgQmVzY2hyZWlidW5nOiIKLQotIzogZ2l0LWd1aS5zaDozNDE2Ci1tc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk5hY2hnZWJlc3NlcnRlIFp1c2FtbWVuZsO8aHJ1bmdzLUJlc2NocmVpYnVuZzoiCi0KLSM6IGdpdC1ndWkuc2g6MzQxNwotbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3MtQmVzY2hyZWlidW5nOiIKLQotIzogZ2l0LWd1aS5zaDozNDE4Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJDb21taXQtQmVzY2hyZWlidW5nOiIKLQotIzogZ2l0LWd1aS5zaDozNDc3IGdpdC1ndWkuc2g6MzY0MSBsaWIvY29uc29sZS50Y2w6NzMKLW1zZ2lkICJDb3B5IEFsbCIKLW1zZ3N0ciAiQWxsZSBrb3BpZXJlbiIKLQotIzogZ2l0LWd1aS5zaDozNTAxIGxpYi9ibGFtZS50Y2w6MTA2Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgIkRhdGVpOiIKLQotIzogZ2l0LWd1aS5zaDozNTQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEwMAotbXNnaWQgIk9wZW4iCi1tc2dzdHIgIsOWZmZuZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzYyOQotbXNnaWQgIlJlZnJlc2giCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCiBtc2dzdHIgIkFrdHVhbGlzaWVyZW4iCiAKLSM6IGdpdC1ndWkuc2g6MzY1MAotbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAiU2NocmlmdGdyw7bDn2UgdmVya2xlaW5lcm4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NjggYWRkLWludGVyYWN0aXZlLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFnZSAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dW0gQ29tbWl0IHZvcm1lcmtlbi4iCiAKLSM6IGdpdC1ndWkuc2g6MzY1NAotbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAiU2NocmlmdGdyw7bDn2UgdmVyZ3LDtsOfZXJuIgorIzogYWRkLWludGVyYWN0aXZlLmM6Njc0IGFkZC1pbnRlcmFjdGl2ZS5jOjg2MyBzZXF1ZW5jZXIuYzozNDA5CisjOiBidWlsdGluL3JlYmFzZS5jOjg5NQorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBpbmRleCIKK21zZ3N0ciAiS29ubnRlIEluZGV4IG5pY2h0IHNjaHJlaWJlbi4iCiAKLSM6IGdpdC1ndWkuc2g6MzY2MiBsaWIvYmxhbWUudGNsOjI5NgotbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICJaZWljaGVua29kaWVydW5nIgorIzogYWRkLWludGVyYWN0aXZlLmM6Njc3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJ1cGRhdGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidXBkYXRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCBQZmFkIGFrdHVhbGlzaWVydFxuIgorbXNnc3RyWzFdICIlZCBQZmFkZSBha3R1YWxpc2llcnRcbiIKIAotIzogZ2l0LWd1aS5zaDozNjczCi1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgotbXNnc3RyICJQYXRjaC1CbG9jayBhbndlbmRlbi96dXLDvGNrbmVobWVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6Njk1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIgorbXNnc3RyICJIaW53ZWlzOiAlcyBpc3QgbnVuIHVudmVyc2lvbmllcnQuXG4iCiAKLSM6IGdpdC1ndWkuc2g6MzY3OAotbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKLW1zZ3N0ciAiWmVpbGUgYW53ZW5kZW4venVyw7xja25laG1lbiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcwMCBhcHBseS5jOjQxMDggYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJtYWtlX2NhY2hlX2VudHJ5IGbDvHIgUGZhZCAnJXMnIGZlaGxnZXNjaGxhZ2VuIgogCi0jOiBnaXQtZ3VpLnNoOjM2ODQgZ2l0LWd1aS5zaDozNzk0IGdpdC1ndWkuc2g6MzgwNQotbXNnaWQgIlJldmVydCBIdW5rIgotbXNnc3RyICJQYXRjaC1CbG9jayB6dXLDvGNrbmVobWVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6NzMwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjU1Cittc2dpZCAiUmV2ZXJ0IgorbXNnc3RyICJSZXZlcnQiCiAKLSM6IGdpdC1ndWkuc2g6MzY4OSBnaXQtZ3VpLnNoOjM4MDEgZ2l0LWd1aS5zaDozODEyCi1tc2dpZCAiUmV2ZXJ0IExpbmUiCi1tc2dzdHIgIlplaWxlbsOkbmRlcnVuZ2VuIHp1csO8Y2tuZWhtZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NDYKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgIktvbm50ZSBIRUFEXnt0cmVlfSBuaWNodCBwYXJzZW4uIgogCi0jOiBnaXQtZ3VpLnNoOjM2OTQgZ2l0LWd1aS5zaDozNzkxCi1tc2dpZCAiVW5kbyBMYXN0IFJldmVydCIKLW1zZ3N0ciAiTGV0enRlcyBadXLDvGNrbmVobWVuIHLDvGNrZ8OkbmdpZyIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc4NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzMQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCBQZmFkIHdpZWRlcmhlcmdlc3RlbGx0XG4iCittc2dzdHJbMV0gIiVkIFBmYWRlIHdpZWRlcmhlcmdlc3RlbGx0XG4iCiAKLSM6IGdpdC1ndWkuc2g6MzcxMwotbXNnaWQgIlJ1biBNZXJnZSBUb29sIgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIgorIzogYWRkLWludGVyYWN0aXZlLmM6ODM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAiS2VpbmUgdW52ZXJzaW9uaWVydGVuIERhdGVpZW4uXG4iCiAKLSM6IGdpdC1ndWkuc2g6MzcxOAotbXNnaWQgIlVzZSBSZW1vdGUgVmVyc2lvbiIKLW1zZ3N0ciAiRXh0ZXJuZSBWZXJzaW9uIGJlbnV0emVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6ODM5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAidW52ZXJzaW9uaWVydGUgRGF0ZWllbiBoaW56dWbDvGdlbiIKIAotIzogZ2l0LWd1aS5zaDozNzIyCi1tc2dpZCAiVXNlIExvY2FsIFZlcnNpb24iCi1tc2dzdHIgIkxva2FsZSBWZXJzaW9uIGJlbnV0emVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6ODY2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIFBmYWQgaGluenVnZWbDvGd0XG4iCittc2dzdHJbMV0gIiVkIFBmYWRlIGhpbnp1Z2Vmw7xndFxuIgogCi0jOiBnaXQtZ3VpLnNoOjM3MjYKLW1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKLW1zZ3N0ciAiWnVyw7xja3NldHplbiBhdWYgdXJzcHLDvG5nbGljaGVuIENvbW1pdCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgIklnbm9yaWVyZSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaTogJXMiCiAKLSM6IGdpdC1ndWkuc2g6Mzc0NAotbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIkRpZXNlIMOEbmRlcnVuZ2VuIGltIFN1Ym1vZHVsIGRhcnN0ZWxsZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MDggYWRkLXBhdGNoLmM6MTMzMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiTnVyIEJpbsOkcmRhdGVpZW4gZ2XDpG5kZXJ0LlxuIgogCi0jOiBnaXQtZ3VpLnNoOjM3NDgKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJBa3R1ZWxsZW4gQnJhbmNoIGltIFN1Ym1vZHVsIGRhcnN0ZWxsZW4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTAgYWRkLXBhdGNoLmM6MTMyOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4uXG4iCiAKLSM6IGdpdC1ndWkuc2g6Mzc1MgotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiQWxsZSBCcmFuY2hlcyBpbSBTdWJtb2R1bCBkYXJzdGVsbGVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAiUGF0Y2ggQWt0dWFsaXNpZXJ1bmciCiAKLSM6IGdpdC1ndWkuc2g6Mzc1NwotbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiR2l0IGd1aSBpbSBTdWJtb2R1bCBzdGFydGVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTUzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1NAorbXNnaWQgIlJldmlldyBkaWZmIgorbXNnc3RyICJEaWZmIMO8YmVycHLDvGZlbiIKIAotIzogZ2l0LWd1aS5zaDozNzkzCi1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICJQYXRjaC1CbG9jayBhdXMgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTgxCittc2dpZCAic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiCittc2dzdHIgIlplaWdlIFBmYWRlIG1pdCDDhG5kZXJ1bmdlbiIKIAotIzogZ2l0LWd1aS5zaDozNzk3Ci1tc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiWmVpbGVuIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTgzCittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICJadXN0YW5kIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgenVtIENvbW1pdCB2b3JtZXJrZW4iCiAKLSM6IGdpdC1ndWkuc2g6Mzc5OCBnaXQtZ3VpLnNoOjM4MDkKLW1zZ2lkICJSZXZlcnQgTGluZXMiCi1tc2dzdHIgIlplaWxlbsOkbmRlcnVuZyB6dXLDvGNrbmVobWVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTg1Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgIlp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW4gYXVmIEhFQUQtVmVyc2lvbiB6dXLDvGNrc2V0emVuIgogCi0jOiBnaXQtZ3VpLnNoOjM4MDAKLW1zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCi1tc2dzdHIgIlplaWxlIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTg3Cittc2dpZCAicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IgorbXNnc3RyICJCbMO2Y2tlIHVuZCDDhG5kZXJ1bmcgZ2V6aWVsdCBhdXN3w6RobGVuIgogCi0jOiBnaXQtZ3VpLnNoOjM4MDQKLW1zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCi1tc2dzdHIgIlBhdGNoLUJsb2NrIHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4OQorbXNnaWQgInZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJEaWZmZXJlbnogendpc2NoZW4gSEVBRCB1bmQgSW5kZXggYW5zZWhlbiIKIAotIzogZ2l0LWd1aS5zaDozODA4Ci1tc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKLW1zZ3N0ciAiWmVpbGVuIHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk5MQorbXNnaWQgImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiSW5oYWx0ZSB2b24gdW52ZXJzaW9uaWVydGVuIERhdGVpZW4genVtIENvbW1pdCB2b3JtZXJrZW4iCiAKLSM6IGdpdC1ndWkuc2g6MzgxMQotbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKLW1zZ3N0ciAiWmVpbGUgenVyIEJlcmVpdHN0ZWxsdW5nIGhpbnp1ZsO8Z2VuIgorIzogYWRkLWludGVyYWN0aXZlLmM6OTk5IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNDgKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgIkhpbGZlIGbDvHIgRWluZ2FiZW46IgogCi0jOiBnaXQtZ3VpLnNoOjM4NjEKLW1zZ2lkICJJbml0aWFsaXppbmcuLi4iCi1tc2dzdHIgIkluaXRpYWxpc2llcmVuLi4uIgorIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMQorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICJFaW4gZWluemVsbmVzIEVsZW1lbnQgYXVzd8OkaGxlbiIKIAotIzogZ2l0LWd1aS5zaDo0MDE3Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAzCittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgIkVpbmUgUmVpaGUgdm9uIEVsZW1lbnRlbiBhdXN3w6RobGVuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA1Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAiTWVocmVyZSBSZWloZW4gYXVzd8OkaGxlbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNyBhZGQtaW50ZXJhY3RpdmUuYzoxMDUyCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAiRWxlbWVudCBiYXNpZXJlbmQgYXVmIGVpbmRldXRpZ2VuIFByw6RmaXggYXVzd8OkaGxlbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOQorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAiQW5nZWdlYmVuZSBFbGVtZW50ZSBhYnfDpGhsZW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTEKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICJBbGxlIEVsZW1lbnRlIGF1c3fDpGhsZW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTMKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIihsZWVyKSBBdXN3w6RobGVuIGJlZW5kZW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTAKK21zZ2lkICJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIgorbXNnc3RyICJFaW4gbnVtbWVyaWVydGVzIEVsZW1lbnQgYXVzd8OkaGxlbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA1NAorbXNnaWQgIihlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIihsZWVyKSBuaWNodHMgYXVzd8OkaGxlbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA2MiBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBCZWZlaGxlICoqKiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA2MyBidWlsdGluL2NsZWFuLmM6ODIzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg0OAorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICJXYXMgbnVuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICJ6dXIgU3RhZ2luZy1BcmVhIGhpbnp1Z2Vmw7xndCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICJhdXMgU3RhZ2luZy1BcmVhIGVudGZlcm50IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGFwcGx5LmM6NDk2NSBhcHBseS5jOjQ5NjggYnVpbHRpbi9hbS5jOjIxOTcKKyM6IGJ1aWx0aW4vYW0uYzoyMjAwIGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3MyBidWlsdGluL3B1bGwuYzoyMDkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgIlBmYWQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMjIKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiS29ubnRlIGRlbiBJbmRleCBuaWNodCBha3R1YWxpc2llcmVuLiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEzNiBidWlsdGluL2NsZWFuLmM6Nzg3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJCeWUuXG4iCittc2dzdHIgIlRzY2jDvHNzLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiTW9kdXPDpG5kZXJ1bmcgZGVyIFN0YWdpbmctQXJlYSBoaW56dWbDvGdlbiBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIkzDtnNjaHVuZyBkZXIgU3RhZ2luZy1BcmVhIGhpbnp1ZsO8Z2VuIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIkRpZXNlbiBQYXRjaC1CbG9jayBkZXIgU3RhZ2luZy1BcmVhIGhpbnp1ZsO8Z2VuIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAiS29ubnRlIEJsb2NrLUhlYWRlciAnJS4qcycgbmljaHQgcGFyc2VuLiIKKworIzogYWRkLXBhdGNoLmM6MTMwIGFkZC1wYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgIktvbm50ZSBmYXJiaWdlbiBCbG9jay1IZWFkZXIgJyUuKnMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IGFkZC1wYXRjaC5jOjE3NgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBkaWZmIgorbXNnc3RyICJLb25udGUgRGlmZmVyZW56IG5pY2h0IHBhcnNlbi4iCisKKyM6IGFkZC1wYXRjaC5jOjE5NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgIktvbm50ZSBmYXJiaWdlIERpZmZlcmVueiBuaWNodCBwYXJzZW4uIgorCisjOiBhZGQtcGF0Y2guYzo1MDgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKK21zZ3N0ciAiRXJ3YXJ0ZXRlIEtvbnRleHR6ZWlsZSAjJWQgaW5cbiIKKyIlLipzIgorCisjOiBhZGQtcGF0Y2guYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJQYXRjaC1CbMO2Y2tlIMO8YmVybGFwcGVuIHNpY2ggbmljaHQ6XG4iCisiJS4qc1xuIgorIlx0ZW5kZXQgbmljaHQgbWl0OlxuIgorIiUuKnMiCisKKyM6IGFkZC1wYXRjaC5jOjc5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiIgorIk1hbnVlbGxlciBFZGl0aWVybW9kdXMgZsO8ciBQYXRjaC1CbMO2Y2tlIC0tIHNpZWhlIG5hY2ggdW50ZW4gZsO8ciBlaW5lXG4iCisiS3VyemFubGVpdHVuZy5cbiIKKworIzogYWRkLXBhdGNoLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJWMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiVW0gJyVjJyBaZWlsZW4genUgZW50ZmVybmVuLCBtYWNoZW4gU2llIGF1cyBkaWVzZW4gJyAnIFplaWxlbiAoS29udGV4dCkuXG4iCisiVW0gJyVjJyBaZWlsZW4genUgZW50ZmVybmVuLCBsw7ZzY2hlbiBTaWUgZGllc2UuXG4iCisiWmVpbGVuLCBkaWUgbWl0ICVjIGJlZ2lubmVuLCB3ZXJkZW4gZW50ZmVybnQuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjgxMAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy5cbiIKK21zZ3N0ciAiIgorIldlbm4gZGVyIFBhdGNoIHNhdWJlciBhbmdld2VuZGV0IHdlcmRlbiBrYW5uLCB3aXJkIGRlciBiZWFyYmVpdGV0ZSBQYXRjaC0iCisiQmxvY2tcbiIKKyJkaXJla3QgYWxzIHp1bSBIaW56dWbDvGdlbiB6dXIgU3RhZ2luZy1BcmVhIG1hcmtpZXJ0LlxuIgorCisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBhZGQtcGF0Y2guYzo4MTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisiV2VubiBkYXMgbmljaHQgc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIGhhYmVuIFNpZSBkaWUgTcO2Z2xpY2hrZWl0XG4iCisiZWluZXIgZXJuZXV0ZW4gQmVhcmJlaXR1bmcuIFdlbm4gYWxsZSBaZWlsZW4gZGVzIFBhdGNoLUJsb2NrcyBlbnRmZXJudCAiCisid2VyZGVuLFxuIgorIndpcmQgZGllIEJlYXJiZWl0dW5nIGFiZ2Vicm9jaGVuIHVuZCBkZXIgUGF0Y2gtQmxvY2sgYmxlaWJ0IHVudmVyw6RuZGVydC5cbiIKKworIzogYWRkLXBhdGNoLmM6ODUxCittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIgorbXNnc3RyICJLb25udGUgQmxvY2stSGVhZGVyIG5pY2h0IHBhcnNlbi4iCisKKyM6IGFkZC1wYXRjaC5jOjg5NSBhZGQtcGF0Y2guYzoxMjk0Cittc2dpZCAiJ2dpdCBhcHBseSAtLWNhY2hlZCcgZmFpbGVkIgorbXNnc3RyICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBzY2hsdWcgZmVobC4iCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjLgorIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjOiBhZGQtcGF0Y2guYzo5NTIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjM5Cittc2dpZCAiIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgorbXNnc3RyICIiCisiSWhyIGJlYXJiZWl0ZXRlciBQYXRjaC1CbG9jayBrYW5uIG5pY2h0IGFuZ2V3ZW5kZXQgd2VyZGVuLlxuIgorIkVybmV1dCBiZWFyYmVpdGVuPyAoXCJuXCIgdmVyd2lyZnQgQmVhcmJlaXR1bmchKSBbeS9uXT8iCisKKyM6IGFkZC1wYXRjaC5jOjEwMDkKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG5vciBhbnkgb2YgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayB6dW0gQ29tbWl0IHZvcm1lcmtlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgenVtIENvbW1pdCB2b3JtZXJrZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgenVtIENvbW1pdCAiCisidm9ybWVya2VuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIHp1bSBDb21taXQgdm9ybWVya2VuXG4iCisiZCAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIG5pY2h0IHp1bSBDb21taXQgdm9ybWVya2VuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEwMTYKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJqIC0gZGllc2VuIFBhdGNoLUJsb2NrIHVuYmVzdGltbXQgbGFzc2VuLCBuw6RjaHN0ZW4gdW5iZXN0aW1tdGVuIFBhdGNoLUJsb2NrICIKKyJhbnplaWdlblxuIgorIkogLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5iZXN0aW1tdCBsYXNzZW4sIG7DpGNoc3RlbiBQYXRjaC1CbG9jayBhbnplaWdlblxuIgorImsgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5iZXN0aW1tdCBsYXNzZW4sIHZvcmhlcmlnZW4gdW5iZXN0aW1tdGVuIFBhdGNoLSIKKyJCbG9jayBhbnplaWdlblxuIgorIksgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5iZXN0aW1tdCBsYXNzZW4sIHZvcmhlcmlnZW4gUGF0Y2gtQmxvY2sgYW56ZWlnZW5cbiIKKyJnIC0gUGF0Y2gtQmxvY2sgenVtIEhpbnNwcmluZ2VuIGF1c3fDpGhsZW5cbiIKKyIvIC0gbmFjaCBQYXRjaC1CbG9jayBzdWNoZW4sIGRlciBnZWdlYmVuZW0gcmVndWzDpHJlbSBBdXNkcnVjayBlbnRzcHJpY2h0XG4iCisicyAtIGFrdHVlbGxlbiBQYXRjaC1CbG9jayBpbiBrbGVpbmVyZSBQYXRjaC1CbMO2Y2tlIGF1ZnRlaWxlblxuIgorImUgLSBha3R1ZWxsZW4gUGF0Y2gtQmxvY2sgbWFudWVsbCBlZGl0aWVyZW5cbiIKKyI/IC0gSGlsZmUgYW56ZWlnZW5cbiIKKworIzogYWRkLXBhdGNoLmM6MTEzNyBhZGQtcGF0Y2guYzoxMTQ3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAiS2VpbiB2b3JoZXJpZ2VyIFBhdGNoLUJsb2NrIgorCisjOiBhZGQtcGF0Y2guYzoxMTQyIGFkZC1wYXRjaC5jOjExNTIKK21zZ2lkICJObyBuZXh0IGh1bmsiCittc2dzdHIgIktlaW4gZm9sZ2VuZGVyIFBhdGNoLUJsb2NrIgorCisjOiBhZGQtcGF0Y2guYzoxMTU4Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290byIKK21zZ3N0ciAiS2VpbmUgYW5kZXJlbiBQYXRjaC1CbMO2Y2tlIHZlcmJsZWliZW5kIgorCisjOiBhZGQtcGF0Y2guYzoxMTY5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3NworbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICJ6dSB3ZWxjaGVtIFBhdGNoLUJsb2NrIHNwcmluZ2VuICg8RW50ZXI+IGbDvHIgbWVociBJbmZvcm1hdGlvbmVuKT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTcwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAienUgd2VsY2hlbSBQYXRjaC1CbG9jayBzcHJpbmdlbj8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIE51bW1lcjogJyVzJyIKKworIzogYWRkLXBhdGNoLmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS4iCittc2dzdHJbMF0gIkVudHNjaHVsZGlndW5nLCBudXIgJWQgUGF0Y2gtQmxvY2sgdmVyZsO8Z2Jhci4iCittc2dzdHJbMV0gIkVudHNjaHVsZGlndW5nLCBudXIgJWQgUGF0Y2gtQmzDtmNrZSB2ZXJmw7xnYmFyLiIKKworIzogYWRkLXBhdGNoLmM6MTE5NQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAiS2VpbmUgYW5kZXJlbiBQYXRjaC1CbMO2Y2tlIHp1bSBEdXJjaHN1Y2hlbiIKKworIzogYWRkLXBhdGNoLmM6MTIwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MjMKK21zZ2lkICJzZWFyY2ggZm9yIHJlZ2V4PyAiCittc2dzdHIgIlN1Y2hlIG5hY2ggcmVndWzDpHJlbSBBdXNkcnVjaz8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAiRmVobGVyaGFmdGVyIHJlZ3Vsw6RyZXIgQXVzZHJ1Y2sgZsO8ciBTdWNoZSAlczogJXMiCisKKyM6IGFkZC1wYXRjaC5jOjEyMzMKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iCittc2dzdHIgIktlaW4gUGF0Y2gtQmxvY2sgZW50c3ByaWNodCBkZW0gYW5nZWdlYmVuZW4gTXVzdGVyIgorCisjOiBhZGQtcGF0Y2guYzoxMjQwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIkVudHNjaHVsZGlndW5nLCBrYW5uIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCBhdWZ0ZWlsZW4iCisKKyM6IGFkZC1wYXRjaC5jOjEyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIkluICVkIFBhdGNoLUJsb2NrIGF1ZmdldGVpbHQuIgorCisjOiBhZGQtcGF0Y2guYzoxMjQ4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiRW50c2NodWxkaWd1bmcsIGthbm4gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IGJlYXJiZWl0ZW4iCisKKyM6IGFkdmljZS5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIlc0hpbndlaXM6ICUuKnMlc1xuIgorCisjOiBhZHZpY2UuYzoxNjQKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJDaGVycnktUGlja2VuIGlzdCBuaWNodCBtw7ZnbGljaCwgd2VpbCBTaWUgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRGF0ZWllbiAiCisiaGFiZW4uIgorCisjOiBhZHZpY2UuYzoxNjYKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIkNvbW1pdHRlbiBpc3QgbmljaHQgbcO2Z2xpY2gsIHdlaWwgU2llIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gaGFiZW4uIgorCisjOiBhZHZpY2UuYzoxNjgKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIk1lcmdlbiBpc3QgbmljaHQgbcO2Z2xpY2gsIHdlaWwgU2llIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gaGFiZW4uIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIlB1bGxlbiBpc3QgbmljaHQgbcO2Z2xpY2gsIHdlaWwgU2llIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gaGFiZW4uIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiUmV2ZXJ0ZW4gaXN0IG5pY2h0IG3DtmdsaWNoLCB3ZWlsIFNpZSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGhhYmVuLiIKKworIzogYWR2aWNlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiJXMgaXN0IG5pY2h0IG3DtmdsaWNoLCB3ZWlsIFNpZSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGhhYmVuLiIKKworIzogYWR2aWNlLmM6MTgyCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIktvcnJpZ2llcmVuIFNpZSBkaWVzIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcywgdW5kIGJlbnV0emVuIFNpZVxuIgorImRhbm4gJ2dpdCBhZGQvcm0gPERhdGVpPicsIHVtIGRpZSBBdWZsw7ZzdW5nIGVudHNwcmVjaGVuZCB6dSBtYXJraWVyZW5cbiIKKyJ1bmQgenUgY29tbWl0dGVuLiIKKworIzogYWR2aWNlLmM6MTkwCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIgorbXNnc3RyICJCZWVuZGUgd2VnZW4gdW5hdWZnZWzDtnN0ZW0gS29uZmxpa3QuIgorCisjOiBhZHZpY2UuYzoxOTUgYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIlNpZSBoYWJlbiBJaHJlbiBNZXJnZSBuaWNodCBhYmdlc2NobG9zc2VuIChNRVJHRV9IRUFEIGV4aXN0aWVydCkuIgorCisjOiBhZHZpY2UuYzoxOTcKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIgorbXNnc3RyICJCaXR0ZSBjb21taXR0ZW4gU2llIElocmUgw4RuZGVydW5nZW4sIGJldm9yIFNpZSBtZXJnZW4uIgorCisjOiBhZHZpY2UuYzoxOTgKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIkJlZW5kZSB3ZWdlbiBuaWNodCBhYmdlc2NobG9zc2VuZW0gTWVyZ2UuIgorCisjOiBhZHZpY2UuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgogIlxuIgotIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgotImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgotImJ5ICVzOlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCisiT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byAiCisiZmFsc2VcbiIKICJcbiIKIG1zZ3N0ciAiIgotIk3DtmdsaWNoZXJ3ZWlzZSBnaWJ0IGVzIFByb2JsZW1lIG1pdCBtYW5jaGVuIFVtZ2VidW5nc3ZhcmlhYmxlbi5cbiIKKyJIaW53ZWlzOiBXZWNoc2xlIHp1ICclcycuXG4iCiAiXG4iCi0iRGllIGZvbGdlbmRlbiBVbWdlYnVuZ3N2YXJpYWJsZW4ga8O2bm5lbiB2ZXJtdXRsaWNoIG5pY2h0IFxuIgotInZvbiAlcyBhbiBHaXQgd2VpdGVyZ2VnZWJlbiB3ZXJkZW46XG4iCisiU2llIGJlZmluZGVuIHNpY2ggaW0gWnVzdGFuZCBlaW5lcyAnbG9zZ2Vsw7ZzdGVuIEhFQUQnLiBTaWUga8O2bm5lbiBzaWNoXG4iCisidW1zY2hhdWVuLCBleHBlcmltZW50ZWxsZSDDhG5kZXJ1bmdlbiB2b3JuZWhtZW4gdW5kIGRpZXNlIGNvbW1pdHRlbiwgdW5kXG4iCisiU2llIGvDtm5uZW4gYWxsZSBtw7ZnbGljaGVuIENvbW1pdHMsIGRpZSBTaWUgaW4gZGllc2VtIFp1c3RhbmQgbWFjaGVuLFxuIgorIm9obmUgQXVzd2lya3VuZ2VuIGF1ZiBpcmdlbmRlaW5lbiBCcmFuY2ggdmVyd2VyZmVuLCBpbmRlbSBTaWUgenUgZWluZW1cbiIKKyJhbmRlcmVuIEJyYW5jaCB3ZWNoc2Vsbi5cbiIKKyJcbiIKKyJXZW5uIFNpZSBlaW5lbiBuZXVlbiBCcmFuY2ggZXJzdGVsbGVuIG3DtmNodGVuLCB1bSBJaHJlIGVyc3RlbGx0ZW4gQ29tbWl0c1xuIgorInp1IGJlaGFsdGVuLCBrw7ZubmVuIFNpZSBkYXMgKGpldHp0IG9kZXIgc3DDpHRlcikgZHVyY2ggTnV0enVuZyB2b25cbiIKKyInc3dpdGNoJyBtaXQgZGVyIE9wdGlvbiAtYyB0dW4uIEJlaXNwaWVsOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA8bmV1ZXItQnJhbmNobmFtZT5cbiIKKyJcbiIKKyJPZGVyIHVtIGRpZXNlIE9wZXJhdGlvbiByw7xja2fDpG5naWcgenUgbWFjaGVuOlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiU2llIGvDtm5uZW4gZGllc2VuIEhpbndlaXMgYXVzc2NoYWx0ZW4sIGluZGVtIFNpZSBkaWUgS29uZmlndXJhdGlvbnN2YXJpYWJsZVxuIgorIidhZHZpY2UuZGV0YWNoZWRIZWFkJyBhdWYgJ2ZhbHNlJyBzZXR6ZW4uXG4iCiAiXG4iCiAKLSM6IGdpdC1ndWkuc2g6NDA0NgorIzogYWxpYXMuYzo1MAorbXNnaWQgImNtZGxpbmUgZW5kcyB3aXRoIFxcIgorbXNnc3RyICJCZWZlaGxzemVpbGUgZW5kZXQgbWl0IFxcIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgIk5pY2h0IGdlc2NobG9zc2VuZSBBbmbDvGhydW5nc3plaWNoZW4uIgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJOaWNodCBlcmthbm50ZSBXaGl0ZXNwYWNlLU9wdGlvbjogJyVzJyIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIm5pY2h0IGVya2FubnRlIE9wdGlvbiB6dW0gSWdub3JpZXJlbiB2b24gV2hpdGVzcGFjZTogJyVzJyIKKworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgdW5kIC0tM3dheSBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYXBwbHkuYzoxMzcKK21zZ2lkICItLWNhY2hlZCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1jYWNoZWQgdW5kIC0tM3dheSBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0tM3dheSBrYW5uIG5pY2h0IGF1w59lcmhhbGIgZWluZXMgUmVwb3NpdG9yaWVzIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBhcHBseS5jOjE1MQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0taW5kZXgga2FubiBuaWNodCBhdcOfZXJoYWxiIGVpbmVzIFJlcG9zaXRvcmllcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYXBwbHkuYzoxNTQKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1jYWNoZWQga2FubiBuaWNodCBhdcOfZXJoYWxiIGVpbmVzIFJlcG9zaXRvcmllcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYXBwbHkuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiS2FubiByZWd1bMOkcmVuIEF1c2RydWNrIGbDvHIgWmVpdHN0ZW1wZWwgJXMgbmljaHQgdmVyYXJiZWl0ZW4iCisKKyM6IGFwcGx5LmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAiQXVzZsO8aHJ1bmcgZGVzIHJlZ3Vsw6RyZW4gQXVzZHJ1Y2tzIGdhYiAlZCB6dXLDvGNrLiBFaW5nYWJlOiAlcyIKKworIzogYXBwbHkuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiS29ubnRlIGtlaW5lbiBEYXRlaW5hbWVuIGluIFplaWxlICVkIGRlcyBQYXRjaGVzIGZpbmRlbi4iCisKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogdW5nw7xsdGlnZXMgJ2dpdC1kaWZmJyAtIGVyd2FydGV0ZSAvZGV2L251bGwsIGVyaGllbHQgJXMgaW4gWmVpbGUgIgorIiVkIgorCisjOiBhcHBseS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogdW5nw7xsdGlnZXMgJ2dpdC1kaWZmJyAtIElua29uc2lzdGVudGVyIG5ldWVyIERhdGVpbmFtZSBpbiBaZWlsZSAlZCIKKworIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IHVuZ8O8bHRpZ2VzICdnaXQtZGlmZicgLSBJbmtvbnNpc3RlbnRlciBhbHRlciBEYXRlaW5hbWUgaW4gWmVpbGUgJWQiCisKKyM6IGFwcGx5LmM6OTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogdW5nw7xsdGlnZXMgJ2dpdC1kaWZmJyAtIGVyd2FydGV0ZSAvZGV2L251bGwgaW4gWmVpbGUgJWQiCisKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgTW9kdXMgaW4gWmVpbGUgJWQ6ICVzIgorCisjOiBhcHBseS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgIklua29uc2lzdGVudGUgS29wZnplaWxlbiAlZCB1bmQgJWQuIgorCisjOiBhcHBseS5jOjEzNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorIkRlbSBLb3BmYmVyZWljaCB2b24gXCJnaXQgZGlmZlwiIGZlaGxlbiBJbmZvcm1hdGlvbmVuIHp1bSBEYXRlaW5hbWVuLCB3ZW5uICIKKyIlZCB2b3Jhbmdlc3RlbGx0ZXIgVGVpbCBkZXMgUGZhZGVzIGVudGZlcm50IHdpcmQgKFplaWxlICVkKSIKK21zZ3N0clsxXSAiIgorIkRlbSBLb3BmYmVyZWljaCB2b24gXCJnaXQgZGlmZlwiIGZlaGxlbiBJbmZvcm1hdGlvbmVuIHp1bSBEYXRlaW5hbWVuLCB3ZW5uICIKKyIlZCB2b3Jhbmdlc3RlbGx0ZSBUZWlsZSBkZXMgUGZhZGVzIGVudGZlcm50IHdlcmRlbiAoWmVpbGUgJWQpIgorCisjOiBhcHBseS5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lICVkKSIKK21zZ3N0ciAiIgorIkRlbSBLb3BmYmVyZWljaCB2b24gXCJnaXQgZGlmZlwiIGZlaGxlbiBJbmZvcm1hdGlvbmVuIHp1bSBEYXRlaW5hbWVuIChaZWlsZSAiCisiJWQpIgorCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW50OiB1bmVyd2FydGV0ZSBaZWlsZTogJS4qcyIKKworIzogYXBwbHkuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIlBhdGNoLUZyYWdtZW50IG9obmUgS29wZmJlcmVpY2ggYmVpIFplaWxlICVkOiAlLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibmV1ZSBEYXRlaSBow6RuZ3Qgdm9uIGFsdGVuIEluaGFsdGVuIGFiIgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJlbnRmZXJudGUgRGF0ZWkgaGF0IG5vY2ggSW5oYWx0ZSIKKworIzogYXBwbHkuYzoxNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIFBhdGNoIGJlaSBaZWlsZSAlZCIKKworIzogYXBwbHkuYzoxODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJuZXVlIERhdGVpICVzIGjDpG5ndCB2b24gYWx0ZW4gSW5oYWx0ZW4gYWIiCisKKyM6IGFwcGx5LmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJlbnRmZXJudGUgRGF0ZWkgJXMgaGF0IG5vY2ggSW5oYWx0ZSIKKworIzogYXBwbHkuYzoxODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIFdhcm51bmc6IERhdGVpICVzIHdpcmQgbGVlciwgYWJlciBuaWNodCBlbnRmZXJudC4iCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJmZWhsZXJoYWZ0ZXIgQmluw6RyLVBhdGNoIGJlaSBaZWlsZSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVyIEJpbsOkci1QYXRjaCBiZWkgWmVpbGUgJWQiCisKKyM6IGFwcGx5LmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICJQYXRjaCBtaXQgbnV0emxvc2VuIEluZm9ybWF0aW9uZW4gYmVpIFplaWxlICVkIgorCisjOiBhcHBseS5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAia29ubnRlIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyAlcyBuaWNodCBsZXNlbiIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImtvbm50ZSAlcyBuaWNodCDDtmZmbmVuIG9kZXIgbGVzZW4iCisKKyM6IGFwcGx5LmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFplaWxlbmFuZmFuZzogJyVjJyIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiUGF0Y2gtQmVyZWljaCAjJWQgZXJmb2xncmVpY2ggYW5nZXdlbmRldCBiZWkgJWQgKCVkIFplaWxlIHZlcnNldHp0KSIKK21zZ3N0clsxXSAiIgorIlBhdGNoLUJlcmVpY2ggIyVkIGVyZm9sZ3JlaWNoIGFuZ2V3ZW5kZXQgYmVpICVkICglZCBaZWlsZW4gdmVyc2V0enQpIgorCisjOiBhcHBseS5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiS29udGV4dCByZWR1emllcnQgenUgKCVsZC8lbGQpLCB1bSBQYXRjaC1CZXJlaWNoIGJlaSAlZCBhbnp1d2VuZGVuIgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorImJlaSBkZXIgU3VjaGUgbmFjaDpcbiIKKyIlLipzIgorCisjOiBhcHBseS5jOjMwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAia2VpbmUgRGF0ZW4gaW4gQmluw6RyLVBhdGNoIGbDvHIgJyVzJyIKKworIzogYXBwbHkuYzozMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICIiCisia2FubiBiaW7DpHJlbiBQYXRjaCBuaWNodCBpbiB1bWdla2VocnRlciBSZWloZW5mb2xnZSBhbndlbmRlbiBvaG5lIGVpbmVuXG4iCisidW1nZWtlaHJ0ZW4gUGF0Y2gtQmxvY2sgYXVmICclcyciCisKKyM6IGFwcGx5LmM6MzE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgIiIKKyJrYW5uIGJpbsOkcmVuIFBhdGNoIGF1ZiAnJXMnIG5pY2h0IG9obmUgZWluZSB2b2xsc3TDpG5kaWdlIEluZGV4LVplaWxlIGFud2VuZGVuIgorCisjOiBhcHBseS5jOjMxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICIiCisiZGVyIFBhdGNoIHdpcmQgYW5nZXdlbmRldCBhdWYgJyVzJyAoJXMpLCB3YXMgbmljaHQgZGVuIGFrdHVlbGxlbiBJbmhhbHRlblxuIgorImVudHNwcmljaHQiCisKKyM6IGFwcGx5LmM6MzE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgImRlciBQYXRjaCB3aXJkIGF1ZiBlaW4gbGVlcmVzICclcycgYW5nZXdlbmRldCwgd2FzIGFiZXIgbmljaHQgbGVlciBpc3QiCisKKyM6IGFwcGx5LmM6MzE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAiZGFzIGVyZm9yZGVybGljaGUgUG9zdGltYWdlICVzIGbDvHIgJyVzJyBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBhcHBseS5jOjMyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIktvbm50ZSBCaW7DpHItUGF0Y2ggbmljaHQgYXVmICclcycgYW53ZW5kZW4iCisKKyM6IGFwcGx5LmM6MzIwNworIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorIkJpbsOkci1QYXRjaCBmw7xyICclcycgZXJ6ZXVndCBmYWxzY2hlcyBFcmdlYm5pcyAoZXJ3YXJ0ZXRlICVzLCBiZWthbSAlcykiCisKKyM6IGFwcGx5LmM6MzIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAiQW53ZW5kdW5nIGRlcyBQYXRjaGVzIGZlaGxnZXNjaGxhZ2VuOiAlczolbGQiCisKKyM6IGFwcGx5LmM6MzM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImthbm4gJXMgbmljaHQgYXVzY2hlY2tlbiIKKworIzogYXBwbHkuYzozNDAzIGFwcGx5LmM6MzQxNCBhcHBseS5jOjM0NjAgbWlkeC5jOjYxIHNldHVwLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiB2b24gJXMiCisKKyM6IGFwcGx5LmM6MzQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICInJXMnIGlzdCBoaW50ZXIgZWluZXIgc3ltYm9saXNjaGVuIFZlcmtuw7xwZnVuZyIKKworIzogYXBwbHkuYzozNDQwIGFwcGx5LmM6MzY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAiUGZhZCAlcyB3dXJkZSB1bWJlbmFubnQvZ2Vsw7ZzY2h0IgorCisjOiBhcHBseS5jOjM1MjYgYXBwbHkuYzozNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXMgaXN0IG5pY2h0IGltIEluZGV4IgorCisjOiBhcHBseS5jOjM1MzUgYXBwbHkuYzozNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXMgZW50c3ByaWNodCBuaWNodCBkZXIgVmVyc2lvbiBpbSBJbmRleCIKKworIzogYXBwbHkuYzozNTcwCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkRlbSBSZXBvc2l0b3J5IGZlaGx0IGRlciBub3R3ZW5kaWdlIEJsb2IsIHVtIGF1ZiBlaW5lbiAzLVdlZ2UtTWVyZ2VcbiIKKyJ6dXLDvGNrenVmYWxsZW4uIgorCisjOiBhcHBseS5jOjM1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJGYWxsZSB6dXLDvGNrIGF1ZiAzLVdlZ2UtTWVyZ2UgLi4uXG4iCisKKyM6IGFwcGx5LmM6MzU4OSBhcHBseS5jOjM1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIKK21zZ3N0ciAia2FubiBha3R1ZWxsZSBJbmhhbHRlIHZvbiAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBhcHBseS5jOjM2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gWnVyw7xja2ZhbGxlbiBhdWYgMy1XZWdlLU1lcmdlLi4uXG4iCisKKyM6IGFwcGx5LmM6MzYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIlBhdGNoIGF1ZiAnJXMnIG1pdCBLb25mbGlrdGVuIGFuZ2V3ZW5kZXQuXG4iCisKKyM6IGFwcGx5LmM6MzYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgY2xlYW5seS5cbiIKK21zZ3N0ciAiUGF0Y2ggYXVmICclcycgc2F1YmVyIGFuZ2V3ZW5kZXQuXG4iCisKKyM6IGFwcGx5LmM6MzY1MAorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgIkzDtnNjaC1QYXRjaCBoaW50ZXJsw6Rzc3QgRGF0ZWlpbmhhbHRlIgorCisjOiBhcHBseS5jOjM3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiBmYWxzY2hlciBUeXAiCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIGlzdCB2b20gVHlwICVvLCBlcndhcnRldGUgJW8iCisKKyM6IGFwcGx5LmM6Mzg3NiBhcHBseS5jOjM4NzggcmVhZC1jYWNoZS5jOjgzMCByZWFkLWNhY2hlLmM6ODU2CisjOiByZWFkLWNhY2hlLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgUGZhZCAnJXMnIgorCisjOiBhcHBseS5jOjM5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlcyBpc3QgYmVyZWl0cyBiZXJlaXRnZXN0ZWxsdCIKKworIzogYXBwbHkuYzozOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXhpc3RpZXJ0IGJlcmVpdHMgaW0gQXJiZWl0c3ZlcnplaWNobmlzIgorCisjOiBhcHBseS5jOjM5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICJuZXVlciBNb2R1cyAoJW8pIHZvbiAlcyBlbnRzcHJpY2h0IG5pY2h0IGRlbSBhbHRlbiBNb2R1cyAoJW8pIgorCisjOiBhcHBseS5jOjM5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJuZXVlciBNb2R1cyAoJW8pIHZvbiAlcyBlbnRzcHJpY2h0IG5pY2h0IGRlbSBhbHRlbiBNb2R1cyAoJW8pIHZvbiAlcyIKKworIzogYXBwbHkuYzozOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJiZXRyb2ZmZW5lIERhdGVpICclcycgaXN0IGhpbnRlciBlaW5lciBzeW1ib2xpc2NoZW4gVmVya27DvHBmdW5nIgorCisjOiBhcHBseS5jOjM5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogUGF0Y2gga29ubnRlIG5pY2h0IGFuZ2V3ZW5kZXQgd2VyZGVuIgorCisjOiBhcHBseS5jOjQwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIlByw7xmZSBQYXRjaCAlcyAuLi4iCisKKyM6IGFwcGx5LmM6NDA5MworIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJTSEEtMSBJbmZvcm1hdGlvbiBmZWhsdCBvZGVyIGlzdCB1bmJyYXVjaGJhciBmw7xyIFN1Ym1vZHVsICVzIgorCisjOiBhcHBseS5jOjQxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICJNb2R1c8OkbmRlcnVuZyBmw7xyICVzLCB3YXMgc2ljaCBuaWNodCBpbSBha3R1ZWxsZW4gSEVBRCBiZWZpbmRldCIKKworIzogYXBwbHkuYzo0MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzICglcykuIgorbXNnc3RyICJTSEEtMSBJbmZvcm1hdGlvbiBmZWhsdCBvZGVyIGlzdCB1bmJyYXVjaGJhciAoJXMpLiIKKworIzogYXBwbHkuYzo0MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgenVtIHRlbXBvcsOkcmVuIEluZGV4IGhpbnp1ZsO8Z2VuIgorCisjOiBhcHBseS5jOjQxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAia29ubnRlIHRlbXBvcsOkcmVuIEluZGV4IG5pY2h0IG5hY2ggJXMgc2NocmVpYmVuIgorCisjOiBhcHBseS5jOjQyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgYXVzIGRlbSBJbmRleCBlbnRmZXJuZW4iCisKKyM6IGFwcGx5LmM6NDI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgImZlaGxlcmhhZnRlciBQYXRjaCBmw7xyIFN1Ym1vZHVsICVzIgorCisjOiBhcHBseS5jOjQzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgImtvbm50ZSBuZXUgZXJzdGVsbHRlIERhdGVpICclcycgbmljaHQgbGVzZW4iCisKKyM6IGFwcGx5LmM6NDMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAia2FubiBpbnRlcm5lbiBTcGVpY2hlciBmw7xyIGViZW4gZXJzdGVsbHRlIERhdGVpICVzIG5pY2h0IGVyemV1Z2VuIgorCisjOiBhcHBseS5jOjQzMTQgYXBwbHkuYzo0NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJrYW5uIGbDvHIgJXMga2VpbmVuIEVpbnRyYWcgaW4gZGVuIFp3aXNjaGVuc3BlaWNoZXIgaGluenVmw7xnZW4iCisKKyM6IGFwcGx5LmM6NDM1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIG5hY2ggJyVzJyIKKworIzogYXBwbHkuYzo0MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJzY2hsaWXDn2UgRGF0ZWkgJyVzJyIKKworIzogYXBwbHkuYzo0NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAia29ubnRlIERhdGVpICclcycgbWl0IE1vZHVzICVvIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYXBwbHkuYzo0NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIlBhdGNoICVzIHNhdWJlciBhbmdld2VuZGV0IgorCisjOiBhcHBseS5jOjQ1MzcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiaW50ZXJuZXIgRmVobGVyIgorCisjOiBhcHBseS5jOjQ1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICJXZW5kZSBQYXRjaCAlJXMgbWl0ICVkIFp1csO8Y2t3ZWlzdW5nIGFuLi4uIgorbXNnc3RyWzFdICJXZW5kZSBQYXRjaCAlJXMgbWl0ICVkIFp1csO8Y2t3ZWlzdW5nZW4gYW4uLi4iCisKKyM6IGFwcGx5LmM6NDU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIlZlcmvDvHJ6ZSBOYW1lIHZvbiAucmVqIERhdGVpIHp1ICUuKnMucmVqIgorCisjOiBhcHBseS5jOjQ1NTkgYnVpbHRpbi9mZXRjaC5jOjkwMSBidWlsdGluL2ZldGNoLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAia2FubiAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGFwcGx5LmM6NDU3MworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJQYXRjaC1CZXJlaWNoICMlZCBzYXViZXIgYW5nZXdlbmRldC4iCisKKyM6IGFwcGx5LmM6NDU3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIlBhdGNoLUJsb2NrICMlZCB6dXLDvGNrZ2V3aWVzZW4uIgorCisjOiBhcHBseS5jOjQ2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAiUGF0Y2ggJyVzJyBhdXNnZWxhc3Nlbi4iCisKKyM6IGFwcGx5LmM6NDcwNAorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAibmljaHQgZXJrYW5udGUgRWluZ2FiZSIKKworIzogYXBwbHkuYzo0NzI0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAiS29ubnRlIEluZGV4LURhdGVpIG5pY2h0IGxlc2VuIgorCisjOiBhcHBseS5jOjQ4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAia2FubiBQYXRjaCAnJXMnIG5pY2h0IMO2ZmZuZW46ICVzIgorCisjOiBhcHBseS5jOjQ5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAidW50ZXJkcsO8Y2t0ZSAlZCBXaGl0ZXNwYWNlLUZlaGxlciIKK21zZ3N0clsxXSAidW50ZXJkcsO8Y2t0ZSAlZCBXaGl0ZXNwYWNlLUZlaGxlciIKKworIzogYXBwbHkuYzo0OTE0IGFwcGx5LmM6NDkyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBaZWlsZSBmw7xndCBXaGl0ZXNwYWNlLUZlaGxlciBoaW56dS4iCittc2dzdHJbMV0gIiVkIFplaWxlbiBmw7xnZW4gV2hpdGVzcGFjZS1GZWhsZXIgaGluenUuIgorCisjOiBhcHBseS5jOjQ5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgWmVpbGUgbmFjaCBCZWhlYnVuZyB2b24gV2hpdGVzcGFjZS1GZWhsZXJuIGFuZ2V3ZW5kZXQuIgorbXNnc3RyWzFdICIlZCBaZWlsZW4gbmFjaCBCZWhlYnVuZyB2b24gV2hpdGVzcGFjZS1GZWhsZXJuIGFuZ2V3ZW5kZXQuIgorCisjOiBhcHBseS5jOjQ5MzggYnVpbHRpbi9hZGQuYzo1NzkgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6MzkwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgbmV1ZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBhcHBseS5jOjQ5NjYKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJrZWluZSDDhG5kZXJ1bmdlbiBpbSBhbmdlZ2ViZW5lbiBQZmFkIGFud2VuZGVuIgorCisjOiBhcHBseS5jOjQ5NjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLDhG5kZXJ1bmdlbiBudXIgaW0gYW5nZWdlYmVuZW4gUGZhZCBhbndlbmRlbiIKKworIzogYXBwbHkuYzo0OTcxIGJ1aWx0aW4vYW0uYzoyMjA2Cittc2dpZCAibnVtIgorbXNnc3RyICJBbnphaGwiCisKKyM6IGFwcGx5LmM6NDk3MgorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICIiCisiPEFuemFobD4gdm9yYW5nZXN0ZWxsdGUgU2NocsOkZ3N0cmljaGUgdm9uIGhlcmvDtm1tbGljaGVuIERpZmZlcmVuenBmYWRlbiAiCisiZW50ZmVybmVuIgorCisjOiBhcHBseS5jOjQ5NzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJoaW56dWdlZsO8Z3RlIFplaWxlbiBkZXMgUGF0Y2hlcyBpZ25vcmllcmVuIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIiIKKyJhbnN0YXR0IGRlciBBbndlbmR1bmcgZGVzIFBhdGNoZXMsIGRlbiBcImRpZmZzdGF0XCIgZsO8ciBkaWUgRWluZ2FiZSAiCisiYXVzZ2VnZWJlbiIKKworIzogYXBwbHkuYzo0OTgxCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAiIgorImRpZSBBbnphaGwgdm9uIGhpbnp1Z2Vmw7xndGVuL2VudGZlcm50ZW4gWmVpbGVuIGluIERlemltYWxub3RhdGlvbiBhbnplaWdlbiIKKworIzogYXBwbHkuYzo0OTgzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorImFuc3RhdHQgZGVyIEFud2VuZHVuZyBkZXMgUGF0Y2hlcywgZWluZSBadXNhbW1lbmZhc3N1bmcgZsO8ciBkaWUgRWluZ2FiZSAiCisiYXVzZ2ViZW4iCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgIiIKKyJhbnN0YXR0IGRlciBBbndlbmR1bmcgZGVzIFBhdGNoZXMsIHplaWdlIG9iIFBhdGNoIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4iCisKKyM6IGFwcGx5LmM6NDk4NworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiIgorInNpY2hlcnN0ZWxsZW4sIGRhc3MgZGVyIFBhdGNoIG1pdCBkZW0gYWt0dWVsbGVuIEluZGV4IGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4iCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1hcmsgbmV3IGZpbGVzIHdpdGggYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCIKK21zZ3N0ciAibmV1ZSBEYXRlaWVuIG1pdCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIG1hcmtpZXJlbiIKKworIzogYXBwbHkuYzo0OTkxCittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlBhdGNoIGFud2VuZGVuLCBvaG5lIMOEbmRlcnVuZ2VuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2b3J6dW5laG1lbiIKKworIzogYXBwbHkuYzo0OTkzCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiIgorIlBhdGNoIGFud2VuZGVuLCBkZXIgw4RuZGVydW5nZW4gYXXDn2VyaGFsYiBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzIHZvcm5pbW10IgorCisjOiBhcHBseS5jOjQ5OTYKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiUGF0Y2ggYW53ZW5kZW4gKEJlbnV0enVuZyBtaXQgLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAidmVyc3VjaGUgMy1XZWdlLU1lcmdlLCB3ZW5uIGRlciBQYXRjaCBuaWNodCBhbmdld2VuZGV0IHdlcmRlbiBrb25udGUiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisiZWluZW4gdGVtcG9yw6RyZW4gSW5kZXgsIGJhc2llcmVuZCBhdWYgZGVuIGludGVncmllcnRlbiBJbmRleC1JbmZvcm1hdGlvbmVuLCAiCisiZXJzdGVsbGVuIgorCisjOiBhcHBseS5jOjUwMDMgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIlBmYWRlIHNpbmQgZ2V0cmVubnQgZHVyY2ggTlVMIFplaWNoZW4iCisKKyM6IGFwcGx5LmM6NTAwNQorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAiIgorInNpY2hlciBzdGVsbGVuLCBkYXNzIG1pbmRlc3RlbnMgPG4+IFplaWxlbiBkZXMgS29udGV4dGVzIMO8YmVyZWluc3RpbW1lbiIKKworIzogYXBwbHkuYzo1MDA2IGJ1aWx0aW4vYW0uYzoyMTg1IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTAgYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICJBa3Rpb24iCisKKyM6IGFwcGx5LmM6NTAwNworbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICJuZXVlIG9kZXIgZ2XDpG5kZXJ0ZSBaZWlsZW4sIGRpZSBXaGl0ZXNwYWNlLUZlaGxlciBoYWJlbiwgZXJtaXR0ZWxuIgorCisjOiBhcHBseS5jOjUwMTAgYXBwbHkuYzo1MDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiw4RuZGVydW5nZW4gaW0gV2hpdGVzcGFjZSBiZWkgZGVyIFN1Y2hlIGRlcyBLb250ZXh0ZXMgaWdub3JpZXJlbiIKKworIzogYXBwbHkuYzo1MDE2Cittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgImRlbiBQYXRjaCBpbiB1bWdla2VocnRlciBSZWloZW5mb2xnZSBhbndlbmRlbiIKKworIzogYXBwbHkuYzo1MDE4Cittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgImtlaW5lbiBLb250ZXh0IGVyd2FydGVuIgorCisjOiBhcHBseS5jOjUwMjAKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAiIgorInp1csO8Y2tnZXdpZXNlbmUgUGF0Y2gtQmzDtmNrZSBpbiBlbnRzcHJlY2hlbmRlbiAqLnJlaiBEYXRlaWVuIGhpbnRlcmxhc3NlbiIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgInNpY2ggw7xiZXJsYXBwZW5kZSBQYXRjaC1CbMO2Y2tlIGVybGF1YmVuIgorCisjOiBhcHBseS5jOjUwMjMgYnVpbHRpbi9hZGQuYzozMDkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzU1IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJlcndlaXRlcnRlIEF1c2dhYmVuIgorCisjOiBhcHBseS5jOjUwMjUKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiZmVobGVyaGFmdCBlcmthbm50ZW4gZmVobGVuZGVuIFplaWxlbnVtYnJ1Y2ggYW0gRGF0ZWllbmRlIHRvbGVyaWVyZW4iCisKKyM6IGFwcGx5LmM6NTAyOAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAiZGVuIFplaWxlbm51bW1lcm4gaW0gS29wZiBkZXMgUGF0Y2gtQmxvY2tzIG5pY2h0IHZlcnRyYXVlbiIKKworIzogYXBwbHkuYzo1MDMwIGJ1aWx0aW4vYW0uYzoyMTk0Cittc2dpZCAicm9vdCIKK21zZ3N0ciAiV3VyemVsdmVyemVpY2huaXMiCisKKyM6IGFwcGx5LmM6NTAzMQorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgIjxXdXJ6ZWx2ZXJ6ZWljaG5pcz4gdm9yIGFsbGUgRGF0ZWluYW1lbiBzdGVsbGVuIgorCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPE9wdGlvbmVuPl0gPENvbW1pdC1SZWZlcmVuej4gWzxQZmFkPi4uLl0iCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MTYKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8UmVwb3NpdG9yeT4gWy0tZXhlYyA8UHJvZ3JhbW0+XSBbPE9wdGlvbmVuPl0gPENvbW1pdC0iCisiUmVmZXJlbno+IFs8UGZhZD4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8UmVwb3NpdG9yeT4gWy0tZXhlYyA8UHJvZ3JhbW0+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozNzIgYnVpbHRpbi9hZGQuYzoxODAgYnVpbHRpbi9hZGQuYzo1NTUgYnVpbHRpbi9ybS5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJQZmFkc3BlemlmaWthdGlvbiAnJXMnIHN0aW1tdCBtaXQga2VpbmVuIERhdGVpZW4gw7xiZXJlaW4iCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgIktlaW5lIHNvbGNoZSBSZWZlcmVuejogJS4qcyIKKworIzogYXJjaGl2ZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJXMiCittc2dzdHIgIktlaW4gZ8O8bHRpZ2VyIE9iamVrdG5hbWU6ICVzIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAiS2VpbiBUcmVlLU9iamVrdDogJXMiCisKKyM6IGFyY2hpdmUuYzo0MjYKK21zZ2lkICJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIKK21zZ3N0ciAiQWt0dWVsbGVzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBpc3QgdW52ZXJzaW9uaWVydC4iCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJmbXQiCittc2dzdHIgIkZvcm1hdCIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICJBcmNoaXZmb3JtYXQiCisKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9sb2cuYzoxNjUzCittc2dpZCAicHJlZml4IgorbXNnc3RyICJQcsOkZml4IgorCisjOiBhcmNoaXZlLmM6NDU5Cittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAiZWluZW4gUHLDpGZpeCB2b3IgamVkZW4gUGZhZG5hbWVuIGluIGRlbSBBcmNoaXYgc3RlbGxlbiIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEyOSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODk5CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKK21zZ3N0ciAiRGF0ZWkiCisKKyM6IGFyY2hpdmUuYzo0NjEgYnVpbHRpbi9hcmNoaXZlLmM6OTAKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgImRhcyBBcmNoaXYgaW4gZGllc2UgRGF0ZWkgc2NocmVpYmVuIgorCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiLmdpdGF0dHJpYnV0ZXMgYXVzIGRlbSBBcmJlaXRzdmVyemVpY2huaXMgbGVzZW4iCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICJhcmNoaXZpZXJ0ZSBEYXRlaWVuIGluIGRlciBTdGFuZGFyZC1GZWhsZXJhdXNnYWJlIGF1c2dlYmVuIgorCisjOiBhcmNoaXZlLmM6NDY1Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAibnVyIHNwZWljaGVybiIKKworIzogYXJjaGl2ZS5jOjQ2NgorbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAic2NobmVsbGVyIGtvbXByaW1pZXJlbiIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiYmVzc2VyIGtvbXByaW1pZXJlbiIKKworIzogYXJjaGl2ZS5jOjQ3NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAidW50ZXJzdMO8dHp0ZSBBcmNoaXZmb3JtYXRlIGF1Zmxpc3RlbiIKKworIzogYXJjaGl2ZS5jOjQ3OSBidWlsdGluL2FyY2hpdmUuYzo5MSBidWlsdGluL2Nsb25lLmM6MTEzIGJ1aWx0aW4vY2xvbmUuYzoxMTYKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzkxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg0Cittc2dpZCAicmVwbyIKK21zZ3N0ciAiUmVwb3NpdG9yeSIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICJBcmNoaXYgdm9tIFJlbW90ZS1SZXBvc2l0b3J5IDxSZXBvc2l0b3J5PiBhYnJ1ZmVuIgorCisjOiBhcmNoaXZlLmM6NDgxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJQcm9ncmFtbSIKKworIzogYXJjaGl2ZS5jOjQ4MiBidWlsdGluL2FyY2hpdmUuYzo5NAorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAiUGZhZCB6dW0gZXh0ZXJuZW4gXCJnaXQtdXBsb2FkLWFyY2hpdmVcIi1Qcm9ncmFtbSIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICJVbmVyd2FydGV0ZSBPcHRpb24gLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLWV4ZWMga2FubiBudXIgenVzYW1tZW4gbWl0IC0tcmVtb3RlIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIE9wdGlvbiAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIlVuYmVrYW5udGVzIEFyY2hpdmZvcm1hdCAnJXMnIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIkFyZ3VtZW50IGbDvHIgRm9ybWF0ICclcycgbmljaHQgdW50ZXJzdMO8dHp0OiAtJWQiCisKKyM6IGFyY2hpdmUtdGFyLmM6MTI1IGFyY2hpdmUtemlwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIKK21zZ3N0ciAiS2FubiBCbG9iICVzIG5pY2h0IHN0cmVhbWVuLiIKKworIzogYXJjaGl2ZS10YXIuYzoyNjYgYXJjaGl2ZS16aXAuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIKK21zZ3N0ciAiTmljaHQgdW50ZXJzdMO8dHp0ZXIgRGF0ZWltb2R1czogMCVvIChTSEExOiAlcykiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjkzIGFyY2hpdmUtemlwLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzIgorbXNnc3RyICJLYW5uICVzIG5pY2h0IGxlc2VuLiIKKworIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICJLb25udGUgJyVzJyBGaWx0ZXIgbmljaHQgc3RhcnRlbi4iCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY4Cittc2dpZCAidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiCittc2dzdHIgIktvbm50ZSBEZXNjcmlwdG9yIG5pY2h0IHVtbGVpdGVuLiIKKworIzogYXJjaGl2ZS10YXIuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiCittc2dzdHIgIiclcycgRmlsdGVyIG1lbGRldGUgRmVobGVyLiIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICJQZmFkIGlzdCBrZWluIGfDvGx0aWdlcyBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICJQZmFkIHp1IGxhbmcgKCVkIFplaWNoZW4sIFNIQTE6ICVzKTogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6NDc5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gS29tcHJpbWllcmVuICglZCkiCisKKyM6IGFyY2hpdmUtemlwLmM6NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlPFBSSXVNQVg+IgorbXNnc3RyICJUaW1lc3RhbXAgenUgZ3Jvw58gZsO8ciBkaWVzZXMgU3lzdGVtOiAlPFBSSXVNQVg+IgorCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiUuKnMgaXN0IGtlaW4gZ8O8bHRpZ2VyIEF0dHJpYnV0bmFtZSIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIiVzIG5pY2h0IGVybGF1YnQ6ICVzOiVkIgorCisjOiBhdHRyLmM6NDA5Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisiVmVybmVpbmVuZGUgTXVzdGVyIHdlcmRlbiBpbiBHaXQtQXR0cmlidXRlbiBpZ25vcmllcnQuXG4iCisiQmVudXR6ZW4gU2llICdcXCEnIGbDvHIgZsO8aHJlbmRlIEF1c3J1ZmV6ZWljaGVuLiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEluaGFsdCBiemdsLiBBbmbDvGhydW5nc3plaWNoZW4gaW4gRGF0ZWkgJyVzJzogJXMiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgIktlaW5lIGJpbsOkcmUgU3VjaGUgbWVociBtw7ZnbGljaCFcbiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICIlcyBpc3Qga2VpbiBnw7xsdGlnZXIgQ29tbWl0LU5hbWUiCisKKyM6IGJpc2VjdC5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiRGllIE1lcmdlLUJhc2lzICVzIGlzdCBmZWhsZXJoYWZ0LlxuIgorIkRhcyBiZWRldXRldCwgZGVyIEZlaGxlciB3dXJkZSB6d2lzY2hlbiAlcyB1bmQgWyVzXSBiZWhvYmVuLlxuIgorCisjOiBiaXNlY3QuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIkRpZSBNZXJnZS1CYXNpcyAlcyBpc3QgbmV1LlxuIgorIkRhcyBiZWRldXRldCwgZGllIEVpZ2Vuc2NoYWZ0IGhhdCBzaWNoIHp3aXNjaGVuICVzIHVuZCBbJXNdIGdlw6RuZGVydC5cbiIKKworIzogYmlzZWN0LmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKyJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiRGllIE1lcmdlLUJhc2lzICVzIGlzdCAlcy5cbiIKKyJEYXMgYmVkZXV0ZXQsIGRlciBlcnN0ZSAnJXMnIENvbW1pdCBiZWZpbmRldCBzaWNoIHp3aXNjaGVuICVzIHVuZCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorIk1heWJlIHlvdSBtaXN0b29rICVzIGFuZCAlcyByZXZzP1xuIgorbXNnc3RyICIiCisiTWFuY2hlICVzIENvbW1pdHMgc2luZCBrZWluZSBWb3Jnw6RuZ2VyIGRlcyAlcyBDb21taXRzLlxuIgorImdpdCBiaXNlY3Qga2FubiBpbiBkaWVzZW0gRmFsbCBuaWNodCByaWNodGlnIGFyYmVpdGVuLlxuIgorIlZpZWxsZWljaHQgdmVyd2VjaHNlbHRlbiBTaWUgJXMgdW5kICVzIENvbW1pdHM/XG4iCisKKyM6IGJpc2VjdC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisiRGllIE1lcmdlLUJhc2lzIHp3aXNjaGVuICVzIHVuZCBbJXNdIG11c3MgYXVzZ2VsYXNzZW4gd2VyZGVuLlxuIgorIkVzIGthbm4gZGFoZXIgbmljaHQgc2ljaGVyZ2VzdGVsbHQgd2VyZGVuLCBkYXNzIHNpY2ggZGVyXG4iCisiZXJzdGUgJXMgQ29tbWl0IHp3aXNjaGVuICVzIHVuZCAlcyBiZWZpbmRldC5cbiIKKyJFcyB3aXJkIGRlbm5vY2ggZm9ydGdlc2V0enQuIgorCisjOiBiaXNlY3QuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAiYmluw6RyZSBTdWNoZTogZWluZSBNZXJnZS1CYXNpcyBtdXNzIGdlcHLDvGZ0IHdlcmRlblxuIgorCisjOiBiaXNlY3QuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgImVpbiAlcyBDb21taXQgd2lyZCBiZW7DtnRpZ3QiCisKKyM6IGJpc2VjdC5jOjg4NCBidWlsdGluL25vdGVzLmM6MTc3IGJ1aWx0aW4vdGFnLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJrb25udGUgRGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJpc2VjdC5jOjkyOCBidWlsdGluL21lcmdlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIERhdGVpICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJpc2VjdC5jOjk1OAorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICJMZXNlbiB2b24gUmVmZXJlbnplbiBmw7xyIGJpbsOkcmUgU3VjaGUgZmVobGdlc2NobGFnZW4iCisKKyM6IGJpc2VjdC5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgd2FyIHNvd29obCAlcyBhbHMgYXVjaCAlc1xuIgorCisjOiBiaXNlY3QuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyJLZWluIHRlc3RiYXJlciBDb21taXQgZ2VmdW5kZW4uXG4iCisiVmllbGxlaWNodCBzdGFydGV0ZW4gU2llIG1pdCBmYWxzY2hlbiBQZmFkLVBhcmFtZXRlcm4/XG4iCisKKyM6IGJpc2VjdC5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJvdWdobHkgJWQgc3RlcCkiCittc2dpZF9wbHVyYWwgIihyb3VnaGx5ICVkIHN0ZXBzKSIKK21zZ3N0clswXSAiKHVuZ2Vmw6RociAlZCBTY2hyaXR0KSIKK21zZ3N0clsxXSAiKHVuZ2Vmw6RociAlZCBTY2hyaXR0ZSkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJiaW7DpHJlIFN1Y2hlOiBkYW5hY2ggbm9jaCAlZCBDb21taXQgenVtIFRlc3RlbiDDvGJyaWcgJXNcbiIKK21zZ3N0clsxXSAiYmluw6RyZSBTdWNoZTogZGFuYWNoIG5vY2ggJWQgQ29tbWl0cyB6dW0gVGVzdGVuIMO8YnJpZyAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIHVuZCAtLXJldmVyc2UgZnVua3Rpb25pZXJlbiBnZW1laW5zYW0gbmljaHQuIgorCisjOiBibGFtZS5jOjI3MTQKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgIiIKKyJrYW5uIC0tY29udGVudHMgbmljaHQgbWl0IGVuZGfDvGx0aWdlbSBOYW1lbiBkZXMgQ29tbWl0LU9iamVrdGVzIGJlbnV0emVuIgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyItLXJldmVyc2UgdW5kIC0tZmlyc3QtcGFyZW50IHp1c2FtbWVuIGVyZm9yZGVybiBkaWUgQW5nYWJlIGVpbmVzICIKKyJlbmRnw7xsdGlnZW5cbiIKKyJDb21taXRzIgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDEgc2VxdWVuY2VyLmM6MjA5MworIzogc2VxdWVuY2VyLmM6NDQ2MCBidWlsdGluL2NvbW1pdC5jOjEwNDAgYnVpbHRpbi9sb2cuYzozODggYnVpbHRpbi9sb2cuYzo5OTEKKyM6IGJ1aWx0aW4vbG9nLmM6MTUyMCBidWlsdGluL2xvZy5jOjE5MjUgYnVpbHRpbi9sb2cuYzoyMjE1IGJ1aWx0aW4vbWVyZ2UuYzo0MTEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEyOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDMKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxOTIKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAiRWlucmljaHR1bmcgZGVzIFJldmlzaW9uc2dhbmdzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBibGFtZS5jOjI3NjIKK21zZ2lkICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgorbXNnc3RyICIiCisiLS1yZXZlcnNlIHVuZCAtLWZpcnN0LXBhcmVudCB6dXNhbW1lbiBlcmZvcmRlcm4gZWluZW4gQmVyZWljaCBlbnRsYW5nIGRlclxuIgorIlwiZmlyc3QtcGFyZW50XCItS2V0dGUiCisKKyM6IGJsYW1lLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHBhdGggJXMgaW4gJXMiCittc2dzdHIgIlBmYWQgJXMgbmljaHQgaW4gJXMiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJrYW5uIEJsb2IgJXMgZsO8ciBQZmFkICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKICJcbiIKLSJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCi0iVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCiBtc2dzdHIgIiIKICJcbiIKLSJEaWVzIGlzdCBlaW4gYmVrYW5udGVzIFByb2JsZW0gZGVyIFRjbC1WZXJzaW9uLCBkaWVcbiIKLSJpbiBDeWd3aW4gbWl0Z2VsaWVmZXJ0IHdpcmQuIgorIk5hY2hkZW0gU2llIGRpZSBGZWhsZXJ1cnNhY2hlIGJlaG9iZW4gaGFiZW4sIGvDtm5uZW4gU2llXG4iCisiZGllIFRyYWNraW5nLUluZm9ybWF0aW9uZW4gbWl0XG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiXG4iCisiZXJuZXV0IHNldHplbi4iCiAKLSM6IGdpdC1ndWkuc2g6NDA1MQotIywgdGNsLWZvcm1hdAorIzogYnJhbmNoLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJCcmFuY2ggJXMga2FubiBuaWNodCBzZWluIGVpZ2VuZXIgVXBzdHJlYW0tQnJhbmNoIHNlaW4uIgorCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIGZvbGd0IG51biBSZW1vdGUtQnJhbmNoICclcycgdm9uICclcycgZHVyY2ggUmViYXNlLiIKKworIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBmb2xndCBudW4gUmVtb3RlLUJyYW5jaCAnJXMnIHZvbiAnJXMnLiIKKworIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiQnJhbmNoICclcycgZm9sZ3QgbnVuIGxva2FsZW0gQnJhbmNoICclcycgZHVyY2ggUmViYXNlLiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiQnJhbmNoICclcycgZm9sZ3QgbnVuIGxva2FsZW0gQnJhbmNoICclcycuIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIGZvbGd0IG51biBSZW1vdGUtUmVmZXJlbnogJyVzJyBkdXJjaCBSZWJhc2UuIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIGZvbGd0IG51biBSZW1vdGUtUmVmZXJlbnogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBmb2xndCBudW4gbG9rYWxlciBSZWZlcmVueiAnJXMnIGR1cmNoIFJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBmb2xndCBudW4gbG9rYWxlciBSZWZlcmVueiAnJXMnLiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJLb25udGUgS29uZmlndXJhdGlvbiB6dSBVcHN0cmVhbS1CcmFuY2ggbmljaHQgc2NocmVpYmVuLiIKKworIzogYnJhbmNoLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgIiIKKyJLb25maWd1cmF0aW9uIHp1bSBGb2xnZW4gdm9uIEJyYW5jaCBuaWNodCBlaW5nZXJpY2h0ZXQuIFJlZmVyZW56ICVzIGlzdCAiCisibWVocmRldXRpZy4iCisKKyM6IGJyYW5jaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBnw7xsdGlnZXIgQnJhbmNobmFtZS4iCisKKyM6IGJyYW5jaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQnJhbmNoICclcycgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBicmFuY2guYzoyMTMKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIkthbm4gQWt0dWFsaXNpZXJ1bmcgZGVzIGFrdHVlbGxlbiBCcmFuY2hlcyBuaWNodCBlcnp3aW5nZW4uIgorCisjOiBicmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKyJLYW5uIFRyYWNraW5nLUluZm9ybWF0aW9uZW4gbmljaHQgZWlucmljaHRlbjsgU3RhcnRwdW5rdCAnJXMnIGlzdCBrZWluICIKKyJCcmFuY2guIgorCisjOiBicmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZGVyIGFuZ2Vmb3JkZXJ0ZSBVcHN0cmVhbS1CcmFuY2ggJyVzJyBleGlzdGllcnQgbmljaHQiCisKKyM6IGJyYW5jaC5jOjIzNwogbXNnaWQgIiIKICJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKICJcbiIKLSJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCi0iaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCi0idXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKLSJ+Ly5naXRjb25maWcgZmlsZS5cbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKIG1zZ3N0ciAiIgogIlxuIgorIkZhbGxzIFNpZSB2b3JoYWJlbiwgSWhyZSBBcmJlaXQgYXVmIGVpbmVtIGJlcmVpdHMgZXhpc3RpZXJlbmRlblxuIgorIlVwc3RyZWFtLUJyYW5jaCBhdWZ6dWJhdWVuLCBzb2xsdGVuIFNpZSBcImdpdCBmZXRjaFwiXG4iCisiYXVzZsO8aHJlbiwgdW0gZGllc2VuIGFienVydWZlbi5cbiIKICJcbiIKLSJVbSBkZW4gTmFtZW4gwrslc8KrIHp1IMOkbmRlcm4sIHNvbGx0ZW4gU2llIGRpZSBcbiIKLSJnZXfDvG5zY2h0ZW4gV2VydGUgZsO8ciBkaWUgRWluc3RlbGx1bmcgdXNlci5uYW1lIHVuZCBcbiIKLSJ1c2VyLmVtYWlsIGluIElocmUgRGF0ZWkgfi8uZ2l0Y29uZmlnIGVpbmbDvGdlbi5cbiIKKyJGYWxscyBTaWUgdm9yaGFiZW4sIGVpbmVuIG5ldWVuIGxva2FsZW4gQnJhbmNoIHp1IHZlcnNlbmRlblxuIgorImRlciBzZWluZW0gZXh0ZXJuZW4gR2VnZW5zdMO8Y2sgZm9sZ2VuIHNvbGwsIGvDtm5uZW4gU2llXG4iCisiXCJnaXQgcHVzaCAtdVwiIHZlcndlbmRlbiwgdW0gZGVuIFVwc3RyZWFtLUJyYW5jaCBiZWltIFwicHVzaFwiXG4iCisienUga29uZmlndXJpZXJlbi4iCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NwotbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIG5pY2h0IHVudGVyc3TDvHR6dCIKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIlVuZ8O8bHRpZ2VyIE9iamVrdC1OYW1lOiAnJXMnIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKLW1zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKLW1zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmcgbmljaHQgdmVyZsO8Z2JhciIKKyM6IGJyYW5jaC5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJtZWhyZGV1dGlnZXIgT2JqZWt0LU5hbWU6ICclcyciCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAotbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKLW1zZ3N0ciAiVW5iZW51dHpiYXJlIEtvbmZpZ3VyYXRpb24gZGVyIFJlY2h0c2NocmVpYnByw7xmdW5nIgorIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEJyYW5jaHB1bmt0OiAnJXMnIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgIlfDtnJ0ZXJidWNoIGF1ZiAlcyB6dXLDvGNrZ2VzZXR6dC4iCisjOiBicmFuY2guYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIiclcycgaXN0IGJlcmVpdHMgaW4gJyVzJyBhdXNnZWNoZWNrdCIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjczCi1tc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKLW1zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0gbWl0IEZlaGxlciBhYmdlYnJvY2hlbiIKKyM6IGJyYW5jaC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAiSEVBRCBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzICVzIGlzdCBuaWNodCBha3R1YWxpc2llcnQuIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6ODAKLW1zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiVW5iZWthbm50ZXMgUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0iCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIHNpZWh0IG5pY2h0IHdpZSBlaW5lIHYyIFBha2V0ZGF0ZWkgYXVzIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Ci1tc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCi1tc2dzdHIgIktlaW5lIFZvcnNjaGzDpGdlIgorIzogYnVuZGxlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICJuaWNodCBlcmthbm50ZXIgS29wZmJlcmVpY2g6ICVzJXMgKCVkKSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAotbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiVW5lcndhcnRldGVzIEVPRiB2b20gUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0iCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIzNDQgc2VxdWVuY2VyLmM6MzEwOAorIzogYnVpbHRpbi9jb21taXQuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgw7ZmZm5lbiIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgotbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgotbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZyBmZWhsZ2VzY2hsYWdlbiIKKyM6IGJ1bmRsZS5jOjE0MworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJEZW0gUmVwb3NpdG9yeSBmZWhsZW4gZm9sZ2VuZGUgdm9yYXVzZ2VzZXR6dGUgQ29tbWl0czoiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjYgbGliL3JlbW90ZV9hZGQudGNsOjEzMgotIywgdGNsLWZvcm1hdAotbXNnaWQgImZldGNoICVzIgotbXNnc3RyICLCuyVzwqsgYW5mb3JkZXJuIgorIzogYnVuZGxlLmM6MTQ2Cittc2dpZCAibmVlZCBhIHJlcG9zaXRvcnkgdG8gdmVyaWZ5IGEgYnVuZGxlIgorbXNnc3RyICJVbSBlaW4gUGFrZXQgenUgw7xiZXJwcsO8ZmVuIHdpcmQgZWluIFJlcG9zaXRvcnkgYmVuw7Z0aWd0LiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCi1tc2dzdHIgIk5ldWUgw4RuZGVydW5nZW4gdm9uIMK7JXPCqyBob2xlbiIKKyM6IGJ1bmRsZS5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiRGFzIFBha2V0IGVudGjDpGx0IGRpZXNlIFJlZmVyZW56OiIKK21zZ3N0clsxXSAiRGFzIFBha2V0IGVudGjDpGx0IGRpZXNlICVkIFJlZmVyZW56ZW46IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAotIywgdGNsLWZvcm1hdAotbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKLW1zZ3N0ciAiR2Vsw7ZzY2h0ZSBleHRlcm5lIEJyYW5jaGVzIGF1cyDCuyVzwqsgZW50ZmVybmVuIgorIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIkRhcyBQYWtldCBzcGVpY2hlcnQgZWluZSBrb21wbGV0dGUgSGlzdG9yaWUuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgotbXNnc3RyICJHZWzDtnNjaHRlIGV4dGVybmUgVHJhY2tpbmdicmFuY2hlcyBhdXMgwrslc8KrIHdlcmRlbiBlbnRmZXJudCIKKyM6IGJ1bmRsZS5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiRGFzIFBha2V0IGJlbsO2dGlndCBkaWVzZSBSZWZlcmVuejoiCittc2dzdHJbMV0gIkRhcyBQYWtldCBiZW7DtnRpZ3QgZGllc2UgJWQgUmVmZXJlbnplbjoiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjI1Ci1tc2dpZCAiZmV0Y2ggYWxsIHJlbW90ZXMiCi1tc2dzdHIgIkFicnVmZW4gYWxsZXIgZXh0ZXJuZW4iCisjOiBidW5kbGUuYzoyNzMKK21zZ2lkICJ1bmFibGUgdG8gZHVwIGJ1bmRsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJLb25udGUgZHVwIGbDvHIgRGVzY3JpcHRvciBkZXMgUGFrZXRzIG5pY2h0IGF1c2bDvGhyZW4uIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gYWxsIHJlbW90ZXMiCi1tc2dzdHIgIk5ldWUgw4RuZGVydW5nZW4gdm9uIGFsbGVuIGV4dGVybmVuIGFuZm9yZGVybiIKKyM6IGJ1bmRsZS5jOjI4MAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIktvbm50ZSBQYWtldG9iamVrdGUgbmljaHQgZXJzdGVsbGVuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo0MAotbXNnaWQgInJlbW90ZSBwcnVuZSBhbGwgcmVtb3RlcyIKLW1zZ3N0ciAiRXh0ZXJuIHZlcmFsdGV0ZSBCcmFuY2hlcyBlbnRmZXJuZW4gYWxsZXIgUmVwb3NpdG9yaWVzIgorIzogYnVuZGxlLmM6MjkxCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgIkVyc3RlbGx1bmcgZGVyIFBha2V0b2JqZWt0ZSBhYmdlYnJvY2hlbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NDEKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSBhbGwgcmVtb3RlcyIKLW1zZ3N0ciAiIgotIkdlbMO2c2NodGUgZXh0ZXJuZSBUcmFja2luZ2JyYW5jaGVzIGF1cyBhbGxlbiBSZXBvc2l0b3JpZXMgd2VyZGVuIGVudGZlcm50IgorIzogYnVuZGxlLmM6MzMzCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAiXCJyZXYtbGlzdFwiIGFiZ2Vicm9jaGVuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo1NCBsaWIvdHJhbnNwb3J0LnRjbDo5MiBsaWIvdHJhbnNwb3J0LnRjbDoxMTAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJwdXNoICVzIgotbXNnc3RyICLCuyVzwqsgdmVyc2VuZGVuLi4uIgorIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJSZWZlcmVueiAnJXMnIHdpcmQgZHVyY2ggXCJyZXYtbGlzdFwiIE9wdGlvbmVuIGF1c2dlc2NobG9zc2VuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gbmFjaCDCuyVzwqsgdmVyc2VuZGVuIgorIzogYnVuZGxlLmM6NDYxIGJ1aWx0aW4vbG9nLmM6MjAzIGJ1aWx0aW4vbG9nLmM6MTgxNCBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyBBcmd1bWVudDogJXMiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWlycm9yaW5nIHRvICVzIgotbXNnc3RyICJTcGllZ2VsbiBuYWNoICVzIgorIzogYnVuZGxlLmM6NDY5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIkVyc3RlbGx1bmcgZWluZXMgbGVlcmVuIFBha2V0cyB6dXLDvGNrZ2V3aWVzZW4uIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgotbXNnc3RyICIlcyAlcyBuYWNoICVzIHZlcnNlbmRlbiIKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgImthbm4gJyVzJyBuaWNodCBlcnN0ZWxsZW4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEzMgotbXNnaWQgIlB1c2ggQnJhbmNoZXMiCi1tc2dzdHIgIkJyYW5jaGVzIHZlcnNlbmRlbiIKKyM6IGJ1bmRsZS5jOjUwNAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiRXJzdGVsbHVuZyBkZXIgUGFrZXRpbmRleGRhdGVpIGFiZ2Vicm9jaGVuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNDEgbGliL2NoZWNrb3V0X29wLnRjbDo1ODAgbGliL3JlbW90ZV9hZGQudGNsOjM0Ci0jOiBsaWIvYnJvd3Nlci50Y2w6MjkyIGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMwIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMgotIzogbGliL2Nob29zZV9mb250LnRjbDo0NSBsaWIvb3B0aW9uLnRjbDoxMjcgbGliL3Rvb2xzX2RsZy50Y2w6NDEKLSM6IGxpYi90b29sc19kbGcudGNsOjIwMiBsaWIvdG9vbHNfZGxnLnRjbDozNDUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MwotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjM3IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNCBsaWIvbWVyZ2UudGNsOjE3OAotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiQWJicmVjaGVuIgorIzogY29sb3IuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgRmFyYndlcnQ6ICUuKnMiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE0NwotbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKLW1zZ3N0ciAiTG9rYWxlIEJyYW5jaGVzIgorIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjgxMSBidWlsdGluL2FtLmM6MzU0IGJ1aWx0aW4vYW0uYzozOTgKKyM6IGJ1aWx0aW4vYW0uYzoxMzY2IGJ1aWx0aW4vYW0uYzoyMDA5IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgImtvbm50ZSAlcyBuaWNodCBwYXJzZW4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2MgotbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCi1tc2dzdHIgIlppZWwtUmVwb3NpdG9yeSIKKyM6IGNvbW1pdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIGlzdCBrZWluIENvbW1pdCEiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2NSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUxCi1tc2dpZCAiUmVtb3RlOiIKLW1zZ3N0ciAiRXh0ZXJuZXMgUmVwb3NpdG9yeToiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE4NyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjcyCi1tc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKLW1zZ3N0ciAiQmVsaWViaWdlIEFkcmVzc2U6IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDUKLW1zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgotbXNnc3RyICJOZXR6d2Vyay1FaW5zdGVsbHVuZ2VuIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDcKLW1zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKLW1zZ3N0ciAiIgotIsOcYmVyc2NocmVpYmVuIHZvbiBleGlzdGllcmVuZGVuIEJyYW5jaGVzIGVyendpbmdlbiAoa8O2bm50ZSDDhG5kZXJ1bmdlbiAiCi0ibMO2c2NoZW4pIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyMTEKLW1zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKLW1zZ3N0ciAiS29tcGFrdGVzIERhdGVuZm9ybWF0IGJlbnV0emVuIChmw7xyIGxhbmdzYW1lIE5ldHp2ZXJiaW5kdW5nZW4pIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyMTUKLW1zZ2lkICJJbmNsdWRlIHRhZ3MiCi1tc2dzdHIgIk1pdCBUYWdzIHZlcnNlbmRlbiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogUHVzaCIKLW1zZ3N0ciAiJXMgKCVzKTogVmVyc2VuZGVuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gwrslc8KrIHZvbiDCuyVzwqsgYW5mb3JkZXJuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKLW1zZ3N0ciAiRmVobGVyOiDCuyVzwqsga2FubiBuaWNodCBhbHMgQnJhbmNoIG9kZXIgVmVyc2lvbiBlcmthbm50IHdlcmRlbiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL3NzaGtleS50Y2w6NTggbGliL2NvbnNvbGUudGNsOjgxCi0jOiBsaWIvZGF0YWJhc2UudGNsOjMwCi1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIlNjaGxpZcOfZW4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgotbXNnc3RyICJCcmFuY2ggwrslc8KrIGV4aXN0aWVydCBuaWNodC4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTk0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gRWlucmljaHRlbiBkZXIgdmVyZWluZmFjaHRlbiBnaXQtcHVsbCBmw7xyIMK7JXPCqy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjAyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkJyYW5jaCDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQotIywgdGNsLWZvcm1hdAorIzogY29tbWl0LmM6MTkzCiBtc2dpZCAiIgotIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlN1cHBvcnQgZm9yIDxHSVRfRElSPi9pbmZvL2dyYWZ0cyBpcyBkZXByZWNhdGVkXG4iCisiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBHaXQgdmVyc2lvbi5cbiIKICJcbiIKLSJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgotIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCiBtc2dzdHIgIiIKLSJCcmFuY2ggwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLlxuIgorIkRpZSBVbnRlcnN0w7x0enVuZyBmw7xyIDxHSVRfRElSPi9pbmZvL2dyYWZ0cyBpc3QgdmVyYWx0ZXRcbiIKKyJ1bmQgd2lyZCBpbiB6dWvDvG5mdGlnZW4gR2l0IFZlcnNpb25lbiBlbnRmZXJudC5cbiIKICJcbiIKLSJCcmFuY2gga2FubiBuaWNodCBhdWYgwrslc8KrIHZvcmdlc3B1bHQgd2VyZGVuLiBSZWd1bMOkcmVzIFp1c2FtbWVuZsO8aHJlbiBpc3QgIgotIm5vdHdlbmRpZy4iCisiQml0dGUgYmVudXR6ZW4gU2llIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInp1bSBLb252ZXJ0aWVyZW4gZGVyIGvDvG5zdGxpY2hlbiBWb3Jnw6RuZ2VyIChcImdyYWZ0c1wiKVxuIgorImluIGVyc2V0emVuZGUgUmVmZXJlbnplbi48XG4iCisiXG4iCisiU2llIGvDtm5uZW4gZGllc2UgTWVsZHVuZyB1bnRlcmRyw7xja2VuLCBpbmRlbSBTaWVcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiBhdXNmw7xocmVuLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc21ldGhvZGUgwrslc8KrIG5pY2h0IHVudGVyc3TDvHR6dC4iCisjOiBjb21taXQuYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyJDb21taXQgJXMgaGF0IGVpbmUgbmljaHQgdmVydHJhdWVuc3fDvHJkaWdlIEdQRy1TaWduYXR1ciwgYW5nZWJsaWNoIHZvbiAlcy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKLW1zZ3N0ciAiQWt0dWFsaXNpZXJlbiB2b24gwrslc8KrIGZlaGxnZXNjaGxhZ2VuLiIKKyM6IGNvbW1pdC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkNvbW1pdCAlcyBoYXQgZWluZSB1bmfDvGx0aWdlIEdQRy1TaWduYXR1ciwgYW5nZWJsaWNoIHZvbiAlcy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Ci1tc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICJCZXJlaXRzdGVsbHVuZyAowrtpbmRleMKrKSBpc3QgenVyIEJlYXJiZWl0dW5nIGdlc3BlcnJ0ICjCu2xvY2tlZMKrKS4iCisjOiBjb21taXQuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIkNvbW1pdCAlcyBoYXQga2VpbmUgR1BHLVNpZ25hdHVyLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKKyM6IGNvbW1pdC5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICJDb21taXQgJXMgaGF0IGVpbmUgZ8O8bHRpZ2UgR1BHLVNpZ25hdHVyIHZvbiAlc1xuIgorCisjOiBjb21taXQuYzoxNDE1CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCiBtc2dzdHIgIiIKLSJEZXIgbGV0enRlIGdlbGFkZW5lIFN0YXR1cyBzdGltbXQgbmljaHQgbWVociBtaXQgZGVtIFJlcG9zaXRvcnkgw7xiZXJlaW4uXG4iCi0iXG4iCi0iRWluIGFuZGVyZXMgR2l0LVByb2dyYW1tIGhhdCBkYXMgUmVwb3NpdG9yeSBzZWl0IGRlbSBsZXR6dGVuIExhZGVuICIKLSJnZcOkbmRlcnQuICBWb3IgZGVtIFdlY2hzZWxuIGRlcyBsb2thbGVuIEJyYW5jaGVzIG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgotIlxuIgotIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorIldhcm51bmc6IERpZSBDb21taXQtQmVzY2hyZWlidW5nIGlzdCBuaWNodCBVVEYtOCBrb25mb3JtLlxuIgorIlNpZSBrw7ZubmVuIGRhcyBuYWNoYmVzc2VybiwgbmFjaGRlbSBTaWUgZGllIEJlc2NocmVpYnVuZyBrb3JyaWdpZXJ0IGhhYmVuLFxuIgorIm9kZXIgU2llIHNldHplbiBkaWUgS29uZmlndXJhdGlvbnN2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIGF1ZiBkYXMgIgorIkVuY29kaW5nLFxuIgorIndlbGNoZXMgdm9uIGlocmVtIFByb2pla3QgdmVyd2VuZGV0IHdpcmQuXG4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKLW1zZ3N0ciAiQXJiZWl0c2tvcGllIGFrdHVhbGlzaWVyZW4gYXVmIMK7JXPCqy4uLiIKKyM6IGNvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoLURhdGVpIGlzdCB6dSBrbGVpbi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Ci1tc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCi1tc2dzdHIgIkRhdGVpZW4gYWt0dWFsaXNpZXJ0IgorIzogY29tbWl0LWdyYXBoLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICJDb21taXQtR3JhcGgtU2lnbmF0dXIgJVggc3RpbW10IG5pY2h0IG1pdCBTaWduYXR1ciAlWCDDvGJlcmVpbi4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICJDb21taXQtR3JhcGgtVmVyc2lvbiAlWCBzdGltbXQgbmljaHQgbWl0IFZlcnNpb24gJVggw7xiZXJlaW4uIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICJIYXNoLVZlcnNpb24gZGVzIENvbW1pdC1HcmFwaCAlWCBzdGltbXQgbmljaHQgbWl0IFZlcnNpb24gJVggw7xiZXJlaW4uIgorCisjOiBjb21taXQtZ3JhcGguYzoyMzIKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCiBtc2dzdHIgIiIKLSJCcmFuY2ggwrslc8KrIEF1c2NoZWNrZW4gYWJnZWJyb2NoZW4gKFp1c2FtbWVuZsO8aHJlbiBkZXIgRGF0ZWllbiBpc3QgIgotIm5vdHdlbmRpZykuIgorImZlaGxlbmRlciBUYWJlbGxlbmVpbnRyYWcgZsO8ciBDb21taXQtR3JhcGggQ2h1bmstTG9va3VwOyBEYXRlaSAiCisibcO2Z2xpY2hlcndlaXNlIHVudm9sbHN0w6RuZGlnIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3OAotbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgotbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZGVyIERhdGVpZW4gaXN0IG5vdHdlbmRpZy4iCisjOiBjb21taXQtZ3JhcGguYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAiVW56dWzDpHNzaWdlciBDb21taXQtR3JhcGggQ2h1bmstT2Zmc2V0ICUwOHglMDh4IgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgotbXNnc3RyICJFcyB3aXJkIGF1ZiBCcmFuY2ggwrslc8KrIHZlcmJsaWViZW4uIgorIzogY29tbWl0LWdyYXBoLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgIkNvbW1pdC1HcmFwaCBDaHVuay1JZCAlMDh4IGtvbW10IG1laHJmYWNoIHZvci4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUzCisjOiBjb21taXQtZ3JhcGguYzozNTAKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICJDb21taXQtR3JhcGggaGF0IGtlaW5lbiBCYXNpcy1HcmFwaC1DaHVuayIKKworIzogY29tbWl0LWdyYXBoLmM6MzYwCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJDb21taXQtR3JhcGggVmVya2V0dHVuZyBzdGltbXQgbmljaHQgw7xiZXJlaW4uIgorCisjOiBjb21taXQtZ3JhcGguYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICJVbmfDvGx0aWdlIENvbW1pdC1HcmFwaCBWZXJrZXR0dW5nOiBaZWlsZSAnJXMnIGlzdCBrZWluIEhhc2giCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQzMworbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIktvbm50ZSBuaWNodCBhbGxlIENvbW1pdC1HcmFwaC1EYXRlaWVuIGZpbmRlbi4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU2NCBjb21taXQtZ3JhcGguYzo2MjQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICJVbmfDvGx0aWdlIENvbW1pdC1Qb3NpdGlvbi4gQ29tbWl0LUdyYXBoIGlzdCB3YWhyc2NoZWlubGljaCBiZXNjaMOkZGlndC4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIktvbm50ZSBDb21taXQgJXMgbmljaHQgZmluZGVuLiIKKworIzogY29tbWl0LWdyYXBoLmM6ODU4IGJ1aWx0aW4vYW0uYzoxMjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIktvbm50ZSBDb21taXQgJyVzJyBuaWNodCBwYXJzZW4uIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDE3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICJLb25udGUgQXJ0IHZvbiBPYmpla3QgJyVzJyBuaWNodCBiZXN0aW1tZW4uIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDQ5Cittc2dpZCAiTG9hZGluZyBrbm93biBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiTGFkZSBiZWthbm50ZSBDb21taXRzIGluIENvbW1pdC1HcmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA2NgorbXNnaWQgIkV4cGFuZGluZyByZWFjaGFibGUgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkVyd2VpdGVyZSBlcnJlaWNoYmFyZSBDb21taXRzIGluIENvbW1pdC1HcmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA4NQorbXNnaWQgIkNsZWFyaW5nIGNvbW1pdCBtYXJrcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkzDtnNjaGUgQ29tbWl0LU1hcmtpZXJ1bmdlbiBpbiBDb21taXQtR3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExMDQKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoIEdlbmVyYXRpb25zbnVtbWVybiBiZXJlY2huZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gIlN1Y2hlIENvbW1pdHMgZsO8ciBDb21taXQtR3JhcGggaW4gJWQgUGFrZXQiCittc2dzdHJbMV0gIlN1Y2hlIENvbW1pdHMgZsO8ciBDb21taXQtR3JhcGggaW4gJWQgUGFrZXRlbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBhZGRpbmcgcGFjayAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSGluenVmw7xnZW4gdm9uIFBha2V0ICVzLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nIGluZGV4IGZvciAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiBkZXMgSW5kZXggZsO8ciAlcy4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiU3VjaGUgQ29tbWl0cyBmw7xyIENvbW1pdC1HcmFwaCBpbiAlZCBSZWZlcmVueiIKK21zZ3N0clsxXSAiU3VjaGUgQ29tbWl0cyBmw7xyIENvbW1pdC1HcmFwaCBpbiAlZCBSZWZlcmVuemVuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG9iamVjdCBpZDogJXMiCittc2dzdHIgInVuZ8O8bHRpZ2UgQ29tbWl0LU9iamVrdC1JRDogJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNTUKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiU3VjaGUgQ29tbWl0cyBmw7xyIENvbW1pdC1HcmFwaCBpbiBnZXBhY2t0ZW4gT2JqZWt0ZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNzAKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiWsOkaGxlIENvbW1pdHMgaW4gQ29tbWl0LUdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAwCittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlN1Y2hlIHp1c8OkdHpsaWNoZSBSw6RuZGVyIGluIENvbW1pdC1HcmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTM0NgorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb3JyZWN0IG51bWJlciBvZiBiYXNlIGdyYXBoIGlkcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBrb3JyZWt0ZW4gQW56YWhsIHZvbiBCYXNpcy1HcmFwaC1JRHMuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzc5IG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICJLb25udGUgZsO8aHJlbmRlIFZlcnplaWNobmlzc2Ugdm9uICclcycgbmljaHQgZXJzdGVsbGVuLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM5MSBidWlsdGluL2luZGV4LXBhY2suYzozMDYgYnVpbHRpbi9yZXBhY2suYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICJrb25udGUgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gIlNjaHJlaWJlIENvbW1pdC1HcmFwaCBpbiAlZCBEdXJjaGdhbmciCittc2dzdHJbMV0gIlNjaHJlaWJlIENvbW1pdC1HcmFwaCBpbiAlZCBEdXJjaGfDpG5nZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0OTIKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBjb21taXQtZ3JhcGggY2hhaW4gZmlsZSIKK21zZ3N0ciAiS29ubnRlIENvbW1pdC1HcmFwaCBDaGFpbi1EYXRlaSBuaWNodCDDtmZmbmVuLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTUwNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiS29ubnRlIEJhc2lzLUNvbW1pdC1HcmFwaC1EYXRlaSBuaWNodCB1bWJlbmVubmVuLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTUyNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgdGVtcG9yYXJ5IGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZSBDb21taXQtR3JhcGgtRGF0ZWkgbmljaHQgdW1iZW5lbm5lbi4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2MzUKK21zZ2lkICJTY2FubmluZyBtZXJnZWQgY29tbWl0cyIKK21zZ3N0ciAiRHVyY2hzdWNoZSB6dXNhbW1lbmdlZsO8aHJ0ZSBDb21taXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZHVwbGljYXRlIGNvbW1pdCBpZCAlcyIKK21zZ3N0ciAiVW5lcndhcnRldGUgZG9wcGVsdGUgQ29tbWl0LUlEICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjcwCittc2dpZCAiTWVyZ2luZyBjb21taXQtZ3JhcGgiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiB2b24gQ29tbWl0LUdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICJEYXMgQ29tbWl0LUdyYXBoIEZvcm1hdCBrYW5uIG5pY2h0ICVkIENvbW1pdHMgc2NocmVpYmVuLiIKKworIzogY29tbWl0LWdyYXBoLmM6MTg3MQorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgIlp1IHZpZWxlIENvbW1pdHMgenVtIFNjaHJlaWJlbiBkZXMgR3JhcGhlbi4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NjEKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKyJEaWUgQ29tbWl0LUdyYXBoLURhdGVpIGhhdCBlaW5lIGZhbHNjaGUgUHLDvGZzdW1tZSB1bmQgaXN0IHdhaHJzY2hlaW5saWNoICIKKyJiZXNjaMOkZGlndC4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgT0lEIG9yZGVyOiAlcyB0aGVuICVzIgorbXNnc3RyICJDb21taXQtR3JhcGggaGF0IGZlaGxlcmhhZnRlIE9JRC1SZWloZW5mb2xnZTogJXMgZGFubiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4MSBjb21taXQtZ3JhcGguYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICJDb21taXQtR3JhcGggaGF0IGZlaGxlcmhhZnRlbiBGYW5vdXQtV2VydDogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBjb21taXQtZ3JhcGgiCittc2dzdHIgIktvbm50ZSBDb21taXQgJXMgdm9uIENvbW1pdC1HcmFwaCBuaWNodCBwYXJzZW4uIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDA2Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJDb21taXQgaW4gQ29tbWl0LUdyYXBoIMO8YmVycHLDvGZlbiIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIENvbW1pdHMgJXMgdm9uIE9iamVrdC1EYXRlbmJhbmsgZsO8ciBDb21taXQtR3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorIk9JRCBkZXMgV3VyemVsdmVyemVpY2huaXNzZXMgZsO8ciBDb21taXQgJXMgaW4gQ29tbWl0LUdyYXBoIGlzdCAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyBpcyB0b28gbG9uZyIKK21zZ3N0ciAiQ29tbWl0LUdyYXBoIFZvcmfDpG5nZXItTGlzdGUgZsO8ciBDb21taXQgJXMgaXN0IHp1IGxhbmciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgIkNvbW1pdC1HcmFwaC1Wb3Jnw6RuZ2VyIGbDvHIgJXMgaXN0ICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgIkNvbW1pdC1HcmFwaCBWb3Jnw6RuZ2VyLUxpc3RlIGbDvHIgQ29tbWl0ICVzIGVuZGV0IHp1IGZyw7xoIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDY0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKLSJcbiIKLSJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKLSJDaGVja291dCcuIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgogbXNnc3RyICIiCi0iRGllIEFyYmVpdHNrb3BpZSBpc3QgbmljaHQgYXVmIGVpbmVtIGxva2FsZW4gQnJhbmNoLlxuIgotIlxuIgotIldlbm4gU2llIGF1ZiBlaW5lbSBCcmFuY2ggYXJiZWl0ZW4gbcO2Y2h0ZW4sIGVyc3RlbGxlbiBTaWUgYml0dGUgamV0enQgZWluZW4gIgotIkJyYW5jaCBtaXQgZGVyIEF1c3dhaGwgwrtMb3NnZWzDtnN0ZSBBcmJlaXRza29waWUtVmVyc2lvbsKrLiIKKyJDb21taXQtR3JhcGggaGF0IEdlbmVyYXRpb25zbnVtbWVyIG51bGwgZsO8ciBDb21taXQgJXMsIGFiZXIgc29uc3QgdW5nbGVpY2ggIgorIm51bGwiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTA0IGxpYi9jaGVja291dF9vcC50Y2w6NTA4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIlVtZ2VzdGVsbHQgYXVmIMK7JXPCqy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKLW1zZ3N0ciAiVW1zZXR6ZW4gdm9uIMK7JXPCqyBuYWNoIMK7JXPCqyB3aXJkIGZvbGdlbmRlIENvbW1pdHMgdmVybGllcmVuOiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTgKLW1zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgotbXNnc3RyICIiCi0iVmVybG9yZW5lIENvbW1pdHMga8O2bm5lbiBudXIgbWl0IGdyw7bDn2VyZW0gQXVmd2FuZCB3aWVkZXJoZXJnZXN0ZWxsdCB3ZXJkZW4uIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0ICclcyc/IgotbXNnc3RyICLCuyVzwqsgdW1zZXR6ZW4/IgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2OCBsaWIvdG9vbHNfZGxnLnRjbDozMzYgbGliL21lcmdlLnRjbDoxNzAKLW1zZ2lkICJWaXN1YWxpemUiCi1tc2dzdHIgIkRhcnN0ZWxsZW4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTcyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NQotbXNnaWQgIlJlc2V0IgotbXNnc3RyICJVbXNldHplbiAoUmVzZXQpIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNgotIywgdGNsLWZvcm1hdAorIzogY29tbWl0LWdyYXBoLmM6MjA2OAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKLSJcbiIKLSJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgotInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgotIlxuIgotIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgogbXNnc3RyICIiCi0iTG9rYWxlciBCcmFuY2gga2FubiBuaWNodCBnZXNldHp0IHdlcmRlbi5cbiIKLSJcbiIKLSJEaWVzZSBBcmJlaXRza29waWUgaXN0IG51ciB0ZWlsd2Vpc2UgdW1nZXN0ZWxsdC4gRGllIERhdGVpZW4gc2luZCBrb3JyZWt0ICIKLSJha3R1YWxpc2llcnQsIGFiZXIgZWluaWdlIGludGVybmUgR2l0LURhdGVpZW4ga29ubnRlbiBuaWNodCBnZcOkbmRlcnQgIgotIndlcmRlbi5cbiIKLSJcbiIKLSJEaWVzIGlzdCBlaW4gaW50ZXJuZXIgUHJvZ3JhbW1mZWhsZXIgdm9uICVzLiBQcm9ncmFtbSB3aXJkIGpldHp0IGFiZ2Vicm9jaGVuLiIKKyJDb21taXQtR3JhcGggaGF0IEdlbmVyYXRpb25zbnVtbWVyIHVuZ2xlaWNoIG51bGwgZsO8ciBDb21taXQgJXMsIGFiZXIgc29uc3QgIgorIm51bGwiCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IEFkZCBSZW1vdGUiCi1tc2dzdHIgIiVzICglcyk6IEV4dGVybmVzIFJlcG9zaXRvcnkgaGluenVmw7xnZW4iCisjOiBjb21taXQtZ3JhcGguYzoyMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBnZW5lcmF0aW9uIGZvciBjb21taXQgJXMgaXMgJXUgIT0gJXUiCittc2dzdHIgIkNvbW1pdC1HcmFwaCBFcnN0ZWxsdW5nIGbDvHIgQ29tbWl0ICVzIGlzdCAldSAhPSAldSIKIAotIzogbGliL3JlbW90ZV9hZGQudGNsOjI1Ci1tc2dpZCAiQWRkIE5ldyBSZW1vdGUiCi1tc2dzdHIgIk5ldWVzIGV4dGVybmVzIFJlcG9zaXRvcnkgaGluenVmw7xnZW4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozMCBsaWIvdG9vbHNfZGxnLnRjbDozNwotbXNnaWQgIkFkZCIKLW1zZ3N0ciAiSGluenVmw7xnZW4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozOQotbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgotbXNnc3RyICJFaW56ZWxoZWl0ZW4gZGVzIGV4dGVybmVuIFJlcG9zaXRvcnkiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo0MSBsaWIvdG9vbHNfZGxnLnRjbDo1MSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDQKLW1zZ2lkICJOYW1lOiIKLW1zZ3N0ciAiTmFtZToiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAotbXNnaWQgIkxvY2F0aW9uOiIKLW1zZ3N0ciAiQWRyZXNzZToiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MAotbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgotbXNnc3RyICJXZWl0ZXJlIEFrdGlvbiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYzCi1tc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCi1tc2dzdHIgIkpldHp0IGFuZm9yZGVybiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjY5Ci1tc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKLW1zZ3N0ciAiRXh0ZXJuZXMgUmVwb3NpdG9yeSBpbml0aWFsaXNpZXJlbiB1bmQgZGFoaW4gdmVyc2VuZGVuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKLW1zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgotbXNnc3RyICJLZWluZSB3ZWl0ZXJlIEFrdGlvbiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMAotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBOYW1lbiBkZXMgZXh0ZXJuZW4gUmVwb3NpdG9yeSBhbi4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKLW1zZ3N0ciAiwrslc8KrIGlzdCBrZWluIHp1bMOkc3NpZ2VyIE5hbWUgZWluZXMgZXh0ZXJuZW4gUmVwb3NpdG9yeS4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBIaW56dWbDvGdlbiBkZXMgZXh0ZXJuZW4gUmVwb3NpdG9yeSDCuyVzwqsgYXVzIEFkcmVzc2Ugwrslc8KrLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKLW1zZ3N0ciAiwrslc8KrIGFuZm9yZGVybiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCisjOiBjb21taXQtZ3JhcGguYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKIG1zZ3N0ciAiIgotIkluaXRpYWxpc2llcmVuIGVpbmVzIGV4dGVybmVuIFJlcG9zaXRvcmllcyBhbiBBZHJlc3NlIMK7JXPCqyBpc3QgbmljaHQgbcO2Z2xpY2guIgorIkNvbW1pdC1EYXR1bSBmw7xyIENvbW1pdCAlcyBpbiBDb21taXQtR3JhcGggaXN0ICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKIAotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCi1tc2dzdHIgIkVpbnJpY2h0ZW4gdm9uIMK7JXPCqyBhbiDCuyVzwqsiCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIlNwZWljaGVyIHZlcmJyYXVjaHQiCiAKLSM6IGxpYi9icm93c2VyLnRjbDoxNwotbXNnaWQgIlN0YXJ0aW5nLi4uIgotbXNnc3RyICJTdGFydGVuLi4uIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBGaWxlIEJyb3dzZXIiCi1tc2dzdHIgIiVzICglcyk6IERhdGVpLUJyb3dzZXIiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxMzIgbGliL2Jyb3dzZXIudGNsOjE0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgJXMuLi4iCi1tc2dzdHIgIiVzIGxhZGVuLi4uIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTkzCi1tc2dpZCAiW1VwIFRvIFBhcmVudF0iCi1tc2dzdHIgIltOYWNoIG9iZW5dIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAiJXMgKCVzKTogRGF0ZWllbiBkZXMgQnJhbmNoZXMgZHVyY2hibMOkdHRlcm4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyODIKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgotbXNnc3RyICJEYXRlaWVuIGRlcyBCcmFuY2hlcyBkdXJjaGJsw6R0dGVybiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQzNwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExNQotbXNnaWQgIkJyb3dzZSIKLW1zZ3N0ciAiQmzDpHR0ZXJuIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjk3IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM1IGxpYi90b29sc19kbGcudGNsOjMyMQotbXNnaWQgIlJldmlzaW9uIgotbXNnc3RyICJWZXJzaW9uIgotCi0jOiBsaWIvaW5kZXgudGNsOjYKLW1zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCi1tc2dzdHIgIkJlcmVpdHN0ZWxsdW5nIGthbm4gbmljaHQgd2llZGVyIGZyZWlnZWdlYmVuIHdlcmRlbi4iCi0KLSM6IGxpYi9pbmRleC50Y2w6MzAKLW1zZ2lkICJJbmRleCBFcnJvciIKLW1zZ3N0ciAiRmVobGVyIGluIEJlcmVpdHN0ZWxsdW5nIgotCi0jOiBsaWIvaW5kZXgudGNsOjMyCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgotInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCisiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCisiXHQlc1xuIgorImZyb21cbiIKKyJcdCVzXG4iCisiVGhpcyBtaWdodCBiZSBkdWUgdG8gY2lyY3VsYXIgaW5jbHVkZXMuIgogbXNnc3RyICIiCi0iRGFzIEFrdHVhbGlzaWVyZW4gZGVyIEdpdC1CZXJlaXRzdGVsbHVuZyBpc3QgZmVobGdlc2NobGFnZW4uIEVpbmUgYWxsZ2VtZWluZSAiCi0iR2l0LUFrdHVhbGlzaWVydW5nIHdpcmQgamV0enQgZ2VzdGFydGV0LCB1bSBnaXQtZ3VpIHdpZWRlciBtaXQgZ2l0IHp1ICIKLSJzeW5jaHJvbmlzaWVyZW4uIgorIk1heGltYWxlIEluY2x1ZGUtVGllZmUgKCVkKSBiZWltIEVpbmJpbmRlbiB2b25cbiIKKyJcdCVzXG4iCisidm9uXG4iCisiXHQlc1xuIgorIsO8YmVyc2Nocml0dGVuLlxuIgorIkRhcyBrw7ZubnRlIGR1cmNoIHppcmt1bGFyZSBJbmNsdWRlcyBlbnRzdGFuZGVuIHNlaW4uIgogCi0jOiBsaWIvaW5kZXgudGNsOjQzCi1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgIkZvcnRzZXR6ZW4iCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAiS29ubnRlIEluY2x1ZGUtUGZhZCAnJXMnIG5pY2h0IGVyd2VpdGVybi4iCiAKLSM6IGxpYi9pbmRleC50Y2w6NDYKLW1zZ2lkICJVbmxvY2sgSW5kZXgiCi1tc2dzdHIgIkJlcmVpdHN0ZWxsdW5nIGZyZWlnZWJlbiIKKyM6IGNvbmZpZy5jOjE1MQorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiUmVsYXRpdmUgSW5jbHVkZXMgdm9uIEtvbmZpZ3VyYXRpb25lbiBtw7xzc2VuIGF1cyBEYXRlaWVuIGtvbW1lbi4iCiAKLSM6IGxpYi9pbmRleC50Y2w6NzcgbGliL2luZGV4LnRjbDoxNDYgbGliL2luZGV4LnRjbDoyMjAgbGliL2luZGV4LnRjbDo1ODcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTk5Ci1tc2dpZCAiZmlsZXMiCi1tc2dzdHIgIkRhdGVpZW4iCisjOiBjb25maWcuYzoxOTcKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSBjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgIiIKKyJCZWRpbmd1bmdlbiBmw7xyIGRhcyBFaW5iaW5kZW4gdm9uIEtvbmZpZ3VyYXRpb25lbiBhdXMgcmVsYXRpdmVuIFBmYWRlbiAiCisibcO8c3NlblxuIgorImF1cyBEYXRlaWVuIGtvbW1lbi4iCiAKLSM6IGxpYi9pbmRleC50Y2w6MzI2Ci1tc2dpZCAiVW5zdGFnaW5nIHNlbGVjdGVkIGZpbGVzIGZyb20gY29tbWl0IgotbXNnc3RyICJHZXfDpGhsdGUgRGF0ZWllbiBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICJTY2hsw7xzc2VsIGVudGjDpGx0IGtlaW5lIFNla3Rpb246ICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjMzMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiRGF0ZWkgwrslc8KrIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorIzogY29uZmlnLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJTY2hsw7xzc2VsIGVudGjDpGx0IGtlaW5lbiBWYXJpYWJsZW5uYW1lbjogJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzY5Ci1tc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKLW1zZ3N0ciAiQmVyZWl0IHp1bSBDb21taXR0ZW4uIgorIzogY29uZmlnLmM6NDA2IHNlcXVlbmNlci5jOjI1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBTY2hsw7xzc2VsOiAlcyIKIAotIzogbGliL2luZGV4LnRjbDozNzgKLW1zZ2lkICJBZGRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgIkdld8OkaGx0ZSBEYXRlaWVuIGhpbnp1ZsO8Z2VuIgorIzogY29uZmlnLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFNjaGzDvHNzZWwgKG5ldWUgWmVpbGUpOiAlcyIKIAotIzogbGliL2luZGV4LnRjbDozODIKLSMsIHRjbC1mb3JtYXQKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgIkZlaGxlcmhhZnRlciBLb25maWd1cmF0aW9uc3BhcmFtZXRlcjogJXMiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgIkZlaGxlcmhhZnRlcyBGb3JtYXQgaW4gJXMiCisKKyM6IGNvbmZpZy5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBLb25maWd1cmF0aW9uc3plaWxlICVkIGluIEJsb2IgJXMiCisKKyM6IGNvbmZpZy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBLb25maWd1cmF0aW9uc3plaWxlICVkIGluIERhdGVpICVzIgorCisjOiBjb25maWcuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJVbmfDvGx0aWdlIEtvbmZpZ3VyYXRpb25zemVpbGUgJWQgaW4gU3RhbmRhcmQtRWluZ2FiZSIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBLb25maWd1cmF0aW9uc3plaWxlICVkIGluIFN1Ym1vZHVsLUJsb2IgJXMiCisKKyM6IGNvbmZpZy5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICJVbmfDvGx0aWdlIEtvbmZpZ3VyYXRpb25zemVpbGUgJWQgaW4gS29tbWFuZG96ZWlsZSAlcyIKKworIzogY29uZmlnLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBLb25maWd1cmF0aW9uc3plaWxlICVkIGluICVzIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJvdXQgb2YgcmFuZ2UiCittc2dzdHIgIkF1w59lcmhhbGIgZGVzIEJlcmVpY2hzIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJpbnZhbGlkIHVuaXQiCittc2dzdHIgIlVuZ8O8bHRpZ2UgRWluaGVpdCIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgbnVtZXJpc2NoZXIgV2VydCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiAnJXMnOiAlcyIKKworIzogY29uZmlnLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBudW1lcmlzY2hlciBXZXJ0ICclcycgZsO8ciBLb25maWd1cmF0aW9uICclcycgaW4gQmxvYiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogJXMiCittc2dzdHIgIiIKKyJVbmfDvGx0aWdlciBudW1lcmlzY2hlciBXZXJ0ICclcycgZsO8ciBLb25maWd1cmF0aW9uICclcycgaW4gRGF0ZWkgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAiIgorIlVuZ8O8bHRpZ2VyIG51bWVyaXNjaGVyIFdlcnQgJyVzJyBmw7xyIEtvbmZpZ3VyYXRpb24gJyVzJyBpbiBTdGFuZGFyZC1FaW5nYWJlOiAiCisiJXMiCisKKyM6IGNvbmZpZy5jOjEwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICIiCisiVW5nw7xsdGlnZXIgbnVtZXJpc2NoZXIgV2VydCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiAnJXMnIGluIFN1Ym1vZHVsLUJsb2IgJXM6ICIKKyIlcyIKKworIzogY29uZmlnLmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6ICVzIgorbXNnc3RyICIiCisiVW5nw7xsdGlnZXIgbnVtZXJpc2NoZXIgV2VydCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiAnJXMnIGluIEJlZmVobHN6ZWlsZSAlczogIgorIiVzIgorCisjOiBjb25maWcuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgbnVtZXJpc2NoZXIgV2VydCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiAnJXMnIGluICVzOiAlcyIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcndlaXRlcm4gZGVzIE51dHplcnZlcnplaWNobmlzc2VzIGluOiAnJXMnIgorCisjOiBjb25maWcuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBaZWl0c3RlbXBlbCBmw7xyICclcyciCisKKyM6IGNvbmZpZy5jOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJicmV2IGxlbmd0aCBvdXQgb2YgcmFuZ2U6ICVkIgorbXNnc3RyICJMw6RuZ2UgZsO8ciBBYmvDvHJ6dW5nIHZvbiBDb21taXQtSURzIGF1w59lcmhhbGIgZGVzIEJlcmVpY2hzOiAlZCIKKworIzogY29uZmlnLmM6MTIyMiBjb25maWcuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICJ1bmfDvGx0aWdlciB6bGliIEtvbXByaW1pZXJ1bmdzZ3JhZCAlZCIKKworIzogY29uZmlnLmM6MTMyNQorbXNnaWQgImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiY29yZS5jb21tZW50Q2hhciBzb2xsdGUgbnVyIGVpbiBaZWljaGVuIHNlaW4iCisKKyM6IGNvbmZpZy5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBNb2R1cyBmw7xyIE9iamVrdGVyc3RlbGx1bmc6ICVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciAlcy4iCisKKyM6IGNvbmZpZy5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciAlczogJXMiCisKKyM6IGNvbmZpZy5jOjE0NTcKK21zZ2lkICJtdXN0IGJlIG9uZSBvZiBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvciBjdXJyZW50IgorbXNnc3RyICIiCisiTXVzcyBlaW5lciB2b24gZGllc2VuIHNlaW46IG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtLCBjdXJyZW50IgorCisjOiBjb25maWcuYzoxNTE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAidW5nw7xsdGlnZXIgS29tcHJpbWllcnVuZ3NncmFkICglZCkgZsO8ciBQYWtldGllcnVuZyIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAiS29ubnRlIEJsb2ItT2JqZWt0ICclcycgZsO8ciBLb25maWd1cmF0aW9uIG5pY2h0IGxhZGVuLiIKKworIzogY29uZmlnLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGJsb2IiCittc2dzdHIgIlJlZmVyZW56ICclcycgemVpZ3QgYXVmIGtlaW5lbiBCbG9iLiIKKworIzogY29uZmlnLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICJLb25udGUgQmxvYiAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiBuaWNodCBhdWZsw7ZzZW4uIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gUGFyc2VuIHZvbiAlcy4iCisKKyM6IGNvbmZpZy5jOjE3NDUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAiIgorIktvbm50ZSBkaWUgw7xiZXIgZGllIEJlZmVobHN6ZWlsZSBhbmdlZ2ViZW5lIEtvbmZpZ3VyYXRpb24gbmljaHQgcGFyc2VuLiIKKworIzogY29uZmlnLmM6MjA5NgorbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAiIgorIkVzIHRyYXQgZWluIHVuYmVrYW5udGVyIEZlaGxlciBiZWltIExlc2VuIGRlciBLb25maWd1cmF0aW9uc2RhdGVpZW4gYXVmLiIKKworIzogY29uZmlnLmM6MjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciAlczogJyVzJyIKKworIzogY29uZmlnLmM6MjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgIiIKKyJEZXIgV2VydCAnJWQnIHZvbiBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2Ugc29sbHRlIHp3aXNjaGVuIDAgdW5kIDEwMCAiCisibGllZ2VuLiIKKworIzogY29uZmlnLmM6MjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIiIKKyJLb25udGUgV2VydCAnJXMnIGF1cyBkZXIgw7xiZXIgZGllIEJlZmVobHN6ZWlsZSBhbmdlZ2ViZW5lbiBLb25maWd1cmF0aW9uXG4iCisibmljaHQgcGFyc2VuLiIKKworIzogY29uZmlnLmM6MjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgInVuZ8O8bHRpZ2UgS29uZmlndXJhdGlvbnN2YXJpYWJsZSAnJXMnIGluIERhdGVpICclcycgYmVpIFplaWxlICVkIgorCisjOiBjb25maWcuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFNla3Rpb25zbmFtZSAnJXMnIgorCisjOiBjb25maWcuYzoyNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIGhhdCBtZWhyZXJlIFdlcnRlIgorCisjOiBjb25maWcuYzoyNTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJLb25udGUgbmV1ZSBLb25maWd1cmF0aW9uc2RhdGVpICclcycgbmljaHQgc2NocmVpYmVuLiIKKworIzogY29uZmlnLmM6Mjc1MyBjb25maWcuYzozMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJLb25udGUgS29uZmlndXJhdGlvbnNkYXRlaSAnJXMnIG5pY2h0IHNwZXJyZW4uIgorCisjOiBjb25maWcuYzoyNzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgJXMiCittc2dzdHIgIsOWZmZuZSAlcyIKKworIzogY29uZmlnLmM6Mjc5OSBidWlsdGluL2NvbmZpZy5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdHRlcm46ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBNdXN0ZXI6ICVzIgorCisjOiBjb25maWcuYzoyODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgS29uZmlndXJhdGlvbnNkYXRlaSAlcyIKKworIzogY29uZmlnLmM6MjgzNyBjb25maWcuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiZnN0YXQgYXVmICVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBjb25maWcuYzoyODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgIm1tYXAgZsO8ciAnJXMnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBjb25maWcuYzoyODU3IGNvbmZpZy5jOjMwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICJjaG1vZCBhdWYgJXMgZmVobGdlc2NobGFnZW4iCisKKyM6IGNvbmZpZy5jOjI5NDIgY29uZmlnLmM6MzE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIktvbm50ZSBLb25maWd1cmF0aW9uc2RhdGVpICVzIG5pY2h0IHNjaHJlaWJlbi4iCisKKyM6IGNvbmZpZy5jOjI5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1ICclcycgc2V0emVuLiIKKworIzogY29uZmlnLmM6Mjk3OCBidWlsdGluL3JlbW90ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYXVmaGViZW4uIgorCisjOiBjb25maWcuYzozMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgU2VrdGlvbnNuYW1lOiAlcyIKKworIzogY29uZmlnLmM6MzIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICJGZWhsZW5kZXIgV2VydCBmw7xyICclcyciCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgIkRpZSBHZWdlbnNlaXRlIGhhdCBuYWNoIGRlbSBlcnN0ZW4gS29udGFrdCBhYmdlYnJvY2hlbi4iCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisiS29ubnRlIG5pY2h0IHZvbSBSZW1vdGUtUmVwb3NpdG9yeSBsZXNlbi5cbiIKKyJcbiIKKyJCaXR0ZSBzdGVsbGVuIFNpZSBzaWNoZXIsIGRhc3MgZGllIGtvcnJla3RlbiBadWdyaWZmc2JlcmVjaHRpZ3VuZ2VuICIKKyJiZXN0ZWhlblxuIgorInVuZCBkYXMgUmVwb3NpdG9yeSBleGlzdGllcnQuIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICJEZXIgU2VydmVyIHVudGVyc3TDvHR6dCBrZWluICclcycuIgorCisjOiBjb25uZWN0LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgZmVhdHVyZSAnJXMnIgorbXNnc3RyICJEZXIgU2VydmVyIHVudGVyc3TDvHR6dCBkYXMgRmVhdHVyZSAnJXMnIG5pY2h0LiIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiRXJ3YXJ0ZXRlIEZsdXNoIG5hY2ggRsOkaGlna2VpdGVuLiIKKworIzogY29ubmVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBjYXBhYmlsaXRpZXMgYWZ0ZXIgZmlyc3QgbGluZSAnJXMnIgorbXNnc3RyICJJZ25vcmllcmUgRsOkaGlna2VpdGVuIG5hY2ggZGVyIGVyc3RlbiBaZWlsZSAnJXMnLiIKKworIzogY29ubmVjdC5jOjI1MgorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIKK21zZ3N0ciAiUHJvdG9rb2xsZmVobGVyOiB1bmVyd2FydGV0ZXMgY2FwYWJpbGl0aWVzXnt9IgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiUHJvdG9rb2xsZmVobGVyOiBzaGFsbG93IFNIQS0xIGVyd2FydGV0LCAnJXMnIGJla29tbWVuIgorCisjOiBjb25uZWN0LmM6Mjc1Cittc2dpZCAicmVwb3NpdG9yeSBvbiB0aGUgb3RoZXIgZW5kIGNhbm5vdCBiZSBzaGFsbG93IgorbXNnc3RyICIiCisiUmVwb3NpdG9yeSBhdWYgZGVyIEdlZ2Vuc2VpdGUga2FubiBrZWluZSB1bnZvbGxzdMOkbmRpZ2UgSGlzdG9yaWUgKHNoYWxsb3cpICIKKyJlbnRoYWx0ZW4iCisKKyM6IGNvbm5lY3QuYzozMTMKK21zZ2lkICJpbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgUGFrZXQuIgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgIlByb3Rva29sbGZlaGxlcjogdW5lcndhcnRldGVzICclcyciCisKKyM6IGNvbm5lY3QuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBscy1yZWZzIHJlc3BvbnNlOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBscy1yZWZzIEFudHdvcnQ6ICVzIgorCisjOiBjb25uZWN0LmM6NDQ1Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgcmVmIGxpc3RpbmciCittc2dzdHIgIkVyd2FydGV0ZSBGbHVzaCBuYWNoIEF1Zmxpc3R1bmcgZGVyIFJlZmVyZW56ZW4uIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiUHJvdG9rb2xsICclcycgd2lyZCBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICJLYW5uIFNPX0tFRVBBTElWRSBiZWkgU29ja2V0IG5pY2h0IHNldHplbi4iCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgIlN1Y2hlIG5hY2ggJXMgLi4uIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICJGZWhsZXIgYmVpIFN1Y2hlIG5hY2ggJXMgKFBvcnQgJXMpICglcykuIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorIkZlcnRpZy5cbiIKKyJWZXJiaW5kZSBuYWNoICVzIChQb3J0ICVzKSAuLi4gIgorCisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgorIiVzIgorbXNnc3RyICIiCisiS29ubnRlIG5pY2h0IG5hY2ggJXMgdmVyYmluZGVuOlxuIgorIiVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorIzogY29ubmVjdC5jOjY3MSBjb25uZWN0LmM6NzQ4Cittc2dpZCAiZG9uZS4iCittc2dzdHIgIkZlcnRpZy4iCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAiRmVobGVyIGJlaSBkZXIgU3VjaGUgbmFjaCAlcyAoJXMpIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgUG9ydCAlcyIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiTWVya3fDvHJkaWdlbiBIb3N0bmFtZW4gJyVzJyBibG9ja2llcnQuIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgIk1lcmt3w7xyZGlnZW4gUG9ydCAnJXMnIGJsb2NraWVydC4iCisKKyM6IGNvbm5lY3QuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXJ0IHByb3h5ICVzIgorbXNnc3RyICJLYW5uIFByb3h5ICVzIG5pY2h0IHN0YXJ0ZW4uIgorCisjOiBjb25uZWN0LmM6OTI4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgIiIKKyJLZWluIFBmYWQgYW5nZWdlYmVuOyBzaWVoZSAnZ2l0IGhlbHAgcHVsbCcgZsO8ciBlaW5lIGfDvGx0aWdlIFVSTC1TeW50YXguIgorCisjOiBjb25uZWN0LmM6MTEyMworbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTQiCittc2dzdHIgIlNTSC1WYXJpYW50ZSAnc2ltcGxlJyB1bnRlcnN0w7x0enQga2VpbiAtNC4iCisKKyM6IGNvbm5lY3QuYzoxMTM1Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIKK21zZ3N0ciAiU1NILVZhcmlhbnRlICdzaW1wbGUnIHVudGVyc3TDvHR6dCBrZWluIC02LiIKKworIzogY29ubmVjdC5jOjExNTIKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcG9ydCIKK21zZ3N0ciAiU1NILVZhcmlhbnRlICdzaW1wbGUnIHVudGVyc3TDvHR6dCBuaWNodCBkYXMgU2V0emVuIGVpbmVzIFBvcnRzLiIKKworIzogY29ubmVjdC5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwYXRobmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgIk1lcmt3w7xyZGlnZW4gUGZhZG5hbWVuICclcycgYmxvY2tpZXJ0LiIKKworIzogY29ubmVjdC5jOjEzMTEKK21zZ2lkICJ1bmFibGUgdG8gZm9yayIKK21zZ3N0ciAiS2FubiBQcm96ZXNzIG5pY2h0IHN0YXJ0ZW4uIgorCisjOiBjb25uZWN0ZWQuYzo4OSBidWlsdGluL2ZzY2suYzoyMDggYnVpbHRpbi9wcnVuZS5jOjQzCittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICJQcsO8ZmUgS29ubmVrdGl2aXTDpHQiCisKKyM6IGNvbm5lY3RlZC5jOjEwMQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIktvbm50ZSAnZ2l0IHJldi1saXN0JyBuaWNodCBhdXNmw7xocmVuIgorCisjOiBjb25uZWN0ZWQuYzoxMjEKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBuYWNoIHJldi1saXN0IgorCisjOiBjb25uZWN0ZWQuYzoxMjgKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NobGllw59lbiB2b24gcmV2LWxpc3QncyBTdGFuZGFyZC1FaW5nYWJlIgorCisjOiBjb252ZXJ0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgY3JsZl9hY3Rpb24gJWQiCittc2dzdHIgIlVuZXJsYXVidGUgY3JsZl9hY3Rpb24gJWQiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiQ1JMRiB3w7xyZGUgaW4gJXMgZHVyY2ggTEYgZXJzZXR6dCB3ZXJkZW4uIgorCisjOiBjb252ZXJ0LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkNSTEYgd2lyZCBpbiAlcyBkdXJjaCBMRiBlcnNldHp0LlxuIgorIkRpZSBEYXRlaSB3aXJkIGlocmUgdXJzcHLDvG5nbGljaGVuIFplaWxlbmVuZGVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyAiCisiYmVoYWx0ZW4uIgorCisjOiBjb252ZXJ0LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIkxGIHfDvHJkZSBpbiAlcyBkdXJjaCBDUkxGIGVyc2V0enQgd2VyZGVuLiIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJMRiB3aXJkIGluICVzIGR1cmNoIENSTEYgZXJzZXR6dC5cbiIKKyJEaWUgRGF0ZWkgd2lyZCBpaHJlIHVyc3Byw7xuZ2xpY2hlbiBaZWlsZW5lbmRlbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgIgorImJlaGFsdGVuLiIKKworIzogY29udmVydC5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcHJvaGliaXRlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIkJPTSBpc3QgaW4gJyVzJyB1bnp1bMOkc3NpZywgd2VubiBhbHMgJXMgY29kaWVydC4iCisKKyM6IGNvbnZlcnQuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICclcycgY29udGFpbnMgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSUuKnMgYXMgIgorIndvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgIiIKKyJEaWUgRGF0ZWkgJyVzJyBlbnRow6RsdCBlaW4gQnl0ZS1PcmRlci1NYXJrIChCT00pLiBCaXR0ZSBiZW51dHplbiBTaWVcbiIKKyJVVEYtJS4qcyBhbHMgQ29kaWVydW5nIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcy4iCisKKyM6IGNvbnZlcnQuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHJlcXVpcmVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiQk9NIGlzdCBlcmZvcmRlcmxpY2ggaW4gJyVzJywgd2VubiBhbHMgJXMgY29kaWVydC4iCisKKyM6IGNvbnZlcnQuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICclcycgaXMgbWlzc2luZyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXNCRSBvciBVVEYtIgorIiVzTEUgKGRlcGVuZGluZyBvbiB0aGUgYnl0ZSBvcmRlcikgYXMgd29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIkRlciBEYXRlaSAnJXMnIGZlaGx0IGVpbiBCeXRlLU9yZGVyLU1hcmsgKEJPTSkuIEJpdHRlIGJlbnV0emVuIFNpZSBVVEYtJXNCRVxuIgorIm9kZXIgVVRGLSVzTEUgKGFiaMOkbmdpZyB2b24gZGVyIEJ5dGUtUmVpaGVuZm9sZ2UpIGFscyBDb2RpZXJ1bmcgaW1cbiIKKyJBcmJlaXRzdmVyemVpY2huaXMuIgorCisjOiBjb252ZXJ0LmM6NDE5IGNvbnZlcnQuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgIkZlaGxlciBiZWltIENvZGllcmVuIHZvbiAnJXMnIHZvbiAlcyBuYWNoICVzLiIKKworIzogY29udmVydC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICJEaWUgQ29kaWVydW5nICclcycgdm9uICVzIG5hY2ggJXMgdW5kIHp1csO8Y2sgaXN0IG5pY2h0IGRhc3NlbGJlLiIKKworIzogY29udmVydC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayB0byBydW4gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgIkthbm4gZXh0ZXJuZW4gRmlsdGVyICclcycgbmljaHQgc3RhcnRlbi4iCisKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJLYW5uIEVpbmdhYmVuIG5pY2h0IGFuIGV4dGVybmVuIEZpbHRlciAnJXMnIMO8YmVyZ2ViZW4uIgorCisjOiBjb252ZXJ0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAiRXh0ZXJuZXIgRmlsdGVyICclcycgZmVobGdlc2NobGFnZW4gJWQiCisKKyM6IGNvbnZlcnQuYzo3MzAgY29udmVydC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJMZXNlbiB2b24gZXh0ZXJuZW0gRmlsdGVyICclcycgZmVobGdlc2NobGFnZW4uIgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJFeHRlcm5lciBGaWx0ZXIgJyVzJyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGNvbnZlcnQuYzo4MzkKK21zZ2lkICJ1bmV4cGVjdGVkIGZpbHRlciB0eXBlIgorbXNnc3RyICJVbmVyd2FydGV0ZSBGaWx0ZXJhcnQuIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgIlBmYWRuYW1lIHp1IGxhbmcgZsO8ciBleHRlcm5lbiBGaWx0ZXIuIgorCisjOiBjb252ZXJ0LmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgorbXNnc3RyICIiCisiRXh0ZXJuZXIgRmlsdGVyICclcycgbmljaHQgbWVociB2ZXJmw7xnYmFyLiBOaWNodCBhbGxlIFBmYWRlIHd1cmRlbiBnZWZpbHRlcnQuIgorCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgInRydWUvZmFsc2Ugc2luZCBrZWluZSBnw7xsdGlnZW4gQ29kaWVydW5nZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzLiIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJXM6IGNsZWFuLUZpbHRlciAnJXMnIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogY29udmVydC5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIlczogc211ZGdlLUZpbHRlciAnJXMnIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgImluIGRlciBadWt1bmZ0IgorCisjOiBkYXRlLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAidm9yICU8UFJJdU1BWD4gU2VrdW5kZSIKK21zZ3N0clsxXSAidm9yICU8UFJJdU1BWD4gU2VrdW5kZW4iCisKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJTxQUkl1TUFYPiBNaW51dGUiCittc2dzdHJbMV0gInZvciAlPFBSSXVNQVg+IE1pbnV0ZW4iCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gInZvciAlPFBSSXVNQVg+IFN0dW5kZSIKK21zZ3N0clsxXSAidm9yICU8UFJJdU1BWD4gU3R1bmRlbiIKKworIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gInZvciAlPFBSSXVNQVg+IFRhZyIKK21zZ3N0clsxXSAidm9yICU8UFJJdU1BWD4gVGFnZW4iCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gInZvciAlPFBSSXVNQVg+IFdvY2hlIgorbXNnc3RyWzFdICJ2b3IgJTxQUkl1TUFYPiBXb2NoZW4iCisKKyM6IGRhdGUuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAidm9yICU8UFJJdU1BWD4gTW9uYXQiCittc2dzdHJbMV0gInZvciAlPFBSSXVNQVg+IE1vbmF0ZW4iCisKKyM6IGRhdGUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIgorbXNnc3RyWzBdICJ2b3IgJTxQUkl1TUFYPiBKYWhyIgorbXNnc3RyWzFdICJ2b3IgJTxQUkl1TUFYPiBKYWhyZW4iCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJXMsIHVuZCAlPFBSSXVNQVg+IE1vbmF0IgorbXNnc3RyWzFdICIlcywgdW5kICU8UFJJdU1BWD4gTW9uYXRlbiIKKworIzogZGF0ZS5jOjE5NyBkYXRlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJTxQUkl1TUFYPiBKYWhyIgorbXNnc3RyWzFdICJ2b3IgJTxQUkl1TUFYPiBKYWhyZW4iCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyNzIKK21zZ2lkICJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiCittc2dzdHIgIkVyemV1Z2UgRGVsdGEtSXNsYW5kIE1hcmtpZXJ1bmdlbiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIFRyZWUtT2JqZWt0ICVzLiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gTGFkZW4gZGVzIHJlZ3Vsw6RyZW4gQXVzZHJ1Y2tzIGRlcyBEZWx0YS1Jc2xhbmQgZsO8ciAnJXMnOiAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgorbXNnc3RyICIiCisiUmVndWzDpHJlciBBdXNkcnVjayBkZXMgRGVsdGEtSXNsYW5kIGF1cyBLb25maWd1cmF0aW9uIGhhdCB6dVxuIgorInZpZWxlIENhcHR1cmUtR3J1cHBlbiAobWF4aW1hbCAlZCkuIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIgorbXNnc3RyICIlZCBEZWx0YS1Jc2xhbmRzIG1hcmtpZXJ0LCBmZXJ0aWcuXG4iCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlciBSZWloZW5mb2xnZWRhdGVpICclcycuIgorCisjOiBkaWZmY29yZS1yZW5hbWUuYzo1NDMKK21zZ2lkICJQZXJmb3JtaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiRsO8aHJlIEVya2VubnVuZyBmw7xyIHVuZ2VuYXVlIFVtYmVuZW5udW5nIGF1cyIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPE9wdGlvbmVuPl0gPFBmYWQ+IDxQZmFkPiIKKworIzogZGlmZi1uby1pbmRleC5jOjI2MworbXNnaWQgIiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgIgorInRyZWUiCittc2dzdHIgIiIKKyJLZWluIEdpdC1SZXBvc2l0b3J5LiBOdXR6ZW4gU2llIC0tbm8taW5kZXgsIHVtIHp3ZWkgUGZhZGUgYXXDn2VyaGFsYiBkZXMgIgorIkFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyB6dSB2ZXJnbGVpY2hlbi4iCisKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIiCisiICBGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIGFiZ2VzY2huaXR0ZW5lbiBcImRpcnN0YXRcIiBQcm96ZW50c2F0emVzICclcydcbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIFVuYmVrYW5udGVyIFwiZGlyc3RhdFwiIFBhcmFtZXRlciAnJXMnXG4iCisKKyM6IGRpZmYuYzoyOTYKK21zZ2lkICIiCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAiCisiJ2RpbW1lZC16ZWJyYScsICdwbGFpbiciCittc2dzdHIgIiIKKyJcImNvbG9yIG1vdmVkXCItRWluc3RlbGx1bmcgbXVzcyBlaW5lcyB2b24gZGllc2VuIHNlaW46ICdubycsICdkZWZhdWx0JywgIgorIidibG9ja3MnLCAnemVicmEnLCAnZGltbWVkX3plYnJhJywgJ3BsYWluJyIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisiVW5iZWthbm50ZXIgY29sb3ItbW92ZWQtd3MgTW9kdXMgJyVzJywgbcO2Z2xpY2hlIFdlcnRlIHNpbmQgJ2lnbm9yZS1zcGFjZS0iCisiY2hhbmdlJywgJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pZGVudGF0aW9uLWNoYW5nZSciCisKKyM6IGRpZmYuYzozMzIKK21zZ2lkICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKK21zZ3N0ciAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2Uga2FubiBuaWNodCBtaXQgYW5kZXJlblxuIgorIldoaXRlc3BhY2UtTW9kaSBrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIlVuYmVrYW5udGVyIFdlcnQgaW4gS29uZmlndXJhdGlvbnN2YXJpYWJsZSAnZGlmZi5kaXJzdGF0JzogJyVzJyIKKworIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkZlaGxlciBpbiAnZGlmZi5kaXJzdGF0JyBLb25maWd1cmF0aW9uc3ZhcmlhYmxlIGdlZnVuZGVuOlxuIgorIiVzIgorCisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICJleHRlcm5lcyBEaWZmLVByb2dyYW1tIHVuZXJ3YXJ0ZXQgYmVlbmRldCwgYW5nZWhhbHRlbiBiZWkgJXMiCisKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKyItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayB1bmQgLXMgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cyIKKworIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLUcsIC1TIHVuZCAtLWZpbmQtb2JqZWN0IHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IGVyZm9yZGVydCBnZW5hdSBlaW5lIFBmYWRzcGV6aWZpa2F0aW9uIgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIC0tc3RhdCBXZXJ0OiAlcyIKKworIzogZGlmZi5jOjQ2ODEgZGlmZi5jOjQ2ODYgZGlmZi5jOjQ2OTEgZGlmZi5jOjQ2OTYgZGlmZi5jOjUyMDkKKyM6IHBhcnNlLW9wdGlvbnMuYzoxOTkgcGFyc2Utb3B0aW9ucy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIlcyBlcndhcnRldCBlaW5lbiBudW1lcmlzY2hlbiBXZXJ0LiIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIFBhcnNlbiBkZXMgLS1kaXJzdGF0Ly1YIE9wdGlvbnNwYXJhbWV0ZXJzOlxuIgorIiVzIgorCisjOiBkaWZmLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNoYW5nZSBjbGFzcyAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCittc2dzdHIgIlVuYmVrYW5udGUgw4RuZGVydW5nc2tsYXNzZSAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCisKKyM6IGRpZmYuYzo0ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgIlVuYmVrYW5udGVyIFdlcnQgbmFjaCB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKKworIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAia29ubnRlICclcycgbmljaHQgYXVmbMO2c2VuIgorCisjOiBkaWZmLmM6NDg4NiBkaWZmLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIDxuPi88bT4gZm9ybSIKK21zZ3N0ciAiJXMgZXJ3YXJ0ZXQgZGllIEZvcm0gPG4+LzxtPiIKKworIzogZGlmZi5jOjQ5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIGNoYXJhY3RlciwgZ290ICclcyciCittc2dzdHIgIiVzIGVyd2FydGV0IGVpbiBaZWljaGVuLCAnJXMnIGJla29tbWVuIgorCisjOiBkaWZmLmM6NDkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIC0tY29sb3ItbW92ZWQgQXJndW1lbnQ6ICVzIgorCisjOiBkaWZmLmM6NDk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICJVbmfDvGx0aWdlciBNb2R1cyAnJXMnIGluIC0tY29sb3ItbW92ZWQtd3MiCisKKyM6IGRpZmYuYzo0OTg0Cittc2dpZCAiIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCittc2dzdHIgIiIKKyJPcHRpb24gZGlmZi1hbGdvcml0aG0gYWt6ZXB0aWVydDogXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCAiCisiXCJoaXN0b2dyYW1cIiIKKworIzogZGlmZi5jOjUwMjAgZGlmZi5jOjUwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCB0byAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgQXJndW1lbnQgZsO8ciAlcyIKKworIzogZGlmZi5jOjUxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIFBhcnNlbiBkZXMgLS1zdWJtb2R1bGUgT3B0aW9uc3BhcmFtZXRlcnM6ICclcyciCisKKyM6IGRpZmYuYzo1MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIC0td29yZC1kaWZmIEFyZ3VtZW50OiAlcyIKKworIzogZGlmZi5jOjUyNTcKK21zZ2lkICJEaWZmIG91dHB1dCBmb3JtYXQgb3B0aW9ucyIKK21zZ3N0ciAiRGlmZi1PcHRpb25lbiB6dSBBdXNnYWJlZm9ybWF0ZW4iCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkVyemV1Z2UgUGF0Y2giCisKKyM6IGRpZmYuYzo1MjYyIGJ1aWx0aW4vbG9nLmM6MTczCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgIkF1c2dhYmUgZGVyIFVudGVyc2NoaWVkZSB1bnRlcmRyw7xja2VuIgorCisjOiBkaWZmLmM6NTI2NyBkaWZmLmM6NTM4MSBkaWZmLmM6NTM4OAorbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBkaWZmLmM6NTI2OCBkaWZmLmM6NTI3MQorbXNnaWQgImdlbmVyYXRlIGRpZmZzIHdpdGggPG4+IGxpbmVzIGNvbnRleHQiCittc2dzdHIgIkVyc3RlbGxlIFVudGVyc2NoaWVkZSBtaXQgPG4+IFplaWxlbiBkZXMgS29udGV4dGVzIgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgIkVyc3RlbGxlIFVudGVyc2NoaWVkZSBpbSBSb2hmb3JtYXQiCisKKyM6IGRpZmYuYzo1Mjc2Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAiU3lub255bSBmw7xyICctcCAtLXJhdyciCisKKyM6IGRpZmYuYzo1MjgwCittc2dpZCAic3lub255bSBmb3IgJy1wIC0tc3RhdCciCittc2dzdHIgIlN5bm9ueW0gZsO8ciAnLXAgLS1zdGF0JyIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAibWFzY2hpbmVubGVzYmFyZSBBdXNnYWJlIHZvbiAtLXN0YXQiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgIm51ciBkaWUgbGV0enRlIFplaWxlIHZvbiAtLXN0YXQgYXVzZ2ViZW4iCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICI8UGFyYW1ldGVyMSxQYXJhbWV0ZXIyPi4uLiIKKworIzogZGlmZi5jOjUyOTAKK21zZ2lkICIiCisib3V0cHV0IHRoZSBkaXN0cmlidXRpb24gb2YgcmVsYXRpdmUgYW1vdW50IG9mIGNoYW5nZXMgZm9yIGVhY2ggc3ViLWRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkdlYmUgZGllIFZlcnRlaWx1bmcgZGVzIHJlbGF0aXZlbiBVbWZhbmdzIGRlciDDhG5kZXJ1bmdlbiBmw7xyIGplZGVzICIKKyJVbnRlcnZlcnplaWNobmlzIGF1cyIKKworIzogZGlmZi5jOjUyOTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKK21zZ3N0ciAiU3lub255bSBmw7xyIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICJTeW5vbnltIGbDvHIgLS1kaXJzdGF0PWZpbGVzLFBhcmFtZXRlcjEsUGFyYW1ldGVyMi4uLiIKKworIzogZGlmZi5jOjUzMDIKK21zZ2lkICJ3YXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIGNvbmZsaWN0IG1hcmtlcnMgb3Igd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKyJXYXJuZW4sIHdlbm4gw4RuZGVydW5nZW4gS29uZmxpa3RtYXJrZXIgb2RlciBXaGl0ZXNwYWNlLUZlaGxlciBlaW5icmluZ2VuIgorCisjOiBkaWZmLmM6NTMwNQorbXNnaWQgImNvbmRlbnNlZCBzdW1tYXJ5IHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMiCittc2dzdHIgIiIKKyJHZWvDvHJ6dGUgWnVzYW1tZW5mYXNzdW5nLCB3aWUgei5CLiBFcnN0ZWxsdW5nZW4sIFVtYmVuZW5udW5nZW4gdW5kICIKKyLDhG5kZXJ1bmdlbiBkZXIgRGF0ZWktUmVjaHRlIgorCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJudXIgRGF0ZWluYW1lbiBkZXIgZ2XDpG5kZXJ0ZW4gRGF0ZWllbiBhbnplaWdlbiIKKworIzogZGlmZi5jOjUzMTEKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJudXIgRGF0ZWluYW1lbiB1bmQgU3RhdHVzIGRlciBnZcOkbmRlcnRlbiBEYXRlaWVuIGFuemVpZ2VuIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICI8QnJlaXRlPlssPE5hbWVucy1CcmVpdGU+Wyw8QW56YWhsPl1dIgorCisjOiBkaWZmLmM6NTMxNAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IgorbXNnc3RyICJHZW5lcmllcmUgWnVzYW1tZW5mYXNzdW5nIGRlciBVbnRlcnNjaGllZGUiCisKKyM6IGRpZmYuYzo1MzE2IGRpZmYuYzo1MzE5IGRpZmYuYzo1MzIyCittc2dpZCAiPHdpZHRoPiIKK21zZ3N0ciAiPEJyZWl0ZT4iCisKKyM6IGRpZmYuYzo1MzE3Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICJFcnpldWdlIFp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIG1pdCBnZWdlYmVuZXIgQnJlaXRlIgorCisjOiBkaWZmLmM6NTMyMAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBuYW1lIHdpZHRoIgorbXNnc3RyICJFcnpldWdlIFp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIG1pdCBnZWdlYmVuZXIgTmFtZW5zLUJyZWl0ZSIKKworIzogZGlmZi5jOjUzMjMKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgIkVyemV1Z2UgWnVzYW1tZW5mYXNzdW5nIGRlciBVbnRlcnNjaGllZGUgbWl0IGdlZ2ViZW5lciBHcmFwaC1CcmVpdGUiCisKKyM6IGRpZmYuYzo1MzI1Cittc2dpZCAiPGNvdW50PiIKK21zZ3N0ciAiPEFuemFobD4iCisKKyM6IGRpZmYuYzo1MzI2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICJFcnpldWdlIFp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIG1pdCBiZWdyZW56dGVuIFplaWxlbiIKKworIzogZGlmZi5jOjUzMjkKK21zZ2lkICJnZW5lcmF0ZSBjb21wYWN0IHN1bW1hcnkgaW4gZGlmZnN0YXQiCittc2dzdHIgIkVyemV1Z2Uga29tcGFrdGUgWnVzYW1tZW5zdGVsbHVuZyBpbiBadXNhbW1lbmZhc3N1bmcgZGVyIFVudGVyc2NoaWVkZSIKKworIzogZGlmZi5jOjUzMzIKK21zZ2lkICJvdXRwdXQgYSBiaW5hcnkgZGlmZiB0aGF0IGNhbiBiZSBhcHBsaWVkIgorbXNnc3RyICJHZWJlIGVpbmUgYmluw6RyZSBEaWZmZXJlbnogYXVzLCBkYXNzIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4iCisKKyM6IGRpZmYuYzo1MzM1Cittc2dpZCAic2hvdyBmdWxsIHByZS0gYW5kIHBvc3QtaW1hZ2Ugb2JqZWN0IG5hbWVzIG9uIHRoZSBcImluZGV4XCIgbGluZXMiCittc2dzdHIgIlplaWdlIHZvbGxzdMOkbmRpZ2UgT2JqZWt0LU5hbWVuIGluIGRlbiBcImluZGV4XCItWmVpbGVuIgorCisjOiBkaWZmLmM6NTMzNworbXNnaWQgInNob3cgY29sb3JlZCBkaWZmIgorbXNnc3RyICJaZWlnZSBmYXJiaWdlIFVudGVyc2NoaWVkZSIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIjxBcnQ+IgorCisjOiBkaWZmLmM6NTMzOQorbXNnaWQgIiIKKyJoaWdobGlnaHQgd2hpdGVzcGFjZSBlcnJvcnMgaW4gdGhlICdjb250ZXh0JywgJ29sZCcgb3IgJ25ldycgbGluZXMgaW4gdGhlICIKKyJkaWZmIgorbXNnc3RyICIiCisiSGViZSBXaGl0ZXNwYWNlLUZlaGxlciBpbiBkZW4gWmVpbGVuICdjb250ZXh0JywgJ29sZCcgb2RlciAnbmV3JyBiZWkgZGVuICIKKyJVbnRlcnNjaGllZGVuIGhlcnZvciIKKworIzogZGlmZi5jOjUzNDIKK21zZ2lkICIiCisiZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzIGluIC0tcmF3IG9yICIKKyItLW51bXN0YXQiCittc2dzdHIgIiIKKyJWZXJzY2hsZWllcmUgbmljaHQgZGllIFBmYWRuYW1lbiB1bmQgbnV0emUgTlVMLVplaWNoZW4gYWxzIFNjaGx1c3N6ZWljaGVuIGluICIKKyJBdXNnYWJlZmVsZGVybiBiZWkgLS1yYXcgb2RlciAtLW51bXN0YXQiCisKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIjxQcsOkZml4PiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICJaZWlnZSBkZW4gZ2VnZWJlbmVuIFF1ZWxsLVByw6RmaXggc3RhdHQgXCJhL1wiIgorCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAiWmVpZ2UgZGVuIGdlZ2ViZW5lbiBaaWVsLVByw6RmaXggc3RhdHQgXCJiL1wiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgIlN0ZWxsZSBlaW5lbiB6dXPDpHR6bGljaGVuIFByw6RmaXggYmVpIGplZGVyIEF1c2dhYmV6ZWlsZSB2b3JhbiIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAiWmVpZ2Uga2VpbmUgUXVlbGwtIG9kZXIgWmllbC1QcsOkZml4ZSBhbiIKKworIzogZGlmZi5jOjUzNTgKK21zZ2lkICJzaG93IGNvbnRleHQgYmV0d2VlbiBkaWZmIGh1bmtzIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbmVzIgorbXNnc3RyICIiCisiWmVpZ2UgS29udGV4dCB6d2lzY2hlbiBVbnRlcnNjaGllZC1CbMO2Y2tlbiBiaXMgenVyIGFuZ2VnZWJlbmVuIEFuemFobCB2b24gIgorIlplaWxlbi4iCisKKyM6IGRpZmYuYzo1MzYyIGRpZmYuYzo1MzY3IGRpZmYuYzo1MzcyCittc2dpZCAiPGNoYXI+IgorbXNnc3RyICI8WmVpY2hlbj4iCisKKyM6IGRpZmYuYzo1MzYzCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW5zdGVhZCBvZiAnKyciCittc2dzdHIgIkRhcyBaZWljaGVuIGZlc3RsZWdlbiwgZGFzIGVpbmUgbmV1ZSBaZWlsZSBrZW5uemVpY2huZXQgKHN0YXR0ICcrJykiCisKKyM6IGRpZmYuYzo1MzY4Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICJEYXMgWmVpY2hlbiBmZXN0bGVnZW4sIGRhcyBlaW5lIGFsdGUgWmVpbGUga2VubnplaWNobmV0IChzdGF0dCAnLScpIgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgIkRhcyBaZWljaGVuIGZlc3RsZWdlbiwgZGFzIGRlbiBLb250ZXh0IGtlbm56ZWljaG5ldCAoc3RhdHQgJyAnKSIKKworIzogZGlmZi5jOjUzNzYKK21zZ2lkICJEaWZmIHJlbmFtZSBvcHRpb25zIgorbXNnc3RyICJEaWZmLU9wdGlvbmVuIHp1ciBVbWJlbmVubnVuZyIKKworIzogZGlmZi5jOjUzNzcKK21zZ2lkICI8bj5bLzxtPl0iCittc2dzdHIgIjxuPlsvPG0+XSIKKworIzogZGlmZi5jOjUzNzgKK21zZ2lkICJicmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZSIKK21zZ3N0ciAiIgorIlRlaWxlIGtvbXBsZXR0ZSBSZXdyaXRlLcOEbmRlcnVuZ2VuIGluIMOEbmRlcnVuZ2VuIG1pdCBcImzDtnNjaGVuXCIgdW5kICIKKyJcImVyc3RlbGxlblwiIgorCisjOiBkaWZmLmM6NTM4MgorbXNnaWQgImRldGVjdCByZW5hbWVzIgorbXNnc3RyICJVbWJlbmVubnVuZ2VuIGVya2VubmVuIgorCisjOiBkaWZmLmM6NTM4NgorbXNnaWQgIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIgorbXNnc3RyICJQcmVpbWFnZSBmw7xyIEzDtnNjaHVuZ2VuIHdlZ2xhc3Nlbi4iCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAiS29waWVuIGVya2VubmVuIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAiTnV0emUgdW5nZcOkbmRlcnRlIERhdGVpZW4gYWxzIFF1ZWxsZSB6dW0gRmluZGVuIHZvbiBLb3BpZW4iCisKKyM6IGRpZmYuYzo1Mzk1Cittc2dpZCAiZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJFcmtlbm51bmcgdm9uIFVtYmVuZW5udW5nZW4gZGVha3RpdmllcmVuIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICJOdXR6ZSBsZWVyZSBCbG9icyBhbHMgUXVlbGxlIHZvbiBVbWJlbm51bmdlbiIKKworIzogZGlmZi5jOjU0MDAKK21zZ2lkICJjb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcyIKK21zZ3N0ciAiRm9ydGbDvGhyZW4gZGVyIEF1Zmxpc3R1bmcgZGVyIEhpc3RvcmllIGVpbmVyIERhdGVpIG5hY2ggVW1iZW5udW5nIgorCisjOiBkaWZmLmM6NTQwMworbXNnaWQgIiIKKyJwcmV2ZW50IHJlbmFtZS9jb3B5IGRldGVjdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyAiCisiZ2l2ZW4gbGltaXQiCittc2dzdHIgIiIKKyJWZXJoaW5kZXJlIGRpZSBFcmtlbm51bmcgdm9uIFVtYmVubnVuZ2VuIHVuZCBLb3BpZW4sIHdlbm4gZGllIEFuemFobCBkZXIgIgorIlppZWxlIGbDvHIgVW1iZW5udW5nZW4gdW5kIEtvcGllbiBkYXMgZ2VnZWJlbmUgTGltaXQgw7xiZXJzY2hyZWl0ZXQiCisKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiRGlmZiBBbGdvcml0aG11cy1PcHRpb25lbiIKKworIzogZGlmZi5jOjU0MDcKK21zZ2lkICJwcm9kdWNlIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBkaWZmIgorbXNnc3RyICJFcnpldWdlIGRpZSBrbGVpbnN0bcO2Z2xpY2hlbiDDhG5kZXJ1bmdlbiIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiV2hpdGVzcGFjZS3DhG5kZXJ1bmdlbiBiZWltIFZlcmdsZWljaCB2b24gWmVpbGVuIGlnbm9yaWVyZW4iCisKKyM6IGRpZmYuYzo1NDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gYW1vdW50IG9mIHdoaXRlc3BhY2UiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGJlaSBkZXIgQW56YWhsIHZvbiBXaGl0ZXNwYWNlIGlnbm9yaWVyZW4iCisKKyM6IGRpZmYuYzo1NDE2Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wiCittc2dzdHIgIldoaXRlc3BhY2Utw4RuZGVydW5nZW4gYW0gWmVpbGVuZW5kZSBpZ25vcmllcmVuIgorCisjOiBkaWZmLmM6NTQxOQorbXNnaWQgImlnbm9yZSBjYXJyaWVyLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUiCittc2dzdHIgIklnbm9yaWVyZSBkZW4gWmVpbGVudW1icnVjaCBhbSBFbmRlIGRlciBaZWlsZSIKKworIzogZGlmZi5jOjU0MjIKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB3aG9zZSBsaW5lcyBhcmUgYWxsIGJsYW5rIgorbXNnc3RyICJJZ25vcmllcmUgw4RuZGVydW5nZW4gaW4gbGVlcmVuIFplaWxlbiIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiIgorIkhldXJpc3RpaywgdW0gR3JlbnplbiBkZXIgw4RuZGVydW5nc2Jsw7Zja2UgZsO8ciBiZXNzZXJlIExlc2JhcmtlaXQgenUgIgorInZlcnNjaGllYmVuIgorCisjOiBkaWZmLmM6NTQyOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiRXJ6ZXVnZSDDhG5kZXJ1bmdlbiBkdXJjaCBOdXR6dW5nIGRlcyBBbGdvcml0aG11cyBcIlBhdGllbmNlIERpZmZcIiIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJFcnpldWdlIMOEbmRlcnVuZ2VuIGR1cmNoIE51dHp1bmcgZGVzIEFsZ29yaXRobXVzIFwiSGlzdG9ncmFtIERpZmZcIiIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAiPEFsZ29yaXRobXVzPiIKKworIzogZGlmZi5jOjU0MzUKK21zZ2lkICJjaG9vc2UgYSBkaWZmIGFsZ29yaXRobSIKK21zZ3N0ciAiRWluIEFsZ29yaXRobXVzIGbDvHIgw4RuZGVydW5nZW4gd8OkaGxlbiIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIjxUZXh0PiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIkVyemV1Z2Ugw4RuZGVydW5nZW4gZHVyY2ggTnV0enVuZyBkZXMgQWxnb3JpdGhtdXMgXCJBbmNob3JlZCBEaWZmXCIiCisKKyM6IGRpZmYuYzo1NDQwIGRpZmYuYzo1NDQ5IGRpZmYuYzo1NDUyCittc2dpZCAiPG1vZGU+IgorbXNnc3RyICI8TW9kdXM+IgorCisjOiBkaWZmLmM6NTQ0MQorbXNnaWQgInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIgorbXNnc3RyICJaZWlnZSBXb3J0LcOEbmRlcnVuZ2VuLCBudXR6ZSA8TW9kdXM+LCB1bSBXw7ZydGVyIGFienVncmVuemVuIgorCisjOiBkaWZmLmM6NTQ0MyBkaWZmLmM6NTQ0NiBkaWZmLmM6NTQ5MQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgIjxSZWdleD4iCisKKyM6IGRpZmYuYzo1NDQ0Cittc2dpZCAidXNlIDxyZWdleD4gdG8gZGVjaWRlIHdoYXQgYSB3b3JkIGlzIgorbXNnc3RyICJOdXR6ZSA8UmVnZXg+LCB1bSB6dSBlbnRzY2hlaWRlbiwgd2FzIGVpbiBXb3J0IGlzdCIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgIkVudHNwcmVjaGVuZCB3aWUgLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PFJlZ2V4PiIKKworIzogZGlmZi5jOjU0NTAKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICJWZXJzY2hvYmVuZSBDb2RlemVpbGVuIHNpbmQgYW5kZXJzZmFyYmlnIgorCisjOiBkaWZmLmM6NTQ1MworbXNnaWQgImhvdyB3aGl0ZSBzcGFjZXMgYXJlIGlnbm9yZWQgaW4gLS1jb2xvci1tb3ZlZCIKK21zZ3N0ciAiV2llIFdoaXRlc3BhY2VzIGluIC0tY29sb3ItbW92ZWQgaWdub3JpZXJ0IHdlcmRlbiIKKworIzogZGlmZi5jOjU0NTYKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgIkFuZGVyZSBEaWZmLU9wdGlvbmVuIgorCisjOiBkaWZmLmM6NTQ1OAorbXNnaWQgIndoZW4gcnVuIGZyb20gc3ViZGlyLCBleGNsdWRlIGNoYW5nZXMgb3V0c2lkZSBhbmQgc2hvdyByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiIgorIldlbm4gdm9tIFVudGVydmVyemVpY2huaXMgYXVmZ2VydWZlbiwgc2NobGllw59lIMOEbmRlcnVuZ2VuIGF1w59lcmhhbGIgYXVzIHVuZCAiCisiemVpZ2UgcmVsYXRpdmUgUGZhZGUgYW4iCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgImFsbGUgRGF0ZWllbiBhbHMgVGV4dCBiZWhhbmRlbG4iCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIgorbXNnc3RyICJWZXJ0YXVzY2hlIGRpZSBiZWlkZW4gRWluZ2FiZW4gdW5kIGRyZWhlIGRpZSDDhG5kZXJ1bmdlbiB1bSIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAiIgorIkJlZW5kZSBtaXQgRXhpdC1TdGF0dXMgMSwgd2VubiDDhG5kZXJ1bmdlbiB2b3JoYW5kZW4gc2luZCwgYW5kZXJuZmFsbHMgbWl0IDAiCisKKyM6IGRpZmYuYzo1NDY4Cittc2dpZCAiZGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIgorbXNnc3RyICJLZWluZSBBdXNnYWJlbiB2b20gUHJvZ3JhbW0iCisKKyM6IGRpZmYuYzo1NDcwCittc2dpZCAiYWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQiCittc2dzdHIgIkVybGF1YmUgZGllIEF1c2bDvGhydW5nIGVpbmVzIGV4dGVybmVzIFByb2dyYW1tcyBmw7xyIMOEbmRlcnVuZ2VuIgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInJ1biBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKyJGw7xocmUgZXh0ZXJuZSBUZXh0LUtvbnZlcnRpZXJ1bmdzZmlsdGVyIGF1cywgd2VubiBiaW7DpHJlIERhdGVpZW4gdmVyZ2xlaWNodCAiCisid2VyZGVuIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiPHdhbm4+IgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAiIgorIsOEbmRlcnVuZ2VuIGluIFN1Ym1vZHVsZW4gd8OkaHJlbmQgZGVyIEVyc3RlbGx1bmcgZGVyIFVudGVyc2NoaWVkZSBpZ25vcmllcmVuIgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICI8Rm9ybWF0PiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAiQW5nZWJlbiwgd2llIFVudGVyc2NoaWVkZSBpbiBTdWJtb2R1bGVuIGdlemVpZ3Qgd2VyZGVuIgorCisjOiBkaWZmLmM6NTQ4MworbXNnaWQgImhpZGUgJ2dpdCBhZGQgLU4nIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInZlcnN0ZWNrZSAnZ2l0IGFkZCAtTicgRWludHLDpGdlIHZvbSBJbmRleCIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiQmVoYW5kbGUgJ2dpdCBhZGQgLU4nIEVpbnRyw6RnZSBpbSBJbmRleCBhbHMgZWNodCIKKworIzogZGlmZi5jOjU0ODgKK21zZ2lkICI8c3RyaW5nPiIKK21zZ3N0ciAiPFplaWNoZW5rZXR0ZT4iCisKKyM6IGRpZmYuYzo1NDg5Cittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisic3RyaW5nIgorbXNnc3RyICIiCisiU3VjaGUgbmFjaCBVbnRlcnNjaGllZGVuLCB3ZWxjaGUgZGllIEFuemFobCBkZXMgVm9ya29tbWVucyBkZXIgYW5nZWdlYmVuZW4gIgorIlplaWNoZW5rZXR0ZSB2ZXLDpG5kZXJuIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisiU3VjaGUgbmFjaCBVbnRlcnNjaGllZGVuLCB3ZWxjaGUgZGllIEFuemFobCBkZXMgVm9ya29tbWVucyBkZXMgYW5nZWdlYmVuZW4gIgorInJlZ3Vsw6RyZW4gQXVzZHJ1Y2tzIHZlcsOkbmRlcm4iCisKKyM6IGRpZmYuYzo1NDk1Cittc2dpZCAic2hvdyBhbGwgY2hhbmdlcyBpbiB0aGUgY2hhbmdlc2V0IHdpdGggLVMgb3IgLUciCittc2dzdHIgInplaWdlIGFsbGUgw4RuZGVydW5nZW4gaW0gQ2hhbmdlc2V0IG1pdCAtUyBvZGVyIC1HIgorCisjOiBkaWZmLmM6NTQ5OAorbXNnaWQgInRyZWF0IDxzdHJpbmc+IGluIC1TIGFzIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorImJlaGFuZGxlIDxaZWljaGVua2V0dGU+IGJlaSAtUyBhbHMgZXJ3ZWl0ZXJ0ZW4gUE9TSVggcmVndWzDpHJlbiBBdXNkcnVjayIKKworIzogZGlmZi5jOjU1MDEKK21zZ2lkICJjb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorImtvbnRyb2xsaWVyZSBkaWUgUmVpaGVuZm9sZ2UsIGluIGRlciBkaWUgRGF0ZWllbiBpbiBkZXIgQXVzZ2FiZSBlcnNjaGVpbmVuIgorCisjOiBkaWZmLmM6NTUwMgorbXNnaWQgIjxvYmplY3QtaWQ+IgorbXNnc3RyICI8T2JqZWt0LUlEPiIKKworIzogZGlmZi5jOjU1MDMKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJvYmplY3QiCittc2dzdHIgIiIKKyJTdWNoZSBuYWNoIFVudGVyc2NoaWVkZW4sIHdlbGNoZSBkaWUgQW56YWhsIGRlcyBWb3Jrb21tZW5zIGRlcyBhbmdlZ2ViZW5lbiAiCisiT2JqZWt0ZXMgdmVyw6RuZGVybiIKKworIzogZGlmZi5jOjU1MDUKK21zZ2lkICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCittc2dzdHIgIlsoQXxDfER8TXxSfFR8VXxYfEIpLi4uWypdXSIKKworIzogZGlmZi5jOjU1MDYKK21zZ2lkICJzZWxlY3QgZmlsZXMgYnkgZGlmZiB0eXBlIgorbXNnc3RyICJXw6RobGUgRGF0ZWllbiBhbmhhbmQgZGVyIEFydCBkZXIgw4RuZGVydW5nIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiPERhdGVpPiIKKworIzogZGlmZi5jOjU1MDkKK21zZ2lkICJPdXRwdXQgdG8gYSBzcGVjaWZpYyBmaWxlIgorbXNnc3RyICJBdXNnYWJlIHp1IGVpbmVyIGJlc3RpbW10ZW4gRGF0ZWkiCisKKyM6IGRpZmYuYzo2MTY0Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJVbmdlbmF1ZSBFcmtlbm51bmcgZsO8ciBVbWJlbmVubnVuZ2VuIHd1cmRlIGF1ZmdydW5kIHp1IHZpZWxlciBEYXRlaWVuXG4iCisiw7xiZXJzcHJ1bmdlbi4iCisKKyM6IGRpZmYuYzo2MTY3Cittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICJudXIgS29waWVuIHZvbiBnZcOkbmRlcnRlbiBQZmFkZW4sIGF1ZmdydW5kIHp1IHZpZWxlciBEYXRlaWVuLCBnZWZ1bmRlbiIKKworIzogZGlmZi5jOjYxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBtYXkgd2FudCB0byBzZXQgeW91ciAlcyB2YXJpYWJsZSB0byBhdCBsZWFzdCAlZCBhbmQgcmV0cnkgdGhlIGNvbW1hbmQuIgorbXNnc3RyICIiCisiU2llIGvDtm5udGVuIGRpZSBWYXJpYWJsZSAlcyBhdWYgbWluZGVzdGVucyAlZCBzZXR6ZW4gdW5kIGRlbiBCZWZlaGxcbiIKKyJlcm5ldXQgdmVyc3VjaGVuLiIKKworIzogZGlyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCittc2dzdHIgIiIKKyJQZmFkc3BlemlmaWthdGlvbiAnJXMnIHN0aW1tdCBtaXQga2VpbmVuIGdpdC1iZWthbm50ZW4gRGF0ZWllbiDDvGJlcmVpbi4iCisKKyM6IGRpci5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAiVW5iZWthbm50ZXMgTXVzdGVyOiAnJXMnIgorCisjOiBkaXIuYzo2ODIgZGlyLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJVbmJla2FubnRlcyB2ZXJuZWluZW5kZXMgTXVzdGVyOiAnJXMnIgorCisjOiBkaXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAiIgorIklocmUgRGF0ZWkgZsO8ciBkZW4gcGFydGllbGxlbiBDaGVja291dCBoYXQgZXZlbnR1ZWxsIFByb2JsZW1lOlxuIgorIk11c3RlciAnJXMnIHdpZWRlcmhvbHQgc2ljaC4iCisKKyM6IGRpci5jOjcyNAorbXNnaWQgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCittc2dzdHIgIkRlYWt0aXZpZXJlIENvbmUtTXVzdGVyLcOcYmVyZWluc3RpbW11bmciCisKKyM6IGRpci5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIkthbm4gJXMgbmljaHQgYWxzIGV4Y2x1ZGUtRmlsdGVyIGJlbnV0emVuLiIKKworIzogZGlyLmM6MjA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFZlcnplaWNobmlzICclcycgbmljaHQgw7ZmZm5lbi4iCisKKyM6IGRpci5jOjI0MTUKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2FtbWVsbiB2b24gTmFtZW4gdW5kIEluZm9ybWF0aW9uZW4genVtIEtlcm5lbCIKKworIzogZGlyLmM6MjUzOQorbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAiIgorIkNhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBpc3QgYXVmIGRpZXNlbSBTeXN0ZW0gb2RlclxuIgorImbDvHIgZGllc2VzIFZlcnplaWNobmlzIGRlYWt0aXZpZXJ0LiIKKworIzogZGlyLmM6MzM0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAiSW5kZXgtRGF0ZWkgaW4gUmVwb3NpdG9yeSAlcyBiZXNjaMOkZGlndC4iCisKKyM6IGRpci5jOjMzODggZGlyLmM6MzM5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAlcyIKK21zZ3N0ciAiS29ubnRlIFZlcnplaWNobmlzc2UgZsO8ciAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGRpci5jOjM0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlIEdpdC1WZXJ6ZWljaG5pcyBuaWNodCB2b24gJyVzJyBuYWNoICclcycgbWlncmllcmVuLiIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAiSGlud2VpczogV2FydGUgYXVmIGRhcyBTY2hsaWXDn2VuIGRlciBEYXRlaSBkdXJjaCBJaHJlbiBFZGl0b3IuLi4lYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiRmlsdGVyZSBJbmhhbHQiCisKKyM6IGVudHJ5LmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIERhdGVpICclcycgbmljaHQgbGVzZW4uIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgR2l0LU5hbWVzcGFjZS1QZmFkIFwiJXNcIiIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgIktvbm50ZSBHSVRfRElSIG5pY2h0IHp1ICclcycgc2V0emVuLiIKKworIzogZXhlYy1jbWQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgIlp1IHZpZWxlIEFyZ3VtZW50ZSBhbmdlZ2ViZW4sIHVtICVzIGF1c3p1ZsO8aHJlbi4iCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogZXJ3YXJ0ZXRlIHNoYWxsb3ctTGlzdGUiCisKKyM6IGZldGNoLXBhY2suYzoxNTMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogZXJ3YXJ0ZXRlIGVpbiBGbHVzaC1QYWtldCBuYWNoIGRlciBzaGFsbG93LUxpc3RlIgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IEFDSy9OQUsgZXJ3YXJ0ZXQsIEZsdXNoLVBha2V0IGJla29tbWVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IEFDSy9OQUsgZXJ3YXJ0ZXQsICclcycgYmVrb21tZW4iCisKKyM6IGZldGNoLXBhY2suYzoxOTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICJrb25udGUgbmljaHQgenVtIFJlbW90ZSBzY2hyZWliZW4iCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMgYmVuw7Z0aWd0IG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2Ugc2hhbGxvdy1aZWlsZTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjIgZmV0Y2gtcGFjay5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgdW5zaGFsbG93LVplaWxlOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NCBmZXRjaC1wYWNrLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3Qgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAiT2JqZWt0IG5pY2h0IGdlZnVuZGVuOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJGZWhsZXIgaW4gT2JqZWt0OiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAiS2VpbiBzaGFsbG93LU9iamVrdCBnZWZ1bmRlbjogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNzIgZmV0Y2gtcGFjay5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAic2hhbGxvdy91bnNoYWxsb3cgZXJ3YXJ0ZXQsICVzIGJla29tbWVuIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAiJXMgJWQgJXMgYmVrb21tZW4iCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIENvbW1pdCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ2MgorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAiR2ViZSBhdWYiCisKKyM6IGZldGNoLXBhY2suYzo0NzUgcHJvZ3Jlc3MuYzozMjMKK21zZ2lkICJkb25lIgorbXNnc3RyICJGZXJ0aWciCisKKyM6IGZldGNoLXBhY2suYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICglZCkgJXMiCittc2dzdHIgIiVzICglZCkgJXMgYmVrb21tZW4iCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAiTWFya2llcmUgJXMgYWxzIHZvbGxzdMOkbmRpZyIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAiaGFiZSAlcyAoJXMpIGJlcmVpdHMiCisKKyM6IGZldGNoLXBhY2suYzo4MTgKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGFjazogRmVobGVyIGJlaW0gU3RhcnRlbiBkZXMgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgIlByb3Rva29sbGZlaGxlcjogdW5nw7xsdGlnZXIgUGFjay1IZWFkZXIiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiBrb25udGUgJXMgbmljaHQgc3RhcnRlbiIKKworIzogZmV0Y2gtcGFjay5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIiVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiRmVobGVyIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCisKKyM6IGZldGNoLXBhY2suYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIKK21zZ3N0ciAiU2VydmVyLVZlcnNpb24gaXN0ICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5NzAgZmV0Y2gtcGFjay5jOjk3NiBmZXRjaC1wYWNrLmM6OTc5IGZldGNoLXBhY2suYzo5ODUKKyM6IGZldGNoLXBhY2suYzo5ODkgZmV0Y2gtcGFjay5jOjk5MyBmZXRjaC1wYWNrLmM6OTk3IGZldGNoLXBhY2suYzoxMDAxCisjOiBmZXRjaC1wYWNrLmM6MTAwNSBmZXRjaC1wYWNrLmM6MTAwOSBmZXRjaC1wYWNrLmM6MTAxMyBmZXRjaC1wYWNrLmM6MTAxNworIzogZmV0Y2gtcGFjay5jOjEwMjMgZmV0Y2gtcGFjay5jOjEwMjkgZmV0Y2gtcGFjay5jOjEwMzQgZmV0Y2gtcGFjay5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzICVzIgorbXNnc3RyICJTZXJ2ZXIgdW50ZXJzdMO8dHp0ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIgorbXNnc3RyICJTZXJ2ZXIgdW50ZXJzdMO8dHp0IGtlaW5lIHNoYWxsb3ctQ2xpZW50cyIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIlNlcnZlciB1bnRlcnN0w7x0enQga2VpbiAtLXNoYWxsb3ctc2luY2UiCisKKyM6IGZldGNoLXBhY2suYzoxMDM3Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LWV4Y2x1ZGUiCittc2dzdHIgIlNlcnZlciB1bnRlcnN0w7x0enQga2VpbiAtLXNoYWxsb3ctZXhjbHVkZSIKKworIzogZmV0Y2gtcGFjay5jOjEwNDEKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIKK21zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBrZWluIC0tZGVlcGVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICJrZWluZSBnZW1laW5zYW1lbiBDb21taXRzIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogQWJob2xlbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBrZWluZSBzaGFsbG93LUFuZnJhZ2VuLiIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJTZXJ2ZXIgdW50ZXJzdMO8dHp0IEZpbHRlciIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgImtvbm50ZSBBbmZyYWdlIG5pY2h0IHp1bSBSZW1vdGUgc2NocmVpYmVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIHZvbiBTZWt0aW9uc2tvcGYgJyVzJy4iCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgIiclcycgZXJ3YXJ0ZXQsICclcycgZW1wZmFuZ2VuIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIEFja25vd2xlZGdtZW50LVplaWxlOiAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGFja3M6ICVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJhcmJlaXRlbiB2b24gQUNLUzogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICJFcndhcnRldGUgVmVyc2FuZCBlaW5lciBQYWNrZGF0ZWkgbmFjaCAncmVhZHknLiIKKworIzogZmV0Y2gtcGFjay5jOjEzMjAKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgIkVyd2FydGV0ZSBrZWluZW4gVmVyc2FuZCBlaW5lciBhbmRlcmVuIFNla3Rpb24gb2huZSAncmVhZHknLiIKKworIzogZmV0Y2gtcGFjay5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBzaGFsbG93IGluZm86ICVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJhcmJlaXRlbiB2b24gU2hhbGxvdy1JbmZvcm1hdGlvbmVuOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgIndhbnRlZC1yZWYgZXJ3YXJ0ZXQsICclcycgYmVrb21tZW4iCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAiVW5lcndhcnRldGVzIHdhbnRlZC1yZWY6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJhcmJlaXRlbiB2b24gd2FudGVkLXJlZnM6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICJrZWluIMO8YmVyZWluc3RpbW1lbmRlciBSZW1vdGUtQnJhbmNoIgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg4Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgIlJlbW90ZS1SZXBvc2l0b3J5IGhhdCBuaWNodCBhbGxlIGVyZm9yZGVybGljaGVuIE9iamVrdGUgZ2VzZW5kZXQuIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgImtlaW5lIHNvbGNoZSBSZW1vdGUtUmVmZXJlbnogJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICJEZXIgU2VydmVyIGxlaG50IEFuZnJhZ2UgbmFjaCBuaWNodCBhbmdlYm90ZW5lbSBPYmpla3QgJXMgYWIuIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjIzCittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAia29ubnRlIHRlbXBvcsOkcmUgRGF0ZWkgbmljaHQgZXJzdGVsbGVuIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIGxvc2dlbMO2c3RlbiBTaWduYXR1ciBuYWNoICclcyciCisKKyM6IGdwZy1pbnRlcmZhY2UuYzozOTAKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyBiZWltIFNpZ25pZXJlbiBkZXIgRGF0ZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAiSWdub3JpZXJlIHVuZ8O8bHRpZ2UgRmFyYmUgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKKworIzogZ3JlcC5jOjY2OAorbXNnaWQgIiIKKyJnaXZlbiBwYXR0ZXJuIGNvbnRhaW5zIE5VTEwgYnl0ZSAodmlhIC1mIDxmaWxlPikuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgIgorIndpdGggLVAgdW5kZXIgUENSRSB2MiIKK21zZ3N0ciAiIgorIkFuZ2VnZWJlbmVzIE11c3RlciBlbnRow6RsdCBOVUxMIEJ5dGUgKMO8YmVyIC1mIDxEYXRlaT4pLiBEYXMgd2lyZCBudXIgbWl0IC0iCisiUHVudGVyIFBDUkUgdjIgdW50ZXJzdMO8dHp0LiIKKworIzogZ3JlcC5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyc6IGtvbm50ZSAlcyBuaWNodCBsZXNlbiIKKworIzogZ3JlcC5jOjIxNDEgc2V0dXAuYzoxNjUgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbiIKKworIzogZ3JlcC5jOjIxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAiJyVzJzogcmVhZCgpIHp1IGt1cnoiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMgYW5sZWdlbiAoc2llaGUgYXVjaDogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAiYW4gYWt0dWVsbGVuIMOEbmRlcnVuZ2VuIGFyYmVpdGVuIChzaWVoZSBhdWNoOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiSGlzdG9yaWUgdW5kIFN0YXR1cyB1bnRlcnN1Y2hlbiAoc2llaGUgYXVjaDogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiSGlzdG9yaWUgZXJ3ZWl0ZXJuIHVuZCBiZWFyYmVpdGVuIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgIm1pdCBhbmRlcmVuIHp1c2FtbWVuYXJiZWl0ZW4gKHNpZWhlIGF1Y2g6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJIYXVwdGJlZmVobGUiCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAiTmViZW5iZWZlaGxlIC8gTWFuaXB1bGF0aW9uZW4iCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIk5lYmVuYmVmZWhsZSAvIEFiZnJhZ2VuIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAibWl0IGFuZGVyZW4gaW50ZXJhZ2llcmVuIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIlN5c3RlbWJlZmVobGUgLyBNYW5pcHVsYXRpb25lbiIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiU3lzdGVtYmVmZWhsZSAvIEFiZnJhZ2VuIgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiU3lzdGVtYmVmZWhsZSAvIFJlcG9zaXRvcmllcyBzeW5jaHJvbmlzaWVyZW4iCisKKyM6IGhlbHAuYzozOAorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiCittc2dzdHIgIlN5c3RlbWJlZmVobGUgLyBJbnRlcm5lIEhpbGZzYmVmZWhsZSIKKworIzogaGVscC5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgIlZvcmhhbmRlbmUgR2l0LUJlZmVobGUgaW4gJyVzJyIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiVm9yaGFuZGVuZSBHaXQtQmVmZWhsZSBhbmRlcnN3byBpbiBJaHJlbSAkUEFUSCIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAiQWxsZ2VtZWluZSBHaXQtQmVmZWhsZSwgdmVyd2VuZGV0IGluIHZlcnNjaGllZGVuZW4gU2l0dWF0aW9uZW46IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgIk5pY2h0IHVudGVyc3TDvHR6dGUgQXJ0IHp1ciBCZWZlaGxzYXVmbGlzdHVuZyAnJXMnLiIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJEaWUgYWxsZ2VtZWluZW4gR2l0LUFubGVpdHVuZ2VuIHNpbmQ6IgorCisjOiBoZWxwLmM6NTEyCittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIHRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIgorbXNnc3RyICIiCisiU2llaGUgJ2dpdCBoZWxwIDxCZWZlaGw+JywgdW0gbWVociDDvGJlciBlaW5lbiBzcGV6aWZpc2NoZW4gVW50ZXJiZWZlaGwgenUgIgorImxlc2VuLiIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICJFeHRlcm5lIEJlZmVobGUiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIkFsaWFzLUJlZmVobGUiCisKKyM6IGhlbHAuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiJyVzJyBzY2hlaW50IGVpbiBnaXQtQmVmZWhsIHp1IHNlaW4sIGtvbm50ZSBhYmVyXG4iCisibmljaHQgYXVzZ2Vmw7xocnQgd2VyZGVuLiBWaWVsbGVpY2h0IGlzdCBnaXQtJXMgZmVobGVyaGFmdD8iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiVWggb2guIEtlaW5lIEdpdC1CZWZlaGxlIGF1ZiBJaHJlbSBTeXN0ZW0gdm9yaGFuZGVuLiIKKworIzogaGVscC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICIiCisiV0FSTlVORzogU2llIGhhYmVuIEdpdC1CZWZlaGwgJyVzJyBhdXNnZWbDvGhydCwgd2VsY2hlciBuaWNodCBleGlzdGllcnQuIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIlNldHplIGZvcnQgdW50ZXIgZGVyIEFubmFobWUsIGRhc3MgU2llICclcycgbWVpbnRlbi4iCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiU2V0emUgaW4gJTAuMWYgU2VrdW5kZW4gZm9ydCB1bnRlciBkZXIgQW5uYWhtZSwgZGFzcyBTaWUgJyVzJyBtZWludGVuLiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgaXN0IGtlaW4gR2l0LUJlZmVobC4gU2llaGUgJ2dpdCAtLWhlbHAnLiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIkRlciDDpGhubGljaHN0ZSBCZWZlaGwgaXN0IgorbXNnc3RyWzFdICIiCisiXG4iCisiRGllIMOkaG5saWNoc3RlbiBCZWZlaGxlIHNpbmQiCisKKyM6IGhlbHAuYzo3MTQKK21zZ2lkICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHZlcnNpb24gWzxPcHRpb25lbj5dIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKKworIzogaGVscC5jOjc4NworbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIkhhYmVuIFNpZSBkYXMgZ2VtZWludD8iCittc2dzdHJbMV0gIiIKKyJcbiIKKyJIYWJlbiBTaWUgZWluZXMgdm9uIGRpZXNlbiBnZW1laW50PyIKKworIzogaWRlbnQuYzozNDkKK21zZ2lkICIiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogQml0dGUgZ2ViZW4gU2llIGFuLCB3ZXIgU2llIHNpbmQuXG4iCisiXG4iCisiRsO8aHJlbiBTaWVcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisiYXVzLCB1bSBkYXMgYWxzIElocmUgc3RhbmRhcmRtw6TDn2lnZSBJZGVudGl0w6R0IHp1IHNldHplbi5cbiIKKyJMYXNzZW4gU2llIGRpZSBPcHRpb24gXCItLWdsb2JhbFwiIHdlZywgdW0gZGllIElkZW50aXTDpHQgbnVyXG4iCisiZsO8ciBkaWVzZXMgUmVwb3NpdG9yeSB6dSBzZXR6ZW4uXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAia2VpbmUgRS1NYWlsIGFuZ2VnZWJlbiB1bmQgYXV0b21hdGlzY2hlIEVya2VubnVuZyBpc3QgZGVha3RpdmllcnQiCisKKyM6IGlkZW50LmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgIktvbm50ZSBkaWUgRS1NYWlsLUFkcmVzc2UgbmljaHQgYXV0b21hdGlzY2ggZXJrZW5uZW4gKCclcycgZXJoYWx0ZW4pIgorCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAia2VpbiBOYW1lIGFuZ2VnZWJlbiB1bmQgYXV0b21hdGlzY2hlIEVya2VubnVuZyBpc3QgZGVha3RpdmllcnQiCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgImtvbm50ZSBOYW1lbiBuaWNodCBhdXRvbWF0aXNjaCBlcmtlbm5lbiAoJyVzJyBlcmhhbHRlbikiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiTGVlcmVyIE5hbWUgaW4gSWRlbnRpZmlrYXRpb24gKGbDvHIgPCVzPikgbmljaHQgZXJsYXVidC4iCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICJOYW1lIGJlc3RlaHQgbnVyIGF1cyBuaWNodCBlcmxhdWJ0ZW4gWmVpY2hlbjogJXMiCisKKyM6IGlkZW50LmM6NDM2IGJ1aWx0aW4vY29tbWl0LmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBEYXR1bXNmb3JtYXQ6ICVzIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICIiCisiRWludHJhZyAnJXMnIGltIFRyZWUtT2JqZWt0ICVzIGhhdCBUcmVlLU1vZHVzLCBhYmVyIGlzdCBrZWluIFRyZWUtT2JqZWt0IgorCisjOiBsaXN0LW9iamVjdHMuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyBibG9iIG1vZGUsIGJ1dCBpcyBub3QgYSBibG9iIgorbXNnc3RyICJFaW50cmFnICclcycgaW0gVHJlZS1PYmpla3QgJXMgaGF0IEJsb2ItTW9kdXMsIGFiZXIgaXN0IGtlaW4gQmxvYiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICJLb25udGUgUm9vdC1UcmVlLU9iamVrdCBmw7xyIENvbW1pdCAlcyBuaWNodCBsYWRlbi4iCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICJrb25udGUgbmljaHQgYXVmIHBhcnRpZWxsZW4gQmxvYiAnJXMnIHp1Z3JlaWZlbiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICJLb25udGUgcGFydGllbGxlIEZpbHRlci1EYXRlbiBpbiAlcyBuaWNodCBwYXJzZW4uIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICIndHJlZTo8VGllZmU+JyBlcndhcnRldCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAiS2VpbmUgVW50ZXJzdMO8dHp1bmcgZsO8ciBzcGFyc2U6cGF0aCBGaWx0ZXIgbWVociIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWx0ZXItc3BlYyAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIGZpbHRlci1zcGVjICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAiWmVpY2hlbiBpbiBzdWItZmlsdGVyLXNwZWMgbXVzcyBtYXNraWVydCB3ZXJkZW46ICclYyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjE0NAorbXNnaWQgImV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciBjb21iaW5lOiIKK21zZ3N0ciAiZXJ3YXJ0ZXRlIGV0d2FzIG5hY2ggJ2NvbWJpbmU6JyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAiTWVocmVyZSBmaWx0ZXItc3BlY3Mga8O2bm5lbiBuaWNodCBrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyM6IGxvY2tmaWxlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCittc2dzdHIgIiIKKyJLb25udGUgJyVzLmxvY2snIG5pY2h0IGVyc3RlbGxlbjogJXMuXG4iCisiXG4iCisiRWluIGFuZGVyZXIgR2l0LVByb3plc3Mgc2NoZWludCBpbiBkaWVzZW0gUmVwb3NpdG9yeSBhdXNnZWbDvGhydFxuIgorInp1IHdlcmRlbiwgenVtIEJlaXNwaWVsIGVpbiBub2NoIG9mZmVuZXIgRWRpdG9yIHZvbiAnZ2l0IGNvbW1pdCcuXG4iCisiQml0dGUgc3RlbGxlbiBTaWUgc2ljaGVyLCBkYXNzIGFsbGUgUHJvemVzc2UgYmVlbmRldCB3dXJkZW4gdW5kXG4iCisidmVyc3VjaGVuIFNpZSBlcyBlcm5ldXQuIEZhbGxzIGVzIGltbWVyIG5vY2ggZmVobHNjaGzDpGd0LCBrw7ZubnRlXG4iCisiZWluIGZyw7xoZXJlciBHaXQtUHJvemVzcyBpbiBkaWVzZW0gUmVwb3NpdG9yeSBhYmdlc3TDvHJ6dCBzZWluOlxuIgorIkzDtnNjaGVuIFNpZSBkaWUgRGF0ZWkgbWFudWVsbCB1bSBmb3J0enVmYWhyZW4uIgorCisjOiBsb2NrZmlsZS5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiCittc2dzdHIgIktvbm50ZSAnJXMubG9jaycgbmljaHQgZXJzdGVsbGVuOiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiTGVzZW4gZGVzIFp3aXNjaGVuc3BlaWNoZXJzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBtZXJnZS5jOjEwNyByZXJlcmUuYzo3MjAgYnVpbHRpbi9hbS5jOjE4NzQgYnVpbHRpbi9hbS5jOjE5MDgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MzkgYnVpbHRpbi9jaGVja291dC5jOjc5OCBidWlsdGluL2Nsb25lLmM6ODA5CisjOiBidWlsdGluL3N0YXNoLmM6MjY0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgbmV1ZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjcKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKHVuZ8O8bHRpZ2VyIENvbW1pdClcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkX2NhY2hlaW5mbyBmw7xyIFBmYWQgJyVzJyBmZWhsZ2VzY2hsYWdlbjsgTWVyZ2Ugd2lyZCBhYmdlYnJvY2hlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorImFkZF9jYWNoZWluZm8genVyIEFrdHVhbGlzaWVydW5nIGbDvHIgUGZhZCAnJXMnIGZlaGxnZXNjaGxhZ2VuO1xuIgorIk1lcmdlIHdpcmQgYWJnZWJyb2NoZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlcyBQZmFkZXMgJyVzJyVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiRW50ZmVybmUgJXMsIHVtIFBsYXR6IGbDvHIgVW50ZXJ2ZXJ6ZWljaG5pcyB6dSBzY2hhZmZlblxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MTAgbWVyZ2UtcmVjdXJzaXZlLmM6OTI5Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiB2aWVsbGVpY2h0IGVpbiBWZXJ6ZWljaG5pcy9EYXRlaS1Lb25mbGlrdD8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgInZlcndlaWdlcmUsIGRhIHVudmVyc2lvbmllcnRlIERhdGVpZW4gaW4gJyVzJyB2ZXJsb3JlbiBnZWhlbiB3w7xyZGVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjAgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICJrYW5uIE9iamVrdCAlcyAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiQmxvYiBlcndhcnRldCBmw7xyICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiB2b24gJyVzJzogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBlaW5lciBzeW1ib2xpc2NoZW4gVmVya27DvHBmdW5nIGbDvHIgJyVzJzogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAid2Vpw58gbmljaHQgd2FzIG1pdCAlMDZvICVzICclcycgenUgbWFjaGVuIGlzdCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgY2hlY2tlZCBvdXQpIgorbXNnc3RyICJGZWhsZXIgYmVpbSBNZXJnZSB2b24gU3VibW9kdWwgJXMgKG5pY2h0IGF1c2dlY2hlY2t0KS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIkZlaGxlciBiZWltIE1lcmdlIHZvbiBTdWJtb2R1bCAlcyAoQ29tbWl0cyBuaWNodCB2b3JoYW5kZW4pLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTWVyZ2Ugdm9uIFN1Ym1vZHVsICVzIChDb21taXRzIGZvbGdlbiBrZWluZXIgTWVyZ2UtQmFzaXMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjIxIG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyB0byB0aGUgZm9sbG93aW5nIGNvbW1pdDoiCittc2dzdHIgIlNwdWxlIFN1Ym1vZHVsICVzIHp1IGRlbSBmb2xnZW5kZW4gQ29tbWl0IHZvcjoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjQgbWVyZ2UtcmVjdXJzaXZlLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIgorbXNnc3RyICJTcHVsZSBTdWJtb2R1bCAlcyB2b3IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kKSIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIE1lcmdlIHZvbiBTdWJtb2R1bGUgJXMgKGRlbSBNZXJnZSBuYWNoZm9sZ2VuZGUgQ29tbWl0cyBuaWNodCAiCisiZ2VmdW5kZW4pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIgorbXNnc3RyICJGZWhsZXIgYmVpbSBNZXJnZSB2b24gU3VibW9kdWwgJXMgKGtlaW4gVm9yc3B1bGVuKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2NAorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAiTcO2Z2xpY2hlIEF1ZmzDtnN1bmcgZGVzIE1lcmdlcyBmw7xyIFN1Ym1vZHVsIGdlZnVuZGVuOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAiIgorIkZhbGxzIGRhcyBrb3JyZWt0IGlzdCwgZsO8Z2VuIFNpZSBlcyBlaW5mYWNoIGRlciBTdGFnaW5nLUFyZWEsIHp1bSBCZWlzcGllbCAiCisibWl0OlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisiaGluenUsIHVtIGRpZXNlbiBWb3JzY2hsYWcgenUgYWt6ZXB0aWVyZW4uXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTWVyZ2Ugdm9uIFN1Ym1vZHVsICVzIChtZWhyZXJlIE1lcmdlcyBnZWZ1bmRlbikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDkKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiRmVobGVyIGJlaSBBdXNmw7xocnVuZyBkZXMgaW50ZXJuZW4gTWVyZ2VzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCB6dXIgRGF0ZW5iYW5rIGhpbnp1ZsO8Z2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiYXV0b21hdGlzY2hlciBNZXJnZSB2b24gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJGZWhsZXI6IFZlcndlaWdlcmUgdW52ZXJzaW9uaWVydGUgRGF0ZWkgYmVpICVzIHp1IHZlcmxpZXJlbjtcbiIKKyJzY2hyZWliZSBzdGF0dGRlc3NlbiBuYWNoICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKCVzL2zDtnNjaGVuKTogJXMgZ2Vsw7ZzY2h0IGluICVzIHVuZCAlcyBpbiAlcy4gU3RhbmQgJXMgdm9uICVzIHd1cmRlICIKKyJpbSBBcmJlaXRzYmVyZWljaCBnZWxhc3Nlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcy9sw7ZzY2hlbik6ICVzIGdlbMO2c2NodCBpbiAlcyB1bmQgJXMgbmFjaCAlcyBpbiAlcy4gU3RhbmQgJXMgdm9uICIKKyIlcyB3dXJkZSBpbSBBcmJlaXRzYmVyZWljaCBnZWxhc3Nlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcy9sw7ZzY2hlbik6ICVzIGdlbMO2c2NodCBpbiAlcyB1bmQgJXMgaW4gJXMuIFN0YW5kICVzIHZvbiAlcyB3dXJkZSAiCisiaW0gQXJiZWl0c2JlcmVpY2ggYmVpICVzIGdlbGFzc2VuLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKCVzL2zDtnNjaGVuKTogJXMgZ2Vsw7ZzY2h0IGluICVzIHVuZCAlcyBuYWNoICVzIGluICVzLiBTdGFuZCAlcyB2b24gIgorIiVzIHd1cmRlIGltIEFyYmVpdHNiZXJlaWNoIGJlaSAlcyBnZWxhc3Nlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgInVtYmVuZW5uZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJ1bWJlbmFubnQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTQgbWVyZ2UtcmVjdXJzaXZlLmM6MjUzMCBtZXJnZS1yZWN1cnNpdmUuYzozMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAiVmVyd2VpZ2VyZSBnZcOkbmRlcnRlIERhdGVpIGJlaSAlcyB6dSB2ZXJsaWVyZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXMsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gdGhlIHdheS4iCittc2dzdHIgIiIKKyJWZXJ3ZWlnZXJlIHVudmVyc2lvbmllcnRlIERhdGVpIGJlaSAlcyB6dSB2ZXJsaWVyZW4sIGF1Y2ggd2VubiBkaWVzZSBpbSBXZWcgIgorImlzdC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAgQWRkZWQgJXMgaW4gJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAodW1iZW5lbm5lbi9oaW56dWbDvGdlbik6IEJlbmVubmUgdW0gJXMtPiVzIGluICVzLiAlcyBoaW56dWdlZsO8Z3QgaW4gIgorIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyBpc3QgZWluIFZlcnplaWNobmlzIGluICVzLCBmw7xnZSBlcyBzdGF0dGRlc3NlbiBhbHMgJXMgaGluenUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKyJWZXJ3ZWlnZXJlIHVudmVyc2lvbmllcnRlIERhdGVpIGJlaSAlcyB6dSB2ZXJsaWVyZW47IGbDvGdlIHN0YXR0ZGVzc2VuICVzICIKKyJoaW56dSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKHVtYmVuZW5uZW4vdW1iZW5lbm5lbik6IEJlbmVubmUgdW0gXCIlc1wiLT5cIiVzXCIgaW4gQnJhbmNoIFwiJXNcIiAiCisidW5kIFwiJXNcIi0+XCIlc1wiIGluIEJyYW5jaCBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc0MgorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChibGVpYnQgdW5hdWZnZWzDtnN0KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAodW1iZW5lbm5lbi91bWJlbmVubmVuKTogQmVuZW5uZSB1bSAlcy0+JXMgaW4gJXMuIEJlbmVubmUgdW0gJXMtPiVzICIKKyJpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiBVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgIgorImRpcmVjdG9yeSAlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2l0aCBubyBkZXN0aW5hdGlvbiAiCisiZ2V0dGluZyBhIG1ham9yaXR5IG9mIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoQXVmdGVpbHVuZyBWZXJ6ZWljaG5pc3VtYmVuZW5udW5nKTogVW5rbGFyLCB3byAlcyB6dSBwbGF0emllcmVuICIKKyJpc3QsXG4iCisid2VpbCBWZXJ6ZWljaG5pcyAlcyB6dSBtZWhyZXJlbiBhbmRlcmVuIFZlcnplaWNobmlzc2VuIHVtYmVuYW5udCB3dXJkZSwgIgorIndvYmVpXG4iCisia2VpbmVzIGRpZXNlciBaaWVsZSBkaWUgTWVocmhlaXQgZGVyIERhdGVpZW4gZXJoaWVsdC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogRXhpc3RpbmcgZmlsZS9kaXIgYXQgJXMgaW4gdGhlIHdheSBvZiAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZShzKSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcgcGF0aChzKSB0aGVyZTogJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKGltcGxpeml0ZSBWZXJ6ZWljaG5pc3VtYmVuZW5udW5nKTogRXhpc3RpZXJlbmRlIERhdGVpL1BmYWQgYmVpICVzICIKKyJpbVxuIgorIldlZyB2b24gaW1wbGl6aXRlciBWZXJ6ZWljaG5pc3VtYmVuZW5udW5nLCBkaWUgdmVyc3VjaHQsIGVpbmVuIG9kZXIgbWVocmVyZVxuIgorIlBmYWRlIGRhaGluIHp1IHNldHplbjogJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChpbXBsaXppdGUgVmVyemVpY2huaXN1bWJlbmVubnVuZyk6IEthbm4gbmljaHQgbWVociBhbHMgZWluIFBmYWQgIgorInp1XG4iCisiJXMgbWFwcGVuOyBpbXBsaXppdGUgVmVyemVpY2huaXN1bWJlbmVubnVuZ2VuIHZlcnN1Y2h0ZW4gZGllc2UgUGZhZGUgZGFoaW5cbiIKKyJ6dSBzZXR6ZW46ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAodW1iZW5lbm5lbi91bWJlbmVubmVuKTogQmVuZW5uZSBWZXJ6ZWljaG5pcyB1bSAlcy0+JXMgaW4gJXMuXG4iCisiQmVuZW5uZSBWZXJ6ZWljaG5pcyB1bSAlcy0+JXMgaW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIldBUk5VTkc6IFZlcm1laWRlIFVtYmVuZW5udW5nICVzIC0+ICVzIHZvbiAlcywgd2VpbCAlcyBzZWxic3QgdW1iZW5hbm50ICIKKyJ3dXJkZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJrYW5uIE9iamVrdCAlcyBuaWNodCBsZXNlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiT2JqZWt0ICVzIGlzdCBrZWluIEJsb2IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIsOkbmRlcm4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAiZ2XDpG5kZXJ0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDk4Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiSW5oYWx0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTAyCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAiaGluenVmw7xnZW4vaGluenVmw7xnZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICIlcyBhdXNnZWxhc3NlbiAoRXJnZWJuaXMgZGVzIE1lcmdlcyBleGlzdGllcnQgYmVyZWl0cykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNDcgZ2l0LXN1Ym1vZHVsZS5zaDo5OTMKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgIlN1Ym1vZHVsIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJLT05GTElLVCAoJXMpOiBNZXJnZS1Lb25mbGlrdCBpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiRsO8Z2Ugc3RhdHRkZXNzZW4gYWxzICVzIGhpbnp1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIlBmYWQgYWt0dWFsaXNpZXJ0OiAlcyBoaW56dWdlZsO8Z3QgaW4gJXMgaW5uZXJoYWxiIGVpbmVzIFZlcnplaWNobmlzc2VzLCBkYXMgIgorInVtYmVuYW5udCB3dXJkZSBpbiAlczsgVmVyc2NoaWViZSBlcyBuYWNoICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCAiCisiaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKFNwZWljaGVyb3J0KTogJXMgaGluenVnZWbDvGd0IGluICVzIGlubmVyaGFsYiBlaW5lcyBWZXJ6ZWljaG5pc3NlcywgIgorImRhcyB1bWJlbmFubnQgd3VyZGUgaW4gJXMsIGVzIHNvbGx0ZSB2aWVsbGVpY2h0IG5hY2ggJXMgdmVyc2Nob2JlbiB3ZXJkZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICIKKyIlczsgbW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIlBmYWQgYWt0dWFsaXNpZXJ0OiAlcyB1bWJlbmFubnQgbmFjaCAlcyBpbiAlcywgaW5uZXJoYWxiIGVpbmVzICIKKyJWZXJ6ZWljaG5pc3NlcywgZGFzIHVtYmVuYW5udCB3dXJkZSBpbiAlczsgVmVyc2NoaWViZSBlcyBuYWNoICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKFNwZWljaGVyb3J0KTogJXMgdW1iZW5hbm50IG5hY2ggJXMgaW4gJXMsIGlubmVyaGFsYiBlaW5lcyAiCisiVmVyemVpY2huaXNzZXMsIGRhcyB1bWJlbmFubnQgd3VyZGUgaW4gJXMsIGVzIHNvbGx0ZSB2aWVsbGVpY2h0IG5hY2ggJXMgIgorInZlcnNjaG9iZW4gd2VyZGVuLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiRW50ZmVybmUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MDgKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiRGF0ZWkvVmVyemVpY2huaXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MTMKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAiVmVyemVpY2huaXMvRGF0ZWkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMpOiBFcyBleGlzdGllcnQgYmVyZWl0cyBlaW4gVmVyemVpY2huaXMgJXMgaW4gJXMuIEbDvGdlICVzIGFscyAlcyAiCisiaGluenUuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI5CisjLCBjLWZvcm1hdAogbXNnaWQgIkFkZGluZyAlcyIKLW1zZ3N0ciAiwrslc8KrIGhpbnp1ZsO8Z2VuIgorbXNnc3RyICJGw7xnZSAlcyBoaW56dSIKIAotIzogbGliL2luZGV4LnRjbDo0MTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTdGFnZSAlZCB1bnRyYWNrZWQgZmlsZXM/IgotbXNnc3RyICIlZCB1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGJlcmVpdHN0ZWxsZW4/IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJLT05GTElLVCAoaGluenVmw7xnZW4vaGluenVmw7xnZW4pOiBNZXJnZS1Lb25mbGlrdCBpbiAlcyIKIAotIzogbGliL2luZGV4LnRjbDo0MjAKLW1zZ2lkICJBZGRpbmcgYWxsIGNoYW5nZWQgZmlsZXMiCi1tc2dzdHIgIkFsbGUgZ2XDpG5kZXJ0ZW4gRGF0ZWllbiBoaW56dWbDvGdlbiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0ODIKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICJCZXJlaXRzIGFrdHVlbGwhIgogCi0jOiBsaWIvaW5kZXgudGNsOjUwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgotbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiBEYXRlaSDCuyVzwqsgdmVyd2VyZmVuPyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZGVyIFwiVHJlZVwiLU9iamVrdGUgJXMgdW5kICVzIGZlaGxnZXNjaGxhZ2VuIgogCi0jOiBsaWIvaW5kZXgudGNsOjUwOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKLW1zZ3N0ciAiw4RuZGVydW5nZW4gaW4gZGllc2VuICVpIERhdGVpZW4gdmVyd2VyZmVuPyIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1OTUKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiTWVyZ2U6IgogCi0jOiBsaWIvaW5kZXgudGNsOjUxNwotbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKLW1zZ3N0ciAiIgotIkFsbGUgbmljaHQgYmVyZWl0Z2VzdGVsbHRlbiDDhG5kZXJ1bmdlbiB3ZXJkZW4gYmVpbSBWZXJ3ZXJmZW4gdmVybG9yZW4gZ2VoZW4uIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAiJXUgZ2VtZWluc2FtZW4gVm9yZ8Okbmdlci1Db21taXQgZ2VmdW5kZW4iCittc2dzdHJbMV0gIiV1IGdlbWVpbnNhbWUgVm9yZ8Okbmdlci1Db21taXRzIGdlZnVuZGVuIgogCi0jOiBsaWIvaW5kZXgudGNsOjUyMCBsaWIvaW5kZXgudGNsOjU2MwotbXNnaWQgIkRvIE5vdGhpbmciCi1tc2dzdHIgIk5pY2h0cyB0dW4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU4Cittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJNZXJnZSBoYXQga2VpbmVuIENvbW1pdCB6dXLDvGNrZ2VnZWJlbiIKIAotIzogbGliL2luZGV4LnRjbDo1NDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEZWxldGUgdW50cmFja2VkIGZpbGUgJXM/IgotbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaSDCuyVzwqsgbMO2c2NoZW4/IgotCi0jOiBsaWIvaW5kZXgudGNsOjU1MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0ZSB0aGVzZSAlaSB1bnRyYWNrZWQgZmlsZXM/IgotbXNnc3RyICJEaWVzZSAlaSB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBsw7ZzY2hlbj8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NTYwCi1tc2dpZCAiRmlsZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBkZWxldGVkLiIKLW1zZ3N0ciAiRGF0ZWllbiB3ZXJkZW4gZW5kZ8O8bHRpZyBnZWzDtnNjaHQuIgotCi0jOiBsaWIvaW5kZXgudGNsOjU2NAotbXNnaWQgIkRlbGV0ZSBGaWxlcyIKLW1zZ3N0ciAiRGF0ZWllbiBsw7ZzY2hlbiIKLQotIzogbGliL2luZGV4LnRjbDo1ODYKLW1zZ2lkICJEZWxldGluZyIKLW1zZ3N0ciAiTMO2c2NoZW4iCi0KLSM6IGxpYi9pbmRleC50Y2w6NjY1Ci1tc2dpZCAiRW5jb3VudGVyZWQgZXJyb3JzIGRlbGV0aW5nIGZpbGVzOlxuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBMw7ZzY2hlbiBkZXIgRGF0ZWllbjpcbiIKLQotIzogbGliL2luZGV4LnRjbDo2NzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb25lIG9mIHRoZSAlZCBzZWxlY3RlZCBmaWxlcyBjb3VsZCBiZSBkZWxldGVkLiIKLW1zZ3N0ciAiS2VpbmUgZGVyICVkIGdld8OkaGx0ZW4gRGF0ZWllbiBrb25udGVuIGdlbMO2c2NodCB3ZXJkZW4uIgotCi0jOiBsaWIvaW5kZXgudGNsOjY3OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVkIG9mIHRoZSAlZCBzZWxlY3RlZCBmaWxlcyBjb3VsZCBub3QgYmUgZGVsZXRlZC4iCi1tc2dzdHIgIiVkIGRlciAlZCBnZXfDpGhsdGVuIERhdGVpZW4ga29ubnRlbiBuaWNodCBnZWzDtnNjaHQgd2VyZGVuLiIKLQotIzogbGliL2luZGV4LnRjbDo3MjYKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGdld8OkaGx0ZW4gRGF0ZWllbiB2ZXJ3ZXJmZW4iCi0KLSM6IGxpYi9pbmRleC50Y2w6NzMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiAlcyB2ZXJ3ZXJmZW4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogQ2hlY2tvdXQgQnJhbmNoIgotbXNnc3RyICIlcyAoJXMpOiBCcmFuY2ggYXVzY2hlY2tlbiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjEKLW1zZ2lkICJDaGVja291dCBCcmFuY2giCi1tc2dzdHIgIkJyYW5jaCBhdXNjaGVja2VuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNgotbXNnaWQgIkNoZWNrb3V0IgotbXNnc3RyICJBdXNjaGVja2VuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvb3B0aW9uLnRjbDozMTAgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5Ci1tc2dpZCAiT3B0aW9ucyIKLW1zZ3N0ciAiT3B0aW9uZW4iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgotbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiVHJhY2tpbmdicmFuY2ggYW5mb3JkZXJuIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NwotbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiVmVyYmluZHVuZyB6dSBsb2thbGVtIEJyYW5jaCBsw7ZzZW4iCi0KLSM6IGxpYi9zdGF0dXNfYmFyLnRjbDoyNjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgotbXNnc3RyICIlcyAuLi4gJSppIHZvbiAlKmkgJXMgKCUzaSUlKSIKLQotIzogbGliL3JlbW90ZS50Y2w6MjAwCi1tc2dpZCAiUHVzaCB0byIKLW1zZ3N0ciAiVmVyc2VuZGVuIG5hY2giCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIxOAotbXNnaWQgIlJlbW92ZSBSZW1vdGUiCi1tc2dzdHIgIkV4dGVybmVzIFJlcG9zaXRvcnkgZW50ZmVybmVuIgotCi0jOiBsaWIvcmVtb3RlLnRjbDoyMjMKLW1zZ2lkICJQcnVuZSBmcm9tIgotbXNnc3RyICJWZXJhbHRldGUgQnJhbmNoZXMgZW50ZmVybmVuIgotCi0jOiBsaWIvcmVtb3RlLnRjbDoyMjgKLW1zZ2lkICJGZXRjaCBmcm9tIgotbXNnc3RyICJBbmZvcmRlcm4iCi0KLSM6IGxpYi9yZW1vdGUudGNsOjI0OSBsaWIvcmVtb3RlLnRjbDoyNTMgbGliL3JlbW90ZS50Y2w6MjU4IGxpYi9yZW1vdGUudGNsOjI2NAotbXNnaWQgIkFsbCIKLW1zZ3N0ciAiQWxsZSIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogUmVuYW1lIEJyYW5jaCIKLW1zZ3N0ciAiJXMgKCVzKTogQnJhbmNoIHVtYmVuZW5uZW4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMwotbXNnaWQgIlJlbmFtZSBCcmFuY2giCi1tc2dzdHIgIkJyYW5jaCB1bWJlbmVubmVuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjgKLW1zZ2lkICJSZW5hbWUiCi1tc2dzdHIgIlVtYmVuZW5uZW4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOAotbXNnaWQgIkJyYW5jaDoiCi1tc2dzdHIgIkJyYW5jaDoiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo0NgotbXNnaWQgIk5ldyBOYW1lOiIKLW1zZ3N0ciAiTmV1ZXIgTmFtZToiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4MQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKLW1zZ3N0ciAiQml0dGUgd8OkaGxlbiBTaWUgZWluZW4gQnJhbmNoIHp1bSB1bWJlbmVubmVuLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjkyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTQKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgotbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gQnJhbmNobmFtZW4gYW4uIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiwrslc8KrIGlzdCBrZWluIHp1bMOkc3NpZ2VyIEJyYW5jaG5hbWUuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTIzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gVW1iZW5lbm5lbiB2b24gwrslc8KrLiIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo0MQotbXNnaWQgIlNlbGVjdCIKLW1zZ3N0ciAiQXVzd8OkaGxlbiIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo1NQotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICJTY2hyaWZ0ZmFtaWxpZSIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo3NgotbXNnaWQgIkZvbnQgU2l6ZSIKLW1zZ3N0ciAiU2NocmlmdGdyw7bDn2UiCi0KLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKLW1zZ2lkICJGb250IEV4YW1wbGUiCi1tc2dzdHIgIlNjaHJpZnRiZWlzcGllbCIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDoxMDUKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3MTcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgotIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiICAlcyIKIG1zZ3N0ciAiIgotIkRpZXMgaXN0IGVpbiBCZWlzcGllbHRleHQuXG4iCi0iV2VubiBJaG5lbiBkaWVzZXIgVGV4dCBnZWbDpGxsdCwgc29sbHRlbiBTaWUgZGllc2UgU2NocmlmdGFydCB3w6RobGVuLiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gaW4gZGVuIGZvbGdlbmRlbiBEYXRlaWVuIHfDvHJkZW4gZHVyY2ggZGVuIE1lcmdlXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiAgJXMiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAiVW5nw7xsdGlnZSBnbG9iYWxlIFplaWNoZW5rb2RpZXJ1bmcgwrslc8KrIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIktvbm50ZSBPYmpla3QgJyVzJyBuaWNodCBwYXJzZW4uIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJVbmfDvGx0aWdlIFJlcG9zaXRvcnktWmVpY2hlbmtvZGllcnVuZyDCuyVzwqsiCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODMyIGJ1aWx0aW4vbWVyZ2UuYzo2OTQgYnVpbHRpbi9tZXJnZS5jOjg3NAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIktvbm50ZSBJbmRleCBuaWNodCBzY2hyZWliZW4uIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTkKLW1zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgotbXNnc3RyICJWb3JlaW5zdGVsbHVuZ2VuIHdpZWRlcmhlcnN0ZWxsZW4iCisjOiBtaWR4LmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleC1EYXRlaSAlcyBpc3QgenUga2xlaW4uIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjMKLW1zZ2lkICJTYXZlIgotbXNnc3RyICJTcGVpY2hlcm4iCisjOiBtaWR4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUgMHglMDh4IGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIiIKKyJtdWx0aS1wYWNrLWluZGV4LVNpZ25hdHVyIDB4JTA4eCBzdGltbXQgbmljaHQgbWl0IFNpZ25hdHVyIDB4JTA4eCDDvGJlcmVpbi4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIFJlcG9zaXRvcnkiCi1tc2dzdHIgIiVzIFJlcG9zaXRvcnkiCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4LVZlcnNpb24gJWQgbmljaHQgZXJrYW5udC4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjEzNAotbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCi1tc2dzdHIgIkdsb2JhbCAoQWxsZSBSZXBvc2l0b3JpZXMpIgorIzogbWlkeC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggdmVyc2lvbiAldSBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAiSGFzaC1WZXJzaW9uICV1IHN0aW1tdCBuaWNodCDDvGJlcmVpbi4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0MAotbXNnaWQgIlVzZXIgTmFtZSIKLW1zZ3N0ciAiQmVudXR6ZXJuYW1lIgorIzogbWlkeC5jOjEwOAorbXNnaWQgImludmFsaWQgY2h1bmsgb2Zmc2V0ICh0b28gbGFyZ2UpIgorbXNnc3RyICJVbmfDvGx0aWdlciBDaHVuay1PZmZzZXQgKHp1IGdyb8OfKSIKIAotIzogbGliL29wdGlvbi50Y2w6MTQxCi1tc2dpZCAiRW1haWwgQWRkcmVzcyIKLW1zZ3N0ciAiRS1NYWlsLUFkcmVzc2UiCisjOiBtaWR4LmM6MTMyCittc2dpZCAidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiQWJzY2hsaWXDn2VuZGUgbXVsdGktcGFjay1pbmRleCBDaHVuay1JZCBlcnNjaGVpbnQgZWhlciBhbHMgZXJ3YXJ0ZXQuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDMKLW1zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3MtQ29tbWl0cyB6dXNhbW1lbmZhc3NlbiIKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGZlaGx0IGVyZm9yZGVybGljaGVyIHBhY2stbmFtZSBDaHVuay4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0NAotbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKLW1zZ3N0ciAiQXVzZsO8aHJsaWNoa2VpdCBkZXIgWnVzYW1tZW5mw7xocmVuLU1lbGR1bmdlbiIKKyM6IG1pZHguYzoxNDcKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBmZWhsdCBlcmZvcmRlcmxpY2hlciBPSUQgZmFub3V0IENodW5rLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTQ1Ci1tc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKLW1zZ3N0ciAiVmVyZ2xlaWNoc3N0YXRpc3RpayBuYWNoIFp1c2FtbWVuZsO8aHJlbiBhbnplaWdlbiIKKyM6IG1pZHguYzoxNDkKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGxvb2t1cCBjaHVuayIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBmZWhsdCBlcmZvcmRlcmxpY2hlciBPSUQgbG9va3VwIENodW5rLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTQ2Ci1tc2dpZCAiVXNlIE1lcmdlIFRvb2wiCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWciCisjOiBtaWR4LmM6MTUxCittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGZlaGx0IGVyZm9yZGVybGljaGVyIG9iamVjdCBvZmZzZXQgQ2h1bmsuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDgKLW1zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgotbXNnc3RyICJBdWYgRGF0ZWnDpG5kZXJ1bmdzZGF0dW0gdmVybGFzc2VuIgorIzogbWlkeC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIgorbXNnc3RyICJGYWxzY2hlIFJlaWhlbmZvbGdlIGJlaSBtdWx0aS1wYWNrLWluZGV4IFBhY2stTmFtZW46ICclcycgdm9yICclcyciCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0OQotbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKLW1zZ3N0ciAiVmVyYWx0ZXRlIFRyYWNraW5nYnJhbmNoZXMgZW50ZmVybmVuIHfDpGhyZW5kIEFuZm9yZGVydW5nIgorIzogbWlkeC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiCittc2dzdHIgIlVuZ8O8bHRpZ2UgcGFjay1pbnQtaWQ6ICV1ICgldSBQYWtldGUgaW5zZ2VzYW10KSIKIAotIzogbGliL29wdGlvbi50Y2w6MTUwCi1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCi1tc2dzdHIgIk5ldWUgQnJhbmNoZXMgYXV0b21hdGlzY2ggYWxzIFRyYWNraW5nYnJhbmNoIgorIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorIm11bHRpLXBhY2staW5kZXggc3BlaWNoZXJ0IGVpbmVuIDY0LUJpdCBPZmZzZXQsIGFiZXIgb2ZmX3QgaXN0IHp1IGtsZWluLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTUxCi1tc2dpZCAiVXNlIFRleHRjb252IEZvciBEaWZmcyBhbmQgQmxhbWVzIgotbXNnc3RyICJCZW51dHplIMK7dGV4dGNvbnbCqyBmw7xyIFZlcmdsZWljaCB1bmQgQW5ub3RpZXJlbiIKKyM6IG1pZHguYzoyODgKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJGZWhsZXIgYmVpIFZvcmJlcmVpdHVuZyBkZXIgUGFja2RhdGVpIGF1cyBtdWx0aS1wYWNrLWluZGV4LiIKIAotIzogbGliL29wdGlvbi50Y2w6MTUyCi1tc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCi1tc2dzdHIgIktvcGllLUFubm90aWVyZW4gbnVyIGJlaSBnZcOkbmRlcnRlbiBEYXRlaWVuIgorIzogbWlkeC5jOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEhpbnp1ZsO8Z2VuIHZvbiBQYWNrZGF0ZWkgJyVzJy4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE1MwotbXNnaWQgIk1heGltdW0gTGVuZ3RoIG9mIFJlY2VudCBSZXBvc2l0b3JpZXMgTGlzdCIKLW1zZ3N0ciAiQW56YWhsIEVpbnRyw6RnZSBpbiDCu0xldHp0ZSBSZXBvc2l0b3JpZXPCqyIKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiBwYWNrLWluZGV4ICclcyciCiAKLSM6IGxpYi9vcHRpb24udGNsOjE1NAotbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgotbXNnc3RyICJNaW5kZXN0emFobCBaZWljaGVuIGbDvHIgS29waWUtQW5ub3RpZXJlbiIKKyM6IG1pZHguYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIkZlaGxlciBiZWltIExva2FsaXNpZXJlbiB2b24gT2JqZWt0ICVkIGluIFBhY2tkYXRlaS4iCiAKLSM6IGxpYi9vcHRpb24udGNsOjE1NQotbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgotbXNnc3RyICJBbnphaGwgVGFnZSBmw7xyIEFubm90aWVyZW4tSGlzdG9yaWVuLUtvbnRleHQiCisjOiBtaWR4LmM6ODQyCittc2dpZCAiQWRkaW5nIHBhY2tmaWxlcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJQYWNrZGF0ZWllbiB6dW0gbXVsdGktcGFjay1pbmRleCBoaW56dWbDvGdlbiIKIAotIzogbGliL29wdGlvbi50Y2w6MTU2Ci1tc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKLW1zZ3N0ciAiQW56YWhsIGRlciBLb250ZXh0emVpbGVuIGJlaW0gVmVyZ2xlaWNoIgorIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAiUGFjay1EYXRlaSAlcyB6dW0gV2VnbGFzc2VuIG5pY2h0IGdlZnVuZGVuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTcKLW1zZ2lkICJBZGRpdGlvbmFsIERpZmYgUGFyYW1ldGVycyIKLW1zZ3N0ciAiWnVzw6R0emxpY2hlIFZlcmdsZWljaC0vZGlmZi1QYXJhbWV0ZXIiCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiQ2h1bmtzIHp1bSBtdWx0aS1wYWNrLWluZGV4IHNjaHJlaWJlbiIKIAotIzogbGliL29wdGlvbi50Y2w6MTU4Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKLW1zZ3N0ciAiVGV4dGJyZWl0ZSBkZXIgQ29tbWl0LUJlc2NocmVpYnVuZyIKKyM6IG1pZHguYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbGVhciBtdWx0aS1wYWNrLWluZGV4IGF0ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMw7ZzY2hlbiBkZXMgbXVsdGktcGFjay1pbmRleCBiZWkgJXMiCiAKLSM6IGxpYi9vcHRpb24udGNsOjE1OQotbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKLW1zZ3N0ciAiTmFtZW5zdm9ybGFnZSBmw7xyIG5ldWUgQnJhbmNoZXMiCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJTdWNoZSBuYWNoIHJlZmVyZW56aWVydGVuIFBhY2stRGF0ZWllbiIKIAotIzogbGliL29wdGlvbi50Y2w6MTYwCi1tc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgotbXNnc3RyICJWb3JlaW5nZXN0ZWxsdGUgWmVpY2hlbmtvZGllcnVuZyIKLQotIzogbGliL29wdGlvbi50Y2w6MTYxCi1tc2dpZCAiV2FybiBiZWZvcmUgY29tbWl0dGluZyB0byBhIGRldGFjaGVkIGhlYWQiCi1tc2dzdHIgIldhcm5lbiB2b3IgQ29tbWl0dGVuIGF1ZiBsb3NnZWzDtnN0ZSBCcmFuY2hzcGl0emUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MgotbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgotbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGJlcmVpdHN0ZWxsZW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MwotbXNnaWQgIlNob3cgdW50cmFja2VkIGZpbGVzIgotbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGFuemVpZ2VuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjQKLW1zZ2lkICJUYWIgc3BhY2luZyIKLW1zZ3N0ciAiVGFidWxhdG9yLUJyZWl0ZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTgyIGxpYi9vcHRpb24udGNsOjE5NyBsaWIvb3B0aW9uLnRjbDoyMjAgbGliL29wdGlvbi50Y2w6MjgyCi0jOiBsaWIvZGF0YWJhc2UudGNsOjU3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXM6IgotbXNnc3RyICIlczoiCi0KLSM6IGxpYi9vcHRpb24udGNsOjIxMAotbXNnaWQgIkNoYW5nZSIKLW1zZ3N0ciAiw4RuZGVybiIKLQotIzogbGliL29wdGlvbi50Y2w6MjU0Ci1tc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCi1tc2dzdHIgIlfDtnJ0ZXJidWNoIFJlY2h0c2NocmVpYnByw7xmdW5nOiIKLQotIzogbGliL29wdGlvbi50Y2w6Mjg0Ci1tc2dpZCAiQ2hhbmdlIEZvbnQiCi1tc2dzdHIgIlNjaHJpZnRhcnQgw6RuZGVybiIKLQotIzogbGliL29wdGlvbi50Y2w6Mjg4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hvb3NlICVzIgotbXNnc3RyICIlcyB3w6RobGVuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyOTQKLW1zZ2lkICJwdC4iCi1tc2dzdHIgInB0LiIKLQotIzogbGliL29wdGlvbi50Y2w6MzA4Ci1tc2dpZCAiUHJlZmVyZW5jZXMiCi1tc2dzdHIgIkVpbnN0ZWxsdW5nZW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjM0NQotbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCi1tc2dzdHIgIk9wdGlvbmVuIGtvbm50ZW4gbmljaHQgZ2VzcGVpY2hlcnQgd2VyZGVuOiIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NDMKLW1zZ2lkICJEZWZhdWx0IgotbXNnc3RyICJWb3JlaW5zdGVsbHVuZyIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTeXN0ZW0gKCVzKSIKLW1zZ3N0ciAiU3lzdGVtd2VpdCAoJXMpIgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQotbXNnaWQgIk90aGVyIgotbXNnc3RyICJBbmRlcmUiCi0KLSM6IGxpYi90b29scy50Y2w6NzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCi1tc2dzdHIgIlVtIMK7JXPCqyB6dSBzdGFydGVuLCBtdXNzIGVpbmUgRGF0ZWkgYXVzZ2V3w6RobHQgc2Vpbi4iCi0KLSM6IGxpYi90b29scy50Y2w6OTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICUxJHMgb24gZmlsZSBcIiUyJHNcIj8iCi1tc2dzdHIgIldvbGxlbiBTaWUgJTEkcyB3aXJrbGljaCBhdWYgRGF0ZWkgwrslMiRzwqsgc3RhcnRlbj8iCi0KLSM6IGxpYi90b29scy50Y2w6OTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKLW1zZ3N0ciAiV29sbGVuIFNpZSAlcyB3aXJrbGljaCBzdGFydGVuPyIKLQotIzogbGliL3Rvb2xzLnRjbDoxMTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sOiAlcyIKLW1zZ3N0ciAiV2Vya3pldWc6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjExOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICJTdGFydGVuOiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgotbXNnc3RyICJXZXJremV1ZyBlcmZvbGdyZWljaCBhYmdlc2NobG9zc2VuOiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGZhaWxlZDogJXMiCi1tc2dzdHIgIldlcmt6ZXVnIGZlaGxnZXNjaGxhZ2VuOiAlcyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6OAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCi1tc2dzdHIgIktvbmZsaWt0IGR1cmNoIEJhc2lzdmVyc2lvbiBlcnNldHplbj8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjkKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKLW1zZ3N0ciAiS29uZmxpa3QgZHVyY2ggZGllc2VuIEJyYW5jaCBlcnNldHplbj8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCi1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKLW1zZ3N0ciAiS29uZmxpa3QgZHVyY2ggYW5kZXJlbiBCcmFuY2ggZXJzZXR6ZW4/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAotIywgdGNsLWZvcm1hdAorIzogbWlkeC5jOjExMjMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCi0iXG4iCi0iJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKLSJcbiIKLSJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKIG1zZ3N0ciAiIgotIkhpbndlaXM6IERlciBWZXJnbGVpY2ggemVpZ3QgbnVyIGtvbmZsaWt0dmVydXJzYWNoZW5kZSDDhG5kZXJ1bmdlbiBhbi5cbiIKLSJcbiIKLSLCuyVzwqsgd2lyZCDDvGJlcnNjaHJpZWJlbi5cbiIKLSJcbiIKLSJEaWVzZSBPcGVyYXRpb24ga2FubiBudXIgcsO8Y2tnw6RuZ2lnIGdlbWFjaHQgd2VyZGVuLCB3ZW5uIGRpZVxuIgotIlp1c2FtbWVuZsO8aHJ1bmcgZXJuZXV0IGdlc3RhcnRldCB3aXJkLiIKKyJVbmfDvGx0aWdlIG9pZCBmYW5vdXQgUmVpaGVuZm9sZ2U6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSAiCisiZmFub3V0WyVkXSIKIAotIzogbGliL21lcmdldG9vbC50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKLW1zZ3N0ciAiRGF0ZWkgwrslc8KrIGhhdCBuaWNodCBhdWZnZWzDtnN0ZSBLb25mbGlrdGUuIFRyb3R6ZGVtIGJlcmVpdHN0ZWxsZW4/IgorIzogbWlkeC5jOjExMjgKK21zZ2lkICJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIlZlcmlmaXppZXJlIE9JRC1SZWloZW5mb2xnZSBpbSBtdWx0aS1wYWNrLWluZGV4IgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKLW1zZ3N0ciAiQXVmbMO2c3VuZyBoaW56dWdlZsO8Z3QgZsO8ciAlcyIKKyM6IG1pZHguYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICJVbmfDvGx0aWdlIG9pZCBsb29rdXAgUmVpaGVuZm9sZ2U6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQotbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKLW1zZ3N0ciAiIgotIktvbmZsaWt0ZSBkdXJjaCBnZWzDtnNjaHRlIERhdGVpZW4gb2RlciBzeW1ib2xpc2NoZSBMaW5rcyBrw7ZubmVuIG5pY2h0IGR1cmNoICIKLSJkYXMgWnVzYW1lbmbDvGhydW5nc3dlcmt6ZXVnIGdlbMO2c3Qgd2VyZGVuLiIKKyM6IG1pZHguYzoxMTU3Cittc2dpZCAiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIgorbXNnc3RyICJTb3J0aWVyZSBPYmpla3RlIG5hY2ggUGFjay1EYXRlaSIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Ci1tc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKLW1zZ3N0ciAiS29uZmxpa3QtRGF0ZWkgZXhpc3RpZXJ0IG5pY2h0IgorIzogbWlkeC5jOjExNjQKK21zZ2lkICJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiCittc2dzdHIgIsOcYmVycHLDvGZlIE9iamVrdC1PZmZzZXRzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNDYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKLW1zZ3N0ciAiS2VpbiBHVUkgWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1Zzogwrslc8KrIgorIzogbWlkeC5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjayBlbnRyeSBmb3Igb2lkWyVkXSA9ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgUGFjay1FaW50cmFncyBmw7xyIG9pZFslZF0gPSAlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6Mjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgotbXNnc3RyICJVbmJla2FubnRlcyBadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnOiDCuyVzwqsiCisjOiBtaWR4LmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVzIFBhY2stSW5kZXggZsO8ciBQYWNrZGF0ZWkgJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMxMAotbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIGzDpHVmdCBiZXJlaXRzLiBTb2xsIGVzIGFiZ2Vicm9jaGVuIHdlcmRlbj8iCisjOiBtaWR4LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCBmb3Igb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorbXNnc3RyICJGYWxzY2hlciBPYmpla3QtT2Zmc2V0IGbDvHIgb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMzAKLSMsIHRjbC1mb3JtYXQKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJSZWZlcmVuemllcnRlIE9iamVrdGUgesOkaGxlbiIKKworIzogbWlkeC5jOjEyMzAKK21zZ2lkICJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJTdWNoZW4gdW5kIEzDtnNjaGVuIHZvbiB1bnJlZmVyZW56aWVydGVuIFBhY2stRGF0ZWllbiIKKworIzogbWlkeC5jOjEzODgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIgorbXNnc3RyICJLb25udGUgJ3BhY2stb2JqZWN0cycgbmljaHQgYXVzZsO8aHJlbiIKKworIzogbWlkeC5jOjE0MDcKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiS29ubnRlICdwYWNrLW9iamVjdHMnIG5pY2h0IGJlZW5kZW4iCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIkthbm4gbGF6eV9kaXIgVGhyZWFkIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIkthbm4gbGF6eV9uYW1lIFRocmVhZCBuaWNodCBlcnpldWdlbjogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiS2FubiBsYXp5X25hbWUgVGhyZWFkIG5pY2h0IGJlaXRyZXRlbjogJXMiCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjc3CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgotIiVzIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgogbXNnc3RyICIiCi0iRmVobGVyIGJlaW0gQWJydWZlbiBkZXIgRGF0ZWl2ZXJzaW9uZW46XG4iCi0iJXMiCisiU2llIGhhYmVuIElocmVuIHZvcmhlcmlnZW4gTWVyZ2Ugdm9uIE5vdGl6ZW4gbmljaHQgYWJnZXNjaGxvc3NlbiAoJXMgIgorImV4aXN0aWVydCkuXG4iCisiQml0dGUgYmVudXR6ZW4gU2llICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9kZXIgJ2dpdCBub3RlcyBtZXJnZSAtLSIKKyJhYm9ydCcsIHVtXG4iCisiZGVuIHZvcmhlcmlnZW4gTWVyZ2UgenUgY29tbWl0dGVuIGJ6dy4gYWJ6dWJyZWNoZW4sIGJldm9yIFNpZSBlaW5lbiBuZXVlbiAiCisiTWVyZ2VcbiIKKyJ2b24gTm90aXplbiBiZWdpbm5lbi4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM1MAotIywgdGNsLWZvcm1hdAorIzogbm90ZXMtbWVyZ2UuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLiIKK21zZ3N0ciAiU2llIGhhYmVuIElocmVuIE1lcmdlIHZvbiBOb3RpemVuIG5pY2h0IGFiZ2VzY2hsb3NzZW4gKCVzIGV4aXN0aWVydCkuIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisiS2FubiB1bmluaXRpYWxpc2llcnRlcy91bnJlZmVyZW56aWVydGVzIE5vdGl6LVZlcnplaWNobmlzIG5pY2h0IGNvbW1pdHRlbi4iCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgbm90ZXMucmV3cml0ZU1vZGUgV2VydDogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiIKKyJVbXNjaHJlaWJlbiBkZXIgTm90aXplbiBpbiAlcyB6dXLDvGNrZ2V3aWVzZW4gKGF1w59lcmhhbGIgdm9uIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciAlcyBXZXJ0OiAnJXMnIgorCisjOiBvYmplY3QuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgT2JqZWt0dHlwIFwiJXNcIiIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAiT2JqZWt0ICVzIGlzdCBlaW4gJXMsIGtlaW4gJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAiT2JqZWt0ICVzIGhhdCBlaW5lIHVuYmVrYW5udGUgVHlwLUlkZW50aWZpa2F0aW9uICVkIgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIktvbm50ZSBPYmpla3QgJyVzJyBuaWNodCBwYXJzZW4uIgorCisjOiBvYmplY3QuYzoyNjYgb2JqZWN0LmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggJXMiCittc2dzdHIgIkhhc2ggc3RpbW10IG5pY2h0IG1pdCAlcyDDvGJlcmVpbi4iCisKKyM6IHBhY2tmaWxlLmM6NjQxCittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIk9mZnNldCB2b3IgRW5kZSBkZXIgUGFja2RhdGVpIChmZWhsZXJoYWZ0ZSBJbmRleGRhdGVpPykiCisKKyM6IHBhY2tmaWxlLmM6MTg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgIk9mZnNldCB2b3IgQmVnaW5uIGRlcyBQYWNrLUluZGV4IGbDvHIgJXMgKGJlc2Now6RkaWd0ZXIgSW5kZXg/KSIKKworIzogcGFja2ZpbGUuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAiT2Zmc2V0IGhpbnRlciBFbmRlIGRlcyBQYWNrLUluZGV4IGbDvHIgJXMgKGFiZ2VzY2huaXR0ZW5lciBJbmRleD8pIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJXMgZXJmb3JkZXJ0IGVpbmVuIFdlcnQuIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIGlzdCBpbmtvbXBhdGliZWwgbWl0ICVzLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogaW5jb21wYXRpYmxlIHdpdGggc29tZXRoaW5nIGVsc2UiCittc2dzdHIgIiVzOiBpbmtvbXBhdGliZWwgbWl0IGV0d2FzIGFuZGVyZW0iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MiBwYXJzZS1vcHRpb25zLmM6OTYgcGFyc2Utb3B0aW9ucy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0YWtlcyBubyB2YWx1ZSIKK21zZ3N0ciAiJXMgZXJ3YXJ0ZXQga2VpbmVuIFdlcnQiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiVzIGlzdCBuaWNodCB2ZXJmw7xnYmFyLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiIKKyIlcyBlcndhcnRldCBlaW5lbiBuaWNodC1uZWdhdGl2ZW4gSW50ZWdlci1XZXJ0IG1pdCBlaW5lbSBvcHRpb25hbGVuIGsvbS9nICIKKyJTdWZmaXgiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICJNZWhyZGV1dGlnZSBPcHRpb246ICVzIChrYW5uIC0tJXMlcyBvZGVyIC0tJXMlcyBzZWluKSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMyBwYXJzZS1vcHRpb25zLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIKK21zZ3N0ciAiTWVpbnRlbiBTaWUgYC0tJXNgIChtaXQgendlaSBTdHJpY2hlbj8pIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIlVuYmVrYW5udGUgT3B0aW9uOiBgJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgIlVuYmVrYW5udGVyIFNjaGFsdGVyIGAlYyciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub24tYXNjaWkgb3B0aW9uIGluIHN0cmluZzogYCVzJyIKK21zZ3N0ciAiVW5iZWthbm50ZSBuaWNodC1Bc2NpaSBPcHRpb24gaW4gU3RyaW5nOiBgJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODg4Cittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICJWZXJ3ZW5kdW5nOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgICAgICBvZGVyOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk1NQorbXNnaWQgIi1OVU0iCittc2dzdHIgIi1OVU0iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgb2YgLS0lcyIKK21zZ3N0ciAiQWxpYXMgZsO8ciAtLSVzIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIk9wdGlvbiBgJXMnIGVyd2FydGV0IGVpbmVuIG51bWVyaXNjaGVuIFdlcnQuIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXMgQWJsYXVmZGF0dW0gJyVzJyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAiT3B0aW9uIGAlcycgZXJ3YXJ0ZXQgXCJhbHdheXNcIiwgXCJhdXRvXCIgb2RlciBcIm5ldmVyXCIuIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgImZlaGxlcmhhZnRlciBPYmpla3QtTmFtZSAnJXMnIgorCisjOiBwYXRoLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICJLb25udGUgR3J1cHBlbnNjaHJlaWJyZWNodCBmw7xyICVzIG5pY2h0IHNldHplbi4iCisKKyM6IHBhdGhzcGVjLmM6MTMwCittc2dpZCAiRXNjYXBlIGNoYXJhY3RlciAnXFwnIG5vdCBhbGxvd2VkIGFzIGxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiCittc2dzdHIgIkVzY2FwZS1aZWljaGVuICdcXCcgYWxzIGxldHp0ZXMgWmVpY2hlbiBpbiBBdHRyaWJ1dHdlcnQgbmljaHQgZXJsYXVidCIKKworIzogcGF0aHNwZWMuYzoxNDgKK21zZ2lkICJPbmx5IG9uZSAnYXR0cjonIHNwZWNpZmljYXRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIkVzIGlzdCBudXIgZWluZSBBbmdhYmUgdm9uICdhdHRyOicgZXJsYXVidC4iCisKKyM6IHBhdGhzcGVjLmM6MTUxCittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICJBbmdhYmUgdm9uICdhdHRyOicgZGFyZiBuaWNodCBsZWVyIHNlaW4iCisKKyM6IHBhdGhzcGVjLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEF0dHJpYnV0bmFtZSAlcyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisiR2xvYmFsZSBFaW5zdGVsbHVuZ2VuIHp1ciBQZmFkc3BlemlmaWthdGlvbiAnZ2xvYicgdW5kICdub2dsb2InIHNpbmQgIgorImlua29tcGF0aWJlbC4iCisKKyM6IHBhdGhzcGVjLmM6MjY2CiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKLSJcbiIKLSIlcyIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCiBtc2dzdHIgIiIKLSJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuOlxuIgotIlxuIgotIiVzIgorIkdsb2JhbGUgRWluc3RlbGx1bmcgenVyIFBmYWRzcGV6aWZpa2F0aW9uICdsaXRlcmFsJyBpc3QgaW5rb21wYXRpYmVsXG4iCisibWl0IGFsbGVuIGFuZGVyZW4gT3B0aW9uZW4uIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNTQKLW1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgc3RhcnRlbi4uLiIKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICJ1bmfDvGx0aWdlciBQYXJhbWV0ZXIgZsO8ciBQZmFkc3BlemlmaWthdGlvbnNhbmdhYmUgJ3ByZWZpeCciCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM4MiBsaWIvbWVyZ2V0b29sLnRjbDozOTAKLW1zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgZmVobGdlc2NobGFnZW4uIgorIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAidW5nw7xsdGlnZSBQZmFkc3BlemlmaWthdGlvbnNhbmdhYmUgJyUuKnMnIGluICclcyciCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjIyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogQWRkIFRvb2wiCi1tc2dzdHIgIiVzICglcyk6IFdlcmt6ZXVnIGhpbnp1ZsO8Z2VuIgorIzogcGF0aHNwZWMuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICJGZWhsZW5kZXMgJyknIGFtIEVuZGUgZGVyIFBmYWRzcGV6aWZpa2F0aW9uc2FuZ2FiZSBpbiAnJXMnIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAotbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgotbXNnc3RyICJOZXVlcyBLb21tYW5kbyBmw7xyIFdlcmt6ZXVnIGhpbnp1ZsO8Z2VuIgorIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIm5pY2h0IHVudGVyc3TDvHR6dGUgUGZhZHNwZXppZmlrYXRpb25zYW5nYWJlICclYycgaW4gJyVzJyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQKLW1zZ2lkICJBZGQgZ2xvYmFsbHkiCi1tc2dzdHIgIkdsb2JhbCBoaW56dWbDvGdlbiIKKyM6IHBhdGhzcGVjLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczogJ2xpdGVyYWwnIHVuZCAnZ2xvYicgc2luZCBpbmtvbXBhdGliZWwiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjQ2Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICJFaW56ZWxoZWl0ZW4gZGVzIFdlcmt6ZXVncyIKKyM6IHBhdGhzcGVjLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXM6ICclcycgbGllZ3QgYXXDn2VyaGFsYiBkZXMgUmVwb3NpdG9yaWVzIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQotbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgotbXNnc3RyICJCZW51dHplbiBTaWUgZWluZW4gU2NocsOkZ3N0cmljaCDCuy/CqywgdW0gVW50ZXJtZW7DvHMgenUgZXJzdGVsbGVuOiIKKyM6IHBhdGhzcGVjLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiJyVzJyAoS8O8cnplbDogJyVjJykiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjYwCi1tc2dpZCAiQ29tbWFuZDoiCi1tc2dzdHIgIktvbW1hbmRvOiIKKyM6IHBhdGhzcGVjLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiIKKyIlczogUGZhZHNwZXppZmlrYXRpb25zYW5nYWJlIHdpcmQgdm9uIGRpZXNlbSBCZWZlaGwgbmljaHQgdW50ZXJzdMO8dHp0OiAlcyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NzEKLW1zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgotbXNnc3RyICJCZXN0w6R0aWd1bmdzZnJhZ2Ugdm9yIFN0YXJ0ZW4gYW56ZWlnZW4iCisjOiBwYXRoc3BlYy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIlBmYWRzcGV6aWZpa2F0aW9uICclcycgaXN0IGhpbnRlciBlaW5lciBzeW1ib2xpc2NoZW4gVmVya27DvHBmdW5nIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NwotbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgotbXNnc3RyICJCZW51dHplciBuYWNoIFZlcnNpb24gZnJhZ2VuIChzZXR6dCAkUkVWSVNJT04pIgorIzogcGF0aHNwZWMuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBpcyBiYWRseSBxdW90ZWQ6ICVzIgorbXNnc3RyICJaZWlsZSBlbnRow6RsdCBmYWxzY2hlIEFuZsO8aHJ1bmdzemVpY2hlbjogJXMiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjgyCi1tc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCi1tc2dzdHIgIkJlbnV0emVyIG5hY2ggenVzw6R0emxpY2hlbiBBcmd1bWVudGVuIGZyYWdlbiAoc2V0enQgJEFSR1MpIgorIzogcGt0LWxpbmUuYzo5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmbHVzaCBwYWNrZXQiCittc2dzdHIgIktvbm50ZSBGbHVzaC1QYWtldCBuaWNodCBzY2hyZWliZW4uIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo4OQotbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKLW1zZ3N0ciAiS2VpbiBBdXNnYWJlZmVuc3RlciB6ZWlnZW4iCisjOiBwa3QtbGluZS5jOjk5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGRlbGltIHBhY2tldCIKK21zZ3N0ciAiS29ubnRlIERlbGltLVBha2V0IG5pY2h0IHNjaHJlaWJlbi4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjk0Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAiTnVyIHN0YXJ0ZW4sIHdlbm4gZWluIFZlcmdsZWljaCBnZXfDpGhsdCBpc3QgKCRGSUxFTkFNRSBpc3QgbmljaHQgbGVlcikiCisjOiBwa3QtbGluZS5jOjEwNgorbXNnaWQgImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIkZsdXNoIGJlaW0gU2NocmVpYmVuIGRlcyBQYWtldHMgZmVobGdlc2NobGFnZW4uIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMTgKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZWluZW4gV2Vya3pldWduYW1lbiBhbi4iCisjOiBwa3QtbGluZS5jOjE0NiBwa3QtbGluZS5jOjIzMgorbXNnaWQgInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIKK21zZ3N0ciAiUHJvdG9rb2xsZmVobGVyOiB1bm3DtmdsaWNoIGxhbmdlIFplaWxlIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJXZXJremV1ZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICJTY2hyZWliZW4gZGVzIFBha2V0cyBtaXQgRm9ybWF0IGZlaGxnZXNjaGxhZ2VuLiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4Ci0jLCB0Y2wtZm9ybWF0CisjOiBwa3QtbGluZS5jOjE5NgorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIgorbXNnc3RyICIiCisiU2NocmVpYmVuIGRlcyBQYWtldHMgZmVobGdlc2NobGFnZW4gLSBEYXRlbiDDvGJlcnNjaHJlaXRlbiBtYXhpbWFsZSBQYWtldGdyw7bDn2UiCisKKyM6IHBrdC1saW5lLmM6MjAzIHBrdC1saW5lLmM6MjEwCittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAiU2NocmVpYmVuIGRlcyBQYWtldHMgZmVobGdlc2NobGFnZW4uIgorCisjOiBwa3QtbGluZS5jOjI5NQorbXNnaWQgInJlYWQgZXJyb3IiCittc2dzdHIgIkxlc2VmZWhsZXIiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgIkRpZSBHZWdlbnNlaXRlIGhhdCB1bmVyd2FydGV0IGFiZ2Vicm9jaGVuLiIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgIlByb3Rva29sbGZlaGxlcjogdW5nw7xsdGlnZXMgWmVpY2hlbiBmw7xyIFplaWxlbmzDpG5nZTogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAiUHJvdG9rb2xsZmVobGVyOiB1bmfDvGx0aWdlIFplaWxlbmzDpG5nZSAlZCIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiRmVobGVyIGFtIGFuZGVyZW4gRW5kZTogJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICJBa3R1YWxpc2llcmUgSW5kZXgiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWRlZCBsc3RhdDogJXMiCittc2dzdHIgIkthbm4gVGhyZWFkIGbDvHIgbHN0YXQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBwcmV0dHkuYzo5ODEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICJLb25udGUgLS1wcmV0dHkgRm9ybWF0IG5pY2h0IHBhcnNlbi4iCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjIzCittc2dpZCAiUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJSZW1vdGUtUmVwb3NpdG9yeSBvaG5lIFVSTCIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiUHJvbWlzb3ItUmVtb3RlLU5hbWUga2FubiBuaWNodCBtaXQgJy8nIGJlZ2lubmVuOiAlcyIKKworIzogcmFuZ2UtZGlmZi5jOjc1Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGBsb2dgIgorbXNnc3RyICJLb25udGUgYGxvZ2AgbmljaHQgc3RhcnRlbi4iCisKKyM6IHJhbmdlLWRpZmYuYzo3NworbXNnaWQgImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIKK21zZ3N0ciAiS29ubnRlIEF1c2dhYmUgdm9uIGBsb2dgIG5pY2h0IGxlc2VuLiIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICJLb25udGUgQ29tbWl0ICclcycgbmljaHQgcGFyc2VuLiIKKworIzogcmFuZ2UtZGlmZi5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciCittc2dzdHIgIktvbm50ZSBHaXQtSGVhZGVyICclLipzJyBuaWNodCBwYXJzZW4uIgorCisjOiByYW5nZS1kaWZmLmM6Mjg1Cittc2dpZCAiZmFpbGVkIHRvIGdlbmVyYXRlIGRpZmYiCittc2dzdHIgIkZlaGxlciBiZWltIEdlbmVyaWVyZW4gZGVzIERpZmZzLiIKKworIzogcmFuZ2UtZGlmZi5jOjUxOCByYW5nZS1kaWZmLmM6NTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciCittc2dzdHIgIktvbm50ZSBMb2cgZsO8ciAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IHJlYWQtY2FjaGUuYzo2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgYWRkIGZpbGUgYWxpYXMgJyVzJyAoJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCkiCittc2dzdHIgIiIKKyJEYXRlaWFsaWFzICclcycgd2lyZCBuaWNodCBoaW56dWdlZsO8Z3QgKCclcycgZXhpc3RpZXJ0IGJlcmVpdHMgaW0gSW5kZXgpLiIKKworIzogcmVhZC1jYWNoZS5jOjY5NgorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJLYW5uIGtlaW5lbiBsZWVyZW4gQmxvYiBpbiBkaWUgT2JqZWt0ZGF0ZW5iYW5rIHNjaHJlaWJlbi4iCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlczogS2FubiBudXIgcmVndWzDpHJlIERhdGVpZW4sIHN5bWJvbGlzY2hlIExpbmtzIG9kZXIgR2l0LVZlcnplaWNobmlzc2UgIgorImhpbnp1ZsO8Z2VuLiIKKworIzogcmVhZC1jYWNoZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIiclcycgaGF0IGtlaW5lbiBDb21taXQgYXVzZ2VjaGVja3QiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIERhdGVpICclcycgbmljaHQgaW5kaXppZXJlbi4iCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBkZW0gSW5kZXggaGluenVmw7xnZW4uIgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGxlc2VuLiIKKworIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJyVzJyBzY2hlaW50IGVpbmUgRGF0ZWkgdW5kIGVpbiBWZXJ6ZWljaG5pcyB6dSBzZWluLiIKKworIzogcmVhZC1jYWNoZS5jOjE1MzEKK21zZ2lkICJSZWZyZXNoIGluZGV4IgorbXNnc3RyICJBa3R1YWxpc2llcmUgSW5kZXgiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjQ2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCi0iJXMiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgogbXNnc3RyICIiCi0iV2Vya3pldWcga29ubnRlIG5pY2h0IGhpbnp1Z2Vmw7xndCB3ZXJkZW46XG4iCi0iXG4iCi0iJXMiCisiaW5kZXgudmVyc2lvbiBnZXNldHp0LCBhYmVyIFdlcnQgdW5nw7xsdGlnLlxuIgorIlZlcndlbmRlIFZlcnNpb24gJWkiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IFJlbW92ZSBUb29sIgotbXNnc3RyICIlcyAoJXMpOiBXZXJremV1ZyBlbnRmZXJuZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE5MwotbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgotbXNnc3RyICJXZXJremV1Z2tvbW1hbmRvcyBlbnRmZXJuZW4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE5OAotbXNnaWQgIlJlbW92ZSIKLW1zZ3N0ciAiRW50ZmVybmVuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKLW1zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgotbXNnc3RyICIoV2Vya3pldWdlIGbDvHIgbG9rYWxlcyBSZXBvc2l0b3J5IHdlcmRlbiBpbiBCbGF1IGFuZ2V6ZWlndCkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI4MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IgotbXNnc3RyICIlcyAoJXMpOiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjkyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgotbXNnc3RyICJLb21tYW5kbyBhdWZydWZlbjogJXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjMwNgotbXNnaWQgIkFyZ3VtZW50cyIKLW1zZ3N0ciAiQXJndW1lbnRlIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozNDEKLW1zZ2lkICJPSyIKLW1zZ3N0ciAiT2siCi0KLSM6IGxpYi9zZWFyY2gudGNsOjQ4Ci1tc2dpZCAiRmluZDoiCi1tc2dzdHIgIlN1Y2hlbjoiCi0KLSM6IGxpYi9zZWFyY2gudGNsOjUwCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAiTsOkY2hzdGVyIgotCi0jOiBsaWIvc2VhcmNoLnRjbDo1MQotbXNnaWQgIlByZXYiCi1tc2dzdHIgIlZvcmlnZXIiCi0KLSM6IGxpYi9zZWFyY2gudGNsOjUyCi1tc2dpZCAiUmVnRXhwIgotbXNnc3RyICJSZWdBdXNkcnVjayIKLQotIzogbGliL3NlYXJjaC50Y2w6NTQKLW1zZ2lkICJDYXNlIgotbXNnc3RyICJHcm/Dny9rbGVpbiIKLQotIzogbGliL3Nob3J0Y3V0LnRjbDo4IGxpYi9zaG9ydGN1dC50Y2w6NDMgbGliL3Nob3J0Y3V0LnRjbDo3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IENyZWF0ZSBEZXNrdG9wIEljb24iCi1tc2dzdHIgIiVzICglcyk6IERlc2t0b3AtSWNvbiBlcnN0ZWxsZW4iCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjQgbGliL3Nob3J0Y3V0LnRjbDo2NQotbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCi1tc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVya27DvHBmdW5nOiIKLQotIzogbGliL3Nob3J0Y3V0LnRjbDoxNDAKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCi1tc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXMgSWNvbnM6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKLW1zZ3N0ciAiJXMgKCVzKTogQnJhbmNoIGluIGV4dGVybmVtIFJlcG9zaXRvcnkgbMO2c2NoZW4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKLW1zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgotbXNnc3RyICJCcmFuY2ggaW4gZXh0ZXJuZW0gUmVwb3NpdG9yeSBsw7ZzY2hlbiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0OAotbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiSW4gUmVwb3NpdG9yeSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4OAotbXNnaWQgIkJyYW5jaGVzIgotbXNnc3RyICJCcmFuY2hlcyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTAKLW1zZ2lkICJEZWxldGUgT25seSBJZiIKLW1zZ3N0ciAiTnVyIGzDtnNjaGVuLCB3ZW5uIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMgotbXNnaWQgIk1lcmdlZCBJbnRvOiIKLW1zZ3N0ciAiWnVzYW1tZW5nZWbDvGhydCBtaXQ6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEyMCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTMKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgIkltbWVyIChLZWluZSBadXNhbW1lbmbDvGhydW5nc3Byw7xmdW5nKSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKLW1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCi1tc2dzdHIgIkbDvHIgwrtadXNhbW1lbmbDvGhyZW4gbWl0wqsgbXVzcyBlaW4gQnJhbmNoIGFuZ2VnZWJlbiB3ZXJkZW4uIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NQotIywgdGNsLWZvcm1hdAorIzogcmVhZC1jYWNoZS5jOjE2NTYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgotIlxuIgotIiAtICVzIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCiBtc2dzdHIgIiIKLSJGb2xnZW5kZSBCcmFuY2hlcyBzaW5kIG5vY2ggbmljaHQgbWl0IMK7JXPCqyB6dXNhbW1lbmdlZsO8aHJ0OlxuIgotIlxuIgotIiAtICVzIgorIkdJVF9JTkRFWF9WRVJTSU9OIGdlc2V0enQsIGFiZXIgV2VydCB1bmfDvGx0aWcuXG4iCisiVmVyd2VuZGUgVmVyc2lvbiAlaSIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxOTAKLSMsIHRjbC1mb3JtYXQKKyM6IHJlYWQtY2FjaGUuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICJVbmfDvGx0aWdlIFNpZ25hdHVyIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgIlVuZ8O8bHRpZ2UgSW5kZXgtVmVyc2lvbiAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjQKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAiVW5nw7xsdGlnZSBTSEExLVNpZ25hdHVyIGRlciBJbmRleC1EYXRlaS4iCisKKyM6IHJlYWQtY2FjaGUuYzoxNzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IHVzZXMgJS40cyBleHRlbnNpb24sIHdoaWNoIHdlIGRvIG5vdCB1bmRlcnN0YW5kIgorbXNnc3RyICJJbmRleCB2ZXJ3ZW5kZXQgRXJ3ZWl0ZXJ1bmcgJS40cywgd2VsY2hlIHdpciBuaWNodCB1bnRlcnN0w7x0emVuLiIKKworIzogcmVhZC1jYWNoZS5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJS40cyBleHRlbnNpb24iCittc2dzdHIgIklnbm9yaWVyZSBFcndlaXRlcnVuZyAlLjRzIgorCisjOiByZWFkLWNhY2hlLmM6MTc5MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGluZGV4IGVudHJ5IGZvcm1hdCAweCUwOHgiCittc2dzdHIgIlVuYmVrYW5udGVzIEZvcm1hdCBmw7xyIEluZGV4LUVpbnRyYWcgMHglMDh4IgorCisjOiByZWFkLWNhY2hlLmM6MTgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlcyBOYW1lbnNmZWxkIGltIEluZGV4LCBpbiBkZXIgTsOkaGUgdm9uIFBmYWQgJyVzJy4iCisKKyM6IHJlYWQtY2FjaGUuYzoxODY2Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgIlVuZ2VvcmRuZXRlIFN0YWdlLUVpbnRyw6RnZSBpbSBJbmRleC4iCisKKyM6IHJlYWQtY2FjaGUuYzoxODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgIk1laHJlcmUgU3RhZ2UtRWludHLDpGdlIGbDvHIgenVzYW1tZW5nZWbDvGhydGUgRGF0ZWkgJyVzJy4iCisKKyM6IHJlYWQtY2FjaGUuYzoxODcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICJVbmdlb3JkbmV0ZSBTdGFnZS1FaW50csOkZ2UgZsO8ciAnJXMnLiIKKworIzogcmVhZC1jYWNoZS5jOjE5NzggcmVhZC1jYWNoZS5jOjIyNjYgcmVyZXJlLmM6NTY1IHJlcmVyZS5jOjU5OSByZXJlcmUuYzoxMTExCisjOiBidWlsdGluL2FkZC5jOjQ5OSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3OCBidWlsdGluL2NoZWNrb3V0LmM6NDcwCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjU0IGJ1aWx0aW4vY2xlYW4uYzo5NjcgYnVpbHRpbi9jb21taXQuYzozNjcKKyM6IGJ1aWx0aW4vZGlmZi10cmVlLmM6MTIwIGJ1aWx0aW4vZ3JlcC5jOjQ5OSBidWlsdGluL212LmM6MTQ1CisjOiBidWlsdGluL3Jlc2V0LmM6MjQ2IGJ1aWx0aW4vcm0uYzoyNzEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjMzMgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiSW5kZXgtRGF0ZWkgYmVzY2jDpGRpZ3QiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIkthbm4gVGhyZWFkIGbDvHIgbG9hZF9jYWNoZV9lbnRyaWVzIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIkthbm4gVGhyZWFkIGbDvHIgbG9hZF9jYWNoZV9lbnRyaWVzIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzOiDDlmZmbmVuIGRlciBJbmRleC1EYXRlaSBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiJXM6IEthbm4gZ2XDtmZmbmV0ZW4gSW5kZXggbmljaHQgbGVzZW4uIgorCisjOiByZWFkLWNhY2hlLmM6MjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiVzOiBJbmRleC1EYXRlaSBpc3Qga2xlaW5lciBhbHMgZXJ3YXJ0ZXQuIgorCisjOiByZWFkLWNhY2hlLmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIlczogS29ubnRlIEluZGV4LURhdGVpIG5pY2h0IGVpbmxlc2VuLiIKKworIzogcmVhZC1jYWNoZS5jOjIyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiS2FubiBUaHJlYWQgZsO8ciBsb2FkX2luZGV4X2V4dGVuc2lvbnMgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiS2FubiBUaHJlYWQgZsO8ciBsb2FkX2luZGV4X2V4dGVuc2lvbnMgbmljaHQgYmVpdHJldGVuOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgIktvbm50ZSBnZXRlaWx0ZW4gSW5kZXggJyVzJyBuaWNodCBha3R1YWxpc2llcmVuLiIKKworIzogcmVhZC1jYWNoZS5jOjIzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGluZGV4LCBleHBlY3QgJXMgaW4gJXMsIGdvdCAlcyIKK21zZ3N0ciAiRmVobGVyaGFmdGVyIEluZGV4LiBFcndhcnRldGUgJXMgaW4gJXMsIGVyaGllbHQgJXMuIgorCisjOiByZWFkLWNhY2hlLmM6MzAyMSBzdHJidWYuYzoxMTQ1IHdyYXBwZXIuYzo2MjIgYnVpbHRpbi9tZXJnZS5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHNjaGxpZcOfZW4uIgorCisjOiByZWFkLWNhY2hlLmM6MzEyNCBzZXF1ZW5jZXIuYzoyNDI5IHNlcXVlbmNlci5jOjQwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4uIgorCisjOiByZWFkLWNhY2hlLmM6MzEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBnaXQgZGlyOiAlcyIKK21zZ3N0ciAia29ubnRlIEdpdC1WZXJ6ZWljaG5pcyBuaWNodCDDtmZmbmVuOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGVudGZlcm5lbi4iCisKKyM6IHJlYWQtY2FjaGUuYzozMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICclcyciCittc2dzdHIgIktvbm50ZSBadWdyaWZmc2JlcmVjaHRpZ3VuZyBhdWYgJyVzJyBuaWNodCBzZXR6ZW4uIgorCisjOiByZWFkLWNhY2hlLmM6MzMyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiCittc2dzdHIgIiVzOiBLYW5uIG5pY2h0IGF1ZiBTdHVmZSAjMCB3ZWNoc2Vsbi4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjI2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCiBtc2dzdHIgIiIKLSJFaW4gb2RlciBtZWhyZXJlIFp1c2FtbWVuZsO8aHJ1bmdlbiBzaW5kIGZlaGxnZXNjaGxhZ2VuLCBkYSBTaWUgbmljaHQgZGllICIKLSJub3R3ZW5kaWdlbiBDb21taXRzIHZvcmhlciBhbmdlZm9yZGVydCBoYWJlbi4gIFNpZSBzb2xsdGVuIHZlcnN1Y2hlbiwgenVlcnN0ICIKLSJ2b24gwrslc8KrIGFuenVmb3JkZXJuLiIKKyJOaWNodCBlcmthbm50ZSBFaW5zdGVsbHVuZyAlcyBmw7xyIE9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gIgorIklnbm9yaWVyZS4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgotbXNnc3RyICJCaXR0ZSB3w6RobGVuIFNpZSBtaW5kZXN0ZW5zIGVpbmVuIEJyYW5jaCwgZGVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbC4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjM1CiBtc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCiAiXG4iCi0iRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCiBtc2dzdHIgIiIKLSJEYXMgV2llZGVyaGVyc3RlbGxlbiB2b24gZ2Vsw7ZzY2h0ZW4gQnJhbmNoZXMgaXN0IG51ciBtaXQgZ3LDtsOfZXJlbSBBdWZ3YW5kICIKLSJtw7ZnbGljaC5cbiIKICJcbiIKLSJTb2xsZW4gZGllIGF1c2dld8OkaGx0ZW4gQnJhbmNoZXMgZ2Vsw7ZzY2h0IHdlcmRlbj8iCisiQmVmZWhsZTpcbiIKKyJwLCBwaWNrIDxDb21taXQ+ID0gQ29tbWl0IHZlcndlbmRlblxuIgorInIsIHJld29yZCA8Q29tbWl0PiA9IENvbW1pdCB2ZXJ3ZW5kZW4sIGFiZXIgQ29tbWl0LUJlc2NocmVpYnVuZyBiZWFyYmVpdGVuXG4iCisiZSwgZWRpdCA8Q29tbWl0PiA9IENvbW1pdCB2ZXJ3ZW5kZW4sIGFiZXIgenVtIE5hY2hiZXNzZXJuIGFuaGFsdGVuXG4iCisicywgc3F1YXNoIDxDb21taXQ+ID0gQ29tbWl0IHZlcndlbmRlbiwgYWJlciBtaXQgdm9yaGVyaWdlbSBDb21taXQgdmVyZWluZW5cbiIKKyJmLCBmaXh1cCA8Q29tbWl0PiA9IHdpZSBcInNxdWFzaFwiLCBhYmVyIGRpZXNlIENvbW1pdC1CZXNjaHJlaWJ1bmcgIgorInZlcndlcmZlblxuIgorIngsIGV4ZWMgPENvbW1pdD4gPSBCZWZlaGwgKFJlc3QgZGVyIFplaWxlKSBtaXR0ZWxzIFNoZWxsIGF1c2bDvGhyZW5cbiIKKyJiLCBicmVhayA9IGhpZXIgYW5oYWx0ZW4gKFJlYmFzZSBzcMOkdGVyIG1pdCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyAiCisiZm9ydHNldHplbilcbiIKKyJkLCBkcm9wIDxDb21taXQ+ID0gQ29tbWl0IGVudGZlcm5lblxuIgorImwsIGxhYmVsIDxMYWJlbD4gPSBha3R1ZWxsZW4gSEVBRCBtaXQgTGFiZWwgdmVyc2VoZW5cbiIKKyJ0LCByZXNldCA8TGFiZWw+ID0gSEVBRCB6dSBlaW5lbSBMYWJlbCB1bXNldHplblxuIgorIm0sIG1lcmdlIFstQyA8Q29tbWl0PiB8IC1jIDxDb21taXQ+XSA8TGFiZWw+IFsjIDxlaW5lWmVpbGU+XVxuIgorIi4gICAgICAgTWVyZ2UtQ29tbWl0IG1pdCBkZXIgb3JpZ2luYWxlbiBNZXJnZS1Db21taXQtQmVzY2hyZWlidW5nIGVyc3RlbGxlblxuIgorIi4gICAgICAgKG9kZXIgZGllIGVpbmUgWmVpbGUsIHdlbm4ga2VpbmUgb3JpZ2luYWxlIE1lcmdlLUNvbW1pdC0iCisiQmVzY2hyZWlidW5nXG4iCisiLiAgICAgICBzcGV6aWZpemllcnQgaXN0KS4gQmVudXR6ZW4gU2llIC1jIDxDb21taXQ+IHp1bSBCZWFyYmVpdGVuIGRlclxuIgorIi4gICAgICAgQ29tbWl0LUJlc2NocmVpYnVuZy5cbiIKKyJcbiIKKyJEaWVzZSBaZWlsZW4ga8O2bm5lbiB1bXNvcnRpZXJ0IHdlcmRlbjsgU2llIHdlcmRlbiB2b24gb2JlbiBuYWNoIHVudGVuXG4iCisiYXVzZ2Vmw7xocnQuXG4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKLW1zZ3N0ciAiQnJhbmNoZXMgYXVmIMK7JXPCqyB3ZXJkZW4gZ2Vsw7ZzY2h0IgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJSZWJhc2Ugdm9uICVzIGF1ZiAlcyAoJWQgS29tbWFuZG8pIgorbXNnc3RyWzFdICJSZWJhc2Ugdm9uICVzIGF1ZiAlcyAoJWQgS29tbWFuZG9zKSIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDAKLW1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKLW1zZ3N0ciAiS2VpbiBSZXBvc2l0b3J5IGF1c2dld8OkaGx0LiIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIktlaW5lIFplaWxlIGVudGZlcm5lbi4gQmVudXR6ZW4gU2llICdkcm9wJywgdW0gZXhwbGl6aXQgZWluZW4gQ29tbWl0IHp1XG4iCisiZW50ZmVybmVuLlxuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjMwNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNjYW5uaW5nICVzLi4uIgotbXNnc3RyICLCuyVzwqsgbGFkZW4uLi4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisiXG4iCisiV2VubiBTaWUgaGllciBlaW5lIFplaWxlIGVudGZlcm5lbiwgd2lyZCBESUVTRVIgQ09NTUlUIFZFUkxPUkVOIEdFSEVOLlxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1Ci1tc2dpZCAiR2l0IEd1aSIKLW1zZ3N0ciAiR2l0IEd1aSIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTaWUgYmVhcmJlaXRlbiBnZXJhZGUgZGllIFRPRE8tRGF0ZWkgZWluZXMgbGF1ZmVuZGVuIGludGVyYWt0aXZlbiBSZWJhc2UuXG4iCisiVW0gZGVuIFJlYmFzZSBuYWNoIGRlbSBFZGl0aWVyZW4gZm9ydHp1c2V0emVuLCBmw7xocmVuIFNpZSBhdXM6XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyNwotbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiUmVwb3NpdG9yeSBuZXUgZXJzdGVsbGVuIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2VubiBTaWUgamVkb2NoIGFsbGVzIGzDtnNjaGVuLCB3aXJkIGRlciBSZWJhc2UgYWJnZWJyb2NoZW4uXG4iCisiXG4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEwCi1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICJOZXUuLi4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIkxlZXJlIENvbW1pdHMgc2luZCBhdXNrb21tZW50aWVydC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTExCi1tc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiUmVwb3NpdG9yeSBrbG9uZW4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMDUgcmVyZXJlLmM6NDg1IHJlcmVyZS5jOjY5MiBzZXF1ZW5jZXIuYzozNTM2CisjOiBzZXF1ZW5jZXIuYzozNTYyIHNlcXVlbmNlci5jOjUyNjMgYnVpbHRpbi9mc2NrLmM6MzQ2IGJ1aWx0aW4vcmViYXNlLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBzY2hyZWliZW4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyOAotbXNnaWQgIkNsb25lLi4uIgotbXNnc3RyICJLbG9uZW4uLi4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbmFjaCAnJXMnIGtvcGllcmVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTA1Ci1tc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICJSZXBvc2l0b3J5IMO2ZmZuZW4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOlxuIgorbXNnc3RyICIiCisiV2FybnVuZzogRWluaWdlIENvbW1pdHMga8O2bm50ZW4gYXVzIFZlcnNlaGVuIGVudGZlcm50IHdvcmRlbiBzZWluLlxuIgorIkVudGZlcm50ZSBDb21taXRzIChuZXUgenUgYWx0KTpcbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNDEKLW1zZ2lkICJPcGVuLi4uIgotbXNnc3RyICLDlmZmbmVuLi4uIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlVtIGRpZXNlIE1lbGR1bmcgenUgdmVybWVpZGVuLCBiZW51dHplbiBTaWUgXCJkcm9wXCIsIHVtIGV4bGl6aXQgQ29tbWl0cyB6dVxuIgorImVudGZlcm5lbi5cbiIKKyJcbiIKKyJCZW51dHplbiBTaWUgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snLCB1bSBkaWUgU3R1ZmUgZGVyXG4iCisiV2FybnVuZ2VuIHp1IMOkbmRlcm4uXG4iCisiRGllIG3DtmdsaWNoZW4gVmVyaGFsdGVuc3dlaXNlbiBzaW5kOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE1NAotbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCi1tc2dzdHIgIkxldHp0ZSBSZXBvc2l0b3JpZXMiCisjOiByZWZzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIKK21zZ3N0ciAiJXMgemVpZ3QgYXVmIGtlaW4gZ8O8bHRpZ2VzIE9iamVrdCEiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTY0Ci1tc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCi1tc2dzdHIgIlp1bGV0enQgYmVudXR6dGVzIFJlcG9zaXRvcnkgw7ZmZm5lbjoiCisjOiByZWZzLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGRhbmdsaW5nIHN5bXJlZiAlcyIKK21zZ3N0ciAiSWdub3JpZXJlIHVucmVmZXJlbnppZXJ0ZSBzeW1ib2xpc2NoZSBSZWZlcmVueiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMzgKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiUmVwb3NpdG9yeSDCuyVzwqsga29ubnRlIG5pY2h0IGVyc3RlbGx0IHdlcmRlbjoiCisjOiByZWZzLmM6NjY5IHJlZi1maWx0ZXIuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGJyb2tlbiByZWYgJXMiCittc2dzdHIgIklnbm9yaWVyZSBmZWhsZXJoYWZ0ZSBSZWZlcmVueiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjMzCi1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICJFcnN0ZWxsZW4iCisjOiByZWZzLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dW0gU2NocmVpYmVuIMO2ZmZuZW46ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQzMgotbXNnaWQgIkRpcmVjdG9yeToiCi1tc2dzdHIgIlZlcnplaWNobmlzOiIKKyM6IHJlZnMuYzo4MTQgcmVmcy5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFJlZmVyZW56ICclcycgbmljaHQgbGVzZW4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU4OAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTM5Ci1tc2dpZCAiR2l0IFJlcG9zaXRvcnkiCi1tc2dzdHIgIkdpdCBSZXBvc2l0b3J5IgorIzogcmVmcy5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiUmVmZXJlbnogJyVzJyBleGlzdGllcnQgYmVyZWl0cy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiVmVyemVpY2huaXMgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIE9iamVrdC1JRCBiZWltIFNjaHJlaWJlbiB2b24gJyVzJy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkRhdGVpIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisjOiByZWZzLmM6ODMzIHNlcXVlbmNlci5jOjQwNSBzZXF1ZW5jZXIuYzoyNzkzIHNlcXVlbmNlci5jOjI5OTcKKyM6IHNlcXVlbmNlci5jOjMwMTEgc2VxdWVuY2VyLmM6MzI2OSBzZXF1ZW5jZXIuYzo1MTc5IHN0cmJ1Zi5jOjExNDIKKyM6IHdyYXBwZXIuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIktvbm50ZSBuaWNodCBuYWNoICclcycgc2NocmVpYmVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDYKLW1zZ2lkICJDbG9uZSIKLW1zZ3N0ciAiS2xvbmVuIgorIzogcmVmcy5jOjg2MCBzdHJidWYuYzoxMTQwIHdyYXBwZXIuYzoxODggd3JhcHBlci5jOjM1OCBidWlsdGluL2FtLmM6NzE0CisjOiBidWlsdGluL3JlYmFzZS5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenVtIFNjaHJlaWJlbiDDtmZmbmVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTkKLW1zZ2lkICJTb3VyY2UgTG9jYXRpb246IgotbXNnc3RyICJIZXJrdW5mdHMtQWRyZXNzZToiCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAiVW5lcndhcnRldGUgT2JqZWt0LUlEIGJlaW0gTMO2c2NoZW4gdm9uICclcycuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyOAotbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgotbXNnc3RyICJaaWVsdmVyemVpY2huaXM6IgorIzogcmVmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICJMb2cgZsO8ciBSZWZlcmVueiAlcyBoYXQgZWluZSBMw7xja2UgbmFjaCAlcy4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTM4Ci1tc2dpZCAiQ2xvbmUgVHlwZToiCi1tc2dzdHIgIkFydCBkZXMgS2xvbmVuczoiCisjOiByZWZzLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiCittc2dzdHIgIkxvZyBmw7xyIFJlZmVyZW56ICVzIHVuZXJ3YXJ0ZXQgYmVpICVzIGJlZW5kZXQuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU0MwotbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKLW1zZ3N0ciAiU3RhbmRhcmQgKHNjaG5lbGwsIHRlaWx3ZWlzZSByZWR1bmRhbnQsIEhhcmRsaW5rcykiCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICJMb2cgZsO8ciAlcyBpc3QgbGVlci4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQ4Ci1tc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgotbXNnc3RyICJBbGxlcyBrb3BpZXJlbiAobGFuZ3NhbWVyLCB2b2xsZSBSZWR1bmRhbnopIgorIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgIlZlcndlaWdlcmUgQWt0dWFsaXNpZXJ1bmcgZWluZXIgUmVmZXJlbnogbWl0IGZlaGxlcmhhZnRlbSBOYW1lbiAnJXMnLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTMKLW1zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKLW1zZ3N0ciAiVmVya27DvHBmdCAoc2NobmVsbCwgbmljaHQgZW1wZm9obGVuLCBrZWluIEJhY2t1cCkiCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICJ1cGRhdGVfcmVmIGbDvHIgUmVmZXJlbnogJyVzJyBmZWhsZ2VzY2hsYWdlbjogJXMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYwCi1tc2dpZCAiUmVjdXJzaXZlbHkgY2xvbmUgc3VibW9kdWxlcyB0b28iCi1tc2dzdHIgIlJla3Vyc2l2IHdlaXRlcmUgU3VibW9kdWxlIGtsb25lbiIKKyM6IHJlZnMuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJNZWhyZXJlIEFrdHVhbGlzaWVydW5nZW4gZsO8ciBSZWZlcmVueiAnJXMnIG5pY2h0IGVybGF1YnQuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE0NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExNTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAiIgorIkFrdHVhbGlzaWVydW5nZW4gdm9uIFJlZmVyZW56ZW4gaXN0IGlubmVyaGFsYiBkZXIgUXVhcmFudMOkbmUtVW1nZWJ1bmcgIgorInZlcmJvdGVuLiIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBleGlzdGllcnQ7IGthbm4gJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiS2FubiAnJXMnIHVuZCAnJXMnIG5pY2h0IHp1ciBzZWxiZW4gWmVpdCB2ZXJhcmJlaXRlbi4iCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgIktvbm50ZSBSZWZlcmVueiAlcyBuaWNodCBsw7ZzY2hlbiIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0OCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJLb25udGUgUmVmZXJlbnogJXMgbmljaHQgZW50ZmVybmVuOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI1MSByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICJLb25udGUgUmVmZXJlbnplbiBuaWNodCBlbnRmZXJuZW46ICVzIgorCisjOiByZWZzcGVjLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmc3BlYyAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIFJlZnNwZWMgJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjQyIHd0LXN0YXR1cy5jOjE5MzgKK21zZ2lkICJnb25lIgorbXNnc3RyICJlbnRmZXJudCIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICIlZCB2b3JhdXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgIiVkIGhpbnRlcmhlciIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgIiVkIHZvcmF1cywgJWQgaGludGVyaGVyIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgIkVyd2FydGV0ZXMgRm9ybWF0OiAlJShjb2xvcjo8RmFyYmU+KSIKKworIzogcmVmLWZpbHRlci5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgY29sb3I6ICUlKGNvbG9yOiVzKSIKK21zZ3N0ciAibmljaHQgZXJrYW5udGUgRmFyYmU6ICUlKGNvbG9yOiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICJQb3NpdGl2ZXIgV2VydCBlcndhcnRldCByZWZuYW1lOmxzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIgorbXNnc3RyICJQb3NpdGl2ZXIgV2VydCBlcndhcnRldCByZWZuYW1lOnJzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVzICUlKCVzKSBBcmd1bWVudDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUob2JqZWN0dHlwZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKG9iamVjdHR5cGUpIGFremVwdGllcnQga2VpbmUgQXJndW1lbnRlIgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyAlJShvYmplY3RzaXplKSBBcmd1bWVudDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoZGVsdGFiYXNlKSBha3plcHRpZXJ0IGtlaW5lIEFyZ3VtZW50ZSIKKworIzogcmVmLWZpbHRlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoYm9keSkgYWt6ZXB0aWVydCBrZWluZSBBcmd1bWVudGUiCisKKyM6IHJlZi1maWx0ZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKHN1YmplY3QpIGFremVwdGllcnQga2VpbmUgQXJndW1lbnRlIgorCisjOiByZWYtZmlsdGVyLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gJSUodHJhaWxlcnMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAidW5iZWthbm50ZXMgJSUodHJhaWxlcnMpIEFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAiUG9zaXRpdmVyIFdlcnQgZXJ3YXJ0ZXQgY29udGVudHM6bGluZXM9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGNvbnRlbnRzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyAlJShjb250ZW50cykgQXJndW1lbnQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgIlBvc2l0aXZlciBXZXJ0IGVyd2FydGV0IG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVzICUlKG9iamVjdG5hbWUpIEFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgIkVyd2FydGV0ZXMgRm9ybWF0OiAlJShhbGlnbjo8QnJlaXRlPiw8UG9zaXRpb24+KSIKKworIzogcmVmLWZpbHRlci5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlIFBvc2l0aW9uOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGUgQnJlaXRlOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJuaWNodCBlcmthbm50ZXMgJSUoYWxpZ24pIEFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAiUG9zaXRpdmUgQnJlaXRlbmFuZ2FiZSBmw7xyICUlKGFsaWduKSBlcndhcnRldCIKKworIzogcmVmLWZpbHRlci5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVzICUlKGlmKSBBcmd1bWVudDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIkZlaGxlcmhhZnRlciBGZWxkbmFtZTogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIlVuYmVrYW5udGVyIEZlbGRuYW1lOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICIiCisiS2VpbiBHaXQtUmVwb3NpdG9yeSwgYWJlciBkYXMgRmVsZCAnJS4qcycgZXJmb3JkZXJ0IFp1Z3JpZmYgYXVmIE9iamVrdGRhdGVuLiIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdDogJSUoaWYpIEF0b20gb2huZSBlaW4gJSUodGhlbikgQXRvbSB2ZXJ3ZW5kZXQiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0OiAlJSh0aGVuKSBBdG9tIG9obmUgZWluICUlKGlmKSBBdG9tIHZlcndlbmRldCIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0OiAlJSh0aGVuKSBBdG9tIG1laHIgYWxzIGVpbm1hbCB2ZXJ3ZW5kZXQiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgImZvcm1hdDogJSUodGhlbikgQXRvbSBuYWNoICUlKGVsc2UpIHZlcndlbmRldCIKKworIzogcmVmLWZpbHRlci5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICJmb3JtYXQ6ICUlKGVsc2UpIEF0b20gb2huZSBlaW4gJSUoaWYpIEF0b20gdmVyd2VuZGV0IgorCisjOiByZWYtZmlsdGVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJGb3JtYXQ6ICUlKGVsc2UpIEF0b20gb2huZSBlaW4gJSUodGhlbikgQXRvbSB2ZXJ3ZW5kZXQiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIkZvcm1hdDogJSUoZW5kKSBBdG9tIG1laHIgYWxzIGVpbm1hbCB2ZXJ3ZW5kZXQiCisKKyM6IHJlZi1maWx0ZXIuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gdXNlZCB3aXRob3V0IGNvcnJlc3BvbmRpbmcgYXRvbSIKK21zZ3N0ciAiRm9ybWF0OiAlJShlbmQpIEF0b20gb2huZSB6dWdlaMO2cmlnZXMgQXRvbSB2ZXJ3ZW5kZXQiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgIkZlaGxlcmhhZnRlciBGb3JtYXRpZXJ1bmdzc3RyaW5nICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICJrZWluIEJyYW5jaCwgUmViYXNlIHZvbiAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICJrZWluIEJyYW5jaCwgUmViYXNlIHZvbiBsb3NnZWzDtnN0ZW0gSEVBRCAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAia2VpbiBCcmFuY2gsIGJpbsOkcmUgU3VjaGUgYmVnb25uZW4gYmVpICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTUwNAorbXNnaWQgIm5vIGJyYW5jaCIKK21zZ3N0ciAia2VpbiBCcmFuY2giCisKKyM6IHJlZi1maWx0ZXIuYzoxNTQwIHJlZi1maWx0ZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIKK21zZ3N0ciAiT2JqZWt0ICVzIGZlaGx0IGbDvHIgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhcnNlX29iamVjdF9idWZmZXIgZmFpbGVkIG9uICVzIGZvciAlcyIKK21zZ3N0ciAicGFyc2Vfb2JqZWN0X2J1ZmZlciBiZWkgJXMgZsO8ciAlcyBmZWhsZ2VzY2hsYWdlbiIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJmZWhsZXJoYWZ0ZXMgT2JqZWt0IGJlaSAnJXMnIgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAiSWdub3JpZXJlIFJlZmVyZW56IG1pdCBmZWhsZXJoYWZ0ZW0gTmFtZW4gJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgIkZvcm1hdDogJSUoZW5kKSBBdG9tIGZlaGx0IgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAiRGllIE9wdGlvbiBgJXMnIGlzdCBpbmtvbXBhdGliZWwgbWl0IC0tbWVyZ2VkLiIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgIkRpZSBPcHRpb24gYCVzJyBpc3QgaW5rb21wYXRpYmVsIG1pdCAtLW5vLW1lcmdlZC4iCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiTWlzc2dlYmlsZGV0ZXIgT2JqZWt0bmFtZSAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiRGllIE9wdGlvbiBgJXMnIG11c3MgYXVmIGVpbmVuIENvbW1pdCB6ZWlnZW4uIgorCisjOiByZW1vdGUuYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlnIHJlbW90ZSBzaG9ydGhhbmQgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiIgorIkvDvHJ6ZWwgZsO8ciBSZW1vdGUtUmVwb3NpdG9yeSBpbiBkZXIgS29uZmlndXJhdGlvbiBrYW5uIG5pY2h0IG1pdCAnLycgIgorImJlZ2lubmVuOiAlcyIKKworIzogcmVtb3RlLmM6NDEzCittc2dpZCAibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICJNZWhyIGFscyBlaW4gcmVjZWl2ZXBhY2stQmVmZWhsIGFuZ2VnZWJlbiwgYmVudXR6ZSBkZW4gZXJzdGVuLiIKKworIzogcmVtb3RlLmM6NDIxCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIk1laHIgYWxzIGVpbiB1cGxvYWRwYWNrLUJlZmVobCBhbmdlZ2ViZW4sIGJlbnV0emUgZGVuIGVyc3Rlbi4iCisKKyM6IHJlbW90ZS5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIkthbm4gJ2ZldGNoJyBuaWNodCBmw7xyIHNvd29obCAlcyBhbHMgYXVjaCAlcyBuYWNoICVzIGF1c2bDvGhyZW4uIgorCisjOiByZW1vdGUuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgZm9sZ3Qgw7xibGljaGVyd2Vpc2UgJXMsIG5pY2h0ICVzIgorCisjOiByZW1vdGUuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyBmb2xndCBzb3dvaGwgJXMgYWxzIGF1Y2ggJXMiCisKKyM6IHJlbW90ZS5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgIlNjaGzDvHNzZWwgJyVzJyBkZXMgTXVzdGVycyBoYXR0ZSBrZWluICcqJy4iCisKKyM6IHJlbW90ZS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAiV2VydCAnJXMnIGRlcyBNdXN0ZXJzIGhhdCBrZWluICcqJy4iCisKKyM6IHJlbW90ZS5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICJTcmMtUmVmc3BlYyAlcyBlbnRzcHJpY2h0IGtlaW5lciBSZWZlcmVuei4iCisKKyM6IHJlbW90ZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICJTcmMtUmVmc3BlYyAlcyBlbnRzcHJpY2h0IG1laHIgYWxzIGVpbmVyIFJlZmVyZW56LiIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorIkRhcyBhbmdlZ2ViZW5lIFppZWwgaXN0IGtlaW4gdm9sbHN0w6RuZGlnZXIgUmVmZXJlbnpuYW1lIChzdGFydGV0IG1pdCBcInJlZnMvIgorIlwiKS5cbiIKKyJXaXIgdmVyc3VjaHRlbiB6dSBlcnJhdGVuLCB3YXMgU2llIG1laW50ZW4sIG1pdDpcbiIKKyJcbiIKKyItIFN1Y2hlIGVpbmVyIFJlZmVyZW56LCBkaWUgbWl0ICclcycgw7xiZXJlaW5zdGltbXQsIGF1ZiBkZXIgUmVtb3RlLVNlaXRlXG4iCisiLSBQcsO8ZnVuZywgb2IgZGllIHZlcnNlbmRldGUgPFF1ZWxsZT4gKCclcycpIGVpbmUgUmVmZXJlbnogaW4gXCJyZWZzL3toZWFkcywiCisidGFnc31cIlxuIgorIiAgaXN0LCBpbiBkZXNzZW4gRmFsbGUgd2lyIGVpbmVuIGVudHNwcmVjaGVuZGVuIHJlZnMve2hlYWRzLHRhZ3N9IFByw6RmaXggIgorImF1ZlxuIgorIiAgZGVyIFJlbW90ZS1TZWl0ZSBoaW56dWbDvGdlbiB3w7xyZGVuLlxuIgorIlxuIgorIktlaW5lcyBoYXQgZnVua3Rpb25pZXJ0LCBzb2Rhc3Mgd2lyIGF1ZmdlZ2ViZW4gaGFiZW4uIFNpZSBtw7xzc2VuIGRpZVxuIgorIlJlZmVyZW56IG1pdCB2b2xscXVhbGlmaXppZXJ0ZW4gTmFtZW4gYW5nZWJlbi4iCisKKyM6IHJlbW90ZS5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgY29tbWl0IG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKK21zZ3N0ciAiIgorIkRlciA8UXVlbGxlPiBUZWlsIGRlciBSZWZzcGVjIGlzdCBlaW4gQ29tbWl0LU9iamVrdC5cbiIKKyJNZWludGVuIFNpZSwgZWluZW4gbmV1ZW4gQnJhbmNoIG1pdHRlbHMgUHVzaCBuYWNoXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnIHp1IGVyc3RlbGxlbj8iCisKKyM6IHJlbW90ZS5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdGFnIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IHRhZyBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiRGVyIDxRdWVsbGU+IFRlaWwgZGVyIFJlZnNwZWMgaXN0IGVpbiBUYWctT2JqZWt0LlxuIgorIk1laW50ZW4gU2llLCBlaW5lbiBuZXVlbiBUYWcgbWl0dGVscyBQdXNoIG5hY2hcbiIKKyInJXM6cmVmcy90YWdzLyVzJyB6dSBlcnN0ZWxsZW4/IgorCisjOiByZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRyZWUgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgdHJlZSBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiRGVyIDxRdWVsbGU+IFRlaWwgZGVyIFJlZnNwZWMgaXN0IGVpbiBUcmVlLU9iamVrdC5cbiIKKyJNZWludGVuIFNpZSwgZWluZW4gVGFnIGbDvHIgZWluIG5ldWVzIFRyZWUtT2JqZWt0XG4iCisibWl0dGVscyBQdXNoIG5hY2ggJyVzOnJlZnMvdGFncy8nJXMnIHp1IGVyc3RlbGxlbj8iCisKKyM6IHJlbW90ZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJEZXIgPFF1ZWxsZT4gVGVpbCBkZXIgUmVmc3BlYyBpc3QgZWluIEJsb2ItT2JqZWt0LlxuIgorIk1laW50ZW4gU2llLCBlaW5lbiBUYWcgZsO8ciBlaW4gbmV1ZXMgQmxvYi1PYmpla3RcbiIKKyJtaXR0ZWxzIFB1c2ggbmFjaCAnJXM6cmVmcy90YWdzLyVzJyB6dSBlcnN0ZWxsZW4/IgorCisjOiByZW1vdGUuYzoxMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIiVzIGthbm4gbmljaHQgenUgQnJhbmNoIGF1ZmdlbMO2c3Qgd2VyZGVuLiIKKworIzogcmVtb3RlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGzDtnNjaGVuOiBSZW1vdGUtUmVmZXJlbnogZXhpc3RpZXJ0IG5pY2h0LiIKKworIzogcmVtb3RlLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIkRzdC1SZWZzcGVjICVzIGVudHNwcmljaHQgbWVociBhbHMgZWluZXIgUmVmZXJlbnouIgorCisjOiByZW1vdGUuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiRHN0LVJlZmVyZW56ICVzIGVtcGbDpG5ndCB2b24gbWVociBhbHMgZWluZXIgUXVlbGxlIgorCisjOiByZW1vdGUuYzoxNjI3IHJlbW90ZS5jOjE3MjgKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIHplaWd0IGF1ZiBrZWluZW4gQnJhbmNoIgorCisjOiByZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJLZWluIHNvbGNoZXIgQnJhbmNoOiAnJXMnIgorCisjOiByZW1vdGUuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICJLZWluIFVwc3RyZWFtLUJyYW5jaCBmw7xyIEJyYW5jaCAnJXMnIGtvbmZpZ3VyaWVydC4iCisKKyM6IHJlbW90ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIlVwc3RyZWFtLUJyYW5jaCAnJXMnIG5pY2h0IGFscyBSZW1vdGUtVHJhY2tpbmctQnJhbmNoIGdlc3BlaWNoZXJ0IgorCisjOiByZW1vdGUuYzoxNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisiWmllbCBmw7xyIFwicHVzaFwiICclcycgYXVmIFJlbW90ZS1SZXBvc2l0b3J5ICclcycgaGF0IGtlaW5lbiBsb2thbCBnZWZvbGd0ZW4gIgorIkJyYW5jaCIKKworIzogcmVtb3RlLmM6MTY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICJCcmFuY2ggJyVzJyBoYXQga2VpbmVuIFVwc3RyZWFtLUJyYW5jaCBnZXNldHp0IgorCisjOiByZW1vdGUuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAiUHVzaC1SZWZzcGVjcyBmw7xyICclcycgYmVpbmhhbHRlbiBuaWNodCAnJXMnIgorCisjOiByZW1vdGUuYzoxNjk1Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICJrZWluIFppZWwgZsO8ciBcInB1c2hcIiAocHVzaC5kZWZhdWx0IGlzdCAnbm90aGluZycpIgorCisjOiByZW1vdGUuYzoxNzE3Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAia2FubiBlaW56ZWxuZXMgWmllbCBmw7xyIFwicHVzaFwiIGltIE1vZHVzICdzaW1wbGUnIG5pY2h0IGF1ZmzDtnNlbiIKKworIzogcmVtb3RlLmM6MTg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIktvbm50ZSBSZW1vdGUtUmVmZXJlbnogJXMgbmljaHQgZmluZGVuLiIKKworIzogcmVtb3RlLmM6MTg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogSWdub3JpZXJlIHNvbmRlcmJhcmUgUmVmZXJlbnogJyVzJyBsb2thbCIKKworIzogcmVtb3RlLmM6MjAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiYXNlZCBvbiAnJXMnLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuXG4iCittc2dzdHIgIiIKKyJJaHIgQnJhbmNoIGJhc2llcnQgYXVmICclcycsIGFiZXIgZGVyIFVwc3RyZWFtLUJyYW5jaCB3dXJkZSBlbnRmZXJudC5cbiIKKworIzogcmVtb3RlLmM6MjAyMworbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgIChiZW51dHplbiBTaWUgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB6dW0gQmVoZWJlbilcbiIKKworIzogcmVtb3RlLmM6MjAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAiSWhyIEJyYW5jaCBpc3QgYXVmIGRlbXNlbGJlbiBTdGFuZCB3aWUgJyVzJy5cbiIKKworIzogcmVtb3RlLmM6MjAzMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAiSWhyIEJyYW5jaCB1bmQgJyVzJyB6ZWlnZW4gYXVmIHVudGVyc2NoaWVkbGljaGUgQ29tbWl0cy5cbiIKKworIzogcmVtb3RlLmM6MjAzMworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCIlc1wiIGZvciBkZXRhaWxzKVxuIgorbXNnc3RyICIgIChiZW51dHplbiBTaWUgXCIlc1wiIGbDvHIgRGV0YWlscylcbiIKKworIzogcmVtb3RlLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJJaHIgQnJhbmNoIGlzdCAlMiRkIENvbW1pdCB2b3IgJyUxJHMnLlxuIgorbXNnc3RyWzFdICJJaHIgQnJhbmNoIGlzdCAlMiRkIENvbW1pdHMgdm9yICclMSRzJy5cbiIKKworIzogcmVtb3RlLmM6MjA0MworbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKGJlbnV0emVuIFNpZSBcImdpdCBwdXNoXCIsIHVtIGxva2FsZSBDb21taXRzIHp1IHB1YmxpemllcmVuKVxuIgorCisjOiByZW1vdGUuYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJJaHIgQnJhbmNoIGlzdCAlMiRkIENvbW1pdCBoaW50ZXIgJyUxJHMnLCB1bmQga2FubiB2b3JnZXNwdWx0IHdlcmRlbi5cbiIKK21zZ3N0clsxXSAiIgorIklociBCcmFuY2ggaXN0ICUyJGQgQ29tbWl0cyBoaW50ZXIgJyUxJHMnLCB1bmQga2FubiB2b3JnZXNwdWx0IHdlcmRlbi5cbiIKKworIzogcmVtb3RlLmM6MjA1NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHB1bGxcIiwgdW0gSWhyZW4gbG9rYWxlbiBCcmFuY2ggenUgYWt0dWFsaXNpZXJlbilcbiIKKworIzogcmVtb3RlLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyJJaHIgQnJhbmNoIHVuZCAnJXMnIHNpbmQgZGl2ZXJnaWVydCxcbiIKKyJ1bmQgaGFiZW4gamV3ZWlscyAlZCB1bmQgJWQgdW50ZXJzY2hpZWRsaWNoZSBDb21taXRzLlxuIgorbXNnc3RyWzFdICIiCisiSWhyIEJyYW5jaCB1bmQgJyVzJyBzaW5kIGRpdmVyZ2llcnQsXG4iCisidW5kIGhhYmVuIGpld2VpbHMgJWQgdW5kICVkIHVudGVyc2NoaWVkbGljaGUgQ29tbWl0cy5cbiIKKworIzogcmVtb3RlLmM6MjA2NworbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBwdWxsXCIsIHVtIElocmVuIEJyYW5jaCBtaXQgZGVtIFJlbW90ZS1CcmFuY2ggIgorInp1c2FtbWVuenVmw7xocmVuKVxuIgorCisjOiByZW1vdGUuYzoyMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJLYW5uIGVyd2FydGV0ZW4gT2JqZWt0bmFtZW4gJyVzJyBuaWNodCBwYXJzZW4uIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBsYWNlIHJlZiBuYW1lOiAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXIgTmFtZSBmw7xyIGVyc2V0emVuZGUgUmVmZXJlbno6ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSByZXBsYWNlIHJlZjogJXMiCittc2dzdHIgImRvcHBlbHRlIGVyc2V0emVuZGUgUmVmZXJlbno6ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiRXJzZXR6dW5nc3RpZWZlIHp1IGhvY2ggZsO8ciBPYmpla3QgJXMiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAiRmVobGVyaGFmdGVzIE1FUkdFX1JSIgorCisjOiByZXJlcmUuYzoyNjQgcmVyZXJlLmM6MjY5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiCittc2dzdHIgIktvbm50ZSBSZXJlcmUtRWludHJhZyBuaWNodCBzY2hyZWliZW4uIgorCisjOiByZXJlcmUuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlcmUgd2VyZSBlcnJvcnMgd2hpbGUgd3JpdGluZyAnJXMnICglcykiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiB2b24gJyVzJyAoJXMpLiIKKworIzogcmVyZXJlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICJGbHVzaCBiZWkgJyVzJyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IHJlcmVyZS5jOjUwMyByZXJlcmUuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAnJXMnIgorbXNnc3RyICJLb25udGUgS29uZmxpa3QtQmzDtmNrZSBpbiAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IHJlcmVyZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdWZydWYgdm9uIHV0aW1lKCkgYXVmICclcycuIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiU2NocmVpYmVuIHZvbiAnJXMnIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICInJXMnIG1pdCB2b3JoZXJpZ2VyIEtvbmZsaWt0YXVmbMO2c3VuZyB6dW0gQ29tbWl0IHZvcmdlbWVya3QuIgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgIktvbmZsaWt0YXVmbMO2c3VuZyBmw7xyICclcycgYXVmZ2V6ZWljaG5ldC4iCisKKyM6IHJlcmVyZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICJLb25mbGlrdGUgaW4gJyVzJyBtaXQgdm9yaGVyaWdlciBLb25mbGlrdGF1ZmzDtnN1bmcgYmVzZWl0aWd0LiIKKworIzogcmVyZXJlLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgc3RyYXkgJyVzJyIKK21zZ3N0ciAiS2FubiAnJXMnIG5pY2h0IGzDtnNjaGVuLiIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJQcmVpbWFnZSBmw7xyICclcycgYXVmZ2V6ZWljaG5ldC4iCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDY3IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFZlcnplaWNobmlzICclcycgbmljaHQgZXJzdGVsbGVuLiIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQWt0dWFsaXNpZXJlbiBkZXMgS29uZmxpa3QtU3RhdHVzIGluICclcycuIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICJLZWluZSBhdWZnZXplaWNobmV0ZSBLb25mbGlrdGF1ZmzDtnN1bmcgZsO8ciAnJXMnLiIKKworIzogcmVyZXJlLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rICclcyciCittc2dzdHIgIkthbm4gJyVzJyBuaWNodCBsw7ZzY2hlbi4iCisKKyM6IHJlcmVyZS5jOjEwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiUHJlaW1hZ2UgZsO8ciAnJXMnIGFrdHVhbGlzaWVydC4iCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiQXVmZ2V6ZWljaG5ldGUgS29uZmxpa3RhdWZsw7ZzdW5nIGbDvHIgJyVzJyBnZWzDtnNjaHQuXG4iCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgIktvbm50ZSByci1jYWNoZSBWZXJ6ZWljaG5pcyBuaWNodCDDtmZmbmVuLiIKKworIzogcmV2aXNpb24uYzoyNDk3Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAiSWhyIGFrdHVlbGxlciBCcmFuY2ggc2NoZWludCBmZWhsZXJoYWZ0IHp1IHNlaW4uIgorCisjOiByZXZpc2lvbi5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJJaHIgYWt0dWVsbGVyIEJyYW5jaCAnJXMnIGhhdCBub2NoIGtlaW5lIENvbW1pdHMuIgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tZmlyc3QtcGFyZW50IHVuZCAtLWJpc2VjdCBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IHJldmlzaW9uLmM6MjcxMgorbXNnaWQgIi1MIGRvZXMgbm90IHlldCBzdXBwb3J0IGRpZmYgZm9ybWF0cyBiZXNpZGVzIC1wIGFuZCAtcyIKK21zZ3N0ciAiLUwgdW50ZXJzdMO8dHp0IG5vY2gga2VpbmUgYW5kZXJlbiBEaWZmLUZvcm1hdGUgYXXDn2VyIC1wIHVuZCAtcyIKKworIzogcnVuLWNvbW1hbmQuYzo3NjIKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIsOWZmZuZW4gdm9uIC9kZXYvbnVsbCBmZWhsZ2VzY2hsYWdlbiIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiS29ubnRlIFRocmVhZCBmw7xyIGFzeW5jIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisiRGVyICclcycgSG9vayB3dXJkZSBpZ25vcmllcnQsIHdlaWwgZXIgbmljaHQgYWxzIGF1c2bDvGhyYmFyIG1hcmtpZXJ0IGlzdC5cbiIKKyJTaWUga8O2bm5lbiBkaWVzZSBXYXJudW5nIG1pdCBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgICIKKyJkZWFrdGl2aWVyZW4uIgorCisjOiBzZW5kLXBhY2suYzoxNDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICJVbmVyd2FydGV0ZXMgRmx1c2gtUGFrZXQgYmVpbSBMZXNlbiBkZXMgUmVtb3RlLVVucGFjay1TdGF0dXMuIgorCisjOiBzZW5kLXBhY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAiS29ubnRlIFN0YXR1cyBkZXMgRW50cGFja2VucyBkZXIgR2VnZW5zZWl0ZSBuaWNodCBwYXJzZW46ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICJFbnRwYWNrZW4gYXVmIGRlciBHZWdlbnNlaXRlIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgIkZlaGxlciBiZWltIFNpZ25pZXJlbiBkZXMgXCJwdXNoXCItWmVydGlmaWthdGVzIgorCisjOiBzZW5kLXBhY2suYzo0MjMKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgIiIKKyJkaWUgR2VnZW5zZWl0ZSB1bnRlcnN0w7x0enQga2VpbmVuIHNpZ25pZXJ0ZW4gVmVyc2FuZCAoXCItLXNpZ25lZCBwdXNoXCIpIgorCisjOiBzZW5kLXBhY2suYzo0MjUKK21zZ2lkICIiCisibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS0iCisic2lnbmVkIHB1c2giCittc2dzdHIgIiIKKyJrZWluIFZlcnNhbmQgZGVzIFwicHVzaFwiLVplcnRpZmlrYXRlcywgZGEgZGllIEdlZ2Vuc2VpdGUga2VpbmVuIHNpZ25pZXJ0ZW5cbiIKKyJWZXJzYW5kIChcIi0tc2lnbmVkIHB1c2hcIikgdW50ZXJzdMO8dHp0IgorCisjOiBzZW5kLXBhY2suYzo0MzcKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgImRpZSBHZWdlbnNlaXRlIHVudGVyc3TDvHR6dCBrZWluZW4gYXRvbWFyZW4gVmVyc2FuZCAoXCItLWF0b21pYyBwdXNoXCIpIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIKK21zZ3N0ciAiZGllIEdlZ2Vuc2VpdGUgdW50ZXJzdMO8dHp0IGtlaW5lIFB1c2gtT3B0aW9uZW4iCisKKyM6IHNlcXVlbmNlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBcImNsZWFudXBcIi1Nb2R1cyAnJXMnIGbDvHIgQ29tbWl0LUJlc2NocmVpYnVuZ2VuLiIKKworIzogc2VxdWVuY2VyLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbMO2c2NoZW4uIgorCisjOiBzZXF1ZW5jZXIuYzozMTMgYnVpbHRpbi9yZWJhc2UuYzo3ODEgYnVpbHRpbi9yZWJhc2UuYzoxNzA2IGJ1aWx0aW4vcm0uYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsw7ZzY2hlbiIKKworIzogc2VxdWVuY2VyLmM6MzIzCittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJSZXZlcnQiCisKKyM6IHNlcXVlbmNlci5jOjMyNQorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJDaGVycnktUGljayIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgUmViYXNlIgorCisjOiBzZXF1ZW5jZXIuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICJVbmJla2FubnRlIEFrdGlvbjogJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4NworbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisibmFjaCBBdWZsw7ZzdW5nIGRlciBLb25mbGlrdGUgbWFya2llcmVuIFNpZSBkaWUga29ycmlnaWVydGVuIFBmYWRlXG4iCisibWl0ICdnaXQgYWRkIDxQZmFkZT4nIG9kZXIgJ2dpdCBybSA8UGZhZGU+JyIKKworIzogc2VxdWVuY2VyLmM6MzkwCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyJuYWNoIEF1ZmzDtnN1bmcgZGVyIEtvbmZsaWt0ZSBtYXJraWVyZW4gU2llIGRpZSBrb3JyaWdpZXJ0ZW4gUGZhZGVcbiIKKyJtaXQgJ2dpdCBhZGQgPFBmYWRlPicgb2RlciAnZ2l0IHJtIDxQZmFkZT4nIHVuZCB0cmFnZW4gU2llIGRhcyBFcmdlYm5pcyBtaXRcbiIKKyInZ2l0IGNvbW1pdCcgZWluIgorCisjOiBzZXF1ZW5jZXIuYzo0MDMgc2VxdWVuY2VyLmM6Mjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBzcGVycmVuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICJLb25udGUgRU9MIG5pY2h0IG5hY2ggJyVzJyBzY2hyZWliZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0MTUgc2VxdWVuY2VyLmM6Mjc5OCBzZXF1ZW5jZXIuYzoyOTk5IHNlcXVlbmNlci5jOjMwMTMKKyM6IHNlcXVlbmNlci5jOjMyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEZlcnRpZ3N0ZWxsZW4gdm9uICclcycuIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzggc2VxdWVuY2VyLmM6MTcwNyBzZXF1ZW5jZXIuYzoyODE4IHNlcXVlbmNlci5jOjMyNTkKKyM6IHNlcXVlbmNlci5jOjMzNjggYnVpbHRpbi9hbS5jOjI0NCBidWlsdGluL2NvbW1pdC5jOjc4MyBidWlsdGluL21lcmdlLmM6MTExNworIzogYnVpbHRpbi9yZWJhc2UuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4iCisKKyM6IHNlcXVlbmNlci5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gd8O8cmRlbiBkdXJjaCBkZW4gJXMgw7xiZXJzY2hyaWViZW4gd2VyZGVuLiIKKworIzogc2VxdWVuY2VyLmM6NDY4Cittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICIiCisiQ29tbWl0dGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuIG9kZXIgYmVudXR6ZW4gU2llIFwic3Rhc2hcIiwgdW0gZm9ydHp1ZmFocmVuLiIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiBWb3JzcHVsZW4iCisKKyM6IHNlcXVlbmNlci5jOjUzOSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgXCJjbGVhbnVwXCIgTW9kdXMgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IEtvbm50ZSBuZXVlIEluZGV4LURhdGVpIG5pY2h0IHNjaHJlaWJlbiIKKworIzogc2VxdWVuY2VyLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICJLb25udGUgQ2FjaGUtVmVyemVpY2huaXMgbmljaHQgYWt0dWFsaXNpZXJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJLb25udGUgSEVBRC1Db21taXQgbmljaHQgYXVmbMO2c2VuLiIKKworIzogc2VxdWVuY2VyLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAiS2VpbiBTY2hsw7xzc2VsIGluICclLipzJyB2b3JoYW5kZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAiS29ubnRlIEFuZsO8aHJ1bmdzemVpY2hlbiB2b24gJyVzJyBuaWNodCBlbnRmZXJuZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo3OTIgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MDUKKyM6IGJ1aWx0aW4vYW0uYzo3OTcgYnVpbHRpbi9tZXJnZS5jOjExMTQgYnVpbHRpbi9yZWJhc2UuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBMZXNlbiDDtmZmbmVuLiIKKworIzogc2VxdWVuY2VyLmM6ODAyCittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfTkFNRScgYmVyZWl0cyBhbmdlZ2ViZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo4MDcKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfRU1BSUwnIGJlcmVpdHMgYW5nZWdlYmVuLiIKKworIzogc2VxdWVuY2VyLmM6ODEyCittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfREFURScgYmVyZWl0cyBhbmdlZ2ViZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICJVbmJla2FubnRlIFZhcmlhYmxlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjgyMQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIidHSVRfQVVUSE9SX05BTUUnIGZlaGx0LiIKKworIzogc2VxdWVuY2VyLmM6ODIzCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIidHSVRfQVVUSE9SX0VNQUlMJyBmZWhsdC4iCisKKyM6IHNlcXVlbmNlci5jOjgyNQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgIidHSVRfQVVUSE9SX0RBVEUnIGZlaGx0LiIKKworIzogc2VxdWVuY2VyLmM6OTAyIHNlcXVlbmNlci5jOjE0MjcKK21zZ2lkICJtYWxmb3JtZWQgaWRlbnQgbGluZSIKK21zZ3N0ciAiRmVobGVyaGFmdGUgSWRlbnRpZmlrYXRpb25zemVpbGUuIgorCisjOiBzZXF1ZW5jZXIuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUgc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIkVzIGJlZmluZGVuIHNpY2ggenVtIENvbW1pdCB2b3JnZW1lcmt0ZSDDhG5kZXJ1bmdlbiBpbiBJaHJlbSAiCisiQXJiZWl0c3ZlcnplaWNobmlzLlxuIgorIldlbm4gZGllc2Ugw4RuZGVydW5nZW4gaW4gZGVuIHZvcmhlcmlnZW4gQ29tbWl0IGF1Zmdlbm9tbWVuIHdlcmRlbiBzb2xsZW4sXG4iCisiZsO8aHJlbiBTaWUgYXVzOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiV2VubiBkYXJhdXMgZWluIG5ldWVyIENvbW1pdCBlcnpldWd0IHdlcmRlbiBzb2xsLCBmw7xocmVuIFNpZSBhdXM6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW0gQW5zY2hsdXNzIGbDvGhyZW4gU2llIHp1bSBGb3J0ZmFocmVuIGF1czpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjE4Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgIidwcmVwYXJlLWNvbW1pdC1tc2cnIEhvb2sgZmVobGdlc2NobGFnZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoxMjI0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiSWhyIE5hbWUgdW5kIEUtTWFpbCBBZHJlc3NlIHd1cmRlbiBhdXRvbWF0aXNjaCBhdWYgQmFzaXNcbiIKKyJJaHJlcyBCZW51dHplci0gdW5kIFJlY2huZXJuYW1lbnMga29uZmlndXJpZXJ0LiBCaXR0ZSBwcsO8ZmVuIFNpZSwgZGFzc1xuIgorImRpZXNlIHp1dHJlZmZlbmQgc2luZC4gU2llIGvDtm5uZW4gZGllc2UgTWVsZHVuZyB1bnRlcmRyw7xja2VuLCBpbmRlbSBTaWVcbiIKKyJkaWVzZSBleHBsaXppdCBzZXR6ZW4uIEbDvGhyZW4gU2llIGRhenUgZGVuIGZvbGdlbmRlbiBCZWZlaGwgYXVzIHVuZCBmb2xnZW5cbiIKKyJTaWUgZGVuIEFud2Vpc3VuZ2VuIGluIElocmVtIEVkaXRvciwgdW0gZGllIEtvbmZpZ3VyYXRpb25zZGF0ZWkgenUgIgorImJlYXJiZWl0ZW46XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiTmFjaGRlbSBTaWUgZGFzIGdldGFuIGhhYmVuLCBrw7ZubmVuIFNpZSBJaHJlIElkZW50aXTDpHQgZsO8ciBkaWVzZW4gQ29tbWl0XG4iCisiw6RuZGVybiBtaXQ6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjM3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiSWhyIE5hbWUgdW5kIEUtTWFpbCBBZHJlc3NlIHd1cmRlbiBhdXRvbWF0aXNjaCBhdWYgQmFzaXNcbiIKKyJJaHJlcyBCZW51dHplci0gdW5kIFJlY2huZXJuYW1lbnMga29uZmlndXJpZXJ0LiBCaXR0ZSBwcsO8ZmVuIFNpZSwgZGFzc1xuIgorImRpZXNlIHp1dHJlZmZlbmQgc2luZC4gU2llIGvDtm5uZW4gZGllc2UgTWVsZHVuZyB1bnRlcmRyw7xja2VuLCBpbmRlbSBTaWVcbiIKKyJkaWVzZSBleHBsaXppdCBzZXR6ZW46XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiSWhyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgaWhyZUBlbWFpbGFkcmVzc2UuZGVcbiIKKyJcbiIKKyJOYWNoZGVtIFNpZSBkYXMgZ2V0YW4gaGFiZW4sIGvDtm5uZW4gU2llIElocmUgSWRlbnRpdMOkdCBmw7xyIGRpZXNlbiBDb21taXQgIgorIsOkbmRlcm46XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjc5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiS29ubnRlIG5ldSBlcnN0ZWxsdGVuIENvbW1pdCBuaWNodCBuYWNoc2NobGFnZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoxMjgxCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJLb25udGUgbmV1IGVyc3RlbGx0ZW4gQ29tbWl0IG5pY2h0IGFuYWx5c2llcmVuLiIKKworIzogc2VxdWVuY2VyLmM6MTMyNworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJLb25udGUgSEVBRCBuaWNodCBhdWZsw7ZzZW4sIG5hY2hkZW0gZGVyIENvbW1pdCBlcnN0ZWxsdCB3dXJkZS4iCisKKyM6IHNlcXVlbmNlci5jOjEzMjkKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJsb3NnZWzDtnN0ZXIgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTMzMworbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKFJvb3QtQ29tbWl0KSIKKworIzogc2VxdWVuY2VyLmM6MTM1NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICJLb25udGUgSEVBRCBuaWNodCBwYXJzZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoxMzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiSEVBRCAlcyBpc3Qga2VpbiBDb21taXQhIgorCisjOiBzZXF1ZW5jZXIuYzoxMzYwIHNlcXVlbmNlci5jOjE0NTggYnVpbHRpbi9jb21taXQuYzoxNTY5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICJLb25udGUgQ29tbWl0IHZvbiBIRUFEIG5pY2h0IGFuYWx5c2llcmVuLiIKKworIzogc2VxdWVuY2VyLmM6MTQxMSBzZXF1ZW5jZXIuYzoyMDU1Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgIktvbm50ZSBDb21taXQtQXV0b3IgbmljaHQgcGFyc2VuLiIKKworIzogc2VxdWVuY2VyLmM6MTQzMQorbXNnaWQgImNvcnJ1cHRlZCBhdXRob3Igd2l0aG91dCBkYXRlIGluZm9ybWF0aW9uIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXIgQXV0b3Igb2huZSBEYXR1bXNpbmZvcm1hdGlvbmVuLiIKKworIzogc2VxdWVuY2VyLmM6MTQ0NyBidWlsdGluL2FtLmM6MTU2MSBidWlsdGluL21lcmdlLmM6Njg0Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiXCJnaXQgd3JpdGUtdHJlZVwiIHNjaGx1ZyBiZWltIFNjaHJlaWJlbiBlaW5lcyBcIlRyZWVcIi1PYmpla3RlcyBmZWhsIgorCisjOiBzZXF1ZW5jZXIuYzoxNDgwIHNlcXVlbmNlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICJLb25udGUgQ29tbWl0LUJlc2NocmVpYnVuZyB2b24gJyVzJyBuaWNodCBsZXNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjE1MTYgYnVpbHRpbi9hbS5jOjE1ODMgYnVpbHRpbi9jb21taXQuYzoxNjY4IGJ1aWx0aW4vbWVyZ2UuYzo4ODMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MDgKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlcyBDb21taXQtT2JqZWt0ZXMuIgorCisjOiBzZXF1ZW5jZXIuYzoxNTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIktvbm50ZSBDb21taXQgJXMgbmljaHQgcGFyc2VuLiIKKworIzogc2VxdWVuY2VyLmM6MTU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiS29ubnRlIEVsdGVybi1Db21taXQgJXMgbmljaHQgcGFyc2VuLiIKKworIzogc2VxdWVuY2VyLmM6MTY1NiBzZXF1ZW5jZXIuYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgIlVuYmVrYW5udGVyIEJlZmVobDogJWQiCisKKyM6IHNlcXVlbmNlci5jOjE3MTQgc2VxdWVuY2VyLmM6MTczOQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIkRhcyBpc3QgZWluZSBLb21iaW5hdGlvbiBhdXMgJWQgQ29tbWl0cy4iCisKKyM6IHNlcXVlbmNlci5jOjE3MjQKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAiYmVuw7Z0aWdlIEhFQUQgZsO8ciBmaXh1cCIKKworIzogc2VxdWVuY2VyLmM6MTcyNiBzZXF1ZW5jZXIuYzozMzA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiS29ubnRlIEhFQUQgbmljaHQgbGVzZW4iCisKKyM6IHNlcXVlbmNlci5jOjE3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIktvbm50ZSBDb21taXQtQmVzY2hyZWlidW5nIHZvbiBIRUFEIG5pY2h0IGxlc2VuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJrYW5uICclcycgbmljaHQgc2NocmVpYmVuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzQxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTYKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICJEYXMgaXN0IGRpZSBlcnN0ZSBDb21taXQtQmVzY2hyZWlidW5nOiIKKworIzogc2VxdWVuY2VyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIKK21zZ3N0ciAiS29ubnRlIENvbW1pdC1CZXNjaHJlaWJ1bmcgdm9uICVzIG5pY2h0IGxlc2VuLiIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJWQ6IgorbXNnc3RyICJEYXMgaXN0IENvbW1pdC1CZXNjaHJlaWJ1bmcgIyVkOiIKKworIzogc2VxdWVuY2VyLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyVkIHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIkRpZSBDb21taXQtQmVzY2hyZWlidW5nICMlZCB3aXJkIGF1c2dlbGFzc2VuOiIKKworIzogc2VxdWVuY2VyLmM6MTg1MAorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgIklocmUgSW5kZXgtRGF0ZWkgaXN0IG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnQuIgorCisjOiBzZXF1ZW5jZXIuYzoxODU3Cittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICJrYW5uIGZpeHVwIG5pY2h0IGF1ZiBSb290LUNvbW1pdCBhbndlbmRlbiIKKworIzogc2VxdWVuY2VyLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIkNvbW1pdCAlcyBpc3QgZWluIE1lcmdlLCBhYmVyIGRpZSBPcHRpb24gLW0gd3VyZGUgbmljaHQgYW5nZWdlYmVuLiIKKworIzogc2VxdWVuY2VyLmM6MTg4NCBzZXF1ZW5jZXIuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiQ29tbWl0ICVzIGhhdCBrZWluZW4gRWx0ZXJuLUNvbW1pdCAlZCIKKworIzogc2VxdWVuY2VyLmM6MTg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiS2FubiBrZWluZSBDb21taXQtQmVzY2hyZWlidW5nIGbDvHIgJXMgYmVrb21tZW4uIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTkxNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiBrYW5uIEVsdGVybi1Db21taXQgJXMgbmljaHQgcGFyc2VuIgorCisjOiBzZXF1ZW5jZXIuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dSAnJXMnIHVtYmVuZW5uZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgIktvbm50ZSBcInJldmVydFwiIG5pY2h0IGF1ZiAlcy4uLiAoJXMpIGF1c2bDvGhyZW4iCisKKyM6IHNlcXVlbmNlci5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJLb25udGUgJXMuLi4gKCVzKSBuaWNodCBhbndlbmRlbiIKKworIzogc2VxdWVuY2VyLmM6MjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBGZWhsZXIgYmVpbSBMZXNlbiBkZXMgSW5kZXgiCisKKyM6IHNlcXVlbmNlci5jOjIxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogRmVobGVyIGJlaW0gQWt0dWFsaXNpZXJlbiBkZXMgSW5kZXgiCisKKyM6IHNlcXVlbmNlci5jOjIxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiJXMgYWt6ZXB0aWVydCBrZWluZSBBcmd1bWVudGU6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICJGZWhsZW5kZSBBcmd1bWVudGUgZsO8ciAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclLipzJyIKK21zZ3N0ciAiS29ubnRlICclLipzJyBuaWNodCBwYXJzZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoyMjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBaZWlsZSAlZDogJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJLYW5uICclcycgbmljaHQgb2huZSB2b3JoZXJpZ2VuIENvbW1pdCBhdXNmw7xocmVuIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ4IGJ1aWx0aW4vcmViYXNlLmM6MTcyIGJ1aWx0aW4vcmViYXNlLmM6MTk3CisjOiBidWlsdGluL3JlYmFzZS5jOjIyMyBidWlsdGluL3JlYmFzZS5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoyMzg0Cittc2dpZCAiY2FuY2VsbGluZyBhIGNoZXJyeSBwaWNraW5nIGluIHByb2dyZXNzIgorbXNnc3RyICJBYmJyZWNoZW4gZWluZXMgbGF1ZmVuZGVuIFwiY2hlcnJ5LXBpY2tcIiIKKworIzogc2VxdWVuY2VyLmM6MjM5MQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIkFiYnJlY2hlbiBlaW5lcyBsYXVmZW5kZW4gXCJyZXZlcnRcIiIKKworIzogc2VxdWVuY2VyLmM6MjQzNQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICIiCisiQml0dGUgYmVoZWJlbiBTaWUgZGllc2VzLCBpbmRlbSBTaWUgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGF1c2bDvGhyZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoyNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICJVbmJlbnV0emJhcmVzIEluc3RydWt0aW9uc2JsYXR0OiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNDQyCittc2dpZCAibm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICJLZWluZSBDb21taXRzIGdlcGFyc3QuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDUzCittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgIkthbm4gQ2hlcnJ5LVBpY2sgbmljaHQgd8OkaHJlbmQgZWluZXMgUmV2ZXJ0cyBhdXNmw7xocmVuLiIKKworIzogc2VxdWVuY2VyLmM6MjQ1NQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJLYW5uIFJldmVydCBuaWNodCB3w6RocmVuZCBlaW5lcyBDaGVycnktUGlja3MgYXVzZsO8aHJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjI1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNjMwCittc2dpZCAidW51c2FibGUgc3F1YXNoLW9udG8iCittc2dzdHIgIlVuYmVudXR6YmFyZXMgc3F1YXNoLW9udG8uIgorCisjOiBzZXF1ZW5jZXIuYzoyNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAnJXMnIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXMgT3B0aW9uc2JsYXR0OiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNzM2IHNlcXVlbmNlci5jOjQ0NjMKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAibGVlcmUgTWVuZ2Ugdm9uIENvbW1pdHMgw7xiZXJnZWJlbiIKKworIzogc2VxdWVuY2VyLmM6Mjc1MgorbXNnaWQgInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJcInJldmVydFwiIGlzdCBiZXJlaXRzIGltIEdhbmdlIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIlZlcnN1Y2hlbiBTaWUgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU3Cittc2dpZCAiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiXCJjaGVycnktcGlja1wiIHdpcmQgYmVyZWl0cyBkdXJjaGdlZsO8aHJ0IgorCisjOiBzZXF1ZW5jZXIuYzoyNzU5CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiVmVyc3VjaGVuIFNpZSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFwic2VxdWVuY2VyXCItVmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoyNzg4Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAiS29ubnRlIEhFQUQgbmljaHQgc3BlcnJlbiIKKworIzogc2VxdWVuY2VyLmM6Mjg0OCBzZXF1ZW5jZXIuYzo0MjA5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJrZWluIFwiY2hlcnJ5LXBpY2tcIiBvZGVyIFwicmV2ZXJ0XCIgaW0gR2FuZ2UiCisKKyM6IHNlcXVlbmNlci5jOjI4NTAgc2VxdWVuY2VyLmM6Mjg2MQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImthbm4gSEVBRCBuaWNodCBhdWZsw7ZzZW4iCisKKyM6IHNlcXVlbmNlci5jOjI4NTIgc2VxdWVuY2VyLmM6Mjg5NgorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJrYW5uIG5pY2h0IGFiYnJlY2hlbjogYmluIGF1ZiBlaW5lbSBCcmFuY2gsIGRlciBub2NoIG5pY2h0IGdlYm9yZW4gaXN0IgorCisjOiBzZXF1ZW5jZXIuYzoyODgyIGJ1aWx0aW4vZ3JlcC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJrYW5uICclcycgbmljaHQgw7ZmZm5lbiIKKworIzogc2VxdWVuY2VyLmM6Mjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAiS2FubiAnJXMnIG5pY2h0IGxlc2VuOiAlcyIKKworIzogc2VxdWVuY2VyLmM6Mjg4NQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgIlVuZXJ3YXJ0ZXRlcyBEYXRlaWVuZGUiCisKKyM6IHNlcXVlbmNlci5jOjI4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICJnZXNwZWljaGVydGUgXCJwcmUtY2hlcnJ5LXBpY2tcIiBIRUFEIERhdGVpICclcycgaXN0IGJlc2Now6RkaWd0IgorCisjOiBzZXF1ZW5jZXIuYzoyOTAyCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICIiCisiU2llIHNjaGVpbmVuIEhFQUQgdmVyw6RuZGVydCB6dSBoYWJlbi4gS2VpbmUgUsO8Y2tzcHVsdW5nLCBwcsO8ZmVuIFNpZSBIRUFELiIKKworIzogc2VxdWVuY2VyLmM6Mjk0MworbXNnaWQgIm5vIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiS2VpbiBSZXZlcnQgaW0gR2FuZ2UiCisKKyM6IHNlcXVlbmNlci5jOjI5NTEKK21zZ2lkICJubyBjaGVycnktcGljayBpbiBwcm9ncmVzcyIKK21zZ3N0ciAia2VpbiBcImNoZXJyeS1waWNrXCIgaW0gR2FuZ2UiCisKKyM6IHNlcXVlbmNlci5jOjI5NjEKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICLDnGJlcnNwcmluZ2VuIGRlcyBDb21taXRzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBzZXF1ZW5jZXIuYzoyOTY4Cittc2dpZCAidGhlcmUgaXMgbm90aGluZyB0byBza2lwIgorbXNnc3RyICJOaWNodHMgenVtIMOcYmVyc3ByaW5nZW4gdm9yaGFuZGVuIgorCisjOiBzZXF1ZW5jZXIuYzoyOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJoYXZlIHlvdSBjb21taXR0ZWQgYWxyZWFkeT9cbiIKKyJ0cnkgXCJnaXQgJXMgLS1jb250aW51ZVwiIgorbXNnc3RyICIiCisiSGFiZW4gU2llIGJlcmVpdHMgY29tbWl0dGV0P1xuIgorIlZlcnN1Y2hlbiBTaWUgXCJnaXQgJXMgLS1jb250aW51ZVwiIgorCisjOiBzZXF1ZW5jZXIuYzozMDk1IHNlcXVlbmNlci5jOjQxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IGFrdHVhbGlzaWVyZW4uIgorCisjOiBzZXF1ZW5jZXIuYzozMTM0IHNlcXVlbmNlci5jOjQxMDEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJLYW5uIEhFQUQgbmljaHQgbGVzZW4iCisKKyM6IHNlcXVlbmNlci5jOjMxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBuYWNoICclcycga29waWVyZW4uIgorCisjOiBzZXF1ZW5jZXIuYzozMTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiU2llIGvDtm5uZW4gZGVuIENvbW1pdCBudW4gbmFjaGJlc3Nlcm4gbWl0OlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiU29iYWxkIFNpZSBtaXQgSWhyZW4gw4RuZGVydW5nZW4genVmcmllZGVuIHNpbmQsIGbDvGhyZW4gU2llIGF1czpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAlcy4uLiAlLipzIgorbXNnc3RyICJLb25udGUgJXMuLi4gKCUuKnMpIG5pY2h0IGFud2VuZGVuIgorCisjOiBzZXF1ZW5jZXIuYzozMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICJLb25udGUgXCIlLipzXCIgbmljaHQgenVzYW1tZW5mw7xocmVuLiIKKworIzogc2VxdWVuY2VyLmM6MzE5MCBzZXF1ZW5jZXIuYzozMTk0IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBuYWNoICclcycga29waWVyZW4uIgorCisjOiBzZXF1ZW5jZXIuYzozMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdXNmw7xocnVuZyBmZWhsZ2VzY2hsYWdlbjogJXNcbiIKKyIlc1NpZSBrw7ZubmVuIGRhcyBQcm9ibGVtIGJlaGViZW4sIHVuZCBkYW5uXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKyJhdXNmw7xocmVuLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjI3Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAiRGVyIEluZGV4IHVuZC9vZGVyIGRhcyBBcmJlaXRzdmVyemVpY2huaXMgd3VyZGUgZ2XDpG5kZXJ0LlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkF1c2bDvGhydW5nIGVyZm9sZ3JlaWNoOiAlc1xuIgorIkFiZXIgw4RuZGVydW5nZW4gaW4gSW5kZXggb2RlciBBcmJlaXRzdmVyemVpY2huaXMgdmVyYmxpZWJlbi5cbiIKKyJDb21taXR0ZW4gU2llIElocmUgw4RuZGVydW5nZW4gb2RlciBiZW51dHplbiBTaWUgXCJzdGFzaFwiLlxuIgorIkbDvGhyZW4gU2llIGRhbm4gYXVzOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIlVuZXJsYXVidGVyIEJlc2NocmlmdHVuZ3NuYW1lOiAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjMzNDgKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgInVuZWNodGVuIFJvb3QtQ29tbWl0IHNjaHJlaWJlbiIKKworIzogc2VxdWVuY2VyLmM6MzM1MworbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgInNxdWFzaC1vbnRvIHNjaHJlaWJlbiIKKworIzogc2VxdWVuY2VyLmM6MzM5MSBidWlsdGluL3JlYmFzZS5jOjg3NiBidWlsdGluL3JlYmFzZS5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBGaW5kZW4gZGVzIFwiVHJlZVwiLU9iamVrdGVzIHZvbiAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjM0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYXVmbMO2c2VuLiIKKworIzogc2VxdWVuY2VyLmM6MzQ2NworbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAiS2FubiBuaWNodCBvaG5lIGVpbmVuIGFrdHVlbGxlbiBDb21taXQgbWVyZ2VuLiIKKworIzogc2VxdWVuY2VyLmM6MzQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICJLb25udGUgJyUuKnMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjM0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICJOaWNodHMgenVtIFp1c2FtbWVuZsO8aHJlbjogJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNTEwCittc2dpZCAib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gdG9wIG9mIGEgW25ldyByb290XSIKK21zZ3N0ciAiIgorIk9jdHVwdXMtTWVyZ2Uga2FubiBuaWNodCBhdWYgQmFzaXMgdm9uIFtuZXVlbSBSb290LUNvbW1pdF0gYXVzZ2Vmw7xocnQgd2VyZGVuLiIKKworIzogc2VxdWVuY2VyLmM6MzUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgIktvbm50ZSBrZWluZSBDb21taXQtQmVzY2hyZWlidW5nIHZvbiAnJXMnIGJla29tbWVuLiIKKworIzogc2VxdWVuY2VyLmM6MzY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAiS29ubnRlIG5pY2h0IGVpbm1hbCB2ZXJzdWNoZW4gJyUuKnMnIHp1IG1lcmdlbi4iCisKKyM6IHNlcXVlbmNlci5jOjM3MDQKK21zZ2lkICJtZXJnZTogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJtZXJnZTogS29ubnRlIG5ldWUgSW5kZXgtRGF0ZWkgbmljaHQgc2NocmVpYmVuLiIKKworIzogc2VxdWVuY2VyLmM6Mzc3MyBidWlsdGluL3JlYmFzZS5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAiQXV0b21hdGlzY2hlbiBTdGFzaCBhbmdld2VuZGV0LlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAia2FubiAlcyBuaWNodCBzcGVpY2hlcm4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODggYnVpbHRpbi9yZWJhc2UuYzo3NDkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIkFud2VuZHVuZyBkZXMgYXV0b21hdGlzY2hlbiBTdGFzaCByZXN1bHRpZXJ0ZSBpbiBLb25mbGlrdGVuLlxuIgorIklocmUgw4RuZGVydW5nZW4gc2luZCBpbSBTdGFzaCBzaWNoZXIuXG4iCisiU2llIGvDtm5uZW4gamVkZXJ6ZWl0IFwiZ2l0IHN0YXNoIHBvcFwiIG9kZXIgXCJnaXQgc3Rhc2ggZHJvcFwiIGF1c2bDvGhyZW4uXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgYXVzY2hlY2tlbi4iCisKKyM6IHNlcXVlbmNlci5jOjM4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXM6IGtlaW5lIGfDvGx0aWdlIE9JRCIKKworIzogc2VxdWVuY2VyLmM6Mzg2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzc5Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJLb25udGUgSEVBRCBuaWNodCBsb3Nsw7ZzZW4iCisKKyM6IHNlcXVlbmNlci5jOjM4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIkFuZ2VoYWx0ZW4gYmVpIEhFQURcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzXG4iCittc2dzdHIgIkFuZ2VoYWx0ZW4gYmVpICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJLb25udGUgVE9ETy1CZWZlaGwgbmljaHQgYXVzZsO8aHJlblxuIgorIlxuIgorIiAgICAlLipzXG4iCisiRGllc2VyIHd1cmRlIG5ldSBhbmdlc2V0enQ7IFVtIGRlbiBCZWZlaGwgenUgYmVhcmJlaXRlbiwgYmV2b3IgZm9ydGdlc2V0enQgIgorIndpcmQsXG4iCisiYmVhcmJlaXRlbiBTaWUgYml0dGUgenVlcnN0IGRpZSBUT0RPLUxpc3RlOlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozOTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAiQW5nZWhhbHRlbiBiZWkgJXMuLi4gJS4qc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAiVW5iZWthbm50ZXIgQmVmZWhsICVkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTA5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICJLb25udGUgb3JpZy1oZWFkIG5pY2h0IGxlc2VuLiIKKworIzogc2VxdWVuY2VyLmM6NDExNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAiS29ubnRlICdvbnRvJyBuaWNodCBsZXNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjQxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICJLb25udGUgSEVBRCBuaWNodCBhdWYgJXMgYWt0dWFsaXNpZXJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjQyMjEKK21zZ2lkICJjYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIlJlYmFzZSBuaWNodCBtw7ZnbGljaDogU2llIGhhYmVuIMOEbmRlcnVuZ2VuLCBkaWUgbmljaHQgenVtIENvbW1pdFxuIgorInZvcmdlbWVya3Qgc2luZC4iCisKKyM6IHNlcXVlbmNlci5jOjQyMzAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAiS2FubiBuaWNodCBleGlzdGllcmVuZGVuIENvbW1pdCBuaWNodCBuYWNoYmVzc2Vybi4iCisKKyM6IHNlcXVlbmNlci5jOjQyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIERhdGVpOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2UgSW5oYWx0ZTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDIzNworbXNnaWQgIiIKKyJcbiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIlxuIgorIlNpZSBoYWJlbiBuaWNodCBjb21taXR0ZXRlIMOEbmRlcnVuZ2VuIGluIElocmVtIEFyYmVpdHN2ZXJ6ZWljaG5pcy4gQml0dGVcbiIKKyJjb21taXR0ZW4gU2llIGRpZXNlIHp1ZXJzdCB1bmQgZsO8aHJlbiBTaWUgZGFubiAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJ1xuIgorImVybmV1dCBhdXMuIgorCisjOiBzZXF1ZW5jZXIuYzo0MjczIHNlcXVlbmNlci5jOjQzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgIktvbm50ZSBEYXRlaSBuaWNodCBzY2hyZWliZW46ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQzMjcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIktvbm50ZSBDSEVSUllfUElDS19IRUFEIG5pY2h0IGzDtnNjaGVuLiIKKworIzogc2VxdWVuY2VyLmM6NDMzNAorbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLb25udGUgw4RuZGVydW5nZW4gYXVzIGRlciBTdGFnaW5nLUFyZWEgbmljaHQgY29tbWl0dGVuLiIKKworIzogc2VxdWVuY2VyLmM6NDQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6ICVzIGthbm4gbmljaHQgaW4gXCJjaGVycnktcGlja1wiIGJlbnV0enQgd2VyZGVuIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiB1bmfDvGx0aWdlciBDb21taXQiCisKKyM6IHNlcXVlbmNlci5jOjQ0NzkKK21zZ2lkICJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIkthbm4gbmljaHQgYWxzIGFsbGVyZXJzdGVuIENvbW1pdCBlaW5lbiBSZXZlcnQgYXVzZsO8aHJlbi4iCisKKyM6IHNlcXVlbmNlci5jOjQ5NTIKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiB1bmJlaGFuZGVsdGUgT3B0aW9uZW4iCisKKyM6IHNlcXVlbmNlci5jOjQ5NTUKK21zZ2lkICJtYWtlX3NjcmlwdDogZXJyb3IgcHJlcGFyaW5nIHJldmlzaW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHQ6IEZlaGxlciBiZWltIFZvcmJlcmVpdGVuIGRlciBDb21taXRzIgorCisjOiBzZXF1ZW5jZXIuYzo1MTEzCittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIlNpZSBrw7ZubmVuIGRhcyBtaXQgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGJlaGViZW4uIEbDvGhyZW4gU2llIGRhbmFjaFxuIgorIidnaXQgcmViYXNlIC0tY29udGludWUnIGF1cy5cbiIKKyJPZGVyIFNpZSBrw7ZubmVuIGRlbiBSZWJhc2UgbWl0ICdnaXQgcmViYXNlIC0tYWJvcnQnIGFiYnJlY2hlbi5cbiIKKworIzogc2VxdWVuY2VyLmM6NTIyNiBzZXF1ZW5jZXIuYzo1MjQzCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAiTmljaHRzIHp1IHR1bi4iCisKKyM6IHNlcXVlbmNlci5jOjUyNTcKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICJLb25udGUgdW5uw7Z0aWdlIFwicGlja1wiLUJlZmVobGUgbmljaHQgYXVzbGFzc2VuLiIKKworIzogc2VxdWVuY2VyLmM6NTM1MQorbXNnaWQgInRoZSBzY3JpcHQgd2FzIGFscmVhZHkgcmVhcnJhbmdlZC4iCittc2dzdHIgIkRhcyBTY3JpcHQgd3VyZGUgYmVyZWl0cyB1bWdlb3JkbmV0LiIKKworIzogc2V0dXAuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiclcycgbGllZ3QgYXXDn2VyaGFsYiBkZXMgUmVwb3NpdG9yaWVzLiIKKworIzogc2V0dXAuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisiJXM6IGtlaW4gc29sY2hlciBQZmFkIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcy5cbiIKKyJCZW51dHplbiBTaWUgJ2dpdCA8QmVmZWhsPiAtLSA8UGZhZD4uLi4nIHp1ciBBbmdhYmUgdm9uIFBmYWRlbiwgZGllIGxva2FsXG4iCisibmljaHQgZXhpc3RpZXJlbi4iCisKKyM6IHNldHVwLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorIm1laHJkZXV0aWdlcyBBcmd1bWVudCAnJXMnOiB1bmJla2FubnRlciBDb21taXQgb2RlciBQZmFkIGV4aXN0aWVydCBuaWNodFxuIgorImltIEFyYmVpdHN2ZXJ6ZWljaG5pc1xuIgorIkJlbnV0emVuIFNpZSAnLS0nLCB1bSBQZmFkZSB1bmQgQ29tbWl0cyB6dSB0cmVubmVuLCDDpGhubGljaCB3aWU6XG4iCisiJ2dpdCA8QmVmZWhsPiBbPENvbW1pdD4uLi5dIC0tIFs8RGF0ZWk+Li4uXSciCisKKyM6IHNldHVwLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uICclcycgbXVzcyB2b3IgZGVuIEFyZ3VtZW50ZW4ga29tbWVuLCBkaWUga2VpbmUgT3B0aW9uZW4gc2luZC4iCisKKyM6IHNldHVwLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWVcbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJtZWhyZGV1dGlnZXMgQXJndW1lbnQgJyVzJzogc293b2hsIENvbW1pdCBhbHMgYXVjaCBEYXRlaW5hbWVcbiIKKyJCZW51dHplbiBTaWUgJy0tJywgdW0gUGZhZGUgdW5kIENvbW1pdHMgenUgdHJlbm5lbiwgw6RobmxpY2ggd2llOlxuIgorIidnaXQgPEJlZmVobD4gWzxDb21taXQ+Li4uXSAtLSBbPERhdGVpPi4uLl0nIgorCisjOiBzZXR1cC5jOjM5MQorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICIiCisiS29ubnRlIEFyYmVpdHN2ZXJ6ZWljaG5pcyBtaXQgdW5nw7xsdGlnZXIgS29uZmlndXJhdGlvbiBuaWNodCBlaW5yaWNodGVuLiIKKworIzogc2V0dXAuYzozOTUKK21zZ2lkICJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKK21zZ3N0ciAiRGllc2UgT3BlcmF0aW9uIG11c3MgaW4gZWluZW0gQXJiZWl0c3ZlcnplaWNobmlzIGF1c2dlZsO8aHJ0IHdlcmRlbi4iCisKKyM6IHNldHVwLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJFcndhcnRldGUgR2l0LVJlcG9zaXRvcnktVmVyc2lvbiA8PSAlZCwgJWQgZ2VmdW5kZW4iCisKKyM6IHNldHVwLmM6NTQ5Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJVbmJla2FubnRlIFJlcG9zaXRvcnktRXJ3ZWl0ZXJ1bmdlbiBnZWZ1bmRlbjoiCisKKyM6IHNldHVwLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiB2b24gJyVzJy4iCisKKyM6IHNldHVwLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAiWnUgZ3Jvw58sIHVtIGVpbmUgLmdpdC1EYXRlaSB6dSBzZWluOiAnJXMnIgorCisjOiBzZXR1cC5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiB2b24gJyVzJy4iCisKKyM6IHNldHVwLmM6NTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBnaXRmaWxlLUZvcm1hdDogJXMiCisKKyM6IHNldHVwLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgIktlaW4gUGZhZCBpbiBnaXRmaWxlOiAlcyIKKworIzogc2V0dXAuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIgogbXNnc3RyICJLZWluIEdpdC1SZXBvc2l0b3J5OiAlcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzAKLW1zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIlN0YW5kYXJkIGlzdCBudXIgZsO8ciBsb2thbGUgUmVwb3NpdG9yaWVzIHZlcmbDvGdiYXIuIgorIzogc2V0dXAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiJyQlcycgenUgZ3Jvw58iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjM0Ci1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiVmVya27DvHBmdCBpc3QgbnVyIGbDvHIgbG9rYWxlIFJlcG9zaXRvcmllcyB2ZXJmw7xnYmFyLiIKKyM6IHNldHVwLmM6NjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAnJXMnIgorbXNnc3RyICJLZWluIEdpdC1SZXBvc2l0b3J5OiAnJXMnIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiQWRyZXNzZSDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorIzogc2V0dXAuYzo3MjAgc2V0dXAuYzo3MjIgc2V0dXAuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgIkthbm4gbmljaHQgaW4gVmVyemVpY2huaXMgJyVzJyB3ZWNoc2Vsbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY2Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCi1tc2dzdHIgIkRlciBVcnNwcnVuZ3NvcnQga29ubnRlIG5pY2h0IGVpbmdlcmljaHRldCB3ZXJkZW4iCisjOiBzZXR1cC5jOjcyNSBzZXR1cC5jOjc4MSBzZXR1cC5jOjc5MSBzZXR1cC5jOjgzMCBzZXR1cC5jOjgzOAorbXNnaWQgImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJLYW5uIG5pY2h0IHp1bSBha3R1ZWxsZW4gQXJiZWl0c3ZlcnplaWNobmlzIHp1csO8Y2t3ZWNoc2Vsbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njc4CisjOiBzZXR1cC5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgIktvbm50ZSAnJSpzJXMlcycgbmljaHQgbGVzZW4uIgorCisjOiBzZXR1cC5jOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJLb25udGUgYWt0dWVsbGVzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBuaWNodCBsZXNlbi4iCisKKyM6IHNldHVwLmM6MTA5OSBzZXR1cC5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICJLYW5uIG5pY2h0IG5hY2ggJyVzJyB3ZWNoc2Vsbi4iCisKKyM6IHNldHVwLmM6MTExMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAiS2VpbiBHaXQtUmVwb3NpdG9yeSAob2RlciBpcmdlbmRlaW5lcyBkZXIgRWx0ZXJudmVyemVpY2huaXNzZSk6ICVzIgorCisjOiBzZXR1cC5jOjExMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICIiCisiS2VpbiBHaXQtUmVwb3NpdG9yeSAob2RlciBpcmdlbmRlaW4gRWx0ZXJudmVyemVpY2huaXMgYmlzIHp1bSBFaW5ow6RuZ2VwdW5rdCAiCisiJXMpXG4iCisiU3RvcHBlIGJlaSBEYXRlaXN5c3RlbWdyZW56ZSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBuaWNodCBnZXNldHp0KS4iCisKKyM6IHNldHVwLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorIlByb2JsZW0gbWl0IFdlcnQgZsO8ciBEYXRlaW1vZHVzICgwJS4zbykgdm9uIGNvcmUuc2hhcmVkUmVwb3NpdG9yeS5cbiIKKyJEZXIgQmVzaXR6ZXIgZGVyIERhdGVpZW4gbXVzcyBpbW1lciBMZXNlLSB1bmQgU2NocmVpYnJlY2h0ZSBoYWJlbi4iCisKKyM6IHNldHVwLmM6MTI3MQorbXNnaWQgIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiCittc2dzdHIgIsOWZmZuZW4gdm9uIC9kZXYvbnVsbCBvZGVyIGR1cCBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IHNldHVwLmM6MTI4NgorbXNnaWQgImZvcmsgZmFpbGVkIgorbXNnc3RyICJmb3JrIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBzZXR1cC5jOjEyOTEKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICJzZXRzaWQgZmVobGdlc2NobGFnZW4iCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICIiCisiT2JqZWt0dmVyemVpY2huaXMgJXMgZXhpc3RpZXJ0IG5pY2h0OyBwcsO8ZmUgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAiS29ubnRlIGFsdGVybmF0aXZlbiBPYmpla3RwZmFkICclcycgbmljaHQgbm9ybWFsaXNpZXJlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiVzOiBpZ25vcmllcmUgYWx0ZXJuYXRpdmUgT2JqZWt0c3BlaWNoZXIgLSBWZXJzY2hhY2h0ZWx1bmcgenUgdGllZiIKKworIzogc2hhMS1maWxlLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgb2JqZWN0IGRpcmVjdG9yeTogJXMiCittc2dzdHIgIktvbm50ZSBPYmpla3R2ZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IG5vcm1hbGlzaWVyZW4uIgorCisjOiBzaGExLWZpbGUuYzo2MjUKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgIktvbm50ZSBmZG9wZW4gbmljaHQgYXVmIExvY2stRGF0ZWkgZsO8ciBcImFsdGVybmF0ZXNcIiBhdWZydWZlbi4iCisKKyM6IHNoYTEtZmlsZS5jOjY0MworbXNnaWQgInVuYWJsZSB0byByZWFkIGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiS29ubnRlIFwiYWx0ZXJuYXRlc1wiLURhdGVpIG5pY2h0IGxlc2VuLiIKKworIzogc2hhMS1maWxlLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICJLb25udGUgbmV1ZSBcImFsdGVybmF0ZXNcIi1EYXRlaSBuaWNodCDDvGJlcm5laG1lbi4iCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlBmYWQgJyVzJyBleGlzdGllcnQgbmljaHQiCisKKyM6IHNoYTEtZmlsZS5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkIGNoZWNrb3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIKK21zZ3N0ciAiIgorIlJlZmVyZW56aWVydGVzIFJlcG9zaXRvcnkgJyVzJyB3aXJkIG5vY2ggbmljaHQgYWxzIHZlcmtuw7xwZnRlc1xuIgorIkFyYmVpdHN2ZXJ6ZWljaG5pcyB1bnRlcnN0w7x0enQuIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiUmVmZXJlbnppZXJ0ZXMgUmVwb3NpdG9yeSAnJXMnIGlzdCBrZWluIGxva2FsZXMgUmVwb3NpdG9yeS4iCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgIiIKKyJSZWZlcmVuemllcnRlcyBSZXBvc2l0b3J5ICclcycgaGF0IGVpbmUgdW52b2xsc3TDpG5kaWdlIEhpc3RvcmllIChzaGFsbG93KS4iCisKKyM6IHNoYTEtZmlsZS5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiCittc2dzdHIgIiIKKyJSZWZlcmVuemllcnRlcyBSZXBvc2l0b3J5ICclcycgaXN0IG1pdCBrw7xuc3RsaWNoZW4gVm9yZ8Okbmdlcm4gKFwiZ3JhZnRzXCIpICIKKyJlaW5nZWjDpG5ndC4iCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgWmVpbGUgYmVpbSBQYXJzZW4gYWx0ZXJuYXRpdmVyIFJlZmVyZW56ZW46ICVzIgorCisjOiBzaGExLWZpbGUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXR0ZW1wdGluZyB0byBtbWFwICU8UFJJdU1BWD4gb3ZlciBsaW1pdCAlPFBSSXVNQVg+IgorbXNnc3RyICJWZXJzdWNoZSBtbWFwICU8UFJJdU1BWD4gw7xiZXIgTGltaXQgJTxQUkl1TUFYPi4iCisKKyM6IHNoYTEtZmlsZS5jOjk2NAorbXNnaWQgIm1tYXAgZmFpbGVkIgorbXNnc3RyICJtbWFwIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICJPYmpla3RkYXRlaSAlcyBpc3QgbGVlci4iCisKKyM6IHNoYTEtZmlsZS5jOjEyNTIgc2hhMS1maWxlLmM6MjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXMgbG9zZXMgT2JqZWt0ICclcycuIgorCisjOiBzaGExLWZpbGUuYzoxMjU0IHNoYTEtZmlsZS5jOjIzOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2FyYmFnZSBhdCBlbmQgb2YgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIk51dHpsb3NlIERhdGVuIGFtIEVuZGUgdm9uIGxvc2VtIE9iamVrdCAnJXMnLiIKKworIzogc2hhMS1maWxlLmM6MTI5NgorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUiCittc2dzdHIgInVuZ8O8bHRpZ2VyIE9iamVrdC1UeXAiCisKKyM6IHNoYTEtZmlsZS5jOjEzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiS29ubnRlICVzIEtvcGZiZXJlaWNoIG5pY2h0IG1pdCAtLWFsbG93LXVua25vd24tdHlwZSBlbnRwYWNrZW4uIgorCisjOiBzaGExLWZpbGUuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIgorbXNnc3RyICJLb25udGUgJXMgS29wZmJlcmVpY2ggbmljaHQgZW50cGFja2VuLiIKKworIzogc2hhMS1maWxlLmM6MTM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIktvbm50ZSAlcyBLb3BmYmVyZWljaCBtaXQgLS1hbGxvdy11bmtub3duLXR5cGUgbmljaHQgcGFyc2VuLiIKKworIzogc2hhMS1maWxlLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICJLb25udGUgJXMgS29wZmJlcmVpY2ggbmljaHQgcGFyc2VuLiIKKworIzogc2hhMS1maWxlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIktvbm50ZSBPYmpla3QgJXMgbmljaHQgbGVzZW4uIgorCisjOiBzaGExLWZpbGUuYzoxNTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiCittc2dzdHIgIkVyc2V0enVuZyAlcyBmw7xyICVzIG5pY2h0IGdlZnVuZGVuLiIKKworIzogc2hhMS1maWxlLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAiTG9zZXMgT2JqZWt0ICVzIChnZXNwZWljaGVydCBpbiAlcykgaXN0IGJlc2Now6RkaWd0LiIKKworIzogc2hhMS1maWxlLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIkdlcGFja3RlcyBPYmpla3QgJXMgKGdlc3BlaWNoZXJ0IGluICVzKSBpc3QgYmVzY2jDpGRpZ3QuIgorCisjOiBzaGExLWZpbGUuYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICJLb25udGUgRGF0ZWkgJXMgbmljaHQgc2NocmVpYmVuLiIKKworIzogc2hhMS1maWxlLmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlIFp1Z3JpZmZzYmVyZWNodGlndW5nIGF1ZiAnJXMnIG5pY2h0IHNldHplbi4iCisKKyM6IHNoYTEtZmlsZS5jOjE3MTMKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZWluZXIgRGF0ZWkuIgorCisjOiBzaGExLWZpbGUuYzoxNzMyCittc2dpZCAiZXJyb3Igd2hlbiBjbG9zaW5nIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIGRlciBEYXRlaSBmw7xyIGxvc2UgT2JqZWt0ZS4iCisKKyM6IHNoYTEtZmlsZS5jOjE3OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIGFkZGluZyBhbiBvYmplY3QgdG8gcmVwb3NpdG9yeSBkYXRhYmFzZSAlcyIKK21zZ3N0ciAiIgorIlVuenVyZWljaGVuZGUgQmVyZWNodGlndW5nIHp1bSBIaW56dWbDvGdlbiBlaW5lcyBPYmpla3RlcyB6dXIgUmVwb3NpdG9yeS0iCisiRGF0ZW5iYW5rICVzIgorCisjOiBzaGExLWZpbGUuYzoxNzk5Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiS29ubnRlIHRlbXBvcsOkcmUgRGF0ZWkgbmljaHQgZXJzdGVsbGVuLiIKKworIzogc2hhMS1maWxlLmM6MTgyMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBEYXRlaSBmw7xyIGxvc2UgT2JqZWt0ZS4iCisKKyM6IHNoYTEtZmlsZS5jOjE4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgbmV3IG9iamVjdCAlcyAoJWQpIgorbXNnc3RyICJLb25udGUgbmV1ZXMgT2JqZWt0ICVzICglZCkgbmljaHQga29tcHJpbWllcmVuLiIKKworIzogc2hhMS1maWxlLmM6MTgzMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAiZGVmbGF0ZUVuZCBhdWYgT2JqZWt0ICVzIGZlaGxnZXNjaGxhZ2VuICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIKK21zZ3N0ciAiRmVobGVyIHdlZ2VuIGluc3RhYmlsZW4gT2JqZWt0cXVlbGxkYXRlbiBmw7xyICVzIgorCisjOiBzaGExLWZpbGUuYzoxODQ3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdWZydWYgdm9uIHV0aW1lKCkgYXVmICclcycuIgorCisjOiBzaGExLWZpbGUuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIkthbm4gT2JqZWt0IGbDvHIgJXMgbmljaHQgbGVzZW4uIgorCisjOiBzaGExLWZpbGUuYzoxOTYyCittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgImZlaGxlcmhhZnRlciBDb21taXQiCisKKyM6IHNoYTEtZmlsZS5jOjE5NzAKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAiZmVobGVyaGFmdGVzIFRhZyIKKworIzogc2hhMS1maWxlLmM6MjA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGVycm9yIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJMZXNlZmVobGVyIGJlaW0gSW5kaXppZXJlbiB2b24gJyVzJy4iCisKKyM6IHNoYTEtZmlsZS5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgcmVhZCB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAicmVhZCgpIHp1IGt1cnogYmVpbSBJbmRpemllcmVuIHZvbiAnJXMnLiIKKworIzogc2hhMS1maWxlLmM6MjE0NSBzaGExLWZpbGUuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiCittc2dzdHIgIiVzOiBGZWhsZXIgYmVpbSBFaW5mw7xnZW4gaW4gZGllIERhdGVuYmFuayIKKworIzogc2hhMS1maWxlLmM6MjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICIlczogbmljaHQgdW50ZXJzdMO8dHp0ZSBEYXRlaWFydCIKKworIzogc2hhMS1maWxlLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiVzIGlzdCBrZWluIGfDvGx0aWdlcyBPYmpla3QiCisKKyM6IHNoYTEtZmlsZS5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIGlzdCBrZWluIGfDvGx0aWdlcyAnJXMnIE9iamVrdCIKKworIzogc2hhMS1maWxlLmM6MjIxMyBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgImthbm4gJXMgbmljaHQgw7ZmZm5lbiIKKworIzogc2hhMS1maWxlLmM6MjQwMyBzaGExLWZpbGUuYzoyNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiCittc2dzdHIgIkhhc2ggZsO8ciAlcyBzdGltbXQgbmljaHQgw7xiZXJlaW4gKCVzIGVyd2FydGV0KS4iCisKKyM6IHNoYTEtZmlsZS5jOjI0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJXMiCittc2dzdHIgIktvbm50ZSBtbWFwIG5pY2h0IGF1ZiAlcyBhdXNmw7xocmVuLiIKKworIzogc2hhMS1maWxlLmM6MjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiS29ubnRlIEtvcGZiZXJlaWNoIHZvbiAlcyBuaWNodCBlbnRwYWNrZW4uIgorCisjOiBzaGExLWZpbGUuYzoyNDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBoZWFkZXIgb2YgJXMiCittc2dzdHIgIktvbm50ZSBLb3BmYmVyZWljaCB2b24gJXMgbmljaHQgcGFyc2VuLiIKKworIzogc2hhMS1maWxlLmM6MjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGNvbnRlbnRzIG9mICVzIgorbXNnc3RyICJLb25udGUgSW5oYWx0IHZvbiAlcyBuaWNodCBlbnRwYWNrZW4uIgorCisjOiBzaGExLW5hbWUuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkt1cnplciBTSEEtMSAlcyBpc3QgbWVocmRldXRpZy4iCisKKyM6IHNoYTEtbmFtZS5jOjQ5OAorbXNnaWQgIlRoZSBjYW5kaWRhdGVzIGFyZToiCittc2dzdHIgIkRpZSBLYW5kaWRhdGVuIHNpbmQ6IgorCisjOiBzaGExLW5hbWUuYzo3OTcKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICIiCisiR2l0IGVyemV1Z3Qgbm9ybWFsZXJ3ZWlzZSBrZWluZSBSZWZlcmVuemVuIGRpZSBtaXRcbiIKKyI0MCBIZXgtWmVpY2hlbiBlbmRlbiwgZGEgZGllc2UgaWdub3JpZXJ0IHdlcmRlbiB3ZW5uXG4iCisiU2llIGRpZXNlIGFuZ2ViZW4uIERpZXNlIFJlZmVyZW56ZW4ga8O2bm50ZW4gYXVzIFZlcnNlaGVuXG4iCisiZXJ6ZXVndCB3b3JkZW4gc2Vpbi4gWnVtIEJlaXNwaWVsLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3b2JlaSBcIiRiclwiIGxlZXIgaXN0IHVuZCBlaW5lIDQwLUhleC1SZWZlcmVueiBlcnpldWd0XG4iCisid3VyZGUuIEJpdHRlIHByw7xmZW4gU2llIGRpZXNlIFJlZmVyZW56ZW4gdW5kIGzDtnNjaGVuXG4iCisiU2llIHNpZSBnZWdlYmVuZW5mYWxscy4gVW50ZXJkcsO8Y2tlbiBTaWUgZGllc2UgTWVsZHVuZ1xuIgorImluZGVtIFNpZSBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCJcbiIKKyJhdXNmw7xocmVuLiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldS4lMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZQorIzogc3RyYnVmLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQiIKK21zZ3N0ciAiJXUuJTIuMnUgTWlCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCL3MiCittc2dzdHIgIiV1LiUyLjJ1IE1pQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIiCittc2dzdHIgIiV1LiUyLjJ1IEtpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQi9zIgorbXNnc3RyICIldS4lMi4ydSBLaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUgQnl0ZSIKK21zZ3N0clsxXSAiJXUgQnl0ZXMiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUvcyIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMvcyIKK21zZ3N0clswXSAiJXUgQnl0ZS9zIgorbXNnc3RyWzFdICIldSBCeXRlcy9zIgorCisjOiBzdHJidWYuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGVkaXRpZXJlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIkthbm4gbmljaHQgenVzYW1tZW5nZWbDvGhydGUgLmdpdG1vZHVsZXMtRGF0ZWkgbmljaHQgw6RuZGVybiwgbMO2c2VuXG4iCisiU2llIHp1ZXJzdCBkaWUgS29uZmxpa3RlIGF1ZiIKKworIzogc3VibW9kdWxlLmM6MTE4IHN1Ym1vZHVsZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgIktvbm50ZSBrZWluZSBTZWt0aW9uIGluIC5naXRtb2R1bGVzIG1pdCBQZmFkIFwiJXNcIiBmaW5kZW4iCisKKyM6IHN1Ym1vZHVsZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiS29ubnRlIEVpbnRyYWcgJyVzJyBuaWNodCBhdXMgLmdpdG1vZHVsZXMgZW50ZmVybmVuIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICJLb25udGUgYWt0dWFsaXNpZXJ0ZSAuZ2l0bW9kdWxlcy1EYXRlaSBuaWNodCB6dW0gQ29tbWl0IHZvcm1lcmtlbiIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJJbiBuaWNodCBhdXNnZWNoZWNrdGVtIFN1Ym1vZHVsICclcycuIgorCisjOiBzdWJtb2R1bGUuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJQZmFkc3BlemlmaWthdGlvbiAnJXMnIGJlZmluZGV0IHNpY2ggaW4gU3VibW9kdWwgJyUuKnMnIgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgIlN1Ym1vZHVsLUVpbnRyYWcgJyVzJyAoJXMpIGlzdCBlaW4gJXMsIGtlaW4gQ29tbWl0LiIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjAxNgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJLb25udGUgSEVBRCBuaWNodCBhbHMgZ8O8bHRpZ2UgUmVmZXJlbnogYXVmbMO2c2VuLiIKKworIzogc3VibW9kdWxlLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJLb25udGUgbmljaHQgYXVmIFN1Ym1vZHVsICclcycgenVncmVpZmVuLiIKKworIzogc3VibW9kdWxlLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiclcycgbmljaHQgYWxzIEdpdC1SZXBvc2l0b3J5IGVya2FubnQiCisKKyM6IHN1Ym1vZHVsZS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXJ0ICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlICdnaXQgc3RhdHVzJyBpbiBTdWJtb2R1bCAnJXMnIG5pY2h0IHN0YXJ0ZW4uIgorCisjOiBzdWJtb2R1bGUuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJLb25udGUgJ2dpdCBzdGF0dXMnIGluIFN1Ym1vZHVsICclcycgbmljaHQgYXVzZsO8aHJlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjE4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVuc2V0IGNvcmUud29ya3RyZWUgc2V0dGluZyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIGNvcmUud29ya3RyZWUgRWluc3RlbGx1bmcgaW4gU3VibW9kdWwgJyVzJyBuaWNodCBhdWZoZWJlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjE5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICJTdWJtb2R1bCAnJXMnIGhhdCBlaW5lbiBnZcOkbmRlcnRlbiBJbmRleC4iCisKKyM6IHN1Ym1vZHVsZS5jOjE5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICJTdWJtb2R1bGUgJyVzJyBrb25udGUgbmljaHQgYWt0dWFsaXNpZXJ0IHdlcmRlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgIiIKKyJHaXQtVmVyemVpY2huaXMgZGVzIFN1Ym1vZHVscyAnJXMnIGlzdCBpbSBHaXQtVmVyemVpY2huaXMgJyUuKnMnIGVudGhhbHRlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZsO8ciBTdWJtb2R1bCAnJXMnIG1pdCBtZWhyIGFscyBlaW5lbSBBcmJlaXRzdmVyemVpY2huaXNcbiIKKyJ3aXJkIG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogc3VibW9kdWxlLmM6MjA2MCBzdWJtb2R1bGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIktvbm50ZSBOYW1lIGbDvHIgU3VibW9kdWwgJyVzJyBuaWNodCBuYWNoc2NobGFnZW4uIgorCisjOiBzdWJtb2R1bGUuYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgIlZlcnNjaGllYmVuIHZvbiAnJXMnIGluIGVpbiBleGlzdGllcmVuZGVzIEdpdC1WZXJ6ZWljaG5pcyB2ZXJ3ZWlnZXJ0LiIKKworIzogc3VibW9kdWxlLmM6MjA3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICIiCisiTWlncmllcmUgR2l0LVZlcnplaWNobmlzIHZvbiAnJXMlcycgdm9uXG4iCisiJyVzJyBuYWNoXG4iCisiJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIkZlaGxlciBiZWkgUmVrdXJzaW9uIGluIFN1Ym1vZHVsLVBmYWQgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MjE5OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAiS29ubnRlICdscy1maWxlcycgbmljaHQgaW4gLi4gc3RhcnRlbiIKKworIzogc3VibW9kdWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgImxzLXRyZWUgbWl0IHVuZXJ3YXJ0ZXRlbSBSw7xja2dhYmV3ZXJ0ICVkIGJlZW5kZXQiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgc3VzcGljaW91cyBzdWJtb2R1bGUgbmFtZTogJXMiCittc2dzdHIgIklnbm9yaWVyZSB2ZXJkw6RjaHRpZ2VuIFN1Ym1vZHVsbmFtZW46ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICJOZWdhdGl2ZSBXZXJ0ZSBmw7xyIHN1Ym1vZHVsZS5mZXRjaGpvYnMgbmljaHQgZXJsYXVidC4iCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorIklnbm9yaWVyZSAnJXMnLCB3YXMgYWxzIGVpbmUgQmVmZWhsc3plaWxlbm9wdGlvbiAnJXMnIGludGVycHJldGllcnQgd2VyZGVuICIKKyJ3w7xyZGUuIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiS29ubnRlIEVpbnRyYWcgJyVzJyBpbiAuZ2l0bW9kdWxlcyBuaWNodCBha3R1YWxpc2llcmVuIgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICJBdXNmw7xocmVuIGRlcyBBbmhhbmctQmVmZWhscyAnJXMnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAidW5iZWthbm50ZXIgV2VydCAnJXMnIGbDvHIgU2NobMO8c3NlbCAlcyIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIm1laHIgYWxzIGVpbiAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJsZWVyZXIgQW5oYW5nLVRva2VuIGluIEFuaGFuZyAnJS4qcyciCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICJLb25udGUgRWluZ2FiZS1EYXRlaSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAia29ubnRlIG5pY2h0IHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4iCisKKyM6IHRyYWlsZXIuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICJEYXRlaSAnJXMnIGlzdCBrZWluZSByZWd1bMOkcmUgRGF0ZWkiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgIkRhdGVpICVzIGlzdCB2b20gQmVudXR6ZXIgbmljaHQgYmVzY2hyZWliYmFyLiIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAia29ubnRlIHRlbXBvcsOkcmUgRGF0ZWkgJyVzJyBuaWNodCDDtmZmbmVuIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICJrb25udGUgdGVtcG9yw6RyZSBEYXRlaSBuaWNodCB6dSAlcyB1bWJlbmVubmVuIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIlfDvHJkZSBVcHN0cmVhbS1CcmFuY2ggdm9uICclcycgenUgJyVzJyB2b24gJyVzJyBzZXR6ZW5cbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIgorbXNnc3RyICJLb25udGUgUGFrZXQgJyVzJyBuaWNodCBsZXNlbi4iCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInRyYW5zcG9ydDogdW5nw7xsdGlnZSAtLWRlcHRoIE9wdGlvbiAnJXMnIgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICJTaWVoZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuIgorCisjOiB0cmFuc3BvcnQuYzoyNjcKK21zZ2lkICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIKK21zZ3N0ciAiU2VydmVyLU9wdGlvbmVuIGJlbsO2dGlnZW4gUHJvdG9rb2xsLVZlcnNpb24gMiBvZGVyIGjDtmhlciIKKworIzogdHJhbnNwb3J0LmM6NjMyCittc2dpZCAiY291bGQgbm90IHBhcnNlIHRyYW5zcG9ydC5jb2xvci4qIGNvbmZpZyIKK21zZ3N0ciAiS29ubnRlIHRyYW5zcG9ydC5jb2xvci4qIEtvbmZpZ3VyYXRpb24gbmljaHQgcGFyc2VuLiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAiVW50ZXJzdMO8dHp1bmcgZsO8ciBQcm90b2tvbGwgdjIgbm9jaCBuaWNodCBpbXBsZW1lbnRpZXJ0LiIKKworIzogdHJhbnNwb3J0LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgZm9yIGNvbmZpZyAnJXMnOiAlcyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgV2VydCBmw7xyIEtvbmZpZ3VyYXRpb24gJyVzJzogJXMiCisKKyM6IHRyYW5zcG9ydC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAiw5xiZXJ0cmFndW5nc2FydCAnJXMnIG5pY2h0IGVybGF1YnQuIgorCisjOiB0cmFuc3BvcnQuYzo5NDkKK21zZ2lkICJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIgorbXNnc3RyICJnaXQtb3Zlci1yc3luYyB3aXJkIG5pY2h0IGzDpG5nZXIgdW50ZXJzdMO8dHp0LiIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIFN1Ym1vZHVsLVBmYWRlIGVudGhhbHRlbiDDhG5kZXJ1bmdlbiwgZGllIGluIGtlaW5lbVxuIgorIlJlbW90ZS1SZXBvc2l0b3J5IGdlZnVuZGVuIHd1cmRlbjpcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJCaXR0ZSB2ZXJzdWNoZW4gU2llXG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvZGVyIHdlY2hzZWxuIFNpZSBpbiBkYXMgVmVyemVpY2huaXMgdW5kIGJlbnV0emVuIFNpZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ6dW0gVmVyc2VuZGVuIHp1IGVpbmVtIFJlbW90ZS1SZXBvc2l0b3J5LlxuIgorIlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDU2Cittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICJBYmJydWNoLiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVmVyc2FuZCBhbGxlciBlcmZvcmRlcmxpY2hlbiBTdWJtb2R1bGUuIgorCisjOiB0cmFuc3BvcnQuYzoxMzQ1IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTYKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiRGllIE9wZXJhdGlvbiB3aXJkIHZvbiBkZW0gUHJvdG9rb2xsIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MSB0cmFuc3BvcnQtaGVscGVyLmM6OTAKK21zZ2lkICJmdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIgorbXNnc3RyICJWb2xsc3TDpG5kaWdlcyBTY2hyZWliZW4genUgUmVtb3RlLUhlbHBlciBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgcmVtb3RlIGhlbHBlciBmb3IgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFJlbW90ZS1IZWxwZXIgZsO8ciAnJXMnIG5pY2h0IGZpbmRlbi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNjAgdHJhbnNwb3J0LWhlbHBlci5jOjU3MAorbXNnaWQgImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIgorbXNnc3RyICIiCisiS29ubnRlIGR1cCgpIGF1ZiBEYXRlaWRlc2tyaXB0b3IgZsO8ciBBdXNnYWJlbiBkZXMgUmVtb3RlLUhlbHBlcnMgbmljaHQgIgorImF1c2bDvGhyZW4uIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5ICVzOyB0aGlzIHJlbW90ZSBoZWxwZXIgcHJvYmFibHkgbmVlZHMgbmV3ZXIgIgorInZlcnNpb24gb2YgR2l0IgorbXNnc3RyICIiCisiVW5iZWthbm50ZSBlcmZvcmRlcmxpY2hlIEbDpGhpZ2tlaXQgJXM7IGRpZXNlciBSZW1vdGUtSGVscGVyIGJlbsO2dGlndFxuIgorIndhaHJzY2hlaW5saWNoIGVpbmUgbmV1ZXJlIFZlcnNpb24gdm9uIEdpdC4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTcKK21zZ2lkICJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiCittc2dzdHIgIkRpZXNlciBSZW1vdGUtSGVscGVyIHNvbGx0ZSBkaWUgXCJyZWZzcGVjXCItRsOkaGlna2VpdCBpbXBsZW1lbnRpZXJlbi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAidW5lcndhcnRldGUgQXVzZ2FiZSB2b24gJXM6ICclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxzbyBsb2NrZWQgJXMiCittc2dzdHIgIiVzIHNwZXJydGUgYXVjaCAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQ5MgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWltcG9ydCIKK21zZ3N0ciAiS29ubnRlIFwiZmFzdC1pbXBvcnRcIiBuaWNodCBhdXNmw7xocmVuLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNQorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uICdmYXN0LWltcG9ydCcuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTQ0IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAiS29ubnRlIFJlZmVyZW56ICVzIG5pY2h0IGxlc2VuLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICJVbmJla2FubnRlIEFudHdvcnQgYXVmICdjb25uZWN0JzogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTEKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorIlNldHplbiBkZXMgUmVtb3RlLVNlcnZpY2UgUGZhZHMgd2lyZCB2b24gZGVtIFByb3Rva29sbCBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEzCittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICJVbmfDvGx0aWdlciBSZW1vdGUtU2VydmljZSBQZmFkLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjb25uZWN0IHRvIHN1YnNlcnZpY2UgJXMiCittc2dzdHIgIkthbm4ga2VpbmUgVmVyYmluZHVuZyB6dSBTdWJzZXJ2aWNlICVzIGhlcnN0ZWxsZW4uIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICJFcndhcnRldGUgb2svZXJyb3IsIFJlbW90ZS1IZWxwZXIgZ2FiICclcycgYXVzLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgIlJlbW90ZS1IZWxwZXIgbWVsZGV0ZSB1bmVyd2FydGV0ZW4gU3RhdHVzIHZvbiAlcy4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIKK21zZ3N0ciAiUmVtb3RlLUhlbHBlciAlcyB1bnRlcnN0w7x0enQga2VpbiBUcm9ja2VubGF1Zi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgIlJlbW90ZS1IZWxwZXIgJXMgdW50ZXJzdMO8dHp0IGtlaW4gLS1zaWduZWQuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICJSZW1vdGUtSGVscGVyICVzIHVudGVyc3TDvHR6dCBrZWluIC0tc2lnbmVkPWlmLWFza2VkLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIKK21zZ3N0ciAiUmVtb3RlLUhlbHBlciAlcyB1bnRlcnN0w7x0enQga2VpbiAtLWF0b21pYy4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAiUmVtb3RlLUhlbHBlciAlcyB1bnRlcnN0w7x0enQgbmljaHQgJ3B1c2gtb3B0aW9uJy4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjQKK21zZ2lkICJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIKK21zZ3N0ciAiUmVtb3RlLUhlbHBlciB1bnRlcnN0w7x0enQga2VpbiBQdXNoOyBSZWZzcGVjIGJlbsO2dGlndCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAnZm9yY2UnIgorbXNnc3RyICJSZW1vdGUtSGVscGVyICVzIHVudGVyc3TDvHR6dCBrZWluICdmb3JjZScuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiS29ubnRlIFwiZmFzdC1leHBvcnRcIiBuaWNodCBhdXNmw7xocmVuLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjEKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiBcImZhc3QtZXhwb3J0XCIuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKyJLZWluZSBnZW1laW5zYW1lbiBSZWZlcmVuemVuIHVuZCBuaWNodHMgc3BlemlmaXppZXJ0OyBrZWluZSBBdXNmw7xocnVuZy5cbiIKKyJWaWVsbGVpY2h0IHNvbGx0ZW4gU2llIGVpbmVuIEJyYW5jaCB3aWUgJ21hc3RlcicgYW5nZWJlbi5cbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBBbnR3b3J0IGluIFJlZmVyZW56bGlzdGU6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIkxlc2VuIHZvbiAlcyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRlKCVzKSBmYWlsZWQiCittc2dzdHIgIlNjaHJlaWJlbiB2b24gJXMgZmVobGdlc2NobGFnZW4uIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICJUaHJlYWQgJXMgZmVobGdlc2NobGFnZW4uIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIHRvIGpvaW46ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBCZWl0cmV0ZW4genUgVGhyZWFkICVzOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzAgdHJhbnNwb3J0LWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICJLYW5uIFRocmVhZCB6dW0gS29waWVyZW4gdm9uIERhdGVuIG5pY2h0IHN0YXJ0ZW46ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBXYXJ0ZW4gdm9uIFByb3plc3MgJXMuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiUHJvemVzcyAlcyBmZWhsZ2VzY2hsYWdlbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzMgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDIKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiS2FubiBUaHJlYWQgenVtIEtvcGllcmVuIHZvbiBEYXRlbiBuaWNodCBzdGFydGVuLiIKKworIzogdHJlZS13YWxrLmM6MzMKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBvYmplY3QiCittc2dzdHIgInp1IGt1cnplcyBUcmVlLU9iamVrdCIKKworIzogdHJlZS13YWxrLmM6MzkKK21zZ2lkICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJmZWhsZXJoYWZ0ZXIgTW9kdXMgaW4gVHJlZS1FaW50cmFnIgorCisjOiB0cmVlLXdhbGsuYzo0MworbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgImxlZXJlciBEYXRlaW5hbWUgaW4gVHJlZS1FaW50cmFnIgorCisjOiB0cmVlLXdhbGsuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IGNvbnRhaW5zIGJhY2tzbGFzaDogJyVzJyIKK21zZ3N0ciAiRGF0ZWluYW1lIGltIFRyZWUtRWludHJhZyBlbnRow6RsdCBCYWNrc2xhc2g6ICclcyciCisKKyM6IHRyZWUtd2Fsay5jOjEyNAorbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgInp1IGt1cnplIFRyZWUtRGF0ZWkiCisKKyM6IHVucGFjay10cmVlcy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gaW4gZGVuIGZvbGdlbmRlbiBEYXRlaWVuIHfDvHJkZW4gYmVpbSBBdXNjaGVja2VuXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlc0JpdHRlIGNvbW1pdHRlbiBvZGVyIHN0YXNoZW4gU2llIElocmUgw4RuZGVydW5nZW4sIGJldm9yIFNpZSBCcmFuY2hlc1xuIgorIndlY2hzZWxuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gaW4gZGVuIGZvbGdlbmRlbiBEYXRlaWVuIHfDvHJkZW4gYmVpbSBBdXNjaGVja2VuXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiSWhyZSBsb2thbGVuIMOEbmRlcnVuZ2VuIGluIGRlbiBmb2xnZW5kZW4gRGF0ZWllbiB3w7xyZGVuIGR1cmNoIGRlbiBNZXJnZVxuIgorIsO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlJXNCaXR0ZSBjb21taXR0ZW4gb2RlciBzdGFzaGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuLCBiZXZvciBTaWUgbWVyZ2VuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gaW4gZGVuIGZvbGdlbmRlbiBEYXRlaWVuIHfDvHJkZW4gZHVyY2ggZGVuIE1lcmdlXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiSWhyZSBsb2thbGVuIMOEbmRlcnVuZ2VuIGluIGRlbiBmb2xnZW5kZW4gRGF0ZWllbiB3w7xyZGVuIGR1cmNoICVzXG4iCisiw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlc0JpdHRlIGNvbW1pdHRlbiBvZGVyIHN0YXNoZW4gU2llIElocmUgw4RuZGVydW5nZW4sIGJldm9yIFNpZSAlcyBhdXNmw7xocmVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJaHJlIGxva2FsZW4gw4RuZGVydW5nZW4gd8O8cmRlbiBkdXJjaCAlcyDDvGJlcnNjaHJpZWJlbiB3ZXJkZW4uXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlbTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkR1cmNoIGRpZSBBa3R1YWxpc2llcnVuZyBkZXIgZm9sZ2VuZGVuIFZlcnplaWNobmlzc2Ugd8O8cmRlbiB1bnZlcnNpb25pZXJ0ZVxuIgorIkRhdGVpZW4gaW4gZGllc2VuIFZlcnplaWNobmlzc2VuIHZlcmxvcmVuIGdlaGVuOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIHfDvHJkZW4gZHVyY2hcbiIKKyJkZW4gQ2hlY2tvdXQgZW50ZmVybnQgd2VyZGVuOlxuIgorIiUlc0JpdHRlIHZlcnNjaGllYmVuIG9kZXIgZW50ZmVybmVuIFNpZSBkaWVzZSwgYmV2b3IgU2llIEJyYW5jaGVzIHdlY2hzZWxuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoICIKKyJkZW5cbiIKKyJDaGVja291dCBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiBNZXJnZSBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzQml0dGUgdmVyc2NoaWViZW4gb2RlciBlbnRmZXJuZW4gU2llIGRpZXNlLCBiZXZvciBzaWUgbWVyZ2VuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoICIKKyJkZW5cbiIKKyJNZXJnZSBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiAlcyBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzQml0dGUgdmVyc2NoaWViZW4gb2RlciBlbnRmZXJuZW4gU2llIGRpZXNlLCBiZXZvciBzaWUgJXMgYXVzZsO8aHJlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiAlcyBlbnRmZXJudCB3ZXJkZW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiBDaGVja291dCDDvGJlcnNjaHJpZWJlbiB3ZXJkZW46XG4iCisiJSVzQml0dGUgdmVyc2NoaWViZW4gb2RlciBlbnRmZXJuZW4gU2llIGRpZXNlLCBiZXZvciBTaWUgQnJhbmNoZXMgd2VjaHNlbG4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaCAiCisiZGVuXG4iCisiQ2hlY2tvdXQgw7xiZXJzY2hyaWViZW4gd2VyZGVuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoXG4iCisiZGVuIE1lcmdlIMO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlJXNCaXR0ZSB2ZXJzY2hpZWJlbiBvZGVyIGVudGZlcm5lbiBTaWUgZGllc2UsIGJldm9yIFNpZSBtZXJnZW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoXG4iCisiZGVuIE1lcmdlIMO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaFxuIgorImRlbiAlcyDDvGJlcnNjaHJpZWJlbiB3ZXJkZW46XG4iCisiJSVzQml0dGUgdmVyc2NoaWViZW4gb2RlciBlbnRmZXJuZW4gU2llIGRpZXNlLCBiZXZvciBzaWUgJXMgYXVzZsO8aHJlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIHfDvHJkZW4gZHVyY2ggIgorImRlblxuIgorIiVzIMO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIKK21zZ3N0ciAiRWludHJhZyAnJXMnIMO8YmVyc2NobmVpZGV0IHNpY2ggbWl0ICclcycuIEthbm4gbmljaHQgdmVyYmluZGVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkthbm4gcGFydGllbGxlbiBDaGVja291dCBuaWNodCBha3R1YWxpc2llcmVuOiBkaWUgZm9sZ2VuZGVuIEVpbnRyw6RnZVxuIgorInNpbmQgbmljaHQgYWt0dWVsbDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgd8O8cmRlbiBkdXJjaCBkaWUgQWt0dWFsaXNpZXJ1bmdcbiIKKyLDvGJlciBlaW5lbiBwYXJ0aWVsbGVuIENoZWNrb3V0IMO8YmVyc2NocmllYmVuIHdlcmRlbjpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiRGllIGZvbGdlbmRlbiBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3w7xyZGVuIGR1cmNoIGRpZSBBa3R1YWxpc2llcnVuZ1xuIgorIsO8YmVyIGVpbmVuIHBhcnRpZWxsZW4gQ2hlY2tvdXQgZW50ZmVybnQgd2VyZGVuOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisiS2FubiBTdWJtb2R1bCBuaWNodCBha3R1YWxpc2llcmVuOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAiQWJicnVjaFxuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTcKK21zZ2lkICJVcGRhdGluZyBmaWxlcyIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlIERhdGVpZW4iCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gUGZhZGUgaGFiZW4ga29sbGlkaWVydCAoei5CLiBjYXNlLXNlbnNpdGl2ZSBQZmFkZVxuIgorImF1ZiBlaW5lbSBjYXNlLWluc2Vuc2l0aXZlbiBEYXRlaXN5c3RlbSkgdW5kIG51ciBlaW5lciB2b24gZGVyXG4iCisic2VsYmVuIEtvbGxpc3Npb25zZ3J1cHBlIGlzdCBpbSBBcmJlaXRzdmVyemVpY2huaXM6XG4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0NDEKK21zZ2lkICJVcGRhdGluZyBpbmRleCBmbGFncyIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlIEluZGV4LU1hcmtpZXJ1bmdlbiIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgVVJMLVNjaGVtYSBvZGVyIFN1ZmZpeCAnOi8vJyBmZWhsdCIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICJ1bmfDvGx0aWdlIEVzY2FwZS1TZXF1ZW56ICVYWCIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAiZmVobGVuZGVyIEhvc3QgdW5kIFNjaGVtYSBpc3QgbmljaHQgJ2ZpbGU6JyIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJlaW5lICdmaWxlOicgVVJMIGRhcmYga2VpbmUgUG9ydG51bW1lciBlbnRoYWx0ZW4iCisKKyM6IHVybG1hdGNoLmM6MjQ3Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIKK21zZ3N0ciAiSG9zdG5hbWUgZW50aMOkbHQgdW5nw7xsdGlnZSBaZWljaGVuIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgInVuZ8O8bHRpZ2UgUG9ydG51bW1lciIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICJ1bmfDvGx0aWdlcyAnLi4nIFBmYWRzZWdtZW50IgorCisjOiB3b3JrdHJlZS5jOjI1OCBidWlsdGluL2FtLmM6MjA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiB2b24gJyVzJyIKKworIzogd29ya3RyZWUuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhdCBtYWluIHdvcmtpbmcgdHJlZSBpcyBub3QgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5IgorbXNnc3RyICInJXMnIGltIEhhdXB0YXJiZWl0c3ZlcnplaWNobmlzIGlzdCBuaWNodCBkYXMgUmVwb3NpdG9yeS1WZXJ6ZWljaG5pcy4iCisKKyM6IHdvcmt0cmVlLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiJyVzJyBEYXRlaSBlbnRow6RsdCBuaWNodCBkZW4gYWJzb2x1dGVuIFBmYWQgenVtIEFyYmVpdHN2ZXJ6ZWljaG5pcy4iCisKKyM6IHdvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiclcycgZXhpc3RpZXJ0IG5pY2h0LiIKKworIzogd29ya3RyZWUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIiclcycgaXN0IGtlaW5lIC5naXQtRGF0ZWksIEZlaGxlcmNvZGUgJWQiCisKKyM6IHdvcmt0cmVlLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgYmFjayB0byAnJXMnIgorbXNnc3RyICInJXMnIHplaWd0IG5pY2h0IHp1csO8Y2sgYXVmICclcyciCisKKyM6IHdyYXBwZXIuYzoxODYgd3JhcHBlci5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dW0gTGVzZW4gdW5kIFNjaHJlaWJlbiDDtmZmbmVuLiIKKworIzogd3JhcHBlci5jOjM4NyB3cmFwcGVyLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAia29ubnRlIG5pY2h0IGF1ZiAnJXMnIHp1Z3JlaWZlbiIKKworIzogd3JhcHBlci5jOjU5NgorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiS29ubnRlIGFrdHVlbGxlcyBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgYmVrb21tZW4uIgorCisjOiB3dC1zdGF0dXMuYzoxNTgKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIk5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIFBmYWRlOiIKKworIzogd3Qtc3RhdHVzLmM6MTg3IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPERhdGVpPi4uLlwiIHp1bSBFbnRmZXJuZW4gYXVzIGRlciAiCisiU3RhZ2luZy1BcmVhKSIKKworIzogd3Qtc3RhdHVzLmM6MTkwIHd0LXN0YXR1cy5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxEYXRlaT4uLi5cIiB6dW0gIgorIkVudGZlcm5lbiBhdXMgZGVyIFN0YWdpbmctQXJlYSkiCisKKyM6IHd0LXN0YXR1cy5jOjE5MyB3dC1zdGF0dXMuYzoyMjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcm0gLS1jYWNoZWQgPERhdGVpPi4uLlwiIHp1bSBFbnRmZXJuZW4gYXVzIGRlciBTdGFnaW5nLSIKKyJBcmVhKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGFkZC9ybSA8RGF0ZWk+Li4uXCIsIHVtIGRpZSBBdWZsw7ZzdW5nIHp1IG1hcmtpZXJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYWRkL3JtIDxEYXRlaT4uLi5cIiwgdW0gZGllIEF1ZmzDtnN1bmcgZW50c3ByZWNoZW5kIHp1ICIKKyJtYXJraWVyZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyMDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBhZGQvcm0gPERhdGVpPi4uLlwiLCB1bSBkaWUgQXVmbMO2c3VuZyB6dSBtYXJraWVyZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyMTEgd3Qtc3RhdHVzLmM6MTA3NAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiWnVtIENvbW1pdCB2b3JnZW1lcmt0ZSDDhG5kZXJ1bmdlbjoiCisKKyM6IHd0LXN0YXR1cy5jOjIzNCB3dC1zdGF0dXMuYzoxMDgzCittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICLDhG5kZXJ1bmdlbiwgZGllIG5pY2h0IHp1bSBDb21taXQgdm9yZ2VtZXJrdCBzaW5kOiIKKworIzogd3Qtc3RhdHVzLmM6MjM4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYWRkIDxEYXRlaT4uLi5cIiwgdW0gZGllIMOEbmRlcnVuZ2VuIHp1bSBDb21taXQgIgorInZvcnp1bWVya2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MjQwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYWRkL3JtIDxEYXRlaT4uLi5cIiwgdW0gZGllIMOEbmRlcnVuZ2VuIHp1bSBDb21taXQgIgorInZvcnp1bWVya2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MjQxCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcmVzdG9yZSA8RGF0ZWk+Li4uXCIsIHVtIGRpZSDDhG5kZXJ1bmdlbiBpbSAiCisiQXJiZWl0c3ZlcnplaWNobmlzIHp1IHZlcndlcmZlbikiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGNvbW1pdHRlbiBvZGVyIHZlcndlcmZlbiBTaWUgZGVuIHVudmVyc2lvbmllcnRlbiBvZGVyIGdlw6RuZGVydGVuIEluaGFsdCAiCisiaW4gZGVuIFN1Ym1vZHVsZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgJXMgPERhdGVpPi4uLlwiLCB1bSBkaWUgw4RuZGVydW5nZW4genVtIENvbW1pdCAiCisidm9yenVtZXJrZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNjgKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJiZWlkZSBnZWzDtnNjaHQ6IgorCisjOiB3dC1zdGF0dXMuYzoyNzAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgInZvbiB1bnMgaGluenVnZWbDvGd0OiIKKworIzogd3Qtc3RhdHVzLmM6MjcyCittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAidm9uIGRlbmVuIGdlbMO2c2NodDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJ2b24gZGVuZW4gaGluenVnZWbDvGd0OiIKKworIzogd3Qtc3RhdHVzLmM6Mjc2Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgInZvbiB1bnMgZ2Vsw7ZzY2h0OiIKKworIzogd3Qtc3RhdHVzLmM6Mjc4Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgInZvbiBiZWlkZW4gaGluenVnZWbDvGd0OiIKKworIzogd3Qtc3RhdHVzLmM6MjgwCittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgInZvbiBiZWlkZW4gZ2XDpG5kZXJ0OiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJuZXVlIERhdGVpOiIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAia29waWVydDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICJnZWzDtnNjaHQ6IgorCisjOiB3dC1zdGF0dXMuYzoyOTYKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgImdlw6RuZGVydDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5OAorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICJ1bWJlbmFubnQ6IgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAiVHlww6RuZGVydW5nOiIKKworIzogd3Qtc3RhdHVzLmM6MzAyCittc2dpZCAidW5rbm93bjoiCittc2dzdHIgInVuYmVrYW5udDoiCisKKyM6IHd0LXN0YXR1cy5jOjMwNAorbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAibmljaHQgZ2VtZXJnZWQ6IgorCisjOiB3dC1zdGF0dXMuYzozODQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJuZXVlIENvbW1pdHMsICIKKworIzogd3Qtc3RhdHVzLmM6Mzg2Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICJnZcOkbmRlcnRlciBJbmhhbHQsICIKKworIzogd3Qtc3RhdHVzLmM6Mzg4Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAidW52ZXJzaW9uaWVydGVyIEluaGFsdCwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAiSWhyIFN0YXNoIGhhdCBnZXJhZGUgJWQgRWludHJhZyIKK21zZ3N0clsxXSAiSWhyIFN0YXNoIGhhdCBnZXJhZGUgJWQgRWludHLDpGdlIgorCisjOiB3dC1zdGF0dXMuYzo5MzgKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiU3VibW9kdWxlIGdlw6RuZGVydCwgYWJlciBuaWNodCBha3R1YWxpc2llcnQ6IgorCisjOiB3dC1zdGF0dXMuYzo5NDAKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiBTdWJtb2R1bCB6dW0gQ29tbWl0dGVuOiIKKworIzogd3Qtc3RhdHVzLmM6MTAyMgorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKyLDhG5kZXJuIG9kZXIgZW50ZmVybmVuIFNpZSBuaWNodCBkaWUgb2JpZ2UgWmVpbGUuXG4iCisiQWxsZXMgdW50ZXJoYWxiIHZvbiBpaHIgd2lyZCBpZ25vcmllcnQuIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFcyB3dXJkZW4gJS4yZiBTZWt1bmRlbiBiZW7DtnRpZ3QsIHVtIGRpZSB2b3JhdXMvaGludGVyaGVyLVdlcnRlIHp1ICIKKyJiZXJlY2huZW4uXG4iCisiU2llIGvDtm5uZW4gJy0tbm8tYWhlYWQtYmVoaW5kJyBiZW51dHplbiwgdW0gZGFzIHp1IHZlcmhpbmRlcm4uXG4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDQKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIlNpZSBoYWJlbiBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBQZmFkZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgKGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZW4gU2llIFwiZ2l0IGNvbW1pdFwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAgKGJlbnV0emVuIFNpZSBcImdpdCBtZXJnZSAtLWFib3J0XCIsIHVtIGRlbiBNZXJnZSBhYnp1YnJlY2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJBbGxlIEtvbmZsaWt0ZSBzaW5kIGJlaG9iZW4sIGFiZXIgU2llIHNpbmQgaW1tZXIgbm9jaCBiZWltIE1lcmdlLiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKGJlbnV0emVuIFNpZSBcImdpdCBjb21taXRcIiwgdW0gZGVuIE1lcmdlIGFienVzY2hsaWXDn2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiRWluZSBcImFtXCItU2l0enVuZyBpc3QgaW0gR2FuZ2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJEZXIgYWt0dWVsbGUgUGF0Y2ggaXN0IGxlZXIuIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZW4gU2llIGRhbm4gXCJnaXQgYW0gLS1jb250aW51ZVwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjExNzQKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGFtIC0tc2tpcFwiLCB1bSBkaWVzZW4gUGF0Y2ggYXVzenVsYXNzZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGFtIC0tYWJvcnRcIiwgdW0gZGVuIHVyc3Byw7xuZ2xpY2hlbiBCcmFuY2ggIgorIndpZWRlcmhlcnp1c3RlbGxlbikiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDkKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgImdpdC1yZWJhc2UtdG9kbyBmZWhsdC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTEKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAiS2VpbmUgQmVmZWhsZSBhdXNnZWbDvGhydC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAiWnVsZXR6dCBhdXNnZWbDvGhydGVyIEJlZmVobCAoJWQgQmVmZWhsIGF1c2dlZsO8aHJ0KToiCittc2dzdHJbMV0gIlp1bGV0enQgYXVzZ2Vmw7xocnRlIEJlZmVobGUgKCVkIEJlZmVobGUgYXVzZ2Vmw7xocnQpOiIKKworIzogd3Qtc3RhdHVzLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAobWVociBJbmZvcm1hdGlvbmVuIGluIERhdGVpICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIktlaW5lIEJlZmVobGUgdmVyYmxlaWJlbmQuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIk7DpGNoc3RlciBhdXN6dWbDvGhyZW5kZXIgQmVmZWhsICglZCBCZWZlaGxlIHZlcmJsZWliZW5kKToiCittc2dzdHJbMV0gIk7DpGNoc3RlIGF1c3p1ZsO8aHJlbmRlIEJlZmVobGUgKCVkIEJlZmVobGUgdmVyYmxlaWJlbmQpOiIKKworIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHp1bSBBbnNlaGVuIHVuZCBCZWFyYmVpdGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiU2llIHNpbmQgZ2VyYWRlIGJlaW0gUmViYXNlIHZvbiBCcmFuY2ggJyVzJyBhdWYgJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIlNpZSBzaW5kIGdlcmFkZSBiZWltIFJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZW4gU2llIGRhbm4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIiAiCisiYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3MworbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiwgdW0gZGllc2VuIFBhdGNoIGF1c3p1bGFzc2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiLCB1bSBkZW4gdXJzcHLDvG5nbGljaGVuIEJyYW5jaCAiCisiYXVzenVjaGVja2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTM4MgorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYWxsZSBLb25mbGlrdGUgYmVob2JlbjogZsO8aHJlbiBTaWUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBhdXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJTaWUgdGVpbGVuIGdlcmFkZSBlaW5lbiBDb21taXQgYXVmLCB3w6RocmVuZCBlaW4gUmViYXNlIHZvbiBCcmFuY2ggJyVzJyBhdWYgIgorIiclcycgaW0gR2FuZ2UgaXN0LiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJTaWUgdGVpbGVuIGdlcmFkZSBlaW5lbiBDb21taXQgd8OkaHJlbmQgZWluZXMgUmViYXNlIGF1Zi4iCisKKyM6IHd0LXN0YXR1cy5jOjEzOTQKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKFNvYmFsZCBJaHIgQXJiZWl0c3ZlcnplaWNobmlzIHVudmVyw6RuZGVydCBpc3QsIGbDvGhyZW4gU2llIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIlNpZSBlZGl0aWVyZW4gZ2VyYWRlIGVpbmVuIENvbW1pdCB3w6RocmVuZCBlaW5lcyBSZWJhc2Ugdm9uIEJyYW5jaCAnJXMnIGF1ZiAiCisiJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIlNpZSBlZGl0aWVyZW4gZ2VyYWRlIGVpbmVuIENvbW1pdCB3w6RocmVuZCBlaW5lcyBSZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBjb21taXQgLS1hbWVuZFwiLCB1bSBkZW4gYWt0dWVsbGVuIENvbW1pdCAiCisibmFjaHp1YmVzc2VybikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MDgKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBzb2JhbGQgSWhyZSDDhG5kZXJ1bmdlbiAiCisiYWJnZXNjaGxvc3NlbiBzaW5kKSIKKworIzogd3Qtc3RhdHVzLmM6MTQxOQorbXNnaWQgIkNoZXJyeS1waWNrIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgIkNoZXJyeS1waWNrIHp1cnplaXQgaW0gR2FuZ2UuIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIlNpZSBmw7xocmVuIGdlcmFkZSBcImNoZXJyeS1waWNrXCIgdm9uIENvbW1pdCAlcyBhdXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChiZWhlYmVuIFNpZSBkaWUgS29uZmxpa3RlIHVuZCBmw7xocmVuIFNpZSBkYW5uIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiCisiXCIgYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzMgorbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChGw7xocmVuIFNpZSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgYXVzLCB1bSB3ZWl0ZXJ6dW1hY2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGFsbGUgS29uZmxpa3RlIGJlaG9iZW46IGbDvGhyZW4gU2llIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBhdXMpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIsIHVtIGRpZXNlbiBQYXRjaCBhdXN6dWxhc3NlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzkKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIsIHVtIGRpZSBDaGVycnktUGljay1PcGVyYXRpb24gIgorImFienVicmVjaGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJSZXZlcnQgenVyemVpdCBpbSBHYW5nZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIlNpZSBzaW5kIGdlcmFkZSBiZWltIFJldmVydCB2b24gQ29tbWl0ICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoYmVoZWJlbiBTaWUgZGllIEtvbmZsaWt0ZSB1bmQgZsO8aHJlbiBTaWUgZGFubiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiICIKKyJhdXMpIgorCisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChGw7xocmVuIFNpZSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiLCB1bSB3ZWl0ZXJ6dW1hY2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFsbGUgS29uZmxpa3RlIGJlaG9iZW46IGbDvGhyZW4gU2llIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJldmVydCAtLXNraXBcIiwgdW0gZGllc2VuIFBhdGNoIGF1c3p1bGFzc2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2OAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiwgdW0gZGllIFJldmVydC1PcGVyYXRpb24gYWJ6dWJyZWNoZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiU2llIHNpbmQgZ2VyYWRlIGJlaSBlaW5lciBiaW7DpHJlbiBTdWNoZSwgZ2VzdGFydGV0IHZvbiBCcmFuY2ggJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0ODIKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJTaWUgc2luZCBnZXJhZGUgYmVpIGVpbmVyIGJpbsOkcmVuIFN1Y2hlLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBiaXNlY3QgcmVzZXRcIiwgdW0genVtIHVyc3Byw7xuZ2xpY2hlbiBCcmFuY2ggIgorInp1csO8Y2t6dWtlaHJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJBdWYgQnJhbmNoICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgImludGVyYWt0aXZlcyBSZWJhc2UgaW0gR2FuZ2U7IGF1ZiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDMKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJSZWJhc2UgaW0gR2FuZ2U7IGF1ZiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJJbSBNb21lbnQgYXVmIGtlaW5lbSBCcmFuY2guIgorCisjOiB3dC1zdGF0dXMuYzoxNzMwCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIkluaXRpYWxlciBDb21taXQiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiTm9jaCBrZWluZSBDb21taXRzIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ1Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaWVuIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ3Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiSWdub3JpZXJ0ZSBEYXRlaWVuIgorCisjOiB3dC1zdGF0dXMuYzoxNzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiIKKyJFcyBkYXVlcnRlICUuMmYgU2VrdW5kZW4gZGllIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIHp1IGJlc3RpbW1lbi5cbiIKKyInc3RhdHVzIC11bm8nIGvDtm5udGUgZGFzIGJlc2NobGV1bmlnZW4sIGFiZXIgU2llIG3DvHNzZW4gZGFyYXVmIGFjaHRlbixcbiIKKyJuZXVlIERhdGVpZW4gc2VsYnN0c3TDpG5kaWcgaGluenV6dWbDvGdlbiAoc2llaGUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKKworIzogd3Qtc3RhdHVzLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICJVbnZlcnNpb25pZXJ0ZSBEYXRlaWVuIG5pY2h0IGF1ZmdlbGlzdGV0JXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKGJlbnV0emVuIFNpZSBkaWUgT3B0aW9uIC11LCB1bSB1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGFuenV6ZWlnZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJrZWluZSDDhG5kZXJ1bmdlbiB6dW0gQ29tbWl0IHZvcmdlbWVya3QgKGJlbnV0emVuIFNpZSBcImdpdCBhZGRcIiB1bmQvb2RlciAiCisiXCJnaXQgY29tbWl0IC1hXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAia2VpbmUgw4RuZGVydW5nZW4genVtIENvbW1pdCB2b3JnZW1lcmt0XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorIm5pY2h0cyB6dW0gQ29tbWl0IHZvcmdlbWVya3QsIGFiZXIgZXMgZ2lidCB1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuXG4iCisiKGJlbnV0emVuIFNpZSBcImdpdCBhZGRcIiB6dW0gVmVyc2lvbmllcmVuKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICJuaWNodHMgenVtIENvbW1pdCB2b3JnZW1lcmt0LCBhYmVyIGVzIGdpYnQgdW52ZXJzaW9uaWVydGUgRGF0ZWllblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICIiCisibmljaHRzIHp1IGNvbW1pdHRlbiAoZXJzdGVsbGVuL2tvcGllcmVuIFNpZSBEYXRlaWVuIHVuZCBiZW51dHplblxuIgorIlNpZSBcImdpdCBhZGRcIiB6dW0gVmVyc2lvbmllcmVuKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg1IHd0LXN0YXR1cy5jOjE3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAibmljaHRzIHp1IGNvbW1pdHRlblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIiIKKyJuaWNodHMgenUgY29tbWl0dGVuIChiZW51dHplbiBTaWUgZGllIE9wdGlvbiAtdSwgdW0gdW52ZXJzaW9uaWVydGUgRGF0ZWllbiAiCisiYW56dXplaWdlbilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgIm5pY2h0cyB6dSBjb21taXR0ZW4sIEFyYmVpdHN2ZXJ6ZWljaG5pcyB1bnZlcsOkbmRlcnRcbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAiTm9jaCBrZWluZSBDb21taXRzIGluICIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKGtlaW4gQnJhbmNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAidW50ZXJzY2hpZWRsaWNoIgorCisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJoaW50ZXJoZXIgIgorCisjOiB3dC1zdGF0dXMuYzoxOTQ1IHd0LXN0YXR1cy5jOjE5NDgKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgInZvcmF1cyAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyIlcyBuaWNodCBtw7ZnbGljaDogU2llIGhhYmVuIMOEbmRlcnVuZ2VuLCBkaWUgbmljaHQgenVtIENvbW1pdCB2b3JnZW1lcmt0IHNpbmQuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc2Cittc2dpZCAiYWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJadXPDpHR6bGljaCBlbnRow6RsdCBkaWUgU3RhZ2luZy1BcmVhIG5pY2h0IGNvbW1pdHRldGUgw4RuZGVydW5nZW4uIgorCisjOiB3dC1zdGF0dXMuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIiVzIG5pY2h0IG3DtmdsaWNoOiBEaWUgU3RhZ2luZy1BcmVhIGVudGjDpGx0IG5pY2h0IGNvbW1pdHRldGUgw4RuZGVydW5nZW4uIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGVudGZlcm5lbi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPE9wdGlvbmVuPl0gWy0tXSA8UGZhZHNwZXppZmlrYXRpb24+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInVuZXJ3YXJ0ZXRlciBEaWZmZXJlbnotU3RhdHVzICVjIgorCisjOiBidWlsdGluL2FkZC5jOjkyIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBkZXIgRGF0ZWllbiBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9hZGQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAibMO2c2NoZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc3Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKyJOaWNodCB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuIG5hY2ggQWt0dWFsaXNpZXJ1bmcgZGVyIFN0YWdpbmctQXJlYToiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUyIGJ1aWx0aW4vcmV2LXBhcnNlLmM6ODk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJLb25udGUgZGVuIEluZGV4IG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2FkZC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenVtIFNjaHJlaWJlbiDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9hZGQuYzoyNjcKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIktvbm50ZSBQYXRjaCBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjcwCittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgIkJlYXJiZWl0dW5nIGRlcyBQYXRjaGVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL2FkZC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9hZGQuYzoyNzUKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIkxlZXJlciBQYXRjaC4gQWJnZWJyb2NoZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYW53ZW5kZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjI4OAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gUGZhZGUgd2VyZGVuIGR1cmNoIGVpbmUgSWhyZXIgXCIuZ2l0aWdub3JlXCIgRGF0ZWllbiAiCisiaWdub3JpZXJ0OlxuIgorCisjOiBidWlsdGluL2FkZC5jOjMwOCBidWlsdGluL2NsZWFuLmM6OTEwIGJ1aWx0aW4vZmV0Y2guYzoxNjMgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMjMgYnVpbHRpbi9wdXNoLmM6NTQ4CisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDQgYnVpbHRpbi9ybS5jOjI0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgIlByb2JlbGF1ZiIKKworIzogYnVpbHRpbi9hZGQuYzozMTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgQXVzd8OkaGxlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMTIgYnVpbHRpbi9jaGVja291dC5jOjE0ODIgYnVpbHRpbi9yZXNldC5jOjMwNworbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJCbMO2Y2tlIGludGVyYWt0aXYgYXVzd8OkaGxlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMTMKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgImFrdHVlbGxlIFVudGVyc2NoaWVkZSBlZGl0aWVyZW4gdW5kIGFud2VuZGVuIgorCisjOiBidWlsdGluL2FkZC5jOjMxNAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiZGFzIEhpbnp1ZsO8Z2VuIGFuZGVybmZhbGxzIGlnbm9yaWVydGVyIERhdGVpZW4gZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE1Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgInZlcnNpb25pZXJ0ZSBEYXRlaWVuIGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE2Cittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICIiCisiZXJuZXV0ZXMgTm9ybWFsaXNpZXJlbiBkZXIgWmVpbGVuZW5kZW4gdm9uIHZlcnNpb25pZXJ0ZW4gRGF0ZWllbiAoaW1wbGl6aWVydCAiCisiLXUpIgorCisjOiBidWlsdGluL2FkZC5jOjMxNworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAibnVyIHNwZWljaGVybiwgZGFzcyBkZXIgUGZhZCBzcMOkdGVyIGhpbnp1Z2Vmw7xndCB3ZXJkZW4gc29sbCIKKworIzogYnVpbHRpbi9hZGQuYzozMTgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiB2b24gYWxsZW4gdmVyc2lvbmllcnRlbiB1bmQgdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgImdlbMO2c2NodGUgUGZhZGUgaW0gQXJiZWl0c3ZlcnplaWNobmlzIGlnbm9yaWVyZW4gKGdlbmF1IHdpZSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIzCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJuaWNodHMgaGluenVmw7xnZW4sIG51ciBkZW4gSW5kZXggYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjQKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICIiCisiRGF0ZWllbiDDvGJlcnNwcmluZ2VuLCBkaWUgYXVmZ3J1bmQgdm9uIEZlaGxlcm4gbmljaHQgaGluenVnZWbDvGd0IHdlcmRlbiAiCisia29ubnRlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjUKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgInByw7xmZW4gb2IgLSBhdWNoIGZlaGxlbmRlIC0gRGF0ZWllbiBpbSBQcm9iZWxhdWYgaWdub3JpZXJ0IHdlcmRlbiIKKworIzogYnVpbHRpbi9hZGQuYzozMjcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgImRhcyBcImF1c2bDvGhyYmFyXCItQml0IGRlciBhdWZnZWxpc3RldGVuIERhdGVpZW4gw7xiZXJzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI5Cittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICJ3YXJuZW4gd2VubiBlaW5nZWJldHRldGVzIFJlcG9zaXRvcnkgaGluenVnZWbDvGd0IHdpcmQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiU2llIGhhYmVuIGVpbiBHaXQtUmVwb3NpdG9yeSBpbm5lcmhhbGIgaWhyZXMgYWt0dWVsbGVuIFJlcG9zaXRvcmllcyAiCisiaGluenVnZWbDvGd0LlxuIgorIktsb25lIGRlcyDDpHXDn2VyZW4gUmVwb3NpdG9yaWVzIHdlcmRlbiBkaWUgSW5oYWx0ZSBkZXMgZWluZ2ViZXR0ZXRlbiAiCisiUmVwb3NpdG9yaWVzXG4iCisid2VkZXIgZW50aGFsdGVuLCBub2NoIHdpc3Nlbiwgd2llIGRpZXNlIHp1IGJlc2NoYWZmZW4gc2luZC5cbiIKKyJXZW5uIFNpZSBlaW4gU3VibW9kdWwgaGluenVmw7xnZW4gd29sbHRlbiwgYmVudXR6ZW4gU2llOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPFVSTD4gJXNcbiIKKyJcbiIKKyJXZW5uIFNpZSBkaWVzZW4gUGZhZCBhdXMgVmVyc2VoZW4gaGluenVnZWbDvGd0IGhhYmVuLCBrw7ZubmVuIFNpZSBkaWVzZW4gbWl0XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJ2b20gSW5kZXggZW50ZmVybmVuLlxuIgorIlxuIgorIlNpZWhlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZsO8ciB3ZWl0ZXJlIEluZm9ybWF0aW9uZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmcgZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJGw7xnZSBlaW5nZWJldHRldGVzIFJlcG9zaXRvcnkgaGluenU6ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJWZXJ3ZW5kZW4gU2llIC1mIHdlbm4gU2llIGRpZXNlIHdpcmtsaWNoIGhpbnp1ZsO8Z2VuIG3DtmNodGVuLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQwMAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIkhpbnp1ZsO8Z2VuIHZvbiBEYXRlaWVuIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL2FkZC5jOjQyOCBidWlsdGluL2NvbW1pdC5jOjM0OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtLXBhdGhzcGVjLWZyb20tZmlsZSB1bmQgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIHNpbmQgIgorImlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDM0Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1lZGl0IgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1wYXRoc3BlYy1mcm9tLWZpbGUgdW5kIC0tZWRpdCBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ2Cittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtQSB1bmQgLXUgc2luZCB6dWVpbmFuZGVyIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ5Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBrYW5uIG51ciB6dXNhbW1lbiBtaXQgLS1kcnktcnVuIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIi0tY2htb2QgUGFyYW1ldGVyICclcycgbXVzcyBlbnR3ZWRlciAteCBvZGVyICt4IHNlaW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDcxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ4IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLXBhdGhzcGVjLWZyb20tZmlsZSBpc3QgaW5rb21wYXRpYmVsIG1pdFxuIgorIlBmYWRzcGV6aWZpa2F0aW9uLUFyZ3VtZW50ZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjQ3OCBidWlsdGluL2NoZWNrb3V0LmM6MTY2MCBidWlsdGluL2NvbW1pdC5jOjM2MAorIzogYnVpbHRpbi9yZXNldC5jOjMzMworbXNnaWQgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1wYXRoc3BlYy1maWxlLW51bCBiZW7DtnRpZ3QgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJOaWNodHMgc3BlemlmaXppZXJ0LCBuaWNodHMgaGluenVnZWbDvGd0LlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiTWVpbnRlbiBTaWUgdmllbGxlaWNodCAnZ2l0IGFkZCAuJz9cbiIKKworIzogYnVpbHRpbi9hbS5jOjM0NworbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICJrb25udGUgQXV0b3ItU2tyaXB0IG5pY2h0IHBhcnNlbiIKKworIzogYnVpbHRpbi9hbS5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIHd1cmRlIGR1cmNoIGRlbiBhcHBseXBhdGNoLW1zZyBIb29rIGVudGZlcm50IgorCisjOiBidWlsdGluL2FtLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiRmVobGVyaGFmdGUgRWluZ2FiZXplaWxlOiAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gS29waWVyZW4gZGVyIE5vdGl6ZW4gdm9uICclcycgbmFjaCAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NTM3Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJcImZzZWVrXCIgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgImtvbm50ZSBQYXRjaCAnJXMnIG5pY2h0IHBhcnNlbiIKKworIzogYnVpbHRpbi9hbS5jOjc5MAorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJFcyBrYW5uIG51ciBlaW5lIFN0R0lUIFBhdGNoLVNlcmllIGF1ZiBlaW5tYWwgYW5nZXdlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2FtLmM6ODM4Cittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgInVuZ8O8bHRpZ2VyIFplaXRzdGVtcGVsIgorCisjOiBidWlsdGluL2FtLmM6ODQzIGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAiVW5nw7xsdGlnZSBcIkRhdGVcIi1aZWlsZSIKKworIzogYnVpbHRpbi9hbS5jOjg1MAorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICJVbmfDvGx0aWdlciBPZmZzZXQgaW4gZGVyIFplaXR6b25lIgorCisjOiBidWlsdGluL2FtLmM6OTQzCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJQYXRjaC1Gb3JtYXRlcmtlbm51bmcgZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL2FtLmM6OTQ4IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIHZvbiBWZXJ6ZWljaG5pcyAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6OTUzCittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdWZ0ZWlsZW4gZGVyIFBhdGNoZXMuIgorCisjOiBidWlsdGluL2FtLmM6MTA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiIgorIldlbm4gU2llIGRhcyBQcm9ibGVtIGF1ZmdlbMO2c3QgaGFiZW4sIGbDvGhyZW4gU2llIFwiJXMgLS1jb250aW51ZVwiIGF1cy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIkZhbGxzIFNpZSBkaWVzZW4gUGF0Y2ggYXVzbGFzc2VuIG3DtmNodGVuLCBmw7xocmVuIFNpZSBzdGF0dGRlc3NlbiBcIiVzIC0tc2tpcCIKKyJcIiBhdXMuIgorCisjOiBidWlsdGluL2FtLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJVbSBkZW4gdXJzcHLDvG5nbGljaGVuIEJyYW5jaCB3aWVkZXJoZXJ6dXN0ZWxsZW4gdW5kIGRpZSBBbndlbmR1bmcgZGVyICIKKyJQYXRjaGVzIGFienVicmVjaGVuLCBmw7xocmVuIFNpZSBcIiVzIC0tYWJvcnRcIiBhdXMuIgorCisjOiBidWlsdGluL2FtLmM6MTE2OQorbXNnaWQgIlBhdGNoIHNlbnQgd2l0aCBmb3JtYXQ9Zmxvd2VkOyBzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzIG1pZ2h0IGJlIGxvc3QuIgorbXNnc3RyICIiCisiUGF0Y2ggbWl0IGZvcm1hdD1mbG93ZWQgdmVyc2VuZGV0OyBMZWVyemVpY2hlbiBhbSBFbmRlIHZvbiBaZWlsZW4ga8O2bm50ZSAiCisidmVybG9yZW4gZ2VoZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTE5NworbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiUGF0Y2ggaXN0IGxlZXIuIgorCisjOiBidWlsdGluL2FtLmM6MTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAiQXV0b3ItWmVpbGUgZmVobHQgaW4gQ29tbWl0ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgSWRlbnRpZmlrYXRpb25zemVpbGU6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg0Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkRlbSBSZXBvc2l0b3J5IGZlaGxlbiBub3R3ZW5kaWdlIEJsb2JzIHVtIGF1ZiBlaW5lbiAzLVdlZ2UtTWVyZ2UgIgorInp1csO8Y2t6dWZhbGxlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorIlZlcndlbmRlIEluZm9ybWF0aW9uZW4gYXVzIGRlciBTdGFnaW5nLUFyZWEsIHVtIGVpbiBCYXNpc3ZlcnplaWNobmlzICIKKyJuYWNoenVzdGVsbGVuIC4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MDUKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiSGFiZW4gU2llIGRlbiBQYXRjaCBwZXIgSGFuZCBlZGl0aWVydD9cbiIKKyJFciBrYW5uIG5pY2h0IGF1ZiBkaWUgQmxvYnMgaW4gc2VpbmVyICdpbmRleCcgWmVpbGUgYW5nZXdlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTUxMQorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiRmFsbGUgenVyw7xjayB6dW0gUGF0Y2hlbiBkZXIgQmFzaXMgdW5kIHp1bSAzLVdlZ2UtTWVyZ2UgLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTUzNworbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIk1lcmdlIGRlciDDhG5kZXJ1bmdlbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTY5Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAiYXVmIGxlZXJlIEhpc3RvcmllIGFud2VuZGVuIgorCisjOiBidWlsdGluL2FtLmM6MTYxNiBidWlsdGluL2FtLmM6MTYyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIkthbm4gbmljaHQgZm9ydHNldHplbjogJXMgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBidWlsdGluL2FtLmM6MTYzOAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiQ29tbWl0LUJlc2NocmVpYnVuZyBpc3Q6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICJBbndlbmRlbj8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorCisjOiBidWlsdGluL2FtLmM6MTY5NSBidWlsdGluL2NvbW1pdC5jOjM5NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgSW5kZXgtRGF0ZWkgbmljaHQgc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9hbS5jOjE2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICJHZcOkbmRlcnRlciBJbmRleDoga2FubiBQYXRjaGVzIG5pY2h0IGFud2VuZGVuIChnZcOkbmRlcnQ6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE3MzkgYnVpbHRpbi9hbS5jOjE4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIldlbmRlIGFuOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc1NgorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4gLS0gUGF0Y2hlcyBiZXJlaXRzIGFuZ2V3ZW5kZXQuIgorCisjOiBidWlsdGluL2FtLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiQW53ZW5kdW5nIGRlcyBQYXRjaGVzIGZlaGxnZXNjaGxhZ2VuIGJlaSAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2NgorbXNnaWQgIlVzZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorIkJlbnV0emVuIFNpZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJywgdW0gZGVuXG4iCisiZmVobGdlc2NobGFnZW5lbiBQYXRjaCB6dSBzZWhlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODEwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiS2VpbmUgw4RuZGVydW5nZW4gLSBoYWJlbiBTaWUgdmVyZ2Vzc2VuICdnaXQgYWRkJyB6dSBiZW51dHplbj9cbiIKKyJXZW5uIGtlaW5lIMOEbmRlcnVuZ2VuIG1laHIgenVtIENvbW1pdCB2b3J6dW1lcmtlbiBzaW5kLCBrw7ZubnRlblxuIgorImRpZXNlIGJlcmVpdHMgYW5kZXJ3ZWl0aWcgZWluZ2Vmw7xndCB3b3JkZW4gc2VpbjsgU2llIGvDtm5udGVuIGRpZXNlbiBQYXRjaFxuIgorImF1c2xhc3Nlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODE3Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisiU2llIGhhYmVuIG5vY2ggaW1tZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgUGZhZGUgaW4gSWhyZW0gSW5kZXguXG4iCisiU2llIHNvbGx0ZW4gJ2dpdCBhZGQnIGbDvHIgamVkZSBEYXRlaSBtaXQgYXVmZ2Vsw7ZzdGVuIEtvbmZsaWt0ZW4gYXVzZsO8aHJlbixcbiIKKyJ1bSBkaWVzZSBhbHMgc29sY2hlIHp1IG1hcmtpZXJlbi5cbiIKKyJTaWUga8O2bm5lbiAnZ2l0IHJtJyBhdWYgRGF0ZWllbiBhdXNmw7xocmVuLCB1bSBcInZvbiBkZW5lbiBnZWzDtnNjaHRcIiBmw7xyXG4iCisiZGllc2UgenUgYWt6ZXB0aWVyZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTkyNCBidWlsdGluL2FtLmM6MTkyOCBidWlsdGluL2FtLmM6MTk0MCBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIktvbm50ZSBPYmpla3QgJyVzJyBuaWNodCBwYXJzZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTk3NgorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQmVyZWluaWdlbiBkZXMgSW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDIwCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJTaWUgc2NoZWluZW4gc2VpdCBkZW0gbGV0enRlbiBnZXNjaGVpdGVydGVuICdhbScgSEVBRCBnZcOkbmRlcnQgenUgaGFiZW4uXG4iCisiS2VpbmUgWnVyw7xja3NldHp1bmcgenUgT1JJR19IRUFELiIKKworIzogYnVpbHRpbi9hbS5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE1MworbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzxPcHRpb25lbj5dIFsoPG1ib3g+IHwgPEUtTWFpbC1WZXJ6ZWljaG5pcz4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIxNTQKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8T3B0aW9uZW4+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjE2MAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJpbnRlcmFrdGl2IGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYyCittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgImhpc3RvcmlzY2hlIE9wdGlvbiAtLSBrZWluIEVmZmVrdCIKKworIzogYnVpbHRpbi9hbS5jOjIxNjQKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAiZXJsYXViZSwgZmFsbHMgbm90d2VuZGlnLCBkYXMgWnVyw7xja2ZhbGxlbiBhdWYgZWluZW4gMy1XZWdlLU1lcmdlIgorCisjOiBidWlsdGluL2FtLmM6MjE2NSBidWlsdGluL2luaXQtZGIuYzo0OTQgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1OAorIzogYnVpbHRpbi9yZXBhY2suYzozMDQgYnVpbHRpbi9zdGFzaC5jOjgxMQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICJ3ZW5pZ2VyIEF1c2dhYmVuIgorCisjOiBidWlsdGluL2FtLmM6MjE2NworbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImRlciBDb21taXQtQmVzY2hyZWlidW5nIGVpbmUgU2lnbmVkLW9mZi1ieSBaZWlsZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9hbS5jOjIxNzAKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAibmFjaCBVVEYtOCB1bWtvZGllcmVuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcyCittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiLWsgYW4gZ2l0LW1haWxpbmZvIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc0Cittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiLWIgYW4gZ2l0LW1haWxpbmZvIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc2Cittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiLW0gYW4gZ2l0LW1haWxpbmZvIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc4Cittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAiLS1rZWVwLWNyIGFuIGdpdC1tYWlsc3BsaXQgZsO8ciBtYm94LUZvcm1hdCDDvGJlcmdlYmVuIgorCisjOiBidWlsdGluL2FtLmM6MjE4MQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICJrZWluIC0ta2VlcC1jciBhbiBnaXQtbWFpbHNwbGl0IMO8YmVyZ2ViZW4sIHVuYWJow6RuZ2lnIHZvbiBhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg0Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICJhbGxlcyB2b3IgZWluZXIgU2NoZXJlbi1aZWlsZSBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg2IGJ1aWx0aW4vYW0uYzoyMTg5IGJ1aWx0aW4vYW0uYzoyMTkyIGJ1aWx0aW4vYW0uYzoyMTk1CisjOiBidWlsdGluL2FtLmM6MjE5OCBidWlsdGluL2FtLmM6MjIwMSBidWlsdGluL2FtLmM6MjIwNCBidWlsdGluL2FtLmM6MjIwNworIzogYnVpbHRpbi9hbS5jOjIyMTMKK21zZ2lkICJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IgorbXNnc3RyICJhbiBnaXQtYXBwbHkgw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMDMgYnVpbHRpbi9jb21taXQuYzoxMzg2IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc2IGJ1aWx0aW4vZ3JlcC5jOjg4MyBidWlsdGluL21lcmdlLmM6MjQ5CisjOiBidWlsdGluL3B1bGwuYzoxNjAgYnVpbHRpbi9wdWxsLmM6MjE5IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJBbnphaGwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA5IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzgKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NSBidWlsdGluL3RhZy5jOjQzNyBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAiRm9ybWF0IgorCisjOiBidWlsdGluL2FtLmM6MjIxMAorbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAiUGF0Y2gtRm9ybWF0IgorCisjOiBidWlsdGluL2FtLmM6MjIxNgorbXNnaWQgIm92ZXJyaWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXRjaCBmYWlsdXJlIG9jY3VycyIKK21zZ3N0ciAiTWVsZHVuZyBiZWkgZmVobGVyaGFmdGVyIFBhdGNoLUFud2VuZHVuZyDDvGJlcnNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICJBbndlbmR1bmcgZGVyIFBhdGNoZXMgbmFjaCBBdWZsw7ZzdW5nIGVpbmVzIEtvbmZsaWt0ZXMgZm9ydHNldHplbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIKK21zZ3N0ciAiU3lub255bWUgZsO8ciAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImRlbiBha3R1ZWxsZW4gUGF0Y2ggYXVzbGFzc2VuIgorCisjOiBidWlsdGluL2FtLmM6MjIyNworbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgIiIKKyJ1cnNwcsO8bmdsaWNoZW4gQnJhbmNoIHdpZWRlcmhlcnN0ZWxsZW4gdW5kIEFud2VuZHVuZyBkZXIgUGF0Y2hlcyBhYmJyZWNoZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiUGF0Y2gtT3BlcmF0aW9uIGFiYnJlY2hlbiwgYWJlciBIRUFEIGFuIGFrdHVlbGxlciBTdGVsbGUgYmVsYXNzZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMzCittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZC4iCittc2dzdHIgImRlbiBQYXRjaCwgZGVyIGdlcmFkZSBhbmdld2VuZGV0IHdpcmQsIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2FtLmM6MjIzNworbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAiQXV0b3ItRGF0dW0gYWxzIENvbW1pdC1EYXR1bSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM5Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAiYWt0dWVsbGVuIFplaXRzdGVtcGVsIGFscyBBdXRvci1EYXR1bSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQxIGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjAgYnVpbHRpbi9jb21taXQuYzoxNTA3CisjOiBidWlsdGluL21lcmdlLmM6Mjg2IGJ1aWx0aW4vcHVsbC5jOjE5NCBidWlsdGluL3JlYmFzZS5jOjUwOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTEzIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE3IGJ1aWx0aW4vdGFnLmM6NDE4Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJHUEctU2NobMO8c3NlbGtlbm51bmciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQyIGJ1aWx0aW4vcmViYXNlLmM6NTEwIGJ1aWx0aW4vcmViYXNlLmM6MTUxNAorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgIkNvbW1pdHMgbWl0IEdQRyBzaWduaWVyZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ1Cittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIihpbnRlcm4gZsO8ciBnaXQtcmViYXNlIHZlcndlbmRldCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYzCittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisiRGllIC1iLy0tYmluYXJ5IE9wdGlvbiBoYXQgc2VpdCBMYW5nZW0ga2VpbmVuIEVmZmVrdCB1bmQgd2lyZFxuIgorImVudGZlcm50LiBCaXR0ZSB2ZXJ3ZW5kZW4gU2llIGRpZXNlIG5pY2h0IG1laHIuIgorCisjOiBidWlsdGluL2FtLmM6MjI3MAorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVzIEluZGV4IgorCisjOiBidWlsdGluL2FtLmM6MjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgIlZvcmhlcmlnZXMgUmViYXNlLVZlcnplaWNobmlzICVzIGV4aXN0aWVydCBub2NoLCBhYmVyIG1ib3ggZ2VnZWJlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisiU3RyYXkgJXMgVmVyemVpY2huaXMgZ2VmdW5kZW4uXG4iCisiQmVudXR6ZW4gU2llIFwiZ2l0IGFtIC0tYWJvcnRcIiwgdW0gZXMgenUgZW50ZmVybmVuLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMTUKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICJFcyBpc3Qga2VpbmUgQXVmbMO2c3VuZyBpbSBHYW5nZSwgZXMgd2lyZCBuaWNodCBmb3J0Z2VzZXR6dC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIkludGVyYWt0aXZlciBNb2R1cyBiZW7DtnRpZ3QgUGF0Y2hlcyDDvGJlciBkaWUgS29tbWFuZG96ZWlsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxPcHRpb25lbj5dIFs8UGF0Y2g+Li4uXSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIEFyY2hpdi1EYXRlaSAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAiS29ubnRlIEF1c2dhYmUgbmljaHQgdW1sZWl0ZW4uIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlOiBFeHRlcm5lcyBBcmNoaXYgb2huZSBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IEFDSy9OQUsgZXJ3YXJ0ZXQsIEZsdXNoLVBha2V0IGJla29tbWVuIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogUHJvdG9rb2xsZmVobGVyIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZXJ3YXJ0ZXRlIGVpbmUgU3DDvGx1bmcgKGZsdXNoKSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjUKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Q29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNgorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8WnVzdGFuZD4gPFJldmlzaW9uPiAiCisiPEJlZ3JpZmZfZ3V0PiA8QmVncmlmZl9zY2hsZWNodD4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNworbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8QmVmZWhsPiA8QmVncmlmZl9ndXQ+ICIKKyI8QmVncmlmZl9zY2hsZWNodD4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxnb29kX3Rlcm0+IDxiYWRfdGVybT4gWzx0ZXJtPl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8QmVncmlmZl9ndXQ+IDxCZWdyaWZmX3NjaGxlY2h0PiAiCisiWzxCZWdyaWZmPl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTxCZWdyaWZmPiAtLXRlcm0te25ldywiCisiYmFkfT08QmVncmlmZj5dWy0tbm8tY2hlY2tvdXRdIFs8c2NobGVjaHQ+IFs8Z3V0Pi4uLl1dIFstLV0gWzxQZmFkZT4uLi5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBCZWdyaWZmLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICclcycgYXMgYSB0ZXJtIgorbXNnc3RyICJLYW5uIGRlbiBlaW5nZWJhdXRlbiBCZWZlaGwgJyVzJyBuaWNodCBhbHMgQmVncmlmZiB2ZXJ3ZW5kZW4uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICJLYW5uIGRpZSBCZWRldXR1bmcgdm9uIGRlbSBCZWdyaWZmICclcycgbmljaHQgw6RuZGVybi4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgIkJpdHRlIHZlcndlbmRlbiBTaWUgendlaSB2ZXJzY2hpZWRlbmUgQmVncmlmZmUuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJLb25udGUgZGllIERhdGVpIEJJU0VDVF9URVJNUyBuaWNodCDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy5cbiIKK21zZ3N0ciAiS2VpbmUgYmluw6RyZSBTdWNoZSBpbSBHYW5nZS5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBnw7xsdGlnZXIgQ29tbWl0LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiS29ubnRlIGRlbiB1cnNwcsO8bmdsaWNoZW4gSEVBRCAnJXMnIG5pY2h0IGF1c2NoZWNrZW4uXG4iCisiVmVyc3VjaGVuIFNpZSAnZ2l0IGJpc2VjdCByZXNldCA8Q29tbWl0PicuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBcImJpc2VjdF93cml0ZVwiIEFyZ3VtZW50OiAlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciCittc2dzdHIgIktvbm50ZSBkaWUgT0lEIGRlciBSZXZpc2lvbiAnJXMnIG5pY2h0IGVyaGFsdGVuLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgIktvbm50ZSBkaWUgRGF0ZWkgJyVzJyBuaWNodCDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEJlZmVobDogU2llIHNpbmQgZ2VyYWRlIGJlaSBlaW5lciBiaW7DpHJlbiAlcy8lcyBTdWNoZS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiU2llIG3DvHNzZW4gbWluZGVzdGVucyBlaW5lbiBcIiVzXCIgdW5kIGVpbmVuIFwiJXNcIiBDb21taXQgYW5nZWJlbi5cbiIKKyJTaWUga8O2bm5lbiBkYWbDvHIgXCJnaXQgYmlzZWN0ICVzXCIgdW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGJlbnV0emVuLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIG1pdCBcImdpdCBiaXNlY3Qgc3RhcnRcIiBiZWdpbm5lbi5cbiIKKyJEYW5hY2ggbcO8c3NlbiBTaWUgbWluZGVzdGVucyBlaW5lbiBcIiVzXCIgdW5kIGVpbmVuIFwiJXNcIiBDb21taXQgYW5nZWJlbi5cbiIKKyJTaWUga8O2bm5lbiBkYWbDvHIgXCJnaXQgYmlzZWN0ICVzXCIgdW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGJlbnV0emVuLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNlY3Rpbmcgb25seSB3aXRoIGEgJXMgY29tbWl0IgorbXNnc3RyICJCaW7DpHJlIFN1Y2hlIG51ciBtaXQgZWluZW0gJXMgQ29tbWl0LiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMzMAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJTaW5kIFNpZSBzaWNoZXIgW1kvbl0/ICIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM3NworbXNnaWQgIm5vIHRlcm1zIGRlZmluZWQiCittc2dzdHIgIktlaW5lIEJlZ3JpZmZlIGRlZmluaWVydC4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKyJJaHJlIGFrdHVlbGxlbiBCZWdyaWZmZSBzaW5kICVzIGbDvHIgZGVuIGFsdGVuIFp1c3RhbmRcbiIKKyJ1bmQgJXMgZsO8ciBkZW4gbmV1ZW4gWnVzdGFuZC5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorIlVuZ8O8bHRpZ2VzIEFyZ3VtZW50ICVzIGbDvHIgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlVudGVyc3TDvHR6dGUgT3B0aW9uZW4gc2luZDogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCB1bmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICJOaWNodCBlcmthbm50ZSBQb3NpdGlvbjogJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICInJXMnIHNjaGVpbnQga2VpbiBnw7xsdGlnZXIgQ29tbWl0IHp1IHNlaW4uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTEyCittc2dpZCAiYmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICJVbmfDvGx0aWdlciBIRUFEIC0gSEVBRCB3aXJkIGJlbsO2dGlndC4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3Qgc3RhcnQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorIkF1c2NoZWNrZW4gdm9uICclcycgZmVobGdlc2NobGFnZW4uIFZlcnN1Y2hlbiBTaWUgJ2dpdCBiaXNlY3Qgc3RhcnQgIgorIjxnw7xsdGlnZXItQnJhbmNoPicuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTQ4Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAiIgorImJpbsOkcmUgU3VjaGUgYXVmIGVpbmVtIGR1cmNoICdjZy1zZWVrJyBnZcOkbmRlcnRlbSBWZXJ6ZWljaG5pcyBuaWNodCBtw7ZnbGljaCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MQorbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEhFQUQgLSBtZXJrd8O8cmRpZ2Ugc3ltYm9saXNjaGUgUmVmZXJlbnouIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIFJlZmVyZW56OiAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMxCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgbmV4dCcgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAiZGllIEJlZ3JpZmZlIG5hY2ggLmdpdC9CSVNFQ1RfVEVSTVMgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJkZW4gWnVzdGFuZCBkZXIgYmluw6RyZW4gU3VjaGUgYXVmcsOkdW1lbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICJhdWYgZXJ3YXJ0ZXRlIENvbW1pdHMgcHLDvGZlbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgImRlbiBadXN0YW5kIGRlciBiaW7DpHJlbiBTdWNoZSB6dXLDvGNrc2V0emVuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQxCittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAiZGVuIFp1c3RhbmQgZGVyIGJpbsOkcmVuIFN1Y2hlIG5hY2ggQklTRUNUX0xPRyBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDMKK21zZ2lkICJjaGVjayBhbmQgc2V0IHRlcm1zIGluIGEgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJCZWdyaWZmZSBpbm5lcmhhbGIgZWluZXIgYmluw6RyZW4gU3VjaGUgcHLDvGZlbiB1bmQgc2V0emVuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAicHLDvGZlbiwgb2IgQmVncmlmZmUgZsO8ciBndXRlIHVuZCBzY2hsZWNodGUgQ29tbWl0cyBleGlzdGllcmVuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ3Cittc2dpZCAicHJpbnQgb3V0IHRoZSBiaXNlY3QgdGVybXMiCittc2dzdHIgImRpZSBCZWdyaWZmZSBmw7xyIGRpZSBiaW7DpHJlIFN1Y2hlIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ5Cittc2dpZCAic3RhcnQgdGhlIGJpc2VjdCBzZXNzaW9uIgorbXNnc3RyICJTaXR6dW5nIGbDvHIgYmluw6RyZSBTdWNoZSBzdGFydGVuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUxCittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiQklTRUNUX0hFQUQgYWt0dWFsaXNpZXJlbiwgYW5zdGF0dCBkZW4gYWt0dWVsbGVuIENvbW1pdCBhdXN6dWNoZWNrZW4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTMKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAia2VpbiBMb2cgZsO8ciBCSVNFQ1RfV1JJVEUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzAKK21zZ2lkICItLXdyaXRlLXRlcm1zIHJlcXVpcmVzIHR3byBhcmd1bWVudHMiCittc2dzdHIgIi0td3JpdGUtdGVybXMgYmVuw7Z0aWd0IHp3ZWkgQXJndW1lbnRlLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NAorbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgZXJ3YXJ0ZXQga2VpbmUgQXJndW1lbnRlLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4MQorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiLS1iaXNlY3QtcmVzZXQgYmVuw7Z0aWd0IGVudHdlZGVyIGtlaW4gQXJndW1lbnQgb2RlciBlaW4gQ29tbWl0LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4NQorbXNnaWQgIi0tYmlzZWN0LXdyaXRlIHJlcXVpcmVzIGVpdGhlciA0IG9yIDUgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC13cml0ZSBiZW7DtnRpZ3QgZW50d2VkZXIgNCBvZGVyIDUgQXJndW1lbnRlLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5MQorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIGJlbsO2dGlndCAzIEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTcKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LW5leHQtY2hlY2sgYmVuw7Z0aWd0IDIgb2RlciAzIEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDMKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIGJlbsO2dGlndCAwIG9kZXIgMSBBcmd1bWVudC4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8T3B0aW9uZW4+XSBbPHJldi1vcHRzPl0gWzxDb21taXQ+XSBbLS1dIDxEYXRlaT4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI8cmV2LW9wdHM+IHNpbmQgZG9rdW1lbnRpZXJ0IGluIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RpbmcgYSBjb2xvcjogJXMiCittc2dzdHIgIkVyd2FydGUgZWluZSBGYXJiZTogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgIk11c3MgbWl0IGVpbmVyIEZhcmJlIGVuZGVuLiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yICclcycgaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBGYXJiZSAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMuIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzQ3Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgYmxhbWUuY29sb3JpbmciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciBibGFtZS5jb2xvcmluZy4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICJLb25udGUgQ29tbWl0ICVzIHp1bSBJZ25vcmllcmVuIG5pY2h0IGZpbmRlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIlwiYmxhbWVcIi1FaW50csOkZ2Ugc2Nocml0dHdlaXNlIGFuemVpZ2VuLCB3w6RocmVuZCB3aXIgc2llIGdlbmVyaWVyZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJsZWVyZSBTSEEtMSBmw7xyIEdyZW56LUNvbW1pdHMgYW56ZWlnZW4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ2Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJSb290LUNvbW1pdHMgbmljaHQgYWxzIEdyZW56ZW4gYmVoYW5kZWxuIChTdGFuZGFyZDogYXVzKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIlN0YXRpc3Rpa2VuIHp1bSBBcmJlaXRzYXVmd2FuZCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiRm9ydHNjaHJpdHRzYW56ZWlnZSBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDkKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiQXVzZ2FiZWJld2VydHVuZyBmw7xyIFwiYmxhbWVcIi1FaW50csOkZ2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAidXJzcHLDvG5nbGljaGVuIERhdGVpbmFtZW4gYW56ZWlnZW4gKFN0YW5kYXJkOiBhdXRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAidXJzcHLDvG5nbGljaGUgWmVpbGVubnVtbWVyIGFuemVpZ2VuIChTdGFuZGFyZDogYXVzKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIkFuemVpZ2UgaW4gZWluZW0gRm9ybWF0IGbDvHIgbWFzY2hpbmVsbGUgQXVzd2VydHVuZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorIkFuemVpZ2UgaW4gRm9ybWF0IGbDvHIgRnJlbWRwcm9ncmFtbWUgbWl0IENvbW1pdC1JbmZvcm1hdGlvbmVuIHBybyBaZWlsZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJEZW4gZ2xlaWNoZW4gQXVzZ2FiZW1vZHVzIGJlbnV0emVuIHdpZSBcImdpdC1hbm5vdGF0ZVwiIChTdGFuZGFyZDogYXVzKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVW5iZWFyYmVpdGV0ZW4gWmVpdHN0ZW1wZWwgYW56ZWlnZW4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJMYW5nZW4gQ29tbWl0LVNIQTEgYW56ZWlnZW4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiRGVuIE5hbWVuIGRlcyBBdXRvcnMgdW5kIGRlbiBaZWl0c3RlbXBlbCB1bnRlcmRyw7xja2VuIChTdGFuZGFyZDogYXVzKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIkFuc3RhdHQgZGVzIE5hbWVucyBkaWUgRS1NYWlsLUFkcmVzc2UgZGVzIEF1dG9ycyBhbnplaWdlbiAoU3RhbmRhcmQ6IGF1cykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTkKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiVW50ZXJzY2hpZWRlIGltIFdoaXRlc3BhY2UgaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgIkNvbW1pdCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgIklnbm9yaWVyZSA8cmV2PiBiZWltIEF1c2bDvGhyZW4gdm9uICdibGFtZSciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjEKK21zZ2lkICJJZ25vcmUgcmV2aXNpb25zIGZyb20gPGZpbGU+IgorbXNnc3RyICJJZ25vcmllcmUgQ29tbWl0cyBhdXMgPERhdGVpPiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgInJlZHVuZGFudGUgTWV0YWRhdGVuIGRlciB2b3JoZXJpZ2VuIFplaWxlIHVudGVyc2NoaWVkbGljaCBlaW5mw6RyYmVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICJaZWlsZW4gbmFjaCBBbHRlciBlaW5mw6RyYmVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY0Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICJMw6RuZ2VyIGFyYmVpdGVuLCB1bSBiZXNzZXJlIMOcYmVyZWluc3RpbW11bmdlbiB6dSBmaW5kZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjUKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIkNvbW1pdHMgdm9uIDxEYXRlaT4gYmVudXR6ZW4sIGFuc3RhdHQgXCJnaXQtcmV2LWxpc3RcIiBhdWZ6dXJ1ZmVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY2Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiSW5oYWx0ZSBkZXIgPERhdGVpPmVuIGFscyBlbmRnw7xsdGlnZXMgQWJiaWxkIGJlbnV0emVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAiQmV3ZXJ0dW5nIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAia29waWVydGUgWmVpbGVuIGlubmVyaGFsYiBvZGVyIHp3aXNjaGVuIERhdGVpZW4gZmluZGVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAidmVyc2Nob2JlbmUgWmVpbGVuIGlubmVyaGFsYiBvZGVyIHp3aXNjaGVuIERhdGVpZW4gZmluZGVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAibixtIgorbXNnc3RyICJuLG0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAibnVyIFplaWxlbiBpbSBCZXJlaWNoIG4sbSB2ZXJhcmJlaXRlbiwgZ2V6w6RobHQgdm9uIDEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjEKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICIiCisiLS1wcm9ncmVzcyBrYW5uIG5pY2h0IG1pdCAtLWluY3JlbWVudGFsIG9kZXIgRm9ybWF0ZW4gZsO8ciBGcmVtZHByb2dyYW1tZVxuIgorInZlcndlbmRldCB3ZXJkZW4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTcyCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAidm9yIDQgSmFocmVuIHVuZCAxMSBNb25hdGVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAiRGF0ZWkgJXMgaGF0IG51ciAlbHUgWmVpbGUiCittc2dzdHJbMV0gIkRhdGVpICVzIGhhdCBudXIgJWx1IFplaWxlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICJWZXJhcmJlaXRlIFplaWxlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPE9wdGlvbmVuPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8T3B0aW9uZW4+XSBbLWxdIFstZl0gPEJyYW5jaG5hbWU+IFs8U3RhcnRwdW5rdD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8T3B0aW9uZW4+XSBbLXJdICgtZCB8IC1EKSA8QnJhbmNobmFtZT4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxPcHRpb25lbj5dICgtbSB8IC1NKSBbPGFsdGVyLUJyYW5jaD5dIDxuZXVlci1CcmFuY2g+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8T3B0aW9uZW4+XSAoLWMgfCAtQykgWzxhbHRlci1CcmFuY2g+XSA8bmV1ZXItQnJhbmNoPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxPcHRpb25lbj5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPE9wdGlvbmVuPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorImVudGZlcm5lIEJyYW5jaCAnJXMnLCBkZXIgenVzYW1tZW5nZWbDvGhydCB3dXJkZSBtaXRcbiIKKyIgICAgICAgICAnJXMnLCBhYmVyIG5vY2ggbmljaHQgbWl0IEhFQUQgenVzYW1tZW5nZWbDvGhydCB3dXJkZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorImVudGZlcm5lIEJyYW5jaCAnJXMnIG5pY2h0LCBkZXIgbm9jaCBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0IHd1cmRlIG1pdFxuIgorIiAgICAgICAgICclcycsIG9id29obCBlciBtaXQgSEVBRCB6dXNhbW1lbmdlZsO8aHJ0IHd1cmRlLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJLb25udGUgQ29tbWl0LU9iamVrdCBmw7xyICclcycgbmljaHQgbmFjaHNjaGxhZ2VuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiRGVyIEJyYW5jaCAnJXMnIGlzdCBuaWNodCB2b2xsc3TDpG5kaWcgenVzYW1tZW5nZWbDvGhydC5cbiIKKyJXZW5uIFNpZSBzaWNoZXIgc2luZCBkaWVzZW4gQnJhbmNoIHp1IGVudGZlcm5lbiwgZsO8aHJlbiBTaWUgJ2dpdCBicmFuY2ggLUQgIgorIiVzJyBhdXMuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkFrdHVhbGlzaWVydW5nIGRlciBLb25maWd1cmF0aW9uc2RhdGVpIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgImthbm4gLWEgbmljaHQgbWl0IC1kIGJlbnV0emVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiS29ubnRlIENvbW1pdC1PYmpla3QgZsO8ciBIRUFEIG5pY2h0IG5hY2hzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgYnJhbmNoICclcycgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiS2FubiBCcmFuY2ggJyVzJyBuaWNodCBlbnRmZXJuZW4sIGF1c2dlY2hlY2t0IGluICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiUmVtb3RlLVRyYWNraW5nLUJyYW5jaCAnJXMnIG5pY2h0IGdlZnVuZGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBuaWNodCBnZWZ1bmRlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRW50ZmVybmVuIGRlcyBSZW1vdGUtVHJhY2tpbmctQnJhbmNoZXMgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVudGZlcm5lbiBkZXMgQnJhbmNoZXMgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJSZW1vdGUtVHJhY2tpbmctQnJhbmNoICVzIGVudGZlcm50ICh3YXIgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiQnJhbmNoICVzIGVudGZlcm50ICh3YXIgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIktvbm50ZSBGb3JtYXRpZXJ1bmdzc3RyaW5nIG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYwCittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiS29ubnRlIEhFQUQtQ29tbWl0IG5pY2h0IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIKK21zZ3N0ciAiSEVBRCAoJXMpIHd1cmRlIG5pY2h0IHVudGVyIFwicmVmcy9oZWFkcy9cIiBnZWZ1bmRlbiEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICJCcmFuY2ggJXMgd2lyZCBhdWYgJXMgdW1nZXNldHp0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgIkJpbsOkcmUgU3VjaGUgdm9uIEJyYW5jaCAlcyB6dSAlcyBpbSBHYW5nZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKyJLYW5uIGRlbiBha3R1ZWxsZW4gQnJhbmNoIG5pY2h0IGtvcGllcmVuLCBzb2xhbmdlIFNpZSBzaWNoIGF1ZiBrZWluZW0gIgorImJlZmluZGVuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorIkthbm4gYWt0dWVsbGVuIEJyYW5jaCBuaWNodCB1bWJlbmVubmVuLCBzb2xhbmdlIFNpZSBzaWNoIGF1ZiBrZWluZW0gYmVmaW5kZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBCcmFuY2huYW1lOiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJVbWJlbmVubnVuZyBkZXMgQnJhbmNoZXMgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ0Cittc2dpZCAiQnJhbmNoIGNvcHkgZmFpbGVkIgorbXNnc3RyICJLb3BpZSBkZXMgQnJhbmNoZXMgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciCittc2dzdHIgIktvcGllIGVpbmVzIGZhbHNjaCBiZW5hbm50ZW4gQnJhbmNoZXMgJyVzJyBlcnN0ZWxsdC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJmYWxzY2ggYmVuYW5udGVuIEJyYW5jaCAnJXMnIHVtYmVuYW5udCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiQnJhbmNoIHVtYmVuYW5udCB6dSAlcywgYWJlciBIRUFEIGlzdCBuaWNodCBha3R1YWxpc2llcnQhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NgorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIkJyYW5jaCBpc3QgdW1iZW5hbm50LCBhYmVyIGRpZSBBa3R1YWxpc2llcnVuZyBkZXIgS29uZmlndXJhdGlvbnNkYXRlaSBpc3QgIgorImZlaGxnZXNjaGxhZ2VuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjgKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIkJyYW5jaCB3dXJkZSBrb3BpZXJ0LCBhYmVyIGRpZSBBa3R1YWxpc2llcnVuZyBkZXIgS29uZmlndXJhdGlvbnNkYXRlaSBpc3RcbiIKKyJmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iCittc2dzdHIgIiIKKyJCaXR0ZSDDpG5kZXJuIFNpZSBkaWUgQmVzY2hyZWlidW5nIGbDvHIgZGVuIEJyYW5jaFxuIgorIiAgJXNcbiIKKyJaZWlsZW4sIGRpZSBtaXQgJyVjJyBiZWdpbm5lbiwgd2VyZGVuIGVudGZlcm50LlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiQWxsZ2VtZWluZSBPcHRpb25lbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjAKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAiSGFzaCB1bmQgQmV0cmVmZiBhbnplaWdlbjsgLXZ2OiB6dXPDpHR6bGljaCBVcHN0cmVhbS1CcmFuY2giCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAiSW5mb3JtYXRpb25zbWVsZHVuZ2VuIHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIyCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgIk1vZHVzIHp1bSBGb2xnZW4gdm9uIEJyYW5jaGVzIGVpbnN0ZWxsZW4gKHNpZWhlIGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICJuaWNodCB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAidXBzdHJlYW0iCittc2dzdHIgIlVwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiSW5mb3JtYXRpb25lbiB6dW0gVXBzdHJlYW0tQnJhbmNoIMOkbmRlcm4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3Cittc2dpZCAidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIkluZm9ybWF0aW9uZW4genVtIFVwc3RyZWFtLUJyYW5jaCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJmYXJiaWdlIEF1c2dhYmVuIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhdWYgUmVtb3RlLVRyYWNraW5nLUJyYW5jaGVzIHdpcmtlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzEgYnVpbHRpbi9icmFuY2guYzo2MzMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJudXIgQnJhbmNoZXMgYXVzZ2ViZW4sIGRpZSBkaWVzZW4gQ29tbWl0IGVudGhhbHRlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJudXIgQnJhbmNoZXMgYXVzZ2ViZW4sIGRpZSBkaWVzZW4gQ29tbWl0IG5pY2h0IGVudGhhbHRlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJzcGV6aWZpc2NoZSBBa3Rpb25lbiBmw7xyIFwiZ2l0LWJyYW5jaFwiOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiUmVtb3RlLVRyYWNraW5nIHVuZCBsb2thbGUgQnJhbmNoZXMgYXVmbGlzdGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MAorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJ2b2xsc3TDpG5kaWcgenVzYW1tZW5nZWbDvGhydGVuIEJyYW5jaCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQxCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAiQnJhbmNoIGzDtnNjaGVuIChhdWNoIHdlbm4gbmljaHQgenVzYW1tZW5nZWbDvGhydCkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImVpbmVuIEJyYW5jaCB1bmQgZGVzc2VuIFJlZmxvZyB2ZXJzY2hpZWJlbi91bWJlbmVubmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIiIKKyJlaW5lbiBCcmFuY2ggdmVyc2NoaWViZW4vdW1iZW5lbm5lbiwgYXVjaCB3ZW5uIGRhcyBaaWVsIGJlcmVpdHMgZXhpc3RpZXJ0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImVpbmVuIEJyYW5jaCB1bmQgZGVzc2VuIFJlZmxvZyBrb3BpZXJlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDUKK21zZ2lkICJjb3B5IGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImVpbmVuIEJyYW5jaCBrb3BpZXJlbiwgYXVjaCB3ZW5uIGRhcyBaaWVsIGJlcmVpdHMgZXhpc3RpZXJ0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICJCcmFuY2huYW1lbiBhdWZsaXN0ZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICJaZWlnZSBha3R1ZWxsZW4gQnJhbmNoLU5hbWVuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAiZGFzIFJlZmxvZyBkZXMgQnJhbmNoZXMgZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgImRpZSBCZXNjaHJlaWJ1bmcgZsO8ciBkZW4gQnJhbmNoIGJlYXJiZWl0ZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAiRXJzdGVsbHVuZywgVmVyc2NoaWVidW5nL1VtYmVuZW5udW5nIG9kZXIgTMO2c2NodW5nIGVyendpbmdlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAibnVyIHp1c2FtbWVuZ2Vmw7xocnRlIEJyYW5jaGVzIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAibnVyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIEJyYW5jaGVzIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiQnJhbmNoZXMgaW4gU3BhbHRlbiBhdWZsaXN0ZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICJPYmpla3QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJudXIgQnJhbmNoZXMgdm9uIGRpZXNlbSBPYmpla3QgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYwIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDggYnVpbHRpbi90YWcuYzo0NDAKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgIlNvcnRpZXJ1bmcgdW5kIEZpbHRlcnVuZyBzaW5kIHVuYWJow6RuZ2lnIHZvbiBHcm/Dny0gdW5kIEtsZWluc2NocmVpYnVuZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQzOAorIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICJmw7xyIGRpZSBBdXNnYWJlIHp1IHZlcndlbmRlbmRlcyBGb3JtYXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njg0IGJ1aWx0aW4vY2xvbmUuYzo3ODQKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCB3dXJkZSBuaWNodCB1bnRlciBcInJlZnMvaGVhZHNcIiBnZWZ1bmRlbiEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA4Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1jb2x1bW4gdW5kIC0tdmVyYm9zZSBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzIzIGJ1aWx0aW4vYnJhbmNoLmM6Nzc3IGJ1aWx0aW4vYnJhbmNoLmM6Nzg2Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIkJyYW5jaG5hbWUgZXJmb3JkZXJsaWNoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1MworbXNnaWQgIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiCittc2dzdHIgInp1IGxvc2dlbMO2c3RlbSBIRUFEIGthbm4ga2VpbmUgQmVzY2hyZWlidW5nIGhpbnRlcmxlZ3Qgd2VyZGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJCZXNjaHJlaWJ1bmcgdm9uIG1laHIgYWxzIGVpbmVtIEJyYW5jaCBrYW5uIG5pY2h0IGJlYXJiZWl0ZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAiTm9jaCBrZWluIENvbW1pdCBpbiBCcmFuY2ggJyVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiQnJhbmNoICclcycgbmljaHQgdm9yaGFuZGVuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODMKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAienUgdmllbGUgQnJhbmNoZXMgZsO8ciBlaW5lIEtvcGllcm9wZXJhdGlvbiBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgInp1IHZpZWxlIEFyZ3VtZW50ZSBmw7xyIGVpbmUgVW1iZW5lbm5lbi1PcGVyYXRpb24gYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICJ6dSB2aWVsZSBBcmd1bWVudGUgYW5nZWdlYmVuLCB1bSBVcHN0cmVhbS1CcmFuY2ggenUgc2V0emVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJLb25udGUga2VpbmVuIG5ldWVuIFVwc3RyZWFtLUJyYW5jaCB2b24gSEVBRCB6dSAlcyBzZXR6ZW4sIGRhIGRpZXNlciBhdWZcbiIKKyJrZWluZW4gQnJhbmNoIHplaWd0LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiS2VpbiBzb2xjaGVyIEJyYW5jaCAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiQnJhbmNoICclcycgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorInp1IHZpZWxlIEFyZ3VtZW50ZSBhbmdlZ2ViZW4sIHVtIEtvbmZpZ3VyYXRpb24genUgVXBzdHJlYW0tQnJhbmNoIHp1ICIKKyJlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI1Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorIktvbm50ZSBLb25maWd1cmF0aW9uIHp1IFVwc3RyZWFtLUJyYW5jaCB2b24gSEVBRCBuaWNodCBlbnRmZXJuZW4sIGRhIGRpZXNlclxuIgorImF1ZiBrZWluZW4gQnJhbmNoIHplaWd0LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJCcmFuY2ggJyVzJyBoYXQga2VpbmVuIFVwc3RyZWFtLUJyYW5jaCBnZXNldHp0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgIiIKKyJUaGUgLWEsIGFuZCAtciwgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IHRha2UgYSBicmFuY2ggbmFtZS5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdXNlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtYSB1bmQgLXIgYmVpICdnaXQgYnJhbmNoJyBrw7ZubmVuIG5pY2h0IG1pdCBlaW5lbSBCcmFuY2huYW1lbiAiCisidmVyd2VuZGV0IHdlcmRlbi5cbiIKKyJXb2xsdGVuIFNpZSAtYXwtciAtLWxpc3QgPE11c3Rlcj4gYmVudXR6ZW4/IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NQorbXNnaWQgIiIKKyJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgIgorIictLXNldC11cHN0cmVhbS10bycgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJEaWUgJy0tc2V0LXVwc3RyZWFtJyBPcHRpb24gd2lyZCBuaWNodCBsw6RuZ2VyIHVudGVyc3TDvHR6dC5cbiIKKyJCaXR0ZSBiZW51dHplbiBTaWUgc3RhdHRkZXNzZW4gJy0tdHJhY2snIG9kZXIgJy0tc2V0LXVwc3RyZWFtLXRvJy4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworbXNnaWQgImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IgorbXNnc3RyICJnaXQgYnVuZGxlIGNyZWF0ZSBbPE9wdGlvbmVuPl0gPERhdGVpPiA8Z2l0LXJldi1saXN0IEFyZ3VtZW50ZT4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYgYnVpbHRpbi9idW5kbGUuYzoyOAorbXNnaWQgImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxPcHRpb25lbj5dIDxEYXRlaT4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTcgYnVpbHRpbi9idW5kbGUuYzozMworbXNnaWQgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8RGF0ZWk+IFs8UmVmZXJlbnpuYW1lPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTggYnVpbHRpbi9idW5kbGUuYzozOAorbXNnaWQgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxEYXRlaT4gWzxSZWZlcmVuem5hbWU+Li4uXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMjgKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAia2VpbmUgRm9ydHNjaHJpdHRzYW56ZWlnZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzAKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJGb3J0c2Nocml0dHNhbnplaWdlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICJGb3JzY2hyaXR0c2FuemVpZ2Ugd8OkaHJlbmQgZGVzIFNjaHJlaWJlbnMgdm9uIE9iamVrdGVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjczIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAiw6RobmxpY2ggenUgLS1hbGwtcHJvZ3Jlc3Mgd2VubiBGb3J0c2Nocml0dHNhbnplaWdlIGRhcnN0ZWxsdCB3aXJkIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjkzCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiVW0gZWluIFBha2V0IHp1IGVyc3RlbGxlbiB3aXJkIGVpbiBSZXBvc2l0b3J5IGJlbsO2dGlndC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgIktlaW5lIEJ1bmRsZS1EZXRhaWxzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIGlzdCBpbiBPcmRudW5nXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJadW0gRW50cGFja2VuIHdpcmQgZWluIFJlcG9zaXRvcnkgYmVuw7Z0aWd0LiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjggYnVpbHRpbi9yZW1vdGUuYzoxNjA5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAiZXJ3ZWl0ZXJ0ZSBBdXNnYWJlbjsgbXVzcyB2b3IgZWluZW0gVW50ZXJiZWZlaGwgYW5nZWdlYmVuIHdlcmRlbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIlVuYmVrYW5udGVyIFVudGVyYmVmZWhsOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8QXJ0PiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PFBmYWQ+XSA8T2JqZWt0PiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBiYXRjaCBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiTnVyIGVpbmUgQmF0Y2gtT3B0aW9uIGVybGF1YnQuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM1Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI8QXJ0PiBrYW5uIHNlaW46IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM2Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAiT2JqZWt0YXJ0IGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiT2JqZWt0Z3LDtsOfZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAibWl0IFLDvGNrZ2FiZXdlcnQgMCBiZWVuZGVuLCB3ZW5uIGtlaW4gRmVobGVyIGF1ZmdldHJldGVuIGlzdCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJhbnNwcmVjaGVuZGUgQW56ZWlnZSBkZXMgT2JqZWt0aW5oYWx0ZXMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZWluZSBUZXh0a29udmVydGllcnVuZyBhdWYgZGVuIEluaGFsdCB2b24gQmxvYi1PYmpla3RlbiBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZsO8ciBCbG9iLU9iamVrdGUsIEZpbHRlciBhdWYgT2JqZWt0LUluaGFsdGUgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NSBnaXQtc3VibW9kdWxlLnNoOjk5MgorbXNnaWQgImJsb2IiCittc2dzdHIgIkJsb2IiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAiZWluZW4gYmVzdGltbXRlbiBQZmFkIGbDvHIgLS10ZXh0Y29udi8tLWZpbHRlcnMgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ4Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICItcyB1bmQgLXQgbWl0IGJlc2Now6RkaWd0ZW4gT2JqZWt0ZW4gZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgIkF1c2dhYmUgdm9uIC0tYmF0Y2ggcHVmZmVybiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1MQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorIkFuemVpZ2Ugdm9uIEluZm9ybWF0aW9uZW4gdW5kIEluaGFsdCB2b24gT2JqZWt0ZW4sIGdlbGVzZW4gdm9uIGRlciBTdGFuZGFyZC0iCisiRWluZ2FiZSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1NQorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorIkFuemVpZ2Ugdm9uIEluZm9ybWF0aW9uZW4gw7xiZXIgT2JqZWt0ZSwgZ2VsZXNlbiB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTkKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIiIKKyJzeW1ib2xpc2NoZW4gVmVya27DvHBmdW5nZW4gaW5uZXJoYWxiIGRlcyBSZXBvc2l0b3JpZXMgZm9sZ2VuICh2ZXJ3ZW5kZXQgbWl0ICIKKyItLWJhdGNoIG9kZXIgLS1iYXRjaC1jaGVjaykiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjEKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICJhbGxlIE9iamVrdGUgbWl0IC0tYmF0Y2ggb2RlciAtLWJhdGNoLWNoZWNrIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICJBdXNnYWJlIHZvbiAtLWJhdGNoLWFsbC1vYmplY3RzIG5pY2h0IG9yZG5lbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTMKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxBdHRyaWJ1dD4uLi5dIFstLV0gPFBmYWRuYW1lPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTQKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8QXR0cmlidXQ+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgImFsbGUgQXR0cmlidXRlIGVpbmVyIERhdGVpIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMgorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJudXIgLmdpdGF0dHJpYnV0ZXMgdm9tIEluZGV4IHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgIkRhdGVpbmFtZW4gdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIkVpbnRyw6RnZSB2b24gRWluLSB1bmQgQXVzZ2FiZSBtaXQgTlVMLVplaWNoZW4gYWJzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM1IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDYKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIkZvcnRzY2hyaXR0c2FuemVpZ2UgdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJFaW5nYWJlLVBmYWRlIG9obmUgw5xiZXJlaW5zdGltbXVuZ2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMxCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgIkluZGV4IGJlaSBkZXIgUHLDvGZ1bmcgaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjAKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICJBbmdhYmUgdm9uIFBmYWRuYW1lbiBrYW5uIG5pY2h0IGdlbWVpbnNhbSBtaXQgLS1zdGRpbiB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICJEaWUgT3B0aW9uIC16IGthbm4gbnVyIG1pdCAtLXN0ZGluIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICJrZWluIFBmYWQgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OQorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tcXVpZXQgaXN0IG51ciBtaXQgZWluZW0gZWluemVsbmVuIFBmYWRuYW1lbiBnw7xsdGlnLiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzEKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtLXF1aWV0IHVuZCAtLXZlcmJvc2Uga8O2bm5lbiBuaWNodCBnZW1laW5zYW0gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcgaXN0IG51ciBtaXQgLS12ZXJib3NlIHp1bMOkc3NpZyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxPcHRpb25lbj5dIDxLb250YWt0Pi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTQKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiZWJlbmZhbGxzIEtvbnRha3RlIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICJLb25udGUgS29udGFrdCAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICJrZWluZSBLb250YWt0ZSBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8T3B0aW9uZW4+XSBbLS1dIFs8RGF0ZWk+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE0OAorbXNnaWQgInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIgorbXNnc3RyICItLXN0YWdlIHNvbGx0ZSB6d2lzY2hlbiAxIHVuZCAzIG9kZXIgJ2FsbCcgc2VpbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJhbGxlIERhdGVpZW4gaW0gSW5kZXggYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAiZGFzIMOcYmVyc2NocmVpYmVuIGJlcmVpdHMgZXhpc3RpZXJlbmRlciBEYXRlaWVuIGVyendpbmdlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NworbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgIiIKKyJrZWluZSBXYXJudW5nIGbDvHIgZXhpc3RpZXJlbmRlIERhdGVpZW4sIHVuZCBEYXRlaWVuLCBkaWUgc2ljaCBuaWNodCBpbSBJbmRleCAiCisiYmVmaW5kZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgImtlaW5lIG5ldWVuIERhdGVpZW4gYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICJEYXRlaWluZm9ybWF0aW9uZW4gaW4gZGVyIEluZGV4LURhdGVpIGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzUKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImVpbmUgTGlzdGUgdm9uIFBmYWRlbiB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgImRlbiBJbmhhbHQgaW4gdGVtcG9yw6RyZSBEYXRlaWVuIHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OCBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzkKK21zZ2lkICJzdHJpbmciCittc2dzdHIgIlplaWNoZW5rZXR0ZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OQorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgIiIKKyJ3ZW5uIERhdGVpZW4gZXJ6ZXVndCB3ZXJkZW4sIHN0ZWxsZSA8WmVpY2hlbmtldHRlPiBkZW0gRGF0ZWluYW1lbiB2b3JhbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4MQorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICJEYXRlaWVuIHZvbiBkZW0gYmVuYW5udGVuIFN0YW5kIGtvcGllcmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPE9wdGlvbmVuPl0gPEJyYW5jaD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8T3B0aW9uZW4+XSBbPEJyYW5jaD5dIC0tIDxEYXRlaT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNworbXNnaWQgImdpdCBzd2l0Y2ggWzxvcHRpb25zPl0gWzxicmFuY2g+XSIKK21zZ3N0ciAiZ2l0IHN3aXRjaCBbPE9wdGlvbmVuPl0gWzxCcmFuY2g+XSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyCittc2dpZCAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCByZXN0b3JlIFs8T3B0aW9uZW4+XSBbLS1zb3VyY2U9PEJyYW5jaD5dIDxEYXRlaT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUgYnVpbHRpbi9jaGVja291dC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiUGZhZCAnJXMnIGhhdCBuaWNodCB1bnNlcmUgVmVyc2lvbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJQZmFkICclcycgaGF0IG5pY2h0IGRlcmVuIFZlcnNpb24uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIlBmYWQgJyVzJyBoYXQgbmljaHQgYWxsZSBub3R3ZW5kaWdlbiBWZXJzaW9uZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiUGZhZCAnJXMnIGhhdCBuaWNodCBkaWUgbm90d2VuZGlnZW4gVmVyc2lvbmVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiUGZhZCAnJXMnOiBrYW5uIG5pY2h0IHp1c2FtbWVuZsO8aHJlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiS29ubnRlIE1lcmdlLUVyZ2VibmlzIHZvbiAnJXMnIG5pY2h0IGhpbnp1ZsO8Z2VuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gIiVkIE1lcmdlLUtvbmZsaWt0IHdpZWRlciBlcnN0ZWxsdCIKK21zZ3N0clsxXSAiJWQgTWVyZ2UtS29uZmxpa3RlIHdpZWRlciBlcnN0ZWxsdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSAlcyIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tICVzIgorbXNnc3RyWzBdICIlZCBQZmFkIHZvbiAlcyBha3R1YWxpc2llcnQiCittc2dzdHJbMV0gIiVkIFBmYWRlIHZvbiAlcyBha3R1YWxpc2llcnQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICIlZCBQZmFkIHZvbSBJbmRleCBha3R1YWxpc2llcnQiCittc2dzdHJbMV0gIiVkIFBmYWRlIHZvbSBJbmRleCBha3R1YWxpc2llcnQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyBrYW5uIG5pY2h0IG1pdCBkZXIgQWt0dWFsaXNpZXJ1bmcgdm9uIFBmYWRlbiB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDI1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIGthbm4gbmljaHQgbWl0ICclcycgdmVyd2VuZGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIiIKKyJLYW5uIG5pY2h0IGdsZWljaHplaXRpZyBQZmFkZSBha3R1YWxpc2llcmVuIHVuZCB6dSBCcmFuY2ggJyVzJyB3ZWNoc2VsbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgIldlZGVyICclcycgbm9jaCAnJXMnIGlzdCBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgIiclcycga2FubiBudXIgZ2VudXR6dCB3ZXJkZW4sIHdlbm4gJyVzJyBuaWNodCB2ZXJ3ZW5kZXQgd2lyZCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NSBidWlsdGluL2NoZWNrb3V0LmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIG9kZXIgJyVzJyBrYW5uIG5pY2h0IG1pdCAlcyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICJQZmFkICclcycgaXN0IG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgyIGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6ODIKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiU2llIG3DvHNzZW4genVlcnN0IGRpZSBLb25mbGlrdGUgaW4gSWhyZW0gYWt0dWVsbGVuIEluZGV4IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJLYW5uIG5pY2h0IG1pdCB2b3JnZW1lcmt0ZW4gw4RuZGVydW5nZW4gaW4gZm9sZ2VuZGVuIERhdGVpZW4gZm9ydHNldHplbjpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiS2FubiBcInJlZmxvZ1wiIGbDvHIgJyVzJyBuaWNodCBkdXJjaGbDvGhyZW46ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzcKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBpc3QgamV0enQgYmVpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgxIGJ1aWx0aW4vY2xvbmUuYzo3MTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgIktvbm50ZSBIRUFEIG5pY2h0IGFrdHVhbGlzaWVyZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlNldHplIEJyYW5jaCAnJXMnIG5ldVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJCZXJlaXRzIGF1ZiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlp1IHVtZ2VzZXR6dGVtIEJyYW5jaCAnJXMnIGdld2VjaHNlbHRcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NCBidWlsdGluL2NoZWNrb3V0LmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJadSBuZXVlbSBCcmFuY2ggJyVzJyBnZXdlY2hzZWx0XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiWnUgQnJhbmNoICclcycgZ2V3ZWNoc2VsdFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gdW5kICVkIHdlaXRlcmUuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJXYXJudW5nOiBTaWUgbGFzc2VuICVkIENvbW1pdCB6dXLDvGNrLiBGb2xnZW5kZXIgQ29tbWl0IGlzdCBpblxuIgorImtlaW5lbSBJaHJlciBCcmFuY2hlcyBlbnRoYWx0ZW46XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIldhcm51bmc6IFNpZSBsYXNzZW4gJWQgQ29tbWl0cyB6dXLDvGNrLiBGb2xnZW5kZSBDb21taXRzIHNpbmQgaW5cbiIKKyJrZWluZW0gSWhyZXIgQnJhbmNoZXMgZW50aGFsdGVuOlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisiV2VubiBTaWUgZGllc2UgZHVyY2ggZWluZW4gbmV1ZW4gQnJhbmNoIGJlaGFsdGVuIG3DtmNodGVuLCBkYW5uIGvDtm5udGUgamV0enRcbiIKKyJlaW4gZ3V0ZXIgWmVpdHB1bmt0IHNlaW4sIGRpZXMgenUgdHVuIG1pdDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV1ZXItQnJhbmNobmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIldlbm4gU2llIGRpZXNlIGR1cmNoIGVpbmVuIG5ldWVuIEJyYW5jaCBiZWhhbHRlbiBtw7ZjaHRlbiwgZGFubiBrw7ZubnRlIGpldHp0XG4iCisiZWluIGd1dGVyIFplaXRwdW5rdCBzZWluLCBkaWVzIHp1IHR1biBtaXQ6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldWVyLUJyYW5jaG5hbWU+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiaW50ZXJuZXIgRmVobGVyIGltIFJldmlzaW9uc2dhbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDExCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIlZvcmhlcmlnZSBQb3NpdGlvbiB2b24gSEVBRCB3YXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg2Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiU2llIHNpbmQgYXVmIGVpbmVtIEJyYW5jaCwgZGVyIG5vY2ggbmljaHQgZ2Vib3JlbiBpc3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc4Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkIgorbXNnc3RyICJudXIgZWluZSBSZWZlcmVueiBlcndhcnRldCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgIm51ciBlaW5lIFJlZmVyZW56IGVyd2FydGV0LCAlZCBnZWdlYmVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY291bGQgYmUgYm90aCBhIGxvY2FsIGZpbGUgYW5kIGEgdHJhY2tpbmcgYnJhbmNoLlxuIgorIlBsZWFzZSB1c2UgLS0gKGFuZCBvcHRpb25hbGx5IC0tbm8tZ3Vlc3MpIHRvIGRpc2FtYmlndWF0ZSIKK21zZ3N0ciAiIgorIiclcycga8O2bm50ZSBlaW5lIGxva2FsZSBEYXRlaSB1bmQgZWluIFRyYWNraW5nLUJyYW5jaCBzZWluLlxuIgorIkJpdHRlIGJlbnV0emVuIFNpZSAtLSAodW5kIG9wdGlvbmFsIC0tbm8tZ3Vlc3MpLCB1bSBkaWVzZVxuIgorImVpbmRldXRpZyB2b25laW5hbmRlciB6dSB1bnRlcnNjaGVpZGVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDUgYnVpbHRpbi93b3JrdHJlZS5jOjI5MCBidWlsdGluL3dvcmt0cmVlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuejogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjU4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiUmVmZXJlbnogaXN0IGtlaW4gXCJUcmVlXCItT2JqZWt0OiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAiRWluIEJyYW5jaCB3aXJkIGVyd2FydGV0LCBUYWcgJyVzJyBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgIkVpbiBCcmFuY2ggd2lyZCBlcndhcnRldCwgUmVtb3RlLUJyYW5jaCAnJXMnIGJla29tbWVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwOCBidWlsdGluL2NoZWNrb3V0LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciCittc2dzdHIgIkVpbiBCcmFuY2ggd2lyZCBlcndhcnRldCwgJyVzJyBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAiRWluIEJyYW5jaCB3aXJkIGVyd2FydGV0LCBDb21taXQgJyVzJyBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMjcKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIkRlciBCcmFuY2gga2FubiBuaWNodCB3w6RocmVuZCBlaW5lcyBNZXJnZXMgZ2V3ZWNoc2VsdCB3ZXJkZW4uXG4iCisiWmllaGVuIFNpZSBcImdpdCBtZXJnZSAtLXF1aXRcIiBvZGVyIFwiZ2l0IHdvcmt0cmVlIGFkZFwiIGluIEJldHJhY2h0LiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzEKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uXG4iCisiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiRGVyIEJyYW5jaCBrYW5uIG5pY2h0IHfDpGhyZW5kIGVpbmVzIGxhdWZlbmRlbiAnYW0nLUJlZmVobHMgZ2V3ZWNoc2VsdCAiCisid2VyZGVuLlxuIgorIlppZWhlbiBTaWUgXCJnaXQgYW0gLS1xdWl0XCIgb2RlciBcImdpdCB3b3JrdHJlZSBhZGRcIiBpbiBCZXRyYWNodC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM1Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJlYmFzaW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmViYXNlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIkRlciBCcmFuY2gga2FubiBuaWNodCB3w6RocmVuZCBlaW5lcyBsYXVmZW5kZW4gJ3JldmVydCctQmVmZWhscyBnZXdlY2hzZWx0ICIKKyJ3ZXJkZW4uXG4iCisiWmllaGVuIFNpZSBcImdpdCByZWJhc2UgLS1xdWl0XCIgb2RlciBcImdpdCB3b3JrdHJlZSBhZGRcIiBpbiBCZXRyYWNodC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM5Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiRGVyIEJyYW5jaCBrYW5uIG5pY2h0IHfDpGhyZW5kIGVpbmVzIGxhdWZlbmRlbiAnY2hlcnJ5LXBpY2snLUJlZmVobHMgIgorImdld2VjaHNlbHQgd2VyZGVuLlxuIgorIlppZWhlbiBTaWUgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb2RlciBcImdpdCB3b3JrdHJlZSBhZGRcIiBpbiBCZXRyYWNodC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQzCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJEZXIgQnJhbmNoIGthbm4gbmljaHQgd8OkaHJlbmQgZWluZXMgbGF1ZmVuZGVuICdyZXZlcnQnLUJlZmVobHMgZ2V3ZWNoc2VsdCAiCisid2VyZGVuLlxuIgorIlppZWhlbiBTaWUgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9kZXIgXCJnaXQgd29ya3RyZWUgYWRkXCIgaW4gQmV0cmFjaHQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0NworbXNnaWQgInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciCittc2dzdHIgIlNpZSB3ZWNoc2VsbiBkZW4gQnJhbmNoIHfDpGhyZW5kIGVpbmVyIGJpbsOkcmVuIFN1Y2hlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJQZmFkZSBrw7ZubmVuIG5pY2h0IGJlaW0gV2VjaHNlbG4gdm9uIEJyYW5jaGVzIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycga2FubiBuaWNodCBiZWltIFdlY2hzZWxuIHZvbiBCcmFuY2hlcyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OSBidWlsdGluL2NoZWNrb3V0LmM6MTM3MiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjEzODAgYnVpbHRpbi9jaGVja291dC5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycga2FubiBuaWNodCBtaXQgJyVzJyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIiclcycga2FubiBuaWNodCA8U3RhcnRwdW5rdD4gYmVrb21tZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJLYW5uIEJyYW5jaCBuaWNodCB6dSBOaWNodC1Db21taXQgJyVzJyB3ZWNoc2VsbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTcKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBvciBjb21taXQgYXJndW1lbnQiCittc2dzdHIgIkJyYW5jaC0gb2RlciBDb21taXQtQXJndW1lbnQgZmVobHQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM5IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMyBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODUKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjEzOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJGb3J0c2Nocml0dHNhbnplaWdlIGVyendpbmdlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDAKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZWluZW4gMy1XZWdlLU1lcmdlIG1pdCBkZW0gbmV1ZW4gQnJhbmNoIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQxIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgIlN0aWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQyCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAiS29uZmxpa3RzdGlsIChtZXJnZSBvZGVyIGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTQgYnVpbHRpbi93b3JrdHJlZS5jOjUwMworbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiSEVBRCBiZWkgYmVuYW5udGVtIENvbW1pdCBsb3Nsw7ZzZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU1Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIkluZm9ybWF0aW9uZW4genVtIFVwc3RyZWFtLUJyYW5jaCBmw7xyIGRlbiBuZXVlbiBCcmFuY2ggc2V0emVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NworbXNnaWQgImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIgorbXNnc3RyICJBdXNjaGVja2VuIGVyendpbmdlbiAodmVyd2lyZnQgbG9rYWxlIMOEbmRlcnVuZ2VuKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJuZXVlciBCcmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU5Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJuZXVlciBCcmFuY2ggb2huZSBFbHRlcm4tQ29tbWl0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2MSBidWlsdGluL21lcmdlLmM6Mjg4Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJpZ25vcmllcnRlIERhdGVpZW4gYWt0dWFsaXNpZXJlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2NAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAiIgorIlByw7xmdW5nLCBvYiBkaWUgUmVmZXJlbnogYmVyZWl0cyBpbiBlaW5lbSBhbmRlcmVuIEFyYmVpdHN2ZXJ6ZWljaG5pcyAiCisiYXVzZ2VjaGVja3Qgd3VyZGUsIGRlYWt0aXZpZXJlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzcKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgInVuc2VyZSBWYXJpYW50ZSBmw7xyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODAKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiaWhyZSBWYXJpYW50ZSBmw7xyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODQKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgImtlaW5lIEVpbnNjaHLDpG5rdW5nIGJlaSBQZmFkc3BlemlmaWthdGlvbmVuIHp1bSBwYXJ0aWVsbGVuIEF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTM3Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLWIsIC1CIHVuZCAtLW9ycGhhbiBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NDAKK21zZ2lkICItcCBhbmQgLS1vdmVybGF5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1wIHVuZCAtLW92ZXJsYXkgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTc3Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICJCZWkgZGVyIE9wdGlvbiAtLXRyYWNrIG11c3MgZWluIEJyYW5jaG5hbWUgYW5nZWdlYmVuIHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTgyCittc2dpZCAibWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIgorbXNnc3RyICJLZWluIEJyYW5jaG5hbWU7IHZlcnN1Y2hlbiBTaWUgLWIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjMxCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgInVuZ8O8bHRpZ2UgUGZhZHNwZXppZmlrYXRpb24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKyInJXMnIGlzdCBrZWluIENvbW1pdCB1bmQgZXMga2FubiBrZWluIEJyYW5jaCAnJXMnIGF1cyBkaWVzZW0gZXJzdGVsbHQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIG5pbW10IGtlaW4gUGZhZC1Bcmd1bWVudCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1wYXRoc3BlYy1mcm9tLWZpbGUgdW5kIC0tZGV0YWNoIHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NTQgYnVpbHRpbi9yZXNldC5jOjMyNAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLXBhdGhzcGVjLWZyb20tZmlsZSB1bmQgLS1wYXRjaCBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1Cittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgdW5kIC0tbWVyZ2Ugc2luZCBpbmtvbXBhdGliZWwgd2VublxuIgorIlNpZSBhdXMgZGVtIEluZGV4IGF1c2NoZWNrZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY3MAorbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICJTaWUgbcO8c3NlbiBQZmFkKGUpIHp1ciBXaWVkZXJoZXJzdGVsbHVuZyBhbmdlYmVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIHJlbW90ZSB0cmFja2luZyBicmFuY2guXG4iCisiV2UgZm91bmQgJWQgcmVtb3RlcyB3aXRoIGEgcmVmZXJlbmNlIHRoYXQgbWF0Y2hlZC4gU28gd2UgZmVsbCBiYWNrXG4iCisib24gdHJ5aW5nIHRvIHJlc29sdmUgdGhlIGFyZ3VtZW50IGFzIGEgcGF0aCwgYnV0IGZhaWxlZCB0aGVyZSB0b28hXG4iCisiXG4iCisiSWYgeW91IG1lYW50IHRvIGNoZWNrIG91dCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggb24sIGUuZy4gJ29yaWdpbicsXG4iCisieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5hbWU+XG4iCisiXG4iCisiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKyJvbmUgcmVtb3RlLCBlLmcuIHRoZSAnb3JpZ2luJyByZW1vdGUsIGNvbnNpZGVyIHNldHRpbmdcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iCittc2dzdHIgIiIKKyInJXMnIGVudHNwcmljaHQgbWVociBhbHMgZWluZW0gUmVtb3RlLVRyYWNraW5nLUJyYW5jaC5cbiIKKyJXaXIgZmFuZGVuICVkIFJlbW90ZS1SZXBvc2l0b3JpZXMgbWl0IGVpbmVyIGVudHNwcmVjaGVuZGVuIFJlZmVyZW56LCBhbHNvXG4iCisiaGFiZW4gd2lyIHZlcnN1Y2h0LCBkYXMgQXJndW1lbnQgYWxzIFBmYWQgYXVmenVsw7ZzZW4sIHdhcyBhdWNoIHNjaGllZiBnaW5nIVxuIgorIlxuIgorIkZhbGxzIFNpZSBlaW5lbiBSZW1vdGUtVHJhY2tpbmctQnJhbmNoLCB6LkIuIHZvbiAnb3JpZ2luJywgYXVzY2hlY2tlbiAiCisid29sbHRlbixcbiIKKyJrw7ZubmVuIFNpZSBkYXMgdHVuLCBpbmRlbSBTaWUgZGVuIHZvbGxzdMOkbmRpZyBxdWFsaWZpemllcnRlbiBOYW1lbiBtaXQgZGVyXG4iCisiLS10cmFjayBPcHRpb24gYW5nZWJlbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxOYW1lPlxuIgorIlxuIgorIkZhbGxzIFNpZSBiZWltIEF1c2NoZWNrZW4gbWl0IG1laHJkZXV0aWdlbiA8TmFtZW4+IGltbWVyIGVpbiBSZW1vdGUtIgorIlJlcG9zaXRvcnlcbiIKKyJiZXZvcnp1Z2VuIG3DtmNodGVuLCB6LkIuICdvcmlnaW4nLCBrw7ZubnRlbiBTaWUgZGllIEVpbnN0ZWxsdW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4gSWhyZXIgS29uZmlndXJhdGlvbiBzZXR6ZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNCBidWlsdGluL2NoZWNrb3V0LmM6MTcxNiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NQorIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjcgYnVpbHRpbi9jbG9uZS5jOjEyMSBidWlsdGluL3JlbW90ZS5jOjE2OQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEgYnVpbHRpbi93b3JrdHJlZS5jOjQ5OSBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAiYnJhbmNoIgorbXNnc3RyICJCcmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgImVpbmVuIG5ldWVuIEJyYW5jaCBlcnpldWdlbiB1bmQgYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICJlaW5lbiBCcmFuY2ggZXJzdGVsbGVuL3Vtc2V0emVuIHVuZCBhdXNjaGVja2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxOAorbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgImRhcyBSZWZsb2cgZsO8ciBkZW4gbmV1ZW4gQnJhbmNoIGVyemV1Z2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMAorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIKK21zZ3N0ciAiWndlaXRlIFZlcm11dHVuZyAnZ2l0IGNoZWNrb3V0IDxrZWluLXNvbGNoZXItQnJhbmNoPicgKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjEKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIKK21zZ3N0ciAiYmVudXR6ZSBPdmVybGF5LU1vZHVzIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY2Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJlaW5lbiBuZXVlbiBCcmFuY2ggZXJ6ZXVnZW4gdW5kIGRhaGluIHdlY2hzZWxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc2OAorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgc3dpdGNoIHRvIGEgYnJhbmNoIgorbXNnc3RyICJlaW5lbiBCcmFuY2ggZXJzdGVsbGVuL3Vtc2V0emVuIHVuZCBkYWhpbiB3ZWNoc2VsbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIlp3ZWl0ZSBWZXJtdXR1bmcgJ2dpdCBzd2l0Y2ggPGtlaW4tc29sY2hlci1CcmFuY2g+JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzIKK21zZ2lkICJ0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgImxva2FsZSDDhG5kZXJ1bmdlbiB2ZXJ3ZXJmZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA0Cittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAiVm9uIHdlbGNoZXIgQ29tbWl0LVJlZmVyZW56IGF1c2dlY2hlY2t0IHdlcmRlbiBzb2xsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgwNgorbXNnaWQgInJlc3RvcmUgdGhlIGluZGV4IgorbXNnc3RyICJJbmRleCB3aWVkZXJoZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgwOAorbXNnaWQgInJlc3RvcmUgdGhlIHdvcmtpbmcgdHJlZSAoZGVmYXVsdCkiCittc2dzdHIgImRhcyBBcmJlaXRzdmVyemVpY2huaXMgd2llZGVyaGVyc3RlbGxlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMAorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJpZ25vcmllcmUgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRWludHLDpGdlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMQorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUiCittc2dzdHIgImJlbnV0emUgT3ZlcmxheS1Nb2R1cyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI4Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxNdXN0ZXI+XSBbLXggfCAtWF0gWy0tXSA8UGZhZGU+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiTMO2c2NoZSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIlfDvHJkZSAlcyBsw7ZzY2hlblxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLDnGJlcnNwcmluZ2UgUmVwb3NpdG9yeSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIlfDvHJkZSBSZXBvc2l0b3J5ICVzIMO8YmVyc3ByaW5nZW5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEzDtnNjaGVuIHZvbiAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICJLb25udGUgJ2xzdGF0JyBuaWNodCBmw7xyICVzIGF1c2bDvGhyZW5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyJFaW5nYWJlaGlsZmU6XG4iCisiMSAgICAgICAgICAtIG51bW1lcmllcnRlcyBFbGVtZW50IGF1c3fDpGhsZW5cbiIKKyJmb28gICAgICAgIC0gRWxlbWVudCBhbmhhbmQgZWluZXMgZWluZGV1dGlnZW4gUHLDpGZpeCBhdXN3w6RobGVuXG4iCisiICAgICAgICAgICAtIChsZWVyKSBuaWNodHMgYXVzd8OkaGxlblxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisiRWluZ2FiZWhpbGZlOlxuIgorIjEgICAgICAgICAgLSBlaW56ZWxuZXMgRWxlbWVudCBhdXN3w6RobGVuXG4iCisiMy01ICAgICAgICAtIEJlcmVpY2ggdm9uIEVsZW1lbnRlbiBhdXN3w6RobGVuXG4iCisiMi0zLDYtOSAgICAtIG1laHJlcmUgQmVyZWljaGUgYXVzd8OkaGxlblxuIgorImZvbyAgICAgICAgLSBFbGVtZW50IGFuaGFuZCBlaW5lcyBlaW5kZXV0aWdlbiBQcsOkZml4IGF1c3fDpGhsZW5cbiIKKyItLi4uICAgICAgIC0gYW5nZWdlYmVuZXMgRWxlbWVudCBhYnfDpGhsZW5cbiIKKyIqICAgICAgICAgIC0gYWxsZSBFbGVtZW50ZSBhdXN3w6RobGVuXG4iCisiICAgICAgICAgICAtIChsZWVyKSBBdXN3YWhsIGJlZW5kZW5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICJXaWUgYml0dGUgKCVzKT9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIklnbm9yaWVyLU11c3RlciBlaW5nZWJlbj4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiV0FSTlVORzogS2FubiBrZWluZSBFaW50csOkZ2UgZmluZGVuIGRpZSBNdXN0ZXIgZW50c3ByZWNoZW46ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiV8OkaGxlbiBTaWUgRWludHLDpGdlIHp1bSBMw7ZzY2hlbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICInJXMnIGzDtnNjaGVuIFt5L05dPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBDbGVhbiBzdGFydGVuXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIEVpbnRyw6RnZSB2b24gTMO2c2NodW5nIGF1c3NjaGxpZcOfZW5cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gQXVzd2FobCB2b24gRWludHLDpGdlbiDDvGJlciBOdW1tZXJuXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGplZGUgTMO2c2NodW5nIGJlc3TDpHRpZ2VuICh3aWUgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBDbGVhbiBiZWVuZGVuXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIGRpZXNlIE1lbGR1bmcgYW56ZWlnZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gSGlsZmUgenVyIEF1c3dhaGwgbWl0dGVscyBFaW5nYWJlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiV8O8cmRlIGRhcyBmb2xnZW5kZSBFbGVtZW50IGVudGZlcm5lbjoiCittc2dzdHJbMV0gIlfDvHJkZSBkaWUgZm9sZ2VuZGVuIEVsZW1lbnRlIGVudGZlcm5lbjoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiS2VpbmUgRGF0ZWllbiBtZWhyIHp1bSBMw7ZzY2hlbiwgYmVlbmRlLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJrZWluZSBOYW1lbiB2b24gZ2Vsw7ZzY2h0ZW4gRGF0ZWllbiBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICJBa3Rpb24gZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgImludGVyYWt0aXZlcyBDbGVhbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAiZ2FuemUgVmVyemVpY2huaXNzZSBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNSBidWlsdGluL2Rlc2NyaWJlLmM6NTQ4IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTAKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMSBidWlsdGluL2xvZy5jOjE3NyBidWlsdGluL2xvZy5jOjE3OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NyBidWlsdGluL25hbWUtcmV2LmM6NDY0IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjYKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICJNdXN0ZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTYKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiPE11c3Rlcj4genUgZGVuIFJlZ2VsbiBmw7xyIGlnbm9yaWVydGUgUGZhZGUgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICJhdWNoIGlnbm9yaWVydGUgRGF0ZWllbiBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIm51ciBpZ25vcmllcnRlIERhdGVpZW4gbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIkRpZSBPcHRpb25lbiAteCB1bmQgLVgga8O2bm5lbiBuaWNodCBnZW1laW5zYW0gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgYXVmIFwidHJ1ZVwiIGdlc2V0enQgdW5kIHdlZGVyIC1pLCAtbiBub2NoIC1mIGdlZ2ViZW47ICIKKyJcImNsZWFuXCIgdmVyd2VpZ2VydCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHN0YW5kYXJkbcOkw59pZyBhdWYgXCJ0cnVlXCIgZ2VzZXR6dCB1bmQgd2VkZXIgLWksIC1uIG5vY2ggLSIKKyJmIGdlZ2ViZW47IFwiY2xlYW5cIiB2ZXJ3ZWlnZXJ0IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8T3B0aW9uZW4+XSBbLS1dIDxSZXBvc2l0b3J5PiBbPFZlcnplaWNobmlzPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJrZWluIEF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJlaW4gQmFyZS1SZXBvc2l0b3J5IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgImVpbiBTcGllZ2VsYXJjaGl2IGVyc3RlbGxlbiAoaW1wbGl6aWVydCAtLWJhcmUpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgInZvbiBlaW5lbSBsb2thbGVuIFJlcG9zaXRvcnkga2xvbmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgImxva2FsIGtlaW5lIGhhcnRlbiBWZXJ3ZWlzZSB2ZXJ3ZW5kZW4sIGltbWVyIEtvcGllbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJhbHMgdmVydGVpbHRlcyBSZXBvc2l0b3J5IGVpbnJpY2h0ZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAiUGZhZHNwZXppZmlrYXRpb24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJTdWJtb2R1bGUgaW0gS2xvbiBpbml0aWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAiQW56YWhsIGRlciBwYXJhbGxlbCB6dSBrbG9uZW5kZW4gU3VibW9kdWxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NgorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAiVm9ybGFnZW52ZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJWZXJ6ZWljaG5pcywgdm9uIHdlbGNoZW0gZGllIFZvcmxhZ2VuIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQgYnVpbHRpbi9jbG9uZS5jOjExNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODUKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVwb3NpdG9yeSByZWZlcmVuemllcmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk0CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NworbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgIi0tcmVmZXJlbmNlIG51ciB3w6RocmVuZCBkZXMgS2xvbmVucyBiZW51dHplbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTQgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICJOYW1lIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIwCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICI8TmFtZT4gc3RhdHQgJ29yaWdpbicgZsO8ciBVcHN0cmVhbS1SZXBvc2l0b3J5IHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgIjxCcmFuY2g+IGF1c2NoZWNrZW4sIGFuc3RhdHQgSEVBRCBkZXMgUmVtb3RlLVJlcG9zaXRvcmllcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgIlBmYWQgenUgXCJnaXQtdXBsb2FkLXBhY2tcIiBhdWYgZGVyIEdlZ2Vuc2VpdGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4NDAKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyNworbXNnaWQgImRlcHRoIgorbXNnc3RyICJUaWVmZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiIgorImVpbmVuIEtsb24gbWl0IHVudm9sbHN0w6RuZGlnZXIgSGlzdG9yaWUgKHNoYWxsb3cpIGluIGRpZXNlciBUaWVmZSBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjcgYnVpbHRpbi9mZXRjaC5jOjE3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODMKK21zZ2lkICJ0aW1lIgorbXNnc3RyICJaZWl0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgIiIKKyJlaW5lbiBLbG9uIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSBzZWl0IGVpbmVyIGJlc3RpbW10ZW4gIgorIlplaXRcbiIKKyJlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjkgYnVpbHRpbi9mZXRjaC5jOjE3MiBidWlsdGluL2ZldGNoLmM6MTk1CisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDUKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAiQ29tbWl0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMwIGJ1aWx0aW4vZmV0Y2guYzoxNzMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICIiCisiZGllIEhpc3RvcmllIGVpbmVzIEtsb25zIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSBtaXR0ZWxzXG4iCisiQXVzc2NobHVzcyBlaW5lcyBDb21taXRzIHZlcnRpZWZlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMgorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAibnVyIGVpbmVuIEJyYW5jaCBrbG9uZW4sIEhFQUQgb2RlciAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAia2VpbmUgVGFncyBrbG9uZW4sIHVuZCBhdWNoIGJlaSBzcMOkdGVyZW4gQWJydWZlbiBuaWNodCBiZWFjaHRlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgImplZGVzIGdla2xvbnRlIFN1Ym1vZHVsIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNyBidWlsdGluL2luaXQtZGIuYzo0OTUKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgIi5naXQtVmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzggYnVpbHRpbi9pbml0LWRiLmM6NDk2Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiR2l0LVZlcnplaWNobmlzIHZvbSBBcmJlaXRzdmVyemVpY2huaXMgc2VwYXJpZXJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiU2NobMO8c3NlbD1XZXJ0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwCittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICJLb25maWd1cmF0aW9uIGlubmVyaGFsYiBkZXMgbmV1ZW4gUmVwb3NpdG9yaWVzIHNldHplbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAic2VydmVyc3BlemlmaXNjaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAiT3B0aW9uIMO8YmVydHJhZ2VuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQzIGJ1aWx0aW4vZmV0Y2guYzoxOTEgYnVpbHRpbi9wdWxsLmM6MjQwCisjOiBidWlsdGluL3B1c2guYzo1NzQKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAibnVyIElQdjQtQWRyZXNzZW4gYmVudXR6ZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDUgYnVpbHRpbi9mZXRjaC5jOjE5MyBidWlsdGluL3B1bGwuYzoyNDMKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NgorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJudXIgSVB2Ni1BZHJlc3NlbiBiZW51dHplbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0OQorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJqZWRlcyBnZWtsb250ZSBTdWJtb2R1bCBudXR6dCBzZWluZW4gUmVtb3RlLVRyYWNraW5nLUJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIiIKKyJJbml0aWFsaXNpZXJlIERhdGVpIGbDvHIgcGFydGllbGxlbiBDaGVja291dCwgdW0gbnVyIERhdGVpZW4gaW1cbiIKKyJSb290LVZlcnplaWNobmlzIGVpbnp1YmV6aWVoZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyODcKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisiS29ubnRlIGtlaW5lbiBWZXJ6ZWljaG5pc25hbWVuIGVycmF0ZW4uXG4iCisiQml0dGUgZ2ViZW4gU2llIGVpbiBWZXJ6ZWljaG5pcyBhdWYgZGVyIEJlZmVobHN6ZWlsZSBhbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgImluZm86IEtvbm50ZSBBbHRlcm5hdGl2ZSBmw7xyICclcycgbmljaHQgaGluenVmw7xnZW46ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGV4aXN0aWVydCB1bmQgaXN0IGtlaW4gVmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXJ0IGl0ZXJhdG9yIG92ZXIgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU3RhcnRlbiBkZXIgSXRlcmF0aW9uIMO8YmVyICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIktvbm50ZSBWZXJ3ZWlzICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlIERhdGVpIG5pY2h0IG5hY2ggJyVzJyBrb3BpZXJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEl0ZXJpZXJlbiDDvGJlciAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgIkZlcnRpZy5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjUwOAorbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHdpdGggJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iCittc2dzdHIgIiIKKyJLbG9uZW4gZXJmb2xncmVpY2gsIEF1c2NoZWNrZW4gaXN0IGFiZXIgZmVobGdlc2NobGFnZW4uXG4iCisiU2llIGvDtm5uZW4gbWl0ICdnaXQgc3RhdHVzJyBwcsO8ZmVuLCB3YXMgYXVzZ2VjaGVja3Qgd29yZGVuIGlzdFxuIgorInVuZCBkYXMgQXVzY2hlY2tlbiBtaXQgJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nIGVybmV1dCB2ZXJzdWNoZW4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIktvbm50ZSB6dSBrbG9uZW5kZW4gUmVtb3RlLUJyYW5jaCAlcyBuaWNodCBmaW5kZW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgImthbm4gJXMgbmljaHQgYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1MgorbXNnaWQgImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSW5pdGlhbGlzaWVyZW4gdm9tIHBhcnRpZWxsZW4gQ2hlY2tvdXQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzc1Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisiRXh0ZXJuZXIgSEVBRCBiZXppZWh0IHNpY2ggYXVmIGVpbmUgbmljaHQgZXhpc3RpZXJlbmRlIFJlZmVyZW56IHVuZCBrYW5uICIKKyJuaWNodCBhdXNnZWNoZWNrdCB3ZXJkZW4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDYKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMga29ubnRlIG5pY2h0IGF1c2dlY2hlY2t0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg1NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICJrb25udGUgUGFyYW1ldGVyIG5pY2h0IGluIEtvbmZpZ3VyYXRpb25zZGF0ZWkgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTE5Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAiS2FubiBcInJlcGFja1wiIHp1bSBBdWZyw6R1bWVuIG5pY2h0IGF1ZnJ1ZmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIxCittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJLYW5uIHRlbXBvcsOkcmUgXCJhbHRlcm5hdGVzXCItRGF0ZWkgbmljaHQgZW50ZmVybmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU5IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk0OAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIlp1IHZpZWxlIEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjMKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIlNpZSBtw7xzc2VuIGVpbiBSZXBvc2l0b3J5IHp1bSBLbG9uZW4gYW5nZWJlbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1iYXJlIHVuZCAtLW9yaWdpbiAlcyBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzkKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tYmFyZSB1bmQgLS1zZXBhcmF0ZS1naXQtZGlyIHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlJlcG9zaXRvcnkgJyVzJyBleGlzdGllcnQgbmljaHQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4IGJ1aWx0aW4vZmV0Y2guYzoxNzg3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiVGllZmUgJXMgaXN0IGtlaW5lIHBvc2l0aXZlIFphaGwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIlppZWxwZmFkICclcycgZXhpc3RpZXJ0IGJlcmVpdHMgdW5kIGlzdCBrZWluIGxlZXJlcyBWZXJ6ZWljaG5pcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQXJiZWl0c3ZlcnplaWNobmlzICclcycgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzMyBidWlsdGluL2Nsb25lLmM6MTA1NCBidWlsdGluL2RpZmZ0b29sLmM6MjcxCisjOiBidWlsdGluL2xvZy5jOjE4NjYgYnVpbHRpbi93b3JrdHJlZS5jOjMwMiBidWlsdGluL3dvcmt0cmVlLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJLb25udGUgZsO8aHJlbmRlIFZlcnplaWNobmlzc2Ugdm9uICclcycgbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIktvbm50ZSBBcmJlaXRzdmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJLbG9uZSBpbiBCYXJlLVJlcG9zaXRvcnkgJyVzJyAuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiS2xvbmUgbmFjaCAnJXMnIC4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA4NAorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiJ2Nsb25lIC0tcmVjdXJzaXZlJyBpc3QgbmljaHQga29tcGF0aWJlbCBtaXQgLS1yZWZlcmVuY2UgdW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0OAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLWRlcHRoIHdpcmQgaW4gbG9rYWxlbiBLbG9uZW4gaWdub3JpZXJ0OyBiZW51dHplbiBTaWUgIgorInN0YXR0ZGVzc2VuIGZpbGU6Ly8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUwCittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1zaW5jZSB3aXJkIGluIGxva2FsZW4gS2xvbmVuIGlnbm9yaWVydDsgYmVudXR6ZW4gU2llIHN0YXR0ZGVzc2VuICIKKyJmaWxlOi8vIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MgorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1leGNsdWRlIHdpcmQgaW4gbG9rYWxlbiBLbG9uZW4gaWdub3JpZXJ0OyBiZW51dHplbiBTaWUgc3RhdHRkZXNzZW4gIgorImZpbGU6Ly8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU0Cittc2dpZCAiLS1maWx0ZXIgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1maWx0ZXIgd2lyZCBpbiBsb2thbGVuIEtsb25lbiBpZ25vcmllcnQ7IGJlbnV0emVuIFNpZSBzdGF0dGRlc3NlbiBmaWxlOi8vIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NworbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgIiIKKyJRdWVsbGUgaXN0IGVpbiBSZXBvc2l0b3J5IG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSxcbiIKKyJpZ25vcmllcmUgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjIKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgd2lyZCBpZ25vcmllcnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjM3IGJ1aWx0aW4vY2xvbmUuYzoxMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW90ZSBicmFuY2ggJXMgbm90IGZvdW5kIGluIHVwc3RyZWFtICVzIgorbXNnc3RyICJSZW1vdGUtQnJhbmNoICVzIG5pY2h0IGltIFVwc3RyZWFtLVJlcG9zaXRvcnkgJXMgZ2VmdW5kZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQ4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiU2llIHNjaGVpbmVuIGVpbiBsZWVyZXMgUmVwb3NpdG9yeSBnZWtsb250IHp1IGhhYmVuLiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoxMAorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJLb25maWd1cmF0aW9uc3ZhcmlhYmxlbiBuYWNoc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgInp1IHZlcndlbmRlbmRlIEFub3JkbnVuZyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIm1heGltYWxlIEJyZWl0ZSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIkFic3RhbmQgenVtIGxpbmtlbiBSYW5kIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIkFic3RhbmQgenVtIHJlY2h0ZW4gUmFuZCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJBYnN0YW5kIHp3aXNjaGVuIFNwYWx0ZW4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIkRpZSBPcHRpb24gLS1jb21tYW5kIG11c3MgYW4gZXJzdGVyIFN0ZWxsZSBzdGVoZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPEVsdGVybi1Db21taXQ+KS4uLl0gWy1TWzxLZXktSUQ+XV0gWygtbSAiCisiPE5hY2hyaWNodD4pLi4uXSBbKC1GIDxEYXRlaT4pLi4uXSA8VHJlZS1PYmpla3Q+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICJkb3BwZWx0ZXIgVm9yZ8OkbmdlciAlcyBpZ25vcmllcnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJLZWluIGfDvGx0aWdlciBPYmpla3RuYW1lOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IEZlaGxlciBiZWltIExlc2VuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICJFbHRlcm4tQ29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTEyCittc2dpZCAiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiSUQgZWluZXMgRWx0ZXJuLUNvbW1pdC1PYmpla3Rlcy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNDk2IGJ1aWx0aW4vbWVyZ2UuYzoyNzAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ2OQorIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJCZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNDk2Cittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIkNvbW1pdC1CZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIkNvbW1pdC1CZXNjaHJlaWJ1bmcgdm9uIERhdGVpIGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUwOCBidWlsdGluL21lcmdlLmM6Mjg3CisjOiBidWlsdGluL3B1bGwuYzoxOTUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkNvbW1pdCBtaXQgR1BHIHNpZ25pZXJlbiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzMworbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICJCcmF1Y2hlIGdlbmF1IGVpbiBUcmVlLU9iamVrdC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IEZlaGxlciBiZWltIExlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxPcHRpb25lbj5dIFstLV0gPFBmYWRzcGV6aWZpa2F0aW9uPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs8T3B0aW9uZW4+XSBbLS1dIDxQZmFkc3BlemlmaWthdGlvbj4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJTaWUgZnJhZ3RlbiBkZW4gasO8bmdzdGVuIENvbW1pdCBuYWNoenViZXNzZXJuLCBhYmVyIGRhcyB3w7xyZGUgZGllc2VuIGxlZXJcbiIKKyJtYWNoZW4uIFNpZSBrw7ZubmVuIElocmVuIEJlZmVobCBtaXQgLS1hbGxvdy1lbXB0eSB3aWVkZXJob2xlbiwgb2RlciBkaWVzZW5cbiIKKyJDb21taXQgbWl0IFwiZ2l0IHJlc2V0IEhFQUReXCIgdm9sbHN0w6RuZGlnIGVudGZlcm5lbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiRGVyIGxldHp0ZSBcImNoZXJyeS1waWNrXCIgaXN0IGpldHp0IGxlZXIsIG3DtmdsaWNoZXJ3ZWlzZSBkdXJjaCBlaW5lICIKKyJLb25mbGlrdGF1ZmzDtnN1bmcuXG4iCisiV2VubiBTaWUgZGllcyB0cm90emRlbSBjb21taXR0ZW4gd29sbGVuLCBiZW51dHplbiBTaWU6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJBbmRlcm5mYWxscyBiZW51dHplbiBTaWUgYml0dGUgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCittc2dzdHIgIiIKKyJVbmQgZGFubiBudXR6ZW4gU2llOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInVtIGRhcyBDaGVycnktUGlja2luZyBtaXQgZGVuIMO8YnJpZ2VuIENvbW1pdHMgZm9ydHp1c2V0emVuLlxuIgorIldlbm4gZGllc2VyIENvbW1pdCDDvGJlcnNwcnVuZ2VuIHdlcmRlbiBzb2xsLCBudXR6ZW4gU2llOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFbnRwYWNrZW4gZGVzIFRyZWUtT2JqZWt0ZXMgdm9uIEhFQUQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiT3B0aW9uIC0tcGF0aHNwZWMtZnJvbS1maWxlIG1pdCAtYSBpc3QgbmljaHQgc2lubnZvbGwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiS2VpbmUgUGZhZGUgbWl0IGRlciBPcHRpb24gLS1pbmNsdWRlLy0tb25seSBpc3QgbmljaHQgc2lubnZvbGwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3NgorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZW4gSW5kZXggbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozODIKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgSGluenVmw7xnZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzk2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIktvbm50ZSB0ZW1wb3LDpHJlbiBJbmRleCBuaWNodCBha3R1YWxpc2llcmVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiS29ubnRlIEhhdXB0LUNhY2hlLVZlcnplaWNobmlzIG5pY2h0IGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIzIGJ1aWx0aW4vY29tbWl0LmM6NDQ2IGJ1aWx0aW4vY29tbWl0LmM6NDkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgbmV3X2luZGV4IERhdGVpIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzUKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIkthbm4ga2VpbmVuIFRlaWwtQ29tbWl0IGR1cmNoZsO8aHJlbiwgd8OkaHJlbmQgZWluIE1lcmdlIGltIEdhbmdlIGlzdC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc3Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisiS2FubiBrZWluZW4gVGVpbC1Db21taXQgZHVyY2hmw7xocmVuLCB3w6RocmVuZCBcImNoZXJyeS1waWNrXCIgaW0gR2FuZ2UgaXN0LiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIkthbm4gSW5kZXggbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJDb21taXQgJyVzJyBmZWhsdCBBdXRvci1Lb3BmYmVyZWljaCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiQ29tbWl0ICclcycgaGF0IGZlaGxlcmhhZnRlIEF1dG9yLVplaWxlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyMworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIkZlaGxlcmhhZnRlciAtLWF1dGhvciBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njc2Cittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJLb25udGUga2VpbiBLb21tZW50YXItWmVpY2hlbiBhdXN3w6RobGVuLCBkYXMgbmljaHQgaW5cbiIKKyJkZXIgYWt0dWVsbGVuIENvbW1pdC1CZXNjaHJlaWJ1bmcgdmVyd2VuZGV0IHdpcmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxNCBidWlsdGluL2NvbW1pdC5jOjc0NyBidWlsdGluL2NvbW1pdC5jOjEwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIktvbm50ZSBDb21taXQgJXMgbmljaHQgbmFjaHNjaGxhZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyNiBidWlsdGluL3Nob3J0bG9nLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsZXNlIExvZy1OYWNocmljaHQgdm9uIFN0YW5kYXJkLUVpbmdhYmUpXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI4Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIktvbm50ZSBMb2cgbmljaHQgdm9uIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJLb25udGUgTG9nLURhdGVpICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzYzIGJ1aWx0aW4vY29tbWl0LmM6Nzc5Cittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAiS29ubnRlIFNRVUFTSF9NU0cgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzcwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJLb25udGUgTUVSR0VfTVNHIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIktvbm50ZSBDb21taXQtVm9ybGFnZSBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVzIHNpZWh0IHNvIGF1cywgYWxzIGNvbW1pdHRlbiBTaWUgZWluZW4gTWVyZ2UuXG4iCisiRmFsbHMgZGFzIG5pY2h0IGtvcnJla3QgaXN0LCBsw7ZzY2hlbiBTaWUgYml0dGUgZGllIERhdGVpXG4iCisiXHQlc1xuIgorInVuZCB2ZXJzdWNoZW4gU2llIGVzIGVybmV1dC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXMgc2llaHQgc28gYXVzLCBhbHMgY29tbWl0dGVuIFNpZSBlaW5lbiBcImNoZXJyeS1waWNrXCIuXG4iCisiRmFsbHMgZGFzIG5pY2h0IGtvcnJla3QgaXN0LCBsw7ZzY2hlbiBTaWUgYml0dGUgZGllIERhdGVpXG4iCisiXHQlc1xuIgorInVuZCB2ZXJzdWNoZW4gU2llIGVzIGVybmV1dC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkJpdHRlIGdlYmVuIFNpZSBlaW5lIENvbW1pdC1CZXNjaHJlaWJ1bmcgZsO8ciBJaHJlIMOEbmRlcnVuZ2VuIGVpbi4gWmVpbGVuLFxuIgorImRpZSBtaXQgJyVjJyBiZWdpbm5lbiwgd2VyZGVuIGlnbm9yaWVydCwgdW5kIGVpbmUgbGVlcmUgQmVzY2hyZWlidW5nXG4iCisiYnJpY2h0IGRlbiBDb21taXQgYWIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQml0dGUgZ2ViZW4gU2llIGVpbmUgQ29tbWl0LUJlc2NocmVpYnVuZyBmw7xyIElocmUgw4RuZGVydW5nZW4gZWluLiBaZWlsZW4sICIKKyJkaWVcbiIKKyJtaXQgJyVjJyBiZWdpbm5lbiwgd2VyZGVuIGJlaWJlaGFsdGVuOyB3ZW5uIFNpZSBtw7ZjaHRlbiwga8O2bm5lbiBTaWUgZGllc2UgIgorImVudGZlcm5lbi5cbiIKKyJFaW5lIGxlZXJlIEJlc2NocmVpYnVuZyBicmljaHQgZGVuIENvbW1pdCBhYi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0F1dG9yOiAgICAgICAgICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXR1bTogICAgICAgICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0NvbW1pdC1FcnN0ZWxsZXI6ICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkyNQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJLYW5uIEluZGV4IG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5MgorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXIgXCJUcmVlXCItT2JqZWt0ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDA2IGJ1aWx0aW4vdGFnLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIkJpdHRlIGxpZWZlcm4gU2llIGVpbmUgQmVzY2hyZWlidW5nIGVudHdlZGVyIG1pdCBkZXIgT3B0aW9uIC1tIG9kZXIgLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciAnJXMnIGlzdCBuaWNodCBpbSBGb3JtYXQgJ05hbWUgPEUtTWFpbD4nIHVuZCBzdGltbXQgbWl0IGtlaW5lbSAiCisidm9yaGFuZGVuZW4gQXV0b3Igw7xiZXJlaW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBpZ25vcmVkLU1vZHVzICclcycuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODIgYnVpbHRpbi9jb21taXQuYzoxMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgTW9kdXMgJyVzJyBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyMgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tbG9uZyB1bmQgLXogc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tcmVzZXQtYXV0aG9yIHVuZCAtLWF1dGhvciBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgIgorIndlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3NQorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICJTaWUgaGFiZW4gbmljaHRzIGbDvHIgXCItLWFtZW5kXCIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJFaW4gTWVyZ2UgaXN0IGltIEdhbmdlIC0tIGthbm4gXCItLWFtZW5kXCIgbmljaHQgYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIlwiY2hlcnJ5LXBpY2tcIiBpc3QgaW0gR2FuZ2UgLS0ga2FubiBcIi0tYW1lbmRcIiBuaWNodCBhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtLXNxdWFzaCB1bmQgLS1maXh1cCBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIkVzIGthbm4gbnVyIGVpbmUgT3B0aW9uIHZvbiAtYy8tQy8tRi8tLWZpeHVwIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTUKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICJEaWUgT3B0aW9uIC1tIGthbm4gbmljaHQgbWl0IC1jLy1DLy1GIGtvbWJpbmllcnQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjAzCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1yZXNldC0tYXV0aG9yIGthbm4gbnVyIG1pdCAtQywgLWMgb2RlciAtLWFtZW5kIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjAKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJFcyBrYW5uIG51ciBlaW5lIE9wdGlvbiB2b24gLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggIgorInZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJQZmFkZSAnJXMgLi4uJyBtaXQgLWEgc2luZCBuaWNodCBzaW5udm9sbCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU3IGJ1aWx0aW4vY29tbWl0LmM6MTUxOQorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAiU3RhdHVzIGltIEt1cnpmb3JtYXQgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1OSBidWlsdGluL2NvbW1pdC5jOjE1MjEKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQnJhbmNoaW5mb3JtYXRpb25lbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYxCittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiU3Rhc2hpbmZvcm1hdGlvbmVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjMgYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgInZvcmF1cy9oaW50ZXJoZXItV2VydGUgYmVyZWNobmVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjUKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJWZXJzaW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjUgYnVpbHRpbi9jb21taXQuYzoxNTI1IGJ1aWx0aW4vcHVzaC5jOjU0OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY1MAorbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJtYXNjaGluZW5sZXNiYXJlIEF1c2dhYmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OCBidWlsdGluL2NvbW1pdC5jOjE1MjcKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgIlN0YXR1cyBpbSBMYW5nZm9ybWF0IGFuemVpZ2VuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MSBidWlsdGluL2NvbW1pdC5jOjE1MzAKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAiRWludHLDpGdlIG1pdCBOVUwtWmVpY2hlbiBhYnNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjEzNzcgYnVpbHRpbi9jb21taXQuYzoxNTMzCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTI1IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICJNb2R1cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc0IGJ1aWx0aW4vY29tbWl0LmM6MTUzMworbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorInVudmVyc2lvbmllcnRlIERhdGVpZW4gYW56ZWlnZW4sIG9wdGlvbmFsZSBNb2RpOiBhbGwsIG5vcm1hbCwgbm8uIChTdGFuZGFyZDogIgorImFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OAorbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorImlnbm9yaWVydGUgRGF0ZWllbiBhbnplaWdlbiwgb3B0aW9uYWxlIE1vZGk6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uICIKKyIoU3RhbmRhcmQ6IHRyYWRpdGlvbmFsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJ3YW5uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODEKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiBpbiBTdWJtb2R1bGVuIGlnbm9yaWVyZW4sIG9wdGlvbmFsIHdlbm46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihTdGFuZGFyZDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgzCittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAidW52ZXJzaW9uaWVydGUgRGF0ZWllbiBpbiBTcGFsdGVuIGF1Zmxpc3RlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg0Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICJrZWluZSBVbWJlbmVubnVuZ2VuIGVybWl0dGVsbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg2Cittc2dpZCAiZGV0ZWN0IHJlbmFtZXMsIG9wdGlvbmFsbHkgc2V0IHNpbWlsYXJpdHkgaW5kZXgiCittc2dzdHIgIlVtYmVuZW5udW5nZW4gZXJrZW5uZW4sIG9wdGlvbmFsIEluZGV4IGbDvHIgR2xlaWNoaGVpdCBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQwNgorbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJOaWNodCB1bnRlcnN0w7x0enRlIEtvbWJpbmF0aW9uIHZvbiBpZ25vcmVkIHVuZCB1bnRyYWNrZWQtZmlsZXMgQXJndW1lbnRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4OQorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIlp1c2FtbWVuZmFzc3VuZyBuYWNoIGVyZm9sZ3JlaWNoZW0gQ29tbWl0IHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MAorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiVW50ZXJzY2hpZWRlIGluIENvbW1pdC1CZXNjaHJlaWJ1bmdzdm9ybGFnZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkyCittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4gZsO8ciBDb21taXQtQmVzY2hyZWlidW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTMgYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3RhZy5jOjQxNAorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIkJlc2NocmVpYnVuZyB2b24gRGF0ZWkgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICJBdXRvciBlaW5lcyBDb21taXRzIMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgIkRhdHVtIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgIkRhdHVtIGVpbmVzIENvbW1pdHMgw7xiZXJzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NyBidWlsdGluL2NvbW1pdC5jOjE0OTggYnVpbHRpbi9jb21taXQuYzoxNDk5CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgIkNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3Cittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIkJlc2NocmVpYnVuZyBkZXMgYW5nZWdlYmVuZW4gQ29tbWl0cyB3aWVkZXJ2ZXJ3ZW5kZW4gdW5kIGVkaXRpZXJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4Cittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIkJlc2NocmVpYnVuZyBkZXMgYW5nZWdlYmVuZW4gQ29tbWl0cyB3aWVkZXJ2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJlaW5lIGF1dG9tYXRpc2NoIHp1c2FtbWVuZ2VzZXR6dGUgQmVzY2hyZWlidW5nIHp1bSBOYWNoYmVzc2VybiBkZXMgIgorImFuZ2VnZWJlbmVuIENvbW1pdHMgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImVpbmUgYXV0b21hdGlzY2ggenVzYW1tZW5nZXNldHp0ZSBCZXNjaHJlaWJ1bmcgYmVpbSBcInNxdWFzaFwiIGRlcyAiCisiYW5nZWdlYmVuZW4gQ29tbWl0cyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIlNpZSBhbHMgQXV0b3IgZGVzIENvbW1pdHMgc2V0emVuICh2ZXJ3ZW5kZXQgbWl0IC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIgYnVpbHRpbi9sb2cuYzoxNjM0IGJ1aWx0aW4vbWVyZ2UuYzoyODkKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NCBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAiJ1NpZ25lZC1vZmYtYnk6Jy1aZWlsZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICJhbmdlZ2ViZW5lIFZvcmxhZ2VuZGF0ZWkgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDQKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiQmVhcmJlaXR1bmcgZGVzIENvbW1pdHMgZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiU3RhdHVzIGluIGRpZSBDb21taXQtQmVzY2hyZWlidW5nc3ZvcmxhZ2UgZWluZsO8Z2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4gZsO8ciBDb21taXQtSW5oYWx0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTIKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImFsbGUgZ2XDpG5kZXJ0ZW4gRGF0ZWllbiBjb21taXR0ZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMworbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAiZGllIGFuZ2VnZWJlbmVuIERhdGVpZW4genVzw6R0emxpY2ggenVtIENvbW1pdCB2b3JtZXJrZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgSGluenVmw7xnZW4gdm9uIERhdGVpZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImludGVyYWt0aXZlcyBIaW56dWbDvGdlbiB2b24gw4RuZGVydW5nZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAibnVyIGRpZSBhbmdlZ2ViZW5lbiBEYXRlaWVuIGNvbW1pdHRlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIkhvb2tzIHByZS1jb21taXQgdW5kIGNvbW1pdC1tc2cgdW1nZWhlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE4Cittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAiYW56ZWlnZW4sIHdhcyBjb21taXR0ZXQgd2VyZGVuIHfDvHJkZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTMxCittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJ2b3JoZXJpZ2VuIENvbW1pdCDDpG5kZXJuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzIKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIlwicG9zdC1yZXdyaXRlIGhvb2tcIiB1bWdlaGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzkKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJBdWZ6ZWljaG51bmcgZWluZXIgbGVlcmVuIMOEbmRlcnVuZyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQxCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiQXVmemVpY2hudW5nIGVpbmVyIMOEbmRlcnVuZyBtaXQgZWluZXIgbGVlcmVuIEJlc2NocmVpYnVuZyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkJlc2Now6RkaWd0ZSBNRVJHRV9IRUFELURhdGVpICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIktvbm50ZSBNRVJHRV9NT0RFIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJLb25udGUgQ29tbWl0LUJlc2NocmVpYnVuZyBuaWNodCBsZXNlbjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJDb21taXQgYXVmZ3J1bmQgbGVlcmVyIEJlc2NocmVpYnVuZyBhYmdlYnJvY2hlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQ29tbWl0IGFiZ2Vicm9jaGVuOyBTaWUgaGFiZW4gZGllIEJlc2NocmVpYnVuZyBuaWNodCBlZGl0aWVydC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjg2Cittc2dpZCAiIgorInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJEYXMgUmVwb3NpdG9yeSB3dXJkZSBha3R1YWxpc2llcnQsIGFiZXIgZGllIFwibmV3X2luZGV4XCItRGF0ZWlcbiIKKyJrb25udGUgbmljaHQgZ2VzY2hyaWViZW4gd2VyZGVuLiBQcsO8ZmVuIFNpZSwgZGFzcyBJaHJlIEZlc3RwbGF0dGUgbmljaHRcbiIKKyJ2b2xsIHVuZCBJaHIgS29udGluZ2VudCBuaWNodCBhdWZnZWJyYXVjaHQgaXN0IHVuZCBmw7xocmVuIFNpZVxuIgorImFuc2NobGllw59lbmQgXCJnaXQgcmVzdG9yZSBIRUFEIC0tc3RhZ2VkIDovXCIgenVyIFdpZWRlcmhlcnN0ZWxsdW5nIGF1cy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPE9iamVrdHZlcnplaWNobmlzPl0gWy0tc2hhbGxvd10gWy0tIgorIltuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxPYmpla3R2ZXJ6ZWljaG5pcz5dIFstLWFwcGVuZHxzcGxpdF0gIgorIlstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPFNwbGl0LSIKKyJPcHRpb25lbj4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDggYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDMKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg3IGJ1aWx0aW4vZmV0Y2guYzoxNzkgYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAiZGlyIgorbXNnc3RyICJWZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo0OSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNAorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxODgKK21zZ2lkICJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiCittc2dzdHIgIkRhcyBPYmpla3R2ZXJ6ZWljaG5pcyB6dW0gU3BlaWNoZXJuIGRlcyBHcmFwaGVuLiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MQorbXNnaWQgImlmIHRoZSBjb21taXQtZ3JhcGggaXMgc3BsaXQsIG9ubHkgdmVyaWZ5IHRoZSB0aXAgZmlsZSIKK21zZ3N0ciAiIgorIldlbm4gZGVyIENvbW1pdC1HcmFwaCBhdWZnZXRlaWx0IGlzdCwgbnVyIGRpZSBEYXRlaSBhbiBkZXIgU3BpdHplIMO8YmVycHLDvGZlbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3MyB0L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIKK21zZ3N0ciAiS29ubnRlIENvbW1pdC1HcmFwaCAnJXMnIG5pY2h0IMO2ZmZuZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgIkR1cmNobGF1ZiBhdWYgYWxsZW4gUmVmZXJlbnplbiBiZWdpbm5lbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDgKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgImR1cmNoIFN0YW5kYXJkLUVpbmdhYmUgZ2VsaXN0ZXRlIFBhY2stSW5kZXhlIG5hY2ggQ29tbWl0cyBzY2FubmVuIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgIkxhdWYgYmVpIENvbW1pdHMgYmVnaW5uZW4sIGRpZSDDvGJlciBkaWUgU3RhbmRhcmQtRWluZ2FiZSBnZWxpc3RldCBzaW5kIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMgorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIiIKKyJhbGxlIENvbW1pdHMgZWluc2NobGllw59lbiwgZGllIHNpY2ggYmVyZWl0cyBpbiBkZXIgQ29tbWl0LUdyYXBoLURhdGVpICIKKyJiZWZpbmRlbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTUKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJFcmxhdWJlIGRhcyBTY2hyZWliZW4gZWluZXIgaW5rcmVtZW50ZWxsZW4gQ29tbWl0LUdyYXBoLURhdGVpIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExNyBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyMQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBub24tYmFzZSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyJNYXhpbWFsZSBBbnphaGwgdm9uIENvbW1pdHMgaW4gZWluZW0gYXVmZ2V0ZWlsdGVuIENvbW1pdC1HcmFwaCBvaG5lIEJhc2lzIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExOQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisiTWF4aW1hbGVzIFZlcmjDpGx0bmlzIHp3aXNjaGVuIHp3ZWkgRWJlbmVuIGVpbmVzIGF1ZmdldGVpbHRlbiBDb21taXQtR3JhcGgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIiIKKyJCZW51dHplbiBTaWUgbWluZGVzdGVucyBlaW5zIHZvbiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvZGVyIC0tc3RkaW4tIgorInBhY2tzLiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwMyBidWlsdGluL2Vudi0taGVscGVyLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyAtLXR5cGUgQXJndW1lbnQsICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNQorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICJudXIgZWluIFR5cCBlcmxhdWJ0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNAorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICJPcnQgZGVyIEtvbmZpZ3VyYXRpb25zZGF0ZWkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiZ2xvYmFsZSBLb25maWd1cmF0aW9uc2RhdGVpIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjYKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJzeXN0ZW13ZWl0ZSBLb25maWd1cmF0aW9uc2RhdGVpIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAiS29uZmlndXJhdGlvbnNkYXRlaSBkZXMgUmVwb3NpdG9yaWVzIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjgKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICJLb25maWd1cmF0aW9uc2RhdGVpIHBybyBBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAiZGllIGFuZ2VnZWJlbmUgS29uZmlndXJhdGlvbnNkYXRlaSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiQmxvYi1JZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICJLb25maWd1cmF0aW9uIHZvbiBhbmdlZ2ViZW5lbSBCbG9iLU9iamVrdCBsZXNlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIkFrdGlvbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiV2VydCB6dXLDvGNrZ2ViZW46IE5hbWUgW1dlcnQtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMworbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiYWxsZSBXZXJ0ZSB6dXLDvGNrZ2ViZW46IFNjaGzDvHNzZWwgW1dlcnQtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJXZXJ0ZSBmw7xyIGRlbiByZWd1bMOkcmVuIEF1c2RydWNrIHp1csO8Y2tnZWJlbjogTmFtZS1yZWdleCBbV2VydC1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAiV2VydCBzcGV6aWZpc2NoIGbDvHIgZWluZSBVUkwgenVyw7xja2dlYmVuOiBzZWN0aW9uWy52YXJdIFVSTCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzYKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAiYWxsZSBwYXNzZW5kZW4gVmFyaWFibGVuIGVyc2V0emVuOiBOYW1lIFdlcnQgW1dlcnQtcmVnZXhdICIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgIm5ldWUgVmFyaWFibGUgaGluenVmw7xnZW46IE5hbWUgV2VydCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJlaW5lIFZhcmlhYmxlIGVudGZlcm5lbjogTmFtZSBbV2VydC1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImFsbGUgw5xiZXJlaW5zdGltbXVuZ2VuIGVudGZlcm5lbjogTmFtZSBbV2VydC1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJlaW5lIFNla3Rpb24gdW1iZW5lbm5lbjogYWx0ZXItTmFtZSBuZXVlci1OYW1lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgImVpbmUgU2VrdGlvbiBlbnRmZXJuZW46IE5hbWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgImFsbGVzIGF1Zmxpc3RlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDMKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAiZWluZW4gRWRpdG9yIMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogc2xvdCBbZGVmYXVsdF0iCittc2dzdHIgImRpZSBrb25maWd1cmllcnRlIEZhcmJlIGZpbmRlbjogU2xvdCBbU3RhbmRhcmRdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJkaWUgRmFyYmVpbnN0ZWxsdW5nIGZpbmRlbjogU2xvdCBbU3RhbmRhcmQtQXVzZ2FiZS1pc3QtVGVybWluYWxdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgIlR5cGUiCittc2dzdHIgIlR5cCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDcgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM4Cittc2dpZCAidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIgorbXNnc3RyICJXZXJ0IGlzdCBtaXQgZGllc2VtIFR5cCBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJXZXJ0IGlzdCBcInRydWVcIiBvZGVyIFwiZmFsc2VcIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiV2VydCBpc3QgZWluZSBEZXppbWFsemFobCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgIldlcnQgaXN0IC0tYm9vbCBvZGVyIC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgIldlcnQgaXN0IGVpbiBQZmFkIChEYXRlaSBvZGVyIFZlcnplaWNobmlzbmFtZSkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUyCittc2dpZCAidmFsdWUgaXMgYW4gZXhwaXJ5IGRhdGUiCittc2dzdHIgIldlcnQgaXN0IGVpbiBWZXJmYWxsc2RhdHVtIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgIk90aGVyIgorbXNnc3RyICJTb25zdGlnZXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU0Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJzY2hsaWXDn3QgV2VydGUgbWl0IE5VTC1CeXRlIGFiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NQorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAibnVyIFZhcmlhYmxlbm5hbWVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NgorbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAiYmVhY2h0ZXQgXCJpbmNsdWRlXCItRGlyZWt0aXZlbiBiZWltIE5hY2hzY2hsYWdlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTcKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICIiCisiVXJzcHJ1bmcgZGVyIEtvbmZpZ3VyYXRpb24gYW56ZWlnZW4gKERhdGVpLCBTdGFuZGFyZC1FaW5nYWJlLCBCbG9iLCAiCisiQmVmZWhsc3plaWxlKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTggYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQwCittc2dpZCAidmFsdWUiCittc2dzdHIgIldlcnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICJtaXQgLS1nZXQsIGJlbnV0emUgZGVuIFN0YW5kYXJkd2VydCwgd2VubiBkZXIgRWludHJhZyBmZWhsdCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIgorbXNnc3RyICJGYWxzY2hlIEFuemFobCB2b24gQXJndW1lbnRlbiAtIHNvbGx0ZSAlZCBzZWluLiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgIkZhbHNjaGUgQW56YWhsIHZvbiBBcmd1bWVudGVuIC0gc29sbHRlIHp3aXNjaGVuICVkIHVuZCAlZCBzZWluLiIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIFNjaGzDvHNzZWxtdXN0ZXI6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRm9ybWF0aWVyZW4gZGVzIFN0YW5kYXJka29uZmlndXJhdGlvbnN3ZXJ0ZXM6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAiS2FubiBGYXJiZSAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQzCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgImtvbm50ZSBTdGFuZGFyZC1GYXJid2VydCBuaWNodCBwYXJzZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk2IGJ1aWx0aW4vY29uZmlnLmM6NzQyCittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiTmljaHQgaW4gZWluZW0gR2l0LVJlcG9zaXRvcnkuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5OQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRGFzIFNjaHJlaWJlbiBpbiBkaWUgU3RhbmRhcmQtRWluZ2FiZSB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTAyCittc2dpZCAid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorIkRhcyBTY2hyZWliZW4gdm9uIEJsb2ItT2JqZWt0ZW4gZsO8ciBLb25maWd1cmF0aW9uZW4gd2lyZCBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyBEYXMgaXN0IEdpdCdzIGJlbnV0emVyc3BlemlmaXNjaGUgS29uZmlndXJhdGlvbnNkYXRlaS5cbiIKKyJbdXNlcl1cbiIKKyIjIEJpdHRlIHBhc3NlbiBTaWUgZGllIGZvbGdlbmRlbiBaZWlsZW4gYW4gdW5kIGtvbW1lbnRpZXJlbiBTaWUgZGllc2UgYXVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTEKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgIk51ciBlaW5lIEtvbmZpZ3VyYXRpb25zZGF0ZWkgenUgZWluZXIgWmVpdCBtw7ZnbGljaC4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjE2Cittc2dpZCAiLS1sb2NhbCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWxvY2FsIGthbm4gbnVyIGlubmVyaGFsYiBlaW5lcyBHaXQtUmVwb3NpdG9yaWVzIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxOQorbXNnaWQgIi0tYmxvYiBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWJsb2Iga2FubiBudXIgaW5uZXJoYWxiIGVpbmVzIEdpdC1SZXBvc2l0b3JpZXMgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjM4Cittc2dpZCAiJEhPTUUgbm90IHNldCIKK21zZ3N0ciAiJEhPTUUgbmljaHQgZ2VzZXR6dC4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjU4Cittc2dpZCAiIgorIi0td29ya3RyZWUgY2Fubm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIHVubGVzcyB0aGUgY29uZmlnXG4iCisiZXh0ZW5zaW9uIHdvcmt0cmVlQ29uZmlnIGlzIGVuYWJsZWQuIFBsZWFzZSByZWFkIFwiQ09ORklHVVJBVElPTiBGSUxFXCJcbiIKKyJzZWN0aW9uIGluIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmb3IgZGV0YWlscyIKK21zZ3N0ciAiIgorIi0td29ya3RyZWUga2FubiBuaWNodCBtaXQgbWVocmVyZW4gQXJiZWl0c3ZlcnplaWNobmlzc2VuIHZlcndlbmRldCB3ZXJkZW4sXG4iCisiYXXDn2VyIGRpZSBLb25maWd1cmF0aW9uc2Vyd2VpdGVydW5nIHdvcmt0cmVlQ29uZmlnIGlzdCBha3RpdmllcnQuIEJpdHRlXG4iCisibGVzZW4gU2llIGRpZSBTZWt0aW9uIFwiQ09ORklHVVJBVElPTl9GSUxFXCIgaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGbDvHIgIgorIkRldGFpbHMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Njg4Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIkFuZ2FiZSB2b24gLS1nZXQtY29sb3IgdW5kIFZhcmlhYmxlbnR5cCBzaW5kIHVuZ8O8bHRpZy4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkzCittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAiTnVyIGVpbmUgQWt0aW9uIGVybGF1YnQuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwNgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICItLW5hbWUtb25seSBpc3QgbnVyIGFud2VuZGJhciBhdWYgLS1saXN0IG9kZXIgLS1nZXQtcmVnZXhwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxMgorbXNnaWQgIiIKKyItLXNob3ctb3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIGFuZCAtLSIKKyJsaXN0IgorbXNnc3RyICIiCisiLS1zaG93LW9yaWdpbiBpc3QgbnVyIGFud2VuZGJhciBhdWYgLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwIHVuZCAtLWxpc3QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE4Cittc2dpZCAiLS1kZWZhdWx0IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCIKK21zZ3N0ciAiLS1kZWZhdWx0IGlzdCBudXIgYW53ZW5kYmFyIGF1ZiAtLWdldCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIEtvbmZpZ3VyYXRpb25zZGF0ZWkgJyVzJyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVmVyYXJiZWl0ZW4gZGVyIEtvbmZpZ3VyYXRpb25zZGF0ZWkoZW4pLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkRhcyBCZWFyYmVpdGVuIGRlciBTdGFuZGFyZC1FaW5nYWJlIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDYKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkRhcyBCZWFyYmVpdGVuIHZvbiBCbG9icyB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJLb25udGUgS29uZmlndXJhdGlvbnNkYXRlaSAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisia2FubiBuaWNodCBtZWhyZXJlIFdlcnRlIG1pdCBlaW5lbSBlaW56aWdlbiBXZXJ0IMO8YmVyc2NocmVpYmVuXG4iCisiICAgICAgIEJlbnV0emVuIFNpZSBlaW5lbiByZWd1bMOkcmVuIEF1c2RydWNrLCAtLWFkZCBvZGVyIC0tcmVwbGFjZSwgdW0gJXNcbiIKKyIgICAgICAgenUgw6RuZGVybi4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODQ3IGJ1aWx0aW4vY29uZmlnLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggc2VjdGlvbjogJXMiCittc2dzdHIgIktlaW5lIHNvbGNoZSBTZWt0aW9uOiAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgImdpYnQgR3LDtsOfZW5hbmdhYmVuIGluIG1lbnNjaGVubGVzYmFyZW4gRm9ybWF0IGF1cyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI2Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxPcHRpb25lbj5dIFs8Q29tbWl0LUFuZ2FiZT4uLi5dIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8T3B0aW9uZW4+XSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJoZWFkIgorbXNnc3RyICJCcmFuY2giCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICJuaWNodC1hbm5vdGllcnQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiYW5ub3RpZXJ0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYW5ub3RpZXJ0ZXMgVGFnICVzIGlzdCBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImFubm90aWVydGVzIFRhZyAlcyBoYXQga2VpbmVuIGVpbmdlYmV0dGV0ZW4gTmFtZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiVGFnICclcycgaXN0IGVpZ2VudGxpY2ggJyVzJyBoaWVyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAia2VpbiBUYWcgZW50c3ByaWNodCBleGFrdCAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4YWN0IG1hdGNoIG9uIHJlZnMgb3IgdGFncywgc2VhcmNoaW5nIHRvIGRlc2NyaWJlXG4iCittc2dzdHIgIiIKKyJLZWluZSBleGFrdGUgw5xiZXJlaW5zdGltbXVuZyBiZWkgUmVmZXJlbnplbiBvZGVyIFRhZ3MsIFN1Y2hlIHp1bSAiCisiQmVzY2hyZWliZW5cbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiYmVlbmRldGUgU3VjaGUgYmVpICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyJLZWluZSBhbm5vdGllcnRlbiBUYWdzIGvDtm5uZW4gJyVzJyBiZXNjaHJlaWJlbi5cbiIKKyJKZWRvY2ggZ2FiIGVzIG5pY2h0LWFubm90aWVydGUgVGFnczogdmVyc3VjaGVuIFNpZSAtLXRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyJLZWluZSBUYWdzIGvDtm5uZW4gJyVzJyBiZXNjaHJlaWJlbi5cbiIKKyJWZXJzdWNoZW4gU2llIC0tYWx3YXlzIG9kZXIgZXJzdGVsbGVuIFNpZSBlaW5pZ2UgVGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiVsdSBDb21taXRzIGR1cmNobGF1ZmVuXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisibWVociBhbHMgJWkgVGFncyBnZWZ1bmRlbjsgZsO8aHJlIGRpZSBlcnN0ZW4gJWkgYXVmXG4iCisiU3VjaGUgYmVpICVzIGF1ZmdlZ2ViZW5cbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICJCZXNjaHJlaWJlICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiVzIGlzdCBrZWluIGfDvGx0aWdlciBPYmpla3QtTmFtZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIgorbXNnc3RyICIlcyBpc3Qgd2VkZXIgZWluIENvbW1pdCwgbm9jaCBlaW4gQmxvYi4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICJkYXMgVGFnIGZpbmRlbiwgZGFzIG5hY2ggZGVtIENvbW1pdCBrb21tdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOAorbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgImRpZSBTdWNoc3RyYXRlZ2llIGluIGRlciBTdGFuZGFyZC1GZWhsZXJhdXNnYWJlIHByb3Rva29sbGllcmVuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM5Cittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgImFsbGUgUmVmZXJlbnplbiB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDAKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAiamVkZXMgVGFnIHZlcndlbmRlbiwgYXVjaCBuaWNodC1hbm5vdGllcnRlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQxCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAiaW1tZXIgbGFuZ2VzIEZvcm1hdCB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDIKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgIm51ciBlcnN0ZW0gRWx0ZXJudGVpbCBmb2xnZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDUKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICJudXIgZXhha3RlIMOcYmVyZWluc3RpbW11bmdlbiBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NworbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgImRpZSBqw7xuZ3N0ZW4gPG4+IFRhZ3MgYmV0cmFjaHRlbiAoU3RhbmRhcmQ6IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0OQorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIm51ciBUYWdzLCBkaWUgPE11c3Rlcj4gZW50c3ByZWNoZW4sIGJldHJhY2h0ZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTEKK21zZ2lkICJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImtlaW5lIFRhZ3MgYmV0cmFjaHRlbiwgZGllIDxNdXN0ZXI+IGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzIGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzMKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgImdla8O8cnp0ZXMgQ29tbWl0LU9iamVrdCBhbnplaWdlbiwgd2VubiBzb25zdCBuaWNodHMgenV0cmlmZnQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTQgYnVpbHRpbi9kZXNjcmliZS5jOjU1NworbXNnaWQgIm1hcmsiCittc2dzdHIgIk1hcmtpZXJ1bmciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIiIKKyI8TWFya2llcnVuZz4gYmVpIGdlw6RuZGVydGVtIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhbmjDpG5nZW4gKFN0YW5kYXJkOiBcIi1kaXJ0eSIKKyJcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTgKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAiIgorIjxNYXJraWVydW5nPiBiZWkgZGVmZWt0ZW0gQXJiZWl0c3ZlcnplaWNobmlzIGFuaMOkbmdlbiAoU3RhbmRhcmQ6IFwiLWJyb2tlblwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3NgorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1sb25nIHVuZCAtLWFiYnJldj0wIHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYwNQorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJLZWluZSBOYW1lbiBnZWZ1bmRlbiwga2FubiBuaWNodHMgYmVzY2hyZWliZW4uIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIkRpZSBPcHRpb24gLS1kaXJ0eSBrYW5uIG5pY2h0IG1pdCBDb21taXRzIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU4Cittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tYnJva2VuIGthbm4gbmljaHQgbWl0IENvbW1pdHMgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMnOiBrZWluZSByZWd1bMOkcmUgRGF0ZWkgb2RlciBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgT3B0aW9uOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIktlaW4gR2l0LVJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiT2JqZWt0ICclcycgaXN0IHVuZ8O8bHRpZy4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJNZWhyIGFscyB6d2VpIEJsb2JzIGFuZ2VnZWJlbjogJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgInVuYmVoYW5kZWx0ZXMgT2JqZWt0ICclcycgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBkaWZmdG9vbCBbPE9wdGlvbmVuPl0gWzxDb21taXQ+IFs8Q29tbWl0Pl1dIFstLV0gWzxQZmFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAiZmVobGdlc2NobGFnZW46ICVkIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImtvbm50ZSBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmcgJXMgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIgorbXNnc3RyICJLb25udGUgRGF0ZWkgdm9uIHN5bWJvbGlzY2hlciBWZXJrbsO8cGZ1bmcgJyVzJyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICJLb25udGUgT2JqZWt0ICclcycgZsO8ciBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmcgJyVzJyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTMKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisiS29tYmluaWVydGUgRGlmZi1Gb3JtYXRlKCctYycgdW5kICctLWNjJykgd2VyZGVuIGltIFZlcnplaWNobmlzLVxuIgorIkRpZmYtTW9kdXMoJy1kJyB1bmQgJy0tZGlyLWRpZmYnKSBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIgorbXNnc3RyICJiZWlkZSBEYXRlaWVuIGdlw6RuZGVydDogJyVzJyB1bmQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzYKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAiRGF0ZWkgaW0gQXJiZWl0c3ZlcnplaWNobmlzIGJlbGFzc2VuLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgIkVzIGV4aXN0aWVyZW4gdGVtcG9yw6RyZSBEYXRlaWVuIGluICclcycuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ4Cittc2dpZCAieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iCittc2dzdHIgIlNpZSBrw7ZubnRlbiBkaWVzZSBhdWZyw6R1bWVuIG9kZXIgd2llZGVyaGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAiYGRpZmYuZ3VpdG9vbGAgYW5zdGF0dCBgZGlmZi50b29sYCBiZW51dHplbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5OQorbXNnaWQgInBlcmZvcm0gYSBmdWxsLWRpcmVjdG9yeSBkaWZmIgorbXNnc3RyICJEaWZmIMO8YmVyIGdhbnplcyBWZXJ6ZWljaG5pcyBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAxCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICJrZWluZSBFaW5nYWJlYXVmZm9yZGVydW5nIHZvciBBdXNmw7xocnVuZyBlaW5lcyBEaWZmLVRvb2xzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA2Cittc2dpZCAidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiCittc2dzdHIgInN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZ2VuIGltIGRpci1kaWZmIE1vZHVzIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNworbXNnaWQgInRvb2wiCittc2dzdHIgIlRvb2wiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDgKK21zZ2lkICJ1c2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wiCittc2dzdHIgImRhcyBhbmdlZ2ViZW5lIERpZmYtVG9vbCBiZW51dHplbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMAorbXNnaWQgInByaW50IGEgbGlzdCBvZiBkaWZmIHRvb2xzIHRoYXQgbWF5IGJlIHVzZWQgd2l0aCBgLS10b29sYCIKK21zZ3N0ciAiIgorImVpbmUgTGlzdGUgbWl0IERpZmYtVG9vbHMgZGFyc3RlbGxlbiwgZGllIG1pdCBgLS10b29sYCBiZW51dHp0IHdlcmRlbiBrw7ZubmVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEzCittc2dpZCAiIgorIm1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuIGludm9rZWQgZGlmZiB0b29sIHJldHVybnMgYSBub24gLSB6ZXJvIGV4aXQgIgorImNvZGUiCittc2dzdHIgIiIKKyInZ2l0LWRpZmZ0b29sJyBiZWVuZGVuLCB3ZW5uIGRhcyBhdWZnZXJ1ZmVuZSBEaWZmLVRvb2wgbWl0IGVpbmVtICIKKyJSw7xja2tlaHJ3ZXJ0XG4iCisidmVyc2NoaWVkZW4gMCBhdXNnZWbDvGhydCB3dXJkZSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNgorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAiZWlnZW5lbiBCZWZlaGwgenVyIEFuemVpZ2Ugdm9uIFVudGVyc2NoaWVkZW4gYW5nZWJlbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNworbXNnaWQgInBhc3NlZCB0byBgZGlmZmAiCittc2dzdHIgImFuICdkaWZmJyDDvGJlcmdlYmVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMyCittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAiZGlmZnRvb2wgYmVuw7Z0aWd0IEFyYmVpdHN2ZXJ6ZWljaG5pcyBvZGVyIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzkKK21zZ2lkICItLWRpci1kaWZmIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tZGlyLWRpZmYga2FubiBuaWNodCBtaXQgLS1uby1pbmRleCB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQyCittc2dpZCAiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1ndWksIC0tdG9vbCB1bmQgLS1leHRjbWQgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAia2VpbiA8VG9vbD4gZsO8ciAtLXRvb2w9PFRvb2w+IGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1NworbXNnaWQgIm5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPiIKK21zZ3N0ciAia2VpbiA8UHJvZ3JhbW0+IGbDvHIgLS1leHRjbWQ9PFByb2dyYW1tPiBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2Cittc2dpZCAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIKK21zZ3N0ciAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPE9wdGlvbmVuPiA8VW1nZWJ1bmdzdmFyaWFibGU+IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6MzcgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAidHlwZSIKK21zZ3N0ciAiQXJ0IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgIlN0YW5kYXJkIGbDvHIgZ2l0X2Vudl8qKC4uLiksIHVtIGRhcmF1ZiB6dXLDvGNrenVncmVpZmVuIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDMKK21zZ2lkICJiZSBxdWlldCBvbmx5IHVzZSBnaXRfZW52XyooKSB2YWx1ZSBhcyBleGl0IGNvZGUiCittc2dzdHIgIkF1c2dhYmVuIHVudGVyZHLDvGNrZW47IG51ciBnaXRfZW52XyooKSBXZXJ0ZSBhbHMgRXhpdC1Db2RlIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB3aXRoIGAtLXR5cGU9Ym9vbGAsIG5vdCBgJXNgIgorbXNnc3RyICIiCisiT3B0aW9uIGAtLWRlZmF1bHQnIGVyd2FydGV0IGVpbmVuIGJvb2xlc2NoZW4gV2VydCBiZWkgYC0tdHlwZT1ib29sJywgbmljaHQgYCIKKyIlc2AiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCIKKyIlc2AiCittc2dzdHIgIiIKKyJPcHRpb24gYC0tZGVmYXVsdCcgZXJ3YXJ0ZXQgZWluZW4gdm9yemVpY2hlbmxvc2VuIExvbmctV2VydCBiZWkgYC0tIgorInR5cGU9dWxvbmdgLCBuaWNodCBgJXNgIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjkKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUyCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKyJGZWhsZXI6IFZlcnNjaGFjaHRlbHRlIFRhZ3Mga8O2bm5lbiBuaWNodCBleHBvcnRpZXJ0IHdlcmRlbiwgYXXDn2VyIC0tbWFyay0iCisidGFncyB3dXJkZSBhbmdlZ2ViZW4uIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgIkZvcnRzY2hyaXR0IG5hY2ggPG4+IE9iamVrdGVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAiQmVoYW5kbHVuZyB2b24gc2lnbmllcnRlbiBUYWdzIHfDpGhsZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAiQmVoYW5kbHVuZyB2b24gVGFncyB3w6RobGVuLCBkaWUgZ2VmaWx0ZXJ0ZSBPYmpla3RlIG1hcmtpZXJlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjAKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgY29tbWl0IG1lc3NhZ2VzIGluIGFuIGFsdGVybmF0ZSBlbmNvZGluZyIKK21zZ3N0ciAiIgorIkF1c3fDpGhsZW4gZGVyIEJlaGFuZGx1bmcgdm9uIENvbW1pdC1CZXNjaHJlaWJ1bmdlbiBiZWkgd2VjaHNlbG5kZW0gRW5jb2RpbmciCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIk1hcmtpZXJ1bmdlbiBpbiBkaWVzZSBEYXRlaSBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICJNYXJraWVydW5nZW4gdm9uIGRpZXNlciBEYXRlaSBpbXBvcnRpZXJlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjkKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJNYXJraWVydW5nZW4gdm9uIGRpZXNlciBEYXRlaSBpbXBvcnRpZXJlbiwgd2VubiBkaWVzZSBleGlzdGllcnQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTcxCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgImvDvG5zdGxpY2ggZWluZW4gVGFnLUVyc3RlbGxlciBlcnpldWdlbiwgd2VubiBkYXMgVGFnIGtlaW5lbiBoYXQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgImbDvHIgamVkZW4gQ29tbWl0IGRhcyBnZXNhbXRlIFZlcnplaWNobmlzIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJkaWUgXCJkb25lXCItRnVua3Rpb24gYmVudXR6ZW4sIHVtIGRlbiBEYXRlbnN0cm9tIGFienVzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NgorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiQXVzZ2FiZSB2b24gQmxvYi1EYXRlbiDDvGJlcnNwcmluZ2VuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NyBidWlsdGluL2xvZy5jOjE3MDUKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICJSZWZzcGVjIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAiUmVmc3BlYyBhdWYgZXhwb3J0aWVydGUgUmVmZXJlbnplbiBhbndlbmRlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzkKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICJBdXNnYWJlIGFub255bWlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgxCittc2dpZCAiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIgorbXNnc3RyICIiCisiRWx0ZXJuLCBkaWUgbmljaHQgaW0gRmFzdC1FeHBvcnQtU3RyZWFtIHNpbmQsIGFuaGFuZCBpaHJlciBPYmpla3QtSUQgIgorInJlZmVyZW56aWVyZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgzCittc2dpZCAiU2hvdyBvcmlnaW5hbCBvYmplY3QgaWRzIG9mIGJsb2JzL2NvbW1pdHMiCittc2dzdHIgIm9yaWdpbmFsZSBPYmpla3QtSURzIHZvbiBCbG9icy9Db21taXRzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAiVGFncyBtaXQgTWFya2llcnVuZ3MtSURzIGJlc2NocmlmdGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTIyMAorbXNnaWQgIkNhbm5vdCBwYXNzIGJvdGggLS1pbXBvcnQtbWFya3MgYW5kIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKK21zZ3N0ciAiIgorIi0taW1wb3J0LW1hcmtzIHVuZCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMga8O2bm5lbiBuaWNodCB6dXNhbW1lbiAiCisid2VpdGVyZ2VnZWJlbiB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8T3B0aW9uZW4+XSBbPFJlcG9zaXRvcnk+IFs8UmVmc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPE9wdGlvbmVuPl0gPEdydXBwZT4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPE9wdGlvbmVuPl0gWyg8UmVwb3NpdG9yeT4gfCA8R3J1cHBlPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYKK21zZ2lkICJmZXRjaC5wYXJhbGxlbCBjYW5ub3QgYmUgbmVnYXRpdmUiCittc2dzdHIgImZldGNoLnBhcmFsbGVsIGthbm4gbmljaHQgbmVnYXRpdiBzZWluIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjIwNAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgImZvcmRlcnQgdm9uIGFsbGVuIFJlbW90ZS1SZXBvc2l0b3JpZXMgYW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEgYnVpbHRpbi9wdWxsLmM6MjQ4Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9mZXRjaCIKK21zZ3N0ciAiVXBzdHJlYW0gZsO8ciBcImdpdCBwdWxsL2ZldGNoXCIgc2V0emVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzIGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAiYW4gLmdpdC9GRVRDSF9IRUFEIGFuaMOkbmdlbiwgYW5zdGF0dCB6dSDDvGJlcnNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NSBidWlsdGluL3B1bGwuYzoyMTAKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgIlBmYWQgZGVzIFByb2dyYW1tcyB6dW0gSG9jaGxhZGVuIHZvbiBQYWtldGVuIGF1ZiBkZXIgR2VnZW5zZWl0ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCByZWZlcmVuY2UiCittc2dzdHIgImRhcyDDnGJlcnNjaHJlaWJlbiBlaW5lciBsb2thbGVuIFJlZmVyZW56IGVyendpbmdlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAidm9uIG1laHJlcmVuIFJlbW90ZS1SZXBvc2l0b3JpZXMgYW5mb3JkZXJuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjIxNAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgImFsbGUgVGFncyB1bmQgdmVyYnVuZGVuZSBPYmpla3RlIGFuZm9yZGVybiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MgorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAibmljaHQgYWxsZSBUYWdzIGFuZm9yZGVybiAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIkFuemFobCBkZXIgcGFyYWxsZWwgYW56dWZvcmRlcm5kZW4gU3VibW9kdWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjIxNworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICIiCisiUmVtb3RlLVRyYWNraW5nLUJyYW5jaGVzIGVudGZlcm5lbiwgZGllIHNpY2ggbmljaHQgbWVociBpbSBSZW1vdGUtUmVwb3NpdG9yeSAiCisiYmVmaW5kZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgKK21zZ2lkICJwcnVuZSBsb2NhbCB0YWdzIG5vIGxvbmdlciBvbiByZW1vdGUgYW5kIGNsb2JiZXIgY2hhbmdlZCB0YWdzIgorbXNnc3RyICIiCisibG9rYWxlIFRhZ3MgZW50ZmVybmVuLCBkaWUgc2ljaCBuaWNodCBtZWhyIGltIFJlbW90ZS1SZXBvc2l0b3J5IGJlZmluZGVuLCAiCisidW5kIGdlw6RuZGVydGUgVGFncyBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJiZWktQmVkYXJmIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAicmVrdXJzaXZlIEFuZm9yZGVydW5nZW4gdm9uIFN1Ym1vZHVsZW4ga29udHJvbGxpZXJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL3B1bGwuYzoyMjUKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAiaGVydW50ZXJnZWxhZGVuZXMgUGFrZXQgYmVoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmcgZGVyIFwiSEVBRFwiLVJlZmVyZW56IGVybGF1YmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjI4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAiIgorImRpZSBIaXN0b3JpZSBlaW5lcyBLbG9ucyBtaXQgdW52b2xsc3TDpG5kaWdlciBIaXN0b3JpZSAoc2hhbGxvdykgdmVydGllZmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgIiIKKyJkaWUgSGlzdG9yaWUgZWluZXMgS2xvbnMgbWl0IHVudm9sbHN0w6RuZGlnZXIgSGlzdG9yaWUgKHNoYWxsb3cpIGF1ZiAiCisiWmVpdGJhc2lzXG4iCisidmVydGllZmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIzMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICJ6dSBlaW5lbSB2b2xsc3TDpG5kaWdlbiBSZXBvc2l0b3J5IGtvbnZlcnRpZXJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgImRpZXMgYW4gZGllIEF1c2dhYmUgZGVyIFN1Ym1vZHVsLVBmYWRlIHZvcmFuc3RlbGxlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MworbXNnaWQgIiIKKyJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgIgorImZpbGVzKSIKK21zZ3N0ciAiIgorIlN0YW5kYXJkIGbDvHIgZGllIHJla3Vyc2l2ZSBBbmZvcmRlcnVuZyB2b24gU3VibW9kdWxlbiAoZ2VyaW5nZXJlIFByaW9yaXTDpHRcbiIKKyJhbHMgS29uZmlndXJhdGlvbnNkYXRlaWVuKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMzQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgIlJlZmVyZW56ZW4sIGRpZSAuZ2l0L3NoYWxsb3cgYWt0dWFsaXNpZXJlbiwgYWt6ZXB0aWVyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODggYnVpbHRpbi9wdWxsLmM6MjM2Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICJSZWZtYXAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODkgYnVpbHRpbi9wdWxsLmM6MjM3Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgIlJlZm1hcCBmw7xyICdmZXRjaCcgYW5nZWJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5NgorbXNnaWQgInJlcG9ydCB0aGF0IHdlIGhhdmUgb25seSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoaXMgb2JqZWN0IgorbXNnc3RyICIiCisiYXVzZ2ViZW4sIGRhc3Mgd2lyIG51ciBPYmpla3RlIGhhYmVuLCBkaWUgdm9uIGRpZXNlbSBPYmpla3QgYXVzIGVycmVpY2hiYXIgIgorInNpbmQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTkKK21zZ2lkICJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIkbDvGhyZSAnZ2MgLS1hdXRvJyBuYWNoIFwiZmV0Y2hcIiBhdXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDEgYnVpbHRpbi9wdWxsLmM6MjQ2Cittc2dpZCAiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIgorbXNnc3RyICJQcsO8ZmUgYXVmIGVyend1bmdlbmUgQWt0dWFsaXNpZXJ1bmdlbiBpbiBhbGxlbiBha3R1YWxpc2llcnRlbiBCcmFuY2hlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMworbXNnaWQgIndyaXRlIHRoZSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIlNjaHJlaWJlIGRlbiBDb21taXQtR3JhcGggbmFjaCBcImZldGNoXCIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiS29ubnRlIFJlbW90ZS1SZWZlcmVueiB2b24gSEVBRCBuaWNodCBmaW5kZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJXMiCittc2dzdHIgIktvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGVudGjDpGx0IHVuZ8O8bHRpZ2VuIFdlcnQgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiT2JqZWt0ICVzIG5pY2h0IGdlZnVuZGVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzU1Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbYWt0dWVsbF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjggYnVpbHRpbi9mZXRjaC5jOjc4NCBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW3p1csO8Y2tnZXdpZXNlbl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjkKK21zZ2lkICJjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAia2FubiBcImZldGNoXCIgaW0gYWt0dWVsbGVuIEJyYW5jaCBuaWNodCBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbVGFnIEFrdHVhbGlzaWVydW5nXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4MCBidWlsdGluL2ZldGNoLmM6ODE3IGJ1aWx0aW4vZmV0Y2guYzo4MzkKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAia2FubiBsb2thbGUgUmVmZXJlbnogbmljaHQgYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICJ3w7xyZGUgYmVzdGVoZW5kZSBUYWdzIHZlcsOkbmRlcm4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDYKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIltuZXVlcyBUYWddIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA5Cittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJbbmV1ZXIgQnJhbmNoXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW25ldWUgUmVmZXJlbnpdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmcgZXJ6d3VuZ2VuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAia2VpbiBWb3JzcHVsZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NzcKK21zZ2lkICIiCisiRmV0Y2ggbm9ybWFsbHkgaW5kaWNhdGVzIHdoaWNoIGJyYW5jaGVzIGhhZCBhIGZvcmNlZCB1cGRhdGUsXG4iCisiYnV0IHRoYXQgY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIFRvIHJlLWVuYWJsZSwgdXNlICctLXNob3ctZm9yY2VkLXVwZGF0ZXMnXG4iCisiZmxhZyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZScuIgorbXNnc3RyICIiCisiTm9ybWFsZXJ3ZWlzZSB6ZWlndCAnZmV0Y2gnIHdlbGNoZSBCcmFuY2hlcyBlaW5lIGVyend1bmdlbmUgQWt0dWFsaXNpZXJ1bmdcbiIKKyJoYXR0ZW4sIGFiZXIgZGllc2Ugw5xiZXJwcsO8ZnVuZyB3dXJkZSBkZWFrdGl2aWVydC4gVW0gZGllc2Ugd2llZGVyIHp1XG4iCisiYWt0aXZpZXJlbiwgbnV0emVuIFNpZSBkaWUgT3B0aW9uICctLXNob3ctZm9yY2VkLXVwZGF0ZWQnIG9kZXIgZsO8aHJlblxuIgorIlNpZSAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJyBhdXMuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisiRXMgYnJhdWNodGUgJS4yZiBTZWt1bmRlbiwgdW0gZXJ6d3VuZ2VuZSBBa3R1YWxpc2llcnVuZ2VuIHp1IMO8YmVycHLDvGZlbi5cbiIKKyJTaWUga8O2bm5lbiBkaWUgT3B0aW9uICctLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnIGJlbnV0emVuIG9kZXJcbiIKKyInZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZScgYXVzZsO8aHJlbiwgdW0gZGllc2Ugw5xiZXJwcsO8ZnVuZ1xuIgorInp1IHVtZ2VoZW4uXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyBoYXQgbmljaHQgYWxsZSBlcmZvcmRlcmxpY2hlbiBPYmpla3RlIGdlc2VuZGV0XG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAiIgorIiVzIHd1cmRlIHp1csO8Y2tnZXdpZXNlbiwgZGEgUm9vdC1Db21taXRzIHZvbiBSZXBvc2l0b3JpZXMgbWl0ICIKKyJ1bnZvbGxzdMOkbmRpZ2VyXG4iCisiSGlzdG9yaWUgKHNoYWxsb3cpIG5pY2h0IGFrdHVhbGlzaWVydCB3ZXJkZW4gZMO8cmZlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDE3IGJ1aWx0aW4vZmV0Y2guYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJWb24gJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisiRWluaWdlIGxva2FsZSBSZWZlcmVuemVuIGtvbm50ZW4gbmljaHQgYWt0dWFsaXNpZXJ0IHdlcmRlbjsgdmVyc3VjaGVuIFNpZVxuIgorIidnaXQgcmVtb3RlIHBydW5lICVzJywgdW0gamVkZW4gw6RsdGVyZW4sIHdpZGVyc3Byw7xjaGxpY2hlbiBCcmFuY2ggenUgbMO2c2NoZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgd2lyZCB1bnJlZmVyZW56aWVydCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHd1cmRlIHVucmVmZXJlbnppZXJ0KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTgKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIltnZWzDtnNjaHRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1OSBidWlsdGluL3JlbW90ZS5jOjEwMzUKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihuaWNodHMpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJEZXIgXCJmZXRjaFwiIGluIGRlbiBha3R1ZWxsZW4gQnJhbmNoICVzIHZvbiBlaW5lbSBOaWNodC1CYXJlLVJlcG9zaXRvcnkgIgorInd1cmRlIHZlcndlaWdlcnQuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICJPcHRpb24gXCIlc1wiIFdlcnQgXCIlc1wiIGlzdCBuaWNodCBnw7xsdGlnIGbDvHIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiT3B0aW9uIFwiJXNcIiB3aXJkIGlnbm9yaWVydCBmw7xyICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEyCittc2dpZCAibXVsdGlwbGUgYnJhbmNoZXMgZGV0ZWN0ZWQsIGluY29tcGF0aWJsZSB3aXRoIC0tc2V0LXVwc3RyZWFtIgorbXNnc3RyICJNZWhyZXJlIEJyYW5jaGVzIGVya2FubnQsIGlua29tcGF0aWJlbCBtaXQgLS1zZXQtdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI3Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIlNldHplIGtlaW5lbiBVcHN0cmVhbSBmw7xyIGVpbmVuIGVudGZlcm50ZW4gUmVtb3RlLVRyYWNraW5nLUJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI5Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHRhZyIKK21zZ3N0ciAiU2V0emUga2VpbmVuIFVwc3RyZWFtIGbDvHIgZWluZW4gVGFnIGVpbmVzIFJlbW90ZS1SZXBvc2l0b3JpZXMuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzMQorbXNnaWQgInVua25vd24gYnJhbmNoIHR5cGUiCittc2dzdHIgIlVuYmVrYW5udGVyIEJyYW5jaC1UeXAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMzCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorIktlaW5lbiBRdWVsbC1CcmFuY2ggZ2VmdW5kZW4uXG4iCisiU2llIG3DvHNzZW4gYmVpIGRlciBPcHRpb24gLS1zZXQtdXBzdHJlYW0gZ2VuYXUgZWluZW4gQnJhbmNoIGFuZ2ViZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU1OSBidWlsdGluL2ZldGNoLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICJGb3JkZXJlIGFuIHZvbiAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2OSBidWlsdGluL2ZldGNoLmM6MTYyNCBidWlsdGluL3JlbW90ZS5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIktvbm50ZSBuaWNodCB2b24gJXMgYW5mb3JkZXJuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYW5mb3JkZXJuIChFeGl0LUNvZGU6ICVkKVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY4NAorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisiS2VpbiBSZW1vdGUtUmVwb3NpdG9yeSBhbmdlZ2ViZW4uIEJpdHRlIGdlYmVuIFNpZSBlbnR3ZWRlciBlaW5lIFVSTFxuIgorIm9kZXIgZGVuIE5hbWVuIGRlcyBSZW1vdGUtUmVwb3NpdG9yaWVzIGFuLCB2b24gd2VsY2hlbSBuZXVlXG4iCisiQ29tbWl0cyBhbmdlZm9yZGVydCB3ZXJkZW4gc29sbGVuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MjEKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICJTaWUgbcO8c3NlbiBkZW4gTmFtZW4gZGVzIFRhZ3MgYW5nZWJlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcxCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTmVnYXRpdmUgVGllZmUgd2lyZCB2b24gLS1kZWVwZW4gbmljaHQgdW50ZXJzdMO8dHp0LiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzMKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiB1bmQgLS1kZXB0aCBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3OAorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tZGVwdGggdW5kIC0tdW5zaGFsbG93IGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MAorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLXVuc2hhbGxvdyBrYW5uIG5pY2h0IGluIGVpbmVtIFJlcG9zaXRvcnkgbWl0IHZvbGxzdMOkbmRpZ2VyICIKKyJIaXN0b3JpZSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3OTYKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgYWt6ZXB0aWVydCBrZWluIFJlcG9zaXRvcnkgYWxzIEFyZ3VtZW50IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5OAorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwga2FubiBuaWNodCBtaXQgUmVmc3BlY3MgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIktlaW4gUmVtb3RlLVJlcG9zaXRvcnkgKGVpbnplbG4gb2RlciBHcnVwcGUpOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTQKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJEYXMgQWJob2xlbiBlaW5lciBHcnVwcGUgdm9uIFJlbW90ZS1SZXBvc2l0b3JpZXMga2FubiBuaWNodCBtaXQgZGVyIEFuZ2FiZVxuIgorInZvbiBSZWZzcGVjcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MzIKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKyItLWZpbHRlciBrYW5uIG51ciBtaXQgZGVuIFJlbW90ZS1SZXBvc2l0b3JpZXMgdmVyd2VuZGV0IHdlcmRlbixcbiIKKyJkaWUgaW4gY29yZS5wYXJ0aWFsQ2xvbmUga29uZmlndXJpZXJ0IHNpbmQuIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxOAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxCZXNjaHJlaWJ1bmc+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSAiCisiPERhdGVpPl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NAorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAiSGlzdG9yaWUgbWl0IGjDtmNoc3RlbnMgPG4+IEVpbnRyw6RnZW4gdm9uIFwic2hvcnRsb2dcIiBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiQWxpYXMgZsO8ciAtLWxvZyAodmVyYWx0ZXQpIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODAKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJUZXh0IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgIjxUZXh0PiBhbHMgQmVzY2hyZWlidW5nc2FuZmFuZyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MgorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICJEYXRlaSB6dW0gRWlubGVzZW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs8T3B0aW9uZW4+XSBbPE11c3Rlcj5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPENvbW1pdD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxPYmpla3Q+XV0gWy0tbm8tY29udGFpbnMgWzxDb21taXQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiUGxhdHpoYWx0ZXIgYWxzIFNoZWxsLVN0cmluZyBmb3JtYXRpZXJlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAiUGxhdHpoYWx0ZXIgYWxzIFBlcmwtU3RyaW5nIGZvcm1hdGllcmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIlBsYXR6aGFsdGVyIGFscyBQeXRob24tU3RyaW5nIGZvcm1hdGllcmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgIlBsYXR6aGFsdGVyIGFscyBUY2wtU3RyaW5nIGZvcm1hdGllcmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIm51ciA8bj4gcGFzc2VuZGUgUmVmZXJlbnplbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAiRm9ybWF0ZmFyYmVuIGJlYWNodGVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyCittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IgorbXNnc3RyICJudXIgYXVmIGRpZXNlcyBPYmpla3QgemVpZ2VuZGUgUmVmZXJlbnplbiBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIm51ciB6dXNhbW1lbmdlZsO8aHJ0ZSBSZWZlcmVuemVuIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIm51ciBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBSZWZlcmVuemVuIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibnVyIFJlZmVyZW56ZW4gYXVzZ2ViZW4sIGRpZSBkaWVzZW4gQ29tbWl0IGVudGhhbHRlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIm51ciBSZWZlcmVuemVuIGF1c2dlYmVuLCBkaWUgZGllc2VuIENvbW1pdCBuaWNodCBlbnRoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY4IGJ1aWx0aW4vZnNjay5jOjE0NyBidWlsdGluL2ZzY2suYzoxNDgKK21zZ2lkICJ1bmtub3duIgorbXNnc3RyICJ1bmJla2FubnQiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjEwMCBidWlsdGluL2ZzY2suYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gJXMgJXM6ICVzIgorbXNnc3RyICJGZWhsZXIgaW4gJXMgJXM6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAiV2FybnVuZyBpbiAlcyAlczogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE0MyBidWlsdGluL2ZzY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgIkZlaGxlcmhhZnRlIFZlcmtuw7xwZnVuZyB2b24gJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICJGYWxzY2hlciBPYmpla3R0eXAgaW4gVmVya27DvHBmdW5nLiIKKworIzogYnVpbHRpbi9mc2NrLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgdG8gJTdzICVzIgorbXNnc3RyICIiCisiRmVobGVyaGFmdGUgVmVya27DvHBmdW5nIHZvbiAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIG5hY2ggJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAiJXMgJXMgZmVobHQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAiJXMgJXMgbmljaHQgZXJyZWljaGJhciIKKworIzogYnVpbHRpbi9mc2NrLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICIlcyAlcyB1bnJlZmVyZW56aWVydCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICJLb25udGUgbG9zdC1mb3VuZCBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL2ZzY2suYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBhYnNjaGxpZcOfZW4uIgorCisjOiBidWlsdGluL2ZzY2suYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMiCittc2dzdHIgIlByw7xmZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSAoJWQgb2JqZWN0cykiCittc2dzdHIgIlByw7xmZSBLb25uZWt0aXZpdMOkdCAoJWQgT2JqZWt0ZSkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyAlcyIKK21zZ3N0ciAiUHLDvGZlICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjkKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgIkZlaGxlcmhhZnRlIFZlcmtuw7xwZnVuZ2VuIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAiV3VyemVsICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnZ2VkICVzICVzICglcykgaW4gJXMiCittc2dzdHIgIiVzICVzICglcykgaW4gJXMgZ2V0YWdndCIKKworIzogYnVpbHRpbi9mc2NrLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIgorbXNnc3RyICIlczogT2JqZWt0IGZlaGxlcmhhZnQgb2RlciBuaWNodCB2b3JoYW5kZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiVzOiBVbmfDvGx0aWdlciBSZWZsb2ctRWludHJhZyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgIlByw7xmZSBSZWZsb2cgJXMtPiVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIgorbXNnc3RyICIlczogVW5nw7xsdGlnZXIgU0hBMS1aZWlnZXIgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgY29tbWl0IgorbXNnc3RyICIlczoga2VpbiBDb21taXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOQorbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICJOb3RpejogS2VpbmUgU3RhbmRhcmRyZWZlcmVuemVuIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3Npbmc6ICVzIgorbXNnc3RyICIlczogT2JqZWt0IGZlaGxlcmhhZnQgb2RlciBuaWNodCB2b3JoYW5kZW46ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiJXM6IE9iamVrdCBrb25udGUgbmljaHQgZ2VwYXJzdCB3ZXJkZW46ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgU0hBMS1EYXRlaTogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3MgorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcnkiCittc2dzdHIgIlByw7xmZSBPYmpla3QtVmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAiUHLDvGZlIE9iamVrdC1WZXJ6ZWljaG5pc3NlIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgbGluayIKK21zZ3N0ciAiUHLDvGZlICVzIFZlcmtuw7xwZnVuZyIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBPYmpla3QtVHlwICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiCittc2dzdHIgIiVzIHplaWd0IGF1ZiBldHdhcyBzZWx0c2FtZXMgKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkZXRhY2hlZCBIRUFEIHBvaW50cyBhdCBub3RoaW5nIgorbXNnc3RyICIlczogbG9zZ2Vsw7ZzdGVyIEhFQUQgemVpZ3QgYXVmIG5pY2h0cyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAiTm90aXo6ICVzIHplaWd0IGF1ZiBlaW5lbiB1bmdlYm9yZW5lbiBCcmFuY2ggKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI0Cittc2dpZCAiQ2hlY2tpbmcgY2FjaGUgdHJlZSIKK21zZ3N0ciAiUHLDvGZlIENhY2hlLVZlcnplaWNobmlzIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIiVzOiBVbmfDvGx0aWdlciBTSEExLVplaWdlciBpbiBDYWNoZS1WZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzM4Cittc2dpZCAibm9uLXRyZWUgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAibm9uLXRyZWUgaW4gQ2FjaGUtVmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8T3B0aW9uZW4+XSBbPE9iamVrdD4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzUKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInVuZXJyZWljaGJhcmUgT2JqZWt0ZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc2Cittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICJ1bnJlZmVyZW56aWVydGUgT2JqZWt0ZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc3Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgIlRhZ3MgbWVsZGVuIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAiSGF1cHR3dXJ6ZWxuIG1lbGRlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc5Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgIkluZGV4LU9iamVrdGUgaW4gRXJyZWljaGJhcmtlaXRzcHLDvGZ1bmcgZWluYmV6aWVoZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MAorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiUmVmbG9ncyBpbiBFcnJlaWNoYmFya2VpdHNwcsO8ZnVuZyBlaW5iZXppZWhlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODEKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAiZWJlbnNvIFBha2V0ZSB1bmQgYWx0ZXJuYXRpdmUgT2JqZWt0ZSBiZXRyYWNodGVuIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAibnVyIEtvbm5la3Rpdml0w6R0IHByw7xmZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MworbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiZ2VuYXVlcmUgUHLDvGZ1bmcgYWt0aXZpZXJlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg1Cittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgInVucmVmZXJlbnppZXJ0ZSBPYmpla3RlIG5hY2ggLmdpdC9sb3N0LWZvdW5kIHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg2IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICJGb3J0c2Nocml0dHNhbnplaWdlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJhdXNmw7xocmxpY2hlIE5hbWVuIGbDvHIgZXJyZWljaGJhcmUgT2JqZWt0ZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODQ2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNQorbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIlByw7xmZSBPYmpla3RlIgorCisjOiBidWlsdGluL2ZzY2suYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBtaXNzaW5nIgorbXNnc3RyICIlczogT2JqZWt0IG5pY2h0IHZvcmhhbmRlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgUGFyYW1ldGVyOiBTSEEtMSBlcndhcnRldCwgJyVzJyBiZWtvbW1lbiIKKworIzogYnVpbHRpbi9nYy5jOjM1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW46ICVzIgorCisjOiBidWlsdGluL2djLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAnJXMnIHZhbHVlICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIFBhcnNlbiB2b24gJyVzJyBtaXQgZGVtIFdlcnQgJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjQ3NSBidWlsdGluL2luaXQtZGIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJLYW5uICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODQgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJrYW5uICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJEaWUgbGV0enRlIEF1c2bDvGhydW5nIHZvbiBcImdjIHJ1blwiIGVudGhpZWx0IGRpZSBmb2xnZW5kZW4gTWVsZHVuZ2VuLlxuIgorIkJpdHRlIGJlaGViZW4gU2llIGRhcyBIYXVwdHByb2JsZW0gdW5kIGzDtnNjaGVuIFNpZSAlcy5cbiIKKyJFaW4gYXV0b21hdGlzY2hlciBDbGVhbnVwIHdpcmQgbmljaHQgYXVzZ2Vmw7xocnQsIGJpcyBkaWVzZSBEYXRlaSBlbnRmZXJudFxuIgorInd1cmRlLlxuIgorIlxuIgorIiVzIgorCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgInVucmVmZXJlbnppZXJ0ZSBPYmpla3RlIGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9nYy5jOjU0MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAibWVociBHcsO8bmRsaWNoa2VpdCAoZXJow7ZodCBMYXVmemVpdCkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJcImF1dG8tZ2NcIiBNb2R1cyBha3RpdmllcmVuIgorCisjOiBidWlsdGluL2djLmM6NTQ1Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgIiIKKyJBdXNmw7xocnVuZyB2b24gXCJnaXQgZ2NcIiBlcnp3aW5nZW4sIHNlbGJzdCB3ZW5uIGVpbiBhbmRlcmVzXG4iCisiXCJnaXQgZ2NcIiBiZXJlaXRzIGF1c2dlZsO8aHJ0IHdpcmQiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDgKK21zZ2lkICJyZXBhY2sgYWxsIG90aGVyIHBhY2tzIGV4Y2VwdCB0aGUgbGFyZ2VzdCBwYWNrIgorbXNnc3RyICJhbGxlIGFuZGVyZW4gUGFrZXRlLCBhdcOfZXIgZGFzIGdyw7bDn3RlIFBha2V0LCBuZXUgcGFja2VuIgorCisjOiBidWlsdGluL2djLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBnYy5sb2dleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIFBhcnNlbiBkZXMgV2VydGVzICclcycgdm9uIGdjLmxvZ2V4cGlyeS4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gUGFyc2VuIGRlcyBcInBydW5lIGV4cGlyeVwiIFdlcnRlcyAlcyIKKworIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIkRpZSBEYXRlbmJhbmsgZGVzIFJlcG9zaXRvcmllcyB3aXJkIGbDvHIgZWluZSBvcHRpbWFsZSBQZXJmb3JtYW5jZSBpbVxuIgorIkhpbnRlcmdydW5kIGtvbXByaW1pZXJ0LlxuIgorCisjOiBidWlsdGluL2djLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIkRpZSBEYXRlbmJhbmsgZGVzIFByb2pla3RhcmNoaXZzIHdpcmQgZsO8ciBlaW5lIG9wdGltYWxlIFBlcmZvcm1hbmNlICIKKyJrb21wcmltaWVydC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICJTaWVoZSBcImdpdCBoZWxwIGdjXCIgZsO8ciBtYW51ZWxsZXMgQXVmcsOkdW1lbi5cbiIKKworIzogYnVpbHRpbi9nYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2MgaXMgYWxyZWFkeSBydW5uaW5nIG9uIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2UgaWYgbm90KSIKK21zZ3N0ciAiIgorIlwiZ2l0IGdjXCIgd2lyZCBiZXJlaXRzIGF1ZiBNYXNjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+IGF1c2dlZsO8aHJ0XG4iCisiKGJlbnV0emVuIFNpZSAtLWZvcmNlIGZhbGxzIG5pY2h0KSIKKworIzogYnVpbHRpbi9nYy5jOjY5NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorIkVzIGdpYnQgenUgdmllbGUgdW5lcnJlaWNoYmFyZSBsb3NlIE9iamVrdGU7IGbDvGhyZW4gU2llICdnaXQgcHJ1bmUnIGF1cywgdW0gIgorImRpZXNlIHp1IGzDtnNjaGVuLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjkKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs8T3B0aW9uZW4+XSBbLWVdIDxNdXN0ZXI+IFs8Q29tbWl0Pi4uLl0gW1stLV0gPFBmYWQ+Li4uXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcDogRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZWluZXMgVGhyZWFkOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlIEFuemFobCB2b24gVGhyZWFkcyAoJWQpIGbDvHIgJXMgYW5nZWdlYmVuIgorCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MjcKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICJrZWluZSBVbnRlcnN0w7x0enVuZyB2b24gVGhyZWFkcywgJyVzJyB3aXJkIGlnbm9yaWVydCIKKworIzogYnVpbHRpbi9ncmVwLmM6NDY3IGJ1aWx0aW4vZ3JlcC5jOjU5MiBidWlsdGluL2dyZXAuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJrb25udGUgXCJUcmVlXCItT2JqZWt0ICglcykgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJrYW5uIFwiZ3JlcFwiIG5pY2h0IG1pdCBPYmpla3RlbiBkZXMgVHlwcyAlcyBkdXJjaGbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJTY2hhbHRlciAnJWMnIGVyd2FydGV0IGVpbmVuIG51bWVyaXNjaGVuIFdlcnQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgImltIEluZGV4IGFuc3RhdHQgaW0gQXJiZWl0c3ZlcnplaWNobmlzIHN1Y2hlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE3Cittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgImF1Y2ggaW4gSW5oYWx0ZW4gZmluZGVuLCBkaWUgbmljaHQgdm9uIEdpdCB2ZXJ3YWx0ZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTkKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgImluIHZlcnNpb25pZXJ0ZW4gdW5kIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIHN1Y2hlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIxCittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICJEYXRlaWVuLCBkaWUgw7xiZXIgJy5naXRpZ25vcmUnIGFuZ2VnZWJlbiBzaW5kLCBpZ25vcmllcmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjMKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgInJla3Vyc2l2ZSBTdWNoZSBpbiBqZWRlbSBTdWJtb2R1bCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIlplaWxlbiBvaG5lIMOcYmVyZWluc3RpbW11bmdlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI4Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAiw5xiZXJlaW5zdGltbXVuZ2VuIHVuYWJow6RuZ2lnIHZvbiBHcm/Dny0gdW5kIEtsZWluc2NocmVpYnVuZyBmaW5kZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMAorbXNnaWQgIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIgorbXNnc3RyICJudXIgZ2FuemUgV8O2cnRlciBzdWNoZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMgorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgImJpbsOkcmUgRGF0ZWllbiBhbHMgVGV4dCB2ZXJhcmJlaXRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM0Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJrZWluZSBNdXN0ZXIgaW4gQmluw6RyZGF0ZWllbiBmaW5kZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiYmluw6RyZSBEYXRlaWVuIG1pdCBcInRleHRjb252XCItRmlsdGVybiB2ZXJhcmJlaXRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiaW4gVW50ZXJ2ZXJ6ZWljaG5pc3NlbiBzdWNoZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQxCittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICJow7ZjaHN0ZW5zIDxUaWVmZT4gRWJlbmVuIGR1cmNobGF1ZmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDUKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiZXJ3ZWl0ZXJ0ZSByZWd1bMOkcmUgQXVzZHLDvGNrZSBhdXMgUE9TSVggdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiCittc2dzdHIgImdydW5kbGVnZW5kZSByZWd1bMOkcmUgQXVzZHLDvGNrZSBhdXMgUE9TSVggdmVyd2VuZGVuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJNdXN0ZXIgYWxzIGZlc3RlIFplaWNoZW5rZXR0ZW4gaW50ZXJwcmV0aWVyZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiUGVybC1rb21wYXRpYmxlIHJlZ3Vsw6RyZSBBdXNkcsO8Y2tlIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIlplaWxlbm51bW1lcm4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OAorbXNnaWQgInNob3cgY29sdW1uIG51bWJlciBvZiBmaXJzdCBtYXRjaCIKK21zZ3N0ciAiTnVtbWVyIGRlciBTcGFsdGUgZGVzIGVyc3RlbiBUcmVmZmVycyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgImtlaW5lIERhdGVpbmFtZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJEYXRlaW5hbWVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjIKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJEYXRlaW5hbWVuIHJlbGF0aXYgenVtIFByb2pla3R2ZXJ6ZWljaG5pcyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJudXIgRGF0ZWluYW1lbiBhbnplaWdlbiBhbnN0YXR0IMO8YmVyZWluc3RpbW1lbmRlIFplaWxlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIlN5bm9ueW0gZsO8ciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJudXIgZGllIERhdGVpbmFtZW4gb2huZSDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3MQorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgIk5VTC1aZWljaGVuIG5hY2ggRGF0ZWluYW1lbiBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAibnVyIMO8YmVyZWluc3RpbW1lbmRlIFRlaWxlIGRlciBaZWlsZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc2Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiYW5zdGF0dCBkZXIgWmVpbGVuLCBkaWUgQW56YWhsIGRlciDDvGJlcmVpbnN0aW1tZW5kZW4gWmVpbGVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzcKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAiw5xiZXJlaW5zdGltbXVuZ2VuIGhlcnZvcmhlYmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiIgorImVpbmUgTGVlcnplaWxlIHp3aXNjaGVuIMOcYmVyZWluc3RpbW11bmdlbiBpbiB2ZXJzY2hpZWRlbmVuIERhdGVpZW4gYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MQorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKyJkZW4gRGF0ZWluYW1lbiBudXIgZWlubWFsIG9iZXJoYWxiIGRlciDDnGJlcmVpbnN0aW1tdW5nZW4gYXVzIGRpZXNlciBEYXRlaSAiCisiYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICI8bj4gWmVpbGVuIHZvciB1bmQgbmFjaCBkZW4gw5xiZXJlaW5zdGltbXVuZ2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICI8bj4gWmVpbGVuIHZvciBkZW4gw5xiZXJlaW5zdGltbXVuZ2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIjxuPiBaZWlsZW4gbmFjaCBkZW4gw5xiZXJlaW5zdGltbXVuZ2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTEKK21zZ2lkICJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIgorbXNnc3RyICI8bj4gVGhyZWFkcyBiZW51dHplbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAiS3VyemZvcm0gZsO8ciAtQyBOVU0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NQorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgImVpbmUgWmVpbGUgbWl0IGRlbSBGdW5rdGlvbnNuYW1lbiB2b3Igw5xiZXJlaW5zdGltbXVuZ2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTcKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAiZGllIHVtZ2ViZW5kZSBGdW5rdGlvbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAwCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgIk11c3RlciB2b24gZWluZXIgRGF0ZWkgbGVzZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMgorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiPE11c3Rlcj4gZmluZGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDQKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICJNdXN0ZXIga29tYmluaWVyZW4sIGRpZSBtaXQgLWUgYW5nZWdlYmVuIHd1cmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE2Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgIsOcYmVyZWluc3RpbW11bmdlbiBudXIgZHVyY2ggQmVlbmRpZ3VuZ3NzdGF0dXMgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIiIKKyJudXIgw5xiZXJlaW5zdGltbXVuZ2VuIHZvbiBEYXRlaWVuIGFuemVpZ2VuLCBkaWUgYWxsZW4gTXVzdGVybiBlbnRzcHJlY2hlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgImdlcGFyc3RlcyBWZXJ6ZWljaG5pcyBmw7xyIFwiZ3JlcFwiLUF1c2RydWNrIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjQKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAiQW56ZWlnZXByb2dyYW1tIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjQKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAiRGF0ZWllbiBtaXQgw5xiZXJlaW5zdGltbXVuZ2VuIGltIEFuemVpZ2Vwcm9ncmFtbSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI4Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICJkZW4gQXVmcnVmIHZvbiBncmVwKDEpIGVybGF1YmVuICh2b24gZGllc2VyIFByb2dyYW1tdmVyc2lvbiBpZ25vcmllcnQpIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTIKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuIgorbXNnc3RyICJLZWluIE11c3RlciBhbmdlZ2ViZW4uIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI4Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIi0tbm8taW5kZXggb2RlciAtLXVudHJhY2tlZCBrw7ZubmVuIG5pY2h0IG1pdCBDb21taXRzIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICJLb25udGUgQ29tbWl0IG5pY2h0IGF1ZmzDtnNlbjogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJVbmfDvGx0aWdlIEtvbWJpbmF0aW9uIHZvbiBPcHRpb25lbiwgLS10aHJlYWRzIHdpcmQgaWdub3JpZXJ0LiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDAKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAiS2VpbmUgVW50ZXJzdMO8dHp1bmcgZsO8ciBUaHJlYWRzLCAtLXRocmVhZHMgd2lyZCBpZ25vcmllcnQuIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDczIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgInVuZ8O8bHRpZ2UgQW56YWhsIHZvbiBUaHJlYWRzIGFuZ2VnZWJlbiAoJWQpIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDk2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLW9wZW4tZmlsZXMtaW4tcGFnZXIga2FubiBudXIgaW5uZXJoYWxiIGRlcyAiCisiQXJiZWl0c3ZlcnplaWNobmlzc2VzIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTE5Cittc2dpZCAib3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAiRGllIE9wdGlvbiB3aXJkIG1pdCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI1Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWNhY2hlZCB1bmQgLS11bnRyYWNrZWQga8O2bm5lbiBuaWNodCBtaXQgLS1uby1pbmRleCB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEzMQorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIgorbXNnc3RyICIiCisiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQga2FubiBuaWNodCBtaXQgdmVyc2lvbmllcnRlbiBJbmhhbHRlbiB2ZXJ3ZW5kZXQgIgorIndlcmRlbi4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzkKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4iCittc2dzdHIgIi0tY2FjaGVkIHVuZCBcIlRyZWVcIi1PYmpla3RlIGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1Cittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8QXJ0Pl0gWy13XSBbLS1wYXRoPTxEYXRlaT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8RGF0ZWk+Li4uIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODYKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgIkFydCBkZXMgT2JqZWt0ZXMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJkYXMgT2JqZWt0IGluIGRpZSBPYmpla3RkYXRlbmJhbmsgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgImRhcyBPYmpla3Qgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgIkRhdGVpIHdpZSBzaWUgaXN0IHNwZWljaGVybiwgb2huZSBGaWx0ZXIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDQKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICIiCisiSGFzaCDDvGJlciB6dWbDpGxsaWdlIERhdGVuLCB6dXIgRXJ6ZXVndW5nIHZvbiBiZXNjaMOkZGlndGVuIE9iamVrdGVuIHp1clxuIgorIkZlaGxlcnN1Y2hlIGluIEdpdCwgZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAiRGF0ZWkgdmVyYXJiZWl0ZW4sIGFscyBvYiBzaWUgdm9uIGRpZXNlbSBQZmFkIHfDpHJlIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgImFsbGUgdm9yaGFuZGVuZW4gQmVmZWhsZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAiQW5sZWl0dW5nZW4gYXVzc2NobGllw59lbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgIkxpc3RlIHZvbiBhbGxnZW1laW4gdmVyd2VuZGV0ZW4gQW5sZWl0dW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5Cittc2dpZCAicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiCittc2dzdHIgImFsbGUgTmFtZW4gZGVyIEtvbmZpZ3VyYXRpb25zdmFyaWFibGVuIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2hlbHAuYzo1MQorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgIkhhbmRidWNoIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICJIYW5kYnVjaCBpbiBlaW5lbSBXZWJicm93c2VyIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICJJbmZvLVNlaXRlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgIkJlc2NocmVpYnVuZyBkZXMgQmVmZWhscyBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8QmVmZWhsPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJuaWNodCBlcmthbm50ZXMgSGlsZmVmb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJLb25udGUgZW1hY3NjbGllbnQgbmljaHQgc3RhcnRlbi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiS29ubnRlIFZlcnNpb24gZGVzIGVtYWNzY2xpZW50IG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJWZXJzaW9uIGRlcyBlbWFjc2NsaWVudCAnJWQnIGlzdCB6dSBhbHQgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uICclcyciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IFBmYWQgZsO8ciBuaWNodCB1bnRlcnN0w7x0enRlbiBIYW5kYnVjaGJldHJhY2h0ZXIuXG4iCisiU2llIGvDtm5udGVuIHN0YXR0ZGVzc2VuICdtYW4uPFdlcmt6ZXVnPi5jbWQnIGJlbnV0emVuLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IFByb2dyYW1tIGbDvHIgdW50ZXJzdMO8dHp0ZW4gSGFuZGJ1Y2hiZXRyYWNodGVyLlxuIgorIlNpZSBrw7ZubnRlbiBzdGF0dGRlc3NlbiAnbWFuLjxXZXJremV1Zz4ucGF0aCcgYmVudXR6ZW4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJzogdW5iZWthbm50ZXIgSGFuZGJ1Y2gtQmV0cmFjaHRlci4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2NworbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAia2VpbiBIYW5kYnVjaC1CZXRyYWNodGVyIGtvbm50ZSBtaXQgZGllc2VyIEFuZnJhZ2UgdW1nZWhlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc1Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAia2VpbiBJbmZvcm1hdGlvbnMtQmV0cmFjaHRlciBrb25udGUgbWl0IGRpZXNlciBBbmZyYWdlIHVtZ2VoZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICJGw7xyICclcycgd3VyZGUgZGVyIEFsaWFzICclcycgYW5nZWxlZ3QuIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDggZ2l0LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBhbGlhcy4lcyBTdHJpbmc6ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICJWZXJ3ZW5kdW5nOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiJ2dpdCBoZWxwIGNvbmZpZycgZsO8ciB3ZWl0ZXJlIEluZm9ybWF0aW9uZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAiT2JqZWt0LVR5cGVuIHBhc3NlbiBiZWkgJXMgbmljaHQgenVzYW1tZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIgorbXNnc3RyICJrb25udGUgZXJ3YXJ0ZXRlcyBPYmpla3QgJXMgbmljaHQgZW1wZmFuZ2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAiT2JqZWt0ICVzOiBlcndhcnRldGVyIFR5cCAlcywgJXMgZ2VmdW5kZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAia2FubiAlZCBCeXRlIG5pY2h0IGxlc2VuIgorbXNnc3RyWzFdICJrYW5uICVkIEJ5dGVzIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgInp1IGZyw7xoZXMgRGF0ZWllbmRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjkKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgRWluZ2FiZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInZlcndlbmRldGUgbWVociBCeXRlcyBhbHMgdmVyZsO8Z2JhciB3YXJlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjA0Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAiUGFrZXQgaXN0IHp1IGdyb8OfIGbDvHIgZGllIGFrdHVlbGxlIERlZmluaXRpb24gdm9uIG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJQYWtldCDDvGJlcnNjaHJlaXRldCBkaWUgbWF4aW1hbCBlcmxhdWJ0ZSBHcsO2w59lIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiS2FubiBQYWtldGRhdGVpICclcycgbmljaHQgw7ZmZm5lbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgIlBha2V0c2lnbmF0dXIgc3RpbW10IG5pY2h0IMO8YmVyZWluIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiUGFrZXR2ZXJzaW9uICU8UFJJdTMyPiBuaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAiUGFrZXQgaGF0IGVpbiB1bmfDvGx0aWdlcyBPYmpla3QgYmVpIFZlcnNhdHogJTxQUkl1TUFYPjogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICJEZWtvbXByaW1pZXJ1bmcgZ2FiICVkIHp1csO8Y2siCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUxNQorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgIldlcnQgZsO8ciBWZXJzYXR6IGJlaSBEaWZmZXJlbnpvYmpla3Qgw7xiZXJnZWxhdWZlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICIiCisiV2VydCBmw7xyIFZlcnNhdHogYmVpIERpZmZlcmVuem9iamVrdCBsaWVndCBhdcOfZXJoYWxiIGRlcyBnw7xsdGlnZW4gQmVyZWljaHMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJVbmJla2FubnRlciBPYmpla3QtVHlwICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjIKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJLYW5uIFBha2V0ZGF0ZWkgJXMgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gImZyw7xoemVpdGlnZXMgRW5kZSBkZXIgUGFrZXRkYXRlaSwgdmVybWlzc2UgJTxQUkl1TUFYPiBCeXRlIgorbXNnc3RyWzFdICJmcsO8aHplaXRpZ2VzIEVuZGUgZGVyIFBha2V0ZGF0ZWksIHZlcm1pc3NlICU8UFJJdU1BWD4gQnl0ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJlcm5zdGhhZnRlIElua29uc2lzdGVueiBuYWNoIERla29tcHJpbWllcnVuZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0MSBidWlsdGluL2luZGV4LXBhY2suYzo3NjQKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMyBidWlsdGluL2luZGV4LXBhY2suYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJTSEExIEtPTExJU0lPTiBNSVQgJXMgR0VGVU5ERU4gISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAia2FubiAlcyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICJLYW5uIGV4aXN0aWVyZW5kZSBJbmZvcm1hdGlvbmVuIHp1IE9iamVrdCAlcyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIkthbm4gZXhpc3RpZXJlbmRlcyBPYmpla3QgJXMgbmljaHQgbGVzZW4uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXMgQmxvYi1PYmpla3QgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNiBidWlsdGluL2luZGV4LXBhY2suYzo4NDUKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiCittc2dzdHIgImZzY2sgRmVobGVyIGluIGdlcGFja3RlbSBPYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiTmljaHQgYWxsZSBLaW5kLU9iamVrdGUgdm9uICVzIHNpbmQgZXJyZWljaGJhciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTE5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1MAorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiS29ubnRlIERhdGVpdW50ZXJzY2hpZWQgbmljaHQgYW53ZW5kZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiRW1wZmFuZ2UgT2JqZWt0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkluZGl6aWVyZSBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTUyCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJQYWtldCBpc3QgYmVzY2jDpGRpZ3QgKFNIQTEgdW50ZXJzY2hpZWRsaWNoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NworbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAia2FubiBQYWtldGRhdGVpIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJQYWtldGVuZGUgZW50aMOkbHQgbmljaHQgdmVyd2VuZGJhcmVuIEluaGFsdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3MgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIFwicGFyc2VfcGFja19vYmplY3RzKClcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NQorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIkzDtnNlIFVudGVyc2NoaWVkZSBhdWYiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2FubiBUaHJlYWQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ2Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVmbMO2c2VuIGRlciBVbnRlcnNjaGllZGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyWzBdICJhYmdlc2NobG9zc2VuIG1pdCAlZCBsb2thbGVtIE9iamVrdCIKK21zZ3N0clsxXSAiYWJnZXNjaGxvc3NlbiBtaXQgJWQgbG9rYWxlbiBPYmpla3RlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAiVW5lcndhcnRldGUgUHLDvGZzdW1tZSBmw7xyICVzIChGZXN0cGxhdHRlbmZlaGxlcj8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJQYWtldCBoYXQgJWQgdW5hdWZnZWzDtnN0ZW4gVW50ZXJzY2hpZWQiCittc2dzdHJbMV0gIlBha2V0IGhhdCAlZCB1bmF1ZmdlbMO2c3RlIFVudGVyc2NoaWVkZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAiS29ubnRlIGFuZ2Vow6RuZ3RlcyBPYmpla3QgKCVkKSBuaWNodCBrb21wcmltaWVyZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgImxva2FsZXMgT2JqZWt0ICVzIGlzdCBiZXNjaMOkZGlndCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAiTmFtZSBkZXIgUGFrZXRkYXRlaSAnJXMnIGVuZGV0IG5pY2h0IG1pdCAnLnBhY2snIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgIkthbm4gJXMgRGF0ZWkgJyVzJyBuaWNodCBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAiS2FubiBlYmVuIGdlc2NocmllYmVuZSAlcyBEYXRlaSAnJXMnIG5pY2h0IHNjaGxpZcOfZW4uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaGxpZcOfZW4gZGVyIFBha2V0ZGF0ZWkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJLYW5uIFBha2V0ZGF0ZWkgbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDgxCittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIkthbm4gSW5kZXhkYXRlaSBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgIlwicGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+XCIgaXN0IHVuZ8O8bHRpZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAiS2FubiBleGlzdGllcmVuZGUgUGFrZXRkYXRlaSAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAiS2FubiBleGlzdGllcmVuZGUgSW5kZXhkYXRlaSBmw7xyIFBha2V0ICclcycgbmljaHQgw7ZmZm5lbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY0MworIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICJrZWluIFVudGVyc2NoaWVkOiAlZCBPYmpla3QiCittc2dzdHJbMV0gImtlaW4gVW50ZXJzY2hpZWQ6ICVkIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAiTMOkbmdlIGRlciBPYmpla3QtTGlzdGUgPSAlZDogJWx1IE9iamVrdCIKK21zZ3N0clsxXSAiTMOkbmdlIGRlciBPYmpla3QtTGlzdGUgPSAlZDogJWx1IE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2ODkKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiS2FubiBuaWNodCB6dXLDvGNrIHp1bSBBcmJlaXRzdmVyemVpY2huaXMgd2VjaHNlbG4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0MQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc1NyBidWlsdGluL2luZGV4LXBhY2suYzoxNzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiJXMgaXN0IHVuZ8O8bHRpZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc3NworbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tZml4LXRoaW4ga2FubiBuaWNodCBvaG5lIC0tc3RkaW4gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzkKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tc3RkaW4gZXJmb3JkZXJ0IGVpbiBHaXQtUmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4NQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLXZlcmlmeSB3dXJkZSBvaG5lIE5hbWVuIGRlciBQYWtldGRhdGVpIGFuZ2VnZWJlbi4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzMgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MQorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICJmc2NrIEZlaGxlciBiZWltIFBhY2tlbiB2b24gT2JqZWt0ZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgImthbm4gVm9ybGFnZSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICJrYW5uIFZlcnplaWNobmlzICclcycgbmljaHQgw7ZmZm5lbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgImthbm4gVmVyd2VpcyAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgImthbm4gc3ltYm9saXNjaGUgVmVya27DvHBmdW5nICclcycgYXVmICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImthbm4gJyVzJyBuaWNodCBuYWNoICclcycga29waWVyZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICJpZ25vcmllcmUgVm9ybGFnZSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiCittc2dzdHIgIktlaW5lIFZvcmxhZ2VuIGluICVzIGdlZnVuZGVuLiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIgorbXNnc3RyICJrb3BpZXJlIGtlaW5lIFZvcmxhZ2VuIHZvbiAnJXMnOiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJrYW5uIG5pY2h0IG1pdCBEYXRlaXR5cCAlZCB1bWdlaGVuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBuYWNoICVzIHZlcnNjaGllYmVuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTQgYnVpbHRpbi9pbml0LWRiLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyBleGlzdGllcnQgYmVyZWl0cyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiQmVzdGVoZW5kZXMgdmVydGVpbHRlcyBHaXQtUmVwb3NpdG9yeSBpbiAlcyVzIG5ldWluaXRpYWxpc2llcnRcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJCZXN0ZWhlbmRlcyBHaXQtUmVwb3NpdG9yeSBpbiAlcyVzIG5ldWluaXRpYWxpc2llcnRcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkxlZXJlcyB2ZXJ0ZWlsdGVzIEdpdC1SZXBvc2l0b3J5IGluICVzJXMgaW5pdGlhbGlzaWVydFxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJMZWVyZXMgR2l0LVJlcG9zaXRvcnkgaW4gJXMlcyBpbml0aWFsaXNpZXJ0XG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08Vm9ybGFnZW52ZXJ6ZWljaG5pcz5dIFstLSIKKyJzaGFyZWRbPTxCZXJlY2h0aWd1bmdlbj5dXSBbPFZlcnplaWNobmlzPl0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICJCZXJlY2h0aWd1bmdlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkyCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICJhbmdlYmVuLCBkYXNzIGRhcyBHaXQtUmVwb3NpdG9yeSBtaXQgbWVocmVyZW4gQmVudXR6ZXJuIGdldGVpbHQgd2lyZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI5IGJ1aWx0aW4vaW5pdC1kYi5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgImthbm4gVmVyemVpY2huaXMgJXMgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICJrYW5uIG5pY2h0IGluIFZlcnplaWNobmlzICVzIHdlY2hzZWxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIiVzIChvZGVyIC0td29yay10cmVlPTxWZXJ6ZWljaG5pcz4pIG5pY2h0IGVybGF1YnQgb2huZSBTcGV6aWZpemllcnVuZyB2b24gJXMgIgorIihvZGVyIC0tZ2l0LWRpcj08VmVyemVpY2huaXM+KSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIkthbm4gbmljaHQgYXVmIEFyYmVpdHN2ZXJ6ZWljaG5pcyAnJXMnIHp1Z3JlaWZlbi4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTYKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjxUb2tlbj5bKD18Oik8V2VydD5dKS4uLl0gWzxEYXRlaT4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAidm9yaGFuZGVuZSBEYXRlaWVuIGRpcmVrdCBiZWFyYmVpdGVuIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk2Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAia8O8cnp0IGxlZXJlIEFuaMOkbmdlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICJ3byBkZXIgbmV1ZSBBbmhhbmcgcGxhdHppZXJ0IHdpcmQiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAxCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkFrdGlvbiwgd2VubiBBbmhhbmcgYmVyZWl0cyBleGlzdGllcnQiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAzCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgaXMgbWlzc2luZyIKK21zZ3N0ciAiQWt0aW9uLCB3ZW5uIEFuaGFuZyBmZWhsdCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiCittc2dzdHIgIm51ciBBbmjDpG5nZSBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICJSZWdlbG4gYXVzIEtvbmZpZ3VyYXRpb24gbmljaHQgYW53ZW5kZW4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgImR1cmNoIExlZXJ6ZWljaGVuIGZvcnRnZXNldHp0ZSBXZXJ0ZSB2ZXJiaW5kZW4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA4Cittc2dpZCAic2V0IHBhcnNpbmcgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4gZsO8ciBkYXMgUGFyc2VuIHNldHplbiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTAKK21zZ2lkICJkbyBub3QgdHJlYXQgLS0tIHNwZWNpYWxseSIKK21zZ3N0ciAiLS0tIG5pY2h0IHNwZXppZWxsIGJlaGFuZGVsbiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTEKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICJBbmhhbmciCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEyCittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgIkFuaGFuZy9BbmjDpG5nZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtLXRyYWlsZXIgdW5kIC0tb25seS1pbnB1dCBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgIgorIndlcmRlbi4iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMzCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAia2VpbmUgRGF0ZWkgenVyIGRpcmVrdGVuIEJlYXJiZWl0dW5nIGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzxPcHRpb25lbj5dIFs8Q29tbWl0YmVyZWljaD5dIFtbLS1dIDxQZmFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxPcHRpb25lbj5dIDxPYmpla3Q+Li4uIgorCisjOiBidWlsdGluL2xvZy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBPcHRpb24gZsO8ciAtLWRlY29yYXRlOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAiUXVlbGxlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICJcIm1haWxtYXBcIi1EYXRlaSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJcImRlY29yYXRlXCIgbnVyIGJlaSBSZWZlcmVuemVuIGFud2VuZGVuLCBkaWUgPE11c3Rlcj4gZW50c3ByZWNoZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5Cittc2dpZCAiZG8gbm90IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIlwiZGVjb3JhdGVcIiBuaWNodCBiZWkgUmVmZXJlbnplbiBhbndlbmRlbiwgZGllIDxNdXN0ZXI+IGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL2xvZy5jOjE4MAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgImRlY29yYXRlLU9wdGlvbmVuIgorCisjOiBidWlsdGluL2xvZy5jOjE4MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJWZXJhcmJlaXRldCBudXIgWmVpbGVuIGltIEJlcmVpY2ggbixtIGluIGRlciBEYXRlaSwgZ2V6w6RobHQgdm9uIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAibGV0enRlIEF1c2dhYmU6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6IHVuZ8O8bHRpZ2UgRGF0ZWkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUwIGJ1aWx0aW4vbG9nLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiS29ubnRlIE9iamVrdCAlcyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdHlwZTogJWQiCittc2dzdHIgIlVuYmVrYW5udGVyIFR5cDogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGNvdmVyIGZyb20gZGVzY3JpcHRpb24gbW9kZSIKK21zZ3N0ciAiIgorIiVzOiBVbmfDvGx0aWdlciBNb2R1cyBmw7xyIEVyc3RlbGx1bmcgZGVzIERlY2tibGF0dGVzIGF1cyBkZXIgQmVzY2hyZWlidW5nIgorCisjOiBidWlsdGluL2xvZy5jOjgyMQorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIG9obmUgV2VydCIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIk5hbWUgZGVzIEF1c2dhYmV2ZXJ6ZWljaG5pc3NlcyBpc3QgenUgbGFuZy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIkthbm4gUGF0Y2gtRGF0ZWkgJXMgbmljaHQgw7ZmZm5lbiIKKworIzogYnVpbHRpbi9sb2cuYzo5NjkKK21zZ2lkICJuZWVkIGV4YWN0bHkgb25lIHJhbmdlIgorbXNnc3RyICJCcmF1Y2hlIGdlbmF1IGVpbmVuIENvbW1pdC1CZXJlaWNoLiIKKworIzogYnVpbHRpbi9sb2cuYzo5NzkKK21zZ2lkICJub3QgYSByYW5nZSIKK21zZ3N0ciAiS2VpbiBDb21taXQtQmVyZWljaC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0MworbXNnaWQgImNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIkFuc2NocmVpYmVuIGJlbsO2dGlndCBFLU1haWwtRm9ybWF0IgorCisjOiBidWlsdGluL2xvZy5jOjExNDkKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGNvdmVyLWxldHRlciBmaWxlIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnN0ZWxsZW4gZGVyIERhdGVpIGbDvHIgZGFzIEFuc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgInVuZ8O8bHRpZ2VzIGluLXJlcGx5LXRvOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU1Cittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPHNpbmNlPiB8IDxyZXZpc2lvbi1yYW5nZT5dIgorbXNnc3RyICJnaXQgZm9ybWF0LXBhdGNoIFs8T3B0aW9uZW4+XSBbPHNlaXQ+IHwgPENvbW1pdGJlcmVpY2g+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEzCittc2dpZCAidHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIlp3ZWkgQXVzZ2FiZXZlcnplaWNobmlzc2U/IgorCisjOiBidWlsdGluL2xvZy5jOjE0MjQgYnVpbHRpbi9sb2cuYzoyMTk3IGJ1aWx0aW4vbG9nLmM6MjE5OSBidWlsdGluL2xvZy5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIlVuYmVrYW5udGVyIENvbW1pdCAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM0IGJ1aWx0aW4vcmVwbGFjZS5jOjU4IGJ1aWx0aW4vcmVwbGFjZS5jOjIwNworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFscyBnw7xsdGlnZSBSZWZlcmVueiBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzkKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJLb25udGUga2VpbmUgZXhha3RlIE1lcmdlLUJhc2lzIGZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgIiIKKyJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gQmVzdGltbWVuIGRlcyBVcHN0cmVhbS1CcmFuY2hlcy4gV2VubiBTaWUgZGVuIEJhc2lzLUNvbW1pdFxuIgorImF1dG9tYXRpc2NoIHNwZWljaGVybiBsYXNzZW4gbcO2Y2h0ZW4sIGJlbnV0emVuIFNpZSBiaXR0ZVxuIgorIidnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvJywgdW0gZWluZW0gUmVtb3RlLUJyYW5jaCB6dSBmb2xnZW4uXG4iCisiT2RlciBnZWJlbiBTaWUgZGVuIEJhc2lzLUNvbW1pdCBtaXQgJy0tYmFzZT08QmFzaXMtQ29tbWl0LUlkPicgbWFudWVsbCBhbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MworbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIkZlaGxlciBiZWltIEZpbmRlbiBlaW5lciBleGFrdGVuIE1lcmdlLUJhc2lzLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc0Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICJCYXNpcy1Db21taXQgc29sbHRlIGRlciBWb3Jnw6RuZ2VyIGRlciBSZXZpc2lvbnNsaXN0ZSBzZWluLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIkJhc2lzLUNvbW1pdCBzb2xsdGUgbmljaHQgaW4gZGVyIFJldmlzaW9uc2xpc3RlIGVudGhhbHRlbiBzZWluLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTMxCittc2dpZCAiY2Fubm90IGdldCBwYXRjaCBpZCIKK21zZ3N0ciAia2FubiBQYXRjaC1JZCBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBYmxlaXRlbiBkZXMgcmFuZ2UtZGlmZi1CZXJlaWNocy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYyOQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgIltQQVRDSCBuL21dIGF1Y2ggbWl0IGVpbnplbG5lbSBQYXRjaCB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzMgorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICJbUEFUQ0hdIGF1Y2ggbWl0IG1laHJlcmVuIFBhdGNoZXMgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAiQXVzZ2FiZSBkZXIgUGF0Y2hlcyBpbiBTdGFuZGFyZC1BdXNnYWJlIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzgKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiZWluIERlY2tibGF0dCBlcnpldWdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQwCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICJlaW5mYWNoZSBOdW1tZXJuZm9sZ2UgZsO8ciBkaWUgTmFtZW4gZGVyIEF1c2dhYmVkYXRlaWVuIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICJEYXRlaWVuZHVuZyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQyCittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgIjxEYXRlaWVuZHVuZz4gYW5zdGF0dCAnLnBhdGNoJyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgImRpZSBOdW1tZXJpZXJ1bmcgZGVyIFBhdGNoZXMgYmVpIDxuPiBhbnN0YXR0IGJlaSAxIGJlZ2lubmVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDYKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgImRpZSBTZXJpZSBhbHMgbi10ZSBGYXNzdW5nIGtlbm56ZWljaG5lbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiW1JGQyBQQVRDSF0gYW5zdGF0dCBbUEFUQ0hdIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICJNb2R1cyBmw7xyIEVyc3RlbGx1bmcgZGVzIERlY2tibGF0dGVzIGF1cyBkZXIgQmVzY2hyZWlidW5nIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICIiCisiRXJ6ZXVnZSBUZWlsZSBkZXMgRGVja2JsYXR0ZXMgYmFzaWVyZW5kIGF1ZiBkZXIgQmVzY2hyZWlidW5nIGRlcyBCcmFuY2hlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU0Cittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJOdXR6ZSBbPFByw6RmaXg+XSBzdGF0dCBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTcKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgImVyemV1Z3RlIERhdGVpZW4gaW4gPFZlcnplaWNobmlzPiBzcGVpY2hlcm4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MAorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICJbUEFUQ0hdIG5pY2h0IGVudGZlcm5lbi9oaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYzCittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAia2VpbmUgYmluw6RyZW4gVW50ZXJzY2hpZWRlIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjUKK21zZ2lkICJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIKK21zZ3N0ciAiSGFzaCBtaXQgTnVsbGVuIGluIFwiRnJvbVwiLUhlYWRlciBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY3Cittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICIiCisia2VpbmUgUGF0Y2hlcyBlaW5zY2hsaWXDn2VuLCBkaWUgZWluZW0gQ29tbWl0IGltIFVwc3RyZWFtLUJyYW5jaCBlbnRzcHJlY2hlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY5Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICJQYXRjaGZvcm1hdCBhbnN0YXR0IGRlcyBTdGFuZGFyZHMgYW56ZWlnZW4gKFBhdGNoICsgWnVzYW1tZW5mYXNzdW5nKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcxCittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICJFLU1haWwtRWluc3RlbGx1bmdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcyCittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJIZWFkZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgIkUtTWFpbC1IZWFkZXIgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAiRS1NYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAiXCJUbzpcIi1IZWFkZXIgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICJcIkNjOlwiLUhlYWRlciBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc4Cittc2dpZCAiaWRlbnQiCittc2dzdHIgIklkZW50IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzkKK21zZ2lkICJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIgorbXNnc3RyICIiCisiXCJGcm9tXCItQWRyZXNzZSBhdWYgPElkZW50PiBzZXR6ZW4gKG9kZXIgSWRlbnQgZGVzIENvbW1pdC1FcnN0ZWxsZXJzLCB3ZW5uICIKKyJmZWhsZW5kKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgxCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAibWVzc2FnZS1pZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgyCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICJhdXMgZXJzdGVyIEUtTWFpbCBlaW5lIEFudHdvcnQgenUgPG1lc3NhZ2UtaWQ+IG1hY2hlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgzIGJ1aWx0aW4vbG9nLmM6MTY4NgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICJHcmVuemUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgImRlbiBQYXRjaCBhbmjDpG5nZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NworbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgImRlbiBQYXRjaCBkaXJla3QgaW4gZGllIE5hY2hyaWNodCBlaW5mw7xnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICJOYWNocmljaHRlbnZlcmtldHR1bmcgYWt0aXZpZXJlbiwgU3RpbGU6IHNoYWxsb3csIGRlZXAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAiU2lnbmF0dXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAiZWluZSBTaWduYXR1ciBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk1Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgIkJhc2lzLUNvbW1pdCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk2Cittc2dpZCAiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIKK21zZ3N0ciAiZXJmb3JkZXJsaWNoZSBSZXZpc2lvbnMtSW5mb3JtYXRpb25lbiBkZXIgUGF0Y2gtU2VyaWUgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiZWluZSBTaWduYXR1ciBhdXMgZWluZXIgRGF0ZWkgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgImtlaW5lIERhdGVpbmFtZW4gZGVyIFBhdGNoZXMgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICJGb3JzY2hyaXR0c2FuemVpZ2Ugd8OkaHJlbmQgZGVyIEVyemV1Z3VuZyBkZXIgUGF0Y2hlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAzCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorIsOEbmRlcnVuZ2VuIGdlZ2Vuw7xiZXIgPENvbW1pdD4gaW0gRGVja2JsYXR0IG9kZXIgZWluemVsbmVtIFBhdGNoIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDYKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmVmc3BlYz4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorIsOEbmRlcnVuZ2VuIGdlZ2Vuw7xiZXIgPFJlZnNwZWM+IGltIERlY2tibGF0dCBvZGVyIGVpbnplbG5lbSBQYXRjaCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiUHJvemVudHNhdHogbWl0IHdlbGNoZW0gRXJ6ZXVndW5nIGdld2ljaHRldCB3aXJkIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBJZGVudGlmaWthdGlvbnN6ZWlsZTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwNworbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItbiB1bmQgLWsgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgdW5kIC1rIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMuIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTcKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tbmFtZS1vbmx5IGthbm4gbmljaHQgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLW5hbWUtc3RhdHVzIGthbm4gbmljaHQgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgyMQorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLWNoZWNrIGthbm4gbmljaHQgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg1NAorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICJTdGFuZGFyZC1BdXNnYWJlIG9kZXIgVmVyemVpY2huaXMsIHdlbGNoZXMgdm9uIGJlaWRlbT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk1OAorbXNnaWQgIi0taW50ZXJkaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiLS1pbnRlcmRpZmYgZXJmb3JkZXJ0IC0tY292ZXItbGV0dGVyIG9kZXIgZWluemVsbmVuIFBhdGNoLiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYyCittc2dpZCAiSW50ZXJkaWZmOiIKK21zZ3N0ciAiSW50ZXJkaWZmOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIkludGVyZGlmZiBnZWdlbiB2JWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIi0tY3JlYXRpb24tZmFjdG9yIGVyZm9yZGVydCAtLXJhbmdlLWRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk3MworbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0tcmFuZ2UtZGlmZiBlcmZvcmRlcnQgLS1jb3Zlci1sZXR0ZXIgb2RlciBlaW56ZWxuZW4gUGF0Y2guIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODEKK21zZ2lkICJSYW5nZS1kaWZmOiIKK21zZ3N0ciAiUmFuZ2UtRGlmZjoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSYW5nZS1kaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiUmFuZ2UtRGlmZiBnZWdlbiB2JWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFNpZ25hdHVyLURhdGVpICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiRXJ6ZXVnZSBQYXRjaGVzIgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBBdXNnYWJlZGF0ZWllbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjEzMgorbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzxVcHN0cmVhbT4gWzxCcmFuY2g+IFs8TGltaXQ+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisiS29ubnRlIGdlZm9sZ3RlbiBSZW1vdGUtQnJhbmNoIG5pY2h0IGZpbmRlbiwgYml0dGUgZ2ViZW4gU2llIDxVcHN0cmVhbT4gIgorIm1hbnVlbGwgYW4uXG4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzAKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPE9wdGlvbmVuPl0gWzxEYXRlaT4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI2Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiZGVuIERhdGVpc3RhdHVzIG1pdCBUYWdzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI4Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgIiIKKyJLbGVpbmJ1Y2hzdGFiZW4gZsO8ciBEYXRlaWVuIG1pdCAnYXNzdW1lIHVuY2hhbmdlZCcgTWFya2llcnVuZyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICJLbGVpbmJ1Y2hzdGFiZW4gZsO8ciAnZnNtb25pdG9yIGNsZWFuJyBEYXRlaWVuIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMgorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICJ6d2lzY2hlbmdlc3BlaWNoZXJ0ZSBEYXRlaWVuIGluIGRlciBBdXNnYWJlIGFuemVpZ2VuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzQKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiZW50ZmVybnRlIERhdGVpZW4gaW4gZGVyIEF1c2dhYmUgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzYKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImdlw6RuZGVydGUgRGF0ZWllbiBpbiBkZXIgQXVzZ2FiZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzOAorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAic29uc3RpZ2UgRGF0ZWllbiBpbiBkZXIgQXVzZ2FiZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJpZ25vcmllcnRlIERhdGVpZW4gaW4gZGVyIEF1c2dhYmUgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorIk9iamVrdG5hbWVuIHZvbiBJbmhhbHRlbiwgZGllIHp1bSBDb21taXQgdm9yZ2VtZXJrdCBzaW5kLCBpbiBkZXIgQXVzZ2FiZSAiCisiYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICJEYXRlaWVuIGltIERhdGVpc3lzdGVtLCBkaWUgZ2Vsw7ZzY2h0IHdlcmRlbiBtw7xzc2VuLCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAibnVyIE5hbWVuIHZvbiAnc29uc3RpZ2VuJyBWZXJ6ZWljaG5pc3NlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OQorbXNnaWQgInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIgorbXNnc3RyICJaZWlsZW5lbmRlbiB2b24gRGF0ZWllbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgImtlaW5lIGxlZXJlbiBWZXJ6ZWljaG5pc3NlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGluIGRlciBBdXNnYWJlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIidyZXNvbHZlLXVuZG8nIEluZm9ybWF0aW9uZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTgKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgIkRhdGVpZW4gYXVzbGFzc2VuLCBkaWUgZWluZW0gTXVzdGVyIGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiTXVzdGVyLCBnZWxlc2VuIHZvbiA8RGF0ZWk+LCBhdXNzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgInp1c8OkdHpsaWNoZSBwcm8tVmVyemVpY2huaXMgQXVzY2hsdXNzbXVzdGVyIGF1cyA8RGF0ZWk+IGF1c2xlc2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY2Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAiZGllIHN0YW5kYXJkbcOkw59pZ2VuIEdpdC1BdXNzY2hsw7xzc2UgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzAKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiQXVzZ2FiZSByZWxhdGl2IHp1bSBQcm9qZWt0dmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzMKK21zZ2lkICJyZWN1cnNlIHRocm91Z2ggc3VibW9kdWxlcyIKK21zZ3N0ciAiUmVrdXJzaW9uIGluIFN1Ym1vZHVsZW4gZHVyY2hmw7xocmVuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICJhbHMgRmVobGVyIGJlaGFuZGVsbiwgd2VubiBzaWNoIGVpbmUgPERhdGVpPiBuaWNodCBpbSBJbmRleCBiZWZpbmRldCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NgorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICJDb21taXQtUmVmZXJlbnoiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisidm9yZ2ViZW4sIGRhc3MgUGZhZGUsIGRpZSBzZWl0IDxDb21taXQtUmVmZXJlbno+IGdlbMO2c2NodCB3dXJkZW4sIGltbWVyIG5vY2ggIgorInZvcmhhbmRlbiBzaW5kIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAiQXVzZ2FiZW4genVyIEZlaGxlcnN1Y2hlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PFByb2dyYW1tPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPFJlcG9zaXRvcnk+IFs8UmVmZXJlbnplbj4uLi5dXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICJVUkwgZGVzIFJlbW90ZS1SZXBvc2l0b3JpZXMgbmljaHQgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJleGVjIgorbXNnc3RyICJQcm9ncmFtbSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MSBidWlsdGluL2xzLXJlbW90ZS5jOjYzCittc2dpZCAicGF0aCBvZiBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSBob3N0IgorbXNnc3RyICJQZmFkIHp1IFwiZ2l0LXVwbG9hZC1wYWNrXCIgYXVmIGRlciBHZWdlbnNlaXRlIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAiYXVmIFRhZ3MgZWluc2NocsOkbmtlbiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICJhdWYgQnJhbmNoZXMgZWluc2NocsOkbmtlbiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NworbXNnaWQgImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIgorbXNnc3RyICJrZWluZSBUYWdzIGFuemVpZ2VuLCBkaWUgYW5kZXJlIFRhZ3MgZW50aGFsdGVuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgInVybC48QmFzaXM+Lmluc3RlYWRPZiBiZXLDvGNrc2ljaHRpZ2VuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICIiCisibWl0IEV4aXQtQ29kZSAyIGJlZW5kZW4sIHdlbm4ga2VpbmUgw7xiZXJlaW5zdGltbWVuZGVuIFJlZmVyZW56ZW5cbiIKKyJnZWZ1bmRlbiB3dXJkZW4iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzUKK21zZ2lkICJzaG93IHVuZGVybHlpbmcgcmVmIGluIGFkZGl0aW9uIHRvIHRoZSBvYmplY3QgcG9pbnRlZCBieSBpdCIKK21zZ3N0ciAienVzw6R0emxpY2ggenVtIE9iamVrdCBkaWUgZGFyYXVmIHZlcndlaXNlbmRlbiBSZWZlcmVuemVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzozMAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs8T3B0aW9uZW4+XSA8Q29tbWl0LVJlZmVyZW56PiBbPFBmYWQ+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI4Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICJudXIgVmVyemVpY2huaXNzZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICJSZWt1cnNpb24gaW4gVW50ZXJ2ZXJ6ZWljaG5pc3NlbiBkdXJjaGbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgIlZlcnplaWNobmlzc2UgYmVpIFJla3Vyc2lvbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiRWludHLDpGdlIG1pdCBOVUwtQnl0ZSBhYnNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgIk9iamVrdGdyw7bDn2UgZWluc2NobGllw59lbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM4IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MAorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgIm51ciBEYXRlaW5hbWVuIGF1Zmxpc3RlbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAidm9sbHN0w6RuZGlnZSBQZmFkbmFtZW4gdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDUKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIiIKKyJkYXMgZ2VzYW10ZSBWZXJ6ZWljaG5pcyBhdWZsaXN0ZW47IG5pY2h0IG51ciBkYXMgYWt0dWVsbGUgVmVyemVpY2huaXMgIgorIihpbXBsaXppZXJ0IC0tZnVsbC1uYW1lKSIKKworIzogYnVpbHRpbi9tYWlsc3BsaXQuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgbWJveDogJyVzJyIKK21zZ3N0ciAiTGVlcmUgbWJveDogJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU1Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgImdpdCBtZXJnZSBbPE9wdGlvbmVuPl0gWzxDb21taXQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU2Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTcKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIlNjaGFsdGVyICdtJyBlcmZvcmRlcnQgZWluZW4gV2VydC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiT3B0aW9uIGAlcycgZXJmb3JkZXJ0IGVpbmVuIFdlcnQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIktvbm50ZSBNZXJnZS1TdHJhdGVnaWUgJyVzJyBuaWNodCBmaW5kZW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiVmVyZsO8Z2JhcmUgU3RyYXRlZ2llbiBzaW5kOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiVmVyZsO8Z2JhcmUgYmVudXR6ZXJkZWZpbmllcnRlIFN0cmF0ZWdpZW4gc2luZDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDQgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAia2VpbmUgWnVzYW1tZW5mYXNzdW5nIGRlciBVbnRlcnNjaGllZGUgYW0gU2NobHVzcyBkZXMgTWVyZ2VzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ3IGJ1aWx0aW4vcHVsbC5jOjE1NQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiZWluZSBadXNhbW1lbmZhc3N1bmcgZGVyIFVudGVyc2NoaWVkZSBhbSBTY2hsdXNzIGRlcyBNZXJnZXMgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDggYnVpbHRpbi9wdWxsLmM6MTU4Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKFN5bm9ueW0gZsO8ciAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUwIGJ1aWx0aW4vcHVsbC5jOjE2MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorIihow7ZjaHN0ZW5zIDxuPikgRWludHLDpGdlIHZvbiBcInNob3J0bG9nXCIgenVyIEJlc2NocmVpYnVuZyBkZXMgTWVyZ2UtQ29tbWl0cyAiCisiaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTMgYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgImVpbmVuIGVpbnplbG5lbiBDb21taXQgYW5zdGF0dCBlaW5lcyBNZXJnZXMgZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTUgYnVpbHRpbi9wdWxsLmM6MTcwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICJlaW5lbiBDb21taXQgZHVyY2hmw7xocmVuLCB3ZW5uIGRlciBNZXJnZSBlcmZvbGdyZWljaCB3YXIgKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NyBidWlsdGluL3B1bGwuYzoxNzMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgIkJlYXJiZWl0dW5nIGRlciBCZXNjaHJlaWJ1bmcgdm9yIGRlbSBDb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTkKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICJWb3JzcHVsZW4gZXJsYXViZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MSBidWlsdGluL3B1bGwuYzoxODAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICJhYmJyZWNoZW4sIHdlbm4ga2VpbiBWb3JzcHVsZW4gbcO2Z2xpY2ggaXN0IgorCisjOiBidWlsdGluL21lcmdlLmM6MjY1IGJ1aWx0aW4vcHVsbC5jOjE4MworbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiZGVuIGdlbmFubnRlbiBDb21taXQgYXVmIGVpbmUgZ8O8bHRpZ2UgR1BHLVNpZ25hdHVyIMO8YmVycHLDvGZlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE4NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTIgYnVpbHRpbi9yZWJhc2UuYzoxNTMxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgIlN0cmF0ZWdpZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL3B1bGwuYzoxODgKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgInp1IHZlcndlbmRlbmRlIE1lcmdlLVN0cmF0ZWdpZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIk9wdGlvbj1XZXJ0IgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vcHVsbC5jOjE5MgorbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIk9wdGlvbiBmw7xyIGF1c2dld8OkaGx0ZSBNZXJnZS1TdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzEKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIiIKKyJDb21taXQtQmVzY2hyZWlidW5nIHp1c2FtbWVuZsO8aHJlbiAoZsO8ciBlaW5lbiBNZXJnZSwgZGVyIGtlaW4gVm9yc3B1bGVuIHdhcikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzgKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiZGVuIHNpY2ggaW0gR2FuZ2UgYmVmaW5kbGljaGVuIE1lcmdlIGFiYnJlY2hlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MAorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgIi0tYWJvcnQsIGFiZXIgSW5kZXggdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcyB1bnZlcsOkbmRlcnQgbGFzc2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgyCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImRlbiBzaWNoIGltIEdhbmdlIGJlZmluZGxpY2hlbiBNZXJnZSBmb3J0c2V0emVuIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjg0IGJ1aWx0aW4vcHVsbC5jOjE5OQorbXNnaWQgImFsbG93IG1lcmdpbmcgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAiZXJsYXViZSBkYXMgWnVzYW1tZW5mw7xocmVuIHZvbiBuaWNodCB6dXNhbW1lbmjDpG5nZW5kZW4gSGlzdG9yaWVuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjkwCittc2dpZCAiYnlwYXNzIHByZS1tZXJnZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIkhvb2tzIHByZS1tZXJnZS1jb21taXQgdW5kIGNvbW1pdC1tc2cgdW1nZWhlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMwNworbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICJLb25udGUgXCJzdGFzaFwiIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEyCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJcInN0YXNoXCIgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAia2VpbiBnw7xsdGlnZXMgT2JqZWt0OiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMzOSBidWlsdGluL21lcmdlLmM6MzU2Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAicmVhZC10cmVlIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzg2Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAobmljaHRzIHp1IHF1ZXRzY2hlbikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJRdWV0c2NoZSBDb21taXQgLS0gSEVBRCB3aXJkIG5pY2h0IGFrdHVhbGlzaWVydFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiS2VpbmUgTWVyZ2UtQ29tbWl0LUJlc2NocmVpYnVuZyAtLSBIRUFEIHdpcmQgbmljaHQgYWt0dWFsaXNpZXJ0XG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyB6ZWlndCBhdWYga2VpbmVuIENvbW1pdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBicmFuY2guJXMubWVyZ2VvcHRpb25zIFN0cmluZzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDUKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJFcyB3aXJkIG51ciBkZXIgTWVyZ2Ugdm9uIHp3ZWkgQnJhbmNoZXMgYmVoYW5kZWx0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJVbmJla2FubnRlIE9wdGlvbiBmw7xyIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgImtvbm50ZSAlcyBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICJrb25udGUgbmljaHQgdm9uICclcycgbGVzZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisiTWVyZ2Ugd3VyZGUgbmljaHQgY29tbWl0dGV0OyBiZW51dHplbiBTaWUgJ2dpdCBjb21taXQnLCB1bSBkZW4gTWVyZ2UgIgorImFienVzY2hsaWXDn2VuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODAxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkJpdHRlIGdlYmVuIFNpZSBlaW5lIENvbW1pdC1CZXNjaHJlaWJ1bmcgZWluLCB1bSB6dSBlcmtsw6RyZW4sIHdhcnVtIGRpZXNlclxuIgorIk1lcmdlIGVyZm9yZGVybGljaCBpc3QsIGluc2Jlc29uZGVyZSB3ZW5uIGVzIGVpbmVuIGFrdHVhbGlzaWVydGVuXG4iCisiVXBzdHJlYW0tQnJhbmNoIG1pdCBlaW5lbSBUaGVtYS1CcmFuY2ggenVzYW1tZW5mw7xocnQuXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDYKK21zZ2lkICJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICJFaW5lIGxlZXJlIENvbW1pdC1CZXNjaHJlaWJ1bmcgYnJpY2h0IGRlbiBDb21taXQgYWIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJaZWlsZW4sIGRpZSBtaXQgJyVjJyBiZWdpbm5lbiwgd2VyZGVuIGlnbm9yaWVydCxcbiIKKyJ1bmQgZWluZSBsZWVyZSBCZXNjaHJlaWJ1bmcgYnJpY2h0IGRlbiBDb21taXQgYWIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjIKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIkxlZXJlIENvbW1pdC1CZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICJXdW5kZXJiYXIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIkF1dG9tYXRpc2NoZXIgTWVyZ2UgZmVobGdlc2NobGFnZW47IGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGNvbW1pdHRlbiAiCisiU2llIGRhbm4gZGFzIEVyZ2VibmlzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTc3Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJTaWUgYmVmaW5kZW4gc2ljaCBhdWYga2VpbmVtIEJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzkKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIktlaW4gUmVtb3RlLVJlcG9zaXRvcnkgZsO8ciBkZW4gYWt0dWVsbGVuIEJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODEKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKyJFcyBpc3Qga2VpbiBTdGFuZGFyZC1VcHN0cmVhbS1CcmFuY2ggZsO8ciBkZW4gYWt0dWVsbGVuIEJyYW5jaCBkZWZpbmllcnQuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIktlaW4gUmVtb3RlLVRyYWNraW5nLUJyYW5jaCBmw7xyICVzIHZvbiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIKK21zZ3N0ciAiRmVobGVyaGFmdGVyIFdlcnQgJyVzJyBpbiBVbWdlYnVuZ3N2YXJpYWJsZSAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgIm5pY2h0cyB3YXMgd2lyIGluICVzIHp1c2FtbWVuZsO8aHJlbiBrw7ZubmVuOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODAKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAibmljaHRzIHdhcyB3aXIgenVzYW1tZW5mw7xocmVuIGvDtm5uZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjgzCittc2dpZCAiLS1hYm9ydCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1hYm9ydCBha3plcHRpZXJ0IGtlaW5lIEFyZ3VtZW50ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODcKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIkVzIGdpYnQga2VpbmVuIE1lcmdlIGFienVicmVjaGVuIChNRVJHRV9IRUFEIGZlaGx0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTYKK21zZ2lkICItLXF1aXQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tcXVpdCBlcndhcnRldCBrZWluZSBBcmd1bWVudGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzA5Cittc2dpZCAiLS1jb250aW51ZSBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jb250aW51ZSBlcndhcnRldCBrZWluZSBBcmd1bWVudGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzEzCittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgaW4gcHJvZ3Jlc3MgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJFcyBpc3Qga2VpbiBNZXJnZSBpbSBHYW5nZSAoTUVSR0VfSEVBRCBmZWhsdCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJTaWUgaGFiZW4gSWhyZW4gTWVyZ2UgbmljaHQgYWJnZXNjaGxvc3NlbiAoTUVSR0VfSEVBRCBleGlzdGllcnQpLlxuIgorIkJpdHRlIGNvbW1pdHRlbiBTaWUgSWhyZSDDhG5kZXJ1bmdlbiwgYmV2b3IgU2llIGRlbiBNZXJnZSBhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiU2llIGhhYmVuIFwiY2hlcnJ5LXBpY2tcIiBuaWNodCBhYmdlc2NobG9zc2VuIChDSEVSUllfUElDS19IRUFEIGV4aXN0aWVydCkuXG4iCisiQml0dGUgY29tbWl0dGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuLCBiZXZvciBTaWUgZGVuIE1lcmdlIGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiIgorIlNpZSBoYWJlbiBcImNoZXJyeS1waWNrXCIgbmljaHQgYWJnZXNjaGxvc3NlbiAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdGllcnQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiU2llIGvDtm5uZW4gLS1zcXVhc2ggbmljaHQgbWl0IC0tbm8tZmYga29tYmluaWVyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1NQorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tY29tbWl0LiIKK21zZ3N0ciAiU2llIGvDtm5uZW4gLS1zcXVhc2ggbmljaHQgbWl0IC0tY29tbWl0IGtvbWJpbmllcmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiS2VpbiBDb21taXQgYW5nZWdlYmVuIHVuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBpc3QgbmljaHQgZ2VzZXR6dC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzg4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIiIKKyJCaW4gYXVmIGVpbmVtIENvbW1pdCwgZGVyIG5vY2ggZ2Vib3JlbiB3aXJkOyBrYW5uIFwic3F1YXNoXCIgbmljaHQgYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKyJOaWNodCB2b3J6dXNwdWxlbmRlciBDb21taXQga2FubiBuaWNodCBpbiBlaW5lbSBsZWVyZW4gQnJhbmNoIHZlcndlbmRldCAiCisid2VyZGVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBuaWNodHMgd2FzIHdpciB6dXNhbW1lbmbDvGhyZW4ga8O2bm5lbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTcKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJLYW5uIG51ciBleGFrdCBlaW5lbiBDb21taXQgaW4gZWluZW0gbGVlcmVuIEJyYW5jaCB6dXNhbW1lbmbDvGhyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ3NgorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIlZlcndlaWdlcmUgZGVuIE1lcmdlIHZvbiBuaWNodCB6dXNhbW1lbmjDpG5nZW5kZW4gSGlzdG9yaWVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODUKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICJCZXJlaXRzIGFrdHVlbGwuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiUHJvYmllcmUgd2lya2xpY2ggdHJpdmlhbGVuIFwiaW4taW5kZXhcIi1NZXJnZSAuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiTmVpbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NjkKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIKK21zZ3N0ciAiQmVyZWl0cyBha3R1ZWxsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzUKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIlZvcnNwdWxlbiBuaWNodCBtw7ZnbGljaCwgYnJlY2hlIGFiLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTggYnVpbHRpbi9tZXJnZS5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIlLDvGNrbGF1ZiBkZXMgVmVyemVpY2huaXNzZXMgYmlzIHp1bSBVcnNwcnVuZyAuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIlByb2JpZXJlIE1lcmdlLVN0cmF0ZWdpZSAlcyAuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIktlaW5lIE1lcmdlLVN0cmF0ZWdpZSBiZWhhbmRlbHQgZGllc2VuIE1lcmdlLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiTWVyZ2UgbWl0IFN0cmF0ZWdpZSAlcyBmZWhsZ2VzY2hsYWdlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIkJlbnV0emVuIFNpZSBcIiVzXCIsIHVtIGRpZSBBdWZsw7ZzdW5nIHBlciBIYW5kIHZvcnp1YmVyZWl0ZW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKyJBdXRvbWF0aXNjaGVyIE1lcmdlIGFiZ2VzY2hsb3NzZW47IGhhbHRlLCB3aWUgZ2V3w7xuc2NodCwgdm9yIGRlbSBDb21taXQgYW5cbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Q29tbWl0PiA8Q29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxDb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPENvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM1Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Q29tbWl0PiA8Q29tbWl0PiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxSZWZlcmVuej4gWzxDb21taXQ+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICJBdXNnYWJlIGFsbGVyIGdlbWVpbnNhbWVuIFZvcmfDpG5nZXItQ29tbWl0cyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU1Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICJWb3Jnw6RuZ2VyLUNvbW1pdHMgZsO8ciBlaW5lbiBlaW56ZWxuZW4gbi1XZWdlLU1lcmdlIGZpbmRlbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU3Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgIkNvbW1pdHMgYXVmbGlzdGVuLCBkaWUgbmljaHQgZHVyY2ggQW5kZXJlIGVycmVpY2hiYXIgc2luZCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU5Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICJpc3QgZGVyIEVyc3RlIGVpbiBWb3Jnw6RuZ2VyLUNvbW1pdCBkZXMgQW5kZXJlbj8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE2MQorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICI8Q29tbWl0PiBmaW5kZW4sIHZvbiB3byBSZWZsb2cgdm9uIDxSZWZlcmVuej4gYWJnZXNwYWx0ZW4gd3VyZGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjkKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxPcHRpb25lbj5dIFstTCA8TmFtZTE+IFstTCA8b3JpZz4gWy1MIDxOYW1lMj5dXV0gPERhdGVpMT4gIgorIjxvcmlnLURhdGVpPiA8RGF0ZWkyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJFcmdlYm5pc3NlIHp1ciBTdGFuZGFyZC1BdXNnYWJlIHNlbmRlbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAiZWluZW4gZGlmZjMgYmFzaWVydGVuIE1lcmdlIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgImJlaSBLb25mbGlrdGVuIHVuc2VyZSBWYXJpYW50ZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgImJlaSBLb25mbGlrdGVuIGlocmUgVmFyaWFudGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgImJlaSBLb25mbGlrdGVuIGVpbmUgZ2VtZWluc2FtZSBWYXJpYW50ZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgImJlaSBLb25mbGlrdGVuIGRpZXNlIEtlbm56ZWljaG51bmdzbMOkbmdlIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgImtlaW5lIFdhcm51bmcgYmVpIEtvbmZsaWt0ZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ3Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICJCZXNjaHJpZnR1bmcgZsO8ciBEYXRlaTEvb3JpZy1EYXRlaS9EYXRlaTIgc2V0emVuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICJ1bmJla2FubnRlIE9wdGlvbjogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJLb25udGUgT2JqZWt0ICclcycgbmljaHQgcGFyc2VuLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gImthbm4gbmljaHQgbWl0IG1laHIgYWxzICVkIE1lcmdlLUJhc2lzIHVtZ2VoZW4uIElnbm9yaWVyZSAlcy4iCittc2dzdHJbMV0gImthbm4gbmljaHQgbWl0IG1laHIgYWxzICVkIE1lcmdlLUJhc2VuIHVtZ2VoZW4uIElnbm9yaWVyZSAlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjUKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJFcyB3aXJkIG51ciBkZXIgTWVyZ2Ugdm9uIHp3ZWkgQnJhbmNoZXMgYmVoYW5kZWx0LiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICJLb25udGUgUmVmZXJlbnogJyVzJyBuaWNodCBhdWZsw7ZzZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIkbDvGhyZSAlcyBtaXQgJXMgenVzYW1tZW5cbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NgorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0Cittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIkVpbmdhYmUgaXN0IGR1cmNoIE5VTC1aZWljaGVuIGFiZ2VzY2hsb3NzZW4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJmZWhsZW5kZSBPYmpla3RlIGVybGF1YmVuIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAiZGllIEVyc3RlbGx1bmcgdm9uIG1laHIgYWxzIGVpbmVtIFwiVHJlZVwiLU9iamVrdCBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6OQorbXNnaWQgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPG9wdGlvbnM+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08c2l6ZT4pIgorbXNnc3RyICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxPcHRpb25lbj5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxHcsO2w59lPikiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI2Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIKK21zZ3N0ciAiIgorIk9iamVrdC1WZXJ6ZWljaG5pcywgd2VsY2hlcyBQYWFyZSB2b24gUGFja2RhdGVpZW4gdW5kIHBhY2staW5kZXggZW50aMOkbHQiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorIlfDpGhyZW5kIGRlcyBVbXBhY2tlbnMsIHNhbW1sZSBQYWtldC1EYXRlaWVuIHZvbiBnZXJpbmdlcmVyIEdyw7bDn2UgaW4gIgorImVpbmVuU3RhcGVsLCB3ZWxjaGVyIGdyw7bDn2VyIGlzdCBhbHMgZGllc2UgR3LDtsOfZSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NTAgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo2NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAiWnUgdmllbGUgQXJndW1lbnRlLiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjAKK21zZ2lkICItLWJhdGNoLXNpemUgb3B0aW9uIGlzIG9ubHkgZm9yICdyZXBhY2snIHN1YmNvbW1hbmQiCittc2dzdHIgIk9wdGlvbiAtLWJhdGNoLXNpemUgaXN0IG51ciBmw7xyIGRlbiBVbnRlcmJlZmVobCAncmVwYWNrJyIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJOaWNodCBlcmthbm50ZXIgVW50ZXJiZWZlaGw6ICVzIgorCisjOiBidWlsdGluL212LmM6MTgKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8T3B0aW9uZW4+XSA8UXVlbGxlPi4uLiA8WmllbD4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIlZlcnplaWNobmlzICVzIGlzdCB6dW0gQ29tbWl0IHZvcmdlbWVya3QgdW5kIGtlaW4gU3VibW9kdWw/IgorCisjOiBidWlsdGluL212LmM6ODUKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorIkJpdHRlIG1lcmtlbiBTaWUgSWhyZSDDhG5kZXJ1bmdlbiBpbiAuZ2l0bW9kdWxlcyB6dW0gQ29tbWl0IHZvciBvZGVyICIKKyJiZW51dHplblxuIgorIlNpZSBcInN0YXNoXCIsIHVtIGZvcnR6dWZhaHJlbi4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyBpc3QgenVtIENvbW1pdCB2b3JnZW1lcmt0IgorCisjOiBidWlsdGluL212LmM6MTI1Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJWZXJzY2hpZWJlbi9VbWJlbmVubmVuIGVyendpbmdlbiwgYXVjaCB3ZW5uIGRhcyBaaWVsIGV4aXN0aWVydCIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzY2hpZWJlbiBvZGVyIFVtYmVuZW5uZW4gw7xiZXJzcHJpbmdlbiIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiWmllbCAnJXMnIGlzdCBrZWluIFZlcnplaWNobmlzIgorCisjOiBidWlsdGluL212LmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiUHLDvGZlIFVtYmVuZW5udW5nIHZvbiAnJXMnIG5hY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL212LmM6MTg0Cittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAidW5nw7xsdGlnZSBRdWVsbGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJrYW5uIFZlcnplaWNobmlzIG5pY2h0IGluIHNpY2ggc2VsYnN0IHZlcnNjaGllYmVuIgorCisjOiBidWlsdGluL212LmM6MTkwCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyBuaWNodCDDvGJlciBEYXRlaSB2ZXJzY2hpZWJlbiIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIlF1ZWxsdmVyemVpY2huaXMgaXN0IGxlZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjQKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJuaWNodCB1bnRlciBWZXJzaW9uc2tvbnRyb2xsZSIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiWmllbCBleGlzdGllcnQgYmVyZWl0cyIKKworIzogYnVpbHRpbi9tdi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICLDvGJlcnNjaHJlaWJlICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzgKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJLYW5uIG5pY2h0IMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJtZWhyZXJlIFF1ZWxsZW4gZsO8ciBkYXNzZWxiZSBaaWVsIgorCisjOiBidWlsdGluL212LmM6MjQzCittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJaaWVsdmVyemVpY2huaXMgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBidWlsdGluL212LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywgUXVlbGxlPSVzLCBaaWVsPSVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIkJlbmVubmUgJXMgbmFjaCAlcyB1bVxuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzE2IGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICJVbWJlbmVubnVuZyB2b24gJyVzJyBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwMworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8T3B0aW9uZW4+XSA8Q29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwNAorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8T3B0aW9uZW4+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwNQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxPcHRpb25lbj5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjIKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgIm51ciBOYW1lbiBhbnplaWdlbiAoa2VpbmUgU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDYzCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJudXIgVGFncyB2ZXJ3ZW5kZW4sIHVtIGRpZSBDb21taXRzIHp1IGJlbmVubmVuIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY1Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIm51ciBSZWZlcmVuemVuIHZlcndlbmRlbiwgZGllIDxNdXN0ZXI+IGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJpZ25vcmllcmUgUmVmZXJlbnplbiBkaWUgPE11c3Rlcj4gZW50c3ByZWNoZW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjkKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICJhbGxlIENvbW1pdHMgYXVmbGlzdGVuLCBkaWUgdm9uIGFsbGVuIFJlZmVyZW56ZW4gZXJyZWljaGJhciBzaW5kIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDcwCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJ2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzEKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgIkF1c2dhYmUgdm9uIGB1bmRlZmluaWVydGVuYCBOYW1lbiBlcmxhdWJlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDc3Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgIlRhZ3MgaW4gZGVyIEVpbmdhYmUgZGVyZWZlcmVuemllcmVuIChpbnRlcm5lIFZlcndlbmR1bmcpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBbbGlzdCBbPE9iamVrdD5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tICIKKyI8QmVzY2hyZWlidW5nPiB8IC1GIDxEYXRlaT4gfCAoLWMgfCAtQykgPE9iamVrdD5dIFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBjb3B5IFstZl0gPHZvbi1PYmpla3Q+IDxuYWNoLU9iamVrdD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxCZXNjaHJlaWJ1bmc+ICIKKyJ8IC1GIDxEYXRlaT4gfCAoLWMgfCAtQykgPE9iamVrdD5dIFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxPYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIHNob3cgWzxPYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPFN0cmF0ZWdpZT5dIDxOb3Rpei0iCisiUmVmZXJlbno+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gcmVtb3ZlIFs8T2JqZWt0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBwcnVuZSBbLW5dIFstdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0Cittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xpc3QgWzxPYmpla3Q+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPE9wdGlvbmVuPl0gWzxPYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzxPcHRpb25lbj5dIDx2b24tT2JqZWt0PiA8bmFjaC1PYmpla3Q+IgorCisjOiBidWlsdGluL25vdGVzLmM6NTUKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPHZvbi1PYmpla3Q+IDxuYWNoLU9iamVrdD5dLi4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzxPcHRpb25lbj5dIFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NQorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MAorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs8T3B0aW9uZW4+XSA8Tm90aXotUmVmZXJlbno+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiU2NocmVpYmVuL0JlYXJiZWl0ZW4gZGVyIE5vdGl6ZW4gZsO8ciBkYXMgZm9sZ2VuZGUgT2JqZWt0OiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAia29ubnRlICdzaG93JyBmw7xyIE9iamVrdCAnJXMnIG5pY2h0IHN0YXJ0ZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICJLb25udGUgQXVzZ2FiZSB2b24gJ3Nob3cnIG5pY2h0IGxlc2VuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImtvbm50ZSAnc2hvdycgZsO8ciBPYmpla3QgJyVzJyBuaWNodCBhYnNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTcKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgIiIKKyJCaXR0ZSBsaWVmZXJuIFNpZSBkaWUgTm90aXotSW5oYWx0ZSB1bnRlciBWZXJ3ZW5kdW5nIGRlciBPcHRpb24gLW0gb2RlciAtRi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgIktvbm50ZSBOb3Rpei1PYmpla3QgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICJEaWUgTm90aXotSW5oYWx0ZSB3dXJkZW4gaW4gJXMgYmVsYXNzZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQyIGJ1aWx0aW4vdGFnLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAia29ubnRlICclcycgbmljaHQgw7ZmZm5lbiBvZGVyIGxlc2VuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYzIGJ1aWx0aW4vbm90ZXMuYzozMTMgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjM4MyBidWlsdGluL25vdGVzLmM6NDM4IGJ1aWx0aW4vbm90ZXMuYzo1MjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEgYnVpbHRpbi9ub3Rlcy5jOjYxMCBidWlsdGluL25vdGVzLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBhbHMgZ8O8bHRpZ2UgUmVmZXJlbnogYXVmbMO2c2VuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlcyBPYmpla3RlcyAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIkthbm4gTm90aXotRGF0ZW4gbmljaHQgdm9uIE5pY2h0LUJsb2IgT2JqZWt0ICclcycgbGVzZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiRmVobGVyaGFmdGUgRWluZ2FiZXplaWxlOiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gS29waWVyZW4gZGVyIE5vdGl6ZW4gdm9uICclcycgbmFjaCAnJXMnIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICIiCisiQXVzZsO8aHJ1bmcgdm9uICVzIGF1ZiBOb3RpemVuIGluICVzIChhdcOfZXJoYWxiIHZvbiByZWZzL25vdGVzLykgIgorInp1csO8Y2tnZXdpZXNlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3NiBidWlsdGluL25vdGVzLmM6NDMxIGJ1aWx0aW4vbm90ZXMuYzo1MDkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MjEgYnVpbHRpbi9ub3Rlcy5jOjU5OCBidWlsdGluL25vdGVzLmM6NjY1CisjOiBidWlsdGluL25vdGVzLmM6ODE1IGJ1aWx0aW4vbm90ZXMuYzo5NjMgYnVpbHRpbi9ub3Rlcy5jOjk4NQorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgInp1IHZpZWxlIFBhcmFtZXRlciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIktlaW5lIE5vdGl6IGbDvHIgT2JqZWt0ICVzIGdlZnVuZGVuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiTm90aXppbmhhbHRlIGFscyBaZWljaGVua2V0dGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTMgYnVpbHRpbi9ub3Rlcy5jOjU3OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJOb3RpemluaGFsdGUgaW4gZWluZXIgRGF0ZWkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTYgYnVpbHRpbi9ub3Rlcy5jOjU4MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiV2llZGVydmVyd2VuZHVuZyB1bmQgQmVhcmJlaXR1bmcgZGVzIGFuZ2VnZWJlbmVuIE5vdGl6LU9iamVrdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE5IGJ1aWx0aW4vbm90ZXMuYzo1ODUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIldpZWRlcnZlcndlbmR1bmcgZGVzIGFuZ2VnZWJlbmVuIE5vdGl6LU9iamVrdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIyIGJ1aWx0aW4vbm90ZXMuYzo1ODgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgIlNwZWljaGVybiBsZWVyZXIgTm90aXogZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjMgYnVpbHRpbi9ub3Rlcy5jOjQ5NgorbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgImV4aXN0aWVyZW5kZSBOb3RpemVuIGVyc2V0emVuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiS29ubnRlIE5vdGl6ZW4gbmljaHQgaGluenVmw7xnZW4uIEV4aXN0aWVyZW5kZSBOb3RpemVuIGbDvHIgT2JqZWt0ICVzICIKKyJnZWZ1bmRlbi4gVmVyd2VuZGVuIFNpZSAnLWYnLCB1bSBkaWUgZXhpc3RpZXJlbmRlbiBOb3RpemVuIHp1IMO8YmVyc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ2MyBidWlsdGluL25vdGVzLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiw5xiZXJzY2hyZWliZSBleGlzdGllcmVuZGUgTm90aXplbiBmw7xyIE9iamVrdCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiRW50ZmVybmUgTm90aXogZsO8ciBPYmpla3QgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJPYmpla3RlIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OQorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICIiCisiS29uZmlndXJhdGlvbiBmw7xyIDxCZWZlaGw+IHp1bSBVbXNjaHJlaWJlbiB2b24gQ29tbWl0cyBsYWRlbiAoaW1wbGl6aWVydCAtLSIKKyJzdGRpbikiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTcKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgInp1IHdlbmlnIFBhcmFtZXRlciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJLYW5uIE5vdGl6ZW4gbmljaHQga29waWVyZW4uIEV4aXN0aWVyZW5kZSBOb3RpemVuIGbDvHIgT2JqZWt0ICVzIGdlZnVuZGVuLiAiCisiVmVyd2VuZGVuIFNpZSAnLWYnLCB1bSBkaWUgZXhpc3RpZXJlbmRlbiBOb3RpemVuIHp1IMO8YmVyc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAiS2VpbmUgTm90aXplbiBmw7xyIFF1ZWxsLU9iamVrdCAlcy4gS29waWUgbmljaHQgbcO2Z2xpY2guIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLW0vLUYvLWMvLUMgc2luZCBmw7xyIGRlbiBVbnRlcmJlZmVobCAnZWRpdCcgdmVyYWx0ZXQuXG4iCisiQml0dGUgYmVudXR6ZW4gU2llIHN0YXR0ZGVzc2VuICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJy5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY5OAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgIkZlaGxlciBiZWltIEzDtnNjaGVuIGRlciBSZWZlcmVueiBOT1RFU19NRVJHRV9QQVJUSUFMIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMw7ZzY2hlbiBkZXIgUmVmZXJlbnogTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTMO2c2NoZW4gZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyB2b24gJ2dpdCBub3RlcyBtZXJnZScuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIyCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlciBSZWZlcmVueiBOT1RFU19NRVJHRV9QQVJUSUFMIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgIktvbm50ZSBDb21taXQgdm9uIE5PVEVTX01FUkdFX1BBUlRJQUwgbmljaHQgZmluZGVuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAiS29ubnRlIENvbW1pdCB2b24gTk9URVNfTUVSR0VfUEFSVElBTCBuaWNodCBwYXJzZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NzM5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdWZsw7ZzZW4gdm9uIE5PVEVTX01FUkdFX1JFRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0MgorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQWJzY2hsaWXDn2VuIGRlciBadXNhbW1lbmbDvGhydW5nIGRlciBOb3RpemVuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIgorbXNnc3RyICJ1bmJla2FubnRlIE1lcmdlLVN0cmF0ZWdpZSAnJXMnIGbDvHIgTm90aXplbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiQWxsZ2VtZWluZSBPcHRpb25lbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgIk1lcmdlLU9wdGlvbmVuIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorImzDtnN0IEtvbmZsaWt0ZSBiZWkgTm90aXplbiBtaXQgZGVyIGFuZ2VnZWJlbmVuIFN0cmF0ZWdpZSBhdWYgKG1hbnVhbC9vdXJzLyIKKyJ0aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBOb3RpemVuIGVpbnRyYWdlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIiIKKyJNZXJnZSB2b24gTm90aXplbiBhYnNjaGxpZcOfZW4sIGluIGRlbSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBOb3RpemVuICIKKyJjb21taXR0ZXQgd2VyZGVuIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiS29uZmxpa3RhdWZsw7ZzdW5nIGJlaW0gTWVyZ2Ugdm9uIE5vdGl6ZW4gYWJicmVjaGVuIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk2Cittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgIk1lcmdlIHZvbiBOb3RpemVuIGFiYnJlY2hlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwNworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAiS2FubiAtLWNvbW1pdCwgLS1hYm9ydCBvZGVyIC1zLy0tc3RyYXRlZ3kgbmljaHQga29tYmluaWVyZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6ODEyCittc2dpZCAibXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIgorbXNnc3RyICJTaWUgbcO8c3NlbiBlaW5lIE5vdGl6LVJlZmVyZW56IHp1bSBNZXJnZW4gYW5nZWJlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgV2VydCBmw7xyIC1zLy0tc3RyYXRlZ3k6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICJFaW4gTWVyZ2Ugdm9uIE5vdGl6ZW4gbmFjaCAlcyBpc3QgYmVyZWl0cyBpbSBHYW5nZSBiZWkgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIFNwZWljaGVybiBkZXIgVmVya27DvHBmdW5nIHp1ciBha3R1ZWxsZW4gTm90ZXMtUmVmZXJlbnogKCVzKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiYWJvcnQnLlxuIgorbXNnc3RyICIiCisiQXV0b21hdGlzY2hlcyBadXNhbW1lbmbDvGhyZW4gZGVyIE5vdGl6ZW4gZmVobGdlc2NobGFnZW4uIEJlaGViZW4gU2llIGRpZVxuIgorIktvbmZsaWt0ZSBpbiAlcyB1bmQgY29tbWl0dGVuIFNpZSBkYXMgRXJnZWJuaXMgbWl0ICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiY29tbWl0JyxcbiIKKyJvZGVyIGJyZWNoZW4gU2llIGRlbiBNZXJnZSBtaXQgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyBhYi5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NyBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYWxzIGfDvGx0aWdlIFJlZmVyZW56IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIk9iamVrdCAlcyBoYXQga2VpbmUgTm90aXpcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiZGVyIFZlcnN1Y2gsIGVpbmUgbmljaHQgZXhpc3RpZXJlbmRlIE5vdGl6IHp1IGzDtnNjaGVuLCBpc3Qga2VpbiBGZWhsZXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiT2JqZWt0bmFtZW4gdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0IGJ1aWx0aW4vcHJ1bmUuYzoxMzAgYnVpbHRpbi93b3JrdHJlZS5jOjE2NAorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAibmljaHQgbMO2c2NoZW4sIG51ciBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgImdlbMO2c2NodGUgTm90aXplbiBtZWxkZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgIk5vdGl6LVJlZmVyZW56IgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgIk5vdGl6ZW4gdm9uIDxOb3Rpei1SZWZlcmVuej4gdmVyd2VuZGVuIgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJVbmJla2FubnRlciBVbnRlcmJlZmVobDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxPcHRpb25lbj4uLi5dIFs8IDxSZWZlcmVuemxpc3RlPiB8IDwgIgorIjxPYmpla3RsaXN0ZT5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8T3B0aW9uZW4+Li4uXSA8QmFzaXMtTmFtZT4gWzwgPFJlZmVyZW56bGlzdGU+IHwgPCAiCisiPE9iamVrdGxpc3RlPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIENSQyBmw7xyIGdlcGFja3RlcyBPYmpla3QgJXMuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXMgZ2VwYWNrdGVzIE9iamVrdCBmw7xyICVzLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgIlJla3Vyc2l2ZXIgVW50ZXJzY2hpZWQgZsO8ciBPYmpla3QgJXMgZmVzdGdlc3RlbGx0LiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIiV1IE9iamVrdGUgZ2VvcmRuZXQsICU8UFJJdTMyPiBlcndhcnRldC4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIGlzIGludmFsaWQ6ICVzIgorbXNnc3RyICJQYWNrZGF0ZWkgaXN0IHVuZ8O8bHRpZzogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCittc2dzdHIgIktvbm50ZSBQYWNrZGF0ZWkgbmljaHQgenVyIFdpZWRlcnZlcndlbmR1bmcgw7ZmZm5lbjogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODAyCittc2dpZCAidW5hYmxlIHRvIHNlZWsgaW4gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICJLb25udGUgXCJzZWVrXCIgbmljaHQgaW4gd2llZGVydmVyd2VuZGV0ZXIgUGFja2RhdGVpIGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgxMworbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICJLb25udGUgbmljaHQgdm9uIHdpZWRlcnZlcndlbmRldGVyIFBhY2tkYXRlaSBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODQxCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorIkRlYWt0aXZpZXJlIFNjaHJlaWJlbiBkZXIgQml0bWFwLCBQYWtldGUgd3VyZGVuIGR1cmNoIHBhY2sucGFja1NpemVMaW1pdFxuIgorImF1ZmdldHJlbm50LiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NTQKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIlNjaHJlaWJlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTE3IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICJTY2hyaWViICU8UFJJdTMyPiBPYmpla3RlIHfDpGhyZW5kICU8UFJJdTMyPiBlcndhcnRldCB3YXJlbi4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTE2NAorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisiRGVha3RpdmllcmUgU2NocmVpYmVuIGRlciBCaXRtYXAsIGRhIGVpbmlnZSBPYmpla3RlIG5pY2h0IGluIGVpbmUgUGFjay0iCisiRGF0ZWlcbiIKKyJnZXNjaHJpZWJlbiB3dXJkZW4uIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgIlwiZGVsdGEgYmFzZSBvZmZzZXRcIiDDnGJlcmxhdWYgaW4gUGFrZXQgZsO8ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgIlwiZGVsdGEgYmFzZSBvZmZzZXRcIiBsaWVndCBhdcOfZXJoYWxiIGRlcyBnw7xsdGlnZW4gQmVyZWljaHMgZsO8ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODcwCiBtc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiT2JqZWt0ZSB3ZXJkZW4gZ2V6w6RobHQiCittc2dzdHIgIlrDpGhsZSBPYmpla3RlIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY3OQotbXNnaWQgImJ1Y2tldHMiCi1tc2dzdHIgIkJ1Y2tldHMiCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICJLb25udGUgR3LDtsOfZSB2b24gJXMgbmljaHQgYmVzdGltbWVuLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCi1tc2dzdHIgIktvcGllbiB2b24gT2JqZWt0ZW4vSW5mby9BbHRlcm5hdGVzIGtvbm50ZW4gbmljaHQgZXJzdGVsbHQgd2VyZGVuOiAlcyIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiS29ubnRlIEtvcGZiZXJlaWNoIHZvbiBPYmpla3QgJyVzJyBuaWNodCBwYXJzZW4uIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCi1tc2dzdHIgIlZvbiDCuyVzwqsga29ubnRlIG5pY2h0cyBnZWtsb250IHdlcmRlbi4iCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTAxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJPYmpla3QgJXMga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbi4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYyCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk3NAotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAiRGVyIMK7bWFzdGVywqstQnJhbmNoIHd1cmRlIG5vY2ggbmljaHQgaW5pdGlhbGlzaWVydC4iCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKK21zZ3N0ciAiSW5rb25zaXN0ZW50ZSBPYmpla3Rsw6RuZ2UgYmVpIE9iamVrdCAlcyAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTUKLW1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgotbXNnc3RyICJIYXJkbGlua3MgbmljaHQgdmVyZsO8Z2Jhci4gU3RhdHRkZXNzZW4gd2lyZCBrb3BpZXJ0LiIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEyNQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgInVuZ8O8bnN0aWdlcyBQYWNrZXQgLSBTcGVpY2hlciB2b2xsIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKLW1zZ3N0ciAiS29waWVyZW4gdm9uIMK7JXPCqyIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICJEZWx0YS1Lb21wcmVzc2lvbiB2ZXJ3ZW5kZXQgYmlzIHp1ICVkIFRocmVhZHMuIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMAotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiT2JqZWt0ZGF0ZW5iYW5rIGtvcGllcmVuIgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICJLb25udGUga2VpbmUgT2JqZWt0ZSBwYWNrZW4sIGRpZSB2b24gVGFnICVzIGVycmVpY2hiYXIgc2luZC4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAxCi1tc2dpZCAiS2lCIgotbXNnc3RyICJLQiIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIktvbXByaW1pZXJlIE9iamVrdGUiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKLW1zZ3N0ciAiT2JqZWt0IGthbm4gbmljaHQga29waWVydCB3ZXJkZW46ICVzIgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY1Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICJJbmtvbnNpc3RlbnogbWl0IGRlciBBbnphaGwgdm9uIERlbHRhcyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MzcKLW1zZ2lkICJMaW5raW5nIG9iamVjdHMiCi1tc2dzdHIgIk9iamVrdGUgdmVybGlua2VuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgzOAotbXNnaWQgIm9iamVjdHMiCi1tc2dzdHIgIk9iamVrdGUiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODQ2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCi1tc2dzdHIgIkbDvHIgT2JqZWt0IGtvbm50ZSBrZWluIEhhcmRsaW5rIGVyc3RlbGx0IHdlcmRlbjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAzCi1tc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIkJyYW5jaGVzIHVuZCBPYmpla3RlIGtvbm50ZW4gbmljaHQgYW5nZWZvcmRlcnQgd2VyZGVuLiAgS29udHJvbGxpZXJlbiBTaWUgIgotImRpZSBBdXNnYWJlbiBhdWYgZGVyIEtvbnNvbGUgZsO8ciB3ZWl0ZXJlIEFuZ2FiZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNAotbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIlRhZ3Mga29ubnRlbiBuaWNodCBhbmdlZm9yZGVydCB3ZXJkZW4uICBLb250cm9sbGllcmVuIFNpZSBkaWUgQXVzZ2FiZW4gYXVmICIKLSJkZXIgS29uc29sZSBmw7xyIHdlaXRlcmUgQW5nYWJlbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Ci1tc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIkRpZSBCcmFuY2hzcGl0emUgKEhFQUQpIGtvbm50ZSBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uICBLb250cm9sbGllcmVuIFNpZSBkaWUgIgotIkF1c2dhYmVuIGF1ZiBkZXIgS29uc29sZSBmw7xyIHdlaXRlcmUgQW5nYWJlbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQ3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCi1tc2dzdHIgIlZlcnplaWNobmlzIMK7JXPCqyBrYW5uIG5pY2h0IGF1ZmdlcsOkdW10IHdlcmRlbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTUzCi1tc2dpZCAiQ2xvbmUgZmFpbGVkLiIKLW1zZ3N0ciAiS2xvbmVuIGZlaGxnZXNjaGxhZ2VuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjAKLW1zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCi1tc2dzdHIgIktlaW4gdm9yZWluZ2VzdGVsbHRlciBCcmFuY2ggZ2VmdW5kZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk3MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKLW1zZ3N0ciAiwrslc8KrIHd1cmRlIG5pY2h0IGFscyBDb21taXQgZ2VmdW5kZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk5OAotbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgotbXNnc3RyICJBcmJlaXRza29waWUgZXJzdGVsbGVuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKLW1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKLW1zZ3N0ciAiRXJzdGVsbGVuIGRlciBBcmJlaXRza29waWUgZmVobGdlc2NobGFnZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKLW1zZ2lkICJDbG9uaW5nIHN1Ym1vZHVsZXMiCi1tc2dzdHIgIktsb25lIFN1Ym1vZHVsIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwODcKLW1zZ2lkICJDYW5ub3QgY2xvbmUgc3VibW9kdWxlcy4iCi1tc2dzdHIgIlN1Ym1vZHVsIGtvbm50ZSBuaWNodCBnZWtsb250IHdlcmRlbi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExMAotbXNnaWQgIlJlcG9zaXRvcnk6IgotbXNnc3RyICJSZXBvc2l0b3J5OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTU5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIlJlcG9zaXRvcnkgwrslc8KrIGtvbm50ZSBuaWNodCBnZcO2ZmZuZXQgd2VyZGVuLiIKLQotIzogbGliL2Fib3V0LnRjbDoyNgotbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKLW1zZ3N0ciAiZ2l0LWd1aSAtIGVpbmUgZ3JhZmlzY2hlIE9iZXJmbMOkY2hlIGbDvHIgR2l0LiIKLQotIzogbGliL2JsYW1lLnRjbDo3NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IEZpbGUgVmlld2VyIgotbXNnc3RyICIlcyAoJXMpOiBEYXRlaS1Ccm93c2VyIgotCi0jOiBsaWIvYmxhbWUudGNsOjgwCi1tc2dpZCAiQ29tbWl0OiIKLW1zZ3N0ciAiQ29tbWl0OiIKLQotIzogbGliL2JsYW1lLnRjbDoyODIKLW1zZ2lkICJDb3B5IENvbW1pdCIKLW1zZ3N0ciAiQ29tbWl0IGtvcGllcmVuIgotCi0jOiBsaWIvYmxhbWUudGNsOjI4NgotbXNnaWQgIkZpbmQgVGV4dC4uLiIKLW1zZ3N0ciAiVGV4dCBzdWNoZW4uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6MjkwCi1tc2dpZCAiR290byBMaW5lLi4uIgotbXNnc3RyICJHZWhlIHp1IFplaWxlLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjI5OQotbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCi1tc2dzdHIgIlZvbGxlIEtvcGllLUVya2VubnVuZyIKLQotIzogbGliL2JsYW1lLnRjbDozMDMKLW1zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKLW1zZ3N0ciAiSGlzdG9yaWVuLUtvbnRleHQgYW56ZWlnZW4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6MzA2Ci1tc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKLW1zZ3N0ciAiRWx0ZXJuY29tbWl0IGFubm90aWVyZW4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NDY4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVhZGluZyAlcy4uLiIKLW1zZ3N0ciAiJXMgbGVzZW4uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NTk2Ci1tc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIkFubm90aWVydW5nZW4gZsO8ciBLb3BpZXJlbi9WZXJzY2hpZWJlbiB3ZXJkZW4gZ2VsYWRlbi4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo2MTMKLW1zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCi1tc2dzdHIgIlplaWxlbiBhbm5vdGllcnQiCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODE1Ci1tc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiQW5ub3RpZXJ1bmdlbiBmw7xyIHVyc3Byw7xuZ2xpY2hlbiBPcnQgd2VyZGVuIGdlbGFkZW4uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODE4Ci1tc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCi1tc2dzdHIgIkFubm90aWVydW5nIHZvbGxzdMOkbmRpZy4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODQ5Ci1tc2dpZCAiQnVzeSIKLW1zZ3N0ciAiVmVyYXJiZWl0dW5nIGzDpHVmdCIKLQotIzogbGliL2JsYW1lLnRjbDo4NTAKLW1zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKLW1zZ3N0ciAiQW5ub3RpZXJ1bmcgbMOkdWZ0IGJlcmVpdHMuIgotCi0jOiBsaWIvYmxhbWUudGNsOjg4OQotbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCi1tc2dzdHIgIkludGVuc2l2ZSBLb3BpZS1Fcmtlbm51bmcgbMOkdWZ0Li4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjk1NwotbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKLW1zZ3N0ciAiQW5ub3RpZXJ1bmcgbGFkZW4uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAxMAotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIkF1dG9yOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDE0Ci1tc2dpZCAiQ29tbWl0dGVyOiIKLW1zZ3N0ciAiQ29tbWl0dGVyOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDE5Ci1tc2dpZCAiT3JpZ2luYWwgRmlsZToiCi1tc2dzdHIgIlVyc3Byw7xuZ2xpY2hlIERhdGVpOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDY3Ci1tc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgotbXNnc3RyICJCcmFuY2hzcGl0emUgKMK7SEVBRCBjb21taXTCqykga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW46IgotCi0jOiBsaWIvYmxhbWUudGNsOjExMjIKLW1zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKLW1zZ3N0ciAiRWx0ZXJuY29tbWl0IGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMTM3Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgotbXNnc3RyICJFbHRlcm5jb21taXQga2FubiBuaWNodCBhbmdlemVpZ3Qgd2VyZGVuIgotCi0jOiBsaWIvYmxhbWUudGNsOjExMzggbGliL2RpZmYudGNsOjM0NQotbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCi1tc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlcyBWZXJnbGVpY2hzOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjc5Ci1tc2dpZCAiT3JpZ2luYWxseSBCeToiCi1tc2dzdHIgIlVyc3Byw7xuZ2xpY2ggdm9uOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjg1Ci1tc2dpZCAiSW4gRmlsZToiCi1tc2dzdHIgIkluIERhdGVpOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjkwCi1tc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgotbXNnc3RyICJLb3BpZXJ0IG9kZXIgdmVyc2Nob2JlbiBkdXJjaDoiCi0KLSM6IGxpYi9kaWZmLnRjbDo3NwotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQyCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKLSJcbiIKLSJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCi0idGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKLSJ0aGUgc2FtZSBzdGF0ZS4iCisiZXhwZWN0ZWQgZWRnZSBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKIG1zZ3N0ciAiIgotIktlaW5lIMOEbmRlcnVuZ2VuIGZlc3RzdGVsbGJhci5cbiIKLSJcbiIKLSLCuyVzwqsgZW50aMOkbHQga2VpbmUgw4RuZGVydW5nZW4uIFp3YXIgd3VyZGUgZGFzIMOEbmRlcnVuZ3NkYXR1bSBkaWVzZXIgRGF0ZWkgIgotInZvbiBlaW5lbSBhbmRlcmVuIFByb2dyYW1tIG1vZGlmaXppZXJ0LCBhYmVyIGRlciBJbmhhbHQgZGVyIERhdGVpIGlzdCAiCi0idW52ZXLDpG5kZXJ0LlxuIgotIlxuIgotIkRhcyBBcmJlaXRzdmVyemVpY2huaXMgd2lyZCBqZXR6dCBuZXUgZ2VsYWRlbiwgdW0gZGllc2Ugw4RuZGVydW5nIGJlaSBhbGxlbiAiCi0iRGF0ZWllbiB6dSBwcsO8ZmVuLiIKKyJFcndhcnRldGUgUmFuZG9iamVrdC1JRCwgZXJoaWVsdCBudXR6bG9zZSBEYXRlbjpcbiIKKyIgJXMiCiAKLSM6IGxpYi9kaWZmLnRjbDoxMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCi1tc2dzdHIgIlZlcmdsZWljaCB2b24gwrslc8KrIGxhZGVuLi4uIgotCi0jOiBsaWIvZGlmZi50Y2w6MTQzCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3NDgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkxPQ0FMOiBkZWxldGVkXG4iCi0iUkVNT1RFOlxuIgorImV4cGVjdGVkIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgogbXNnc3RyICIiCi0iTE9LQUw6IGdlbMO2c2NodFxuIgotIkVYVEVSTjpcbiIKKyJFcndhcnRldGUgT2JqZWt0LUlELCBlcmhpZWx0IG51dHpsb3NlIERhdGVuOlxuIgorIiAlcyIKIAotIzogbGliL2RpZmYudGNsOjE0OAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODQ2Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgLS1taXNzaW5nLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTA1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAxMworbXNnaWQgImNhbm5vdCBvcGVuIHBhY2sgaW5kZXgiCittc2dzdHIgIkthbm4gUGFrZXRpbmRleCBuaWNodCDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCBhdCAlcyBjb3VsZCBub3QgYmUgZXhhbWluZWQiCittc2dzdHIgIkxvc2VzIE9iamVrdCBiZWkgJXMga29ubnRlIG5pY2h0IHVudGVyc3VjaHQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDIxCittc2dpZCAidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIKK21zZ3N0ciAiS29ubnRlIGxvc2VzIE9iamVrdCBuaWNodCBlcnp3aW5nZW4uIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmV2ICclcyciCittc2dzdHIgIiclcycgaXN0IGtlaW4gQ29tbWl0LiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBDb21taXQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MQorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgIktvbm50ZSBqw7xuZ3N0ZSBPYmpla3RlIG5pY2h0IGhpbnp1ZsO8Z2VuLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIk5pY2h0IHVudGVyc3TDvHR6dGUgSW5kZXgtVmVyc2lvbiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2UgSW5kZXgtVmVyc2lvbiAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzYKK21zZ2lkICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKK21zZ3N0ciAiPFZlcnNpb24+Wyw8T2Zmc2V0Pl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNworbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKyJkaWUgSW5kZXgtRGF0ZWkgZGVzIFBha2V0ZXMgaW4gZGVyIGFuZ2VnZWJlbmVuIEluZGV4Zm9ybWF0LVZlcnNpb24gc2NocmVpYmVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDAKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJtYXhpbWFsZSBHcsO2w59lIGbDvHIgamVkZSBhdXNnZWdlYmVuZSBQYWtldGRhdGVpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDIKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgImdlbGllaGVuZSBPYmpla3RlIHZvbiBhbHRlcm5hdGl2ZW0gT2JqZWt0c3BlaWNoZXIgaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ0Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJnZXBhY2t0ZSBPYmpla3RlIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgIlBha2V0ZmVuc3RlciBkdXJjaCBPYmpla3RlIGJlZ3JlbnplbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ4Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiIgorIlBha2V0ZmVuc3RlciwgenVzw6R0emxpY2ggenVyIE9iamVrdGJlZ3Jlbnp1bmcsIGR1cmNoIFNwZWljaGVyIGJlZ3JlbnplbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUwCittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIiIKKyJtYXhpbWFsZSBMw6RuZ2UgZGVyIGVybGF1YnRlbiBEaWZmZXJlbnp2ZXJrZXR0dW5nIGltIHJlc3VsdGllcmVuZGVuIFBha2V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTIKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgImV4aXN0aWVyZW5kZSBVbnRlcnNjaGllZGUgd2llZGVydmVyd2VuZGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTQKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICJleGlzdGllcmVuZGUgT2JqZWt0ZSB3aWVkZXJ2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NgorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAiT0ZTX0RFTFRBIE9iamVrdGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTgKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICIiCisiVGhyZWFkcyBiZWkgZGVyIFN1Y2hlIG5hY2ggZGVuIGJlc3RlbiDDnGJlcmVpbnN0aW1tdW5nZW4gYmVpIFVudGVyc2NoaWVkZW4gIgorInZlcndlbmRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAia2VpbmUgbGVlcmVuIFBha2V0ZSBlcnpldWdlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYyCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiQXJndW1lbnRlIGJlesO8Z2xpY2ggQ29tbWl0cyB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2NAorbXNnaWQgImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIgorbXNnc3RyICJkaWUgT2JqZWt0ZSB6dSBzb2xjaGVuLCBkaWUgbm9jaCBuaWNodCBnZXBhY2t0IHd1cmRlbiwgYmVncmVuemVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiT2JqZWt0ZSBlaW5zY2hsaWXDn2VuLCBkaWUgdm9uIGplZGVyIFJlZmVyZW56IGVycmVpY2hiYXIgc2luZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICIiCisiT2JqZWt0ZSBlaW5zY2hsaWXDn2VuLCBkaWUgdm9uIEVpbnRyw6RnZW4gZGVzIFJlZmxvZ3MgcmVmZXJlbnppZXJ0IHdlcmRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjczCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiT2JqZWt0ZSBlaW5zY2hsaWXDn2VuLCBkaWUgdm9tIEluZGV4IHJlZmVyZW56aWVydCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3NgorbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAiUGFrZXQgaW4gZGllIFN0YW5kYXJkLUF1c2dhYmUgc2NocmVpYmVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzgKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgIlRhZy1PYmpla3RlIGVpbnNjaGxpZcOfZW4sIGRpZSBhdWYgZ2VwYWNrdGUgT2JqZWt0ZSByZWZlcmVuemllcmVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm5pY2h0IGVycmVpY2hiYXJlIE9iamVrdGUgYmVoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MgorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibmljaHQgZXJyZWljaGJhcmUgbG9zZSBPYmpla3RlIHBhY2tlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg0Cittc2dpZCAidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIm5pY2h0IGVycmVpY2hiYXJlIE9iamVrdGUgZW50cGFja2VuLCBkaWUgbmV1ZXIgYWxzIDxaZWl0PiBzaW5kIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODcKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICJkZW4gXCJzcGFyc2VcIiBBbGdvcml0aG11cyB6dXIgQmVzdGltbXVuZyBkZXIgRXJyZWljaGJhcmtlaXQgYmVudXR6ZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJkw7xubmVyZSBQYWtldGUgZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICIiCisiUGFrZXRlIGdlZWlnbmV0IGbDvHIgQWJob2x1bmcgbWl0IHVudm9sbHN0w6RuZGlnZXIgSGlzdG9yaWUgKHNoYWxsb3cpIGVyemV1Z2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTMKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICJQYWtldGUgaWdub3JpZXJlbiwgZGllIC5rZWVwIERhdGVpZW4gaGFiZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NQorbXNnaWQgImlnbm9yZSB0aGlzIHBhY2siCittc2dzdHIgImRpZXNlcyBQYWtldCBpZ25vcmllcmVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTcKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJLb21wcmltaWVydW5nc2dyYWQgZsO8ciBQYWtldGllcnVuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk5Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgImtlaW5lIGvDvG5zdGxpY2hlbiBWb3Jnw6RuZ2VyLUNvbW1pdHMgKFwiZ3JhZnRzXCIpIHZlcmJlcmdlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAxCittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICIiCisiQml0bWFwLUluZGV4IChmYWxscyB2ZXJmw7xnYmFyKSB6dXIgT3B0aW1pZXJ1bmcgZGVyIE9iamVrdHrDpGhsdW5nIGJlbnV0emVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDMKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICJCaXRtYXAtSW5kZXggenVzYW1tZW4gbWl0IFBhY2stSW5kZXggc2NocmVpYmVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDcKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiQml0bWFwLUluZGV4IHNjaHJlaWJlbiwgd2VubiBtw7ZnbGljaCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzExCittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiQmVoYW5kbHVuZyBmw7xyIGZlaGxlbmRlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNAorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICIiCisia2VpbmUgT2JqZWt0ZSBhdXMgUGFja2RhdGVpZW4gdm9uIHBhcnRpZWxsIGdla2xvbnRlbiBSZW1vdGUtUmVwb3NpdG9yaWVzICIKKyJwYWNrZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNgorbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgIkRlbHRhLUlzbGFuZHMgYmVpIERlbHRhLUtvbXByZXNzaW9uIGJlYWNodGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgIlRpZWZlIGbDvHIgVmVya2V0dHVuZyB2b24gVW50ZXJzY2hpZWRlbiAlZCBpc3QgenUgdGllZiwgZXJ6d2luZ2UgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAicGFjay5kZWx0YUNhY2hlTGltaXQgaXN0IHp1IGhvY2gsIGVyendpbmdlICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDQKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorIi0tbWF4LXBhY2stc2l6ZSBrYW5uIG5pY2h0IGbDvHIgZGllIEVyc3RlbGx1bmcgZWluZXMgUGFrZXRzIGbDvHIgZWluZSAiCisiw5xiZXJ0cmFndW5nXG4iCisiYmVudXR6dCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDYKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAiTWluaW1hbGVzIExpbWl0IGbDvHIgZGllIFBha2V0Z3LDtsOfZSBpc3QgMSBNaUIuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIiIKKyItLXRoaW4ga2FubiBuaWNodCBiZW51dHp0IHdlcmRlbiwgdW0gZWluIGluZGl6aWVyYmFyZXMgUGFrZXQgenUgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgdW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIHNpbmQgaW5rb21wYXRpYmVsIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjAKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgIkthbm4gLS1maWx0ZXIgbmljaHQgb2huZSAtLXN0ZG91dCBiZW51dHplbi4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ4MQorbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIk9iamVrdGUgYXVmesOkaGxlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2VkICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSIKK21zZ3N0ciAiIgorIkdlc2FtdCAlPFBSSXUzMj4gKERlbHRhICU8UFJJdTMyPiksIFdpZWRlcnZlcndlbmRldCAlPFBSSXUzMj4gKERlbHRhICIKKyIlPFBSSXUzMj4pIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiYWxsZXMgcGFja2VuIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgImxvc2UgUmVmZXJlbnplbiBlbnRmZXJuZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiTMO2c2NoZSBkb3BwZWx0ZSBPYmpla3RlIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPFplaXQ+XSBbLS1dIFs8QnJhbmNoPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgImdlbMO2c2NodGUgT2JqZWt0ZSBtZWxkZW4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiT2JqZWt0ZSDDpGx0ZXIgYWxzIDxaZWl0PiB2ZXJmYWxsZW4gbGFzc2VuIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIiIKKyJUcmF2ZXJzaWVydW5nIGF1ZiBPYmpla3RlIGF1w59lcmhhbGIgdm9uIFBhY2tkYXRlaWVuIGF1cyBwYXJ0aWVsbCBnZWtsb250ZW4gIgorIlJlbW90ZS1SZXBvc2l0b3JpZXMgZWluc2NocsOkbmtlbiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjE1MAorbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAia2FubiBcInBydW5lXCIgaW4gcHJlY2lvdXMtb2JqZWN0cyBSZXBvc2l0b3J5IG5pY2h0IGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY2IGJ1aWx0aW4vcHVsbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydCBmw7xyICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzxPcHRpb25lbj5dIFs8UmVwb3NpdG9yeT4gWzxSZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDIKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAicmVrdXJzaXZlIEFuZm9yZGVydW5nZW4gdm9uIFN1Ym1vZHVsZW4ga29udHJvbGxpZXJlbiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIk9wdGlvbmVuIGJlem9nZW4gYXVmIE1lcmdlIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgIkludGVncmF0aW9uIHZvbiDDhG5kZXJ1bmdlbiBkdXJjaCBSZWJhc2Ugc3RhdHQgTWVyZ2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NyBidWlsdGluL3JlYmFzZS5jOjQ2NyBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiVm9yc3B1bGVuIGVybGF1YmVuIgorCisjOiBidWlsdGluL3B1bGwuYzoxODYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAiYXV0b21hdGlzY2hlciBTdGFzaC9TdGFzaC1Qb3Agdm9yIHVuZCBuYWNoIGVpbmVzIFJlYmFzZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAyCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICJPcHRpb25lbiBiZXpvZ2VuIGF1ZiBGZXRjaCIKKworIzogYnVpbHRpbi9wdWxsLmM6MjEyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiZGFzIMOcYmVyc2NocmVpYmVuIHZvbiBsb2thbGVuIEJyYW5jaGVzIGVyendpbmdlbiIKKworIzogYnVpbHRpbi9wdWxsLmM6MjIwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJBbnphaGwgZGVyIHBhcmFsbGVsIG1pdCAncHVsbCcgenUgdmVyYXJiZWl0ZW5kZW4gU3VibW9kdWxlIgorCisjOiBidWlsdGluL3B1bGwuYzozMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM3CiBtc2dpZCAiIgotIlJFTU9URTogZGVsZXRlZFxuIgotIkxPQ0FMOlxuIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKIG1zZ3N0ciAiIgotIkVYVEVSTjogZ2Vsw7ZzY2h0XG4iCi0iTE9LQUw6XG4iCisiRXMgZ2lidCBrZWluZW4gS2FuZGlkYXRlbiBmw7xyIFJlYmFzZSBpbm5lcmhhbGIgZGVyIFJlZmVyZW56ZW4sIGRpZSBlYmVuICIKKyJhbmdlZm9yZGVydCB3dXJkZW4uIgogCi0jOiBsaWIvZGlmZi50Y2w6MTU1Ci1tc2dpZCAiTE9DQUw6XG4iCi1tc2dzdHIgIkxPS0FMOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTU4Ci1tc2dpZCAiUkVNT1RFOlxuIgotbXNnc3RyICJFWFRFUk46XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMjAgbGliL2RpZmYudGNsOjM0NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICJEYXRlaSDCuyVzwqsga2FubiBuaWNodCBhbmdlemVpZ3Qgd2VyZGVuIgotCi0jOiBsaWIvZGlmZi50Y2w6MjIxCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVyIERhdGVpOiIKLQotIzogbGliL2RpZmYudGNsOjIyNwotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAiR2l0LVJlcG9zaXRvcnkgKFN1YnByb2pla3QpIgotCi0jOiBsaWIvZGlmZi50Y2w6MjM5Ci1tc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgotbXNnc3RyICIqIEJpbsOkcmRhdGVpIChJbmhhbHQgd2lyZCBuaWNodCBhbmdlemVpZ3QpIgotCi0jOiBsaWIvZGlmZi50Y2w6MjQ0Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3B1bGwuYzo0MzkKIG1zZ2lkICIiCi0iKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKLSIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgogbXNnc3RyICIiCi0iKiBVbnZlcnNpb25pZXJ0ZSBEYXRlaSBoYXQgJWQgQnl0ZXMuXG4iCi0iKiBOdXIgZXJzdGUgJWQgQnl0ZXMgd2VyZGVuIGFuZ2V6ZWlndC5cbiIKKyJFcyBnaWJ0IGtlaW5lIEthbmRpZGF0ZW4gZsO8ciBNZXJnZSBpbm5lcmhhbGIgZGVyIFJlZmVyZW56ZW4sIGRpZSBlYmVuICIKKyJhbmdlZm9yZGVydCB3dXJkZW4uIgogCi0jOiBsaWIvZGlmZi50Y2w6MjUwCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3B1bGwuYzo0NDAKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICIiCisiSW0gQWxsZ2VtZWluZW4gYmVkZXV0ZXQgZGFzLCBkYXNzIFNpZSBlaW5lbiBSZWZzcGVjIG1pdCBXaWxkY2FyZHMgYW5nZWdlYmVuXG4iCisiaGFiZW4sIGRlciBhdWYgZGVyIEdlZ2Vuc2VpdGUgbWl0IGtlaW5lbiBSZWZlcmVuemVuIMO8YmVyZWluc3RpbW10LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyJTaWUgZsO8aHJ0ZW4gXCJwdWxsXCIgdm9uIFJlbW90ZS1SZXBvc2l0b3J5ICclcycgYXVzLCBvaG5lIGVpbmVuXG4iCisiQnJhbmNoIGFuenVnZWJlbi4gRGEgZGFzIG5pY2h0IGRhcyBrb25maWd1cmllcnRlIFN0YW5kYXJkLVJlbW90ZS1cbiIKKyJSZXBvc2l0b3J5IGbDvHIgZGVuIGFrdHVlbGxlbiBCcmFuY2ggaXN0LCBtw7xzc2VuIFNpZSBlaW5lbiBCcmFuY2ggYXVmXG4iCisiZGVyIEJlZmVobHN6ZWlsZSBhbmdlYmVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ4IGJ1aWx0aW4vcmViYXNlLmM6MTM3NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAiSW0gTW9tZW50IGF1ZiBrZWluZW0gQnJhbmNoLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUwIGJ1aWx0aW4vcHVsbC5jOjQ2NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAiIgorIkJpdHRlIGdlYmVuIFNpZSBkZW4gQnJhbmNoIGFuLCBnZWdlbiB3ZWxjaGVuIFNpZSBcInJlYmFzZVwiIGF1c2bDvGhyZW4gIgorIm3DtmNodGVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcHVsbC5jOjQ2NyBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICJCaXR0ZSBnZWJlbiBTaWUgZGVuIEJyYW5jaCBhbiwgd2VsY2hlbiBTaWUgenVzYW1tZW5mw7xocmVuIG3DtmNodGVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUzIGJ1aWx0aW4vcHVsbC5jOjQ2OAorbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlNpZWhlIGdpdC1wdWxsKDEpIGbDvHIgd2VpdGVyZSBEZXRhaWxzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDU1IGJ1aWx0aW4vcHVsbC5jOjQ2MSBidWlsdGluL3B1bGwuYzo0NzAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MSBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjxSZW1vdGUtUmVwb3NpdG9yeT4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NzAgYnVpbHRpbi9wdWxsLmM6NDc1CisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY1Cittc2dpZCAiPGJyYW5jaD4iCittc2dzdHIgIjxCcmFuY2g+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NjMgYnVpbHRpbi9yZWJhc2UuYzoxMzczIGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiRXMgZ2lidCBrZWluZSBUcmFja2luZy1JbmZvcm1hdGlvbmVuIGbDvHIgZGVuIGFrdHVlbGxlbiBCcmFuY2guIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzIgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgIiIKKyJXZW5uIFNpZSBUcmFja2luZy1JbmZvcm1hdGlvbmVuIGbDvHIgZGllc2VuIEJyYW5jaCBzZXR6ZW4gbcO2Y2h0ZW4sIGvDtm5uZW4gIgorIlNpZVxuIgorImRpZXMgdHVuIG1pdDoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIklocmUgS29uZmlndXJhdGlvbiBnaWJ0IGFuLCBkZW4gTWVyZ2UgbWl0IFJlZmVyZW56ICclcydcbiIKKyJkZXMgUmVtb3RlLVJlcG9zaXRvcmllcyBkdXJjaHp1ZsO8aHJlbiwgYWJlciBkaWVzZSBSZWZlcmVuelxuIgorInd1cmRlIG5pY2h0IGFuZ2Vmb3JkZXJ0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgY29tbWl0ICVzIgorbXNnc3RyICJLb25udGUgbmljaHQgYXVmIENvbW1pdCAnJXMnIHp1Z3JlaWZlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg2NworbXNnaWQgImlnbm9yaW5nIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZm9yIHJlYmFzZSIKK21zZ3N0ciAiSWdub3JpZXJlIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZsO8ciBSZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgIi0tW25vLV1hdXRvc3Rhc2ggaXN0IG51ciBtaXQgLS1yZWJhc2UgenVsw6Rzc2lnLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTMwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorIkFrdHVhbGlzaWVyZSBlaW5lbiB1bmdlYm9yZW5lbiBCcmFuY2ggbWl0IMOEbmRlcnVuZ2VuLCBkaWUgenVtIENvbW1pdCAiCisidm9yZ2VtZXJrdCBzaW5kLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTM0Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAiUHVsbCBtaXQgUmViYXNlIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzUKK21zZ2lkICJwbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJCaXR0ZSBjb21taXR0ZW4gU2llIGRpZSDDhG5kZXJ1bmdlbiBvZGVyIGJlbnV0emVuIFNpZSBcInN0YXNoXCIuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisiXCJmZXRjaFwiIGFrdHVhbGlzaWVydGUgZGllIFNwaXR6ZSBkZXMgYWt0dWVsbGVuIEJyYW5jaGVzLlxuIgorIlNwdWxlIElociBBcmJlaXRzdmVyemVpY2huaXMgdm9uIENvbW1pdCAlcyB2b3IuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiS2FubiBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgdm9yc3B1bGVuLlxuIgorIk5hY2hkZW0gU2llIHNpY2hlcmdlc3RlbGx0IGhhYmVuLCBhbGxlcyBTY2jDvHR6ZW5zd2VydGUgZGVyIEF1c2dhYmUgdm9uXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorImdlc3BlaWNoZXJ0IHp1IGhhYmVuLiBGw7xocmVuIFNpZVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInp1ciBXaWVkZXJoZXJzdGVsbHVuZyBhdXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODEKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAiS2FubiBuaWNodCBtZWhyZXJlIEJyYW5jaGVzIGluIGVpbmVuIGxlZXJlbiBCcmFuY2ggenVzYW1tZW5mw7xocmVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTg1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAiS2FubiBSZWJhc2UgbmljaHQgYXVmIG1laHJlcmUgQnJhbmNoZXMgYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk5MgorbXNnaWQgImNhbm5vdCByZWJhc2Ugd2l0aCBsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIgorbXNnc3RyICIiCisiS2FubiBSZWJhc2UgbmljaHQgbWl0IGxva2FsIGF1ZmdlemVpY2huZXRlbiDDhG5kZXJ1bmdlbiBpbiBTdWJtb2R1bGVuICIKKyJhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxPcHRpb25lbj5dIFs8UmVwb3NpdG9yeT4gWzxSZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL3B1c2guYzoxMTIKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgIkt1cnpzY2hyaWZ0IGbDvHIgVGFnIG9obmUgPFRhZz4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tZGVsZXRlIGFremVwdGllcnQgbnVyIHJlaW5lIFJlZmVyZW56bmFtZW4gYWxzIFppZWwuIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKIG1zZ2lkICIiCiAiXG4iCi0iKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCi0iKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKIG1zZ3N0ciAiIgogIlxuIgotIiogVW52ZXJzaW9uaWVydGUgRGF0ZWksIGhpZXIgYWJnZXNjaG5pdHRlbiBkdXJjaCAlcy5cbiIKLSIqIFp1bSBBbnNlaGVuIGRlciB2b2xsc3TDpG5kaWdlbiBEYXRlaSBleHRlcm5lbiBFZGl0b3IgYmVudXR6ZW4uXG4iCisiVW0gZWluZSBWYXJpYW50ZSBwZXJtYW5lbnQgenUgdmVyd2VuZGVuLCBzaWVoZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwICIKKyJjb25maWcnLiIKIAotIzogbGliL2RpZmYudGNsOjU4MwotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICIiCi0iRmVobGVyIGJlaW0gSGVyYXVzbmVobWVuIGRlcyBnZXfDpGhsdGVuIFBhdGNoLUJsb2NrcyBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nLiIKLQotIzogbGliL2RpZmYudGNsOjU5MQotbXNnaWQgIkZhaWxlZCB0byByZXZlcnQgc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkZlaGxlciBiZWltIFp1csO8Y2tuZWhtZW4gZGVzIGdld8OkaGx0ZW4gUGF0Y2gtQmxvY2tzLiIKLQotIzogbGliL2RpZmYudGNsOjU5NAotbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gQmVyZWl0c3RlbGxlbiBkZXMgZ2V3w6RobHRlbiBQYXRjaC1CbG9ja3MuIgotCi0jOiBsaWIvZGlmZi50Y2w6Njg3Ci1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIkZlaGxlciBiZWltIEhlcmF1c25laG1lbiBkZXIgZ2V3w6RobHRlbiBaZWlsZSBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nLiIKLQotIzogbGliL2RpZmYudGNsOjY5NgotbXNnaWQgIkZhaWxlZCB0byByZXZlcnQgc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIkZlaGxlciBiZWltIFp1csO8Y2tuZWhtZW4gZGVyIGdld8OkaGx0ZW4gWmVpbGUuIgotCi0jOiBsaWIvZGlmZi50Y2w6NzAwCi1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBCZXJlaXRzdGVsbGVuIGRlciBnZXfDpGhsdGVuIFplaWxlLiIKLQotIzogbGliL2RpZmYudGNsOjg4OQotbXNnaWQgIkZhaWxlZCB0byB1bmRvIGxhc3QgcmV2ZXJ0LiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gUsO8Y2tnw6RuZ2lnbWFjaGVuIGRlcyBsZXR6dGVuIFp1csO8Y2tuZWhtZW4tQ29tbWl0cyIKLQotIzogbGliL3NzaGtleS50Y2w6MzQKLW1zZ2lkICJObyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiS2VpbmUgU2NobMO8c3NlbCBnZWZ1bmRlbi4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjM3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKLW1zZ3N0ciAiw5ZmZmVudGxpY2hlciBTY2hsw7xzc2VsIGdlZnVuZGVuIGluOiAlcyIKLQotIzogbGliL3NzaGtleS50Y2w6NDMKLW1zZ2lkICJHZW5lcmF0ZSBLZXkiCi1tc2dzdHIgIlNjaGzDvHNzZWwgZXJ6ZXVnZW4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjYxCi1tc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCi1tc2dzdHIgIkluIFp3aXNjaGVuYWJsYWdlIGtvcGllcmVuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo3NQotbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgotbXNnc3RyICJJaHIgT3BlblNTSCDDtmZmZW5saWNoZXIgU2NobMO8c3NlbCIKLQotIzogbGliL3NzaGtleS50Y2w6ODMKLW1zZ2lkICJHZW5lcmF0aW5nLi4uIgotbXNnc3RyICJFcnpldWdlbi4uLiIKLQotIzogbGliL3NzaGtleS50Y2w6ODkKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgogIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKICIlcyIKIG1zZ3N0ciAiIgotIktvbm50ZSDCu3NzaC1rZXlnZW7CqyBuaWNodCBzdGFydGVuOlxuIgorIkRlciBOYW1lIGRlcyBVcHN0cmVhbS1CcmFuY2hlcyBzdGltbXQgbmljaHQgbWl0IGRlbSBOYW1lbiBJaHJlc1xuIgorImFrdHVlbGxlbiBCcmFuY2hlcyDDvGJlcmVpbi4gVW0gYXVmIGRlbiBVcHN0cmVhbS1CcmFuY2ggaW4gZGVtIFJlbW90ZS1cbiIKKyJSZXBvc2l0b3J5IHp1IHZlcnNlbmRlbiwgYmVudXR6ZW4gU2llOlxuIgogIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVW0gYXVmIGRlbiBCcmFuY2ggbWl0IGRlbXNlbGJlbiBOYW1lbiBpbSBSZW1vdGUtUmVwb3NpdG9yeSB6dSB2ZXJzZW5kZW4sXG4iCisiYmVudXR6ZW4gU2llOlxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCiAiJXMiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjExNgotbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKLW1zZ3N0ciAiU2NobMO8c3NlbGVyemV1Z3VuZyBmZWhsZ2VzY2hsYWdlbi4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjEyMwotbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCi1tc2dzdHIgIlNjaGzDvHNzZWxlcnpldWd1bmcgZXJmb2xncmVpY2gsIGFiZXIga2VpbmUgU2NobMO8c3NlbCBnZWZ1bmRlbi4iCi0KLSM6IGxpYi9zc2hrZXkudGNsOjEyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKLW1zZ3N0ciAiSWhyIFNjaGzDvHNzZWwgaXN0IGFiZ2VsZWd0IGluOiAlcyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgKCVzKTogQ3JlYXRlIEJyYW5jaCIKLW1zZ3N0ciAiJXMgKCVzKTogQnJhbmNoIGVyc3RlbGxlbiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI4Ci1tc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCi1tc2dzdHIgIk5ldWVuIEJyYW5jaCBlcnN0ZWxsZW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MgotbXNnaWQgIkJyYW5jaCBOYW1lIgotbXNnc3RyICJCcmFuY2huYW1lIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTcKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiUGFzc2VuZCB6dSBUcmFja2luZ2JyYW5jaC1OYW1lIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKLW1zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKLW1zZ3N0ciAiQW5mYW5nc3ZlcnNpb24iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgotbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgotbXNnc3RyICJFeGlzdGllcmVuZGVuIEJyYW5jaCBha3R1YWxpc2llcmVuOiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Ci1tc2dpZCAiTm8iCi1tc2dzdHIgIk5laW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAotbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgotbXNnc3RyICJOdXIgVm9yc3B1bGVuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKLW1zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKLW1zZ3N0ciAiQnJhbmNoIGF1c2NoZWNrZW4gbmFjaCBFcnN0ZWxsZW4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzIKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKLW1zZ3N0ciAiQml0dGUgd8OkaGxlbiBTaWUgZWluZW4gVHJhY2tpbmdicmFuY2guIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgotbXNnc3RyICJUcmFja2luZ2JyYW5jaCDCuyVzwqsgaXN0IGtlaW4gQnJhbmNoIGltIGV4dGVybmVuIFJlcG9zaXRvcnkuIgotCi0jOiBsaWIvY29uc29sZS50Y2w6NTkKLW1zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICJWZXJhcmJlaXR1bmcuIEJpdHRlIHdhcnRlbi4uLiIKLQotIzogbGliL2NvbnNvbGUudGNsOjE4NgotbXNnaWQgIlN1Y2Nlc3MiCi1tc2dzdHIgIkVyZm9sZ3JlaWNoIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MjAwCi1tc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgotbXNnc3RyICJGZWhsZXI6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuIgotCi0jOiBsaWIvbGluZS50Y2w6MTcKLW1zZ2lkICJHb3RvIExpbmU6IgotbXNnc3RyICJHZWhlIHp1IFplaWxlOiIKLQotIzogbGliL2xpbmUudGNsOjIzCi1tc2dpZCAiR28iCi1tc2dzdHIgIkdlaGUiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MgotbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCi1tc2dzdHIgIkxvc2dlbMO2c3RlIEFyYmVpdHNrb3BpZS1WZXJzaW9uIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKLW1zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKLW1zZ3N0ciAiVmVyc2lvbiBSZWdleC1BdXNkcnVjazoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgotbXNnaWQgIkxvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiTG9rYWxlciBCcmFuY2giCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NwotbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiVHJhY2tpbmdicmFuY2giCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4MiBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ0Ci1tc2dpZCAiVGFnIgotbXNnc3RyICJUYWciCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAiVW5nw7xsdGlnZSBWZXJzaW9uOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjM0MgotbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKLW1zZ3N0ciAiS2VpbmUgVmVyc2lvbiBhdXNnZXfDpGhsdC4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNTAKLW1zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKLW1zZ3N0ciAiVmVyc2lvbnMtQXVzZHJ1Y2sgaXN0IGxlZXIuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTM3Ci1tc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAiQWt0dWFsaXNpZXJ0IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY1Ci1tc2dpZCAiVVJMIgotbXNnc3RyICJVUkwiCi0KLSM6IGxpYi9jb21taXQudGNsOjkKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCiAiXG4iCi0iWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKLSJ0byBhbWVuZC5cbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgogbXNnc3RyICIiCi0iS2VpbiBDb21taXQgenVyIE5hY2hiZXNzZXJ1bmcgdm9yaGFuZGVuLlxuIgorIlNpZSBiZWZpbmRlbiBzaWNoIGltIE1vbWVudCBhdWYga2VpbmVtIEJyYW5jaC5cbiIKKyJVbSBkaWUgSGlzdG9yaWUsIGbDvGhyZW5kIHp1bSBha3R1ZWxsZW4gKGxvc2dlbMO2c3RlciBIRUFEKVxuIgorIlN0YXR1cyB6dSB2ZXJzZW5kZW4sIGJlbnV0emVuIFNpZVxuIgogIlxuIgotIlNpZSBzaW5kIGRhYmVpLCBkZW4gZXJzdGVuIENvbW1pdCB6dSBlcnN0ZWxsZW4uIEVzIGdpYnQga2VpbmVuIGV4aXN0aWVyZW5kZW4gIgotIkNvbW1pdCwgZGVuIFNpZSBuYWNoYmVzc2VybiBrw7ZubnRlbi5cbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8TmFtZS1kZXMtUmVtb3RlLUJyYW5jaGVzPlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxOAorIzogYnVpbHRpbi9wdXNoLmM6MjAwCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgogIlxuIgotIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCi0iY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKLSJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgogbXNnc3RyICIiCi0iTmFjaGJlc3NlcnVuZyBiZWkgWnVzYW1tZW5mw7xocnVuZyBuaWNodCBtw7ZnbGljaC5cbiIKKyJEZXIgYWt0dWVsbGUgQnJhbmNoICVzIGhhdCBrZWluZW4gVXBzdHJlYW0tQnJhbmNoLlxuIgorIlVtIGRlbiBha3R1ZWxsZW4gQnJhbmNoIHp1IHZlcnNlbmRlbiB1bmQgZGVuIFJlbW90ZS1CcmFuY2hcbiIKKyJhbHMgVXBzdHJlYW0tQnJhbmNoIHp1IHNldHplbiwgYmVudXR6ZW4gU2llXG4iCiAiXG4iCi0iU2llIGhhYmVuIGRhcyBadXNhbW1lbmbDvGhyZW4gdm9uIENvbW1pdHMgYW5nZWZhbmdlbiwgYWJlciBub2NoIG5pY2h0ICIKLSJiZWVuZGV0LiBTaWUga8O2bm5lbiBrZWluZW4gdm9yaWdlbiBDb21taXQgbmFjaGJlc3Nlcm4sIHNvbGFuZ2UgZWluZSAiCi0idW5mZXJ0aWdlIFp1c2FtbWVuZsO8aHJ1bmcgZXhpc3RpZXJ0LiBEYXp1IG3DvHNzZW4gU2llIGRpZSBadXNhbW1lbmbDvGhydW5nICIKLSJiZWVuZGVuIG9kZXIgYWJicmVjaGVuLlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgogCi0jOiBsaWIvY29tbWl0LnRjbDo1NgotbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVyIENvbW1pdGRhdGVuIGbDvHIgTmFjaGJlc3Nlcm46IgotCi0jOiBsaWIvY29tbWl0LnRjbDo4MwotbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCi1tc2dzdHIgIkJlbnV0emVybmFtZSBrb25udGUgbmljaHQgYmVzdGltbXQgd2VyZGVuOiIKLQotIzogbGliL2NvbW1pdC50Y2w6ODgKLW1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgotbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IHZvbiBHSVRfQ09NTUlUVEVSX0lOREVOVDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjEzOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgotbXNnc3RyICJXYXJuaW5nOiBUY2wvVGsgdW50ZXJzdMO8dHp0IGRpZSBaZWljaGVuY29kaWVydW5nIMK7JXPCqyBuaWNodC4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE1OAotbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisjOiBidWlsdGluL3B1c2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCiBtc2dzdHIgIiIKLSJEZXIgbGV0enRlIGdlbGFkZW5lIFN0YXR1cyBzdGltbXQgbmljaHQgbWVociBtaXQgZGVtIFJlcG9zaXRvcnkgw7xiZXJlaW4uXG4iCi0iXG4iCi0iRWluIGFuZGVyZXMgR2l0LVByb2dyYW1tIGhhdCBkYXMgUmVwb3NpdG9yeSBzZWl0IGRlbSBsZXR6dGVuIExhZGVuICIKLSJnZcOkbmRlcnQuICBWb3IgZGVtIG7DpGNoc3RlbiBDb21taXQgbXVzcyBuZXUgZ2VsYWRlbiB3ZXJkZW4uXG4iCi0iXG4iCi0iRXMgd2lyZCBnbGVpY2ggbmV1IGdlbGFkZW4uXG4iCisiRGVyIGFrdHVlbGxlIEJyYW5jaCAlcyBoYXQgbWVocmVyZSBVcHN0cmVhbS1CcmFuY2hlcywgXCJwdXNoXCIgdmVyd2VpZ2VydC4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4MgotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9wdXNoLmM6MjExCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgotImJlZm9yZSBjb21taXR0aW5nLlxuIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKIG1zZ3N0ciAiIgotIk5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4ga8O2bm5lbiBuaWNodCBjb21taXR0ZXQgd2VyZGVuLlxuIgotIlxuIgotIkRpZSBEYXRlaSDCuyVzwqsgaGF0IG5vY2ggbmljaHQgYXVmZ2Vsw7ZzdGUgWnVzYW1tZW5mw7xocnVuZ3MtS29uZmxpa3RlLiBTaWUgIgotIm3DvHNzZW4gZGllc2UgS29uZmxpa3RlIGF1ZmzDtnNlbiB1bmQgZGllIERhdGVpZW4gaW4gZGllIEJlcmVpdHN0ZWxsdW5nICIKLSJoaW56dWbDvGdlbiwgYmV2b3IgU2llIGNvbW1pdHRlbiBrw7ZubmVuLlxuIgorIlNpZSB2ZXJzZW5kZW4gbmFjaCAnJXMnLCB3ZWxjaGVzIGtlaW4gVXBzdHJlYW0tUmVwb3NpdG9yeSBJaHJlcyBha3R1ZWxsZW5cbiIKKyJCcmFuY2hlcyAnJXMnIGlzdCwgb2huZSBhbnp1Z2ViZW4sIHdhcyB2ZXJzZW5kZXQgd2VyZGVuIHNvbGwsIHVtIHdlbGNoZW5cbiIKKyJSZW1vdGUtQnJhbmNoIHp1IGFrdHVhbGlzaWVyZW4uIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxOTAKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAogbXNnaWQgIiIKLSJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgogbXNnc3RyICIiCi0iVW5iZWthbm50ZXIgRGF0ZWl6dXN0YW5kIMK7JXPCqy5cbiIKLSJcbiIKLSJEYXRlaSDCuyVzwqsga2FubiBuaWNodCBjb21taXR0ZXQgd2VyZGVuLlxuIgorIlNpZSBoYWJlbiBrZWluZSBSZWZzcGVjIGbDvHIgXCJwdXNoXCIgYW5nZWdlYmVuLCB1bmQgcHVzaC5kZWZhdWx0IGlzdCAiCisiXCJub3RoaW5nXCIuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxOTgKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3NwogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgogbXNnc3RyICIiCi0iS2VpbmUgw4RuZGVydW5nZW4gdm9yaGFuZGVuLCBkaWUgY29tbWl0dGV0IHdlcmRlbiBrw7ZubnRlbi5cbiIKLSJcbiIKLSJTaWUgbcO8c3NlbiBtaW5kZXN0ZW5zIGVpbmUgRGF0ZWkgYmVyZWl0c3RlbGxlbiwgYmV2b3IgU2llIGNvbW1pdHRlbiBrw7ZubmVuLlxuIgorIkFrdHVhbGlzaWVydW5nZW4gd3VyZGVuIHp1csO8Y2tnZXdpZXNlbiwgd2VpbCBkaWUgU3BpdHplIElocmVzIGFrdHVlbGxlblxuIgorIkJyYW5jaGVzIGhpbnRlciBzZWluZW0gZXh0ZXJuZW4gR2VnZW5zdMO8Y2sgenVyw7xja2dlZmFsbGVuIGlzdC4gRsO8aHJlbiBTaWVcbiIKKyJkaWUgZXh0ZXJuZW4gw4RuZGVydW5nZW4genVzYW1tZW4gKHouIEIuICdnaXQgcHVsbCAuLi4nKSBiZXZvciBTaWUgXCJwdXNoXCJcbiIKKyJlcm5ldXQgYXVzZsO8aHJlbi5cbiIKKyJTaWVoZSBhdWNoIGRpZSBTZWt0aW9uICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnXG4iCisiZsO8ciB3ZWl0ZXJlIERldGFpbHMuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMTMKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4MwogbXNnaWQgIiIKLSJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0iXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKLSJcbiIKLSItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCi0iLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKLSItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCiBtc2dzdHIgIiIKLSJCaXR0ZSBnZWJlbiBTaWUgZWluZSBWZXJzaW9uc2Jlc2NocmVpYnVuZyBlaW4uXG4iCi0iXG4iCi0iRWluZSBndXRlIFZlcnNpb25zYmVzY2hyZWlidW5nIGVudGjDpGx0IGZvbGdlbmRlIEFic2Nobml0dGU6XG4iCi0iXG4iCi0iLSBFcnN0ZSBaZWlsZTogRWluZSBadXNhbW1lbmZhc3N1bmcsIHdhcyBtYW4gZ2VtYWNodCBoYXQuXG4iCi0iXG4iCi0iLSBad2VpdGUgWmVpbGU6IExlZXJ6ZWlsZVxuIgotIlxuIgotIi0gUmVzdDogRWluZSBhdXNmw7xocmxpY2hlIEJlc2NocmVpYnVuZywgd2FydW0gZGllc2Ugw4RuZGVydW5nIGhpbGZyZWljaCBpc3QuXG4iCisiQWt0dWFsaXNpZXJ1bmdlbiB3dXJkZW4genVyw7xja2dld2llc2VuLCB3ZWlsIGRpZSBTcGl0emUgZWluZXMgdmVyc2VuZGV0ZW5cbiIKKyJCcmFuY2hlcyBoaW50ZXIgc2VpbmVtIGV4dGVybmVuIEdlZ2Vuc3TDvGNrIHp1csO8Y2tnZWZhbGxlbiBpc3QuIENoZWNrZW4gU2llXG4iCisiZGllc2VuIEJyYW5jaCBhdXMgdW5kIGbDvGhyZW4gU2llIGRpZSBleHRlcm5lbiDDhG5kZXJ1bmdlbiB6dXNhbW1lblxuIgorIih6LiBCLiAnZ2l0IHB1bGwgLi4uJykgYmV2b3IgU2llIGVybmV1dCBcInB1c2hcIiBhdXNmw7xocmVuLlxuIgorIlNpZWhlIGF1Y2ggZGllIFNla3Rpb24gJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCdcbiIKKyJmw7xyIHdlaXRlcmUgRGV0YWlscy4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI0NAotbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgotbXNnc3RyICJBdWZydWZlbiBkZXMgwrtwcmUtY29tbWl0IGhvb2vCqy4uLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MjU5Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCi1tc2dzdHIgIkNvbW1pdHRlbiBhYmdlbGVobnQgZHVyY2ggwrtwcmUtY29tbWl0IGhvb2vCqy4iCi0KLSM6IGxpYi9jb21taXQudGNsOjI3OAorIzogYnVpbHRpbi9wdXNoLmM6Mjg5CiBtc2dpZCAiIgotIllvdSBhcmUgYWJvdXQgdG8gY29tbWl0IG9uIGEgZGV0YWNoZWQgaGVhZC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyAiCi0idGhpbmcgdG8gZG8gYmVjYXVzZSBpZiB5b3Ugc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoIHlvdSB3aWxsIGxvc2UgeW91ciAiCi0iY2hhbmdlcyBhbmQgaXQgY2FuIGJlIGRpZmZpY3VsdCB0byByZXRyaWV2ZSB0aGVtIGxhdGVyIGZyb20gdGhlIHJlZmxvZy4gWW91ICIKLSJzaG91bGQgcHJvYmFibHkgY2FuY2VsIHRoaXMgY29tbWl0IGFuZCBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIGNvbnRpbnVlLlxuIgotIiBcbiIKLSIgRG8geW91IHJlYWxseSB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIENvbW1pdD8iCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgogbXNnc3RyICIiCi0iU2llIHNpbmQgZGFiZWksIGVpbmVuIENvbW1pdCBhdWYgbG9zZ2Vsw7ZzdGUgQnJhbmNoc3BpdHplICjCu2NvbW1pdCB0byAiCi0iZGV0YWNoZWQgaGVhZMKrKSB6dSBlcnN0ZWxsZW4uIERhcyBpc3Qgcmlza2FudCwgZGVubiB3ZW5uIFNpZSB6dSBlaW5lbSAiCi0iYW5kZXJlbiBCcmFuY2ggd2VjaHNlbG4sIHfDvHJkZW4gU2llIGRpZXNlIMOEbmRlcnVuZ2VuIHZlcmxpZXJlbiB1bmQgZXMgaXN0ICIKLSJuYWNodHLDpGdsaWNoIHNjaHdpZXJpZywgZGllc2UgYXVzIGRlbSBDb21taXQtTG9nICjCu3JlZmxvZ8KrKSB3aWVkZXJ6dWZpbmRlbi4gIgotIkVzIHdpcmQgZW1wZm9obGVuLCBkaWVzZW4gQ29tbWl0IGFienVicmVjaGVuIHVuZCB6dW7DpGNoc3QgZWluZW4gbmV1ZW4gQnJhbmNoICIKLSJ6dSBlcnN0ZWxsZW4uXG4iCi0iXG4iCi0iIFdvbGxlbiBTaWUgZGVuIENvbW1pdCB0cm90emRlbSBpbiBkaWVzZXIgRm9ybSBlcnN0ZWxsZW4/IgorIkFrdHVhbGlzaWVydW5nZW4gd3VyZGVuIHp1csO8Y2tnZXdpZXNlbiwgd2VpbCBkYXMgUmVtb3RlLVJlcG9zaXRvcnkgQ29tbWl0cyAiCisiZW50aMOkbHQsXG4iCisiZGllIGxva2FsIG5pY2h0IHZvcmhhbmRlbiBzaW5kLiBEYXMgd2lyZCDDvGJsaWNoZXJ3ZWlzZSBkdXJjaCBlaW5lbiBcInB1c2hcIiAiCisidm9uXG4iCisiQ29tbWl0cyBhdWYgZGllc2VsYmUgUmVmZXJlbnogdm9uIGVpbmVtIGFuZGVyZW4gUmVwb3NpdG9yeSBhdXMgdmVydXJzYWNodC5cbiIKKyJWaWVsbGVpY2h0IG3DvHNzZW4gU2llIGRpZSBleHRlcm5lbiDDhG5kZXJ1bmdlbiB6dXNhbW1lbmbDvGhyZW4gKHouIEIuICdnaXQgIgorInB1bGwgLi4uJylcbiIKKyJiZXZvciBTaWUgZXJuZXV0IFwicHVzaFwiIGF1c2bDvGhyZW4uXG4iCisiU2llaGUgYXVjaCBkaWUgU2VrdGlvbiAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJ1xuIgorImbDvHIgd2VpdGVyZSBEZXRhaWxzLiIKIAotIzogbGliL2NvbW1pdC50Y2w6Mjk5Ci1tc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgIkF1ZnJ1ZmVuIGRlcyDCu2NvbW1pdC1tc2cgaG9va8KrLi4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDozMTQKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiQ29tbWl0dGVuIGFiZ2VsZWhudCBkdXJjaCDCu2NvbW1pdC1tc2cgaG9va8KrLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzI3Ci1tc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgotbXNnc3RyICLDhG5kZXJ1bmdlbiBjb21taXR0ZW4uLi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM0NAotbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAid3JpdGUtdHJlZSBmZWhsZ2VzY2hsYWdlbjoiCi0KLSM6IGxpYi9jb21taXQudGNsOjM0NSBsaWIvY29tbWl0LnRjbDozOTUgbGliL2NvbW1pdC50Y2w6NDIyCi1tc2dpZCAiQ29tbWl0IGZhaWxlZC4iCi1tc2dzdHIgIkNvbW1pdHRlbiBmZWhsZ2VzY2hsYWdlbi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCi1tc2dzdHIgIlZlcnNpb24gwrslc8KrIHNjaGVpbnQgYmVzY2jDpGRpZ3QgenUgc2VpbiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzY3Ci1tc2dpZCAiIgotIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgotIlxuIgotIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCi0iXG4iCi0iQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKIG1zZ3N0ciAiIgotIktlaW5lIMOEbmRlcnVuZ2VuIHp1bSBjb21taXR0ZW4uXG4iCi0iXG4iCi0iRXMgZ2lidCBrZWluZSBnZcOkbmRlcnRlIERhdGVpIGluIGRpZXNlbSBDb21taXQgdW5kIGVzIHd1cmRlIGF1Y2ggbmljaHRzICIKLSJ6dXNhbW1lbmdlZsO8aHJ0LlxuIgotIlxuIgotIkRhcyBBcmJlaXRzdmVyemVpY2huaXMgd2lyZCBkYWhlciBqZXR6dCBuZXUgZ2VsYWRlbi5cbiIKKyJBa3R1YWxpc2llcnVuZ2VuIHd1cmRlbiB6dXLDvGNrZ2V3aWVzZW4sIHdlaWwgZGFzIFRhZyBiZXJlaXRzXG4iCisiaW0gUmVtb3RlLVJlcG9zaXRvcnkgZXhpc3RpZXJ0LiIKIAotIzogbGliL2NvbW1pdC50Y2w6Mzc0Ci1tc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgotbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiwgZGllIGNvbW1pdHRldCB3ZXJkZW4ga8O2bm5lbi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM5NAotbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCi1tc2dzdHIgImNvbW1pdC10cmVlIGZlaGxnZXNjaGxhZ2VuOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NDIxCi1tc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgotbXNnc3RyICJ1cGRhdGUtcmVmIGZlaGxnZXNjaGxhZ2VuOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NTE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgotbXNnc3RyICJDb21taXQgJXMgZXJzdGVsbHQ6ICVzIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBEZWxldGUgQnJhbmNoIgotbXNnc3RyICIlcyAoJXMpOiBCcmFuY2ggbMO2c2NoZW4iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMQotbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCi1tc2dzdHIgIkxva2FsZW4gQnJhbmNoIGzDtnNjaGVuIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKLW1zZ2lkICJMb2NhbCBCcmFuY2hlcyIKLW1zZ3N0ciAiTG9rYWxlIEJyYW5jaGVzIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTEKLW1zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKLW1zZ3N0ciAiTnVyIGzDtnNjaGVuLCB3ZW5uIHp1c2FtbWVuZ2Vmw7xocnQgbmFjaCIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKLW1zZ3N0ciAiRm9sZ2VuZGUgQnJhbmNoZXMgc2luZCBub2NoIG5pY2h0IG1pdCDCuyVzwqsgenVzYW1tZW5nZWbDvGhydDoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMzEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIgLSAlczoiCi1tc2dzdHIgIiAtICVzOiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9wdXNoLmM6Mjk5CiBtc2dpZCAiIgotIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIlNpZSBrw7ZubmVuIGtlaW5lIFJlbW90ZS1SZWZlcmVueiBha3R1YWxpc2llcmVuLCBkaWUgYXVmIGVpbiBPYmpla3QgemVpZ3QsXG4iCisiZGFzIGtlaW4gQ29tbWl0IGlzdCwgb2RlciBlcyBhdWYgZWluIHNvbGNoZXMgT2JqZWt0IHplaWdlbiBsYXNzZW4sIG9obmVcbiIKKyJkaWUgT3B0aW9uICctLWZvcmNlJyB6dSB2ZXJ3ZW5kZW4uXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlZlcnNlbmRlIG5hY2ggJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzZW5kZW4gZWluaWdlciBSZWZlcmVuemVuIG5hY2ggJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAiYWxsZSBSZWZlcmVuemVuIHZlcnNlbmRlbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJhbGxlIFJlZmVyZW56ZW4gc3BpZWdlbG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NgorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICJSZWZlcmVuemVuIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIlRhZ3MgdmVyc2VuZGVuIChrYW5uIG5pY2h0IG1pdCAtLWFsbCBvZGVyIC0tbWlycm9yIHZlcndlbmRldCB3ZXJkZW4pIgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjcKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MiBidWlsdGluL3NlbmQtcGFjay5jOjE4MQorbXNnaWQgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKK21zZ3N0ciAiPFJlZmVyZW56bmFtZT46PEVyd2FydHVuZ3N3ZXJ0PiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgyCittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgIlJlZmVyZW56IG11c3Mgc2ljaCBhdWYgZGVtIGFuZ2VnZWJlbmVuIFdlcnQgYmVmaW5kZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NgorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAicmVrdXJzaXZlbiBcInB1c2hcIiB2b24gU3VibW9kdWxlbiBzdGV1ZXJuIgorCisjOiBidWlsdGluL3B1c2guYzo1NTggYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICJrbGVpbmVyZSBQYWtldGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICIncmVjZWl2ZSBwYWNrJyBQcm9ncmFtbSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgIlVwc3RyZWFtIGbDvHIgXCJnaXQgcHVsbC9zdGF0dXNcIiBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICJsb2thbCBnZWzDtnNjaHRlIFJlZmVyZW56ZW4gZW50ZmVybmVuIgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiXCJwcmUtcHVzaCBob29rXCIgdW1nZWhlbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3Cittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICJmZWhsZW5kZSwgYWJlciByZWxldmFudGUgVGFncyB2ZXJzZW5kZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MCBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICJzaWduaWVydCBcInB1c2hcIiBtaXQgR1BHIgorCisjOiBidWlsdGluL3B1c2guYzo1NzIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIKK21zZ3N0ciAiUmVmZXJlbnplbiBhdG9tYXIgdmVyc2VuZGVuIgorCisjOiBidWlsdGluL3B1c2guYzo1OTAKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLWRlbGV0ZSBpc3QgaW5rb21wYXRpYmVsIG1pdCAtLWFsbCwgLS1taXJyb3IgdW5kIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MgorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tZGVsZXRlIGthbm4gbnVyIG1pdCBSZWZlcmVuemVuIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3B1c2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAidW5nw7xsdGlnZXMgUmVwb3NpdG9yeSAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIktlaW4gWmllbCBmw7xyIFwicHVzaFwiIGtvbmZpZ3VyaWVydC5cbiIKKyJFbnR3ZWRlciBzcGV6aWZpemllcmVuIFNpZSBkaWUgVVJMIHZvbiBkZXIgQmVmZWhsc3plaWxlIG9kZXIga29uZmlndXJpZXJlbiAiCisiZWluIFJlbW90ZS1SZXBvc2l0b3J5IHVudGVyIEJlbnV0enVuZyB2b25cbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPE5hbWU+IDxVUkw+XG4iCisiXG4iCisidW5kIGbDvGhyZW4gXCJwdXNoXCIgZGFubiB1bnRlciBCZW51dHp1bmcgZGllc2VzIE5hbWVucyBhdXNcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPE5hbWU+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tYWxsIHVuZCAtLXRhZ3Mgc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiBidWlsdGluL3B1c2guYzo2MzAKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tYWxsIGthbm4gbmljaHQgbWl0IFJlZnNwZWNzIGtvbWJpbmllcnQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM0Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1taXJyb3IgdW5kIC0tdGFncyBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNgorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIkRpZSBPcHRpb24gLS1taXJyb3Iga2FubiBuaWNodCBtaXQgUmVmc3BlY3Mga29tYmluaWVydCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3B1c2guYzo2MzkKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tYWxsIHVuZCAtLW1pcnJvciBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0MworbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgIlB1c2gtT3B0aW9uZW4gZMO8cmZlbiBrZWluZSBaZWlsZW52b3JzY2h1YnplaWNoZW4gaGFiZW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjgKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorbXNnc3RyICIiCisiZ2l0IHJhbmdlLWRpZmYgWzxPcHRpb25lbj5dIDxhbHRlLUJhc2lzPi4uPGFsdGUtU3BpdHplPiA8bmV1ZS1CYXNpcz4uLjxuZXVlLSIKKyJTcGl0emU+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo5Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPE9wdGlvbmVuPl0gPGFsdGUtU3BpdHplPi4uLjxuZXVlLVNwaXR6ZT4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjEwCittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPGJhc2U+IDxvbGQtdGlwPiA8bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8T3B0aW9uZW4+XSA8QmFzaXM+IDxhbHRlLVNwaXR6ZT4gPG5ldWUtU3BpdHplPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjIKK21zZ2lkICJQZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICJQcm96ZW50c2F0eiBtaXQgd2VsY2hlbSBFcnpldWd1bmcgZ2V3aWNodGV0IHdpcmQiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI0Cittc2dpZCAidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIKK21zZ3N0ciAiZWluZmFjaGUgRGlmZi1GYXJiZW4gYmVudXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAibm90ZXMiCittc2dzdHIgIk5vdGl6ZW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAiYW4gJ2dpdCBsb2cnIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICJLZWluIC4uIGltIEJlcmVpY2g6ICclcyciCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjY0Cittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgIkZvcm1hdCBtaXQgZWluZmFjaGVtIEFyZ3VtZW50IG11c3Mgc3ltbWV0cmlzY2hlciBCZXJlaWNoIHNlaW4uIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgIkJlbsO2dGlnZSB6d2VpIENvbW1pdC1CZXJlaWNoZS4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDEKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08UHLDpGZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxEYXRlaT5dICgtLWVtcHR5IHwgPENvbW1pdC1SZWZlcmVuejE+IFs8Q29tbWl0LVJlZmVyZW56Mj4gIgorIls8Q29tbWl0LVJlZmVyZW56Mz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAicmVzdWx0aWVyZW5kZW4gSW5kZXggbmFjaCA8RGF0ZWk+IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAibnVyIGRlbiBJbmRleCBsZWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiTWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAiZWluZW4gTWVyZ2UsIHp1c8OkdHpsaWNoIHp1bSBMZXNlbiwgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIjMtV2VnZS1NZXJnZSwgd2VubiBrZWluIE1lcmdlIGF1ZiBEYXRlaWViZW5lIGVyZm9yZGVybGljaCBpc3QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiMy1XZWdlLU1lcmdlIGJlaSBWb3JoYW5kZW5zZWluIHZvbiBoaW56dWdlZsO8Z3Rlbi9lbnRmZXJudGVuIFplaWxlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzcKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJnZW5hdSB3aWUgLW0sIGFiZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRWludHLDpGdlIHZlcndlcmZlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjxVbnRlcnZlcnplaWNobmlzPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgImRhcyBWZXJ6ZWljaG5pcyBpbiBkZW4gSW5kZXggdW50ZXIgPFVudGVydmVyemVpY2huaXM+LyBsZXNlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDIKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMgbWl0IGRlbSBFcmdlYm5pcyBkZXMgTWVyZ2VzIGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ0Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ1Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJleHBsaXppdCBpZ25vcmllcnRlIERhdGVpZW4genUgw7xiZXJzY2hyZWliZW4gZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ4Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJkYXMgQXJiZWl0c3ZlcnplaWNobmlzIG5hY2ggZGVtIE1lcmdlIG5pY2h0IHByw7xmZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ5Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJ3ZWRlciBkZW4gSW5kZXgsIG5vY2ggZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MQorbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiQW53ZW5kdW5nIGRlcyBGaWx0ZXJzIGbDvHIgcGFydGllbGxlcyBBdXNjaGVja2VuIMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUzCittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICJ1bnBhY2stdHJlZXMgcHJvdG9rb2xsaWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiCittc2dzdHIgIlLDvGNrbWVsZHVuZ2VuIHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4Cittc2dpZCAiWW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIlNpZSBtw7xzc2VuIHp1ZXJzdCBkaWUgS29uZmxpa3RlIGluIElocmVtIGFrdHVlbGxlbiBJbmRleCBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMyCittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBzdHJlYW0+IFs8YnJhbmNoPl1dIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSBbLWldIFs8T3B0aW9uZW4+XSBbLS1leGVjIDxQcm9ncmFtbT5dIFstLW9udG8gPG5ldWUtQmFzaXM+IHwgLS0iCisia2VlcC1iYXNlXSBbPFVwc3RyZWFtPiBbPEJyYW5jaD5dXSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNAorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAtLXJvb3QgWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbPE9wdGlvbmVuPl0gWy0tZXhlYyA8UHJvZ3JhbW0+XSBbLS1vbnRvIDxuZXVlLUJhc2lzPl0gLS0iCisicm9vdCBbPEJyYW5jaD5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6MjAxIGJ1aWx0aW4vcmViYXNlLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAiVW5iZW51dHpiYXJlIFRPRE8tTGlzdGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2IGJ1aWx0aW4vcmViYXNlLmM6MjEyIGJ1aWx0aW4vcmViYXNlLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyNzEKK21zZ2lkICJubyBIRUFEPyIKK21zZ3N0ciAiS2VpbiBIRUFEPyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJXMiCittc2dzdHIgIktvbm50ZSB0ZW1wb3LDpHJlcyBWZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzA0Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIk1hcmtpZXJ1bmcgYXVmIGludGVyYWt0aXZlbiBSZWJhc2UgZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgIktvbm50ZSBUT0RPLUxpc3RlIG5pY2h0IGVyemV1Z2VuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0MDIKK21zZ2lkICJhIGJhc2UgY29tbWl0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCAtLXVwc3RyZWFtIG9yIC0tb250byIKK21zZ3N0ciAiRWluIEJhc2lzLUNvbW1pdCBtdXNzIG1pdCAtLXVwc3RyZWFtIG9kZXIgLS1vbnRvIGFuZ2VnZWJlbiB3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ1NworbXNnaWQgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDY5Cittc2dpZCAia2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJsZWVyZSBDb21taXRzIGJlaGFsdGVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiQ29tbWl0cyBtaXQgbGVlcmVyIEJlc2NocmVpYnVuZyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzIKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAiUmViYXNlIGF1ZiBNZXJnZS1Db21taXRzIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc0Cittc2dpZCAia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiCittc2dzdHIgIm9yaWdpbmFsZSBCcmFuY2gtUHVua3RlIGRlciBDb3VzaW5zIGJlaGFsdGVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NgorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIkNvbW1pdHMgdmVyc2NoaWViZW4sIGRpZSBtaXQgc3F1YXNoIS9maXh1cCEgYmVnaW5uZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc3Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICJDb21taXRzIHNpZ25pZXJlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzkgYnVpbHRpbi9yZWJhc2UuYzoxNDU1Cittc2dpZCAiZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorIlp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIGdlZ2Vuw7xiZXIgZGVtIFVwc3RyZWFtLUJyYW5jaCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODEKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgIlJlYmFzZSBmb3J0c2V0emVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MworbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICJDb21taXQgYXVzbGFzc2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiZGllIFRPRE8tTGlzdGUgYmVhcmJlaXRlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODYKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJkZW4gYWt0dWVsbGVuIFBhdGNoIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJDb21taXQtSURzIGluIGRlciBUT0RPLUxpc3RlIHZlcmvDvHJ6ZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkxCittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiQ29tbWl0LUlEcyBpbiBkZXIgVE9ETy1MaXN0ZSBlcndlaXRlcm4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkzCittc2dpZCAiY2hlY2sgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiZGllIFRPRE8tTGlzdGUgcHLDvGZlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTUKK21zZ2lkICJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIgorbXNnc3RyICJmaXh1cC9zcXVhc2gtWmVpbGVuIHVtb3JkbmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NworbXNnaWQgImluc2VydCBleGVjIGNvbW1hbmRzIGluIHRvZG8gbGlzdCIKK21zZ3N0ciAiXCJleGVjXCItQmVmZWhsZSBpbiBUT0RPLUxpc3RlIGVpbmbDvGdlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTgKK21zZ2lkICJvbnRvIgorbXNnc3RyICJhdWYiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgIkJlZ3Jlbnp1bmdzY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorbXNnaWQgInJlc3RyaWN0IHJldmlzaW9uIgorbXNnc3RyICJCZWdyZW56dW5nc2NvbW1pdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInNxdWFzaCBvbnRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgImRlciBVcHN0cmVhbS1Db21taXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJoZWFkLU5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZCBuYW1lIgorbXNnc3RyICJoZWFkLU5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEzCittc2dpZCAicmViYXNlIHN0cmF0ZWd5IgorbXNnc3RyICJSZWJhc2UtU3RyYXRlZ2llIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgIlN0cmF0ZWdpZS1PcHRpb25lbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTUKK21zZ2lkICJzdHJhdGVneSBvcHRpb25zIgorbXNnc3RyICJTdHJhdGVnaWUtT3B0aW9uZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAic3dpdGNoLXRvIgorbXNnc3RyICJ3ZWNoc2VsbiB6dSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTcKK21zZ2lkICJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIKK21zZ3N0ciAiZGVyIEJyYW5jaCBvZGVyIENvbW1pdCB6dW0gQXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTgKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgIm9udG8tTmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTgKK21zZ2lkICJvbnRvIG5hbWUiCittc2dzdHIgIm9udG8tTmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTkKK21zZ2lkICJjbWQiCittc2dzdHIgIkJlZmVobCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTkKK21zZ2lkICJ0aGUgY29tbWFuZCB0byBydW4iCittc2dzdHIgImF1c3p1ZsO8aHJlbmRlciBCZWZlaGwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyIGJ1aWx0aW4vcmViYXNlLmM6MTU0MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICJqZWRlbiBmZWhsZ2VzY2hsYWdlbmVuIGBleGVjYC1CZWZlaGwgbmV1IGFuc2V0emVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0MAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICItLVtuby1dcmViYXNlLWNvdXNpbnMgaGF0IG9obmUgLS1yZWJhc2UtbWVyZ2VzIGtlaW5lIEF1c3dpcmt1bmciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMgZXJmb3JkZXJ0IGVpbiBpbnRlcmFrdGl2ZXMgUmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAiS29ubnRlICdvbnRvJyBuaWNodCBiZXN0aW1tZW46ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlcyBvcmlnLWhlYWQ6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCittc2dzdHIgIklnbm9yaWVyZSB1bmfDvGx0aWdlcyBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIkthbm4gJXMgbmljaHQgc3BlaWNoZXJuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NDkKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgIktvbm50ZSBIRUFELUNvbW1pdCBuaWNodCBiZXN0aW1tZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk3MiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEKK21zZ2lkICIiCisiUmVzb2x2ZSBhbGwgY29uZmxpY3RzIG1hbnVhbGx5LCBtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgd2l0aFxuIgorIlwiZ2l0IGFkZC9ybSA8Y29uZmxpY3RlZF9maWxlcz5cIiwgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJZb3UgY2FuIGluc3RlYWQgc2tpcCB0aGlzIGNvbW1pdDogcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyJUbyBhYm9ydCBhbmQgZ2V0IGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSBcImdpdCByZWJhc2VcIiwgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKK21zZ3N0ciAiIgorIkzDtnNlbiBTaWUgYWxsZSBLb25mbGlrdGUgbWFudWVsbCBhdWYsIG1hcmtpZXJlbiBTaWUgZGllc2UgbWl0XG4iCisiXCJnaXQgYWRkL3JtIDxrb25mbGlrdGJlaGFmdGV0ZV9EYXRlaWVuPlwiIHVuZCBmw7xocmVuIFNpZSBkYW5uXG4iCisiXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBhdXMuXG4iCisiU2llIGvDtm5uZW4gYXVjaCBzdGF0dGRlc3NlbiBkaWVzZW4gQ29tbWl0IGF1c2xhc3NlbiwgaW5kZW1cbiIKKyJTaWUgXCJnaXQgcmViYXNlIC0tc2tpcFwiIGF1c2bDvGhyZW4uXG4iCisiVW0gYWJ6dWJyZWNoZW4gdW5kIHp1csO8Y2sgenVtIFp1c3RhbmQgdm9yIFwiZ2l0IHJlYmFzZVwiIHp1IGdlbGFuZ2VuLFxuIgorImbDvGhyZW4gU2llIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgYXVzLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheVxuIgorInRoZXNlIHJldmlzaW9uczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iCittc2dzdHIgIiIKKyJcbiIKKyJHaXQgc3RlbGx0ZSBlaW5lbiBGZWhsZXIgYmVpbSBWb3JiZXJlaXRlbiBkZXIgUGF0Y2hlcyB6dXJcbiIKKyJ3aWVkZXJob2x0ZW4gQW53ZW5kdW5nIGRlciBSZXZpc2lvbmVuIGZlc3Q6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiSW5mb2xnZSBkZXNzZW4ga2FubiBHaXQgYXVmIGRpZXNlbiBSZXZpc2lvbmVuIFJlYmFzZSBuaWNodFxuIgorImF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisiQml0dGUgZ2ViZW4gU2llIGRlbiBCcmFuY2ggYW4sIGdlZ2VuIHdlbGNoZW4gU2llIFwicmViYXNlXCIgYXVzZsO8aHJlbiAiCisibcO2Y2h0ZW4uXG4iCisiU2llaGUgZ2l0LXJlYmFzZSgxKSBmw7xyIERldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxCcmFuY2g+J1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJXZW5uIFNpZSBUcmFja2luZy1JbmZvcm1hdGlvbmVuIGbDvHIgZGllc2VuIEJyYW5jaCBzZXR6ZW4gbcO2Y2h0ZW4sXG4iCisia8O2bm5lbiBTaWUgZGllcyB0dW4gbWl0OlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxCcmFuY2g+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxMworbXNnaWQgImV4ZWMgY29tbWFuZHMgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgIlwiZXhlY1wiLUJlZmVobGUga8O2bm5lbiBrZWluZSBuZXVlbiBaZWlsZW4gZW50aGFsdGVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgIkxlZXJlciBcImV4ZWNcIi1CZWZlaGwuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDYKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAiUmViYXNlIGF1ZiBhbmdlZ2ViZW5lbiBCcmFuY2ggYW5zdGVsbGUgZGVzIFVwc3RyZWFtLUJyYW5jaGVzIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0OAorbXNnaWQgInVzZSB0aGUgbWVyZ2UtYmFzZSBvZiB1cHN0cmVhbSBhbmQgYnJhbmNoIGFzIHRoZSBjdXJyZW50IGJhc2UiCittc2dzdHIgIk51dHplIGRpZSBNZXJnZS1CYXNpcyB2b24gVXBzdHJlYW0gdW5kIEJyYW5jaCBhbHMgZGllIGFrdHVlbGxlIEJhc2lzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTAKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJBdXNmw7xocnVuZyBkZXMgcHJlLXJlYmFzZS1Ib29rcyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUyCittc2dpZCAiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IgorbXNnc3RyICJ3ZW5pZ2VyIEF1c2dhYmVuIChpbXBsaXppZXJ0IC0tbm8tc3RhdCkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1OAorbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorIlp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIGdlZ2Vuw7xiZXIgZGVtIFVwc3RyZWFtLUJyYW5jaCB2ZXJiZXJnZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2MQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiCittc2dzdHIgImVpbmUgXCJTaWduZWQtb2ZmLWJ5OlwiLVplaWxlIHp1IGplZGVtIENvbW1pdCBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY0Cittc2dpZCAibWFrZSBjb21taXR0ZXIgZGF0ZSBtYXRjaCBhdXRob3IgZGF0ZSIKK21zZ3N0ciAiQ29tbWl0LURhdHVtIHVuZCBBdXRvci1EYXR1bSBzb2xsZW4gw7xiZXJlaW5zdGltbWVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjYKK21zZ2lkICJpZ25vcmUgYXV0aG9yIGRhdGUgYW5kIHVzZSBjdXJyZW50IGRhdGUiCittc2dzdHIgIkF1dG9yLURhdHVtIGlnbm9yaWVyZW4gdW5kIGFrdHVlbGxlcyBEYXR1bSBudXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OAorbXNnaWQgInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIKK21zZ3N0ciAiU3lub255bSBmw7xyIC0tcmVzZXQtYXV0aG9yLWRhdGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhcHBseSciCittc2dzdHIgImFuICdnaXQgYXBwbHknIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UiCittc2dzdHIgIldoaXRlc3BhY2Utw4RuZGVydW5nZW4gaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDc2IGJ1aWx0aW4vcmViYXNlLmM6MTQ3OQorbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAiIgorIkNoZXJyeS1QaWNrIGF1ZiBhbGxlIENvbW1pdHMgYXVzZsO8aHJlbiwgYXVjaCB3ZW5uIGRpZXNlIHVudmVyw6RuZGVydCBzaW5kIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODEKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAiZm9ydHNldHplbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg0Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAiZGVuIGFrdHVlbGxlbiBQYXRjaCBhdXNsYXNzZW4gdW5kIGZvcnRmYWhyZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NgorbXNnaWQgImFib3J0IGFuZCBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCIKK21zZ3N0ciAiYWJicmVjaGVuIHVuZCBkZW4gdXJzcHLDvG5nbGljaGVuIEJyYW5jaCBhdXNjaGVja2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODkKK21zZ2lkICJhYm9ydCBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzIgorbXNnc3RyICJhYmJyZWNoZW4sIGFiZXIgSEVBRCBhbiBha3R1ZWxsZXIgU3RlbGxlIGJlbGFzc2VuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiVE9ETy1MaXN0ZSB3w6RocmVuZCBlaW5lcyBpbnRlcmFrdGl2ZW4gUmViYXNlIGJlYXJiZWl0ZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgImRlbiBQYXRjaCwgZGVyIGdlcmFkZSBhbmdld2VuZGV0IG9kZXIgenVzYW1tZW5nZWbDvGhydCB3aXJkLCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk2Cittc2dpZCAidXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgIk1lcmdlLVN0cmF0ZWdpZW4gYmVpbSBSZWJhc2UgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDAKK21zZ2lkICJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIKK21zZ3N0ciAiZGVuIEJlbnV0emVyIGRpZSBMaXN0ZSBkZXIgQ29tbWl0cyBmw7xyIGRlbiBSZWJhc2UgYmVhcmJlaXRlbiBsYXNzZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwNAorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAiIgorIihWRVJBTFRFVCkgVmVyc3VjaGUsIE1lcmdlcyB3aWVkZXJoZXJ6dXN0ZWxsZW4gYW5zdGF0dCBzaWUgenUgaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA5Cittc2dpZCAicHJlc2VydmUgZW1wdHkgY29tbWl0cyBkdXJpbmcgcmViYXNlIgorbXNnc3RyICJsZWVyZSBDb21taXRzIHfDpGhyZW5kIGRlcyBSZWJhc2UgZXJoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMQorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkiCittc2dzdHIgImJlaSAtaSBDb21taXRzIHZlcnNjaGllYmVuLCBkaWUgbWl0IHNxdWFzaCEvZml4dXAhIGJlZ2lubmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTcKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICJhdXRvbWF0aXNjaGVyIFN0YXNoL1N0YXNoLVBvcCBkYXZvciB1bmQgZGFuYWNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTkKK21zZ2lkICJhZGQgZXhlYyBsaW5lcyBhZnRlciBlYWNoIGNvbW1pdCBvZiB0aGUgZWRpdGFibGUgbGlzdCIKK21zZ3N0ciAiZXhlYy1aZWlsZW4gbmFjaCBqZWRlbSBDb21taXQgZGVyIGVkaXRpZXJiYXJlbiBMaXN0ZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIzCittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJSZWJhc2Ugdm9uIENvbW1pdHMgbWl0IGxlZXJlciBCZXNjaHJlaWJ1bmcgZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNgorbXNnaWQgInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIKK21zZ3N0ciAiIgorInZlcnN1Y2hlbiwgUmViYXNlIG1pdCBNZXJnZXMgYXVzenVmw7xocmVuLCBhbnN0YXR0IGRpZXNlIHp1IMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyOQorbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAiIgorIidnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIGJlbnV0emVuLCB1bSBVcHN0cmVhbS1CcmFuY2ggenUgYmVzdGltbWVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzEKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJhbmdlZ2ViZW5lIE1lcmdlLVN0cmF0ZWdpZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAiT3B0aW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiQXJndW1lbnQgenVyIE1lcmdlLVN0cmF0ZWdpZSBkdXJjaHJlaWNoZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNworbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgIlJlYmFzZSBhdWYgYWxsZSBlcnJlaWNoYmFyZW4gQ29tbWl0cyBiaXMgenVtIFJvb3QtQ29tbWl0IGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiRGllIFVudGVyc3TDvHR6dW5nIGbDvHIgcmViYXNlLnVzZUJ1aWx0aW4gd3VyZGUgZW50ZmVybnQhXG4iCisiU2llaGUgZGVzc2VuIEVpbnRyYWcgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZsO8ciBEZXRhaWxzLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYwCittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIidnaXQtYW0nIHNjaGVpbnQgaW0gR2FuZ2UgenUgc2Vpbi4gS2FubiBSZWJhc2UgbmljaHQgZHVyY2hmw7xocmVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjAxCittc2dpZCAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIidnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzJyBpc3QgdmVyYWx0ZXQuIEJlbnV0emVuIFNpZSBzdGF0dGRlc3NlbiAnLS0iCisicmViYXNlLW1lcmdlcycuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDYKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgIictLWtlZXAtYmFzZScga2FubiBuaWNodCBtaXQgJy0tb250bycga29tYmluaWVydCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwOAorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAiJy0ta2VlcC1iYXNlJyBrYW5uIG5pY2h0IG1pdCAnLS1yb290JyBrb21iaW5pZXJ0IHdlcmRlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiS2VpbiBSZWJhc2UgaW0gR2FuZ2U/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MTYKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyJEaWUgLS1lZGl0LXRvZG8gQWt0aW9uIGthbm4gbnVyIHfDpGhyZW5kIGVpbmVzIGludGVyYWt0aXZlbiBSZWJhc2UgdmVyd2VuZGV0ICIKKyJ3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MzkKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJLYW5uIEhFQUQgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MQorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIGFsbGUgTWVyZ2UtS29uZmxpa3RlIGVkaXRpZXJlbiB1bmQgZGllc2UgZGFublxuIgorIm1pdHRlbHMgXCJnaXQgYWRkXCIgYWxzIGF1ZmdlbMO2c3QgbWFya2llcmVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NzAKK21zZ2lkICJjb3VsZCBub3QgZGlzY2FyZCB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLb25udGUgw4RuZGVydW5nZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIG5pY2h0IHZlcndlcmZlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbW92ZSBiYWNrIHRvICVzIgorbXNnc3RyICJLb25udGUgbmljaHQgenUgJXMgenVyw7xja2dlaGVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyJFcyBzaWVodCBzbyBhdXMsIGFscyBvYiBlcyBkYXMgVmVyemVpY2huaXMgJXMgYmVyZWl0cyBnaWJ0XG4iCisidW5kIGVzIGvDtm5udGUgZWluIGFuZGVyZXIgUmViYXNlIGltIEdhbmdlIHNlaW4uIFdlbm4gZGFzIGRlciBGYWxsIGlzdCxcbiIKKyJwcm9iaWVyZW4gU2llIGJpdHRlXG4iCisiXHQlc1xuIgorIldlbm4gZGFzIG5pY2h0IGRlciBGYWxsIGlzdCwgcHJvYmllcmVuIFNpZSBiaXR0ZVxuIgorIlx0JXNcbiIKKyJ1bmQgZsO8aHJlbiBTaWUgZGllc2VuIEJlZmVobCBub2NobWFsIGF1cy4gRXMgd2lyZCBhbmdlaGFsdGVuLCBmYWxscyBub2NoXG4iCisiZXR3YXMgU2Now7x0emVuc3dlcnRlcyB2b3JoYW5kZW4gaXN0LlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NTcKK21zZ2lkICJzd2l0Y2ggYEMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIlNjaGFsdGVyIGBDJyBlcndhcnRldCBlaW5lbiBudW1lcmlzY2hlbiBXZXJ0LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgIlVuYmVrYW5udGVyIE1vZHVzOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODIwCittc2dpZCAiLS1zdHJhdGVneSByZXF1aXJlcyAtLW1lcmdlIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tc3RyYXRlZ3kgZXJmb3JkZXJ0IC0tbWVyZ2Ugb2RlciAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NjAKK21zZ2lkICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWlyZXMgLS1leGVjIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyBlcmZvcmRlcnQgLS1leGVjIG9kZXIgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODcyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorbXNnc3RyICIiCisiT3B0aW9uZW4gZsO8ciBcImFtXCIga8O2bm5lbiBuaWNodCBtaXQgT3B0aW9uZW4gZsO8ciBcImludGVyYWN0aXZlXCIgb2RlciAiCisiXCJtZXJnZVwiIGtvbWJpbmllcnQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODkxCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICIiCisiJy0tcHJlc2VydmUtbWVyZ2VzJyBrYW5uIG5pY2h0IG1pdCAnLS1yZWJhc2UtbWVyZ2VzJyBrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5NQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisiRmVobGVyOiAnLS1wcmVzZXJ2ZS1tZXJnZXMnIGthbm4gbmljaHQgbWl0ICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnICIKKyJrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFVwc3RyZWFtICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkyNQorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHJvb3QgY29tbWl0IgorbXNnc3RyICJLb25udGUgbmV1ZW4gUm9vdC1Db21taXQgbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiJyVzJzogYmVuw7Z0aWdlIGdlbmF1IGVpbmUgTWVyZ2UtQmFzaXMgbWl0IGRlbSBCcmFuY2giCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIiclcyc6IGJlbsO2dGlnZSBnZW5hdSBlaW5lIE1lcmdlLUJhc2lzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQgJyVzJyIKK21zZ3N0ciAiJyVzJyB6ZWlndCBhdWYga2VpbmVuIGfDvGx0aWdlbiBDb21taXQuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICJmYXRhbDogQnJhbmNoL0NvbW1pdCAnJXMnIG5pY2h0IGdlZnVuZGVuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIlJlZmVyZW56IG5pY2h0IGdlZnVuZGVuOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDA2Cittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICJLb25udGUgSEVBRCB6dSBrZWluZW0gQ29tbWl0IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0NAorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIkthbm4gYXV0b21hdGlzY2hlbiBTdGFzaCBuaWNodCBlcnpldWdlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHN0YXNoIHJlc3BvbnNlOiAnJXMnIgorbXNnc3RyICJVbmVyd2FydGV0ZSAnc3Rhc2gnLUFudHdvcnQ6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFZlcnplaWNobmlzIGbDvHIgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIkF1dG9tYXRpc2NoZW4gU3Rhc2ggZXJ6ZXVndDogJXNcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU5Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAiS29ubnRlICdyZXNldCAtLWhhcmQnIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNjgKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJCaXR0ZSBjb21taXR0ZW4gU2llIGRpZSDDhG5kZXJ1bmdlbiBvZGVyIGJlbnV0emVuIFNpZSBcInN0YXNoXCIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICJLb25udGUgbmljaHQgenUgJXMgd2VjaHNlbG4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTkKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJIRUFEIGlzdCBha3R1ZWxsLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIkFrdHVlbGxlciBCcmFuY2ggJXMgaXN0IGF1ZiBkZW0gbmV1ZXN0ZW4gU3RhbmQuXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIkhFQUQgaXN0IGFrdHVlbGwsIFJlYmFzZSBlcnp3dW5nZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC5cbiIKK21zZ3N0ciAiQWt0dWVsbGVyIEJyYW5jaCAlcyBpc3QgYXVmIGRlbSBuZXVlc3RlbiBTdGFuZCwgUmViYXNlIGVyend1bmdlbi5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIkRlciBcInByZS1yZWJhc2UgaG9va1wiIGhhdCBkZW4gUmViYXNlIHp1csO8Y2tnZXdpZXNlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIHRvICVzOlxuIgorbXNnc3RyICLDhG5kZXJ1bmdlbiB6dSAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAiw4RuZGVydW5nZW4gdm9uICVzIHp1ICVzOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIiIKKyJadW7DpGNoc3Qgd2lyZCBkZXIgQnJhbmNoIHp1csO8Y2tnZXNwdWx0LCB1bSBJaHJlIMOEbmRlcnVuZ2VuIGRhcmF1ZiBuZXUgIgorImFuenV3ZW5kZW4uLi5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgzCittc2dpZCAiQ291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJLb25udGUgSEVBRCBuaWNodCBsb3Nsw7ZzZW4uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJXMgdG8gJXMuXG4iCittc2dzdHIgIlNwdWxlICVzIHZvciB6dSAlcy5cbiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzozMgorbXNnaWQgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorbXNnc3RyICJnaXQgcmVjZWl2ZS1wYWNrIDxHaXQtVmVyemVpY2huaXM+IgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjgzMAorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnRcbiIKKyJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2hcbiIKKyJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisiXG4iCisiWW91IGNhbiBzZXQgdGhlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKyJpdHMgY3VycmVudCBicmFuY2g7IGhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3VcbiIKKyJhcnJhbmdlZCB0byB1cGRhdGUgaXRzIHdvcmsgdHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZVxuIgorIm90aGVyIHdheS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHNldFxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlN0YW5kYXJkbcOkw59pZyB3aXJkIGRpZSBBa3R1YWxpc2llcnVuZyBkZXMgYWt0dWVsbGVuIEJyYW5jaGVzIGluIGVpbmVtXG4iCisiTmljaHQtQmFyZS1SZXBvc2l0b3J5IHp1csO8Y2tnZXdpZXNlbiwgZGEgZGllcyBkZW4gSW5kZXggdW5kIGRhcyBBcmJlaXRzLVxuIgorInZlcnplaWNobmlzIGlua29uc2lzdGVudCB6dSBkZW0gbWFjaGVuIHfDvHJkZSwgd2FzIFNpZSBnZXB1c2hlZCBoYWJlbiwgdW5kXG4iCisiJ2dpdCByZXNldCAtLWhhcmQnIGVyZm9yZGVybGljaCB3w6RyZSwgZGFtaXQgZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBIRUFEXG4iCisiZW50c3ByaWNodC5cbiIKKyJcbiIKKyJTaWUga8O2bm50ZW4gZGllIEtvbmZpZ3VyYXRpb25zdmFyaWFibGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGltXG4iCisiUmVtb3RlLVJlcG9zaXRvcnkgYXVmICdpZ25vcmUnIG9kZXIgJ3dhcm4nIHNldHplbiwgdW0gZGVuIFB1c2ggaW4gZGVuXG4iCisiYWt0dWVsbGVuIEJyYW5jaCB6dSBlcmxhdWJlbjsgZGllcyB3aXJkIGplZG9jaCBuaWNodCBlbXBmb2hsZW4gYXXDn2VyXG4iCisiU2llIHN0ZWxsZW4gZHVyY2ggYW5kZXJlIFdlZ2UgZGllIEFrdHVhbGl0w6R0IGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXNcbiIKKyJnZWdlbsO8YmVyIGRlbSBnZXB1c2h0ZW4gU3RhbmQgc2ljaGVyLlxuIgorIlxuIgorIlVtIGRpZXNlIE1lbGR1bmcgenUgdW50ZXJkcsO8Y2tlbiB1bmQgZGFzIFN0YW5kYXJkdmVyaGFsdGVuIHp1IGJlaGFsdGVuLFxuIgorInNldHplbiBTaWUgZGllIEtvbmZpZ3VyYXRpb25zdmFyaWFibGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGF1ZlxuIgorIidyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NTAKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlN0YW5kYXJkbcOkw59pZyB3aXJkIGRhcyBMw7ZzY2hlbiBkZXMgYWt0dWVsbGVuIEJyYW5jaGVzIHp1csO8Y2tnZXdpZXNlbixcbiIKKyJkYSBiZWltIG7DpGNoc3RlbiAnZ2l0IGNsb25lJyBrZWluZSBEYXRlaWVuIGF1c2dlY2hlY2t0IHdlcmRlbiB3w7xyZGVuLFxuIgorIndhcyB6dSBWZXJ3dW5kZXJ1bmcgZsO8aHJ0LlxuIgorIlxuIgorIlNpZSBrw7ZubmVuIGRpZSBLb25maWd1cmF0aW9uc3ZhcmlhYmxlICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBpbVxuIgorIlJlbW90ZS1SZXBvc2l0b3J5IGF1ZiAnd2Fybicgb2RlciAnaWdub3JlJyBzZXR6ZW4sIHVtIGRhcyBMw7ZzY2hlbiBkZXNcbiIKKyJha3R1ZWxsZW4gQnJhbmNoIG1pdCBvZGVyIG9obmUgV2FybnVuZyB6dSBlcmxhdWJlbi5cbiIKKyJcbiIKKyJVbSBkaWVzZSBNZWxkdW5nIHp1IHVudGVyZHLDvGNrZW4sIHNldHplbiBTaWUgZGllIFZhcmlhYmxlIGF1ZiAncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzNgorbXNnaWQgInF1aWV0IgorbXNnc3RyICJ3ZW5pZ2VyIEF1c2dhYmVuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiU2llIG3DvHNzZW4gZWluIFJlcG9zaXRvcnkgYW5nZWJlbi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08WmVpdD5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08WmVpdD5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8UmVmZXJlbnplbj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxSZWZlcmVuemVuPi4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyNQorbXNnaWQgImdpdCByZWZsb2cgZXhpc3RzIDxyZWY+IgorbXNnc3RyICJnaXQgcmVmbG9nIGV4aXN0cyA8UmVmZXJlbno+IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2NyBidWlsdGluL3JlZmxvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBnw7xsdGlnZXIgWmVpdHN0ZW1wZWwiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgcmVhY2hhYmxlIG9iamVjdHMuLi4iCittc2dzdHIgIk1hcmtpZXJlIG5pY2h0IGVycmVpY2hiYXJlIE9iamVrdGUuLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiJXMgemVpZ3QgYXVmIG5pY2h0cyEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk1Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgIktlaW4gUmVmbG9nIHp1bSBMw7ZzY2hlbiBhbmdlZ2ViZW4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZWZsb2c6ICVzIgorbXNnc3RyICJLZWluIFJlZmxvZzogJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiS2VpbiBSZWZsb2cgZsO8ciAnJXMnLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgRm9ybWF0IGbDvHIgUmVmZXJlbnplbjogJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzY0Cittc2dpZCAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPEJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPE5hbWU+IDxVUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW5hbWUgPGFsdD4gPG5ldT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzo0MworbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPE5hbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDxOYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPEJyYW5jaD4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPE5hbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxOYW1lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPEdydXBwZT4gfCA8UmVtb3RlPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPE5hbWU+IDxCcmFuY2g+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1IGJ1aWx0aW4vcmVtb3RlLmM6NzQKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxOYW1lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPE5hbWU+IDxuZXVlVVJMPiBbPGFsdGVVUkw+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNyBidWlsdGluL3JlbW90ZS5jOjgwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxOYW1lPiA8bmV1ZVVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8TmFtZT4gPFVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzMKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8T3B0aW9uZW4+XSA8TmFtZT4gPFVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxOYW1lPiA8QnJhbmNoPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPE5hbWU+IDxCcmFuY2g+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs8T3B0aW9uZW4+XSA8TmFtZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPE9wdGlvbmVuPl0gPE5hbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs8T3B0aW9uZW4+XSBbPEdydXBwZT4gfCA8ZXh0ZXJuZXNSZXBvc2l0b3J5Pl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIkFrdHVhbGlzaWVyZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3IgaXN0IGdlZsOkaHJsaWNoIHVuZCB2ZXJhbHRldDsgYml0dGVcbiIKKyJcdCBiZW51dHplbiBTaWUgc3RhdHRkZXNzZW4gLS1taXJyb3I9ZmV0Y2ggb2RlciAtLW1pcnJvcj1wdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgInVuYmVrYW5udGVzIEFyZ3VtZW50IGbDvHIgT3B0aW9uIC0tbWlycm9yOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICJkaWUgUmVtb3RlLUJyYW5jaGVzIGFuZm9yZGVybiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICJhbGxlIFRhZ3MgdW5kIHZlcmJ1bmRlbmUgT2JqZWt0ZSBiZWltIEFuZm9yZGVybiBpbXBvcnRpZXJlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIm9kZXIgZm9yZGVyZSBnYXIga2VpbmUgVGFncyBhbiAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzAKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICJCcmFuY2goZXMpIHp1ciDDnGJlcm5haG1lIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgIkhhdXB0YnJhbmNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICIiCisiQXVmc2V0emVuIGRlcyBSZW1vdGUtUmVwb3NpdG9yaWVzIGFscyBTcGllZ2VsLVJlcG9zaXRvcnkgZsO8ciBcInB1c2hcIiB1bmQgIgorIlwiZmV0Y2hcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLW1pcnJvciBrYW5uIG5pY2h0IG1pdCBkZXIgQW5nYWJlIGVpbmVzIEhhdXB0YnJhbmNoZXMgdmVyd2VuZGV0ICIKKyJ3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIiIKKyJEaWUgQW5nYWJlIHZvbiB6dSBmb2xnZW5kZW4gQnJhbmNoZXMga2FubiBudXIgbWl0IGRlbSBBbmZvcmRlcm4gdm9uICIKKyJTcGllZ2VsYXJjaGl2ZW4gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImV4dGVybmVzIFJlcG9zaXRvcnkgJXMgZXhpc3RpZXJ0IGJlcmVpdHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk4IGJ1aWx0aW4vcmVtb3RlLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgaXN0IGtlaW4gZ8O8bHRpZ2VyIE5hbWUgZsO8ciBlaW4gUmVtb3RlLVJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiS29ubnRlIHN5bWJvbGlzY2hlIFJlZmVyZW56IGbDvHIgSGF1cHRicmFuY2ggdm9uICclcycgbmljaHQgZWlucmljaHRlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIktvbm50ZSBGZXRjaC1NYXAgZsO8ciBSZWZzcGVjICVzIG5pY2h0IGJla29tbWVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MyBidWlsdGluL3JlbW90ZS5jOjQ1MQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIijDvGJlcmVpbnN0aW1tZW5kKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTUKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKGzDtnNjaGUpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYyOSBidWlsdGluL3JlbW90ZS5jOjc2NCBidWlsdGluL3JlbW90ZS5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJyVzJyIKK21zZ3N0ciAiS2VpbiBzb2xjaGVzIFJlbW90ZS1SZXBvc2l0b3J5OiAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlIFNla3Rpb24gJyVzJyBpbiBLb25maWd1cmF0aW9uIG5pY2h0IG5hY2ggJyVzJyB1bWJlbmVubmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKyJLZWluZSBBa3R1YWxpc2llcnVuZyBkZXIgbmljaHQgc3RhbmRhcmRtw6TDn2lnZW4gUmVmc3BlYyBmw7xyIFwiZmV0Y2hcIlxuIgorIlx0JXNcbiIKKyJcdEJpdHRlIGFrdHVhbGlzaWVyZW4gU2llLCBmYWxscyBub3R3ZW5kaWcsIGRpZSBLb25maWd1cmF0aW9uIG1hbnVlbGwuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODAxCittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJIaW53ZWlzOiBFaW4gQnJhbmNoIGF1w59lcmhhbGIgZGVyIHJlZnMvcmVtb3Rlcy8gSGllcmFjaGllIHd1cmRlIG5pY2h0ICIKKyJnZWzDtnNjaHQ7XG4iCisidW0gZGllc2VuIHp1IGzDtnNjaGVuLCBiZW51dHplbiBTaWU6IgorbXNnc3RyWzFdICIiCisiSGlud2VpczogRWluaWdlIEJyYW5jaGVzIGF1w59lcmhhbGIgZGVyIHJlZnMvcmVtb3Rlcy8gSGllcmFyY2hpZSB3dXJkZW4gbmljaHQgIgorImVudGZlcm50O1xuIgorInVtIGRpZXNlIHp1IGVudGZlcm5lbiwgYmVudXR6ZW4gU2llOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJLb25udGUgU2VrdGlvbiAnJXMnIG5pY2h0IGF1cyBLb25maWd1cmF0aW9uIGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIgbmV1ICh3aXJkIGJlaSBuw6RjaHN0ZW0gXCJmZXRjaFwiIGluIHJlbW90ZXMvJXMgZ2VzcGVpY2hlcnQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxOQorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIgZ2Vmb2xndCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjEKK21zZ2lkICIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIKK21zZ3N0ciAiIHZlcmFsdGV0IChiZW51dHplbiBTaWUgJ2dpdCByZW1vdGUgcHJ1bmUnIHp1bSBMw7ZzY2hlbikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIzCittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBicmFuY2guJXMubWVyZ2U7IGthbm4gUmViYXNlIG5pY2h0IGF1ZiA+IDEgQnJhbmNoIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiaW50ZXJha3RpdmVyIFJlYmFzZSBhdWYgUmVtb3RlLUJyYW5jaCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgImludGVyYWt0aXZlciBSZWJhc2UgKG1pdCBNZXJnZXMpIGF1ZiBSZW1vdGUtQnJhbmNoICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJSZWJhc2UgYXVmIFJlbW90ZS1CcmFuY2ggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBmw7xocnQgbWl0IFJlbW90ZS1CcmFuY2ggJXMgenVzYW1tZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiZsO8aHJ0IG1pdCBSZW1vdGUtQnJhbmNoICVzIHp1c2FtbWVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIHVuZCBtaXQgUmVtb3RlLUJyYW5jaCAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgImVyc3RlbGx0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICJkZWxldGUiCittc2dzdHIgImdlbMO2c2NodCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM4Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiYWt0dWVsbCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQxCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAidm9yc3B1bGJhciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQ0Cittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxva2FsIG5pY2h0IGFrdHVlbGwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBlcnp3aW5ndCBWZXJzYW5kdCBuYWNoICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHZlcnNlbmRldCBuYWNoICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgZXJ6d2luZ3QgVmVyc2FuZCBuYWNoICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyB2ZXJzZW5kZXQgbmFjaCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI5Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgImtlaW5lIEFiZnJhZ2Ugdm9uIFJlbW90ZS1SZXBvc2l0b3JpZXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiBSZW1vdGUtUmVwb3NpdG9yeSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgenVtIEFiaG9sZW46ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTggYnVpbHRpbi9yZW1vdGUuYzoxMTc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMworbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoa2VpbmUgVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIHp1bSBWZXJzZW5kZW46ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYgYnVpbHRpbi9yZW1vdGUuYzoxMTc4IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBIYXVwdGJyYW5jaDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIihuaWNodCBhYmdlZnJhZ3QpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzgKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIih1bmJla2FubnQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorIiAgSGF1cHRicmFuY2ggKGV4dGVybmVyIEhFQUQgaXN0IG1laHJkZXV0aWcsIGvDtm5udGUgZWluZXIgZGVyIGZvbGdlbmRlbiAiCisic2Vpbik6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIFJlbW90ZS1CcmFuY2g6JXMiCittc2dzdHJbMV0gIiAgUmVtb3RlLUJyYW5jaGVzOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTcgYnVpbHRpbi9yZW1vdGUuYzoxMjIzCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKFp1c3RhbmQgbmljaHQgYWJnZWZyYWd0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA2Cittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgTG9rYWxlciBCcmFuY2gga29uZmlndXJpZXJ0IGbDvHIgJ2dpdCBwdWxsJzoiCittc2dzdHJbMV0gIiAgTG9rYWxlIEJyYW5jaGVzIGtvbmZpZ3VyaWVydCBmw7xyICdnaXQgcHVsbCc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTQKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIExva2FsZSBSZWZlcmVuemVuIHdlcmRlbiB2b24gJ2dpdCBwdXNoJyBnZXNwaWVnZWx0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgTG9rYWxlIFJlZmVyZW56IGtvbmZpZ3VyaWVydCBmw7xyICdnaXQgcHVzaCclczoiCittc2dzdHJbMV0gIiAgTG9rYWxlIFJlZmVyZW56ZW4ga29uZmlndXJpZXJ0IGbDvHIgJ2dpdCBwdXNoJyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQxCittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJzZXR6dCByZWZzL3JlbW90ZXMvPE5hbWU+L0hFQUQgZ2Vtw6TDnyBkZW0gUmVtb3RlLVJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0MworbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgImVudGZlcm50IHJlZnMvcmVtb3Rlcy88TmFtZT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU4Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiS2FubiBIRUFEIGRlcyBSZW1vdGUtUmVwb3NpdG9yaWVzIG5pY2h0IGJlc3RpbW1lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjYwCittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKyJNZWhyZXJlIEhhdXB0YnJhbmNoZXMgaW0gUmVtb3RlLVJlcG9zaXRvcnkuIEJpdHRlIHfDpGhsZW4gU2llIGV4cGxpeml0IGVpbmVuICIKKyJhdXMgbWl0OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJrZWluZSBnw7xsdGlnZSBSZWZlcmVuejogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBlaW5yaWNodGVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIHdpcmQgdW5yZWZlcmVuemllcnQhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgd3VyZGUgdW5yZWZlcmVuemllcnQhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiZW50ZmVybmUgdmVyYWx0ZXRlIEJyYW5jaGVzIHZvbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbd8O8cmRlIHZlcmFsdGV0ZW4gQnJhbmNoIGVudGZlcm5lbl0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiKiBbdmVyYWx0ZXRlbiBCcmFuY2ggZW50ZmVybnRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzQKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJlbnRmZXJuZSB2ZXJhbHRldGUgQnJhbmNoZXMgaW0gUmVtb3RlLVJlcG9zaXRvcnkgbmFjaCBcImZldGNoXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNyBidWlsdGluL3JlbW90ZS5jOjE0OTEgYnVpbHRpbi9yZW1vdGUuYzoxNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIktlaW4gc29sY2hlcyBSZW1vdGUtUmVwb3NpdG9yeSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTMKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJCcmFuY2ggaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImtlaW4gUmVtb3RlLVJlcG9zaXRvcnkgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NzcKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAibnVyIFVSTHMgZsO8ciBQdXNoIGF1c2dlYmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NzkKK21zZ2lkICJyZXR1cm4gYWxsIFVSTHMiCittc2dzdHIgImFsbGUgVVJMcyBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIktlaW5lIFVSTHMgZsO8ciBSZW1vdGUtUmVwb3NpdG9yeSAnJXMnIGtvbmZpZ3VyaWVydC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMworbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJVUkxzIGbDvHIgXCJwdXNoXCIgbWFuaXB1bGllcmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzUKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJVUkwgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJVUkxzIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDQKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS1hZGQgdW5kIC0tZGVsZXRlIGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBhbHRlcyBVUkwgRm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiS2VpbmUgc29sY2hlIFVSTCBnZWZ1bmRlbjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiV2VyZGUga2VpbmUgVVJMcyBlbnRmZXJuZW4sIGRpZSBuaWNodCBmw7xyIFwicHVzaFwiIGJlc3RpbW10IHNpbmQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisiU2Nocml0dHdlaXNlcyBOZXVwYWNrZW4gaXN0IG1pdCBCaXRtYXAtSW5kZXhlbiBpbmtvbXBhdGliZWwuIEJlbnV0emVuIFNpZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9kZXIgZGVha3RpdmllcmVuIFNpZSBkaWUgcGFjay53cml0ZWJpdG1hcHNcbiIKKyJLb25maWd1cmF0aW9uLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisiS29ubnRlICdwYWNrLW9iamVjdHMnIGbDvHIgZGFzIE5ldXBhY2tlbiB2b24gT2JqZWt0ZW4gYXVzIHBhcnRpZWxsIGdla2xvbnRlblxuIgorIlJlbW90ZS1SZXBvc2l0b3JpZXMgbmljaHQgc3RhcnRlbi4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisicmVwYWNrOiBFcndhcnRlIFplaWxlbiBtaXQgdm9sbHN0w6RuZGlnZXIgSGV4LU9iamVrdC1JRCBudXIgdm9uIHBhY2stb2JqZWN0cy4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKyJLb25udGUgJ3BhY2stb2JqZWN0cycgZsO8ciBkYXMgTmV1cGFja2VuIHZvbiBPYmpla3RlbiBhdXMgcGFydGllbGwgZ2VrbG9udGVuXG4iCisiUmVtb3RlLVJlcG9zaXRvcmllcyBuaWNodCBhYnNjaGxpZcOfZW4uIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICJhbGxlcyBpbiBlaW5lIGVpbnppZ2UgUGFjay1EYXRlaSBwYWNrZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiZ2VuYXUgd2llIC1hLCB1bmVycmVpY2hiYXJlIE9iamVrdGUgd2VyZGVuIGFiZXIgbmljaHQgZ2Vsw7ZzY2h0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NworbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAicmVkdW5kYW50ZSBQYWtldGUgZW50ZmVybmVuIHVuZCBcImdpdC1wcnVuZS1wYWNrZWRcIiBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICItLW5vLXJldXNlLWRlbHRhIGFuIGdpdC1wYWNrLW9iamVjdHMgw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIi0tbm8tcmV1c2Utb2JqZWN0IGFuIGdpdC1wYWNrLW9iamVjdHMgw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgImdpdC11cGRhdGUtc2VydmVyLWluZm8gbmljaHQgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiLS1sb2NhbCBhbiBnaXQtcGFjay1vYmplY3RzIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICJCaXRtYXAtSW5kZXggc2NocmVpYmVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIi0tZGVsdGEtaXNsYW5kcyBhbiBnaXQtcGFjay1vYmplY3RzIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgIkRhdHVtc2FuZ2FiZSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTIKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICJtaXQgLUEsIGtlaW5lIE9iamVrdGUgw6RsdGVyIGFscyBkaWVzZXMgRGF0dW0gbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1pdCAtYSwgbmljaHQgZXJyZWljaGJhcmUgT2JqZWt0ZSBuZXUgcGFja2VuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiR3LDtsOfZSBkZXMgRmVuc3RlcnMgZsO8ciBkaWUgRGVsdGEtS29tcHJlc3Npb24iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgIkJ5dGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxOAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisiZ2xlaWNoZXMgd2llIG9iZW4sIGFiZXIgZGllIFNwZWljaGVyZ3LDtsOfZSBhbnN0YXR0IGRlclxuIgorIkFuemFobCBkZXIgRWludHLDpGdlIGxpbWl0aWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJkaWUgbWF4aW1hbGUgRGVsdGEtVGllZmUgbGltaXRpZXJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgIm1heGltYWxlIEFuemFobCB2b24gVGhyZWFkcyBsaW1pdGllcmVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJtYXhpbWFsZSBHcsO2w59lIGbDvHIgamVkZSBQYWtldGRhdGVpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICIiCisiT2JqZWt0ZSB1bXBhY2tlbiwgZGllIHNpY2ggaW4gbWl0IC5rZWVwIG1hcmtpZXJ0ZW4gUGFjay1EYXRlaWVuIGJlZmluZGVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyOAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICJkaWVzZXMgUGFrZXQgbmljaHQgbmV1IHBhY2tlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzgKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJrYW5uIFBhY2stRGF0ZWllbiBpbiBwcmVjaW91cy1vYmplY3RzIFJlcG9zaXRvcnkgbmljaHQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgdW5kIC1BIHNpbmQgaW5rb21wYXRpYmVsIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyNQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICJOaWNodHMgTmV1ZXMgenVtIFBhY2tlbi4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyJXQVJOVU5HOiBFaW5pZ2UgaW4gVmVyd2VuZHVuZyBiZWZpbmRsaWNoZSBQYWtldGUgd3VyZGVuXG4iCisiV0FSTlVORzogdW1iZW5hbm50LCBpbmRlbSAnb2xkLScgYW4gZGVyZW4gTmFtZW4gdm9ycmFuZ2VzdGVsbHRcbiIKKyJXQVJOVU5HOiB3dXJkZSwgdW0gZGllc2UgbWl0IGRlciBuZXVlbiBEYXRlaXZlcnNpb24genUgZXJzZXR6ZW4uXG4iCisiV0FSTlVORzogRGllc2UgT3BlcmF0aW9uIGlzdCBmZWhsZ2VzY2hsYWdlbi4gRGVyIFZlcnN1Y2gsIGRpZVxuIgorIldBUk5VTkc6IERhdGVpIHp1IGlocmVtIHVyc3Byw7xuZ2xpY2hlbiBOYW1lbiB1bXp1YmVuZW5uZW4sIHNjaGx1Z1xuIgorIldBUk5VTkc6IGViZW5mYWxscyBmZWhsLlxuIgorIldBUk5VTkc6IEJpdHRlIGJlbmVubmVuIFNpZSBkaWVzZSBtYW51ZWxsIG5hY2ggJXMgdW06XG4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTMO2c2NoZW4gdm9uICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDxPYmpla3Q+IDxFcnNldHp1bmc+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8T2JqZWt0PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxDb21taXQ+IFs8RWx0ZXJuLUNvbW1pdD4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxPYmpla3Q+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxGb3JtYXQ+XSBbLWwgWzxNdXN0ZXI+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisiVW5nw7xsdGlnZXMgRXJzZXR6dW5nc2Zvcm1hdCAnJXMnXG4iCisiR8O8bHRpZ2UgRm9ybWF0ZSBzaW5kICdzaG9ydCcsICdtZWRpdW0nIHVuZCAnbG9uZycuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiCittc2dzdHIgIkVyc2V0emVuZGUgUmVmZXJlbnogJyVzJyBuaWNodCBnZWZ1bmRlbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlcGxhY2UgcmVmICclcyciCittc2dzdHIgIkVyc2V0emVuZGUgUmVmZXJlbnogJyVzJyBnZWzDtnNjaHQuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBnw7xsdGlnZXIgUmVmZXJlbnpuYW1lLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkVyc2V0emVuZGUgUmVmZXJlbnogJyVzJyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIk9iamVrdGUgbcO8c3NlbiB2b20gc2VsYmVuIFR5cCBzZWluLlxuIgorIiclcycgemVpZ3QgYXVmIGVpbiBlcnNldHp0ZXMgT2JqZWt0IHZvbSBUeXAgJyVzJ1xuIgorInfDpGhyZW5kICclcycgYXVmIGVpbiBlcnNldHplbmRlcyBPYmpla3Qgdm9tIFR5cCAnJXMnXG4iCisiemVpZ3QuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBTY2hyZWliZW4gw7ZmZm5lbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgImNhdC1maWxlIG1lbGRldGUgRmVobGVyLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dW0gTGVzZW4gw7ZmZm5lbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgIktvbm50ZSBta3RyZWUgbmljaHQgYXVzZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3NgorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gbWt0cmVlIgorbXNnc3RyICJLb25udGUgbmljaHQgdm9uIG1rdHJlZSBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4NQorbXNnaWQgIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJta3RyZWUgbWVsZGV0ZSBGZWhsZXIuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIm1rdHJlZSBsaWVmZXJ0ZSBrZWluZW4gT2JqZWt0bmFtZW4genVyw7xjay4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgIkthbm4gZnN0YXQgYXVmICVzIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIgorbXNnc3RyICJLb25udGUgT2JqZWt0IG5pY2h0IGluIERhdGVuYmFuayBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyMworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJLZWluIGfDvGx0aWdlciBPYmpla3RuYW1lOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgIktvbm50ZSBPYmpla3RhcnQgdm9uICVzIG5pY2h0IGJlc3RpbW10ZW4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiQmVhcmJlaXRlbiB2b24gT2JqZWt0ZGF0ZWkgZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAiTmV1ZXMgT2JqZWt0IGlzdCBkYXNzZWxiZSB3aWUgZGFzIGFsdGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgIktvbm50ZSBuaWNodCAlcyBhbHMgQ29tbWl0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgInVuZ8O8bHRpZ2VyIE1lcmdlLVRhZyBpbiBDb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIE1lcmdlLVRhZyBpbiBDb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyJEZXIgdXJzcHLDvG5nbGljaGUgQ29tbWl0ICclcycgZW50aMOkbHQgTWVyZ2UtVGFnICclcycsIGRlciB2ZXJ3b3JmZW5cbiIKKyJ3aXJkOyBiZW51dHplbiBTaWUgLS1lZGl0IGFuc3RhdHQgLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIgorbXNnc3RyICJEZXIgb3JpZ2luYWxlIENvbW1pdCAnJXMnIGhhdCBlaW5lIEdQRy1TaWduYXR1ci4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICJEaWUgU2lnbmF0dXIgd2lyZCBpbiBkZW0gRXJzZXR6dW5ncy1Db21taXQgZW50ZmVybnQhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgIktvbm50ZSBFcnNldHp1bmdzLUNvbW1pdCBmw7xyICclcycgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgIkvDvG5zdGxpY2hlciBWb3Jnw6RuZ2VyIChcImdyYWZ0XCIpIGbDvHIgJyVzJyBuaWNodCBub3R3ZW5kaWcuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAiTmV1ZXIgQ29tbWl0IGlzdCBkZXJzZWxiZSB3aWUgZGVyIGFsdGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKICIlcyIKIG1zZ3N0ciAiIgotIkZlaGxlciBiZWltIEzDtnNjaGVuIGRlciBCcmFuY2hlczpcbiIKKyJLb25udGUgZGllIGZvbGdlbmRlbiBrw7xuc3RsaWNoZW4gVm9yZ8OkbmdlciAoXCJncmFmdHNcIikgbmljaHQga29udmVydGllcmVuOlxuIgogIiVzIgogCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICJVbmfDvGx0aWdlcyBEYXR1bSB2b24gR2l0OiAlcyIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0NworbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICJlcnNldHplbmRlIFJlZmVyZW56ZW4gYXVmbGlzdGVuIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQyCi1tc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkFuemFobCB1bnZlcmtuw7xwZnRlciBPYmpla3RlIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAiZXJzZXR6ZW5kZSBSZWZlcmVuemVuIGzDtnNjaGVuIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQzCi1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkZlc3RwbGF0dGVucGxhdHogdm9uIHVudmVya27DvHBmdGVuIE9iamVrdGVuIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgImV4aXN0aWVyZW5kZXMgT2JqZWt0IGJlYXJiZWl0ZW4iCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKLW1zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIkFuemFobCBrb21wcmltaWVydGVyIE9iamVrdGUiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTAKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJFbHRlcm4tQ29tbWl0cyBlaW5lcyBDb21taXRzIMOkbmRlcm4iCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgIkFuemFobCBLb21wcmltaWVydW5nc2VpbmhlaXRlbiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAiZXhpc3RpZXJlbmRlIERhdGVpIGRlcyBrw7xuc3RsaWNoZW4gVm9yZ8OkbmdlcnMgKFwiZ3JhZnRcIikga29udmVydGllcmVuIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJGZXN0cGxhdHRlbnBsYXR6IHZvbiBrb21wcmltaWVydGVuIE9iamVrdGVuIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUyCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiZGllIFJlZmVyZW56IGVyc2V0emVuLCB3ZW5uIHNpZSBleGlzdGllcnQiCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKLW1zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgotbXNnc3RyICJLb21wcmltaWVydGUgT2JqZWt0ZSwgZGllIHp1bSBBdWZyw6R1bWVuIHZvcmdlc2VoZW4gc2luZCIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NAorbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAia2VpbmUgYW5zcHJlY2hlbmRlIEFuemVpZ2UgZGVzIE9iamVrdGluaGFsdGVzIGbDvHIgLS1lZGl0IgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ4Ci1tc2dpZCAiR2FyYmFnZSBmaWxlcyIKLW1zZ3N0ciAiRGF0ZWllbiBpbSBNw7xsbGVpbWVyIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJkYXMgYW5nZWdlYmVuZSBGb3JtYXQgYmVudXR6ZW4iCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6NjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAoJXMpOiBEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICIlcyAoJXMpOiBEYXRlbmJhbmtzdGF0aXN0aWsiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjgKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICItLWZvcm1hdCBrYW5uIG5pY2h0IGJlaW0gQXVmbGlzdGVuIHZlcndlbmRldCB3ZXJkZW4uIgogCi0jOiBsaWIvZGF0YWJhc2UudGNsOjcyCi1tc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKLW1zZ3N0ciAiT2JqZWt0ZGF0ZW5iYW5rIGtvbXByaW1pZXJlbiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NgorbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIi1mIG1hY2h0IG51ciBiZWltIFNjaHJlaWJlbiBlaW5lciBFcnNldHp1bmcgU2lubi4iCiAKLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAiRGllIE9iamVrdGRhdGVuYmFuayBkdXJjaCDCu2ZzY2stb2JqZWN0c8KrIMO8YmVycHLDvGZlbiBsYXNzZW4iCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODAKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXJhdyBtYWNodCBudXIgbWl0IC0tZWRpdCBTaW5uLiIKIAotIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4NgorbXNnaWQgIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWQgYmVuw7Z0aWd0IG1pbmRlc3RlbnMgZWluIEFyZ3VtZW50LiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkyCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgQW56YWhsIHZvbiBBcmd1bWVudGVuLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk4Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIGJlbsO2dGlndCBnZW5hdSBlaW4gQXJndW1lbnQuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDQKK21zZ2lkICItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1nIGJlbsO2dGlndCBtaW5kZXN0ZW5zIGVpbiBBcmd1bWVudC4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxMAorbXNnaWQgIi0tY29udmVydC1ncmFmdC1maWxlIHRha2VzIG5vIGFyZ3VtZW50IgorbXNnc3RyICItLWNvbnZlcnQtZ3JhZnQtZmlsZSBlcndhcnRldCBrZWluZSBBcmd1bWVudGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNgorbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgIk1pdCAtbCBrYW5uIG51ciBlaW4gTXVzdGVyIGFuZ2VnZWJlbiB3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiZ2l0IHJlcmVyZSBbY2xlYW4gfCBmb3JnZXQgPFBmYWQ+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICJzYXViZXJlIEF1ZmzDtnN1bmdlbiBpbSBJbmRleCByZWdpc3RyaWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAiJ2dpdCByZXJlcmUgZm9yZ2V0JyBvaG5lIFBmYWRlIGlzdCB2ZXJhbHRldC4iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICJLb25udGUga2VpbiBEaWZmIGbDvHIgJyVzJyBnZW5lcmllcmVuLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyCiBtc2dpZCAiIgotIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKLSJcbiIKLSJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKLSJ0aGUgZGF0YWJhc2UuXG4iCi0iXG4iCi0iQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgogbXNnc3RyICIiCi0iRGllc2VzIFJlcG9zaXRvcnkgZW50aMOkbHQgdW5nZWbDpGhyICVpIG5pY2h0IHZlcmtuw7xwZnRlIE9iamVrdGUuXG4iCi0iXG4iCi0iRsO8ciBlaW5lIG9wdGltYWxlIFBlcmZvcm1hbmNlIHdpcmQgZW1wZm9obGVuLCBkaWUgRGF0ZW5iYW5rIGRlcyBSZXBvc2l0b3J5ICIKLSJ6dSBrb21wcmltaWVyZW4uXG4iCi0iXG4iCi0iU29sbCBkaWUgRGF0ZW5iYW5rIGpldHp0IGtvbXByaW1pZXJ0IHdlcmRlbj8iCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPENvbW1pdD5dIgogCi0jOiBsaWIvZXJyb3IudGNsOjIwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXM6IGVycm9yIgotbXNnc3RyICIlczogRmVobGVyIgorIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzxDb21taXQtUmVmZXJlbno+XSBbLS1dIDxQZmFkc3BlemlmaWthdGlvbj4uLi4iCiAKLSM6IGxpYi9lcnJvci50Y2w6MzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlczogd2FybmluZyIKLW1zZ3N0ciAiJXM6IFdhcm51bmciCi0KLSM6IGxpYi9lcnJvci50Y2w6ODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBob29rIGZhaWxlZDoiCi1tc2dzdHIgIiVzIGhvb2sgZmVobGdlc2NobGFnZW46IgotCi0jOiBsaWIvZXJyb3IudGNsOjk2Ci1tc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKLW1zZ3N0ciAiIgotIlNpZSBtw7xzc2VuIGRpZSBvYmlnZW4gRmVobGVyIHp1ZXJzdCBiZWhlYmVuLCBiZXZvciBTaWUgY29tbWl0dGVuIGvDtm5uZW4uIgotCi0jOiBsaWIvZXJyb3IudGNsOjExNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IGVycm9yIgotbXNnc3RyICIlcyAoJXMpOiBGZWhsZXIiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTMKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAogbXNnaWQgIiIKLSJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCi0iXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iCiBtc2dzdHIgIiIKLSJadXNhbW1lbmbDvGhyZW4ga2FubiBuaWNodCBnbGVpY2h6ZWl0aWcgbWl0IE5hY2hiZXNzZXJuIGR1cmNoZ2Vmw7xocnQgd2VyZGVuLlxuIgotIlxuIgotIlNpZSBtw7xzc2VuIHp1ZXJzdCBkZW4gTmFjaGJlc3NlcnVuZ3MtQ29tbWl0IGFic2NobGllw59lbiwgYmV2b3IgU2llICIKLSJ6dXNhbW1lbmbDvGhyZW4ga8O2bm5lbi5cbiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSAiCisiWzxDb21taXQtUmVmZXJlbno+XSIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogYnVpbHRpbi9yZXNldC5jOjM1Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPENvbW1pdC1SZWZlcmVuej5dIFstLV0gWzxQZmFkc3BlemlmaWthdGlvbj4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAibWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgInNvZnQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgImhhcmQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICJ6dXNhbW1lbmbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgImtlZXAiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJTaWUgaGFiZW4ga2VpbmVuIGfDvGx0aWdlbiBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRmluZGVuIGRlcyBcIlRyZWVcIi1PYmpla3RlcyB2b24gSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRmluZGVuIGRlcyBcIlRyZWVcIi1PYmpla3RlcyB2b24gJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIGlzdCBqZXR6dCBiZWkgJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiS2FubiBrZWluZW4gJyVzJy1SZXNldCBkdXJjaGbDvGhyZW4sIHfDpGhyZW5kIGVpbiBNZXJnZSBpbSBHYW5nZSBpc3QuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk0IGJ1aWx0aW4vc3Rhc2guYzo1MTkgYnVpbHRpbi9zdGFzaC5jOjU5NAorIzogYnVpbHRpbi9zdGFzaC5jOjYxOAorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgIndlbmlnZXIgQXVzZ2FiZW4sIG51ciBGZWhsZXIgbWVsZGVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk2Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIkhFQUQgdW5kIEluZGV4IHVtc2V0emVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICJudXIgSEVBRCB1bXNldHplbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5OSBidWlsdGluL3Jlc2V0LmM6MzAxCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiSEVBRCwgSW5kZXggdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcyB1bXNldHplbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiSEVBRCB1bXNldHplbiwgYWJlciBsb2thbGUgw4RuZGVydW5nZW4gYmVoYWx0ZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDkKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAibnVyIHNwZWljaGVybiwgZGFzcyBnZWzDtnNjaHRlIFBmYWRlIHNww6R0ZXIgaGluenVnZWbDvGd0IHdlcmRlbiBzb2xsZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYWxzIGfDvGx0aWdlbiBDb21taXQgYXVmbMO2c2VuLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFscyBnw7xsdGlnZXMgXCJUcmVlXCItT2JqZWt0IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggaXN0IGlua29tcGF0aWJlbCBtaXQgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgbWl0IFBmYWRlbiBpc3QgdmVyYWx0ZXQ7IGJlbnV0emVuIFNpZSBzdGF0dGRlc3NlbiAnZ2l0IHJlc2V0IC0tICIKKyI8UGZhZGU+Jy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJFaW4gJyVzJy1SZXNldCBtaXQgUGZhZGVuIGlzdCBuaWNodCBtw7ZnbGljaC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiclcyctUmVzZXQgaXN0IGluIGVpbmVtIEJhcmUtUmVwb3NpdG9yeSBuaWNodCBlcmxhdWJ0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIGthbm4gbnVyIG1pdCAtbWl4ZWQgYmVudXR6dCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTIKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiTmljaHQgenVtIENvbW1pdCB2b3JnZW1lcmt0ZSDDhG5kZXJ1bmdlbiBuYWNoIFp1csO8Y2tzZXR6dW5nOiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCiAiXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCiBtc2dzdHIgIiIKLSJEZXIgbGV0enRlIGdlbGFkZW5lIFN0YXR1cyBzdGltbXQgbmljaHQgbWVociBtaXQgZGVtIFJlcG9zaXRvcnkgw7xiZXJlaW4uXG4iCiAiXG4iCi0iRWluIGFuZGVyZXMgR2l0LVByb2dyYW1tIGhhdCBkYXMgUmVwb3NpdG9yeSBzZWl0IGRlbSBsZXR6dGVuIExhZGVuICIKLSJnZcOkbmRlcnQuICBWb3IgZWluZW0gWnVzYW1tZW5mw7xocmVuIG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgotIlxuIgotIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorIkVzIGRhdWVydGUgJS4yZiBTZWt1bmRlbiwgdW0gw7xiZXIgZGllIG5hY2ggZWluZW0gUmVzZXQgbmljaHQgenVtIENvbW1pdFxuIgorInZvcmdlbWVya3RlbiDDhG5kZXJ1bmdlbiB6dSB6w6RobGVuLiBTaWUga8O2bm5lbiAnLS1xdWlldCcgYmVudXR6ZW4sIHVtXG4iCisiZGFzIHp1IHZlcmhpbmRlcm4uIFNldHplbiBTaWUgZGllIEtvbmZpZ3VyYXRpb25zZWluc3RlbGx1bmcgcmVzZXQucXVpZXRcbiIKKyJhdWYgXCJ0cnVlXCIsIHVtIGRhcyB6dW0gU3RhbmRhcmQgenUgbWFjaGVuLlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3Jlc2V0LmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJLb25udGUgSW5kZXgtRGF0ZWkgbmljaHQgenUgQ29tbWl0ICclcycgc2V0emVuLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIktvbm50ZSBuZXVlIEluZGV4LURhdGVpIG5pY2h0IHNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0MTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIgorbXNnc3RyICIiCisiLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgdW5kIC0tbWlzc2luZyBrw7ZubmVuIG5pY2h0IGtvbWJpbmllcnQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ3MgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICJEYXMgRmlsdGVybiB2b24gT2JqZWt0ZW4gZXJmb3JkZXJ0IC0tb2JqZWN0cy4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjIKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IHVudGVyc3TDvHR6dCBrZWluZSBBbnplaWdlIHZvbiBOb3RpemVuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTI1Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS11c2UtYml0bWFwLWluZGV4IHdpdGggb2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAiIgorIi0tdXNlLWJpdG1hcC1pbmRleCBrYW5uIG5pY2h0IG1pdCBkZW0gRmlsdGVybiB2b24gT2JqZWt0ZW4ga29tYmluaWVydCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8T3B0aW9uZW4+XSAtLSBbPEFyZ3VtZW50ZT4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiYC0tYCBhbHMgQXJndW1lbnQgbGFzc2VuIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiZGFzIFBhcnNlbiBuYWNoIGRlbSBlcnN0ZW4gQXJndW1lbnQsIHdhcyBrZWluZSBPcHRpb24gaXN0LCBzdG9wcGVuIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgIiIKKyJBdXNnYWJlIGluIExhbmdmb3JtIG1pdCBBcmd1bWVudGVuIGFuIGRlbiBPcHRpb25lbiAoZ2V0cmVubnQgZHVyY2ggJz0nKSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCiAiXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgotIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgogbXNnc3RyICIiCi0iWnVzYW1tZW5mw7xocnVuZyBtaXQgS29uZmxpa3Rlbi5cbiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxPcHRpb25lbj5dIC0tIFs8QXJndW1lbnRlPi4uLl1cbiIKKyIgICBvZGVyOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxBcmd1bWVudGU+Li4uXVxuIgorIiAgIG9kZXI6IGdpdCByZXYtcGFyc2UgWzxPcHRpb25lbj5dIFs8QXJndW1lbnRlPi4uLl1cbiIKICJcbiIKLSJEaWUgRGF0ZWkgwrslc8KrIGVudGjDpGx0IEtvbmZsaWt0ZSBiZWltIFp1c2FtbWVuZsO8aHJlbi5cbiIKLSJcbiIKLSJTaWUgbcO8c3NlbiBkaWVzZSBLb25mbGlrdGUgcGVyIEhhbmQgYXVmbMO2c2VuLiBBbnNjaGxpZcOfZW5kIG3DvHNzZW4gU2llIGRpZSAiCi0iRGF0ZWkgd2llZGVyIGJlcmVpdHN0ZWxsZW4gdW5kIGNvbW1pdHRlbiwgdW0gZGllIFp1c2FtbWVuZsO8aHJ1bmcgIgotImFienVzY2hsaWXDn2VuLiBFcnN0IGRhbmFjaCBrYW5uIGVpbmUgbmV1ZSBadXNhbW1lbmbDvGhydW5nIGJlZ29ubmVuIHdlcmRlbi5cbiIKKyJGw7xocmVuIFNpZSBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuIGJlaSAiCisiZXJzdGVyIFZlcndlbmR1bmcgYXVzLiIKIAotIzogbGliL21lcmdlLnRjbDo1NQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs8T3B0aW9uZW4+XSA8Q29tbWl0LUFuZ2FiZT4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8VW50ZXJiZWZlaGw+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs8T3B0aW9uZW4+XSA8Q29tbWl0LUFuZ2FiZT4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPFVudGVyYmVmZWhsPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICJPcHRpb24gYCVzJyBlcndhcnRldCBlaW5lIE51bW1lciBncsO2w59lciBhbHMgMC4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBrYW5uIG5pY2h0IG1pdCAlcyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIlwicmV2ZXJ0XCIgb2RlciBcImNoZXJyeS1waWNrXCIgQWJsYXVmIGJlZW5kZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiXCJyZXZlcnRcIiBvZGVyIFwiY2hlcnJ5LXBpY2tcIiBBYmxhdWYgZm9ydHNldHplbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJcInJldmVydFwiIG9kZXIgXCJjaGVycnktcGlja1wiIEFibGF1ZiBhYmJyZWNoZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAic2tpcCBjdXJyZW50IGNvbW1pdCBhbmQgY29udGludWUiCittc2dzdHIgImRlbiBha3R1ZWxsZW4gQ29tbWl0IGF1c2xhc3NlbiB1bmQgZm9ydGZhaHJlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAibmljaHQgYXV0b21hdGlzY2ggY29tbWl0dGVuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJDb21taXQtQmVzY2hyZWlidW5nIGJlYXJiZWl0ZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAiTnVtbWVyIGRlcyBFbHRlcm50ZWlscyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICJFbHRlcm50ZWlsIGRlciBIYXVwdGxpbmllIGF1c3fDpGhsZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIk1lcmdlLVN0cmF0ZWdpZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJPcHRpb24gZsO8ciBNZXJnZS1TdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJDb21taXQtTmFtZW4gYW5ow6RuZ2VuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICJ1cnNwcsO8bmdsaWNoZSwgbGVlcmUgQ29tbWl0cyBlcmhhbHRlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjkKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAicmVkdW5kYW50ZSwgbGVlcmUgQ29tbWl0cyBiZWhhbHRlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJcInJldmVydFwiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0NQorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiXCJjaGVycnktcGlja1wiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL3JtLmM6MTkKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPE9wdGlvbmVuPl0gWy0tXSA8RGF0ZWk+Li4uIgorCisjOiBidWlsdGluL3JtLmM6MjA3CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKLW1zZ3N0ciAiIgotIkVzIGxpZWdlbiDDhG5kZXJ1bmdlbiB2b3IuXG4iCi0iXG4iCi0iRGllIERhdGVpIMK7JXPCqyB3dXJkZSBnZcOkbmRlcnQuXG4iCi0iXG4iCi0iU2llIHNvbGx0ZW4genVlcnN0IGRlbiBiZXJlaXRnZXN0ZWxsdGVuIENvbW1pdCBhYnNjaGxpZcOfZW4sIGJldm9yIFNpZSBlaW5lICIKLSJadXNhbW1lbmbDvGhydW5nIGJlZ2lubmVuLiAgTWl0IGRpZXNlciBSZWloZW5mb2xnZSBrw7ZubmVuIFNpZSBtw7ZnbGljaGUgIgotIktvbmZsaWt0ZSBiZWltIFp1c2FtbWVuZsO8aHJlbiB3ZXNlbnRsaWNoIGVpbmZhY2hlciBiZWhlYmVuIG9kZXIgYWJicmVjaGVuLlxuIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKKyJkaWUgZm9sZ2VuZGUgRGF0ZWkgaGF0IHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW4gdW50ZXJzY2hpZWRsaWNoXG4iCisienUgZGVyIERhdGVpIHVuZCBIRUFEOiIKK21zZ3N0clsxXSAiIgorImRpZSBmb2xnZW5kZW4gRGF0ZWllbiBoYWJlbiB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuICIKKyJ1bnRlcnNjaGllZGxpY2hcbiIKKyJ6dSBkZXIgRGF0ZWkgdW5kIEhFQUQ6IgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIG9mICVzIgotbXNnc3RyICIlcyB2b24gJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiB2b24gJXMgdW5kICVzLi4uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzNwotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZXJmb2xncmVpY2ggYWJnZXNjaGxvc3Nlbi4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTM5Ci1tc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCi1tc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBmZWhsZ2VzY2hsYWdlbi4gS29uZmxpa3RhdWZsw7ZzdW5nIGlzdCBub3R3ZW5kaWcuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjE1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzICglcyk6IE1lcmdlIgotbXNnc3RyICIlcyAoJXMpOiBadXNhbW1lbmbDvGhyZW4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2UgSW50byAlcyIKLW1zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGluIMK7JXPCqyIKLQotIzogbGliL21lcmdlLnRjbDoxODMKLW1zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKLW1zZ3N0ciAiWnVzYW1tZW56dWbDvGhyZW5kZSBWZXJzaW9uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjIxOAorIzogYnVpbHRpbi9ybS5jOjIxMgogbXNnaWQgIiIKLSJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCiAiXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCiBtc2dzdHIgIiIKLSJBYmJydWNoIGRlciBOYWNoYmVzc2VydW5nIGlzdCBuaWNodCBtw7ZnbGljaC5cbiIKICJcbiIKLSJTaWUgbcO8c3NlbiBkaWUgTmFjaGJlc3NlcnVuZyBkaWVzZSBDb21taXRzIGFic2NobGllw59lbi5cbiIKKyIoYmVudXR6ZW4gU2llIC1mLCB1bSBkaWUgTMO2c2NodW5nIHp1IGVyendpbmdlbikiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjI4CisjOiBidWlsdGluL3JtLmM6MjE2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ3N0clswXSAiZGllIGZvbGdlbmRlIERhdGVpIGhhdCB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuOiIKK21zZ3N0clsxXSAiZGllIGZvbGdlbmRlbiBEYXRlaWVuIGhhYmVuIHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW46IgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKIG1zZ2lkICIiCi0iQWJvcnQgbWVyZ2U/XG4iCiAiXG4iCi0iQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKIG1zZ3N0ciAiIgotIlp1c2FtbWVuZsO8aHJlbiBhYmJyZWNoZW4/XG4iCiAiXG4iCi0iV2VubiBTaWUgYWJicmVjaGVuLCBnZWhlbiBhbGxlIG5vY2ggbmljaHQgY29tbWl0dGV0ZW4gw4RuZGVydW5nZW4gdmVybG9yZW4uXG4iCi0iXG4iCi0iWnVzYW1tZW5mw7xocmVuIGpldHp0IGFiYnJlY2hlbj8iCisiKGJlbnV0emVuIFNpZSAtLWNhY2hlZCwgdW0gZGllIERhdGVpIHp1IGJlaGFsdGVuLCBvZGVyIC1mLCB1bSBkYXMgRW50ZmVybmVuICIKKyJ6dSBlcnp3aW5nZW4pIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIzNAorIzogYnVpbHRpbi9ybS5jOjIyNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAiZGllIGZvbGdlbmRlIERhdGVpIGhhdCBsb2thbGUgw4RuZGVydW5nZW46IgorbXNnc3RyWzFdICJkaWUgZm9sZ2VuZGVuIERhdGVpZW4gaGFiZW4gbG9rYWxlIMOEbmRlcnVuZ2VuOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgImtlaW5lIGdlbMO2c2NodGVuIERhdGVpZW4gYXVmbGlzdGVuIgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm51ciBhdXMgZGVtIEluZGV4IGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICJkaWUgXCJ1cC10by1kYXRlXCIgUHLDvGZ1bmcgw7xiZXJzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAicmVrdXJzaXZlcyBFbnRmZXJuZW4gZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDcKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAibWl0IFLDvGNrZ2FiZXdlcnQgMCBiZWVuZGVuLCB3ZW5uIGtlaW5lIMOcYmVyZWluc3RpbW11bmcgZ2VmdW5kZW4gd3VyZGUiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODkKK21zZ2lkICJwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorIkJpdHRlIG1lcmtlbiBTaWUgSWhyZSDDhG5kZXJ1bmdlbiBpbiAuZ2l0bW9kdWxlcyB6dW0gQ29tbWl0IHZvciBvZGVyXG4iCisiYmVudXR6ZW4gU2llIFwic3Rhc2hcIiwgdW0gZm9ydHp1ZmFocmVuLiIKKworIzogYnVpbHRpbi9ybS5jOjMwNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICInJXMnIHdpcmQgbmljaHQgb2huZSAtciByZWt1cnNpdiBlbnRmZXJudCIKKworIzogYnVpbHRpbi9ybS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybToga29ubnRlICVzIG5pY2h0IGzDtnNjaGVuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjIwCiBtc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCi0iXG4iCi0iUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCiBtc2dzdHIgIiIKLSLDhG5kZXJ1bmdlbiB2ZXJ3ZXJmZW4/XG4iCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8SG9zdD46XTxWZXJ6ZWljaG5pcz4gIgorIls8UmVmZXJlbno+Li4uXVxuIgorIiAgLS1hbGwgdW5kIGRpZSBleHBsaXppdGUgQW5nYWJlIGVpbmVyIDxSZWZlcmVuej4gc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnICIKKyJhdXMuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICJOYW1lIGRlcyBSZW1vdGUtUmVwb3NpdG9yaWVzIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJ6dXN0YW5kc2xvc2VzIFJQQy1Qcm90b2tvbGwgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICJSZWZlcmVuemVuIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzkKK21zZ2lkICJwcmludCBzdGF0dXMgZnJvbSByZW1vdGUgaGVscGVyIgorbXNnc3RyICJTdGF0dXMgZGVzIFJlbW90ZS1IZWxwZXJzIGF1c2dlYmVuIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTQKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPE9wdGlvbmVuPl0gWzxDb21taXRiZXJlaWNoPl0gW1stLV0gPFBmYWQ+Li4uXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1Cittc2dpZCAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjQKK21zZ2lkICJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIgorbXNnc3RyICLDvGJlciBDb21taXQtRXJzdGVsbGVyIGFuc3RhdHQgQXV0b3IgZ3J1cHBpZXJlbiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAiZGllIEF1c2dhYmUgZW50c3ByZWNoZW5kIGRlciBBbnphaGwgdm9uIENvbW1pdHMgcHJvIEF1dG9yIHNvcnRpZXJlbiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2OAorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICJDb21taXQtQmVzY2hyZWlidW5nZW4gdW50ZXJkcsO8Y2tlbiwgbnVyIEFuemFobCBkZXIgQ29tbWl0cyBsaWVmZXJuIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiZGllIEUtTWFpbC1BZHJlc3NlIHZvbiBqZWRlbSBBdXRvciBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MQorbXNnaWQgIjx3PlssPGkxPlssPGkyPl1dIgorbXNnc3RyICI8dz5bLDxpMT5bLDxpMj5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiQXVzZ2FiZSBtaXQgWmVpbGVudW1icsO8Y2hlbiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjMwMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgInp1IHZpZWxlIEFyZ3VtZW50ZSBhdcOfZXJoYWxiIGRlcyBSZXBvc2l0b3JpZXMgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTxXYW5uPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPENvbW1pdD4gfCA8Z2xvYj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE3Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxCYXNpcz5dXSBbLS1saXN0XSBbPFJlZmVyZW56Pl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gImlnbm9yaWVyZSAlczsga2FubiBuaWNodCBtZWhyIGFscyAlZCBSZWZlcmVueiBiZWhhbmRlbG4iCittc2dzdHJbMV0gImlnbm9yaWVyZSAlczsga2FubiBuaWNodCBtZWhyIGFscyAlZCBSZWZlcmVuemVuIGJlaGFuZGVsbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBtYXRjaGluZyByZWZzIHdpdGggJXMiCittc2dzdHIgImtlaW5lIMO8YmVyZWluc3RpbW1lbmRlbiBSZWZlcmVuemVuIG1pdCAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiUmVtb3RlLVRyYWNraW5nIHVuZCBsb2thbGUgQnJhbmNoZXMgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiUmVtb3RlLVRyYWNraW5nLUJyYW5jaGVzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiJyohKy0nIGVudHNwcmVjaGVuZCBkZXMgQnJhbmNoZXMgZWluZsOkcmJlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MQorbXNnaWQgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIgorbXNnc3RyICI8bj4gd2VpdGVyZSBDb21taXRzIG5hY2ggZGVtIGdlbWVpbnNhbWVuIFZvcmfDpG5nZXItQ29tbWl0IGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICJTeW5vbnltIGbDvHIgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJOYW1lbiB1bnRlcmRyw7xja2VuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2Cittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgImRlbiBha3R1ZWxsZW4gQnJhbmNoIGVpbmJlemllaGVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU4Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICJDb21taXRzIG5hY2ggaWhyZW4gT2JqZWt0bmFtZW4gYmVuZW5uZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICJtw7ZnbGljaGUgTWVyZ2UtQmFzZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICIiCisiUmVmZXJlbnplbiwgZGllIHVuZXJyZWljaGJhciB2b24gYWxsZW4gYW5kZXJlbiBSZWZlcmVuemVuIHNpbmQsIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJDb21taXRzIGluIHRvcG9sb2dpc2NoZXIgT3JkbnVuZyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NworbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICJudXIgQ29tbWl0cyBhbnplaWdlbiwgZGllIHNpY2ggbmljaHQgaW0gZXJzdGVuIEJyYW5jaCBiZWZpbmRlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2OQorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAiTWVyZ2VzIGFuemVpZ2VuLCBkaWUgbnVyIHZvbiBlaW5lbSBCcmFuY2ggYXVzIGVycmVpY2hiYXIgc2luZCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAidG9wb2xvZ2lzY2hlIFNvcnRpZXJ1bmcsIEJlaWJlaGFsdHVuZyBEYXR1bXNvcmRudW5nIHdvIG3DtmdsaWNoIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxCYXNpcz5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgImRpZSA8bj4gasO8bmdzdGVuIEVpbnRyw6RnZSBpbSBSZWZsb2csIGJlZ2lubmVuZCBhbiBkZXIgQmFzaXMsIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzExCittc2dpZCAiIgorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIgorbXNnc3RyICIiCisiLS1yZWZsb2cgaXN0IGlua29tcGF0aWJlbCBtaXQgLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvZGVyIC0tbWVyZ2UtIgorImJhc2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzUKK21zZ2lkICJubyBicmFuY2hlcyBnaXZlbiwgYW5kIEhFQUQgaXMgbm90IHZhbGlkIgorbXNnc3RyICJrZWluZSBCcmFuY2hlcyBhbmdlZ2ViZW4sIHVuZCBIRUFEIGlzdCB1bmfDvGx0aWciCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzgKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tcmVmbG9nIGJlbsO2dGlndCBlaW5lbiBCcmFuY2huYW1lbi4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAibnVyICVkIEVpbnRyYWcga2FubiB6dXIgc2VsYmVuIFplaXQgYW5nZXplaWd0IHdlcmRlbiIKK21zZ3N0clsxXSAibnVyICVkIEVpbnRyw6RnZSBrw7ZubmVuIHp1ciBzZWxiZW4gWmVpdCBhbmdlemVpZ3Qgd2VyZGVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICJSZWZlcmVueiBuaWNodCBnZWZ1bmRlbjogJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gIkthbm4gbmljaHQgbWVociBhbHMgJWQgQ29tbWl0IGJlaGFuZGVsbi4iCittc2dzdHJbMV0gIkthbm4gbmljaHQgbWVociBhbHMgJWQgQ29tbWl0cyBiZWhhbmRlbG4uIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbmUgZ8O8bHRpZ2UgUmVmZXJlbnouIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICJrYW5uIENvbW1pdCAlcyAoJXMpIG5pY2h0IGZpbmRlbiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEyCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8TXVzdGVyPi4uLl0gIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTMKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08TXVzdGVyPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICJudXIgVGFncyBhbnplaWdlbiAoa2FubiBtaXQgXCJoZWFkc1wiIGtvbWJpbmllcnQgd2VyZGVuKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgIm51ciBCcmFuY2hlcyBhbnplaWdlbiAoa2FubiBtaXQgXCJ0YWdzXCIga29tYmluaWVydCB3ZXJkZW4pIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY0Cittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAic3RyZW5nZXJlIFJlZmVyZW56cHLDvGZ1bmcsIGVyZm9yZGVydCBleGFrdGVuIFJlZmVyZW56cGZhZCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NyBidWlsdGluL3Nob3ctcmVmLmM6MTY5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICIiCisiZGllIEhFQUQtUmVmZXJlbnogYW56ZWlnZW4sIHNlbGJzdCB3ZW5uIGRpZXNlIGF1c2dlZmlsdGVydCB3ZXJkZW4gd8O8cmRlIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgIlRhZ3MgaW4gT2JqZWt0LUlkZW50aWZpa2F0aW9uZW4gZGVyZWZlcmVuemllcmVuIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTczCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJudXIgU0hBMSBIYXNoIG1pdCA8bj4gWmlmZmVybiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICIiCisia2VpbmUgQXVzZ2FiZSBkZXIgRXJnZWJuaXNzZSBpbiBkaWUgU3RhbmRhcmQtQXVzZ2FiZSAobsO8dHpsaWNoIG1pdCAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiUmVmZXJlbnplbiB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgYW56ZWlnZW4sIGRpZSBzaWNoIG5pY2h0IGltIGxva2FsZW4gIgorIlJlcG9zaXRvcnkgYmVmaW5kZW4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGRpc2FibGUpIDxvcHRpb25zPiIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSA8T3B0aW9uZW4+IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjYxCittc2dpZCAidGhpcyB3b3JrdHJlZSBpcyBub3Qgc3BhcnNlIChzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgbm90IGV4aXN0KSIKK21zZ3N0ciAiIgorIkRpZXNlcyBBcmJlaXRzdmVyemVpY2huaXMgaXN0IG5pY2h0IHBhcnRpZWxsIChEYXRlaSBmw7xyIHBhcnRpZWxsZXIgQ2hlY2tvdXQgIgorImV4aXN0aWVydCBldmVudHVlbGwgbmljaHQpLiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMjAKK21zZ2lkICJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIKK21zZ3N0ciAiRWluc3RlbGx1bmcgZsO8ciBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIGtvbm50ZSBuaWNodCBnZXNldHp0IHdlcmRlbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMzcKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNTYKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICJJbml0aWFsaXNpZXJlIGRlbiBwYXJ0aWVsbGVuIENoZWNrb3V0IGltIENvbmUtTW9kdXMiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjYyCittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIlBhcnRpZWxsZW4gQ2hlY2tvdXQgaW5pdGlhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIMOWZmZuZW4gdm9uICclcyciCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzYxCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8cGF0dGVybnM+KSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8TXVzdGVyPikiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mzc4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIgorbXNnc3RyICJNdXN0ZXIgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM4NAorbXNnaWQgInNldCBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgIlNldHplIE11c3RlciBmw7xyIHBhcnRpZWxsZXMgQXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NDcKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiUGFydGllbGxlbiBDaGVja291dCBkZWFrdGl2aWVyZW4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiRmVobGVyIHfDpGhyZW5kIGRlciBBa3R1YWxpc2llcnVuZyBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozNworbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMyBidWlsdGluL3N0YXNoLmM6NDIKK21zZ2lkICJnaXQgc3Rhc2ggc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBzaG93IFs8T3B0aW9uZW4+XSBbPFN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNCBidWlsdGluL3N0YXNoLmM6NDcKK21zZ2lkICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxTdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxTdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjYgYnVpbHRpbi9zdGFzaC5jOjYyCittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYnJhbmNoIDxCcmFuY2g+IFs8U3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI3IGJ1aWx0aW4vc3Rhc2guYzo2NworbXNnaWQgImdpdCBzdGFzaCBjbGVhciIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjggYnVpbHRpbi9zdGFzaC5jOjc3Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8TmFjaHJpY2h0Pl1cbiIKKyIgICAgICAgICAgWy0tXSBbPFBmYWRzcGV6aWZpa2F0aW9uPi4uLl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MzEgYnVpbHRpbi9zdGFzaC5jOjg0Cittc2dpZCAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPE5hY2hyaWNodD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIKK21zZ2lkICJnaXQgc3Rhc2ggcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxTdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTcKK21zZ2lkICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8U3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjcyCittc2dpZCAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4iCittc2dzdHIgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxOYWNocmljaHQ+XSBbLXF8LS1xdWlldF0gPENvbW1pdD4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBpc3Qga2VpbiBcInN0YXNoXCItYXJ0aWdlciBDb21taXQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIKK21zZ3N0ciAiWnUgdmllbGUgQ29tbWl0cyBhbmdlZ2ViZW46JXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NDkKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAiS2VpbmUgU3Rhc2gtRWludHLDpGdlIGdlZnVuZGVuLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiclcycgaXN0IGtlaW4gZ8O8bHRpZ2VyIFJlZmVyZW56bmFtZS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjQgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIG1pdCBQYXJhbWV0ZXJuIGlzdCBuaWNodCBpbXBsZW1lbnRpZXJ0IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDAzCittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJLYW5uIFN0YXNoIG5pY2h0IGFud2VuZGVuLCBzb2xhbmdlIGVpbiBNZXJnZSBpbSBHYW5nZSBpc3QiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIGRpZmYgJXNeIS4iCittc2dzdHIgIktvbm50ZSBrZWluZW4gRGlmZiBlcnpldWdlbiAlc14hLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyMQorbXNnaWQgImNvbmZsaWN0cyBpbiBpbmRleC5Ucnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiS29uZmxpa3RlIGltIEluZGV4LiBWZXJzdWNoZW4gU2llIGVzIG9obmUgLS1pbmRleC4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjcKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJLb25udGUgSW5kZXgtVmVyemVpY2huaXMgbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDM2Cittc2dpZCAiY291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2giCittc2dzdHIgIktvbm50ZSB1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuIHZvbSBTdGFzaCBuaWNodCB3aWVkZXJoZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgIkbDvGhyZSAlcyBtaXQgJXMgenVzYW1tZW4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODEKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgIkluZGV4IHd1cmRlIG5pY2h0IGF1cyBkZW0gU3Rhc2ggenVyw7xja2dlbGFkZW4uIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIxIGJ1aWx0aW4vc3Rhc2guYzo2MjAKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAiVmVyc3VjaGUgSW5kZXggd2llZGVyaGVyenVzdGVsbGVuLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgIiVzICglcykgZ2Vsw7ZzY2h0IgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXM6IEtvbm50ZSBTdGFzaC1FaW50cmFnIG5pY2h0IGzDtnNjaGVuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJXMnIGlzdCBrZWluZSBTdGFzaC1SZWZlcmVueiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICIiCisiRGVyIFN0YXNoLUVpbnRyYWcgd2lyZCBmw7xyIGRlbiBGYWxsIGJlaGFsdGVuLCBkYXNzIFNpZSBkaWVzZW4gbm9jaG1hbCAiCisiYmVuw7Z0aWdlbi4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTMKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIktlaW4gQnJhbmNobmFtZSBzcGV6aWZpemllcnQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3OTUgYnVpbHRpbi9zdGFzaC5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICVzIHdpdGggJXMiCittc2dzdHIgIkthbm4gbmljaHQgJXMgbWl0ICVzIGFrdHVhbGlzaWVyZW4uIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODEzIGJ1aWx0aW4vc3Rhc2guYzoxNDcwIGJ1aWx0aW4vc3Rhc2guYzoxNTA2Cittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAiU3Rhc2gtQmVzY2hyZWlidW5nIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODIzCittc2dpZCAiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiCittc2dzdHIgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgZXJ3YXJ0ZXQgZWluIEFyZ3VtZW50IDxDb21taXQ+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuIGF1c2dld8OkaGx0IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJTaWUgaGFiZW4gYmlzaGVyIG5vY2gga2VpbmVuIGluaXRpYWxlbiBDb21taXQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTcyIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTY1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIkthbm4gZGVuIGFrdHVlbGxlbiBadXN0YW5kIGRlcyBJbmRleCBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTgxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiS2FubiBkaWUgdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE5MiBidWlsdGluL3N0YXNoLmM6MTIwMSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMQorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2FubiBkZW4gYWt0dWVsbGVuIFp1c3RhbmQgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjI5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIkthbm4gWnVzdGFuZCBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzIG5pY2h0IGF1ZnplaWNobmVuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3OCBnaXQtbGVnYWN5LXN0YXNoLnNoOjMzOAorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIiIKKyJLYW5uIG5pY2h0IGdsZWljaHplaXRpZyAtLXBhdGNoIHVuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9kZXIgLS1hbGwgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI5NAorbXNnaWQgIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz8iCittc2dzdHIgIkhhYmVuIFNpZSB2aWVsbGVpY2h0ICdnaXQgYWRkJyB2ZXJnZXNzZW4/IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMwOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiS2VpbmUgbG9rYWxlbiDDhG5kZXJ1bmdlbiB6dW0gU3BlaWNoZXJuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1MQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJLYW5uIFwic3Rhc2hcIiBuaWNodCBpbml0aWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIkthbm4gZGVuIGFrdHVlbGxlbiBTdGF0dXMgbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgIkFyYmVpdHN2ZXJ6ZWljaG5pcyB1bmQgSW5kZXgtU3RhdHVzICVzIGdlc3BlaWNoZXJ0LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0MjYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozODUKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIkthbm4gw4RuZGVydW5nZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIG5pY2h0IGzDtnNjaGVuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2MSBidWlsdGluL3N0YXNoLmM6MTQ5NworbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgImJlaGFsdGUgSW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYzIGJ1aWx0aW4vc3Rhc2guYzoxNDk5Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAiU3Rhc2ggaW4gUGF0Y2gtTW9kdXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY0IGJ1aWx0aW4vc3Rhc2guYzoxNTAwCittc2dpZCAicXVpZXQgbW9kZSIKK21zZ3N0ciAid2VuaWdlciBBdXNnYWJlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjYgYnVpbHRpbi9zdGFzaC5jOjE1MDIKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAidW52ZXJzaW9uaWVydGUgRGF0ZWllbiBpbiBTdGFzaCBlaW5iZXppZWhlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjggYnVpbHRpbi9zdGFzaC5jOjE1MDQKK21zZ2lkICJpbmNsdWRlIGlnbm9yZSBmaWxlcyIKK21zZ3N0ciAiaWdub3JpZXJ0ZSBEYXRlaWVuIGVpbmJlemllaGVuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhlYyAlcyIKK21zZ3N0ciAiS29ubnRlICdleGVjICVzJyBuaWNodCBhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKyJhbGxlIFplaWxlbiwgZGllIG1pdCBkZW0gS29tbWVudGFyemVpY2hlbiBiZWdpbm5lbiwgw7xiZXJzcHJpbmdlbiB1bmQgIgorImVudGZlcm5lbiIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6NDAKK21zZ2lkICJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiCittc2dzdHIgIktvbW1lbnRhcnplaWNoZW4gbWl0IExlZXJ6ZWljaGVuIGFuIGplZGUgWmVpbGUgdm9yYW5zdGVsbGVuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIgorbXNnc3RyICJWb2xsc3TDpG5kaWdlciBSZWZlcmVuem5hbWUgZXJ3YXJ0ZXQsICVzIGVyaGFsdGVuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIidzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZScgZXJ3YXJ0ZXQga2VpbmUgQXJndW1lbnRlLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICclcyciCittc2dzdHIgIkthbm4gZWluZSBLb21wb25lbnRlIHZvbiBVUkwgJyVzJyBuaWNodCBleHRyYWhpZXJlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MAorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIkFsdGVybmF0aXZlciBBbmtlciBmw7xyIHJlbGF0aXZlIFBmYWRlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08UGZhZD5dIFs8UGZhZD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJLZWluZSBVUkwgZsO8ciBTdWJtb2R1bC1QZmFkICclcycgaW4gLmdpdG1vZHVsZXMgZ2VmdW5kZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICJCZXRyZXRlICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCBnYWIgbmljaHQtTnVsbCBTdGF0dXMgZsO8ciAnJXMnIHp1csO8Y2suXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorInJ1bl9jb21tYW5kIGdhYiB3w6RocmVuZCBkZXIgUmVrdXJzaW9uIGluIHZlcnNjaGFjaHRlbHRlIFN1Ym1vZHVsZSB2b24gJXMgIgorImVpbmVuXG4iCisibmljaHQtTnVsbCBTdGF0dXMgenVyw7xjay5cbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgIiIKKyJBdXNnYWJlbiBiZWltIEJldHJldGVuIHVuZCBkZXIgQmVmZWhsc2F1c2bDvGhydW5nIGluIGVpbmVtIFN1Ym1vZHVsICIKKyJ1bnRlcmRyw7xja2VuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDUzCittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJSZWt1cnNpb24gaW4gdmVyc2NoYWNodGVsdGUgU3VibW9kdWxlIGR1cmNoZsO8aHJlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU3MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxCZWZlaGw+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorIktvbm50ZSBLb25maWd1cmF0aW9uICclcycgbmljaHQgbmFjaHNjaGxhZ2VuLiBOZWhtZSBhbiwgZGFzcyBkaWVzZXNcbiIKKyJSZXBvc2l0b3J5IHNlaW4gZWlnZW5lcyB2ZXJiaW5kbGljaGVzIFVwc3RyZWFtLVJlcG9zaXRvcnkgaXN0LiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gRWludHJhZ2VuIGRlciBVUkwgZsO8ciBTdWJtb2R1bC1QZmFkICclcycgaW4gZGllIEtvbmZpZ3VyYXRpb24uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIlN1Ym1vZHVsICclcycgKCVzKSBmw7xyIFBmYWQgJyVzJyBpbiBkaWUgS29uZmlndXJhdGlvbiBlaW5nZXRyYWdlbi5cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiV2FybnVuZzogJ3VwZGF0ZSctTW9kdXMgZsO8ciBTdWJtb2R1bCAnJXMnIHZvcmdlc2NobGFnZW5cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpIMOEbmRlcnVuZyBkZXMgQWt0dWFsaXNpZXJ1bmdzbW9kdXMgZsO8ciBTdWJtb2R1bC1QZmFkICclcycgaW4gZGVyXG4iCisiS29uZmlndXJhdGlvbi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiQXVzZ2FiZW4gYmVpIEluaXRpYWxpc2llcnVuZyBlaW5lcyBTdWJtb2R1bHMgdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPE9wdGlvbmVuPl0gWzxQZmFkPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3ODcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJLZWluZSBTdWJtb2R1bC1adW9yZG51bmcgaW4gLmdpdG1vZHVsZXMgZsO8ciBQZmFkICclcycgZ2VmdW5kZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIEhFQUQtUmVmZXJlbnogbmljaHQgaW5uZXJoYWxiIGRlcyBTdWJtb2R1bC1QZmFkcyAnJXMnIGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaSBSZWt1cnNpb24gaW4gU3VibW9kdWwgJyVzJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiQXVzZ2FiZSDDvGJlciBTdWJtb2R1bC1TdGF0dXMgdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OQorbXNnaWQgIiIKKyJVc2UgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaW5zdGVhZCBvZiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3VibW9kdWxlICIKKyJIRUFEIgorbXNnc3RyICIiCisiQmVudXR6ZSBkZW4gQ29tbWl0LCBkZXIgaW0gSW5kZXggZ2VzcGVpY2hlcnQgaXN0LCBzdGF0dCBkZW4gaW0gU3VibW9kdWwgSEVBRCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiUmVrdXJzaW9uIGluIHZlcnNjaGFjaHRlbHRlIFN1Ym1vZHVsZSBkdXJjaGbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODUKK21zZ2lkICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8UGZhZD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTA5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8UGZhZD4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIlN5bmNocm9uaXNpZXJlIFN1Ym1vZHVsLVVSTCBmw7xyICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBSZWdpc3RyaWVyZW4gZGVyIFVSTCBmw7xyIFN1Ym1vZHVsLVBmYWQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXMgU3RhbmRhcmQtUmVtb3RlLVJlcG9zaXRvcmllcyBmw7xyIFN1Ym1vZHVsICclcycuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEFrdHVhbGlzaWVyZW4gZGVzIFJlbW90ZS1SZXBvc2l0b3JpZXMgZsO8ciBTdWJtb2R1bCAnJXMnLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICJBdXNnYWJlbiBiZWkgZGVyIFN5bmNocm9uaXNpZXJ1bmcgZGVyIFN1Ym1vZHVsLVVSTHMgdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxQZmFkPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSAodXNlICdybSAtcmYnIGlmIHlvdSAiCisicmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisiQXJiZWl0c3ZlcnplaWNobmlzIHZvbiBTdWJtb2R1bCBpbiAnJXMnIGVudGjDpGx0IGVpbiAuZ2l0LVZlcnplaWNobmlzXG4iCisiKGJlbnV0emVuIFNpZSAncm0gLXJmJywgd2VubiBTaWUgZGllc2VzIHdpcmtsaWNoIG1pdHNhbXQgc2VpbmVyIEhpc3RvcmllXG4iCisibMO2c2NoZW4gbcO2Y2h0ZW4pIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgIgorInRoZW0iCittc2dzdHIgIiIKKyJBcmJlaXRzdmVyemVpY2huaXMgdm9uIFN1Ym1vZHVsIGluICclcycgZW50aMOkbHQgbG9rYWxlIMOEbmRlcnVuZ2VuO1xuIgorInZlcndlbmRlbiBTaWUgJy1mJywgdW0gZGllc2UgenUgdmVyd2VyZmVuLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICJWZXJ6ZWljaG5pcyAnJXMnIGJlcmVpbmlndC5cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIKK21zZ3N0ciAiS29ubnRlIEFyYmVpdHN2ZXJ6ZWljaG5pcyBkZXMgU3VibW9kdWxzIGluICclcycgbmljaHQgbMO2c2NoZW4uXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiS29ubnRlIGtlaW4gbGVlcmVzIFZlcnplaWNobmlzIGbDvHIgU3VibW9kdWwgaW4gJyVzJyBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIlN1Ym1vZHVsICclcycgKCVzKSBmw7xyIFBmYWQgJyVzJyBhdXNnZXRyYWdlbi5cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTAKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorIkFyYmVpdHN2ZXJ6ZWljaG5pc3NlIHZvbiBTdWJtb2R1bGVuIGzDtnNjaGVuLCBhdWNoIHdlbm4gbG9rYWxlIMOEbmRlcnVuZ2VuICIKKyJ2b3JsaWVnZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiYWxsZSBTdWJtb2R1bGUgYXVzdHJhZ2VuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5NgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPFBmYWQ+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorIlZlcndlbmRlbiBTaWUgJy0tYWxsJywgd2VubiBTaWUgd2lya2xpY2ggYWxsZSBTdWJtb2R1bGUgZGVpbml0aWFsaXNpZXJlblxuIgorIm3DtmNodGVuLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyNzUKK21zZ2lkICIiCisiQW4gYWx0ZXJuYXRlIGNvbXB1dGVkIGZyb20gYSBzdXBlcnByb2plY3QncyBhbHRlcm5hdGUgaXMgaW52YWxpZC5cbiIKKyJUbyBhbGxvdyBHaXQgdG8gY2xvbmUgd2l0aG91dCBhbiBhbHRlcm5hdGUgaW4gc3VjaCBhIGNhc2UsIHNldFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRvICdpbmZvJyBvciwgZXF1aXZhbGVudGx5LCBjbG9uZSB3aXRoXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIGluc3RlYWQgb2YgJy0tcmVmZXJlbmNlJy4iCittc2dzdHIgIiIKKyJFaW5lIEFsdGVybmF0aXZlLCBkaWUgdm9uIGVpbmVyIMO8YmVyZ2VvcmRuZXRlbiBQcm9qZWt0LUFsdGVybmF0aXZlXG4iCisiYmVyZWNobmV0IHd1cmRlLCBpc3QgdW5nw7xsdGlnLlxuIgorIlVtIEdpdCBkYXMgS2xvbmVuIG9obmUgQWx0ZXJuYXRpdmUgaW4gc29sY2ggZWluZW0gRmFsbCB6dSBlcmxhdWJlbiwgc2V0emVcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBhdWYgJ2luZm8nIG9kZXIga2xvbmUgbWl0IGRlciBPcHRpb25cbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgc3RhdHQgJy0tcmVmZXJlbmNlJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzE0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAiU3VibW9kdWwgJyVzJyBrYW5uIEFsdGVybmF0aXZlIG5pY2h0IGhpbnp1ZsO8Z2VuOiAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIldlcnQgJyVzJyBmw7xyIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHdpcmQgbmljaHQgZXJrYW5udCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJXZXJ0ICclcycgZsO8ciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gd2lyZCBuaWNodCBlcmthbm50LiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODMKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAiUGZhZCBmw7xyIG5ldWVzIFN1Ym1vZHVsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NgorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIk5hbWUgZGVzIG5ldWVuIFN1Ym1vZHVscyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODkKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICJVUkwgdm9uIGRlciBkYXMgU3VibW9kdWwgZ2VrbG9udCB3aXJkIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NworbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAiVGllZmUgZGVzIEtsb25zIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTcKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJGb3J0c2Nocml0dHNhbnplaWdlIGJlaW0gS2xvbmVuIGVyendpbmdlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTkKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAiS2xvbmVuIGluIGVpbiBuaWNodCBsZWVyZXMgVmVyemVpY2huaXMgdmVyYmlldGVuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNworbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PFBmYWQ+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8UmVwb3NpdG9yeT5dIFstLW5hbWUgPE5hbWU+XSBbLS11cmwgPFVSTD5dIFstLW5hbWUgPE5hbWU+XSBbLS1kZXB0aCAiCisiPFRpZWZlPl0gLS11cmwgPFVSTD4gLS1wYXRoIDxQZmFkPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAiIgorIkVyc3RlbGx1bmcvQmVudXR6dW5nIHZvbiAnJXMnIGluIGVpbmVtIGFuZGVyZW4gU3VibW9kdWwtR2l0LVZlcnplaWNobmlzXG4iCisidmVyd2VpZ2VydC4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiS2xvbmVuIHZvbiAnJXMnIGluIFN1Ym1vZHVsLVBmYWQgJyVzJyBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSBub3QgZW1wdHk6ICclcyciCittc2dzdHIgIlZlcnplaWNobmlzIGlzdCBuaWNodCBsZWVyOiAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIktvbm50ZSBTdWJtb2R1bC1WZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IGZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgQWt0dWFsaXNpZXJ1bmdzbW9kdXMgJyVzJyBmw7xyIFN1Ym1vZHVsLVBmYWQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiVW5nw7xsdGlnZXIgQWt0dWFsaXNpZXJ1bmdzbW9kdXMgJyVzJyBmw7xyIFN1Ym1vZHVsLVBmYWQgJyVzJyBrb25maWd1cmllcnQuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAiU3VibW9kdWwtUGZhZCAnJXMnIG5pY2h0IGluaXRpYWxpc2llcnQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTk4Cittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIk1laW50ZW4gU2llIHZpZWxsZWljaHQgJ3VwZGF0ZSAtLWluaXQnPyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICLDnGJlcnNwcmluZ2UgbmljaHQgenVzYW1tZW5nZWbDvGhydGVzIFN1Ym1vZHVsICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiw5xiZXJzcHJpbmdlIFN1Ym1vZHVsICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiCittc2dzdHIgIkZlaGxlciBiZWltIEtsb25lbiB2b24gJyVzJy4gV2VpdGVyZXIgVmVyc3VjaCBnZXBsYW50IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiWndlaXRlciBWZXJzdWNoICclcycgenUga2xvbmVuIGZlaGxnZXNjaGxhZ2VuLCBicmVjaGUgYWIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMAorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJQZmFkIHp1bSBBcmJlaXRzdmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc5Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIiIKKyJQZmFkIHp1bSBBcmJlaXRzdmVyemVpY2huaXMsIMO8YmVyIHZlcnNjaGFjaHRlbHRlIFN1Ym1vZHVsLUdyZW56ZW4gaGlud2VnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MworbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9kZXIgbm9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODkKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgIiIKKyJFcnN0ZWxsdW5nIGVpbmVzIEtsb25zIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSwgYWJnZXNjaG5pdHRlbiAiCisiYmVpXG4iCisiZGVyIGFuZ2VnZWJlbmVuIEFuemFobCB2b24gQ29tbWl0cy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODkyCittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAiUGFyYWxsZWxlIEF1c2bDvGhydW5nZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk0Cittc2dpZCAid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIgorbXNnc3RyICIiCisib2IgZGFzIGluaXRpYWxlIEtsb25lbiBkZW4gRW1wZmVobHVuZ2VuIGbDvHIgZWluZSB1bnZvbGxzdMOkbmRpZ2VcbiIKKyJIaXN0b3JpZSAoc2hhbGxvdykgZm9sZ2VuIHNvbGwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk1Cittc2dpZCAiZG9uJ3QgcHJpbnQgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAia2VpbmUgRm9ydHNjaHJpdHRzYW56ZWlnZSBiZWltIEtsb25lbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08UGZhZD5dIFs8UGZhZD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNworbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAiRmVobGVyaGFmdGVyIFdlcnQgZsO8ciAtLXVwZGF0ZSBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisiQnJhbmNoIHZvbiBTdWJtb2R1bCAoJXMpIGlzdCBrb25maWd1cmllcnQsIGRlbiBCcmFuY2ggZGVzIEhhdXB0cHJvamVrdGVzXG4iCisienUgZXJiZW4sIGFiZXIgZGFzIEhhdXB0cHJvamVrdCBiZWZpbmRldCBzaWNoIGF1ZiBrZWluZW0gQnJhbmNoLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBhIHJlcG9zaXRvcnkgaGFuZGxlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIGtlaW4gUmVwb3NpdG9yeS1IYW5kbGUgZsO8ciBTdWJtb2R1bCAnJXMnIGVyaGFsdGVuLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjEKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAiUmVrdXJzaW9uIGluIFN1Ym1vZHVsZSBkdXJjaGbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTI3Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPE9wdGlvbmVuPl0gWzxQZmFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTgzCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAicHLDvGZlbiwgb2IgZXMgc2ljaGVyIGlzdCwgaW4gZGllIERhdGVpIC5naXRtb2R1bGVzIHp1IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODYKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICJLb25maWd1cmF0aW9uIGluIGRlciAuZ2l0bW9kdWxlcy1EYXRlaSBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkxCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1lPiBbPFdlcnQ+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPE5hbWU+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyIGdpdC1zdWJtb2R1bGUuc2g6MTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkJpdHRlIHN0ZWxsZW4gU2llIHNpY2hlciwgZGFzcyBzaWNoIGRpZSBEYXRlaSAuZ2l0bW9kdWxlcyBpbSAiCisiQXJiZWl0c3ZlcnplaWNobmlzIGJlZmluZGV0LiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNjIgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiVzIHVudGVyc3TDvHR6dCBrZWluIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiclcycgaXN0IGtlaW4gZ8O8bHRpZ2VyIFVudGVyYmVmZWhsIHZvbiBzdWJtb2R1bGUtLWhlbHBlciIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPE9wdGlvbmVuPl0gPE5hbWU+IFs8UmVmZXJlbno+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxOYW1lPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKyJGZWhsZXJtZWxkdW5nZW4gZsO8ciBuaWNodC1zeW1ib2xpc2NoZSAobG9zZ2Vsw7ZzdGUpIFJlZmVyZW56ZW4gdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgInN5bWJvbGlzY2hlIFJlZmVyZW56ZW4gbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgInZlcmvDvHJ6dGUgQXVzZ2FiZSBkZXIgUmVmZXJlbnplbiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgIkdydW5kIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJHcnVuZCBmw7xyIGRpZSBBa3R1YWxpc2llcnVuZyIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPFNjaGzDvHNzZWwtaWQ+XSBbLWZdIFstbSA8QmVzY2hyZWlidW5nPiB8IC1GIDxEYXRlaT5dXG4iCisiXHRcdDxUYWduYW1lPiBbPENvbW1pdD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPFRhZ25hbWU+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI4Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPE51bW1lcj5dXSBbLS1jb250YWlucyA8Q29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPENvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPE9iamVrdD5dXG4iCisiXHRcdFstLWZvcm1hdD08TXVzdGVyPl0gWy0tW25vLV1tZXJnZWQgWzxDb21taXQ+XV0gWzxNdXN0ZXI+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxGb3JtYXQ+XSA8VGFnbmFtZT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiVGFnICclcycgbmljaHQgZ2VmdW5kZW4uIgorCisjOiBidWlsdGluL3RhZy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGdlbMO2c2NodCAod2FyICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCiAiXG4iCi0iQWxsZSBub2NoIG5pY2h0IGNvbW1pdHRldGVuIMOEbmRlcnVuZ2VuIHfDvHJkZW4gdmVybG9yZW4gZ2VoZW4uXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKICJcbiIKLSLDhG5kZXJ1bmdlbiBqZXR6dCB2ZXJ3ZXJmZW4/IgorIkdlYmVuIFNpZSBlaW5lIEJlc2NocmVpYnVuZyBmw7xyIFRhZ1xuIgorIiAgJXNcbiIKKyJlaW4uIFplaWxlbiwgZGllIG1pdCAnJWMnIGJlZ2lubmVuLCB3ZXJkZW4gaWdub3JpZXJ0LlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI0NgotbXNnaWQgIkFib3J0aW5nIgotbXNnc3RyICJBYmJydWNoIgorIzogYnVpbHRpbi90YWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkdlYmVuIFNpZSBlaW5lIEJlc2NocmVpYnVuZyBmw7xyIFRhZ1xuIgorIiAgJXNcbiIKKyJlaW4uIFplaWxlbiwgZGllIG1pdCAnJWMnIGJlZ2lubmVuLCB3ZXJkZW4gYmVoYWx0ZW47IFNpZSBkw7xyZmVuIGRpZXNlXG4iCisic2VsYnN0IGVudGZlcm5lbiB3ZW5uIFNpZSBtw7ZjaHRlbi5cbiIKIAotIzogbGliL21lcmdlLnRjbDoyNDcKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAiRGF0ZWllbiB6dXLDvGNrZ2VzZXR6dCIKKyM6IGJ1aWx0aW4vdGFnLmM6MTk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAia29ubnRlIFRhZyBuaWNodCBzaWduaWVyZW4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6Mjc3Ci1tc2dpZCAiQWJvcnQgZmFpbGVkLiIKLW1zZ3N0ciAiQWJicnVjaCBmZWhsZ2VzY2hsYWdlbi4iCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAia29ubnRlIFRhZy1EYXRlaSBuaWNodCBzY2hyZWliZW4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6Mjc5Ci1tc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgotbXNnc3RyICJBYmJydWNoIGR1cmNoZ2Vmw7xocnQuIEJlcmVpdC4iCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisiU2llIGhhYmVuIGVpbmVuIHZlcnNjaGFjaHRlbHRlbiBUYWcgZXJ6ZXVndC4gRGFzIE9iamVrdCwgYXVmIHdlbGNoZXMgSWhyXG4iCisibmV1ZXMgVGFnIHJlZmVyZW56aWVydCwgaXN0IGJlcmVpdHMgZWluIFRhZy4gV2VubiBTaWUgZGFzIE9iamVrdCB0YWdnZW5cbiIKKyJ3b2xsdGVuLCB3b3JhdWYgZGllc2VzIHplaWd0LCBudXR6ZW4gU2llOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKKworIzogYnVpbHRpbi90YWcuYzoyMzIKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJ1bmfDvGx0aWdlciBPYmpla3QtVHlwIgorCisjOiBidWlsdGluL3RhZy5jOjI4NAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAia2VpbmUgVGFnLUJlc2NocmVpYnVuZz8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIkRpZSBUYWctQmVzY2hyZWlidW5nIHd1cmRlIGluICVzIGdlbGFzc2VuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgIlRhZ25hbWVuIGF1Zmxpc3RlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiPG4+IFplaWxlbiBqZWRlciBUYWctQmVzY2hyZWlidW5nIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJUYWdzIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJUYWdzIMO8YmVycHLDvGZlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4gZsO8ciBFcnN0ZWxsdW5nIHZvbiBUYWdzIgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiYW5ub3RpZXJ0ZXMgVGFnLCBiZW7DtnRpZ3QgZWluZSBCZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIlRhZy1CZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiQmVhcmJlaXR1bmcgZGVyIFRhZy1CZXNjaHJlaWJ1bmcgZXJ6d2luZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgImFubm90aWVydGVzIHVuZCBHUEctc2lnbmllcnRlcyBUYWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE5Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiZWluZW4gYW5kZXJlbiBTY2hsw7xzc2VsIHZlcndlbmRlbiwgdW0gZGFzIFRhZyB6dSBzaWduaWVyZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAiZGFzIFRhZyBlcnNldHplbiwgd2VubiBlcyBleGlzdGllcnQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIxIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OQorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAiUmVmbG9nIGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICJPcHRpb25lbiBmw7xyIEF1Zmxpc3R1bmcgZGVyIFRhZ3MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJMaXN0ZSBkZXIgVGFncyBpbiBTcGFsdGVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQyNSBidWlsdGluL3RhZy5jOjQyNworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibnVyIFRhZ3MgYXVzZ2ViZW4sIGRpZSBkaWVzZW4gQ29tbWl0IGJlaW5oYWx0ZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJudXIgVGFncyBhdXNnZWJlbiwgZGllIGRpZXNlbiBDb21taXQgbmljaHQgZW50aGFsdGVuIgorCisjOiBidWlsdGluL3RhZy5jOjQyOQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIm51ciBUYWdzIGF1c2dlYmVuLCBkaWUgZ2VtZXJnZWQgd3VyZGVuIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJudXIgVGFncyBhdXNnZWJlbiwgZGllIG5pY2h0IGdlbWVyZ2VkIHd1cmRlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAibnVyIFRhZ3Mgdm9uIGRlbSBPYmpla3QgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIHVuZCAtbiBzaW5kIGlua29tcGF0aWJlbCIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtbiBpc3QgbnVyIGltIExpc3Rlbm1vZHVzIGVybGF1YnQuIgorCisjOiBidWlsdGluL3RhZy5jOjUwNgorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1jb250YWlucyBpc3QgbnVyIGltIExpc3Rlbm1vZHVzIGVybGF1YnQuIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkRpZSBPcHRpb24gLS1uby1jb250YWlucyBpc3QgbnVyIGltIExpc3Rlbm1vZHVzIGVybGF1YnQuIgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tcG9pbnRzLWF0IGlzdCBudXIgaW0gTGlzdGVubW9kdXMgZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEyCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLW1lcmdlZCB1bmQgLS1uby1tZXJnZWQgc2luZCBudXIgaW0gTGlzdGVubW9kdXMgZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJudXIgZWluZSAtRiBvZGVyIC1tIE9wdGlvbiBpc3QgZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJ6dSB2aWVsZSBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBUYWduYW1lLiIKKworIzogYnVpbHRpbi90YWcuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlRhZyAnJXMnIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGFrdHVhbGlzaWVydCAod2FyICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTAxCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIkVudHBhY2tlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiB2b24gVmVyemVpY2huaXMgJyVzJyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJLb25udGUgRGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiS29ubnRlIERhdGVpICclcycgbmljaHQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyBtdGltZSBpbiAnJXMnICIKK21zZ3N0ciAiUHLDvGZlIG10aW1lIGluICclcycgIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE1NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICIiCisiVmVyemVpY2huaXNpbmZvcm1hdGlvbmVuIGhhYmVuIHNpY2ggbmFjaCBIaW56dWbDvGdlbiBlaW5lciBuZXVlbiBEYXRlaSBuaWNodCAiCisiZ2XDpG5kZXJ0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJWZXJ6ZWljaG5pc2luZm9ybWF0aW9uZW4gaGFiZW4gc2ljaCBuYWNoIEhpbnp1ZsO8Z2VuIGVpbmVzIG5ldWVuICIKKyJWZXJ6ZWljaG5pc3NlcyBuaWNodCBnZcOkbmRlcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTgwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorIlZlcnplaWNobmlzaW5mb3JtYXRpb25lbiBoYWJlbiBzaWNoIG5hY2ggQWt0dWFsaXNpZXJ1bmcgZWluZXIgRGF0ZWkgZ2XDpG5kZXJ0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJWZXJ6ZWljaG5pc2luZm9ybWF0aW9uZW4gaGFiZW4gc2ljaCBuYWNoIEhpbnp1ZsO8Z2VuIGVpbmVyIERhdGVpIGluIGVpbiAiCisiVW50ZXJ2ZXJ6ZWljaG5pcyBnZcOkbmRlcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisiVmVyemVpY2huaXNpbmZvcm1hdGlvbmVuIGhhYmVuIHNpY2ggbmFjaCBkZW0gTMO2c2NoZW4gZWluZXIgRGF0ZWkgbmljaHQgIgorImdlw6RuZGVydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIlZlcnplaWNobmlzaW5mb3JtYXRpb25lbiBoYWJlbiBzaWNoIG5hY2ggZGVtIEzDtnNjaGVuIGVpbmVzIFZlcnplaWNobmlzc2VzICIKKyJuaWNodCBnZcOkbmRlcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8T3B0aW9uZW4+XSBbLS1dIFs8RGF0ZWk+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgIiIKKyJBa3R1YWxpc2llcnVuZyBmb3J0c2V0emVuLCBhdWNoIHdlbm4gZGVyIEluZGV4IGFrdHVhbGlzaWVydCB3ZXJkZW4gbXVzcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmc6IGlnbm9yaWVydCBTdWJtb2R1bGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgwCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgImtlaW5lIG5ldWVuIERhdGVpZW4gaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODIKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAiRGF0ZWllbiBWZXJ6ZWljaG5pc3NlIGVyc2V0emVuIGxhc3NlbiwgdW5kIHVtZ2VkcmVodCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODQKK21zZ2lkICJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJmZWhsZW5kZSBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyBiZWFjaHRlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorImFrdHVhbGlzaWVyZW4sIGF1Y2ggd2VubiBkZXIgSW5kZXggbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRWludHLDpGdlIGJlaW5oYWx0ZXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJEYXRlaWluZm9ybWF0aW9uZW4gYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgIndpZSAtLXJlZnJlc2gsIGlnbm9yaWVydCBhYmVyIFwiYXNzdW1lLXVuY2hhbmdlZFwiIEVpbnN0ZWxsdW5nIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NworbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjxNb2R1cz4sPE9iamVrdD4sPFBmYWQ+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiZGVuIGFuZ2VnZWJlbmVuIEVpbnRyYWcgenVtIENvbW1pdCB2b3JtZXJrZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAiZGllc2UgRGF0ZWkgaW1tZXIgYWxzIHVudmVyw6RuZGVydCBiZXRyYWNodGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTEKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgIlwiYXNzdW1lZC11bmNoYW5nZWRcIi1CaXQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIkRhdGVpZW4gYWxzIFwiaW5kZXgtb25seVwiIG1hcmtpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIlwic2tpcC13b3JrdHJlZVwiLUJpdCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAiXCJpbmRleC1vbmx5XCIgRWludHLDpGdlIMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisiZGllIMOEbmRlcnVuZ2VuIG51ciB6dW0gQ29tbWl0IHZvcm1lcmtlbjsgSW5oYWx0IHdpcmQgbmljaHQgZGVyIE9iamVrdC0iCisiRGF0ZW5iYW5rIGhpbnp1Z2Vmw7xndCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI0Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImJlbmFubnRlIFBmYWRlIGzDtnNjaGVuLCBhdWNoIHdlbm4gc2llIHNpY2ggaW0gQXJiZWl0c3ZlcnplaWNobmlzIGJlZmluZGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgIm1pdCAtLXN0ZGluOiBlaW5nZWdlYmVuZSBaZWlsZW4gc2luZCBkdXJjaCBOVUwtQnl0ZXMgYWJnZXNjaGxvc3NlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI4Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiTGlzdGUgZGVyIHp1IGFrdHVhbGlzaWVyZW5kZW4gUGZhZGUgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiRWludHLDpGdlIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSB6dW0gQ29tbWl0IHZvcm1lcmtlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM2Cittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICIiCisid2llZGVyaG9sdGVzIEVpbnBmbGVnZW4gZGVyIFp1c3TDpG5kZSAjMiB1bmQgIzMgZsO8ciBkaWUgYXVmZ2VsaXN0ZXRlbiBQZmFkZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIm51ciBFaW50csOkZ2UgYWt0dWFsaXNpZXJlbiwgZGllIHVudGVyc2NoaWVkbGljaCB6dSBIRUFEIHNpbmQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImZlaGxlbmRlIERhdGVpZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZGllIEFrdGlvbmVuIGluIGRlciBTdGFuZGFyZC1BdXNnYWJlIGF1c2dlYmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiKGbDvHIgRnJlbWRwcm9ncmFtbWUpIGtlaW5lIGdlc3BlaWNoZXJ0ZW4sIG5pY2h0IGF1ZmdlbMO2c3RlIEtvbmZsaWt0ZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgIkluZGV4LURhdGVpIGluIGRpZXNlbSBGb3JtYXQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiU3BsaXR0aW5nIGRlcyBJbmRleCBha3RpdmllcmVuIG9kZXIgZGVha3RpdmllcmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIkNhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBha3RpdmllcmVuIG9kZXIgZGVha3RpdmllcmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorInByw7xmZW4sIG9iIGRhcyBEYXRlaXN5c3RlbSBlaW5lbiBDYWNoZSBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4gdW50ZXJzdMO8dHp0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjEKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorIkNhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBvaG5lIFByw7xmdW5nIGRlcyBEYXRlaXN5c3RlbXMgYWt0aXZpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYzCittc2dpZCAid3JpdGUgb3V0IHRoZSBpbmRleCBldmVuIGlmIGlzIG5vdCBmbGFnZ2VkIGFzIGNoYW5nZWQiCittc2dzdHIgIkluZGV4IHJhdXNzY2hyZWliZW4sIGF1Y2ggd2VubiBkaWVzZXIgbmljaHQgYWxzIGdlw6RuZGVydCBtYXJraWVydCBpc3QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgIkRhdGVpc3lzdGVtLU1vbml0b3IgYWt0aXZpZXJlbiBvZGVyIGRlYWt0aXZpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgIkRhdGVpZW4gYWxzIFwiZnNtb25pdG9yIHZhbGlkXCIgbWFya2llcmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICJcImZzbW9uaXRvciB2YWxpZFwiLUJpdCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IGlzdCBhdWYgJ2ZhbHNlJyBnZXNldHp0LiBFbnRmZXJuZW4gb2RlciDDpG5kZXJuIFNpZSBkaWVzLFxuIgorIndlbm4gc2llIHdpcmtsaWNoIGRhcyBTcGxpdHRpbmcgZGVzIEluZGV4IGFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXN0IGF1ZiAndHJ1ZScgZ2VzZXR6dC4gRW50ZmVybmVuIG9kZXIgw6RuZGVybiBTaWUgZGllcyxcbiIKKyJ3ZW5uIFNpZSB3aXJrbGljaCBkYXMgU3BsaXR0aW5nIGRlcyBJbmRleCBkZWFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTQKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzdCBhdWYgJ3RydWUnIGdlc2V0enQuIEVudGZlcm5lbiBvZGVyIMOkbmRlcm4gU2llIGRpZXMsXG4iCisid2VubiBTaWUgd2lya2xpY2ggZGVuIENhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBkZWFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIkNhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBkZWFrdGl2aWVydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjA2Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpc3QgYXVmICdmYWxzZScgZ2VzZXR6dC4gRW50ZmVybmVuIG9kZXIgw6RuZGVybiBTaWUgIgorImRpZXMsXG4iCisid2VubiBzaWUgd2lya2xpY2ggZGVuIENhY2hlIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiBha3RpdmllcmVuIG3DtmNodGVuLiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJDYWNoZSBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4gZsO8ciAnJXMnIGFrdGl2aWVydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjE4Cittc2dpZCAiY29yZS5mc21vbml0b3IgaXMgdW5zZXQ7IHNldCBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZW5hYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIG5pY2h0IGdlc2V0enQuIFNldHplbiBTaWUgZXMsIHdlbm4gU2llIGRlbiBEYXRlaXN5c3RlbS0iCisiTW9uaXRvclxuIgorIndpcmtsaWNoIGFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjIKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0tTW9uaXRvciBha3RpdmllcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciBpc3QgZ2VzZXR6dC4gTMO2c2NoZW4gU2llIGVzLCB3ZW5uIFNpZSBkZW4gRGF0ZWlzeXN0ZW0tIgorIk1vbml0b3JcbiIKKyJ3aXJrbGljaCBkZWFrdGl2aWVyZW4gbcO2Y2h0ZW4uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgIkRhdGVpc3lzdGVtLU1vbml0b3IgZGVha3RpdmllcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPE9wdGlvbmVuPl0gLWQgPFJlZmVyZW56bmFtZT4gWzxhbHRlci1XZXJ0Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiIgorImdpdCB1cGRhdGUtcmVmIFs8T3B0aW9uZW4+XSAgICA8UmVmZXJlbnpuYW1lPiA8bmV1ZXItV2VydD4gWzxhbHRlci1XZXJ0Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPE9wdGlvbmVuPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAiZGllc2UgUmVmZXJlbnogbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICI8UmVmZXJlbnpuYW1lPiBha3R1YWxpc2llcmVuLCBuaWNodCBkZW4gVmVyd2VpcyIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAiU3RhbmRhcmQtRWluZ2FiZSBoYXQgZHVyY2ggTlVMLVplaWNoZW4gYWJnZXNjaGxvc3NlbmUgQXJndW1lbnRlIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmdlbiB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgImRpZSBJbmZvcm1hdGlvbnNkYXRlaWVuIHZvbiBHcnVuZCBhdWYgYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjExCittc2dpZCAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxkaXI+IgorbXNnc3RyICJnaXQgdXBsb2FkLXBhY2sgWzxPcHRpb25lbj5dIDxWZXJ6ZWljaG5pcz4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMyB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTcKK21zZ2lkICJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiCittc2dzdHIgIm5hY2ggZWluZW0gZWluemlnZW4gUmVxdWVzdC9SZXNwb25zZS1BdXN0YXVzY2ggYmVlbmRlbiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICJkaXJla3QgbmFjaCBkZXIgaW5pdGlhbGVuIEFuZ2FiZSBkZXIgQ29tbWl0cyBiZWVuZGVuIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJrZWluIFZlcnN1Y2ggaW4gPFZlcnplaWNobmlzPi8uZ2l0LyB3ZW5uIDxWZXJ6ZWljaG5pcz4ga2VpbiBHaXQtVmVyemVpY2huaXMgIgorImlzdCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgIsOcYmVydHJhZ3VuZyBuYWNoIDxuPiBTZWt1bmRlbiBJbmFrdGl2aXTDpHQgdW50ZXJicmVjaGVuIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPENvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJDb21taXQtSW5oYWx0ZSBhdXNnZWJlbiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgInVuYmVhcmJlaXRldGUgQXVzZ2FiZSBkZXMgU3RhdHVzIHZvbiBncGcgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8UGFrZXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJlcndlaXRlcnRlIEF1c2dhYmVuIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAibnVyIFN0YXRpc3Rpa2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PEZvcm1hdD5dIDxUYWc+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAiVGFnLUluaGFsdGUgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8T3B0aW9uZW4+XSA8UGZhZD4gWzxDb21taXQtQW5nYWJlPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxPcHRpb25lbj5dIDxQZmFkPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA8QXJiZWl0c3ZlcnplaWNobmlzPiA8bmV1ZXItUGZhZD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIyCittc2dpZCAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8d29ya3RyZWU+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8T3B0aW9uZW4+XSA8QXJiZWl0c3ZlcnplaWNobmlzPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSB1bmxvY2sgPFBmYWQ+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEzDtnNjaGVuIHZvbiAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIkzDtnNjaGUgd29ya3RyZWVzLyVzOiBrZWluIGfDvGx0aWdlcyBWZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkzDtnNjaGUgd29ya3RyZWVzLyVzOiBnaXRkaXItRGF0ZWkgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAgYnVpbHRpbi93b3JrdHJlZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiTMO2c2NoZSB3b3JrdHJlZXMvJXM6IGtvbm50ZSBnaXRkaXItRGF0ZWkgKCVzKSBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIkzDtnNjaGUgd29ya3RyZWVzLyVzOiByZWFkKCkgenUga3VyeiAoJTxQUkl1TUFYPiBCeXRlcyBlcndhcnRldCwgJTxQUkl1TUFYPiAiCisiZ2VsZXNlbikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJMw7ZzY2hlIHdvcmt0cmVlcy8lczogdW5nw7xsdGlnZSBnaXRkaXItRGF0ZWkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICJMw7ZzY2hlIHdvcmt0cmVlcy8lczogZ2l0ZGlyLURhdGVpIHZlcndlaXN0IGF1ZiBuaWNodCBleGlzdGllcmVuZGVuIE9ydCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiZW50ZmVybnRlIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlIGF1c2dlYmVuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIkFyYmVpdHN2ZXJ6ZWljaG5pc3NlIMOkbHRlciBhbHMgPFplaXQ+IHZlcmZhbGxlbiBsYXNzZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyBleGlzdGllcnQgYmVyZWl0cyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciCittc2dzdHIgIktvbm50ZSBBcmJlaXRzdmVyemVpY2huaXMgJyVzJyBuaWNodCBuZXUgaGluenVmw7xnZW4uIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyInJXMnIGlzdCBlaW4gZmVobGVuZGVzLCBhYmVyIGdlc3BlcnJ0ZXMgQXJiZWl0c3ZlcnplaWNobmlzO1xuIgorIkJlbnV0emVuIFNpZSAnYWRkIC1mIC1mJyB6dW0gw5xiZXJzY2hyaWViZW4sIG9kZXIgJ3VubG9jaycgdW5kICdwcnVuZSdcbiIKKyJvZGVyICdyZW1vdmUnIHp1bSBMw7ZzY2hlbi4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYnIHRvIG92ZXJyaWRlLCBvciAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiJyVzJyBpc3QgZWluIGZlaGxlbmRlcywgYWJlciBiZXJlaXRzIHJlZ2lzdHJpZXJ0ZXMgQXJiZWl0c3ZlcnplaWNobmlzO1xuIgorIkJlbnV0emVuIFNpZSAnYWRkIC1mJyB6dW0gw5xiZXJzY2hyZWliZW4sIG9kZXIgJ3BydW5lJyBvZGVyICdyZW1vdmUnIHp1bVxuIgorIkzDtnNjaGVuLiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM5IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChuZXcgYnJhbmNoICclcycpIgorbXNnc3RyICJCZXJlaXRlIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2b3IgKG5ldWVyIEJyYW5jaCAnJXMnKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiQmVyZWl0ZSBBcmJlaXRzdmVyemVpY2huaXMgdm9yIChzZXR6ZSBCcmFuY2ggJyVzJyB1bTsgd2FyIGJlaSAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgIkJlcmVpdGUgQXJiZWl0c3ZlcnplaWNobmlzIHZvciAoY2hlY2tlICclcycgYXVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICJCZXJlaXRlIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2b3IgKGxvc2dlbMO2c3RlciBIRUFEICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ5NworbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAiIgorIjxCcmFuY2g+IGF1c2NoZWNrZW4sIGF1Y2ggd2VubiBkaWVzZXIgYmVyZWl0cyBpbiBlaW5lbSBhbmRlcmVuICIKKyJBcmJlaXRzdmVyemVpY2huaXMgYXVzZ2VjaGVja3QgaXN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAwCittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAibmV1ZW4gQnJhbmNoIGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMgorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiQnJhbmNoIGVyc3RlbGxlbiBvZGVyIHVtc2V0emVuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgImRhcyBuZXVlIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhdXNjaGVja2VuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA1Cittc2dpZCAia2VlcCB0aGUgbmV3IHdvcmtpbmcgdHJlZSBsb2NrZWQiCittc2dzdHIgImRhcyBuZXVlIEFyYmVpdHN2ZXJ6ZWljaG5pcyBnZXNwZXJydCBsYXNzZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDgKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1icmFuY2goMSkpIgorbXNnc3RyICJNb2R1cyB6dW0gRm9sZ2VuIHZvbiBCcmFuY2hlcyBlaW5zdGVsbGVuIChzaWVoZSBnaXQtYnJhbmNoKDEpKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMQorbXNnaWQgInRyeSB0byBtYXRjaCB0aGUgbmV3IGJyYW5jaCBuYW1lIHdpdGggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisidmVyc3VjaGVuLCBlaW5lIMOcYmVyZWluc3RpbW11bmcgZGVzIEJyYW5jaC1OYW1lbnMgbWl0IGVpbmVtXG4iCisiUmVtb3RlLVRyYWNraW5nLUJyYW5jaCBoZXJ6dXN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTkKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgdW5kIC0tZGV0YWNoIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1ODAKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiIgorIi0tW25vXS10cmFjayBrYW5uIG51ciB2ZXJ3ZW5kZXQgd2VyZGVuLCB3ZW5uIGVpbiBuZXVlciBCcmFuY2ggZXJzdGVsbHQgd2lyZC4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODAKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgIlNwZXJyZ3J1bmQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIgYnVpbHRpbi93b3JrdHJlZS5jOjcyNSBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIGlzdCBrZWluIEFyYmVpdHN2ZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5NCBidWlsdGluL3dvcmt0cmVlLmM6NzI3Cittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIkRhcyBIYXVwdGFyYmVpdHN2ZXJ6ZWljaG5pcyBrYW5uIG5pY2h0IGdlc3BlcnJ0IG9kZXIgZW50c3BlcnJ0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIKK21zZ3N0ciAiJyVzJyBpc3QgYmVyZWl0cyBnZXNwZXJydCwgR3J1bmQ6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycgaXN0IGJlcmVpdHMgZ2VzcGVycnQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICInJXMnIGlzdCBuaWNodCBnZXNwZXJydCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc3MAorbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICIiCisiQXJiZWl0c3ZlcnplaWNobmlzc2UsIGRpZSBTdWJtb2R1bGUgZW50aGFsdGVuLCBrw7ZubmVuIG5pY2h0IHZlcnNjaG9iZW4gb2RlclxuIgorImVudGZlcm50IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzgKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICIiCisiVmVyc2NoaWViZW4gZXJ6d2luZ2VuLCBhdWNoIHdlbm4gZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBnZcOkbmRlcnQgb2RlciAiCisiZ2VzcGVycnQgaXN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAxIGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIGlzdCBlaW4gSGF1cHRhcmJlaXRzdmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpZ3VyZSBvdXQgZGVzdGluYXRpb24gbmFtZSBmcm9tICclcyciCittc2dzdHIgIktvbm50ZSBaaWVsbmFtZSBhdXMgJyVzJyBuaWNodCBiZXN0aW1tZW4uIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJaaWVsICclcycgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisiS2FubiBrZWluIGdlc3BlcnJ0ZXMgQXJiZWl0c3ZlcnplaWNobmlzIHZlcnNjaGllYmVuLCBTcGVycmdydW5kOiAlc1xuIgorIkJlbnV0emVuIFNpZSAnbW92ZSAtZiAtZicgenVtIMOcYmVyc2NocmVpYmVuIG9kZXIgZW50c3BlcnJlbiBTaWUgenVlcnN0XG4iCisiZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcy4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjIKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisiS2FubiBrZWluIGdlc3BlcnJ0ZXMgQXJiZWl0c3ZlcnplaWNobmlzIHZlcnNjaGllYmVuLlxuIgorIkJlbnV0emVuIFNpZSAnbW92ZSAtZiAtZicgenVtIMOcYmVyc2NocmVpYmVuIG9kZXIgZW50c3BlcnJlbiBTaWUgenVlcnN0XG4iCisiZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcy4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIlZhbGlkaWVydW5nIGZlaGxnZXNjaGxhZ2VuLCBrYW5uIEFyYmVpdHN6ZWljaG5pcyBuaWNodCB2ZXJzY2hpZWJlbjogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzY2hpZWJlbiB2b24gJyVzJyBuYWNoICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gJ2dpdCBzdGF0dXMnIGF1ZiAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKyInJXMnIGVudGjDpGx0IGdlw6RuZGVydGUgb2RlciBuaWNodCB2ZXJzaW9uaWVydGUgRGF0ZWllbiwgYmVudXR6ZW4gU2llIC0tZm9yY2UgIgorInp1bSBMw7ZzY2hlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiAnZ2l0IHN0YXR1cycgYXVmICclcycuIENvZGU6ICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTEwCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorIkzDtnNjaGVuIGVyendpbmdlbiwgYXVjaCB3ZW5uIGRhcyBBcmJlaXRzdmVyemVpY2huaXMgZ2XDpG5kZXJ0IG9kZXIgZ2VzcGVycnQgIgorImlzdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJLYW5uIGtlaW4gZ2VzcGVycnRlcyBBcmJlaXRzdmVyemVpY2huaXMgbMO2c2NoZW4sIFNwZXJyZ3J1bmQ6ICVzXG4iCisiQmVudXR6ZW4gU2llICdyZW1vdmUgLWYgLWYnIHp1bSDDnGJlcnNjaHJlaWJlbiBvZGVyIGVudHNwZXJyZW4gU2llIHp1ZXJzdFxuIgorImRhcyBBcmJlaXRzdmVyemVpY2huaXMuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM1Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJLYW5uIGtlaW4gZ2VzcGVycnRlcyBBcmJlaXRzdmVyemVpY2huaXMgbMO2c2NoZW4uXG4iCisiQmVudXR6ZW4gU2llICdyZW1vdmUgLWYgLWYnIHp1bSDDnGJlcnNjaHJlaWJlbiBvZGVyIGVudHNwZXJyZW4gU2llIHp1ZXJzdFxuIgorImRhcyBBcmJlaXRzdmVyemVpY2huaXMuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIlZhbGlkaWVydW5nIGZlaGxnZXNjaGxhZ2VuLCBrYW5uIEFyYmVpdHN2ZXJ6ZWljaG5pcyBuaWNodCBsw7ZzY2hlbjogJXMiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08UHLDpGZpeD4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjgKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjxQcsOkZml4Pi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJkYXMgVHJlZS1PYmpla3QgZsO8ciBlaW4gVW50ZXJ2ZXJ6ZWljaG5pcyA8UHLDpGZpeD4gc2NocmVpYmVuIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIm51ciBuw7x0emxpY2ggZsO8ciBGZWhsZXJzdWNoZSIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIidtYXJrJyBCZWZlaGwgZXJ3YXJ0ZXQsICclcycgYmVrb21tZW4iCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAndG8nIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiJ3RvJyBCZWZlaGwgZXJ3YXJ0ZXQsICclcycgYmVrb21tZW4iCisKKyM6IGZhc3QtaW1wb3J0LmM6MzI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmZWF0dXJlICclcycgZm9yYmlkZGVuIGluIGlucHV0IHdpdGhvdXQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCittc2dzdHIgIkZlYXR1cmUgJyVzJyB2ZXJib3RlbiBpbiBFaW5nYWJlIG9obmUgT3B0aW9uIC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIkRpZSBCZXJlY2h0aWd1bmdlbiBhdWYgSWhyIFNvY2tldC1WZXJ6ZWljaG5pcyBzaW5kIHp1IHNjaHdhY2g7IGFuZGVyZVxuIgorIk51dHplciBrw7ZubnRlbiBJaHJlIHp3aXNjaGVuZ2VzcGVpY2hlcnRlbiBBbm1lbGRlaW5mb3JtYXRpb25lbiBsZXNlbi5cbiIKKyJaaWVoZW4gU2llIGluIEJldHJhY2h0XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzXG4iCisiXG4iCisiYXVzenVmw7xocmVuLiIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiTWVsZHVuZ2VuIHp1ciBGZWhsZXJzdWNoZSBpbiBTdGFuZGFyZC1GZWhsZXJhdXNnYWJlIGF1c2dlYmVuIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiQ29tbWl0ICVzIGlzdCBuaWNodCBhbHMgZXJyZWljaGJhciBnZWtlbm56ZWljaG5ldC4iCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIlp1IHZpZWxlIENvbW1pdHMgYWxzIGVycmVpY2hiYXIgZ2VrZW5uemVpY2huZXQuIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6NworbXNnaWQgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAidGVzdC10b29sIHNlcnZlLXYyIFs8T3B0aW9uZW4+XSIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgImRpcmVrdCBuYWNoIEFuemVpZ2UgZGVyIGFuZ2Vib3RlbmVuIEbDpGhpZ2tlaXRlbiBiZWVuZGVuIgorCisjOiBnaXQuYzoyNworbXNnaWQgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cGF0aD5dIFstLXdvcmstdHJlZT08cGF0aD5dIFstLW5hbWVzcGFjZT08bmFtZT5dXG4iCisiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iCittc2dzdHIgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxQZmFkPl0gWy1jIDxOYW1lPj08V2VydD5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxQZmFkPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxQZmFkPl0gWy0td29yay10cmVlPTxQZmFkPl0gWy0tbmFtZXNwYWNlPTxOYW1lPl1cbiIKKyIgICAgICAgICAgIDxCZWZlaGw+IFs8QXJndW1lbnRlPl0iCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKyJTZWUgJ2dpdCBoZWxwIGdpdCcgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiJ2dpdCBoZWxwIC1hJyB1bmQgJ2dpdCBoZWxwIC1nJyBsaXN0ZXQgdmVyZsO8Z2JhcmUgVW50ZXJiZWZlaGxlIHVuZFxuIgorImVpbmlnZSBBbmxlaXR1bmdlbiB6dSBHaXQtS29uemVwdGVuIGF1Zi4gQmVudXR6ZW4gU2llICdnaXQgaGVscCA8QmVmZWhsPidcbiIKKyJvZGVyICdnaXQgaGVscCA8S29uemVwdD4nLCB1bSBtZWhyIMO8YmVyIGVpbmVuIHNwZXppZmlzY2hlbiBCZWZlaGwgb2RlclxuIgorIktvbnplcHQgenUgZXJmYWhyZW4uXG4iCisiQmVudXR6ZW4gU2llICdnaXQgaGVscCBnaXQnIGbDvHIgZWluZW4gw5xiZXJibGljayBkZXMgU3lzdGVtcy4iCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICJLZWluIFZlcnplaWNobmlzIGbDvHIgLS1naXQtZGlyIGFuZ2VnZWJlbi5cbiIKKworIzogZ2l0LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5hbWVzcGFjZSBnaXZlbiBmb3IgLS1uYW1lc3BhY2VcbiIKK21zZ3N0ciAiS2VpbiBOYW1lc3BhY2UgZsO8ciAtLW5hbWVzcGFjZSBhbmdlZ2ViZW4uXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIktlaW4gVmVyemVpY2huaXMgZsO8ciAtLXdvcmstdHJlZSBhbmdlZ2ViZW4uXG4iCisKKyM6IGdpdC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iCittc2dzdHIgIktlaW4gUHLDpGZpeCBmw7xyIC0tc3VwZXItcHJlZml4IGFuZ2VnZWJlbi5cbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYyBlcndhcnRldCBlaW5lbiBLb25maWd1cmF0aW9uc3N0cmluZy5cbiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAiS2VpbiBWZXJ6ZWljaG5pcyBmw7xyIC1DIGFuZ2VnZWJlbi5cbiIKKworIzogZ2l0LmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAlc1xuIgorbXNnc3RyICJVbmJla2FubnRlIE9wdGlvbjogJXNcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICJiZWltIEVyd2VpdGVybiB2b24gQWxpYXMgJyVzJzogJyVzJyIKKworIzogZ2l0LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIKK21zZ3N0ciAiIgorIkFsaWFzICclcycgw6RuZGVydCBVbWdlYnVuZ3N2YXJpYWJsZW4uXG4iCisiU2llIGvDtm5uZW4gJyFnaXQnIGltIEFsaWFzIGJlbnV0emVuLCB1bSBkaWVzIHp1IHR1bi4iCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgImxlZXJlciBBbGlhcyBmw7xyICVzIgorCisjOiBnaXQuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGFsaWFzOiAlcyIKK21zZ3N0ciAicmVrdXJzaXZlciBBbGlhczogJXMiCisKKyM6IGdpdC5jOjQ1OQorbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gaW4gZGllIFN0YW5kYXJkLUF1c2dhYmUuIgorCisjOiBnaXQuYzo0NjEKK21zZ2lkICJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJVbmJla2FubnRlciBGZWhsZXIgYmVpbSBTY2hyZWliZW4gaW4gZGllIFN0YW5kYXJkLUF1c2dhYmUuIgorCisjOiBnaXQuYzo0NjMKK21zZ2lkICJjbG9zZSBmYWlsZWQgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIGRlciBTdGFuZGFyZC1BdXNnYWJlLiIKKworIzogZ2l0LmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAiQWxpYXMtU2NobGVpZmUgZXJrYW5udDogRXJ3ZWl0ZXJ1bmcgdm9uICclcycgc2NobGllw590IG5pY2h0IGFiOiVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIkthbm4gJXMgbmljaHQgYWxzIGVpbmdlYmF1dGVuIEJlZmVobCBiZWhhbmRlbG4uIgorCisjOiBnaXQuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiVmVyd2VuZHVuZzogJXNcbiIKKyJcbiIKKworIzogZ2l0LmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICJFcndlaXRlcnVuZyB2b24gQWxpYXMgJyVzJyBmZWhsZ2VzY2hsYWdlbjsgJyVzJyBpc3Qga2VpbiBHaXQtQmVmZWhsLlxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIEJlZmVobCAnJXMnOiAlc1xuIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgIm5lZ2F0aXZlciBXZXJ0IGbDvHIgaHR0cC5wb3N0YnVmZmVyOyBiZW51dHplIFN0YW5kYXJkd2VydCAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAiS29udHJvbGxlIMO8YmVyIERlbGVnYXRpb24gd2lyZCBtaXQgY1VSTCA8IDcuMjIuMCBuaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIiIKKyJEYXMgQW5oZWZ0ZW4gZGVzIMO2ZmZlbnRsaWNoZW4gU2NobMO8c3NlbHMgd2lyZCBtaXQgY1VSTCA8IDcuNDQuMFxuIgorIm5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugd2lyZCBtaXQgY1VSTCA8IDcuNDQuMCBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICJQcm90b2tvbGxiZXNjaHLDpG5rdW5nZW4gd2VyZGVuIG1pdCBjVVJMIDwgNy4xOS40IG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGh0dHAuYzoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIFNTTCBiYWNrZW5kICclcycuIFN1cHBvcnRlZCBTU0wgYmFja2VuZHM6IgorbXNnc3RyICJOaWNodCB1bnRlcnN0w7x0enRlcyBTU0wtQmFja2VuZCAnJXMnLiBVbnRlcnN0w7x0enRlIFNTTC1CYWNrZW5kczoiCisKKyM6IGh0dHAuYzoxMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogY1VSTCB3YXMgYnVpbHQgd2l0aG91dCBTU0wgYmFja2VuZHMiCittc2dzdHIgIiIKKyJLb25udGUgU1NMLUJhY2tlbmQgbmljaHQgenUgJyVzJyBzZXR6ZW46IGNVUkwgd3VyZGUgb2huZSBTU0wtQmFja2VuZHMgZ2ViYXV0LiIKKworIzogaHR0cC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBhbHJlYWR5IHNldCIKK21zZ3N0ciAiS29ubnRlIFNTTC1CYWNrZW5kIG5pY2h0IHp1ICclcycgc2V0emVuOiBiZXJlaXRzIGdlc2V0enQiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisiS29ubnRlIEJhc2lzLVVSTCBuaWNodCBkdXJjaCBVbWxlaXR1bmcgYWt0dWFsaXNpZXJlbjpcbiIKKyIgIGdlZnJhZ3QgbmFjaDogJXNcbiIKKyIgICAgdW1nZWxlaXRldDogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgUXVvdGluZyBiZWltIFwicHVzaC1vcHRpb25cIi1XZXJ0OiAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiVzaW5mby9yZWZzIG5pY2h0IGfDvGx0aWc6IElzdCBkYXMgZWluIEdpdC1SZXBvc2l0b3J5PyIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBBbnR3b3J0IGRlcyBTZXJ2ZXJzLiBTZXJ2aWNlIGVyd2FydGV0LCBGbHVzaC1QYWtldCBiZWtvbW1lbiIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlIFNlcnZlcmFudHdvcnQ7ICclcycgYmVrb21tZW4iCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBub3QgZm91bmQiCittc2dzdHIgIlJlcG9zaXRvcnkgJyVzJyBuaWNodCBnZWZ1bmRlbi4iCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiQXV0aGVudGlmaXppZXJ1bmcgZmVobGdlc2NobGFnZW4gZsO8ciAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICJrb25udGUgbmljaHQgYXVmICclcycgenVncmVpZmVuOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgdG8gJXMiCittc2dzdHIgIkxlaXRlIG5hY2ggJXMgdW0iCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgInNvbGx0ZSBrZWluIEVPRiBoYWJlbiwgd2VubiBuaWNodCBiZWh1dHNhbSBtaXQgRU9GIgorCisjOiByZW1vdGUtY3VybC5jOjY3MworbXNnaWQgInVuYWJsZSB0byByZXdpbmQgcnBjIHBvc3QgZGF0YSAtIHRyeSBpbmNyZWFzaW5nIGh0dHAucG9zdEJ1ZmZlciIKK21zZ3N0ciAiIgorIktvbm50ZSBuaWNodCBSUEMtUE9TVC1EYXRlbiB6dXLDvGNrc3B1bGVuIC0gVmVyc3VjaGVuIFNpZSBodHRwLnBvc3RCdWZmZXIgenUgIgorImVyaMO2aGVuIgorCisjOiByZW1vdGUtY3VybC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSUEMgZmFpbGVkOyAlcyIKK21zZ3N0ciAiUlBDIGZlaGxnZXNjaGxhZ2VuOyAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo3NzMKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAiS2FubiBzb2xjaGUgZ3Jvw59lbiDDnGJlcnRyYWd1bmdlbiBuaWNodCB2ZXJhcmJlaXRlbi4iCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAiS2FubiBSZXF1ZXN0IG5pY2h0IGtvbXByaW1pZXJlbjsgXCJ6bGliIGRlZmxhdGVcIi1GZWhsZXIgJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICJLYW5uIFJlcXVlc3QgbmljaHQga29tcHJpbWllcmVuOyBcInpsaWIgZW5kXCItRmVobGVyICVkIgorCisjOiByZW1vdGUtY3VybC5jOjEwMjMKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIkR1bWIgSFRUUC1UcmFuc3BvcnQgdW50ZXJzdMO8dHp0IGtlaW5lIHNoYWxsb3ctRnVua3Rpb25lbiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM3Cittc2dpZCAiZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiXCJmZXRjaFwiIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg1Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICJLYW5uIFNIQS0xIG5pY2h0IMO8YmVyIFNtYXJ0LUhUVFAgYW5mb3JkZXJuIgorCisjOiByZW1vdGUtY3VybC5jOjExMjkgcmVtb3RlLWN1cmwuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiUHJvdG9rb2xsZmVobGVyOiBTSEEtMS9SZWZlcmVueiBlcndhcnRldCwgJyVzJyBiZWtvbW1lbiIKKworIzogcmVtb3RlLWN1cmwuYzoxMTQ3IHJlbW90ZS1jdXJsLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIgorbXNnc3RyICJIVFRQLVRyYW5zcG9ydCB1bnRlcnN0w7x0enQgbmljaHQgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4MworbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICJcImdpdC1odHRwLXB1c2hcIiBmZWhsZ2VzY2hsYWdlbiIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY3Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IFZlcndlbmR1bmc6IGdpdCByZW1vdGUtY3VybCA8UmVtb3RlLVJlcG9zaXRvcnk+IFs8VVJMPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogRmVobGVyIGJlaW0gTGVzZW4gZGVzIEtvbW1hbmRvLVN0cmVhbXMgdm9uIEdpdCIKKworIzogcmVtb3RlLWN1cmwuYzoxNDA2Cittc2dpZCAicmVtb3RlLWN1cmw6IGZldGNoIGF0dGVtcHRlZCB3aXRob3V0IGEgbG9jYWwgcmVwbyIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IFwiZmV0Y2hcIiBvaG5lIGxva2FsZXMgUmVwb3NpdG9yeSB2ZXJzdWNodCIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IFVuYmVrYW5udGVyIEJlZmVobCAnJXMnIHZvbiBHaXQiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg1Cittc2dpZCAiYXJncyIKK21zZ3N0ciAiQXJndW1lbnRlIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIkZpbHRlcm4gbmFjaCBPYmpla3RlbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJWZXJmYWxsc2RhdHVtIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICJLZWluIEVmZmVrdCAoUsO8Y2t3w6RydHNrb21wYXRpYmlsaXTDpHQpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJlcndlaXRlcnRlIEF1c2dhYmVuIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzExCittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAid2VuaWdlciBBdXNnYWJlbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJiZW51dHplIDxuPiBaaWZmZXJuIHp1ciBBbnplaWdlIHZvbiBTSEEtMXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICIiCisid2llIExlZXJ6ZWljaGVuIHVuZCAjS29tbWVudGFyZSB2b24gZGVyIEJlc2NocmVpYnVuZyBnZXRyZW5udCB3ZXJkZW4gc29sbGVuIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM3Cittc2dpZCAicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiCittc2dzdHIgIlBmYWRzcGV6aWZpa2F0aW9uIGF1cyBlaW5lciBEYXRlaSBsZXNlbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzOAorbXNnaWQgIiIKKyJ3aXRoIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBwYXRoc3BlYyBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorIk1pdCBkZXIgT3B0aW9uIC0tcGF0aHNwZWMtZnJvbS1maWxlIHNpbmQgUGZhZGUgZHVyY2ggTlVMLVplaWNoZW4gZ2V0cmVubnQiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgIlNjaMO8c3NlbCIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAic29ydGllcmUgbmFjaCBkaWVzZW0gRmVsZCIKKworIzogcmVyZXJlLmg6NDQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIiIKKyJJbmRleCwgd2VubiBtw7ZnbGljaCwgbWl0IHdpZWRlcnZlcndlbmRldGVyIEtvbmZsaWt0YXVmbMO2c3VuZyBha3R1YWxpc2llcmVuIgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGxvc2dlbMO2c3QgYmVpICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIGxvc2dlbMO2c3Qgdm9uICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkRhdGVpaW5oYWx0ZSB6dW0gQ29tbWl0IHZvcm1lcmtlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICJlaW5lIFNlcmllIHZvbiBQYXRjaGVzIHZvbiBlaW5lciBNYWlsYm94IGFud2VuZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIlplaWxlbiBkZXIgRGF0ZWkgbWl0IENvbW1pdC1JbmZvcm1hdGlvbmVuIHZlcnNlaGVuIHVuZCBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NTMKK21zZ2lkICJBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgiCittc2dzdHIgImVpbmVuIFBhdGNoIGF1ZiBEYXRlaWVuIHVuZC9vZGVyIGRlbiBJbmRleCBhbndlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJlaW4gR05VIEFyY2ggUmVwb3NpdG9yeSBpbiBHaXQgaW1wb3J0aWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU1Cittc2dpZCAiQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUiCittc2dzdHIgIkRhdGVpYXJjaGl2IHZvbiBhbmdlZ2ViZW5lbSBWZXJ6ZWljaG5pcyBlcnN0ZWxsZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU2Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiIgorIkJpbsOkcnN1Y2hlIHZlcndlbmRlbiwgdW0gZGVuIENvbW1pdCB6dSBmaW5kZW4sIGRlciBlaW5lbiBGZWhsZXIgdmVydXJzYWNodCAiCisiaGF0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorIkFuemVpZ2VuLCBkdXJjaCB3ZWxjaGVuIENvbW1pdCB1bmQgQXV0b3IgZGllIGpld2VpbGlnZW4gWmVpbGVuXG4iCisiZWluZXIgRGF0ZWkgenVsZXR6dCBnZcOkbmRlcnQgd3VyZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJCcmFuY2hlcyBhbnplaWdlbiwgZXJzdGVsbGVuIG9kZXIgZW50ZmVybmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICJPYmpla3RlIHVuZCBSZWZlcmVuemVuIMO8YmVyIGVpbiBBcmNoaXYgdmVydGVpbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgIiIKKyJJbmhhbHQgb2RlciBJbmZvcm1hdGlvbmVuIHp1IFR5cCB1bmQgR3LDtsOfZSBmw7xyIFJlcG9zaXRvcnktT2JqZWt0ZSAiCisiYmVyZWl0c3RlbGxlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgImdpdGF0dHJpYnV0ZXMgSW5mb3JtYXRpb25lbiBkYXJzdGVsbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgIkZlaGxlcnN1Y2hlIGluIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgRGF0ZWllbiIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJOYW1lIHVuZCBFLU1haWwtQWRyZXNzZSB2b24gS29udGFrdGVuIGFuemVpZ2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQnJhbmNoZXMgd2VjaHNlbG4gb2RlciBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aWVkZXJoZXJzdGVsbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NQorbXNnaWQgIkNvcHkgZmlsZXMgZnJvbSB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiRGF0ZWllbiB2b24gZGVtIEluZGV4IGlucyBBcmJlaXRzdmVyemVpY2huaXMga29waWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgIlNpY2hlcnN0ZWxsZW4sIGRhc3MgZWluIFJlZmVyZW56bmFtZSB3b2hsZ2Vmb3JtdCBpc3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICIiCisiQ29tbWl0cyBmaW5kZW4sIGRpZSBub2NoIGF1ZiBkZW0gVXBzdHJlYW0tQnJhbmNoIGFuZ2V3ZW5kZXQgd2VyZGVuIG3DvHNzZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGVpbmVzIGV4aXN0aWVyZW5kZW4gQ29tbWl0cyBhbndlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiZ3JhZmlzY2hlIEFsdGVybmF0aXZlIHp1IGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInVudmVyc2lvbmllcnRlIERhdGVpZW4gdm9tIEFyYmVpdHN2ZXJ6ZWljaG5pcyBlbnRmZXJuZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJlaW4gUmVwb3NpdG9yeSBpbiBlaW5lbSBuZXVlbiBWZXJ6ZWljaG5pcyBrbG9uZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcyCittc2dpZCAiRGlzcGxheSBkYXRhIGluIGNvbHVtbnMiCittc2dzdHIgIkRhdGVuIGluIFNwYWx0ZW4gYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjczCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGRhcyBSZXBvc2l0b3J5IGVpbnRyYWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIkdpdCBDb21taXQtR3JhcGgtRGF0ZWllbiBzY2hyZWliZW4gdW5kIMO8YmVycHLDvGZlbiIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiZWluIG5ldWVzIENvbW1pdC1PYmpla3QgZXJzdGVsbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgInJlcG9zaXRvcnl3ZWl0ZSBvZGVyIGdsb2JhbGUgT3B0aW9uZW4gbGVzZW4gb2RlciBzZXR6ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc3Cittc2dpZCAiQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24iCittc2dzdHIgIkFuemFobCB1bmQgU3BlaWNoZXJ2ZXJicmF1Y2ggdW5nZXBhY2t0ZXIgT2JqZWt0ZSB6w6RobGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICJadWdhbmdzZGF0ZW4gZGVzIEJlbnV0emVycyBlbXBmYW5nZW4gdW5kIHNwZWljaGVybiIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiIgorIkhpbGZzcHJvZ3JhbW0genVtIHRlbXBvcsOkcmVuIFNwZWljaGVybiB2b24gWnVnYW5nc2RhdGVuIGltIEhhdXB0c3BlaWNoZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIkhpbGZzcHJvZ3JhbW0genVtIFNwZWljaGVybiB2b24gWnVnYW5nc2RhdGVuIGF1ZiBkZXIgRmVzdHBsYXR0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICJlaW56ZWxuZW4gQ29tbWl0IHp1IGVpbmVtIGF1c2dlY2hlY2t0ZW4gQ1NWLVJlcG9zaXRvcnkgZXhwb3J0aWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIklocmUgRGF0ZW4gYXVzIGVpbmVtIGFuZGVyZW4gU0NNIMO8YmVybmVobWVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICJlaW4gQ1NWIFNlcnZlciBFbXVsYXRvciBmw7xyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJlaW4gd2lya2xpY2ggZWluZmFjaGVyIFNlcnZlciBmw7xyIEdpdCBSZXBvc2l0b3JpZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg1Cittc2dpZCAiR2l2ZSBhbiBvYmplY3QgYSBodW1hbiByZWFkYWJsZSBuYW1lIGJhc2VkIG9uIGFuIGF2YWlsYWJsZSByZWYiCittc2dzdHIgIiIKKyJlaW5lbSBPYmpla3QgZWluZW4gZsO8ciBNZW5zY2hlbiBsZXNiYXJlbiBOYW1lbiBiYXNpZXJlbmQgYXVmXG4iCisiZWluZXIgdmVyZsO8Z2JhcmVuIFJlZmVyZW56IGdlYmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKyLDhG5kZXJ1bmdlbiB6d2lzY2hlbiBDb21taXRzLCBDb21taXQgdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcywgZXRjLiBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIkRhdGVpZW4gdm9uIGRlbSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIGRlbSBJbmRleCB2ZXJnbGVpY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJlaW4gVmVyemVpY2huaXMgdm9uIGRlbSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIGRlbSBJbmRleCB2ZXJnbGVpY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorImRlbiBJbmhhbHQgdW5kIE1vZHVzIHZvbiBCbG9icyBhdXMgendlaSBWZXJ6ZWljaG5pc29iamVrdGVuIHZlcmdsZWljaGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiw4RuZGVydW5nZW4gbWl0dGVscyBkZW4gYWxsZ2VtZWluZW4gRGlmZi1Ub29scyBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAiRXhwb3J0IFRvb2wgZsO8ciBHaXQgRGF0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIkJhY2tlbmQgZsO8ciBzY2huZWxsZSBHaXQgRGF0ZW4gSW1wb3J0IFRvb2xzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIk9iamVrdGUgdW5kIFJlZmVyZW56ZW4gdm9uIGVpbmVtIGFuZGVyZW4gUmVwb3NpdG9yeSBoZXJ1bnRlcmxhZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJmZWhsZW5kZSBPYmpla3RlIHZvbiBlaW5lbSBhbmRlcmVuIFJlcG9zaXRvcnkgZW1wZmFuZ2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIHVtc2NocmVpYmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiQmVzY2hyZWlidW5nIGVpbmVzIE1lcmdlLUNvbW1pdHMgZXJ6ZXVnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk3Cittc2dpZCAiT3V0cHV0IGluZm9ybWF0aW9uIG9uIGVhY2ggcmVmIgorbXNnc3RyICJJbmZvcm1hdGlvbmVuIGbDvHIgamVkZSBSZWZlcmVueiBhdXNnZWJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6OTgKK21zZ2lkICJQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uIgorbXNnc3RyICJQYXRjaGVzIGbDvHIgRS1NYWlsLVZlcnNhbmQgdm9yYmVyZWl0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICIiCisic3RlbGx0IGRpZSBWZXJidW5kZW5oZWl0IHVuZCBHw7xsdGlna2VpdCBkZXIgT2JqZWt0ZSBpbiBkZXIgRGF0ZW5iYW5rIHNpY2hlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIm5pY2h0IGJlbsO2dGlndGUgRGF0ZWllbiBlbnRmZXJuZW4gdW5kIGRhcyBsb2thbGUgUmVwb3NpdG9yeSBvcHRpbWllcmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiIgorIkNvbW1pdC1JRCBlaW5lcyBBcmNoaXZzIGV4dHJhaGllcmVuLCB3ZWxjaGVzIG1pdCBnaXQtYXJjaGl2ZSBlcnN0ZWxsdCB3dXJkZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJaZWlsZW4gZGFyc3RlbGxlbiwgZGllIGVpbmVtIE11c3RlciBlbnRzcHJlY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiZWluZSBwb3J0YWJsZSBncmFmaXNjaGUgU2Nobml0dHN0ZWxsZSB6dSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNAorbXNnaWQgIkNvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlIgorbXNnc3RyICIiCisidm9uIGVpbmVyIERhdGVpIGRpZSBPYmpla3QtSUQgYmVyZWNobmVuIHVuZCBvcHRpb25hbCBlaW4gQmxvYiBlcnN0ZWxsZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIkhpbGZzaW5mb3JtYXRpb25lbiDDvGJlciBHaXQgYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgInNlcnZlcnNlaXRpZ2UgSW1wbGVtZW50aWVydW5nIHZvbiBHaXQgw7xiZXIgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAidm9uIGVpbmVtIFJlbW90ZS1HaXQtUmVwb3NpdG9yeSDDvGJlciBIVFRQIGhlcnVudGVybGFkZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiT2JqZWt0ZSDDvGJlciBIVFRQL0RBViB6dSBlaW5lbSBhbmRlcmVuIFJlcG9zaXRvcnkgw7xiZXJ0cmFnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlciIKK21zZ3N0ciAiIgorImVpbmUgU2FtbWx1bmcgdm9uIFBhdGNoZXMgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIHp1IGVpbmVtIElNQVAtT3JkbmVyICIKKyJzZW5kZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIlBhY2stSW5kZXgtRGF0ZWkgZsO8ciBlaW4gZXhpc3RpZXJlbmRlcyBnZXBhY2t0ZXMgQXJjaGl2IGVyemV1Z2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTEKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiIgorImVpbiBsZWVyZXMgR2l0LVJlcG9zaXRvcnkgZXJzdGVsbGVuIG9kZXIgZWluIGJlc3RlaGVuZGVzIG5ldWluaXRpYWxpc2llcmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTIKK21zZ2lkICJJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiIKK21zZ3N0ciAiSWhyIGFrdHVlbGxlcyBSZXBvc2l0b3J5IHNvZm9ydCBpbiBnaXR3ZWIgYmV0cmFjaHRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisiU3RydWt0dXJpZXJ0ZSBJbmZvcm1hdGlvbmVuIGluIENvbW1pdC1CZXNjaHJlaWJ1bmdlbiBoaW56dWbDvGdlbiBvZGVyIHBhcnNlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgImRlciBHaXQtUmVwb3NpdG9yeS1Ccm93c2VyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJDb21taXQtSGlzdG9yaWUgYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiSW5mb3JtYXRpb25lbiDDvGJlciBEYXRlaWVuIGluIGRlbSBJbmRleCB1bmQgaW0gQXJiZWl0c3ZlcnplaWNobmlzIGFuemVpZ2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVmZXJlbnplbiBpbiBlaW5lbSBSZW1vdGUtUmVwb3NpdG9yeSBhdWZsaXN0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIkluaGFsdGUgZWluZXMgVHJlZS1PYmpla3RlcyBhdWZsaXN0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOQorbXNnaWQgIkV4dHJhY3RzIHBhdGNoIGFuZCBhdXRob3JzaGlwIGZyb20gYSBzaW5nbGUgZS1tYWlsIG1lc3NhZ2UiCittc2dzdHIgIiIKKyJQYXRjaCB1bmQgVXJoZWJlcnNjaGFmdCB2b24gZWluZXIgZWluemVsbmVuIEUtTWFpbC1OYWNocmljaHQgZXh0cmFoaWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiZWluZmFjaGVzIFVOSVggbWJveCBTcGxpdHRlci1Qcm9ncmFtbSIKKworIzogY29tbWFuZC1saXN0Lmg6MTIxCittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgInp3ZWkgb2RlciBtZWhyIEVudHdpY2tsdW5nc3p3ZWlnZSB6dXNhbW1lbmbDvGhyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICJtw7ZnbGljaHN0IGJlc3RlbiBnZW1laW5zYW1lbiBWb3Jnw6RuZ2VyLUNvbW1pdCBmw7xyIGVpbmVuIE1lcmdlIGZpbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTIzCittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgImVpbmVuIDMtV2VnZS1EYXRlaS1NZXJnZSBhdXNmw7xocmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjQKK21zZ2lkICJSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nIgorbXNnc3RyICJlaW5lbiBNZXJnZSBmw7xyIHp1c2FtbWVuenVmw7xocmVuZGUgRGF0ZWllbiBhdXNmw7xocmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICJkYXMgU3RhbmRhcmQtSGlsZnNwcm9ncmFtbSBmw7xyIGRpZSBWZXJ3ZW5kdW5nIG1pdCBnaXQtbWVyZ2UtaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNgorbXNnaWQgIlJ1biBtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIHRvb2xzIHRvIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyICIiCisiQXVzZsO8aHJlbiB2b24gVG9vbHMgenVyIEF1ZmzDtnN1bmcgdm9uIE1lcmdlLUtvbmZsaWt0ZW4genVyIEJlaGVidW5nIGRpZXNlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiMy1XZWdlLU1lcmdlIGFuemVpZ2VuIG9obmUgZGVuIEluZGV4IHp1IHZlcsOkbmRlcm4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4ZXMgc2NocmVpYmVuIHVuZCDDvGJlcnByw7xmZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICJlaW4gVGFnLU9iamVrdCBlcnN0ZWxsZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICJUcmVlLU9iamVrdCBhdXMgbHMtdHJlZSBmb3JtYXR0aWVydGVtIFRleHQgZXJ6ZXVnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMQorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAiIgorImVpbmUgRGF0ZWksIGVpbiBWZXJ6ZWljaG5pcywgb2RlciBlaW5lIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyB2ZXJzY2hpZWJlbiAiCisib2RlciB1bWJlbmVubmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICJzeW1ib2xpc2NoZSBOYW1lbiBmw7xyIGRpZSBnZWdlYmVuZW4gQ29tbWl0cyBmaW5kZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAiT2JqZWt0LU5vdGl6ZW4gaGluenVmw7xnZW4gb2RlciDDvGJlcnByw7xmZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNAorbXNnaWQgIkltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJ2b24gUGVyZm9yY2UgUmVwb3NpdG9yaWVzIGltcG9ydGllcmVuIHVuZCBuYWNoIGRpZXNlIHNlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM1Cittc2dpZCAiQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiZWluIGdlcGFja3RlcyBBcmNoaXYgdm9uIE9iamVrdGVuIGVyc3RlbGxlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAicmVkdW5kYW50ZSBQYWtldGRhdGVpZW4gZmluZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzcKK21zZ2lkICJQYWNrIGhlYWRzIGFuZCB0YWdzIGZvciBlZmZpY2llbnQgcmVwb3NpdG9yeSBhY2Nlc3MiCittc2dzdHIgIkJyYW5jaGVzIHVuZCBUYWdzIGbDvHIgZWZmaXppZW50ZW4gWnVncmlmZiBhdWYgZGFzIFJlcG9zaXRvcnkgcGFja2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKyJSb3V0aW5lbiBhbHMgSGlsZmUgenVtIFBhcnNlbiB2b24gWnVncmlmZnNwYXJhbWV0ZXJuIHZvbiBSZW1vdGUtUmVwb3NpdG9yaWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzkKK21zZ2lkICJDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaCIKK21zZ3N0ciAiZWluZGV1dGlnZSBJRCBmw7xyIGVpbmVuIFBhdGNoIGJlcmVjaG5lbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJhbGxlIG5pY2h0IGVycmVpY2hiYXJlbiBPYmpla3RlIHZvbiBkZXIgT2JqZWt0ZGF0ZW5iYW5rIGVudGZlcm5lbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQxCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICIiCisienVzw6R0emxpY2hlIE9iamVrdGUsIGRpZSBzaWNoIGJlcmVpdHMgaW4gUGFrZXRkYXRlaWVuIGJlZmluZGVuLCBlbnRmZXJuZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiIgorIk9iamVrdGUgdm9uIGVpbmVtIGV4dGVybmVuIFJlcG9zaXRvcnkgYW5mb3JkZXJuIHVuZCBzaWUgbWl0IGVpbmVtIGFuZGVyZW4gIgorIlJlcG9zaXRvcnkgb2RlciBlaW5lbSBsb2thbGVuIEJyYW5jaCB6dXNhbW1lbmbDvGhyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiUmVtb3RlLVJlZmVyZW56ZW4gbWl0c2FtdCBkZW4gdmVyYnVuZGVuZW4gT2JqZWt0ZW4gYWt0dWFsaXNpZXJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ0Cittc2dpZCAiQXBwbGllcyBhIHF1aWx0IHBhdGNoc2V0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJQYXRjaGVzIGF1cyBxdWlsdCBhdWYgYWt0dWVsbGVuIEJyYW5jaCBhbndlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICJ6d2VpIENvbW1pdC1CZXJlaWNoZSB2ZXJnbGVpY2hlbiAoendlaSBWZXJzaW9uZW4gZWluZXMgQnJhbmNoZXMpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKK21zZ2lkICJSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4IgorbXNnc3RyICJWZXJ6ZWljaG5pc2luZm9ybWF0aW9uZW4gaW4gZGVuIEluZGV4IGVpbmxlc2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDcKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIldpZWRlcmhvbHRlcyBBbndlbmRlbiB2b24gQ29tbWl0cyBhdWYgYW5kZXJlbSBCYXNpcy1Db21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRW1wZmFuZ2VuIHdhcyBpbiBkYXMgUmVwb3NpdG9yeSDDvGJlcnRyYWdlbiB3dXJkZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiUmVmbG9nIEluZm9ybWF0aW9uZW4gdmVyd2FsdGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJNZW5nZSB2b24gaGludGVybGVndGVuIFJlcG9zaXRvcmllcyB2ZXJ3YWx0ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MQorbXNnaWQgIlBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkiCittc2dzdHIgInVuZ2VwYWNrdGUgT2JqZWt0ZSBpbiBlaW5lbSBSZXBvc2l0b3J5IHBhY2tlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgIlJlZmVyZW56ZW4gZsO8ciBlcnNldHplbmRlIE9iamVrdGUgZXJzdGVsbGVuLCBhdWZsaXN0ZW4sIGzDtnNjaGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAiZWluZSDDnGJlcnNpY2h0IMO8YmVyIGF1c3N0ZWhlbmRlIMOEbmRlcnVuZ2VuIGdlbmVyaWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgImF1ZmdlemVpY2huZXRlIEF1ZmzDtnN1bmcgdm9uIE1lcmdlLUtvbmZsaWt0ZW4gd2llZGVydmVyd2VuZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiYWt0dWVsbGVuIEhFQUQgenUgZWluZW0gc3BlemlmaXppZXJ0ZW4gWnVzdGFuZCBzZXR6ZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aWVkZXJoZXJzdGVsbGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTcKK21zZ2lkICJSZXZlcnQgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJlaW5pZ2UgYmVzdGVoZW5kZSBDb21taXRzIHLDvGNrZ8OkbmdpZyBtYWNoZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiQ29tbWl0LU9iamVrdGUgaW4gdW1nZWtlaHJ0ZXIgY2hyb25vbG9naXNjaGVyIE9yZG51bmcgYXVmbGlzdGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTkKK21zZ2lkICJQaWNrIG91dCBhbmQgbWFzc2FnZSBwYXJhbWV0ZXJzIgorbXNnc3RyICJQYXJhbWV0ZXIgaGVyYXVzcGlja2VuIHVuZCDDpG5kZXJuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIHZvbSBJbmRleCBsw7ZzY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgImVpbmUgU2FtbWx1bmcgdm9uIFBhdGNoZXMgYWxzIEUtTWFpbHMgdmVyc2VuZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJPYmpla3RlIMO8YmVyIGRhcyBHaXQgUHJvdG9rb2xsIHp1IGVpbmVtIGFuZGVyZW4gUmVwb3NpdG9yeSDDvGJlcnRyYWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTYzCittc2dpZCAiUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcyIKK21zZ3N0ciAiTG9naW4tU2hlbGwgYmVzY2hyw6Rua3QgZsO8ciBOdXItR2l0IFNTSC1adWdyaWZmIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiQXVzZ2FiZSB2b24gJ2dpdCBsb2cnIHp1c2FtbWVuZmFzc2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAidmVyc2NoaWVkZW5lIEFydGVuIHZvbiBPYmpla3RlbiBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAiQnJhbmNoZXMgdW5kIGlocmUgQ29tbWl0cyBhdXNnZWJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAiZ2VwYWNrdGVuIEFyY2hpdi1JbmRleCBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVmZXJlbnplbiBpbiBlaW5lbSBsb2thbGVzIFJlcG9zaXRvcnkgYXVmbGlzdGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIkdpdCdzIGkxOG4tS29uZmlndXJhdGlvbnNjb2RlIGbDvHIgU2hlbGwtU2tyaXB0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiYWxsZ2VtZWluZXIgR2l0IFNoZWxsLVNrcmlwdCBLb25maWd1cmF0aW9uc2NvZGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJJbml0aWFsaXNpZXJlIHVuZCB2ZXLDpG5kZXJlIGRlbiBwYXJ0aWVsbGVuIENoZWNrb3V0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzIKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGVpbmVtIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhdWZiZXdhaHJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIKK21zZ3N0ciAiRGF0ZWlpbmhhbHRlIGRlciBTdGFnaW5nLUFyZWEgaGluenVmw7xnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgImRlbiBadXN0YW5kIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICJuaWNodCBlcmZvcmRlcmxpY2hlbiBXaGl0ZXNwYWNlIGVudGZlcm5lbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAiU3VibW9kdWxlIGluaXRpYWxpc2llcmVuLCBha3R1YWxpc2llcmVuIG9kZXIgaW5zcGl6aWVyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAiIgorIkJpZGlyZWt0aW9uYWxlIE9wZXJhdGlvbmVuIHp3aXNjaGVuIGVpbmVtIFN1YnZlcnNpb24gUmVwb3NpdG9yeSB1bmQgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIHdlY2hzZWxuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJzeW1ib2xpc2NoZSBSZWZlcmVuemVuIGxlc2VuLCDDpG5kZXJuIHVuZCBsw7ZzY2hlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKyJlaW4gbWl0IEdQRyBzaWduaWVydGVzIFRhZy1PYmpla3QgZXJ6ZXVnZW4sIGF1Zmxpc3RlbiwgbMO2c2NoZW4gb2RlciAiCisidmVyaWZpemllcmVuLiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgxCittc2dpZCAiQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBibG9iJ3MgY29udGVudHMiCittc2dzdHIgImVpbmUgdGVtcG9yw6RyZSBEYXRlaSBtaXQgZGVuIEluaGFsdGVuIGVpbmVzIEJsb2JzIGVyc3RlbGxlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJPYmpla3RlIHZvbiBlaW5lbSBnZXBhY2t0ZW4gQXJjaGl2IGVudHBhY2tlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiRGF0ZWlpbmhhbHRlIGF1cyBkZW0gQXJiZWl0c3ZlcnplaWNobmlzIGltIEluZGV4IHJlZ2lzdHJpZXJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg0Cittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICIiCisiZGVuIE9iamVrdG5hbWVuLCBkZXIgaW4gZWluZXIgUmVmZXJlbnogZ2VzcGVpY2hlcnQgaXN0LCBzaWNoZXIgYWt0dWFsaXNpZXJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIkhpbGZzaW5mb3JtYXRpb25zZGF0ZWkgenVyIEhpbGZlIHZvbiBlaW5mYWNoZW4gU2VydmVybiBha3R1YWxpc2llcmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiQXJjaGl2IHp1csO8Y2sgenUgZ2l0LWFyY2hpdmUgc2VuZGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODcKK21zZ2lkICJTZW5kIG9iamVjdHMgcGFja2VkIGJhY2sgdG8gZ2l0LWZldGNoLXBhY2siCittc2dzdHIgIk9iamVrdGUgZ2VwYWNrdCB6dXLDvGNrIGFuIGdpdC1mZXRjaC1wYWNrIHNlbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJlaW5lIGxvZ2lzY2hlIFZhcmlhYmxlIHZvbiBHaXQgYW56ZWlnZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgImRpZSBHUEctU2lnbmF0dXIgdm9uIENvbW1pdHMgcHLDvGZlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICJnZXBhY2t0ZSBHaXQtQXJjaGl2ZGF0ZWllbiB2YWxpZGllcmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICJkaWUgR1BHLVNpZ25hdHVyIHZvbiBUYWdzIHByw7xmZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MgorbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgIkdpdCBXZWIgSW50ZXJmYWNlIChXZWItRnJvbnRlbmQgZsO8ciBHaXQtUmVwb3NpdG9yaWVzKSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICJMb2dzIG1pdCBkZW0gVW50ZXJzY2hpZWQsIGRlbiBqZWRlciBDb21taXQgZWluZsO8aHJ0LCBhbnplaWdlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk0Cittc2dpZCAiTWFuYWdlIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgIm1laHJlcmUgQXJiZWl0c3ZlcnplaWNobmlzc2UgdmVyd2FsdGVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJUcmVlLU9iamVrdCB2b20gYWt0dWVsbGVuIEluZGV4IGVyc3RlbGxlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiRGVmaW5pdGlvbiB2b24gQXR0cmlidXRlbiBwcm8gUGZhZCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJHaXQgS29tbWFuZG96ZWlsZW5zY2huaXR0c3RlbGxlIHVuZCBLb252ZW50aW9uZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgImVpbmUgR2l0IEFubGVpdHVuZyBmw7xyIEVudHdpY2tsZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OQorbXNnaWQgIkdpdCBmb3IgQ1ZTIHVzZXJzIgorbXNnc3RyICJHaXQgZsO8ciBDVlMgQmVudXR6ZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICJEaWZmLUF1c2dhYmUgb3B0aW1pZXJlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAiIgorImVpbiBrbGVpbmUsIG7DvHR6bGljaGUgTWVuZ2Ugdm9uIEJlZmVobGVuIGbDvHIgZGllIHTDpGdsaWNoZSBWZXJ3ZW5kdW5nIHZvbiBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICJlaW4gR2l0LUdsb3NzYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMworbXNnaWQgIkhvb2tzIHVzZWQgYnkgR2l0IgorbXNnc3RyICJ2b24gR2l0IHZlcndlbmRldGUgSG9va3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNAorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIlNwZXppZmlrYXRpb24gdm9uIGJld3Vzc3QgaWdub3JpZXJ0ZW4sIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiRGVmaW5pdGlvbiB2b24gU3VibW9kdWwtRWlnZW5zY2hhZnRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MjA2Cittc2dpZCAiR2l0IG5hbWVzcGFjZXMiCittc2dzdHIgIkdpdCBOYW1lbnNiZXJlaWNoZSIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJHaXQgUmVwb3NpdG9yeSBBdWZiYXUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOAorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiU3BlemlmaWthdGlvbiB2b24gQ29tbWl0cyB1bmQgQmVyZWljaGVuIGbDvHIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDkKK21zZ2lkICJNb3VudGluZyBvbmUgcmVwb3NpdG9yeSBpbnNpZGUgYW5vdGhlciIKK21zZ3N0ciAiRWluYmluZGVuIGVpbmVzIFJlcG9zaXRvcmllcyBpbiBlaW4gYW5kZXJlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAiZWluZSBlaW5mw7xocmVuZGUgQW5sZWl0dW5nIHp1IEdpdDogVGVpbCB6d2VpIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgImVpbmUgZWluZsO8aHJlbmRlIEFubGVpdHVuZyB6dSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMgorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiRWluZSDDnGJlcnNpY2h0IMO8YmVyIGVtcGZvaGxlbmUgQXJiZWl0c2FibMOkdWZlIG1pdCBHaXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiU2llIG3DvHNzZW4gbWl0IFwiZ2l0IGJpc2VjdCBzdGFydFwiIGJlZ2lubmVuLiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJXb2xsZW4gU2llLCBkYXNzIGljaCBlcyBmw7xyIFNpZSBtYWNoZSBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuei1FaW5nYWJlOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIlVuZ8O8bHRpZ2UgUmVmZXJlbnotRWluZ2FiZTogJGJpc2VjdGVkX2hlYWQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICJVbmfDvGx0aWdlIFJlZmVyZW56LUVpbmdhYmU6ICRyZXYiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBrYW5uIG51ciBlaW4gQXJndW1lbnQgZW50Z2VnZW5uZWhtZW4uIgorCisjOiBnaXQtYmlzZWN0LnNoOjIwOQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIktlaW5lIExvZy1EYXRlaSBnZWdlYmVuIgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAia2FubiAkZmlsZSBuaWNodCBmw7xyIGRhcyBBYnNwaWVsZW4gbGVzZW4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBXYXMgcmVkZW4gU2llIGRhPyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgIidiaXNlY3QgcnVuJyBmZWhsZ2VzY2hsYWdlbjoga2VpbiBCZWZlaGwgYW5nZWdlYmVuLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgImbDvGhyZSAkY29tbWFuZCBhdXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyInYmlzZWN0IHJ1bicgZmVobGdlc2NobGFnZW46XG4iCisiRXhpdC1Db2RlICRyZXMgdm9uICckY29tbWFuZCcgaXN0IDwgMCBvZGVyID49IDEyOCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzkKK21zZ2lkICJiaXNlY3QgcnVuIGNhbm5vdCBjb250aW51ZSBhbnkgbW9yZSIKK21zZ3N0ciAiJ2Jpc2VjdCBydW4nIGthbm4gbmljaHQgbWVociBmb3J0Z2VzZXR6dCB3ZXJkZW4iCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjg1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorIidiaXNlY3QgcnVuJyBmZWhsZ2VzY2hsYWdlbjpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgd3VyZGUgbWl0IEZlaGxlcndlcnQgJHJlcyBiZWVuZGV0IgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiJ2Jpc2VjdCBydW4nIGVyZm9sZ3JlaWNoIGF1c2dlZsO8aHJ0IgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAia2VpbmUgYmluw6RyZSBTdWNoZSBpbSBHYW5nZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAiIgorIkZlaGxlcjogSWhyZSBsb2thbGVuIMOEbmRlcnVuZ2VuIGluIGRlbiBmb2xnZW5kZW4gRGF0ZWllbiB3w7xyZGVuIGR1cmNoIGRlbiAiCisiTWVyZ2VcbiIKKyLDvGJlcnNjaHJpZWJlbiB3ZXJkZW4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkF1dG9tYXRpc2NoZXIgTWVyZ2UgaGF0IG5pY2h0IGZ1bmt0aW9uaWVydC4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYyCittc2dpZCAiU2hvdWxkIG5vdCBiZSBkb2luZyBhbiBvY3RvcHVzLiIKK21zZ3N0ciAiU29sbHRlIGtlaW5lbiBPY3RvcHVzLU1lcmdlIGF1c2bDvGhyZW4uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiS29ubnRlIGtlaW5lbiBnZW1laW5zYW1lbiBDb21taXQgbWl0ICRwcmV0dHlfbmFtZSBmaW5kZW4uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJCZXJlaXRzIGFrdHVlbGwgbWl0ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICJTcHVsZSB2b3IgenU6ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIlZlcnN1Y2hlIGVpbmZhY2hlbiBNZXJnZSBtaXQgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDoxMDIKK21zZ2lkICJTaW1wbGUgbWVyZ2UgZGlkIG5vdCB3b3JrLCB0cnlpbmcgYXV0b21hdGljIG1lcmdlLiIKK21zZ3N0ciAiRWluZmFjaGVyIE1lcmdlIGhhdCBuaWNodCBmdW5rdGlvbmllcnQsIHZlcnN1Y2hlIGF1dG9tYXRpc2NoZW4gTWVyZ2UuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJLYW5uIHRlbXBvcsOkcmVuIEluZGV4IG5pY2h0IGzDtnNjaGVuIChrYW5uIG5pY2h0IHBhc3NpZXJlbikiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIkthbm4gJHJlZl9zdGFzaCBuaWNodCBtaXQgJHdfY29tbWl0IGFrdHVhbGlzaWVyZW4uIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgIkZlaGxlcjogdW5iZWthbm50ZSBPcHRpb24gZsO8ciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAiU3BlaWNoZXJ0ZSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIEluZGV4LVN0YXR1cyAkc3Rhc2hfbXNnIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjUzNgorIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgInVuYmVrYW5udGUgT3B0aW9uOiAkb3B0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiWnUgdmllbGUgQ29tbWl0cyBhbmdlZ2ViZW46ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBpc3Qga2VpbmUgZ8O8bHRpZ2UgUmVmZXJlbnoiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3MnIGlzdCBrZWluIFwic3Rhc2hcIi1hcnRpZ2VyIENvbW1pdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIGlzdCBrZWluZSBcInN0YXNoXCItUmVmZXJlbnoiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIktvbm50ZSBkZW4gSW5kZXggbmljaHQgYWt0dWFsaXNpZXJlbi4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjIyCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJLYW5uIFwic3Rhc2hcIiBuaWNodCBhbndlbmRlbiwgc29sYW5nZSBlaW4gTWVyZ2UgaW0gR2FuZ2UgaXN0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIktvbmZsaWt0ZSBpbSBJbmRleC4gVmVyc3VjaGVuIFNpZSBlcyBvaG5lIC0taW5kZXguIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMgorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIktvbm50ZSBJbmRleC1WZXJ6ZWljaG5pcyBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIiIKKyJLb25udGUgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiB2b20gU3Rhc2gtRWludHJhZyBuaWNodCB3aWVkZXJoZXJzdGVsbGVuLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiS2FubiBnZcOkbmRlcnRlIERhdGVpZW4gbmljaHQgYXVzIGRlbSBJbmRleCBlbnRmZXJuZW4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICIke1JFVn0gKCRzKSBnZWzDtnNjaHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IEtvbm50ZSBcInN0YXNoXCItRWludHJhZyBuaWNodCBsw7ZzY2hlbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihadXIgV2llZGVyaGVyc3RlbGx1bmcgZ2ViZW4gU2llIFwiZ2l0IHN0YXNoIGFwcGx5XCIgZWluKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDIKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIlJlbGF0aXZlIFBmYWRlIGvDtm5uZW4gbnVyIHZvbiBkZXIgb2JlcnN0ZW4gRWJlbmUgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyAiCisiYmVudXR6dCB3ZXJkZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMgorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAicmVwbyBVUkw6ICckcmVwbycgbXVzcyBhYnNvbHV0IHNlaW4gb2RlciBtaXQgLi98Li4vIGJlZ2lubmVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcgaXN0IGJlcmVpdHMgenVtIENvbW1pdCB2b3JnZW1lcmt0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyBpc3QgYmVyZWl0cyB6dW0gQ29tbWl0IHZvcmdlbWVya3QgdW5kIGlzdCBrZWluIFN1Ym1vZHVsIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJHNtX3BhdGgnIGhhdCBrZWluZW4gQ29tbWl0IGF1c2dlY2hlY2t0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyJEZXIgZm9sZ2VuZGUgUGZhZCB3aXJkIGR1cmNoIGVpbmUgSWhyZXIgXCIuZ2l0aWdub3JlXCIgRGF0ZWllbiBpZ25vcmllcnQ6XG4iCisiJHNtX3BhdGhcbiIKKyJCZW51dHplbiBTaWUgLWYgd2VubiBTaWUgZGllc2VuIHdpcmtsaWNoIGhpbnp1ZsO8Z2VuIG3DtmNodGVuLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICJGw7xnZSBleGlzdGllcmVuZGVzIFJlcG9zaXRvcnkgaW4gJyRzbV9wYXRoJyBkZW0gSW5kZXggaGluenUuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcgZXhpc3RpZXJ0IGJlcmVpdHMgdW5kIGlzdCBrZWluIGfDvGx0aWdlcyBHaXQtUmVwb3NpdG9yeSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorIkVpbiBHaXQtVmVyemVpY2huaXMgZsO8ciAnJHNtX25hbWUnIHd1cmRlIGxva2FsIGdlZnVuZGVuIG1pdCBkZW4gUmVtb3RlLSIKKyJSZXBvc2l0b3JpZXM6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIldlbm4gU2llIGRhcyBsb2thbGUgR2l0LVZlcnplaWNobmlzIHdpZWRlcnZlcndlbmRlbiB3b2xsZW4sIGFuc3RhdHQgZXJuZXV0ICIKKyJ2b25cbiIKKyIgICRyZWFscmVwb1xuIgorInp1IGtsb25lbiwgYmVudXR6ZW4gU2llIGRpZSBPcHRpb24gJy0tZm9yY2UnLiBXZW5uIGRhcyBsb2thbGUgR2l0LSIKKyJWZXJ6ZWljaG5pc1xuIgorIm5pY2h0IGRhcyBrb3JyZWt0ZSBSZXBvc2l0b3J5IGlzdCBvZGVyIFNpZSB1bnNpY2hlciBzaW5kLCB3YXMgZGFzIGJlZGV1dGV0LFxuIgorInfDpGhsZW4gU2llIGVpbmVuIGFuZGVyZW4gTmFtZW4gbWl0IGRlciBPcHRpb24gJy0tbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiUmVha3RpdmllcmUgbG9rYWxlcyBHaXQtVmVyemVpY2huaXMgZsO8ciBTdWJtb2R1bCAnJHNtX25hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiS2FubiBTdWJtb2R1bCAnJHNtX3BhdGgnIG5pY2h0IGF1c2NoZWNrZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJIaW56dWbDvGdlbiB2b24gU3VibW9kdWwgJyRzbV9wYXRoJyBmZWhsZ2VzY2hsYWdlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRWludHJhZ2VuIHZvbiBTdWJtb2R1bCAnJHNtX3BhdGgnIGluIGRpZSBLb25maWd1cmF0aW9uLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1ODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIktvbm50ZSBha3R1ZWxsZW4gQ29tbWl0IGluIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCcgbmljaHQgZmluZGVuLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJLb25udGUgXCJmZXRjaFwiIGluIFN1Ym1vZHVsLVBmYWQgJyRzbV9wYXRoJyBuaWNodCBhdXNmw7xocmVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisiS29ubnRlIGFrdHVlbGxlbiBDb21taXQgdm9uICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSBpbiBTdWJtb2R1bC1QZmFkXG4iCisiJyRzbV9wYXRoJyBuaWNodCBmaW5kZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxMworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoICIKKyIkc2hhMToiCittc2dzdHIgIiIKKyJLb25udGUgXCJmZXRjaFwiIGluIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCcgbmljaHQgYXVzZsO8aHJlbi4gVmVyc3VjaGUgIgorIiRzaGExIGRpcmVrdCBhbnp1Zm9yZGVybjoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiAkc2hhMS4gIgorIkRpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisiXCJmZXRjaFwiIGluIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCcgYXVzZ2Vmw7xocnQsIGFiZXIgJHNoYTEgbmljaHRcbiIKKyJlbnRoYWx0ZW4uIERpcmVrdGVzIEFuZm9yZGVybiBkaWVzZXMgQ29tbWl0cyBpc3QgZmVobGdlc2NobGFnZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIktvbm50ZSAnJHNoYTEnIGluIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCcgbmljaHQgYXVzY2hlY2tlbi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiU3VibW9kdWwtUGZhZDogJyRkaXNwbGF5cGF0aCc6ICckc2hhMScgYXVzZ2VjaGVja3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIlJlYmFzZSBhdWYgJyRzaGExJyBpbiBTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnIG5pY2h0IG3DtmdsaWNoIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICJTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnOiBSZWJhc2UgYXVmICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTWVyZ2Ugdm9uICckc2hhMScgaW4gU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJyBmZWhsZ2VzY2hsYWdlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAiU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJzogenVzYW1tZW5nZWbDvGhydCBpbiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiQXVzZsO8aHJ1bmcgdm9uICckY29tbWFuZCAkc2hhMScgaW4gU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJyAiCisiZmVobGdlc2NobGFnZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAiU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkZlaGxlciBiZWkgUmVrdXJzaW9uIGluIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODg2Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtLWNhY2hlZCB1bmQgLS1maWxlcyBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAidW5lcndhcnRldGVyIE1vZHVzICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIFdhcm51bmc6ICRkaXNwbGF5X25hbWUgYmVpbmhhbHRldCBuaWNodCBDb21taXQgJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2MQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIFdhcm51bmc6ICRkaXNwbGF5X25hbWUgYmVpbmhhbHRldCBuaWNodCBDb21taXQgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICBXYXJudW5nOiAkZGlzcGxheV9uYW1lIGJlaW5oYWx0ZXQgbmljaHQgZGllIENvbW1pdHMgJHNoYTFfc3JjIHVuZCAkc2hhMV9kc3QiCisKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiU2llaGUgZ2l0LSR7Y21kfSgxKSBmw7xyIHdlaXRlcmUgRGV0YWlscy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDkKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIkF1dG9tYXRpc2NoZW4gU3Rhc2ggYW5nZXdlbmRldC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAiS2FubiAkc3Rhc2hfc2hhMSBuaWNodCBzcGVpY2hlcm4uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICJGw7xocmUgUmViYXNlIGF1cyAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkJlZmVobGU6XG4iCisicCwgcGljayA8Q29tbWl0PiA9IENvbW1pdCB2ZXJ3ZW5kZW5cbiIKKyJyLCByZXdvcmQgPENvbW1pdD4gPSBDb21taXQgdmVyd2VuZGVuLCBhYmVyIENvbW1pdC1CZXNjaHJlaWJ1bmcgYmVhcmJlaXRlblxuIgorImUsIGVkaXQgPENvbW1pdD4gPSBDb21taXQgdmVyd2VuZGVuLCBhYmVyIHp1bSBOYWNoYmVzc2VybiBhbmhhbHRlblxuIgorInMsIHNxdWFzaCA8Q29tbWl0PiA9IENvbW1pdCB2ZXJ3ZW5kZW4sIGFiZXIgbWl0IHZvcmhlcmlnZW0gQ29tbWl0IHZlcmVpbmVuXG4iCisiZiwgZml4dXAgPENvbW1pdD4gPSB3aWUgXCJzcXVhc2hcIiwgYWJlciBkaWVzZSBDb21taXQtQmVzY2hyZWlidW5nICIKKyJ2ZXJ3ZXJmZW5cbiIKKyJ4LCBleGVjIDxDb21taXQ+ID0gQmVmZWhsIChSZXN0IGRlciBaZWlsZSkgbWl0dGVscyBTaGVsbCBhdXNmw7xocmVuXG4iCisiZCwgZHJvcCA8Q29tbWl0PiA9IENvbW1pdCBlbnRmZXJuZW5cbiIKKyJsLCBsYWJlbCA8TGFiZWw+ID0gYWt0dWVsbGVuIEhFQUQgbWl0IExhYmVsIHZlcnNlaGVuXG4iCisidCwgcmVzZXQgPExhYmVsPiA9IEhFQUQgenUgZWluZW0gTGFiZWwgdW1zZXR6ZW5cbiIKKyJtLCBtZXJnZSBbLUMgPENvbW1pdD4gfCAtYyA8Q29tbWl0Pl0gPExhYmVsPiBbIyA8ZWluZVplaWxlPl1cbiIKKyIuICAgICAgIE1lcmdlLUNvbW1pdCBtaXQgZGVyIG9yaWdpbmFsZW4gTWVyZ2UtQ29tbWl0LUJlc2NocmVpYnVuZyBlcnN0ZWxsZW5cbiIKKyIuICAgICAgIChvZGVyIGRpZSBlaW5lIFplaWxlLCB3ZW5uIGtlaW5lIG9yaWdpbmFsZSBNZXJnZS1Db21taXQtIgorIkJlc2NocmVpYnVuZ1xuIgorIi4gICAgICAgc3BlemlmaXppZXJ0IGlzdCkuIEJlbnV0emVuIFNpZSAtYyA8Q29tbWl0PiB6dW0gQmVhcmJlaXRlbiBkZXJcbiIKKyIuICAgICAgIENvbW1pdC1CZXNjaHJlaWJ1bmcuXG4iCisiXG4iCisiRGllc2UgWmVpbGVuIGvDtm5uZW4gdW1zb3J0aWVydCB3ZXJkZW47IFNpZSB3ZXJkZW4gdm9uIG9iZW4gbmFjaCB1bnRlblxuIgorImF1c2dlZsO8aHJ0LlxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJTaWUga8O2bm5lbiBkZW4gQ29tbWl0IG51biBuYWNoYmVzc2VybiBtaXQ6XG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJTb2JhbGQgU2llIG1pdCBJaHJlbiDDhG5kZXJ1bmdlbiB6dWZyaWVkZW4gc2luZCwgZsO8aHJlbiBTaWUgYXVzOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTE6IGtlaW4gQ29tbWl0IGRlciBnZXBpY2t0IHdlcmRlbiBrYW5uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgQ29tbWl0LU5hbWU6ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzY0Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAiS2FubiBlcnNldHplbmRlbiBTSEEtMSBkZXMgYWt0dWVsbGVuIENvbW1pdHMgbmljaHQgc2NocmVpYmVuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIlNwdWxlIHZvciB6dSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiS2FubiBuaWNodCB6dSAkc2hhMSB2b3JzcHVsZW4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gJGZpcnN0X3BhcmVudCIKK21zZ3N0ciAiS2FubiBIRUFEIG5pY2h0IGF1ZiAkZmlyc3RfcGFyZW50IHNldHplbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gc3F1YXNoIGEgbWVyZ2U6ICRzaGExIgorbXNnc3RyICJcInNxdWFzaFwiIGVpbmVzIE1lcmdlcyAoJHNoYTEpIHp1csO8Y2tnZXdpZXNlbi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIkZlaGxlciBiZWltIFdpZWRlcmhvbGVuIGRlcyBNZXJnZXMgdm9uICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAiS29ubnRlICRzaGExIG5pY2h0IHBpY2tlbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICJEYXMgaXN0IENvbW1pdC1CZXNjaHJlaWJ1bmcgIyR7bn06IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiQ29tbWl0LUJlc2NocmVpYnVuZyAjJHtufSB3aXJkIGF1c2dlbGFzc2VuOiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICJEYXMgaXN0IGVpbmUgS29tYmluYXRpb24gYXVzICRjb3VudCBDb21taXQuIgorbXNnc3RyWzFdICJEYXMgaXN0IGVpbmUgS29tYmluYXRpb24gYXVzICRjb3VudCBDb21taXRzLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIkthbm4gJGZpeHVwX21zZyBuaWNodCBzY2hyZWliZW4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiRGFzIGlzdCBlaW5lIEtvbWJpbmF0aW9uIGF1cyAyIENvbW1pdHMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTM2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NzkKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAiS29ubnRlICRzaGExLi4uICgkcmVzdCkgbmljaHQgYW53ZW5kZW4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0XG4iCisiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2tcbiIKKyJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgIgorImJlZm9yZVxuIgorInlvdSBhcmUgYWJsZSB0byByZXdvcmQgdGhlIGNvbW1pdC4iCittc2dzdHIgIiIKKyJLb25udGUgQ29tbWl0IG5pY2h0IG5hY2hiZXNzZXJuLCBuYWNoZGVtIGRpZXNlciB2ZXJ3ZW5kZXQgd3VyZGU6ICRzaGExLi4uICIKKyIkcmVzdFxuIgorIkRhcyBwYXNzaWVydGUgc2VociB3YWhyc2NoZWlubGljaCB3ZWdlbiBlaW5lciBsZWVyZW4gQ29tbWl0LUJlc2NocmVpYnVuZywgIgorIm9kZXJcbiIKKyJ3ZWlsIGRlciBwcmUtY29tbWl0IEhvb2sgZmVobHNjaGx1Zy4gRmFsbHMgZGVyIHByZS1jb21taXQgSG9vayBmZWhsc2NobHVnLFxuIgorInNvbGx0ZW4gU2llIGRhcyBQcm9ibGVtIGJlaGViZW4sIGJldm9yIFNpZSBkaWUgQ29tbWl0LUJlc2NocmVpYnVuZyDDpG5kZXJuICIKKyJrw7ZubmVuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIkFuZ2VoYWx0ZW4gYmVpICRzaGExX2FiYnJldi4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJLYW5uIG5pY2h0ICckc3F1YXNoX3N0eWxlJyBvaG5lIHZvcmhlcmlnZW4gQ29tbWl0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICJGw7xocmUgYXVzOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgIkF1c2bDvGhydW5nIGZlaGxnZXNjaGxhZ2VuOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJEZXIgSW5kZXggdW5kL29kZXIgZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3dXJkZSBnZcOkbmRlcnQuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Njk1Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIlNpZSBrw7ZubmVuIGRhcyBQcm9ibGVtIGJlaGViZW4sIHVuZCBkYW5uXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKyJhdXNmw7xocmVuLiIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJBdXNmw7xocnVuZyBlcmZvbGdyZWljaDogJHJlc3RcbiIKKyJBYmVyIMOEbmRlcnVuZ2VuIGluIEluZGV4IG9kZXIgQXJiZWl0c3ZlcnplaWNobmlzIHZlcmJsaWViZW4uXG4iCisiQ29tbWl0dGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuIG9kZXIgYmVudXR6ZW4gU2llIFwic3Rhc2hcIi5cbiIKKyJGw7xocmVuIFNpZSBkYW5uIGF1czpcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKK21zZ3N0ciAiVW5iZWthbm50ZXIgQmVmZWhsOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcyMAorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJCaXR0ZSBiZWhlYmVuIFNpZSBkYXMsIGluZGVtIFNpZSAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYXVzZsO8aHJlbi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICJFcmZvbGdyZWljaCBSZWJhc2UgYXVzZ2Vmw7xocnQgdW5kICRoZWFkX25hbWUgYWt0dWFsaXNpZXJ0LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiS29ubnRlIENIRVJSWV9QSUNLX0hFQUQgbmljaHQgbMO2c2NoZW4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJFcyBiZWZpbmRlbiBzaWNoIHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW4gaW4gSWhyZW0gIgorIkFyYmVpdHN2ZXJ6ZWljaG5pcy5cbiIKKyJXZW5uIGRpZXNlIMOEbmRlcnVuZ2VuIGluIGRlbiB2b3JoZXJpZ2VuIENvbW1pdCBhdWZnZW5vbW1lbiB3ZXJkZW4gc29sbGVuLFxuIgorImbDvGhyZW4gU2llIGF1czpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIldlbm4gZGFyYXVzIGVpbiBuZXVlciBDb21taXQgZXJ6ZXVndCB3ZXJkZW4gc29sbCwgZsO8aHJlbiBTaWUgYXVzOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkltIEFuc2NobHVzcyBmw7xocmVuIFNpZSB6dW0gRm9ydGZhaHJlbiBhdXM6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzNAorbXNnaWQgIkVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBhdXRob3IgaWRlbnRpdHkgdG8gYW1lbmQgY29tbWl0IgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gVmVyc3VjaCBkaWUgSWRlbnRpdMOkdCBkZXMgQXV0aG9ycyB6dW0gVmVyYmVzc2VybiBkZXMgQ29tbWl0cyB6dVxuIgorImZpbmRlbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiU2llIGhhYmVuIG5pY2h0IGNvbW1pdHRldGUgw4RuZGVydW5nZW4gaW4gSWhyZW0gQXJiZWl0c3ZlcnplaWNobmlzLiBCaXR0ZVxuIgorImNvbW1pdHRlbiBTaWUgZGllc2UgenVlcnN0IHVuZCBmw7xocmVuIFNpZSBkYW5uICdnaXQgcmViYXNlIC0tY29udGludWUnICIKKyJlcm5ldXRcbiIKKyJhdXMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDgKK21zZ2lkICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiS29ubnRlIMOEbmRlcnVuZ2VuIGF1cyBkZXIgU3RhZ2luZy1BcmVhIG5pY2h0IGNvbW1pdHRlbi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAiS29ubnRlIEVkaXRvciBuaWNodCBhdXNmw7xocmVuLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIktvbm50ZSAkc3dpdGNoX3RvIG5pY2h0IGF1c2NoZWNrZW4uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA3Cittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIktlaW4gSEVBRD8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIktvbm50ZSB0ZW1wb3LDpHJlcyBWZXJ6ZWljaG5pcyAkc3RhdGVfZGlyIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAiS29ubnRlIG5pY2h0IGFscyBpbnRlcmFrdGl2ZW4gUmViYXNlIG1hcmtpZXJlbi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kcykiCittc2dzdHJbMF0gIlJlYmFzZSB2b24gJHNob3J0cmV2aXNpb25zIGF1ZiAkc2hvcnRvbnRvICgkdG9kb2NvdW50IEtvbW1hbmRvKSIKK21zZ3N0clsxXSAiUmViYXNlIHZvbiAkc2hvcnRyZXZpc2lvbnMgYXVmICRzaG9ydG9udG8gKCR0b2RvY291bnQgS29tbWFuZG9zKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICJLb25udGUgbmV1IGdlc2NocmllYmVuZSBDb21taXRzIG5pY2h0IGluaXRpYWxpc2llcmVuLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgIlZlcndlbmR1bmc6ICRkYXNobGVzcyAkVVNBR0UiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKyJLb25udGUgbmljaHQgaW4gVmVyemVpY2huaXMgJGNkdXAgd2VjaHNlbG4sIGRlciBvYmVyc3RlbiBFYmVuZSBkZXNcbiIKKyJBcmJlaXRzdmVyemVpY2huaXNzZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjAwIGdpdC1zaC1zZXR1cC5zaDoyMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICIiCisiZmF0YWw6ICRwcm9ncmFtX25hbWUga2FubiBvaG5lIGVpbiBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIlJlYmFzZSBuaWNodCBtw7ZnbGljaDogU2llIGhhYmVuIMOEbmRlcnVuZ2VuLCBkaWUgbmljaHQgenVtIENvbW1pdCB2b3JnZW1lcmt0ICIKKyJzaW5kLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIkthbm4gQnJhbmNoZXMgbmljaHQgbmV1IHNjaHJlaWJlbjogU2llIGhhYmVuIMOEbmRlcnVuZ2VuLCBkaWUgbmljaHQgenVtICIKKyJDb21taXRcbiIKKyJ2b3JnZW1lcmt0IHNpbmQuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2FubiBcInB1bGxcIiBtaXQgXCJyZWJhc2VcIiBuaWNodCBhdXNmw7xocmVuOiBTaWUgaGFiZW4gw4RuZGVydW5nZW4sIGRpZSAiCisibmljaHQgenVtIENvbW1pdCB2b3JnZW1lcmt0IHNpbmQuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLYW5uICRhY3Rpb24gbmljaHQgYXVzZsO8aHJlbjogU2llIGhhYmVuIMOEbmRlcnVuZ2VuLCBkaWUgbmljaHQgenVtIENvbW1pdFxuIgorInZvcmdlbWVya3Qgc2luZC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDMKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiUmViYXNlIG5pY2h0IG3DtmdsaWNoOiBEaWUgU3RhZ2luZy1BcmVhIGJlaW5oYWx0ZXQgbmljaHQgY29tbWl0dGV0ZSAiCisiw4RuZGVydW5nZW4uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLYW5uIFwicHVsbFwiIG1pdCBcInJlYmFzZVwiIG5pY2h0IGF1c2bDvGhyZW46IERpZSBTdGFnaW5nLUFyZWEgYmVpbmhhbHRldCAiCisibmljaHQgY29tbWl0dGV0ZSDDhG5kZXJ1bmdlbi4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2FubiAkYWN0aW9uIG5pY2h0IGF1c2bDvGhyZW46IERpZSBTdGFnaW5nLUFyZWEgYmVpbmhhbHRldCBuaWNodCBjb21taXR0ZXRlXG4iCisiw4RuZGVydW5nZW4uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjUzCittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJadXPDpHR6bGljaCBiZWluaGFsdGV0IGRpZSBTdGFnaW5nLUFyZWEgbmljaHQgY29tbWl0dGV0ZSDDhG5kZXJ1bmdlbi4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzMKK21zZ2lkICJZb3UgbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICIiCisiU2llIG3DvHNzZW4gZGVuIEJlZmVobCB2b24gZGVyIG9iZXJzdGVuIEViZW5lIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgIgorImF1c2bDvGhyZW4uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIktvbm50ZSBhYnNvbHV0ZW4gUGZhZCBkZXMgR2l0LVZlcnplaWNobmlzc2VzIG5pY2h0IGJlc3RpbW1lbi4iCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMjhzICUyNXMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIFBmYWQgYW5nZWZhc3N0XG4iCittc2dzdHJbMV0gIiVkIFBmYWRlIGFuZ2VmYXNzdFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTMKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnc3RyICIiCisiV2VubiBkZXIgUGF0Y2ggc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIHdpcmQgZGVyIGJlYXJiZWl0ZXRlIFBhdGNoLSIKKyJCbG9ja1xuIgorImRpcmVrdCBhbHMgenVtIEhpbnp1ZsO8Z2VuIHp1ciBTdGFnaW5nLUFyZWEgbWFya2llcnQuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTYKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YXNoaW5nLiIKK21zZ3N0ciAiIgorIldlbm4gZGVyIFBhdGNoIHNhdWJlciBhbmdld2VuZGV0IHdlcmRlbiBrYW5uLCB3aXJkIGRlciBiZWFyYmVpdGV0ZSBQYXRjaC0iCisiQmxvY2tcbiIKKyJkaXJla3QgYWxzIHp1bSBIaW56dWbDvGdlbiB6dW0gU3Rhc2ggbWFya2llcnQuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJXZW5uIGRlciBQYXRjaCBzYXViZXIgYW5nZXdlbmRldCB3ZXJkZW4ga2Fubiwgd2lyZCBkZXIgYmVhcmJlaXRldGUgUGF0Y2gtIgorIkJsb2NrXG4iCisiZGlyZWt0IGFscyB6dW0gRW50ZmVybmVuIGF1cyBkZXIgU3RhZ2luZy1BcmVhIG1hcmtpZXJ0LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3MQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc3Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBhcHBseWluZy4iCittc2dzdHIgIiIKKyJXZW5uIGRlciBQYXRjaCBzYXViZXIgYW5nZXdlbmRldCB3ZXJkZW4ga2Fubiwgd2lyZCBkZXIgYmVhcmJlaXRldGUgUGF0Y2gtIgorIkJsb2NrXG4iCisiZGlyZWt0IGFscyB6dW0gQW53ZW5kZW4gbWFya2llcnQuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzQKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisiV2VubiBkZXIgUGF0Y2ggc2F1YmVyIGFuZ2V3ZW5kZXQgd2VyZGVuIGthbm4sIHdpcmQgZGVyIGJlYXJiZWl0ZXRlIFBhdGNoLSIKKyJCbG9ja1xuIgorImRpcmVrdCBhbHMgenVtIFZlcndlcmZlbiBtYXJraWVydC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiBFZGl0aWVyLURhdGVpIGVpbmVzIFBhdGNoLUJsb2NrcyB6dW0gU2NocmVpYmVuOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiVW0gJyVzJyBaZWlsZW4genUgZW50ZmVybmVuLCBtYWNoZW4gU2llIGF1cyBkaWVzZW4gJyAnIFplaWxlbiAoS29udGV4dCkuXG4iCisiVW0gJyVzJyBaZWlsZW4genUgZW50ZmVybmVuLCBsw7ZzY2hlbiBTaWUgZGllc2UuXG4iCisiWmVpbGVuLCBkaWUgbWl0ICVzIGJlZ2lubmVuLCB3ZXJkZW4gZW50ZmVybnQuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIMOWZmZuZW4gdm9uIEVkaXRpZXItRGF0ZWkgZWluZXMgUGF0Y2gtQmxvY2tzIHp1bSBMZXNlbjogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI0OAorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgenVtIENvbW1pdCB2b3JtZXJrZW5cbiIKKyJuIC0gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IHp1bSBDb21taXQgdm9ybWVya2VuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiBvZGVyIGFsbGUgdmVyYmxlaWJlbmRlbiBQYXRjaC1CbMO2Y2tlIG5pY2h0IHp1bSBDb21taXQgIgorInZvcm1lcmtlblxuIgorImEgLSBkaWVzZW4gdW5kIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgenVtIENvbW1pdCB2b3JtZXJrZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRpZXNlciBEYXRlaSBuaWNodCB6dW0gQ29tbWl0ICIKKyJ2b3JtZXJrZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1NAorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgc3Rhc2hlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgc3Rhc2hlblxuIgorInEgLSBCZWVuZGVuOyBkaWVzZW4gb2RlciBhbGxlIHZlcmJsZWliZW5kZW4gUGF0Y2gtQmzDtmNrZSBuaWNodCBzdGFzaGVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBzdGFzaGVuXG4iCisiZCAtIGRpZXNlbiBvZGVyIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgbmljaHQgc3Rhc2hlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5zdGFzaGVuXG4iCisibiAtIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCB1bnN0YXNoZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgdW5zdGFzaGVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSB1bnN0YXNoZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBuaWNodCB1bnN0YXNoZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgYXVmIGRlbiBJbmRleCBhbndlbmRlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgYXVmIGRlbiBJbmRleCBhbndlbmRlblxuIgorInEgLSBCZWVuZGVuOyBkaWVzZW4gb2RlciBhbGxlIHZlcmJsZWliZW5kZW4gUGF0Y2gtQmzDtmNrZSBuaWNodCBhdWYgZGVuIEluZGV4ICIKKyJhbndlbmRlblxuIgorImEgLSBkaWVzZW4gdW5kIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBkaWVzZXIgRGF0ZWkgYXVmIGRlbiBJbmRleCAiCisiYW53ZW5kZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBuaWNodCBhdWYgZGVuIEluZGV4ICIKKyJhbndlbmRlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuXG4iCisibiAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBBcmJlaXRzdmVyemVpY2huaXMgbmljaHQgdmVyd2VyZmVuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiBvZGVyIGFsbGUgdmVyYmxlaWJlbmRlbiBQYXRjaC1CbMO2Y2tlIG5pY2h0IGltICIKKyJBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGRpZXNlciBEYXRlaSBpbSBBcmJlaXRzdmVyemVpY2huaXMgIgorInZlcndlcmZlblxuIgorImQgLSBkaWVzZW4gb2RlciBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgZGllc2VyIERhdGVpIG5pY2h0IGltICIKKyJBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzgKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBJbmRleCB1bmQgQXJiZWl0c3ZlcnplaWNobmlzIHZlcndlcmZlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgaW0gSW5kZXggdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgaW0gSW5kZXggdW5kICIKKyJBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuXG4iCisiYSAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSB2ZXJ3ZXJmZW5cbiIKKyJkIC0gZGllc2VuIG9kZXIgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSBuaWNodCB2ZXJ3ZXJmZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI4NAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGRpZXNlbiBQYXRjaC1CbG9jayBpbSBJbmRleCB1bmQgYXVmIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhbndlbmRlblxuIgorIm4gLSBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgaW0gSW5kZXggdW5kIGF1ZiBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW5cbiIKKyJxIC0gQmVlbmRlbjsgZGllc2VuIG9kZXIgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgYW53ZW5kZW5cbiIKKyJhIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgaW4gZGVyIERhdGVpIGFud2VuZGVuXG4iCisiZCAtIGRpZXNlbiBvZGVyIGFsbGUgd2VpdGVyZW4gUGF0Y2gtQmzDtmNrZSBpbiBkZXIgRGF0ZWkgbmljaHQgYW53ZW5kZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBkaWVzZW4gUGF0Y2gtQmxvY2sgYXVmIGRhcyBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW5cbiIKKyJuIC0gZGllc2VuIFBhdGNoLUJsb2NrIG5pY2h0IGF1ZiBkYXMgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuXG4iCisicSAtIEJlZW5kZW47IGRpZXNlbiB1bmQgYWxsZSB2ZXJibGVpYmVuZGVuIFBhdGNoLUJsw7Zja2UgbmljaHQgYW53ZW5kZW5cbiIKKyJhIC0gZGllc2VuIHVuZCBhbGxlIHdlaXRlcmVuIFBhdGNoLUJsw7Zja2UgaW4gZGVyIERhdGVpIGFud2VuZGVuXG4iCisiZCAtIGRpZXNlbiB1bmQgYWxsZSB3ZWl0ZXJlbiBQYXRjaC1CbMO2Y2tlIGluIGRlciBEYXRlaSBuaWNodCBhbndlbmRlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIFBhdGNoLUJsb2NrIHp1bSBIaW5zcHJpbmdlbiBhdXN3w6RobGVuXG4iCisiLyAtIG5hY2ggUGF0Y2gtQmxvY2sgc3VjaGVuLCBkZXIgZ2VnZWJlbmVtIHJlZ3Vsw6RyZW0gQXVzZHJ1Y2sgZW50c3ByaWNodFxuIgorImogLSBkaWVzZW4gUGF0Y2gtQmxvY2sgdW5iZXN0aW1tdCBsYXNzZW4sIG7DpGNoc3RlbiB1bmJlc3RpbW10ZW4gUGF0Y2gtQmxvY2sgIgorImFuemVpZ2VuXG4iCisiSiAtIGRpZXNlbiBQYXRjaC1CbG9jayB1bmJlc3RpbW10IGxhc3NlbiwgbsOkY2hzdGVuIFBhdGNoLUJsb2NrIGFuemVpZ2VuXG4iCisiayAtIGRpZXNlbiBQYXRjaC1CbG9jayB1bmJlc3RpbW10IGxhc3Nlbiwgdm9yaGVyaWdlbiB1bmJlc3RpbW10ZW4gUGF0Y2gtIgorIkJsb2NrIGFuemVpZ2VuXG4iCisiSyAtIGRpZXNlbiBQYXRjaC1CbG9jayB1bmJlc3RpbW10IGxhc3Nlbiwgdm9yaGVyaWdlbiBQYXRjaC1CbG9jayBhbnplaWdlblxuIgorInMgLSBha3R1ZWxsZW4gUGF0Y2gtQmxvY2sgaW4ga2xlaW5lcmUgUGF0Y2gtQmzDtmNrZSBhdWZ0ZWlsZW5cbiIKKyJlIC0gYWt0dWVsbGVuIFBhdGNoLUJsb2NrIG1hbnVlbGwgZWRpdGllcmVuXG4iCisiPyAtIEhpbGZlIGFuemVpZ2VuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICIiCisiRGllIGF1c2dld8OkaGx0ZW4gUGF0Y2gtQmzDtmNrZSBrw7ZubmVuIG5pY2h0IGF1ZiBkZW4gSW5kZXggYW5nZXdlbmRldCB3ZXJkZW4hXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MworbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICJUcm90emRlbSBhdWYgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0NgorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgIk5pY2h0cyBhbmdld2VuZGV0LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgImlnbm9yaWVyZSBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaTogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJNb2R1c8OkbmRlcnVuZyBkZXIgU3RhZ2luZy1BcmVhIGhpbnp1ZsO8Z2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkzDtnNjaHVuZyBkZXIgU3RhZ2luZy1BcmVhIGhpbnp1ZsO8Z2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEaWVzZW4gUGF0Y2gtQmxvY2sgZGVyIFN0YWdpbmctQXJlYSBoaW56dWbDvGdlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJNb2R1c8OkbmRlcnVuZyBzdGFzaGVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkzDtnNjaHVuZyBzdGFzaGVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEaWVzZW4gUGF0Y2gtQmxvY2sgc3Rhc2hlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIk1vZHVzw6RuZGVydW5nIGF1cyBkZXIgU3RhZ2luZy1BcmVhIGVudGZlcm5lbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkzDtnNjaHVuZyBhdXMgZGVyIFN0YWdpbmctQXJlYSBlbnRmZXJuZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiRGllc2VuIFBhdGNoLUJsb2NrIGF1cyBkZXIgU3RhZ2luZy1BcmVhIGVudGZlcm5lbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJNb2R1c8OkbmRlcnVuZyBhdWYgSW5kZXggYW53ZW5kZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTMO2c2NodW5nIGF1ZiBJbmRleCBhbndlbmRlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiRGllc2VuIFBhdGNoLUJsb2NrIGF1ZiBJbmRleCBhbndlbmRlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIk1vZHVzw6RuZGVydW5nIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMw7ZzY2h1bmcgaW0gQXJiZWl0c3ZlcnplaWNobmlzIHZlcndlcmZlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEaWVzZW4gUGF0Y2gtQmxvY2sgaW0gQXJiZWl0c3ZlcnplaWNobmlzIHZlcndlcmZlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJNb2R1c8OkbmRlcnVuZyB2b20gSW5kZXggdW5kIEFyYmVpdHN2ZXJ6ZWljaG5pcyB2ZXJ3ZXJmZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMw7ZzY2h1bmcgdm9tIEluZGV4IHVuZCBBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJEaWVzZW4gUGF0Y2gtQmxvY2sgdm9tIEluZGV4IHVuZCBBcmJlaXRzdmVyemVpY2huaXMgdmVyd2VyZmVuIFt5LG4scSxhLGQiCisiJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIk1vZHVzw6RuZGVydW5nIGF1ZiBJbmRleCB1bmQgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMw7ZzY2h1bmcgYXVmIEluZGV4IHVuZCBBcmJlaXRzdmVyemVpY2huaXMgYW53ZW5kZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiRGllc2VuIFBhdGNoLUJsb2NrIGF1ZiBJbmRleCB1bmQgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuIFt5LG4scSxhLGQiCisiJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJNb2R1c8OkbmRlcnVuZyBhdWYgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkzDtnNjaHVuZyBhdWYgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiRGllc2VuIFBhdGNoLUJsb2NrIGF1ZiBkYXMgQXJiZWl0c3ZlcnplaWNobmlzIGFud2VuZGVuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzAKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iCittc2dzdHIgIktlaW5lIGFuZGVyZW4gUGF0Y2gtQmzDtmNrZSB2ZXJibGVpYmVuZFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcydcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZSBOdW1tZXI6ICclcydcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIkVudHNjaHVsZGlndW5nLCBudXIgJWQgUGF0Y2gtQmxvY2sgdmVyZsO8Z2Jhci5cbiIKK21zZ3N0clsxXSAiRW50c2NodWxkaWd1bmcsIG51ciAlZCBQYXRjaC1CbMO2Y2tlIHZlcmbDvGdiYXIuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICJLZWluZSBhbmRlcmVuIFBhdGNoLUJsw7Zja2UgenVtIER1cmNoc3VjaGVuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYzNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXNcbiIKK21zZ3N0ciAiRmVobGVyaGFmdGVyIHJlZ3Vsw6RyZXIgQXVzZHJ1Y2sgZsO8ciBTdWNoZSAlczogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIktlaW4gUGF0Y2gtQmxvY2sgZW50c3ByaWNodCBkZW0gYW5nZWdlYmVuZW4gTXVzdGVyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY1OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODAKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgIktlaW4gdm9yaGVyaWdlciBQYXRjaC1CbG9ja1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIktlaW4gZm9sZ2VuZGVyIFBhdGNoLUJsb2NrXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIkVudHNjaHVsZGlndW5nLCBrYW5uIGRpZXNlbiBQYXRjaC1CbG9jayBuaWNodCBhdWZ0ZWlsZW4uXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCittc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dzdHJbMF0gIkluICVkIFBhdGNoLUJsb2NrIGF1ZmdldGVpbHQuXG4iCittc2dzdHJbMV0gIkluICVkIFBhdGNoLUJsw7Zja2UgYXVmZ2V0ZWlsdC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJFbnRzY2h1bGRpZ3VuZywga2FubiBkaWVzZW4gUGF0Y2gtQmxvY2sgbmljaHQgYmVhcmJlaXRlbi5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBkbyBub3QgdHJhbnNsYXRlIHRoZSBjb21tYW5kIG5hbWVzCisjLiAnc3RhdHVzJywgJ3VwZGF0ZScsICdyZXZlcnQnLCBldGMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NzMKK21zZ2lkICIiCisic3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzXG4iCisidXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlc1xuIgorInJldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvblxuIgorInBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHlcbiIKKyJkaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXhcbiIKKyJhZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiAiCisiY2hhbmdlc1xuIgorbXNnc3RyICIiCisic3RhdHVzICAgICAgICAtIFBmYWRlIG1pdCDDhG5kZXJ1bmdlbiBhbnplaWdlblxuIgorInVwZGF0ZSAgICAgICAgLSBadXN0YW5kIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgZGVuIHp1bSBDb21taXQgIgorInZvcmdlbWVya3RlbiDDhG5kZXJ1bmdlbiBoaW56dWbDvGdlblxuIgorInJldmVydCAgICAgICAgLSB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuIGF1ZiBIRUFEIFZlcnNpb24gIgorInp1csO8Y2tzZXR6ZW5cbiIKKyJwYXRjaCAgICAgICAgIC0gUGF0Y2gtQmzDtmNrZSBhdXN3w6RobGVuIHVuZCBzZWxla3RpdiBha3R1YWxpc2llcmVuXG4iCisiZGlmZiAgICAgICAgICAtIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBIRUFEIHVuZCBJbmRleCBhbnplaWdlblxuIgorImFkZCB1bnRyYWNrZWQgLSBJbmhhbHRlIHZvbiB1bnZlcnNpb25pZXJ0ZW4gRGF0ZWllbiB6dW0gQ29tbWl0IHZvcm1lcmtlblxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI1Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAiLS0gZmVobHQiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgIlVuYmVrYW5udGVyIC0tcGF0Y2ggTW9kdXM6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAidW5nw7xsdGlnZXMgQXJndW1lbnQgJXMsIGVyd2FydGUgLS0iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICIiCisibG9rYWxlIFplaXR6b25lIHVudGVyc2NoZWlkZXQgc2ljaCB2b24gR01UIG5pY2h0IHVtIGVpbiBNaW51dGVuaW50ZXJ2YWxsXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ1IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxCittc2dpZCAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iCittc2dzdHIgImxva2FsZXIgWmVpdC1PZmZzZXQgZ3LDtsOfZXIgb2RlciBnbGVpY2ggMjQgU3R1bmRlblxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyOQorbXNnaWQgInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIKK21zZ3N0ciAiRGVyIEVkaXRvciB3dXJkZSB1bnNhdWJlciBiZWVuZGV0LCBicmVjaGUgYWxsZXMgYWIuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIgorbXNnc3RyICIiCisiJyVzJyBlbnRow6RsdCBlaW5lIFp3aXNjaGVudmVyc2lvbiBkZXIgRS1NYWlsLCBkaWUgU2llIGdlcmFkZSB2ZXJmYXNzZW4uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICInJXMuZmluYWwnIGVudGjDpGx0IGRpZSB2ZXJmYXNzdGUgRS1NYWlsLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQwOAorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiLS1kdW1wLWFsaWFzZXMgaXN0IG1pdCBhbmRlcmVuIE9wdGlvbmVuIGlua29tcGF0aWJlbFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIiIKKyJLYW5uICdnaXQgZm9ybWF0LXBhdGNoJyBuaWNodCBhdcOfZXJoYWxiIGVpbmVzIFJlcG9zaXRvcmllcyBhdXNmw7xocmVuLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKyInYmF0Y2gtc2l6ZScgdW5kICdyZWxvZ2luJyBtw7xzc2VuIGdlbWVpbnNhbSBhbmdlZ2ViZW4gd2VyZGVuICjDvGJlciAiCisiS29tbWFuZG96ZWlsZVxuIgorIm9kZXIgS29uZmlndXJhdGlvbnNvcHRpb24pXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICJVbmJla2FubnRlcyAtLXN1cHByZXNzLWNjIEZlbGQ6ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICJVbmJla2FubnRlIC0tY29uZmlybSBFaW5zdGVsbHVuZzogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisiV2FybnVuZzogc2VuZGVtYWlsLUFsaWFzIG1pdCBBbmbDvGhydW5nc3plaWNoZW4gd2lyZCBuaWNodCB1bnRlcnN0w7x0enQ6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIldhcm51bmc6IGA6aW5jbHVkZTpgIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0OiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiV2FybnVuZzogYC9maWxlYCBvZGVyIGB8cGlwZWAgVW1sZWl0dW5nIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0OiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICJXYXJudW5nOiBzZW5kbWFpbCBaZWlsZSB3aXJkIG5pY2h0IGVya2FubnQ6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjQ5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzXG4iCisidG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi5cbiIKKyJcbiIKKyIgICAgKiBTYXlpbmcgXCIuLyVzXCIgaWYgeW91IG1lYW4gYSBmaWxlOyBvclxuIgorIiAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS5cbiIKK21zZ3N0ciAiIgorIkRhdGVpICclcycgZXhpc3RpZXJ0LCBhYmVyIGVzIGvDtm5udGUgYXVjaCBkZXIgQmVyZWljaCB2b24gQ29tbWl0cyBzZWluLFxuIgorImbDvHIgZGVuIFBhdGNoZXMgZXJ6ZXVndCB3ZXJkZW4gc29sbGVuLiBCaXR0ZSBtYWNoZW4gU2llIGRpZXMgZWluZGV1dGlnXG4iCisiaW5kZW0gU2llIC4uLlxuIgorIlxuIgorIiAgICAqIFwiLi8lc1wiIGFuZ2ViZW4sIHdlbm4gU2llIGVpbmUgRGF0ZWkgbWVpbmVuLCBvZGVyXG4iCisiICAgICogZGllIE9wdGlvbiAtLWZvcm1hdC1wYXRjaCBhbmdlYmVuLCB3ZW5uIFNpZSBlaW5lbiBDb21taXQtQmVyZWljaCAiCisibWVpbmVuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiB2b24gJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisiV2FybnVuZzogRXMgd3VyZGVuIGtlaW5lIFBhdGNoZXMgdmVyc2VuZGV0LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJrZWluZSBQYXRjaC1EYXRlaWVuIGFuZ2VnZWJlbiFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiS2VpbmUgQmV0cmVmZnplaWxlIGluICVzPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiAnJXMnIHp1bSBTY2hyZWliZW46ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjczOQorbXNnaWQgIiIKKyJMaW5lcyBiZWdpbm5pbmcgaW4gXCJHSVQ6XCIgd2lsbCBiZSByZW1vdmVkLlxuIgorIkNvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzXG4iCisiZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuXG4iCisiXG4iCisiQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS5cbiIKK21zZ3N0ciAiIgorIlplaWxlbiwgZGllIG1pdCBcIkdJVDpcIiBiZWdpbm5lbiwgd2VyZGVuIGVudGZlcm50LlxuIgorIlppZWhlbiBTaWUgaW4gQmV0cmFjaHQsIGVpbmVuIGFsbGdlbWVpbmVuIFwiZGlmZnN0YXRcIiBvZGVyIGVpblxuIgorIkluaGFsdHN2ZXJ6ZWljaG5pcywgZsO8ciBkZW4gUGF0Y2ggZGVuIFNpZSBzY2hyZWliZW4sIGhpbnp1enVmw7xnZW4uXG4iCisiXG4iCisiTGVlcmVuIFNpZSBkZW4gSW5oYWx0IGRlcyBCb2R5cywgd2VubiBTaWUga2VpbmUgWnVzYW1tZW5mYXNzdW5nIHNlbmRlbiAiCisibcO2Y2h0ZW4uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiB2b24gJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIMOWZmZuZW4gdm9uICVzLmZpbmFsOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MjMKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICJFLU1haWwgbWl0IFp1c2FtbWVuZmFzc3VuZyBpc3QgbGVlciwgd2lyZCBhdXNnZWxhc3NlblxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAiU2luZCBTaWUgc2ljaCBzaWNoZXIsIDwlcz4genUgYmVudXR6ZW4gW3kvTl0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKyJEaWUgZm9sZ2VuZGVuIERhdGVpZW4gc2luZCA4LUJpdCwgYWJlciBkZWtsYXJpZXJlbiBrZWluXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZy5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTgKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICJXZWxjaGVzIDgtQml0LUVuY29kaW5nIHNvbGwgZGVrbGFyaWVydCB3ZXJkZW4gW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIlZlcnNhbmQgenVyw7xja2dld2llc2VuLCB3ZWlsIGRlciBQYXRjaFxuIgorIlx0JXNcbiIKKyJkaWUgQmV0cmVmZnplaWxlbnZvcmxhZ2UgJyoqKiBTVUJKRUNUIEhFUkUgKioqJyBlbnRow6RsdC4gR2ViZW4gU2llIC0tZm9yY2UgIgorImFuLFxuIgorIndlbm4gU2llIGRlbiBQYXRjaCB3aXJrbGljaCB2ZXJzZW5kZW4gd29sbGVuLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk0NQorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgIkFuIHdlbiBzb2xsZW4gZGllIEUtTWFpbHMgdmVyc2VuZGV0IHdlcmRlbiAod2VubiDDvGJlcmhhdXB0IGplbWFuZCk/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICJmYXRhbDogQWxpYXMgJyVzJyBlcndlaXRlcnQgc2ljaCB6dSBzaWNoIHNlbGJzdFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIiIKKyJNZXNzYWdlLUlEIHp1ciBWZXJ3ZW5kdW5nIGFscyBJbi1SZXBseS1UbyBmw7xyIGRpZSBlcnN0ZSBFLU1haWwgKHdlbm4gZWluZSAiCisiZXhpc3RpZXJ0KT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMzMgZ2l0LXNlbmQtZW1haWwucGVybDoxMDQxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAiRmVobGVyOiBrb25udGUga2VpbmUgZ8O8bHRpZ2UgQWRyZXNzZSBhdXMgJXMgZXh0cmFoaWVyZW5cbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDUKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgIiIKKyJXYXMgc29sbCBtaXQgZGllc2VyIEFkcmVzc2UgZ2VzY2hlaGVuPyAoQmVlbmRlbiBbcV18TMO2c2NoZW4gW2RdfEJlYXJiZWl0ZW4gIgorIltlXSk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJDQSBQZmFkIFwiJXNcIiBleGlzdGllcnQgbmljaHQiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAgRGllIENjLUxpc3RlIG9iZXJoYWxiIHd1cmRlIHVtIHp1c8OkdHpsaWNoZSBBZHJlc3NlbiBlcndlaXRlcnQsIGRpZSBpbiAiCisiZGVyXG4iCisiICAgIENvbW1pdC1CZXNjaHJlaWJ1bmcgZGVzIFBhdGNoZXMgZ2VmdW5kZW4gd3VyZGVuLiBXZW5uIGRpZXMgcGFzc2llcnQsICIKKyJ3ZXJkZW5cbiIKKyIgICAgU2llIHZvbiBzZW5kLWVtYWlsIHp1IGVpbmVyIEVpbmdhYmUgYXVmZ2Vmb3JkZXJ0LiBEaWVzZXMgVmVyaGFsdGVuIHdpcmRcbiIKKyIgICAgZHVyY2ggZGllIEtvbmZpZ3VyYXRpb25zZWluc3RlbGx1bmcgc2VuZGVtYWlsLmNvbmZpcm0gZ2VzdGV1ZXJ0LlxuIgorIlxuIgorIiAgICBGw7xyIHdlaXRlcmUgSW5mb3JtYXRpb25lbiwgZsO8aHJlbiBTaWUgJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcgYXVzLlxuIgorIiAgICBVbSBkYXMgYWt0dWVsbGUgVmVyaGFsdGVuIGJlaXp1YmVoYWx0ZW4sIGFiZXIgZGllc2UgTWVsZHVuZyB6dSAiCisidW50ZXJkcsO8Y2tlbixcbiIKKyIgICAgZsO8aHJlbiBTaWUgJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycgYXVzLlxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYwCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICIiCisiRGllc2UgRS1NYWlsIHZlcnNlbmRlbj8gKEphIFt5XXxOZWluIFtuXXxCZWFyYmVpdGVuIFtlXXxCZWVuZGVuIFtxXXxBbGxlICIKKyJbYV0pOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAiWnVtIFZlcnNlbmRlbiBkaWVzZXIgRS1NYWlsIGlzdCBlaW5lIEFudHdvcnQgZXJmb3JkZXJsaWNoLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkxCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAiRGVyIGVyZm9yZGVybGljaGUgU01UUC1TZXJ2ZXIgaXN0IG5pY2h0IGtvcnJla3QgZGVmaW5pZXJ0LiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNUQVJUVExTISAlcyIKK21zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBrZWluIFNUQVJUVExTISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICJTVEFSVFRMUyBmZWhsZ2VzY2hsYWdlbiEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1NgorbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgIiIKKyJLb25udGUgU01UUCBuaWNodCBrb3JyZWt0IGluaXRpYWxpc2llcmVuLiBCaXR0ZSBwcsO8ZmVuIFNpZSBJaHJlICIKKyJLb25maWd1cmF0aW9uXG4iCisidW5kIGJlbnV0emVuIFNpZSAtLXNtdHAtZGVidWcuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHNlbmQgJXNcbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2VuZGVuICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICJQcm9iZXZlcnNhbmQgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAiJXMgZ2VzZW5kZXRcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiUHJvYmV2ZXJzYW5kIE9LLiBMb2cgZW50aMOkbHQ6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT0suIExvZyBlbnRow6RsdDpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTkxCittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgIkVyZ2VibmlzOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5NAorbXNnaWQgIlJlc3VsdDogT0tcbiIKK21zZ3N0ciAiRXJnZWJuaXM6IE9LXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIkthbm4gRGF0ZWkgJXMgbmljaHQgw7ZmZm5lbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjU5IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY3OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgRsO8Z2UgY2M6IGhpbnp1OiAlcyB2b24gWmVpbGUgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIEbDvGdlIHRvOiBoaW56dTogJXMgdm9uIFplaWxlICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobm9uLW1ib3gpIEbDvGdlIGNjOiBoaW56dTogJXMgdm9uIFplaWxlICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihib2R5KSBGw7xnZSBjYzogaGluenU6ICVzIHZvbiBaZWlsZSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykgS29ubnRlICclcycgbmljaHQgYXVzZsO8aHJlbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgRsO8Z2UgJXM6ICVzIGhpbnp1IHZvbjogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIgorbXNnc3RyICIoJXMpIEZlaGxlciBiZWltIFNjaGxpZcOfZW4gZGVyIFBpcGUgbmFjaCAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MDUKK21zZ2lkICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiCittc2dzdHIgIkthbm4gTmFjaHJpY2h0IG5pY2h0IGFscyA3Yml0IHZlcnNlbmRlbi4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgIlVuZ8O8bHRpZ2VzIFRyYW5zZmVyLUVuY29kaW5nIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTQgZ2l0LXNlbmQtZW1haWwucGVybDoyMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IMO2ZmZuZW46ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlczogUGF0Y2ggZW50aMOkbHQgZWluZSBaZWlsZSwgZGllIGzDpG5nZXIgYWxzIDk5OCBaZWljaGVuIGlzdCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICJMYXNzZSAlcyBtaXQgQmFja3VwLVN1ZmZpeCAnJXMnIGF1cy5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgIldvbGxlbiBTaWUgJXMgd2lya2xpY2ggdmVyc2VuZGVuPyBbeXxOXTogIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIGdldCB0cmVlIGZvciAlcyIKKyN+IG1zZ3N0ciAiS29ubnRlIFZlcnplaWNobmlzIGbDvHIgJXMgbmljaHQgYmVzdGltbWVuLiIKKworI34gbXNnaWQgIlVzZSBhbiBleHBlcmltZW50YWwgaGV1cmlzdGljIHRvIGltcHJvdmUgZGlmZnMiCisjfiBtc2dzdHIgIiIKKyN+ICJlaW5lIGV4cGVyaW1lbnRlbGxlIEhldXJpc3RpayB6dXIgVmVyYmVzc2VydW5nIGRlciBEYXJzdGVsbHVuZ1xuIgorI34gInZvbiBVbnRlcnNjaGllZGVuIHZlcndlbmRlbiIKKworI34gbXNnaWQgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8T2JqZWt0dmVyemVpY2huaXM+XSIKKworI34gbXNnaWQgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKKyN+IG1zZ3N0ciAiZ2l0IGNvbW1pdC1ncmFwaCByZWFkIFstLW9iamVjdC1kaXIgPE9iamVrdHZlcnplaWNobmlzPl0iCisKKyN+IG1zZ2lkICJ1bmtub3duIGNvcmUudW50cmFja2VkQ2FjaGUgdmFsdWUgJyVzJzsgdXNpbmcgJ2tlZXAnIGRlZmF1bHQgdmFsdWUiCisjfiBtc2dzdHIgIiIKKyN+ICJVbmJla2FubnRlciBXZXJ0ICclcycgaW4gY29yZS51bnRyYWNrZWRDYWNoZTsgYmVudXR6ZSBTdGFuZGFyZHdlcnQgJ2tlZXAnIgorCisjfiBtc2dpZCAiY2Fubm90IGNoYW5nZSBwYXJ0aWFsIGNsb25lIHByb21pc29yIHJlbW90ZSIKKyN+IG1zZ3N0ciAiS2FubiBSZW1vdGUtUmVwb3NpdG9yeSBmw7xyIHBhcnRpZWxsZXMgS2xvbmVuIG5pY2h0IMOkbmRlcm4uIgorCisjfiBtc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCisjfiBtc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXIgXCJUcmVlXCItT2JqZWt0ZSIKKworI34gbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQgJyVzJyBpbiAnJXMnIgorI34gbXNnc3RyICJVbmfDvGx0aWdlcyBEYXR1bXNmb3JtYXQgJyVzJyBpbiAnJXMnIgorCisjfiBtc2dpZCAid3JpdGluZyByb290IGNvbW1pdCIKKyN+IG1zZ3N0ciAiUm9vdC1Db21taXQgc2NocmVpYmVuIgorCisjfiBtc2dpZCAic3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlcyBtYXkgYmUgbG9zdDogJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJadW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuIGluIGRlbiBmb2xnZW5kZW4gRGF0ZWllbiBnZWhlbiAiCisjfiAiZXZlbnR1ZWxsIHZlcmxvcmVuOiAlcyIKKworI34gbXNnaWQgIiIKKyN+ICItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorI34gInBhcnRpYWxDbG9uZSIKKyN+IG1zZ3N0ciAiIgorI34gIi0tZmlsdGVyIGthbm4gbnVyIG1pdCBkZW4gUmVtb3RlLVJlcG9zaXRvcmllcyB2ZXJ3ZW5kZXQgd2VyZGVuLFxuIgorI34gImRpZSBpbiBjb3JlLnBhcnRpYWxDbG9uZSBrb25maWd1cmllcnQgc2luZC4iCisKKyN+IG1zZ2lkICJ2ZXJpZnkgY29tbWl0LW1zZyBob29rIgorI34gbXNnc3RyICJjb21taXQtbXNnIEhvb2sgw7xiZXJwcsO8ZmVuIgorCisjfiBtc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneS1vcHRpb24nIgorI34gbXNnc3RyICIiCisjfiAiJy0tcmViYXNlLW1lcmdlcycga2FubiBuaWNodCBtaXQgJy0tc3RyYXRlZ3ktb3B0aW9uJyBrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyN+IG1zZ2lkICJpbnZhbGlkIHNwYXJzZSB2YWx1ZSAnJXMnIgorI34gbXNnc3RyICJVbmfDvGx0aWdlciBcInNwYXJzZVwiLVdlcnQgJyVzJy4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmV0Y2ggbm9ybWFsbHkgaW5kaWNhdGVzIHdoaWNoIGJyYW5jaGVzIGhhZCBhIGZvcmNlZCB1cGRhdGUsIGJ1dCB0aGF0ICIKKyN+ICJjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICInZmV0Y2gnIHplaWd0IG5vcm1hbGVyd2Vpc2UsIHdlbGNoZSBCcmFuY2hlcyBlaW5lIGVyend1bmdlbmUgIgorI34gIkFrdHVhbGlzaWVydW5nIGhhdHRlbiwgYWJlciBkaWVzZSDDnGJlcnByw7xmdW5nIHd1cmRlIGRlYWt0aXZpZXJ0LiIKKworI34gbXNnaWQgIiIKKyN+ICJvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgZmFsc2UnIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJvZGVyIGbDvGhyZW4gU2llICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlJyBhdXMsIHVtIGRpZXNlICIKKyN+ICLDnGJlcnByw7xmdW5nIHp1IHVtZ2VoZW4uXG4iCisKKyN+IG1zZ2lkICIiCisjfiAibG9nLm1haWxtYXAgaXMgbm90IHNldDsgaXRzIGltcGxpY2l0IHZhbHVlIHdpbGwgY2hhbmdlIGluIGFuXG4iCisjfiAidXBjb21pbmcgcmVsZWFzZS4gVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHByZXNlcnZlIGN1cnJlbnRcbiIKKyN+ICJiZWhhdmlvdXIsIHNldCB0aGUgbG9nLm1haWxtYXAgY29uZmlndXJhdGlvbiB2YWx1ZSB0byBmYWxzZS5cbiIKKyN+ICJcbiIKKyN+ICJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvdXIgbm93LCBzZXQgdGhlXG4iCisjfiAibG9nLm1haWxtYXAgY29uZmlndXJhdGlvbiB2YWx1ZSB0byB0cnVlLlxuIgorI34gIlxuIgorI34gIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAnbG9nLm1haWxtYXAnIGZvciBmdXJ0aGVyICIKKyN+ICJpbmZvcm1hdGlvbi4iCisjfiBtc2dzdHIgIiIKKyN+ICInbG9nLm1haWxtYXAnIGlzdCBuaWNodCBnZXNldHp0OyBkZXIgaW1wbGl6aXRlIFdlcnQgd2lyZCBzaWNoIGluIGVpbmVtXG4iCisjfiAia29tbWVuZGVuIFJlbGVhc2Ugw6RuZGVybi4gVW0gZGllc2UgTWVsZHVuZyB6dSB1bnRlcmRyw7xja2VuIHVuZCBkYXMgIgorI34gImFrdHVlbGxlXG4iCisjfiAiVmVyaGFsdGVuIGJlaXp1YmVoYWx0ZW4sIHNldHplbiBTaWUgZGVuIEtvbmZpZ3VyYXRpb25zd2VydCB2b24nbG9nLiIKKyN+ICJtYWlsbWFwJyBhdWYgJ2ZhbHNlJy5cbiIKKyN+ICJcbiIKKyN+ICJVbSBkaWVzZSBNZWxkdW5nIHp1IHVudGVyZHLDvGNrZW4gdW5kIGpldHp0IGRhcyBuZXVlIFZlcmhhbHRlbiB6dVxuIgorI34gIsO8YmVybmVobWVuLCBzZXR6ZW4gU2llIGRlbiBLb25maWd1cmF0aW9uc3dlcnQgdm9uICdsb2cubWFpbG1hcCcgYXVmICIKKyN+ICIndHJ1ZScuXG4iCisjfiAiXG4iCisjfiAiRsO8aHJlbiBTaWUgJ2dpdCBoZWxwIGNvbmZpZycgYXVzIHVuZCBzdWNoZW4gU2llIG5hY2ggJ2xvZy5tYWlsbWFwJywgdW1cbiIKKyN+ICJ3ZWl0ZXJlIEluZm9ybWF0aW9uZW4genUgZXJoYWx0ZW4uIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZCIKKyN+IG1zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBtdWx0aV9hY2tfZGV0YWlsZWQiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbm8tZG9uZSIKKyN+IG1zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBuby1kb25lIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2FjayIKKyN+IG1zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBtdWx0aV9hY2siCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kLTY0ayIKKyN+IG1zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBzaWRlLWJhbmQtNjRrIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZCIKKyN+IG1zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBzaWRlLWJhbmQiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKKyN+IG1zZ3N0ciAiU2VydmVyIHVudGVyc3TDvHR6dCBhbGxvdy10aXAtc2hhMS1pbi13YW50IgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCisjfiBtc2dzdHIgIlNlcnZlciB1bnRlcnN0w7x0enQgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBvZnMtZGVsdGEiCisjfiBtc2dzdHIgIlNlcnZlciB1bnRlcnN0w7x0enQgb2ZzLWRlbHRhIgorCisjfiBtc2dpZCAiKEhFQUQgZGV0YWNoZWQgYXQgJXMpIgorI34gbXNnc3RyICIoSEVBRCBsb3NnZWzDtnN0IGJlaSAlcykiCisKKyN+IG1zZ2lkICIoSEVBRCBkZXRhY2hlZCBmcm9tICVzKSIKKyN+IG1zZ3N0ciAiKEhFQUQgbG9zZ2Vsw7ZzdCB2b24gJXMpIgorCisjfiBtc2dpZCAiQ2hlY2tpbmcgb3V0IGZpbGVzIgorI34gbXNnc3RyICJDaGVja2UgRGF0ZWllbiBhdXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCisjfiBtc2dzdHIgIiIKKyN+ICJLYW5uIG5pY2h0IGludGVyYWt0aXYgc2Vpbiwgb2huZSBkYXNzIGRpZSBTdGFuZGFyZC1FaW5nYWJlIG1pdCBlaW5lbSAiCisjfiAiVGVybWluYWwgdmVyYnVuZGVuIGlzdC4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorI34gbXNnc3RyICJLb25udGUgJXMgbmljaHQgbGVzZW5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisjfiAiXG4iCisjfiAiICAgIGdpdCByZXNldFxuIgorI34gIlxuIgorI34gIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisjfiAidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorI34gbXNnc3RyICIiCisjfiAiV2VubiBTaWUgZGllc2VuIENvbW1pdCBhdXNsYXNzZW4gbcO2Y2h0ZW4sIGJlbnV0emVuIFNpZTpcbiIKKyN+ICJcbiIKKyN+ICIgICAgZ2l0IHJlc2V0XG4iCisjfiAiXG4iCisjfiAiQmVudXR6ZW4gU2llIGFuc2NobGllw59lbmQgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiLCB1bSBkaWVcbiIKKyN+ICJDaGVycnktUGljay1PcGVyYXRpb24gbWl0IGRlbiB2ZXJibGVpYmVuZGVuIENvbW1pdHMgZm9ydHp1c2V0emVuLlxuIgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIHZlcmI6ICVzIgorI34gbXNnc3RyICJOaWNodCBlcmthbm50ZXMgVmVyYjogJXMiCmRpZmYgLS1naXQgYS9wby9lbC5wbyBiL3BvL2VsLnBvCmluZGV4IDM2MzRiYTQuLjcwM2Y0NmQgMTAwNjQ0Ci0tLSBhL3BvL2VsLnBvCisrKyBiL3BvL2VsLnBvCkBAIC0xLDIwMDUgKzEsMjE0NjggQEAKLSMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBHcmVlawotIyBDb3B5cmlnaHQgKEMpIDIwMDkgSmltbXkgQW5nZWxha29zCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCi0jIEppbW15IEFuZ2VsYWtvcyA8dnlydXNzQGhlbGx1Zy5ncj4sIDIwMDkuCisjIEdyZWVrIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTkgSmltbXkgQW5nZWxha29zIDx2eXJ1c3NAaGVsbHVnLmdyPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjCisjIEdyZWVrIHRyYW5zbGF0aW9ucyBvZiBjb21tb24gR2l0IHdvcmRzIHVzZWQgaW4gdGhpcyBmaWxlOgorIworIyAgIEVuZ2xpc2ggICAgICAgICAgfCAgR3JlZWsKKyMgICAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAzLXdheSBtZXJnZSAgICAgIHwgIM+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+Bz4fOtc6vzr8gJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYyNiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NDYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MzIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2ODUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG5vbi1tYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzIwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODMxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NDIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3MgorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4ODAKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkyMSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzMgZ2l0LXNlbmQtZW1haWwucGVybDoxOTgzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkyNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyAlcyB3aXRoIGJhY2t1cCBzdWZmaXggJyVzJy5cbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk0NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vZXMucG8gYi9wby9lcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZhYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZXMucG8KQEAgLTAsMCArMSwyNDc3MSBAQAorIyBTcGFuaXNoIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTggQ2hyaXN0b3BoZXIgRGlheiBSaXZlcm9zIDxjaHJpc3RvcGhlci5kaWF6LnJpdkBnbWFpbC5jb20+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgQ2hyaXN0b3BoZXIgRGlheiBSaXZlcm9zIDxjaHJpc3RvcGhlci5kaWF6LnJpdkBnbWFpbC5jb20+LCAyMDE3LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTktMTItMzAgMDg6NDgrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDEtMDYgMDk6MTItMDUwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogY2hyaXN0b3BoZXIuZGlhei5yaXZAZ21haWwuY29tXG4iCisiTGFuZ3VhZ2UtVGVhbTogQ29kZUxhYm9yYSA8Y29kZWxhYm9yYUBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2U6IGVzXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IFBvZWRpdCAyLjIuNFxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/IgorbXNnc3RyICLCv0FoaCAoJXMpPyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTAwIGFkZC1pbnRlcmFjdGl2ZS5jOjgwMSBzZXF1ZW5jZXIuYzozMjE2CisjOiBzZXF1ZW5jZXIuYzozNjU2IGJ1aWx0aW4vcmViYXNlLmM6ODcxIGJ1aWx0aW4vcmViYXNlLmM6MTY0MworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE5IGJ1aWx0aW4vcmViYXNlLmM6MjA2MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgw61uZGljZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTU1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAiYmluYXJpbyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjEzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMzMgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgIm5hZGEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYxNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxNAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMjkKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgInNpbiBjYW1iaW9zIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIkFjdHVhbGl6YXIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY2OCBhZGQtaW50ZXJhY3RpdmUuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YWdlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gcG9uZXIgZW4gc3RhZ2UgJyVzJyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njc0IGFkZC1pbnRlcmFjdGl2ZS5jOjg2MyBzZXF1ZW5jZXIuYzozNDA5CisjOiBidWlsdGluL3JlYmFzZS5jOjg5NQorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2NyaWJpciDDrW5kaWNlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gImFjdHVhbGl6YWRhICVkIHJ1dGFcbiIKK21zZ3N0clsxXSAiYWN0dWFsaXphZGFzICVkIHJ1dGFzXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAibm90YTogJXMgbm8gZXMgcmFzdHJlYWRvIGFob3JhLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MDAgYXBwbHkuYzo0MTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoyODEKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAibWFrZV9jYWNoZV9lbnRyeSBmYWxsw7MgcGFyYSBsYSBydXRhICclcyciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjczMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAiUmV2ZXJ0aXIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc0NgorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBIRUFEXnt0cmVlfSIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBIRUFEXnt0cmVlfSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Nzg0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjMxCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gInJldmVydGlkYSAlZCBydXRhXG4iCittc2dzdHJbMV0gInJldmVydGlkYXMgJWQgcnV0YXNcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAiTm8gaGF5IGFyY2hpdm9zIHNpbiByYXN0cmVhci5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODM5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAiQWdyZWdhciBubyByYXN0cmVhZG9zIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4NjYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiYWdyZWdhZGEgJWQgcnV0YVxuIgorbXNnc3RyWzFdICJhZ3JlZ2FkYXMgJWQgcnV0YXNcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAiaWdub3JhbmRvIGxvIG5vIGZ1c2lvbmFkbzogJXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkwOCBhZGQtcGF0Y2guYzoxMzMxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICJTb2xvIGNhbWJpYXJvbiBhcmNoaXZvcyBiaW5hcmlvcy5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTEwIGFkZC1wYXRjaC5jOjEzMjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIlNpbiBjYW1iaW9zLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICJBY3R1YWxpemFjacOzbiBkZWwgcGFyY2hlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIlJldmlzacOzbiBkZSAgZGlmZiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTgxCittc2dpZCAic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiCittc2dzdHIgIm1vc3RyYXIgcnV0YXMgY29uIGNhbWJpb3MiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MworbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiYWdyZWdhciBlc3RhZG8gZGVsIMOhcmJvbCBkZSB0cmFiYWpvIGFsIGNvbmp1bnRvIGRlIGNhbWJpb3MgZW4gc3RhZ2UiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4NQorbXNnaWQgInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIgorbXNnc3RyICJyZXZlcnRpciBjb25qdW50byBkZSBjYW1iaW9zIGVuIHN0YWdlIGEgbGEgdmVyc2nDs24gZGUgSEVBRCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg3Cittc2dpZCAicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IgorbXNnc3RyICJlbGVnaXIgaHVua3MgeSBhY3R1YWxpemFyIGRlIGZvcm1hIHNlbGVjdGl2YSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg5Cittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInZlciBkaWZmIGVudHJlIEhFQUQgZSBpbmRleCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTkxCittc2dpZCAiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisiYWdyZWdhciBjb250ZW5pZG9zIGRlIGFyY2hpdm9zIHNpbiByYXN0cmVhciBhbCBjb25qdW50byBkZSBjYW1iaW9zIGRlIHN0YWdlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTkgYWRkLWludGVyYWN0aXZlLmM6MTA0OAorbXNnaWQgIlByb21wdCBoZWxwOiIKK21zZ3N0ciAiTW9zdHJhciBheXVkYToiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDEKK21zZ2lkICJzZWxlY3QgYSBzaW5nbGUgaXRlbSIKK21zZ3N0ciAic2VsZWNjaW9uYSB1biDDum5pY28gb2JqZXRvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAzCittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgInNlbGVjY2lvbmEgdW4gcmFuZ28gZGUgb2JqZXRvcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNQorbXNnaWQgInNlbGVjdCBtdWx0aXBsZSByYW5nZXMiCittc2dzdHIgInNlbGVjY2lvbmEgbXVsdGlwbGVzIHJhbmdvcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNyBhZGQtaW50ZXJhY3RpdmUuYzoxMDUyCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAic2VsZWNjaW9uYXIgb2JqZXRvIGJhc2FkbyBlbiBwcmVmaWpvIMO6bmljbyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOQorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAicXVpdGFyIG9iamV0b3MgZXNwZWNpZmljYWRvcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMQorbXNnaWQgImNob29zZSBhbGwgaXRlbXMiCittc2dzdHIgImVzY29nZXIgdG9kb3MgbG9zIG9iamV0b3MiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTMKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIih2YWPDrW8pIGZpbmFsaXphciBzZWxlY2Npw7NuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDUwCittc2dpZCAic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIKK21zZ3N0ciAic2VsZWNjaW9uYSB1biBvYmpldG8gbnVtZXJhZG8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTQKK21zZ2lkICIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIodmFjw61vKSBzZWxlY2Npb25hIG5hZGEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjIgYnVpbHRpbi9jbGVhbi5jOjgyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NTEKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIqKiogQ29tYW5kb3MgKioqIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDYzIGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODQ4Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIkFob3JhIHF1ZSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAicmFzdHJlYWRvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgIm5vIHJhc3RyZWFkbyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBhcHBseS5jOjQ5NjUgYXBwbHkuYzo0OTY4IGJ1aWx0aW4vYW0uYzoyMTk3CisjOiBidWlsdGluL2FtLmM6MjIwMCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzMgYnVpbHRpbi9wdWxsLmM6MjA5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICJydXRhIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTIyCittc2dpZCAiY291bGQgbm90IHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGluZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAiQWRpw7NzLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiwr9DYW1iaW8gZGUgbW9kbyBkZSBzdGFnZSBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBzdGFnZSBhbCBib3JyYWRvIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBzdGFnZSBhIGVzdGUgaHVuayBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyIGh1bmsgaGVhZGVyICclLipzJyIKKworIzogYWRkLXBhdGNoLmM6MTMwIGFkZC1wYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyIGh1bmsgaGVhZGVyICclLipzJyIKKworIzogYWRkLXBhdGNoLmM6MTc2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGRpZmYiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyIGRpZmYiCisKKyM6IGFkZC1wYXRjaC5jOjE5NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgZGlmZiBhIGNvbG9yZXMiCisKKyM6IGFkZC1wYXRjaC5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgY29udGV4dCBsaW5lICMlZCBpblxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJzZSBlc3BlcmFiYSBsw61uZWEgZGUgY29udGV4dG8gIyVkIGVuXG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJodW5rcyBkbyBub3Qgb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiIKKyIlLipzIgorbXNnc3RyICIiCisiaHVua3Mgbm8gaGFjZW4gb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRubyBhY2FiYSBjb246XG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6Nzk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICJNb2RvIGRlIGVkaWNpw7NuIG1hbnVhbCBkZSBodW5rIC0tIHZlYSBhYmFqbyBwYXJhIHVuYSBndcOtYSByw6FwaWRhLlxuIgorCisjOiBhZGQtcGF0Y2guYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyJQYXJhIGVsaW1pbmFyICclYycgbMOtbmVhcywgaGFnYSBkZSBlbGxhcyBsw61uZWFzICAnICcgIChjb250ZXh0bykuXG4iCisiUGFyYSBlbGltaW5hciAnJWMnIGzDrW5lYXMsIGLDs3JyZWxhcy5cbiIKKyJMaW5lYXMgY29tZW56YW5kbyBjb24gICVjIHNlcsOhbiBlbGltaW5hZGFzLlxuIgorCisjOiBhZGQtcGF0Y2guYzo4MTAKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuXG4iCittc2dzdHIgIiIKKyJTaSBlbCBwYXJjaGUgYXBsaWNhIGxpbXBpYW1lbnRlLCBlbCBodW5rIGVkaXRhZG8gc2VyYSBtYXJjYWRvXG4iCisiaW5tZWRpYXRhbWVudGUgcGFyYSBlbCDDoXJlYSBkZSBzdGFnZS5cbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogYWRkLXBhdGNoLmM6ODE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTEyNgorbXNnaWQgIiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorIlNpIGVzdG8gbm8gYXBsaWNhIGRlIG1hbmVyYSBsaW1waWEsIHNlIHRlIGRhIGxhIG9wb3J0dW5pZGFkIGRlIFxuIgorImVkaXRhciBudWV2YW1lbnRlLiBTaSB0b2RhcyBsYXMgbMOtbmVhcyBkZWwgaHVuayBzb24gZWxpbWluYWRhcywgZW50b25jZXMgXG4iCisibGEgZWRpY2nDs24gZXMgYWJvcnRhZGEgeSBlbCBodW5rIHF1ZWRhIHNpbiBjYW1iaW9zLlxuIgorCisjOiBhZGQtcGF0Y2guYzo4NTEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyIGh1bmsgaGVhZGVyIgorCisjOiBhZGQtcGF0Y2guYzo4OTUgYWRkLXBhdGNoLmM6MTI5NAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzICdnaXQgYXBwbHkgLS1jYWNoZWQnIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6OTUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIlR1IGh1bmsgZWRpdGFkbyBubyBhcGxpY2EuIMK/RWRpdGFyIG51ZXZhbWVudGUgKMKhZGVjaXIgXCJub1wiIGRlc2NhcnRhISkgW3kvIgorIm5dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjEwMDkKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG5vciBhbnkgb2YgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgc3RhZ2UgYSBlc3RlIGh1bmtcbiIKKyJuIC0gbm8gYXBsaWNhciBzdGFnZSBhIGVzdGUgaHVua1xuIgorInEgLSBxdWl0OyBubyBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgc3RhZ2UgYSBlc3RlIGh1bmsgeSBhIHRvZG9zIGxvcyBwb3N0ZXJpb3JlcyBlbiBlbCBhcmNoaXZvIFxuIgorImQgLSBubyBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIG8gYSBuaW5ndW5vIGRlIGxvcyBwb3N0ZXJpb3JlcyBlbiBlc3RlICIKKyJhcmNoaXZvXG4iCisKKyM6IGFkZC1wYXRjaC5jOjEwMTYKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJqIC0gZGVqYSBlc3RlIGh1bmsgc2luIGRlY2lkaXIsIHZlciBlbCBzaWd1aWVudGUgaHVuayBzaW4gZGVjaXNpw7NuXG4iCisiSiAtIGRlamEgZXN0ZSBodW5rIHNpbiBkZWNpZGlyLCB2ZXIgc2lndWllbnRlIGh1bmtcbiIKKyJrIC0gZGVqYSBlc3RlIGh1bmsgc2luIGRlY2lkaXIsIHZlciBodW5rIHByZXZpbyBzaW4gZGVjaWRpclxuIgorIksgLSBkZWphIGVzdGUgaHVuayBzaW4gZGVjaWRpciwgdmVyIGh1bmsgYW50ZXJpb3JcbiIKKyJnIC0gc2VsZWNjaW9uYSB1biBodW5rIGEgZMOzbmRlIGlyXG4iCisiLyAtIGJ1c2NhciB1biBodW5rIHF1ZSBjdW1wbGEgY29uIGVsIHJlZ2V4IGRhZG9cbiIKKyJzIC0gc2VwYXJhciBlbCBodW5rIGFjdHVhbCBlbiBtw6FzIHBlcXVlw7Fvc1xuIgorImUgLSBlZGl0YXIgbWFudWFsbWVudGUgZWwgaHVuayBhY3R1YWxcbiIKKyI/IC0gaW1wcmltaXIgYXl1ZGFcbiIKKworIzogYWRkLXBhdGNoLmM6MTEzNyBhZGQtcGF0Y2guYzoxMTQ3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAiTm8gZWwgYW50ZXJpb3IgaHVuayIKKworIzogYWRkLXBhdGNoLmM6MTE0MiBhZGQtcGF0Y2guYzoxMTUyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICJObyBlbCBzaWd1aWVudGUgaHVuayIKKworIzogYWRkLXBhdGNoLmM6MTE1OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIk5vIGhheSBtw6FzIHBlZGF6b3MgcGFyYSBlbCBpciIKKworIzogYWRkLXBhdGNoLmM6MTE2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAiwr9hIHF1ZSBodW5rIGlyICg8ZW50ZXI+IHBhcmEgdmVyIG3DoXMpPyAiCisKKyM6IGFkZC1wYXRjaC5jOjExNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICLCv2EgcXVlIGh1bmsgaXI/ICIKKworIzogYWRkLXBhdGNoLmM6MTE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAiTnVtZXJvIGludsOhbGlkbzogJyVzJyIKKworIzogYWRkLXBhdGNoLmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS4iCittc2dzdHJbMF0gIkxvIHNpZW50bywgc29sbyAlZCBodW5rIGRpc3BvbmlibGUuIgorbXNnc3RyWzFdICJMbyBzaWVudG8sIHNvbG8gJWQgaHVua3MgZGlzcG9uaWJsZXMuIgorCisjOiBhZGQtcGF0Y2guYzoxMTk1Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIgorbXNnc3RyICJObyBoYXkgbcOhcyBwZWRhem9zIHBhcmEgYnVzY2FyIgorCisjOiBhZGQtcGF0Y2guYzoxMjAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAiwr9idXNjYXIgcGFyYSByZWdleHA/ICIKKworIzogYWRkLXBhdGNoLmM6MTIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXMiCittc2dzdHIgIlJlZ2V4cCBwYXJhIGxhIGLDunNxdWVkYSBtYWwgZm9ybWFkbyAlczogJXMiCisKKyM6IGFkZC1wYXRjaC5jOjEyMzMKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iCittc2dzdHIgIk5vIGhheSBodW5rcyBxdWUgY29uY3VlcmRlbiBjb24gZWwgcGF0csOzbiBlbnRyZWdhZG8uIgorCisjOiBhZGQtcGF0Y2guYzoxMjQwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIlBlcmTDs24sIG5vIHNlIHB1ZWRlIGRpdmlkaXIgZXN0ZSBwZWRhem8iCisKKyM6IGFkZC1wYXRjaC5jOjEyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIkNvcnRhciBlbiAlZCBodW5rLiIKKworIzogYWRkLXBhdGNoLmM6MTI0OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgIlBlcmTDs24sIG5vIHNlIHB1ZWRlIGVkaXRhciBlc3RlIHBlZGF6byIKKworIzogYWR2aWNlLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaGludDogJS4qcyVzXG4iCittc2dzdHIgIiVzYXl1ZGE6ICUuKnMlc1xuIgorCisjOiBhZHZpY2UuYzoxNjQKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJObyBlcyBwb3NpYmxlIGVqZWN1dGFyIGNoZXJyeS1waWNraW5nIHBvcnF1ZSB0aWVuZXMgYXJjaGl2b3Mgc2luIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTY2Cittc2dpZCAiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk5vIGVzIHBvc2libGUgcmVhbGl6YXIgdW4gY29tbWl0IHBvcnF1ZSB0aWVuZXMgYXJjaGl2b3Mgc2luIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTY4Cittc2dpZCAiTWVyZ2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk5vIGVzIHBvc2libGUgaGFjZXIgbWVyZ2UgcG9ycXVlIHRpZW5lcyBhcmNoaXZvcyBzaW4gZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSBoYWNlciBwdWxsIHBvcnF1ZSB0aWVuZXMgYXJjaGl2b3Mgc2luIGZ1c2lvbmFyLiIKKworIzogYWR2aWNlLmM6MTcyCittc2dpZCAiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSByZXZlcnRpciBwb3JxdWUgdGllbmVzIGFyY2hpdm9zIHNpbiBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk5vIGVzIHBvc2libGUgJXMgcG9ycXVlIHRpZW5lcyBhcmNoaXZvcyBzaW4gZnVzaW9uYXIuIgorCisjOiBhZHZpY2UuYzoxODIKK21zZ2lkICIiCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICIiCisiQ29ycsOtZ2Vsb3MgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8geSBlbnRvbmNlcyB1c2EgJ2dpdCBhZGQvcm0gPGFyY2hpdm8+JyxcbiIKKyJjb21vIHNlYSBhcHJvcGlhZG8sIHBhcmEgbWFyY2FyIGxhIHJlc29sdWNpw7NuIHkgcmVhbGl6YXIgdW4gY29tbWl0LiIKKworIzogYWR2aWNlLmM6MTkwCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIgorbXNnc3RyICJTYWxpZW5kbyBwb3JxdWUgZXhpc3RlIHVuIGNvbmZsaWN0byBzaW4gcmVzb2x2ZXIuIgorCisjOiBhZHZpY2UuYzoxOTUgYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIk5vIGhhcyBjb25jbHVpZG8gdHUgZnVzacOzbiAoTUVSR0VfSEVBRCBleGlzdGUpLiIKKworIzogYWR2aWNlLmM6MTk3Cittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiUG9yIGZhdm9yLCByZWFsaXphIHVuIGNvbW1pdCBhbnRlcyBkZSBmdXNpb25hci4iCisKKyM6IGFkdmljZS5jOjE5OAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAiU2FsaWVuZG8gcG9yIHVuYSBmdXNpw7NuIGluY29uY2x1c2EuIgorCisjOiBhZHZpY2UuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgorIlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCisiT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byAiCisiZmFsc2VcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vdGE6IGNhbWJpYW5kbyBhICclcycuXG4iCisiXG4iCisiVGUgZW5jdWVudHJhcyBlbiBlc3RhZG8gJ2RldGFjaGVkIEhFQUQnLiBQdWVkZXMgcmV2aXNhciBwb3IgYXF1w60sIGhhY2VyXG4iCisiY2FtYmlvcyBleHBlcmltZW50YWxlcyB5IGhhY2VyIGNvbW1pdHMsIHkgcHVlZGVzIGRlc2NhcnRhciBjdWFscXVpZXJcbiIKKyJjb21taXQgcXVlIGhheWFzIGhlY2hvIGVuIGVzdGUgZXN0YWRvIHNpbiBpbXBhY3RhciBhIHR1IHJhbWEgcmVhbGl6YW5kb1xuIgorIm90cm8gY2hlY2tvdXQuXG4iCisiXG4iCisiU2kgcXVpZXJlcyBjcmVhciB1bmEgbnVldmEgcmFtYSBwYXJhIG1hbnRlbmVyIGxvcyBjb21taXRzIHF1ZSBoYXMgY3JlYWRvLFxuIgorInB1ZWRlcyBoYWNlcmxvIChhaG9yYSBvIGRlc3B1w6lzKSB1c2FuZG8gLWMgY29uIGVsIGNvbWFuZG8gY2hlY2tvdXQuICIKKyJFamVtcGxvOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA8bm9tYnJlLWRlLW51ZXZhLXJhbWE+XG4iCisiXG4iCisiTyBkZXNoYWNlciBsYSBvcGVyYWNpw7NuIGNvbjpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIkRlc2FjdGl2YSBlc3RlIGF2aXNvIHBvbmllbmRvIGxhIHZhcmlhYmxlIGRlIGNvbmZpZyBhZHZpY2UuZGV0YWNoZWRIZWFkIGVuICIKKyJmYWxzZVxuIgorIlxuIgorCisjOiBhbGlhcy5jOjUwCittc2dpZCAiY21kbGluZSBlbmRzIHdpdGggXFwiCittc2dzdHIgImNtZGxpbmUgdGVybWluYSBlbiBcXCIKKworIzogYWxpYXMuYzo1MQorbXNnaWQgInVuY2xvc2VkIHF1b3RlIgorbXNnc3RyICJjb21pbGxhcyBpbmNvbXBsZXRhcyIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib3BjacOzbiBkZSBlc3BhY2lvcyBlbiBibGFuY28gbm8gcmVjb25vY2lkYSAnJXMnIgorCisjOiBhcHBseS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib3BjacOzbiBkZSBpZ25vcmFyIGVzcGFjaW9zIGVuIGJsYW5jbyBubyByZWNvbm9jaWRhICclcyciCisKKyM6IGFwcGx5LmM6MTM1Cittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0IHkgLS0zd2F5IG5vIHNlIHB1ZWRlbiB1dGlsaXphciBqdW50YXMuIgorCisjOiBhcHBseS5jOjEzNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCB5IC0tM3dheSBubyBzZSBwdWVkZW4gdXRpbGl6YXIganVudGFzLiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSBlc3TDoSBmdWVyYSBkZSB1biByZXBvc2l0b3JpbyIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IGVzdMOhIGZ1ZXJhIGRlIHVuIHJlcG9zaXRvcmlvIgorCisjOiBhcHBseS5jOjE1NAorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCBlc3TDoSBmdWVyYSBkZSB1biByZXBvc2l0b3JpbyIKKworIzogYXBwbHkuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcHJlcGFyYXIgdW5hIG1hcmNhIGRlIHRpZW1wbyBwYXJhIGxhIGV4cHJlc2nDs24gcmVndWxhciAlcyIKKworIzogYXBwbHkuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIGRldm9sdmnDsyAlZCBwYXJhIGxhIGVudHJhZGE6ICVzIgorCisjOiBhcHBseS5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICIiCisibm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIG5vbWJyZSBkZWwgYXJjaGl2byBlbiBlbCBwYXJjaGUgZW4gbGEgbMOtbmVhICVkIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycsOzbmVvIC0gc2UgZXNwZXJhYmEgL2Rldi9udWxsLCBzZSBlbmNvbnRyw7MgJXMgZW4gIgorImxhbMOtbmVhICVkIgorCisjOiBhcHBseS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyw7NuZW8gLSBudWV2byBub21icmUgZGUgYXJjaGl2byBpbmNvbnNpc3RlbnRlIGVuICIKKyJsYWzDrW5lYSAlZCIKKworIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycsOzbmVvIC0gdmllam8gbm9tYnJlIGRlIGFyY2hpdm8gaW5jb25zaXN0ZW50ZSBlbiAiCisibGFsw61uZWEgJWQiCisKKyM6IGFwcGx5LmM6OTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyw7NuZW8gLSBzZSBlc3BlcmFiYSAvZGV2L251bGwgZW4gbGEgbMOtbmVhICVkIgorCisjOiBhcHBseS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgIm1vZG8gaW52w6FsaWRvIGVuIGxhIGzDrW5lYSAlZDogJXMiCisKKyM6IGFwcGx5LmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIKK21zZ3N0ciAiaGVhZGVyIGluY29uc2lzdGVudGUgZW4gbGFzIGzDrW5lYXMgJWQgeSAlZCIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIiIKKyJhbCBoZWFkZXIgZGUgZ2l0IGRpZmYgY2FyZWNlIGRlIGluZm9ybWFjacOzbiBkZWwgbm9tYnJlIGRlbCBhcmNoaXZvICVkIGN1YW5kbyAiCisibG8gZWxpbWluYSBkZSBsYSBydXRhIHByaW5jaXBhbCBjb21wb25lbnRlIChsw61uZWEgJWQpIgorbXNnc3RyWzFdICIiCisibG9zIGhlYWRlcnMgZGUgZ2l0IGRpZmYgY2FyZWNlbiBkZSBpbmZvcm1hY2nDs24gZGUgbG9zIG5vbWJyZXMgZGUgbG9zICIKKyJhcmNoaXZvcyAlZCBjdWFuZG8gbG9zIGVsaW1pbmFuIGRlIGxhIHJ1dGEgcHJpbmNpcGFsIGNvbXBvbmVudGVzIChsw61uZWEgJWQpIgorCisjOiBhcHBseS5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lICVkKSIKK21zZ3N0ciAiIgorImxhIGNhYmVjZXJhIGRlIGdpdCBkaWZmIGNhcmVjZSBkZSBpbmZvcm1hY2nDs24gZGVsIG5vbWJyZSBkZWwgYXJjaGl2byAobMOtbmVhICVkKSIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudDogbMOtbmVhIGluZXNwZXJhZGE6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJmcmFnbWVudG8gZGUgcGFyY2hlIHNpbiBoZWFkZXIgZW4gbGEgbMOtbmVhICVkOiAlLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiZWwgbnVldm8gYXJjaGl2byBkZXBlbmRlIGRlIGNvbnRlbmlkb3Mgdmllam9zIgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJlbCBhcmNoaXZvIGVsaW1pbmFkbyB0b2RhdsOtYSB0aWVuZSBjb250ZW5pZG8iCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBhcmNoZSBjb3JydXB0byBlbiBsYSBsw61uZWEgJWQiCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibnVldm8gYXJjaGl2byAlcyBkZXBlbmRlIGVuIGNvbnRlbmlkb3Mgdmllam9zIgorCisjOiBhcHBseS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiZWwgYXJjaGl2byBib3JyYWRvICVzIHRvZGF2w61hIHRpZW5lIGNvbnRlbmlkbyIKKworIzogYXBwbHkuYzoxODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIHBlbGlncm86IGVsIGFyY2hpdm8gJXMgZXN0w6EgdmFjw61vIHBlcm8gbm8gZXMgYm9ycmFkbyIKKworIzogYXBwbHkuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgInBhcmNoZSBiaW5hcmlvIGNvcnJ1cHRvIGVuIGxhIGzDrW5lYSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGFyY2hlIGJpbmFyaW8gbm8gcmVjb25vY2lkbyBlbiBsYSBsw61uZWEgJWQiCisKKyM6IGFwcGx5LmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICJwYXJjaGUgcXVlIHNvbG8gY29udGllbmUgYmFzdXJhIGVuIGxhIGzDrW5lYSAlZCIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgbGVlciBlbCBlbmxhY2Ugc2ltYsOzbGljbyAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWJyaXIgbyBsZWVyICVzIgorCisjOiBhcHBseS5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICJjb21pZW56byBpbnbDoWxpZG8gZGUgbMOtbmVhOiAnJWMnIgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICJIdW5rICMlZCB0dXZvIMOpeGl0byBlbiAlZCAoJWQgbMOtbmVhIGNvbXBlbnNhZGEpLiIKK21zZ3N0clsxXSAiSHVuayAjJWQgdHV2byDDqXhpdG8gZW4gJWQgKCVkIGzDrW5lYXMgY29tcGVuc2FkYXMpLiIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIkNvbnRleHRvIHJlZHVjaWRvIGEgKCVsZC8lbGQpIHBhcmEgYXBsaWNhciBlbCBmcmFnbWVudG8gZW4gJWQiCisKKyM6IGFwcGx5LmM6MzA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisibWllbnRyYXMgc2UgYnVzY2E6XG4iCisiJS4qcyIKKworIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImRhdGEgcGVyZGlkYSBlbiBwYXJjaGUgYmluYXJpbyBwYXJhICclcyciCisKKyM6IGFwcGx5LmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIHJldmVydGlyLWFwbGljYXIgdW4gcGFyY2hlIGJpbmFyaW8gc2luIGVsIGh1bmsgcmV2ZXJ0aWRvIGEgJyVzJyIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYXBsaWNhciBlbCBwYXJjaGUgYmluYXJpbyBhICclcycgc2luIHVuIMOtbmRpY2UgY29tcGxldG8iCisKKyM6IGFwcGx5LmM6MzE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIiIKKyJlbCBwYXJjaGUgYXBsaWNhIGEgJyVzJyAoJXMpLCBsbyBjdWFsIG5vIGNvbmN1ZXJkYSBjb24gbG9zIGNvbnRlbmlkb3MgIgorImFjdHVhbGVzLiIKKworIzogYXBwbHkuYzozMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAiZWwgcGFyY2hlIGFwbGljYSBhIHVuICclcycgdmFjw61vLCBwZXJvIGVzdGUgbm8gbG8gZXN0YSIKKworIzogYXBwbHkuYzozMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJsYSBwb3N0aW1hZ2VuIG5lY2VzYXJpYSAlcyBwYXJhICclcycgbm8gc2UgcHVlZGUgbGVlciIKKworIzogYXBwbHkuYzozMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJlbCBwYXJjaGUgYmluYXJpbyBubyBhcGxpY2EgcGFyYSAnJXMnIgorCisjOiBhcHBseS5jOjMyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJlbCBwYXJjaGUgYmluYXJpbyBwYXJhICclcycgY3JlYSB1biByZXN1bHRhZG8gaW5jb3JyZWN0byAoc2FsaWVuZG8gJXMsIHNlICIKKyJvYnR1dm8gJXMpIgorCisjOiBhcHBseS5jOjMyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgImVsIHBhcmNoZSBmYWxsw7M6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaGFjZXIgY2hlY2tvdXQgYSAlcyIKKworIzogYXBwbHkuYzozNDAzIGFwcGx5LmM6MzQxNCBhcHBseS5jOjM0NjAgbWlkeC5jOjYxIHNldHVwLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgJXMiCisKKyM6IGFwcGx5LmM6MzQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJsZXllbmRvIGRlICclcycgdHJhcyB1biBlbmxhY2Ugc2ltYsOzbGljbyIKKworIzogYXBwbHkuYzozNDQwIGFwcGx5LmM6MzY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAibGEgcnV0YSAlcyBoYSBzaWRvIHJlbm9tYnJhZGEvc3VwcmltaWRhIgorCisjOiBhcHBseS5jOjM1MjYgYXBwbHkuYzozNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IG5vIGV4aXN0ZSBlbiBlbCDDrW5kaWNlIgorCisjOiBhcHBseS5jOjM1MzUgYXBwbHkuYzozNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG5vIGNvbmN1ZXJkYSBjb24gZWwgw61uZGljZSIKKworIzogYXBwbHkuYzozNTcwCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorImVsIHJlcG9zaXRvcmlvIGNhcmVjZSBkZWwgYmxvYiBuZWNlc2FyaW8gcGFyYSByZWdyZXNhciBlbiB1biBtZXJnZSBkZSB0cmVzLSIKKyJ2w61hcy4iCisKKyM6IGFwcGx5LmM6MzU3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIlJldHJvY2VkaWVuZG8gZW4gdW4gbWVyZ2UgZGUgdHJlcy12w61hcy4uLlxuIgorCisjOiBhcHBseS5jOjM1ODkgYXBwbHkuYzozNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlbiBsZWVyIGxvcyBjb250ZW5pZG9zIGFjdHVhbGVzIGRlICclcyciCisKKyM6IGFwcGx5LmM6MzYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJGYWxsw7MgZWwgbWVyZ2UgZW4gcmV0cm9jZXNvIGRlIHRyZXMtdsOtYXMuLi5cbiIKKworIzogYXBwbHkuYzozNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAiUGFyY2hlIGFwbGljYWRvIGEgJyVzJyBjb24gY29uZmxpY3Rvcy5cbiIKKworIzogYXBwbHkuYzozNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICJQYXJjaGUgYXBsaWNhZG8gYSAnJXMnIGxpbXBpYW1lbnRlXG4iCisKKyM6IGFwcGx5LmM6MzY1MAorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgInBhcmNoZSBkZSBlbGltaW5hY2nDs24gZGVqYSBjb250ZW5pZG9zIGVuIGVsIGFyY2hpdm8iCisKKyM6IGFwcGx5LmM6MzcyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IHRpcG8gaW5jb3JyZWN0byIKKworIzogYXBwbHkuYzozNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgdGllbmUgdGlwbyAlbywgc2UgZXNwZXJhYmEgJW8iCisKKyM6IGFwcGx5LmM6Mzg3NiBhcHBseS5jOjM4NzggcmVhZC1jYWNoZS5jOjgzMCByZWFkLWNhY2hlLmM6ODU2CisjOiByZWFkLWNhY2hlLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAicnV0YSBpbnbDoWxpZGEgJyVzJyIKKworIzogYXBwbHkuYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IHlhIGV4aXN0ZSBlbiBlbCDDrW5kaWNlIgorCisjOiBhcHBseS5jOjM5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogeWEgZXhpc3RlIGVuIGVsIGRpcmVjdG9yaW8gZGUgdHJhYmFqbyIKKworIzogYXBwbHkuYzozOTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAibnVldm8gbW9kbyAoJW8pIGRlICVzIG5vIGNvbmN1ZXJkYSBjb24gZWwgdmllam8gbW9kbyAoJW8pIgorCisjOiBhcHBseS5jOjM5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJudWV2byBtb2RvICglbykgZGUgJXMgbm8gY29uY3VlcmRhIGNvbiBlbCB2aWVqbyBtb2RvICglbykgZGUgJXMiCisKKyM6IGFwcGx5LmM6Mzk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiYXJjaGl2byBhZmVjdGFkbyAnJXMnIGVzdMOhIHRyYXMgdW4gZW5sYWNlIHNpbWLDs2xpY28iCisKKyM6IGFwcGx5LmM6Mzk4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiBlbCBwYXJjaGUgbm8gYXBsaWNhIgorCisjOiBhcHBseS5jOjQwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIlJldmlzYW5kbyBlbCBwYXJjaGUgJXMuLi4iCisKKyM6IGFwcGx5LmM6NDA5MworIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJmYWx0YSBpbmZvcm1hY2nDs24gZGVsIHNoYTEgbyBlcyBpbsO6dGlsIHBhcmEgZWwgc3VibcOzZHVsbyAlcyIKKworIzogYXBwbHkuYzo0MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAibW9kbyBjYW1iaWFkbyBwYXJhICVzLCBlbCBjdWFsIG5vIHNlIGVuY3VlbnRyYSBlbiBlbCBIRUFEIGFjdHVhbCIKKworIzogYXBwbHkuYzo0MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzICglcykuIgorbXNnc3RyICJmYWx0YSBpbmZvcm1hY2nDs24gc2hhMSBvIGVzIGluw7p0aWwgKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVkbyBhw7FhZGlyICVzIGFsIMOtbmRpY2UgdGVtcG9yYWwiCisKKyM6IGFwcGx5LmM6NDEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGVzY3JpYmlyIHVuIMOtbmRpY2UgdGVtcG9yYWwgcGFyYSAlcyIKKworIzogYXBwbHkuYzo0MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZWxpbWluYXIgJXMgZGVsIMOtbmRpY2UiCisKKyM6IGFwcGx5LmM6NDI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgInBhcmNoZSBjb3JydXB0byBwYXJhIGVsIHN1Ym3Ds2R1bG8gJXMiCisKKyM6IGFwcGx5LmM6NDMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc3RhYmxlY2VyIGVsIGFyY2hpdm8gcmVjacOpbiBjcmVhZG8gJyVzJyIKKworIzogYXBwbHkuYzo0MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisibm8gZXMgcG9zaWJsZSBjcmVhciB1bmEgY29waWEgZGUgc2VndXJpZGFkIHBhcmEgZWwgYXJjaGl2byByZWNpw6luIGNyZWFkbyAlcyIKKworIzogYXBwbHkuYzo0MzE0IGFwcGx5LmM6NDQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhZ3JlZ2FyIHVuYSBlbnRyYWRhIGVuIGVsIGNhY2hlIHBhcmEgJXMiCisKKyM6IGFwcGx5LmM6NDM1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGVzY3JpYmlyIHBhcmEgJyVzJyIKKworIzogYXBwbHkuYzo0MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJjZXJyYW5kbyBhcmNoaXZvICclcyciCisKKyM6IGFwcGx5LmM6NDQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIm5vIGVzIHBvc2libGUgZXNjcmliaXIgZWwgYXJjaGl2byAnJXMnIG1vZG8gJW8iCisKKyM6IGFwcGx5LmM6NDUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJQYXJjaGUgJXMgYXBsaWNhZG8gbGltcGlhbWVudGUuIgorCisjOiBhcHBseS5jOjQ1MzcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiZXJyb3IgaW50ZXJubyIKKworIzogYXBwbHkuYzo0NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiQXBsaWNhbmRvIHBhcmNoZSAlJXMgY29uICVkIHJlY2hhem8uLi4iCittc2dzdHJbMV0gIkFwbGljYW5kbyBwYXJjaGUgJSVzIGNvbiAlZCByZWNoYXpvcy4uLiIKKworIzogYXBwbHkuYzo0NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAidHJ1bmNhbmRvIGVsIG5vbWJyZSBkZSBhcmNoaXZvIC5yZWogYSAlLipzLnJlaiIKKworIzogYXBwbHkuYzo0NTU5IGJ1aWx0aW4vZmV0Y2guYzo5MDEgYnVpbHRpbi9mZXRjaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyICVzIgorCisjOiBhcHBseS5jOjQ1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiSHVuayAjJWQgYXBsaWNhZG8gbGltcGlhbWVudGUuIgorCisjOiBhcHBseS5jOjQ1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICJIdW5rICMlZCByZWNoYXphZG8uIgorCisjOiBhcHBseS5jOjQ2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCBwYXRjaCAnJXMnLiIKK21zZ3N0ciAiUGFyY2hlICclcycgc2FsdGFkby4iCisKKyM6IGFwcGx5LmM6NDcwNAorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiaW5wdXQgbm8gcmVjb25vY2lkbyIKKworIzogYXBwbHkuYzo0NzI0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBsZWVyIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogYXBwbHkuYzo0ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIGVsIHBhcmNoZSAnJXMnOiAlcyIKKworIzogYXBwbHkuYzo0OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiVkIGVycm9yIGRlIGVzcGFjaW9zIGVuIGJsYW5jbyBhcGxhc3RhZG8iCittc2dzdHJbMV0gIiVkIGVycm9yZXMgZGUgZXNwYWNpb3MgZW4gYmxhbmNvIGFwbGFzdGFkb3MiCisKKyM6IGFwcGx5LmM6NDkxNCBhcHBseS5jOjQ5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgbMOtbmVhIGFncmVnYSBlcnJvcmVzIGRlIGVzcGFjaW9zIGVuIGJsYW5jby4iCittc2dzdHJbMV0gIiVkIGzDrW5lYXMgYWdyZWdhbiBlcnJvcmVzIGRlIGVzcGFjaW9zIGVuIGJsYW5jby4iCisKKyM6IGFwcGx5LmM6NDkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIiCisiJWQgbMOtbmVhIGFwbGljYWRhIGRlc3B1w6lzIGRlIGFycmVnbGFyIGxvcyBlcnJvcmVzIGRlIGVzcGFjaW9zIGVuIGJsYW5jby4iCittc2dzdHJbMV0gIiIKKyIlZCBsw61uZWFzIGFwbGljYWRhcyBkZXNwdcOpcyBkZSBhcnJlZ2xhciBsb3MgZXJyb3JlcyBkZSBlc3BhY2lvcyBlbiBibGFuY28uIgorCisjOiBhcHBseS5jOjQ5MzggYnVpbHRpbi9hZGQuYzo1NzkgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6MzkwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIGVzY3JpYmlyIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogYXBwbHkuYzo0OTY2Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAibm8gYXBsaWNhciBjYW1iaW9zIHF1ZSBjb25jdWVyZGVuIGNvbiBsYSBydXRhIHN1bWluaXN0cmFkYSIKKworIzogYXBwbHkuYzo0OTY5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiYXBsaWNhciBjYW1iaW9zIHF1ZSBjb25jdWVyZGVuIGNvbiBsYSBydXRhIHN1bWluaXN0cmFkYSIKKworIzogYXBwbHkuYzo0OTcxIGJ1aWx0aW4vYW0uYzoyMjA2Cittc2dpZCAibnVtIgorbXNnc3RyICJudW0iCisKKyM6IGFwcGx5LmM6NDk3MgorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJlbGltaW5hciA8bnVtPiBzbGFzaGVzIGluaWNpYWxlcyBkZSBsYXMgcnV0YXMgZGlmZiB0cmFkaWNpb25hbGVzIgorCisjOiBhcHBseS5jOjQ5NzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJpZ25vcmFyIGFkaWNpb25lcyBoZWNoYXMgcG9yIGVsIHBhcmNoZSIKKworIzogYXBwbHkuYzo0OTc3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJlbiBsdWdhciBkZSBhcGxpY2FyIGVsIHBhcmNoZSwgbW9zdHJhciBkaWZmc3RhdCBwYXJhIGxhIGVudHJhZGEiCisKKyM6IGFwcGx5LmM6NDk4MQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIm1vc3RyYXIgZWwgbnVtZXJvIGRlIGzDrW5lYXMgYWdyZWdhZGFzIHkgZWxpbWluYWRhcyBlbiBub3RhY2nDs24gZGVjaW1hbCIKKworIzogYXBwbHkuYzo0OTgzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiZW4gbHVnYXIgZGUgYXBsaWNhciBlbCBwYXJjaGUsIG1vc3RyYXIgdW4gcmVzdW1lbiBwYXJhIGxhIGVudHJhZGEiCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgImVuIGx1Z2FyIGRlIGFwbGljYXIgZWwgcGFyY2hlLCB2ZXIgc2kgZWwgcGFyY2hlIGVzIGFwbGljYWJsZSIKKworIzogYXBwbHkuYzo0OTg3Cittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJhc2VndXJhciBxdWUgZWwgcGFyY2hlIGVzIGFwbGljYWJsZSBhbCDDrW5kaWNlIGFjdHVhbCIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICJtYXJjYSBsb3MgbnVldm9zIGFyY2hpdm9zIGNvbiBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiYXBsaWNhciB1biBwYXJjaGUgc2luIHRvY2FyIGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBhcHBseS5jOjQ5OTMKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICJhY2VwdGFyIHVuIHBhcmNoZSBxdWUgdG9jYSBmdWVyYSBkZWwgw6FyZWEgZGUgdHJhYmFqbyIKKworIzogYXBwbHkuYzo0OTk2Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgInRhbWJpw6luIGFwbGljYXIgZWwgcGFyY2hlICggdXNhciBjb24gLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJpbnRlbnRhciBtZXJnZSBkZSB0cmVzLXbDrWFzIHNpIGVsIHBhcmNoZSBubyBhcGxpY2EiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisiY29uc3RydWlyIHVuIMOtbmRpY2UgdGVtcG9yYWwgYmFzYWRvIGVuIGxhIGluZm9ybWFjacOzbiBkZWwgw61uZGljZSBpbmNydXN0YWRvIgorCisjOiBhcHBseS5jOjUwMDMgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgInJ1dGFzIGVzdMOhbiBzZXBhcmFkYXMgY29uIHVuIGNhcsOhY3RlciBOVUxMIgorCisjOiBhcHBseS5jOjUwMDUKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgImFzZWd1cmFyIHF1ZSBhbCBtZW5vcyBjb25jdWVyZGVuIDxuPiBsw61uZWFzIGRlbCBjb250ZXh0byBjb25jdWVyZGVuIgorCisjOiBhcHBseS5jOjUwMDYgYnVpbHRpbi9hbS5jOjIxODUgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OAorIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDAgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxMCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImFjY2nDs24iCisKKyM6IGFwcGx5LmM6NTAwNworbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisiZGV0ZWN0YXIgbMOtbmVhcyBudWV2YXMgbyBtb2RpZmljYWRhcyBxdWUgY29udGllbmVuIGVycm9yZXMgZGUgZXNwYWNpb3MgZW4gIgorImJsYW5jbyIKKworIzogYXBwbHkuYzo1MDEwIGFwcGx5LmM6NTAxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgIiIKKyJpZ25vcmFyIGNhbWJpb3MgZW4gbG9zIGVzcGFjaW9zIGVuIGJsYW5jbyBjdWFuZG8gc2UgZW5jdWVudHJhIGVsIGNvbnRleHRvIgorCisjOiBhcHBseS5jOjUwMTYKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiYXBsaWNhciBlbCBwYXJjaGUgZW4gcmV2ZXJzYSIKKworIzogYXBwbHkuYzo1MDE4Cittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgIm5vIGVzcGVyYSBhbCBtZW5vcyB1bmEgbMOtbmVhIGRlbCBjb250ZXh0byIKKworIzogYXBwbHkuYzo1MDIwCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgImRlamFyIGxvcyBodW5rcyByZWNoYXphZG9zIGVuIGxvcyBhcmNoaXZvcyAqLnJlaiBjb3JyZXNwb250aWVudGVzIgorCisjOiBhcHBseS5jOjUwMjIKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAicGVybWl0aXIgc29sYXBhbWllbnRvIGRlIGh1bmtzIgorCisjOiBhcHBseS5jOjUwMjMgYnVpbHRpbi9hZGQuYzozMDkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzU1IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJzZXIgdmVyYm9zbyIKKworIzogYXBwbHkuYzo1MDI1Cittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgIiIKKyJ0b2xlcmFyIG51ZXZhcyBsw61uZWFzIGZhbHRhbnRlcyBkZXRlY3RhZGFzIGluY29ycmVjdGFtZW50ZSBhbCBmaW5hbCBkZWwgIgorImFyY2hpdm8iCisKKyM6IGFwcGx5LmM6NTAyOAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAibm8gY29uZmlhciBlbiBlbCBjb250ZW8gZGUgbMOtbmVhcyBlbiBsb3MgaGVhZGVycyBkZWwgaHVuayIKKworIzogYXBwbHkuYzo1MDMwIGJ1aWx0aW4vYW0uYzoyMTk0Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicmHDrXoiCisKKyM6IGFwcGx5LmM6NTAzMQorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgImFudGVwb25lciA8cm9vdD4gYSB0b2RvcyBsb3Mgbm9tYnJlcyBkZSBhcmNoaXZvcyIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzxvcGNpb25lcz5dIDxwYXJ0ZS1kZWwtw6FyYm9sPiBbPHJ1dGE+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjb21hbmRvPiBdIFs8b3BjaW9uZXM+XSA8cGFydGUtZGVsLSIKKyLDoXJib2w+IFs8cnV0YT4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y29tYW5kbz5dIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjM3MiBidWlsdGluL2FkZC5jOjE4MCBidWlsdGluL2FkZC5jOjU1NSBidWlsdGluL3JtLmM6Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgInJ1dGEgZXNwZWNpZmljYWRhICclcycgbm8gY29uY29yZMOzIGNvbiBuaW5ndW5hIGNhcnBldGEiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgIm5vIGV4aXN0ZSBlbCByZWY6ICUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICJub21icmUgZGUgb2JqZXRvIG5vIHbDoWxpZG86ICVzIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAibm8gZXMgdW4gb2JqZXRvIHRyZWU6ICVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgImRpcmVjdG9yaW8gZGUgdHJhYmFqbyBhY3R1YWwgbm8gcmFzdHJlYWRvIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiZm10IgorbXNnc3RyICJmbXQiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0byBkZWwgYXJjaGl2byIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgInByZWZpam8iCisKKyM6IGFyY2hpdmUuYzo0NTkKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICJhbnRlcG9uZXIgcHJlZmlqbyBhIGNhZGEgcnV0YSBlbiBlbCBhcmNoaXZvIgorCisjOiBhcmNoaXZlLmM6NDYwIGJ1aWx0aW4vYmxhbWUuYzo4NjEgYnVpbHRpbi9ibGFtZS5jOjg2NSBidWlsdGluL2JsYW1lLmM6ODY2CisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE3IGJ1aWx0aW4vY29uZmlnLmM6MTI5IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYyCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OCBidWlsdGluL2dyZXAuYzo4OTkKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUgYnVpbHRpbi9scy1maWxlcy5jOjU2MCBidWlsdGluL2xzLWZpbGVzLmM6NTYzCisjOiBidWlsdGluL25vdGVzLmM6NDEyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxOTAKK21zZ2lkICJmaWxlIgorbXNnc3RyICJjYXJwZXRhIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJlc2NyaWJlIGVsIGFyY2hpdm8gZW4gZXN0YSBjYXJwZXRhIgorCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAibGVlciAuZ2l0YXR0cmlidXRlcyBlbiBlbCBkaXJlY3RvcmlvIGRlIHRyYWJham8iCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICJyZXBvcnRhciBhcmNoaXZvcyBhcmNoaXZhZG9zIHBvciBzdGRlcnIiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJzb2xvIGd1YXJkYXIiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgImNvbXByaW1pciBtw6FzIHLDoXBpZG8iCisKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImNvbXByaW1pciBtZWpvciIKKworIzogYXJjaGl2ZS5jOjQ3NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAibGlzdGFyIGxvcyBmb3JtYXRvcyBkZSBjYXJwZXRhIHNvcG9ydGFkb3MiCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NAorbXNnaWQgInJlcG8iCittc2dzdHIgInJlcG8iCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAib2J0ZW5lciBsYSBjYXJwZXRhIGRlbCByZXBvc2l0b3JpbyByZW1vdG8gPHJlcG8+IgorCisjOiBhcmNoaXZlLmM6NDgxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJjb21hbmRvIgorCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICJydXRhIHBhcmEgZWwgY29tYW5kbyBnaXQtdXBsb2FkLWFyY2hpdm8gcmVtb3RvIgorCisjOiBhcmNoaXZlLmM6NDg5Cittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiCittc2dzdHIgIk9wY2nDs24gaW5lc3BlcmFkYSAtLXJlbW90ZSIKKworIzogYXJjaGl2ZS5jOjQ5MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICJPcGNpw7NuIC0tZXhlYyBzb2xvIHB1ZWRlIHNlciB1dGlsaXphZGEgY29uIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIk9wY2nDs24gaW5lc3BlcmFkYSAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIkZvcm1hdG8gZGUgY2FycGV0YSBkZXNjb25vY2lkbyAnJXMnIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIkFyZ3VtZW50byBubyBzb3BvcnRhZG8gcGFyYSBmb3JtYXRvICclcyc6IC0lZCIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSB0cmFuc21pdGlyIGVsIGJsb2IgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgIm1vZG8gZGUgYXJjaGl2byBubyBzb3BvcnRhZG86IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciAlcyIKKworIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb21lbnphciBmaWx0cm8gJyVzJyIKKworIzogYXJjaGl2ZS10YXIuYzo0NjgKK21zZ2lkICJ1bmFibGUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciIKK21zZ3N0ciAiaW5jYXBheiBkZSByZWRpcmlnaXIgZGVzY3JpcHRvciIKKworIzogYXJjaGl2ZS10YXIuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiCittc2dzdHIgImZpbHRybyAnJXMnIHJlcG9ydMOzIHVuIGVycm9yIgorCisjOiBhcmNoaXZlLXppcC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiCittc2dzdHIgInJ1dGEgbm8gdsOhbGlkYSBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICJydXRhIG11eSBsYXJnYSAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6NDc5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiZXJyb3IgYWwgZGVzaW5mbGFyICglZCkiCisKKyM6IGFyY2hpdmUtemlwLmM6NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlPFBSSXVNQVg+IgorbXNnc3RyICJ0aW1lc3RhbXAgbXV5IGxhcmdvIHBhcmEgZXN0ZSBzaXN0ZW1hOiAlPFBSSXVNQVg+IgorCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiUuKnMgbm8gZXMgdW4gbm9tYnJlIGRlIGF0cmlidXRvIHbDoWxpZG8iCisKKyM6IGF0dHIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIgorbXNnc3RyICIlcyBubyBwZXJtaXRpZG86ICVzOiVkIgorCisjOiBhdHRyLmM6NDA5Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisiTG9zIHBhdHJvbmVzIG5lZ2F0aXZvcyBzb24gaWdub3JhZG9zIGVuIGxvcyBhdHJpYnV0b3MgZGUgZ2l0XG4iCisiVXNhICdcXCEnIHBhcmEgY29tZW56YXIgbGl0ZXJhbG1lbnRlIGNvbiBleGNsYW1hY2nDs24uIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiUmV2aXNhIGxhcyBjb21pbGxhcyBlbiBlbCBhcmNoaXZvICclcyc6ICVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICLCoU5vIHBvZGVtb3MgYmlzZWNjaW9uYXIgbcOhcyFcbiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICJObyBlcyB1biBub21icmUgZGUgY29tbWl0IHbDoWxpZG8gJXMiCisKKyM6IGJpc2VjdC5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiTGEgYmFzZSBkZSBmaXNpw7NuICVzIGVzdMOhIG1hbC5cbiIKKyJFc3RvIHF1aWVyZSBkZWNpciBxdWUgZWwgYnVnIGhhIHNpZG8gYXJyZWdsYWRvIGVudHJlICVzIHkgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZpc2nDs24gJXMgZXMgbnVldmEuXG4iCisiRXN0YSBwcm9waWVkYWQgaGEgY2FtYmlhZG8gZW50cmUgJXMgeSBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZpc2nDs24gJXMgZXMgJXMuXG4iCisiRXN0byBxdWllcmUgZGVjaXIgcXVlIGVsIHByaW1lciAnJXMnIGNvbW1pdCBlc3TDoSBlbnRyZSAlcyB5IFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCittc2dzdHIgIiIKKyJBbGd1bmFzICVzIHJldmlzaW9uZXMgbm8gc29uIGFuY2VzdHJvcyBkZSBsYSByZXZpc2nDs24gJXMuXG4iCisiZ2l0IGJpc2VjdCBubyBwdWVkZSB0cmFiYWphciBiaWVuIGVuIGVzdGUgY2Fzby5cbiIKKyLCv1RhbCB2ZXogY29uZnVuZGlzdGUgbGEgcmV2aXNpw7NuICVzIHkgJXM/XG4iCisKKyM6IGJpc2VjdC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisibGEgYmFzZSBkZSBmdXNpw7NuIGVudHJlICVzIHkgWyVzXSB0aWVuZSBxdWUgc2VyIHNhbHRhZGEuXG4iCisiQXPDrSBxdWUgbm8gcG9kZW1vcyBlc3RhciBzZWd1cm9zIHF1ZSBlbCBwcmltZXIgJXMgY29tbWl0IGVzdMOhIGVudHJlJXMgeSAlcy5cbiIKKyJWYW1vcyBhIGNvbnRpbnVhciBkZSB0b2RhcyBtYW5lcmFzLiIKKworIzogYmlzZWN0LmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgIkJpc2VjY2lvbmFuZG86IHVuYSBiYXNlIGRlIGZpc2nDs24gZGViZSBzZXIgcHJvYmFkYVxuIgorCisjOiBiaXNlY3QuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgInVuYSAlcyByZXZpc2nDs24gZXMgbmVjZXNhcmlhIgorCisjOiBiaXNlY3QuYzo4ODQgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBlbCBhcmNoaXZvICclcyciCisKKyM6IGJpc2VjdC5jOjkyOCBidWlsdGluL21lcmdlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGVsIGFyY2hpdm8gJyVzJyIKKworIzogYmlzZWN0LmM6OTU4Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBsZWVyIGxhcyByZWZzIGRlIGJpc2VjdCIKKworIzogYmlzZWN0LmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyBmdWUgdGFudG8gJXMgY29tbyAlc1xuIgorCisjOiBiaXNlY3QuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyJObyBzZSBlbmNvbnRyw7MgY29tbWl0IHF1ZSBzZSBwdWVkYSBwcm9iYXIuXG4iCisiwr9RdWl6w6FzIGluaWNpYXN0ZSBjb24gcGFyw6FtZXRyb3MgZGUgcnV0YXMgaW5jb3JyZWN0b3M/XG4iCisKKyM6IGJpc2VjdC5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJvdWdobHkgJWQgc3RlcCkiCittc2dpZF9wbHVyYWwgIihyb3VnaGx5ICVkIHN0ZXBzKSIKK21zZ3N0clswXSAiKGFwcm94aW1hZGFtZW50ZSAlZCBwYXNvKSIKK21zZ3N0clsxXSAiKGFwcm94aW1hZGFtZW50ZSAlZCBwYXNvcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJCaXNlY2Npb25hbmRvOiBmYWx0YSAlZCByZXZpc2nDs24gcG9yIHByb2JhciBkZXNwdcOpcyBkZSBlc3RvICVzXG4iCittc2dzdHJbMV0gIkJpc2VjY2lvbmFuZG86IGZhbHRhbiAlZCByZXZpc2lvbmVzIHBvciBwcm9iYXIgZGVzcHXDqXMgZGUgZXN0byAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIHkgLS1yZXZlcnNlIG5vIHNlIG1lemNsYW4gYmllbi4iCisKKyM6IGJsYW1lLmM6MjcxNAorbXNnaWQgImNhbm5vdCB1c2UgLS1jb250ZW50cyB3aXRoIGZpbmFsIGNvbW1pdCBvYmplY3QgbmFtZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgdXNhciAtLWNvbnRlbnRzIGNvbiBlbCBub21icmUgZGUgb2JqZXRvIGNvbW1pdCBmaW5hbCIKKworIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICIiCisiLS1yZXZlcnNlIHkgLS1maXJzdC1wYXJlbnQganVudG9zIHJlcXVpZXJlbiBlc3BlY2lmaWNhciBlbCDDumx0aW1vIGNvbW1pdCIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQxIHNlcXVlbmNlci5jOjIwOTMKKyM6IHNlcXVlbmNlci5jOjQ0NjAgYnVpbHRpbi9jb21taXQuYzoxMDQwIGJ1aWx0aW4vbG9nLmM6Mzg4IGJ1aWx0aW4vbG9nLmM6OTkxCisjOiBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNSBidWlsdGluL21lcmdlLmM6NDExCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQzCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBsYSBjb25maWd1cmFjacOzbiBkZWwgY2FtaW5vIGRlIHJldmlzacOzbiIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCBqdW50b3MgcmVxdWllcmVuIHVuIHJhbmdvIGEgbG8gbGFyZ28gZGUgbGEgY2FkZW5hICIKKyJkZWwgcHJpbWVyIHBhZHJlIgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICJubyBoYXkgdW5hIHJ1dGEgJXMgZW4gJXMiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIGJsb2IgJXMgcGFyYSBsYSBydXRhICVzIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKK21zZ3N0ciAiIgorIlxuIgorIlRyYXMgYXJyZWdsYXIgbGEgY2F1c2EgZGVsIGVycm9yIHB1ZWRlcyBpbnRlbnRhciBhcnJlZ2xhclxuIgorImxhIGluZmFtYWNpw7NuIGRlbCByYXN0cmVvIHJlbW90byBpbnZvY2FuZG9cbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorCisjOiBicmFuY2guYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgIkxhIHJhbWEgJXMgbm8gc2UgY29uZmlndXJhIGNvbW8gc3UgcHJvcGlvIHVwc3RyZWFtLiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiUmFtYSAnJXMnIGNvbmZpZ3VyYWRhIHBhcmEgaGFjZXIgc2VndWltaWVudG8gYSBsYSByYW1hIHJlbW90YSAnJXMnIGRlICclcycgIgorInBvciByZWJhc2UuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJhbWEgcmVtb3RhICclcycgZGUgJyVzJy4iCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJhbWEgbG9jYWwgJyVzJyBwb3IgcmViYXNlLiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiUmFtYSAnJXMnIGNvbmZpZ3VyYWRhIHBhcmEgaGFjZXIgc2VndWltaWVudG8gYSBsYSByYW1hIGxvY2FsICclcycuIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJlZmVyZW5jaWEgcmVtb3RhICclcycgcG9yICIKKyJyZWJhc2UuIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJlZmVyZW5jaWEgcmVtb3RhICclcycuIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIlJhbWEgJyVzJyBjb25maWd1cmFkYSBwYXJhIGhhY2VyIHNlZ3VpbWllbnRvIGEgbGEgcmVmZXJlbmNpYSBsb2NhbCAnJXMnIHBvciAiCisicmViYXNlLiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIiIKKyJSYW1hICclcycgY29uZmlndXJhZGEgcGFyYSBoYWNlciBzZWd1aW1pZW50byBhIGxhIHJlZmVyZW5jaWEgbG9jYWwgJyVzJy4iCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSBlc2NyaWJpciBsYSBjb25maWd1cmFjacOzbiBkZSBsYSByYW1hIHVwc3RyZWFtIgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiTm8gcmFzdHJlYW5kbzogaW5mb3JtYWNpw7NuIGFtYmlndWEgcGFyYSBsYSByZWZlcmVuY2lhICVzIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycgbm8gZXMgdW4gbm9tYnJlIHbDoWxpZG8gZGUgcmFtYS4iCisKKyM6IGJyYW5jaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVW5hIHJhbWEgbGxhbWFkYSAnJXMnIHlhIGV4aXN0ZS4iCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZm9yemFyIGxhIGFjdHVhbGl6YWNpw7NuIGRlIGxhIHJhbWEgYWN0dWFsLiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgY29uZmlndXJhciBlbCByYXN0cmVvIGRlIGluZm9ybWFjacOzbjsgZWwgcHVudG8gZGUgcGFydGlkYSAnJXMnICIKKyJubyBlcyB1bmEgcmFtYS4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsYSByYW1hIGRlIHVwc3RyZWFtIHNvbGljaXRhZGEgJyVzJyBubyBleGlzdGUiCisKKyM6IGJyYW5jaC5jOjIzNworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIlNpIGVzdMOhcyBwbGFuZWFuZG8gYmFzYXIgdHUgdHJhYmFqbyBlbiB1bmEgcmFtYSB1cHN0cmVhbVxuIgorInF1ZSB5YSBleGlzdGUgZW4gZWwgcmVtb3RvLCB0YWwgdmV6IG5lY2VzaXRlcyBlamVjdXRhclxuIgorIlwiZ2l0IGZldGNoXCIgcGFyYSByZWNpYmlybGEuXG4iCisiXG4iCisiU2kgZXN0w6FzIHBsYW5lYW5kbyBoYWNlciBwdXNoIGEgdW5hIG51ZXZhIHJhbWEgbG9jYWwgcXVlXG4iCisidmEgYSByYXN0cmVhciBhIHN1IGNvbnRyYXBhcnRlIHJlbW90YSwgdGFsIHZleiBxdWllcmFzIHVzYXJcbiIKKyJcImdpdCBwdXNoIC11XCIgcGFyYSBjb25maWd1cmFyIHR1IHVwc3RyZWFtIHByZWRldGVybWluYWRvIGN1YW5kbyByZWFsaXphcyAiCisiZWwgcHVzaC4iCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIk5vbWJyZSBkZSBvYmpldG8gbm8gdsOhbGlkbzogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJOb21icmUgZGUgb2JqZXRvIGFtYmlndW86ICclcycuIgorCisjOiBicmFuY2guYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAiUHVudG8gZGUgcmFtYSBubyB2w6FsaWRvOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMnIHlhIGhhIHNpZG8gbWFyY2FkbyBlbiAnJXMnIgorCisjOiBicmFuY2guYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIkhFQUQgZGVsIMOhcmJvbCBkZSB0cmFiYWpvICVzIG5vIGVzdMOhIGFjdHVhbGl6YWRhIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIG5vIHNlIHZlIGNvbW8gdW4gYXJjaGl2byBidW5kbGUgdjIiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAiaGVhZGVyIG5vIHJlY29ub2NpZG8gJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIzNDQgc2VxdWVuY2VyLmM6MzEwOAorIzogYnVpbHRpbi9jb21taXQuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciAnJXMnIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiQWwgcmVwb3NpdG9yaW8gbGUgZmFsdGEgZXN0b3MgY29tbWl0cyBwcmVycmVxdWlzaXRvOiIKKworIzogYnVuZGxlLmM6MTQ2Cittc2dpZCAibmVlZCBhIHJlcG9zaXRvcnkgdG8gdmVyaWZ5IGEgYnVuZGxlIgorbXNnc3RyICJzZSBuZWNlc2l0YSB1biByZXBvc2l0b3JpbyBwYXJhIHZlcmlmaWNhciB1biBidW5kbGUiCisKKyM6IGJ1bmRsZS5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiRWwgYnVuZGxlIGNvbnRpZW5lIGVzdGEgcmVmZXJlbmNpYToiCittc2dzdHJbMV0gIkVsIGJ1bmRsZSBjb250aWVuZSBlc3RhcyAlZCByZWZlcmVuY2lhczoiCisKKyM6IGJ1bmRsZS5jOjIwNAorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJFbCBidW5kbGUgcmVnaXN0cmEgdW5hIGhpc3RvcmlhIGNvbXBsZXRhLiIKKworIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJFbCBidW5kbGUgcmVxdWllcmUgZXN0YSByZWZlcmVuY2lhOiIKK21zZ3N0clsxXSAiRWwgYnVuZGxlIHJlcXVpZXJlIGVzdGFzICVkIHJlZmVyZW5jaWFzOiIKKworIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiaW5jYXBheiBkZSBkdXBsaWNhciBidW5kbGUgZGVzY3JpcHRvciIKKworIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjcmVhciBsb3MgcGFjay1vYmpldGN0cyIKKworIzogYnVuZGxlLmM6MjkxCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgInBhY2stb2JqZWN0cyBtdXJpw7MiCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IG11cmnDsyIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJyZWZlcmVuY2lhICclcycgZXMgZXhjbHVpZGEgcG9yIGxhcyBvcGNpb25lcyBkZSByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6NDYxIGJ1aWx0aW4vbG9nLmM6MjAzIGJ1aWx0aW4vbG9nLmM6MTgxNCBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBubyByZWNvbm9jaWRvOiAlcyIKKworIzogYnVuZGxlLmM6NDY5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIlJlY2hhemFuZG8gY3JlYXIgdW4gYnVuZGxlIHZhY8Otby4iCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyICclcyciCisKKyM6IGJ1bmRsZS5jOjUwNAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiaW5kZXgtcGFjayBtdXJpw7MiCisKKyM6IGNvbG9yLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgImNvbG9yIGludsOhbGlkbzogJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjgxMSBidWlsdGluL2FtLmM6MzU0IGJ1aWx0aW4vYW0uYzozOTgKKyM6IGJ1aWx0aW4vYW0uYzoxMzY2IGJ1aWx0aW4vYW0uYzoyMDA5IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyICVzIgorCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICLCoSVzICVzIG5vIGVzIHVuIGNvbW1pdCEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkVsIHNvcG9ydGUgcGFyYSA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaGEgc2lkbyBkZXByZWNhZG9cbiIKKyJ5IHNlcsOhIGVsaW1pbmFkbyBlbiB1bmEgdmVyc2nDs24gZnV0dXJhIGRlIEdpdC5cbiIKKyJcbiIKKyJQb3IgZmF2b3IgdXNlIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInBhcmEgY29udmVydGlyIGxvcyBncmFmdHMgZW4gcmVmcy5cbiIKKyJcbiIKKyJBcGFwYSBlc3RlIG1lbnNhamUgZWplY3V0YW5kb1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgorCisjOiBjb21taXQuYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkNvbW1pdCAlcyB0aWVuZSB1bmEgZmlybWEgR1BHIG5vIGNvbmZpYWJsZSwgcHJldGVuZGlkYW1lbnRlIHBvciAlcy4iCisKKyM6IGNvbW1pdC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkNvbW1pdCAlcyB0aWVuZSB1bmEgbWFsYSBmaXJtYSBHUEcgcHJldGVuZGlkYW1lbnRlIHBvciAlcy4iCisKKyM6IGNvbW1pdC5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAiQ29tbWl0ICVzIG5vIHRpZW5lIHVuYSBmaXJtYSBHUEcuIgorCisjOiBjb21taXQuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiRWwgQ29tbWl0ICVzIHRpZW5lIHVuYSBidWVuYSBmaXJtYSBHUEcgcG9yICVzXG4iCisKKyM6IGNvbW1pdC5jOjE0MTUKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgIiIKKyJQZWxpZ3JvOiBlbCBtZW5zYWplIGRlbCBjb21taXQgbm8gc2UgYWp1c3RhIGEgVVRGLTguXG4iCisiVGFsIHZleiBxdWllcmFzIGVubWVuZGFybG8gZGVzcHXDqXMgZGUgYXJyZWdsYXIgZWwgbWVuc2FqZSwgbyBhcnJlZ2xhciBsYVxuIgorInZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7NuIGkxOG4uY29tbWl0ZW5jb2RpbmcgcGFyYSBsYSBjb2RpZmljYWNpw7NuIHF1ZSB1c2EgIgorInR1IHByb3llY3RvLlxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgImFyY2hpdm8gY29tbWl0LWdyYXBoIGVzIG11eSBwZXF1ZcOxbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICJmaXJtYSAlWCBlbiBjb21taXQtZ3JhcGggbm8gY29uY3VlcmRhIGNvbiBmaXJtYSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgInZlcnNpw7NuIGRlIGNvbW1pdC1ncmFwaCAlWCBubyBjb25jdWVyZGEgY29uIHZlcnNpw7NuICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICJ2ZXJzacOzbiBkZSBoYXNoIGRlIGNvbW1pdC1ncmFwaCAlWCBubyBjb25jdWVyZGEgY29uIHZlcnNpw7NuICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMzIKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIiIKKyJmYWx0YSB0YWJsYSBkZSBsb29rdXAgZGVsIGNodW5rIGVuIGNvbW1pdC1ncmFwaDsgZWwgYXJjaGl2byBwdWVkZSBlc3RhciAiCisiaW5jb21wbGV0byIKKworIzogY29tbWl0LWdyYXBoLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBpbXByb3BlciBjaHVuayBvZmZzZXQgJTA4eCUwOHgiCittc2dzdHIgIm9mZnNldCBkZWwgY2h1bmsgZGUgY29tbWl0LWdyYXBoIGluYXByb3BpYWRvICUwOHglMDh4IgorCisjOiBjb21taXQtZ3JhcGguYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAiaWQgZGUgY2h1bmsgZGUgY29tbWl0LWdyYXBoICUwOHggcGFyZWNlIHRlbmVyIG3Dumx0aXBsZXMgdGllbXBvcyIKKworIzogY29tbWl0LWdyYXBoLmM6MzUwCittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBubyBiYXNlIGdyYXBocyBjaHVuayIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIG5vIHRpZW5lIHVuYSBjaHVuayBiYXNlIGRlIGdyYXBocyIKKworIzogY29tbWl0LWdyYXBoLmM6MzYwCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJjYWRlbmEgY29tbWl0LWdyYXBoIG5vIGNvbmN1ZXJkYSIKKworIzogY29tbWl0LWdyYXBoLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAiY2FkZW5hIGRlIGNvbW1pdC1ncmFwaCBpbnbDoWxpZGE6IGzDrW5lYSAnJXMnIG5vIGVzIHVuIGhhc2giCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQzMworbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZW5jb250cmFyIGxvcyBhcmNoaXZvcyBjb21taXQtZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU2NCBjb21taXQtZ3JhcGguYzo2MjQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICJwb3NpY2nDs24gZGUgY29tbWl0IGludsOhbGlkYS4gY29tbWl0LWdyYXBoIGVzdMOhIHByb2JhYmxlbWVudGUgY29ycnVwdG8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZW5jb250cmFyIGNvbW1pdCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6ODU4IGJ1aWx0aW4vYW0uYzoxMjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgY29tbWl0ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDE3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIG9idGVuZXIgZWwgdGlwbyBkZSBvYmpldG86ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDQ5Cittc2dpZCAiTG9hZGluZyBrbm93biBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiQ2FyZ2FuZG8gY29tbWl0cyBjb25vY2lkb3MgZW4gY29tbWl0IGdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDY2Cittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiRXhwYW5kaWVuZG8gY29tbWl0cyBhbGNhbnphYmxlcyBlbiBjb21taXQgZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwODUKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJMaW1waWFuZG8gbWFyY2FzIGRlIGNvbW1pdHMgZW4gY29tbWl0IGdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTA0Cittc2dpZCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiCittc2dzdHIgIkNhbGN1bGFuZG8gbsO6bWVyb3MgZGUgZ2VuZXJhY2nDs24gZGUgY29tbWl0IGdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICJFbmNvbnRyYW5kbyBjb21taXRzIHBhcmEgY29tbWl0IGdyYXBoIGVuICVkIHBhY2siCittc2dzdHJbMV0gIkVuY29udHJhbmRvIGNvbW1pdHMgcGFyYSBjb21taXQgZ3JhcGggZW4gJWQgcGFja3MiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgImVycm9yIGFncmVnYW5kbyBwYWNrICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICJlcnJvciBhYnJpZW5kbyBpbmRleCBwYXJhICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gIkVuY29udHJhbmRvIGNvbW1pdHMgcGFyYSBjb21taXQgZ3JhcGggZGUgJWQgcmVmIgorbXNnc3RyWzFdICJFbmNvbnRyYW5kbyBjb21taXRzIHBhcmEgY29tbWl0IGdyYXBoIGRlICVkIHJlZnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAiaWQgZGUgb2JqZXRvIGNvbW1pdDogJXMgaW52w6FsaWRvIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjU1Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkVuY29udHJhbmRvIGNvbW1pdHMgcGFyYSBjb21taXQgZ3JhcGggZW50cmUgbG9zIG9iamV0b3MgZW1wYXF1ZXRhZG9zIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjcwCittc2dpZCAiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkNvbnRhbmRvIGNvbW1pdHMgZGlzdGludG9zIGVuIGNvbW1pdCBncmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTMwMAorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJFbmNvbnRyYW5kbyBlc3F1aW5hcyBleHRyYSBlbiBjb21taXQgZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDYKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgImZhbGzDsyBhbCBlc2NyaWJpciBlbCBuw7ptZXJvIGNvcnJlY3RvIGRlIGlkcyBkZSBiYXNlIGdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzc5IG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGRpcmVjdG9yaW9zIHByaW5jaXBhbGVzIHBhcmEgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzOTEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MzA2IGJ1aWx0aW4vcmVwYWNrLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgJyVzJyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAiRXNjcmliaWVuZG8gY29tbWl0IGdyYXBoIGVuICVkIHBhc28iCittc2dzdHJbMV0gIkVzY3JpYmllbmRvIGNvbW1pdCBncmFwaCBlbiAlZCBwYXNvcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5MgorbXNnaWQgInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyIGxhIGNhZGVuYSBkZSBhcmNoaXZvcyBjb21taXQtZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MDQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVub21icmFyIGVsIGFyY2hpdm8gYmFzZSBjb21taXQtZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MjQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiZmFsbMOzIGFsIHJlbm9tYnJhciBlbCBhcmNoaXZvIHRlbXBvcmFsIGNvbW1pdC1ncmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzNQorbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICJFc2NhbmVhbmRvIGNvbW1pdHMgZnVzaW9uYWRvcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiCittc2dzdHIgImlkIGRlIGNvbW1pdCBkdXBsaWNhZG8gaW5lc3BlcmFkbyAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTY3MAorbXNnaWQgIk1lcmdpbmcgY29tbWl0LWdyYXBoIgorbXNnc3RyICJGdXNpb25hbmRvIGNvbW1pdC1ncmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MTg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIKK21zZ3N0ciAiZWwgZm9ybWF0byBkZSBncsOhZmljb3MgZGUgY29tbWl0IG5vIHB1ZGVkZSBlc2NyaWJpciAlZCBjb21taXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoxODcxCittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAiZGVtYXNpYWRvcyBjb21taXRzIHBhcmEgZXNjcmliaXIgZWwgZ3LDoWZpY28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NjEKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKyJlbCBhcmNoaXZvIGRlIGNvbW1pdC1ncmFwaCB0aWVuZSBjaGVja3N1bXMgaW5jb3JyZWN0b3MgeSBwcm9iYWJsZW1lbnRlIGVzdMOhICIKKyJjb3JydXB0byIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgImNvbW1pdC1ncmFwaCB0aWVuZSB1biBvcmRlbiBkZSBPSUQgaW5jb3JyZWN0bzogJXMgbHVlZ28gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODEgY29tbWl0LWdyYXBoLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIHRpZW5lIHVuIHZhbG9yIGZhbm91dCBpbmNvcnJlY3RvOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiZmFsbMOzIGFsIGFuYWxpemFyIGNvbW1pdCAlcyBwYXJhIGNvbW1pdC1ncmFwaCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAwNgorbXNnaWQgIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiVmVyaWZpY2FuZG8gY29tbWl0cyBlbiBjb21taXQgZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisiZmFsbMOzIGFsIGFuYWxpemFyIGVsIGNvbW1pdCAlcyBkZSBsYSBiYXNlIGRlIGRhdG9zIGRlIG9iamV0b3MgcGFyYSBjb21taXQtIgorImdyYXBoIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgdHJlZSBPSUQgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJXMgIT0gJXMiCittc2dzdHIgIsOhcmJvbCByYcOteiBPSUQgcGFyYSBjb21taXQgJXMgZW4gY29tbWl0LWdyYXBoIGVzICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICJsaXN0YSBwYWRyZSBkZSBjb21taXQtZ3JhcGggcGFyYSBjb21taXQgJXMgZXMgbXV5IGxhcmdhIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICJwYWRyZSBkZSBjb21taXQtZ3JhcGggcGFyYSAlcyBlcyAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICJsaXN0YSBwYWRyZSBkZSBjb21taXQtZ3JhcGggcGFyYSBjb21taXQgJXMgdGVybWluYSBhbnRlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBnZW5lcmF0aW9uIG51bWJlciB6ZXJvIGZvciBjb21taXQgJXMsIGJ1dCBub24temVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKyJjb21taXQtZ3JhcGggaGEgZ2VuZXJhZG8gbsO6bWVybyBjZXJvIHBhcmEgJXMsIHBlcm8gbm8tY2VybyBwYXJhIGxvcyBkZW3DoXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisiY29tbWl0LWdyYXBoIHRpZW5lIGdlbmVyYWNpw7NuIG5vLWNlcm8gcGFyYSAlcywgcGVybyBjZXJvIHBhcmEgbG9zIGRlbcOhcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICJnZW5lcmFjacOzbiBjb21taXQtZ3JhcGggcGFyYSBjb21taXQgJXMgZXMgJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisiZmVjaGEgZGUgY29tbWl0IHBhcmEgY29tbWl0ICVzIGVuIGNvbW1pdC1ncmFwaCBlcyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWVtb3JpYSBhZ290YWRhIgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorInByb2Z1bmRpZGFkIG3DoXhpbWEgZGUgaW5jbHVzacOzbiBleGNlZGlkYSAoJWQpIG1pZW50cmFzIHNlIGluY2x1w61hXG4iCisiXHQlc1xuIgorImRlXG4iCisiXHQlc1xuIgorIkVzdG8gcHVlZGUgc2VyIGNhdXNhZG8gcG9yIGluY2x1c2lvbmVzIGNpcmN1bGFyZXMuIgorCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBleHBhbmRpciBydXRhcyBkZSBpbmNsdXNpw7NuICclcyciCisKKyM6IGNvbmZpZy5jOjE1MQorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiaW5jbHVzaW9uZXMgZGUgY29uZmlndXJhY2nDs24gcmVsYXRpdmFzIHRpZW5lbiBxdWUgdmVuaXIgZGUgYXJjaGl2b3MiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiIgorImxhIGNvbmZpZ3VyYWNpw7NuIHJlbGF0aXZhIGluY2x1eWUgY29uZGljaW9uYWxlcyBxdWUgZGViZW4gdmVuaXIgZGUgYXJjaGl2b3MiCisKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICJsbGF2ZSBubyBjb250aWVuZSB1bmEgc2VjY2nDs246ICVzIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgImxsYXZlIG5vIGNvbnRpZW5lIGVsIG5vbWJyZSBkZSB2YXJpYWJsZTogJXMiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAibGxhdmUgaW52w6FsaWRhOiAlcyIKKworIzogY29uZmlnLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiCittc2dzdHIgImxsYXZlIGludsOhbGlkYSAobnVldmEgbMOtbmVhKTogJXMiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgInBhcsOhbWV0cm8gZGUgY29uZmlndXJhY2nDs24gbWFsb2dyYWRvOiAlcyIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiZm9ybWF0byBtYWxvZ3JhZG8gZW4gJXMiCisKKyM6IGNvbmZpZy5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAibWFsYSBsw61uZWEgZGUgY29uZmlnICVkIGVuIGVsIGJsb2IgJXMiCisKKyM6IGNvbmZpZy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAibWFsYSBsw61uZWEgZGUgY29uZmlnICVkIGVuIGVsIGFyY2hpdm8gJXMiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm1hbGEgbMOtbmVhIGRlIGNvbmZpZyAlZCBlbiBsYSBlbnRyYWRhIHN0YW5kYXJkIgorCisjOiBjb25maWcuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICJtYWxhIGzDrW5lYSBkZSBjb25maWcgJWQgZW4gZWwgc3VibcOzZHVsby1ibG9iICVzIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAibWFsYSBsw61uZWEgZGUgY29uZmlnICVkIGVuIGxhIGzDrW5lYSBkZSBjb21hbmRvICVzIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICJtYWxhIGzDrW5lYSBkZSBjb25maWcgJWQgZW4gJXMiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAiZnVlcmEgZGUgcmFuZ28iCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAidW5pZGFkIGludsOhbGlkYSIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAibWFsIHZhbG9yIGRlIGNvbmZpZyBudW3DqXJpY2EgJyVzJyBwYXJhICclcyc6ICVzIgorCisjOiBjb25maWcuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuIGVsIGJsb2IgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICJtYWwgdmFsb3IgZGUgY29uZmlnIG51bcOpcmljYSAnJXMnIHBhcmEgJyVzJyBlbiBlbCBhcmNoaXZvICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuIGxhIGVudHJhZGEgc3RhbmRhcmQ6ICVzIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuIGVsIHN1Ym3Ds2R1bG8tYmxvYiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIKK21zZ3N0ciAiIgorIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuIGxhIGzDrW5lYSBkZSBjb21hbmRvICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIm1hbCB2YWxvciBkZSBjb25maWcgbnVtw6lyaWNhICclcycgcGFyYSAnJXMnIGVuICVzOiAlcyIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgZXhwYW5kaXIgZWwgZGlyZWN0b3JpbyBkZSB1c3VhcmlvIGVuOiAnJXMnIgorCisjOiBjb25maWcuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIHBhcmEgJyVzJyBubyBlcyB1bmEgbWFyY2EgZGUgdGllbXBvIHbDoWxpZGEiCisKKyM6IGNvbmZpZy5jOjEyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJicmV2IGxlbmd0aCBvdXQgb2YgcmFuZ2U6ICVkIgorbXNnc3RyICJsYXJnbyBkZSBhYnJldmlhdHVyYSBmdWVyYSBkZSByYW5nbzogJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibml2ZWwgZGUgY29tcHJlc2nDs24gZGUgemxpYiBlcnLDs25lbyAlZCIKKworIzogY29uZmlnLmM6MTMyNQorbXNnaWQgImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiY29yZS5jb21tZW50Q2hhciBkZWJlcsOtYSB0ZW5lciBzb2xvIHVuIGNhcmFjdGVyIgorCisjOiBjb25maWcuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAibW9kbyBpbnbDoWxpZG8gZGUgY3JlYWNpw7NuIGRlIG9iamV0b3M6ICVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgInZhbG9yIG1hbGZvcm1hZG8gcGFyYSAlcyIKKworIzogY29uZmlnLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgbWFsZm9ybWFkbyBwYXJhICVzOiAlcyIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgImRlYmUgc2VyIHVubyBkZSBub3RoaW5nLCBtYXRjaGluZywgc2ltcGxlLCB1cHN0cmVhbSBvIGN1cnJlbnQiCisKKyM6IGNvbmZpZy5jOjE1MTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICJuaXZlbCBkZSBjb21wcmVzacOzbiBkZSBwYWNrIGVycsOzbmVvICVkIgorCisjOiBjb25maWcuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIGNvbmZpZyBibG9iIG9iamVjdCAnJXMnIgorbXNnc3RyICJpbmNhcGF6IGRlIGNhcmdhciBjb25maWd1cmFjacOzbiBkZSBvYmpldG8gYmxvYiAnJXMnIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAicmVmZXJlbmNpYSAnJXMnIG5vIGFwdW50YSBhIHVuIGJsb2IiCisKKyM6IGNvbmZpZy5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgY29uZmlnIGJsb2IgJyVzJyIKK21zZ3N0ciAibm8gc2UgcG9zaWJsZSByZXNvbHZlciBjb25maWd1cmFjacOzbiBkZSBibG9iICclcyciCisKKyM6IGNvbmZpZy5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyICVzIgorCisjOiBjb25maWcuYzoxNzQ1Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgbGEgY29uZmlndXJhY2nDs24gZGUgbGEgbMOtbmVhIGRlIGNvbWFuZG8iCisKKyM6IGNvbmZpZy5jOjIwOTYKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIiIKKyJlcnJvciBkZXNjb25vY2lkbyBvY3VycmnDsyBtaWVudHJhcyBzZSBsZcOtYW4gbG9zIGFyY2hpdm9zIGRlIGNvbmZpZ3VyYWNpw7NuIgorCisjOiBjb25maWcuYzoyMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgIkludsOhbGlkbyAlczogJyVzJyIKKworIzogY29uZmlnLmM6MjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgInZhbG9yIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSAnJWQnIGRlYmUgZXN0YXIgZW50cmUgMCB5IDEwMCIKKworIzogY29uZmlnLmM6MjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgJyVzJyBkZSBsYSBjb25maWd1cmFjacOzbiBkZSBsYSBsw61uZWEgZGUgY29tYW5kbyIKKworIzogY29uZmlnLmM6MjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgIm1hbGEgdmFyaWFibGUgZGUgY29uZmlnICclcycgZW4gZWwgYXJjaGl2byAnJXMnIGVuIGxhIGzDrW5lYSAlZCIKKworIzogY29uZmlnLmM6MjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZSAnJXMnIgorbXNnc3RyICJub21icmUgZGUgc2VjY2nDs24gaW52w6FsaWRvICclcyciCisKKyM6IGNvbmZpZy5jOjI0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgdGllbmUgbcO6bHRpcGxlcyB2YWxvcmVzIgorCisjOiBjb25maWcuYzoyNTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJmYWxsw7MgYWwgZXNjcmliaXIgbnVldm8gYXJjaGl2byBkZSBjb25maWd1cmFjacOzbiAlcyIKKworIzogY29uZmlnLmM6Mjc1MyBjb25maWcuYzozMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGJsb3F1ZWFyIGFyY2hpdm8gZGUgY29uZmlndXJhY2nDs24gJXMiCisKKyM6IGNvbmZpZy5jOjI3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyAlcyIKK21zZ3N0ciAiYWJyaWVuZG8gJXMiCisKKyM6IGNvbmZpZy5jOjI3OTkgYnVpbHRpbi9jb25maWcuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAicGF0csOzbiBpbnbDoWxpZG86ICVzIgorCisjOiBjb25maWcuYzoyODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImFyY2hpdm8gZGUgY29uZmlndXJhY2nDs24gaW52w6FsaWRvOiAlcyIKKworIzogY29uZmlnLmM6MjgzNyBjb25maWcuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiZnN0YXQgZW4gJXMgZmFsbMOzIgorCisjOiBjb25maWcuYzoyODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgIm5vIGVzIHBvc2libGUgaGFjZXIgbW1hcCAnJXMnIgorCisjOiBjb25maWcuYzoyODU3IGNvbmZpZy5jOjMwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICJjaG1vZCBlbiAlcyBmYWxsw7MiCisKKyM6IGNvbmZpZy5jOjI5NDIgY29uZmlnLmM6MzE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZXNjcmliaXIgZWwgYXJjaGl2byBkZSBjb25maWd1cmFjacOzbiAlcyIKKworIzogY29uZmlnLmM6Mjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0ICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjb25maWd1cmFyICclcycgYSAnJXMnIgorCisjOiBjb25maWcuYzoyOTc4IGJ1aWx0aW4vcmVtb3RlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGRlc2FjdGl2YXIgJyVzJyIKKworIzogY29uZmlnLmM6MzA2OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgInNlY2Npw7NuIGRlIG5vbWJyZSBpbnbDoWxpZGE6ICVzIgorCisjOiBjb25maWcuYzozMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgdmFsdWUgZm9yICclcyciCittc2dzdHIgInZhbG9yIGZhbHRhbnRlIHBhcmEgJyVzJyIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAiZWwgcmVtb3RvIHNlIGNvbGfDsyBlbiBlbCBjb250YWN0byBpbmljaWFsIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gbGVlciBkZWwgcmVwb3NpdG9yaW8gcmVtb3RvLlxuIgorIlxuIgorIlBvciBmYXZvciBhc2Vnw7pyYXRlIHF1ZSB0aWVuZXMgbG9zIHBlcm1pc29zIGRlIGFjY2VzbyBjb3JyZWN0b3NcbiIKKyJ5IHF1ZSBlbCByZXBvc2l0b3JpbyBleGlzdGUuIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICJzZXJ2aWRvciBubyBzb3BvcnRhICclcyciCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgInNlcnZpZG9yIG5vIHNvcG9ydGEgZmVhdHVyZSAnJXMnIgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJzZSBlc3BlcmEgZmx1c2ggdHJhcyBjYXBhY2lkYWRlcyIKKworIzogY29ubmVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBjYXBhYmlsaXRpZXMgYWZ0ZXIgZmlyc3QgbGluZSAnJXMnIgorbXNnc3RyICJpZ25vcmFuZG8gY2FwYWNpZGFkZXMgdHJhcyBwcmltZXJhIGzDrW5lYSAnJXMnIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICJlcnJvciBkZSBwcm90b2NvbG86IGNhcGFjaWRhZGVzIGltcHJldmlzdGFzXnt9IgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiZXJyb3IgZGUgcHJvdG9jb2xvOiBzaGEtMSBzdXBlcmZpY2lhbCBlc3BlcmFkbywgc2Ugb2J0dXZvICclcyciCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgImVsIHJlcG9zaXRvcmlvIGVuIGVsIG90cm8gZmluYWwgbm8gcHVlZGUgc2VyIHN1cGVyZmljaWFsIgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgInBhcXVldGUgaW52w6FsaWRvIgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sbzogJyVzJyBpbmVzcGVyYWRvIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgInJlc3B1ZXN0YSBkZSByZWZlcmVuY2lhcyBscy1yZWZzIGludsOhbGlkYTogJXMiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAiZmx1c2ggZXNwZXJhZG8gdHJhcyBsaXN0YWRvIGRlIHJlZnMiCisKKyM6IGNvbm5lY3QuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgJyVzJyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJwcm90b2NvbG8gJyVzJyBubyBlcyBzb3BvcnRhZG8iCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY29uZmlndXJhciBTT19LRUVQQUxJVkUgZW4gZWwgc29ja2V0IgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICJSZXZpc2FuZG8gJXMuLi4gIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICJubyBzZSBwdWVkZSByZXZpc2FyICVzIChwdWVydG8gJXMpICglcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIKKyM6IGNvbm5lY3QuYzo2NDMgY29ubmVjdC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZS5cbiIKKyJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorbXNnc3RyICIiCisiaGVjaG8uXG4iCisiQ29uZWN0YW5kbyBhICVzIChwdWVydG8gJXMpIC4uLiAiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJubyBlcyBwb3NpYmxlIGNvbmVjdGFyIGEgJXM6XG4iCisiJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCisjOiBjb25uZWN0LmM6NjcxIGNvbm5lY3QuYzo3NDgKK21zZ2lkICJkb25lLiIKK21zZ3N0ciAiaGVjaG8uIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIm5vIGVzIHBvc2libGUgcmV2aXNhciAlcyAoJXMpIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAicHVlcnRvIGRlc2Nvbm9jaWRvICVzIgorCisjOiBjb25uZWN0LmM6ODQ1IGNvbm5lY3QuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgaG9zdG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICJob3N0bmFtZSBleHRyYcOxbyAnJXMnIGJsb3F1ZWFkbyIKKworIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICJwdWVydG8gZXh0cmHDsW8gJyVzJyBibG9xdWVhZG8iCisKKyM6IGNvbm5lY3QuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXJ0IHByb3h5ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb21lbnphciBwcm94eSAlcyIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisibm8gaGF5IHJ1dGEgZXNwZWNpZmljYWRhOyB2ZWEgJ2dpdCBoZWxwIHB1bGwnIHBhcmEgc2ludGF4aXMgZGUgdXJsIHbDoWxpZGFzIgorCisjOiBjb25uZWN0LmM6MTEyMworbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTQiCittc2dzdHIgInZhcmlhbnRlICdzaW1wbGUnIGRlIHNzaCBubyBzb3BvcnRhIC00IgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgInZhcmlhbnRlICdzaW1wbGUnIGRlIHNzaCBubyBzb3BvcnRhIC02IgorCisjOiBjb25uZWN0LmM6MTE1MgorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwb3J0IgorbXNnc3RyICJ2YXJpYW50ZSBzc2ggJ3NpbXBsZScgbm8gc29wb3J0YSBjb25maWd1cmFyIHB1ZXJ0byIKKworIzogY29ubmVjdC5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwYXRobmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgInJ1dGEgZXh0cmHDsWEgJyVzJyBibG9xdWVhZGEiCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgIm5vIGVzIHBvc2libGUgaGFjZXIgZm9yayIKKworIzogY29ubmVjdGVkLmM6ODkgYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiVmVyaWZpY2FuZG8gY29uZWN0aXZpZGFkIgorCisjOiBjb25uZWN0ZWQuYzoxMDEKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJObyBzZSBwdWRvIGNvcnJlciAnZ2l0IHJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6MTIxCittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICJmYWxsw7MgZXNjcmliaXIgYSByZXYtbGlzdCIKKworIzogY29ubmVjdGVkLmM6MTI4Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgImZhbGzDsyBhbCBjZXJyYXIgbGEgZW50cmFkYSBzdGFuZGFyZCBkZSByZXYtbGlzdCIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICJjcmxmX2FjdGlvbiAlZCBpbGVnYWwiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiQ1JMRiBzZXLDoSByZWVtcGxhemFkbyBwb3IgTEYgZW4gJXMiCisKKyM6IGNvbnZlcnQuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiQ1JMRiBzZXLDoSByZW1wbGF6YWRvIHBvciBMRiBlbiAlcy5cbiIKKyJFbCBhcmNoaXZvIHRlbmRyw6Egc3VzIGZpbmFsZXMgZGUgbMOtbmVhIG9yaWdpbmFsZXMgZW4gdHUgZGlyZWN0b3JpbyBkZSB0cmFiYWpvIgorCisjOiBjb252ZXJ0LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIkxGIHNlcsOhIHJlZW1wbGF6YWRvIHBvciBDUkxGIGVuICVzIgorCisjOiBjb252ZXJ0LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkxGIHNlcsOhIHJlZW1wbGF6YWRvIHBvciBDUkxGIGVuICVzLlxuIgorIkVsIGFyY2hpdm8gdGVuZHLDoSBzdXMgZmluYWxlcyBkZSBsw61uZWEgb3JpZ2luYWxlcyBlbiB0dSBkaXJlY3RvcmlvIGRlIHRyYWJham8iCisKKyM6IGNvbnZlcnQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00gZXN0w6EgcHJvaGliaWRvIGVuICclcycgc2kgZXMgY29kaWZpY2FkbyBjb21vICVzIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiRWwgYXJjaGl2byAnJXMnIGNvbnRpZW5lIHVuYSBtYXJjYSBkZSBieXRlIChCT00pLiBQb3IgZmF2b3IgdXNhIFVURi0lLipzICIKKyJjb21vIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCisKKyM6IGNvbnZlcnQuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHJlcXVpcmVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiQk9NIGVzIHJlcXVlcmlkbyBlbiAnJXMnIHNpIGVzIGNvZGlmaWNhZG8gY29tbyAlcyIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiQWwgYXJjaGl2byAnJXMnIGxlIGZhbHRhIHVuYSBtYXJjYSBkZSBieXRlIChCT00pLiBQb3IgZmF2b3IgdXNhIFVURi0lc0JFIG8gIgorIlVURi0lc0xFIChkZXBlbmRpZW5kbyBlbiBlbCBvcmRlbiBkZSBieXRlKSBjb21vIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCisKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNvZGlmaWNhciAnJXMnIGRlICVzIGEgJXMiCisKKyM6IGNvbnZlcnQuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW5jb2RpbmcgJyVzJyBmcm9tICVzIHRvICVzIGFuZCBiYWNrIGlzIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiY29kaWZpY2FjacOzbiAnJXMnIGRlICVzIGEgJXMgeSBkZSB2dWVsdGEgbm8gc29uIGlndWFsZXMiCisKKyM6IGNvbnZlcnQuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBoYWNlciBmb3JrIHBhcmEgZWplY3V0YXIgZmlsdHJvcyBleHRlcm5vcyAnJXMnIgorCisjOiBjb252ZXJ0LmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGVuIGFsaW1lbnRhciBkZSBpbnB1dCBhIGxvcyBmaWx0cm9zIGV4dGVybm9zICclcyciCisKKyM6IGNvbnZlcnQuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkICVkIgorbXNnc3RyICJmaWx0cm8gZXh0ZXJubyAnJXMnIGZhbGzDsyAlZCIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgImxlY3R1cmEgZGUgZmlsdHJvIGV4dGVybm8gJyVzJyBmYWxsw7MiCisKKyM6IGNvbnZlcnQuYzo3MzYgY29udmVydC5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgImZpbHRybyBleHRlcm5vICclcycgZmFsbMOzIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAidGlwbyBkZSBmaWx0cm8gaW5lc3BlcmFkbyIKKworIzogY29udmVydC5jOjg1MAorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICJub21icmUgZGUgcnV0YSBtdXkgbGFyZ28gcGFyYSBmaWx0cm8gZXh0ZXJubyIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorImZpbHRybyBleHRlcm5vICclcycgeWEgbm8gZXN0w6EgZGlzcG9uaWJsZSBhdW5xdWUgbm8gdG9kYXMgbGFzIHJ1dGFzIGhhbiBzaWRvICIKKyJmaWx0cmFkYXMiCisKKyM6IGNvbnZlcnQuYzoxMjIzCittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAidHJ1ZS9mYWxzZSBubyBzb24gd29ya2luZy10cmVlLWVuY29kaW5ncyB2w6FsaWRvcyIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJXM6IGZhbGzDsyBhbCBsaW1waWFyIGZpbHRybyAnJXMnIgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiVzOiBmaWx0cm8gc211ZGdlICVzIGZhbGzDsyIKKworIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgImVuIGVsIGZ1dHVybyIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBzZWd1bmRvIgorbXNnc3RyWzFdICJoYWNlICU8UFJJdU1BWD4gc2VndW5kb3MiCisKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICJoYWNlICU8UFJJdU1BWD4gbWludXRvIgorbXNnc3RyWzFdICJoYWNlICU8UFJJdU1BWD4gbWludXRvcyIKKworIzogZGF0ZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGhvdXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiaGFjZSAlPFBSSXVNQVg+IGhvcmEiCittc2dzdHJbMV0gImhhY2UgJTxQUkl1TUFYPiBob3JhcyIKKworIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBkw61hIgorbXNnc3RyWzFdICJoYWNlICU8UFJJdU1BWD4gZMOtYXMiCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBzZW1hbmEiCittc2dzdHJbMV0gImhhY2UgJTxQUkl1TUFYPiBzZW1hbmFzIgorCisjOiBkYXRlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBtZXMiCittc2dzdHJbMV0gImhhY2UgJTxQUkl1TUFYPiBtZXNlcyIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gYcOxbyIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBhw7FvcyIKKworIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlcywgeSAlPFBSSXVNQVg+IG1lcyBhdHLDoXMiCittc2dzdHJbMV0gIiVzLCB5ICU8UFJJdU1BWD4gbWVzZXMgYXRyw6FzIgorCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gImhhY2UgJTxQUkl1TUFYPiBhw7FvIgorbXNnc3RyWzFdICJoYWNlICU8UFJJdU1BWD4gYcOxb3MiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyNzIKK21zZ2lkICJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiCittc2dzdHIgIlByb3BhZ2FuZG8gbWFyY2FzIGlzbGEiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICJtYWwgb2JqZXRvIMOhcmJvbCAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgY2FyZ2FyIGlzbGEgZGUgcmVnZXggcGFyYSAnJXMnOiAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgorbXNnc3RyICJyZWdleCBpc2xhIGRlIGNvbmZpZyB0aWVuZSBtdWNob3MgZ3J1cG9zIGRlIGNhcHR1cmEgKG1heD0lZCkiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2VkICVkIGlzbGFuZHMsIGRvbmUuXG4iCittc2dzdHIgIiVkIGlzbGFzIG1hcmNhZGFzLCBsaXN0by5cbiIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGxlZXIgb3JkZW4gZGUgYXJjaGl2b3MgJyVzJyIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIlJlYWxpemFuZG8gdW5hIGRldGVjY2nDs24gZGUgY2FtYmlvcyBkZSBub21icmUgaW5leGFjdGEiCisKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcGNpb25lcz5dIDxwYXRoPiA8cGF0aD4iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisiTm8gZXMgdW4gcmVwb3NpdG9yaW8gZ2l0LiBVc2UgLS1uby1pbmRleCBwYXJhIGNvbXBhcmFyIGRvcyBwYXRocyBmdWVyYSBkZWwgIgorIsOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiICBGYWxsw7MgYWwgYW5hbGl6YXIgZGlyc3RhdCBwb3JjZW50YWplIGRlIGNvcnRlICclcydcbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIHBhcsOhbWV0cm8gJyVzJyBkZSBkaXJzdGF0IGRlc2Nvbm9jaWRvXG4iCisKKyM6IGRpZmYuYzoyOTYKK21zZ2lkICIiCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAiCisiJ2RpbW1lZC16ZWJyYScsICdwbGFpbiciCittc2dzdHIgIiIKKyJvcGNpw7NuIGRlIGNvbG9yIHRpZW5lIHF1ZSBzZXIgdW5hIGRlICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkX3plYnJhJywgJ3BsYWluJyIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisibW9kbyBjb2xvci1tb3ZlZC13cyBkZXNjb25vY2lkbyAnJXMnLCB2YWxvcmVzIHBvc2libGVzIHNvbiAnaWdub3JlLXNwYWNlLSIKKyJjaGFuZ2UnLCAnaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLSIKKyJjaGFuZ2UnIgorCisjOiBkaWZmLmM6MzMyCittc2dpZCAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgIgorIndoaXRlc3BhY2UgbW9kZXMiCittc2dzdHIgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIG5vIHB1ZWRlIHNlciBjb21iaW5hZG8gY29uIG90cm9zICIKKyJtb2RvcyBkZSBlc3BhY2lvcyBlbiBibGFuY28iCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIiIKKyJWYWxvciBwYXJhIGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYWNpw7NuICdkaWZmLnN1Ym1vZHVsZScgZGVzY29ub2NpZG86ICclcyciCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJFcnJvcmVzIGVuIGxhIHZhcmlhYmxlIGRlIGNvbmZpZyAnZGlmZi5kaXJzdGF0JyBlbmNvbnRyYWRvczpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAiZGlmZiBleHRlcm5vIG11cmnDsywgZGV0ZW5pZW5kbyBlbiAlcyIKKworIzogZGlmZi5jOjQ1NDcKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgeSAtcyBzb24gbXV0dWFtZW50ZSBleGNsdXNpdmFzIgorCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItRywgLVMgeSAtLWZpbmQtb2JqZWN0IHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IHJlcXVpZXJlIGV4YWN0YW1lbnRlIHVuIHBhdGhzcGVjIgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgInZhbG9yIC0tc3RhdCBpbnbDoWxpZG86ICVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5OSBwYXJzZS1vcHRpb25zLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiVzIGVzcGVyYSB1biB2YWxvciBudW3DqXJpY28iCisKKyM6IGRpZmYuYzo0NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKyJGYWxsw7MgYWwgYW5hbGl6YXIgcGFyw6FtZXRybyBkZSBvcGNpw7NuIC0tZGlyc3RhdC8tWDpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIgorbXNnc3RyICJjYW1iaW8gZGUgY2xhc2UgZGVzY29ub2NpZG8gJyVjJyBlbiAtLWRpZmYtZmlsdGVyPSVzIgorCisjOiBkaWZmLmM6NDgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIgorbXNnc3RyICJ2YWxvciBkZXNjb25vY2lkbyBsdWVnbyBkZSB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKKworIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVzb2x2ZXIgJyVzJyIKKworIzogZGlmZi5jOjQ4ODYgZGlmZi5jOjQ4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyA8bj4vPG0+IGZvcm0iCittc2dzdHIgIiVzIGVzcGVyYSBmb3JtYSA8bj4vPG0+IgorCisjOiBkaWZmLmM6NDkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgY2hhcmFjdGVyLCBnb3QgJyVzJyIKK21zZ3N0ciAiJXMgZXNwZXJhYmEgdW4gY2hhciwgc2Ugb2J0dXZvICclcyciCisKKyM6IGRpZmYuYzo0OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWNvbG9yLW1vdmVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAibWFsIGFyZ3VtZW50byAtLWNvbG9yLW1vdmVkOiAlcyIKKworIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAibW9kbyBpbnbDoWxpZG8gJyVzJyBlbiAtLWNvbG9yLW1vdmVkLXdzIgorCisjOiBkaWZmLmM6NDk4NAorbXNnaWQgIiIKKyJvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlXCIgYW5kICIKKyJcImhpc3RvZ3JhbVwiIgorbXNnc3RyICIiCisib3BjacOzbiBkaWZmLWFsZ29yaXRobSBhY2VwdGEgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGUgIgorIlwiaGlzdG9ncmFtXCIiCisKKyM6IGRpZmYuYzo1MDIwIGRpZmYuYzo1MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgdG8gJXMiCittc2dzdHIgImFyZ3VtZW50byBpbnbDoWxpZG8gcGFyYSAlcyIKKworIzogZGlmZi5jOjUxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgImZhbGzDsyBhbCBhbmFsaXphciBwYXLDoW1ldHJvIGRlIG9wY2nDs24gLS1zdWJtb2R1bGU6ICclcyciCisKKyM6IGRpZmYuYzo1MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgIm1hbCBhcmd1bWVudG8gLS13b3JkLWRpZmY6ICVzIgorCisjOiBkaWZmLmM6NTI1NworbXNnaWQgIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSBmb3JtYXRvIGRlIHNhbGlkYSBwYXJhIGRpZmYiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgImdlbmVyYXIgcGFyY2hlIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJzdXByaW1pciBzYWxpZGEgZGUgZGlmZiIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICJnZW5lcmEgZGlmZnMgY29uIDxuPiBsw61uZWFzIGRlIGNvbnRleHRvIgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgImdlbmVyYSBlbCBkaWZmIGVuIGZvcm1hdG8gcmF3IgorCisjOiBkaWZmLmM6NTI3NgorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXJhdyciCittc2dzdHIgInNpbsOzbmltbyBwYXJhICctcCAtLXN0YXQnIgorCisjOiBkaWZmLmM6NTI4MAorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXN0YXQnIgorbXNnc3RyICJzaW7Ds25pbW8gcGFyYSAnLXAgLS1zdGF0JyIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAiLS1zdGF0IGFtaWdhYmxlIHBhcmEgbcOhcXVpbmEiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgIm1vc3RyYXIgc29sbyBsYSDDumx0aW1hIGzDrW5lYSBwYXJhIC0tc3RhdCIKKworIzogZGlmZi5jOjUyODkgZGlmZi5jOjUyOTcKK21zZ2lkICI8cGFyYW0xLHBhcmFtMj4uLi4iCittc2dzdHIgIjxwYXJhbTEscGFyYW0yPi4uLiIKKworIzogZGlmZi5jOjUyOTAKK21zZ2lkICIiCisib3V0cHV0IHRoZSBkaXN0cmlidXRpb24gb2YgcmVsYXRpdmUgYW1vdW50IG9mIGNoYW5nZXMgZm9yIGVhY2ggc3ViLWRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIm11ZXN0cmEgbGEgZGlzdHJpYnVjacOzbiBkZSBjYW50aWRhZGVzIGRlIGNhbWJpb3MgcmVsYXRpdmEgcGFyYSBjYWRhICIKKyJzdWJkaXJlY3RvcmlvIgorCisjOiBkaWZmLmM6NTI5NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorbXNnc3RyICJzaW7Ds25pbW8gcGFyYSAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKKworIzogZGlmZi5jOjUyOTgKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAic2lub25pbW8gcGFyYSAtLWRpcnN0YXQ9YXJjaGl2b3MscGFyYW0xLHBhcmFtMi4uLiIKKworIzogZGlmZi5jOjUzMDIKK21zZ2lkICJ3YXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIGNvbmZsaWN0IG1hcmtlcnMgb3Igd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKyJhZHZpZXJ0ZSBzaSBjYW1iaW9zIGludHJvZHVjZW4gY29uZmxpY3RvcyBkZSBtYXJrZXJzIG8gZXJyb3JlcyBkZSBlc3BhY2lvcyAiCisiZW4gYmxhbmNvIgorCisjOiBkaWZmLmM6NTMwNQorbXNnaWQgImNvbmRlbnNlZCBzdW1tYXJ5IHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMiCittc2dzdHIgIiIKKyJyZXN1bWVuIGNvbmRlbnNhZG8gZGUgY3JlYWNpb25lcywgY2FtYmlvcyBkZSBub21icmVzIHkgY2FtYmlvcyBkZSBtb2RvcyIKKworIzogZGlmZi5jOjUzMDgKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAibW9zdHJhciBzb2xvIG5vbWJyZXMgZGUgYXJjaGl2b3MgY2FtYmlhZG9zIgorCisjOiBkaWZmLmM6NTMxMQorbXNnaWQgInNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgIm1vc3RyYXIgc29sbyBub21icmVzIHkgZXN0YWRvcyBkZSBhcmNoaXZvcyBjYW1iaWFkb3MiCisKKyM6IGRpZmYuYzo1MzEzCittc2dpZCAiPHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV0iCittc2dzdHIgIjxhbmNobz5bLDxub21icmUtYW5jaG8+Wyw8Y2FudGlkYWQ+XV0iCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgImdlbmVyYXIgZGlmZnN0YXQiCisKKyM6IGRpZmYuYzo1MzE2IGRpZmYuYzo1MzE5IGRpZmYuYzo1MzIyCittc2dpZCAiPHdpZHRoPiIKK21zZ3N0ciAiPGFuY2hvPiIKKworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgImdlbmVyYSBkaWZmc3RhdCBjb24gdW4gYW5jaG8gZGFkbyIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzdGF0IGNvbiB1biBub21icmUgZGUgYW5jaG8gZGFkbyIKKworIzogZGlmZi5jOjUzMjMKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgImdlbmVyYSBkaWZmc3RhdCBjb24gdW4gYW5jaG8gZGUgZ3JhcGggZGFkbyIKKworIzogZGlmZi5jOjUzMjUKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICI8Y2FudGlkYWQ+IgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAiZ2VuZXJhIGRpZmZzdGF0IGNvbiBsw61uZWFzIGxpbWl0YWRhcyIKKworIzogZGlmZi5jOjUzMjkKK21zZ2lkICJnZW5lcmF0ZSBjb21wYWN0IHN1bW1hcnkgaW4gZGlmZnN0YXQiCittc2dzdHIgImdlbmVyYSB1biByZXN1bWVuIGNvbXBhY3RvIGRlIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgIm11ZXN0cmEgdW4gZGlmZiBiaW5hcmlvIHF1ZSBwdWVkZSBzZXIgYXBsaWNhZG8iCisKKyM6IGRpZmYuYzo1MzM1Cittc2dpZCAic2hvdyBmdWxsIHByZS0gYW5kIHBvc3QtaW1hZ2Ugb2JqZWN0IG5hbWVzIG9uIHRoZSBcImluZGV4XCIgbGluZXMiCittc2dzdHIgIiIKKyJtb3N0cmFyIHRvZG8gdW4gcHJlLSB5IHBvc3QtaW1hZ2UgZGUgbm9tYnJlcyBkZSBvYmpldG9zIGVuIGxhcyBsw61uZWFzIFwiaW5kZXgiCisiXCIiCisKKyM6IGRpZmYuYzo1MzM3Cittc2dpZCAic2hvdyBjb2xvcmVkIGRpZmYiCittc2dzdHIgIm1vc3RyYXIgZGlmZiBjb2xvcmlkbyIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIjx0aXBvPiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorInJlc2FsdGFyIGVycm9yZXMgZGUgZXNwYWNpb3MgZW4gYmxhbmNvIGVuIGxhcyBsw61uZWFzICdjb250ZXh0JywgJ29sZCcgbyAiCisiJ25ldycgZGVsIGRpZmYiCisKKyM6IGRpZmYuYzo1MzQyCittc2dpZCAiIgorImRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycyBpbiAtLXJhdyBvciAiCisiLS1udW1zdGF0IgorbXNnc3RyICIiCisibm8gY29uc29saWRhciBsb3MgcGF0aG5hbWVzIHkgdXNhciBOVUxzIGNvbW8gdGVybWluYWRvcmVzIGRlIGNhbXBvcyBlbiAtLXJhdyAiCisibyAtLW51bXN0YXQiCisKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIjxwcmVmaWpvPiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICJtb3N0cmFyIGVsIHByZWZpam8gZGUgZnVlbnRlIGRhZG8gZW4gbHVnYXIgZGUgXCJhL1wiIgorCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAibW9zdHJhciBlbCBwcmVmaWpvIGRlIGRlc3Rpbm8gZW4gbHVnYXIgZGUgXCJiL1wiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgImFudGVwb25lciB1biBwcmVmaWpvIGFkaWNpb25hbCBhIGNhZGEgbMOtbmVhIG1vc3RyYWRhIgorCisjOiBkaWZmLmM6NTM1NQorbXNnaWQgImRvIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4IgorbXNnc3RyICJubyBtb3N0cmFyIG5pbmfDum4gcHJlZmlqbyBkZSBmdWVudGUgbyBkZXN0aW5vIgorCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIiIKKyJtdWVzdHJhIGVsIGNvbnRleHRvIGVudHJlIGh1bmtzIGRlIGRpZmYgaGFzdGEgZWwgbsO6bWVybyBlc3BlY2lmaWNhZG8gZGUgIgorImzDrW5lYXMiCisKKyM6IGRpZmYuYzo1MzYyIGRpZmYuYzo1MzY3IGRpZmYuYzo1MzcyCittc2dpZCAiPGNoYXI+IgorbXNnc3RyICI8Y2hhcj4iCisKKyM6IGRpZmYuYzo1MzYzCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW5zdGVhZCBvZiAnKyciCittc2dzdHIgImVzcGVjaWZpY2EgZWwgY2hhciBwYXJhIGluZGljYXIgdW5hIG51ZXZhIGzDrW5lYSBlbiBsdWdhciBkZSAnKyciCisKKyM6IGRpZmYuYzo1MzY4Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICJlc3BlY2lmaWNhIGVsIGNoYXIgcGFyYSBpbmRpY2FyIHVuYSBsw61uZWEgdmllamEgZW4gbHVnYXIgZGUgJy0nIgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgImVzcGVjaWZpY2EgZWwgY2hhciBwYXJhIGluZGljYXIgdW4gY29udGV4dG8gZW4gbHVnYXIgZGUgJyAnIgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGRlIGRpZmYgcmVuYW1lIgorCisjOiBkaWZmLmM6NTM3NworbXNnaWQgIjxuPlsvPG0+XSIKK21zZ3N0ciAiPG4+Wy88bT5dIgorCisjOiBkaWZmLmM6NTM3OAorbXNnaWQgImJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQgY3JlYXRlIgorbXNnc3RyICJkZXNjb21wb25lciBsb3MgY2FtYmlvcyBkZSByZWVzY3JpdHVyYSBlbiBwYXJlcyBkZSBib3JyYXIgeSBjcmVhciIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAiZGV0ZWN0YXIgcmVub21icmFkb3MiCisKKyM6IGRpZmYuYzo1Mzg2Cittc2dpZCAib21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMiCittc2dzdHIgIm9taXRlIGxhIHByZWltYWdlIHBhcmEgYm9ycmFkb3MiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAiZGV0ZWN0YXIgY29waWFzIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAidXNhIGFyY2hpdm9zIG5vIG1vZGlmaWNhZG9zIGNvbW8gZnVlbnRlIHBhcmEgZW5jb250cmFyIGNvcGlhcyIKKworIzogZGlmZi5jOjUzOTUKK21zZ2lkICJkaXNhYmxlIHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgImRlc2hhYmlsaXRhIGRldGVjY2nDs24gZGUgcmVub21icmVzIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICJ1c2EgYmxvYnMgdmFjw61vcyBjb21vIGZ1ZW50ZSBkZSByZW5vbWJyZSIKKworIzogZGlmZi5jOjU0MDAKK21zZ2lkICJjb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcyIKK21zZ3N0ciAiY29udGludWEgbGlzdGFuZG8gZWwgaGlzdG9yaWFsIGRlIHVuIGFyY2hpdm8gbcOhcyBhbGzDoSBkZSByZW5vbWJyZXMiCisKKyM6IGRpZmYuYzo1NDAzCittc2dpZCAiIgorInByZXZlbnQgcmVuYW1lL2NvcHkgZGV0ZWN0aW9uIGlmIHRoZSBudW1iZXIgb2YgcmVuYW1lL2NvcHkgdGFyZ2V0cyBleGNlZWRzICIKKyJnaXZlbiBsaW1pdCIKK21zZ3N0ciAiIgorInByZXZpZW5lIGRldGVjY2nDs24gZGUgcmVub21icmUvY29waWFzIHNpIGVsIG7Dum1lcm8gZGUgb2JqZXRpdm9zIHBhcmEgIgorInJlbm9tYnJlcy9jb3BpYXMgZXhjZWRlIGVsIGzDrW1pdGUgZGFkbyIKKworIzogZGlmZi5jOjU0MDUKK21zZ2lkICJEaWZmIGFsZ29yaXRobSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSBhbGdvcml0bW9zIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAicHJvZHVjZSBlbCBkaWZmIG3DoXMgcGVxdWXDsW8gcG9zaWJsZSIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiaWdub3JhciBlc3BhY2lvcyBlbiBibGFuY28gY3VhbmRvIGNvbXBhcmFuZG8gbMOtbmVhcyIKKworIzogZGlmZi5jOjU0MTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZSIKK21zZ3N0ciAiaWdub3JhciBjYW1iaW9zIGVuIGxhIGNhbnRpZGFkIGRlIGzDrW5lYXMgZW4gYmxhbmNvIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJpZ25vcmFyIGNhbWJpb3MgZW4gZXNwYWNpb3MgZW4gYmxhbmNvIGVuIEVPTCIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICJpZ25vcmEgY2Fycmllci1yZXR1cm4gYWwgZmluYWwgZGUgbGEgbMOtbmVhIgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgImlnbm9yYSBjYW1iaW9zIGN1eWFzIGzDrW5lYXMgc29uIHRvZGFzIGVuIGJsYW5jbyIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiaGV1csOtc3RpY2EgcGFyYSBjYW1iaWFyIGxvcyBsw61taXRlcyBkZSBodW5rIHBhcmEgdW5hIGbDoWNpbCBsZWN0dXJhIgorCisjOiBkaWZmLmM6NTQyOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwicGF0aWVuY2UgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZ2VuZXJhIHVuIGRpZmYgdXNhbmRvIGFsZ29yaXRtbyBcInBhdGllbmNlIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJnZW5lcmEgdW4gZGlmZiB1c2FuZG8gYWxnb3JpdG1vIFwiaGlzdG9ncmFtIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAiPGFsZ29yaXRtbz4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgImVzY29nZSB1biBhbGdvcml0bW8gcGFyYSBkaWZmIgorCisjOiBkaWZmLmM6NTQzNworbXNnaWQgIjx0ZXh0PiIKK21zZ3N0ciAiPHRleHRvPiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImdlbmVyYSB1biBkaWZmIHVzYW5kbyBhbGdvcml0bW8gXCJhbmNob3JlZCBkaWZmXCIiCisKKyM6IGRpZmYuYzo1NDQwIGRpZmYuYzo1NDQ5IGRpZmYuYzo1NDUyCittc2dpZCAiPG1vZGU+IgorbXNnc3RyICI8bW9kbz4iCisKKyM6IGRpZmYuYzo1NDQxCittc2dpZCAic2hvdyB3b3JkIGRpZmYsIHVzaW5nIDxtb2RlPiB0byBkZWxpbWl0IGNoYW5nZWQgd29yZHMiCittc2dzdHIgIiIKKyJtdWVzdHJhIGRpZmYgcG9yIHBhbGFicmFzIHVzYW5kbyA8bW9kbz4gcGFyYSBkZWxpbWl0YXIgbGFzIHBhbGFicmFzIGNhbWJpYWRhcyIKKworIzogZGlmZi5jOjU0NDMgZGlmZi5jOjU0NDYgZGlmZi5jOjU0OTEKK21zZ2lkICI8cmVnZXg+IgorbXNnc3RyICI8cmVnZXg+IgorCisjOiBkaWZmLmM6NTQ0NAorbXNnaWQgInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIKK21zZ3N0ciAidXNhIDxyZWdleD4gcGFyYSBkZWNpZGlyIHF1ZSBwYWxhYnJhIGVzIgorCisjOiBkaWZmLmM6NTQ0NworbXNnaWQgImVxdWl2YWxlbnQgdG8gLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKK21zZ3N0ciAiZXF1aXZhbGVudGUgYSAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IgorCisjOiBkaWZmLmM6NTQ1MAorbXNnaWQgIm1vdmVkIGxpbmVzIG9mIGNvZGUgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkiCittc2dzdHIgImzDrW5lYXMgbW92aWRhcyBkZSBjw7NkaWdvIGVzdMOhbiBjb2xvcmVhZGFzIGRpZmVyZW50ZSIKKworIzogZGlmZi5jOjU0NTMKK21zZ2lkICJob3cgd2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkIGluIC0tY29sb3ItbW92ZWQiCittc2dzdHIgImNvbW8gZXNwYWNpb3MgZW4gYmxhbmNvIHNvbiBpZ25vcmFkb3MgZW4gLS1jb2xvci1tb3ZlZCIKKworIzogZGlmZi5jOjU0NTYKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgIk90cmFzIG9wY2lvbmVzIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisiY3VhbmRvIGVqZWN1dGFkbyBkZXNkZSB1biBzdWJkaXIsIGV4Y2x1eWUgY2FtYmlvcyBkZWwgZXh0ZXJpb3IgeSBtdWVzdHJhICIKKyJwYXRocyByZWxhdGl2b3MiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgInRyYXRhciB0b2RvcyBsb3MgYXJjaGl2b3MgY29tbyB0ZXh0byIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgImNhbWJpYSBkb3MgaW5wdXRzLCBpbnZpZXJ0ZSBlbCBkaWZmIgorCisjOiBkaWZmLmM6NTQ2NgorbXNnaWQgImV4aXQgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMsIDAgb3RoZXJ3aXNlIgorbXNnc3RyICJ0ZXJtaW5hIGNvbiAxIHNpIGh1Ymllcm9uIGRpZmVyZW5jaWFzLCBkZSBsbyBjb250cmFyaW8gY29uIDAiCisKKyM6IGRpZmYuYzo1NDY4Cittc2dpZCAiZGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIgorbXNnc3RyICJkZXNoYWJpbGl0YSB0b2RvIGVsIG91dHB1dCBkZWwgcHJvZ3JhbWEiCisKKyM6IGRpZmYuYzo1NDcwCittc2dpZCAiYWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQiCittc2dzdHIgInBlcm1pdGUgbGEgZWplY3VjacOzbiBkZSB1biBkaWZmIGhlbHBlciBleHRlcm5vIgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInJ1biBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKyJlamVjdXRhIGZpbHRyb3MgZGUgY29udmVyc2nDs24gZGUgdGV4dG8gZXh0ZXJub3MgY3VhbmRvIGNvbXBhcmFuZG8gYmluYXJpb3MiCisKKyM6IGRpZmYuYzo1NDc0Cittc2dpZCAiPHdoZW4+IgorbXNnc3RyICI8Y3VhbmRvPiIKKworIzogZGlmZi5jOjU0NzUKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24iCittc2dzdHIgImlnbm9yYXIgY2FtYmlvcyBhIHN1Ym3Ds2R1bG9zIGVuIGxhIGdlbmVyYWNpw7NuIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1NDc4Cittc2dpZCAiPGZvcm1hdD4iCittc2dzdHIgIjxmb3JtYXRvPiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAiZXNwZWNpZmljYSBjb21vIHNvbiBtb3N0cmFkYXMgbGFzIGRpZmVyZW5jaWFzIGVuIHN1Ym3Ds2R1bG9zIgorCisjOiBkaWZmLmM6NTQ4MworbXNnaWQgImhpZGUgJ2dpdCBhZGQgLU4nIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm9jdWx0YXIgZW50cmFkYXMgJ2dpdCBhZGQgLU4nIGRlbCBpbmRleCIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAidHJhdGEgZW50cmFkYXMgJ2dpdCBhZGQgLU4nIGNvbW8gcmVhbGVzIGVuIGVsIGluZGV4IgorCisjOiBkaWZmLmM6NTQ4OAorbXNnaWQgIjxzdHJpbmc+IgorbXNnc3RyICI8c3RyaW5nPiIKKworIzogZGlmZi5jOjU0ODkKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJzdHJpbmciCittc2dzdHIgIiIKKyJidXNjYSBwb3IgZGlmZXJlbmNpYXMgcXVlIGNhbWJpZW4gZWwgbsO6bWVybyBkZSBvY3VycmVuY2lhcyBwYXJhIGVsIHN0cmluZyAiCisiZXNwZWNpZmljYWRvIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisiYnVzY2EgcG9yIGRpZmVyZW5jaWFzIHF1ZSBjYW1iaWVuIGVsIG7Dum1lcm8gZGUgb2N1cnJlbmNpYXMgcGFyYSBlbCByZWdleCAiCisiZXNwZWNpZmljYWRvIgorCisjOiBkaWZmLmM6NTQ5NQorbXNnaWQgInNob3cgYWxsIGNoYW5nZXMgaW4gdGhlIGNoYW5nZXNldCB3aXRoIC1TIG9yIC1HIgorbXNnc3RyICJtb3N0cmFyIHRvZG9zIGxvcyBjYW1iaW9zIGVuIGVsIGNoYW5nZXNldCBjb24gLVMgbyAtRyIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgInRyYXRhciA8c3RyaW5nPiBlbiAtUyBjb21vIHVuYSBleHByZXNpw7NuIHJlZ3VsYXIgZXh0ZW5kaWRhIGRlIFBPU0lYIgorCisjOiBkaWZmLmM6NTUwMQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJjb250cm9sYXIgZWwgb3JkZW4gZW4gZWwgcXVlIGxvcyBhcmNoaXZvcyBhcGFyZWNlbiBlbiBsYSBzYWxpZGEiCisKKyM6IGRpZmYuYzo1NTAyCittc2dpZCAiPG9iamVjdC1pZD4iCittc2dzdHIgIjxpZC1vYmpldG8+IgorCisjOiBkaWZmLmM6NTUwMworbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorIm9iamVjdCIKK21zZ3N0ciAiIgorImJ1c2NhIHBvciBkaWZlcmVuY2lhcyBxdWUgY2FtYmllbiBlbCBuw7ptZXJvIGRlIG9jdXJyZW5jaWFzIHBhcmEgZWwgb2JqZXRvICIKKyJlc3BlY2lmaWNhZG8iCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAic2VsZWNjaW9uYSBhcmNoaXZvcyBwb3IgdGlwbyBkZSBkaWZmIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiPGFyY2hpdm8+IgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIk91dHB1dCBhIHVuIGFyY2hpdm8gZXNwZWPDrWZpY28iCisKKyM6IGRpZmYuYzo2MTY0Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJkZXRlY2Npw7NuIGRlIGNhbWJpbyBkZSBub21icmUgaW5leGFjdGEgZnVlIHNhbHRhZGEgcG9yIGhhYmVyIG11Y2hvcyBhcmNoaXZvcy4iCisKKyM6IGRpZmYuYzo2MTY3Cittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisic29sbyBzZSBlbmNvbnRyYXJvbiBjb3BpYXMgZGUgcnV0YXMgbW9kaWZpY2FkYXMgcG9yIGhhYmVyIG11Y2hvcyBhcmNoaXZvcy4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKK21zZ3N0ciAiIgorInRhbCB2ZXogcXVpZXJhcyBjb25maWd1cmFyIGxhIHZhcmlhYmxlICVzIHBhcmEgcG9yIGxvIG1lbm9zICVkIHkgdm9sdmVyIGEgIgorImludGVudGFyIGVsIGNvbWFuZG8uIgorCisjOiBkaXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAiIgorInJ1dGEgZXNwZWNpZmljYWRhICclcycgbm8gY29uY29yZMOzIGNvbiBuaW5nw7puIGFyY2hpdm8ocykgY29ub2NpZG8gcG9yIGdpdCIKKworIzogZGlyLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJwYXRyw7NuIGRlc2Nvbm9jaWRvOiAnJXMnIgorCisjOiBkaXIuYzo2ODIgZGlyLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJwYXRyw7NuIG5lZ2F0aXZvIG5vIHJlY29ub2NpZG86ICclcyciCisKKyM6IGRpci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBoYXZlIGlzc3VlczogcGF0dGVybiAnJXMnIGlzIHJlcGVhdGVkIgorbXNnc3RyICIiCisidHUgYXJjaGl2byBzcGFyc2UtY2hlY2tvdXQgdGFsIHZleiB0ZW5nYSBlcnJvcmVzOiBwYXRyw7NuICclcycgZXN0w6EgcmVwZXRpZG8iCisKKyM6IGRpci5jOjcyNAorbXNnaWQgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCittc2dzdHIgImRlc2hhYmlsaXRhciBjb2luY2lkZW5jaWEgZGUgcGF0csOzbmVzIGNvbm8iCisKKyM6IGRpci5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZWRlIHVzYXIgJXMgY29tbyBhcmNoaXZvIGRlIGV4Y2x1c2nDs24iCisKKyM6IGRpci5jOjIwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgZWwgZGlyZWN0b3JpbyAnJXMnIgorCisjOiBkaXIuYzoyNDE1Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgImZhbGzDsyBhbCBjb25zZWd1aXIgbGEgaW5mb3JtYWNpw7NuIHkgbm9tYnJlIGRlbCBrZXJuZWwiCisKKyM6IGRpci5jOjI1MzkKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgInVudHJhY2tlZCBjYWNoZSBlc3TDoSBkZXNhY3RpdmFkbyBlbiBlc3RlIHNpc3RlbWEgbyB1YmljYWNpw7NuIgorCisjOiBkaXIuYzozMzQzCisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCBpbiByZXBvICVzIgorbXNnc3RyICJhcmNoaXZvIMOtbmRpY2UgY29ycm9tcGlkbyBlbiByZXBvc2l0b3JpbyAlcyIKKworIzogZGlyLmM6MzM4OCBkaXIuYzozMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGRpcmVjdG9yaW9zIHBhcmEgJXMiCisKKyM6IGRpci5jOjM0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBtaWdyYXIgZWwgZGlyZWN0b3JpbyBnaXQgZGUgJyVzJyBhICclcyciCisKKyM6IGVkaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgImF5dWRhOiBFc3BlcmFuZG8gcXVlIHR1IGVkaXRvciBjaWVycmUgZWwgYXJjaGl2byAuLi4lYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiRmlsdHJhbmRvIGNvbnRlbmlkbyIKKworIzogZW50cnkuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGVzdGFibGVjZXIgZWwgYXJjaGl2byAnJXMnIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAicnV0YSBkZSBuYW1lc3BhY2UgZGUgZ2l0IG1hbGEgXCIlc1wiIgorCisjOiBlbnZpcm9ubWVudC5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjb25maWd1cmFyIEdJVF9ESVIgYSAnJXMnIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAiZGVtYXNpYWRvcyBhcmd1bWVudG9zIHBhcmEgY29ycmVyICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTUwCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGxpc3RhIHBvY28gcHJvZnVuZGEgZXNwZXJhZGEiCisKKyM6IGZldGNoLXBhY2suYzoxNTMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICIiCisiZ2l0IGZldGNoLXBhY2s6IHNlIGVzcGVyYWJhIHVuIGZsdXNoIHBhY2tldCBsdWVnbyBkZSBsYSBsaXN0YSBzdXBlcmZpY2lhbCIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBzZSBlc3BlcmFiYSBBQ0svTkFLLCBzZSBvYnR1dm8gdW4gZmx1c2ggcGFja2V0IgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IHNlIGVzcGVyYWJhIEFDSy9OQUssIHNlIG9idHV2byAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTk1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRvIHJlbW90ZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZXNjcmliaXIgYWwgcmVtb3RvIgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpZXJlIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImzDrW5lYSBwb2NvIHByb2Z1bmRhIGludsOhbGlkYTogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjIgZmV0Y2gtcGFjay5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImzDrW5lYSBzdXBlcmZpY2lhbCBpbnbDoWxpZGE6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJvYmpldG8gbm8gZW5jb250cmFkbzogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjcgZmV0Y2gtcGFjay5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAiZXJyb3IgZW4gb2JqZXRvOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAic3VwZXJmaWNpZSBubyBlbmNvbnRyYWRhOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MiBmZXRjaC1wYWNrLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICJzZSBlc3BlcmFiYSBzaGFsbG93L3Vuc2hhbGxvdywgc2Ugb2J0dXZvICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAic2Ugb2J0dXZvICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICJjb21taXQgaW52w6FsaWRvICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDYyCittc2dpZCAiZ2l2aW5nIHVwIgorbXNnc3RyICJyaW5kacOpbmRvc2UiCisKKyM6IGZldGNoLXBhY2suYzo0NzUgcHJvZ3Jlc3MuYzozMjMKK21zZ2lkICJkb25lIgorbXNnc3RyICJsaXN0byIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAic2Ugb2J0dXZvICVzICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAiTWFyY2FuZG8gJXMgY29tbyBjb21wbGV0YSIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAieWEgc2UgdGllbmUgJXMgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrOiBubyBzZSBwdWVkZSBleHRyYWVyIHVuIGRlbXVsdGlwbGV4b3IgZGUgYmFuZGEgbGF0ZXJhbCIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sbzogcGFxdWV0ZSBkZSBoZWFkZXIgZXJyw7NuZW8iCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiBubyBzZSBwdWVkZSBxdWl0YXIgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyBmYWxsw7MiCisKKyM6IGZldGNoLXBhY2suYzo5MTgKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJlcnJvciBlbiBkZW11bHRpcGxleG9yIGRlIGJhbmRhIGxhdGVyYWwiCisKKyM6IGZldGNoLXBhY2suYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIKK21zZ3N0ciAiVmVyc2nDs24gZGUgc2Vydmlkb3IgZXMgJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgIkVsIHNlcnZpZG9yIHNvcG9ydGEgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIHNvcG9ydGEgY2xpZW50ZXMgc3VwZXJmaWNpYWxlcyIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIHNvcG9ydGEgLS1zaGFsb3ctc2luY2UiCisKKyM6IGZldGNoLXBhY2suYzoxMDM3Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LWV4Y2x1ZGUiCittc2dzdHIgIkVsIHNlcnZpZG9yIG5vIHNvcG9ydGEgLS1zaGFsb3ctZXhjbHVkZSIKKworIzogZmV0Y2gtcGFjay5jOjEwNDEKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gc29wb3J0YSAtLWRlZXBlbiIKKworIzogZmV0Y2gtcGFjay5jOjEwNTgKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAibm8gaGF5IGNvbW1pdHMgY29tdW5lcyIKKworIzogZmV0Y2gtcGFjay5jOjEwNzAgZmV0Y2gtcGFjay5jOjE1MzYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhbGzDsy4iCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gc29wb3J0YSBwZXRpY2lvbmVzIHN1cGVyZmljaWFsZXMiCisKKyM6IGZldGNoLXBhY2suYzoxMjE2Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGZpbHRlciIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igc29wb3J0YSBmaWx0cm8iCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICJubyBzZSBwdWVkZSBlc2NyaWJpciByZXF1ZXN0IGFsIHJlbW90byIKKworIzogZmV0Y2gtcGFjay5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBzZWN0aW9uIGhlYWRlciAnJXMnIgorbXNnc3RyICJlcnJvciBsZXllbmRvIHNlY2Npw7NuIGhlYWRlciAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAnJXMnLCByZWNlaXZlZCAnJXMnIgorbXNnc3RyICJzZSBlc3BlcmFiYSAnJXMnLCBzZSByZWNpYmnDsyAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgImzDrW5lYSBkZSBjb25maXJtYWNpw7NuIGluZXNwZXJhZGE6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgImVycm9yIHByb2Nlc2FuZG8gYWNrczogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICJlc3BlcmUgcXVlIGVsIHBhY2tmaWxlIHNlYSBtYW5kYWRvIGx1ZWdvIGRlbCAnbGlzdG8nIgorCisjOiBmZXRjaC1wYWNrLmM6MTMyMAorbXNnaWQgImV4cGVjdGVkIG5vIG90aGVyIHNlY3Rpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgbm8gJ3JlYWR5JyIKK21zZ3N0ciAiZXNwZXJlIHF1ZSBuaW5ndW5hIG90cmEgc2VjY2nDs24gc2VhIGVudmlhZGEgbHVlZ28gZGVsICdsaXN0byciCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAiZXJyb3IgcHJvY2VzYW5kbyBpbmZvcm1hY2nDs24gc3VwZXJmaWNpYWw6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAic2UgZXNwZXJhYmEgd2FudGVkLXJlZiwgc2Ugb2J0dXZvICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAid2FudGVkLXJlZiBpbmVzcGVyYWRvOiAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAiZXJyb3IgcHJvY2VzYW5kbyByZWZzIGRlc2VhZGFzOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAibm8gY29uY3VlcmRhIGVsIGhlYWQgcmVtb3RvIgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg4Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgInJlbW90byBubyBtYW5kbyB0b2RvcyBsb3Mgb2JqZXRvcyBuZWNlc2FyaW9zIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIm5vIGV4aXN0ZSByZWYgcmVtb3RhICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gcGVybWl0ZSBzb2xpY2l0dWRlcyBkZSBvYmpldG9zIGluYWR2ZXJ0aWRvcyAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyMworbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgYXJjaGl2byB0ZW1wb3JhbCIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGVzY3JpYmlyIGxhIGZpcm1hIHNlcGFyYWRhIHBhcmEgJyVzJyIKKworIzogZ3BnLWludGVyZmFjZS5jOjM5MAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIGZhbGzDsyBhbCBmaXJtYXIgbGEgZGF0YSIKKworIzogZ3JhcGguYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmUgaW52YWxpZCBjb2xvciAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIgorbXNnc3RyICJpZ25vcmEgY29sb3IgaW52w6FsaWRvICclLipzJyBlbiBsb2cuZ3JhcGhDb2xvcnMiCisKKyM6IGdyZXAuYzo2NjgKK21zZ2lkICIiCisiZ2l2ZW4gcGF0dGVybiBjb250YWlucyBOVUxMIGJ5dGUgKHZpYSAtZiA8ZmlsZT4pLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkICIKKyJ3aXRoIC1QIHVuZGVyIFBDUkUgdjIiCittc2dzdHIgIiIKKyJlbCBwYXRyw7NuIHByb3Zpc3RvIGNvbnRpZW5lIGJ5dGVzIE5VTEwgKHZpYSAtZiA8YXJjaGl2bz4pLiBFc3RvIHNvbG8gZXMgIgorInNvcG9ydGFkbyBjb24gLVAgYmFqbyBQQ1JFIHYyIgorCisjOiBncmVwLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJzogbm8gZXMgcG9zaWJsZSBsZWVyICVzIgorCisjOiBncmVwLmM6MjE0MSBzZXR1cC5jOjE2NSBidWlsdGluL2Nsb25lLmM6NDExIGJ1aWx0aW4vZGlmZi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgImZhbGzDsyBhbCBtYXJjYXIgJyVzJyIKKworIzogZ3JlcC5jOjIxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAiJyVzJzogbGVjdHVyYSBjb3J0YSIKKworIzogaGVscC5jOjIzCittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgImNvbWllbnphIHVuIMOhcmVhIGRlIHRyYWJham8gKHZlciB0YW1iacOpbjogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAidHJhYmFqYSBlbiBsb3MgY2FtYmlvcyBhY3R1YWxlcyAodmVyIHRhbWJpw6luOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiZXhhbWluYSBlbCBoaXN0b3JpYWwgeSBlbCBlc3RhZG8gKHZlciB0YW1iacOpbjogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiY3JlY2UsIG1hcmNhIHkgYWp1c3RhIHR1IGhpc3RvcmlhbCBjb23Dum4iCisKKyM6IGhlbHAuYzoyNworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAiY29sYWJvcmEgKG1pcmEgdGFtYmnDqW46IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJDb21hbmRvcyBkZSBQb3JjZWxhbmEgcHJpbmNpcGFsZXMiCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAiQ29tYW5kb3MgYXV4aWxpYXJlcyAvIE1hbmlwdWxhZG9yZXMiCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkNvbWFuZG9zIGF1eGlsaWFyZXMgLyBJbnRlcnJvZ2Fkb3JlcyIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIkludGVyYWN0dWFuZG8gY29uIE90cm9zIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIkNvbWFuZG9zIGRlIGJham8gbml2ZWwgLyBNYW5pcHVsYWRvcmVzIgorCisjOiBoZWxwLmM6MzYKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICJDb21hbmRvcyBkZSBiYWpvIG5pdmVsIC8gSW50ZXJyb2dhZG9yZXMiCisKKyM6IGhlbHAuYzozNworbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJDb21hbmRvcyBkZSBiYWpvIG5pdmVsIC8gU2luY3Jvbml6YWNpw7NuIGRlIHJlcG9zaXRvcmlvcyIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAiQ29tYW5kb3MgZGUgYmFqbyBuaXZlbCAvIEF1eGlsaWFyZXMgaW50ZXJub3MiCisKKyM6IGhlbHAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICJjb21hbmRvcyBkaXNwb25pYmxlcyBkZSBnaXQgZW4gJyVzJyIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiY29tYW5kb3MgZGlzcG9uaWJsZXMgZGUgZ2l0IGRlc2RlIG90cm8gbHVnYXIgZW4gdHUgJFBBVEgiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkVzdG9zIHNvbiBjb21hbmRvcyBjb211bmVzIGRlIEdpdCB1c2Fkb3MgZW4gdmFyaWFzIHNpdHVhY2lvbmVzOiIKKworIzogaGVscC5jOjM2MyBnaXQuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBjb21tYW5kIGxpc3RpbmcgdHlwZSAnJXMnIgorbXNnc3RyICJjb21hbmRvIGRlIGxpc3RhZG8gZGUgdGlwb3Mgbm8gc29wb3J0YWRvICclcyciCisKKyM6IGhlbHAuYzo0MDMKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAiTGFzIGd1w61hcyBjb211bmVzIGRlIEdpdCBzb246IgorCisjOiBoZWxwLmM6NTEyCittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIHRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIgorbXNnc3RyICJWZWEgJ2dpdCBoZWxwIDxjb21hbmRvPicgcGFyYSBsZWVyIHNvYnJlIGxvcyBzdWJjb21hbmRvcyBlc3BlY8OtZmljb3MiCisKKyM6IGhlbHAuYzo1MTcKK21zZ2lkICJFeHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAiQ29tYW5kb3MgZXh0ZXJub3MiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIkFsaWFzZXMgZGUgY29tYW5kbyIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyInJXMnIHBhcmVjZSBzZXIgdW4gY29tYW5kbyBkZSBnaXQsIHBlcm8gbm8gaGVtb3NcbiIKKyJwb2RpZG8gZWplY3V0YXJsby4gwr9UYWwgdmV6IGdpdC0lcyBzZSBoYSByb3RvPyIKKworIzogaGVscC5jOjY1NQorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICJPaCBvaC4gVHUgc2lzdGVtYSBubyByZXBvcnRhIG5pbmfDum4gY29tYW5kbyBkZSBHaXQuIgorCisjOiBoZWxwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIlBFTElHUk86IEhhcyBsbGFtYWRvIGEgdW4gY29tYW5kbyBkZSBHaXQgJyVzJywgZWwgY3VhbCBubyBleGlzdGUuIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIkNvbnRpbnVhbmRvIGFzdW1pZW5kbyBxdWUgcXVpc2lzdGUgZGVjaXIgJyVzJy4iCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiQ29udGludWFuZG8gZW4gJTAuMWYgc2VndW5kb3MsIGFzdW1pZW5kbyBxdWUgdHUgZGlqaXN0ZSAnJXMnLiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcydubyBlcyB1biBjb21hbmRvIGRlIGdpdC4gTWlyYSAnZ2l0IC0taGVscCcuIgorCisjOiBoZWxwLmM6Njk5Cittc2dpZCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZCBpcyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIgorbXNnc3RyWzBdICIiCisiXG4iCisiRWwgY29tYW5kbyBtw6FzIHNpbWlsYXIgZXMiCittc2dzdHJbMV0gIiIKKyJcbiIKKyJMb3MgY29tYW5kb3MgbcOhcyBzaW1pbGFyZXMgc29uIgorCisjOiBoZWxwLmM6NzE0Cittc2dpZCAiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB2ZXJzacOzbiBbPG9wY2lvbmVzPl0iCisKKyM6IGhlbHAuYzo3ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiVzOiAlcyAtICVzIgorCisjOiBoZWxwLmM6Nzg3Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisiwr9RdWlzaXN0ZSBkZWNpciBlc3RvPyIKK21zZ3N0clsxXSAiIgorIlxuIgorIsK/UXVpc2lzdGUgZGVjaXIgYWxndW5vIGRlIGVzdG9zPyIKKworIzogaWRlbnQuYzozNDkKK21zZ2lkICIiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogUG9yIGZhdm9yIGN1w6ludGFtZSBxdWllbiBlcmVzLlxuIgorIlxuIgorIkNvcnJlXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJUdSBOb21icmVcIlxuIgorIlxuIgorInBhcmEgY29uZmlndXJhciBsYSBpZGVudGlkYWQgcG9yIGRlZmVjdG8gZGUgdHUgY3VlbnRhLlxuIgorIk9taXRlIC0tZ2xvYmFsIHBhcmEgY29uZmlndXJhciB0dSBpZGVudGlkYWQgc29sbyBlbiBlc3RlIHJlcG9zaXRvcmlvLlxuIgorIlxuIgorCisjOiBpZGVudC5jOjM3OQorbXNnaWQgIm5vIGVtYWlsIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIm5vIHNlIGVudHJlZ28gbmluZ8O6biBlbWFpbCB5IGxhIGRldGVjY2nDs24gYXV0b23DoXRpY2EgZXN0w6EgZGVzYWN0aXZhZGEiCisKKyM6IGlkZW50LmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYXV0by1kZXRlY3RhciBsYSBkaXJlY2Npw7NuIGRlIGNvcnJlbyAoc2Ugb2J0dXZvICclcycpIgorCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAibm8gc2UgZW50cmVnbyBuaW5nw7puIG5vbWJyZSB5IGxhIGRldGVjY2nDs24gYXV0b23DoXRpY2EgZXN0w6EgZGVzYWN0aXZhZGEiCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYXV0by1kZXRlY3RhciBlbCBub21icmUgKHNlIG9idHV2byAnJXMnKSIKKworIzogaWRlbnQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgaWRlbnQgbmFtZSAoZm9yIDwlcz4pIG5vdCBhbGxvd2VkIgorbXNnc3RyICJubyBzZSBwdWVkZSB0ZW5lciB1biBub21icmUgdmFjw61vIChwYXJhIDwlcz4pIgorCisjOiBpZGVudC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAiZWwgbm9tYnJlIGNvbnNpc3RlIHNvbG8gZGUgY2FyYWN0ZXJlcyBubyBwZXJtaXRpZG9zOiAlcyIKKworIzogaWRlbnQuYzo0MzYgYnVpbHRpbi9jb21taXQuYzo2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdG8gZGUgZmVjaGEgaW52w6FsaWRvOiAlcyIKKworIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAiZW50cmFkYSAnJXMnIGVuIMOhcmJvbCAlcyB0aWVuZSBtb2RvIMOhcmJvbCwgcGVybyBubyBlcyB1bm8iCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIGJsb2IgbW9kZSwgYnV0IGlzIG5vdCBhIGJsb2IiCittc2dzdHIgImVudHJhZGEgJyVzJyBlbiDDoXJib2wgJXMgdGllbmUgbW9kbyBibG9iLCBwZXJvIG5vIGVzIHVubyIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjYXJnYXIgw6FyYm9sIHJhw616IHBhcmEgY29tbWl0ICVzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3Mgc3BhcnNlIGJsb2IgaW4gJyVzJyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhY2NlZGVyIGFsIGJsb2IgZW4gJyVzJyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIGFuYWxpemFyIGZpbHRybyBkZSBkYXRhIGVuICVzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICJzZSBlc3BlcmFiYSAndHJlZTo8ZGVwdGg+JyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAic29wb3J0ZSBwYXJhIGZpbHRyb3Mgc3BhcnNlOnBhdGggaGEgc2lkbyBkaXNjb250aW51YWRvIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciCittc2dzdHIgImZpbHRybyAtc3BlYyBpbnbDoWxpZG8gJyVzJyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorbXNnc3RyICJ0aWVuZXMgcXVlIGVzY2FwYXIgZWwgY2FyYWN0ZXIgZW4gc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgInNlIGVzcGVyYSBhbGdvIGx1ZWdvIGRlIGNvbWJpbmU6IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoyMjYKK21zZ2lkICJtdWx0aXBsZSBmaWx0ZXItc3BlY3MgY2Fubm90IGJlIGNvbWJpbmVkIgorbXNnc3RyICJubyBzZSBwdWVkZW4gY29tYmluYXIgbcO6bHRpcGxlcyB0aXBvcyBkZSBlc3BlY2lmaWNhY2lvbmVzIGRlIGZpbHRybyIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGNyZWFyICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiT3RybyBwcm9jZXNvIGdpdCBwYXJlY2UgZXN0YXIgY29ycmllbmRvIGVuIGVsIHJlcG9zaXRvcmlvLCBlcyBkZWNpclxuIgorInVuIGVkaXRvciBhYmllcnRvIGNvbiAnZ2l0IGNvbW1pdCcuIFBvciBmYXZvciBhc2Vnw7pyZXNlIGRlIHF1ZSB0b2RvcyBsb3MgIgorInByb2Nlc29zXG4iCisiZXN0w6FuIHRlcm1pbmFkb3MgeSB2dWVsdmUgYSBpbnRlbnRhci4gU2kgZWwgZmFsbG8gcGVybWFuZWNlLCB1biBwcm9jZXNvIGdpdFxuIgorInB1ZWRlIGhhYmVyIHJvdG8gZWwgcmVwb3NpdG9yaW8gYW50ZXM6XG4iCisiYm9ycmEgZWwgYXJjaGl2byBtYW51YWxtZW50ZSBwYXJhIGNvbnRpbnVhci4iCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjcmVhciAnJXMubG9jayc6ICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJmYWxsw7MgYWwgbGVlciBsYSBjYWNoZSIKKworIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODc0IGJ1aWx0aW4vYW0uYzoxOTA4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTM5IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTggYnVpbHRpbi9jbG9uZS5jOjgwOQorIzogYnVpbHRpbi9zdGFzaC5jOjI2NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciBlbCBhcmNoaXZvIMOtbmRpY2UiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NworbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoY29tbWl0IGVycsOzbmVvKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRfY2FjaGVpbmZvIGZhbGzDsyBwYXJhIGxhIHJ1dGEgJyVzJzsgYWJvcnRhbmRvIGZ1c2nDs24uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgdG8gcmVmcmVzaCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgImFkZF9jYWNoZWluZm8gZmFsbMOzIHBhcmEgcmVmcmVzY2FyIGxhIHJ1dGEgJyVzJzsgYWJvcnRhbmRvIGZ1c2nDs24uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGxhIHJ1dGEgJyVzJyVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiUmVtb3ZpZW5kbyAlcyBwYXJhIGhhY2VyIGVzcGFjaW8gcGFyYSB1biBzdWJkaXJlY3RvcmlvXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxMCBtZXJnZS1yZWN1cnNpdmUuYzo5MjkKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICI6IMK/dGFsIHZleiB1biBjb25mbGljdG8gRC9GPyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAicmVodXNhbmRvIHBlcmRlciBlbCBhcmNoaXZvIHJhc3RyZWFkbyBlbiAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjAgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIG9iamV0byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAic2UgZXNwZXJhYmEgYmxvYiBwYXJhICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGFicmlyICclcyc6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgY3JlYXIgZWwgZW5sYWNlIHNpbWLDs2xpY28gJyVzJzogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAibm8gc2UgcXVlIGhhY2VyIGNvbiAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiRmFsbMOzIGFsIGZ1c2lvbmFyIGVsIHN1Ym3Ds2R1bG8gJXMgKG5vIHJldmlzYWRvKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAiRmFsbMOzIGFsIGZ1c2lvbmFyIGVsIHN1Ym3Ds2R1bG8gJXMgKGNvbW1pdHMgbm8gcHJlc2VudGVzKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiRmFsbMOzIGVsIGZ1c2lvbmFyIHN1Ym3Ds2R1bG8gJXMgKGNvbW1pdHMgbm8gc2lndWVuIGxhIGZ1c2nDs24gYmFzZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjEgbWVyZ2UtcmVjdXJzaXZlLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiSGFjaWVuZG8gZmFzdC1mb3J3YXJkIGEgc3VibcOzZHVsbyAlcyBwYXJhIGVsIHNpZ3VpZW50ZSBjb21taXQ6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI0IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiQXZhbmNlIHLDoXBpZG8gZW4gc3VibcOzZHVsbyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtZXJnZSBmb2xsb3dpbmcgY29tbWl0cyBub3QgZm91bmQpIgorbXNnc3RyICIiCisiRmFsbMOzIGFsIGZ1c2lvbmFyIHN1Ym3Ds2R1bG8gJXMgKGxvcyBzaWd1ZW50ZXMgY29tbWl0cyBubyBmdWVyb24gZW5jb250cmFkb3MpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBmYXN0LWZvcndhcmQpIgorbXNnc3RyICJGYWxsw7MgYWwgZnVzaW9uYXIgZWwgc3VibcOzZHVsbyAlcyAobm8gZXMgcG9zaWJsZSBhdmFuY2UgcsOhcGlkbykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjQKK21zZ2lkICJGb3VuZCBhIHBvc3NpYmxlIG1lcmdlIHJlc29sdXRpb24gZm9yIHRoZSBzdWJtb2R1bGU6XG4iCittc2dzdHIgIlNlIGVuY29udHLDsyB1bmEgcG9zaWJsZSBzb2x1Y2nDs24gZGUgZnVzacOzbiBwYXJhIGVsIHN1Ym3Ds2R1bG86XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisiU2kgZXN0byBlcyBjb3JyZWN0byBzaW1wbGVtZW50ZSBhZ3LDqWdhbG8gYWwgw61uZGljZSBwb3IgZWplbXBsb1xuIgorInVzYW5kbzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorImVsIGN1YWwgYWNlcHRhcsOhIGVzdGEgc3VnZXJlbmNpYS5cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICJGYWxsw7MgYWwgZnVzaW9uYXIgZWwgc3VibcOzZHVsbyAlcyAoZnVzaW9uZXMgbcO6bHRpcGxlcyBlbmNvbnRyYWRhcykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDkKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiRmFsbMOzIGFsIGVqZWN1dGFyIGxhIGZ1c2nDs24gaW50ZXJuYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIGFncmVnYXIgJXMgYSBsYSBiYXNlIGRlIGRhdG9zIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiQXV0by1mdXNpb25hbmRvICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICIiCisiRXJyb3I6IFJlaHVzYW5kbyBwZXJkZXIgZWwgYXJjaGl2byBubyByYXN0cmVhZG8gZW4gJXM7IGVzY3JpYmnDqW5kb2xvIGEgJXMgZW4gIgorImNhbWJpby4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNUTyAoJXMvYm9ycmFyKTogJXMgYm9ycmFkbyBlbiAlcyB5ICVzIGVuICVzLiBGYWx0YSB2ZXJzacOzbiAlcyBkZSAlcyAiCisiZW4gZWwgw6FyYm9sLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJQ1RPICglcy9ib3JyYXIpOiAlcyBib3JyYWRvIGVuICVzIHkgJXMgcGFyYSAlcyBlbiAlcy4gVmVyc2nDs24gJXMgZGUgJXMgIgorInBlcm1hbmVjZSBlbiBlbCDDoXJib2wuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVE8gKCVzL2VsaW1pbmFyKTogJXMgZWxpbWluYWRvIGVuICVzIHkgJXMgZW4gJXMuIFZlcnNpw7NuICVzIGRlICVzICIKKyJkZWphZGEgZW4gZWwgw6FyYm9sLCBlbiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNUTyAoJXMvYm9ycmFyKTogJXMgYm9ycmFkbyBlbiAlcyB5ICVzIHBhcmEgJXMgZW4gJXMuIFZlcnNpw7NuICVzIGRlICVzICIKKyJwZXJtYW5lY2UgZW4gZWwgw6FyYm9sIGVuICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUzNAorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAicmVub21icmFyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTM0Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAicmVub21icmFkbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYxNCBtZXJnZS1yZWN1cnNpdmUuYzoyNTMwIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICJSZWh1c2FuZG8gcGVyZGVyIGVsIGFyY2hpdm8gc3VjaW8gZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgorIlJlaHVzYW5kbyBwZXJkZXIgZWwgYXJjaGl2byBubyByYXN0cmVhZG8gZW4gJXMsIGluY2x1c28gYXVucXVlIHNlIGVzdMOhICIKKyJpbnRlcnBvbmllbmRvLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNUTyAocmVub21icmFyL2FncmVnYXIpOiBSZW5vbWJyYXIgJXMtPiVzIGVuICVzLiAgJXMgYWdyZWdhZG8gZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIGVzIHVuIGRpcmVjdG9yaW8gZW4gJXMgYWdyZWdhbmRvIGNvbW8gJXMgbcOhcyBiaWVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIiCisiUmVodXNhbmRvIHBlcmRlciBlbCBhcmNoaXZvIG5vIHJhc3RyZWFkbyBlbiAlczsgYWdyZWfDoW5kb2xvIGNvbW8gJXMgZW4gY2FtYmlvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyJDT05GTElDVE8gKHJlbm9tYnJhci9yZW5vbWJyYXIpOiBSZW5vbWJyYXIgXCIlc1wiLT5cIiVzXCIgZW4gbGEgcmFtYSBcIiVzXCIgIgorInJlbm9tYnJhciBcIiVzXCItPlwiJXNcIiBlbiBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc0MgorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChkZWphZG8gc2luIHJlc29sdmVyKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElDVE8gKHJlbm9tYnJhci9yZW5vbWJyYXIpOiBSZW5vbWJyYXIgJXMtPiVzIGVuICVzLiBSZW5vbWJyYXIgJXMtPiVzIGVuICIKKyIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiBVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgIgorImRpcmVjdG9yeSAlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2l0aCBubyBkZXN0aW5hdGlvbiAiCisiZ2V0dGluZyBhIG1ham9yaXR5IG9mIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVE8gKGRpdmlzacOzbiBkZSBjYW1iaW8gZGUgbm9tYnJlIGRlIGRpcmVjdG9yaW8pOiBObyBlcyBjbGFybyBkw7NuZGUgIgorImNvbG9jYXIgJXMgcG9ycXVlIGVsIGRpcmVjdG9yaW8gJXMgZnVlIHJlbm9tYnJhZG8gYSBvdHJvcyBtw7psdGlwbGVzICIKKyJkaXJlY3Rvcmlvcywgc2luIG5pbmfDum4gcXVlIGNvbnRlbmdhIGxhIG1heW9yw61hIGRlIGFyY2hpdm9zLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVE8gKGNhbWJpbyBkZSBub21icmUgZGUgZGlyZWN0b3JpbyBpbXBsw61jaXRvKTogQXJjaGl2by9kaXJlY3RvcmlvICIKKyJleGlzdGVudGUgZW4gJXMgc2UgaW50ZXJwb25lIGNvbiBlbCBjYW1iaW8gZGUgbm9tYnJlcyBpbXBsw61jaXRvLCBwb25pZW5kbyAiCisibGEocykgc2lndWllbnRlKHMpIHJ1dGEocykgYXF1w606ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyJDT05GTElDVE8gKGNhbWJpbyBkZSBub21icmUgaW1wbMOtY2l0byk6IE5vIHNlIHB1ZWRlIG1hcGVhciBtw6FzIGRlIHVuYSBydXRhICIKKyJwYXJhICVzOyBjYW1iaW8gZGUgbm9tYnJlIGltcGzDrWNpdG8gaW50ZW50w7MgcG9uZXIgZXN0YXMgcnV0YXM6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElDVE8gKHJlbm9tYnJhci9yZW5vbWJyYXIpOiBSZW5vbWJyYXIgZGlyZWN0b3JpbyAlcy0+JXMgZW4gJXMuICIKKyJSZW5vbWJyYXIgZGlyZWN0b3JpbyAlcy0+JXMgZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIlBFTElHUk86IEV2aXRhbmRvIGFwbGljYXIgJXMgLT4gJXMgcmVub21icmFkbyBhICVzLCBwb3JxdWUgJXMgbWlzbW8gZnVlICIKKyJyZW5vbWJyYWRvLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBvYmpldG8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIm9iamV0byAlcyBubyBlcyB1biBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICJtb2RpZmljYXIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAibW9kaWZpY2FkbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5OAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgImNvbnRlbmlkbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEwMgorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgImFncmVnYXIvYWdyZWdhciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIlNhbHRhZG8gJXMgKGZ1c2lvbmFkbyBjb21vIGV4aXN0ZW50ZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNDcgZ2l0LXN1Ym1vZHVsZS5zaDo5OTMKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgInN1Ym3Ds2R1bG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIkNPTkZMSUNUTyAoJXMpOiBDb25mbGljdG8gZGUgZnVzacOzbiBlbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiQWdyZWdhbmRvIG3DoXMgYmllbiBjb21vICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIlBhdGggYWN0dWFsaXphZG86ICVzIGFncmVnYWRvIGVuICVzIGRlbnRybyBkZSB1biBkaXJlY3RvcmlvIHF1ZSBmdWUgIgorInJlbm9tYnJhZG8gZW4gJXM7IG1vdmnDqW5kb2xvIGEgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkICIKKyJpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVE8gKHViaWNhY2nDs24gZGUgYXJjaGl2byk6ICVzIGFncmVnYWRvIGVuICVzIGRlbnRybyBkZSB1biBkaXJlY3RvcmlvICIKKyJxdWUgZnVlIHJlbm9tYnJhZG8gZW4gJXMsIHN1Z2VyaW1vcyBxdWUgZGViZXLDrWEgc2VyIG1vdmlkbyBhICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAiCisiJXM7IG1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJQYXRoIGFjdHVhbGl6YWRvOiAlcyByZW5vbWJyYWRvIGEgJXMgZW4gJXMsIGRlbnRybyBkZSB1biBkaXJlY3RvcmlvIHF1ZSBmdWUgIgorInJlbm9tYnJhZG8gZW4gJXM7IG1vdmnDqW5kb2xvIGEgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0ICIKKyJ3YXMgcmVuYW1lZCBpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVE8gKHViaWNhY2nDs24gZGUgYXJjaGl2byk6ICVzIHJlbm9tYnJhZG8gYSAlcyBlbiAlcywgZGVudHJvIGRlIHVuICIKKyJkaXJlY3RvcmlvIHF1ZSBmdWUgcmVub21icmFkbyBlbiAlcywgc3VnaXJpZW5kbyBxdWUgdGFsIHZleiBkZWJlcsOtYSBzZXIgIgorIm1vdmlkbyBhICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiRWxpbWluYW5kbyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQwOAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJhcmNoaXZvL2RpcmVjdG9yaW8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MTMKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAiZGlyZWN0b3Jpby9hcmNoaXZvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICIiCisiQ09ORkxJQ1RPICglcyk6IEhheSB1biBkaXJlY3RvcmlvIGNvbiBlbCBub21icmUgJXMgZW4gJXMuIEFncmVnYW5kbyAlcyBjb21vICIKKyIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIkFncmVnYW5kbyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJDT05GTElDVE8gKGFkZC9hZGQpOiBDb25mbGljdG8gZGUgbWVyZ2UgZW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0ODIKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICLCoVlhIGVzdMOhIGFjdHVhbGl6YWRvISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBsYSBmdXNpw7NuIGRlIGxvcyDDoXJib2xlcyAlcyB5ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTk1Cittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIkZ1c2lvbmFuZG86IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICJzZSBlbmNvbnRyw7MgJXUgYW5jZXN0cm8gY29tw7puOiIKK21zZ3N0clsxXSAic2UgZW5jb250cmFyb24gJXUgYW5jZXN0cm9zIGNvbXVuZXM6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU4Cittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJsYSBmdXNpw7NuIG5vIGRldm9sdmnDsyBuaW5nw7puIGNvbW1pdCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzcxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiICAlcyIKK21zZ3N0ciAiIgorIkxvcyBjYW1iaW9zIGxvY2FsZXMgZGUgbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2Vyw6FuIHNvYnJlZXNjcml0b3MgcG9yICIKKyJtZXJnZTpcbiIKKyIgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBhbmFsaXphciBlbCBvYmpldG8gJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgzMiBidWlsdGluL21lcmdlLmM6Njk0IGJ1aWx0aW4vbWVyZ2UuYzo4NzQKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICJJbmNhcGF6IGRlIGVzY3JpYmlyIGVsIMOtbmRpY2UuIgorCisjOiBtaWR4LmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiYXJjaGl2byBtdWx0aS1wYWNrLWluZGV4ICVzIGVzIG11eSBwZXF1ZcOxbyIKKworIzogbWlkeC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc2lnbmF0dXJlIDB4JTA4eCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICJmaXJtYSBkZSBtdWx0aS1wYWNrLWluZGV4IDB4JTA4eCBubyBjb25jdWVyZGEgY29uIGZpcm1hIDB4JTA4eCIKKworIzogbWlkeC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiAlZCBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAidmVyc2nDs24gJWQgZGUgbXVsdGktcGFjay1pbmRleCBubyByZWNvbm9jaWRhIgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJ2ZXJzacOzbiBkZSBoYXNoICV1IG5vIGNvbmN1ZXJkYSIKKworIzogbWlkeC5jOjEwOAorbXNnaWQgImludmFsaWQgY2h1bmsgb2Zmc2V0ICh0b28gbGFyZ2UpIgorbXNnc3RyICJvZmZzZXQgaW52w6FsaWRvIGRlbCBjb25qdW50byAobXV5IGdyYW5kZSkiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIiCisidGVybWluYW5kbyBtdWx0aS1wYWNrLWluZGV4IHBvcnF1ZSBlbCBpZCBkZWwgY29uanVudG8gYXBhcmVjZSBhbnRlcyBkZSBsbyAiCisiZXNwZXJhZG8iCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGxlIGZhbHRhIGVsIGNvbmp1bnRvIHBhY2stbmFtZSByZXF1ZXJpZG8iCisKKyM6IG1pZHguYzoxNDcKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBsZSBmYWx0YSBlbCBjb25qdW50byBPSUQgZmFub3V0IHJlcXVlcmlkbyIKKworIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgbG9va3VwIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGxlIGZhbHRhIGVsIGNvbmp1bnRvIE9JRCBmYW5vdXQgcmVxdWVyaWRvIgorCisjOiBtaWR4LmM6MTUxCittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IGxlIGZhbHRhIGVsIGNvbmp1bnRvIGRlIG9mZnNldCBkZWwgb2JqZXRvIHJlcXVlcmlkbyIKKworIzogbWlkeC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IG5vbWJyZXMgZGUgcGFxdWV0ZSBmdWVyYSBkZSBvcmRlbjonJXMnIGFudGVzICclcyciCisKKyM6IG1pZHguYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgdG90YWwgcGFja3MpIgorbXNnc3RyICJtYWwgcGFjay1pbnQtaWQ6ICV1ICgldSBwYXF1ZXRlcyB0b3RhbGVzKSIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBndWFyZGEgdW4gb2Zmc2V0IGRlIDY0LWJpdCwgcGVybyBvZmZfdCBlcyBtdXkgcGVxdWXDsW8iCisKKyM6IG1pZHguYzoyODgKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJlcnJvciBwcmVwYXJhbmRvIHBhY2tmaWxlIGRlIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgYWdyZWdhciBwYWNrZmlsZSAnJXMnIgorCisjOiBtaWR4LmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGFicmlyIHBhY2staW5kZXggJyVzJyIKKworIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAiZmFsbMOzIGFsIHViaWNhciBvYmpldG8gJWQgZW4gcGFja2ZpbGUiCisKKyM6IG1pZHguYzo4NDIKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIkFncmVnYW5kbyBwYWNrZmlsZXMgYSBtdWx0aS1wYWNrLWluZGV4IgorCisjOiBtaWR4LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3Qgc2VlIHBhY2stZmlsZSAlcyB0byBkcm9wIgorbXNnc3RyICJubyBzZSB2acOzIHBhY2stZmlsZSAlcyBjYWVyIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiRXNjcmliaWVuZG8gY2h1bmtzIGEgbXVsdGktcGFjay1pbmRleCIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgImZhbGzDsyBhbCBsaW1waWFyIG11bHRpLXBhY2staW5kZXggZW4gJXMiCisKKyM6IG1pZHguYzoxMTA4Cittc2dpZCAiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIkJ1c2NhbmRvIHBvciBwYWNrZmlsZXMgcmVmZXJpZG9zIgorCisjOiBtaWR4LmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisib2lkIGZhbm91dCBvdXQgb2Ygb3JkZXI6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorbXNnc3RyICIiCisib2lkIGZhbm91dCBmdWVyYSBkZSBvcmRlbjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCisKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJWZXJpZmljYW5kbyBvcmRlbiBkZSBPSUQgZW4gbXVsdGktcGFjay1pbmRleCIKKworIzogbWlkeC5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIm9pZCBsb29rdXAgZnVlcmEgZGUgb3JkZW46IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCisKKyM6IG1pZHguYzoxMTU3Cittc2dpZCAiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIgorbXNnc3RyICJPcmRlbmFuZG8gb2JqZXRvcyBwb3IgcGFja2ZpbGUiCisKKyM6IG1pZHguYzoxMTY0Cittc2dpZCAiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIgorbXNnc3RyICJWZXJpZmljYW5kbyBvZmZzZXRzIGRlIG9iamV0b3MiCisKKyM6IG1pZHguYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAiZmFsbG8gYWwgY2FyZ2FyIGVudHJhZGEgcGFjayBwYXJhIG9pZFslZF0gPSAlcyIKKworIzogbWlkeC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjay1pbmRleCBmb3IgcGFja2ZpbGUgJXMiCittc2dzdHIgImZhbGzDsyBhbCBjYXJnYXIgZWwgcGFjay1pbmRleCBwYXJhIHBhY2tmaWxlICVzIgorCisjOiBtaWR4LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCBmb3Igb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorbXNnc3RyICJvZmZzZXQgcGFyYSBvYmpldG8gaW5jb3JyZWN0byBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCisKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJDb250YW5kbyBvYmpldG9zIG5vIHJlZmVyZW5jaWFkb3MiCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiRW5jb250cmFuZG8geSBib3JyYW5kbyBwYWNrZmlsZXMgc2luIHJlZmVyZW5jaWFzIgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZW1wZXphciBsb3MgcGFjay1vYmpldGN0cyIKKworIzogbWlkeC5jOjE0MDcKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAibm8gc2UgcHVkbyBmaW5hbGl6YXIgcGFjay1vYmpldGN0cyIKKworIzogbmFtZS1oYXNoLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9kaXIgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBjcmVhciBoaWxvIGxhenlfZGlyOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY3JlYXIgaGlsbyBsYXp5X25hbWU6ICVzIgorCisjOiBuYW1lLWhhc2guYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgdW5pciBoaWxvIGxhenlfbmFtZTogJXMiCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgcHJldmlvdXMgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuXG4iCisiUGxlYXNlLCB1c2UgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyB0byAiCisiY29tbWl0L2Fib3J0IHRoZSBwcmV2aW91cyBtZXJnZSBiZWZvcmUgeW91IHN0YXJ0IGEgbmV3IG5vdGVzIG1lcmdlLiIKK21zZ3N0ciAiIgorIk5vIGhhcyBjb25jbHVpZG8gdHVzIG5vdGFzIHByZXZpYXMgZGUgZnVzacOzbiAoJXMgZXhpc3RlKS5cbiIKKyJQb3IgZmF2b3IsIHVzYSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgcGFyYSAiCisiY29uZmlybWFyL2Fib3J0YXIgbGEgZnVzacOzbiBwcmV2aWEgYW50ZXMgZGUgcXVlIHB1ZWRhcyBjb21lbnphciB1bmEgbnVldmEgIgorIm5vdGEgZGUgZnVzacOzbi4iCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIk5vIGhhcyB0ZXJtaW5hZG8gdHVzIG5vdGFzIGRlIGZ1c2nDs24gKCVzIGV4aXN0ZSkuIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgcmVhbGl6YXIgY29tbWl0LCBub3RhcyBkZWwgw6FyYm9sIG5vIGluaWNpYWxpemFkYXMgbyBubyAiCisicmVmZXJlbmNpYWRhcyIKKworIzogbm90ZXMtdXRpbHMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICJWYWxvciBlcnLDs25lbyBwYXJhIG5vdGVzLnJld3JpdGVNb2RlOiAnJXMnIgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiUmVodXNhbmRvIHJlZXNjcmliaXIgbm90YXMgZW4gJXMgKGZ1ZXJhIGRlIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJWYWxvciBlcnLDs25lbyBwYXJhICVzOiAnJXMnIgorCisjOiBvYmplY3QuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAidGlwbyBkZSBvYmpldG8gXCIlc1wiIGludsOhbGlkbyIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAib2JqZXRvICVzIGVzIHVuICVzLCBubyB1biAlcyIKKworIzogb2JqZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICJlbCBvYmpldG8gJXMgdGllbmUgdW4gaWQgZGUgdGlwbyBkZXNjb25vY2lkbyAlZCIKKworIzogb2JqZWN0LmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIGFuYWxpemFyIG9iamV0bzogJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiaGFzaCBubyBjb25jdWVyZGEgJXMiCisKKyM6IHBhY2tmaWxlLmM6NjQxCittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIm9mZnNldCBhbnRlcyBkZWwgZmluYWwgZGVsIHBhcXVldGUgKGJyb2tlbiAuaWR4PykiCisKKyM6IHBhY2tmaWxlLmM6MTg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgIiIKKyJvZmZzZXQgYW50ZXMgZGVsIGNvbWllbnpvIGRlbCDDrW5kaWNlIGRlbCBwYXF1ZXRlIHBhcmEgJXMgKMK/w61uZGljZSBjb3JydXB0bz8pIgorCisjOiBwYWNrZmlsZS5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICIiCisib2Zmc2V0IG3DoXMgYWxsw6EgZGVsIMOtbmRpY2UgZGUgZmluIGRlIHBhcXVldGUgcGFyYSAlcyAowr/DrW5kaWNlIHRydW5jYWRvPykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIlcyByZXF1aWVyZSB1biB2YWxvciIKKworIzogcGFyc2Utb3B0aW9ucy5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluY29tcGF0aWJsZSB3aXRoICVzIgorbXNnc3RyICIlcyBlcyBpbmNvbXBhdGlibGUgY29uICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiJXMgOiBpbmNvbXBhdGlibGUgY29uIG90cmEgY29zYSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIlcyBubyB0b21hIHZhbG9yZXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiVzIG5vIGVzdMOhIGRpc3BvbmlibGUiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdpdGggYW4gb3B0aW9uYWwgay9tL2cgc3VmZml4IgorbXNnc3RyICIlcyBlc3BlcmEgdW4gdmFsb3IgZW50ZXJvIG5vIG5lZ2F0aXZvIGNvbiB1biBzdWZpam8gb3BjaW9uYWwgay9tL2ciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICJvcGNpw7NuIGFtYmlndWE6ICVzIChwdWVkZSBzZXIgLS0lcyVzIG8gLS0lcyVzKSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMyBwYXJzZS1vcHRpb25zLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIKK21zZ3N0ciAiwr9xdWlzaXN0ZSBkZWNpciBgLS0lc2AgKGNvbiBkb3MgZ3Vpb25lcyk/IgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIm9wY2nDs24gYCVzJyBkZXNjb25vY2lkYSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN3aXRjaCBgJWMnIgorbXNnc3RyICJzd2l0Y2ggZGVzY29ub2NpZG8gYCVjJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICJvcGNpw7NuIGRlc2Nvbm9jaWRhIGVuIHN0cmluZyBubyBhc2NpaTogYCVzJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg4OAorbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAidXNvOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgICBvOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk1NQorbXNnaWQgIi1OVU0iCittc2dzdHIgIi1OVU0iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgb2YgLS0lcyIKK21zZ3N0ciAiYWxpYXMgZGUgLS0lcyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJvcGNpw7NuIGAlcycgZXNwZXJhIHVuIHZhbG9yIG51bcOpcmljbyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAiZmVjaGEgZGUgZXhwaXJhY2nDs24gbWFsIGZvcm1hZGE6ICclcyciCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgIm9wY2nDs24gYCVzJyBwdWVkZSB1c2FyIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvIFwibmV2ZXJcIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjEzMCBwYXJzZS1vcHRpb25zLWNiLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJub21icmUgZGUgb2JqZXRvIG1hbCBmb3JtYWRvICclcyciCisKKyM6IHBhdGguYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIk5vIHNlIHB1ZG8gaGFjZXIgcXVlICVzIGZ1ZXJhIGVzY3JpYmlibGUgcG9yIGVsIGdydXBvIgorCisjOiBwYXRoc3BlYy5jOjEzMAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICIiCisiQ2Fyw6FjdGVyIGRlIGVzY2FwZSAnXFwnIG5vIHBlcm1pdGlkbyBjb21vIMO6bHRpbW8gY2Fyw6FjdGVyIGVuIGVsIHZhbG9yIGF0dHIiCisKKyM6IHBhdGhzcGVjLmM6MTQ4Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJTb2xvIHVuYSBlc3BlY2lmaWNhY2nDs24gJ2F0dHInIGVzIHBlcm1pdGlkYS4iCisKKyM6IHBhdGhzcGVjLmM6MTUxCittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICJlc3BlY2lmaWNhY2nDs24gYXR0ciBubyBwdWVkZSBlc3RhciB2YWPDrWEiCisKKyM6IHBhdGhzcGVjLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgIm5vbWJyZSBkZSBhdHJpYnV0byAlcyBpbnbDoWxpZG8iCisKKyM6IHBhdGhzcGVjLmM6MjU5Cittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorImNvbmZpZ3VyYWNpb25lcyBnbG9iYWxlcyBkZSBwYXRoc3BlYyAnZ2xvYicgeSAnbm9nbG9iJyBzb24gaW5jb21wYXRpYmxlcyIKKworIzogcGF0aHNwZWMuYzoyNjYKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisibGEgY29uZmlndXJhY2nDs24gZ2xvYmFsIGRlICdsaXRlcmFsJyBwYXJhIHBhdHJvbmVzIGRlIHJ1dGEgZXMgaW5jb21wYXRpYmxlICIKKyJjb24gbGFzIGRlbcOhcyBjb25maWd1cmFjaW9uZXMgZ2xvYmFsZXMgZGUgcGF0cm9uZXMgZGUgcnV0YSIKKworIzogcGF0aHNwZWMuYzozMDYKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgInBhcsOhbWV0cm8gbm8gdsOhbGlkbyBwYXJhIGVsIHByZWZpam8gJ21hZ2ljIHBhdGhzcGVjJyIKKworIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAiTWFnaWMgcGF0aHNwZWMgaW52w6FsaWRvICclLipzJyBlbiAnJXMnIgorCisjOiBwYXRoc3BlYy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIkZhbHRhICcpJyBhbCBmaW5hbCBkZWwgbWFnaWMgcGF0aHNwZWMgZW4gJyVzJyIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIk1hZ2ljIHBhdGhzcGVjICclYycgbm8gaW1wbGVtZW50YWRvIGVuICclcyciCisKKyM6IHBhdGhzcGVjLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczogJ2xpdGVyYWwnIHkgJ2dsb2InIHNvbiBpbmNvbXBhdGlibGVzIgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiAnJXMnIGVzdMOhIGZ1ZXJhIGRlbCByZXBvc2l0b3JpbyIKKworIzogcGF0aHNwZWMuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICInJXMnIChuZW1vdMOpY25pY286ICclYycpIgorCisjOiBwYXRoc3BlYy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIlczogbWFnaWMgcGF0aHNwZWMgbm8gc29wb3J0YWRvIHBvciBlc3RlIGNvbWFuZG86ICVzIgorCisjOiBwYXRoc3BlYy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImVsIHBhdHLDs24gZGUgcnV0YSAnJXMnIGVzdMOhIGRldHLDoXMgZGUgdW4gZW5sYWNlIHNpbWLDs2xpY28iCisKKyM6IHBhdGhzcGVjLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAibGEgbMOtbmVhIGVzdMOhIG3DoWwgY2l0YWRhOiAlcyIKKworIzogcGt0LWxpbmUuYzo5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmbHVzaCBwYWNrZXQiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZXNjcmliaXIgZmx1c2ggcGFja2V0IgorCisjOiBwa3QtbGluZS5jOjk5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGRlbGltIHBhY2tldCIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciBkZWxpbSBwYWNrZXQiCisKKyM6IHBrdC1saW5lLmM6MTA2Cittc2dpZCAiZmx1c2ggcGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAibGltcGllemEgZGUgZXNjcml0dXJhIGRlIHBhcXVldGVzIGZhbGzDsyIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sbzogbMOtbmVhIGltcG9zaWJsZW1lbnRlIGxhcmdhIgorCisjOiBwa3QtbGluZS5jOjE2MiBwa3QtbGluZS5jOjE2NAorbXNnaWQgInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiCittc2dzdHIgImVzY3JpdHVyYSBkZSBwYXF1ZXRlcyBjb24gZm9ybWF0byBmYWxsw7MiCisKKyM6IHBrdC1saW5lLmM6MTk2Cittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCAtIGRhdGEgZXhjZWVkcyBtYXggcGFja2V0IHNpemUiCittc2dzdHIgImZhbGxvIGFsIGVzY3JpYmlyIHBhcXVldGUgLSBsYSBkYXRhIGV4Y2VkZSBhbCB0YW1hw7FvIG3DoXhpbW8gZGUgcGFxdWV0ZSIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJlc2NyaXR1cmEgZGUgcGFxdWV0ZXMgZmFsbMOzIgorCisjOiBwa3QtbGluZS5jOjI5NQorbXNnaWQgInJlYWQgZXJyb3IiCittc2dzdHIgImVycm9yIGRlIGxlY3R1cmEiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgImVsIHJlbW90byBzZSBjb2xnw7MgZGUgbWFuZXJhIGluZXNwZXJhZGEiCisKKyM6IHBrdC1saW5lLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIgorbXNnc3RyICJlcnJvciBkZSBwcm90b2NvbG86IG1hbCBjYXJhY3RlciBkZSBsYXJnbyBkZSBsw61uZWE6ICUuNHMiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgImVycm9yIGRlIHByb3RvY29sbzogbWFsIGxhcmdvIGRlIGzDrW5lYSAlZCIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJyb3IgcmVtb3RvOiAlcyIKKworIzogcHJlbG9hZC1pbmRleC5jOjExOQorbXNnaWQgIlJlZnJlc2hpbmcgaW5kZXgiCittc2dzdHIgIlJlZnJlc2NhbmRvIGluZGV4IgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGNyZWFyIGxzdGF0IGhpbGFkbzogJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgImluY2FwYXogZGUgYW5hbGl6YXIgZWwgZm9ybWF0byAtLXByZXR0eSIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6MjMKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIlJlbW90byBzaW4gVVJMIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9taXNvciByZW1vdGUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICJub21icmUgcmVtb3RvIHByb21pc29yIG5vIHB1ZWRlIGNvbWVuemFyIGNvbiAnLyc6ICVzIgorCisjOiByYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgYGxvZ2AiCittc2dzdHIgIm5vIHNlIHB1ZG8gY29tZW56YXIgYGxvZ2AiCisKKyM6IHJhbmdlLWRpZmYuYzo3NworbXNnaWQgImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIG91dHB1dCBkZSBgbG9nYCIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIGNvbW1pdCAnJXMnIgorCisjOiByYW5nZS1kaWZmLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBnaXQgaGVhZGVyICclLipzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYW5hbGl6YXIgZ2l0IGhlYWRlciAnJS4qcyciCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAiZmFsbMOzIGFsIGdlbmVyYXIgZGlmZiIKKworIzogcmFuZ2UtZGlmZi5jOjUxOCByYW5nZS1kaWZmLmM6NTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBsb2cgcGFyYSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICJubyBhZ3JlZ2Fyw6EgYWxpYXMgZGUgYXJjaGl2byAnJXMnICgnJXMnIHlhIGV4aXN0ZSBlbiBlbCBpbmRleCkiCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgdW4gYmxvYiB2YWPDrW8gZW4gbGEgYmFzZSBkZSBkYXRvcyBkZSBvYmpldG9zIgorCisjOiByZWFkLWNhY2hlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisiJXM6IHNvbG8gcHVlZGUgYWdyZWdhciBhcmNoaXZvcyByZWd1bGFyZXMsIHN5bWJvbGljIGxpbmtzIG8gZ2l0LWRpcmVjdG9yaWVzIgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiJyVzJyBubyB0aWVuZSB1biBjb21taXQgY2hlY2tlZCBvdXQiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBpbmRleGFyIGFyY2hpdm8gJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkICclcycgdG8gaW5kZXgiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWdyZWdhciAnJXMnIGFsIGluZGV4IgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgImluY2FwYXogZGUgY29ycmVyIHN0YXQgZW4gJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJyVzJyBwYXJlY2Ugc2VyIHVuIGRpcmVjdG9yaW8geSB1biBhcmNoaXZvIGEgbGEgdmV6IgorCisjOiByZWFkLWNhY2hlLmM6MTUzMQorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIlJlZnJlc2NhciBpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gY29uZmlndXJhZG8sIHBlcm8gZWwgdmFsb3Igbm8gZXMgdsOhbGlkby5cbiIKKyJVc2FuZG8gdmVyc2nDs24gJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiR0lUX0lOREVYX1ZFUlNJT04gY29uZmlndXJhZG8sIHBlcm8gZWwgdmFsb3Igbm8gZXMgdsOhbGlkby5cbiIKKyJVc2FuZG8gdmVyc2nDs24gJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICJtYWxhIGZpcm1hIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgIm1hbGEgdmVyc2nDs24gZGVsIMOtbmRpY2UgJWQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI0Cittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgIm1hbGEgZmlybWEgc2hhMSBkZWwgYXJjaGl2byBpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgImluZGV4IHVzYSAlLjRzIGV4dGVuc2lvbmVzLCBjb3NhIHF1ZSBubyBlbnRlbmRlbW9zIgorCisjOiByZWFkLWNhY2hlLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIKK21zZ3N0ciAiaWdub3JhbmRvIGV4dGVuc2nDs24gJS40cyIKKworIzogcmVhZC1jYWNoZS5jOjE3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICJmb3JtYXRvIGRlIGluZGV4IGRlc2Nvbm9jaWRvIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAiY2FtcG8gbm9tYnJlIG1hbGZvcm1hZG8gZW4gZWwgaW5kZXgsIGNlcmNhIGEgcnV0YSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MTg2NgorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4IgorbXNnc3RyICJlbnRyYWRhcyBlbiBzdGFnZSBkZXNvcmRlbmFkYXMgZW4gaW5kZXgiCisKKyM6IHJlYWQtY2FjaGUuYzoxODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgIm3Dumx0aXBsZXMgZW50cmFkYXMgZXh0cmHDsWFzIHBhcmEgYXJjaGl2byBmdXNpb25hZG8gJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgZm9yICclcyciCittc2dzdHIgImVudHJhZGFzIGRlIHN0YWdlIGRlc29yZGVuYWRhcyBwYXJhICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoxOTc4IHJlYWQtY2FjaGUuYzoyMjY2IHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogYnVpbHRpbi9hZGQuYzo0OTkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzggYnVpbHRpbi9jaGVja291dC5jOjQ3MAorIzogYnVpbHRpbi9jaGVja291dC5jOjY1NCBidWlsdGluL2NsZWFuLmM6OTY3IGJ1aWx0aW4vY29tbWl0LmM6MzY3CisjOiBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0OTkgYnVpbHRpbi9tdi5jOjE0NQorIzogYnVpbHRpbi9yZXNldC5jOjI0NiBidWlsdGluL3JtLmM6MjcxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgImFyY2hpdm8gw61uZGljZSBjb3Jyb21waWRvIgorCisjOiByZWFkLWNhY2hlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGNyZWFyIGhpbG8gbG9hZF9jYWNoZV9lbnRyaWVzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgdW5pciBoaWxvIGxvYWRfY2FjaGVfZW50aXJlczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIlczogZmFsbMOzIGFsIGFicmlyIGVsIGFyY2hpdm8gaW5kZXgiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiJXM6IG5vIHNlIHB1ZWRlIGhhY2VyIHN0YXQgZGVsIGluZGV4IGFiaWVydG8iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiJXM6IGFyY2hpdm8gaW5kZXggbcOhcyBwZXF1ZcOxbyBkZSBsbyBlc3BlcmFkbyIKKworIzogcmVhZC1jYWNoZS5jOjIxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IG5vIHNlIHB1ZG8gbWFwZWFyIGVsIGFyY2hpdm8gaW5kZXgiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgY3JlYXIgaGlsbyBsb2FkX2luZGV4X2V4dGVuc2lvbnM6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSB1bmlyIGhpbG8gbG9hZF9pbmRleF9leHRlbnNpb25zOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGluZGV4IGNvbXBhcnRpZG8gJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjIzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGluZGV4LCBleHBlY3QgJXMgaW4gJXMsIGdvdCAlcyIKK21zZ3N0ciAiaW5kZXggcm90bywgc2UgZXNwZXJhYmEgJXMgZW4gJXMsIHNlIG9idHV2byAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMwMjEgc3RyYnVmLmM6MTE0NSB3cmFwcGVyLmM6NjIyIGJ1aWx0aW4vbWVyZ2UuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNlcnJhciAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MzEyNCBzZXF1ZW5jZXIuYzoyNDI5IHNlcXVlbmNlci5jOjQwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBkZWZpbmlyICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzozMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFicmlyIGVsIGRpcmVjdG9yaW8gZGUgZ2l0OiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZWxpbWluYXIgZWwgdmluY3VsbzogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gYXJyZWdsYXIgYml0cyBkZSBwZXJtaXNvcyBlbiAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MzMyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiCittc2dzdHIgIiVzOiBubyBzZSBwdWVkZSBlbGltaW5hciBhIHN0YWdlICMwIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorbXNnc3RyICIiCisib3BjacOzbiAlcyBubyByZWNvbm9jaWRhIHBhcmEgbGEgb3BjacOzbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JhbmRvLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzUKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDb21hbmRvczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNhciBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2FyIGNvbW1pdCwgcGVybyBlZGl0YXIgZWwgbWVuc2FqZSBkZSBjb21taXRcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNhciBjb21taXQsIHBlcm8gcGFyYXIgcGFyYSB1biBhbWVuZFxuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzYXIgY29tbWl0LCBwZXJvIGZ1c2lvbmFybG8gZW4gZWwgY29tbWl0IHByZXZpb1xuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gY29tbyBcInNxdWFzaFwiLCBwZXJvIGRlc2NhcnRhIGVsIG1lbnNhamUgZGVsIGxvZyBkZSAiCisiZXN0ZSBjb21taXRcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gZWplY3V0YSBjb21hbmRvICggZWwgcmVzdG8gZGUgbGEgbMOtbmVhKSB1c2FuZG8gdW4gc2hlbGxcbiIKKyJiLCBicmVhayA9IHBhcmFyIGFxdcOtIChjb250aW51YXIgcmViYXNlIGx1ZWdvIGNvbiAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gZWxpbWluYXIgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IHBvbmVyIGxhYmVsIGFsIEhFQUQgYWN0dWFsIGNvbiB1biBub21icmVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVpbmljaWFyIEhFQUQgYSBlbCBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWEgdW4gY29tbWl0IGRlIGZ1c2nDs24gdXNhbmRvIGVsIG1lbnNhamUgb3JpZ2luYWwgZGVcbiIKKyIuICAgICAgIGZ1c2nDs24gKG8gbGEgbMOtbmVhIGRlIG9uZWxpbmUsIHNpIG5vIHNlIGVzcGVjaWZpY2EgdW4gbWVuc2FqZVxuIgorIi4gICAgICAgZGUgY29tbWl0KS4gVXNlIC1jIDxjb21taXQ+IHBhcmEgcmVlc2NyaWJpciBlbCBtZW5zYWplIGRlbCBjb21taXQuXG4iCisiXG4iCisiRXN0YXMgbMOtbmVhcyBwdWVkZW4gc2VyIHJlb3JkZW5hZGFzOyBzb24gZWplY3V0YWRhcyBkZXNkZSBhcnJpYmEgaGFjaWEgIgorImFiYWpvLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIlJlYmFzZSAlcyBlbiAlcyAoJWQgY29tYW5kbykiCittc2dzdHJbMV0gIlJlYmFzZSAlcyBlbiAlcyAoJWQgY29tYW5kb3MpIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBlbGltaW5hciBuaW5ndW5hIGzDrW5lYS4gVXNhICdkcm9wJyBleHBsw61jaXRhbWVudGUgcGFyYSBib3JyYXIgdW4gY29tbWl0IFxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisiXG4iCisiU2kgZWxpbWluYXMgdW5hIGzDrW5lYSBhcXXDrSBFTCBDT01NSVQgU0UgUEVSREVSw4EuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc3TDoXMgZWRpdGFuZG8gZWwgYXJjaGl2byBUT0RPIGRlIHVuIHJlYmFzZSBpbnRlcmFjdGl2by5cbiIKKyJQYXJhIGNvbnRpbnVhciBlbCByZWJhc2UgZGVzcHXDqXMgZGUgZWRpdGFyLCBlamVjdXRhOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQ29tbyBzZWEsIHNpIHF1aWVyZXMgYm9ycmFyIHRvZG8sIGVsIHJlYmFzZSBzZXLDoSBhYm9ydGFkby5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODUgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk1NQorbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICJUZW5nYSBlbiBjdWVudGEgcXVlIGxvcyBjb21taXRzIHZhY8Otb3MgZXN0w6FuIGNvbWVudGFkb3MiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwNSByZXJlcmUuYzo0ODUgcmVyZXJlLmM6NjkyIHNlcXVlbmNlci5jOjM1MzYKKyM6IHNlcXVlbmNlci5jOjM1NjIgc2VxdWVuY2VyLmM6NTI2MyBidWlsdGluL2ZzY2suYzozNDYgYnVpbHRpbi9yZWJhc2UuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gZXNjcmliaXIgJyVzJyIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJy4iCittc2dzdHIgIm5vIHNlIHB1ZG8gY29waWFyICclcycgYSAnJXMnLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorIlBlbGlncm86IGFsZ3Vub3MgY29tbWl0cyBwdWVkZW4gaGFiZXIgc2lkbyBib3RhZG9zIGRlIGZvcm1hIGFjY2lkZW50YWwuXG4iCisiQ29tbWl0cyBib3RhZG9zIChlbXBlemFuZG8gY29uIGVsIG3DoXMgbnVldm8pOlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisiUGFyYSBldml0YXIgZXN0ZSBtZW5zYWplLCB1c2UgXCJkcm9wXCIgcGFyYSBlbGltaW5hciBkZSBmb3JtYSBleHBsw61jaXRhIHVuICIKKyJjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyBwYXJhIGNhbWJpYXIgZWwgbml2ZWwgZGUgIgorImFkdmVydGVuY2lhcy5cbiIKKyJMb3MgcG9zaWJsZXMgY29tcG9ydGFtaWVudG9zIHNvbjogaWdub3JlLHdhcm4sZXJyb3IuXG4iCisiXG4iCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICLCoSVzIG5vIGFwdW50YSBhIG5pbmfDum4gb2JqZXRvIHbDoWxpZG8hIgorCisjOiByZWZzLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGRhbmdsaW5nIHN5bXJlZiAlcyIKK21zZ3N0ciAiaWdub3JhbmRvIHJlZmVyZW5jaWEgcm90YSAlcyIKKworIzogcmVmcy5jOjY2OSByZWYtZmlsdGVyLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICJpZ25vcmFuZG8gcmVmZXJlbmNpYSByb3RhICVzIgorCisjOiByZWZzLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyICclcycgcGFyYSBlc2NyaXR1cmE6ICVzIgorCisjOiByZWZzLmM6ODE0IHJlZnMuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBsYSByZWZlcmVuY2lhICclcyciCisKKyM6IHJlZnMuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgInJlZiAnJXMnIHlhIGV4aXN0ZSIKKworIzogcmVmcy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIHdyaXRpbmcgJyVzJyIKK21zZ3N0ciAiSUQgZGUgb2JqZWN0byBpbmVzcGVyYWRvIGFsIGVzY3JpYmlyICclcyciCisKKyM6IHJlZnMuYzo4MzMgc2VxdWVuY2VyLmM6NDA1IHNlcXVlbmNlci5jOjI3OTMgc2VxdWVuY2VyLmM6Mjk5NworIzogc2VxdWVuY2VyLmM6MzAxMSBzZXF1ZW5jZXIuYzozMjY5IHNlcXVlbmNlci5jOjUxNzkgc3RyYnVmLmM6MTE0MgorIzogd3JhcHBlci5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2NyaWJpciBlbiAnJXMnIgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNDAgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyICclcycgcGFyYSBlc2NyaXR1cmEiCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICJJRCBkZSBvYmplY3RvIGluZXNwZXJhZG8gYWwgYm9ycmFyICclcyciCisKKyM6IHJlZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgaGFzIGdhcCBhZnRlciAlcyIKK21zZ3N0ciAibG9nIGRlIHJlZiAlcyB0aWVuZSB1biB2YWPDrW8gdHJhcyAlcyIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICJsb2cgZGUgcmVmICVzIGZpbmFsaXphZG8gaW5lc3BlcmFkYW1lbnRlIGVuICVzIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICJsb2cgZGUgJXMgZXN0w6EgdmFjw61vIgorCisjOiByZWZzLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJyVzJyIKK21zZ3N0ciAicmVodXNhbmRvIGFjdHVhbGl6YXIgcmVmIGNvbiBtYWwgbm9tYnJlICclcyciCisKKyM6IHJlZnMuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgInVwZGF0ZV9yZWYgZmFsbMOzIHBhcmEgcmVmICclcyc6ICVzIgorCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAibcO6bHRpcGxlcyBhY3R1YWxpemFjaW9uZXMgcGFyYSByZWYgJyVzJyBubyBwZXJtaXRpZGFzIgorCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAiYWN0dWFsaXphY2lvbmVzIGRlIHJlZiBwcm9oaWJpZGFzIGRlbnRybyBkZSBhbWJpZW50ZSBkZSBjdWFyZW50ZW5hIgorCisjOiByZWZzLmM6MjE1MSByZWZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICInJXMnIGV4aXN0ZTsgbm8gc2UgcHVlZGUgY3JlYXIgJyVzJyIKKworIzogcmVmcy5jOjIxNTcgcmVmcy5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHByb2Nlc3MgJyVzJyBhbmQgJyVzJyBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJubyBzZSBwdWVkZSBwcm9jZXNhciAnJXMnIHkgJyVzJyBhbCBtaXNtbyB0aWVtcG8iCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZWxpbWluYXIgbGEgcmVmZXJlbmNpYSAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0OCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGVsaW1pbmFyIGxhIHJlZmVyZW5jaWEgJXM6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUxIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZWxpbWluYXIgbGEgcmVmZXJlbmNpYTogJXMiCisKKyM6IHJlZnNwZWMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZzcGVjICclcyciCittc2dzdHIgInJlZnNwZWMgaW52w6FsaWRvOiAnJXMnIgorCisjOiByZWYtZmlsdGVyLmM6NDIgd3Qtc3RhdHVzLmM6MTkzOAorbXNnaWQgImdvbmUiCittc2dzdHIgImRlc2FwYXJlY2lkbyIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICJhZGVsYW50ZSAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJlaGluZCAlZCIKK21zZ3N0ciAiZGV0csOhcyAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgImRlbGFudGUgJWQsIGRldHLDoXMgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAiZm9ybWF0byBlc3BlcmFkbzogJSUoY29sb3I6PGNvbG9yPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgImNvbG9yIG5vIHJlY29ub2NpZG86ICUlKGNvbG9yOiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICJWYWxvciBlbnRlcm8gZXNwZXJhZG8gcmVmbmFtZTpsc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAiVmFsb3IgZW50ZXJvIGVzcGVyYWRvIHJlZm5hbWU6cnN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG86ICVzIG5vIHJlY29ub2NpZG8gJSUoJXMpIgorCisjOiByZWYtZmlsdGVyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKG9iamVjdHR5cGUpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShvYmplY3R0eXBlKSBubyB0b21hIG5pbmfDum4gYXJndW1lbnRvIgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiUlKG9iamVjdHNpemUpIG5vIHJlY29ub2NpZG8gYXJndW1lbnRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpIG5vIHRvbWEgYXJndW1lbnRvcyIKKworIzogcmVmLWZpbHRlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoYm9keSkgbm8gdG9tYSBuaW5nw7puIGFyZ3VtZW50byIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkgbm8gdG9tYSBuaW5nw7puIGFyZ3VtZW50byIKKworIzogcmVmLWZpbHRlci5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiUlKHRyYWlsZXJzKSBkZXNjb25vY2lkb3MsIGFyZ3VtZW50bzogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgInZhbG9yIHBvc2l0aXZvIGVzcGVyYWRvIGNvbnRlbnRzOmxpbmVzPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gJXMgbm8gcmVjb25vY2lkbyAlJShjb250ZW50cykiCisKKyM6IHJlZi1maWx0ZXIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAidmFsb3IgcG9zaXRpdm8gZXNwZXJhZG8gb2JqZWN0bmFtZTpzaG9ydD0lcyIKKworIzogcmVmLWZpbHRlci5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0bmFtZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG86ICVzIG5vIHJlY29ub2NpZG8gJSUob2JqZWN0bmFtZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShhbGlnbjo8d2lkdGg+LDxwb3NpdGlvbj4pIgorbXNnc3RyICJmb3JtYXRvIGVzcGVyYWRvOiAlJShhbGlnbjo8YW5jaG8+LDxwb3NpY2nDs24+KSIKKworIzogcmVmLWZpbHRlci5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgInBvc2ljacOzbiBkZXNjb25vY2lkYTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdpZHRoOiVzIgorbXNnc3RyICJhbmNobyBkZXNjb25vY2lkbzogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGFsaWduKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBubyByZWNvbm9jaWRvIHBhcmEgJSUoYWxpZ24pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAic2UgZXNwZXJhYmEgdW4gYW5jaG8gcG9zaXRpdm8gY29uIGVsIMOhdG9tbyAlJShhbGlnbikiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50bzogJXMgbm8gcmVjb25vY2lkbyAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbWJyZSBtYWwgZm9ybWFkbyBkZSBjYW1wbzogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbWJyZSBkZSBjYW1wbyBkZXNjb25vY2lkbzogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIKK21zZ3N0ciAiIgorIm5vIGVzIHVuIHJlcG9zaXRvcmlvIGdpdCwgcGVybyBlbCBjYW1wbyAnJS4qcycgcmVxdWllcmUgYWNjZXNvIGFsIG9iamV0byBkYXRhIgorCisjOiByZWYtZmlsdGVyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoaWYpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKGlmKSB1c2FkbyBzaW4gdW4gw6F0b21vICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJSh0aGVuKSB1c2FkbyBzaW4gw6F0b21vICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKHRoZW4pIHVzYWRvIG3DoXMgZGUgdW5hIHZleiIKKworIzogcmVmLWZpbHRlci5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKHRoZW4pIHVzYWRvIGRlc3B1w6lzIGRlICUlKGVsc2UpIgorCisjOiByZWYtZmlsdGVyLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJShlbHNlKSB1c2FkbyBzaW4gdW4gw6F0b21vICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKGVsc2UpIHVzYWRvIHNpbiB1biDDoXRvbW8gJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJShlbHNlKSB1c2FkbyBtw6FzIGRlIHVuYSB2ZXoiCisKKyM6IHJlZi1maWx0ZXIuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gdXNlZCB3aXRob3V0IGNvcnJlc3BvbmRpbmcgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKGVuZCkgdXNhZG8gc2luIMOhdG9tbyBjb3JyZXNwb25kaWVudGUiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgImZvcm1hdG8gZGUgY2FkZW5hIG1hbCBmb3JtYWRvICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICJubyBoYXkgcmFtYSwgcmViYXNhbmRvICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMiCittc2dzdHIgIihvIGhheSByYW1hLCByZWJhc2FuZG8gY29uIEhFQUQgZGVzYWNvcGxhZG8gJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMiCittc2dzdHIgIm5vIGhheSByYW1hLCBjb21lbnphbmRvIGJpc2VjY8OzbiBlbiAgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICJzaW4gcmFtYSIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJmYWx0YSBvYmpldG8gJXMgcGFyYSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhbGzDsyBlbiAlcyBwYXJhICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIm9iamV0byBtYWwgZm9ybWFkbyBlbiAnJXMnIgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAiaWdub3JhbmRvIHJlZmVyZW5jaWEgY29uIG5vbWJyZSByb3RvICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICJmb3JtYXRvOiBmYWx0YSDDoXRvbW8gJSUoZW5kKSIKKworIzogcmVmLWZpbHRlci5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1tZXJnZWQiCittc2dzdHIgIm9wY2nDs24gYCVzJyBlcyBpbmNvbXBhdGlibGUgY29uIC0tbWVyZ2VkIgorCisjOiByZWYtZmlsdGVyLmM6MjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLW1lcmdlZCIKK21zZ3N0ciAib3BjacOzbiBgJXMnIGVzIGluY29tcGF0aWJsZSBjb24gLS1uby1tZXJnZWQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAibm9tYnJlIGRlIG9iamV0byBtYWwgZm9ybWFkbyAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAib3BjacOzbiAnJXMnIGRlYmUgYXB1bnRhciBhIHVuIGNvbW1pdCIKKworIzogcmVtb3RlLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZyByZW1vdGUgc2hvcnRoYW5kIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgImNvbmZpZyByZW1vdGUgc2hvcnRoYW5kIG5vIHB1ZWRlIGNvbWVuemFyIGNvbiAnLyc6ICVzIgorCisjOiByZW1vdGUuYzo0MTMKK21zZ2lkICJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIm3DoXMgZGUgdW4gcmVjZWl2ZXBhY2sgZGFkbywgdXNhbmRvIGVsIHByaW1lcm8iCisKKyM6IHJlbW90ZS5jOjQyMQorbXNnaWQgIm1vcmUgdGhhbiBvbmUgdXBsb2FkcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICJtw6FzIGRlIHVuIHVwbG9hZHBhY2sgZGFkbywgdXNhbmRvIGVsIHByaW1lcm8iCisKKyM6IHJlbW90ZS5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIk5vIHNlIHB1ZWRlbiB0cmFlciBhbWJvcyAlcyB5ICVzIGEgJXMiCisKKyM6IHJlbW90ZS5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIlcyBwb3IgbG8gZ2VuZXJhbCBoYWNlIHNlZ3VpbWllbnRvIGEgJXMsIG5vIGEgJXMiCisKKyM6IHJlbW90ZS5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIGhhY2Ugc2VndWltaWVudG8gdGFudG8gYSAlcyBjb21vIGEgJXMiCisKKyM6IHJlbW90ZS5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgImxsYXZlICclcycgZGUgcGF0csOzbiBubyB0dXZvICcqJyIKKworIzogcmVtb3RlLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbHVlICclcycgb2YgcGF0dGVybiBoYXMgbm8gJyonIgorbXNnc3RyICJ2YWxvciAnJXMnIGRlbCBwYXRyw7NuIG5vIHRpZW5lICcqJyIKKworIzogcmVtb3RlLmM6MTAwMworIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgInNyYyByZWZzb2VjICVzOiBubyBjb25jdWVyZGEgY29uIG5pbmd1bm8iCisKKyM6IHJlbW90ZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICJzcmMgcmVmc3BlYyAlcyBjb25jdWVyZGEgY29uIG3DoXMgZGUgdW5vIgorCisjLiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorIy4gPHJlbW90ZT4gPHNyYz46PGRzdD4iIHB1c2gsIGFuZCAiYmVpbmcgcHVzaGVkICgnJXMnKSIgaXMKKyMuIHRoZSA8c3JjPi4KKyMuCisjOiByZW1vdGUuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGVzdGluYXRpb24geW91IHByb3ZpZGVkIGlzIG5vdCBhIGZ1bGwgcmVmbmFtZSAoaS5lLixcbiIKKyJzdGFydGluZyB3aXRoIFwicmVmcy9cIikuIFdlIHRyaWVkIHRvIGd1ZXNzIHdoYXQgeW91IG1lYW50IGJ5OlxuIgorIlxuIgorIi0gTG9va2luZyBmb3IgYSByZWYgdGhhdCBtYXRjaGVzICclcycgb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIi0gQ2hlY2tpbmcgaWYgdGhlIDxzcmM+IGJlaW5nIHB1c2hlZCAoJyVzJylcbiIKKyIgIGlzIGEgcmVmIGluIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIElmIHNvIHdlIGFkZCBhIGNvcnJlc3BvbmRpbmdcbiIKKyIgIHJlZnMve2hlYWRzLHRhZ3N9LyBwcmVmaXggb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIlxuIgorIk5laXRoZXIgd29ya2VkLCBzbyB3ZSBnYXZlIHVwLiBZb3UgbXVzdCBmdWxseSBxdWFsaWZ5IHRoZSByZWYuIgorbXNnc3RyICIiCisiRWwgZGVzdGlubyBxdWUgcHJvdmVlcyBubyBlcyB1biBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisiY29taWVuemEgY29uIFwicmVmcy9cIikuIEludGVudGFtb3MgYWRpdmluYXIgbG8gcXVlIHF1aXNpc3RlIGRlY2lyOlxuIgorIlxuIgorIi0gQnVzY2FuZG8gdW4gcmVmIHF1ZSBjb25jdWVyZGUgY29uICclcycgZW4gZWwgbGFkbyByZW1vdG8uXG4iCisiLSBSZXZpc2FuZG8gc2kgZWwgPHNyYz4gZXMgdXNhZG8gZW4gZWwgcHVzaCgnJXMnKVxuIgorIiAgZXMgdW4gcmVmIGVuIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIFNpIGVzIGFzw60sIGFncmVnYW1vcyBlbCBwcmVmaWpvXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gY29ycmVzcG9uZGllbnRlIGFsIGxhZG8gcmVtb3RvLlxuIgorIlxuIgorIk5pbmd1bm8gZnVuY2lvbsOzIGFzw60gcXVlIG5vcyBkaW1vcyBwb3IgdmVuY2lkb3MuIFRpZW5lcyBxdWUgZXNwZWNpZmljYXIgZWwgIgorImZ1bGwgcmVmLiIKKworIzogcmVtb3RlLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBjb21taXQgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorbXNnc3RyICIiCisiTGEgcGFydGUgPHNyYz4gZGVsIHJlZnNwZWMgZXMgdW4gb2JqZXRvIGNvbW1pdC5cbiIKKyLCv1F1aXNpc3RlIGNyZWFyIHVuIGJyYW5jaCBudWV2byBtZWRpYW50ZSB1biBwdXNoIGFcbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdGFnIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IHRhZyBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRyZWUgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgdHJlZSBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiTGEgcGFydGUgPHNyYz4gZGVsIHJlZnNwZWMgZXMgdW4gb2JqZXRvIHRyZWUuXG4iCisiwr9RdWlzaXN0ZSBjcmVhciB1biB0YWcgbnVldm8gbWVkaWFudGUgdW4gcHVzaCBhXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKKworIzogcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBibG9iIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IGJsb2IgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIkxhIHBhcnRlIDxzcmM+IGRlbCByZWZzcGVjIGVzIHVuIG9iamV0byBibG9iLlxuIgorIsK/UXVpc2lzdGUgY3JlYXIgdW4gdGFnIG51ZXZvIG1lZGlhbnRlIHVuIHB1c2ggYVxuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCisKKyM6IHJlbW90ZS5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAiJXMgbm8gcHVlZGUgc2VyIHJlc29sdmVyIGEgdW4gYnJhbmNoIgorCisjOiByZW1vdGUuYzoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWxldGUgJyVzJzogcmVtb3RlIHJlZiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBib3JyYXIgJyVzJzogcmVmIHJlbW90byBubyBleGlzdGUiCisKKyM6IHJlbW90ZS5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICJkc3QgcmVmc3BlYyAlcyBjb25jdWVyZGEgY29uIG3DoXMgZGUgdW5vIgorCisjOiByZW1vdGUuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiZHN0IHJlZiAlcyByZWNpYmUgZGUgbcOhcyBkZSB1biBzcmMiCisKKyM6IHJlbW90ZS5jOjE2MjcgcmVtb3RlLmM6MTcyOAorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUQgbm8gYXB1bnRhIGEgbmluZ3VuYSByYW1hIgorCisjOiByZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJubyBleGlzdGUgdGFsIHJhbWE6ICclcyciCisKKyM6IHJlbW90ZS5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIm5vIHNlIGhhIGNvbmZpZ3VyYWRvIHVwc3RyZWFtIHBhcmEgbGEgcmFtYSAnJXMnIgorCisjOiByZW1vdGUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJsYSByYW1hICclcycgZGUgdXBzdHJlYW0gbm8gZXMgZ3VhcmRhZCBjb21vIHJhbWEgZGUgcmFzdHJlbyByZW1vdG8iCisKKyM6IHJlbW90ZS5jOjE2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJkZXN0aW5vIGRlIHB1c2ggJyVzJyBlbiBlbCByZW1vdG8gJyVzJyBubyB0aWVuZSB1bmEgcmFtYSBkZSByYXN0cmVvIGxvY2FsIgorCisjOiByZW1vdGUuYzoxNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgImxhIHJhbWEgJyVzJyBubyB0aWVuZSByZW1vdG8gcGFyYSBlbnZpYXIiCisKKyM6IHJlbW90ZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICJyZWZzcGVjcyBkZWwgcHVzaCBwYXJhICclcycgbm8gaW5jbHV5ZW4gJyVzJyIKKworIzogcmVtb3RlLmM6MTY5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAicHVzaCBubyB0aWVuZSBkZXN0aW5vIChwdXNoLmRlZmF1bHQgZXMgJ25hZGEnKSIKKworIzogcmVtb3RlLmM6MTcxNworbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlc29sdmVyIHB1c2ggJ3NpbXBsZScgcGFyYSB1biBkZXN0aW5vIMO6bmljbyIKKworIzogcmVtb3RlLmM6MTg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRvIGVuY29udHJhciByZWYgcmVtb3RhICVzIgorCisjOiByZW1vdGUuYzoxODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiogSWdub3JpbmcgZnVubnkgcmVmICclcycgbG9jYWxseSIKK21zZ3N0ciAiKiBJZ25vcmFuZG8gcmVmIGdyYWNpb3NhICclcycgbG9jYWxtZW50ZSIKKworIzogcmVtb3RlLmM6MjAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiYXNlZCBvbiAnJXMnLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuXG4iCittc2dzdHIgIlR1IHJhbWEgZXN0w6EgYmFzYWRhIGVuICclcycsIHBlcm8gdXBzdHJlYW0gaGEgZGVzYXBhcmVjaWRvLlxuIgorCisjOiByZW1vdGUuYzoyMDIzCittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKHVzYSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHBhcmEgYXJyZWdsYXIpXG4iCisKKyM6IHJlbW90ZS5jOjIwMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIlR1IHJhbWEgZXN0w6EgYWN0dWFsaXphZGEgY29uICclcycuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgIlR1IHJhbWEgeSAnJXMnIHJlZmllcmVuIGEgY29tbWl0cyBkaWZlcmVudGVzLlxuIgorCisjOiByZW1vdGUuYzoyMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiAgKHVzYSBcIiVzXCIgcGFyYSBkZXRhbGxlcylcbiIKKworIzogcmVtb3RlLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJUdSByYW1hIGVzdMOhIGFkZWxhbnRhZGEgYSAnJXMnIHBvciAlZCBjb21taXQuXG4iCittc2dzdHJbMV0gIlR1IHJhbWEgZXN0w6EgYWRlbGFudGFkYSBhICclcycgcG9yICVkIGNvbW1pdHMuXG4iCisKKyM6IHJlbW90ZS5jOjIwNDMKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcHVzaFwiIHBhcmEgcHVibGljYXIgdHVzIGNvbW1pdHMgbG9jYWxlcylcbiIKKworIzogcmVtb3RlLmM6MjA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCisiVHUgcmFtYSBlc3TDoSBkZXRyw6FzIGRlICclcycgcG9yICVkIGNvbW1pdCwgeSBwdWVkZSBzZXIgYXZhbnphZGEgcsOhcGlkby5cbiIKK21zZ3N0clsxXSAiIgorIlR1IHJhbWEgZXN0w6EgZGV0csOhcyBkZSAnJXMnIHBvciAlZCBjb21taXRzLCB5IHB1ZWRlIHNlciBhdmFuemFkYSByw6FwaWRvLlxuIgorCisjOiByZW1vdGUuYzoyMDU0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKHVzYSBcImdpdCBwdWxsXCIgcGFyYSBhY3R1YWxpemFyIHR1IHJhbWEgbG9jYWwpXG4iCisKKyM6IHJlbW90ZS5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiVHUgcmFtYSB5ICclcycgaGFuIGRpdmVyZ2lkbyxcbiIKKyJ5IHNlIHRpZW5lICVkIHkgJWQgY29tbWl0IGRpZmVyZW50ZXMgZW4gY2FkYSB1bmEgcmVzcGVjdGl2YW1lbnRlLlxuIgorbXNnc3RyWzFdICIiCisiVHUgcmFtYSB5ICclcycgaGFuIGRpdmVyZ2lkbyxcbiIKKyJ5IHRpZW5lbiAlZCB5ICVkIGNvbW1pdHMgZGlmZXJlbnRlcyBjYWRhIHVuYSByZXNwZWN0aXZhbWVudGUuXG4iCisKKyM6IHJlbW90ZS5jOjIwNjcKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiAgKHVzYSBcImdpdCBwdWxsXCIgcGFyYSBmdXNpb25hciBsYSByYW1hIHJlbW90YSBlbiBsYSB0dXlhKVxuIgorCisjOiByZW1vdGUuYzoyMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIG5vbWJyZSBkZSBvYmpldG8gJyVzJyIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgIm1hbCBub21icmUgZGUgcmVmIGRlIHJlZW1wbGF6bzogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAiZHVwbGljYXIgcmVmIGRlIHJlZW1wbGF6bzogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSBkZXB0aCB0b28gaGlnaCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICJyZW1wbGF6YXIgcHJvZnVuZGlhZCBtdXkgZWxldmFkYSBwYXJhIG9iamV0byAlcyIKKworIzogcmVyZXJlLmM6MjE3IHJlcmVyZS5jOjIyNiByZXJlcmUuYzoyMjkKK21zZ2lkICJjb3JydXB0IE1FUkdFX1JSIgorbXNnc3RyICJNRVJHRV9SUiBjb3JydXB0byIKKworIzogcmVyZXJlLmM6MjY0IHJlcmVyZS5jOjI2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXJlcmUgcmVjb3JkIgorbXNnc3RyICJpbmNhcGF6IGRlIGVzY3JpYmlyIGVudHJhZGEgcmVyZXJlIgorCisjOiByZXJlcmUuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlcmUgd2VyZSBlcnJvcnMgd2hpbGUgd3JpdGluZyAnJXMnICglcykiCittc2dzdHIgImh1Ymllcm9uIGVycm9yZXMgbWllbnRyYXMgc2UgZXNjcmliw61hICclcycgKCVzKSIKKworIzogcmVyZXJlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgaGFjZXIgZmx1c2ggJyVzJyIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgaHVua3MgZW4gY29uZmxpY3RvIGVuICclcyciCisKKyM6IHJlcmVyZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAnJXMnIgorbXNnc3RyICJmYWxsw7MgdXRpbWUoKSBlbiAnJXMnIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZXNjcmliaWVuZG8gJyVzJyBmYWxsw7MiCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiJyVzJyBwdWVzdG8gZW4gc3RhZ2UgdXNhbmRvIHJlc29sdWNpw7NuIHByZXZpYS4iCisKKyM6IHJlcmVyZS5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLiIKK21zZ3N0ciAiUmVzb2x1Y2nDs24gZ3VhcmRhZGEgcGFyYSAnJXMnLiIKKworIzogcmVyZXJlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiclcycgcmVzdWVsdG8gdXNhbmRvIHJlc29sdWNpw7NuIHByZXZpYS4iCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGRlc3ZpbmN1bGFyIHN0cmF5ICclcyciCisKKyM6IHJlcmVyZS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAiUmVzb2x1Y2nDs24gcHJlY2FyZ2FkYSBwYXJhICclcyciCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDY3IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBlbCBkaXJlY3RvcmlvICclcyciCisKKyM6IHJlcmVyZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgImZhbGzDsyBhbCBhY3R1YWxpemFyIGVzdGFkbyBjb25mbGljdGl2byBlbiAnJXMnIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICJyZXNvbHVjacOzbiBwYXJhICclcycgbm8gcmVjb3JkYWRhIgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZGVzdmluY3VsYXIgJyVzJyIKKworIzogcmVyZXJlLmM6MTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJBY3R1YWxpemFkYSBwcmVpbWFnZW4gcGFyYSAnJXMnIgorCisjOiByZXJlcmUuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvcmdvdCByZXNvbHV0aW9uIGZvciAnJXMnXG4iCittc2dzdHIgIlNlIG9sdmlkw7MgcmVzb2x1Y2nDs24gcGFyYSAnJXMnXG4iCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWJyaXIgZGlyZWN0b3JpbyByci1jYWNoZSIKKworIzogcmV2aXNpb24uYzoyNDk3Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAidHUgcmFtYSBhY3R1YWwgcGFyZWNlIGVzdGFyIHJvdGEiCisKKyM6IHJldmlzaW9uLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgInR1IHJhbWEgYWN0dWFsICclcycgbm8gdGllbmUgbmluZ8O6biBjb21taXQgdG9kYXbDrWEiCisKKyM6IHJldmlzaW9uLmM6MjcwOAorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCBlcyBpbmNvbXBhdGlibGUgY29uIC0tYmlzZWN0IgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIi1MIG5vIHNvcG9ydGEgdG9kYXbDrWEgZm9ybWF0b3MgZGUgZGlmZiBmdWVyYSBkZSAtcCB5IC1zIgorCisjOiBydW4tY29tbWFuZC5jOjc2MgorbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzIGFsIGFicmlyIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBjcmVhciBoaWxvIGFzeW5jOiAlcyIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisiRWwgaG9vayAnJXMnIGZ1ZSBpZ25vcmFkbyBwb3JxdWUgbm8gaGEgc2lkbyBjb25maWd1cmFkbyBjb21vIGVqZWN1dGFibGUuXG4iCisiUHVlZGVzIGRlc2FjdGl2YXIgZXN0YSBhZHZlcnRlbmNpYXMgY29uIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayAiCisiZmFsc2VgLiIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiIgorImZsdXNoIHBhY2tldCBpbmVzcGVyYWRvIG1pZW50cmFzIHNlIGxlw61hIGVzdGF0dXMgZGUgZGVzZW1wYXF1ZXRhZG8gcmVtb3RvIgorCisjOiBzZW5kLXBhY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBhbmFsaXphciBlbCBlc3RhZG8gZGUgZGVzZW1wYXF1ZXRhZG8gcmVtb3RvOiAlcyIKKworIzogc2VuZC1wYWNrLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSB1bnBhY2sgZmFpbGVkOiAlcyIKK21zZ3N0ciAiZGVzZW1wYXF1ZXRhZG8gcmVtb3RvIGZhbGzDszogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICJmYWxsw7MgYWwgZmlybWFyIGVsIGNlcnRpZmljYWRvIGRlIHB1c2giCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiZWwgZmluYWwgcmVjZXB0b3Igbm8gc29wb3J0YSAtLXNpZ25lZCBwdXNoIgorCisjOiBzZW5kLXBhY2suYzo0MjUKK21zZ2lkICIiCisibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS0iCisic2lnbmVkIHB1c2giCittc2dzdHIgIiIKKyJubyBzZSBtYW5kYSB1biBjZXJ0aWZpY2FkbyBkZSBwdXNoIHlhIHF1ZSBlbCBkZXN0aW5vIG5vIHNvcG9ydGEgcHVzaCBmaXJtYWRvICIKKyIoLS1zaWduZWQgKSIKKworIzogc2VuZC1wYWNrLmM6NDM3Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICJlbCBkZXN0aW5vIG5vIHNvcG9ydGEgcHVzaCBhdMOzbWljb3MgKC0tYXRvbWljKSIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgImVsIGRlc3Rpbm8gbm8gc29wb3J0YSBvcGNpb25lcyBkZSBwdXNoIgorCisjOiBzZXF1ZW5jZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAibWVuc2FqZSBkZSBjb21taXQgaW52w6FsaWRvLCBtb2RvIGNsZWFudXAgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBib3JyYXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzEzIGJ1aWx0aW4vcmViYXNlLmM6NzgxIGJ1aWx0aW4vcmViYXNlLmM6MTcwNiBidWlsdGluL3JtLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlbGltaW5hciclcyciCisKKyM6IHNlcXVlbmNlci5jOjMyMworbXNnaWQgInJldmVydCIKK21zZ3N0ciAicmV2ZXJ0aXIiCisKKyM6IHNlcXVlbmNlci5jOjMyNQorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJjaGVycnktcGljayIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICJyZWJhc2UgLWkiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgImFjY2nDs24gZGVzY29ub2NpZGE6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzozODcKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorImRlc3B1w6lzIGRlIHJlc29sdmVyIGxvcyBjb25mbGljdG9zLCBtYXJjYSBsYXMgcnV0YXMgY29ycmVnaWRhc1xuIgorImNvbiAnZ2l0IGFkZCA8cnV0YXM+JyBvICdnaXQgcm0gPHJ1dGFzPiciCisKKyM6IHNlcXVlbmNlci5jOjM5MAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisidHJhcyByZXNvbHZlciBsb3MgY29uZmxpY3RvcywgbWFyY2EgbGFzIHJ1dGFzIGNvcnJlZ2lkYXNcbiIKKyJjb24gJ2dpdCBhZGQgPHJ1dGFzPicgbyAnZ2l0IHJtIDxydXRhcz4nXG4iCisieSBoYXogdW4gY29tbWl0IGRlbCByZXN1bHRhZG8gY29uICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6NDAzIHNlcXVlbmNlci5jOjI5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBibG9xdWVhciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGVzY3JpYmlyIEVPTCBlbiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTUgc2VxdWVuY2VyLmM6Mjc5OCBzZXF1ZW5jZXIuYzoyOTk5IHNlcXVlbmNlci5jOjMwMTMKKyM6IHNlcXVlbmNlci5jOjMyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgImZhbGzDsyBhbCBmaW5hbGl6YXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDM4IHNlcXVlbmNlci5jOjE3MDcgc2VxdWVuY2VyLmM6MjgxOCBzZXF1ZW5jZXIuYzozMjU5CisjOiBzZXF1ZW5jZXIuYzozMzY4IGJ1aWx0aW4vYW0uYzoyNDQgYnVpbHRpbi9jb21taXQuYzo3ODMgYnVpbHRpbi9tZXJnZS5jOjExMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIKK21zZ3N0ciAidHVzIGNhbWJpb3MgbG9jYWxlcyBzZXLDoW4gc29icmVlc2NyaXRvcyBwb3IgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo0NjgKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgInJlYWxpemEgdW4gY29tbWl0IGNvbiB0dXMgY2FtYmlvcyBvIGFwbGljYSB1biBzdGFzaCBwYXJhIHByb2NlZGVyLiIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiBhdmFuY2UgcsOhcGlkbyIKKworIzogc2VxdWVuY2VyLmM6NTM5IGJ1aWx0aW4vdGFnLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICJNb2RvIGNsZWFudXAgaW52w6FsaWRvICVzIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorIy4gInJlYmFzZSAtaSIuCisjLgorIzogc2VxdWVuY2VyLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBJbmNhcGF6IGRlIGVzY3JpYmlyIGVsIG51ZXZvIGFyY2hpdm8gw61uZGljZSIKKworIzogc2VxdWVuY2VyLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFjdHVhbGl6YXIgZWwgw6FyYm9sIGRlIGxhIGNhY2jDqSIKKworIzogc2VxdWVuY2VyLmM6NjY0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVzb2x2ZXIgZWwgY29tbWl0IGRlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgIm5vIGhheSBsbGF2ZSBwcmVzZW50ZSBlbiAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVxdW90ZSB2YWx1ZSBvZiAnJXMnIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGRlcXVvdGUgcGFyYSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo3OTIgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MDUKKyM6IGJ1aWx0aW4vYW0uYzo3OTcgYnVpbHRpbi9tZXJnZS5jOjExMTQgYnVpbHRpbi9yZWJhc2UuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgJyVzJyBwYXJhIGxlY3R1cmEiCisKKyM6IHNlcXVlbmNlci5jOjgwMgorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIidHSVRfQVVUSE9SX05BTUUnIHlhIHByb3BvcmNpb25hZG8iCisKKyM6IHNlcXVlbmNlci5jOjgwNworbXNnaWQgIidHSVRfQVVUSE9SX0VNQUlMJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICInR0lUX0FVVEhPUl9FTUFJTCcgeWEgcHJvcG9yY2lvbmFkbyIKKworIzogc2VxdWVuY2VyLmM6ODEyCittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfREFURScgeWEgcHJvcG9yY2lvbmFkbyIKKworIzogc2VxdWVuY2VyLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAidmFyaWFibGUgZGVzY29ub2NpZGEgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6ODIxCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9OQU1FJyIKK21zZ3N0ciAiZmFsdGEgJ0dJVF9BVVRIT1JfTkFNRSciCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIgorbXNnc3RyICJmYWx0YSAnR0lUX0FVVEhPUl9FTUFJTCciCisKKyM6IHNlcXVlbmNlci5jOjgyNQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgImZhbHRhICdHSVRfQVVUSE9SX0RBVEUnIgorCisjOiBzZXF1ZW5jZXIuYzo5MDIgc2VxdWVuY2VyLmM6MTQyNworbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorbXNnc3RyICJsw61uZWEgZGUgZW50cmFkYSBtYWwgZm9ybWFkYSIKKworIzogc2VxdWVuY2VyLmM6OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJzZSBoYSBhcGxpY2FkbyB1biBzdGFnZSBhIGxvcyBjYW1iaW9zIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvXG4iCisic2kgZXN0b3MgY2FtYmlvcyBlc3TDoW4gZGVzdGluYWRvcyBhIHNlciBhcGxhc3RhZG9zIGVuIGVsIGNvbW1pdCBwcmV2aW8sICIKKyJlamVjdXRhOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiU2kgZXN0b3MgY2FtYmlvcyBlc3TDoW4gZGVzdGluYWRvcyBhIHVuIG51ZXZvIGNvbW1pdCwgZWplY3V0YTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJlbiBjYW1ib3MgY2Fzb3MsIGN1YW5kbyBhY2FiZXMsIGNvbnRpbnVhIGNvbjpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjE4Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgImhvb2sgJ3ByZXBhcmUtY29tbWl0LW1zZycgZmFsbMOzIgorCisjOiBzZXF1ZW5jZXIuYzoxMjI0Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVHUgbm9tYnJlIHkgY29ycmVvIGZ1ZXJvbiBjb25maWd1cmFkb3MgYXV0b23DoXRpY2FtZW50ZSBiYXNhZG9zXG4iCisiZW4gdHUgdXN1YXJpbyB5IG5vbWJyZSBkZSBob3N0LiBQb3IgZmF2b3IgdmVyaWZpY2EgcXVlIHNvbiBjb3JyZWN0b3MuXG4iCisiVHUgcHVlZGVzIHN1cHJpbWlyIGVzdGUgbWVuc2FqZSBjb25maWd1csOhbmRvbG9zIGRlIGZvcm1hIGV4cGxpY2l0YS4gRWplY3V0YSAiCisiZWwgXG4iCisic2lndWllbnRlIGNvbWFuZG8geSBzaWd1ZSBsYXMgaW5zdHJ1Y2Npb25lcyBkZSB0dSBlZGl0b3JcbiIKKyIgcGFyYSBtb2RpZmljYXIgdHUgYXJjaGl2byBkZSBjb25maWd1cmFjacOzbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJUcmFzIGhhY2VyIGVzdG8sIHB1ZWRlcyBhcnJlZ2xhciBsYSBpZGVudGlkYWQgdXNhZGEgcGFyYSBlc3RlIGNvbW1pdCBjb246XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjM3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVHUgbm9tYnJlIHkgY29ycmVvIGZ1ZXJvbiBjb25maWd1cmFkb3MgYXV0b23DoXRpY2FtZW50ZSBiYXNhZG9zXG4iCisiZW4gdHUgdXN1YXJpbyB5IG5vbWJyZSBkZSBob3N0LiBQb3IgZmF2b3IgdmVyaWZpY2EgcXVlIHNvbiBjb3JyZWN0b3MuXG4iCisiVHUgcHVlZGVzIHN1cHJpbWlyIGVzdGUgbWVuc2FqZSBjb25maWd1csOhbmRvbG9zIGRlIGZvcm1hIGV4cGxpY2l0YTogXG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiVHUgbm9tYnJlXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIlRyYXMgaGFjZXIgZXN0bywgcHVlZGVzIGFycmVnbGFyIHR1IGlkZW50aWRhZCBwYXJhIGVzdGUgY29tbWl0IGNvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyNzkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWRvIHJldmlzYXIgZWwgY29tbWl0IHJlY2nDqW4gY3JlYWRvIgorCisjOiBzZXF1ZW5jZXIuYzoxMjgxCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIGVsIGNvbW1pdCByZWNpw6luIGNyZWFkbyIKKworIzogc2VxdWVuY2VyLmM6MTMyNworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWRvIHJlc29sdmVyIEhFQUQgdHJhcyBjcmVhciBlbCBjb21taXQiCisKKyM6IHNlcXVlbmNlci5jOjEzMjkKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJIRUFEIGRlc2Fjb3BsYWRvIgorCisjOiBzZXF1ZW5jZXIuYzoxMzMzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoY29tbWl0LXJhw616KSIKKworIzogc2VxdWVuY2VyLmM6MTM1NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICLCoUhFQUQgJXMgbm8gZXMgdW4gY29tbWl0ISIKKworIzogc2VxdWVuY2VyLmM6MTM2MCBzZXF1ZW5jZXIuYzoxNDU4IGJ1aWx0aW4vY29tbWl0LmM6MTU2OQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBlbCBjb21taXQgZGUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTQxMSBzZXF1ZW5jZXIuYzoyMDU1Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgYXV0b3IgZGVsIGNvbW1pdCIKKworIzogc2VxdWVuY2VyLmM6MTQzMQorbXNnaWQgImNvcnJ1cHRlZCBhdXRob3Igd2l0aG91dCBkYXRlIGluZm9ybWF0aW9uIgorbXNnc3RyICJhdXRvciBjb3JydXB0byBzaW4gaW5mb3JtYWNpw7NuIGRlIGZlY2hhIgorCisjOiBzZXF1ZW5jZXIuYzoxNDQ3IGJ1aWx0aW4vYW0uYzoxNTYxIGJ1aWx0aW4vbWVyZ2UuYzo2ODQKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBmYWxsw7MgYWwgZXNjcmliaXIgZWwgw6FyYm9sIgorCisjOiBzZXF1ZW5jZXIuYzoxNDgwIHNlcXVlbmNlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIG1lbnNhamUgZGVsIGNvbW1pdCBkZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNTE2IGJ1aWx0aW4vYW0uYzoxNTgzIGJ1aWx0aW4vY29tbWl0LmM6MTY2OCBidWlsdGluL21lcmdlLmM6ODgzCisjOiBidWlsdGluL21lcmdlLmM6OTA4Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgImZhbGzDsyBhbCBlc2NyaWJpciBlbCBvYmpldG8gY29tbWl0IgorCisjOiBzZXF1ZW5jZXIuYzoxNTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgY29tbWl0ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIGVsIGNvbW1pdCBwYWRyZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTY1NiBzZXF1ZW5jZXIuYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgImNvbWFuZG8gZGVzY29ub2NpZG86ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNzE0IHNlcXVlbmNlci5jOjE3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICJFc3RhIGVzIHVuYSBjb21iaW5hY2nDs24gZGUgJWQgY29tbWl0cy4iCisKKyM6IHNlcXVlbmNlci5jOjE3MjQKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAic2UgbmVjZXNpdGEgdW4gSEVBRCBwYXJhIGFycmVnbGFyIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI2IHNlcXVlbmNlci5jOjMzMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTcyOAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGVsIG1lbnNhamUgZGUgY29tbWl0IGRlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGVzY3JpYmlyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjE3NDEgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NgorbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgIkVzdGUgZXMgZWwgbWVuc2FqZSBkZWwgMWVyIGNvbW1pdDoiCisKKyM6IHNlcXVlbmNlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgZWwgbWVuc2FqZSBkZWwgY29tbWl0IGRlICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIkVzdGUgZXMgZWwgbWVuc2FqZSBkZWwgY29tbWl0ICMlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJFbCBtZW5zYWplIGRlbCBjb21taXQgIyVkIHNlcsOhIHNhbHRhZG86IgorCisjOiBzZXF1ZW5jZXIuYzoxODUwCittc2dpZCAieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAidHUgYXJjaGl2byDDrW5kaWNlIG5vIGVzdMOhIGZ1c2lvbmFkby4iCisKKyM6IHNlcXVlbmNlci5jOjE4NTcKK21zZ2lkICJjYW5ub3QgZml4dXAgcm9vdCBjb21taXQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFycmVnbGFyIGVsIGNvbW1pdCByYcOteiIKKworIzogc2VxdWVuY2VyLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgImVsIGNvbW1pdCAlcyBlcyB1bmEgZnVzacOzbiBwZXJvIG5vIHNlIHByb3BvcmNpb27DsyBsYSBvcGNpw7NuIC1tLiIKKworIzogc2VxdWVuY2VyLmM6MTg4NCBzZXF1ZW5jZXIuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiZWwgY29tbWl0ICVzIG5vIHRpZW5lIHVuIHBhZHJlICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxODk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBvYnRlbmVyIGVsIG1lbnNhamUgZGUgY29tbWl0IHBhcmEgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxOTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IG5vIHNlIHB1ZWRlIGFuYWxpemFyIGVsIGNvbW1pdCBwYWRyZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVub21icmFyICclcycgYSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmV2ZXJ0aXIgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFwbGljYXIgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogZmFsbMOzIGFsIGxlZXIgZWwgw61uZGljZSIKKworIzogc2VxdWVuY2VyLmM6MjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBmYWxsw7MgYWwgcmVmcmVzY2FyIGVsIMOtbmRpY2UiCisKKyM6IHNlcXVlbmNlci5jOjIxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiJXMgbm8gYWNlcHRhIGxvcyBhcmd1bWVudG9zOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnRzIGZvciAlcyIKK21zZ3N0ciAiZmFsdGFuIGFyZ3VtZW50b3MgcGFyYSBwYXJhICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImzDrW5lYSBpbnbDoWxpZGEgJWQ6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgICclcycgc2luIHVuIGNvbW1pdCBwcmV2aW8iCisKKyM6IHNlcXVlbmNlci5jOjIzNDggYnVpbHRpbi9yZWJhc2UuYzoxNzIgYnVpbHRpbi9yZWJhc2UuYzoxOTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIzIGJ1aWx0aW4vcmViYXNlLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcycuIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyICclcycuIgorCisjOiBzZXF1ZW5jZXIuYzoyMzg0Cittc2dpZCAiY2FuY2VsbGluZyBhIGNoZXJyeSBwaWNraW5nIGluIHByb2dyZXNzIgorbXNnc3RyICJjYW5jZWxhbmRvIGNoZXJyeS1waWNrIGVuIHByb2dyZXNvIgorCisjOiBzZXF1ZW5jZXIuYzoyMzkxCittc2dpZCAiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiY2FuY2VsYW5kbyByZXZlcnQgZW4gcHJvZ3Jlc28iCisKKyM6IHNlcXVlbmNlci5jOjI0MzUKK21zZ2lkICJwbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAicG9yIGZhdm9yIGFycmVnbGUgZXN0byB1c2FuZG8gJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKKworIzogc2VxdWVuY2VyLmM6MjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAiaG9qYSBkZSBpbnN0cnVjY2lvbmVzIGludXRpbGl6YWJsZTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjQ0MgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAibmluZ8O6biBjb21taXQgYW5hbGl6YWRvLiIKKworIzogc2VxdWVuY2VyLmM6MjQ1MworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICJubyBzZSBwdWVkZSByZWFsaXphciBjaGVycnktcGljayBkdXJhbnRlIHVuIHJldmVydC4iCisKKyM6IHNlcXVlbmNlci5jOjI0NTUKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVhbGl6YXIgdW4gcmV2ZXJ0IGR1cmFudGUgdW4gY2hlcnJ5LXBpY2suIgorCisjOiBzZXF1ZW5jZXIuYzoyNTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgaW52w6FsaWRvIHBhcmEgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNjMwCittc2dpZCAidW51c2FibGUgc3F1YXNoLW9udG8iCittc2dzdHIgInNxdWFzaC1vbnRvIGluc2VydmlibGUiCisKKyM6IHNlcXVlbmNlci5jOjI2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgImhvamEgZGUgb3BjaW9uZXMgbWFsIGZvcm1hZGE6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI3MzYgc2VxdWVuY2VyLmM6NDQ2MworbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICJjb25qdW50byBkZSBjb21taXRzIHZhY8OtbyBlbnRyZWdhZG8iCisKKyM6IHNlcXVlbmNlci5jOjI3NTIKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAicmV2ZXJ0IHlhIGVzdMOhIGVuIHByb2dyZXNvIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgImludGVudGEgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgJXMgLS1hYm9ydClcIiIKKworIzogc2VxdWVuY2VyLmM6Mjc1NworbXNnaWQgImNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImNoZXJyeS1waWNrIHlhIGVzdMOhIGVuIHByb2dyZXNvIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU5CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiaW50ZW50YSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8ICVzIC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgdW4gZGlyZWN0b3JpbyBzZWN1ZW5jaWFkb3IgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjc4OAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgIm5vIHNlIHB1ZG8gYmxvcXVlYXIgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjg0OCBzZXF1ZW5jZXIuYzo0MjA5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJuaW5nw7puIGNoZXJyeS1waWNrIG8gcmV2ZXJ0IGVuIHByb2dyZXNvIgorCisjOiBzZXF1ZW5jZXIuYzoyODUwIHNlcXVlbmNlci5jOjI4NjEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJubyBzZSBwdWVkZSByZXNvbHZlciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyODUyIHNlcXVlbmNlci5jOjI4OTYKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWJvcnRhciBkZSB1bmEgcmFtYSBwb3IgbmFjZXIiCisKKyM6IHNlcXVlbmNlci5jOjI4ODIgYnVpbHRpbi9ncmVwLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgJyVzJzogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI4ODUKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJmaW5hbCBkZSBhcmNoaXZvIGluZXNwZXJhZG8iCisKKyM6IHNlcXVlbmNlci5jOjI4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICJhcmNoaXZvIEhFQUQgZGUgcHJlLWNoZXJyeS1waWNrIGd1YXJkYWRvwqAnJXMnIGVzdMOhIGNvcnJ1cHRvIgorCisjOiBzZXF1ZW5jZXIuYzoyOTAyCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICJQYXJlY2UgcXVlIHNlIGhhIG1vdmlkbyBIRUFELiBObyBzZSBoYWNlIHJlYm9iaW5hZG8sIMKhcmV2aXNhIHR1IEhFQUQhIgorCisjOiBzZXF1ZW5jZXIuYzoyOTQzCittc2dpZCAibm8gcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJubyBoYXkgcmV2ZXJ0IGVuIHByb2dyZXNvIgorCisjOiBzZXF1ZW5jZXIuYzoyOTUxCittc2dpZCAibm8gY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5pbmfDum4gY2hlcnJ5LXBpY2sgZW4gcHJvZ3Jlc28iCisKKyM6IHNlcXVlbmNlci5jOjI5NjEKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICJmYWxsw7MgYWwgZXNjcmliaXIgZWwgY29tbWl0IgorCisjOiBzZXF1ZW5jZXIuYzoyOTY4Cittc2dpZCAidGhlcmUgaXMgbm90aGluZyB0byBza2lwIgorbXNnc3RyICJubyBoYXkgbmFkYSBxdWUgc2FsdGFyIgorCisjOiBzZXF1ZW5jZXIuYzoyOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJoYXZlIHlvdSBjb21taXR0ZWQgYWxyZWFkeT9cbiIKKyJ0cnkgXCJnaXQgJXMgLS1jb250aW51ZVwiIgorbXNnc3RyICIiCisiwr95YSBoYXMgaGVjaG8gZWwgY29tbWl0P1xuIgorImludGVudGEgXCJnaXQgJXMgLS1jb250aW51ZVwiIgorCisjOiBzZXF1ZW5jZXIuYzozMDk1IHNlcXVlbmNlci5jOjQxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWN0dWFsaXphciAlcyIKKworIzogc2VxdWVuY2VyLmM6MzEzNCBzZXF1ZW5jZXIuYzo0MTAxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjb3BpYXIgJyVzJyBhICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJQdWVkZXMgZW5tZW5kYXIgZWwgY29tbWl0IGFob3JhLCBjb25cbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIlVuYSB2ZXogcXVlIGVzdMOpcyBzYXRpc2ZlY2hvIGNvbiBsb3MgY2FtYmlvcywgZWplY3V0YVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIk5vIHNlIHB1ZG8gYXBsaWNhciAlcy4uLiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICJObyBzZSBwdWRvIGZ1c2lvbmFyICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMxOTAgc2VxdWVuY2VyLmM6MzE5NCBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjb3BpYXIgJyVzJyBhICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBmYWlsZWQ6ICVzXG4iCisiJXNZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImVqZWN1Y2nDs24gZmFsbGlkYTogJXNcbiIKKyIlc1B1ZWRlcyBhcnJlZ2xhciBlbCBwcm9ibGVtYSwgeSBsdWVnbyBlamVjdXRhclxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMjcKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICJ5IHNlIGhpY2llcm9uIGNhbWJpb3MgYWwgw61uZGljZSB5L28gw6FyYm9sIGRlIHRyYWJham9cbiIKKworIzogc2VxdWVuY2VyLmM6MzIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJlamVjdWNpw7NuIGV4aXRvc2E6ICVzXG4iCisicGVybyB0b2RhdsOtYSBxdWVkYW4gY2FtYmlvcyBwYXJhIGVsIMOtbmRpY2UgbyDDoXJib2wgZGUgdHJhYmFqby5cbiIKKyJSZWFsaXphIHVuIGNvbW1pdCBvIHN0YXNoIGNvbiB0dXMgY2FtYmlvcywgeSBsdWVnbyBlamVjdXRhXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGxhYmVsIG5hbWU6ICclLipzJyIKK21zZ3N0ciAibm9tYnJlIGRlIGxhYmVsIGlsZWdhbDogJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ4Cittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICJlc2NyaWJpZW5kbyBjb21taXQgcmHDrXogZmFsc28iCisKKyM6IHNlcXVlbmNlci5jOjMzNTMKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICJlc2NyaWJpZW5kbyBzcXVhc2gtb250byIKKworIzogc2VxdWVuY2VyLmM6MzM5MSBidWlsdGluL3JlYmFzZS5jOjg3NiBidWlsdGluL3JlYmFzZS5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIgorbXNnc3RyICJmYWxsw7MgYWwgZW5jb250cmFyIMOhcmJvbCBkZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MzQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIHJlc29sdmVyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM0NjcKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgIm5vIHNlIHB1ZWRlIGZ1c2lvbmFyIHNpbiB1bmEgdmVyc2nDs24gYWN0dWFsIgorCisjOiBzZXF1ZW5jZXIuYzozNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJS4qcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFuYWxpemFyICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgIm5hZGEgcGFyYSBmdXNpb25hcjogJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNTEwCittc2dpZCAib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gdG9wIG9mIGEgW25ldyByb290XSIKK21zZ3N0ciAiZnVzacOzbiBvY3RvcHVzIG5vIHB1ZWRlIHNlciBlamVjdXRhZGEgZW4gbGEgcHVudGEgZGUgdW4gW251ZXZvIHJvb3RdIgorCisjOiBzZXF1ZW5jZXIuYzozNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgY29tbWl0IG1lc3NhZ2Ugb2YgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBlbCBtZW5zYWplIGRlbCBjb21taXQgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBpbnRlbnRhciBmdXNpb25hciAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjM3MDQKK21zZ2lkICJtZXJnZTogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJmdXNpw7NuOiBObyBzZSBwdWVkZSBlc2NyaWJpciBlbCBudWV2byBhcmNoaXZvIMOtbmRpY2UiCisKKyM6IHNlcXVlbmNlci5jOjM3NzMgYnVpbHRpbi9yZWJhc2UuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guXG4iCittc2dzdHIgIkF1dG9zdGFzaCBhcGxpY2Fkby5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGd1YXJkYXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjM3ODggYnVpbHRpbi9yZWJhc2UuYzo3NDkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIkFwbGljYW5kbyBhdXRvc3Rhc2ggcmVzdWx0w7MgZW4gY29uZmxpY3Rvcy5cbiIKKyJUdXMgY2FtYmlvcyBlc3TDoW4gc2VndXJvcyBlbiBlbCBzdGFzaC5cbiIKKyJQdWVkZXMgZWplY3V0YXIgXCJnaXQgc3Rhc2ggcG9wXCIgbyBcImdpdCBzdGFzaCBkcm9wXCIgZW4gY3VhbHF1aWVyICIKKyJtb21lbnRvLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaGFjZXIgY2hlY2tvdXQgYSAlcyIKKworIzogc2VxdWVuY2VyLmM6Mzg2MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgdmFsaWQgT0lEIgorbXNnc3RyICIlcyBubyBlcyBPSUQgdsOhbGlkbyIKKworIzogc2VxdWVuY2VyLmM6Mzg2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzc5Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJubyBzZSBwdWVkZSBkZXNhY29wbGFyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjM4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIkRldGVuaWRvIGVuIEhFQURcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzXG4iCittc2dzdHIgIkRldGVuaWRvIGVuICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJObyBzZSBwdWRvIGVqZWN1dGFyIGVsIGNvbWFuZG8gXCJ0b2RvXCJcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkhhIHNpZG8gcmVwcm9ncmFtYWRvOyBQYXJhIGVkaXRhciBlbCBjb21hbmRvIGFudGVzIGRlIGNvbnRpbnVhciwgcG9yIGZhdm9yXG4iCisiZWRpdGUgbGEgbGlzdGEgZGUgXCJ0b2RvXCIgcHJpbWVybzpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIkRldGVuaWRvIGVuICVzLi4uICAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjQwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICJjb21hbmRvIGRlc2Nvbm9jaWRvICVkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTA5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6NDExNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciAnb250byciCisKKyM6IHNlcXVlbmNlci5jOjQxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBhY3R1YWxpemFyIEhFQUQgYSAlcyIKKworIzogc2VxdWVuY2VyLmM6NDIyMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJubyBzZSBwdWVkZSByZWFsaXphciByZWJhc2U6IFRpZW5lcyBjYW1iaW9zIGZ1ZXJhIGRlbCDDoXJlYSBkZSBzdGFnZS4iCisKKyM6IHNlcXVlbmNlci5jOjQyMzAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYXJyZWdsYXIgdW4gY29tbWl0IG5vIGV4aXN0ZW50ZSIKKworIzogc2VxdWVuY2VyLmM6NDIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgImFyY2hpdm8gaW52w6FsaWRvOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgImNvbnRlbmlkbyBpbnbDoWxpZG86ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQyMzcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJUaWVuZXMgY2FtYmlvcyBmdWVyYSBkZSB1biBjb21taXQgZW4gdHUgw6FyYm9sIGRlIHRyYWJham8uIFBvciBmYXZvciwgcmVhbGl6YSAiCisidW4gY29tbWl0IGNvbiBlc3Rvc1xuIgorInByaW1lcm8geSBsdWVnbyBlamVjdXRhICdnaXQgcmViYXNlIC0tY29udGludWUnIGRlIG51ZXZvLiIKKworIzogc2VxdWVuY2VyLmM6NDI3MyBzZXF1ZW5jZXIuYzo0MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBmaWxlOiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGVzY3JpYmlyIGVsIGFyY2hpdm86ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQzMjcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGVsaW1pbmFyIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjQzMzQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAibm8gc2UgcHVkbyByZWFsaXphciBlbCBjb21taXQgY29uIGxvcyBjYW1iaW9zIGVuIGVsIMOhcmVhIGRlIHN0YWdlLiIKKworIzogc2VxdWVuY2VyLmM6NDQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6IG5vIHNlIHB1ZWRlIGFwbGljYXIgY2hlcnJ5LXBpY2sgYSB1biAlcyIKKworIzogc2VxdWVuY2VyLmM6NDQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczogcmV2aXNpw7NuIGVycsOzbmVhIgorCisjOiBzZXF1ZW5jZXIuYzo0NDc5Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWVkZSByZXZlcnRpciBjb21vIGNvbW1pdCBpbmljaWFsIgorCisjOiBzZXF1ZW5jZXIuYzo0OTUyCittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogb3BjaW9uZXMgZGVzY29ub2NpZGFzIgorCisjOiBzZXF1ZW5jZXIuYzo0OTU1Cittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJhbmRvIHJldmlzaW9uZXMiCisKKyM6IHNlcXVlbmNlci5jOjUxMTMKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLlxuIgorIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorbXNnc3RyICIiCisiU2UgcHVlZGUgYXJyZWdsYXIgZXN0byBjb24gJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIHkgZGVzcHXDqXMgZWplY3V0YSAnZ2l0ICIKKyJyZWJhc2UgLS1jb250aW51ZScuXG4iCisiTyBzZSBwdWVkZSBhYm9ydGFyIGVsIHJlYmFzZSBjb24gJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCisKKyM6IHNlcXVlbmNlci5jOjUyMjYgc2VxdWVuY2VyLmM6NTI0MworbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgIm5hZGEgcXVlIGhhY2VyIgorCisjOiBzZXF1ZW5jZXIuYzo1MjU3Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBzYWx0YXIgbG9zIGNvbWFuZG9zIHBpY2sgaW5uZWNlc2FyaW9zIgorCisjOiBzZXF1ZW5jZXIuYzo1MzUxCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAiZXN0ZSBzY3JpcHQgeWEgZnVlIHJlb3JnYW5pemFkby4iCisKKyM6IHNldHVwLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICInJXMnIGVzdMOhIGZ1ZXJhIGRlbCByZXBvc2l0b3JpbyIKKworIzogc2V0dXAuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisiJXM6IG5vIGV4aXN0ZSBsYSBydXRhIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvLlxuIgorIlVzZSAnZ2l0IDxjb21hbmRvPiAtLSA8cnV0YT4uLi4nIHBhcmEgZXNwZWNpZmljYXIgcnV0YXMgcXVlIG5vIGV4aXN0ZW4gIgorImxvY2FsbWVudGUuIgorCisjOiBzZXR1cC5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJhcmd1bWVudG8gYW1iaWd1byAnJXMnOiByZXZpc2nDs24gZGVzY29ub2NpZGEgbyBydXRhIGZ1ZXJhIGRlbCDDoXJib2wgZGUgIgorInRyYWJham8uXG4iCisiVXNlICctLScgcGFyYSBzZXBhcmFyIGxhcyBydXRhcyBkZSBsYXMgcmV2aXNpb25lcywgZGUgZXN0YSBtYW5lcmE6XG4iCisiJ2dpdCA8Y29tYW5kbz4gWzxyZXZpc2nDs24+Li4uXSAtLSBbPGFyY2hpdm8+Li4uXSciCisKKyM6IHNldHVwLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIm9wY2nDs24gJyVzJyBkZWJlIHZlbmlyIGFudGVzIGRlIGFyZ3VtZW50b3Mgbm8gb3BjaW9uYWxlcyIKKworIzogc2V0dXAuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorImFyZ3VtZW50byBhbWJpZ3VvICclcyc6IGFtYm9zIHJldmlzacOzbiB5IG5vbWJyZSBkZSBhcmNoaXZvXG4iCisiVXNlICctLScgcGFyYSBzZXBhcmFyIHJ1dGFzIGRlIHJldmlzaW9uZXMsIGRlIGVzdGEgbWFuZXJhOlxuIgorIidnaXQgPGNvbWFuZG8+IFs8cmV2aXNpw7NuPi4uLl0gLS0gWzxhcmNoaXZvPi4uLl0nIgorCisjOiBzZXR1cC5jOjM5MQorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICIiCisibm8gZXMgcG9zaWJsZSBjb25maWd1cmFyIGVsIGRpcmVjdG9yaW8gZGUgdHJhYmFqbyB1c2FuZG8gdW5hIGNvbmZpZ3VyYWNpw7NuICIKKyJpbnbDoWxpZGEiCisKKyM6IHNldHVwLmM6Mzk1Cittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgImVzdGEgb3BlcmFjacOzbiBkZWJlIHNlciByZWFsaXphZGEgZW4gdW4gw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IHNldHVwLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJTZSBlc3BlcmFiYSB2ZXJzacOzbiBkZSBnaXQgcmVwbyAgPD0gJWQsIGVuY29udHJhZGEgJWQiCisKKyM6IHNldHVwLmM6NTQ5Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJzZSBlbmNvbnRyw7MgZXh0ZW5zacOzbiBkZSByZXBvc2l0b3JpbyBkZXNjb25vY2lkYToiCisKKyM6IHNldHVwLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiZXJyb3IgYWJyaWVuZG8gJyVzJyIKKworIzogc2V0dXAuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGxhcmdlIHRvIGJlIGEgLmdpdCBmaWxlOiAnJXMnIgorbXNnc3RyICJtdXkgZ3JhbmRlIHBhcmEgc2VyIHVuIGFyY2hpdm8gLmdpdDogJyVzJyIKKworIzogc2V0dXAuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiZXJyb3IgbGV5ZW5kbyAlcyIKKworIzogc2V0dXAuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdG8gZ2l0ZmlsZSBpbnbDoWxpZG86ICVzIgorCisjOiBzZXR1cC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwYXRoIGluIGdpdGZpbGU6ICVzIgorbXNnc3RyICJubyBoYXkgcnV0YSBlbiBnaXRmaWxlOiAlcyIKKworIzogc2V0dXAuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJubyBlcyB1biByZXBvc2l0b3JpbyBnaXQ6ICVzIgorCisjOiBzZXR1cC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICInJCVzJyBtdXkgZ3JhbmRlIgorCisjOiBzZXR1cC5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAibm8gZXMgdW4gcmVwb3NpdG9yaW8gZ2l0OiAnJXMnIgorCisjOiBzZXR1cC5jOjcyMCBzZXR1cC5jOjcyMiBzZXR1cC5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYXBsaWNhciBjaGRpciBhICclcyciCisKKyM6IHNldHVwLmM6NzI1IHNldHVwLmM6NzgxIHNldHVwLmM6NzkxIHNldHVwLmM6ODMwIHNldHVwLmM6ODM4Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIm5vIHNlIHB1ZWRlIHZvbHZlciBhIGN3ZCIKKworIzogc2V0dXAuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgZGV0ZXJtaW5hciAnJSpzJXMlcyciCisKKyM6IHNldHVwLmM6MTA5MAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkluY2FwYXogZGUgbGVlciBlbCBkaXJlY3RvcmlvIGRlIHRyYWJham8gYWN0dWFsIgorCisjOiBzZXR1cC5jOjEwOTkgc2V0dXAuYzoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGFuZ2UgdG8gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY2FtYmlhciBhICclcyciCisKKyM6IHNldHVwLmM6MTExMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAiIgorIm5vIGVzIHVuIHJlcG9zaXRvcmlvIGdpdCAobmkgbmluZ3VubyBkZSBsb3MgZGlyZWN0b3Jpb3Mgc3VwZXJpb3Jlcyk6ICVzIgorCisjOiBzZXR1cC5jOjExMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICIiCisibm8gZXMgdW4gcmVwb3NpdG9yaW8gZ2l0ICggbyBuaW5nw7puIHBhZHJlIGVuIGVsIHB1bnRvIGRlIG1vbnRhZG8gJXMpXG4iCisiUGFyYW5kbyBlbiBlbCBsw61taXRlIGRlbCBzaXN0ZW1hIGRlIGFyY2hpdm9zICIKKyIoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBubyBlc3RhYmxlY2lkbykuIgorCisjOiBzZXR1cC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyJwcm9ibGVtYSBjb24gZWwgdmFsb3IgZGVsIG1vZG8gZGUgYXJjaGl2byBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgKDAlLjNvKS5cbiIKKyJFbCBkdWXDsW8gZGUgbG9zIGFyY2hpdm9zIHRpZW5lIHF1ZSB0ZW5lciBwZXJtaXNvcyBkZSBsZWN0dXJhIHkgZXNjcml0dXJhLiIKKworIzogc2V0dXAuYzoxMjcxCittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzIGFsIGFicmlyIC9kZXYvbnVsbCBvIGR1cCIKKworIzogc2V0dXAuYzoxMjg2Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBmb3JrIgorCisjOiBzZXR1cC5jOjEyOTEKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICJmYWxsw7Mgc2V0c2lkIgorCisjOiBzaGExLWZpbGUuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAib2JqZXRvIGRpcmVjdG9yaW8gJXMgbm8gZXhpc3RlOyByZXZpc2EgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAiaW5jYXBheiBkZSBub3JtYWxpemFyIGxhIHJ1dGEgZGUgb2JqZXRvIGFsdGVybm86ICVzIgorCisjOiBzaGExLWZpbGUuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlnbm9yaW5nIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICIlczogaWdub3JhbmRvIGVzcGFjaW9zIGRlIG9iamV0b3MgYWx0ZXJub3MsIGFuaWRhZG8gbXV5IHByb2Z1bmRvIgorCisjOiBzaGExLWZpbGUuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBvYmplY3QgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiaW5jYXBheiBkZSBub3JtYWxpemFyIGRpcmVjdG9yaW8gZGUgb2JqZXRvOiAlcyIKKworIzogc2hhMS1maWxlLmM6NjI1Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGhhY2VyIGZkb3BlbiBlbiBsb2NrZmlsZSBhbHRlcm5vcyIKKworIzogc2hhMS1maWxlLmM6NjQzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGxlZXIgYXJjaGl2b3MgYWx0ZXJub3MiCisKKyM6IHNoYTEtZmlsZS5jOjY1MAorbXNnaWQgInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBtb3ZlciBhcmNoaXZvcyBhbHRlcm5vcyBlbiBlbCBsdWdhciIKKworIzogc2hhMS1maWxlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAicnV0YSAnJXMnIG5vIGV4aXN0ZSIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICIiCisicmVwb3NpdG9yaW8gZGUgcmVmZXJlbmNpYSAnJXMnIGNvbW8gdW4gY2hlY2tvdXQgdmluY3VsYWRvIG5vIGVzIHNvcG9ydGFkbyAiCisidG9kYXbDrWEuIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAicmVwb3NpdG9yaW8gZGUgcmVmZXJlbmNpYSAnJXMnIG5vIGVzIHVuIHJlcG9zaXRvcmlvIGxvY2FsLiIKKworIzogc2hhMS1maWxlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAicmVwb3NpdG9yaW8gZGUgcmVmZXJlbmNpYSAnJXMnIGVzIHN1cGVyZmljaWFsIChzaGFsbG93KSIKKworIzogc2hhMS1maWxlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAicmVwb3NpdG9yaW8gZGUgcmVmZXJlbmNpYSAnJSBzJyBlc3TDoSBpbmplcnRhZG8iCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgImzDrW5lYSBpbnbDoWxpZGEgbWllbnRyYXMgc2UgYW5hbGl6YWJhbiByZWZzIGFsdGVybmFzOiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiaW50ZW50YW5kbyB1c2FyIG1tYXAgJTxQUkl1TUFYPiBzb2JyZSBsw61taXRlICU8UFJJdU1BWD4iCisKKyM6IHNoYTEtZmlsZS5jOjk2NAorbXNnaWQgIm1tYXAgZmFpbGVkIgorbXNnc3RyICJtbWFwIGZhbGzDsyIKKworIzogc2hhMS1maWxlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZmlsZSAlcyBpcyBlbXB0eSIKK21zZ3N0ciAiYXJjaGl2byBkZSBvYmpldG8gJXMgZXN0w6EgdmFjw61vIgorCisjOiBzaGExLWZpbGUuYzoxMjUyIHNoYTEtZmlsZS5jOjIzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAib2JqZXRvIHBlcmRpZG8gY29ycnVwdG8gJyVzJyIKKworIzogc2hhMS1maWxlLmM6MTI1NCBzaGExLWZpbGUuYzoyMzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJiYXN1cmEgYWwgZmluYWwgZGVsIG9iamV0byBwZXJkaWRvICclcyciCisKKyM6IHNoYTEtZmlsZS5jOjEyOTYKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICJ0aXBvIGRlIG9iamV0byBpbnbDoWxpZG8iCisKKyM6IHNoYTEtZmlsZS5jOjEzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBkZXNlbXBhY2FyIGhlYWRlciAlcyBjb24gLS1hbGxvdy11bmtub3duLXR5cGUiCisKKyM6IHNoYTEtZmlsZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgImluY2FwYXogZGUgZGVzZW1wYXF1ZXRhciBoZWFkZXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjEzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFuYWxpemFyIGhlYWRlciAlcyBjb24gLS1hbGxvdy11bmtub3duLXR5cGUiCisKKyM6IHNoYTEtZmlsZS5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAiaW5jYXBheiBkZSBhbmFsaXphciBoZWFkZXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgbGVlciBvYmpldG8gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZW1lbnQgJXMgbm90IGZvdW5kIGZvciAlcyIKK21zZ3N0ciAicmVlbXBsYXpvICVzIG5vIGVuY29udHJhZG8gcGFyYSAlcyIKKworIzogc2hhMS1maWxlLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAib2JqZXRvIHBlcmRpZG8gJXMgKGd1YXJkYWRvIGVuICVzKSBlc3TDoSBjb3Jyb21waWRvIgorCisjOiBzaGExLWZpbGUuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAicGFxdWV0ZSBkZSBvYmpldG8gJXMgKGd1YXJkYWRvIGVuICVzKSBlc3TDoSBjb3Jyb21waWRvIgorCisjOiBzaGExLWZpbGUuYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGVzY3JpYmlyIGFyY2hpdm8gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gcG9uZXIgcGVybWlzb3MgYSAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxNzEzCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiZmFsbMOzIGRlIGVzY3JpdHVyYSIKKworIzogc2hhMS1maWxlLmM6MTczMgorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiZXJyb3IgY2VycmFuZG8gZWwgYXJjaGl2byBkZSBvYmpldG8gc3VlbHRvIgorCisjOiBzaGExLWZpbGUuYzoxNzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKyJwZXJtaXNvcyBpbnN1ZmljaWVudGVzIHBhcmEgYWdyZWdhciB1biBvYmpldG8gYSBsYSBiYXNlIGRlIGRhdG9zIGRlbCAiCisicmVwb3NpdG9yaW8gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE3OTkKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGNyZWFyIHVuIGFyY2hpdm8gdGVtcG9yYWwiCisKKyM6IHNoYTEtZmlsZS5jOjE4MjMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZXNjcmliaXIgZWwgYXJjaGl2byBkZSBvYmpldG8gc3VlbHRvIgorCisjOiBzaGExLWZpbGUuYzoxODI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBkZXNpbmZsYXIgZWwgb2JqZXRvIG51ZXZvICVzICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgImRlZmxhdGVFbmQgZW4gb2JqZXRvICVzIGZhbGzDsyAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgImNvbmZ1bmRpZG8gcG9yIGZ1ZW50ZSBkZSBkYXRhIGRlIG9iamV0b3MgaW5lc3RhYmxlIHBhcmEgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgImZhbGzDsyB1dGltZSgpIGVuICVzIgorCisjOiBzaGExLWZpbGUuYzoxOTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBvYmpldG8gcGFyYSAlcyIKKworIzogc2hhMS1maWxlLmM6MTk2MgorbXNnaWQgImNvcnJ1cHQgY29tbWl0IgorbXNnc3RyICJjb21taXQgY29ycnVwdG8iCisKKyM6IHNoYTEtZmlsZS5jOjE5NzAKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAidGFnIGNvcnJ1cHRvIgorCisjOiBzaGExLWZpbGUuYzoyMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImVycm9yIGxleWVuZG8gYWwgaW5kZXhhciAlcyIKKworIzogc2hhMS1maWxlLmM6MjA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICJsZWN0dXJhIGNvcnRhIGFsIGluZGV4YXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIxNDUgc2hhMS1maWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICIlczogZmFsbMOzIGFsIGluc2VydGFyIGVuIGxhIGJhc2UgZGUgZGF0b3MiCisKKyM6IHNoYTEtZmlsZS5jOjIxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiJXM6IHRpcG8gZGUgYXJjaGl2byBubyBzb3BvcnRhZG8iCisKKyM6IHNoYTEtZmlsZS5jOjIxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICIlcyBubyBlcyBvYmpldG8gdsOhbGlkbyIKKworIzogc2hhMS1maWxlLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgbm8gZXMgdW4gb2JqZXRvICclcycgdsOhbGlkbyIKKworIzogc2hhMS1maWxlLmM6MjIxMyBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWJyaXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0MDMgc2hhMS1maWxlLmM6MjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICJoYXNoIG5vIGNvbmN1ZXJkYSBwYXJhICVzIChzZSBlc3BlcmFiYSAlcykiCisKKyM6IHNoYTEtZmlsZS5jOjI0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgaGFjZXIgbW1hcCBhICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIGRlc2VtcGFxdWV0YXIgaGVhZGVyIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBoZWFkZXIgb2YgJXMiCittc2dzdHIgImluY2FwYXogZGUgYW5hbGl6YXIgaGVhZGVyIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZGVzZW1wYXF1ZXRhciBjb250ZW5pZG9zIGRlICVzIgorCisjOiBzaGExLW5hbWUuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIlNIQTEgJXMgY29ydG8gZXMgYW1iaWd1byIKKworIzogc2hhMS1uYW1lLmM6NDk4Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiTG9zIGNhbmRpZGF0b3Mgc29uOiIKKworIzogc2hhMS1uYW1lLmM6Nzk3Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBub3JtYWxtZW50ZSBudW5jYSBjcmVhIHVuYSByZWYgcXVlIHRlcm1pbmUgY29uIDQwIGNhcmFjdGVyZXMgaGV4XG4iCisicG9ycXVlIGVzdG8gc2Vyw61hIGlnbm9yYWRvIGN1YW5kbyBzb2xvIHNlIGVzcGVjaWZpcXVlbiA0MC1oZXguIEVzdGFzIHJlZnNcbiIKKyJ0YWwgdmV6IHNlYW4gY3JlYWRhcyBwb3IgZXJyb3IuIFBvciBlamVtcGxvLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJkb25kZSBcIiRiclwiIGVzdMOhIGRlIGFsZ3VuYSBtYW5lcmEgdmFjw61hIHkgdW5hIHJlZiBkZSA0MC1oZXggZXMgY3JlYWRhLiBQb3IgIgorImZhdm9yXG4iCisiZXhhbWluYSBlc3RhcyByZWZzIHkgdGFsIHZleiBiw7NycmFsYXMuIFNpbGVuY2lhIGVzdGUgbWVuc2FqZSBcbiIKKyJlamVjdXRhbmRvIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldS4lMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZQorIzogc3RyYnVmLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQiIKK21zZ3N0ciAiJXUuJTIuMnUgTWlCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCL3MiCittc2dzdHIgIiV1LiUyLjJ1IE1pQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIiCittc2dzdHIgIiV1LiUyLjJ1IEtpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQi9zIgorbXNnc3RyICIldS4lMi4ydSBLaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUgYnl0ZSIKK21zZ3N0clsxXSAiJXUgYnl0ZXMiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUvcyIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMvcyIKK21zZ3N0clswXSAiJXUgYnl0ZXMvcyIKK21zZ3N0clsxXSAiJXUgYnl0ZXMvcyIKKworIzogc3RyYnVmLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZWRpdCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGVkaXRhciAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxMTQgc3VibW9kdWxlLmM6MTQzCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBjYW1iaWFyIC5naXRtb2R1bGVzIG5vIGZ1c2lvbmFkb3MsIHJlc3VlbHZhIGVzdGUgcHJvYmxlbWEgcHJpbWVybyIKKworIzogc3VibW9kdWxlLmM6MTE4IHN1Ym1vZHVsZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgIk5vIHNlIHB1ZG8gZW5jb250cmFyIGxhIHNlY2Npw7NuIGVuIC5naXRtb2R1bGVzIGRvbmRlIHBhdGg9JXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBlbGltaW5hciBsYSBlbnRyYWRhICVzIGRlIC5naXRtb2R1bGVzIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICJmYWxsw7MgcmVhbGl6YXIgc3RhZ2UgYSBsb3MgLmdpdG1vZHVsZXMgYWN0dWFsaXphZG9zIgorCisjOiBzdWJtb2R1bGUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgImVuIGVsIHN1Ym3Ds2R1bG8gbm8gcG9ibGFkbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJFbCBwYXRyw7NuIGRlIHJ1dGEgJyVzJyBlc3TDoSBlbiBlbCBzdWJtw7NkdWxvICclLipzJyIKKworIzogc3VibW9kdWxlLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBlbnRyeSAnJXMnICglcykgaXMgYSAlcywgbm90IGEgY29tbWl0IgorbXNnc3RyICJlbnRyYWRhIGRlIHN1Ym3Ds2R1bG8gJyVzJyAoJXMpIGVzIHVuICVzLCBubyB1biBjb21taXQiCisKKyM6IHN1Ym1vZHVsZS5jOjExNDcgYnVpbHRpbi9icmFuY2guYzo2ODAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwMTYKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiRmFsbMOzIGFsIHJlc29sdmVyIEhFQUQgY29tbyB1biByZWYgdsOhbGlkby4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiTm8gcHVkbyBhY2NlZGVyIGFsIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTY1MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG5vdCByZWNvZ25pemVkIGFzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiclcycgbm8gcmVjb25vY2lkbyBjb21vIHVuIHJlcG9zaXRvcmlvIGdpdCIKKworIzogc3VibW9kdWxlLmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNvbWVuemFyICdnaXQgc3RhdHVzJyBlbiBlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gZWplY3V0YXIgJ2dpdCBzdGF0dXMnIGVuIGVsIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTgxNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdW5zZXQgY29yZS53b3JrdHJlZSBzZXR0aW5nIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIHF1aXRhciBjb25maWd1cmFjacOzbiBjb3JlLndvcmt0cmVlIGVuIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTkwNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgInN1Ym3Ds2R1bG8gJyVzJyB0aWVuZSB1biDDrW5kaWNlIGNvcnJ1cHRvIgorCisjOiBzdWJtb2R1bGUuYzoxOTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnIGNvdWxkIG5vdCBiZSB1cGRhdGVkLiIKK21zZ3N0ciAiU3VibcOzZHVsbyAnJXMnIG5vIHB1ZG8gc2VyIGFjdHVhbGl6YWRvLiIKKworIzogc3VibW9kdWxlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzIGluc2lkZSBnaXQgZGlyICclLipzJyIKK21zZ3N0ciAic3VibcOzZHVsbyBnaXQgZGlyICclcycgZXN0YSBkZW50cm8gZGUgZ2l0IGRpciAnJS4qcyciCisKKyM6IHN1Ym1vZHVsZS5jOjIwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJyZWxvY2F0ZV9naXRkaXIgcGFyYSBlbCBzdWJtw7NkdWxvICclcycgY29uIG3DoXMgZGUgdW4gw6FyYm9sIGRlIHRyYWJham8gbm8gIgorInNvcG9ydGFkbyIKKworIzogc3VibW9kdWxlLmM6MjA2MCBzdWJtb2R1bGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVzb2x2ZXIgZWwgbm9tYnJlIHBhcmEgZWwgc3VibcOzZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgInJlY2hhemFuZG8gbW92ZXIgJyVzJyBkZW50cm8gZGUgdW4gZGlyZWN0b3JpbyBnaXQgZXhpc3RlbnRlIgorCisjOiBzdWJtb2R1bGUuYzoyMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKyJNaWdyYW5kbyBkaXJlY3RvcmlvIGdpdCBkZSAnJXMlcycgZGVzZGVcbiIKKyInJXMnIGhhY2lhXG4iCisiJyVzJ1xuIgorCisjOiBzdWJtb2R1bGUuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHB1ZG8gcmVjdXJzYXIgZW4gZWwgc3VibcOzZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoyMTk4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICJubyBzZSBwdWRvIGNvbWVuemFyIGxzLWZpbGVzIGVuIC4uIgorCisjOiBzdWJtb2R1bGUuYzoyMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSBkZXZvbHZpw7MgdW4gY8OzZGlnbyAlZCBpbmVzcGVyYWRvIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIgorbXNnc3RyICJpZ25vcmFuZG8gc3VibcOzZHVsbyBzb3NwZWNob3NvOiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjMwMworbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAibm8gc2UgcGVybWl0ZW4gdmFsb3JlcyBuZWdhdGl2b3MgcGFyYSBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICclcycgd2hpY2ggbWF5IGJlIGludGVycHJldGVkIGFzIGEgY29tbWFuZC1saW5lIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKyJpZ25vcmFuZG8gJyVzJyB5YSBxdWUgcHVlZGUgc2VyIGludGVycHJldGFkbyBjb21vIHVuYSBvcGNpw7NuIGRlIGzDrW5lYSBkZSAiCisiY29tYW5kbzogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgInZhbG9yIGludsOhbGlkbyBwYXJhICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIk5vIHNlIHB1ZG8gYWN0dWFsaXphciBsYSBlbnRyYWRhICVzIGRlIC5naXRtb2R1bGVzIgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICJlamVjdWNpw7NuIGRlbCBjb21hbmRvIGRlIHJlbW9scXVlICclcycgZmFsbMOzIgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAidmFsb3IgJyVzJyBkZXNjb25vY2lkbyBwYXJhIGxhIGNsYXZlICclcyciCisKKyM6IHRyYWlsZXIuYzo1MzkgdHJhaWxlci5jOjU0NCBidWlsdGluL3JlbW90ZS5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICJtw6FzIGRlIHVuICVzIgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgInRva2VuIGRlIHJlbW9scXVlIHZhY8OtbyBlbiBlbCB0cmFpbGVyICclLipzJyIKKworIzogdHJhaWxlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBhcmNoaXZvIGRlIGVudHJhZGEgJyVzJyIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBkZXNkZSBzdGRpbiIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBkZWZpbmlyICVzIgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiZWwgYXJjaGl2byAlcyBubyBlcyB1biBhcmNoaXZvIHJlZ3VsYXIiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgImVsIGFyY2hpdm8gJXMgbm8gcHVlZGUgc2VyIGVzY3JpdG8gcG9yIGVsIHVzdWFyaW8iCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgZWwgYXJjaGl2byB0ZW1wb3JhbCIKKworIzogdHJhaWxlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSB0ZW1wb3JhcnkgZmlsZSB0byAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyByZW5vbWJyYXIgZWwgYXJjaGl2byB0ZW1wb3JhbCBhICVzIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgIkNvbmZpZ3VyYXLDoSB1cHN0cmVhbSBkZSAnJXMnIGEgJyVzJyBkZSAnJXMnXG4iCisKKyM6IHRyYW5zcG9ydC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBidW5kbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGVsIGNvbmp1bnRvICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInRyYW5zcG9ydDogb3BjacOzbiBpbnbDoWxpZGEgJyVzJyIKKworIzogdHJhbnNwb3J0LmM6MjY2Cittc2dpZCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscyIKK21zZ3N0ciAidmVyIHByb3RvY29sLnZlcnNpb24gZW4gJ2dpdCBoZWxwIGNvbmZpZycgcGFyYSBtw6FzIGluZm9ybWFjacOzbiIKKworIzogdHJhbnNwb3J0LmM6MjY3Cittc2dpZCAic2VydmVyIG9wdGlvbnMgcmVxdWlyZSBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgbGF0ZXIiCittc2dzdHIgIm9wY2lvbmVzIGRlbCBzZXJ2aWRvciByZXF1aWVyZW4gcHJvdG9jb2xvIHZlcnNpw7NuIDIgbyBwb3N0ZXJpb3IiCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgdmFsb3IgZGUgY29uZmlndXJhY2nDs24gdHJhbnNwb3J0LmNvbG9yLioiCisKKyM6IHRyYW5zcG9ydC5jOjcwNQorbXNnaWQgInN1cHBvcnQgZm9yIHByb3RvY29sIHYyIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgInNvcG9ydGUgcGFyYSBwcm90b2NvbG8gdjIgbm8gaW1wbGVtZW50YWRvIHRvZGF2w61hIgorCisjOiB0cmFuc3BvcnQuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICJ2YWxvciBkZXNjb25vY2lkbyBwYXJhIGNvbmZpZ3VyYWNpw7NuICclcyc6ICVzIgorCisjOiB0cmFuc3BvcnQuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgInRyYW5zcG9ydGUgJyVzJyBubyBwZXJtaXRpZG8iCisKKyM6IHRyYW5zcG9ydC5jOjk0OQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgImdpdC1vdmVyLXJzeW5jIHlhIG5vIGVzIHNvcG9ydGFkbyIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIiIKKyJMYSBzaWd1aWVudGUgcnV0YSBkZSBzdWJtw7NkdWxvIGNvbnRpZW5lIGNhbWJpb3MgcXVlIG5vXG4iCisicHVlZGVuIHNlciBlbmNvbnRyYWRvcyBlbiBuaW5nw7puIHJlbW90bzpcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb3IgZmF2b3IgaW50ZW50YVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisibyBjZCBhIGxhIHJ1dGEgeSB1c2FcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisicGFyYSBoYWNlciB1biBwdXNoIGFsIHJlbW90by5cbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTA1NgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAiQWJvcnRhbmRvLiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGhhY2VyIHB1c2ggYSB0b2RvcyBsb3Mgc3VibcOzZHVsb3MgbmVjZXNhcmlvcyIKKworIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU2Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIm9wZXJhY2nDs24gbm8gc29wb3J0YWRhIHBvciBwcm90b2NvbG8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MSB0cmFuc3BvcnQtaGVscGVyLmM6OTAKK21zZ2lkICJmdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIgorbXNnc3RyICJlc2NyaXR1cmEgdG90YWwgYWwgaGVscGVyIHJlbW90byBmYWxsw7MiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgcmVtb3RlIGhlbHBlciBmb3IgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlbmNvbnRyYXIgaGVscGVyIHJlbW90byBwYXJhICclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNjAgdHJhbnNwb3J0LWhlbHBlci5jOjU3MAorbXNnaWQgImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIgorbXNnc3RyICJubyBzZSBwdWVkZSBkdXBsaWNhciBvdXRwdXQgZGUgZmQgZGVsIGhlbHBlciIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorImNhcGFjaWRhZCBtYW5kYXRvcmlhIGRlc2Nvbm9jaWRhICVzOyBlc3RlIGhlbHBlciByZW1vdG8gcHJvYmFibGVtZW50ZSAiCisibmVjZXNpdGEgdW5hIG51ZXZhIHZlcnNpw7NuIGRlIEdpdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxNworbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAiZXN0ZSBoZWxwZXIgcmVtb3RvIGRlYmVyw61hIGltcGxlbWVudGFyIGNhcGFjaWRhZCByZWZzcGVjIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Mjg0IHRyYW5zcG9ydC1oZWxwZXIuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciCittc2dzdHIgIiVzIGRpam8gaW5lc3BlcmFkYW1lbnRlOiAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIlcyB0YW1iacOpbiBibG9xdWXDsyAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQ5MgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWltcG9ydCIKK21zZ3N0ciAibm8gc2UgcHVkbyBlamVjdXRhciBmYXN0LWltcG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNQorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgImVycm9yIGFsIGVqZWN1dGFyIGZhc3QtaW1wb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTQ0IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGxhIHJlZmVyZW5jaWEgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biByZXNwb25zZSB0byBjb25uZWN0OiAlcyIKK21zZ3N0ciAicmVzcHVlc3RhIHBhcmEgY29uZWN0YXIgZGVzY29ub2NpZGE6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjExCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgImNvbmZpZ3VyYW5kbyBzZXJ2aWNpbyBkZSBydXRhIHJlbW90YSBubyBzb3BvcnRhZG8gcG9yIGVsIHByb3RvY29sbyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxMworbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAicnV0YSBkZSBzZXJ2aWNpbyByZW1vdG8gaW52w6FsaWRhIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY29uZWN0YXIgYWwgc3Vic2VydmljaW8gJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgInNlIGVzcGVyYWJhIG9rL2Vycm9yLCBoZWxwZXIgZGlqbyAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciByZXBvcnRlZCB1bmV4cGVjdGVkIHN0YXR1cyBvZiAlcyIKK21zZ3N0ciAiaGVscGVyIHJlcG9ydMOzIGVzdGFkbyBpbmVzcGVyYWRvIGRlICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iCittc2dzdHIgImhlbHBlciAlcyBubyBzb3BvcnRhIGRyeS1ydW4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgImhlbHBlciAlcyBubyBzb3BvcnRhIC0tc2lnbmVkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICJoZWxwZXIgJXMgbm8gc29wb3J0YSAtLXNpZ25lZD1pZi1hc2tlZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIKK21zZ3N0ciAiaGVscGVyICVzIG5vIHNvcG9ydGEgLS1hdG9taWMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAiaGVscGVyICVzIG5vIHNvcG9ydGEgJ3B1c2gtb3B0aW9uJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2NAorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICJyZW1vdGUtaGVscGVyIG5vIHNvcG9ydGEgcHVzaDsgc2UgbmVjZXNpdGEgcmVmc3BlYyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAnZm9yY2UnIgorbXNnc3RyICJoZWxwZXIgJXMgbm8gc29wb3J0YSAnZm9yY2UnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAibm8gc2UgcHVkbyBlamVjdXRhciBmYXN0LWV4cG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjEKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICJlcnJvciBhbCBlamVjdXRhciBmYXN0LWV4cG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKyJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIgorbXNnc3RyICIiCisiTm8gaGF5IHJlZnMgY29tdW5lcyB5IG5pbmd1bm8gZXNwZWNpZmljYWRvOyBubyBzZSBoYWNlIG5hZGEuXG4iCisiVGFsIHZleiBkZWJlcsOtYXMgZXNwZWNpZmljYXIgdW4gYnJhbmNoIGNvbW8gJ21hc3RlcicuXG4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCByZXNwb25zZSBpbiByZWYgbGlzdDogJXMiCittc2dzdHIgInJlc3B1ZXN0YSBtYWxmb3JtYWRhIGVuIGxpc3RhIGRlIHJlZnM6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgImxlZXIoJXMpIGZhbGzDsyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAiZXNjcmliaXIoJXMpIGZhbGzDsyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCIKK21zZ3N0ciAiaGlsbyAlcyBmYWxsw7MiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgImhpbG8gJXMgZmFsbMOzIGFsIHVuaXJzZTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzcwIHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaW5pY2lhciBlbCBoaWxvIHBhcmEgY29waWFyIGRhdGE6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICJwcm9jZXNvICVzIGZhbGzDsyBhbCBlc3BlcmFyIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAicHJvY2VzbyAlcyBmYWxsw7MiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDMzIHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQyCittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGluaWNpYXIgaGlsbyBwYXJhIGNvcGlhciBkYXRhIgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAib2JqZXRvIGRlIMOhcmJvbCBtdXkgY29ydG8iCisKKyM6IHRyZWUtd2Fsay5jOjM5Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAibW9kbyBtYWwgZm9ybWFkbyBlbiBsYSBlbnRyYWRhIGRlIMOhcmJvbCIKKworIzogdHJlZS13YWxrLmM6NDMKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJub21icmUgZGUgYXJjaGl2byB2YWPDrW8gZW4gbGEgZW50cmFkYSBkZSDDoXJib2wiCisKKyM6IHRyZWUtd2Fsay5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGVuYW1lIGluIHRyZWUgZW50cnkgY29udGFpbnMgYmFja3NsYXNoOiAnJXMnIgorbXNnc3RyICJub21icmUgZGUgYXJjaGl2byBlbiBlbCDDoXJib2wgY29udGllbmUgdW4gYmFja3NsYXNoOiAnJXMnIgorCisjOiB0cmVlLXdhbGsuYzoxMjQKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBmaWxlIgorbXNnc3RyICJhcmNoaXZvIGRlIMOhcmJvbCBtdXkgY29ydG8iCisKKyM6IHVucGFjay10cmVlcy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJMb3MgY2FtYmlvcyBsb2NhbGVzIGRlIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNlcsOhbiBzb2JyZXNjcml0b3MgcG9yICIKKyJjaGVja291dDpcbiIKKyIlJXNQb3IgZmF2b3IgcmVhbGl6YSB1biBjb21taXQgY29uIGxvcyBjYW1iaW9zIG8gdW4gc3Rhc2ggYW50ZXMgZGUgY2FtYmlhciAiCisicmFtYXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxvcyBjYW1iaW9zIGxvY2FsZXMgZGUgbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2Vyw6FuIHNvYnJlZXNjcml0b3MgcG9yICIKKyJjaGVja291dDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkxvcyBjYW1iaW9zIGxvY2FsZXMgZGUgbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2Vyw6FuIHNvYnJlc2NyaXRvcyBhbCAiCisiZnVzaW9uYXI6XG4iCisiJSVzUG9yIGZhdm9yLCBjb25maXJtYSB0dXMgY2FtYmlvcyBvIGFndcOhcmRhbG9zIGFudGVzIGRlIGZ1c2lvbmFyLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMb3MgY2FtYmlvcyBsb2NhbGVzIGRlIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNlcsOhbiBzb2JyZWVzY3JpdG9zIHBvciAiCisibWVyZ2U6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJMb3MgY2FtYmlvcyBsb2NhbGVzIGRlIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNlcsOhbiBzb2JyZXNjcml0b3MgYWwgJXM6XG4iCisiJSVzUG9yIGZhdm9yLCBjb25maXJtYSB0dXMgY2FtYmlvcyBvIGd1w6FyZGFsb3MgYW50ZXMgZGUgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxvcyBjYW1iaW9zIGxvY2FsZXMgZGUgbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2Vyw6FuIHNvYnJlZXNjcml0b3MgcG9yICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyJBbCBhY3R1YWxpemFyIGxvcyBzaWd1aWVudGVzIGRpcmVjdG9yaW9zIHNlIHBlcmRlcsOhbiBsb3MgYXJjaGl2b3Mgc2luICIKKyJzZWd1aW1pZW50byBlbiBlbGxvczpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJlbGltaW5hZG9zIGFsIGFjdHVhbGl6YXIgZWwgw6FyYm9sIGRlIHRyYWJham86XG4iCisiJSVzUG9yIGZhdm9yLCBtdcOpdmVsb3MgbyBlbGltw61uYWxvcyBhbnRlcyBkZSBpbnRlcmNhbWJpYXIgcmFtYXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byBkZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJlbGltaW5hZG9zYWwgYWN0dWFsaXphciBlbCDDoXJib2wgZGUgdHJhYmFqbzpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJlbGltaW5hZG9zIGFsIGZ1c2lvbmFyOlxuIgorIiUlc1BvciBmYXZvciwgbXXDqXZlbG9zIG8gZWxpbcOtbmFsb3MgYW50ZXMgZGUgZnVzaW9uYXIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byBkZSDDoXJib2wgZGUgdHJhYmFqbyBzZXLDoW4gIgorImVsaW1pbmFkb3NhbCBmdXNpb25hcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJlbGltaW5hZG9zIGFsICVzOlxuIgorIiUlc1BvciBmYXZvciwgbXXDqXZlbG9zIG8gZWxpbcOtbmFsb3MgYW50ZXMgZGUgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyBzZXLDoW4gIgorImVsaW1pbmFkb3MgYWwgZWplY3V0YXIgJXM6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiTG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisic29icmVzY3JpdG9zIGFsIGFjdHVhbGl6YXIgZWwgw6FyYm9sIGRlIHRyYWJham86XG4iCisiJSVzUG9yIGZhdm9yLCBtdcOpdmVsb3MgbyBlbGltw61uYWxvcyBhbnRlcyBkZSBpbnRlcmNhbWJpYXIgcmFtYXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiTG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIGRlIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisic29icmVzY3JpdG9zIGFsIGFjdHVhbGl6YXIgZWwgw6FyYm9sIGRlIHRyYWJham86XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyBzZXLDoW4gIgorInNvYnJlc2NyaXRvcyBhbCBmdXNpb25hcjpcbiIKKyIlJXNQb3IgZmF2b3IsIG11w6l2ZWxvcyBvIGVsaW3DrW5hbG9zIGFudGVzIGRlIGZ1c2lvbmFyLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiTG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIGRlIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiAiCisic29icmVzY3JpdG9zIGFsIGZ1c2lvbmFyOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJMb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJzb2JyZXNjcml0b3MgYWwgJXM6XG4iCisiJSVzUG9yIGZhdm9yLCBtdcOpdmVsb3MgbyBlbGltw61uYWxvcyBhbnRlcyBkZSAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIG5vIHJhc3RyZWFkb3MgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gc2Vyw6FuICIKKyJlbGltaW5hZG9zcG9yICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICJFbnRyYWRhICclcycgc2Ugc3VwZXJwb25lIGNvbiAnJXMnLiAgTm8gc2UgcHVlZGVuIHVuaXIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgYWN0dWFsaXphciBlbCBzcGFyc2UgY2hlY2tvdXQ6IGxhcyBzaWd1aWVudGVzIGVudHJhZGFzIG5vIGVzdMOhbiAiCisiYWN0dWFsaXphZGFzOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiTG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3MgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIHNlcsOhbiBzb2JyZXNjcml0b3MgcG9yIGxhICIKKyJhY3R1YWxpemFjacOzbiBzcGFyc2UgY2hlY2tvdXQ6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIGRlbCDDoXJib2wgZGUgdHJhYmFqbyBzZXLDoW4gZWxpbWluYWRvcyBwb3IgbGEgIgorImFjdHVhbGl6YWNpw7NuIHNwYXJzZSBjaGVja291dDpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGFjdHVhbGl6YXIgbGUgc3VibcOzZHVsbzpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nXG4iCittc2dzdHIgIkFib3J0YW5kb1xuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTcKK21zZ2lkICJVcGRhdGluZyBmaWxlcyIKK21zZ3N0ciAiQWN0dWFsaXphbmRvIGFyY2hpdm9zIgorCisjOiB1bnBhY2stdHJlZXMuYzozNDkKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBwYXRocyBoYXZlIGNvbGxpZGVkIChlLmcuIGNhc2Utc2Vuc2l0aXZlIHBhdGhzXG4iCisib24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pIGFuZCBvbmx5IG9uZSBmcm9tIHRoZSBzYW1lXG4iCisiY29sbGlkaW5nIGdyb3VwIGlzIGluIHRoZSB3b3JraW5nIHRyZWU6XG4iCittc2dzdHIgIiIKKyJsYXMgc2lndWllbnRlcyBydXRhcyBoYW4gY29saXNpb25hZG8gKHAuZS4gcnV0YXMgY29uIGNhc2Utc2Vuc2l0aXZlXG4iCisiZW4gdW4gZmlsZXN5c3RlbSBjYXNlLWluc2Vuc2l0aXZlKSB5IHNvbG8gdW5hIGRlbCBncnVwb1xuIgorImNvbGlzaW9uYW5kbyBlc3TDoSBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbzpcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0MQorbXNnaWQgIlVwZGF0aW5nIGluZGV4IGZsYWdzIgorbXNnc3RyICJBY3R1YWxpemFuZG8gZmxhZ3MgZGVsIGluZGV4IgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJub21icmUgZGUgVVJMIGludsOhbGlkbyBvwqBzdWZpam8gJzovLycgZmFsdGFudGUiCisKKyM6IHVybG1hdGNoLmM6MTg3IHVybG1hdGNoLmM6MzQ2IHVybG1hdGNoLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAic2VjdWVuY2lhIGRlIGVzY2FwZSAlWFggaW52w6FsaWRhIgorCisjOiB1cmxtYXRjaC5jOjIxNQorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICJmYWx0YSBob3N0IHkgZWwgZXNxdWVtYSBubyBlcyAnZmlsZTonIgorCisjOiB1cmxtYXRjaC5jOjIzMgorbXNnaWQgImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiCittc2dzdHIgInVuICdhcmNoaXZvOicgVVJMIHB1ZWRlIG5vIHRlbmVyIHVuIG7Dum1lcm8gZGUgcHVlcnRvIgorCisjOiB1cmxtYXRjaC5jOjI0NworbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgImNhcsOhY3RlciBpbnbDoWxpZG8gZW4gZWwgbm9tYnJlIGRlbCBob3N0IgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm51bWVybyBkZSBwdWVydG/CoGludsOhbGlkbyIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICJzZWdtZW50byBkZSBydXRhICcuLicgaW52w6FsaWRvIgorCisjOiB3b3JrdHJlZS5jOjI1OCBidWlsdGluL2FtLmM6MjA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgbGVlciAnJXMnIgorCisjOiB3b3JrdHJlZS5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyInJXMnIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIHByaW5jaXBhbCBubyBlcyBlbCBkaXJlY3RvcmlvIGRlbCByZXBvc2l0b3JpbyIKKworIzogd29ya3RyZWUuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICIiCisiYXJjaGl2byAnJXMnIG5vIGNvbnRpZW5lIHVuYSBydXRhIGFic29sdXRhIGEgbGEgdWJpY2FjacOzbiBkZWwgw6FyYm9sIGRlICIKKyJ0cmFiYWpvIgorCisjOiB3b3JrdHJlZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIG5vIGV4aXN0ZSIKKworIzogd29ya3RyZWUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIiclcycgbm8gZXMgdW4gYXJjaGl2byAuZ2l0LCBjw7NkaWdvIGRlIGVycm9yICVkIgorCisjOiB3b3JrdHJlZS5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyBubyBhcHVudGEgZGUgdnVlbHRhIGEgJyVzJyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgJyVzJyBwYXJhIGxlY3R1cmEgeSBlc2NyaXR1cmEiCisKKyM6IHdyYXBwZXIuYzozODcgd3JhcHBlci5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWNjZWRlciAnJXMnIgorCisjOiB3cmFwcGVyLmM6NTk2Cittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJubyBlcyBwb3NpYmxlIG9idGVuZXIgZWwgZGlyZWN0b3JpbyBkZSB0cmFiYWpvIGFjdHVhbCIKKworIzogd3Qtc3RhdHVzLmM6MTU4Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICJSdXRhcyBubyBmdXNpb25hZGFzOiIKKworIzogd3Qtc3RhdHVzLmM6MTg3IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGFyY2hpdm8+Li4uXCIgcGFyYSBzYWNhciBkZWwgw6FyZWEgZGUgc3RhZ2UpIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlc3RvcmUgLS1zb3VyY2U9JXMgLS1zdGFnZWQgPGFyY2hpdm8+Li4uXCIgcGFyYSBzYWNhciBkZWwgw6FyZWEgIgorImRlIHN0YWdlKSIKKworIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHJtIC0tY2FjaGVkIDxhcmNoaXZvPi4uLlwiIHBhcmEgc2FjYXIgZGVsIMOhcmVhIGRlIHN0YWdlKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYWRkIDxhcmNoaXZvPi4uLlwiIHBhcmEgbWFyY2FyIHVuYSByZXNvbHVjacOzbikiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgYWRkL3JtIDxhcmNoaXZvPi4uLlwiIGNvbW8gdW5hIGZvcm1hIGFwcm9waWFkYSBkZSBtYXJjYXIgbGEgIgorInJlc29sdWNpw7NuKSIKKworIzogd3Qtc3RhdHVzLmM6MjAxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzYSBcImdpdCBybSA8ZmlsZT4uLi5cIiBwYXJhIG1hcmNhciBsYSByZXNvbHVjacOzbikiCisKKyM6IHd0LXN0YXR1cy5jOjIxMSB3dC1zdGF0dXMuYzoxMDc0Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJDYW1iaW9zIGEgc2VyIGNvbmZpcm1hZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIkNhbWJpb3Mgbm8gcmFzdHJlYWRvcyBwYXJhIGVsIGNvbW1pdDoiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IGFkZCA8YXJjaGl2bz4uLi5cIiBwYXJhIGFjdHVhbGl6YXIgbG8gcXVlIHNlcsOhIGNvbmZpcm1hZG8pIgorCisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCBhZGQvcm0gPGFyY2hpdm8+Li4uXCIgcGFyYSBhY3R1YWxpemFyIGEgbG8gcXVlIHNlIGxlIHZhIGEgaGFjZXIgIgorImNvbW1pdCkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlc3RvcmUgPGFyY2hpdm8+Li4uXCIgcGFyYSBkZXNjYXJ0YXIgbG9zIGNhbWJpb3MgZW4gZWwgIgorImRpcmVjdG9yaW8gZGUgdHJhYmFqbykiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGNvbmZpcm1hciBvIGRlc2NhcnRhciBlbCBjb250ZW5pZG8gc2luIHNlZ3VpbWllbnRvIG8gbW9kaWZpY2FkbyBlbiBsb3MgIgorInN1Yi1tw7NkdWxvcykiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCAlcyA8YXJjaGl2bz4uLi5cIiBwYXJhIGluY2x1aXJsbyBhIGxvIHF1ZSBzZSBzZXLDoSBjb25maXJtYWRvKSIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiYW1ib3MgYm9ycmFkb3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNzAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgImFncmVnYWRvIHBvciBub3NvdHJvczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgImJvcnJhZG9zIHBvciBlbGxvczoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJhZ3JlZ2FkbyBwb3IgZWxsb3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiYm9ycmFkbyBwb3Igbm9zb3Ryb3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAiYW1ib3MgYWdyZWdhZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjgwCittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgImFtYm9zIG1vZGlmaWNhZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJudWV2byBhcmNoaXZvOiIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAiY29waWFkbzoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICJib3JyYWRvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk2Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmljYWRvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgInJlbm9tYnJhZG86IgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAiY2FtYmlvIGRlIHRpcG86IgorCisjOiB3dC1zdGF0dXMuYzozMDIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAiZGVzY29ub2NpZG86IgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgImRlcy1mdXNpb25hZG86IgorCisjOiB3dC1zdGF0dXMuYzozODQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJudWV2b3MgY29tbWl0cywgIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlbmlkbyBtb2RpZmljYWRvLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4OAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlbmlkbyBubyByYXN0cmVhZG8sICIKKworIzogd3Qtc3RhdHVzLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gIlR1IHN0YXNoIGFjdHVhbG1lbnRlIHRpZW5lICVkIGVudHJhZGEiCittc2dzdHJbMV0gIlR1IHN0YXNoIGFjdHVhbG1lbnRlIHRpZW5lICVkIGVudHJhZGFzIgorCisjOiB3dC1zdGF0dXMuYzo5MzgKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiU3VibcOzZHVsb3MgY2FtYmlhZG9zIHBlcm8gbm8gYWN0dWFsaXphZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6OTQwCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiU3VibcOzZHVsb3MgY2FtYmlhZG9zIGxpc3RvcyBwYXJhIHJlYWxpemFyIGNvbW1pdDoiCisKKyM6IHd0LXN0YXR1cy5jOjEwMjIKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICIiCisiTm8gbW9kaWZpcXVlIG8gYm9ycmUgbGEgbMOtbmVhIGRlIGVuY2ltYS5cbiIKKyJUb2RvIGxvIHF1ZSBlc3RlIHBvciBhYmFqbyBzZXLDoSBlbGltaW5hZG8uIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUb23DsyAlLjJmIHNlZ3VuZG9zIHBhcmEgY2FsY3VsYXIgbG9zIHZhbG9yZXMgYW50ZXJpb3IvcG9zdGVyaW9yIGRlbCBicmFuY2guXG4iCisiUHVlZGVzIHVzYXIgJy0tbm8tYWhlYWQtYmVoaW5kJyBwYXJhIGV2aXRhciBlc3RvLlxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJUaWVuZXMgcnV0YXMgbm8gZnVzaW9uYWRhcy4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIChhcnJlZ2xhIGxvcyBjb25mbGljdG9zIHkgY29ycmUgXCJnaXQgY29tbWl0XCIiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAgKHVzYSBcImdpdCBtZXJnZSAtLWFib3J0XCIgcGFyYSBhYm9ydGFyIGxhIGZ1c2lvbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJUb2RvcyBsb3MgY29uZmxpY3RvcyByZXN1ZWx0b3MgcGVybyBzaWd1ZXMgZnVzaW9uYW5kby4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgY29tbWl0XCIgcGFyYSBjb25jbHVpciBsYSBmdXNpw7NuKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiRXN0w6FzIGVuIG1lZGlvIGRlIHVuYSBzZXNpw7NuIGFtLiIKKworIzogd3Qtc3RhdHVzLmM6MTE2OAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiRWwgcGFyY2hlIGFjdHVhbCBlc3TDoSB2YWPDrW8uIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYXJyZWdsYSBsb3MgY29uZmxpY3RvcyB5IGx1ZWdvIGNvcnJlIFwiZ2l0IGFtIC0tY29udGludWVcIiIKKworIzogd3Qtc3RhdHVzLmM6MTE3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYW0gLS1za2lwXCIgcGFyYSBzYWx0YXIgZXN0ZSBwYXJjaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYW0gLS1hYm9ydFwiIHBhcmEgcmVzdGF1cmFyIGxhIHJhbWEgb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzA5Cittc2dpZCAiZ2l0LXJlYmFzZS10b2RvIGlzIG1pc3NpbmcuIgorbXNnc3RyICJnaXQtcmViYXNlLXRvZG8gbm8gZXN0w6EgcHJlc2VudGUuIgorCisjOiB3dC1zdGF0dXMuYzoxMzExCittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIk5vIHNlIHJlYWxpemFyb24gbG9zIGNvbWFuZG9zLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICJFbCDDumx0aW1vIGNvbWFuZG8gcmVhbGl6YWRvICglZCBjb21hbmRvIHJlYWxpemFkbyk6IgorbXNnc3RyWzFdICJMb3Mgw7psdGltb3MgY29tYW5kb3MgcmVhbGl6YWRvcyAoJWQgY29tYW5kb3MgcmVhbGl6YWRvcyk6IgorCisjOiB3dC1zdGF0dXMuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgICh2ZXIgbcOhcyBlbiBlbCBhcmNoaXZvICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIk5vIHF1ZWRhbiBtw6FzIGNvbWFuZG9zLiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICJTaWd1aWVudGUgY29tYW5kbyBhIHJlYWxpemFywqAoJWQgY29tYW5kbyByZXN0YW50ZSk6IgorbXNnc3RyWzFdICJTaWd1aWVudGUgY29tYW5kb3MgYSByZWFsaXphciAoJWQgY29tYW5kb3MgZmFsdGFudGVzKToiCisKKyM6IHd0LXN0YXR1cy5jOjEzNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiBwYXJhIHZlciB5IGVkaXRhcikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIkVzdMOhcyBhcGxpY2FuZG8gdW4gcmViYXNlIGRlIGxhIHJhbWEgJyVzJyBlbiAnJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJFc3TDoXMgYXBsaWNhbmRvIHVuIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoY29ycmlnZSBsb3MgY29uZmxpY3RvcyB5IGVqZWN1dGEgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCByZWJhc2UgLS1za2lwXCIgcGFyYSBvbWl0aXIgZXN0ZSBwYXJjaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxMzc1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiBwYXJhIHZvbHZlciBhIHR1IHJhbWEgb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICh0b2RvcyBsb3MgY29uZmxpY3RvcyBjb3JyZWdpZG9zOiBlamVjdXRhIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJFc3TDoXMgZGl2aWRpZW5kbyB1biBjb21taXQgbWllbnRyYXMgYXBsaWNhcyB1biByZWJhc2UgZGUgbGEgcmFtYSAnJXMnIGVuICIKKyInJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJFc3TDoXMgZGl2aWRpZW5kbyB1biBjb21taXQgZHVyYW50ZSB1biByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChVbmEgdmV6IHF1ZSB0dSBkaXJlY3RvcmlvIGRlIHRyYWJham8gZXN0w6kgbGltcGlvLCBlamVjdXRhIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiRXN0w6FzIGVkaXRhbmRvIHVuIGNvbW1pdCBtaWVudHJhcyBzZSBhcGxpY2EgdW4gcmViYXNlIGRlIGxhIHJhbWEgJyVzJyBlbiAiCisiJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkVzdMOhcyBlZGl0YW5kbyB1biBjb21taXQgZHVyYW50ZSB1biByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgcGFyYSBlbm1lbmRhciBlbCBjb21taXQgYWN0dWFsKSIKKworIzogd3Qtc3RhdHVzLmM6MTQwOAorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHVuYSB2ZXogcXVlIGVzdMOpcyBzYXRpc2ZlY2hvIGNvbiB0dXMgIgorImNhbWJpb3MpIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgZW4gcHJvZ3Jlc28gYWN0dWFsbWVudGUuIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkVzdMOhcyByZWFsaXphbmRvIHVuIGNoZXJyeS1waWNraW5nIGVuIGVsIGNvbW1pdCAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MjkKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoY29ycmlnZSBsb3MgY29uZmxpY3RvcyB5IGVqZWN1dGEgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzMgorbXNnaWQgIiAgKHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChlamVjdXRhIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBwYXJhIGNvbnRpbnVhcikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHRvZG9zIGxvcyBjb25mbGljdG9zIGNvcnJlZ2lkb3M6IGVqZWN1dGEgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgcGFyYSBzYWx0YXIgZXN0ZSBwYXJjaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM5Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHBhcmEgY2FuY2VsYXIgbGEgb3BlcmFjacOzbiBjaGVycnktcGljaykiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDkKK21zZ2lkICJSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiUmV2aWVydGUgZWwgZXN0YWRvIGVuIHByb2dyZXNvIGFjdHVhbC4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkVzdMOhcyByZXZpcnRpZW5kbyBlbCBjb21taXQgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChjb3JyaWdlIGxvcyBjb25mbGljdG9zIHkgZWplY3V0YSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2MQorbXNnaWQgIiAgKHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAoZWplY3V0YSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHBhcmEgY29udGludWFyKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAodG9kb3MgbG9zIGNvbmZsaWN0b3MgY29ycmVnaWRvczogZWplY3V0YSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHJldmVydCAtLXNraXBcIiBwYXJhIG9taXRpciBlc3RlIHBhcmNoZSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiBwYXJhIGNhbmNlbGFyIGxhIG9wZXJhY2nDs24gZGUgcmV2ZXJ0aXIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiRXN0w6FzIGFwbGljYW5kbyB1biBiaXNlY3QsIGNvbWVuemFuZG8gZW4gbGEgcmFtYSAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4MgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIkVzdMOhcyBhcGxpY2FuZG8gdW4gYmlzZWN0LiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGJpc2VjdCByZXNldFwiIHBhcmEgdm9sdmVyIGEgbGEgcmFtYSBvcmlnaW5hbCkiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJFbiBsYSByYW1hICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzZSBpbnRlcmFjdGl2byBlbiBwcm9ncmVzbzsgZW4gIgorCisjOiB3dC1zdGF0dXMuYzoxNzAzCittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNlIGVuIHByb2dyZXNvOyBlbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJBY3R1YWxtZW50ZSBubyBlc3TDoXMgZW4gbmluZ3VuYSByYW1hLiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJDb25maXJtYWNpw7NuIGluaWNpYWwiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiTm8gaGF5IGNvbW1pdHMgdG9kYXbDrWEiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIkFyY2hpdm9zIGlnbm9yYWRvcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiVG9tw7MgJS4yZiBzZWd1bmRvcyBlbnVtZXJhciBsb3MgYXJjaGl2b3Mgbm8gcmFzdHJlYWRvcy4gJ3N0YXR1cyAtdW5vJ1xuIgorInB1ZWRlIGFjZWxlcmFybG8sIHBlcm8gdGllbmVzIHF1ZSBzZXIgY3VpZGFkb3NvIGRlIG5vIG9sdmlkYXIgYWdyZWdhclxuIgorIm51ZXZvcyBhcmNoaXZvcyB0w7ogbWlzbW8gKHZlYSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIkFyY2hpdm9zIG5vIHJhc3RyZWFkb3Mgbm8gc29uIG1vc3RyYWRvcyAlcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAodXNhIGxhIG9wY2nDs24gLXUgcGFyYSBtb3N0cmFyIGxvcyBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8pIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiU2luIGNhbWJpb3MiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJzaW4gY2FtYmlvcyBhZ3JlZ2Fkb3MgYWwgY29tbWl0ICh1c2EgXCJnaXQgYWRkXCIgeS9vIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIm5vIHNlIGFncmVnYXJvbiBjYW1iaW9zIGFsIGNvbW1pdFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJubyBoYXkgbmFkYSBhZ3JlZ2FkbyBhbCBjb21taXQgcGVybyBoYXkgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIHByZXNlbnRlcyAiCisiKHVzYSBcImdpdCBhZGRcIiBwYXJhIGhhY2VybGVzIHNlZ3VpbWllbnRvKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICIiCisibm8gaGF5IG5hZGEgYWdyZWdhZG8gcGFyYSBjb25maXJtYXIsIHBlcm8gaGF5IGFyY2hpdm9zIHNpbiBzZWd1aW1pZW50byAiCisicHJlc2VudGVzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyJubyBoYXkgbmFkYSBwYXJhIGNvbmZpcm1hciAoY3JlYS9jb3BpYSBhcmNoaXZvcyB5IHVzYSBcImdpdCBhZGRcIiBwYXJhICIKKyJoYWNlcmxlcyBzZWd1aW1pZW50bylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIm5hZGEgcGFyYSBoYWNlciBjb21taXRcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisibmFkYSBwYXJhIGhhY2VyIGNvbW1pdCAodXNhIC11IHBhcmEgbW9zdHJhciBsb3MgYXJjaGl2b3Mgbm8gcmFzdHJlYWRvcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgIm5hZGEgcGFyYSBoYWNlciBjb21taXQsIGVsIMOhcmJvbCBkZSB0cmFiYWpvIGVzdMOhIGxpbXBpb1xuIgorCisjOiB3dC1zdGF0dXMuYzoxOTA1Cittc2dpZCAiTm8gY29tbWl0cyB5ZXQgb24gIgorbXNnc3RyICJObyBoYXkgY29tbWl0cyB0b2RhdsOtYSBlbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE5MDkKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEIChzaW4gcmFtYSkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDAKK21zZ2lkICJkaWZmZXJlbnQiCittc2dzdHIgImRpZmVyZW50ZSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MiB3dC1zdGF0dXMuYzoxOTUwCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiZGV0csOhcyAiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDUgd3Qtc3RhdHVzLmM6MTk0OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiYWRlbGFudGUgIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGFjdGlvbiBpcyBlLmcuICJwdWxsIHdpdGggcmViYXNlIgorIzogd3Qtc3RhdHVzLmM6MjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJubyBzZSBwdWVkZSAlczogVGllbmVzIGNhbWJpb3Mgc2luIG1hcmNhci4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzYKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgImFkaWNpb25hbG1lbnRlLCB0dSDDrW5kaWNlIGNvbnRpZW5lIGNhbWJpb3MgcXVlIG5vIGVzdMOhbiBlbiB1biBjb21taXQuIgorCisjOiB3dC1zdGF0dXMuYzoyNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgJXM6IFR1IMOtbmRpY2UgY29udGllbmUgY2FtYmlvcyBxdWUgbm8gZXN0w6FuIGVuIHVuIGNvbW1pdC4iCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1OCBidWlsdGluL2Nsb25lLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGRlc3ZpbmN1bGFyICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPG9wY2nDs24+XSBbLS1dIDxlc3BlY2lmaWNhY2nDs24tZGUtcnV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiZGlmZiBzdGF0dXMgaW5lc3BlcmFkbyAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo5MiBidWlsdGluL2NvbW1pdC5jOjI4OAorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsbMOzIGxhIGFjdHVhbGl6YWNpw7NuIGRlIGNhcnBldGFzIgorCisjOiBidWlsdGluL2FkZC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJlbGltaW5hciAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc3Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIkNhbWJpb3MgZnVlcmEgZGVsIMOhcmVhIGRlIHN0YWdlIHRyYXMgcmVmcmVzY2FyIGVsIMOtbmRpY2U6IgorCisjOiBidWlsdGluL2FkZC5jOjI1MiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiTm8gc2UgcHVkbyBsZWVyIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJObyBzZSBwdWRvIGFicmlyICclcycgcGFyYSBlc2NyaXR1cmEuIgorCisjOiBidWlsdGluL2FkZC5jOjI2NworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZXNjcmliaXIgZWwgcGFyY2hlIgorCisjOiBidWlsdGluL2FkZC5jOjI3MAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICJmYWxsw7MgbGEgZWRpY2nDs24gZGVsIHBhcmNoZSIKKworIzogYnVpbHRpbi9hZGQuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBkZWZpbmlyICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc1Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJQYXJjaGUgdmFjw61vLiBBYm9ydGFkby4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIGFwbGljYXIgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyODgKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKyJMYXMgc2lndWllbnRlcyBydXRhcyBzb24gaWdub3JhZGFzIHBvciB1bm8gZGUgdHVzIGFyY2hpdm9zIC5naXRpZ25vcmU6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA4IGJ1aWx0aW4vY2xlYW4uYzo5MTAgYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL212LmM6MTI0CisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU2IGJ1aWx0aW4vcHVsbC5jOjIyMyBidWlsdGluL3B1c2guYzo1NDgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM0NCBidWlsdGluL3JtLmM6MjQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAiZHJ5IHJ1biAoIGVqZWN1Y2nDs24gZW4gc2VjbykiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzExCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAic2VsZWNjacOzbiBpbnRlcmFjdGl2YSIKKworIzogYnVpbHRpbi9hZGQuYzozMTIgYnVpbHRpbi9jaGVja291dC5jOjE0ODIgYnVpbHRpbi9yZXNldC5jOjMwNworbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJlbGVnaXIgaHVua3MgZGUgZm9ybWEgaW50ZXJhY3RpdmEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEzCittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICJlZGl0YXIgZGlmZiBhY3R1YWwgeSBhcGxpY2FyIgorCisjOiBidWlsdGluL2FkZC5jOjMxNAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAicGVybWl0aXIgYWdyZWdhciBjYXNvIGNvbnRyYXJpbyBpZ25vcmFyIGFyY2hpdm9zIgorCisjOiBidWlsdGluL2FkZC5jOjMxNQorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICJhY3R1YWxpemFkbyBsYXMgY2FycGV0YXMgcmFzdHJlYWRhcyIKKworIzogYnVpbHRpbi9hZGQuYzozMTYKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgInJlbm9ybWFsaXphciBFT0wgZGUgbG9zIGFyY2hpdm9zIHJhc3RyZWFkb3MgKGltcGxpY2EgLXUpIgorCisjOiBidWlsdGluL2FkZC5jOjMxNworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiZ3JhYmFyIHNvbG8gZWwgaGVjaG8gZGUgcXVlIGxhIHJ1dGEgc2Vyw6EgYWdyZWdhZGEgZGVzcHXDqXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE4Cittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJhZ3JlZ2FyIGxvcyBjYW1iaW9zIGRlIHRvZGFzIGxhcyBjYXJwZXRhcyBjb24geSBzaW4gc2VndWltaWVudG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmFyIHJ1dGFzIGVsaW1pbmFkYXMgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gKGxvIG1pc21vIHF1ZSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIzCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJubyBhZ3JlZ2FyLCBzb2xvIGFjdHVhbGl6YXIgZWwgw61uZGljZSIKKworIzogYnVpbHRpbi9hZGQuYzozMjQKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICJzYWx0YXIgbGFzIGNhcnBldGFzIHF1ZSBubyBwdWVkZW4gc2VyIGFncmVnYWRhcyBhIGNhdXNhIGRlIGVycm9yZXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICJjb21wcm9iYXIgc2kgLSBpbmNsdXNvIGxvcyBhcmNoaXZvcyBxdWUgZmFsdGFuIC0gc2UgaWdub3JhbiBlbiBkcnkgcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjMyNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDQKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAic29icmVzY3JpYmlyIGVsIGJpdCBlamVjdXRhYmxlIGRlIGxvcyBhcmNoaXZvcyBsaXN0YWRvcyIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgImF2aXNhciBjdWFuZG8gc2UgYWdyZWdhIHVuIHJlcG9zaXRvcmlvIGluY3J1c3RhZG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiU2UgaGEgYWdyZWdhZG8gb3RybyByZXBvc2l0b3JpbyBkZSBnaXQgZGVudHJvIGRlbCByZXBvc2l0b3JpbyBhY3R1YWwuXG4iCisiQ2xvbmVzIGRlbCByZXBvc2l0b3JpbyBleHRlcmlvciBubyB0ZW5kcsOhbiBlbCBjb250ZW5pZG8gZGVsIFxuIgorInJlcG9zaXRvcmlvIGVtYmViaWRvIHkgbm8gc2FicsOhbiBjb21vIG9idGVuZXJsYS5cbiIKKyJTaSBxdWVyw61hcyBhZ3JlZ2FyIHVuIHN1Ym3Ds2R1bG8sIHVzYTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiU2kgc2UgYWdyZWdvIGVzdGEgcnV0YSBwb3IgZXJyb3IsIHB1ZWRlcyBlbGltaW5hciBkZXNkZSBlbCDDrW5kaWNlIFxuIgorInVzYW5kbzpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlZlYSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIHBhcmEgbcOhcyBpbmZvcm1hY2nDs24uIgorCisjOiBidWlsdGluL2FkZC5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmcgZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJhZ3JlZ2FuZG8gcmVwb3NpdG9yaW8gZW1iZWJpZG86ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJVc2EgLWYgc2kgcmVhbG1lbnRlIHF1aWVyZXMgYWdyZWdhcmxvcy5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0MDAKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJmYWxsw7MgYWwgYWdyZWdhciBhcmNoaXZvcyIKKworIzogYnVpbHRpbi9hZGQuYzo0MjggYnVpbHRpbi9jb21taXQuYzozNDgKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlLy0tcGF0Y2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzIGluY29tcGF0aWJsZSBjb24gLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjQzNAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgZXMgaW5jb21wYXRpYmxlIGNvbiAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ2Cittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIHkgLXUgc29uIG11dHVhbWVudGUgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9hZGQuYzo0NDkKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICJPcGNpw7NuIC0taWdub3JlLW1pc3Npbmcgc29sbyBwdWVkZSBzZXIgdXNhZGEganVudG8gYSAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAiRWwgcGFyw6FtZXRybyAnJXMnIHBhcmEgLS1jaG1vZCBkZWJlIHNlciAteCDDsyAreCIKKworIzogYnVpbHRpbi9hZGQuYzo0NzEgYnVpbHRpbi9jaGVja291dC5jOjE2NDggYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzIGluY29tcGF0aWJsZSBjb24gYXJndW1lbnRvcyBkZSBwYXRoc3BlYyIKKworIzogYnVpbHRpbi9hZGQuYzo0NzggYnVpbHRpbi9jaGVja291dC5jOjE2NjAgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpZXJlIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiTmFkYSBlc3BlY2lmaWNhZG8sIG5hZGEgYWdyZWdhZG8uXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICLCv1RhbCB2ZXogcXVpc28gZGVjaXIgJ2dpdCBhZGQgLic/XG4iCisKKyM6IGJ1aWx0aW4vYW0uYzozNDcKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbmFsaXphciBlbCBzY3JpcHQgZGVsIGF1dG9yIgorCisjOiBidWlsdGluL2FtLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiclcycgZnVlIGJvcnJhZG8gcG9yIGVsIGhvb2sgZGUgYXBwbHlwYXRjaC1tc2ciCisKKyM6IGJ1aWx0aW4vYW0uYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJMw61uZWEgbWFsIGZvcm1hZGE6ICclcycuIgorCisjOiBidWlsdGluL2FtLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJGYWxsw7MgYWwgY29waWFyIG5vdGFzIGRlICclcycgYSAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NTM3Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJmYWxsIGRlIGZzZWVrIgorCisjOiBidWlsdGluL2FtLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyIGVsIHBhcmNoZSAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NzkwCittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIlNvbG8gdW4gcGFyY2hlIFN0R0lUIHB1ZWRlIHNlciBhcGxpY2FkbyBkZSB1bmEgdmV6IgorCisjOiBidWlsdGluL2FtLmM6ODM4Cittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgInRpbWVzdGFtcCBpbnbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vYW0uYzo4NDMgYnVpbHRpbi9hbS5jOjg1NQorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICJsw61uZWEgRGF0ZSBpbnbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTAKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAib2Zmc2V0IGRlIHpvbmEgaG9yYXJpYSBpbnbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDMKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIkZhbGzDsyBhbCBkZXRlY3RhciBlbCBmb3JtYXRvIGRlbCBwYXJjaGUuIgorCisjOiBidWlsdGluL2FtLmM6OTQ4IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGVsIGRpcmVjdG9yaW8gJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjk1MworbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiRmFsbMOzIGFsIGRpdmlkaXIgcGFyY2hlcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICJDdWFuZG8gaGF5YXMgcmVzdWVsdG8gZXN0ZSBwcm9ibGVtYSwgZWplY3V0YSBcIiVzIC0tY29udGludWVcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiU2kgcHJlZmllcmVzIHNhbHRhciBlc3RlIHBhcmNoZSwgZWplY3V0YSBcIiVzIC0tc2tpcFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICIiCisiUGFyYSByZXN0YXVyYXIgbGEgcmFtYSBvcmlnaW5hbCB5IGRldGVuZXIgZWwgcGFyY2hhZG8sIGVqZWN1dGFyIFwiJXMgLS1hYm9ydCIKKyJcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTY5Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIiIKKyJQYXJjaGUgbWFuZGFkbyBjb24gZm9ybWF0bz1mbG93ZWQ7IGVzcGFjaW9zIGFsIGZpbmFsIGRlIGxhcyBsw61uZWFzIHRhbCB2ZXogIgorImRlc2FwYXJlemNhbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTk3Cittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJFbCBwYXJjaGUgZXN0w6EgdmFjw61vLiIKKworIzogYnVpbHRpbi9hbS5jOjEyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhdXRob3IgbGluZSBpbiBjb21taXQgJXMiCittc2dzdHIgImZhbHRhIGzDrW5lYSBhdXRvciBlbiBjb21taXQgJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJS4qcyIKK21zZ3N0ciAic2FuZ3LDrWEgbm8gdsOhbGlkYTogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiUmVwb3NpdG9yaW8gY2FyZWNlIGRlIGxvcyBibG9icyBuZWNlc2FyaW9zIHBhcmEgcmV0cm9jZWRlciBlbiB1bmEgZnVzacOzbiBkZSAiCisiMy12w61hcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiVXNhbmRvIGxhIGluZm9ybWFjacOzbiBkZWwgw61uZGljZSBwYXJhIHJlY29uc3RydWlyIHVuIMOhcmJvbCBiYXNlLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTUwNQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyLCv0VkaXRhc3RlIGVsIHBhcmNoZSBhIG1hbm8/XG4iCisiTm8gYXBsaWNhIGEgYmxvYnMgZ3VhcmRhZG9zIGVuIHN1IMOtbmRpY2UuIgorCisjOiBidWlsdGluL2FtLmM6MTUxMQorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiUmV0cm9jZWRpZW5kbyBwYXJhIHBhcmNoYXIgYmFzZSB5IGZ1c2nDs24gZGUgMy12w61hcy4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MzcKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICJGYWxsw7MgYWwgZnVzaW9uYXIgZW4gbG9zIGNhbWJpb3MuIgorCisjOiBidWlsdGluL2FtLmM6MTU2OQorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgImFwbGljYW5kbyBhIHVuIGhpc3RvcmlhbCB2YWPDrW8iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE2IGJ1aWx0aW4vYW0uYzoxNjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY29udGludWFyOiAlcyBubyBleGlzdGUuIgorCisjOiBidWlsdGluL2FtLmM6MTYzOAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiQ3VlcnBvIGRlIGNvbW1pdCBlczoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIsK/QXBsaWNhcj8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorCisjOiBidWlsdGluL2FtLmM6MTY5NSBidWlsdGluL2NvbW1pdC5jOjM5NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGVzY3JpYmlyIGVuIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogYnVpbHRpbi9hbS5jOjE2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICLDjW5kaWNlIHN1Y2lvOiBubyBzZSBwdWVkZSBhcGxpY2FyIHBhcmNoZXMgKHN1Y2lvOiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzM5IGJ1aWx0aW4vYW0uYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICJBcGxpY2FuZG86ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzU2Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJTaW4gY2FtYmlvcyAtLSBwYXJjaGUgeWEgYXBsaWNhZG8uIgorCisjOiBidWlsdGluL2FtLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiRWwgcGFyY2hlIGZhbGzDsyBlbiAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2NgorbXNnaWQgIlVzZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2gnIHBhcmEgdmVyIGVsIHBhcmNoZSBmYWxsaWRvIgorCisjOiBidWlsdGluL2FtLmM6MTgxMAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIlNpbiBjYW1iaW9zIC0gwr9vbHZpZGFzdGUgdXNhciAnZ2l0IGFkZCc/XG4iCisiU2kgbm8gaGF5IG5hZGEgZW4gZWwgw6FyZWEgZGUgc3RhZ2UsIGxhcyBwb3NpYmlsaWRhZCBlcyBxdWUgYWxnbyBtYXNcbiIKKyJ5YSBoYXlhIGludHJvZHVjaWRvIGVsIG1pc21vIGNhbWJpbzsgdGFsIHZleiBxdWllcmFzIG9taXRpciBlc3RlIHBhcmNoZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODE3Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisiVG9kYXbDrWEgdGllbmVzIHJ1dGFzIHNpbiBmdXNpb25hciBlbiB0dSDDrW5kaWNlLlxuIgorIkRlYmVzIHJlYWxpemFyICdnaXQgYWRkJyBjYWRhIGFyY2hpdm8gY29uIGNvbmZsaWN0b3MgcmVzdWVsdG9zIHkgbWFyY2FybG9zICIKKyJjb21vIHRhbC5cbiIKKyJTZSBwdWVkZSBlamVjdXRhciBgZ2l0IHJtYCBlbiBlbCBhcmNoaXZvIHBhcmEgYWNlcHRhciBcImJvcnJhZG8gcG9yIGVsbG9zXCIgIgorImVuIMOpbC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTI0IGJ1aWx0aW4vYW0uYzoxOTI4IGJ1aWx0aW4vYW0uYzoxOTQwIGJ1aWx0aW4vcmVzZXQuYzozNDYKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBhbmFsaXphciBlbCBvYmpldG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTc2Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJmYWxsw7MgYWwgbGltcGlhciBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL2FtLmM6MjAyMAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiUGFyZWNlIGhhYmVyIG1vdmlkbyBIRUFEIGRlc2RlIGVsIMO6bHRpbW8gZmFsbMOzICdhbScuXG4iCisiTm8gcmVib2JpbmFuZG8gYSBPUklHX0hFQUQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAiVmFsb3IgaW52w6FsaWRvIHBhcmEgLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE1MworbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzxvcGNpb25lcz5dIFsoPG1ib3g+IHwgPERpcmVjdG9yaW8tZGUtY29ycmVvPikuLi5dIgorCisjOiBidWlsdGluL2FtLmM6MjE1NAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICJnaXQgYW0gWzxvcGNpb25lcz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImVqZWN1dGFyIGRlIG1hbmVyYSBpbnRlcmFjdGl2YSIKKworIzogYnVpbHRpbi9hbS5jOjIxNjIKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAib3BjacOzbiBoaXN0w7NyaWNhIC0tIG5vLW9wIgorCisjOiBidWlsdGluL2FtLmM6MjE2NAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICJwZXJtaXRpciByZXRyb2Nlc28gZW4gZnVzacOzbiBkZSAzLXbDrWFzIHNpIGVzIG5lY2VzYXJpbyIKKworIzogYnVpbHRpbi9hbS5jOjIxNjUgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTEKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAic2VyIHNpbGVuY2lvc28iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY3Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiYWdyZWdhciB1bmEgbMOtbmVhIFwiRmlybWFkby1wb3JcIiBhbCBtZW5zYWplIGRlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcwCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgInJlY29kaWZpY2FyIGVuIHV0ZjggKGRlZmF1bHQpIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc2FyIGZsYWcgLWsgYSBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc0Cittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAicGFzYXIgZmxhZyAtYiBhIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzYKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJwYXNhciBmbGFnIC1tIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3OAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgInBhc2FyIGZsYWcgLS1rZWVwLWNyIGEgZ2l0LW1haWxzcGxpdCBwYXJhIGZvcm1hdG8gbWJveCIKKworIzogYnVpbHRpbi9hbS5jOjIxODEKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAiIgorIm5vIHBhc2FyIGZsYWcgLS1rZWVwLWNyIGEgZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGllbnRlbWVudGUgZGUgYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjE4NAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAiZGVzY3VicmlyIHRvZG8gYW50ZXMgZGUgdW5hIGzDrW5lYSBkZSB0aWplcmFzIgorCisjOiBidWlsdGluL2FtLmM6MjE4NiBidWlsdGluL2FtLmM6MjE4OSBidWlsdGluL2FtLmM6MjE5MiBidWlsdGluL2FtLmM6MjE5NQorIzogYnVpbHRpbi9hbS5jOjIxOTggYnVpbHRpbi9hbS5jOjIyMDEgYnVpbHRpbi9hbS5jOjIyMDQgYnVpbHRpbi9hbS5jOjIyMDcKKyM6IGJ1aWx0aW4vYW0uYzoyMjEzCittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAicGFzYXJsbyBhIHRyYXbDqXMgZGUgZ2l0LWFwcGx5IgorCisjOiBidWlsdGluL2FtLmM6MjIwMyBidWlsdGluL2NvbW1pdC5jOjEzODYgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzYgYnVpbHRpbi9ncmVwLmM6ODgzIGJ1aWx0aW4vbWVyZ2UuYzoyNDkKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2MCBidWlsdGluL3B1bGwuYzoyMTkgYnVpbHRpbi9yZWJhc2UuYzoxNDY5CisjOiBidWlsdGluL3JlcGFjay5jOjMxNSBidWlsdGluL3JlcGFjay5jOjMxOSBidWlsdGluL3JlcGFjay5jOjMyMQorIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MCBidWlsdGluL3Nob3ctcmVmLmM6MTcyIGJ1aWx0aW4vdGFnLmM6NDAzCisjOiBwYXJzZS1vcHRpb25zLmg6MTU0IHBhcnNlLW9wdGlvbnMuaDoxNzUgcGFyc2Utb3B0aW9ucy5oOjMxNgorbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA5IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzgKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NSBidWlsdGluL3RhZy5jOjQzNyBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0byIKKworIzogYnVpbHRpbi9hbS5jOjIyMTAKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgImZvcm1hdGVhciBlbCBwYXJjaGUocykiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJzb2JyZXNjcmliaXIgbWVuc2FqZXMgZGUgZXJyb3IgY3VhbmRvIGZhbGxvcyBkZSBwYXJjaGFkbyBvY3VycmFuIgorCisjOiBidWlsdGluL2FtLmM6MjIxOAorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgImNvbnRpbnVhciBhcGxpY2FuZG8gbG9zIHBhcmNoZXMgdHJhcyByZXNvbHZlciBjb25mbGljdG9zIgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICJzaW7Ds25pbW9zIHBhcmEgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJzYWx0YXIgZWwgcGFyY2hlIGFjdHVhbCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjcKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICJyZXN0YXVyYXIgbGEgcmFtYSBvcmlnaW5hbCB5IGFib3J0YXIgbGEgb3BlcmFjacOzbiBkZSBwYXJjaGFkby4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiYWJvcnRhciBsYSBvcGVyYWNpw7NuIGRlIHBhcmNoYWRvIHBlcm8gbWFudGVuZXIgSEVBRCBkb25kZSBlc3TDoS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMzCittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZC4iCittc2dzdHIgIm11ZXN0cmEgZWwgcGFyY2hlIHNpZW5kbyBhcGxpY2Fkby4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM3Cittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICJtZW50aXIgc29icmUgbGEgZmVjaGEgZGVsIGNvbW1pdHRlciIKKworIzogYnVpbHRpbi9hbS5jOjIyMzkKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICJ1c2FyIGVsIHRpbWVzdGFtcCBhY3R1YWwgcGFyYSBsYSBmZWNoYSBkZWwgYXV0b3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQxIGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjAgYnVpbHRpbi9jb21taXQuYzoxNTA3CisjOiBidWlsdGluL21lcmdlLmM6Mjg2IGJ1aWx0aW4vcHVsbC5jOjE5NCBidWlsdGluL3JlYmFzZS5jOjUwOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTEzIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE3IGJ1aWx0aW4vdGFnLmM6NDE4Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJrZXktaWQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQyIGJ1aWx0aW4vcmViYXNlLmM6NTEwIGJ1aWx0aW4vcmViYXNlLmM6MTUxNAorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgIkNvbW1pdHMgY29uIGZpcm1hIEdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDUKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKHVzbyBpbnRlcm5vIHBhcmEgZ2l0LXJlYmFzZSkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYzCittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisiTGEgb3BjacOzbiAtYi8tLWJpbmFyeSBoYSBlc3RhZG8gZGVzaGFiaWxpdGFkYSBwb3IgbXVjaG8gdGllbXBvLCB5XG4iCisic2Vyw6EgZWxpbWluYWRhLiBQb3IgZmF2b3Igbm8gbGEgdXNlIG3DoXMuIgorCisjOiBidWlsdGluL2FtLmM6MjI3MAorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZmFsbMOzIGFsIGxlZXIgZWwgw61uZGljZSIKKworIzogYnVpbHRpbi9hbS5jOjIyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICJkaXJlY3RvcmlvIGRlIHJlYmFzZSBwcmV2aW8gJXMgdG9kYXbDrWEgZXhpc3RlIGVuIGVsIG1ib3ggZGFkby4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisiRGlyZWN0b3JpbyBleHRyYXZpYWRvICVzIGVuY29udHJhZG8uXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiBwYXJhIGJvcnJhcmxvLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMTUKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICJPcGVyYWNpw7NuIGRlIHJlc29sdWNpw7NuIG5vIGVzdMOhIGVuIHByb2dyZXNvLCBubyB2YW1vcyBhIGNvbnRpbnVhci4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIm1vZG8gaW50ZXJhY3Rpdm8gcmVxdWllcmUgcGFyY2hlcyBlbiBsYSBsw61uZWEgZGUgY29tYW5kbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxvcGNpb25lcz5dIFs8cGFyY2hlPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgZWwgYXJjaGl2byBjb21wcmltaWRvICclcyciCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAibm8gc2UgcHVkbyBkaXJlY2Npb25hciBsYSBzYWxpZGEiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IFJlbW90ZSBzaW4gVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBhcmNoaXZlOiBzZSBlc3BlcmFiYSBBQ0svTkFLLCBzZSBvYnR1dm8gZmx1c2ggcGFja2V0IgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZXJyb3IgZGUgcHJvdG9jb2xvIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogc2UgZXNwZXJhYmEgdW4gZmx1c2giCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8bWFsX3TDqXJtaW5vPiA8YnVlbl90w6lybWlubz4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjUKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNgorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8ZXN0YWRvPiA8cmV2aXNpb24+IDxidWVuX3Rlcm0+ICIKKyI8bWFsX3Rlcm0+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbWFuZG8+IDxidWVuX3Rlcm0+ICIKKyI8bWFsX3Rlcm0+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8YnVlbl90ZXJtPiA8bWFsX3Rlcm0+IFs8dGVybT5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dMOpcm1pbm8+IC0tdGVybS17bmV3LCIKKyJiYWR9PTx0w6lybWlubz5dWy0tbm8tY2hlY2tvdXRdIFs8bWFsbz4gWzxidWVubz4uLi5dXSBbLS1dIFs8cnV0YXM+Li4uXSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAiJyVzJyBubyBlcyB1biB0w6lybWlubyB2w6FsaWRvIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgdXNlIHRoZSBidWlsdGluIGNvbW1hbmQgJyVzJyBhcyBhIHRlcm0iCittc2dzdHIgIm5vIHNlIHB1ZWRlIHVzYXIgZWwgY29tYW5kbyBuYXRpdm8gJyVzJyBjb21vIHVuIHTDqXJtaW5vIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBjYW1iaWFyIGVsIHNpZ25pZmljYWRvIGRlbCB0w6lybWlubyAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTExCittc2dpZCAicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIgorbXNnc3RyICJwb3IgZmF2b3IgdXNlIGRvcyB0w6lybWlub3MgZGlmZXJlbnRlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciBlbCBhcmNoaXZvIEJJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy5cbiIKK21zZ3N0ciAiTm8gZXN0YW1vcyBiaXNlY2FuZG8uXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiclcycgbm8gZXMgdW4gY29tbWl0IHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJXMnLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZG8gaGFjZXIgY2hlY2sgb3V0IGFsIEhFQUQgb3JpZ2luYWwgJyVzJy4gSW50ZW50YSAnZ2l0IGJpc2VjdCByZXNldCAiCisiPGNvbW1pdD4nLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiTWFsIGFyZ3VtZW50byBiaXNlY3Rfd3JpdGU6ICVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgb2J0ZW5lciBlbCBvaWQgZGUgbGEgcmV2ICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3Qgb3BlbiB0aGUgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyIGVsIGFyY2hpdm8gJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIkNvbWFuZG8gaW52w6FsaWRvOiBhY3R1YWxtZW50ZSBzZSBlbmN1ZW50cmEgZW4gdW4gYmlzZWN0ICVzLyVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIlRpZW5lcyBxdWUgZGFyIGFsIG1lbm9zIHVuICVzIHkgdW4gJXMgcmV2aXNpb24uXG4iCisiU2UgcHVlZGUgdmVyIFwiZ2l0IGJpc2VjdCAlc1wiIHkgXCJnaXQgYmlzZWN0ICVzXCIgcGFyYSBlc28uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiVGllbmVzIHF1ZSBjb21lbnphciBwb3IgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiRGVzcHXDqXMgdGllbmVzIHF1ZSBlbnRyZWdhciBhbCBtZW5vcyB1biAlcyB5IHVuYSByZXZpc2lvbiAlcy5cbiIKKyJQdWVkZXMgdXNhciBcImdpdCBiaXNlY3QgJXNcIiB5IFwiZ2l0IGJpc2VjdCAlc1wiIHBhcmEgZXNvLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNlY3Rpbmcgb25seSB3aXRoIGEgJXMgY29tbWl0IgorbXNnc3RyICJoYWNpZW5kbyBiaXNlY3Qgc29sbyBjb24gdW4gY29tbWl0ICVzIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzMwCittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIsK/RXN0w6FzIHNlZ3VybyBbWS9uXT8gIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc3Cittc2dpZCAibm8gdGVybXMgZGVmaW5lZCIKK21zZ3N0ciAibm8gaGF5IHTDqXJtaW5vcyBkZWZpbmlkb3MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKyJUdXMgdMOpcm1pbm9zIGFjdHVhbGVzIHNvbiAlcyBwYXJhIGVsIGVzdGFkbyB2aWVqb1xuIgorInkgJXMgcGFyYSBlbCBlc3RhZG8gbnVldm8uXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyJhcmd1bWVudG8gaW52w6FsaWRvICVzIHBhcmEgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIkxhcyBvcGNpb25lcyBzb3BvcnRhZGFzIHNvbjogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCB5IC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG9wdGlvbjogJyVzJyIKK21zZ3N0ciAib3BjacOzbiBkZXNjb25vY2lkYTogJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICInJXMnIG5vIHBhcmVjZSBzZXIgdW5hIHJldmlzacOzbiB2w6FsaWRhIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTEyCittc2dpZCAiYmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICJtYWwgSEVBRCAtIE5lY2VzaXRvIHVuIEhFQUQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3Qgc3RhcnQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorImVycm9yIGFsIGhhY2VyIGNoZWNrb3V0ICclcycuIEludGVudGUgJ2dpdCBiaXNlY3Qgc3RhcnQgPHJhbWEtdsOhbGlkYT4nLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU0OAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgIm5vIHNlIGJpc2VjYXLDoSBlbiB1biDDoXJib2wgY29uIGNnLXNlZWsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTEKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJtYWwgSEVBRCAtIHJlZiBzaW1iw7NsaWNvIGV4dHJhw7FvIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICJyZWYgaW52w6FsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMxCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAicmVhbGl6YSAnZ2l0IGJpc2VjdCBuZXh0JyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAiZXNjcmliZSBsb3MgdMOpcm1pbm9zIGEgLmdpdC9CSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgImxpbXBpYXIgZWwgZXN0YWRvIGRlIGJpc2VjY2nDs24iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIKK21zZ3N0ciAicmV2aXNhciBwb3IgcmV2cyBlc3BlcmFkb3MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzkKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJyZWluaWNpYXIgZWwgZXN0YWRvIGRlIGJpc2VjdCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgImVzY3JpYmlyIGVsIGVzdGFkbyBkZSBiaXNlY3QgZW4gQklTRUNUX0xPRyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MworbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgInJldmlzYXIgeSBjb25maWd1cmFyIGxvcyB0ZXJtcyBlbiBlbCBlc3RhZG8gZGUgYmlzZWN0IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAicmV2aXNhciBzaSBleGlzdGVuIHTDqXJtaW5vcyBtYWxvcyBvIGJ1ZW5vcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICJpbXByaW1pciBsb3MgdGVybXMgZGVsIGJpc2VjdCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAiY29tZW56YXIgbGEgc2VzacOzbiBkZSBiaXNlY3QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTEKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICJhY3R1YWxpemEgQklTRUNUX0hFQUQgZW4gbHVnYXIgZGUgcmV2aXNhciBlbCBjb21taXQgYWN0dWFsIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUzCittc2dpZCAibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiCittc2dzdHIgIm5vIGhheSBsb2cgcGFyYSBCSVNFQ1RfV1JJVEUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzAKK21zZ2lkICItLXdyaXRlLXRlcm1zIHJlcXVpcmVzIHR3byBhcmd1bWVudHMiCittc2dzdHIgIi0td3JpdGUtdGVybXMgcmVxdWllcmUgZG9zIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzQKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIG5vIHJlcXVpZXJlIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODEKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgIi0tYmlzZWN0LXJlc2V0IHJlcXVpZXJlIHVuIGNvbW1pdCBvIG5pbmfDum4gYXJndW1lbnRvIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg1Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIHJlcXVpZXJlIGVudHJlIDQgbyA1IGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTEKK21zZ2lkICItLWNoZWNrLWFuZC1zZXQtdGVybXMgcmVxdWlyZXMgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIG5vIHJlcXVpZXJlIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTcKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWllcmUgMiBvIDMgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMworbXNnaWQgIi0tYmlzZWN0LXRlcm1zIHJlcXVpcmVzIDAgb3IgMSBhcmd1bWVudCIKK21zZ3N0ciAiLS1iaXNlY3QtdGVybXMgcmVxdWllcmUgMCBvIDEgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMxCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzxvcGNpb25lcz5dIFs8b3BjaW9uZXMtcmV2Pl0gWzxyZXZpc2lvbj5dIFstLV0gPGFyY2hpdm8+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPHJldi1vcHRzPiBlc3TDoW4gZG9jdW1lbnRhZGFzIGVuIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RpbmcgYSBjb2xvcjogJXMiCittc2dzdHIgImVzcGVyYW5kbyB1biBjb2xvcjogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgInRpZW5lIHF1ZSB0ZXJtaW5hciBjb24gdW4gY29sb3IiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgImNvbG9yIGludsOhbGlkbyAnJXMnIGVuIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAidmFsb3IgaW52w6FsaWRvIHBhcmEgYmxhbWUuY29sb3JpbmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICJubyBzZSBwdWRvIGVuY29udHJhciByZXZpc2lvbiAlcyBwYXJhIGlnbm9yYXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDQKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICJNb3N0cmFyIGxhcyBlbnRyYWRhcyBibGFtZSBjb21vIGxhcyBlbmNvbnRyYW1vcywgaW5jcmVtZW50YWxtZW50ZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYXIgU0hBLTEgZW4gYmxhbmNvIHBhcmEgY29tbWl0cyBleHRyZW1vcyAoRGVmYXVsdDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTm8gdHJhdGFyIGNvbW1pdHMgcmHDrWNlcyBjb21vIGV4dHJlbW9zIChEZWZhdWx0OiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ3Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiTW9zdHJhciBlc3RhZMOtc3RpY2FzIGRlIGNvc3RvIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDgKK21zZ2lkICJGb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIkZvcnphciBlbCByZXBvcnRlIGRlIHByb2dyZXNvIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIk1vc3RyYXIgbGEgcHVudHVhY2nDs24gZGUgc2FsaWRhIGRlIGxhcyBlbnRyYWRhcyBkZSBibGFtZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICJNb3N0cmFyIG5vbWJyZSBvcmlnaW5hbCBkZWwgYXJjaGl2byAoRGVmYXVsdDogYXV0bykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYXIgbsO6bWVybyBkZSBsw61uZWEgb3JpZ2luYWwgKERlZmF1bHQ6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTIKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICJNb3N0cmFyIGVuIHVuIGZvcm1hdG8gZGlzZcOxYWRvIHBhcmEgY29uc3VtbyBkZSBtw6FxdWluYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTW9zdHJhciBlbiBmb3JtYXRvIHBvcmNlbGFuYSBjb24gaW5mb3JtYWNpw7NuIGRlIGNvbW1pdCBwb3IgbMOtbmVhIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVXNhciBlbCBtaXNtbyBtb2RvIHNhbGlkYSBjb21vIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9zdHJhciB0aW1lc3RhbXAgZW4gZm9ybWF0byByYXcgKERlZmF1bHQ6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYXIgU0hBMSBkZWwgY29tbWl0IGVuIGZvcm1hdG8gbGFyZ28gKERlZmF1bHQ6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTcKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJTdXByaW1pciBub21icmUgZGVsIGF1dG9yIHkgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU4Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0cmFyIGVuIGNhbWJpbyBlbCBlbWFpbCBkZWwgYXV0b3IgKERlZmF1bHQ6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTkKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiSWdub3JhciBkaWZlcmVuY2lhcyBkZSBlc3BhY2lvcyBlbiBibGFuY28iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAgYnVpbHRpbi9sb2cuYzoxNzAyCittc2dpZCAicmV2IgorbXNnc3RyICJyZXYiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAKK21zZ2lkICJJZ25vcmUgPHJldj4gd2hlbiBibGFtaW5nIgorbXNnc3RyICJJZ25vcmFyIDxyZXY+IGR1cmFudGUgZWwgYmxhbWUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjEKK21zZ2lkICJJZ25vcmUgcmV2aXNpb25zIGZyb20gPGZpbGU+IgorbXNnc3RyICJJZ25vcmFyIHJldmlzaW9uZXMgZGUgPGFyY2hpdm8+IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYyCittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAiY29sb3JlYXIgbWV0YWRhdGEgcmVkdW5kYW50ZSBkZSBsw61uZWFzIHByZXZpYXMgZGUgbWFuZXJhIGRpZmVyZW50ZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAiY29sb3JlYXIgbMOtbmVhcyBwb3IgZWRhZCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiT2N1cG8gbcOhcyBjaWNsb3MgcGFyYSBlbmNvbnRyYXIgbWVqb3JhcyByZXN1bHRhZG9zIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY1Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICJVc2UgcmV2aXNpb25lcyBkZXNkZSA8YXJjaGl2bz4gZW4gbHVnYXIgZGUgbGxhbWFyIGdpdC1yZXYtbGlzdCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIlVzYXIgY29udGVuaWRvIGRlIDxhcmNoaXZvPiBjb21vIGltYWdlbiBmaW5hbCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgInB1bnRhamUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJFbmNvbnRyYXIgY29waWFzIGRlIGzDrW5lYXMgZW50cmUgeSBhIHRyYXbDqXMgZGUgYXJjaGl2b3MiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJFbmNvbnRyYXIgbW92aW1pZW50b3MgZGUgbMOtbmVhcyBlbnRyZSB5IGEgdHJhdsOpcyBkZSBhcmNoaXZvcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIlByb2Nlc2FyIHNvbG8gZWwgcmFuZ28gZGUgbMOtbmVhcyBuLG0sIGNvbnRhbmRvIGRlc2RlIDEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjEKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICItLXByb2dyZXNzIG5vIHB1ZWRlIHNlciB1c2FkbyBjb24gLS1pbmNyZW1lbnRhbCBvIGZvcm1hdG9zIHBvcmNlbGFuYSIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5NzIKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICJoYWNlIDQgYcOxb3MsIDExIG1lc2VzIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAiYXJjaGl2byAlcyB0aWVuZSBzb2xvICVsdSBsw61uZWEiCittc2dzdHJbMV0gImFyY2hpdm8gJXMgdGllbmUgc29sbyAlbHUgbMOtbmVhcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICJCbGFtaW5nIGEgbMOtbmVhcyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbmVzPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9uZXM+XSBbLWxdIFstZl0gPG5vbWJyZS1kZS1yYW1hPiBbPHB1bnRvLWluaWNpYWw+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbmVzPl0gWy1yXSAoLWQgfCAtRCkgPG5vbWJyZS1kZS1yYW1hPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbmVzPl0gKC1tIHwgLU0pIFs8cmFtYS12aWVqYT5dIDxyYW1hLW51ZXZhPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1jIHwgLUMpIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbmVzPl0gKC1jIHwgLUMpIFs8cmFtYS12aWVqYT5dIDxyYW1hLW51ZXZhPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcGNpb25lcz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbmVzPl0gWy1yIHwgLWFdIFstLWZvcm1hdG9dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJib3JyYW5kbyBsYSByYW1hICclcycgcXVlIGhhIHNpZG8gZnVzaW9uYWRhIGVuXG4iCisiICAgICAgICAgJyVzJywgcGVybyBhw7puIG5vIGhhIHNpZG8gZnVzaW9uYWRhIGEgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIm5vIGJvcnJhbmRvIHJhbWEgJyVzJyBxdWUgdG9kYXbDrWEgbm8gaGEgc2lkbyBmdXNpb25hZGEgXG4iCisiXHRhICclcycsIGF1bnF1ZSBzZSBmdXNpb25lIGNvbiBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIGVuY29udHJhciBlbCBvYmpldG8gY29tbWl0IHBhcmEgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiTGEgcmFtYSAnJXMnIG5vIGhhIHNpZG8gZnVzaW9uYWRhIGNvbXBsZXRhbWVudGUuXG4iCisiU2kgZXN0w6FzIHNlZ3VybyBkZSBxdWVyZXIgYm9ycmFybGEsIGVqZWN1dGEgJ2dpdCBicmFuY2ggLUQgJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJGYWxsw7MgZGUgYWN0dWFsaXphY2nDs24gZGUgY29uZmlnLWZpbGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJubyBzZSBwdWVkZSB1c2FyLWEgY29uIC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiTm8gc2UgcHVkbyByZXZpc2FyIGVsIG9iamV0byBjb21taXQgcGFyYSBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIk5vIHNlIHB1ZWRlIGJvcnJhciByYW1hICclcycgcXVlIGN1ZW50YSBjb24gY2hlY2tvdXQgZW4gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgInJhbWEgZGUgcmFzdHJlbyByZW1vdG8gJyVzJyBubyBlbmNvbnRyYWRhLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAicmFtYSAnJXMnIG5vIGVuY29udHJhZGEuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycm9yIGFsIGVsaW1pbmFyIGxhIHJhbWEgZGUgcmFzdHJlbyByZW1vdGEgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycm9yIGFsIGVsaW1pbmFyIGxhIHJhbWEgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJFbGltaW5hZGEgbGEgcmFtYSBkZSByYXN0cmVvIHJlbW90YSAlcyAoZXJhICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIkVsaW1pbmFkYSBsYSByYW1hICVzIChlcmEgJXMpLi5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFuYWxpemFyIGVsIHN0cmluZyBkZSBmb3JtYXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVzb2x2ZXIgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAoJXMpIHBvaW50cyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvIgorbXNnc3RyICJIRUFEICglcykgYXB1bnRhIGZ1ZXJhIGRlIHJlZnMvaGVhZHMvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiUmFtYSAlcyBlc3TDoSBzaWVuZG8gcmViYXNhZGEgZW4gJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAiUmFtYSAlcyBlc3TDoSBzaWVuZG8gYmlzZWNhZGEgZW4gJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb3BpYXIgbGEgcmFtYSBhY3R1YWwgbWllbnRyYXMgbm8gc2UgZXN0w6EgZW4gbmluZ3VuYS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlbm9tYnJhciBsYSByYW1hIGFjdHVhbCBtaWVudHJhcyBubyBzZSBlc3TDoSBlbiBuaW5ndW5hLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiTm9tYnJlIGRlIHJhbWEgaW52w6FsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJDYW1iaW8gZGUgbm9tYnJlIGRlIHJhbWEgZmFsbGlkbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIkNvcGlhZG8gZGUgcmFtYSBmYWxsaWRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICJDb3BpYSBjcmVhZGEgZGUgbGEgcmFtYSBtYWxub21icmFkYSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiUmFtYSBtYWwgbGxhbWFkYSAnJXMnIHJlbm9tYnJhZGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIsKhUmFtYSByZW5vbWJyYWRhIGEgJXMsIHBlcm8gSEVBRCBubyBlc3TDoSBhY3R1YWxpemFkbyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisiTGEgcmFtYSBlc3TDoSByZW5vbWJyYWRhLCBwZXJvIGZhbGzDsyBsYSBhY3R1YWxpemFjacOzbiBkZWwgYXJjaGl2byBkZSAiCisiY29uZmlndXJhY2nDs24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJMYSByYW1hIGVzdMOhIGNvcGlhZGEsIHBlcm8gZmFsbMOzIGxhIGFjdHVhbGl6YWNpw7NuIGRlbCBhcmNoaXZvIGRlICIKKyJjb25maWd1cmFjacOzbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorIlBvciBmYXZvciwgZWRpdGEgbGEgZGVzY3JpcGNpw7NuIHBhcmEgbGEgcmFtYVxuIgorIiVzXG4iCisiTGFzIGzDrW5lYXMgcXVlIGNvbWllbmNlbiBjb24gJyVjJyBzZXLDoW4gZWxpbWluYWRhcy5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGdlbsOpcmljYXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIm1vc3RyYXIgaGFzaCB5IHRlbWEsIGRhciBkb3MgdmVjZXMgcGFyYSByYW1hIHVwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgInN1cHJpbWlyIG1lbnNhamVzIGluZm9ybWF0aXZvcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjIKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAiY29uZmlndXJhbmRvIG1vZG8gdHJhY2tpbmcgKG1pcmFyIGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICJubyB1c2FyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUwNQorbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICJ1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgImNhbWJpYXIgaW5mbyBkZSB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjcKK21zZ2lkICJ1bnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiZGVzY29uZmlndXJhbmRvIGxhIGluZm8gZGUgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJ1c2FyIHNhbGlkYSBjb24gY29sb3JlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhY3R1YXIgZW4gcmFtYXMgZGUgdHJhcXVlbyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vYnJhbmNoLmM6NjMzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHJhbWFzIHF1ZSBjb250aWVuZW4gZWwgY29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMiBidWlsdGluL2JyYW5jaC5jOjYzNAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIm1vc3RyYXIgc29sbyByYW1hcyBxdWUgbm8gY29udGllbmVuIGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJBY2Npb25lcyBlc3BlY8OtZmljYXMgZGUgZ2l0LWJyYW5jaDoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgImxpc3RhcsKgcmFtYXMgZGUgcmVtb3RlLXRyYWNraW5nIHkgbG9jYWxlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAiYm9ycmFyIHJhbWFzIHRvdGFsbWVudGUgZnVzaW9uYWRhcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDEKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICJib3JyYXIgcmFtYSAoaW5jbHVzbyBzaSBubyBlc3TDoSBmdXNpb25hZGEpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJtb3Zlci9yZW5vbWJyYXIgdW5hIHJhbWEgeSBzdSByZWZsb2ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAibW92ZXIvcmVub21icmFyIHVuYSByYW1hLCBpbmNsdXNvIHNpIGVsIGRlc3Rpbm8gZXhpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImNvcGlhciB1bmEgcmFtYSB5IHN1IHJlZmxvZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDUKK21zZ2lkICJjb3B5IGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImNvcGlhciB1bmEgcmFtYSwgaW5jbHVzbyBzaSBlbCBvYmpldGl2byBleGlzdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgImxpc3RhciBub21icmVzIGRlIHJhbWFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NworbXNnaWQgInNob3cgY3VycmVudCBicmFuY2ggbmFtZSIKK21zZ3N0ciAibXVlc3RyYSBlbCBub21icmUgZGUgYnJhbmNoIGFjdHVhbCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAiY3JlYSBlbCByZWZsb2cgZGUgbGEgcmFtYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTAKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAiZWRpdGEgbGEgZGVzY3JpcGNpw7NuIGRlIGxhIHJhbWEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAiZnVlcnphIGxhIGNyZWFjacOzbixtb3ZpbWllbnRvL3Jlbm9tYnJhZG8sYm9ycmFkbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAibXVlc3RyYSBzb2xvIHJhbWFzIHF1ZSBoYW4gc2lkbyBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAibXVlc3RyYSBzb2xvIHJhbWFzIHF1ZSBubyBoYW4gc2lkbyBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAibXVlc3RyYSBsYXMgcmFtYXMgZW4gY29sdW1uYXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICJvYmpldG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJpbXByaW1pciBzw7NsbyBsYXMgcmFtYXMgZGVsIG9iamV0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjAgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQ0MAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAib3JkZW5hbWllbnRvIHkgZmlsdHJhZG8gc29uIGNhc2UtaW5zZW5zaXRpdmUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiZm9ybWF0byBwYXJhIHVzYXIgcGFyYSBlbCBvdXRwdXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njg0IGJ1aWx0aW4vY2xvbmUuYzo3ODQKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiwqFIRUFEIG5vIGVuY29udHJhZG8gYWJham8gZGUgcmVmcy9oZWFkcyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA4Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiB5IC0tdmVyYm9zZSBzb24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjMgYnVpbHRpbi9icmFuY2guYzo3NzcgYnVpbHRpbi9icmFuY2guYzo3ODYKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAic2UgbmVjZXNpdGEgZWwgbm9tYnJlIGRlIGxhIHJhbWEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZGFyIGRlc2NyaXBjacOzbiBhbCBIRUFEIGRlc2Fjb3BsYWRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJubyBzZSBwdWVkZSBlZGl0YXIgbGEgZGVzY3JpcGNpw7NuIGRlIG3DoXMgZGUgdW5hIHJhbWEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICJBw7puIG5vIGhheSBjb21taXRzIGVuIGxhIHJhbWEgJyVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiTm8gaGF5IG5pbmd1bmEgcmFtYSBsbGFtYWRhICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICJkZW1hc2lhZGFzIHJhbWFzIHBhcmEgdW5hIG9wZXJhY2nDs24gZGUgY29waWFkbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTIKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAiZGVtYXNpYWRvcyBhcmd1bWVudG9zIHBhcmEgdW5hIG9wZXJhY2nDs24gZGUgcmVub21icmFkbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiZGVtYXNpYWRvcyBhcmd1bWVudG9zIHBhcmEgY29uZmlndXJhciB1biBudWV2byB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisibm8gc2UgcHVkbyBjb25maWd1cmFyIHVwc3RyZWFtIGRlIEhFQUQgYSAlcyBjdWFuZG8gZXN0ZSBubyBhcHVudGEgYSBuaW5ndW5hICIKKyJyYW1hLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAibm8gaGF5IHRhbCByYW1hICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsYSByYW1hICclcycgbm8gZXhpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiZGVtYXNpYWRvcyBhcmd1bWVudG9zIHBhcmEgZGVzY29uZmlndXJhciB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisibm8gc2UgcHVlZGUgZGVzY29uZmlndXJhciB1cHN0cmVhbSBkZSBIRUFEIGN1YW5kbyBlc3RlIG5vIGFwdW50YSBhIG5pbmd1bmEgIgorInJhbWEuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIlJhbWEgJyVzJyBubyB0aWVuZSBpbmZvcm1hY2nDs24gZGUgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiIgorIlRoZSAtYSwgYW5kIC1yLCBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgdGFrZSBhIGJyYW5jaCBuYW1lLlxuIgorIkRpZCB5b3UgbWVhbiB0byB1c2U6IC1hfC1yIC0tbGlzdCA8cGF0dGVybj4/IgorbXNnc3RyICIiCisiTGFzIG9wY2lvbmVzIC1hLCB5IC1yLCBkZSAnZ2l0IGJyYW5jaCcgbm8gdG9tYW4gdW4gbm9tYnJlIGRlIHJhbWEuXG4iCisiwr9RdWlzaXN0ZSB1c2FyOiAtYXwtciAtLWxpc3QgPHBhdHLDs24+PyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisibGEgb3BjacOzbiAnLS1zZXQtdXBzdHJlYW0nIHlhIG5vIGVzIHNvcG9ydGFkYS4gQ29uc2lkZXJlIHVzYXIgJy0tdHJhY2snIG8gJy0tIgorInNldC11cHN0cmVhbS10bycgZW4gY2FtYmlvLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNSBidWlsdGluL2J1bmRsZS5jOjIzCittc2dpZCAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iCittc2dzdHIgImdpdCBidW5kbGUgY3JlYXRlIFs8b3BjaW9uZXM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNiBidWlsdGluL2J1bmRsZS5jOjI4Cittc2dpZCAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IgorbXNnc3RyICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wY2lvbmVzPl0gPGFyY2hpdm8+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE3IGJ1aWx0aW4vYnVuZGxlLmM6MzMKK21zZ2lkICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGFyY2hpdm8+IFs8bm9tYnJlLWRlLXJlZj4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8YXJjaGl2bz4gWzxub21icmUtZGUtcmVmPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjI4Cittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIm5vIG1vc3RyYXIgbWVkaWRvciBkZSBwcm9ncmVzbyIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzAKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJtb3N0cmFyIG1lZGlkb3IgZGUgcHJvZ3Jlc28iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjMyCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgIm1vc3RyYXIgbWVkaWRvciBkZSBwcm9ncmVzbyBkdXJhbnRlIGxhIGZhc2UgZGUgZXNjcml0dXJhIGRlIG9iamV0byIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzUKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgInNpbWlsYXIgYSAtLWFsbC1wcm9ncmVzcyBjdWFuZG8gbWVkaWRvciBkZSBwcm9ncmVzbyBlcyBtb3N0cmFkbyIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIlNlIG5lY2VzaXRhIHVuIHJlcG9zaXRvcmlvIHBhcmEgYWdydXBhci4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgIm5vIG1vc3RyYXIgZGV0YWxsZXMgZGVsIGJ1bmRsZSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyBlc3TDoSBiaWVuXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJTZSBuZWNlc2l0YSB1biByZXBvc2l0b3JpbyBwYXJhIGRlc2FncnVwYXIuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2OCBidWlsdGluL3JlbW90ZS5jOjE2MDkKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICJzZXIgdmVyYm9zbzsgdGllbmUgcXVlIHNlciBhZ3JlZ2FkbyBhbnRlcyBkZSB1biBzdWJjb21hbmRvIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE5MCBidWlsdGluL3JlbW90ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiU3ViLWNvbWFuZG8gZGVzY29ub2NpZG86ICVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0aXBvPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHJ1dGE+XSA8b2JqZXRvPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBiYXRjaCBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAic29sbyBzZSBwdWVkZSBlc3BlY2lmaWNhciB1bmEgb3BjacOzbiBiYXRjaCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPHRpcG8+IHB1ZWRlIHNlcjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzYKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICJtb3N0cmFyIGVsIHRpcG8gZGVsIG9iamV0byIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIm1vc3RyYXIgZWwgdGFtYcOxbyBkZWwgb2JqZXRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM5Cittc2dpZCAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIgorbXNnc3RyICJzYWxpciBjb24gY2VybyBjdWFuZG8gbm8gaGF5YSBlcnJvciIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJyZWFsaXphciBwcmV0dHktcHJpbnQgZGVsIGNvbnRlbmlkbyBkZWwgb2JqZXRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInBhcmEgb2JqZXRvcyBibG9iLCBlamVjdXRhIHRleHRjb252IGVuIGVsIGNvbnRlbmlkbyBkZWwgb2JqZXRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAicGFyYSBvYmpldG9zIGJsb2IsIGVqZWN1dGEgZmlsdGVycyBlbiBlbCBjb250ZW5pZG8gZGVsIG9iamV0byIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NSBnaXQtc3VibW9kdWxlLnNoOjk5MgorbXNnaWQgImJsb2IiCittc2dzdHIgImJsb2IiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAidXNlIHVuYSBydXRhIGVzcGVjw61maWNhIHBhcmEgLS10ZXh0Y29udi8tLWZpbHRlcnMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDgKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgInBlcm1pdGEgLXMgeSAtdCBwYXJhIHRyYWJhamFyIGNvbiBvYmpldG9zIHJvdG9zIG8gY29ycnVwdG9zIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICJzYWxpZGEgYnVmZmVyIC0tYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm1vc3RyYXIgaW5mbyB5IGNvbnRlbnQgZGUgbG9zIG9iamV0b3MgYWxpbWVudGFkb3MgcG9yIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJtb3N0cmFyIGluZm8gZGUgbG9zIG9iamV0b3MgYWxpbWVudGFkb3MgcG9yIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisic2VndWlyIGxvcyBlbmxhY2VzIHNpbWLDs2xpY29zIGVuIGVsIMOhcmJvbCAodXNhZG8gY29uIC0tYmF0Y2ggbyAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIm1vc3RyYXIgdG9kb3MgbG9zIG9iamV0b3MgY29uIC0tYmF0Y2ggbyAtLWJhdGNoLWNoZWNrIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICJubyBvcmRlbmFyIGVsIG91dHB1dCBkZSAtLWJhdGNoLWFsbC1vYmplY3RzIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxub21icmUtZGUtcnV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgInJlcG9ydGFyIHRvZG9zIGxvcyBhdHJpYnV0b3MgY29uZmlndXJhZG9zIGVuIGVsIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInVzZSAuZ2l0YXR0cmlidXRlcyBzb2xvIGRlc2RlIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjUgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZWVyIG5vbWJyZXMgZGUgYXJjaGl2b3MgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAidGVybWluYXIgcmVnaXN0cm9zIGRlIGVudHJhZGEgeSBzYWxpZGEgY29uIHVuIGNhcsOhY3RlciBOVUwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0MzUgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNgorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAic3VwcmltaXIgZWwgcmVwb3J0ZSBkZSBwcm9ncmVzbyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJtb3N0cmFyIHJ1dGFzIGRlIGVudHJhZGEgcXVlIG5vIGNvbmN1ZXJkYW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiaWdub3JhciBlbCDDrW5kaWNlIGN1YW5kbyBzZSByZXZpc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYwCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZXNwZWNpZmljYXIgbG9zIG5vbWJyZXMgZGUgcnV0YXMgY29uIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYzCittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IHPDs2xvIHRpZW5lIHNlbnRpZG8gY29uIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgInJ1dGEgbm8gZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OQorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IHNvbG8gZXMgdsOhbGlkbyBjb24gdW4gbm9tYnJlIGRlIHJ1dGEgw7puaWNvIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICJubyBzZSBwdWVkZSB0ZW5lciBhbWJvcyAtLXF1aWV0IHkgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NAorbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIi0tbm9uLW1hdGNoaW5nIHPDs2xvIGVzIHbDoWxpZGEgY29uIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcGNpb25lcz5dIDxjb250YWN0bz4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgInRhbWJpw6luIGxlZXIgY29udGFjdG9zIGRlc2RlIHN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgY29udGFjdG86ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAiY29udGFjdG9zIG5vIGVzcGVjaWZpY2Fkb3MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3BjaW9uZXM+XSBbLS1dIFs8YXJjaGl2bz4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgInN0YWdlIHRpZW5lIHF1ZSBlc3RhciBlbnRyZSAxIHkgMyBvIGFsbCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJyZXZpc2FyIHRvZG9zIGxvcyBhcmNoaXZvcyBlbiBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJmb3J6YXIgc29icmVlc2NyaXR1cmEgZGUgbG9zIGFyY2hpdm9zIGV4aXN0ZW50ZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisibm8gaGF5IGFkdmVydGVuY2lhcyBwYXJhIGxvcyBhcmNoaXZvcyBleGlzdGVudGVzIHkgbG9zIGFyY2hpdm9zIG5vIGVzdMOhbiBlbiAiCisiZWwgw61uZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAibm8gcmV2aXNhciBhcmNoaXZvcyBudWV2b3MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiYWN0dWFsaXphciBpbmZvcm1hY2nDs24gZGUgZXN0YWRvIGVuIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVlciBsaXN0YSBkZSBydXRhcyBkZXNkZSBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAiZXNjcmliaXIgZWwgY29udGVuaWRvIGVuIHVuIGFyY2hpdm8gdGVtcG9yYWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODgKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODgyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njc5Cittc2dpZCAic3RyaW5nIgorbXNnc3RyICJzdHJpbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJjdWFuZG8gY3JlZSBhcmNoaXZvcywgYW50ZXBvbmVyIDxzdHJpbmc+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgImNvcGlhciBsb3MgYXJjaGl2b3MgZGVsIHN0YWdlIG5vbWJyYWRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wY2lvbmVzPl0gIDxyYW1hPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcGNpb25lcz5dIFs8cmFtYT5dIC0tIDxhcmNoaXZvPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs8b3BjaW9uZXM+XSBbPHJhbWE+XSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyCittc2dpZCAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCByZXN0b3JlIFs8b3BjaW9uZXM+XSBbLS1zb3VyY2U9PHJhbWE+XSAtLSA8YXJjaGl2bz4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUgYnVpbHRpbi9jaGVja291dC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAicnV0YSAnJXMnIG5vIHRpZW5lIG51ZXN0cmEgdmVyc2nDs24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJydXRhICclcycgbm8gdGllbmUgc3UgdmVyc2nDs24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAicnV0YSAnJXMnIG5vIHRpZW5lIHRvZGFzIGxhcyB2ZXJzaW9uZXMgbmVjZXNhcmlhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgInJ1dGEgJyVzJyBubyB0aWVuZSB2ZXJzaW9uZXMgbmVjZXNhcmlhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAicnV0YSAnJXMnOiBubyBzZSBwdWVkZSBmdXNpb25hciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiSW5jYXBheiBkZSBhZ3JlZ2FyIHJlc3VsdGFkb3MgZGUgZnVzacOzbiBhICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICJSZWNyZWFkbyAlZCBjb25mbGljdG8gZGUgbWVyZ2UiCittc2dzdHJbMV0gIlJlY3JlYWRvcyAlZCBjb25mbGljdG9zIGRlIG1lcmdlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIkFjdHVhbGl6YWRhICVkIHJ1dGEgcGFyYSAlcyIKK21zZ3N0clsxXSAiQWN0dWFsaXphZGFzICVkIHJ1dGFzIHBhcmEgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICJBY3R1YWxpemFkYSAlZCBydXRhIGRlc2RlIGVsIGluZGV4IgorbXNnc3RyWzFdICJBY3R1YWxpemFkYXMgJWQgcnV0YXMgZGVzZGUgZWwgaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyBubyBwdWVkZSBzZXIgdXNhZGEgY29uIHJ1dGFzIGFjdHVhbGl6YWRhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyBubyBwdWVkZSBzZXIgdXNhZG8gY29uICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWN0dWFsaXphciBydXRhcyB5IGNhbWJpYXIgYSBsYSByYW1hICclcycgYWwgbWlzbW8gdGllbXBvLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgIm5pICclcycgbyAnJXMnIGVzdMOhbiBlc3BlY2lmaWNhZG9zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSB1c2VkIHdoZW4gJyVzJyBpcyBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICInJXMnIHRpZW5lIHF1ZSBzZXIgdXNhZG8gY3VhbmRvICclcycgbm8gZXMgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycgbyAnJXMnIG5vIHB1ZWRlIHNlciB1c2FkbyBjb24gJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgInJ1dGEgJyVzJyBubyBlc3RhIGZ1c2lvbmFkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4MiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjgyCittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIm5lY2VzaXRhcyByZXNvbHZlciB0dSDDrW5kaWNlIGFjdHVhbCBwcmltZXJvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgY29udGludWUgd2l0aCBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisibm8gc2UgcHVlZGUgY29udGludWFyIGNvbiBsb3MgY2FtYmlvcyBlbiBzdGFnZSBlbiBsb3Mgc2lndWllbnRlcyBhcmNoaXZvczpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgaGFjZXIgcmVmbG9nIHBhcmEgJyVzJzogJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg3NworbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEIGVzdMOhIGFob3JhIGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgxIGJ1aWx0aW4vY2xvbmUuYzo3MTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWN0dWFsaXphciAgSEVBRCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJSZWluaWNpYXIgcmFtYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIllhIGVuICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmFtYSByZWluaWNpYWRhIHkgY2FtYmlhZGEgYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQgYnVpbHRpbi9jaGVja291dC5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiQ2FtYmlhZG8gYSBudWV2YSByYW1hICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJDYW1iaWFkbyBhIHJhbWEgJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4geSAlZCBtw6FzLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiUGVsaWdybzogZXN0w6FzIHNhbGllbmRvICVkIGNvbW1pdCBhdHLDoXMsIG5vIGVzdMOhIGNvbmVjdGFkb1xuIgorImEgbmluZ3VuYSByYW1hOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJQZWxpZ3JvOiBlc3TDoXMgc2FsaWVuZG8gJWQgY29tbWl0cyBhdHLDoXMsIG5vIGVzdMOhIGNvbmVjdGFkb1xuIgorImEgbmluZ3VuYSByYW1hOlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisiU2kgcXVpZXJlcyBjb25zZXJ2YXJsbyBjcmVhbmRvIHVuYSBudWV2YSByYW1hLCBlc3RlIGVzIHVuIGJ1ZW4gbW9tZW50b1xuIgorInBhcmEgaGFjZXJsbzpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bnVldm8tbm9tYnJlLWRlLXJhbWE+ICVzXG4iCisiXG4iCittc2dzdHJbMV0gIiIKKyJTaSBxdWllcmVzIGNvbnNlcnZhcmxvcyBjcmVhbmRvIHVuYSBudWV2YSByYW1hLCBlc3RlIGVzIHVuIGJ1ZW4gbW9tZW50b1xuIgorInBhcmEgaGFjZXJsbzpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bm9tYnJlLWRlLXJhbWE+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiZXJyb3IgaW50ZXJubyBlbiBjYW1pbm8gZGUgcmV2aXNpw7NuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICJMYSBwb3NpY2nDs24gcHJldmlhIGRlIEhFQUQgZXJhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA1MSBidWlsdGluL2NoZWNrb3V0LmM6MTI4NgorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIkVzdMOhcyBlbiB1bmEgcmFtYSBwb3IgbmFjZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc4Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkIgorbXNnc3RyICJzb2xvIHVuYSByZWZlcmVuY2lhIGVzcGVyYWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAic29sbyB1bmEgcmVmZXJlbmNpYSBlc3BlcmFkYSwgJWQgZW50cmVnYWRhcy4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKyInJXMnIHB1ZWRlIHNlciB0YW50byB1biBhcmNoaXZvIGxvY2FsIGNvbW8gdW5hIHJhbWEgZGUgcmFzdHJlby5cbiIKKyJQb3IgZmF2b3IgdXNlIC0tICh5IG9wY2lvbmFsbWVudGUgLS1uby1ndWVzcykgcGFyYSBkZXNhbWJpZ3VhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDUgYnVpbHRpbi93b3JrdHJlZS5jOjI5MCBidWlsdGluL3dvcmt0cmVlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicmVmZXJlbmNpYSBpbnbDoWxpZGE6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1OCBidWlsdGluL2NoZWNrb3V0LmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgImxhIHJlZmVyZW5jaWEgbm8gZXMgbiDDoXJib2w6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHRhZyAnJXMnIgorbXNnc3RyICJzZSBlc3BlcmFiYSB1biBicmFuY2gsIHNlIG9idHV2byB0YWcgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgInNlIGVzcGVyYSB1bmEgcmFtYSwgc2Ugb2J0dXZvIHVuYSByYW1hIHJlbW90YSAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwOCBidWlsdGluL2NoZWNrb3V0LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciCittc2dzdHIgInNlIGVzcGVyYWJhIGJyYW5jaCwgc2Ugb2J1dG8gJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAic2UgZXNwZXJhIHVuYSByYW1hLCBzZSBvYnR1dm8gY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzI3Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBjYW1iaWFyIGRlIGJyYW5jaCBkdXJhbnRlIHVuIG1lcmdlXG4iCisiQ29uc2lkZXJhIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG8gXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzMQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBjYW1iaWFyIGRlIGJyYW5jaCBlbiBtZWRpbyBkZSB1bmEgc2VzacOzbiBkZSBhbVxuIgorIkNvbnNpZGVyYSBcImdpdCBhbSAtLXF1aXRcIiBvIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzUKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisibm8gc2UgcHVlZGUgY2FtYmlhciBkZSBicmFuY2ggZHVyYW50ZSB1biByZWJhc2VcbiIKKyJDb25zaWRlcmEgXCJnaXQgcmViYXNlIC0tcXVpdFwiIG8gXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzOQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIGNhbWJpYXIgZGUgYnJhbmNoIGR1cmFudGUgdW4gY2hlcnJ5LXBpY2tcbiIKKyJDb25zaWRlcmEgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgbyBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQzCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBjYW1iaWFyIGRlIGJyYW5jaCBkdXJhbnRlIHVuIHJldmVydFxuIgorIkNvbnNpZGVyYSBcImdpdCByZXZlcnQgLS1xdWl0XCIgbyBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQ3Cittc2dpZCAieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIKK21zZ3N0ciAiZXN0w6FzIGNhbWJpYW5kbyByYW1hcyBkdXJhbnRlIHVuIGJpc2VjdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTQKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAicnV0YXMgbm8gcHVlZGVuIHNlciB1c2FkYXMgY29uIGNhbWJpb3MgZGUgcmFtYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTcgYnVpbHRpbi9jaGVja291dC5jOjEzNjEgYnVpbHRpbi9jaGVja291dC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyBubyBwdWVkZSBzZXIgdXNhZG8gY29uIGNhbWJpb3MgZGUgcmFtYXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzcyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MCBidWlsdGluL2NoZWNrb3V0LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiJyVzJyBubyBwdWVkZSBzZXIgdXNhZG8gY29uICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IHRha2UgPHN0YXJ0LXBvaW50PiIKK21zZ3N0ciAiJyVzJyBubyBwdWVkZSB0b21hciA8cHVudG8gZGUgcGFydGlkYT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJObyBzZSBwdWVkZSBjYW1iaWFyIHJhbWEgYSB1biAnJXMnIHNpbiBjb21taXRzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5NworbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIKK21zZ3N0ciAiZmFsdGEgYnJhbmNoIG8gY29tbWl0IGNvbW8gYXJndW1lbnRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQzOSBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MgorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTMgYnVpbHRpbi9mZXRjaC5jOjE2NyBidWlsdGluL21lcmdlLmM6Mjg1CisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNyBidWlsdGluL3B1bGwuYzoxMzggYnVpbHRpbi9wdXNoLmM6NTYzCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiZm9yemFyIGVsIHJlcG9ydGUgZGUgcHJvZ3Jlc28iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQwCittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgInJlYWxpemFyIHVuYSBmdXNpw7NuIGRlIHRyZXMgdsOtYXMgY29uIGxhIHJhbWEgbnVldmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQxIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgImVzdGlsbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDIKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICJjb25mbGljdG8gZGUgZXN0aWxvcyAobWVyZ2UgbyBkaWZmMykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU0IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDMKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgImRlc2Fjb3BsYXIgSEVBRCBlbiBlbCBjb21taXQgbm9tYnJhZG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU1Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgImNvbmZpZ3VyYXIgaW5mbyBkZSB1cHN0cmVhbSBwYXJhIHVuYSByYW1hIG51ZXZhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NworbXNnaWQgImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIgorbXNnc3RyICJmb3J6YXIgZWwgY2hlY2tvdXQgKGRlc2NhcnRhciBtb2RpZmljYWNpb25lcyBsb2NhbGVzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJudWV2YS1yYW1hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1OQorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAibnVldmEgcmFtYSBubyBlbXBhcmVudGFkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjEgYnVpbHRpbi9tZXJnZS5jOjI4OAorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiYWN0dWFsaXphciBhcmNoaXZvcyBpZ25vcmFkb3MgKGRlZmF1bHQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2NAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAibm8gcmV2aXNlIHNpIG90cm8gw6FyYm9sIGRlIHRyYWJham8gY29udGllbmUgbGEgcmVmIGVudHJlZ2FkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzcKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImhhY2VyIGNoZWNrb3V0IGEgIG51ZXN0cmEgdmVyc2nDs24gcGFyYSBhcmNoaXZvcyBzaW4gZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgwCittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImhhY2VyIGNoZWNrb3V0IGEgc3UgdmVyc2nDs24gcGFyYSBsb3MgYXJjaGl2b3Mgc2luIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAibm8gbGltaXRhciBwYXRoc3BlY3MgYSBkaXNwZXJzYXIgZW50cmFkYXMgc29sYW1lbnRlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUzNworbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIHkgLS1vcnBoYW4gc29uIG11dHVhbWVudGUgZXhjbHVzaXZhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NDAKK21zZ2lkICItcCBhbmQgLS1vdmVybGF5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1wIHkgLS1vdmVybGF5IHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTc3Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIG5lY2VzaXRhIGVsIG5vbWJyZSBkZSB1bmEgcmFtYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1ODIKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgImZhbHRhIG5vbWJyZSBkZSByYW1hOyBwcnVlYmEgLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICVzIgorbXNnc3RyICJubyBzZSBwdWRvIHJlc29sdmVyICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzMQorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJlc3BlY2lmaWNhY2nDs24gZGUgcnV0YSBpbnbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiclcycgbm8gZXMgdW4gY29tbWl0IHkgdW5hIHJhbWEgJyVzJyBubyBwdWVkZSBzZXIgY3JlYWRhIGRlc2RlIGVzdGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBubyB0b21hIHVuIGFyZ3VtZW50byBkZSBydXRhICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzIGluY29tcGF0aWJsZSBjb24gLS1kZXRhY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU0IGJ1aWx0aW4vcmVzZXQuYzozMjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBlcyBpbmNvbXBhdGlibGUgY29uIC0tcGF0Y2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1Cittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgeSAtLW1lcmdlIHNvbiBpbmNvbXBhdGlibGVzIGN1YW5kb1xuIgorInNlIHJldmlzYSBmdWVyYSBkZWwgw61uZGljZS4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjcwCittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgImRlYmVzIGVzcGVjaWZpY2FyIHBhdGgocykgcGFyYSByZXN0YXVyYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIG1hdGNoZWQgbW9yZSB0aGFuIG9uZSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLlxuIgorIldlIGZvdW5kICVkIHJlbW90ZXMgd2l0aCBhIHJlZmVyZW5jZSB0aGF0IG1hdGNoZWQuIFNvIHdlIGZlbGwgYmFja1xuIgorIm9uIHRyeWluZyB0byByZXNvbHZlIHRoZSBhcmd1bWVudCBhcyBhIHBhdGgsIGJ1dCBmYWlsZWQgdGhlcmUgdG9vIVxuIgorIlxuIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorIlxuIgorIklmIHlvdSdkIGxpa2UgdG8gYWx3YXlzIGhhdmUgY2hlY2tvdXRzIG9mIGFuIGFtYmlndW91cyA8bmFtZT4gcHJlZmVyXG4iCisib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIgorbXNnc3RyICIiCisiJyVzJyBhY2VydMOzIG3DoXMgZGUgdW5hIHJhbWEgcmVtb3RhIHJhc3RyZWFkYS5cbiIKKyJFbmNvbnRyYW1vcyAlZCByZW1vdG9zIGNvbiB1bmEgcmVmZXJlbmNpYSBxdWUgY29uY3VlcmRhLiBBc8OtIHF1ZSB2b2x2ZW1vc1xuIgorImEgaW50ZW50YXIgcmVzb2x2ZXIgZWwgYXJndW1lbnRvIGNvbW8gdW5hIHJ1dGEsIMKhcGVybyBlc28gdGFtYmnDqW4gZmFsbMOzIVxuIgorIlxuIgorIlNpIHF1ZXLDrWFzIGhhY2VyIHVuIGNoZWNrIG91dCBhIHVuYSByYW1hIHJhc3RyZWFkYSByZW1vdGEsIGNvbW8gJ29yaWdpbicsXG4iCisicHVlZGVzIGhhY2VybG8gcHJvcG9yY2lvbmFuZG8gZWwgbm9tYnJlIGNvbXBsZXRvIGNvbiBsYSBvcGNpw7NuIC0tdHJhY2s6XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bm9tYnJlPlxuIgorIlxuIgorIlNpIHF1aXNpZXJhcyBxdWUgc2llbXByZSBsb3MgY2hlY2tvdXRzIGRlIG5vbWJyZXMgYW1iaWd1b3MgcHJlZmllcmFuIHVuYSAiCisicmFtYVxuIgorImRlIG5vbWJyZSA8bm9tYnJlPiByZW1vdGEsIGNvbW8gJ29yaWdpbicsIGNvbnNpZGVyYSBjb25maWd1cmFyXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gZW4gdHUgY29uZmlndXJhY2nDs24uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNCBidWlsdGluL2NoZWNrb3V0LmM6MTcxNiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NQorIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjcgYnVpbHRpbi9jbG9uZS5jOjEyMSBidWlsdGluL3JlbW90ZS5jOjE2OQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEgYnVpbHRpbi93b3JrdHJlZS5jOjQ5OSBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAiYnJhbmNoIgorbXNnc3RyICJyYW1hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhciB5IGhhY2VyIGNoZWNrb3V0IGEgdW5hIG51ZXZhIHJhbWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYXIvcmVpbmljaWFyIHkgaGFjZXIgY2hlY2tvdXQgYSB1bmEgcmFtYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhciB1biByZWZsb2cgcGFyYSB1bmEgbnVldmEgcmFtYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyAoZGVmYXVsdCkiCittc2dzdHIgImFkaXZpbmFyIHNlZ3VuZGEgb3BjacOzbiAnZ2l0IGNoZWNrb3V0IDxuby1oYXktdGFsLXJhbWE+JyAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIxCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSAoZGVmYXVsdCkiCittc2dzdHIgInVzYXIgbW9kbyBvdmVybGF5IChkZWZhdWx0KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjYKK21zZ2lkICJjcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2giCittc2dzdHIgImNyZWFyIHkgaGFjZXIgc3dpdGNoIGEgdW5hIG51ZXZhIHJhbWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY4Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giCittc2dzdHIgImNyZWFyL3JlaW5pY2lhciB5IGhhY2VyIHN3aXRjaCBhIHVuYSByYW1hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3MAorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IHN3aXRjaCA8bm8tc3VjaC1icmFuY2g+JyIKK21zZ3N0ciAiYWRpdmluYXIgc2VndW5kYSBvcGNpw7NuICdnaXQgY2hlY2tvdXQgPG5vLWhheS10YWwtcmFtYT4nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3MgorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiZGVzY2FydGFyIG1vZGlmaWNhY2lvbmVzIGxvY2FsZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA0Cittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAiZGUgcXXDqSDDoXJib2wgaGFjZXIgZWwgY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA2Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgInJlc3RhdXJhciBlbCBpbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDgKK21zZ2lkICJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIgorbXNnc3RyICJyZXN0YXVyYXIgZWwgw6FyYm9sIGRlIHRyYWJham8gKGRlZmF1bHQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMAorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJpZ25vcmFyIGVudHJhZGFzIG5vIGZ1c2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODExCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSIKK21zZ3N0ciAidXNhciBtb2RvIG92ZXJsYXkiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0csOzbj5dIFsteCB8IC1YXSBbLS1dIDxydXRhcz4uLi4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICJCb3JyYW5kbyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIlNlcmEgYm9ycmFkbyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJTYWx0YW5kbyByZXBvc2l0b3JpbyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIlNlIHNhbHRhcmEgcmVwb3NpdG9yaW8gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgImZhbGzDsyBhbCBib3JyYXIgJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbHN0YXQgJXNcbiIKK21zZ3N0ciAibm8gc2UgcHVkbyBsc3RhdCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAiIgorIkF5dWRhIHLDoXBpZGE6XG4iCisiMSAgICAgICAgICAtIHNlbGVjY2lvbmEgdW4gb2JqZXRvIHBvciBudW1lcm9cbiIKKyJmb28gICAgICAgIC0gc2VsZWNjaW9uYSB1biBvYmpldG8gYmFzYWRvIGVuIHVuIHByZWZpam8gw7puaWNvXG4iCisiICAgICAgICAgICAtICh2YWPDrW8pIG5vIGVsZWdpciBuYWRhXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgIiIKKyJBeXVkYSByw6FwaWRhOlxuIgorIjEgICAgICAgICAgLSBzZWxlY2Npb25hIHVuIG9iamV0byDDum5pY29cbiIKKyIzLTUgICAgICAgIC0gc2VsZWNjaW9uYSB1biByYW5nbyBkZSBvYmpldG9zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjY2lvbmEgbcO6bHRpcGxlcyByYW5nb3NcbiIKKyJmb28gICAgICAgIC0gc2VsZWNjaW9uYSB1biBvYmpldG8gYmFzYWRvIGVuIHVuIHByZWZpam8gw7puaWNvXG4iCisiLS4uLiAgICAgICAtIGRlLXNlbGVjY2lvbmFyIG9iamV0b3MgZXNwZWNpZmljYWRvc1xuIgorIiogICAgICAgICAgLSBlc2NvZ2VyIHRvZG9zIGxvcyBvYmpldG9zXG4iCisiICAgICAgICAgICAtICh2YWPDrW8pIHRlcm1pbmFyIHNlbGVjY2nDs25cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICLCv0FoaCAoJXMpP1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiSW5wdXQgaWdub3JhIGxvcyBwYXRyb25lcyA+PiAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIlBFTElHUk86IE5vIHNlIHB1ZWRlIGVuY29udHJhciBvYmpldG9zIHF1ZSBjb25jdWVyZGVuIGNvbjogJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICJTZWxlY2Npb25hciBvYmpldG9zIHBhcmEgYm9ycmFyIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgIsK/Qm9ycmFyICVzIFt5L05dPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBjb21lbnphciBsYSBsaW1waWV6YVxuIgorImZpbHRyYXIgcG9yIHBhdHLDs24gICAtIGV4Y2x1eWUgb2JqZXRvcyBkZWwgYm9ycmFkbyBcbiIKKyJlbGVnaXIgcG9yIG7Dum1lcm9zICAgLSBzZWxlY2Npb25hIG9iamV0b3MgYSBzZXIgYm9ycmFkb3MgcG9yIG51bWVyb1xuIgorInByZWd1bnRhciBjYWRhIHVubyAgICAgLSBjb25maXJtYXIgY2FkYSBib3JyYWRvIChjb21vIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gcGFyYXIgbGltcGllemFcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gZXN0YSB2ZW50YW5hXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGF5dWRhIHBhcmEgc2VsZWNjacOzbiBkZSBvcGNpb25lcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIlNlIGVsaW1pbmFyw6EgZWwgc2lndWllbnRlIG9iamV0bzoiCittc2dzdHJbMV0gIlNlIGVsaW1pbmFyw6FuIGxvcyBzaWd1aWVudGVzIG9iamV0b3M6IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIk5vIGhheSBtw6FzIGFyY2hpdm9zIHBhcmEgbGltcGlhciwgc2FsaWVuZG8uIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA5Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgIm5vIGltcHJpbWlyIG5vbWJyZXMgZGUgYXJjaGl2b3MgYm9ycmFkb3MiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiZm9yemFyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgImxpbXBpZXphIGludGVyYWN0aXZhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE0Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJib3JyYXIgZGlyZWN0b3Jpb3MgY29tcGxldG9zIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDggYnVpbHRpbi9kZXNjcmliZS5jOjU1MAorIzogYnVpbHRpbi9ncmVwLmM6OTAxIGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjQgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgInBhdHLDs24iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTYKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiYWdyZWdhciA8cGF0csOzbj4gcGFyYSBpZ25vcmFyIHJlZ2xhcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgImJvcnJhciBhcmNoaXZvcyBpZ25vcmFkb3MsIHRhbWJpw6luIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiYm9ycmFyIHNvbG8gYXJjaGl2b3MgaWdub3JhZG9zIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM3Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCB5IC1YIG5vIHB1ZWRlbiBzZXIgdXNhZGFzIGp1bnRhcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBjb25maWd1cmFkbyBjb21vIHRydWUgeSBuaW5ndW5vIC1pLCAtbiwgbmkgLWYgZW50cmVnYWRvczsgIgorInJlaHVzYW5kbyBlbCBjbGVhbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHQgZW4gdHJ1ZSB5IG5pbmd1bm8gLWksIC1uLCBuaSAtZiBlbnRyZWdhZG9zOyAiCisicmVodXNhbmRvIGVsIGNsZWFuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8b3BjaW9uZXM+XSBbLS1dIDxyZXBvPiBbPGRpcmVjdG9yaW8+XSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzCittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgIm5vIGNyZWFyIGNoZWNrb3V0IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQgYnVpbHRpbi9jbG9uZS5jOjk2IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4OQorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY3JlYXIgdW4gcmVwb3NpdG9yaW8gdmFjw61vIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiY3JlYXIgdW4gcmVwb3NpdG9yaW8gZXNwZWpvIChpbXBsaWNhIHZhY8OtbykiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY2xvbmFyIGRlIHVuIHJlcG9zaXRvcmlvIGxvY2FsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIm5vIHVzYXIgaGFyZGxpbmtzLCBzaWVtcHJlIGNvcGlhciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJjb25maWd1cmFyIGNvbW8gcmVwb3NpdG9yaW8gY29tcGFydGlkbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICJwYXRoc3BlYyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgImluaWNpYWxpemFyIHN1Ym3Ds2R1bG9zIGVuIGVsIGNsb25hZG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm51bWVybyBkZSBzdWJtw7NkdWxvcyBjbG9uYWRvcyBlbiBwYXJhbGVsbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgImRpcmVjdG9yaW8tdGVtcGxhdGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTIgYnVpbHRpbi9pbml0LWRiLmM6NDg3Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAiZGlyZWN0b3JpbyBkZWwgY3VhbCBsb3MgdGVtcGxhdGVzIHNlcsOhbiB1c2Fkb3MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQgYnVpbHRpbi9jbG9uZS5jOjExNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODUKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAicmVwb3NpdG9yaW8gZGUgcmVmZXJlbmNpYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODcKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICJ1c2EtLXJlZmVyZW5jZSAgc29sYW1lbnRlIHNpIGVzdMOhcyBjbG9uYWRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NCBidWlsdGluL3JlcGFjay5jOjMyNworbXNnaWQgIm5hbWUiCittc2dzdHIgIm5vbWJyZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAidXNlIDxub21icmU+IGVuIGx1Z2FyIGRlICdvcmlnaW4nIHBhcmEgcmFzdHJlYXIgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjIKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICJjaGVja291dCA8cmFtYT4gZW4gbHVnYXIgZGUgSEVBRCByZW1vdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICJydXRhIHBhcmEgZ2l0LXVwbG9hZC1wYWNrIGVuIGVsIHJlbW90byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjg0MAorIzogYnVpbHRpbi9wdWxsLmM6MjI3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgInByb2Z1bmRpZGFkIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI2Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJjcmVhciB1biBjbG9uIHN1cGVyZmljaWFsIHBhcmEgZXNhIHByb2Z1bmRpZGFkIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgzCittc2dpZCAidGltZSIKK21zZ3N0ciAidGllbXBvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgImNyZWFyIHVuIGNsb24gc3VwZXJmaWNpYWwgZGVzZGUgZWwgdGllbXBvIGVzcGVjw61maWNvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5IGJ1aWx0aW4vZmV0Y2guYzoxNzIgYnVpbHRpbi9mZXRjaC5jOjE5NQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ1Cittc2dpZCAicmV2aXNpb24iCittc2dzdHIgInJldmlzaW9uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMwIGJ1aWx0aW4vZmV0Y2guYzoxNzMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICJhaG9uZGFuZG8gaGlzdG9yaWEgZGUgY2xvbiBzdXBlcmZpY2lhbCwgZXhjbHV5ZW5kbyByZXYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgImNsb25hciBzb2xvIHVuYSByYW1hLEhFQUQgbyAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAibm8gY2xvbmFyIG5pbmfDum4gdGFnLCB5IGhhY2VyIHF1ZSBsb3Mgc3Vic2lndWllbnRlcyBmZXRjaCBubyBsb3Mgc2lnYW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICJjdWFscXVpZXIgc3VibcOzZHVsbyBjbG9uYWRvIHNlcsOhIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l0ZGlyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgInNlcGFyYSBnaXQgZGlyIGRlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAibGxhdmU9dmFsb3IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgImNvbmZpZ3VyYXIgY29uZmlnIGRlbnRybyBkZWwgbnVldm8gcmVwb3NpdG9yaW8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgImVzcGVjaWZpY28tZGUtc2Vydmlkb3IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgIm9wY2nDs24gcGFyYSB0cmFzbWl0aXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDMgYnVpbHRpbi9mZXRjaC5jOjE5MSBidWlsdGluL3B1bGwuYzoyNDAKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NAorbXNnaWQgInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJzb2xvIHVzYXIgZGlyZWNjaW9uZXMgSVB2NCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjI0MworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgInNvbG8gdXNhciBkaXJlY2Npb25lcyBJUHY2IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImN1YWxxdWllciBzdWJtw7NkdWxvIGNsb25hZG8gdXNhcsOhIHN1IGJyYW5jaCBkZSByYXN0cmVvIHJlbW90byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIiIKKyJpbmljaWFsaXphciBhcmNoaXZvIHNwYXJzZS1jaGVja291dCBwYXJhIGluY2x1aXIgc29sbyBhcmNoaXZvcyBlbiBsYSByYcOteiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyJObyBzZSBwdWRvIGFkaXZpbmFyIG5pbmfDum4gbm9tYnJlIGRlIGRpcmVjdG9yaW8uXG4iCisiUG9yIGZhdm9yIGVzcGVjaWZpcXVlIHVuIGRpcmVjdG9yaW8gZW4gbGEgbMOtbmVhIGRlIGNvbWFuZG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgImluZm86IE5vIHNlIHB1ZG8gYWdyZWdhciB1biBhbHRlcm5vIHBhcmEgJyVzJzogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXhpc3RlIHBlcm8gbm8gZXMgdW4gZGlyZWN0b3JpbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgaW5pY2lhciBlbCBpdGVyYWRvciBzb2JyZSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgY3JlYXIgbGluayAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNvcGlhciBhcmNoaXZvIGEgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciCittc2dzdHIgImZhbGzDsyBhbCBpdGVyYXIgc29icmUgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICJoZWNoby5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjUwOAorbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHdpdGggJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iCittc2dzdHIgIiIKKyJDbG9uYWRvIGV4aXRvc28sIHBlcm8gZmFsbMOzIGVsIGNoZWNrb3V0LlxuIgorIlB1ZWRlcyBpbnNwZWNjaW9uYXIgYSBxdcOpIHNlIGhpem8gY2hlY2tvdXQgY29uICdnaXQgc3RhdHVzJ1xuIgorInkgdm9sdmVyIGEgaW50ZW50YXJsbyBjb24gJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIk5vIHNlIHB1ZG8gZW5jb250cmFyIGxhIHJhbWEgcmVtb3RhICVzIHBhcmEgY2xvbmFyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIGFjdHVhbGl6YXIgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NTIKK21zZ2lkICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgImZhbGzDsyBhbCBpbmljaWFsaXphciBzcGFyc2UtY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzUKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyJyZW1vdG8gSEVBRCByZWZpZXJlIGEgdW4gcmVmIGluZXhpc3RlbnRlLCBubyBzZSBwdWVkZSBoYWNlciBjaGVja291dC5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgcmVhbGl6YXIgY2hlY2tvdXQgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NTYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcGFyYW1ldGVycyB0byBjb25maWcgZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciBwYXLDoW1ldHJvcyBhbCBhcmNoaXZvIGNvbmZpZyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxOQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlZW1wYXF1ZXRhciBwYXJhIGxpbXBpYXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjEKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGRlc3ZpbmN1bGFyIGFyY2hpdm9zIGFsdGVybm9zIHRlbXBvcmFsZXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTkgYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTQ4Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiTXVjaG9zIGFyZ3VtZW50b3MuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTYzCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJUaWVuZXMgcXVlIGVzcGVjaWZpY2FyIHVuIHJlcG9zaXRvcmlvIHBhcmEgY2xvbmFyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkxhcyBvcGNpb25lcyAtLWJhcmUgeSAtLW9yaWdpbiAlcyBzb24gaW5jb21wYXRpYmxlcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzkKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlIHkgLS1zZXBhcmF0ZS1naXQtZGlyIHNvbiBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgInJlcG9zaXRvcmlvICclcycgbm8gZXhpc3RlIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4IGJ1aWx0aW4vZmV0Y2guYzoxNzg3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAicHJvZnVuZGlkYWQgJXMgbm8gZXMgdW4gbnVtZXJvIHBvc2l0aXZvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICJsYSBydXRhIGRlIGRlc3Rpbm8gJyVzJyB5YSBleGlzdGUgeSBubyBlcyB1biBkaXJlY3RvcmlvIHZhY8Otby4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiZGlyZWN0b3JpbyBkZSB0cmFiYWpvICclcycgeWEgZXhpc3RlLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzMgYnVpbHRpbi9jbG9uZS5jOjEwNTQgYnVpbHRpbi9kaWZmdG9vbC5jOjI3MQorIzogYnVpbHRpbi9sb2cuYzoxODY2IGJ1aWx0aW4vd29ya3RyZWUuYzozMDIgYnVpbHRpbi93b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBkaXJlY3RvcmlvcyBwcmluY2lwYWxlcyBkZSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciB1biDDoXJib2wgZGUgdHJhYmFqbyAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFuZG8gZW4gdW4gcmVwb3NpdG9yaW8gdmFjw61vICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFuZG8gZW4gJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA4NAorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgbm8gZXMgY29tcGF0aWJsZSBjb24gLS1yZWZlcmVuY2UgeSAtLXJlZmVyZW5jZS1pZi1hYmxlIGFsICIKKyJtaXNtbyB0aWVtcG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQ4Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZGVwdGggZXMgaWdub3JhZGEgZW4gY2xvbmFjaW9uZXMgbG9jYWxlczsgdXNhIGZpbGU6Ly8gbcOhcyBiaWVuLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTAKK21zZ2lkICItLXNoYWxsb3ctc2luY2UgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLXNoYWxsb3ctc2luY2UgZXMgaWdub3JhZG8gZW4gZWwgY2xvbiBsb2NhbDsgdXNlIGZpbGU6Ly8gLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTIKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tc2hhbGxvdy1leGNsdWRlIGVzIGlnbm9yYWRvIGVuIGNsb25lcyBsb2NhbGVzOyB1c2UgZmlsZTovLy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU0Cittc2dpZCAiLS1maWx0ZXIgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWZpbHRlciBlcyBpZ25vcmFkbyBlbiBjbG9uZXMgbG9jYWxlczsgdXNhIGZpbGU6Ly8gZW4gc3UgbHVnYXIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NworbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgInJlcG9zaXRvcmlvIGZ1ZW50ZSBlcyBzdXBlcmZpY2lhbCwgaWdub3JhbmRvIC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYyCittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICItLWxvY2FsIGVzIGlnbm9yYWRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIzNyBidWlsdGluL2Nsb25lLmM6MTI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiUmFtYSByZW1vdGEgJXMgbm8gZW5jb250cmFkYSBlbiB1cHN0cmVhbSAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNDgKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJQYXJlY2VzIGhhYmVyIGNsb25hZG8gdW4gcmVwb3NpdG9yaW8gc2luIGNvbnRlbmlkby4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNworbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAicmV2aXNhIGxhcyB2YXJpYWJsZXMgZGUgY29uZmlndXJhY2lvbmVzIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI4IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJjYXBhIGEgdXNhciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIkFuY2hvIG3DoXhpbW8iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICJSZWFsaXphbmRvIHBhZGRpbmcgZW4gZWwgYm9yZGUgaXpxdWllcmRvIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIlJlYWxpemFuZG8gcGFkZGluZyBlbiBlbCBib3JkZSBkZXJlY2hvIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIlJlYWxpemFuZG8gcGFkZGluZyBlbnRyZSBjb2x1bW5hcyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIGRlYmUgc2VyIGVsIHByaW1lciBhcmd1bWVudG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmlsZT4pLi4uXSA8dHJlZT4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFkcmU+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZW5zYWplPikuLi5dIFsoLUYgIgorIjxhcmNoaXZvPikuLi5dIDzDoXJib2w+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICJwYWRyZSBkdXBsaWNhZG8gJXMgaWdub3JhZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJubyBlcyB1biBub21icmUgZGUgb2JqZXRvIHbDoWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogZmFsbMOzIGFsIGFicmlyICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogZmFsbMOzIGFsIGxlZXIgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZTogZmFsbMOzIGFsIGNlcnJhciAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICJwYWRyZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMgorbXNnaWQgImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiCittc2dzdHIgImlkIGRlbCBvYmpldG8gY29tbWl0IHBhZHJlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NiBidWlsdGluL21lcmdlLmM6MjcwCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NjkKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAibWVuc2FqZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNSBidWlsdGluL2NvbW1pdC5jOjE0OTYKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibWVuc2FqZSBkZWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE4Cittc2dpZCAicmVhZCBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsZWVyIG1lbnNhamUgZGUgY29tbWl0IGRlc2RlIHVuIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjEgYnVpbHRpbi9jb21taXQuYzoxNTA4IGJ1aWx0aW4vbWVyZ2UuYzoyODcKKyM6IGJ1aWx0aW4vcHVsbC5jOjE5NSBidWlsdGluL3JldmVydC5jOjExOAorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAiRmlybWFyIGNvbW1pdCBjb24gR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgInRpZW5lIHF1ZSBkYXIgZXhhY3RhbWVudGUgdW4gw6FyYm9sIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBmYWxsw7MgYWwgbGVlciIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MQorbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs8b3BjaW9uZXM+XSBbLS1dIDxlc3BlY2lmaWNhY2nDs24tZGUtcnV0YT4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDYKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPG9wY2lvbmVzPl0gWy0tXSA8ZXNwZWNpZmljYWNpw7NuLWRlLXJ1dGE+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiSGFzIHNvbGljaXRhZG8gdW4gYW1lbmQgZW4gdHUgY29tbWl0IG3DoXMgcmVjaWVudGUsIHBlcm8gaGFjZXJsbyBsbyBcbiIKKyJ2YWNpYXLDrWEuIFB1ZWRlcyByZXBldGlyIGVsIGNvbWFuZG8gY29uIC0tYWxvdy1lbXB0eSwgbyBwdWVkZXMgZWxpbWluYXJcbiIKKyJlbCBjb21taXQgY29tcGxldGFtZW50ZSBjb24gXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiRWwgY2hlcnJ5LXBpY2sgYW50ZXJpb3IgYWhvcmEgZXN0w6EgdmFjw61vLCBwb3NpYmxlbWVudGUgcG9yIHVuIGNvbmZsaWN0byBkZSAiCisicmVzb2x1Y2nDs24uXG4iCisiU2kgZGVzZWFzIHJlYWxpemFyIHVuIGNvbW1pdCBkZSB0b2RhcyBtYW5lcmFzLCB1c2E6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJDYXNvIGNvbnRyYXJpbywgcG9yIGZhdm9yIHVzYSAnZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCdcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorInkgbHVlZ28gdXNhOlxuIgorIlxuIgorIiAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisicGFyYSByZXN1bWlyIGVsIGNoZXJyeS1waWNrIGNvbiBsb3MgY29tbWl0cyBmYWx0YW50ZXMuXG4iCisiU2kgZGVzZWFzIHNhbHRhciBlbCBjb21taXQsIHVzYTpcbiIKKyJcbiIKKyIgICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMTUKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgImZhbGzDsyBhbCBkZXNlbXBhcXVldGFyIG9iamV0byBkZWwgw6FyYm9sIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBjb24gLWEgbm8gdGllbmUgc2VudGlkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIk5vIGhheSBydXRhcyBjb24gLS1pbmNsdWRlLy0tb25seSBubyB0aWVuZSBzZW50aWRvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBjcmVhciB1biDDrW5kaWNlIHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4MgorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImFkaWNpw7NuIGludGVyYWN0aXZhIGZhbGxpZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzk2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWN0dWFsaXphciBlbCDDrW5kaWNlIHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5OAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJGYWxsw7MgYWwgYWN0dWFsaXphciBlbCBjYWNoZSBwcmluY2lwYWwgZGVsIMOhcmJvbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjMgYnVpbHRpbi9jb21taXQuYzo0NDYgYnVpbHRpbi9jb21taXQuYzo0OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZXNjcmliaXIgYXJjaGl2byBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc1Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICJubyBzZSBwdWVkZSByZWFsaXphciB1biBjb21taXQgcGFyY2lhbCBkdXJhbnRlIHVuYSBmdXNpw7NuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzcKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlYWxpemFyIHVuIGNvbW1pdCBwYXJjaWFsIGR1cmFudGUgdW4gY2hlcnJ5LXBpY2suIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4NQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUwNAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBlc2NyaWJpciBlbCDDrW5kaWNlIHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJjb21taXQgJyVzJyByZXF1aWVyZSBjYWJlY2VyYSBkZSBhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiZWwgY29tbWl0ICclcycgdGllbmUgdW5hIGzDrW5lYSBkZSBhdXRvciBtYWwgZm9ybWFkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MjMKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICJwYXLDoW1ldHJvIC0tYXV0aG9yIG1hbCBmb3JtYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY3NgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisibm8gZXMgcG9zaWJsZSBzZWxlY2Npb25hciB1biBjYXLDoWN0ZXIgZGUgY29tZW50YXJpbyBxdWUgbm8gZXMgdXNhZG9cbiIKKyJlbiBlbCBtZW5zYWplIGRlIGNvbW1pdCBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE0IGJ1aWx0aW4vY29tbWl0LmM6NzQ3IGJ1aWx0aW4vY29tbWl0LmM6MTA5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyByZXZpc2FyIGVsIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjYgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIobGV5ZW5kbyBtZW5zYWplcyBkZSBsb2dzIGRlc2RlIHN0YW5kYXJkIGlucHV0KVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyOAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgbG9nIGRlc2RlIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgZWwgbG9nICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzYzIGJ1aWx0aW4vY29tbWl0LmM6Nzc5Cittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzcwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIm5vIHNlIHB1ZG8gZXNjcmliaXIgZWwgdGVtcGxhdGUgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiUGFyZWNlIHF1ZSBlc3TDoXMgaGFjaWVuZG8gdW4gY29tbWl0IGNvbiB1bmEgZnVzacOzbiBkZW50cm8uXG4iCisiU2kgZXN0byBubyBlcyBjb3JyZWN0bywgcG9yIGZhdm9yIGVsaW1pbmEgZWwgYXJjaGl2b1xuIgorIlx0JXNcbiIKKyJ5IHZ1ZWx2ZSBhIGludGVudGFyLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQYXJlY2UgcXVlIHB1ZWRlcyBlc3RhciBoYWNpZW5kbyB1biBjb21taXQgYSB1biBjaGVycnktcGljay5cbiIKKyJTaSBlc3RvIG5vIGVzIGNvcnJlY3RvLCBwb3IgZmF2b3IgZWxpbWluYSBlbCBhcmNoaXZvXG4iCisiXHQlc1xuIgorInkgdnVlbHZlIGEgaW50ZW50YXIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJQb3IgZmF2b3IgaW5ncmVzYSBlbCBtZW5zYWplIGRlbCBjb21taXQgcGFyYSB0dXMgY2FtYmlvcy4gTGFzXG4iCisiIGzDrW5lYXMgcXVlIGNvbWllbmNlbiBjb24gJyVjJyBzZXLDoW4gaWdub3JhZGFzLCB5IHVuIG1lbnNhamVcbiIKKyIgdmFjw61vIGFib3J0YSBlbCBjb21taXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiUG9yIGZhdm9yIGluZ3Jlc2EgZWwgbWVuc2FqZSBkZWwgY29tbWl0IHBhcmEgdHVzIGNhbWJpb3MuIExhc1xuIgorIiBsw61uZWFzIHF1ZSBjb21pZW5jZW4gY29uICclYycgc2Vyw6FuIGd1YXJkYWRhczsgcHVlZGUgZWxpbWluYXJsYXNcbiIKKyIgdXN0ZWQgbWlzbW8gc2kgbG8gZGVzZWEuXG4iCisiVW4gbWVuc2FqZSB2YWPDrW8gYWJvcnRhIGVsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0F1dG9yOiAgICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNGZWNoYTogICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjUKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgbGVlciBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5MgorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJFcnJvciBhbCBjb25zdHJ1aXIgbG9zIMOhcmJvbGVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDYgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJQb3IgZmF2b3Igc3VtaW5pc3RyYSBlbCBtZW5zYWplIHVzYW5kbyBsYXMgb3BjaW9uZXMgLW0gbyAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yICclcycgbm8gZXN0w6EgZW4gZWwgZm9ybWF0byAnTmFtZSA8ZW1haWw+JyB5IG5vIGNvbmN1ZXJkYSBjb24gbmluZ8O6biAiCisiYXV0b3IgZXhpc3RlbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAiTW9kbyBpZ25vcmFkbyBpbnbDoWxpZG8gJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDgyIGJ1aWx0aW4vY29tbWl0LmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIk1vZG8gaW52w6FsaWRvIGRlIGxvcyBhcmNoaXZvcyBubyByYXN0cmVhZG9zICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyMgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIHkgLXogc29uIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NgorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIlVzYXIgYW1ib3MgLS1yZXNldC1hdXRob3IgeSAtLWF1dGhvciBubyB0aWVuZSBzZW50aWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzUKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiTm8gdGllbmVzIG5hZGEgcXVlIGVubWVuZGFyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc4Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiRXN0w6FzIGVuIG1lZGlvIGRlIHVuYSBmdXNpw7NuIC0tIG5vIHB1ZWRlcyBlbm1lbmRhci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkVzdMOhIGVuIG1lZGlvIGRlIHVuIGNoZXJyeS1waWNrIC0tIG5vIHNlIHB1ZWRlIGVubWVuZGFyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiT3BjaW9uZXMgLS1zcXVhc2ggeSAtLWZpeHVwIG5vIHB1ZWRlbiBzZXIgdXNhZGFzIGp1bnRhcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIlNvbG8gdW5vIGRlIC1jLy1DLy1GLy0tZml4dXAgcHVlZGUgc2VyIHVzYWRvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiTGEgb3BjacOzbiAtbSBubyBwdWVkZSBzZXIgY29tYmluYWRhIGNvbiAtYy8tQy8tRi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwMworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIHPDs2xvIHB1ZWRlIHNlciB1c2FkYSBjb24gLUMsIC1jIG8gLS1hbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyMAorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorIlNvbG8gdW5vIGRlIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIHB1ZWRlIHNlciB1c2Fkby4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgInBhdGhzICclcyAuLi4nIGNvbiAtYSBubyB0aWVuZSBzZW50aWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTcgYnVpbHRpbi9jb21taXQuYzoxNTE5Cittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJtb3N0cmFyIHN0YXR1cyBkZSBtYW5lcmEgY29uY2lzYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU5IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJtb3N0cmFyIGluZm9ybWFjacOzbiBkZSBsYSByYW1hIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjEKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJtb3N0cmFyIGluZm9ybWFjacOzbiBkZWwgc3Rhc2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MyBidWlsdGluL2NvbW1pdC5jOjE1MjMKK21zZ2lkICJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIKK21zZ3N0ciAiY2FsY3VsYXIgdG9kb3MgbG9zIHZhbG9yZXMgZGVsYW50ZS9hdHLDoXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NQorbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NSBidWlsdGluL2NvbW1pdC5jOjE1MjUgYnVpbHRpbi9wdXNoLmM6NTQ5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjUwCittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgIm91dHB1dCBmb3JtYXRvLW1hcXVpbmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OCBidWlsdGluL2NvbW1pdC5jOjE1MjcKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgIm1vc3RyYXIgc3RhdHVzIGVuIGZvcm1hdG8gbGFyZ28gKGRlZmF1bHQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzEgYnVpbHRpbi9jb21taXQuYzoxNTMwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgInRlcm1pbmFyIGVudHJhZGFzIGNvbiBOVUwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjEzNzcgYnVpbHRpbi9jb21taXQuYzoxNTMzCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTI1IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICJtb2RvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzQgYnVpbHRpbi9jb21taXQuYzoxNTMzCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisibW9zdHJhciBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8sIG1vZG9zIG9wY2lvbmFsZXM6IGFsbCwgbm9ybWFsLCBuby4gIgorIihQcmVkZXRlcm1pbmFkbzogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc4Cittc2dpZCAiIgorInNob3cgaWdub3JlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uIChEZWZhdWx0OiAiCisidHJhZGl0aW9uYWwpIgorbXNnc3RyICIiCisibW9zdHJhciBhcmNoaXZvcyBpZ25vcmFkb3MsIG1vZG9zIG9wY2lvbmFsZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uICIKKyIoUHJlZGV0ZXJtaW5hZG86IHRyYWRpdGlvbmFsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJjdWFuZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MQorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImlnbm9yYXIgY2FtYmlvcyBlbiBzdWJtw7NkdWxvcywgb3BjaW9uYWwgY3VhbmRvOiBhbGwsZGlydHksdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgImxpc3RhciBlbiBjb2x1bW5hcyBsb3MgYXJjaGl2b3Mgc2luIHNlZ3VpbWllbnRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODQKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgIm5vIGRldGVjdGFyIHJlbm9tYnJhZG9zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAiZGV0ZWN0YXIgcmVub21icmVzLCBvcGNpb25hbG1lbnRlIGNvbmZpZ3VyYXIgc2ltaWxhcmlkYWQgZGUgw61uZGljZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDA2Cittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorIkNvbWJpbmFjacOzbiBkZSBhcmd1bWVudG9zIGRlIGFyY2hpdm9zIGlnbm9yYWRvcyB5IG5vIHJhc3RyZWFkb3Mgbm8gc29wb3J0YWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODkKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICJzdXByaW1lIHN1bW1hcnkgdHJhcyB1biBjb21taXQgZXhpdG9zbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkwCittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJtb3N0cmFyIGRpZmYgZW4gZWwgdGVtcGxhdGUgZGVsIG1lbnNhamUgZGUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTIKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBwYXJhIGVsIG1lbnNhamUgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkzIGJ1aWx0aW4vbWVyZ2UuYzoyNzQgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsZWVyIG1lbnNhamUgZGVzZGUgdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgInNvYnJlc2NyaWJlIGVsIGF1dG9yIGRlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NSBidWlsdGluL2djLmM6NTM4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZmVjaGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NQorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAic29icmVzY3JpYmUgbGEgZmVjaGEgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OCBidWlsdGluL2NvbW1pdC5jOjE0OTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMCBwYXJzZS1vcHRpb25zLmg6MzI4IHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29uZmlybWFyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicmV1c2FyIHkgZWRpdGFyIGVsIG1lbnNhamUgZGUgdW4gY29tbWl0IGVzcGVjaWZpY28iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OAorbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyZXVzYXIgZWwgbWVuc2FqZSBkZSB1biBjb21taXQgZXNwZWNpZmljbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInVzYXIgbWVuc2FqZSBkZSBmb3JtYXRvIGF1dG9zcXVhc2jCoHBhcmEgYXJyZWdsYXIgZWwgY29tbWl0IGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAwCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gc3F1YXNoIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJ1c2FyIGVsIG1lbnNhamUgZGUgZm9ybWF0byBhdXRvc3F1YXNoIHBhcmEgcmVhbGl6YXIgc3F1YXNoICBhbCBjb21taXQgIgorImVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiZWwgYXV0b3IgZGVsIGNvbW1pdCBzb3kgeW8gYWhvcmEgKHVzYWRvIGNvbiAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6Mjg5CisjOiBidWlsdGluL3B1bGwuYzoxNjQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgImFncmVnYXIgU2lnbmVkLW9mZi1ieTogKGZpcm1hZG8gcG9yKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICJ1c2FyIGFyY2hpdm8gZGUgdGVtcGxhdGUgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDQKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiZm9yemFyIGxhIGVkaWNpw7NuIGRlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNgorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJpbmNsdWlyIHN0YXR1cyBlbiBlbCB0ZW1wbGF0ZSBkZWwgbWVuc2FqZSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMQorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBwYXJhIGVsIGNvbnRlbmlkbyBkZWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTIKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImNvbmZpcm1hciB0b2RvcyBsb3MgYXJjaGl2b3MgY2FtYmlhZG9zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTMKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgImFncmVnYXIgYXJjaGl2b3MgZXNwZWPDrWZpY29zIGFsIMOtbmRpY2UgcGFyYSBjb25maXJtYXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJhZ3JlZ2FyIGFyY2hpdm9zIGludGVyYWN0aXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImFncmVnYXIgY2FtYmlvcyBpbnRlcmFjdGl2YW1lbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTYKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgInPDs2xvIGNvbmZpcm1hciBhcmNoaXZvcyBlc3BlY8OtZmljb3MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJldml0YXIgbG9zIGNhcHR1cmFkb3JlcyAoaG9va3MpIGRlIHByZS1jb21taXQgeSBjb21taXQtbXNnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJtb3N0cmFyIGxvIHF1ZSBzZXLDrWEgaW5jbHVpZG8gZW4gZWwgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzEKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgImVubWVuZGFyIGNvbW1pdCBwcmV2aW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiZ2FuY2hvIGJ5cGFzcyBwb3N0IHJlZXNjcml0dXJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzkKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJvayBhbCBncmFiYXIgdW4gY2FtYmlvIHZhY8OtbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQxCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAib2sgYWwgZ3JhYmFyIHVuIGNhbWJpbyBjb24gdW4gbWVuc2FqZSB2YWPDrW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICJBcmNoaXZvIE1FUkdFX0hFQUQgKCVzKSBjb3JydXB0byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIxCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciBlbCBtZW5zYWplIGRlIGNvbW1pdDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJBYm9ydGFuZG8gY29tbWl0IGRlYmlkbyBxdWUgZWwgbWVuc2FqZSBlc3TDoSBlbiBibGFuY28uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIkFib3J0YW5kbyBjb21taXQ7IG5vIHNlIGhhIGVkaXRhZG8gZWwgbWVuc2FqZVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2ODYKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorImVsIHJlcG9zaXRvcmlvIGhhIHNpZG8gYWN0dWFsaXphZG8sIHBlcm8gbm8gc2UgcHVkbyBlc2NyaWJpciBlbCBhcmNoaXZvXG4iCisibmV3X2luZGV4LiBWZXJpZmlxdWUgcXVlIGVsIGRpc2NvIG5vIGVzdGUgbGxlbm8geSBsYSBxdW90YSBubyBoYVxuIgorInNpZG8gc3VwZXJhZGEsIHkgbHVlZ28gXCJnaXQgcmVzdG9yZSAtLXNhdGVnZWQgOi9cIiBwYXJhIHJlY3VwZXJhci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxkaXIgb2JqZXRvPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLSIKKyJyZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxvcGNpb25lcyBkZSAiCisic3BsaXQ+IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAzCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4NyBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAiZGlyIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA0CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4OAorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAiRWwgZGlyZWN0b3JpbyBkZSBvYmpldG9zIHBhcmEgZ3VhcmRhciBlbCBncsOhZmljbyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MQorbXNnaWQgImlmIHRoZSBjb21taXQtZ3JhcGggaXMgc3BsaXQsIG9ubHkgdmVyaWZ5IHRoZSB0aXAgZmlsZSIKK21zZ3N0ciAic2kgZWwgY29tbWl0LWdyYXBoIGVzdMOhIGNvcnRhZG8sIHNvbG8gdmVyaWZpY2EgbGEgcHVudGEgZGVsIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzMgdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciCittc2dzdHIgIk5vIHNlIHB1ZG8gYWJyaXIgY29tbWl0LWdyYXBoICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA2Cittc2dpZCAic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIKK21zZ3N0ciAiY29tZW56YXIgY2FtaW5hdGEgZW4gdG9kYXMgbGFzIHJlZnMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA4Cittc2dpZCAic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIgorbXNnc3RyICJlc2NhbmVhciBwYXF1ZXRlIGRlIMOtbmRpY2VzIHBvciBzdGRpbiBwb3IgY29tbWl0cyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTAKK21zZ2lkICJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIgorbXNnc3RyICJjb21lbnphciBhIGNhbWluYXIgYSBsb3MgY29tbWl0cyBsaXN0YWRvcyBwb3Igc3RkaW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEyCittc2dpZCAiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiaW5jbHllIHRvZG9zIGxvcyBjb21taXRzIHF1ZSB5YSBlc3TDoW4gZW4gZWwgYXJjaGl2byBjb21taXQtZ3JhcGgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE1Cittc2dpZCAiYWxsb3cgd3JpdGluZyBhbiBpbmNyZW1lbnRhbCBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAicGVybWl0aXIgZXNjcmliaXIgdW4gYXJjaGl2byBjb21taXQtZ3JhcGggaW5jcmVtZW50YWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE3IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAibcOheGltbyBuw7ptZXJvIGRlIGNvbW1pdHMgZW4gdW4gY29tbWl0LWdyYXBoIHNpbiBiYXNlIGNvcnRhZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE5Cittc2dpZCAibWF4aW11bSByYXRpbyBiZXR3ZWVuIHR3byBsZXZlbHMgb2YgYSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgInJhZGlvIG3DoXhpbW8gZW50cmUgZG9zIG5pdmVsZXMgZGUgY29ydGUgZGUgY29tbWl0LWdyYXBoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNworbXNnaWQgInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICJ1c2UgY29tbyBtw6F4aW1vIHVubyBkZSAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvIC0tc3RkaW4tcGFja3MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDMgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICJhcmd1bWVudG8gLS10eXBlIG5vIHJlY29ub2NpZG8sICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNQorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICJzb2xvIHVuIHRpcG8gYSBsYSB2ZXoiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI0Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIlViaWNhY2nDs24gZGVsIGFyY2hpdm8gY29uZmlndXJhY2nDs24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhciBhcmNoaXZvIGRlIGNvbmZpZyBnbG9iYWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhciBhcmNoaXZvIGRlIGNvbmZpZyBkZWwgc2lzdGVtYSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhciBhcmNoaXZvIGRlIGNvbmZpZyBkZWwgcmVwb3NpdG9yaW8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhciB1biBhcmNoaXZvIGRlIGNvbmZpZyBwb3Igw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2FyIGFyY2hpdm8gY29uZmlnIGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICJibG9iLWlkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgImxlZXIgY29uZmlnIGRlbCBvYmpldG8gYmxvYiBzdW1pbmlzdHJhZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICJBY2Npw7NuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMgorbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJvYnRlbmVyIHZhbG9yOiBub21icmUgW3ZhbG9yLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idGVuZXIgdG9kb3MgbG9zIHZhbG9yZXM6IGxsYXZlIFt2YWxvcmVzLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0ZW5lciB2YWxvcmVzIHBhcmEgdW5hIHJlZ2V4cDogbm9tYnJlLXJlZ2V4IFt2YWxvci1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAib2J0ZW5lciB2YWxvciBlc3BlY2lmaWNvIHBhcmEgZWwgVVJMOiBzZWNjacOzblsudmFyXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgIiIKKyJyZW1wbGF6YXIgdG9kYXMgbGFzIHZhcmlhYmxlcyBxdWUgY29uY3VlcmRlbjogbm9tYnJlIHZhbG9yIFt2YWxvcl9yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICJhZ3JlZ2FyIG51ZXZhIHZhcmlhYmxlOiBub21icmUgdmFsb3IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiYm9ycmFyIHVuYSB2YXJpYWJsZS4gbm9tYnJlIFt2YWxvci1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImJvcnJhciB0b2RhcyBsYXMgY29uY3VycmVuY2lhczogbm9tYnJlIFt2YWxvci1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJyZW5vbWJyYXIgc2VjY2nDs246IG5vbWJyZS12aWVqbyBub21icmUtbnVldm8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQxCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAiYm9ycmFyIHVuYSBzZWNjacOzbjogbm9tYnJlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJsaXN0YXIgdG9kbyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDMKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAiYWJyaXIgZWwgZWRpdG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJlbmNvbnRyYXIgZWwgY29sb3IgY29uZmlndXJhZG86IHNsb3QgW2RlZmF1bHRdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJlbmNvbnRyYXIgbGFzIG9wY2lvbmVzIGRlbCBjb2xvcjogc2xvdCBbc3Rkb3V0LWVzLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVGlwbyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDcgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM4Cittc2dpZCAidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIgorbXNnc3RyICJhbCB2YWxvciBzZSBoYSBkYWRvIGVzdGUgdGlwbyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDgKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgInZhbG9yIGVzIFwidHJ1ZVwiIG8gXCJmYWxzZVwiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OQorbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICJ2YWxvciBlcyB1biBudW1lcm8gZGVjaW1hbCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgInZhbG9yIGVzIC0tYm9vbCBvIC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgInZhbG9yIGVzIHVuYSBydXRhIChhcmNoaXZvIG8gbm9tYnJlIGRlIGRpcmVjdG9yaW8pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICJ2YWxvciBlcyB1bmEgZmVjaGEgZGUgZXhwaXJhY2nDs24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUzCittc2dpZCAiT3RoZXIiCittc2dzdHIgIk90cm8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU0Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5hciB2YWxvcmVzIGNvbiB1biBieXRlIE5VTEwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICJtb3N0cmFyIHNvbG8gbm9tYnJlcyBkZSB2YXJpYWJsZXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJyZXNwZXRhciBkaXJlY3RpdmFzIGluY2x1ZGUgZW4gbGEgYsO6c3F1ZWRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NworbXNnaWQgInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiCittc2dzdHIgIm1vc3RyYXIgZWwgb3JpZ2VuIGRlIGNvbmZpZ3VyYWNpw7NuIChhcmNoaXZvLCBzdGRpbiwgYmxvYiwgY29tYW5kbykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICJ2YWxvciIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgImNvbiAtLWdldCwgdXNhIGVsIHZhbG9yIHBvciBkZWZlY3RvIGN1YW5kbyBmYWx0YSB1bmEgZW50cmFkYSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIgorbXNnc3RyICJuw7ptZXJvIGRlIGFyZ3VtZW50b3MgaW52w6FsaWRvcywgZGViZXLDrWFuIHNlciAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgIm7Dum1lcm8gZGUgYXJndW1lbnRvcyBpbnbDoWxpZG9zLCBkZWJlcsOtYW4gc2VyIGRlICVkIGEgJWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IHBhdHRlcm46ICVzIgorbXNnc3RyICJwYXRyw7NuIGRlIGxsYXZlIGludsOhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgZm9ybWF0ZWFyIGVsIHZhbG9yIHBvciBkZWZlY3RvIGRlIGNvbmZpZ3VyYWNpw7NuOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgIm5vIHNlIGFuYWxpemFyIGNvbG9yICclcyciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQzCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYW5hbGl6YXIgZWwgdmFsb3IgcG9yIGRlZmVjdG8gZGUgY29sb3IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk2IGJ1aWx0aW4vY29uZmlnLmM6NzQyCittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAibm8gZW4gdW4gZGlyZWN0b3JpbyBnaXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk5Cittc2dpZCAid3JpdGluZyB0byBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJlc2NyaWJpciBlbiBzdGRpbiBubyBlc3TDoSBzb3BvcnRhZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTAyCittc2dpZCAid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiZXNjcmliaXIgYmxvYnMgZGUgY29uZmlndXJhY2nDs24gbm8gZXN0w6Egc29wb3J0YWRvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyBFc3RlIGVzIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nDs24gZGUgR2l0IHBvciB1c3VhcmlvLlxuIgorIlt1c2VyXVxuIgorIiMgUG9yIGZhdm9yLCBhZGFwdGEgeSBkZXNjb21lbnRhIGxhcyBzaWd1aWVudGVzIGzDrW5lYXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxMQorbXNnaWQgIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZSIKK21zZ3N0ciAic29sbyB1biBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNpw7NuIGEgbGEgdmV6IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxNgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCBzb2xvIHB1ZWRvIHNlciB1c2FkbyBkZW50cm8gZGUgdW4gcmVwb3NpdG9yaW8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjE5Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiBzb2xvIHB1ZWRlIHNlciB1c2FkbyBkZW50cm8gZGUgdW4gcmVwb3NpdG9yaW8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjM4Cittc2dpZCAiJEhPTUUgbm90IHNldCIKK21zZ3N0ciAiJEhPTUUgbm8gZXN0w6EgY29uZmlndXJhZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjU4Cittc2dpZCAiIgorIi0td29ya3RyZWUgY2Fubm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIHVubGVzcyB0aGUgY29uZmlnXG4iCisiZXh0ZW5zaW9uIHdvcmt0cmVlQ29uZmlnIGlzIGVuYWJsZWQuIFBsZWFzZSByZWFkIFwiQ09ORklHVVJBVElPTiBGSUxFXCJcbiIKKyJzZWN0aW9uIGluIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmb3IgZGV0YWlscyIKK21zZ3N0ciAiIgorIi0td29ya3RyZWUgbm8gcHVlZGUgc2VyIHVzYWRvIGNvbiBtdWx0aXBsZXMgw6FyYm9sZXMgZGUgdHJhYmFqbyBhIG1lbm9zIHF1ZSAiCisibGFcbiIKKyJleHRlbnNpw7NuIHdvcmt0cmVlQ29uZmlnIGVzdMOpIGhhYmlsaXRhZGEuIFBvciBmYXZvciBsZWEgXCJDT05GSUdVUkFUSU9OIEZJTEUiCisiXCJcbiIKKyJlbiBcImdpdCBoZWxwIHdvcmt0cmVlXCIgcGFyYSBtw6FzIGRldGFsbGVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4OAorbXNnaWQgIi0tZ2V0LWNvbG9yIGFuZCB2YXJpYWJsZSB0eXBlIGFyZSBpbmNvaGVyZW50IgorbXNnc3RyICItLWdldC1jb2xvciB5IHRpcG8gZGUgdmFyaWFibGUgaW5jb2hlcmVudGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkzCittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAic29sbyB1bmEgYWNjacOzbiBhIGxhIHZleiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MDYKK21zZ2lkICItLW5hbWUtb25seSBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1saXN0IG9yIC0tZ2V0LXJlZ2V4cCIKK21zZ3N0ciAiLS1uYW1lLW9ubHkgc29sbyBlcyBhcGxpY2FibGUgcGFyYSAtLWxpc3QgbyAtLWdldC1yZWdleHAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzEyCittc2dpZCAiIgorIi0tc2hvdy1vcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgYW5kIC0tIgorImxpc3QiCittc2dzdHIgIiIKKyItLXNob3ctb3JpZ2luIHNvbG8gZXMgYXBsaWNhYmxlIHBhcmEgLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCB5IC0tbGlzdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTgKK21zZ2lkICItLWRlZmF1bHQgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0IgorbXNnc3RyICItLWRlZmF1bHQgc29sbyBlcyBhcGxpY2FibGUgcGFyYSAtLWdldCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNpw7NuICclcyciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIKK21zZ3N0ciAiZXJyb3IgYWwgcHJvY2VzYXIgYXJjaGl2byhzKSBkZSBjb25maWd1cmFjacOzbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImVkaXRhciBzdGRpbiBubyBlc3TDoSBzb3BvcnRhZG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQ2Cittc2dpZCAiZWRpdGluZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJlZGl0YXIgYmxvYnMgbm8gZXN0w6Egc29wb3J0YWRvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgZWwgYXJjaGl2byBkZSBjb25maWd1cmFjacOzbiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBzb2JyZXNjcmliaXIgbcO6bHRpcGxlcyB2YWxvcmVzIGNvbiB1biDDum5pY28gdmFsb3JcbiIKKyJcdFVzZSB1bmEgcmVnZXhwLCAtLWFkZCBvIC0tcmVwbGFjZS1hbGwgcGFyYSBjYW1iaWFyICVzLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NDcgYnVpbHRpbi9jb25maWcuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAibm8gZXhpc3RlIGxhIHNlY2Npw7NuOiAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTAKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzoxMDAKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgIm1vc3RyYXIgdGFtYcOxb3MgZW4gZm9ybWF0byBsZWdpYmxlIHBhcmEgaHVtYW5vIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjYKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPG9wY2lvbmVzPl0gWzxjb21taXQtaXNoPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxvcGNpb25lcz5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImhlYWQiCittc2dzdHIgImhlYWQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICJsaWdlcm8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiYW5vdGFkbyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgInRhZyBhbm90YWRvICVzIG5vIGRpc3BvbmlibGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAidGFnIGFub3RhZG8gJXMgbm8gdGllbmUgbm9tYnJlIGVtYmViaWRvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgInRhZyAnJXMnIGVzIHJlYWxtZW50ZSAnJXMnIGFxdcOtIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAibm8gaGF5IHRhZyBxdWUgY29uY3VlcmRlIGV4YWN0YW1lbnRlIGNvbiAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGV4YWN0IG1hdGNoIG9uIHJlZnMgb3IgdGFncywgc2VhcmNoaW5nIHRvIGRlc2NyaWJlXG4iCittc2dzdHIgIk5vIGhheSBjb2luY2lkZW5jaWEgZXhhY3RhIGVuIHJlZnMgbyB0YWdzLCBidXNjYW5kbyBlbiBkZXNjcmliZVxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJiw7pzcXVlZGEgZmluYWxpemFkYSBhIGxhcyAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisiTm8gaGF5IHRhZ3MgYW5vdGFkb3MgcXVlIHB1ZWRhbiBkZXNjcmliaXIgJyVzJy5cbiIKKyJTaW4gZW1iYXJnbywgaHViaWVyb24gdGFncyBubyBhbm90YWRvczogaW50ZW50ZSAtLXRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyJOaW5nw7puIHRhZyBwdWVkZSBkZXNjcmliaXQgJyVzJy5cbiIKKyJJbnRlbnRlIC0tYWx3YXlzLCBvIGNyZWUgYWxndW5vcyB0YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAiJWx1IGNvbW1pdHMgY3J1emFkb3NcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJzZSBlbmNvbnRyw7MgbcOhcyBkZSAlaSB0YWdzOyBzZSBtb3N0csOzICVpIG3DoXMgcmVjaWVudGVcbiIKKyJmaW4gZGUgbGEgYsO6c3F1ZWRhIGVuICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiZGVzY3JpYmUgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiTm9tYnJlIGRlIG9iamV0byAlcyBubyB2w6FsaWRvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzIG5vIGVzIHVuIGNvbW1pdCBuaSB1biBibG9iIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM3Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAiZW5jb250cmFyIGVsIHRhZyBxdWUgdmllbmUgZGVzcHXDqXMgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOAorbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgImhhY2VyIGRlYnVnIGEgbGEgZXN0cmF0ZWdpYSBkZSBiw7pzcXVlZGEgZW4gc3RkZXJyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM5Cittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgInVzZSBjdWFscXVpZXIgcmVmIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQwCittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgInVzZSBjdWFscXVpZXIgdGFnLCBpbmNsdXNvIGxvcyBubyBhbm90YWRvcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgInNpZW1wcmUgdXNhciBmb3JtYXRvIGxhcmdvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQyCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICJzb2xvIHNlZ3VpciBlbCBwcmltZXIgcGF0csOzbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgInNvbG8gbW9zdHJhciBjb25jb3JkYW5jaWFzIGV4YWN0YXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDcKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICJjb25zaWRlcmFyIDxuPiB0YWdzIG3DoXMgcmVjaWVudGVzIChkZWZhdWx0OjEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0OQorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgInNvbG8gY29uc2lkZXJhciB0YWdzIHF1ZSBjb25jdWVyZGVuIGNvbiA8cGF0csOzbj4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTEKK21zZ2lkICJkbyBub3QgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIm5vIGNvbnNpZGVyYXIgdGFncyBxdWUgY29uY3VlcmRlbiBjb24gPHBhdHLDs24+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzIGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzMKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIm1vc3RyYXIgZWwgb2JqZXRvIGNvbW1pdCBhYnJldmlhZG8gY29tbyBmYWxsYmFjayIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NCBidWlsdGluL2Rlc2NyaWJlLmM6NTU3Cittc2dpZCAibWFyayIKK21zZ3N0ciAibWFyY2EiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgImFkanVudGFyIDxtYXJjYT4gZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gc3VjaW8gKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU4Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiCittc2dzdHIgImFkanVudGFyIDxtYXJjYT4gZW4gdW4gw6FyYm9sIGRlIHRyYWJham8gcm90byAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTc2Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyBlcyBpbmNvbXBhdGlibGUgY29uIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MDUKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiTm8gc2UgZW5jb250cmFyb24gbm9tYnJlcywgbm8gc2UgcHVlZGUgZGVzY3JpYmlyIG5hZGEuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkgZXMgaW5jb21wYXRpYmxlIGNvbiBjb21taXQtaXNtb3MiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTgKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tYnJva2VuIGVzIGluY29tcGF0aWJsZSBjb24gY29tbWl0LWlzbW9zIgorCisjOiBidWlsdGluL2RpZmYuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAiJyVzJzogbm8gZXMgdW4gYXJjaGl2byByZWd1bGFyIG8gdW4gZW5sYWNlIHNpbWLDs2xpY28iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9wY2nDs24gaW52w6FsaWRhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIk5vIGVzIHVuIHJlcG9zaXRvcmlvIGdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvYmpldG8gJyVzJyBlbnRyZWdhZG8gbm8gZXMgdsOhbGlkby4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJtw6FzIGRlIGRvcyBibG9icyBlbnRyZWdhZG9zOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAib2JqZXRvIG5vIG1hbmVqYWRvICclcycgZW50cmVnYWRvLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzxvcGNpb25lcz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cnV0YT4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgImZhbGzDszogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGVsIHN5bWxpbmsgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgZWwgYXJjaGl2byBzeW1saW5rICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIGVsIG9iamV0byAlcyBwYXJhIGVsIHN5bWxpbmsgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTMKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisiZm9ybWF0b3MgY29tYmluYWRvcyBkZSBkaWZmICgnLWMnIHkgJy0tY2MnKSBubyBzb3BvcnRhZG9zIGVuXG4iCisibW9kbyBkaWZmIHBhcmEgZGlyZWN0b3JpbygnLWQnIHkgJy0tZGlyLWRpZmYnKS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgImFtYm9zIGFyY2hpdm9zIG1vZGlmaWNhZG9zOiAnJXMnIHkgJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzYKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAiYXJjaGl2byBkZWwgw6FyYm9sIGRlIHRyYWJham8gaGEgc2lkbyBkZWphZG8uIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAiYXJjaGl2byB0ZW1wb3JhbCBleGlzdGUgZW4gJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDgKK21zZ2lkICJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIKK21zZ3N0ciAidGFsIHZleiBkZXNlZXMgbGltcGlhciBvIHJlY3VwZXJhciBlc3Rvcy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAidXNlIGBkaWZmLmd1aXRvb2xgIGVuIGx1Z2FyIGRlIGBkaWZmLnRvb2xgIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk5Cittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgInJlYWxpemFyIHVuIGRpZmYgZGUgdG9kbyBlbCBkaXJlY3RvcmlvIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAxCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICJubyBtb3N0cmFyIGFudGVzIGRlIGxhbnphciB1bmEgaGVycmFtaWVudGEgZGUgZGlmZiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNgorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICJ1c2FyIGVubGFjZXMgc2ltYsOzbGljb3MgZW4gbW9kbyBkaXItZGlmZiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNworbXNnaWQgInRvb2wiCittc2dzdHIgImhlcnJhbWllbnRhIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICJ1c2FyIGxhIGhlcnJhbWllbnRhIGRlIGRpZmYgZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICIiCisibW9zdHJhciB1bmEgbGlzdGEgZGUgaGVycmFtaWVudGFzIGRlIGRpZmYgcXVlIHB1ZWRlbiBzZXIgdXNhZGFzIGNvbiBgLS10b29sYCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMworbXNnaWQgIiIKKyJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uIC0gemVybyBleGl0ICIKKyJjb2RlIgorbXNnc3RyICIiCisiaGFjZXIgcXVlICdnaXQtZGlmZnRvb2wnIHNhbGdhIGN1YW5kbyB1bmEgaGVycmFtaWVudGEgZGUgZGlmZiByZXRvcm5lIHVuICIKKyJjw7NkaWdvIGRlIHNhbGlkYSBkaXN0aW50byBkZSBjZXJvIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICJlc3BlY2lmaWNhciB1biBjb21hbmRvIHBlcnNvbmFsaXphZG8gcGFyYSB2ZXIgZGlmZnMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICJwYXNhZG8gYSBgZGlmZmAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICJkaWZmdG9vbCByZXF1aWVyZSB1biDDoXJib2wgZGUgdHJhYmFqbyBvIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzkKK21zZ2lkICItLWRpci1kaWZmIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tZGlydHktZGlmZiBlcyBpbmNvbXBhdGlibGUgY29uIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDIKK21zZ2lkICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWd1aSwgLS10b29sIHkgLS1leHRjbWQgc29uIG11dHVhbWVudGUgZXhjbHVzaXZhcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAibm8gc2UgaGEgcHJvcG9yY2lvbmFkbyA8aGVycmFtaWVudGE+IHBhcmEgLS10b29sPTxoZXJyYW1pZW50YT4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTcKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgIm5vIHNlIGhhIGVudHJlZ2FkbyA8Y29tYW5kbz4gcGFyYSAtLWV4dGNtZD08Y29tYW5kbz4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2Cittc2dpZCAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIKK21zZ3N0ciAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wY2lvbmVzPiA8ZW52LXZhcj4iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozNyBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJ0aXBvIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgImRlZmF1bHQgcGFyYSBnaXRfZW52XyooLi4uKSBlcyBoYWNlciBmYWxsYmFjayBlbiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQzCittc2dpZCAiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIgorbXNnc3RyICJzZXIgc2lsZW5jaW9zbyBzb2xvIHVzYXIgdmFsb3IgZ2l0X2Vudl8qKCkgY29tbyBjw7NkaWdvIGRlIHNhbGlkYSIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB3aXRoIGAtLXR5cGU9Ym9vbGAsIG5vdCBgJXNgIgorbXNnc3RyICJvcGNpw7NuIGAtLWRlZmF1bHQnIGVzcGVyYSB1biB2YWxvciBib29sZWFuIGNvbiBgLS10eXBlPWJvb2xgLCBubyBgJXNgIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgorbXNnc3RyICIiCisib3BjacOzbiBgLS1kZWZhdWx0JyBlc3BlcmEgdW4gdmFsb3IgdW5zaWduZWQgbG9uZyBjb24gYC0tdHlwZT11bG9uZ2AsIG5vIGAlc2AiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo4NTIKK21zZ2lkICJFcnJvcjogQ2Fubm90IGV4cG9ydCBuZXN0ZWQgdGFncyB1bmxlc3MgLS1tYXJrLXRhZ3MgaXMgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorIkVycm9yOiBObyBzZSBwdWVkZSBleHBvcnRhciBsb3MgdGFncyBhbmlkYWRvcyBhIG1lbm9zIHF1ZSAtLW1hcmstdGFncyBzZWEgIgorImVzcGVjaWZpY2Fkby4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhciBwcm9ncmVzbyBkZXNwdcOpcyBkZSA8bj4gb2JqZXRvcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgInNlbGVjY2lvbmFyIGVsIG1hbmVqbyBkZSB0YWdzIGZpcm1hZG9zIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NworbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgInNlbGVjY2lvbmFyIGVsIG1hbmVqbyBkZSB0YWdzIHF1ZSBzb24gdGFncyBkZSBvYmpldG9zIGZpbHRyYWRvcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjAKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgY29tbWl0IG1lc3NhZ2VzIGluIGFuIGFsdGVybmF0ZSBlbmNvZGluZyIKK21zZ3N0ciAic2VsZWNjaW9uYXIgZWwgbWFuZWpvIGRlIG1lbnNhamVzIGRlIGNvbW1pdCBlbiB1biBlbmNvZGluZyBkaWZlcmVudGUiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIlZvbGNhciBtYXJjYXMgYSBlc3RlIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICJJbXBvcnRhciBtYXJjYXMgZGUgZXN0ZSBhcmNoaXZvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgIkltcG9ydGFyIG1hcmNhcyBkZSBlc3RlIGFyY2hpdm8gc2kgZXhpc3RlIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MQorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICJGYWxzaWZpY2FyIHVuIHRhZ2dlciBjdWFuZG8gbGVzIGZhbHRhIHVubyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzMKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiTW9zdHJhciB0b2RvIGVsIMOhcmJvbCBwYXJhIGNhZGEgY29tbWl0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJVc2UgZWwgZmVhdHVyZSBkb25lIHBhcmEgdGVybWluYXIgZWwgc3RyZWFtIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NgorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiU2FsdGFyIGVsIG91dHB1dCBkZSBkYXRhIGJsb2IiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc3IGJ1aWx0aW4vbG9nLmM6MTcwNQorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgInJlZnNwZWMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc4Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICJBcGxpY2FyIHJlZnNwZWMgcGFyYSBsb3MgcmVmcyBleHBvcnRhZG9zIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OQorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgImFub25pbWl6YXIgbGEgc2FsaWRhIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiIgorIlBhZHJlcyBkZSBsYSByZWZlcmVuY2lhIHF1ZSBubyBlc3RhbiBlbiBmYXN0LWV4cG9ydCBzdHJlYW0gcG9yIGlkIGRlIG9iamV0byIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAiTW9zdHJhciBpZHMgZGUgb2JqZXRvcyBvcmlnaW5hbGVzIHBhcmEgYmxvYnMvY29tbWl0cyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODUKK21zZ2lkICJMYWJlbCB0YWdzIHdpdGggbWFyayBpZHMiCittc2dzdHIgIk1hcmNhciB0YWdzIGNvbiBpZHMgZGUgbWFyayIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEyMjAKK21zZ2lkICJDYW5ub3QgcGFzcyBib3RoIC0taW1wb3J0LW1hcmtzIGFuZCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiCittc2dzdHIgIk5vIHNlIHB1ZWRlIHBhc2FyIGFtYm9zIC0taW1wb3J0LW1hcmtzIHkgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzQKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPG9wY2lvbmVzPl0gWzxyZXBvc2l0b3Jpbz4gWzxyZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzUKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8b3BjaW9uZXM+XSA8Z3J1cG8+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcGNpb25lcz5dIFsoPHJlcG9zaXRvcmlvPiB8IDxncnVwbz4pLi4uXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM3Cittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzxvcGNpb25lcz5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2Cittc2dpZCAiZmV0Y2gucGFyYWxsZWwgY2Fubm90IGJlIG5lZ2F0aXZlIgorbXNnc3RyICJmZXRjaC5wYXJhbGxlbCBubyBwdWVkZSBzZXIgbmVnYXRpdm8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzkgYnVpbHRpbi9wdWxsLmM6MjA0Cittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAiZXh0cmFlciBkZSB0b2RvcyBsb3MgcmVtb3RvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyNDgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICJjb25maWd1cmFyIHVwc3RyZWFtIHBhcmEgZ2l0IHB1bGxsL2ZldGNoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzIGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAiYWRqdW50YXIgYSAuZ2l0L0ZFVENIX0hFQUQgZW4gbHVnYXIgZGUgc29icmVzY3JpYmlyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ1IGJ1aWx0aW4vcHVsbC5jOjIxMAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAicnV0YSBwYXJhIGNhcmdhciBlbCBwYXF1ZXRlIGFsIGZpbmFsIGRlbCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICJmb3J6YXIgc29icmVzY3JpdHVyYSBkZSByZWZlcmVuY2lhIGxvY2FsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ4Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICJleHRyYWVyIGRlIG3Dumx0aXBsZXMgcmVtb3RvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJleHRyYWVyIHRvZG9zIGxvcyB0YWdzIHkgb2JqZXRvcyBhc29jaWFkb3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTIKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIm5vIGV4dHJhZXIgdG9kb3MgbG9zIHRhZ3MgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTQKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBmZXRjaGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJuw7ptZXJvIGRlIHN1Ym3Ds2R1bG9zIGV4dHJhw61kb3MgZW4gcGFyYWxlbG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgImxpbXBpYXIgcmFtYXMgcmVtb3RhcyByYXN0cmVhZGFzIHF1ZSB5YSBubyBlc3TDoW4gZW4gZWwgcmVtb3RvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiIgorImxpbXBpYXIgdGFncyBsb2NhbGVzIHF1ZSBubyBzZSBlbmN1ZW50cmFuIGVuIGVsIHJlbW90byB5IGVsaW1pbmFyIHRhZ3MgIgorImNhbWJpYWRvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OSBidWlsdGluL2ZldGNoLmM6MTgyIGJ1aWx0aW4vcHVsbC5jOjE0MQorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAiZW4gZGVtYW5kYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MAorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgImNvbnRyb2xhciBleHRyYWNjacOzbiByZWN1cnNpdmEgZGUgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjI1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgIm1hbnRlbmVyIGVsIHBhcXVldGUgZGVzY2FyZ2FkbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NgorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICJwZXJtaXRpciBhY3R1YWxpemFyIGxhIHJlZiBIRUFEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjI4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAiaGlzdG9yaWEgcHJvZnVuZGEgZGUgdW4gY2xvbiBzdXBlcmZpY2lhbCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICJoaXN0b3JpYSBwcm9mdW5kYSBkZSB1biByZXBvc2l0b3JpbyBzdXBlcmZpY2lhbCBiYXNhZG8gZW4gdGllbXBvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIzMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICJjb252ZXJ0aXIgYSB1biByZXBvc2l0b3JpbyBjb21wbGV0byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgImFudGVwb25lciBlc3RvIGEgc2FsaWRhIGRlIGxhIHJ1dGEgZGVsIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKyJkZWZhdWx0IHBhcmEgZXh0cmFjY2nDs24gcmVjdXJzaXZhIGRlIHN1Ym3Ds2R1bG9zIChtZW5vciBwcmlvcmlkYWQgcXVlICIKKyJhcmNoaXZvcyBkZSBjb25maWd1cmFjacOzbikiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODcgYnVpbHRpbi9wdWxsLmM6MjM0Cittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICJhY2VwdGFyIHJlZnMgcXVlIGFjdHVhbGljZW4gLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg4IGJ1aWx0aW4vcHVsbC5jOjIzNgorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAicmVmbWFwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg5IGJ1aWx0aW4vcHVsbC5jOjIzNworbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICJlc3BlY2lmaWNhciBleHRyYWNjacOzbiBkZSByZWZtYXAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTYKK21zZ2lkICJyZXBvcnQgdGhhdCB3ZSBoYXZlIG9ubHkgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGlzIG9iamVjdCIKK21zZ3N0ciAicmVwb3J0YSBxdWUgc29sbyB0ZW5lbW9zIG9iamV0b3MgYWxjYW56YWJsZXMgZGUgZXN0ZSBvYmpldG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTkKK21zZ2lkICJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgImVqZWN1dGFyICdnYyAtLWF1dG8nIHRyYXMgZWwgZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDEgYnVpbHRpbi9wdWxsLmM6MjQ2Cittc2dpZCAiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIgorbXNnc3RyICJ2ZXJpZmljYXIgdXBkYXRlcyBmb3J6YWRvcyBlbiB0b2RvcyBsb3MgYnJhbmNoIGFjdHVhbGl6YWRvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMworbXNnaWQgIndyaXRlIHRoZSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgImVzY3JpYmlyIGNvbW1pdC1ncmFwaCBsdWVnbyBkZWwgZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiTm8gc2UgcHVlZG8gZW5jb250cmFyIHJlZiByZW1vdGEgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICJsYSBjb25maWd1cmFjacOzbiBmZXRjaC5vdXRwdXQgY29udGllbmUgZWwgdmFsb3IgaW52w6FsaWRvICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIm9iamV0byAlcyBubyBlbmNvbnRyYWRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzU1Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbYWN0dWFsaXphZG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyZWNoYXphZG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgIm5vIHNlIHB1ZWRlIHRyYWVyIGVuIGxhIHJhbWEgYWN0dWFsIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbYWN0dWFsaXphY2nDs24gZGUgdGFnXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4MCBidWlsdGluL2ZldGNoLmM6ODE3IGJ1aWx0aW4vZmV0Y2guYzo4MzkKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAibm8gc2UgcG9zaWJsZSBhY3R1YWxpemFyIGVsIHJlZiBsb2NhbCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICJwb2Ryw61hIGdvbHBlYXIgdGFnIGV4aXN0ZW50ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW251ZXZvIHRhZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltudWV2YSByYW1hXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW251ZXZhIHJlZmVyZW5jaWFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiYWN0dWFsaXphY2nDs24gZm9yemFkYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIm5vbi1mYXN0LWZvcndhcmQiCittc2dzdHIgImF2YW5jZSBsZW50byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg3NworbXNnaWQgIiIKKyJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCittc2dzdHIgIiIKKyJGZXRjaCBub3JtYWxtZW50ZSBpbmNpZGEgcXXDqSBicmFuY2hlcyBoYW4gdGVuaWRvIHVuIHVwZGF0ZSBmb3J6YWRvLFxuIgorInBlcm8gZXNhIHZhbGlkYWNpw7NuIGhhIHNpZG8gZGVzaGFiaWxpdGFkYS4gUGFyYSBhY3RpdmFybGEgZGUgbnVldm8gdXNlICctLSIKKyJzaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorIm8gZWplY3V0ZSAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNoZWNrIGZvcmNlZCB1cGRhdGVzLiBZb3UgY2FuIHVzZVxuIgorIictLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyAiCisiZmFsc2UnXG4iCisiIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCittc2dzdHIgIiIKKyJUb23DsyAlLjJmIHNlZ3VuZG9zIHZhbGlkYXIgbG9zIHVwZGF0ZXMgZm9yemFkb3MuIFB1ZWRlcyB1c2FyXG4iCisiJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgbyBlamVjdXRhciAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyAiCisiZmFsc2UnXG4iCisicGFyYSBldml0YXIgZXN0YSB2YWxpZGFjacOzbi5cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIG5vIGVudmnDsyB0b2RvcyBsb3Mgb2JqZXRvcyBuZWNlc2FyaW9zXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAicmVjaGF6YWRvICVzIHBvcnF1ZSByYcOtY2VzIHN1cGVyZmljaWFsZXMgbm8gcHVlZGVuIHNlciBhY3R1YWxpemFkYXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDE3IGJ1aWx0aW4vZmV0Y2guYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJEZXNkZSAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyJhbGd1bm9zIHJlZnMgbG9jYWxlcyBubyBwdWRpZXJvbiBzZXIgYWN0dWFsaXphZG9zOyBpbnRlbnRlIGVqZWN1dGFyXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyBwYXJhIGVsaW1pbmFyIGN1YWxxdWllciByYW1hIHZpZWphIG8gY29uZmxpY3RpdmEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBzZSBwb25kcsOhIGNvbGdhZG8pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBzZSBoYSBjb2xnYWRvKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTgKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIltlbGltaW5hZG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1OSBidWlsdGluL3JlbW90ZS5jOjEwMzUKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihuYWRhKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJSZWh1c2FuZG8gZXh0cmFlciBlbiBsYSByYW1hIGFjdHVhbCAlcyBkZSB1biByZXBvc2l0b3JpbyBubyB2YWPDrW8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIk9wY2nDs24gXCIlc1wiIHZhbG9yIFwiJXNcIiBubyBlcyB2w6FsaWRvIHBhcmEgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiT3BjacOzbiBcIiVzXCIgZXMgaWdub3JhZGEgcG9yICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEyCittc2dpZCAibXVsdGlwbGUgYnJhbmNoZXMgZGV0ZWN0ZWQsIGluY29tcGF0aWJsZSB3aXRoIC0tc2V0LXVwc3RyZWFtIgorbXNnc3RyICJtw7psdGlwbGVzIHJhbWFzIGRldGVjdGFkYXMsIGluY29tcGF0aWJsZSBjb24gLS1zZXQtdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI3Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIm5vIGNvbmZpZ3VyYXIgdXBzdHJlYW0gcGFyYSB1bmEgcmFtYSBkZSByYXN0cmVvIHJlbW90byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjkKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgdGFnIgorbXNnc3RyICJubyBjb25maWd1cmFyIHVwc3RyZWFtIHBhcmEgdW4gdGFnIHJlbW90byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzEKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICJ0aXBvIGRlIGJyYW5jaCBkZXNjb25vY2lkbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzMKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisibm8gc2UgZW5jb250csOzIHJhbWEgZnVlbnRlLlxuIgorInRpZW5lcyBxdWUgZXNwZWNpZmljYXIgZXhhY3RhbWVudGUgdW5hIHJhbWEgY29uIGxhIG9wY2nDs24gLS1zZXQtdXBzdHJlYW0uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU1OSBidWlsdGluL2ZldGNoLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICJFeHRyYXllbmRvICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY5IGJ1aWx0aW4vZmV0Y2guYzoxNjI0IGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBleHRyYWVyICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAibm8gc2UgcHVkbyBoYWNlciBmZXRjaCBhICclcycgKGPDs2RpZ28gZGUgc2FsaWRhOiAlZClcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2ODQKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5vIGhheSByZXBvc2l0b3JpbyByZW1vdG8gZXNwZWNpZmljYWRvLiBQb3IgZmF2b3IsIGVzcGVjaWZpcXVlIHVuIFVSTCBvIHVuXG4iCisibm9tYnJlIHJlbW90byBkZWwgY3VhbCBsYXMgbnVldmFzIHJldmlzaW9uZXMgZGViZW4gc2VyIGV4dHJhw61kYXMuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcyMQorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIlRpZW5lcyBxdWUgZXNwZWNpZmljYXIgdW4gbm9tYnJlIGRlIHRhZy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcxCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiUHJvZnVuZGlkYWQgbmVnYXRpdmEgZW4gLS1kZWVwZW4gbm8gc29wb3J0YWRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3MworbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZGVlcGVuIHkgLS1kZXB0aCBzb24gbXV0dWFtZW50ZSBleGNsdXNpdmFzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3OAorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICItLWRlcHRoIHkgLS11bnNoYWxsb3cgbm8gcHVlZGVuIHNlciB1c2FkYXMganVudGFzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MAorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXVuc2hhbGxvdyBubyB0aWVuZSBzZW50aWRvIGVuIHVuIHJlcG9zaXRvcmlvIGNvbXBsZXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5NgorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCBubyB0b21hIHVuIGFyZ3VtZW50byBkZSByZXBvc2l0b3JpbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3OTgKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIG5vIHRpZW5lIHNlbnRpZG8gY29uIHJlZnNwZWNzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJObyBleGlzdGUgZWwgcmVtb3RvIG8gZ3J1cG8gcmVtb3RvOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTQKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIkV4dHJhZXIgdW4gZ3J1cG8geSBlc3BlY2lmaWNhciB1biByZWZzcGVjcyBubyB0aWVuZSBzZW50aWRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzMgorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIHNvbG8gcHVlZGUgc2VyIHVzYWRvIGNvbiBlbCByZW1vdG8gY29uZmlndXJhZG8gZW4gZXh0ZW5zaW9ucy4iCisicGFydGlhbENsb25lIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxOAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZW5zYWplPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGFyY2hpdm8+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc0Cittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJwb2JsYXIgZWwgbG9nIGNvbiBtw6F4aW1vIDxuPiBlbnRyYWRhcyBkZWwgc2hvcmxvZyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiYWxpYXMgcGFyYSAtLWxvZyAoZGVwcmVjYWRvKSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgwCittc2dpZCAidGV4dCIKK21zZ3N0ciAidGV4dG8iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MQorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAidXNlIDx0ZXh0PiBjb21vIGNvbWllbnpvIGRlIG1lbnNhamUiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MgorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICJhcmNoaXZvIGRlbCBjdWFsIGxlZXIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs8b3BjaW9uZXM+XSBbPHBhdHLDs24+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamV0bz5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEyCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgImNpdGUgbG9zIG1hcmNhZG9yZXMgZGUgcG9zaWNpw7NuIGFkZWN1YWRhbWVudGUgcGFyYSBsb3Mgc2hlbGxzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICJjaXRlIGxvcyBtYXJjYWRvcmVzIGRlIHBvc2ljacOzbiBhZGVjdWFkYW1lbnRlIHBhcmEgcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICJjaXRlIGxvcyBtYXJjYWRvcmVzIGRlIHBvc2ljacOzbiBhZGVjdWFkYW1lbnRlIHBhcmEgcHl0aG9uIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgImNpdGUgbG9zIG1hcmNhZG9yZXMgZGUgcG9zaWNpw7NuIGFkZWN1YWRhbWVudGUgcGFyYSBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAibW9zdHJhciBzb2xvIDxuPiByZWZzIGVuY29udHJhZGFzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDM5Cittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICJyZXNwZXRhciBlbCBmb3JtYXRvIGRlIGNvbG9yZXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgIm1vc3RyYXIgc29sbyByZWZzIHF1ZSBhcHVudGVuIGFsIG9iamV0byBkYWRvIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ0Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHJlZnMgcXVlIHNvbiBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgIm1vc3RyYXIgc29sbyByZWZzIHF1ZSBubyBzb24gZnVzaW9uYWRhcyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIm1vc3RyYXIgc29sbyByZWZzIHF1ZSBjb250aWVuZW4gZWwgY29tbWl0IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHJlZnMgcXVlIG5vIGNvbnRpZW5lbiBlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY4IGJ1aWx0aW4vZnNjay5jOjE0NyBidWlsdGluL2ZzY2suYzoxNDgKK21zZ2lkICJ1bmtub3duIgorbXNnc3RyICJkZXNjb25vY2lkbyIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgImVycm9yIGVuICVzICVzOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZyBpbiAlcyAlczogJXMiCittc2dzdHIgInBlbGlncm8gZW4gJXMgJXM6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDMgYnVpbHRpbi9mc2NrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIgorbXNnc3RyICJsaW5rIHJvdG8gZGUgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICJ0aXBvIGRlIG9iamV0byBlcXVpdm9jYWRvIGVuIGxpbmsiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorImxpbmsgcm90byBkZSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIGEgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAiZmFsdGFuICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWFjaGFibGUgJXMgJXMiCittc2dzdHIgImluYWxjYW56YWJsZSAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICJhY3R1YWxpemFuZG8gJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMzOQorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBsb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGZpbmFsaXphciAnJXMnIgorCisjOiBidWlsdGluL2ZzY2suYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMiCittc2dzdHIgIlJldmlzYW5kbyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSAoJWQgb2JqZWN0cykiCittc2dzdHIgIlZlcmlmaWNhbmRvIGNvbmVjdGl2aWRhZCAoJWQgb2JqZXRvcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyAlcyIKK21zZ3N0ciAiUmV2aXNhbmRvICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjkKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgImxpbmtzIHJvdG9zIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAicmHDrXogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAidGFnICVzICVzICglcykgZW4gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIKK21zZ3N0ciAiJXM6IG9iamVjdG8gY29ycnVwdG8gbyBmYWx0YW50ZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHJlZmxvZyBlbnRyeSAlcyIKK21zZ3N0ciAiJXM6IHJlZmVyZW5jaWEgaW52w6FsaWRhICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lcyIKK21zZ3N0ciAiUmV2aXNhbmRvIHJlZmxvZyAlcy0+JXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiVzOiBwdW50ZXJvIHNoYTEgaW52w6FsaWRvICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJXM6IG5vIGVzIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgImF2aXNvOiBObyBoYXkgcmVmZXJlbmNpYXMgcG9yIGRlZmVjdG8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZzogJXMiCittc2dzdHIgIiVzOiBvYmpldG8gY29ycnVwdG8gbyBubyBlbmNvbnRyYWRvOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY291bGQgbm90IGJlIHBhcnNlZDogJXMiCittc2dzdHIgIiVzOiBubyBzZSBwdWVkZSBhbmFsaXphciBvYmpldG86ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgIm1hbCBzaGExIGRlIGFyY2hpdm86ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICJSZXZpc2FuZG8gZGlyZWN0b3JpbyBkZSBvYmpldG9zIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIlJldmlzYW5kbyBvYmpldG9zIGRpcmVjdG9yaW9zIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgbGluayIKK21zZ3N0ciAiUmV2aXNhbmRvIGxpbmsgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5NSBidWlsdGluL2luZGV4LXBhY2suYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiJXMgaW52w6FsaWRvIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiCittc2dzdHIgIiVzIGFwdW50YSBhIGFsZ28gZXh0cmHDsW8gKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkZXRhY2hlZCBIRUFEIHBvaW50cyBhdCBub3RoaW5nIgorbXNnc3RyICIlczogSEVBRCBkZXNhY29wbGFkbyBhcHVudGEgYSBuYWRhIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aWNlOiAlcyBwb2ludHMgdG8gYW4gdW5ib3JuIGJyYW5jaCAoJXMpIgorbXNnc3RyICJhdmlzbzogJXMgYXB1bnRhIGEgdW4gYnJhbmNoIG5vIG5hY2lkbyAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICJSZXZpc2FuZG8gZWwgY2FjaGUgdHJlZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIlczogcHVudGVybyBpbnbDoWxpZG8gc2hhMSBlbiBjYWNoZS10cmVlIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICJub24tdHJlZSBlbiBjYWNoZS10cmVlIgorCisjOiBidWlsdGluL2ZzY2suYzo3NjkKK21zZ2lkICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbPG9wY2lvbmVzPl0gWzxvYmpldG8+Li4uXSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc1Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJtb3N0cmFyIG9iamV0b3MgaWxlZ2libGVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzYKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgIm1vc3RyYXIgb2JqZXRvcyBjb2xnYWRvcyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc3Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgInJlcG9ydGFyIHRhZ3MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICJyZXBvcnRhciBub2RvcyByYcOteiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc5Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgImhhY2VyIG9iamV0b3Mgw61uZGljZXMgY2FiZXphcyBkZSBub2RvcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJoYWNlciByZWZsb2dzIGNhYmV6YSBkZSBub2RvcyAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJ0YW1iacOpbiBjb25zaWRlcmFyIHBhcXVldGVzIHkgb2JqZXRvcyBhbHRlcm5vcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgyCittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgInJldmlzYXIgc29sbyBjb25lY3RpdmlkYWQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MworbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiaGFiaWxpdGFyIHJldmlzacOzbiBtw6FzIGVzdHJpY3RhIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAiZXNjcmliaXIgb2JqZXRvcyBjb2xnYWRvcyBlbiAuZ2l0L2xvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NiBidWlsdGluL3BydW5lLmM6MTMyCittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAibW9zdHJhciBwcm9ncmVzbyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg3Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhciBub21icmVzIHZlcmJvc28gcGFyYSBvYmpldG9zIGFsY2FuemFibGVzIgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUmV2aXNhbmRvIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiVzOiBvYmpldG8gZmFsdGFudGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlcjogZXhwZWN0ZWQgc2hhMSwgZ290ICclcyciCittc2dzdHIgInBhcsOhbWV0cm8gaW52w6FsaWRvOiBzaGExIGVzcGVyYWRvLCBzZSBvYnR1dm8gJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjM1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxvcGNpb25lcz5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiRmFsbMOzIGVsIGZzdGF0ICVzOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgYW5hbGl6YXIgJyVzJyB2YWxvciAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gZGVmaW5pciAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiRWwgw7psdGltbyBnYyByZXBvcnTDsyBsbyBzaWd1aWVudGUuIFBvciBmYXZvciBjb3JyaWdlIGxhIGNhdXNhXG4iCisieSBlbGltaW5lICVzLlxuIgorIkxpbXBpZXphIGF1dG9tw6F0aWNhIG5vIHNlIHJlYWxpemFyw6EgaGFzdGEgcXVlIGVsIGFyY2hpdm8gc2VhIGVsaW1pbmFkby5cbiIKKyJcbiIKKyIlcyIKKworIzogYnVpbHRpbi9nYy5jOjUzOQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJsaW1waWFyIG9iamV0b3Mgbm8gcmVmZXJlbmNpYWRvcyIKKworIzogYnVpbHRpbi9nYy5jOjU0MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAic2VyIG3DoXMgZXhoYXVzdGl2byAoYXVtZW50YXIgcnVudGltZSkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJoYWJpbGl0YXIgbW9kbyBhdXRvLWdjIgorCisjOiBidWlsdGluL2djLmM6NTQ1Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgImZvcnphciBsYSBlamVjdWNpw7NuIGRlIGdjIGluY2x1c28gc2kgcHVlZGUgaGFiZXIgb3RybyBnYyBlamVjdXTDoW5kb3NlIgorCisjOiBidWlsdGluL2djLmM6NTQ4Cittc2dpZCAicmVwYWNrIGFsbCBvdGhlciBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayIKK21zZ3N0ciAicmVlbXBhcXVldGFyIHRvZG9zIGxvcyBvdHJvcyBwYXF1ZXRlcyBleGNlcHRvIGVsIHBhcXVldGUgbcOhcyBncmFuZGUiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGFuYWxpemFyIHZhbG9yICVzIGRlIGdjLmxvZ2V4cGlyaXR5IgorCisjOiBidWlsdGluL2djLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBwcnVuZSBleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgImZhbGzDsyBhbCBhbmFsaXphciB2YWxvciAlcyBkZSBwcnVuZSBleHBpcnkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKyJBdXRvIGVtcGFxdWV0YWRvIGRlbCByZXBvc2l0b3JpbyBlbiBzZWd1bmRvIHBsYW5vIHBhcmEgdW4gcGVyZm9ybWFuY2UgIgorIsOzcHRpbW8uXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICJBdXRvIGVtcGFxdWV0YWRvIGRlbCByZXBvc2l0b3JpbyBwYXJhIHBlcmZvcm1hbmNlIMOzcHRpbW8uXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiVmVhIFwiZ2l0IGhlbHAgZ2NcIiBwYXJhIGxpbXBpZXphIG1hbnVhbC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2MgaXMgYWxyZWFkeSBydW5uaW5nIG9uIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2UgaWYgbm90KSIKK21zZ3N0ciAiIgorImdjIHlhIGVzdMOhIGVqZWN1dMOhbmRvc2UgZW4gbGEgbcOhcXVpbmEgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2Ugc28gbm8gIgorImVzIGFzw60pIgorCisjOiBidWlsdGluL2djLmM6Njk0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisiSGF5IG11Y2hvcyBvYmpldG9zIHN1ZWx0b3MgaW5hbGNhbnphYmxlczsgZWplY3V0ZSAnZ2l0IHBydW5lJyBwYXJhICIKKyJlbGltaW5hcmxvcy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI5Cittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPG9wY2lvbmVzPl0gWy1lXSA8cGF0csOzbj4gWzxyZXY+Li4uXSBbWy0tXSA8cnV0YT4uLi5dIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBmYWxsw7MgYWwgY3JlYXIgZWwgaGlsbzogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIKK21zZ3N0ciAibsO6bWVybyBpbnbDoWxpZG8gZGUgaGlsb3MgZXNwZWNpZmljYWRvICglZCkgcGFyYSAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNCBidWlsdGluL2luZGV4LXBhY2suYzoxNzI3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAibm8gaGF5IHNvcG9ydGUgcGFyYSBoaWxvcywgaWdub3JhbmRvICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0NjcgYnVpbHRpbi9ncmVwLmM6NTkyIGJ1aWx0aW4vZ3JlcC5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIm5vIGVzIHBvc2libGUgbGVlciBlbCAgw6FyYm9sICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIHJlYWxpemFyIGdyZXAgZGVsIG9iamV0byBkZSB0aXBvICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAic3dpdGNoIGAlYycgZXNwZXJhIHVuIHZhbG9yIG51bcOpcmljbyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE1Cittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiYnVzY2FyIGVuIGVsIMOtbmRpY2UgZW4gbHVnYXIgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTcKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAiZW5jb250cmFyIGVuIGNvbnRlbmlkb3Mgbm8gbWFuZWphZG9zIHBvciBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOQorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiYnVzY2FyIGVuIGFyY2hpdm9zIHJhc3RyZWFkb3MgeSBubyByYXN0cmVhZG9zIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjEKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImlnbm9yYXIgYXJjaGl2b3MgZXNwZWNpZmljYWRvcyB2aWEgJy5naXRpZ25vcmUnIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjMKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgImLDunNxdWVkYSByZWN1cnNpdmEgZW4gY2FkYSBzdWJtw7NkdWxvIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjYKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAibW9zdHJhciBsw61uZWFzIHF1ZSBubyBjb25jdWVyZGFuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjgKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJiw7pzcXVlZGEgaW5zZW5zaWJsZSBhIG1hecO6c2N1bGFzIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAiY29uY29yZGFyIHBhdHLDs24gc29sbyBhIGxvcyBsw61taXRlcyBkZSBsYXMgcGFsYWJyYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMgorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgInByb2Nlc2FyIGFyY2hpdm9zIGJpbmFyaW9zIGNvbW8gdGV4dG8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNAorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAibm8gY29uY29yZGFyIHBhdHJvbmVzIGVuIGFyY2hpdm9zIGJpbmFyaW9zIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzcKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgInByb2Nlc2FyIGFyY2hpdm9zIGJpbmFyaW9zIGNvbiBmaWx0cm9zIHRleHRjb252IgorCisjOiBidWlsdGluL2dyZXAuYzo4MzkKK21zZ2lkICJzZWFyY2ggaW4gc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHQpIgorbXNnc3RyICJidXNjYXIgZW4gc3ViZGlyZWN0b3Jpb3MgKGRlZmF1bHQpIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDEKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImRlc2NlbmRlciBjb21vIG3DoXhpbW8gPHZhbG9yLWRlLXByb2Z1bmRpYWQ+ICBuaXZlbGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDUKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXNhciBleHByZXNpb25lcyByZWd1bGFyZXMgUE9TSVggZXh0ZW5kaWRhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ4Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJ1c2FyIGV4cHJlc2lvbmVzIHJlZ3VsYXJlcyBQT1NJWCAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJpbnRlcnByZXRhciBwYXRyb25lcyBjb21vIHN0cmluZ3MgYXJyZWdsYWRvcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU0Cittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1c2FyIGV4cHJlc2lvbmVzIHJlZ3VsYXJlcyBjb21wYXRpYmxlcyBjb24gUGVybCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIm1vc3RyYXIgbsO6bWVyb3MgZGUgbMOtbmVhIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTgKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgIm1vc3RyYXIgZWwgbsO6bWVybyBkZSBjb2x1bW5hIGRlIGxhIHByaW1lciBjb2luY2lkZW5jaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJubyBtb3N0cmFyIG5vbWJyZXMgZGUgYXJjaGl2byIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYwCittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIm1vc3RyYXIgbm9tYnJlcyBkZSBhcmNoaXZvIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjIKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJtb3N0cmFyIG5vbWJyZXMgZGUgYXJjaGl2byByZWxhdGl2b3MgYWwgZGlyZWN0b3JpbyBzdXBlcmlvciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJtb3N0cmFyIHNvbG8gbm9tYnJlcyBkZSBhcmNoaXZvcyBlbiBsdWdhciBkZSBsw61uZWFzIGVuY29udHJhZGFzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjYKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAic2luw7NuaW1vIHBhcmEgLS1maWxlcy13aXRoLW1hdGNoZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2OQorbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIGxvcyBub21icmVzIGRlIGFyY2hpdm9zIHNpbiBjb2luY2lkZW5jaWFzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJpbXByaW1pciBOVUwgZGVzcHXDqXMgZGVsIG5vbWJyZSBkZSBhcmNoaXZvIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzQKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hpbmcgcGFydHMgb2YgYSBsaW5lIgorbXNnc3RyICJtb3N0cmFyIHNvbG8gcGFydGVzIHF1ZSBjb25jdWVyZGFuIGRlIHVuYSBsw61uZWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NgorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm1vc3RyYXIgZWwgbsO6bWVybyBkZSBjb25jb3JkYW5jaWFzIGVuIGx1Z2FyIGRlIGxhcyBsw61uZWFzIGNvbmNvcmRhbnRlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc3Cittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgInJlc2FsdGFyIGNvbmNvcmRhbmNpYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICJpbXByaW1pciB1bmEgbMOtbmVhIHZhY8OtYSBlbnRyZSBjb2luY2lkZW5jaWFzIGRlIGRpZmVyZW50ZXMgYXJjaGl2b3MiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MQorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKyJtb3N0cmFyIGVsIG5vbWJyZSBkZSBhcmNoaXZvIHNvbG8gdW5hIHZleiBwYXJhIGNvbmNvcmRhbmNpYXMgZW4gZWwgbWlzbW8gIgorImFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJtb3N0cmFyIDxuPiBsw61uZWFzIGRlIGNvbnRleHRvIGFudGVzIHkgZGVzcHXDqXMgZGUgbGEgY29uY29yZGFuY2lhIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJtb3N0cmFyIDxuPiBsw61uZWFzIGRlIGNvbnRleHRvIGFudGVzIGRlIGxhcyBjb25jb3JkYW5jaWFzIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYXIgPG4+IGzDrW5lYXMgZGUgY29udGV4dCBkZXNwdcOpcyBkZSBsYXMgY29uY29yZGFuY2lhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkxCittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAidXNhciA8bj4gaGlsb3MgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAiYXRham8gcGFyYSAtQyBOVU0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NQorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIiIKKyJtb3N0cmFyIHVuYSBsw61uZWEgY29uIGVsIG5vbWJyZSBkZSBsYSBmdW5jacOzbiBhbnRlcyBkZSBsYXMgY29uY29yZGFuY2lhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgIm1vc3RyYXIgbGEgZnVuY2nDs24gY2lyY3VuZGFudGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICJsZWVyIHBhdHJvbmVzIGRlbCBhcmNoaXZvIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDIKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgImNvbmNvcmRhciA8cGF0csOzbj4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgImNvbWJpbmFyIHBhdHJvbmVzIGVzcGVjaWZpY2Fkb3MgY29uIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiaW5kaWNhciBjb25jb3JkYW5jaWEgY29uIGV4aXQgc3RhdHVzIHNpbiBvdXRwdXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIiIKKyJtb3N0cmFyIHNvbG8gY29uY29yZGFuY2lhcyBjb24gYXJjaGl2b3MgcXVlIGNvbmN1ZXJkYW4gdG9kb3MgbG9zIHBhdHJvbmVzIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjAKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAibW9zdHJhciDDoXJib2wgYW5hbGl6YWRvIHBhcmEgbGEgZXhwcmVzacOzbiBncmVwIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjQKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAicGFnaW5hZG9yIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjQKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAibW9zdHJhciBhcmNoaXZvcyBjb25jb3JkYW50ZXMgZW4gZWwgcGFnaW5hZG9yIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjgKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgInBlcm1pdGlyIGVsIGxsYW1hZG8gZGUgZ3JlcCgxKSAoaWdub3JhZG8gcG9yIGVzdGEgYnVpbGQpIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTIKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuIgorbXNnc3RyICJubyBzZSBoYSBlbnRyZWdhZG8gcGF0csOzbiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyOAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICItLW5vLWluZGV4IG8gLS11bnRyYWNrZWQgbm8gc2UgcHVlZGUgdXNhciBjb24gcmV2cyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgIm5vIHNlIHBvc2libGUgcmVzb2x2ZXIgcmV2aXNpw7NuOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NworbXNnaWQgImludmFsaWQgb3B0aW9uIGNvbWJpbmF0aW9uLCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgImNvbWJpbmFjacOzbiBkZSBvcGNpb25lcyBpbnbDoWxpZGEsIGlnbm9yYW5kbyAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAwCittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgIm5vIHNlIHNvcG9ydGFuIGhpbG9zLCBpZ25vcmFuZG8gLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDczIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgIm7Dum1lcm8gaW52w6FsaWRvIGRlIGhpbG9zIGVzcGVjaWZpY2FkbyAoJWQpIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDk2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgc29sbyBmdW5jaW9uYSBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTExOQorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgIm9wY2nDs24gbm8gc29wb3J0YWRhIGNvbiAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyNQorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1jYWNoZWQgbyAtLXVudHJhY2tlZCBubyBwdWVkZW4gc2VyIHVzYWRhcyBjb24gLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEzMQorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIgorbXNnc3RyICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBubyBwdWVkZSBzZXIgdXNhZGEgcGFyYSBjb250ZW5pZG8gcmFzdHJlYWRvIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTM5Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICItLWNhY2hlZCB5IMOhcmJvbGVzIGhhbiBzaWRvIGVudHJlZ2Fkb3MiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NQorbXNnaWQgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHRpcG8+XSBbLXddIFstLXBhdGg9PGFyY2hpdm8+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGFyY2hpdm8+Li4uIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODYKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgInRpcG8gZGUgb2JqZXRvIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiZXNjcmliaXIgZWwgb2JqZXRvIGVuIGxhIGJhc2UgZGUgZGF0b3MgZGUgb2JqZXRvcyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICJsZWVyIGVsIG9iamV0byBkZSBzdGRpbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJndWFyZGFyIGVsIGFyY2hpdm8gY29tbyBlcyBzaW4gZmlsdHJvcyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIiIKKyJzb2xvIHJlYWxpemFyIHVuIGhhc2ggYSBjdWFscXVpZXIgYmFzdXJhIHJhbmRvbSBwYXJhIGNyZWFyIHVuIG9iamV0byAiCisiY29ycnVwdG8gcGFyYSBoYWNlciBkZWJ1Z2dpbmcgZGUgR3RpIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgInByb2Nlc2FyIGVsIGFyY2hpdm8gY29tbyBzaSBmdWVyYSBkZSBlc3RhIHJ1dGEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAibW9zdHJhciB0b2RvcyBsb3MgY29tYW5kb3MgZGlzcG9uaWJsZXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgImV4Y2x1aXIgbGFzIGd1aWFzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OAorbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAibW9zdHJhciB1bmEgbGlzdGEgZGUgbm9jaW9uZXMgdXRpbGVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICJpbXByaW1pciB0b2RvcyBsb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMgZGUgY29uZmlndXJhY2nDs24iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAibW9zdHJhciBsYSBwYWdpbmEgZGVsIG1hbnVhbCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAibW9zdHJhciBsYSBwYWdpbmEgZGVsIG1hbnVhbCBlbiB1biBuYXZlZ2Fkb3Igd2ViIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICJtb3N0cmFyIGxhIHBhZ2luYSBkZSBpbmZvIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgImltcHJpbWlyIGRlc2NyaXBjacOzbiBkZWwgY29tYW5kbyIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tYW5kbz5dIgorCisjOiBidWlsdGluL2hlbHAuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiZm9ybWF0byBoZWxwIG5vIHJlY29ub2NpZG8gJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiRmFsbMOzIGFsIGluaWNpYXIgZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIkZhbGzDsyBhbCBhbmFsaXphciBsYSB2ZXJzacOzbiBkZSBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJsYSB2ZXJzacOzbiAnJWQnIGRlIGVtYWNzY2xpZW50IGVzIG11eSBhbnRpZ3VhICg8MjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgImZhbGzDsyBhbCBlamVjdXRhciAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBydXRhIHBhcmEgZWwgdmlzdWFsaXphZG9yIGRlbCBtYW51YWwgbm8gc29wb3J0YWRhLlxuIgorIlBvciBmYXZvciBjb25zaWRlcmUgdXNhciAnbWFuLjxoZXJyYW1pZW50YS5jbWQnLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IGNvbWFuZG8gbm8gc29wb3J0YWRvIHBhcmEgbWFuIHZpZXdlci5cbiIKKyJQb3IgZmF2b3IgY29uc2lkZXJlIHVzYXIgJ21hbi48aGVycmFtaWVudGE+LnBhdGguIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJzogdmlzdWFsaXphZG9yIGRlIG1hbiBkZXNjb25vY2lkby4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2NworbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAibmluZ8O6biB2aXN1YWxpemFkb3IgZGUgbWFudWFsIHByb2Nlc28gbGEgcGV0aWNpw7NuIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJuaW5nw7puIHZpc29yIGRlIGluZm8gbWFuZWpvIGxhIHBldGljacOzbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM0IGJ1aWx0aW4vaGVscC5jOjQ0NSBnaXQuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciCittc2dzdHIgIiclcycgdGllbmUgZWwgYWxpYXMgJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAibWFsIGFsaWFzLiVzIHN0cmluZzogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3NyBidWlsdGluL2hlbHAuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgInVzbzogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIidnaXQgaGVscCBjb25maWcnIHBhcmEgbcOhcyBpbmZvcm1hY2nDs24iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAiZWwgdGlwbyBkZWwgb2JqZXRvIG5vIGNvbmN1ZXJkYSBlbiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIm5vIHNlIHJlY2liacOzIGVsIG9iamV0byBlc3BlcmFkbyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIm9iamV0byAlczogdGlwbyBlc3BlcmFkbyAlcywgZW5jb250cmFkbyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICJubyBzZSBwdWVkZSBsbGVuYXIgJWQgYnl0ZSIKK21zZ3N0clsxXSAibm8gc2UgcHVlZGVuIGxsZW5hciAlZCBieXRlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY4Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJFT0YgdGVtcHJhbm8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OQorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgImxlZXIgZXJyb3IgZW4gaW5wdXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MQorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJzZSB1c2Fyb24gbcOhcyBieXRlcyBkZSBsb3MgZGlzcG9uaWJsZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjYwNAorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgInBhcXVldGUgbXV5IGdyYW5kZSBwYXJhIGxhIGRlZmluaWNpw7NuIGFjdHVhbCBkZSBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkxIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo5NQorbXNnaWQgInBhY2sgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSIKK21zZ3N0ciAicGFxdWV0ZSBleGNlZGUgZWwgbcOheGltbyB0YW1hw7FvIHBlcm1pdGlkbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIGVsIGFyY2hpdm8gZGUgcGFxdWV0ZSAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjYKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAiZmlybWEgZGVsIHBhcXVldGUgbm8gY29uY3VlcmRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAidmVyc2nDs24gZGUgcGFxdWV0ZSAlPFBSSXUzMj4gbm8gc29wb3J0YWRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgInBhcXVldGUgdGllbmUgdW4gbWFsIG9iamV0byBlbiBlbCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICJpbmZsYXRlIGRldm9sdmnDsyAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAidmFsb3IgZGUgb2Zmc2V0IGRlc2JvcmRhZG8gcGFyYSBlbCBvYmpldG8gYmFzZSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJvZmZzZXQgZGUgYmFzZSBkZWx0YSBlc3TDoSBmdWVyYSBkZSBsw61taXRlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgInRpcG8gZGUgb2JqZXRvICVkIGRlc2Nvbm9jaWRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjIKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJubyBzZSBwdWVkZSBwcm9wYWdhciBlbCBwYXF1ZXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmaW5hbCBwcmVtYXR1cm8gZGUgYXJjaGl2byBkZSBwYXF1ZXRlLCAlPFBSSXVNQVg+IGJ5dGUgZmFsdGFudGUiCittc2dzdHJbMV0gImZpbmFsIHByZW1hdHVybyBkZSBhcmNoaXZvIGRlIHBhcXVldGUsICU8UFJJdU1BWD4gYnl0ZXMgZmFsdGFudGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTAKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiaW5jb25zaXN0ZW5jaWEgc2VyaWEgZW4gaW5mbGF0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0MSBidWlsdGluL2luZGV4LXBhY2suYzo3NjQKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMyBidWlsdGluL2luZGV4LXBhY2suYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICLCoUNPTElTScOTTiBERSBUSVBPIFNIQTEgRU5DT05UUkFEQSBDT04gJXMgISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAibm8gc2UgcG9zaWJsZSBsZWVyICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0IGluZm8gJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgbGEgaW5mb3JtYWNpw7NuIGV4aXN0ZW50ZSBkZWwgb2JqZXRvICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGVsIG9iamV0byBleGlzdGVudGUgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJvYmpldG8gYmxvYiAlcyBpbnbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNiBidWlsdGluL2luZGV4LXBhY2suYzo4NDUKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2tlZCBvYmplY3QiCittc2dzdHIgImVycm9yIGRlIGZzY2sgZW4gZWwgb2JqZXRvIGVtcGFxdWV0YWRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIk5vIHRvZG9zIGxvcyBvYmpldG9zIGhpam9zIGRlICVzIHNvbiBhbGNhbnphYmxlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTE5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1MAorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiZmFsbMOzIGFsIGFwbGljYXIgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUmVjaWJpZW5kbyBvYmpldG9zIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAiSW5kZXhhbmRvIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTIKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgInBhcXVldGUgZXN0w6EgY29ycm9tcGlkbyAoU0hBMSBubyBjb25jdWVyZGEpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU3Cittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICJubyBzZSBwdWVkZSBmc3RhdCBhbCBhcmNoaXZvIGRlIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjAKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgImVsIHBhcXVldGUgdGllbmUgYmFzdXJhIGFsIGZpbmFsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTcyCittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAiY29uZnVzacOzbiBtw6FzIGFsbMOhIGRlIGxhIGxvY3VyYSBlbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NQorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIlJlc29sdmllbmRvIGRlbHRhcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGNyZWFyIGhpbG86ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ2Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiY29uZnVzacOzbiBtw6FzIGFsbMOhIGRlIGxhIGxvY3VyYSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3QiCittc2dpZF9wbHVyYWwgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHJbMF0gImNvbXBsZXRhZG8gY29uICVkIG9iamV0byBsb2NhbCIKK21zZ3N0clsxXSAiY29tcGxldGFkbyBjb24gJWQgb2JqZXRvcyBsb2NhbGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJUYWlsIGNoZWNrc3VtIHBhcmEgJXMgaW5lc3BlcmFkYSAowr9jb3JydXBjacOzbiBkZSBkaXNjbz8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJwYXF1ZXRlIHRpZW5lICVkIGRlbHRhIHNpbiByZXNvbHZlciIKK21zZ3N0clsxXSAicGFxdWV0ZSB0aWVuZSAlZCBkZWx0YXMgc2luIHJlc29sdmVyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGRlc2luZmxhciBlbCBvYmpldG8gYWRqdW50byAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICJvYmpldG8gbG9jYWwgJXMgZXN0w6EgY29ycm9tcGlkbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAibm9tYnJlICclcycgZGUgYXJjaGl2byBkZSBwYXF1ZXRlIG5vIHRlcm1pbmEgY29uICcucGFjayciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZXNjcmliaXIgJXMgZW4gZWwgYXJjaGl2byAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY2VycmFyIGVzY3JpdG8gJXMgZW4gYXJjaGl2byAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgImVycm9yIG1pZW50cmFzIHNlIGNpZXJyYSBlbCBhcmNoaXZvIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJubyBzZSBwdWVkZSBndWFyZGFyIGVsIGFyY2hpdm8gcGFxdWV0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4MQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJubyBzZSBwdWVkZSBndWFyZGFyIGVsIGFyY2hpdm8gw61uZGljZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAibWFsIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWJyaXIgZWwgYXJjaGl2byBwYXF1ZXRlIGV4aXN0ZW50ZSAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIk5vIHNlIHB1ZWRlIGFicmlyIGVsIMOtbmRpY2UgZGVsIGFyY2hpdm8gcGFxdWV0ZSBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAibm8gZGVsdGE6ICVkIG9iamV0byIKK21zZ3N0clsxXSAibm8gZGVsdGE6ICVkIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAibGFyZ28gZGUgY2FkZW5hID0gJWQ6ICVsdSBvYmpldG8iCittc2dzdHJbMV0gImxhcmdvIGRlIGNhZGVuYSA9ICVkOiAlbHUgb2JqZXRvcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY4OQorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJObyBzZSBwdWVkZSByZWdyZXNhciBhIGN3ZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzQxCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICJtYWwgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzcKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiBubyBwdWVkZSBzZXIgdXNhZGEgc2luIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzkKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tc3RkaW4gcmVxdWllcmUgdW4gcmVwb3NpdG9yaW8gZ2l0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg1Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSBubyByZWNpYmnDsyBuaW5nw7puIG5vbWJyZSBkZSBhcmNoaXZvIGRlIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzMgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MQorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICJlcnJvciBkZSBmc2NrIGVuIG9iamV0b3MgcGFxdWV0ZSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBkZWZpbmlyIHRlbXBsYXRlICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIGRpcmVjdG9yaW8gJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgbGluayAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyIHN5bWxpbmsgJyVzJyAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNvcGlhciAnJXMnIGEgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgImlnbm9yYW5kbyB0ZW1wbGF0ZSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiCittc2dzdHIgInRlbXBsYXRlIG5vIGVuY29udHJhZG8gZW4gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAibm8gc2UgY29waWFuIHRlbXBsYXRlcyBkZSAnJXMnOiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIG1hbmVqYXIgZWwgdGlwbyBkZSBhcmNoaXZvICVkIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIG1vdmVyICVzIGEgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIHlhIGV4aXN0ZSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiUmVpbmljaWFsaXphZG8gZWwgcmVwb3NpdG9yaW8gR2l0IGNvbXBhcnRpZG8gZXhpc3RlbnRlIGVuICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJSZWluaWNpYWxpemFkbyBlbCByZXBvc2l0b3JpbyBHaXQgZXhpc3RlbnRlIGVuICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkluaWNpYWxpemFkbyByZXBvc2l0b3JpbyBHaXQgY29tcGFydGlkbyB2YWPDrW8gZW4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJJbmljaWFsaXphZG8gcmVwb3NpdG9yaW8gR2l0IHZhY8OtbyBlbiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08ZGlyZWN0b3Jpby10ZW1wbGF0ZT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNvcz5dXSBbPGRpcmVjdG9yaW8+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgInBlcm1pc29zIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTIKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgIiIKKyJlc3BlY2lmaWNhIHF1ZSBlbCByZXBvc2l0b3JpbyBkZSBnaXQgc2Vyw6EgY29tcGFydGlkbyBlbnRyZSB2YXJpb3MgdXN1YXJpb3MiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOSBidWlsdGluL2luaXQtZGIuYzo1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICJubyBzZSBwdWRlIGNyZWFyIGRpcmVjdG9yaW8gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFwbGljYXIgY2hkaXIgYSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAobyAtLXdvcmstdHJlZT08ZGlyZWN0b3Jpbz4pIG5vIHNlIHBlcm1pdGUgc2luIGVzcGVjaWZpY2FyICVzIChvIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yaW8+KSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIk5vIHNlIHB1ZWRlIGFjY2VkZXIgYWwgw6FyYm9sIGRlIHRyYWJham8gJyVzJyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNgorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWxvcj5dKS4uLl0gWzxhcmNoaXZvPi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTUKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICJlZGl0YXIgYXJjaGl2b3MgZW4gZWwgbHVnYXIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTYKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICJjb3J0YXIgdHJhaWxlcnMgdmFjw61vcyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OQorbXNnaWQgIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIKK21zZ3N0ciAiZG9uZGUgY29sb2NhciBlbCBudWV2byB0cmFpbGVyIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJhY2Npw7NuIGlmIHRyYWlsZXIgeWEgZXhpc3RlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMworbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGlzIG1pc3NpbmciCittc2dzdHIgImFjY2nDs24gc2kgZmFsdGEgZWwgdHJhaWxlciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiCittc2dzdHIgIm1vc3RyYXIgc29sbyBsb3MgdHJhaWxlcnMiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA2Cittc2dpZCAiZG8gbm90IGFwcGx5IGNvbmZpZyBydWxlcyIKK21zZ3N0ciAibm8gYXBsaWNhciByZWdsYXMgZGUgY29uZmlndXJhY2nDs24iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgImp1bnRhciB2YWxvcmVzIGNvbiBlc3BhY2lvcyBlbiBibGFuY28gY29udGlndW9zIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgImNvbmZpZ3VyYXIgb3BjaW9uZXMgZGUgYW7DoWxpc2lzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMAorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICJubyB0cmF0YXIgLS0tIGVzcGVjaWFsbWVudGUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTExCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAidHJhaWxlciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTIKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAidHJhaWxlcihzKSBwYXJhIGFncmVnYXIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTIzCittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdHJhaWxlciBjb24gLS1vbmx5LWlucHV0IG5vIHRpZW5lIHNlbnRpZG8iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMzCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAibm8gc2UgZW50cmVnw7MgYXJjaGl2byBkZSBlbnRyYWRhIHBhcmEgZWRpY2nDs24gZW4gbHVnYXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTYKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFs8b3BjaW9uZXM+XSBbPHJhbmdvLWRlLXJldmlzacOzbj5dIFtbLS1dIDxydXRhPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxvcGNpb25lcz5dIDxvYmpldG8+Li4uIgorCisjOiBidWlsdGluL2xvZy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3BjacOzbiAtLWRlY29yYXRlIGludsOhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgIm1vc3RyYXIgZnVlbnRlIgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICJVc2FyIGFyY2hpdm8gZGUgbWFwYSBkZSBtYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjE3NworbXNnaWQgIm9ubHkgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAic29sbyBkZWNvcmFyIHJlZnMgcXVlIGNvbmN1ZXJkZW4gY29uIDxwYXRyw7NuPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm8gZGVjb3JhciByZWZzIHF1ZSBjb25jdWVyZGVuIGNvbiA8cGF0csOzbj4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAib3BjaW9uZXMgZGUgZGVjb3JhZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIlByb2Nlc2FyIHJhbmdvIGRlIGzDrW5lYXMgbixtIGVuIGFyY2hpdm8sIGNvbnRhbmRvIGRlc2RlIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiU2FsaWRhIGZpbmFsOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiBtYWwgYXJjaGl2byIKKworIzogYnVpbHRpbi9sb2cuYzo1NTAgYnVpbHRpbi9sb2cuYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgb2JqZXRvICVzIgorCisjOiBidWlsdGluL2xvZy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJ0aXBvIGRlc2Nvbm9jaWRvOiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIgorbXNnc3RyICIlczogbW9kbyBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIGludsOhbGlkbyIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXRlLmhlYWRlcnMuIHNpbiB2YWxvciIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIm5vbWJyZSBkZWwgZGlyZWN0b3JpbyBkZSBzYWxpZGEgZXMgbXV5IGxhcmdvIgorCisjOiBidWlsdGluL2xvZy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBhYnJpciBhcmNoaXZvIHBhdGNoICVzIgorCisjOiBidWlsdGluL2xvZy5jOjk2OQorbXNnaWQgIm5lZWQgZXhhY3RseSBvbmUgcmFuZ2UiCittc2dzdHIgIm5lY2VzaXRhIGV4YWN0YW1lbnRlIHVuIHJhbmdvIgorCisjOiBidWlsdGluL2xvZy5jOjk3OQorbXNnaWQgIm5vdCBhIHJhbmdlIgorbXNnc3RyICJubyBlcyB1biByYW5nbyIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAibGV0cmFzIGRlIHBvcnRhZGEgbmVjZXNpdGEgZm9ybWF0byBlbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQ5Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBjb3Zlci1sZXR0ZXIgZmlsZSIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGxvcyBhcmNoaXZvcyBjb3Zlci1sZXR0ZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICJpbnNhbm8gaW4tcmVwbHktdG86ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcGNpb25lcz5dIFs8ZGVzZGU+IHwgPHJhbmdvLWRlLXJldmlzaW9uZXM+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEzCittc2dpZCAidHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIsK/ZG9zIGRpcmVjdG9yaW9zIGRlIHNhbGlkYT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyNCBidWlsdGluL2xvZy5jOjIxOTcgYnVpbHRpbi9sb2cuYzoyMTk5IGJ1aWx0aW4vbG9nLmM6MjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiY29tbWl0IGRlc2Nvbm9jaWRvICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzQgYnVpbHRpbi9yZXBsYWNlLmM6NTggYnVpbHRpbi9yZXBsYWNlLmM6MjA3CisjOiBidWlsdGluL3JlcGxhY2UuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIKK21zZ3N0ciAiZmFsbMOzIGFsIHJlc29sdmVyICclcycgY29tbyByZWYgdsOhbGlkYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM5Cittc2dpZCAiY291bGQgbm90IGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAibm8gc2UgcHVkbyBlbmNvbnRyYXIgdW5hIGJhc2UgZGUgZnVzacOzbiBleGFjdGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgIiIKKyJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IgorbXNnc3RyICIiCisiZmFsbMOzIGFsIGNvbnNlZ3VpciB1cHN0cmVhbSwgc2kgcXVpZXJlcyBncmFiYXIgdW4gY29tbWl0IGJhc2UgZGUgbWFuZXJhICIKKyJhdXRvbcOhdGljYSxcbiIKKyJwb3IgZmF2b3IgdXNhIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gcGFyYSByYXN0cmVhciB1bmEgcmFtYSByZW1vdGEuXG4iCisiTyBwdWVkZXMgZXNwZWNpZmljYXIgdW4gY29tbWl0IGJhc2UgbWVkaWFudGUgLS1iYXNlPTxpZC1jb21taXQtYmFzZT4gIgorIm1hbnVhbG1lbnRlIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjMKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJmYWxsw7MgYWwgZW5jb250cmFyIHVuYSBiYXNlIGRlIGZ1c2nDs24gZXhhY3RhIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImVsIGNvbW1pdCBiYXNlIGRlYmUgc2VyIGVsIGFuY2VzdHJvIGRlIGxhIGxpc3RhIGRlIHJldmlzacOzbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImVsIGNvbW1pdCBiYXNlIG5vIGRlYmUgZXN0YXIgZW4gbGEgbGlzdGEgZGUgcmV2aXNpw7NuIgorCisjOiBidWlsdGluL2xvZy5jOjE1MzEKK21zZ2lkICJjYW5ub3QgZ2V0IHBhdGNoIGlkIgorbXNnc3RyICJubyBzZSBwdWVkZSBvYnRlbmVyIGlkIGRlIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODMKK21zZ2lkICJmYWlsZWQgdG8gaW5mZXIgcmFuZ2UtZGlmZiByYW5nZXMiCittc2dzdHIgImZhbGzDsyBhbCBpbmZlcmlyIHJhbmdvcyByYW5nZS1kaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE2MjkKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJ1c2UgW1BBVENIIG4vbV0gaW5jbHVzbyBjb24gdW4gw7puaWNvIHBhcmNoZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjMyCittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgInVzZSBbUEFUQ0hdIGluY2x1c28gY29uIG3Dumx0aXBsZXMgcGFyY2hlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM2Cittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgIm1vc3RyYXIgcGFyY2hlcyBlbiBzdGFuZGFyZCBvdXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzOAorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICJnZW5lcmFyIGxldHJhIGRlIGNvdmVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDAKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgIiIKKyJ1c2FyIHVuYSBzZWN1ZW5jaWEgc2ltcGxlIGRlIG7Dum1lcm9zIHBhcmEgc2FsaWRhIGRlIG5vbWJyZXMgZGUgYXJjaGl2b3MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MQorbXNnaWQgInNmeCIKK21zZ3N0ciAic2Z4IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDIKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAidXNlIDxzZng+IGVuIGx1Z2FyIGRlICcucGF0Y2gnIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDQKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJjb21lbnphciBhIG51bWVyYXIgbG9zIHBhcmNoZXMgZGVzZGUgPG4+IGVuIGx1Z2FyIGRlIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NgorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAibWFyY2FyIGxhcyBzZXJpZXMgY29tbyBOdGggcmUtcm9sbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiVXNlIFtSRkMgUEFUQ0hdIGVuIGx1Z2FyIGRlIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MQorbXNnaWQgImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIKK21zZ3N0ciAibW9kby1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICIiCisiZ2VuZXJhIHBhcnRlcyBkZSB1bmEgY2FydGEgZGUgcHJlc2VudGFjacOzbiBiYXNhZG8gZW4gbGEgZGVzY3JpcGNpw7NuIGRlIGxhICIKKyJyYW1hIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTQKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIlVzZSBbPHByZWZpam8+XSBlbiBsdWdhciBkZSBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTcKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgImd1YXJkYXIgYXJjaGl2b3MgcmVzdWx0YW50ZXMgZW4gPGRpcj4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MAorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICJubyBjb3J0YXIvYWdyZWdhciBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjMKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICJubyBtb3N0cmFyIGRpZmZzIGJpbmFyaW9zIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjUKK21zZ2lkICJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIKK21zZ3N0ciAic2FsaWRhIGNvbW8gaGFzaCBkZSB0b2Rvcy1jZXJvcyBlbiBsYSBjYWJlY2VyYSBGcm9tIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjcKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIm5vIGluY2x1eWEgdW4gcGFyY2hlIHF1ZSBjb2luY2lkYSBjb24gdW4gY29tbWl0IGVuIHVwc3RyZWFtIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjkKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgIm1vc3RyYXIgZm9ybWF0byBkZSBwYXJjaGUgZW4gbHVnYXIgZGVsIGRlZmF1bHQgKHBhcmNoZSArIHN0YXQpIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzEKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIk1lbnNhamVhbmRvIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgImNhYmV6YWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgImFncmVnYXIgY2FiZWNlcmEgZW1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAiZW1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICJhZ3JlZ2FyIGNhYmVjZXJhIFRvOiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiYWRkIENjOiBoZWFkZXIiCittc2dzdHIgImFncmVnYXIgY2FiZWNlcmEgQ2M6IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAiaWRlbnQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OQorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKyJjb25maWd1cmFyIGRpcmVjY2nDs24gRnJvbSBhIDxpZGVudD4gKCBvIGlkZW50aWRhZCBkZSBjb21taXR0ZXIgc2kgZXN0w6EgIgorImF1c2VudGUpIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODEKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICJpZCBkZSBtZW5zYWplIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODIKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgImhhY2VyIHByaW1lciBtYWlsIHVuYSByZXNwdWVzdGEgYSA8aWQgZGUgbWVuc2FqZT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MyBidWlsdGluL2xvZy5jOjE2ODYKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAibMOtbWl0ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg0Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAiYWRqdW50YXIgZWwgcGFyY2hlIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODcKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJwb25lciBlbCBwYXJjaGUgZW4gbMOtbmVhIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTEKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiaGFiaWxpdGFyIGhpbG9zIGRlIG1lbnNhamVzLCBlc3RpbG9zOiBzdXBlcmZpY2lhbCwgcHJvZnVuZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAiZmlybWEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAiYWdyZWdhciB1bmEgZmlybWEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NQorbXNnaWQgImJhc2UtY29tbWl0IgorbXNnc3RyICJjb21taXQtYmFzZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk2Cittc2dpZCAiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIKK21zZ3N0ciAiIgorImFncmVnYXIgaW5mb3JtYWNpw7NuIGRlIMOhcmJvbCBkZSByZXF1aXNpdG9zIHByZXZpb3MgYSBsYSBzZXJpZSBkZSBwYXJjaGVzIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgImFncmVnYXIgdW5hIGZpcm1hIGRlIHVuIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIm5vIG1vc3RyYXIgbG9zIG5vbWJyZXMgZGUgYXJjaGl2b3MgZGUgbG9zIHBhcmNoZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICJtb3N0cmFyIG1lZGlkb3IgZGUgcHJvZ3Jlc28gbWllbnRyYXMgc2UgZ2VuZXJhbiBsb3MgcGFyY2hlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAzCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAibXVlc3RyYSBjYW1iaW9zIGNvbnRyYSA8cmV2PiBlbiBjb3ZlciBsZXR0ZXIgbyBlbiB1biBzb2xvIHBhcmNoZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIm11ZXN0cmEgY2FtYmlvcyBjb250cmEgPHJlZnNwZWM+IGVuIGNvdmVyIGxldHRlciBvIGVuIHVuIHNvbG8gcGFyY2hlIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDgKK21zZ2lkICJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICJwb3JjZW50YWplIHBvciBlbCBjdWFsIGxhIGNyZWFjacOzbiBlcyBwZXNhZGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICJsw61uZWEgZGUgaWRlbnRpZmljYWNpw7NuIGludsOhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwNworbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItbiB5IC1rIHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgeSAtayBzb24gbXV0dWFtZW50ZSBleGNsdXNpdm9zIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTcKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSBubyB0aWVuZSBzZW50aWRvIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTkKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMgbm8gdGllbmUgc2VudGlkbyIKKworIzogYnVpbHRpbi9sb2cuYzoxODIxCittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrIG5vIHRpZW5lIHNlbnRpZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg1NAorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICLCv3NhbGlkYSBzdGFuZGFyZCwgbyBkaXJlY3RvcmlvLCBjdWFsPyIKKworIzogYnVpbHRpbi9sb2cuYzoxOTU4Cittc2dpZCAiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLWludGVyZGlmZiByZXF1aWVyZSAtLWNvdmVyLWxldHRlciBvIHVuIHBhcmNoZSDDum5pY28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MgorbXNnaWQgIkludGVyZGlmZjoiCittc2dzdHIgIkludGVyZGlmZjoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcmRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJJbnRlcmRpZmYgY29udHJhIHYlZDoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2OQorbXNnaWQgIi0tY3JlYXRpb24tZmFjdG9yIHJlcXVpcmVzIC0tcmFuZ2UtZGlmZiIKK21zZ3N0ciAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWllcmUgLS1yYW5nZS1kaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE5NzMKK21zZ2lkICItLXJhbmdlLWRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLXJhbmdlLWRpZmYgcmVxdWllcmUgLS1jb3Zlci1sZXR0ZXIgbyBwYXJjaGUgw7puaWNvIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODEKK21zZ2lkICJSYW5nZS1kaWZmOiIKK21zZ3N0ciAiUmFuZ2UtZGlmZjoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSYW5nZS1kaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiUmFuZ2UtZGlmZiBjb250cmEgdiVkOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgbGEgZmlybWEgZGVsIGFyY2hpdm8gJyVzJyIKKworIzogYnVpbHRpbi9sb2cuYzoyMDI5Cittc2dpZCAiR2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICJHZW5lcmFuZG8gcGFyY2hlcyIKKworIzogYnVpbHRpbi9sb2cuYzoyMDczCittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgImZhbGzDsyBhbCBjcmVhciBsb3MgYXJjaGl2b3MgZGUgc2FsaWRhIgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsw61taXRlPl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gZW5jb250cmFyIHVuYSByYW1hIHJlbW90YSByYXN0cmVhZGEsIHBvciBmYXZvciBlc3BlY2lmaXF1ZSAiCisiPHVwc3RyZWFtPiBtYW51YWxtZW50ZS5cbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFs8b3BjaW9uZXM+XSBbPGFyY2hpdm8+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImlkZW50aWZpcXVlIGVsIGVzdGFkbyBkZWwgYXJjaGl2byBjb24gdGFncyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICJ1c2FyIGxldHJhcyBtaW7DunNjdWxhcyBwYXJhIGFyY2hpdm9zICdhc3VtaWRvcyBzaW4gY2FtYmlvcyciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICJ1c2FyIGxldHJhcyBtaW7DunNjdWxhcyBwYXJhIGFyY2hpdm9zIGRlICdmc21vbml0b3IgY2xlYW4nIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMyCittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgIm1vc3RyYXIgYXJjaGl2b3MgZW4gY2FjaMOpIGVuIGxhIHNhbGlkYSAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzQKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibW9zdHJhciBhcmNoaXZvcyBib3JyYWRvcyBlbiBsYSBzYWxpZGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzYKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYXIgYXJjaGl2b3MgbW9kaWZpY2Fkb3MgZW4gbGEgc2FsaWRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIG90cm9zIGFyY2hpdm9zIGVuIGxhIHNhbGlkYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIGFyY2hpdm9zIGlnbm9yYWRvcyBlbiBsYSBzYWxpZGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorIm1vc3RyYXIgY29udGVuaWRvIGRlIG5vbWJyZXMgZGUgb2JqZXRvcyBlbiBlbCDDoXJlYSBkZSBzdGFnZSBlbiBsYSBzYWxpZGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICJtb3N0cmFyIGFyY2hpdm9zIGVuIGVsIGZpbGVzeXN0ZW0gcXVlIG5lY2VzaXRhbiBzZXIgYm9ycmFkb3MiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDcKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgIm1vc3RyYXIgc29sbyBub21icmVzIGRlICdkaXJlY3RvcmlvcyBvdHJvcyciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDkKK21zZ2lkICJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIKK21zZ3N0ciAibW9zdHJhciBmaW5hbGVzIGRlIGzDrW5lYSBkZSBhcmNoaXZvcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIm5vIG1vc3RyYXIgZGlyZWN0b3Jpb3MgdmFjw61vcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibW9zdHJhciBhcmNoaXZvcyBubyBmdXNpb25hZG9zIGVuIGxhIHNhbGlkYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NgorbXNnaWQgInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJtb3N0cmFyIGluZm9ybWFjacOzbiByZXNvbHZlci1kZXNoYWNlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAic2FsdGFyIGFyY2hpdm9zIHF1ZSBjb25jdWVyZGVuIGNvbiBlbCBwYXRyw7NuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiZXhjbHVpciBwYXRyb25lcyBsZcOtZG9zIGRlIDxhcmNoaXZvPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NAorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICIiCisibGVlciBwYXRyb25lcyBkZSBleGNsdXNpw7NuIGRlIG1hbmVyYSBhZGljaW9uYWwgcG9yIGRpcmVjdG9yaW8gZW4gPGFyY2hpdm8+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY2Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAiYWdyZWdhciBsYXMgZXhjbHVzaW9uZXMgc3RhbmRhcmQgZGUgZ2l0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTcwCittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgImhhY2VyIGxhIHNhbGlkYSByZWxhdGl2YSBhbCBkaXJlY3RvcmlvIHByaW5jaXBhbCBkZWwgcHJveWVjdG8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzMKK21zZ2lkICJyZWN1cnNlIHRocm91Z2ggc3VibW9kdWxlcyIKK21zZ3N0ciAicmVjdXJyaXIgYSB0cmF2w6lzIGRlIHN1Ym3Ds2R1bG9zIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICJzaSBjdWFscXVpZXIgPGFyY2hpdm8+IG5vIGVzdMOhIGVuIGVsIMOtbmRpY2UsIHRyYXRhcmxvIGNvbW8gdW4gZXJyb3IiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiw6FyYm9sLWlzbW8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisiZmluZ2lyIHF1ZSBsYXMgcnV0YXMgaGFuIHNpZG8gYm9ycmFkYXMgeWEgcXVlIHRvZGF2w61hIGhheSA8w6FyYm9sLWlzbW9zPiAiCisicHJlc2VudGVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAibW9zdHJhciBkYXRhIGRlIGRlYnVnIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yaW8+IFs8cmVmcz4uLi5dXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICJubyBtb3N0cmFyIGVsIFVSTCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJleGVjIgorbXNnc3RyICJlamVjdXRhciIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MSBidWlsdGluL2xzLXJlbW90ZS5jOjYzCittc2dpZCAicGF0aCBvZiBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSBob3N0IgorbXNnc3RyICJydXRhIGRlIGdpdC11cGxvYWQtcGFjayBlbiBlbCBob3N0IHJlbW90byIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgImxpbWl0YXIgYSB0YWdzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgImxpbWl0YXIgYSBoZWFkcyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NworbXNnaWQgImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIgorbXNnc3RyICJubyBtb3N0cmFyIHRhZ3MgcGVsYWRvcyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICJ0b21hciB1cmwuPGJhc2U+Lmluc3RlYWRPZiBlbiBjdWVudGEiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzIKK21zZ2lkICJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiCittc2dzdHIgInNhbGlyIGNvbiBjw7NkaWdvIGRlIHNhbGlkYSAyIHNpIG5vIHNlIGVuY3VlbnRyYW4gcmVmcyBxdWUgY29uY3VlcmRlbiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3NQorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICJtb3N0cmFyIHJlZiBzdWJ5YWNlbnRlIGVuIGFkaWNpw7NuIGFsIG9iamV0byBhcHVudGFkbyBwb3Igw6lsIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzozMAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs8b3BjaW9uZXM+XSA8w6FyYm9sLWlzbW8+IFs8cnV0YT4uLi5dIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjgKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgInNvbG8gbW9zdHJhciDDoXJib2xlcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICJyZWN1cnJpciBlbiBzdWLDoXJib2xlcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAibW9zdHJhciDDoXJib2xlcyBjdWFuZG8gc2UgcmVjdXJyZSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAidGVybWluYXIgZW50cmFkYXMgY29uIGJ5dGUgTlVMIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzYKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICJpbmNsdWlyIHRhbWHDsW8gZGUgb2JqZXRvIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAibGlzdGFyIHNvbG8gbm9tYnJlcyBkZSBhcmNoaXZvcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAidXNhciBydXRhcyBjb21wbGV0YXMiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAiIgorIm1vc3RyYXIgdG9kbyBlbCDDoXJib2w7IG5vIHNvbG8gZWwgZGlyZWN0b3JpbyBhY3R1YWwgKGltcGxpY2EgLS1mdWxsLW5hbWUpIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICJtYm94IHZhY8OtbzogJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU1Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgImdpdCBtZXJnZSBbPG9wY2lvbmVzPl0gWzxjb21taXQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU2Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTcKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgImNhbWJpYXIgYG0nIHJlcXVpZXJlIHVuIHZhbG9yIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIm9wY2nDs24gYCVzJyByZXF1aWVyZSB1biB2YWxvciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICJObyBzZSBwdWRvIGVuY29udHJhciBlc3RyYXRlZ2lhIGRlIGZ1c2nDs24gJyVzJy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJFc3RyYXRlZ2lhcyBkaXNwb25pYmxlcyBzb246IgorCisjOiBidWlsdGluL21lcmdlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJFc3RyYXRlZ2lhcyBwZXJzb25hbGl6YWRhcyBkaXNwb25pYmxlcyBzb246IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ0IGJ1aWx0aW4vcHVsbC5jOjE1MgorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIm5vIG1vc3RyYXIgdW4gZGlmZnN0YXQgYWwgZmluYWwgZGUgbGEgZnVzacOzbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NyBidWlsdGluL3B1bGwuYzoxNTUKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIm1vc3RyYXIgdW4gZGlmZnN0YXQgYWwgZmluYWwgZGUgbGEgZnVzacOzbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0OCBidWlsdGluL3B1bGwuYzoxNTgKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIoc2luw7NuaW1vIHBhcmEgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MCBidWlsdGluL3B1bGwuYzoxNjEKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJhZ3JlZ2FyIChjb21vIG3DoXhpbW8gPG4+KSBlbnRyYWRhcyBkZWwgc2hvcnRsb2cgYWwgbWVuc2FqZSBkZWwgY29tbWl0IGRlICIKKyJmdXNpw7NuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUzIGJ1aWx0aW4vcHVsbC5jOjE2NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJjcmVhciB1biBjb21taXQgw7puaWNvIGVuIGx1Z2FyIGRlIGhhY2VyIHVuYSBmdXNpw7NuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU1IGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAicmVhbGl6YXIgdW4gY29tbWl0IHNpIGxhIGZ1c2nDs24gZXMgZXhpdG9zYSAoZGVmYXVsdCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTcgYnVpbHRpbi9wdWxsLmM6MTczCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJlZGl0YXIgbWVuc2FqZSBhbnRlcyBkZSByZWFsaXphciBjb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTkKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICJwZXJtaXRpciBmYXN0LWZvcndhcnMgKGRlZmF1bHQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYxIGJ1aWx0aW4vcHVsbC5jOjE4MAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgImFib3J0YXIgc2kgZmFzdC1mb3J3YXJkIG5vIGVzIHBvc2libGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjUgYnVpbHRpbi9wdWxsLmM6MTgzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJ2ZXJpZmljYXIgcXVlIGVsIGNvbW1pdCBub21icmFkbyB0aWVuZSB1bmEgZmlybWEgR1BHIHbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjYgYnVpbHRpbi9ub3Rlcy5jOjc4NyBidWlsdGluL3B1bGwuYzoxODcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEyIGJ1aWx0aW4vcmViYXNlLmM6MTUzMSBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJlc3RyYXRlZ2lhIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY3IGJ1aWx0aW4vcHVsbC5jOjE4OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAiZXN0cmF0ZWdpYSBkZSBmdXNpw7NuIHBhcmEgdXNhciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIm9wY2nDs249dmFsb3IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3BjacOzbiBwYXJhIGxhIGVzdHJhdGVnaWEgZGUgZnVzacOzbiBzZWxlY2Npb25hZGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzEKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgImZ1c2lvbmFyIG1lbnNhamUgZGUgY29tbWl0IChwYXJhIHVuYSBmdXNpw7NuIG5vIGZhc3QtZm9yd2FyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzgKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiYWJvcnRhciBsYSBmdXNpw7NuIGVuIHByb2dyZXNvIGFjdHVhbCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MAorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgIi0tYWJvcnQgcGVybyBkZWphIGVsIMOtbmRpY2UgeSBlbCDDoXJib2wgZGUgdHJhYmFqbyBzb2xvcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MgorbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJjb250aW51YXIgbGEgZnVzacOzbiBlbiBwcm9ncmVzbyBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODQgYnVpbHRpbi9wdWxsLmM6MTk5Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJwZXJtaXRpciBmdXNpb25hciBoaXN0b3JpYXMgbm8gcmVsYWNpb25hZGFzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjkwCittc2dpZCAiYnlwYXNzIHByZS1tZXJnZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgImhhY2VyIHVuIGJ5cGFzcyBhIGhvb2tzIHByZS1tZXJnZS1jb21taXQgeSBjb21taXQtbXNnIgorCisjOiBidWlsdGluL21lcmdlLmM6MzA3Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIm5vIHNlIHB1ZG8gZWplY3V0YXIgc3Rhc2guIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEyCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJzdGFzaCBmYWxsw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAibm8gZXMgdW4gb2JqZXRvIHbDoWxpZG86ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzM5IGJ1aWx0aW4vbWVyZ2UuYzozNTYKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJsZWN0dXJhIGRlIMOhcmJvbCBmYWxsw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozODYKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIChuYWRhIHBhcmEgaGFjZXIgc3F1YXNoKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM5NworIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIkNvbW1pdCBkZSBzcXVhc2ggLS0gbm8gYWN0dWFsaXphbmRvIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIk5vIGhheSBtZW5zYWplIGRlIGZ1c2nDs24gLS0gbm8gYWN0dWFsaXphbmRvIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIG5vIGFwdW50YSBhIG5pbmfDum4gY29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIk1hbCBzdHJpbmcgYnJhbmNoLiVzLm1lcmdlb3B0aW9uczogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDUKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJObyBtYW5lamFuZG8gbmFkYSBtw6FzIHF1ZSBmdXNpw7NuIGRlIGRvcyBoZWFkcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiT3BjacOzbiBkZXNjb25vY2lkYSBwYXJhIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZXNjcmliaXIgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICJObyBzZSBwdWVkbyBsZWVyIGRlICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisiTm8gc2UgcmVhbGl6YSBjb21taXQgZGUgbGEgZnVzacOzbjsgdXNlICdnaXQgY29tbWl0JyBwYXJhIGNvbXBsZXRhciBsYSAiCisiZnVzacOzbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwMQorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyJQb3IgZmF2b3IgaW5ncmVzZSB1biBtZW5zYWplIGRlIGNvbW1pdCBxdWUgZXhwbGlxdWUgcG9yIHF1w6kgZXMgbmVjZXNhcmlhICIKKyJlc3RhIGZ1c2nDs24sXG4iCisiZXNwZWNpYWxtZW50ZSBzaSBlc3RvIGZ1c2lvbmEgdW4gdXBzdHJlYW0gYWN0dWFsaXphZG8gZW4gdW5hIHJhbWEgZGUgIgorInTDs3BpY28uXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDYKK21zZ2lkICJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICJVbiBtZW5zYWplIHZhY8OtbyBhYm9ydGEgZWwgY29tbWl0LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiTMOtbmVhcyBjb21lbnphbmRvIGNvbiAnJWMnIHNlcsOhbiBpZ25vcmFkYXMsIHkgdW4gbWVuc2FqZSB2YWPDrW8gYWJvcnRhXG4iCisiIGVsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2MgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiTWVuc2FqZSBkZSBjb21taXQgdmFjw61vLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIk1hcmF2aWxsb3NvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJGdXNpw7NuIGF1dG9tw6F0aWNhIGZhbGzDszsgYXJyZWdsZSBsb3MgY29uZmxpY3RvcyB5IGx1ZWdvIHJlYWxpY2UgdW4gY29tbWl0ICIKKyJjb24gZWwgcmVzdWx0YWRvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTc3Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJObyByYW1hIGFjdHVhbC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzkKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5vIGhheSByZW1vdG8gcGFyYSBsYSByYW1hIGFjdHVhbC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODEKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIlBvciBkZWZlY3RvLCBubyBoYXkgdW4gdXBzdHJlYW0gIGRlZmluaWRvIHBhcmEgbGEgcmFtYSBhY3R1YWwuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIk5vIGhheSByYW1hIGRlIHJhc3RyZW8gcmVtb3RvIHBhcmEgJXMgZGUgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIlZhbG9yIGVycsOzbmVvICclcycgZW4gZWwgZW50b3JubyAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgIm5hZGEgcXVlIHBvZGFtb3MgZnVzaW9uYXIgZW4gJXM6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4MAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICJuYWRhIHF1ZSBwb2RhbW9zIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4MworbXNnaWQgIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYWJvcnQgbm8gZXNwZXJhIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg3Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJObyBoYXkgdW5hIGZ1c2nDs24gcGFyYSBhYm9ydGFyIChmYWx0YSBNRVJHRV9IRUFEKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTYKK21zZ2lkICItLXF1aXQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tcXVpdCBubyBlc3BlcmEgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDkKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIG5vIGVzcGVyYSBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxMworbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIGluIHByb2dyZXNzIChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiTm8gaGF5IGZ1c2nDs24gZW4gcHJvZ3Jlc28gKGZhbHRhIE1FUkdFX0hFQUQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMjkKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiTm8gaGFzIGNvbmNsdWlkbyBsYSBmdXNpw7NuIChleGlzdGUgTUVSR0VfSEVBRCkuXG4iCisiUG9yIGZhdm9yLCByZWFsaXphIHVuIGNvbW1pdCBjb24gbG9zIGNhbWJpb3MgYW50ZXMgZGUgZnVzaW9uYXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJObyBoYXMgY29uY2x1aWRvIGVsIGNoZXJyeS1waWNrIChleGlzdGUgQ0hFUlJZX1BJQ0tfSEVBRCkuXG4iCisiUG9yIGZhdm9yLCByZWFsaXphIHVuIGNvbW1pdCBjb24gbG9zIGNhbWJpb3MgYW50ZXMgZGUgZnVzaW9uYXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiTm8gaGFzIGNvbmNsdWlkbyBlbCBjaGVycnktcGljayAoZXhpc3RlIENIRVJSWV9QSUNLX0hFQUQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgY29tYmluYXIgLS1zcXVhc2ggY29uIC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1NQorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tY29tbWl0LiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgY29tYmluYXIgLS1zcXVhc2ggY29uIC0tY29tbWl0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorIk5vIGhheSBjb21taXQgZXNwZWNpZmljYWRvIHkgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm8gZXN0w6EgY29uZmlndXJhZG8uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM4OAorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJDb21taXQgYXBsYXN0YWRvIGRlbnRybyBkZSB1biBoZWFkIHZhY8OtbyBubyBlcyBzb3BvcnRhZG8gdG9kYXbDrWEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIkNvbW1pdCBubyBmYXN0LWZvcndhcmQgbm8gdGllbmUgc2VudGlkbyBkZW50cm8gZGUgdW4gaGVhZCB2YWPDrW8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0gbmFkYSBxdWUgcG9kYW1vcyBmdXNpb25hciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTcKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJTb2xvIHNlIHB1ZWRlIGZ1c2lvbmFyIGV4YWN0YW1lbnRlIHVuIGNvbW1pdCBlbiB1biBoZWFkIHZhY8OtbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NzYKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJyZWh1c2FuZG8gZnVzaW9uYXIgaGlzdG9yaWFzIG5vIHJlbGFjaW9uYWRhcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODUKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICJZYSBlc3TDoSBhY3R1YWxpemFkby4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICJBY3R1YWxpemFuZG8gJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICJJbnRlbnRhbmRvIGZ1c2nDs24gZW4gw61uZGljZSByZWFsbWVudGUgdHJpdmlhbC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICJOb3AuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTY5Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIllhIGVzdMOhIGFjdHVhbGl6YWRvLiDCoU9oLCB5ZWFhaGghIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NQorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSBoYWNlciBmYXN0LWZvcndhcmQsIGFib3J0YW5kby4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk4IGJ1aWx0aW4vbWVyZ2UuYzoxNjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICJSZWJvYmluYW5kbyBlbCDDoXJib2wgYSBvcmlnaW5hbC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiSW50ZW50YW5kbyBlc3RyYXRlZ2lhIGRlIGZ1c2nDs24gJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIk5pbmd1bmEgZXN0cmF0ZWdpYSBkZSBmdXNpw7NuIG1hbmVqw7MgbGEgZnVzacOzbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIkZ1c2lvbmFyIGNvbiBlc3RyYXRlZ2lhICVzIGZhbGzDsy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIlVzYW5kbyBlbCAlcyBwYXJhIHByZXBhcmFyIHJlc29sdWNpw7NuIGEgbWFuby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkZ1c2nDs24gYXV0b23DoXRpY2EgZnVlIGJpZW47IGRldGVuaWRhIGFudGVzIGRlbCBjb21taXQgY29tbyBzZSBzb2xpY2l0w7NcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM1Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1MworbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAibW9zdHJhciB0b2RvcyBsb3MgYW5jZXN0cm9zIGNvbXVuZXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAiZW5jb250cmFyIGFuY2VzdHJvcyBwYXJhIHVuYSDDum5pY2EgZnVzacOzbiBkZSBuLXbDrWFzIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTcKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAibGlzdGFyIHJldnMgbm8gYWxjYW56YWJsZXMgZGVzZGUgb3Ryb3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1OQorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiwr9lcyBlbCBwcmltZXIgYW5jZXN0cm8gZGVsIG90cm8/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiZW5jb250cmFyIGRvbmRlIDxjb21taXQ+IGZvcmrDsyBkZWwgcmVmbG9nIGRlIDxyZWY+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs8b3BjaW9uZXM+XSBbLUwgPG5vbWJyZTE+IFstTCA8b3JpZ2VuPiBbLUwgPG5vbWJyZTI+XV1dICIKKyI8YXJjaGl2bzE+IDxhcmNoaXZvLW9yaWdlbj4gPGFyY2hpdm8yPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJtYW5kYXIgcmVzdWx0YWRvcyBhIHN0YW5kYXJkIG91dHB1dCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAidXNhciB1biBmdXNpw7NuIGJhc2FkYSBlbiBkaWZmMyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgInBvciBjb25mbGljdG9zLCB1c2FyIG51ZXN0cmEgdmVyc2nDs24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgInBvciBjb25mbGljdG9zLCB1c2FyIGxhIHZlcnNpw7NuIGRlIGVsbG9zIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgInBvciBjb25mbGljdG9zLCB1c2FyIHVuYSB2ZXJzacOzbiBkZSB1bmnDs24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgInBvciBjb25mbGljdG9zLCB1c2FyIGVsIHRhbWHDsW8gZGUgZXN0ZSBtYXJjYWRvciIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgIm5vIGFkdmVydGlyIHNvYnJlIGNvbmZsaWN0b3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ3Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICJjb25maWd1cmFyIGxhYmVscyBwYXJhIGFyY2hpdm8xL29yaWctYXJjaGl2by9hcmNoaXZvMiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAib3BjacOzbiAlcyBkZXNjb25vY2lkYSIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgZWwgb2JqZXRvICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICJubyBzZSBwdWVkZSBtYW5lamFyIG3DoXMgZGUgJWQgYmFzZS4gSWdub3JhbmRvICVzLiIKK21zZ3N0clsxXSAibm8gc2UgcHVlZGUgbWFuZWphciBtw6FzIGRlICVkIGJhc2VzLiBJZ25vcmFuZG8gJXMuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAibm8gbWFuZWphbmRvIG5hZGEgZGlzdGludG8gYSBmdXNpb25lcyBkZSBkb3MgaGVhZHMuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc0IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgcmVmICclcyciCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVzb2x2ZXIgcmVmICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIkZ1c2lvbmFuZG8gJXMgY29uICVzXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICJpbnB1dCBlcyB0ZXJtaW5hZGEgY29uIE5VTCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTUgYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgInBlcm1pdGlyIG9iamV0b3MgZmFsdGFudGVzIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAicGVybWl0aXIgbGEgY3JlYWNpw7NuIGRlIG3DoXMgZGUgdW4gw6FyYm9sIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPG9wdGlvbnM+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC0iCisic2l6ZT08dGFtYcOxbz4pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIm9iamV0byBkaXJlY3RvcmlvIGNvbnRlbmllbmRvIGNvbmp1bnRvcyBkZSBwYXJlcyBwYWNrZmlsZSB5IHBhY2staW5kZXgiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorImR1cmFudGUgZWwgcmVwYWNrLCByZWNvbGVjdGFyIGxvcyBwYWNrLWZpbGVzIGRlIHRhbWHDsW8gbWVub3IgZW4gdW4gYmF0Y2ggcXVlICIKKyJlcyBtw6FzIGdyYW5kZSBxdWUgZXN0ZSB0YW1hw7FvIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJtdWNob3MgYXJndW1lbnRvcyIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjAKK21zZ2lkICItLWJhdGNoLXNpemUgb3B0aW9uIGlzIG9ubHkgZm9yICdyZXBhY2snIHN1YmNvbW1hbmQiCittc2dzdHIgIm9wY2nDs24gLS1iYXRjaC1zaXplIGVzIHNvbG8gcGFyYSBlbCBzdWJjb21hbmRvICdyZXBhY2snIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgc3ViY29tbWFuZDogJXMiCittc2dzdHIgInN1YmNvbWFuZG8gZGVzY29ub2NpZG86ICVzIgorCisjOiBidWlsdGluL212LmM6MTgKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8b3BjaW9uZXM+XSA8ZnVlbnRlPi4uLiA8ZGVzdGlubz4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIsK/RGlyZWN0b3JpbyAlcyBlc3TDoSBlbiBlbCDDrW5kaWNlIHkgbm8gaGF5IHN1Ym3Ds2R1bG8/IgorCisjOiBidWlsdGluL212LmM6ODUKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorIlBvciBmYXZvciBhZ3JlZ2EgZWwgc3RhZ2UgZGUgdHVzIGNhbWJpb3MgYSAuZ2l0bW9kdWxlcyBvIHJlYWxpemEgdW4gc3Rhc2ggIgorInBhcmEgcHJvY2VkZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyBlc3TDoSBlbiBlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL212LmM6MTI1Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJmb3J6YXIgbW92ZXIvcmVub21icmFyIGluY2x1c28gc2kgZWwgb2JqZXRpdm8gZXhpc3RlIgorCisjOiBidWlsdGluL212LmM6MTI3Cittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgInNhbHRhciBlcnJvcmVzIGRlIG1vdmVyL3Jlbm9tYnJhciIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiZGVzdGlubyAnJXMnIG5vIGVzIHVuIGRpcmVjdG9yaW8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICJSZXZpc2FuZG8gY2FtYmlvIGRlIG5vbWJyZSBkZSAnJXMnIGEgJyVzJ1xuIgorCisjOiBidWlsdGluL212LmM6MTg0Cittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAibWFsYSBmdWVudGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJubyBzZSBwdWRlIG1vdmVyIHVuIGRpcmVjdG9yaW8gZW4gc8OtIG1pc21vIgorCisjOiBidWlsdGluL212LmM6MTkwCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbW92ZXIgdW4gZGlyZWN0b3JpbyBkZW50cm8gZGUgdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgImRpcmVjdG9yaW8gZGUgZnVlbnRlIGVzdMOhIHZhY8OtbyIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIm5vIHNlIGVuY3VlbnRyYSBiYWpvIGNvbnRyb2wgZGUgdmVyc2nDs24iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjcKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgImRlc3Rpbm8gZXhpc3RlIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgInNvYnJlc2NyaWJpZW5kbyAnJXMnIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgc29icmVzY3JpYmlyIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJtw7psdGlwbGVzIGZ1ZW50ZXMgcGFyYSBlbCBtaXNtbyBvYmpldGl2byIKKworIzogYnVpbHRpbi9tdi5jOjI0MworbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZWwgZGlyZWN0b3JpbyBkZSBkZXN0aW5vIG5vIGV4aXN0ZSIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIGZ1ZW50ZT0lcywgZGVzdGlubz0lcyIKKworIzogYnVpbHRpbi9tdi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICJSZW5vbWJyYW5kbyAlcyBhICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzcgYnVpbHRpbi9yZW1vdGUuYzo3MTYgYnVpbHRpbi9yZXBhY2suYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgInJlbm9tYnJhbmRvICclcycgZmFsbMOzIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDAzCittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcGNpb25lcz5dIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA0Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcGNpb25lcz5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wY2lvbmVzPl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MgorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAiaW1wcmltaXIgc8OzbG8gbm9tYnJlcyAoc2luIFNIQS0xKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MworbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAic8OzbG8gdXNhciB0YWdzIHBhcmEgbm9tYnJhciBjb21taXRzIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY1Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgInNvbG8gdXNhciByZWZzIHF1ZSBjb25jdWVyZGVuIGNvbiA8cGF0csOzbj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjcKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImlnbm9yYXIgcmVmcyBxdWUgY29uY3VlcmRlbiBjb24gPHBhdHLDs24+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY5Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAibGlzdGFyIHRvZG9zIGxvcyBjb21taXRzIGFsY2FuemFibGVzIGRlc2RlIHRvZGFzIGxhcyByZWZlcmVuY2lhcyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MAorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVlciBkZXNkZSBzdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MQorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAicGVybWl0aXIgaW1wcmltaXIgbm9tYnJlcyBgdW5kZWZpbmVkYCAocHJlZGV0ZXJtaW5hZG8pIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDc3Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgImRlc3JlZmVyZW5jaWFyIHRhZ3MgZW4gbGEgZW50cmFkYSAodXNvIGludGVybm8pIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXJlbmNpYS1kZS1ub3Rhcz5dIFtsaXN0IFs8b2JqZXRvPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcmVuY2lhLWRlLW5vdGFzPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSAiCisiPG1lbnNhamU+IHwgLUYgPGFyY2hpdm8+IHwgKC1jIHwgLUMpIDxvYmpldG8+XSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyZW5jaWEtZGUtbm90YXM+XSBjb3B5IFstZl0gPG9iamV0by1vcmlnZW4+IDxvYmpldG8tIgorImRlc3Rpbm8+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXJlbmNpYS1kZS1ub3Rhcz5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtZW5zYWplPiAiCisifCAtRiA8YXJjaGl2bz4gfCAoLWMgfCAtQykgPG9iamV0bz5dIFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcmVuY2lhLWRlLW5vdGFzPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcmVuY2lhLWRlLW5vdGFzPl0gc2hvdyBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyZW5jaWEtZGUgbm90YXM+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxlc3RyYXRlZ2lhPl0gIgorIjxyZWZlcmVuY2lhLWRlLW5vdGFzPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcmVuY2lhLWRlLW5vdGFzPl0gcmVtb3ZlIFs8b2JqZXRvPi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXJlbmNpYS1kZS1ub3Rhcz5dIHBydW5lIFstbl0gWy12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXJlbmNpYS1kZS1ub3Rhcz5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZXRvPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDkKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxvcGNpb25lcz5dIFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NAorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs8b3BjaW9uZXM+XSA8b2JqZXRvLW9yaWdlbj4gPG9iamV0by1kZXN0aW5vPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxvYmpldG8tb3JpZ2VuPiA8b2JqZXRvLWRlc3Rpbm8+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs8b3BjaW9uZXM+XSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPG9wY2lvbmVzPl0gPHJlZmVyZW5jaWEtZGUtbm90YXM+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wY2lvbmVzPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wY2lvbmVzPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MgorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPG9wY2lvbmVzPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiRXNjcmliZS9lZGl0YSBsYXMgbm90YXMgcGFyYSBsb3Mgc2lndWllbnRlcyBvYmpldG9zOiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiaW5jYXBheiBkZSBpbmljaWFyICdzaG93JyBwYXJhIGVsIG9iamV0byAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyIHNhbGlkYSBkZSAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJmYWxsw7MgbGEgZmluYWxpemFjacOzbiBkZSAnc2hvdycgcGFyYSBlbCBvYmpldG8gJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5NworbXNnaWQgInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAicG9yIGZhdm9yIHN1bWluaXN0cmFyIGxvcyBjb250ZW5pZG9zIGRlIG5vdGEgdXNhbmRvIGxhIG9wY2nDs24gLW0gbyAtRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAiaW5jYXBheiBkZSBlc2NyaWJpciBlbCBvYmpldG8gZGUgbm90YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAibG9zIGNvbnRlbmlkb3MgZGUgbm90YSBoYW4gc2lkbyBkZWphZG9zIGVuICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQyIGJ1aWx0aW4vdGFnLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciBvIGxlZXIgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiZmFsbMOzIGFsIHJlc29sdmVyICclcycgY29tbyByZWYgdsOhbGlkYS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICJmYWxsw7MgYWwgbGVlciBvYmpldG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIGxhIGRhdGEgZGUgbGEgbm90YSBkZSB1biBvYmpldG8gbm8tYmxvYiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgImzDrW5lYSBkZSBlbnRyYWRhIG1hbCBmb3JtYWRhOiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNvcGlhciBub3RhcyBkZSAnJXMnIGEgJyVzJyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAicmVjaGF6YW5kbyAlcyBub3RhcyBlbiAlcyAoZnVlcmEgZGUgcmVmcy9ub3Rlcy8pIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAiZGVtYXNpYWRvcyBwYXLDoW1ldHJvcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIm5vIHNlIGVuY29udHJhcm9uIG5vdGFzIHBhcmEgb2JqZXRvICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMCBidWlsdGluL25vdGVzLmM6NTc2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiY29udGVuaWRvcyBkZSBsYSBub3RhIGNvbW8gY2FkZW5hIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEzIGJ1aWx0aW4vbm90ZXMuYzo1NzkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAiY29udGVuaWRvcyBkZSBsYSBub3RhIGVuIHVuIGFyY2hpdm8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTYgYnVpbHRpbi9ub3Rlcy5jOjU4MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAicmV1dGlsaXphciB5IGVkaXRhciBlbCBvYmpldG8gZGUgbm90YSBlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTkgYnVpbHRpbi9ub3Rlcy5jOjU4NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAicmV1dGlsaXphciBlbCBvYmpldG8gZGUgbm90YSBlc3BlY2lmaWNhZG8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjIgYnVpbHRpbi9ub3Rlcy5jOjU4OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAicGVybWl0aXIgYWxtYWNlbmFyIG5vdGEgdmFjw61hIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICJyZWVtcGxhemFyIG5vdGFzIGV4aXN0ZW50ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBhZ3JlZ2FyIG5vdGFzLiBTZSBlbmNvbnRyw7Mgbm90YXMgZXhpc3RlbnRlcyBwYXJhIG9iamV0byAlcy4gVXNlICIKKyInLWYnIHBhcmEgc29icmVzY3JpYmlyIGxhcyBub3RhcyBleGlzdGVudGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYzIGJ1aWx0aW4vbm90ZXMuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJTb2JyZXNjcmliaWVuZG8gbm90YXMgZXhpc3RlbnRlcyBwYXJhIG9iamV0byAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiUmVtb3ZpZW5kbyBub3RhIHBhcmEgb2JqZXRvICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTcKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVlciBvYmpldG9zIGRlc2RlIHN0ZGluIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk5Cittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgImNhcmdhciBjb25maWd1cmFjacOzbiBkZSByZWVzY3JpdHVyYSBwYXJhIDxjb21hbmRvPiAoaW1wbGljYSAtLXN0ZGluKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAibXV5IHBvY29zIHBhcsOhbWV0cm9zIgorCisjOiBidWlsdGluL25vdGVzLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGNvcGlhciBub3Rhcy4gU2UgZW5jb250csOzIG5vdGFzIGV4aXN0ZW50ZXMgcGFyYSBlbCBvYmpldG8gJXMuICIKKyJVc2UgJy1mJyBwYXJhIHNvYnJlc2NyaWJpciBsYXMgbm90ZXMgZXhpc3RlbnRlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAiZmFsdGFuIG5vdGFzIGVuIGxhIGZ1ZW50ZSBkZWwgb2JqZXRvICVzLiBObyBzZSBwdWVkZSBjb3BpYXIuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJMYXMgb3BjaW9uZXMgLW0vLUYvLWMvLUMgaGFuIHNpZG8gZGVwcmVjYWRhcyBwb3IgZWwgc3ViY29tYW5kbyAnZWRpdCcuXG4iCisiUG9yIGZhdm9yIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgZW4gY2FtYmlvLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6Njk4Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAiZmFsbMOzIGFsIGJvcnJhciByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAiZmFsbMOzIGFsIGJvcnJhciByZWYgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAibm8gc2UgcHVkbyBlbGltaW5hciBlbCDDoXJib2wgZGUgdHJhYmFqbyAnZ2l0IG5vdGVzIG1lcmdlJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJmYWxsw7MgYWwgbGVlciByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJubyBzZSBwdWRvIGVuY29udHJhciBjb21taXQgZGUgTk9URVNfTUVSR0VfUEFSVElBTC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgIm5vIHNlIHB1ZG8gYW5hbGl6YXIgY29tbWl0IGRlIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzM5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJmYWxsw7MgYWwgcmVzb2x2ZXIgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICJmYWxsw7MgYWwgZmluYWxpemFyIGxhcyBub3RhcyBkZSBmdXNpw7NuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiCittc2dzdHIgImVzdHJhdGVnaWEgZGUgZnVzacOzbiBkZSBub3RhcyAlcyBkZXNjb25vY2lkYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9uZXMgZ2VuZXJhbGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9uZXMgZGUgZnVzacOzbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKyJyZXNvbHZlciBjb25mbGljdG9zIGRlIG5vdGFzIHVzYW5kbyBsYSBlc3RyYXRlZ2lhIGVudHJlZ2FkYXMgKG1hbnVhbC9vdXJzLyIKKyJ0aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJSZWFsaXphbmRvIGNvbW1pdCBhIGxhcyBub3RhcyBubyBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorImZpbmFsaXphciBmdXNpw7NuIGRlIG5vdGFzIHJlYWxpemFuZG8gdW4gY29tbWl0IGRlIGxhcyBub3RhcyBubyBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiQWJvcnRhbmRvIG5vdGFzIGRlIHJlc29sdWNpw7NuIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiYWJvcnRhciBub3RhcyBkZSBmdXNpw7NuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODA3Cittc2dpZCAiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5IgorbXNnc3RyICJubyBzZSBwdWVkZW4gbWV6Y2xhciAtLWNvbW1pdCwgLS1hYm9ydCDDsyAtcy8tLXN0cmF0ZWd5IgorCisjOiBidWlsdGluL25vdGVzLmM6ODEyCittc2dpZCAibXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIgorbXNnc3RyICJkZWJlIGVzcGVjaWZpY2FyIHVuYSByZWYgZGUgbm90YXMgYSBmdXNpb25hciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIgorbXNnc3RyICItLXN0cmF0ZWd5Ly1zIGRlc2Nvbm9jaWRhOiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJhIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAidW5hIGZ1c2nDs24gZGUgbm90YXMgZW4gJXMgeWEgZXN0w6EgZW4gcHJvZ3Jlc28gZW4gJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAiZmFsbMOzIGFsIGd1YXJkYXIgdW4gbGluayBwYXJhIGVsIHJlZiBkZSBub3RhcyBhY3R1YWwgKCVzKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiYWJvcnQnLlxuIgorbXNnc3RyICIiCisiRnVzacOzbiBhdXRvbcOhdGljYSBkZSBub3RhcyBmYWxsw7MuIEFycmVnbGUgY29uZmxpY3RvcyBlbiAlcyB5IHJlYWxpY2UgdW4gIgorImNvbW1pdCBjb24gZWwgcmVzdWx0YWRvICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvIGFib3J0ZSBsYSBmdXNpw7NuIGNvbiAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0Jy5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NyBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiRmFsbMOzIGFsIHJlc29sdmVyICclcycgY29tbyB1bmEgcmVmIHbDoWxpZGEuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICJFbCBvYmpldG8gJXMgbm8gdGllbmUgbm90YXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiaW50ZW50YXIgZWxpbWluYXIgdW5hIG5vdGEgbm8gZXhpc3RlbnRlIG5vIGVzIHVuIGVycm9yIgorCisjOiBidWlsdGluL25vdGVzLmM6OTE1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxlZXIgbm9tYnJlcyBkZSBvYmpldG9zIGRlIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0IGJ1aWx0aW4vcHJ1bmUuYzoxMzAgYnVpbHRpbi93b3JrdHJlZS5jOjE2NAorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAibm8gZWxpbWluYXIsIHNvbG8gbW9zdHJhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgInJlcG9ydGFyIG5vdGFzIHJlY29ydGFkYXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgInJlZmVyZW5jaWEtZGUtbm90YXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTkKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAidXNhciBub3RhcyBkZXNkZSA8cmVmZXJlbmNpYS1kZS1ub3Rhcz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgInN1YmNvbWFuZG8gZGVzY29ub2NpZG86ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3BjaW9uZXM+Li4uXSBbPCA8bGlzdGEtZGUtcmVmPiB8IDwgPGxpc3RhLWRlLSIKKyJvYmpldG9zPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTMKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcGNpb25lcz4uLi5dIDxub21icmUtYmFzZT4gWzwgPGxpc3RhLWRlLXJlZnM+IHwgPCA8bGlzdGEtIgorImRlLW9iamV0b3M+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2tlZCBvYmplY3QgQ1JDIGZvciAlcyIKK21zZ3N0ciAibWFsIHBhcXVldGUgZGUgb2JqZXRvIENSQyBwYXJhICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJvYmpldG8gZW1wYXF1ZXRhZG8gY29ycnVwdG8gcGFyYSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgImRlbHRhIHJlY3Vyc2l2byBlbmNvbnRyYWRvIHBhcmEgb2JqZXRvICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAiJXUgb2JqZXRvcyBvcmRlbmFkb3MsIGVzcGVyYWRvcyAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIGlzIGludmFsaWQ6ICVzIgorbXNnc3RyICJwYWNrZmlsZSBlcyBpbnbDoWxpZG86ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBwYWNrZmlsZSBmb3IgcmV1c2U6ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFicmlyIHBhY2tmaWxlIHBhcmEgcmV1c2FyOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MDIKK21zZ2lkICJ1bmFibGUgdG8gc2VlayBpbiByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYnVzY2FyIGVuIGxvcyBwYWNrZmlsZSByZXVzYWRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MTMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBsZWVyIGRlIHBhY2tmaWxlIHJldXNhZG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODQxCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorImRlc2hhYmlsaXRhbmRvIGVzY3JpdHVyYSBiaXRtYXAsIHBhcXVldGVzIHNvbiBkaXZpZGlkb3MgZGViaWRvIGEgcGFjay4iCisicGFja1NpemVMaW1pdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NTQKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIkVzY3JpYmllbmRvIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTE3IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgImZhbGzDsyBhbCBpbmljaWFyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICIlPFBSSXUzMj4gb2JqZXRvcyBlc2NyaXRvcyBtaWVudHJhcyBzZSBlc3BlcmFiYW4gJTxQUkl1MzI+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjExNjQKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAiIgorImRlc2hhYmlsaXRhbmRvIGVzY3JpdHVyYSBiaXRtYXAsIHlhIHF1ZSBhbGd1bm9zIG9iamV0b3Mgbm8gZXN0w6FuIHNpZW5kbyAiCisiZW1wYXF1ZXRhZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgIm92ZXJmbG93IGRlIG9mZnNldCBlbiBsYSBiYXNlIGRlIGRlbHRhIGVuIHBhcXVldGUgcGFyYSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgIm91dGJvdW5kIGRlIG9mZnNldCBlbiBsYSBiYXNlIGRlIGRlbHRhIHBhcmEgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTg3MAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIkNvbnRhbmRvIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gb2J0ZW5lciBlbCB0YW1hw7FvIGRlICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgImluY2FwYXogZGUgYW5hbGl6YXIgaGVhZGVyIGRlbCBvYmpldG8gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMDEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIm9iamV0byAlcyBubyBwdWVkZSBzZXIgbGXDrWRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIm9iamV0byAlcyBpbmNvbnNpc3RlbnRlIGNvbiBlbCBsYXJnbyBkZWwgb2JqZXRvICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMjUKK21zZ2lkICJzdWJvcHRpbWFsIHBhY2sgLSBvdXQgb2YgbWVtb3J5IgorbXNnc3RyICJzdWJvcHRpbWFsIHBhY2sgLSBmdWVyYSBkZSBtZW1vcmlhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcyIKK21zZ3N0ciAiQ29tcHJlc2nDs24gZGVsdGEgdXNhbmRvIGhhc3RhICVkIGhpbG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgZW1wYXF1ZXRhciBvYmpldG9zIGFsY2FuemFibGVzIGRlc2RlIHRhZyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU5Cittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29tcHJpbWllbmRvIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2NQorbXNnaWQgImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIKK21zZ3N0ciAiaW5jb25zaXN0ZW5jaWEgY29uIGxhIGN1ZW50YSBkZSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisic2UgZXNwc2VyYWJhIElEIGRlIG9iamV0byBhbCBib3JkZSwgc2Ugb2J0dXZvIGJhc3VyYTpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorInNlIGVzcGVyYWJhIElEIGRlIG9iamV0bywgc2Ugb2J0dXZvIGJhc3V0YTpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODQ2Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJ2YWxvciBpbnbDoWxpZG8gcGFyYSAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMTMKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICJubyBzZSBwdWVkZSBhYnJpciDDrW5kaWNlIGRlIHBhcXVldGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAib2JqZXRvIHBlcmRpZG8gZW4gJXMgbm8gcHVkbyBzZXIgZXhhbWluYWRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMjEKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICJpbmNhcGF6IGRlIGZvcnphciB1biBvYmpldG8gcGVyZGlkbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICJubyBlcyB1bmEgcmV2ICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAibWFsYSByZXZpc2nDs24gJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQxCittc2dpZCAidW5hYmxlIHRvIGFkZCByZWNlbnQgb2JqZWN0cyIKK21zZ3N0ciAiaW5jYXBheiBkZSBhw7FhZGlyIG9iamV0b3MgcmVjaWVudGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAidmVyc2nDs24gZGUgw61uZGljZSBubyBzb3BvcnRhZGEgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJtYWxhIHZlcnNpw7NuIGRlbCDDrW5kaWNlICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNgorbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI8dmVyc2nDs24+Wyw8b2Zmc2V0Pl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNworbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKyJlc2NyaWJpciBlbCDDrW5kaWNlIGRlIHBhcXVldGUgZW4gbGEgdmVyc2nDs24gZGUgZm9ybWF0byBpZHggZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDAKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJ0YW1hw7FvIG3DoXhpbW8gZGUgY2FkYSBwYXF1ZXRlIHJlc3VsdGFudGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiaWdub3JhciBvYmpldG9zIHByZXN0YWRvcyBkZSBvdHJvcyBhbG1hY2VuZXMgZGUgb2JqZXRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ0Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJpZ25vcmFyIG9iamV0b3MgcGFxdWV0ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ2Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAibGltaXRhciB2ZW50YW5hIGRlIHBhcXVldGUgcG9yIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0OAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgImxpbWl0YXIgdmVudGFuYSBkZSBwYXF1ZXRlIHBvciBtZW1vcmlhIGVuIGFkaWNpw7NuIGEgbMOtbWl0ZSBkZSBvYmpldG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTAKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAibG9uZ2l0dWQgbcOheGltYSBkZSBjYWRlbmEgZGVsdGEgcGVybWl0aWRhIGVuIGVsIHBhcXVldGUgcmVzdWx0YW50ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUyCittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICJyZXVzYXIgZGVsdGFzIGV4aXN0ZW50ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NAorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgInJldXRpbGl6YXIgb2JqZXRvcyBleGlzdGVudGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTYKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgInVzYXIgb2JqZXRvcyBPRlNfREVMVEEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1OAorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgInVzYXIgaGlsb3MgY3VhbmRvIHNlIGJ1c3F1ZSBwYXJhIG1lam9yZXMgY29uY29yZGFuY2lhcyBkZSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAibm8gY3JlYXIgdW4gcGFxdWV0ZSByZXN1bHRhbnRlIHZhY8OtbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYyCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVlciBhcmd1bWVudG9zIGRlIHJldmlzacOzbiBkZSBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY0Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgImxpbWl0YXIgbG9zIG9iamV0b3MgYSBhcXVlbGxvcyBxdWUgbm8gaGFuIHNpZG8gZW1wYXF1ZXRhZG9zIHRvZGF2w61hIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5jbHVpciBvYmpldG9zIGFsY2FuemFibGVzIHBvciBjdWFscXVpZXIgcmVmZXJlbmNpYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICJpbmNsdWlyIG9iamV0b3MgcmVmZXJpZG9zIHBvciBlbnRyYWRhcyBkZSByZWZsb2ciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgImluY2x1aXIgb2JqZXRvcyByZWZlcmlkb3MgcG9yIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3NgorbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAibW9zdHJhciBwYXF1ZXRlIGVuIHN0ZG91dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc4Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICJpbmNsdWlyIG9iamV0b3MgdGFnIHF1ZSByZWZpZXJlbiBhIG9iamV0b3MgYSBzZXIgZW1wYXF1ZXRhZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1hbnRlbmVyIG9iamV0b3MgaW5hbGNhbnphYmxlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgyCittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJlbXBhcXVldGFyIG9iamV0b3Mgc3VlbHRvcyBpbmFsY2FuemFibGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODQKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZGVzZW1wYXF1ZXRhciBvYmpldG9zIGluYWxjYW56YWJsZXMgbcOhcyBudWV2b3MgcXVlIDx0aWVtcG8+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODcKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICJ1c2FyIGVsIGFsZ29yaXRtbyBzcGFyc2UgcmVhY2hhYmlsaXR5IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODkKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAiY3JlYXIgcGFxdWV0ZXMgZGVsZ2Fkb3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICJjcmVhciBwYXF1ZXRlcyBhZGVjdWFkb3MgcGFyYSBmZXRjaGVzIHN1cGVyZmljaWFsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MworbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgImlnbm9yYXIgcGFxdWV0ZXMgcXVlIHRpZW5lbiB1biBhcmNoaXZvIC5rZWVwIGFjb21wYcOxYW50ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk1Cittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAiaWdub3JhciBlc3RlIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NworbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIm5pdmVsIGRlIGNvbXByZXNpw7NuIGRlbCBwYXF1ZXRlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTkKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAibm8gb2N1bHRhciBjb21taXRzIHBvciBpbmplcnRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAxCittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICIiCisidXNhciB1biDDrW5kaWNlIGJpdG1hcCBzaSBlc3TDoSBkaXNwb25pYmxlIHBhcmEgYWNlbGVyYXIgbGEgY3VlbnRhIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwMworbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgImVzY3JpYmlyIHVuIMOtbmRpY2UgZGUgYml0bWFwIGp1bnRvIGFsIMOtbmRpY2UgZGUgcGFxdWV0ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzA3Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgImVzY3JpYmlyIHVuIMOtbmRpY2UgZGUgYml0bWFwIHNpIGVzIHBvc2libGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxMQorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIm1hbmVqbyBkZSBvYmpldG9zIHBlcmRpZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTQKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZW1wYXF1ZXRhciBvYmpldG9zIGVuIHBhY2tmaWxlcyBwcm9taXNvcmVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTYKK21zZ2lkICJyZXNwZWN0IGlzbGFuZHMgZHVyaW5nIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJyZXNwZXRhciBpc2xhcyBkdXJhbnRlIGxhIGNvbXByZXNpw7NuIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgInByb2Z1bmRpZGFkIGRlIGNhZGVuYSBkZSBkZWx0YSAlZCBlcyBtdXkgcHJvZnVuZGEsIGZvcnphbmRvICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgInBhY2suZGVsdGFDYWNoZUxpbWl0IGVzIG11eSBncmFuZGUsIGZvcnphbmRvICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDQKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorIi0tbWF4LXBhY2stc2l6ZSBubyBwdWVkZSBzZXIgdXNhZG8gcGFyYSBjb25zdHJ1aXIgdW4gcGFxdWV0ZSBwYXJhICIKKyJ0cmFuc2ZlcmVuY2lhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDYKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAidGFtYcOxbyBtw61uaW1vIGRlbCBwYXF1ZXRlIGVzIDEgTWlCIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIi0tdGhpbiBubyBwdWVkZSBzZXIgdXNhZG8gcGFyYSBjb25zdHJ1aXIgdW4gcGFxdWV0ZSBpbmRleGFibGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNAorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIHkgLS11bnBhY2stdW5yZWFjaGFibGUgc29uIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgdXNhci0tZmlsdGVyIHNpbiAtLXN0ZG91dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDgxCittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiRW51bWVyYW5kbyBvYmpldG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG90YWwgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCByZXVzZWQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pIgorbXNnc3RyICJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNhZG8gJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiZW1wYXF1ZXRhciB0b2RvIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgInJlY29ydGFyIHJlZnMgcGVyZGlkb3MgKGRlZmF1bHQpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjkKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MgorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICJSZW1vdmllbmRvIG9iamV0b3MgZHVwbGljYWRvcyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aWVtcG8+XSBbLS1dIFs8aGVhZD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTMxCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICJyZXBvcnRhciBvYmpldG9zIHJlY29ydGFkb3MiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZXhwaXJhciBvYmpldG9zIG3DoXMgdmllam9zIGEgPHRpZW1wbz4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAibGltaXRhciBlbCByZWNvcnJpZG8gYSBvYmpldG9zIGZ1ZXJhIGRlIGxvcyBwYXF1ZXRlcyBkZWwgcHJvbWlzb3IiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlY29ydGFyIGVuIHVuIHJlcG9zaXRvcmlvIGRlIG9iamV0b3MtcHJlY2lvc29zIgorCisjOiBidWlsdGluL3B1bGwuYzo2NiBidWlsdGluL3B1bGwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIlZhbG9yIGludsOhbGlkbyBwYXJhICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBwdWxsIFs8b3BjaW9uZXM+XSBbPHJlcG9zaXRvcmlvPiBbPGVzcGVjaWZpY2FjacOzbi1kZS1yZWZlcmVuY2lhPi4uLl1dIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDIKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbCBkZSBmZXRjaCByZWN1cnNpdm8gZW4gc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICJPcGNpb25lcyByZWxhY2lvbmFkYXMgYSBmdXNpw7NuIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgImluY29ycG9yYXIgY2FtYmlvcyBwb3IgcmViYXNlIGVuIGx1Z2FyIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NyBidWlsdGluL3JlYmFzZS5jOjQ2NyBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAicGVybWl0aXIgZmFzdC1mb3J3YXJkIgorCisjOiBidWlsdGluL3B1bGwuYzoxODYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAiZWplY3V0YXIgYXV0b23DoXRpY2FtZW50ZSBzdGFzaC9zdGFzaCBwb3AgYW50ZXMgeSBkZXNwdcOpcyBkZSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwMgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiT3BjaW9uZXMgcmVsYWNpb25hZGFzIGEgZmV0Y2giCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIxMgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgImZvcnphciBzb2JyZXNjcml0dXJhIGRlIGxhIHJhbWEgbG9jYWwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibsO6bWVybyBkZSBzdWJtw7NkdWxvcyBxdWUgcmVhbGl6YW4gcHVsbCBlbiBwYXJhbGVsbyIKKworIzogYnVpbHRpbi9wdWxsLmM6MzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJWYWxvciBpbnbDoWxpZG8gcGFyYSBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM3Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiTm8gaGF5IGNhbmRpZGF0byBwYXJhIHJlYmFzYXIgZW50cmUgbGFzIHJlZnMgcXVlIGhhcyBiYWphZG8gY29uIGZldGNoLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJObyBoYXkgY2FuZGlkYXRvcyBwYXJhIGZ1c2lvbmFyIGVudHJlIGxhcyByZWZzIHF1ZSBoYXMgYmFqYWRvIGNvbiBmZXRjaC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MAorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyJHZW5lcmFsbWVudGUgZXN0byBzaWduaWZpY2EgcXVlIGhhcyBwcm92ZcOtZG8gdW4gd2lsZGNhcmQgZGUgcmVmc3BlYyBxdWUgbm8gIgorInRpZW5lXG4iCisiY29uY29yZGFuY2lhIGVuIGVsIGZpbmFsIHJlbW90by4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiU2UgaGEgc29saWNpdGFkbyB1biBwdWxsIGRlbCByZW1vdG8gJyVzJywgcGVybyBubyBzZSBoYSBlc3BlY2lmaWNhZG9cbiIKKyJ1bmEgcmFtYS4gUG9ycXVlIGVzdGUgbm8gZXMgZWwgcmVtb3RvIGNvbmZpZ3VyYWRvIHBvciBkZWZhdWx0XG4iCisicGFyYSB0dSByYW1hIGFjdHVhbCwgdGllbmVzIHF1ZSBlc3BlY2lmaWNhciB1bmEgcmFtYSBlbiBsYSBsw61uZWEgZGUgY29tYW5kby4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0OCBidWlsdGluL3JlYmFzZS5jOjEzNzUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIk5vIHRlIGVuY3VlbnRyYXMgYWN0dWFsbWVudGUgZW4gbGEgcmFtYS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlBvciBmYXZvciBlc3BlY2lmaWNhIGEgcXXDqSByYW1hIHF1aWVyZXMgcmViYXNhci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MiBidWlsdGluL3B1bGwuYzo0NjcgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiUG9yIGZhdm9yIGVzcGVjaWZpY2EgYSBxdcOpIHJhbWEgcXVpZXJlcyBmdXNpb25hci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MyBidWlsdGluL3B1bGwuYzo0NjgKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJWZXIgZ2l0LXB1bGwoMSkgcGFyYSBkZXRhbGxlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NjEgYnVpbHRpbi9wdWxsLmM6NDcwCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8cmVtb3RvPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDU1IGJ1aWx0aW4vcHVsbC5jOjQ3MCBidWlsdGluL3B1bGwuYzo0NzUKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPHJhbWE+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NjMgYnVpbHRpbi9yZWJhc2UuYzoxMzczIGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gaGF5IGluZm9ybWFjacOzbiBkZSByYXN0cmVvIHBhcmEgbGEgcmFtYSBhY3R1YWwuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzIgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgIiIKKyJTaSBkZXNlYXMgY29uZmlndXJhciBlbCByYXN0cmVvIGRlIGluZm9ybWFjacOzbiBwYXJhIGVzdGEgcmFtYSwgcHVlZGVzICIKKyJoYWNlcmxvIGNvbjoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIlR1IGNvbmZpZ3VyYWNpw7NuIGVzcGVjaWZpY2EgZnVzaW9uYXIgY29uIGxhIHJlZiAnJXMnXG4iCisiZGUgdHUgcmVtb3RvLCBwZXJvIG5vIHNlIHB1ZG8gaGFjZXIgZmV0Y2ggYSBlc2EgcmVmLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgY29tbWl0ICVzIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFjY2VkZXIgYWwgY29tbWl0ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4NjcKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgImlnbm9yYW5kbyAtLXZlcmlmeS1zaWduYXR1cmVzIHBhcmEgcmViYXNlIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjIKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICJMYSBvcGNpw7NuIC0tW25vLV1hdXRvc3Rhc2ggc8OzbG8gZXMgdsOhbGlkYSBjb24gLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICJBY3R1YWxpemFuZG8gdW5hIHJhbWEgbm8gbmF0YSBjb24gY2FtYmlvcyBhZ3JlZ2Fkb3MgYWwgw61uZGljZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgInB1bGwgY29uIHJlYmFzZSIKKworIzogYnVpbHRpbi9wdWxsLmM6OTM1Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAicG9yIGZhdm9yIHJlYWxpemEgdW4gY29tbWl0IG8gdW4gc3Rhc2ggY29uIGVsbG9zLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorImZldGNoIGFjdHVhbGl6w7MgZWwgaGVhZCBkZSBsYSByYW1hIGFjdHVhbC5cbiIKKyJyZWFsaXphbmRvIGZhc3QtZm9yd2FyZCBhbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorImRlc2RlIGNvbW1pdCAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSByZWFsaXphciBmYXN0LWZvcndhcmQgZW4gdHUgw6FyYm9sIGRlIHRyYWJham8uXG4iCisiVHJhcyBhc2VndXJhcnNlIHF1ZSBoYSBndWFyZGFkbyB0b2RvIGxvIHByZWNpYWRvIGRlIGxhIHNhbGlkYSBkZVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyIsZWplY3V0ZVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInBhcmEgcmVjdXBlcmFyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGZ1c2lvbmFyIG3Dumx0aXBsZXMgcmFtYXMgZW4gdW4gaGVhZCB2YWPDrW8uIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJObyBzZSBwdWVkZSByZWJhc2FyIGVuIG3Dumx0aXBsZXMgcmFtYXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5OTIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIHJlYmFzYXIgY29uIG1vZGlmaWNhY2lvbmVzIGRlIHN1Ym3Ds2R1bG9zIGdyYWJhZGFzIGxvY2FsbWVudGUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+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+IFs8YnJhbmNoPl1dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM0Cittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCBbPGJyYW5jaD5dIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcGNpb25lc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdFs8cmFtYT5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6MjAxIGJ1aWx0aW4vcmViYXNlLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAibGlzdGEgZGUgcGVuZGllbnRlcyBpbnV0aWxpemFibGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2IGJ1aWx0aW4vcmViYXNlLmM6MjEyIGJ1aWx0aW4vcmViYXNlLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2NyaWJpciAnJXMnLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyNzEKK21zZ2lkICJubyBIRUFEPyIKK21zZ3N0ciAiwr9TaW4gSEVBRD8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGFyY2hpdm8gdGVtcG9yYWwgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzA0Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIm5vIHNlIHB1ZG8gbWFyY2FyIGNvbW8gaW50ZXJhY3Rpdm8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYyCittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIHRvZG8gbGlzdCIKK21zZ3N0ciAibm8gc2UgcHVkbyBnZW5lcmFyIGxpc3RhIGRlIHBlbmRpZW50ZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDAyCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgInVuIGNvbW1pdCBiYXNlIHRpZW5lIHF1ZSBzZXIgcHJvdmlzdG8gY29uIC0tdXBzdHJlYW0gbyAtLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjkKK21zZ2lkICJrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIm1hbnRlbmVyIGNvbW1pdHMgdmFjw61vcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzEgYnVpbHRpbi9yZXZlcnQuYzoxMjgKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgInBlcm1pdGlyIGNvbW1pdHMgY29uIG1lbnNhamVzIHZhY8Otb3MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcyCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgInJlYmFzYW5kbyBjb21taXRzIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc0Cittc2dpZCAia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiCittc2dzdHIgIm1hbnRlbmVyIHB1bnRvcyBvcmlnaW5hbGVzIGRlIGxhIHJhbWEgZGUgc3VzIHByaW1vcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzYKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIgorbXNnc3RyICJtb3ZlciBjb21taXRzIHF1ZSBjb21pZW56YW4gY29uIHNxdWFzaCEvZml4dXAhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NworbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAiZmlybWFyIGNvbW1pdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc5IGJ1aWx0aW4vcmViYXNlLmM6MTQ1NQorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIm1vc3RyYXIgdW4gZGlmZnN0YXQgZGUgbG8gcXVlIGNhbWJpw7MgZW4gdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgxCittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICJjb250aW51YXIgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MworbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICJzYWx0YXIgY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiZWRpdGFyIGxhIGxpc3RhIGRlIHBlbmRpZW50ZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg2Cittc2dpZCAic2hvdyB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAibW9zdHJhciBlbCBwYXJjaGUgYWN0dWFsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJpZHMgZGUgY29tbWl0cyBjb3J0b3MgZW4gbGEgbGlzdGEgZGUgcGVuZGllbnRlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTEKK21zZ2lkICJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJleHBhbmRpciBpZHMgZGUgY29tbWl0cyBlbiBsYSBsaXN0YSBkZSBwZW5kaWVudGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MworbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgInJldmlzYXIgbGEgbGlzdGEgZGUgcGVuZGllbnRlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTUKK21zZ2lkICJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIgorbXNnc3RyICJyZW9yZ2FuaXphciBsw61uZWFzIGZpeHVwL3NxdWFzaCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgImluc2VydGFyIGNvbWFuZG8gZXhlYyBlbiBsYSBsaXN0YSBkZSBwZW5kaWVudGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OAorbXNnaWQgIm9udG8iCittc2dzdHIgImhhY2lhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorbXNnaWQgInJlc3RyaWN0LXJldmlzaW9uIgorbXNnc3RyICJyZXN0cmljdC1yZXZpc2lvbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAicmVzdHJpbmdpciByZXZpc2lvbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInNxdWFzaCBoYWNpYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDYKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICJlbCBjb21taXQgZGUgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJoZWFkLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZCBuYW1lIgorbXNnc3RyICJub21icmUgZGUgaGVhZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTMKK21zZ2lkICJyZWJhc2Ugc3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdGVnaWEgZGUgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgInN0cmF0ZWd5LW9wdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE1Cittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAib3BjaW9uZXMgZGUgZXN0cmF0ZWdpYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJzd2l0Y2gtdG8iCittc2dzdHIgImNhbWJpYXIgYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTcKK21zZ2lkICJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIKK21zZ3N0ciAibGEgcmFtYSBvIGNvbW1pdCBwYXJhIGhhY2VyIGNoZWNrb3V0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAiaGFjaWEtbm9tYnJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIm9udG8gbmFtZSIKK21zZ3N0ciAiaGFjaWEgbm9tYnJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOQorbXNnaWQgImNtZCIKK21zZ3N0ciAiY21kIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOQorbXNnaWQgInRoZSBjb21tYW5kIHRvIHJ1biIKK21zZ3N0ciAiZWwgY29tYW5kbyBwYXJhIGVqZWN1dGFyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMiBidWlsdGluL3JlYmFzZS5jOjE1NDAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIKK21zZ3N0ciAicmVwcm9ncmFtYXIgYXV0b21hdGljYW1lbnRlIGN1YWxxdWllciBgZXhlY2AgcXVlIGZhbGxlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0MAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICItLVtuby1dcmViYXNlLWNvdXNpbnMgbm8gdGllbmUgZWZlY3RvIHNpbiAtLXJlYmFzZS1tZXJnZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMgcmVxdWllcmUgdW4gcmViYXNlIGludGVyYWN0aXZvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjb25zZWd1aXIgJ29udG8nOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yaWctaGVhZDogJyVzJyIKK21zZ3N0ciAib3JpZy1oZWFkIGludsOhbGlkbzogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAiaWdub3JhbmRvIGludsOhbGlkbyBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBsZWVyICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZ3VhcmRhciAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NDkKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgIm5vIHNlIHB1ZG8gZGV0ZXJtaW5hciByZXZpc2nDs24gSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo5NzIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxCittc2dpZCAiIgorIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCittc2dzdHIgIiIKKyJSZXN1ZWx2YSB0b2RvcyBsb3MgY29uZmxpY3RvcyBtYW51YWxtZW50ZSB5YSBzZWEgY29uIFxuIgorIlwiZ2l0IGFkZC9ybSA8YXJjaGl2b19jb25mbGljdGl2bz5cIiwgbHVlZ28gZWplY3V0ZSBcImdpdCByZWJhc2UgLS1jb250aW51ZSIKKyJcIi5cbiIKKyJTaSBwcmVmaWVyZXMgc2FsdGFyIGVzdGUgcGFyY2hlLCBlamVjdXRhIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiAuXG4iCisiUGFyYSBhYm9ydGFyIHkgcmVncmVzYXIgYWwgZXN0YWRvIHByZXZpbyBhbCBcImdpdCByZWJhc2VcIiwgZWplY3V0YSBcImdpdCAiCisicmViYXNlIC0tYWJvcnRcIi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisiXG4iCisiZ2l0IGVuY29udHLDsyB1biBlcnJvciBtaWVudHJhcyBwcmVwYXJhYmEgbG9zIHBhcmNoZXMgcGFyYSByZXBsaWNhclxuIgorImVzYXMgcmV2aXNpb25lczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJDb21vIHJlc3VsdGFkbywgZ2l0IG5vIHB1ZWRlIGhhY2VyIHJlYmFzZSBjb24gZWxsb3MuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisiUG9yIGZhdm9yIGVzcGVjaWZpY2EgY29udHJhIHF1w6kgcmFtYSBkZXNlYXMgaGFjZXIgZWwgcmViYXNlLlxuIgorIlZlciBnaXQtcmViYXNlKDEpIHBhcmEgZGV0YWxsZXMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxyYW1hPidcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiU2kgcXVpZXJlcyBjb25maWd1cmFyIGluZm9ybWFjacOzbiBkZSByYXN0cmVvIHB1ZWRlcyBoYWNlcmxvIGNvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88cmFtYT4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDEzCittc2dpZCAiZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAiY29tYW5kb3MgZXhlYyBubyBwdWVkZW4gY29udGVuZXIgbmV3bGluZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNworbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAiY29tYW5kbyBleGVjIHZhY8OtbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ2Cittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgImhhY2llbmRvIHJlYmFzZSBoYWNpYSByYW1hIGRhZGEgZW4gbHVnYXIgZGUgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0OAorbXNnaWQgInVzZSB0aGUgbWVyZ2UtYmFzZSBvZiB1cHN0cmVhbSBhbmQgYnJhbmNoIGFzIHRoZSBjdXJyZW50IGJhc2UiCittc2dzdHIgInVzYXIgbGEgYmFzZSBkZSBmdXNpw7NuIGRlIHVwc3RyZWFtIHkgbGEgcmFtYSBjb21vIGJhc2UgYWN0dWFsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTAKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJwZXJtaXRpciBlamVjdXRhciBob29rIHByZS1yZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MgorbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAic2VyIHNpbGVuY2lvc28gaW1wbGljYSAtLW5vLXN0YXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1OAorbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAibm8gbW9zdHJhciB1biBkaWZmc3RhdCBkZSBsbyBxdWUgY2FtYmnDsyBlbiB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDYxCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiYWdyZWdhciB1bmEgbMOtbmVhIFwiRmlybWFkby1wb3JcIiBhbCBtZW5zYWplIGRlIGNhZGEgY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjQKK21zZ2lkICJtYWtlIGNvbW1pdHRlciBkYXRlIG1hdGNoIGF1dGhvciBkYXRlIgorbXNnc3RyICJoYWNlciBxdWUgbGEgZmVjaGEgZGVsIGNvbW1pdCBjb25jdWVyZGUgY29uIGxhIGZlY2hhIGRlIGF1dG9yw61hIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjYKK21zZ2lkICJpZ25vcmUgYXV0aG9yIGRhdGUgYW5kIHVzZSBjdXJyZW50IGRhdGUiCittc2dzdHIgImlnbm9yYXIgbGEgZmVjaGEgZGVsIGF1dG9yIHkgdXNhciBsYSBmZWNoYSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OAorbXNnaWQgInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIKK21zZ3N0ciAic2luw7NuaW1vIHBhcmEgLS1yZXNldC1hdXRob3ItZGF0ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDcwIGJ1aWx0aW4vcmViYXNlLmM6MTQ3NAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAicGFzYWRvIGEgJ2dpdC1hcHBseSciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UiCittc2dzdHIgImlnbm9yYXIgY2FtYmlvcyBlbiBlc3BhY2lvcyBlbiBibGFuY28iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3NiBidWlsdGluL3JlYmFzZS5jOjE0NzkKK21zZ2lkICJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiCittc2dzdHIgImNoZXJyeS1waWNrIHRvZG9zIGxvcyBjb21taXRzLCBpbmNsdXNvIHNpIG5vIGhhbiBjYW1iaWFkbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgxCittc2dpZCAiY29udGludWUiCittc2dzdHIgImNvbnRpbnVhciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg0Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAic2FsdGFyIGVsIHBhcmNoZSB5IGNvbnRpbnVhciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg2Cittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJhYm9ydGEgeSByZXZpc2EgbGEgcmFtYSBvcmlnaW5hbCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg5Cittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAiYWJvcnRhIHBlcm8gbWFudGllbmUgSEVBRCBkb25kZSBlc3TDoSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDkwCittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IGR1cmluZyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgImVkaXRhciBsYSBsaXN0YSBkZSBwZW5kaWVudGVzIGR1cmFudGUgZWwgcmViYXNlIGludGVyYWN0aXZvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTMKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICJtdWVzdHJhIGVsIGFyY2hpdm8gcGFyY2hlIHNpZW5kbyBhcGxpY2FkbyBvIGZ1c2lvbmFkbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk2Cittc2dpZCAidXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgInVzYXIgZXN0cmF0ZWdpYXMgZGUgZnVzacOzbiBwYXJhIGVsIHJlYmFzZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTAwCittc2dpZCAibGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxpc3Qgb2YgY29tbWl0cyB0byByZWJhc2UiCittc2dzdHIgInBlcm1pdGlyIGFsIHVzdWFyaW8gZWRpdGFyIGxhIGxpc3RhIGRlIGNvbW1pdHMgcGFyYSByZWJhc2FyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDQKK21zZ2lkICIoREVQUkVDQVRFRCkgdHJ5IHRvIHJlY3JlYXRlIG1lcmdlcyBpbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZW0iCittc2dzdHIgIihERVBSRUNBRE8pIGludGVudGFyIHJlY3JlYXIgbWVyZ2VzIGVuIGx1Z2FyIGRlIGlnbm9yYXJsb3MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwOQorbXNnaWQgInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIKK21zZ3N0ciAicHJlc2VydmFyIGNvbW1pdHMgdmFjw61vcyBkdXJhbnRlIGVsIHJlYmFzZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTExCittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAibW92ZXIgY29tbWl0cyBxdWUgY29taWVuemFuIGNvbiBzcXVhc2ghL2ZpeHVwISBiYWpvIC1pIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTcKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICJlamVjdXRhciBhdXRvbcOhdGljYW1lbnRlIHN0YXNoL3N0YXNoIHBvcCBhbnRlcyB5IGRlc3B1w6lzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTkKK21zZ2lkICJhZGQgZXhlYyBsaW5lcyBhZnRlciBlYWNoIGNvbW1pdCBvZiB0aGUgZWRpdGFibGUgbGlzdCIKK21zZ3N0ciAiYWdyZWdhciBsw61uZWFzIGV4ZWMgdHJhcyBjYWRhIGFjb21taXQgZGUgbGEgbGlzdGEgZWRpdGFibGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyMworbXNnaWQgImFsbG93IHJlYmFzaW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAicGVybWl0aXIgcmViYXNlIGNvbW1pdHMgY29uIG1lbnNhamVzIHZhY8Otb3MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNgorbXNnaWQgInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIKK21zZ3N0ciAiaW50ZW50YXIgZnVzaW9uZXMgcG9yIHJlYmFzZSBlbiBsdWdhciBkZSBzYWx0YXJsYXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyOQorbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgcGFyYSByZWZpbmFyIHVwc3RyZWFtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzEKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJ1c2FyIGxhIGVzdHJhdGVnaWEgZGUgbWVyZ2UgZGFkYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMzIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE1Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICJvcGNpw7NuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAicGFzYXIgZWwgYXJndW1lbnRvIHBhcmEgbGEgZXN0cmF0ZWdpYSBkZSBmdXNpw7NuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzcKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICJoYWNlciByZWJhc2UgYSB0b2RvcyBsb3MgY29tbWl0cyBhbGNhbnphYmxlcyBoYXN0YSBsYSByYcOteihyYcOtY2VzKSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU0Cittc2dpZCAiIgorInRoZSByZWJhc2UudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQhXG4iCisiU2VlIGl0cyBlbnRyeSBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJlbCBzb3BvcnRlIHBhcmEgcmViYXNlLnVzZUJ1aWx0aW4gaGEgc2lkbyBlbGltaW5hZG8hXG4iCisiVmVhIHN1IGVudHJhZGEgZW4gJ2dpdCBoZWxwIGNvbmZpZycgcGFyYSBkZXRhbGxlcy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICJQYXJlY2UgcXVlICdnaXQgYW0nIGVzdMOhIGVuIHByb2dyZXNvLiBObyBzZSBwdWVkZSByZWJhc2FyLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjAxCittc2dpZCAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgZXN0w6EgZGVwcmVjYWRvLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGVuIHN1IGx1Z2FyLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA2Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLW9udG8nIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb21iaW5hciAnLS1rZWVwLWJhc2UnIGNvbiAnLS1vbnRvJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA4Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLXJvb3QnIgorbXNnc3RyICJubyBzZSBwdWVkZSBjb21iaW5hciAnLS1rZWVwLWJhc2UnIGNvbiAnLS1yb290JyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiwr9ObyBoYXkgcmViYXNlIGVuIHByb2dyZXNvPyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjE2Cittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICIiCisiTGEgYWNjacOzbiAtLWVkaXQtdG9kbyBzw7NsbyBwdWVkZSBzZXIgdXNhZGEgYWwgcmViYXNhciBpbnRlcmFjdGl2YW1lbnRlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjM5Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgbGVlciBlbCBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTEKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJUaWVuZXMgcXVlIGVkaXRhciB0b2RvcyBsb3MgY29uZmxpY3RvcyBkZSBmdXNpw7NuIHkgbHVlZ29cbiIKKyJtYXJjYXJsb3MgY29tbyByZXN1ZWx0b3MgdXNhbmRvIGdpdCBhZGQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY3MAorbXNnaWQgImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZGVzY2FydGFyIGxvcyBjYW1iaW9zIGRlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIHJlZ3Jlc2FyIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJXMgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCVzXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JXNcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLlxuIgorbXNnc3RyICIiCisiUGFyZWNlIHF1ZSB5YSBoYXkgdW4gZGlyZWN0b3JpbyAlcywgeVxuIgorIm1lIHByZWd1bnRvIHNpIGVzdMOhcyBlbiBtZWRpbyBkZSBvdHJvIHJlYmFzZS4gU2kgZXNlIGVzIGVsIFxuIgorImNhc28sIHBvciBmYXZvciBpbnRlbnRhXG4iCisiXHQlc1xuIgorIlNpIG5vIGVzIGVsIGNhc28sIHBvciBmYXZvclxuIgorIlx0JXNcbiIKKyJ5IGVqZWPDunRhbWUgbnVldmFtZW50ZS4gTWUgZXN0b3kgZGV0ZW5pZW5kbyBlbiBjYXNvIGRlIHF1ZSB0ZW5nYXNcbiIKKyJhbGdvIGRlIHZhbG9yIGFow60uXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc1NworbXNnaWQgInN3aXRjaCBgQycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAic3dpdGNoIGBDJyBlc3BlcmEgdW4gdmFsb3IgbnVtw6lyaWNvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBtb2RlOiAlcyIKK21zZ3N0ciAiTW9kbyBkZXNjb25vY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTgyMAorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXN0cmF0ZWd5IHJlcXVpZXJlIC0tbWVyZ2UgbyAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NjAKK21zZ2lkICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWlyZXMgLS1leGVjIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyByZXF1aWVyZSAtLWV4ZWMgbyAtLWludGVyYWN0aXZlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NzIKK21zZ2lkICJjYW5ub3QgY29tYmluZSBhbSBvcHRpb25zIHdpdGggZWl0aGVyIGludGVyYWN0aXZlIG9yIG1lcmdlIG9wdGlvbnMiCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZW4gY29tYmluYXIgb3BjaW9uZXMgZGUgYW0gY29uIG9wY2lvbmVzIGludGVyYWN0aXZhcyBvIGRlIG1lcmdlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNvbWJpbmFyICctLXByZXNlcnZlLW1lcmdlcycgY29uICctLXJlYmFzZS1tZXJnZXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTUKK21zZ2lkICIiCisiZXJyb3I6IGNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjJyIKK21zZ3N0ciAiIgorImVycm9yOiBubyBzZSBwdWVkZSBjb21iaW5hciAnLS1wcmVzZXJ2ZS1tZXJnZXMnIGNvbiAnLS1yZXNjaGVkdWxlLWZhaWxlZC0iCisiZXhlYyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgInVwc3RyZWFtIGludsOhbGlkbyAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MjUKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjcmVhciBjb21taXQgcmHDrXogbnVldm8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2Ugd2l0aCBicmFuY2giCittc2dzdHIgIiclcyc6IG5lY2VzaXRhIGV4YWN0YW1lbnRlIHVuYSBiYXNlIGRlIGZ1c2nDs24gY29uIHJhbWEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIiclcyc6IG5lY2VzaXRhIGV4YWN0YW1lbnRlIHVuYSBiYXNlIGRlIGZ1c2nDs24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICJObyBhcHVudGEgYSB1biBjb21taXQgdsOhbGlkbyAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICJmYXRhbDogbm8gZXhpc3RlIGxhIHJhbWEvY29tbWl0OiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIk5vIGV4aXN0ZSByZWY6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMDYKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHRvIGEgcmV2aXNpb24iCittc2dzdHIgIk5vIHNlIHB1ZG8gcmVzb2x2ZXIgSEVBRCBhIHVuYSByZXZpc2nDs24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0NAorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIk5vIHNlIHB1ZWRlIGVqZWN1dGFyIGF1dG9zdGFzaCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgIlJlc3B1ZXN0YSBkZSBzdGFzaCBpbmVzcGVyYWRhOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIk5vIHNlIHB1ZG8gY3JlYXIgZWwgZGlyZWN0b3JpbyBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJXNcbiIKK21zZ3N0ciAiQXV0b3N0YXNoIGNyZWFkbzogJXNcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU5Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAibm8gc2UgcHVkbyByZXNldCAtLWhhcmQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2OAorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIlBvciBmYXZvciwgY29uZsOtcm1hbG9zIG8gZ3XDoXJkYWxvcy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYW5hbGl6YXIgJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY2FtYmlhciBhICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTkKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJIRUFEIGVzdMOhIGFjdHVhbGl6YWRvLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIkxhIHJhbWEgYWN0dWFsICVzIGVzdMOhIGFjdHVhbGl6YWRhLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjkKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFEIGVzdMOhIGFjdHVhbGl6YWRvLCByZWJhc2UgZm9yemFkby4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLlxuIgorbXNnc3RyICJSYW1hIGFjdHVhbCAlcyBlc3TDoSBhY3R1YWxpemFkYSwgcmViYXNlIGZvcnphZG8uXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzOQorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJFbCBob29rIHByZS1yZWJhc2UgcmVjaGF6w7MgZWwgcmViYXNlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgIkNhbWJpb3MgYSAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAiQ2FtYmlvcyBkZXNkZSAlcyBhICVzOlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIiIKKyJFbiBwcmltZXIgbHVnYXIsIHJlYm9iaW5hbmRvIEhFQUQgcGFyYSBkZXNwdcOpcyByZXByb2R1Y2lyIHR1cyBjYW1iaW9zIGVuY2ltYSAiCisiZGUgw6lzdGEuLi5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgzCittc2dpZCAiQ291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJObyBzZSBwdWVkZSBkZXNhY29wbGFyIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAiQXZhbmNlIHLDoXBpZG8gZGUgJXMgYSAlcy5cbiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzozMgorbXNnaWQgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorbXNnc3RyICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MzAKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJQb3IgZGVmZWN0bywgYWN0dWFsaXphciBsYSByYW1hIGFjdHVhbCBlbiB1biByZXBvc2l0b3JpbyBubyB2YWPDrW9cbiIKKyJlc3TDoSBkZW5lZ2FkbywgcG9ycXVlIGVzbyBoYXLDrWEgZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvICIKKyJpbmNvbnNpc3RlbnRlc1xuIgorImNvbiBsbyBxdWUgeWEgc2UgaGEgaGVjaG8gcHVzaCwgeSByZXF1ZXJpcsOtYSAnZ2l0IHJlc2V0IC0taGFyZCcgcGFyYSAiCisiYXJyZWdsYXJcbiIKKyJlbCDDoXJib2wgZGUgdHJhYmFqbyBjb24gSEVBRC5cbiIKKyJcbiIKKyJQdWVkZXMgY29uZmlndXJhciBsYSB2YXJpYWJsZSBkZSBjb25maWd1cmFjacOzbiAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCdcbiIKKyJcImlnbm9yZVwiIG8gXCJ3YXJuXCIgZW4gZWwgcmVwb3NpdG9yaW8gcmVtb3RvIHBhcmEgcGVybWl0aXJcbiIKKyJzdSByYW1hIGFjdHVhbDsgU2luIGVtYmFyZ28sIGVzdG8gbm8gc2UgcmVjb21pZW5kYSBhIG1lbm9zIHF1ZSB0w7pcbiIKKyJ0ZSBoYXlhcyBvcmdhbml6YWRvIHBhcmEgYWN0dWFsaXphciBzdSDDoXJib2wgZGUgdHJhYmFqbyBwYXJhIHF1ZSBjb2luY2lkYSAiCisiY29uIGxvIHF1ZVxuIgorImVudmlhcsOhcyBjb24gZWwgcHVzaCBkZSBvdHJhIG1hbmVyYS5cbiIKKyJcbiIKKyJQYXJhIHN1cHJpbWlyIGVzdGUgbWVuc2FqZSB5IG1hbnRlbmVyIGVsIGNvbXBvcnRhbWllbnRvIHByZWRldGVybWluYWRvLFxuIgorImNvbmZpZ3VyYSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgYSAncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODUwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJQb3IgZGVmZWN0bywgYm9ycmFyIGxhIHJhbWEgYWN0dWFsIGVzdMOhIHByb2hpYmlkbywgcG9ycXVlIGVsIHNpZ3VpZW50ZVxuIgorIidnaXQgY2xvbmUnIG5vIHJlc3VsdGFyYSBlbiBuaW5nw7puIGFyY2hpdm8gcmV2aXNhZG8sIGNhdXNhbmRvIGNvbmZ1c2nDs24uXG4iCisiXG4iCisiU2UgcHVlZGUgY29uZmlndXJhciBsYSB2YXJpYWJsZSAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgYSAnd2FybicgbyAiCisiJ2lnbm9yZSdcbiIKKyJlbiBlbCByZXBvc2l0b3JpbyByZW1vdG8gcGFyYSBwZXJtaXRpciBib3JyYXIgbGEgcmFtYSBhY3R1YWwuXG4iCisiY29uIG8gc2luIG1lbnNhamUgZGUgYWR2ZXJ0ZW5jaWEuXG4iCisiXG4iCisiUGFyYSBzdXByaW1pciBlc3RlIG1lbnNhamUsIHB1ZWRlcyBjb25maWd1cmFybG8gZW4gJ3JlZnVzZScuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MzYKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAidHJhbnF1aWxvIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiU2UgdGllbmUgcXVlIGVzcGVjaWZpY2FyIHVuIGRpcmVjdG9yaW8uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjE3Cittc2dpZCAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpZW1wbz5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGllbXBvPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyMgorbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZnM+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgImdpdCByZWZsb2cgZXhpc3RlIDxyZWY+IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2NyBidWlsdGluL3JlZmxvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyBubyBlcyB1bmEgbWFyY2EgZGUgdGllbXBvIHbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgcmVhY2hhYmxlIG9iamVjdHMuLi4iCittc2dzdHIgIk1hcmNhbmRvIG9iamVjdG9zIGFsY2FuemFibGVzLi4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgbm93aGVyZSEiCittc2dzdHIgIsKhJXMgYXB1bnRhIGEgbmluZ8O6biBsYWRvISIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2OTUKK21zZ2lkICJubyByZWZsb2cgc3BlY2lmaWVkIHRvIGRlbGV0ZSIKK21zZ3N0ciAibm8gcmVmbG9nIGVzcGVjaWZpY2FkbyBwYXJhIGJvcnJhciIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAibm8gZXMgdW5hIHJlZmxvZzogJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAibm8gcmVmbG9nIHBhcmEgJyVzJyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0byBpbnbDoWxpZG86ICVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc2NAorbXNnaWQgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCittc2dzdHIgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxyYW1hPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bm9tYnJlPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOCBidWlsdGluL3JlbW90ZS5jOjM4Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDx2aWVqbz4gPG51ZXZvPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjQzCittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA8bm9tYnJlPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMCBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bm9tYnJlPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPHJhbWE+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMQorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxub21icmU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxub21icmU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3J1cG8+IHwgPHJlbW90bz4pLi4uXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxub21icmU+IDxyYW1hPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNSBidWlsdGluL3JlbW90ZS5jOjc0Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bm9tYnJlPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5vbWJyZT4gPG51ZXZvLXVybD4gWzx2aWVqby11cmw+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNyBidWlsdGluL3JlbW90ZS5jOjgwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxub21icmU+IDxudWV2by11cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5vbWJyZT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzMKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8b3BjaW9uZXM+XSA8bm9tYnJlPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1MworbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5vbWJyZT4gPHJhbWE+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bm9tYnJlPiA8cmFtYT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTkKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxvcGNpb25lcz5dIDxub21icmU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzxvcGNpb25lcz5dIDxub21icmU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs8b3BjaW9uZXM+XSBbPGdydXBvPiB8IDxyZW1vdG8+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiQWN0dWFsaXphbmRvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMAorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyJVc2FyIC0tbWlycm9yIGVzIHBlbGlncm9zbyB5IGVzdMOhIGRlc2Fwcm9iYWRvO1xuIgorIlx0IHVzYSBtw6FzIGJpZW4gLS1taXJyb3I9ZmV0Y2ggbyAtLW1pcnJvcj1wdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBtaXJyb3IgZGVzY29ub2NpZG86ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgInJlYWxpemFyIGZldGNoIGEgbGFzIHJhbWFzIHJlbW90YXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY1Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiaW1wb3J0YXIgdG9kb3MgbG9zIHRhZ3MgeSBvYmpldG9zIGFzb2NpYWRvcyBjdWFuZG8gcmVhbGl6YSBlbCBmZXRjaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIm8gbm8gcmVhbHppYXIgZmV0Y2ggYSBuaW5nw7puIHRhZyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzAKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICJyYW1hKHMpIHBhcmEgcmFzdHJlYXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAicmFtYSBtYXN0ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTczCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIiIKKyJjb25maWd1cmFyIHJlbW90ZSBjb21vIG1pcnJvciBwYXJhIHJlYWxpemFyIHB1c2ggbyBkZXNkZSBlbCBjdWFsIHJlYWxpemFyICIKKyJmZXRjaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICJlc3BlY2lmaWNhciB1bmEgcmFtYSBtYXN0ZXIgbm8gdGllbmUgc2VudGlkbyBjb24gLS1taXJyb3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiZXNwZWNpZmljYXIgcmFtYXMgcGFyYSByYXN0cmVhciBzb2xvIHRpZW5lIHNlbnRpZG8gY29uIGZldGNoIG1pcnJvcnMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgInJlbW90byAlcyB5YSBleGlzdGUuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OCBidWlsdGluL3JlbW90ZS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICInJXMnIG5vIGVzIHVuIG5vbWJyZSByZW1vdG8gdsOhbGlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIGNvbmZpZ3VyYXIgbWFzdGVyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICJObyBzZSBwdWRvIHJlYWxpemFyIGVsIGZldGNoIGFsIG1hcGEgcGFyYSByZWZzcGVjICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MyBidWlsdGluL3JlbW90ZS5jOjQ1MQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihjb25jb3JkYW5kbykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDU1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIihlbGltaW5hcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjI5IGJ1aWx0aW4vcmVtb3RlLmM6NzY0IGJ1aWx0aW4vcmVtb3RlLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICJObyBleGlzdGUgZWwgcmVtb3RvICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIHJlbm9tYnJhciBsYSBzZWNjacOzbiBkZSBjb25maWd1cmFjacOzbiAnJXMnIGEgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiTm8gc2UgYWN0dWFsaXphbiByZWZzcGVjIGRlIGZldGNoIG5vIHByZWRldGVybWluYWRhXG4iCisiXHQlc1xuIgorIlx0UG9yIGZhdm9yIGFjdHVhbGljZSBsYSBjb25maWd1cmFjacOzbiBtYW51YWxtZW50ZSBzaSBlcyBuZWNlc2FyaW8uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiYm9ycmFuZG8gJyVzJyBmYWxsw7MiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJjcmVhbmRvICclcycgZmFsbMOzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMQorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisiTm90YTogVW5hIHJhbWEgZnVlcmEgZGUgbGEgamVyYXJxdcOtYSByZWZzL3JlbW90ZXMvIG5vIGZ1ZSBlbGltaW5hZGE7XG4iCisicGFyYSBib3JyYXJsYSwgdXNlOiIKK21zZ3N0clsxXSAiIgorIk5vdGE6IEFsZ3VuYXMgcmFtYXMgZnVlcmEgZGUgbGEgamVyYXJxdcOtYSByZWZzL3JlbW90ZXMvIG5vIGZ1ZXJvbiAiCisiZWxpbWluYWRhcztcbiIKKyJwYXJhIGJvcnJhcmxhcywgdXNlOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJObyBzZSBwdWRvIGJvcnJhciBsYSBzZWNjacOzbiBkZSBjb25maWd1cmFjacOzbiAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBudWV2byAoc2lndWllbnRlIGZldGNoIHNlIGd1YXJkYXLDoSBlbiByZW1vdGVzLyVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MTkKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIHJhc3RyZWFkYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjEKK21zZ2lkICIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIKK21zZ3N0ciAiIHZpZWpvICggdXNlICdnaXQgcmVtb3RlIHBydW5lJyBwYXJhIGVsaW1pbmFyKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjMKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgImludsOhbGlkbyBicmFuY2guJXMubWVyZ2U7IG5vIHNlIHB1ZWRlIHJlYmFzYXIgZW4gPiAxIHJhbWEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNhIGludGVyYWN0aXZhbWVudGUgZW4gcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNhIGludGVyYWN0aXZhbWVudGUgKGNvbiBmdXNpb25lcykgZW4gcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJyZWJhc2Egc29icmUgZWwgcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIgc2UgZnVzaW9uYSBjb24gcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgImZ1c2lvbmEgY29uIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS0qcyAgICBhbmQgd2l0aCByZW1vdGUgJXNcbiIKK21zZ3N0ciAiJS0qcyB5IGNvbiBlbCByZW1vdG8gJXNcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMxCittc2dpZCAiY3JlYXRlIgorbXNnc3RyICJjcmVhciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJib3JyYXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzOAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgImFjdHVhbGl6YWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJwdWVkZSByZWFsaXphciBmYXN0LWZvcndhcmQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0NAorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICJkZXNhY3R1YWxpemFkbyBsb2NhbCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIGZ1ZXJ6YSBhICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHB1YmxpY2EgYSAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIGZ1ZXJ6YSBhICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBwdWJsaWNhIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOQorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICJubyBjb25zdWx0YXIgcmVtb3RvcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgIHBhcmEgb2J0ZW5lcjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1OCBidWlsdGluL3JlbW90ZS5jOjExNzQgYnVpbHRpbi9yZW1vdGUuYzoxMzEzCittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIihzaW4gVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIHBhcmEgcHVibGljYXI6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYgYnVpbHRpbi9yZW1vdGUuYzoxMTc4IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBSYW1hIEhFQUQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIobm8gY29uc3VsdGFkbykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OAorbXNnaWQgIih1bmtub3duKSIKK21zZ3N0ciAiKGRlc2Nvbm9jaWRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiIKKyIgIEhFQUQgZW4gcmFtYSAoIEhFQUQgcmVtb3RvIGVzIGFtYmlndW8sIHB1ZWRlIHNlciB1bm8gZGUgbG9zIHNpZ3VpZW50ZXMpOlxuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICBSYW1hIHJlbW90YTolcyIKK21zZ3N0clsxXSAiICBSYW1hcyByZW1vdGFzOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTcgYnVpbHRpbi9yZW1vdGUuYzoxMjIzCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKGVzdGFkbyBubyBjb25zdWx0YWRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA2Cittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgUmFtYSBsb2NhbCBjb25maWd1cmFkYSBwYXJhICdnaXQgcHVsbCc6IgorbXNnc3RyWzFdICIgIFJhbWFzIGxvY2FsZXMgY29uZmlndXJhZGFzIHBhcmEgJ2dpdCBwdWxsJzoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNAorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgTGFzIHJlZmVyZW5jaWFzIGxvY2FsZXMgc2Vyw6FuIHJlZmxlamFkYXMgcG9yICdnaXQgcHVzaCciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBSZWZlcmVuY2lhIGxvY2FsIGNvbmZpZ3VyYWRhIHBhcmEgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clsxXSAiICBSZWZlcmVuY2lhcyBsb2NhbGVzIGNvbmZpZ3VyYWRhcyBwYXJhICdnaXQgcHVzaCclczoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0MQorbXNnaWQgInNldCByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQgYWNjb3JkaW5nIHRvIHJlbW90ZSIKK21zZ3N0ciAiY29uZmlndXJhciByZWZzL3JlbW90ZXMvPG5vbWJyZT4vSEVBRCBkZSBhY3VlcmRvIGFsIHJlbW90byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQzCittc2dpZCAiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKK21zZ3N0ciAiYm9ycmFyIHJlZnMvcmVtb3Rvcy88bm9tYnJlPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTgKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICJObyBzZSBwdWVkZSBkZXRlcm1pbmFyIGVsIEhFQUQgcmVtb3RvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjAKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiTcO6bHRpcGxlcyByYW1hcyBIRUFEIHJlbW90YXMuIFBvciBmYXZvciBlc2NvamEgdW5hIGV4cGzDrWNpdGFtZW50ZSBjb246IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiTm8gc2UgcHVkbyBib3JyYXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJObyBlcyB1biByZWYgdsOhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIk5vIHNlIHB1ZG8gY29uZmlndXJhciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiDCoSVzIHNlcsOhIGNvbGdhZG8hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgwqElcyBoYSBzaWRvIGNvbGdhZG8hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiUmVjb3J0YW5kbyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbZWplY3V0YXLDoSBwcnVuZV0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW3BydW5lIHJlYWxpemFkb10gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NAorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgInJlY29ydGFyIHJlbW90b3MgdHJhcyByZWFsaXphciBmZXRjaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM3IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5MSBidWlsdGluL3JlbW90ZS5jOjE1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiTm8gZXhpc3RlIGVsIHJlbW90byAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTMKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJhZ3JlZ2FyIHJhbWEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIm5vIGhheSByZW1vdG9zIGVzcGVjaWZpY2Fkb3MiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3NworbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICJjb25zdWx0YXIgVVJMcyBkZSBwdXNoIGVuIGx1Z2FyIGRlIFVSTHMgZGUgZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3OQorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAicmV0b3JuYXIgdG9kb3MgbG9zIFVSTHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUwNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICJubyBoYXkgVVJMcyBjb25maWd1cmFkb3MgcGFyYSByZW1vdG8gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTMzCittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIm1hbmlwdWxhciBVUkxzIGRlIHB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNQorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgImFncmVnYXIgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzcKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAiYm9ycmFyIFVSTHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0NAorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUgbm8gdGllbmUgc2VudGlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiUGF0csOzbiBkZSBVUkwgdmllam8gaW52w6FsaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiTm8gc2UgZW5jb250csOzIFVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiTm8gYm9ycmFyw6EgdG9kb3MgbG9zIFVSTHMgZGUgbm8tcHVzaCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzxvcGNpb25lcz5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI4Cittc2dpZCAiIgorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCittc2dzdHIgIiIKKyJSZSBlbXBhcXVldGFkb3MgaW5jcmVtZW50YWxlcyBzb24gaW5jb21wYXRpYmxlcyBjb24gw61uZGljZXMgYml0bWFwLiBVc2UgXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggbyBkZXNoYWJpbGl0ZSBsYSBjb25maWd1cmFjacOzbiBwYWNrLndyaXRlYml0bWFwcy4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaW5pY2lhciBwYWNrLW9iamVjdHMgcGFyYSByZWVtcGFxdWV0YXIgb2JqZXRvcyBwcm9taXNvcmVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzMCBidWlsdGluL3JlcGFjay5jOjQxNgorbXNnaWQgInJlcGFjazogRXhwZWN0aW5nIGZ1bGwgaGV4IG9iamVjdCBJRCBsaW5lcyBvbmx5IGZyb20gcGFjay1vYmplY3RzLiIKK21zZ3N0ciAiIgorInJlcGFjazogRXNwZXJhbmRvIGzDrW5lYXMgZGUgSUQgZGUgb2JqZXRvIGVuIGZ1bGwgaGV4IHNvbG8gZGVzZGUgcGFjay1vYmplY3RzLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyNTQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlIGZpbmFsaXphciBwYWNrLW9iamVjdHMgcGFyYSByZWVtcGFxdWV0YXIgb2JqZXRvcyBwcm9taXNvcmVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICJlbXBhcXVldGFyIHRvZG8gZW4gdW4gw7puaWNvIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAibG8gbWlzbW8gcXVlIC1hLCB5IHBpZXJkZSBvYmpldG9zIGluYWNjZXNpYmxlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTcKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgImVsaW1pbmFyIHBhcXVldGVzIHJlZHVuZGFudGVzLCB5IGVqZWN1dGFyIGdpdC1wcnVuZS1wYWNrZWQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk5Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc2FyIC0tbm8tcmV1c2UtZGVsdGEgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzYXIgLS1uby1yZXVzZS1vYmplY3QgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMworbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAibm8gZWplY3V0YXIgZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzYXIgLS1sb2NhbCBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICJlc2NyaWJpciB1biDDrW5kaWNlIGRlIGJpdG1hcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKK21zZ2lkICJwYXNzIC0tZGVsdGEtaXNsYW5kcyB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNhciAtLWRlbHRhLWlzbGFuZHMgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMQorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJhcHJveGltZSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTIKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICJjb24gLUEsIG5vIHBlcmRlciBvYmpldG9zIG3DoXMgYW50aWd1b3MgcXVlIGVzdGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImNvbiAtYSwgcmUgZW1wYXF1ZXRhciBvYmpldG9zIGluYWxjYW56YWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJ0YW1hw7FvIGRlIGxhIHZlbnRhbmEgdXNhZG8gcGFyYSBsYSBjb21wcmVzacOzbiBkZWx0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTcgYnVpbHRpbi9yZXBhY2suYzozMjMKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAiYnl0ZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIiIKKyJsbyBtaXNtbyBxdWUgYXJyaWJhLCBwZXJvIGxpbWl0YSBlbCB0YW1hw7FvIGRlIG1lbW9yaWEgZW4gbHVnYXIgZGUgY29udGFyICIKKyJlbnRyYWRhcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgImxpbWl0YSBsYSBwcm9mdW5kaWRhZCBtw6F4aW1hIGRlbCBkZWx0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgImxpbWl0YSBlbCBuw7ptZXJvIG3DoXhpbW8gZGUgaGlsb3MiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggcGFja2ZpbGUiCittc2dzdHIgInRhbWHDsW8gbcOheGltbyBkZSBjYWRhIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI2Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgInJlLWVtcGFxdWV0YXIgb2JqZXRvcyBlbiBwYXF1ZXRlcyBtYXJjYWRvcyBjb24gLmtlZXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgIm5vIHJlZW1wYXF1ZXRhciBlc3RlIHBhcXVldGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzM4Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAibm8gc2UgcHVlZGVuIGJvcnJhciBwYXF1ZXRlcyBlbiB1biByZXBvc2l0b3JpbyBkZSBvYmpldG9zLXByZWNpb3NvcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNDIKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSB5IC1BIHNvbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyNQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICJOYWRhIG51ZXZvIHBhcmEgZW1wYXF1ZXRhci4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyJXQVJOSU5HOiBBbGd1bm9zIHBhY2tzIGVuIHVzbyBoYW4gc2lkbyByZW5vbWJyYWRvc1xuIgorIldBUk5JTkc6IGFncmVnYW5kbyBlbCBwcmVmaWpvIG9sZC0gYSBzdXMgbm9tYnJlcyxwYXJhXG4iCisiV0FSTklORzogcmVlbXBsYXphcmxvcyBjb24gbGEgbnVldmEgdmVyc2nDs24gZGVsXG4iCisiV0FSTklORzogYXJjaGl2by4gUGVybyBsYSBvcGVyYWNpw7NuIGZhbGzDsywgeSBlbCBpbnRlbnRvXG4iCisiV0FSTklORzogZGUgcmVub21icmFybG9zIGEgc3VzIG5vbWJyZXMgb3JpZ2luYWxlc1xuIgorIldBUk5JTkc6IHRhbWJpw6luIGZhbGzDsy5cbiIKKyJXQVJOSU5HOiBQb3IgZmF2b3IgcmVub21icmFsb3MgZW4gJXMgbWFudWFsbWVudGU6XG4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGVsaW1pbmFyJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9iamV0bz4gPHJlbXBsYXpvPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamV0bz4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhZHJlPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjYKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPG9iamV0bz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdG8+XSBbLWwgWzxwYXRyw7NuPl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCByZXBsYWNlIGZvcm1hdCAnJXMnXG4iCisidmFsaWQgZm9ybWF0cyBhcmUgJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJyIKK21zZ3N0ciAiIgorImZvcm1hdG8gZGUgcmVlbXBsYXpvIGludsOhbGlkbyAnJXMnXG4iCisiZm9ybWF0b3MgdsOhbGlkb3Mgc29uICdzaG9ydCcsICdtZWRpdW0nIHkgJ2xvbmcnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQiCittc2dzdHIgInJhbWEgZGUgcmVlbXBsYXpvICclcycgbm8gZW5jb250cmFkYSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAiQm9ycmFkYXMgcmVwbGFjZSByZWZzICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICInJXMnIG5vIGVzIHVuIG5vbWJyZSBkZSByZWYgdsOhbGlkbyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgInJlZiBkZSByZWVtcGxhem8gJyVzJyB5YSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIk9iamV0byBkZWJlIHNlciBkZWwgbWlzbW8gdGlwby5cbiIKKyInJXMnIHB1bnRvcyBwYXJhIHVuIG9iamV0byByZWVtcGxhemFkbyBkZSB0aXBvICclcydcbiIKKyJtaWVudHJhcyAnJXMnIHB1bnRvcyBwYXJhIHVuIHJlZW1wbGF6byBkZSB0aXBvIGRlIG9iamV0byAnJXMnLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyICVzIHBhcmEgZXNjcml0dXJhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNDIKK21zZ2lkICJjYXQtZmlsZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJjYXQtZmlsZSByZXBvcnTDsyB1biBmYWxsbyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJubyBzZSBwdWRvIGFicmlyICVzIHBhcmEgbGVjdHVyYSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBnZW5lcmFyIG1rdHJlZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjc2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiCittc2dzdHIgIm5vIGVzIHBvc2libGUgbGVlciBkZSBta3RyZWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4NQorbXNnaWQgIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJta3RyZWUgcmVwb3J0w7MgdW4gZXJyb3IiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAibWt0cmVlIG5vIGRldm9sdmnDsyB1biBub21icmUgZGUgb2JqZXRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZzdGF0ICVzIgorbXNnc3RyICJpbmNhcGF6IGRlIGNvcnJlciBmc3RhdCAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAiaW5jYXBheiBkZSBlc2NyaWJpciBlbCBvYmpldG8gZW4gbGEgYmFzZSBkZSBkYXRvcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzIyIGJ1aWx0aW4vcmVwbGFjZS5jOjM3OCBidWlsdGluL3JlcGxhY2UuYzo0MjMKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAibm9tYnJlIGRlIG9iamV0byBubyB2w6FsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgIm5vIGVzIG9idGVuZXIgdGlwbyBkZSBvYmpldG8gcGFyYSAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzQyCittc2dpZCAiZWRpdGluZyBvYmplY3QgZmlsZSBmYWlsZWQiCittc2dzdHIgImVkaWNpw7NuIGRlIGFyY2hpdm8gZGUgb2JqZXRvIGZhbGzDsyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgIm51ZXZvIG9iamV0byBlcyBpZ3VhbCBhbCBhbnRpZ3VvOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIGFzIGEgY29tbWl0IgorbXNnc3RyICJubyBzZSBwdWRvIGFuYWxpemFyICVzIGNvbW8gdW4gY29tbWl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJtYWwgbWVyZ2V0YWcgZW4gY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgIm1lcmdldGFnIG1hbCBmb3JtYWRvIGVuIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorImNvbW1pdCBvcmlnaW5hbCAnJXMnIGNvbnRpZW5lIHVuIG1lcmdldGFnICclcycgcXVlIGVzIGRlc2NhcnRhZG87IHVzZSAtLWVkaXQgIgorImVuIGx1Z2FyIGRlIC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAiZWwgY29tbWl0IG9yaWdpbmFsICclcycgdGllbmUgdW5hIGZpcm1hIGdwZyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY5Cittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgImxhIGZpcm1hIHNlcsOhIGVsaW1pbmFkYSBlbiBlbCBjb21taXQgZGUgcmVlbXBsYXpvISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGVzY3JpYmlyIGVsIGNvbW1pdCBkZSByZWVtcGxhem86ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJncmFmdCBmb3IgJyVzJyB1bm5lY2Vzc2FyeSIKK21zZ3N0ciAiZ3JhZnQgcGFyYSAnJXMnIGlubmVjZXNhcmlvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibnVldm8gY29tbWl0IGVzIGxlIG1pc21vIHF1ZSBlbCBhbnRpZ3VvOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjb252ZXJ0IHRoZSBmb2xsb3dpbmcgZ3JhZnQocyk6XG4iCisiJXMiCittc2dzdHIgIiIKKyJubyBzZSBwdWRvIGNvbnZlcnRpciBlbCBzaWd1aWVudGUgZ3JhZnQocyk6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0NworbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICJsaXN0YXIgcmVwbGFjZSByZWZzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICJib3JyYXIgcmVwbGFjZSByZWZzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAiZWRpdGFyIG9iamV0byBleGlzdGVudGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgImNhbWJpYXIgdW4gcGFkcmUgZGUgY29tbWl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKK21zZ2lkICJjb252ZXJ0IGV4aXN0aW5nIGdyYWZ0IGZpbGUiCittc2dzdHIgImNvbnZlcnRpciBhcmNoaXZvIGdyYWZ0IGV4aXN0ZW50ZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUyCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAicmVlbXBsYXphciBlbCByZWYgc2kgZXN0ZSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NAorbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaW1wcmltaXIgY29udGVuaWRvcyBwYXJhIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJ1c2FyIGVzdGUgZm9ybWF0byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTY4Cittc2dpZCAiLS1mb3JtYXQgY2Fubm90IGJlIHVzZWQgd2hlbiBub3QgbGlzdGluZyIKK21zZ3N0ciAiLS1mb3JtYXQgbm8gcHVlZGUgc2VyIHVzYWRvIGN1YW5kbyBubyBzZSBoYWNlIGxpc3RpbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NgorbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIi1mIHNvbG8gdGllbmUgc2VudGlkbyBjdWFuZG8gc2UgZXNjcmliZSB1biByZWVtcGxhem8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4MAorbXNnaWQgIi0tcmF3IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcmF3IHNvbG8gdGllbmUgc2VudGlkbyBjb24gLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODYKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1kIG5lY2VzaXRhIGFsIG1lbm9zIHVuIGFyZ3VtZW50byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkyCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIm1hbCBuw7ptZXJvIGRlIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5OAorbXNnaWQgIi1lIG5lZWRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZSBuZWNlc2l0YSBleGFjdGFtZW50ZSB1biBhcmd1bWVudG8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNAorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWcgbmVjZXNpdGEgYWwgbWVub3MgdW4gYXJndW1lbnRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTAKK21zZ2lkICItLWNvbnZlcnQtZ3JhZnQtZmlsZSB0YWtlcyBubyBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgbm8gdG9tYSBhcmd1bWVudG9zIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTYKK21zZ2lkICJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIgorbXNnc3RyICJzb2xvIHNlIHB1ZWRlIGRhciB1biBwYXRyw7NuIGNvbiAtbCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxydXRhPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NjAKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAicmVnaXN0cmFyIHJlc29sdWNpb25lcyBsaW1waWFzIGVuIGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAiJ2dpdCByZXJlcmUgZm9yZ2V0JyBzaW4gcnV0YXMgZXN0w6EgZGVwcmVjYWRvIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG9zaWJsZSBnZW5lcmFyIGRpZmYgcGFyYSAnJXMnIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPMOhcmJvbC1pc21vPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzzDoXJib2wtaXNtbz5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs8w6FyYm9sLWlzbW8+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgIm1lemNsYWRvIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJzb2Z0IgorbXNnc3RyICJzdWF2ZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAiaGFyZCIKK21zZ3N0ciAiZHVybyIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWVyZ2UiCittc2dzdHIgImZ1c2lvbmFyIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJrZWVwIgorbXNnc3RyICJtYW50ZW5lciIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIk5vIGhheSB1biBIRUFEIHbDoWxpZG8uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJGYWxsw7MgYWwgZW5jb250cmFyIGVsIEhFQUQgZGVsIMOhcmJvbC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiRmFsbMOzIGFsIGVuY29udHJhciDDoXJib2wgZGUgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIGVzdMOhIGFob3JhIGVuICVzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIHJlYWx6aWFyIHVuIHJlc2V0ICVzICBlbiBtZWRpbyBkZSB1bmEgZnVzacOzbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTQgYnVpbHRpbi9zdGFzaC5jOjUxOSBidWlsdGluL3N0YXNoLmM6NTk0CisjOiBidWlsdGluL3N0YXNoLmM6NjE4Cittc2dpZCAiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIKK21zZ3N0ciAic2VyIHNpbGVuY2lvc28sIHNvbG8gcmVwb3J0YXIgZXJyb3JlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJyZWluaWNpYXIgSEVBRCBlIGluZGV4IgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICJyZWluaWNpYXIgc29sbyBIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk5IGJ1aWx0aW4vcmVzZXQuYzozMDEKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICJyZWluaWNpYXIgSEVBRCwgw61uZGljZSB5IMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAzCittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJyZWluaWNpYXIgSEVBRCBwZXJvIG1hbnRlbmVyIGNhbWJpb3MgbG9jYWxlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwOQorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICIiCisiZ3JhYmFyIHNvbG8gZWwgaGVjaG8gZGUgcXVlIGxhcyBydXRhcyBlbGltaW5hZGFzIHNlcsOhbiBhZ3JlZ2FkYXMgZGVzcHXDqXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiRmFsbMOzIGFsIHJlc29sdmVyICclcycgY29tbyB1bmEgcmV2aXNpw7NuIHbDoWxpZGEuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAiRmFsbMOzIGFsIHJlc29sdmVyICclcycgY29tbyB1biDDoXJib2wgdsOhbGlkby4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggZXMgaW5jb21wYXRpYmxlIGNvbiAtLXtoYXJkLG1peGVkLHNvZnR9IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1taXhlZCBjb24gcnV0YXMgaGEgc2lkbyBkZXByZWNhZG87IHVzZSAnZ2l0IHJlc2V0IC0tIDxydXRhcz4nIGVuIGNhbWJpby4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJObyBzZSBwdWVkZSBoYWNlciB1biByZXNldCAlcyBjb24gcnV0YXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIlcyByZXNldCBubyBlc3TDoSBwZXJtaXRpZG8gZW4gdW4gcmVwb3NpdG9yaW8gdmFjw61vIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIHPDs2xvIHB1ZWRlIHNlciB1c2FkYSBjb24gLS1taXhlZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxMgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICJDYW1iaW9zIGZ1ZXJhIGRlbCDDoXJlYSBkZSBzdGFnZSB0cmFzIGVsIHJlc2V0OiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisiXG4iCisiVG9tw7MgJS4yZiBzZWd1bmRvcyBlbiBlbnVtZXJhciBjYW1iaW9zIGZ1ZXJhIGRlIHN0YWdlIHRyYXMgZWwgcmVpbmljaW8uICAiCisiUHVlZGVzXG4iCisidXNhciAnLS1xdWlldCcgcGFyYSBldml0YXIgZXN0by4gIENvbmZpZ3VyYSBsYSBvcGNpw7NuIHJlc2V0LnF1aWV0IGEgdHJ1ZVxuIgorInBhcmEgdm9sdmVybG8gZW4gZWwgZGVmYXVsdC5cbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVpbmljaWFyIGVsIMOtbmRpY2UgYSBsYSByZXZpc2nDs24gJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICJObyBzZSBwdWVkZSBlc2NyaWJpciB1biBudWV2byBhcmNoaXZvIMOtbmRpY2UuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDExCittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgYW5kIC0tbWlzc2luZyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY29tYmluYXIgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgeSAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0NzIKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIHJlcXVpcmVzIC0tb2JqZWN0cyIKK21zZ3N0ciAiZmlsdHJhZG8gZGUgb2JqZXRvcyByZXF1aWVyZSAtLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjIKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IG5vIHNvcG9ydGEgbW9zdHJhciBub3RhcyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyNQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tdXNlLWJpdG1hcC1pbmRleCB3aXRoIG9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNvbWJpbmFyIC0tdXNlLWJpdG1hcC1pbmRleCBjb24gb2JqZXRvcyBkZSBmaWx0cmFkbyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wY2lvbmVzPl0gLS0gWzxhcmdzPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDEzCittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICJtYW50ZW5lciBlbCBgLS1gIHBhc2FkbyBjb21vIHVuIGFyZyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgImRldGVuZXIgYW7DoWxpc2lzIHRyYXMgZWwgcHJpbWVyIGFyZ3VtZW50byBxdWUgbm8gZXMgb3BjacOzbiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICJzYWxpZGEgZW4gZm9ybXVsYXJpbyBsYXJnbyBkZSBhdGFzY28iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3BjaW9uZXM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3BjaW9uZXM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiRWplY3V0ZSBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIHBhcmEgbcOhcyBpbmZvcm1hY2nDs24gc29icmUgZWwgcHJpbWVyICIKKyJ1c28uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzxvcGNpb25lcz5dIDxjb21taXQtaXNoPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNQorbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDxzdWJjb21hbmRvPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMAorbXNnaWQgImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCBjaGVycnktcGljayBbPG9wY2lvbmVzPl0gPGNvbW1pdC1pc2g+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjMxCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21hbmRvPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICJvcGNpw7NuIGAlcycgZXNwZXJhIHVuIHZhbG9yIG51bcOpcmljbyBtYXlvciBhIGNlcm8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBubyBwdWVkZSBzZXIgdXNhZG8gY29uICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImZpbmFsaXphciBzZWN1ZW5jaWEgcmV2ZXJ0IG8gY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicmVzdW1pciBzZWN1ZW5jaWEgcmV2ZXJ0IG8gY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiY2FuY2VsYXIgc2VjdWVuY2lhIHJldmVydCBvIGNoZXJyeS1waWNrIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgInNraXAgY3VycmVudCBjb21taXQgYW5kIGNvbnRpbnVlIgorbXNnc3RyICJzYWx0YXIgZWwgY29tbWl0IGFjdHVhbCB5IGNvbnRpbnVhciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAibm8gcmVhbGl6YXIgY29tbWl0IGRlIGZvcm1hIGF1dG9tw6F0aWNhIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJlZGl0YXIgZWwgbWVuc2FqZSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAibsO6bWVyby1kZS1wYWRyZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICJzZWxlY2Npb25hciBlbCBwYWRyZSBwcmluY2lwYWwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdGVnaWEgZGUgZnVzacOzbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJvcGNpw7NuIHBhcmEgZXN0cmF0ZWdpYSBkZSBmdXNpw7NuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAiYWRqdW50YXIgZWwgbm9tYnJlIGRlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgInByZXNlcnZhciBjb21taXRzIGluaWNpYWxlcyB2YWPDrW9zIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJtYW50ZW5lciBjb21taXRzIHJlZHVuZGFudGVzLCB2YWPDrW9zIgorCisjOiBidWlsdGluL3JldmVydC5jOjIzMgorbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgImZhbGzDsyBhbCByZXZlcnRpciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImNoZXJyeS1waWNrIGZhbGzDsyIKKworIzogYnVpbHRpbi9ybS5jOjE5Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gWzxvcGNpb25lcz5dIFstLV0gPGFyY2hpdm8+Li4uIgorCisjOiBidWlsdGluL3JtLmM6MjA3Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKKyJlbCBzaWd1aWVudGUgYXJjaGl2byB0aWVuZSBjb250ZW5pZG8gZW4gc3RhZ2UgZGlmZXJlbnRlIGFsIGFyY2hpdm9cbiIKKyJ5IGEgSEVBRDoiCittc2dzdHJbMV0gIiIKKyJsb3Mgc2lndWllbnRlcyBhcmNoaXZvcyB0aWVuZW4gY29udGVuaWRvIGRpZmVyZW50ZSBhIGxvcyBtaXNtb3NcbiIKKyJ5IGEgSEVBRDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTIKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1c2EgLWYgcGFyYSBmb3J6YXIgc3UgZWxpbWluYWNpw7NuKSIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gImVsIHNpZ3VpZW50ZSBhcmNoaXZvIHRpZW5lIGNhbWJpb3MgZW4gc3RhZ2UgZW4gZWwgw61uZGljZToiCittc2dzdHJbMV0gImxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHRpZW5lbiBjYW1iaW9zIGVuIHN0YWdlIGVuIGVsIMOtbmRpY2U6IgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1c2EgLS1jYWNoZWQgcGFyYSBjb25zZXJ2YXIgZWwgYXJjaGl2bywgbyAtZiBwYXJhIGZvcnphciBzdSBlbGltaW5hY2nDs24pIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJlbCBzaWd1aWVudGUgYXJjaGl2byB0aWVuZSBtb2RpZmljYWNpb25lcyBsb2NhbGVzOiIKK21zZ3N0clsxXSAibG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3MgdGllbmVuIG1vZGlmaWNhY2lvbmVzIGxvY2FsZXM6IgorCisjOiBidWlsdGluL3JtLmM6MjQyCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibm8gbGlzdGFyIGFyY2hpdm9zIGVsaW1pbmFkbyIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJzb2xvIGVsaW1pbmFyIGRlbCDDrW5kaWNlIgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgInNvYnJlc2NyaWJpciBlbCBjaGVjayBkZSBhY3R1YWxpemFkbyIKKworIzogYnVpbHRpbi9ybS5jOjI0NQorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICJwZXJtaXRpciBlbGltaW5hciBkZSBmb3JtYSByZWN1cnNpdmEiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDcKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAic2FsaXIgY29uIGVzdGFkbyBjZXJvIGluY2x1c28gc2kgbmFkYSBjb2luY2lkZSIKKworIzogYnVpbHRpbi9ybS5jOjI4OQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisicG9yIGZhdm9yIGFncmVnYSBlbCBzdGFnZSBkZSB0dXMgY2FtYmlvcyBhIC5naXRtb2R1bGVzIG8gcmVhbGl6YSB1biBzdGFzaCAiCisicGFyYSBwcm9jZWRlciIKKworIzogYnVpbHRpbi9ybS5jOjMwNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICJubyBlbGltaW5hbmRvICclcycgZGUgbWFuZXJhIHJlY3Vyc2l2YSBzaW4gLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IG5vIGVzIHBvc2libGUgZWxpbWluYXIgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgeSBlc3BlY2lmaWNhY2lvbmVzIDxyZWY+IGV4cGzDrWNpdGFzIHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICJub21icmUgcmVtb3RvIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJ1c2FyIHByb3RvY29sbyBSUEMgc2luIGVzdGFkbyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVlciByZWZzIGRlIHN0ZGluIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OQorbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgIm1vc3RyYXIgc3RhdHVzIGRlbCByZW1vdGUgaGVscGVyIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTQKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPG9wY2lvbmVzPl0gWzxyYW5nby1kZS1yZXZpc2nDs24+XSBbWy0tXSA8cnV0YT4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3Jsb2cgWzxvcGNpb25lcz5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiQWdydXBhciBwb3IgY29tbWl0dGVyIGVuIGx1Z2FyIGRlIGF1dG9yIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJvcmRlbmFyIHNhbGlkYSBkZSBhY3VlcmRvIGFsIG7Dum1lcm8gZGUgY29tbWl0cyBwb3IgYXV0b3IiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiU3VwcmltaXIgZGVzY3JpcGNpw7NuIGRlIGNvbW1pdHMsIHNvbG8gcHJvdmVlciBjdWVudGEgZGUgY29tbWl0cyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIk1vc3RyYXIgbGEgZGlyZWNjacOzbiBkZSBjb3JyZW8gZGUgY2FkYSBhdXRvciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MQorbXNnaWQgIjx3PlssPGkxPlssPGkyPl1dIgorbXNnc3RyICI8dz5bLDxpMT5bLDxpMj5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiU2FsaWRhIGRlIGzDrW5lYSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjMwMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgImRlbWFzaWFkb3MgYXJndW1lbnRvcyBkYWRvcyBmdWVyYSBkZWwgcmVwb3NpdG9yaW8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiaWdub3JhbmRvICVzOyBubyBzZSBwdWVkZSBtYW5lamFyIG3DoXMgZGUgJWQgcmVmIgorbXNnc3RyWzFdICJpZ25vcmFuZG8gJXM7IG5vIHNlIHB1ZWRlIG1hbmVqYXIgbcOhcyBkZSAlZCByZWZzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAibm8gaGF5IHJlZnMgcXVlIGNvbmN1ZXJkZW4gY29uICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJtb3N0cmFyIHJhbWFzIGxvY2FsZXMgeSBkZSByYXN0cmVvIHJlbW90byIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJtb3N0cmFyIHJhbWFzIGRlIHJhc3RyZW8gcmVtb3RvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpZW5kbyBhIGxhIHJhbWEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAibW9zdHJhciA8bj4gY29tbWl0cyBtw6FzIHRyYXMgZW5jb250cmFyIGVsIGFuY2VzdHJvIGNvbcO6biIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAic2luw7NuaW1vIGRlIG3DoXM9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTQKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAic3VwcmltaXIgc3RyaW5ncyBkZSBub21icmUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5jbHVpciBsYSByYW1hIGFjdHVhbCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OAorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAibm9tYnJhciBjb21taXRzIGNvbiBzdXMgbm9tYnJlcyBkZSBvYmpldG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICJtb3N0cmFyIGJhc2VzIGRlIGZ1c2nDs24gcG9zaWJsZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJtb3N0cmFyIHJlZnMgaW5hbGNhbnphYmxlcyBwb3IgbmluZ8O6biBvdHJvIHJlZiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAibW9zdHJhciBjb21taXRzIGVuIG9yZGVuIHRvcG9sw7NnaWNvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIm1vc3RyYXIgc29sbyBjb21taXRzIHF1ZSBubyBlc3TDoW4gZW4gbGEgcHJpbWVyYSByYW1hIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY5Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICJtb3N0cmFyIGZ1c2lvbmVzIGFsY2FuemFibGVzIHNvbG8gcG9yIHVuYSBwdW50YSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAib3JkZW4gdG9wb2zDs2dpY28sIG1hbnRlbmllbmRvIGVsIG9yZGVuIGRlIGZlY2hhcyBkb25kZSBzZWEgcG9zaWJsZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIm1vc3RyYXIgPG4+IGVudHJhZGFzIG3DoXMgcmVjaWVudGVzIGRlIHJlZi1sb2cgY29tZW56YW5kbyBkZXNkZSBsYSBiYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzExCittc2dpZCAiIgorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIgorbXNnc3RyICIiCisiLS1yZWZsb2cgbm8gZXMgY29tcGF0aWJsZSBjb24gLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvIC0tbWVyZ2UtYmFzZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNQorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgIm5vIHNlIGRpZXJvbiByYW1hcywgeSBlbCBIRUFEIG5vIGVzIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzgKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICJvcGNpw7NuIC0tcmVmbG9nIG5lY2VzaXRhIHVuIG5vbWJyZSBkZSByYW1hIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gInNvbG8gJWQgZW50cmFkYSBwdWVkZSBzZXIgbW9zdHJhZGEgYSBsYSB2ZXouIgorbXNnc3RyWzFdICJzb2xvICVkIGVudHJhZGFzIHB1ZWRlbiBzZXIgbW9zdHJhZGFzIGEgbGEgdmV6LiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAibm8gZXhpc3RlIGVsIHJlZiAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAibm8gc2UgcHVlZGUgbWFuZWphciBtw6FzIGRlICVkIHJldi4iCittc2dzdHJbMV0gIm5vIHNlIHB1ZWRlIG1hbmVqYXIgbcOhcyBkZSAlZCByZXZzLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgbm8gZXMgdW5hIHJlZiB2w6FsaWRhLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCBjb21taXQgJXMgKCVzKSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIGNvbW1pdCAlcyAoJXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXRyw7NuPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXRyw7NuPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICJzb2xvIG1vc3RyYXIgdGFncyAocHVlZGUgc2VyIGNvbWJpbmFkbyBjb24gaGVhZHMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAic29sbyBtb3N0cmFyIGhlYWRzIChwdWVkZSBzZXIgY29tYmluYWRvIGNvbiB0YWdzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgInJldmlzYXIgcmVmZXJlbmNpYXMgbcOhcyBlc3RyaWN0YW1lbnRlLCByZXF1aWVyZSBydXRhIGRlIHJlZiBleGFjdGEiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAibW9zdHJhciBsYSByZWZlcmVuY2lhIGRlIEhFQUQsIGluY2x1c28gc2kgc2UgZmlsdHJhcmEiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAidGFncyBkZSBkZWZlcmVuY2lhIGVuIElEcyBkZSBvYmpldG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgInNvbG8gbW9zdHJhciBoYXNoIFNIQTEgdXNhbmRvIDxuPiBkw61naXRvcyIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICJubyBtb3N0cmFyIHJlc3VsdGFkb3MgZW4gc3Rkb3V0ICjDunRpbCBjb24gLS12ZXJpZnkpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAibW9zdHJhciByZWZzIGRlIHN0ZGluIHF1ZSBubyBlc3TDoW4gZW4gZWwgcmVwb3NpdG9yaW8gbG9jYWwiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGRpc2FibGUpIDxvcHRpb25zPiIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSA8b3BjaW9uZXM+IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjYxCittc2dpZCAidGhpcyB3b3JrdHJlZSBpcyBub3Qgc3BhcnNlIChzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgbm90IGV4aXN0KSIKK21zZ3N0ciAiIgorImVzdGUgw6FyYm9sIGRlIHRyYWJham8gbm8gdGllbmUgc3BhcnNlIChhcmNoaXZvIHNwYXJlc2UtY2hlY2tvdXQgdGFsIHZleiBubyAiCisiZXhpc3RlKSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMjAKK21zZ2lkICJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNvbmZpZ3VyYXIgb3BjacOzbiBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIzNworbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI1NgorbXNnaWQgImluaXRpYWxpemUgdGhlIHNwYXJzZS1jaGVja291dCBpbiBjb25lIG1vZGUiCittc2dzdHIgImluaWNpYWxpemEgZWwgc3BhcnNlLWNoZWNrb3V0IGVuIG1vZG8gY29ubyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNjIKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiaW5pY2lhbGl6YXIgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgYWJyaXIgJyVzJyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNjEKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCAoLS1zdGRpbiB8IDxwYXRyb25lcz4pIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM3OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAibGVlciBwYXRyb25lcyBkZSBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozODQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJjb25maWd1cmFyIHBhdHJvbmVzIGRlIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NDcKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiZGVzaGFiaWxpdGFyIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NTkKK21zZ2lkICJlcnJvciB3aGlsZSByZWZyZXNoaW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJlcnJvciBhbCByZWZyZXNjYXIgZGlyZWN0b3JpbyBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjIgYnVpbHRpbi9zdGFzaC5jOjM3Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzdGFzaCBsaXN0IFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MgorbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxvcGNpb25lcz5dIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI0IGJ1aWx0aW4vc3Rhc2guYzo0NworbXNnaWQgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjIKK21zZ2lkICJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBicmFuY2ggPG5vbWJyZS1yYW1hPiBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjcKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4IGJ1aWx0aW4vc3Rhc2guYzo3NworbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lbnNhamU+XVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMSBidWlsdGluL3N0YXNoLmM6ODQKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVuc2FqZT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIKK21zZ2lkICJnaXQgc3Rhc2ggcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTcKK21zZ2lkICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjcyCittc2dpZCAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4iCittc2dzdHIgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZW5zYWplPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIiclcycgbm8gZXMgdW4gY29tbWl0IGVzdGlsbyBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICJTZSBlc3BlY2lmaWNhcm9uIGRlbWFzaWFkYXMgcmV2aXNpb25lczogJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NDkKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAiTm8gc2UgZW5jb250cmFyb24gZW50cmFkYXMgZGUgc3Rhc2guIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJXMgbm8gZXMgdW5hIHJlZmVyZW5jaWEgdsOhbGlkYSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyNCBnaXQtbGVnYWN5LXN0YXNoLnNoOjc1Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIgY29uIHBhcsOhbWV0cm9zIG5vIGVzdMOhIGltcGxlbWVudGFkbyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQwMworbXNnaWQgImNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYXBsaWNhciB1biBzdGFzaCBlbiBtZWRpbyBkZSB1biBtZXJnZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAibm8gc2UgcHVkbyBnZW5lcmFyIGRpZmYgJXNeIS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjEKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgImNvbmZsaWN0b3MgZW4gw61uZGljZS4gSW50ZW50ZSBzaW4gLS1pbmRleC4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjcKK21zZ2lkICJjb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJubyBzZSBwdWVkZSBndWFyZGFyIGVsIMOtbmRpY2UgZGVsIMOhcmJvbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNgorbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICJubyBzZSBwdWVkZW4gcmVzdGF1cmFyIGFyY2hpdm9zIG5vIHJhc3RyZWFkb3MgZGUgbGEgZW50cmFkYSBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgIkZ1c2lvbmFuZG8gJXMgY29uICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYwIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJFbCDDrW5kaWNlIG5vIGZ1ZSBzYWNhZG8gZGUgc3Rhc2guIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIxIGJ1aWx0aW4vc3Rhc2guYzo2MjAKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAiaW50ZW50byBkZSByZWNyZWFyIGVsIGluZGV4IgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJXMgKCVzKSIKK21zZ3N0ciAiQm90YWRvICVzICglcykiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIlczogTm8gc2UgcHVkbyBib3JyYXIgZW50cmFkYSBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyVzJyBubyBlcyB1bmEgcmVmZXJlbmNpYSBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICJMYSBlbnRyYWRhIGRlIHN0YXNoIHNlIGd1YXJkw7MgZW4gY2FzbyBkZSBzZXIgbmVjZXNhcmlvIG51ZXZhbWVudGUuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU1IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJObyBzZSBlc3BlY2lmaWPDsyBlbCBub21icmUgZGUgbGEgcmFtYSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc5NSBidWlsdGluL3N0YXNoLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYWN0dWFsaXphciAlcyBjb24gJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MTMgYnVpbHRpbi9zdGFzaC5jOjE0NzAgYnVpbHRpbi9zdGFzaC5jOjE1MDYKK21zZ2lkICJzdGFzaCBtZXNzYWdlIgorbXNnc3RyICJtZW5zYWplIGRlIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODIzCittc2dpZCAiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiCittc2dzdHIgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWllcmUgdW4gYXJndW1lbnRvIDxjb21taXQ+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIlNpbiBjYW1iaW9zIHNlbGVjY2lvbmFkb3MiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTQ1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIkHDum4gbm8gdGllbmVzIHVuIGNvbW1pdCBpbmljaWFsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE3MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjE2NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICJObyBzZSBwdWVkZSBndWFyZGFyIGVsIGVzdGFkbyBhY3R1YWwgZGVsIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTgxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiTm8gc2UgcHVlZGVuIGd1YXJkYXIgbG9zIGFyY2hpdm9zIG5vIHJhc3RyZWFkb3MiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTkyIGJ1aWx0aW4vc3Rhc2guYzoxMjAxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICJObyBzZSBwdWVkZSBndWFyZGFyIGVsIGVzdGFkbyBhY3R1YWwgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTIyOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIzNAorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICJObyBzZSBwdWVkZSBncmFiYXIgZWwgZXN0YWRvIGRlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyNzggZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJObyBzZSBwdWVkZSB1c2FyIC0tcGF0Y2ggeSAtLWluY2x1ZGUtdW50cmFja2VkIG8gLS1hbGwgYWwgbWlzbW8gdGllbXBvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI5NAorbXNnaWQgIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz8iCittc2dzdHIgIsK/T2x2aWRhc3RlICdnaXQgYWRkJz8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzA5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzQ2Cittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJObyBoYXkgY2FtYmlvcyBsb2NhbGVzIHBhcmEgZ3VhcmRhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMTYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTEKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgaW5pY2lhbGl6YXIgc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzMxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJObyBzZSBwdWVkZSBndWFyZGFyIGVsIGVzdGFkbyBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAlcyIKK21zZ3N0ciAiRGlyZWN0b3JpbyBkZSB0cmFiYWpvIGd1YXJkYWRvIHkgZXN0YWRvIGRlIMOtbmRpY2UgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDI2IGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJObyBzZSBwdWVkZW4gZWxpbWluYXIgY2FtYmlvcyBkZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYxIGJ1aWx0aW4vc3Rhc2guYzoxNDk3Cittc2dpZCAia2VlcCBpbmRleCIKK21zZ3N0ciAibWFudGVuZXIgaW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYzIGJ1aWx0aW4vc3Rhc2guYzoxNDk5Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAic3Rhc2ggZW4gbW9kbyBwYXRjaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjQgYnVpbHRpbi9zdGFzaC5jOjE1MDAKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICJtb2RvIHRyYW5xdWlsbyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjYgYnVpbHRpbi9zdGFzaC5jOjE1MDIKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAiaW5jbHVpciBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gZW4gc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY4IGJ1aWx0aW4vc3Rhc2guYzoxNTA0Cittc2dpZCAiaW5jbHVkZSBpZ25vcmUgZmlsZXMiCittc2dzdHIgImluY2x1aXIgYXJjaGl2b3MgaWdub3JhZG9zIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhlYyAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlamVjdXRhciAlcyIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKyJzYWx0YXIgeSBib3JyYXIgdG9kYXMgbGFzIGzDrW5lYXMgcXVlIGNvbWllbnphbiBjb24gdW4gY2Fyw6FjdGVyIGRlIGNvbWVudGFyaW8iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICJhbnRlcG9uZXIgY2Fyw6FjdGVyIGRlIGNvbWVudGFyaW8geSBlc3BhY2lvIGEgY2FkYSBsw61uZWEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIlNlIGVzcGVyYWJhIHVuIG5vbWJyZSBkZSByZWYgY29tcGxldG8sIHNlIG9idHV2byAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0Cittc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICJzdWJvbWR1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSBubyB0b21hIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICJubyBzZSBwdWVkZSBxdWl0YXIgdW4gY29tcG9uZW50ZSBkZWwgdXJsICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODAKK21zZ2lkICJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICJhbmNobyBhbHRlcm5hdGl2byBwYXJhIHJ1dGFzIHJlbGF0aXZhcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHJ1dGE+XSBbPHJ1dGE+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiTm8gc2UgZW5jb250csOzIHVybCBwYXJhIGxhIHJ1dGEgZGVsIHN1Ym3Ds2R1bG8gJyVzJyBlbiAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgIkVudHJhbmRvICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCBkZXZvbHZpw7MgZXN0YWRvIG5vLWNlcm8gcGFyYSAlc1xuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyB3aGlsZSByZWN1cnNpbmcgaW4gdGhlIG5lc3RlZCAiCisic3VibW9kdWxlcyBvZiAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCBkZXZvbHZpw7MgZXN0YWRvIG5vLWNlcm8gbWllbnRyYXMgY3Vyc2FiYSBlbiBsb3Mgc3VibcOzZHVsb3MgIgorImFuaWRhZG9zIGRlICVzXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICJTdXByaW1lIGxhIHNhbGlkYSBhbCBpbmljaWFsaXphciBjYWRhIGNvbWFuZG8gZGUgc3VibcOzZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiUmVjdXJzYXIgZW4gc3VibcOzZHVsb3MgYW5pZGFkb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NzIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tYW5kbz4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisibm8gc2UgcHVkbyBlbmNvbnRyYXIgY29uZmlndXJhY2nDs24gJyVzJy4gQXN1bWllbmRvIHF1ZSBlc3RlIHJlcG9zaXRvcmlvIGVzICIKKyJzdSBwcm9waW8gdXBzdHJlYW0gYXV0b3JpdGF0aXZvLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJGYWxsw7MgYWwgcmVnaXN0cmFyIGVsIHVybCBwYXJhIGxhIHJ1dGEgZGVsIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICJTdWJtw7NkdWxvICclcycgKCVzKSByZWdpc3RyYWRvIHBhcmEgcnV0YSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIiIKKyJwZWxpZ3JvOiBtb2RvIGRlIGFjdHVhbGl6YWNpw7NuIGRlIGNvbWFuZG9zIHN1Z2VyaWRvIHBhcmEgZWwgc3VibcOzZHVsbyAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiRXJyb3IgYWwgcmVnaXN0cmFyIGVsIG1vZG8gZGUgYWN0dWFsaXphY2nDs24gcGFyYSBsYSBydXRhIGRlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiU3VwcmltZSBsYSBzYWxpZGEgcGFyYSBpbmljaWFsaXphciB1biBzdWJtw7NkdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3BjaW9uZXM+XSBbPHBhdGg+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKyJubyBzZSBoYSBlbmNvbnRyYWRvIG1hcGVvIGRlIHN1Ym3Ds2R1bG9zIGVuIC5naXRtb2R1bGVzIHBhcmEgbGEgcnV0YSAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgcmVmIGluc2lkZSB0aGUgc3VibW9kdWxlICclcyciCittc2dzdHIgIm5vIHB1ZG8gcmVzb2x2ZXIgcmVmIGRlIEhFQUQgZGVudHJvIGRlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIHJlY3Vyc2FyIGVuIGVsIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE4OQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJTdXByaW1pciBvdXRwdXQgZGVsIGVzdGFkbyBkZWwgc3VibcOzZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OQorbXNnaWQgIiIKKyJVc2UgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaW5zdGVhZCBvZiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3VibW9kdWxlICIKKyJIRUFEIgorbXNnc3RyICIiCisiVXNhciBlbCBjb21taXQgZ3VhcmRhZG8gZW4gZWwgw61uZGljZSBlbiBsdWdhciBkZWwgZ3VhcmRhZG8gZW4gZWwgc3VibcOzZHVsbyAiCisiSEVBRCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAicmVjdXJzYXIgZW4gc3VibcOzZHVsb3MgYW5pZGFkb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODUKK21zZ2lkICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cnV0YT4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTA5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cnV0YT4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIlNpbmNyb25pemFuZG8gdXJsIGRlbCBzdWJtw7NkdWxvIHBhcmEgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgImZhbGzDsyBhbCByZWdpc3RyYXIgZWwgdXJsIHBhcmEgbGEgcnV0YSBkZWwgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiZXJyb3IgYWwgY29uc2VndWlyIGVsIHJlbW90byBwb3IgZGVmZWN0byBwYXJhIGVsIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJlcnJvciBhbCBhY3R1YWxpemFyIGVsIHJlbW90byBwYXJhIGVsIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICJTdXByaW1lIGxhIHNhbGlkYSBkZWwgdXJsIGRlbCBzdWJtw7NkdWxvIHF1ZSBzZSBzaW5jcm9uaXphIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHJ1dGE+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJFbCDDoXJib2wgZGUgdHJhYmFqbyBkZWwgc3VibcOzZHVsbyAnJXMnIGNvbnRpZW5lIHVuIGRpcmVjdG9yaW8gLmdpdCAodXNlICdybSAtIgorInJmJyBzaSByZWFsbWVudGUgcXVpZXJlcyBlbGltaW5hcmxvIGluY2x1eWVuZG8gdG9kbyBlbiBzdSBoaXN0b3JpYSkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gZGlzY2FyZCAiCisidGhlbSIKK21zZ3N0ciAiIgorIkVsIMOhcmJvbCBkZSB0cmFiYWpvIGRlbCBzdWJtw7NkdWxvICclcycgY29udGllbmUgbW9kaWZpY2FjaW9uZXMgbG9jYWxlczsgdXNhICIKKyInLWYnIHBhcmEgZGVzY2FydGFybGFzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmVkIGRpcmVjdG9yeSAnJXMnXG4iCittc2dzdHIgIkRpcmVjdG9yaW8gJyVzJyBsaW1waWFkb1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICJObyBzZSBwdWRvIGVsaW1pbmFyIGVsIMOhcmJvbCBkZSB0cmFiYWpvIGRlbCBzdWJtw7NkdWxvICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGRpcmVjdG9yaW8gdmFjw61vIGRlIHN1Ym3Ds2R1bG8gJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiU3VibcOzZHVsbyAnJXMnICglcykgbm8gcmVnaXN0cmFkbyBwYXJhIHJ1dGEgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5MAorbXNnaWQgIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICIiCisiUmVtb3ZlciDDoXJib2xlcyBkZSB0cmFiYWpvIGRlIHN1Ym3Ds2R1bG9zIGluY2x1c28gc2kgY29udGllbmVuIGNhbWJpb3MgbG9jYWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTEKK21zZ2lkICJVbnJlZ2lzdGVyIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICJRdWl0YXIgdG9kb3MgbG9zIHN1Ym3Ds2R1bG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5NgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHJ1dGE+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiVXNhICctLWFsbCcgc2kgcmVhbG1lbnRlIHF1aWVyZXMgZGVzLWluaWNpYWxpemFyIHRvZG9zIGxvcyBzdWJtw7NkdWxvcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyNzUKK21zZ2lkICIiCisiQW4gYWx0ZXJuYXRlIGNvbXB1dGVkIGZyb20gYSBzdXBlcnByb2plY3QncyBhbHRlcm5hdGUgaXMgaW52YWxpZC5cbiIKKyJUbyBhbGxvdyBHaXQgdG8gY2xvbmUgd2l0aG91dCBhbiBhbHRlcm5hdGUgaW4gc3VjaCBhIGNhc2UsIHNldFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRvICdpbmZvJyBvciwgZXF1aXZhbGVudGx5LCBjbG9uZSB3aXRoXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIGluc3RlYWQgb2YgJy0tcmVmZXJlbmNlJy4iCittc2dzdHIgIiIKKyJVbmEgYWx0ZXJuYXRpdmEgY2FsY3VsYWRhIGEgcGFydGlyIGRlIGxhIGFsdGVybmF0aXZhIGRlIHVuIHN1cGVycHJveWVjdG8gbm8gIgorImVzIHbDoWxpZGEuXG4iCisiUGFyYSBwZXJtaXRpciBxdWUgR2l0IGNsb25lIHNpbiB1bmEgYWx0ZXJuYXRpdmEgZW4gZXNlIGNhc28sIGVzdGFibGV6Y2FcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBhICdpbmZvJyBvLCBkZSBtYW5lcmEgZXF1aXZhbGVudGUsIGNsb25hciAiCisiY29uXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIGVuIGx1Z2FyIGRlICctLXJlZmVyZW5jZScuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgInN1Ym3Ds2R1bG8gJyVzJyBubyBwdWVkZSBhZ3JlZ2FyIGFsdGVybm86ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiVmFsb3IgJyVzJyBwYXJhIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IG5vIGVzIHJlY29ub2NpZG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiVmFsb3IgJyVzJyBwYXJhIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBubyBlcyByZWNvbm9jaWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MworbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICJhIGRvbmRlIGVsIG51ZXZvIHN1Ym3Ds2R1bG8gc2Vyw6EgY2xvbmFkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODYKK21zZ2lkICJuYW1lIG9mIHRoZSBuZXcgc3VibW9kdWxlIgorbXNnc3RyICJub21icmUgZGVsIG51ZXZvIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg5Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAidXJsIGRlIGTDs25kZSBjbG9uYXIgZWwgc3VibcOzZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgInByb2Z1bmRpZGFkIHBhcmEgY2xvbmVzIHN1cGVyZmljaWFsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk3Cittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAiZm9yemFyIGVsIHByb2Nlc28gZGUgY2xvbmFkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTkKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAibm8gcGVybWl0aXIgY2xvbmFyIGVuIGRpcmVjdG9yaW9zIG5vIHZhY8Otb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSAtLXVybCA8dXJsPiAtLXBhdGggPHBhdGg+IgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cnV0YT5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3Jpbz5dIFstLW5hbWUgPG5vbWJyZT5dIFstLWRlcHRoIDxwcm9mdW5kaWRhZD5dIC0tdXJsIDx1cmw+IC0tcGF0aCAiCisiPHJ1dGE+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICJyZWNoYXphbmRvIGNyZWFyL3VzYXIgJyVzJyBlbiBlbCBkaXJlY3RvcmlvIGRlIGdpdCBkZSBvdHJvIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiY2xvbiBkZSAnJXMnIGVuIGxhIHJ1dGEgZGUgc3VibcOzZHVsbyAnJXMnIGZhbGzDsyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAiZGlyZWN0b3JpbyBubyBlc3TDoSB2YWPDrW86ICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBvYnRlbmVyIGVsIGRpcmVjdG9yaW8gZGUgc3VibcOzZHVsbyBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiTW9kbyBkZSBhY3R1YWxpemFjacOzbiBpbnbDoWxpZG8gJyVzJyBwYXJhIHJ1dGEgZGUgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIk1vZG8gZGUgYWN0dWFsaXphY2nDs24gaW52w6FsaWRvICclcycgY29uZmlndXJhZG8gcGFyYSBydXRhIGRlIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIlJ1dGEgZGUgc3VibcOzZHVsbyAnJXMnIG5vIGluaWNpYWxpemFkYSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTgKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiwr9UYWwgdmV6IHF1aWVyZXMgdXNhciAndXBkYXRlIC0taW5pdCc/IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIlNhbHRhbmRvIHN1Ym3Ds2R1bG8gJXMgbm8gZnVzaW9uYWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiU2FsdGFuZG8gc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICJGYWxsw7MgYWwgY2xvbmFyICclcycuIFJlaW50ZW50byBwcm9ncmFtYWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiRmFsbMOzIGFsIGNsb25hciAnJXMnIHVuYSBzZWd1bmRhIHZleiwgYWJvcnRhbmRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMAorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJydXRhIGhhY2lhIGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3OQorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlLCBhY3Jvc3MgbmVzdGVkIHN1Ym1vZHVsZSBib3VuZGFyaWVzIgorbXNnc3RyICIiCisicnV0YSBoYWNpYSBlbCDDoXJib2wgZGUgdHJhYmFqbywgYSB0cmF2w6lzIGRlIGV4dHJlbW9zIGRlIHN1Ym3Ds2R1bG9zIGFuaWRhZG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MworbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG8gbm9uZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODkKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgIkNyZWEgdW4gY2xvbiBzdXBlcmZpY2lhbCB0cnVuY2FkbyBhbCBuw7ptZXJvIGVzcGVjaWZpY2FkbyBkZSByZXZpc2nDs24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODkyCittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAidHJhYmFqb3MgcGFyYWxlbG9zIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NAorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAic2kgZWwgY2xvbiBpbmljaWFsIGRlYmUgc2VndWlyIGxhIHJlY29tZW5kYWNpw7NuIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NQorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIm5vIG1vc3RyYXIgZWwgcHJvZ3Jlc28gZGUgY2xvbmFkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cnV0YT5dIFs8cnV0YT4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkxNworbXNnaWQgImJhZCB2YWx1ZSBmb3IgdXBkYXRlIHBhcmFtZXRlciIKK21zZ3N0ciAibWFsIHZhbG9yIHBhcmEgcGFyw6FtZXRybyB1cGRhdGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisiUmFtYSBkZSBzdWJtw7NkdWxvICglcykgY29uZmlndXJhZGEgcGFyYSBoZXJlZGFyIHJhbWEgZGVsIHN1cGVycHJveWVjdG8sIHBlcm8gIgorImVsIHN1cGVycHJveWVjdG8gbm8gZXN0w6EgZW4gbmluZ3VuYSByYW1hIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNvbnNlZ3VpciB1biBoYW5kbGUgcGFyYSBlbCBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIxCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlY3VycmlyIGEgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTI3Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wY2lvbmVzPl0gWzxwYXRoPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTgzCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAicmV2aXNhciBpcyBlcyBzZWd1cm8gZXNjcmliaXIgZWwgYXJjaGl2byAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODYKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICJkZXNjb25maWd1cmEgbGEgb3BjacOzbiBlbiBlbGFyY2hpdm8gLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkxCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxub21icmU+IFs8dmFsb3I+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5vbWJyZT4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkzCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTIgZ2l0LXN1Ym1vZHVsZS5zaDoxNzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisicG9yIGZhdm9yIGFzZWfDunJhdGUgcXVlIGVsIGFyY2hpdm8gLmdpdG1vZHVsZXMgZXN0w6EgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjYyIGdpdC5jOjQzMyBnaXQuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyBubyBzb3BvcnRhIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiclcycgbm8gZXMgdW4gY29tYW5kbyBzdWJtb2R1bGUtLWhlbHBlciB2w6FsaWRvIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs8b3BjaW9uZXM+XSA8bm9tYnJlPiBbPHJlZmVyZW5jaWE+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxub21icmU+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAic3VwcmltaXIgbWVuc2FqZXMgZGUgZXJyb3IgcGFyYSByZWZzIG5vIHNpbWLDs2xpY29zIChkZXNhY29wbGFkb3MpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiZWxpbWluYXIgcmVmZXJlbmNpYSBzaW1iw7NsaWNhIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJzYWxpZGEgZGUgcmVmZXJlbmNpYSBtw6FzIGNvcnRhIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAicmF6w7NuIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJyYXrDs24gZGUgbGEgYWN0dWFsaXphY2nDs24iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjUKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl1cbiIKKyJcdFx0PHRhZ25hbWU+IFs8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxhcmNoaXZvPl1cbiIKKyJcdFx0PG5vbWJyZS10YWc+IFs8aGVhZD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPG5vbWJyZS1kZS10YWc+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI4Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamV0bz5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0bz5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0csOzbj4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdG8+XSA8bm9tYnJlLWRlLXRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAidGFnICclcycgbm8gZW5jb250cmFkby4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiRXRpcXVldGEgJyVzJyBlbGltaW5hZGEgKGVyYSAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiRXNjcmliZSB1biBtZW5zYWplIHBhcmEgbGEgdGFnOlxuIgorIiAgJXNcbiIKKyJMYXMgbMOtbmVhcyBxdWUgY29taWVuemFuIGNvbiAnJWMnIHNlcsOhbiBpZ25vcmFkYXMuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc2NyaWJlIHVuIG1lbnNhamUgcGFyYSBsYSB0YWc6XG4iCisiICAlc1xuIgorIkxhcyBsw61uZWFzIHF1ZSBjb21pZW56YW4gY29uICclYycgc2Vyw6FuIGNvbnNlcnZhZGFzOyBwdWVkZXMgZWxpbWluYXJsYXMgcG9yICIKKyJ0aSBtaXNtbyBzaSBxdWllcmVzIGhhY2VybG8uXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiaW5jYXBheiBkZSBmaXJtYXIgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiaW5jYXBheiBkZSBlc2NyaWJpciBlbCBhcmNoaXZvIGRlIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKK21zZ3N0ciAiIgorIkhhcyBjcmVhZG8gdW4gdGFnIGFuaWRhZG8uIEVsIG9iamV0byByZWZlcmlkbyBwb3IgZWwgbnVldm8gdGFnIHlhXG4iCisiZXMgdW4gdGFnLiBTaSBxdWlzaXN0ZSBoYWNlciBlbCB0YWcgYWwgb2JqZXRvIHF1ZSBhcHVudGEsIHVzYTpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMyCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAidGlwbyBkZSBvYmpldG8gZXJyw7NuZW8uIgorCisjOiBidWlsdGluL3RhZy5jOjI4NAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAiwr9TaW4gbWVuc2FqZSBkZSB0YWc/IgorCisjOiBidWlsdGluL3RhZy5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICJFbCBtZW5zYWplIGRlbCB0YWcgaGEgc2lkbyBkZWphZG8gZW4gJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAibGlzdGFyIG5vbWJyZXMgZGUgdGFncyIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiaW1wcmltaXIgPG4+IGzDrW5lYXMgZGUgY2FkYSBtZW5zYWplIGRlIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAiZWxpbWluYXIgdGFncyIKKworIzogYnVpbHRpbi90YWcuYzo0MDcKK21zZ2lkICJ2ZXJpZnkgdGFncyIKK21zZ3N0ciAidmVyaWZpY2FyIHRhZ3MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGRlIGNyZWFjacOzbiBkZSB0YWdzIgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAidGFncyBhbm90YWRhcyBuZWNlc2l0YW4gdW4gbWVuc2FqZSIKKworIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAibWVuc2FqZSBkZSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiZm9yemFyIGxhIGVkaWNpw7NuIGRlbCBtZW5zYWplIGRlIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MTYKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICJ0YWcgYW5vdGFkbyB5IGZpcm1hZG8gY29uIEdQRyIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJ1c2FyIG90cmEgY2xhdmUgcGFyYSBmaXJtYXIgZWwgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQyMAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgInJlbXBsYXphciB0YWcgc2kgZXhpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjQyMSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgImNyZWFyIHVuIHJlZmxvZyIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICJPcGNpb25lcyBkZSBsaXN0YWRvIGRlIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgIm1vc3RyYXIgbGlzdGEgZGUgdGFncyBlbiBjb2x1bW5hcyIKKworIzogYnVpbHRpbi90YWcuYzo0MjUgYnVpbHRpbi90YWcuYzo0MjcKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIm1vc3RyYXIgc29sbyB0YWdzIHF1ZSBjb250aWVuZW4gZWwgY29tbWl0IgorCisjOiBidWlsdGluL3RhZy5jOjQyNiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibW9zdHJhciBzb2xvIHRhZ3MgcXVlIG5vIGNvbnRpZW5lbiBlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAic8OzbG8gaW1wcmltaXIgbGFzIHRhZ3MgcXVlIGVzdMOhbiBmdXNpb25hZGFzIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJzw7NsbyBpbXByaW1pciBsYXMgdGFncyBxdWUgbm8gZXN0w6FuIGZ1c2lvbmFkYXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDM0Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgInPDs2xvIGltcHJpbWlyIHRhZ3MgZGUgZWwgb2JqZXRvIgorCisjOiBidWlsdGluL3RhZy5jOjQ4MgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiB5IC1uIHNvbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJvcGNpw7NuIC1uIHNvbG8gZXMgcGVybWl0aWRhIGVuIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAib3BjacOzbiAtLWNvbnRhaW5zIHNvbG8gZXMgcGVybWl0aWRvIGVuIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA4Cittc2dpZCAiLS1uby1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAib3BjacOzbiAtLW5vLWNvbnRhaW5zIHNvbG8gZXMgcGVybWl0aWRhIGVuIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIm9wY2nDs24gLS1wb2ludHMtYXQgc29sbyBlcyBwZXJtaXRpZGEgZW4gbW9kbyBsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo1MTIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAib3BjaW9uZXMgLS1tZXJnZWQgeSAtLW5vLW1lcmdlZCAgc29sbyBlc3TDoW4gcGVybWl0aWRhcyBlbiBtb2RvIGxpc3RhIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAic8OzbG8gc2UgcGVybWl0ZSB1bmEgZGUgbGFzIG9wY2lvbmVzLCAtbSDDsyAtRi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJkZW1hc2lhZG9zIHBhcsOhbWV0cm9zIgorCisjOiBidWlsdGluL3RhZy5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiJyVzJyBubyBlcyB1biBub21icmUgZGUgdGFnIHbDoWxpZG8uIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZWwgdGFnICclcycgeWEgZXhpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIkV0aXF1ZXRhICclcycgYWN0dWFsaXphZGEgKGVyYSAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMQorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICJEZXNlbXBhcXVldGFuZG8gb2JqZXRvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGRpcmVjdG9yaW8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGNyZWFyIGVsIGFyY2hpdm8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiZmFsbMOzIGFsIGVsaW1pbmFyIGVsIGFyY2hpdm8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgZWxpbWluYXIgZGlyZWN0b3JpbyAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyBtdGltZSBpbiAnJXMnICIKK21zZ3N0ciAiUHJvYmFuZG8gbXRpbWUgZW4gJyVzJyAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTU0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgImluZm8gZGUgZXN0YWRvIGRlbCBkaXJlY3RvcmlvIG5vIGNhbWJpYSB0cmFzIGFncmVnYXIgdW4gbnVldm8gYXJjaGl2byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiaW5mbyBkZSBlc3RhZG8gZGVsIGRpcmVjdG9yaW8gbm8gY2FtYmlhIHRyYXMgYWdyZWdhciB1biBudWV2byBkaXJlY3RvcmlvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4MAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgImluZm8gZGUgZXN0YWRvIGRlbCBkaXJlY3RvcmlvIGNhbWJpYSB0cmFzIGFjdHVhbGl6YXIgdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTEKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICIiCisiaW5mbyBkZSBlc3RhZG8gZGVsIGRpcmVjdG9yaW8gY2FtYmlhIHRyYXMgYWdyZWdhciB1biBhcmNoaXZvIGRlbnRybyBkZWwgIgorInN1YmRpcmVjdG9yaW8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICJpbmZvIGRlIGVzdGFkbyBkZWwgZGlyZWN0b3JpbyBubyBjYW1iaWEgdHJhcyBib3JyYXIgdW4gYXJjaGl2byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiaW5mbyBkZSBlc3RhZG8gZGVsIGRpcmVjdG9yaW8gbm8gY2FtYmlhIHRyYXMgYm9ycmFyIHVuIGRpcmVjdG9yaW8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8b3BjaW9uZXM+XSBbLS1dIFs8YXJjaGl2bz4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiIgorImNvbnRpbnVhciByZWZyZXNoIChBY3R1YWxpemFjacOzbikgaW5jbHVzbyBjdWFuZG8gZWwgw61uZGljZSBuZWNlc2l0YSAiCisiYWN0dWFsaXphY2nDs24iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlZnJlc2g6IGlnbm9yYSBzdWJtw7NkdWxvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODAKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAibm8gaWdub3JhciBhcmNoaXZvcyBudWV2b3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgInBlcm1pdGlyIHF1ZSBhcmNoaXZvcyByZW1wbGFjZW4gZGlyZWN0b3Jpb3MgeSB2aWNlLXZlcnNhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImF2aXNhciBkZSBhcmNoaXZvcyBmYWx0YW5kbyBlbiBlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiZWplY3V0YXIgcmVmcmVzaCBpbmNsdXNvIHNpIGVsIMOtbmRpY2UgY29udGllbmUgZW50cmFkYXMgc2luIGNhbWJpb3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJyZWZyZXNoIGluZm9ybWFjacOzbiBkZSBlc3RhZG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJjb21vIC0tcmVmcmVzaCwgcGVybyBpZ25vcmEgY29uZmlndXJhY2nDs24gYXNzdW1lLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI8bW9kbz4sPG9iamV0bz4sPHJ1dGE+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWdyZWdhciBsYSBlbnRyYWRhIGVzcGVjaWZpY2FkYSBhbCDDrW5kaWNlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDgKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgIm1hcmNhciBhcmNoaXZvcyBjb21vIFwibm90IGNoYW5naW5nXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAibGltcGlhciBiaXQgYXNzdW1lZC11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIm1hcmNhciBhcmNoaXZvcyBjb21vIFwiaW5kZXgtb25seVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTcKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAibGltcGlhciBiaXQgc2tpcC13b3JrdHJlZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAibm8gdG9jYXIgZW50cmFkYXMgaW5kZXgtb25seSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIyCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJhZ3JlZ2FyIHNvbG8gYWwgw61uZGljZTsgbm8gYWdyZWdhciBjb250ZW5pZG8gYSBsYSBiYXNlIGRlIGRhdG9zIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNAorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgIiIKKyJlbGltaW5hciBydXRhcyBub21icmFkYXMgaW5jbHVzbyBzaSBlc3TDoW4gcHJlc2VudGVzIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgImNvbiAtLXN0ZGluOiBsYXMgbMOtbmVhcyBkZSBlbnRyYWRhIHNvbiB0ZXJtaW5hZGFzIGNvbiBieXRlcyBudWxvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI4Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVlciBsYSBsaXN0YSBkZSBydXRhcyBwYXJhIHNlciBhY3R1YWxpemFkYSBkZXNkZSBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImFncmVnYXIgZW50cmFkYXMgZGUgc3RhbmRhcmQgaW5wdXQgYWwgw61uZGljZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM2Cittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICJyZXBvYmxhciBzdGFnZXMgIzIgeSAjMyBwYXJhIGxhcyBydXRhcyBsaXN0YWRhcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgInNvbG8gYWN0dWFsaXphciBlbnRyYWRhcyBxdWUgZGlmaWVyZW4gZGUgSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiaWdub3JhciBhcmNoaXZvcyBmYWx0YW50ZXMgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAicmVwb3J0YXIgYWNjaW9uZXMgcG9yIHN0YW5kYXJkIG91dHB1dCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ5Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihwYXJhIHBvcmNlbGFuYXMpIG9sdmlkYXIgY29uZmxpY3RvcyBzaW4gcmVzb2x2ZXIgZ3VhcmRhZG9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiZXNjcmliaXIgw61uZGljZSBlbiBlc3RlIGZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA1NQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJhY3RpdmFyIG8gZGVzYWN0aXZhciDDrW5kaWNlIGRpdmlkaWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgImhhYmlsaXRhciBvIGRlc2hhYmlsaXRhciBjYWNow6kgbm8gcmFzdHJlYWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAicHJvYmFyIHNpIGVsIGZpbGVzeXN0ZW0gc29wb3J0YSBjYWNow6kgbm8gcmFzdHJlYWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjEKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiaGFiaWxpdGFyIGNhY2jDqSBubyByYXN0cmVhZG8gc2luIHByb2JhciBlbCBmaWxlc3lzdGVtIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAiZXNjcmliaXIgZWwgw61uZGljZSBpbmNsdXNvIHNpIG5vIGVzdMOhIG1hcmNhZG8gY29tbyBjYW1iaWFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIKK21zZ3N0ciAiYWN0aXZhciBvIGRlc2FjdGl2YXIgbW9uaXRvciBkZSBzaXN0ZW1hIGRlIGFyY2hpdm9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAibWFyY2FyIGFyY2hpdm9zIGNvbW8gdsOhbGlkb3MgcGFyYSBmc21vbml0b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA3MAorbXNnaWQgImNsZWFyIGZzbW9uaXRvciB2YWxpZCBiaXQiCittc2dzdHIgImxpbXBpYSBlbCBiaXQgZGUgdmFsaWRhY2nDs24gZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzMKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggZXN0w6EgY29uZmlndXJhZG8gZW4gZmFsc2U7IHJlbXXDqXZlbG8gbyBjw6FtYmlhbG8sIHNpICIKKyJyZWFsbWVudGUgcXVpZXJlcyBoYWJpbGl0YXIgZWwgw61uZGljZSBwYXJ0aWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggZXN0w6EgY29uZmlndXJhZG8gZW4gdHJ1ZTsgcmVtdcOpdmVsbyBvIGPDoW1iaWFsbywgc2kgcmVhbG1lbnRlICIKKyJxdWllcmVzIGRlc2hhYmlsaXRhciBlbCDDrW5kaWNlIHBhcnRpZG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5NAorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGRpc2FibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0w6EgY29uZmlndXJhZG8gZW4gdHJ1ZTsgcmVtdcOpdmVsbyBvIGPDoW1iaWFsbywgc2kgIgorInJlYWxtZW50ZSBxdWllcmVzIGRlc2hhYmlsaXRhciBlbCBjaGFjaMOpIG5vIHJhc3RyZWFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk4Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJDYWNow6kgbm8gcmFzdHJlYWRvIGRlc2hhYmlsaXRhZG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0w6EgY29uZmlndXJhZG8gZW4gZmFsc2U7IHJlbXXDqXZlbG8gbyBjw6FtYmlhbG8sIHNpICIKKyJyZWFsbWVudGUgcXVpZXJlcyBoYWJpbGl0YXIgZWwgY2FjaMOpIG5vIHJhc3RyZWFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJDYWNow6kgbm8gcmFzdHJlYWRvIGhhYmlsaXRhZG8gcGFyYSAnJXMnIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3Igbm8gZXN0w6EgY29uZmlndXJhZG87IGFjdMOtdmFsbyBzaSByZWFsbWVudGUgcXVpZXJlcyBoYWJpbGl0YXIgIgorImZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjIyCittc2dpZCAiZnNtb25pdG9yIGVuYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBhY3RpdmFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI1Cittc2dpZCAiIgorImNvcmUuZnNtb25pdG9yIGlzIHNldDsgcmVtb3ZlIGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBkaXNhYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIGVzdMOhIGNvbmZpZ3VyYWRvOyByZW11w6l2ZWxvIHNpIHJlYWxtZW50ZSBxdWllcmVzIGRlc2hhYmlsaXRhciAiCisiZWwgZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBkZXNhY3RpdmFkbyIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3BjaW9uZXM+XSAtZCA8bm9tYnJlLXJlZmVyZW5jaWE+IFs8dmFsb3ItYW50ZXJpb3I+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisiZ2l0IHVwZGF0ZS1yZWYgWzxvcGNpb25lcz5dIDxub21icmUtcmVmZXJlbmNpYT4gPHZhbG9yLW51ZXZvPiBbPHZhbG9yLSIKKyJhbnRlcmlvcj5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxvcGNpb25lcz5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgImVsaW1pbmFyIGxhIHJlZmVyZW5jaWEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICJhY3R1YWxpemEgPHJlZm5hbWU+IG5vIGEgbG8gcXVlIGFwdW50YSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAic3RkaW4gdGllbmUgYXJndW1lbnRvcyB0ZXJtaW5hZG9zIGVuIE5VTCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImxlZSBhY3R1YWxpemFjaW9uZXMgZGUgc3RkaW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgImFjdHVhbGl6YSBsb3MgYXJjaGl2b3MgaW5mbyBkZXNkZSBjZXJvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPG9wY2lvbmVzPl0gPGRpcmVjdG9yaW8+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICJzYWxlIGRlc3B1w6lzIGRlIHVuIGludGVyY2FtYmlvIHBldGljacOzbi9yZXNwdWVzdGEgw7puaWNvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgInNhbGlyIGlubWVkaWF0YW1lbnRlIHRyYXMgZWwgYW51bmNpbyBpbmljaWFsIGRlIHJlZiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICJubyBpbnRlbnRlIDxkaXJlY3RvcmlvPi8uZ2l0LyBzaSA8ZGlyZWN0b3Jpbz4gbm8gZXMgdW4gZGlyZWN0b3JpbyBHaXQiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICJpbnRlcnJ1bXBpciB0cmFuc2ZlcmVuY2lhIHRyYXMgPG4+IHNlZ3VuZG9zIGRlIGluYWN0aXZpZGFkIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJpbXByaW1pciBjb250ZW5pZG8gZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIm11ZXN0cmEgbGEgc2FsaWRhIGRlIHN0YXR1cyBncGcgZW4gZm9ybWF0byByYXciCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFxdWV0ZT4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NQorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgInZlcmJvc28iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICJzb2xvIG1vc3RyYXIgZXN0YWTDrXN0aWNhcyIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTgKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXRvPl0gPHRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJpbXByaW1pciBjb250ZW5pZG8gZGVsIHRhZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxvcGNpb25lcz5dIDxydXRhPiBbPGNvbW1pdC1pc2g+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3BjaW9uZXM+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE5Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbG9jayBbPG9wY2lvbmVzPl0gPHJ1dGE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjAKK21zZ2lkICJnaXQgd29ya3RyZWUgbW92ZSA8d29ya3RyZWU+IDxuZXctcGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG51ZXZhLXJ1dGE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjEKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wY2lvbmVzPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wY2lvbmVzPl0gPHdvcmt0cmVlPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHJ1dGE+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgImZhbGzDsyBhbCBib3JyYXIgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJSZW1vdmllbmRvIGVsIHdvcmt0cmVlcy8lczogbm8gZXMgdW4gZGlyZWN0b3JpbyB2w6FsaWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiUmVtb3ZpZW5kbyB3b3JrdHJlZXMvJXM6IGFyY2hpdm8gZ2l0ZGlyIG5vIGV4aXN0ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIlJlbW92aWVuZG8gd29ya3RyZWVzLyVzOiBubyBlcyBwb3NpYmxlIGxlZXIgZWwgYXJjaGl2byBnaXRkaXIgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIlJlbW92aWVuZG8gw6FyYm9sZXMgZGUgdHJhYmFqby8lczogbGVjdHVyYSBjb3J0YSAoc2UgZXNwZXJhbiAlPFBSSXVNQVg+ICIKKyJieXRlcywgJTxQUkl1TUFYPiBsZcOtZG9zKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIlJlbW92aWVuZG8gd29ya3RyZWVzLyVzOiBhcmNoaXZvIGdpdGRpciBpbnbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICIiCisiUmVtb3ZpZW5kbyB3b3JrdHJlZXMvJXM6IGFyY2hpdm8gZ2l0ZGlyIGFwdW50YSBhIHVuYSB1YmljYWNpw7NuIG5vIGV4aXN0ZW50ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAicmVwb3J0YSDDoXJib2xlcyBkZSB0cmFiYWpvIHJlY29ydGFkb3MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjcKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZXhwaXJhciDDoXJib2xlcyBkZSB0cmFiYWpvIG3DoXMgdmllam9zIGEgPHRpZW1wbz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyB5YSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIHZvbHZlciBhIGFncmVnYXIgZWwgw6FyYm9sICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgZXMgdW4gw6FyYm9sIGRlIHRyYWJham8gZmFsdGFudGUgcGVybyBibG9xdWVhZG87XG4iCisidXNhICdhZGQgLWYgLWYnIHBhcmEgc29icmVlc2NyaWJpciwgbyAndW5sb2NrJyB5ICdwcnVuZScgbyAncmVtb3ZlJyBwYXJhICIKKyJsaW1waWFyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIiclcycgZXMgdW4gw6FyYm9sIGRlIHRyYWJham8gZmFsdGFudGUgcGVybyB5YSByZWdpc3RyYWRvO1xuIgorInVzYSAnYWRkIC1mJyBwYXJhIHNvYnJlZXNjcmliaXIsIG8gJ3BydW5lJyBvICdyZW1vdmUnIHBhcmEgbGltcGlhciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIGRpcmVjdG9yaW8gZGUgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzOSBidWlsdGluL3dvcmt0cmVlLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAiUHJlcGFyYW5kbyDDoXJib2wgZGUgdHJhYmFqbyAobnVldmEgcmFtYSAnJXMnKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiUHJlcGFyYW5kbyDDoXJib2wgZGUgdHJhYmFqbyAocmVpbmljaWFuZG8gcmFtYSAnJXMnOyBlc3RhYmEgZW4gJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICJQcmVwYXJhbmRvIMOhcmJvbCBkZSB0cmFiYWpvIChoYWNpZW5kbyBjaGVja291dCBhICclcycpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIlByZXBhcmFuZG8gw6FyYm9sIGRlIHRyYWJham8gKEhFQUQgZGVzYWNvcGxhZG8gJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICIiCisiaGFjZXIgY2hlY2tvdXQgYSA8cmFtYT4gaW5jbHVzbyBzaSB5YSBoYSBoZWNobyBjaGVja291dCBlbiBvdHJvIMOhcmJvbCBkZSAiCisidHJhYmFqbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgImNyZWFyIHVuYSBudWV2YSByYW1hIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAyCittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICJjcmVhciBvIHJlc3RhYmxlY2VyIHVuYSByYW1hIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgInBvcHVsYXIgZWwgbnVldm8gw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDUKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAibWFudGVuZXIgZWwgbnVldm8gw6FyYm9sIGRlIHRyYWJham8gYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA4Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAiY29uZmlndXJhbmRvIG1vZG8gdHJhY2tpbmcgKG1pcmFyIGdpdC1icmFuY2goMSkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTExCittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJpbnRlbnRhciBlbXBhcmVqYXIgZWwgbnVldm8gbm9tYnJlIGRlIHJhbWEgY29uIHVuYSByYW1hIGRlIHJhc3RyZW8gcmVtb3RvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTE5Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CLCB5IC0tZGV0YWNoIHNvbiBtdXR1YW1lbnRlIGV4Y2x1c2l2YXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1ODAKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiLS1bbm8tXXRyYWNrIHNvbG8gcHVlZGUgc2VyIHVzYWRvIHNpIHVuYSBudWV2YSByYW1hIGVzIGNyZWFkYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4MAorbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAicmF6w7NuIHBhcmEgYmxvcXVlYXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIgYnVpbHRpbi93b3JrdHJlZS5jOjcyNSBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIG5vIGVzIHVuIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjcKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiRWwgw6FyYm9sIGRlIHRyYWJham8gcHJpbmNpcGFsIG5vIHB1ZWRlIHNlciBibG9xdWVhZG8gbmkgZGVzYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiclcycgeWEgZXN0w6EgYmxvcXVlYWRvOyByYXrDs246ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycgeWEgZXN0w6EgYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyBubyBlc3TDoSBibG9xdWVhZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzAKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiIgorIsOhcmJvbGVzIGRlIHRyYWJham8gY29udGVuaWVuZG8gc3VibcOzZHVsb3Mgbm8gcHVlZGUgc2VyIG1vdmlkb3MgbyBlbGltaW5hZG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzgKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICJmb3J6YXIgbW92ZSBpbmNsdXNvIHNpIGVsIMOhcmJvbCBkZSB0cmFiYWpvIGVzdMOhIHN1Y2lvIG8gYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAxIGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIGVzIHVuIMOhcmJvbCBkZSB0cmFiYWpvIHByaW5jaXBhbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAibm8gc2UgcHVkbyBkZXNjdWJyaXIgZWwgbm9tYnJlIGRlIGRlc3Rpbm8gZGUgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZWwgb2JqZXRpdm8gJyVzJyB5YSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJubyBzZSBwdWVkZSBtb3ZlciB1biDDoXJib2wgZGUgdHJhYmFqbyBibG9xdWVhZG8sIG1vdGl2byBkZWwgYmxvcXVlbzogJXNcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHBhcmEgc29icmVlc2NyaWJpciBvIGRlc2Jsb3F1ZWFyIHByaW1lcm8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjIKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisibm8gc2UgcHVlZGUgbW92ZXIgdW4gw6FyYm9sIGRlIHRyYWJham8gYmxvcXVlYWRvO1xuIgorInVzZSAnbW92ZSAtZiAtZicgcGFyYSBzb2JyZWVzY3JpYmlyIG8gZGVzYmxvcXVlYXIgcHJpbWVybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IG1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAiZmFsbMOzIHZhbGlkYWNpw7NuLCBubyBzZSBwdWVkZSBtb3ZlciBlbCDDoXJib2wgZGUgdHJhYmFqbzogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG1vdmUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJmYWxsw7MgYWwgbW92ZXIgJyVzJyBhICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAiZmFsbMOzIGFsIGVqZWN1dGFyICdnaXQgc3RhdHVzJyBlbiAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKyInJXMnIGNvbnRpZW5lIGFyY2hpdm9zIG5vIHJhc3RyZWFkb3MgbyBtb2RpZmljYWRvcywgdXNlIC0tZm9yY2UgcGFyYSBib3JyYXJsbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJubyBzZSBwdWRvIGVqZWN1dGFyICdnaXQgc3RhdHVzJyBlbiAnJXMnLCBjw7NkaWdvICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTEwCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiZm9yemFyIHJlbW9jacOzbiBpbmNsdXNvIHNpIGVsIMOhcmJvbCBkZSB0cmFiYWpvIGVzdMOhIHN1Y2lvIG8gYmxvcXVlYWRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIm5vIHNlIHB1ZWRlbiBlbGltaW5hciDDoXJib2wgZGUgdHJhYmFqbyBibG9xdWVhZG8sIHJhesOzbiBkZWwgYmxvcXVlbzogJXNcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgcGFyYSBzb2JyZWVzY3JpYmlyIG8gZGVzYmxvcXVlYXIgcHJpbWVybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzNQorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisibm8gc2UgcHVlZGVuIGVsaW1pbmFyIMOhcmJvbCBkZSB0cmFiYWpvIGJsb3F1ZWFkbztcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgcGFyYSBzb2JyZWVzY3JpYmlyIG8gZGVzYmxvcXVlYXIgcHJpbWVybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJmYWxsw7MgdmFsaWRhY2nDs24sIG5vIHNlIHB1ZWRlIGVsaW1pbmFyIMOhcmJvbCBkZSB0cmFiYWpvOiAlcyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaWpvPi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPHByZWZpam8+LyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjkKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgImVzY3JpYmlyIG9iamV0byBkZSAgw6FyYm9sIHBhcmEgdW4gc3ViZGlyZWN0b3JpbyA8cHJlZmlqbz4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMxCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAic8OzbG8gw7p0aWwgcGFyYSBkZXB1cmFyIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ21hcmsnIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiU2UgZXNwZXJhYmEgY29tYW5kbyAnbWFyaycsIHNlIG9idHV2byAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJTZSBlc3BlcmFiYSBjb21hbmRvICd0bycsIHNlIG9idHV2byAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAiY2FyYWN0ZXLDrXN0aWNhICclcycgcHJvaGliaWRhIGVuIGlucHV0IHNpbiAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKyJMb3MgcGVybWlzb3MgZW4gdHUgZGlyZWN0b3JpbyBkZSBzb2NrZXQgc29uIGRlbWFzaWFkbyBmbG9qb3M7IG90cm9zXG4iCisidXN1YXJpb3MgcHVlZGVuIGxlZXIgc3VzIGNyZWRlbmNpYWxlcyBhbG1hY2VuYWRhcyBlbiBjYWNow6kuIENvbnNpZGVyYSAiCisiZWplY3V0YXI6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNzIKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICJtb3N0cmFyIG1lbnNhamVzIGRlIGRlYnVnIGVuIHN0ZGVyciIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImNvbW1pdCAlcyBubyBlc3TDoSBtYXJjYWRvIGNvbW8gYWxjYW56YWJsZSIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE2MgorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiZGVtYXNpYWRvcyBjb21taXRzIG1hcmNhZG9zIGNvbW8gYWxjYW56YWJsZXMiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzo3Cittc2dpZCAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorbXNnc3RyICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcGNpb25lcz5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAic2FsaXIgaW5tZWRpYXRhbWVudGUgdHJhcyBhbnVuY2lhciBjYXBhY2lkYWRlcyIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cnV0YT5dIFstYyA8bm9tYnJlPj08dmFsb3I+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cnV0YT5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cnV0YT5dIFstLXdvcmstdHJlZT08cnV0YT5dIFstLW5hbWVzcGFjZT08bm9tYnJlPl1cbiIKKyIgICAgICAgICAgIDxjb21hbmRvPiBbPGFyZ3M+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyInZ2l0IGhlbHAgLWEnIHkgJ2dpdCBoZWxwIC1nJyBsaXN0YW4gbG9zIHN1YmNvbWFuZG9zIGRpc3BvbmlibGVzIHkgYWxndW5hc1xuIgorImd1w61hcyBkZSBjb25jZXB0by4gQ29uc3VsdGUgJ2dpdCBoZWxwIDxjb21tYW5kPicgbyAnZ2l0IGhlbHAgPGNvbmNlcHRvPidcbiIKKyJwYXJhIGxlZXIgc29icmUgdW4gc3ViY29tYW5kbyBvIGNvbmNlcHRvIGVzcGVjw61maWNvLlxuIgorIk1pcmEgJ2dpdCBoZWxwIGdpdCcgcGFyYSB1bmEgdmlzdGEgZ2VuZXJhbCBkZWwgc2lzdGVtYS4iCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICJubyBzZSBlbnRyZWfDsyBkaXJlY3RvcmlvIHBhcmEgLS1naXQtZGlyXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgIm5vIHNlIGVudHJlZ8OzIG5hbWVzcGFjZSBwYXJhIC0tbmFtZXNwYWNlXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIm5vIHNlIGVudHJlZ8OzIGRpcmVjdG9yaW8gcGFyYSAtLXdvcmstdHJlZVxuIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICJubyBzZSBlbnRyZWfDsyBwcmVmaWpvIHBhcmEgLS1zdXBlci1wcmVmaXhcbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYyBlc3BlcmEgdW4gc3RyaW5nIGRlIGNvbmZpZ3VyYWNpw7NuXG4iCisKKyM6IGdpdC5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgIm5vIHNlIGVudHJlZ8OzIGRpcmVjdG9yaW8gcGFyYSAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIm9wY2nDs24gJXMgZGVzY29ub2NpZGFcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICJhbCBleHBhbmRpciBlbCBhbGlhcyAnJXMnOiclcyciCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKyJhbGlhcyAnJXMnIGNhbWJpYSBsYXMgdmFyaWFibGVzIGRlIGVudG9ybm8uXG4iCisiUHVlZGVzIHVzYXIgJyFnaXQnIGVuIGVsIGFsaWFzIHBhcmEgaGFjZXIgZXN0byIKKworIzogZ2l0LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGFsaWFzIGZvciAlcyIKK21zZ3N0ciAiYWxpYXMgdmFjw61vIHBhcmEgJXMiCisKKyM6IGdpdC5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgYWxpYXM6ICVzIgorbXNnc3RyICJhbGlhcyByZWN1cnNpdm86ICVzIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZXJyb3IgZGUgZXNjcml0dXJhIGVuIHN0YW5kYXJkIG91dHB1dCIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZXJyb3IgZGVzY29ub2NpZG8gZGUgZXNjcml0dXJhIGVuIHN0YW5kYXJkIG91dHB1dCIKKworIzogZ2l0LmM6NDYzCittc2dpZCAiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiY2llcnJlIGZhbGzDsyBlbiBzdGFuZGFyZCBvdXRwdXQiCisKKyM6IGdpdC5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YgJyVzJyBkb2VzIG5vdCB0ZXJtaW5hdGU6JXMiCittc2dzdHIgImJ1Y2xlIGRlIGFsaWFzIGRldGVjdGFkbzogZXhwYW5zacOzbiBkZSAnJXMnIG5vIHRlcm1pbmE6ICVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIm5vIHNlIHB1ZWRlIG1hbmVqYXIgJXMgY29tbyB1biBidWlsdGluIgorCisjOiBnaXQuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisidXNvOiAlc1xuIgorIlxuIgorIlxuIgorIlxuIgorCisjOiBnaXQuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgImV4cGFuc2nDs24gZGVsIGFsaWFzICclcycgZmFsbMOzOyAnJXMnIG5vIGVzIHVuIGNvbWFuZG8gZGUgZ2l0XG4iCisKKyM6IGdpdC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuIGNvbW1hbmQgJyVzJzogJXNcbiIKK21zZ3N0ciAiZmFsbMOzIGFsIGVqZWN1dGFyIGNvbWFuZG8gJyVzJzogJXNcbiIKKworIzogaHR0cC5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICJ2YWxvciBuZWdhdGl2byBwYXJhIGh0dHAucG9zdGJ1ZmZlcjsgcG9uaWVuZG8gZWwgZGVmYXVsdCBhICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICJEZWxlZ2FjacOzbiBkZSBjb250cm9sIG5vIGVzIHNvcG9ydGFkYSBjb24gY1VSTCA8IDcuMjIuMCIKKworIzogaHR0cC5jOjQwOAorbXNnaWQgIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiRmlqYWNpw7NuIGRlIGxsYXZlIHDDumJsaWNhIG5vIGVzIHNvcG9ydGFkYSBjb24gY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjg3NgorbXNnaWQgIkNVUkxTU0xPUFRfTk9fUkVWT0tFIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICJDVVJMU1NMT1BUX05PX1JFVk9LRSBubyBzb3BvcnRhZG8gY29uIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo5NDkKK21zZ2lkICJQcm90b2NvbCByZXN0cmljdGlvbnMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjE5LjQiCittc2dzdHIgIlJlc3RyaWNjacOzbiBkZSBwcm90b2NvbG8gbm8gc29wb3J0YWRhIGNvbiBjVVJMIDwgNy4xOS40IgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiQmFja2VuZCBTU0wgbm8gc29wb3J0YWRvICclcycuIEJhY2tlbmRzIFNTTCBzb3BvcnRhZG9zOiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gY29uZmlndXJhciBiYWNrZW5kIFNTTCBhICclcyc6IGNVUkwgZnVlIGNvbnN0cnVpZG8gc2luIGJhY2tlbmRzICIKKyJTU0wiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIk5vIHNlIHB1ZG8gY29uZmlndXJhciBiYWNrZW5kIFNTTCBwYXJhICclcyc6IHlhIGNvbmZpZ3VyYWRvIgorCisjOiBodHRwLmM6MTk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAiIgorIm5vIHB1ZWRlIGFjdHVhbGl6YXIgbGEgYmFzZSBkZSB1cmwgZGUgbGEgcmVkaXJlY2Npw7NuOlxuIgorIiAgcHJlZ3VudGFiYSBwb3I6ICVzXG4iCisiICAgcmVkaXJlY2Npb25hbWllbnRvOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIgorbXNnc3RyICJxdW90aW5nIGludsOhbGlkbyBlbiB2YWxvciBkZSBwdXNoLW9wdGlvbjogJyVzJyIKKworIzogcmVtb3RlLWN1cmwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNpbmZvL3JlZnMgbm90IHZhbGlkOiBpcyB0aGlzIGEgZ2l0IHJlcG9zaXRvcnk/IgorbXNnc3RyICIlc2luZm8vcmVmcyBubyBlcyB2w6FsaWRvOiDCv2VzIGVzdGUgdW4gcmVwb3NpdG9yaW8gZ2l0PyIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorInJlc3B1ZXN0YSBkZSBzZXJ2aWRvciBpbnbDoWxpZGE7IHNlIGVzcGVyYWJhIHNlcnZpY2lvLCBzZSBvYnR1dm8gdW4gZmx1c2ggIgorInBhY2tldCIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJyZXNwdWVzdGEgZGUgc2Vydmlkb3IgaW52w6FsaWRhOyBzZSBvYnR1dm8gJyVzJyIKKworIzogcmVtb3RlLWN1cmwuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAicmVwb3NpdG9yaW8gJyVzJyBubyBlbmNvbnRyYWRvIgorCisjOiByZW1vdGUtY3VybC5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICclcyciCittc2dzdHIgIkF1dGVudGljYWNpw7NuIGZhbGzDsyBwYXJhICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgIm5vIGVzIHBvc2libGUgYWNjZWRlciAnJXMnOiVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAicmVkaXJpZ2llbmRvIGEgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgIm5vIGRlYmVyw61hIHRlbmVyIEVPRiBjdWFuZG8gbm8gZXMgZ2VudGlsIGVuIEVPRiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKyJubyBlcyBwb3NpYmxlIHJlYm9iaW5hciBycGMgcG9zdCBkYXRhIC0gaW50ZW50YSBpbmNyZW1lbnRhbmRvIGh0dHAucG9zdEJ1ZmZlciIKKworIzogcmVtb3RlLWN1cmwuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUlBDIGZhaWxlZDsgJXMiCittc2dzdHIgIlJQQyBmYWxsw7M7ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICJubyBzZSBwdWVkZSBtYW5lamFyIHB1c2hlcyB0YW4gZ3JhbmRlcyIKKworIzogcmVtb3RlLWN1cmwuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorbXNnc3RyICJubyBzZSBwdWVkZSBkZXNpbmZsYXIgZWwgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorCisjOiByZW1vdGUtY3VybC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZGVzaW5mbGFyIGVsIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorCisjOiByZW1vdGUtY3VybC5jOjEwMjMKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgImR1bXAgaHR0cCB0cmFuc3BvcnQgbm8gc29wb3J0YSBjYXBhY2lkYWRlcyBzdXBlcmZpY2lhbGVzIgorCisjOiByZW1vdGUtY3VybC5jOjEwMzcKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJmZXRjaCBmYWxsw7MuIgorCisjOiByZW1vdGUtY3VybC5jOjEwODUKK21zZ2lkICJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGhhY2VyIGZldGNoIHBvciBzaGExIHNvYnJlIHNtYXJ0IGh0dHAiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEyOSByZW1vdGUtY3VybC5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICJlcnJvciBkZSBwcm90b2NvbG86IHNlIGVzcGVyYWJhIHNoYS9yZWYsIHNlIG9idHV2byAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjExNDcgcmVtb3RlLWN1cmwuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImh0dHAgdHJhbnNwb3J0IG5vIHNvcG9ydGEgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4MworbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICJnaXQtaHR0cC1wdXNoIGZhbGzDsyIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY3Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IHVzbzogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogZXJyb3IgbGV5ZW5kbyBjb21tYW5kIHN0cmVhbSBkZSBnaXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwNgorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgInJlbW90ZS1jdXJsOiBmZXRjaCBpbnRlbnRhZG8gc2luIHVuIHJlcG9zaXRvcmlvIGxvY2FsIgorCisjOiByZW1vdGUtY3VybC5jOjE0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogY29tYW5kbyAnJXMnIGRlc2Nvbm9jaWRvIGRlIGdpdCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODUKK21zZ2lkICJhcmdzIgorbXNnc3RyICJhcmdzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgImZpbHRyYWRvIGRlIG9iamV0byIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJmZWNoYSBkZSBleHBpcmFjacOzbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE5NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAibm8tb3AgKGNvbXBhdGliaWxpZGFkIGNvbiB2ZXJzaW9uZXMgYW50ZXJpb3JlcykiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgInNlciBtw6FzIHZlcmJvc28iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICJzZXIgbcOhcyBkaXNjcmV0byIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJ1c2EgPG4+IGTDrWdpdG9zIHBhcmEgbW9zdHJhciBTSEEtMXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJjw7NtbyBxdWl0YXIgZXNwYWNpb3MgeSAjY29tZW50YXJpb3MgZGUgbWVuc2FqZXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzcKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAibGVlciBwYXRoc3BlYyBkZSBhcmNoaXZvIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisiY29uIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBlbGVtZW50b3MgZGUgcGF0aHNwZWMgc29uIHNlcGFyYWRvcyBjb24gY2FyYWN0ZXIgIgorIk5VTCIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImtleSIKK21zZ3N0ciAiY2xhdmUiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIm5vbWJyZSBkZWwgY2FtcG8gcG9yIGVsIGN1w6FsIG9yZGVuYXIiCisKKyM6IHJlcmVyZS5oOjQ0Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisiYWN0dWFsaXphciBlbCDDrW5kaWNlIGNvbiBsYSByZXNvbHVjacOzbiBkZSBjb25mbGljdG9zIHJldXRpbGl6YWRhIHNpIGVzICIKKyJwb3NpYmxlIgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGRlc2Fjb3BsYWRhIGVuICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIGRlc2Fjb3BsYWRhIGRlICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFncmVnYSBjb250ZW5pZG8gZGUgY2FycGV0YXMgYWwgw61uZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICJBcGxpY2FyIHVuYSBzZXJpZSBkZSBwYXJjaGVzIGRlIHVuIG1haWxib3giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUyCittc2dpZCAiQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQW5vdGFyIGzDrW5lYXMgZGUgYXJjaGl2byBjb24gaW5mb3JtYWNpw7NuIGRlIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTMKK21zZ2lkICJBcHBseSBhIHBhdGNoIHRvIGZpbGVzIGFuZC9vciB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFwbGljYXIgdW4gcGFyY2hlIGEgYXJjaGl2b3MgeS9vICBlbCDDrW5kaWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NAorbXNnaWQgIkltcG9ydCBhIEdOVSBBcmNoIHJlcG9zaXRvcnkgaW50byBHaXQiCittc2dzdHIgIkltcG9ydGFyIHVuIHJlcG9zaXRvcmlvIEdOVSBBcmNoIGVuIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAiQ3JlYXIgdW4gYXJjaGl2byBvIGFyY2hpdm9zIGRlIHVuIMOhcmJvbCBub21icmFkbyIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJVc2UgbGEgYsO6c3F1ZWRhIGJpbmFyaWEgcGFyYSBlbmNvbnRyYXIgZWwgY29tbWl0IHF1ZSBpbnRyb2R1am8gZWwgYnVnIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorIk1vc3RyYXIgcXXDqSByZXZpc2nDs24geSBhdXRvciBtb2RpZmljYXJvbiBhbCDDumx0aW1vIGNhZGEgbMOtbmVhIGRlIHVuIGFyY2hpdm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkxpc3RhLCBjcmVhLCBvIGJvcnJhIHJhbWFzIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICJNb3ZlciBvYmpldG9zIHkgcmVmZXJlbmNpYXMgcG9yIGFyY2hpdm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYwCittc2dpZCAiUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorIlByb3ZlZXIgY29udGVuaWRvIG8gdGlwbyB5IHRhbWHDsW8gZGUgaW5mb3JtYWNpw7NuIHBhcmEgb2JqZXRvcyBkZSByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgIk1vc3RyYXIgaW5mb3JtYWNpw7NuIGRlIGdpdGF0dHJpYnV0ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAiRGVidWcgYSBnaXRpZ25vcmUgLyBleGNsdWlyIGFyY2hpdm9zIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworbXNnaWQgIlNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMiCittc2dzdHIgIk1vc3RyYXIgbm9tYnJlcyBjYW7Ds25pY29zIHkgZGlyZWNjaW9uZXMgZGUgY29ycmVvIGRlIGNvbnRhY3RvcyIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIkNhbWJpYSByYW1hcyBvIHJlc3RhdXJhIGxvcyBhcmNoaXZvcyBkZSB0dSDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkNvcGlhciBhcmNoaXZvcyBkZWwgw61uZGljZSBhbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAiQXNlZ3VyYSBxdWUgdW4gbm9tYnJlIGRlIHJlZmVyZW5jaWEgZXN0w6kgYmllbiBmb3JtYWRvIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAiRW5jdWVudHJhIGNvbW1pdHMgcXVlIGZhbHRhbiBhcGxpY2FyIGVuIHVwc3RyZWFtIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJBcGxpY2EgbG9zIGNhbWJpb3MgaW50cm9kdWNpZG9zIHBvciBhbGd1bm9zIGNvbW1pdHMgZXhpc3RlbnRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiT3BjacOzbiBncsOhZmljYSBhIGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlJlbXVldmUgYXJjaGl2b3MgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIG5vIHJhc3RyZWFkb3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJDbG9uYSB1biByZXBvc2l0b3JpbyBkZW50cm8gZGUgdW4gbnVldm8gZGlyZWN0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAiTW9zdHJhciBkYXRhIGVuIGNvbHVtbmFzIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJHcmFiYSBsb3MgY2FtYmlvcyBlbiB0dSByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIkVzY3JpYmUgeSB2ZXJpZmljYSBsb3MgYXJjaGl2b3MgZGUgR2l0IGNvbW1pdC1ncmFwaCIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiQ3JlYSB1biBudWV2byBvYmpldG8gY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIkNvbmZpZ3VyYXIgcmVwb3NpdG9yaW8gdSBvcGNpb25lcyBnbG9iYWxlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAiQ29udGFyIG7Dum1lcm8gZGUgb2JqZXRvcyBubyBlbXBhcXVldGFkb3MgeSBzdSBjb25zdW1vIGVuIGRpc2NvIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICJPYnRlbmVyIHkgZ3VhcmRhciBjcmVkZW5jaWFsZXMgZGUgdXN1YXJpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiQXV4aWxpYXIgcGFyYSBhbG1hY2VuYXIgdGVtcG9yYWxtZW50ZSBjbGF2ZXMgZW4gbWVtb3JpYSIKKworIzogY29tbWFuZC1saXN0Lmg6ODAKK21zZ2lkICJIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzayIKK21zZ3N0ciAiQXV4aWxpYXIgcGFyYSBndWFyZGFyIGNyZWRlbmNpYWxlcyBlbiBkaXNjbyIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICJFeHBvcnRhIHVuIGNvbW1pdCDDum5pY28gYSBDVlMgY2hlY2tvdXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIlNhbHZhIHR1cyBkYXRvcyBkZSBvdHJvIFNDTSBxdWUgbGEgZ2VudGUgYWRvcmEgb2RpYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgzCittc2dpZCAiQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQiCittc2dzdHIgIlVuIHNlcnZpZG9yIGVtdWxhZG9yIGRlIENWUyBwYXJhIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJVbiBzZXJ2aWRvciByZWFsbWVudGUgc2ltcGxlIHBhcmEgcmVwb3NpdG9yaW9zIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiIgorIkRhciBhIHVuIG9iamV0byB1biBub21icmUgbGVnaWJsZSBwb3IgaHVtYW5vcyBiYXNhZG8gZW4gdW5hIHJlZmVyZW5jaWEgIgorImRpc3BvbmlibGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiTXVlc3RyYSBsb3MgY2FtYmlvcyBlbnRyZSBjb21taXRzLCBjb21taXQgeSDDoXJib2wgZGUgdHJhYmFqbywgZXRjIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NworbXNnaWQgIkNvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCIKK21zZ3N0ciAiQ29tcGFyYSBhcmNoaXZvcyBkZWwgw6FyYm9sIGRlIHRyYWJham8geSBkZWwgw61uZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJDb21wYXJhIHVuIMOhcmJvbCBjb24gZWwgw6FyYm9sIGRlIHRyYWJham8gbyDDrW5kaWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OQorbXNnaWQgIkNvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzIgorbXNnc3RyICIiCisiQ29tcGFyYSBlbCBjb250ZW5pZG8geSBlbCBtb2RvIGRlIGJsb2JzIGVuY29udHJhZG9zIGEgdHJhdsOpcyBkZSBkb3Mgb2JqZXRvcyAiCisiZGUgw6FyYm9sIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiTW9zdHJhciBjYW1iaW9zIHVzYW5kbyBoZXJyYW1pZW50YXMgZGUgZGlmZiBjb211bmVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICJFeHBvcnRhZG9yIGRlIGRhdGEgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MgorbXNnaWQgIkJhY2tlbmQgZm9yIGZhc3QgR2l0IGRhdGEgaW1wb3J0ZXJzIgorbXNnc3RyICJCYWNrZW5kIHBhcmEgaW1wb3J0YWRvcmVzIGRlIGRhdGEgZGUgR2l0IHLDoXBpZG9zIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkRlc2NhcmdhIG9iamV0b3MgeSByZWZlcmVuY2lhcyBkZSBvdHJvIHJlcG9zaXRvcmlvIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJEZXNjYXJnYSBvYmpldG9zIGZhbHRhbnRlcyBkZSBvdHJvIHJlcG9zaXRvcmlvIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIlJlZXNjcmliaXIgcmFtYXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJQcm9kdWNlIHVuIG1lbnNhamUgZGUgY29tbWl0IHBhcmEgZnVzacOzbiIKKworIzogY29tbWFuZC1saXN0Lmg6OTcKK21zZ2lkICJPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYiCittc2dzdHIgIkluZm9ybWFjacOzbiBkZSBvdXRwdXQgZW4gY2FkYSByZWYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAiUHJlcGFyYSBwYXJjaGVzIHBhcmEgc2VyIGVudmlhZG9zIHBvciBlLW1haWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICIiCisiVmVyaWZpY2EgbGEgY29uZWN0aXZpZGFkIHkgZGlzcG9uaWJpbGlkYWQgZGUgbG9zIG9iamV0b3MgZW4gbGEgYmFzZSBkZSBkYXRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTAwCittc2dpZCAiQ2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIkxpbXBpYSBhcmNoaXZvcyBpbm5lY2VzYXJpb3MgeSBvcHRpbWl6YSBlbCByZXBvc2l0b3JpbyBsb2NhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIkV4dHJhZSBlbCBJRCBkZSBjb21taXQgZGUgdW4gYXJjaGl2byBjcmVhZG8gdXNhbmRvIGdpdC1hcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkltcHJpbWUgbGFzIGzDrW5lYXMgcXVlIGNvbmN1ZXJkYW4gY29uIGVsIHBhdHJvbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiVW5hIGludGVyZmF6IGdyw6FmaWNhIHBvcnTDoXRpbCBwYXJhIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIkNvbXB1dGEgSUQgZGUgb2JqZXRvIHksIG9wY2lvbmFsbWVudGUsIGNyZWEgdW4gYmxvYiBkZSB1biBhcmNoaXZvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICJNb3N0cmFyIGluZm9ybWFjacOzbiBzb2JyZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIkltcGxlbWVudGFjacOzbiBkZSBsYWRvIGRlIHNlcnZpZG9yIGRlIEdpdCBwb3IgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAiRGVzY2FyZ2EgZGUgdW4gcmVwb3NpdG9yaW8gR2l0IHJlbW90byB2w61hIEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRW1wdWphIG9iamV0b3MgcG9yIEhUVFAvREFWIGEgb3RybyByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICJFbnZpYXIgdW5hIGNvbGVjY2nDs24gZGUgcGFyY2hlcyBkZSBzdGRpbiBhIHVuYSBjYXJwZXRhIElNQVAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIkNvbnN0dXllIHVuIGFyY2hpdm8gZGUgw61uZGljZSBwYXJhIHVuIGFyY2hpdm8gZW1wYXF1ZXRhZG8gZXhpc3RlbnRlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTEKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiQ3JlYSB1biByZXBvc2l0b3JpbyBkZSBHaXQgdmFjw61vIG8gcmVpbmljaWEgZWwgcXVlIHlhIGV4aXN0ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgIkJ1c2NhciBpbnN0YW50w6FuZWFtZW50ZSB0dSByZXBvc2l0b3JpbyBkZSB0cmFiYWpvIGVuIGdpdHdlYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICJBZ3JlZ2FyIG8gYW5hbGl6YXIgaW5mb3JtYWNpw7NuIGVzdHJ1Y3R1cmFkYSBlbiBtZW5zYWplcyBkZSBjb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICJFbCBuYXZlZ2Fkb3IgZGUgcmVwb3NpdG9yaW8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJNdWVzdHJhIGxvcyBsb2dzIGRlIGxvcyBjb21taXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTYKK21zZ2lkICJTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiTXVlc3RyYSBpbmZvcm1hY2nDs24gc29icmUgYXJjaGl2b3MgaW4gZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTGlzdGEgcmVmZXJlbmNpYXMgZW4gdW4gcmVwb3NpdG9yaW8gcmVtb3RvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICJMaXN0YSBsb3MgY29udGVuaWRvcyBkZSB1biBvYmpldG8gw6FyYm9sIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICJFeHRyYWVyIHBhcmNoZSB5IGF1dG9yw61hIGRlIHVuIMO6bmljbyBtZW5zYWplIGRlIGUtbWFpbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTIwCittc2dpZCAiU2ltcGxlIFVOSVggbWJveCBzcGxpdHRlciBwcm9ncmFtIgorbXNnc3RyICJQcm9ncmFtYSBkaXZpc29yIGRlIG1ib3ggc2ltcGxlIGRlIFVOSVgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJKdW50YSBkb3MgbyBtw6FzIGhpc3RvcmlhbGVzIGRlIGRlc2Fycm9sbG8ganVudG9zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjIKK21zZ2lkICJGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZSIKK21zZ3N0ciAiRW5jdWVudHJhIHVuIGFuY2VzdHJvIGNvbcO6biBidWVubyBwYXJhIHVuYSBwb3NpYmxlIGZ1c2nDs24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMworbXNnaWQgIlJ1biBhIHRocmVlLXdheSBmaWxlIG1lcmdlIgorbXNnc3RyICJFamVjdXRhIHVuYSBmdXNpw7NuIGRlIHRyZXMgdsOtYXMgZW4gdW4gYXJjaGl2byIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAiRWplY3V0YSB1bmEgZnVzacOzbiBwYXJhIGFyY2hpdm9zIHF1ZSBsYSBuZWNlc2l0YW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIkVsIHByb2dyYW1hIGRlIGF5dWRhIGVzdMOhbmRhciBwYXJhIHVzYXIgY29uIGdpdC1tZXJnZS1pbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgIiIKKyJFamVjdXRhIGxhcyBoZXJyYW1pZW50YXMgZGUgZnVzacOzbiBkZSByZXNvbHVjacOzbiBkZSBjb25mbGljdG9zIHBhcmEgcmVzb2x2ZXIgIgorImNvbmZsaWN0b3MgZGUgZnVzacOzbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiTW9zdHJhciBmdXNpw7NuIGRlIHRyZXMgdsOtYXMgc2luIHRvY2FyIGVsIMOtbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICJFc2NyaWJlIHkgdmVyaWZpY2EgYXJjaGl2b3MgbXVsdGktcGFjay1pbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIkNyZWEgdW4gb2JqZXRvIHRhZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIkNvbnN0cnVpciB1biBvYmpldG8gw6FyYm9sIGRlIHVuIHRleHRvIGVuIGZvcm1hdG8gbHMtdHJlZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJNdWV2ZSBvIGNhbWJpYSBlbCBub21icmUgYSBhcmNoaXZvcywgZGlyZWN0b3Jpb3MgbyBlbmxhY2VzIHNpbWLDs2xpY29zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICJFbmNvbnRyYXIgbm9tYnJlcyBzaW1iw7NsaWNvcyBwYXJhIHJldnMgZGFkb3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAiQWdyZWdhIG8gaW5zcGVjY2lvbmEgb2JqZXRvcyBub3RhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiSW1wb3J0YXIgZGVzZGUgeSBlbnZpYXIgYSByZXBvc2l0b3Jpb3MgUGVyZm9yY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgIkNyZWEgdW4gYXJjaGl2byBkZSBvYmpldG9zIGVtcGFxdWV0YWRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAiRW5jdWVudHJhIGFyY2hpdm9zIGVtcGFxdWV0YWRvcyBkZSBtYW5lcmEgcmVkdW5kYW50ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM3Cittc2dpZCAiUGFjayBoZWFkcyBhbmQgdGFncyBmb3IgZWZmaWNpZW50IHJlcG9zaXRvcnkgYWNjZXNzIgorbXNnc3RyICJFbXBhcXVldGEgaGVhZHMgeSB0YWdzIHBhcmEgdW4gYWNjZXNvIGVmaWNpZW50ZSBhbCByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisiUnV0aW5hcyBwYXJhIGF5dWRhciBhIGFuYWxpemFyIGxvcyBwYXLDoW1ldHJvcyBkZSBhY2Nlc28gZGVsIHJlcG9zaXRvcmlvICIKKyJyZW1vdG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICJDYWxjdWxhciBJRCDDum5pY28gcGFyYSB1biBwYXJjaGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiTGltcGlhIHRvZG9zIGxvcyBvYmpldG9zIG5vIGFsY2FuemFibGVzIGRlIGxhIGJhc2UgZGUgZGF0b3MgZGUgb2JqZXRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTQxCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICJSZW1vdmVyIG9iamV0b3MgZXh0cmEgcXVlIHlhIGVzdMOhbiBlbiBhcmNoaXZvcyBlbXBhcXVldGFkb3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiUmVhbGl6YSB1biBmZXRjaCBlIGludGVncmEgY29uIG90cm8gcmVwb3NpdG9yaW8gbyByYW1hIGxvY2FsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDMKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIkFjdHVhbGl6YSByZWZlcmVuY2lhcyByZW1vdGFzIGp1bnRvIGNvbiBzdXMgb2JqZXRvcyBhc29jaWFkb3MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiQXBsaWNhIHVuIHBhcmNoZSBxdWlsdCBlbiBsYSByYW1hIGFjdHVhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICJDb21wYXJhIGRvcyByYW5nb3MgZGUgY29tbWl0cyAocG9yIGVqZW1wbG8gZG9zIHZlcnNpb25zIGRlIHVuIGJyYW5jaCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIkxlZSBpbmZvcm1hY2nDs24gZGVsIMOhYm9sIGVuIGVsIMOtbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NworbXNnaWQgIlJlYXBwbHkgY29tbWl0cyBvbiB0b3Agb2YgYW5vdGhlciBiYXNlIHRpcCIKK21zZ3N0ciAiVnVlbHZlIGEgYXBsaWNhciBjb21taXRzIGVuIGxhIHB1bnRhIGRlIG90cmEgcmFtYSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ4Cittc2dpZCAiUmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJSZWNpYmlyIGxvIHF1ZSBlcyBlbXB1amFkbyBlbiBlbCByZXNwb3NpdG9yaW8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIkdlc3Rpb25hciBpbmZvcm1hY2nDs24gZGUgcmVmbG9nIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJHZXN0aW9uYSB1biBjb25qdW50byBkZSByZXBvc2l0b3Jpb3MgcmFzdHJlYWRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUxCittc2dpZCAiUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRW1wYXF1ZXRhciBvYmpldG9zIG5vIGVtcGFxdWV0YWRvcyBlbiB1biByZXBvc2l0b3JpbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgIkNyZWEsIGxpc3RhLCBib3JyYSByZWZlcmVuY2lhcyBwYXJhIHJlZW1wbGF6YXIgb2JqZXRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUzCittc2dpZCAiR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMiCittc2dzdHIgIkdlbmVyYSB1biByZXN1bWVuIGRlIGNhbWJpb3MgcGVuZGllbnRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAiUmV1dGlsaXphciBsYSByZXNvbHVjacOzbiByZWdpc3RyYWRhIGRlIGZ1c2lvbmVzIGNvbmZsaWN0aXZhcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU1Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIlJlaW5pY2lhIGVsIEhFQUQgYWN0dWFsIGEgdW4gZXN0YWRvIGVzcGVjaWZpY28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJSZXN0YXVyYXIgYXJjaGl2b3MgZGUgw6FyYm9sZXMgZGUgdHJhYmFqbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU3Cittc2dpZCAiUmV2ZXJ0IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAiUmV2aWVydGUgYWxndW5vcyBjb21taXRzIGV4aXN0ZW50ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiTGlzdGEgb2JqZXRvcyBjb21taXQgZW4gb3JkZW4gY3Jvbm9sw7NnaWNvIGludmVyc28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIlNlbGVjY2lvbmFyIHkgbWFzYWplYXIgbG9zIHBhcsOhbWV0cm9zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiQm9ycmEgYXJjaGl2b3MgZGVsIMOhcmJvbCBkZSB0cmFiYWpvIHkgZGVsIMOtbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzIgorbXNnc3RyICJFbnbDrWEgdW5hIGNvbGVjY2nDs24gZGUgcGFyY2hlcyBjb21vIGUtbWFpbHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MgorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkVtcHVqYXIgb2JqZXRvcyBwb3IgcHJvdG9jb2xvIEdpdCBhIG90cm8gcmVwb3NpdG9yaW8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIlNoZWxsIGRlIGluaWNpbyBkZSBzZXNpw7NuIHJlc3RyaW5naWRvIHBhcmEgYWNjZXNvIFNTSCBleGNsdXNpdm8gZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiUmVzdW1pciBsYSBzYWxpZGEgJ2dpdCBsb2cnIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiTXVlc3RyYSB2YXJpb3MgdGlwb3MgZGUgb2JqZXRvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAiTW9zdHJhciByYW1hcyB5IHN1cyBjb21taXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4IgorbXNnc3RyICJNb3N0cmFyIGVsIMOtbmRpY2UgZGUgYXJjaGl2byBlbXBhcXVldGFkbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTGlzdGFyIHJlZmVyZW5jaWFzIGVuIGVsIHJlcG9zaXRvcmlvIGxvY2FsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIkVsIGPDs2RpZ28gZGUgY29uZmlndXJhY2nDs24gaTE4biBkZSBHaXQgcGFyYSBzY3JpcHRzIGRlIHNoZWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzAKK21zZ2lkICJDb21tb24gR2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlIgorbXNnc3RyICJDw7NkaWdvIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIHNjcmlwdCBkZSBzaGVsbCBjb23Dum4gZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiSW5pY2lhbGl6YSB5IG1vZGlmaWNhIGVsIHNwYXJzZS1jaGVja291dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcyCittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICIiCisiUG9uZXIgZW4gdW4gc3Rhc2ggbG9zIGNhbWJpb3MgZW4gdW4gZGlyZWN0b3JpbyBkZSB0cmFiYWpvIHN1Y2lvIGRlIHRvZGFzICIKKyJtYW5lcmFzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzMKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICJBZ3JlZ2EgY29udGVuaWRvcyBkZSB1biBhcmNoaXZvIGFsIMOhcmVhIGRlIHN0YWdpbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIk11ZXN0cmEgZWwgZXN0YWRvIGRlbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiUmVtb3ZlIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UiCittc2dzdHIgIkVsaW1pbmFyIGVsIGVzcGFjaW8gZW4gYmxhbmNvIGlubmVjZXNhcmlvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICJJbmljaWFsaXphLCBhY3R1YWxpemEgbyBpbnNwZWNjaW9uYSBzdWJtw7NkdWxvcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICJPcGVyYWNpw7NuIGJpZGlyZWNjaW9uYWwgZW50cmUgdW4gcmVwb3NpdG9yaW8gU3VidmVyc2lvbiB5IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICJDYW1iaWFyIGJyYW5jaGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJMZWUsIG1vZGlmaWNhIHkgYm9ycmEgcmVmZXJlbmNpYXMgc2ltYsOzbGljYXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICJDcmVhLCBsaXN0YSwgYm9ycmEgbyB2ZXJpZmljYSB1biB0YWcgZGUgb2JqZXRvIGZpcm1hZG8gY29uIEdQRyIKKworIzogY29tbWFuZC1saXN0Lmg6MTgxCittc2dpZCAiQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBibG9iJ3MgY29udGVudHMiCittc2dzdHIgIkNyZWEgdW4gYXJjaGl2byB0ZW1wb3JhbCBjb24gY29udGVuaWRvcyBkZSB1biBibG9iIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODIKK21zZ2lkICJVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIkRlc2VtcGFxdWV0YSBvYmpldG9zIGRlIHVuIGFyY2hpdm8gZW1wYXF1ZXRhZG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MworbXNnaWQgIlJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgiCittc2dzdHIgIlJlZ2lzdHJhIGNvbnRlbmlkb3MgZGUgYXJjaGl2b3MgZW4gZWwgw6FyYm9sIGRlIHRyYWJham8gYWwgw61uZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg0Cittc2dpZCAiVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5IgorbXNnc3RyICIiCisiQWN0dWFsaXphIGVsIG5vbWJyZSBkZWwgb2JqZXRvIGFsbWFjZW5hZG8gZW4gdW5hIHJlZmVyZW5jaWEgZGUgZm9ybWEgc2VndXJhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODUKK21zZ2lkICJVcGRhdGUgYXV4aWxpYXJ5IGluZm8gZmlsZSB0byBoZWxwIGR1bWIgc2VydmVycyIKK21zZ3N0ciAiIgorIkFjdHVhbGl6YSBlbCBhcmNoaXZvIGRlIGluZm9ybWFjacOzbiBhdXhpbGlhciBwYXJhIGF5dWRhciBhIGxvcyBzZXJ2aWRvcmVzICIKKyJkdW1iIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiRW52aWFyIGFyY2hpdm8gYSBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICJFbnZpYXIgb2JqZXRvcyBlbXBhcXVldGFkb3MgYSBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJNb3N0cmFyIHVuYSB2YXJpYWJsZSBsw7NnaWNhIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAiVmVyaWZpY2FyIGZpcm1hIEdQRyBkZSBjb21taXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTAKK21zZ2lkICJWYWxpZGF0ZSBwYWNrZWQgR2l0IGFyY2hpdmUgZmlsZXMiCittc2dzdHIgIlZhbGlkYSBhcmNoaXZvcyBHaXQgZW1wYXF1ZXRhZG9zIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICJWZXJpZmljYSBsYSBmaXJtYSBHUEcgZGUgZXRpcXVldGFzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICJJbnRlcmZheiB3ZWIgR2l0IChpbnRlcmZheiB3ZWIgcGFyYSByZXBvc2l0b3Jpb3MgR2l0KSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICJNdWVzdHJhIGxvZ3MgY29uIGxhcyBkaWZlcmVuY2lhcyBxdWUgY2FkYSBjb21taXQgaW50cm9kdWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiR2VzdGlvbmEgbcO6bHRpcGxlcyDDoXJib2xlcyBkZSB0cmFiYWpvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJDcmVhIHVuIG9iamV0byDDoXJib2wgZGVsIMOtbmRpY2UgYWN0dWFsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTYKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICJEZWZpbmllbmRvIGF0cmlidXRvcyBwb3IgcnV0YSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJJbnRlcmZheiB5IGNvbnZlbmNpb25lcyBkZSBsw61uZWEgZGUgY29tYW5kb3MgZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTgKK21zZ2lkICJBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzIgorbXNnc3RyICJVbiB0dXRvcmlhbCBiw6FzaWNvIGRlIEdpdCBwYXJhIGRlc2Fycm9sbGFkb3JlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk5Cittc2dpZCAiR2l0IGZvciBDVlMgdXNlcnMiCittc2dzdHIgIkdpdCBwYXJhIHVzdWFyaW9zIENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIkFmaW5hciBsYSBzYWxpZGEgZGUgZGlmZiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAiVW4gY29uanVudG8gbcOtbmltbyDDunRpbCBkZSBjb21hbmRvcyBkaWFyaW9zIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiQSBHaXQgR2xvc3NhcnkiCittc2dzdHIgIlVuIEdsb3NhcmlvIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAzCittc2dpZCAiSG9va3MgdXNlZCBieSBHaXQiCittc2dzdHIgIkhvb2tzIHV0aWxpemFkb3MgcG9yIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiRXNwZWNpZmljYSBkZSBmb3JtYSBpbnRlbmNpb25hbCBhcmNoaXZvcyBzaW4gc2VndWltaWVudG8gYSBpZ25vcmFyIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiRGVmaW5pZW5kbyBsYXMgcHJvcGllZGFkZXMgZGVsIHN1Ym3Ds2R1bG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICJOYW1lc3BhY2VzIGRlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJEaXNwb3NpY2nDs24gZGVsIHJlcG9zaXRvcmlvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA4Cittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICJFc3BlY2lmaWNhbmRvIHJldmlzaW9uZXMgeSByYW5nb3MgcGFyYSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOQorbXNnaWQgIk1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyIgorbXNnc3RyICJNb250YW5kbyB1biByZXBvc2l0b3JpbyBkZW50cm8gZGUgb3RybyIKKworIzogY29tbWFuZC1saXN0Lmg6MjEwCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0OiBwYXJ0IHR3byIKK21zZ3N0ciAiVW4gdHV0b3JpYWwgZGUgaW50cm9kdWNjacOzbiBhIEdpdDogcGFydGUgZG9zIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgIlVuIHR1dG9yaWFsIGRlIGludHJvZHVjY2nDs24gcGFyYSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMgorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiVW5hIHZpc2nDs24gZ2VuZXJhbCBkZSBmbHVqb3MgZGUgdHJhYmFqbyByZWNvbWVuZGFkb3MgY29uIEdpdCIKKworIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJEZWJlcyBpbmljaWFyIGNvbiBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjYwCittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICLCv1F1aWVyZXMgcXVlIGxvIGhhZ2EgcG9yIHRpIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJNYWxhIGVudHJhZGEgcmV2OiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIk1hbGEgZW50cmFkYSByZXY6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiTWFsYSBlbnRyYWRhIHJldjogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIHNvbG8gcHVlZGUgdG9tYXIgdW4gYXJndW1lbnRvLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJOaW5nw7puIGxvZ2ZpbGUgcHJvcG9yY2lvbmFkbyIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgIm5vIHNlIHB1ZWRlIGxlZXIgJGZpbGUgcGFyYSByZXByb2R1Y2lyIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gwr9EZSBxdcOpIGVzdMOhcyBoYWJsYW5kbz8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQxCittc2dpZCAiYmlzZWN0IHJ1biBmYWlsZWQ6IG5vIGNvbW1hbmQgcHJvdmlkZWQuIgorbXNnc3RyICJiaXNlY3QgZmFsbMOzOiBubyBzZSBwcm92ZXnDsyBjb21hbmRvLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgImVqZWN1dGFuZG8gJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyJiaXNlY3QgZmFsbMOzOlxuIgorImPDs2RpZ28gZGUgc2FsaWRhICRyZXMgZGUgJyRjb21tYW5kJyBlcyA8MCBvID49MTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJiaXNlY3Qgbm8gcHVlZGUgc2VndWlyIGNvbnRpbnVhbmRvIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJiaXNlY3QgZmFsbMOzOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBzYWxpw7MgY29uIGPDs2RpZ28gZGUgZXJyb3IgJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTIKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgImJpc2VjdCBleGl0b3NvIgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiTm8gZXN0YW1vcyBiaXNlY2FuZG8uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiRXJyb3I6IFR1cyBjYW1iaW9zIGxvY2FsZXMgZGUgbG9zIHNpZ3VpZW50ZXMgYXJjaGl2b3Mgc2Vyw6FuIHNvYnJlc2NyaXRvcyBwb3IgIgorImxhIGZ1c2nDs24iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkZ1c2nDs24gYXV0b21hdGl6YWRhIG5vIGZ1bmNpb27Dsy4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYyCittc2dpZCAiU2hvdWxkIG5vdCBiZSBkb2luZyBhbiBvY3RvcHVzLiIKK21zZ3N0ciAiTm8gZGViZXLDrWEgaGFjZXIgdW4gcHVscG8uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSBlbmNvbnRyYXIgY29tbWl0IGNvbcO6biBjb24gJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJZYSBhY3R1YWxpemFkbyBjb24gJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgIlJlYWxpemFuZG8gZmFzdC1mb3J3YXJkIGE6ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIkludGVudGFuZG8gZnVzacOzbiBzaW1wbGUgY29uICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgIkZ1c2nDs24gc2ltcGxlIG5vIGZ1bmNpb27DsywgaW50ZW50YW5kbyBmdXNpw7NuIGF1dG9tw6F0aWNhLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZWxpbWluYXIgZWwgw61uZGljZSB0ZW1wb3JhbCAobm8gcHVlZGUgc3VjZWRlcikiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIk5vIHNlIHB1ZWRlIGFjdHVhbGl6YXIgJHJlZl9zdGFzaCBjb24gJHdfY29tbWl0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgImVycm9yOiBvcGNpw7NuIGRlc2Nvbm9jaWRhIHBhcmEgJ3N0YXNoIHB1cyc6ICRvcHRpb24iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAiRGlyZWN0b3JpbyBkZSB0cmFiYWpvIGd1YXJkYWRvIHkgZXN0YWRvIGRlIMOtbmRpY2UgJHN0YXNoX21zZyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJvcGNpw7NuIGRlc2Nvbm9jaWRhOiAkb3B0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiU2UgZXNwZWNpZmljYXJvbiBkZW1hc2lhZGFzIHJldmlzaW9uZXM6ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBubyBlcyB1bmEgcmVmZXJlbmNpYSB2w6FsaWRhIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBubyBlcyB1biBjb21taXQgZXN0aWxvIHN0YXNoIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIickYXJncycgbm8gZXMgdW5hIHJlZmVyZW5jaWEgc3Rhc2giCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImluY2FwYXogZGUgcmVmcmVzY2FyIGVsIMOtbmRpY2UiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjIyCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJObyBzZSBwdWVkZSBhcGxpY2FyIHVuIHN0YXNoIGVuIG1lZGlvIGRlIHVuYSBmdXNpw7NuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIkNvbmZsaWN0b3MgZW4gw61uZGljZS4gSW50ZW50ZSBzaW4gLS1pbmRleC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZ3VhcmRhciBlbCDDrW5kaWNlIGRlbCDDoXJib2wiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIk5vIHNlIHB1ZWRlbiByZXN0YXVyYXIgYXJjaGl2b3Mgbm8gcmFzdHJlYWRvcyBkZSBsYSBlbnRyYWRhIHN0YXNoIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY2NgorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICJObyBzZSBwdWVkZSBzYWNhciBkZSBzdGFnZSBhcmNoaXZvcyBtb2RpZmljYWRvcyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIkJvdGFkbyAke1JFVn0gKCRzKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogTm8gc2UgcHVkbyBib3JyYXIgZW50cmFkYSBzdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihQYXJhIHJlc3RhdXJhcmxvcywgZXNjcmliZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDIKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkxhIHJ1dGEgcmVsYXRpdmEgc8OzbG8gc2UgcHVlZGUgdXNhciBkZXNkZSBlbCBuaXZlbCBzdXBlcmlvciBkZWwgw6FyYm9sIGRlICIKKyJ0cmFiYWpvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMgorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAicmVwbyBVUkw6ICckcmVwbycgZGViZSBzZXIgYWJzb2x1dGEgbyBpbmljaWFyIGNvbiAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiJyRzbV9wYXRoJyB5YSBleGlzdGUgZW4gZWwgw61uZGljZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIickc21fcGF0aCcgeWEgZXhpc3RlIGVuIGVsIMOtbmRpY2UgeSBubyBlcyB1biBzdWJtw7NkdWxvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICInJHNtX3BhdGgnIG5vIHRpZW5lIHVuIGNvbW1pdCBjaGVja2VkIG91dCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiTGEgc2lndWllbnRlIHJ1dGEgZXMgaWdub3JhZGEgcG9yIHVubyBkZSB0dXMgYXJjaGl2b3MgLmdpdGlnbm9yZTpcbiIKKyIkc21fcGF0aFxuIgorIlVzYSAtZiBzaSBlbiB2ZXJkYWQgcXVpZXJlcyBhZ3JlZ2FybG8uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFncmVnYW5kbyBlbCByZXBvc2l0b3JpbyBleGlzdGVudGUgZW4gJyRzbV9wYXRoJyBhbCDDrW5kaWNlIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcgeWEgZXhpc3RlIHkgbm8gZXMgdW4gcmVwb3NpdG9yaW8gZ2l0IHbDoWxpZG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKyJTZSBlbmNvbnRyw7MgbG9jYWxtZW50ZSB1biBkaXJlY3RvcmlvIGdpdCBwYXJhICckc21fbmFtZScgY29uIGVsKGxvcykgIgorInJlbW90byhzKToiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCAiCisicmVwb1xuIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisiU2kgcXVpZXJlIHJldXNhciBlc3RlIGRpcmVjdG9yaW8gZ2l0IGxvY2FsIGVuIGx1Z2FyIGRlIGNsb25hciBudWV2YW1lbnRlIGRlXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2EgbGEgb3BjacOzbiAnLS1mb3JjZScuIFNpIGVsIGRpcmVjdG9yaW8gZ2l0IGxvY2FsIG5vIGVzIGVsIHJlcG9zaXRvcmlvICIKKyJjb3JyZWN0b1xuIgorIm8gbm8gZXN0w6FzIHNlZ3VybyBkZSBsbyBxdWUgZXN0byBzaWduaWZpY2EsIGVzY29nZSBvdHJvIG5vbWJyZSBjb24gbGEgb3BjacOzbiAiCisiJy0tbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiUmVhY3RpdmFyIGRpcmVjdG9yaW8gZ2l0IGxvY2FsIHBhcmEgZWwgc3VibcOzZHVsbyAnJHNtX25hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSBoYWNlciBjaGVja291dCBhbCBzdWJtw7NkdWxvICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJGYWxsw7MgYWwgYWdyZWdhciBlbCBzdWJtw7NkdWxvICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkZhbGzDsyBhbCByZWdpc3RyYXIgZWwgc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gZW5jb250cmFyIGxhIHJldmlzacOzbiBhY3R1YWwgZW4gbGEgcnV0YSBkZSBzdWJtw7NkdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIHJlYWxpemFyIGZldGNoIGVuIGxhIHJ1dGEgZGUgc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisiTm8gZXMgcG9zaWJsZSBlbmNvbnRyYXIgcmV2aXNpw7NuIGFjdHVhbCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gZW4gbGEgcnV0YSAiCisiZGUgc3VibcOzZHVsbyAgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc7IHRyeWluZyB0byBkaXJlY3RseSBmZXRjaCAiCisiJHNoYTE6IgorbXNnc3RyICIiCisiTm8gZXMgcG9zaWJsZSByZWFsaXphciBmZXRjaCBlbiBsYSBydXRhIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCc7ICIKKyJpbnRlbnRhbmRvIGhhY2VyIHVuIGZldGNoIGRpcmVjdG8gJHNoYTE6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorIkZldGNoIHJlYWxpemFkbyBlbiBydXRhIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCcsIHBlcm8gbm8gY29udGVuw61hICRzaGExLiAiCisiRmV0Y2ggZGlyZWN0byBkZWwgY29tbWl0IGZhbGzDsy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTm8gZXMgcG9zaWJsZSByZXZpc2FyICckc2hhMScgZW4gbGEgcnV0YSBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIlJ1dGEgZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJzogY2hlY2sgb3V0IHJlYWxpemFkbyBhICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJObyBzZSBwb3NpYmxlIGVqZWN1dGFyIHJlYmFzZSBhICckc2hhMScgZW4gbGEgcnV0YSBkZSBzdWJtw7NkdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiUnV0YSBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnOiByZWJhc2FkYSBlbiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkluY2FwYXogZGUgZnVzaW9uYXIgJyRzaGExJyBlbiBsYSBydXRhIGRlbCBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzOAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJSdXRhIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCc6IGZ1c2lvbmFkYSBlbiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiRmFsbMOzIGxhIGVqZWN1Y2nDs24gIGRlICAnJGNvbW1hbmQgJHNoYTEnIGVuIGxhIHJ1dGEgZGUgc3VibcOzZHVsbyAiCisiJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAiUnV0YSBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiRmFsbMOzIGFsIHJlY3VycmlyIGVuIGxhIHJ1dGEgZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4ODYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICJMYSBvcGNpw7NuIC0tY2FjaGVkIG5vIHB1ZWRlIHNlciB1c2FkYSBjb24gbGEgb3BjacOzbiAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkzOAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJtb2RvICRtb2RfZHN0IGluZXNwZXJhZG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAgQWR2ZXJ0ZW5jaWE6ICRkaXNwbGF5X25hbWUgbm8gY29udGllbmUgZWwgY29tbWl0ICRzaGExX3NyYyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBBZHZlcnRlbmNpYTogJGRpc3BsYXlfbmFtZSBubyBjb250aWVuZSBlbCBjb21taXQgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICBBZHZlcnRlbmNpYTogJGRpc3BsYXlfbmFtZSBubyBjb250aWVuZSBsb3MgY29tbWl0cyAkc2hhMV9zcmMgeSAkc2hhMV9kc3QiCisKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiVsOpYXNlIGdpdC0ke2NtZH0oMSkgcGFyYSBtw6FzIGRldGFsbGVzLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwOQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiQXV0b3N0YXNoIGFwbGljYWRvLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICJObyBzZSBwdWVkZSBhbG1hY2VuYXIgJHN0YXNoX3NoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgIlJlYmFzYW5kbyAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkNvbWFuZG9zOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2FyIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzYXIgY29tbWl0LCBwZXJvIGVkaXRhciBlbCBtZW5zYWplIGRlIGNvbW1pdFxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2FyIGNvbW1pdCwgcGVybyBwYXJhciBwYXJhIHVuIGFtZW5kXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNhciBjb21taXQsIHBlcm8gZnVzaW9uYXJsbyBlbiBlbCBjb21taXQgcHJldmlvXG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBjb21vIFwic3F1YXNoXCIsIHBlcm8gZGVzY2FydGEgZWwgbWVuc2FqZSBkZWwgbG9nIGRlICIKKyJlc3RlIGNvbW1pdFxuIgorIngsIGV4ZWMgPGNvbW1pdD4gPSBlamVjdXRhIGNvbWFuZG8gKCBlbCByZXN0byBkZSBsYSBsw61uZWEpIHVzYW5kbyB1biBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSBlbGltaW5hciBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gcG9uZXIgbGFiZWwgYWwgSEVBRCBhY3R1YWwgY29uIHVuIG5vbWJyZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZWluaWNpYXIgSEVBRCBhIGVsIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYSB1biBjb21taXQgZGUgZnVzacOzbiB1c2FuZG8gZWwgbWVuc2FqZSBvcmlnaW5hbCBkZVxuIgorIi4gICAgICAgZnVzacOzbiAobyBsYSBsw61uZWEgZGUgb25lbGluZSwgc2kgbm8gc2UgZXNwZWNpZmljYSB1biBtZW5zYWplXG4iCisiLiAgICAgICBkZSBjb21taXQpLiBVc2UgLWMgPGNvbW1pdD4gcGFyYSByZWVzY3JpYmlyIGVsIG1lbnNhamUgZGVsIGNvbW1pdC5cbiIKKyJcbiIKKyJFc3RhcyBsw61uZWFzIHB1ZWRlbiBzZXIgcmVvcmRlbmFkYXM7IHNvbiBlamVjdXRhZGFzIGRlc2RlIGFycmliYSBoYWNpYSAiCisiYWJham8uXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIlB1ZWRlcyBlbm1lbmRhciBlbCBjb21taXQgYWhvcmEsIGNvblxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiVW5hIHZleiBxdWUgZXN0w6lzIHNhdGlzZmVjaG8gY29uIGxvcyBjYW1iaW9zLCBlamVjdXRhXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMTogbm8gZXMgdW4gY29tbWl0IHF1ZSBwdWVkYSBzZXIgY29naWRvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAiTm9tYnJlIGRlIGNvbW1pdCBpbnbDoWxpZG86ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzY0Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZXNjcmliaXIgZWwgcmVtcGxhem8gc2hhMSBkZWwgY29tbWl0IGFjdHVhbCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJBdmFuY2UgcsOhcGlkbyBhICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJObyBzZSBwdWVkZSByZWFsaXphciBhdmFuY2UgcsOhcGlkbyBhICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIk5vIHNlIHB1ZWRlIG1vdmVyIEhFQUQgYSAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIlJlaHVzYW5kbyBhIGVqZWN1dGFyIHNxdWFzaCBlbiBmdXNpw7NuOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAiRXJyb3IgcmVoYWNpZW5kbyBmdXNpw7NuICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjb2dlciAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICJFc3RlIGVzIGVsIG1lbnNhamUgZGVsIGNvbW1pdCAjJHtufToiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJFbCBtZW5zYWplIGRlbCBjb21taXQgICMke259IHNlcsOhIGlnbm9yYWRvOiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICJFc3RhIGVzIHVuYSBjb21iaW5hY2nDs24gZGUgJGNvdW50IGNvbW1pdC4iCittc2dzdHJbMV0gIkVzdGEgZXMgbGEgY29tYmluYWNpw7NuIGRlICRjb3VudCBjb21taXRzLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIk5vIHNlIHB1ZWRlIGVzY3JpYmlyICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiRXN0byBlcyB1bmEgY29tYmluYWNpw7NuIGRlIDIgY29tbWl0cy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3OQorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICJObyBzZSBwdWVkZSBhcGxpY2FyICRzaGExLi4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisiTm8gc2UgcHVkbyBjb3JyZWdpciBjb21taXQgZGVzcHXDqXMgZGUgc2VsZWNjaW9uYXIgZXhpdG9zYW1lbnRlICRzaGExIC4uLiAiCisiJHJlc3RcbiIKKyJFc3RvIGVzIHByb2JhYmxlbWVudGUgZGViaWRvIGEgdW4gbWVuc2FqZSBkZSBjb21taXQgdmFjw61vLCBvIGVsIGhvb2sgcHJlLSIKKyJjb21taXRcbiIKKyJoYSBmYWxsYWRvLiBTaSBlbCBob29rIHByZS1jb21taXQgZmFsbMOzLCBlcyBwb3NpYmxlIHF1ZSBkZWJhcyByZXNvbHZlciBlbCAiCisicHJvYmxlbWEgYW50ZXNcbiIKKyJkZSBxdWUgc2VhIGNhcGF6IGRlIHJlZm9ybXVsYXIgZWwgY29tbWl0LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIkRldGVuaWRvIGVuICRzaGExX2FiYnJldi4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJObyBzZSBwdWVkZSAnJHNxdWFzaF9zdHlsZScgc2luIHVuIGNvbW1pdCBwcmV2aW8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZzogJHJlc3QiCittc2dzdHIgIkVqZWN1dGFuZG86ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAiRWplY3VjacOzbiBmYWxsaWRhOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJ5IGhpem8gY2FtYmlvcyBhbCDDrW5kaWNlIHkvbyBhbCDDoXJib2wgZGUgdHJhYmFqbyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5NQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJQdWVkZXMgY29ycmVnaXIgZWwgcHJvYmxlbWEgeSBlbnRvbmNlcyBlamVjdXRhclxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0XG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIkxhIGVqZWN1Y2nDs24gdHV2byDDqXhpdG86ICRyZXN0XG4iCisiUGVybyBkZWrDsyBjYW1iaW9zIGVuIGVsIMOtbmRpY2UgeS9vIGVuIGVsIMOhcmJvbCBkZSB0cmFiYWpvXG4iCisiUmVhbGl6YSB1biBjb21taXQgbyBzdGFzaCBjb24gbG9zIGNhbWJpb3MgeSwgYSBjb250aW51YWNpw7NuLCBlamVjdXRhXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIkNvbWFuZG8gZGVzY29ub2NpZG86ICRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIlBvciBmYXZvciwgY29ycmlnZSBlc3RvIHVzYW5kbyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCAkaGVhZF9uYW1lLiIKK21zZ3N0ciAiJGhlYWRfbmFtZSByZWJhc2FkbyB5IGFjdHVhbGl6YWRvIHNhdGlzZmFjdG9yaWFtZW50ZS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTIKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIk5vIHNlIHB1ZG8gZWxpbWluYXIgQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIlRpZW5lcyBjYW1iaW9zIGVuIGVsIMOhcmVhIGRlIHN0YWdlIGRlIHR1IMOhcmJvbCBkZSB0cmFiYWpvLlxuIgorIlNpIGVzdG9zIGNhbWJpb3MgZXN0w6FuIGRlc3RpbmFkb3MgYSBcbiIKKyJzZXIgYXBsYXN0YWRvcyBlbiBlbCBjb21taXQgcHJldmlvLCBlamVjdXRhOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiU2kgZXN0b3MgZXN0w6FuIGRlc3RpbmFkb3MgYSBpciBlbiB1biBudWV2byBjb21taXQsIGVqZWN1dGE6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiRW4gYW1ib3MgY2Fzb3MsIGN1YW5kbyB0ZXJtaW5lcywgY29udGludWUgY29uOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiIgorIkVycm9yIHRyYXRhbmRvIGRlIGVuY29udHJhciBsYSBpZGVudGlkYWQgZGVsIGF1dG9yIHBhcmEgcmVtZWRpYXIgZWwgY29tbWl0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJUaWVuZXMgY2FtYmlvcyBzaW4gY29uZmlybWFyIGVuIHR1IMOhcmJvbCBkZSB0cmFiYWpvLiBQb3IgZmF2b3IsIGNvbmbDrXJtYWxvc1xuIgorInByaW1lcm8geSBlbnRvbmNlcyBlamVjdXRhICdnaXQgcmViYXNlIC0tY29udGludWUnIGRlIG51ZXZvLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ4Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIk5vIHNlIHB1ZG8gcmVhbGl6YXIgZWwgY29tbWl0IGNvbiBsb3MgY2FtYmlvcyBlbiBlbCDDoXJlYSBkZSBzdGFnZS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAiTm8gc2UgcHVkbyBlamVjdXRhciBlbCBlZGl0b3IiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjaGVja291dCAkc3dpdGNoX3RvIgorbXNnc3RyICJObyBzZSBwdWRvIGFjdHVhbGl6YXIgZWwgw6FyYm9sIGRlIHRyYWJham8gYSAkc3dpdGNoX3RvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA3Cittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIsK/U2luIEhFQUQ/IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICJObyBzZSBwdWRvIGNyZWFyICRzdGF0ZV9kaXIgdGVtcG9yYWxtZW50ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMQorbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJObyBzZSBwdWRvIG1hcmNhciBjb21vIGludGVyYWN0aXZvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIGVuICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tYW5kbykiCittc2dzdHJbMV0gIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgZW4gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21hbmRvcykiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5OTcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwMDIKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgaW5pY2lhbGl6YXIgbG9zIGNvbW1pdHMgcmVlc2NyaXRvcyIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgInVzbzogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGFwbGljYXIgY2hkaXIgYSAkY2R1cCwgZWwgbml2ZWwgbcOheGltbyBkZWwgw6FyYm9sIGRlIHRyYWJham8iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIG5vIHB1ZWRlIHNlciB1c2FkbyBzaW4gdW4gw6FyYm9sIGRlIHRyYWJham8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBhcGxpY2FyIHJlYmFzZTogVGllbmVzIGNhbWJpb3MgcXVlIG5vIGVzdMOhbiBlbiBlbCDDoXJlYSBkZSBzdGFnZS4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSByZWVzY3JpYmlyIGxhcyByYW1hczogVGllbmVzIGNhbWJpb3MgcXVlIG5vIGVzdMOhbiBlbiBlbCDDoXJlYSBkZSAiCisic3RhZ2UuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgYXBsaWNhciBwdWxsIGNvbiByZWJhc2U6IFRpZW5lcyBjYW1iaW9zIHF1ZSBubyBlc3TDoW4gZW4gZWwgw6FyZWEgIgorImRlIHN0YWdlLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJObyBzZSBwdWVkZSAkYWN0aW9uOiBUaWVuZXMgY2FtYmlvcyBxdWUgbm8gZXN0w6FuIGVuIGVsIMOhcmVhIGRlIHN0YWdlLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MworbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBoYWNlciByZWJhc2U6IFR1IMOtbmRpY2UgY29udGllbmUgY2FtYmlvcyBxdWUgbm8gZXN0w6FuIGVuIHVuICIKKyJjb21taXQuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBoYWNlciBwdWxsIGNvbiByZWJhc2U6IFR1IMOtbmRpY2UgY29udGllbmUgY2FtYmlvcyBxdWUgbm8gZXN0w6FuICIKKyJlbiB1biBjb21taXQuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgJGFjdGlvbjogRWwgw61uZGljZSBjb250aWVuZSBjYW1iaW9zIHNpbiBjb25maXJtYXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjUzCittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICJBZGljaW9uYWxtZW50ZSwgdHUgw61uZGljZSBjb250aWVuZSBjYW1iaW9zIHF1ZSBubyBlc3TDoW4gZW4gdW4gY29tbWl0LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MworbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKyJOZWNlc2l0YXMgZWplY3V0YXIgZXN0ZSBjb21hbmRvIGRlc2RlIGVsIG5pdmVsIHN1cGVyaW9yIGRlIHR1IMOhcmJvbCBkZSAiCisidHJhYmFqby4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzgKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiSW5jYXBheiBkZSBkZXRlcm1pbmFyIGxhIHJ1dGEgYWJzb2x1dGEgZGVsIGRpcmVjdG9yaW8gZ2l0IgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTEycyAlMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ0b3VjaGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidG91Y2hlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJ0b3VjaCBoZWNobyBhICVkIHJ1dGFcbiIKK21zZ3N0clsxXSAidG91Y2ggaGVjaG8gYSAlZCBydXRhc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTMKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnc3RyICIiCisiU2kgZWwgcGFyY2hlIGFwbGljYSBsaW1waWFtZW50ZSwgZWwgaHVuayBlZGl0YWRvIHNlcmEgbWFyY2Fkb1xuIgorImlubWVkaWF0YW1lbnRlIHBhcmEgZWwgw6FyZWEgZGUgc3RhZ2UuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTYKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YXNoaW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBhcmNoZSBhcGxpY2EgbGltcGlhbWVudGUsIGVsIGh1bmsgZWRpdGFkbyBzZXJhIG1hcmNhZG9cbiIKKyJpbm1lZGlhdGFtZW50ZSBwYXJhIGFwbGljYXIgc3Rhc2guIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTaSBlbCBwYXJjaGUgYXBsaWNhIGxpbXBpYW1lbnRlLCBlbCBodW5rIGVkaXRhZG8gc2VyYSBtYXJjYWRvXG4iCisiaW5tZWRpYXRhbWVudGUgcGFyYSBzYWNhciBkZWwgw6FyZWEgZGUgc3RhZ2UuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDcxCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAiIgorIlNpIGVsIHBhcmNoZSBhcGxpY2EgZGUgZm9ybWEgbGltcGlhLCBlbCBodW5rIGVkaXRhZG8gc2VyYSBtYXJjYWRvIFxuIgorImlubWVkaWF0YW1lbnRlIHBhcmEgYXBsaWNhci4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKyJTaSBlbCBwYXJjaGUgYXBsaWNhIGRlIGZvcm1hIGxpbXBpYSwgZWwgaHVuayBlZGl0YWRvIHNlcmEgbWFyY2Fkb1xuIgorImlubWVkaWF0YW1lbnRlIHBhcmEgZGVzY2FydGUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICJmYWxsw7MgYWwgYWJyaXIgZWwgYXJjaGl2byBkZSBhZGljacOzbiBkZWwgaHVuayBwYXJhIGVzY3JpdHVyYTogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIlBhcmEgZWxpbWluYXIgJyVzJyBsw61uZWFzLCBoYWdhIGRlIGVsbGFzIGzDrW5lYXMgICcgJyAgKGNvbnRleHRvKS5cbiIKKyJQYXJhIGVsaW1pbmFyICclcycgbMOtbmVhcywgYsOzcnJlbGFzLlxuIgorIkxpbmVhcyBjb21lbnphbmRvIGNvbiAgJXMgc2Vyw6FuIGVsaW1pbmFkYXMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgImZhbGzDsyBhbCBhYnJpciBlbCBhcmNoaXZvIGRlIGVkaWNpw7NuIGRlbCBodW5rIHBhcmEgbGVjdHVyYTogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI0OAorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rXG4iCisibiAtIG5vIGFwbGljYXIgc3RhZ2UgYSBlc3RlIGh1bmtcbiIKKyJxIC0gcXVpdDsgbm8gYXBsaWNhciBzdGFnZSBhIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHJlc3RhbnRlc1xuIgorImEgLSBhcGxpY2FyIHN0YWdlIGEgZXN0ZSBodW5rIHkgYSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2byBcbiIKKyJkIC0gbm8gYXBsaWNhciBzdGFnZSBhIGVzdGUgaHVuayBvIGEgbmluZ3VubyBkZSBsb3MgcG9zdGVyaW9yZXMgZW4gZXN0ZSAiCisiYXJjaGl2byIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU0Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgc3Rhc2ggYSBlc3RlIGh1bmtcbiIKKyJuIC0gbm8gYXBsaWNhciBzdGFzaCBhIGVzdGUgaHVua1xuIgorInEgLSBxdWl0OyBubyBhcGxpY2FyIHN0YXNoIGEgZXN0ZSBodW5rIG8gYSBuaW5ndW5vIGRlIGxvcyByZXN0YW50ZXNcbiIKKyJhIC0gYXBsaWNhciBzdGFzaCBhIGVzdGUgaHVuayB5IGEgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm9cbiIKKyJkIC0gbm8gYXBsaWNhciBzdGFzaCBhIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2MAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gc2FjYXIgZGVzZGUgaHVuayBkZWwgw6FyZWEgZGUgc3RhZ2VcbiIKKyJuIC0gbm8gc2FjYXIgZXN0ZSBodW5rIGRlbCBhcmVhIGRlIHN0YWdlXG4iCisicSAtIHF1aXQ7IG5vIHNhY2FyIGRlbCBhcmVhIGRlIHN0YWdlIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHJlc3RhbnRlc1xuIgorImEgLSBzYWNhciBkZWwgYXJlYSBkZSBzdGFnZSBlc3RlIGh1bmsgeSB0b2RvcyBsb3MgcG9zdGVyaW9yZXMgZW4gZWwgYXJjaGl2b1xuIgorImQgLSBubyBzYWNhciBkZWwgYXJlYSBkZSBzdGFnZSBlc3RlIGh1bmsgbyBuaW5ndW5vIGRlIGxvcyBwb3N0ZXJpb3JlcyBlbiBlbCAiCisiYXJjaGl2byIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjY2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgZXN0ZSBodW5rIGFsIMOtbmRpY2VcbiIKKyJuIC0gbm8gYXBsaWNhciBlc3RlIGh1bmsgYWwgw61uZGljZVxuIgorInEgLSBxdWl0OyBubyBhcGxpY2FyIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHJlc3RhbnRlc1xuIgorImEgLSBhcGxpY2FyIGVzdGUgaHVuayB5IHRvZG9zIGxvcyBwb3N0ZXJpb3JlcyBlbiBlbCBhcmNoaXZvXG4iCisiZCAtIG5vIGFwbGljYXIgZXN0ZSBodW5rbyBuaW5ndW5vIGRlIGxvcyBwb3N0ZXJpb3JlcyBlbiBlbCBhcmNoaXZvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjkwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZGVzY2FydGFyIGVzdGUgaHVuayBkZWwgw6FyYm9sIGRlIHRyYWJham9cbiIKKyJuIC0gbm8gZGVzY2FydGFyIGVzdGUgaHVuayBkZWwgw6FyYm9sIGRlIHRyYWJham9cbiIKKyJxIC0gcXVpdDsgbm8gZGVzY2FydGFyIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHF1ZSByZXN0YW50ZXNcbiIKKyJhIC0gZGVzY2FydGFyIGVzdGUgaHVuayB5IHRvZG9zIGxvcyBwb3N0ZXJpb3JlcyBlbiBlc3RlIGFyY2hpdm9cbiIKKyJkIC0gbm8gZGVzY2FydGFyIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZGVzY2FydGFyIGVzdGUgaHVuayBkZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvXG4iCisibiAtIG5vIGRlc2NhcnRhciBlc3RlIGh1bmsgZGVsIMOtbmRpY2UgbmkgZWwgw6FyYm9sIGRlIHRyYWJham9cbiIKKyJxIC0gcXVpdDsgbm8gZGVzY2FydGFyIGVzdGUgaHVuayBvIG5pbmd1bm8gZGUgbG9zIHF1ZSBxdWVkYW5cbiIKKyJhIC0gZGVzY2FydGFyIGVzdGUgaHVuayB5IHRvZG9zIGxvcyBwb3N0ZXJpb3JlcyBlbiBlc3RlIGFyY2hpdm9cbiIKKyJkIC0gbm8gZGVzY2FydGFyIGVzdGUgaHVuayBvIG5pbmd1bm8gcG9zdGVyaW9yIGVuIGVsIGFyY2hpdm8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI4NAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgZXN0ZSBodW5rIGFsIMOtbmRpY2UgeSBhbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorIm4gLSBubyBhcGxpY2FyIGVzdGUgaHVuayBhbCDDrW5kaWNlIHkgYWwgw6FyYm9sIGRlIHRyYWJham9cbiIKKyJxIC0gcXVpdDsgIG5vIGFwbGljYXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgZXN0ZSBodW5rIHkgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm9cbiIKKyJkIC0gbm8gYXBsaWNhciBlc3RlIGh1bmsgbyBuaW5ndW5vIGRlIGxvcyBzaWd1aWVudGVzIGVuIGVzdGUgYXJjaGl2byIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjk2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgZXN0ZSBodW5rIGFsIMOtbmRpY2UgeSBhbCDDoXJib2wgZGUgdHJhYmFqb1xuIgorIm4gLSBubyBhcGxpY2FyIGVzdGUgaHVuayBhbCDDrW5kaWNlIHkgYWwgw6FyYm9sIGRlIHRyYWJham9cbiIKKyJxIC0gcXVpdDsgIG5vIGFwbGljYXIgZXN0ZSBodW5rIG8gbmluZ3VubyBkZSBsb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgZXN0ZSBodW5rIHkgdG9kb3MgbG9zIHBvc3RlcmlvcmVzIGVuIGVsIGFyY2hpdm9cbiIKKyJkIC0gbm8gYXBsaWNhciBlc3RlIGh1bmsgbyBuaW5ndW5vIGRlIGxvcyBzaWd1aWVudGVzIGVuIGVzdGUgYXJjaGl2byIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIHNlbGVjY2lvbmEgdW4gaHVuayBhIGRvbmRlIGlyXG4iCisiLyAtIGJ1c2NhciB1biBodW5rIHF1ZSBjb25jdWVyZGUgZWwgIHJlZ2V4XG4iCisiaiAtIGRlamFyIGVzdGUgaHVuayBwb3IgZGVmaW5pciwgdmVyIHNpZ3VpZW50ZSBodW5rIHBvciBkZWZpbmlyXG4iCisiSiAtIGRlamFyIGVzdGUgaHVuayBwb3IgZGVmaW5pciwgdmVyIHNpZ3VpZW50ZSBodW5rXG4iCisiayAtIGRlamFyIGVzdGUgaHVuayBwb3IgZGVmaW5pciwgdmVyIGh1bmsgcHJldmlvIHBvciBkZWZpbmlyXG4iCisiSyAtIGRlamFyIGVzdGUgaHVuayBwb3IgZGVmaW5pciwgdmVyIGh1bmsgcHJldmlvXG4iCisicyAtIGRpdmlkaXIgZWwgIGh1bmsgYWN0dWFsIGVuIGh1bmtzIG3DoXMgcGVxdWXDsW9zXG4iCisiZSAtIGVkaXRhciBtYW51YWxtZW50ZSBlbCBodW5rIGFjdHVhbFxuIgorIj8gLSBpbXByaW1pciBheXVkYVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDIKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIKK21zZ3N0ciAiwqFMb3MgaHVua3Mgc2VsZWNjaW9uYWRvcyBubyBhcGxpY2FuIGFsIMOtbmRpY2UhXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MworbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICLCv0FwbGljYXJsb3MgYWwgw6FyYm9sIGRlIHRyYWJham8gZGUgdG9kYXMgbWFuZXJhcz8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDYKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICJOYWRhIGZ1ZSBhcGxpY2Fkby5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICJpZ25vcmFuZG8gbG8gbm8gZnVzaW9uYWRvOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/Q2FtYmlvIGRlIG1vZG8gZGUgc3RhZ2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIHN0YWdlIGFsIGJvcnJhZG8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBzdGFnZSBhIGVzdGUgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLCv0FwbGljYXIgc3Rhc2ggYWwgY2FtYmlvIGRlIG1vZG8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIHN0YXNoIGFsIGJvcnJhZG8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBzdGFzaCBhIGVzdGUgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/U2FjYXIgY2FtYmlvIGRlIG1vZG8gZGVsIHN0YWdlIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9TYWNhciBib3JyYWRvIGRlbCBzdGFnZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLCv1NhY2FyIGVzdGUgaHVuayBkZWwgc3RhZ2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIGNhbWJpbyBkZSBtb2RvIGFsIMOtbmRpY2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIGJvcnJhZG8gYWwgw61uZGljZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIGVzdGUgaHVuayBhbCDDrW5kaWNlIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9EZXNjYXJ0YXIgY2FtYmlvIGRlIG1vZG8gZGVsIMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9EZXNjYXJ0YXIgYm9ycmFkbyBkZWwgw6FyYm9sIGRlIHRyYWJham8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9EZXNjYXJ0YXIgZXN0ZSBodW5rIGRlbCDDoXJib2wgZGUgdHJhYmFqbyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyLCv0Rlc2NhcnRhciBjYW1iaW8gZGUgbW9kbyBkZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9EZXNjYXJ0YXIgYm9ycmFkbyBkZWwgw61uZGljZSB5IGVsIMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyLCv0Rlc2NhcnRhciBlc3RlIGh1bmsgZGVsIMOtbmRpY2UgeSBlbCDDoXJib2wgZGUgdHJhYmFqbyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIsK/QXBsaWNhciBjYW1iaW8gZGUgbW9kbyBwYXJhIGVsIMOtbmRpY2UgeSBlbCDDoXJib2wgZGUgdHJhYmFqbyBbeSxuLHEsYSxkIgorIiVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBib3JyYWRvIGFsIMOtbmRpY2UgeSBhbCDDoXJib2wgZGUgdHJhYmFqbyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBlc3RlIGh1bmsgYWwgw61uZGljZSB5IMOhcmJvbCBkZSB0cmFiYWpvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIGNhbWJpbyBkZSBtb2RvIHBhcmEgZWwgw6FyYm9sIGRlIHRyYWJham8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiwr9BcGxpY2FyIGJvcnJhZG8gYWwgw6FyYm9sIGRlIHRyYWJham8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsK/QXBsaWNhciBlc3RlIGh1bmsgYWwgw6FyYm9sIGRlIHRyYWJham8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTcwCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICJObyBoYXkgbcOhcyBwZWRhem9zIHBhcmEgZWwgaXJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIk51bWVybyBpbnbDoWxpZG86ICclcydcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIkxvIHNpZW50bywgc29sbyAlZCBodW5rIGRpc3BvbmlibGUuXG4iCittc2dzdHJbMV0gIkxvIHNpZW50bywgc29sbyAlZCBodW5rcyBkaXNwb25pYmxlcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgIk5vIGhheSBtw6FzIHBlZGF6b3MgcGFyYSBidXNjYXJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICJSZWdleHAgcGFyYSBsYSBiw7pzcXVlZGEgbWFsIGZvcm1hZG8gJXM6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY0NgorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICJObyBoYXkgaHVua3MgcXVlIGNvbmN1ZXJkZW4gY29uIGVsIHBhdHLDs24gZW50cmVnYWRvLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjgwCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICJObyBlbCBhbnRlcmlvciBodW5rXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODYKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAiTm8gZWwgc2lndWllbnRlIGh1bmtcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjkyCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiUGVyZMOzbiwgbm8gc2UgcHVlZGUgZGl2aWRpciBlc3RlIHBlZGF6b1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rLlxuIgorbXNnaWRfcGx1cmFsICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIgorbXNnc3RyWzBdICJDb3J0YXIgZW4gJWQgaHVuay5cbiIKK21zZ3N0clsxXSAiQ29ydGFyIGVuICAlZCBodW5rcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJQZXJkw7NuLCBubyBzZSBwdWVkZSBlZGl0YXIgZXN0ZSBwZWRhem9cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBkbyBub3QgdHJhbnNsYXRlIHRoZSBjb21tYW5kIG5hbWVzCisjLiAnc3RhdHVzJywgJ3VwZGF0ZScsICdyZXZlcnQnLCBldGMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NzMKK21zZ2lkICIiCisic3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzXG4iCisidXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlc1xuIgorInJldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvblxuIgorInBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHlcbiIKKyJkaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXhcbiIKKyJhZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiAiCisiY2hhbmdlc1xuIgorbXNnc3RyICIiCisic3RhdHVzICAgICAgICAtIG11ZXN0cmEgbGFzIHJ1dGFzIGNvbiBjYW1iaW9zXG4iCisidXBkYXRlICAgICAgICAtIGFncmVnYSBlbCBlc3RhZG8gZGVsIMOhcmJvbCBkZSB0cmFiYWpvIGFsIHNldCBkZSBjYW1iaW9zIGVuICIKKyJlbCDDoXJlYSBkZSBzdGFnZVxuIgorInJldmVydCAgICAgICAgLSByZXZpZXJ0ZSBsb3MgY2FtYmlvcyBlbiBlbCDDoXJlYSBkZSBzdGFnZSBkZSByZWdyZXNvIGEgbGEgIgorInZlcnNpw7NuIEhFQURcbiIKKyJwYXRjaCAgICAgICAgIC0gc2VsZWNjaW9uYSBsb3MgaHVua3MgeSBhY3R1YWxpemEgZGUgZm9ybWEgc2VsZWN0aXZhXG4iCisiZGlmZiAgICAgICAgICAtIG1pcmFyIGxhIGRpZmYgZW50cmUgSEVBRCB5IGVsIMOtbmRpY2VcbiIKKyJhZGQgdW50cmFja2VkIC0gYWdyZWdhIGNvbnRlbmlkb3MgZGUgYXJjaGl2b3Mgbm8gcmFzdHJlYWRvcyBhbCBncnVwbyBkZSAiCisiY2FtYmlvcyBkZWwgYXJlYSBkZSBzdGFnZVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI1Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAiZmFsdGEgLS0iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgIm1vZG8gLS1wYXRjaCBkZXNjb25vY2lkbzogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICJhcmd1bWVudG8gaW52w6FsaWRvICVzLCBzZSBlc3BlcmFiYSAtLSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgImxhIHpvbmEgbG9jYWwgZGlmaWVyZSBkZSBHTVQgcG9yIHVuIGludGVydmFsbyBkZSBjZXJvIG1pbnV0b3NcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDUgZ2l0LXNlbmQtZW1haWwucGVybDoxNTEKK21zZ2lkICJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIKK21zZ3N0ciAiZWwgb2Zmc2V0IGRlbCB0aWVtcG8gbG9jYWwgZXMgbWF5b3IgbyBpZ3VhbCBhIDI0IGhvcmFzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICJlbCBlZGl0b3Igc2UgY2Vycm8gaW5hcHJvcGlhZGFtZW50ZSwgYWJvcnRhbmRvIHRvZG8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiIKKyInJXMnIGNvbnRpZW5lIHVuYSB2ZXJzacOzbiBpbnRlcm1lZGlhIGRlbCBjb3JyZW8gcXVlIHNlIGVzdGFiYSBnZW5lcmFuZG8uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiclcy5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorbXNnc3RyICInJXMuZmluYWwnIGNvbnRpZW5lIGVsIGVtYWlsIGdlbmVyYWRvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQwOAorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiLS1kdW1wLWFsaWFzZXMgbm8gZXMgY29tcGF0aWJsZSBjb24gb3RyYXMgb3BjaW9uZXMuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDgxIGdpdC1zZW5kLWVtYWlsLnBlcmw6NjgzCittc2dpZCAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZWplY3V0YXIgZ2l0IGZvcm1hdC1wYXRjaCBkZXNkZSBmdWVyYSBkZWwgcmVwb3NpdG9yaW8uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDg0Cittc2dpZCAiIgorImBiYXRjaC1zaXplYCBhbmQgYHJlbG9naW5gIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyICh2aWEgY29tbWFuZC1saW5lIG9yICIKKyJjb25maWd1cmF0aW9uIG9wdGlvbilcbiIKK21zZ3N0ciAiIgorImBiYXRjaC1zaXplYCB5IGByZWxvZ2luYCBkZWJlbiBzZXIgZXNwZWNpZmljYWRvcyBqdW50b3MgKHZpYSBsYSBsw61uZWEgZGUgIgorImNvbWFuZG8gbyBwb3Igb3BjacOzbiBkZSBjb25maWd1cmFjacOzbilcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0OTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIkNhbXBvIC0tc3VwcHJlc3MtY2MgZGVzY29ub2NpZG86ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICJDb25maWd1cmFjacOzbiAtLWNvbmZpcm0gZGVzY29ub2NpZGE6ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAicGVsaWdybzogYWxpYXMgZGUgc2VuZG1haWwgIGNvbiBjb21pbGxhcyBubyBlcyBzb3BvcnRhZG86ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgInBlbGlncm86IGA6aW5jbHVkZTpgIG5vIHNvcG9ydGFkbzogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgImFkdmVydGVuY2lhOiByZWRpcmVjY2nDs24gYC9maWxlYCBvIGB8cGlwZWAgbm8gc29wb3J0YWRhIDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAiYWR2ZXJ0ZW5jaWE6IGzDrW5lYSBzZW5kbWFpbCBubyByZWNvbm9jaWRhOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyJBcmNoaXZvICclcycgZXhpc3RlIHBlcm8gcG9kcsOtYSBzZXIgZWwgcmFuZ28gZGUgY29tbWl0cyBcbiIKKyJwYXJhIHByb2R1Y2lyIGxvcyBwYXJjaGVzLiAgUG9yIGZhdm9yIGVsaW1pbmEgbGEgYW1iaWfDvGVkYWQuLi5cbiIKKyJcbiIKKyIgICAgKiBEaWNpZW5kbyBcIi4vJXNcIiBzaSBzZSBxdWllcmUgZGVjaXIgdW4gYXJjaGl2bzsgb1xuIgorIiAgICAqIEFncmVnYW5kbyBsYSBvcGNpw7NuIC0tZm9ybWF0LXBhdGNoIHNpIHNlIHF1aWVyZSBkZWNpciB1biByYW5nby5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICJGYWxsw7MgYWwgYWJyaXIgZGlyZWN0b3JpbyAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njk0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAiIgorImZhdGFsOiAlczogJXNcbiIKKyJwZWxpZ3JvOiBubyBzZSBtYW5kYXJvbiBwYXJjaGVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzA1Cittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vIHNlIGVzcGVjaWZpY2Fyb24gcGFyY2hlcyFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiwr9ObyBoYXkgbMOtbmVhIGRlIHN1YmplY3QgZW4gJXM/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIkZhbGzDsyBhbCBhYnJpciBwYXJhIGVzY3JpdHVyYSAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzM5Cittc2dpZCAiIgorIkxpbmVzIGJlZ2lubmluZyBpbiBcIkdJVDpcIiB3aWxsIGJlIHJlbW92ZWQuXG4iCisiQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHNcbiIKKyJmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy5cbiIKKyJcbiIKKyJDbGVhciB0aGUgYm9keSBjb250ZW50IGlmIHlvdSBkb24ndCB3aXNoIHRvIHNlbmQgYSBzdW1tYXJ5LlxuIgorbXNnc3RyICIiCisiTGluZWFzIHF1ZSBjb21pZW56YW4gZW4gXCJHSVQ6XCIgc2Vyw6FuIGVsaW1pbmFkYXMuXG4iCisiQ29uc2lkZXJlIGluY2x1aXIgdW4gZGlmZnN0YXQgZ2xvYmFsIG8gdW5hIHRhYmxhIGRlIGNvbnRlbmlkb3NcbiIKKyJwYXJhIGVsIHBhcmNoZSBxdWUgZXN0w6FzIGVzY3JpYmllbmRvLlxuIgorIlxuIgorIkxpbXBpYXIgZWwgY29udGVuaWRvIGRlIGJvZHkgc2kgbm8gZGVzZWFzIG1hbmRhciB1biByZXN1bWVuLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlczogJXMiCittc2dzdHIgIkZhbGzDsyBhbCBhYnJpciAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAiRmFsbMOzIGFsIGFicmlyICVzLmZpbmFsOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MjMKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICJBcmNoaXZvIGRlIHJlc3VtZW4gZXN0w6EgdmFjw61vLCBzYWx0YW5kbyBhbCBzaWd1aWVudGVcbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwIFt5L05dIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JXM+IFt5L05dPyAiCittc2dzdHIgIsK/RXN0w6FzIHNlZ3VybyBkZSBxdWUgZGVzZWFzIHVzYXIgPCVzPiBbeS9OXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxMworbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorIkxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIHNvbiA4Yml0LCBwZXJvIG5vIGRlY2xhcmFuIHVuIENvbnRlbnQtVHJhbnNmZXItIgorIkVuY29kaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIsK/UXVlIGNvZGlmaWNhY2nDs24gZGUgOGJpdCBkZWJlcsOtYSBkZWNsYXJhciBbVVRGLThdPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSAiCisid2FudCB0byBzZW5kLlxuIgorbXNnc3RyICIiCisiUmVodXNhbmRvIG1hbmRhciBlbCBwYXJjaGUgcG9ycXVlXG4iCisiXHQlc1xuIgorInRpZW5lIGVsIHRlbXBsYXRlICAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBBZ3JlZ2EgLS1mb3JjZSBzaSByZWFsbWVudGUgbG8gIgorImRlc2VhcyBtYW5kYXIuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTQ1Cittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAiwr9BIHF1aWVuIHNlIGRlYmVuIG1hbmRhciBsb3MgY29ycmVvcyAoc2kgZXhpc3RlKT8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgImZhdGFsOiBhbGlhcyAnJXMnIHNlIGV4cGFuZGUgYSBzaSBtaXNtb1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk3NQorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIiIKKyLCv1F1w6kgaWQgZGUgbWVuc2FqZSBzZXLDoSB1c2FkbyBjb21vIEVuLVJlc3B1ZXN0YS1QYXJhIGVuIGVsIHByaW1lciBlbWFpbCAoc2kgIgorImV4aXN0ZSBhbGd1bm8pPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAzMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICJlcnJvcjogbm8gZXMgcG9zaWJsZSBleHRyYWVyIHVuYSBkaXJlY2Npw7NuIHbDoWxpZGEgZGUgJXNcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtxXSBbZF0gW2VdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDUKK21zZ2lkICJXaGF0IHRvIGRvIHdpdGggdGhpcyBhZGRyZXNzPyAoW3FddWl0fFtkXXJvcHxbZV1kaXQpOiAiCittc2dzdHIgIsK/UXVlIGhhY2VyIGNvbiBlc3RhIGRpcmVjY2nDs24/IChbcV1zYWxpcnxbZF1ib3RhcnxbZV1kaXRhcik6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJSdXRhIENBIFwiJXNcIiBubyBleGlzdGUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAgTGEgbGlzdGEgQ2MgaGEgc2lkbyBleHBhbmRpZGEgcG9yIGRpcmVjY2lvbmVzIGFkaWNpb25hbGVzXG4iCisiICAgIGVuY29udHJhZGFzIGVuIGVsIG1lbnNhamUgZGUgY29tbWl0IHBhcmNoYWRvLi4gUG9yIGRlZmVjdG9cbiIKKyIgICAgc2VuZC1lbWFpbCBzZSBtdWVzdHJhIGFudGVzIGRlIG1hbmRhciBjdWFscXVpZXIgY2FkYSB2ZXogcXVlIGVzdG8gIgorInN1Y2VkZS5cbiIKKyIgICAgRXN0ZSBjb21wb3J0YW1pZW50byBpcyBjb250cm9sYWRvIHBvciBlbCB2YWxvciBkZSBjb25maWd1cmFjacOzbiAiCisic2VuZGVtYWlsLmNvbmZpcm0uXG4iCisiXG4iCisiICAgIFBhcmEgbcOhcyBpbmZvcm1hY2nDs24sIGVqZWN1dGEgJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFBhcmEgbWFudGVuZXIgZWwgY29tcG9ydGFtaWVudG8gYWN0dWFsLCBwZXJvIGV2aXRhciBlc3RlIG1lbnNhamUsXG4iCisiICAgIGVqZWN1dGEgJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIsK/TWFuZGFyIGVzdGUgZW1haWw/IChbeV1zaXx8W25db3xbZV1lZGl0YXJ8W3Fdc2FsaXJ8W2FddG9kbyk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYzCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsIHJlcGx5IHJlcXVpcmVkIgorbXNnc3RyICJOZWNlc2l0YXMgbWFuZGFyIGVzdGEgcmVzcHVlc3RhIGRlIGVtYWlsIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0OTEKK21zZ2lkICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorbXNnc3RyICJFbCBzZXJ2aWRvciBTTVRQIG5vIGVzdGEgZGVmaW5pZG8gYWRlY3VhZGFtZW50ZS4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIsKhRWwgc2Vydmlkb3Igbm8gc29wb3J0YSBTVEFSVFRMUyEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0MyBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU1RBUlRUTFMgZmFpbGVkISAlcyIKK21zZ3N0ciAiwqFGYWxsw7MgU1RBUlRUTFMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisiTm8gZXMgcG9zaWJsZSBpbmljaWFsaXphciBTTVRQIGFkZWN1YWRhbWVudGUuIFZlcmlmaWNhciBjb25maWcgeSB1c2FyIC0tLSIKKyJzbXRwLWRlYnVnLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgIkZhbGzDsyBhbCBlbnZpYXIgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIkRyeS1TZW50ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZW50ICVzXG4iCittc2dzdHIgIkVudmlhZG8gJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiRHJ5LU9LLiBMb2cgZGljZTpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJPSy4gTG9nIGRpY2U6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5MQorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICJSZXN1bHRhZG86ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICJSZXN1bHRhZG86IE9LXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIGVsIGFyY2hpdm8gJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY1OSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIEFncmVnYW5kbyBjYzogJXMgZGUgbMOtbmVhICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgdG86ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSBBZ3JlZ2FuZG8gcGFyYTogJXMgZGUgbGEgbMOtbmVhICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobm9uLW1ib3gpIEFncmVnYW5kbyBjYzogJXMgZGUgbGEgbMOtbmVhICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihib2R5KSBBZ3JlZ2FuZG8gY2M6ICVzIGRlIGxhIGzDrW5lYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykgbm8gc2UgcHVkbyBlamVjdXRhciAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSBBZ3JlZ2FuZG8gJXM6ICVzIGRlOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykgZmFsbMOzIGFsIGNlcnJhciBlbCBwaXBlIHBhcmEgJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTA1Cittc2dpZCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorbXNnc3RyICJubyBzZSBwdWVkZSBtYW5kYXIgbWVuc2FqZSBjb21vIDdiaXQiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkxMworbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgImNvZGlmaWNhY2nDs24gZGUgdHJhbnNmZXJlbmNpYSBpbnbDoWxpZGEiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NCBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMDYgZ2l0LXNlbmQtZW1haWwucGVybDoyMDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIGFicmlyICVzOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyIKK21zZ3N0ciAiJXM6IGVsIHBhcmNoZSBjb250aWVuZSB1bmEgbMOtbmVhIGNvbiBtw6FzIGRlIDk5OCBjYXJhY3RlcmVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIlNhbHRhbmRvICVzIGNvbiBlbCBzdWZpam8gZGUgYmFja3VwICclcycuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCAiW3l8Tl0iIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBzZW5kICVzPyBbeXxOXTogIgorbXNnc3RyICLCv1JlYWxtZW50ZSBkZXNlYXMgbWFuZGFyICVzP1t5fE5dOiAiCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAidW5hYmxlIHRvIGdldCB0cmVlIGZvciAlcyIKKyN+IG1zZ3N0ciAibm8gc2UgcHVkbyBvYnRlbmVyIMOhcmJvbCBwYXJhICVzIgorCisjfiBtc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIKKyN+IG1zZ3N0ciAiVXNhciB1biBoZXVyw61zdGljbyBleHBlcmltZW50YWwgcGFyYSBtZWpvcmFyIGxvcyBkaWZmcyIKKworI34gbXNnaWQgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisKKyN+IG1zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKKworI34gbXNnaWQgInVua25vd24gY29yZS51bnRyYWNrZWRDYWNoZSB2YWx1ZSAnJXMnOyB1c2luZyAna2VlcCcgZGVmYXVsdCB2YWx1ZSIKKyN+IG1zZ3N0ciAiIgorI34gInZhbG9yIGNvcmUudW50cmFja2VkQ2FjaGUgJyVzJyBkZXNjb25vY2lkbzsgdXNhbmRvICdrZWVwJyBjb21vIHZhbG9yIHBvciAiCisjfiAiZGVmZWN0byIKKworI34gbXNnaWQgImNhbm5vdCBjaGFuZ2UgcGFydGlhbCBjbG9uZSBwcm9taXNvciByZW1vdGUiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZWRlIGNhbWJpYXIgdW4gY2xvbiBwYXJjaWFsIHJlbW90byBwcm9taXNvciIKKworI34gbXNnaWQgImVycm9yIGJ1aWxkaW5nIHRyZWVzIgorI34gbXNnc3RyICJlcnJvciBjb25zdHJ1eWVuZG8gw6FyYm9sZXMiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0ICclcycgaW4gJyVzJyIKKyN+IG1zZ3N0ciAiZm9ybWF0byBkZSBmZWNoYSBpbnbDoWxpZG8gJyVzJyBlbiAnJXMnIgorCisjfiBtc2dpZCAid3JpdGluZyByb290IGNvbW1pdCIKKyN+IG1zZ3N0ciAiZXNjcmliaWVuZG8gY29tbWl0IHJhw616IgorCisjfiBtc2dpZCAic3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlcyBtYXkgYmUgbG9zdDogJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJjYW1iaW9zIGVuIGVsIMOhcmVhIGRlIHN0YWdlIGVuIGVsIHNpZ3VpZW50ZSBhcmNoaXZvIHB1ZWRlbiBzZXIgcGVyZGlkb3M6ICIKKyN+ICIlcyIKKworI34gbXNnaWQgIiIKKyN+ICItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorI34gInBhcnRpYWxDbG9uZSIKKyN+IG1zZ3N0ciAiIgorI34gIi0tZmlsdGVyIHNvbG8gcHVlZGUgc2VyIHVzYWRvIGNvbiBlbCByZW1vdG8gY29uZmlndXJhZG8gZW4gZXh0ZW5zaW9ucy4iCisjfiAicGFydGlhbENsb25lIgorCisjfiBtc2dpZCAidmVyaWZ5IGNvbW1pdC1tc2cgaG9vayIKKyN+IG1zZ3N0ciAidmVyaWZpY2FyIGVsIGhvb2sgY29tbWl0LW1zZyIKKworI34gbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKyN+IG1zZ3N0ciAibm8gc2UgcHVlZGUgY29tYmluYXIgJy0tcmViYXNlLW1lcmdlcycgY29uICctLXN0cmF0ZWd5LW9wdGlvbiciCisKKyN+IG1zZ2lkICJpbnZhbGlkIHNwYXJzZSB2YWx1ZSAnJXMnIgorI34gbXNnc3RyICJ2YWxvciBkaXNwZXJzbyBpbnbDoWxpZG86ICclcyciCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrX2RldGFpbGVkIgorI34gbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIHVsdGlfYWNrX2RldGFpbGVkIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG5vLWRvbmUiCisjfiBtc2dzdHIgIkVsIHNlcnZpZG9yIHNvcG9ydGEgbm8tZG9uZSIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2siCisjfiBtc2dzdHIgIkVsIHNlcnZpZG9yIHNvcG9ydGEgbXVsdGlfYWNrIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZC02NGsiCisjfiBtc2dzdHIgIkVsIHNlcnZpZG9yIHNvcG9ydGEgc2lkZS1iYW5kLTY0ayIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQiCisjfiBtc2dzdHIgIkVsIHNlcnZpZG9yIHNvcG9ydGEgc2lkZS1iYW5kIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCisjfiBtc2dzdHIgIkVsIHNlcnZpZG9yIHNvcG9ydGEgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorI34gbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgb2ZzLWRlbHRhIgorI34gbXNnc3RyICJFbCBzZXJ2aWRvciBzb3BvcnRhIG9mcy1kZWx0YSIKKworI34gbXNnaWQgIihIRUFEIGRldGFjaGVkIGF0ICVzKSIKKyN+IG1zZ3N0ciAiKEhFQUQgZGVzYWNvcGxhZG8gZW4gJXMpIgorCisjfiBtc2dpZCAiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiCisjfiBtc2dzdHIgIihIRUFEIGRlc2Fjb3BsYWRvIGRlICVzKSIKKworI34gbXNnaWQgIkNoZWNraW5nIG91dCBmaWxlcyIKKyN+IG1zZ3N0ciAiUmV2aXNhbmRvIGFyY2hpdm9zIgorCisjfiBtc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorI34gbXNnc3RyICJubyBzZSBwdWVkZSBzZXIgaW50ZXJhY3Rpdm8gc2luIHN0ZGluIGNvbmVjdGFkbyBhIHVuIHRlcm1pbmFsLiIKKworI34gbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCisjfiBtc2dzdHIgImZhbGzDsyBhbCBhbmFsaXphciAlc1xuIgorCisjfiBtc2dpZCAiIgorI34gIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgICAgZ2l0IHJlc2V0XG4iCisjfiAiXG4iCisjfiAiVGhlbiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgd2lsbCByZXN1bWUgY2hlcnJ5LXBpY2tpbmdcbiIKKyN+ICJ0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTaSBxdWllcmUgc2FsdGFyIGVzdGUgY29tbWl0LCB1c2U6XG4iCisjfiAiXG4iCisjfiAiICAgIGdpdCByZXNldFxuIgorI34gIlxuIgorI34gIkx1ZWdvIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBjb250aW51YXJhIGVsIGNoZXJyeS1waWNraW5nXG4iCisjfiAicGFyYSBsb3MgY29tbWl0cyByZXN0YW50ZXMuXG4iCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgdmVyYjogJXMiCisjfiBtc2dzdHIgInZlcmJvIG5vIHJlY29ub2NpZG86ICVzIgorCisjfiBtc2dpZCAiaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCisjfiBtc2dzdHIgInZlcnNpw7NuIGRlIGhhc2ggJVggbm8gY29uY3VlcmRhIGNvbiB2ZXJzacOzbiAlWCIKKworI34gbXNnaWQgIm9wdGlvbiAnJXMnIHJlcXVpcmVzIGEgdmFsdWUiCisjfiBtc2dzdHIgIm9wY2nDs24gJyVzJyByZXF1aWVyZSB1biB2YWxvciIKKworI34gbXNnaWQgImNvdWxkIG5vdCB0cmFuc2Zvcm0gdGhlIHRvZG8gbGlzdCIKKyN+IG1zZ3N0ciAibm8gc2UgcHVkbyB0cmFuc2Zvcm1hciBsaXN0YSBkZSBwZW5kaWVudGVzIgorCisjfiBtc2dpZCAiZGVmYXVsdCIKKyN+IG1zZ3N0ciAiZGVmYXVsdCIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCisjfiBtc2dzdHIgIk5vIHNlIHB1ZG8gY3JlYXIgZWwgZGlyZWN0b3JpbyAnJXMnIgorCisjfiBtc2dpZCAiYWxsb3cgcmVyZXJlIHRvIHVwZGF0ZSBpbmRleCB3aXRoIHJlc29sdmVkIGNvbmZsaWN0IgorI34gbXNnc3RyICJwZXJtaXRpciByZXJlcmUgYWN0dWFsaXphciBpbmRleCBjb24gY29uZmxpY3RvcyByZXN1ZWx0b3MiCisKKyN+IG1zZ2lkICJjb3VsZCBub3Qgb3BlbiAlcyIKKyN+IG1zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciAlcyIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJGhlYWRfbmFtZSIKKyN+IG1zZ3N0ciAiTm8gc2UgcHVlZGUgcmVncmVzYXIgYSAkaGVhZF9uYW1lIgorCisjfiBtc2dpZCAiIgorI34gIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICRzdGF0ZV9kaXJfYmFzZSBkaXJlY3RvcnksIGFuZFxuIgorI34gIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisjfiAiY2FzZSwgcGxlYXNlIHRyeVxuIgorI34gIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorI34gIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyN+ICJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisjfiAiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyN+ICJ2YWx1YWJsZSB0aGVyZS4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYXJlY2UgcXVlIHlhIGhheSB1biBkaXJlY3RvcmlvICRzdGF0ZV9kaXJfYmFzZSwgeVxuIgorI34gIm1lIHByZWd1bnRvIHNpIGVzdMOhIGVuIG1lZGlvIGRlIG90cm8gcmViYXNlLiBTaSBlc2UgZXMgZWwgXG4iCisjfiAiY2FzbywgcG9yIGZhdm9yIGludGVudGVcbiIKKyN+ICJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyN+ICJTaSBubyBlcyBlbCBjYXNvLCBwb3IgZmF2b3JcbiIKKyN+ICJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisjfiAieSBlamVjw7p0ZW1lIG51ZXZhbWVudGUuICBNZSBlc3RveSBkZXRlbmllbmRvIGVuIGNhc28gZGUgcXVlIHRlbmdhXG4iCisjfiAiYWxnbyBkZSB2YWxvciBhaMOtLiIKKworI34gbXNnaWQgIiIKKyN+ICJmYXRhbDogY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorI34gbXNnc3RyICIiCisjfiAiZmF0YWw6IG5vIHNlIHB1ZWRlIGNvbWJpbmFyIG9wY2lvbmVzIGFtIGNvbiBvcGNpb25lcyBpbnRlcmFjdGl2YXMgbyBkZSAiCisjfiAibWVyZ2UiCisKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tc2lnbm9mZicgd2l0aCAnLS1wcmVzZXJ2ZS1tZXJnZXMnIgorI34gbXNnc3RyICJmYXRhbDogbm8gc2UgcHVlZGUgY29tYmluYXIgJy0tc2lnbm9mZicgY29uICctLXByZXNlcnZlLW1lcmdlcyciCisKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorI34gbXNnc3RyICIiCisjfiAiZmF0YWw6IG5vIHNlIHB1ZWRlIGNvbWJpbmFyICctLXByZXNlcnZlLW1lcmdlcycgY29uICctLXJlYmFzZS1tZXJnZXMnIgorCisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKyN+IG1zZ3N0ciAiIgorI34gImZhdGFsOiBubyBzZSBwdWVkZSBjb21iaW5hciAnLS1yZWJhc2UtbWVyZ2VzJyBjb24gJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKworI34gbXNnaWQgImZhdGFsOiBjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5JyIKKyN+IG1zZ3N0ciAiZmF0YWw6IG5vIHNlIHB1ZWRlIGNvbWJpbmFyICctLXJlYmFzZS1tZXJnZXMnIGNvbiAnLS1zdHJhdGVneSciCisKKyN+IG1zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICckdXBzdHJlYW1fbmFtZSciCisjfiBtc2dzdHIgInVwc3RyZWFtIGludsOhbGlkbyAnJHVwc3RyZWFtX25hbWUnIgorCisjfiBtc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCisjfiBtc2dzdHIgIiRvbnRvX25hbWU6IGhheSBtw6FzIGRlIHVuYSBiYXNlIGRlIGZ1c2nDs24iCisKKyN+IG1zZ2lkICIkb250b19uYW1lOiB0aGVyZSBpcyBubyBtZXJnZSBiYXNlIgorI34gbXNnc3RyICIkb250b19uYW1lOiBubyBoYXkgYmFzZSBkZSBmdXNpw7NuIgorCisjfiBtc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCisjfiBtc2dzdHIgIk5vIGFwdW50YSBhIHVuIGNvbW1pdCB2w6FsaWRvOiAkb250b19uYW1lIgorCisjfiBtc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJGJyYW5jaF9uYW1lJyIKKyN+IG1zZ3N0ciAiZmF0YWw6IG5vIGV4aXN0ZSBsYSByYW1hL2NvbW1pdDogJyRicmFuY2hfbmFtZSciCisKKyN+IG1zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKKyN+IG1zZ3N0ciAiQXV0b3N0YXNoIGNyZWFkbzogJHN0YXNoX2FiYnJldiIKKworI34gbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKKyN+IG1zZ3N0ciAiTGEgcmFtYSBhY3R1YWwgJGJyYW5jaF9uYW1lIGVzdMOhIGFjdHVhbGl6YWRhLiIKKworI34gbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKKyN+IG1zZ3N0ciAiUmFtYSBhY3R1YWwgJGJyYW5jaF9uYW1lIGVzdMOhIGFjdHVhbGl6YWRhLCByZWJhc2UgZm9yemFkby4iCisKKyN+IG1zZ2lkICJDaGFuZ2VzIHRvICRvbnRvOiIKKyN+IG1zZ3N0ciAiQ2FtYmlvcyBoYWNpYSAkb250bzoiCisKKyN+IG1zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKKyN+IG1zZ3N0ciAiQ2FtYmlvcyBkZXNkZSAkbWIgYSAkb250bzoiCisKKyN+IG1zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCisjfiBtc2dzdHIgIkF2YW5jZSByw6FwaWRvIGRlICRicmFuY2hfbmFtZSBhICRvbnRvX25hbWUuIgorCisjfiBtc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgorI34gbXNnc3RyICIiCisjfiAiRW4gcHJpbWVyIGx1Z2FyLCByZWJvYmluYW5kbyBIRUFEIHBhcmEgZGVzcHXDqXMgcmVwcm9kdWNpciB0dXMgY2FtYmlvcyAiCisjfiAiZW5jaW1hIGRlIMOpc3RhLi4uIgorCisjfiBtc2dpZCAiaWdub3JpbmcgdW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcyciCisjfiBtc2dzdHIgImlnbm9yYW5kbyBtb2RvIGRlc2Nvbm9jaWRvIGNvbG9yLW1vdmVkLXdzICclcyciCisKKyN+IG1zZ2lkICJvbmx5ICd0cmVlOjAnIGlzIHN1cHBvcnRlZCIKKyN+IG1zZ3N0ciAic29sbyAndHJlZTowJyBlcyBzb3BvcnRhZG8iCisKKyN+IG1zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKKyN+IG1zZ3N0ciAiUmVub21icmFuZG8gJXMgYSAlcyB5ICVzIGEgJXMgbcOhcyBiaWVuIgorCisjfiBtc2dpZCAiQWRkaW5nIG1lcmdlZCAlcyIKKyN+IG1zZ3N0ciAiQWdyZWdhciAlcyBmdXNpb25hZG8iCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBlcnJvciIKKyN+IG1zZ3N0ciAiRXJyb3IgaW50ZXJubyIKKworI34gbXNnaWQgIm1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCisjfiBtc2dzdHIgImzDrW5lYSBwcmluY2lwYWwgZXNwZWNpZmljYWRhIHBlcm8gZWwgY29tbWl0ICVzIG5vIGVzIHVuYSBmdXNpw7NuLiIKKworI34gbXNnaWQgInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzIgorI34gbXNnc3RyICJpbmNhcGF6IGRlIGVzY3JpYmlyIGVsIG5vbWJyZSBkZSBhcmNoaXZvIHNoYTEgJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgcmVhZCBzaGExX2ZpbGUgZm9yICVzIgorI34gbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyIHNoYTFfZmlsZSBwYXJhICVzIgorCisjfiBtc2dpZCAiIgorI34gImVycm9yOiBjYW5ub3QgY29tYmluZSBpbnRlcmFjdGl2ZSBvcHRpb25zICgtLWludGVyYWN0aXZlLCAtLWV4ZWMsIC0tIgorI34gInJlYmFzZS1tZXJnZXMsIC0tcHJlc2VydmUtbWVyZ2VzLCAtLWtlZXAtZW1wdHksIC0tcm9vdCArIC0tb250bykgd2l0aCBhbSAiCisjfiAib3B0aW9ucyAoJXMpIgorI34gbXNnc3RyICIiCisjfiAiZXJyb3I6IG5vIHNlIHB1ZWRlIGNvbWJpbmFyIG9wY2lvbmVzIGludGVyYWN0aXZhcyAoLS1pbnRlcmFjdGl2ZSwgLS1leGVjLCAiCisjfiAiLS1yZWJhc2UtbWVyZ2VzLCAtLXByZXNlcnZlLW1lcmdlcywgLS1rZWVwLWVtcHR5LCAtLXJvb3QgKyAtLW9udG8pIGNvbiAiCisjfiAib3BjaW9uZXMgKCVzKSIKKworI34gbXNnaWQgIiIKKyN+ICJlcnJvcjogY2Fubm90IGNvbWJpbmUgbWVyZ2Ugb3B0aW9ucyAoLS1tZXJnZSwgLS1zdHJhdGVneSwgLS1zdHJhdGVneS0iCisjfiAib3B0aW9uKSB3aXRoIGFtIG9wdGlvbnMgKCVzKSIKKyN+IG1zZ3N0ciAiIgorI34gImVycm9yOiBubyBzZSBwdWVkZSBjb21iaW5hciBvcGNpb25lcyBkZSBtZXJnZSAoLS1tZXJnZSwgLS1zdHJhdGVneSwgLS0iCisjfiAic3RyYXRlZ3ktb3B0aW9uKSBjb24gb3BjaW9uZXMgZGUgYW0gKCVzKSIKKworI34gbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKKyN+IG1zZ3N0ciAib3BjacOzbiBubyByZWNvbm9jaWRhOiAnJGFyZyciCisKKyN+IG1zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKKyN+IG1zZ3N0ciAiJyRpbnZhbGlkJyBubyBlcyB1biBjb21taXQgdsOhbGlkbyIKKworI34gbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIChsb29raW5nIGZvciAnJXMnKSIKKyN+IG1zZ3N0ciAibm8gc2UgcHVkbyBjb25maWd1cmFyICclcycgKGJ1c2NhbmRvICclcycpIgorCisjfiBtc2dpZCAiZGVwcmVjYXRlZCBzeW5vbnltIGZvciAtLWNyZWF0ZS1yZWZsb2ciCisjfiBtc2dzdHIgInNpbsOzbmltbyBkZXByZWNhZG8gcGFyYSAtLWNyZWF0ZS1yZWZsb2ciCisKKyN+IG1zZ2lkICJDYW4ndCBzdGF0ICVzIgorI34gbXNnc3RyICJObyBzZSBwdWVkZSBkZWZpbmlyICVzIgorCisjfiBtc2dpZCAiYWJvcnQgcmViYXNlIgorI34gbXNnc3RyICJhYm9ydGFyIHJlYmFzZSIKKworI34gbXNnaWQgIm1ha2UgcmViYXNlIHNjcmlwdCIKKyN+IG1zZ3N0ciAiZ2VuZXJhciBzY3JpcHQgZGUgcmViYXNlIgorCisjfiBtc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorI34gbXNnc3RyICJObyBleGlzdGUgZWwgcmVtb3RvOiAlcyIKKworI34gbXNnaWQgImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSIKKyN+IG1zZ3N0ciAibm8gc2UgcHVlZGUgbW92ZXIgdW4gw6FyYm9sIGRlIHRyYWJham8gZW5jZXJyYWRvIgorCisjfiBtc2dpZCAiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZWRlIGVsaW1pbmFyIMOhcmJvbCBkZSB0cmFiYWpvIGVuY2VycmFkbyIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJcdEhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisjfiAiXG4iCisjfiAiXHQiCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJcdENvbW8gc2VhLCBzaSBxdWllcmVzIGJvcnJhciB0b2RvLCBlbCByZWJhc2Ugc2Vyw6EgYWJvcnRhZG8uXG4iCisjfiAiXG4iCisjfiAiXHQiCisKKyN+IG1zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IG1lcmdlIChkaXJ0eTogJXMpIgorI34gbXNnc3RyICLDjW5kaWNlIHN1Y2lvOiBubyBzZSBwdWVkZSBmdXNpb25hciAoc3VjaW86ICVzKSIKKworI34gbXNnaWQgIigrLy0peCIKKyN+IG1zZ3N0ciAiKCsvLSl4IgorCisjfiBtc2dpZCAiPGNvbW1hbmQ+IgorI34gbXNnc3RyICI8Y29tYW5kbz4iCisKKyN+IG1zZ2lkICJwdXNofGZldGNoIgorI34gbXNnc3RyICJwdXNofGZldGNoIgorCisjfiBtc2dpZCAid1ssaTFbLGkyXV0iCisjfiBtc2dzdHIgIndbLGkxWyxpMl1dIgorCisjfiBtc2dpZCAiRW50ZXJpbmcgJyRkaXNwbGF5cGF0aCciCisjfiBtc2dzdHIgIkVudHJhbmRvIGEgJyRkaXNwbGF5cGF0aCciCisKKyN+IG1zZ2lkICJTdG9wcGluZyBhdCAnJGRpc3BsYXlwYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iCisjfiBtc2dzdHIgIiIKKyN+ICJEZXRlbmllbmRvIGVuICckZGlzcGxheXBhdGgnOyBzY3JpcHQgZGV2b2x2acOzIHVuIHN0YXR1cyBkaXN0aW50byBkZSBjZXJvLiIKKworI34gbXNnaWQgIkV2ZXJ5ZGF5IEdpdCBXaXRoIDIwIENvbW1hbmRzIE9yIFNvIgorI34gbXNnc3RyICJHaXQgZGlhcmlvIGNvbiAyMCBjb21hbmRvcyBvIGFsZ28gYXPDrSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCisjfiBtc2dzdHIgIk5vIHNlIHB1ZG8gYWJyaXIgJyVzJyBwYXJhIGVzY3JpdHVyYSIKKworI34gbXNnaWQgIiIKKyN+ICJ1bmV4cGVjdGVkIDFzdCBsaW5lIG9mIHNxdWFzaCBtZXNzYWdlOlxuIgorI34gIlxuIgorI34gIlx0JS4qcyIKKyN+IG1zZ3N0ciAiIgorI34gIjFyYSBsw61uZWEgZGVsIG1lbnNhamUgc3F1YXNoIG5vIGVzcGVyYWRhOlxuIgorI34gIlxuIgorI34gIlx0JS4qcyIKKworI34gbXNnaWQgIiIKKyN+ICJpbnZhbGlkIDFzdCBsaW5lIG9mIHNxdWFzaCBtZXNzYWdlOlxuIgorI34gIlxuIgorI34gIlx0JS4qcyIKKyN+IG1zZ3N0ciAiIgorI34gIjFyYSBsw61uZWEgZGVsIG1lbnNhamUgc3F1YXNoIGludsOhbGlkYTpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisKKyN+IG1zZ2lkICJCVUc6IHJldHVybmVkIHBhdGggc3RyaW5nIGRvZXNuJ3QgbWF0Y2ggY3dkPyIKKyN+IG1zZ3N0ciAiQlVHOiBzdHJpbmcgZGUgcnV0YSByZWNpYmlkbyBubyBjb25jdWVyZGEgY29uIGN3ZD8iCisKKyN+IG1zZ2lkICJFcnJvciBpbiBvYmplY3QiCisjfiBtc2dzdHIgIkVycm9yIGVuIGVsIG9iamV0byIKKworI34gbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorI34gbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogc2UgZXNwZXJhYmEgQUNLL05BSywgc2Ugb2J0dXZvIEVPRiIKKworI34gbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgZXhwcmVzc2lvbiAnJXMnIgorI34gbXNnc3RyICJleHByZXNpw7NuIGZpbHRlci1zcGVjIGludsOhbGlkYSAnJXMnIgorCisjfiBtc2dpZCAiVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOiAlcyIKKyN+IG1zZ3N0ciAiTGEgY29waWEgZGVsIHBhcmNoZSBxdWUgZmFsbGlkbyBzZSBlbmN1ZW50cmEgZW46ICVzIgorCisjfiBtc2dpZCAicGF0aHNwZWMgYW5kIC0tYWxsIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgInBhdGhzcGVjIHkgLS1hbGwgc29uIGluY29tcGF0aWJsZXMiCisKKyN+IG1zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgdW5yZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorI34gbXNnc3RyICIiCisjfiAiQW51bGFkbyBlbCByZWdpc3RybyBkZWwgc3VibcOzZHVsbyAnJG5hbWUnICgkdXJsKSBwYXJhIGxhIHJ1dGEgIgorI34gIickZGlzcGxheXBhdGgnIgorCisjfiBtc2dpZCAiVG8vQ2MvQmNjIGZpZWxkcyBhcmUgbm90IGludGVycHJldGVkIHlldCwgdGhleSBoYXZlIGJlZW4gaWdub3JlZFxuIgorI34gbXNnc3RyICIiCisjfiAiQ2FtcG9zIFBhcmEvQ2MvQmNjIG5vIGhhbiBzaWRvIGludGVycHJldGFkb3MgdG9kYXbDrWEsIGhhbiBzaWRvIGlnbm9yYWRvc1xuIgorCisjfiBtc2dpZCAiIgorI34gImVtcHR5IHN0cmluZ3MgYXMgcGF0aHNwZWNzIHdpbGwgYmUgbWFkZSBpbnZhbGlkIGluIHVwY29taW5nIHJlbGVhc2VzLiAiCisjfiAicGxlYXNlIHVzZSAuIGluc3RlYWQgaWYgeW91IG1lYW50IHRvIG1hdGNoIGFsbCBwYXRocyIKKyN+IG1zZ3N0ciAiIgorI34gImxvcyBzdHJpbmdzIHZhY8Otb3MgY29tbyBwYXRoc3BlY3Mgc2Vyw6FuIGludsOhbGlkYXMgZW4gbGFzIHByw7N4aW1hcyAiCisjfiAidmVyc2lvbmVzLiBwb3IgZmF2b3IgdXNlIC4gc2kgcXVlcsOtYSBoYWNlciBjb2luY2lkaXIgdG9kYXMgbGFzIHJ1dGFzIgorCisjfiBtc2dpZCAiY291bGQgbm90IHRydW5jYXRlICclcyciCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gdHJ1bmNhciAnJXMnIgorCisjfiBtc2dpZCAiY291bGQgbm90IGNsb3NlICVzIgorI34gbXNnc3RyICJubyBzZSBwdWRvIGNlcnJhciAlcyIKKworI34gbXNnaWQgIkNvcGllZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCisjfiBtc2dzdHIgIkNvcGlhZGEgdW5hIHJhbWEgbWFsIGxsYW1hZGEgJyVzJyBhZnVlcmEiCisKKyN+IG1zZ2lkICJpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNyZWF0ZSAnSEVBRCcgbWFudWFsbHkiCisjfiBtc2dzdHIgIk5vIHRpZW5lIHNlbnRpZG8gY3JlYXIgJ0hFQUQnIG1hbnVhbG1lbnRlIgorCisjfiBtc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCisjfiBtc2dzdHIgIk5vIHNlIHNhYmUgY29tbyBjbG9uYXIgJXMiCisKKyN+IG1zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorI34gbXNnc3RyICJObyBzZSBzYWJlIGNvbW8gZXh0cmFlciBkZSAlcyIKKworI34gbXNnaWQgIickdGVybScgaXMgbm90IGEgdmFsaWQgdGVybSIKKyN+IG1zZ3N0ciAiJyR0ZXJtJyBubyBlcyB1biB0w6lybWlubyB2w6FsaWRvIgorCisjfiBtc2dpZCAiIgorI34gImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisjfiAiICAgICAgIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorI34gbXNnc3RyICIiCisjfiAiZXJyb3I6IG9wY2nDs24gZGVzY29ub2NpZGEgcGFyYSAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyN+ICIgICAgICAgRXN0byBwcm92ZWUgdW4gbWVuc2FqZSAsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCisjfiBtc2dzdHIgIkZhbGzDsyBhbCByZWN1cnJpciBlbiBsYSBydXRhIGRlIHN1Ym3Ds2R1bG8gJyRzbV9wYXRoJyIKKworI34gbXNnaWQgIiUlKHRyYWlsZXJzKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKKyN+IG1zZ3N0ciAiJSUodHJhaWxlcnMpIG5vIHRvbWEgYXJndW1lbnRvcyIKKworI34gbXNnaWQgInN1Ym1vZHVsZSB1cGRhdGUgc3RyYXRlZ3kgbm90IHN1cHBvcnRlZCBmb3Igc3VibW9kdWxlICclcyciCisjfiBtc2dzdHIgIiIKKyN+ICJlc3RyYXRlZ2lhIGRlIGFjdHVhbGl6YWNpw7NuIGRlIHN1Ym3Ds2R1bG8gbm8gc29wb3J0YWRhIHBhcmEgc3VibcOzZHVsbyAnJXMnIgorCisjfiBtc2dpZCAiY2hhbmdlIHVwc3RyZWFtIGluZm8iCisjfiBtc2dzdHIgImNhbWJpZSBpbmZvIGRlIHVwc3RyZWFtIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJTaSBxdWVyw61hcyBoYWNlciBxdWUgJyVzJyByYXN0cmVlICclcycsIGhheiBlc3RvOlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiYmFzZW5hbWUiCisjfiBtc2dzdHIgIm5vbWJyZSBiYXNlIgorCisjfiBtc2dpZCAiIgorI34gIldhcm5pbmc6IHRoZSBTSEEtMSBpcyBtaXNzaW5nIG9yIGlzbid0IGEgY29tbWl0IGluIHRoZSBmb2xsb3dpbmcgbGluZTpcbiIKKyN+ICIgLSAkbGluZSIKKyN+IG1zZ3N0ciAiIgorI34gIlBlbGlncm86IGZhbHRhIGVsIFNIQS0xIG8gbm8gZXMgdW4gY29tbWl0IGVuIGxhIHNpZ3VpZW50ZSBsw61uZWE6XG4iCisjfiAiIC0gJGxpbmUiCisKKyN+IG1zZ2lkICIiCisjfiAiV2FybmluZzogdGhlIGNvbW1hbmQgaXNuJ3QgcmVjb2duaXplZCBpbiB0aGUgZm9sbG93aW5nIGxpbmU6XG4iCisjfiAiIC0gJGxpbmUiCisjfiBtc2dzdHIgIiIKKyN+ICJQZWxpZ3JvOiBlbCBjb21hbmRvIG5vIGVzIHJlY29ub2NpZG8gZW4gbGEgc2lndWllbnRlIGzDrW5lYTpcbiIKKyN+ICIgLSAkbGluZSIKKworI34gbXNnaWQgIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLiIKKyN+IG1zZ3N0ciAiTyBwdWVkZXMgYWJvcnRhciBlbCByZWJhc2FtaWVudG8gY29uICdnaXQgcmViYXNlIC0tYWJvcnQnLiIKZGlmZiAtLWdpdCBhL3BvL2ZyLnBvIGIvcG8vZnIucG8KaW5kZXggMGFmZjE4Ni4uM2ZmNDRlNSAxMDA2NDQKLS0tIGEvcG8vZnIucG8KKysrIGIvcG8vZnIucG8KQEAgLTEsMjYwNCArMSwyNDY3MiBAQAotIyB0cmFuc2xhdGlvbiBvZiBmci5wbyB0byBGcmVuY2gKLSMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBGcmVuY2guCi0jIENvcHlyaWdodCAoQykgMjAwOCBTaGF3biBQZWFyY2UsIGV0IGFsLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0IHBhY2thZ2UuCisjIEZyZW5jaCB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgQ29weXJpZ2h0IChDKSAyMDE5IEplYW4tTm/Dq2wgQXZpbGEgPGpuLmF2aWxhQGZyZWUuZnI+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgSmVhbi1Ob8OrbCBBdmlsYSA8am4uYXZpbGFAZnJlZS5mcj4sIDIwMTMtMjAxOS4KKyMgU8OpYmFzdGllbiBIZWxsZXUgPGZsYXNoY29kZUBmbGFzaHR1eC5vcmc+LCAyMDEzLgogIwotIyBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz4sIDIwMDguCi0jIEFsZXhhbmRyZSBCb3VyZ2V0IDxhbGV4YW5kcmUuYm91cmdldEBzYXZvaXJmYWlyZWxpbnV4LmNvbT4sIDIwMDguCisjIEZyZW5jaCB0cmFuc2xhdGlvbnMgb2YgY29tbW9uIEdpdCB3b3JkcyB1c2VkIGluIHRoaXMgZmlsZToKKyMKKyMgICBFbmdsaXNoICAgICAgICAgIHwgIEZyZW5jaAorIyAgIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgIDMtd2F5IG1lcmdlICAgICAgfCAgZnVzaW9uIMOgIDMgcG9pbnRzCisjICAgI05OICAgICAgICAgICAgICB8ICBuwrBOTgorIyAgIGEgY29tbWl0ICAgICAgICAgfCAgdW4gY29tbWl0CisjICAgYmFja3dhcmQgICAgICAgICB8CisjICAgICBjb21wYXRpYmlsaXR5ICB8ICByw6l0cm9jb21wYXRpYmlsaXTDqQorIyAgIGJhcmUgcmVwb3NpdG9yeSAgfCAgZMOpcMO0dCBudQorIyAgIGJpc2VjdCAgICAgICAgICAgfCAgYmlzc2VjdGlvbgorIyAgIGJsb2IgICAgICAgICAgICAgfCAgYmxvYgorIyAgIGJ1ZyAgICAgICAgICAgICAgfCAgYm9ndWUKKyMgICBidW5kbGUgICAgICAgICAgIHwgIGNvbGlzCisjICAgYnlwYXNzICAgICAgICAgICB8ICDDqXZpdGVyIGQndXRpbGlzZXIKKyMgICB0byBjaGVja291dCAgICAgIHwgIGV4dHJhaXJlCisjICAgY2hlcnJ5LXBpY2sgICAgICB8ICBwaWNvcmVyCisjICAgdG8gY29tbWl0ICAgICAgICB8ICB2YWxpZGVyCisjICAgY29tbWl0LWlzaCAgICAgICB8ICBjb21taXQgb3UgYXBwYXJlbnTDqQorIyAgIGNvbmZpZyBmaWxlICAgICAgfCAgZmljaGllciBkZSBjb25maWd1cmF0aW9uCisjICAgZGFuZ2xpbmcgICAgICAgICB8ICBlbiBzdXNwZW5zCisjICAgdG8gZGVidWcgICAgICAgICB8ICBkw6lib2d1ZXIKKyMgICBkZWJ1Z2dpbmcgICAgICAgIHwgIGTDqWJvZ2FnZQorIyAgIHRvIGRlZmxhdGUgICAgICAgfCAgY29tcHJlc3NlcgorIyAgIGVtYWlsICAgICAgICAgICAgfCAgY291cnJpZWwKKyMgICBlbnRyeSAgICAgICAgICAgIHwgIMOpbMOpbWVudAorIyAgIGZhbm91dCAgICAgICAgICAgfCAgZGlzcGVyc2lvbgorIyAgIGZhc3QtZm9yd2FyZCAgICAgfCAgYXZhbmNlIHJhcGlkZQorIyAgIGZhc3QtZm9yd2FyZGVkICAgfCAgbWlzIMOgIGpvdXIgZW4gYXZhbmNlIHJhcGlkZQorIyAgIHRvIGZldGNoICAgICAgICAgfCAgcmFwYXRyaWVyCisjICAgZml4IGNvbmZsaWN0cyAgICB8ICByw6lnbGV6IGxlcyBjb25mbGl0cworIyAgIHRvIGZvcm1hdCAgICAgICAgfCAgZm9ybWF0ZXIKKyMgICBnbG9iICAgICAgICAgICAgIHwgIGdsb2IKKyMgICBoYXNoICAgICAgICAgICAgIHwgIGhhY2hhZ2UKKyMgICBIRUFEICAgICAgICAgICAgIHwgIEhFQUQgKGdlbnJlIGbDqW1pbmluKQorIyAgIGhvb2sgICAgICAgICAgICAgfCAgY3JvY2hldAorIyAgIGh1bmsgICAgICAgICAgICAgfCAgc2VjdGlvbgorIyAgIHRvIGluZmxhdGUgICAgICAgfCAgZMOpY29tcHJlc3NlcgorIyAgIHRvIGxpc3QgICAgICAgICAgfCAgYWZmaWNoZXIKKyMgICBtYXBwaW5nICAgICAgICAgIHwgIG1pc2UgZW4gY29ycmVzcG9uZGFuY2UKKyMgICBtZXJnZSAgICAgICAgICAgIHwgIGZ1c2lvbgorIyAgIHBhY2sgICAgICAgICAgICAgfCAgcGFxdWV0CisjICAgcGF0Y2hlcyAgICAgICAgICB8ICBwYXRjaHMKKyMgICBwYXR0ZXJuICAgICAgICAgIHwgIG1vdGlmCisjICAgdG8gcHJ1bmUgICAgICAgICB8ICDDqWxpbWluZXIKKyMgICB0byBwdXNoICAgICAgICAgIHwgIHBvdXNzZXIKKyMgICB0byByZWJhc2UgICAgICAgIHwgIHJlYmFzZXIKKyMgICB0cmFpbGVycyAgICAgICAgIHwgIGxpZ25lcyB0ZXJtaW5hbGVzCisjICAgcmVwb3NpdG9yeSAgICAgICB8ICBkw6lww7R0CisjICAgcmVtb3RlICAgICAgICAgICB8ICBkaXN0YW50ZSAob3Ugc2VydmV1ciBkaXN0YW50KQorIyAgIHJldmlzaW9uICAgICAgICAgfCAgcsOpdmlzaW9uCisjICAgc2hhbGxvdyAgICAgICAgICB8ICBzdXBlcmZpY2llbAorIyAgIHNoZWxsICAgICAgICAgICAgfCAgaW50ZXJwcsOpdGV1ciBkZSBjb21tYW5kZXMKKyMgICBzdGFzaCAgICAgICAgICAgIHwgIHJlbWlzYWdlCisjICAgdG8gc3Rhc2ggICAgICAgICB8ICByZW1pc2VyCisjICAgdGFnICAgICAgICAgICAgICB8ICDDqXRpcXVldHRlCisjICAgdGVtcGxhdGUgICAgICAgICB8ICBtb2TDqGxlCisjICAgdGhyZWFkICAgICAgICAgICB8ICBmaWwKKyMgICB0byB0cmFjayAgICAgICAgIHwgIHN1aXZyZQorIyAgIHRyZWUgICAgICAgICAgICAgfCAgYXJicmUKKyMgICB0cmVlLWlzaCAgICAgICAgIHwgIGFyYnJlIG91IGFwcGFyZW50w6kKKyMgICB0byB1bnN0YWdlICAgICAgIHwgIGTDqXNpbmRleGVyCisjICAgdXBzdHJlYW0gICAgICAgICB8ICBhbW9udAorIyAgIHZpZXdlciAgICAgICAgICAgfCAgdmlzdWFsaXNldXIKKyMgICB3b3JrdHJlZSAvICAgICAgIHwKKyMgICB3b3JrKGluZykgdHJlZSAgIHwgIGNvcGllIGRlIHRyYXZhaWwKKyMKIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGZyXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI2IDE1OjQ3LTA4MDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAyLTAyIDEyOjU5KzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPlxuIgotIkxhbmd1YWdlLVRlYW06IEZyZW5jaFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTktMTItMzAgMDg6NDgrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTktMTItMzEgMTc6MzcrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQ8OpZHJpYyBNYWxhcmQgPGMubWFsYXJkLWdpdEB2YWxkdW4ubmV0PlxuIgorIkxhbmd1YWdlLVRlYW06IEplYW4tTm/Dq2wgQXZpbGEgPGpuLmF2aWxhQGZyZWUuZnI+XG4iCisiTGFuZ3VhZ2U6IGZyXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKLSJQbHVyYWwtRm9ybXM6ICBucGx1cmFscz0yOyBwbHVyYWw9KG4gPiAxKTtcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uPD0xID8wIDogMTtcbiIKKyJYLUdlbmVyYXRvcjogUG9lZGl0IDIuMi4zXG4iCiAKLSM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKLSM6IGdpdC1ndWkuc2g6OTIyCi1tc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCi1tc2dzdHIgImdpdC1ndWk6IGVycmV1ciBmYXRhbGUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/IgorbXNnc3RyICJIZWluICglcynCoD8iCiAKLSM6IGdpdC1ndWkuc2g6NzQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCi1tc2dzdHIgIlBvbGljZSBpbnZhbGlkZSBzcMOpY2lmacOpZSBkYW5zICVzIDoiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1MDAgYWRkLWludGVyYWN0aXZlLmM6ODAxIHNlcXVlbmNlci5jOjMyMTYKKyM6IHNlcXVlbmNlci5jOjM2NTYgYnVpbHRpbi9yZWJhc2UuYzo4NzEgYnVpbHRpbi9yZWJhc2UuYzoxNjQzCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMTkgYnVpbHRpbi9yZWJhc2UuYzoyMDYzCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsJ2luZGV4IgogCi0jOiBnaXQtZ3VpLnNoOjc3OQotbXNnaWQgIk1haW4gRm9udCIKLW1zZ3N0ciAiUG9saWNlIHByaW5jaXBhbGUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNjkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk0Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICJiaW5haXJlIgogCi0jOiBnaXQtZ3VpLnNoOjc4MAotbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgotbXNnc3RyICJQb2xpY2UgZGlmZi9jb25zb2xlIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjEzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMzMgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgInJpZW4iCiAKLSM6IGdpdC1ndWkuc2g6Nzk0Ci1tc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgZ2l0IGRhbnMgUEFUSC4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTQKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzI5Cittc2dpZCAidW5jaGFuZ2VkIgorbXNnc3RyICJpbmNoYW5nw6kiCiAKLSM6IGdpdC1ndWkuc2g6ODIxCi1tc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCi1tc2dzdHIgIkltcG9zc2libGUgZGUgcGFyc2VyIGxhIHZlcnNpb24gZGUgR2l0IDoiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIk1pc2Ugw6Agam91ciIKIAotIzogZ2l0LWd1aS5zaDo4MzkKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY2OCBhZGQtaW50ZXJhY3RpdmUuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YWdlICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdpbmRleGVyICclcyciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3NCBhZGQtaW50ZXJhY3RpdmUuYzo4NjMgc2VxdWVuY2VyLmM6MzQwOQorIzogYnVpbHRpbi9yZWJhc2UuYzo4OTUKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGwnaW5kZXgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiJWQgY2hlbWluIG1pcyDDoCBqb3VyXG4iCittc2dzdHJbMV0gIiVkIGNoZW1pbnMgbWlzIMOgIGpvdXJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njk1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIgorbXNnc3RyICJub3RlwqA6ICVzIG4nZXN0IHBsdXMgc3Vpdmkgw6AgcHLDqXNlbnQuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcwMCBhcHBseS5jOjQxMDggYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbWFrZV9jYWNoZV9lbnRyeSBwb3VyIGxlIGNoZW1pbiAnJXMnIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NTUKK21zZ2lkICJSZXZlcnQiCittc2dzdHIgIkludmVyc2VyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NDYKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBIRUFEXnt0cmVlfSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Nzg0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjMxCisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIGNoZW1pbiBpbnZlcnPDqVxuIgorbXNnc3RyWzFdICIlZCBjaGVtaW5zIGludmVyc8Opc1xuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICJBdWN1biBGaWNoaWVyIG5vbiBzdWl2aS5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODM5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAiQWpvdXRlciB1biBmaWNoaWVyIG5vbi1zdWl2aSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODY2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIGNoZW1pbiBham91dMOpXG4iCittc2dzdHJbMV0gIiVkIGNoZW1pbnMgYWpvdXTDqXNcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAiZmljaGllciBub24tZnVzaW9ubsOpIGlnbm9yw6nCoDogJXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkwOCBhZGQtcGF0Y2guYzoxMzMxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICJTZXVscyBkZXMgZmljaGllcnMgYmluYWlyZXMgb250IGNoYW5nw6kuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxMCBhZGQtcGF0Y2guYzoxMzI5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICJBdWN1bmUgbW9kaWZpY2F0aW9uLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICJNaXNlIMOgIGpvdXIgcGFyIHBhdGNoIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIlLDqXZpc2VyIGxhIGRpZmbDqXJlbmNlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODEKK21zZ2lkICJzaG93IHBhdGhzIHdpdGggY2hhbmdlcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGNoZW1pbnMgY29tcHJlbmFudCBkZXMgbW9kaWZpY2F0aW9ucyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTgzCittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICJham91dGVyIGwnw6l0YXQgZGUgbCdhcmJyZSBkZSB0cmF2YWlsIMOgIGwnZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMgaW5kZXjDqWVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODUKK21zZ2lkICJyZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbiIKK21zZ3N0ciAicmV0b3VybmVyIGwnZW5zZW1ibGUgZGUgbW9kaWZpY2F0aW9ucyBpbmRleMOpZXMgw6AgbGEgdmVyc2lvbiBIRUFEIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODcKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgInPDqWxlY3Rpb24gZXQgbWlzZSDDoCBqb3VyIGluZGl2aWR1ZWxsZSBkZXMgc2VjdGlvbnMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4OQorbXNnaWQgInZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJ2aXN1YWxpc2VyIGxlcyBkaWZmcyBlbnRyZSBIRUFEIGV0IGwnaW5kZXgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk5MQorbXNnaWQgImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiYWpvdXRlciBsZSBjb250ZW51IGRlcyBmaWNoaWVycyBub24tc3VpdmlzIMOgIGwnZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMgaW5kZXjDqWVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTkgYWRkLWludGVyYWN0aXZlLmM6MTA0OAorbXNnaWQgIlByb21wdCBoZWxwOiIKK21zZ3N0ciAiQWlkZcKgOiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMQorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICJzw6lsZWN0aW9ubmVyIHVuIHNldWwgw6lsw6ltZW50IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAzCittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgInPDqWxlY3Rpb25uZXIgdW5lIHBsYWdlIGQnw6lsw6ltZW50cyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNQorbXNnaWQgInNlbGVjdCBtdWx0aXBsZSByYW5nZXMiCittc2dzdHIgInPDqWxlY3Rpb25uZXIgcGx1c2lldXJzIHBsYWdlcyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNyBhZGQtaW50ZXJhY3RpdmUuYzoxMDUyCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAic8OpbGVjdGlvbm5lciB1biDDqWzDqW1lbnQgYmFzw6kgc3VyIHVuZSBwcsOpZml4ZSB1bmlxdWUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDkKK21zZ2lkICJ1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMiCittc2dzdHIgImTDqXPDqWxlY3Rpb25uZXIgbGVzIMOpbMOpbWVudHMgc3DDqWNpZmnDqXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTEKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICJjaG9pc2lyIHRvdXMgbGVzIMOpbMOpbWVudHMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTMKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIih2aWRlKSBhcnLDqnRlciBkZSBzw6lsZWN0aW9ubmVyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDUwCittc2dpZCAic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIKK21zZ3N0ciAic8OpbGVjdGlvbm5lciB1biDDqWzDqW1lbnQgcGFyIHNvbiBudW3DqXJvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDU0Cittc2dpZCAiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiKHZpZGUpIG5lIHJpZW4gc8OpbGVjdGlvbm5lciIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA2MiBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBDb21tYW5kZXMgKioqIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDYzIGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODQ4Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIkV0IG1haW50ZW5hbnQgPyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAiaW5kZXjDqSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICJub24taW5kZXjDqSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBhcHBseS5jOjQ5NjUgYXBwbHkuYzo0OTY4IGJ1aWx0aW4vYW0uYzoyMTk3CisjOiBidWlsdGluL2FtLmM6MjIwMCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzMgYnVpbHRpbi9wdWxsLmM6MjA5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICJjaGVtaW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMjIKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByYWZyYcOuY2hpciBsJ2luZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAiQXUgcmV2b2lyLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiSW5kZXhlciBsZSBjaGFuZ2VtZW50IGRlIG1vZGUgW3ksbixhLHEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIkluZGV4ZXIgbGEgc3VwcHJlc3Npb24gW3ksbixhLHEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICJJbmRleGVyIGNldHRlIHNlY3Rpb24gW3ksbixhLHEsZCVzLD9dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ2VudMOqdGUgZGUgc2VjdGlvbiAnJS4qcyciCisKKyM6IGFkZC1wYXRjaC5jOjEzMCBhZGQtcGF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlIGNvbG9yw6kgZGUgc2VjdGlvbiAnJS4qcyciCisKKyM6IGFkZC1wYXRjaC5jOjE3NgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBkaWZmIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGEgZGlmZiIKKworIzogYWRkLXBhdGNoLmM6MTk0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxhIGRpZmYgY29sb3LDqWUiCisKKyM6IGFkZC1wYXRjaC5jOjUwOAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCi0iXG4iCi0iJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKLSJcbiIKLSIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCi0iXG4iCi0iQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKIG1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgZMOpdGVybWluZXIgbGEgdmVyc2lvbiBkZSBHaXQuXG4iCi0iXG4iCi0iJXMgYWZmaXJtZSBxdSdpbCBzJ2FnaXQgZGUgbGEgdmVyc2lvbiAnJXMnLlxuIgotIlxuIgotIiVzIG7DqWNlc3NpdGUgYXUgbW9pbnMgR2l0IDEuNS4wLlxuIgotIlxuIgotIlBldXQtb24gY29uc2lkw6lyZXIgcXVlICclcycgZXN0IGVuIHZlcnNpb24gMS41LjAgP1xuIgorImxpZ25lIGRlIGNvbnRleHRlIGF0dGVuZHVlICMlZCBkYW5zXG4iCisiJS4qcyIKIAotIzogZ2l0LWd1aS5zaDoxMTI4Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgcsOpcGVydG9pcmUgZ2l0IDoiCi0KLSM6IGdpdC1ndWkuc2g6MTE0NgotbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCi1tc2dzdHIgIkltcG9zc2libGUgZCdhbGxlciDDoCBsYSByYWNpbmUgZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCA6IgotCi0jOiBnaXQtZ3VpLnNoOjExNTQKLW1zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCi1tc2dzdHIgIkltcG9zc2libGUgZCd1dGlsaXNlciB1biBkw6lww7R0IG51IChiYXJlKSA6IgotCi0jOiBnaXQtZ3VpLnNoOjExNjIKLW1zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiQXVjdW4gcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKLQotIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2Ci1tc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKLW1zZ3N0ciAiUmFmcmHDrmNoaXNzZW1lbnQgZHUgc3RhdHV0IGRlcyBmaWNoaWVycy4uLiIKLQotIzogZ2l0LWd1aS5zaDoxMzkwCi1tc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKLW1zZ3N0ciAiUmVjaGVyY2hlIGRlIGZpY2hpZXJzIG1vZGlmacOpcy4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNDU0Ci1tc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAiTGFuY2VtZW50IGRlIGwnYWN0aW9uIGRlIHByw6lwYXJhdGlvbiBkdSBtZXNzYWdlIGRlIGNvbW1pdC4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNDcxCi1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiQ29tbWl0IHJlZnVzw6kgcGFyIGwnYWN0aW9uIGRlIHByw6lwYXJhdGlvbiBkdSBtZXNzYWdlIGRlIGNvbW1pdC4iCi0KLSM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2Ci1tc2dpZCAiUmVhZHkuIgotbXNnc3RyICJQcsOqdC4iCi0KLSM6IGdpdC1ndWkuc2g6MTc4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCi1tc2dzdHIgIkFmZmljaGUgc2V1bGVtZW50ICVzIGZpY2hpZXJzIHN1ciAlcy4iCi0KLSM6IGdpdC1ndWkuc2g6MTkxMwotbXNnaWQgIlVubW9kaWZpZWQiCi1tc2dzdHIgIk5vbiBtb2RpZmnDqSIKLQotIzogZ2l0LWd1aS5zaDoxOTE1Ci1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIk1vZGlmacOpLCBwYXMgaW5kZXjDqSIKLQotIzogZ2l0LWd1aS5zaDoxOTE2IGdpdC1ndWkuc2g6MTkyNAotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICJJbmRleMOpIgotCi0jOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Ci1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIlBvcnRpb25zIGluZGV4w6llcyIKLQotIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICJJbmRleMOpcywgbWFucXVhbnQiCi0KLSM6IGdpdC1ndWkuc2g6MTkyMAotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJMZSB0eXBlIGRlIGZpY2hpZXIgYSBjaGFuZ8OpLCBub24gaW5kZXjDqSIKLQotIzogZ2l0LWd1aS5zaDoxOTIxCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKLW1zZ3N0ciAiTGUgdHlwZSBkZSBmaWNoaWVyIGEgY2hhbmfDqSwgaW5kZXjDqSIKLQotIzogZ2l0LWd1aS5zaDoxOTIzCi1tc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJOb24gdmVyc2lvbm7DqSwgbm9uIGluZGV4w6kiCi0KLSM6IGdpdC1ndWkuc2g6MTkyOAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgIk1hbnF1YW50IgotCi0jOiBnaXQtZ3VpLnNoOjE5MjkKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCi1tc2dzdHIgIkluZGV4w6kgcG91ciBzdXBwcmVzc2lvbiIKLQotIzogZ2l0LWd1aS5zaDoxOTMwCi1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgotbXNnc3RyICJJbmRleMOpIHBvdXIgc3VwcHJlc3Npb24sIHRvdWpvdXJzIHByw6lzZW50IgotCi0jOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKLSM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKLW1zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgotbXNnc3RyICJOw6ljZXNzaXRlIGxhIHLDqXNvbHV0aW9uIGQndW5lIGZ1c2lvbiIKLQotIzogZ2l0LWd1aS5zaDoxOTcyCi1tc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiTGFuY2VtZW50IGRlIGdpdGsuLi4gdW4gaW5zdGFudC4uLiIKLQotIzogZ2l0LWd1aS5zaDoxOTg0Ci1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCi1tc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBnaXRrIGRhbnMgUEFUSC4iCi0KLSM6IGdpdC1ndWkuc2g6MjA0MwotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgZ2l0IGd1aSBkYW5zIFBBVEgiCi0KLSM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Ci1tc2dpZCAiUmVwb3NpdG9yeSIKLW1zZ3N0ciAiRMOpcMO0dCIKLQotIzogZ2l0LWd1aS5zaDoyNDU2Ci1tc2dpZCAiRWRpdCIKLW1zZ3N0ciAiw4lkaXRpb24iCi0KLSM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCi1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJCcmFuY2hlIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAotbXNnaWQgIkNvbW1pdEBAbm91biIKLW1zZ3N0ciAiQ29tbWl0IgotCi0jOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAiRnVzaW9ubmVyIgotCi0jOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NwotbXNnaWQgIlJlbW90ZSIKLW1zZ3N0ciAiRMOpcMO0dCBkaXN0YW50IgotCi0jOiBnaXQtZ3VpLnNoOjI0NjgKLW1zZ2lkICJUb29scyIKLW1zZ3N0ciAiT3V0aWxzIgotCi0jOiBnaXQtZ3VpLnNoOjI0NzcKLW1zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKLW1zZ3N0ciAiRXhwbG9yZXIgbGEgY29waWUgZGUgdHJhdmFpbCIKLQotIzogZ2l0LWd1aS5zaDoyNDgzCi1tc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCi1tc2dzdHIgIk5hdmlndWVyIGRhbnMgbGEgYnJhbmNoZSBjb3VyYW50ZSIKLQotIzogZ2l0LWd1aS5zaDoyNDg3Ci1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKLW1zZ3N0ciAiTmF2aWd1ZXIgZGFucyBsYSBicmFuY2hlLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI0OTIKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICJWaXN1YWxpc2VyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIGNvdXJhbnRlIgotCi0jOiBnaXQtZ3VpLnNoOjI0OTYKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgotbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIGJyYW5jaGVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKLW1zZ3N0ciAiUGFyY291cmlyIGwnYXJib3Jlc2NlbmNlIGRlICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1MDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgotbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIDogJXMiCi0KLSM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKLW1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICJTdGF0aXN0aXF1ZXMgZHUgZMOpcMO0dCIKLQotIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKLW1zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKLW1zZ3N0ciAiQ29tcHJpbWVyIGxlIGTDqXDDtHQiCi0KLSM6IGdpdC1ndWkuc2g6MjUxNgotbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKLW1zZ3N0ciAiVsOpcmlmaWVyIGxlIGTDqXDDtHQiCi0KLSM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAotIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAiQ3LDqWVyIHVuZSBpY8O0bmUgc3VyIGxlIGJ1cmVhdSIKLQotIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCi1tc2dpZCAiUXVpdCIKLW1zZ3N0ciAiUXVpdHRlciIKLQotIzogZ2l0LWd1aS5zaDoyNTQ3Ci1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAiRMOpZmFpcmUiCi0KLSM6IGdpdC1ndWkuc2g6MjU1MAotbXNnaWQgIlJlZG8iCi1tc2dzdHIgIlJlZmFpcmUiCi0KLSM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKLW1zZ2lkICJDdXQiCi1tc2dzdHIgIkNvdXBlciIKLQotIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5Ci0jOiBsaWIvY29uc29sZS50Y2w6NjkKLW1zZ2lkICJDb3B5IgotbXNnc3RyICJDb3BpZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAiQ29sbGVyIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAotbXNnaWQgIkRlbGV0ZSIKLW1zZ3N0ciAiU3VwcHJpbWVyIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICJUb3V0IHPDqWxlY3Rpb25uZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjU3NgotbXNnaWQgIkNyZWF0ZS4uLiIKLW1zZ3N0ciAiQ3LDqWVyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODIKLW1zZ2lkICJDaGVja291dC4uLiIKLW1zZ3N0ciAiQ2hhcmdlciAoY2hlY2tvdXQpLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODgKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIlJlbm9tbWVyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI1OTMKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIlN1cHByaW1lci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTk4Ci1tc2dpZCAiUmVzZXQuLi4iCi1tc2dzdHIgIlLDqWluaXRpYWxpc2VyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI2MDgKLW1zZ2lkICJEb25lIgotbXNnc3RyICJFZmZlY3R1w6kiCi0KLSM6IGdpdC1ndWkuc2g6MjYxMAotbXNnaWQgIkNvbW1pdEBAdmVyYiIKLW1zZ3N0ciAiQ29tbWl0ZXJAQHZlcmIiCi0KLSM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKLW1zZ2lkICJOZXcgQ29tbWl0IgotbXNnc3RyICJOb3V2ZWF1IGNvbW1pdCIKLQotIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NwotbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgotbXNnc3RyICJDb3JyaWdlciBkZXJuaWVyIGNvbW1pdCIKLQotIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Ci1tc2dpZCAiUmVzY2FuIgotbXNnc3RyICJSZWNoYXJnZXIgbW9kaWZzLiIKLQotIzogZ2l0LWd1aS5zaDoyNjQzCi1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICJJbmRleGVyIgotCi0jOiBnaXQtZ3VpLnNoOjI2NDkKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAiSW5kZXhlciB0b3V0ZXMgbW9kaWZpY2F0aW9ucyIKLQotIzogZ2l0LWd1aS5zaDoyNjU1Ci1tc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiRMOpc2luZGV4ZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgotbXNnaWQgIlJldmVydCBDaGFuZ2VzIgotbXNnc3RyICJBbm51bGVyIGxlcyBtb2RpZmljYXRpb25zIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQotbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgotbXNnc3RyICJNb250cmVyIG1vaW5zIGRlIGNvbnRleHRlIgotCi0jOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQotbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgotbXNnc3RyICJNb250cmVyIHBsdXMgZGUgY29udGV4dGUiCi0KLSM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCi1tc2dpZCAiU2lnbiBPZmYiCi1tc2dzdHIgIlNpZ25lciIKLQotIzogZ2l0LWd1aS5zaDoyNjk2Ci1tc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCi1tc2dzdHIgIkZ1c2lvbiBsb2NhbGUuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjcwMQotbXNnaWQgIkFib3J0IE1lcmdlLi4uIgotbXNnc3RyICJBYmFuZG9ubmVyIGZ1c2lvbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQotbXNnaWQgIkFkZC4uLiIKLW1zZ3N0ciAiQWpvdXRlci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzE3Ci1tc2dpZCAiUHVzaC4uLiIKLW1zZ3N0ciAiUG91c3Nlci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzIxCi1tc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKLW1zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKLW1zZ2lkICJPcHRpb25zLi4uIgotbXNnc3RyICJPcHRpb25zLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3NDIKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIlN1cHByaW1lci4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJBaWRlIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3V0ICVzIgotbXNnc3RyICLDgCBwcm9wb3MgZGUgJXMiCi0KLSM6IGdpdC1ndWkuc2g6Mjc4MwotbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgotbXNnc3RyICJEb2N1bWVudGF0aW9uIGVuIGxpZ25lIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Ci1tc2dpZCAiU2hvdyBTU0ggS2V5IgotbXNnc3RyICJNb250cmVyIGxhIGNsw6kgU1NIIgotCi0jOiBnaXQtZ3VpLnNoOjI4OTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLW1zZ3N0ciAiIgotImVycmV1ciBmYXRhbGUgOiBwYXMgZCdpbmZvcyBzdXIgbGUgY2hlbWluICVzIDogRmljaGllciBvdSByw6lwZXJ0b2lyZSAiCi0iaW5leGlzdGFudCIKLQotIzogZ2l0LWd1aS5zaDoyOTI2Ci1tc2dpZCAiQ3VycmVudCBCcmFuY2g6IgotbXNnc3RyICJCcmFuY2hlIGNvdXJhbnRlIDoiCi0KLSM6IGdpdC1ndWkuc2g6Mjk0NwotbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCi1tc2dzdHIgIk1vZGlmcy4gaW5kZXjDqWVzIChwb3VyIGNvbW1pdCkiCi0KLSM6IGdpdC1ndWkuc2g6Mjk2NwotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgIk1vZGlmcy4gbm9uIGluZGV4w6llcyIKLQotIzogZ2l0LWd1aS5zaDozMDE3Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAiSW5kZXhlciBtb2RpZnMuIgotCi0jOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MwotbXNnaWQgIlB1c2giCi1tc2dzdHIgIlBvdXNzZXIiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MQotbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIDoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MgotbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBjb3JyaWfDqSA6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzMKLW1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIGNvcnJpZ8OpIDoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3NAotbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gY29ycmlnw6kgOiIKLQotIzogZ2l0LWd1aS5zaDozMDc1Ci1tc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gOiIKLQotIzogZ2l0LWd1aS5zaDozMDc2Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCA6IgotCi0jOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MwotbXNnaWQgIkNvcHkgQWxsIgotbXNnc3RyICJDb3BpZXIgdG91dCIKLQotIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgIkZpY2hpZXIgOiIKLQotIzogZ2l0LWd1aS5zaDozMjU1Ci1tc2dpZCAiUmVmcmVzaCIKLW1zZ3N0ciAiUmFmcmHDrmNoaXIiCi0KLSM6IGdpdC1ndWkuc2g6MzI3NgotbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAiRGltaW51ZXIgbGEgcG9saWNlIgotCi0jOiBnaXQtZ3VpLnNoOjMyODAKLW1zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCi1tc2dzdHIgIkFncmFuZGlyIGxhIHBvbGljZSIKLQotIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCi1tc2dpZCAiRW5jb2RpbmciCi1tc2dzdHIgIkNvZGFnZSBkZXMgY2FyYWN0w6hyZXMiCi0KLSM6IGdpdC1ndWkuc2g6MzI5OQotbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKLW1zZ3N0ciAiQXBwbGlxdWVyL0ludmVyc2VyIHNlY3Rpb24iCi0KLSM6IGdpdC1ndWkuc2g6MzMwNAotbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKLW1zZ3N0ciAiQXBwbGlxdWVyL0ludmVyc2VyIGxhIGxpZ25lIgotCi0jOiBnaXQtZ3VpLnNoOjMzMjMKLW1zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKLW1zZ3N0ciAiTGFuY2VyIGwnb3V0aWwgZGUgZnVzaW9uIgotCi0jOiBnaXQtZ3VpLnNoOjMzMjgKLW1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCi1tc2dzdHIgIlV0aWxpc2VyIGxhIHZlcnNpb24gZGlzdGFudGUiCi0KLSM6IGdpdC1ndWkuc2g6MzMzMgotbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgotbXNnc3RyICJVdGlsaXNlciBsYSB2ZXJzaW9uIGxvY2FsZSIKLQotIzogZ2l0LWd1aS5zaDozMzM2Ci1tc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCi1tc2dzdHIgIlJldmVuaXIgw6AgbGEgdmVyc2lvbiBkZSBiYXNlIgotCi0jOiBnaXQtZ3VpLnNoOjMzNTQKLW1zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJWb2lyIGxlcyBjaGFuZ21lbnRzIGRhbnMgbGUgc291cy1tb2R1bGUiCi0KLSM6IGdpdC1ndWkuc2g6MzM1OAotbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZvaXIgbCdoaXN0b3JpcXVlIGRlIGxhIGJyYW5jaGUgY291cmFudGUgZHUgc291cy1tb2R1bGUiCi0KLSM6IGdpdC1ndWkuc2g6MzM2MgotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiVm9pciBsJ2hpc3RvcmlxdWUgZGUgdG91dGVzIGxlcyBicmFuY2hlcyBkdSBzb3VzLW1vZHVsZSIKLQotIzogZ2l0LWd1aS5zaDozMzY3Ci1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJEw6ltYXJyZXIgZ2l0IGd1aSBkYW5zIGxlIHNvdXMtbW9kdWxlIgotCi0jOiBnaXQtZ3VpLnNoOjMzODkKLW1zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCi1tc2dzdHIgIkTDqXNpbmRleGVyIGxhIHNlY3Rpb24iCi0KLSM6IGdpdC1ndWkuc2g6MzM5MQotbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCi1tc2dzdHIgIkTDqXNpbmRleGVyIGxhIGxpZ25lIGR1IGNvbW1pdCIKLQotIzogZ2l0LWd1aS5zaDozMzkzCi1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICJEw6lzaW5kZXhlciBsYSBsaWduZSIKLQotIzogZ2l0LWd1aS5zaDozMzk2Ci1tc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgotbXNnc3RyICJJbmRleGVyIGxhIHNlY3Rpb24iCi0KLSM6IGdpdC1ndWkuc2g6MzM5OAotbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCi1tc2dzdHIgIkluZGV4ZXIgbGVzIGxpZ25lcyIKLQotIzogZ2l0LWd1aS5zaDozNDAwCi1tc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgotbXNnc3RyICJJbmRleGVyIGxhIGxpZ25lIgotCi0jOiBnaXQtZ3VpLnNoOjM0MjQKLW1zZ2lkICJJbml0aWFsaXppbmcuLi4iCi1tc2dzdHIgIkluaXRpYWxpc2F0aW9uLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjM1NDEKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjUyMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJsZXMgc2VjdGlvbnMgbmUgc2UgcmVjb3V2cmVudCBwYXPCoDpcbiIKKyIlLipzXG4iCisiXHRuZSBzZSB0ZXJtaW5lIHBhcyBwYXLCoDpcbiIKKyIlLipzIgorCisjOiBhZGQtcGF0Y2guYzo3OTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTEyCittc2dpZCAiTWFudWFsIGh1bmsgZWRpdCBtb2RlIC0tIHNlZSBib3R0b20gZm9yIGEgcXVpY2sgZ3VpZGUuXG4iCittc2dzdHIgIiIKKyJNb2RlIGQnw6lkaXRpb24gbWFudWVsbGUgZGUgc2VjdGlvbiAtLSB2b2lyIGNpLWRlc3NvdXMgcG91ciB1biBndWlkZSByYXBpZGUuXG4iCisKKyM6IGFkZC1wYXRjaC5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVjIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIlBvdXIgw6lsaW1pbmVyIGxlcyBsaWduZXMgJyVjJywgcmVuZGV6LWxlcyAnICcgKGNvbnRleHRlKS5cbiIKKyJQb3VyIMOpbGltaW5lciBsZXMgbGlnbmVzICclYycsIGVmZmFjZXotbGVzLlxuIgorIkxlcyBsaWduZXMgY29tbWVuw6dhbnQgcGFyICVjIHNlcm9udCDDqWxpbWluw6llcy5cbiIKKworIzogYWRkLXBhdGNoLmM6ODEwCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLlxuIgorbXNnc3RyICIiCisiU2kgbGUgcGF0Y2ggcydhcHBsaXF1ZSBwcm9wcmVtZW50LCBsYSBzZWN0aW9uIMOpZGl0w6llIHNlcmFcbiIKKyJpbW3DqWRpYXRlbWVudCBtYXJxdcOpZSBjb21tZSBpbmRleMOpZS5cbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogYWRkLXBhdGNoLmM6ODE4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTEyNgorbXNnaWQgIiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorIlNpIMOnYSBuZSBzJ2FwcGxpcXVlIHBhcyBwcm9wcmVtZW50LCB2b3VzIGF1cmV6IGxhIHBvc3NpYmlsaXTDqSBkZVxuIgorImwnw6lkaXRlciDDoCBub3V2ZWF1LiBTaSB0b3V0ZXMgbGVzIGxpZ25lcyBkZSBsYSBzZWN0aW9uIHNvbnQgc3VwcHJpbcOpZXMsXG4iCisiYWxvcnMgbCfDqWRpdGlvbiBzZXJhIGFiYW5kb25uw6llIGV0IGxhIHNlY3Rpb24gY29uc2VydsOpZS5cbiIKKworIzogYWRkLXBhdGNoLmM6ODUxCittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlIGRlIHNlY3Rpb24iCisKKyM6IGFkZC1wYXRjaC5jOjg5NSBhZGQtcGF0Y2guYzoxMjk0Cittc2dpZCAiJ2dpdCBhcHBseSAtLWNhY2hlZCcgZmFpbGVkIgorbXNnc3RyICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBhIMOpY2hvdcOpIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6OTUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAiIgorIlZvdHJlIHNlY3Rpb24gw6lkaXTDqWUgbmUgcydhcHBsaXF1ZSBwYXMuIEwnw6lkaXRlciDDoCBub3V2ZWF1IChcIm5vXCIgIgorImwnw6lsaW1pbmXCoCEpIFt5fG5dwqA/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwOQorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgYW5kIGFsbCB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCittc2dzdHIgIiIKKyJ5IC0gaW5kZXhlciBjZXR0ZSBzZWN0aW9uXG4iCisibiAtIG5lIHBhcyBpbmRleGVyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgaW5kZXhlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIGluZGV4ZXIgY2V0dGUgc2VjdGlvbiBldCB0b3V0ZXMgbGVzIHN1aXZhbnRlc1xuIgorImQgLSBuZSBwYXMgaW5kZXhlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXNcbiIKKworIzogYWRkLXBhdGNoLmM6MTAxNgorbXNnaWQgIiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImogLSBsYWlzc2VyIGNldHRlIHNlY3Rpb24gbm9uIGTDqWNpZMOpZSBldCBhbGxlciDDoCBsYSBzdWl2YW50ZSBub24tZMOpY2lkw6llXG4iCisiSiAtIGxhaXNzZXIgY2V0dGUgc2VjdGlvbiBub24gZMOpY2lkw6llIGV0IGFsbGVyIMOgIGxhIHN1aXZhbnRlXG4iCisiayAtIGxhaXNzZXIgY2V0dGUgc2VjdGlvbiBub24gZMOpY2lkw6llIGV0IGFsbGVyIMOgIGxhIHByw6ljw6lkZW50ZSBub24tZMOpY2lkw6llXG4iCisiSyAtIGxhaXNzZXIgY2V0dGUgc2VjdGlvbiBub24gZMOpY2lkw6llIGV0IGFsbGVyIMOgIGxhIHByw6ljw6lkZW50ZVxuIgorImcgLSBzw6lsZWN0aW9ubmVyIHVuZSBzZWN0aW9uIGV0IHMneSByZW5kcmVcbiIKKyIvIC0gcmVjaGVyY2hlciB1bmUgc2VjdGlvbiBjb3JyZXNwb25kYW50IMOgIHVuZSByZWdleCBkb25uw6llXG4iCisicyAtIGTDqWNvdXBlciBsYSBzZWN0aW9uIGVuIHNlY3Rpb25zIHBsdXMgcGV0aXRlc1xuIgorImUgLSDDqWRpdGVyIG1hbnVlbGxlbWVudCBsYSBzZWN0aW9uIGFjdHVlbGxlXG4iCisiPyAtIGFmZmljaGVyIGwnYWlkZVxuIgorCisjOiBhZGQtcGF0Y2guYzoxMTM3IGFkZC1wYXRjaC5jOjExNDcKK21zZ2lkICJObyBwcmV2aW91cyBodW5rIgorbXNnc3RyICJQYXMgZGUgc2VjdGlvbiBwcsOpY8OpZGVudGUiCisKKyM6IGFkZC1wYXRjaC5jOjExNDIgYWRkLXBhdGNoLmM6MTE1MgorbXNnaWQgIk5vIG5leHQgaHVuayIKK21zZ3N0ciAiUGFzIGRlIHNlY3Rpb24gc3VpdmFudGUiCisKKyM6IGFkZC1wYXRjaC5jOjExNTgKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvIgorbXNnc3RyICJBdWN1bmUgYXV0cmUgc2VjdGlvbiDDoCBhdHRlaW5kcmUiCisKKyM6IGFkZC1wYXRjaC5jOjExNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc3Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgImFsbGVyIMOgIHF1ZWxsZSBzZWN0aW9uICg8cmV0PiBwb3VyIHZvaXIgcGx1cynCoD8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTcwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAiYWxsZXIgw6AgcXVlbGxlIHNlY3Rpb27CoD8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnIgorbXNnc3RyICJOdW3DqXJvIGludmFsaWRlIDogJyVzJyIKKworIzogYWRkLXBhdGNoLmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS4iCittc2dzdHJbMF0gIkTDqXNvbMOpLCAlZCBzZXVsZSBzZWN0aW9uIGRpc3BvbmlibGUuIgorbXNnc3RyWzFdICJEw6lzb2zDqSwgU2V1bGVtZW50ICVkIHNlY3Rpb25zIGRpc3BvbmlibGVzLiIKKworIzogYWRkLXBhdGNoLmM6MTE5NQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAiYXVjdW5lIGF1dHJlIHNlY3Rpb24gw6AgcmVjaGVyY2hlciIKKworIzogYWRkLXBhdGNoLmM6MTIwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MjMKK21zZ2lkICJzZWFyY2ggZm9yIHJlZ2V4PyAiCittc2dzdHIgInJlY2hlcmNoZXIgbGEgcmVnZXjCoD8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAiUmVnZXggZGUgcmVjaGVyY2hlIG1hbGZvcm3DqWUgJXPCoDogJXMiCisKKyM6IGFkZC1wYXRjaC5jOjEyMzMKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iCittc2dzdHIgIkF1Y3VuZSBzZWN0aW9uIG5lIGNvcnJlc3BvbmQgYXUgbW90aWYgZG9ubsOpIgorCisjOiBhZGQtcGF0Y2guYzoxMjQwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIkTDqXNvbMOpLCBpbXBvc3NpYmxlIGRlIGTDqWNvdXBlciBjZXR0ZSBzZWN0aW9uIgorCisjOiBhZGQtcGF0Y2guYzoxMjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVua3MuIgorbXNnc3RyICJEw6ljb3Vww6llIGVuICVkIHNlY3Rpb25zLiIKKworIzogYWRkLXBhdGNoLmM6MTI0OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgIkTDqXNvbMOpLCBpbXBvc3NpYmxlIGQnw6lkaXRlciBjZXR0ZSBzZWN0aW9uIgorCisjOiBhZHZpY2UuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXNhc3R1Y2U6ICUuKnMlc1xuIgorCisjOiBhZHZpY2UuYzoxNjQKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgcGljb3JlciBjYXIgdm91cyBhdmV6IGRlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcy4iCisKKyM6IGFkdmljZS5jOjE2NgorbXNnaWQgIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHZhbGlkZXIgY2FyIHZvdXMgYXZleiBkZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMuIgorCisjOiBhZHZpY2UuYzoxNjgKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmdXNpb25uZXIgY2FyIHZvdXMgYXZleiBkZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMuIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0aXJlciBjYXIgdm91cyBhdmV6IGRlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcy4iCisKKyM6IGFkdmljZS5jOjE3MgorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIkltcG9zc2libGUgZCdhbm51bGVyIGNhciB2b3VzIGF2ZXogZGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzLiIKKworIzogYWR2aWNlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIHBvc3NpYmxlIGNhciB2b3VzIGF2ZXogZGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzLiIKKworIzogYWR2aWNlLmM6MTgyCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIkNvcnJpZ2V6LWxlcyBwdWlzIGxhbmNleiAnZ2l0IGFkZC9ybSA8ZmljaGllcj4nXG4iCisic2kgbsOpY2Vzc2FpcmUgcG91ciBtYXJxdWVyIGxhIHLDqXNvbHV0aW9uIGV0IHZhbGlkZXIuIgorCisjOiBhZHZpY2UuYzoxOTAKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIkFiYW5kb24gw6AgY2F1c2UgZGUgY29uZmxpdCBub24gcsOpc29sdS4iCisKKyM6IGFkdmljZS5jOjE5NSBidWlsdGluL21lcmdlLmM6MTMzMgorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiVm91cyBuJ2F2ZXogcGFzIHRlcm1pbsOpIHZvdHJlIGZ1c2lvbiAoTUVSR0VfSEVBRCBleGlzdGUpLiIKKworIzogYWR2aWNlLmM6MTk3Cittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiVmV1aWxsZXogdmFsaWRlciB2b3MgY2hhbmdlbWVudHMgYXZhbnQgZGUgZnVzaW9ubmVyLiIKKworIzogYWR2aWNlLmM6MTk4Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICJBYmFuZG9uIMOgIGNhdXNlIGQndW5lIGZ1c2lvbiBub24gdGVybWluw6llLiIKKworIzogYWR2aWNlLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBzd2l0Y2hpbmcgdG8gJyVzJy5cbiIKICJcbiIKLSJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKLSJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKLSJieSAlczpcbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgorImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorIk9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIlR1cm4gb2ZmIHRoaXMgYWR2aWNlIGJ5IHNldHRpbmcgY29uZmlnIHZhcmlhYmxlIGFkdmljZS5kZXRhY2hlZEhlYWQgdG8gIgorImZhbHNlXG4iCiAiXG4iCiBtc2dzdHIgIiIKLSJEZXMgcHJvYmzDqG1lcyBkJ2Vudmlyb25uZW1lbnQgc29udCBwb3NzaWJsZXMuXG4iCisiTm90ZcKgOiBiYXNjdWxlbWVudCBzdXIgJyVzJy5cbiIKICJcbiIKLSJMZXMgdmFyaWFibGVzIGQnZW52aXJvbm5lbWVudCBzdWl2YW50ZXMgc2Vyb250XG4iCi0icHJvYmFibGVtZW50IGlnbm9yw6llcyBwYXIgdG91cyBsZXNcbiIKLSJzb3VzLXByb2Nlc3N1cyBkZSBHaXQgbGFuY8OpcyBwYXIgJXNcbiIKKyJWb3VzIMOqdGVzIGRhbnMgbCfDqXRhdCDCq8KgSEVBRCBkw6l0YWNow6llwqDCuy4gVm91cyBwb3V2ZXogdmlzaXRlciwgZmFpcmUgZGVzICIKKyJtb2RpZmljYXRpb25zXG4iCisiZXhww6lyaW1lbnRhbGVzIGV0IGxlcyB2YWxpZGVyLiBJbCB2b3VzIHN1ZmZpdCBkZSBmYWlyZSB1biBhdXRyZSBiYXNjdWxlbWVudCAiCisicG91clxuIgorImFiYW5kb25uZXIgbGVzIGNvbW1pdHMgcXVlIHZvdXMgZmFpdGVzIGRhbnMgY2V0IMOpdGF0IHNhbnMgaW1wYWN0ZXIgbGVzICIKKyJhdXRyZXMgYnJhbmNoZXNcbiIKKyJcbiIKKyJTaSB2b3VzIHZvdWxleiBjcsOpZXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUgcG91ciBjb25zZXJ2ZXIgbGVzIGNvbW1pdHMgcXVlICIKKyJ2b3VzIGNyw6lleixcbiIKKyJpbCB2b3VzIHN1ZmZpdCBkJ3V0aWxpc2VyIGwnb3B0aW9uIC1jIGRlIGxhIGNvbW1hbmRlIHN3aXRjaCBjb21tZSBjZWNpwqA6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxub20tZGUtbGEtbm91dmVsbGUtYnJhbmNoZT5cbiIKKyJcbiIKKyJPdSBhbm51bGVyIGNldHRlIG9ww6lyYXRpb24gYXZlY8KgOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiRMOpc2FjdGl2ZXogY2UgY29uc2VpbCBlbiByZW5zZWlnbmFudCBsYSB2YXJpYWJsZSBkZSBjb25maWd1cmF0aW9uIGFkdmljZS4iCisiZGV0YWNoZWRIZWFkIMOgIGZhbHNlXG4iCiAiXG4iCiAKLSM6IGdpdC1ndWkuc2g6MzU3MAorIzogYWxpYXMuYzo1MAorbXNnaWQgImNtZGxpbmUgZW5kcyB3aXRoIFxcIgorbXNnc3RyICJjbWRsaW5lIHNlIHRlcm1pbmUgcGFyIFxcIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgImNpdGF0aW9uIG5vbiBmZXJtw6llIgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJvcHRpb24gZCdlc3BhY2Ugbm9uIHJlY29ubnVlICclcyciCisKKyM6IGFwcGx5LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJvcHRpb24gZCdpZ25vcmFuY2UgZCdlc3BhY2Ugbm9uIHJlY29ubnVlICclcyciCisKKyM6IGFwcGx5LmM6MTM1Cittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0IGV0IC0tM3dheSBuZSBwZXV2ZW50IHBhcyDDqnRyZSB1dGlsaXPDqXMgZW5zZW1ibGUuIgorCisjOiBhcHBseS5jOjEzNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCBldCAtLTN3YXkgbmUgcGV1dmVudCBwYXMgw6p0cmUgdXRpbGlzw6lzIGVuc2VtYmxlLiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSBob3JzIGQndW4gZMOpcMO0dCIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IGhvcnMgZCd1biBkw6lww7R0IgorCisjOiBhcHBseS5jOjE1NAorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCBob3JzIGQndW4gZMOpcMO0dCIKKworIzogYXBwbHkuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBwcsOpcGFyZXIgbGEgcmVnZXhwIGQnaG9yb2RhdGFnZSAlcyIKKworIzogYXBwbHkuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIGEgcmV0b3VybsOpICVkIHBvdXIgbCdlbnRyw6llIDogJXMiCisKKyM6IGFwcGx5LmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIm5vbSBkZSBmaWNoaWVyIGR1IHBhdGNoIGludHJvdXZhYmxlIMOgIGxhIGxpZ25lICVkIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHkgOiBtYXV2YWlzIGZvcm1hdCBkZSBnaXQtZGlmZiAtIC9kZXYvbnVsbCBhdHRlbmR1LCAlcyB0cm91dsOpIMOgIGxhICIKKyJsaWduZSAlZCIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHkgOiBtYXV2YWlzIGZvcm1hdCBkZSBnaXQtZGlmZiAtIG5vdXZlYXUgbm9tIGRlIGZpY2hpZXIgaW5jb25zaXN0YW50ICIKKyLDoCBsYSBsaWduZSAlZCIKKworIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHkgOiBtYXV2YWlzIGZvcm1hdCBkZSBnaXQtZGlmZiAtIGFuY2llbiBub20gZGUgZmljaGllciBpbmNvbnNpc3RhbnQgIgorIsOgIGxhIGxpZ25lICVkIgorCisjOiBhcHBseS5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5IDogbWF1dmFpcyBmb3JtYXQgZGUgZ2l0LWRpZmYgLSAvZGV2L251bGwgYXR0ZW5kdSDDoCBsYSBsaWduZSAlZCIKKworIzogYXBwbHkuYzo5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIG9uIGxpbmUgJWQ6ICVzIgorbXNnc3RyICJtb2RlIGludmFsaWRlIGRhbnMgbGEgbGlnbmUgJWTCoDogJXMiCisKKyM6IGFwcGx5LmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIKK21zZ3N0ciAibGlnbmVzIGQnZW50w6p0ZSBpbmNvbnNpc3RhbnRlcyAlZCBldCAlZCIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIiIKKyJpbmZvcm1hdGlvbiBkZSBub20gZGUgZmljaGllciBtYW5xdWFudGUgZGFucyBsJ2VuLXTDqnRlIGRlIGdpdCBkaWZmIGxvcnMgZGUgIgorImxhIHN1cHByZXNzaW9uIGRlICVkIGNvbXBvc2FudCBkZSBwcsOpZml4ZSBkZSBjaGVtaW4gKGxpZ25lICVkKSIKK21zZ3N0clsxXSAiIgorImluZm9ybWF0aW9uIGRlIG5vbSBkZSBmaWNoaWVyIG1hbnF1YW50ZSBkYW5zIGwnZW4tdMOqdGUgZGUgZ2l0IGRpZmYgbG9ycyBkZSAiCisibGEgc3VwcHJlc3Npb24gZGUgJWQgY29tcG9zYW50cyBkZSBwcsOpZml4ZSBkZSBjaGVtaW4gKGxpZ25lICVkKSIKKworIzogYXBwbHkuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiCittc2dzdHIgIiIKKyJpbmZvcm1hdGlvbiBkZSBub20gZGUgZmljaGllciBtYW5xdWFudGUgZGFucyBsJ2VuLXTDqnRlIGRlIGdpdCBkaWZmIChsaWduZSAlZCkiCisKKyM6IGFwcGx5LmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY29tcHRhZ2UgOiBsaWduZSBpbmF0dGVuZHVlIDogJS4qcyIKKworIzogYXBwbHkuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImZyYWdtZW50IGRlIHBhdGNoIHNhbnMgZW4tdMOqdGUgw6AgbGEgbGlnbmUgJWQgOiAlLipzIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibGUgbm91dmVhdSBmaWNoaWVyIGTDqXBlbmQgZGUgY29udGVudXMgYW5jaWVucyIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAibGUgZmljaGllciBzdXBwcmltw6kgYSBlbmNvcmUgZHUgY29udGVudSIKKworIzogYXBwbHkuYzoxNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggY29ycm9tcHUgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibGUgbm91dmVhdSBmaWNoaWVyICVzIGTDqXBlbmQgZGUgY29udGVudXMgYW5jaWVucyIKKworIzogYXBwbHkuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImxlIGZpY2hpZXIgc3VwcHJpbcOpICVzIGEgZW5jb3JlIGR1IGNvbnRlbnUiCisKKyM6IGFwcGx5LmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiBhdHRlbnRpb24gOiBsZSBmaWNoaWVyICVzIGRldmllbnQgdmlkZSBtYWlzIG4nZXN0IHBhcyBzdXBwcmltw6kiCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJwYXRjaCBiaW5haXJlIGNvcnJvbXB1IMOgIGxhIGxpZ25lICVkIDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggYmluYWlyZSBub24gcmVjb25udSDDoCBsYSBsaWduZSAlZCIKKworIzogYXBwbHkuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIHRvdGFsZW1lbnQgaW5jb21wcsOpaGVuc2libGUgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGFwcGx5LmM6MjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICJsZWN0dXJlIGR1IGxpZW4gc3ltYm9saXF1ZSAlcyBpbXBvc3NpYmxlIgorCisjOiBhcHBseS5jOjIyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAib3V2ZXJ0dXJlIG91IGxlY3R1cmUgZGUgJXMgaW1wb3NzaWJsZSIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiZMOpYnV0IGRlIGxpZ25lIGludmFsaWRlIDogJyVjJyIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiTGEgc2VjdGlvbiBuwrAlZCBhIHLDqXVzc2kgw6AgbGEgbGlnbmUgJWQgKG9mZnNldCAlZCBsaWduZSkuIgorbXNnc3RyWzFdICJMYSBzZWN0aW9uIG7CsCVkIGEgcsOpdXNzaSDDoCBsYSBsaWduZSAlZCAob2Zmc2V0ICVkIGxpZ25lcykuIgorCisjOiBhcHBseS5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiQ29udGV4dGUgcsOpZHVpdCDDoCAoJWxkLyVsZCkgcG91ciBhcHBsaXF1ZXIgbGUgZnJhZ21lbnQgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGFwcGx5LmM6MzA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisicGVuZGFudCBsYSByZWNoZXJjaGUgZGUgOlxuIgorIiUuKnMiCisKKyM6IGFwcGx5LmM6MzA5NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICJkb25uw6llcyBkZSBwYXRjaCBiaW5haXJlIG1hbnF1YW50ZXMgcG91ciAnJXMnIgorCisjOiBhcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGQnYXBwbGlxdWVyIGwnaW52ZXJzZSBkJ3VuIHBhdGNoIGJpbmFpcmUgw6AgJyVzJyBzYW5zIGxhIHNlY3Rpb24gIgorImludmVyc2UiCisKKyM6IGFwcGx5LmM6MzE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGQnYXBwbGlxdWVyIHVuIHBhdGNoIGJpbmFpcmUgw6AgJyVzJyBzYW5zIGxhIGxpZ25lIGNvbXBsw6h0ZSBkJ2luZGV4IgorCisjOiBhcHBseS5jOjMxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICIiCisibGUgcGF0Y2ggcydhcHBsaXF1ZSDDoCAnJXMnICglcyksIGNlIHF1aSBuZSBjb3JyZXNwb25kIHBhcyBhdSBjb250ZW51IGFjdHVlbC4iCisKKyM6IGFwcGx5LmM6MzE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgImxlIHBhdGNoIHMnYXBwbGlxdWUgw6AgdW4gJyVzJyB2aWRlIG1haXMgY2Ugbidlc3QgcGFzIHZpZGUiCisKKyM6IGFwcGx5LmM6MzE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAibCdpbWFnZSBwb3N0w6lyaWV1cmUgbsOpY2Vzc2FpcmUgJXMgcG91ciAnJXMnIG5lIHBldXQgcGFzIMOqdHJlIGx1ZSIKKworIzogYXBwbHkuYzozMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJsZSBwYXRjaCBiaW5haXJlIG5lIHMnYXBwbGlxdWUgcGFyIGNvcnJlY3RlbWVudCDDoCAnJXMnIgorCisjOiBhcHBseS5jOjMyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJsZSBwYXRjaCBiaW5haXJlIHN1ciAnJXMnIGNyw6llIHVuIHLDqXN1bHRhdCBpbmNvcnJlY3QgKCVzIGF0dGVuZHUsIG1haXMgJXMgIgorInRyb3V2w6kpIgorCisjOiBhcHBseS5jOjMyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgImxlIHBhdGNoIGEgw6ljaG91w6kgOiAlczolbGQiCisKKyM6IGFwcGx5LmM6MzM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImV4dHJhY3Rpb24gZGUgJXMgaW1wb3NzaWJsZSIKKworIzogYXBwbHkuYzozNDAzIGFwcGx5LmM6MzQxNCBhcHBseS5jOjM0NjAgbWlkeC5jOjYxIHNldHVwLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgbGVjdHVyZSBkZSAlcyIKKworIzogYXBwbHkuYzozNDExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImxlY3R1cmUgZGVwdWlzICclcycgYXUtZGVsw6AgZCd1biBsaWVuIHN5bWJvbGlxdWUiCisKKyM6IGFwcGx5LmM6MzQ0MCBhcHBseS5jOjM2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgImxlIGNoZW1pbiAlcyBhIMOpdMOpIHJlbm9tbcOpL3N1cHByaW3DqSIKKworIzogYXBwbHkuYzozNTI2IGFwcGx5LmM6MzY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzIDogbidleGlzdGUgcGFzIGRhbnMgbCdpbmRleCIKKworIzogYXBwbHkuYzozNTM1IGFwcGx5LmM6MzcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzIDogbmUgY29ycmVzcG9uZCBwYXMgw6AgbCdpbmRleCIKKworIzogYXBwbHkuYzozNTcwCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorImxlIGTDqXDDtHQgbidhIHBhcyBsZXMgYmxvYnMgbsOpY2Vzc2FpcmVzIHBvdXIgdW4gcmV0b3VyIMOgIHVuZSBmdXNpb24gw6AgMyAiCisicG9pbnRzLiIKKworIzogYXBwbHkuYzozNTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiUmV0b3VyIMOgIHVuZSBmdXNpb24gw6AgMyBwb2ludHPigKZcbiIKKworIzogYXBwbHkuYzozNTg5IGFwcGx5LmM6MzU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgY29udGVudSBhY3R1ZWwgZGUgJyVzJyIKKworIzogYXBwbHkuYzozNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIsOJY2hlYyBkdSByZXRvdXIgw6AgdW5lIGZ1c2lvbiDDoCAzIHBvaW50c+KAplxuIgorCisjOiBhcHBseS5jOjM2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICJQYXRjaCAlcyBhcHBsaXF1w6kgYXZlYyBkZXMgY29uZmxpdHMuXG4iCisKKyM6IGFwcGx5LmM6MzYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgY2xlYW5seS5cbiIKK21zZ3N0ciAiUGF0Y2ggJXMgYXBwbGlxdcOpIHByb3ByZW1lbnQuXG4iCisKKyM6IGFwcGx5LmM6MzY1MAorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgImxlIHBhdGNoIGRlIHN1cHByZXNzaW9uIGxhaXNzZSB1biBjb250ZW51IGRhbnMgbGUgZmljaGllciIKKworIzogYXBwbHkuYzozNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlcyA6IHR5cGUgZXJyb27DqSIKKworIzogYXBwbHkuYzozNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgZXN0IGRlIHR5cGUgJW8sIG1haXMgJW8gYXR0ZW5kdSIKKworIzogYXBwbHkuYzozODc2IGFwcGx5LmM6Mzg3OCByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICJjaGVtaW4gaW52YWxpZGUgJyVzJyIKKworIzogYXBwbHkuYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXMgOiBleGlzdGUgZMOpasOgIGRhbnMgbCdpbmRleCIKKworIzogYXBwbHkuYzozOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgOiBleGlzdGUgZMOpasOgIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYXBwbHkuYzozOTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAibGUgbm91dmVhdSBtb2RlICglbykgZGUgJXMgbmUgY29ycmVzcG9uZCBwYXMgw6AgbCdhbmNpZW4gbW9kZSAoJW8pIgorCisjOiBhcHBseS5jOjM5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICIiCisibGUgbm91dmVhdSBtb2RlICglbykgZGUgJXMgbmUgY29ycmVzcG9uZCBwYXMgw6AgbCdhbmNpZW4gbW9kZSAoJW8pIGRlICVzIgorCisjOiBhcHBseS5jOjM5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImxlIGZpY2hpZXIgYWZmZWN0w6kgJyVzJyBlc3QgYXUtZGVsw6AgZCd1biBsaWVuIHN5bWJvbGlxdWUiCisKKyM6IGFwcGx5LmM6Mzk4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzIDogbGUgcGF0Y2ggbmUgcydhcHBsaXF1ZSBwYXMiCisKKyM6IGFwcGx5LmM6NDAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkdSBwYXRjaCAlcy4uLiIKKworIzogYXBwbHkuYzo0MDkzCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIiIKKyJsJ2luZm9ybWF0aW9uIHNoYTEgZXN0IG1hbnF1YW50ZSBvdSBpbnV0aWxpc2FibGUgcG91ciBsZSBzb3VzLW1vZHVsZSAlcyIKKworIzogYXBwbHkuYzo0MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAibGUgbW9kZSBjaGFuZ2UgcG91ciAlcywgcXVpIG4nZXN0IHBhcyBkYW5zIGxhIEhFQUQgYWN0dWVsbGUiCisKKyM6IGFwcGx5LmM6NDEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAibCdpbmZvcm1hdGlvbiBkZSBzaGExIGVzdCBtYW5xdWFudGUgb3UgaW51dGlsaXNhYmxlICglcykuIgorCisjOiBhcHBseS5jOjQxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFkZCAlcyB0byB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImltcG9zc2libGUgZCdham91dGVyICVzIMOgIGwnaW5kZXggdGVtcG9yYWlyZSIKKworIzogYXBwbHkuYzo0MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGwnaW5kZXggdGVtcG9yYWlyZSBkYW5zICVzIgorCisjOiBhcHBseS5jOjQyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJzdXBwcmVzc2lvbiBkZSAlcyBkYW5zIGwnaW5kZXggaW1wb3NzaWJsZSIKKworIzogYXBwbHkuYzo0Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAicGF0Y2ggY29ycm9tcHUgcG91ciBsZSBzb3VzLW1vZHVsZSAlcyIKKworIzogYXBwbHkuYzo0MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJzdGF0IGR1IGZpY2hpZXIgbm91dmVsbGVtZW50IGNyw6nDqSAnJXMnIGltcG9zc2libGUiCisKKyM6IGFwcGx5LmM6NDMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgorImNyw6lhdGlvbiBkdSBtYWdhc2luIGRlIHN0b2NrYWdlIHBvdXIgbGUgZmljaGllciBub3V2ZWxsZW1lbnQgY3LDqcOpICVzICIKKyJpbXBvc3NpYmxlIgorCisjOiBhcHBseS5jOjQzMTQgYXBwbHkuYzo0NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJham91dCBkZSBsJ8OpbMOpbWVudCBkZSBjYWNoZSAlcyBpbXBvc3NpYmxlIgorCisjOiBhcHBseS5jOjQzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBsJ8OpY3JpdHVyZSBkYW5zICclcyciCisKKyM6IGFwcGx5LmM6NDM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiZmVybWV0dXJlIGR1IGZpY2hpZXIgJyVzJyIKKworIzogYXBwbHkuYzo0NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAiw6ljcml0dXJlIGR1IGZpY2hpZXIgJyVzJyBtb2RlICVvIGltcG9zc2libGUiCisKKyM6IGFwcGx5LmM6NDUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJQYXRjaCAlcyBhcHBsaXF1w6kgcHJvcHJlbWVudC4iCisKKyM6IGFwcGx5LmM6NDUzNworbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICJlcnJldXIgaW50ZXJuZSIKKworIzogYXBwbHkuYzo0NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiQXBwbGljYXRpb24gZHUgcGF0Y2ggJSVzIGF2ZWMgJWQgcmVqZXQuLi4iCittc2dzdHJbMV0gIkFwcGxpY2F0aW9uIGR1IHBhdGNoICUlcyBhdmVjICVkIHJlamV0cy4uLiIKKworIzogYXBwbHkuYzo0NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAidHJvbmNhdHVyZSBkdSBub20gZGUgZmljaGllciAucmVqIGVuICUuKnMucmVqIgorCisjOiBhcHBseS5jOjQ1NTkgYnVpbHRpbi9mZXRjaC5jOjkwMSBidWlsdGluL2ZldGNoLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAlcyIKKworIzogYXBwbHkuYzo0NTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIlNlY3Rpb24gbsKwJWQgYXBwbGlxdcOpZSBwcm9wcmVtZW50LiIKKworIzogYXBwbHkuYzo0NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiU2VjdGlvbiBuwrAlZCByZWpldMOpZS4iCisKKyM6IGFwcGx5LmM6NDY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkIHBhdGNoICclcycuIgorbXNnc3RyICJDaGVtaW4gJyVzJyBub24gdHJhaXTDqS4iCisKKyM6IGFwcGx5LmM6NDcwNAorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiZW50csOpZSBub24gcmVjb25udWUiCisKKyM6IGFwcGx5LmM6NDcyNAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgImxlY3R1cmUgZHUgZmljaGllciBkJ2luZGV4IGltcG9zc2libGUiCisKKyM6IGFwcGx5LmM6NDg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIHBhdGNoICclcyc6ICVzIgorbXNnc3RyICJvdXZlcnR1cmUgaW1wb3NzaWJsZSBkdSBwYXRjaCAnJXMnwqA6JXMiCisKKyM6IGFwcGx5LmM6NDkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICIlZCBlcnJldXIgZCdlc3BhY2UgaWdub3LDqWUiCittc2dzdHJbMV0gIiVkIGVycmV1cnMgZCdlc3BhY2UgaWdub3LDqWVzIgorCisjOiBhcHBseS5jOjQ5MTQgYXBwbHkuYzo0OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIGxpZ25lIGEgYWpvdXTDqSBkZXMgZXJyZXVycyBkJ2VzcGFjZS4iCittc2dzdHJbMV0gIiVkIGxpZ25lcyBvbnQgYWpvdXTDqSBkZXMgZXJyZXVycyBkJ2VzcGFjZS4iCisKKyM6IGFwcGx5LmM6NDkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBsaWduZSBham91dMOpZSBhcHLDqHMgY29ycmVjdGlvbiBkZXMgZXJyZXVycyBkJ2VzcGFjZS4iCittc2dzdHJbMV0gIiVkIGxpZ25lcyBham91dMOpZXMgYXByw6hzIGNvcnJlY3Rpb24gZGVzIGVycmV1cnMgZCdlc3BhY2UuIgorCisjOiBhcHBseS5jOjQ5MzggYnVpbHRpbi9hZGQuYzo1NzkgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6MzkwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBub3V2ZWF1IGZpY2hpZXIgZCdpbmRleCIKKworIzogYXBwbHkuYzo0OTY2Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAibmUgcGFzIGFwcGxpcXVlciBsZXMgbW9kaWZpY2F0aW9ucyBxdWkgY29ycmVzcG9uZGVudCBhdSBjaGVtaW4gZG9ubsOpIgorCisjOiBhcHBseS5jOjQ5NjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJhcHBsaXF1ZXIgbGVzIG1vZGlmaWNhdGlvbnMgcXVpIGNvcnJlc3BvbmRlbnQgYXUgY2hlbWluIGRvbm7DqSIKKworIzogYXBwbHkuYzo0OTcxIGJ1aWx0aW4vYW0uYzoyMjA2Cittc2dpZCAibnVtIgorbXNnc3RyICJudW0iCisKKyM6IGFwcGx5LmM6NDk3MgorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJzdXBwcmltZXIgPG51bT4gYmFycmVzIG9ibGlxdWVzIGRlcyBjaGVtaW5zIHRyYWRpdGlvbm5lbHMgZGUgZGlmZiIKKworIzogYXBwbHkuYzo0OTc1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JlciBsZXMgYWRkaXRpb25zIHLDqWFsaXPDqWVzIHBhciBsZSBwYXRjaCIKKworIzogYXBwbHkuYzo0OTc3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJhdSBsaWV1IGQnYXBwbGlxdWVyIGxlIHBhdGNoLCBhZmZpY2hlciBsZSBkaWZmc3RhdCBkZSBsJ2VudHLDqWUiCisKKyM6IGFwcGx5LmM6NDk4MQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZSBub21icmUgZGUgbGlnbmVzIGFqb3V0w6llcyBldCBzdXBwcmltw6llcyBlbiBub3RhdGlvbiBkw6ljaW1hbGUiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImF1IGxpZXUgZCdhcHBsaXF1ZXIgbGUgcGF0Y2gsIGFmZmljaGVyIHVuIHLDqXN1bcOpIGRlIGwnZW50csOpZSIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiYXUgbGlldSBkJ2FwcGxpcXVlciBsZSBwYXRjaCwgdm9pciBzaSBsZSBwYXRjaCBlc3QgYXBwbGljYWJsZSIKKworIzogYXBwbHkuYzo0OTg3Cittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJzJ2Fzc3VyZXIgcXVlIGxlIHBhdGNoIGVzdCBhcHBsaWNhYmxlIHN1ciBsJ2luZGV4IGFjdHVlbCIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICJtYXJxdWVyIGxlcyBub3V2ZWF1eCBmaWNoaWVycyBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiYXBwbGlxdWVyIGxlcyBwYXRjaCBzYW5zIHRvdWNoZXIgw6AgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYXBwbHkuYzo0OTkzCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiYWNjZXB0ZXIgdW4gcGF0Y2ggcXVpIHRvdWNoZSBob3JzIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGFwcGx5LmM6NDk5NgorbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICJhcHBsaXF1ZXIgYXVzc2kgbGUgcGF0Y2ggKMOgIHV0aWxpc2VyIGF2ZWMgLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAidGVudGVyIHVuZSBmdXNpb24gw6AgMyBwb2ludHMgc2kgbGUgcGF0Y2ggbmUgcydhcHBsaXF1ZSBwYXMgcHJvcHJlbWVudCIKKworIzogYXBwbHkuYzo1MDAwCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyJjb25zdHJ1aXJlIHVuIGluZGV4IHRlbXBvcmFpcmUgZm9uZMOpIHN1ciBsJ2luZm9ybWF0aW9uIGRlIGwnaW5kZXggZW1iYXJxdcOpIgorCisjOiBhcHBseS5jOjUwMDMgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImxlcyBjaGVtaW5zIHNvbnQgc8OpcGFyw6lzIHBhciB1biBjYXJhY3TDqHJlIE5VTCIKKworIzogYXBwbHkuYzo1MDA1Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICJzJ2Fzc3VyZXIgZCdhdSBtb2lucyA8bj4gbGlnbmVzIGRlIGNvcnJlc3BvbmRhbmNlIGRlIGNvbnRleHRlIgorCisjOiBhcHBseS5jOjUwMDYgYnVpbHRpbi9hbS5jOjIxODUgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OAorIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDAgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxMCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImFjdGlvbiIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKyJkw6l0ZWN0ZXIgZGVzIGxpZ25lcyBub3V2ZWxsZXMgb3UgbW9kaWZpw6llcyBxdWkgY29udGllbm5lbnQgZGVzIGVycmV1cnMgIgorImQnZXNwYWNlIgorCisjOiBhcHBseS5jOjUwMTAgYXBwbHkuYzo1MDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiaWdub3JlciBkZXMgbW9kaWZpY2F0aW9ucyBkJ2VzcGFjZSBsb3JzIGRlIGxhIHJlY2hlcmNoZSBkZSBjb250ZXh0ZSIKKworIzogYXBwbHkuYzo1MDE2Cittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgImFwcGxpcXVlciBsZSBwYXRjaCBlbiBzZW5zIGludmVyc2UiCisKKyM6IGFwcGx5LmM6NTAxOAorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICJuZSBwYXMgcydhdHRlbmRyZSDDoCBhdSBtb2lucyB1bmUgbGlnbmUgZGUgY29udGV4dGUiCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICJsYWlzc2VyIGxlcyBzZWN0aW9ucyByZWpldMOpZXMgZGFucyBsZXMgZmljaGllcnMgKi5yZWogY29ycmVzcG9uZGFudHMiCisKKyM6IGFwcGx5LmM6NTAyMgorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICJhY2NlcHRlciBsZXMgcmVjb3V2cmVtZW50cyBkZSBzZWN0aW9ucyIKKworIzogYXBwbHkuYzo1MDIzIGJ1aWx0aW4vYWRkLmM6MzA5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NSBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5OCBidWlsdGluL2ZzY2suYzo3NzQKKyM6IGJ1aWx0aW4vbG9nLmM6MjE2NiBidWlsdGluL212LmM6MTIzIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAibW9kZSB2ZXJiZXV4IgorCisjOiBhcHBseS5jOjUwMjUKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorInRvbMOpcmVyIGRlcyBlcnJldXJzIGRlIGTDqXRlY3Rpb24gZGUgcmV0b3VycyBjaGFyaW90IG1hbnF1YW50cyBlbiBmaW4gZGUgIgorImZpY2hpZXIiCisKKyM6IGFwcGx5LmM6NTAyOAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAibmUgcGFzIHNlIGZpZXIgYXUgY29tcHRlIGRlIGxpZ25lcyBkYW5zIGxlcyBlbi10w6p0ZXMgZGUgc2VjdGlvbiIKKworIzogYXBwbHkuYzo1MDMwIGJ1aWx0aW4vYW0uYzoyMTk0Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicmFjaW5lIgorCisjOiBhcHBseS5jOjUwMzEKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICJwcsOpZml4ZXIgdG91cyBsZXMgbm9tcyBkZSBmaWNoaWVyIGF2ZWMgPHJvb3Q+IgorCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8YXJicmUgb3UgYXBwYXJlbnTDqT4gWzxjaGVtaW4+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxkw6lww7R0PiBbLS1leGVjIDxjb21tYW5kZT5dIFs8b3B0aW9ucz5dIDxhcmJyZSBvdSAiCisiYXBwYXJlbnTDqT4gWzxjaGVtaW4+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE3Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGTDqXDDtHQ+IFstLWV4ZWMgPGNvbW1hbmRlPl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTgwIGJ1aWx0aW4vYWRkLmM6NTU1IGJ1aWx0aW4vcm0uYzoyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAibGUgY2hlbWluICclcycgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBmaWNoaWVyIgorCisjOiBhcmNoaXZlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmOiAlLipzIgorbXNnc3RyICJyw6lmw6lyZW5jZSBpbmV4aXN0YW50ZcKgOiAlLipzIgorCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAibm9tIGQnb2JqZXQgaW52YWxpZGUgOiAlcyIKKworIzogYXJjaGl2ZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB0cmVlIG9iamVjdDogJXMiCittc2dzdHIgIm9iamV0IGFyYnJlIGludmFsaWRlwqA6ICVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgImwnYXJicmUgZGUgdHJhdmFpbCBhY3R1ZWwgZXN0IG5vbi1zdWl2aSIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAiZm10IgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgImZvcm1hdCBkJ2FyY2hpdmUiCisKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9sb2cuYzoxNjUzCittc2dpZCAicHJlZml4IgorbXNnc3RyICJwcsOpZml4ZSIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgInByw6lmaXhlciBjaGFxdWUgY2hlbWluIGRlIGZpY2hpZXIgZGFucyBsJ2FyY2hpdmUiCisKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMjkgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg5OQorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCittc2dzdHIgImZpY2hpZXIiCisKKyM6IGFyY2hpdmUuYzo0NjEgYnVpbHRpbi9hcmNoaXZlLmM6OTAKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgIsOpY3JpcmUgbCdhcmNoaXZlIGRhbnMgY2UgZmljaGllciIKKworIzogYXJjaGl2ZS5jOjQ2MworbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImxpcmUgLmdpdGF0dHJpYnV0ZXMgZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIgorCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIGFyY2hpdsOpcyBzdXIgc3RkZXJyIgorCisjOiBhcmNoaXZlLmM6NDY1Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAic3RvY2thZ2Ugc2V1bGVtZW50IgorCisjOiBhcmNoaXZlLmM6NDY2Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJjb21wcmVzc2lvbiByYXBpZGUiCisKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImNvbXByZXNzaW9uIGVmZmljYWNlIgorCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgZm9ybWF0cyBkJ2FyY2hpdmUgc3VwcG9ydMOpcyIKKworIzogYXJjaGl2ZS5jOjQ3OSBidWlsdGluL2FyY2hpdmUuYzo5MSBidWlsdGluL2Nsb25lLmM6MTEzIGJ1aWx0aW4vY2xvbmUuYzoxMTYKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzkxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg0Cittc2dpZCAicmVwbyIKK21zZ3N0ciAiZMOpcMO0dCIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICJyw6ljdXDDqXJlciBsJ2FyY2hpdmUgZGVwdWlzIGxlIGTDqXDDtHQgZGlzdGFudCA8ZMOpcMO0dD4iCisKKyM6IGFyY2hpdmUuYzo0ODEgYnVpbHRpbi9hcmNoaXZlLmM6OTMgYnVpbHRpbi9kaWZmdG9vbC5jOjcxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgImNvbW1hbmRlIgorCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICJjaGVtaW4gdmVycyBsYSBjb21tYW5kZSBkaXN0YW50ZSBnaXQtdXBsb2FkLWFyY2hpdmUiCisKKyM6IGFyY2hpdmUuYzo0ODkKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIKK21zZ3N0ciAiT3B0aW9uIC0tcmVtb3RlIGluYXR0ZW5kdWUiCisKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiTCdvcHRpb24gLS1leGVjIG5lIHBldXQgw6p0cmUgdXRpbGlzw6llIHF1J2VuIGNvbXBsw6ltZW50IGRlIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIk9wdGlvbiAtLW91dHB1dCBpbmF0dGVuZHVlIgorCisjOiBhcmNoaXZlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiRm9ybWF0IGQnYXJjaGl2ZSBpbmNvbm51ICclcyciCisKKyM6IGFyY2hpdmUuYzo1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXJndW1lbnQgbm90IHN1cHBvcnRlZCBmb3IgZm9ybWF0ICclcyc6IC0lZCIKK21zZ3N0ciAiQXJndW1lbnQgbm9uIHN1cHBvcnTDqSBwb3VyIGxlIGZvcm1hdCAnJXMnwqA6IC0lZCIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyYW5zbWV0dHJlIGxlIGJsb2IgJXMgZW4gZmx1eCIKKworIzogYXJjaGl2ZS10YXIuYzoyNjYgYXJjaGl2ZS16aXAuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIKK21zZ3N0ciAibW9kZSBkZSBmaWNoaWVyIG5vbiBzdXBwb3J0w6nCoDowJW8gKFNIQTE6ICVzKSIKKworIzogYXJjaGl2ZS10YXIuYzoyOTMgYXJjaGl2ZS16aXAuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyIKKworIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqW1hcnJlciBsZSBmaWx0cmUgJyVzJyIKKworIzogYXJjaGl2ZS10YXIuYzo0NjgKK21zZ2lkICJ1bmFibGUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZWRpcmlnZXIgdW4gZGVzY3JpcHRldXIiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICJsZSBmaWx0cmUgJyVzJyBhIHJldG91cm7DqSB1bmUgZXJyZXVyIgorCisjOiBhcmNoaXZlLXppcC5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiCittc2dzdHIgImxlIGNoZW1pbiBuJ2VzdCBwYXMgY29kw6kgZW4gVVRGLTggdmFsaWRlwqA6ICVzIgorCisjOiBhcmNoaXZlLXppcC5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIHRvbyBsb25nICglZCBjaGFycywgU0hBMTogJXMpOiAlcyIKK21zZ3N0ciAibGUgY2hlbWluIGVzdCB0cm9wIGxvbmcgKCVkIGNhcmFjdMOocmVzLCBTSEExwqA6ICVzKcKgOiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzo0NzkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJlcnJldXIgZGUgY29tcHJlc3Npb24gKCVkKSIKKworIzogYXJjaGl2ZS16aXAuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICU8UFJJdU1BWD4iCittc2dzdHIgImwnaG9yb2RhdGFnZSBlc3QgdHJvcCBncmFuZCBwb3VyIGNlIHN5c3TDqG1lwqA6ICU8UFJJdU1BWD4iCisKKyM6IGF0dHIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS4qcyBuJ2VzdCBwYXMgdW4gbm9tIHZhbGlkZSBkJ2F0dHJpYnV0IgorCisjOiBhdHRyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG5vdCBhbGxvd2VkOiAlczolZCIKK21zZ3N0ciAiJXMgbm9uIHBlcm1pcyA6ICVzIDogJWQiCisKKyM6IGF0dHIuYzo0MDkKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyJMZXMgbW90aWZzIGRlIG7DqWdhdGlvbiBzb250IGlnbm9yw6lzIGRhbnMgbGVzIGF0dHJpYnV0cyBnaXRcbiIKKyJVdGlsaXNleiAnXFwhJyBwb3VyIHVuIHBvaW50IGQnZXhjbGFtYXRpb24gbGl0dMOpcmFsLiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIkNvbnRlbnUgbWFsIGNpdMOpIGRhbnMgbGUgZmljaGllciAnJXMnwqA6ICVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHBvdXNzZXIgbGEgYmlzc2VjdGlvbiBwbHVzIGxvaW7CoCFcbiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICIlcyBuJ2VzdCBwYXMgdW4gbm9tIGRlIGNvbW1pdCB2YWxpZGUiCisKKyM6IGJpc2VjdC5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiTGEgYmFzZSBkZSBmdXNpb24gJXMgZXN0IG1hdXZhaXNlLlxuIgorIkNlbGEgc2lnbmlmaWUgcXVlIGxlIGJvZ3VlIMOpdMOpIGNvcnJpZ8OpIGVudHJlICVzIGV0IFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiTGEgYmFzZSBkZSBmdXNpb24gJXMgZXN0IG5vdXZlbGxlLlxuIgorIkxhIHByb3ByacOpdMOpIGEgY2hhbmfDqSBlbnRyZSAlcyBldCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZ1c2lvbiAlcyBlc3QgJXMuXG4iCisiQ2VjaSBzaWduaWZpZSBxdWUgbGUgcHJlbWllciBjb21taXQgJyVzJyBlc3QgZW50cmUgJXMgZXQgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorIkNlcnRhaW5lcyByw6l2aXNpb24gJXMgbmUgc29udCBwYXMgYW5jw6p0cmVzIGRlIGxhIHLDqXZpc2lvbiAlcy5cbiIKKyJnaXQgYmlzZWN0IG5lIHBldXQgcGFzIGZvbmN0aW9ubmVyIGNvcnJlY3RlbWVudCBkYW5zIGNlIGNhcy5cbiIKKyJQZXV0LcOqdHJlIGxlcyByw6l2aXNpb25zICVzIGV0ICVzIG5lIHNvbnQtZWxsZXMgcGFzIGxlcyBib25uZXPCoD9cbiIKKworIzogYmlzZWN0LmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCittc2dzdHIgIiIKKyJMYSBiYXNlIGRlIGZ1c2lvbiBlbnRyZSAlcyBldCBbJXNdIGRvaXQgw6p0cmUgw6l2aXTDqWUuXG4iCisiT24gbmUgcGV1dCBkb25jIHBhcyDDqnRyZSBjZXJ0YWluIHF1ZSBsZSBwcmVtaWVyIGNvbW1pdCAlcyBzZSB0cm91dmUgZW50cmUgJXMgIgorImV0ICVzLlxuIgorIk9uIGNvbnRpbnVlIHRvdXQgZGUgbcOqbWUuIgorCisjOiBiaXNlY3QuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAiQmlzc2VjdGlvbsKgOiB1bmUgYmFzZSBkZSBmdXNpb24gZG9pdCDDqnRyZSB0ZXN0w6llXG4iCisKKyM6IGJpc2VjdC5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAidW5lIHLDqXZpc2lvbiAlcyBlc3QgbsOpY2Vzc2FpcmUiCisKKyM6IGJpc2VjdC5jOjg4NCBidWlsdGluL25vdGVzLmM6MTc3IGJ1aWx0aW4vdGFnLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSBmaWNoaWVyICclcyciCisKKyM6IGJpc2VjdC5jOjkyOCBidWlsdGluL21lcmdlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgJyVzJyIKKworIzogYmlzZWN0LmM6OTU4Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZXMgcsOpZsOpcmVuY2VzIGRlIGJpc3NlY3Rpb24iCisKKyM6IGJpc2VjdC5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgw6l0YWl0IMOgIGxhIGZvaXMgJXMgZXQgJXNcbiIKKworIzogYmlzZWN0LmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0ZXN0YWJsZSBjb21taXQgZm91bmQuXG4iCisiTWF5YmUgeW91IHN0YXJ0ZWQgd2l0aCBiYWQgcGF0aCBwYXJhbWV0ZXJzP1xuIgorbXNnc3RyICIiCisiQXVjdW4gY29tbWl0IHRlc3RhYmxlIG4nYSDDqXTDqSB0cm91dsOpXG4iCisiUGV1dC3DqnRyZSBhdmV6LXZvdXMgZMOpbWFycsOpIGF2ZWMgdW4gbWF1dmFpcyBwYXJhbcOodHJlIGRlIGNoZW1pbsKgP1xuIgorCisjOiBiaXNlY3QuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIijDoCBwZXUgcHLDqHMgJWQgw6l0YXBlKSIKK21zZ3N0clsxXSAiKMOgIHBldSBwcsOocyAlZCDDqXRhcGVzKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjLgorIzogYmlzZWN0LmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dpZF9wbHVyYWwgIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dzdHJbMF0gIkJpc3NlY3Rpb27CoDogJWQgcsOpdmlzaW9uIMOgIHRlc3RlciBhcHLDqHMgY2VjaSAlc1xuIgorbXNnc3RyWzFdICJCaXNzZWN0aW9uwqA6ICVkIHLDqXZpc2lvbnMgw6AgdGVzdGVyIGFwcsOocyBjZWNpICVzXG4iCisKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgIi0tY29udGVudHMgZXQgLS1yZXZlcnNlIG5lIGZvbnQgcGFzIGJvbiBtw6luYWdlLiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICJvbiBuZSBwZXV0IHBhcyB1dGlsaXNlciAtLWNvbnRlbnRzIGF2ZWMgdW4gbm9tIGQnb2JqZXQgY29tbWl0IGZpbmFsIgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyItLXJldmVyc2UgZXQgLS1maXJzdC1wYXJlbnQgZW5zZW1ibGUgbsOpY2Vzc2l0ZW50IGxhIHNww6ljaWZpY2F0aW9uIGQndW4gIgorImRlcm5pZXIgY29tbWl0IgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDEgc2VxdWVuY2VyLmM6MjA5MworIzogc2VxdWVuY2VyLmM6NDQ2MCBidWlsdGluL2NvbW1pdC5jOjEwNDAgYnVpbHRpbi9sb2cuYzozODggYnVpbHRpbi9sb2cuYzo5OTEKKyM6IGJ1aWx0aW4vbG9nLmM6MTUyMCBidWlsdGluL2xvZy5jOjE5MjUgYnVpbHRpbi9sb2cuYzoyMjE1IGJ1aWx0aW4vbWVyZ2UuYzo0MTEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEyOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDMKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxOTIKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHByw6lwYXJhdGlvbiBkdSBwYXJjb3VycyBkZXMgcsOpdmlzaW9ucyIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCBlbnNlbWJsZSBuw6ljZXNzaXRlbnQgdW5lIHBvcnTDqWUgYXZlYyBsYSBjaGHDrm5lIGRlICIKKyJwcmVtaWVyIHBhcmVudCIKKworIzogYmxhbWUuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAicGFzIGRlIGNoZW1pbiAlcyBkYW5zICVzIgorCisjOiBibGFtZS5jOjI3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGJsb2IgJXMgIHBvdXIgbGUgY2hlbWluICVzIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgotIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogbXNnc3RyICIiCiAiXG4iCi0iQ2VjaSBlc3QgZMO7IMOgIHVuIHByb2Jsw6htZSBjb25udSBhdmVjXG4iCi0ibGUgYmluYWlyZSBUY2wgZGlzdHJpYnXDqSBwYXIgQ3lnd2luLiIKKyJBcHLDqHMgY29ycmVjdGlvbiBkZSBsYSBjYXVzZSBkZSBsJ2VycmV1ciwgdm91cyBwb3V2ZXogZXNzYXllciBkZSBjb3JyaWdlclxuIgorImwnaW5mb3JtYXRpb24gZGUgc3VpdmkgZGlzdGFudCBlbiBpbnZvcXVhbnRcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogCi0jOiBnaXQtZ3VpLnNoOjM1NzUKLSMsIHRjbC1mb3JtYXQKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiTGEgYnJhbmNoZSAlcyBuZSBwZXV0IHBhcyDDqnRyZSBzYSBwcm9wcmUgYnJhbmNoZSBhbW9udC4iCisKKyM6IGJyYW5jaC5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgJyVzJyBlc3QgcGFyYW3DqXRyw6llIHBvdXIgc3VpdnJlIGxhIGJyYW5jaGUgZGlzdGFudGUgJyVzJyBkZSAnJXMnICIKKyJlbiByZWJhc2FudC4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgJyVzJyBlc3QgcGFyYW3DqXRyw6llIHBvdXIgc3VpdnJlIGxhIGJyYW5jaGUgZGlzdGFudGUgJyVzJyBkZXB1aXMgIgorIiclcycuIgorCisjOiBicmFuY2guYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAnJXMnIGVzdCBwYXJhbcOpdHLDqWUgcG91ciBzdWl2cmUgbGEgYnJhbmNoZSBsb2NhbGUgJyUncyBlbiAiCisicmViYXNhbnQuIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycuIgorbXNnc3RyICJMYSBicmFuY2hlICclcycgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSBicmFuY2hlIGxvY2FsZSAnJXMnLiIKKworIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAnJXMnIGVzdCBwYXJhbcOpdHLDqWUgcG91ciBzdWl2cmUgbGEgcsOpZsOpcmVuY2UgZGlzdGFudGUgJyVzJyBlbiAiCisicmViYXNhbnQuIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBlc3QgcGFyYW3DqXRyw6llIHBvdXIgc3VpdnJlIGxhIHLDqWbDqXJlbmNlIGRpc3RhbnRlICclcycuIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgJyVzJyBlc3QgcGFyYW3DqXRyw6llIHBvdXIgc3VpdnJlIGxhIHLDqWbDqXJlbmNlIGxvY2FsZSAnJXMnIGVuICIKKyJyZWJhc2FudC4iCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICJMYSBicmFuY2hlICclcycgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSByw6lmw6lyZW5jZSBsb2NhbGUgJyVzJy4iCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiw4ljaGVjIGRlIGwnw6ljcml0dXJlIGRlIGxhIGNvbmZpZ3VyYXRpb24gZGUgYnJhbmNoZSBhbW9udCIKKworIzogYnJhbmNoLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgIlBhcyBkZSBzdWl2aSA6IGluZm9ybWF0aW9uIGFtYmlndcOrIHBvdXIgbGEgcsOpZsOpcmVuY2UgJXMiCisKKyM6IGJyYW5jaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gbm9tIGRlIGJyYW5jaGUgdmFsaWRlLiIKKworIzogYnJhbmNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJVbmUgYnJhbmNoZSBub21tw6llICclcycgZXhpc3RlIGTDqWrDoC4iCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmb3JjZXIgbGEgbWlzZSDDoCBqb3VyIGRlIGxhIGJyYW5jaGUgY291cmFudGUuIgorCisjOiBicmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHBhcmFtw6l0cmVyIGxlIHN1aXZpIGRlIGJyYW5jaGUgOyBsZSBwb2ludCBkZSBkw6lwYXJ0ICclcycgbidlc3QgIgorInBhcyB1bmUgYnJhbmNoZS4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsYSBicmFuY2hlIGFtb250IGRlbWFuZMOpZSAnJXMnIG4nZXhpc3RlIHBhcyIKKworIzogYnJhbmNoLmM6MjM3CiBtc2dpZCAiIgogIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgogIlxuIgotIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKLSJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKLSJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgotIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgogbXNnc3RyICIiCiAiXG4iCisiU2kgdm91cyBjb21wdGV6IGJhc2VyIHZvdHJlIHRyYXZhaWwgc3VyIHVuZSBicmFuY2hlXG4iCisiYW1vbnQgcXVpIGV4aXN0ZSBkw6lqw6Agc3VyIGxlIHNlcnZldXIgZGlzdGFudCwgdm91cyBwb3V2ZXpcbiIKKyJsYW5jZXIgXCJnaXQgZmV0Y2hcIiBwb3VyIGxhIHLDqWN1cMOpcmVyLlxuIgogIlxuIgotIlVuIGJvbiByZW1wbGFjZW1lbnQgcG91ciAlc1xuIgotImVzdCBkZSBtZXR0cmUgbGVzIHZhbGV1cnMgcG91ciAndXNlci5uYW1lJyAobm9tXG4iCi0iZGUgbCd1dGlsaXNhdGV1cikgZXQgJ3VzZXIuZW1haWwnIChhZGRyZXNzZSBlbWFpbFxuIgotImRlIGwndXRpbGlzYXRldXIpIGRhbnMgdm90cmUgZmljaGllciAnfi8uZ2l0Y29uZmlnJy5cbiIKKyJTaSB2b3VzIGNvbXB0ZXogcG91c3NlciB1bmUgbm91dmVsbGUgYnJhbmNoZSBsb2NhbGUgcXVpIHN1aXZyYVxuIgorInNhIGp1bWVsbGUgZGlzdGFudGUsIHZvdXMgcG91dmV6IHV0aWxpc2VyIFwiZ2l0IHB1c2ggLXVcIlxuIgorInBvdXIgcGFyYW3DqXRyZXIgbGUgc3VpdmkgZGlzdGFudCBlbiBtw6ptZSB0ZW1wcyBxdWUgdm91cyBwb3Vzc2V6LiIKIAotIzogbGliL2Fib3V0LnRjbDoyNgotbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKLW1zZ3N0ciAiZ2l0LWd1aSAtIHVuZSBpbnRlcmZhY2UgZ3JhcGhpcXVlIHV0aWxpc2F0ZXVyIHBvdXIgR2l0IgorIzogYnJhbmNoLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm9tIGQnb2JqZXQgaW52YWxpZGUgOiAnJXMnLiIKIAotIzogbGliL2JsYW1lLnRjbDo3MgotbXNnaWQgIkZpbGUgVmlld2VyIgotbXNnc3RyICJWaXNpb25uZXVyIGRlIGZpY2hpZXIiCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm9tIGQnb2JqZXQgYW1iaWd1IDogJyVzJy4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6NzgKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICJDb21taXQgOiIKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICJQb2ludCBkJ2VtYnJhbmNoZW1lbnQgaW52YWxpZGUgOiAnJXMnLiIKIAotIzogbGliL2JsYW1lLnRjbDoyNzEKLW1zZ2lkICJDb3B5IENvbW1pdCIKLW1zZ3N0ciAiQ29waWVyIGNvbW1pdCIKKyM6IGJyYW5jaC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyBlc3QgZMOpasOgIGV4dHJhaXQgZGFucyAnJXMnIgogCi0jOiBsaWIvYmxhbWUudGNsOjI3NQotbXNnaWQgIkZpbmQgVGV4dC4uLiIKLW1zZ3N0ciAiQ2hlcmNoZXIgdGV4dGUuLi4iCisjOiBicmFuY2guYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgImxhIEhFQUQgZGUgbGEgY29waWUgZGUgdHJhdmFpbCAlcyBuJ2VzdCBwYXMgbWlzZSDDoCBqb3VyIgogCi0jOiBsaWIvYmxhbWUudGNsOjI4NAotbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCi1tc2dzdHIgIkxhbmNlciBsYSBkw6l0ZWN0aW9uIGFwcHJvZm9uZGllIGRlcyBjb3BpZXMiCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIG5lIHNlbWJsZSBwYXMgw6p0cmUgdW4gZmljaGllciBidW5kbGUgdjIiCiAKLSM6IGxpYi9ibGFtZS50Y2w6Mjg4Ci1tc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCi1tc2dzdHIgIk1vbnRyZXIgbCdoaXN0b3JpcXVlIgorIzogYnVuZGxlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICJlbi10w6p0ZSBub24gcmVjb25udSA6ICVzJXMgKCVkKSIKIAotIzogbGliL2JsYW1lLnRjbDoyOTEKLW1zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgotbXNnc3RyICJCbMOibWVyIGxlIGNvbW1pdCBwYXJlbnQiCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIzNDQgc2VxdWVuY2VyLmM6MzEwOAorIzogYnVpbHRpbi9jb21taXQuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAnJXMnIgogCi0jOiBsaWIvYmxhbWUudGNsOjQ1MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgIkxlY3R1cmUgZGUgJXMuLi4iCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiTGUgZMOpcMO0dCBuZSBkaXNwb3NlIHBhcyBkZXMgY29tbWl0cyBwcsOpcmVxdWlzIHN1aXZhbnRzIDoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6NTU3Ci1tc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIkNoYXJnZW1lbnQgZGVzIGFubm90YXRpb25zIGRlIHN1aXZpIGRlcyBjb3BpZXMvZMOpcGxhY2VtZW50cy4uLiIKKyM6IGJ1bmRsZS5jOjE0NgorbXNnaWQgIm5lZWQgYSByZXBvc2l0b3J5IHRvIHZlcmlmeSBhIGJ1bmRsZSIKK21zZ3N0ciAibGEgdsOpcmlmaWNhdGlvbiBkJ3VuIGNvbGlzIHJlcXVpZXJ0IHVuIGTDqXDDtHQiCiAKLSM6IGxpYi9ibGFtZS50Y2w6NTc3Ci1tc2dpZCAibGluZXMgYW5ub3RhdGVkIgotbXNnc3RyICJsaWduZXMgYW5ub3TDqWVzIgorIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJMZSBjb2xpcyBjb250aWVudCBjZXR0ZSByw6lmw6lyZW5jZSA6IgorbXNnc3RyWzFdICJMZSBjb2xpcyBjb250aWVudCBjZXMgJWQgcsOpZsOpcmVuY2VzIDoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6NzY5Ci1tc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiQ2hhcmdlbWVudCBkZXMgYW5ub3RhdGlvbnMgZCdlbXBsYWNlbWVudCBvcmlnaW5hbCIKKyM6IGJ1bmRsZS5jOjIwNAorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJMZSBjb2xpcyBlbnJlZ2lzdHJlIGwnaGlzdG9yaXF1ZSBjb21wbGV0LiIKIAotIzogbGliL2JsYW1lLnRjbDo3NzIKLW1zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKLW1zZ3N0ciAiQW5ub3RhdGlvbiB0ZXJtaW7DqWUuIgorIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJMZSBjb2xpcyBleGlnZSBjZXR0ZSByw6lmw6lyZW5jZSA6IgorbXNnc3RyWzFdICJMZSBjb2xpcyBleGlnZSBjZXMgJWQgcsOpZsOpcmVuY2VzIDoiCiAKLSM6IGxpYi9ibGFtZS50Y2w6ODAyCi1tc2dpZCAiQnVzeSIKLW1zZ3N0ciAiT2NjdXDDqSIKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgImltcG9zc2libGUgZGUgZHVwbGlxdWVyIGxlIGRlc2NyaXB0ZXVyIGRlIGxpYXNzZSIKIAotIzogbGliL2JsYW1lLnRjbDo4MDMKLW1zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKLW1zZ3N0ciAiQW5ub3RhdGlvbiBlbiBjb3VycyBkJ2V4w6ljdXRpb24uIgorIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjcsOpZXIgZGVzIG9iamV0cyBncm91cMOpcyIKIAotIzogbGliL2JsYW1lLnRjbDo4NDIKLW1zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgotbXNnc3RyICJSZWNoZXJjaGUgZGUgY29waWUgYXBwcm9mb25kaWUgZW4gY291cnMuLi4iCisjOiBidW5kbGUuYzoyOTEKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAibGVzIG9iamV0cyBncm91cMOpcyBvbnQgZGlzcGFydSIKIAotIzogbGliL2JsYW1lLnRjbDo5MTAKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgIkNoYXJnZW1lbnQgZGVzIGFubm90YXRpb25zLi4uIgorIzogYnVuZGxlLmM6MzMzCittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAicmV2LWxpc3QgYSBkaXNwYXJ1IgogCi0jOiBsaWIvYmxhbWUudGNsOjk2MwotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIkF1dGV1ciA6IgorIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJsYSByw6lmw6lyZW5jZSAnJXMnIGVzdCBleGNsdWUgcGFyIGxlcyBvcHRpb25zIGRlIHJldi1saXN0IgogCi0jOiBsaWIvYmxhbWUudGNsOjk2NwotbXNnaWQgIkNvbW1pdHRlcjoiCi1tc2dzdHIgIkNvbW1pdGV1ciA6IgorIzogYnVuZGxlLmM6NDYxIGJ1aWx0aW4vbG9nLmM6MjAzIGJ1aWx0aW4vbG9nLmM6MTgxNCBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50IG5vbiByZWNvbm51IDogJXMiCiAKLSM6IGxpYi9ibGFtZS50Y2w6OTcyCi1tc2dpZCAiT3JpZ2luYWwgRmlsZToiCi1tc2dzdHIgIkZpY2hpZXIgb3JpZ2luYWwgOiIKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICJSZWZ1cyBkZSBjcsOpZXIgdW4gY29saXMgdmlkZS4iCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTAyMAotbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIGNvbW1pdCBIRUFEIDoiCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciAnJXMnIgogCi0jOiBsaWIvYmxhbWUudGNsOjEwNzUKLW1zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIGNvbW1pdCBwYXJlbnQgOiIKKyM6IGJ1bmRsZS5jOjUwNAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAibCdpbmRleCBkZSBncm91cGUgYSBkaXNwYXJ1IgogCi0jOiBsaWIvYmxhbWUudGNsOjEwOTAKLW1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCi1tc2dzdHIgIkltcG9zc2libGUgZCdhZmZpY2hlciBsZSBwYXJlbnQiCisjOiBjb2xvci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICJWYWxldXIgaW52YWxpZGUgZGUgY291bGV1ciA6ICUuKnMiCiAKLSM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6MzIwCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKLW1zZ3N0ciAiRXJyZXVyIGxvcnMgZHUgY2hhcmdlbWVudCBkZXMgZGlmZsOpcmVuY2VzIDoiCisjOiBjb21taXQuYzo1MSBzZXF1ZW5jZXIuYzoyODExIGJ1aWx0aW4vYW0uYzozNTQgYnVpbHRpbi9hbS5jOjM5OAorIzogYnVpbHRpbi9hbS5jOjEzNjYgYnVpbHRpbi9hbS5jOjIwMDkgYnVpbHRpbi9yZXBsYWNlLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyICVzIgogCi0jOiBsaWIvYmxhbWUudGNsOjEyMzEKLW1zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKLW1zZ3N0ciAiw4AgbCdvcmlnaW5lIHBhciA6IgorIzogY29tbWl0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMgbidlc3QgcGFzIHVuIGNvbW1pdCAhIgogCi0jOiBsaWIvYmxhbWUudGNsOjEyMzcKLW1zZ2lkICJJbiBGaWxlOiIKLW1zZ3N0ciAiRGFucyBsZSBmaWNoaWVyIDoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI0MgotbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKLW1zZ3N0ciAiQ29wacOpIG91IGTDqXBsYWPDqSBpY2kgcGFyIDoiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Ci1tc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgotbXNnc3RyICJDaGFyZ2VyIGxhIGJyYW5jaGUgKGNoZWNrb3V0KSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKLW1zZ2lkICJDaGVja291dCIKLW1zZ3N0ciAiQ2hhcmdlciAoY2hlY2tvdXQpIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgotIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKLW1zZ2lkICJDYW5jZWwiCi1tc2dzdHIgIkFubnVsZXIiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4Ci1tc2dpZCAiUmV2aXNpb24iCi1tc2dzdHIgIlLDqXZpc2lvbiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAotbXNnaWQgIk9wdGlvbnMiCi1tc2dzdHIgIk9wdGlvbnMiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgotbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiUsOpY3Vww6lyZXIgbGEgYnJhbmNoZSBkZSBzdWl2aSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKLW1zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCi1tc2dzdHIgIkTDqXRhY2hlciBkZSBsYSBicmFuY2hlIGxvY2FsZSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCi1tc2dpZCAiQ3JlYXRlIEJyYW5jaCIKLW1zZ3N0ciAiQ3LDqWVyIHVuZSBicmFuY2hlIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKLW1zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKLW1zZ3N0ciAiQ3LDqWVyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODEKLW1zZ2lkICJDcmVhdGUiCi1tc2dzdHIgIkNyw6llciIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCi1tc2dpZCAiQnJhbmNoIE5hbWUiCi1tc2dzdHIgIk5vbSBkZSBicmFuY2hlIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCi1tc2dpZCAiTmFtZToiCi1tc2dzdHIgIk5vbSA6IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiVHJvdXZlciBub20gZGUgYnJhbmNoZSBkZSBzdWl2aSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Ci1tc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCi1tc2dzdHIgIlLDqXZpc2lvbiBpbml0aWFsZSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCi1tc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCi1tc2dzdHIgIk1ldHRyZSDDoCBqb3VyIHVuZSBicmFuY2hlIGV4aXN0YW50ZSA6IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKLW1zZ2lkICJObyIKLW1zZ3N0ciAiTm9uIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKLW1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKLW1zZ3N0ciAiTWlzZSDDoCBqb3VyIHJlY3RpbGlnbmUgc2V1bGVtZW50IChmYXN0LWZvcndhcmQpIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKLW1zZ2lkICJSZXNldCIKLW1zZ3N0ciAiUsOpaW5pdGlhbGlzZXIiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NwotbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgotbXNnc3RyICJDaGFyZ2VyIChjaGVja291dCkgYXByw6hzIGNyw6lhdGlvbiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgotbXNnc3RyICJDaG9pc2lzc2V6IHVuZSBicmFuY2hlIGRlIHN1aXZpIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgotbXNnc3RyICJMYSBicmFuY2hlIGRlIHN1aXZpICVzIG4nZXN0IHBhcyB1bmUgYnJhbmNoZSBkYW5zIGxlIGTDqXDDtHQgZGlzdGFudC4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiRm91cm5pc3NleiB1biBub20gZGUgYnJhbmNoZS4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgotbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBub20gZGUgYnJhbmNoZSBhY2NlcHRhYmxlLiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE1Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCIKLW1zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAotbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCi1tc2dzdHIgIlN1cHByaW1lciBicmFuY2hlIGxvY2FsZSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Ci1tc2dpZCAiTG9jYWwgQnJhbmNoZXMiCi1tc2dzdHIgIkJyYW5jaGVzIGxvY2FsZXMiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgotbXNnc3RyICJTdXBwcmltZXIgc2V1bGVtZW50IHNpIGZ1c2lvbm7DqWUgZGFucyA6IgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgIlRvdWpvdXJzIChuZSBwYXMgdsOpcmlmaWVyIGxlcyBmdXNpb25zKSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKLW1zZ3N0ciAiTGVzIGJyYW5jaGVzIHN1aXZhbnRlcyBuZSBzb250IHBhcyBjb21wbMOodGVtZW50IGZ1c2lvbm7DqWVzIGRhbnMgJXMgOiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworIzogY29tbWl0LmM6MTkzCiBtc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgogIlxuIgotIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCiBtc2dzdHIgIiIKLSJJbCBlc3QgZGlmZmljaWxlIGRlIHLDqWN1cMOpcmVyIGRlcyBicmFuY2hlcyBzdXBwcmltw6llcy5cbiIKKyJMZSBzdXBwb3J0IGRlIDxHSVRfRElSPi9pbmZvL2dyYWZ0cyBlc3QgZMOpY29uc2VpbGzDqVxuIgorImV0IHNlcmEgc3VwcHJpbcOpIGRhbnMgdW5lIHZlcnNpb24gZnV0dXJlIGRlIEdpdC5cbiIKICJcbiIKLSJTdXBwcmltZXIgbGVzIGJyYW5jaGVzIHPDqWxlY3Rpb25uw6llcyA/IgorIlZldWlsbGV6IHV0aWxpc2VyIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInBvdXIgY29udmVydGlyIGxlcyBncmFmdHMgZW4gcsOpZsOpcmVuY2UgZGUgcmVtcGxhY2VtZW50LlxuIgorIlxuIgorIlN1cHByaW1leiBjZSBtZXNzYWdlIGVuIGxhbsOnYW50XG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCiAKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKKyM6IGNvbW1pdC5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiTGEgdmFsaWRhdGlvbiAlcyBhIHVuZSBzaWduYXR1cmUgR1BHIG5vbiBmaWFibGUsIHByw6l0ZW5kdW1lbnQgcGFyICVzLiIKKworIzogY29tbWl0LmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiTGEgdmFsaWRhdGlvbiAlcyBhIHVuZSBtYXV2YWlzZSBzaWduYXR1cmUgR1BHIHByw6l0ZW5kdW1lbnQgcGFyICVzLiIKKworIzogY29tbWl0LmM6MTE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICJMYSB2YWxpZGF0aW9uICVzIG4nYSBwYXMgZGUgc2lnbmF0dXJlIEdQRy4iCisKKyM6IGNvbW1pdC5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICJMYSB2YWxpZGF0aW9uICVzIGEgdW5lIHNpZ25hdHVyZSBHUEcgY29ycmVjdGUgcGFyICVzXG4iCisKKyM6IGNvbW1pdC5jOjE0MTUKIG1zZ2lkICIiCi0iRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKLSIlcyIKKyJXYXJuaW5nOiBjb21taXQgbWVzc2FnZSBkaWQgbm90IGNvbmZvcm0gdG8gVVRGLTguXG4iCisiWW91IG1heSB3YW50IHRvIGFtZW5kIGl0IGFmdGVyIGZpeGluZyB0aGUgbWVzc2FnZSwgb3Igc2V0IHRoZSBjb25maWdcbiIKKyJ2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHRoZSBlbmNvZGluZyB5b3VyIHByb2plY3QgdXNlcy5cbiIKIG1zZ3N0ciAiIgotIkxhIHN1cHByZXNzaW9uIGRlcyBicmFuY2hlcyBzdWl2YW50ZXMgYSDDqWNob3XDqSA6XG4iCisiQXZlcnRpc3NlbWVudMKgOiBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gbmUgc2UgY29uZm9ybWUgcGFzIMOgIFVURi04LlxuIgorIlZvdXMgc291aGFpdGV6IHBldXQtw6p0cmUgbGUgbW9kaWZpZXIgYXByw6hzIGNvcnJlY3Rpb24gZHUgbWVzc2FnZSBvdSByw6lnbGVyICIKKyJsYVxuIgorInZhcmlhYmxlIGRlIGNvbmZpZ3VyYXRpb24gaTE4bi5jb21taXRlbmNvZGluZyDDoCBsJ2VuY29kYWdlIHV0aWxpc8OpIHBhciB2b3RyZSAiCisicHJvamV0LlxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgImxlIGdyYXBoZSBkZSBjb21taXQgZXN0IHRyb3AgcGV0aXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIKK21zZ3N0ciAiIgorImxhIHNpZ25hdHVyZSBkdSBncmFwaGUgZGUgY29tbWl0ICVYIG5lIGNvcnJlc3BvbmQgcGFzIMOgIGxhIHNpZ25hdHVyZSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgImxhIHZlcnNpb24gJVggZHUgZ3JhcGhlIGRlIGNvbW1pdCBuZSBjb3JyZXNwb25kIHBhcyDDoCBsYSB2ZXJzaW9uICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICIiCisibCdlbXByZWludGUgZGUgbGEgdmVyc2lvbiAlWCBkdSBncmFwaGUgZGUgY29tbWl0IG5lIGNvcnJlc3BvbmQgcGFzIMOgIGxhICIKKyJ2ZXJzaW9uICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMzIKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIiIKKyJlbnRyw6llIGRlIHRhYmxlIGRlIGNvbnN1bHRhdGlvbiBkZSBtb3JjZWF1eCBkZSBncmFwaGUgZGUgY29tbWl0ZSBtYW5xdWFudGXCoDsgIgorImxlIGZpY2hpZXIgZXN0IHBldXQgw6p0cmUgaW5jb21wbGV0IgorCisjOiBjb21taXQtZ3JhcGguYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAiZMOpY2FsYWdlIGRlIGJsb2MgJTA4eCUwOHggZHUgZ3JhcGhlIGRlIGNvbW1pdCBpbmFkw6lxdWF0IgorCisjOiBjb21taXQtZ3JhcGguYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAibCdpZCBkZSBibG9jIGRlIGdyYXBoZSBkZSBjb21taXQgJTA4eCBhcHBhcmHDrnQgZGVzIG11bHRpcGxlcyBmb2lzIgorCisjOiBjb21taXQtZ3JhcGguYzozNTAKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICJsZSBncmFwaGUgZGUgY29tbWl0IG4nYSBwYXMgZGUgc2VjdGlvbiBkZSBncmFwaGVzIGRlIGJhc2UiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM2MAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAibGEgY2hhw65uZSBkZSBncmFwaGUgZGUgY29tbWl0IG5lIGNvcnJlc3BvbmQgcGFzIgorCisjOiBjb21taXQtZ3JhcGguYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICIiCisiY2hhw65uZSBkZSBncmFwaGUgZGUgY29tbWl0IGludmFsaWRlwqA6IGxhIGxpZ25lICclcycgbidlc3QgcGFzIHVuZSBlbXByZWludGUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQzMworbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciB0b3VzIGxlcyBmaWNoaWVycyBkdSBncmFwaGUgZGUgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzo1NjQgY29tbWl0LWdyYXBoLmM6NjI0Cittc2dpZCAiaW52YWxpZCBjb21taXQgcG9zaXRpb24uIGNvbW1pdC1ncmFwaCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiIgorInBvc2l0aW9uIGRlIGNvbW1pdCBpbnZhbGlkZS4gTGUgZ3JhcGhlIGRlIGNvbW1pdCBlc3QgdnJhaXNlbWJsYWJsZW1lbnQgIgorImNvcnJvbXB1IgorCisjOiBjb21taXQtZ3JhcGguYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgY29tbWl0ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzo4NTggYnVpbHRpbi9hbS5jOjEyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIGNvbW1pdCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ29idGVuaXIgbGUgdHlwZSBkZSBsJ29iamV0ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDQ5Cittc2dpZCAiTG9hZGluZyBrbm93biBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiTGVjdHVyZSBkZXMgY29tbWl0cyBjb25udXMgZGFucyB1biBncmFwaGUgZGUgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzoxMDY2Cittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiRXhwYW5zaW9uIGRlcyBjb21taXRzIGpvaWduYWJsZXMgZGFucyB1biBncmFwaGUgZGUgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzoxMDg1Cittc2dpZCAiQ2xlYXJpbmcgY29tbWl0IG1hcmtzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiU3VwcHJlc3Npb24gbGVzIG1hcnF1ZXMgZGUgY29tbWl0IGRhbnMgbGUgZ3JhcGhlIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExMDQKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAiQ2FsY3VsIGRlcyBjaGlmZnJlcyBkZSBnw6luw6lyYXRpb24gZHUgZ3JhcGhlIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gIlJlY2hlcmNoZSBkZSBjb21taXRzIHBvdXIgdW4gZ3JhcGhlIGRlIGNvbW1pdHMgZGFucyAlZCBwYXF1ZXQiCittc2dzdHJbMV0gIlJlY2hlcmNoZSBkZSBjb21taXRzIHBvdXIgdW4gZ3JhcGhlIGRlIGNvbW1pdHMgZGFucyAlZCBwYXF1ZXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGFkZGluZyBwYWNrICVzIgorbXNnc3RyICJlcnJldXIgw6AgbCdham91dCBkdSBwYWNrZXQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgImVycmV1ciDDoCBsJ291dmVydHVyZSBkZSBsJ2luZGV4IHBvdXIgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiUmVjaGVyY2hlIGRlIGNvbW1pdHMgcG91ciB1biBncmFwaGUgZGUgY29tbWl0cyBkZXB1aXMgJWQgcsOpZiIKK21zZ3N0clsxXSAiUmVjaGVyY2hlIGRlIGNvbW1pdHMgcG91ciB1biBncmFwaGUgZGUgY29tbWl0cyBkZXB1aXMgJWQgcsOpZnMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAiaWRlbnRpZmlhbnQgZCdvYmpldCBjb21taXQgaW52YWxpZGUgOiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI1NQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICIiCisiUmVjaGVyY2hlIGRlIGNvbW1pdHMgcG91ciB1biBncmFwaGUgZGUgY29tbWl0cyBwYXJtaSBsZXMgb2JqZXRzIGVtcGFxdWV0w6lzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjcwCittc2dpZCAiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkNvbXB0YWdlIGRlcyBjb21taXRzIGRpc3RpbmN0cyBkYW5zIHVuIGdyYXBoZSBkZSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzMDAKK21zZ2lkICJGaW5kaW5nIGV4dHJhIGVkZ2VzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiUmVjaGVyY2hlIGQnYXLDqnRlcyBzdXBwbMOpbWVudGFpcmVzIGRhbnMgdW4gZ3JhcGhlIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDYKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgIsOpY2hlYyDDoCBsJ8OpY3JpdHVyZSBsZSBub21icmUgY29ycmVjdCBkJ2lkIGRlIGJhc2UgZGUgZnVzaW9uIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzc5IG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZXMgcsOpcGVydG9pcmVzIGRlIHByZW1pZXIgbml2ZWF1IGRlICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzkxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyICclcyciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gIsOJY3JpdHVyZSBsZSBncmFwaGUgZGUgY29tbWl0cyBlbiAlZCBwYXNzZSIKK21zZ3N0clsxXSAiw4ljcml0dXJlIGxlIGdyYXBoZSBkZSBjb21taXRzIGVuICVkIHBhc3NlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5MgorbXNnaWQgInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgZGUgZ3JhcGhlIGRlIGNvbW1pdCIKKworIzogY29tbWl0LWdyYXBoLmM6MTUwNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiw6ljaGVjIGR1IHJlbm9tbWFnZSBkdSBmaWNoaWVyIGRlIGdyYXBoZSBkZSBjb21taXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNTI0Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZGUgcmVub21tZXIgbGUgZmljaGllciB0ZW1wb3JhaXJlIGRlIGdyYXBoZSBkZSBjb21taXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjM1Cittc2dpZCAiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiCittc2dzdHIgIkFuYWx5c2UgZGVzIGNvbW1pdHMgZGUgZnVzaW9uIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZHVwbGljYXRlIGNvbW1pdCBpZCAlcyIKK21zZ3N0ciAiaWQgZGUgY29tbWl0ICVzIGR1cGxpcXXDqSBpbmF0dGVuZHUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NzAKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiZnVzaW9uIGR1IGdyYXBoZSBkZSBjb21taXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICJsZSBncmFwaGUgZGUgY29tbWl0cyBuZSBwZXV0IHBhcyDDqWNyaXJlICVkIGNvbW1pdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NzEKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIHRvIHdyaXRlIGdyYXBoIgorbXNnc3RyICJ0cm9wIGRlIGNvbW1pdHMgcG91ciDDqWNyaXJlIHVuIGdyYXBoZSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk2MQorbXNnaWQgInRoZSBjb21taXQtZ3JhcGggZmlsZSBoYXMgaW5jb3JyZWN0IGNoZWNrc3VtIGFuZCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAiIgorImxlIGdyYXBoZSBkZSBjb21taXQgYSB1bmUgc29tbWUgZGUgY29udHLDtGxlIGluY29ycmVjdGUgZXQgZXN0ICIKKyJ2cmFpc2VtYmxhYmxlbWVudCBjb3Jyb21wdSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgImxlIGdyYXBoZSBkZSBjb21taXQgYSB1biBvcmRyZSBkJ09JRCBpbmNvcnJlY3TCoDogJXMgcHVpcyAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4MSBjb21taXQtZ3JhcGguYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICIiCisibGUgZ3JhcGhlIGRlIGNvbW1pdCBhIHVuZSB2YWxldXIgZGUgZGlzcGVyc2lvbiBpbmNvcnJlY3RlIDogZGlzcGVyc2lvblslZF0gPSAiCisiJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnYW5hbHlzZSBsZSBjb21taXQgJXMgZGVwdWlzIGxlIGdyYXBoZSBkZSBjb21taXRzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDA2Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJWZXJpZmljYXRpb24gZGVzIGNvbW1pdHMgZGFucyBsZSBncmFwaGUgZGUgY29tbWl0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyLDqWNoZWMgZGUgbCdhbmFseXNlIGR1IGNvbW1pdCAlcyBkZXB1aXMgbGEgYmFzZSBkZSBkb25uw6llcyBkJ29iamV0cyBwb3VyIGxlICIKKyJncmFwaGUgZGUgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgdHJlZSBPSUQgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJXMgIT0gJXMiCittc2dzdHIgIiIKKyJsJ09JRCBkZSBsJ2FyYnJlIHJhY2luZSBwb3VyIGxlIGNvbW1pdCAlcyBkYW5zIGxlIGdyYXBoZSBkZSBjb21taXQgZXN0ICVzICE9ICIKICIlcyIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgotbXNnaWQgIlJlbmFtZSBCcmFuY2giCi1tc2dzdHIgIlJlbm9tbWVyIGJyYW5jaGUiCisjOiBjb21taXQtZ3JhcGguYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisibGEgbGlzdGUgZGVzIHBhcmVudHMgZHUgZ3JhcGhlIGRlIGNvbW1pdCBwb3VyIGxlIGNvbW1pdCAlcyBlc3QgdHJvcCBsb25ndWUiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAiUmVub21tZXIiCisjOiBjb21taXQtZ3JhcGguYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICJsZSBwYXJlbnQgZHUgZ3JhcGhlIGRlIGNvbW1pdCBwb3VyICVzIGVzdCAlcyAhPSAlcyIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM2Ci1tc2dpZCAiQnJhbmNoOiIKLW1zZ3N0ciAiQnJhbmNoZSA6IgorIzogY29tbWl0LWdyYXBoLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICIiCisibGEgbGlzdGUgZGUgcGFyZW50cyBkdSBncmFwaGUgZGUgY29tbWl0IHBvdXIgbGUgY29tbWl0ICVzIHNlIHRlcm1pbmUgdHJvcCB0w7R0IgogCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKLW1zZ2lkICJOZXcgTmFtZToiCi1tc2dzdHIgIk5vdXZlYXUgbm9tIDoiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKLW1zZ3N0ciAiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciB1bmUgYnJhbmNoZSDDoCByZW5vbW1lci4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTGEgYnJhbmNoZSAnJXMnIGV4aXN0ZSBkw6lqw6AuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKLW1zZ3N0ciAiw4ljaGVjIHBvdXIgcmVub21tZXIgJyVzJy4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxNwotbXNnaWQgIlN0YXJ0aW5nLi4uIgotbXNnc3RyICJMYW5jZW1lbnQuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNgotbXNnaWQgIkZpbGUgQnJvd3NlciIKLW1zZ3N0ciAiVmlzaW9ubmV1ciBkZSBmaWNoaWVyIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nICVzLi4uIgotbXNnc3RyICJDaGFyZ2VtZW50IGRlICVzLi4uIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTg3Ci1tc2dpZCAiW1VwIFRvIFBhcmVudF0iCi1tc2dzdHIgIltKdXNxdSdhdSBwYXJlbnRdIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjY3IGxpYi9icm93c2VyLnRjbDoyNzMKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgotbXNnc3RyICJOYXZpZ3VlciBkYW5zIGxlcyBmaWNoaWVycyBkZSBsZSBicmFuY2hlIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Ci1tc2dpZCAiQnJvd3NlIgotbXNnc3RyICJOYXZpZ3VlciIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCi1tc2dzdHIgIlLDqWN1cMOpcmF0aW9uIGRlICVzIMOgIHBhcnRpciBkZSAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCi1tc2dzdHIgImVycmV1ciBmYXRhbGUgOiBJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKLSM6IGxpYi9zc2hrZXkudGNsOjUzCi1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIkZlcm1lciIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCi1tc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBuJ2V4aXN0ZSBwYXMuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCi1tc2dzdHIgIsOJY2hlYyBkZSBsYSBjb25maWd1cmF0aW9uIHNpbXBsaWZpw6llIGRlIGdpdC1wdWxsIHBvdXIgJyVzJy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5Ci0jLCB0Y2wtZm9ybWF0CisjOiBjb21taXQtZ3JhcGguYzoyMDY0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKLSJcbiIKLSJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgotIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgogbXNnc3RyICIiCi0iTGEgYnJhbmNoZSAnJXMnIGV4aXN0ZSBkw6lqw6AuXG4iCi0iXG4iCi0iSW1wb3NzaWJsZSBkZSBmYWlyZSB1bmUgYXZhbmNlIHJhcGlkZSAoZmFzdCBmb3J3YXJkKSB2ZXJzICVzLlxuIgotIlVuZSBmdXNpb24gZXN0IG7DqWNlc3NhaXJlLiIKKyJsZSBncmFwaGUgZGUgY29tbWl0IGEgdW4gbnVtw6lybyBkZSBnw6luw6lyYXRpb24gbnVsIHBvdXIgbGUgY29tbWl0ICVzLCBtYWlzICIKKyJub24tbnVsIGFpbGxldXJzIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkxhIHN0cmF0w6lnaWUgZGUgZnVzaW9uICclcycgbidlc3QgcGFzIHN1cHBvcnTDqWUuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCi1tc2dzdHIgIkxhIG1pc2Ugw6Agam91ciBkZSAnJXMnIGEgw6ljaG91w6kuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAotbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKLW1zZ3N0ciAiTCdpbmRleCAoc3RhZ2luZyBhcmVhKSBlc3QgZMOpasOgIHZlcnJvdWlsbMOpLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiY29tbWl0LWdyYXBoIGhhcyBub24temVybyBnZW5lcmF0aW9uIG51bWJlciBmb3IgY29tbWl0ICVzLCBidXQgemVybyBlbHNld2hlcmUiCiBtc2dzdHIgIiIKLSJMJ8OpdGF0IGxvcnMgZGUgbGEgZGVybmnDqHJlIHN5bmNocm9uaXNhdGlvbiBuZSBjb3JyZXNwb25kIHBsdXMgw6AgbCfDqXRhdCBkdSAiCi0iZMOpcMO0dC5cbiIKLSJcbiIKLSJVbiBhdXRyZSBwcm9ncmFtbWUgR2l0IGEgbW9kaWZpw6kgY2UgZMOpcMO0dCBkZXB1aXMgbGEgZGVybmnDqHJlICIKLSJzeW5jaHJvbmlzYXRpb24uIFVuZSByZXN5bmNocm9uaXNhdGlvbiBkb2l0IMOqdHJlIGVmZmVjdHXDqWUgYXZhbnQgZGUgcG91dm9pciAiCi0ibW9kaWZpZXIgbGEgYnJhbmNoZSBjb3VyYW50ZS5cbiIKLSJcbiIKLSJDZWxhIHZhIMOqdHJlIGZhaXQgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnQuXG4iCisibGUgZ3JhcGhlIGRlIGNvbW1pdCBhIHVuIG51bcOpcm8gZGUgZ8OpbsOpcmF0aW9uIG5vbi1udWwgcG91ciBsZSBjb21taXQgJXMsICIKKyJtYWlzIG51bCBhaWxsZXVycyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgotbXNnc3RyICJNaXNlIMOgIGpvdXIgZHUgcsOpcGVydG9pcmUgY291cmFudCBhdmVjICclcycuLi4iCisjOiBjb21taXQtZ3JhcGguYzoyMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBnZW5lcmF0aW9uIGZvciBjb21taXQgJXMgaXMgJXUgIT0gJXUiCittc2dzdHIgImxhIGfDqW7DqXJhdGlvbiBkdSBncmFwaGUgZGUgY29tbWl0IHBvdXIgbGUgY29tbWl0ICVzIGVzdCAldSAhPSAldSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKLW1zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKLW1zZ3N0ciAiZmljaGllcnMgY2hhcmfDqXMiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgogbXNnc3RyICIiCi0iQ2hhcmdlbWVudCBkZSAnJXMnIGFiYW5kb25uw6kgKGlsIGVzdCBuw6ljZXNzYWlyZSBkZSBmdXNpb25uZXIgZGVzIGZpY2hpZXJzKS4iCisibGEgZGF0ZSBkZSB2YWxpZGF0aW9uIHBvdXIgbGUgY29tbWl0ICVzIGRhbnMgbGUgZ3JhcGhlIGRlIGNvbW1pdCBlc3QgIgorIiU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAiSWwgZXN0IG7DqWNlc3NhaXJlIGRlIGZ1c2lvbm5lciBkZXMgZmljaGllcnMuIgorIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJwbHVzIGRlIG3DqW1vaXJlIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgotbXNnc3RyICJMZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIHJlc3RlIHN1ciBsYSBicmFuY2hlICclcycuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorIzogY29uZmlnLmM6MTI0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKLSJcbiIKLSJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKLSJDaGVja291dCcuIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKIG1zZ3N0ciAiIgotIlZvdXMgbifDqnRlcyBwbHVzIHN1ciB1bmUgYnJhbmNoZSBsb2NhbGUuXG4iCi0iXG4iCi0iU2kgdm91cyB2b3VsaWV6IMOqdHJlIHN1ciB1bmUgYnJhbmNoZSwgY3LDqWV6LWVuIHVuZSBtYWludGVuYW50IGVuIHBhcnRhbnQgZGUgIgotIidDZXQgZW1wcnVudCBkw6l0YWNow6knLiIKKyJwcm9mb25kZXVyIGQnaW5jbHVzaW9uIG1heGltdW0gKCVkKSBkw6lwYXNzw6llIMOgIGwnaW5jbHVzaW9uIGRlXG4iCisiXHQlc1xuIgorImRlcHVpc1xuIgorIlx0JXNcbiIKKyJwb3NzaWJpbGl0w6kgZCdpbmNsdXNpb25zIG11bHRpcGxlcy4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIiclcycgY2hhcmfDqS4iCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAiZXhwYW5zaW9uIGltcG9zc2libGUgZHUgY2hlbWluIGQnaW5jbHVzaW9uICclcyciCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKLW1zZ3N0ciAiUsOpaW5pdGlhbGlzZXIgJyVzJyDDoCAnJXMnIHZhIGZhaXJlIHBlcmRyZSBsZXMgY29tbWl0cyBzdWl2YW50cyA6IgorIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJsZXMgaW5jbHVzaW9ucyBkZSBjb25maWd1cmF0aW9uIHJlbGF0aXZlcyBkb2l2ZW50IHZlbmlyIGRlIGZpY2hpZXJzIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU1NwotbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCi1tc2dzdHIgIlLDqWN1cMOpcmVyIGxlcyBjb21taXRzIHBlcmR1cyBuZSBzZXJhIHBldXQgw6p0cmUgcGFzIGZhY2lsZS4iCisjOiBjb25maWcuYzoxOTcKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSBjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgIiIKKyJsZXMgY29uZGl0aW9ucyBkJ2luY2x1c2lvbiBkZSBjb25maWd1cmF0aW9uIHJlbGF0aXZlIGRvaXZlbnQgdmVuaXIgZGUgIgorImZpY2hpZXJzIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0ICclcyc/IgotbXNnc3RyICJSw6lpbml0aWFsaXNlciAnJXMnID8iCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAibGEgY2zDqSBuZSBjb250aWVudCBwYXMgZGUgc2VjdGlvbjogJXMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY0IGxpYi90b29sc19kbGcudGNsOjM0MwotbXNnaWQgIlZpc3VhbGl6ZSIKLW1zZ3N0ciAiVmlzdWFsaXNlciIKKyM6IGNvbmZpZy5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAibGEgY2zDqSBuZSBjb250aWVudCBwYXMgZGUgbm9tIGRlIHZhcmlhYmxlwqA6ICVzIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQotIywgdGNsLWZvcm1hdAorIzogY29uZmlnLmM6NDA2IHNlcXVlbmNlci5jOjI1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJjbMOpIGludmFsaWRlwqA6ICVzIgorCisjOiBjb25maWcuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgKG5ld2xpbmUpOiAlcyIKK21zZ3N0ciAiY2zDqSBpbnZhbGlkZSAocmV0b3VyIGNoYXJpb3QpwqA6ICVzIgorCisjOiBjb25maWcuYzo0NDggY29uZmlnLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIgorbXNnc3RyICJwYXJhbcOodHJlIGRlIGNvbmZpZ3VyYXRpb24gbWFsIGZvcm3DqTogJXMiCisKKyM6IGNvbmZpZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBmb3JtYXQgaW4gJXMiCittc2dzdHIgImZvcm1hdGFnZSBtYWwgZm9ybcOpIGRhbnMgJXMiCisKKyM6IGNvbmZpZy5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAibGlnbmUgJWQgZGUgY29uZmlnIGluY29ycmVjdGUgZGFucyBsZSBibG9iICVzIgorCisjOiBjb25maWcuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgImxpZ25lICVkIGRlIGNvbmZpZyBpbmNvcnJlY3RlIGRhbnMgbGUgZmljaGllciAlcyIKKworIzogY29uZmlnLmM6ODI5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGlnbmUgJWQgZGUgY29uZmlnIGluY29ycmVjdGUgZGFucyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGNvbmZpZy5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3VibW9kdWxlLWJsb2IgJXMiCittc2dzdHIgImxpZ25lICVkIGRlIGNvbmZpZyBpbmNvcnJlY3RlIGRhbnMgbGUgYmxvYiBkZSBzb3VzLW1vZHVsZSAlcyIKKworIzogY29uZmlnLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBjb21tYW5kIGxpbmUgJXMiCittc2dzdHIgImxpZ25lICVkIGRlIGNvbmZpZyBpbmNvcnJlY3RlIGRhbnMgbGEgbGlnbmUgZGUgY29tbWFuZGUgJXMiCisKKyM6IGNvbmZpZy5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgImxpZ25lICVkIGRlIGNvbmZpZyBpbmNvcnJlY3RlIGRhbnMgJXMiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAiaG9ycyBwbGFnZSIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICJ1bml0w6kgaW52YWxpZGUiCisKKyM6IGNvbmZpZy5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgInZhbGV1ciBudW3DqXJpcXVlIGRlIGNvbmZpZ3VyYXRpb24gaW52YWxpZGUgJyVzJyBwb3VyICclcyfCoDogJXMiCisKKyM6IGNvbmZpZy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorInZhbGV1ciBudW3DqXJpcXVlIGRlIGNvbmZpZ3VyYXRpb24gaW5jb3JyZWN0ZSAnJXMnIHBvdXIgJyVzJyBkYW5zIGxlIGJsb2IgIgorIiVzwqA6ICVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisidmFsZXVyIG51bcOpcmlxdWUgZGUgY29uZmlndXJhdGlvbiBpbmNvcnJlY3RlICclcycgcG91ciAnJXMnIGRhbnMgbGUgZmljaGllciAiCisiJXPCoDogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6ICVzIgorbXNnc3RyICIiCisidmFsZXVyIG51bcOpcmlxdWUgZGUgY29uZmlndXJhdGlvbiBpbmNvcnJlY3RlICclcycgcG91ciAnJXMnIGRhbnMgbCdlbnRyw6llICIKKyJzdGFuZGFyZMKgOiAlcyIKKworIzogY29uZmlnLmM6MTAwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogJXMiCittc2dzdHIgIiIKKyJ2YWxldXIgbnVtw6lyaXF1ZSBkZSBjb25maWd1cmF0aW9uIGluY29ycmVjdGUgJyVzJyBwb3VyICclcycgZGFucyBsZSBibG9iIGRlICIKKyJzb3VzLW1vZHVsZSAlc8KgOiAlcyIKKworIzogY29uZmlnLmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6ICVzIgorbXNnc3RyICIiCisidmFsZXVyIG51bcOpcmlxdWUgZGUgY29uZmlndXJhdGlvbiBpbmNvcnJlY3RlICclcycgcG91ciAnJXMnIGRhbnMgbGEgbGlnbmUgZGUgIgorImNvbW1hbmRlICVzwqA6ICVzIgorCisjOiBjb25maWcuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAiIgorInZhbGV1ciBudW3DqXJpcXVlIGRlIGNvbmZpZ3VyYXRpb24gaW5jb3JyZWN0ZSAnJXMnIHBvdXIgJyVzJyBkYW5zICVzwqA6ICVzIgorCisjOiBjb25maWcuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgImltcG9zc2libGUgZCfDqXRlbmRyZSBsZSByw6lwZXJ0b2lyZSB1dGlsaXNhdGV1ciBkYW5zIDogJyVzJyIKKworIzogY29uZmlnLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyBwb3VyICclcycgbidlc3QgcGFzIHVuIGhvcm9kYXRhZ2UgdmFsaWRlIgorCisjOiBjb25maWcuYzoxMjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYnJldiBsZW5ndGggb3V0IG9mIHJhbmdlOiAlZCIKK21zZ3N0ciAibG9uZ3VldXIgZCdhYmJyZXYgaG9ycyBwbGFnZcKgOiAlZCIKKworIzogY29uZmlnLmM6MTIyMiBjb25maWcuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICJuaXZlYXUgZGUgY29tcHJlc3Npb24gemxpYiBpbmNvcnJlY3QgJWQiCisKKyM6IGNvbmZpZy5jOjEzMjUKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgImNvcmUuY29tbWVudENoYXIgbmUgZGV2cmFpdCDDqnRyZSBxdSd1biB1bmlxdWUgY2FyYWN0w6hyZSIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIm1vZGUgaW52YWxpZGUgcG91ciBsYSBjcsOpYXRpb24gZCdvYmpldCA6ICVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgInZhbGV1ciBtYWwgZm9ybcOpZSBwb3VyICVzIgorCisjOiBjb25maWcuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJ2YWxldXIgbWFsIGZvcm3DqWUgcG91ciAlc8KgOiAlcyIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgImRvaXQgw6p0cmUgcGFybWkgbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3UgY3VycmVudCIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm5pdmVhdSBkZSBjb21wcmVzc2lvbiBkdSBwYXF1ZXQgJWQiCisKKyM6IGNvbmZpZy5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY2hhcmdlciBsJ29iamV0IGJsb2IgZGUgY29uZmlnICclcyciCisKKyM6IGNvbmZpZy5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIgorbXNnc3RyICJsYSByw6lmw6lyZW5jZSAnJXMnIG5lIHBvaW50ZSBwYXMgc3VyIHVuIGJsb2IiCisKKyM6IGNvbmZpZy5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgY29uZmlnIGJsb2IgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgbGUgYmxvYiBkZSBjb25maWcgJyVzJyIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgIsOpY2hlYyBkZSBsJ2FuYWx5c2UgZGUgJXMiCisKKyM6IGNvbmZpZy5jOjE3NDUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAibGVjdHVyZSBkZSBsYSBjb25maWd1cmF0aW9uIGRlIGxpZ25lIGRlIGNvbW1hbmRlIGltcG9zc2libGUiCisKKyM6IGNvbmZpZy5jOjIwOTYKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgImVycmV1ciBpbmNvbm51ZSBwZW5kYW50IGxhIGxlY3R1cmUgZGVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24iCisKKyM6IGNvbmZpZy5jOjIyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiJXMgaW52YWxpZGUgOiAnJXMnIgorCisjOiBjb25maWcuYzoyMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAiIgorImxhIHZhbGV1ciAnJWQnIGRlIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSBkZXZyYWl0IHNlIHNpdHVlciBlbnRyZSAwIGV0ICIKKyIxMDAiCisKKyM6IGNvbmZpZy5jOjIzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyICclcycgZGVwdWlzIGxlIGNvbmZpZ3VyYXRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUiCisKKyM6IGNvbmZpZy5jOjIzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICIiCisidmFyaWFibGUgZGUgY29uZmlndXJhdGlvbiAnJXMnIGluY29ycmVjdGUgZGFucyBsZSBmaWNoaWVyICclcycgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGNvbmZpZy5jOjI0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tIGRlIHNlY3Rpb24gaW52YWxpZGUgJyVzJyIKKworIzogY29uZmlnLmM6MjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIgorbXNnc3RyICIlcyBhIGRlcyB2YWxldXJzIG11bHRpcGxlcyIKKworIzogY29uZmlnLmM6MjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uICVzIgorCisjOiBjb25maWcuYzoyNzUzIGNvbmZpZy5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgdmVycm91aWxsZXIgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uICVzIgorCisjOiBjb25maWcuYzoyNzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgJXMiCittc2dzdHIgIm91dmVydHVyZSBkZSAlcyIKKworIzogY29uZmlnLmM6Mjc5OSBidWlsdGluL2NvbmZpZy5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdHRlcm46ICVzIgorbXNnc3RyICJtb3RpZiBpbnZhbGlkZSA6ICVzIgorCisjOiBjb25maWcuYzoyODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBpbnZhbGlkZSAlcyIKKworIzogY29uZmlnLmM6MjgzNyBjb25maWcuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGZzdGF0IHN1ciAlcyIKKworIzogY29uZmlnLmM6Mjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqWFsaXNlciB1biBtYXAgZGUgJyVzJyIKKworIzogY29uZmlnLmM6Mjg1NyBjb25maWcuYzozMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGNobW9kIHN1ciAlcyIKKworIzogY29uZmlnLmM6Mjk0MiBjb25maWcuYzozMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uICVzIgorCisjOiBjb25maWcuYzoyOTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqWdsZXIgJyVzJyDDoCAnJXMnIgorCisjOiBjb25maWcuYzoyOTc4IGJ1aWx0aW4vcmVtb3RlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXNpbml0aWFsaXNlciAnJXMnIgorCisjOiBjb25maWcuYzozMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIKK21zZ3N0ciAibm9tIGRlIHNlY3Rpb24gaW52YWxpZGXCoDogJXMiCisKKyM6IGNvbmZpZy5jOjMyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIKK21zZ3N0ciAidmFsZXVyIG1hbnF1YW50ZSBwb3VyICclcyciCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgImwnaMO0dGUgZGlzdGFudCBhIGZlcm3DqSBsYSBjb25uZXhpb24gbG9ycyBkdSBjb250YWN0IGluaXRpYWwiCisKKyM6IGNvbm5lY3QuYzo2MwogbXNnaWQgIiIKLSJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgorIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG4iCiAiXG4iCi0iVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKLSJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKLSJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKIG1zZ3N0ciAiIgotIkxlIGNoYW5nZW1lbnQgZGUgbGEgYnJhbmNoZSBjb3VyYW50ZSBhIMOpY2hvdcOpLlxuIgorIkltcG9zc2libGUgZGUgbGlyZSBsZSBkw6lww7R0IGRpc3RhbnQuXG4iCiAiXG4iCi0iTGUgcsOpcGVydG9pcmUgY291cmFudCBuJ2VzdCBxdWUgcGFydGllbGxlbWVudCBtb2RpZmnDqS4gTGVzIGZpY2hpZXJzIG9udCDDqXTDqSAiCi0ibWlzIMOgIGpvdXIgYXZlYyBzdWNjw6hzLCBtYWlzIGxhIG1pc2Ugw6Agam91ciBkJ3VuIGZpY2hpZXIgaW50ZXJuZSDDoCBHaXQgYSAiCi0iw6ljaG91w6llLlxuIgotIlxuIgotIkNlbGEgbidhdXJhaXQgcGFzIGTDuyBzZSBwcm9kdWlyZS4gJXMgdmEgYWJhbmRvbm5lciBldCBzZSB0ZXJtaW5lci4iCisiVmV1aWxsZXogdsOpcmlmaWVyIHF1ZSB2b3VzIGF2ZXogbGVzIGRyb2l0cyBkJ2FjY8Ooc1xuIgorImV0IHF1ZSBsZSBkw6lww7R0IGV4aXN0ZS4iCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKLW1zZ2lkICJTZWxlY3QiCi1tc2dzdHIgIlPDqWxlY3Rpb25uZXIiCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICJMZSBzZXJ2ZXVyIG5lIHN1cHBvcnRlIHBhcyAnJXMnIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCi1tc2dpZCAiRm9udCBGYW1pbHkiCi1tc2dzdHIgIkZhbWlsbGVzIGRlIHBvbGljZXMiCisjOiBjb25uZWN0LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgZmVhdHVyZSAnJXMnIgorbXNnc3RyICJMZSBzZXJ2ZXVyIG5lIHN1cHBvcnRlIHBhcyBsYSBmb25jdGlvbm5hbGl0w6kgJyVzJyIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo3NAotbXNnaWQgIkZvbnQgU2l6ZSIKLW1zZ3N0ciAiVGFpbGxlIGRlIHBvbGljZSIKKyM6IGNvbm5lY3QuYzoxMTQKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciBjYXBhYmlsaXRpZXMiCittc2dzdHIgInZpZGFnZSBhdHRlbmR1IGFwcsOocyBsZXMgY2FwYWNpdMOpcyIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo5MQotbXNnaWQgIkZvbnQgRXhhbXBsZSIKLW1zZ3N0ciAiRXhlbXBsZSBkZSBwb2xpY2UiCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgImNhcGFjaXTDqXMgaWdub3LDqWVzIGFwcsOocyBsYSBwcmVtacOocmUgbGlnbmUgJyVzJyIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDoxMDMKKyM6IGNvbm5lY3QuYzoyNTIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBjYXBhYmlsaXRpZXNee30iCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogY2FwYWJpbGl0aWVzXnt9IGluYXR0ZW5kdSIKKworIzogY29ubmVjdC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhbGxvdyBzaGEtMSwgZ290ICclcyciCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogc2hhbGxvdyBzaGEtMSBhdHRlbmR1LCAnJXMnIHRyb3V2w6kiCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgImxlIGTDqXDDtHQgZGlzdGFudCBuZSBwZXV0IHBhcyDDqnRyZSBzdXBlcmZpY2llbCIKKworIzogY29ubmVjdC5jOjMxMworbXNnaWQgImludmFsaWQgcGFja2V0IgorbXNnc3RyICJwYXF1ZXQgaW52YWxpZGUiCisKKyM6IGNvbm5lY3QuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIKK21zZ3N0ciAiZXJyZXVyIGRlIHByb3RvY29sZcKgOiAnJXMnIGF0dGVuZHUiCisKKyM6IGNvbm5lY3QuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBscy1yZWZzIHJlc3BvbnNlOiAlcyIKK21zZ3N0ciAicsOpcG9uc2Ugw6AgbHMtcmVmIGludmFsaWRlIDogJXMiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAidmlkYWdlIGF0dGVuZHUgYXByw6hzIGxlIGxpc3RhZ2UgZGUgcsOpZsOpcmVuY2VzIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibGUgcHJvdG9jb2xlICclcycgbidlc3QgcGFzIHN1cHBvcnTDqSIKKworIzogY29ubmVjdC5jOjU5NQorbXNnaWQgInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBwb3NpdGlvbm5lciBTT19LRUVQQUxJVkUgc3VyIGxhIHNvY2tldCIKKworIzogY29ubmVjdC5jOjYzNSBjb25uZWN0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2tpbmcgdXAgJXMgLi4uICIKK21zZ3N0ciAiUmVjaGVyY2hlIGRlICVz4oCmICIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZWNoZXJjaGVyICVzIChwb3J0ICVzKSAoJXMpIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgotIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCisiZG9uZS5cbiIKKyJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgogbXNnc3RyICIiCi0iQ2VjaSBlc3QgdW4gdGV4dGUgZCdleGVtcGxlLlxuIgotIlNpIHZvdXMgYWltZXogY2UgdGV4dGUsIHZvdXMgcG91dmV6IGNob2lzaXIgY2V0dGUgcG9saWNlLiIKKyJmYWl0LlxuIgorIkNvbm5leGlvbiDDoCAlcyAocG9ydCAlcynigKYgIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Ci1tc2dpZCAiR2l0IEd1aSIKLW1zZ3N0ciAiR2l0IEd1aSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NgotbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQ3LDqWVyIG5vdXZlYXUgZMOpcMO0dCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MwotbXNnaWQgIk5ldy4uLiIKLW1zZ3N0ciAiTm91dmVhdS4uLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzEKLW1zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICJDbG9uZXIgdW4gZMOpcMO0dCBleGlzdGFudCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDYKLW1zZ2lkICJDbG9uZS4uLiIKLW1zZ3N0ciAiQ2xvbmVyLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTYKLW1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIk91dnJpciB1biBkw6lww7R0IGV4aXN0YW50IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExOQotbXNnaWQgIk9wZW4uLi4iCi1tc2dzdHIgIk91dnJpci4uLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKLW1zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgotbXNnc3RyICJEw6lww7R0cyByw6ljZW1tZW50IHV0aWxpc8OpcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKLW1zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKLW1zZ3N0ciAiT3V2cmlyIHVuIGTDqXDDtHQgcsOpY2VudCA6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgotbXNnc3RyICJMYSBjcsOpYXRpb24gZHUgZMOpcMO0dCAlcyBhIMOpY2hvdcOpIDoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCi1tc2dpZCAiRGlyZWN0b3J5OiIKLW1zZ3N0ciAiUsOpcGVydG9pcmUgOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1MgotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgotbXNnc3RyICJEw6lww7R0IEdpdCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJMZSByw6lwZXJ0b2lyZSAlcyBleGlzdGUgZMOpasOgLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTGUgZmljaGllciAlcyBleGlzdGUgZMOpasOgLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjYKLW1zZ2lkICJDbG9uZSIKLW1zZ3N0ciAiQ2xvbmVyIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQotbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCi1tc2dzdHIgIkVtcGxhY2VtZW50IHNvdXJjZSA6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MAotbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgotbXNnc3RyICJSw6lwZXJ0b2lyZSBjaWJsZSA6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgotbXNnaWQgIkNsb25lIFR5cGU6IgotbXNnc3RyICJUeXBlIGRlIGNsb25hZ2UgOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKLW1zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCi1tc2dzdHIgIlN0YW5kYXJkIChyYXBpZGUsIHNlbWktcmVkb25kYW50LCBsaWVucyBkdXJzKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKLW1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCi1tc2dzdHIgIkNvcGllIGNvbXBsw6h0ZSAocGx1cyBsZW50LCBzYXV2ZWdhcmRlIHJlZG9uZGFudGUpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAotbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgotbXNnc3RyICJQYXJ0YWfDqSAobGUgcGx1cyByYXBpZGUsIG5vbiByZWNvbW1hbmTDqSwgcGFzIGRlIHNhdXZlZ2FyZGUpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMwotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCi1tc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIGTDqXDDtHQgR2l0LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKLW1zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIlN0YW5kYXJkIG4nZXN0IGRpc3BvbmlibGUgcXVlIHBvdXIgdW4gZMOpcMO0dCBsb2NhbC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk2Ci1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiUGFydGFnw6kgbidlc3QgZGlzcG9uaWJsZSBxdWUgcG91ciB1biBkw6lww7R0IGxvY2FsLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkwnZW1wbGFjZW1lbnQgJXMgZXhpc3RlIGTDqWrDoC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCi1tc2dzdHIgIkxhIGNvbmZpZ3VyYXRpb24gZGUgbCdvcmlnaW5lIGEgw6ljaG91w6kuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAotbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCi1tc2dzdHIgIkTDqWNvbXB0ZSBkZXMgb2JqZXRzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQotbXNnaWQgImJ1Y2tldHMiCi1tc2dzdHIgInBhbmllcnMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNvcGllciAnb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMnIDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKLW1zZ3N0ciAiSWwgbid5IGEgcmllbiDDoCBjbG9uZXIgZGVwdWlzICVzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI5Ci1tc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgotbXNnc3RyICJMYSBicmFuY2hlICdtYXN0ZXInIG4nYSBwYXMgw6l0w6kgaW5pdGlhbGlzw6llLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTYKLW1zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgotbXNnc3RyICIiCi0iTGVzIGxpZW5zIGR1cnMgbmUgc29udCBwYXMgc3VwcG9ydMOpcy4gVW5lIGNvcGllIHNlcmEgZWZmZWN0dcOpZSDDoCBsYSBwbGFjZS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2xvbmluZyBmcm9tICVzIgotbXNnc3RyICJDbG9uYWdlIGRlcHVpcyAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTkKLW1zZ2lkICJDb3B5aW5nIG9iamVjdHMiCi1tc2dzdHIgIkNvcGllIGRlcyBvYmpldHMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzYwCi1tc2dpZCAiS2lCIgotbXNnc3RyICJLaUIiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjb3BpZXIgbCdvYmpldCA6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAotbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiTGlhaXNvbiBkZXMgb2JqZXRzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NQotbXNnaWQgIm9iamVjdHMiCi1tc2dzdHIgIm9iamV0cyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBjcsOpZXIgdW4gbGllbiBkdXIgcG91ciBsJ29iamV0IDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Ci1tc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIGJyYW5jaGVzIGV0IG9iamV0cy4gVm9pciBsYSBzb3J0aWUgY29uc29sZSBwb3VyICIKLSJwbHVzIGRlIGTDqXRhaWxzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIGxlcyBtYXJxdWVzICh0YWdzKS4gVm9pciBsYSBzb3J0aWUgY29uc29sZSBwb3VyIHBsdXMgIgotImRlIGTDqXRhaWxzLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTMKLW1zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSBkw6l0ZXJtaW5lciBIRUFELiBWb2lyIGxhIHNvcnRpZSBjb25zb2xlIHBvdXIgcGx1cyBkZSBkw6l0YWlscy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCi1tc2dzdHIgIkltcG9zc2libGUgZGUgbmV0dG95ZXIgJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4Ci1tc2dpZCAiQ2xvbmUgZmFpbGVkLiIKLW1zZ3N0ciAiTGUgY2xvbmFnZSBhIMOpY2hvdcOpLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTUKLW1zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCi1tc2dzdHIgIkF1Y3VuZSBicmFuY2hlIHBhciBkw6lmYXV0IG4nYSDDqXTDqSBvYnRlbnVlLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgcsOpc291ZHJlICVzIGNvbW1lIGNvbW1pdC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Ci1tc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIkNyw6lhdGlvbiBkdSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOSBsaWIvaW5kZXgudGNsOjY3IGxpYi9pbmRleC50Y2w6MTMwCi0jOiBsaWIvaW5kZXgudGNsOjE5OAotbXNnaWQgImZpbGVzIgotbXNnc3RyICJmaWNoaWVycyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKLW1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKLW1zZ3N0ciAiTGUgY2hhcmdlbWVudCBpbml0aWFsIGR1IGZpY2hpZXIgYSDDqWNob3XDqS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQotbXNnaWQgIk9wZW4iCi1tc2dzdHIgIk91dnJpciIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIxCi1tc2dpZCAiUmVwb3NpdG9yeToiCi1tc2dzdHIgIkTDqXDDtHQgOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkltcG9zc2libGUgZCdvdXZyaXIgbGUgZMOpcMO0dCAlcyA6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICJDZXQgZW1wcnVudCBkw6l0YWNow6kiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo2MAotbXNnaWQgIlJldmlzaW9uIEV4cHJlc3Npb246IgotbXNnc3RyICJFeHByZXNzaW9uIGRlIHLDqXZpc2lvbiA6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzQKLW1zZ2lkICJMb2NhbCBCcmFuY2giCi1tc2dzdHIgIkJyYW5jaGUgbG9jYWxlIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKLW1zZ2lkICJUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIkJyYW5jaGUgZGUgc3VpdmkiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTM4Ci1tc2dpZCAiVGFnIgotbXNnc3RyICJNYXJxdWUgKHRhZykiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAiUsOpdmlzaW9uIGludmFsaWRlIDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKLW1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgIlBhcyBkZSByw6l2aXNpb24gc8OpbGVjdGlvbm7DqWUuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQ2Ci1tc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCi1tc2dzdHIgIkwnZXhwcmVzc2lvbiBkZSByw6l2aXNpb24gZXN0IHZpZGUuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCi1tc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAiTWlzZSDDoCBqb3VyOiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjU1OQotbXNnaWQgIlVSTCIKLW1zZ3N0ciAiVVJMIgotCi0jOiBsaWIvY29tbWl0LnRjbDo5CisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCi0iXG4iCi0iWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKLSJ0byBhbWVuZC5cbiIKKyJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiIKKyIlcyIKIG1zZ3N0ciAiIgotIklsIG4neSBhIHJpZW4gw6AgY29ycmlnZXIuXG4iCi0iXG4iCi0iVm91cyBhbGxleiBjcsOpZXIgbGUgY29tbWl0IGluaXRpYWwuIElsIG4neSBhIHBhcyBkZSBjb21taXQgYXZhbnQgY2VsdWktY2kgw6AgIgotImNvcnJpZ2VyLlxuIgorImltcG9zc2libGUgZGUgc2UgY29ubmVjdGVyIMOgICVzwqA6XG4iCisiJXMiCiAKLSM6IGxpYi9jb21taXQudGNsOjE4CisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorIzogY29ubmVjdC5jOjY3MSBjb25uZWN0LmM6NzQ4Cittc2dpZCAiZG9uZS4iCittc2dzdHIgImZhaXQuIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgImltcG9zc2libGUgZGUgcmVjaGVyY2hlciAlcyAoJXMpIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAicG9ydCBpbmNvbm51ICVzIgorCisjOiBjb25uZWN0LmM6ODQ1IGNvbm5lY3QuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgaG9zdG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICJub20gZCdow7R0ZSDDqXRyYW5nZSAnJXMnIGJsb3F1w6kiCisKKyM6IGNvbm5lY3QuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwb3J0ICclcycgYmxvY2tlZCIKK21zZ3N0ciAicG9ydCDDqXRyYW5nZSAnJXMnIGJsb3F1w6kiCisKKyM6IGNvbm5lY3QuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXJ0IHByb3h5ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqW1hcnJlciB1biBwcm94eSAlcyIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisiYXVjdW4gY2hlbWluIHNww6ljaWZpw6nCoDsgcsOpZsOpcmV6LXZvdXMgw6AgJ2dpdCBoZWxwIHB1bGwnIHBvdXIgdW5lIHN5bnRheGUgIgorImQnVVJMIHZhbGlkZSIKKworIzogY29ubmVjdC5jOjExMjMKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC00IgorbXNnc3RyICJsYSB2YXJpYW50ZSBzc2ggJ3NpbXBsZScgbmUgc3VwcG9ydGUgcGFzIC00IgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgImxhIHZhcmlhbnRlIHNzaCAnc2ltcGxlJyBuZSBzdXBwb3J0ZSBwYXMgLTYiCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgImxhIHZhcmlhbnRlIHNzaCAnc2ltcGxlJyBuZSBzdXBwb3J0ZSBwYXMgZGUgc3DDqWNpZmllciBsZSBwb3J0IgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiY2hlbWluIMOpdHJhbmdlICclcycgYmxvcXXDqSIKKworIzogY29ubmVjdC5jOjEzMTEKK21zZ2lkICJ1bmFibGUgdG8gZm9yayIKK21zZ3N0ciAiZm9yayBpbXBvc3NpYmxlIgorCisjOiBjb25uZWN0ZWQuYzo4OSBidWlsdGluL2ZzY2suYzoyMDggYnVpbHRpbi9wcnVuZS5jOjQzCittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlIGxhIGNvbm5lY3Rpdml0w6kiCisKKyM6IGNvbm5lY3RlZC5jOjEwMQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIkltcG9zc2libGUgZGUgbGFuY2VyICdnaXQgcmV2LWxpc3QnIgorCisjOiBjb25uZWN0ZWQuYzoxMjEKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGRhbnMgbGEgcmV2LWxpc3QiCisKKyM6IGNvbm5lY3RlZC5jOjEyOAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZlcm1lciBsJ2VudHLDqWUgc3RhbmRhcmQgZHUgcmV2LWxpc3QiCisKKyM6IGNvbnZlcnQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBjcmxmX2FjdGlvbiAlZCIKK21zZ3N0ciAiY3JsZl9hY3Rpb24gaWxsw6lnYWwgJWQiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiTGVzIENSTEYgc2VyYWllbnQgcmVtcGxhY8OpcyBwYXIgZGVzIExGIGRhbnMgJXMiCisKKyM6IGNvbnZlcnQuYzoyMDkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgotIlxuIgotIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCi0iY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKLSJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgogbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSBjb3JyaWdlciBwZW5kYW50IHVuZSBmdXNpb24uXG4iCi0iXG4iCi0iVm91cyDDqnRlcyBhY3R1ZWxsZW1lbnQgYXUgbWlsaWV1IGQndW5lIGZ1c2lvbiBxdWkgbidhIHBhcyDDqXTDqSBjb21wbMOodGVtZW50ICIKLSJ0ZXJtaW7DqWUuIFZvdXMgbmUgcG91dmV6IHBhcyBjb3JyaWdlciBsZSBjb21taXQgcHLDqWPDqWRlbnQgc2F1ZiBzaSB2b3VzICIKLSJhYmFuZG9ubmV6IGxhIGZ1c2lvbiBjb3VyYW50ZS5cbiIKKyJMZXMgQ1JMRiBzZXJvbnQgcmVtcGxhY8OpcyBwYXIgZGVzIExGIGRhbnMgJXMuXG4iCisiTGUgZmljaGllciBjb25zZXJ2ZXJhIHNlcyBmaW5zIGRlIGxpZ25lIGQnb3JpZ2luZSBkYW5zIHZvdHJlIGNvcGllIGRlIHRyYXZhaWwiCiAKLSM6IGxpYi9jb21taXQudGNsOjQ4Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgotbXNnc3RyICJFcnJldXIgbG9ycyBkdSBjaGFyZ2VtZW50IGRlcyBkb25uw6llcyBkZSBjb21taXQgcG91ciBjb3JyZWN0aW9uIDoiCisjOiBjb252ZXJ0LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIkxlcyBMRiBzZXJhaWVudCByZW1wbGFjw6lzIHBhciBkZXMgQ1JMRiBkYW5zICVzIgogCi0jOiBsaWIvY29tbWl0LnRjbDo3NQotbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCi1tc2dzdHIgIkltcG9zc2libGUgZCdvYnRlbmlyIHZvdHJlIGlkZW50aXTDqSA6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo4MAotbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCi1tc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQgaW52YWxpZGUgOiIKLQotIzogbGliL2NvbW1pdC50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCi1tc2dzdHIgImF0dGVudGlvbiA6IFRjbCBuZSBzdXBwb3J0ZSBwYXMgbGUgY29kYWdlICclcycuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoxNDkKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKIG1zZ3N0ciAiIgotIkwnw6l0YXQgbG9ycyBkZSBsYSBkZXJuacOocmUgc3luY2hyb25pc2F0aW9uIG5lIGNvcnJlc3BvbmQgcGx1cyDDoCBsJ8OpdGF0IGR1ICIKLSJkw6lww7R0LlxuIgotIlxuIgotIlVuIGF1dHJlIHByb2dyYW1tZSBHaXQgYSBtb2RpZmnDqSBjZSBkw6lww7R0IGRlcHVpcyBsYSBkZXJuacOocmUgIgotInN5bmNocm9uaXNhdGlvbi4gVW5lIHJlc3luc2hyb25pc2F0aW9uIGRvaXQgw6p0cmUgZWZmZWN0dcOpZSBhdmFudCBkZSBwb3V2b2lyICIKLSJjcsOpZXIgdW4gbm91dmVhdSBjb21taXQuXG4iCi0iXG4iCi0iQ2VsYSB2YSDDqnRyZSBmYWl0IHRvdXQgZGUgc3VpdGUgYXV0b21hdGlxdWVtZW50LlxuIgorIkxlcyBMRiBzZXJvbnQgcmVtcGxhY8OpcyBwYXIgZGVzIENSTEYgZGFucyAlcy5cbiIKKyJMZSBmaWNoaWVyIGNvbnNlcnZlcmEgc2VzIGZpbnMgZGUgbGlnbmUgZCdvcmlnaW5lIGRhbnMgdm90cmUgY29waWUgZGUgdHJhdmFpbCIKIAotIzogbGliL2NvbW1pdC50Y2w6MTcyCi0jLCB0Y2wtZm9ybWF0CisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiQXVjdW4gQk9NIG4nZXN0IHBlcm1pcyBkYW5zICclcycgcydpbCBlc3QgZW5jb2TDqSBjb21tZSAlcyIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKLSJiZWZvcmUgY29tbWl0dGluZy5cbiIKLW1zZ3N0ciAiIgotIkRlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcyBuZSBwZXV2ZW50IMOqdHJlIGNvbW1pdMOpcy5cbiIKLSJcbiIKLSJMZSBmaWNoaWVyICVzIGEgZGVzIGNvbmZsaWN0cyBkZSBmdXNpb24uIFZvdXMgZGV2ZXogbGVzIHLDqXNvdWRyZSBldCBwcsOpLSIKLSJjb21taXRlciBsZSBmaWNoaWVyIGF2YW50IGRlIHBvdXZvaXIgY29tbWl0ZXIuXG4iCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiTGUgZmljaGllciAnJXMnIGNvbnRpZW50IHVuIG1hcnF1ZXVyIGQnb3JkcmUgZCdvY3RldHMgKEJPTSkuIFZldWlsbGV6IHV0aWxpc2VyIFVURi0lLipzIGNvbW1lIGVuY29kYWdlIGQnYXJicmUgZGUgdHJhdmFpbC4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE4MAotIywgdGNsLWZvcm1hdAorIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJVbiBCT00gZXN0IG9ibGlnYXRvaXJlIGRhbnMgJyVzJyBzJ2lsIGVzdCBlbmNvZMOpIGNvbW1lICVzIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgVVRGLSIKKyIlc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCiBtc2dzdHIgIiIKLSJVbiDDqXRhdCBkZSBmaWNoaWVyIGluY29ubnUgJXMgYSDDqXTDqSBkw6l0ZWN0w6kuXG4iCi0iXG4iCi0iTGUgZmljaGllciAlcyBuZSBwZXV0IHBhcyDDqnRyZSBjb21taXTDqSBwYXIgY2UgcHJvZ3JhbW1lLlxuIgorIklsIG1hbnF1ZSB1biBtYXJxdWV1ciBkJ29yZHJlIGQnb2N0ZXRzIChCT00pIGF1IGZpY2hpZXIgJyVzJy4gVmV1aWxsZXogIgorInV0aWxpc2VyIFVURi0lc0JFIG91IFVURi0lc0xFIChzZWxvbiBsJ29yZHJlIGTDqXNpcsOpKSBjb21tZSBlbmNvZGFnZSBkJ2FyYnJlICIKKyJkZSB0cmF2YWlsLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTg4CisjOiBjb252ZXJ0LmM6NDE5IGNvbnZlcnQuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgIsOpY2hlYyBkZSBsJ2VuY29kYWdlIGRlICclcycgZGUgJXMgdmVycyAlcyIKKworIzogY29udmVydC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICIiCisiZW5jb2RlciAnJXMnIGRlcHVpcyAlcyB2ZXJzICVzIHB1aXMgaW52ZXJzZW1lbnQgbmUgcHJvZHVpdCBwYXMgbGUgbcOqbWUgIgorImNvbnRlbnUiCisKKyM6IGNvbnZlcnQuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZvcmtlciBwb3VyIGxhbmNlciBsZSBmaWx0cmUgZXh0ZXJuZSAnJXMnIgorCisjOiBjb252ZXJ0LmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmb3VybmlyIGwnZW50csOpZSBhdSBmaWx0cmUgZXh0ZXJuZSAnJXMnIgorCisjOiBjb252ZXJ0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAibGUgZmlsdHJlIGV4dGVybmUgJyVzJyBhIMOpY2hvdcOpICVkIgorCisjOiBjb252ZXJ0LmM6NzMwIGNvbnZlcnQuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGEgbGVjdHVyZSBkZXB1aXMgbGUgZmlsdHJlIGV4dGVybmUgJyVzJyBhIMOpY2hvdcOpIgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJsZSBmaWx0cmUgZXh0ZXJuZSAnJXMnIGEgw6ljaG91w6kiCisKKyM6IGNvbnZlcnQuYzo4MzkKK21zZ2lkICJ1bmV4cGVjdGVkIGZpbHRlciB0eXBlIgorbXNnc3RyICJ0eXBlIGRlIGZpbHRyZSBpbmF0dGVuZHUiCisKKyM6IGNvbnZlcnQuYzo4NTAKK21zZ2lkICJwYXRoIG5hbWUgdG9vIGxvbmcgZm9yIGV4dGVybmFsIGZpbHRlciIKK21zZ3N0ciAibm9tIGRlIGNoZW1pbiB0cm9wIGxvbmcgcG91ciB1biBmaWx0cmUgZXh0ZXJuZSIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgogbXNnc3RyICIiCi0iUGFzIGRlIG1vZGlmaWNhdGlvbiDDoCBjb21taXRlci5cbiIKLSJcbiIKLSJWb3VzIGRldmV6IGluZGV4ZXIgYXUgbW9pbnMgMSBmaWNoaWVyIGF2YW50IGRlIHBvdXZvaXIgY29tbWl0ZXIuXG4iCisibGUgZmlsdHJlIGV4dGVybmUgJyVzJyBuJ2VzdCBwbHVzIGRpc3BvbmlibGUgYmllbiBxdWUgdG91cyBsZXMgY2hlbWlucyAiCisibidhaWVudCBwYXMgw6l0w6kgZmlsdHLDqXMiCiAKLSM6IGxpYi9jb21taXQudGNsOjIwMworIzogY29udmVydC5jOjEyMjMKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICJ0cnVlL2ZhbHNlIG5lIHNvbnQgcGFzIGRlcyBlbmNvZGFnZXMgZCdhcmJyZSBkZSB0cmF2YWlsIHZhbGlkZXMiCisKKyM6IGNvbnZlcnQuYzoxNDExIGNvbnZlcnQuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiVzwqA6IGxlIGZpbHRyZSBjbGVhbiAnJXMnIGEgw6ljaG91w6kiCisKKyM6IGNvbnZlcnQuYzoxNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBzbXVkZ2UgZmlsdGVyICVzIGZhaWxlZCIKK21zZ3N0ciAiJXPCoDogbGUgZmlsdHJlIHNtdWRnZSAnJXMnIGEgw6ljaG91w6kiCisKKyM6IGRhdGUuYzoxMzgKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJkYW5zIGxlIGZ1dHVyIgorCisjOiBkYXRlLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICU8UFJJdU1BWD4gc2Vjb25kZSIKK21zZ3N0clsxXSAiaWwgeSBhICU8UFJJdU1BWD4gc2Vjb25kZXMiCisKKyM6IGRhdGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICJpbCB5IGEgJTxQUkl1TUFYPiBtaW51dGUiCittc2dzdHJbMV0gImlsIHkgYSAlPFBSSXVNQVg+IG1pbnV0ZXMiCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gImlsIHkgYSAlPFBSSXVNQVg+IGhldXJlIgorbXNnc3RyWzFdICJpbCB5IGEgJTxQUkl1TUFYPiBoZXVyZXMiCisKKyM6IGRhdGUuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICJpbCB5IGEgJTxQUkl1TUFYPiBqb3VyIgorbXNnc3RyWzFdICJpbCB5IGEgJTxQUkl1TUFYPiBqb3VycyIKKworIzogZGF0ZS5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICU8UFJJdU1BWD4gc2VtYWluZSIKK21zZ3N0clsxXSAiaWwgeSBhICU8UFJJdU1BWD4gc2VtYWluZXMiCisKKyM6IGRhdGUuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICU8UFJJdU1BWD4gbW9pcyIKK21zZ3N0clsxXSAiaWwgeSBhICU8UFJJdU1BWD4gbW9pcyIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gYW4iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gYW5zIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gImlsIHkgYSAlcyBldCAlPFBSSXVNQVg+IG1vaXMiCittc2dzdHJbMV0gImlsIHkgYSAlcyBldCAlPFBSSXVNQVg+IG1vaXMiCisKKyM6IGRhdGUuYzoxOTcgZGF0ZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICU8UFJJdU1BWD4gYW4iCittc2dzdHJbMV0gImlsIHkgYSAlPFBSSXVNQVg+IGFucyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAiUHJvcGFnYXRpb24gZGVzIG1hcnF1ZXMgZCfDrmxvdHMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICJvYmpldCBhcmJyZSBpbnZhbGlkZSAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNoYXJnZXIgbGEgcmVnZXggw65sZSBwb3VyICclcyfCoDogJXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaXNsYW5kIHJlZ2V4IGZyb20gY29uZmlnIGhhcyB0b28gbWFueSBjYXB0dXJlIGdyb3VwcyAobWF4PSVkKSIKK21zZ3N0ciAiIgorImwnZXhwcmVzc2lvbiByYXRpb25uZWxsZSBkZXB1aXMgbGEgY29uZmlndXJhdGlvbiBhIHRyb3AgZGUgZ3JvdXBlcyBkZSAiCisiY2FwdHVyZSAobWF4PSVkKSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAiTWFycXVhZ2UgZGUgJWQgw65sb3RzLCBmYWl0LlxuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciBkZSBjb21tYW5kZSAnJXMnIgorCisjOiBkaWZmY29yZS1yZW5hbWUuYzo1NDMKK21zZ2lkICJQZXJmb3JtaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiRMOpdGVjdGlvbiBkZSByZW5vbW1hZ2UgaW5leGFjdCBlbiBjb3VycyIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPG9wdGlvbnM+XSA8Y2hlbWluPiA8Y2hlbWluPiIKKworIzogZGlmZi1uby1pbmRleC5jOjI2MwogbXNnaWQgIiIKLSJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0iXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKLSJcbiIKLSItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCi0iLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKLSItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgogbXNnc3RyICIiCi0iTWVyY2kgZGUgZm91cm5pciB1biBtZXNzYWdlIGRlIGNvbW1pdC5cbiIKLSJcbiIKLSJVbiBib24gbWVzc2FnZSBkZSBjb21taXQgYSBsZSBmb3JtYXQgc3VpdmFudCA6XG4iCi0iXG4iCi0iLSBQcmVtacOocmUgbGlnbmUgOiBkw6ljcmlyZSBlbiB1bmUgcGhyYXNlIGNlIHF1ZSB2b3VzIGF2ZXogZmFpdC5cbiIKLSItIERldXhpw6htZSBsaWduZSA6IHJpZW4uXG4iCi0iLSBMaWduZXMgc3VpdmFudGVzIDogRMOpY3JpcmUgcG91cnF1b2kgY2VzIG1vZGlmaWNhdGlvbnMgc29udCBib25uZXMuXG4iCisiUGFzIHVuIGTDqXDDtHQgZ2l0LiBVdGlsaXNleiAtLW5vLWluZGV4IHBvdXIgY29tcGFyZXIgZGV1eCBjaGVtaW5zIGhvcnMgZCd1biAiCisiYXJicmUgZGUgdHJhdmFpbCIKIAotIzogbGliL2NvbW1pdC50Y2w6MjM0Ci1tc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCi1tc2dzdHIgIkxhbmNlbWVudCBkZSBsJ2FjdGlvbiBkJ2F2YW50LWNvbW1pdC4uLiIKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIiCisiICBJbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgcG91cmNlbnRhZ2UgZGUgbW9kaWZpY2F0aW9uIGRlIGRpcnN0YXQgJyVzJ1xuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNDkKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKLW1zZ3N0ciAiQ29tbWl0IHJlZnVzw6kgcGFyIGwnYWN0aW9uIGQnYXZhbnQtY29tbWl0LiIKKyM6IGRpZmYuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICBQYXJhbcOodHJlIGRpcnN0YXQgaW5jb25udSAnJXMnXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI3MgotbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICJMYW5jZW1lbnQgZGUgbCdhY3Rpb24gXCJtZXNzYWdlIGRlIGNvbW1pdFwiLi4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDoyODcKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiQ29tbWl0IHJlZnVzw6kgcGFyIGwnYWN0aW9uIFwibWVzc2FnZSBkZSBjb21taXRcIi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMwMAotbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKLW1zZ3N0ciAiQ29tbWl0IGRlcyBtb2RpZmljYXRpb25zLi4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDozMTYKLW1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCi1tc2dzdHIgIndyaXRlLXRyZWUgYSDDqWNob3XDqSA6IgotCi0jOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICJMZSBjb21taXQgYSDDqWNob3XDqS4iCi0KLSM6IGxpYi9jb21taXQudGNsOjMzNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCi1tc2dzdHIgIkxlIGNvbW1pdCAlcyBzZW1ibGUgw6p0cmUgY29ycm9tcHUiCi0KLSM6IGxpYi9jb21taXQudGNsOjMzOQorIzogZGlmZi5jOjI5NgogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkLXplYnJhJywgJ3BsYWluJyIKIG1zZ3N0ciAiIgotIlBhcyBkZSBtb2RpZmljYXRpb24gw6AgY29tbWl0ZXIuXG4iCi0iXG4iCi0iQXVjdW4gZmljaGllciBuJ2Egw6l0w6kgbW9kaWZpw6kgcGFyIGNlIGNvbW1pdCBldCBpbCBuZSBzJ2FnaXQgcGFzIGQndW4gY29tbWl0ICIKLSJkZSBmdXNpb24uXG4iCi0iXG4iCi0iVW5lIHJlc3luY2hyb25pc2F0aW9uIHZhIMOqdHJlIGxhbmPDqWUgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnQuXG4iCisibGUgcGFyYW3DqHRyZSBkZSBjb3VsZXVyIGRlIGTDqXBsYWNlbWVudCBkb2l0IMOqdHJlIHBhcm1pICdubycsICdkZWZhdWx0JywgIgorIidibG9ja3MnLCAnemVicmEnLCAnZGltbWVkX3plYnJhJyBvdSAncGxhaW4nIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNDYKLW1zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCi1tc2dzdHIgIlBhcyBkZSBtb2RpZmljYXRpb25zIMOgIGNvbW1pdGVyLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzYwCi1tc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAiY29tbWl0LXRyZWUgYSDDqWNob3XDqSA6IgotCi0jOiBsaWIvY29tbWl0LnRjbDozODEKLW1zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCi1tc2dzdHIgInVwZGF0ZS1yZWYgYSDDqWNob3XDqSA6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo0NjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCi1tc2dzdHIgIkNvbW1pdCAlcyBjcsOpw6kgOiAlcyIKLQotIzogbGliL2NvbnNvbGUudGNsOjU5Ci1tc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiVHJhdmFpbCBlbiBjb3Vycy4uLiBtZXJjaSBkZSBwYXRpZW50ZXIuLi4iCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoxODYKLW1zZ2lkICJTdWNjZXNzIgotbXNnc3RyICJTdWNjw6hzIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MjAwCi1tc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgotbXNnc3RyICJFcnJldXIgOiDDqWNoZWMgZGUgbGEgY29tbWFuZGUiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKLW1zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAiTm9tYnJlIGQnb2JqZXRzIGVuIGZpY2hpZXIgcGFydGljdWxpZXIiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAiRXNwYWNlIGRpc3F1ZSB1dGlsaXPDqSBwYXIgbGVzIGZpY2hpZXJzIHBhcnRpY3VsaWVycyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NQotbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAiTm9tYnJlIGQnb2JqZXRzIGVtcGFxdWV0w6lzIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgotbXNnc3RyICJOb21icmUgZGUgcGFxdWV0cyBkJ29iamV0cyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NwotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAiRXNwYWNlIGRpc3F1ZSB1dGlsaXPDqSBwYXIgbGVzIG9iamV0cyBlbXBhcXVldMOpcyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OAotbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCi1tc2dzdHIgIk9iamV0cyBlbXBhcXVldMOpcyBhdHRlbmRhbnQgZCfDqnRyZSBzdXBwcmltw6lzIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ5Ci1tc2dpZCAiR2FyYmFnZSBmaWxlcyIKLW1zZ3N0ciAiRmljaGllcnMgcG91YmVsbGUiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKLW1zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgotbXNnc3RyICJDb21wcmVzc2lvbiBkZSBsYSBiYXNlIGRlcyBvYmpldHMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKLW1zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKLW1zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZSBsYSBiYXNlIGRlcyBvYmpldHMgYXZlYyBmc2NrLW9iamVjdHMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6MzI0CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCi0iXG4iCi0iVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCi0idGhlIGRhdGFiYXNlLlxuIgotIlxuIgotIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorInVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnLCBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUtc3BhY2UtY2hhbmdlJywgIgorIidpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKIG1zZ3N0ciAiIgotIkNlIGTDqXDDtHQgY29tcHJlbmQgYWN0dWVsbGVtZW50IGVudmlyb24gJWkgb2JqZXRzIGF5YW50IGxldXIgZmljaGllciAiCi0icGFydGljdWxpZXIuXG4iCi0iXG4iCi0iUG91ciBjb25zZXJ2ZXIgdW5lIHBlcmZvcm1hbmNlIG9wdGltYWxlLCBpbCBlc3QgZm9ydGVtZW50IHJlY29tbWFuZMOpIGRlICIKLSJjb21wcmltZXIgbGEgYmFzZSBkZSBkb25uw6llLlxuIgotIlxuIgotIkNvbXByaW1lciBsYSBiYXNlIG1haW50ZW5hbnQgPyIKKyJtb2RlIHVua25vd24gY29sb3ItbW92ZWQtd3MgaW5jb25udSAnJXMnLCBsZXMgdmFsZXVycyBwb3NzaWJsZXMgc29udCAnaWdub3JlLSIKKyJzcGFjZS1jaGFuZ2UnLCAnaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLSIKKyJjaGFuZ2UnIgogCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICJEYXRlIGludmFsaWRlIGRlIEdpdCA6ICVzIgotCi0jOiBsaWIvZGlmZi50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzozMzIKIG1zZ2lkICIiCi0iTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iJXMgaGFzIG5vIGNoYW5nZXMuXG4iCi0iXG4iCi0iVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgotInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCi0iXG4iCi0iQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCi0idGhlIHNhbWUgc3RhdGUuIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgIgorIndoaXRlc3BhY2UgbW9kZXMiCiBtc2dzdHIgIiIKLSJBdWN1bmUgZGlmZsOpcmVuY2UgZMOpdGVjdMOpZS5cbiIKLSJcbiIKLSIlcyBuZSBjb21wb3J0ZSBhdWN1bmUgbW9kaWZpY2F0aW9uLlxuIgotIlxuIgotIkxhIGRhdGUgZGUgbW9kaWZpY2F0aW9uIGRlIGNlIGZpY2hpZXIgYSDDqXTDqSBtaXNlIMOgIGpvdXIgcGFyIHVuZSBhdXRyZSAiCi0iYXBwbGljYXRpb24sIG1haXMgbGUgY29udGVudSBkdSBmaWNoaWVyIG4nYSBwYXMgY2hhbmfDqS5cbiIKLSJcbiIKLSJVbmUgcmVzeW5jaHJvbmlzYXRpb24gdmEgw6p0cmUgbGFuY8OpZSBhdXRvbWF0aXF1ZW1lbnQgcG91ciB0cm91dmVyIGQnYXV0cmVzICIKLSJmaWNoaWVycyBxdWkgcG91cnJhaWVudCBzZSB0cm91dmVyIGRhbnMgbGUgbcOqbWUgw6l0YXQuIgorImNvbG9yLW1vdmVkLXdzwqA6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBuZSBwZXV0IHBhcyDDqnRyZSBjb21iaW7DqSBhdmVjICIKKyJkJ2F1dHJlcyBtb2RlcyBkJ2VzcGFjZSIKIAotIzogbGliL2RpZmYudGNsOjEwNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKLW1zZ3N0ciAiQ2hhcmdlbWVudCBkZXMgZGlmZsOpcmVuY2VzIGRlICVzLi4uIgorIzogZGlmZi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIKK21zZ3N0ciAiIgorIlZhbGV1ciBpbmNvbm51ZSBwb3VyIGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYXRpb24gJ2RpZmYuc3VibW9kdWxlJyA6ICclcyciCiAKLSM6IGxpYi9kaWZmLnRjbDoxMjUKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkxPQ0FMOiBkZWxldGVkXG4iCi0iUkVNT1RFOlxuIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCiBtc2dzdHIgIiIKLSJMT0NBTCA6IHN1cHByaW3DqVxuIgotIkRJU1RBTlQgOlxuIgorIkVycmV1cnMgZGFucyBsYSB2YXJpYWJsZSBkZSBjb25maWd1cmF0aW9uICdkaWZmLmRpcnN0YXQnIDpcbiIKKyIlcyIKIAotIzogbGliL2RpZmYudGNsOjEzMAorIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAibCdhcHBsaWNhdGlvbiBkZSBkaWZmIGV4dGVybmUgYSBkaXNwYXJ1LCBhcnLDqnQgw6AgJXMiCisKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGV0IC1zIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcyIKKworIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLUcsIC1TIGV0IC0tZmluZC1vYmplY3Qgc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaWZzIgorCisjOiBkaWZmLmM6NDYyOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyBhIGJlc29pbiBkJ3VuZSBzcMOpY2lmaWNhdGlvbiBkZSBjaGVtaW4gdW5pcXVlIgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgInZhbGV1ciBpbnZhbGlkZSBkZSAtLXN0YXTCoDogJXMiCisKKyM6IGRpZmYuYzo0NjgxIGRpZmYuYzo0Njg2IGRpZmYuYzo0NjkxIGRpZmYuYzo0Njk2IGRpZmYuYzo1MjA5CisjOiBwYXJzZS1vcHRpb25zLmM6MTk5IHBhcnNlLW9wdGlvbnMuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiJXMgYXR0ZW5kIHVuZSB2YWxldXIgbnVtw6lyaXF1ZSIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlJFTU9URTogZGVsZXRlZFxuIgotIkxPQ0FMOlxuIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKIG1zZ3N0ciAiIgotIkRJU1RBTlQgOiBzdXBwcmltw6lcbiIKLSJMT0NBTCA6XG4iCisiSW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIHBhcmFtw6h0cmUgZGUgbCdvcHRpb24gLS1kaXJzdGF0Ly1YIDpcbiIKKyIlcyIKIAotIzogbGliL2RpZmYudGNsOjEzNwotbXNnaWQgIkxPQ0FMOlxuIgotbXNnc3RyICJMT0NBTCA6XG4iCisjOiBkaWZmLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNoYW5nZSBjbGFzcyAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCittc2dzdHIgImNsYXNzZSBkZSBtb2RpZmljYXRpb24gaW5jb25udWUgJyVjJyBkYW5zIC0tZGlmZi1maWxldGVyPSVzIgogCi0jOiBsaWIvZGlmZi50Y2w6MTQwCi1tc2dpZCAiUkVNT1RFOlxuIgotbXNnc3RyICJESVNUQU5UIDpcbiIKKyM6IGRpZmYuYzo0ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgInZhbGV1ciBpbmNvbm51ZSBhcHLDqHMgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICJJbXBvc3NpYmxlIGQnYWZmaWNoZXIgJXMiCisjOiBkaWZmLmM6NDgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSAnJXMnIgogCi0jOiBsaWIvZGlmZi50Y2w6MjAzCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKLW1zZ3N0ciAiRXJyZXVyIGxvcnMgZHUgY2hhcmdlbWVudCBkdSBmaWNoaWVyIDoiCisjOiBkaWZmLmM6NDg4NiBkaWZmLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIDxuPi88bT4gZm9ybSIKK21zZ3N0ciAiZm9ybWUgPG4+LzxtPiBhdHRlbmR1ZSBwYXIgJXMiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMTAKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCi1tc2dzdHIgIkTDqXDDtHQgR2l0IChzb3VzIHByb2pldCkiCisjOiBkaWZmLmM6NDkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgY2hhcmFjdGVyLCBnb3QgJyVzJyIKK21zZ3N0ciAiY2FyYWN0w6hyZSBhdHRlbmR1IHBhciAlcywgJyVzJyB0cm91dsOpIgogCi0jOiBsaWIvZGlmZi50Y2w6MjIyCi1tc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgotbXNnc3RyICIqIEZpY2hpZXIgYmluYWlyZSAocGFzIGQnYXBwZXLDp3UgZHUgY29udGVudSkuIgorIzogZGlmZi5jOjQ5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0tY29sb3ItbW92ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJtYXV2YWlzIGFyZ3VtZW50IC0tY29sb3ItbW92ZWTCoDogJXMiCiAKLSM6IGxpYi9kaWZmLnRjbDoyMjcKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo0OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSAnJXMnIGluIC0tY29sb3ItbW92ZWQtd3MiCittc2dzdHIgIm1vZGUgaW52YWxpZGUgJyVzJyBkYW5zIC0tY29sb3ItbW92ZWQtd3MiCisKKyM6IGRpZmYuYzo0OTg0CiBtc2dpZCAiIgotIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCi0iKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCisib3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCAiCisiXCJoaXN0b2dyYW1cIiIKIG1zZ3N0ciAiIgotIiogTGUgZmljaGllciBub24gc3VpdmkgZmFpdCAlZCBvY3RldHMuXG4iCi0iKiBTZXVscyBsZXMgJWQgcHJlbWllcnMgb2N0ZXRzIHNvbnQgbW9udHLDqXMuXG4iCisibCdvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0IFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBldCAiCisiXCJoaXN0b2dyYW1cIiIKIAotIzogbGliL2RpZmYudGNsOjIzMwotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjUwMjAgZGlmZi5jOjUwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCB0byAlcyIKK21zZ3N0ciAiYXJndW1lbnQgaW52YWxpZGUgcG91ciAlcyIKKworIzogZGlmZi5jOjUxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBsJ2FuYWx5c2UgZHUgcGFyYW3DqHRyZSBkZSBsJ29wdGlvbiAtLXN1Ym1vZHVsZSA6ICclcyciCisKKyM6IGRpZmYuYzo1MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgIm1hdXZhaXMgYXJndW1lbnQgcG91ciAtLXdvcmQtZGlmZsKgOiAlcyIKKworIzogZGlmZi5jOjUyNTcKK21zZ2lkICJEaWZmIG91dHB1dCBmb3JtYXQgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkZSBmb3JtYXQgZGUgc29ydGllIGRlIGRpZmYiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgImfDqW7DqXJlciBsYSBydXN0aW5lIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJzdXBwcmltZXIgbGEgc29ydGllIGRlcyBkaWZmw6lyZW5jZXMiCisKKyM6IGRpZmYuYzo1MjY3IGRpZmYuYzo1MzgxIGRpZmYuYzo1Mzg4Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGRpZmYuYzo1MjY4IGRpZmYuYzo1MjcxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAiZ8OpbsOpcmVyIGxlcyBkaWZmcyBhdmVjIDxuPiBsaWduZXMgZGUgY29udGV4dGUiCisKKyM6IGRpZmYuYzo1MjczCittc2dpZCAiZ2VuZXJhdGUgdGhlIGRpZmYgaW4gcmF3IGZvcm1hdCIKK21zZ3N0ciAiZ8OpbsOpcmVyIGxlIGRpZmYgZW4gZm9ybWF0IGJydXQiCisKKyM6IGRpZmYuYzo1Mjc2Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAic3lub255bWUgZGUgJy1wIC0tcmF3JyIKKworIzogZGlmZi5jOjUyODAKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1zdGF0JyIKK21zZ3N0ciAic3lub255bWUgZGUgJy1wIC0tc3RhdCciCisKKyM6IGRpZmYuYzo1Mjg0Cittc2dpZCAibWFjaGluZSBmcmllbmRseSAtLXN0YXQiCittc2dzdHIgIi0tc3RhdCBwb3VyIHRyYWl0ZW1lbnQgYXV0b21hdGlxdWUiCisKKyM6IGRpZmYuYzo1Mjg3Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIGxhc3QgbGluZSBvZiAtLXN0YXQiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsYSBkZXJuacOocmUgbGlnbmUgZGUgLS1zdGF0IgorCisjOiBkaWZmLmM6NTI4OSBkaWZmLmM6NTI5NworbXNnaWQgIjxwYXJhbTEscGFyYW0yPi4uLiIKK21zZ3N0ciAiPHBhcmFtMSxwYXJhbTI+Li4uIgorCisjOiBkaWZmLmM6NTI5MAorbXNnaWQgIiIKKyJvdXRwdXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiByZWxhdGl2ZSBhbW91bnQgb2YgY2hhbmdlcyBmb3IgZWFjaCBzdWItZGlyZWN0b3J5IgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGEgZGlzdHJpYnV0aW9uIGRlcyBxdWFudGl0w6lzIGRlIG1vZGlmaWNhdGlvbnMgcmVsYXRpdmVzIHBvdXIgIgorImNoYXF1ZSBzb3VzLXLDqXBlcnRvaXJlIgorCisjOiBkaWZmLmM6NTI5NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorbXNnc3RyICJzeW5vbnltZSBwb3VyIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICJzeW5vbnltZSBwb3VyIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorCisjOiBkaWZmLmM6NTMwMgorbXNnaWQgIndhcm4gaWYgY2hhbmdlcyBpbnRyb2R1Y2UgY29uZmxpY3QgbWFya2VycyBvciB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiIgorImF2ZXJ0aXIgc2kgbGVzIG1vZGlmaWNhdGlvbnMgaW50cm9kdWlzZW50IGRlcyBtYXJxdWV1cnMgZGUgY29uZmxpdCBvdSBkZXMgIgorImVycmV1cnMgZCdlc3BhY2UiCisKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAiIgorInLDqXN1bcOpIHN1Y2NpbmN0IHRlbCBxdWUgbGVzIGNyw6lhdGlvbnMsIGxlcyByZW5vbW1hZ2VzIGV0IGxlcyBtb2RpZmljYXRpb25zICIKKyJkZSBtb2RlIgorCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJuJ2FmZmljaGVyIHF1ZSBsZXMgbm9tcyBkZSBmaWNoaWVycyBtb2RpZmnDqXMiCisKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAibidhZmZpY2hlciBxdWUgbGVzIG5vbXMgZXQgbGVzIHN0YXR1cyBkZXMgZmljaGllcnMgbW9kaWZpw6lzIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICI8bGFyZ2V1cj5bLDxsYXJnZXVyLWRlLW5vbT5bLDxjb21wdGU+XV0iCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgImfDqW7DqXJlciB1biBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICI8bGFyZ2V1cj4iCisKKyM6IGRpZmYuYzo1MzE3Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICJnw6luw6lyZXIgdW4gZGlmZnN0YXQgYXZlYyBsYSBsYXJnZXVyIGluZGlxdcOpZSIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAiZ8OpbmVyZXIgdW4gZGlmZnN0YXQgYXZlYyBsYSBsYXJnZXVyIGRlIG5vbSBpbmRpcXXDqWUiCisKKyM6IGRpZmYuYzo1MzIzCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIGdyYXBoIHdpZHRoIgorbXNnc3RyICJnw6luZXJlciB1biBkaWZmc3RhdCBhdmVjIGxhIGxhcmdldXIgZGUgZ3JhcGhlIGluZGlxdcOpZSIKKworIzogZGlmZi5jOjUzMjUKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICI8Y29tcHRlPiIKKworIzogZGlmZi5jOjUzMjYKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGxpbWl0ZWQgbGluZXMiCittc2dzdHIgImfDqW7DqXJlciB1biBkaWZmc3RhdCBhdmVjIGRlcyBsaWduZXMgbGltaXTDqWVzIgorCisjOiBkaWZmLmM6NTMyOQorbXNnaWQgImdlbmVyYXRlIGNvbXBhY3Qgc3VtbWFyeSBpbiBkaWZmc3RhdCIKK21zZ3N0ciAiZ8OpbsOpcmVyIHVuZSByw6lzdW3DqSBjb21wYWN0IGRhbnMgbGUgZGlmZnN0YXQiCisKKyM6IGRpZmYuYzo1MzMyCittc2dpZCAib3V0cHV0IGEgYmluYXJ5IGRpZmYgdGhhdCBjYW4gYmUgYXBwbGllZCIKK21zZ3N0ciAicHJvZHVpcmUgdW4gZGlmZiBiaW5haXJlIHF1aSBwZXV0IMOqdHJlIGFwcGxpcXXDqSIKKworIzogZGlmZi5jOjUzMzUKK21zZ2lkICJzaG93IGZ1bGwgcHJlLSBhbmQgcG9zdC1pbWFnZSBvYmplY3QgbmFtZXMgb24gdGhlIFwiaW5kZXhcIiBsaW5lcyIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlcyBub21zIGNvbXBsZXRzIGRlcyBvYmpldHMgcHJlLSBldCBwb3N0LWltYWdlIHN1ciBsZXMgbGlnbmVzICIKKyJcImluZGV4XCIiCisKKyM6IGRpZmYuYzo1MzM3Cittc2dpZCAic2hvdyBjb2xvcmVkIGRpZmYiCittc2dzdHIgImFmZmljaGVyIHVuIGRpZmYgY29sb3LDqSIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIjxzb3J0ZT4iCisKKyM6IGRpZmYuYzo1MzM5Cittc2dpZCAiIgorImhpZ2hsaWdodCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUgJ2NvbnRleHQnLCAnb2xkJyBvciAnbmV3JyBsaW5lcyBpbiB0aGUgIgorImRpZmYiCittc2dzdHIgIiIKKyJzdXJsaWduZXIgbGVzIGVycmV1cnMgZCdlc3BhY2UgZGFucyBsZXMgbGlnbmVzICdjb250ZXh0ZScsICdhbmNpZW4nLCAiCisiJ25vdXZlYXUnIGRhbnMgbGUgZGlmZiIKKworIzogZGlmZi5jOjUzNDIKK21zZ2lkICIiCisiZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzIGluIC0tcmF3IG9yICIKKyItLW51bXN0YXQiCittc2dzdHIgIiIKKyJuZSBwYXMgY29tcHJlc3NlciBsZXMgY2hlbWlucyBldCB1dGlsaXNlciBkZXMgTlVMcyBjb21tZSB0ZXJtaW5hdGV1cnMgZGUgIgorImNoYW1wcyBkYW5zIC0tcmF3IG91IC0tbnVtc3RhdCIKKworIzogZGlmZi5jOjUzNDUgZGlmZi5jOjUzNDggZGlmZi5jOjUzNTEgZGlmZi5jOjU0NTcKK21zZ2lkICI8cHJlZml4PiIKK21zZ3N0ciAiPHByw6lmaXhlPiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICJhZmZpY2hlciBsZSBwcsOpZml4ZSBkZSBzb3VyY2UgaW5kaXF1w6kgYXUgbGlldSBkZSBcImEvXCIiCisKKyM6IGRpZmYuYzo1MzQ5Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgXCJiL1wiIgorbXNnc3RyICJhZmZpY2hlciBsZSBwcsOpZml4ZSBkZSBkZXN0aW5hdGlvbiBpbmRpcXXDqSBhdSBsaWV1IGRlIFwiYi9cIiIKKworIzogZGlmZi5jOjUzNTIKK21zZ2lkICJwcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0IgorbXNnc3RyICJwcsOpZml4ZXIgdG91dGVzIGxlcyBsaWduZXMgZW4gc29ydGllIGF2ZWMgbGEgY2hhw65uZSBpbmRpcXXDqWUiCisKKyM6IGRpZmYuYzo1MzU1Cittc2dpZCAiZG8gbm90IHNob3cgYW55IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcmVmaXgiCittc2dzdHIgIm4nYWZmaWNoZXIgYXVjdW4gcHLDqWZpeGUsIG5pIGRlIHNvdXJjZSwgbmkgZGUgZGVzdGluYXRpb24iCisKKyM6IGRpZmYuYzo1MzU4Cittc2dpZCAic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlIGNvbnRleHRlIGVudHJlIGxlcyBzZWN0aW9ucyDDoCBjb25jdXJyZW5jZSBkdSBub21icmUgZGUgbGlnbmUgIgorImluZGlxdcOpIgorCisjOiBkaWZmLmM6NTM2MiBkaWZmLmM6NTM2NyBkaWZmLmM6NTM3MgorbXNnaWQgIjxjaGFyPiIKK21zZ3N0ciAiPGNhcmFjdMOocmU+IgorCisjOiBkaWZmLmM6NTM2MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluc3RlYWQgb2YgJysnIgorbXNnc3RyICJzcMOpY2lmaWVyIGxlIGNhcmFjdMOocmUgcG91ciBpbmRpcXVlciB1bmUgbm91dmVsbGUgbGlnbmUgYXUgbGlldSBkZSAnKyciCisKKyM6IGRpZmYuYzo1MzY4Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICJzcMOpY2lmaWVyIGxlIGNhcmFjdMOocmUgcG91ciBpbmRpcXVlciB1bmUgYW5jaWVubmUgbGlnbmUgYXUgbGlldSBkZSAnLSciCisKKyM6IGRpZmYuYzo1MzczCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgY29udGV4dCBpbnN0ZWFkIG9mICcgJyIKK21zZ3N0ciAiIgorInNww6ljaWZpZXIgbGUgY2FyYWN0w6hyZSBwb3VyIGluZGlxdWVyIHVuZSBsaWduZSBkZSBjb250ZXh0ZSBhdSBsaWV1IGRlICcgJyIKKworIzogZGlmZi5jOjUzNzYKK21zZ2lkICJEaWZmIHJlbmFtZSBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIHJlbm9tbWFnZSBkZSBkaWZmIgorCisjOiBkaWZmLmM6NTM3NworbXNnaWQgIjxuPlsvPG0+XSIKK21zZ3N0ciAiPG4+Wy88bT5dIgorCisjOiBkaWZmLmM6NTM3OAorbXNnaWQgImJyZWFrIGNvbXBsZXRlIHJld3JpdGUgY2hhbmdlcyBpbnRvIHBhaXJzIG9mIGRlbGV0ZSBhbmQgY3JlYXRlIgorbXNnc3RyICIiCisiY2Fzc2VyIGxlcyBtb2RpZmljYXRpb25zIGQndW5lIHLDqcOpY3JpcmUgY29tcGzDqHRlIGVuIHBhaXJlcyBkZSBzdXBwcmVzc2lvbiBldCAiCisiY3LDqWF0aW9uIgorCisjOiBkaWZmLmM6NTM4MgorbXNnaWQgImRldGVjdCByZW5hbWVzIgorbXNnc3RyICJkw6l0ZWN0ZXIgbGVzIHJlbm9tbWFnZXMiCisKKyM6IGRpZmYuYzo1Mzg2Cittc2dpZCAib21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMiCittc2dzdHIgInN1cHByaW1lciBsYSBwcsOpLWltYWdlIHBvdXIgbGVzIHN1cHByZXNzaW9ucyIKKworIzogZGlmZi5jOjUzODkKK21zZ2lkICJkZXRlY3QgY29waWVzIgorbXNnc3RyICJkw6l0ZWN0ZXIgbGVzIGNvcGllcyIKKworIzogZGlmZi5jOjUzOTMKK21zZ2lkICJ1c2UgdW5tb2RpZmllZCBmaWxlcyBhcyBzb3VyY2UgdG8gZmluZCBjb3BpZXMiCittc2dzdHIgIiIKKyJ1dGlsaXNlciBsZXMgZmljaGllcnMgbm9uLW1vZGlmacOpcyBjb21tZSBzb3VyY2VzIHBvdXIgdHJvdXZlciBkZXMgY29waWVzIgorCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiZMOpc2FjdGl2ZXIgbGEgZMOpdGVjdGlvbiBkZSByZW5vbW1hZ2UiCisKKyM6IGRpZmYuYzo1Mzk4Cittc2dpZCAidXNlIGVtcHR5IGJsb2JzIGFzIHJlbmFtZSBzb3VyY2UiCittc2dzdHIgInV0aWxpc2VyIGRlcyBibG9icyB2aWRlcyBjb21tZSBzb3VyY2UgZGUgcmVub21tYWdlIgorCisjOiBkaWZmLmM6NTQwMAorbXNnaWQgImNvbnRpbnVlIGxpc3RpbmcgdGhlIGhpc3Rvcnkgb2YgYSBmaWxlIGJleW9uZCByZW5hbWVzIgorbXNnc3RyICJjb250aW51ZXIgw6AgYWZmaWNoZXIgbCdoaXN0b3JpcXVlIGQndW4gZmljaGllciBhdSBkZWzDoCBkZXMgcmVub21tYWdlcyIKKworIzogZGlmZi5jOjU0MDMKK21zZ2lkICIiCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgorbXNnc3RyICIiCisiZW1ww6pjaGVyIGxhIGTDqXRlY3Rpb24gZGUgcmVub21tYWdlL2NvcGllIHNpIGxlIG5vbWJyZSBkZSBjaWJsZXMgZGUgcmVub21tYWdlLyIKKyJjb3BpZSBleGPDqGRlIGxhIGxpbWl0ZSBpbmRpcXXDqWUiCisKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkZSBsJ2FsZ29yaXRobWUgZGUgZGlmZiIKKworIzogZGlmZi5jOjU0MDcKK21zZ2lkICJwcm9kdWNlIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBkaWZmIgorbXNnc3RyICJwcm9kdWlyZSBsZSBkaWZmIGxlIHBsdXMgcGV0aXQgcG9zc2libGUiCisKKyM6IGRpZmYuYzo1NDEwCittc2dpZCAiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiCittc2dzdHIgImlnbm9yZXIgbGVzIGVzcGFjZXMgbG9ycyBkZSBsYSBjb21wYXJhaXNvbiBkZSBsaWduZSIKKworIzogZGlmZi5jOjU0MTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZSIKK21zZ3N0ciAiaWdub3JlciBkZXMgbW9kaWZpY2F0aW9ucyBkdSBub21icmUgZCdlc3BhY2VzIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJpZ25vcmVyIGRlcyBtb2RpZmljYXRpb25zIGQnZXNwYWNlIGVuIGZpbiBkZSBsaWduZSIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICJpZ25vcmUgbGUgcmV0b3VyIGNoYXJpb3QgZW4gZmluIGRlIGxpZ25lIgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgImlnbm9yZXIgbGVzIG1vZGlmaWNhdGlvbnMgZG9udCBsZXMgbGlnbmVzIHNvbnQgdmlkZXMiCisKKyM6IGRpZmYuYzo1NDI1Cittc2dpZCAiaGV1cmlzdGljIHRvIHNoaWZ0IGRpZmYgaHVuayBib3VuZGFyaWVzIGZvciBlYXN5IHJlYWRpbmciCittc2dzdHIgIiIKKyJoZXVyaXN0aXF1ZSBxdWkgZMOpcGxhY2UgbGVzIGxpbWl0ZXMgZGUgc2VjdGlvbnMgZGUgZGlmZiBwb3VyIGZhY2lsaXRlciBsYSAiCisibGVjdHVyZSIKKworIzogZGlmZi5jOjU0MjgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgImfDqW7DqXJlciB1biBkaWZmIGVuIHV0aWxpc2FudCBsJ2FsZ29yaXRobWUgZGUgZGlmZsOpcmVuY2UgXCJwYXRpZW5jZVwiIgorCisjOiBkaWZmLmM6NTQzMgorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiaGlzdG9ncmFtIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIiIKKyJnw6luw6lyZXIgdW4gZGlmZiBlbiB1dGlsaXNhbnQgbCdhbGdvcml0aG1lIGRlIGRpZmbDqXJlbmNlIFwiaGlzdG9ncmFtbWVcIiIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAiPGFsZ29yaXRobWU+IgorCisjOiBkaWZmLmM6NTQzNQorbXNnaWQgImNob29zZSBhIGRpZmYgYWxnb3JpdGhtIgorbXNnc3RyICJjaG9pc2lyIHVuIGFsZ29yaXRobWUgZGUgZGlmZsOpcmVuY2UiCisKKyM6IGRpZmYuYzo1NDM3Cittc2dpZCAiPHRleHQ+IgorbXNnc3RyICI8dGV4dGU+IgorCisjOiBkaWZmLmM6NTQzOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiYW5jaG9yZWQgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZ8OpbsOpcmVyIHVuIGRpZmYgZW4gdXRpbGlzYW50IGwnYWxnb3JpdGhtZSBkZSBkaWZmw6lyZW5jZSBcImFuY3LDqVwiIgorCisjOiBkaWZmLmM6NTQ0MCBkaWZmLmM6NTQ0OSBkaWZmLmM6NTQ1MgorbXNnaWQgIjxtb2RlPiIKK21zZ3N0ciAiPG1vZGU+IgorCisjOiBkaWZmLmM6NTQ0MQorbXNnaWQgInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIgorbXNnc3RyICIiCisiYWZmaWNoZXIgZGVzIGRpZmbDqXJlbmNlcyBwYXIgbW90LCBlbiB1dGlsaXNhbnQgPG1vZGU+IHBvdXIgZMOpbGltaXRlciBsZXMgIgorIm1vdHMgbW9kaWZpw6lzIgorCisjOiBkaWZmLmM6NTQ0MyBkaWZmLmM6NTQ0NiBkaWZmLmM6NTQ5MQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgIjxyZWdleD4iCisKKyM6IGRpZmYuYzo1NDQ0Cittc2dpZCAidXNlIDxyZWdleD4gdG8gZGVjaWRlIHdoYXQgYSB3b3JkIGlzIgorbXNnc3RyICJ1dGlsaXNlciA8cmVnZXg+IHBvdXIgZMOpY2lkZXIgY2UgcXUnZXN0IHVuIG1vdCIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgIsOpcXVpdmFsZW50IMOgIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCisKKyM6IGRpZmYuYzo1NDUwCittc2dpZCAibW92ZWQgbGluZXMgb2YgY29kZSBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSIKK21zZ3N0ciAibGVzIGxpZ25lcyBkw6lwbGFjw6llcyBzb250IGNvbG9yw6llcyBkaWZmw6lyZW1tZW50IgorCisjOiBkaWZmLmM6NTQ1MworbXNnaWQgImhvdyB3aGl0ZSBzcGFjZXMgYXJlIGlnbm9yZWQgaW4gLS1jb2xvci1tb3ZlZCIKK21zZ3N0ciAiY29tbWVudCBsZXMgZXNwYWNlcyBzb250IGlnbm9yw6lzIGRhbnMgLS1jb2xvci1tb3ZlZCIKKworIzogZGlmZi5jOjU0NTYKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgIkF1dHJlcyBvcHRpb25zIGRpZmYiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisibGFuY8OpIGRlcHVpcyB1biBzb3VzLXLDqXBlcnRvaXJlLCBleGNsdXJlIGxlcyBtb2RpZmljYXRpb25zIGVuIGRlaG9ycyBldCAiCisiYWZmaWNoZXIgbGVzIGNoZW1pbnMgcmVsYXRpZnMiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgInRyYWl0ZXIgbGVzIGZpY2hpZXJzIGNvbW1lIHRleHRlIgorCisjOiBkaWZmLmM6NTQ2NAorbXNnaWQgInN3YXAgdHdvIGlucHV0cywgcmV2ZXJzZSB0aGUgZGlmZiIKK21zZ3N0ciAiw6ljaGFuZ2VyIGxlcyBlbnRyw6llcywgaW52ZXJzZXIgbGUgZGlmZiIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAic29ydGlyIHVuIGNvZGUgZCdlcnJldXIgMSBzJ2lsIHkgYXZhaXQgZGUgZGlmZsOpcmVuY2VzLCAwIHNpbm9uIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAiZMOpc2FjdGl2ZXIgdG91cyBsZXMgYWZmaWNoYWdlcyBkdSBwcm9ncmFtbWUiCisKKyM6IGRpZmYuYzo1NDcwCittc2dpZCAiYWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQiCittc2dzdHIgImF1dG9yaXNlciBsJ2V4w6ljdXRpb24gZCd1biBhc3Npc3RhbnQgZXh0ZXJuZSBkZSBkaWZmIgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInJ1biBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKyJsYW5jZXIgbGVzIGZpbHRyZXMgZXh0ZXJuZXMgZGUgY29udmVyc2lvbiBlbiB0ZXh0ZSBsb3JzIGRlIGxhIGNvbXBhcmFpc29uIGRlICIKKyJmaWNoaWVycyBiaW5haXJlcyIKKworIzogZGlmZi5jOjU0NzQKK21zZ2lkICI8d2hlbj4iCittc2dzdHIgIjxxdWFuZD4iCisKKyM6IGRpZmYuYzo1NDc1Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBpbiB0aGUgZGlmZiBnZW5lcmF0aW9uIgorbXNnc3RyICIiCisiaWdub3JlciBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGxlcyBzb3VzLW1vZHVsZXMgbG9ycyBkZSBsYSBnw6luw6lyYXRpb24gZGUgZGlmZiIKKworIzogZGlmZi5jOjU0NzgKK21zZ2lkICI8Zm9ybWF0PiIKK21zZ3N0ciAiPGZvcm1hdD4iCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgInNww6ljaWZpZXIgY29tbWVudCBsZXMgZGlmZsOpcmVuY2VzIGRhbnMgbGVzIHNvdXMtbW9kdWxlcyBzb250IGFmZmljaMOpZXMiCisKKyM6IGRpZmYuYzo1NDgzCittc2dpZCAiaGlkZSAnZ2l0IGFkZCAtTicgZW50cmllcyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAibWFzcXVlciBsZXMgZW50csOpZXMgJ2dpdCBhZGQgLU4nIGRlIGwnaW5kZXgiCisKKyM6IGRpZmYuYzo1NDg2Cittc2dpZCAidHJlYXQgJ2dpdCBhZGQgLU4nIGVudHJpZXMgYXMgcmVhbCBpbiB0aGUgaW5kZXgiCittc2dzdHIgInRyYWl0ZXIgbGVzIGVudHLDqWVzICdnaXQgYWRkIC1OJyBjb21tZSByw6llbGxlcyBkYW5zIGwnaW5kZXgiCisKKyM6IGRpZmYuYzo1NDg4Cittc2dpZCAiPHN0cmluZz4iCittc2dzdHIgIjxjaGHDrm5lPiIKKworIzogZGlmZi5jOjU0ODkKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJzdHJpbmciCittc2dzdHIgIiIKKyJyZWNoZXJjaGVyIGxlcyBkaWZmw6lyZW5jZXMgcXVpIG1vZGlmaWVudCBsZSBub21icmUgZCdvY2N1cnJlbmNlcyBkZSBsYSAiCisiY2hhw65uZSBzcMOpY2lmacOpZSIKKworIzogZGlmZi5jOjU0OTIKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJyZWdleCIKK21zZ3N0ciAiIgorInJlY2hlcmNoZXIgbGVzIGRpZmbDqXJlbmNlcyBxdWkgbW9kaWZpZW50IGxlIG5vbWJyZSBkJ29jY3VycmVuY2VzIGRlIGxhIHJlZ2V4ICIKKyJzcMOpY2lmacOpZSIKKworIzogZGlmZi5jOjU0OTUKK21zZ2lkICJzaG93IGFsbCBjaGFuZ2VzIGluIHRoZSBjaGFuZ2VzZXQgd2l0aCAtUyBvciAtRyIKK21zZ3N0ciAiIgorImFmZmljaGVyIHRvdXRlcyBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGwnZW5zZW1ibGUgZGUgbW9kaWZpY2F0aW9ucyBhdmVjIC1TICIKKyJvdSAtRyIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKyJ0cmFpdGVyIDxjaGHDrm5lPiBkYW5zIC1TIGNvbW1lIHVuZSBleHByZXNzaW9uIHJhdGlvbm5lbGxlIFBPU0lYIMOpdGVuZHVlIgorCisjOiBkaWZmLmM6NTUwMQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJjb250csO0bGVyIGwnb3JkcmUgZGFucyBsZXF1ZWwgbGVzIGZpY2hpZXJzIGFwcGFyYWlzc2VudCBkYW5zIGxhIHNvcnRpZSIKKworIzogZGlmZi5jOjU1MDIKK21zZ2lkICI8b2JqZWN0LWlkPiIKK21zZ3N0ciAiPGlkLW9iamV0PiIKKworIzogZGlmZi5jOjU1MDMKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJvYmplY3QiCittc2dzdHIgIiIKKyJyZWNoZXJjaGVyIGxlcyBkaWZmw6lyZW5jZXMgcXVpIG1vZGlmaWVudCBsZSBub21icmUgZCdvY2N1cnJlbmNlcyBkZSBsJ29iamV0ICIKKyJpbmRpcXXDqSIKKworIzogZGlmZi5jOjU1MDUKK21zZ2lkICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCittc2dzdHIgIlsoQXxDfER8TXxSfFR8VXxYfEIpLi4uWypdXSIKKworIzogZGlmZi5jOjU1MDYKK21zZ2lkICJzZWxlY3QgZmlsZXMgYnkgZGlmZiB0eXBlIgorbXNnc3RyICJzw6lsZWN0aW9ubmVyIGxlcyBmaWNoaWVycyBwYXIgdHlwZXMgZGUgZGlmZiIKKworIzogZGlmZi5jOjU1MDgKK21zZ2lkICI8ZmlsZT4iCittc2dzdHIgIjxmaWNoaWVyPiIKKworIzogZGlmZi5jOjU1MDkKK21zZ2lkICJPdXRwdXQgdG8gYSBzcGVjaWZpYyBmaWxlIgorbXNnc3RyICJTb3J0aWUgdmVycyB1biBmaWNoaWVyIHNww6ljaWZpw6kiCisKKyM6IGRpZmYuYzo2MTY0Cittc2dpZCAiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJkw6l0ZWN0aW9uIGRlIHJlbm9tbWFnZSBpbmV4YWN0IGFubnVsw6llIMOgIGNhdXNlIGQndW4gdHJvcCBncmFuZCBub21icmUgZGUgIgorImZpY2hpZXJzLiIKKworIzogZGlmZi5jOjYxNjcKK21zZ2lkICJvbmx5IGZvdW5kIGNvcGllcyBmcm9tIG1vZGlmaWVkIHBhdGhzIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgIiIKKyJyZWNoZXJjaGUgdW5pcXVlbWVudCBkZXMgY29waWVzIHBhciBtb2RpZmljYXRpb24gZGUgY2hlbWluIMOgIGNhdXNlIGQndW4gdHJvcCAiCisiZ3JhbmQgbm9tYnJlIGRlIGZpY2hpZXJzLiIKKworIzogZGlmZi5jOjYxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBtYXkgd2FudCB0byBzZXQgeW91ciAlcyB2YXJpYWJsZSB0byBhdCBsZWFzdCAlZCBhbmQgcmV0cnkgdGhlIGNvbW1hbmQuIgorbXNnc3RyICIiCisidm91cyBzb3VoYWl0ZXogcGV1dC3DqnRyZSByw6lnbGVyIGxhIHZhcmlhYmxlICVzIMOgIGF1IG1vaW5zICVkIGV0IHLDqWVzc2F5ZXIgbGUgIgorImNvbW1hbmRlLiIKKworIzogZGlyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCittc2dzdHIgIiIKKyJsZSBzcMOpY2lmaWNhdGV1ciBkZSBjaGVtaW4gJyVzJyBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGZpY2hpZXIgY29ubnUgZGUgZ2l0IgorCisjOiBkaXIuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciCittc2dzdHIgIm1vdGlmIG5vbiByZWNvbm51wqA6ICclcyciCisKKyM6IGRpci5jOjY4MiBkaXIuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm46ICclcyciCittc2dzdHIgIm1vdGlmIG7DqWdhdGlmIG5vbiByZWNvbm51wqA6ICclcyciCisKKyM6IGRpci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBoYXZlIGlzc3VlczogcGF0dGVybiAnJXMnIGlzIHJlcGVhdGVkIgorbXNnc3RyICJ2b3RyZSBmaWNoaWVyIGQnZXh0cmFjdGlvbiBwYXJ0aWVsbGUgcG91cnJhaXQgcHLDqXNlbnRlciBkZXMgcHJvYmzDqG1lc8KgOiBsZSBtb3RpZiAnJXMnIGVzdCByw6lww6l0w6kiCisKKyM6IGRpci5jOjcyNAorbXNnaWQgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCittc2dzdHIgImTDqXNhY3RpdmF0aW9uIGRlIGxhIGNvcnJlc3BvbmRhbmNlIGRlIG1vdGlmIGRlIGNvbmUiCisKKyM6IGRpci5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCd1dGlsaXNlciAlcyBjb21tZSBmaWNoaWVyIGQnZXhjbHVzaW9uIgorCisjOiBkaXIuYzoyMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIHLDqXBlcnRvaXJlICclcyciCisKKyM6IGRpci5jOjI0MTUKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiZWNoZWMgZGUgbCdvYnRlbnRpb24gZCdpbmZvcm1hdGlvbiBkZSBrZXJuZWwiCisKKyM6IGRpci5jOjI1MzkKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIkxlIGNhY2hlIG5vbiBzdWl2aSBlc3QgZMOpc2FjdGl2w6kgc3VyIGNlIHN5c3TDqG1lIG91IHN1ciBjZXQgZW5kcm9pdCIKKworIzogZGlyLmM6MzM0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAiZmljaGllciBkJ2luZGV4IGNvcnJvbXB1IGRhbnMgbGUgZMOpcMO0dCAlcyIKKworIzogZGlyLmM6MzM4OCBkaXIuYzozMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZXMgcsOpcGVydG9pcmVzIHBvdXIgJXMiCisKKyM6IGRpci5jOjM0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtaWdyZXIgbGUgcsOpcGVydG9pcmUgZ2l0IGRlICclcycgdmVycyAnJXMnIgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICIiCisic3VnZ2VzdGlvbsKgOiBlbiBhdHRlbnRlIGRlIGxhIGZlcm1ldHVyZSBkdSBmaWNoaWVyIHBhciB2b3RyZSDDqWRpdGV1ciBkZSAiCisidGV4dGXigKYlYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiRmlsdHJhZ2UgZHUgY29udGVudSIKKworIzogZW50cnkuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHN0YXQgbGUgZmljaGllciAnJXMnIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAiRXNwYWNlcyBkZSBub20gZGUgR2l0IFwiJXNcIiIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpZ2xlciBHSVRfRElSIMOgICclcyciCisKKyM6IGV4ZWMtY21kLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIgorbXNnc3RyICJ0cm9wIGQnYXJndW1lbnRzIHBvdXIgbGFuY2VyICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTUwCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2sgOiBsaXN0ZSBzdXBlcmZpY2llbGxlIGF0dGVuZHVlIgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIGEgZmx1c2ggcGFja2V0IGFmdGVyIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiIgorImdpdCBmZXRjaC1wYWNrIDogcGFxdWV0IGRlIHZpZGFnZSBhdHRlbmR1IGFwcsOocyB1bmUgbGlzdGUgc3VwZXJmaWNpZWxsZSIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrIDogQUNLL05BQ0sgYXR0ZW5kdSwgcGFxdWV0IGRlIG5ldHRveWFnZSByZcOndSIKKworIzogZmV0Y2gtcGFjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgImdpdCBmZXRjaC1wYWNrIDogQUNLL05BQ0sgYXR0ZW5kdSwgJyVzJyByZcOndSIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIHN1ciB1biBkaXN0YW50IgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIG7DqWNlc3NpdGUgbXVsdGlfYWNrX2RldGFpbGVkIgorCisjOiBmZXRjaC1wYWNrLmM6MzU2IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAibGlnbmUgZGUgc3VwZXJmaWNpZWwgaW52YWxpZGXCoDogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjIgZmV0Y2gtcGFjay5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImxpZ25lIGRlIGZpbiBkZSBzdXBlcmZpY2llbCBpbnZhbGlkZSA6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJvYmpldCBub24gdHJvdXbDqcKgOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJFcnJldXIgZGFucyBsJ29iamV0wqA6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICJQYXMgZGUgc3VwZXJmaWNpZWwgdHJvdXbDqcKgOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MiBmZXRjaC1wYWNrLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICJzdXBlcmZpY2llbC9ub24gc3VwZXJmaWNpZWwgYXR0ZW5kdSwgJXMgdHJvdXbDqSIKKworIzogZmV0Y2gtcGFjay5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgJWQgJXMiCittc2dzdHIgInLDqXBvbnNlICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICJjb21taXQgaW52YWxpZGUgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgImFiYW5kb24iCisKKyM6IGZldGNoLXBhY2suYzo0NzUgcHJvZ3Jlc3MuYzozMjMKK21zZ2lkICJkb25lIgorbXNnc3RyICJmYWl0IgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICIlcyB0cm91dsOpICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAiTWFycXVhZ2UgZGUgJXMgY29tbWUgdGVybWluw6kiCisKKyM6IGZldGNoLXBhY2suYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxyZWFkeSBoYXZlICVzICglcykiCittc2dzdHIgIiVzIGTDqWrDoCBwb3Nzw6lkw6kgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrwqA6IGltcG9zc2libGUgZGUgZHVwbGlxdWVyIGxlIGTDqW11bHRpcGxleGV1ciBsYXTDqXJhbCIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogbWF1dmFpcyBlbnTDqnRlIGRlIHBhcXVldCIKKworIzogZmV0Y2gtcGFjay5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgImZldGNoLXBhY2sgOiBpbXBvc3NpYmxlIGRlIGR1cGxpcXVlciAlcyIKKworIzogZmV0Y2gtcGFjay5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjkxOAorbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImVycmV1ciBkYW5zIGxlIGTDqW11bHRpcGxleGVyIGxhdMOpcmFsIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIkxhIHZlcnNpb24gZHUgc2VydmV1ciBlc3QgJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjk3MCBmZXRjaC1wYWNrLmM6OTc2IGZldGNoLXBhY2suYzo5NzkgZmV0Y2gtcGFjay5jOjk4NQorIzogZmV0Y2gtcGFjay5jOjk4OSBmZXRjaC1wYWNrLmM6OTkzIGZldGNoLXBhY2suYzo5OTcgZmV0Y2gtcGFjay5jOjEwMDEKKyM6IGZldGNoLXBhY2suYzoxMDA1IGZldGNoLXBhY2suYzoxMDA5IGZldGNoLXBhY2suYzoxMDEzIGZldGNoLXBhY2suYzoxMDE3CisjOiBmZXRjaC1wYWNrLmM6MTAyMyBmZXRjaC1wYWNrLmM6MTAyOSBmZXRjaC1wYWNrLmM6MTAzNCBmZXRjaC1wYWNrLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgJXMiCittc2dzdHIgIkxlIHNlcnZldXIgc3VwcG9ydGUgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIkxlIHNlcnZldXIgbmUgc3VwcG9ydGUgbGVzIGNsaWVudHMgc3VwZXJmaWNpZWxzIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIC0tc2hhbGxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICJMZSByZWNldmV1ciBuZSBnw6hyZSBwYXMgLS1kZWVwZW4iCisKKyM6IGZldGNoLXBhY2suYzoxMDU4Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgInBhcyBkZSBjb21taXQgY29tbXVuIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFja8KgOiDDqWNoZWMgZGUgbGUgcsOpY3Vww6lyYXRpb24uIgorCisjOiBmZXRjaC1wYWNrLmM6MTIwOQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgcmVxdWVzdHMiCittc2dzdHIgIkxlIHNlcnZldXIgbmUgc3VwcG9ydGUgbGVzIHJlcXXDqnRlcyBzdXBlcmZpY2llbGxlcyIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJMZSBzZXJ2ZXVyIHN1cHBvcnRlIGZpbHRlciIKKworIzogZmV0Y2gtcGFjay5jOjEyMzkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxhIHJlcXXDqnRlIHN1ciBsZSBkaXN0YW50IgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgImVycmV1ciDDoCBsYSBsZWN0dXJlIGRlIGwnZW50w6p0ZSBkZSBzZWN0aW9uICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgIiclcycgYXR0ZW5kdSwgJyVzJyByZcOndSIKKworIzogZmV0Y2gtcGFjay5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICJsaWduZSBkJ2FjcXVpdHRlbWVudCBpbmF0dGVuZHVlwqA6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgImVycmV1ciBsb3JzIGR1IHRyYWl0ZW1lbnQgZGVzIGFjcXVpdHRlbWVudHPCoDogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICJmaWNoaWVyIHBhcXVldCBhdHRlbmR1IMOgIGVudm95ZXIgYXByw6hzICdyZWFkeSciCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICJhdWN1bmUgYXV0cmUgc2VjdGlvbiBhdHRlbmR1ZSDDoCBlbnZveWVyIGFwcsOocyBhYnNlbmNlIGRlICdyZWFkeSciCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAiZXJyZXVyIGxvcnMgZHUgdHJhaXRlbWVudCBkZSBsJ2luZm9ybWF0aW9uIGRlIHN1cGVyZmljaWFsaXTDqcKgOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgIndhbnRlZC1yZWYgYXR0ZW5kdSwgJyVzJyB0cm91dsOpIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIHdhbnRlZC1yZWY6ICclcyciCittc2dzdHIgIndhbnRlZC1yZWYgaW5hdHRlbmR1wqA6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIgorbXNnc3RyICJlcnJldXIgbG9ycyBkdSB0cmFpdGVtZW50IGRlcyByw6lmw6lyZW5jZXMgdm91bHVlc8KgOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAicGFzIGRlIEhFQUQgZGlzdGFudGUgY29ycmVzcG9uZGFudGUiCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODgKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAibGUgc2VydmV1ciBkaXN0YW50IG4nYSBwYXMgZW52b3nDqSB0b3VzIGxlcyBvYmpldHMgbsOpY2Vzc2FpcmVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgInLDqWbDqXJlbmNlIGRpc3RhbnRlIGluY29ubnVlICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAiTGUgc2VydmV1ciBuJ2F1dG9yaXNlIHBhcyBkZSByZXF1w6p0ZSBwb3VyIGwnb2JqZXQgJXMgbm9uIGFubm9uY8OpIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjIzCittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gZmljaGllciB0ZW1wb3JhaXJlIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsYSBzaWduYXR1cmUgZMOpdGFjaMOpZSBkYW5zICclcyciCisKKyM6IGdwZy1pbnRlcmZhY2UuYzozOTAKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyBuJ2EgcGFzIHB1IHNpZ25lciBsZXMgZG9ubsOpZXMiCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAiY291bGV1ciBpbnZhbGlkZSAnJS4qcycgaWdub3LDqWUgZGFucyBsb2cuZ3JhcGhDb2xvcnMiCisKKyM6IGdyZXAuYzo2NjgKK21zZ2lkICIiCisiZ2l2ZW4gcGF0dGVybiBjb250YWlucyBOVUxMIGJ5dGUgKHZpYSAtZiA8ZmlsZT4pLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkICIKKyJ3aXRoIC1QIHVuZGVyIFBDUkUgdjIiCittc2dzdHIgIiIKKyJsZSBtb3RpZiBmb3VybmkgY29udGllbnQgZGVzIG9jdGV0cyBOVUwgKHZpYSAtZiA8ZmljaGllcj4pLiBDZSBuJ2VzdCAiCisic3VwcG9ydMOpIHF1J2F2ZWMgLVAgYXZlYyBQQ1JFIHYyIgorCisjOiBncmVwLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJyA6IGxlY3R1cmUgZGUgJXMgaW1wb3NzaWJsZSIKKworIzogZ3JlcC5jOjIxNDEgc2V0dXAuYzoxNjUgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLDqWNoZWMgZHUgc3RhdCBkZSAnJXMnIgorCisjOiBncmVwLmM6MjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICInJXMnIDogbGVjdHVyZSB0cm9ucXXDqWUiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJkw6ltYXJyZXIgdW5lIHpvbmUgZGUgdHJhdmFpbCAodm9pciBhdXNzacKgOiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICIiCisidHJhdmFpbGxlciBzdXIgbGEgbW9kaWZpY2F0aW9uIGFjdHVlbGxlICh2b2lyIGF1c3NpwqA6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiZXhhbWluZXIgbCdoaXN0b3JpcXVlIGV0IGwnw6l0YXQgKHZvaXIgYXVzc2nCoDogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiYWdyYW5kaXIsIG1hcnF1ZXIgZXQgbW9kaWZpZXIgdm90cmUgaGlzdG9yaXF1ZSIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJjb2xsYWJvcmVyICh2b2lyIGF1c3NpwqA6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJDb21tYW5kZXMgUG9yY2VsYWluZSBQcmluY2lwYWxlcyIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJDb21tYW5kZXMgQXV4aWxpYWlyZXMgLyBNYW5pcHVsYXRldXJzIgorCisjOiBoZWxwLmM6MzMKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICJDb21tYW5kZXMgQXV4aWxpYWlyZXMgLyBJbnRlcnJvZ2F0ZXVycyIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIkludGVyYWN0aW9uIGF2ZWMgZCdhdXRyZXMgZMOpdmVsb3BwZXVycyIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJDb21tYW5kZXMgYmFzLW5pdmVhdSAvIE1hbmlwdWxhdGV1cnMiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkNvbW1hbmRlcyBiYXMgbml2ZWF1IC8gSW50ZXJyb2dhdGV1cnMiCisKKyM6IGhlbHAuYzozNworbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJDb21tYW5kZXMgYmFzIG5pdmVhdSAvIFN5bmNocm9uaXNhdGlvbiBkZSBkw6lww7R0cyIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAiQ29tbWFuZGVzIGJhcyBuaXZlYXUgLyBBc3Npc3RhbnRzIGludGVybmVzIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY29tbWFuZGVzIGdpdCBkaXNwb25pYmxlcyBkYW5zICclcyciCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgImNvbW1hbmRlcyBnaXQgZGlzcG9uaWJsZXMgZGVwdWlzIHVuIGF1dHJlIGVuZHJvaXQgZGUgdm90cmUgJFBBVEgiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkNpLWRlc3NvdXMgbGVzIGNvbW1hbmRlcyBHaXQgaGFiaXR1ZWxsZXMgZGFucyBkaXZlcnNlcyBzaXR1YXRpb25zwqA6IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgInR5cGUgZGUgbGlzdGUgZGUgY29tbWFuZGVzIG5vbiBzdXBwb3J0w6kgJyVzJyIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJMZXMgZ3VpZGVzIEdpdCBwb3B1bGFpcmVzIHNvbnQgOiIKKworIzogaGVscC5jOjUxMgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAiIgorIlLDqWbDqXJlei12b3VzIMOgICdnaXQgaGVscCA8Y29tbWFuZGU+JyBwb3VyIGRlcyBpbmZvcm1hdGlvbnMgc3VyIHVuZSBzb3VzLSIKKyJjb21tYW5kZSBzcMOpY2lmaXF1ZSIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICJDb21tYW5kZXMgZXh0ZXJuZXMiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIkFsaWFzIGRlIGNvbW1hbmRlIgorCisjOiBoZWxwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIiclcycgc2VtYmxlIMOqdHJlIHVuZSBjb21tYW5kZSBnaXQsIG1haXMgZWxsZSBuJ2EgcGFzIHB1XG4iCisiw6p0cmUgZXjDqWN1dMOpZS4gUGV1dC3DqnRyZSBnaXQtJXMgZXN0LWVsbGUgY2Fzc8OpZSA/IgorCisjOiBoZWxwLmM6NjU1Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIkFoZW0uIFZvdHJlIHN5c3TDqG1lIG4naW5kaXF1ZSBhdWN1bmUgY29tbWFuZGUgR2l0LiIKKworIzogaGVscC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICIiCisiQVRURU5USU9OIDogdm91cyBhdmV6IGludm9xdcOpIHVuZSBjb21tYW5kZSBHaXQgbm9tbcOpZSAnJXMnIHF1aSBuJ2V4aXN0ZSBwYXMuIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIkNvbnRpbnVvbnMgZW4gc3VwcG9zYW50IHF1ZSB2b3VzIGF2ZXogdm91bHUgZGlyZSAnJXMnLiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICIiCisiQ29udGludW9ucyBkYW5zICUwLjFmIHNlY29uZGVzIGVuIHN1cHBvc2FudCBxdWUgdm91cyBhdmV6IHZvdWx1IGRpcmUgJyVzJy4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0IDogJyVzJyBuJ2VzdCBwYXMgdW5lIGNvbW1hbmRlIGdpdC4gVm9pciAnZ2l0IC0taGVscCcuIgorCisjOiBoZWxwLmM6Njk5CiBtc2dpZCAiIgogIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIkxhIGNvbW1hbmRlIGxhIHBsdXMgcmVzc2VtYmxhbnRlIGVzdCIKK21zZ3N0clsxXSAiIgorIlxuIgorIkxlcyBjb21tYW5kZXMgbGVzIHBsdXMgcmVzc2VtYmxhbnRlcyBzb250IgorCisjOiBoZWxwLmM6NzE0Cittc2dpZCAiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKKworIzogaGVscC5jOjc4NworbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIlZvdWxpZXotdm91cyBkaXJlIGNlbGEgPyIKK21zZ3N0clsxXSAiIgorIlxuIgorIlZvdWxpZXotdm91cyBkaXJlIHVuIGRlIGNldXgtbMOgID8iCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgogbXNnc3RyICIiCiAiXG4iCi0iKiBGaWNoaWVyIHN1aXZpIHJhY2NvdXJjaXMgaWNpIGRlICVzLlxuIgotIiogUG91ciB2b2lyIGxlIGZpY2hpZXIgZW50aWVyLCB1dGlsaXNleiB1biDDqWRpdGV1ciBleHRlcm5lLlxuIgorIioqKiBWZXVpbGxleiBtZSBkaXJlIHF1aSB2b3VzIMOqdGVzLlxuIgorIlxuIgorIkxhbmNlelxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwiVm91c0BleGVtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIlZvdHJlIE5vbVwiXG4iCisiXG4iCisicG91ciByw6lnbGVyIGwnaWRlbnRpdMOpIHBhciBkw6lmYXV0IGRlIHZvdHJlIGNvbXB0ZS5cbiIKKyLDiWxpbWluZXogLS1nbG9iYWwgcG91ciBuZSBmYWlyZSBsZXMgcsOpZ2xhZ2VzIHF1ZSBkYW5zIGNlIGTDqXDDtHQuXG4iCisiXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDo0ODIKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAiw4ljaGVjIGxvcnMgZGUgbGEgZMOpc2luZGV4YXRpb24gZGUgbGEgc2VjdGlvbiBzw6lsZWN0aW9ubsOpZS4iCisjOiBpZGVudC5jOjM3OQorbXNnaWQgIm5vIGVtYWlsIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgImF1Y3VuIGNvdXJyaWVsIGZvdXJuaSBldCBsJ2F1dG8tZMOpdGVjdGlvbiBlc3QgZMOpc2FjdGl2w6llIgogCi0jOiBsaWIvZGlmZi50Y2w6NDg5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICLDiWNoZWMgbG9ycyBkZSBsJ2luZGV4YXRpb24gZGUgbGEgc2VjdGlvbi4iCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXRlY3RlciBhdXRvbWF0aXF1ZW1lbnQgbCdhZHJlc3NlICgnJXMnIHRyb3V2w6kpIgogCi0jOiBsaWIvZGlmZi50Y2w6NTY4Ci1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIsOJY2hlYyBsb3JzIGRlIGxhIGTDqXNpbmRleGF0aW9uIGRlIGxhIGxpZ25lIHPDqWxlY3Rpb25uw6llLiIKKyM6IGlkZW50LmM6NDAxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJhdWN1biBub20gZm91cm5pIGV0IGwnYXV0by1kw6l0ZWN0aW9uIGVzdCBkw6lzYWN0aXbDqWUiCiAKLSM6IGxpYi9kaWZmLnRjbDo1NzYKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgIsOJY2hlYyBsb3JzIGRlIGwnaW5kZXhhdGlvbiBkZSBsYSBsaWduZS4iCisjOiBpZGVudC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgbmFtZSAoZ290ICclcycpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXRlY3RlciBhdXRvbWF0aXF1ZW1lbnQgbGUgbm9tICgnJXMnIHRyb3V2w6kpIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgIkTDqWZhdXQiCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgIm5vbSBkJ2lkZW50aWZpYW50IHZpZGUgKHBvdXIgPCVzPikgbm9uIHBlcm1pcyIKIAotIzogbGliL2VuY29kaW5nLnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTeXN0ZW0gKCVzKSIKLW1zZ3N0ciAiU3lzdMOobWUgKCVzKSIKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICJsZSBub20gbidlc3QgY29uc3RpdHXDqSBxdWUgZGUgY2FyYWN0w6hyZXMgaW50ZXJkaXRzwqA6ICVzIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQotbXNnaWQgIk90aGVyIgotbXNnc3RyICJBdXRyZSIKKyM6IGlkZW50LmM6NDM2IGJ1aWx0aW4vY29tbWl0LmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJmb3JtYXQgZGUgZGF0ZSBpbnZhbGlkZSA6ICVzIgogCi0jOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Ci1tc2dpZCAiZXJyb3IiCi1tc2dzdHIgImVycmV1ciIKLQotIzogbGliL2Vycm9yLnRjbDozNgotbXNnaWQgIndhcm5pbmciCi1tc2dzdHIgImF0dGVudGlvbiIKLQotIzogbGliL2Vycm9yLnRjbDo5NAotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCi1tc2dzdHIgIlZvdXMgZGV2ZXogY29ycmlnZXIgbGVzIGVycmV1cnMgc3VpdmFudGVzIGF2YW50IGRlIHBvdXZvaXIgY29tbWl0ZXIuIgotCi0jOiBsaWIvaW5kZXgudGNsOjYKLW1zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdmVycm91aWxsZXIgbCdpbmRleC4iCi0KLSM6IGxpYi9pbmRleC50Y2w6MTUKLW1zZ2lkICJJbmRleCBFcnJvciIKLW1zZ3N0ciAiRXJyZXVyIGRlIGwnaW5kZXgiCi0KLSM6IGxpYi9pbmRleC50Y2w6MTcKLW1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKKyM6IGxpc3Qtb2JqZWN0cy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIHRyZWUgbW9kZSwgYnV0IGlzIG5vdCBhIHRyZWUiCiBtc2dzdHIgIiIKLSLDiWNoZWMgZGUgbGEgbWlzZSDDoCBqb3VyIGRlIGwnaW5kZXguIFVuZSByZXN5bmNocm9uaXNhdGlvbiB2YSDDqnRyZSBsYW5jw6llICIKLSJhdXRvbWF0aXF1ZW1lbnQuIgorImwnZW50csOpZSAnJXMnIGRhbnMgbCdhcmJyZSAlcyBhIHVuIG1vZGUgZCdhcmJyZSwgbWFpcyBuJ2VzdCBwYXMgdW4gYXJicmUiCiAKLSM6IGxpYi9pbmRleC50Y2w6MjgKLW1zZ2lkICJDb250aW51ZSIKLW1zZ3N0ciAiQ29udGludWVyIgorIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiIgorImwnZW50csOpZSAnJXMnIGRhbnMgbCdhcmJyZSAlcyBhIHVuIG1vZGUgZGUgYmxvYiwgbWFpcyBuJ2VzdCBwYXMgdW4gYmxvYiIKIAotIzogbGliL2luZGV4LnRjbDozMQotbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAiRMOpdmVycm91aWxsZXIgbCdpbmRleCIKKyM6IGxpc3Qtb2JqZWN0cy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjaGFyZ2VyIGwnYXJicmUgcmFjaW5lIHBvdXIgbGUgY29tbWl0ICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjI4OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiRMOpc2luZGV4YXRpb24gZGUgOiAlcyIKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWNjw6lkZXIgYXUgYmxvYiBjbGFpcnNlbcOpIGRhbnMgJyVzJyIKIAotIzogbGliL2luZGV4LnRjbDozMjgKLW1zZ2lkICJSZWFkeSB0byBjb21taXQuIgotbXNnc3RyICJQcsOqdCDDoCDDqnRyZSBjb21taXTDqS4iCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBzcGFyc2UgZmlsdGVyIGRhdGEgaW4gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsYSBkb25uw6llIGRlIGZpbHRyZSBjbGFpcnNlbcOpIGRhbnMgJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzQxCi0jLCB0Y2wtZm9ybWF0CisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICJhdHRlbmR1wqA6ICd0cmVlOjxwcm9mb25kZXVyPiciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjczCittc2dpZCAic3BhcnNlOnBhdGggZmlsdGVycyBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQiCittc2dzdHIgInNwYXJzZcKgOiBsZSBzdXBwb3J0IGRlcyBmaWx0cmVzIGRlIGNoZW1pbiBhIMOpdMOpIGFiYW5kb25uw6kiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAic3DDqWNpZmljYXRldXIgZGUgZmlsdHJlIGludmFsaWRlICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAiIgorImxlIGNhcmFjdMOocmUgZG9pdCDDqnRyZSDDqWNoYXBww6kgZGFucyBsZSBzcMOpY2lmaWNhdGV1ciBkZSBzb3VzLWZpbHRyZcKgOiAnJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgInF1ZWxxdWUgY2hvc2UgYXR0ZW5kdSBhcHLDqHMgY29tYmluZcKgOiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21iaW5lciBkZXMgc3DDqWNpZmljYXRldXJzIG11bHRpcGxlcyBkZSBmaWx0cmUiCisKKyM6IGxvY2tmaWxlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGNyw6llciAnJXMubG9jayfCoDogJXMuXG4iCisiXG4iCisiSWwgc2VtYmxlIHF1J3VuIGF1dHJlIHByb2Nlc3N1cyBnaXQgZXN0IGTDqWrDoCBsYW5jw6kgZGFucyBjZSBkw6lww7R0LFxuIgorInBhciBleGVtcGxlIHVuIMOpZGl0ZXVyIG91dmVydCBwYXIgJ2dpdCBjb21taXQnLiBWZXVpbGxleiB2b3VzIGFzc3VyZXJcbiIKKyJxdWUgdG91cyBsZXMgcHJvY2Vzc3VzIHNvbnQgdGVybWluw6lzIGV0IHLDqWVzc2F5ZXouIFNpIGwnw6ljaGVjIHBlcnNpc3RlLFxuIgorInVuIHByb2Nlc3N1cyBnaXQgcGV1dCBhdm9pciBwbGFudMOpwqA6XG4iCisic3VwcHJpbWV6IGxlIGZpY2hpZXIgbWFudWVsbGVtZW50IHBvdXIgcG91cnN1aXZyZS4iCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjcsOpZXIgJyVzLmxvY2snwqA6ICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgY2FjaGUiCisKKyM6IG1lcmdlLmM6MTA3IHJlcmVyZS5jOjcyMCBidWlsdGluL2FtLmM6MTg3NCBidWlsdGluL2FtLmM6MTkwOAorIzogYnVpbHRpbi9jaGVja291dC5jOjUzOSBidWlsdGluL2NoZWNrb3V0LmM6Nzk4IGJ1aWx0aW4vY2xvbmUuYzo4MDkKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNjQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBkJ2luZGV4IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjcKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKG1hdXZhaXMgY29tbWl0KVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICLDqWNoZWMgZGUgYWRkaW5mb19jYWNoZSBwb3VyIGxlIGNoZW1pbiAnJXMnwqA7IGFiYW5kb24gZGUgbGEgZnVzaW9uLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICLDqWNoZWMgZGUgYWRkaW5mb19jYWNoZSBwb3VyIGxlIGNoZW1pbiAnJXMnwqA7IGFiYW5kb24gZGUgbGEgZnVzaW9uLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGNoZW1pbiAnJXMnICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgJXMgcG91ciBmYWlyZSBkZSBsYSBwbGFjZSBwb3VyIGxlIHNvdXMtcsOpcGVydG9pcmVcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTEwIG1lcmdlLXJlY3Vyc2l2ZS5jOjkyOQorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogcGV1dC3DqnRyZSB1biBjb25mbGl0IEQvRiA/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJyZWZ1cyBkZSBwZXJkcmUgbGUgZmljaGllciBub24gc3VpdmkgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTYwIGJ1aWx0aW4vY2F0LWZpbGUuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgImJsb2IgYXR0ZW5kdSBwb3VyICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiw6ljaGVjIMOgIGwnb3V2ZXJ0dXJlIGRlICclcyfCoDogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgIsOpY2hlYyDDoCBsYSBjcsOpYXRpb24gZHUgbGllbiBzeW1ib2xpcXVlICclcyfCoDogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAibmUgc2FpdCBwYXMgdHJhaXRlciAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiw4ljaGVjIGRlIGxhIGZ1c2lvbiBkdSBzb3VzLW1vZHVsZSAlcyAobm9uIGV4dHJhaXQpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgbm90IHByZXNlbnQpIgorbXNnc3RyICLDiWNoZWMgZGUgZnVzaW9uIGR1IHNvdXMtbW9kdWxlICVzIChjb21taXRzIG5vbiBwcsOpc2VudHMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UpIgorbXNnc3RyICIiCisiw4ljaGVjIGRlIGxhIGZ1c2lvbiBkdSBzb3VzLW1vZHVsZSAlcyAobGVzIGNvbW1pdHMgbmUgZGVzY2VuZGVudCBwYXMgZGUgbGEgIgorImJhc2UgZGUgZnVzaW9uKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyMSBtZXJnZS1yZWN1cnNpdmUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICJBdmFuY2UgcmFwaWRlIGR1IHNvdXMtbW9kdWxlICVzIGF1IGNvbW1pdCBzdWl2YW50wqA6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI0IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiQXZhbmNlIHJhcGlkZSBkdSBzb3VzLW1vZHVsZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtZXJnZSBmb2xsb3dpbmcgY29tbWl0cyBub3QgZm91bmQpIgorbXNnc3RyICIiCisiw4ljaGVjIGRlIGZ1c2lvbiBkdSBzb3VzLW1vZHVsZSAlcyAoZnVzaW9uIHN1aXZhbnQgbGVzIGNvbW1pdHMgbm9uIHRyb3V2w6llKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiw4ljaGVjIGRlIGZ1c2lvbiBkdSBzb3VzLW1vZHVsZSAlcyAocGFzIGVuIGF2YW5jZSByYXBpZGUpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY0Cittc2dpZCAiRm91bmQgYSBwb3NzaWJsZSBtZXJnZSByZXNvbHV0aW9uIGZvciB0aGUgc3VibW9kdWxlOlxuIgorbXNnc3RyICJSw6lzb2x1dGlvbiBwb3NzaWJsZSBkZSBmdXNpb24gdHJvdXbDqWUgcG91ciBsZSBzb3VzLW1vZHVsZcKgOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAiIgorIlNpIGMnZXN0IGNvcnJlY3QsIGFqb3V0ZXogbGUgc2ltcGxlbWVudCDDoCBsJ2luZGV4XG4iCisiZW4gdXRpbGlzYW50IHBhciBleGVtcGxlwqA6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJxdWkgYWNjZXB0ZXJhIGNldHRlIHN1Z2dlc3Rpb24uXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAiw4ljaGVjIGRlIGZ1c2lvbiBkdSBzb3VzLW1vZHVsZSAlcyAocGx1c2lldXJzIGZ1c2lvbnMgdHJvdXbDqWVzKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0OQorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICLDiWNoZWMgw6AgbCdleMOpY3V0aW9uIGRlIGxhIGZ1c2lvbiBpbnRlcm5lIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIkltcG9zc2libGUgZCdham91dGVyICVzIMOgIGxhIGJhc2UgZGUgZG9ubsOpZXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICJGdXNpb24gYXV0b21hdGlxdWUgZGUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJFcnJldXLCoDogcmVmdXMgZGUgcGVyZHJlIGxlIGZpY2hpZXIgbm9uIHN1aXZpICVzwqA7IMOpY3JpdHVyZSBkYW5zICVzIMOgIGxhICIKKyJwbGFjZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSVQgKCVzL3N1cHByZXNzaW9uKSA6ICVzIHN1cHByaW3DqSBkYW5zICVzIGV0ICVzIGRhbnMgJXMuIFZlcnNpb24gJXMgZGUgIgorIiVzIGxhaXNzw6llIGRhbnMgbCdhcmJyZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSVQgKCVzL3N1cHByZXNzaW9uKSA6ICVzIHN1cHByaW3DqSBkYW5zICVzIGV0ICVzIMOgICVzIGRhbnMgJXMuIFZlcnNpb24gIgorIiVzIGRlICVzIGxhaXNzw6llIGRhbnMgbCdhcmJyZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVQgKCVzL3N1cHByZXNzaW9uKSA6ICVzIHN1cHByaW3DqSBkYW5zICVzIGV0ICVzIGRhbnMgJXMuIFZlcnNpb24gJXMgZGUgIgorIiVzIGxhaXNzw6llIGRhbnMgbCdhcmJyZSBkYW5zIGxlIGZpY2hpZXIgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUICglcy9zdXBwcmVzc2lvbikgOiAlcyBzdXBwcmltw6kgZGFucyAlcyBldCAlcyDDoCAlcyBkYW5zICVzLiBWZXJzaW9uICIKKyIlcyBkZSAlcyBsYWlzc8OpZSBkYW5zIGwnYXJicmUgZGFucyBsZSBmaWNoaWVyICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUzNAorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAicmVub21tYWdlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTM0Cittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAicmVub21tw6kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTQgbWVyZ2UtcmVjdXJzaXZlLmM6MjUzMCBtZXJnZS1yZWN1cnNpdmUuYzozMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAiUmVmdXMgZGUgcGVyZHJlIGxlIGZpY2hpZXIgbW9kaWZpw6kgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiUmVmdXMgZGUgcGVyZHJlIGxlIGZpY2hpZXIgbm9uIHN1aXZpICVzLCBtw6ptZSBzJ2lsIGfDqm5lLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVQgKHJlbm9tbWFnZS9ham91dCkgOiBSZW5vbW1hZ2UgZGUgJXMtPiVzIGRhbnMgJXMuICVzIGFqb3V0w6kgZGFucyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMgZXN0IHVuIHLDqXBlcnRvaXJlIGRhbnMgJXMgYWpvdXTDqSBwbHV0w7R0IGNvbW1lICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJSZWZ1cyBkZSBwZXJkcmUgbGUgZmljaGllciBub24gc3VpdmkgJXMgOyBham91dCBjb21tZSAlcyDDoCBsYSBwbGFjZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiQ09ORkxJVCAocmVub21tYWdlL3Jlbm9tbWFnZSkgOiBSZW5vbW1hZ2UgZGUgXCIlc1wiLT5cIiVzXCIgZGFucyBsYSBicmFuY2hlICIKKyJcIiVzXCIgZXQgcmVub21tYWdlIFwiJXNcIi0+XCIlc1wiIGRhbnMgXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NDIKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAobGFpc3PDqSBub24gcsOpc29sdSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiQ09ORkxJVCAocmVub21tYWdlL3Jlbm9tbWFnZSkgOiByZW5vbW1hZ2UgJyVzJy0+JyVzJyBkYW5zICVzLiBSZW5vbW1hZ2UgJyVzJy0iCisiPiclcycgZGFucyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiBVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgIgorImRpcmVjdG9yeSAlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2l0aCBubyBkZXN0aW5hdGlvbiAiCisiZ2V0dGluZyBhIG1ham9yaXR5IG9mIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyJDT05GTElUIChyZW5vbW1hZ2UgZGUgcsOpcGVydG9pcmUgY291cMOpKcKgOiBsYSBwbGFjZSBkZSAlcyBuJ2VzdCBwYXMgY2xhaXJlICIKKyJwYXJjZSBxdWUgbGUgcsOpcGVydG9pcmUgJXMgYSDDqXTDqSByZW5vbW3DqSBlbiBwbHVzaWV1cnMgYXV0cmVzIHLDqXBlcnRvaXJlcywgIgorInNhbnMgYXVjdW5lIGRlc3RpbmF0aW9uIHLDqWN1cMOpcmFudCBsYSBtYWpvcml0w6kgZGVzIGZpY2hpZXJzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUIChyZW5vbW1hZ2UgaW1wbGljaXRlIGRlIHLDqXBlcnRvaXJlKcKgOiBsZSByw6lwZXJ0b2lyZS9maWNoaWVyICVzIGfDqm5lICIKKyJkZXMgcmVub21tYWdlcyBpbXBsaWNpdGVzIGRlIHLDqXBlcnRvaXJlIGTDqXBsYcOnYW50IGxlcyBjaGVtaW5zIHN1aXZhbnRzwqA6ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyJDT05GTElUIChyZW5vbW1hZ2UgaW1wbGljaXRlIGRlIHLDqXBlcnRvaXJlKcKgOiBpbXBvc3NpYmxlIGRlIHRyYW5zZm9ybWVyICIKKyJwbHVzaWV1cnMgY2hlbWlucyBzdXIgJXPCoDsgbGVzIGNoZW1pbnMgY29uY2VybsOpcyBzb250wqA6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElUIChyZW5vbW1hZ2UvcmVub21tYWdlKSA6IHJlbm9tbWFnZSBkdSByw6lwZXJ0b2lyZSAlcy0+JXMgZGFucyAlcy4gIgorIlJlbm9tbWFnZSBkZSByw6lwZXJ0b2lyZSAlcy0+JXMgZGFucyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQ5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCisiQVZFUlRJU1NFTUVOVMKgOiBuZSByZW5vbW1lIHBhcyAlcy0+JXMgZGFucyAlcywgcGFyY2UgcXVlICVzIGx1aS1tw6ptZSBhIMOpdMOpICIKKyJyZW5vbW3DqS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdvYmpldCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAyMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAibCdvYmpldCAlcyBuJ2VzdCBwYXMgdW4gYmxvYiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4NgorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAibW9kaWZpY2F0aW9uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIm1vZGlmacOpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDk4Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiY29udGVudSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEwMgorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgImFqb3V0L2Fqb3V0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAiJXMgc2F1dMOpIChmdXNpb24gaWRlbnRpcXVlIMOgIGwnZXhpc3RhbnQpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ3IGdpdC1zdWJtb2R1bGUuc2g6OTkzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzb3VzLW1vZHVsZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiQ09ORkxJVCAoJXMpIDogQ29uZmxpdCBkZSBmdXNpb24gZGFucyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiQWpvdXQgcGx1dMO0dCBjb21tZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJDaGVtaW4gbWlzIMOgIGpvdXLCoDogJXMgYWpvdXTDqSBkYW5zICVzIGRhbnMgdW4gcsOpcGVydG9pcmUgcXVpIGEgw6l0w6kgcmVub21tw6kgIgorImVuICVzwqA7IGTDqXBsYWPDqSBkYW5zICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCAiCisiaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiQ09ORkxJVCAobG9jYWxpc2F0aW9uIGRlIGZpY2hpZXIpwqA6ICVzIGFqb3V0w6kgZGFucyAlcyBkYW5zIHVuIHLDqXBlcnRvaXJlIHF1aSAiCisiYSDDqXTDqSByZW5vbW3DqSBkYW5zICVzLCBjZSBxdWkgc3VnZ8OocmUgcXUnaWwgZGV2cmFpdCBwZXV0LcOqdHJlIMOqdHJlIGTDqXBsYWPDqSAiCisidmVycyAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gIgorIiVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisiQ2hlbWluIG1pcyDDoCBqb3VywqA6ICVzIHJlbm9tbcOpIGVuICVzIGRhbnMgJXMsIGRhbnMgdW4gcsOpcGVydG9pcmUgcXVpIGEgw6l0w6kgIgorInJlbm9tbcOpIGVuICVzwqA7IGTDqXBsYWPDqSBkYW5zICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiQ09ORkxJVCAobG9jYWxpc2F0aW9uIGRlIGZpY2hpZXIpwqA6ICVzIHJlbm9tbcOpIGVuICVzIGRhbnMgJXMsIGRhbnMgdW4gIgorInLDqXBlcnRvaXJlIHF1aSBhIMOpdMOpIHJlbm9tbcOpIGRhbnMgJXMsIGNlIHF1aSBzdWdnw6hyZSBxdSdpbCBkZXZyYWl0IHBldXQtw6p0cmUgIgorIsOqdHJlIGTDqXBsYWPDqSB2ZXJzICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MDgKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiZmljaGllci9yw6lwZXJ0b2lyZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQxMworbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJyw6lwZXJ0b2lyZS9maWNoaWVyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICIiCisiQ09ORkxJVCAoJXMpIDogSWwgeSBhIHVuIHLDqXBlcnRvaXJlIG5vbW3DqSAlcyBkYW5zICVzLiBBam91dCBkZSAlcyBjb21tZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyOQorIywgYy1mb3JtYXQKIG1zZ2lkICJBZGRpbmcgJXMiCiBtc2dzdHIgIkFqb3V0IGRlICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjM5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgotbXNnc3RyICJBbm51bGVyIGxlcyBtb2RpZmljYXRpb25zIGRhbnMgbGUgZmljaGllciAlcyA/ICIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKGFkZC9hZGQpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiQ09ORkxJVCAoYWpvdXQvYWpvdXQpwqA6IENvbmZsaXQgZGUgZnVzaW9uIGRhbnMgJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDAwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgotbXNnc3RyICJBbm51bGVyIGxlcyBtb2RpZmljYXRpb25zIGRhbnMgY2VzICVpIGZpY2hpZXJzID8iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDgyCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAiRMOpasOgIMOgIGpvdXIgISIKIAotIzogbGliL2luZGV4LnRjbDo0MDgKLW1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCi1tc2dzdHIgIiIKLSJUb3V0ZXMgbGVzIG1vZGlmaWNhdGlvbnMgbm9uLWluZGV4w6llcyBzZXJvbnQgZMOpZmluaXRpdmVtZW50IHBlcmR1ZXMgcGFyICIKLSJsJ2FubnVsYXRpb24uIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBmdXNpb24gZGVzIGFyYnJlcyAlcyBldCAlcyIKIAotIzogbGliL2luZGV4LnRjbDo0MTEKLW1zZ2lkICJEbyBOb3RoaW5nIgotbXNnc3RyICJOZSByaWVuIGZhaXJlIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU5NQorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICJGdXNpb24gOiIKIAotIzogbGliL2luZGV4LnRjbDo0MjkKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgIkFubnVsZXIgbW9kaWZpY2F0aW9ucyBkYW5zIGZpY2hpZXJzIHNlbGVjdGlvbm7DqXMiCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICIldSBhbmPDqnRyZSBjb21tdW4gdHJvdXbDqSA6IgorbXNnc3RyWzFdICIldSBhbmPDqnRyZXMgY29tbXVucyB0cm91dsOpcyA6IgogCi0jOiBsaWIvaW5kZXgudGNsOjQzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydGluZyAlcyIKLW1zZ3N0ciAiQW5udWxhdGlvbiBkZXMgbW9kaWZpY2F0aW9ucyBkYW5zICVzIgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY1OAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAibGEgZnVzaW9uIG4nYSBwYXMgcmV0b3VybsOpIGRlIGNvbW1pdCIKIAotIzogbGliL21lcmdlLnRjbDoxMworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzcxNworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiICAlcyIKIG1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgZnVzaW9ubmVyIHBlbmRhbnQgdW5lIGNvcnJlY3Rpb24uXG4iCi0iXG4iCi0iVm91cyBkZXZleiBmaW5pciBkZSBjb3JyaWdlciBjZSBjb21taXQgYXZhbnQgZGUgbGFuY2VyIHVuZSBxdWVsY29ucXVlICIKLSJmdXNpb24uXG4iCisiVm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBhdXggZmljaGllcnMgc3VpdmFudHMgc2VyYWllbnQgw6ljcmFzw6llcyBwYXIgbGEgIgorImZ1c2lvbsKgOlxuIgorIiAgJXMiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjcKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdvYmpldCAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODMyIGJ1aWx0aW4vbWVyZ2UuYzo2OTQgYnVpbHRpbi9tZXJnZS5jOjg3NAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGwnaW5kZXguIgorCisjOiBtaWR4LmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAibGUgZmljaGllciBkJ2luZGV4IG11bHRpLXBhcXVldCAlcyBlc3QgdHJvcCBwZXRpdCIKKworIzogbWlkeC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc2lnbmF0dXJlIDB4JTA4eCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICIiCisibGEgc2lnbmF0dXJlIGRlIGwnaW5kZXggbXVsdGktcGFxdWV0IDB4JTA4eCBuZSBjb3JyZXNwb25kIHBhcyDDoCBsYSBzaWduYXR1cmUgIgorIjB4JTA4eCIKKworIzogbWlkeC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiAlZCBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAibGEgdmVyc2lvbiBkJ2luZGV4IG11bHRpLXBhcXVldCAlZCBuJ2VzdCBwYXMgcmVjb25udWUiCisKKyM6IG1pZHguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIHZlcnNpb24gJXUgZG9lcyBub3QgbWF0Y2giCittc2dzdHIgImxhIHZlcnNpb24gJXUgZHUgY29uZGVuc8OpIG5lIGNvcnJlc3BvbmQgcGFzIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgImTDqWNhbGFnZSBkZSBzZWN0aW9uIGludmFsaWRlICh0cm9wIGdyYW5kKSIKKworIzogbWlkeC5jOjEzMgorbXNnaWQgInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiIKKyJpZGVudGlmaWFudCBkZSB0ZXJtaW5haXNvbiBkZSB0cm9uw6dvbiBkJ2luZGV4IG11bHRpLXBhcXVldCB0ZXJtaW5hbnQgIgorImFwcGFyYcOudCBwbHVzIHTDtHQgcXUnYXR0ZW5kdSIKKworIzogbWlkeC5jOjE0NQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiCittc2dzdHIgImluZGV4IG11bHRpLXBhcXVldCBtYW5xdWUgZGUgdHJvbsOnb24gZGUgbm9tIGRlIHBhcXVldCIKKworIzogbWlkeC5jOjE0NworbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICJpbmRleCBtdWx0aS1wYXF1ZXQgbWFucXVlIGRlIHRyb27Dp29uIGRlIGQnw6l0YWxlbWVudCBPSUQgcmVxdWlzIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgImluZGV4IG11bHRpLXBhcXVldCBtYW5xdWUgZGUgdHJvbsOnb24gZGUgcmVjaGVyY2hlIE9JRCIKKworIzogbWlkeC5jOjE1MQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAiaW5kZXggbXVsdGktcGFxdWV0IG1hbnF1ZSBkZSB0cm9uw6dvbiBkZSBkw6ljYWxhZ2UgZCdvYmpldCIKKworIzogbWlkeC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIgorbXNnc3RyICIiCisiaW5kZXggbXVsdGktcGFxdWV0IGxlcyBub21zIGRlIHBhcXVldHMgc29udCBlbiBkw6lzb3JkcmXCoDogJyVzJyBhdmFudCAnJXMnIgorCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAibWF1dmFpcyBwYWNrLWludC1pZMKgOiAldSAoJXUgcGFxdWV0cyBhdSB0b3RhbCkiCisKKyM6IG1pZHguYzoyNjAKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHN0b3JlcyBhIDY0LWJpdCBvZmZzZXQsIGJ1dCBvZmZfdCBpcyB0b28gc21hbGwiCittc2dzdHIgIiIKKyJtdWx0aS1wYWNrLWluZGV4IHN0b2NrIHVuIGTDqWNhbGFnZSBlbiA2NC1iaXQsIG1haXMgb2ZmX3QgZXN0IHRyb3AgcGV0aXQiCisKKyM6IG1pZHguYzoyODgKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJlcnJldXIgw6AgbGEgcHLDqXBhcmF0aW9uIGR1IGZpY2hpZXIgcGFxdWV0IGRlcHVpcyB1biBpbmRleCBtdWx0aS1wYXF1ZXQiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbCdham91dCBkdSBmaWNoaWVyIHBhcXVldCAnJXMnIgorCisjOiBtaWR4LmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIKK21zZ3N0ciAiw6ljaGVjIMOgIGwnb3V2ZXJ0dXJlIGR1IGZpY2hpZXIgcGFxdWV0ICclcyciCisKKyM6IG1pZHguYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIsOpY2hlYyBkZSBsb2NhbGlzYXRpb24gZGUgbCdvYmpldCAlZCBkYW5zIGxlIGZpY2hpZXIgcGFxdWV0IgorCisjOiBtaWR4LmM6ODQyCittc2dpZCAiQWRkaW5nIHBhY2tmaWxlcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJBam91dCBkZSBmaWNoaWVycyBwYXF1ZXQgw6AgdW4gaW5kZXggbXVsdGktcGFxdWV0IgorCisjOiBtaWR4LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3Qgc2VlIHBhY2stZmlsZSAlcyB0byBkcm9wIgorbXNnc3RyICJmaWNoaWVyIHBhcXVldCDDoCDDqWxpbWluZXIgJXMgbm9uIHRyb3V2w6kiCisKKyM6IG1pZHguYzo5NzMKK21zZ2lkICJXcml0aW5nIGNodW5rcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLDiWNyaXR1cmUgZGVzIHNlY3Rpb25zIGRhbnMgbCdpbmRleCBtdWx0aS1wYXF1ZXQiCisKKyM6IG1pZHguYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbGVhciBtdWx0aS1wYWNrLWluZGV4IGF0ICVzIgorbXNnc3RyICLDqWNoZWMgZHUgbmV0dG95YWdlIGRlIGwnaW5kZXggZGUgbXVsdGktcGFxdWV0IMOgICVzIgorCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJSZWNoZXJjaGUgZGUgZmljaGllcnMgcGFxdWV0cyByw6lmw6lyZW5jw6lzIgorCisjOiBtaWR4LmM6MTEyMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCiBtc2dzdHIgIiIKLSJMJ8OpdGF0IGxvcnMgZGUgbGEgZGVybmnDqHJlIHN5bmNocm9uaXNhdGlvbiBuZSBjb3JyZXNwb25kIHBsdXMgw6AgbCfDqXRhdCBkdSAiCi0iZMOpcMO0dC5cbiIKLSJcbiIKLSJVbiBhdXRyZSBwcm9ncmFtbWUgR2l0IGEgbW9kaWZpw6kgY2UgZMOpcMO0dCBkZXB1aXMgbGEgZGVybmnDqHJlICIKLSJzeW5jaHJvbmlzYXRpb24uIFVuZSByZXN5bmNocm9uaXNhdGlvbiBkb2l0IMOqdHJlIGVmZmVjdHXDqWUgYXZhbnQgZGUgcG91dm9pciAiCi0iZnVzaW9ubmVyIGRlIG5vdXZlYXUuXG4iCi0iXG4iCi0iQ2VsYSB2YSDDqnRyZSBmYWl0IHRvdXQgZGUgc3VpdGUgYXV0b21hdGlxdWVtZW50XG4iCisiw6l0YWxlbWVudCBvaWQgZW4gZMOpc29yZHJlwqA6IMOpdGFsZW1lbnRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gIgorIsOpdGFsZW1lbnRbJWRdIgogCi0jOiBsaWIvbWVyZ2UudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0CisjOiBtaWR4LmM6MTEyOAorbXNnaWQgIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZSBsJ29yZHJlIGRlcyBPSUQgZGFucyBsJ2luZGV4IG11bHRpLXBhcXVldCIKKworIzogbWlkeC5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgInJlY2hlcmNoZSBkJ29pZCBlbiBkw6lzb3JkcmXCoDogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIkNsYXNzZW1lbnQgZGVzIG9iamV0cyBwYXIgZmljaGllciBwYXF1ZXQiCisKKyM6IG1pZHguYzoxMTY0Cittc2dpZCAiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlcyBkw6ljYWxhZ2VzIGRlcyBvYmpldHMiCisKKyM6IG1pZHguYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGxlY3R1cmUgZGUgbCfDqWzDqW1lbnQgZGUgY2FjaGUgcG91ciBvaWRbJWRdID0gJXMiCisKKyM6IG1pZHguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciBwYXF1ZXQgJXMiCisKKyM6IG1pZHguYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgImTDqWNhbGFnZSBkJ29iamV0IGluY29ycmVjdCBwb3VyIG9pZFslZF0gPSAlc8KgOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorCisjOiBtaWR4LmM6MTIyMAorbXNnaWQgIkNvdW50aW5nIHJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiQ29tcHRhZ2UgZGVzIG9iamV0cyByw6lmw6lyZW5jw6lzIgorCisjOiBtaWR4LmM6MTIzMAorbXNnaWQgIkZpbmRpbmcgYW5kIGRlbGV0aW5nIHVucmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIlJlY2hlcmNoZSBldCBlZmZhY2VtZW50IGRlcyBmaWNoaWVycyBwYXF1ZXRzIG5vbi1yw6lmw6lyZW5jw6lzIgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpbWFycmVyIGxlIGdyb3VwZW1lbnQgZCdvYmpldHMiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgIkltcG9zc2libGUgZGUgZmluaXIgbGUgZ3JvdXBlbWVudCBkJ29iamV0cyIKKworIzogbmFtZS1oYXNoLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9kaXIgdGhyZWFkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgZmlsIGxhenlfZGlyIDogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSBmaWwgbGF6eV9uYW1lIDogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBqb2luZHJlIGxlIGZpbCBsYXp5X25hbWUgOiAlcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgotIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgcHJldmlvdXMgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuXG4iCisiUGxlYXNlLCB1c2UgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyB0byAiCisiY29tbWl0L2Fib3J0IHRoZSBwcmV2aW91cyBtZXJnZSBiZWZvcmUgeW91IHN0YXJ0IGEgbmV3IG5vdGVzIG1lcmdlLiIKIG1zZ3N0ciAiIgotIlZvdXMgw6p0ZXMgYXUgbWlsaWV1IGQndW5lIGZ1c2lvbiBjb25mbGljdHVlbGxlLlxuIgotIlxuIgotIkxlIGZpY2hpZXIgJXMgYSBkZXMgY29uZmxpY3RzIGRlIGZ1c2lvbi5cbiIKLSJcbiIKLSJWb3VzIGRldmV6IGxlcyByw6lzb3VkcmUsIHB1aXMgaW5kZXhlciBsZSBmaWNoaWVyLCBldCBlbmZpbiBjb21taXRlciBwb3VyICIKLSJ0ZXJtaW5lciBsYSBmdXNpb24gY291cmFudGUuIFNldWxlbWVudCDDoCBjZSBtb21lbnQgbMOgIHNlcmEtdC1pbCBwb3NzaWJsZSAiCi0iZCdlZmZlY3R1ZXIgdW5lIG5vdXZlbGxlIGZ1c2lvbi5cbiIKKyJWb3VzIG4nYXZleiBwYXMgdGVybWluw6kgdm90cmUgcHLDqWPDqWRlbnRlIGZ1c2lvbiBkZSBub3RlcyAoJXMgZXhpc3RlKS5cbiIKKyJWZXVpbGxleiB1dGlsaXNlciAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvdSAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnICIKKyJwb3VyIHZhbGlkZXIvYWJhbmRvbm5lciBsYSBmdXNpb24gZW4gY291cnMgYXZhbnQgZCdlbiBkw6ltYXJyZXIgdW5lIG5vdXZlbGxlLiIKIAotIzogbGliL21lcmdlLnRjbDo1NQotIywgdGNsLWZvcm1hdAorIzogbm90ZXMtbWVyZ2UuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLiIKK21zZ3N0ciAiVm91cyBuJ2F2ZXogcGFzIHRlcm1pbsOpIHZvdHJlIGZ1c2lvbiBkZSBub3RlcyAoJXMgZXhpc3RlKS4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIkltcG9zc2libGUgZGUgdmFsaWRlciB1biBhcmJyZSBkZSBub3RlcyBub24gaW5pdGlhbGlzw6kvcsOpZsOpcmVuY8OpIgorCisjOiBub3Rlcy11dGlscy5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIk1hdXZhaXNlIHZhbGV1ciBkZSBub3Rlcy5yZXdyaXRlTW9kZSA6ICclcyciCisKKyM6IG5vdGVzLXV0aWxzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJSZWZ1cyBkZSByw6nDqWNyaXJlIGRlcyBub3RlcyBkYW5zICVzIChob3JzIGRlIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJNYXV2YWlzZSB2YWxldXIgZGUgJXMgOiAnJXMnIgorCisjOiBvYmplY3QuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAidHlwZSBkJ29iamV0IGludmFsaWRlIFwiJXNcIiIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAibCdvYmpldCAlcyBlc3QgZGUgdHlwZSAlcywgcGFzIGRlIHR5cGUgJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAibCdvYmpldCAlcyBhIHVuIGlkIGRlIHR5cGUgaW5jb25udSAlZCIKKworIzogb2JqZWN0LmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdvYmpldCA6ICVzIgorCisjOiBvYmplY3QuYzoyNjYgb2JqZWN0LmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggJXMiCittc2dzdHIgImluY29ow6lyZW5jZSBkZSBoYWNoYWdlICVzIgorCisjOiBwYWNrZmlsZS5jOjY0MQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJvZmZzZXQgYXZhbnQgbGEgZmluIGR1IGZpY2hpZXIgcGFxdWV0ICguaWR4IGNhc3PDqcKgPykiCisKKyM6IHBhY2tmaWxlLmM6MTg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgIm9mZnNldCBhdmFudCBsZSBkw6lidXQgZGUgbCdpbmRleCBkZSBwYXF1ZXQgcG91ciAlcyAoaW5kZXggY29ycm9tcHXCoD8pIgorCisjOiBwYWNrZmlsZS5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICIiCisib2Zmc2V0IGF1IGRlbMOgIGRlIGxhIGZpbiBkZSBsJ2luZGV4IGRlIHBhcXVldCBwb3VyICVzIChpbmRleCB0cm9ucXXDqcKgPykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIlcyBhIGJlc29pbiBkJ3VuZSB2YWxldXIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAlcyIKK21zZ3N0ciAiJXMgZXN0IGluY29tcGF0aWJsZSBhdmVjICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiJXMgZXN0IGluY29tcGF0aWJsZSBhdmVjIHRvdXRlIGF1dHJlIG9wdGlvbiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIlcyBuJ2FjY2VwdGUgYXVjdW5lIHZhbGV1ciIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIGRpc3BvbmlibGUiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdpdGggYW4gb3B0aW9uYWwgay9tL2cgc3VmZml4IgorbXNnc3RyICIlcyBhdHRlbmQgdW5lIHZhbGV1ciBlbnRpw6hyZSBub24gbsOpZ2F0aXZlIGF2ZWMgdW5lIHN1ZmZpeGUgay9tL2ciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICJvcHRpb24gYW1iaWfDvGXCoDogJXMgKGRldnJhaXQgw6p0cmUgLS0lcyVzIG91IC0tJXMlcykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo0MjMgcGFyc2Utb3B0aW9ucy5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgeW91IG1lYW4gYC0tJXNgICh3aXRoIHR3byBkYXNoZXMgPykiCittc2dzdHIgInZvdWxpZXotdm91cyBkaXJlIGAtLSVzYCAoYXZlYyBkZXV4IHNpZ25lcyBtb2lucyk/IgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIm9wdGlvbiBpbmNvbm51ZSDCq8KgJXPCoMK7IgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgImJhc2N1bGUgaW5jb25udWUgwqvCoCVjwqDCuyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICJvcHRpb24gbm9uLWFzY2lpIGluY29ubnVlIGRhbnMgbGEgY2hhw65uZcKgOiAnJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODg4Cittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICJ1c2FnZSA6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24uCisjLgorIzogcGFyc2Utb3B0aW9ucy5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgIG91IDogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTUKK21zZ2lkICItTlVNIgorbXNnc3RyICItTlVNIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgImFsaWFzIHBvdXIgLS0lcyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJsJ29wdGlvbiAnJXMnIGF0dGVuZCB1bmUgdmFsZXVyIG51bcOpcmlxdWUiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZXhwaXJhdGlvbiBkYXRlICclcyciCittc2dzdHIgImRhdGUgZCdleHBpcmF0aW9uIG1hbGZvcm3DqWXCoDogJyVzJyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAibCdvcHRpb24gJyVzJyBhdHRlbmQgXCJhbHdheXNcIiwgXCJhdXRvXCIgb3UgXCJuZXZlclwiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIm5vbSBkJ29iamV0IG1hbGZvcm3DqSAnJXMnIgorCisjOiBwYXRoLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJlbmRyZSAlcyBpbnNjcmlwdGlibGUgcG91ciBsZSBncm91cGUiCisKKyM6IHBhdGhzcGVjLmM6MTMwCittc2dpZCAiRXNjYXBlIGNoYXJhY3RlciAnXFwnIG5vdCBhbGxvd2VkIGFzIGxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiCittc2dzdHIgIiIKKyJMZSBjYXJhY3TDqHJlIGQnw6ljaGFwcGVtZW50ICdcXFxcJyBpbnRlcmRpdCBjb21tZSBkZXJuaWVyIGNhcmFjdMOocmUgZGFucyB1bmUgIgorInZhbGV1ciBkJ2F0dHJpYnV0IgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiVW5lIHNldWxlIHNww6ljaWZpY2F0aW9uICdhdHRyOicgZXN0IGF1dG9yaXPDqWUuIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAidW4gc3DDqWNpZmljYXRldXIgZCdhdHRyaWJ1dCBuZSBwZXV0IHBhcyDDqnRyZSB2aWRlIgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICJub20gZCdhdHRyaWJ1dCBpbnZhbGlkZSAlcyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisibGVzIHLDqWdsYWdlcyBkZSBzcMOpY2lmaWNhdGV1cnMgZGUgY2hlbWluIGfDqW7DqXJhdXggJ2dsb2InIGV0ICdub2dsb2InIHNvbnQgIgorImluY29tcGF0aWJsZXMiCisKKyM6IHBhdGhzcGVjLmM6MjY2CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCiBtc2dzdHIgIiIKLSJWb3VzIMOqdGVzIGF1IG1pbGlldSBkJ3VuZSBtb2RpZmljYXRpb24uXG4iCi0iXG4iCi0iTGUgZmljaGllciAlcyBhIMOpdMOpIG1vZGlmacOpLlxuIgotIlxuIgotIlZvdXMgZGV2cmlleiB0ZXJtaW5lciBsZSBjb21taXQgY291cmFudCBhdmFudCBkZSBsYW5jZXIgdW5lIGZ1c2lvbi4gRW4gIgotImZhaXNhaXQgY29tbWUgY2VsYSwgdm91cyDDqXZpdGVyZXogZGUgZGV2b2lyIMOpdmVudHVlbGxlbWVudCBhYmFuZG9ubmVyIHVuZSAiCi0iZnVzaW9uIGF5YW50IMOpY2hvdcOpLlxuIgorImxlIHLDqWdsYWdlIGdsb2JhbCBkZSBzcMOpY2lmaWNhdGV1ciBkZSBjaGVtaW4gJ2xpdGVyYWwnIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAiCisidG91cyBsZXMgYXV0cmVzIHLDqWdsYWdlcyBnbG9iYXV4IGRlIHNww6ljaWZpY2F0ZXVyIGRlIGNoZW1pbiIKIAotIzogbGliL21lcmdlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBvZiAlcyIKLW1zZ3N0ciAiJXMgZGUgJXMiCisjOiBwYXRoc3BlYy5jOjMwNgorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAicGFyYW3DqHRyZSBpbnZhbGlkZSBwb3VyIGxlIHNww6ljaWZpY2F0ZXVyIG1hZ2lxdWUgZGUgY2hlbWluICdwcmVmaXgnIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEyMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgotbXNnc3RyICJGdXNpb24gZGUgJXMgZXQgJXMuLi4iCisjOiBwYXRoc3BlYy5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICJMYSBzcMOpY2lmaWNhdGlvbiBtYWdpcXVlIGRlIGNoZW1pbiAnJS4qcycgZXN0IGludmFsaWRlIGRhbnMgJyVzJyIKIAotIzogbGliL21lcmdlLnRjbDoxMzEKLW1zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKLW1zZ3N0ciAiTGEgZnVzaW9uIHMnZXN0IGZhaXRlIGF2ZWMgc3VjY8Oocy4iCisjOiBwYXRoc3BlYy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIicpJyBtYW5xdWFudGUgw6AgbGEgZmluIGR1IHNww6ljaWZpY2F0ZXVyIG1hZ2lxdWUgZGUgY2hlbWluIGRhbnMgJyVzJyIKIAotIzogbGliL21lcmdlLnRjbDoxMzMKLW1zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAiTGEgZnVzaW9uIGEgZWNob3XDqS4gSWwgZXN0IG7DqWNlc3NhaXJlIGRlIHLDqXNvdWRyZSBsZXMgY29uZmxpdHMuIgorIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIlNww6ljaWZpY2F0ZXVyIG1hZ2lxdWUgJyVjJyBub24gaW1wbMOpbWVudMOpIGRhbnMgJyVzJyIKIAotIzogbGliL21lcmdlLnRjbDoxNTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBJbnRvICVzIgotbXNnc3RyICJGdXNpb24gZGFucyAlcyIKKyM6IHBhdGhzcGVjLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlcyA6ICdsaXRlcmFsJyBldCAnZ2xvYicgc29udCBpbmNvbXBhdGlibGVzIgogCi0jOiBsaWIvbWVyZ2UudGNsOjE3NwotbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgotbXNnc3RyICJSw6l2aXNpb24gw6AgZnVzaW9ubmVyIgorIzogcGF0aHNwZWMuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIlcyA6ICclcycgZXN0IGhvcnMgZHUgZMOpcMO0dCIKIAotIzogbGliL21lcmdlLnRjbDoyMTIKKyM6IHBhdGhzcGVjLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiJyVzJyAobW7DqW1vbmlxdWXCoDogJyVjJykiCisKKyM6IHBhdGhzcGVjLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiIKKyIlcyA6IGxlIHNww6ljaWZpY2F0ZXVyIG1hZ2lxdWUgZGUgY2hlbWluIG4nZXN0IHBhcyBzdXBwb3J0w6kgcGFyIGNldHRlICIKKyJjb21tYW5kZSA6ICVzIgorCisjOiBwYXRoc3BlYy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImxlIGNoZW1pbiAnJXMnIGVzdCBhdS1kZWzDoCBkJ3VuIGxpZW4gc3ltYm9saXF1ZSIKKworIzogcGF0aHNwZWMuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBpcyBiYWRseSBxdW90ZWQ6ICVzIgorbXNnc3RyICJsYSBsaWduZSBlc3QgbWFsIGNpdMOpZcKgOiAlcyIKKworIzogcGt0LWxpbmUuYzo5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIHBhcXVldCBkZSB2aWRhZ2UiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBwYXF1ZXQgZGUgZMOpbGltaXRhdGlvbiIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWNyaXR1cmUgZHUgdmlkYWdlIGRlIHBhcXVldCIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogbGlnbmUgaW1wb3NzaWJsZW1lbnQgdHJvcCBsb25ndWUiCisKKyM6IHBrdC1saW5lLmM6MTYyIHBrdC1saW5lLmM6MTY0Cittc2dpZCAicGFja2V0IHdyaXRlIHdpdGggZm9ybWF0IGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnw6ljcml0dXJlIGQndW4gcGFxdWV0IGF2ZWMgZm9ybWF0IgorCisjOiBwa3QtbGluZS5jOjE5NgorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQgLSBkYXRhIGV4Y2VlZHMgbWF4IHBhY2tldCBzaXplIgorbXNnc3RyICIiCisiw6ljaGVjIGRlIGwnw6ljcml0dXJlIGQndW4gcGFxdWV0wqDigJEgbGVzIGRvbm7DqWVzIGTDqXBhc3NlbnQgbGEgdGFpbGxlIG1heGltYWxlICIKKyJkJ3VuIHBhcXVldCIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWNyaXR1cmUgZCd1biBwYXF1ZXQiCisKKyM6IHBrdC1saW5lLmM6Mjk1Cittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAiZXJyZXVyIGRlIGxlY3R1cmUiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgIkwnaMO0dGUgZGlzdGFudCBhIGZlcm3DqSBsYSBjb25uZXhpb24gZGUgbWFuacOocmUgaW5hdHRlbmR1ZSIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogbWF1dmFpcyBjYXJhY3TDqHJlIGRlIGxvbmd1ZXVyIGRlIGxpZ25lwqA6ICUuNHMiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgImVycmV1ciBkZSBwcm90b2NvbGXCoDogbWF1dmFpc2UgbG9uZ3VldXIgZGUgbGlnbmUgJWQiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgImVycmV1ciBkaXN0YW50ZSA6ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiUmFmcmHDrmNoaXNzZW1lbnQgZGUgbCdpbmRleCIKKworIzogcHJlbG9hZC1pbmRleC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZGVkIGxzdGF0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgbHN0YXQgZW4gZmlsIDogJXMiCisKKyM6IHByZXR0eS5jOjk4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBmb3JtYXQgLS1wcmV0dHkiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjIzCittc2dpZCAiUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJEw6lww7R0IGRpc3RhbnQgc2FucyBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgInVuIG5vbSBkZSBwcm9tZXR0ZXVyIGRpc3RhbnQgbmUgcGV1dCBwYXMgY29tbWVuY2VyIHBhciAnLyfCoDogJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgYGxvZ2AiCisKKyM6IHJhbmdlLWRpZmYuYzo3NworbXNnaWQgImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxhIHNvcnRpZSBkZSBgbG9nYCIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29tbWl0ICclcyciCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlIGdpdCAnJS4qcyciCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGfDqW7DqXJhdGlvbiBkZSBkaWZmIgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIGpvdXJuYWwgcG91ciAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICJwYXMgZCdham91dCBkJ2FsaWFzIGRlIGZpY2hpZXIgJyVzJyjCq8KgJXPCoMK7IGV4aXN0ZSBkw6lqw6AgZGFucyBsJ2luZGV4KSIKKworIzogcmVhZC1jYWNoZS5jOjY5NgorbXNnaWQgImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciB1biBibG9iIHZpZGUgZGFucyBsYSBiYXNlIGRlIGRvbm7DqWUgZCdvYmpldHMiCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlc8KgOiBuZSBwZXV0IGFqb3V0ZXIgcXVlIGRlcyBmaWNoaWVycyBub3JtYXV4LCBkZXMgbGllbnMgc3ltYm9saXF1ZXMgb3UgZGVzICIKKyJyw6lwZXJ0b2lyZXMgZ2l0IgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiJyVzJyBuJ2EgcGFzIGRlIGNvbW1pdCBleHRyYWl0IgorCisjOiByZWFkLWNhY2hlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBpbmRleCBmaWxlICclcyciCittc2dzdHIgImluZGV4YXRpb24gZHUgZmljaGllciAnJXMnIGltcG9zc2libGUiCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWpvdXRlciAnJXMnIMOgIGwnaW5kZXgiCisKKyM6IHJlYWQtY2FjaGUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiZnN0YXQgZGUgJyVzJyBpbXBvc3NpYmxlIgorCisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICInJXMnIGV4aXN0ZSDDoCBsYSBmb2lzIGNvbW1lIHVuIGZpY2hpZXIgZXQgdW4gcsOpcGVydG9pcmUiCisKKyM6IHJlYWQtY2FjaGUuYzoxNTMxCittc2dpZCAiUmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiUmFmcmHDrmNoaXIgbCdpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE2NDYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgogbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkJ2FiYW5kb25uZXIgZW4gY291cnMgZGUgY29ycmVjdGlvbi5cbiIKLSJcbiIKLSJWb3VzIGRldmV6IGZpbmlyIGRlIGNvcnJpZ2VyIGNlIGNvbW1pdC5cbiIKKyJ2ZXJzaW9uIGQnaW5kZXggcmVuc2VpZ27DqWUsIG1haXMgbGEgdmFsZXVyIGVzdCBpbnZhbGlkZS5cbiIKKyJVdGlsaXNhdGlvbiBkZSBsYSB2ZXJzaW9uICVpIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyMgorIzogcmVhZC1jYWNoZS5jOjE2NTYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkFib3J0IG1lcmdlP1xuIgotIlxuIgotIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCiBtc2dzdHIgIiIKLSJBYmFuZG9ubmVyIGxhIGZ1c2lvbiA/XG4iCi0iXG4iCi0iQWJhbmRvbm5lciBsYSBmdXNpb24gY291cmFudGUgZW50cmFpbmVyYSBsYSBwZXJ0ZSBkZSBUT1VURVMgbGVzICIKLSJtb2RpZmljYXRpb25zIG5vbiBjb21taXTDqWVzLlxuIgotIlxuIgotIkFiYW5kb25uZXIgcXVhbmQgbcOqbWUgbGEgZnVzaW9uIGNvdXJhbnRlID8iCisiR0lUX0lOREVYX1ZFUlNJT04gZXN0IHJlbnNlaWduw6ksIG1haXMgbGEgdmFsZXVyIGVzdCBpbnZhbGlkZS5cbiIKKyJVdGlsaXNhdGlvbiBkZSBsYSB2ZXJzaW9uICVpIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIyOAorIzogcmVhZC1jYWNoZS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgInNpZ25hdHVyZSBpbmNvcnJlY3RlIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJWQiCittc2dzdHIgIm1hdXZhaXNlIHZlcnNpb24gZCdpbmRleCAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjQKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAibWF1dmFpc2Ugc2lnbmF0dXJlIHNoYTEgZCdpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgImwnaW5kZXggdXRpbGlzZSBsJ2V4dGVuc2lvbiAlLjRzIHF1aSBuJ2VzdCBwYXMgY29tcHJpc2UiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICJleHRlbnNpb24gJS40cyBpZ25vcsOpZSIKKworIzogcmVhZC1jYWNoZS5jOjE3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICJmb3JtYXQgZCdlbnRyw6llIGQnaW5kZXggaW5jb25udSAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBuYW1lIGZpZWxkIGluIHRoZSBpbmRleCwgbmVhciBwYXRoICclcyciCittc2dzdHIgImNoYW1wIGRlIG5vbSBtYWxmb3Jtw6kgZGFucyBsJ2luZGV4LCBwcsOocyBkdSBjaGVtaW4gJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjE4NjYKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBpbiBpbmRleCIKK21zZ3N0ciAiZW50csOpZXMgZGUgcHLDqXBhcmF0aW9uIG5vbiBvcmRvbm7DqWVzIGRhbnMgbCdpbmRleCIKKworIzogcmVhZC1jYWNoZS5jOjE4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAiZW50csOpZXMgbXVsdGlwbGVzIGRlIHByw6lwYXJhdGlvbiBwb3VyIGxlIGZpY2hpZXIgZnVzaW9ubsOpICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoxODcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICJlbnRyw6llcyBkZSBwcsOpcGFyYXRpb24gbm9uIG9yZG9ubsOpZXMgcG91ciAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MTk3OCByZWFkLWNhY2hlLmM6MjI2NiByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IGJ1aWx0aW4vYWRkLmM6NDk5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc4IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NTQgYnVpbHRpbi9jbGVhbi5jOjk2NyBidWlsdGluL2NvbW1pdC5jOjM2NworIzogYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDk5IGJ1aWx0aW4vbXYuYzoxNDUKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDYgYnVpbHRpbi9ybS5jOjI3MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJmaWNoaWVyIGQnaW5kZXggY29ycm9tcHUiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpbCBsb2FkX2NhY2hlX2VudHJpZXMgOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgam9pbmRyZSBsZSBmaWwgbG9hZF9jYWNoX2VudHJpZXMgOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzwqA6IGwnb3V2ZXJ0dXJlIGR1IGZpY2hpZXIgZCdpbmRleCBhIMOpY2hvdcOpIgorCisjOiByZWFkLWNhY2hlLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHN0YXQgdGhlIG9wZW4gaW5kZXgiCittc2dzdHIgIiVzwqA6IGltcG9zc2libGUgZGUgZmFpcmUgdW4gc3RhdCBzdXIgbCdpbmRleCBvdXZlcnQiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiJXPCoDogZmljaGllciBkJ2luZGV4IHBsdXMgcGV0aXQgcXUnYXR0ZW5kdSIKKworIzogcmVhZC1jYWNoZS5jOjIxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuYWJsZSB0byBtYXAgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXPCoDogaW1wb3NzaWJsZSBkZSBtYXBwZXIgbGUgZmljaGllciBkJ2luZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSBmaWwgbG9hZF9pbmRleF9leHRlbnNpb25zIDogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGpvaW5kcmUgbGUgZmlsIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyA6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZnJlc2hlbiBzaGFyZWQgaW5kZXggJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByYWZyYcOuY2hpciBsJ2luZGV4IHBhcnRhZ8OpICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoyMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgImluZGV4IGNhc3PDqSwgJXMgYXR0ZW5kdSBkYW5zICVzLCAlcyBvYnRlbnUiCisKKyM6IHJlYWQtY2FjaGUuYzozMDIxIHN0cmJ1Zi5jOjExNDUgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmZXJtZXIgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjMxMjQgc2VxdWVuY2VyLmM6MjQyOSBzZXF1ZW5jZXIuYzo0MDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgInN0YXQgaW1wb3NzaWJsZSBkZSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MzEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBnaXQgZGlyOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciBsZSByw6lwZXJ0b2lyZSBnaXTCoDogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICLDqWNoZWMgbG9ycyBkZSBsJ3VubGlua8KgOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lnbGVyIGxlcyBiaXRzIGRlIGRyb2l0IGRlICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzozMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAiJXMgOiBpbXBvc3NpYmxlIGRlIHJldmVuaXIgw6AgbCfDqXRhcGUgMCIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCi0iXG4iCi0iUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKIG1zZ3N0ciAiIgotIlLDqWluaXRpYWxpc2VyIGxlcyBtb2RpZmljYXRpb25zID9cbiIKLSJcbiIKLSJSw6lpbml0aWFsaXNlciBsZXMgbW9kaWZpY2F0aW9ucyB2YSBmYWlyZSBwZXJkcmUgVE9VVEVTIGxlcyBtb2RpZmljYXRpb25zIG5vbiAiCi0iY29tbWl0w6llcy5cbiIKLSJcbiIKLSJSw6lpbml0aWFsaXNlciBxdWFuZCBtw6ptZSBsZXMgbW9kaWZpY2F0aW9ucyBjb3VyYW50ZXMgPyIKKyJwYXJhbcOodHJlIG5vbiByZWNvbm51ICVzIHBvdXIgbCdvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yw6kuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIzOQotbXNnaWQgIkFib3J0aW5nIgotbXNnc3RyICJBYmFuZG9uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjIzOQotbXNnaWQgImZpbGVzIHJlc2V0IgotbXNnc3RyICJmaWNoaWVycyByw6lpbml0aWFsaXPDqXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjY3Ci1tc2dpZCAiQWJvcnQgZmFpbGVkLiIKLW1zZ3N0ciAiTCdhYmFuZG9uIGEgw6ljaG91w6kuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI2OQotbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKLW1zZ3N0ciAiQWJhbmRvbiB0ZW1pbsOpLiBQcsOqdC4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjgKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgotbXNnc3RyICJGb3JjZXIgbGEgcsOpc29sdXRpb24gw6AgbGEgdmVyc2lvbiBkZSBiYXNlID8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjkKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKLW1zZ3N0ciAiRm9yY2VyIGxhIHLDqXNvbHV0aW9uIMOgIGNldHRlIGJyYW5jaGUgPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTAKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgotbXNnc3RyICJGb3JjZXIgbGEgcsOpc29sdXRpb24gw6AgbCdhdXRyZSBicmFuY2hlID8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0Ci0jLCB0Y2wtZm9ybWF0CisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozNQogbXNnaWQgIiIKLSJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgogIlxuIgotIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgogIlxuIgotIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKIG1zZ3N0ciAiIgotIk5vdGVyIHF1ZSBsZSBkaWZmIG5lIG1vbnRyZSBxdWUgbGVzIG1vZGlmaWNhdGlvbnMgZW4gY29uZmxpdC5cbiIKICJcbiIKLSIlcyBzZXJhIMOpY3Jhc8OpLlxuIgorIkNvbW1hbmRlc8KgOlxuIgorIiBwLCBwaWNrIDxjb21taXQ+ID0gdXRpbGlzZXIgbGUgY29tbWl0XG4iCisiIHIsIHJld29yZCA8Y29tbWl0PiA9IHV0aWxpc2VyIGxlIGNvbW1pdCwgbWFpcyByZWZvcm11bGVyIHNvbiBtZXNzYWdlXG4iCisiIGUsIGVkaXQgPGNvbW1pdD4gPSB1dGlsaXNlciBsZSBjb21taXQsIG1haXMgcydhcnLDqnRlciBwb3VyIGxlIG1vZGlmaWVyXG4iCisiIHMsIHNxdWFzaCA8Y29tbWl0PiA9IHV0aWxpc2VyIGxlIGNvbW1pdCwgbWFpcyBsZSBmdXNpb25uZXIgYXZlYyBsZSAiCisicHLDqWPDqWRlbnRcbiIKKyIgZiwgZml4dXAgPGNvbW1pdD4gPSBjb21tZSBcInNxdWFzaFwiLCBtYWlzIGVuIMOpbGltaW5hbnQgc29uIG1lc3NhZ2VcbiIKKyIgeCwgZXhlYyA8Y29tbWl0PiA9IGxhbmNlciBsYSBjb21tYW5kZSAocmVzdGUgZGUgbGEgbGlnbmUpIGRhbnMgdW4gc2hlbGxcbiIKKyIgYiwgYnJlYWsgPSBzJ2FycsOqdGVyIGljaSAob24gcGV1dCBjb250aW51ZXIgZW5zdWl0ZSBhdmVjICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJylcbiIKKyIgZCwgZHJvcCA8Y29tbWl0PiA9IHN1cHByaW1lciBsZSBjb21taXRcbiIKKyIgbCwgbGFiZWwgPGxhYmVsPiA9IMOpdGlxdWV0ZXIgbGEgSEVBRCBjb3VyYW50ZSBhdmVjIHVuIG5vbVxuIgorIiB0LCByZXNldCA8bGFiZWw+ID0gcsOpaW5pdGlhbGlzZXIgSEVBRCDDoCBsYWJlbFxuIgorIiBtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8dW5pbGlnbmU+XVxuIgorIiAgICAgICAgIGNyw6llciB1biBjb21taXQgZGUgZnVzaW9uIHV0aWxpc2FudCBsZSBtZXNzYWdlIGRlIGZ1c2lvbiBvcmlnaW5hbFxuIgorIiAgICAgICAgIChvdSBsJ3VuaWxpZ25lLCBzaSBhdWN1biBjb21taXQgZGUgZnVzaW9uIG4nYSDDqXTDqSBzcMOpY2lmacOpKS5cbiIKKyIgICAgICAgICBVdGlsaXNleiAtYyA8Y29tbWl0PiBwb3VyIHJlZm9ybXVsZXIgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uLlxuIgogIlxuIgotIkNldHRlIG9ww6lyYXRpb24gbmUgcGV1dCDDqnRyZSBpbnZlcnPDqWUgcXUnZW4gcmVsYW7Dp2FudCBsYSBmdXNpb24uIgorIlZvdXMgcG91dmV6IHLDqW9yZG9ubmVyIGNlcyBsaWduZXPCoDsgZWxsZXMgc29udCBleMOpY3V0w6llcyBkZSBoYXV0IGVuIGJhcy5cbiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKLW1zZ3N0ciAiIgotIkxlIGZpY2hpZXIgJXMgc2VtYmxlIGF2b2lyIGRlcyBjb25mbGl0cyBub24gcsOpc29sdXMsIGluZGV4ZXIgcXVhbmQgbcOqbWUgPyIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiUmViYXNhZ2UgZGUgJXMgc3VyICVzICglZCBjb21tYW5kZSkiCittc2dzdHJbMV0gIlJlYmFzYWdlIGRlICVzIHN1ciAlcyAoJWQgY29tbWFuZGVzKSIKIAotIzogbGliL21lcmdldG9vbC50Y2w6NjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCi1tc2dzdHIgIkFqb3V0ZXIgdW5lIHLDqXNvbHV0aW9uIHBvdXIgJXMiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQotbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgcsOpc291ZHJlIGxhIHN1cHByZXNzaW9uIG91IGRlIHJlbGllciBkZXMgY29uZmxpdHMgZW4gdXRpbGlzYW50ICIKLSJ1biBvdXRpbCIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Ci1tc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKLW1zZ3N0ciAiTGUgZmljaGllciBlbiBjb25mbGl0IG4nZXhpc3RlIHBhcy4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgotbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBvdXRpbCBncmFwaGlxdWUgcG91ciBmdXNpb25uZXIgZGVzIGZpY2hpZXJzLiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MjY4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgotbXNnc3RyICJPdXRpbCBkZSBmdXNpb24gJyVzJyBub24gc3VwcG9ydMOpIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKLW1zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKLW1zZ3N0ciAiTCdvdXRpbCBkZSBmdXNpb24gdG91cm5lIGTDqWrDoCwgZmF1dC1pbCBsZSB0ZXJtaW5lciA/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKLSMsIHRjbC1mb3JtYXQKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKIG1zZ2lkICIiCi0iRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyJcbiIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgorbXNnc3RyICIiCisiXG4iCisiTmUgc3VwcHJpbWV6IGF1Y3VuZSBsaWduZS4gVXRpbGlzZXogJ2Ryb3AnIGV4cGxpY2l0ZW1lbnQgcG91ciBzdXBwcmltZXIgdW4gIgorImNvbW1pdC5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NjggZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIzMgorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNpIHZvdXMgw6lsaW1pbmV6IHVuZSBsaWduZSBpY2ksIExFIENPTU1JVCBDT1JSRVNQT05EQU5UIFNFUkEgUEVSRFUuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWb3VzIMOqdGVzIGVuIHRyYWluIGQnw6lkaXRlciBsZSBmaWNoaWVyIHRvZG8gZCd1biByZWJhc2FnZSBpbnRlcmFjdGlmIGVuICIKKyJjb3Vycy5cbiIKKyJQb3VyIGNvbnRpbnVlciBsZSByZWJhc2FnZSBhcHLDqHMgw6lkaXRpb24sIGxhbmNlesKgOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQ2VwZW5kYW50LCBzaSB2b3VzIGVmZmFjZXogdG91dCwgbGUgcmViYXNhZ2Ugc2VyYSBhbm51bMOpLlxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIlZldWlsbGV6IG5vdGVyIHF1ZSBsZXMgY29tbWl0cyB2aWRlcyBzb250IGVuIGNvbW1lbnRhaXJlIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMDUgcmVyZXJlLmM6NDg1IHJlcmVyZS5jOjY5MiBzZXF1ZW5jZXIuYzozNTM2CisjOiBzZXF1ZW5jZXIuYzozNTYyIHNlcXVlbmNlci5jOjUyNjMgYnVpbHRpbi9mc2NrLmM6MzQ2IGJ1aWx0aW4vcmViYXNlLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSAnJXMnIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb3BpZXIgJyVzJyB2ZXJzICclcycuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOlxuIgorbXNnc3RyICIiCisiQXR0ZW50aW9uwqA6IGNlcnRhaW5zIGNvbW1pdHMgb250IHB1IMOqdHJlIGFjY2lkZW50ZWxsZW1lbnQgc3VwcHJpbcOpcy5cbiIKKyJDb21taXRzIHN1cHByaW3DqXMgKGR1IHBsdXMgamV1bmUgYXUgcGx1cyB2aWV1eCnCoDpcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBvdXIgw6l2aXRlciBjZSBtZXNzYWdlLCB1dGlsaXNleiBcImRyb3BcIiBwb3VyIHN1cHByaW1lciBleHBsaWNpdGVtZW50IHVuICIKKyJjb21taXQuXG4iCisiXG4iCisiVXRpbGlzZXogJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHBvdXIgY2hhbmdlciBsZSBuaXZlYXUgIgorImQnYXZlcnRpc3NlbWVudHMuXG4iCisiTGVzIGNvbXBvcnRlbWVudHMgZGlzcG9uaWJsZXMgc29udMKgOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorCisjOiByZWZzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIKK21zZ3N0ciAiJXMgbmUgcG9pbnRlIHBhcyBzdXIgdW4gb2JqZXQgdmFsaWRlISIKKworIzogcmVmcy5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgInN5bXJlZiBwZW5kYW50ICVzIGlnbm9yw6kiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAicsOpZiBjYXNzw6kgJXMgaWdub3LDqSIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAnJXMnIGVuIMOpY3JpdHVyZcKgOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGEgcsOpZiAnJXMnIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsYSByw6lmw6lyZW5jZSAnJXMnIGV4aXN0ZSBkw6lqw6AiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgImlkIGQnb2JqZXQgaW5hdHRlbmR1IHBlbmRhbnQgbCfDqWNyaXR1cmUgZGUgJyVzJyIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6Mjc5MyBzZXF1ZW5jZXIuYzoyOTk3CisjOiBzZXF1ZW5jZXIuYzozMDExIHNlcXVlbmNlci5jOjMyNjkgc2VxdWVuY2VyLmM6NTE3OSBzdHJidWYuYzoxMTQyCisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBkYW5zICclcyciCisKKyM6IHJlZnMuYzo4NjAgc3RyYnVmLmM6MTE0MCB3cmFwcGVyLmM6MTg4IHdyYXBwZXIuYzozNTggYnVpbHRpbi9hbS5jOjcxNAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJyVzJyBlbiDDqWNyaXR1cmUiCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICJpZCBkJ29iamV0IGluYXR0ZW5kdSBwZW5kYW50IGxhIHN1cHByZXNzaW9uIGRlICclcyciCisKKyM6IHJlZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgaGFzIGdhcCBhZnRlciAlcyIKK21zZ3N0ciAibGUgam91cm5hbCBwb3VyIGxhIHLDqWYgJXMgY29udGllbnQgdW4gdHJvdSBhcHLDqHMgJXMiCisKKyM6IHJlZnMuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAlcyIKK21zZ3N0ciAibGUgam91cm5hbCBwb3VyIGxhIHLDqWYgJXMgcydhcnLDqnRlIGRlIG1hbmnDqHJlIGluYXR0ZW5kdWUgc3VyICVzIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICJsZSBqb3VybmFsIHBvdXIgbGEgcsOpZiAlcyBlc3QgdmlkZSIKKworIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgInJlZnVzIGRlIG1ldHRyZSDDoCBqb3VyIHVuZSByw6lmIGF2ZWMgdW4gbm9tIGNhc3PDqSAnJXMnIgorCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICLDqWNoZWMgZGUgdXBkYXRlX3JlZiBwb3VyIGxhIHLDqWYgJyVzJ8KgOiAlcyIKKworIzogcmVmcy5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIm1pc2VzIMOgIGpvdXIgbXVsdGlwbGVzIHBvdXIgbGEgcsOpZiAnJXMnIG5vbiBwZXJtaXNlcyIKKworIzogcmVmcy5jOjIwNTUKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgIm1pc2VzIMOgIGpvdXIgZGVzIHLDqWbDqXJlbmNlcyBpbnRlcmRpdGVzIGVuIGVudmlyb25uZW1lbnQgZGUgcXVhcmFudGFpbmUiCisKKyM6IHJlZnMuYzoyMTUxIHJlZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIiclcycgZXhpc3RlwqA7IGltcG9zc2libGUgZGUgY3LDqWVyICclcyciCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cmFpdGVyICclcycgZXQgJyVzJyBlbiBtw6ptZSB0ZW1wcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGEgcsOpZsOpcmVuY2UgJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDggcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGEgcsOpZsOpcmVuY2UgJXPCoDogJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNTEgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGVzIHLDqWbDqXJlbmNlc8KgOiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAic3DDqWNpZmljYXRldXIgZGUgcsOpZmVyZW5jZSBpbnZhbGlkZcKgOiAnJXMnIgorCisjIMOgIHByaW9yaSBvbiBwYXJsZSBkJ3VuZSBicmFuY2hlIGljaQorIzogcmVmLWZpbHRlci5jOjQyIHd0LXN0YXR1cy5jOjE5MzgKK21zZ2lkICJnb25lIgorbXNnc3RyICJkaXNwYXJ1ZSIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICJlbiBhdmFuY2UgZGUgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgImVuIHJldGFyZCBkZSAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgImVuIGF2YW5jZSBkZSAlZCwgZW4gcmV0YXJkIGRlICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgImZvcm1hdCBhdHRlbmR1wqA6ICUlKGNvbG9yOjxjb3VsZXVyPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgImNvdWxldXIgbm9uIHJlY29ubnVlIDogJSUoY29sb3I6JXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiCittc2dzdHIgIlZhbGV1ciBlbnRpw6hyZSBhdHRlbmR1ZSByZWZuYW1lOmxzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIgorbXNnc3RyICJWYWxldXIgZW50acOocmUgYXR0ZW5kdWUgcmVmbmFtZTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50ICUlKCVzKSBub24gcmVjb25udcKgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkgbidhY2NlcHRlIHBhcyBkJ2FyZ3VtZW50IgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50ICUlKG9iamVjdHNpemUpIG5vbiByZWNvbm51IDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoZGVsdGFiYXNlKSBuJ2FjY2VwdGUgcGFzIGQnYXJndW1lbnQiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIG4nYWNjZXB0ZSBwYXMgZCdhcmd1bWVudCIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkgbidhY2NlcHRlIHBhcyBkJ2FyZ3VtZW50IgorCisjOiByZWYtZmlsdGVyLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gJSUodHJhaWxlcnMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnQgJSUodHJhaWxlcnMpIGluY29ubnXCoDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgInZhbGV1ciBwb3NpdGl2ZSBhdHRlbmR1ZSBjb250ZW50czpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnQgJSUoY29udGVudHMpIG5vbiByZWNvbm51IDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAidmFsZXVyIHBvc2l0aXZlIGF0dGVuZHVlIG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnQgJSUob2JqZWN0bmFtZSkgbm9uIHJlY29ubnUgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgImZvcm1hdCBhdHRlbmR1wqA6ICUlKGFsaWduOjxsYXJnZXVyPiw8cG9zaXRpb24+KSIKKworIzogcmVmLWZpbHRlci5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgInBvc2l0aW9uIG5vbiByZWNvbm51ZcKgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgImxhcmdldXIgbm9uIHJlY29ubnVlwqA6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudCAlJShhbGlnbikgbm9uIHJlY29ubnUgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAidmFsZXVyIHBvc2l0aXZlIGF0dGVuZHVlIGF2ZWMgbCdhdG9tZSAlJShhbGlnbikiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50ICUlKGlmKSBub24gcmVjb25udcKgOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAibm9tIGRlIGNoYW1wIG1hbGZvcm3DqSAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAibm9tIGRlIGNoYW1wIGluY29ubnUgOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICIiCisicGFzIHVuIGTDqXDDtHQgZ2l0LCBtYWlzIGxlIGNoYW1wICclLipzJyBuw6ljZXNzaXRlIGwnYWNjw6hzIGF1eCBkb25uw6llcyBkJ29iamV0IgorCisjOiByZWYtZmlsdGVyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoaWYpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0wqA6IGF0b21lICUlKGlmKSB1dGlsaXPDqSBzYW5zIHVuIGF0b21lICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdMKgOiBhdG9tZSAlJSh0aGVuKSB1dGlsaXPDqSBzYW5zIHVuIGF0b21lICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0wqA6IGF0b21lICUlKHRoZW4pIHV0aWxpc8OpIHBsdXMgZCd1bmUgZm9pcyIKKworIzogcmVmLWZpbHRlci5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZSAlJSh0aGVuKSB1dGlsaXPDqSBhcHLDqHMgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0wqA6IGF0b21lICUlKGVsc2UpIHV0aWxpc8OpIHNhbnMgdW4gYXRvbWUgJSUoaWYpIgorCisjOiByZWYtZmlsdGVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJmb3JtYXTCoDogYXRvbWUgJSUoZWxzZSkgdXRpbGlzw6kgc2FucyB1biBhdG9tZSAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0wqA6IGF0b21lICUlKGVsc2UpIHV0aWxpc8OpIHBsdXMgZCd1bmUgZm9pcyIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICJmb3JtYXTCoDogYXRvbWUgJSUoZW5kKSB1dGlsaXPDqSBzYW5zIGF0b21lIGNvcnJlc3BvbmRhbnQiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgIkNoYcOubmUgZGUgZm9ybWF0YWdlIG1hbCBmb3Jtw6llICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICJhdWN1bmUgYnJhbmNoZSwgcmViYXNhZ2UgZGUgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAiYXVjdW5lIGJyYW5jaGUsIHJlYmFzYWdlIGRlIGxhIEhFQUQgZMOpdGFjaMOpZSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAiYXVjdW5lIGJyYW5jaGUsIGJpc2VjdCBhIGTDqW1hcnLDqSBzdXIgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICJhdWN1bmUgYnJhbmNoZSIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJvYmpldCBtYW5xdWFudCAlcyBwb3VyICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgIsOpY2hlYyBkZSBwYXJzZV9vYmplY3RfYnVmZmVyIHN1ciAlcyBwb3VyICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIm9iamV0IG1hbGZvcm3DqSDDoCAnJXMnIgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAicsOpZiBhdmVjIHVuIG5vbSBjYXNzw6kgJXMgaWdub3LDqSIKKworIzogcmVmLWZpbHRlci5jOjIzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZSAlJShlbmQpIG1hbnF1YW50IgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAibCdvcHRpb24gwqvCoCVzwqDCuyBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1tZXJnZWQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICJsJ29wdGlvbiDCq8KgJXPCoMK7IGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLW5vLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJub20gZCdvYmpldCBtYWxmb3Jtw6kgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIG11c3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgImwnb3B0aW9uICclcycgZG9pdCBwb2ludGVyIHN1ciB1biBjb21taXQiCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisidW4gcmFjY291cmNpIGRlIGNvbmZpZ3VyYXRpb24gZGUgZGlzdGFudCBuZSBwZXV0IHBhcyBjb21tZW5jZXIgcGFyICcvJ8KgOiAlcyIKKworIzogcmVtb3RlLmM6NDEzCittc2dpZCAibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICJwbHVzIGQndW4gcmVjZWl2ZXBhY2sgZm91cm5pcywgdXRpbGlzYXRpb24gZHUgcHJlbWllciIKKworIzogcmVtb3RlLmM6NDIxCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgInBsdXMgZCd1biB1cGxvYWRwYWNrIGZvdXJuaXMsIHV0aWxpc2F0aW9uIGR1IHByZW1pZXIiCisKKyM6IHJlbW90ZS5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgw6AgbGEgZm9pcyAlcyBldCAlcyBwb3VyICVzIgorCisjOiByZW1vdGUuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgc3VpdCBoYWJpdHVlbGxlbWVudCAlcywgcGFzICVzIgorCisjOiByZW1vdGUuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyBzdWl0IMOgIGxhIGZvaXMgJXMgZXQgJXMiCisKKyM6IHJlbW90ZS5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgImxhIGNsw6kgJyVzJyBkdSBtb2TDqGxlIG4nYSBwYXMgZGUgJyonIgorCisjOiByZW1vdGUuYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsdWUgJyVzJyBvZiBwYXR0ZXJuIGhhcyBubyAnKiciCittc2dzdHIgImxhIHZhbGV1ciAnJXMnIGR1IG1vZMOobGUgbidhIHBhcyBkZSAnKiciCisKKyM6IHJlbW90ZS5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICIiCisibGUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2Ugc291cmNlICVzIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW5lIHLDqWbDqXJlbmNlIgorCisjOiByZW1vdGUuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiIgorImxlIHNww6ljaWZpY2F0ZXVyIGRlIHLDqWbDqXJlbmNlIHNvdXJjZSAlcyBjb3JyZXNwb25kIMOgIHBsdXMgZCd1bmUgcsOpZsOpcmVuY2UiCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIy4KKyM6IHJlbW90ZS5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKyJMYSBkZXN0aW5hdGlvbiBxdWUgdm91cyBhdmV6IGZvdXJuaWUgbidlc3QgcGFzIHVuIG5vbSBkZSByw6lmw6lyZW5jZSBjb21wbMOodGVcbiIKKyIoYydlc3Qtw6AtZGlyZSBjb21tZW7Dp2FudCBwYXIgXCJyZWYvXCIpLiBFc3NhaSBkJ2FwcHJveGltYXRpb24gcGFywqA6XG4iCisiXG4iCisiLSBSZWNoZXJjaGUgZCd1bmUgcsOpZsOpcmVuY2UgcXVpIGNvcnJlc3BvbmQgw6AgJyVzJyBzdXIgbGUgc2VydmV1ciBkaXN0YW50LlxuIgorIi0gVsOpcmlmaWNhdGlvbiBzaSBsYSA8c291cmNlPiBlbiBjb3VycyBkZSBwb3Vzc8OpZSAoJyVzJylcbiIKKyIgIGVzdCB1bmUgcsOpZsOpcmVuY2UgZGFucyBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBTaSBvdWksIGFqb3V0IGR1IHByw6lmaXhlXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gY29ycmVzcG9uZGFudCBkdSBjw7R0w6kgZGlzdGFudC5cbiIKKyJcbiIKKyJBdWN1bmUgbidhIGZvbmN0aW9ubsOpLCBkb25jIGFiYW5kb24uIFZldWlsbGV6IHNww6ljaWZpZXIgdW5lIHLDqWbDqXJlbmNlICIKKyJ0b3RhbGVtZW50IHF1YWxpZmnDqWUuIgorCisjOiByZW1vdGUuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKyJsYSBwYXJ0aWUgPHNvdXJjZT4gZHUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UgZXN0IHVuIG9iamV0IGNvbW1pdC5cbiIKKyJTb3VoYWl0aWV6LXZvdXMgY3LDqWVyIHVuZSBub3V2ZWxsZSBicmFuY2hlIGVuIHBvdXNzYW50IHN1clxuIgorIiclczpyZWZzL2hlYWRzLyVzJ8KgPyIKKworIzogcmVtb3RlLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJsYSBwYXJ0aWUgPHNvdXJjZT4gZHUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UgZXN0IHVuIG9iamV0IMOpdGlxdWV0dGUuXG4iCisiU291aGFpdGllei12b3VzIGNyw6llciB1bmUgbm91dmVsbGUgw6l0aXF1ZXR0ZSBlbiBwb3Vzc2FudCBzdXJcbiIKKyInJXM6cmVmcy90YWdzLyVzJ8KgPyIKKworIzogcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorImxhIHBhcnRpZSA8c291cmNlPiBkdSBzcMOpY2lmaWNhdGV1ciBkZSByw6lmw6lyZW5jZSBlc3QgdW4gb2JqZXQgYXJicmUuXG4iCisiU291aGFpdGllei12b3VzIGNyw6llciB1biBub3V2ZWwgYXJicmUgZW4gcG91c3NhbnQgc3VyXG4iCisiJyVzOnJlZnMvdGFncy8lcyfCoD8iCisKKyM6IHJlbW90ZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJsYSBwYXJ0aWUgPHNvdXJjZT4gZHUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UgZXN0IHVuIG9iamV0IGJsb2IuXG4iCisiU291aGFpdGllei12b3VzIGNyw6llciB1biBub3V2ZWF1IGJsb2IgZW4gcG91c3NhbnQgc3VyXG4iCisiJyVzOnJlZnMvdGFncy8lcyfCoD8iCisKKyM6IHJlbW90ZS5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAiJyVzJyBuZSBwZXV0IHBhcyDDqnRyZSByw6lzb2x1ZSBjb21tZSB1bmUgYnJhbmNoZSIKKworIzogcmVtb3RlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgInN1cHByZXNzaW9uIGQgJyVzJyBpbXBvc3NpYmxlwqA6IGxhIHLDqWbDqXJlbmNlIGRpc3RhbnRlIG4nZXhpc3RlIHBhcyIKKworIzogcmVtb3RlLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIiIKKyJsZSBzcMOpY2lmaWNhdGV1ciBkZSByw6lmw6lyZW5jZSBkc3QgJXMgY29ycmVzcG9uZCDDoCBwbHVzIGQndW4gc3DDqWNpZmljYXRldXIgZGUgIgorInLDqWbDqXJlbmNlcyIKKworIzogcmVtb3RlLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgImxlIHNww6ljaWZpY2F0ZXVyIGRlIHLDqWbDqXJlbmNlIGRzdCAlcyByZcOnb2l0IGRlcHVpcyBwbHVzIGQndW5lIHNvdXJjZSIKKworIzogcmVtb3RlLmM6MTYyNyByZW1vdGUuYzoxNzI4Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBuZSBwb2ludGUgcGFzIHN1ciB1bmUgYnJhbmNoZSIKKworIzogcmVtb3RlLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAicGFzIGRlIGJyYW5jaGUgJyVzJyIKKworIzogcmVtb3RlLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiYXVjdW5lIGJyYW5jaGUgYW1vbnQgY29uZmlndXLDqWUgcG91ciBsYSBicmFuY2hlICclcyciCisKKyM6IHJlbW90ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImxhIGJyYW5jaGUgYW1vbnQgJyVzJyBuJ2VzdCBwYXMgc3RvY2vDqWUgY29tbWUgYnJhbmNoZSBkZSBzdWl2aSIKKworIzogcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorImxhIGRlc3RpbmF0aW9uIGRlIHBvdXNzw6llICclcycgc3VyIGxlIHNlcnZldXIgZGlzdGFudCAnJXMnIG4nYSBwYXMgZGUgIgorImJyYW5jaGUgbG9jYWxlIGRlIHN1aXZpIgorCisjOiByZW1vdGUuYzoxNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgImxhIGJyYW5jaGUgJyVzJyBuJ2EgYXVjdW5lIGJyYW5jaGUgZGlzdGFudGUgZGUgcG91c3PDqWUiCisKKyM6IHJlbW90ZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICJsZXMgcsOpZsOpcmVuY2VzIGRlIHNwZWMgcG91ciAnJXMnIG4naW5jbHVlbnQgcGFzICclcyciCisKKyM6IHJlbW90ZS5jOjE2OTUKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgImxhIHBvdXNzw6llIG4nYSBwYXMgZGUgZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCB2YXV0ICdub3RoaW5nJykiCisKKyM6IHJlbW90ZS5jOjE3MTcKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgdW5lIHBvdXNzw6llICdzaW1wbGUnIHBvdXIgdW5lIGRlc3RpbmF0aW9uIHVuaXF1ZSIKKworIzogcmVtb3RlLmM6MTg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciBsYSByw6lmw6lyZW5jZSBkaXN0YW50ZSAlcyIKKworIzogcmVtb3RlLmM6MTg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogUsOpZsOpcmVuY2UgYml6YXJyZSAnJXMnIGlnbm9yw6llIGxvY2FsZW1lbnQiCisKKyM6IHJlbW90ZS5jOjIwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJWb3RyZSBicmFuY2hlIGVzdCBiYXPDqWUgc3VyICclcycsIG1haXMgbGEgYnJhbmNoZSBhbW9udCBhIGRpc3BhcnUuXG4iCisKKyM6IHJlbW90ZS5jOjIwMjMKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBwb3VyIGNvcnJpZ2VyKVxuIgorCisjOiByZW1vdGUuYzoyMDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICJWb3RyZSBicmFuY2hlIGVzdCDDoCBqb3VyIGF2ZWMgJyVzJy5cbiIKKworIzogcmVtb3RlLmM6MjAzMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAiVm90cmUgYnJhbmNoZSBldCAnJXMnIGZvbnQgcsOpZsOpcmVuY2Ugw6AgZGVzIGNvbW1pdHMgZGlmZsOpcmVudHMuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICAodXRpbGlzZXogXCIlc1wiIHBvdXIgcGx1cyBkZSBkw6l0YWlscylcbiIKKworIzogcmVtb3RlLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJWb3RyZSBicmFuY2hlIGVzdCBlbiBhdmFuY2Ugc3VyICclcycgZGUgJWQgY29tbWl0LlxuIgorbXNnc3RyWzFdICJWb3RyZSBicmFuY2hlIGVzdCBlbiBhdmFuY2Ugc3VyICclcycgZGUgJWQgY29tbWl0cy5cbiIKKworIzogcmVtb3RlLmM6MjA0MworbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHB1c2hcIiBwb3VyIHB1YmxpZXIgdm9zIGNvbW1pdHMgbG9jYXV4KVxuIgorCisjOiByZW1vdGUuYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJWb3RyZSBicmFuY2hlIGVzdCBlbiByZXRhcmQgc3VyICclcycgZGUgJWQgY29tbWl0LCBldCBwZXV0IMOqdHJlIG1pc2Ugw6Agam91ciAiCisiZW4gYXZhbmNlIHJhcGlkZS5cbiIKK21zZ3N0clsxXSAiIgorIlZvdHJlIGJyYW5jaGUgZXN0IGVuIHJldGFyZCBzdXIgJyVzJyBkZSAlZCBjb21taXRzLCBldCBwZXV0IMOqdHJlIG1pc2Ugw6Agam91ciAiCisiZW4gYXZhbmNlIHJhcGlkZS5cbiIKKworIzogcmVtb3RlLmM6MjA1NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBwdWxsXCIgcG91ciBtZXR0cmUgw6Agam91ciB2b3RyZSBicmFuY2hlIGxvY2FsZSlcbiIKKworIzogcmVtb3RlLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyJWb3RyZSBicmFuY2hlIGV0ICclcycgb250IGRpdmVyZ8OpLFxuIgorImV0IG9udCAlZCBldCAlZCBjb21taXQgZGlmZsOpcmVudCBjaGFjdW5lIHJlc3BlY3RpdmVtZW50LlxuIgorbXNnc3RyWzFdICIiCisiVm90cmUgYnJhbmNoZSBldCAnJXMnIG9udCBkaXZlcmfDqSxcbiIKKyJldCBvbnQgJWQgZXQgJWQgY29tbWl0cyBkaWZmw6lyZW50cyBjaGFjdW5lIHJlc3BlY3RpdmVtZW50LlxuIgorCisjOiByZW1vdGUuYzoyMDY3Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgcHVsbFwiIHBvdXIgZnVzaW9ubmVyIGxhIGJyYW5jaGUgZGlzdGFudGUgZGFucyBsYSB2w7R0cmUpXG4iCisKKyM6IHJlbW90ZS5jOjIyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBub20gYXR0ZW5kdSBkJ29iamV0ICclcyciCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICJtYXV2YWlzZSByw6lmw6lyZW5jZXMgZGUgcmVtcGxhY2VtZW50IDogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAicsOpZsOpcmVuY2UgZGUgcmVtcGxhY2VtZW50IGR1cGxpcXXDqWXCoDogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSBkZXB0aCB0b28gaGlnaCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICJwcm9mb25kZXVyIGRlIHJlbXBsYWNlbWVudCB0cm9wIGdyYW5kZSBwb3VyIGwnb2JqZXQgJXMiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAiTUVSR0VfUlIgY29ycm9tcHUiCisKKyM6IHJlcmVyZS5jOjI2NCByZXJlcmUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVyZXJlIHJlY29yZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbCdlbnJlZ2lzdHJlbWVudCByZXJlcmUiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAiaWwgeSBhIGV1IGRlcyBlcnJldXJzIMOgIGwnw6ljcml0dXJlIGRlICclcycgKCVzKSIKKworIzogcmVyZXJlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmbHVzaCAnJXMnIgorbXNnc3RyICLDqWNoZWMgZHUgZmx1c2ggZGUgJyVzJyIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsYSBzZWN0aW9uIGVuIGNvbmZsaXQgZGFucyAnJXMnIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIHV0aW1lKCkgc3VyICclcyciCisKKyM6IHJlcmVyZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWNyaXR1cmUgZGUgJyVzJyIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICInJXMnIGluZGV4w6kgZW4gdXRpbGlzYW50IGxhIHLDqXNvbHV0aW9uIHByw6ktZXhpc3RhbnRlLiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICJSw6lzb2x1dGlvbiBlbnJlZ2lzdHLDqWUgcG91ciAnJXMnLiIKKworIzogcmVyZXJlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiclcycgcsOpc29sdSBlbiB1dGlsaXNhbnQgbGEgcsOpc29sdXRpb24gcHLDqS1leGlzdGFudGUuIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqWxpZXIgJyVzJyBxdWkgZXN0IGVycmFudCIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJQcsOpLWltYWdlIGVucmVnaXN0csOpZSBwb3VyICclcyciCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDY3IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgcsOpcGVydG9pcmUgJyVzJyIKKworIzogcmVyZXJlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIG1pc2Ugw6Agam91ciBkZSBsJ8OpdGF0IGVuIGNvbmZsaXQgZGFucyAnJXMnIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICJBdWN1bmUgcsOpc29sdXRpb24gZW5yZWdpc3Ryw6llIHBvdXIgJyVzJyIKKworIzogcmVyZXJlLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpbGllciAnJXMnIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlByw6ktaW1hZ2UgbWlzZSDDoCBqb3VyIHBvdXIgJyVzJyIKKworIzogcmVyZXJlLmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb3Jnb3QgcmVzb2x1dGlvbiBmb3IgJyVzJ1xuIgorbXNnc3RyICJSw6lzb2x1dGlvbiAgcG91ciAnJXMnIG91Ymxpw6llXG4iCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgcsOpcGVydG9pcmUgcnItY2FjaGUiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgInZvdHJlIGJyYW5jaGUgYWN0dWVsbGUgc2VtYmxlIGNhc3PDqWUiCisKKyM6IHJldmlzaW9uLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgInZvdHJlIGJyYW5jaGUgYWN0dWVsbGUgJyVzJyBuZSBjb250aWVudCBlbmNvcmUgYXVjdW4gY29tbWl0IgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgZXN0IGluY29tcGF0aWJsZSBhdmVjIC0tYmlzZWN0IgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIi1MIG5lIHN1cHBvcnRlIHBhcyBlbmNvcmUgbGVzIGZvcm1hdHMgZGUgZGlmZiBhdXRyZXMgcXVlIC1wIGV0IC1zIgorCisjOiBydW4tY29tbWFuZC5jOjc2MgorbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnb3V2ZXJ0dXJlIGRlIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gZmlsIGFzeW5jaHJvbmUgOiAlcyIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisiTGUgY3JvY2hldCAnJXMnIGEgw6l0w6kgaWdub3LDqSBwYXJjZSBxdSdpbCBuJ2VzdCBwYXMgbWFycXXDqSBjb21tZSBleMOpY3V0YWJsZS5cbiIKKyJWb3VzIHBvdXZleiBkw6lzYWN0aXZlciBjZXQgYXZlcnRpc3NlbWVudCBhdmVjIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayAiCisiZmFsc2VgLiIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiIgorInBhcXVldCBkZSBuZXR0b3lhZ2UgaW5hdHRlbmR1IHBlbmRhbnQgbGEgbGVjdHVyZSBkZSBsJ8OpdGF0IGRlIGTDqXBhcXVldGFnZSAiCisiZGlzdGFudCIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ8OpdGF0IGRlIGTDqXBhcXVldGFnZSBkaXN0YW50wqA6ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICJsZSBkw6lwYXF1ZXRhZ2UgYSDDqWNob3XDqcKgOiAlcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgImltcG9zc2libGUgZGUgc2lnbmVyIGxlIGNlcnRpZmljYXQgZGUgcG91c3PDqWUiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyBwb3Vzc8OpZXMgYXZlYyAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDI1Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisicGFzIGQnZW52b2kgZGUgY2VydGlmaWNhdCBkZSBwb3Vzc8OpZSBjYXIgbGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyAiCisicG91c3PDqWVzIGF2ZWMgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyBwb3Vzc8OpZXMgYXZlYyAtLWF0b21pYyIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgIkxlIHJlY2V2ZXVyIG5lIGfDqHJlIHBhcyBsZXMgb3B0aW9ucyBkZSBwb3Vzc8OpZXMiCisKKyM6IHNlcXVlbmNlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICJtb2RlIGRlIG5ldHRveWFnZSBpbnZhbGlkZSBkZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzEzIGJ1aWx0aW4vcmViYXNlLmM6NzgxIGJ1aWx0aW4vcmViYXNlLmM6MTcwNiBidWlsdGluL3JtLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzIzCittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJyZXZlcnQiCisKKyM6IHNlcXVlbmNlci5jOjMyNQorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJjaGVycnktcGljayIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICJyZWJhc2UgLWkiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgImFjdGlvbiBpbmNvbm51ZcKgOiAlZCIKKworIzogc2VxdWVuY2VyLmM6Mzg3Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJhcHLDqHMgcsOpc29sdXRpb24gZGVzIGNvbmZsaXRzLCBtYXJxdWV6IGxlcyBjaGVtaW5zIGNvcnJpZ8Opc1xuIgorImF2ZWMgJ2dpdCBhZGQgPGNoZW1pbnM+JyBvdSAnZ2l0IHJtIDxjaGVtaW5zPiciCisKKyM6IHNlcXVlbmNlci5jOjM5MAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisiYXByw6hzIHLDqXNvbHV0aW9uIGRlcyBjb25mbGl0cywgbWFycXVleiBsZXMgY2hlbWlucyBjb3JyaWfDqXNcbiIKKyJhdmVjICdnaXQgYWRkIDxjaGVtaW5zPicgb3UgJ2dpdCBybSA8Y2hlbWlucz4nXG4iCisicHVpcyB2YWxpZGV6IGxlIHLDqXN1bHRhdCBhdmVjICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6NDAzIHNlcXVlbmNlci5jOjI5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB2ZXJyb3VpbGxlciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsYSBmaW4gZGUgbGlnbmUgZGFucyAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTUgc2VxdWVuY2VyLmM6Mjc5OCBzZXF1ZW5jZXIuYzoyOTk5IHNlcXVlbmNlci5jOjMwMTMKKyM6IHNlcXVlbmNlci5jOjMyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgIsOpY2hlYyBsb3JzIGRlIGxhIGZpbmFsaXNhdGlvbiBkZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzggc2VxdWVuY2VyLmM6MTcwNyBzZXF1ZW5jZXIuYzoyODE4IHNlcXVlbmNlci5jOjMyNTkKKyM6IHNlcXVlbmNlci5jOjMzNjggYnVpbHRpbi9hbS5jOjI0NCBidWlsdGluL2NvbW1pdC5jOjc4MyBidWlsdGluL21lcmdlLmM6MTExNworIzogYnVpbHRpbi9yZWJhc2UuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJ2b3MgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIHNlcmFpZW50IMOpY3Jhc8OpZXMgcGFyICVzLiIKKworIzogc2VxdWVuY2VyLmM6NDY4Cittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICJ2YWxpZGV6IHZvcyBtb2RpZmljYXRpb25zIG91IGxlcyByZW1pc2VyIHBvdXIgY29udGludWVyLiIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzwqA6IGF2YW5jZSByYXBpZGUiCisKKyM6IHNlcXVlbmNlci5jOjUzOSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiTW9kZSBkZSBuZXR0b3lhZ2UgaW52YWxpZGUgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IEltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBpbmRleCIKKworIzogc2VxdWVuY2VyLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGwnYXJicmUgZGUgY2FjaGUiCisKKyM6IHNlcXVlbmNlci5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsZSBjb21taXQgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAiYXVjdW5lIGNsw6kgcHLDqXNlbnRlIGRhbnMgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6ljb3RlciBsYSB2YWxldXIgZGUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NzkyIHdyYXBwZXIuYzoxOTAgd3JhcHBlci5jOjM2MCBidWlsdGluL2FtLmM6NzA1CisjOiBidWlsdGluL2FtLmM6Nzk3IGJ1aWx0aW4vbWVyZ2UuYzoxMTE0IGJ1aWx0aW4vcmViYXNlLmM6MTA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICclcycgZW4gbGVjdHVyZSIKKworIzogc2VxdWVuY2VyLmM6ODAyCittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfTkFNRScgZMOpasOgIGZvdXJuaSIKKworIzogc2VxdWVuY2VyLmM6ODA3Cittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIidHSVRfQVVUSE9SX0VNQUlMJyBkw6lqw6AgZm91cm5pIgorCisjOiBzZXF1ZW5jZXIuYzo4MTIKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICInR0lUX0FVVEhPUl9EQVRFJyBkw6lqw6AgZm91cm5pIgorCisjOiBzZXF1ZW5jZXIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICJ2YXJpYWJsZSBpbmNvbm51ZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo4MjEKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX05BTUUnIgorbXNnc3RyICInR0lUX0FVVEhPUl9OQU1FJyBtYW5xdWFudCIKKworIzogc2VxdWVuY2VyLmM6ODIzCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIidHSVRfQVVUSE9SX0VNQUlMJyBtYW5xdWFudCIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfREFURScgbWFucXVhbnQiCisKKyM6IHNlcXVlbmNlci5jOjkwMiBzZXF1ZW5jZXIuYzoxNDI3Cittc2dpZCAibWFsZm9ybWVkIGlkZW50IGxpbmUiCittc2dzdHIgImxpZ25lIGQnaWRlbnRpZmljYXRpb24gbWFsZm9ybcOpZSIKKworIzogc2VxdWVuY2VyLmM6OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogZGVzIG1vZGlmaWNhdGlvbnMgaW5kZXjDqWVzIGRhbnMgdm90cmUgY29waWUgZGUgdHJhdmFpbC5cbiIKKyJTaSBlbGxlcyBkZXZhaWVudCDDqnRyZSBham91dMOpZXMgZGFucyBsZSBjb21taXQgcHLDqWPDqWRlbnQsIGxhbmNlesKgOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiU2kgZWxsZXMgZGV2YWllbnQgYWxsZXIgZGFucyB1biBub3V2ZWF1IGNvbW1pdCwgbGFuY2V6wqA6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiRGFucyBsZXMgZGV1eCBjYXMsIHVuZSBmb2lzIGZpbmksIGNvbnRpbnVleiBhdmVjwqA6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MTIxOAorbXNnaWQgIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZHUgY3JvY2hldCAncHJlcGFyZS1jb21taXQtbXNnJyIKKworIzogc2VxdWVuY2VyLmM6MTIyNAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIlZvdHJlIG5vbSBldCB2b3RyZSBhZHJlc3NlIGNvdXJyaWVsIG9udCDDqXTDqSBjb25maWd1csOpcyBhdXRvbWF0aXF1ZW1lbnQgZW4gIgorInNlXG4iCisiZm9uZGFudCBzdXIgdm90cmUgbm9tIGQndXRpbGlzYXRldXIgZXQgbGUgbm9tIGRlIHZvdHJlIG1hY2hpbmUuIFZldWlsbGV6IFxuIgorInbDqXJpZmllciBxdSdpbHMgc29udCBjb3JyZWN0cy4gVm91cyBwb3V2ZXogc3VwcHJpbWVyIGNlIG1lc3NhZ2UgZW4gbGVzIFxuIgorInBhcmFtw6l0cmFudCBleHBsaWNpdGVtZW50LiBMYW5jZXogbGVzIGNvbW1hbmRlcyBzdWl2YW50ZXMgZXQgc3VpdmV6IGxlc1xuIgorImluc3RydWN0aW9ucyBkYW5zIHZvdHJlIMOpZGl0ZXVyIHBvdXIgw6lkaXRlciB2b3RyZSBmaWNoaWVyIGRlICIKKyJjb25maWd1cmF0aW9uwqA6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQXByw6hzIGNlY2ksIHZvdXMgcG91dmV6IGNvcnJpZ2VyIGwnaWRlbnRpdMOpIHV0aWxpc8OpZSBwb3VyIGNldHRlIHZhbGlkYXRpb24gIgorImF2ZWMgOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIzNworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIlZvdHJlIG5vbSBldCB2b3RyZSBhZHJlc3NlIGNvdXJyaWVsIG9udCDDqXTDqSBjb25maWd1csOpcyBhdXRvbWF0aXF1ZW1lbnQgZW4gc2UgIgorImZvbmRhbnRcbiIKKyJzdXIgdm90cmUgbm9tIGQndXRpbGlzYXRldXIgZXQgbGUgbm9tIGRlIHZvdHJlIG1hY2hpbmUuIFZldWlsbGV6IHbDqXJpZmllciAiCisicXUnaWxzIHNvbnQgY29ycmVjdHMuXG4iCisiVm91cyBwb3V2ZXogc3VwcHJpbWVyIGNlIG1lc3NhZ2UgZW4gbGVzIHBhcmFtw6l0cmFudCBleHBsaWNpdGVtZW50IDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJWb3RyZSBOb21cIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgdm91c0BleGVtcGxlLmNvbVxuIgorIlxuIgorIkFwcsOocyBjZWNpLCB2b3VzIHBvdXZleiBjb3JyaWdlciBsJ2lkZW50aXTDqSB1dGlsaXPDqWUgcG91ciBjZSBjb21taXQgYXZlYyA6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjc5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZXRyb3V2ZXIgbGUgY29tbWl0IG5vdXZlbGxlbWVudCBjcsOpw6kiCisKKyM6IHNlcXVlbmNlci5jOjEyODEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgbm91dmVsbGVtZW50IGNyw6nDqSIKKworIzogc2VxdWVuY2VyLmM6MTMyNworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBIRUFEIGFwcsOocyBjcsOpYXRpb24gZHUgY29tbWl0IgorCisjOiBzZXF1ZW5jZXIuYzoxMzI5Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSEVBRCBkw6l0YWNow6llIgorCisjOiBzZXF1ZW5jZXIuYzoxMzMzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoY29tbWl0IHJhY2luZSkiCisKKyM6IHNlcXVlbmNlci5jOjEzNTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJIRUFEICVzIG4nZXN0IHBhcyB1biBjb21taXQgISIKKworIzogc2VxdWVuY2VyLmM6MTM2MCBzZXF1ZW5jZXIuYzoxNDU4IGJ1aWx0aW4vY29tbWl0LmM6MTU2OQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIGNvbW1pdCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNDExIHNlcXVlbmNlci5jOjIwNTUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGwnYXV0ZXVyIGR1IGNvbW1pdCIKKworIzogc2VxdWVuY2VyLmM6MTQzMQorbXNnaWQgImNvcnJ1cHRlZCBhdXRob3Igd2l0aG91dCBkYXRlIGluZm9ybWF0aW9uIgorbXNnc3RyICJsaWduZSBhdXRob3IgY29ycm9tcHVlIHNhbnMgaW5mb3JtYXRpb24gZGUgZGF0ZSIKKworIzogc2VxdWVuY2VyLmM6MTQ0NyBidWlsdGluL2FtLmM6MTU2MSBidWlsdGluL21lcmdlLmM6Njg0Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgYSDDqWNob3XDqSDDoCDDqWNyaXJlIHVuIGFyYnJlIgorCisjOiBzZXF1ZW5jZXIuYzoxNDgwIHNlcXVlbmNlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIGRlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjE1MTYgYnVpbHRpbi9hbS5jOjE1ODMgYnVpbHRpbi9jb21taXQuYzoxNjY4IGJ1aWx0aW4vbWVyZ2UuYzo4ODMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MDgKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnw6ljcml0dXJlIGRlIGwnb2JqZXQgY29tbWl0IgorCisjOiBzZXF1ZW5jZXIuYzoxNTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgcGFyZW50ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjU2IHNlcXVlbmNlci5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAiY29tbWFuZGUgaW5jb25udWXCoDogJWQiCisKKyM6IHNlcXVlbmNlci5jOjE3MTQgc2VxdWVuY2VyLmM6MTczOQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIkNlY2kgZXN0IGxhIGNvbWJpbmFpc29uIGRlICVkIGNvbW1pdHMuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI0Cittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgInVuZSBIRUFEIGVzdCBuw6ljZXNzYWlyZSDDoCBsYSBjb3JyZWN0aW9uIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI2IHNlcXVlbmNlci5jOjMzMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTcyOAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBkZSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNzQxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTYKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICJDZWNpIGVzdCBsZSBwcmVtaWVyIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbsKgOiIKKworIzogc2VxdWVuY2VyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBkZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJWQ6IgorbXNnc3RyICJDZWNpIGVzdCBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gbnVtw6lybyAlZMKgOiIKKworIzogc2VxdWVuY2VyLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyVkIHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIkxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiAlZCBzZXJhIGlnbm9yw6nCoDoiCisKKyM6IHNlcXVlbmNlci5jOjE4NTAKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJ2b3RyZSBmaWNoaWVyIGQnaW5kZXggbidlc3QgcGFzIGZ1c2lvbm7DqS4iCisKKyM6IHNlcXVlbmNlci5jOjE4NTcKK21zZ2lkICJjYW5ub3QgZml4dXAgcm9vdCBjb21taXQiCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpcGFyZXIgbGUgY29tbWl0IHJhY2luZSIKKworIzogc2VxdWVuY2VyLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgImxlIGNvbW1pdCAlcyBlc3QgdW5lIGZ1c2lvbiBtYWlzIGwnb3B0aW9uIC1tIG4nYSBwYXMgw6l0w6kgc3DDqWNpZmnDqWUuIgorCisjOiBzZXF1ZW5jZXIuYzoxODg0IHNlcXVlbmNlci5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICJsZSBjb21taXQgJXMgbidhIHBhcyBkZSBwYXJlbnQgJWQiCisKKyM6IHNlcXVlbmNlci5jOjE4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvYnRlbmlyIHVuIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBwb3VyICVzIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTkxNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzIDogaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIGNvbW1pdCBwYXJlbnQgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgcmVub21tZXIgJyVzJyBlbiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbm51bGVyICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FwcGxpcXVlciAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzIDogw6ljaGVjIMOgIGxhIGxlY3R1cmUgZGUgbCdpbmRleCIKKworIzogc2VxdWVuY2VyLmM6MjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzIDogw6ljaGVjIGR1IHJhZnJhw65jaGlzc2VtZW50IGRlIGwnaW5kZXgiCisKKyM6IHNlcXVlbmNlci5jOjIxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiJXMgbidhY2NlcHRlIHBhcyBkJ2FyZ3VtZW50wqA6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICJhcmd1bWVudCBtYW5xdWFudCBwb3VyICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjIyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJsaWduZSAlZCBpbnZhbGlkZcKgOiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzoyMzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAnJXMnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIiclcycgaW1wb3NzaWJsZSBhdmVjIGxlIGNvbW1pdCBwcsOpY8OpZGVudCIKKworIzogc2VxdWVuY2VyLmM6MjM0OCBidWlsdGluL3JlYmFzZS5jOjE3MiBidWlsdGluL3JlYmFzZS5jOjE5NworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjMgYnVpbHRpbi9yZWJhc2UuYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAnJXMnLiIKKworIzogc2VxdWVuY2VyLmM6MjM4NAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiYW5udWxhdGlvbiBkJ3VuIHBpY29yYWdlIGVuIGNvdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyMzkxCittc2dpZCAiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiYW5udWxhdGlvbiBkJ3VuIHJldG91ciBlbiBjb3VycyIKKworIzogc2VxdWVuY2VyLmM6MjQzNQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJ2ZXVpbGxleiBjb3JyaWdlciBjZWNpIGVuIHV0aWxpc2FudCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICJmZXVpbGxlIGQnaW5zdHJ1Y3Rpb24gaW51dGlsaXNhYmxlwqA6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI0NDIKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgImF1Y3VuIGNvbW1pdCBhbmFseXPDqS4iCisKKyM6IHNlcXVlbmNlci5jOjI0NTMKK21zZ2lkICJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBwaWNvcmVyIHBlbmRhbnQgbCdhbm51bGF0aW9uIGQndW4gY29tbWl0LiIKKworIzogc2VxdWVuY2VyLmM6MjQ1NQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5udWxlciB1biBjb21taXQgcGVuZGFudCB1biBwaWNvcmFnZS4iCisKKyM6IHNlcXVlbmNlci5jOjI1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJ2YWxldXIgaW52YWxpZGUgcG91ciAlc8KgOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjYzMAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICJcIsOpY3Jhc2Utc3VyXCIgaW51dGlsaXNhYmxlIgorCisjOiBzZXF1ZW5jZXIuYzoyNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAnJXMnIgorbXNnc3RyICJmZXVpbGxlIGQnb3B0aW9ucyBtYWxmb3Jtw6llwqA6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNzM2IHNlcXVlbmNlci5jOjQ0NjMKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAibCdlbnNlbWJsZSBkZSBjb21taXRzIHNww6ljaWZpw6kgZXN0IHZpZGUiCisKKyM6IHNlcXVlbmNlci5jOjI3NTIKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAidW4gcmV0b3VyIGVzdCBkw6lqw6AgZW4gY291cnMiCisKKyM6IHNlcXVlbmNlci5jOjI3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiZXNzYXlleiBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI3NTcKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJ1biBwaWNvcmFnZSBlc3QgZMOpasOgIGVuIGNvdXJzIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU5CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiZXNzYXlleiBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgcsOpcGVydG9pcmUgZGUgc8OpcXVlbmNldXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjc4OAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgImltcG9zc2libGUgZGUgdmVycm91aWxsZXIgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjg0OCBzZXF1ZW5jZXIuYzo0MjA5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJhdWN1biBwaWNvcmFnZSBvdSByZXRvdXIgZW4gY291cnMiCisKKyM6IHNlcXVlbmNlci5jOjI4NTAgc2VxdWVuY2VyLmM6Mjg2MQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpc291ZHJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI4NTIgc2VxdWVuY2VyLmM6Mjg5NgorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWJhbmRvbm5lciBkZXB1aXMgdW5lIGJyYW5jaGUgbm9uIGVuY29yZSBjcsOpw6llIgorCisjOiBzZXF1ZW5jZXIuYzoyODgyIGJ1aWx0aW4vZ3JlcC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAnJXMnwqA6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyODg1Cittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiZmluIGRlIGZpY2hpZXIgaW5hdHRlbmR1ZSIKKworIzogc2VxdWVuY2VyLmM6Mjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgImxlIGZpY2hpZXIgSEVBRCBkZSBwcsOpcGFyYXRpb24gZGUgcGljb3JhZ2UgJyVzJyBlc3QgY29ycm9tcHUiCisKKyM6IHNlcXVlbmNlci5jOjI5MDIKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIiIKKyJWb3VzIHNlbWJsZXogYXZvaXIgZMOpcGxhY8OpIGxhIEhFQUQuIFBhcyBkZSByZW1ib2JpbmFnZSwgdsOpcmlmaWV6IHZvdHJlIEhFQUTCoCEiCisKKyM6IHNlcXVlbmNlci5jOjI5NDMKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIlBhcyBkZSByZXRvdXIgZW4gY291cnMgPyIKKworIzogc2VxdWVuY2VyLmM6Mjk1MQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICJhdWN1biBwaWNvcmFnZSBlbiBjb3VycyIKKworIzogc2VxdWVuY2VyLmM6Mjk2MQorbXNnaWQgImZhaWxlZCB0byBza2lwIHRoZSBjb21taXQiCittc2dzdHIgIsOpY2hlYyBkdSBzYXV0IGRlIGNvbW1pdCIKKworIzogc2VxdWVuY2VyLmM6Mjk2OAorbXNnaWQgInRoZXJlIGlzIG5vdGhpbmcgdG8gc2tpcCIKK21zZ3N0ciAiaWwgbid5IGEgcmllbiDDoCBzYXV0ZXIiCisKKyM6IHNlcXVlbmNlci5jOjI5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorInRyeSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCittc2dzdHIgIiIKKyJBdmV6LXZvdXMgZMOpasOgIHZhbGlkw6nCoD9cbiIKKyJlc3NheWV6IFwiZ2l0ICVzIC1jb250aW51ZVwiIgorCisjOiBzZXF1ZW5jZXIuYzozMDk1IHNlcXVlbmNlci5jOjQxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciAlcyIKKworIzogc2VxdWVuY2VyLmM6MzEzNCBzZXF1ZW5jZXIuYzo0MTAxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjMxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvcGllciAnJXMnIHZlcnMgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIlZvdXMgcG91dmV6IGNvcnJpZ2VyIGxlIGNvbW1pdCBtYWludGVuYW50LCBhdmVjXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJhcHLDqHMgYXZvaXIgcsOpYWxpc8OpIHZvcyBtb2RpZmljYXRpb25zLCBsYW5jZXpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAlcy4uLiAlLipzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYXBwbGlxdWVyICVzLi4uICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1lcmdlICUuKnMiCittc2dzdHIgIkltcG9zc2libGUgZGUgZnVzaW9ubmVyICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMxOTAgc2VxdWVuY2VyLmM6MzE5NCBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb3BpZXIgJyVzJyB2ZXJzICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBmYWlsZWQ6ICVzXG4iCisiJXNZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIsOpY2hlYyBkJ2V4w6ljdXRpb27CoDogJXNcbiIKKyIlc1ZvdXMgcG91dmV6IGNvcnJpZ2VyIGxlIHByb2Jsw6htZSwgcHVpcyBsYW5jZXJcbiIKKyJcbiIKKyJnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzIyNworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgImV0IGEgbWlzIMOgIGpvdXIgbCdpbmRleCBvdSBsJ2FyYnJlIGRlIHRyYXZhaWxcbiIKKworIzogc2VxdWVuY2VyLmM6MzIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJMJ2V4w6ljdXRpb24gYSByw6l1c3NpwqA6ICVzXG4iCisibWFpcyBhIGxhaXNzw6kgZGVzIG1vZGlmaWNhdGlvbnMgZGFucyBsJ2luZGV4IG91IGxhIGNvcGllIGRlIHRyYXZhaWxcbiIKKyJWYWxpZGV6IG91IHJlbWlzZXogdm9zIG1vZGlmaWNhdGlvbiwgcHVpcyBsYW5jZXpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICJub20gZGUgbGFiZWwgaWxsw6lnYWwgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ4Cittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICLDqWNyaXR1cmUgZCd1biBjb21taXQgcmFjaW5lIGJpZG9uIgorCisjOiBzZXF1ZW5jZXIuYzozMzUzCittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAiw6ljcml0dXJlIGRlICfDqWNyYXNlci1zdXInIgorCisjOiBzZXF1ZW5jZXIuYzozMzkxIGJ1aWx0aW4vcmViYXNlLmM6ODc2IGJ1aWx0aW4vcmViYXNlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciBsJ2FyYnJlIGRlICVzIgorCisjOiBzZXF1ZW5jZXIuYzozNDM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpc291ZHJlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM0NjcKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgImltcG9zc2libGUgZGUgZnVzaW9ubmVyIGF2ZWMgdW5lIHLDqXZpc2lvbiBjb3VyYW50ZSIKKworIzogc2VxdWVuY2VyLmM6MzQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gbWVyZ2U6ICclLipzJyIKK21zZ3N0ciAicmllbiDDoCBmdXNpb25uZXLCoDogJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNTEwCittc2dpZCAib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gdG9wIG9mIGEgW25ldyByb290XSIKK21zZ3N0ciAiIgorInVuZSBmdXNpb24gb2N0b3B1cyBuZSBwZXV0IHBhcyDDqnRyZSBleMOpY3V0w6llIHBhciBkZXNzdXMgdW5lIG5vdXZlbGxlIHJhY2luZSIKKworIzogc2VxdWVuY2VyLmM6MzUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gZGUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzZXVsZW1lbnQgZXNzYXllciBkZSBmdXNpb25uZXIgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNzA0Cittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiZnVzaW9uwqA6IEltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBpbmRleCIKKworIzogc2VxdWVuY2VyLmM6Mzc3MyBidWlsdGluL3JlYmFzZS5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAiQXV0b3JlbWlzYWdlIGFwcGxpcXXDqS5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgc3RvY2tlciAlcyIKKworIzogc2VxdWVuY2VyLmM6Mzc4OCBidWlsdGluL3JlYmFzZS5jOjc0OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiTCdhcHBsaWNhdGlvbiBkZSBsJ2F1dG9yZW1pc2FnZSBhIHByb3ZvcXXDqSBkZXMgY29uZmxpdHNcbiIKKyJWb3MgIG1vZGlmaWNhdGlvbnMgc29udCDDoCBsJ2FicmkgZGFucyBsYSByZW1pc2UuXG4iCisiVm91cyBwb3V2ZXogbGFuY2VyIFwiZ2l0IHN0YXNoIHBvcFwiIG91IFwiZ2l0IHN0YXNoIGRyb3BcIiDDoCB0b3V0IG1vbWVudC5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImV4dHJhY3Rpb24gZGUgJXMgaW1wb3NzaWJsZSIKKworIzogc2VxdWVuY2VyLmM6Mzg2MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgdmFsaWQgT0lEIgorbXNnc3RyICIlcyBuJ2VzdCBwYXMgdW4gT0lEIHZhbGlkZSIKKworIzogc2VxdWVuY2VyLmM6Mzg2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzc5Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqXRhY2hlciBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICJhcnLDqnQgw6AgSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAiQXJyw6p0w6kgw6AgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzXG4iCisiSXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQ7IFRvIGVkaXQgdGhlIGNvbW1hbmQgYmVmb3JlIGNvbnRpbnVpbmcsIHBsZWFzZVxuIgorImVkaXQgdGhlIHRvZG8gbGlzdCBmaXJzdDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZCdleMOpY3V0ZXIgbGEgY29tbWFuZGVcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkVsbGUgYSDDqXTDqSByZXByb2dyYW1tw6llwqA7IHBvdXIgw6lkaXRlciBsYSBjb21tYW5kZSBhdmFudCBkZSBwb3Vyc3VpdnJlLFxuIgorInZldWlsbGV6IMOpZGl0ZXIgbGEgbGlzdGUgZGUgY29tbWFuZGVzIGVuIHByZW1pZXLCoDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgImFycsOqdCDDoCAlcy4uLiAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjQwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICJjb21tYW5kZSBpbmNvbm51ZSAlZCIKKworIzogc2VxdWVuY2VyLmM6NDEwOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6NDExNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICdvbnRvJyIKKworIzogc2VxdWVuY2VyLmM6NDEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlIEhFQUQgdG8gJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgSEVBRCBzdXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjQyMjEKK21zZ2lkICJjYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZWJhc2VywqA6IHZvdXMgYXZleiBkZXMgbW9kaWZpY2F0aW9ucyBub24gaW5kZXjDqWVzLiIKKworIzogc2VxdWVuY2VyLmM6NDIzMAorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvcnJpZ2VyIHVuIGNvbW1pdCBub24tZXhpc3RhbnQiCisKKyM6IHNlcXVlbmNlci5jOjQyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICJmaWNoaWVyIGludmFsaWRlwqA6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb250ZW50czogJyVzJyIKK21zZ3N0ciAiY29udGVudSBpbnZhbGlkZSA6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQyMzcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJWb3VzIGF2ZXogZGVzIG1vZGlmaWNhdGlvbnMgbm9uIHZhbGlkw6llcyBkYW5zIHZvdHJlIGNvcGllIGRlIHRyYXZhaWwuXG4iCisiVmV1aWxsZXogbGVzIHZhbGlkZXIgZCdhYm9yZCwgcHVpcyByZWxhbmNlciAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJy4iCisKKyM6IHNlcXVlbmNlci5jOjQyNzMgc2VxdWVuY2VyLmM6NDMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllcsKgOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MzI3Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHN1cHByaW1lciBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo0MzM0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgImltcG9zc2libGUgZGUgdmFsaWRlciBsZXMgbW9kaWZpY2F0aW9ucyBpbmRleMOpZXMuIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlcyA6IGltcG9zc2libGUgZGUgcGljb3JlciB1biAlcyIKKworIzogc2VxdWVuY2VyLmM6NDQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlcyA6IG1hdXZhaXNlIHLDqXZpc2lvbiIKKworIzogc2VxdWVuY2VyLmM6NDQ3OQorbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FubnVsZXIgZW4gdGFudCBxdWUgY29tbWl0IGluaXRpYWwiCisKKyM6IHNlcXVlbmNlci5jOjQ5NTIKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0wqA6IG9wdGlvbnMgbm9uIGfDqXLDqWVzIgorCisjOiBzZXF1ZW5jZXIuYzo0OTU1Cittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0wqA6IGVycmV1ciBsb3JzIGRlIGxhIHByw6lwYXJhdGlvbiBkZXMgcsOpdmlzaW9ucyIKKworIzogc2VxdWVuY2VyLmM6NTExMworbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKyJWb3VzIHBvdXZleiBjb3JyaWdlciBjZWNpIGF2ZWMgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIHB1aXMgbGFuY2V6ICdnaXQgIgorInJlYmFzZSAtLWNvbnRpbnVlJy5cbiIKKyJPdSB2b3VzIHBvdXZleiBhYmFuZG9ubmVyIGxlIHJlYmFzYWdlIGF2ZWMgJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCisKKyM6IHNlcXVlbmNlci5jOjUyMjYgc2VxdWVuY2VyLmM6NTI0MworbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgInJpZW4gw6AgZmFpcmUiCisKKyM6IHNlcXVlbmNlci5jOjUyNTcKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6l2aXRlciBsZXMgY29tbWFuZGVzIGRlIHBpY29yYWdlIG5vbiBuw6ljZXNzYWlyZXMiCisKKyM6IHNlcXVlbmNlci5jOjUzNTEKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICJsZSBzY3JpcHQgYSBkw6lqw6Agw6l0w6kgcsOpYXJyYW5nw6kuIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJyVzJyBlc3QgaG9ycyBkdSBkw6lww7R0IgorCisjOiBzZXR1cC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiIKKyIlc8KgOiBjZSBjaGVtaW4gbidleGlzdGUgcGFzIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbC5cbiIKKyJVdGlsaXNleiAnZ2l0IDxjb21tYW5kZT4gLS0gPGNoZW1pbj4uLi4nIHBvdXIgc3DDqWNpZmllciBkZXMgY2hlbWlucyBxdWkgIgorIm4nZXhpc3RlbnQgcGFzIGxvY2FsZW1lbnQuIgorCisjOiBzZXR1cC5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJhcmd1bWVudCAnJXMnIGFtYmlndcKgOiByw6l2aXNpb24gaW5jb25udWUgb3UgY2hlbWluIGluZXhpc3RhbnQuXG4iCisiVXRpbGlzZXogJy0tJyBwb3VyIHPDqXBhcmVyIGxlcyBjaGVtaW5zIGRlcyByw6l2aXNpb25zLCBjb21tZSBjZWNpwqA6XG4iCisiJ2dpdCA8Y29tbWFuZGU+IFs8csOpdmlzaW9uPi4uLl0gLS0gWzxjaGVtaW4+Li4uXSciCisKKyM6IHNldHVwLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJsJ29wdGlvbiAnJXMnIGRvaXQgw6p0cmUgcHLDqXNlbnRlIGF2YW50IGxlcyBhcmd1bWVudHMgcXVpIG5lIHNvbnQgcGFzIGRlcyAiCisib3B0aW9ucyIKKworIzogc2V0dXAuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorImFyZ3VtZW50ICclcycgYW1iaWd1wqA6IHLDqXZpc2lvbiBldCBjaGVtaW4gc3DDqWNpZmnDqXMuXG4iCisiVXRpbGlzZXogJy0tJyBwb3VyIHPDqXBhcmVyIGxlcyBjaGVtaW5zIGRlcyByw6l2aXNpb25zLCBjb21tZSBjZWNpwqA6XG4iCisiJ2dpdCA8Y29tbWFuZGU+IFs8csOpdmlzaW9uPi4uLl0gLS0gWzxjaGVtaW4+Li4uXSciCisKKyM6IHNldHVwLmM6MzkxCittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIG1ldHRyZSBlbiBwbGFjZSBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIGVuIHV0aWxpc2FudCB1bmUgIgorImNvbmZpZ3VyYXRpb24gaW52YWxpZGUiCisKKyM6IHNldHVwLmM6Mzk1Cittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgIkNldHRlIG9ww6lyYXRpb24gZG9pdCDDqnRyZSBlZmZlY3R1w6llIGRhbnMgdW4gYXJicmUgZGUgdHJhdmFpbCIKKworIzogc2V0dXAuYzo1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiCittc2dzdHIgIlZlcnNpb24gYXR0ZW5kdWUgZHUgZMOpcMO0dCBnaXQgPD0gJWQsICVkIHRyb3V2w6llIgorCisjOiBzZXR1cC5jOjU0OQorbXNnaWQgInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOiIKK21zZ3N0ciAiZXh0ZW5zaW9ucyBkZSBkw6lww7R0IGluY29ubnVlcyB0cm91dsOpZXPCoDoiCisKKyM6IHNldHVwLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiZXJyZXVyIMOgIGwnb3V2ZXJ0dXJlIGRlICclcyciCisKKyM6IHNldHVwLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAidHJvcCBncm9zIHBvdXIgw6p0cmUgdW5lIGZpY2hpZXIgLmdpdMKgOiAnJXMnIgorCisjOiBzZXR1cC5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICJlcnJldXIgw6AgbGEgbGVjdHVyZSBkZSAlcyIKKworIzogc2V0dXAuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdCBkZSBmaWNoaWVyIGdpdCBpbnZhbGlkZSA6ICVzIgorCisjOiBzZXR1cC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwYXRoIGluIGdpdGZpbGU6ICVzIgorbXNnc3RyICJhdWN1biBjaGVtaW4gZGFucyBsZSBmaWNoaWVyIGdpdMKgOiAlcyIKKworIzogc2V0dXAuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJjZSBuJ2VzdCBwYXMgdW4gZMOpcMO0dCBnaXTCoDogJXMiCisKKyM6IHNldHVwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIickJXMnIHRyb3AgZ3JvcyIKKworIzogc2V0dXAuYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgImNlIG4nZXN0IHBhcyB1biBkw6lww7R0IGdpdCA6ICclcyciCisKKyM6IHNldHVwLmM6NzIwIHNldHVwLmM6NzIyIHNldHVwLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHNlIGTDqXBsYWNlciB2ZXJzIGxlIHLDqXBlcnRvaXJlIChjaGRpcikgJyVzJyIKKworIzogc2V0dXAuYzo3MjUgc2V0dXAuYzo3ODEgc2V0dXAuYzo3OTEgc2V0dXAuYzo4MzAgc2V0dXAuYzo4MzgKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZXZlbmlyIGF1IHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgY291cmFudCIKKworIzogc2V0dXAuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICLDqWNoZWMgZHUgc3RhdCBkZSAnJSpzJXMlcyciCisKKyM6IHNldHVwLmM6MTA5MAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkltcG9zc2libGUgZCdhY2PDqWRlciBhdSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIGNvdXJhbnQiCisKKyM6IHNldHVwLmM6MTA5OSBzZXR1cC5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1vZGlmaWVyIGVuICclcyciCisKKyM6IHNldHVwLmM6MTExMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAibmkgY2VjaSBuaSBhdWN1biBkZSBzZXMgcsOpcGVydG9pcmVzIHBhcmVudHMgbidlc3QgdW4gZMOpcMO0dCBnaXTCoDogJXMiCisKKyM6IHNldHVwLmM6MTExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyJuaSBjZWNpIG5pIGF1Y3VuIGRlIHNlcyByw6lwZXJ0b2lyZXMgcGFyZW50cyAoanVzcXUnYXUgcG9pbnQgZGUgbW9udGFnZSAlcykgIgorIm4nZXN0IHVuIGTDqXDDtHQgZ2l0XG4iCisiQXJyw6p0IMOgIGxhIGxpbWl0ZSBkdSBzeXN0w6htZSBkZSBmaWNoaWVycyAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSAiCisibidlc3QgcGFzIGTDqWZpbmkpLiIKKworIzogc2V0dXAuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisicHJvYmzDqG1lIGF2ZWMgbGEgdmFsZXVyIGRlIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAoMCUuM28pLlxuIgorIkxlIHByb3ByacOpdGFpcmUgZGVzIGZpY2hpZXJzIGRvaXQgdG91am91cnMgYXZvaXIgbGVzIGRyb2l0cyBlbiBsZWN0dXJlIGV0ICIKKyLDqWNyaXR1cmUuIgorCisjOiBzZXR1cC5jOjEyNzEKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCdvdXZlcnR1cmUgb3UgYXUgZHVwIGRlIC9kZXYvbnVsbCIKKworIzogc2V0dXAuYzoxMjg2Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBiaWZ1cmNhdGlvbiIKKworIzogc2V0dXAuYzoxMjkxCittc2dpZCAic2V0c2lkIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGR1IHNldHNpZCIKKworIzogc2hhMS1maWxlLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3Q7IGNoZWNrIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCittc2dzdHIgIiIKKyJsZSByw6lwZXJ0b2lyZSBvYmpldCAlcyBuJ2V4aXN0ZSBwYXPCoDsgdsOpcmlmaWV6IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisKKyM6IHNoYTEtZmlsZS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbm9ybWFsaXNlciBsZSBjaGVtaW4gZCdvYmpldCBhbHRlcm5hdGlmwqA6ICVzIgorCisjOiBzaGExLWZpbGUuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGlnbm9yaW5nIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzLCBuZXN0aW5nIHRvbyBkZWVwIgorbXNnc3RyICIlc8KgOiBtYWdhc2lucyBkJ29iamV0cyBhbHRlcm5hdGlmcyBpZ25vcsOpcywgcsOpY3Vyc2lvbiB0cm9wIHByb2ZvbmRlIgorCisjOiBzaGExLWZpbGUuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBvYmplY3QgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBub3JtYWxpc2VyIGxlIHLDqXBlcnRvaXJlIGQnb2JqZXTCoDogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjYyNQorbXNnaWQgInVuYWJsZSB0byBmZG9wZW4gYWx0ZXJuYXRlcyBsb2NrZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAoZmRvcGVuKSBsZSBmaWNoaWVyIHZlcnJvdSBkZXMgYWx0ZXJuYXRpdmVzIgorCisjOiBzaGExLWZpbGUuYzo2NDMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgImxlY3R1cmUgZHUgZmljaGllciBkJ2FsdGVybmF0aXZlcyBpbXBvc3NpYmxlIgorCisjOiBzaGExLWZpbGUuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSBuZXcgYWx0ZXJuYXRlcyBmaWxlIGludG8gcGxhY2UiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpcGxhY2VyIGxlIG5vdXZlYXUgZmljaGllciBkJ2FsdGVybmF0aXZlIgorCisjOiBzaGExLWZpbGUuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2V4aXN0ZSBwYXMiCisKKyM6IHNoYTEtZmlsZS5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkIGNoZWNrb3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIKK21zZ3N0ciAiIgorImV4dHJhaXJlIGxlIGTDqXDDtHQgZGUgcsOpZsOpcmVuY2UgJyVzJyBjb21tZSB1bmUgZXh0cmFjdGlvbiBsacOpZSBuJ2VzdCBwYXMgIgorImVuY29yZSBzdXBwb3J0w6kuIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAibGUgZMOpcMO0dCBkZSByw6lmw6lyZW5jZSAnJXMnIG4nZXN0IHBhcyB1biBkw6lww7R0IGxvY2FsLiIKKworIzogc2hhMS1maWxlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAibGUgZMOpcMO0dCBkZSByw6lmw6lyZW5jZSAnJXMnIGVzdCBzdXBlcmZpY2llbCIKKworIzogc2hhMS1maWxlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAibGUgZMOpcMO0dCBkZSByw6lmw6lyZW5jZSAnJXMnIGVzdCBncmVmZsOpIgorCisjOiBzaGExLWZpbGUuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lIHdoaWxlIHBhcnNpbmcgYWx0ZXJuYXRlIHJlZnM6ICVzIgorbXNnc3RyICJsaWduZSBpbnZhbGlkZSBwZW5kYW50IGwnYW5hbHlzZSBkZXMgcmVmcyBhbHRlcm5hdGl2ZXPCoDogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICJhdHRlbXB0aW5nIHRvIG1tYXAgJTxQUkl1TUFYPiBvdmVyIGxpbWl0ICU8UFJJdU1BWD4iCittc2dzdHIgImVzc2FpIGRlIG1tYXAgJTxQUkl1TUFYPiBhdSBkZWzDoCBkZSBsYSBsaW1pdGUgJTxQUkl1TUFYPiIKKworIzogc2hhMS1maWxlLmM6OTY0Cittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBtbWFwIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICJsZSBmaWNoaWVyIG9iamV0ICVzIGVzdCB2aWRlIgorCisjOiBzaGExLWZpbGUuYzoxMjUyIHNoYTEtZmlsZS5jOjIzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAib2JqZXQgbGlicmUgY29ycm9tcHUgJyVzJyIKKworIzogc2hhMS1maWxlLmM6MTI1NCBzaGExLWZpbGUuYzoyMzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJkb25uw6llcyBpbmNvcnJlY3RlcyDDoCBsYSBmaW4gZGUgbCdvYmpldCBsaWJyZSAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxMjk2Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAidHlwZSBkJ29iamV0IGludmFsaWRlIgorCisjOiBzaGExLWZpbGUuYzoxMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpcGFxdWV0ZXIgbCdlbnTDqnRlICVzIGF2ZWMgLS1hbGxvdy11bmtub3ctdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6lwYXF1ZXRlciBsJ2VudMOqdGUgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjEzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlICVzIGF2ZWMgLS1hbGxvdy11bmtub3ctdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlICVzIgorCisjOiBzaGExLWZpbGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZW1lbnQgJXMgbm90IGZvdW5kIGZvciAlcyIKK21zZ3N0ciAicmVtcGxhY2VtZW50ICVzIG5vbiB0cm91dsOpIHBvdXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2JqZXQgbGlicmUgJXMgKHN0b2Nrw6kgZGFucyAlcykgZXN0IGNvcnJvbXB1IgorCisjOiBzaGExLWZpbGUuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAibCdvYmpldCBlbXBhcXVldMOpICVzIChzdG9ja8OpIGRhbnMgJXMpIGVzdCBjb3Jyb21wdSIKKworIzogc2hhMS1maWxlLmM6MTY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllciAlcyIKKworIzogc2hhMS1maWxlLmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lnbGVyIGxlcyBkcm9pdHMgZGUgJyVzJyIKKworIzogc2hhMS1maWxlLmM6MTcxMworbXNnaWQgImZpbGUgd3JpdGUgZXJyb3IiCittc2dzdHIgImVycmV1ciBkJ8OpY3JpdHVyZSBkJ3VuIGZpY2hpZXIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MzIKK21zZ2lkICJlcnJvciB3aGVuIGNsb3NpbmcgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgImVycmV1ciBlbiBmZXJtZXR1cmUgZHUgZmljaGllciBkJ29iamV0IGVzc2V1bMOpIgorCisjOiBzaGExLWZpbGUuYzoxNzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKyJkcm9pdHMgaW5zdWZmaXNhbnRzIHBvdXIgYWpvdXRlciB1biBvYmpldCDDoCBsYSBiYXNlIGRlIGRvbm7DqWVzICVzIGR1IGTDqXDDtHQiCisKKyM6IHNoYTEtZmlsZS5jOjE3OTkKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciB1biBmaWNoaWVyIHRlbXBvcmFpcmUiCisKKyM6IHNoYTEtZmlsZS5jOjE4MjMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXIgZCdvYmpldCBlc3NldWzDqSIKKworIzogc2hhMS1maWxlLmM6MTgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgImltcG9zc2libGUgZGUgY29tcHJlc3NlciBsZSBub3V2ZWwgb2JqZXQgJXMgKCVkKSIKKworIzogc2hhMS1maWxlLmM6MTgzMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAiw6ljaGVjIGRlIGRlZmxhdGVFbmQgc3VyIGwnb2JqZXQgJXMgKCVkKSIKKworIzogc2hhMS1maWxlLmM6MTgzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb25mdXNlZCBieSB1bnN0YWJsZSBvYmplY3Qgc291cmNlIGRhdGEgZm9yICVzIgorbXNnc3RyICJkb25uw6llcyBkZSBzb3VyY2UgZCdvYmpldCBpbnN0YWJsZSBwb3VyICVzIgorCisjOiBzaGExLWZpbGUuYzoxODQ3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICVzIgorbXNnc3RyICLDqWNoZWMgZGUgdXRpbWUoKSBzdXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgcG91ciAlcyIKKworIzogc2hhMS1maWxlLmM6MTk2MgorbXNnaWQgImNvcnJ1cHQgY29tbWl0IgorbXNnc3RyICJjb21taXQgY29ycm9tcHUiCisKKyM6IHNoYTEtZmlsZS5jOjE5NzAKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAiw6l0aXF1ZXR0ZSBjb3Jyb21wdWUiCisKKyM6IHNoYTEtZmlsZS5jOjIwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiZXJyZXVyIGRlIGxlY3R1cmUgw6AgbCdpbmRleGF0aW9uIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IHJlYWQgd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImxlY3R1cmUgdHJvbnF1w6llIHBlbmRhbnQgbCdpbmRleGF0aW9uIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyMTQ1IHNoYTEtZmlsZS5jOjIxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXPCoDogw6ljaGVjIGRlIGwnaW5zZXJ0aW9uIGRhbnMgbGEgYmFzZSBkZSBkb25uw6llcyIKKworIzogc2hhMS1maWxlLmM6MjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICIlc8KgOiB0eXBlIGRlIGZpY2hpZXIgbm9uIHN1cHBvcnTDqSIKKworIzogc2hhMS1maWxlLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1biBvYmpldCB2YWxpZGUiCisKKyM6IHNoYTEtZmlsZS5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1biBvYmpldCAnJXMnIHZhbGlkZSIKKworIzogc2hhMS1maWxlLmM6MjIxMyBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0MDMgc2hhMS1maWxlLmM6MjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICJpbmNvaMOpcmVuY2UgZGUgaGFjaGFnZSBwb3VyICVzICglcyBhdHRlbmR1KSIKKworIzogc2hhMS1maWxlLmM6MjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtbWFwICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXBhcXVldGVyIGwnZW50w6p0ZSBkZSAlcyIKKworIzogc2hhMS1maWxlLmM6MjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdlbnTDqnRlIGRlICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpcGFxdWV0ZXIgbGUgY29udGVudSBkZSAlcyIKKworIzogc2hhMS1uYW1lLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJsZSBTSEExIGNvdXJ0ICVzIGVzdCBhbWJpZ3UiCisKKyM6IHNoYTEtbmFtZS5jOjQ5OAorbXNnaWQgIlRoZSBjYW5kaWRhdGVzIGFyZToiCittc2dzdHIgIkxlcyBjYW5kaWRhdHMgc29udMKgOiIKKworIzogc2hhMS1uYW1lLmM6Nzk3Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBuZSBjcsOpZSBub3JtYWxlbWVudCBqYW1haXMgZGUgcsOpZsOpcmVuY2UgcXVpIHNlIHRlcm1pbmUgcGFyIDQwXG4iCisiY2FyYWN0w6hyZXMgaGV4YSBjYXIgZWxsZSBzZXJhaXQgaWdub3LDqWUgc2kgdm91cyBzcMOpY2lmaWV6IGp1c3RlXG4iCisiNDAtaGV4YS4gQ2VzIHLDqWbDqXJlbmNlcyBwZXV2ZW50IMOqdHJlIGNyw6nDqWVzIHBhciBlcnJldXIuIFBhciBleGVtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJvw7kgXCIkYnJcIiBlc3QgZCd1bmUgbWFuacOocmUgb3UgZCd1bmUgYXV0cmUgdmlkZSBldCB1bmUgcsOpZsOpcmVuY2UgNDAtaGV4YSAiCisiZXN0IGNyw6nDqWUuXG4iCisiVmV1aWxsZXogZXhhbWluZXIgY2VzIHLDqWbDqXJlbmNlcyBldCBwZXV0LcOqdHJlIGxlcyBzdXBwcmltZXIuIETDqXNhY3RpdmV6IGNlICIKKyJtZXNzYWdlXG4iCisiZW4gbGFuw6dhbnQgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIiCittc2dzdHIgIiV1LiUyLjJ1IEdpbyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQi9zIgorbXNnc3RyICIldS4lMi4ydSBHaW8vcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlCisjOiBzdHJidWYuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCIgorbXNnc3RyICIldS4lMi4ydSBNaW8iCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgTWlvL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lvIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpby9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZQorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzIgorbXNnc3RyWzBdICIldSBvY3RldCIKK21zZ3N0clsxXSAiJXUgb2N0ZXRzIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiV1IG9jdGV0L3MiCittc2dzdHJbMV0gIiV1IG9jdGV0cy9zIgorCisjOiBzdHJidWYuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgImltcG9zc2libGUgZCfDqWRpdGVyICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIk1vZGlmaWNhdGlvbiBpbXBvc3NpYmxlIGRlIC5naXRtb2R1bGVzIG5vbiBmdXNpb25uw6ksIHLDqXNvbHZleiBsZXMgY29uZmxpdHMgIgorImQnYWJvcmQiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgdW5lIHNlY3Rpb24gb8O5IHBhdGg9JXMgZGFucyAuZ2l0bW9kdWxlcyIKKworIyBpY2kgJXMgZXN0IHVuIGNoZW1pbgorIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsJ8OpbMOpbWVudCBkZSAuZ2l0bW9kdWxlcyBwb3VyICVzIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgbWlzZSBlbiBpbmRleCBkdSAuZ2l0bW9kdWxlcyBtaXMgw6Agam91ciIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJkYW5zIGxlIHNvdXMtbW9kdWxlICclcycgbm9uIHBvcHVsw6kiCisKKyM6IHN1Ym1vZHVsZS5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoc3BlYyAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgIkxlIGNoZW1pbiAnJXMnIGVzdCBkYW5zIGxlIHNvdXMtbW9kdWxlICclLipzJyIKKworIzogc3VibW9kdWxlLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBlbnRyeSAnJXMnICglcykgaXMgYSAlcywgbm90IGEgY29tbWl0IgorbXNnc3RyICJsJ2VudHLDqWUgZGUgc291cy1tb2R1bGUgJyVzJyAoJXMpIGVzdCB1biAlcywgcGFzIHVuIGNvbW1pdCIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjAxNgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLDiWNoZWMgZGUgcsOpc29sdXRpb24gZGUgSEVBRCBjb21tZSByw6lmw6lyZW5jZSB2YWxpZGUuIgorCisjOiBzdWJtb2R1bGUuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3Mgc3VibW9kdWxlICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdhY2PDqWRlciBhdSBzb3VzLW1vZHVsZSAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgcmVjb25udSBjb21tZSBkw6lww7R0IGdpdCIKKworIzogc3VibW9kdWxlLmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqW1hcnJlciAnZ2l0IHN0YXR1cycgZGFucyBsZSBzb3VzLW1vZHVsZSAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxhbmNlciAnZ2l0IHN0YXR1cycgZGFucyBsZSBzb3VzLW1vZHVsZSAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpc2FjdGl2ZXIgY29yZS53b3JrdHJlZSBkYW5zIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICJsZSBzb3VzLW1vZHVsZSAnJXMnIGEgdW4gaW5kZXggc2FsZSIKKworIzogc3VibW9kdWxlLmM6MTk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgImxlIHNvdXMtbW9kdWxlICclcycgbidhIHBhcyBwdSDDqnRyZSBtaXMgw6Agam91ci4iCisKKyM6IHN1Ym1vZHVsZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyBpbnNpZGUgZ2l0IGRpciAnJS4qcyciCittc2dzdHIgImxlIHLDqXBlcnRvaXJlIGdpdCBkdSBzb3VzLW1vZHVsZSAnJXMnIGVzdCDDoCBsJ2ludMOpcmlldXIgZHUgcsOpcGVydG9pcmUgZ2l0ICclLipzJyIKKworIzogc3VibW9kdWxlLmM6MjA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicmVsb2NhdGVfZ2l0ZGlyIGZvciBzdWJtb2R1bGUgJyVzJyB3aXRoIG1vcmUgdGhhbiBvbmUgd29ya3RyZWUgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorInJlbG9jYXRlX2dpdGRpciBwb3VyIGxlIHNvdXMtbW9kdWxlICclcycgYXZlYyBwbHVzIGQndW4gYXJicmUgZGUgdHJhdmFpbCAiCisibidlc3QgcGFzIHN1cHBvcnTDqSIKKworIzogc3VibW9kdWxlLmM6MjA2MCBzdWJtb2R1bGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlIGxlIG5vbSBwb3VyIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIKK21zZ3N0ciAicmVmdXMgZGUgZMOpcGxhY2VyICclcycgZGFucyB1bmUgcsOpcGVydG9pcmUgZ2l0IGV4aXN0YW50IgorCisjOiBzdWJtb2R1bGUuYzoyMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKyJNaWdyYXRpb24gZHUgcsOpcGVydG9pcmUgZ2l0IGRlICclcyVzJyBkZXB1aXNcbiIKKyInJXMnIHN1clxuIgorIiclcydcbiIKKworIzogc3VibW9kdWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJyw6ljdXJzaW9uIGltcG9zc2libGUgZGFucyBsZSBzb3VzLW1vZHVsZSAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoyMTk4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqW1hcnJlciBscy1maWxlcyBkYW5zIC4uIgorCisjOiBzdWJtb2R1bGUuYzoyMjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSBhIHJlbnZvecOpIHVuIGNvZGUgZGUgcmV0b3VyIGluYXR0ZW5kdSAlZCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAibm9tIGRlIHNvdXMtbW9kdWxlIHN1c3BpY2lldXggJXMgaWdub3LDqSIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjMwMworbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAibGVzIHZhbGV1cnMgbsOpZ2F0aXZlcyBuZSBzb250IHBhcyBwZXJtaXNlcyBwb3VyIHN1Ym1vZHVsZS5mZXRjaEpvYnMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorIiclcycgaWdub3LDqSBldCBxdWkgcGV1dCDDqnRyZSBpbnRlcnByw6l0w6kgY29tbWUgdW5lIG9wdGlvbiBkZSBsaWduZSBkZSAiCisiY29tbWFuZGXCoDogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIlZhbGV1ciBpbnZhbGlkZSBwb3VyICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgbCfDqWzDqW1lbnQgJXMgZGUgLmdpdG1vZHVsZXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBjb21tYW5kZSB0cmFpbGVyICclcyciCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJ2YWxldXIgaW5jb25udWUgJyVzJyBwb3VyIGxhIGNsw6kgJyVzJyIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgInBsdXMgZCd1biAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJzeW1ib2xlIHZpZGUgZGFucyBsYSBsaWduZSBkZSBmaW4gJyUuKnMnIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgZCdlbnRyw6llICclcyciCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAic3RhdCBpbXBvc3NpYmxlIGRlICVzIgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIHVuIGZpY2hpZXIgcsOpZ3VsaWVyIgorCisjOiB0cmFpbGVyLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICJsZSBmaWNoaWVyICVzIG4nZXN0IHBhcyBpbnNjcmlwdGlibGUgcGFyIGwndXRpbGlzYXRldXIiCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIHVuIGZpY2hpZXIgdGVtcG9yYWlyZSIKKworIzogdHJhaWxlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSB0ZW1wb3JhcnkgZmlsZSB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZW5vbW1lciB1biBmaWNoaWVyIHRlbXBvcmFpcmUgZW4gJXMiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiUG9zaXRpb25uZXJhaXQgbGEgYnJhbmNoZSBhbW9udCBkZSAnJXMnIHN1ciAnJXMnIGRlICclcydcbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGEgbGlhc3NlICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInRyYW5zcG9ydMKgOiBvcHRpb24gZGUgcHJvZm9uZGV1ciBpbnZhbGlkZSAnJXMnIgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICJ2b2lyIHByb3RvY29sLnZlcnNpb24gZGFucyAnZ2l0IGhlbHAgY29uZmlnJyBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbiIKKworIzogdHJhbnNwb3J0LmM6MjY3Cittc2dpZCAic2VydmVyIG9wdGlvbnMgcmVxdWlyZSBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgbGF0ZXIiCittc2dzdHIgImxlcyBvcHRpb25zIGRlIHNlcnZldXIgZXhpZ2VudCB1bmUgdmVyc2lvbiAyIG91IHN1cMOpcmlldXJlIgorCisjOiB0cmFuc3BvcnQuYzo2MzIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGEgY29uZmlndXJhdGlvbiB0cmFuc3BvcnQuY29sb3IuKiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAibGUgc3VwcG9ydCBkdSBwcm90b2NvbGUgdjIgbidlc3QgcGFzIGVuY29yZSBpbXBsYW50w6kiCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgInZhbGV1ciBpbmNvbm51ZSBwb3VyIGxhIGNvbmZpZyAnJXMnwqA6ICVzIgorCisjOiB0cmFuc3BvcnQuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgInRyYW5zcG9ydCAnJXMnIG5vbiBwZXJtaXMiCisKKyM6IHRyYW5zcG9ydC5jOjk0OQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgImdpdC1vdmVyLXJzeW5jIG4nZXN0IHBsdXMgc3VwcG9ydMOpIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAiIgorIkxlcyBjaGVtaW5zIHN1aXZhbnRzIGRlIHNvdXMtbW9kdWxlIGNvbnRpZW5uZW50IGRlcyBtb2RpZmljYXRpb25zXG4iCisicXVpIG5lIHBldXZlbnQgw6p0cmUgdHJvdXbDqWVzIHN1ciBhdWN1biBkaXN0YW50wqA6XG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVmV1aWxsZXogZXNzYXllclxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3UgYmllbiBjaGFuZ2V6IGRlIHLDqXBlcnRvaXJlIGV0IHV0aWxpc2V6XG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInBvdXIgbGVzIHBvdXNzZXIgdmVycyB1biBzZXJ2ZXVyIGRpc3RhbnQuXG4iCisiXG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNTYKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIkFiYW5kb24uIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgcG91c3PDqWUgZGUgdG91cyBsZXMgc291cy1tb2R1bGVzIG7DqWNlc3NhaXJlcyIKKworIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU2Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIm9wdGlvbiBub24gc3VwcG9ydMOpZSBwYXIgbGUgcHJvdG9jb2xlIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEgdHJhbnNwb3J0LWhlbHBlci5jOjkwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnw6ljcml0dXJlIHRvdGFsZSBzdXIgbCdhc3Npc3RhbnQgZGlzdGFudCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgdW4gYXNzaXN0YW50IGRpc3RhbnQgcG91ciAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTYwIHRyYW5zcG9ydC1oZWxwZXIuYzo1NzAKK21zZ2lkICJjYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgZHVwbGlxdWVyIGxlIGRlc2NyaXB0ZXVyIGRlIGZsdXggZGUgc29ydGllIGRlIGwnYXNzaXN0YW50IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5ICVzOyB0aGlzIHJlbW90ZSBoZWxwZXIgcHJvYmFibHkgbmVlZHMgbmV3ZXIgIgorInZlcnNpb24gb2YgR2l0IgorbXNnc3RyICIiCisiY2FwYWNpdMOpIG9ibGlnYXRvaXJlIGluY29ubnVlICVzwqA7IGNldCBhc3Npc3RhbnQgZGlzdGFudCByZXF1aWVydCAiCisicHJvYmFibGVtZW50IHVuZSB1bmUgbm91dmVsbGUgdmVyc2lvbiBkZSBHaXQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTcKK21zZ2lkICJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiCittc2dzdHIgImNldCBhc3Npc3RhbnQgZGlzdGFudCBkZXZyYWl0IHN1cHBvcnRlciBsYSBjYXBhY2l0w6kgcmVmc3BlYyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjI4NCB0cmFuc3BvcnQtaGVscGVyLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVuZXhwZWN0ZWRseSBzYWlkOiAnJXMnIgorbXNnc3RyICIlcyBhIGRpdCBkZSBtYW5pw6hyZSBpbmF0dGVuZHVlwqA6ICclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxzbyBsb2NrZWQgJXMiCittc2dzdHIgIiVzIGEgYXVzc2kgdmVycm91aWxsw6kgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0OTIKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiCittc2dzdHIgImltcG9zc2libGUgZGUgbGFuY2VyIGZhc3QtaW1wb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTE1Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAiZXJyZXVyIGF1IGxhbmNlbWVudCBkZSBmYXN0LWltcG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU0NCB0cmFuc3BvcnQtaGVscGVyLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsYSByw6lmICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiCittc2dzdHIgInLDqXBvbnNlIGluY29ubnVlIMOgIGNvbm5lY3TCoDogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTEKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorImxhIHNww6ljaWZpY2F0aW9uIGR1IGNoZW1pbiBkZSBzZXJ2aWNlIGRpc3RhbnQgbidlc3QgcGFzIHN1cHBvcnTDqWUgcGFyIGxlICIKKyJwcm90b2NvbGUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTMKK21zZ2lkICJpbnZhbGlkIHJlbW90ZSBzZXJ2aWNlIHBhdGgiCittc2dzdHIgImNoZW1pbiBkZSBzZXJ2aWNlIGRpc3RhbnQgaW52YWxpZGUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHNlIGNvbm5lY3RlciBhdSBzb3VzLXNlcnZpY2UgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgIm9rL2Vycm9yIGF0dGVuZHUsIGwnYXNzaXN0YW50IGEgZGl0ICclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICJsJ2Fzc2lzdGFudCBhIHJlbnZvecOpIHVuIHN0YXR1dCBkZSByZXRvdXIgaW5hdHRlbmR1ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iCittc2dzdHIgImwnYXNzaXN0YW50ICVzIG5lIGfDqHJlIHBhcyBkcnktcnVuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorbXNnc3RyICJsJ2Fzc2lzdGFudCAlcyBuZSBnw6hyZSBwYXMgLS1zaWduZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiCittc2dzdHIgImwnYXNzaXN0YW50ICVzIG5lIGfDqHJlIHBhcyAtLXNpZ25lZD1pZi1hc2tlZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIKK21zZ3N0ciAibCdhc3Npc3RhbnQgJXMgbmUgZ8OocmUgcGFzIC0tYXRvbWljIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciCittc2dzdHIgImwnYXNzaXN0YW50ICVzIG5lIGfDqHJlIHBhcyAncHVzaC1vcHRpb24nIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY0Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgIiIKKyJsJ2Fzc2lzdGFudCAlcyBuZSBnw6hyZSBwYXMgcHVzaMKgOyB1biBzcMOpY2lmaWNhdGV1ciBkZSByw6lmw6lyZW5jZSBlc3QgIgorIm7DqWNlc3NhaXJlIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgImwnYXNzaXN0YW50ICVzIG5lIGfDqHJlIHBhcyAnZm9yY2UnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsYW5jZXIgZmFzdC1leHBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIxCittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiZXJyZXVyIGF1IGxhbmNlbWVudCBkZSBmYXN0LWV4cG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKyJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIgorbXNnc3RyICIiCisiQXVjdW5lIHLDqWbDqXJlbmNlIGVuIGNvbW11biBldCBhdWN1bmUgc3DDqWNmacOpZcKgOyByaWVuIMOgIGZhaXJlLlxuIgorIlZvdXMgZGV2cmlleiBwZXV0LcOqdHJlIHNww6ljaWZpZXIgdW5lIGJyYW5jaGUgdGVsbGUgcXVlICdtYXN0ZXInLlxuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICJyw6lwb25zZSBtYWxmb3Jtw6llIGRhbnMgbGUgbGlzdGUgZGUgcsOpZnPCoDogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQoJXMpIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIHJlYWQoJXMpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0ZSglcykgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgd3JpdGUoJXMpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZHUgZmlsIGQnZXjDqWN1dGlvbiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGpvbmN0aW9uIGR1IGZpbCBkJ2V4w6ljdXRpb24gJXPCoDogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzcwIHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgbGUgZmlsIGQnZXjDqWN1dGlvbiBwb3VyIGNvcGllciBsZXMgZG9ubsOpZXPCoDogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIsOpY2hlYyBkdSBwcm9jZXNzdXMgJXMgcG91ciBsJ2F0dGVudGUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZHUgcHJvY2Vzc3VzICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQzMyB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0MgorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqW1hcnJlciBsZSBmaWwgZCdleMOpY3V0aW9uIHBvdXIgY29waWVyIGxlcyBkb25uw6llcyIKKworIzogdHJlZS13YWxrLmM6MzMKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBvYmplY3QiCittc2dzdHIgIm9iamV0IGFyYnJlIHRyb3AgY291cnQiCisKKyM6IHRyZWUtd2Fsay5jOjM5Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAibW9kZSBpbnZhbGlkZSBkYW5zIGwnZW50csOpZSBkJ2FyYnJlIgorCisjOiB0cmVlLXdhbGsuYzo0MworbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgIm5vbSBkZSBmaWNoaWVyIHZpZGUgZGFucyB1bmUgZW50csOpZSBkZSBsJ2FyYnJlIgorCisjOiB0cmVlLXdhbGsuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IGNvbnRhaW5zIGJhY2tzbGFzaDogJyVzJyIKK21zZ3N0ciAibGUgbm9tIGR1IGZpY2hpZXIgZGFucyBsJ2VudHLDqWUgZGUgbCdhcmJyZSBjb250aWVudCB1bmUgYmFycmUgb2JsaXF1ZSBpbnZlcnPDqWXCoDogJyVzJyIKKworIzogdHJlZS13YWxrLmM6MTI0Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAiZmljaGllciBhcmJyZSB0cm9wIGNvdXJ0IgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiVm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBhdXggZmljaGllcnMgc3VpdmFudHMgc2VyYWllbnQgw6ljcmFzw6llcyBwYXIgIgorImwnZXh0cmFjdGlvbsKgOlxuIgorIiUlc1ZldWlsbGV6IHZhbGlkZXIgb3UgcmVtaXNlciB2b3MgbW9kaWZpY2F0aW9ucyBhdmFudCBkZSBiYXNjdWxlciBkZSAiCisiYnJhbmNoZS4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiVm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBhdXggZmljaGllcnMgc3VpdmFudHMgc2VyYWllbnQgw6ljcmFzw6llcyBwYXIgIgorImwnZXh0cmFjdGlvbsKgOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiVm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBhdXggZmljaGllcnMgc3VpdmFudHMgc2VyYWllbnQgw6ljcmFzw6llcyBwYXIgbGEgIgorImZ1c2lvbsKgOlxuIgorIiUlc1ZldWlsbGV6IHZhbGlkZXIgb3UgcmVtaXNlciB2b3MgbW9kaWZpY2F0aW9ucyBhdmFudCBsYSBmdXNpb24uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIlZvcyBtb2RpZmljYXRpb25zIGxvY2FsZXMgYXV4IGZpY2hpZXJzIHN1aXZhbnRzIHNlcmFpZW50IMOpY3Jhc8OpZXMgcGFyIGxhICIKKyJmdXNpb27CoDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIlZvcyBtb2RpZmljYXRpb25zIGxvY2FsZXMgYXV4IGZpY2hpZXJzIHN1aXZhbnRzIHNlcmFpZW50IMOpY3Jhc8OpZXMgcGFyICVzwqA6XG4iCisiJSVzVmV1aWxsZXogdmFsaWRlciBvdSByZW1pc2VyIHZvcyBtb2RpZmljYXRpb25zIGF2YW50ICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJWb3MgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIGF1eCBmaWNoaWVycyBzdWl2YW50cyBzZXJhaWVudCDDqWNyYXPDqWVzIHBhciAlc8KgOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJFcnJldXIgbG9ycyBkZSBsYSByw6ljdXDDqXJhdGlvbiBkZXMgdmVyc2lvbnMgOlxuIgorIkxhIG1pc2Ugw6Agam91ciBkZXMgcsOpcGVydG9pcmVzIHN1aXZhbnRzIGVmZmFjZXJhaXQgbGVzIGZpY2hpZXJzIG5vbiBzdWl2aXMgIgorImNvbnRlbnVzwqA6XG4iCiAiJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MwotIywgdGNsLWZvcm1hdAorIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCi0iXG4iCi0iJXMiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgogbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSBsYW5jZXIgbCdvdXRpbCBkZSBmdXNpb24gOlxuIgotIlxuIgotIiVzIgorIkxlcyBmaWNoaWVycyBzdWl2YW50cyBub24gc3VpdmlzIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwgc2VyYWllbnQgZWZmYWPDqXMgcGFyICIKKyJsJ2V4dHJhY3Rpb27CoDpcbiIKKyIlJXNWZXVpbGxleiByZW5vbW1lciBvdSBlZmZhY2VyIGNlcyBmaWNoaWVycyBhdmFudCBkZSBiYXNjdWxlciBkZSBicmFuY2hlLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzQ3Ci1tc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgotbXNnc3RyICJMYW5jZW1lbnQgZGUgbCdvdXRpbCBkZSBmdXNpb24uLi4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKLW1zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCi1tc2dzdHIgIkwnb3V0aWwgZGUgZnVzaW9uIGEgw6ljaG91w6kuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCi1tc2dzdHIgIkNvZGFnZSBnbG9iYWwgJyVzJyBpbnZhbGlkZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAiQ29kYWdlIGRlIGTDqXDDtHQgJyVzJyBpbnZhbGlkZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTE3Ci1tc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKLW1zZ3N0ciAiUmVtZXR0cmUgbGVzIHZhbGV1cnMgcGFyIGTDqWZhdXQiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEyMQotbXNnaWQgIlNhdmUiCi1tc2dzdHIgIlNhdXZlZ2FyZGVyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBSZXBvc2l0b3J5IgotbXNnc3RyICJEw6lww7R0IDogJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzMgotbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCi1tc2dzdHIgIkdsb2JhbGVzICh0b3VzIGxlcyBkw6lww7R0cykiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzOAotbXNnaWQgIlVzZXIgTmFtZSIKLW1zZ3N0ciAiTm9tIGQndXRpbGlzYXRldXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzOQotbXNnaWQgIkVtYWlsIEFkZHJlc3MiCi1tc2dzdHIgIkFkcmVzc2UgZW1haWwiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MQotbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgotbXNnc3RyICJSw6lzdW1lciBsZXMgY29tbWl0cyBkZSBmdXNpb24iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MgotbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKLW1zZ3N0ciAiRnVzaW9uIGJhdmFyZGUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MwotbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCi1tc2dzdHIgIk1vbnRyZXIgc3RhdGlzdGlxdWVzIGRlIGRpZmYgYXByw6hzIGZ1c2lvbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ0Ci1tc2dpZCAiVXNlIE1lcmdlIFRvb2wiCi1tc2dzdHIgIlV0aWxpc2VyIG91dGlsIGRlIGZ1c2lvbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ2Ci1tc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKLW1zZ3N0ciAiRmFpcmUgY29uZmlhbmNlIGF1eCBkYXRlcyBkZSBtb2RpZmljYXRpb24gZGUgZmljaGllcnMgIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDcKLW1zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCi1tc2dzdHIgIlB1cmdlciBsZXMgYnJhbmNoZXMgZGUgc3VpdmkgcGVuZGFudCBsYSByw6ljdXDDqXJhdGlvbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ4Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCi1tc2dzdHIgIkZhaXJlIGNvcnJlc3BvbmRyZSBsZXMgYnJhbmNoZXMgZGUgc3VpdmkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OQotbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgotbXNnc3RyICJBbm5vdGVyIGxlcyBjb3BpZXMgc2V1bGVtZW50IHN1ciBmaWNoaWVycyBtb2RpZmnDqXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MAotbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgotbXNnc3RyICJNaW5pbXVtIGRlIGNhcmF0w6hyZXMgcG91ciBhbm5vdGVyIHVuZSBjb3BpZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTUxCi1tc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCi1tc2dzdHIgIkRpc3RhbmNlIGRlIGJsw6JtZSBkYW5zIGwnaGlzdG9yaXF1ZSAoam91cnMpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTIKLW1zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgotbXNnc3RyICJOb21icmUgZGUgbGlnbmVzIGRlIGNvbnRleHRlIGRhbnMgbGVzIGRpZmZzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTMKLW1zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgotbXNnc3RyICJMYXJnZXVyIGR1IHRleHRlIGRlIG1lc3NhZ2UgZGUgY29tbWl0IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTQKLW1zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCi1tc2dzdHIgIk5vdXZlYXUgbW9kw6hsZSBkZSBub20gZGUgYnJhbmNoZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTU1Ci1tc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgotbXNnc3RyICJDb2RhZ2UgZHUgY29udGVudSBkZXMgZmljaGllcnMgcGFyIGTDqWZhdXQiCi0KLSM6IGxpYi9vcHRpb24udGNsOjIwMwotbXNnaWQgIkNoYW5nZSIKLW1zZ3N0ciAiTW9kaWZpZXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjIzMAotbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgotbXNnc3RyICJEaWN0aW9ubmFpcmUgZCdvcnRob2dyYXBoZSA6IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNTQKLW1zZ2lkICJDaGFuZ2UgRm9udCIKLW1zZ3N0ciAiTW9kaWZpZXIgbGVzIHBvbGljZXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI1OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNob29zZSAlcyIKLW1zZ3N0ciAiQ2hvaXNpciAlcyIKLQotIzogbGliL29wdGlvbi50Y2w6MjY0Ci1tc2dpZCAicHQuIgotbXNnc3RyICJwdC4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjI3OAotbXNnaWQgIlByZWZlcmVuY2VzIgotbXNnc3RyICJQcsOpZsOpcmVuY2VzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDozMTQKLW1zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgotbXNnc3RyICJMYSBzYXV2ZWdhcmRlIGNvbXBsw6h0ZSBkZXMgb3B0aW9ucyBhIMOpY2hvdcOpIDoiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE2MwotbXNnaWQgIlJlbW92ZSBSZW1vdGUiCi1tc2dzdHIgIlN1cHByaW1lciB1biBkw6lww7R0IGRpc3RhbnQiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE2OAotbXNnaWQgIlBydW5lIGZyb20iCi1tc2dzdHIgIlB1cmdlciBkZSIKLQotIzogbGliL3JlbW90ZS50Y2w6MTczCi1tc2dpZCAiRmV0Y2ggZnJvbSIKLW1zZ3N0ciAiUsOpY3Vww6lyZXIgZGUiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjIxNQotbXNnaWQgIlB1c2ggdG8iCi1tc2dzdHIgIlBvdXNzZXIgdmVycyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE5Ci1tc2dpZCAiQWRkIFJlbW90ZSIKLW1zZ3N0ciAiQWpvdXRlciB1biBkw6lww7R0IGRpc3RhbnQiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAotbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgotbXNnc3RyICJBam91dGVyIHVuIG5vdXZlYXUgZMOpcMO0dCBkaXN0YW50IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjggbGliL3Rvb2xzX2RsZy50Y2w6MzYKLW1zZ2lkICJBZGQiCi1tc2dzdHIgIkFqb3V0ZXIiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNwotbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgotbXNnc3RyICJEw6l0YWlscyBkZXMgZMOpcMO0dHMgZGlzdGFudHMiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAotbXNnaWQgIkxvY2F0aW9uOiIKLW1zZ3N0ciAiRW1wbGFjZW1lbnQgOiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYyCi1tc2dpZCAiRnVydGhlciBBY3Rpb24iCi1tc2dzdHIgIkFjdGlvbiBzdXBwbMOpbWVudGFpcmUiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2NQotbXNnaWQgIkZldGNoIEltbWVkaWF0ZWx5IgotbXNnc3RyICJSw6ljdXDDqXJlciBpbW3DqWRpYXRlbWVudCIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjcxCi1tc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKLW1zZ3N0ciAiSW5pdGlhbGlzZXIgdW4gZMOpcMO0dCBkaXN0YW50IGV0IHBvdXNzZXIiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NwotbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCi1tc2dzdHIgIk5lIHJpZW4gZmFpcmUgZCdhdXRyZSBtYWludGVuYW50IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAxCi1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKLW1zZ3N0ciAiTWVyY2kgZGUgZm91cm5pciB1biBub20gZGUgZMOpcMO0dCBkaXN0YW50LiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjExNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgotbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBub20gZGUgZMOpcMO0dCBkaXN0YW50IGFjY2VwdGFibGUuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAiw4ljaGVjIGRlIGwnYWpvdXQgZHUgZMOpcMO0dCBkaXN0YW50ICclcycgw6AgbCdlbXBsYWNlbWVudCAnJXMnLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmV0Y2ggJXMiCi1tc2dzdHIgInLDqWN1cMOpcmVyICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgotbXNnc3RyICJSw6ljdXDDqXJhdGlvbiBkZSAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgIlBhcyBkZSBtw6l0aG9kZSBjb25udWUgcG91ciBpbml0aWFsaXNlciBsZSBkw6lww7R0IMOgIGwnZW1wbGFjZW1lbnQgJyVzJy4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKLSM6IGxpYi90cmFuc3BvcnQudGNsOjgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicHVzaCAlcyIKLW1zZ3N0ciAicG91c3NlciAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCi1tc2dzdHIgIk1pc2UgZW4gcGxhY2UgZGUgJXMgKMOgICVzKSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKLW1zZ3N0ciAiU3VwcHJpbWVyIHVuZSBicmFuY2hlIMOgIGRpc3RhbmNlIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ3Ci1tc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgotbXNnc3RyICJEw6lww7R0IHNvdXJjZSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICJCcmFuY2hlIGRpc3RhbnRlIDoiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTQ5Ci1tc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKLW1zZ3N0ciAiRW1wbGFjZW1lbnQgYXJiaXRyYWlyZSA6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Ci1tc2dpZCAiQnJhbmNoZXMiCi1tc2dzdHIgIkJyYW5jaGVzIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEwOQotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgotbXNnc3RyICJTdXBwcmltZXIgc2V1bGVtZW50IHNpIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQotbXNnaWQgIk1lcmdlZCBJbnRvOiIKLW1zZ3N0ciAiRnVzaW9ubsOpIGRhbnMgOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKLW1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCi1tc2dzdHIgIlVuZSBicmFuY2hlIGVzdCBuw6ljZXNzYWlyZSBwb3VyICdGdXNpb25uw6kgZGFucycuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAotIywgdGNsLWZvcm1hdAorIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKLSJcbiIKLSIgLSAlcyIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCiBtc2dzdHIgIiIKLSJMZXMgYnJhbmNoZXMgc3VpdmFudGVzIG5lIHNvbnQgcGFzIGNvbXBsw6h0ZW1lbnQgZnVzaW9ubsOpZXMgZGFucyAlcyA6XG4iCi0iXG4iCi0iIC0gJXMiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgc2VyYWllbnQgZWZmYWPDqXMgcGFyIGwnZXh0cmFjdGlvbsKgOlxuIgorIiUlcyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKLSMsIHRjbC1mb3JtYXQKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCi0ibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCiBtc2dzdHIgIiIKLSJVbiBvdSBwbHVzaWV1cnMgZGVzIHRlc3RzIGRlIGZ1c2lvbiBvbnQgw6ljaG91w6kgcGFyY2UgcXVlIHZvdXMgbidhdmV6IHBhcyAiCi0icsOpY3Vww6lyw6kgbGVzIGNvbW1pdHMgbsOpY2Vzc2FpcmVzLiBFc3NheWV6IGRlIHLDqWN1cMOpcmVyIMOgIHBhcnRpciBkZSAlcyAiCi0iZCdhYm9yZC4iCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCBzZXJhaWVudCBlZmZhY8OpcyBwYXIgIgorImxhIGZ1c2lvbsKgOlxuIgorIiUlc1ZldWlsbGV6IHJlbm9tbWVyIG91IGVmZmFjZXIgY2VzIGZpY2hpZXJzIGF2YW50IGxhIGZ1c2lvbi4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA3Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgotbXNnc3RyICJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHVuZSBvdSBwbHVzaWV1cnMgYnJhbmNoZXMgw6Agc3VwcHJpbWVyLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgotbXNnc3RyICJTdXBwcmVzc2lvbiBkZXMgYnJhbmNoZXMgZGUgJXMiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkyCi1tc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCi1tc2dzdHIgIkF1Y3VuIGTDqXDDtHQgbidlc3Qgc8OpbGVjdGlvbm7DqS4iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCi1tc2dzdHIgIlN5bmNocm9uaXNhdGlvbiBkZSAlcy4uLiIKLQotIzogbGliL3NlYXJjaC50Y2w6MjEKLW1zZ2lkICJGaW5kOiIKLW1zZ3N0ciAiQ2hlcmNoZXIgOiIKLQotIzogbGliL3NlYXJjaC50Y2w6MjMKLW1zZ2lkICJOZXh0IgotbXNnc3RyICJTdWl2YW50IgotCi0jOiBsaWIvc2VhcmNoLnRjbDoyNAotbXNnaWQgIlByZXYiCi1tc2dzdHIgIlByw6ljw6lkZW50IgotCi0jOiBsaWIvc2VhcmNoLnRjbDoyNQotbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgotbXNnc3RyICJTZW5zaWJsZSDDoCBsYSBjYXNzZSIKLQotIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCi1tc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgcmFjY291cmNpIDoiCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Ci1tc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgotbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSBsJ2ljw7RuZSA6IgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKLW1zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJWw6lyaWZpY2F0ZXVyIGQnb3J0aG9ncmFwaGUgbm9uIHN1cHBvcnTDqSIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Ci1tc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCi1tc2dzdHIgIkxhIHbDqXJpZmljYXRpb24gZCdvcnRob2dyYXBoZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Ci1tc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgotbXNnc3RyICJDb25maWd1cmF0aW9uIGRlIHbDqXJpZmljYXRpb24gZCdvcnRob2dyYXBoZSBpbnZhbGlkZSIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgotbXNnc3RyICJSw6lpbml0aWFsaXNhdGlvbiBkdSBkaWN0aW9ubmFpcmUgw6AgJXMuIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLW1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICJMYSB2w6lyaWZpY2F0aW9uIGQnb3J0aG9ncmFwaGUgYSDDqWNob3XDqSBzaWxlbmNpZXVzZW1lbnQgYXUgZMOpbWFycmFnZSIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCi1tc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIlbDqXJpZmljYXRldXIgZCdvcnRob2dyYXBoZSBub24gcmVjb25udSIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICJBdWN1bmUgc3VnZ2VzdGlvbiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAotbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiRU9GIGluYXR0ZW5kdWUgZW52b3nDqWUgcGFyIGxlIHbDqXJpZmljYXRldXIgZCdvcnRob2dyYXBoZSIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgotbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgotbXNnc3RyICJMZSB2w6lyaWZpY2F0ZXVyIGQnb3J0aG9ncmFwaGUgYSDDqWNob3XDqSIKLQotIzogbGliL3NzaGtleS50Y2w6MzEKLW1zZ2lkICJObyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiQXVjdW5lIGNsw6kgdHJvdXbDqWUuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDozNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCi1tc2dzdHIgIkNsw6kgcHVibGlxdWUgdHJvdXbDqWUgZGFucyA6ICVzIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo0MAotbXNnaWQgIkdlbmVyYXRlIEtleSIKLW1zZ3N0ciAiR8OpbsOpcmVyIHVuZSBjbMOpIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo1NgotbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgotbXNnc3RyICJDb3BpZXIgZGFucyBsZSBwcmVzc2UtcGFwaWVyIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo3MAotbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgotbXNnc3RyICJWb3RyZSBjbMOpIHB1YmxpcXVlIE9wZW5TU0giCi0KLSM6IGxpYi9zc2hrZXkudGNsOjc4Ci1tc2dpZCAiR2VuZXJhdGluZy4uLiIKLW1zZ3N0ciAiR8OpbsOpcmF0aW9uLi4uIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo4NAotIywgdGNsLWZvcm1hdAorIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKLSJcbiIKLSIlcyIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGRlIGxhbmNlciBzc2gta2V5Z2VuIDpcbiIKLSJcbiIKLSIlcyIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBzZXJhaWVudCBlZmZhY8OpcyBwYXIgbGEgZnVzaW9uwqA6XG4iCisiJSVzIgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTEKLW1zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCi1tc2dzdHIgIkxhIGfDqW7DqXJhdGlvbiBhIMOpY2hvdcOpLiIKLQotIzogbGliL3NzaGtleS50Y2w6MTE4Ci1tc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiTGEgZ8OpbsOpcmF0aW9uIGEgcsOpdXNzaSwgbWFpcyBhdWN1bmUgY2zDqSBuJ2Egw6l0w6kgdHJvdXbDqWUuIgotCi0jOiBsaWIvc3Noa2V5LnRjbDoxMjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCi1tc2dzdHIgIlZvdHJlIGNsw6kgZXN0IGRhbnMgOiAlcyIKLQotIzogbGliL3N0YXR1c19iYXIudGNsOjgzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLW1zZ3N0ciAiJXMgLi4uICUqaSBkZSAlKmkgJXMgKCUzaSUlKSIKLQotIzogbGliL3Rvb2xzLnRjbDo3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKLW1zZ3N0ciAiTGFuY2VyICVzIG7DqWNlc3NpdGUgcXUndW4gZmljaGllciBzb2l0IHPDqWxlY3Rpb25uw6kuIgotCi0jOiBsaWIvdG9vbHMudGNsOjkwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgIsOKdGVzLXZvdXMgc8O7ciBkZSB2b3Vsb2lyIGxhbmNlciAlcyA/IgotCi0jOiBsaWIvdG9vbHMudGNsOjExMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2w6ICVzIgotbXNnc3RyICJPdXRpbCA6ICVzIgotCi0jOiBsaWIvdG9vbHMudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICJMYW5jZW1lbnQgZGUgOiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgotbXNnc3RyICJMJ291dGlsIGEgdGVybWluw6kgYXZlYyBzdWNjw6hzIDogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgotbXNnc3RyICJMJ291dGlsIGEgw6ljaG91w6kgOiAlcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKLW1zZ2lkICJBZGQgVG9vbCIKLW1zZ3N0ciAiQWpvdXRlciB1biBvdXRpbCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKLW1zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKLW1zZ3N0ciAiQWpvdXRlciB1bmUgbm91dmVsbGUgY29tbWFuZGUgZCdvdXRpbCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzMKLW1zZ2lkICJBZGQgZ2xvYmFsbHkiCi1tc2dzdHIgIkFqb3V0ZXIgZ2xvYmFsZW1lbnQiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ1Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICJEw6l0YWlscyBzdXIgbCdvdXRpbCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKLW1zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKLW1zZ3N0ciAiVXRpbGlzZXIgbGVzIHPDqXBhcmF0ZXVycyAnLycgcG91ciBjcsOpZXIgdW4gYXJicmUgZGUgc291cy1tZW51cyA6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICJDb21tYW5kZSA6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NAotbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCi1tc2dzdHIgIk1vbnRyZXIgdW5lIGJvw650ZSBkZSBkaWFsb2d1ZSBhdmFudCBsZSBsYW5jZW1lbnQiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjgwCi1tc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCi1tc2dzdHIgIiIKLSJEZW1hbmRlciDDoCBsJ3V0aWxpc2F0ZXVyIGRlIHPDqWxlY3Rpb25uZXIgdW5lIHLDqXZpc2lvbiAoY2hhbmdlICRSRVZJU0lPTikiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjg1Ci1tc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCi1tc2dzdHIgIkRlbWFuZGVyIMOgIGwndXRpbGlzYXRldXIgZGVzIGFyZ3VtZW50cyBzdXBwbMOpbWVudGFpcmVzIChjaGFuZ2UgJEFSR1MpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5MgotbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKLW1zZ3N0ciAiTmUgcGFzIG1vbnRyZXIgbGEgZmVuw6p0cmUgZGUgc29ydGllIGRlcyBjb21tYW5kZXMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjk3Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAiTGFuY2VyIHNldWxlbWVudCBzaSB1biBkaWZmIGVzdCBzw6lsZWN0aW9ubsOpICgkRklMRU5BTUUgbm9uIHZpZGUpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICJNZXJjaSBkZSBmb3VybmlyIHVuIG5vbSBwb3VyIGwnb3V0aWwuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJMJ291dGlsICclcycgZXhpc3RlIGTDqWrDoC4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE1MQotIywgdGNsLWZvcm1hdAorIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIHNlcmFpZW50IGVmZmFjw6lzIHBhciAiCisiJXPCoDpcbiIKKyIlJXNWZXVpbGxleiByZW5vbW1lciBvdSBlZmZhY2VyIGNlcyBmaWNoaWVycyBhdmFudCAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgc2VyYWllbnQgZWZmYWPDqXMgcGFyICVzwqA6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiTGVzIGZpY2hpZXJzIHN1aXZhbnRzIG5vbiBzdWl2aXMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCBzZXJhaWVudCDDqWNyYXPDqXMgcGFyICIKKyJsJ2V4dHJhY3Rpb27CoDpcbiIKKyIlJXNWZXVpbGxleiByZW5vbW1lciBvdSBlZmZhY2VyIGNlcyBmaWNoaWVycyBhdmFudCBkZSBiYXNjdWxlciBkZSBicmFuY2hlLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxlcyBmaWNoaWVycyBzdWl2YW50cyBub24gc3VpdmlzIHNlcmFpZW50IMOpY3Jhc8OpcyBwYXIgbCdleHRyYWN0aW9uwqA6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkxlcyBmaWNoaWVycyBzdWl2YW50cyBub24gc3VpdmlzIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwgc2VyYWllbnQgZWZmYWPDqXMgcGFyICIKKyJsYSBmdXNpb27CoDpcbiIKKyIlJXNWZXVpbGxleiByZW5vbW1lciBvdSBlZmZhY2VyIGNlcyBmaWNoaWVycyBhdmFudCBsYSBmdXNpb24uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBzZXJhaWVudCDDqWNyYXPDqXMgcGFyIGxhIGZ1c2lvbsKgOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIHNlcmFpZW50IMOpY3Jhc8OpcyBwYXIgIgorIiVzwqA6XG4iCisiJSVzVmV1aWxsZXogcmVub21tZXIgb3UgZWZmYWNlciBjZXMgZmljaGllcnMgYXZhbnQgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBzZXJhaWVudCDDqWNyYXPDqXMgcGFyICVzwqA6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIkwnZW50csOpZSAnJXMnIHN1cmNoYXJnZSBhdmVjICclcycuIEFmZmVjdGF0aW9uIGltcG9zc2libGUuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgogIiVzIgogbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkJ2Fqb3V0ZXIgbCdvdXRpbCA6XG4iCisiTWlzZSDDoCBqb3VyIGQnZXh0cmFjdGlvbiBjcmV1c2UgaW1wb3NzaWJsZcKgOiBsZXMgZW50csOpZXMgc3VpdmFudGVzIG5lIHNvbnQgIgorInBhcyDDoCBqb3VywqA6XG4iCiAiJXMiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE5MAotbXNnaWQgIlJlbW92ZSBUb29sIgotbXNnc3RyICJTdXBwcmltZXIgbCdvdXRpbCIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Ci1tc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCi1tc2dzdHIgIlN1cHByaW1lciBkZXMgY29tbWFuZGVzIGQnb3V0aWwiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjIwMAotbXNnaWQgIlJlbW92ZSIKLW1zZ3N0ciAiU3VwcHJpbWVyIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKLW1zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgotbXNnc3RyICIoTGUgYmxldSBpbmRpcXVlIGRlcyBvdXRpbHMgbG9jYXV4IGF1IGTDqXDDtHQpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW4gQ29tbWFuZDogJXMiCi1tc2dzdHIgIkxhbmNlciBjb21tYW5kZSA6ICVzIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozMTEKLW1zZ2lkICJBcmd1bWVudHMiCi1tc2dzdHIgIkFyZ3VtZW50cyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ4Ci1tc2dpZCAiT0siCi1tc2dzdHIgIk9LIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKLW1zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGVzIGRlcm5pw6hyZXMgbW9kaWZpY2F0aW9ucyBkZSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCi1tc2dzdHIgInB1cmdlciDDoCBkaXN0YW5jZSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKLW1zZ3N0ciAiTmV0dG95ZXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIHN1cHByaW3DqWVzIGRlICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKLW1zZ3N0ciAiTGVzIG1vZGlmaWNhdGlvbnMgc29udCBwb3Vzc8OpZXMgdmVycyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCi1tc2dzdHIgIkR1cGxpcXVlciBkYW5zICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCi1tc2dzdHIgIlBvdXNzZSAlcyAlcyB2ZXJzICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDAKLW1zZ2lkICJQdXNoIEJyYW5jaGVzIgotbXNnc3RyICJQb3Vzc2VyIGJyYW5jaGVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKLW1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCi1tc2dzdHIgIkJyYW5jaGVzIHNvdXJjZSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCi1tc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiRMOpcMO0dCBkZSBkZXN0aW5hdGlvbiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTY5Ci1tc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKLW1zZ3N0ciAiT3B0aW9ucyBkZSB0cmFuc2ZlcnQiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3MQotbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKIG1zZ3N0ciAiIgotIkZvcmNlciBsJ8OpY3Jhc2VtZW50IGQndW5lIGJyYW5jaGUgZXhpc3RhbnRlIChwZXV0IHN1cHByaW1lciBkZXMgIgorIkxlcyBmaWNoaWVycyBzdWl2YW50cyBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIHNlcmFpZW50IMOpY3Jhc8OpcyBwYXIgbGEgbWlzZSDDoCAiCisiam91ciBwYXIgbCdleHRyYWN0aW9uIGNyZXVzZcKgOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCBzZXJhaWVudCBzdXBwcmltw6lzIHBhciBsYSBtaXNlICIKKyLDoCBqb3VyIHBhciBleHRyYWN0aW9uIGNyZXVzZcKgOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisiTWlzZSDDoCBqb3VyIGltcG9zc2libGUgcG91ciBsZSBzb3VzLW1vZHVsZcKgOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAiQWJhbmRvblxuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTcKK21zZ2lkICJVcGRhdGluZyBmaWxlcyIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIGRlcyBmaWNoaWVycyIKKworIzogdW5wYWNrLXRyZWVzLmM6MzQ5Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorIm9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtKSBhbmQgb25seSBvbmUgZnJvbSB0aGUgc2FtZVxuIgorImNvbGxpZGluZyBncm91cCBpcyBpbiB0aGUgd29ya2luZyB0cmVlOlxuIgorbXNnc3RyICIiCisiTGVzIGNoZW1pbnMgc3VpdmFudHMgc29udCBlbiBjb2xsaXNpb24gKHBhciBleGVtcGxlIHBhciBkZXMgY2hlbWluc1xuIgorInNlbnNpYmxlcyDDoCBsYSBjYXNzZSBkYW5zIHVuZSBzeXN0w6htZSBkZSBmaWNoaWVyIGluc2Vuc2libGUpIGV0IHVuXG4iCisic2V1bCBkdSBncm91cGUgZW4gY29sbGlzaW9uIGVzdCBkYW5zIGwnYXJicmUgZGUgdHJhdmFpbMKgOlxuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQxCittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIk1pc2Ugw6Agam91ciBkZXMgZHJhcGVhdXggZGUgbCdpbmRleCIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAibm9tIGRlIHNjaMOpbWEgZCdVUkwgaW52YWxpZGUgb3Ugc3VmZml4ZSAnOi8vJyBtYW5xdWFudCIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICJzw6lxdWVuY2UgZCfDqWNoYXBwZW1lbnQgJVhYIGludmFsaWRlIgorCisjOiB1cmxtYXRjaC5jOjIxNQorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICJow7R0ZSBtYW5xdWFudCBldCBsZSBzY2jDqW1hIG4nZXN0IHBhcyAnZmlsZTonIgorCisjOiB1cmxtYXRjaC5jOjIzMgorbXNnaWQgImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiCittc2dzdHIgInVuZSBVUkwgJ2ZpbGU6JyBuZSBwZXV0IHBhcyBjb250ZW5pciBkZSBudW3DqXJvIGRlIHBvcnQiCisKKyM6IHVybG1hdGNoLmM6MjQ3Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIKK21zZ3N0ciAiY2FyYWN0w6hyZXMgaW52YWxpZGVzIGRhbnMgbGUgbm9tIGQnaMO0dGUiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibnVtw6lybyBkZSBwb3J0IGludmFsaWRlIgorCisjOiB1cmxtYXRjaC5jOjM3MQorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgInNlZ21lbnQgZGUgY2hlbWluICcuLicgaW52YWxpZGUiCisKKyM6IHdvcmt0cmVlLmM6MjU4IGJ1aWx0aW4vYW0uYzoyMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBsYSBsZWN0dXJlIGRlICclcyciCisKKyM6IHdvcmt0cmVlLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIiclcycgZGFucyBsJ2FyYnJlIGRlIHRyYXZhaWwgcHJpbmNpcGFsIG4nZXN0IHBhcyBsZSByw6lwZXJ0b2lyZSBkZSBkw6lww7R0IgorCisjOiB3b3JrdHJlZS5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbGUgZG9lcyBub3QgY29udGFpbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUgbG9jYXRpb24iCittc2dzdHIgIiIKKyJsZSBmaWNoaWVyICclcycgbmUgY29udGllbnQgcGFzIGRlIGNoZW1pbiBhYnNvbHUgw6AgbCdlbXBsYWNlbWVudCBkZSBsJ2FyYnJlICIKKyJkZSB0cmF2YWlsIgorCisjOiB3b3JrdHJlZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIG4nZXhpc3RlIHBhcyIKKworIzogd29ya3RyZWUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIGZpY2hpZXIgLmdpdCwgY29kZSBkJ2VycmV1ciAlZCIKKworIzogd29ya3RyZWUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIiclcycgbmUgcG9pbnRlIHBhcyBlbiByZXRvdXIgc3VyICclcyciCisKKyM6IHdyYXBwZXIuYzoxODYgd3JhcHBlci5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICclcycgZW4gbGVjdHVyZS/DqWNyaXR1cmUiCisKKyM6IHdyYXBwZXIuYzozODcgd3JhcHBlci5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdhY2PDqWRlciDDoCAnJXMnIgorCisjOiB3cmFwcGVyLmM6NTk2Cittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWNjw6lkZXIgYXUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBjb3VyYW50IgorCisjOiB3dC1zdGF0dXMuYzoxNTgKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIkNoZW1pbnMgbm9uIGZ1c2lvbm7DqXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MTg3IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWNoaWVyPi4uLlwiIHBvdXIgZMOpc2luZGV4ZXIpIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmljaGllcj4uLi5cIiBwb3VyICIKKyJkw6lzaW5kZXhlcikiCisKKyM6IHd0LXN0YXR1cy5jOjE5MyB3dC1zdGF0dXMuYzoyMjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWNoaWVyPi4uLlwiIHBvdXIgZMOpc2luZGV4ZXIpIgorCisjOiB3dC1zdGF0dXMuYzoxOTcKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGFkZCA8ZmljaGllcj4uLi5cIiBwb3VyIG1hcnF1ZXIgY29tbWUgcsOpc29sdSkiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCBhZGQvcm0gPGZpY2hpZXI+Li4uXCIgc2kgbsOpY2Vzc2FpcmUgcG91ciBtYXJxdWVyIGNvbW1lICIKKyJyw6lzb2x1KSIKKworIzogd3Qtc3RhdHVzLmM6MjAxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJtIDxmaWNoaWVyPi4uLlwiIHBvdXIgbWFycXVlciBjb21tZSByw6lzb2x1KSIKKworIzogd3Qtc3RhdHVzLmM6MjExIHd0LXN0YXR1cy5jOjEwNzQKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgcXVpIHNlcm9udCB2YWxpZMOpZXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgcXVpIG5lIHNlcm9udCBwYXMgdmFsaWTDqWVzIDoiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgYWRkIDxmaWNoaWVyPi4uLlwiIHBvdXIgbWV0dHJlIMOgIGpvdXIgY2UgcXVpIHNlcmEgdmFsaWTDqSkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgYWRkL3JtIDxmaWNoaWVyPi4uLlwiIHBvdXIgbWV0dHJlIMOgIGpvdXIgY2UgcXVpIHNlcmEgIgorInZhbGlkw6kpIgorCisjOiB3dC1zdGF0dXMuYzoyNDEKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorIiAgKHV0aWxpc2V6IFwiZ2l0IHJlc3RvcmUgPGZpY2hpZXI+Li4uXCIgcG91ciBhbm51bGVyIGxlcyBtb2RpZmljYXRpb25zIGRhbnMgIgorImxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwpIgorCisjOiB3dC1zdGF0dXMuYzoyNDMKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKyIgICh2YWxpZGVyIG91IGFubnVsZXIgbGUgY29udGVudSBub24gc3Vpdmkgb3UgbW9kaWZpw6kgZGFucyBsZXMgc291cy1tb2R1bGVzKSIKKworIzogd3Qtc3RhdHVzLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgJXMgPGZpY2hpZXI+Li4uXCIgcG91ciBpbmNsdXJlIGRhbnMgY2UgcXVpIHNlcmEgdmFsaWTDqSkiCisKKyM6IHd0LXN0YXR1cy5jOjI2OAorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgInN1cHByaW3DqSBkZXMgZGV1eCBjw7R0w6lzIDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3MAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAiYWpvdXTDqSBwYXIgbm91cyA6IgorCisjOiB3dC1zdGF0dXMuYzoyNzIKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJzdXBwcmltw6kgcGFyIGV1eCA6IgorCisjOiB3dC1zdGF0dXMuYzoyNzQKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAiYWpvdXTDqSBwYXIgZXV4IDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICJzdXBwcmltw6kgcGFyIG5vdXMgOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc4Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgImFqb3V0w6kgZGUgZGV1eCBjw7R0w6lzIDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmnDqSBkZXMgZGV1eCBjw7R0w6lzIDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5MAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAibm91dmVhdSBmaWNoaWVywqA6IgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICJjb3Bpw6nCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICJzdXBwcmltw6nCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NgorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAibW9kaWZpw6nCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5OAorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICJyZW5vbW3DqcKgOiIKKworIzogd3Qtc3RhdHVzLmM6MzAwCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgIm1vZGlmLiB0eXBlwqA6IgorCisjOiB3dC1zdGF0dXMuYzozMDIKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAiaW5jb25udcKgOiIKKworIzogd3Qtc3RhdHVzLmM6MzA0Cittc2dpZCAidW5tZXJnZWQ6IgorbXNnc3RyICJub24gZnVzaW9ubsOpwqA6IgorCisjOiB3dC1zdGF0dXMuYzozODQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJub3V2ZWF1eCBjb21taXRzLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4NgorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGVudSBtb2RpZmnDqSwgIgorCisjOiB3dC1zdGF0dXMuYzozODgKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJjb250ZW51IG5vbiBzdWl2aSwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAiVm90cmUgcmVtaXNhZ2UgY29udGllbnQgYWN0dWVsbGVtZW50ICVkIGVudHLDqWUiCittc2dzdHJbMV0gIlZvdHJlIHJlbWlzYWdlIGNvbnRpZW50IGFjdHVlbGxlbWVudCAlZCBlbnRyw6llcyIKKworIzogd3Qtc3RhdHVzLmM6OTM4Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIlNvdXMtbW9kdWxlcyBtb2RpZmnDqXMgbWFpcyBub24gbWlzIMOgIGpvdXIgOiIKKworIzogd3Qtc3RhdHVzLmM6OTQwCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiQ2hhbmdlbWVudHMgZHUgc291cy1tb2R1bGUgw6AgdmFsaWRlciA6IgorCisjOiB3dC1zdGF0dXMuYzoxMDIyCittc2dpZCAiIgorIkRvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgaXQgd2lsbCBiZSBpZ25vcmVkLiIKK21zZ3N0ciAiIgorIk5lIHRvdWNoZXogcGFzIMOgIGxhIGxpZ25lIGNpLWRlc3N1cy5cbiIKKyJUb3V0IGNlIHF1aSBzdWl0IHNlcmEgw6lsaW1pbsOpLiIKKworIzogd3Qtc3RhdHVzLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY29tcHV0ZSB0aGUgYnJhbmNoIGFoZWFkL2JlaGluZCB2YWx1ZXMuXG4iCisiWW91IGNhbiB1c2UgJy0tbm8tYWhlYWQtYmVoaW5kJyB0byBhdm9pZCB0aGlzLlxuIgorbXNnc3RyICIiCisiXG4iCisiJS4yZiBzZWNvbmRlcyBvbnQgw6l0w6kgbsOpY2Vzc2FpcmVzIHBvdXIgY2FsY3VsZXIgbGVzIHZhbGV1cnMgZCdhdmFuY2UvcmV0YXJkICIKKyJkZSBsYSBicmFuY2hlLlxuIgorIlZvdXMgcG91dmV6IHV0aWxpc2VyICctLW5vLWFoZWFkLWJlaGluZCcgcG91ciDDqXZpdGVyIGNlY2kuXG4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDQKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIlZvdXMgYXZleiBkZXMgY2hlbWlucyBub24gZnVzaW9ubsOpcy4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIChyw6lnbGV6IGxlcyBjb25mbGl0cyBwdWlzIGxhbmNleiBcImdpdCBjb21taXRcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiBwb3VyIGFubnVsZXIgbGEgZnVzaW9uKSIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIlRvdXMgbGVzIGNvbmZsaXRzIHNvbnQgcsOpZ2zDqXMgbWFpcyBsYSBmdXNpb24gbidlc3QgcGFzIHRlcm1pbsOpZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBjb21taXRcIiBwb3VyIHRlcm1pbmVyIGxhIGZ1c2lvbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNjUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIlZvdXMgw6p0ZXMgYXUgbWlsaWV1IGQndW5lIHNlc3Npb24gYW0uIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJMZSBwYXRjaCBhY3R1ZWwgZXN0IHZpZGUuIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAocsOpZ2xleiBsZXMgY29uZmxpdHMgcHVpcyBsYW5jZXogXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTE3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBhbSAtLXNraXBcIiBwb3VyIHNhdXRlciBjZSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGFtIC0tYWJvcnRcIiBwb3VyIHJlc3RhdXJlciBsYSBicmFuY2hlIGQnb3JpZ2luZSkiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDkKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgImdpdC1yZWJhc2UtdG9kbyBlc3QgbWFucXVhbnQuIgorCisjOiB3dC1zdGF0dXMuYzoxMzExCittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIkF1Y3VuZSBjb21tYW5kZSByw6lhbGlzw6llLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICJEZXJuacOocmUgY29tbWFuZGUgZWZmZWN0dcOpZSAoJWQgY29tbWFuZGUgZWZmZWN0dcOpZSnCoDoiCittc2dzdHJbMV0gIkRlcm5pw6hyZXMgY29tbWFuZGVzIGVmZmVjdHXDqWVzICglZCBjb21tYW5kZXMgZWZmZWN0dcOpZXMpwqA6IgorCisjOiB3dC1zdGF0dXMuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgICh2b2lyIHBsdXMgZGFucyBsZSBmaWNoaWVyICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIkF1Y3VuZSBjb21tYW5kZSByZXN0YW50ZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAiUHJvY2hhaW5lIGNvbW1hbmRlIMOgIGVmZmVjdHVlciAoJWQgY29tbWFuZGUgcmVzdGFudGUpwqA6IgorbXNnc3RyWzFdICJQcm9jaGFpbmVzIGNvbW1hbmRlcyDDoCBlZmZlY3R1ZXIgKCVkIGNvbW1hbmRlcyByZXN0YW50ZXMpwqA6IgorCisjOiB3dC1zdGF0dXMuYzoxMzQxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiBwb3VyIHZvaXIgZXQgw6lkaXRlcikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIlZvdXMgw6p0ZXMgZW4gdHJhaW4gZGUgcmViYXNlciBsYSBicmFuY2hlICclcycgc3VyICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJWb3VzIMOqdGVzIGVuIHRyYWluIGRlIHJlYmFzZXIuIgorCisjOiB3dC1zdGF0dXMuYzoxMzcxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDqWdsZXogbGVzIGNvbmZsaXRzIHB1aXMgbGFuY2V6IFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzczCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCByZWJhc2UgLS1za2lwXCIgcG91ciBzYXV0ZXIgY2UgcGF0Y2gpIgorCisjOiB3dC1zdGF0dXMuYzoxMzc1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHBvdXIgZXh0cmFpcmUgbGEgYnJhbmNoZSBkJ29yaWdpbmUpIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICh0b3VzIGxlcyBjb25mbGl0cyBzb250IHLDqWdsw6lzIDogbGFuY2V6IFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBlbiB0cmFpbiBkZSBmcmFjdGlvbm5lciB1biBjb21taXQgcGVuZGFudCB1biByZWJhc2FnZSAiCisiZGUgbGEgYnJhbmNoZSAnJXMnIHN1ciAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTM5MQorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICIiCisiVm91cyDDqnRlcyBhY3R1ZWxsZW1lbnQgZW4gdHJhaW4gZGUgZnJhY3Rpb25uZXIgdW4gY29tbWl0IHBlbmRhbnQgdW4gcmViYXNhZ2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChVbmUgZm9pcyBsYSBjb3BpZSBkZSB0cmF2YWlsIG5ldHRvecOpZSwgbGFuY2V6IFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBlbiB0cmFpbiBkJ8OpZGl0ZXIgdW4gY29tbWl0IHBlbmRhbnQgdW4gcmViYXNhZ2UgZGUgbGEgIgorImJyYW5jaGUgJyVzJyBzdXIgJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIiIKKyJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBlbiB0cmFpbiBkJ8OpZGl0ZXIgdW4gY29tbWl0IHBlbmRhbnQgdW4gcmViYXNhZ2UuIgorCisjOiB3dC1zdGF0dXMuYzoxNDA2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBwb3VyIGNvcnJpZ2VyIGxlIGNvbW1pdCBhY3R1ZWwpIgorCisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBxdWFuZCB2b3VzIGF2ZXogZWZmZWN0dcOpIHRvdXRlcyB2b3MgIgogIm1vZGlmaWNhdGlvbnMpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzUKLW1zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKLW1zZ3N0ciAiVXRpbGlzZXIgZGVzIHBldGl0cyBwYXF1ZXRzIChwb3VyIGxlcyBjb25uZXhpb25zIGxlbnRlcykiCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiUGljb3JhZ2UgZW4gY291cnMuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzkKLW1zZ2lkICJJbmNsdWRlIHRhZ3MiCi1tc2dzdHIgIkluY2x1cmUgbGVzIG1hcnF1ZXMgKHRhZ3MpIgorIzogd3Qtc3RhdHVzLmM6MTQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBlbiB0cmFpbiBkZSBwaWNvcmVyIGxlIGNvbW1pdCAlcy4iCiAKLSN+IG1zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKLSN+IG1zZ3N0ciAiSW1wb3NzaWJsZSBkJ3V0aWxpc2VyIGxlIHLDqXBlcnRvaXJlIC5naXQ6IgorIzogd3Qtc3RhdHVzLmM6MTQyOQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6lnbGV6IGxlcyBjb25mbGl0cyBwdWlzIGxhbmNleiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgogCi0jfiBtc2dpZCAiUHJlZmVyZW5jZXMuLi4iCi0jfiBtc2dzdHIgIlByw6lmw6lyZW5jZXMuLi4iCisjOiB3dC1zdGF0dXMuYzoxNDMyCittc2dpZCAiICAocnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAgKGxhbmNleiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgcG91ciBjb250aW51ZXIpIgogCi0jfiBtc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCi0jfiBtc2dzdHIgIlRvdWpvdXJzIChOZSBwYXMgZmFpcmUgZGUgdGVzdCBkZSBmdXNpb24uKSIKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHRvdXMgbGVzIGNvbmZsaXRzIHNvbnQgcsOpZ2zDqXMgOiBsYW5jZXogXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiBwb3VyIHNhdXRlciBjZSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzkKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHBvdXIgYW5udWxlciBsZSBwaWNvcmFnZSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDkKK21zZ2lkICJSZXZlcnQgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiUsOpdGFibGlzc2VtZW50IGVuIGNvdXJzLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBhY3R1ZWxsZW1lbnQgZW4gdHJhaW4gZGUgcsOpdGFibGlyIGxlIGNvbW1pdCAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTgKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDqWdsZXogbGVzIGNvbmZsaXRzIHB1aXMgbGFuY2V6IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChsYW5jZXogXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiBwb3VyIGNvbnRpbnVlcikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHRvdXMgbGVzIGNvbmZsaXRzIHNvbnQgcsOpZ2zDqXMgOiBsYW5jZXogXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjYKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJldmVydCAtLXNraXBcIiBwb3VyIHNhdXRlciBjZSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHBvdXIgYW5udWxlciBsZSByw6l0YWJsaXNzZW1lbnQpIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBlbiBjb3VycyBkZSBiaXNzZWN0aW9uLCBkZXB1aXMgbGEgYnJhbmNoZSAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4MgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIlZvdXMgw6p0ZXMgZW4gY291cnMgZGUgYmlzc2VjdGlvbi4iCisKKyM6IHd0LXN0YXR1cy5jOjE0ODUKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGJpc2VjdCByZXNldFwiIHBvdXIgcmV2ZW5pciDDoCBsYSBicmFuY2hlIGQnb3JpZ2luZSkiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJTdXIgbGEgYnJhbmNoZSAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJyZWJhc2FnZSBpbnRlcmFjdGlmIGVuIGNvdXJzIDsgc3VyICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzYWdlIGVuIGNvdXJzIDsgc3VyICIKKworIzogd3Qtc3RhdHVzLmM6MTcxMworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIkFjdHVlbGxlbWVudCBzdXIgYXVjdW4gYnJhbmNoZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MzAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiVmFsaWRhdGlvbiBpbml0aWFsZSIKKworIzogd3Qtc3RhdHVzLmM6MTczMQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IgorbXNnc3RyICJBdWN1biBjb21taXQiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkZpY2hpZXJzIG5vbiBzdWl2aXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDcKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICJGaWNoaWVycyBpZ25vcsOpcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiTCfDqW51bcOpcmF0aW9uIGRlcyBmaWNoaWVycyBub24gc3VpdmlzIGEgZHVyw6kgJS4yZiBzZWNvbmRlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorInBldXQgbCdhY2PDqWzDqXJlciwgbWFpcyB2b3VzIGRldmV6IGFsb3JzIGZhaXJlIGF0dGVudGlvbiDDoCBuZSBwYXNcbiIKKyJvdWJsaWVyIGQnYWpvdXRlciBsZXMgbm91dmVhdXggZmljaGllcnMgcGFyIHZvdXMtbcOqbWUgKHZvaXIgJ2dpdCBoZWxwICIKKyJzdGF0dXMnKS4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiRmljaGllcnMgbm9uIHN1aXZpcyBub24gYWZmaWNow6lzJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKHV0aWxpc2V6IC11IHBvdXIgYWZmaWNoZXIgbGVzIGZpY2hpZXJzIG5vbiBzdWl2aXMpIgorCisjOiB3dC1zdGF0dXMuYzoxNzY1Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiQXVjdW5lIG1vZGlmaWNhdGlvbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIKK21zZ3N0ciAiIgorImF1Y3VuZSBtb2RpZmljYXRpb24gbidhIMOpdMOpIGFqb3V0w6llIMOgIGxhIHZhbGlkYXRpb24gKHV0aWxpc2V6IFwiZ2l0IGFkZFwiIG91ICIKKyJcImdpdCBjb21taXQgLWFcIilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICJhdWN1bmUgbW9kaWZpY2F0aW9uIGFqb3V0w6llIMOgIGxhIHZhbGlkYXRpb25cbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisiYXVjdW5lIG1vZGlmaWNhdGlvbiBham91dMOpZSDDoCBsYSB2YWxpZGF0aW9uIG1haXMgZGVzIGZpY2hpZXJzIG5vbiBzdWl2aXMgIgorInNvbnQgcHLDqXNlbnRzICh1dGlsaXNleiBcImdpdCBhZGRcIiBwb3VyIGxlcyBzdWl2cmUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50XG4iCittc2dzdHIgIiIKKyJhdWN1bmUgbW9kaWZpY2F0aW9uIGFqb3V0w6llIMOgIGxhIHZhbGlkYXRpb24gbWFpcyBkZXMgZmljaGllcnMgbm9uIHN1aXZpcyAiCisic29udCBwcsOpc2VudHNcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorInJpZW4gw6AgdmFsaWRlciAoY3LDqWV6L2NvcGlleiBkZXMgZmljaGllcnMgZXQgdXRpbGlzZXogXCJnaXQgYWRkXCIgcG91ciBsZXMgIgorInN1aXZyZSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgInJpZW4gw6AgdmFsaWRlclxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgInJpZW4gw6AgdmFsaWRlciAodXRpbGlzZXogLXUgcG91ciBhZmZpY2hlciBsZXMgZmljaGllcnMgbm9uIHN1aXZpcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgInJpZW4gw6AgdmFsaWRlciwgbGEgY29waWUgZGUgdHJhdmFpbCBlc3QgcHJvcHJlXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE5MDUKK21zZ2lkICJObyBjb21taXRzIHlldCBvbiAiCittc2dzdHIgIkVuY29yZSBhdWN1biBjb21taXQgc3VyICIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKGF1Y3VuZSBicmFuY2hlKSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAiZGlmZsOpcmVudCIKKworIzogd3Qtc3RhdHVzLmM6MTk0MiB3dC1zdGF0dXMuYzoxOTUwCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiZGVycmnDqHJlICIKKworIzogd3Qtc3RhdHVzLmM6MTk0NSB3dC1zdGF0dXMuYzoxOTQ4Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJkZXZhbnQgIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGFjdGlvbiBpcyBlLmcuICJwdWxsIHdpdGggcmViYXNlIgorIzogd3Qtc3RhdHVzLmM6MjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlICVzwqA6IHZvdXMgYXZleiBkZXMgbW9kaWZpY2F0aW9ucyBub24gaW5kZXjDqWVzLiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3NgorbXNnaWQgImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiZGUgcGx1cywgdm90cmUgaW5kZXggY29udGllbnQgZGVzIG1vZGlmaWNhdGlvbnMgbm9uIHZhbGlkw6llcy4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIlcyBpbXBvc3NpYmxlwqA6IHZvdHJlIGluZGV4IGNvbnRpZW50IGRlcyBtb2RpZmljYXRpb25zIG5vbiB2YWxpZMOpZXMuIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIsOpY2hlYyBwb3VyIGTDqWxpZXIgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyNgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPGNoZW1pbj4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiw6l0YXQgZGUgZGlmZiBpbmF0dGVuZHUgJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTIgYnVpbHRpbi9jb21taXQuYzoyODgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBtaXNlIMOgIGpvdXIgZGVzIGZpY2hpZXJzIgorCisjOiBidWlsdGluL2FkZC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJzdXBwcmVzc2lvbiBkZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc3Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgbm9uIGluZGV4w6llcyBhcHLDqHMgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbCdpbmRleCA6IgorCisjOiBidWlsdGluL2FkZC5jOjI1MiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyICclcycgZW4gw6ljcml0dXJlLiIKKworIzogYnVpbHRpbi9hZGQuYzoyNjcKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjI3MAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWRpdGlvbiBkdSBwYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiU3RhdCBkZSAnJXMnIGltcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc1Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJQYXRjaCB2aWRlLiBBYmFuZG9uLiIKKworIzogYnVpbHRpbi9hZGQuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdhcHBsaXF1ZXIgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyODgKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKyJMZXMgY2hlbWlucyBzdWl2YW50cyBzb250IGlnbm9yw6lzIHBhciB1biBkZSB2b3MgZmljaGllcnMgLmdpdGlnbm9yZSA6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA4IGJ1aWx0aW4vY2xlYW4uYzo5MTAgYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL212LmM6MTI0CisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU2IGJ1aWx0aW4vcHVsbC5jOjIyMyBidWlsdGluL3B1c2guYzo1NDgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM0NCBidWlsdGluL3JtLmM6MjQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAic2ltdWxlciBsJ2FjdGlvbiIKKworIzogYnVpbHRpbi9hZGQuYzozMTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICJzw6lsZWN0aW9uIGludGVyYWN0aXZlIgorCisjOiBidWlsdGluL2FkZC5jOjMxMiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MiBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgInPDqWxlY3Rpb24gaW50ZXJhY3RpdmUgZGVzIHNlY3Rpb25zIgorCisjOiBidWlsdGluL2FkZC5jOjMxMworbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAiw6lkaXRpb24gZHUgZGlmZiBhY3R1ZWwgZXQgYXBwbGljYXRpb24iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE0Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJwZXJtZXR0cmUgbCdham91dCBkZSBmaWNoaWVycyBpZ25vcsOpcyIKKworIzogYnVpbHRpbi9hZGQuYzozMTUKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAibWV0dHJlIMOgIGpvdXIgbGVzIGZpY2hpZXJzIHN1aXZpcyIKKworIzogYnVpbHRpbi9hZGQuYzozMTYKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgIiIKKyJyZW5vcm1hbGlzZXIgbGVzIGZpbnMgZGUgbGlnbmVzIChFT0wpIGRlcyBmaWNoaWVycyBzdWl2aXMgKGltcGxpcXVlIC11KSIKKworIzogYnVpbHRpbi9hZGQuYzozMTcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgImVucmVnaXN0cmVyIHNldWxlbWVudCBsZSBmYWl0IHF1ZSBsZSBjaGVtaW4gc2VyYSBham91dMOpIHBsdXMgdGFyZCIKKworIzogYnVpbHRpbi9hZGQuYzozMTgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgImFqb3V0ZXIgbGVzIG1vZGlmaWNhdGlvbnMgZGUgdG91cyBsZXMgZmljaGllcnMgc3VpdmlzIGV0IG5vbiBzdWl2aXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmVyIGxlcyBjaGVtaW5zIGVmZmFjw6lzIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbCAoaWRlbnRpcXVlIMOgIC0tbm8tYWxsKSIKKworIzogYnVpbHRpbi9hZGQuYzozMjMKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIm5lIHBhcyBham91dGVyLCBqdXN0ZSByYWZyYcOuY2hpciBsJ2luZGV4IgorCisjOiBidWlsdGluL2FkZC5jOjMyNAorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIiIKKyJzYXV0ZXIgc2V1bGVtZW50IGxlcyBmaWNoaWVycyBxdWkgbmUgcGV1dmVudCBwYXMgw6p0cmUgYWpvdXTDqXMgZHUgZmFpdCAiCisiZCdlcnJldXJzIgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAidsOpcmlmaWVyIHNpIGRlcyBmaWNoaWVycyAtIG3Dqm1lIG1hbnF1YW50cyAtIHNvbnQgaWdub3LDqXMsIMOgIHZpZGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI3IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwNAorbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICJvdXRyZXBhc3NlciBsZSBiaXQgZXjDqWN1dGFibGUgcG91ciBsZXMgZmljaGllcnMgbGlzdMOpcyIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgImF2ZXJ0aXIgbG9ycyBkZSBsJ2Fqb3V0IGQndW4gZMOpcMO0dCBlbWJhcnF1w6kiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiVm91cyBhdmV6IGFqb3V0w6kgdW4gYXV0cmUgZMOpcMO0dCBnaXQgZGFucyB2b3RyZSBkw6lww7R0IGFjdHVlbC5cbiIKKyJMZXMgY2xvbmVzIGR1IGTDqXDDtHQgY29udGVuZXVyIG5lIGNvbnRpZW5kcm9ucyBwYXMgbGUgY29udGVudVxuIgorImR1IGTDqXDDtHQgZW1iYXJxdcOpIGV0IG5lIHNhdXJvbnQgcGFzIGNvbW1lbnQgbCdvYnRlbmlyLlxuIgorIlNpIHZvdXMgdm91bGlleiBham91dGVyIHVuIHNvdXMtbW9kdWxlLCB1dGlsaXNlesKgOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJTaSB2b3VzIGF2ZXogYWpvdXTDqSBjZSBjaGVtaW4gcGFyIGVycmV1ciwgdm91cyBwb3V2ZXogbGVcbiIKKyJzdXBwcmltZXIgZGUgbCdpbmRleCBhdmVjwqA6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJSw6lmw6lyZXotdm91cyDDoCBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIHBvdXIgcGx1cyBkJ2luZm9ybWF0aW9uLiIKKworIzogYnVpbHRpbi9hZGQuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiZMOpcMO0dCBnaXQgZW1iYXJxdcOpIGFqb3V0w6nCoDogJXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIlV0aWxpc2V6IC1mIHNpIHZvdXMgdm91bGV6IHLDqWVsbGVtZW50IGxlcyBham91dGVyLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQwMAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsJ2Fqb3V0IGRlIGZpY2hpZXJzIgorCisjOiBidWlsdGluL2FkZC5jOjQyOCBidWlsdGluL2NvbW1pdC5jOjM0OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgZXN0IGluY29tcGF0aWJsZSBhdmVjIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzo0MzQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ2Cittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIGV0IC11IHNvbnQgbXV0dWVsbGVtZW50IGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ5Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiIgorIkwnb3B0aW9uIC0taWdub3JlLW1pc3NpbmcgbmUgcGV1dCDDqnRyZSB1dGlsaXPDqWUgcXUnZW4gY29tcGzDqW1lbnQgZGUgLS1kcnktcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIkxlIHBhcmFtw6h0cmUgJyVzJyBkZSAtLWNobW9kIGRvaXQgw6p0cmUgc29pdCAteCBzb2l0ICt4IgorCisjOiBidWlsdGluL2FkZC5jOjQ3MSBidWlsdGluL2NoZWNrb3V0LmM6MTY0OCBidWlsdGluL2NvbW1pdC5jOjM1NAorIzogYnVpbHRpbi9yZXNldC5jOjMyNworbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgZXN0IGluY29tcGF0aWJsZSBhdmVjIHBhdGhzcGVjIGFyZ3VtZW50cyIKKworIzogYnVpbHRpbi9hZGQuYzo0NzggYnVpbHRpbi9jaGVja291dC5jOjE2NjAgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIG7DqWNlc3NpdGUgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJSaWVuIGRlIHNww6ljaWZpw6ksIHJpZW4gbidhIMOpdMOpIGFqb3V0w6kuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICJWb3VzIHZvdWxpZXogc8O7cmVtZW50IGRpcmUgJ2dpdCBhZGQgLicgP1xuIgorCisjOiBidWlsdGluL2FtLmM6MzQ3Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsJ2F1dGV1ciBkdSBzY3JpcHQiCisKKyM6IGJ1aWx0aW4vYW0uYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIKK21zZ3N0ciAiJyVzJyBhIMOpdMOpIGVmZmFjw6kgcGFyIGxlIGNyb2NoZXQgYXBwbHlwYXRjaC1tc2ciCisKKyM6IGJ1aWx0aW4vYW0uYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJMaWduZSBlbiBlbnRyw6llIG1hbGZvcm3DqWUgOiAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjb3BpZXIgbGVzIG5vdGVzIGRlICclcycgdmVycyAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NTM3Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgZnNlZWsiCisKKyM6IGJ1aWx0aW4vYW0uYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBwYXRjaCAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NzkwCittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIlNldWxlbWVudCB1bmUgc8OpcmllIGRlIHBhdGNocyBTdEdJVCBwZXV0IMOqdHJlIGFwcGxpcXXDqWUgw6AgbGEgZm9pcyIKKworIzogYnVpbHRpbi9hbS5jOjgzOAorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJob3JvZGF0YWdlIGludmFsaWRlIgorCisjOiBidWlsdGluL2FtLmM6ODQzIGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAibGlnbmUgZGUgRGF0ZSBpbnZhbGlkZSIKKworIzogYnVpbHRpbi9hbS5jOjg1MAorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICJkw6ljYWxhZ2UgaG9yYWlyZSBpbnZhbGlkZSIKKworIzogYnVpbHRpbi9hbS5jOjk0MworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiw4ljaGVjIGRlIGTDqXRlY3Rpb24gZHUgZm9ybWF0IGR1IHBhdGNoLiIKKworIzogYnVpbHRpbi9hbS5jOjk0OCBidWlsdGluL2Nsb25lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBsYSBjcsOpYXRpb24gZHUgcsOpcGVydG9pcmUgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjk1MworbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiw4ljaGVjIGRlIGTDqWNvdXBhZ2UgZGVzIHBhdGNocy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICJRdWFuZCB2b3VzIGF2ZXogcsOpc29sdSBjZSBwcm9ibMOobWUsIGxhbmNleiBcIiVzIC0tY29udGludWVcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiU2kgdm91cyBwcsOpZsOpcmV6IHBsdXTDtHQgc2F1dGVyIGNlIHBhdGNoLCBsYW5jZXogXCIlcyAtLXNraXBcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIlBvdXIgcmVzdGF1cmVyIGxhIGJyYW5jaGUgb3JpZ2luYWxlIGV0IGFycsOqdGVyIGRlIHBhdGNoZXIsIGxhbmNleiBcIiVzIC0tIgorImFib3J0XCIuIgorCisjOiBidWlsdGluL2FtLmM6MTE2OQorbXNnaWQgIlBhdGNoIHNlbnQgd2l0aCBmb3JtYXQ9Zmxvd2VkOyBzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzIG1pZ2h0IGJlIGxvc3QuIgorbXNnc3RyICIiCisiUnVzdGluZSBlbnZvecOpZSBhdmVjIGZvcm1hdD1mbG93ZWTCoDsgbGVzIGVzcGFjZXMgZW4gZmluIGRlIGxpZ25lIHBldXZlbnQgIgorIsOqdHJlIHBlcmR1cy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTk3Cittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJMZSBwYXRjaCBhY3R1ZWwgZXN0IHZpZGUuIgorCisjOiBidWlsdGluL2FtLmM6MTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAibGlnbmUgZCdhdXRldXIgbWFucXVhbnRlIGRhbnMgbGUgY29tbWl0ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgImxpZ25lIGQnaWRlbnRpZmljYXRpb24gaW52YWxpZGUgOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTQ4NAorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKyJMZSBkw6lww7R0IG4nYSBwYXMgbGVzIGJsb2JzIG7DqWNlc3NhaXJlcyBwb3VyIHVuIHJldG91ciDDoCB1bmUgZnVzaW9uIMOgIDMgIgorInBvaW50cy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorIlV0aWxpc2F0aW9uIGRlIGwnaW5mb3JtYXRpb24gZGUgbCdpbmRleCBwb3VyIHJlY29uc3RydWlyZSB1biBhcmJyZSBkZSBiYXNlLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTUwNQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyJBdmV6LXZvdXMgw6lkaXTDqSBsZSBwYXRjaCDDoCBsYSBtYWluID9cbiIKKyJJbCBuZSBzJ2FwcGxpcXVlIHBhcyBhdXggYmxvYnMgZW5yZWdpc3Ryw6lzIGRhbnMgc29uIGluZGV4LiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTEKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIlJldG91ciDDoCB1biBwYXRjaCBkZSBsYSBiYXNlIGV0IGZ1c2lvbiDDoCAzIHBvaW50cy4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MzcKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICLDiWNoZWMgZCdpbnTDqWdyYXRpb24gZGVzIG1vZGlmaWNhdGlvbnMuIgorCisjOiBidWlsdGluL2FtLmM6MTU2OQorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgImFwcGxpY2F0aW9uIMOgIHVuIGhpc3RvcmlxdWUgdmlkZSIKKworIzogYnVpbHRpbi9hbS5jOjE2MTYgYnVpbHRpbi9hbS5jOjE2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvbnRpbnVlciA6ICVzIG4nZXhpc3RlIHBhcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjM4Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJMZSBjb3JwcyBkZSBsYSB2YWxpZGF0aW9uIGVzdCA6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICJBcHBsaXF1ZXIgPyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxswqA6ICIKKworIzogYnVpbHRpbi9hbS5jOjE2OTUgYnVpbHRpbi9jb21taXQuYzozOTQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllciBkJ2luZGV4IgorCisjOiBidWlsdGluL2FtLmM6MTY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIkluZGV4IHNhbGUgOiBpbXBvc3NpYmxlIGQnYXBwbGlxdWVyIGRlcyBwYXRjaHMgKHNhbGVzIDogJXMpIgorCisjOiBidWlsdGluL2FtLmM6MTczOSBidWlsdGluL2FtLmM6MTgwNworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJS4qcyIKK21zZ3N0ciAiQXBwbGljYXRpb24gZGUgICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzU2Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJQYXMgZGUgY2hhbmdlbWVudCAtLSBQYXRjaCBkw6lqw6AgYXBwbGlxdcOpLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgImxlIHBhdGNoIGEgw6ljaG91w6kgw6AgJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NjYKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCcgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giCittc2dzdHIgIiIKKyJVdGlsaXNleiAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyBwb3VyIHZpc3VhbGlzZXIgbGUgcGF0Y2ggZW4gw6ljaGVjIgorCisjOiBidWlsdGluL2FtLmM6MTgxMAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIkF1Y3VuIGNoYW5nZW1lbnQgLSBhdmV6LXZvdXMgb3VibGnDqSBkJ3V0aWxpc2VyICdnaXQgYWRkJyA/XG4iCisiUydpbCBuJ3kgYSBwbHVzIHJpZW4gw6AgaW5kZXhlciwgaWwgc2UgcGV1dCBxdSdhdXRyZSBjaG9zZSBhaXQgZMOpasOgXG4iCisiaW50cm9kdWl0IGxlcyBtw6ptZXMgY2hhbmdlbWVudHMgOyB2b3VzIHBvdXJyaWV6IGF2b2lyIGVudmllIGRlIHNhdXRlciBjZSAiCisicGF0Y2guIgorCisjOiBidWlsdGluL2FtLmM6MTgxNworbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIllvdSBzaG91bGQgJ2dpdCBhZGQnIGVhY2ggZmlsZSB3aXRoIHJlc29sdmVkIGNvbmZsaWN0cyB0byBtYXJrIHRoZW0gYXMgIgorInN1Y2guXG4iCisiWW91IG1pZ2h0IHJ1biBgZ2l0IHJtYCBvbiBhIGZpbGUgdG8gYWNjZXB0IFwiZGVsZXRlZCBieSB0aGVtXCIgZm9yIGl0LiIKK21zZ3N0ciAiIgorIlZvdXMgYXZleiBlbmNvcmUgZGVzIGNoZW1pbiBub24tZnVzaW9ubsOpcyBkYW5zIHZvdHJlIGluZGV4LlxuIgorIlZvdXMgZGV2cmlleiBsYW5jZXIgJ2dpdCBhZGQnIHN1ciBjaGFxdWUgY29uZmxpdCByw6lzb2x1IHBvdXIgbGVzIG1hcnF1ZXIgIgorImNvbW1lIHRlbC5cbiIKKyJWb3VzIHBvdXZleiBsYW5jZXIgJ2dpdCBybScgc3VyIHVuIGZpY2hpZXIgXCJzdXBwcmltw6kgcGFyIGV1eFwiIHBvdXIgIgorImFjY2VwdGVyIHNvbiDDqXRhdC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTI0IGJ1aWx0aW4vYW0uYzoxOTI4IGJ1aWx0aW4vYW0uYzoxOTQwIGJ1aWx0aW4vcmVzZXQuYzozNDYKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGwnb2JqZXQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTc2Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICLDqWNoZWMgZHUgbmV0dG95YWdlIGRlIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDIwCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJWb3VzIHNlbWJsZXogYXZvaXIgZMOpcGxhY8OpIGxhIEhFQUQgZGVwdWlzIGxlIGRlcm5pZXIgw6ljaGVjIGRlICdhbScuXG4iCisiUGFzIGRlIHJldG91ciDDoCBPUklHX0hFQUQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAiVmFsZXVyIGludmFsaWRlIHBvdXIgLS1wYXRjaC1mb3JtYXQgOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIxNTMKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTU0Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjE2MAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJleMOpY3V0aW9uIGludGVyYWN0aXZlIgorCisjOiBidWlsdGluL2FtLmM6MjE2MgorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJvcHRpb24gaGlzdG9yaXF1ZSAtLSBuby1vcCIKKworIzogYnVpbHRpbi9hbS5jOjIxNjQKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAicGVybWV0dHJlIGRlIHJldmVuaXIgw6AgdW5lIGZ1c2lvbiDDoCAzIHBvaW50cyBzaSBuw6ljZXNzYWlyZSIKKworIzogYnVpbHRpbi9hbS5jOjIxNjUgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTEKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAiw6p0cmUgc2lsZW5jaWV1eCIKKworIzogYnVpbHRpbi9hbS5jOjIxNjcKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJham91dGVyIHVuZSBsaWduZSBTaWduZWQtb2ZmLWJ5IGF1IG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9hbS5jOjIxNzAKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAicmVjb2RlciBlbiB1dGYtOCAocGFyIGTDqWZhdXQpIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NlciBsJ29wdGlvbiAtayDDoCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc0Cittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAicGFzc2VyIGwnb3B0aW9uIC1iIMOgIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzYKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJwYXNzZXIgbCdvcHRpb24gLW0gw6AgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3OAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgInBhc3NlciBsJ29wdGlvbiAtLWtlZXAtY3Igw6AgZ2l0LW1haWxzcGxpdCBmcG91ciBsZSBmb3JtYXQgbWJveCIKKworIzogYnVpbHRpbi9hbS5jOjIxODEKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAiIgorIm5lIHBhcyBwYXNzZXIgbCdvcHRpb24gLS1rZWVwLWNyIMOgIGdpdC1tYWlsc3BsaXQgaW5kw6lwZW5kYW1tZW50IGRlIGFtLmtlZXBjciIKKworIzogYnVpbHRpbi9hbS5jOjIxODQKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgInJldGlyZXIgdG91dCBsZSBjb250ZW51IGF2YW50IGxhIGxpZ25lIGRlcyBjaXNlYXV4IgorCisjOiBidWlsdGluL2FtLmM6MjE4NiBidWlsdGluL2FtLmM6MjE4OSBidWlsdGluL2FtLmM6MjE5MiBidWlsdGluL2FtLmM6MjE5NQorIzogYnVpbHRpbi9hbS5jOjIxOTggYnVpbHRpbi9hbS5jOjIyMDEgYnVpbHRpbi9hbS5jOjIyMDQgYnVpbHRpbi9hbS5jOjIyMDcKKyM6IGJ1aWx0aW4vYW0uYzoyMjEzCittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAibGUgcGFzc2VyIGp1c3F1J8OgIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyMDMgYnVpbHRpbi9jb21taXQuYzoxMzg2IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc2IGJ1aWx0aW4vZ3JlcC5jOjg4MyBidWlsdGluL21lcmdlLmM6MjQ5CisjOiBidWlsdGluL3B1bGwuYzoxNjAgYnVpbHRpbi9wdWxsLmM6MjE5IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjIwOSBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgImZvcm1hdCIKKworIzogYnVpbHRpbi9hbS5jOjIyMTAKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgImZvcm1hdCBkZSBwcsOpc2VudGF0aW9uIGRlcyBwYXRjaHMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJzdXJjaGFyZ2VyIGxlIG1lc3NhZ2UgZCdlcnJldXIgbG9ycyBkJ3VuIMOpY2hlYyBkJ2FwcGxpY2F0aW9uIGRlIHBhdGNoIgorCisjOiBidWlsdGluL2FtLmM6MjIxOAorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgImNvbnRpbnVlciDDoCBhcHBsaXF1ZXIgbGVzIHBhdGNocyBhcHLDqHMgcsOpc29sdXRpb24gZCd1biBjb25mbGl0IgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICJzeW5vbnltZXMgZGUgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJzYXV0ZXIgbGUgcGF0Y2ggY291cmFudCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjcKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICIiCisicmVzdGF1cmVyIGxhIGJyYW5jaGUgb3JpZ2luYWxlIGV0IGFiYW5kb25uZXIgbGVzIGFwcGxpY2F0aW9ucyBkZSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiYWJhbmRvbm5lIGwnb3DDqXJhdGlvbiBkZSBwYXRjaCBtYWlzIGdhcmRlIEhFQUQgb8O5IGlsIGVzdC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMzCittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZC4iCittc2dzdHIgImFmZmljaGVyIGxlIHBhdGNoIGVuIGNvdXJzIGQnYXBwbGljYXRpb24uIgorCisjOiBidWlsdGluL2FtLmM6MjIzNworbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAibWVudGlyIHN1ciBsYSBkYXRlIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM5Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAidXRpbGlzZXIgbCdob3JvZGF0YWdlIGFjdHVlbCBwb3VyIGxhIGRhdGUgZCdhdXRldXIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQxIGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjAgYnVpbHRpbi9jb21taXQuYzoxNTA3CisjOiBidWlsdGluL21lcmdlLmM6Mjg2IGJ1aWx0aW4vcHVsbC5jOjE5NCBidWlsdGluL3JlYmFzZS5jOjUwOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTEzIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE3IGJ1aWx0aW4vdGFnLmM6NDE4Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJpZC1jbMOpIgorCisjOiBidWlsdGluL2FtLmM6MjI0MiBidWlsdGluL3JlYmFzZS5jOjUxMCBidWlsdGluL3JlYmFzZS5jOjE1MTQKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICJzaWduZXIgbGVzIGNvbW1pdHMgYXZlYyBHUEciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ1Cittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIih1dGlsaXNhdGlvbiBpbnRlcm5lIHBvdXIgZ2l0LXJlYmFzZSkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYzCittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisiTCdvcHRpb24gLWIvLS1iaW5hcnkgbmUgZmFpdCBwbHVzIHJpZW4gZGVwdWlzIGxvbmd0ZW1wcyxcbiIKKyJldCBlbGxlIHNlcmEgc3VwcHJpbcOpZS4gVmV1aWxsZXogbmUgcGx1cyBsJ3V0aWxpc2VyLiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIsOpY2hlYyDDoCBsYSBsZWN0dXJlIGRlIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorImxlIHLDqXBlcnRvaXJlIHByw6ljw6lkZW50IGRlIHJlYmFzYWdlICVzIGV4aXN0ZSB0b3Vqb3VycyBtYWlzIG1ib3ggZG9ubsOpZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisiUsOpcGVydG9pcmUgYWJhbmRvbm7DqSAlcyB0cm91dsOpLlxuIgorIlV0aWxpc2V6IFwiZ2l0IGFtIC0tYWJvcnRcIiBwb3VyIGxlIHN1cHByaW1lci4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE1Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiIgorIlBhcyBkZSByw6lzb2x1dGlvbiBkZSBsJ29ww6lyYXRpb24gZW4gY291cnMsIG5vdXMgbmUgc29tbWVzIHBhcyBkYW5zIHVuZSAiCisicmVwcmlzZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgImxlIG1vZGUgaW50ZXJhY3RpZiByZXF1aWVydCBkZXMgcnVzdGluZXMgc3VyIGxhIGxpZ25lIGRlIGNvbW1hbmRlIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgImNyw6lhdGlvbiBpbXBvc3NpYmxlIGR1IGZpY2hpZXIgZCdhcmNoaXZlICclcyciCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZWRpcmlnZXIgbGEgc29ydGllIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlIDogRMOpcMO0dCBkaXN0YW50IHNhbnMgVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBhcmNoaXZlIDogQUNLL05BQ0sgYXR0ZW5kdSwgcGFxdWV0IGRlIG5ldHRveWFnZSByZcOndSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlIDogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlIDogZXJyZXVyIGRlIHByb3RvY29sZSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjkKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgOiB2aWRhZ2UgYXR0ZW5kdSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0IC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8dGVybWUtcG91ci1tYXV2YWlzPiA8dGVybWUtcG91ci1ib24+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPMOpdGF0PiA8csOpdmlzaW9uPiA8dGVybWUtcG91ci0iCisiYm9uPiA8dGVybWUtcG91ci1tYXV2YWlzPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI3Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kZT4gPHRlcm1lLXBvdXItYm9uPiAiCisiPHRlcm1lLXBvdXItbWF1dmFpcz4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDxnb29kX3Rlcm0+IDxiYWRfdGVybT4gWzx0ZXJtPl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8dGVybWUtcG91ci1ib24+IDx0ZXJtZS1wb3VyLW1hdXZhaXM+ICIKKyJbPHRlcm0+XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8IC0tIgorInRlcm0tbmV3XSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC10ZXJtcyBbLS10ZXJtLWdvb2QgfCAtLXRlcm0tb2xkIHwgLS10ZXJtLWJhZCB8IC0tIgorInRlcm0tbmV3XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMwCittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH0iCisiPTx0ZXJtPl1bLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm1lPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybWU+XVstLW5vLWNoZWNrb3V0XSBbPG1hdXZhaXM+IFs8Ym9uPi4uLl1dIFstLV0gWzxjaGVtaW5zPi4uLl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRlcm0iCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIHRlcm1lIHZhbGlkZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICclcycgYXMgYSB0ZXJtIgorbXNnc3RyICJpbXBvc3NpYmxlIGQndXRpbGlzZXIgbGEgY29tbWFuZGUgaW5jbHVzZSAnJXMnIGNvbW1lIHRlcm1lIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1vZGlmaWVyIGxhIHNpZ25pZmljYXRpb24gZHUgdGVybWUgJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExMQorbXNnaWQgInBsZWFzZSB1c2UgdHdvIGRpZmZlcmVudCB0ZXJtcyIKK21zZ3N0ciAidmV1aWxsZXogdXRpbGlzZXIgZGV1eCB0ZXJtZXMgZGlmZsOpcmVudHMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTgKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0aGUgZmlsZSBCSVNFQ1RfVEVSTVMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBCSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIlBhcyBkZSBiaXNzZWN0aW9uIGVuIGNvdXJzLlxuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBjb21taXQgdmFsaWRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKyLDiWNoZWMgZCdleHRyYWN0aW9uIGRlIGxhIEhFQUQgZCdvcmlnaW5lICclcycuIEVzc2F5ZXogJ2dpdCBiaXNlY3QgcmVzZXQgIgorIjxjb21taXQ+Jy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJXMiCittc2dzdHIgIk1hdXZhaXMgYXJndW1lbnQgcG91ciBiaXNlY3Rfd3JpdGXCoDogJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZ2V0IHRoZSBvaWQgb2YgdGhlIHJldiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb2J0ZW5pciBsJ29pZCBkZSBsYSByw6l2aXNpb24gJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICVzLyVzIGJpc2VjdCIKK21zZ3N0ciAiQ29tbWFuZGUgaW52YWxpZGXCoDogdm91cyDDqnRlcyBhY3R1ZWxsZW1lbnQgZGFucyB1bmUgYmlzc2VjdGlvbiAlcy8lcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJWb3VzIGRldmV6IG1lIGRvbm5lciBhdSBtb2lucyB1bmUgcsOpdmlzaW9uICVzIGV0IHVuZSByw6l2aXNpb24gJXMuXG4iCisiVm91cyBwb3V2ZXogdXRpbGlzZXIgXCJnaXQgYmlzZWN0ICVzXCIgZXQgXCJnaXQgYmlzZWN0ICVzXCIgcG91ciBjZWxhLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIlZvdXMgZGV2ZXogZMOpbWFycmVyIGF2ZWMgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiUHVpcyB2b3VzIGRldmV6IG1lIGRvbm5lciBhdSBtb2lucyB1bmUgcsOpdmlzaW9uICVzIGV0IHVuZSByw6l2aXNpb24gJXMuXG4iCisiVm91cyBwb3V2ZXogdXRpbGlzZXIgXCJnaXQgYmlzZWN0ICVzXCIgZXQgXCJnaXQgYmlzZWN0ICVzXCIgcG91ciBjZWxhLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNlY3Rpbmcgb25seSB3aXRoIGEgJXMgY29tbWl0IgorbXNnc3RyICJBdHRlbnRpb24gOiBiaXNzZWN0aW9uIGF2ZWMgc2V1bGVtZW50IHVuZSB2YWxpZGF0aW9uICVzIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzMwCittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIkNvbmZpcm1lei12b3VzIFtZL25dID8gIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mzc3Cittc2dpZCAibm8gdGVybXMgZGVmaW5lZCIKK21zZ3N0ciAiYXVjdW4gdGVybWUgZMOpZmluaSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjdXJyZW50IHRlcm1zIGFyZSAlcyBmb3IgdGhlIG9sZCBzdGF0ZVxuIgorImFuZCAlcyBmb3IgdGhlIG5ldyBzdGF0ZS5cbiIKK21zZ3N0ciAiIgorIlZvcyB0ZXJtZXMgYWN0dWVscyBzb250ICVzIHBvdXIgbCfDqXRhdCBhbmNpZW5cbiIKKyJldCAlcyBwb3VyIGxlIG5vdXZlbCDDqXRhdC5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorImFyZ3VtZW50IGludmFsaWRlICVzIHBvdXIgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIkxlcyBvcHRpb25zIHN1cHBvcnTDqWVzIHNvbnTCoDogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBldCAtLXRlcm0tYmFkfC0tdGVybS0iCisibmV3LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICJvcHRpb24gbm9uIHJlY29ubnVlwqA6ICVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIiclcycgbmUgc2VtYmxlIMOqdHJlIHVuZSByw6l2aXNpb24gdmFsaWRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTEyCittc2dpZCAiYmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICJtYXV2YWlzZSBIRUFEIC0gaidhaSBiZXNvaW4gZCd1bmUgSEVBRCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisiTCdleHRyYWN0aW9uIGRlICclcycgYSDDqWNob3XDqS4gRXNzYXlleiAnZ2l0IGJpc2VjdCBzdGFydCA8YnJhbmNoZS12YWxpZGU+Jy4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NDgKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICJyZWZ1cyBkZSBiaXNzZWN0ZXIgc3VyIHVuIGFyYnJlICdjZy1zZWVrZWQnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUxCittc2dpZCAiYmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAibWF1dmFpc2UgSEVBRCAtIHLDqWbDqXJlbmNlIHN5bWJvbGlxdWUgZG91dGV1c2UiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWY6ICclcyciCittc2dzdHIgInLDqWZlcmVuY2UgaW52YWxpZGXCoDogJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMQorbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgImVmZmVjdHVlciAnZ2l0IGJpc2VjdCBuZXh0JyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAiw6ljcmlyZSBsZXMgdGVybWVzIGRhbnMgLmdpdC9CSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgInbDqXJpZmllciBsJ8OpdGF0IGRlIGxhIGJpc3NlY3Rpb24iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIKK21zZ3N0ciAidsOpcmlmaWVyIHNpIGRlcyByw6l2aXNpb25zIHNvbnQgYXR0ZW5kdWVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM5Cittc2dpZCAicmVzZXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAicsOpaW5pdGlhbGlzZXIgbCfDqXRhdCBkZSBsYSBiaXNzZWN0aW9uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQxCittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAiw6ljcmlyZSBsJ8OpdGF0IGRlIGxhIGJpc3NlY3Rpb24gZGFucyBCSVNFQ1RfTE9HIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAidsOpcmlmaWVyIGV0IHLDqWdsZXIgbGVzIHRlcm1lcyBkYW5zIHVuIMOpdGF0IGRlIGxhIGJpc3NlY3Rpb24iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDUKK21zZ2lkICJjaGVjayB3aGV0aGVyIGJhZCBvciBnb29kIHRlcm1zIGV4aXN0IgorbXNnc3RyICJ2w6lyaWZpZXIgc2kgbGVzIHRlcm1lcyBib25zIG91IG1hdXZhaXMgZXhpc3RlbnQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDcKK21zZ2lkICJwcmludCBvdXQgdGhlIGJpc2VjdCB0ZXJtcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIHRlcm1lcyBkZSBiaXNzZWN0aW9uIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ5Cittc2dpZCAic3RhcnQgdGhlIGJpc2VjdCBzZXNzaW9uIgorbXNnc3RyICJkw6ltYXJyZXIgdW5lIHNlc3Npb24gZGUgYmlzc2VjdGlvbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIEJJU0VDVF9IRUFEIGF1IGxpZXUgZCdleHRyYWlyZSBsZSBjb21taXQgYWN0dWVsIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUzCittc2dpZCAibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiCittc2dzdHIgInBhcyBkZSBqb3VybmFsIHBvdXIgQklTRUNUX1dSSVRFIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjcwCittc2dpZCAiLS13cml0ZS10ZXJtcyByZXF1aXJlcyB0d28gYXJndW1lbnRzIgorbXNnc3RyICItLXdyaXRlLXRlcm1zIGV4aWdlIGRldXggYXJndW1lbnRzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njc0Cittc2dpZCAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgcmVxdWlyZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1jbGVhbi1zdGF0ZSBuZSBzdXBwb3J0ZSBhdWN1biBhcmd1bWVudCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4MQorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiLS1iaXNlY3QtcmVzZXQgc3VwcG9ydGUgc29pdCBhdWN1biBhcmd1bWVudCwgc29pdCB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODUKK21zZ2lkICItLWJpc2VjdC13cml0ZSByZXF1aXJlcyBlaXRoZXIgNCBvciA1IGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3Qtd3JpdGUgc3VwcG9ydGUgc29pdCA0IGFyZ3VtZW50cywgc29pdCA1IGFyZ3VtZW50cyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5MQorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIGV4aWdlIDMgYXJndW1lbnRzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njk3Cittc2dpZCAiLS1iaXNlY3QtbmV4dC1jaGVjayByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1uZXh0LWNoZWNrIGV4aWdlIDIgb3UgMyBhcmd1bWVudHMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDMKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIGV4aWdlIDAgb3UgMSBhcmd1bWVudCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMxCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmljaGllcj4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI8b3B0aW9ucy1kZS1yw6l2aXNpb24+IHNvbnQgZG9jdW1lbnTDqXMgZGFucyBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICJjb3VsZXVyIGF0dGVuZHVlwqA6ICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDE2Cittc2dpZCAibXVzdCBlbmQgd2l0aCBhIGNvbG9yIgorbXNnc3RyICJkb2l0IGZpbmlyIGF2ZWMgdW5lIGNvdWxldXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgImNvdWxldXIgaW52YWxpZGUgJyVzJyBkYW5zIGNvbG9yLmJsYW1lLnJlcGVhdGVkbGluZXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAidmFsZXVyIGludmFsaWRlIHBvdXIgYmxhbWUuY29sb3JpbmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICJyw6lmw6lyZW5jZSDDoCBpZ25vcmVyICVzIGludHJvdXZhYmxlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ0Cittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAiIgorIk1vbnRyZXIgbGVzIMOpbMOpbWVudHMgZGUgYmzDom1lIGF1IGZ1ciBldCDDoCBtZXN1cmUgZGUgbGV1ciBkw6ljb3V2ZXJ0ZSwgZGUgIgorIm1hbmnDqHJlIGluY3LDqW1lbnRhbGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb250cmVyIHVuIFNIQS0xIGJsYW5jIHBvdXIgbGVzIGNvbW1pdHMgZGUgbGltaXRlIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ2Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiTmUgcGFzIHRyYWl0ZXIgbGVzIGNvbW1pdHMgcmFjaW5lIGNvbW1lIGRlcyBsaW1pdGVzIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ3Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiTW9udHJlciBsZXMgc3RhdGlzdGlxdWVzIGRlIGNvw7t0IGQnYWN0aXZpdMOpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ4Cittc2dpZCAiRm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJGb3JjZXIgbCdhZmZpY2hhZ2UgZGUgbCfDqXRhdCBkJ2F2YW5jZW1lbnQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDkKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiTW9udHJlciBsZSBzY29yZSBkZSBzb3J0aWUgcG91ciBsZXMgw6lsw6ltZW50cyBkZSBibMOibWUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiTW9udHJlciBsZXMgbm9tcyBkZSBmaWNoaWVyIG9yaWdpbmF1eCAoRMOpZmF1dCA6IGF1dG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUxCittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb250cmVyIGxlcyBudW3DqXJvcyBkZSBsaWduZXMgb3JpZ2luYXV4IChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUyCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiQWZmaWNoZXIgZGFucyB1biBmb3JtYXQgcHJvcGljZSDDoCBsYSBjb25zb21tYXRpb24gcGFyIG1hY2hpbmUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTMKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIkFmZmljaGVyIGVuIGZvcm1hdCBwb3JjZWxhaW5lIGF2ZWMgbCdpbmZvcm1hdGlvbiBkZSBjb21taXQgcGFyIGxpZ25lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVXRpbGlzZXIgbGUgbcOqbWUgbW9kZSBkZSBzb3J0aWUgcXVlIGdpdC1hbm5vdGF0ZSAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGhvcm9kYXRhZ2VzIGJydXRzIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJBZmZpY2hlciBsZXMgbG9uZ3MgU0hBMSBkZSBjb21taXRzIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiU3VwcHJpbWVyIGxlIG5vbSBkZSBsJ2F1dGV1ciBldCBsJ2hvcm9kYXRhZ2UgKETDqWZhdXQgOiBkw6lzYWN0aXbDqSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkFmZmljaGVyIGxlIGNvdXJyaWVsIGRlIGwnYXV0ZXVyIGF1IGxpZXUgZHUgbm9tIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIklnbm9yZXIgbGVzIGRpZmbDqXJlbmNlcyBkJ2VzcGFjZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgInLDqXYiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjAKK21zZ2lkICJJZ25vcmUgPHJldj4gd2hlbiBibGFtaW5nIgorbXNnc3RyICJpZ25vcmUgPHJldj4gcGVuZGFudCBsZSBibMOibWUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjEKK21zZ2lkICJJZ25vcmUgcmV2aXNpb25zIGZyb20gPGZpbGU+IgorbXNnc3RyICJpZ25vcmVyIGxlcyByw6l2aXNpb25zIGxpc3TDqWVzIGRhbnMgPGZpY2hpZXI+IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYyCittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAiIgorImNvbG9yZXIgZGlmZsOpcmVtbWVudCBsZXMgbcOpdGFkb25uw6llcyByZWRvbmRhbnRlcyBhdmVjIGxhIGxpZ25lIHByw6ljw6lkZW50ZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAiY29sb3JpZXIgbGVzIGxpZ25lcyBwYXIgw6JnZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiIgorIkTDqXBlbnNlciBkZXMgY3ljbGVzIHN1cHBsw6ltZW50YWlyZXMgcG91ciB0cm91dmVyIHVuZSBtZWlsbGV1cmUgY29ycmVzcG9uZGFuY2UiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjUKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIiIKKyJVdGlsaXNlciBsZXMgcsOpdmlzaW9ucyBkdSBmaWNoaWVyIDxmaWNoaWVyPiBhdSBsaWV1IGQnYXBwZWxlciBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICJVdGlsaXNlciBsZSBjb250ZW51IGRlIDxmaWNoaWVyPiBjb21tZSBpbWFnZSBmaW5hbGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcgYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgInNjb3JlIgorbXNnc3RyICJzY29yZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIlRyb3V2ZXIgbGVzIGNvcGllcyBkZSBsaWduZSBkYW5zIGV0IGVudHJlIGxlcyBmaWNoaWVycyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIlRyb3V2ZXIgbGVzIG1vdXZlbWVudHMgZGUgbGlnbmUgZGFucyBldCBlbnRyZSBsZXMgZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisiVHJhaXRlciBzZXVsZW1lbnQgbCdpbnRlcnZhbGxlIGRlIGxpZ25lIG4sbSBlbiBjb21tZW7Dp2FudCBsZSBjb21wdGUgw6AgMSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjkyMQorbXNnaWQgIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiCittc2dzdHIgIiIKKyItLXByb2dyZXNzIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgLS1pbmNyZW1lbnRhbCBvdSBsZXMgZm9ybWF0cyAiCisicG9yY2VsYWluZSIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5NzIKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICJpbCB5IGEgMTAgYW5zIGV0IDExIG1vaXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICJsZSBmaWNoaWVyICVzIG4nYSBxdSclbHUgbGlnbmUiCittc2dzdHJbMV0gImxlIGZpY2hpZXIgJXMgbidhIHF1ZSAlbHUgbGlnbmVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIkFzc2lnbmF0aW9uIGRlIGJsw6JtZSBhdXggbGlnbmVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI5Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wdGlvbnNdIFstbF0gWy1mXSA8bm9tLWRlLWJyYW5jaGU+IFs8cG9pbnQtZGUtZMOpcGFydD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxub20tZGUtYnJhbmNoZT4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgIiIKKyJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPGFuY2llbm5lLWJyYW5jaGU+XSA8bm91dmVsbGUtYnJhbmNoZT4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgIiIKKyJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPGFuY2llbm5lLWJyYW5jaGU+XSA8bm91dmVsbGUtYnJhbmNoZT4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisic3VwcHJlc3Npb24gZGUgbGEgYnJhbmNoZSAnJXMnIHF1aSBhIMOpdMOpIGZ1c2lvbm7DqWUgZGFuc1xuIgorIiAgICAgICAgICclcycsIG1haXMgcGFzIGRhbnMgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorImJyYW5jaGUgJyVzJyBub24gc3VwcHJpbcOpZSBjYXIgZWxsZSBuJ2EgcGFzIMOpdMOpIGZ1c2lvbm7DqWUgZGFuc1xuIgorIiAgICAgICAgICclcycsIG3Dqm1lIHNpIGVsbGUgZXN0IGZ1c2lvbm7DqWUgZGFucyBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJlY2hlcmNoZXIgbCdvYmpldCBjb21taXQgcG91ciAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyJMYSBicmFuY2hlICclcycgbidlc3QgcGFzIHRvdGFsZW1lbnQgZnVzaW9ubsOpZS5cbiIKKyJTaSB2b3VzIHNvdWhhaXRleiByw6llbGxlbWVudCBsYSBzdXBwcmltZXIsIGxhbmNleiAnZ2l0IGJyYW5jaCAtRCAlcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIsOJY2hlYyBkZSBsYSBtaXNlIMOgIGpvdXIgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyMAorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ3V0aWxpc2VyIC1hIGF2ZWMgLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJlY2hlcmNoZXIgbCdvYmpldCBjb21taXQgcG91ciBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIGJyYW5jaGUgJyVzJyBleHRyYWl0ZSBkYW5zICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJicmFuY2hlIGRlIHN1aXZpICclcycgbm9uIHRyb3V2w6llLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiYnJhbmNoZSAnJXMnIG5vbiB0cm91dsOpZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgc3VwcHJlc3Npb24gZGUgbGEgYnJhbmNoZSBkZSBzdWl2aSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgc3VwcHJlc3Npb24gZGUgbGEgYnJhbmNoZSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIkJyYW5jaGUgZGUgc3VpdmkgJXMgc3VwcHJpbcOpZSAocHLDqWPDqWRlbW1lbnQgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiQnJhbmNoZSAlcyBzdXBwcmltw6llIChwcsOpY8OpZGVtbWVudCAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDI5IGJ1aWx0aW4vdGFnLmM6NjEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZm9ybWF0IHN0cmluZyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxhIGNoYcOubmUgZGUgZm9ybWF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpc291ZHJlIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIKK21zZ3N0ciAiSEVBRCAoJXMpIHBvaW50ZSBob3JzIGRlIHJlZnMvaGVhZHMvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiTGEgYnJhbmNoZSAlcyBlc3QgZW4gY291cnMgZGUgcmViYXNhZ2Ugc3VyICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgIkxhIGJyYW5jaGUgJXMgZXN0IGVuIGNvdXJzIGRlIGJpc3NlY3Rpb24gc3VyICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwMgorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb3BpZXIgbGEgYnJhbmNoZSBhY3R1ZWxsZSwgaWwgbid5IGVuIGEgcGFzLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZW5vbW1lciBsYSBicmFuY2hlIGFjdHVlbGxlLCBpbCBuJ3kgZW4gYSBwYXMuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJOb20gZGUgYnJhbmNoZSBpbnZhbGlkZSA6ICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIsOJY2hlYyBkZSByZW5vbW1hZ2UgZGUgbGEgYnJhbmNoZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIsOJY2hlYyBkZSBjb3BpZSBkZSBsYSBicmFuY2hlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICJDcsOpYXRpb24gZCd1bmUgY29waWUgZCd1bmUgYnJhbmNoZSBtYWwgbm9tbcOpZSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiUmVub21tYWdlIGQndW5lIGJyYW5jaGUgbWFsIG5vbW3DqWUgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiTGEgYnJhbmNoZSBhIMOpdMOpIHJlbm9tbcOpZSBlbiAlcywgbWFpcyBIRUFEIG4nZXN0IHBhcyBtaXNlIMOgIGpvdXIgISIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjYKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJMYSBicmFuY2hlIGVzdCByZW5vbW3DqWUsIG1haXMgbGEgbWlzZSDDoCBqb3VyIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBhICIKKyLDqWNob3XDqSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjgKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgZXN0IGNvcGnDqWUsIG1haXMgbGEgbWlzZSDDoCBqb3VyIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBhICIKKyLDqWNob3XDqSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorIlZldWlsbGV6IMOpZGl0ZXIgbGEgZGVzY3JpcHRpb24gZGUgbGEgYnJhbmNoZVxuIgorIiAgJXNcbiIKKyJMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciAnJWMnIHNlcm9udCBpZ25vcsOpZXMuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE4Cittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGfDqW7DqXJpcXVlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjAKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgaGFjaGFnZSBldCBsZSBzdWpldCwgZG91YmzDqSBwb3VyIGxhIGJyYW5jaGUgYW1vbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAic3VwcHJpbWVyIGxlcyBtZXNzYWdlcyBkJ2luZm9ybWF0aW9uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJyw6lnbGVyIGxlIG1vZGUgZGUgc3VpdmkgKHZvaXIgZ2l0LXB1bGwoMSkpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNAorbXNnaWQgImRvIG5vdCB1c2UiCittc2dzdHIgIm5lIHBhcyB1dGlsaXNlciIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MDUKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAiYW1vbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2Cittc2dpZCAiY2hhbmdlIHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJtb2RpZmllciBsJ2luZm9ybWF0aW9uIGFtb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNworbXNnaWQgInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJkw6lzYWN0aXZlciBsJ2luZm9ybWF0aW9uIGFtb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOAorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAidXRpbGlzZXIgbGEgY29sb3JhdGlvbiBkYW5zIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhZ2lyIHN1ciBsZXMgYnJhbmNoZXMgZGUgc3VpdmkgZGlzdGFudGVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgYnJhbmNoZXMgcXVpIGNvbnRpZW5uZW50IGxlIGNvbW1pdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIGJyYW5jaGVzIHF1aSBuZSBjb250aWVubmVudCBwYXMgbGUgY29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNworbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIkFjdGlvbnMgc3DDqWNpZmlxdWVzIMOgIGdpdC1icmFuY2ggOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiYWZmaWNoZXIgw6AgbGEgZm9pcyBsZXMgYnJhbmNoZXMgZGUgc3VpdmkgZXQgbGVzIGJyYW5jaGVzIGxvY2FsZXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgInN1cHByaW1lciB1bmUgYnJhbmNoZSB0b3RhbGVtZW50IGZ1c2lvbm7DqWUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQxCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAic3VwcHJpbWVyIHVuZSBicmFuY2hlIChtw6ptZSBub24gZnVzaW9ubsOpZSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImTDqXBsYWNlci9yZW5vbW1lciB1bmUgYnJhbmNoZSBldCBzb24gcmVmbG9nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImTDqXBsYWNlci9yZW5vbW1lciB1bmUgYnJhbmNoZSwgbcOqbWUgc2kgbGEgY2libGUgZXhpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImNvcGllciB1bmUgYnJhbmNoZSBldCBzb24gcmVmbG9nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiY29waWVyIHVuZSBicmFuY2hlLCBtw6ptZSBzaSBsYSBjaWJsZSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgImFmZmljaGVyIGxlcyBub21zIGRlcyBicmFuY2hlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgImFmZmljaGVyIGxlIG5vbSBkZSBsYSBicmFuY2hlIGNvdXJhbnRlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OAorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJjcsOpZXIgbGUgcmVmbG9nIGRlIGxhIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgIsOpZGl0ZXIgbGEgZGVzY3JpcHRpb24gZGUgbGEgYnJhbmNoZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICJmb3JjZXIgbGEgY3LDqWF0aW9uLCBsZSBkw6lwbGFjZW1lbnQvcmVub21tYWdlLCBvdSBsYSBzdXBwcmVzc2lvbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBicmFuY2hlcyBxdWkgc29udCBmdXNpb25uw6llcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgYnJhbmNoZXMgcXVpIG5lIHNvbnQgcGFzIGZ1c2lvbm7DqWVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGJyYW5jaGVzIGVuIGNvbG9ubmVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyIGJ1aWx0aW4vbm90ZXMuYzo0MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTggYnVpbHRpbi9ub3Rlcy5jOjU4MSBidWlsdGluL25vdGVzLmM6NTg0CisjOiBidWlsdGluL3RhZy5jOjQzMworbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAib2JqZXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIGJyYW5jaGVzIGRlIGwnb2JqZXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYwIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDggYnVpbHRpbi90YWcuYzo0NDAKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgImxlIHRyaSBldCBsZSBmaWx0cmFnZSBzb250IG5vbi1zZW5zaWJsZXMgw6AgbGEgY2Fzc2UiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiZm9ybWF0IMOgIHV0aWxpc2VyIHBvdXIgbGEgc29ydGllIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY4NCBidWlsdGluL2Nsb25lLmM6Nzg0Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIkhFQUQgbm9uIHRyb3V2w6llIHNvdXMgcmVmcy9oZWFkcyAhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZXQgLS12ZXJib3NlIHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjMgYnVpbHRpbi9icmFuY2guYzo3NzcgYnVpbHRpbi9icmFuY2guYzo3ODYKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAibGUgbm9tIGRlIGJyYW5jaGUgZXN0IHJlcXVpcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqWNyaXJlIHVuZSBIRUFEIGTDqXRhY2jDqWUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU4Cittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgImltcG9zc2libGUgZCfDqWRpdGVyIGxhIGRlc2NyaXB0aW9uIGRlIHBsdXMgZCd1bmUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIkF1Y3VuIGNvbW1pdCBzdXIgbGEgYnJhbmNoZSAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICJBdWN1bmUgYnJhbmNoZSBub21tw6llICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICJ0cm9wIGRlIGJyYW5jaGVzIHBvdXIgdW5lIG9ww6lyYXRpb24gZGUgY29waWUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgInRyb3AgZCdhcmd1bWVudHMgcG91ciB1bmUgb3DDqXJhdGlvbiBkZSByZW5vbW1hZ2UiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzk3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgInRyb3AgZCdhcmd1bWVudHMgcG91ciBzcMOpY2lmaWVyIHVuZSBicmFuY2hlIGFtb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHNww6ljaWZpZXIgdW5lIGJyYW5jaGUgYW1vbnQgZGUgSEVBRCBwYXIgJXMgcXVpIG5lIHBvaW50ZSBzdXIgIgorImF1Y3VuZSBicmFuY2hlLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAicGFzIGRlIGJyYW5jaGUgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxhIGJyYW5jaGUgJyVzJyBuJ2V4aXN0ZSBwYXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICJ0cm9wIGQnYXJndW1lbnRzIHBvdXIgZMOpc2FjdGl2ZXIgdW4gYW1vbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI1Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgZMOpc2FjdGl2ZXIgdW5lIGJyYW5jaGUgYW1vbnQgZGUgSEVBRCBxdWFuZCBlbGxlIG5lIHBvaW50ZSBzdXIgIgorImF1Y3VuZSBicmFuY2hlLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJMYSBicmFuY2hlICclcycgbidhIGF1Y3VuZSBpbmZvcm1hdGlvbiBkZSBicmFuY2hlIGFtb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgIiIKKyJUaGUgLWEsIGFuZCAtciwgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IHRha2UgYSBicmFuY2ggbmFtZS5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdXNlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIKK21zZ3N0ciAiIgorIkxlcyBvcHRpb25zIC1hIGV0IC1yIGRlICdnaXQgYnJhbmNoJyBuJ29udCBwYXMgZGUgc2VucyBhdmVjIHVuIG5vbSBkZSAiCisiYnJhbmNoZS5cbiIKKyJWb3VsaWV6LXZvdXMgcGx1dMO0dCBkaXJlIC1hfC1yIC0tbGlzdCA8bW90aWY+wqA/IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NQorbXNnaWQgIiIKKyJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgIgorIictLXNldC11cHN0cmVhbS10bycgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJsJ29wdGlvbiAnLS1zZXQtdXBzdHJlYW0nIGVzdCBvYnNvbMOodGUuIFV0aWxpc2V6ICctLXRyYWNrJyBvdSAnLS1zZXQtIgorInVwc3RyZWFtLXRvJyDDoCBsYSBwbGFjZS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworbXNnaWQgImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IgorbXNnc3RyICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmljaGllcj4gPGFyZ3MgZ2l0LXJldi1saXN0PiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNiBidWlsdGluL2J1bmRsZS5jOjI4Cittc2dpZCAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IgorbXNnc3RyICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmljaGllcj4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTcgYnVpbHRpbi9idW5kbGUuYzozMworbXNnaWQgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmljaGllcj4gWzxub20tZGUtcmVmPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTggYnVpbHRpbi9idW5kbGUuYzozOAorbXNnaWQgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWNoaWVyPiBbPG5vbS1kZS1yZWY+Li4uXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMjgKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIGxhIGJhcnJlIGRlIHByb2dyZXNzaW9uIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgImFmZmljaGVyIGxhIGJhcnJlIGRlIHByb2dyZXNzaW9uIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICJhZmZpY2hlciBsYSBiYXJyZSBkZSBwcm9ncmVzc2lvbiBkdXJhbnQgbGEgcGhhc2UgZCfDqWNyaXRlIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM1Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJzaW1pbGFpcmUgw6AgLS1hbGwtcHJvZ3Jlc3MgcXVhbmQgbGEgYmFycmUgZGUgcHJvZ3Jlc3Npb24gZXN0IGFmZmljaMOpZSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIkxhIGNyw6lhdGlvbiBkJ3VuIGNvbGlzIHJlcXVpZXJ0IHVuIGTDqXDDtHQuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjEwNAorbXNnaWQgImRvIG5vdCBzaG93IGJ1bmRsZSBkZXRhaWxzIgorbXNnc3RyICJuZSBwYXMgYWZmaWNoZXIgbGVzIGTDqXRhaWxzIGR1IGNvbGlzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIGVzdCBjb3JyZWN0XG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJMZSBkw6lwYXF1ZXRhZ2UgZCd1biBjb2xpcyByZXF1aWVydCB1biBkw6lww7R0LiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjggYnVpbHRpbi9yZW1vdGUuYzoxNjA5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAiw6p0cmUgdmVyYmV1eCA6IGRvaXQgw6p0cmUgcGxhY8OpIGF2YW50IHVuZSBzb3VzLWNvbW1hbmRlIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE5MCBidWlsdGluL3JlbW90ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiU291cy1jb21tYW5kZSBpbmNvbm51ZSA6ICVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93LXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93LXR5cGVdIHwgLWUgfCAtcCAiCisifCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxjaGVtaW4+XSA8b2JqZXQ+IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk2Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIgorbXNnc3RyICJ1bmUgc2V1bGUgb3B0aW9uIGRlIHRyYWl0ZW1lbnQgbmUgcGV1dCDDqnRyZSBzcMOpY2lmacOpZSDDoCBsYSBmb2lzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM1Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI8dHlwZT4gcGV1dCDDqnRyZSA6IGJsb2IsIHRyZWUsIGNvbW1pdCBvdSB0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzYKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICJhZmZpY2hlciBsZSB0eXBlIGRlIGwnb2JqZXQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzcKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJhZmZpY2hlciBsYSB0YWlsbGUgZGUgbCdvYmpldCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAic29ydGlyIGF2ZWMgdW4gY29kZSBkJ2VycmV1ciBudWwgcXVhbmQgaWwgbid5IGEgYXVjdW5lIGVycmV1ciIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJhZmZpY2hlciBhdmVjIG1pc2UgZW4gZm9ybWUgbGUgY29udGVudSBkZSBsJ29iamV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInBvdXIgbGVzIG9iamV0cyBibG9iLCBsYW5jZXIgdGV4dGNvbnYgc3VyIGxlIGNvbnRlbnUgZGUgbCdvYmpldCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NAorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInBvdXIgbGVzIG9iamV0cyBibG9iLCBsYW5jZXIgbGVzIGZpbHRyZXMgc3VyIGxlIGNvbnRlbnUgZGUgbCdvYmpldCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NSBnaXQtc3VibW9kdWxlLnNoOjk5MgorbXNnaWQgImJsb2IiCittc2dzdHIgImJsb2IiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAidXRpbGlzZXIgdW4gY2hlbWluIHNww6ljaWZpcXVlIHBvdXIgLS10ZXh0Y29udi8tLWZpbHRlcnMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDgKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgImF1dG9yaXNlciAtcyBldCAtdCDDoCB0cmF2YWlsbGVyIHN1ciBkZXMgb2JqZXRzIGNhc3PDqXMvY29ycm9tcHVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICJidWZmZXJpc2VyIGxhIHNvcnRpZSBkZSAtLWJhdGNoIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjUxCittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisiYWZmaWNoZXIgbCdpbmZvcm1hdGlvbiBldCBsZSBjb250ZW51IGRlcyBvYmpldHMgcGFzc8OpcyBlbiBlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJhZmZpY2hlciBsJ2luZm9ybWF0aW9uIGRlcyBvYmpldHMgcGFzc8OpcyBlbiBlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisic3VpdnJlIGxlcyBsaWVucyBzeW1ib2xpcXVlIGludGVybmVzIMOgIGxhIGNvcGllIGRlIHRyYXZhaWwgKHV0aWxpc8OpIGF2ZWMgLS0iCisiYmF0Y2ggb3UgLS1iYXRjaC1jaGVjaykiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjEKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICJtb250cmVyIHRvdXMgbGVzIG9iamV0cyBhdmVjIC0tYmF0Y2ggb3UgLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MworbXNnaWQgImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIKK21zZ3N0ciAibmUgcGFzIG9yZG9ubmVyIGxhIHNvcnRpZSBkZSAtLWJhdGNoLWFsbC1vYmplY3RzIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxjaGVtaW4+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxNAorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxCittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICJhZmZpY2hlciB0b3VzIGxlcyBhdHRyaWJ1dHMgYXNzb2Npw6lzIGF1IGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInV0aWxpc2VyIC5naXRhdHRyaWJ1dGVzIHNldWxlbWVudCBkZXB1aXMgbCdpbmRleCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgImxpcmUgbGVzIG5vbXMgZGUgZmljaGllciBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKyJ0ZXJtaW5lciBsZXMgZW5yZWdpc3RyZW1lbnRzIGVuIGVudHLDqWUgZXQgZW4gc29ydGllIHBhciB1biBjYXJhY3TDqHJlIE5VTCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMSBidWlsdGluL2NoZWNrb3V0LmM6MTQzNSBidWlsdGluL2djLmM6NTM3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA2Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJzdXBwcmltZXIgbCfDqXRhdCBkJ2F2YW5jZW1lbnQiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjkKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGNoZW1pbnMgZW4gZW50csOpZSBxdWkgbmUgY29ycmVzcG9uZGVudCBwYXMiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiaWdub3JlciBsJ2luZGV4IHBlbmRhbnQgbGEgdsOpcmlmaWNhdGlvbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjAKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHNww6ljaWZpZXIgbGVzIGNoZW1pbnMgYXZlYyAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiBuJ2EgZGUgc2VucyBxdSdhdmVjIGwnb3B0aW9uIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgImF1Y3VuIGNoZW1pbiBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OQorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IG4nZXN0IHZhbGlkZSBxdSdhdmVjIHVuIHNldWwgY2hlbWluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYXZvaXIgLS1xdWlldCBldCAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcgbidlc3QgdmFsaWRlIHF1J2F2ZWMgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImxpcmUgYXVzc2kgbGVzIGNvbnRhY3RzIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIGNvbnRhY3QgOiAlcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDgKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgImF1Y3VuIGNvbnRhY3Qgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEzMQorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpY2hpZXI+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE0OAorbXNnaWQgInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIgorbXNnc3RyICJzdGFnZSBkb2l0IHZhbG9pciBlbnRyZSAxIGV0IDMsIG91IGFsbCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJleHRyYWlyZSB0b3VzIGxlcyBmaWNoaWVycyBwcsOpc2VudHMgZGFucyBsJ2luZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJmb3JjZXIgbCfDqWNyYXNlbWVudCBkZXMgZmljaGllcnMgZXhpc3RhbnRzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorInBhcyBkJ2F2ZXJ0aXNzZW1lbnQgcG91ciBsZXMgZmljaGllcnMgZXhpc3RhbnRzIGV0IGxlcyBmaWNoaWVycyBhYnNlbnRzIGRlICIKKyJsJ2luZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY5Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICJuZSBwYXMgZXh0cmFpcmUgbGVzIG5vdXZlYXV4IGZpY2hpZXJzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIGwnaW5mb3JtYXRpb24gZGUgc3RhdCBkYW5zIGxlIGZpY2hpZXIgZCdpbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGlyZSBsYSBsaXN0ZSBkZXMgY2hlbWlucyBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc3Cittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICLDqWNyaXJlIGxlIGNvbnRlbnUgZGFucyBkZXMgZmljaGllcnMgdGVtcG9yYWlyZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODgKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODgyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njc5Cittc2dpZCAic3RyaW5nIgorbXNnc3RyICJjaGHDrm5lIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAibG9ycyBkZSBsYSBjcsOpYXRpb24gZGUgZmljaGllcnMsIHByw6lmaXhlciBwYXIgPGNoYcOubmU+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgImNvcGllciBsZXMgZmljaGllcnMgZGVwdWlzIGwnaW5kZXggbm9tbcOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoZT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoZT5dIC0tIDxmaWNoaWVyPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIDxicmFuY2hlPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyCittc2dpZCAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCByZXN0b3JlIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08YnJhbmNoZT5dIDxmaWNoaWVyPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NSBidWlsdGluL2NoZWNrb3V0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2EgcGFzIG5vdHJlIHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2EgcGFzIGxldXIgdmVyc2lvbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2EgYXVjdW5lIGRlcyB2ZXJzaW9ucyBuw6ljZXNzYWlyZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2EgcGFzIGxlcyB2ZXJzaW9ucyBuw6ljZXNzYWlyZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgImNoZW1pbiAnJXMnIDogaW1wb3NzaWJsZSBkZSBmdXNpb25uZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdham91dGVyIGxlIHLDqXN1bHRhdCBkZSBmdXNpb24gcG91ciAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiJWQgY29uZmxpdCBkdSBmdXNpb24gcmVjcsOpw6kiCittc2dzdHJbMV0gIiVkIGNvbmZsaXRzIGR1IGZ1c2lvbiByZWNyw6nDqXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAiJWQgY2hlbWluIG1pcyDDoCBqb3VyIGRlcHVpcyAlcyIKK21zZ3N0clsxXSAiJWQgY2hlbWlucyBtaXMgw6Agam91ciBkZXB1aXMgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICIlZCBjaGVtaW4gbWlzIMOgIGpvdXIgZGVwdWlzIGwnaW5kZXgiCittc2dzdHJbMV0gIiVkIGNoZW1pbnMgbWlzIMOgIGpvdXIgZGVwdWlzIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBhdmVjIGRlcyBtaXNlcyDDoCBqb3VyIGRlIGNoZW1pbnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjUgYnVpbHRpbi9jaGVja291dC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGxlcyBjaGVtaW5zIGV0IGJhc2N1bGVyIHN1ciBsYSBicmFuY2hlICclcycgZW4gIgorIm3Dqm1lIHRlbXBzLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgIm5pICclcycsIG5pICclcycgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiJyVzJyBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBxdWFuZCAnJXMnIG4nZXN0IHBhcyBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycgb3UgJyVzJyBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBhdmVjICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2VzdCBwYXMgZnVzaW9ubsOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgyIGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6ODIKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAidm91cyBkZXZleiBkJ2Fib3JkIHLDqXNvdWRyZSB2b3RyZSBpbmRleCBjb3VyYW50IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgY29udGludWUgd2l0aCBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBjb250aW51ZXIgYXZlYyBkZXMgbW9kaWZpY2F0aW9ucyBpbmRleMOpZXMgZGFucyBsZXMgZmljaGllcnMgIgorInN1aXZhbnRzIDpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmYWlyZSB1biByZWZsb2cgcG91ciAnJXMnwqA6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzcKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBlc3QgbWFpbnRlbmFudCBzdXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODEgYnVpbHRpbi9jbG9uZS5jOjcxNgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBIRUFEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlJlbWlzZSDDoCB6w6lybyBkZSBsYSBicmFuY2hlICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiRMOpasOgIHN1ciAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIkJhc2N1bGVtZW50IGV0IHJlbWlzZSDDoCB6w6lybyBkZSBsYSBicmFuY2hlICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NCBidWlsdGluL2NoZWNrb3V0LmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJCYXNjdWxlbWVudCBzdXIgbGEgbm91dmVsbGUgYnJhbmNoZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiQmFzY3VsZW1lbnQgc3VyIGxhIGJyYW5jaGUgJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gZXQgJWQgZW4gcGx1cy5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIkF0dGVudGlvbiA6IHZvdXMgYWJhbmRvbm5leiAlZCBjb21taXQsIG5vbiBjb25uZWN0w6kgw6BcbiIKKyJ1bmUgYnJhbmNoZSA6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIkF0dGVudGlvbiA6IHZvdXMgYWJhbmRvbm5leiAlZCBjb21taXRzLCBub24gY29ubmVjdMOpcyDDoFxuIgorInVuZSBicmFuY2hlIDpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIlNpIHZvdXMgc291aGFpdGV6IGxlIGdhcmRlciBlbiBjcsOpYW50IHVuZSBub3V2ZWxsZSBicmFuY2hlLCBjJ2VzdCBsZSBib24gIgorIm1vbWVudFxuIgorInBvdXIgbGUgZmFpcmUgYXZlYyA6XG4iCisiXG4iCisiZ2l0IGJyYW5jaCA8bm91dmVsbGUtYnJhbmNoZT4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIlNpIHZvdXMgc291aGFpdGV6IGxlcyBnYXJkZXIgZW4gY3LDqWFudCB1bmUgbm91dmVsbGUgYnJhbmNoZSwgYydlc3QgbGUgYm9uICIKKyJtb21lbnRcbiIKKyJwb3VyIGxlIGZhaXJlIGF2ZWMgOlxuIgorIlxuIgorImdpdCBicmFuY2ggPG5vdXZlbGxlLWJyYW5jaGU+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiZXJyZXVyIGludGVybmUgbG9ycyBkdSBwYXJjb3VycyBkZXMgcsOpdmlzaW9ucyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTEKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiTGEgcG9zaXRpb24gcHLDqWPDqWRlbnRlIGRlIEhFQUQgw6l0YWl0IHN1ciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTEgYnVpbHRpbi9jaGVja291dC5jOjEyODYKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJWb3VzIMOqdGVzIHN1ciB1bmUgYnJhbmNoZSBxdWkgZG9pdCBlbmNvcmUgbmHDrnRyZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNzgKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgInVuZSBzZXVsZSByw6lmw6lyZW5jZSBhdHRlbmR1ZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgInVuZSBzZXVsZSByw6lmw6lyZW5jZSBhdHRlbmR1ZSwgJWQgZm91cm5pZXMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIgorbXNnc3RyICIiCisiJyVzJyBwb3VycmFpdCDDqnRyZSB1biBmaWNoaWVyIGxvY2FsIG91IHVuIGJyYW5jaGUgZGUgc3VpdmkuXG4iCisiVmV1aWxsZXogdXRpbGlzZXIgLS0gKGV0IC0tbm8tZ3Vlc3MgZW4gZmFjdWx0YXRpZikgcG91ciBsZXMgZGlzdGluZ3VlciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDUgYnVpbHRpbi93b3JrdHJlZS5jOjI5MCBidWlsdGluL3dvcmt0cmVlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicsOpZsOpcmVuY2UgaW52YWxpZGUgOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTggYnVpbHRpbi9jaGVja291dC5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJsYSByw6lmw6lyZW5jZSBuJ2VzdCBwYXMgdW4gYXJicmUgOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAiYnJhbmNoZSBhdHRlbmR1ZSwgbWFpcyDDqXRpcXVldHRlICclcycgcmXDp3VlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHJlbW90ZSBicmFuY2ggJyVzJyIKK21zZ3N0ciAidW5lIGJyYW5jaGUgZXN0IGF0dGVuZHVlLCBtYWlzIHVuZSBicmFuY2hlIGRpc3RhbnRlICclcycgYSDDqXTDqSByZcOndWUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIKK21zZ3N0ciAidW5lIGJyYW5jaGUgZXN0IGF0dGVuZHVlLCBtYWlzICclcycgYSDDqXTDqSByZcOndWUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgY29tbWl0ICclcyciCittc2dzdHIgInVuZSBicmFuY2hlIGVzdCBhdHRlbmR1ZSwgbWFpcyB1biBjb21taXQgJyVzJyBhIMOpdMOpIHJlw6d1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMyNworbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBtZXJnaW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBiYXNjdWxlciBkZSBicmFuY2hlIHBlbmRhbnQgdW5lIGZ1c2lvblxuIgorIkVudmlzYWdleiBcImdpdCBtZXJnZSAtLXF1aXRcIiBvdSBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzMxCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorIkNvbnNpZGVyIFwiZ2l0IGFtIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgYmFzY3VsZXIgZGUgYnJhbmNoZSBwZW5kYW50IHVuZSBzZXNzaW9uIGFtXG4iCisiRW52aXNhZ2V6IFwiZ2l0IGFtIC0tcXVpdFwiIG91IFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzUKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBiYXNjdWxlciBkZSBicmFuY2hlIHBlbmRhbnQgdW4gcmViYXNhZ2VcbiIKKyJFbnZpc2FnZXogXCJnaXQgcmViYXNlIC0tcXVpdFwiIG91IFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzkKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJDb25zaWRlciBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIGJhc2N1bGVyIGRlIGJyYW5jaGUgcGVuZGFudCB1biBwaWNvcmFnZVxuIgorIkVudmlzYWdleiBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvdSBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQzCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIGJhc2N1bGVyIGRlIGJyYW5jaGUgcGVuZGFudCB1biByZXRvdXJcbiIKKyJFbnZpc2FnZXogXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG91IFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDcKK21zZ2lkICJ5b3UgYXJlIHN3aXRjaGluZyBicmFuY2ggd2hpbGUgYmlzZWN0aW5nIgorbXNnc3RyICJWb3VzIGJhc2N1bGV6IGRlIGJyYW5jaGUgZW4gY291cnMgZGUgYmlzc2VjdGlvbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTQKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ3V0aWxpc2VyIGRlcyBjaGVtaW5zIGF2ZWMgdW4gYmFzY3VsZW1lbnQgZGUgYnJhbmNoZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyB1biBiYXNjdWxlbWVudCBkZSBicmFuY2hlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjkgYnVpbHRpbi9jaGVja291dC5jOjEzNzIgYnVpbHRpbi9jaGVja291dC5jOjEzNzUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICInJXMnIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICInJXMnIG4nYWNjZXB0ZSBwYXMgPHBvaW50LWRlLWTDqXBhcnQ+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBiYXNjdWxlciBkZSBicmFuY2hlIHZlcnMgJyVzJyBxdWkgbidlc3QgcGFzIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTcKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBvciBjb21taXQgYXJndW1lbnQiCittc2dzdHIgImFyZ3VtZW50IGRlIGJyYW5jaGUgb3UgZGUgY29tbWl0IG1hbnF1YW50IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQzOSBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MgorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTMgYnVpbHRpbi9mZXRjaC5jOjE2NyBidWlsdGluL21lcmdlLmM6Mjg1CisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNyBidWlsdGluL3B1bGwuYzoxMzggYnVpbHRpbi9wdXNoLmM6NTYzCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiZm9yY2VyIGwnYWZmaWNoYWdlIGRlIGwnw6l0YXQgZCdhdmFuY2VtZW50IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJlZmZlY3R1ZXIgdW5lIGZ1c2lvbiDDoCAzIHBvaW50cyBhdmVjIGxhIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQxIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgInN0eWxlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MgorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgInN0eWxlIGRlIGNvbmZsaXQgKG1lcmdlIChmdXNpb24pIG91IGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTQgYnVpbHRpbi93b3JrdHJlZS5jOjUwMworbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiZMOpdGFjaGVyIGxhIEhFQUQgYXUgY29tbWl0IG5vbW3DqSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTUKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAicGFyYW3DqXRyZXIgbGVzIGNvb3Jkb25uw6llcyBkZSBicmFuY2hlIGFtb250IHBvdXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgImZvcmNlciBsJ2V4dHJhY3Rpb24gKGxhaXNzZXIgdG9tYmVyIGxlcyBtb2RpZmljYXRpb25zIGxvY2FsZXMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1OQorbXNnaWQgIm5ldy1icmFuY2giCittc2dzdHIgIm5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU5Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJub3V2ZWxsZSBicmFuY2hlIHNhbnMgcGFyZW50IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2MSBidWlsdGluL21lcmdlLmM6Mjg4Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJtZXR0cmUgw6Agam91ciBsZXMgZmljaGllcnMgaWdub3LDqXMgKHBhciBkw6lmYXV0KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjQKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIiIKKyJuZSBwYXMgdsOpcmlmaWVyIHNpIHVuZSBhdXRyZSBjb3BpZSBkZSB0cmF2YWlsIGNvbnRpZW50IGxlIHLDqWbDqXJlbmNlIGZvdXJuaWUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDc3Cittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJleHRyYWlyZSBub3RyZSB2ZXJzaW9uIHBvdXIgbGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MAorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJleHRyYWlyZSBsZXVyIHZlcnNpb24gcG91ciBsZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJuZSBwYXMgbGltaXRlciBsZXMgc3DDqWNpZmljYXRldXJzIGRlIGNoZW1pbnMgYXV4IHNldWxzIMOpbMOpbWVudHMgY3JldXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTM3Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgZXQgLS1vcnBoYW4gc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaWZzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU0MAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLXAgZXQgLS1vdmVybGF5IHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NzcKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sgcmVxdWllcnQgdW4gbm9tIGRlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTgyCittc2dpZCAibWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIgorbXNnc3RyICJub20gZGUgYnJhbmNoZSBtYW5xdWFudCA7IGVzc2F5ZXogLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MzEKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAic3DDqWNpZmljYXRpb24gZGUgY2hlbWluIGludmFsaWRlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCBhbmQgYSBicmFuY2ggJyVzJyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGl0IgorbXNnc3RyICIiCisiJyVzJyBuJ2VzdCBwYXMgdW4gY29tbWl0IGV0IHVuZSBicmFuY2hlICclcycgbmUgcGV1dCBwYXMgZW4gw6p0cmUgY3LDqcOpZSBkZXB1aXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBuJ2FjY2VwdGUgcGFzIHVuIGFyZ3VtZW50IGRlIGNoZW1pbiAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1kZXRhY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU0IGJ1aWx0aW4vcmVzZXQuYzozMjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1wYXRjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjUKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBldCAtLW1lcmdlIHNvbnQgaW5jb21wYXRpYmxlcyBsb3JzXG4iCisiZGUgbCdleHRyYWN0aW9uIGRlIGwnaW5kZXguIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY3MAorbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICJWb3VzIGRldmV6IHNww6ljaWZpZXIgdW4gb3UgZGVzIGNoZW1pbnMgw6AgcmVzdGF1cmVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJXZSBmb3VuZCAlZCByZW1vdGVzIHdpdGggYSByZWZlcmVuY2UgdGhhdCBtYXRjaGVkLiBTbyB3ZSBmZWxsIGJhY2tcbiIKKyJvbiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgYXJndW1lbnQgYXMgYSBwYXRoLCBidXQgZmFpbGVkIHRoZXJlIHRvbyFcbiIKKyJcbiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorIiclcycgY29ycmVzcG9uZCDDoCBwbHVzaWV1cnMgYnJhbmNoZXMgZGUgc3VpdmkgZGlzdGFudC4gTm91cyBhdm9uc1xuIgorInRyb3V2w6kgJWQgZGlzdGFudHMgYXZlYyB1bmUgcsOpZsOpcmVuY2UgY29ycmVzcG9uZGFudGUuIE5vdXMgYXZvbnMgZXNzYXnDqVxuIgorImRlIHLDqXNvdWRyZSBsJ2FyZ3VtZW50IGNvbW1lIHVuIGNoZW1pbiwgc2FucyBwbHVzIGRlIHLDqXN1bHRhdMKgIVxuIgorIlxuIgorIlNpIHZvdXMgc291aGFpdGlleiBleHRyYWlyZSB1bmUgYnJhbmNoZSBkZSBzdWl2aSBkaXN0YW50IHN1ciAnb3JpZ2luJyxcbiIKKyJwYXIgZXhlbXBsZSwgcXVhbGlmaWV6LWxhIGNvbXBsw6h0ZW1lbnQgYXZlYyBsJ29wdGlvbiAtLXRyYWNrwqA6XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bm9tPlxuIgorIlxuIgorIlNpIHZvdXMgc291aGFpdGV6IHByaXZpbMOpZ2llciB1biBkaXN0YW50IHBhcnRpY3VsaWVyIGxvcnNxdWUgPG5vbT4gZXN0XG4iCisiYW1iaWd1LCB2b3VzIHBvdXZleiBwb3NpdGlvbm5lciBjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBkYW5zXG4iCisidm90cmUgY29uZmlnLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTQgYnVpbHRpbi9jaGVja291dC5jOjE3MTYgYnVpbHRpbi9jaGVja291dC5jOjE3NjUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY3IGJ1aWx0aW4vY2xvbmUuYzoxMjEgYnVpbHRpbi9yZW1vdGUuYzoxNjkKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTkgYnVpbHRpbi93b3JrdHJlZS5jOjUwMQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAiYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTUKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3LDqWVyIGV0IGV4dHJhaXJlIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNworbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgImNyw6llci9yw6lpbml0aWFsaXNlciBldCBleHRyYWlyZSB1bmUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJjcsOpZXIgdW4gcmVmbG9nIHBvdXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIwCittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICIiCisiZXNzYXllciBkJ2ludGVycHLDqXRlciAnZ2l0IGNoZWNrb3V0IDxicmFuY2hlLWluZXhpc3RhbnRlPicgKHBhciBkw6lmYXV0KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjEKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIKK21zZ3N0ciAidXRpbGlzZXIgbGUgbW9kZSBkZSBzdXBlcnBvc2l0aW9uIChkw6lmYXV0KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjYKK21zZ2lkICJjcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2giCittc2dzdHIgImNyw6llciBldCBiYXNjdWxlciBzdXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY4Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giCittc2dzdHIgImNyw6llci9yw6lpbml0aWFsaXNlciBldCBiYXNjdWxlciBzdXIgdW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcwCittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgc3dpdGNoIDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICJpbnRlcnByw6l0ZXIgJ2dpdCBzd2l0Y2ggPGJyYW5jaGUtaW5leGlzdGFudGU+JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzIKK21zZ2lkICJ0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgImxhaXNzZXIgdG9tYmVyIGxlcyBtb2RpZmljYXRpb25zIGxvY2FsZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA0Cittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAiZGUgcXVlbCA8YXJicmUtZXNxdWU+IGZhaXJlIGwnZXh0cmFjdGlvbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDYKK21zZ2lkICJyZXN0b3JlIHRoZSBpbmRleCIKK21zZ3N0ciAicmVzdGF1cmVyIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA4Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAicmVzdGF1cmVyIGwnYXJicmUgZGUgdHJhdmFpbCAocGFyIGTDqWZhdXQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMAorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJpZ25vcmVyIGxlcyBlbnRyw6llcyBub24tZnVzaW9ubsOpZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODExCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSIKK21zZ3N0ciAidXRpbGlzZXIgbGUgbW9kZSBkZSBzdXBlcnBvc2l0aW9uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPG1vdGlmPl0gWy14IHwgLVhdIFstLV0gPGNoZW1pbnM+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJTdXBwcmltZXJhaXQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiSWdub3JlIGxlIGTDqXDDtHQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJJZ25vcmVyYWl0IGxlIGTDqXDDtHQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBzdXBwcmVzc2lvbiBkZSAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICJsc3RhdCBkZSAlcyBpbXBvc3NpYmxlXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisiQWlkZSBlbiBsaWduZSA6XG4iCisiMSAgICAgICAgICAgLSBzw6lsZWN0aW9ubmVyIHVuIMOpbMOpbWVudCBudW3DqXJvdMOpXG4iCisiZm9vICAgICAgICAgLSBzw6lsZWN0aW9ubmVyIHVuIMOpbMOpbWVudCBwYXIgdW4gcHLDqWZpeGUgdW5pcXVlXG4iCisiICAgICAgICAgICAgLSAodmlkZSkgbmUgcmllbiBzw6lsZWN0aW9ubmVyXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgIiIKKyJBaWRlIGVuIGxpZ25lIDpcbiIKKyIxICAgICAgICAgIC0gc8OpbGVjdGlvbm5lciB1biBzZXVsIMOpbMOpbWVudFxuIgorIjMtNSAgICAgICAgLSBzw6lsZWN0aW9ubmVyIHVuZSBwbGFnZSBkJ8OpbMOpbWVudHNcbiIKKyIyLTMsNi05ICAgIC0gc8OpbGVjdGlvbm5lciBwbHVzaWV1cnMgcGxhZ2VzXG4iCisiZm9vICAgICAgICAtIHPDqWxlY3Rpb25uZXIgdW4gw6lsw6ltZW50IHBhciB1biBwcsOpZml4ZSB1bmlxdWVcbiIKKyItLi4uICAgICAgIC0gZMOpc8OpbGVjdGlvbm5lciBsZXMgw6lsw6ltZW50cyBzcMOpY2lmacOpc1xuIgorIiogICAgICAgICAgLSBjaG9pc2lyIHRvdXMgbGVzIMOpbMOpbWVudHNcbiIKKyIgICAgICAgICAgIC0gKHZpZGUpIHRlcm1pbmVyIGxhIHPDqWxlY3Rpb25cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICJIZWluICglcynCoD9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIkVudHJleiBsZXMgbW90aWZzIMOgIGlnbm9yZXI+PiAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIkFUVEVOVElPTiA6IEltcG9zc2libGUgZGUgdHJvdXZlciBsZXMgw6lsw6ltZW50cyBjb3JyZXNwb25kYW50IMOgIDogJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICJTw6lsZWN0aW9ubmVyIGxlcyDDqWzDqW1lbnRzIMOgIHN1cHByaW1lciIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICJTdXBwcmltZXIgJXMgW3kvTl0gPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBkw6ltYXJyZXIgbGUgbmV0dG95YWdlXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1cmUgZGVzIMOpbMOpbWVudHMgcGFyIG1vdGlmXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHPDqWxlY3Rpb25uZXIgbGVzIMOpbMOpbWVudHMgw6Agc3VwcHJpbWVyIHBhciBudW3DqXJvc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtZXIgY2hhcXVlIHN1cHByZXNzaW9uIChjb21tZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIGFycsOqdGVyIGxlIG5ldHRveWFnZVxuIgorImhlbHAgICAgICAgICAgICAgICAgLSBjZXQgw6ljcmFuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGFpZGUgcG91ciBsYSBzw6lsZWN0aW9uIGVuIGxpZ25lIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiU3VwcHJpbWVyYWl0IGwnw6lsw6ltZW50IHN1aXZhbnQgOiIKK21zZ3N0clsxXSAiU3VwcHJpbWVyYWl0IGxlcyDDqWzDqW1lbnRzIHN1aXZhbnRzIDoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiUGx1cyBkZSBmaWNoaWVyIMOgIG5ldHRveWVyLCBzb3J0aWUuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA5Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsZXMgbm9tcyBkZXMgZmljaGllcnMgc3VwcHJpbcOpcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICJmb3JjZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAibmV0dG95YWdlIGludGVyYWN0aWYiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTQKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgInN1cHByaW1lciBsZXMgcsOpcGVydG9pcmVzIGVudGllcnMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTUgYnVpbHRpbi9kZXNjcmliZS5jOjU0OCBidWlsdGluL2Rlc2NyaWJlLmM6NTUwCisjOiBidWlsdGluL2dyZXAuYzo5MDEgYnVpbHRpbi9sb2cuYzoxNzcgYnVpbHRpbi9sb2cuYzoxNzkKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTcgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NCBidWlsdGluL25hbWUtcmV2LmM6NDY2CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAibW90aWYiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTYKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiYWpvdXRlciA8bW90aWY+IGF1eCByw6hnbGVzIGlnbm9yZSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgInN1cHByaW1lciBsZXMgZmljaGllcnMgaWdub3LDqXMsIGF1c3NpIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAic3VwcHJpbWVyIHNldWxlbWVudCBsZXMgZmljaGllcnMgaWdub3LDqXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IGV0IC1YIG5lIHBldXZlbnQgcGFzIMOqdHJlIHV0aWxpc8OpcyBlbnNlbWJsZSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBwb3NpdGlvbm7DqSDDoCB0cnVlIGV0IG5pIC1pLCAtbiBvdSAtZiBmb3VybmkgOyByZWZ1cyBkZSAiCisibmV0dG95ZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDQKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDDoCB0cnVlIHBhciBkw6lmYXV0IGV0IG5pIC1pLCAtbiBvdSAtZiBmb3VybmkgOyByZWZ1cyBkZSAiCisibmV0dG95ZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NQorbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8ZMOpcMO0dD4gWzxyw6lwZXJ0b2lyZT5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAibmUgcGFzIGNyw6llciBkJ2V4dHJhY3Rpb24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJjcsOpZXIgdW4gZMOpcMO0dCBudSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgImNyw6llciB1biBkw6lww7R0IG1pcm9pciAoaW1wbGlxdWUgZMOpcMO0dCBudSkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAicG91ciBjbG9uZXIgZGVwdWlzIHVuIGTDqXDDtHQgbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDIKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAibmUgcGFzIHV0aWxpc2VyIGRlIGxpZW5zIGR1cnMgbG9jYXV4LCB0b3Vqb3VycyBjb3BpZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAicsOpZ2xlciBjb21tZSBkw6lww7R0IHBhcnRhZ8OpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgInNww6ljaWZpY2F0ZXVyIGRlIGNoZW1pbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgImluaXRpYWxpc2VyIGxlcyBzb3VzLW1vZHVsZXMgZGFucyBsZSBjbG9uZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibm9tYnJlIGRlIHNvdXMtbW9kdWxlcyBjbG9uw6lzIGVuIHBhcmFsbMOobGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJyw6lwZXJ0b2lyZS1tb2TDqGxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgInLDqXBlcnRvaXJlIGRlcHVpcyBsZXF1ZWwgbGVzIG1vZMOobGVzIHZvbnQgw6p0cmUgdXRpbGlzw6lzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg1Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgImTDqXDDtHQgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTQKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg3Cittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAidXRpbGlzZXIgc2V1bGVtZW50IC0tcmVmZXJlbmNlIHBvdXIgY2xvbmVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NCBidWlsdGluL3JlcGFjay5jOjMyNworbXNnaWQgIm5hbWUiCittc2dzdHIgIm5vbSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAidXRpbGlzZXIgPG5vbT4gYXUgbGlldSBkZSAnb3JpZ2luJyBwb3VyIHN1aXZyZSBsYSBicmFuY2hlIGFtb250IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAiZXh0cmFpcmUgPGJyYW5jaGU+IGF1IGxpZXUgZGUgbGEgSEVBRCBkdSByw6lwZXJ0b2lyZSBkaXN0YW50IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAiY2hlbWluIHZlcnMgZ2l0LXVwbG9hZC1wYWNrIHN1ciBsZSBzZXJ2ZXVyIGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4NDAKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyNworbXNnaWQgImRlcHRoIgorbXNnc3RyICJwcm9mb25kZXVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI2Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJjcsOpZXIgdW4gY2xvbmUgc3VwZXJmaWNpZWwgZGUgY2V0dGUgcHJvZm9uZGV1ciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MworbXNnaWQgInRpbWUiCittc2dzdHIgImhldXJlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgImNyw6llciB1biBjbG9uZSBzdXBlcmZpY2llbCBkZXB1aXMgdW5lIGRhdGUgc3DDqWNpZmlxdWUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjkgYnVpbHRpbi9mZXRjaC5jOjE3MiBidWlsdGluL2ZldGNoLmM6MTk1CisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDUKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAicsOpdmlzaW9uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMwIGJ1aWx0aW4vZmV0Y2guYzoxNzMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICIiCisiYXBwcm9mb25kaXIgbCdoaXN0b3JpcXVlIGQndW4gY2xvbmUgc3VwZXJmaWNpZWwgZW4gZXhjbHVhbnQgdW5lIHLDqXZpc2lvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMgorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiY2xvbmVyIHNldWxlbWVudCB1bmUgYnJhbmNoZSwgSEVBRCBvdSAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNAorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAiIgorIm5lIHBhcyBjbG9uZXIgbGVzIHRhZ3MgZXQgaW5kaXF1ZXIgYXV4IHLDqWN1cMOpcmF0aW9ucyBmdXR1cmVzIGRlIG5lIHBhcyBsZSAiCisiZmFpcmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICJ0b3VzIGxlcyBzb3VzLW1vZHVsZXMgY2xvbsOpcyBzZXJvbnQgc3VwZXJmaWNpZWxzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l0ZGlyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgInPDqXBhcmVyIGxlIHLDqXBlcnRvaXJlIGdpdCBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM5Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICJjbMOpPXZhbGV1ciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAicsOpZ2xlciBsYSBjb25maWd1cmF0aW9uIGRhbnMgbGUgbm91dmVhdSBkw6lww7R0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAic2VydmVyLXNwZWNpZmljIgorbXNnc3RyICJzcMOpY2lmaXF1ZSBhdSBzZXJ2ZXVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICJvcHRpb24gw6AgdHJhbnNtZXR0cmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDMgYnVpbHRpbi9mZXRjaC5jOjE5MSBidWlsdGluL3B1bGwuYzoyNDAKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NAorbXNnaWQgInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJuJ3V0aWxpc2VyIHF1ZSBkZXMgYWRyZXNzZXMgSVB2NCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjI0MworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgIm4ndXRpbGlzZXIgcXVlIGRlcyBhZHJlc3NlcyBJUHY2IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJ0b3VzIGxlcyBzb3VzLW1vZHVsZXMgY2xvbsOpcyB1dGlsaXNlcm9udCBsZXVyIGJyYW5jaGUgZGUgc3Vpdmkgw6AgZGlzdGFuY2UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNTEKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IgorbXNnc3RyICJpbml0aWFsaXNlciBsZSBmaWNoaWVyIGQnZXh0cmFjdGlvbiBwYXJ0aWVsbGUgcG91ciBuJ2luY2x1cmUgcXVlIGxlcyBmaWNoaWVycyDDoCBsYSByYWNpbmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyODcKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisiQXVjdW4gbm9tIGRlIHLDqXBlcnRvaXJlIG4nYSBwdSDDqnRyZSBkZXZpbsOpXG4iCisiVmV1aWxsZXogc3DDqWNpZmllciB1biByw6lwZXJ0b2lyZSBkYW5zIGxhIGxpZ25lIGRlIGNvbW1hbmRlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImluZm86IENvdWxkIG5vdCBhZGQgYWx0ZXJuYXRlIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJpbmZvwqA6IGltcG9zc2libGUgZCdham91dGVyIHVuZSBhbHRlcm5hdGl2ZSBwb3VyICclcyfCoDogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXhpc3RlIGV0IG4nZXN0IHBhcyB1biByw6lwZXJ0b2lyZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICLDqWNoZWMgZHUgZMOpbWFycmFnZSB1biBpdMOpcmF0ZXVyIHN1ciAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgY3LDqWF0aW9uIGR1IGxpZW4gJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBsYSBjb3BpZSB2ZXJzICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbCdpdMOpcmF0aW9uIHN1ciAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImZhaXQuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MDgKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisiTGUgY2xvbmUgYSByw6l1c3NpLCBtYWlzIGwnZXh0cmFjdGlvbiBhIMOpY2hvdcOpLlxuIgorIlZvdXMgcG91dmV6IGluc3BlY3RlciBjZSBxdWkgYSDDqXTDqSBleHRyYWl0IGF2ZWMgJ2dpdCBzdGF0dXMnXG4iCisiZXQgcsOpZXNzYXllciBhdmVjICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGEgYnJhbmNoZSBkaXN0YW50ZSAnJXMnIMOgIGNsb25lci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1MgorbXNnaWQgImZhaWxlZCB0byBpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiw6ljaGVjIGxvcnMgZGUgbCdpbml0aWFsaXNhdGlvbiBsJ2V4dHJhY3Rpb24gcGFydGllbGxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzc1Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisibGEgSEVBRCBkaXN0YW50ZSByw6lmw6hyZSDDoCB1bmUgcsOpZsOpcmVuY2Ugbm9uIGV4aXN0YW50ZSwgaW1wb3NzaWJsZSBkZSAiCisibCdleHRyYWlyZS5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgImltcG9zc2libGUgZCdleHRyYWlyZSBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODU2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlcyBwYXJhbcOodHJlcyBkYW5zIGxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxOQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgImltcG9zc2libGUgZGUgcmVtYmFsbGVyIHBvdXIgbmV0dG95ZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjEKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpbGllciBsZSBmaWNoaWVyIHRlbXBvcmFpcmUgYWx0ZXJuYXRlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1OSBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NDgKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJUcm9wIGQnYXJndW1lbnRzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2MworbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiVm91cyBkZXZleiBzcMOpY2lmaWVyIHVuIGTDqXDDtHQgw6AgY2xvbmVyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgImxlcyBvcHRpb25zIC0tYmFyZSBldCAtLW9yaWdpbiAlcyBzb250IGluY29tcGF0aWJsZXMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc5Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSBldCAtLXNlcGFyYXRlLWdpdC1kaXIgc29udCBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxlIGTDqXDDtHQgJyVzJyBuJ2V4aXN0ZSBwYXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTggYnVpbHRpbi9mZXRjaC5jOjE3ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICJsYSBwcm9mb25kZXVyICVzIG4nZXN0IHBhcyB1biBlbnRpZXIgcG9zaXRpZiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorImxlIGNoZW1pbiBkZSBkZXN0aW5hdGlvbiAnJXMnIGV4aXN0ZSBkw6lqw6AgZXQgbidlc3QgcGFzIHVuIHLDqXBlcnRvaXJlIHZpZGUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImxhIGNvcGllIGRlIHRyYXZhaWwgJyVzJyBleGlzdGUgZMOpasOgLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzMgYnVpbHRpbi9jbG9uZS5jOjEwNTQgYnVpbHRpbi9kaWZmdG9vbC5jOjI3MQorIzogYnVpbHRpbi9sb2cuYzoxODY2IGJ1aWx0aW4vd29ya3RyZWUuYzozMDIgYnVpbHRpbi93b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGVzIHLDqXBlcnRvaXJlcyBkZSBwcmVtaWVyIG5pdmVhdSBkYW5zICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSByw6lwZXJ0b2lyZSBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJDbG9uYWdlIGRhbnMgbGUgZMOpcMO0dCBudSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIkNsb25hZ2UgZGFucyAnJXMnLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDg0Cittc2dpZCAiIgorImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtIgorImFibGUiCittc2dzdHIgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBuJ2VzdCBwYXMgY29tcGF0aWJsZSBhdmVjIMOgIGxhIGZvaXMgLS1yZWZlcmVuY2UgZXQgLS0iCisicmVmZXJlbmNlLWlmLWFibGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQ4Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLWRlcHRoIGVzdCBpZ25vcsOpIGRhbnMgbGVzIGNsb25lcyBsb2NhdXggOiB1dGlsaXNleiBwbHV0w7R0IFwiZmlsZTovL1wiLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTAKK21zZ2lkICItLXNoYWxsb3ctc2luY2UgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1zaGFsbG93LXNpbmNlIGVzdCBpZ25vcsOpIGRhbnMgbGVzIGNsb25lcyBsb2NhdXggOiB1dGlsaXNleiBwbHV0w7R0IFwiZmlsZTovLyIKKyJcIi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUyCittc2dpZCAiLS1zaGFsbG93LWV4Y2x1ZGUgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1zaGFsbG93LWV4Y2x1ZGUgZXN0IGlnbm9yw6kgZGFucyBsZXMgY2xvbmVzIGxvY2F1eCA6IHV0aWxpc2V6IHBsdXTDtHQgIgorIlwiZmlsZTovL1wiLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZmlsdGVyIGVzdCBpZ25vcsOpIGRhbnMgbGVzIGNsb25lcyBsb2NhdXggOyB1dGlsaXNleiBwbHV0w7R0IGZpbGU6Ly8gLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTcKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICJsZSBkw6lww7R0IHNvdXJjZSBlc3Qgc3VwZXJmaWNpZWwsIG9wdGlvbiAtLWxvY2FsIGlnbm9yw6llIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2MgorbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAiLS1sb2NhbCBlc3QgaWdub3LDqSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMzcgYnVpbHRpbi9jbG9uZS5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIkxhIGJyYW5jaGUgZGlzdGFudGUgJXMgbidhIHBhcyDDqXTDqSB0cm91dsOpZSBkYW5zIGxlIGTDqXDDtHQgYW1vbnQgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQ4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiVm91cyBzZW1ibGV6IGF2b2lyIGNsb27DqSB1biBkw6lww7R0IHZpZGUuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjEwCittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNworbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAicmVjaGVyY2hlciBsZXMgdmFyaWFibGVzIGRlIGNvbmZpZ3VyYXRpb24iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIm1pc2UgZW4gcGFnZSDDoCB1dGlsaXNlciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIkxhcmdldXIgbWF4aW1hbGUiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICJSZW1wbGlzc2FnZSBkJ2VzcGFjZSBzdXIgbGEgYm9yZHVyZSBnYXVjaGUiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAiUmVtcGxpc3NhZ2UgZCdlc3BhY2Ugc3VyIGxlIGPDtHTDqSBkcm9pdCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJSZW1wbGlzc2FnZSBkJ2VzcGFjZSBlbnRyZSBsZXMgY29sb25uZXMiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZCBkb2l0IMOqdHJlIGxlIHByZW1pZXIgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmlsZT4pLi4uXSA8dHJlZT4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8aWRjbMOpPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpY2hpZXI+KS4uLl0gPGFyYnJlPiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIKK21zZ3N0ciAibGUgcGFyZW50IGR1cGxpcXXDqSAlcyBlc3QgaWdub3LDqSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjU2IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzYgYnVpbHRpbi9sb2cuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm5vbSBkJ29iamV0IGludmFsaWRlICVzIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWXCoDogw6ljaGVjIMOgIGwnb3V2ZXJ0dXJlIGRlICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZcKgOiDDqWNoZWMgZGUgbGEgbGVjdHVyZSBkZSAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlwqA6IMOpY2hlYyBkZSBsYSBmZXJtZXR1cmUgZGUgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMQorbXNnaWQgInBhcmVudCIKK21zZ3N0ciAicGFyZW50IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTEyCittc2dpZCAiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiaWQgZCd1biBvYmpldCBjb21taXQgcGFyZW50IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NiBidWlsdGluL21lcmdlLmM6MjcwCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NjkKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAibWVzc2FnZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNSBidWlsdGluL2NvbW1pdC5jOjE0OTYKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibWVzc2FnZSBkZSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE4Cittc2dpZCAicmVhZCBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsaXJlIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBkZXB1aXMgdW4gZmljaGllciIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMSBidWlsdGluL2NvbW1pdC5jOjE1MDggYnVpbHRpbi9tZXJnZS5jOjI4NworIzogYnVpbHRpbi9wdWxsLmM6MTk1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE4Cittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICJzaWduZXIgbGEgdmFsaWRhdGlvbiBhdmVjIEdQRyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzMworbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICJleGFjdGVtZW50IHVuIGFyYnJlIG9ibGlnYXRvaXJlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlwqA6IMOpY2hlYyBkZSBsYSBsZWN0dXJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8c3DDqWNpZmljYXRpb24tZGUtY2hlbWluPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHNww6ljaWZpY2F0aW9uLWRlLWNoZW1pbj4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogZGVtYW5kw6kgZGUgY29ycmlnZXIgbGUgY29tbWl0IGxlIHBsdXMgcsOpY2VudCwgbWFpcyBsZSBmYWlyZSBsZSAiCisicmVuZHJhaXRcbiIKKyJ2aWRlLiBWb3VzIHBvdXZleiByw6lww6l0ZXIgdm90cmUgY29tbWFuZGUgYXZlYyAtLWFsbG93LWVtcHR5LCBvdSB2b3VzIHBvdXZlelxuIgorInN1cHByaW1lciBjb21wbMOodGVtZW50IGxlIGNvbW1pdCBhdmVjIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTYKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxlIHBpY29yYWdlIHByw6ljw6lkZW50IGVzdCDDoCBwcsOpc2VudCB2aWRlLCB2cmFpc2VtYmxhYmxlbWVudCBkw7sgw6AgdW5lICIKKyJyw6lzb2x1dGlvbiBkZSBjb25mbGl0LlxuIgorIlNpIHZvdXMgc291aGFpdGV6IHRvdXQgZGUgbcOqbWUgbGUgdmFsaWRlciwgdXRpbGlzZXogOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MworbXNnaWQgIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCdcbiIKK21zZ3N0ciAiU2lub24sIHZldWlsbGV6IHV0aWxpc2VyICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2Cittc2dpZCAiIgorImFuZCB0aGVuIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyJ0byByZXN1bWUgY2hlcnJ5LXBpY2tpbmcgdGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorbXNnc3RyICIiCisidXRpbGlzZXogZW5zdWl0ZcKgOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInBvdXIgY29udGludWVyIGxlIHBpY29yYWdlIGRlcyBjb21taXRzIHJlc3RhbnRzLlxuIgorIlNpIHZvdXMgc291aGFpdGV6IHNhdXRlciBjZSBjb21taXQsIHV0aWxpc2V6wqA6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBwZWRcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMTUKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIsOpY2hlYyBkdSBkw6lwYXF1ZXRhZ2UgZGUgbCdvYmpldCBhcmJyZSBIRUFEIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgYXZlYyBsJ29wdGlvbiAtYSBuJ2EgcGFzIGRlIHNlbnMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICJBdWN1biBjaGVtaW4gYXZlYyBsZXMgb3B0aW9ucyAtLWluY2x1ZGUvLS1vbmx5IG4nYSBwYXMgZGUgc2Vucy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc2Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGwnaW5kZXggdGVtcG9yYWlyZSIKKworIzogYnVpbHRpbi9jb21taXQuYzozODIKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCdham91dCBpbnRlcmFjdGlmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGwnaW5kZXggdGVtcG9yYWlyZSIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBsJ2FyYnJlIGRlIGNhY2hlIHByaW5jaXBhbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjMgYnVpbHRpbi9jb21taXQuYzo0NDYgYnVpbHRpbi9jb21taXQuYzo0OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXIgbmV3X2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmYWlyZSB1bmUgdmFsaWRhdGlvbiBwYXJ0aWVsbGUgcGVuZGFudCB1bmUgZnVzaW9uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzcKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImltcG9zc2libGUgZGUgZmFpcmUgdW5lIHZhbGlkYXRpb24gcGFydGllbGxlIHBlbmRhbnQgdW4gcGljb3JhZ2UuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4NQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBmaWNoaWVyIGQnaW5kZXggdGVtcG9yYWlyZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAiZW50w6p0ZSBkJ2F1dGV1ciBtYW5xdWFudCBkYW5zIGxlIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICJsZSBjb21taXQgJyVzJyBhIHVuZSBsaWduZSBkJ2F1dGV1ciBtYWxmb3Jtw6llIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyMworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFtw6h0cmUgLS1hdXRob3IgbWFsIGZvcm3DqSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NzYKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgc8OpbGVjdGlvbm5lciB1biBjYXJhY3TDqHJlIGRlIGNvbW1lbnRhaXJlXG4iCisicXVpIG4nZXN0IHBhcyB1dGlsaXPDqSBkYW5zIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBhY3R1ZWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE0IGJ1aWx0aW4vY29tbWl0LmM6NzQ3IGJ1aWx0aW4vY29tbWl0LmM6MTA5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZWNoZXJjaGVyIGxlIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjYgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIobGVjdHVyZSBkdSBtZXNzYWdlIGRlIGpvdXJuYWwgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZClcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGpvdXJuYWwgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgZGUgam91cm5hbCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc2MyBidWlsdGluL2NvbW1pdC5jOjc3OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3MAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIE1FUkdFX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MzAKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBtb2TDqGxlIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiSWwgc2VtYmxlIHF1ZSB2b3VzIHZhbGlkaWV6IHVuZSBmdXNpb24uXG4iCisiU2kgY2Ugbidlc3QgcGFzIGxlIGNhcywgdmV1aWxsZXogc3VwcHJpbWVyIGxlIGZpY2hpZXJcbiIKKyJcdCVzXG4iCisiZXQgZXNzYXlleiDDoCBub3V2ZWF1LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbCBzZW1ibGUgcXVlIHZvdXMgdmFsaWRpZXogdW4gcGljb3JhZ2UuXG4iCisiU2kgY2Ugbidlc3QgcGFzIGxlIGNhcywgdmV1aWxsZXogc3VwcHJpbWVyIGxlIGZpY2hpZXJcbiIKKyJcdCVzXG4iCisiZXQgZXNzYXlleiDDoCBub3V2ZWF1LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiVmV1aWxsZXogc2Fpc2lyIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBwb3VyIHZvcyBtb2RpZmljYXRpb25zLiBMZXMgbGlnbmVzXG4iCisiY29tbWVuw6dhbnQgcGFyICclYycgc2Vyb250IGlnbm9yw6llcywgZXQgdW4gbWVzc2FnZSB2aWRlIGFiYW5kb25uZSBsYSAiCisidmFsaWRhdGlvbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJWZXVpbGxleiBzYWlzaXIgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIHBvdXIgdm9zIG1vZGlmaWNhdGlvbnMuIExlcyBsaWduZXNcbiIKKyJjb21tZW7Dp2FudCBwYXIgJyVjJyBzZXJvbnQgY29uc2VydsOpZXMgOyB2b3VzIHBvdXZleiBsZXMgc3VwcHJpbWVyIHZvdXMtbcOqbWVcbiIKKyJzaSB2b3VzIGxlIHNvdWhhaXRlei4gVW4gbWVzc2FnZSB2aWRlIGFiYW5kb25uZSBsYSB2YWxpZGF0aW9uLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQXV0ZXVyIDogICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVzRGF0ZSA6ICAgICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzVmFsaWRhdGV1ciA6ICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkyNQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbCdpbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTIKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY29uc3RydWN0aW9uIGRlcyBhcmJyZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAwNiBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIlZldWlsbGV6IGZvdXJuaXIgbGUgbWVzc2FnZSBlbiB1dGlsaXNhbnQgbCdvcHRpb24gLW0gb3UgLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciAnJXMnIG4nZXN0IHBhcyBkZSBsYSBmb3JtZSAnTm9tIDxlbWFpbD4nIG5pIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gIgorImF1dGV1ciBleGlzdGFudCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaWdub3JlZCBtb2RlICclcyciCittc2dzdHIgIk1vZGUgZGUgZmljaGllciBpZ25vcsOpIGludmFsaWRlICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4MiBidWlsdGluL2NvbW1pdC5jOjEzMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJNb2RlIGRlIGZpY2hpZXIgbm9uIHN1aXZpIGludmFsaWRlICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyMgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIGV0IC16IHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY2Cittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiTCd1dGlsaXNhdGlvbiBzaW11bHRhbsOpZSBkZSAtLXJlc2V0LWF1dGhvciBldCAtLWF1dGhvciBuJ2EgcGFzIGRlIHNlbnMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3NQorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICJJbCBuJ3kgYSByaWVuIMOgIGNvcnJpZ2VyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc4Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBlbiBwbGVpbmUgZnVzaW9uIC0tIGltcG9zc2libGUgZGUgY29ycmlnZXIgKGFtZW5kKS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIlZvdXMgw6p0ZXMgZW4gcGxlaW4gcGljb3JhZ2UgLS0gaW1wb3NzaWJsZSBkZSBjb3JyaWdlciAoYW1lbmQpLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiTGVzIG9wdGlvbnMgLS1zcXVhc2ggZXQgLS1maXh1cCBuZSBwZXV2ZW50IHBhcyDDqnRyZSB1dGlsaXPDqWVzIGVuc2VtYmxlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTMKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiVW5lIHNldWxlIG9wdGlvbiBwYXJtaSAtYy8tQy8tRi8tLWZpeHVwIHBldXQgw6p0cmUgdXRpbGlzw6llLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiTCdvcHRpb24gLW0gbmUgcGV1dCBwYXMgw6p0cmUgY29tYmluw6llIGF2ZWMgLWMvLUMvLUYuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDMKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICItLXJlc2V0LWF1dGhvciBuZSBwZXV0IMOqdHJlIHV0aWxpc8OpIHF1J2F2ZWMgLUMsIC1jIG91IC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjAKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJVbmUgc2V1bGUgb3B0aW9uIHBhcm1pIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIHBldXQgIgorIsOqdHJlIHV0aWxpc8OpZS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgImRlcyBjaGVtaW5zICclcyAuLi4nIGF2ZWMgbCdvcHRpb24gLWEgbidhIHBhcyBkZSBzZW5zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTcgYnVpbHRpbi9jb21taXQuYzoxNTE5Cittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJhZmZpY2hlciBsJ8OpdGF0IGF2ZWMgY29uY2lzaW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTkgYnVpbHRpbi9jb21taXQuYzoxNTIxCittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgImFmZmljaGVyIGwnaW5mb3JtYXRpb24gZGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYxCittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiYWZmaWNoZXIgbCdpbmZvcm1hdGlvbiBkZSByZW1pc2FnZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYzIGJ1aWx0aW4vY29tbWl0LmM6MTUyMworbXNnaWQgImNvbXB1dGUgZnVsbCBhaGVhZC9iZWhpbmQgdmFsdWVzIgorbXNnc3RyICJjYWxjdWxlIGxlcyB2YWxldXJzIGNvbXBsw6h0ZXMgZW4gYXZhbmNlL2VuIHJldGFyZCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2lvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1IGJ1aWx0aW4vY29tbWl0LmM6MTUyNSBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NTAKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAic29ydGllIHBvdXIgdHJhaXRlbWVudCBhdXRvbWF0aXF1ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4IGJ1aWx0aW4vY29tbWl0LmM6MTUyNworbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAiYWZmaWNoZXIgbCfDqXRhdCBlbiBmb3JtYXQgbG9uZyAocGFyIGTDqWZhdXQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzEgYnVpbHRpbi9jb21taXQuYzoxNTMwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgInRlcm1pbmVyIGxlcyDDqWzDqW1lbnRzIHBhciBOVUwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjEzNzcgYnVpbHRpbi9jb21taXQuYzoxNTMzCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTI1IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICJtb2RlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzQgYnVpbHRpbi9jb21taXQuYzoxNTMzCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIG5vbiBzdWl2aXMsIFwibW9kZVwiIGZhY3VsdGF0aWYgOiBhbGwgKHRvdXMpLCBub3JtYWwsICIKKyJuby4gKETDqWZhdXQgOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzgKK21zZ2lkICIiCisic2hvdyBpZ25vcmVkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gKERlZmF1bHQ6ICIKKyJ0cmFkaXRpb25hbCkiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgZmljaGllcnMgaWdub3LDqXMsIFwibW9kZVwiIGZhY3VsdGF0aWYgOiB0cmFkaXRpb25hbCAiCisiKHRyYWRpdGlvbm5lbCksIG1hdGNoaW5nIChjb3JyZXNwb25kYW50KSwgbm8uIChEw6lmYXV0wqA6IHRyYWRpdGlvbmFsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJxdWFuZCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiaWdub3JlciBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGxlcyBzb3VzLW1vZHVsZXMsIFwicXVhbmRcIiBmYWN1bHRhdGlmIDogYWxsICIKKyIodG91cyksIGRpcnR5IChzYWxlKSwgdW50cmFja2VkIChub24gc3VpdmkpLiAoRMOpZmF1dCA6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgImFmZmljaGVyIGxlcyBmaWNoaWVycyBub24gc3VpdmlzIGVuIGNvbG9ubmVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODQKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgIm5lIHBhcyBkw6l0ZWN0ZXIgbGVzIHJlbm9tbWFnZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICIiCisiZMOpdGVjdGVyIGxlcyByZW5vbW1hZ2VzLCBlbiBzcMOpY2lmaWFudCBvcHRpb25uZWxsZW1lbnQgbGUgZmFjdGV1ciBkZSAiCisic2ltaWxhcml0w6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQwNgorbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJDb21iaW5haXNvbiBub24gc3VwcG9ydMOpZSBkJ2FyZ3VtZW50cyBzdXIgbGVzIGZpY2hpZXJzIGlnbm9yw6lzIGV0IG5vbi1zdWl2aXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4OQorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgInN1cHByaW1lciBsZSByw6lzdW3DqSBhcHLDqHMgdW5lIHZhbGlkYXRpb24gcsOpdXNzaWUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MAorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGRpZmYgZGFucyBsZSBtb2TDqGxlIGRlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkyCittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkdSBtZXNzYWdlIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MyBidWlsdGluL21lcmdlLmM6Mjc0IGJ1aWx0aW4vdGFnLmM6NDE0Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAibGlyZSBsZSBtZXNzYWdlIGRlcHVpcyB1biBmaWNoaWVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJhdXRob3IiCittc2dzdHIgImF1dGV1ciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgInJlbXBsYWNlciBsJ2F1dGV1ciBwb3VyIGxhIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NSBidWlsdGluL2djLmM6NTM4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICJyZW1wbGFjZXIgbGEgZGF0ZSBwb3VyIGxhIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NyBidWlsdGluL2NvbW1pdC5jOjE0OTggYnVpbHRpbi9jb21taXQuYzoxNDk5CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgImNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3Cittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgInLDqXV0aWxpc2VyIGV0IMOpZGl0ZXIgbGUgbWVzc2FnZSBkdSBjb21taXQgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4Cittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgInLDqXV0aWxpc2VyIGxlIG1lc3NhZ2UgZHUgY29tbWl0IHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJ1dGlsaXNlciB1biBtZXNzYWdlIGF1IGZvcm1hdCBhdXRvc3F1YXNoIHBvdXIgY29ycmlnZXIgbGUgY29tbWl0IHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisidXRpbGlzZXIgdW4gbWVzc2FnZSBhdSBmb3JtYXQgYXV0b3NxdWFzaCBwb3VyIGNvbXByZXNzZXIgbGUgY29tbWl0IHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKyLDoCBwcsOpc2VudCBqZSBzdWlzIGwnYXV0ZXVyIGRlIGxhIHZhbGlkYXRpb24gKHV0aWxpc8OpIGF2ZWMgLUMvLWMvLS1hbWVuZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMiBidWlsdGluL2xvZy5jOjE2MzQgYnVpbHRpbi9tZXJnZS5jOjI4OQorIzogYnVpbHRpbi9wdWxsLmM6MTY0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICJham91dGVyIHVuZSBlbnRyw6llIFNpZ25lZC1vZmYtYnkgOiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICJ1dGlsaXNlciBsZSBmaWNoaWVyIGRlIG1vZMOobGUgc3DDqWNpZmnDqSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgImZvcmNlciBsJ8OpZGl0aW9uIGR1IGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA2Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImluY2x1cmUgbCfDqXRhdCBkYW5zIGxlIG1vZMOobGUgZGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAiVmFsaWRlciBsZXMgb3B0aW9ucyBkZXMgY29udGVudXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAidmFsaWRlciB0b3VzIGxlcyBmaWNoaWVycyBtb2RpZmnDqXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMworbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAiYWpvdXRlciBsZXMgZmljaGllcnMgc3DDqWNpZmnDqXMgw6AgbCdpbmRleCBwb3VyIGxhIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJham91dGVyIGRlcyBmaWNoaWVycyBlbiBtb2RlIGludGVyYWN0aWYiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImFqb3V0ZXIgbGVzIG1vZGlmaWNhdGlvbnMgZW4gbW9kZSBpbnRlcmFjdGlmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTYKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgInZhbGlkZXIgc2V1bGVtZW50IGxlcyBmaWNoaWVycyBzcMOpY2lmacOpcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIsOpdml0ZXIgZCd1dGlsaXNlciBsZXMgY3JvY2hldHMgcHJlLWNvbW1pdCBldCBjb21taXQtbXNnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJhZmZpY2hlciBjZSBxdWkgc2VyYWl0IHZhbGlkw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMQorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiY29ycmlnZXIgbGEgdmFsaWRhdGlvbiBwcsOpY8OpZGVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiw6l2aXRlciBkJ3V0aWxpc2VyIGxlIGNyb2NoZXQgcG9zdC1yZXdyaXRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzkKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJhY2NlcHRlciBkJ2VucmVnaXN0cmVyIHVuZSBtb2RpZmljYXRpb24gdmlkZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQxCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiYWNjZXB0ZXIgZCdlbnJlZ2lzdHJlciB1bmUgbW9kaWZpY2F0aW9uIGF2ZWMgdW4gbWVzc2FnZSB2aWRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiRmljaGllciBNRVJHRV9IRUFEIGNvcnJvbXB1ICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBNRVJHRV9NT0RFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJBYmFuZG9uIGRlIGxhIHZhbGlkYXRpb24gZMO7IMOgIHVuIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiB2aWRlLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICJBYmFuZG9uIGRlIGxhIHZhbGlkYXRpb24gOyB2b3VzIG4nYXZleiBwYXMgw6lkaXTDqSBsZSBtZXNzYWdlXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY4NgorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisibGUgZMOpcMO0dCBhIMOpdMOpIG1pcyDDoCBqb3VyLCBtYWlzIGltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXJcbiIKKyJuZXdfaW5kZXguIFbDqXJpZmlleiBxdWUgbGUgZGlzcXVlIG4nZXN0IHBhcyBwbGVpbiBvdSBxdWUgbGUgcXVvdGFcbiIKKyJuJ2EgcGFzIMOpdMOpIGTDqXBhc3PDqSwgcHVpcyBsYW5jZXogXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHBvdXIgcsOpcGFyZXIuIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTcKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIyCittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLSIKKyJyZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxzcGxpdCBvcHRpb25zPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8csOpcGVydG9pcmUtZCdvYmpldD5dIFstLWFwcGVuZHwtLSIKKyJzcGxpdF0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS18bm8tXXByb2dyZXNzXSAiCisiPG9wdGlvbnMgZGUgZGl2aXNpb24+IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAzCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4NyBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAicsOpcGVydG9pcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDQKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg4Cittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICJMZSByw6lwZXJ0b2lyZSBkJ29iamV0IG/DuSBzdG9ja2VyIGxlIGdyYXBoZSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MQorbXNnaWQgImlmIHRoZSBjb21taXQtZ3JhcGggaXMgc3BsaXQsIG9ubHkgdmVyaWZ5IHRoZSB0aXAgZmlsZSIKK21zZ3N0ciAiIgorInNpIGxlIGdyYXBoZSBkZSBjb21taXQgZXN0IGRpdmlzw6ksIHbDqXJpZmllciBzZXVsZW1lbnQgbGUgZmljaGllciBzb21tZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzMgdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZ3JhcGhlIGRlIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgImNvbW1lbmNlciBsZSBwYXJjb3VycyDDoCB0b3V0ZXMgbGVzIHLDqWZzIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwOAorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAic2Nhbm5lciBsZXMgaW5kZXggY29tcGFjdMOpcyBsaXN0w6lzIHN1ciBzdGRpbiDDoCBsYSByZWNoZXJjaGUgZGUgY29tbWl0cyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTAKK21zZ2lkICJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIgorbXNnc3RyICJjb21tZW5jZXIgbGUgcGFyY291cnMgYXV4IGNvbW1pdHMgbGlzdMOpcyBzdXIgc3RkaW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEyCittc2dpZCAiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiIgorImluY2x1cmUgdG91cyBsZXMgY29tbWl0cyBkw6lqw6AgcHLDqXNlbnRzIGRhbnMgbGUgZmljaGllciBkZSBncmFwaGUgZGUgY29tbWl0cyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTUKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJwZXJtZXR0cmUgZCfDqWNyaXJlIHVuIGZpY2hpZXIgaW5jcsOpbWVudGFsIGRlIGdyYXBoZSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE3IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorImxlIG5vbWJyZSBtYXhpbXVtIGRlIGNvbW1pdHMgZGFucyB1biBncmFwaGUgZGUgY29tbWl0IGRpdmlzw6kgcGFzIGRlIGJhc2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE5Cittc2dpZCAibWF4aW11bSByYXRpbyBiZXR3ZWVuIHR3byBsZXZlbHMgb2YgYSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgInJhcHBvcnQgbWF4aW11bSBlbnRyZSBkZXV4IG5pdmVhdXggZCd1biBncmFwaGUgZGUgY29tbWl0IGRpdmlzw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgInV0aWxpc2V6IHVuIHNldWwgcGFybWkgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cyBvdSAtLXN0ZGluLXBhY2tzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExCittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDMgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICJhcmd1bWVudCAtLXR5cGUgbm9uIHJlY29ubnUsICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNQorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICJxdSd1biBzZXVsIHR5cGUgw6AgbGEgZm9pcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjQKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiRW1wbGFjZW1lbnQgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgInV0aWxpc2VyIGxlcyBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZ2xvYmFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgInV0aWxpc2VyIGxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBkdSBzeXN0w6htZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXRpbGlzZXIgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGR1IGTDqXDDtHQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXRpbGlzZXIgdW4gZmljaGllciBkZSBjb25maWd1cmF0aW9uIHBhciBhcmJyZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAidXRpbGlzZXIgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiYmxvYi1pZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICJsaXJlIGxhIGNvbmZpZ3VyYXRpb24gZGVwdWlzIGwnb2JqZXQgYmxvYiBmb3VybmkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICJBY3Rpb24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idGVuaXIgbGEgdmFsZXVyIDogbm9tIFtyZWdleC1kZS12YWxldXJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMworbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0ZW5pciB0b3V0ZXMgbGVzIHZhbGV1cnMgOiBjbMOpIFtyZWdleC1kZS12YWxldXJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJvYnRlbmlyIGxlcyB2YWxldXIgcG91ciBsYSByZWdleHAgOiByZWdleC1kZS1ub20gW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAib2J0ZW5pciBsYSB2YWxldXIgc3DDqWNpZmlxdWUgcG91ciBsJ1VSTCA6IHNlY3Rpb25bLnZhcl0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisicmVtcGxhY2VyIHRvdXRlcyBsZXMgdmFyaWFibGVzIGNvcnJlc3BvbmRhbnQgOiBub20gdmFsZXVyIFtyZWdleC1kZS12YWxldXJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAiYWpvdXRlciB1bmUgbm91dmVsbGUgdmFyaWFibGUgOiBub20gdmFsZXVyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOAorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInN1cHByaW1lciB1bmUgdmFyaWFibGUgOiBub20gW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInN1cHByaW1lciB0b3V0ZXMgbGVzIGNvcnJlc3BvbmRhbmNlcyBub20gW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJyZW5vbW1lciB1bmUgc2VjdGlvbiA6IGFuY2llbi1ub20gbm91dmVhdS1ub20iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQxCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAic3VwcHJpbWVyIHVuZSBzZWN0aW9uIDogbm9tIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJhZmZpY2hlciB0b3V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICJvdXZyaXIgdW4gw6lkaXRldXIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogc2xvdCBbZGVmYXVsdF0iCittc2dzdHIgInRyb3V2ZXIgbGEgY291bGV1ciBjb25maWd1csOpZSA6IHNsb3QgW3BhciBkw6lmYXV0XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAidHJvdXZlciBsZSByw6lnbGFnZSBkZSBsYSBjb3VsZXVyIDogc2xvdCBbc3Rkb3V0LWVzdC10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgIlR5cGUiCittc2dzdHIgIlR5cGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozOAorbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiY2UgdHlwZSBlc3QgYXNzaWduw6kgw6AgbGEgdmFsZXVyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OAorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAibGEgdmFsZXVyIGVzdCBcInRydWVcIiAodnJhaSkgb3UgXCJmYWxzZVwiIChmYXV4KSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAibGEgdmFsZXVyIGVzdCB1biBub21icmUgZMOpY2ltYWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUwCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJsYSB2YWxldXIgZXN0IC0tYm9vbCBvdSAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJsYSB2YWxldXIgZXN0IHVuIGNoZW1pbiAodmVycyB1biBmaWNoaWVyIG91IHVuIHLDqXBlcnRvaXJlKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTIKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAibGEgdmFsZXVyIGVzdCB1bmUgZGF0ZSBkJ2V4cGlyYXRpb24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUzCittc2dpZCAiT3RoZXIiCittc2dzdHIgIkF1dHJlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAidGVybWluZXIgbGVzIHZhbGV1cnMgYXZlYyB1biBjYXJhY3TDqHJlIE5VTCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTUKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIGxlcyBub21zIGRlIHZhcmlhYmxlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NgorbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAicmVzcGVjdGVyIGxlcyBkaXJlY3RpdmVzIGQnaW5jbHVzaW9uIGxvcnMgZGUgbGEgcmVjaGVyY2hlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NworbXNnaWQgInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsJ29yaWdpbmUgZGUgbGEgY29uZmlndXJhdGlvbiAoZmljaGllciwgZW50csOpZSBzdGFuZGFyZCwgYmxvYiwgIgorImxpZ25lIGRlIGNvbW1hbmRlKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTggYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQwCittc2dpZCAidmFsdWUiCittc2dzdHIgInZhbGV1ciIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgImF2ZWMgLS1nZXQsIHV0aWxpc2VyIGxlIHZhbGV1ciBwYXIgZMOpZmF1dCBxdWFuZCBsJ2VudHLDqWUgbidleGlzdGUgcGFzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIm1hdXZhaXMgbm9tYnJlIGQnYXJndW1lbnRzLCBkZXZyYWl0IMOqdHJlICVkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgZnJvbSAlZCB0byAlZCIKK21zZ3N0ciAibWF1dmFpcyBub21icmUgZCdhcmd1bWVudHMsIGRldnJhaXQgw6p0cmUgZW50cmUgJWQgZXQgJWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IHBhdHRlcm46ICVzIgorbXNnc3RyICJtb3RpZiBkZSBjbMOpIGludmFsaWRlwqA6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAiw6ljaGVjIGR1IGZvcm1hdGFnZSBkZSBsYSB2YWxldXIgZGUgY29uZmlnIHBhciBkw6lmYXV0wqA6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxhIGNvdWxldXIgJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxhIHZhbGV1ciBkZSBjb3VsZXVyIHBhciBkw6lmYXV0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5NiBidWlsdGluL2NvbmZpZy5jOjc0MgorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgInBhcyBkYW5zIHVuIHLDqXBlcnRvaXJlIGdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTkKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImwnw6ljcml0dXJlIHN1ciBzdGRpbiBuJ2VzdCBwYXMgc3VwcG9ydMOpZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MDIKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJsJ8OpY3JpdHVyZSBkZSBibG9iIGRlIGNvbmZpZ3VyYXRpb24gbidlc3QgcGFzIHN1cHBvcnTDqWU8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyBDZWNpIGVzdCBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gcGVyc29ubmVsIGRlIEdpdC5cbiIKKyJbdXNlcl1cbiIKKyIjIFZldWlsbGV6IGFkYXB0ZXIgZXQgZMOpY29tbWVudGVyIGxlcyBsaWduZXMgc3VpdmFudGVzwqA6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxMQorbXNnaWQgIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZSIKK21zZ3N0ciAidW4gc2V1bCBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gw6AgbGEgZm9pcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTYKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tbG9jYWwgbmUgcGV1dCDDqnRyZSB1dGlsaXPDqSBxdSfDoCBsJ2ludMOpcmlldXIgZCd1biBkw6lww7R0IGdpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTkKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1ibG9iIG5lIHBldXQgw6p0cmUgdXRpbGlzw6kgcXUnw6AgbCdpbnTDqXJpZXVyIGQndW4gZMOpcMO0dCBnaXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjM4Cittc2dpZCAiJEhPTUUgbm90IHNldCIKK21zZ3N0ciAiJEhPTUUgbidlc3QgcGFzIGTDqWZpbmkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjU4Cittc2dpZCAiIgorIi0td29ya3RyZWUgY2Fubm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIHVubGVzcyB0aGUgY29uZmlnXG4iCisiZXh0ZW5zaW9uIHdvcmt0cmVlQ29uZmlnIGlzIGVuYWJsZWQuIFBsZWFzZSByZWFkIFwiQ09ORklHVVJBVElPTiBGSUxFXCJcbiIKKyJzZWN0aW9uIGluIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmb3IgZGV0YWlscyIKK21zZ3N0ciAiIgorIi0td29ya3RyZWUgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyBkZXMgYXJicmVzIGRlIHRyYXZhaWwgbXVsdGlwbGVzXG4iCisiw6AgbW9pbnMgcXVlIGwnZXh0ZW5zaW9uIHdvcmt0cmVlQ29uZmlnIHNvaXQgY29uZmlndXLDqS4gVmV1aWxsZXogbGlyZVxuIgorImxhIHNlY3Rpb24gXCJDT05GSUdVUkFUSU9OIEZJTEVcIiBkZSBcImdpdCBoZWxwIHdvcmt0cmVlXCIgcG91ciBwbHVzIGRlICIKKyJkw6l0YWlscyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2ODgKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAiLS1nZXQtY29sb3IgZXQgbGUgdHlwZSBkZSBsYSB2YXJpYWJsZSBzb250IGluY29ow6lyZW50cyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OTMKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICJ1bmUgc2V1bGUgYWN0aW9uIMOgIGxhIGZvaXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IG4nZXN0IGFwcGxpY2FibGUgcXUnYXZlYyAtLWxpc3Qgb3UgLS1nZXQtcmVnZXhwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxMgorbXNnaWQgIiIKKyItLXNob3ctb3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIGFuZCAtLSIKKyJsaXN0IgorbXNnc3RyICIiCisiLS1zaG93LW9yaWdpbiBuJ2VzdCBhcHBsaWNhYmxlIHF1J2F2ZWMgLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwIG91IC0tIgorImxpc3QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE4Cittc2dpZCAiLS1kZWZhdWx0IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCIKK21zZ3N0ciAiLS1kZWZhdWx0IG4nZXN0IGFwcGxpY2FibGUgcXUnYXZlYyAtLWdldCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAibGVjdHVyZSBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gJyVzJyBpbXBvc3NpYmxlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczNAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgImVycmV1ciBsb3JzIGR1IHRyYWl0ZW1lbnQgZGUgZmljaGllcihzKSBkZSBjb25maWd1cmF0aW9uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgImVkaXRpbmcgc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibCfDqWRpdGlvbiBkZSBzdGRpbiBuJ2VzdCBwYXMgc3VwcG9ydMOpZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDYKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImwnw6lkaXRpb24gZGUgYmxvYnMgbidlc3QgcGFzIHN1cHBvcnTDqWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJjcsOpYXRpb24gaW1wb3NzaWJsZSBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHN1cmNoYXJnZXIgZGVzIHZhbGV1cnMgbXVsdGlwbGVzIGF2ZWMgdW5lIHNldWxlIHZhbGV1clxuIgorIiAgICAgICBVdGlsaXNleiB1bmUgcmVnZXhwLCAtLWFkZCBvdSAtLXJlcGxhY2UtYWxsIHBvdXIgbW9kaWZpZXIgJXMuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjg0NyBidWlsdGluL2NvbmZpZy5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHNlY3Rpb246ICVzIgorbXNnc3RyICJzZWN0aW9uIGluZXhpc3RhbnRlwqA6ICVzIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiYWZmaWNoZSBsZXMgdGFpbGxlcyBkYW5zIHVuIGZvcm1hdCBodW1haW5lbWVudCBsaXNpYmxlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjYKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSA8Y29tbWl0IG91IGFwcGFyZW50w6k+KiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJoZWFkIgorbXNnc3RyICJ0w6p0ZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgImzDqWdlciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICJhbm5vdMOpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAibCfDqXRpcXVldHRlIGFubm90w6llICVzIG4nZXN0IHBhcyBkaXNwb25pYmxlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImwnw6l0aXF1ZXR0ZSBhbm5vdMOpZSAlcyBuJ2EgcGFzIGRlIG5vbSBlbWJhcnF1w6kiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAibCfDqXRpcXVldHRlICclcycgZXN0IGVuIGZhaXQgJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgImF1Y3VuZSDDqXRpcXVldHRlIG5lIGNvcnJlc3BvbmQgcGFyZmFpdGVtZW50IMOgICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiIgorIlBhcyBkZSBjb3JyZXNwb25kYW5jZSBleGFjdGUgc3VyIGRlcyByw6lmcyBvdSBkZXMgw6l0aXF1ZXR0ZXMsIHJlY2hlcmNoZSBwYXIgIgorImRlc2NyaWJlXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgInJlY2hlcmNoZSB0ZXJtaW7DqWUgw6AgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIkF1Y3VuZSDDqXRpcXVldHRlIGFubm90w6llIG5lIHBldXQgZMOpY3JpcmUgJyVzJy5cbiIKKyJDZXBlbmRhbnQsIGlsIGV4aXN0ZSBkZXMgw6l0aXF1ZXR0ZXMgbm9uLWFubm90w6llcyA6IGVzc2F5ZXogYXZlYyAtLXRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyJBdWN1bmUgw6l0aXF1ZXR0ZSBuZSBwZXV0IGTDqWNyaXJlICclcycuXG4iCisiRXNzYXlleiAtLWFsd2F5cywgb3UgY3LDqWV6IGRlcyDDqXRpcXVldHRlcy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiVsdSBjb21taXRzIHBhcmNvdXJ1c1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorInBsdXMgZGUgJWkgw6l0aXF1ZXR0ZXMgb250IMOpdMOpIHRyb3V2w6llczsgc2V1bGVzIGxlcyAlaSBwbHVzIHLDqWNlbnRlcyBzb250ICIKKyJhZmZpY2jDqWVzXG4iCisiYWJhbmRvbiBkZSBsYSByZWNoZXJjaGUgw6AgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICJkw6ljcmlyZSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIlcyBuJ2VzdCBwYXMgdW4gbm9tIGQnb2JqZXQgdmFsaWRlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzIG4nZXN0IG5pIHVuIGNvbW1pdCBuaSB1biBibG9iIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM3Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAicmVjaGVyY2hlciBsJ8OpdGlxdWV0dGUgcXVpIHN1aXQgbGUgY29tbWl0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM4Cittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAiZMOpYm9ndWVyIGxhIHN0cmF0w6lnaWUgZGUgcmVjaGVyY2hlIHN1ciBzdGRlcnIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzkKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAidXRpbGlzZXIgbidpbXBvcnRlIHF1ZWxsZSByw6lmw6lyZW5jZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJ1dGlsaXNlciBuJ2ltcG9ydGUgcXVlbGxlIMOpdGlxdWV0dGUsIG3Dqm1lIG5vbi1hbm5vdMOpZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgInRvdWpvdXJzIHV0aWxpc2VyIGxlIGZvcm1hdCBsb25nIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQyCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICJuZSBzdWl2cmUgcXVlIGxlIHByZW1pZXIgcGFyZW50IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ1Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAibidhZmZpY2hlciBxdWUgbGVzIGNvcnJlc3BvbmRhbmNlcyBleGFjdGVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ3Cittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiIgorImNvbnNpZMOpcmVyIHVuaXF1ZW1lbnQgbGVzIDxuPiDDqXRpcXVldHRlcyBsZSBwbHVzIHLDqWNlbnRlcyAoZMOpZmF1dCA6IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0OQorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIm5lIGNvbnNpZMOpcmVyIHF1ZSBsZXMgw6l0aXF1ZXR0ZXMgY29ycmVzcG9uZGFudCDDoCA8bW90aWY+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJuZSBwYXMgY29uc2lkw6lyZXIgbGVzIMOpdGlxdWV0dGVzIGNvcnJlc3BvbmRhbnQgw6AgPG1vdGlmPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MyBidWlsdGluL25hbWUtcmV2LmM6NDczCittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICJhZmZpY2hlciBsZXMgb2JqZXRzIGNvbW1pdHMgYWJyw6lnw6lzIGVuIGRlcm5pZXIgcmVjb3VycyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NCBidWlsdGluL2Rlc2NyaWJlLmM6NTU3Cittc2dpZCAibWFyayIKK21zZ3N0ciAibWFycXVlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICJham91dGVyIDxtYXJxdWU+IHNpIGxhIGNvcGllIGRlIHRyYXZhaWwgZXN0IHNhbGUgKGTDqWZhdXQgOiBcIi1kaXJ0eVwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OAorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICIiCisiYWpvdXRlciA8bWFycXVlPiBzaSBsYSBjb3BpZSBkZSB0cmF2YWlsIGVzdCBjYXNzw6llIChkw6lmYXV0IDogXCItYnJva2VuXCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTc2Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyBldCAtLWFiYnJldj0wIHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYwNQorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJhdWN1biBub20gdHJvdXbDqSwgaW1wb3NzaWJsZSBkZSBkw6ljcmlyZSBxdW9pIHF1ZSBjZSBzb2l0LiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1NgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWRpcnR5IGVzdCBpbmNvbXBhdGlibGUgYXZlYyBsYSBzcMOpY2lmaWNhdGlvbiBkZSBjb21taXRzIG91IGFzc2ltaWzDqXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTgKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tYnJva2VuIGVzdCBpbmNvbXBhdGlibGUgYXZlYyBsZXMgY29tbWl0cyBvdSBhc3NpbWlsw6lzIgorCisjOiBidWlsdGluL2RpZmYuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAiJyVzJyA6IG4nZXN0IHBhcyB1biBmaWNoaWVyIHLDqWd1bGllciBuaSB1biBsaWVuIHN5bWJvbGlxdWUiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9wdGlvbiBpbnZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzozNTAKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiQ2Ugbidlc3QgcGFzIHVuIGTDqXDDtHQgZ2l0ICEiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAib2JqZXQgc3DDqWNpZmnDqSAnJXMnIGludmFsaWRlLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgInBsdXMgZGUgZGV1eCBibG9icyBzcMOpY2lmacOpcyA6ICclcyciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvYmpldCBub24gZ8OpcsOpICclcycgc3DDqWNpZmnDqS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMAorbXNnaWQgImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8Y2hlbWluPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAiw6ljaGVjIDogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAibGVjdHVyZSBkdSBsaWVuIHN5bWJvbGlxdWUgJXMgaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBmaWNoaWVyIHN5bWxpbmsgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbCdvYmpldCAlcyBwb3VyIGxlIHN5bWxpbmsgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTMKK21zZ2lkICIiCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgorbXNnc3RyICIiCisibGVzIGZvcm1hdHMgZGUgZGlmZiBjb21iaW7DqXMgKCctYycgZXQgJy0tY2MnKSBuZSBzb250IHBhcyBzdXBwb3J0w6lzXG4iCisiZGFucyBsZSBtb2RlIGRlIGRpZmYgZGUgcsOpcGVydG9pcmUgKCctZCcgZXQgJy0tZGlyLWRpZmYnKS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgImxlcyBkZXV4IGZpY2hpZXJzIHNvbnQgbW9kaWZpw6lzwqA6ICclcycgZXQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzYKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAibGUgZmljaGllciBkYW5zIGwnYXJicmUgZGUgdHJhdmFpbCBhIMOpdMOpIGxhaXNzw6kuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAiZGVzIGZpY2hpZXJzIHRlbXBvcmFpcmVzIGV4aXN0ZW50IGRhbnMgJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDgKK21zZ2lkICJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIKK21zZ3N0ciAidm91cyBwb3VycmlleiBzb3VoYWl0ZXIgbGVzIG5ldHRveWVyIG91IGxlcyByw6ljdXDDqXJlci4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAidXRpbGlzZXIgYGRpZmYuZ3VpdG9vbGAgYXUgbGlldSBkZSBgZGlmZi50b29sYCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5OQorbXNnaWQgInBlcmZvcm0gYSBmdWxsLWRpcmVjdG9yeSBkaWZmIgorbXNnc3RyICJyw6lhbGlzZSB1biBkaWZmIGRlIHLDqXBlcnRvaXJlIGNvbXBsZXQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDEKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgIm5lIHBhcyBjb25maXJtZXIgYXZhbnQgZGUgbGFuY2VyIGwnb3V0aWwgZGUgZGlmZiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNgorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICJ1dGlsaXNlciBsZXMgbGllbnMgc3ltYm9saXF1ZXMgZW4gbW9kZSBkZSBkaWZmIGRlIHLDqXBlcnRvaXJlIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAib3V0aWwiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDgKK21zZ2lkICJ1c2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wiCittc2dzdHIgInV0aWxpc2VyIGwnb3V0aWwgZGUgZGlmZiBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICJhZmZpY2hlciB1bmUgbGlzdGUgZGVzIG91dGlscyBkZSBkaWZmIHV0aWxpc2FibGVzIGF2ZWMgYC0tdG9vbGAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAiIgorInByb3ZvcXVlIGxhIGZpbiBkZSAnZ2l0LWRpZmZ0b29sJyBzaSBsJ291dGlsIGRlIGRpZmYgaW52b3F1w6kgcmVudm9pZSB1biBjb2RlICIKKyJub24tbnVsIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICJzcMOpY2lmaWVyIHVuZSBjb21tYW5kZSBwZXJzb25uYWxpc8OpZSBwb3VyIHZpc3VhbGlzZXIgbGVzIGRpZmbDqXJlbmNlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNworbXNnaWQgInBhc3NlZCB0byBgZGlmZmAiCittc2dzdHIgInBhc3PDqSDDoCBgZGlmZmAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICJkaWZmdG9vbCBleGlnZSB1biBhcmJyZSBkZSB0cmF2YWlsIG91IC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzkKK21zZ2lkICItLWRpci1kaWZmIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tZGlyLWRpZmYgZXN0IGluY29tcGF0aWJsZSBhdmVjIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDIKK21zZ2lkICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWd1aSwgLS10b29sIGV0IC0tZXh0Y21kIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAicGFzIGQnPG91dGlsPiBzcMOpY2lmacOpIHBvdXIgLS10b29sPTxvdXRpbD4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTcKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgInBhcyBkZSA8Y29tbWFuZGU+IHNww6ljaWZpw6kgcG91ciAtLWV4dGNtZD08Y29tbWFuZGU+IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NgorbXNnaWQgImdpdCBlbnYtLWhlbHBlciAtLXR5cGU9W2Jvb2x8dWxvbmddIDxvcHRpb25zPiA8ZW52LXZhcj4iCittc2dzdHIgImdpdCBlbnYtLWhlbHBlciAtLXR5cGU9W2Jvb2x8dWxvbmddIDxvcHRpb25zPiA8dmFyIGQnZW52PiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgInR5cGUiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MQorbXNnaWQgImRlZmF1bHQgZm9yIGdpdF9lbnZfKiguLi4pIHRvIGZhbGwgYmFjayBvbiIKK21zZ3N0ciAidmFsZXVyIHBhciBkw6lmYXV0IHBvdXIgZ2l0X2Vudl8qKC4uLikgZW4gY2FzIGQnYWJzZW5jZSIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQzCittc2dpZCAiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIgorbXNnc3RyICIiCisibW9kZSBzaWxlbmNpZXV4IG4ndXRpbGlzYW50IGxhIHZhbGV1ciBkZSBnaXRfZW52XyooKSBxdWUgcG91ciBsZSBjb2RlIGRlICIKKyJzb3J0aWUiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKK21zZ3N0ciAiIgorImwnb3B0aW9uIGAtLWRlZmF1bHRgIGF0dGVuZCB1bmUgdmFsZXVyIGJvb2zDqWVubmUgYXZlYyBgLS10eXBlPWJvb2xgLCBwYXMgYCVzYCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhbiB1bnNpZ25lZCBsb25nIHZhbHVlIHdpdGggYC0tdHlwZT11bG9uZ2AsIG5vdCBgIgorIiVzYCIKK21zZ3N0ciAiIgorImwnb3B0aW9uIGAtLWRlZmF1bHRgIGF0dGVuZCB1bmUgdmFsZXVyIGVudGllciBsb25nIG5vbiBzaWduw6kgYXZlYyBgLS0iCisidHlwZT11bG9uZ2AsIHBhcyBgJXNgIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjkKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW29wdGlvbnMtZGUtbGlzdGUtZGUtcsOpdmlzaW9uc10iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo4NTIKK21zZ2lkICJFcnJvcjogQ2Fubm90IGV4cG9ydCBuZXN0ZWQgdGFncyB1bmxlc3MgLS1tYXJrLXRhZ3MgaXMgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorIkVycmV1csKgOiBpbXBvc3NpYmxlIGQnZXhwb3J0ZXIgZGVzIMOpdGlxdWV0dGVzIGltYnJpcXXDqWVzIMOgIG1vaW5zIHF1ZSAtLW1hcmstIgorInRhZ3MgbmUgc29pdCBzcMOpY2lmacOpLiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTIKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICJhZmZpY2hlciBsYSBwcm9ncmVzc2lvbiBhcHLDqHMgPG4+IG9iamV0cyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgInPDqWxlY3Rpb25uZXIgbGEgZ2VzdGlvbiBkZXMgw6l0aXF1ZXR0ZXMgc2lnbsOpZXMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorInPDqWxlY3Rpb25uZXIgbGEgZ2VzdGlvbiBkZXMgw6l0aXF1ZXR0ZXMgcXVpIHBvaW50ZW50IHN1ciBkZXMgb2JqZXRzIGZpbHRyw6lzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBjb21taXQgbWVzc2FnZXMgaW4gYW4gYWx0ZXJuYXRlIGVuY29kaW5nIgorbXNnc3RyICIiCisic8OpbGVjdGlvbm5lciBsYSBnZXN0aW9uIGRlcyBtZXNzYWdlcyBkZSB2YWxpZGF0aW9uIGRhbnMgdW4gZW5jb2RhZ2UgIgorImFsdGVybmF0aWYiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIkVucmVnaXN0cmVyIGxlcyBtYXJxdWVzIGRhbnMgY2UgZmljaGllciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjUKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgImltcG9ydGVyIGxlcyBtYXJxdWVzIGRlcHVpcyBjZSBmaWNoaWVyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgImltcG9ydGVyIGxlcyBtYXJxdWVzIGRlcHVpcyBjZSBmaWNoaWVyIHMnaWwgZXhpc3RlIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MQorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICJmYWxzaWZpZXIgdW4gYXV0ZXVyIGQnw6l0aXF1ZXR0ZSBzaSBsJ8OpdGlxdWV0dGUgbidlbiBwcsOpc2VudGUgcGFzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MworbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICJBZmZpY2hlciBsJ2FyYnJlIGNvbXBsZXQgcG91ciBjaGFxdWUgY29tbWl0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJVdGlsaXNlciBsYSBmb25jdGlvbiBcImRvbmVcIiBwb3VyIHRlcm1pbmVyIGxlIGZsdXgiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc2Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJTYXV0ZXIgbCdhZmZpY2hhZ2UgZGUgZG9ubsOpZXMgZGUgYmxvYiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzcgYnVpbHRpbi9sb2cuYzoxNzA1Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAic3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc4Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICJBcHBsaXF1ZXIgbGUgc3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UgYXV4IHLDqWbDqXJlbmNlcyBleHBvcnTDqWVzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OQorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgImFub255bWlzZSBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgxCittc2dpZCAiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIgorbXNnc3RyICIiCisibGVzIHBhcmVudHMgcsOpZsOpcmVuY2VzIHF1aSBuZSBzb250IHBhcyBkYW5zIGxlIGZsdXggZCdleHBvcnQgcmFwaWRlIHBhciBpZCAiCisiZCdvYmpldCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGlkcyBkJ29iamV0IG9yaWdpbmF1eCBkZXMgYmxvYnMvY29tbWl0cyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODUKK21zZ2lkICJMYWJlbCB0YWdzIHdpdGggbWFyayBpZHMiCittc2dzdHIgIk1hcnF1ZXIgbGVzIMOpdGlxdWV0dGVzIGF2ZWMgZGVzIGlkcyBkZSBtYXJxdWUiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ3V0aWxpc2VyIMOgIGxhIGZvaXMgLS1pbXBvcnQtbWFya3MgZXQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzQKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPGTDqXDDtHQ+IFs8c3DDqWNpZmljYXRpb24tZGUtcsOpZsOpcmVuY2U+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwZT4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxkw6lww7R0PiB8IDxncm91cGU+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2Cittc2dpZCAiZmV0Y2gucGFyYWxsZWwgY2Fubm90IGJlIG5lZ2F0aXZlIgorbXNnc3RyICJmZXRjaC5wYXJhbGxlbCBuZSBwZXV0IHBhcyDDqnRyZSBuw6lnYXRpZiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOSBidWlsdGluL3B1bGwuYzoyMDQKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICJyw6ljdXDDqXJlciBkZXB1aXMgdG91cyBsZXMgZMOpcMO0dHMgZGlzdGFudHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEgYnVpbHRpbi9wdWxsLmM6MjQ4Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9mZXRjaCIKK21zZ3N0ciAiZMOpZmluaXIgbGEgYnJhbmNoZSBhbW9udCBwb3VyIGdpdCBwdWxsL2ZldGNoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzIGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAiYWpvdXRlciDDoCAuZ2l0L0ZFVENIX0hFQUQgYXUgbGlldSBkZSBsJ8OpY3Jhc2VyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ1IGJ1aWx0aW4vcHVsbC5jOjIxMAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAiY2hlbWluIHZlcnMgbGVxdWVsIHTDqWzDqWNoYXJnZXIgbGUgcGFxdWV0IHN1ciBsZSBwb3N0ZSBkaXN0YW50IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIKK21zZ3N0ciAiZm9yY2VyIGwnw6ljcmFzZW1lbnQgZGUgbGEgYnJhbmNoZSBsb2NhbGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgInLDqWN1cMOpcmVyIGRlcHVpcyBwbHVzaWV1cnMgZMOpcMO0dHMgZGlzdGFudHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTAgYnVpbHRpbi9wdWxsLmM6MjE0Cittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAicsOpY3Vww6lyZXIgdG91dGVzIGxlcyDDqXRpcXVldHRlcyBldCBsZXVycyBvYmpldHMgYXNzb2Npw6lzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJuZSBwYXMgcsOpY3Vww6lyZXIgdG91dGVzIGxlcyDDqXRpcXVldHRlcyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm5vbWJyZSBkZSBzb3VzLW1vZHVsZXMgcsOpY3Vww6lyw6lzIGVuIHBhcmFsbMOobGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgIiIKKyLDqWxpbWluZXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIGRpc3RhbnQgc2kgbGEgYnJhbmNoZSBuJ2V4aXN0ZSBwbHVzIGRhbnMgbGUgIgorImTDqXDDtHQgZGlzdGFudCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIiIKKyLDqWxpbWluZXIgbGVzIMOpdGlxdWV0dGVzIGxvY2FsZXMgcXVpIG9udCBkaXNwYXJ1IGR1IGTDqXDDtHQgZGlzdGFudCBldCBxdWkgIgorImVuY29tYnJlbnQgbGVzIMOpdGlxdWV0dGVzIG1vZGlmacOpZXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9mZXRjaC5jOjE4MiBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgIsOgIGxhIGRlbWFuZGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjAKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250csO0bGVyIGxhIHLDqWN1cMOpcmF0aW9uIHLDqWN1cnNpdmUgZGFucyBsZXMgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY0IGJ1aWx0aW4vcHVsbC5jOjIyNQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICJjb25zZXJ2ZXIgbGUgcGFxdWV0IHTDqWzDqWNoYXJnw6kiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAicGVybWV0dHJlIGxhIG1pc2Ugw6Agam91ciBkZSBsYSByw6lmw6lyZW5jZSBIRUFEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjI4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAiYXBwcm9mb25kaXIgbCdoaXN0b3JpcXVlIGQndW4gY2xvbmUgc3VwZXJmaWNpZWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzEKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIKK21zZ3N0ciAiYXBwcm9mb25kaXIgbCdoaXN0b3JpcXVlIGQndW4gY2xvbmUgc3VwZXJmaWNpZWwgZW4gZm9uY3Rpb24gZCd1bmUgZGF0ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NyBidWlsdGluL3B1bGwuYzoyMzEKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY29udmVydGlyIGVuIHVuIGTDqXDDtHQgY29tcGxldCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgInByw6lmaXhlciBjZWNpIMOgIGxhIHNvcnRpZSBkdSBjaGVtaW4gZHUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKyJwYXIgZMOpZmF1dCBwb3VyIGxhIHLDqWN1cMOpcmF0aW9uIHLDqWN1cnNpdmUgZGUgc291cy1tb2R1bGVzIChwcmlvcml0w6kgcGx1cyAiCisiYmFzc2UgcXVlIGxlcyBmaWNoaWVycyBkZSBjb25maWcpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg3IGJ1aWx0aW4vcHVsbC5jOjIzNAorbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAiYWNjZXB0ZXIgbGVzIHLDqWbDqXJlbmNlcyBxdWkgbWV0dGVudCDDoCBqb3VyIC5naXQvc2hhbGxvdyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMzYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgImNvcnJlc3BvbmRhbmNlIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg5IGJ1aWx0aW4vcHVsbC5jOjIzNworbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICJzcMOpY2lmaWVyIHVuZSBjb3JyZXNwb25kYW5jZSBkZSByw6lmw6lyZW5jZSBwb3VyIGxhIHLDqWN1cMOpcmF0aW9uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgInJhcHBvcnRlIHF1ZSBub3VzIG4nYXZvbnMgcXVlIGRlcyBvYmpldHMgam9pZ25hYmxlcyBkZXB1aXMgY2V0IG9iamV0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk5Cittc2dpZCAicnVuICdnYyAtLWF1dG8nIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJsYW5jZXIgJ2djIC0tYXV0bycgYXByw6hzIGxhIHLDqWN1cMOpcmF0aW9uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjI0NgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAidsOpcmlmaWVyIGxlcyBtaXNlcyDDoCBqb3VyIGZvcmPDqWVzIHN1ciB0b3V0ZXMgbGVzIGJyYW5jaGVzIG1pc2VzIMOgIGpvdXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDMKK21zZ2lkICJ3cml0ZSB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLDqWNyaXJlIGxlIGdyYXBoZSBkZSBjb21taXRzIGFwcsOocyBsZSByYXBhdHJpZW1lbnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIHLDqWbDqXJlbmNlIEhFQUQgZGlzdGFudGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAiIgorImxlIHBhcmFtw6h0cmUgZGUgY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGllbnQgdW5lIHZhbGV1ciBpbnZhbGlkZSAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJvYmpldCAlcyBub24gdHJvdXbDqSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1NQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW8OgIGpvdXJdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyZWpldMOpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OQorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIGRhbnMgbGEgYnJhbmNoZSBhY3R1ZWxsZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW21pc2Ugw6Agam91ciBkZSBsJ8OpdGlxdWV0dGVdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGxhIHLDqWbDqXJlbmNlIGxvY2FsZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICLDqWNyYXNlcmFpdCBsJ8OpdGlxdWV0dGUgZXhpc3RhbnRlIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbbm91dmVsbGUgw6l0aXF1ZXR0ZV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltub3V2ZWxsZSBicmFuY2hlXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW25vdXZlbGxlIHLDqWbDqXJlbmNlXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgIm1pc2Ugw6Agam91ciBmb3Jjw6llIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAicGFzIGVuIGF2YW5jZSByYXBpZGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NzcKK21zZ2lkICIiCisiRmV0Y2ggbm9ybWFsbHkgaW5kaWNhdGVzIHdoaWNoIGJyYW5jaGVzIGhhZCBhIGZvcmNlZCB1cGRhdGUsXG4iCisiYnV0IHRoYXQgY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIFRvIHJlLWVuYWJsZSwgdXNlICctLXNob3ctZm9yY2VkLXVwZGF0ZXMnXG4iCisiZmxhZyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZScuIgorbXNnc3RyICIiCisiRmV0Y2ggaW5kaXF1ZSBub3JtYWxlbWVudCBxdWVsbGVzIGJyYW5jaGVzIG9udCBzdWJpIHVuZSBtaXNlIMOgIGpvdXIgZm9yY8OpZSxcbiIKKyJtYWlzIGNlY2kgYSDDqXTDqSBkw6lzYWN0aXbDqS4gUG91ciByw6ktYWN0aXZlciwgdXRpbGlzZXogbGUgZHJhcGVhdVxuIgorIictLXNob3ctZm9yY2VkLXVwZGF0ZScgb3UgbGFuY2V6ICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY2hlY2sgZm9yY2VkIHVwZGF0ZXMuIFlvdSBjYW4gdXNlXG4iCisiJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzICIKKyJmYWxzZSdcbiIKKyIgdG8gYXZvaWQgdGhpcyBjaGVjay5cbiIKK21zZ3N0ciAiIgorIiUuMmYgc2Vjb25kZXMgb250IMOpdMOpIG7DqWNlc3NhaXJlcyBwb3VyIHbDqXJpZmllciBsZXMgbWlzZXMgw6Agam91ciBmb3Jjw6llcy5cbiIKKyJWb3VzIHBvdXZleiB1dGlsaXNlciAnLS1uby1zaG93LWZvcmNlZC11cGRhdGUnIG91IGxhbmNlclxuIgorIidnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlJyBwb3VyIMOpdml0ZXIgY2VjaS5cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIG4nYSBwYXMgZW52b3nDqSB0b3VzIGxlcyBvYmpldHMgbsOpY2Vzc2FpcmVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAiIgorIiVzIHJlamV0w6kgcGFyY2UgcXVlIGxlcyByYWNpbmVzIHN1cGVyZmljaWVsbGVzIG5lIHNvbnQgcGFzIG1pc2VzIMOgIGpvdXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDE3IGJ1aWx0aW4vZmV0Y2guYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJEZXB1aXMgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisiZGVzIHLDqWbDqXJlbmNlcyBsb2NhbGVzIG4nb250IHBhcyBwdSDDqnRyZSBtaXNlcyDDoCBqb3VyIDsgZXNzYXlleiBkZSBsYW5jZXJcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHBvdXIgc3VwcHJpbWVyIGRlcyBicmFuY2hlcyBhbmNpZW5uZXMgZW4gY29uZmxpdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHNlcmEgZW4gc3VzcGVucykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIGVzdCBkZXZlbnUgZW4gc3VzcGVucykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbc3VwcHJpbcOpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTkgYnVpbHRpbi9yZW1vdGUuYzoxMDM1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIoYXVjdW4oZSkpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIlJlZnVzIGRlIHLDqWN1cMOpcmVyIGRhbnMgbGEgYnJhbmNoZSBjb3VyYW50ICVzIGQndW4gZMOpcMO0dCBub24gbnUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIkxhIHZhbGV1ciBcIiUyJHNcIiBkZSBsJ29wdGlvbiBcIiUxJHNcIiBlc3QgaW52YWxpZGUgcG91ciAlMyRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIkwnb3B0aW9uIFwiJXNcIiBlc3QgaWdub3LDqWUgcG91ciAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxMgorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAiYnJhbmNoZXMgbXVsdGlwbGVzIGTDqXRlY3TDqWVzLCBpbWNvbXBhdGlibGUgYXZlYyAtLXNldC11cHN0cmVhbSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjcKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiZMOpcMO0dCBhbW9udCBub24gZMOpZmluaSBwb3VyIGxhIGJyYW5jaGUgZGUgc3Vpdmkgw6AgZGlzdGFuY2UiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI5Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHRhZyIKK21zZ3N0ciAiZMOpcMO0dCBhbW9udCBub24gZMOpZmluaSBwb3VyIGwnw6l0aXF1ZXR0ZSBkaXN0YW50ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzEKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICJ0eXBlIGRlIGJyYW5jaGUgaW5jb25udSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzMKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisiQXVjdW5lIGJyYW5jaGUgc291cmNlIHRyb3V2w6llLlxuIgorIlZvdXMgZGV2ZXogc3DDqWNpZmllciBleGFjdGVtZW50IHVuZSBicmFuY2hlIGF2ZWMgbCdvcHRpb24gLS1zZXQtdXBzdHJlYW0uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU1OSBidWlsdGluL2ZldGNoLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICJSw6ljdXDDqXJhdGlvbiBkZSAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2OSBidWlsdGluL2ZldGNoLmM6MTYyNCBidWlsdGluL3JlbW90ZS5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmZXRjaCAnJXMnIChleGl0IGNvZGU6ICVkKVxuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyICclcycgKGNvZGUgZGUgc29ydGllwqA6ICVkKVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY4NAorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisiQXVjdW4gZMOpcMO0dCBkaXN0YW50IHNww6ljaWZpw6kuIFZldWlsbGV6IHNww6ljaWZpZXIgdW5lIFVSTCBvdSB1biBub21cbiIKKyJkaXN0YW50IGRlcHVpcyBsZXNxdWVscyBsZXMgbm91dmVsbGVzIHLDqXZpc2lvbnMgZGV2cmFpZW50IMOqdHJlIHLDqWN1cMOpcsOpZXMuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcyMQorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIlZvdXMgZGV2ZXogc3DDqWNpZmllciB1biBub20gZCfDqXRpcXVldHRlLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzEKK21zZ2lkICJOZWdhdGl2ZSBkZXB0aCBpbiAtLWRlZXBlbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJVbmUgcHJvZm9uZGV1ciBuw6lnYXRpdmUgZGFucyAtLWRlZXBlbiBuJ2VzdCBwYXMgc3VwcG9ydMOpZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzMKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiBldCAtLWRlcHRoIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzgKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1kZXB0aCBldCAtLXVuc2hhbGxvdyBuZSBwZXV2ZW50IHBhcyDDqnRyZSB1dGlsaXPDqXMgZW5zZW1ibGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgwCittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdW5zaGFsbG93IHN1ciB1biBkw6lww7R0IGNvbXBsZXQgbidhIHBhcyBkZSBzZW5zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5NgorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCBuJ2FjY2VwdGUgcGFzIGQnYXJndW1lbnQgZGUgZMOpcMO0dCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3OTgKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIG4nYSBwYXMgZGUgc2VucyBhdmVjIGRlcyBzcMOpY2lmaWNhdGlvbnMgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgImRpc3RhbnQgb3UgZ3JvdXBlIGRpc3RhbnQgaW5leGlzdGFudCA6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgxNAorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorIkxhIHLDqWN1cMOpcmF0aW9uIGQndW4gZ3JvdXBlIGV0IGxlcyBzcMOpY2lmaWNhdGlvbnMgZGUgcsOpZsOpcmVuY2UgbidvbnQgcGFzIGRlICIKKyJzZW5zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzMgorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIG5lIHBldXQgw6p0cmUgdXRpbGlzw6kgcXUnYXZlYyBsZSBkw6lww7R0IGRpc3RhbnQgY29uZmlndXLDqSBkYW5zICIKKyJleHRlbnNpb25zLnBhcnRpYWxDbG9uZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWNoaWVyPl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NAorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAicGV1cGxlciBsZSBqb3VybmFsIGF2ZWMgYXUgcGx1cyA8bj4gw6lsw6ltZW50cyBkZXB1aXMgbGUgam91cm5hbCBjb3VydCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiYWxpYXMgcG91ciAtLWxvZyAob2Jzb2zDqHRlKSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgwCittc2dpZCAidGV4dCIKK21zZ3N0ciAidGV4dGUiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MQorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAidXRpbGlzZXIgPHRleHRlPiBjb21tZSBkw6lidXQgZGUgbWVzc2FnZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgyCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgImZpY2hpZXIgZCdvw7kgbGlyZSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxtb3RpZj5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZXQ+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEzCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1jb250YWlucyBbPGNvbW1pdD5dXSBbLS1uby1jb250YWlucyBbPGNvbW1pdD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICLDqWNoYXBwZXIgbGVzIGNoYW1wcyByw6lzZXJ2w6lzIHBvdXIgbGVzIGludGVycHLDqXRldXJzIGRlIGNvbW1hbmRlcyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAiw6ljaGFwcGVyIGxlcyBjaGFtcHMgcsOpc2VydsOpcyBwb3VyIHBlcmwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzIKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAiw6ljaGFwcGVyIGxlcyBjaGFtcHMgcsOpc2VydsOpcyBwb3VyIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICLDqWNoYXBwZXIgbGVzIGNoYW1wcyByw6lzZXJ2w6lzIHBvdXIgY29tcGF0aWJpbGl0w6kgYXZlYyBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAibidhZmZpY2hlciBxdWUgPG4+IHLDqWbDqXJlbmNlcyBjb3JyZXNwb25kYW50IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDM5Cittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICJyZXNwZWN0ZXIgbGVzIGNvdWxldXJzIGRlIGZvcm1hdGFnZSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyByw6lmw6lyZW5jZXMgcG9pbnRhbnQgc3VyIGwnb2JqZXQiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIHLDqWbDqXJlbmNlcyBxdWkgc29udCBmdXNpb25uw6llcyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NQorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIHLDqWbDqXJlbmNlcyBxdWkgbmUgc29udCBwYXMgZnVzaW9ubsOpZXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIHLDqWbDqXJlbmNlcyBxdWkgY29udGllbm5lbnQgbGUgY29tbWl0IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyByw6lmw6lyZW5jZXMgcXVpIG5lIGNvbnRpZW5uZW50IHBhcyBsZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY4IGJ1aWx0aW4vZnNjay5jOjE0NyBidWlsdGluL2ZzY2suYzoxNDgKK21zZ2lkICJ1bmtub3duIgorbXNnc3RyICJpbmNvbm51IgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiBlcnJvciBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMDAgYnVpbHRpbi9mc2NrLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluICVzICVzOiAlcyIKK21zZ3N0ciAiZXJyZXVyIGRhbnMgbCdvYmpldCAlcyAlc8KgOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZyBpbiAlcyAlczogJXMiCittc2dzdHIgImF2ZXJ0aXNzZW1lbnQgZGFucyBsJ29iamV0ICVzICVzwqA6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDMgYnVpbHRpbi9mc2NrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIgorbXNnc3RyICJsaWVuIGNhc3PDqSBkYW5zIGwnb2JqZXQgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICJ0eXBlIGQnb2JqZXQgaW5jb25udSBkYW5zIGxlIGxpZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorImxpZW4gY2Fzc8OpIGRlcHVpcyAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgdmVycyAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICJvYmpldCAlcyBtYW5xdWFudCAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVhY2hhYmxlICVzICVzIgorbXNnc3RyICJvYmpldCAlcyBpbmF0dGVpZ25hYmxlICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgIm9iamV0ICVzIGZhbnTDtG1lICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMzkKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxvc3QtZm91bmQiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpY2hpZXIgbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmaW5pciAnJXMnIgorCisjOiBidWlsdGluL2ZzY2suYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZGUgbCdvYmpldCAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSAoJWQgb2JqZWN0cykiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZGUgbGEgY29ubmVjdGl2aXTDqSAoJWQgb2JqZXRzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlIGwnb2JqZXQgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAibGllbnMgY2Fzc8OpcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgJXMiCittc2dzdHIgInJhY2luZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIgorbXNnc3RyICLDqXRpcXVldGFnZSBkZSBsJ29iamV0ICVzICVzICglcykgZGFucyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIgorbXNnc3RyICIlc8KgOiBvYmpldCBjb3Jyb21wdSBvdSBtYW5xdWFudCIKKworIzogYnVpbHRpbi9mc2NrLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHJlZmxvZyBlbnRyeSAlcyIKK21zZ3N0ciAiJXPCoDogZW50csOpZSAlcyBkZSBqb3VybmFsIGRlIHLDqWbDqXJlbmNlcyBpbnZhbGlkZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZHUgam91cm5hbCBkZSByw6lmZXJlbmNlcyAlcy0+ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIgorbXNnc3RyICIlc8KgOiBwb2ludGV1ciBkZSBzaGExIGludmFsaWRlICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAibCdvYmpldCAlcyBuJ2VzdCBwYXMgdW4gY29tbWl0IgorCisjOiBidWlsdGluL2ZzY2suYzo2MDkKK21zZ2lkICJub3RpY2U6IE5vIGRlZmF1bHQgcmVmZXJlbmNlcyIKK21zZ3N0ciAiTm90ZcKgOiBwYXMgZGUgcsOpZsOpcmVuY2UgcGFyIGTDqWZhdXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZzogJXMiCittc2dzdHIgIiVzwqA6IG9iamV0IGNvcnJvbXB1IG91IG1hbnF1YW50wqA6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiJXPCoDogaW1wb3NzaWJsZSBkJ2FuYWx5c2VywqA6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgIm1hdXZhaXMgZmljaGllciBkZSBzaGExwqA6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGR1IHLDqXBlcnRvaXJlIGQnb2JqZXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZXMgcsOpcGVydG9pcmVzIGQnb2JqZXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyBsaW5rIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGR1IGxpZW4gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5NSBidWlsdGluL2luZGV4LXBhY2suYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiJXMgaW52YWxpZGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiJXMgcG9pbnRlIHN1ciBxdWVscXVlIGNob3NlIGJpemFycmUgKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkZXRhY2hlZCBIRUFEIHBvaW50cyBhdCBub3RoaW5nIgorbXNnc3RyICIlc8KgOiBsYSBIRUFEIGTDqXRhY2jDqWUgbmUgcG9pbnRlIHN1ciByaWVuIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aWNlOiAlcyBwb2ludHMgdG8gYW4gdW5ib3JuIGJyYW5jaCAoJXMpIgorbXNnc3RyICJub3RlwqA6ICVzIHBvaW50ZSBzdXIgdW5lIGJyYW5jaGUgbm9uLW7DqWUgKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI0Cittc2dpZCAiQ2hlY2tpbmcgY2FjaGUgdHJlZSIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZSBsJ2FyYnJlIGNhY2hlIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIiVzwqA6IHBvaW50ZXIgc2hhMSBpbnZhbGlkZSBkYW5zIGwnYXJicmUgZGUgY2FjaGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIm5vbi1hcmJyZSBkYW5zIGwnYXJicmUgZGUgY2FjaGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZXQ+Li4uXSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc1Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgb2JqZXRzIGluYWNjZXNzaWJsZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG9iamV0cyBlbiBzdXNwZW5zIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAic2lnbmFsZXIgbGVzIG7Fk3VkcyByYWNpbmVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiY29uc2lkw6lyZXIgbGVzIG9iamV0cyBkZSBsJ2luZGV4IGNvbW1lIG7Fk3VkcyB0w6p0ZSIKKworIyB0cmFuc2xhdGVkIGZyb20gbWFuIHBhZ2UKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MAorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiY29uc2lkw6lyZXIgbGVzIHJlZmxvZ3MgY29tbWUgbsWTdWRzIHTDqnRlIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJpbnNwZWN0ZXIgYXVzc2kgbGVzIG9iamV0cyBwYWNrIGV0IGFsdGVybmF0aWZzIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAibmUgdsOpcmlmaWVyIHF1ZSBsYSBjb25uZWN0aXZpdMOpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODMKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgImFjdGl2ZXIgdW5lIHbDqXJpZmljYXRpb24gcGx1cyBzdHJpY3QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICLDqWNyaXJlIGxlcyBvYmpldHMgZW4gc3VzcGVucyBkYW5zIC5naXQvbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg2IGJ1aWx0aW4vcHJ1bmUuYzoxMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICJhZmZpY2hlciBsYSBwcm9ncmVzc2lvbiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg3Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG5vbXMgw6l0ZW5kdXMgcG91ciBsZXMgb2JqZXRzIGluYWNjZXNzaWJsZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg0NiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiVzwqA6IG9iamV0IG1hbnF1YW50IgorCisjOiBidWlsdGluL2ZzY2suYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICJwYXJhbcOodHJlIGludmFsaWRlwqA6IHNoYS0xIGF0dGVuZHUsICclcycgdHJvdXbDqSIKKworIzogYnVpbHRpbi9nYy5jOjM1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICLDiWNoZWMgZHUgc3RhdCBkZSAlc8KgOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbCdhbmFseXNlIGRlICclcycgdmFsZXVyICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmYWlyZSB1biBzdGF0IGRlICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODQgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGxhc3QgZ2MgcnVuIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcuIFBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisiYW5kIHJlbW92ZSAlcy5cbiIKKyJBdXRvbWF0aWMgY2xlYW51cCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgdW50aWwgdGhlIGZpbGUgaXMgcmVtb3ZlZC5cbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkxlIGRlcm5pZXIgbGFuY2VtZW50IGRlIGdjIGEgcmFwcG9ydMOpIGwnZXJyZXVyIHN1aXZhbnRlLiBWZXVpbGxleiBjb3JyaWdlclxuIgorImxhIGNhdXNlIGV0IHN1cHByaW1lciAlcy5cbiIKKyJMZSBuZXR0b3lhZ2UgYXV0b21hdGlxdWUgbidhdXJhIHBhcyBsaWV1IGp1c3F1J8OgIGNlIHF1ZSBsZSBmaWNoaWVyIHNvaXQgIgorInN1cHByaW3DqS5cbiIKKyJcbiIKKyIlcyIKKworIzogYnVpbHRpbi9nYy5jOjUzOQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICLDqWxpbWluZXIgbGVzIG9iamV0cyBub24gcsOpZsOpcmVuY8OpcyIKKworIzogYnVpbHRpbi9nYy5jOjU0MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAiw6p0cmUgcGx1cyBjb25zY2llbmNpZXV4IChkdXLDqWUgZGUgdHJhaXRlbWVudCBhbGxvbmfDqWUpIgorCisjOiBidWlsdGluL2djLmM6NTQyCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAiYWN0aXZlciBsZSBtb2RlIGF1dG8tZ2MiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiIgorImZvcmNlciBsZSBsYW5jZW1lbnQgZHUgcmFtYXNzZS1taWV0dGVzIG3Dqm1lIHNpIHVuIGF1dHJlIHJhbWFzc2UtbWlldHRlcyAiCisidG91cm5lIGTDqWrDoCIKKworIzogYnVpbHRpbi9nYy5jOjU0OAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgInJlY29tcGFjdGVyIHRvdXMgbGVzIGF1dHJlcyBwYXF1ZXRzIGV4Y2VwdMOpIGxlIHBsdXMgZ3JvcyBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGdjLmxvZ2V4cGlyeSAlcyIKKworIzogYnVpbHRpbi9nYy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGEgdmFsZXVyIGQnZXhwaXJhdGlvbiBkJ8OpbGFnYWdlICVzIgorCisjOiBidWlsdGluL2djLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisiQ29tcHJlc3Npb24gYXV0b21hdGlxdWUgZHUgZMOpcMO0dCBlbiB0w6JjaGUgZGUgZm9uZCBwb3VyIG9wdGltaXNlciBsZXMgIgorInBlcmZvcm1hbmNlcy5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIkNvbXByZXNzaW9uIGR1IGTDqXDDtHQgcG91ciBvcHRpbWlzZXIgbGVzIHBlcmZvcm1hbmNlcy5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICJWb2lyIFwiZ2l0IGhlbHAgZ2NcIiBwb3VyIHRvdXRlIGluZm9ybWF0aW9uIHN1ciBsZSBuZXR0b3lhZ2UgbWFudWVsLlxuIgorCisjOiBidWlsdGluL2djLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisidW4gcmFtYXNzZS1taWV0dGVzIGVzdCBkw6lqw6AgZW4gY291cnMgc3VyIGxhIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAiCisiKHV0aWxpc2V6IC0tZm9yY2Ugc2kgY2Ugbidlc3QgcGFzIGxlIGNhcykiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2OTQKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyJJbCB5IGEgdHJvcCBkJ29iamV0cyBzZXVscyBpbmFjY2Vzc2libGVzIDsgbGFuY2V6ICdnaXQgcHJ1bmUnIHBvdXIgbGVzICIKKyJzdXBwcmltZXIuIgorCisjOiBidWlsdGluL2dyZXAuYzoyOQorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8bW90aWY+IFs8csOpdmlzaW9uPi4uLl0gW1stLV0gPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwIDogw6ljaGVjIGRlIGNyw6lhdGlvbiBkdSBmaWw6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgIm5vbWJyZSBkZSBmaWxzIHNww6ljaWZpw6kgaW52YWxpZGUgKCVkKSBwb3VyICVzIgorCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MjcKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICJwYXMgZGUgc3VwcG9ydCBkZXMgZmlscywgaWdub3JlICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0NjcgYnVpbHRpbi9ncmVwLmM6NTkyIGJ1aWx0aW4vZ3JlcC5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsJ2FyYnJlICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZhaXJlIHVuIGdyZXAgc3VyIHVuIG9iamV0IGRlIHR5cGUgJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJsJ29wdGlvbiAnJWMnIGF0dGVuZCB1bmUgdmFsZXVyIG51bcOpcmlxdWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgInJlY2hlcmNoZXIgZGFucyBsJ2luZGV4IHBsdXTDtHQgcXVlIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE3Cittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgInJlY2hlcmNoZXIgZGFucyBsZXMgY29udGVudXMgbm9uIGfDqXLDqXMgcGFyIGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE5Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJyZWNoZXJjaGVyIGRhbnMgbGVzIGZpY2hpZXJzIHN1aXZpcyBldCBub24tc3VpdmlzIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjEKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImlnbm9yZXIgbGVzIGZpY2hpZXJzIHNww6ljaWZpw6lzIHZpYSAnLmdpdGlnbm9yZSciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMworbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAicmVjaGVyY2hlciByw6ljdXJzaXZlbWVudCBkYW5zIGNoYXF1ZSBzb3VzLW1vZHVsZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImFmZmljaGVyIGxlcyBsaWduZXMgcXVpIG5lIGNvcnJlc3BvbmRlbnQgcGFzIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjgKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJjb3JyZXNwb25kYW5jZSBpbnNlbnNpYmxlIMOgIGxhIGNhc3NlIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAicmVjaGVyY2hlciBsZXMgbW90aWZzIGF1eCBzw6lwYXJhdGV1cnMgZGUgbW90cyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMyCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAidHJhaXRlciBsZXMgZmljaGllcnMgYmluYWlyZXMgY29tbWUgdGV4dGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNAorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAibmUgcGFzIGNoZXJjaGVyIGxlcyBtb3RpZnMgZGFucyBsZXMgZmljaGllcnMgYmluYWlyZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAidHJhaXRlciBsZXMgZmljaGllcnMgYmluYWlyZXMgYXZlYyBsZXMgZmlsdHJlcyB0ZXh0Y29udiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIKK21zZ3N0ciAicmVjaGVyY2hlciBkYW5zIGxlcyBzb3VzLXLDqXBlcnRvaXJlcyAoZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0MQorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAiZGVzY2VuZHJlIGF1IHBsdXMgZGUgPHByb2ZvbmRldXI+IGRhbnMgbCdhcmJvcmVzY2VuY2UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIMOpdGVuZHVlcyBQT1NJWCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ4Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGJhc2lxdWVzIFBPU0lYIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJpbnRlcnByw6l0ZXIgbGVzIG1vdGlmcyBjb21tZSBkZSBjaGHDrm5lcyBmaXhlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU0Cittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGNvbXBhdGlibGVzIGF2ZWMgUGVybCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgImFmZmljaGVyIGxlcyBudW3DqXJvcyBkZSBsaWduZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU4Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICJhZmZpY2hlciBsZSBudW3DqXJvIGRlIGNvbG9ubmUgZGUgbGEgcHJlbWnDqHJlIGNvcnJlc3BvbmRhbmNlIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTkKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAibmUgcGFzIHBhcyBhZmZpY2hlciBsZXMgbm9tcyBkZSBmaWNoaWVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjAKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG5vbXMgZGUgZmljaGllciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG5vbXMgZGUgZmljaGllcnMgcmVsYXRpdmVtZW50IGF1IHLDqXBlcnRvaXJlIGRlIGJhc2UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NAorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAibidhZmZpY2hlciBxdWUgbGVzIG5vbXMgZGUgZmljaGllcnMgYXUgbGlldSBkZXMgbGlnbmVzIGNvcnJlc3BvbmRhbnQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NgorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICJzeW5vbnltZSBwb3VyIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjkKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIGxlcyBub21zIGRlcyBmaWNoaWVycyBzYW5zIGNvcnJlc3BvbmRhbmNlIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJpbXByaW1lciB1bmUgY2FyYWN0w6hyZSBOVUwgYXByw6hzIGxlIG5vbXMgZGUgZmljaGllciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAibidhZmZpY2hlciBxdWUgbGVzIHBhcnRpZXMgY29ycmVzcG9uZGFudGVzIGQndW5lIGxpZ25lIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzYKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJhZmZpY2hlciBsZSBub21icmUgZGUgY29ycmVzcG9uZGFuY2VzIGF1IGxpZXUgZGVzIGxpZ25lcyBjb3JyZXNwb25kYW50IgorCisjOiBidWlsdGluL2dyZXAuYzo4NzcKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAibWV0dHJlIGVuIMOpdmlkZW5jZSBsZXMgY29ycmVzcG9uZGFuY2VzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiIgorImltcHJpbWVyIHVuZSBsaWduZSB2aWRlIGVudHJlIGxlcyBjb3JyZXNwb25kYW5jZXMgZGUgZmljaGllcnMgZGlmZsOpcmVudHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MQorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZSBub20gZGUgZmljaGllciB1bmUgZm9pcyBhdSBkZXNzdXMgZGVzIGNvcnJlc3BvbmRhbmNlcyBkdSBtw6ptZSAiCisiZmljaGllciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgImFmZmljaGVyIDxuPiBsaWduZXMgZGUgY29udGV4dGUgYXZhbnQgZXQgYXByw6hzIGxlcyBjb3JyZXNwb25kYW5jZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgImFmZmljaGVyIDxuPiBsaWduZXMgZGUgY29udGV4dGUgYXZhbnQgbGVzIGNvcnJlc3BvbmRhbmNlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg5Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJhZmZpY2hlciA8bj4gbGlnbmVzIGRlIGNvbnRleHRlIGFwcsOocyBsZXMgY29ycmVzcG9uZGFuY2VzIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTEKK21zZ2lkICJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIgorbXNnc3RyICJ1dGlsaXNlciA8bj4gZmlscyBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJyYWNjb3VyY2kgcG91ciAtQyBOVU0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NQorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIiIKKyJhZmZpY2hlciB1bmUgbGlnbmUgYXZlYyBsZSBub20gZGUgbGEgZm9uY3Rpb24gYXZhbnQgbGVzIGNvcnJlc3BvbmRhbmNlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgImFmZmljaGVyIGxhIGZvbmN0aW9uIGNvbnRlbmFudGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICJsaXJlIGxlcyBtb3RpZnMgZGVwdWlzIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMgorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAicmVjaGVyY2hlciA8bW90aWY+IgorCisjOiBidWlsdGluL2dyZXAuYzo5MDQKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICJjb21iaW5lciBsZXMgbW90aWZzIHNww6ljaWZpw6lzIHBhciAtZSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE2Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgIiIKKyJpbmRpcXVlciBkZXMgY29ycmVzcG9uZGFuY2VzIGF2ZWMgbGUgY29kZSBkZSBzb3J0aWUgbWFpcyBzYW5zIHJpZW4gYWZmaWNoZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIiIKKyJuJ2FmZmljaGVyIHF1ZSBsZXMgY29ycmVzcG9uZGFuY2VzIGRlIGZpY2hpZXJzIHF1aSBjb3JyZXNwb25kZW50IMOgIHRvdXMgbGVzICIKKyJtb3RpZnMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyMAorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICJhZmZpY2hlciBsJ2FyYnJlIGQnYW5hbHlzZSBwb3VyIGxlIG1vdGlmIGdyZXAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyNAorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJwYWdpbmV1ciIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgImFmZmljaGVyIGxlcyBmaWNoaWVycyBjb3JyZXNwb25kYW50IGRhbnMgbGUgcGFnaW5ldXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyOAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAicGVybWV0dHJlIGwnYXBwZWwgZGUgZ3JlcCgxKSAoaWdub3LDqSBwYXIgY2UgYnVpbGQpIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTIKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuIgorbXNnc3RyICJhdWN1biBtb3RpZiBmb3VybmkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjgKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cyIKK21zZ3N0ciAiIgorIi0tbm8taW5kZXggb3UgLS11bnRyYWNrZWQgbmUgcGV1dmVudCBwYXMgw6p0cmUgdXRpbGlzw6lzIGF2ZWMgZGVzIHLDqXZpc2lvbnMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsYSByw6l2aXNpb27CoDogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJvcHRpb24gZGUgY29tYmluYWlzb24gaW52YWxpZGUsIGlnbm9yZSAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAwCittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgInBhcyBkZSBzdXBwb3J0IGRlcyBmaWxzLCBpZ25vcmUgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDczIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgIm5vbWJyZSBkZSBmaWxzIHNww6ljaWZpw6kgaW52YWxpZGUgKCVkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA5NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG5lIGZvbmN0aW9ubmUgcXVlIHN1ciBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTE5Cittc2dpZCAib3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKK21zZ3N0ciAib3B0aW9uIG5vbiBzdXBwb3J0w6llIGF2ZWMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjUKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tY2FjaGVkIG91IC0tdW50cmFja2VkIG5lIHBldXZlbnQgcGFzIMOqdHJlIHV0aWxpc8OpcyBhdmVjIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzEKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyBkdSBjb250ZW51IHN1aXZpIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTM5Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICItLWNhY2hlZCBldCBkZXMgYXJicmVzIHNvbnQgZm91cm5pcyBlbiBtw6ptZSB0ZW1wcyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1Cittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmljaGllcj4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmljaGllcj4uLi4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NgorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAidHlwZSBkJ29iamV0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiw6ljcmlyZSBsJ29iamV0IGRhbnMgbGEgYmFzZSBkZSBkb25uw6llIGQnb2JqZXRzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAxCittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgImxpcmUgbCdvYmpldCBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgInN0b2NrZXIgbGUgZmljaGllciB0ZWwgcXVlbCBzYW5zIGZpbHRyYWdlIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA0Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorImp1c3RlIGhhc2hlciBuJ2ltcG9ydGUgcXVlbCBjb250ZW51IHBvdXIgY3LDqWVyIGRlcyBvYmpldHMgY29ycm9tcHVzIHBvdXIgIgorImRlYnVnZ2VyIEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICJ0cmFpdGVyIGxlIGZpY2hpZXIgY29tbWUgcydpbCB2ZW5haXQgZGUgY2UgY2hlbWluIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgImFmZmljaGVyIHRvdXRlcyBsZXMgY29tbWFuZGVzIGRpc3BvbmlibGVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NworbXNnaWQgImV4Y2x1ZGUgZ3VpZGVzIgorbXNnc3RyICJleGNsdXJlIGxlcyBndWlkZXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJhZmZpY2hlciB1bmUgbGlzdGUgZGUgZ3VpZGVzIHV0aWxlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkKK21zZ2lkICJwcmludCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcyIKK21zZ3N0ciAiYWZmaWNoZXIgdG91cyBsZXMgbm9tcyBkZSB2YXJpYWJsZXMgZGUgY29uZmlndXJhdGlvbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJhZmZpY2hlciBsYSBwYWdlIGRlIG1hbnVlbCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgbWFudWVsIGRhbnMgdW4gbmF2aWdhdGV1ciB3ZWIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU0Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgImFmZmljaGVyIGxhIHBhZ2UgaW5mbyIKKworIzogYnVpbHRpbi9oZWxwLmM6NTYKK21zZ2lkICJwcmludCBjb21tYW5kIGRlc2NyaXB0aW9uIgorbXNnc3RyICJhZmZpY2hlciBsYSBkZXNjcmlwdGlvbiBkZSBsYSBjb21tYW5kZSIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZGU+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgImZvcm1hdCBkJ2FpZGUgbm9uIHJlY29ubnUgJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiw6ljaGVjIGRlIGTDqW1hcnJhZ2UgZCdlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiw6ljaGVjIGQnYW5hbHlzZSBkZSBsYSB2ZXJzaW9uIGQnZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAibGEgdmVyc2lvbiBkJ2VtYWNzY2xpZW50ICclZCcgZXN0IHRyb3AgYW5jaWVubmUgKDwyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxNDMgYnVpbHRpbi9oZWxwLmM6MTY1IGJ1aWx0aW4vaGVscC5jOjE3NSBidWlsdGluL2hlbHAuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnZXjDqWN1dGlvbiBkZSAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnIDogY2hlbWluIHBvdXIgbCd1dGlsaXRhaXJlIGRlIHZpc3VhbGlzYXRpb24gZGUgbWFudWVsIG5vbiBzdXBwb3J0w6kuXG4iCisiVmV1aWxsZXogdXRpbGlzZXIgcGx1dMO0dCAnbWFuLjxvdXRpbD4uY21kJy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnIDogY2hlbWluIHBvdXIgbCd1dGlsaXRhaXJlIGRlIHZpc3VhbGlzYXRpb24gZGUgbWFudWVsIHN1cHBvcnTDqS5cbiIKKyJWZXVpbGxleiB1dGlsaXNlciBwbHV0w7R0ICdtYW4uPG91dGlsPi5jbWQnLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcycgOiB2aXN1YWxpc2V1ciBkZSBtYW51ZWwgaW5jb25udS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2NworbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiYXVjdW4gdmlzdWFsaXNldXIgZGUgbWFudWVsIG4nYSBwcmlzIGVuIGNoYXJnZSBsYSBkZW1hbmRlIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJhdWN1biB2aXN1YWxpc2V1ciBkZSAnaW5mbycgbidhIHByaXMgZW4gY2hhcmdlIGxhIGRlbWFuZGUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICInJXMnIGVzdCB1biBhbGlhcyBkZSAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDggZ2l0LmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIgorbXNnc3RyICJNYXV2YWlzIGNoYcOubmUgYWxpYXMuJXPCoDogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3NyBidWlsdGluL2hlbHAuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgInVzYWdlIDogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIidnaXQgaGVscCBjb25maWcnIHBvdXIgcGx1cyBkJ2luZm9ybWF0aW9uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgInR5cGUgZCdvYmpldCBub24gY29ycmVzcG9uZGFudCDDoCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIm9iamV0IGF0dGVuZHUgbm9uIHJlw6d1ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAib2JqZXQgJXMgOiB0eXBlIGF0dGVuZHUgJXMsIHJlw6d1ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gImltcG9zc2libGUgZGUgcmVtcGxpciAlZCBvY3RldCIKK21zZ3N0clsxXSAiaW1wb3NzaWJsZSBkZSByZW1wbGlyICVkIG9jdGV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY4Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJmaW4gZGUgZmljaGllciBwcsOpbWF0dXLDqWUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OQorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgImVycmV1ciBkZSBsZWN0dXJlIHN1ciBsJ2VudHLDqWUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MQorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJwbHVzIGQnb2N0ZXRzIHV0aWxpc8OpcyBxdWUgZGlzcG9uaWJsZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjYwNAorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgImxlIHBhcXVldCBlc3QgdHJvcCBncmFuZCBwb3VyIGxhIGTDqWZpbml0aW9uIGFjdHVlbGxlIGRlIG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJsZSBwYXF1ZXQgZMOpcGFzc2UgbGEgdGFpbGxlIG1heGltYWxlIHBlcm1pc2UiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgcGFxdWV0ICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJsYSBzaWduYXR1cmUgZHUgcGFxdWV0IG5lIGNvcnJlc3BvbmQgcGFzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAibGEgdmVyc2lvbiBkZSBwYXF1ZXQgJTxQUkl1MzI+IG5vbiBzdXBwb3J0w6llIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgImxlIHBhcXVldCBhIHVuIG1hdXZhaXMgb2JqZXQgw6AgbCdvZmZzZXQgJTxQUkl1TUFYPsKgOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgImxhIGTDqWNvbXByZXNzaW9uIChpbmZsYXRlKSBhIHJldG91cm7DqSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAiZMOpcGFzc2VtZW50IGRlIGxhIHZhbGV1ciBkJ29mZnNldCBwb3VyIGwnb2JqZXQgZGVsdGEgZGUgYmFzZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJsJ29iamV0IGRlbHRhIGRlIGJhc2UgZXN0IGhvcnMgbGltaXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAidHlwZSBkJ29iamV0IGluY29ubnUgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MgorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAocHJlYWQpIGxlIGZpY2hpZXIgcGFxdWV0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmaW4gcHLDqW1hdHVyw6llIGR1IGZpY2hpZXIgcGFxdWV0LCAlPFBSSXVNQVg+IG9jdGV0IGx1IgorbXNnc3RyWzFdICJmaW4gcHLDqW1hdHVyw6llIGR1IGZpY2hpZXIgcGFxdWV0LCAlPFBSSXVNQVg+IG9jdGV0cyBsdXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJncmF2ZSBpbmNvaMOpcmVuY2UgZGFucyBsYSBkw6ljb21wcmVzc2lvbiAoaW5mbGF0ZSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNSBidWlsdGluL2luZGV4LXBhY2suYzo3NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzY0CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDMgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiQ09MTElTSU9OIFNIQTEgVFJPVVbDiUUgQVZFQyAlcyAhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTcKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnaW5mb3JtYXRpb24gZXhpc3RhbnRlIGRlIGwnb2JqZXQgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsJ29iamV0IGV4aXN0YW50ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAib2JqZXQgYmxvYiBpbnZhbGlkZSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NQorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAiZXJyZXVyIGRlIGZzY2sgZGFucyBsJ29iamV0IGVtcGFxdWV0w6kiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiVG91cyBsZXMgb2JqZXRzIGVuZmFudHMgZGUgJXMgbmUgc29udCBwYXMgYWNjZXNzaWJsZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkxOSBidWlsdGluL2luZGV4LXBhY2suYzo5NTAKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgIsOpY2hlYyBkJ2FwcGxpY2F0aW9uIGR1IGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgIlLDqWNlcHRpb24gZCdvYmpldHMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJJbmRleGF0aW9uIGQnb2JqZXRzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTUyCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJsZSBwYXF1ZXQgZXN0IGNvcnJvbXB1IChTSEExIG5lIGNvcnJlc3BvbmQgcGFzKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NworbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ29idGVuaXIgbGUgc3RhdHV0IChmc3RhdCkgZHUgZmljaGllciBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjAKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgImxlIHBhcXVldCBlc3QgaW52YWxpZGUgw6AgbGEgZmluIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTcyCittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAiY29uZnVzaW9uIGV4dHLDqm1lIGRhbnMgcGFyc2VfcGFja19vYmplY3RzKCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTUKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICJSw6lzb2x1dGlvbiBkZXMgZGVsdGFzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpbCA6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ2Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiY29uZnVzaW9uIGV4dHLDqm1lIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAiY29tcGzDqXTDqSBhdmVjICVkIG9iamV0IGxvY2FsIgorbXNnc3RyWzFdICJjb21wbMOpdMOpIGF2ZWMgJWQgb2JqZXRzIGxvY2F1eCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAiIgorIlNvbW1lIGRlIGNvbnRyw7RsZSBkZSBmaW4gaW5hdHRlbmR1ZSBwb3VyICVzIChjb3JydXB0aW9uIHN1ciBsZSBkaXNxdWUgPykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gImxlIHBhcXVldCBhICVkIGRlbHRhIG5vbiByw6lzb2x1IgorbXNnc3RyWzFdICJsZSBwYXF1ZXQgYSAlZCBkZWx0YXMgbm9uIHLDqXNvbHVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvbXByZXNzZXIgbCdvYmpldCBham91dMOpICglZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2JqZXQgbG9jYWwgJXMgZXN0IGNvcnJvbXB1IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJsZSBub20gZGUgZmljaGllciBwYXF1ZXQgJyVzJyBuZSBzZSB0ZXJtaW5lIHBhcyBwYXIgJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBmaWNoaWVyICVzICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4gJXMgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZlcm1lciBsZSBmaWNoaWVyICVzIMOpY3JpdCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgImVycmV1ciBlbiBmZXJtZXR1cmUgZHUgZmljaGllciBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHN0b2NrZXIgbGUgZmljaGllciBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODEKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdG9ja2VyIGxlIGZpY2hpZXIgZCdpbmRleCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAibWF1dmFpcyBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBwYXF1ZXQgZXhpc3RhbnQgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgcGFxdWV0IGQnaW5kZXggZXhpc3RhbnQgcG91ciAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gInBhcyB1biBkZWx0YSA6ICVkIG9iamV0IgorbXNnc3RyWzFdICJwYXMgdW4gZGVsdGEgOiAlZCBvYmpldHMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAibG9uZ3VldXIgY2hhw65uw6llID0gJWQgOiAlbHUgb2JqZXQiCittc2dzdHJbMV0gImxvbmd1ZXVyIGNoYcOubsOpZSA9ICVkIDogJWx1IG9iamV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY4OQorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJldmVuaXIgYXUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBjb3VyYW50IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzM4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDEKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NTcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIm1hdXZhaXMgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzcKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBzYW5zIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzkKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tc3RkaW4gcmVxdWllcnQgdW4gZMOpcMO0dCBnaXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODUKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IHNhbnMgbm9tIGRlIGZpY2hpZXIgcGFxdWV0IGRvbm7DqSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgzMyBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTgxCittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgImVycmV1ciBkZSBmc2NrIGRhbnMgbGVzIG9iamV0cyBwYXF1ZXRzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZhaXJlIHVuIHN0YXQgZHUgbW9kw6hsZSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIHLDqXBlcnRvaXJlICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgbGllbiAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIHVuIGxpZW4gc3ltYm9saXF1ZSBkZSAnJXMnICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb3BpZXIgJyVzJyB2ZXJzICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICJtb2TDqGxlICVzIGlnbm9yw6kiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICJtb2TDqGxlcyBub24gdHJvdXbDqXMgZGFucyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIgorbXNnc3RyICJwYXMgZGUgY29waWUgZGVzIG1vZMOobGVzIGRlcHVpcyAnJXMnwqA6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJhaXRlciBsZSBmaWNoaWVyIGRlIHR5cGUgJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6lwbGFjZXIgJXMgdmVycyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgZXhpc3RlIGTDqWrDoCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiRMOpcMO0dCBHaXQgZXhpc3RhbnQgcGFydGFnw6kgcsOpaW5pdGlhbGlzw6kgZGFucyAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiRMOpcMO0dCBHaXQgZXhpc3RhbnQgcsOpaW5pdGlhbGlzw6kgZGFucyAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJEw6lww7R0IEdpdCB2aWRlIHBhcnRhZ8OpIGluaXRpYWxpc8OpIGRhbnMgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJEw6lww7R0IEdpdCB2aWRlIGluaXRpYWxpc8OpIGRhbnMgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NjgKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHLDqXBlcnRvaXJlLW1vZMOobGU+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxyw6lwZXJ0b2lyZT5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAicGVybWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAic3DDqWNpZmllciBxdWUgbGUgZMOpcMO0dCBnaXQgc2VyYSBwYXJ0YWfDqSBlbnRyZSBwbHVzaWV1cnMgdXRpbGlzYXRldXJzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjkgYnVpbHRpbi9pbml0LWRiLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgcsOpcGVydG9pcmUgKG1rZGlyKSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzZSBkw6lwbGFjZXIgdmVycyBsZSByw6lwZXJ0b2lyZSAoY2hkaXIpICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIiVzIChvdSAtLXdvcmstdHJlZT08csOpcGVydG9pcmU+KSBuJ2VzdCBwYXMgYXV0b3Jpc8OpIHNhbnMgc3DDqWNpZmllciAlcyAob3UgLS0iCisiZ2l0LWRpcj08csOpcGVydG9pcmU+KSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdhY2PDqWRlciDDoCBsJ2FyYnJlIGRlIHRyYXZhaWwgJyVzJyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNgorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciAiCisiPHN5bWJvbGU+Wyg9fDopPHZhbGV1cj5dKS4uLl0gWzxmaWNoaWVyPi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTUKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICLDqWRpdGVyIGxlcyBmaWNoaWVycyBzdXIgcGxhY2UiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTYKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICLDqWxpbWluZXIgbGVzIGxpZ25lcyBkZSBmaW4gdmlkZXMiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTkKK21zZ2lkICJ3aGVyZSB0byBwbGFjZSB0aGUgbmV3IHRyYWlsZXIiCittc2dzdHIgIm/DuSBwbGFjZXIgbGVzIG5vdXZlbGxlcyBsaWduZXMgdGVybWluYWxlcyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDEKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiYWN0aW9uIHNpIGxlcyBsaWduZXMgdGVybWluYWxlcyBleGlzdGVudCBkw6lqw6AiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAzCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgaXMgbWlzc2luZyIKK21zZ3N0ciAiYWN0aW9uIHNpIGxlcyBsaWduZXMgdGVybWluYWxlcyBtYW5xdWVudCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiCittc2dzdHIgIsOpbGltaW5lciBsZXMgbGlnbmVzIHRlcm1pbmFsZXMgdmlkZXMiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA2Cittc2dpZCAiZG8gbm90IGFwcGx5IGNvbmZpZyBydWxlcyIKK21zZ3N0ciAibmUgcGFzIGFwcGxpcXVlciBsZXMgcsOoZ2xlcyBkZSBsYSBjb25maWd1cmF0aW9uIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICJqb2luZHJlIGxlcyB2YWxldXJzIGNvbnRpbnXDqWVzIGF2ZWMgZGVzIGNhcmFjdMOocmVzIGJsYW5jcyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDgKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICJwYXJhbcOodHJlcyBkJ2FuYWx5c2UiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgIm5lIHBhcyB0cmFpdGVyIHNww6ljaWFsZW1lbnQgLS0tIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMQorbXNnaWQgInRyYWlsZXIiCittc2dzdHIgImxpZ25lIGRlIGZpbiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTIKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAibGlnbmUocykgZGUgZmluIMOgIGFqb3V0ZXIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTIzCittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdHJhaWxlciBuJ2EgYXVjdW5lIHNpZ25pZmljYXRpb24gYXZlYyAtLW9ubHktaW5wdXQiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMzCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAiYXVjdW4gZmljaGllciBlbiBlbnRyw6llIHBvdXIgbCfDqWRpdG9uIHN1ciBwbGFjZSIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxwbGFnZSBkZSByw6l2aXNpb25zPl0gW1stLV0gPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL2xvZy5jOjU3Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmpldD4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJvcHRpb24gLS1kZWNvcmF0ZSBpbnZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE3NAorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICJhZmZpY2hlciBsYSBzb3VyY2UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc1Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIlV0aWxpc2VyIGxlIGZpY2hpZXIgZGUgY29ycmVzcG9uZGFuY2UgZGUgbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzcKK21zZ2lkICJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgImTDqWNvcmVyIHNldWxlbWVudCBsZXMgcsOpZsOpcmVuY2VzIGNvcnJlc3BvbmRhbnQgw6AgPG1vdGlmPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAibmUgcGFzIGTDqWNvcmVyIGxlcyByw6lmw6lyZW5jZXMgY29ycmVzcG9uZGFudCDDoCA8bW90aWY+IgorCisjOiBidWlsdGluL2xvZy5jOjE4MAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgImTDqWNvcmVyIGxlcyBvcHRpb25zIgorCisjOiBidWlsdGluL2xvZy5jOjE4MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisiVHJhaXRlciBzZXVsZW1lbnQgbCdpbnRlcnZhbGxlIGRlIGxpZ25lcyBuLG0gZHUgZmljaGllciBlbiBjb21tZW7Dp2FudCBsZSAiCisiY29tcHRlIMOgIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiU29ydGllIGZpbmFsZSA6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXMgOiBmaWNoaWVyIGluY29ycmVjdCIKKworIzogYnVpbHRpbi9sb2cuYzo1NTAgYnVpbHRpbi9sb2cuYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdvYmpldCAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAidHlwZSBpbmNvbm51IDogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGNvdmVyIGZyb20gZGVzY3JpcHRpb24gbW9kZSIKK21zZ3N0ciAiJXPCoDogY291dmVydHVyZSBpbnZhbGlkZSBwb3VyIGxlIG1vZGUgZGUgZGVzY3JpcHRpb24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODIxCittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiZm9ybWF0LmhlYWRlcnMgc2FucyB2YWxldXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTM2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICJsZSBub20gZHUgcsOpcGVydG9pcmUgZGUgc29ydGllIGVzdCB0cm9wIGxvbmciCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBjb3JyZWN0aWYgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTY5Cittc2dpZCAibmVlZCBleGFjdGx5IG9uZSByYW5nZSIKK21zZ3N0ciAiZXhhY3RlbWVudCB1bmUgcGxhZ2UgbsOpY2Vzc2FpcmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTc5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgImNlY2kgbidlc3QgcGFzIHVuZSBwbGFnZSIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAibGEgbGV0dHJlIGRlIG1vdGl2YXRpb24gZG9pdCDDqnRyZSBhdSBmb3JtYXQgY291cnJpZWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgIsOpY2hlYyBkZSBjcsOpYXRpb24gZHUgZmljaGllciBkZSBsZXR0cmUgZGUgbW90aXZhdGlvbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgImluLXJlcGx5LXRvIGFiZXJyYW50IDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPGRlcHVpcz4gfCA8cGxhZ2UgZGUgcsOpdmlzaW9ucz5dIgorCisjOiBidWlsdGluL2xvZy5jOjEzMTMKK21zZ2lkICJ0d28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiZGV1eCByw6lwZXJ0b2lyZXMgZGUgc29ydGllwqA/IgorCisjOiBidWlsdGluL2xvZy5jOjE0MjQgYnVpbHRpbi9sb2cuYzoyMTk3IGJ1aWx0aW4vbG9nLmM6MjE5OSBidWlsdGluL2xvZy5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21taXQgJXMiCittc2dzdHIgImNvbW1pdCBpbmNvbm51ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzQgYnVpbHRpbi9yZXBsYWNlLmM6NTggYnVpbHRpbi9yZXBsYWNlLmM6MjA3CisjOiBidWlsdGluL3JlcGxhY2UuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIKK21zZ3N0ciAiw6ljaGVjIMOgIHLDqXNvdWRyZSAnJXMnIGNvbW1lIHVuZSByw6lmw6lyZW5jZSB2YWxpZGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciBsYSBiYXNlIGRlIGZ1c2lvbiBleGFjdGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgIiIKKyJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsJ2Ftb250LCBzaSB2b3VzIHZvdWxleiBlbnJlZ2lzdHJlciBsZSBjb21taXQgZGUgIgorImJhc2UgYXV0b21hdGlxdWVtZW50LFxuIgorInZldWlsbGV6IHV0aWxpc2VyIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gcG91ciBzdWl2cmUgdW5lIGJyYW5jaGUgIgorImRpc3RhbnRlLlxuIgorIk91IHZvdXMgcG91dmV6IHNww6ljaWZpZXIgbGUgY29tbWl0IGRlIGJhc2UgcGFyIC0tYmFzZT08aWQtZHUtY29tbWl0LWRlLWJhc2U+ICIKKyJtYW51ZWxsZW1lbnQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MworbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIsOpY2hlYyDDoCB0cm91dmVyIGxhIGJhc2UgZGUgZnVzaW9uIGV4YWN0ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc0Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICJsZSBjb21taXQgZGUgYmFzZSBkZXZyYWl0IMOqdHJlIGwnYW5jw6p0cmUgZGUgbGEgbGlzdGUgZGUgcsOpdmlzaW9ucyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImxlIGNvbW1pdCBkZSBiYXNlIG5lIGRldnJhaXQgcGFzIGZhaXJlIHBhcnRpZSBkZSBsYSBsaXN0ZSBkZSByw6l2aXNpb25zIgorCisjOiBidWlsdGluL2xvZy5jOjE1MzEKK21zZ2lkICJjYW5ub3QgZ2V0IHBhdGNoIGlkIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb2J0ZW5pciBsJ2lkIGR1IHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODMKK21zZ2lkICJmYWlsZWQgdG8gaW5mZXIgcmFuZ2UtZGlmZiByYW5nZXMiCittc2dzdHIgIsOpY2hlYyBkJ2luZsOpcmVuY2UgZCdpbnRlcnZhbGxlcyBkZSBkaWZmw6lyZW5jZSBkJ2ludGVydmFsbGVzIgorCisjOiBidWlsdGluL2xvZy5jOjE2MjkKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJ1dGlsaXNlciBbUEFUQ0ggbi9tXSBtw6ptZSBhdmVjIHVuIHBhdGNoIHVuaXF1ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjMyCittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgInV0aWxpc2VyIFtQQVRDSF0gbcOqbWUgYXZlYyBkZXMgcGF0Y2hzIG11bHRpcGxlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM2Cittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgImFmZmljaGVyIGxlcyBwYXRjaHMgc3VyIGxhIHNvcnRpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM4Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgImfDqW7DqXJlciB1bmUgbGV0dHJlIGRlIG1vdGl2YXRpb24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MAorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAiIgorInV0aWxpc2VyIHVuZSBzw6lxdWVuY2Ugc2ltcGxlIGRlIG5vbWJyZXMgcG91ciBsZXMgbm9tIGRlcyBmaWNoaWVycyBkZSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MQorbXNnaWQgInNmeCIKK21zZ3N0ciAic2Z4IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDIKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAidXRpbGlzZXIgPHNmeD4gYXUgbGlldSBkZSAnLnBhdGNoJyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ0Cittc2dpZCAic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIKK21zZ3N0ciAiZMOpbWFycmVyIGxhIG51bcOpcm90YXRpb24gZGVzIHBhdGNocyDDoCA8bj4gYXUgbGlldSBkZSAxIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDYKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgIm1hcnF1ZXIgbGEgc8OpcmllIGNvbW1lIHVuZSBOacOobWUgcsOpw6lkaXRpb24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0OAorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgInV0aWxpc2VyIFtSRkMgUEFUQ0hdIGF1IGxpZXUgZGUgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uLW1vZGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MgorbXNnaWQgImdlbmVyYXRlIHBhcnRzIG9mIGEgY292ZXIgbGV0dGVyIGJhc2VkIG9uIGEgYnJhbmNoJ3MgZGVzY3JpcHRpb24iCittc2dzdHIgImfDqW7DqXJlciBkZXMgcGFydGllcyBkZSBsYSBsZXR0cmUgZCdpbnRyb2R1Y3Rpb24gw6AgcGFydGlyIGRlIGxhIGRlc2NyaXB0aW9uIGRlIGxhIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAidXRpbGlzZXIgWzxwcsOpZml4ZT5dIGF1IGxpZXUgZGUgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICJzdG9ja2VyIGxlcyBmaWNoaWVycyByw6lzdWx0YXRzIGRhbnMgPHLDqXBlcnRvaXJlPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIm5lIHBhcyByZXRpcmVyL2Fqb3V0ZXIgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYzCittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAibmUgcGFzIGltcHJpbWVyIGxlcyBkaWZmcyBiaW5haXJlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY1Cittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgIsOpY3JpcmUgdW5lIGVtcHJlaW50ZSDDoCB6w6lybyBkYW5zIGwnZW50w6p0ZSBGcm9tIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjcKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIm5lIHBhcyBpbmNsdXJlIHVuIHBhdGNoIGNvcnJlc3BvbmRhbnQgw6AgdW4gY29tbWl0IGFtb250IgorCisjOiBidWlsdGluL2xvZy5jOjE2NjkKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgImFmZmljaGVyIGxlIGZvcm1hdCBkdSBwYXRjaCBhdSBsaWV1IGR1IGTDqWZhdXQgKHBhdGNoICsgc3RhdCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAiQ29tbXVuaWNhdGlvbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcyCittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJlbi10w6p0ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjczCittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAiYWpvdXRlciBsJ2VuLXTDqnRlIGRlIGNvdXJyaWVsIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQgYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiZW1haWwiCittc2dzdHIgImNvdXJyaWVsIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAiYWpvdXRlciBsJ2VuLXTDqnRlIFwiVG86XCIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICJham91dGVyIGwnZW4tdMOqdGUgXCJDYzpcIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc4Cittc2dpZCAiaWRlbnQiCittc2dzdHIgImlkZW50IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzkKK21zZ2lkICJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIgorbXNnc3RyICIiCisicmVuc2VpZ25lciBsJ2FkcmVzc2UgRnJvbSDDoCA8aWRlbnQ+IChvdSDDoCBsJ2lkZW50IGR1IHZhbGlkYXRldXIgc2kgYWJzZW50KSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgxCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAiaWQtbWVzc2FnZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgyCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICJyw6lwb25kcmUgZGFucyBsZSBwcmVtaWVyIG1lc3NhZ2Ugw6AgPGlkLW1lc3NhZ2U+IgorCisjOiBidWlsdGluL2xvZy5jOjE2ODMgYnVpbHRpbi9sb2cuYzoxNjg2Cittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgImxpbWl0ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg0Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAiYXR0YWNoZXIgbGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NworbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgInBhdGNoIMOgIGwnaW50w6lyaWV1ciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkxCittc2dpZCAiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiCittc2dzdHIgIiIKKyJhY3RpdmVyIGwnZW5maWxhZ2UgZGUgbWVzc2FnZSwgc3R5bGVzIDogc2hhbGxvdyAoc3VwZXJmaWNpZWwpLCBkZWVwIChwcm9mb25kKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJzaWduYXR1cmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAiYWpvdXRlciB1bmUgc2lnbmF0dXJlIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTUKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAiY29tbWl0LWRlLWJhc2UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgIkFqb3V0ZXIgdW4gYXJicmUgcHLDqXJlcXVpcyDDoCBsYSBzw6lyaWUgZGUgcGF0Y2hzIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgImFqb3V0ZXIgdW5lIHNpZ25hdHVyZSBkZXB1aXMgdW4gZmljaGllciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk5Cittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIGxlcyBub21zIGRlIGZpY2hpZXJzIGRlcyBwYXRjaHMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGEgYmFycmUgZGUgcHJvZ3Jlc3Npb24gZHVyYW50IGxhIHBoYXNlIGRlIGfDqW7DqXJhdGlvbiBkZXMgcGF0Y2hzIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDMKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmV2PiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGVzIG1vZGlmaWNhdGlvbnMgcGFyIHJhcHBvcnQgw6AgPHLDqXY+IGRhbnMgbGEgcHJlbWnDqHJlIHBhZ2Ugb3UgdW5lICIKKyJydXN0aW5lIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDYKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmVmc3BlYz4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlcyBtb2RpZmljYXRpb25zIHBhciByYXBwb3J0IMOgIDxyZWZzcGVjPiBkYW5zIGxhIHByZW1pw6hyZSBwYWdlIG91ICIKKyJ1bmUgcnVzdGluZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAicG91cmNlbnRhZ2UgcGFyIGxlcXVlbCBsYSBjcsOpYXRpb24gZXN0IHBvbmTDqXLDqWUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICJsaWduZSBkJ2lkZW50aWZpY2F0aW9uIGludmFsaWRlIDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwNworbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItbiBldCAtayBzb250IG11dHVlbGxlbWVudCBleGNsdXNpZnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgZXQgLWsgc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaWZzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTcKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSBuJ2EgcGFzIGRlIHNlbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBuJ2EgcGFzIGRlIHNlbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgyMQorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1jaGVjayBuJ2EgcGFzIGRlIHNlbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg1NAorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICJzb3J0aWUgc3RhbmRhcmQsIG91IHLDqXBlcnRvaXJlLCBsZXF1ZWwgPyIKKworIzogYnVpbHRpbi9sb2cuYzoxOTU4Cittc2dpZCAiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLWludGVyZGlmZiByZXF1aWVydCAtLWNvdmVyLWxldHRlciBvdSB1bmUgcnVzdGluZSB1bmlxdWUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MgorbXNnaWQgIkludGVyZGlmZjoiCittc2dzdHIgIkludGVyZGlmZsKgOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIkludGVyZGlmZiBjb250cmUgdiVkwqA6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIi0tY3JlYXRpb24tZmFjdG9yIHJlcXVpZXJ0IC0tcmFuZ2UtZGlmZiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTczCittc2dpZCAiLS1yYW5nZS1kaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiLS1yYW5nZS1kaWZmIHJlcXVpZXJ0IC0tY292ZXItbGV0dGVyIG91IHVuZSBydXN0aW5lIHVuaXF1ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgxCittc2dpZCAiUmFuZ2UtZGlmZjoiCittc2dzdHIgIkRpZmYtaW50ZXJ2YWxsZcKgOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJEaWZmLWludGVydmFsbGUgY29udHJlIHYlZMKgOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgImxlY3R1cmUgZHUgZmljaGllciBkZSBzaWduYXR1cmUgJyVzJyBpbXBvc3NpYmxlIgorCisjOiBidWlsdGluL2xvZy5jOjIwMjkKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIkfDqW7DqXJhdGlvbiBkZXMgcGF0Y2hzIgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGNyw6lhdGlvbiBkZXMgZmljaGllcnMgZW4gc29ydGllIgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8YnJhbmNoZV9hbW9udD4gWzxoZWFkPiBbPGxpbWl0ZT5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgdW5lIGJyYW5jaGUgZGlzdGFudGUgc3VpdmllLCBtZXJjaSBkZSBzcMOpY2lmaWVyICIKKyI8YnJhbmNoZV9hbW9udD4gbWFudWVsbGVtZW50LlxuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDcwCittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWNoaWVyPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjYKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICJpZGVudGlmaWVyIGwnw6l0YXQgZGUgZmljaGllciBhdmVjIGxlcyDDqXRpcXVldHRlcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgbWludXNjdWxlcyBwb3VyIGxlcyBmaWNoaWVycyAnYXNzdW3DqXMgaW5jaGFuZ8OpcyciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgbWludXNjdWxlcyBwb3VyIGxlcyBmaWNoaWVycyAnZnNtb25pdG9yIGNsZWFuJyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMgorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICJhZmZpY2hlciBsZXMgZmljaGllcnMgbWlzIGVuIGNhY2hlIGRhbnMgbGEgc29ydGllIChkw6lmYXV0KSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNAorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJhZmZpY2hlciBsZXMgZmljaGllcnMgc3VwcHJpbcOpcyBkYW5zIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIG1vZGlmacOpcyBkYW5zIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzOAorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGF1dHJlcyBmaWNoaWVycyBkYW5zIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJhZmZpY2hlciBsZXMgZmljaGllcnMgaWdub3LDqXMgZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG5vbSBkZXMgb2JqZXRzIGluZGV4w6lzIGRhbnMgbGEgc29ydGllIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ1Cittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlcyBmaWNoaWVycyBkdSBzeXN0w6htZSBkZSBmaWNoaWVycyBxdWkgb250IGJlc29pbiBkJ8OqdHJlIHN1cHByaW3DqXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDcKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgbm9tcyBkZXMgcsOpcGVydG9pcmVzICdvdGhlciciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDkKK21zZ2lkICJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpbnMgZGUgbGlnbmVzIGRlcyBmaWNoaWVycyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsZXMgcsOpcGVydG9pcmVzIHZpZGVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJhZmZpY2hlciBsZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMgZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiYWZmaWNoZXIgbCdpbmZvcm1hdGlvbiByZXNvbHYtdW5kbyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAic2F1dGVyIGxlcyBmaWNoaWVycyBjb3JyZXNwb25kYW50IGF1IG1vdGlmIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAibGVzIG1vdGlmcyBkJ2V4Y2x1c2lvbiBzb250IGx1cyBkZXB1aXMgPGZpY2hpZXI+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgImxpcmUgZGVzIG1vdGlmcyBkJ2V4Y2x1c2lvbiBhZGRpdGlvbm5lbHMgcGFyIHLDqXBlcnRvaXJlIGRhbnMgPGZpY2hpZXI+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY2Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAiYWpvdXRlciBsZXMgZXhjbHVzaW9ucyBnaXQgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzAKK21zZ2lkICJtYWtlIHRoZSBvdXRwdXQgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiYWZmaWNoZXIgZW4gcmVsYXRpZiBwYXIgcmFwcG9ydCBhdSByw6lwZXJ0b2lyZSByYWNpbmUgZHUgcHJvamV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTczCittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgInBhcmNvdXJpciByw6ljdXJzaXZlbWVudCBsZXMgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICJzaSB1biA8ZmljaGllcj4gbidlc3QgcGFzIGRhbnMgbCdpbmRleCwgdHJhaXRlciBjZWxhIGNvbW1lIHVuZSBlcnJldXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiYXJicmUgb3UgYXBwYXJlbnTDqSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NworbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIiIKKyJjb25zaWTDqXJlciBxdWUgbGVzIGNoZW1pbnMgc3VwcHJpbcOpcyBkZXB1aXMgPGFyYnJlIG91IGFwcGFyZW50w6k+IHNvbnQgIgorInRvdWpvdXJzIHByw6lzZW50cyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3OQorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgImFmZmljaGVyIGxlcyBkb25uw6llcyBkZSBkw6lib2dhZ2UiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6OQorbXNnaWQgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz08ZXhlYz5dXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy1xIHwgLS1xdWlldF0gWy0tZXhpdC1jb2RlXSBbLS1nZXQtdXJsXVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzxkw6lww7R0PiBbPHLDqWbDqXJlbmNlcz4uLi5dXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICJuZSBwYXMgYWZmaWNoZXIgbGVzIFVSTCBkaXN0YW50ZXMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJleGVjIgorbXNnc3RyICJleMOpY3V0YWJsZSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MSBidWlsdGluL2xzLXJlbW90ZS5jOjYzCittc2dpZCAicGF0aCBvZiBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSBob3N0IgorbXNnc3RyICJjaGVtaW4gdmVycyBnaXQtdXBsb2FkLXBhY2sgc3VyIGxlIHNlcnZldXIgZGlzdGFudCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgImxpbWl0ZXIgYXV4IMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgImxpbWl0ZXIgYXV4IGhlYWRzIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsZXMgw6l0aXF1ZXR0ZXMgcGVsw6llcyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICJwcmVuZHJlIGVuIGNvbXB0ZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MgorbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAiIgorInNvcnRpciBhdmVjIHVuIGNvZGUgZCdlcnJldXIgMiBzaSBhdWN1bmUgY29ycmVzcG9uZGFuY2UgZGUgcsOpZsOpcmVuY2Ugbidlc3QgIgorInRyb3V2w6llIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgImFmZmljaGVyIGxhIHLDqWYgc291cy1qYWNlbnRlIGVuIHBsdXMgZGUgbCdvYmpldCBwb2ludMOpIHBhciBlbGxlIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzozMAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDxhcmJyZSBvdSBhcHBhcmVudMOpPiBbPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjgKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgYXJicmVzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgInBhcmNvdXJpciBsZXMgc291cy1hcmJyZXMiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMgorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgImFmZmljaGVyIGxlcyBhcmJyZXMgZW4gbGVzIHBhcmNvdXJhbnQiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgInRlcm1pbmVyIGxlcyDDqWzDqW1lbnRzIGF2ZWMgdW4gb2N0ZXQgTlVMIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzYKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICJpbmNsdXJlIGxhIHRhaWxsZSBkJ29iamV0IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBub21zIGRlIGZpY2hpZXJzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICJ1dGlsaXNlciBsZXMgbm9tcyBkZSBjaGVtaW5zIGNvbXBsZXRzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDUKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsJ2FyYnJlIGVudGllciA7IHBhcyBzZXVsZW1lbnQgbGUgcsOpcGVydG9pcmUgY291cmFudCAoaW1wbGlxdWUgLS0iCisiZnVsbC1uYW1lKSIKKworIzogYnVpbHRpbi9tYWlsc3BsaXQuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgbWJveDogJyVzJyIKK21zZ3N0ciAibWJveCB2aWRlwqA6ICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU2Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTcKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgImxlIGNvbW11dGF0ZXVyIGBtJyBhIGJlc29pbiBkJ3VuZSB2YWxldXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAibGUgY29tbXV0YXRldXIgJyVzJyBhIGJlc29pbiBkJ3VuZSB2YWxldXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIHN0cmF0w6lnaWUgZGUgZnVzaW9uICclcycuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiTGVzIHN0cmF0w6lnaWVzIGRpc3BvbmlibGVzIHNvbnQgOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiTGVzIHN0cmF0w6lnaWVzIHBlcnNvbm5hbGlzw6llcyBzb250IDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDQgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIHVuIGRpZmZzdGF0IMOgIGxhIGZpbiBkZSBsYSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDcgYnVpbHRpbi9wdWxsLmM6MTU1Cittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJhZmZpY2hlciB1biBkaWZmc3RhdCDDoCBsYSBmaW4gZGUgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjE1OAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihzeW5vbnltZSBkZSAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUwIGJ1aWx0aW4vcHVsbC5jOjE2MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImFqb3V0ZXIgKGF1IHBsdXMgPG4+KSDDqWzDqW1lbnRzIGR1IGpvdXJuYWwgY291cnQgYXUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIGRlICIKKyJsYSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTMgYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgImNyw6llciB1bmUgdmFsaWRhdGlvbiB1bmlxdWUgYXUgbGlldSBkZSBmYWlyZSB1bmUgZnVzaW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU1IGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAiZWZmZWN0dWVyIHVuZSB2YWxpZGF0aW9uIHNpIGxhIGZ1c2lvbiByw6l1c3NpdCAoZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTcgYnVpbHRpbi9wdWxsLmM6MTczCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICLDqWRpdGVyIGxlIG1lc3NhZ2UgYXZhbnQgbGEgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgImF1dG9yaXNlciBsJ2F2YW5jZSByYXBpZGUgKGTDqWZhdXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYxIGJ1aWx0aW4vcHVsbC5jOjE4MAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgImFiYW5kb25uZXIgc2kgbCdhdmFuY2UgcmFwaWRlIG4nZXN0IHBhcyBwb3NzaWJsZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NSBidWlsdGluL3B1bGwuYzoxODMKK21zZ2lkICJ2ZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCittc2dzdHIgInbDqXJpZmllciBxdWUgbGUgY29tbWl0IG5vbW3DqSBhIHVuZSBzaWduYXR1cmUgR1BHIHZhbGlkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE4NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTIgYnVpbHRpbi9yZWJhc2UuYzoxNTMxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgInN0cmF0w6lnaWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjcgYnVpbHRpbi9wdWxsLmM6MTg4Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICJzdHJhdMOpZ2llIGRlIGZ1c2lvbiDDoCB1dGlsaXNlciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIm9wdGlvbj12YWxldXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkgYnVpbHRpbi9wdWxsLmM6MTkyCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3B0aW9uIHBvdXIgbGEgc3RyYXTDqWdpZSBkZSBmdXNpb24gc8OpbGVjdGlvbm7DqWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzEKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIiIKKyJtZXNzYWdlIGRlIHZhbGlkYXRpb24gZGUgbGEgZnVzaW9uIChwb3VyIHVuZSBmdXNpb24gc2FucyBhdmFuY2UgcmFwaWRlKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3OAorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJhYmFuZG9ubmVyIGxhIGZ1c2lvbiBlbiBjb3VycyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MAorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgIi0tYWJvcnQgbWFpcyBsYWlzc2VyIGwnaW5kZXggZXQgbCdhcmJyZSBkZSB0cmF2YWlsIGluY2hhbmfDqXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODIKK21zZ2lkICJjb250aW51ZSB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiY29udGludWVyIGxhIGZ1c2lvbiBlbiBjb3VycyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NCBidWlsdGluL3B1bGwuYzoxOTkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgInBlcm1ldHRyZSBsYSBmdXNpb24gZCdoaXN0b3JpcXVlcyBzYW5zIHJhcHBvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTAKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAibmUgcGFzIHV0aWxpc2VyIGxlcyBjcm9jaGV0cyBwcmUtbWVyZ2UtY29tbWl0IGV0IGNvbW1pdC1tc2ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDcKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsYW5jZXIgbGUgcmVtaXNhZ2UuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEyCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZHUgcmVtaXNhZ2UiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAicGFzIHVuIG9iamV0IHZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzM5IGJ1aWx0aW4vbWVyZ2UuYzozNTYKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJyZWFkLXRyZWUgYSDDqWNob3XDqSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKHJpZW4gw6AgY29tcHJlc3NlcikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJWYWxpZGF0aW9uIGNvbXByZXNzw6llIC0tIEhFQUQgbm9uIG1pc2Ugw6Agam91clxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiUGFzIGRlIG1lc3NhZ2UgZGUgZnVzaW9uIC0tIHBhcyBkZSBtaXNlIMOgIGpvdXIgZGUgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycgbmUgcG9pbnRlIHBhcyBzdXIgdW4gY29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIk1hdXZhaXNlIGNoYcOubmUgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyA6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA1Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBnw6lyZXIgYXV0cmUgY2hvc2UgcXVlIGxhIGZ1c2lvbiBkZSBkZXV4IHTDqnRlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiT3B0aW9ucyBpbmNvbm51ZSBwb3VyIG1lcmdlLXJlY3Vyc2l2ZSA6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBkZXB1aXMgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJQYXMgZGUgdmFsaWRhdGlvbiBkZSBsYSBmdXNpb24gOyB1dGlsaXNleiAnZ2l0IGNvbW1pdCcgcG91ciB0ZXJtaW5lciBsYSAiCisiZnVzaW9uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODAxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlZldWlsbGV6IGVudHJlciB1biBtZXNzYWdlIGRlIHZhbGlkYXRpb24gcG91ciBleHBsaXF1ZXIgZW4gcXVvaSBjZXR0ZSBmdXNpb24gIgorImVzdFxuIgorIm7DqWNlc3NhaXJlLCBzdXJ0b3V0IHNpIGNlbGEgZnVzaW9ubmUgdW5lIGJyYW5jaGUgYW1vbnQgbWlzZSDDoCBqb3VyIGRhbnMgdW5lICIKKyJicmFuY2hlIGRlIHN1amV0LlxuIgorIlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA2Cittc2dpZCAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiVW4gbWVzc2FnZSB2aWRlIGFiYW5kb25uZSBsYSB2YWxpZGF0aW9uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiTGVzIGxpZ25lcyBjb21tZW7Dp2FudCBwYXIgJyVjJyBzZXJvbnQgaWdub3LDqWVzLCBldCB1biBtZXNzYWdlIHZpZGVcbiIKKyJhYmFuZG9ubmUgbGEgdmFsaWRhdGlvbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2MgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiTWVzc2FnZSBkZSB2YWxpZGF0aW9uIHZpZGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiTWVydmVpbGxldXguXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIkxhIGZ1c2lvbiBhdXRvbWF0aXF1ZSBhIMOpY2hvdcOpIDsgcsOpZ2xleiBsZXMgY29uZmxpdHMgZXQgdmFsaWRleiBsZSAiCisicsOpc3VsdGF0LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTc3Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJQYXMgZGUgYnJhbmNoZSBjb3VyYW50ZS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzkKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIlBhcyBkZSBicmFuY2hlIGRpc3RhbnRlIHBvdXIgbGEgYnJhbmNoZSBjb3VyYW50ZS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODEKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIlBhcyBkZSBicmFuY2hlIGFtb250IHBhciBkw6lmYXV0IGTDqWZpbmllIHBvdXIgbGEgYnJhbmNoZSBjb3VyYW50ZS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiUGFzIGRlIGJyYW5jaGUgZGUgc3VpdmkgcG91ciAlcyBkZXB1aXMgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIk1hdXZhaXNlIHZhbGV1ciAnJXMnIGRhbnMgbCdlbnZpcm9ubmVtZW50ICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIKK21zZ3N0ciAicGFzIHBvc3NpYmxlIGRlIGZ1c2lvbm5lciBjZWNpIGRhbnMgJXPCoDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgwCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgInBhcyBwb3NzaWJsZSBkZSBmdXNpb25uZXIgY2VjaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODMKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IG4nYWNjZXB0ZSBwYXMgZCdhcmd1bWVudCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODcKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIklsIG4neSBhIHBhcyBkZSBmdXNpb24gw6AgYWJhbmRvbm5lciAoTUVSR0VfSEVBRCBtYW5xdWFudCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NgorbXNnaWQgIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1xdWl0IG4nYWNjZXB0ZSBwYXMgZCdhcmd1bWVudCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDkKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIG5lIHN1cHBvcnRlIGF1Y3VuIGFyZ3VtZW50IgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxMworbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIGluIHByb2dyZXNzIChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiSWwgbid5IGEgcGFzIGRlIGZ1c2lvbiBlbiBjb3VycyAoTUVSR0VfSEVBRCBtYW5xdWFudCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJWb3VzIG4nYXZleiBwYXMgdGVybWluw6kgdm90cmUgZnVzaW9uIChNRVJHRV9IRUFEIGV4aXN0ZSkuXG4iCisiVmV1aWxsZXogdmFsaWRlciB2b3MgbW9kaWZpY2F0aW9ucyBhdmFudCBkZSBwb3V2b2lyIGZ1c2lvbm5lci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM2Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIlZvdXMgbidhdmV6IHBhcyB0ZXJtaW7DqSB2b3RyZSBwaWNvcmFnZSAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdGUpLlxuIgorIlZldWlsbGV6IHZhbGlkZXIgdm9zIG1vZGlmaWNhdGlvbnMgYXZhbnQgZGUgcG91dm9pciBmdXNpb25uZXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiVm91cyBuJ2F2ZXogcGFzIHRlcm1pbsOpIHZvdHJlIHBpY29yYWdlIChDSEVSUllfUElDS19IRUFEIGV4aXN0ZSkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICJWb3VzIG5lIHBvdXZleiBwYXMgY29tYmluZXIgLS1zcXVhc2ggYXZlYyAtLW5vLWZmLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTUKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iCittc2dzdHIgIlZvdXMgbmUgcG91dmV6IHBhcyBjb21iaW5lciAtLXNxdWFzaCBhdmVjIC0tY29tbWl0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorIlBhcyBkZSB2YWxpZGF0aW9uIHNww6ljaWZpw6llIGV0IG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG4nZXN0IHBhcyBkw6lmaW5pLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzODgKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAiTGEgdmFsaWRhdGlvbiBjb21wcmVzc8OpZSB2ZXJzIHVuZSB0w6p0ZSB2aWRlIG4nZXN0IHBhcyBlbmNvcmUgc3VwcG9ydMOpZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTAKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiVW5lIHZhbGlkYXRpb24gc2FucyBhdmFuY2UgcmFwaWRlIG4nYSBwYXMgZGUgc2VucyBkYW5zIHVuZSB0w6p0ZSB2aWRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyAtIHBhcyBwb3NzaWJsZSBkZSBmdXNpb25uZXIgY2VjaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTcKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisiUG9zc2libGUgZGUgZnVzaW9ubmVyIGV4YWN0ZW1lbnQgdW5lIHNldWxlIHZhbGlkYXRpb24gZGFucyB1bmUgdMOqdGUgdmlkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NzYKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJyZWZ1cyBkZSBmdXNpb25uZXIgZGVzIGhpc3RvcmlxdWVzIHNhbnMgcmVsYXRpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDg1Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiIKK21zZ3N0ciAiRMOpasOgIMOgIGpvdXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiRXNzYWkgZGUgZnVzaW9uIHZyYWltZW50IHRyaXZpYWxlIGRhbnMgbCdpbmRleC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICJOb24uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTY5Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIkTDqWrDoCDDoCBqb3VyLiBPdWFpc8KgISIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzUKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIlBhcyBwb3NzaWJsZSBkJ2F2YW5jZXIgcmFwaWRlbWVudCwgYWJhbmRvbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk4IGJ1aWx0aW4vbWVyZ2UuYzoxNjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICJSZXRvdXIgZGUgbCdhcmJyZSDDoCBsJ29yaWdpbmFsLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJFc3NhaSBkZSBsYSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiQXVjdW5lIHN0cmF0w6lnaWUgZGUgZnVzaW9uIG4nYSBwcmlzIGVuIGNoYXJnZSBsYSBmdXNpb24uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJMYSBmdXNpb24gYXZlYyBsYSBzdHJhdMOpZ2llICVzIGEgw6ljaG91w6kuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJVdGlsaXNhdGlvbiBkZSAlcyBwb3VyIHByw6lwYXJlciBsYSByw6lzb2x1dGlvbiDDoCBsYSBtYWluLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY3NworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiTGEgZnVzaW9uIGF1dG9tYXRpcXVlIGEgcsOpdXNzaSA7IHN0b3Bww6llIGF2YW50IGxhIHZhbGlkYXRpb24gY29tbWUgZGVtYW5kw6lcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPHZhbGlkYXRpb24+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPHZhbGlkYXRpb24+IDx2YWxpZGF0aW9uPiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyw6lmw6lyZW5jZT4gWzx2YWxpZGF0aW9uPl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1MworbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAiYWZmaWNoZXIgdG91cyBsZXMgYW5jw6p0cmVzIGNvbW11bnMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAidHJvdXZlciBsZXMgYW5jw6p0cmVzIHBvdXIgdW5lIGZ1c2lvbiBzaW1wbGUgw6AgbiBwb2ludHMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgcsOpdmlzaW9ucyBpbmFjY2Vzc2libGVzIGRlcHVpcyBsZXMgYXV0cmVzIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTkKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgImVzdCBsZSBwcmVtaWVyIGFuY8OqdHJlIGRlIGwnYXV0cmUgPyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTYxCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgInRyb3V2ZXIgb8O5IDx2YWxpZGF0aW9uPiBhIGRpdmVyZ8OpIGR1IHJlZmxvZyBkZSA8csOpZsOpcmVuY2U+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bm9tMT4gWy1MIDxvcmlnPiBbLUwgPG5vbTI+XV1dIDxmaWNoaWVyMT4gIgorIjxmaWNoaWVyLW9yaWc+IDxmaWNoaWVyMj4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM1Cittc2dpZCAic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZW52b3llciBsZXMgcsOpc3VsdGF0cyBzdXIgbGEgc29ydGllIHN0YW5kYXJkIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNgorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJ1dGlsaXNlciB1bmUgZnVzaW9uIGJhc8OpZSBzdXIgZGlmZjMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM3Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJwb3VyIGxlcyBjb25mbGl0cywgdXRpbGlzZXIgbm90cmUgdmVyc2lvbiAob3VyKSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAicG91ciBsZXMgY29uZmxpdHMsIHV0aWxpc2VyIGxldXIgdmVyc2lvbiAodGhlaXIpIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgInBvdXIgbGVzIGNvbmZsaXRzLCB1dGlsaXNlciBsJ2Vuc2VtYmxlIGRlcyB2ZXJzaW9ucyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAicG91ciBsZXMgY29uZmxpdHMsIHV0aWxpc2VyIGNldHRlIHRhaWxsZSBkZSBtYXJxdWV1ciIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgIm5lIHBhcyBhdmVydGlyIMOgIHByb3BvcyBkZXMgY29uZmxpdHMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ3Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICJkw6lmaW5pciBsZXMgbGFiZWxzIHBvdXIgZmljaGllcjEvZmljaGllci1vcmlnL2ZpY2hpZXIyIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICJvcHRpb24gaW5jb25udWUgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdvYmpldCAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2UuIElnbm9yaW5nICVzLiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZXMuIElnbm9yaW5nICVzLiIKK21zZ3N0clswXSAiaW1wb3NzaWJsZSBkZSBnw6lyZXIgcGx1cyBkZSAlZCBiYXNlLiAlcyBpZ25vcsOpLiIKK21zZ3N0clsxXSAiaW1wb3NzaWJsZSBkZSBnw6lyZXIgcGx1cyBkZSAlZCBiYXNlcy4gJXMgaWdub3LDqS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjUKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGfDqXJlciBhdXRyZSBjaG9zZSBxdWUgbGEgZnVzaW9uIGRlIGRldXggdMOqdGVzLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsYSByw6lmw6lyZW5jZSAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlc1xuIgorbXNnc3RyICJGdXNpb24gZGUgJXMgYXZlYyAlc1xuIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY2Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTQKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAibCdlbnRyw6llIHNlIHRlcm1pbmUgcGFyIE5VTCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTUgYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgImF1dG9yaXNlciBsZXMgb2JqZXRzIG1hbnF1YW50cyIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTYKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgImF1dG9yaXNlciBsYSBjcsOpYXRpb24gZGUgcGx1cyBkJ3VuIGFyYnJlIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLXNpemU9PHRhaWxsZT4pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKyJyw6lwZXJ0b2lyZSBvYmpldCBjb250ZW5hbnQgdW4gZW5zZW1ibGUgZGUgcGFpcmVzIGRlIGZpY2hpZXJzIHBhcXVldCBldCAiCisiZCdpbmRleCBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorInBlbmRhbnQgbGUgcmVwYXF1ZXRhZ2UsIGNvbGxlY3RlciBsZXMgZmljaGllcnMgcGFxdWV0IGRlIHBsdXMgcGV0aXRlIHRhaWxsZSAiCisiZGFucyB1biBsb3QgcGx1cyBncmFuZCBxdWUgY2V0dGUgdGFpbGxlIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICJ0cm9wIGQnYXJndW1lbnRzIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2MAorbXNnaWQgIi0tYmF0Y2gtc2l6ZSBvcHRpb24gaXMgb25seSBmb3IgJ3JlcGFjaycgc3ViY29tbWFuZCIKK21zZ3N0ciAibCdvcHRpb24gLS1iYXRjaC1zaXplIG5lIHNlcnQgcXVlIHBvdXIgbGEgc291cy1jb21tYW5kZSAncmVwYWNrJyIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzb3VzLWNvbW1hbmRlIG5vbiByZWNvbm51ZSA6ICVzIgorCisjOiBidWlsdGluL212LmM6MTgKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCisKKyM6IGJ1aWx0aW4vbXYuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIkxlIHLDqXBlcnRvaXJlICVzIGVzdCBkYW5zIGwnaW5kZXggZXQgcG91cnRhbnQgYXVjdW4gc291cy1tb2R1bGUgPyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJWZXVpbGxleiBpbmRleGVyIHZvcyBtb2RpZmljYXRpb25zIGRlIC5naXRtb2R1bGVzIG91IGxlcyByZW1pc2VyIHBvdXIgIgorImNvbnRpbnVlciIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIGVzdCBkYW5zIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjUKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImZvcmNlciBsZSBkw6lwbGFjZW1lbnQvcmVub21tYWdlIG3Dqm1lIHNpIGxhIGNpYmxlIGV4aXN0ZSIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJzYXV0ZXIgbGVzIGVycmV1cnMgZGUgZMOpcGxhY2VtZW50L3Jlbm9tbWFnZSIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAibGEgZGVzdGluYXRpb24gJyVzJyBuJ2VzdCBwYXMgdW4gcsOpcGVydG9pcmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGR1IHJlbm9tbWFnZSBkZSAnJXMnIGVuICclcydcbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIm1hdXZhaXNlIHNvdXJjZSIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpcGxhY2VyIHVuIHLDqXBlcnRvaXJlIGRhbnMgbHVpLW3Dqm1lIgorCisjOiBidWlsdGluL212LmM6MTkwCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6lwbGFjZXIgdW4gcsOpcGVydG9pcmUgc3VyIHVuIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJsZSByw6lwZXJ0b2lyZSBzb3VyY2UgZXN0IHZpZGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjQKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJwYXMgc291cyBsZSBjb250csO0bGUgZGUgdmVyc2lvbiIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAibGEgZGVzdGluYXRpb24gZXhpc3RlIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIsOpY3Jhc2VtZW50IGRlICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzgKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmFzZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDEKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIm11bHRpcGxlcyBzb3VyY2VzIHBvdXIgbGEgbcOqbWUgZGVzdGluYXRpb24iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxlIHLDqXBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uIG4nZXhpc3RlIHBhcyIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiUmVub21tYWdlIGRlICVzIGVuICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzcgYnVpbHRpbi9yZW1vdGUuYzo3MTYgYnVpbHRpbi9yZXBhY2suYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImxlIHJlbm9tbWFnZSBkZSAnJXMnIGEgw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDMKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8dmFsaWRhdGlvbj4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDQKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwNQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MgorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBub21zIChwYXMgZGUgU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDYzCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJ1dGlsaXNlciBzZXVsZW1lbnQgbGVzIMOpdGlxdWV0dGVzIHBvdXIgbm9tbWVyIGxlcyB2YWxpZGF0aW9ucyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NQorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJ1dGlsaXNlciBzZXVsZW1lbnQgbGVzIHLDqWbDqXJlbmNlcyBjb3JyZXNwb25kYW50IMOgIDxtb3RpZj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjcKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImlnbm9yZXIgbGVzIHLDqWbDqXJlbmNlcyBjb3JyZXNwb25kYW50IMOgIDxtb3RpZj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjkKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICIiCisiYWZmaWNoZXIgdG91dGVzIGxlcyB2YWxpZGF0aW9ucyBhY2Nlc3NpYmxlcyBkZXB1aXMgdG91dGVzIGxlcyByw6lmw6lyZW5jZXMiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzAKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgImxpcmUgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MQorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiYXV0b3Jpc2VyIGwnYWZmaWNoYWdlIGRlcyBub21zIGBub24gZMOpZmluaXNgIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzcKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiZMOpcsOpZsOpcmVuY2VyIGxlcyDDqXRpcXVldHRlcyBlbiBlbnRyw6llICh1c2FnZSBpbnRlcm5lKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+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+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzb3VzLWNvbW1hbmRlIGluY29ubnVlIDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgW29wdGlvbnMuLi5dIFs8IDxsaXN0ZS1yw6lmw6lyZW5jZXM+IHwgPCA8bGlzdGUtIgorIm9iamV0cz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFtvcHRpb25zLi4uXSBiYXNlLW5hbWUgWzwgPGxpc3RlLXLDqWbDqXJlbmNlcz4gfCA8IDxsaXN0ZS0iCisib2JqZXRzPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgIm1hdXZhaXMgQ1JDIGQnb2JqZXQgZW1wYXF1ZXTDqSBwb3VyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJvYmpldCBlbXBhcXVldMOpIGNvcnJvbXB1IHBvdXIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICJkZWx0YSByw6ljdXJzaWYgZMOpdGVjdMOpIHBvdXIgbCdvYmpldCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIiV1IG9iamV0cyBjb21tYW5kw6lzLCAlPFBSSXUzMj4gYXR0ZW5kdXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIGlzIGludmFsaWQ6ICVzIgorbXNnc3RyICJsZSBmaWNoaWVyIHBhY2tldCBlc3QgaW52YWxpZGXCoDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCittc2dzdHIgIm91dmVydHVyZSBkdSBmaWNoaWVyIHBhcXVldCBwb3VyIHLDqXV0aWxpc2F0aW9uIGltcG9zc2libGXCoDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODAyCittc2dpZCAidW5hYmxlIHRvIHNlZWsgaW4gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlY2hlcmNoZXIgKHNlZWspIGRhbnMgbGUgZmljaGllciBwYXF1ZXQgcsOpdXRpbGlzw6kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODEzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgImxlY3R1cmUgZHUgZmljaGllciBkZSBwYXF1ZXQgcsOpdXRpbGlzw6kgaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NDEKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICIiCisiZMOpc2FjdGl2YXRpb24gZGUgbCfDqWNyaXR1cmUgZW4gYml0bWFwLCBsZXMgZmljaGllcnMgcGFxdWV0cyBzb250IHNjaW5kw6lzIMOgICIKKyJjYXVzZSBkZSBwYWNrLnBhY2tTaXplTGltaXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODU0Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICLDiWNyaXR1cmUgZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MTcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAiw6ljaGVjIGR1IHN0YXQgZGUgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb3RlICU8UFJJdTMyPiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlPFBSSXUzMj4iCittc2dzdHIgIiU8UFJJdTMyPiBvYmpldHMgw6ljcml0cywgJTxQUkl1MzI+IGF0dGVuZHVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjExNjQKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAiIgorImTDqXNhY3RpdmF0aW9uIGRlIGwnw6ljcml0dXJlIGVuIGJpdG1hcCBjYXIgY2VydGFpbnMgb2JqZXRzIG5lIHNvbnQgcGFzICIKKyJjb21wcmVzc8OpcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIgorbXNnc3RyICJkw6lwYXNzZW1lbnQgZGUgZMOpY2FsYWdlIGRlIGJhc2UgZGUgZGVsdGEgcG91ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgImTDqWNhbGFnZSBkZSBiYXNlIGRlIGRlbHRhIGVzdCBob3JzIGxpbWl0ZSBwb3VyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4NzAKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJEw6ljb21wdGUgZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsYSB0YWlsbGUgZGUgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGwnZW50w6p0ZSBkJ29iamV0IGRlICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTAxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJsJ29iamV0ICVzIG5lIHBldXQgw6p0cmUgbHUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoICglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisib2JqZXQgJXMgbG9uZ3VldXIgZGUgbCdvYmpldCBpbmNvbnNpc3RhbnRlICglPFBSSXVNQVg+IGNvbnRyZSAlPFBSSXVNQVg+KSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTI1Cittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAicGFxdWV0IHNvdXMtb3B0aW1hbCAtIG3DqW1vaXJlIGluc3VmZmlzYW50ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgIkNvbXByZXNzaW9uIHBhciBkZWx0YSBlbiB1dGlsaXNhbnQganVzcXUnw6AgJWQgZmlscyBkJ2V4w6ljdXRpb24iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFjayBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRhZyAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2VtcGFxdWV0ZXIgbGVzIG9iamV0cyBqb2lnbmFibGVzIGRlcHVpcyBsJ8OpdGlxdWV0dGUgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIkNvbXByZXNzaW9uIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2NQorbXNnaWQgImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIKK21zZ3N0ciAiaW5jb25zaXN0YW5jZSBkYW5zIGxlIGNvbXB0ZSBkZSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisiSUQgZCdvYmpldCBkZSBib3JkIGF0dGVuZHUsIHJlw6d1IGRlcyBkb25uw6llcyBpbGxpc2libGVzwqA6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyJJRCBkJ29iamV0IGF0dGVuZHUsIHJlw6d1IGRlcyBkb25uw6llcyBpbGxpc2libGVzwqA6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg0NgorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIC0tbWlzc2luZyIKK21zZ3N0ciAidmFsZXVyIGludmFsaWRlIHBvdXIgLS1taXNzaW5nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MDUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDEzCittc2dpZCAiY2Fubm90IG9wZW4gcGFjayBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciBsJ2luZGV4IGRlIHBhcXVldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCBhdCAlcyBjb3VsZCBub3QgYmUgZXhhbWluZWQiCittc2dzdHIgImwnb2JqZXQgbGlicmUgw6AgJXMgbidhIHBhcyBwdSDDqnRyZSBleGFtaW7DqSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDIxCittc2dpZCAidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmb3JjZXIgbCdvYmpldCBsaWJyZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1bmUgcsOpdmlzaW9uIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uICclcyciCittc2dzdHIgIm1hdXZhaXNlIHLDqXZpc2lvbiAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDEKK21zZ2lkICJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWpvdXRlciBsZXMgb2JqZXRzIHLDqWNlbnRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAidmVyc2lvbiBkJ2luZGV4IG5vbiBzdXBwb3J0w6llICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAibWF1dmFpc2UgdmVyc2lvbiBkJ2luZGV4ICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNgorbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI8dmVyc2lvbj5bLDxkw6ljYWxhZ2U+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM3Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorIsOpY3JpcmUgbGUgZmljaGllciBkJ2luZGV4IGR1IHBhcXVldCBkYW5zIGxlIGZvcm1hdCBkJ2luZGV4IGRlIHZlcnNpb24gIgorInNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgInRhaWxsZSBtYXhpbXVtIGRlIGNoYXF1ZSBmaWNoaWVyIHBhcXVldCBlbiBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiaWdub3JlciBsZXMgb2JqZXRzIGVtcHJ1bnTDqXMgw6AgdW4gYXV0cmUgbWFnYXNpbiBkJ29iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ0Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJpZ25vcmVyIGxlcyBvYmpldHMgZW1wYXF1ZXTDqXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImxpbWl0ZXIgbGEgZmVuw6p0cmUgZCdlbXBhcXVldGFnZSBwYXIgb2JqZXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDgKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICIiCisibGltaXRlciBsYSBmZW7DqnRyZSBkJ2VtcGFxdWV0YWdlIHBhciBtw6ltb2lyZSBlbiBwbHVzIGRlIGxhIGxpbWl0ZSBkJ29iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUwCittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIiIKKyJsb25ndWV1ciBtYXhpbXVtIGRlIGxhIGNoYcOubmUgZGUgZGVsdGEgYXV0b3Jpc8OpZSBkYW5zIGxlIHBhcXVldCByw6lzdWx0YW50IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTIKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgInLDqXV0aWxpc2VyIGxlcyBkZWx0YXMgZXhpc3RhbnRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTQKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICJyw6l1dGlsaXNlciBsZXMgb2JqZXRzIGV4aXN0YW50cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU2Cittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJ1dGlsaXNlciBsZXMgb2JqZXRzIE9GU19ERUxUQSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU4Cittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAiIgorInV0aWxpc2VyIGRlcyBmaWxzIGxvcnMgZGUgbGEgcmVjaGVyY2hlIHBvdXIgdW5lIG1laWxsZXVyZSBjb3JyZXNwb25kYW5jZSBkZXMgIgorImRlbHRhcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAibmUgcGFzIGNyw6llciB1biBwYXF1ZXQgdmlkZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYyCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGlyZSBsZXMgcGFyYW3DqHRyZXMgZGUgcsOpdmlzaW9uIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2NAorbXNnaWQgImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIgorbXNnc3RyICJsaW1pdGVyIGxlcyBvYmpldHMgw6AgY2V1eCBxdWkgbmUgc29udCBwYXMgZW5jb3JlIGVtcGFxdWV0w6lzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5jbHVyZSBsZXMgb2JqZXRzIGFjY2Vzc2libGVzIGRlcHVpcyB0b3V0ZSByw6lmw6lyZW5jZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICJpbmNsdXJlIGxlcyBvYmpldHMgcsOpZsOpcmVuY8OpcyBwYXIgbGVzIMOpbMOpbWVudHMgZGUgcmVmbG9nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzMKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICJpbmNsdXJlIGxlcyBvYmpldHMgcsOpZsOpcmVuY8OpcyBwYXIgbCdpbmRleCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc2Cittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICJhZmZpY2hlciBsJ2VtcGFxdWV0YWdlIHN1ciBsYSBzb3J0aWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3OAorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAiaW5jbHVyZSBsZXMgb2JqZXRzIGQnw6l0aXF1ZXR0ZXMgcXVpIHLDqWbDqHJlbnQgw6AgZGVzIG9iamV0cyDDoCBlbXBhcXVldGVyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImdhcmRlciBsZXMgb2JqZXRzIGluYWNjZXNzaWJsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MgorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiZW1wYXF1ZXRlciBsZXMgb2JqZXRzIGluYWNjZXNzaWJsZXMgZMOpdGFjaMOpcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg0Cittc2dpZCAidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImTDqXBhcXVldGVyIGxlcyBvYmpldHMgaW5hY2Nlc3NpYmxlcyBwbHVzIHLDqWNlbnRzIHF1ZSA8aGV1cmU+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODcKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICJ1dGlsaXNlciBsJ2FsZ29yaXRobWUgZGUgam9pZ25hYmlsaXTDqSBjcmV1c2UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJjcsOpZXIgZGVzIHBhcXVldHMgbMOpZ2VycyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkxCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgImNyw6llciBkZXMgcGFxdWV0cyBwZXJtZXR0YW50IGRlcyByw6ljdXDDqXJhdGlvbnMgc3VwZXJmaWNpZWxsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MworbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgImlnbm9yZXIgbGVzIHBhcXVldHMgcXVpIG9udCB1biBmaWNoaWVyIC5rZWVwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTUKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICJpZ25vcmVyIGNlIHBhcXVldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk3Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAibml2ZWF1IGRlIGNvbXByZXNzaW9uIGR1IHBhcXVldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk5Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIm5lIHBhcyBjYWNoZXIgbGVzIHZhbGlkYXRpb25zIHBhciBncmVmZmVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDEKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyJ1dGlsaXNlciB1biBpbmRleCBlbiBiaXRtYXAgc2kgZGlzcG9uaWJsZSBwb3VyIGFjY8OpbGVyZXIgbGUgZMOpY29tcHRlIGRlcyAiCisib2JqZXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDMKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICLDqWNyaXJlIHVuIGluZGV4IGVuIGJpdG1hcCBhc3NvY2nDqSDDoCBsJ2luZGV4IGRlIHBhcXVldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzA3Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgIsOpY3JpcmUgdW4gaW5kZXggZGUgYml0bWFwIHNpIHBvc3NpYmxlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTEKK21zZ2lkICJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJnZXN0aW9uIGRlcyBvYmpldHMgbWFucXVhbnRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTQKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAibmUgcGFzIGVtcGFxdWV0ZXIgbGVzIG9iamV0cyBkYW5zIGxlcyBmaWNoaWVycyBwYXF1ZXRzIHByb21ldHRldXJzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTYKK21zZ2lkICJyZXNwZWN0IGlzbGFuZHMgZHVyaW5nIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJyZXNwZWN0ZXIgbGVzIMOubG90cyBwZW5kYW50IGxhIGNvbXByZXNzaW9uIGRlcyBkZWx0YXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBjaGFpbiBkZXB0aCAlZCBpcyB0b28gZGVlcCwgZm9yY2luZyAlZCIKK21zZ3N0ciAibGEgcHJvZm9uZGV1ciAlZCBkZSBjaGHDrm5lIGRlIGRlbHRhIGVzdCB0cm9wIGdyYW5kZSwgZm9yY8OpZSDDoCAlZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2suZGVsdGFDYWNoZUxpbWl0IGlzIHRvbyBoaWdoLCBmb3JjaW5nICVkIgorbXNnc3RyICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBlc3QgdHJvcCBncmFuZCwgZm9yY8OpIMOgICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDQKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorIi0tbWF4LXBhY2stc2l6ZSBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBwb3VyIGNvbnN0cnVpcmUgdW4gcGFxdWV0IMOgICIKKyJ0cmFuc2bDqXJlciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA2Cittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgImxhIHRhaWxsZSBsaW1pdGUgbWluaW1hbGUgZCd1biBwYXF1ZXQgZXN0IDEgTWlCIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIi0tdGhpbiBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBwb3VyIGNvbnN0cnVpcmUgdW4gcGFxdWV0IGluZGV4YWJsZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgZXQgLS11bnBhY2stdW5yZWFjaGFibGUgc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjAKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgImltcG9zc2libGUgZCd1dGlsaXNlciAtLWZpbHRlciBzYW5zIC0tc3Rkb3V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0ODEKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICLDiW51bcOpcmF0aW9uIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPikiCittc2dzdHIgIiIKKyJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHLDqXV0aWxpc8OpcyAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPikiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgImVtcGFxdWV0ZXIgdG91dCIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNworbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICLDqWxpbWluZXIgbGVzIHLDqWbDqXJlbmNlcyBwZXJkdWVzIChkw6lmYXV0KSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGVzIG9iamV0cyBkdXBsaXF1w6lzIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPGhldXJlPl0gWy0tXSBbPGhlYWQ+4oCmXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMQorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG9iamV0cyDDqWxpbWluw6lzIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImZhaXJlIGV4cGlyZXIgbGVzIG9iamV0cyBwbHVzIHZpZXV4IHF1ZSA8aGV1cmU+IgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgImxpbWl0ZXIgbGEgdHJhdmVyc8OpZSBhdXggb2JqZXRzIGhvcnMgZGVzIGZpY2hpZXJzIHBhcXVldHMgcHJvbWV0dGV1cnMiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgImltcG9zc2libGUgZGUgbmV0dG95ZXIgZGFucyB1biBkw6lww7R0IGQnb2JqZXRzIHByw6ljaWV1eCIKKworIzogYnVpbHRpbi9wdWxsLmM6NjYgYnVpbHRpbi9wdWxsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJWYWxldXIgaW52YWxpZGUgcG91ciAlcyA6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4OAorbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPGTDqXDDtHQ+IFs8c3DDqWNpZmljYXRpb24tZGUtcsOpZsOpcmVuY2U+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250csO0bGVyIGxhIHLDqWN1cMOpcmF0aW9uIHLDqWN1cnNpdmUgZGFucyBsZXMgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAiT3B0aW9ucyByZWxhdGl2ZXMgw6AgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgImluY29ycG9yZXIgbGVzIG1vZGlmaWNhdGlvbnMgZW4gcmViYXNhbnQgcGx1dMO0dCBxdSdlbiBmdXNpb25uYW50IgorCisjOiBidWlsdGluL3B1bGwuYzoxNzcgYnVpbHRpbi9yZWJhc2UuYzo0NjcgYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgImF1dG9yaXNlciBsJ2F2YW5jZSByYXBpZGUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4NgorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIgcmViYXNlIgorbXNnc3RyICJyZW1pc2VyIGF2YW50IGV0IHLDqWFwcGxpcXVlciBhcHLDqHMgbGUgcmViYXNhZ2UgYXV0b21hdGlxdWVtZW50IgorCisjOiBidWlsdGluL3B1bGwuYzoyMDIKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIk9wdGlvbnMgcmVsYXRpdmVzIGF1IHJhcGF0cmllbWVudCIKKworIzogYnVpbHRpbi9wdWxsLmM6MjEyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiZm9yY2VyIGwnw6ljcmFzZW1lbnQgZGUgbGEgYnJhbmNoZSBsb2NhbGUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibm9tYnJlIGRlIHNvdXMtbW9kdWxlcyB0aXLDqXMgZW4gcGFyYWxsw6hsZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJWYWxldXIgaW52YWxpZGUgcG91ciBwdWxsLmZmIDogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNworbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJbCBuJ3kgYSBwYXMgZGUgY2FuZGlkYXRlIHN1ciBsYXF1ZWxsZSByZWJhc2VyIHBhcm1pIGxlcyByw6lmw6lyZW5jZXMgcXVlIHZvdXMgIgorInZlbmV6IGRlIHLDqWN1cMOpcmVyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJbCBuJ3kgYSBwYXMgZGUgY2FuZGlkYXRlIGF2ZWMgbGFxdWVsbGUgZnVzaW9ubmVyIHBhcm1pIGxlcyByw6lmw6lyZW5jZXMgcXVlICIKKyJ2b3VzIHZlbmV6IGRlIHLDqWN1cMOpcmVyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQwCittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIkfDqW7DqXJhbGVtZW50LCBjZWxhIHNpZ25pZmllIHF1ZSB2b3VzIGF2ZXogaW5kaXF1w6kgdW4gc3DDqWNpZmljYXRldXJcbiIKKyJkZSByw6lmw6lyZW5jZSBqb2tlciBxdWkgbidhIHBhcyBldSBkZSBjb3JyZXNwb25kYW5jZSBzdXIgbGUgc2VydmV1ciBkaXN0YW50LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogZGVtYW5kw6kgZGUgdGlyZXIgZGVwdWlzIGxlIGTDqXDDtHQgZGlzdGFudCAnJXMnLCBtYWlzIHNhbnMgaW5kaXF1ZXJcbiIKKyJsYSBicmFuY2hlLiBDb21tZSBjZSBuJ2VzdCBwYXMgbGUgZMOpcMO0dCBkaXN0YW50IHBhciBkw6lmYXV0IGRhbnMgbGEgIgorImNvbmZpZ3VyYXRpb25cbiIKKyJwb3VyIGxhIGJyYW5jaGUgYWN0dWVsbGUsIHZvdXMgZGV2ZXogc3DDqWNpZmllciBsYSBicmFuY2hlIGF2ZWMgbGEgY29tbWFuZGUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDggYnVpbHRpbi9yZWJhc2UuYzoxMzc1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICJWb3VzIG4nw6p0ZXMgYWN0dWVsbGVtZW50IHN1ciBhdWN1bmUgYnJhbmNoZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlZldWlsbGV6IHNww6ljaWZpZXIgc3VyIHF1ZWxsZSBicmFuY2hlIHZvdXMgc291aGFpdGVyIHJlYmFzZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIlZldWlsbGV6IHNww6ljaWZpZXIgdW5lIGJyYW5jaGUgYXZlYyBsYXF1ZWxsZSBmdXNpb25uZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTMgYnVpbHRpbi9wdWxsLmM6NDY4Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiUsOpZsOpcmV6LXZvdXMgw6AgZ2l0LXB1bGwoMSkgcG91ciBkZSBwbHVzIGFtcGxlcyBkw6l0YWlscy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NjEgYnVpbHRpbi9wdWxsLmM6NDcwCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8ZGlzdGFudD4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NzAgYnVpbHRpbi9wdWxsLmM6NDc1CisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY1Cittc2dpZCAiPGJyYW5jaD4iCittc2dzdHIgIjxicmFuY2hlPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYzIGJ1aWx0aW4vcmViYXNlLmM6MTM3MyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIlBhcyBkJ2luZm9ybWF0aW9uIGRlIHN1aXZpIGRpc3RhbnQgcG91ciBsYSBicmFuY2hlIGFjdHVlbGxlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDcyIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICIiCisiU2kgdm91cyBzb3VoYWl0ZXogaW5kaXF1ZXIgbCdpbmZvcm1hdGlvbiBkZSBzdWl2aSBkaXN0YW50IHBvdXIgY2V0dGUgIgorImJyYW5jaGUsIHZvdXMgcG91dmV6IGxlIGZhaXJlIGF2ZWPCoDoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIlZvdHJlIGluZm9ybWF0aW9uIGRlIGNvbmZpZ3VyYXRpb24gaW5kaXF1ZSBkZSBmdXNpb25uZXIgYXZlYyBsYSByw6lmw6lyZW5jZSAiCisiJyVzJ1xuIgorImR1IHNlcnZldXIgZGlzdGFudCwgbWFpcyBjZXR0ZSByw6lmw6lyZW5jZSBuJ2EgcGFzIMOpdMOpIHLDqWN1cMOpcsOpZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FjY8OpZGVyIGxlIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODY3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICItLXZlcmlmeS1zaWduYXR1cmVzIGVzdCBpZ25vcsOpIHBvdXIgdW4gcmViYXNhZ2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgImwnb3B0aW9uIC0tW25vLV1hdXRvc3Rhc2ggbidlc3QgdmFsaWRlIHF1J2F2ZWMgLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiTWlzZSDDoCBqb3VyIGQndW5lIGJyYW5jaGUgbm9uIGVuY29yZSBjcsOpw6llIGF2ZWMgbGVzIGNoYW5nZW1lbnRzIGFqb3V0w6lzIGRhbnMgIgorImwnaW5kZXguIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzQKK21zZ2lkICJwdWxsIHdpdGggcmViYXNlIgorbXNnc3RyICJ0aXJlciBhdmVjIHVuIHJlYmFzYWdlIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzUKK21zZ2lkICJwbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJ2ZXVpbGxleiBsZXMgdmFsaWRlciBvdSBsZXMgcmVtaXNlci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKyJsYSByw6ljdXDDqXJhdGlvbiBhIG1pcyDDoCBqb3VyIGxhIHTDqnRlIGRlIGxhIGJyYW5jaGUgYWN0dWVsbGUuXG4iCisiYXZhbmNlIHJhcGlkZSBkZSB2b3RyZSBjb3BpZSBkZSB0cmF2YWlsXG4iCisiZGVwdWlzIGxlIGNvbW1pdCAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJBdmFuY2UgcmFwaWRlIGRlIHZvdHJlIGFyYnJlIGRlIHRyYXZhaWwgaW1wb3NzaWJsZS5cbiIKKyJBcHLDqHMgYXZvaXIgdsOpcmlmacOpIHF1ZSB0b3V0ZSBtb2RpZmljYXRpb24gcHLDqWNpZXVzZSBhIMOpdMOpIHNhdXZlZ2FyZMOpZSBhdmVjXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorImxhbmNlelxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInBvdXIgcsOpZ8OpbsOpcmVyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZnVzaW9ubmVyIGRlIG11bHRpcGxlcyBicmFuY2hlcyBzdXIgdW5lIHTDqnRlIHZpZGUuIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJlYmFzZXIgc3VyIGRlIG11bHRpcGxlcyBicmFuY2hlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk5MgorbXNnaWQgImNhbm5vdCByZWJhc2Ugd2l0aCBsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSByZWJhc2VyIGF2ZWMgZGVzIG1vZGlmaWNhdGlvbnMgZGUgc291cy1tb2R1bGVzIGVucmVnaXN0csOpZXMgIgorImxvY2FsZW1lbnQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8ZMOpcMO0dD4gWzxzcMOpY2lmaWNhdGlvbi1kZS1yw6lmw6lyZW5jZT4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJyYWNjb3VyY2kgZCfDqXRpcXVldHRlIHNhbnMgPMOpdGlxdWV0dGU+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgYWNjZXB0ZSBzZXVsZW1lbnQgZGVzIG5vbXMgZW50aWVycyBkZSByw6lmw6lyZW5jZXMgY2libGVzIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiUG91ciBjaG9pc2lyIGwnb3B0aW9uIGRlIG1hbmnDqHJlIHBlcm1hbmVudGUsIHZvaXIgcHVzaC5kZWZhdWx0IGRhbnMgJ2dpdCAiCisiaGVscCBjb25maWcnLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSBhbW9udCBkZSB2b3RyZSBicmFuY2hlIGNvdXJhbnRlIG5lIGNvcnJlc3BvbmQgcGFzXG4iCisiYXUgbm9tIGRlIHZvdHJlIGJyYW5jaGUgY291cmFudGUuICBQb3VyIHBvdXNzZXIgdmVycyBsYSBicmFuY2hlIGFtb250XG4iCisic3VyIGxlIHNlcnZldXIgZGlzdGFudCwgdXRpbGlzZXpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlBvdXIgcG91c3NlciB2ZXJzIGxhIGJyYW5jaGUgZHUgbcOqbWUgbm9tIHN1ciBsZSBzZXJ2ZXVyIGRpc3RhbnQsIHV0aWxpc2V6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIlZvdXMgbifDqnRlcyBhY3R1ZWxsZW1lbnQgc3VyIGF1Y3VuZSBicmFuY2hlLlxuIgorIlBvdXIgcG91c3NlciBsJ2hpc3RvcmlxdWUgbWVuYW50IMOgIGwnw6l0YXQgYWN0dWVsIChIRUFEIGTDqXRhY2jDqWUpLFxuIgorInV0aWxpc2V6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5vbS1kZS1sYS1icmFuY2hlLWFtb250PlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJMYSBicmFuY2hlIGNvdXJhbnRlICVzIG4nYSBwYXMgZGUgYnJhbmNoZSBhbW9udC5cbiIKKyJQb3VyIHBvdXNzZXIgbGEgYnJhbmNoZSBjb3VyYW50ZSBldCBkw6lmaW5pciBsYSBkaXN0YW50ZSBjb21tZSBhbW9udCwgIgorInV0aWxpc2V6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgY291cmFudGUgJXMgYSBkZSBtdWx0aXBsZXMgYnJhbmNoZXMgYW1vbnQsIGltcG9zc2libGUgZGUgcG91c3Nlci4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiVm91cyDDqnRlcyBlbiB0cmFpbiBkZSBwb3Vzc2VyIHZlcnMgbGEgYnJhbmNoZSBkaXN0YW50ZSAnJXMnLCBxdWkgbidlc3RcbiIKKyJwYXMgdW5lIGJyYW5jaGUgYW1vbnQgZGUgdm90cmUgYnJhbmNoZSBjb3VyYW50ZSAnJXMnLCBzYW5zIG1lIGRpcmVcbiIKKyJxdW9pIHBvdXNzZXIgcG91ciBtZXR0cmUgw6Agam91ciBxdWVsbGUgYnJhbmNoZSBhbW9udC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiVm91cyBuJ2F2ZXogcGFzIHNww6ljaWZpw6kgZGUgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIMOgIHBvdXNzZXIsIGV0IHB1c2guIgorImRlZmF1bHQgZXN0IFwibm90aGluZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc3Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiTGVzIG1pc2VzIMOgIGpvdXIgb250IMOpdMOpIHJlamV0w6llcyBjYXIgbGEgcG9pbnRlIGRlIGxhIGJyYW5jaGUgY291cmFudGUgZXN0ICIKKyJkZXJyacOocmVcbiIKKyJzb24gaG9tb2xvZ3VlIGRpc3RhbnQuIEludMOpZ3JleiBsZXMgY2hhbmdlbWVudHMgZGlzdGFudHMgKHBhciBleGVtcGxlICdnaXQgIgorInB1bGwgLi4uJylcbiIKKyJhdmFudCBkZSBwb3Vzc2VyIMOgIG5vdXZlYXUuXG4iCisiVm9pciBsYSAnTm90ZSDDoCBwcm9wb3MgZGVzIGF2YW5jZXMgcmFwaWRlcycgZGFucyAnZ2l0IHB1c2ggLS1oZWxwJyBwb3VyIHBsdXMgIgorImQnaW5mb3JtYXRpb24uIgorCisjOiBidWlsdGluL3B1c2guYzoyODMKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJMZXMgbWlzZXMgw6Agam91ciBvbnQgw6l0w6kgcmVqZXTDqWVzIGNhciBsYSBwb2ludGUgZGUgbGEgYnJhbmNoZSBjb3VyYW50ZSBlc3QgIgorImRlcnJpw6hyZVxuIgorInNvbiBob21vbG9ndWUgZGlzdGFudC4gRXh0cmF5ZXogY2V0dGUgYnJhbmNoZSBldCBpbnTDqWdyZXogbGVzIGNoYW5nZW1lbnRzICIKKyJkaXN0YW50c1xuIgorIihwYXIgZXhlbXBsZSAnZ2l0IHB1bGwgLi4uJykgYXZhbnQgZGUgcG91c3NlciDDoCBub3V2ZWF1LlxuIgorIlZvaXIgbGEgJ05vdGUgw6AgcHJvcG9zIGRlcyBhdmFuY2VzIHJhcGlkZXMnIGRhbnMgJ2dpdCBwdXNoIC0taGVscCcgcG91ciBwbHVzICIKKyJkJ2luZm9ybWF0aW9uLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkxlcyBtaXNlcyDDoCBqb3VyIG9udCDDqXTDqSByZWpldMOpZXMgY2FyIGxhIGJyYW5jaGUgZGlzdGFudGUgY29udGllbnQgZHUgIgorInRyYXZhaWwgcXVlXG4iCisidm91cyBuJ2F2ZXogcGFzIGVuIGxvY2FsLiBDZWNpIGVzdCBnw6luw6lyYWxlbWVudCBjYXVzw6kgcGFyIHVuIGF1dHJlIGTDqXDDtHQgIgorInBvdXNzw6lcbiIKKyJ2ZXJzIGxhIG3Dqm1lIHLDqWbDqXJlbmNlLiBWb3VzIHBvdXJyaWV6IGludMOpZ3JlciBkJ2Fib3JkIGxlcyBjaGFuZ2VtZW50cyAiCisiZGlzdGFudHNcbiIKKyIocGFyIGV4ZW1wbGUgJ2dpdCBwdWxsIC4uLicpIGF2YW50IGRlIHBvdXNzZXIgw6Agbm91dmVhdS5cbiIKKyJWb2lyIGxhICdOb3RlIMOgIHByb3BvcyBkZXMgYXZhbmNlcyByYXBpZGVzJyBkYW5zICdnaXQgcHVzaCAtLWhlbHAnIHBvdXIgcGx1cyAiCisiZCdpbmZvcm1hdGlvbi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NgorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIiIKKyJMZXMgbWlzZXMgw6Agam91ciBvbnQgw6l0w6kgcmVqZXTDqWVzIGNhciBsJ8OpdGlxdWV0dGUgZXhpc3RlIGTDqWrDoCBkYW5zIGxhICIKKyJicmFuY2hlIGRpc3RhbnRlLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJWb3VzIG5lIHBvdXZleiBwYXMgbWV0dHJlIMOgIGpvdXIgdW5lIHLDqWbDqXJlbmNlIGRpc3RhbnRlIHF1aSBwb2ludGUgc3VyIHVuICIKKyJvYmpldCBxdWlcbiIKKyJuJ2VzdCBwYXMgdW4gY29tbWl0LCBvdSBtZXR0cmUgw6Agam91ciB1bmUgcsOpZsOpcmVuY2UgZGlzdGFudGUgcG91ciBsYSBmYWlyZSAiCisicG9pbnRlclxuIgorInZlcnMgdW4gb2JqZXQgcXVpIG4nZXN0IHBhcyB1biBjb21taXQsIHNhbnMgdXRpbGlzZXIgbCdvcHRpb24gJy0tZm9yY2UnLlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICJQb3Vzc8OpZSB2ZXJzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBwb3Vzc2VyIGRlcyByw6lmw6lyZW5jZXMgdmVycyAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzo1NDIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJkw6lww7R0IgorCisjOiBidWlsdGluL3B1c2guYzo1NDMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJwb3Vzc2VyIHRvdXRlcyBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDQgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgInJlZmzDqXRlciB0b3V0ZXMgbGVzIHLDqWbDqXJlbmNlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgInN1cHByaW1lciBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIiIKKyJwb3Vzc2VyIGxlcyDDqXRpcXVldHRlcyAobmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyAtLWFsbCBvdSAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgImZvcmNlciBsZXMgbWlzZXMgw6Agam91ciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgxCittc2dpZCAiPHJlZm5hbWU+OjxleHBlY3Q+IgorbXNnc3RyICI8bm9tLWRlLXJlZj46PGF0dGVuZHU+IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiZXhpZ2VyIHF1ZSBsJ2FuY2llbm5lIHZhbGV1ciBkZSBsYSByw6lmw6lyZW5jZSBzb2l0IMOgIGNldHRlIHZhbGV1ciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250csO0bGVyIGxhIHBvdXNzw6llIHLDqWN1cnNpdmUgZGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAidXRpbGlzZXIgdW4gZW1wYXF1ZXRhZ2UgbMOpZ2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICJyZWNldm9pciBsZSBwcm9ncmFtbWUgZCdlbXBhcXVldGFnZSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgImTDqWZpbmlyIGxhIGJyYW5jaGUgYW1vbnQgcG91ciBnaXQgcHVsbC9zdGF0dXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICLDqWxpbWluZXIgbGVzIHLDqWbDqXJlbmNlcyBsb2NhbGVzIHN1cHByaW3DqWVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiw6l2aXRlciBkJ3V0aWxpc2VyIGxlIGNyb2NoZXQgcHJlLXB1c2giCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAicG91c3NlciBsZXMgw6l0aXF1ZXR0ZXMgbWFucXVhbnRlcyBtYWlzIHBlcnRpbmVudGVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAic2lnbmVyIGxhIHBvdXNzw6llIGF2ZWMgR1BHIgorCisjOiBidWlsdGluL3B1c2guYzo1NzIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIKK21zZ3N0ciAiZGVtYW5kZSB1bmUgdHJhbnNhY3Rpb24gYXRvbWlxdWUgc3VyIGxlIHNlcnZldXIgZGlzdGFudCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkwCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLWFsbCwgLS1taXJyb3IgZXQgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo1OTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUgbidhIHBhcyBkZSBzZW5zIHNhbnMgYXVjdW5lIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3B1c2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAibWF1dmFpcyBkw6lww7R0ICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMworbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiUGFzIGRlIGRlc3RpbmF0aW9uIHBvdXIgcG91c3Nlci5cbiIKKyJTcMOpY2lmaWV6IHVuZSBVUkwgZGVwdWlzIGxhIGxpZ25lIGRlIGNvbW1hbmRlIG91IGNvbmZpZ3VyZXogdW4gZMOpcMO0dCBkaXN0YW50ICIKKyJlbiB1dGlsaXNhbnRcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5vbT4gPHVybD5cbiIKKyJcbiIKKyJldCBwb3Vzc2V6IGFsb3JzIGVuIHV0aWxpc2FudCBsZSBkw6lww7R0IGRpc3RhbnRcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5vbT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjI4Cittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCBldCAtLXRhZ3Mgc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo2MzAKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLWFsbCBuZSBwZXV0IHBhcyDDqnRyZSBjb21iaW7DqSBhdmVjIGRlcyBzcMOpY2lmaWNhdGlvbnMgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3IgZXQgLS10YWdzIHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM2Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3IgbmUgcGV1dCBwYXMgw6p0cmUgY29tYmluw6kgYXZlYyBkZXMgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3B1c2guYzo2MzkKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZXQgLS1taXJyb3Igc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo2NDMKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICIiCisibGVzIG9wdGlvbnMgZGUgcG91c3PDqWUgbmUgcGV1dmVudCBwYXMgY29udGVuaXIgZGUgY2FyYWN0w6hyZXMgZGUgbm91dmVsbGUgIgorImxpZ25lIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo4Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC1iYXNlPi4uPG9sZC10aXA+IDxuZXctYmFzZT4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxhbmNpZW5uZS1iYXNlPi4uPGFuY2llbi1zb21tZXQ+IDxub3V2ZWxsZS1iYXNlPi4uIgorIjxub3V2ZWF1LXNvbW1ldD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxhbmNpZW4tc29tbWV0Pi4uLjxub3V2ZWF1LXNvbW1ldD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjEwCittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPGJhc2U+IDxvbGQtdGlwPiA8bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8YW5jaWVuLXNvbW1ldD4gPG5vdXZlYXUtc29tbWV0PiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjIKK21zZ2lkICJQZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICJQb3VyY2VudGFnZSBwYXIgbGVxdWVsIGxhIGNyw6lhdGlvbiBlc3QgcG9uZMOpcsOpZSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjQKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgY291bGV1cnMgZGUgZGlmZiBzaW1wbGVzIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorbXNnaWQgIm5vdGVzIgorbXNnc3RyICJub3RlcyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBsb2cnIgorbXNnc3RyICJwYXNzw6kgw6AgJ2dpdCBsb2cnIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo1MCBidWlsdGluL3JhbmdlLWRpZmYuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyAuLiBpbiByYW5nZTogJyVzJyIKK21zZ3N0ciAicGFzIGRlIC4uIGRhbnMgbGEgcGxhZ2XCoDogJyVzJyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAidW4gZm9ybWF0IGQnYXJndW1lbnQgdW5pcXVlIGRvaXQgw6p0cmUgdW5lIHBsYWdlIHN5bcOpdHJpcXVlIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgInBsYWdlIGVudHJlIGRldXggY29tbWl0cyByZXF1aXNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjQxCittc2dpZCAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiCittc2dzdHIgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS0iCisicHJlZml4PTxwcsOpZml4ZT4pIFstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby0iCisic3BhcnNlLWNoZWNrb3V0XSBbLS1pbmRleC1vdXRwdXQ9PGZpY2hpZXI+XSAoLS1lbXB0eSB8IDxhcmJyZSBvdSBhcHBhcmVudMOpICIKKyIxPiBbPGFyYnJlIG91IGFwcGFyZW50w6kgMj4gWzxhcmJyZSBvdSBhcHBhcmVudMOpIDM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgIsOpY3JpcmUgbCdpbmRleCByw6lzdWx0YW50IGRhbnMgPGZpY2hpZXI+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJqdXN0ZSB2aWRlciBsJ2luZGV4IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIkZ1c2lvbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICJlZmZlY3R1ZXIgdW5lIGZ1c2lvbiBlbiBwbHVzIGQndW5lIGxlY3R1cmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICJmdXNpb24gw6AgMyBwb2ludHMgc2kgYXVjdW5lIGZ1c2lvbiBkZSBuaXZlYXUgZmljaGllciBuJ2VzdCByZXF1aXNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgImZ1c2lvbiDDoCAzIHBvaW50cyBlbiBwcsOpc2VuY2UgZCdham91dHMgZXQgc3VwcHJlc3Npb25zIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImNvbW1lIC1tLCBtYWlzIGFubnVsZSBsZXMgw6lsw6ltZW50cyBub24gZnVzaW9ubsOpcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjxzb3VzLXLDqXBlcnRvaXJlPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgImxpcmUgbCdhcmJyZSBkYW5zIGwnaW5kZXggZGFucyA8c291cy1yw6lwZXJ0b2lyZT4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0MgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIGxhIGNvcGllIGRlIHRyYXZhaWwgYXZlYyBsZSByw6lzdWx0YXQgZGUgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAiYXV0b3Jpc2VyIGV4cGxpY2l0ZW1lbnQgbGVzIGZpY2hpZXJzIGlnbm9yw6lzIMOgIMOqdHJlIMOpY3Jhc8OpcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDgKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgIm5lIHBhcyB2w6lyaWZpZXIgbGEgY29waWUgZGUgdHJhdmFpbCBhcHLDqHMgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAibmUgcGFzIG1ldHRyZSDDoCBqb3VyIGwnaW5kZXggb3UgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgInNhdXRlciBsJ2FwcGxpY2F0aW9uIGR1IGZpbHRyZSBkJ2V4dHJhY3Rpb24gY3JldXNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiZMOpYm9ndWVyIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTcKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAic3VwcHJpbWVyIGxlcyBtZXNzYWdlcyBkJ2luZm9ybWF0aW9uIGRlIHN1aXZpIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE4OAorbXNnaWQgIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJWb3VzIGRldmV6IGQnYWJvcmQgcsOpc291ZHJlIHZvdHJlIGluZGV4IGNvdXJhbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPiB8IC0ta2VlcC1iYXNlXSAiCisiWzx1cHN0cmVhbT4gWzxicmFuY2g+XV0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5vdXZlbGxlLWJhc2U+IHwgLS1rZWVwLSIKKyJiYXNlXSBbPGFtb250PiBbPGJyYW5jaGU+XV0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5vdXZlbGxlLWJhc2U+XSAtLXJvb3QgIgorIls8YnJhbmNoZT5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6MjAxIGJ1aWx0aW4vcmViYXNlLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAibGlzdGUgw6AgZmFpcmUgaW51dGlsaXNhYmxlwqA6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2IGJ1aWx0aW4vcmViYXNlLmM6MjEyIGJ1aWx0aW4vcmViYXNlLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjcxCittc2dpZCAibm8gSEVBRD8iCittc2dzdHIgInBhcyBkZSBIRUFEwqA/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gZmljaGllciB0ZW1wb3JhaXJlICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMwNAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1hcnF1ZXIgY29tbWUgaW50ZXJhY3RpZiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNjIKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGfDqW7DqXJlciBsYSBsaXN0ZSDDoC1mYWlyZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0MDIKK21zZ2lkICJhIGJhc2UgY29tbWl0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCAtLXVwc3RyZWFtIG9yIC0tb250byIKK21zZ3N0ciAidW4gY29tbWl0IGRlIGJhc2UgZG9pdCDDqnRyZSBmb3VybmkgYXZlYyAtLXVwc3RyZWFtIG91IC0tb250byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NTcKK21zZ2lkICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDY5Cittc2dpZCAia2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJnYXJkZXIgbGVzIHZhbGlkYXRpb25zIHZpZGVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiYXV0b3Jpc2VyIGxlcyB2YWxpZGF0aW9ucyBhdmVjIGRlcyBtZXNzYWdlcyB2aWRlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzIKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAicmViYXNlciBsZXMgY29tbWl0cyBkZSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc0Cittc2dpZCAia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiCittc2dzdHIgImNvbnNlcnZlciBsZXMgcG9pbnRzIGRlIGJyYW5jaGVtZW50IGRlIGNvdXNpbnMgb3JpZ2luYXV4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NgorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgImTDqXBsYWNlciBsZXMgY29tbWl0cyBxdWkgY29tbWVuY2VudCBwYXIgc3F1YXNoIS9maXh1cCEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc3Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICJzaWduZXIgbGVzIGNvbW1pdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc5IGJ1aWx0aW4vcmViYXNlLmM6MTQ1NQorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgImFmZmljaGVyIHVuIGRpZmZzdGF0IGRlIGNlIHF1aSBhIGNoYW5nw6kgZW4gYW1vbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgxCittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICJjb250aW51ZXIgbGUgcmViYXNhZ2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgzCittc2dpZCAic2tpcCBjb21taXQiCittc2dzdHIgInNhdXRlciBsZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg0Cittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLDqWRpdGVyIGxhIGxpc3RlIMOgLWZhaXJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NgorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImFmZmljaGVyIGxlIHBhdGNoIGNvdXJhbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg5Cittc2dpZCAic2hvcnRlbiBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgInJhY2NvdXJjaXIgbGVzIGlkZW50aWZpYW50cyBkZSBjb21taXRzIGRhbnMgbGEgbGlzdGUgw6AtZmFpcmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkxCittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiw6l0ZW5kcmUgbGVzIGlkZW50aWZpYW50cyBkZSBjb21taXQgZGFucyBsYSBsaXN0ZSDDoC1mYWlyZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTMKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJ2w6lyaWZpZXIgbGEgbGlzdGUgw6AtZmFpcmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk1Cittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAicsOpYXJyYW5nZXIgbGVzIGxpZ25lcyBmaXh1cC9zcXVhc2giCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICJpbnPDqXJlciBsZXMgY29tbWFuZGVzIGV4ZWMgZGFucyBsYSBsaXN0ZSDDoC1mYWlyZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTgKK21zZ2lkICJvbnRvIgorbXNnc3RyICJzdXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgInJlc3RyaWN0LXJldmlzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorbXNnaWQgInJlc3RyaWN0IHJldmlzaW9uIgorbXNnc3RyICJyZXN0cmVpbmRyZSBsYSByw6l2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAzCittc2dpZCAic3F1YXNoLW9udG8iCittc2dzdHIgIsOpY3Jhc2VyLXN1ciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDQKK21zZ2lkICJzcXVhc2ggb250byIKK21zZ3N0ciAiw6ljcmFzZXIgc3VyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgImxlIGNvbW1pdCBhbW9udCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgIm5vbSBkdSBoZWFkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwOAorbXNnaWQgImhlYWQgbmFtZSIKK21zZ3N0ciAibm9tIGR1IGhlYWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEzCittc2dpZCAicmViYXNlIHN0cmF0ZWd5IgorbXNnc3RyICJzdHJhdMOpZ2llIGRlIHJlYmFzYWdlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgIm9wdGlvbnMgZGUgc3RyYXTDqWdpZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTUKK21zZ2lkICJzdHJhdGVneSBvcHRpb25zIgorbXNnc3RyICJvcHRpb25zIGRlIHN0cmF0w6lnaWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAic3dpdGNoLXRvIgorbXNnc3RyICJzd2l0Y2gtdG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE3Cittc2dpZCAidGhlIGJyYW5jaCBvciBjb21taXQgdG8gY2hlY2tvdXQiCittc2dzdHIgImxhIGJyYW5jaGUgb3UgbGUgY29tbWl0IMOgIGV4dHJhaXJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAic3VyLWxlLW5vbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTgKK21zZ2lkICJvbnRvIG5hbWUiCittc2dzdHIgInN1ciBsZSBub20iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAiY21kIgorbXNnc3RyICJjbWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICJsYSBjb21tYW5kZSDDoCBsYW5jZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyIGJ1aWx0aW4vcmViYXNlLmM6MTU0MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICJyZS1wbGFuaWZpZXIgYXV0b21hdGlxdWVtZW50IHRvdXQgYGV4ZWNgIHF1aSDDqWNob3VlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0MAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICItLVtuby1dcmViYXNlLWNvdXNpbnMgbidhIGF1Y3VuIGVmZmV0IHNhbnMgLS1yZWJhc2UtbWVyZ2VzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIiVzIHJlcXVpZXJ0IHVuIHJlYmFzYWdlIGludGVyYWN0aWYiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgJ29udG8nOiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWNjw6lkZXIgJ29udG8nIDogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciCittc2dzdHIgIm9yaWctaGVhZCBpbnZhbGlkZcKgOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBpbnZhbGlkIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorbXNnc3RyICJhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSBpbnZhbGlkZSBpZ25vcsOpwqA6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3RvY2tlciAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NDkKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpdGVybWluZXIgbGEgcsOpdmlzaW9uIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MQorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorbXNnc3RyICIiCisiUsOpc29sdmV6IHRvdXMgbGVzIGNvbmZsaXRzIG1hbnVlbGxlbWVudCwgbWFycXVlei1sZXMgY29tbWUgcsOpc29sdXMgYXZlY1xuIgorIlwiZ2l0IGFkZC9ybSA8ZmljaGllciBlbiBjb25mbGl0PlwiLCBwdWlzIGxhbmNleiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIlNpIHZvdXMgcHLDqWbDqXJleiBzYXV0ZXIgY2UgY29tbWl0LCBsYW5jZXogXCJnaXQgcmViYXNlIC0tc2tpcFwiLiBQb3VyICIKKyJhcnLDqnRlclxuIgorImV0IHJldmVuaXIgw6AgbCfDqXRhdCBhbnTDqXJpZXVyIMOgIGxhIGNvbW1hbmRlLCBsYW5jZXogXCJnaXQgcmViYXNlIC0tYWJvcnRcIi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisiXG4iCisiZ2l0IGEgcmVuY29udHLDqSB1bmUgZXJyZXVyIGxvcnMgZGUgbGEgcHLDqXBhcmF0aW9uIGRlcyBjb3JyZWN0aWZzXG4iCisicG91ciByZWpvdWVyIGNlcyByw6l2aXNpb25zwqA6IFxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIlLDqXN1bHRhdCwgZ2l0IG5lIHBldXQgcGFzIGxlcyByZWJhc2VyLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlc1xuIgorIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKyJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCittc2dzdHIgIiIKKyIlc1xuIgorIlZldWlsbGV6IHNww6ljaWZpZXIgc3VyIHF1ZWxsZSBicmFuY2hlIHZvdXMgc291aGFpdGVyIHJlYmFzZXIuXG4iCisiVm9pciBnaXQtcmViYXNlKDEpIHBvdXIgcGx1cyBkZSBkw6l0YWlscy5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaGU+J1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTaSB2b3VzIHNvdWhhaXRleiBpbmRpcXVlciBsJ2luZm9ybWF0aW9uIGRlIHN1aXZpIGRpc3RhbnQgcG91ciBjZXR0ZSAiCisiYnJhbmNoZSwgdm91cyBwb3V2ZXogbGUgZmFpcmUgYXZlY8KgOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2hlPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTMKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJsZXMgY29tbWFuZGVzIGV4ZWMgbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgcmV0b3VyIMOgIGxhIGxpZ25lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgImNvbW1hbmRlIGV4ZWMgdmlkZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ2Cittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgInJlYmFzZXIgc3VyIGxhIGJyYW5jaGUgJXMgYXUgbGlldSBkZSBsYSBicmFuY2hlIGFtb250IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDgKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICIiCisidXRpbGlzZXIgbGEgYmFzZSBkZSBmdXNpb24gZGUgbCdhbW9udCBldCBsYSBicmFuY2hlIGNvbW1lIGJhc2UgYWN0dWVsbGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MAorbXNnaWQgImFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4iCittc2dzdHIgInBlcm1ldHRyZSBsZSBsYW5jZW1lbnQgZHUgY3JvY2hldCBwcmUtcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTIKK21zZ2lkICJiZSBxdWlldC4gaW1wbGllcyAtLW5vLXN0YXQiCittc2dzdHIgIsOqdHJlIHNpbGVuY2lldXguIGltcGxpcXVlIC0tbm8tc3RhdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDU4Cittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICJuZSBwYXMgYWZmaWNoZXIgdW4gZGlmZnN0YXQgZGUgY2UgcXVpIGEgY2hhbmfDqSBlbiBhbW9udCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDYxCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiYWpvdXRlciB1bmUgbGlnbmUgU2lnbmVkLW9mZi1ieSDDoCBjaGFxdWUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjQKK21zZ2lkICJtYWtlIGNvbW1pdHRlciBkYXRlIG1hdGNoIGF1dGhvciBkYXRlIgorbXNnc3RyICJhbGlnbmVyIGxhIGRhdGUgZGUgdmFsaWRhdGV1ciBzdXIgbGEgZGF0ZSBkJ2F1dGV1ciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY2Cittc2dpZCAiaWdub3JlIGF1dGhvciBkYXRlIGFuZCB1c2UgY3VycmVudCBkYXRlIgorbXNnc3RyICJpZ25vcmVyIGxhIGRhdGUgZCdhdXRldXIgZXQgdXRpbGlzZXIgbGEgZGF0ZSBhY3R1ZWxsZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY4Cittc2dpZCAic3lub255bSBvZiAtLXJlc2V0LWF1dGhvci1kYXRlIgorbXNnc3RyICJzeW5vbnltZSBwb3VyIC0tcmVzZXQtYXV0aG9yLWRhdGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhcHBseSciCittc2dzdHIgInBhc3PDqSBqdXNxdSfDoCBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UiCittc2dzdHIgImlnbm9yZXIgZGVzIG1vZGlmaWNhdGlvbnMgZCdlc3BhY2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3NiBidWlsdGluL3JlYmFzZS5jOjE0NzkKK21zZ2lkICJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiCittc2dzdHIgInBpY29yZXIgdG91cyBsZXMgY29tbWl0cywgbcOqbWUgc2FucyBtb2RpZmlhbnQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICJjb250aW51ZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NAorbXNnaWQgInNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUiCittc2dzdHIgInNhdXRlciBsZSBwYXRjaCBjb3VyYW50IGV0IGNvbnRpbnVlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg2Cittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJhYmFuZG9ubmVyIGV0IGV4dHJhaXJlIGxhIGJyYW5jaGUgZCdvcmlnaW5lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODkKK21zZ2lkICJhYm9ydCBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzIgorbXNnc3RyICJhYmFuZG9ubmUgbWFpcyBnYXJkZSBIRUFEIG/DuSBpbCBlc3QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICLDqWRpdGVyIGxhIGxpc3RlIMOgIGZhaXJlIGxvcnMgZCd1biByZWJhc2FnZSBpbnRlcmFjdGlmIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTMKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICJhZmZpY2hlciBsZSBwYXRjaCBlbiBjb3VycyBkJ2FwcGxpY2F0aW9uIG91IGRlIGZ1c2lvbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk2Cittc2dpZCAidXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgInV0aWxpc2VyIGRlcyBzdHJhdMOpZ2llcyBkZSBmdXNpb24gcG91ciByZWJhc2VyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDAKK21zZ2lkICJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIKK21zZ3N0ciAibGFpc3NlciBsJ3V0aWxpc2F0ZXVyIMOpZGl0ZXIgbGEgbGlzdGUgZGVzIGNvbW1pdHMgw6AgcmViYXNlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIoRMOJQ09OU0VJTEzDiSkgZXNzYXllciBkZSByZWNyw6llciBsZXMgZnVzaW9ucyBhdSBsaWV1IGRlIGxlcyBpZ25vcmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDkKK21zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCittc2dzdHIgInByw6lzZXJ2ZXIgbGVzIHZhbGlkYXRpb25zIHZpZGVzIHBlbmRhbnQgbGUgcmViYXNhZ2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMQorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkiCittc2dzdHIgImTDqXBsYWNlIGxlcyBjb21taXRzIHF1aSBjb21tZW5jZW50IHBhciBzcXVhc2ghL2ZpeHVwISBzb3VzIC1pIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTcKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICJyZW1pc2VyIGV0IHLDqWFwcGxpcXVlciBhdXRvbWF0aXF1ZW1lbnQgYXZhbnQgZXQgYXByw6hzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTkKK21zZ2lkICJhZGQgZXhlYyBsaW5lcyBhZnRlciBlYWNoIGNvbW1pdCBvZiB0aGUgZWRpdGFibGUgbGlzdCIKK21zZ3N0ciAiYWpvdXRlciBsZXMgbGlnbmVzIGV4ZWMgYXByw6hzIGNoYXF1ZSBjb21taXQgZGUgbGEgbGlzdGUgw6lkaXRhYmxlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImF1dG9yaXNlciBsZXMgY29tbWl0cyBkZSByZWJhc2FnZSBhdmVjIGRlcyBtZXNzYWdlcyB2aWRlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI2Cittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICJlc3NheWVyIGRlIHJlYmFzZXIgbGVzIGZ1c2lvbnMgYXUgbGlldSBkZSBsZXMgZ2FyZGVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjkKK21zZ2lkICJ1c2UgJ21lcmdlLWJhc2UgLS1mb3JrLXBvaW50JyB0byByZWZpbmUgdXBzdHJlYW0iCittc2dzdHIgInV0aWxpc2VyICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgcG91ciByYWZmaW5lciBsJ2Ftb250IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzEKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJ1dGlsaXNlciBsYSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiBpbmRpcXXDqWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAib3B0aW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAicGFzc2VyIGxlcyBhcmd1bWVudHMganVzcXUnw6AgbGEgc3RyYXTDqWdpZSBkZSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNworbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgInJlYmFzZXIgdG91cyBsZXMgb2JqZXRzIGluYXR0ZWlnbmFibGVzIGRlcHVpcyBsZXMgcmFjaW5lcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTU0Cittc2dpZCAiIgorInRoZSByZWJhc2UudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQhXG4iCisiU2VlIGl0cyBlbnRyeSBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJsZXMgc3VwcG9ydCBkZSByZWJhc2UudXNlQnVpbHRpbiBhIMOpdMOpIHN1cHByaW3DqSAhXG4iCisiVm9pciBzb24gZW50csOpZSBkYW5zICdnaXQgaGVscCBjb25maWcnIHBvdXIgcGx1cyBkZSBkw6l0YWlscy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICJJbCBzZW1ibGUgcXVlICdnaXQtYW0nIHNvaXQgZW4gY291cnMuIEltcG9zc2libGUgZGUgcmViYXNlci4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwMQorbXNnaWQgIiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGlzIGRlcHJlY2F0ZWQuIFVzZSAtLXJlYmFzZS1tZXJnZXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGVzdCBkw6ljb25zZWlsbMOpLiBVdGlsaXNleiAtLXJlYmFzZS1tZXJnZXMgw6AgbGEgIgorInBsYWNlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA2Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLW9udG8nIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvbWJpbmVyICctLWtlZXAtYmFzZScgYXZlYyAnLS1vbnRvJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjA4Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0ta2VlcC1iYXNlJyB3aXRoICctLXJvb3QnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvbWJpbmVyICctLWtlZXAtYmFzZScgYXZlYyAnLS1yb290JyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiUGFzIGRlIHJlYmFzYWdlIGVuIGNvdXJzID8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYxNgorbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiIgorIkwnYWN0aW9uIC0tZWRpdC10b2RvIHBldXQgc2V1bGVtZW50IMOqdHJlIHV0aWxpc8OpZSBsb3JzIGQndW4gcmViYXNhZ2UgIgorImludGVyYWN0aWYuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MzkKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjUxCittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisiVm91cyBkZXZleiDDqWRpdGVyIHRvdXMgbGVzIGNvbmZsaXRzIGRlIGZ1c2lvbiBldFxuIgorImxlcyBtYXJxdWVyIGNvbW1lIHLDqXNvbHVzIGF2ZWMgZ2l0IGFkZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjcwCittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGVzIGNoYW5nZW1lbnRzIGRlIGwnYXJicmUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgcmV2ZW5pciDDoCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyJJbCBzZW1ibGUgcXUnaWwgeSBhaXQgZMOpasOgIHVuIHLDqXBlcnRvaXJlICVzLCBldCBqZSBtZSBkZW1hbmRlXG4iCisic2kgdW4gYXV0cmUgcmViYXNhZ2Ugbidlc3QgcGFzIGTDqWrDoCBlbiBjb3Vycy4gU2kgYydlc3QgbGUgY2FzLFxuIgorImVzc2F5ZXpcbiIKKyJcdCVzXG4iCisiU2lub24sIGVzc2F5ZXpcbiIKKyJcdCVzXG4iCisicHVpcyByZWxhbmNlei1tb2kgw6Agbm91dmVhdS4gIEplIG0nYXJyw6p0ZSBhdSBjYXMgb8O5IHZvdXMgYXVyaWV6IHF1ZWxxdWUgIgorImNob3NlXG4iCisiZCdpbXBvcnRhbnQgaWNpLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NTcKK21zZ2lkICJzd2l0Y2ggYEMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImwnb3B0aW9uIGBDJyBhdHRlbmQgdW4gdmFsZXVyIG51bcOpcmlxdWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICJtb2RlIGluY29ubnXCoDogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTgyMAorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXN0cmF0ZWd5IHJlcXVpZXJ0IC0tbWVyZ2Ugb3UgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODYwCittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmVxdWllcnQgLS1leGVjIG91IC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg3MgorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFtIG9wdGlvbnMgd2l0aCBlaXRoZXIgaW50ZXJhY3RpdmUgb3IgbWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgY29tYmluZXIgbGVzIG9wdGlvbnMgYW0gYXZlYyBsJ29wdGlvbnMgaW50ZXJhY3RpdmUgb3UgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5MQorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21iaW5lciAnLS1wcmVzZXJ2ZS1tZXJnZXMnIGF2ZWMgJy0tcmViYXNlLW1lcmdlcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5NQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisiZXJyZXVywqA6IGltcG9zc2libGUgZGUgY29tYmluZXIgJy0tcHJlc2VydmUtbWVyZ2VzJyBhdmVjICctLXJlc2NoZWR1bGUtIgorImZhaWxlZC1leGVjJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJyVzJyIKK21zZ3N0ciAiYW1vbnQgaW52YWxpZGUgJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTI1Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIkltcG9zc2libGUgZGUgY3LDqWVyIHVuIG5vdXZlYXUgY29tbWl0IHJhY2luZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiJyVzJzogZXhhY3RlbWVudCB1bmUgYmFzZSBkZSBmdXNpb24gbsOpY2Vzc2FpcmUgYXZlYyB1bmUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJyVzJzogZXhhY3RlbWVudCB1bmUgYmFzZSBkZSBmdXNpb24gbsOpY2Vzc2FpcmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICJuZSBwb2ludGUgcGFzIHN1ciB1bmUgdmFsaWRhdGlvbiB2YWxpZGUgOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICJmYXRhbCA6IHBhcyBkZSBicmFuY2hlIG91IGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIlLDqWbDqXJlbmNlIGluZXhpc3RhbnRlwqA6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMDYKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHRvIGEgcmV2aXNpb24iCittc2dzdHIgIkltcG9zc2libGUgZGUgcsOpc291ZHJlIGxlIGNvbW1pdCBIRUFEIHZlcnMgdW4gcsOpdmlzaW9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNDQKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJBdXRvcmVtaXNhZ2UgaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgInLDqXBvbnNlIGRlIHJlbWlzYWdlIGluYXR0ZW5kdWXCoDogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNyw6llciBsZSByw6lwZXJ0b2lyZSBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJXNcbiIKK21zZ3N0ciAiQXV0b3JlbWlzYWdlIGNyw6nDqSA6ICVzXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1OQorbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpaW5pdGlhbGlzZXIgLS1oYXJkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNjgKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJWZXVpbGxleiBsZXMgdmFsaWRlciBvdSBsZXMgcmVtaXNlci4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGJhc2N1bGVyIHZlcnMgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQgZXN0IMOgIGpvdXIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAiTGEgYnJhbmNoZSBjb3VyYW50ZSAlcyBlc3Qgw6Agam91ci5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI5Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiSEVBRCBlc3Qgw6Agam91ciwgcmViYXNhZ2UgZm9yY8OpLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIkxhIGJyYW5jaGUgY291cmFudGUgJXMgZXN0IMOgIGpvdXIsIHJlYmFzYWdlIGZvcmPDqS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIkxlIGNyb2NoZXQgcHJlLXJlYmFzZSBhIHJlZnVzw6kgZGUgcmViYXNlci4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIHRvICVzOlxuIgorbXNnc3RyICJDaGFuZ2VtZW50cyB2ZXJzICVzIDpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAiQ2hhbmdlbWVudHMgZGUgJXMgc3VyICVzIDpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLlxuIgorbXNnc3RyICIiCisiUmVtYm9iaW5hZ2UgcHLDqWFsYWJsZSBkZSBoZWFkIHBvdXIgcG91dm9pciByZWpvdWVyIHZvdHJlIHRyYXZhaWwgcGFyLSIKKyJkZXNzdXMuLi5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgzCittc2dpZCAiQ291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqXRhY2hlciBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJXMgdG8gJXMuXG4iCittc2dzdHIgIkF2YW5jZSByYXBpZGUgZGUgJXMgc3VyICVzLlxuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjMyCittc2dpZCAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCittc2dzdHIgImdpdCByZWNlaXZlLXBhY2sgPHLDqXBlcnRvaXJlLWdpdD4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODMwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisiUGFyIGTDqWZhdXQsIG1ldHRyZSDDoCBqb3VyIGxhIGJyYW5jaGUgYWN0dWVsbGUgZGFucyB1biBkw6lww7R0IG5vbi1udVxuIgorImVzdCByw6lmdXPDqSBwYXJjZSBxdWUgY2VsYSByZW5kcmFpdCBsJ2luZGV4IGV0IGxhIGNvcGllIGRlIHRyYXZhaWxcbiIKKyJpbmNvbnNpc3RhbnRzIGF2ZWMgY2UgcXVlIHZvdXMgYXZleiBwb3Vzc8OpIGV0IG7DqWNlc3NpdGVyYWl0XG4iCisiJ2dpdCByZXNldCAtLWhhcmQnIHBvdXIgcsOpYWxpZ25lciBsYSBjb3BpZSBkZSB0cmF2YWlsIGF2ZWMgSEVBRC5cbiIKKyJcbiIKKyJWb3VzIHBvdXZleiByw6lnbGVyIMKrwqByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNowqDCuyDDoCAnaWdub3JlJyBvdVxuIgorIid3YXJuJyBkYW5zIGxlIGTDqXDDtHQgZGlzdGFudCBwb3VyIHBlcm1ldHRyZSBsYSBwb3Vzc8OpZSBkYW5zIGxhXG4iCisiYnJhbmNoZSBhY3R1ZWxsZcKgOyBjZXBlbmRhbnQsIGNlIG4nZXN0IHBhcyByZWNvbW1hbmTDqSDDoCBtb2lucyBxdWVcbiIKKyJ2b3VzIGF5ZXogZMOpasOgIG1pcyDDoCBqb3VyIHNhIGNvcGllIGRlIHRyYXZhaWwgcGFyIHVuZSBtb3llbiBkw6l0b3VybsOpXG4iCisicG91ciBjb3JyZXNwb25kcmUgw6AgY2UgcXVlIHZvdXMgYXZleiBwb3Vzc8OpLlxuIgorIlxuIgorIlBvdXIgw6lsaW1pbmVyIGNlIG1lc3NhZ2UgZXQgY29uc2VydmVyIGxlIGNvbXBvcnRlbWVudCBwYXIgZMOpZmF1dCxcbiIKKyJyw6lnbGV6IMKrwqByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNowqDCuyDDoCAncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODUwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJQYXIgZMOpZmF1dCwgc3VwcHJpbWVyIGxhIGJyYW5jaGUgYWN0dWVsbGUgZXN0IHJlZnVzw6kgcGFyY2UgcXVlIGxlXG4iCisicHJvY2hhaW4gJ2dpdCBjbG9uZScgbidleHRyYWlyYSBhdWN1biBmaWNoaWVyIGV0IGNhdXNlciBkZSBsYSBjb25mdXNpb24uXG4iCisiXG4iCisiVm91cyBwb3V2ZXogcsOpZ2xlciDCq8KgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudMKgwrsgw6AgJ3dhcm4nIG91ICdpZ25vcmUnXG4iCisiZGFucyBsZSBkw6lww7R0IGRpc3RhbnQgcG91ciBwZXJtZXR0cmUgbGEgc3VwcHJlc3Npb24gbGEgYnJhbmNoZSBhY3R1ZWxsZVxuIgorImF2ZWMgb3Ugc2FucyBtZXNzYWdlIGQnYXZlcnRpc3NlbWVudC5cbiIKKyJcbiIKKyJQb3VyIMOpbGltaW5lciBjZSBtZXNzYWdlLCByw6lnbGV6LWxlIMOgICdyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTM2Cittc2dpZCAicXVpZXQiCittc2dzdHIgInF1aWV0IgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiVm91cyBkZXZleiBzcMOpY2lmaWVyIHVuIHLDqXBlcnRvaXJlLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTxkYXRlPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTxkYXRlPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyw6lmZXJlbmNlcz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyw6lmw6lyZW5jZXM+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgImdpdCByZWZsb2cgZXhpc3RzIDxyw6lmw6lyZW5jZT4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTY3IGJ1aWx0aW4vcmVmbG9nLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBob3JvZGF0YWdlIHZhbGlkZSIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIKK21zZ3N0ciAiTWFycXVhZ2UgZGVzIG9iamV0cyBpbmFjY2Vzc2libGVzLi4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgbm93aGVyZSEiCittc2dzdHIgIiVzIG5lIHBvaW50ZSBudWxsZSBwYXJ0wqAhIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NQorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICJwYXMgZGUgam91cm5hbCBkZSByw6lmw6lyZW5jZXMgw6Agc3VwcHJpbWVyIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJlZmxvZzogJXMiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIGpvdXJuYWwgZGUgcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZWZsb2cgZm9yICclcyciCittc2dzdHIgInBhcyBkZSBqb3VybmFsIGRlIHLDqWbDqXJlbmNlcyBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdCBkZSByw6lmw6lyZW5jZSBpbnZhbGlkZcKgOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoZT5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5vbT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTggYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8YW5jaWVubmU+IDxub3V2ZWxsZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzo0MworbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAgYnVpbHRpbi9yZW1vdGUuYzo0OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5vbT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2hlPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMgorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwZT4gfCAiCisiPGRpc3RhbnRlPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5vbT4gPGJyYW5jaGU+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1IGJ1aWx0aW4vcmVtb3RlLmM6NzQKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI2IGJ1aWx0aW4vcmVtb3RlLmM6NzkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bm9tPiA8bm91dmVsbGUtVVJMPiBbPGFuY2llbm5lLVVSTD5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5vbT4gPG5vdXZlbGxlLVVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bm9tPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5vbT4gPFVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxub20+IDxicmFuY2hlPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5vbT4gPGJyYW5jaGU+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjkKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cGU+IHwgPGRpc3RhbnRlPl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIk1pc2Ugw6Agam91ciBkZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3IgZXN0IGRhbmdlcmV1eCBldCBvYnNvbMOodGUgOyBtZXJjaVxuIgorIlx0IGQndXRpbGlzZXIgLS1taXJyb3I9ZmV0Y2ggb3UgLS1taXJyb3I9cHVzaCDDoCBsYSBwbGFjZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudCBtaXJvaXIgaW5jb25udSA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgInJhcGF0cmllciBsZXMgYnJhbmNoZXMgZGlzdGFudGVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgIiIKKyJpbXBvcnRlciB0b3V0ZXMgbGVzIMOpdGlxdWV0dGVzIGV0IGxlcyBvYmpldHMgYXNzb2Npw6lzIGxvcnMgZHUgcmFwYXRyaWVtZW50IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAib3UgbmUgcmFwYXRyaWVyIGF1Y3VuZSDDqXRpcXVldHRlICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgImJyYW5jaGUocykgw6Agc3VpdnJlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgImJyYW5jaGUgbWHDrnRyZXNzZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzMKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAiIgorInBhcmFtw6l0cmVyIGxhIGRpc3RhbnRlIGNvbW1lIG1pcm9pciBwb3VyIHBvdXNzZXIgb3UgcG91ciByYXBhdHJpZXIgZGVwdWlzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgInNww6ljaWZpZXIgdW5lIGJyYW5jaGUgbWHDrnRyZXNzZSBuJ2EgcGFzIGRlIHNlbnMgYXZlYyAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisic3DDqWNpZmllciBsZXMgYnJhbmNoZXMgw6Agc3VpdnJlIG4nYSBkZSBzZW5zIHF1J2F2ZWMgZGVzIG1pcm9pcnMgZGUgIgorInJhcGF0cmllbWVudCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTQgYnVpbHRpbi9yZW1vdGUuYzo2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAibGEgZGlzdGFudGUgJXMgZXhpc3RlIGTDqWrDoC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk4IGJ1aWx0aW4vcmVtb3RlLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIG5vbSB2YWxpZGUgZGUgZGlzdGFudGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBwYXJhbcOpdHJlciBsYSBtYcOudHJlc3NlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ29idGVuaXIgdW5lIGNvcnJlc3BvbmRhbmNlIGRpc3RhbnRlIHBvdXIgbGEgc3DDqWNpZmljYXRpb24gZGUgIgorInLDqWbDqXJlbmNlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MyBidWlsdGluL3JlbW90ZS5jOjQ1MQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihjb3JyZXNwb25kKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTUKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKHN1cHByaW1lcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjI5IGJ1aWx0aW4vcmVtb3RlLmM6NzY0IGJ1aWx0aW4vcmVtb3RlLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICJQYXMgZGUgc2VydmV1ciByZW1vdGXCoDogJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgcmVub21tZXIgbGEgc2VjdGlvbiBkZSBjb25maWd1cmF0aW9uICclcycgZW4gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiUGFzIGRlIG1pc2Ugw6Agam91ciBkdSByZWZzcGVjIGRlIHJhcGF0cmllbWVudCBxdWkgbidlc3QgcGFzIHBhciBkw6lmYXV0XG4iCisiXHQlc1xuIgorIlx0VmV1aWxsZXogbWV0dHJlIMOgIGpvdXIgbGEgY29uZmlndXJhdGlvbiBtYW51ZWxsZW1lbnQgc2kgbsOpY2Vzc2FpcmUuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIHN1cHByZXNzaW9uIGRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgY3LDqWF0aW9uIGRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODAxCittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJOb3RlIDogVW5lIGJyYW5jaGUgZW4gZGVob3JzIGRlIHJlZnMvcmVtb3Rlcy8gbidhIHBhcyDDqXTDqSBzdXBwcmltw6llIDtcbiIKKyJwb3VyIGxhIHN1cHByaW1lciwgdXRpbGlzZXogOiIKK21zZ3N0clsxXSAiIgorIk5vdGUgOiBQbHVzaWV1cnMgYnJhbmNoZXMgZW4gZGVob3JzIGRlIHJlZnMvcmVtb3Rlcy8gbidvbnQgcGFzIMOpdMOpICIKKyJzdXBwcmltw6llcyA7XG4iCisicG91ciBsZXMgc3VwcHJpbWVyLCB1dGlsaXNleiA6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIHNlY3Rpb24gZGUgY29uZmlndXJhdGlvbiAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBub3V2ZWF1IChsZSBwcm9jaGFpbiByYXBhdHJpZW1lbnQgKGZldGNoKSBzdG9ja2VyYSBkYW5zIHJlbW90ZXMvJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxOQorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIgc3VpdmkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBkw6lwYXNzw6kgKHV0aWxpc2V6ICdnaXQgcmVtb3RlIHBydW5lJyBwb3VyIHN1cHByaW1lcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIzCittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJicmFuY2guJXMubWVyZ2UgaW52YWxpZGUgOyBuZSBwZXV0IHBhcyByZWJhc2VyIHN1ciBwbHVzIGQndW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNlIGRlIG1hbmnDqHJlIGludGVyYWN0aXZlIHN1ciBsYSBkaXN0YW50ZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgInJlYmFzZSBkZSBtYW5pw6hyZSBpbnRlcmFjdGl2ZSAoYXZlYyBmdXNpb25zKSBzdXIgbGEgZGlzdGFudGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgInJlYmFzZSBzdXIgbGEgZGlzdGFudGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBmdXNpb25uZSBhdmVjIGxhIGRpc3RhbnRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgImZ1c2lvbm5lIGF2ZWMgbGEgZGlzdGFudGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAgZXQgYXZlYyBsYSBkaXN0YW50ZSAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgImNyw6llciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJzdXBwcmltZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzOAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIsOgIGpvdXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MQorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgInBldXQgw6p0cmUgbWlzIMOgIGpvdXIgZW4gYXZhbmNlIHJhcGlkZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQ0Cittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxlIGxvY2FsIG4nZXN0IHBhcyDDoCBqb3VyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgZm9yY2UgdmVycyAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBwb3Vzc2UgdmVycyAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIGZvcmNlIHZlcnMgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHBvdXNzZSB2ZXJzICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjkKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAibmUgcGFzIGludGVycm9nZXIgbGVzIGRpc3RhbnRlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIGRpc3RhbnRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCBkZSByYXBhdHJpZW1lbnQgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU4IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NCBidWlsdGluL3JlbW90ZS5jOjEzMTMKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKHBhcyBkJ1VSTCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MiBidWlsdGluL3JlbW90ZS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCBwdXNoIDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NiBidWlsdGluL3JlbW90ZS5jOjExNzggYnVpbHRpbi9yZW1vdGUuYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIEJyYW5jaGUgSEVBRCA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIobm9uIGRlbWFuZMOpKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICIoaW5jb25udSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisiICBCcmFuY2hlIEhFQUQgKGxhIEhFQUQgZGlzdGFudGUgZXN0IGFtYmlndcOrLCBwZXV0IMOqdHJlIGwndW5lIGRlcyAiCisic3VpdmFudGVzKSA6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIEJyYW5jaGUgZGlzdGFudGUgOiVzIgorbXNnc3RyWzFdICIgIEJyYW5jaGVzIGRpc3RhbnRlcyA6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NyBidWlsdGluL3JlbW90ZS5jOjEyMjMKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAow6l0YXQgbm9uIGRlbWFuZMOpKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA2Cittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgQnJhbmNoZSBsb2NhbGUgY29uZmlndXLDqWUgcG91ciAnZ2l0IHB1bGwnIDoiCittc2dzdHJbMV0gIiAgQnJhbmNoZXMgbG9jYWxlcyBjb25maWd1csOpZXMgcG91ciAnZ2l0IHB1bGwnIDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNAorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgTGVzIHLDqWbDqXJlbmNlcyBsb2NhbGVzIHNlcm9udCByZWZsw6l0w6llcyBwYXIgJ2dpdCBwdXNoJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgIFLDqWbDqXJlbmNlIGxvY2FsZSBjb25maWd1csOpZSBwb3VyICdnaXQgcHVzaCclcyA6IgorbXNnc3RyWzFdICIgIFLDqWbDqXJlbmNlcyBsb2NhbGVzIGNvbmZpZ3Vyw6llcyBwb3VyICdnaXQgcHVzaCclcyA6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDEKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgImTDqWZpbmlyIHJlZnMvcmVtb3Rlcy88bm9tPi9IRUFEIHNlbG9uIGxhIGRpc3RhbnRlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDMKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICJzdXBwcmltZXIgcmVmcy9yZW1vdGVzLzxub20+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1OAorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdGVybWluZXIgbGEgSEVBRCBkaXN0YW50ZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjYwCittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKyJJbCB5IGEgZGUgbXVsdGlwbGVzIGJyYW5jaGVzIEhFQUQgZGlzdGFudGVzLiBWZXVpbGxleiBlbiBjaG9pc2lyIHVuZSAiCisiZXhwbGljaXRlbWVudCBhdmVjIDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIlLDqWbDqXJlbmNlIG5vbiB2YWxpZGUgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBwYXJhbcOpdHJlciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBzZSByZXRyb3V2ZXJhIGVuIHN1c3BlbnMgISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIHNlIHJldHJvdXZlIGVuIHN1c3BlbnMgISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIsOJbGltaW5hdGlvbiBkZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTCA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW3NlcmFpdCDDqWxpbWluw6ldICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFvDqWxpbWluw6ldICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzQKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLDqWxpbWluZXIgbGVzIGRpc3RhbnRzIGFwcsOocyBsZSByYXBhdHJpZW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNyBidWlsdGluL3JlbW90ZS5jOjE0OTEgYnVpbHRpbi9yZW1vdGUuYzoxNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIlBhcyBkZSBzZXJ2ZXVyIHJlbW90ZSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTMKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJham91dGVyIHVuZSBicmFuY2hlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjAKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJwYXMgZGUgc2VydmV1ciBkaXN0YW50IHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3NworbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICJpbnRlcnJvZ2VyIGxlcyBVUkxzIGRlIHBvdXNzw6llIHBsdXTDtHQgcXVlIGxlcyBVUkxzIGRlIHLDqWN1cMOpcmF0aW9uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NzkKK21zZ2lkICJyZXR1cm4gYWxsIFVSTHMiCittc2dzdHIgInJldG91cm5lciB0b3V0ZXMgbGVzIFVSTHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUwNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICJhdWN1bmUgVVJMIGNvbmZpZ3Vyw6llIHBvdXIgbGUgZMOpcMO0dCBkaXN0YW50ICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMworbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJtYW5pcHVsZXIgbGVzIFVSTHMgcHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM1Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiYWpvdXRlciB1bmUgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzcKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAic3VwcHJpbWVyIGRlcyBVUkxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDQKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkIC0tZGVsZXRlIG4nYSBhdWN1biBzZW5zIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJNb3RpZiBkJ1VSTCBhbmNpZW4gaW52YWxpZGUgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiUGFzIGQnVVJMIHRyb3V2w6llIDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiUGFzIGRlIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBsZXMgVVJMcyBub24tcHVzaCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjgKK21zZ2lkICIiCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAiIgorIkxlcyByZXBhcXVldGFnZXMgaW5jcsOpbWVudGF1eCBzb250IGluY29tcGF0aWJsZXMgYXZlYyBsZXMgaW5kZXggYml0bWFwLiAiCisiVXRpbGlzZXpcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvdSBkw6lzYWN0aXZleiBsZSBwYXJhbcOodHJlIHBhY2sud3JpdGViaXRtYXBzLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisibmUgcGFzIGTDqW1hcnJlciBwYWNrLW9iamVjdHMgcG91ciByw6ktZW1wYXF1ZXRlciBsZXMgb2JqZWN0cyBkZSBwcm9tZXR0ZXVyIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzMCBidWlsdGluL3JlcGFjay5jOjQxNgorbXNnaWQgInJlcGFjazogRXhwZWN0aW5nIGZ1bGwgaGV4IG9iamVjdCBJRCBsaW5lcyBvbmx5IGZyb20gcGFjay1vYmplY3RzLiIKK21zZ3N0ciAiIgorInJlcGFja8KgOiBhdHRlbnRlIGRlIGxpZ25lcyBkJ0lkIGQnb2JqZXRzIGVuIGhleGEgY29tcGxldCBzZXVsZW1lbnQgZGVwdWlzICIKKyJsZXMgb2JqZWN0cyBkZSBwYXF1ZXQuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI1NAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSB0ZXJtaW5lciBwYWNrLW9iamVjdHMgIHBvdXIgcsOpLWVtcGFxdWV0ZXIgbGVzIG9iamV0cyBkZSAiCisicHJvbWV0dGV1ciIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAiZW1wYXF1ZXRlciB0b3V0IGRhbnMgdW4gc2V1bCBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiaWRlbnRpcXVlIMOgIC1hIGV0IHRyYW5zZm9ybWVyIGxlcyBvYmpldHMgaW5hY2Nlc3NpYmxlcyBlbiBzdXNwZW5zIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NworbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAic3VwcHJpbWVyIGxlcyBwYXF1ZXRzIHJlZG9uZGFudHMgZXQgbGFuY2VyIGdpdC1wcnVuZS1wYWNrZWQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk5Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc3NlciAtLW5vLXJldXNlLWRlbHRhIMOgIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAxCittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzZXIgLS1uby1yZXVzZS1vYmplY3Qgw6AgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIm5lIHBhcyBsYW5jZXIgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2VyIC0tbG9jYWwgw6AgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgIsOpY3JpcmUgdW4gaW5kZXggZW4gYml0bWFwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc3NlciAtLWRlbHRhLWlzbGFuZHMgw6AgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTEKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAiZGF0ZSBhcHByb3hpbWF0aXZlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgImF2ZWMgLUEsIG5lIHBhcyBzdXNwZW5kcmUgbGVzIG9iamV0cyBwbHVzIHZpZXV4IHF1ZSBjZWx1aS1jaSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTQKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiYXZlYyAtYSwgcmVwYXF1w6l0aXNlciBsZXMgb2JqZXRzIGluYWNjZXNzaWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJ0YWlsbGUgZGUgbGEgZmVuw6p0cmUgdXRpbGlzw6llIHBvdXIgbGEgY29tcHJlc3Npb24gZGVzIGRlbHRhcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTcgYnVpbHRpbi9yZXBhY2suYzozMjMKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAib2N0ZXRzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxOAorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisiaWRlbSBjaS1kZXNzdXMsIG1haXMgbGltaXRlciBsYSB0YWlsbGUgbcOpbW9pcmUgYXUgbGlldSBkdSBub21icmUgZCfDqWzDqW1lbnRzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAibGltaXRlIGxhIHByb2ZvbmRldXIgbWF4aW1hbGUgZGVzIGRlbHRhcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgImxpbWl0ZSBsZSBub21icmUgbWF4aW1hbCBkZSBmaWxzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJ0YWlsbGUgbWF4aW11bSBkZSBjaGFxdWUgZmljaGllciBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI2Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgInLDqWVtcGFxdWV0ZXIgbGVzIG9iamV0cyBkYW5zIGRlcyBwYXF1ZXRzIG1hcnF1w6lzIGF2ZWMgLmtlZXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgIm5lIHBhcyByZW1wYXF1ZXRlciBjZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzM4Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGVzIHBhcXVldHMgZGFucyB1biBkw6lww7R0IGQnb2JqZXRzIHByw6ljaWV1eCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNDIKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSBldCAtQSBzb250IGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDI1Cittc2dpZCAiTm90aGluZyBuZXcgdG8gcGFjay4iCittc2dzdHIgIlJpZW4gZGUgbmV1ZiDDoCBlbXBhcXVldGVyLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorIkFMRVJURcKgOiBjZXJ0YWlucyBwYXF1ZXRzIHV0aWxpc8OpcyBvbnQgw6l0w6kgcmVub21tw6lzXG4iCisiQUxFUlRFwqA6IGVuIGxlcyBwcsOpZml4YW50IHBhciBvbGQtLCBkZSBtYW5pw6hyZSDDoFxuIgorIkFMRVJURcKgOiBsZXMgcmVtcGxhY2VyIHBhciB1bmUgbm91dmVsbGUgdmVyc2lvbiBkZVxuIgorIkFMRVJURcKgOiBmaWNoaWVyLiBNYWlzIGwnb3DDqXJhdGlvbiBhIMOpY2hvdcOpIGV0IGxhXG4iCisiQUxFUlRFwqA6IHRlbnRhdGl2ZSBkZSByZW5vbW1hZ2UgZW4gc2VucyBpbnZlcnNlIGFcbiIKKyJBTEVSVEXCoDogYXVzc2kgw6ljaG91w6kuXG4iCisiQUxFUlRFwqA6IFZldWlsbGV6IGxlcyByZW5vbW1lciBtYW51ZWxsZW1lbnQgZGFucyAlcyA6XG4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHN1cHByZXNzaW9uIGRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDxvYmpldD4gPHJlbXBsYWNlbWVudD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmpldD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxvYmpldD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPG1vdGlmPl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCByZXBsYWNlIGZvcm1hdCAnJXMnXG4iCisidmFsaWQgZm9ybWF0cyBhcmUgJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJyIKK21zZ3N0ciAiIgorImZvcm1hdCBkZSByZW1wbGFjZW1lbnQgaW52YWxpZGUgJyVzJ1xuIgorImxlcyBmb3JtYXRzIHZhbGlkZXMgc29udCAnc2hvcnQnLCAnbWVkaXVtJyBldCAnbG9uZyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAicsOpZiBkZSByZW1wbGFjZW1lbnQgJyVzJyBub24gdHJvdXbDqWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlcGxhY2UgcmVmICclcyciCittc2dzdHIgIlLDqWbDqXJlbmNlIGRlIHJlbXBsYWNlbWVudCAnJXMnIHN1cHByaW3DqWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBub20gdmFsaWRlIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAibGEgcsOpZsOpcmVuY2UgZGUgcmVtcGxhY2VtZW50ICclcycgZXhpc3RlIGTDqWrDoCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPYmplY3RzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZS5cbiIKKyInJXMnIHBvaW50cyB0byBhIHJlcGxhY2VkIG9iamVjdCBvZiB0eXBlICclcydcbiIKKyJ3aGlsZSAnJXMnIHBvaW50cyB0byBhIHJlcGxhY2VtZW50IG9iamVjdCBvZiB0eXBlICclcycuIgorbXNnc3RyICIiCisiTGVzIG9iamV0cyBkb2l2ZW50IMOqdHJlIGR1IG3Dqm1lIHR5cGUuXG4iCisiJyVzJyBwb2ludGUgc3VyIHVuIG9iamV0IHJlbXBsYWPDqSBkZSB0eXBlICclcycgdGFuZGlzIHF1ZVxuIgorIiclcycgcG9pbnRlIHN1ciB1biBvYmpldCByZW1wbGHDp2FudCBkZSB0eXBlICclcycuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJXMgZW4gw6ljcml0dXJlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNDIKK21zZ2lkICJjYXQtZmlsZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJjYXQtZmlsZSBhIHJldG91cm7DqSB1biDDqWNoZWMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3IgcmVhZGluZyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAlcyBlbiDDqWNyaXR1cmUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsJ2FyYnJlICglcykiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3NgorbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gbWt0cmVlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgZGVwdWkgbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAibWt0cmVlIGEgw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAibWt0cmVlIG4nYSBwYXMgcmV0b3VybsOpIGRlIG5vbSBkJ29iamV0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZzdGF0ICVzIgorbXNnc3RyICJmc3RhdCBkZSAlcyBpbXBvc3NpYmxlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsJ29iamV0IGRhbnMgbGEgYmFzZSBkZSBkb25uw6llcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzIyIGJ1aWx0aW4vcmVwbGFjZS5jOjM3OCBidWlsdGluL3JlcGxhY2UuYzo0MjMKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAibm9tIGQnb2JqZXQgaW52YWxpZGUgOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvYnRlbmlyIGxlIHR5cGUgZGUgbCdvYmpldCBwb3VyICVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnw6lkaXRpb24gZHUgZmljaGllciBkJ29iamV0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibGUgbm91dmVsIG9iamV0IGVzdCBpZGVudGlxdWUgw6AgbCdhbmNpZW7CoDogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyICVzIGNvbW1lIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAibWF1dmFpc2Ugw6l0aXF1ZXR0ZSBkZSBmdXNpb24gZGFucyBsZSBjb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiw6l0aXF1ZXR0ZSBkZSBmdXNpb24gbWFsZm9ybcOpZSBkYW5zIGxlIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorImxlIGNvbW1pdCBvcmlnaW5hbCAnJXMnIGNvbnRpZW50IGwnw6l0aXF1ZXR0ZSBkZSBmdXNpb24gJyVzJyBxdWkgYSBkaXNwYXJ1IDsgIgorInV0aWxpc2V6IC0tZWRpdCBhdSBsaWV1IGRlIC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAibGUgY29tbWl0IG9yaWdpbmFsICclcycgY29udGllbnQgdW5lIHNpZ25hdHVyZSBHUEciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICJsYSBzaWduYXR1cmUgc2VyYSDDqWxpbWluw6llIGRhbnMgbGEgdmFsaWRhdGlvbiBkZSByZW1wbGFjZW1lbnQgISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBjb21taXQgZGUgcmVtcGxhY2VtZW50IHBvdXIgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdyYWZ0IGZvciAnJXMnIHVubmVjZXNzYXJ5IgorbXNnc3RyICJncmFmdCBwb3VyICclcycgbm9uIG7DqWNlc3NhaXJlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibGUgbm91dmVhdSBjb21taXQgZXN0IGlkZW50aXF1ZSDDoCBsJ2FuY2llbsKgOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjb252ZXJ0IHRoZSBmb2xsb3dpbmcgZ3JhZnQocyk6XG4iCisiJXMiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIGNvbnZlcnRpciBsYShsZXMpIGdyZWZmZShzKSBzdWl2YW50ZShzKSA6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0NworbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgcsOpZsOpcmVuY2VzIGRlIHJlbXBsYWNlbWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAic3VwcHJpbWVyIGxlcyByw6lmw6lyZW5jZXMgZGUgcmVtcGxhY2VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAiw6lkaXRlciBsJ29iamV0IGV4aXN0YW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTAKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJNb2RpZmllciBsZXMgcGFyZW50cyBkJ3VuIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUxCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICJjb252ZXJ0aXIgbGUgZmljaGllciBkZSBncmVmZmUgZXhpc3RhbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MgorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgInJlbXBsYWNlciBsYSByw6lmw6lyZW5jZSBzaSBlbGxlIGV4aXN0ZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU0Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICJhZmZpY2hlciBzYW5zIG1pc2UgZW4gZm9ybWUgcG91ciAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NQorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAidXRpbGlzZXIgY2UgZm9ybWF0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjgKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICItLWZvcm1hdCBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBzYW5zIGxpc3RlciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTc2Cittc2dpZCAiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIKK21zZ3N0ciAiLWYgbidhIGRlIHNlbnMgcXUnZW4gw6ljcml2YW50IHVuIHJlbXBsYWNlbWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTgwCittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1yYXcgbidhIGRlIHNlbnMgcXUnYXZlYyBsJ29wdGlvbiAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4NgorbXNnaWQgIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWQgcmVxdWllcnQgYXUgbW9pbnMgdW4gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5MgorbXNnaWQgImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJtYXV2YWlzIG5vbWJyZSBkJ2FyZ3VtZW50cyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk4Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIHJlcXVpZXJ0IHVuIHNldWwgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNAorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWcgcmVxdWllcnQgYXUgbW9pbnMgdW4gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxMAorbXNnaWQgIi0tY29udmVydC1ncmFmdC1maWxlIHRha2VzIG5vIGFyZ3VtZW50IgorbXNnc3RyICItLWNvbnZlcnQtZ3JhZnQtZmlsZSBuZSBzdXBwb3J0ZSBhdWN1biBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjE2Cittc2dpZCAib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIKK21zZ3N0ciAiLWwgbidhY2NlcHRlIHF1J3VuIG1vdGlmcyIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgIiIKKyJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8Y2hlbWluPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NjAKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAiZW5yZWdpc3RyZXIgZGVzIHLDqXNvbHV0aW9ucyBwcm9wcmVzIGRhbnMgbCdpbmRleCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICInZ2l0IHJlcmVyZSBmb3JnZXQnIHNhbnMgY2hlbWluIGVzdCBvYnNvbMOodGUiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgZ8OpbsOpcmF0aW9uIGRlIGRpZmYgcG91ciAnJXMnIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPGFyYnJlIG91IGFwcGFyZW50w6k+XSBbLS1dIDxzcMOpY2lmaWNhdGV1ci1kZS1jaGVtaW4+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPGFyYnJlLWVzcXVlPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNQorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzxhcmJyZS1lc3F1ZT5dIFstLV0gWzxzcMOpYy4tZGUtY2hlbWluPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1peGVkIgorbXNnc3RyICJtaXhlZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAic29mdCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAiaGFyZCIKK21zZ3N0ciAiaGFyZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWVyZ2UiCittc2dzdHIgIm1lcmdlIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJrZWVwIgorbXNnc3RyICJrZWVwIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODIKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAiVm91cyBuJ2F2ZXogcGFzIHVuZSBIRUFEIHZhbGlkZS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsJ2FyYnJlIHBvdXIgSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGwnYXJicmUgcG91ciAlcy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQgZXN0IG1haW50ZW5hbnQgw6AgJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmYWlyZSB1biBcInJlc2V0ICVzXCIgYXUgbWlsaWV1IGQndW5lIGZ1c2lvbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTQgYnVpbHRpbi9zdGFzaC5jOjUxOSBidWlsdGluL3N0YXNoLmM6NTk0CisjOiBidWlsdGluL3N0YXNoLmM6NjE4Cittc2dpZCAiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIKK21zZ3N0ciAiw6p0cmUgc2lsZW5jaWV1eCwgYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBlcnJldXJzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk2Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInLDqWluaXRpYWxpc2VyIEhFQUQgZXQgbCdpbmRleCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAicsOpaW5pdGlhbGlzZXIgc2V1bGVtZW50IEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTkgYnVpbHRpbi9yZXNldC5jOjMwMQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgInLDqWluaXRpYWxpc2VyIEhFQUQsIGwnaW5kZXggZXQgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAicsOpaW5pdGlhbGlzZXIgSEVBRCBtYWlzIGdhcmRlciBsZXMgY2hhbmdlbWVudHMgbG9jYXV4IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKyJlbnJlZ2lzdHJlciBzZXVsZW1lbnQgbGUgZmFpdCBxdWUgbGVzIGNoZW1pbnMgZWZmYWPDqXMgc2Vyb250IGFqb3V0w6lzIHBsdXMgIgorInRhcmQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiw4ljaGVjIGRlIHLDqXNvbHV0aW9uIGRlICclcycgY29tbWUgdW5lIHLDqXZpc2lvbiB2YWxpZGUuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAiw4ljaGVjIGRlIHLDqXNvbHV0aW9uIGRlICclcycgY29tbWUgdW4gYXJicmUgdmFsaWRlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2MAorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgYXZlYyBkZXMgY2hlbWlucyBlc3Qgb2Jzb2zDqHRlIDsgdXRpbGlzZXogJ2dpdCByZXNldCAtLSA8cGF0aHM+JyDDoCBsYSAiCisicGxhY2UuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmYWlyZSB1biBcIiVzIHJlc2V0XCIgYXZlYyBkZXMgY2hlbWlucy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIkxlIFwiJXMgcmVzZXRcIiBuJ2VzdCBwYXMgcGVybWlzIGRhbnMgdW4gZMOpcMO0dCBudSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM5MQorbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiBuZSBwZXV0IMOqdHJlIHV0aWxpc8OpIHF1J2F2ZWMgLS1taXhlZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxMgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICJNb2RpZmljYXRpb25zIG5vbiBpbmRleMOpZXMgYXByw6hzIHJlc2V0IDoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0LiAgWW91IGNhblxuIgorInVzZSAnLS1xdWlldCcgdG8gYXZvaWQgdGhpcy4gIFNldCB0aGUgY29uZmlnIHNldHRpbmcgcmVzZXQucXVpZXQgdG8gdHJ1ZVxuIgorInRvIG1ha2UgdGhpcyB0aGUgZGVmYXVsdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkxlcyBtb2RpZmljYXRpb25zIG5vbi1pbmRleMOpZXMgb250IHByaXMgJS4yZiBzZWNvbmRlcyDDoCDDqW51bcOpcmVyIGFwcsOocyAiCisicmVzZXQuXG4iCisiVm91cyBwb3V2ZXogdXRpbGlzZXIgJy0tcXVpZXQnIHBvdXIgw6l2aXRlciBjZSBtZXNzYWdlLiBSw6lnbGV6IGxlIHBhcmFtw6h0cmUgIgorImRlXG4iCisiY29uZmlnIHJlc2V0LnF1aWV0IMOgIHRydWUgcG91ciBhdm9pciBjZSBjb21wb3J0ZW1lbnQgZW4gcGVybWFuZW5jZS5cbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6lpbml0aWFsaXNlciBsZSBmaWNoaWVyIGQnaW5kZXggw6AgbGEgcsOpdmlzaW9uICclcycuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgbm91dmVhdSBmaWNoaWVyIGQnaW5kZXguIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDExCittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgYW5kIC0tbWlzc2luZyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21iaW5lciAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBldCAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0NzIKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIHJlcXVpcmVzIC0tb2JqZWN0cyIKK21zZ3N0ciAibGUgZmlsdHJhZ2UgZCdvYmpldCBleGlnZSAtLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjIKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IG5lIHN1cHBvcnRlIGwnYWZmaWNoYWdlIGRlcyBub3RlcyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyNQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tdXNlLWJpdG1hcC1pbmRleCB3aXRoIG9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgImltcG9zc2libGUgZGUgY29tYmluZXIgLS11c2UtYml0bWFwLWluZGV4IGF2ZWMgbGUgZmlsdHJhZ2UgZCdvYmpldCIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3VtZW50cz4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiZ2FyZGVyIGxlIGAtLWAgcGFzc8OpIGVuIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiYXJyw6p0IGRlIGwnYW5hbHlzZSBhcHLDqHMgbGUgcHJlbWllciBhcmd1bWVudCBxdWkgbidlc3QgcGFzIHVuZSBvcHRpb24iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE4Cittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAic29ydGllIGVuIGZvcm1lIGxvbmd1ZSBmaXjDqWUiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJndW1lbnRzPi4uLl1cbiIKKyIgICBvdSA6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZ3VtZW50Pi4uLl1cbiIKKyIgICBvdSA6IGdpdCByZXYtcGFyc2UgW29wdGlvbnNdIFs8YXJndW1lbnQ+Li4uXVxuIgorIlxuIgorIkxhbmNleiBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIHBvdXIgcGx1cyBkJ2luZm9ybWF0aW9uIHN1ciAiCisibCd1dGlsaXNhdGlvbiBwcmluY2lwYWxlLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQgb3UgYXBwYXJlbnTDqT4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8c291cy1jb21tYW5kZT4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdCBvdSBhcHBhcmVudMOpPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayA8c291cy1jb21tYW5kZT4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyIKK21zZ3N0ciAibCdvcHRpb24gJyVzJyBhdHRlbmQgdW4gbm9tYnJlIHN1cMOpcmlldXIgw6AgesOpcm8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzIDogJXMgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJtZXR0cmUgZmluIGF1IHJldG91ciBvdSBwaWNvcmFnZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJyZXByZW5kcmUgbGUgcmV0b3VyIG91IHBpY29yYWdlIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImFubnVsZXIgbGUgcmV0b3VyIG91IHBpY29yYWdlIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgInNraXAgY3VycmVudCBjb21taXQgYW5kIGNvbnRpbnVlIgorbXNnc3RyICJzYXV0ZXIgbGUgY29tbWl0IGNvdXJhbnQgZXQgY29udGludWVyIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICJuZSBwYXMgdmFsaWRlciBhdXRvbWF0aXF1ZW1lbnQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIsOpZGl0ZXIgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMQorbXNnaWQgInBhcmVudC1udW1iZXIiCittc2dzdHIgIm51bcOpcm8tZGUtcGFyZW50IgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInNlbGVjdCBtYWlubGluZSBwYXJlbnQiCittc2dzdHIgInPDqWxlY3Rpb25uZXIgbGUgcGFyZW50IHByaW5jaXBhbCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAic3RyYXTDqWdpZSBkZSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE2Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3B0aW9uIHBvdXIgbGEgc3RyYXTDqWdpZSBkZSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJham91dGVyIGxlIG5vbSBkZSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICJwcsOpc2VydmVyIGxlcyB2YWxpZGF0aW9ucyB2aWRlcyBpbml0aWFsZW1lbnQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImdhcmRlciBsZXMgdmFsaWRhdGlvbnMgcmVkb25kYW50ZXMsIHZpZGVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjIzMgorbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgInJldmVydCBhIMOpY2hvdcOpIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0NQorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAibGUgcGljb3JhZ2UgYSDDqWNob3XDqSIKKworIzogYnVpbHRpbi9ybS5jOjE5Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmljaGllcj4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImxlIGZpY2hpZXIgc3VpdmFudCBhIGR1IGNvbnRlbnUgaW5kZXjDqSBkaWZmw6lyZW50XG4iCisiZHUgZmljaGllciBldCBkZSBIRUFEIDoiCittc2dzdHJbMV0gIiIKKyJsZXMgZmljaGllcnMgc3VpdmFudHMgb250IGR1IGNvbnRlbnUgaW5kZXjDqSBkaWZmw6lyZW50XG4iCisiZHUgZmljaGllciBldCBkZSBIRUFEIDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTIKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1dGlsaXNleiAtZiBwb3VyIGZvcmNlciBsYSBzdXBwcmVzc2lvbikiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICJsZSBmaWNoaWVyIHN1aXZhbnQgYSBkZXMgY2hhbmdlbWVudHMgaW5kZXjDqXMgOiIKK21zZ3N0clsxXSAibGVzIGZpY2hpZXJzIHN1aXZhbnRzIG9udCBkZXMgY2hhbmdlbWVudHMgaW5kZXjDqXMgOiIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIodXRpbGlzZXogLS1jYWNoZWQgcG91ciBnYXJkZXIgbGUgZmljaGllciwgb3UgLWYgcG91ciBmb3JjZXIgbGEgc3VwcHJlc3Npb24pIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJsZSBmaWNoaWVyIHN1aXZhbnQgYSBkZXMgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIDoiCittc2dzdHJbMV0gImxlcyBmaWNoaWVycyBzdWl2YW50cyBvbnQgZGVzIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyA6IgorCisjOiBidWlsdGluL3JtLmM6MjQyCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIGxlcyBmaWNoaWVycyBzdXBwcmltw6lzIgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInN1cHByaW1lciBzZXVsZW1lbnQgZGUgbCdpbmRleCIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICJvdXRyZXBhc3NlciBsYSB2w6lyaWZpY2F0aW9uIGRlcyBmaWNoaWVycyDDoCBqb3VyIgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgImF1dG9yaXNlciBsYSBzdXBwcmVzc2lvbiByw6ljdXJzaXZlIgorCisjOiBidWlsdGluL3JtLmM6MjQ3Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgInNvcnRpciBhdmVjIHVuIMOpdGF0IHrDqXJvIG3Dqm1lIHNpIHJpZW4gbmUgY29ycmVzcG9uZGFpdCIKKworIzogYnVpbHRpbi9ybS5jOjI4OQorbXNnaWQgInBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisidmV1aWxsZXogaW5kZXhlciB2b3MgbW9kaWZpY2F0aW9ucyBkZSAuZ2l0bW9kdWxlcyBvdSBsZXMgcmVtaXNlciBwb3VyICIKKyJjb250aW51ZXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAicGFzIGRlIHN1cHByZXNzaW9uIHLDqWN1cnNpdmUgZGUgJyVzJyBzYW5zIC1yIgorCisjOiBidWlsdGluL3JtLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtIDogaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGjDtHRlPjpdPHLDqXBlcnRvaXJlPiAiCisiWzxyw6lmw6lyZW5jZT4uLi5dXG4iCisiICAtLWFsbCBldCBsYSBzcMOpY2lmaWNhdGlvbiBleHBsaWNpdGUgZGUgPHLDqWbDqXJlbmNlPiBzb250IG11dHVlbGxlbWVudCAiCisiZXhjbHVzaWZzLiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAibm9tIGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgInV0aWxpc2VyIHVuIHByb3RvY29sZSBSUEMgc2FucyDDqXRhdCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzgKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBsZXMgcsOpZsOpcmVuY2VzIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG1lc3NhZ2VzIGR1IGdyZWZmb24gZGUgcHJvdG9jb2xlIGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8aW50ZXJ2YWxsZS1yw6l2aXNpb25zPl0gW1stLV0gPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiR3JvdXBlciBwYXIgdmFsaWRhdGV1ciBwbHV0w7R0IHF1ZSBwYXIgYXV0ZXVyIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJ0cmllciBsYSBzb3J0aWUgc3VyIGxlIG5vbWJyZSBkZSB2YWxpZGF0aW9ucyBwYXIgYXV0ZXVyIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIiIKKyJTdXBwcmltZXIgbGVzIGRlc2NyaXB0aW9ucyBkZSB2YWxpZGF0aW9uLCBmb3Vybml0IHNldWxlbWVudCBsZSBub21icmUgZGUgIgorInZhbGlkYXRpb25zIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiQWZmaWNoZXIgbCdhZHJlc3NlIGNvdXJyaWVsIGRlIGNoYXF1ZSBhdXRldXIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiPHc+Wyw8aTE+Wyw8aTI+XV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIkNvdXBlciBsZXMgbGlnbmVzIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAidHJvcCBkJ2FyZ3VtZW50cyBmb3VybmlzIGhvcnMgZCd1biBkw6lww7R0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstcnwtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08cXVhbmQ+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8csOpdj4gfCA8Z2xvYj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE3Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8csOpZsOpcmVuY2U+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiJXMgaWdub3LDqTsgaW1wb3NzaWJsZSBkZSBnw6lyZXIgcGx1cyBkZSAlZCByw6lmw6lyZW5jZSIKK21zZ3N0clsxXSAiJXMgaWdub3LDqTsgaW1wb3NzaWJsZSBkZSBnw6lyZXIgcGx1cyBkZSAlZCByw6lmw6lyZW5jZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICJhdWN1bmUgcsOpZsOpcmVuY2UgY29ycmVzcG9uZCDDoCAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIGRpc3RhbnRlcyBldCBsZXMgYnJhbmNoZXMgbG9jYWxlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgYnJhbmNoZXMgZGUgc3VpdmkgZGlzdGFudGVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiY291bGV1ciAnKiErLScgY29ycmVzcG9uZGFudCDDoCBsYSBicmFuY2hlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgImFmZmljaGVyIDxuPiB2YWxpZGF0aW9ucyBkZSBwbHVzIGFwcsOocyBsJ2FuY8OqdHJlIGNvbW11biIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAic3lub255bWUgZGUgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJzdXBwcmltZXIgbGVzIGNoYcOubmVzIGRlIG5vbW1hZ2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5jbHVyZSBsYSBicmFuY2hlIGNvdXJhbnRlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU4Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICJub21tZXIgbGVzIHZhbGlkYXRpb25zIGF2ZWMgbGV1cnMgbm9tcyBkJ29iamV0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYwCittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGJhc2VzIHBvc3NpYmxlcyBkZSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJhZmZpY2hlciBsZXMgcsOpZsOpcmVuY2VzIGluYWNjZXNzaWJsZXMgZGVwdWlzIHRvdXRlIGF1dHJlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJhZmZpY2hlciBsZXMgdmFsaWRhdGlvbnMgZGFucyBsJ29yZHJlIHRvcG9sb2dpcXVlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIiIKKyJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIHZhbGlkYXRpb25zIHF1aSBuZSBzb250IHBhcyBzdXIgbGEgcHJlbWnDqHJlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjkKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgImFmZmljaGVyIGxlcyBmdXNpb25zIGFjY2Vzc2libGVzIGRlcHVpcyB1bmUgc2V1bGUgcG9pbnRlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICJ0cmkgdG9wb2xvZ2lxdWUsIG1haW50ZW5hbnQgbCdvcmRyZSBwYXIgZGF0ZSBzaSBwb3NzaWJsZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgPG4+IHBsdXMgcsOpY2VudHMgw6lsw6ltZW50cyBkZSByZWYtbG9nIGVuIGNvbW1lbsOnYW50IMOgIGxhIGJhc2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyItLXJlZmxvZyBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGFudCBldCAtLW1lcmdlLSIKKyJiYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM1Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAiYXVjdW5lIGJyYW5jaGUgc3DDqWNpZmnDqWUsIGV0IEhFQUQgZXN0IGludmFsaWRlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM4Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS1yZWZsb2cgcmVxdWllcnQgdW4gbm9tIGRlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAiJWQgZW50csOpZSBzZXVsZW1lbnQgbmUgcGV1dCDDqnRyZSBtb250csOpZSBlbiBtw6ptZSB0ZW1wcy4iCittc2dzdHJbMV0gIiVkIGVudHLDqWVzIHNldWxlbWVudCBuZSBwZXV2ZW50IMOqdHJlIG1vbnRyw6llIGVuIG3Dqm1lIHRlbXBzLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAicsOpZsOpcmVuY2UgaW5leGlzdGFudGUgJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gImltcG9zc2libGUgZGUgZ8OpcmVyIHBsdXMgZGUgJWQgcsOpdmlzaW9uLiIKK21zZ3N0clsxXSAiaW1wb3NzaWJsZSBkZSBnw6lyZXIgcGx1cyBkZSAlZCByw6l2aXNpb25zLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuZSByw6lmw6lyZW5jZSB2YWxpZGUuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgY29tbWl0ICVzICglcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPG1vdGlmPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxtb3RpZj5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYyCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyDDqXRpcXVldHRlcyAocGV1dCDDqnRyZSBjb21iaW7DqSBhdmVjIGhlYWRzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgdMOqdGVzIChwZXV0IMOqdHJlIGNvbWJpbsOpIGF2ZWMgdGFncykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICIiCisidsOpcmlmaWNhdGlvbiBkZSByw6lmw6lyZW5jZSBwbHVzIHN0cmljdGUsIG7DqWNlc3NpdGUgdW4gY2hlbWluIGRlIHLDqWbDqXJlbmNlICIKKyJleGFjdCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NyBidWlsdGluL3Nob3ctcmVmLmM6MTY5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICJhZmZpY2hlciBsYSByw6lmw6lyZW5jZSBIRUFELCBtw6ptZSBzaSBlbGxlIHNlcmFpdCBmaWx0csOpZSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICJkw6lyw6lmw6lyZW5jZXIgbGVzIMOpdGlxdWV0dGVzIGVuIElEcyBkJ29iamV0IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTczCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGUgaGFjaGFnZSBTSEExIGVuIHV0aWxpc2FudCA8bj4gY2hpZmZyZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAiIgorIm5lIHBhcyBhZmZpY2hlciBsZXMgcsOpc3VsdGF0cyBzdXIgbGEgc29ydGllIHN0YW5kYXJkIChwcmF0aXF1ZSBhdmVjIC0tdmVyaWZ5KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgcsOpZsOpcmVuY2VzIGRlIGwnZW50csOpZSBzdGFuZGFyZCBxdWkgbmUgc29udCBwYXMgZGFucyBsZSBkw6lww7R0ICIKKyJsb2NhbCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMAorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGRpc2FibGUpIDxvcHRpb25zPiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo2MQorbXNnaWQgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiCittc2dzdHIgImNldCBhcmJyZSBkZSB0cmF2YWlsIG4nZXN0IHBhcyBwYXJ0aWVsIChsZSBmaWNoaWVyIHNwYXJzZS1jaGVja291dCBwb3VycmFpdCBuZSBwYXMgZXhpc3RlcikiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjIwCittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgIsOpY2hlYyBkZSBwYXJhbcOpdHJhZ2UgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMzcKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNTYKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICJpbml0aWFsaXNlciBsJ2V4dHJhY3Rpb24gcGFydGllbGxlIGVuIG1vZGUgY29uZSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNjIKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiaW5pdGlhbGlzZXIgbCdleHRyYWN0aW9uIHBhcnRpZWxsZSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIMOgIGwnb3V2ZXJ0dXJlIGRlICclcyciCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzYxCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8cGF0dGVybnM+KSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8bW90aWZzPikiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mzc4Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIgorbXNnc3RyICJsaXJlIGxlcyBtb3RpZnMgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozODQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJpbmRpcXVlciBsZXMgbW90aWZzIGRlIGwnZXh0cmFjdGlvbiBwYXJ0aWVsbGUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDQ3Cittc2dpZCAiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgImTDqXNhY3RpdmVyIGQnZXh0cmFjdGlvbiBwYXJ0aWVsbGUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiZXJyZXVyIGxvcnMgZHUgcmFmcmHDrmNoaXNzZW1lbnQgZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozNworbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MgorbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxyZW1pc2U+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI0IGJ1aWx0aW4vc3Rhc2guYzo0NworbXNnaWQgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHJlbWlzZT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxyZW1pc2U+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI2IGJ1aWx0aW4vc3Rhc2guYzo2MgorbXNnaWQgImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGJyYW5jaCA8bm9tLWRlLWJyYW5jaGU+IFs8cmVtaXNlPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjcKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4IGJ1aWx0aW4vc3Rhc2guYzo3NworbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1dIFs8c3DDqWNpZmljYXRldXItZGUtY2hlbWluPi4uLl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MzEgYnVpbHRpbi9zdGFzaC5jOjg0Cittc2dpZCAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyCittc2dpZCAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8cmVtaXNlPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NworbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxyZW1pc2U+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjcyCittc2dpZCAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4iCittc2dzdHIgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxyZW1pc2U+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuZSB2YWxpZGF0aW9uIGRlIHR5cGUgcmVtaXNhZ2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIKK21zZ3N0ciAiVHJvcCBkZSByw6l2aXNpb25zIHNww6ljaWZpw6llcyA6ICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYxIGdpdC1sZWdhY3ktc3Rhc2guc2g6NTQ5Cittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgIkF1Y3VuZSBlbnRyw6llIGRlIHJlbWlzYWdlIHRyb3V2w6llLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1bmUgcsOpZsOpcmVuY2UgdmFsaWRlIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjI0IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzUKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciBhdmVjIGRlcyBwYXJhbcOodHJlcyBuJ2VzdCBwYXMgaW1wbMOpbWVudMOpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDAzCittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYXBwbGlxdWVyIHVuIHJlbWlzYWdlIGVuIGNvdXJzIGRlIGZ1c2lvbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBnw6luw6lyZXIgJXNeIS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjEKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgImNvbmZsaXRzIGRhbnMgbCdpbmRleC4gRXNzYXlleiBzYW5zIC0taW5kZXguIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI3Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzYXV2ZWdhcmRlciBsJ2FyYnJlIGQnaW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MzYKK21zZ2lkICJjb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZXN0YXVyZXIgbGVzIGZpY2hpZXJzIG5vbi1zdWl2aXMgZGVwdWlzIGxlIHJlbWlzYWdlIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlcyIKK21zZ3N0ciAiRnVzaW9uIGRlICVzIGF2ZWMgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODEKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgIkwnaW5kZXggbidhIHBhcyDDqXTDqSBzb3J0aSBkZSByZW1pc2UuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIxIGJ1aWx0aW4vc3Rhc2guYzo2MjAKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAidGVudGF0aXZlIGRlIHJlY3LDqWVyIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAlcyAoJXMpIgorbXNnc3RyICIlcyBzdXBwcmltw6kgKCVzKSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiVzwqA6IEltcG9zc2libGUgZGUgc3VwcHJpbWVyIGwnw6lsw6ltZW50IGRlIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1bmUgcsOpZsOpcmVuY2UgZGUgcmVtaXNhZ2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiIgorIkwnZW50csOpZSBkZSByZW1pc2FnZSBlc3QgY29uc2VydsOpZSBhdSBjYXMgb8O5IHZvdXMgZW4gYXVyaWV6IGVuY29yZSBiZXNvaW4uIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU1IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJBdWN1bmUgYnJhbmNoZSBzcMOpY2lmacOpZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc5NSBidWlsdGluL3N0YXNoLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciAlcyBhdmVjICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODEzIGJ1aWx0aW4vc3Rhc2guYzoxNDcwIGJ1aWx0aW4vc3Rhc2guYzoxNTA2Cittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAibWVzc2FnZSBwb3VyIGxlIHJlbWlzYWdlIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODIzCittc2dpZCAiXCJnaXQgc3Rhc2ggc3RvcmVcIiByZXF1aXJlcyBvbmUgPGNvbW1pdD4gYXJndW1lbnQiCittc2dzdHIgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgZXhpZ2UgdW4gYXJndW1lbnQgPGNvbW1pdD4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMDQ1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE4Cittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiQXVjdW4gY2hhbmdlbWVudCBzw6lsZWN0aW9ubsOpIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJWb3VzIG4nYXZleiBwYXMgZW5jb3JlIGxhIHZhbGlkYXRpb24gaW5pdGlhbGUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTcyIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTY1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIkltcG9zc2libGUgZGUgc2F1dmVyIGwnw6l0YXQgY291cmFudCBkZSBsJ2luZGV4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE4MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE4MAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgc2F1dmVyIGxlcyBmaWNoaWVycyBub24tc3VpdmlzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE5MiBidWlsdGluL3N0YXNoLmM6MTIwMSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMQorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzYXV2ZXIgbCfDqXRhdCBjb3VyYW50IGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjI5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIkltcG9zc2libGUgZCdlbnJlZ2lzdHJlciBsJ8OpdGF0IGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjc4IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzM4Cittc2dpZCAiQ2FuJ3QgdXNlIC0tcGF0Y2ggYW5kIC0taW5jbHVkZS11bnRyYWNrZWQgb3IgLS1hbGwgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZCd1dGlsaXNlciAtLXBhdGNoIGV0IC0taW5jbHVkZS11bnRyYWNrZWQgb3UgLS1hbGwgZW4gbcOqbWUgdGVtcHMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjk0Cittc2dpZCAiRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPyIKK21zZ3N0ciAiVm91cyBhdmV6IHPDu3JlbWVudCBvdWJsacOpICdnaXQgYWRkJyA/IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMwOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiUGFzIGRlIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyDDoCBzYXV2ZXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzE2IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIkltcG9zc2libGUgZCdpbml0aWFsaXNlciBsZSByZW1pc2FnZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgc2F1dmVyIGwnw6l0YXQgY291cmFudCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICJBcmJyZSBkZSB0cmF2YWlsIGV0IMOpdGF0IGRlIGwnaW5kZXggc2F1dmVnYXJkw6lzIGRhbnMgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDI2IGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsZXMgY2hhbmdlbWVudHMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjEgYnVpbHRpbi9zdGFzaC5jOjE0OTcKK21zZ2lkICJrZWVwIGluZGV4IgorbXNnc3RyICJjb25zZXJ2ZXIgbCdpbmRleCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjMgYnVpbHRpbi9zdGFzaC5jOjE0OTkKK21zZ2lkICJzdGFzaCBpbiBwYXRjaCBtb2RlIgorbXNnc3RyICJyZW1pc2VyIHVuZSBtb2RlIHJ1c3RpbmUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY0IGJ1aWx0aW4vc3Rhc2guYzoxNTAwCittc2dpZCAicXVpZXQgbW9kZSIKK21zZ3N0ciAibW9kZSBzaWxlbmNpZXV4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NiBidWlsdGluL3N0YXNoLmM6MTUwMgorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICJpbmNsdXJlIGxlcyBmaWNoaWVycyBub24gc3VpdmlzIGRhbnMgbGEgcmVtaXNlIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2OCBidWlsdGluL3N0YXNoLmM6MTUwNAorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICJpbmNsdXJlIGxlcyBmaWNoaWVycyBpZ25vcsOpcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdleMOpY3V0ZXIgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICIiCisic2F1dGVyIGV0IHN1cHByaW1lciB0b3V0ZXMgbGVzIGxpZ25lcyBjb21tZW7Dp2FudCBwYXIgbGUgY2FyYWN0w6hyZSBkZSAiCisiY29tbWVudGFpcmUiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICJham91dGVyIGRldmFudCBjaGFxdWUgbGlnbmUgbGUgY2FyYWN0w6hyZSBkZSBjb21tZW50YWlyZSBldCB1biBlc3BhY2UiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIk5vbSBkZSByw6lmw6lyZW5jZSBjb21wbGV0IGF0dGVuZHUsICVzIG9idGVudSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0Cittc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICJzdWJtb2R1bGUtLWhlbHBlciAgcHJpbnQtZGVmYXVsdC1yZW1vdGUgbidhY2NlcHRlIGF1Y3VuIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgdW4gY29tcG9zYW50IGRlIGwnVVJMICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODAKK21zZ2lkICJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICJhbmNyZSBhbHRlcm5hdGl2ZSBwb3VyIGxlcyBjaGVtaW5zIHJlbGF0aWZzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08Y2hlbWluPl0gWzxjaGVtaW4+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiVVJMIG5vbiB0cm91dsOpZSBwb3VyIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJXMnIGRhbnMgLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICJFbnRyw6llIGRhbnMgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorInJ1bl9jb21tYW5kIGEgcmV0b3VybsOpIHVuIHN0YXR1dCBub24tbnVsIHBvdXIgJXNcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgd2hpbGUgcmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgIgorInN1Ym1vZHVsZXMgb2YgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQgYSByZXRvdXJuw6kgdW4gc3RhdHV0IG5vbi1udWwgcGVuZGFudCBsYSByw6ljdXJzaW9uIGRhbnMgbGVzIHNvdXMtIgorIm1vZHVsZXMgaW5jbHVzIGRlICVzXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICIiCisiU3VwcHJpbWVyIGxhIHNvcnRpZSBsb3JzIGRlIGwnZW50csOpZSBkYW5zIGNoYXF1ZSBjb21tYW5kZSBkZSBzb3VzLW1vZHVsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiUGFyY291cmlyIHLDqWN1cnNpdmVtZW50IGxlcyBzb3VzLW1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NzIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tbWFuZGU+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgdHJvdXZlciBsYSBjb25maWd1cmF0aW9uICclcycuIENlIGTDqXDDtHQgZXN0IGNvbnNpZMOpcsOpIGNvbW1lICIKKyJzb24gcHJvcHJlIGFtb250IGQnYXV0b3JpdMOpLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLDiWNoZWMgZCdlbnJlZ2lzdHJlbWVudCBkZSBsJ1VSTCBwb3VyIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIlNvdXMtbW9kdWxlICclcycgKCVzKSBlbnJlZ2lzdHLDqSBwb3VyIGxlIGNoZW1pbiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIiIKKyJhdHRlbnRpb27CoDogbm91cyB2b3VzIHN1Z2fDqXJvbnMgZGUgc3DDqWNpZmllciB1bmUgY29tbWFuZGUgZGUgbW9kZSBkZSBtaXNlIMOgICIKKyJqb3VyIHBvdXIgbGUgc291cy1tb2R1bGUgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIsOJY2hlYyBkJ2VucmVnaXN0cmVtZW50IGR1IG1vZGUgZGUgbWlzZSDDoCBqb3VyIHBvdXIgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICIKKyInJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEwCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgIlN1cHByaW1lciBsYSBzb3J0aWUgbG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGQndW4gc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxjaGVtaW4+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKyJQYXMgZGUgbWlzZSBlbiBjb3JyZXNwb25kYW5jZSBkdSBzb3VzLW1vZHVsZSB0cm91dsOpIGRhbnMgLmdpdG1vZHVsZXMgcG91ciBsZSAiCisiY2hlbWluICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgSEVBRCBkYW5zIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAicsOpY3Vyc2lvbiBpbXBvc3NpYmxlIGRhbnMgbGUgc291cy1tb2R1bGUgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE4OQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJzdXBwcmltZXIgbGEgc29ydGllIGQnw6l0YXQgZHUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzkKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAiIgorIlV0aWxpc2VyIGxlIGNvbW1pdCBzdG9ja8OpIGRhbnMgbCdpbmRleCBhdSBsaWV1IGRlIGNlbHVpIHN0b2Nrw6kgZGFucyBsYSBIRUFEICIKKyJkdSBzb3VzLW1vZHVsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAicGFyY291cmlyIHLDqWN1cnNpdmVtZW50IGxlcyBzb3VzLW1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODUKK21zZ2lkICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8Y2hlbWluPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MDkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGF0aD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciA8bm9tPiA8Y2hlbWluPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAiU3luY2hyb25pc2F0aW9uIGRlIGwnVVJMIHNvdXMtbW9kdWxlIHBvdXIgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIsOpY2hlYyBkJ2VucmVnaXN0cmVtZW50IGRlIGwnVVJMIHBvdXIgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZCdvYnRlbnRpb24gZHUgZMOpcMO0dCBkaXN0YW50IHBhciBkw6lmYXV0IHBvdXIgbGUgc291cy1tb2R1bGUgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbWlzZSDDoCBqb3VyIGR1IGTDqXDDtHQgZGlzdGFudCBwb3VyIGxlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDUxCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIHN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCIKK21zZ3N0ciAiIgorIlN1cHByaW1lciBsYSBzb3J0aWUgbG9ycyBkZSBsYSBzeW5jaHJvbmlzYXRpb24gZGUgbCdVUkwgZCd1biBzb3VzLW1vZHVsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxjaGVtaW4+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJMJ2FyYnJlIGRlIHRyYXZhaWwgZHUgc291cy1tb2R1bGUgJyVzJyBjb250aWVudCB1biByw6lwZXJ0b2lyZSAuZ2l0ICh1dGlsaXNleiAiCisiJ3JtIC1yZicgc2kgdm91cyB2b3VsZXogdnJhaW1lbnQgbGUgc3VwcHJpbWVyIGVuIGluY2x1YW50IHRvdXQgc29uICIKKyJoaXN0b3JpcXVlKSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisiTCdhcmJyZSBkZSB0cmF2YWlsIGR1IHNvdXMtbW9kdWxlICclcycgY29udGllbnQgZGVzIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyA7ICIKKyJ1dGlsaXNleiAnLWYnIHBvdXIgbGVzIGFubnVsZXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiUsOpcGVydG9pcmUgJyVzJyBuZXR0b3nDqVxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsJ2FyYnJlIGRlIHRyYXZhaWwgZHUgc291cy1tb2R1bGUgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIHLDqXBlcnRvaXJlIHZpZGUgZHUgc291cy1tb2R1bGUgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiU291cy1tb2R1bGUgJyVzJyAoJXMpIG5vbiBlbnJlZ2lzdHLDqSBwb3VyIGxlIGNoZW1pbiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkwCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIiIKKyLDiWxpbWluZXIgbGVzIGFyYnJlcyBkZSB0cmF2YWlsIGRlcyBzb3VzLW1vZHVsZXMgbcOqbWUgcydpbHMgY29udGllbm5lbnQgZGVzICIKKyJtb2RpZmljYXRpb25zIGxvY2FsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiRMOpc2VucmVnaXN0cmVyIHRvdXMgbGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxjaGVtaW4+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorIlV0aWxpc2V6ICctLWFsbCcgc2kgdm91cyB2b3VsZXogdnJhaW1lbnQgcsOpaW5pdGlhbGlzZXIgdG91cyBsZXMgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI3NQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorIlVuZSBhbHRlcm5hdGl2ZSBjYWxjdWzDqWUgZGVwdWlzIGwnYWx0ZXJuYXRpdmUgZHUgc3VwZXItcHJvamV0IGVzdCBpbnZhbGlkZS5cbiIKKyJQb3VyIHBlcm1ldHRyZSDDoCBHaXQgZGUgY2xvbmVyIHNhbnMgYWx0ZXJuYXRpdmUgZGFucyB1biB0ZWwgY2FzLCByw6lnbGV6XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgw6AgJ2luZm8nLCBvdSBkZSBtYW5pw6hyZSDDqXF1aXZhbGVudGUsXG4iCisiY2xvbmV6IGF2ZWMgJy0tcmVmZXJlbmNlLWlmLWFibGUnIGF1IGxpZXUgZGUgJy0tcmVmZXJlbmNlJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzE0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAibGUgc291cy1tb2R1bGUgJyVzJyBuZSBwZXV0IHBhcyBham91dGVyIGQnYWx0ZXJuYXRpdmXCoDogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICIiCisiTGEgdmFsZXVyICclcycgcG91ciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBuJ2VzdCBwYXMgcmVjb25udWUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAiTGEgdmFsZXVyICclcycgcG91ciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gbidlc3QgcGFzIHJlY29ubnVlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MworbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICJlbXBsYWNlbWVudCBvw7kgbGUgc291cy1tb2R1bGUgc2VyYSBjbG9uw6kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg2Cittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAibm9tIGR1IG5vdXZlYXUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg5Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAiVVJMIGRlcHVpcyBsYXF1ZWxsZSBjbG9uZXIgbGUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk3Cittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICJwcm9mb25kZXVyIGRlIGwnaGlzdG9yaXF1ZSBkZXMgY2xvbmVzIHN1cGVyZmljaWVscyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTcKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJmb3JjZXIgbCdhZmZpY2hhZ2UgZGUgbGEgcHJvZ3Jlc3Npb24gZHUgY2xvbmFnZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTkKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAiaW50ZXJkaXJlIGRlIGNsb25lciBkYW5zIHVuIHLDqXBlcnRvaXJlIG5vbi12aWRlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNworbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PGNoZW1pbj5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxkw6lww7R0Pl0gWy0tbmFtZSA8bm9tPl0gWy0tZGVwdGggPHByb2ZvbmRldXI+XSAgLS11cmwgPHVybD4gLS1wYXRoIDxjaGVtaW4+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICJyZWZ1cyBkZSBjcsOpZXIvdXRpbGlzZXIgJyVzJyBkYW5zIHVuIHLDqXBlcnRvaXJlIGdpdCBkJ3VuIGF1dHJlIHNvdXMtbW9kdWxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgIkxlIGNsb25hZ2UgZGUgJyVzJyBkYW5zIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJXMnIGEgw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSBub3QgZW1wdHk6ICclcyciCittc2dzdHIgImxlIHLDqXBlcnRvaXJlIG4nZXN0IHBhcyB2aWRlIDogJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBzdWJtb2R1bGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSByw6lwZXJ0b2lyZSBkZSBzb3VzLW1vZHVsZSBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAibW9kZSBkZSBtaXNlIMOgIGpvdXIgJyVzJyBpbnZhbGlkZSBwb3VyIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorIk1vZGUgZGUgbWlzZSDDoCBqb3VyICclcydpbnZhbGlkZSBjb25maWd1csOpIHBvdXIgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICclcycgbm90IGluaXRpYWxpemVkIgorbXNnc3RyICJMZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyVzJyBuJ2VzdCBwYXMgaW5pdGlhbGlzw6kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTk4Cittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIlZvdXMgdm91ZHJpZXogc8O7cmVtZW50IHV0aWxpc2VyICd1cGRhdGUgLS1pbml0J8KgPyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICJTb3VzLW1vZHVsZSBub24gZnVzaW9ubsOpICVzIG5vbiB0cmFpdMOpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiU291cy1tb2R1bGUgJyVzJyBub24gdHJhaXTDqSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjbG9uZXIgJyVzJy4gUsOpZXNzYWkgcHLDqXZ1IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjbG9uZXIgJyVzJyBwb3VyIGxhIHNlY29uZGUgZm9pcywgYWJhbmRvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjAKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiY2hlbWluIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzkKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAiIgorImNoZW1pbiBkYW5zIGxhIGNvcGllIGRlIHRyYXZhaWwsIHRyYXZlcnNhbnQgbGVzIGZyb250acOocmVzIGRlIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODMKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJ2YWxldXJzIHBvc3NpYmxlc8KgOiByZWJhc2UsIG1lcmdlLCBjaGVja291dCBvdSBub25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4OQorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAiQ3LDqWVyIHVuIGNsb25lIHN1cGVyZmljaWVsIHRyb25xdcOpIGF1IG5vbWJyZSBkZSByw6l2aXNpb25zIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODkyCittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAiam9icyBwYXJhbGzDqGxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTQKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgInNww6ljaWZpZSBzaSBsZSBjbG9uYWdlIGluaXRpYWwgZG9pdCDDqnRyZSBhdXNzaSBzdXBlcmZpY2llbCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTUKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJuZSBwYXMgYWZmaWNoZXIgbGEgcHJvZ3Jlc3Npb24gZHUgY2xvbmFnZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08Y2hlbWluPl0gWzxjaGVtaW4+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTcKK21zZ2lkICJiYWQgdmFsdWUgZm9yIHVwZGF0ZSBwYXJhbWV0ZXIiCittc2dzdHIgInZhbGV1ciBpbnZhbGlkZSBwb3VyIGxhIG1pc2Ugw6Agam91ciBkdSBwYXJhbcOodHJlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlICglcykgYnJhbmNoIGNvbmZpZ3VyZWQgdG8gaW5oZXJpdCBicmFuY2ggZnJvbSBzdXBlcnByb2plY3QsIGJ1dCAiCisidGhlIHN1cGVycHJvamVjdCBpcyBub3Qgb24gYW55IGJyYW5jaCIKK21zZ3N0ciAiIgorImxhIGJyYW5jaGUgZHUgc291cy1tb2R1bGUgJXMgZXN0IGNvbmZpZ3Vyw6llIHBvdXIgaMOpcml0ZXIgZGUgbGEgYnJhbmNoZSBkdSAiCisic3VwZXJwcm9qZXQsIG1haXMgbGUgc3VwZXJwcm9qZXQgbidlc3Qgc3VyIGF1Y3VuZSBicmFuY2hlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGEgcmVwb3NpdG9yeSBoYW5kbGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgdW5lIHBvaWduw6llIGRlIGTDqXDDtHQgcG91ciBsZSBzb3VzLW1vZHVsZSAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMQorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICJwYXJjb3VyaXIgcsOpY3Vyc2l2ZW1lbnQgbGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjcKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXJzIFs8b3B0aW9ucz5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZW1iZWQtZ2l0LWRpciBbPG9wdGlvbnM+XSBbPGNoZW1pbj4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE4MworbXNnaWQgImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgInbDqXJpZmllciBzaSDDqWNyaXJlIGRhbnMgbGUgZmljaGllciAuZ2l0bW9kdWxlcyBlc3Qgc3VyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE4NgorbXNnaWQgInVuc2V0IHRoZSBjb25maWcgaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgImTDqXNhY3RpdmVyIGxhIGNvbmZpZ3VyYXRpb24gZGFucyBsZSBmaWNoaWVyIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBuYW1lIFs8dmFsZXVyPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IDxub20+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyIGdpdC1zdWJtb2R1bGUuc2g6MTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorInZldWlsbGV6IHZvdXMgYXNzdXJlciBxdWUgbGUgZmljaGllciAuZ2l0bW9kdWxlcyBlc3QgZGFucyBsJ2FyYnJlIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjYyIGdpdC5jOjQzMyBnaXQuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyBuZSBnw6hyZSBwYXMgLS1zdXBlci1wcmVmaXgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW5lIHNvdXMtY29tbWFuZGUgdmFsaWRlIGRlIHN1Ym1vZHVsZS0taGVscGVyIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIG5vbSBbPHLDqWbDqXJlbmNlPl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OQorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bm9tPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKyJzdXBwcmltZXIgbGUgbWVzc2FnZSBkJ2VycmV1ciBwb3VyIHVuZSByw6lmw6lyZW5jZSBub24gc3ltYm9saXF1ZSAoZMOpdGFjaMOpZSkiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICJzdXBwcmltZXIgbGEgcsOpZsOpcmVuY2Ugc3ltYm9saXF1ZSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAicmFjY291cmNpciBsJ2FmZmljaGFnZSBkZSBsYSByw6lmw6lyZW5jZSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgInJhaXNvbiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAicmFpc29uIGRlIGxhIG1pc2Ugw6Agam91ciIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGlkLWNsw6k+XSBbLWZdIFstbSA8bWVzc2FnZT4gfCAtRiA8ZmljaGllcj5dXG4iCisiXHRcdDxub20tw6l0aXF1ZXR0ZT4gWzxoZWFkPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjcKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA8bm9tw6l0aXF1ZXR0ZT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjgKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZXQ+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8bW90aWY+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8bm9tw6l0aXF1ZXR0ZT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiw6l0aXF1ZXR0ZSAnJXMnIG5vbiB0cm91dsOpZS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiw4l0aXF1ZXR0ZSAnJXMnIHN1cHByaW3DqWUgKGVsbGUgw6l0YWl0IHN1ciAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiw4ljcml2ZXogdW4gbWVzc2FnZSBwb3VyIGwnw6l0aXF1ZXR0ZSA6XG4iCisiICAlc1xuIgorIkxlcyBsaWduZXMgY29tbWVuw6dhbnQgcGFyICclYycgc2Vyb250IGlnbm9yw6llcy5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIsOJY3JpdmV6IHVuIG1lc3NhZ2UgcG91ciBsJ8OpdGlxdWV0dGUgOlxuIgorIiAgJXNcbiIKKyJMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciAnJWMnIHNlcm9udCBnYXJkw6llcyA7IHZvdXMgcG91dmV6IGxlcyByZXRpcmVyIHZvdXMtIgorIm3Dqm1lIHNpIHZvdXMgbGUgc291aGFpdGV6LlxuIgorCisjOiBidWlsdGluL3RhZy5jOjE5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgImltcG9zc2libGUgZGUgc2lnbmVyIGwnw6l0aXF1ZXR0ZSIKKworIzogYnVpbHRpbi90YWcuYzoyMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXIgZCfDqXRpcXVldHRlcyIKKworIzogYnVpbHRpbi90YWcuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpc1xuIgorImFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKK21zZ3N0ciAiIgorIlZvdXMgYXZleiBjcsOpw6kgdW5lIMOpdGlxdWV0dGUgbmljaMOpZS4gTCdvYmpldCBwb2ludMOpIHBhciB2b3RyZSBub3V2ZWxsZSAiCisiw6l0aXF1ZXR0ZVxuIgorImVzdCBkw6lqw6AgdW5lIMOpdGlxdWV0dGUuIFNpIHZvdXMgdm91bGlleiDDqXRpcXVldGVyIGwnb2JqZXQgcG9pbnTDqSwgIgorInV0aWxpc2V6wqA6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorCisjOiBidWlsdGluL3RhZy5jOjIzMgorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgIm1hdXZhaXMgdHlwZSBkJ29iamV0LiIKKworIzogYnVpbHRpbi90YWcuYzoyODQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgInBhcyBkZSBtZXNzYWdlIHBvdXIgbCfDqXRpcXVldHRlID8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIkxlIG1lc3NhZ2UgcG91ciBsJ8OpdGlxdWV0dGUgYSDDqXTDqSBsYWlzc8OpIGRhbnMgJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG5vbXMgZGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL3RhZy5jOjQwNAorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICJhZmZpY2hlIDxuPiBsaWduZXMgZGUgY2hhcXVlIG1lc3NhZ2UgZCfDqXRpcXVldHRlIgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJzdXBwcmltZXIgZGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJ2w6lyaWZpZXIgZGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL3RhZy5jOjQwOQorbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIGNyw6lhdGlvbiBkZSBsJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDExCittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICLDqXRpcXVldHRlIGFubm90w6llLCBuw6ljZXNzaXRlIHVuIG1lc3NhZ2UiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIm1lc3NhZ2UgcG91ciBsJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiZm9yY2VyIGwnw6lkaXRpb24gZHUgbWVzc2FnZSBkJ8OpdGlxdWV0YWdlIgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgIsOpdGlxdWV0dGUgYW5ub3TDqWUgZXQgc2lnbsOpZSBhdmVjIEdQRyIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJ1dGlsaXNlciB1bmUgYXV0cmUgY2zDqSBwb3VyIHNpZ25lciBsJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAicmVtcGxhY2VyIGwnw6l0aXF1ZXR0ZSBzaSBlbGxlIGV4aXN0ZSIKKworIzogYnVpbHRpbi90YWcuYzo0MjEgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY5Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICJjcsOpZXIgdW4gcmVmbG9nIgorCisjOiBidWlsdGluL3RhZy5jOjQyMworbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZCdhZmZpY2hhZ2UgZGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL3RhZy5jOjQyNAorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgbGlzdGUgZGVzIMOpdGlxdWV0dGVzIHNvdXMgZm9ybWUgZGUgY29sb25uZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIMOpdGlxdWV0dGVzIHF1aSBjb250aWVubmVudCBsYSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL3RhZy5jOjQyNiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyDDqXRpcXVldHRlcyBxdWkgbmUgY29udGllbm5lbnQgcGFzIGxhIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyDDqXRpcXVldHRlcyBxdWkgc29udCBmdXNpb25uw6llcyIKKworIzogYnVpbHRpbi90YWcuYzo0MzAKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyDDqXRpcXVldHRlcyBxdWkgbmUgc29udCBwYXMgZnVzaW9ubsOpZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDM0Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgw6l0aXF1ZXR0ZXMgZGUgbCdvYmpldCIKKworIzogYnVpbHRpbi90YWcuYzo0ODIKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZXQgLW4gc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJsJ29wdGlvbiAtbiBlc3QgYXV0b3Jpc8OpZSBzZXVsZW1lbnQgZW4gbW9kZSBkZSBsaXN0ZSIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJsJ29wdGlvbiAtLWNvbnRhaW5zIGVzdCBhdXRvcmlzw6llIHNldWxlbWVudCBlbiBtb2RlIGRlIGxpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImwnb3B0aW9uIC0tY29udGFpbnMgZXN0IGF1dG9yaXPDqWUgc2V1bGVtZW50IGVuIG1vZGUgbGlzdGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImwnb3B0aW9uIC0tcG9pbnRzLWF0IGVzdCBhdXRvcmlzw6llIHNldWxlbWVudCBlbiBtb2RlIGxpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjUxMgorbXNnaWQgIi0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICIiCisibGVzIG9wdGlvbnMgLS1tZXJnZWQgZXQgLS1uby1tZXJnZWQgbmUgc29udCBhdXRvcmlzw6llcyBxdSdlbiBtb2RlIGxpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAidW5lIHNldWxlIG9wdGlvbiAtRiBvdSAtbSBlc3QgYXV0b3Jpc8OpZS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJ0cm9wIGRlIHBhcmFtw6h0cmVzIgorCisjOiBidWlsdGluL3RhZy5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gbm9tIGQnw6l0aXF1ZXR0ZSB2YWxpZGUuIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAibCfDqXRpcXVldHRlICclcycgZXhpc3RlIGTDqWrDoCIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLDiXRpcXVldHRlICclcycgbWlzZSDDoCBqb3VyIChlbGxlIMOpdGFpdCBzdXIgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDEKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiRMOpcGFxdWV0YWdlIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBjcsOpYXRpb24gZHUgcsOpcGVydG9pcmUgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSBmaWNoaWVyICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBzdXBwcmVzc2lvbiBkdSBmaWNoaWVyICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHN1cHByZXNzaW9uIGR1IHLDqXBlcnRvaXJlICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICJUZXN0IGR1IG10aW1lIGRhbnMgJyVzJyAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTU0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgIiIKKyJsJ2luZm9ybWF0aW9uIGRlIHN0YXQgZHUgcsOpcGVydG9pcmUgbmUgY2hhbmdlIHBhcyBhcHLDqHMgYWpvdXQgZCd1biBmaWNoaWVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJsJ2luZm9ybWF0aW9uIGRlIHN0YXQgZHUgcsOpcGVydG9pcmUgbmUgY2hhbmdlIHBhcyBhcHLDqHMgYWpvdXQgZCd1biByw6lwZXJ0b2lyZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisibCdpbmZvcm1hdGlvbiBkZSBzdGF0IGR1IHLDqXBlcnRvaXJlIGNoYW5nZSBhcHLDqHMgbWlzZSDDoCBqb3VyIGQndW4gZmljaGllciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTEKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICIiCisibCdpbmZvcm1hdGlvbiBkZSBzdGF0IGR1IHLDqXBlcnRvaXJlIGNoYW5nZSBhcHLDqHMgbCdham91dCBkJ3VuIGZpY2hpZXIgZGFucyAiCisidW4gc291cy1yw6lwZXJ0b2lyZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyJsJ2luZm9ybWF0aW9uIGRlIHN0YXQgZHUgcsOpcGVydG9pcmUgbmUgY2hhbmdlIHBhcyBhcHLDqHMgbGEgc3VwcHJlc3Npb24gZCd1biAiCisiZmljaGllcjwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjE1Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJsJ2luZm9ybWF0aW9uIGRlIHN0YXQgZHUgcsOpcGVydG9pcmUgbmUgY2hhbmdlIHBhcyBhcHLDqHMgbGEgc3VwcHJlc3Npb24gZCd1biAiCisicsOpcGVydG9pcmUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWNoaWVyPi4uLl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc0Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICJjb250aW51ZXIgZGUgcmFmcmHDrmNoaXIgbcOqbWUgc2kgbCdpbmRleCBhIGJlc29pbiBkJ3VuZSBtaXNlIMOgIGpvdXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJhZnJhw65jaGlyIDogaWdub3JlciBsZXMgc291cy1tb2R1bGVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MAorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICJuZSBwYXMgaWdub3JlciBsZXMgbm91dmVhdXggZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgImxhaXNzZXIgbGVzIGZpY2hpZXJzIHJlbXBsYWNlciBkZXMgcsOpcGVydG9pcmVzIGV0IHZpY2UtdmVyc2EiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg0Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiYXZpc2VyIGRlcyBmaWNoaWVycyBtYW5xdWFudHMgZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NgorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJyYWZyYcOuY2hpciBtw6ptZSBzaSBsJ2luZGV4IGNvbnRpZW50IGRlcyDDqWzDqW1lbnRzIG5vbiBmdXNpb25uw6lzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OQorbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAicmFmcmHDrmNoaXIgbCdpbmZvcm1hdGlvbiBkZSBzdGF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MworbXNnaWQgImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIKK21zZ3N0ciAiY29tbWUgLS1yZWZyZXNoLCBtYWlzIGVuIGlnbm9yYW50IGwnb3B0aW9uIGFzc3VtZS11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk3Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPG1vZGU+LCA8b2JqZXQ+LCA8Y2hlbWluPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgImFqb3V0ZXIgbCfDqWzDqW1lbnQgc3DDqWNpZmnDqSBkYW5zIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAibWFycXVlciBsZXMgZmljaGllcnMgY29tbWUgXCJub24gY2hhbmdlYW50c1wiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTEKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgIm1ldHRyZSDDoCB6w6lybyBsZSBiaXQgc3VwcG9zw6ktbm9uLW1vZGlmacOpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTQKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICJtYXJxdWVyIGxlcyBmaWNoaWVycyBjb21tZSBcImluZGV4IHNldWxlbWVudFwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTcKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAibWV0dHJlIMOgIHrDqXJvIGxlIGJpdCBzYXV0ZXItbGEtY29waWUtZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAibmUgcGFzIHRvdWNoZXIgYXV4IGVudHLDqWVzIHJlc3RyZWludGVzIMOgIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisiYWpvdXRlciBzZXVsZW1lbnQgw6AgbCdpbmRleCA7IG5lIHBhcyBham91dGVyIGxlIGNvbnRlbnUgZGFucyBsYSBiYXNlIGRlICIKKyJkb25uw6llcyBkZXMgb2JqZXRzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjQKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICIiCisic3VwcHJpbWVyIGxlcyBjaGVtaW5zIG5vbW3DqXMgbcOqbWUgcydpbHMgc29udCBwcsOpc2VudHMgZGFucyBsYSBjb3BpZSBkZSAiCisidHJhdmFpbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI2Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJhdmVjIC0tc3RkaW4gOiBsZXMgbGlnbmVzIGVuIGVudHLDqWUgc29udCB0ZXJtaW7DqWVzIHBhciBkZXMgb2N0ZXRzIG51bHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyOAorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxpcmUgbGEgbGlzdGUgZGVzIGNoZW1pbnMgw6AgbWV0dHJlIMOgIGpvdXIgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDMyCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImFqb3V0ZXIgbGVzIMOpbMOpbWVudHMgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCDDoCBsJ2luZGV4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzYKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgInJlcGV1cGxlciBsZXMgw6l0YXBlcyBuwrAyIGV0IG7CsDMgcG91ciBsZXMgY2hlbWlucyBsaXN0w6lzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDAKK21zZ2lkICJvbmx5IHVwZGF0ZSBlbnRyaWVzIHRoYXQgZGlmZmVyIGZyb20gSEVBRCIKK21zZ3N0ciAibWV0dHJlIMOgIGpvdXIgc2V1bGVtZW50IGxlcyDDqWzDqW1lbnRzIHF1aSBkaWZmw6hyZW50IGRlIEhFQUQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImlnbm9yZXIgbGVzIGZpY2hpZXJzIG1hbnF1YW50cyBkYW5zIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGFjdGlvbnMgc3VyIGxhIHNvcnRpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ5Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihwb3VyIHBvcmNlbGFpbmVzKSBvdWJsaWVyIGxlcyBjb25mbGl0cyBzYXV2w6lzIGV0IG5vbiByw6lzb2x1cyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgIsOpY3JpcmUgbCdpbmRleCBkYW5zIGNlIGZvcm1hdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgImFjdGl2ZXIgb3UgZMOpc2FjdGl2ZXIgbCdpbmRleCBkaXZpc8OpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgImFjdGl2ZXIgb3UgZMOpc2FjdGl2ZXIgbGUgY2FjaGUgZGUgbm9uLXN1aXZpcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU5Cittc2dpZCAidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgInRlc3RlciBzaSBsZSBzeXN0w6htZSBkZSBmaWNoaWVyIHN1cHBvcnRlIGxlIGNhY2hlIGRlIG5vbi1zdWl2aXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MQorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICJhY3RpdmVyIGxlIGNhY2hlIGRlIG5vbi1zdWl2aXMgc2FucyB0ZXN0ZXIgbGUgc3lzdMOobWUgZGUgZmljaGllciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYzCittc2dpZCAid3JpdGUgb3V0IHRoZSBpbmRleCBldmVuIGlmIGlzIG5vdCBmbGFnZ2VkIGFzIGNoYW5nZWQiCittc2dzdHIgIsOpY3JpcmUgbCdpbmRleCBtw6ptZSBzJ2lsIG4nZXN0IHBhcyBtYXJxdcOpIGNvbW1lIG1vZGlmacOpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIgorbXNnc3RyICIiCisiYWN0aXZlciBvdSBkw6lzYWN0aXZlciBsYSBzdXJ2ZWlsbGFuY2UgZHUgc3lzdMOobWUgZGUgZmljaGllciAoZnNtb25pdG9yKSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgIm1hcnF1ZXIgbGVzIGZpY2hpZXJzIGNvbW1lIHZhbGlkZXMgcG91ciBmc21vbml0b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA3MAorbXNnaWQgImNsZWFyIGZzbW9uaXRvciB2YWxpZCBiaXQiCittc2dzdHIgImVmZmFjZXIgbGUgYml0IGRlIHZhbGlkaXTDqSBmc21vbml0b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE3MworbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImVuYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCBlc3QgcsOpZ2zDqSDDoCBmYWxzZcKgOyBzdXBwcmltZXotbGUgb3UgY2hhbmdlei1sZSBzaSB2b3VzICIKKyJzb3VoYWl0ZXogdnJhaW1lbnQgYWN0aXZlciBsJ2luZGV4IGNvdXDDqSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTgyCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IGVzdCByw6lnbMOpIMOgIHZyYWnCoDsgc3VwcHJpbWV6LWxlIG91IGNoYW5nZXotbGUgc2kgdm91cyAiCisic291aGFpdGV6IHZyYWltZW50IGTDqXNhY3RpdmVyIGwnaW5kZXggY291cMOpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTQKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGVzdCByw6lnbMOpIMOgIHRydWXCoDsgc3VwcHJpbWV6LWxlIG91IGNoYW5nZXotbGUgc2kgdm91cyAiCisic291aGFpdGV6IHZyYWltZW50IGTDqXNhY3RpdmVyIGxlIGNhY2hlIGRlcyBmaWNoaWVycyBub24tc3VpdmlzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIkxlIGNhY2hlIG5vbiBzdWl2aSBlc3QgZMOpc2FjdGl2w6kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgZXN0IHLDqWdsw6kgw6AgZmFsc2XCoDsgc3VwcHJpbWV6LWxlIG91IGNoYW5nZXotbGUgc2kgdm91cyAiCisic291aGFpdGV6IHZyYWltZW50IGFjdGl2ZXIgbGUgY2FjaGUgZGVzIGZpY2hpZXJzIG5vbi1zdWl2aXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiTGUgY2FjaGUgbm9uIHN1aXZpIGVzdCBhY3RpdsOpIHBvdXIgJyVzJyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjE4Cittc2dpZCAiY29yZS5mc21vbml0b3IgaXMgdW5zZXQ7IHNldCBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZW5hYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIGVzdCByw6lnbMOpIMOgIGZhbHNlwqA7IGNoYW5nZXotbGUgc2kgdm91cyBzb3VoYWl0ZXogdnJhaW1lbnQgIgorImFjdGl2ZXIgbGEgc3VydmVpbGxhbmNlIGR1IHN5c3TDqG1lIGRlIGZpY2hpZXJzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjIKK21zZ2lkICJmc21vbml0b3IgZW5hYmxlZCIKK21zZ3N0ciAiZnNtb25pdG9yIGFjdGl2w6kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciBlc3QgcsOpZ2zDqSDDoCB0cnVlwqA7IHN1cHByaW1lei1sZSBvdSBjaGFuZ2V6LWxlIHNpIHZvdXMgIgorInNvdWhhaXRleiB2cmFpbWVudCBkw6lzYWN0aXZlciBsYSBzdXJ2ZWlsbGFuY2UgZHUgc3lzdMOobWUgZGUgZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyOQorbXNnaWQgImZzbW9uaXRvciBkaXNhYmxlZCIKK21zZ3N0ciAiZnNtb25pdG9yIGTDqXNhY3RpdsOpIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPG5vbS1yw6lmw6lyZW5jZT4gWzxhbmNpZW5uZS12YWxldXI+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPG5vbS1yw6lmw6lyZW5jZT4gPG5vdXZlbGxlLXZhbGV1cj4gWzxhbmNpZW5uZS0iCisidmFsZXVyPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NAorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICJzdXBwcmltZXIgbGEgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICJtZXR0cmUgw6Agam91ciA8bm9tcsOpZsOpcmVuY2U+IGV0IG5vbiBsYSByw6lmw6lyZW5jZSBwb2ludMOpZSBwYXIgbHVpIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICJsJ2VudHLDqWUgc3RhbmRhcmQgYSBkZXMgYXJndW1lbnRzIHF1aSBzZSB0ZXJtaW5lbnQgcGFyIE5VTCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImxpcmUgbGVzIG1pc2VzIMOgIGpvdXIgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE1Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAibWV0dHJlIMOgIGpvdXIgbGVzIGZpY2hpZXJzIGQnaW5mb3JtYXRpb24gw6AgcGFydGlyIGRlIHrDqXJvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8csOpcGVydG9pcmU+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICJxdWl0dGVyIGFwcsOocyB1biB1bmlxdWUgw6ljaGFuZ2UgcmVxdcOqdGUvcsOpcG9uc2UiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAiU29ydGlyIGltbcOpZGlhdGVtZW50IGFwcsOocyBsJ2Fubm9uY2UgaW5pdGlhbGUgZGVzIHLDqWbDqXJlbmNlcyIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibmVzIHBhcyBlc3NheWVyIDxyw6lwZXJ0b2lyZT4vLmdpdC8gc2kgPHLDqXBlcnRvaXJlPiBuJ2VzdCBwYXMgdW4gcsOpcGVydG9pcmUgIgorIkdpdCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgImludGVycm9tcHJlIGxlIHRyYW5zZmVydCBhcHLDqHMgPG4+IHNlY29uZGVzIGQnaW5hY3Rpdml0w6kiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjE5Cittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjgKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgImFmZmljaGVyIGxlIGNvbnRlbnUgZHUgY29tbWl0IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OSBidWlsdGluL3ZlcmlmeS10YWcuYzozNworbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG1lc3NhZ2VzIGJydXRzIGRlIGdwZyIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU1Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAidmVyYmV1eCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgc3RhdGlzdGlxdWVzIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDzDqXRpcXVldHRlPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzYKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgImFmZmljaGVyIGxlIGNvbnRlbnUgZGUgbCfDqXRpcXVldHRlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTcKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8Y2hlbWluPiBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPGNoZW1pbj4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMAorbXNnaWQgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIG1vdmUgPGFyYnJlLWRlLXRyYXZhaWw+IDxub3V2ZWF1LWNoZW1pbj4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8b3B0aW9ucz5dIDx3b3JrdHJlZT4iCittc2dzdHIgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPGFyYnJlLWRlLXRyYXZhaWw+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA8Y2hlbWluPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgc3VwcHJlc3Npb24gZGUgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJTdXBwcmVzc2lvbiBkZSB3b3JrdHJlZXMvJXPCoDogcsOpcGVydG9pcmUgaW52YWxpZGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJTdXBwcmVzc2lvbiBkZSB3b3JrdHJlZXMvJXPCoDogbGUgZmljaGllciBnaXRkaXIgbidleGlzdGUgcGFzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAgYnVpbHRpbi93b3JrdHJlZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiIgorIlN1cHByZXNzaW9uIGRlIHdvcmt0cmVlcy8lc8KgOiDDqWNoZWMgZGUgbGEgbGVjdHVyZSBkdSBmaWNoaWVyIGdpdGRpciAoJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICU8UFJJdU1BWD4gYnl0ZXMsIHJlYWQgIgorIiU8UFJJdU1BWD4pIgorbXNnc3RyICIiCisiU3VwcHJlc3Npb24gZGUgd29ya3RyZWVzLyVzOiBsZWN0dXJlIHRyb3AgY291cnRlICggJTxQUkl1TUFYPiBvY3RldHMgIgorImF0dGVuZHVzLCAlPFBSSXVNQVg+IG9jdGV0cyBsdXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgd29ya3RyZWVzLyVzwqA6IGZpY2hpZXIgZ2l0ZGlyIGludmFsaWRlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAiIgorIlN1cHByZXNzaW9uIGRlIHdvcmt0cmVlcy8lc8KgOiBsZSBmaWNoaWVyIGdpdGRpciBwb2ludCBzdXIgdW4gZW5kcm9pdCAiCisiaW5leGlzdGFudCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGFyYnJlcyBkZSB0cmF2YWlsIMOpbGltaW7DqXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjcKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZmFpcmUgZXhwaXJlciBsZXMgYXJicmVzIGRlIHRyYXZhaWwgcGx1cyB2aWV1eCBxdWUgPHRlbXBzPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICInJXMnIGV4aXN0ZSBkw6lqw6AiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqS1ham91dGVyIGwnYXJicmUgZGUgdHJhdmFpbCAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyInJXMnIGVzdCB1biBhcmJyZSBkZSB0cmF2YWlsIG1hbnF1YW50IG1haXMgdmVycm91aWxsw6nCoDtcbiIKKyJ1dGlsaXNleiAnYWRkIC1mIC1mJyBwb3VyIHBhc3NlciBvdXRyZSwgb3UgJ3VubG9jaycgZXQgJ3BydW5lJyBvdSAncmVtb3ZlJyAiCisicG91ciBjb3JyaWdlciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGFscmVhZHkgcmVnaXN0ZXJlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZicgdG8gb3ZlcnJpZGUsIG9yICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyInJXMnIGVzdCB1biBhcmJyZSBkZSB0cmF2YWlsIG1hbnF1YW50IG1haXMgZMOpasOgIGVucmVnaXN0csOpwqA7XG4iCisidXRpbGlzZXogJ2FkZCAtZicgcG91ciBwYXNzZXIgb3V0cmUsIG91ICdwcnVuZScgb3UgJ3JlbW92ZScgcG91ciBjb3JyaWdlciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSByw6lwZXJ0b2lyZSBkZSAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM5IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChuZXcgYnJhbmNoICclcycpIgorbXNnc3RyICJQcsOpcGFyYXRpb24gZGUgbCdhcmJyZSBkZSB0cmF2YWlsIChub3V2ZWxsZSBicmFuY2hlICclcycpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIgorbXNnc3RyICIiCisiUHLDqXBhcmF0aW9uIGRlIGwnYXJicmUgZGUgdHJhdmFpbCAocsOpaW5pdGlhbGlzYXRpb24gZGUgbGEgYnJhbmNoZSAnJXMnwqA7ICIKKyJwcsOpY8OpZGVtbWVudCBzdXIgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICJQcsOpcGFyYXRpb24gZGUgbCdhcmJyZSBkZSB0cmF2YWlsIChleHRyYWN0aW9uIGRlICclcycpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIlByw6lwYXJhdGlvbiBkZSBsJ2FyYnJlIGRlIHRyYXZhaWwgKEhFQUQgZMOpdGFjaMOpZSAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTcKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgIiIKKyJleHRyYWlyZSBsYSA8YnJhbmNoZT4gbcOqbWUgc2kgZWxsZSBlc3QgZMOpasOgIGV4dHJhaXRlIGRhbnMgdW5lIGF1dHJlIGNvcGllIGRlICIKKyJ0cmF2YWlsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAwCittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3LDqWVyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAyCittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICJjcsOpZXIgb3UgcsOpaW5pdGlhbGlzZXIgdW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDQKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAicmVtcGxpc3NhZ2UgZGUgbGEgbm91dmVsbGUgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNQorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICJjb25zZXJ2ZXIgbGUgdmVycm91IHN1ciBsZSBub3V2ZWwgYXJicmUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwOAorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiCittc2dzdHIgInLDqWdsZXIgbGUgbW9kZSBkZSBzdWl2aSAodm9pciBnaXQtYnJhbmNoKDEpKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMQorbXNnaWQgInRyeSB0byBtYXRjaCB0aGUgbmV3IGJyYW5jaCBuYW1lIHdpdGggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJlc3NheWVyIGRlIG5vbW1lciBsYSBub3V2ZWxsZSBicmFuY2hlIGNvbW1lIGxhIGJyYW5jaGUgYW1vbnQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTkKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgZXQgLS1kZXRhY2ggc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaWZzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgwCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIiIKKyItLVtuby1ddHJhY2sgbmUgcGV1dCDDqnRyZSB1dGlsaXPDqSBxdSfDoCBsYSBjcsOpYXRpb24gZCd1bmUgbm91dmVsbGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4MAorbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAicmFpc29uIGR1IHZlcnJvdWlsbGFnZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MiBidWlsdGluL3dvcmt0cmVlLmM6NzI1IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuZSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjcKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiIgorIkxhIGNvcGllIGRlIHRyYXZhaWwgcHJpbmNpcGFsZSBuZSBwZXV0IHBhcyDDqnRyZSB2ZXJyb3VpbGzDqWUgb3UgZMOpdmVycm91aWxsw6llIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiclcycgZXN0IGTDqWrDoCB2ZXJyb3VpbGzDqSwgY2FyICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyBlc3QgZMOpasOgIHZlcnJvdWlsbMOpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdmVycm91aWxsw6kiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzAKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiIgorImxlcyBhcmJyZXMgZGUgdHJhdmFpbCBjb250ZW5hbnQgZGVzIHNvdXMtbW9kdWxlcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSAiCisiZMOpcGxhY8OpcyBvdSBzdXBwcmltw6lzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzc4Cittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorImZvcmNlciBsZSBkw6lwbGFjZW1lbnQgbcOqbWUgc2kgbCdhcmJyZSBkZSB0cmF2YWlsIGVzdCBzYWxlIG91IHZlcnJvdWlsbMOpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAxIGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIGVzdCB1biBhcmJyZSBkZSB0cmF2YWlsIHByaW5jaXBhbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIG5vbSBkZSBsYSBkZXN0aW5hdGlvbiDDoCBwYXJ0aXIgZGUgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAibGEgY2libGUgJyVzJyBleGlzdGUgZMOpasOgIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBkw6lwbGFjZXIgdW4gYXJicmUgZGUgdHJhdmFpbCB2ZXJyb3VpbGzDqSwgcmFpc29uIGR1ICIKKyJ2ZXJyb3VpbGxhZ2XCoDogJXNcbiIKKyJ1dGlsaXNleiAnbW92ZSAtZiAtZicgcG91ciBvdXRyZXBhc3NlciBvdSBkw6l2ZXJyb3VpbGxlciBhdmFudCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMgorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIGTDqXBsYWNlciB1biBhcmJyZSBkZSB0cmF2YWlsIHZlcnJvdWlsbMOpO1xuIgorInV0aWxpc2V6ICdtb3ZlIC1mIC1mJyBwb3VyIG91dHJlcGFzc2VyIG91IGTDqXZlcnJvdWlsbGVyIGF2YW50IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJsYSB2YWxpZGF0aW9uIGEgw6ljaG91w6ksIGltcG9zc2libGUgZGUgZMOpcGxhY2VyIGwnYXJicmUgZGUgdHJhdmFpbMKgOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIsOpY2hlYyBhdSBkw6lwbGFjZW1lbnQgZGUgJyVzJyB2ZXJzICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGR1IGxhbmNlbWVudCBkZSAnZ2l0IHN0YXR1cycgc3VyICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjb250YWlucyBtb2RpZmllZCBvciB1bnRyYWNrZWQgZmlsZXMsIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorIiclcycgY29udGllbnQgZGVzIGZpY2hpZXJzIG1vZGlmacOpcyBvdSBub24tc3VpdmlzLCB1dGlsaXNleiAtLWZvcmNlIHBvdXIgbGUgIgorInN1cHByaW1lciIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxhbmNlciAnZ2l0IHN0YXR1cycgc3VyICclcycsIGNvZGUgJWQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MTAKK21zZ2lkICJmb3JjZSByZW1vdmFsIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICIiCisiZm9yY2VyIGxhIHN1cHByZXNzaW9uIG3Dqm1lIHNpIGwnYXJicmUgZGUgdHJhdmFpbCBlc3Qgc2FsZSBvdSB2ZXJyb3VpbGzDqSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHN1cHByaW1lciB1biBhcmJyZSBkZSB0cmF2YWlsIHZlcnJvdWlsbMOpLCByYWlzb24gZHUgIgorInZlcnJvdWlsbGFnZcKgOiAlc1xuIgorInV0aWxpc2V6ICdtb3ZlIC1mIC1mJyBwb3VyIG91dHJlcGFzc2VyIG91IGTDqXZlcnJvdWlsbGVyIGF2YW50IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM1Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHN1cHByaW1lciB1biBhcmJyZSBkZSB0cmF2YWlsIHZlcnJvdWlsbMOpO1xuIgorInV0aWxpc2V6ICdtb3ZlIC1mIC1mJyBwb3VyIG91dHJlcGFzc2VyIG91IGTDqXZlcnJvdWlsbGVyIGF2YW50IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIiIKKyJsYSB2YWxpZGF0aW9uIGEgw6ljaG91w6ksIGltcG9zc2libGUgZGUgc3VwcHJpbWVyIGwnYXJicmUgZGUgdHJhdmFpbMKgOiAlcyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTUKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcsOpZml4ZT4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjgKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjxwcsOpZml4ZT4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiw6ljcmlyZSBsJ29iamV0IGFyYnJlIHBvdXIgdW4gc291cy1yw6lwZXJ0b2lyZSA8cHLDqWZpeGU+IgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgInNldWxlbWVudCB1dGlsZSBwb3VyIGxlIGTDqWJvZ2FnZSIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgImNvbW1hbmRlICdtYXJrJyBhdHRlbmR1ZSwgJXMgdHJvdXbDqSIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJjb21tYW5kZSAndG8nIGF0dGVuZHVlLCAlcyB0cm91dsOpIgorCisjOiBmYXN0LWltcG9ydC5jOjMyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmVhdHVyZSAnJXMnIGZvcmJpZGRlbiBpbiBpbnB1dCB3aXRob3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorbXNnc3RyICJsYSBmb25jdGlvbm5hbGl0w6kgJyVzJyBlc3QgaW50ZXJkaXRlIGVuIGVudHLDqWUgc2FucyAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKyJMZXMgcGVybWlzc2lvbnMgZGUgdm90cmUgcsOpcGVydG9pcmUgZGUgc29ja2V0IHNvbnQgdHJvcCBwZXJtaXNzaXZlc8KgO1xuIgorImxlcyBhdXRyZXMgdXRpbGlzYXRldXJzIHBvdXJyYWllbnQgbGlyZSB2b3MgaWRlbnRpZmlhbnRzIHNlY3JldHMuIExhbmNlesKgOlxuIgorIlxuIgorIiAgICBjaG1vZCAwNzAwICVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNzIKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbWVzc2FnZXMgZGUgZGVidWcgc3VyIHN0ZGVyciIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgbm90IG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgImxlIGNvbW1pdCAlcyBuJ2VzdCBwYXMgbWFycXXDqSBqb2lnbmFibGUiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgInRyb3AgZGUgY29tbWl0cyBtYXJxdcOpcyBqb2lnbmFibGVzIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6NworbXNnaWQgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAic29ydGlyIGltbcOpZGlhdGVtZW50IGFwcsOocyBsJ2Fubm9uY2UgZGVzIGNhcGFjaXTDqXMiCisKKyM6IGdpdC5jOjI3Cittc2dpZCAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwYXRoPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKyIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSIKK21zZ3N0ciAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPGNoZW1pbj5dIFstYyA8bm9tPj08dmFsZXVyPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PGNoZW1pbj5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLSIKKyJwYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PGNoZW1pbj5dIFstLXdvcmstdHJlZT08Y2hlbWluPl0gWy0tbmFtZXNwYWNlPTxub20+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmRlPiBbPGFyZ3M+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LlxuIgorIlNlZSAnZ2l0IGhlbHAgZ2l0JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIHN5c3RlbS4iCittc2dzdHIgIiIKKyInZ2l0IGhlbHAgLWEnIGV0ICdnaXQgaGVscCAtZycgbGlzdGVudCBsZXMgc291cy1jb21tYW5kZXMgZGlzcG9uaWJsZXMgZXRcbiIKKyJxdWVscXVlcyBjb25jZXB0cy4gVm9pciAnZ2l0IGhlbHAgPGNvbW1hbmRlPicgb3UgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJwb3VyIGVuIGxpcmUgcGx1cyDDoCBwcm9wb3MgZCd1bmUgY29tbWFuZGUgc3DDqWNpZmlxdWUgb3UgZCd1biBjb25jZXB0LlxuIgorIlZvaXIgJ2dpdCBoZWxwIGdpdCcgcG91ciB1biBzdXJ2b2wgZHUgc3lzdMOobWUuIgorCisjOiBnaXQuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAiYXVjdW4gcsOpcGVydG9pcmUgZm91cm5pIHBvdXIgLS1naXQtZGlyXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgImF1Y3VuIGVzcGFjZSBkZSBub20gZm91cm5pdCBwb3VyIC0tbmFtZXNwYWNlXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgImF1Y3VuIHLDqXBlcnRvaXJlIGZvdXJuaSBwb3VyIC0td29yay10cmVlXG4iCisKKyM6IGdpdC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iCittc2dzdHIgImF1Y3VuIHByw6lmaXhlIGZvdXJuaSBwb3VyIC0tc3VwZXItcHJlZml4XG4iCisKKyM6IGdpdC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICItYyBleHBlY3RzIGEgY29uZmlndXJhdGlvbiBzdHJpbmdcbiIKK21zZ3N0ciAiLWMgcmVxdWllcnQgdW5lIGNoYcOubmUgZGUgY29uZmlndXJhdGlvblxuIgorCisjOiBnaXQuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtQ1xuIgorbXNnc3RyICJhdWN1biByw6lwZXJ0b2lyZSBmb3VybmkgcG91ciAtQ1xuIgorCisjOiBnaXQuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIm9wdGlvbiBpbmNvbm51ZcKgOiAlc1xuIgorCisjOiBnaXQuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIGFsaWFzICclcyc6ICclcyciCittc2dzdHIgImxvcnMgZGUgbCdleHBhbnNpb24gZGUgbCdhbGlhcyAnJXMnwqA6ICclcyciCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKyJsJ2FsaWFzICclcycgbW9kaWZpZSBsZXMgdmFyaWFibGVzIGQnZW52aXJvbm5lbWVudC5cbiIKKyJWb3VzIHBvdXZleiB1dGlsaXNlciAnIWdpdCcgZGFucyBsJ2FsaWFzIHBvdXIgbGUgZmFpcmUiCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgImFsaWFzIHZpZGUgcG91ciAlcyIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgImFsaWFzIHJlY3Vyc2lmwqA6ICVzIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiw6ljaGVjIGQnw6ljcml0dXJlIHN1ciBsYSBzb3J0aWUgc3RhbmRhcmQiCisKKyM6IGdpdC5jOjQ2MQorbXNnaWQgInVua25vd24gd3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIsOpY2hlYyBpbmNvbm51IGQnw6ljcml0dXJlIHN1ciBsYSBzb3J0aWUgc3RhbmRhcmQiCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIsOpY2hlYyBkZSBmZXJtZXR1cmUgZGUgbGEgc29ydGllIHN0YW5kYXJkIgorCisjOiBnaXQuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgbG9vcCBkZXRlY3RlZDogZXhwYW5zaW9uIG9mICclcycgZG9lcyBub3QgdGVybWluYXRlOiVzIgorbXNnc3RyICJib3VjbGUgZCdhbGlhcyBkw6l0ZWN0w6llwqA6IGwnZXhwYW5zaW9uIGRlICclcycgbmUgZmluaXQgamFtYWlzwqA6ICVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgImltcG9zc2libGUgZCd1dGlsaXNlciAlcyBjb21tZSB1bmUgZm9uY3Rpb24gaW50w6lncsOpZSIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorInVzYWdlIDogJXNcbiIKKyJcbiIKKworIzogZ2l0LmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICIiCisibCdleHBhbnNpb24gZGUgbCdhbGlhcyAnJXMnIGEgw6ljaG91w6nCoDogJyVzJyBuJ2VzdCBwYXMgdW5lIGNvbW1hbmRlIGdpdFxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIsOpY2hlYyBhdSBsYW5jZW1lbnQgZGUgbGEgY29tbWFuZGUgJyVzJ8KgOiAlc1xuIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgIiIKKyJ2YWxldXIgbsOpZ2F0aXZlIHBvdXIgaHR0cC5wb3N0YnVmZmVyIDsgdXRpbGlzYXRpb24gZGUgbGEgdmFsZXVyIHBhciBkw6lmYXV0ICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICJMYSBkw6lsw6lnYXRpb24gZGUgY29tbWFuZGUgbidlc3QgcGFzIHN1cHBvcnTDqSBhdmVjIGN1UkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIkwnw6lwaW5nbGFnZSBkZSBjbMOpIHB1YmxpcXVlIG4nZXN0IHBhcyBzdXBwb3J0w6kgYXZlYyBjdVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6ODc2Cittc2dpZCAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIkNVUkxTU0xPUFRfTk9fUkVNT1ZFIG4nZXN0IHBhcyBzdXBwb3J0w6kgYXZlYyBjdVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICJMZXMgcmVzdHJpY3Rpb25zIGRlIHByb3RvY29sZSBuZSBzb250IHBhcyBzdXBwb3J0w6lzIGF2ZWMgY3VSTCA8IDcuMTkuNCIKKworIzogaHR0cC5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgU1NMIGJhY2tlbmQgJyVzJy4gU3VwcG9ydGVkIFNTTCBiYWNrZW5kczoiCittc2dzdHIgIkRvcnNhbGUgU1NMICclcycgbm9uIHN1cHBvcnTDqWUuIERvcnNhbGVzIFNTTCBzdXBwb3J0w6llc8KgOiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgcsOpZ2xlciBsYSBkb3JzYWxlIFNTTCDDoCAnJXMnwqA6IGNVUkwgYSDDqXTDqSBjb25zdHJ1aXQgc2FucyAiCisiZG9yc2FsZSBTU0wiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3DDqWNpZmllciBsZSBkb3JzYWwgU1NMIMOgICclcyfCoDogZMOpasOgIHNww6ljaWZpw6kiCisKKyM6IGh0dHAuYzoxOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBsYSBiYXNlIGRlIGwndXJsIGRlcHVpcyBsYSByZWRpcmVjdGlvbsKgOlxuIgorIiAgICAgIGRlbWFuZMOpwqA6ICVzXG4iCisiICByZWRpcmVjdGlvbsKgOiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIgorbXNnc3RyICJjaXRhdGlvbiBpbnZhbGlkZSBkYW5zIGxhIHZhbGV1ciBwdXNoLW9wdGlvbsKgOiAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiVzaW5mby9yZWZzIG4nZXN0IHBhcyB2YWxpZGUgOiBlc3QtY2UgYmllbiB1biBkw6lww7R0IGdpdMKgPyIKKworIzogcmVtb3RlLWN1cmwuYzozNjQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZXhwZWN0ZWQgc2VydmljZSwgZ290IGZsdXNoIHBhY2tldCIKK21zZ3N0ciAicsOpcG9uc2UgZHUgc2VydmV1ciBpbnZhbGlkZcKgOyBzZXJ2aWNlIGF0dGVuZHUsIHBhcXVldCBkZSB2aWRhZ2UgcmXDp3UiCisKKyM6IHJlbW90ZS1jdXJsLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBnb3QgJyVzJyIKK21zZ3N0ciAicsOpcG9uc2UgZHUgc2VydmV1ciBpbnZhbGlkZcKgOyAnJXMnIHJlw6d1IgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICJkw6lww7R0ICclcycgbm9uIHRyb3V2w6kiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiw4ljaGVjIGQnYXV0aGVudGlmaWNhdGlvbiBwb3VyICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhY2PDqWRlciDDoCAnJXMnwqA6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAicmVkaXJlY3Rpb24gdmVycyAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo1OTMKK21zZ2lkICJzaG91bGRuJ3QgaGF2ZSBFT0Ygd2hlbiBub3QgZ2VudGxlIG9uIEVPRiIKK21zZ3N0ciAibmUgZGV2cmFpdCBwYXMgcmVjZXZvaXIgT0VGIHF1YW5kIG9uIG4nZXN0IHBhcyBnZW50aWwgc3VyIEVPRiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHJlbWJvYmluZXIgbGUgZG9ubsOpZXMgcG9zdCBycGMgLSBlc3NheWVyIGQnYXVnbWVudGVyIGh0dHAuIgorInBvc3RCdWZmZXIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICLDqWNoZWMgUlBDwqA7ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGfDqXJlciBkZXMgcG91c3PDqWVzIGF1c3NpIGdyb3NzZXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21wcmVzc2VyIGxhIHJlcXXDqnRlwqA7IGVycmV1ciBkZSBjb21wcmVzc2lvbiB6bGliICVkIgorCisjOiByZW1vdGUtY3VybC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb21wcmVzc2VyIGxhIHJlcXXDqnRlwqA7IGVycmV1ciBkZSBmaW4gemxpYiAlZCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJsZSBwcm90b2NvbGUgaHR0cCBpZGlvdCBuZSBzdXBwb3J0ZSBsYSBjYXBhY2l0w6kgc3VwZXJmaWNpZWxsZSIKKworIzogcmVtb3RlLWN1cmwuYzoxMDM3Cittc2dpZCAiZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiw6ljaGVjIGR1IHLDqWN1cMOpcmF0aW9uLiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg1Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIHBhciBzaGExIHN1ciBodHRwIGludGVsbGlnZW50IgorCisjOiByZW1vdGUtY3VybC5jOjExMjkgcmVtb3RlLWN1cmwuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiZXJyZXVyIGRlIHByb3RvY29sZcKgOiBzaGEvcmVmIGF0dGVuZHUsICclcycgdHJvdXbDqSIKKworIzogcmVtb3RlLWN1cmwuYzoxMTQ3IHJlbW90ZS1jdXJsLmM6MTI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIgorbXNnc3RyICJsZSB0cmFuc3BvcnQgaHR0cCBuZSBzdXBwb3J0ZSBwYXMgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4MworbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgZ2l0LWh0dHAtcHVzaCIKKworIzogcmVtb3RlLWN1cmwuYzoxMzY3Cittc2dpZCAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPHJlbW90ZT4gWzx1cmw+XSIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IHVzYWdlOiBnaXQgcmVtb3RlLWN1cmwgPGRpc3RhbnQ+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybMKgOiBlcnJldXIgZGUgbGVjdHVyZSBkdSBmbHV4IGRlIGNvbW1hbmRlIGRlcHVpcyBnaXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwNgorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgInJlbW90ZS1jdXJswqA6IHLDqWN1cMOpcmF0aW9uIHRlbnTDqWUgc2FucyBkw6lww7R0IGxvY2FsIgorCisjOiByZW1vdGUtY3VybC5jOjE0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybMKgOiBjb21tYW5kZSBpbmNvbm51ZSAnJXMnIGRlcHVpcyBnaXQiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg1Cittc2dpZCAiYXJncyIKK21zZ3N0ciAiYXJncyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICJmaWx0cmFnZSBkJ29iamV0IgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTgzCittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgImRhdGUtZCdleHBpcmF0aW9uIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICJzYW5zIGFjdGlvbiAocsOpdHJvY29tcGF0aWJpbGl0w6kpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICLDqnRyZSBwbHVzIHZlcmJldXgiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICLDqnRyZSBwbHVzIHNpbGVuY2lldXgiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTcKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAidXRpbGlzZXIgPG4+IGNoaWZmcmVzIHBvdXIgYWZmaWNoZXIgbGVzIFNIQS0xcyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNgorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgImNvbW1lbnQgw6lsaW1pbmVyIGxlcyBlc3BhY2VzIGV0IGxlcyBjb21tZW50YWlyZXMgIyBkdSBtZXNzYWdlIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM3Cittc2dpZCAicmVhZCBwYXRoc3BlYyBmcm9tIGZpbGUiCittc2dzdHIgImxpcmUgbGVzIHNww6ljaWZpY2F0ZXVycyBkZSBmaWNoaWVyIGRlcHVpcyBmaWNoaWVyIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJhdmVjIC0tcGF0aHNwZWMtZnJvbS1maWxlLCBsZXMgc3DDqWNpZmljYXRldXJzIGRlIGNoZW1pbiBzb250IHPDqXBhcsOpcyBwYXIgdW4gY2FyYWN0w6hyZSBOVUwiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgImNsw6kiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIm5vbSBkdSBjaGFtcCBzZXJ2YW50IMOgIHRyaWVyIgorCisjOiByZXJlcmUuaDo0NAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorIm1ldCDDoCBqb3VyIGwnaW5kZXggYXZlYyBsZXMgcsOpc29sdXRpb25zIGRlIGNvbmZsaXQgcsOpdXRpbGlzw6llcyBzaSBwb3NzaWJsZSIKKworIzogd3Qtc3RhdHVzLmg6NjcKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAiSEVBRCBkw6l0YWNow6llIHN1ciAiCisKKyM6IHd0LXN0YXR1cy5oOjY4Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiSEVBRCBkw6l0YWNow6llIGRlcHVpcyAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUwCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICJBam91dGVyIGxlIGNvbnRlbnUgZGUgZmljaGllcnMgZGFucyBsJ2luZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDo1MQorbXNnaWQgIkFwcGx5IGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSBhIG1haWxib3giCittc2dzdHIgIkFwcGxpcXVlciB1bmUgc8OpcmllIGRlIHBhdGNocyBkZXB1aXMgdW5lIGJvw650ZSBtYWlsIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIkFubm90ZXIgbGVzIGxpZ25lcyBkdSBmaWNoaWVyIGF2ZWMgbCdpbmZvcm1hdGlvbiBkZSBjb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUzCittc2dpZCAiQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4IgorbXNnc3RyICJBcHBsaXF1ZXIgdW5lIHBhdGNoIMOgIGRlcyBmaWNoaWVycyBvdSDDoCBsJ2luZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NAorbXNnaWQgIkltcG9ydCBhIEdOVSBBcmNoIHJlcG9zaXRvcnkgaW50byBHaXQiCittc2dzdHIgIkltcG9ydGVyIGRhbnMgR2l0IHVuIGTDqXDDtHQgR05VIEFyY2giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU1Cittc2dpZCAiQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUiCittc2dzdHIgIkNyw6llciB1bmUgYXJjaGl2ZSBkZXMgZmljaGllcnMgZGVwdWlzIHVuIGFyYnJlIG5vbW3DqSIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJUcm91dmVyIHBhciByZWNoZXJjaGUgYmluYWlyZSBsYSBtb2RpZmljYXRpb24gcXVpIGEgaW50cm9kdWl0IHVuIGJvZ3VlIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorIk1vbnRyZXIgbGEgcsOpdmlzaW9uIGV0IGwnYXV0ZXVyIHF1aSBvbnQgbW9kaWZpw6kgZW4gZGVybmllciBjaGFxdWUgbGlnbmUgZCd1biAiCisiZmljaGllciIKKworIzogY29tbWFuZC1saXN0Lmg6NTgKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiTGlzdGVyLCBjcsOpZXIgb3Ugc3VwcHJpbWVyIGRlcyBicmFuY2hlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAiRMOpcGxhY2VyIGxlcyBvYmpldHMgZXQgcsOpZsOpcmVuY2VzIHBhciBhcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgIiIKKyJGb3VybmlyIGxlcyBjb250ZW51IG91IGwnaW5mb3JtYXRpb24gZGUgdHlwZSBldCB0YWlsbGUgcG91ciBsZXMgb2JqZXRzIGR1ICIKKyJkw6lww7R0IgorCisjOiBjb21tYW5kLWxpc3QuaDo2MQorbXNnaWQgIkRpc3BsYXkgZ2l0YXR0cmlidXRlcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGluZm9ybWF0aW9ucyBnaXRhdHRyaWJ1dGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgIkTDqWJvZ3VlciBnaXRpZ25vcmUgLyBsZXMgZmljaGllcnMgZCdleGNsdXNpb24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYzCittc2dpZCAiU2hvdyBjYW5vbmljYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3NlcyBvZiBjb250YWN0cyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIG5vbXMgY2Fub25pcXVlcyBldCBsZXMgYWRyZXNzZXMgY291cnJpZWwgZGVzIGNvbnRhY3RzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQmFzY3VsZXIgZGUgYnJhbmNoZSBvdSByZXN0YXVyZXIgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkNvcGllciBsZXMgZmljaGllcnMgZGVwdWlzIGwnaW5kZXggZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NgorbXNnaWQgIkVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkIgorbXNnc3RyICJBc3N1cmUgcXUndW4gbm9tIGRlIHLDqWbDqXJlbmNlIGVzdCBiaWVuIGZvcm3DqSIKKworIzogY29tbWFuZC1saXN0Lmg6NjcKK21zZ2lkICJGaW5kIGNvbW1pdHMgeWV0IHRvIGJlIGFwcGxpZWQgdG8gdXBzdHJlYW0iCittc2dzdHIgIlRyb3V2ZXIgbGVzIGNvbW1pdHMgw6AgYXBwbGlxdWVyIGVuIGFtb250IgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICJBcHBsaXF1ZXIgbGVzIG1vZGlmaWNhdGlvbnMgaW50cm9kdWl0ZXMgcGFyIGRlcyBjb21taXRzIGV4aXN0YW50cyIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiQWx0ZXJuYXRpdmUgZ3JhcGhpcXVlIMOgIGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlN1cHByaW1lciBsZXMgZmljaGllcnMgbm9uLXN1aXZpcyBkZSBsJ2FyYnJlIGRlIHRyYXZhaWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJDbG9uZXIgdW4gZMOpcMO0dCBkYW5zIHVuIG5vdXZlYXUgcsOpcGVydG9pcmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcyCittc2dpZCAiRGlzcGxheSBkYXRhIGluIGNvbHVtbnMiCittc2dzdHIgIkFmZmljaGVyIGxlcyBkb25uw6llcyBlbiBjb2xvbm5lcyIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRW5yZWdpc3RyZXIgbGVzIG1vZGlmaWNhdGlvbnMgZGFucyBsZSBkw6lww7R0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgR2l0IGNvbW1pdC1ncmFwaCBmaWxlcyIKK21zZ3N0ciAiw4ljcmlyZSBldCB2w6lyaWZpZXIgbGVzIGZpY2hpZXJzIGRlIGdyYXBoZSBkZSBjb21taXQgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NQorbXNnaWQgIkNyZWF0ZSBhIG5ldyBjb21taXQgb2JqZWN0IgorbXNnc3RyICJDcsOpZXIgdW4gbm91dmVsIG9iamV0IGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzYKK21zZ2lkICJHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zIgorbXNnc3RyICJ2b2lyIGV0IHLDqWdsZXIgbGVzIG9wdGlvbnMgZ2xvYmFsZXMgb3UgZGUgZMOpcMO0dCIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAiIgorIkNvbXB0ZXIgbGUgbm9tYnJlIGQnb2JqZXRzIG5vbi1lbXBhcXVldMOpcyBldCBsZXVyIGNvbnNvbW1hdGlvbiBkJ2VzcGFjZSAiCisiZGlzcXVlIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICJSw6ljdXDDqXJlciBldCBzYXV2ZWdhcmRlciBsZXMgY2VydGlmaWNhdHMgZCd1dGlsaXNhdGV1ciIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiQXNzaXN0YW50IHBvdXIgbWFpbnRlbmlyIHRlbXBvcmFpcmVtZW50IGVuIG3DqW1vaXJlIGxlcyBtb3RzIGRlIHBhc3NlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICJBc3Npc3RhbnQgcG91ciBzYXV2ZWdhcmRlciBsZXMgY2VydGlmaWNhdHMgc3VyIGRpc3F1ZSIKKworIzogY29tbWFuZC1saXN0Lmg6ODEKK21zZ2lkICJFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0IgorbXNnc3RyICJFeHBvcnRlciB1biBjb21taXQgdW5pcXVlIGVuIGV4dHJhY3Rpb24gQ1ZTIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MgorbXNnaWQgIlNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlIgorbXNnc3RyICJTYXV2ZXIgdm9zIGRvbm7DqWVzIGRlcHVpcyB1biBhdXRyZSBTQ00gcXUnb24gYWltZSDDoCBoYcOvciIKKworIzogY29tbWFuZC1saXN0Lmg6ODMKK21zZ2lkICJBIENWUyBzZXJ2ZXIgZW11bGF0b3IgZm9yIEdpdCIKK21zZ3N0ciAiVW4gw6ltdWxhdGV1ciBkZSBzZXJ2ZXVyIENWUyBwb3VyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJVbiBzZXJ2ZXVyIHZyYWltZW50IHNpbXBsZSBwb3VyIGxlcyBkw6lww7R0cyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg1Cittc2dpZCAiR2l2ZSBhbiBvYmplY3QgYSBodW1hbiByZWFkYWJsZSBuYW1lIGJhc2VkIG9uIGFuIGF2YWlsYWJsZSByZWYiCittc2dzdHIgIiIKKyJCYXB0aXNlciB1biBvYmpldCBhdmVjIHVuIG5vbSBsaXNpYmxlIMOgIHBhcnRpciBkJ3VuZSByw6lmw6lyZW5jZSBkaXNwb25pYmxlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NgorbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKyJBZmZpY2hlciBsZXMgY2hhbmdlbWVudHMgZW50cmUgbGVzIHZhbGlkYXRpb25zLCBlbnRyZSB2YWxpZGF0aW9uIGV0IGNvcGllIGRlICIKKyJ0cmF2YWlsLCBldGMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICJDb21wYXJlIGRlcyBmaWNoaWVycyBkZSBsJ2FyYnJlIGRlIHRyYXZhaWwgZXQgZGUgbCdpbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJDb21wYXJlciB1biBhcmJyZSBhdmVjIGwnYXJicmUgZGUgdHJhdmFpbCBvdSBsJ2luZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDo4OQorbXNnaWQgIkNvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzIgorbXNnc3RyICJDb21wYXJlIGxlIGNvbnRlbnUgZXQgbGEgbW9kZSBkZXMgYmxvYnMgdHJvdXbDqXMgdmlhIGRldXggb2JqZXRzIGFyYnJlIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIG1vZGlmaWNhdGlvbnMgZW4gdXRpbGlzYW50IGxlcyBvdXRpbHMgaGFiaXR1ZWwgZGUgZGlmZiIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAiRXhwb3J0ZXVyIGRlIGRvbm7DqWVzIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAiTW90ZXVyIHBvdXIgbGVzIGltcG9ydGF0ZXVycyByYXBpZGVzIGRlIGRvbm7DqWVzIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJUw6lsw6ljaGFyZ2VyIGxlcyBvYmpldHMgZXQgcsOpZsOpcmVuY2VzIGRlcHVpcyB1biBhdXRyZSBkw6lww7R0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJUw6lsw6ljaGFyZ2VyIGxlcyBvYmpldHMgbWFucXVhbnRzIGRlcHVpcyB1biBhdXRyZSBkw6lww7R0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIlLDqcOpY3JpcmUgbGVzIGJyYW5jaGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiUHJvZHVpcmUgdW4gbWVzc2FnZSBkZSB2YWxpZGF0aW9uIGRlIGZ1c2lvbiIKKworIzogY29tbWFuZC1saXN0Lmg6OTcKK21zZ2lkICJPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYiCittc2dzdHIgIkFmZmljaGVyIGwnaW5mb3JtYXRpb24gZGUgY2hhcXVlIHLDqWbDqXJlbmNlIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OAorbXNnaWQgIlByZXBhcmUgcGF0Y2hlcyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24iCittc2dzdHIgIlByw6lwYXJlciBsZXMgcGF0Y2hzIHBvdXIgc291bWlzc2lvbiBwYXIgY291cnJpZWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICIiCisiVsOpcmlmaWVyIGxhIGNvbm5lY3Rpdml0w6kgZXQgbGEgdmFsaWRpdMOpIGRlcyBvYmpldHMgZGFucyBsYSBiYXNlIGRlIGRvbm7DqWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRWZmYWNlciBsZXMgZmljaGllcnMgbm9uLW7DqWNlc3NhaXJlcyBldCBvcHRpbWlzZXIgbGUgZMOpcMO0dCBsb2NhbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIkV4dHJhaXJlIGwnSUQgZHUgY29tbWl0IGRlcHVpcyB1bmUgYXJjaGl2ZSBjcsOpw6llIHBhciBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJBZmZpY2hlciBsZXMgbGlnbmVzIGNvcnJlc3BvbmRhbnQgw6AgdW4gbW90aWYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMworbXNnaWQgIkEgcG9ydGFibGUgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBHaXQiCittc2dzdHIgIlVuZSBpbnRlcmZhY2UgZ3JhcGhpcXVlIHBvcnRhYmxlIHBvdXIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDQKK21zZ2lkICJDb21wdXRlIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiIgorIkNhbGN1bGVyIGwnSUQgZCdvYmpldCBldCBjcsOpZXIgb3B0aW9ubmVsbGVtZW50IHVuIGJsb2IgZGVwdWlzIHVuIGZpY2hpZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNQorbXNnaWQgIkRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQiCittc2dzdHIgIkFmZmljaGVyIGwnaW5mb3JtYXRpb24gZCdhaWRlIMOgIHByb3BvcyBkZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIkltcGxhbnRhdGlvbiBjw7R0w6kgc2VydmV1ciBkZSBHaXQgc3VyIEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgIlTDqWzDqWNoYXJnZXIgZGVwdWlzIHVuIGTDqXDDtHQgR2l0IGRpc3RhbnQgdmlhIEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUG91c3NlciBsZXMgb2JqZXRzIHN1ciB1biBhdXRyZSBkw6lww7R0IHZpYSBIVFRQL0RBViIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICJFbnZveWVyIHVuIGVuc2VtYmxlIGRlIHBhdGNocyBkZXB1aXMgc3RkaW4gdmVycyB1biByw6lwZXJ0b2lyZSBJTUFQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTAKK21zZ2lkICJCdWlsZCBwYWNrIGluZGV4IGZpbGUgZm9yIGFuIGV4aXN0aW5nIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICIiCisiQ29uc3RydWlyZSB1biBmaWNoaWVyIGQnaW5kZXggcGFjayBkZXB1aXMgdW5lIGFyY2hpdmUgY29tcGFjdMOpZSBleGlzdGFudGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMQorbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICJDcsOpZXIgdW4gZMOpcMO0dCBHaXQgdmlkZSBvdSByw6lpbml0aWFsaXNlciB1biBleGlzdGFudCIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgIk5hdmlndWVyIGluc3RhbnRhbsOpbWVudCB2b3RyZSBkw6lww7R0IGRlIHRyYXZhaWwgZGFucyBnaXR3ZWIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMworbXNnaWQgIkFkZCBvciBwYXJzZSBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGluIGNvbW1pdCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorIkFqb3V0ZXIgb3UgYW5hbHlzZXIgbCdpbmZvcm1hdGlvbiBzdHJ1Y3R1csOpZSBkYW5zIGxlcyBtZXNzYWdlcyBkZSB2YWxpZGF0aW9uIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTQKK21zZ2lkICJUaGUgR2l0IHJlcG9zaXRvcnkgYnJvd3NlciIKK21zZ3N0ciAiTGUgbmF2aWdhdGV1ciBkZSBkw6lww7R0IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE1Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAiQWZmaWNoZXIgbCdoaXN0b3JpcXVlIGRlcyB2YWxpZGF0aW9ucyIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKyJBZmZpY2hlciBsJ2luZm9ybWF0aW9uIMOgIHByb3BvcyBkZXMgZmljaGllcnMgZGFucyBsJ2luZGV4IG91IGwnYXJicmUgZGUgIgorInRyYXZhaWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IgorbXNnc3RyICJMaXN0ZXIgbGVzIHLDqWbDqXJlbmNlcyBkYW5zIHVuIGTDqXDDtHQgZGlzdGFudCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE4Cittc2dpZCAiTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCIKK21zZ3N0ciAiQWZmaWNoZXIgbGUgY29udGVudSBkJ3VuIG9iamV0IGFyYnJlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICIiCisiRXh0cmFpcmUgbGUgcGF0Y2ggZXQgbCdpbmZvcm1hdGlvbiBkZSBkJ2F1dGV1ciBkZXB1aXMgdW4gc2ltcGxlIG1lc3NhZ2UgZGUgIgorImNvdXJyaWVsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgIlByb2dyYW1tZSBzaW1wbGUgZGUgZMOpY291cGFnZSBkZSBtYm94IFVOSVgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJGdXNpb25uZXIgZGV1eCBvdSBwbHVzaWV1cnMgaGlzdG9yaXF1ZXMgZGUgZMOpdmVsb3BwZW1lbnQgZW5zZW1ibGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICJUcm91dmVyIHVuIGFuY8OqdHJlIGF1c3NpIGJvbiBxdWUgcG9zc2libGUgcG91ciB1bmUgZnVzaW9uIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAiTGFuY2VyIHVuZSBmdXNpb24gw6AgMyBwb2ludHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorbXNnaWQgIlJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmciCittc2dzdHIgIkxhbmNlciB1bmUgZnVzaW9uIMOgIDMgcG9pbnRzIHBvdXIgbGVzIGZpY2hpZXJzIMOgIGZ1c2lvbm5lciIKKworIzogY29tbWFuZC1saXN0Lmg6MTI1Cittc2dpZCAiVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleCIKK21zZ3N0ciAiTGUgcHJvZ3JhbW1lIGFzc2lzdGFudCBzdGFuZGFyZCDDoCB1dGlsaXNlciBhdmVjIGdpdC1tZXJnZS1pbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgIiIKKyJMYW5jZXIgbGVzIG91dGlscyBkZSByw6lzb2x1dGlvbiBkZSBjb25mbGl0IGRlIGZ1c2lvbiBwb3VyIHLDqXNvdWRyZSBsZXMgIgorImNvbmZsaXRzIGRlIGZ1c2lvbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiQWZmaWNoZXIgbGEgZnVzaW9uIMOgIHRyb2lzIHBvaW50cyBzYW5zIG1vZGlmaWVyIGwnaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICLDiWNyaXJlIGV0IHbDqXJpZmllciBsZXMgaW5kZXggbXVsdGktcGFxdWV0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjkKK21zZ2lkICJDcmVhdGVzIGEgdGFnIG9iamVjdCIKK21zZ3N0ciAiQ3LDqWVyIHVuIG9iamV0IMOpdGlxdWV0dGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICJDb25zdHJ1aXJlIHVuIG9iamV0IGFyYnJlIGRlcHVpcyB1bmUgdGV4dGUgZm9ybWF0w6kgY29tbWUgbHMtdHJlZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJEw6lwbGFjZXIgb3UgcmVub21tZXIgdW4gZmljaGllciwgdW4gcsOpcGVydG9pcmUsIG91IHVuIGxpZW4gc3ltYm9saXF1ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMyCittc2dpZCAiRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cyIKK21zZ3N0ciAiVHJvdXZlciBsZXMgbm9tcyBzeW1ib2xpcXVlcyBwb3VyIGRlcyByw6l2aXNpb25zIGRvbm7DqWVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzMKK21zZ2lkICJBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMiCittc2dzdHIgIkFqb3V0ZXIgb3UgaW5zcGVjdGVyIGxlcyBub3RlcyBkJ3VuIG9iamV0cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgIkltcG9ydGVyIGV0IHNvdW1ldHRyZSDDoCBkZXMgZMOpcMO0dCBQZXJmb3JjZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM1Cittc2dpZCAiQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBhcmNoaXZlIGNvbXBhY3TDqWUgZCdvYmpldHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNgorbXNnaWQgIkZpbmQgcmVkdW5kYW50IHBhY2sgZmlsZXMiCittc2dzdHIgIlRyb3V2ZXIgbGVzIGZpY2hpZXJzIHBhY2sgcmVkb25kYW50cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM3Cittc2dpZCAiUGFjayBoZWFkcyBhbmQgdGFncyBmb3IgZWZmaWNpZW50IHJlcG9zaXRvcnkgYWNjZXNzIgorbXNnc3RyICJFbXBhcXVldGVyIGxlcyB0w6p0ZXMgZXQgbGVzIMOpdGlxdWV0dGVzIHBvdXIgdW4gYWNjw6hzIGVmZmljYWNlIGF1IGTDqXDDtHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOAorbXNnaWQgIlJvdXRpbmVzIHRvIGhlbHAgcGFyc2luZyByZW1vdGUgcmVwb3NpdG9yeSBhY2Nlc3MgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorIlJvdXRpbmVzIHBvdXIgYWlkZXIgw6AgYW5hbHlzZXIgbGVzIHBhcmFtw6h0cmVzIGQnYWNjw6hzIGF1eCBkw6lww7R0cyBkaXN0YW50cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgIkNhbGN1bGVyIGwnSUQgdW5pcXVlIGQndW4gcGF0Y2giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorIsOJbGltaW5lciBsZXMgb2JqZXRzIGluYXR0ZWlnbmFibGVzIGRlcHVpcyBsYSBiYXNlIGRlIGRvbm7DqWVzIGRlcyBvYmpldHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAiw4lsaW1pbmVyIGxlcyBvYmpldHMgcXVpIHNvbnQgZMOpasOgIHByw6lzZW50cyBkYW5zIGxlcyBmaWNoaWVycyBwYWNrIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDIKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIlJhcGF0cmllciBldCBpbnTDqWdyZXIgdW4gYXV0cmUgZMOpcMO0dCBvdSB1bmUgYnJhbmNoZSBsb2NhbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiTWV0dHJlIMOgIGpvdXIgbGVzIHLDqWbDqXJlbmNlcyBkaXN0YW50ZXMgYWluc2kgcXVlIGxlcyBvYmpldHMgYXNzb2Npw6lzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIkFwcGxpcXVlciB1biBwYXRjaHNldCBxdWlsdCBzdXIgbGEgYnJhbmNoZSBjb3VyYW50ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICIiCisiQ29tcGFyZXIgZGV1eCBwbGFnZXMgZGUgY29tbWl0cyAocGFyIGV4ZW1wbGUgZGV1eCB2ZXJzaW9ucyBkJ3VuZSBicmFuY2hlKSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ2Cittc2dpZCAiUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleCIKK21zZ3N0ciAiTGlyZSBsJ2luZm9ybWF0aW9uIGQnYXJicmUgZGFucyBsJ2luZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDcKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIlLDqWFwcGxpY2F0aW9uIGRlcyBjb21taXRzIHN1ciBsZSBzb21tZXQgZGUgbCdhdXRyZSBiYXNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKK21zZ2lkICJSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIlJlY2V2b2lyIGNlIHF1aSBlc3QgcG91c3PDqSBkYW5zIGxlIGTDqXDDtHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIkfDqXJlciBsJ2luZm9ybWF0aW9uIGRlIHJlZmxvZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUwCittc2dpZCAiTWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiR8OpcmVyIHVuIGVuc2VtYmxlIGRlIGTDqXDDtHRzIHN1aXZpcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTUxCittc2dpZCAiUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRW1wYXF1ZXRlciBsZXMgb2JqZXRzIG5vbi1lbXBhcXVldMOpcyBkJ3VuIGTDqXDDtHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICJDcsOpZXIsIGxpc3Rlciwgc3VwcHJpbWVyIGRlcyByw6lmw6lyZW5jZSBwb3VyIHJlbXBsYWNlciBkZXMgb2JqZXRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAiR8OpbsOpcmVyIHVuZSByw6lzdW3DqSBkZXMgbW9kaWZpY2F0aW9ucyBlbiBhdHRlbnRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAiUsOpdXRpbGlzZXIgdW5lIHLDqXNvbHV0aW9uIGVucmVnaXN0csOpZSBkZSBmdXNpb25zIGNvbmZsaWN0dWVsbGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzZXIgbGEgSEVBRCBjb3VyYW50ZSDDoCBsJ8OpdGF0IHNww6ljaWZpw6kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJyZXN0YXVyZXIgbGVzIGZpY2hpZXJzIGwnYXJicmUgZGUgdHJhdmFpbCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU3Cittc2dpZCAiUmV2ZXJ0IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAiSW52ZXJzZXIgZGVzIGNvbW1pdHMgZXhpc3RhbnRzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIkFmZmljaGVyIGxlcyBvYmpldHMgY29tbWl0IGRhbnMgbCdvcmRyZSBjaHJvbm9sb2dpcXVlIGludmVyc2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIkFuYWx5c2VyIGV0IHByw6lwYXJlciBsZXMgcGFyYW3DqHRyZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MAorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJTdXBwcmltZXIgZGVzIGZpY2hpZXJzIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwgZXQgZGUgbCdpbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgIkVudm95ZXIgdW4gZW5zZW1ibGUgZGUgcGF0Y2hzIGNvbW1lIGNvdXJyaWVscyIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgR2l0IHByb3RvY29sIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUG91c3NlciBsZXMgb2JqZXRzIHN1ciB1biBhdXRyZSBkw6lww7R0IHZpYSBsZSBwcm90b2NvbGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjMKK21zZ2lkICJSZXN0cmljdGVkIGxvZ2luIHNoZWxsIGZvciBHaXQtb25seSBTU0ggYWNjZXNzIgorbXNnc3RyICJzaGVsbCBkZSBsb2dpbiByZXN0cmVpbnQgcG91ciB1biBhY2PDqHMgU1NIIHZlcnMgR2l0IHNldWxlbWVudCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY0Cittc2dpZCAiU3VtbWFyaXplICdnaXQgbG9nJyBvdXRwdXQiCittc2dzdHIgIlLDqXN1bWVyIGxhIHNvcnRpZSBkZSAnZ2l0IGxvZyciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICJBZmZpY2hlciBkaWZmw6lyZW50cyB0eXBlcyBkJ29iamV0cyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGJyYW5jaGVzIGV0IGxldXJzIGNvbW1pdHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NworbXNnaWQgIlNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgiCittc2dzdHIgIkFmZmljaGVyIGwnaW5kZXggZGUgbCdhcmNoaXZlIGVtcGFxdWV0w6llIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjgKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJMaXN0ZXIgbGVzIHLDqWbDqXJlbmNlcyBkdSBkw6lww7R0IGxvY2FsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMiCittc2dzdHIgIkxlIGNvZGUgZCdpbml0aWFsaXNhdGlvbiBpMThuIHBvdXIgbGVzIHNjcmlwdHMgc2hlbGwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MAorbXNnaWQgIkNvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUiCittc2dzdHIgIkxlIGNvZGUgZCdpbml0aWFsaXNhdGlvbiBjb21tdW4gYXV4IHNjcmlwdHMgc2hlbGwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiSW5pdGlhbGlzZXIgZXQgbW9kaWZpZXIgbCdleHRyYWN0aW9uIHBhcnRpZWxsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTcyCittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICJSZW1pc2VyIGxlcyBtb2RpZmljYXRpb25zIGQndW4gcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBzYWxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzMKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICJBam91dGVyIGxlIGNvbnRlbnUgZGUgZmljaGllcnMgw6AgbCdpbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc0Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiQWZmaWNoZXIgbCfDqXRhdCBkZSBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzUKK21zZ2lkICJSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSIKK21zZ3N0ciAiUmV0aXJlciBsZXMgZXNwYWNlcyBpbnV0aWxlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAiSW5pdGlhbGlzZXIsIG1ldHRyZSDDoCBqb3VyIGV0IGluc3BlY3RlciBsZXMgc291cy1tb2R1bGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzcKK21zZ2lkICJCaWRpcmVjdGlvbmFsIG9wZXJhdGlvbiBiZXR3ZWVuIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGFuZCBHaXQiCittc2dzdHIgIk9ww6lyYXRpb24gQmlkaXJlY3Rpb25uZWxsZXMgZW50cmUgdW4gZMOpcMO0dCBTdWJ2ZXJzaW9uIGV0IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc4Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIgorbXNnc3RyICJCYXNjdWxlciBkZSBicmFuY2hlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJMaXJlLCBtb2RpZmllciBldCBzdXBwcmltZXIgbGVzIHLDqWbDqXJlbmNlcyBzeW1ib2xpcXVlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKyJDcsOpZXIsIGxpc3Rlciwgc3VwcHJpbWVyIG91IHbDqXJpZmllciB1biBvYmpldCBkJ8OpdGlxdWV0dGUgc2lnbsOpIGF2ZWMgR1BHIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODEKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAiQ3LDqWVyIHVuIGZpY2hpZXIgdGVtcG9yYWlyZSBhdmVjIGxlIGNvbnRlbnUgZCd1biBibG9iIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODIKK21zZ2lkICJVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIkTDqXBhcXVldGVyIGxlcyBvYmpldHMgZGVwdWlzIHVuZSBhcmNoaXZlIGVtcGFxdWV0w6llIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODMKK21zZ2lkICJSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4IgorbXNnc3RyICJFbnJlZ2lzdHJlciBsZSBjb250ZW51IGQndW4gZmljaGllciBkZSBsJ2FyYnJlIGRlIHRyYXZhaWwgZGFucyBsJ2luZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIiIKKyJNZXR0cmUgw6Agam91ciBsZSBub20gZCdvYmpldCBzdG9ja8OpIGRhbnMgdW5lIHLDqWbDqXJlbmNlIGVuIHRvdXRlIHPDqWN1cml0w6kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICIiCisiTWV0dHJlIMOgIGpvdXIgbGUgZmljaGllciBkJ2luZm9ybWF0aW9ucyBhdXhpbGlhaXJlcyBwb3VyIGFpZGVyIGxlcyBzZXJ2ZXVycyAiCisiaWRpb3RzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiUmVudm95ZXIgdW5lIGFyY2hpdmUgZGFucyBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICJSZW52b3llciBkZXMgb2JqZXRzIGVtcGFxdWV0w6lzIGRhbnMgZ2l0LWZldGNoLXBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OAorbXNnaWQgIlNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZSIKK21zZ3N0ciAiQWZmaWNoZXIgdW4gdmFyaWFibGUgbG9naXF1ZSBkZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgIlbDqXJpZmllciBsYSBzaWduYXR1cmUgR1BHIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MAorbXNnaWQgIlZhbGlkYXRlIHBhY2tlZCBHaXQgYXJjaGl2ZSBmaWxlcyIKK21zZ3N0ciAiVmFsaWRlciBkZXMgZmljaGllcnMgZCdhcmNoaXZlIEdpdCBlbXBhcXVldMOpcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTkxCittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAiVsOpcmlmaWVyIGxhIHNpZ25hdHVyZSBHUEcgZCfDqXRpcXVldHRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTkyCittc2dpZCAiR2l0IHdlYiBpbnRlcmZhY2UgKHdlYiBmcm9udGVuZCB0byBHaXQgcmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAiSW50ZXJmYWNlIHdlYiBkZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIlNob3cgbG9ncyB3aXRoIGRpZmZlcmVuY2UgZWFjaCBjb21taXQgaW50cm9kdWNlcyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGpvdXJuYXV4IGF2ZWMgbGEgZGlmZsOpcmVuY2UgcXVlIGNoYXF1ZSBjb21taXQgaW50cm9kdWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiR8OocmUgZGUgYXJicmVzIGRlIHRyYXZhaWwgbXVsdGlwbGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJDcsOpZXIgdW4gb2JqZXQgYXJicmUgZGVwdWlzIGwnaW5kZXggY291cmFudCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiRMOpZmluaXRpb24gZGVzIGF0dHJpYnV0cyBwYXIgY2hlbWluIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTcKK21zZ2lkICJHaXQgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMiCittc2dzdHIgImludGVyZmFjZSBlbiBsaWduZSBkZSBjb21tYW5kZSBldCBjb252ZW50aW9ucyBkZSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgIlR1dG9yaWVsIGR1IGPFk3VyIGRlIEdpdCBwb3VyIGxlcyBkw6l2ZWxvcHBldXJzIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiR2l0IHBvdXIgbGVzIHV0aWxpc2F0ZXVycyBkZSBDVlMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICJCaWRvdWlsbGFnZSBkZSBsYSBzb3J0aWUgZGlmZiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAxCittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAiVW4gZW5zZW1ibGUgbWluaW1hbCB1dGlsZSBkZXMgY29tbWFuZGVzIGRlIEdpdCBwb3VyIHRvdXMgbGVzIGpvdXJzIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDIKK21zZ2lkICJBIEdpdCBHbG9zc2FyeSIKK21zZ3N0ciAiVW4gZ2xvc3NhaXJlIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAzCittc2dpZCAiSG9va3MgdXNlZCBieSBHaXQiCittc2dzdHIgIkNyb2NoZXRzIHV0aWxpc8OpcyBwYXIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDQKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICJTcMOpY2lmaWUgbGVzIGZpY2hpZXJzIG5vbi1zdWl2aXMgw6AgaWdub3JlciBpbnRlbnRpb25uZWxsZW1lbnQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICJEw6lmaW5pdGlvbiBkZXMgcHJvcHJpw6l0w6lzIGRlIHNvdXMtbW9kdWxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDYKK21zZ2lkICJHaXQgbmFtZXNwYWNlcyIKK21zZ3N0ciAiRXNwYWNlcyBkZSBub20gZGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDcKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSBMYXlvdXQiCittc2dzdHIgIkRpc3Bvc2l0aW9uIGQndW4gZMOpcMO0dCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOAorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiU3DDqWNpZmljYXRpb24gZGVzIHLDqXZpc2lvbnMgZXQgcG9ydMOpZXMgcG91ciBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOQorbXNnaWQgIk1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyIgorbXNnc3RyICJNb250YWdlIGQndW4gZMOpcMO0dCBkYW5zIHVuIGF1dHJlIGTDqXDDtHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdDogcGFydCB0d28iCittc2dzdHIgIlVuZSBpbnRyb2R1Y3Rpb24gcHJhdGlxdWUgw6AgR2l0wqA6IGRldXhpw6htZSBwYXJ0aWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMQorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCIKK21zZ3N0ciAiVW5lIGludHJvZHVjdGlvbiBwcmF0aXF1ZSDDoCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMgorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiVW4gYXBlcsOndSBkZXMgZmx1eCBkZSB0cmF2YWlsIHJlY29tbWFuZMOpcyBhdmVjIEdpdCIKKworIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJWb3VzIGRldmV6IGTDqW1hcnJlciBhdmVjIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIlNvdWhhaXRlei12b3VzIHF1ZSBqZSBsZSBmYXNzZSBwb3VyIHZvdXMgW1kvbl0gPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJNYXV2YWlzZSByw6l2aXNpb24gZW4gZW50csOpZSA6ICRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MTIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYmlzZWN0ZWRfaGVhZCIKK21zZ3N0ciAiTWF1dmFpc2UgcsOpdmlzaW9uIGVuIGVudHLDqWUgOiAkYmlzZWN0ZWRfaGVhZCIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIk1hdXZhaXNlIHLDqXZpc2lvbiBlbiBlbnRyw6llIDogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIG4nYWNjZXB0ZSBxdSd1biBzZXVsIGFyZ3VtZW50LiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJQYXMgZGUgZmljaGllciBkZSBsb2cgZG9ubsOpIgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICRmaWxlIHBvdXIgcmVqb3VlciIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IGRlIHF1b2kgcGFybGV6LXZvdXMgPyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgImxhIGJpc3NlY3Rpb24gYSDDqWNob3XDqcKgOiBhdWN1bmUgY29tbWFuZGUgZm91cm5pZS4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJsYW5jZW1lbnQgZGUgJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyJsYSBiaXNzZWN0aW9uIGEgw6ljaG91w6kgOlxuIgorImxlIGNvZGUgcmV0b3VyICRyZXMgZGUgJyRjb21tYW5kJyBlc3QgPCAwIG91ID49IDEyOCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzkKK21zZ2lkICJiaXNlY3QgcnVuIGNhbm5vdCBjb250aW51ZSBhbnkgbW9yZSIKK21zZ3N0ciAibGEgYmlzc2VjdGlvbiBuZSBwZXV0IHBsdXMgY29udGludWVyIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJsYSBiaXNzZWN0aW9uIGEgw6ljaG91w6kgOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBhIHJldG91cm7DqSBsZSBjb2RlIGVycmV1ciAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAic3VjY8OocyBkZSBsYSBiaXNzZWN0aW9uIgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiUGFzIGRlIGJpc3NlY3Rpb24gZW4gY291cnMuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiRXJyZXVywqA6IHZvcyBtb2RpZmljYXRpb25zIGxvY2FsZXMgYXV4IGZpY2hpZXJzIHN1aXZhbnRzIHNlcmFpZW50IMOpY3Jhc8OpZXMgIgorInBhciBsYSBmdXNpb24iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkxhIGZ1c2lvbiBhdXRvbWF0aXF1ZSBhIMOpY2hvdcOpLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICJMJ09jdG9wdXMgbmUgZGV2cmFpdCBwYXMgYXJyaXZlci4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgdW4gY29tbWl0IGNvbW11biBhdmVjICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiRMOpasOgIMOgIGpvdXIgYXZlYyAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIGVuIGF2YW5jZSByYXBpZGUgc3VyICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIkVzc2FpIGRlIGZ1c2lvbiBzaW1wbGUgYXZlYyAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICJMYSBmdXNpb24gc2ltcGxlIGEgw6ljaG91w6ksIGVzc2FpIGF2ZWMgbGEgZnVzaW9uIGF1dG9tYXRpcXVlLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbCdpbmRleCB0ZW1wb3JhaXJlIChuZSBwZXV0IHBhcyBzZSBwcm9kdWlyZSkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIkltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgJHJlZl9zdGFzaCBhdmVjICR3X2NvbW1pdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICJlcnJldXLCoDogb3B0aW9uIGluY29ubnVlIHBvdXIgJ3N0YXNoIHB1c2gnwqA6ICRvcHRpb24iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJHN0YXNoX21zZyIKK21zZ3N0ciAiQ29waWUgZGUgdHJhdmFpbCBldCDDqXRhdCBkZSBsJ2luZGV4IHNhdXZlZ2FyZMOpcyBkYW5zICRzdGFzaF9tc2ciCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAib3B0aW9uIGluY29ubnVlwqA6ICRvcHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJUcm9wIGRlIHLDqXZpc2lvbnMgc3DDqWNpZmnDqWVzIDogJFJFViIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIG4nZXN0IHBhcyB1bmUgcsOpZsOpcmVuY2UgdmFsaWRlIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBuJ2VzdCBwYXMgdW5lIHZhbGlkYXRpb24gZGUgdHlwZSByZW1pc2FnZSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIG4nZXN0IHBhcyB1bmUgcsOpZsOpcmVuY2UgZGUgcmVtaXNhZ2UiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImltcG9zc2libGUgZGUgcmFmcmHDrmNoaXIgbCdpbmRleCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjIKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIkltcG9zc2libGUgZCdhcHBsaXF1ZXIgdW4gcmVtaXNhZ2UgZW4gY291cnMgZGUgZnVzaW9uIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIkNvbmZsaXRzIGRhbnMgbCdpbmRleC4gRXNzYXlleiBzYW5zIC0taW5kZXguIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMgorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIkltcG9zc2libGUgZGUgc2F1dmVnYXJkZXIgbCdhcmJyZSBkJ2luZGV4IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY0MQorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSByZXN0YXVyZXIgbGVzIGZpY2hpZXJzIG5vbi1zdWl2aXMgZGVwdWlzIGwnZW50csOpZSBkZSByZW1pc2FnZSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6lzaW5kZXhlciBsZXMgZmljaGllcnMgbW9kaWZpw6lzIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiJHtSRVZ9IHN1cHByaW3DqSAoJHMpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsJ2VudHLDqWUgZGUgc3Rhc2giCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzkyCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoUG91ciBsZXMgcmVzdGF1cmVyIHRhcGV6IFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIwMgorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiVW4gY2hlbWluIHJlbGF0aWYgbmUgcGV1dCDDqnRyZSB1dGlsaXPDqSBxdWUgZGVwdWlzIGxhIHJhY2luZSBkZSBsYSBjb3BpZSBkZSAiCisidHJhdmFpbCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIkwnVVJMIGRlIGTDqXDDtHQgJyRyZXBvJyBkb2l0IMOqdHJlIGFic29sdSBvdSBjb21tZW5jZXIgcGFyIC4vfC4uLyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIGV4aXN0ZSBkw6lqw6AgZGFucyBsJ2luZGV4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyBleGlzdGUgZMOpasOgIGRhbnMgbCdpbmRleCBldCBuJ2VzdCBwYXMgdW4gc291cy1tb2R1bGUiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIickc21fcGF0aCcgbidhIHBhcyBkZSBjb21taXQgZXh0cmFpdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiTGUgY2hlbWluIHN1aXZhbnQgZXN0IGlnbm9yw6kgcGFyIHVuIGRlIHZvcyBmaWNoaWVycyAuZ2l0aWdub3JlIDpcbiIKKyIkc21fcGF0aFxuIgorIlV0aWxpc2V6IC1mIHNpIHZvdXMgdm91bGV6IHZyYWltZW50IGwnYWpvdXRlci4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQWpvdXQgZHUgZMOpcMO0dCBleGlzdGFudCDDoCAnJHNtX3BhdGgnIGRhbnMgbCdpbmRleCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIGV4aXN0ZSBkw6lqw6AgZXQgbidlc3QgcGFzIHVuIGTDqXDDtHQgZ2l0IHZhbGlkZSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorIlVuIHLDqXBlcnRvaXJlIGdpdCBwb3VyICckc21fbmFtZScgZXN0IHRyb3V2w6kgZW4gbG9jYWwgYXZlYyBsZShzKSBzZXJ2ZXVyKHMpICIKKyJkaXN0YW50KHMpIDoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCAiCisicmVwb1xuIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisiU2kgdm91cyB2b3VsZXogcsOpdXRpbGlzZXIgY2UgcsOpcGVydG9pcmUgbG9jYWwgZ2l0IGF1IGxpZXUgZGUgbGUgcmVjbG9uZXIgIgorImRlcHVpc1xuIgorIiAgJHJlYWxyZXBvXG4iCisidXRpbGlzZXogbCdvcHRpb24gJy0tZm9yY2UnLiBTaSBsZSByw6lwZXJ0b2lyZSBsb2NhbCBnaXQgbidlc3QgcGFzIGxlIGTDqXDDtHQgIgorImNvcnJlY3RcbiIKKyJvdSBzaSBjZWNpIG4nZXN0IHBhcyBjbGFpciwgY2hvaXNpc3NleiB1biBhdXRyZSBub20gYXZlYyBsJ29wdGlvbiAnLS1uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjg4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICJSw6lhY3RpdmF0aW9uIGR1IHLDqXBlcnRvaXJlIGdpdCBsb2NhbCBwb3VyIGxlIHNvdXMtbW9kdWxlICckc21fbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnZXh0cmFpcmUgbGUgc291cy1tb2R1bGUgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIsOJY2hlYyBkJ2Fqb3V0IGR1IHNvdXMtbW9kdWxlICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIsOJY2hlYyBkJ2VucmVnaXN0cmVtZW50IGR1IHNvdXMtbW9kdWxlICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIHLDqXZpc2lvbiBjb3VyYW50ZSBkYW5zIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAiCisiJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByYXBhdHJpZXIgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAiCisiJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgdHJvdXZlciBsYSByw6l2aXNpb24gY291cmFudGUgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IGRhbnMgbGUgIgorImNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxMworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoICIKKyIkc2hhMToiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHJhcGF0cmllciBkYW5zIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJ8KgOyBlc3NhaSAiCisiZGUgcmFwYXRyaWVtZW50IGRpcmVjdCBkZSAkc2hhMcKgOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyJDaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCcgcsOpY3Vww6lyw6ksIG1haXMgaWwgbmUgY29udGVuYWl0IHBhcyAiCisiJHNoYTEuIExhIHLDqWN1cMOpcmF0aW9uIGRpcmVjdGUgZGUgY2UgY29tbWl0IGEgw6ljaG91w6kuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGQnZXh0cmFpcmUgJyRzaGExJyBkYW5zIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJDaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCcgOiAnJHNoYTEnIGV4dHJhaXQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHJlYmFzZXIgJyRzaGExJyBkYW5zIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiQ2hlbWluIGRlIHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIDogcmViYXPDqSBkYW5zICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgZnVzaW9ubmVyICckc2hhMScgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIkNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyA6IGZ1c2lvbm7DqSBkYW5zICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJMJ2V4w6ljdXRpb24gZGUgJyRjb21tYW5kICRzaGExJyBhIMOpY2hvdcOpIGRhbnMgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJDaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCcgOiAnJGNvbW1hbmQgJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiw4ljaGVjIGRlIHBhcmNvdXJzIGRhbnMgbGUgY2hlbWluIGR1IHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg4NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIkwnb3B0aW9uIC0tY2FjaGVkIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpZSBhdmVjIGwnb3B0aW9uIC0tZmlsZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIm1vZGUgJG1vZF9kc3QgaW5hdHRlbmR1IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIEF0dGVudGlvbiA6ICRkaXNwbGF5X25hbWUgbmUgY29udGllbnQgcGFzIGxhIHZhbGlkYXRpb24gJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2MQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIEF0dGVudGlvbiA6ICRkaXNwbGF5X25hbWUgbmUgY29udGllbnQgcGFzIGxhIHZhbGlkYXRpb24gJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICBBdHRlbnRpb24gOiAkZGlzcGxheV9uYW1lIG5lIGNvbnRpZW50IHBhcyBsZXMgdmFsaWRhdGlvbnMgJHNoYTFfc3JjIGV0ICIKKyIkc2hhMV9kc3QiCisKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiUsOpZsOpcmV6LXZvdXMgw6AgZ2l0LSR7Y21kfSgxKSBwb3VyIGRlIHBsdXMgYW1wbGVzIGTDqXRhaWxzLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwOQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiQXV0b3JlbWlzYWdlIGFwcGxpcXXDqS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdG9ja2VyICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICJSZWJhc2FnZSAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkNvbW1hbmRlc8KgOlxuIgorIiBwLCBwaWNrIDxjb21taXQ+ID0gdXRpbGlzZXIgbGUgY29tbWl0XG4iCisiIHIsIHJld29yZCA8Y29tbWl0PiA9IHV0aWxpc2VyIGxlIGNvbW1pdCwgbWFpcyByZWZvcm11bGVyIHNvbiBtZXNzYWdlXG4iCisiIGUsIGVkaXQgPGNvbW1pdD4gPSB1dGlsaXNlciBsZSBjb21taXQsIG1haXMgcydhcnLDqnRlciBwb3VyIGxlIG1vZGlmaWVyXG4iCisiIHMsIHNxdWFzaCA8Y29tbWl0PiA9IHV0aWxpc2VyIGxlIGNvbW1pdCwgbWFpcyBsZSBmdXNpb25uZXIgYXZlYyBsZSAiCisicHLDqWPDqWRlbnRcbiIKKyIgZiwgZml4dXAgPGNvbW1pdD4gPSBjb21tZSBcInNxdWFzaFwiLCBtYWlzIGVuIMOpbGltaW5hbnQgc29uIG1lc3NhZ2VcbiIKKyIgeCwgZXhlYyA8Y29tbWl0PiA9IGxhbmNlciBsYSBjb21tYW5kZSAocmVzdGUgZGUgbGEgbGlnbmUpIGRhbnMgdW4gc2hlbGxcbiIKKyIgZCwgZHJvcCA8Y29tbWl0PiA9IHN1cHByaW1lciBsZSBjb21taXRcbiIKKyIgbCwgbGFiZWwgPGxhYmVsPiA9IMOpdGlxdWV0ZXIgbGEgSEVBRCBjb3VyYW50ZSBhdmVjIHVuIG5vbVxuIgorIiB0LCByZXNldCA8bGFiZWw+ID0gcsOpaW5pdGlhbGlzZXIgSEVBRCDDoCBsYWJlbFxuIgorIiBtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8dW5pbGlnbmU+XVxuIgorIiAgICAgICAgIGNyw6llciB1biBjb21taXQgZGUgZnVzaW9uIHV0aWxpc2FudCBsZSBtZXNzYWdlIGRlIGZ1c2lvbiBvcmlnaW5hbFxuIgorIiAgICAgICAgIChvdSBsJ3VuaWxpZ25lLCBzaSBhdWN1biBjb21taXQgZGUgZnVzaW9uIG4nYSDDqXTDqSBzcMOpY2lmacOpKS5cbiIKKyIgICAgICAgICBVdGlsaXNleiAtYyA8Y29tbWl0PiBwb3VyIHJlZm9ybXVsZXIgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uLlxuIgorIlxuIgorIlZvdXMgcG91dmV6IHLDqW9yZG9ubmVyIGNlcyBsaWduZXPCoDsgZWxsZXMgc29udCBleMOpY3V0w6llcyBkZSBoYXV0IGVuIGJhcy5cbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiVm91cyBwb3V2ZXogY29ycmlnZXIgbGUgY29tbWl0IG1haW50ZW5hbnQsIGF2ZWNcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorImFwcsOocyBhdm9pciByw6lhbGlzw6kgdm9zIG1vZGlmaWNhdGlvbnMsIGxhbmNlelxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Mjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTEgbidlc3QgcGFzIHVuIGNvbW1pdCBxdWkgcGV1dCDDqnRyZSBwaWNvcmVyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAiTm9tIGRlIGNvbW1pdCBpbnZhbGlkZcKgOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2NAorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIkltcG9zc2libGUgZGUgc2F1dmVyIGxlIHNoYTEgZHUgcmVtcGxhw6dhbnQgZHUgY29tbWl0IGVuIGNvdXJzIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIkF2YW5jZSByYXBpZGUgc3VyICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJBdmFuY2UgcmFwaWRlIGltcG9zc2libGUgc3VyICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpcGxhY2VyIEhFQUQgc3VyICRmaXJzdF9wYXJlbnQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAiUmVmdXMgZCfDqWNyYXNlciB1biBjb21taXQgZGUgZnVzaW9uOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgcsOpYXBwbGljYXRpb24gZGUgbGEgZnVzaW9uICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBwaWNvcmVyICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgIkNlY2kgZXN0IGxlICR7bn1pw6htZSBtZXNzYWdlIGRlIHZhbGlkYXRpb27CoDoiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJMZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gJHtufSBzZXJhIGlnbm9yw6nCoDoiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAiQ2VjaSBlc3QgbGEgY29tYmluYWlzb24gZGUgJGNvdW50IGNvbW1pdC4iCittc2dzdHJbMV0gIkNlY2kgZXN0IGxhIGNvbWJpbmFpc29uIGRlICRjb3VudCBjb21taXRzLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiQ2VjaSBlc3QgbGEgY29tYmluYWlzb24gZGUgMiBjb21taXRzLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUzNiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTc5CisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCittc2dzdHIgIkltcG9zc2libGUgZCdhcHBsaXF1ZXIgJHNoYTEuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0XG4iCisiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2tcbiIKKyJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgIgorImJlZm9yZVxuIgorInlvdSBhcmUgYWJsZSB0byByZXdvcmQgdGhlIGNvbW1pdC4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGNvcnJpZ2VyIGxlIGNvbW1pdCBhcHLDqHMgYXZvaXIgcsOpdXNzaSDDoCBwaWNvcmVyICRzaGExLi4uICIKKyIkcmVzdFxuIgorIkMnZXN0IHByb2JhYmxlbWVudCBkw7sgw6AgdW4gbWVzc2FnZSBkZSB2YWxpZGF0aW9uIHZpZGUgb3UgbGUgY3JvY2hldCBwcmUtIgorImNvbW1pdFxuIgorImEgw6ljaG91w6kuIFNpIGxlIGNyb2NoZXQgcHJlLWNvbW1pdCBhIMOpY2hvdcOpLCB2b3VzIGRldmV6IHBldXQtw6p0cmUgcsOpc291ZHJlICIKKyJsZVxuIgorInByb2Jsw6htZSBhdmFudCBkZSBwb3V2b2lyIHJlZm9ybXVsZXIgbGUgbWVzc2FnZSBkdSBjb21taXQuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAiQXJyw6p0w6kgw6AgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIickc3F1YXNoX3N0eWxlJyBpbXBvc3NpYmxlIGF2ZWMgbGUgY29tbWl0IHByw6ljw6lkZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICJFeMOpY3V0aW9uwqA6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAiTCdleMOpY3V0aW9uIGEgw6ljaG91w6nCoDogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTMKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiZXQgYSBtaXMgw6Agam91ciBsJ2luZGV4IG91IGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiVm91cyBwb3V2ZXogY29ycmlnZXIgbGUgcHJvYmzDqG1lLCBwdWlzIGxhbmNlclxuIgorIlxuIgorImdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJMJ2V4w6ljdXRpb24gYSByw6l1c3NpwqA6ICRyZXN0XG4iCisibWFpcyBhIGxhaXNzw6kgZGVzIG1vZGlmaWNhdGlvbnMgZGFucyBsJ2luZGV4IG91IGxhIGNvcGllIGRlIHRyYXZhaWxcbiIKKyJWYWxpZGV6IG91IHJlbWlzZXogdm9zIG1vZGlmaWNhdGlvbiwgcHVpcyBsYW5jZXpcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKK21zZ3N0ciAiQ29tbWFuZGUgaW5jb25udWXCoDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MjAKK21zZ2lkICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiVmV1aWxsZXogY29ycmlnZXIgY2VjaSBlbiB1dGlsaXNhbnQgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIlJlYmFzYWdlIGV0IG1pc2Ugw6Agam91ciBkZSAkaGVhZF9uYW1lIGF2ZWMgc3VjY8Oocy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTIKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3VwcHJpbWVyIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJWb3VzIGF2ZXogZGVzIG1vZGlmaWNhdGlvbnMgaW5kZXjDqWVzIGRhbnMgdm90cmUgY29waWUgZGUgdHJhdmFpbC5cbiIKKyJTaSBjZXMgbW9kaWZpY2F0aW9ucyBkZXZhaWVudCDDqnRyZSBham91dMOpZXNcbiIKKyJkYW5zIGxlIGNvbW1pdCBwcsOpY8OpZGVudCwgbGFuY2V6wqA6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJTaSBlbGxlcyBkZXZhaWVudCBhbGxlciBkYW5zIHVuIG5vdXZlYXUgY29tbWl0LCBsYW5jZXrCoDpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJEYW5zIGxlcyBkZXV4IGNhcywgdW5lIGZvaXMgZmluaSwgY29udGludWV6IGF2ZWPCoDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM0Cittc2dpZCAiRXJyb3IgdHJ5aW5nIHRvIGZpbmQgdGhlIGF1dGhvciBpZGVudGl0eSB0byBhbWVuZCBjb21taXQiCittc2dzdHIgIiIKKyJFcnJldXIgbG9ycyBkZSBsYSByZWNoZXJjaGUgZGUgbCdpZGVudGl0w6kgZGUgbCdhdXRldXIgcG91ciBjb3JyaWdlciBsZSBjb21taXQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzkKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIlZvdXMgYXZleiBkZXMgbW9kaWZpY2F0aW9ucyBub24gdmFsaWTDqWVzIGRhbnMgdm90cmUgY29waWUgZGUgdHJhdmFpbC5cbiIKKyJWZXVpbGxleiBsZXMgdmFsaWRlciBkJ2Fib3JkLCBwdWlzIHJlbGFuY2VyICdnaXQgcmViYXNlIC0tY29udGludWUnLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ4Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgImltcG9zc2libGUgZGUgdmFsaWRlciBsZXMgbW9kaWZpY2F0aW9ucyBpbmRleMOpZXMuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NjUKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgIkltcG9zc2libGUgZGUgbGFuY2VyIGwnw6lkaXRldXIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjaGVja291dCAkc3dpdGNoX3RvIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnZXh0cmFpcmUgJHN3aXRjaF90byIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwNworbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICJQYXMgZGUgSEVBRMKgPyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gcsOpcGVydG9pcmUgdGVtcG9yYWlyZSAkc3RhdGVfZGlyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTExCittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIkltcG9zc2libGUgZGUgbWFycXVlciBjb21tZSBpbnRlcmFjdGlmIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJSZWJhc2FnZSBkZSAkc2hvcnRyZXZpc2lvbnMgc3VyICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZGUpIgorbXNnc3RyWzFdICJSZWJhc2FnZSBkZSAkc2hvcnRyZXZpc2lvbnMgc3VyICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZGVzKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnaW5pdGlhbGlzZXIgbGVzIGNvbW1pdHMgcsOpw6ljcml0cyIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgInVzYWdlwqA6ICRkYXNobGVzcyAkVVNBR0UiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHNlIHBsYWNlciBkYW5zIGxlIHLDqXBlcnRvaXJlICRjZHVwLCBsYSByYWNpbmUgZGUgbGEgY29waWUgZGUgIgorInRyYXZhaWwiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgImZhdGFswqA6ICRwcm9ncmFtX25hbWUgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgc2FucyBjb3BpZSBkZSB0cmF2YWlsLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJlYmFzZXLCoDogdm91cyBhdmV6IGRlcyBtb2RpZmljYXRpb25zIG5vbiBpbmRleMOpZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI0Cittc2dpZCAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSByw6nDqWNyaXJlIGxlcyBicmFuY2hlc8KgOiB2b3VzIGF2ZXogZGVzIG1vZGlmaWNhdGlvbnMgbm9uICIKKyJpbmRleMOpZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSB0aXJlciBhdmVjIHJlYmFzYWdlLiBWb3VzIGF2ZXogZGVzIG1vZGlmaWNhdGlvbnMgbm9uIGluZGV4w6llcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiJGFjdGlvbiBlc3QgaW1wb3NzaWJsZcKgOiB2b3VzIGF2ZXogZGVzIG1vZGlmaWNhdGlvbnMgbm9uIGluZGV4w6llcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDMKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSByZWJhc2VywqA6IHZvdHJlIGluZGV4IGNvbnRpZW50IGRlcyBtb2RpZmljYXRpb25zIG5vbiB2YWxpZMOpZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHRpcmVyIGF2ZWMgcmViYXNhZ2XCoDogdm90cmUgaW5kZXggY29udGllbnQgZGVzIG1vZGlmaWNhdGlvbnMgIgorIm5vbiB2YWxpZMOpZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIiRhY3Rpb24gZXN0IGltcG9zc2libGXCoDogdm90cmUgaW5kZXggY29udGllbnQgZGVzIG1vZGlmaWNhdGlvbnMgbm9uIHZhbGlkw6llcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIkRlIHBsdXMsIHZvdHJlIGluZGV4IGNvbnRpZW50IGRlcyBtb2RpZmljYXRpb25zIG5vbiB2YWxpZMOpZXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorIlZvdXMgZGV2ZXogbGFuY2VyIGNldHRlIGNvbW1hbmRlIGRlcHVpcyBsYSByYWNpbmUgZGUgdm90cmUgY29waWUgZGUgdHJhdmFpbC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzgKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6l0ZXJtaW5lciBsZSBjaGVtaW4gYWJzb2x1IGR1IHLDqXBlcnRvaXJlIGdpdCIKKworIy4gVFJBTlNMQVRPUlM6IHlvdSBjYW4gYWRqdXN0IHRoaXMgdG8gYWxpZ24gImdpdCBhZGQgLWkiIHN0YXR1cyBtZW51CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlMTJzICUxMnMgJXMiCittc2dzdHIgIiUxMnMgJXMxMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIGNoZW1pbiB0b3VjaMOpXG4iCittc2dzdHJbMV0gIiVkIGNoZW1pbnMgdG91Y2jDqXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDUzCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNpIGxlIHBhdGNoIHMnYXBwbGlxdWUgcHJvcHJlbWVudCwgbGEgc2VjdGlvbiDDqWRpdMOpZSBzZXJhXG4iCisiaW1tw6lkaWF0ZW1lbnQgbWFycXXDqWUgY29tbWUgaW5kZXjDqWUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTYKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YXNoaW5nLiIKK21zZ3N0ciAiIgorIlNpIGxlIHBhdGNoIHMnYXBwbGlxdWUgcHJvcHJlbWVudCwgbGEgc2VjdGlvbiDDqWRpdMOpZSBzZXJhXG4iCisiaW1tw6lkaWF0ZW1lbnQgbWFycXXDqWUgY29tbWUgcmVtaXPDqWUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTaSBsZSBwYXRjaCBzJ2FwcGxpcXVlIHByb3ByZW1lbnQsIGxhIHNlY3Rpb24gw6lkaXTDqWUgc2VyYVxuIgorImltbcOpZGlhdGVtZW50IG1hcnF1w6llIGNvbW1lIGRlc2luZGV4w6llLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3MQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc3Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBhcHBseWluZy4iCittc2dzdHIgIiIKKyJTaSBsZSBwYXRjaCBzJ2FwcGxpcXVlIHByb3ByZW1lbnQsIGxhIHNlY3Rpb24gw6lkaXTDqWUgc2VyYVxuIgorImltbcOpZGlhdGVtZW50IG1hcnF1w6llIGNvbW1lIGFwcGxpcXXDqWUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzQKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisiU2kgbGUgcGF0Y2ggcydhcHBsaXF1ZSBwcm9wcmVtZW50LCBsYSBzZWN0aW9uIMOpZGl0w6llIHNlcmFcbiIKKyJpbW3DqWRpYXRlbWVudCBtYXJxdcOpZSBjb21tZSDDqWxpbWluw6llLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciBsZSBmaWNoaWVyIGQnw6lkaXRpb24gZGUgc2VjdGlvbiBlbiDDqWNyaXR1cmXCoDogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIlBvdXIgw6lsaW1pbmVyIGxlcyBsaWduZXMgJyVzJywgcmVuZGV6LWxlcyAnICcgKGNvbnRleHRlKS5cbiIKKyJQb3VyIMOpbGltaW5lciBsZXMgbGlnbmVzICclcycsIGVmZmFjZXotbGVzLlxuIgorIkxlcyBsaWduZXMgY29tbWVuw6dhbnQgcGFyICVzIHNlcm9udCDDqWxpbWluw6llcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnb3V2ZXJ0dXJlIGR1IGZpY2hpZXIgZCfDqWRpdGlvbiBkZSBzZWN0aW9uIGVuIGxlY3R1cmXCoDogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI0OAorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBpbmRleGVyIGNldHRlIHNlY3Rpb25cbiIKKyJuIC0gbmUgcGFzIGluZGV4ZXIgY2V0dGUgc2VjdGlvblxuIgorInEgLSBxdWl0dGVywqA7IG5lIHBhcyBpbmRleGVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gaW5kZXhlciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIGluZGV4ZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1NAorbXNnaWQgIiIKKyJ5IC0gc3Rhc2ggdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YXNoIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSByZW1pc2VyIGNldHRlIHNlY3Rpb25cbiIKKyJuIC0gbmUgcGFzIHJlbWlzZXIgY2V0dGUgc2VjdGlvblxuIgorInEgLSBxdWl0dGVywqA7IG5lIHBhcyByZW1pc2VyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gcmVtaXNlciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIHJlbWlzZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2MAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZMOpc2luZGV4ZXIgY2V0dGUgc2VjdGlvblxuIgorIm4gLSBuZSBwYXMgZMOpc2luZGV4ZXIgY2V0dGUgc2VjdGlvblxuIgorInEgLSBxdWl0dGVywqA7IG5lIHBhcyBkw6lzaW5kZXhlciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIGTDqXNpbmRleGVyIGNldHRlIHNlY3Rpb24gZXQgdG91dGVzIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorImQgLSBuZSBwYXMgZMOpc2luZGV4ZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvblxuIgorIm4gLSBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gZXQgdG91dGVzIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorImQgLSBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjkwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gc3VwcHJpbWVyIGNldHRlIHNlY3Rpb25cbiIKKyJuIC0gbmUgcGFzIHN1cHByaW1lciBjZXR0ZSBzZWN0aW9uXG4iCisicSAtIHF1aXR0ZXLCoDsgbmUgcGFzIHN1cHByaW1lciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBhdXRyZXMgcmVzdGFudGVzXG4iCisiYSAtIHN1cHByaW1lciBjZXR0ZSBzZWN0aW9uIGV0IHRvdXRlcyBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXJcbiIKKyJkIC0gbmUgcGFzIHN1cHByaW1lciBjZXR0ZSBzZWN0aW9uIG5pIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjc4Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDDqWxpbWluZXIgY2V0dGUgc2VjdGlvbiBkZSBsJ2luZGV4IGV0IGRlIGwnYXJicmUgZGUgdHJhdmFpbFxuIgorIm4gLSBuZSBwYXMgw6lsaW1pbmVyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgw6lsaW1pbmVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gw6lsaW1pbmVyIGNldHRlIHNlY3Rpb24gZXQgdG91dGVzIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorImQgLSBuZSBwYXMgw6lsaW1pbmVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvbiDDoCBsJ2luZGV4IGV0IMOgIGwnYXJicmUgZGUgdHJhdmFpbFxuIgorIm4gLSBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb25cbiIKKyJxIC0gcXVpdHRlcsKgOyBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIGF1dHJlcyByZXN0YW50ZXNcbiIKKyJhIC0gYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gZXQgdG91dGVzIGxlcyBzdWl2YW50ZXMgZGUgY2UgZmljaGllclxuIgorImQgLSBuZSBwYXMgYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gbmkgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gw6AgbCdhcmJyZSBkZSB0cmF2YWlsXG4iCisibiAtIG5lIHBhcyBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvblxuIgorInEgLSBxdWl0dGVywqA7IG5lIHBhcyBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgYXV0cmVzIHJlc3RhbnRlc1xuIgorImEgLSBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvbiBldCB0b3V0ZXMgbGVzIHN1aXZhbnRlcyBkZSBjZSBmaWNoaWVyXG4iCisiZCAtIG5lIHBhcyBhcHBsaXF1ZXIgY2V0dGUgc2VjdGlvbiBuaSBsZXMgc3VpdmFudGVzIGRlIGNlIGZpY2hpZXIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMxMQorbXNnaWQgIiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImcgLSBzZWxlY3Rpb25uZXIgdW5lIHNlY3Rpb24gZXQgcyd5IHJlbmRyZVxuIgorIi8gLSByZWNoZXJjaGVyIHVuZSBzZWN0aW9uIGNvcnJlc3BvbmRhbnQgw6AgdW5lIHJlZ2V4IGRvbm7DqWVcbiIKKyJqIC0gbGFpc3NlciBjZXR0ZSBzZWN0aW9uIG5vbiBkw6ljaWTDqWUgZXQgYWxsZXIgw6AgbGEgc3VpdmFudGUgbm9uLWTDqWNpZMOpZVxuIgorIkogLSBsYWlzc2VyIGNldHRlIHNlY3Rpb24gbm9uIGTDqWNpZMOpZSBldCBhbGxlciDDoCBsYSBzdWl2YW50ZVxuIgorImsgLSBsYWlzc2VyIGNldHRlIHNlY3Rpb24gbm9uIGTDqWNpZMOpZSBldCBhbGxlciDDoCBsYSBwcsOpY8OpZGVudGUgbm9uLWTDqWNpZMOpZVxuIgorIksgLSBsYWlzc2VyIGNldHRlIHNlY3Rpb24gbm9uIGTDqWNpZMOpZSBldCBhbGxlciDDoCBsYSBwcsOpY8OpZGVudGVcbiIKKyJzIC0gZMOpY291cGVyIGxhIHNlY3Rpb24gZW4gc2VjdGlvbnMgcGx1cyBwZXRpdGVzXG4iCisiZSAtIMOpZGl0ZXIgbWFudWVsbGVtZW50IGxhIHNlY3Rpb24gYWN0dWVsbGVcbiIKKyI/IC0gYWZmaWNoZXIgbCdhaWRlXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICJMZXMgc2VjdGlvbnMgc8OpbGVjdGlvbm7DqWVzIG5lIHMnYXBwbGlxdWUgcGFzIMOgIGwnaW5kZXjCoCFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQzCittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgIkxlcyBhcHBsaXF1ZXIgcXVhbmQgbcOqbWUgw6AgbCdhcmJyZSBkZSB0cmF2YWlswqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ2Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAiUmllbiBuJ2Egw6l0w6kgYXBwbGlxdcOpLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgImZpY2hpZXIgbm9uLWZ1c2lvbm7DqSBpZ25vcsOpwqA6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiSW5kZXhlciBsZSBjaGFuZ2VtZW50IGRlIG1vZGUgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJJbmRleGVyIGxhIHN1cHByZXNzaW9uIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkluZGV4ZXIgY2V0dGUgc2VjdGlvbiBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlJlbWlzZXIgbGUgY2hhbmdlbWVudCBkZSBtb2RlIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiUmVtaXNlciBsYSBzdXBwcmVzc2lvbiBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJSZW1pc2VyIGNldHRlIHNlY3Rpb24gW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkTDqXNpbmRleGVyIGxlIGNoYW5nZW1lbnQgZGUgbW9kZSBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiRMOpc2luZGV4ZXIgbGEgc3VwcHJlc3Npb24gW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJEw6lzaW5kZXhlciBjZXR0ZSBzZWN0aW9uIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGlxdWVyIGxlIGNoYW5nZW1lbnQgZGUgbW9kZSDDoCBsJ2luZGV4IFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGlxdWVyIGxhIHN1cHByZXNzaW9uIMOgIGwnaW5kZXggW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGlxdWVyIGNldHRlIHNlY3Rpb24gw6AgbCdpbmRleCBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQWJhbmRvbm5lciBsZSBjaGFuZ2VtZW50IGRlIG1vZGUgZGFucyBsJ2FyYnJlIFt5LG4scSxhLGQlcyw/XcKgPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBYmFuZG9ubmVyIGxhIHN1cHByZXNzaW9uIGRhbnMgbCdhcmJyZSBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFiYW5kb25uZXIgY2V0dGUgc2VjdGlvbiBkYW5zIGwnYXJicmUgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJBYmFuZG9ubmVyIGxlIGNoYW5nZW1lbnQgZGUgbW9kZSBkYW5zIGwnaW5kZXggZXQgbCdhcmJyZSBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQWJhbmRvbm5lciBsYSBzdXBwcmVzc2lvbiBkZSBsJ2luZGV4IGV0IGRlIGwnYXJicmUgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiU3VwcHJpbWVyIGxhIHNlY3Rpb24gZGFucyBsJ2luZGV4IGV0IGwnYXJicmUgZGUgdHJhdmFpbCBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiQXBwbGlxdWVyIGxlIGNoYW5nZW1lbnQgZGUgbW9kZSBkYW5zIGwnaW5kZXggZXQgbCdhcmJyZSBkZSB0cmF2YWlsIFt5LG4scSxhLGQiCisiJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiQXBwbGlxdWVyIGxhIHN1cHByZXNzaW9uIGRhbnMgbCdpbmRleCBldCBsJ2FyYnJlIGRlIHRyYXZhaWwgW3ksbixxLGEsZCIKKyIlcyw/XcKgPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiQXBwbGlxdWVyIGxhIHNlY3Rpb24gw6AgbCdpbmRleCBldCBsJ2FyYnJlIGRlIHRyYXZhaWwgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiQXBwbGlxdWVyIGxlIGNoYW5nZW1lbnQgZGUgbW9kZSBkYW5zIGwnYXJicmUgZGUgdHJhdmFpbCBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpcXVlciBsYSBzdXBwcmVzc2lvbiBkYW5zIGwnYXJicmUgZGUgdHJhdmFpbCBbeSxuLHEsYSxkJXMsP13CoD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaXF1ZXIgbGEgc2VjdGlvbiDDoCBsJ2FyYnJlIGRlIHRyYXZhaWwgW3ksbixxLGEsZCVzLD9dwqA/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTcwCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICJBdWN1bmUgYXV0cmUgc2VjdGlvbiDDoCBhdHRlaW5kcmVcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIk5vbWJyZSBpbnZhbGlkZSA6ICclcydcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIkTDqXNvbMOpLCAlZCBzZXVsZSBzZWN0aW9uIGRpc3BvbmlibGUuXG4iCittc2dzdHJbMV0gIkTDqXNvbMOpLCBTZXVsZW1lbnQgJWQgc2VjdGlvbnMgZGlzcG9uaWJsZXMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICJhdWN1bmUgYXV0cmUgc2VjdGlvbiDDoCByZWNoZXJjaGVyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYzNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXNcbiIKK21zZ3N0ciAiUmVnZXggZGUgcmVjaGVyY2hlIG1hbGZvcm3DqWUgJXPCoDogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIkF1Y3VuZSBzZWN0aW9uIG5lIGNvcnJlc3BvbmQgYXUgbW90aWYgZG9ubsOpXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY1OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODAKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgIlBhcyBkZSBzZWN0aW9uIHByw6ljw6lkZW50ZVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIlBhcyBkZSBzZWN0aW9uIHN1aXZhbnRlXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIkTDqXNvbMOpLCBpbXBvc3NpYmxlIGRlIGTDqWNvdXBlciBjZXR0ZSBzZWN0aW9uXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCittc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dzdHJbMF0gIkTDqWNvdXDDqWUgZW4gJWQgc2VjdGlvbi5cbiIKK21zZ3N0clsxXSAiRMOpY291cMOpZSBlbiAlZCBzZWN0aW9ucy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJEw6lzb2zDqSwgaW1wb3NzaWJsZSBkJ8OpZGl0ZXIgY2V0dGUgc2VjdGlvblxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIC0gbW9udHJlciBsZXMgY2hlbWlucyBtb2RpZmnDqXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWpvdXRlciBsJ8OpdGF0IGRlIGwnYXJicmUgZGUgdHJhdmFpbCBhdXggbW9kaWZpY2F0aW9ucyDDoCAiCisiaW5kZXhlclxuIgorInJldmVydCAgICAgICAgLSBmYWlyZSByZXZlbmlyIGxlcyBtb2RpZmljYXRpb25zIMOgIGluZGV4ZXIgw6AgbGEgdmVyc2lvbiBIRUFEXG4iCisicGF0Y2ggICAgICAgICAtIHPDqWxlY3Rpb25uZXIgbGVzIHNlY3Rpb25zIGV0IG1ldHRyZSDDoCBqb3VyIHPDqWxlY3RpdmVtZW50XG4iCisiZGlmZiAgICAgICAgICAtIHZpc3VhbGlzZXIgbGVzIGRpZmYgZW50cmUgSEVBRCBldCBsJ2luZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFqb3V0ZXIgbGVzIGZpY2hpZXJzIG5vbi1zdWl2aXMgYXV4IG1vZGlmaWNhdGlvbnMgw6AgaW5kZXhlclxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI1Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAiLS0gbWFucXVhbnQiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgIm1vZGUgZGUgLS1wYXRjaCBpbmNvbm51wqA6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAiYXJndW1lbnQgaW52YWxpZGUgJXMsIC0tIGF0dGVuZHUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICIiCisibGEgem9uZSBsb2NhbGUgZGlmZsOocmUgZHUgR01UIHBhciB1biBpbnRlcnZhbGxlIHN1cMOpcmlldXIgw6AgdW5lIG1pbnV0ZVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICJsZSBkw6ljYWxhZ2UgZGUgdGVtcHMgbG9jYWwgZXN0IHBsdXMgZ3JhbmQgb3Ugw6lnYWwgw6AgMjQgaGV1cmVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICJsJ8OpZGl0ZXVyIGVzdCBzb3J0aSBlbiBlcnJldXIsIGFiYW5kb24gdG90YWwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiIKKyInJXMnIGNvbnRpZW50IHVuZSB2ZXJzaW9uIGludGVybcOpZGlhaXJlIGR1IGNvdXJyaWVsIHF1ZSB2b3VzIGNvbXBvc2llei5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIiclcy5maW5hbCcgY29udGllbnQgbGUgY291cnJpZWwgY29tcG9zw6kuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDA4Cittc2dpZCAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIgorbXNnc3RyICItLWR1bXAtYWxpYXNlcyBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgZCdhdXRyZXMgb3B0aW9uc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIkxhbmNlbWVudCBkZSBnaXQgZm9ybWF0LXBhdGNoIGltcG9zc2libGUgw6AgbCdleHTDqXJpZXVyIGQndW4gZMOpcMO0dFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4NAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKyJgYmF0Y2gtc2l6ZWAgZXQgYHJlbG9naW5gIGRvaXZlbnQgw6p0cmUgc3DDqWNpZmnDqXMgZW5zZW1ibGVzICh2aWEgbGEgbGlnbmUgZGUgIgorImNvbW1hbmRlIG91IGRlcyBvcHRpb25zIGRlIGNvbmZpZ3VyYXRpb24pXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICJDaGFtcCBkZSAtLXN1cHByZXNzLWNjIGluY29ubnXCoDogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgIlBhcmFtw6h0cmUgZGUgLS1jb25maXJtIGluY29ubnXCoDogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisiYXR0ZW50aW9uwqA6IGxlcyBndWlsbGVtZXRzIG5lIHNvbnQgcGFzIHN1cHBvcnTDqXMgZGFucyBhbGlhcyBzZW5kbWFpbMKgOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJhdHRlbnRpb27CoDogYDppbmNsdWRlOmAgbidlc3QgcGFzIHN1cHBvcnTDqcKgOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorImF0dGVudGlvbsKgOiBsZXMgcmVkaXJlY3Rpb25zIGAvZmlsZWAgb3UgYHxwaXBlYCBuZSBzb250IHBhcyBzdXBwb3J0w6llc8KgOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBsaW5lIGlzIG5vdCByZWNvZ25pemVkOiAlc1xuIgorbXNnc3RyICJhdHRlbnRpb27CoDogbGlnbmUgc2VuZG1haWwgbm9uIHJlY29ubnVlwqA6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjQ5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzXG4iCisidG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi5cbiIKKyJcbiIKKyIgICAgKiBTYXlpbmcgXCIuLyVzXCIgaWYgeW91IG1lYW4gYSBmaWxlOyBvclxuIgorIiAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS5cbiIKK21zZ3N0ciAiIgorIkxlIGZpY2hpZXIgJyVzJyBleGlzdGUgbWFpcyBjZSBwb3VycmFpdCBhdXNzaSDDqnRyZSBsYSBwbGFnZSBkZSBjb21tbWl0c1xuIgorInBvdXIgbGVxdWVsIGxlcyBwYXRjaGVzIHNvbnQgw6AgcHJvZHVpcmUuIFZldWlsbGV6IHByw6ljaXNlci4uLlxuIgorIlxuIgorIiAgICAqIGVuIGluZGlxdWFudCBcIi4vJXNcIiBzaSB2b3VzIGTDqXNpZ25leiB1biBmaWNoaWVyLCBvdVxuIgorIiAgICAqIGVuIGZvdXJuaXNzYW50IGwnb3B0aW9uIC0tZm9ybWF0LXBhdGNoIHBvdXIgdW5lIHBsYWdlLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiCittc2dzdHIgIsOJY2hlYyDDoCBsJ291dmVydHVyZSBkdSByw6lwZXJ0b2lyZSAlc8KgOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2OTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorImZhdGFsOiAlczogJXNcbiIKKyJ3YXJuaW5nOiBubyBwYXRjaGVzIHdlcmUgc2VudFxuIgorbXNnc3RyICIiCisiZmF0YWzCoDogJXPCoDogJXNcbiIKKyJhdHRlbnRpb27CoDogYXVjdW4gcGF0Y2ggZW52b3nDqVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdWN1biBmaWNoaWVyIHBhdGNoIHNww6ljaWZpw6nCoCFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiTGlnbmUgZGUgc3VqZXQgbm9uIHRyb3V2w6llIGRhbnMgJXMgPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyICVzIGVuIMOpY3JpdHVyZcKgOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyJMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciBcIkdJVDpcIiBzZXJvbnQgc3VwcHJpbcOpZXMuXG4iCisiRW52aXNhZ2V6IGQnaW5jbHVyZSB1biBkaWZmc3RhdCBnbG9iYWwgb3UgdW5lIHRhYmxlIGRlcyBtYXRpw6hyZXNcbiIKKyJwb3VyIGxlIHBhdGNoIHF1ZSB2b3VzIMOqdGVzIGVuIHRyYWluIGQnw6ljcmlyZS5cbiIKKyJcbiIKKyJFZmZhY2V6IGxlIGNvcnBzIHNpIHZvdXMgbmUgc291aGFpdGV6IHBhcyBlbnZveWVyIHVuIHLDqXN1bcOpLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlczogJXMiCittc2dzdHIgIsOJY2hlYyDDoCBsJ291dmVydHVyZSBkZSAlc8KgOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3ODAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXMuZmluYWw6ICVzIgorbXNnc3RyICLDiWNoZWMgw6AgbCdvdXZlcnR1cmUgZGUgJXMuZmluYWzCoDogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODIzCittc2dpZCAiU3VtbWFyeSBlbWFpbCBpcyBlbXB0eSwgc2tpcHBpbmcgaXRcbiIKK21zZ3N0ciAiTGUgY291cnJpZWwgZGUgcsOpc3Vtw6kgw6l0YW50IHZpZGUsIGlsIGEgw6l0w6kgaWdub3LDqVxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAiw4p0ZXMtdm91cyBzdXIgZGUgdm91bG9pciB1dGlsaXNlciA8JXM+IFt5L05dwqA/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKyJMZXMgZmljaGllcnMgc3VpdmFudHMgc29udCA4Yml0IG1haXMgbmUgZMOpY2xhcmVudCBwYXMgZGUgY2hhbXBzIENvbnRlbnQtIgorIlRyYW5zZmVyLUVuY29kaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIlF1ZWwgZW5jb2RhZ2UgOGJpdCBkb2l0IMOqdHJlIGTDqWNsYXLDqSBbVVRGOF3CoD8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIkVudm9pIHJlZnVzw6kgcGFyY2UgcXVlIGxlIHBhdGNoXG4iCisiXHQlc1xuIgorImEgdW4gc3VqZXQgbW9kw6hsZSAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzZXogLS1mb3JjZSBpcyB2b3VzIHNvdWhhaXRleiAiCisidnJhaW1lbnQgZW52b3llci5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NDUKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICLDgCBxdWkgbGVzIGNvdXJyaWVscyBkb2l2ZW50LWlscyDDqnRyZSBlbnZvecOpcyAocydpbCB5IGVuIGEpwqA/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICJmYXRhbMKgOiBsJ2FsaWFzICclcycgc2UgZMOpdmVsb3BwZSBlbiBsdWktbcOqbWVcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NzUKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICIiCisiTWVzc2FnZS1JRCDDoCB1dGlsaXNlciBjb21tZSBJbi1SZXBseS1UbyBwb3VyIGxlIHByZW1pZXIgY291cnJpZWwgKHMnaWwgeSBlbiAiCisiYSnCoD8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMzMgZ2l0LXNlbmQtZW1haWwucGVybDoxMDQxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAiZXJyZXVywqA6IGltcG9zc2libGUgZCdleHRyYWlyZSB1bmUgYWRyZXNzZSB2YWxpZGUgZGVwdWlzwqA6ICVzXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDQ1Cittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICJRdWUgZmFpcmUgZGUgY2V0dGUgYWRyZXNzZSA/IChbcV11aXR0ZXJ8W2Rdw6lsYWlzc2VyfFtlXWRpdGVyKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxlIGNoZW1pbiB2ZXJzIGxhIENBIFwiJXNcIiBuJ2V4aXN0ZSBwYXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ0NQorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICBMYSBsaXN0ZSBDQyBjaS1kZXNzdXMgYSDDqXTDqSDDqXRlbmR1ZSBhdmVjIGRlcyBhZHJlc3Nlc1xuIgorIiAgIHN1cHBsw6ltZW50YWlyZXMgdHJvdXbDqWVzIGRhbnMgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uLlxuIgorIiAgIFBhciBkw6lmYXV0IGRhbnMgY2UgY2FzLCBzZW5kLWVtYWlsIGRlbWFuZGUgY29uZmlybWF0aW9uIGF2YW50IGVudm9pLlxuIgorIiAgIENlIGNvbXBvcnRlbWVudCBlc3QgZ8OpcsOpIHBhciBsZSBwYXJhbcOodHJlIGRlIGNvbmZpZ3VyYXRpb25cbiIKKyIgICBzZW5kZW1haWwuY29uZmlybS5cbiIKKyJcbiIKKyIgICBQb3VyIHRvdXQgaW5mb3JtYXRpb24gY29tcGzDqW1lbnRhaXJlLCBsYW5jZXogJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgUG91ciBjb25zZXJ2ZXIgbGUgY29tcG9ydGVtZW50IGFjdHVlbCwgbWFpcyDDqWxpbWluZXIgY2UgbWVzc2FnZSxcbiIKKyIgICBsYW5jZXogJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0gW25dIFtlXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjAKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtlXWRpdHxbcV11aXR8W2FdbGwpOiAiCittc2dzdHIgIkVudm95ZXIgY2UgY291cnJpZWzCoD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCnCoDogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjMKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIlVuZSByw6lwb25zZSBlc3QgbsOpY2Vzc2FpcmUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ5MQorbXNnaWQgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCittc2dzdHIgIkxlIHNlcnZldXIgU01UUCBuw6ljZXNzYWlyZSBuJ2VzdCBwYXMgZMOpZmluaSBjb3JyZWN0ZW1lbnQuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICJMZSBzZXJ2ZXVyIG5lIHN1cHBvcnRlIHBhcyBTVEFSVFRMU8KgISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICLDqWNoZWMgZGUgU1RBUlRUTFPCoCEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1NgorbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGQnaW5pdGlhbGlzZXIgU01UUC4gVsOpcmlmaWV6IGxhIGNvbmZpZ3VyYXRpb24gZXQgdXRpbGlzZXogLS1zbXRwLSIKKyJkZWJ1Zy4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICLDqWNoZWMgZGUgbCdlbnZvaSBkZSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRHJ5LVNlbnQgJXNcbiIKK21zZ3N0ciAiRW52b2kgc2ltdWzDqSBkZSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VudCAlc1xuIgorbXNnc3RyICIlcyBlbnZvecOpXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIkRyeS1PSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIlNpbXVsYXRpb24gT0suIExlIGpvdXJuYWwgaW5kaXF1ZcKgOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIk9LLiBMZSBqb3VybmFsIGluZGlxdWXCoDpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTkxCittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgIlLDqXN1bHRhdMKgOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5NAorbXNnaWQgIlJlc3VsdDogT0tcbiIKK21zZ3N0ciAiUsOpc3VsdGF0wqA6IE9LXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjU5IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY3OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgQWpvdXQgZGUgY2M6ICVzIGRlcHVpcyBsYSBsaWduZSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgQWpvdXQgZGUgdG86ICVzIGRlcHVpcyBsYSBsaWduZSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG5vbi1tYm94KSBBam91dCBkZSBjYzogJXMgZGVwdWlzIGxhIGxpZ25lICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihjb3JwcykgQWpvdXQgZGUgY2M6ICVzIGRlcHVpcyBsYSBsaWduZSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykgSW1wb3NzaWJsZSBkJ2V4w6ljdXRlciAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSBBam91dCBkZSAlc8KgOiAlcyBkZXB1aXPCoDogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnJXMnIgorbXNnc3RyICIoJXMpIMOpY2hlYyBkZSBsYSBmZXJtZXR1cmUgZHUgcGlwZSB2ZXJzICclcyciCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2Vudm95ZXIgdW4gbWVzc2FnZSBjb21tZSA3Yml0IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MTMKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICJjb2RhZ2UgZGUgdHJhbnNmZXJ0IGludmFsaWRlIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTQgZ2l0LXNlbmQtZW1haWwucGVybDoyMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAlc8KgOiVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlc8KgOiBsZSBwYXRjaCBjb250aWVudCB1bmUgbGlnbmUgcGx1cyBsb25ndWUgcXVlIDk5OCBjYXJhY3TDqHJlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICIlcyBzYXV0w6kgYXZlYyB1biBzdWZmaXggZGUgc2F1dmVnYXJkZSAnJXMnLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiU291aGFpdGV6LXZvdXMgcsOpZWxsZW1lbnQgZW52b3llciAlc8KgP1t5fE5dwqA6ICIKZGlmZiAtLWdpdCBhL3BvL2dpdC5wb3QgYi9wby9naXQucG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMWVjNzYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9naXQucG90CkBAIC0wLDAgKzEsMjI2ODIgQEAKKyMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KKyMgQ29weXJpZ2h0IChDKSBZRUFSIFRIRSBQQUNLQUdFJ1MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorIyBGSVJTVCBBVVRIT1IgPEVNQUlMQEFERFJFU1M+LCBZRUFSLgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE5LTEyLTMwIDA4OjQ4KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiBZRUFSLU1PLURBIEhPOk1JK1pPTkVcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEZVTEwgTkFNRSA8RU1BSUxAQUREUkVTUz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1DSEFSU0VUXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9SU5URUdFUjsgcGx1cmFsPUVYUFJFU1NJT047XG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTAwIGFkZC1pbnRlcmFjdGl2ZS5jOjgwMSBzZXF1ZW5jZXIuYzozMjE2CisjOiBzZXF1ZW5jZXIuYzozNjU2IGJ1aWx0aW4vcmViYXNlLmM6ODcxIGJ1aWx0aW4vcmViYXNlLmM6MTY0MworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE5IGJ1aWx0aW4vcmViYXNlLmM6MjA2MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjU1NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI2OQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyOTQKK21zZ2lkICJiaW5hcnkiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjEzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMzMgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjY4IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzQgYWRkLWludGVyYWN0aXZlLmM6ODYzIHNlcXVlbmNlci5jOjM0MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk1Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MDAgYXBwbHkuYzo0MTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoyODEKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NTUKK21zZ2lkICJSZXZlcnQiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzQ2Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc4NCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzMQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAicmV2ZXJ0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJyZXZlcnRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MDggYWRkLXBhdGNoLmM6MTMzMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTAgYWRkLXBhdGNoLmM6MTMyOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk1MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTQKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODEKK21zZ2lkICJzaG93IHBhdGhzIHdpdGggY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODMKK21zZ2lkICJhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg1Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg3Cittc2dpZCAicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4OQorbXNnaWQgInZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk5MQorbXNnaWQgImFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTkgYWRkLWludGVyYWN0aXZlLmM6MTA0OAorbXNnaWQgIlByb21wdCBoZWxwOiIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAxCittc2dpZCAic2VsZWN0IGEgc2luZ2xlIGl0ZW0iCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMworbXNnaWQgInNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDUKK21zZ2lkICJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDcgYWRkLWludGVyYWN0aXZlLmM6MTA1MgorbXNnaWQgInNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwOQorbXNnaWQgInVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDExCittc2dpZCAiY2hvb3NlIGFsbCBpdGVtcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEzCittc2dpZCAiKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTAKK21zZ2lkICJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTQKK21zZ2lkICIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjIgYnVpbHRpbi9jbGVhbi5jOjgyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NTEKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjMgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJ1bnN0YWdlZCIKK21zZ3N0ciAiIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGFwcGx5LmM6NDk2NSBhcHBseS5jOjQ5NjggYnVpbHRpbi9hbS5jOjIxOTcKKyM6IGJ1aWx0aW4vYW0uYzoyMjAwIGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3MyBidWlsdGluL3B1bGwuYzoyMDkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgIiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTEyMgorbXNnaWQgImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMzAgYWRkLXBhdGNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxNzYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxOTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBkaWZmIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgY29udGV4dCBsaW5lICMlZCBpblxuIgorIiUuKnMiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJodW5rcyBkbyBub3Qgb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiIKKyIlLipzIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjc5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6ODEwCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLlxuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjgxOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMjYKK21zZ2lkICIiCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6ODUxCittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjg5NSBhZGQtcGF0Y2guYzoxMjk0Cittc2dpZCAiJ2dpdCBhcHBseSAtLWNhY2hlZCcgZmFpbGVkIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjLgorIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjOiBhZGQtcGF0Y2guYzo5NTIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjM5Cittc2dpZCAiIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEwMDkKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG5vciBhbnkgb2YgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEwMTYKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTEzNyBhZGQtcGF0Y2guYzoxMTQ3Cittc2dpZCAiTm8gcHJldmlvdXMgaHVuayIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMTQyIGFkZC1wYXRjaC5jOjExNTIKK21zZ2lkICJObyBuZXh0IGh1bmsiCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTE1OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIiIKKworIzogYWRkLXBhdGNoLmM6MTE2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMTcwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYWRkLXBhdGNoLmM6MTE5NQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMjAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMjMzCittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEyNDAKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiIgorCisjOiBhZGQtcGF0Y2guYzoxMjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVua3MuIgorbXNnc3RyICIiCisKKyM6IGFkZC1wYXRjaC5jOjEyNDgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjE2NAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxNjYKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxNjgKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKworIzogYWR2aWNlLmM6MTgyCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxOTAKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIiIKKworIzogYWR2aWNlLmM6MTk1IGJ1aWx0aW4vbWVyZ2UuYzoxMzMyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjE5NworbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgIiIKKworIzogYWR2aWNlLmM6MTk4Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAiIgorCisjOiBhbGlhcy5jOjUxCittc2dpZCAidW5jbG9zZWQgcXVvdGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjEzNQorbXNnaWQgIi0tcmVqZWN0IGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxNDAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgb24gbGluZSAlZDogJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYXBwbHkuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjE3NTMKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoxODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjMwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjMxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjMyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjMzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzQwMyBhcHBseS5jOjM0MTQgYXBwbHkuYzozNDYwIG1pZHguYzo2MSBzZXR1cC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM0NDAgYXBwbHkuYzozNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzUyNiBhcHBseS5jOjM2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzUzNSBhcHBseS5jOjM3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6MzU3MAorbXNnaWQgInJlcG9zaXRvcnkgbGFja3MgdGhlIG5lY2Vzc2FyeSBibG9iIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM1ODkgYXBwbHkuYzozNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNjUwCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM4NzYgYXBwbHkuYzozODc4IHJlYWQtY2FjaGUuYzo4MzAgcmVhZC1jYWNoZS5jOjg1NgorIzogcmVhZC1jYWNoZS5jOjEzMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6Mzk1NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjM5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzozOTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MDkzCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDMxNCBhcHBseS5jOjQ0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDUzNworbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBhcHBseS5jOjQ1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDU1OSBidWlsdGluL2ZldGNoLmM6OTAxIGJ1aWx0aW4vZmV0Y2guYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDU3MworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDU3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0NzA0Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDcyNAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBhcHBseS5jOjQ5MTQgYXBwbHkuYzo0OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBhcHBseS5jOjQ5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGFwcGx5LmM6NDkzOCBidWlsdGluL2FkZC5jOjU3OSBidWlsdGluL212LmM6MzAxIGJ1aWx0aW4vcm0uYzozOTAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTY2Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5NjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk3MSBidWlsdGluL2FtLmM6MjIwNgorbXNnaWQgIm51bSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5NzIKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5NzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk3NworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5ODEKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk5MQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTk2Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMDAKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMDMgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogYXBwbHkuYzo1MDA1Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAwNiBidWlsdGluL2FtLmM6MjE4NSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzEwIGJ1aWx0aW4vcmViYXNlLmM6MTQ3NAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMTAgYXBwbHkuYzo1MDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMTYKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMjAKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMjIKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMjMgYnVpbHRpbi9hZGQuYzozMDkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMgorIzogYnVpbHRpbi9jb21taXQuYzoxMzU1IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjc3NAorIzogYnVpbHRpbi9sb2cuYzoyMTY2IGJ1aWx0aW4vbXYuYzoxMjMgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAyNQorbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAyOAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAiIgorCisjOiBhcHBseS5jOjUwMzAgYnVpbHRpbi9hbS5jOjIxOTQKK21zZ2lkICJyb290IgorbXNnc3RyICIiCisKKyM6IGFwcGx5LmM6NTAzMQorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzoxNworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjM3MiBidWlsdGluL2FkZC5jOjE4MCBidWlsdGluL2FkZC5jOjU1NSBidWlsdGluL3JtLmM6Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZjogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEyOSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODk5CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NAorbXNnaWQgInJlcG8iCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0ODEgYnVpbHRpbi9hcmNoaXZlLmM6OTMgYnVpbHRpbi9kaWZmdG9vbC5jOjcxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ4MiBidWlsdGluL2FyY2hpdmUuYzo5NAorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDg5Cittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ5MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0OTMKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzoyOTMgYXJjaGl2ZS16aXAuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY4Cittc2dpZCAidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS10YXIuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWx0ZXIgcmVwb3J0ZWQgZXJyb3IiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUtemlwLmM6NDc5IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIiIKKworIzogYXR0ci5jOjQwOQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6ODg0IGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6OTI4IGJ1aWx0aW4vbWVyZ2UuYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjk1OAorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJpc2VjdC5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBiaXNlY3QuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKworIzogYmlzZWN0LmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjLgorIzogYmlzZWN0LmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dpZF9wbHVyYWwgIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICIiCisKKyM6IGJsYW1lLmM6MjcxNAorbXNnaWQgImNhbm5vdCB1c2UgLS1jb250ZW50cyB3aXRoIGZpbmFsIGNvbW1pdCBvYmplY3QgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBibGFtZS5jOjI3MzUKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQxIHNlcXVlbmNlci5jOjIwOTMKKyM6IHNlcXVlbmNlci5jOjQ0NjAgYnVpbHRpbi9jb21taXQuYzoxMDQwIGJ1aWx0aW4vbG9nLmM6Mzg4IGJ1aWx0aW4vbG9nLmM6OTkxCisjOiBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNSBidWlsdGluL21lcmdlLmM6NDExCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQzCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICIiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjM3Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIzNDQgc2VxdWVuY2VyLmM6MzEwOAorIzogYnVpbHRpbi9jb21taXQuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxNDYKK21zZ2lkICJuZWVkIGEgcmVwb3NpdG9yeSB0byB2ZXJpZnkgYSBidW5kbGUiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoyODAKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjQ2MSBidWlsdGluL2xvZy5jOjIwMyBidWlsdGluL2xvZy5jOjE4MTQgYnVpbHRpbi9zaG9ydGxvZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6NTA0Cittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICIiCisKKyM6IGNvbG9yLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjgxMSBidWlsdGluL2FtLmM6MzU0IGJ1aWx0aW4vYW0uYzozOTgKKyM6IGJ1aWx0aW4vYW0uYzoxMzY2IGJ1aWx0aW4vYW0uYzoyMDA5IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiIgorCisjOiBjb21taXQuYzoxOTMKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6MTE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6MTE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC5jOjE0MTUKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTMwCittc2dpZCAiY29tbWl0LWdyYXBoIGZpbGUgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzMgorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBsb29rdXAgdGFibGUgZW50cnkgbWlzc2luZzsgZmlsZSBtYXkgYmUgaW5jb21wbGV0ZSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzozNTAKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM2MAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQzMworbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6NTY0IGNvbW1pdC1ncmFwaC5jOjYyNAorbXNnaWQgImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzo4NTggYnVpbHRpbi9hbS5jOjEyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDE3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNDkKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjYKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwODUKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExMDQKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBhZGRpbmcgcGFjayAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjU1Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTI3MAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzMDAKK21zZ2lkICJGaW5kaW5nIGV4dHJhIGVkZ2VzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzQ2Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvcnJlY3QgbnVtYmVyIG9mIGJhc2UgZ3JhcGggaWRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNzkgbWlkeC5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM5MSBidWlsdGluL2luZGV4LXBhY2suYzozMDYgYnVpbHRpbi9yZXBhY2suYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDkyCittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTUwNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxNTI0Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzNQorbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NzAKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NzEKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIHRvIHdyaXRlIGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NjEKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4MSBjb21taXQtZ3JhcGguYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDA2Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgIiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAiIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyJcdCVzXG4iCisiZnJvbVxuIgorIlx0JXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleHBhbmQgaW5jbHVkZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6NDA2IHNlcXVlbmNlci5jOjI1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJpbnZhbGlkIHVuaXQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN0YW5kYXJkIGlucHV0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTIyMiBjb25maWcuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjEzMjUKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTc0NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjIwOTYKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjIzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjIzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjIzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyNzUzIGNvbmZpZy5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI3OTkgYnVpbHRpbi9jb25maWcuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjgzNyBjb25maWcuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjg1NyBjb25maWcuYzozMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyOTQyIGNvbmZpZy5jOjMxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjk3OCBidWlsdGluL3JlbW90ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgdmFsdWUgZm9yICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjYxCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1cG9uIGluaXRpYWwgY29udGFjdCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBmZWF0dXJlICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjI1MgorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6Mjc1Cittc2dpZCAicmVwb3NpdG9yeSBvbiB0aGUgb3RoZXIgZW5kIGNhbm5vdCBiZSBzaGFsbG93IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzozMTMKK21zZ2lkICJpbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCisjOiBjb25uZWN0LmM6NjcxIGNvbm5lY3QuYzo3NDgKK21zZ2lkICJkb25lLiIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHBvcnQgJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjg0NSBjb25uZWN0LmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIGhvc3RuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMTIzCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjExNTIKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgcG9ydCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTMxMQorbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjg5IGJ1aWx0aW4vZnNjay5jOjIwOCBidWlsdGluL3BydW5lLmM6NDMKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6MTAxCittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0ZWQuYzoxMjEKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6MTI4Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcHJvaGliaXRlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVuY29kaW5nICclcycgZnJvbSAlcyB0byAlcyBhbmQgYmFjayBpcyBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayB0byBydW4gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjczNiBjb252ZXJ0LmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MTQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgIiIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBkYXlzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxOTcgZGF0ZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyNzIKK21zZ2lkICJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiCittc2dzdHIgIiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBpc2xhbmQgcmVnZXggZm9yICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaXNsYW5kIHJlZ2V4IGZyb20gY29uZmlnIGhhcyB0b28gbWFueSBjYXB0dXJlIGdyb3VwcyAobWF4PSVkKSIKK21zZ3N0ciAiIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtlZCAlZCBpc2xhbmRzLCBkb25lLlxuIgorbXNnc3RyICIiCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgIiIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQzCittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIiIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjYzCittc2dpZCAiIgorIk5vdCBhIGdpdCByZXBvc2l0b3J5LiBVc2UgLS1uby1pbmRleCB0byBjb21wYXJlIHR3byBwYXRocyBvdXRzaWRlIGEgd29ya2luZyAiCisidHJlZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjI5NgorbXNnaWQgIiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkLXplYnJhJywgJ3BsYWluJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJywgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlLXNwYWNlLWNoYW5nZScsICIKKyInaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjMzMgorbXNnaWQgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDYyOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1zdGF0IHZhbHVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5OSBwYXJzZS1vcHRpb25zLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNoYW5nZSBjbGFzcyAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBhZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWNvbG9yLW1vdmVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTg0Cittc2dpZCAiIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUwMjAgZGlmZi5jOjUwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjU3Cittc2dpZCAiRGlmZiBvdXRwdXQgZm9ybWF0IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyNTkgZGlmZi5jOjUyNjUKK21zZ2lkICJnZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjY3IGRpZmYuYzo1MzgxIGRpZmYuYzo1Mzg4Cittc2dpZCAiPG4+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjY4IGRpZmYuYzo1MjcxCittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyNzYKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1yYXcnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjgwCittc2dpZCAic3lub255bSBmb3IgJy1wIC0tc3RhdCciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI4NworbXNnaWQgIm91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgLS1zdGF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mjg5IGRpZmYuYzo1Mjk3Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjkwCittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyOTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMxMworbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzE0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzE3Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzIwCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIG5hbWUgd2lkdGgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMjMKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMjUKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzI2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzI5Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzMyCittc2dpZCAib3V0cHV0IGEgYmluYXJ5IGRpZmYgdGhhdCBjYW4gYmUgYXBwbGllZCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzM3Cittc2dpZCAic2hvdyBjb2xvcmVkIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMzgKK21zZ2lkICI8a2luZD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0MgorbXNnaWQgIiIKKyJkbyBub3QgbXVuZ2UgcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMgaW4gLS1yYXcgb3IgIgorIi0tbnVtc3RhdCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0NSBkaWZmLmM6NTM0OCBkaWZmLmM6NTM1MSBkaWZmLmM6NTQ1NworbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzQ2Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mIFwiYS9cIiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNjIgZGlmZi5jOjUzNjcgZGlmZi5jOjUzNzIKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNjMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbnN0ZWFkIG9mICcrJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM2OAorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhbiBvbGQgbGluZSBpbnN0ZWFkIG9mICctJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM3MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIGNvbnRleHQgaW5zdGVhZCBvZiAnICciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNzYKK21zZ2lkICJEaWZmIHJlbmFtZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzc3Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzc4Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzODIKK21zZ2lkICJkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM4NgorbXNnaWQgIm9taXQgdGhlIHByZWltYWdlIGZvciBkZWxldGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM5MworbXNnaWQgInVzZSB1bm1vZGlmaWVkIGZpbGVzIGFzIHNvdXJjZSB0byBmaW5kIGNvcGllcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MDMKK21zZ2lkICIiCisicHJldmVudCByZW5hbWUvY29weSBkZXRlY3Rpb24gaWYgdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgIgorImdpdmVuIGxpbWl0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQwNworbXNnaWQgInByb2R1Y2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MTAKK21zZ2lkICJpZ25vcmUgd2hpdGVzcGFjZSB3aGVuIGNvbXBhcmluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDE2Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MTkKK21zZ2lkICJpZ25vcmUgY2Fycmllci1yZXR1cm4gYXQgdGhlIGVuZCBvZiBsaW5lIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDIyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuayIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQyNQorbXNnaWQgImhldXJpc3RpYyB0byBzaGlmdCBkaWZmIGh1bmsgYm91bmRhcmllcyBmb3IgZWFzeSByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDI4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJwYXRpZW5jZSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDMyCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQzNAorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDAgZGlmZi5jOjU0NDkgZGlmZi5jOjU0NTIKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDEKK21zZ2lkICJzaG93IHdvcmQgZGlmZiwgdXNpbmcgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ0MyBkaWZmLmM6NTQ0NiBkaWZmLmM6NTQ5MQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDQKK21zZ2lkICJ1c2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NTAKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDUzCittc2dpZCAiaG93IHdoaXRlIHNwYWNlcyBhcmUgaWdub3JlZCBpbiAtLWNvbG9yLW1vdmVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDU2Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJleGl0IHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzLCAwIG90aGVyd2lzZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ2OAorbXNnaWQgImRpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3MAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDcyCittc2dpZCAicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgIjx3aGVuPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0ODMKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDg2Cittc2dpZCAidHJlYXQgJ2dpdCBhZGQgLU4nIGVudHJpZXMgYXMgcmVhbCBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0ODgKK21zZ2lkICI8c3RyaW5nPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ4OQorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDk1Cittc2dpZCAic2hvdyBhbGwgY2hhbmdlcyBpbiB0aGUgY2hhbmdlc2V0IHdpdGggLVMgb3IgLUciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU1MDEKK21zZ2lkICJjb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwMgorbXNnaWQgIjxvYmplY3QtaWQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjYxNjQKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NjE2NworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgIiIKKworIzogZGlyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCittc2dzdHIgIiIKKworIzogZGlyLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpci5jOjY4MiBkaXIuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm46ICclcyciCittc2dzdHIgIiIKKworIzogZGlyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IGhhdmUgaXNzdWVzOiBwYXR0ZXJuICclcycgaXMgcmVwZWF0ZWQiCittc2dzdHIgIiIKKworIzogZGlyLmM6NzI0Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGRpci5jOjIwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogZGlyLmM6MjQxNQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGRpci5jOjI1MzkKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogZGlyLmM6MzM0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzozMzg4IGRpci5jOjMzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZGlyLmM6MzQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGVkaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgIiIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiIgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogZW52aXJvbm1lbnQuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpdCBuYW1lc3BhY2UgcGF0aCBcIiVzXCIiCittc2dzdHIgIiIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgIiIKKworIzogZXhlYy1jbWQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE1MAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE1MworbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjI1NworbXNnaWQgIi0tc3RhdGVsZXNzLXJwYyByZXF1aXJlcyBtdWx0aV9hY2tfZGV0YWlsZWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjM2MiBmZXRjaC1wYWNrLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzozNjcgZmV0Y2gtcGFjay5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzozNzIgZmV0Y2gtcGFjay5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6ODE4Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjkxOAorbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo5NzAgZmV0Y2gtcGFjay5jOjk3NiBmZXRjaC1wYWNrLmM6OTc5IGZldGNoLXBhY2suYzo5ODUKKyM6IGZldGNoLXBhY2suYzo5ODkgZmV0Y2gtcGFjay5jOjk5MyBmZXRjaC1wYWNrLmM6OTk3IGZldGNoLXBhY2suYzoxMDAxCisjOiBmZXRjaC1wYWNrLmM6MTAwNSBmZXRjaC1wYWNrLmM6MTAwOSBmZXRjaC1wYWNrLmM6MTAxMyBmZXRjaC1wYWNrLmM6MTAxNworIzogZmV0Y2gtcGFjay5jOjEwMjMgZmV0Y2gtcGFjay5jOjEwMjkgZmV0Y2gtcGFjay5jOjEwMzQgZmV0Y2gtcGFjay5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEwMzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMDU4Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEwNzAgZmV0Y2gtcGFjay5jOjE1MzYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTIwOQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgcmVxdWVzdHMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAnJXMnLCByZWNlaXZlZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGFja3M6ICVkIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIHdhbnRlZC1yZWY6ICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyB3YW50ZWQgcmVmczogJWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg4Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjMKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjM5MAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjY2OAorbXNnaWQgIiIKKyJnaXZlbiBwYXR0ZXJuIGNvbnRhaW5zIE5VTEwgYnl0ZSAodmlhIC1mIDxmaWxlPikuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgIgorIndpdGggLVAgdW5kZXIgUENSRSB2MiIKK21zZ3N0ciAiIgorCisjOiBncmVwLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBncmVwLmM6MjE0MSBzZXR1cC5jOjE2NSBidWlsdGluL2Nsb25lLmM6NDExIGJ1aWx0aW4vZGlmZi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjIxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjUKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgIiIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgIiIKKworIzogaGVscC5jOjMxCittc2dpZCAiTWFpbiBQb3JjZWxhaW4gQ29tbWFuZHMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjM3Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2luZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MzA1Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIiIKKworIzogaGVscC5jOjM2MyBnaXQuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBjb21tYW5kIGxpc3RpbmcgdHlwZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo0MDMKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6NTEyCittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIHRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo1MTcKK21zZ2lkICJFeHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6NTMyCittc2dpZCAiQ29tbWFuZCBhbGlhc2VzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iCittc2dzdHIgIiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGhlbHAuYzo3MTQKK21zZ2lkICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBpZGVudC5jOjM0OQorbXNnaWQgIiIKKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBpZGVudC5jOjM3OQorbXNnaWQgIm5vIGVtYWlsIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogaWRlbnQuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAiIgorCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBpZGVudC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgbmFtZSAoZ290ICclcycpIgorbXNnc3RyICIiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBpZGVudC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIGJsb2IgbW9kZSwgYnV0IGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjczCittc2dpZCAic3BhcnNlOnBhdGggZmlsdGVycyBzdXBwb3J0IGhhcyBiZWVuIGRyb3BwZWQiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWx0ZXItc3BlYyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAiIgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLmM6MTA3IHJlcmVyZS5jOjcyMCBidWlsdGluL2FtLmM6MTg3NCBidWlsdGluL2FtLmM6MTkwOAorIzogYnVpbHRpbi9jaGVja291dC5jOjUzOSBidWlsdGluL2NoZWNrb3V0LmM6Nzk4IGJ1aWx0aW4vY2xvbmUuYzo4MDkKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNjQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY3Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgdG8gcmVmcmVzaCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTEwIG1lcmdlLXJlY3Vyc2l2ZS5jOjkyOQorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjAgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UpIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjEgbWVyZ2UtcmVjdXJzaXZlLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIHRvIHRoZSBmb2xsb3dpbmcgY29tbWl0OiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI0IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY0Cittc2dpZCAiRm91bmQgYSBwb3NzaWJsZSBtZXJnZSByZXNvbHV0aW9uIGZvciB0aGUgc3VibW9kdWxlOlxuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQ5Cittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUzNAorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYxNCBtZXJnZS1yZWN1cnNpdmUuYzoyNTMwIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc0MgorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQ5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4NgorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5OAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEwMgorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE0NyBnaXQtc3VibW9kdWxlLnNoOjk5MworbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCAiCisiaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gIgorIiVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgIgorIndhcyByZW5hbWVkIGluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MDgKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDEzCittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChhZGQvYWRkKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ4MgorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSEiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzU5NQorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU4Cittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiAgJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgzMiBidWlsdGluL21lcmdlLmM6Njk0IGJ1aWx0aW4vbWVyZ2UuYzo4NzQKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIHZlcnNpb24gJXUgZG9lcyBub3QgbWF0Y2giCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEwOAorbXNnaWQgImludmFsaWQgY2h1bmsgb2Zmc2V0ICh0b28gbGFyZ2UpIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDcKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE1MQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggcGFjayBuYW1lcyBvdXQgb2Ygb3JkZXI6ICclcycgYmVmb3JlICclcyciCittc2dzdHIgIiIKKworIzogbWlkeC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6Mjg4Cittc2dpZCAiZXJyb3IgcHJlcGFyaW5nIHBhY2tmaWxlIGZyb20gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhZGQgcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2NhdGUgb2JqZWN0ICVkIGluIHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo4NDIKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHNlZSBwYWNrLWZpbGUgJXMgdG8gZHJvcCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYXIgbXVsdGktcGFjay1pbmRleCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMjgKK21zZ2lkICJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExNjQKK21zZ2lkICJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjayBlbnRyeSBmb3Igb2lkWyVkXSA9ICVzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEyMjAKK21zZ2lkICJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEyMzAKK21zZ2lkICJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMzg4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQwNworbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIgorbXNnc3RyICIiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgcHJldmlvdXMgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuXG4iCisiUGxlYXNlLCB1c2UgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyB0byAiCisiY29tbWl0L2Fib3J0IHRoZSBwcmV2aW91cyBtZXJnZSBiZWZvcmUgeW91IHN0YXJ0IGEgbmV3IG5vdGVzIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICIiCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKworIzogbm90ZXMtdXRpbHMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBvYmplY3QuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjOiBvYmplY3QuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICIiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAiIgorCisjOiBvYmplY3QuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIiIKKworIzogb2JqZWN0LmM6MjY2IG9iamVjdC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoICVzIgorbXNnc3RyICIiCisKKyM6IHBhY2tmaWxlLmM6NjQxCittc2dpZCAib2Zmc2V0IGJlZm9yZSBlbmQgb2YgcGFja2ZpbGUgKGJyb2tlbiAuaWR4PykiCittc2dzdHIgIiIKKworIzogcGFja2ZpbGUuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAiIgorCisjOiBwYWNrZmlsZS5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBvcHRpb246ICVzIChjb3VsZCBiZSAtLSVzJXMgb3IgLS0lcyVzKSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDIzIHBhcnNlLW9wdGlvbnMuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzID8pIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gYCVzJyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODgKK21zZ2lkICIuLi4iCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTUKK21zZ2lkICItTlVNIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgb2YgLS0lcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBwYXRoLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MTMwCittc2dpZCAiRXNjYXBlIGNoYXJhY3RlciAnXFwnIG5vdCBhbGxvd2VkIGFzIGxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzoxNDgKK21zZ2lkICJPbmx5IG9uZSAnYXR0cjonIHNwZWNpZmljYXRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzoxNTEKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjI1OQorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzoyNjYKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBpcyBiYWRseSBxdW90ZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MTA2Cittc2dpZCAiZmx1c2ggcGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjE0NiBwa3QtbGluZS5jOjIzMgorbXNnaWQgInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjE2MiBwa3QtbGluZS5jOjE2NAorbXNnaWQgInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWRlZCBsc3RhdDogJXMiCittc2dzdHIgIiIKKworIzogcHJldHR5LmM6OTgxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9taXNvciByZW1vdGUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgJyVzJyB0byBpbmRleCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTUzMQorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAlZCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTcyNAorbXNnaWQgImJhZCBpbmRleCBmaWxlIHNoYTEgc2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IHVzZXMgJS40cyBleHRlbnNpb24sIHdoaWNoIHdlIGRvIG5vdCB1bmRlcnN0YW5kIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbmFtZSBmaWVsZCBpbiB0aGUgaW5kZXgsIG5lYXIgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxODY2Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgc3RhZ2UgZW50cmllcyBmb3IgbWVyZ2VkIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTk3OCByZWFkLWNhY2hlLmM6MjI2NiByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IGJ1aWx0aW4vYWRkLmM6NDk5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc4IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NTQgYnVpbHRpbi9jbGVhbi5jOjk2NyBidWlsdGluL2NvbW1pdC5jOjM2NworIzogYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDk5IGJ1aWx0aW4vbXYuYzoxNDUKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDYgYnVpbHRpbi9ybS5jOjI3MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGluZGV4LCBleHBlY3QgJXMgaW4gJXMsIGdvdCAlcyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MzAyMSBzdHJidWYuYzoxMTQ1IHdyYXBwZXIuYzo2MjIgYnVpbHRpbi9tZXJnZS5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjMxMjQgc2VxdWVuY2VyLmM6MjQyOSBzZXF1ZW5jZXIuYzo0MDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjMxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjMxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MzMyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiCittc2dzdHIgIiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozNQorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWFuZD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiYiwgYnJlYWsgPSBzdG9wIGhlcmUgKGNvbnRpbnVlIHJlYmFzZSBsYXRlciB3aXRoICdnaXQgcmViYXNlIC0tY29udGludWUnKVxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NjggZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIzMgorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC5cbiIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODcxCittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDgKK21zZ2lkICIiCisiXG4iCisiSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA1IHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzUzNgorIzogc2VxdWVuY2VyLmM6MzU2MiBzZXF1ZW5jZXIuYzo1MjYzIGJ1aWx0aW4vZnNjay5jOjM0NiBidWlsdGluL3JlYmFzZS5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOlxuIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mICIKKyJ3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVmcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjY2OSByZWYtZmlsdGVyLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIHdyaXRpbmcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6ODMzIHNlcXVlbmNlci5jOjQwNSBzZXF1ZW5jZXIuYzoyNzkzIHNlcXVlbmNlci5jOjI5OTcKKyM6IHNlcXVlbmNlci5jOjMwMTEgc2VxdWVuY2VyLmM6MzI2OSBzZXF1ZW5jZXIuYzo1MTc5IHN0cmJ1Zi5jOjExNDIKKyM6IHdyYXBwZXIuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjg2MCBzdHJidWYuYzoxMTQwIHdyYXBwZXIuYzoxODggd3JhcHBlci5jOjM1OCBidWlsdGluL2FtLmM6NzE0CisjOiBidWlsdGluL3JlYmFzZS5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJXMgaXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBkYXRlX3JlZiBmYWlsZWQgZm9yIHJlZiAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MjE1MSByZWZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICIiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDggcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUxIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgIiIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NDIgd3Qtc3RhdHVzLmM6MTkzOAorbXNnaWQgImdvbmUiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUob2JqZWN0dHlwZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2lkdGg6JXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShpZikgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZm9ybWF0IHN0cmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTQwIHJlZi1maWx0ZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHJlZiB3aXRoIGJyb2tlbiBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1tZXJnZWQiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIG11c3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZyByZW1vdGUgc2hvcnRoYW5kIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6NDEzCittc2dpZCAibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjQyMQorbXNnaWQgIm1vcmUgdGhhbiBvbmUgdXBsb2FkcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVzdWFsbHkgdHJhY2tzICVzLCBub3QgJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorIy4gPHJlbW90ZT4gPHNyYz46PGRzdD4iIHB1c2gsIGFuZCAiYmVpbmcgcHVzaGVkICgnJXMnKSIgaXMKKyMuIHRoZSA8c3JjPi4KKyMuCisjOiByZW1vdGUuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGVzdGluYXRpb24geW91IHByb3ZpZGVkIGlzIG5vdCBhIGZ1bGwgcmVmbmFtZSAoaS5lLixcbiIKKyJzdGFydGluZyB3aXRoIFwicmVmcy9cIikuIFdlIHRyaWVkIHRvIGd1ZXNzIHdoYXQgeW91IG1lYW50IGJ5OlxuIgorIlxuIgorIi0gTG9va2luZyBmb3IgYSByZWYgdGhhdCBtYXRjaGVzICclcycgb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIi0gQ2hlY2tpbmcgaWYgdGhlIDxzcmM+IGJlaW5nIHB1c2hlZCAoJyVzJylcbiIKKyIgIGlzIGEgcmVmIGluIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIElmIHNvIHdlIGFkZCBhIGNvcnJlc3BvbmRpbmdcbiIKKyIgIHJlZnMve2hlYWRzLHRhZ3N9LyBwcmVmaXggb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIlxuIgorIk5laXRoZXIgd29ya2VkLCBzbyB3ZSBnYXZlIHVwLiBZb3UgbXVzdCBmdWxseSBxdWFsaWZ5IHRoZSByZWYuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgY29tbWl0IG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRyZWUgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgdHJlZSBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE2MjcgcmVtb3RlLmM6MTcyOAorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTY5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNzE3Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiogSWdub3JpbmcgZnVubnkgcmVmICclcycgbG9jYWxseSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDIzCittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MjAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiByZW1vdGUuYzoyMDQzCittc2dpZCAiICAodXNlIFwiZ2l0IHB1c2hcIiB0byBwdWJsaXNoIHlvdXIgbG9jYWwgY29tbWl0cylcbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiByZW1vdGUuYzoyMDU0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiByZW1vdGUuYzoyMDY3Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIiIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmVwbGFjZS1vYmplY3QuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcmVwbGFjZSByZWY6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSBkZXB0aCB0b28gaGlnaCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoyNjQgcmVyZXJlLmM6MjY5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2VkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDY3IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgY29uZmxpY3RlZCBzdGF0ZSBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjEwNjggcmVyZXJlLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZW1lbWJlcmVkIHJlc29sdXRpb24gZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IHJldmlzaW9uLmM6MjQ5NworbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgIiIKKworIzogcmV2aXNpb24uYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAiIgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiIgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIiIKKworIzogcnVuLWNvbW1hbmQuYzo3NjIKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzo0MjUKK21zZ2lkICIiCisibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS0iCisic2lnbmVkIHB1c2giCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6NDM3Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjQ0MgorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzEzIGJ1aWx0aW4vcmViYXNlLmM6NzgxIGJ1aWx0aW4vcmViYXNlLmM6MTcwNiBidWlsdGluL3JtLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMjMKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzI1Cittc2dpZCAiY2hlcnJ5LXBpY2siCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzg3Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzkwCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDAzIHNlcXVlbmNlci5jOjI5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQxNSBzZXF1ZW5jZXIuYzoyNzk4IHNlcXVlbmNlci5jOjI5OTkgc2VxdWVuY2VyLmM6MzAxMworIzogc2VxdWVuY2VyLmM6MzI3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzggc2VxdWVuY2VyLmM6MTcwNyBzZXF1ZW5jZXIuYzoyODE4IHNlcXVlbmNlci5jOjMyNTkKKyM6IHNlcXVlbmNlci5jOjMzNjggYnVpbHRpbi9hbS5jOjI0NCBidWlsdGluL2NvbW1pdC5jOjc4MyBidWlsdGluL21lcmdlLmM6MTExNworIzogYnVpbHRpbi9yZWJhc2UuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0NjgKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTM5IGJ1aWx0aW4vdGFnLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjY0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3OTIgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MDUKKyM6IGJ1aWx0aW4vYW0uYzo3OTcgYnVpbHRpbi9tZXJnZS5jOjExMTQgYnVpbHRpbi9yZWJhc2UuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODAyCittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MDcKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MTIKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhcmlhYmxlICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODIxCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9OQU1FJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0VNQUlMJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MjUKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0RBVEUnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjkwMiBzZXF1ZW5jZXIuYzoxNDI3Cittc2dpZCAibWFsZm9ybWVkIGlkZW50IGxpbmUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTIxOAorbXNnaWQgIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyMjQKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTIzNworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjc5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjgxCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEzMjcKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIGFmdGVyIGNyZWF0aW5nIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMzI5Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMzMzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTM1NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEzNjAgc2VxdWVuY2VyLmM6MTQ1OCBidWlsdGluL2NvbW1pdC5jOjE1NjkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQxMSBzZXF1ZW5jZXIuYzoyMDU1Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQzMQorbXNnaWQgImNvcnJ1cHRlZCBhdXRob3Igd2l0aG91dCBkYXRlIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE0NDcgYnVpbHRpbi9hbS5jOjE1NjEgYnVpbHRpbi9tZXJnZS5jOjY4NAorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQ4MCBzZXF1ZW5jZXIuYzoxNTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbW1pdCBtZXNzYWdlIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNTE2IGJ1aWx0aW4vYW0uYzoxNTgzIGJ1aWx0aW4vY29tbWl0LmM6MTY2OCBidWlsdGluL21lcmdlLmM6ODgzCisjOiBidWlsdGluL21lcmdlLmM6OTA4Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTU3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTY1NiBzZXF1ZW5jZXIuYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTcxNCBzZXF1ZW5jZXIuYzoxNzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAlZCBjb21taXRzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI0Cittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTcyNiBzZXF1ZW5jZXIuYzozMzA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI4Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTc0MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxODUwCittc2dpZCAieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxODU3Cittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjE4ODQgc2VxdWVuY2VyLmM6MTg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTkxNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnRzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIzNDggYnVpbHRpbi9yZWJhc2UuYzoxNzIgYnVpbHRpbi9yZWJhc2UuYzoxOTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIzIGJ1aWx0aW4vcmViYXNlLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcycuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIzODQKK21zZ2lkICJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjM5MQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjQzNQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjQ0MgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNDUzCittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjQ1NQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI2MzAKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI3MzYgc2VxdWVuY2VyLmM6NDQ2MworbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI3NTIKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjc1NworbXNnaWQgImNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzg4Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyODQ4IHNlcXVlbmNlci5jOjQyMDkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjg1MCBzZXF1ZW5jZXIuYzoyODYxCittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyODUyIHNlcXVlbmNlci5jOjI4OTYKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyODgyIGJ1aWx0aW4vZ3JlcC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjg4NQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjkwMgorbXNnaWQgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyOTQzCittc2dpZCAibm8gcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI5NTEKK21zZ2lkICJubyBjaGVycnktcGljayBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyOTYxCittc2dpZCAiZmFpbGVkIHRvIHNraXAgdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyOTY4Cittc2dpZCAidGhlcmUgaXMgbm90aGluZyB0byBza2lwIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorInRyeSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzA5NSBzZXF1ZW5jZXIuYzo0MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzEzNCBzZXF1ZW5jZXIuYzo0MTAxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMTkwIHNlcXVlbmNlci5jOjMxOTQgYnVpbHRpbi9kaWZmdG9vbC5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIGZhaWxlZDogJXNcbiIKKyIlc1lvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyMjcKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzM0OAorbXNnaWQgIndyaXRpbmcgZmFrZSByb290IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMzUzCittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMzkxIGJ1aWx0aW4vcmViYXNlLmM6ODc2IGJ1aWx0aW4vcmViYXNlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM0NjcKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM1MTAKK21zZ2lkICJvY3RvcHVzIG1lcmdlIGNhbm5vdCBiZSBleGVjdXRlZCBvbiB0b3Agb2YgYSBbbmV3IHJvb3RdIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBjb21taXQgbWVzc2FnZSBvZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV2ZW4gYXR0ZW1wdCB0byBtZXJnZSAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzcwNAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzc3MyBidWlsdGluL3JlYmFzZS5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNzg4IGJ1aWx0aW4vcmViYXNlLmM6NzQ5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzg2MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgdmFsaWQgT0lEIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM4NjggZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDEwOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MTE0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQyMjEKK21zZ2lkICJjYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjMwCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQyMzcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDI3MyBzZXF1ZW5jZXIuYzo0MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBmaWxlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQzMjcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDMzNAorbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ0NzkKK21zZ2lkICJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDk1MgorbXNnaWQgIm1ha2Vfc2NyaXB0OiB1bmhhbmRsZWQgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0OTU1Cittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTExMworbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTIyNiBzZXF1ZW5jZXIuYzo1MjQzCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1MjU3Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1MzUxCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjM5MQorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6Mzk1Cittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo1NDkKK21zZ2lkICJ1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9ucyBmb3VuZDoiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo3MjAgc2V0dXAuYzo3MjIgc2V0dXAuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzo3MjUgc2V0dXAuYzo3ODEgc2V0dXAuYzo3OTEgc2V0dXAuYzo4MzAgc2V0dXAuYzo4MzgKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMDkwCittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEwOTkgc2V0dXAuYzoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGFuZ2UgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjExMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKyJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKworIzogc2V0dXAuYzoxMjcxCittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEyODYKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjEyOTEKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpZ25vcmluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBvYmplY3QgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo2MjUKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NjQzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjY1MAorbXNnaWQgInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkIGNoZWNrb3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXR0ZW1wdGluZyB0byBtbWFwICU8UFJJdU1BWD4gb3ZlciBsaW1pdCAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjk2NAorbXNnaWQgIm1tYXAgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjExMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTI1MiBzaGExLWZpbGUuYzoyMzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTI1NCBzaGExLWZpbGUuYzoyMzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjEyOTYKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjEzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjEzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTcxMworbXNnaWQgImZpbGUgd3JpdGUgZXJyb3IiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTczMgorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTc5OQorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTgyMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxODI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxODQ3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxOTYyCittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTk3MAorbXNnaWQgImNvcnJ1cHQgdGFnIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IHJlYWQgd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjE0NSBzaGExLWZpbGUuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjIxMyBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjQwMyBzaGExLWZpbGUuYzoyNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyNDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgaGVhZGVyIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjI0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1uYW1lLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtbmFtZS5jOjQ5OAorbXNnaWQgIlRoZSBjYW5kaWRhdGVzIGFyZToiCittc2dzdHIgIiIKKworIzogc2hhMS1uYW1lLmM6Nzk3Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQi9zIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZQorIzogc3RyYnVmLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCL3MiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlCisjOiBzdHJidWYuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIvcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZQorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZS9zIgorbXNnaWRfcGx1cmFsICIldSBieXRlcy9zIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogc3RyYnVmLmM6MTE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZWRpdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjAxNgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTkwNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MTk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzIGluc2lkZSBnaXQgZGlyICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoyMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNjAgc3VibW9kdWxlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbW92ZSAnJXMnIGludG8gYW4gZXhpc3RpbmcgZ2l0IGRpciIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoyMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjIxOTgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo3NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo1MzkgdHJhaWxlci5jOjU0NCBidWlsdGluL3JlbW90ZS5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgIiIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6NzA1Cittc2dpZCAic3VwcG9ydCBmb3IgcHJvdG9jb2wgdjIgbm90IGltcGxlbWVudGVkIHlldCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo5NDkKK21zZ2lkICJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjEwNTYKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoxMzQ1IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTYKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEgdHJhbnNwb3J0LWhlbHBlci5jOjkwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcwCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0OTIKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNQorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU0NCB0cmFuc3BvcnQtaGVscGVyLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTEKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEzCittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZD1pZi1hc2tlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY0Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAnZm9yY2UnIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE2Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIxCittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWV4cG9ydCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzAgdHJhbnNwb3J0LWhlbHBlci5jOjEzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzMgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDIKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiB0cmVlLXdhbGsuYzozOQorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgIiIKKworIzogdHJlZS13YWxrLmM6NDMKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IHRyZWUtd2Fsay5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGVuYW1lIGluIHRyZWUgZW50cnkgY29udGFpbnMgYmFja3NsYXNoOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyZWUtd2Fsay5jOjEyNAorbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQxCittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAiIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAiIgorCisjOiB1cmxtYXRjaC5jOjIzMgorbXNnaWQgImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiB1cmxtYXRjaC5jOjM3MQorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzoyNTggYnVpbHRpbi9hbS5jOjIwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiB3b3JrdHJlZS5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGF0IG1haW4gd29ya2luZyB0cmVlIGlzIG5vdCB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIiIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIiIKKworIzogd3JhcHBlci5jOjM4NyB3cmFwcGVyLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAiIgorCisjOiB3cmFwcGVyLmM6NTk2Cittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE1OAorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxODcgd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTkwIHd0LXN0YXR1cy5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTMgd3Qtc3RhdHVzLmM6MjI1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE5NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTkgd3Qtc3RhdHVzLmM6MjAzCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxMSB3dC1zdGF0dXMuYzoxMDc0Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIzNCB3dC1zdGF0dXMuYzoxMDgzCittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI0MAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI0MQorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI0MworbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNzAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjcyCittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNzQKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyODAKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyOTAKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyOTQKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyOTYKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mjk4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MzAwCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MzAyCittc2dpZCAidW5rbm93bjoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MzA0Cittc2dpZCAidW5tZXJnZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjM4NAorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mzg2Cittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjM4OAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiB3dC1zdGF0dXMuYzo5MzgKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5NDAKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEwMjIKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNvbXB1dGUgdGhlIGJyYW5jaCBhaGVhZC9iZWhpbmQgdmFsdWVzLlxuIgorIllvdSBjYW4gdXNlICctLW5vLWFoZWFkLWJlaGluZCcgdG8gYXZvaWQgdGhpcy5cbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTY4Cittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNzIKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNzQKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDkKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTMxMQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTM3MQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMzkxCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTM5NAorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDAzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MDgKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQxOQorbXNnaWQgIkNoZXJyeS1waWNrIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MjkKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDMyCittc2dpZCAiICAocnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQzNQorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzcKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDM5Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1OAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDgyCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDg1Cittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDMKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzMxCittc2dpZCAiTm8gY29tbWl0cyB5ZXQiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc0NQorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ3Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NjUKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE5MDUKK21zZ2lkICJObyBjb21taXRzIHlldCBvbiAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDUgd3Qtc3RhdHVzLmM6MTk0OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGFjdGlvbiBpcyBlLmcuICJwdWxsIHdpdGggcmViYXNlIgorIzogd3Qtc3RhdHVzLmM6MjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI0NzYKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU4IGJ1aWx0aW4vY2xvbmUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo5MiBidWlsdGluL2NvbW1pdC5jOjI4OAorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc3Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTIgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNjcKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNzAKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc1Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg4Cittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA4IGJ1aWx0aW4vY2xlYW4uYzo5MTAgYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL212LmM6MTI0CisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU2IGJ1aWx0aW4vcHVsbC5jOjIyMyBidWlsdGluL3B1c2guYzo1NDgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM0NCBidWlsdGluL3JtLmM6MjQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMxMQorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMTIgYnVpbHRpbi9jaGVja291dC5jOjE0ODIgYnVpbHRpbi9yZXNldC5jOjMwNworbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEzCittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE0Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE1Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMTYKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMTcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMTgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjEKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyMworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMyNAorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjUKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSd2ZSBhZGRlZCBhbm90aGVyIGdpdCByZXBvc2l0b3J5IGluc2lkZSB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS5cbiIKKyJDbG9uZXMgb2YgdGhlIG91dGVyIHJlcG9zaXRvcnkgd2lsbCBub3QgY29udGFpbiB0aGUgY29udGVudHMgb2ZcbiIKKyJ0aGUgZW1iZWRkZWQgcmVwb3NpdG9yeSBhbmQgd2lsbCBub3Qga25vdyBob3cgdG8gb2J0YWluIGl0LlxuIgorIklmIHlvdSBtZWFudCB0byBhZGQgYSBzdWJtb2R1bGUsIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJTZWUgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDAwCittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQyOCBidWlsdGluL2NvbW1pdC5jOjM0OAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQzNAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ0NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ5Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0NzEgYnVpbHRpbi9jaGVja291dC5jOjE2NDggYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0NzggYnVpbHRpbi9jaGVja291dC5jOjE2NjAgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzozNDcKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6NTM3Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjc5MAorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo4MzgKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6ODQzIGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6ODUwCittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjk0MworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6OTQ4IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6OTUzCittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjExNjkKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTE5NworbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE0ODQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTUwNQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTEKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE1MzcKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTY5Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTYxNiBidWlsdGluL2FtLmM6MTYyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzgKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9hbS5jOjE2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTY5NSBidWlsdGluL2NvbW1pdC5jOjM5NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTczOSBidWlsdGluL2FtLmM6MTgwNworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTc1NgorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTc2NgorbXNnaWQgIlVzZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTgxMAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTgxNworbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIllvdSBzaG91bGQgJ2dpdCBhZGQnIGVhY2ggZmlsZSB3aXRoIHJlc29sdmVkIGNvbmZsaWN0cyB0byBtYXJrIHRoZW0gYXMgIgorInN1Y2guXG4iCisiWW91IG1pZ2h0IHJ1biBgZ2l0IHJtYCBvbiBhIGZpbGUgdG8gYWNjZXB0IFwiZGVsZXRlZCBieSB0aGVtXCIgZm9yIGl0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTkyNCBidWlsdGluL2FtLmM6MTkyOCBidWlsdGluL2FtLmM6MTk0MCBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE5NzYKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIwMjAKK21zZ2lkICIiCisiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFEIHNpbmNlIHRoZSBsYXN0ICdhbScgZmFpbHVyZS5cbiIKKyJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNTMKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE1NAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNjIKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE2NAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY1IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU4CisjOiBidWlsdGluL3JlcGFjay5jOjMwNCBidWlsdGluL3N0YXNoLmM6ODExCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNjcKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcwCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNzIKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc0Cittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxNzgKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTgxCittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxODQKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxODYgYnVpbHRpbi9hbS5jOjIxODkgYnVpbHRpbi9hbS5jOjIxOTIgYnVpbHRpbi9hbS5jOjIxOTUKKyM6IGJ1aWx0aW4vYW0uYzoyMTk4IGJ1aWx0aW4vYW0uYzoyMjAxIGJ1aWx0aW4vYW0uYzoyMjA0IGJ1aWx0aW4vYW0uYzoyMjA3CisjOiBidWlsdGluL2FtLmM6MjIxMworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMDMgYnVpbHRpbi9jb21taXQuYzoxMzg2IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc2IGJ1aWx0aW4vZ3JlcC5jOjg4MyBidWlsdGluL21lcmdlLmM6MjQ5CisjOiBidWlsdGluL3B1bGwuYzoxNjAgYnVpbHRpbi9wdWxsLmM6MjE5IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA5IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzgKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NSBidWlsdGluL3RhZy5jOjQzNyBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIxMAorbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIxNgorbXNnaWQgIm92ZXJyaWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXRjaCBmYWlsdXJlIG9jY3VycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIxOAorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMjcKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIzMworbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM3Cittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM5Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI0MSBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUwNworIzogYnVpbHRpbi9tZXJnZS5jOjI4NiBidWlsdGluL3B1bGwuYzoxOTQgYnVpbHRpbi9yZWJhc2UuYzo1MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMyBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI0MiBidWlsdGluL3JlYmFzZS5jOjUxMCBidWlsdGluL3JlYmFzZS5jOjE1MTQKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ1Cittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNjMKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE1Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjMyNQorbXNnaWQgImludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgcGF0Y2hlcyBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4Cittc2dpZCAiZ2l0IGFwcGx5IFs8b3B0aW9ucz5dIFs8cGF0Y2g+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNgorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI3Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMwCittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1zdGFydCBbLS10ZXJtLXtvbGQsZ29vZH09PHRlcm0+IC0tdGVybS17bmV3LGJhZH0iCisiPTx0ZXJtPl1bLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMzMAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzcKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBvcHRpb246ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTIKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NDgKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTEKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWY6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMQorbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM5Cittc2dpZCAicmVzZXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQxCittc2dpZCAid3JpdGUgb3V0IHRoZSBiaXNlY3Rpb24gc3RhdGUgaW4gQklTRUNUX0xPRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ3Cittc2dpZCAicHJpbnQgb3V0IHRoZSBiaXNlY3QgdGVybXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUxCittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUzCittc2dpZCAibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MAorbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njc0Cittc2dpZCAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgcmVxdWlyZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODEKK21zZ2lkICItLWJpc2VjdC1yZXNldCByZXF1aXJlcyBlaXRoZXIgbm8gYXJndW1lbnQgb3IgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4NQorbXNnaWQgIi0tYmlzZWN0LXdyaXRlIHJlcXVpcmVzIGVpdGhlciA0IG9yIDUgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTEKK21zZ2lkICItLWNoZWNrLWFuZC1zZXQtdGVybXMgcmVxdWlyZXMgMyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5NworbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzAzCittc2dpZCAiLS1iaXNlY3QtdGVybXMgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDE2Cittc2dpZCAibXVzdCBlbmQgd2l0aCBhIGNvbG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc0NworbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDQKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDYKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NworbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1OAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU5Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY0Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjUKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjkyMQorbXNnaWQgIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5NzIKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzEKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzUKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjAKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJjYW5ub3QgY29weSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhIGNvcHkgb2YgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMAorbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUwNQorbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2Cittc2dpZCAiY2hhbmdlIHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3Cittc2dpZCAidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjgKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vYnJhbmNoLmM6NjMzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMiBidWlsdGluL2JyYW5jaC5jOjYzNAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYwIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDggYnVpbHRpbi90YWcuYzo0NDAKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQzOAorIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njg0IGJ1aWx0aW4vY2xvbmUuYzo3ODQKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiIgorIlRoZSAtYSwgYW5kIC1yLCBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgdGFrZSBhIGJyYW5jaCBuYW1lLlxuIgorIkRpZCB5b3UgbWVhbiB0byB1c2U6IC1hfC1yIC0tbGlzdCA8cGF0dGVybj4/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAiIgorInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAiCisiJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE1IGJ1aWx0aW4vYnVuZGxlLmM6MjMKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNyBidWlsdGluL2J1bmRsZS5jOjMzCittc2dpZCAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIyOAorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjMwCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM1Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6OTMKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTYwOQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzUKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQwCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MgorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDQKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDo5OTIKK21zZ2lkICJibG9iIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ4Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1MQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTkKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MworbXNnaWQgImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTQKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxCittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjUgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNworbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0MzUgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNgorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI5Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzozMQorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYwCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjkKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTQ4Cittc2dpZCAic3RhZ2Ugc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMyBvciBhbGwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjUKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NworbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc3Cittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODgKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODgyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njc5Cittc2dpZCAic3RyaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODEKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNworbXNnaWQgImdpdCBzd2l0Y2ggWzxvcHRpb25zPl0gWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NyBidWlsdGluL2NoZWNrb3V0LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQxMiBidWlsdGluL2NoZWNrb3V0LmM6NDE1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjUgYnVpbHRpbi9jaGVja291dC5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgdXNlZCB3aGVuICclcycgaXMgbm90IHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUwOSBidWlsdGluL2NoZWNrb3V0LmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgyIGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6ODIKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgY29udGludWUgd2l0aCBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg3NworbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODEgYnVpbHRpbi9jbG9uZS5jOjcxNgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQgYnVpbHRpbi9jaGVja291dC5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk0NworIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg2Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3OAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjQ1IGJ1aWx0aW4vd29ya3RyZWUuYzoyOTAgYnVpbHRpbi93b3JrdHJlZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTggYnVpbHRpbi9jaGVja291dC5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgdGFnICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDggYnVpbHRpbi9jaGVja291dC5jOjEzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMjcKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzMQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzUKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM5Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQzCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDcKK21zZ2lkICJ5b3UgYXJlIHN3aXRjaGluZyBicmFuY2ggd2hpbGUgYmlzZWN0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU0Cittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTcgYnVpbHRpbi9jaGVja291dC5jOjEzNjEgYnVpbHRpbi9jaGVja291dC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OSBidWlsdGluL2NoZWNrb3V0LmM6MTM3MiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjEzODAgYnVpbHRpbi9jaGVja291dC5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzk3Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM5IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMyBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODUKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjEzOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQwCittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDEgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MgorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTQgYnVpbHRpbi93b3JrdHJlZS5jOjUwMworbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NQorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU5Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYxIGJ1aWx0aW4vbWVyZ2UuYzoyODgKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjQKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzcKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODAKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUzNworbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU0MAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU3NworbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU4MgorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzMQorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NTQgYnVpbHRpbi9yZXNldC5jOjMyNAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjUKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NzAKK21zZ2lkICJ5b3UgbXVzdCBzcGVjaWZ5IHBhdGgocykgdG8gcmVzdG9yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJXZSBmb3VuZCAlZCByZW1vdGVzIHdpdGggYSByZWZlcmVuY2UgdGhhdCBtYXRjaGVkLiBTbyB3ZSBmZWxsIGJhY2tcbiIKKyJvbiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgYXJndW1lbnQgYXMgYSBwYXRoLCBidXQgZmFpbGVkIHRoZXJlIHRvbyFcbiIKKyJcbiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNCBidWlsdGluL2NoZWNrb3V0LmM6MTcxNiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NQorIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjcgYnVpbHRpbi9jbG9uZS5jOjEyMSBidWlsdGluL3JlbW90ZS5jOjE2OQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEgYnVpbHRpbi93b3JrdHJlZS5jOjQ5OSBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAiYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE4Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMAorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMQorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY2Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY4Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzIKK21zZ2lkICJ0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDQKK21zZ2lkICJ3aGljaCB0cmVlLWlzaCB0byBjaGVja291dCBmcm9tIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA2Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDgKK21zZ2lkICJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODEwCittc2dpZCAiaWdub3JlIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTEKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbHN0YXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTEKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDggYnVpbHRpbi9kZXNjcmliZS5jOjU1MAorIzogYnVpbHRpbi9ncmVwLmM6OTAxIGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjQgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTkKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQ0Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzCittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0IGJ1aWx0aW4vY2xvbmUuYzo5NiBidWlsdGluL2luaXQtZGIuYzo0ODkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMAorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDIKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0Cittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQgYnVpbHRpbi9jbG9uZS5jOjExNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODUKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk0CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NworbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTQgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjg0MAorIzogYnVpbHRpbi9wdWxsLmM6MjI3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgzCittc2dpZCAidGltZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NQorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzAgYnVpbHRpbi9mZXRjaC5jOjE3MworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMgorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzcgYnVpbHRpbi9pbml0LWRiLmM6NDk1Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzggYnVpbHRpbi9pbml0LWRiLmM6NDk2Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM5Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDMgYnVpbHRpbi9mZXRjaC5jOjE5MSBidWlsdGluL3B1bGwuYzoyNDAKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NAorbXNnaWQgInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDUgYnVpbHRpbi9mZXRjaC5jOjE5MyBidWlsdGluL3B1bGwuYzoyNDMKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NgorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCB1c2UgdGhlaXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTUxCittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB0byBpbmNsdWRlIG9ubHkgZmlsZXMgYXQgcm9vdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjg3Cittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImluZm86IENvdWxkIG5vdCBhZGQgYWx0ZXJuYXRlIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MDgKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NTIKK21zZ2lkICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODA2Cittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODU2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxOQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyMQorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU5IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk0OAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2MworbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc5Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5OCBidWlsdGluL2ZldGNoLmM6MTc4NworIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzMgYnVpbHRpbi9jbG9uZS5jOjEwNTQgYnVpbHRpbi9kaWZmdG9vbC5jOjI3MQorIzogYnVpbHRpbi9sb2cuYzoxODY2IGJ1aWx0aW4vd29ya3RyZWUuYzozMDIgYnVpbHRpbi93b3JrdHJlZS5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDg0Cittc2dpZCAiIgorImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtIgorImFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNDgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MAorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTIKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTcKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYyCittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjM3IGJ1aWx0aW4vY2xvbmUuYzoxMjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW90ZSBicmFuY2ggJXMgbm90IGZvdW5kIGluIHVwc3RyZWFtICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQ4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjEwCittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzMKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LXRyZWUgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXSBbKC1GICIKKyI8ZmlsZT4pLi4uXSA8dHJlZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6NTYgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzNiBidWlsdGluL2xvZy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMQorbXNnaWQgInBhcmVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTEyCittc2dpZCAiaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NiBidWlsdGluL21lcmdlLmM6MjcwCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NjkKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE1IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NgorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMSBidWlsdGluL2NvbW1pdC5jOjE1MDggYnVpbHRpbi9tZXJnZS5jOjI4NworIzogYnVpbHRpbi9wdWxsLmM6MTk1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE4Cittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzMKK21zZ2lkICJtdXN0IGdpdmUgZXhhY3RseSBvbmUgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjMKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3NgorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzgyCittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzk4Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjMgYnVpbHRpbi9jb21taXQuYzo0NDYgYnVpbHRpbi9jb21taXQuYzo0OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzUKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzcKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIzCittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY3NgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE0IGJ1aWx0aW4vY29tbWl0LmM6NzQ3IGJ1aWx0aW4vY29tbWl0LmM6MTA5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyNiBidWlsdGluL3Nob3J0bG9nLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzYzIGJ1aWx0aW4vY29tbWl0LmM6Nzc5Cittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3MAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTI1Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTIKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDYgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaWdub3JlZCBtb2RlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDgyIGJ1aWx0aW4vY29tbWl0LmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTIyCittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NgorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc4Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MworbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDMKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyMAorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NyBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU5IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MQorbXNnaWQgInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYzIGJ1aWx0aW4vY29tbWl0LmM6MTUyMworbXNnaWQgImNvbXB1dGUgZnVsbCBhaGVhZC9iZWhpbmQgdmFsdWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NQorbXNnaWQgInZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1IGJ1aWx0aW4vY29tbWl0LmM6MTUyNSBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NTAKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI3Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MSBidWlsdGluL2NvbW1pdC5jOjE1MzAKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9jb21taXQuYzoxMzc3IGJ1aWx0aW4vY29tbWl0LmM6MTUzMworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTMgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU5IGJ1aWx0aW4vcmViYXNlLmM6MTUyNSBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAibW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzQgYnVpbHRpbi9jb21taXQuYzoxNTMzCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OAorbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODAgcGFyc2Utb3B0aW9ucy5oOjE5MgorbXNnaWQgIndoZW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg0Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQwNgorbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg5Cittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTAKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkyCittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTMgYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3RhZy5jOjQxNAorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NSBidWlsdGluL2djLmM6NTM4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OCBidWlsdGluL2NvbW1pdC5jOjE0OTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMCBwYXJzZS1vcHRpb25zLmg6MzI4IHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTgKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6Mjg5CisjOiBidWlsdGluL3B1bGwuYzoxNjQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAzCittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNAorbXNnaWQgImZvcmNlIGVkaXQgb2YgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNgorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMQorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMgorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTMKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE0Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE1Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTYKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE4Cittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzEKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTMyCittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzOQorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQxCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2ODYKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTcKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIyCittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLSIKKyJyZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxzcGxpdCBvcHRpb25zPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAzCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4NyBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA0CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4OAorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzMgdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDYKK21zZ2lkICJzdGFydCB3YWxrIGF0IGFsbCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA4Cittc2dpZCAic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEwCittc2dpZCAic3RhcnQgd2FsayBhdCBjb21taXRzIGxpc3RlZCBieSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMgorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTUKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE3IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExOQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDMgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTE1Cittc2dpZCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjQKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjYKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjgKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzEKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMworbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQxCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NyBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDgKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTIKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgIk90aGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU0Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OCBidWlsdGluL2Vudi0taGVscGVyLmM6NDAKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGNvbG9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5NiBidWlsdGluL2NvbmZpZy5jOjc0MgorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTkKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MDIKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTEKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTYKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTkKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzOAorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NTgKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Njg4Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OTMKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTIKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxOAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczNAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDYKK21zZ2lkICJlZGl0aW5nIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NDcgYnVpbHRpbi9jb25maWcuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6MTAwCittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzgKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzkKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQwCittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ1Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ3Cittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ5Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTMgYnVpbHRpbi9uYW1lLXJldi5jOjQ3MworbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU0IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTcKK21zZ2lkICJtYXJrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OAorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzYKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjA1Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1NgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTgKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNTAKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMworbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM2Cittc2dpZCAid29ya2luZyB0cmVlIGZpbGUgaGFzIGJlZW4gbGVmdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk5Cittc2dpZCAicGVyZm9ybSBhIGZ1bGwtZGlyZWN0b3J5IGRpZmYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMQorbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA2Cittc2dpZCAidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNworbXNnaWQgInRvb2wiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOAorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzkKK21zZ2lkICItLWRpci1kaWZmIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MgorbXNnaWQgIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzU3Cittc2dpZCAibm8gPGNtZD4gZ2l2ZW4gZm9yIC0tZXh0Y21kPTxjbWQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2Cittc2dpZCAiZ2l0IGVudi0taGVscGVyIC0tdHlwZT1bYm9vbHx1bG9uZ10gPG9wdGlvbnM+IDxlbnYtdmFyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6MzcgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAidHlwZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQzCittc2dpZCAiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjg1MgorbXNnaWQgIkVycm9yOiBDYW5ub3QgZXhwb3J0IG5lc3RlZCB0YWdzIHVubGVzcyAtLW1hcmstdGFncyBpcyBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NworbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjAKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgY29tbWl0IG1lc3NhZ2VzIGluIGFuIGFsdGVybmF0ZSBlbmNvZGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MworbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY5Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MQorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzUKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NgorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NyBidWlsdGluL2xvZy5jOjE3MDUKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc4Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc5Cittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MworbXNnaWQgIlNob3cgb3JpZ2luYWwgb2JqZWN0IGlkcyBvZiBibG9icy9jb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTg1Cittc2dpZCAiTGFiZWwgdGFncyB3aXRoIG1hcmsgaWRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzUKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjIwNAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyNDgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MjA3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MjEwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTIKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NiBidWlsdGluL3B1bGwuYzoyMTcKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjAKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjI1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NgorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkgYnVpbHRpbi9mZXRjaC5jOjE3NSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzEKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIzMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODAKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMzQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMzYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMzcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjI0NgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzU1Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjggYnVpbHRpbi9mZXRjaC5jOjc4NCBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODQKK21zZ2lkICJ3b3VsZCBjbG9iYmVyIGV4aXN0aW5nIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODc3Cittc2dpZCAiIgorIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLFxuIgorImJ1dCB0aGF0IGNoZWNrIGhhcyBiZWVuIGRpc2FibGVkLiBUbyByZS1lbmFibGUsIHVzZSAnLS1zaG93LWZvcmNlZC11cGRhdGVzJ1xuIgorImZsYWcgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAxNyBidWlsdGluL2ZldGNoLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU5IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNQorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MTIKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjcKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyOQorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzEKK21zZ2lkICJ1bmtub3duIGJyYW5jaCB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMzCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU1OSBidWlsdGluL2ZldGNoLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY5IGJ1aWx0aW4vZmV0Y2guYzoxNjI0IGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY4NAorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzIxCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3MQorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzMKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzc4Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODAKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5NgorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzk4Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTQKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MzIKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODAKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MQorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODIKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyCittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2OCBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9mc2NrLmM6MTQ4Cittc2dpZCAidW5rbm93biIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiBlcnJvciBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMDAgYnVpbHRpbi9mc2NrLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluICVzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDMgYnVpbHRpbi9mc2NrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE1NQorbXNnaWQgIndyb25nIG9iamVjdCB0eXBlIGluIGxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgdG8gJTdzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkgKCVkIG9iamVjdHMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjkKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZWZsb2cgJXMtPiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc1Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODAKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgxCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgyCittc2dpZCAiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NiBidWlsdGluL3BydW5lLmM6MTMyCittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg0NiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MzUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmc3RhdCAlczogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MzkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTQ4Cittc2dpZCAicmVwYWNrIGFsbCBvdGhlciBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBnYy5sb2dleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjY5NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyOQorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MjcKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ2NyBidWlsdGluL2dyZXAuYzo1OTIgYnVpbHRpbi9ncmVwLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTUKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNworbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOQorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjEKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIzCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyNgorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOAorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMwCittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMyCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzQKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM3Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzOQorbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQxCittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0OAorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTEKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU4Cittc2dpZCAic2hvdyBjb2x1bW4gbnVtYmVyIG9mIGZpcnN0IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MgorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NgorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2OQorbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NAorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc2Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzcKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODEKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NworbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg5Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTUKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NworbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMgorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDQKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAicGFnZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI4Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5MgorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyOAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAwCittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3MyBidWlsdGluL2luZGV4LXBhY2suYzoxNTMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwOTYKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTExOQorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyNQorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMxCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEzOQorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0NworbXNnaWQgImV4Y2x1ZGUgZ3VpZGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5Cittc2dpZCAicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTQKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNAorbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTE3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjE0MyBidWlsdGluL2hlbHAuYzoxNjUgYnVpbHRpbi9oZWxwLmM6MTc1IGJ1aWx0aW4vaGVscC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2NworbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0OCBnaXQuYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFsaWFzLiVzIHN0cmluZzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDc3IGJ1aWx0aW4vaGVscC5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY4Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OQorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjA0Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUyMworbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjIKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTAKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2NAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0IGluZm8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ1Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrZWQgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTkgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUwCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTUyCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTcKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTcyCittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk1Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0NgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3QiCittc2dpZF9wbHVyYWwgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ1OQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODEKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2ODkKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzM4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDEKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NTcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc3NworbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzkKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc4NQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODMzIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1ODEKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNTQgYnVpbHRpbi9pbml0LWRiLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDY4Cittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTIKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI5IGJ1aWx0aW4vaW5pdC1kYi5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE2Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAiZWRpdCBmaWxlcyBpbiBwbGFjZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk2Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAxCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA2Cittc2dpZCAiZG8gbm90IGFwcGx5IGNvbmZpZyBydWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA4Cittc2dpZCAic2V0IHBhcnNpbmcgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMAorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTExCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTIzCittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzMKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTYKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3NAorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc1Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzcKK21zZ2lkICJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4MAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODMKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUwIGJ1aWx0aW4vbG9nLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHR5cGU6ICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGNvdmVyIGZyb20gZGVzY3JpcHRpb24gbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjgyMQorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjk2OQorbXNnaWQgIm5lZWQgZXhhY3RseSBvbmUgcmFuZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo5NzkKK21zZ2lkICJub3QgYSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExNDMKK21zZ2lkICJjb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU1Cittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPHNpbmNlPiB8IDxyZXZpc2lvbi1yYW5nZT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyNCBidWlsdGluL2xvZy5jOjIxOTcgYnVpbHRpbi9sb2cuYzoyMTk5IGJ1aWx0aW4vbG9nLmM6MjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzQgYnVpbHRpbi9yZXBsYWNlLmM6NTggYnVpbHRpbi9yZXBsYWNlLmM6MjA3CisjOiBidWlsdGluL3JlcGxhY2UuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzkKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgIiIKKyJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MworbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc0Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3OAorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZG4ndCBiZSBpbiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYyOQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjMyCittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM2Cittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM4Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQwCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MQorbXNnaWQgInNmeCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDIKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDQKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NgorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDgKK21zZ2lkICJVc2UgW1JGQyBQQVRDSF0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MQorbXNnaWQgImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTcKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYzCittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjUKK21zZ2lkICJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjcKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY5Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjczCittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQgYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiZW1haWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc2Cittc2dpZCAiYWRkIENjOiBoZWFkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc4Cittc2dpZCAiaWRlbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc5Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODEKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODMgYnVpbHRpbi9sb2cuYzoxNjg2Cittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg0Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODcKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTQKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk1Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk2Cittc2dpZCAiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk5Cittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDEKK21zZ2lkICJzaG93IHByb2dyZXNzIHdoaWxlIGdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDMKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmV2PiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwNgorbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZWZzcGVjPiBpbiBjb3ZlciBsZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwOAorbXNnaWQgInBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODA3Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODA5Cittc2dpZCAiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTcKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODU0Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTU4Cittc2dpZCAiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MgorbXNnaWQgIkludGVyZGlmZjoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTY5Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk3MworbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgxCittc2dpZCAiUmFuZ2UtZGlmZjoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk5MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzaWduYXR1cmUgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzAKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NworbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzMKK21zZ2lkICJyZWN1cnNlIHRocm91Z2ggc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc5Cittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjIgYnVpbHRpbi9yZWJhc2UuYzoxNTE4Cittc2dpZCAiZXhlYyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MgorbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM4IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MAorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDUKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tYWlsc3BsaXQuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgbWJveDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NTYKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NTcKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NCBidWlsdGluL3B1bGwuYzoxNTIKK21zZ2lkICJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDcgYnVpbHRpbi9wdWxsLmM6MTU1Cittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDggYnVpbHRpbi9wdWxsLmM6MTU4Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUwIGJ1aWx0aW4vcHVsbC5jOjE2MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUzIGJ1aWx0aW4vcHVsbC5jOjE2NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTUgYnVpbHRpbi9wdWxsLmM6MTcwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTcgYnVpbHRpbi9wdWxsLmM6MTczCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTkKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjEgYnVpbHRpbi9wdWxsLmM6MTgwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY1IGJ1aWx0aW4vcHVsbC5jOjE4MworbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY2IGJ1aWx0aW4vbm90ZXMuYzo3ODcgYnVpbHRpbi9wdWxsLmM6MTg3CisjOiBidWlsdGluL3JlYmFzZS5jOjUxMiBidWlsdGluL3JlYmFzZS5jOjE1MzEgYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY3IGJ1aWx0aW4vcHVsbC5jOjE4OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY4IGJ1aWx0aW4vcHVsbC5jOjE5MQorbXNnaWQgIm9wdGlvbj12YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vcHVsbC5jOjE5MgorbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc4Cittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MAorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MgorbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODQgYnVpbHRpbi9wdWxsLmM6MTk5Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTAKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzA3Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMzOSBidWlsdGluL21lcmdlLmM6MzU2Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzg2Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM5NworIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA1Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwMQorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNgorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODYyCittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTc3Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzkKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MQorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODAKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4MworbXNnaWQgIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODcKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTYKK21zZ2lkICItLXF1aXQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDkKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzEzCittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgaW4gcHJvZ3Jlc3MgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzI5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzkKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1NQorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3MQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzg4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTAKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk3Cittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ3NgorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODUKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NjkKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NQorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5OCBidWlsdGluL21lcmdlLmM6MTY2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY3NworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzUKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTcKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTkKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTYxCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OQorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM2Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZS4gSWdub3JpbmcgJXMuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gSWdub3JpbmcgJXMuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2NQorbXNnaWQgIm5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NgorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTQKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjYKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2V0IG9mIHBhY2tmaWxlIGFuZCBwYWNrLWluZGV4IHBhaXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI5Cittc2dpZCAiIgorImR1cmluZyByZXBhY2ssIGNvbGxlY3QgcGFjay1maWxlcyBvZiBzbWFsbGVyIHNpemUgaW50byBhIGJhdGNoIHRoYXQgaXMgIgorImxhcmdlciB0aGFuIHRoaXMgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTgKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzo4NQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTI1Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMjcKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTAKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjQKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjcKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzgKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDEKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjI0MworbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzE2IGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDMKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwNAorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MgorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDYzCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjUKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjkKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzAKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MQorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDc3Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uXSBbLXZdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0Cittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NQorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MAorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MAorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODIKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NworbXNnaWQgIldyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTk3Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQyIGJ1aWx0aW4vdGFnLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYzIGJ1aWx0aW4vbm90ZXMuYzozMTMgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjM4MyBidWlsdGluL25vdGVzLmM6NDM4IGJ1aWx0aW4vbm90ZXMuYzo1MjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEgYnVpbHRpbi9ub3Rlcy5jOjYxMCBidWlsdGluL25vdGVzLmM6NjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzg5IGJ1aWx0aW4vbm90ZXMuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEwIGJ1aWx0aW4vbm90ZXMuYzo1NzYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTMgYnVpbHRpbi9ub3Rlcy5jOjU3OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTYgYnVpbHRpbi9ub3Rlcy5jOjU4MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE5IGJ1aWx0aW4vbm90ZXMuYzo1ODUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjMgYnVpbHRpbi9ub3Rlcy5jOjQ5NgorbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYzIGJ1aWx0aW4vbm90ZXMuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NzUgYnVpbHRpbi9ub3Rlcy5jOjYzNyBidWlsdGluL25vdGVzLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTcKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk5Cittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6Njk4Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAwCittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDIKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICdnaXQgbm90ZXMgbWVyZ2UnIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjIKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzM5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NDIKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgxMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICJhIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiYWJvcnQnLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTcgYnVpbHRpbi90YWcuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTEyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0IGJ1aWx0aW4vcHJ1bmUuYzoxMzAgYnVpbHRpbi93b3JrdHJlZS5jOjE2NAorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTU1Cittc2dpZCAicmVwb3J0IHBydW5lZCBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk4Cittc2dpZCAibm90ZXMtcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTkKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2tlZCBvYmplY3QgQ1JDIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9yZGVyZWQgJXUgb2JqZWN0cywgZXhwZWN0ZWQgJTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIGlzIGludmFsaWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MDIKK21zZ2lkICJ1bmFibGUgdG8gc2VlayBpbiByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MTMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjg0MQorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgcGFja3MgYXJlIHNwbGl0IGR1ZSB0byBwYWNrLnBhY2tTaXplTGltaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NTQKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MTcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTE2NAorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4NzAKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3QgaGVhZGVyIG9mICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMDEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTI1Cittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU5Cittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjUKK21zZ2lkICJpbmNvbnNpc3RlbmN5IHdpdGggZGVsdGEgY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODQ2Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMTMKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAyMQorbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDEKK21zZ2lkICJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNgorbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNworbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQwCittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDIKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ0Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ4Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTAKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTIKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU0Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTYKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU4Cittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjAKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY0Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc2Cittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3OAorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgyCittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NAorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NworbXNnaWQgInVzZSB0aGUgc3BhcnNlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg5Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkxCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkzCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTUKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NworbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk5Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAxCittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwMworbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzA3Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzExCittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTQKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTYKK21zZ2lkICJyZXNwZWN0IGlzbGFuZHMgZHVyaW5nIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBjaGFpbiBkZXB0aCAlZCBpcyB0b28gZGVlcCwgZm9yY2luZyAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA0Cittc2dpZCAiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA2Cittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNAorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjAKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDgxCittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG90YWwgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCByZXVzZWQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTUwCittc2dpZCAiY2Fubm90IHBydW5lIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY2IGJ1aWx0aW4vcHVsbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo4OAorbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0OQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxNzcgYnVpbHRpbi9yZWJhc2UuYzo0NjcgYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAyCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIxMgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MjIwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciBwdWxsLmZmOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzcKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MAorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ4IGJ1aWx0aW4vcmViYXNlLmM6MTM3NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTAgYnVpbHRpbi9wdWxsLmM6NDY1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzkKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MiBidWlsdGluL3B1bGwuYzo0NjcgZ2l0LXBhcnNlLXJlbW90ZS5zaDo4MgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTMgYnVpbHRpbi9wdWxsLmM6NDY4Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTUgYnVpbHRpbi9wdWxsLmM6NDYxIGJ1aWx0aW4vcHVsbC5jOjQ3MAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgxIGdpdC1wYXJzZS1yZW1vdGUuc2g6NjQKK21zZ2lkICI8cmVtb3RlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTUgYnVpbHRpbi9wdWxsLmM6NDcwIGJ1aWx0aW4vcHVsbC5jOjQ3NQorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MyBidWlsdGluL3JlYmFzZS5jOjEzNzMgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3NQorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3MiBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg2NworbXNnaWQgImlnbm9yaW5nIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZm9yIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjIKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzMAorbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTM0Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzUKK21zZ2lkICJwbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODEKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk5MgorbXNnaWQgImNhbm5vdCByZWJhc2Ugd2l0aCBsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2OAorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyNzAKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyNzcKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4OQorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NDIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MyBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NgorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NworbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjcKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MiBidWlsdGluL3NlbmQtcGFjay5jOjE4MQorbXNnaWQgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NTYKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MQorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NgorbXNnaWQgImJ5cGFzcyBwcmUtcHVzaCBob29rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NzAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NzIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1OTAKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1OTIKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2MjgKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjMwCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2MzQKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM2Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2MzkKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo2NDMKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjgKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MTAKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8YmFzZT4gPG9sZC10aXA+IDxuZXctdGlwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMgorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjQKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAibm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjYKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBsb2cnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjY0Cittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NzkKK21zZ2lkICJuZWVkIHR3byBjb21taXQgcmFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDEKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0MgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDQKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDUKK21zZ2lkICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDgKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDkKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTcKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE4OAorbXNnaWQgIllvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPiB8IC0ta2VlcC1iYXNlXSAiCisiWzx1cHN0cmVhbT4gWzxicmFuY2g+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNAorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XSAtLXJvb3QgWzxicmFuY2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6MjAxIGJ1aWx0aW4vcmViYXNlLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NiBidWlsdGluL3JlYmFzZS5jOjIxMiBidWlsdGluL3JlYmFzZS5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyNzEKK21zZ2lkICJubyBIRUFEPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMwNAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYyCittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIHRvZG8gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQwMgorbXNnaWQgImEgYmFzZSBjb21taXQgbXVzdCBiZSBwcm92aWRlZCB3aXRoIC0tdXBzdHJlYW0gb3IgLS1vbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjkKK21zZ2lkICJrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzEgYnVpbHRpbi9yZXZlcnQuYzoxMjgKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzIKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NAorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc2Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NworbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3OSBidWlsdGluL3JlYmFzZS5jOjE0NTUKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgxCittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgzCittc2dpZCAic2tpcCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODQKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODYKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg5Cittc2dpZCAic2hvcnRlbiBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTEKK21zZ2lkICJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkzCittc2dpZCAiY2hlY2sgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NQorbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTgKK21zZ2lkICJvbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMworbXNnaWQgInNxdWFzaC1vbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDYKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEzCittc2dpZCAicmViYXNlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE0Cittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNQorbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTYKK21zZ2lkICJzd2l0Y2gtdG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTcKK21zZ2lkICJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIm9udG8gbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOQorbXNnaWQgImNtZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOQorbXNnaWQgInRoZSBjb21tYW5kIHRvIHJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMiBidWlsdGluL3JlYmFzZS5jOjE1NDAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0MAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yaWctaGVhZDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBpbnZhbGlkIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODQ5Cittc2dpZCAiY291bGQgbm90IGRldGVybWluZSBIRUFEIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MQorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTMKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNworbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDYKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDgKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MAorbXNnaWQgImFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUyCittc2dpZCAiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1OAorbXNnaWQgImRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjEKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NAorbXNnaWQgIm1ha2UgY29tbWl0dGVyIGRhdGUgbWF0Y2ggYXV0aG9yIGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY2Cittc2dpZCAiaWdub3JlIGF1dGhvciBkYXRlIGFuZCB1c2UgY3VycmVudCBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OAorbXNnaWQgInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzAgYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDc2IGJ1aWx0aW4vcmViYXNlLmM6MTQ3OQorbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODEKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODQKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NgorbXNnaWQgImFib3J0IGFuZCBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODkKK21zZ2lkICJhYm9ydCBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDk2Cittc2dpZCAidXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTAwCittc2dpZCAibGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxpc3Qgb2YgY29tbWl0cyB0byByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwOQorbXNnaWQgInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTEKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIHVuZGVyIC1pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNworbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE5Cittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIzCittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNgorbXNnaWQgInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjkKK21zZ2lkICJ1c2UgJ21lcmdlLWJhc2UgLS1mb3JrLXBvaW50JyB0byByZWZpbmUgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMxCittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzMgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM0Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM3Cittc2dpZCAicmViYXNlIGFsbCByZWFjaGFibGUgY29tbWl0cyB1cCB0byB0aGUgcm9vdChzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTQKK21zZ2lkICIiCisidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKyJTZWUgaXRzIGVudHJ5IGluICdnaXQgaGVscCBjb25maWcnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjAKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDEKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwNgorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1vbnRvJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDgKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MTYKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjM5Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTEKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjcwCittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICVzIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQlc1xuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCVzXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NTcKK21zZ2lkICJzd2l0Y2ggYEMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODIwCittc2dpZCAiLS1zdHJhdGVneSByZXF1aXJlcyAtLW1lcmdlIG9yIC0taW50ZXJhY3RpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODYwCittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg3MgorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFtIG9wdGlvbnMgd2l0aCBlaXRoZXIgaW50ZXJhY3RpdmUgb3IgbWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODk1Cittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MjUKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIHdpdGggYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDA2Cittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0NAorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTkKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2OAorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI5Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzkKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODMKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzIKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjgzMAorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnRcbiIKKyJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2hcbiIKKyJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisiXG4iCisiWW91IGNhbiBzZXQgdGhlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKyJpdHMgY3VycmVudCBicmFuY2g7IGhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3VcbiIKKyJhcnJhbmdlZCB0byB1cGRhdGUgaXRzIHdvcmsgdHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZVxuIgorIm90aGVyIHdheS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHNldFxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjg1MAorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorIid3YXJuJyBvciAnaWdub3JlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGVsZXRpbmcgdGhlXG4iCisiY3VycmVudCBicmFuY2gsIHdpdGggb3Igd2l0aG91dCBhIHdhcm5pbmcgbWVzc2FnZS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzNgorbXNnaWQgInF1aWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MAorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjIyCittc2dpZCAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2NyBidWlsdGluL3JlZmxvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NQorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJlZmxvZzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTggYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzo0MworbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNSBidWlsdGluL3JlbW90ZS5jOjc0Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjggYnVpbHRpbi9yZW1vdGUuYzo4MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUzCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OQorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjkKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY1Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTczCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NCBidWlsdGluL3JlbW90ZS5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk4IGJ1aWx0aW4vcmVtb3RlLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDQzIGJ1aWx0aW4vcmVtb3RlLmM6NDUxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ1NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjI5IGJ1aWx0aW4vcmVtb3RlLmM6NzY0IGJ1aWx0aW4vcmVtb3RlLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMQorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxOQorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjMKK21zZ2lkICIgPz8/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICJkZWxldGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM4Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0NAorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjkKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTggYnVpbHRpbi9yZW1vdGUuYzoxMTc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMworbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MiBidWlsdGluL3JlbW90ZS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NiBidWlsdGluL3JlbW90ZS5jOjExNzggYnVpbHRpbi9yZW1vdGUuYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk3IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMworbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDYKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNAorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQxCittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0MworbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU4Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjAKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NAorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM3IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5MSBidWlsdGluL3JlbW90ZS5jOjE1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTMKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDc3Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDc5Cittc2dpZCAicmV0dXJuIGFsbCBVUkxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUwNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMworbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNQorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM3Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ0Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTMKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzMCBidWlsdGluL3JlcGFjay5jOjQxNgorbXNnaWQgInJlcGFjazogRXhwZWN0aW5nIGZ1bGwgaGV4IG9iamVjdCBJRCBsaW5lcyBvbmx5IGZyb20gcGFjay1vYmplY3RzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI1NAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjkyCittc2dpZCAicGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTQKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk3Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk5Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwOAorbXNnaWQgIndyaXRlIGJpdG1hcCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMAorbXNnaWQgInBhc3MgLS1kZWx0YS1pc2xhbmRzIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTEKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTQKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNyBidWlsdGluL3JlcGFjay5jOjMyMworbXNnaWQgImJ5dGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzgKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDI1Cittc2dpZCAiTm90aGluZyBuZXcgdG8gcGFjay4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZXBsYWNlIHJlZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQyCittc2dpZCAiY2F0LWZpbGUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmc3RhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyMiBidWlsdGluL3JlcGxhY2UuYzozNzggYnVpbHRpbi9yZXBsYWNlLmM6NDIzCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjkKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdyYWZ0IGZvciAnJXMnIHVubmVjZXNzYXJ5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgY29tbWl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDcKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OQorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUxCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MgorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU0Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NQorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjgKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NgorbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTgwCittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODYKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkyCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk4Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA0Cittc2dpZCAiLWcgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxMAorbXNnaWQgIi0tY29udmVydC1ncmFmdC1maWxlIHRha2VzIG5vIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNgorbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjExMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImdpdCByZXNldCBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJoYXJkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3N0YXNoLmM6NTE5IGJ1aWx0aW4vc3Rhc2guYzo1OTQKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTgKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTkgYnVpbHRpbi9yZXNldC5jOjMwMQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTEKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQxMQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ3MgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjIKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyNQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tdXNlLWJpdG1hcC1pbmRleCB3aXRoIG9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMAorbXNnaWQgImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE2Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQ1Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjA3Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JtLmM6MjEyCittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjI0NworbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODkKK21zZ2lkICJwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoyMAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzcKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTQKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1Cittc2dpZCAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcxCittc2dpZCAiPHc+Wyw8aTE+Wyw8aTI+XV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE3Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU0Cittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NgorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTgKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2OQorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNQorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczOAorbXNnaWQgIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5ICVkIGVudHJ5IGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dpZF9wbHVyYWwgIm9ubHkgJWQgZW50cmllcyBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCBjb21taXQgJXMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTMKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjIKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjMKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MworbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMAorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjEKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjIwCittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMzcKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNTYKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjYyCittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM2MQorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0ICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNzgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gc3RhbmRhcmQgaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozODQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDQ3Cittc2dpZCAiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NTkKK21zZ2lkICJlcnJvciB3aGlsZSByZWZyZXNoaW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMiBidWlsdGluL3N0YXNoLmM6MzcKK21zZ2lkICJnaXQgc3Rhc2ggbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjMgYnVpbHRpbi9zdGFzaC5jOjQyCittc2dpZCAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNCBidWlsdGluL3N0YXNoLmM6NDcKK21zZ2lkICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI2IGJ1aWx0aW4vc3Rhc2guYzo2MgorbXNnaWQgImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjcgYnVpbHRpbi9zdGFzaC5jOjY3Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyOCBidWlsdGluL3N0YXNoLmM6NzcKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMSBidWlsdGluL3N0YXNoLmM6ODQKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MgorbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU3Cittc2dpZCAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MgorbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjQgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDAzCittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIGRpZmYgJXNeIS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyMQorbXNnaWQgImNvbmZsaWN0cyBpbiBpbmRleC5Ucnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI3Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDM2Cittc2dpZCAiY291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ2MCBnaXQtbGVnYWN5LXN0YXNoLnNoOjY4MQorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIxIGJ1aWx0aW4vc3Rhc2guYzo2MjAKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJXMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU1IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3OTUgYnVpbHRpbi9zdGFzaC5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICVzIHdpdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxMyBidWlsdGluL3N0YXNoLmM6MTQ3MCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyMworbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMDQ1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE4Cittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTcyIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTY1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExODEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxODAKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTkyIGJ1aWx0aW4vc3Rhc2guYzoxMjAxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjI5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyNzggZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjk0Cittc2dpZCAiRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMwOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1MQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzMxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQyNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM4NQorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2MSBidWlsdGluL3N0YXNoLmM6MTQ5NworbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjMgYnVpbHRpbi9zdGFzaC5jOjE0OTkKK21zZ2lkICJzdGFzaCBpbiBwYXRjaCBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY0IGJ1aWx0aW4vc3Rhc2guYzoxNTAwCittc2dpZCAicXVpZXQgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NiBidWlsdGluL3N0YXNoLmM6MTUwMgorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY4IGJ1aWx0aW4vc3Rhc2guYzoxNTA0Cittc2dpZCAiaW5jbHVkZSBpZ25vcmUgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6NDAKK21zZ2lkICJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MAorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTcyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tbWFuZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzxvcHRpb25zPl0gWzxwYXRoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTg5Cittc2dpZCAiU3VwcHJlc3Mgc3VibW9kdWxlIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OQorbXNnaWQgIiIKKyJVc2UgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaW5zdGVhZCBvZiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3VibW9kdWxlICIKKyJIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODAKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4NQorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkwOQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDU4Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTAKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5MQorbXNnaWQgIlVucmVnaXN0ZXIgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTYKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI3NQorbXNnaWQgIiIKKyJBbiBhbHRlcm5hdGUgY29tcHV0ZWQgZnJvbSBhIHN1cGVycHJvamVjdCdzIGFsdGVybmF0ZSBpcyBpbnZhbGlkLlxuIgorIlRvIGFsbG93IEdpdCB0byBjbG9uZSB3aXRob3V0IGFuIGFsdGVybmF0ZSBpbiBzdWNoIGEgY2FzZSwgc2V0XG4iCisic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgdG8gJ2luZm8nIG9yLCBlcXVpdmFsZW50bHksIGNsb25lIHdpdGhcbiIKKyInLS1yZWZlcmVuY2UtaWYtYWJsZScgaW5zdGVhZCBvZiAnLS1yZWZlcmVuY2UnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgzCittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODYKK21zZ2lkICJuYW1lIG9mIHRoZSBuZXcgc3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg5Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NworbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NworbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTkKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNworbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3Rvcnkgbm90IGVtcHR5OiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGNvbmZpZ3VyZWQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTgKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMAorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc5Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODMKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg5Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODkyCittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NAorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NQorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE3Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjEKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyNworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzxvcHRpb25zPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODMKK21zZ2lkICJjaGVjayBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTg2Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTMKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyIGdpdC1zdWJtb2R1bGUuc2g6MTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2MiBnaXQuYzo0MzMgZ2l0LmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjkKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI1Cittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dXG4iCisiXHRcdDx0YWduYW1lPiBbPGhlYWQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMwCittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTk4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMyCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI4NAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwCittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyMSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDM0Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0ODIKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MTAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUxMgorbXNnaWQgIi0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTAxCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTkxCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwMgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxNQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc0Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODAKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MgorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg0Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NgorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk3Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDgKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDExCittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjIKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjQKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjgKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzMgorbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzNgorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDAKK21zZ2lkICJvbmx5IHVwZGF0ZSBlbnRyaWVzIHRoYXQgZGlmZmVyIGZyb20gSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDkKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTMKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU5Cittc2dpZCAidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYxCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYzCittc2dpZCAid3JpdGUgb3V0IHRoZSBpbmRleCBldmVuIGlmIGlzIG5vdCBmbGFnZ2VkIGFzIGNoYW5nZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE3MworbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImVuYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk0Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5OAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDYKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZW5hYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxOAorbXNnaWQgImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyBzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGVuYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjIyCittc2dpZCAiZnNtb25pdG9yIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI1Cittc2dpZCAiIgorImNvcmUuZnNtb25pdG9yIGlzIHNldDsgcmVtb3ZlIGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBkaXNhYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NAorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjExCittc2dpZCAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxkaXI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyMyB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTcKK21zZ2lkICJxdWl0IGFmdGVyIGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2UgZXhjaGFuZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNworbXNnaWQgImRvIG5vdCB0cnkgPGRpcmVjdG9yeT4vLmdpdC8gaWYgPGRpcmVjdG9yeT4gaXMgbm8gR2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjkKK21zZ2lkICJpbnRlcnJ1cHQgdHJhbnNmZXIgYWZ0ZXIgPG4+IHNlY29uZHMgb2YgaW5hY3Rpdml0eSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjgKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU1Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NworbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE4Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjAKK21zZ2lkICJnaXQgd29ya3RyZWUgbW92ZSA8d29ya3RyZWU+IDxuZXctcGF0aD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIxCittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MCBidWlsdGluL3dvcmt0cmVlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlJlbW92aW5nIHdvcmt0cmVlcy8lczogc2hvcnQgcmVhZCAoZXhwZWN0ZWQgJTxQUkl1TUFYPiBieXRlcywgcmVhZCAiCisiJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBsb2NrZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYgLWYnIHRvIG92ZXJyaWRlLCBvciAndW5sb2NrJyBhbmQgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzOSBidWlsdGluL3dvcmt0cmVlLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChjaGVja2luZyBvdXQgJyVzJykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTcKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMgorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNQorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDgKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1icmFuY2goMSkpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTEKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTE5Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgwCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4MAorbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjkyIGJ1aWx0aW4vd29ya3RyZWUuYzo3MjUgYnVpbHRpbi93b3JrdHJlZS5jOjc5OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk0IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjcKK21zZ2lkICJUaGUgbWFpbiB3b3JraW5nIHRyZWUgY2Fubm90IGJlIGxvY2tlZCBvciB1bmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzAKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzc4Cittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAxIGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpZ3VyZSBvdXQgZGVzdGluYXRpb24gbmFtZSBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjIKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjb250YWlucyBtb2RpZmllZCBvciB1bnRyYWNrZWQgZmlsZXMsIHVzZSAtLWZvcmNlIHRvIGRlbGV0ZSBpdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcycsIGNvZGUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxMAorbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzNQorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCByZW1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxNQorbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI4Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMxCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAiIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ21hcmsnIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ3RvJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIiIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNzIKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICIiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIG5vdCBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICIiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIiIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjcKK21zZ2lkICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKyJTZWUgJ2dpdCBoZWxwIGdpdCcgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzeXN0ZW0uIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICItYyBleHBlY3RzIGEgY29uZmlndXJhdGlvbiBzdHJpbmdcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtQ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIGFsaWFzICclcyc6ICclcyciCittc2dzdHIgIiIKKworIzogZ2l0LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgYWxpYXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgYWxpYXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjQ1OQorbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjQ2MQorbXNnaWQgInVua25vd24gd3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogZ2l0LmM6NDYzCittc2dpZCAiY2xvc2UgZmFpbGVkIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgbG9vcCBkZXRlY3RlZDogZXhwYW5zaW9uIG9mICclcycgZG9lcyBub3QgdGVybWluYXRlOiVzIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlICVzIGFzIGEgYnVpbHRpbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogaHR0cC5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzozOTkKK21zZ2lkICJEZWxlZ2F0aW9uIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjIyLjAiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjQwOAorbXNnaWQgIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6ODc2Cittc2dpZCAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjk0OQorbXNnaWQgIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTA5MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGNVUkwgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMIGJhY2tlbmRzIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjE5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byB1cGRhdGUgdXJsIGJhc2UgZnJvbSByZWRpcmVjdGlvbjpcbiIKKyIgIGFza2VkIGZvcjogJXNcbiIKKyIgICByZWRpcmVjdDogJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjM2NAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBleHBlY3RlZCBzZXJ2aWNlLCBnb3QgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NTkzCittc2dpZCAic2hvdWxkbid0IGhhdmUgRU9GIHdoZW4gbm90IGdlbnRsZSBvbiBFT0YiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUlBDIGZhaWxlZDsgJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo3NzMKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGRlZmxhdGUgZXJyb3IgJWQiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBlbmQgZXJyb3IgJWQiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAzNworbXNnaWQgImZldGNoIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg1Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEyOSByZW1vdGUtY3VybC5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE0NyByZW1vdGUtY3VybC5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjExODMKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjEzNjcKK21zZ2lkICJyZW1vdGUtY3VybDogdXNhZ2U6IGdpdCByZW1vdGUtY3VybCA8cmVtb3RlPiBbPHVybD5dIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwNgorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxODMKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzcKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuaDo0NAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5oOjY4Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MQorbXNnaWQgIkFwcGx5IGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSBhIG1haWxib3giCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NTIKK21zZ2lkICJBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUzCittc2dpZCAiQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU0Cittc2dpZCAiSW1wb3J0IGEgR05VIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU2Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU5Cittc2dpZCAiTW92ZSBvYmplY3RzIGFuZCByZWZzIGJ5IGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYxCittc2dpZCAiRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworbXNnaWQgIlNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzAKK21zZ2lkICJSZW1vdmUgdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MgorbXNnaWQgIkRpc3BsYXkgZGF0YSBpbiBjb2x1bW5zIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjczCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc5Cittc2dpZCAiSGVscGVyIHRvIHRlbXBvcmFyaWx5IHN0b3JlIHBhc3N3b3JkcyBpbiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODAKK21zZ2lkICJIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzayIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODIKK21zZ2lkICJTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg0Cittc2dpZCAiQSByZWFsbHkgc2ltcGxlIHNlcnZlciBmb3IgR2l0IHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NQorbXNnaWQgIkdpdmUgYW4gb2JqZWN0IGEgaHVtYW4gcmVhZGFibGUgbmFtZSBiYXNlZCBvbiBhbiBhdmFpbGFibGUgcmVmIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NworbXNnaWQgIkNvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OAorbXNnaWQgIkNvbXBhcmUgYSB0cmVlIHRvIHRoZSB3b3JraW5nIHRyZWUgb3IgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkyCittc2dpZCAiQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk0Cittc2dpZCAiUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6OTUKK21zZ2lkICJSZXdyaXRlIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk3Cittc2dpZCAiT3V0cHV0IGluZm9ybWF0aW9uIG9uIGVhY2ggcmVmIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OQorbXNnaWQgIlZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDQKK21zZ2lkICJDb21wdXRlIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNQorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE4Cittc2dpZCAiTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjIKK21zZ2lkICJGaW5kIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjQKK21zZ2lkICJSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI2Cittc2dpZCAiUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjgKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IG11bHRpLXBhY2staW5kZXhlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjkKK21zZ2lkICJDcmVhdGVzIGEgdGFnIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzAKK21zZ2lkICJCdWlsZCBhIHRyZWUtb2JqZWN0IGZyb20gbHMtdHJlZSBmb3JtYXR0ZWQgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzEKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTMyCittc2dpZCAiRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzMKK21zZ2lkICJBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM1Cittc2dpZCAiQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzYKK21zZ2lkICJGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNworbXNnaWQgIlBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDIKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDUKK21zZ2lkICJDb21wYXJlIHR3byBjb21taXQgcmFuZ2VzIChlLmcuIHR3byB2ZXJzaW9ucyBvZiBhIGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ2Cittc2dpZCAiUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDcKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ4Cittc2dpZCAiUmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTUwCittc2dpZCAiTWFuYWdlIHNldCBvZiB0cmFja2VkIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU1Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU2Cittc2dpZCAiUmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU3Cittc2dpZCAiUmV2ZXJ0IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjEKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGFzIGVtYWlscyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY0Cittc2dpZCAiU3VtbWFyaXplICdnaXQgbG9nJyBvdXRwdXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OAorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MAorbXNnaWQgIkNvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTcxCittc2dpZCAiSW5pdGlhbGl6ZSBhbmQgbW9kaWZ5IHRoZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTcyCittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc0Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzUKK21zZ2lkICJSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJJbml0aWFsaXplLCB1cGRhdGUgb3IgaW5zcGVjdCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NworbXNnaWQgIkJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc5Cittc2dpZCAiUmVhZCwgbW9kaWZ5IGFuZCBkZWxldGUgc3ltYm9saWMgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODEKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODIKK21zZ2lkICJVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg2Cittc2dpZCAiU2VuZCBhcmNoaXZlIGJhY2sgdG8gZ2l0LWFyY2hpdmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OAorbXNnaWQgIlNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZSIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODkKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MAorbXNnaWQgIlZhbGlkYXRlIHBhY2tlZCBHaXQgYXJjaGl2ZSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MgorbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NQorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTcKK21zZ2lkICJHaXQgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk4Cittc2dpZCAiQSBHaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDAKK21zZ2lkICJUd2Vha2luZyBkaWZmIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMworbXNnaWQgIkhvb2tzIHVzZWQgYnkgR2l0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNAorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjA1Cittc2dpZCAiRGVmaW5pbmcgc3VibW9kdWxlIHByb3BlcnRpZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjA2Cittc2dpZCAiR2l0IG5hbWVzcGFjZXMiCittc2dzdHIgIiIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOAorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDkKK21zZ2lkICJNb3VudGluZyBvbmUgcmVwb3NpdG9yeSBpbnNpZGUgYW5vdGhlciIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTAKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMQorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCIKK21zZ3N0ciAiIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTIKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo2MAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjA5Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MQorbXNnaWQgImJpc2VjdCBydW4gZmFpbGVkOiBubyBjb21tYW5kIHByb3ZpZGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NgorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjI1MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkyCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzAwCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjQ2Cittc2dpZCAiIgorIkVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisibWVyZ2UiCittc2dzdHIgIiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjEKK21zZ2lkICJBdXRvbWF0ZWQgbWVyZ2UgZGlkIG5vdCB3b3JrLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgIiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGNvbW1vbiBjb21taXQgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgIiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBwdXNoJzogJG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICRzdGFzaF9tc2ciCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTgKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYyMgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzIKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjc5MgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIwMgorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQ3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjEzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg4NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTYxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwOQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjMzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2NAorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUzNiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTc5CisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5NQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0NCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ4Cittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTY1Cittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjaGVja291dCAkc3dpdGNoX3RvIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIwMCBnaXQtc2gtc2V0dXAuc2g6MjA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQzCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI1MworbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHlvdSBjYW4gYWRqdXN0IHRoaXMgdG8gYWxpZ24gImdpdCBhZGQgLWkiIHN0YXR1cyBtZW51CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlMTJzICUxMnMgJXMiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidG91Y2hlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInRvdWNoZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU2Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFzaGluZy4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU5Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciB1bnN0YWdpbmcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDgKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU0Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2MAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjY2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTAKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzgKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI4NAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTEKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQyCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQzCittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ2Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzAKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MTkKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ2Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjU4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4MAorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmtcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjkyCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rLlxuIgorbXNnaWRfcGx1cmFsICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzczCittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzk1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODA1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODE1CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODI1Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyNyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM4Cittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ1IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxCittc2dpZCAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyMjMgZ2l0LXNlbmQtZW1haWwucGVybDoyMjkKK21zZ2lkICJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMuZmluYWwnIGNvbnRhaW5zIHRoZSBjb21wb3NlZCBlbWFpbC5cbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQwOAorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW5kaXIgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njk0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgyMworbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwIFt5L05dIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JXM+IFt5L05dPyAiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTgKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTI2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSAiCisid2FudCB0byBzZW5kLlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTQ1Cittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTc1Cittc2dpZCAiTWVzc2FnZS1JRCB0byBiZSB1c2VkIGFzIEluLVJlcGx5LVRvIGZvciB0aGUgZmlyc3QgZW1haWwgKGlmIGFueSk/ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMzMgZ2l0LXNlbmQtZW1haWwucGVybDoxMDQxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0NQorbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ1Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYwCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0OTEKK21zZ2lkICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1NgorbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTEKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTQKK21zZ2lkICJSZXN1bHQ6IE9LXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NTkgZ2l0LXNlbmQtZW1haWwucGVybDoxNjc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgdG86ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MDUKK21zZ2lkICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTEzCittc2dpZCAiaW52YWxpZCB0cmFuc2ZlciBlbmNvZGluZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTQgZ2l0LXNlbmQtZW1haWwucGVybDoyMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjAxNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL2lzLnBvIGIvcG8vaXMucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiMzRmZAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2lzLnBvCkBAIC0wLDAgKzEsMTAzIEBACisjIEljZWxhbmRpYyB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPiwgMjAxMC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE2LTA2LTE3IDE4OjU1KzAwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTA2LTE3IDE5OjE3KzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFZhc2NvIEFsbWVpZGEgPHZhc2NvbWFsbWVpZGFAc2Fwby5wdD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIkxhbmd1YWdlOiBpc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS44LjVcbiIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzo1Cittc2dpZCAiU2VlICdnaXQgaGVscCBDT01NQU5EJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIgorbXNnc3RyICJTasOhICdnaXQgaGVscCBTS0lQVU4nIHRpbCBhw7Agc2rDoSBoasOhbHAgZnlyaXIgdGlsdGVrbmEgc2tpcHVuLiIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoxMAorbXNnaWQgIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyIKK21zZ3N0ciAiVElMUkFVTjogQyB0aWxyYXVuYXN0cmVuZ3VyIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5jOjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyAlcyIKK21zZ3N0ciAiVElMUkFVTjogQyB0aWxyYXVuYXN0cmVuZ3VyICVzIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5jOjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRFU1Q6IEhlbGxvIFdvcmxkISIKK21zZ3N0ciAiVElMUkFVTjogSGFsbMOzIEhlaW11ciEiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LmM6MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEVTVDogT2xkIEVuZ2xpc2ggUnVuZXMiCittc2dzdHIgIlRJTFJBVU46IOGau+GbliDhmrPhmrnhmqvhmqYg4Zqm4Zqr4ZuPIOGau+GbliDhm5LhmqLhm57hm5Yg4Zqp4Zq+IOGapuGaq+GblyDhm5rhmqrhmr7hm57hm5Yg4Zq+4Zqp4Zqx4Zqm4Zq54ZuW4Zqq4Zqx4Zue4Zqi4ZuXIOGaueGbgeGapiDhmqbhmqog4Zq54ZuW4Zul4ZqrIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRFU1Q6IOKAmHNpbmdsZeKAmSBhbmQg4oCcZG91Ymxl4oCdIHF1b3RlcyIKK21zZ3N0ciAiVElMUkFVTjog4oCaZWluZmFsZGFy4oCYIG9nIOKAnnR2w7ZmYWxkYXLigJwgZ8Omc2FsYXBwaXIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LnNoOjgKK21zZ2lkICJURVNUOiBBIFNoZWxsIHRlc3Qgc3RyaW5nIgorbXNnc3RyICJUSUxSQVVOOiBTa2VsamFydGlscmF1bmFzdHJlbmd1ciIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3Quc2g6MTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRFU1Q6IEEgU2hlbGwgdGVzdCAkdmFyaWFibGUiCittc2dzdHIgIlRJTFJBVU46IFNrZWxqYXJ0aWxyYXVuYXN0cmVuZ3VyIG1lw7AgYnJleXR1bm5pICR2YXJpYWJsZSIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QucGVybDo4Cittc2dpZCAiVEVTVDogQSBQZXJsIHRlc3Qgc3RyaW5nIgorbXNnc3RyICJUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LnBlcmw6MTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVEVTVDogQSBQZXJsIHRlc3QgdmFyaWFibGUgJXMiCittc2dzdHIgIlRJTFJBVU46IFBlcmwgdGlscmF1bmFzdHJlbmd1ciBtZcOwIGJyZXl0dW5uaSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiRW5kdXJnZXLDsGkgR2l0IGxpbmQgw60gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkVuZHVyZ2Vyw7BpIEdpdCBsaW5kIMOtICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkJqw7MgdGlsIHTDs21hIHNhbWVpZ2lubGVnYSBHaXQgbGluZCDDrSAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkJqw7MgdGlsIHTDs21hIEdpdCBsaW5kIMOtICVzJXNcbiIKKworI34gbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCisjfiBtc2dzdHIgIkVuZHVyZ2Vyw7BpIgorCisjfiBtc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCisjfiBtc2dzdHIgIkJqw7MgdGlsIHTDs21hIgorCisjfiBtc2dpZCAiIHNoYXJlZCIKKyN+IG1zZ3N0ciAiIHNhbWVpZ2lubGVnYSIKZGlmZiAtLWdpdCBhL3BvL2l0LnBvIGIvcG8vaXQucG8KaW5kZXggMWJkOGI4ZS4uMmMyMDQ4OSAxMDA2NDQKLS0tIGEvcG8vaXQucG8KKysrIGIvcG8vaXQucG8KQEAgLTEsMjU5MSArMSwyNTEyMyBAQAotIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIEl0YWxpYW4KLSMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgotIyBQYW9sbyBDaWFycm9jY2hpIDxwYW9sby5jaWFycm9jY2hpQGdtYWlsLmNvbT4sIDIwMDcKLSMgTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+LCAyMDA3LgorIyBJdGFsaWFuIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgTWFyY28gUGFvbG9uZSA8bWFyY29wYW9sb25lQGdtYWlsLmNvbT4KKyMgQ29weXJpZ2h0IMKpIDIwMTgtMjAxOSBBbGVzc2FuZHJvIE1lbnRpIDxhbGVzc2FuZHJvLm1lbnRpQGFsZXNzYW5kcm9tZW50aS5pdD4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgogIwotIworIyBUaGFua3MgdG8gdGhlIGZvcm1lciB0cmFuc2xhdG9ycywgTWFyY28gUGFvbG9uZSA8bWFyY29wYW9sb25lIEFUIGdtYWlsLmNvbT4KKyMgYW5kIFN0ZWZhbm8gTGF0dGFyaW5pIDxzdGVmYW5vLmxhdHRhcmluaSBBVCBnbWFpbC5jb20+LCBmb3IgdGhlaXIKKyMgY29udHJpYnV0aW9ucy4KKyMgQWxlc3NhbmRybyBNZW50aSA8YWxlc3NhbmRyby5tZW50aUBhbGVzc2FuZHJvbWVudGkuaXQ+LCAyMDE5LgogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0yOCAxMDowNCswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDx0cEBsaXN0cy5saW51eC5pdD5cbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE5LTEyLTMwIDA4OjQ4KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE5LTEyLTMwIDA5OjIzKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXNzYW5kcm8gTWVudGkgPGFsZXNzYW5kcm8ubWVudGlAYWxlc3NhbmRyb21lbnRpLml0PlxuIgorIkxhbmd1YWdlLVRlYW06IEl0YWxpYW4gPD5cbiIKKyJMYW5ndWFnZTogaXRcbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgogIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgogIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMTkuMTIuMFxuIgogCi0jOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCi0jOiBnaXQtZ3VpLnNoOjkyMgotbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgotbXNnc3RyICJnaXQtZ3VpOiBlcnJvcmUgZ3JhdmUiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/IgorbXNnc3RyICJFaCAoJXMpPyIKIAotIzogZ2l0LWd1aS5zaDo3NDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKLW1zZ3N0ciAiQ2FyYXR0ZXJpIG5vbiB2YWxpZGkgc3BlY2lmaWNhdGkgaW4gJXM6IgorIzogYWRkLWludGVyYWN0aXZlLmM6NTAwIGFkZC1pbnRlcmFjdGl2ZS5jOjgwMSBzZXF1ZW5jZXIuYzozMjE2CisjOiBzZXF1ZW5jZXIuYzozNjU2IGJ1aWx0aW4vcmViYXNlLmM6ODcxIGJ1aWx0aW4vcmViYXNlLmM6MTY0MworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE5IGJ1aWx0aW4vcmViYXNlLmM6MjA2MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGwnaW5kaWNlIgogCi0jOiBnaXQtZ3VpLnNoOjc3OQotbXNnaWQgIk1haW4gRm9udCIKLW1zZ3N0ciAiQ2FyYXR0ZXJpIHByaW5jaXBhbGkiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNjkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk0Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICJiaW5hcmlvIgogCi0jOiBnaXQtZ3VpLnNoOjc4MAotbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgotbXNnc3RyICJDYXJhdHRlcmkgcGVyIGNvbmZyb250aSBlIHRlcm1pbmFsZSIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYxMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICJub24gZmFyZSBudWxsYSIKIAotIzogZ2l0LWd1aS5zaDo3OTQKLW1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0IG5lbCBQQVRIIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAibm9uIG1vZGlmaWNhdG8iCiAKLSM6IGdpdC1ndWkuc2g6ODIxCi1tc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCi1tc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGxhIHZlcnNpb25lIGRpIEdpdDoiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIkFnZ2lvcm5hIgogCi0jOiBnaXQtZ3VpLnNoOjgzOQotIywgdGNsLWZvcm1hdAorIzogYWRkLWludGVyYWN0aXZlLmM6NjY4IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSAnJXMnIGFsbCdhcmVhIGRpIHN0YWdpbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3NCBhZGQtaW50ZXJhY3RpdmUuYzo4NjMgc2VxdWVuY2VyLmM6MzQwOQorIzogYnVpbHRpbi9yZWJhc2UuYzo4OTUKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGwnaW5kaWNlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gImFnZ2lvcm5hdG8gJWQgcGVyY29yc29cbiIKK21zZ3N0clsxXSAiYWdnaW9ybmF0aSAlZCBwZXJjb3JzaVxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgIm5vdGE6ICVzIG9yYSBub24gw6ggdHJhY2NpYXRvLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3MDAgYXBwbHkuYzo0MTA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoyODEKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAibWFrZV9jYWNoZV9lbnRyeSBub24gcml1c2NpdG8gcGVyIGlsIHBlcmNvcnNvICclcyciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjczMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAiRXNlZ3VpIGlsIHJldmVydCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzQ2Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbmFsaXp6YXJlIEhFQURee3RyZWV9IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3ODQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAicmlwcmlzdGluYXRvICVkIHBlcmNvcnNvXG4iCittc2dzdHJbMV0gInJpcHJpc3RpbmF0aSAlZCBwZXJjb3JzaVxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICJOZXNzdW4gZmlsZSBub24gdHJhY2NpYXRvLlxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICJBZ2dpdW5naSBmaWxlIG5vbiB0cmFjY2lhdGkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJhZ2dpdW50byAlZCBwZXJjb3Jzb1xuIgorbXNnc3RyWzFdICJhZ2dpdW50aSAlZCBwZXJjb3JzaVxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzIgorbXNnc3RyICJpZ25vcm8gY2nDsiBjaGUgbm9uIMOoIHN0YXRvIHNvdHRvcG9zdG8gYSBtZXJnZTogJXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkwOCBhZGQtcGF0Y2guYzoxMzMxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICJTb25vIHN0YXRpIG1vZGlmaWNhdGkgc29sbyBmaWxlIGJpbmFyaS5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTEwIGFkZC1wYXRjaC5jOjEzMjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkxNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNzYKK21zZ2lkICJQYXRjaCB1cGRhdGUiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gcGF0Y2giCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk1MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTQKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAiUml2ZWRpIGRpZmYiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MQorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICJ2aXN1YWxpenphIGkgcGVyY29yc2kgbW9kaWZpY2F0aSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTgzCittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICIiCisiYWdnaXVuZ2kgbG8gc3RhdG8gZGFsbCdhbGJlcm8gZGkgbGF2b3JvIGFsbCdpbnNpZW1lIGRlbGxlIG1vZGlmaWNoZSBuZWxsJ2FyZWEiCisiIGRpIHN0YWdpbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4NQorbXNnaWQgInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIgorbXNnc3RyICIiCisicmlwcmlzdGluYSBsJ2luc2llbWUgZGVsbGUgbW9kaWZpY2hlIG5lbGwnYXJlYSBkaSBzdGFnaW5nIGFsbGEgdmVyc2lvbmUgSEVBRCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg3Cittc2dpZCAicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IgorbXNnc3RyICIiCisic2VsZXppb25hIGdsaSBodW5rIGluIG1vZGFsaXTDoCBpbnRlcmF0dGl2YSBlZCBlc2VndWkgbCdhZ2dpb3JuYW1lbnRvIGluIG1vZG8iCisiIHNlbGV0dGl2byIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg5Cittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInZpc3VhbGl6emEgaWwgZGlmZiBmcmEgSEVBRCBlIGwnaW5kaWNlIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTEKK21zZ2lkICJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgIiIKKyJhZ2dpdW5naSBpIGNvbnRlbnV0aSBkZWkgZmlsZSBub24gdHJhY2NpYXRpIGFsbCdpbnNpZW1lIGRlbGxlIG1vZGlmaWNoZSIKKyIgbmVsbCdhcmVhIGRpIHN0YWdpbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk5OSBhZGQtaW50ZXJhY3RpdmUuYzoxMDQ4Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICJHdWlkYSBwcm9tcHQ6IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAxCittc2dpZCAic2VsZWN0IGEgc2luZ2xlIGl0ZW0iCittc2dzdHIgInNlbGV6aW9uYSB1biBzaW5nb2xvIGVsZW1lbnRvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAzCittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgInNlbGV6aW9uYSB1biBpbnRlcnZhbGxvIGRpIGVsZW1lbnRpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA1Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAic2VsZXppb25hIHBpw7kgaW50ZXJ2YWxsaSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNyBhZGQtaW50ZXJhY3RpdmUuYzoxMDUyCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAic2VsZXppb25hIHVuIGVsZW1lbnRvIGJhc2FuZG90aSBzdSB1biBwcmVmaXNzbyB1bml2b2NvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA5Cittc2dpZCAidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIgorbXNnc3RyICJkZXNlbGV6aW9uYSBnbGkgZWxlbWVudGkgc3BlY2lmaWNhdGkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTEKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICJzZWxlemlvbmEgdHV0dGkgZ2xpIGVsZW1lbnRpIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEzCittc2dpZCAiKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIgorbXNnc3RyICIodnVvdG8pIHRlcm1pbmEgbGEgc2VsZXppb25lIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDUwCittc2dpZCAic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIKK21zZ3N0ciAic2VsZXppb25hIHVuIGVsZW1lbnRvIG51bWVyYXRvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDU0Cittc2dpZCAiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiKHZ1b3RvKSBub24gc2VsZXppb25hcmUgbnVsbGEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjIgYnVpbHRpbi9jbGVhbi5jOjgyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NTEKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIqKiogQ29tYW5kaSAqKioiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjMgYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NDgKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiQ29zYSBmYWNjaW8gb3JhIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAic3RhZ2VkIgorbXNnc3RyICJuZWxsJ2FyZWEgZGkgc3RhZ2luZyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICJyaW1vc3NvIGRhbGwnYXJlYSBkaSBzdGFnaW5nIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGFwcGx5LmM6NDk2NSBhcHBseS5jOjQ5NjggYnVpbHRpbi9hbS5jOjIxOTcKKyM6IGJ1aWx0aW4vYW0uYzoyMjAwIGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3MyBidWlsdGluL3B1bGwuYzoyMDkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgInBlcmNvcnNvIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTIyCittc2dpZCAiY291bGQgbm90IHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdpbmRpY2UiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICJDaWFvLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiTW9kaWZpY2EgbW9kbyBzdGFnZSBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixhLHEsZCVzLD9dPyAiCittc2dzdHIgIkVsaW1pbmF6aW9uZSBzdGFnZSBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICJFc2VndWlyZSBsbyBzdGFnZSBkaSBxdWVzdCdodW5rIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2hlYWRlciBodW5rICclLipzJyIKKworIzogYWRkLXBhdGNoLmM6MTMwIGFkZC1wYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbCdoZWFkZXIgaHVuayBjb2xvcmF0byAnJS4qcyciCisKKyM6IGFkZC1wYXRjaC5jOjE3NgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBkaWZmIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGRpZmYiCisKKyM6IGFkZC1wYXRjaC5jOjE5NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgZGlmZiBjb2xvcmF0byIKKworIzogYWRkLXBhdGNoLmM6NTA4CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKLSJcbiIKLSIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgotIlxuIgotIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKLSJcbiIKLSJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorImV4cGVjdGVkIGNvbnRleHQgbGluZSAjJWQgaW5cbiIKKyIlLipzIgogbXNnc3RyICIiCi0iTGEgdmVyc2lvbmUgZGkgR2l0IG5vbiBwdcOyIGVzc2VyZSBkZXRlcm1pbmF0YS5cbiIKLSJcbiIKLSIlcyByaXBvcnRhIGNoZSBsYSB2ZXJzaW9uZSDDqCAnJXMnLlxuIgotIlxuIgotIiVzIHJpY2hpZWRlIGFsbWVubyBHaXQgMS41LjAgbyBzdXBlcmlvcmUuXG4iCi0iXG4iCi0iQXNzdW1lcmUgY2hlICclcycgc2lhIGFsbGEgdmVyc2lvbmUgMS41LjA/XG4iCisiYXR0ZXNhIHJpZ2EgY29udGVzdG8gJWQgaW5cbiIKKyIlLipzIgogCi0jOiBnaXQtZ3VpLnNoOjExMjgKLW1zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCi1tc2dzdHIgIk5vbiB0cm92byBsYSBkaXJlY3RvcnkgZGkgZ2l0OiAiCi0KLSM6IGdpdC1ndWkuc2g6MTE0NgotbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCi1tc2dzdHIgIkltcG9zc2liaWxlIHNwb3N0YXJzaSBzdWxsYSBkaXJlY3RvcnkgcHJpbmNpcGFsZSBkZWwgcHJvZ2V0dG86IgotCi0jOiBnaXQtZ3VpLnNoOjExNTQKLW1zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCi1tc2dzdHIgIkltcG9zc2liaWxlIHVzYXJlIHVuIGFyY2hpdmlvIHNlbnphIGRpcmVjdG9yeSBkaSBsYXZvcm86IgotCi0jOiBnaXQtZ3VpLnNoOjExNjIKLW1zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiTmVzc3VuYSBkaXJlY3RvcnkgZGkgbGF2b3JvIgotCi0jOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICJDb250cm9sbG8gZGVsbG8gc3RhdG8gZGVpIGZpbGUgaW4gY29yc28uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTM5MAotbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCi1tc2dzdHIgIlJpY2VyY2EgZGkgZmlsZSBtb2RpZmljYXRpIGluIGNvcnNvLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE0NTQKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICJBdnZpbyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNDcxCi1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiUmV2aXNpb25lIHJpZml1dGF0YSBkYWwgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgotCi0jOiBnaXQtZ3VpLnNoOjE2MjkgbGliL2Jyb3dzZXIudGNsOjI0NgotbXNnaWQgIlJlYWR5LiIKLW1zZ3N0ciAiUHJvbnRvLiIKLQotIzogZ2l0LWd1aS5zaDoxNzg3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKLW1zZ3N0ciAiU2FyYW5ubyBtb3N0cmF0aSBzb2xvICVzIGZpbGUgc3UgJXMuIgotCi0jOiBnaXQtZ3VpLnNoOjE5MTMKLW1zZ2lkICJVbm1vZGlmaWVkIgotbXNnc3RyICJOb24gbW9kaWZpY2F0byIKLQotIzogZ2l0LWd1aS5zaDoxOTE1Ci1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIk1vZGlmaWNhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKLW1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKLW1zZ3N0ciAiUHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Ci1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIlBhcnRpIHByZXBhcmF0ZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICJQcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUsIG1hbmNhbnRlIgotCi0jOiBnaXQtZ3VpLnNoOjE5MjAKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiVGlwbyBkaSBmaWxlIG1vZGlmaWNhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MTkyMQotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCi1tc2dzdHIgIlRpcG8gZGkgZmlsZSBtb2RpZmljYXRvLCBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MTkyMwotbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiTm9uIHRyYWNjaWF0bywgbm9uIHByZXBhcmF0byBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoxOTI4Ci1tc2dpZCAiTWlzc2luZyIKLW1zZ3N0ciAiTWFuY2FudGUiCi0KLSM6IGdpdC1ndWkuc2g6MTkyOQotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKLW1zZ3N0ciAiUHJlcGFyYXRvIHBlciBsYSByaW1vemlvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MTkzMAotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKLW1zZ3N0ciAiUHJlcGFyYXRvIGFsbGEgcmltb3ppb25lLCBhbmNvcmEgcHJlc2VudGUiCi0KLSM6IGdpdC1ndWkuc2g6MTkzMiBnaXQtZ3VpLnNoOjE5MzMgZ2l0LWd1aS5zaDoxOTM0IGdpdC1ndWkuc2g6MTkzNQotIzogZ2l0LWd1aS5zaDoxOTM2IGdpdC1ndWkuc2g6MTkzNwotbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCi1tc2dzdHIgIlJpY2hpZWRlIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkiCi0KLSM6IGdpdC1ndWkuc2g6MTk3MgotbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCi1tc2dzdHIgIkF2dmlvIGRpIGdpdGsuLi4gYXR0ZW5kZXJlLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE5ODQKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBnaXRrIG5lbCBQQVRIIgotCi0jOiBnaXQtZ3VpLnNoOjIwNDMKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBnaXQgZ3VpIG5lbCBQQVRIIgotCi0jOiBnaXQtZ3VpLnNoOjI0NTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgotbXNnaWQgIlJlcG9zaXRvcnkiCi1tc2dzdHIgIkFyY2hpdmlvIgotCi0jOiBnaXQtZ3VpLnNoOjI0NTYKLW1zZ2lkICJFZGl0IgotbXNnc3RyICJNb2RpZmljYSIKLQotIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKLW1zZ2lkICJCcmFuY2giCi1tc2dzdHIgIlJhbW8iCi0KLSM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4Ci1tc2dpZCAiQ29tbWl0QEBub3VuIgotbXNnc3RyICJSZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjQ2NCBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAotbXNnaWQgIk1lcmdlIgotbXNnc3RyICJGdXNpb25lIChNZXJnZSkiCi0KLSM6IGdpdC1ndWkuc2g6MjQ2NSBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Ci1tc2dpZCAiUmVtb3RlIgotbXNnc3RyICJSZW1vdG8iCi0KLSM6IGdpdC1ndWkuc2g6MjQ2OAotbXNnaWQgIlRvb2xzIgotbXNnc3RyICJBY2Nlc3NvcmkiCi0KLSM6IGdpdC1ndWkuc2g6MjQ3NwotbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgotbXNnc3RyICJFc3Bsb3JhIGNvcGlhIGRpIGxhdm9ybyIKLQotIzogZ2l0LWd1aS5zaDoyNDgzCi1tc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCi1tc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vIGF0dHVhbGUiCi0KLSM6IGdpdC1ndWkuc2g6MjQ4NwotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCi1tc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI0OTIKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGVsIHJhbW8gYXR0dWFsZSIKLQotIzogZ2l0LWd1aS5zaDoyNDk2Ci1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKLW1zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpIHR1dHRpIGkgcmFtaSIKLQotIzogZ2l0LWd1aS5zaDoyNTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCi1tc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRpICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI1MDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgotbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGkgJXMiCi0KLSM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKLW1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICJTdGF0aXN0aWNoZSBkZWxsJ2FyY2hpdmlvIgotCi0jOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAotbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgotbXNnc3RyICJDb21wcmltaSBsJ2FyY2hpdmlvIgotCi0jOiBnaXQtZ3VpLnNoOjI1MTYKLW1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCi1tc2dzdHIgIlZlcmlmaWNhIGwnYXJjaGl2aW8iCi0KLSM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAotIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAiQ3JlYSBpY29uYSBkZXNrdG9wIgotCi0jOiBnaXQtZ3VpLnNoOjI1MzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKLW1zZ2lkICJRdWl0IgotbXNnc3RyICJFc2NpIgotCi0jOiBnaXQtZ3VpLnNoOjI1NDcKLW1zZ2lkICJVbmRvIgotbXNnc3RyICJBbm51bGxhIgotCi0jOiBnaXQtZ3VpLnNoOjI1NTAKLW1zZ2lkICJSZWRvIgotbXNnc3RyICJSaXBldGkiCi0KLSM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKLW1zZ2lkICJDdXQiCi1tc2dzdHIgIlRhZ2xpYSIKLQotIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5Ci0jOiBsaWIvY29uc29sZS50Y2w6NjkKLW1zZ2lkICJDb3B5IgotbXNnc3RyICJDb3BpYSIKLQotIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQotbXNnaWQgIlBhc3RlIgotbXNnc3RyICJJbmNvbGxhIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAotbXNnaWQgIkRlbGV0ZSIKLW1zZ3N0ciAiRWxpbWluYSIKLQotIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCi1tc2dpZCAiU2VsZWN0IEFsbCIKLW1zZ3N0ciAiU2VsZXppb25hIHR1dHRvIgotCi0jOiBnaXQtZ3VpLnNoOjI1NzYKLW1zZ2lkICJDcmVhdGUuLi4iCi1tc2dzdHIgIkNyZWEuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjU4MgotbXNnaWQgIkNoZWNrb3V0Li4uIgotbXNnc3RyICJBdHRpdmEuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjU4OAotbXNnaWQgIlJlbmFtZS4uLiIKLW1zZ3N0ciAiUmlub21pbmEiCi0KLSM6IGdpdC1ndWkuc2g6MjU5MwotbXNnaWQgIkRlbGV0ZS4uLiIKLW1zZ3N0ciAiRWxpbWluYS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNTk4Ci1tc2dpZCAiUmVzZXQuLi4iCi1tc2dzdHIgIlJpcHJpc3RpbmEuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjYwOAotbXNnaWQgIkRvbmUiCi1tc2dzdHIgIkZhdHRvIgotCi0jOiBnaXQtZ3VpLnNoOjI2MTAKLW1zZ2lkICJDb21taXRAQHZlcmIiCi1tc2dzdHIgIk51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAotbXNnaWQgIk5ldyBDb21taXQiCi1tc2dzdHIgIk51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NwotbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgotbXNnc3RyICJDb3JyZWdnaSBsJ3VsdGltYSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQotbXNnaWQgIlJlc2NhbiIKLW1zZ3N0ciAiQW5hbGl6emEgbnVvdmFtZW50ZSIKLQotIzogZ2l0LWd1aS5zaDoyNjQzCi1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICJQcmVwYXJhIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjI2NDkKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKLW1zZ3N0ciAiUHJlcGFyYSBpIGZpbGUgbW9kaWZpY2F0aSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDoyNjU1Ci1tc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKLW1zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgotbXNnaWQgIlJldmVydCBDaGFuZ2VzIgotbXNnc3RyICJBbm51bGxhIG1vZGlmaWNoZSIKLQotIzogZ2l0LWd1aS5zaDoyNjY5IGdpdC1ndWkuc2g6MzMxMCBnaXQtZ3VpLnNoOjMzNDEKLW1zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKLW1zZ3N0ciAiTW9zdHJhIG1lbm8gY29udGVzdG8iCi0KLSM6IGdpdC1ndWkuc2g6MjY3MyBnaXQtZ3VpLnNoOjMzMTQgZ2l0LWd1aS5zaDozMzQ1Ci1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgIk1vc3RyYSBwacO5IGNvbnRlc3RvIgotCi0jOiBnaXQtZ3VpLnNoOjI2ODAgZ2l0LWd1aS5zaDozMDI0IGdpdC1ndWkuc2g6MzEzMwotbXNnaWQgIlNpZ24gT2ZmIgotbXNnc3RyICJTaWduIE9mZiIKLQotIzogZ2l0LWd1aS5zaDoyNjk2Ci1tc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCi1tc2dzdHIgIkZ1c2lvbmUgbG9jYWxlLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3MDEKLW1zZ2lkICJBYm9ydCBNZXJnZS4uLiIKLW1zZ3N0ciAiSW50ZXJyb21waSBmdXNpb25lLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCi1tc2dpZCAiQWRkLi4uIgotbXNnc3RyICJBZ2dpdW5naS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzE3Ci1tc2dpZCAiUHVzaC4uLiIKLW1zZ3N0ciAiUHJvcGFnYS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzIxCi1tc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKLW1zZ3N0ciAiRWxpbWluYSByYW1vLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCi1tc2dpZCAiT3B0aW9ucy4uLiIKLW1zZ3N0ciAiT3B6aW9uaS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzQyCi1tc2dpZCAiUmVtb3ZlLi4uIgotbXNnc3RyICJSaW11b3ZpLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAotbXNnaWQgIkhlbHAiCi1tc2dzdHIgIkFpdXRvIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFib3V0ICVzIgotbXNnc3RyICJJbmZvcm1hemlvbmkgc3UgJXMiCi0KLSM6IGdpdC1ndWkuc2g6Mjc4MwotbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgotbXNnc3RyICJEb2N1bWVudGF6aW9uZSBzdWwgd2ViIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Ci1tc2dpZCAiU2hvdyBTU0ggS2V5IgotbXNnc3RyICJNb3N0cmEgY2hhdmUgU1NIIgotCi0jOiBnaXQtZ3VpLnNoOjI4OTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLW1zZ3N0ciAiIgotImVycm9yZSBncmF2ZTogaW1wb3NzaWJpbGUgZWZmZXR0dWFyZSBsbyBzdGF0IGRlbCBwYXRoICVzOiBmaWxlIG8gZGlyZWN0b3J5ICIKLSJub24gdHJvdmF0YSIKLQotIzogZ2l0LWd1aS5zaDoyOTI2Ci1tc2dpZCAiQ3VycmVudCBCcmFuY2g6IgotbXNnc3RyICJSYW1vIGF0dHVhbGU6IgotCi0jOiBnaXQtZ3VpLnNoOjI5NDcKLW1zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgotbXNnc3RyICJNb2RpZmljaGUgcHJlcGFyYXRlIChzYXJhbm5vIG5lbGxhIG51b3ZhIHJldmlzaW9uZSkiCi0KLSM6IGdpdC1ndWkuc2g6Mjk2NwotbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCi1tc2dzdHIgIk1vZGlmaWNoZSBub24gcHJlcGFyYXRlIgotCi0jOiBnaXQtZ3VpLnNoOjMwMTcKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIgotbXNnc3RyICJQcmVwYXJhIG1vZGlmaWNhdGkiCi0KLSM6IGdpdC1ndWkuc2g6MzAzNiBsaWIvdHJhbnNwb3J0LnRjbDoxMDQgbGliL3RyYW5zcG9ydC50Y2w6MTkzCi1tc2dpZCAiUHVzaCIKLW1zZ3N0ciAiUHJvcGFnYSAoUHVzaCkiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MQotbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lIGluaXppYWxlOiIKLQotIzogZ2l0LWd1aS5zaDozMDcyCi1tc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmUgY29ycmV0dG86IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzMKLW1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdnaW8gaW5pemlhbGUgZGkgcmV2aXNpb25lIGNvcnJldHRvOiIKLQotIzogZ2l0LWd1aS5zaDozMDc0Ci1tc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk1lc3NhZ2dpbyBkaSBmdXNpb25lIGNvcnJldHRvOiIKLQotIzogZ2l0LWd1aS5zaDozMDc1Ci1tc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdnaW8gZGkgZnVzaW9uZToiCi0KLSM6IGdpdC1ndWkuc2g6MzA3NgotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZToiCi0KLSM6IGdpdC1ndWkuc2g6MzEyNSBnaXQtZ3VpLnNoOjMyNjcgbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgIkNvcGlhIHR1dHRvIgotCi0jOiBnaXQtZ3VpLnNoOjMxNDkgbGliL2JsYW1lLnRjbDoxMDQKLW1zZ2lkICJGaWxlOiIKLW1zZ3N0ciAiRmlsZToiCi0KLSM6IGdpdC1ndWkuc2g6MzI1NQotbXNnaWQgIlJlZnJlc2giCi1tc2dzdHIgIlJpbmZyZXNjYSIKLQotIzogZ2l0LWd1aS5zaDozMjc2Ci1tc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJEaW1pbnVpc2NpIGRpbWVuc2lvbmUgY2FyYXR0ZXJpIgotCi0jOiBnaXQtZ3VpLnNoOjMyODAKLW1zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCi1tc2dzdHIgIkF1bWVudGEgZGltZW5zaW9uZSBjYXJhdHRlcmkiCi0KLSM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQotbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICJDb2RpZmljYSIKLQotIzogZ2l0LWd1aS5zaDozMjk5Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgotbXNnc3RyICJBcHBsaWNhL0ludmVydGkgc2V6aW9uZSIKLQotIzogZ2l0LWd1aS5zaDozMzA0Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgotbXNnc3RyICJBcHBsaWNhL0ludmVydGkgcmlnYSIKLQotIzogZ2l0LWd1aS5zaDozMzIzCi1tc2dpZCAiUnVuIE1lcmdlIFRvb2wiCi1tc2dzdHIgIkF2dmlhIHByb2dyYW1tYSBlc3Rlcm5vIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgotCi0jOiBnaXQtZ3VpLnNoOjMzMjgKLW1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCi1tc2dzdHIgIlVzYSB2ZXJzaW9uZSByZW1vdGEiCi0KLSM6IGdpdC1ndWkuc2g6MzMzMgotbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgotbXNnc3RyICJVc2EgdmVyc2lvbmUgbG9jYWxlIgotCi0jOiBnaXQtZ3VpLnNoOjMzMzYKLW1zZ2lkICJSZXZlcnQgVG8gQmFzZSIKLW1zZ3N0ciAiUml0b3JuYSBhbGxhIHJldmlzaW9uZSBjb211bmUiCi0KLSM6IGdpdC1ndWkuc2g6MzM1NAotbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZpc3VhbGl6emEgcXVlc3RlIG1vZGlmaWNoZSBuZWwgc290dG9tb2R1bG8iCi0KLSM6IGdpdC1ndWkuc2g6MzM1OAotbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkZWwgcmFtbyBhdHR1YWxlIG5lbCBzb3R0b21vZHVsbyIKLQotIzogZ2l0LWd1aS5zaDozMzYyCi1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGkgdHV0dGkgaSByYW1pIG5lbCBzb3R0b21vZHVsbyIKLQotIzogZ2l0LWd1aS5zaDozMzY3Ci1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJBdnZpYSBnaXQgZ3VpIG5lbCBzb3R0b21vZHVsbyIKLQotIzogZ2l0LWd1aS5zaDozMzg5Ci1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsYSBzZXppb25lIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgotCi0jOiBnaXQtZ3VpLnNoOjMzOTEKLW1zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgotbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsZSBsaW5lZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDozMzkzCi1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICJBbm51bGxhIHByZXBhcmF6aW9uZSBkZWxsYSBsaW5lYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDozMzk2Ci1tc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgotbXNnc3RyICJQcmVwYXJhIHNlemlvbmUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MzM5OAotbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCi1tc2dzdHIgIlByZXBhcmEgbGluZWUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCi0KLSM6IGdpdC1ndWkuc2g6MzQwMAotbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKLW1zZ3N0ciAiUHJlcGFyYSBsaW5lYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKLQotIzogZ2l0LWd1aS5zaDozNDI0Ci1tc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgotbXNnc3RyICJJbml6aWFsaXp6YXppb25lLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjM1NDEKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjUyMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgotIlxuIgotIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgotImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgotImJ5ICVzOlxuIgotIlxuIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCiBtc2dzdHIgIiIKLSJQb3NzaWJpbGkgcHJvYmxlbWkgY29uIGxlIHZhcmlhYmlsaSBkJ2FtYmllbnRlLlxuIgotIlxuIgotIkxlIHNlZ3VlbnRpIHZhcmlhYmlsaSBkJ2FtYmllbnRlIHNhcmFubm8gcHJvYmFiaWxtZW50ZVxuIgotImlnbm9yYXRlIGRhIHR1dHRpIGkgc290dG9wcm9jZXNzaSBkaSBHaXQgYXZ2aWF0aVxuIgotImRhICVzOlxuIgotIlxuIgorImdsaSBodW5rIG5vbiBzaSBzb3ZyYXBwb25nb25vOlxuIgorIiUuKnNcbiIKKyJcdG5vbiB0ZXJtaW5hIGNvbjpcbiIKKyIlLipzIgogCi0jOiBnaXQtZ3VpLnNoOjM1NzAKKyM6IGFkZC1wYXRjaC5jOjc5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiIgorIk1vZGFsaXTDoCBtYW51YWxlIG1vZGlmaWNhIGh1bnQgLSB2ZWRpIGxhIGZpbmUgZGVsIGZpbGUgcGVyIHVuYSBndWlkYSAiCisidmVsb2NlLlxuIgorCisjOiBhZGQtcGF0Y2guYzo4MDMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlxuIgotIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKLSJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCisiLS0tXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVjIHdpbGwgYmUgcmVtb3ZlZC5cbiIKIG1zZ3N0ciAiIgotIlxuIgotIkNpw7Igw6ggZG92dXRvIGEgdW4gcHJvYmxlbWEgY29ub3NjaXV0b1xuIgotImNhdXNhdG8gZGFsbCdlc2VndWliaWxlIFRjbCBkaXN0cmlidWl0byBkYSBDeWd3aW4uIgorIi0tLVxuIgorIlBlciByaW11b3ZlcmUgJyVjJyByaWdoZSwgcmVuZGlsZSByaWdoZSAnICcgKGNvbnRlc3RvKS5cbiIKKyJQZXIgcmltdW92ZXJlICclYycgcmlnaGUsIGVsaW1pbmFsZS5cbiIKKyJMZSByaWdoZSBjaGUgaW5pemlhbm8gY29uICVjIHNhcmFubm8gcmltb3NzZS5cbiIKIAotIzogZ2l0LWd1aS5zaDozNTc1Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzo4MTAKIG1zZ2lkICIiCi0iXG4iCi0iXG4iCi0iQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgotImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgotInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCi0ifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuXG4iCiBtc2dzdHIgIiIKLSJcbiIKLSJcbiIKLSJVbmEgYnVvbmEgYWx0ZXJuYXRpdmEgYSAlc1xuIgotImNvbnNpc3RlIG5lbGwnYXNzZWduYXJlIHZhbG9yaSBhbGxlIHZhcmlhYmlsaSBkaSBjb25maWd1cmF6aW9uZVxuIgotInVzZXIubmFtZSBlIHVzZXIuZW1haWwgbmVsIHR1byBmaWxlIH4vLmdpdGNvbmZpZyBwZXJzb25hbGUuXG4iCisiU2UgbGEgcGF0Y2ggdmllbmUgYXBwbGljYXRhIHNlbnphIHByb2JsZW1pLCBsJ2h1bmsgbW9kaWZpY2F0byBzYXLDoFxuIgorImNvbnRyYXNzZWduYXRvIGltbWVkaWF0YW1lbnRlIHBlciBsJ2FnZ2l1bnRhIGFsbCdhcmVhIGRpIHN0YWdpbmcuXG4iCiAKLSM6IGxpYi9hYm91dC50Y2w6MjYKLW1zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCi1tc2dzdHIgImdpdC1ndWkgLSB1bidpbnRlcmZhY2NpYSBncmFmaWNhIHBlciBHaXQuIgotCi0jOiBsaWIvYmxhbWUudGNsOjcyCi1tc2dpZCAiRmlsZSBWaWV3ZXIiCi1tc2dzdHIgIk1vc3RyYSBmaWxlIgotCi0jOiBsaWIvYmxhbWUudGNsOjc4Ci1tc2dpZCAiQ29tbWl0OiIKLW1zZ3N0ciAiUmV2aXNpb25lOiIKLQotIzogbGliL2JsYW1lLnRjbDoyNzEKLW1zZ2lkICJDb3B5IENvbW1pdCIKLW1zZ3N0ciAiQ29waWEgcmV2aXNpb25lIgotCi0jOiBsaWIvYmxhbWUudGNsOjI3NQotbXNnaWQgIkZpbmQgVGV4dC4uLiIKLW1zZ3N0ciAiVHJvdmEgdGVzdG8uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjg0Ci1tc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKLW1zZ3N0ciAiUmljZXJjYSBhY2N1cmF0YSBkZWxsZSBjb3BpZSIKLQotIzogbGliL2JsYW1lLnRjbDoyODgKLW1zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKLW1zZ3N0ciAiTW9zdHJhIGNvbnRlc3RvIG5lbGxhIGNyb25vbG9naWEiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MjkxCi1tc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKLW1zZ3N0ciAiQW5ub3RhIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIgotCi0jOiBsaWIvYmxhbWUudGNsOjQ1MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgIkxldHR1cmEgZGkgJXMuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NTU3Ci1tc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIkNhcmljYW1lbnRvIGFubm90YXppb25pIHBlciBjb3BpZS9zcG9zdGFtZW50aS4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo1NzcKLW1zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCi1tc2dzdHIgImxpbmVlIGFubm90YXRlIgotCi0jOiBsaWIvYmxhbWUudGNsOjc2OQotbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIkNhcmljYW1lbnRvIGFubm90YXppb25pIHBlciBwb3NpemlvbmUgb3JpZ2luYXJpYS4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo3NzIKLW1zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKLW1zZ3N0ciAiQW5ub3RhemlvbmUgY29tcGxldGF0YS4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODAyCi1tc2dpZCAiQnVzeSIKLW1zZ3N0ciAiT2NjdXBhdG8iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODAzCi1tc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCi1tc2dzdHIgIklsIHByb2Nlc3NvIGRpIGFubm90YXppb25lIMOoIGdpw6AgaW4gY29yc28uIgotCi0jOiBsaWIvYmxhbWUudGNsOjg0MgotbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCi1tc2dzdHIgIlJpY2VyY2EgYWNjdXJhdGEgZGVsbGUgY29waWUgaW4gY29yc28uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6OTEwCi1tc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgotbXNnc3RyICJDYXJpY2FtZW50byBhbm5vdGF6aW9uaS4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo5NjMKLW1zZ2lkICJBdXRob3I6IgotbXNnc3RyICJBdXRvcmU6IgotCi0jOiBsaWIvYmxhbWUudGNsOjk2NwotbXNnaWQgIkNvbW1pdHRlcjoiCi1tc2dzdHIgIlJldmlzaW9uZSBjcmVhdGEgZGE6IgotCi0jOiBsaWIvYmxhbWUudGNsOjk3MgotbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgotbXNnc3RyICJGaWxlIG9yaWdpbmFyaW86IgotCi0jOiBsaWIvYmxhbWUudGNsOjEwMjAKLW1zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCi1tc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgbGEgcmV2aXNpb25lIEhFQUQ6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEwNzUKLW1zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBsYSByZXZpc2lvbmUgcHJlY2VkZW50ZToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTA5MAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdmlzdWFsaXp6YXJlIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIgotCi0jOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAotbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCi1tc2dzdHIgIkVycm9yZSBuZWwgY2FyaWNhbWVudG8gZGVsbGUgZGlmZmVyZW56ZToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTIzMQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICJJbiBvcmlnaW5lIGRhOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjM3Ci1tc2dpZCAiSW4gRmlsZToiCi1tc2dzdHIgIk5lbCBmaWxlOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjQyCi1tc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgotbXNnc3RyICJDb3BpYXRvIG8gc3Bvc3RhdG8gcXVpIGRhOiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKLW1zZ2lkICJDaGVja291dCBCcmFuY2giCi1tc2dzdHIgIkF0dGl2YSByYW1vIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyMwotbXNnaWQgIkNoZWNrb3V0IgotbXNnc3RyICJBdHRpdmEiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKLSM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiQW5udWxsYSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NyBsaWIvdG9vbHNfZGxnLnRjbDozMjgKLW1zZ2lkICJSZXZpc2lvbiIKLW1zZ3N0ciAiUmV2aXNpb25lIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCi1tc2dpZCAiT3B0aW9ucyIKLW1zZ3N0ciAiT3B6aW9uaSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCi1tc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICJSZWN1cGVyYSBkdXBsaWNhdG8gbG9jYWxlIGRpIHJhbW8gcmVtb3RvIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NAotbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiU3RhY2NhIGRhIHJhbW8gbG9jYWxlIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjIKLW1zZ2lkICJDcmVhdGUgQnJhbmNoIgotbXNnc3RyICJDcmVhIHJhbW8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyNwotbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgotbXNnc3RyICJDcmVhIG51b3ZvIHJhbW8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiQ3JlYSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCi1tc2dpZCAiQnJhbmNoIE5hbWUiCi1tc2dzdHIgIk5vbWUgZGVsIHJhbW8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MyBsaWIvcmVtb3RlX2FkZC50Y2w6MzkgbGliL3Rvb2xzX2RsZy50Y2w6NTAKLW1zZ2lkICJOYW1lOiIKLW1zZ3N0ciAiTm9tZToiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1OAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgotbXNnc3RyICJBcHBhaWEgbm9tZSBkZWwgZHVwbGljYXRvIGxvY2FsZSBkaSByYW1vIHJlbW90byIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Ci1tc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCi1tc2dzdHIgIlJldmlzaW9uZSBpbml6aWFsZSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCi1tc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCi1tc2dzdHIgIkFnZ2lvcm5hIHJhbW8gZXNpc3RlbnRlOiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Ci1tc2dpZCAiTm8iCi1tc2dzdHIgIk5vIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKLW1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKLW1zZ3N0ciAiU29sbyBmYXN0IGZvcndhcmQiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQotbXNnaWQgIlJlc2V0IgotbXNnc3RyICJSaXByaXN0aW5hIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKLW1zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKLW1zZ3N0ciAiQXR0aXZhIGRvcG8gbGEgY3JlYXppb25lIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMxCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCi1tc2dzdHIgIlNjZWdsaWVyZSB1biBkdXBsaWNhdG8gbG9jYWxlIGRpIHJhbW8gcmVtb3RvIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgotbXNnc3RyICIiCi0iSWwgZHVwbGljYXRvIGxvY2FsZSBkZWwgcmFtbyByZW1vdG8gJXMgbm9uIMOoIHVuIHJhbW8gbmVsbCdhcmNoaXZpbyByZW1vdG8uIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTUzIGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4NgotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIkluc2VyaXJlIHVuIG5vbWUgcGVyIGlsIHJhbW8uIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTY0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiJyVzJyBub24gw6ggdXRpbGl6emFiaWxlIGNvbWUgbm9tZSBkaSByYW1vLiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE1Ci1tc2dpZCAiRGVsZXRlIEJyYW5jaCIKLW1zZ3N0ciAiRWxpbWluYSByYW1vIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjAKLW1zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgotbXNnc3RyICJFbGltaW5hIHJhbW8gbG9jYWxlIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKLW1zZ2lkICJMb2NhbCBCcmFuY2hlcyIKLW1zZ3N0ciAiUmFtaSBsb2NhbGkiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgotbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgotbXNnc3RyICJDYW5jZWxsYSBzb2xvIHNlIGZ1c28gY29uIHVuIGFsdHJvIHJhbW8iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQotbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKLW1zZ3N0ciAiU2VtcHJlIChub24gdmVyaWZpY2FyZSBsZSBmdXNpb25pKSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKLW1zZ3N0ciAiSSByYW1pIHNlZ3VlbnRpIG5vbiBzb25vIHN0YXRpIGZ1c2kgY29tcGxldGFtZW50ZSBpbiAlczoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTcKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjgxOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMjYKIG1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKLSJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKIG1zZ3N0ciAiIgotIlJpcHJpc3RpbmFyZSByYW1pIGNhbmNlbGxhdGkgw6ggZGlmZmljaWxlLlxuIgotIlxuIgotIkNhbmNlbGxhcmUgaSByYW1pIHNlbGV6aW9uYXRpPyIKKyJTZSBub24gcHXDsiBlc3NlcmUgYXBwbGljYXRhIHNlbnphIHByb2JsZW1pLCB0aSBzYXLDoCBkYXRhIGxhIHBvc3NpYmlsaXTDoFxuIgorImRpIG1vZGlmaWNhcmxhIGRpIG51b3ZvLiBTZSB0dXR0ZSBsZSByaWdoZSBkZWxsJ2h1bmsgc2FyYW5ubyBzdGF0ZVxuIgorInJpbW9zc2UsIGxhIG1vZGlmaWNhIHNhcsOgIGludGVycm90dGEgZSBsJ2h1bmsgbm9uIHNhcsOgIG1vZGlmaWNhdG8uXG4iCiAKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjg1MQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2hlYWRlciBodW5rIgorCisjOiBhZGQtcGF0Y2guYzo4OTUgYWRkLXBhdGNoLmM6MTI5NAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiJ2dpdCBhcHBseSAtLWNhY2hlZCcgbm9uIHJpdXNjaXRvIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6OTUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQogbXNnaWQgIiIKLSJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgotIiVzIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgY2FuY2VsbGFyZSBpIHJhbWk6XG4iCi0iJXMiCisiTCdodW5rIG1vZGlmaWNhdG8gbm9uIHB1w7IgZXNzZXJlIGFwcGxpY2F0byBzZW56YSBwcm9ibGVtaS4gTW9kaWZpY2FybG8gZGkgIgorIm51b3ZvIChzZSByaXNwb25kaSBcIm5vXCIsIHNhcsOgIGVsaW1pbmF0byEpIFt5L25dPyAiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjIKLW1zZ2lkICJSZW5hbWUgQnJhbmNoIgotbXNnc3RyICJSaW5vbWluYSByYW1vIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjYKLW1zZ2lkICJSZW5hbWUiCi1tc2dzdHIgIlJpbm9taW5hIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKLW1zZ2lkICJCcmFuY2g6IgotbXNnc3RyICJSYW1vOiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM5Ci1tc2dpZCAiTmV3IE5hbWU6IgotbXNnc3RyICJOdW92byBOb21lOiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjc1Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgotbXNnc3RyICJTY2VnbGllcmUgdW4gcmFtbyBkYSByaW5vbWluYXJlLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJJbCByYW1vICclcycgZXNpc3RlIGdpw6AuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgcmlub21pbmFyZSAnJXMnLiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE3Ci1tc2dpZCAiU3RhcnRpbmcuLi4iCi1tc2dzdHIgIkF2dmlvIGluIGNvcnNvLi4uIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjYKLW1zZ2lkICJGaWxlIEJyb3dzZXIiCi1tc2dzdHIgIkZpbGUgYnJvd3NlciIKLQotIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAiQ2FyaWNhbWVudG8gJXMuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxODcKLW1zZ2lkICJbVXAgVG8gUGFyZW50XSIKLW1zZ3N0ciAiW0RpcmVjdG9yeSBzdXBlcmlvcmVdIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MjY3IGxpYi9icm93c2VyLnRjbDoyNzMKLW1zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgotbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtbyIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5OAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTcKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyOAotbXNnaWQgIkJyb3dzZSIKLW1zZ3N0ciAiRXNwbG9yYSIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCi1tc2dzdHIgIlJlY3VwZXJvICVzIGRhICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKLW1zZ3N0ciAiZXJyb3JlIGdyYXZlOiBpbXBvc3NpYmlsZSByaXNvbHZlcmUgJXMiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCi0jOiBsaWIvc3Noa2V5LnRjbDo1MwotbXNnaWQgIkNsb3NlIgotbXNnc3RyICJDaGl1ZGkiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgotbXNnc3RyICJJbCByYW1vICclcycgbm9uIGVzaXN0ZS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTk0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY29uZmlndXJhcmUgZ2l0LXB1bGwgc2VtcGxpZmljYXRvIHBlciAnJXMnLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjEwMDkKIG1zZ2lkICIiCi0iQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCi0iXG4iCi0iSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKLSJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgYW5kIGFsbCB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCiBtc2dzdHIgIiIKLSJJbCByYW1vICclcycgZXNpc3RlIGdpw6AuXG4iCi0iXG4iCi0iTm9uIHB1w7IgZWZmZXR0dWFyZSB1biAnZmFzdC1mb3J3YXJkJyBhICVzLlxuIgotIkUnIG5lY2Vzc2FyaWEgdW5hIGZ1c2lvbmUuIgorInkgLSBhZ2dpdW5naSBxdWVzdCdodW5rIGFsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyJuIC0gbm9uIGFnZ2l1bmdlcmUgcXVlc3QnaHVuayBhbGwnYXJlYSBkaSBzdGFnaW5nXG4iCisicSAtIGVzY2k7IG5vbiBhZ2dpdW5nZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgcmltYW5lbnRpIGFsbCdhcmVhIGRpICIKKyJzdGFnaW5nXG4iCisiYSAtIGFnZ2l1bmdpIHF1ZXN0J2h1bmsgZSB0dXR0aSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSBhbGwnYXJlYSBkaSAiCisic3RhZ2luZ1xuIgorImQgLSBub24gYWdnaXVuZ2VyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGUgYWxsJ2FyZWEgZGkgIgorInN0YWdpbmdcbiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJMYSBzdHJhdGVnaWEgZGkgZnVzaW9uZSAnJXMnIG5vbiDDqCBzdXBwb3J0YXRhLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlICclcycuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAotbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKLW1zZ3N0ciAiIgotIkwnYXJlYSBkaSBwcmVwYXJhemlvbmUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgKGluZGljZSkgw6ggZ2nDoCBibG9jY2F0YS4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5CisjOiBhZGQtcGF0Y2guYzoxMDE2CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCiBtc2dzdHIgIiIKLSJMJ3VsdGltbyBzdGF0byBhbmFsaXp6YXRvIG5vbiBjb3JyaXNwb25kZSBhbGxvIHN0YXRvIGRlbGwnYXJjaGl2aW8uXG4iCi0iXG4iCi0iVW4gYWx0cm8gcHJvZ3JhbW1hIEdpdCBoYSBtb2RpZmljYXRvIHF1ZXN0byBhcmNoaXZpbyBkYWxsJ3VsdGltYSBhbmFsaXNpLiAiCi0iQmlzb2duYSBlZmZldHR1YXJlIHVuYSBudW92YSBhbmFsaXNpIHByaW1hIGRpIHBvdGVyIGNhbWJpYXJlIGlsIHJhbW8gIgotImF0dHVhbGUuXG4iCi0iXG4iCi0iTGEgbnVvdmEgYW5hbGlzaSBjb21pbmNlcsOgIG9yYS5cbiIKKyJqIC0gbm9uIGRlY2lkZXJlIGluIG1lcml0byBhIHF1ZXN0J2h1bmssIHZhaSBhbCBzdWNjZXNzaXZvIGh1bmsgcGVyIGN1aSBub24gIgorIsOoIHN0YXRhIHByZXNhIHVuYSBkZWNpc2lvbmVcbiIKKyJKIC0gbm9uIGRlY2lkZXJlIGluIG1lcml0byBhIHF1ZXN0J2h1bmssIHZhaSBhbGwnaHVuayBzdWNjZXNzaXZvXG4iCisiayAtIG5vbiBkZWNpZGVyZSBpbiBtZXJpdG8gYSBxdWVzdCdodW5rLCB2YWkgYWwgcHJlY2VkZW50ZSBodW5rIHBlciBjdWkgbm9uICIKKyLDqCBzdGF0YSBwcmVzYSB1bmEgZGVjaXNpb25lXG4iCisiSyAtIG5vbiBkZWNpZGVyZSBpbiBtZXJpdG8gYSBxdWVzdCdodW5rLCB2YWkgYWxsJ2h1bmsgcHJlY2VkZW50ZVxuIgorImcgLSBzZWxlemlvbmEgdW4gaHVuayBhIGN1aSBhbmRhcmVcbiIKKyIvIC0gY2VyY2EgdW4gaHVuayBjb3JyaXNwb25kZW50ZSBhbGwnZXNwcmVzc2lvbmUgcmVnb2xhcmUgZGF0YVxuIgorInMgLSBzdWRkaXZpZGkgbCdodW5rIGNvcnJlbnRlIGluIGh1bmsgcGnDuSBwaWNjb2xpXG4iCisiZSAtIG1vZGlmaWNhIG1hbnVhbG1lbnRlIGwnaHVuayBjb3JyZW50ZVxuIgorIj8gLSBzdGFtcGEgdW5hIGd1aWRhXG4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKLW1zZ3N0ciAiQWdnaW9ybmFtZW50byBkZWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGEgJyVzJyBpbiBjb3Jzby4uLiIKKyM6IGFkZC1wYXRjaC5jOjExMzcgYWRkLXBhdGNoLmM6MTE0NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIk5lc3N1biBodW5rIHByZWNlZGVudGUiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Ci1tc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCi1tc2dzdHIgImZpbGUgcHJlc2VudGkgbmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKyM6IGFkZC1wYXRjaC5jOjExNDIgYWRkLXBhdGNoLmM6MTE1MgorbXNnaWQgIk5vIG5leHQgaHVuayIKK21zZ3N0ciAiTmVzc3VuIGh1bmsgc3VjY2Vzc2l2byIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgotbXNnc3RyICJBdHRpdmF6aW9uZSBkaSAnJXMnIGZhbGxpdGEgKHJpY2hpZXN0YSB1bmEgZnVzaW9uZSBhIGxpdmVsbG8gZmlsZSkuIgorIzogYWRkLXBhdGNoLmM6MTE1OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIk5lc3N1biBhbHRybyBodW5rIGEgY3VpIGFuZGFyZSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAiRScgcmljaGllc3RhIHVuYSBmdXNpb25lIGEgbGl2ZWxsbyBmaWxlLiIKKyM6IGFkZC1wYXRjaC5jOjExNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc3Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgImEgcXVhbGUgaHVuayBkZXNpZGVyaSBhbmRhcmUgKHByZW1pIDxJbnZpbz4gcGVyIHZlZGVybmUgYWx0cmkpPyAiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCi1tc2dzdHIgIlNpIHJpbWFycsOgIHN1bCByYW1vICclcycuIgorIzogYWRkLXBhdGNoLmM6MTE3MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzkKK21zZ2lkICJnbyB0byB3aGljaCBodW5rPyAiCittc2dzdHIgImEgcXVhbGUgaHVuayBkZXNpZGVyaSBhbmRhcmU/ICIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKKyM6IGFkZC1wYXRjaC5jOjExODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcyciCittc2dzdHIgIk51bWVybyBub24gdmFsaWRvOiAnJXMnIgorCisjOiBhZGQtcGF0Y2guYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAiTWkgZGlzcGlhY2UsIMOoIGRpc3BvbmliaWxlIHNvbG8gJWQgaHVuay4iCittc2dzdHJbMV0gIk1pIGRpc3BpYWNlLCBzb25vIGRpc3BvbmliaWxpIHNvbG8gJWQgaHVuay4iCisKKyM6IGFkZC1wYXRjaC5jOjExOTUKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2giCittc2dzdHIgIk5lc3N1biBhbHRybyBodW5rIGluIGN1aSBlc2VndWlyZSBsYSByaWNlcmNhIgorCisjOiBhZGQtcGF0Y2guYzoxMjAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAiY2VyY2FyZSB1bidlc3ByZXNzaW9uZSByZWdvbGFyZT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAiRXNwcmVzc2lvbmUgcmVnb2xhcmUgZGkgcmljZXJjYSAlcyBtYWxmb3JtYXRhOiAlcyIKKworIzogYWRkLXBhdGNoLmM6MTIzMworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAiTmVzc3VuIGh1bmsgY29ycmlzcG9uZGUgYWwgcGF0dGVybiBmb3JuaXRvIgorCisjOiBhZGQtcGF0Y2guYzoxMjQwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIk1pIGRpc3BpYWNlLCBub24gcG9zc28gc3VkZGl2aWRlcmUgcXVlc3QnaHVuayIKKworIzogYWRkLXBhdGNoLmM6MTI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmtzLiIKK21zZ3N0ciAiU3VkZGl2aXNvIGluICVkIGh1bmsuIgorCisjOiBhZGQtcGF0Y2guYzoxMjQ4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiTWkgZGlzcGlhY2UsIG5vbiBwb3NzbyBtb2RpZmljYXJlIHF1ZXN0J2h1bmsiCisKKyM6IGFkdmljZS5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIlc3N1Z2dlcmltZW50bzogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2NAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIklsIGNoZXJyeSBwaWNraW5nIG5vbiDDqCBwb3NzaWJpbGUgcGVyY2jDqSBjaSBzb25vIGZpbGUgZGkgY3VpIG5vbiDDqCBzdGF0byAiCisiZXNlZ3VpdG8gaWwgbWVyZ2UuIgorCisjOiBhZHZpY2UuYzoxNjYKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIklsIGNvbW1pdCBub24gw6ggcG9zc2liaWxlIHBlcmNow6kgY2kgc29ubyBmaWxlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gaWwgIgorIm1lcmdlLiIKKworIzogYWR2aWNlLmM6MTY4Cittc2dpZCAiTWVyZ2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJJbCBtZXJnZSBub24gw6ggcG9zc2liaWxlIHBlcmNow6kgY2kgc29ubyBmaWxlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gaWwgIgorIm1lcmdlLiIKKworIzogYWR2aWNlLmM6MTcwCittc2dpZCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJJbCBwdWxsIG5vbiDDqCBwb3NzaWJpbGUgcGVyY2jDqSBjaSBzb25vIGZpbGUgZGkgY3VpIG5vbiDDqCBzdGF0byBlc2VndWl0byBpbCAiCisibWVyZ2UuIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiSWwgcmV2ZXJ0IG5vbiDDqCBwb3NzaWJpbGUgcGVyY2jDqSBjaSBzb25vIGZpbGUgZGkgY3VpIG5vbiDDqCBzdGF0byBlc2VndWl0byBpbCAiCisibWVyZ2UuIgorCisjOiBhZHZpY2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvICVzIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgJXMgcGVyY2jDqSBjaSBzb25vIGZpbGUgZGkgY3VpIG5vbiDDqCBzdGF0byBlc2VndWl0byAiCisiaWwgbWVyZ2UuIgorCisjOiBhZHZpY2UuYzoxODIKIG1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCi0iQ2hlY2tvdXQnLiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCiBtc2dzdHIgIiIKLSJOb24gc2kgw6ggcGnDuSBzdSB1biByYW1vIGxvY2FsZVxuIgotIlxuIgotIlNlIHNpIHZ1b2xlIHJpbWFuZXJlIHN1IHVuIHJhbW8sIGNyZWFybmUgdW5vIG9yYSBhIHBhcnRpcmUgZGEgJ1F1ZXN0YSAiCi0icmV2aXNpb25lIGF0dGl2YSBzdGFjY2F0YScuIgorIkNvcnJlZ2dpbGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvLCBxdWluZGkgdXNhICdnaXQgYWRkL3JtIDxmaWxlPi4uLicgY29tZSAiCisiYXBwcm9wcmlhdG8gcGVyIHJpc29sdmVybGkgZWQgZXNlZ3VpIHVuIGNvbW1pdC4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgIkF0dGl2YXppb25lIGRpICclcycgY29tcGxldGF0YS4iCisjOiBhZHZpY2UuYzoxOTAKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIkVzY28gYSBjYXVzYSBkaSB1biBjb25mbGl0dG8gbm9uIHJpc29sdG8uIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCi1tc2dzdHIgIiIKLSJSaXByaXN0aW5hcmUgJyVzJyBhICclcycgY29tcG9ydGVyw6AgbGEgcGVyZGl0YSBkZWxsZSBzZWd1ZW50aSByZXZpc2lvbmk6IgorIzogYWR2aWNlLmM6MTk1IGJ1aWx0aW4vbWVyZ2UuYzoxMzMyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJJbCBtZXJnZSBub24gw6ggc3RhdG8gY29uY2x1c28gKGVzaXN0ZSBNRVJHRV9IRUFEKS4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAiUmljb21wb3JyZSBsZSByZXZpc2lvbmkgcGVyZHV0ZSBwb3RyZWJiZSBub24gZXNzZXJlIHNlbXBsaWNlLiIKKyM6IGFkdmljZS5jOjE5NworbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgbWVyZ2luZy4iCittc2dzdHIgIkVzZWd1aSBpbCBjb21taXQgZGVsbGUgbW9kaWZpY2hlIHByaW1hIGRpIGVzZWd1aXJlIGlsIG1lcmdlLiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAnJXMnPyIKLW1zZ3N0ciAiUmlwcmlzdGluYXJlICclcyc/IgorIzogYWR2aWNlLmM6MTk4Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICJFc2NvIGEgY2F1c2EgZGkgdW4gbWVyZ2Ugbm9uIHRlcm1pbmF0by4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY0IGxpYi90b29sc19kbGcudGNsOjM0MwotbXNnaWQgIlZpc3VhbGl6ZSIKLW1zZ3N0ciAiVmlzdWFsaXp6YSIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKLSMsIHRjbC1mb3JtYXQKKyM6IGFkdmljZS5jOjIwNAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJOb3RlOiBzd2l0Y2hpbmcgdG8gJyVzJy5cbiIKICJcbiIKLSJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgotInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCiAiXG4iCi0iVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCisiT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byAiCisiZmFsc2VcbiIKKyJcbiIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIHByZXBhcmFyZSBpbCByYW1vIGF0dHVhbGUuXG4iCisiTm90YTogZXNlZ3VvIGlsIGNoZWNrb3V0IGRpICclcycuXG4iCiAiXG4iCi0iUXVlc3RhIGRpcmVjdG9yeSBkaSBsYXZvcm8gw6ggc3RhdGEgY29udmVydGl0YSBzb2xvIHBhcnppYWxtZW50ZS4gSSBmaWxlIHNvbm8gIgotInN0YXRpIGFnZ2lvcm5hdGkgY29ycmV0dGFtZW50ZSwgbWEgbCdhZ2dpb3JuYW1lbnRvIGRpIHVuIGZpbGUgZGkgR2l0IGhhICIKLSJwcm9kb3R0byBkZWdsaSBlcnJvcmkuXG4iCisiU2VpIG5lbGxvIHN0YXRvICdIRUFEIHNjb2xsZWdhdG8nLiBQdW9pIGRhcmUgdW4nb2NjaGlhdGEsIGFwcG9ydGFyZSAiCisibW9kaWZpY2hlXG4iCisic3BlcmltZW50YWxpIGVkIGVzZWd1aXJuZSBpbCBjb21taXQsIGUgcHVvaSBzY2FydGFyZSBxdWFsdW5xdWUgY29tbWl0ICIKKyJlc2VndWl0b1xuIgorImluIHF1ZXN0byBzdGF0byBzZW56YSBjaGUgY2nDsiBhYmJpYSBhbGN1bmEgaW5mbHVlbnphIHN1Z2xpIGFsdHJpIGJyYW5jaCAiCisidG9ybmFuZG9cbiIKKyJzdSB1biBicmFuY2guXG4iCiAiXG4iCi0iUXVlc3RvIG5vbiBzYXJlYmJlIGRvdnV0byBzdWNjZWRlcmUuICAlcyBvcmEgdGVybWluZXLDoCBzZW56YSBhbHRyZSBhemlvbmkuIgorIlNlIHZ1b2kgY3JlYXJlIHVuIG51b3ZvIGJyYW5jaCBwZXIgbWFudGVuZXJlIGkgY29tbWl0IGNyZWF0aSwgcHVvaSBmYXJsb1xuIgorIihvcmEgbyBpbiBzZWd1aXRvKSB1c2FuZG8gbCdvcHppb25lIC1jIGNvbiBpbCBjb21hbmRvIHN3aXRjaC4gQWQgZXNlbXBpbzpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5vbWUgbnVvdm8gYnJhbmNoPlxuIgorIlxuIgorIk9wcHVyZSBwdW9pIGFubnVsbGFyZSBxdWVzdCdvcGVyYXppb25lIGNvbjpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIkRpc2F0dGl2YSBxdWVzdG8gY29uc2lnbGlvIGltcG9zdGFuZG8gbGEgdmFyaWFiaWxlIGRpIGNvbmZpZ3VyYXppb25lXG4iCisiYWR2aWNlLmRldGFjaGVkSGVhZCBhIGZhbHNlXG4iCisiXG4iCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKLW1zZ2lkICJTZWxlY3QiCi1tc2dzdHIgIlNlbGV6aW9uYSIKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAibGEgcmlnYSBkaSBjb21hbmRvIHRlcm1pbmEgY29uIFxcIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCi1tc2dpZCAiRm9udCBGYW1pbHkiCi1tc2dzdHIgIkZhbWlnbGlhIGRpIGNhcmF0dGVyaSIKKyM6IGFsaWFzLmM6NTEKK21zZ2lkICJ1bmNsb3NlZCBxdW90ZSIKK21zZ3N0ciAidmlyZ29sZXR0ZSBub24gY2hpdXNlIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICJEaW1lbnNpb25lIGNhcmF0dGVyaSIKKyM6IGFwcGx5LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIm9wemlvbmUgc3BhemkgYmlhbmNoaSAnJXMnIG5vbiByaWNvbm9zY2l1dGEiCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKLW1zZ2lkICJGb250IEV4YW1wbGUiCi1tc2dzdHIgIkVzZW1waW8gY2FyYXR0ZXJpIgorIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIm9wemlvbmUgaWdub3JhIHNwYXppIGJpYW5jaGkgJyVzJyBub24gcmljb25vc2NpdXRhIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgZSAtLTN3YXkgbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRpIGluc2llbWUuIgorCisjOiBhcHBseS5jOjEzNworbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCBlIC0tM3dheSBub24gcG9zc29ubyBlc3NlcmUgdXNhdGkgaW5zaWVtZS4iCisKKyM6IGFwcGx5LmM6MTQwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkgYWwgZGkgZnVvcmkgZGkgdW4gcmVwb3NpdG9yeSIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IGFsIGRpIGZ1b3JpIGRpIHVuIHJlcG9zaXRvcnkiCisKKyM6IGFwcGx5LmM6MTU0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIGFsIGRpIGZ1b3JpIGRpIHVuIHJlcG9zaXRvcnkiCisKKyM6IGFwcGx5LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIkltcG9zc2liaWxlIHByZXBhcmFyZSBsJ2VzcHJlc3Npb25lIHJlZ29sYXJlIHRpbWVzdGFtcCAlcyIKKworIzogYXBwbHkuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIGhhIHJlc3RpdHVpdG8gJWQgcGVyIGwnaW5wdXQ6ICVzIgorCisjOiBhcHBseS5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGlsIG5vbWUgZGVsIGZpbGUgbmVsbGEgcGF0Y2ggYWxsYSByaWdhICVkIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycmF0byAtIGF0dGVzbyAvZGV2L251bGwsIHJpY2V2dXRvICVzIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycmF0byAtIG51b3ZvIG5vbWUgZGVsIGZpbGUgaW5jb25zaXN0ZW50ZSBhbGxhIHJpZ2EgJWQiCisKKyM6IGFwcGx5LmM6OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiBnaXQtZGlmZiBlcnJhdG8gLSB2ZWNjaGlvIG5vbWUgZGVsIGZpbGUgaW5jb25zaXN0ZW50ZSBhbGxhIHJpZ2EgJWQiCisKKyM6IGFwcGx5LmM6OTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyYXRvIC0gYXR0ZXNvIC9kZXYvbnVsbCBhbGxhIHJpZ2EgJWQiCisKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAibW9kbyBub24gdmFsaWRvIGFsbGEgcmlnYSAlZDogJXMiCisKKyM6IGFwcGx5LmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIKK21zZ3N0ciAicmlnaGUgZGkgaW50ZXN0YXppb25lICVkIGUgJWQgaW5jb25zaXN0ZW50aSIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKLSJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorImwnaW50ZXN0YXppb25lIGdpdCBkaWZmIG5vbiByaXBvcnRhIGxlIGluZm9ybWF6aW9uaSBzdWwgZmlsZSB1bmEgdm9sdGEgIgorInJpbW9zc28gJWQgY29tcG9uZW50ZSBpbml6aWFsZSBkZWwgcGVyY29yc28gKHJpZ2EgJWQpIgorbXNnc3RyWzFdICIiCisibCdpbnRlc3RhemlvbmUgZ2l0IGRpZmYgbm9uIHJpcG9ydGEgbGUgaW5mb3JtYXppb25pIHN1bCBmaWxlIHVuYSB2b2x0YSAiCisicmltb3NzaSAlZCBjb21wb25lbnRpIGluaXppYWxpIGRlbCBwZXJjb3JzbyAocmlnYSAlZCkiCisKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJsJ2ludGVzdGF6aW9uZSBnaXQgZGlmZiBub24gcmlwb3J0YSBsZSBpbmZvcm1hemlvbmkgc3VsIGZpbGUgKHJpZ2EgJWQpIgorCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW50OiByaWdhIGluYXR0ZXNhOiAlLipzIgorCisjOiBhcHBseS5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZnJhbW1lbnRvIGRpIHBhdGNoIHNlbnphIGludGVzdGF6aW9uZSBhbGxhIHJpZ2EgJWQ6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTc1MworbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJpbCBudW92byBmaWxlIGRpcGVuZGUgZGEgdmVjY2hpIGNvbnRlbnV0aSIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiaWwgZmlsZSBlbGltaW5hdG8gaGEgYW5jb3JhIGRlaSBjb250ZW51dGkiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIGNvcnJvdHRhIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzoxODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJpbCBudW92byBmaWxlICVzIGRpcGVuZGUgZGEgdmVjY2hpIGNvbnRlbnV0aSIKKworIzogYXBwbHkuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImlsIGZpbGUgZWxpbWluYXRvICVzIGhhIGFuY29yYSBkZWkgY29udGVudXRpIgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogYXR0ZW56aW9uZTogaWwgZmlsZSAlcyBkaXZlbnRhIHZ1b3RvIG1hIG5vbiDDqCBlbGltaW5hdG8iCisKKyM6IGFwcGx5LmM6MTk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJwYXRjaCBiaW5hcmlhIGNvcnJvdHRhIGFsbGEgcmlnYSAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggYmluYXJpYSBub24gcmljb25vc2NpdXRhIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIGNvbiBzb2xpIGNvbnRlbnV0aSBnYXJiYWdlIGFsbGEgcmlnYSAlZCIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgY29sbGVnYW1lbnRvIHNpbWJvbGljbyAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBvIGxlZ2dlcmUgJXMiCisKKyM6IGFwcGx5LmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgImluaXppbyBkZWxsYSByaWdhIG5vbiB2YWxpZG86ICclYyciCisKKyM6IGFwcGx5LmM6MzA1NworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIkFwcGxpY2F6aW9uZSBmcmFtbWVudG8gJWQgcml1c2NpdGEgYWxsYSByaWdhICVkIChvZmZzZXQ6ICVkIHJpZ2EpLiIKK21zZ3N0clsxXSAiQXBwbGljYXppb25lIGZyYW1tZW50byAlZCByaXVzY2l0YSBhbGxhIHJpZ2EgJWQgKG9mZnNldDogJWQgcmlnaGUpLiIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIkNvbnRlc3RvIHJpZG90dG8gYSAoJWxkLyVsZCkgcGVyIGFwcGxpY2FyZSBpbCBmcmFtbWVudG8gYWxsYSByaWdhICVkIgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKIG1zZ3N0ciAiIgotIlF1ZXN0byDDqCB1biB0ZXN0byBkJ2VzZW1waW8uXG4iCi0iU2UgdGkgcGlhY2UgcXVlc3RvIHRlc3RvLCBzY2VnbGkgcXVlc3RvIGNhcmF0dGVyZS4iCisiZHVyYW50ZSBsYSByaWNlcmNhIGRpOlxuIgorIiUuKnMiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKLW1zZ2lkICJHaXQgR3VpIgotbXNnc3RyICJHaXQgR3VpIgorIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImRhdGkgZGVsbGEgcGF0Y2ggYmluYXJpYSBtYW5jYW50aSBwZXIgJyVzJyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NgotbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQ3JlYSBudW92byBhcmNoaXZpbyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MwotbXNnaWQgIk5ldy4uLiIKLW1zZ3N0ciAiTnVvdm8uLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCi1tc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQ2xvbmEgYXJjaGl2aW8gZXNpc3RlbnRlIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgotbXNnaWQgIkNsb25lLi4uIgotbXNnc3RyICJDbG9uYS4uLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2Ci1tc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICJBcHJpIGFyY2hpdmlvIGVzaXN0ZW50ZSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKLW1zZ2lkICJPcGVuLi4uIgotbXNnc3RyICJBcHJpLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzMgotbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCi1tc2dzdHIgIkFyY2hpdmkgcmVjZW50aSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKLW1zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKLW1zZ3N0ciAiQXByaSBhcmNoaXZpbyByZWNlbnRlOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIGwnYXJjaGl2aW8gJXM6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQotbXNnaWQgIkRpcmVjdG9yeToiCi1tc2dzdHIgIkRpcmVjdG9yeToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQXJjaGl2aW8gR2l0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkxhIGRpcmVjdG9yeSAlcyBlc2lzdGUgZ2nDoC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIklsIGZpbGUgJXMgZXNpc3RlIGdpw6AuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgotbXNnaWQgIkNsb25lIgotbXNnc3RyICJDbG9uYSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzkKLW1zZ2lkICJTb3VyY2UgTG9jYXRpb246IgotbXNnc3RyICJQb3NpemlvbmUgc29yZ2VudGU6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MAotbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgotbXNnc3RyICJEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKLW1zZ2lkICJDbG9uZSBUeXBlOiIKLW1zZ3N0ciAiVGlwbyBkaSBjbG9uZToiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Ci1tc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgotbXNnc3RyICJTdGFuZGFyZCAodmVsb2NlLCBzZW1pLXJpZG9uZGFudGUsIGNvbiBoYXJkbGluaykiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Ci1tc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgotbXNnc3RyICJDb3BpYSBjb21wbGV0YSAocGnDuSBsZW50bywgYmFja3VwIHJpZG9uZGFudGUpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAotbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgotbXNnc3RyICJTaGFyZWQgKGlsIHBpw7kgdmVsb2NlLCBub24gcmFjY29tYW5kYXRvLCBuZXNzdW4gYmFja3VwKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgotbXNnc3RyICIlcyBub24gw6ggdW4gYXJjaGl2aW8gR2l0LiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKLW1zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIlN0YW5kYXJkIMOoIGRpc3BvbmliaWxlIHNvbG8gcGVyIGFyY2hpdmkgbG9jYWxpLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKLW1zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICJTaGFyZWQgw6ggZGlzcG9uaWJpbGUgc29sbyBwZXIgYXJjaGl2aSBsb2NhbGkuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiSWwgZmlsZS9kaXJlY3RvcnkgJXMgZXNpc3RlIGdpw6AuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgotbXNnc3RyICJJbXBvc3NpYmlsZSBjb25maWd1cmFyZSBvcmlnaW4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCi1tc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiQ2FsY29sbyBvZ2dldHRpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQotbXNnaWQgImJ1Y2tldHMiCisjOiBhcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCiBtc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBhcHBsaWNhcmUgdW5hIHBhdGNoIGJpbmFyaWEgYWwgY29udHJhcmlvIHNlbnphIGwnaHVuayBjb250cmFyaW8gIgorInBlciAnJXMnIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY29waWFyZSBvZ2dldHRpL2luZm8vYWx0ZXJuYXRlOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgotbXNnc3RyICJOaWVudGUgZGEgY2xvbmFyZSBkYSAlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAiSWwgcmFtbyAnbWFzdGVyJyBub24gw6ggc3RhdG8gaW5pemlhbGl6emF0by4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Ci1tc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdXRpbGl6emFyZSBnbGkgaGFyZGxpbmsuIFNpIHJpY29ycmVyw6AgYWxsYSBjb3BpYS4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2xvbmluZyBmcm9tICVzIgotbXNnc3RyICJDbG9uYXppb25lIGRhICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiQ29waWEgZGVnbGkgb2dnZXR0aSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjAKLW1zZ2lkICJLaUIiCi1tc2dzdHIgIktpQiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgotbXNnc3RyICJJbXBvc3NpYmlsZSBjb3BpYXJlIG9nZ2V0dG86ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NAotbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiQ29sbGVnYW1lbnRvIG9nZ2V0dGkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1Ci1tc2dpZCAib2JqZWN0cyIKLW1zZ3N0ciAib2dnZXR0aSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKLW1zZ3N0ciAiSGFyZGxpbmsgaW1wb3NzaWJpbGUgc3VsbCdvZ2dldHRvOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTgKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIHJlY3VwZXJhcmUgcmFtaSBlIG9nZ2V0dGkuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCi0iY29uc29sZS4iCisiaW1wb3NzaWJpbGUgYXBwbGljYXJlIHVuYSBwYXRjaCBiaW5hcmlhIGEgJyVzJyBzZW56YSBsYSByaWdhIGQnaW5kaWNlICIKKyJjb21wbGV0YSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCisjOiBhcHBseS5jOjMxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsZSBldGljaGV0dGUuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSAiCi0iY29uc29sZS4iCisibGEgcGF0Y2ggc2kgYXBwbGljYSBhICclcycgKCVzKSwgY2hlIG5vbiBjb3JyaXNwb25kZSBhaSBjb250ZW51dGkgY29ycmVudGkgIgorImRlbCBmaWxlLiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTMKLW1zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorIzogYXBwbHkuYzozMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAibGEgcGF0Y2ggc2kgYXBwbGljYSBhIHVuIGZpbGUgdnVvdG8gJyVzJyBtYSBpbCBmaWxlIG5vbiDDqCB2dW90byIKKworIzogYXBwbHkuYzozMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGxhIHBvc3RpbW1hZ2luZSAlcyBuZWNlc3NhcmlhIHBlciAnJXMnIgorCisjOiBhcHBseS5jOjMyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgImxhIHBhdGNoIGJpbmFyaWEgbm9uIHNpIGFwcGxpY2EgY29ycmV0dGFtZW50ZSBhICclcyciCisKKyM6IGFwcGx5LmM6MzIwNworIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIGRldGVybWluYXJlIEhFQUQuIENvbnRyb2xsYXJlIGkgZGV0dGFnbGkgZm9ybml0aSBkYWxsYSBjb25zb2xlLiIKKyJsYSBwYXRjaCBiaW5hcmlhIHN1ICclcycgY3JlYSByaXN1bHRhdGkgbm9uIGNvcnJldHRpIChhdHRlc28gJXMsIHJpY2V2dXRvICVzKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgcmlwdWxpcmUgJXMiCisjOiBhcHBseS5jOjMyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgInBhdGNoIG5vbiByaXVzY2l0YTogJXM6JWxkIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAotbXNnaWQgIkNsb25lIGZhaWxlZC4iCi1tc2dzdHIgIkNsb25hemlvbmUgbm9uIHJpdXNjaXRhLiIKKyM6IGFwcGx5LmM6MzM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNoZWNrb3V0IGRpICclcyciCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1Ci1tc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgotbXNnc3RyICJOb24gw6ggc3RhdG8gdHJvdmF0byB1biByYW1vIHByZWRlZmluaXRvLiIKKyM6IGFwcGx5LmM6MzQwMyBhcHBseS5jOjM0MTQgYXBwbHkuYzozNDYwIG1pZHguYzo2MSBzZXR1cC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAibGV0dHVyYSBkaSAlcyBub24gcml1c2NpdGEiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgotbXNnc3RyICJJbXBvc3NpYmlsZSByaXNvbHZlcmUgJXMgY29tZSB1bmEgcmV2aXNpb25lLiIKKyM6IGFwcGx5LmM6MzQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJsZXR0dXJhIGRpICclcycgb2x0cmUgdW4gY29sbGVnYW1lbnRvIHNpbWJvbGljbyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKLW1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiQ3JlYXppb25lIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisjOiBhcHBseS5jOjM0NDAgYXBwbHkuYzozNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICJpbCBwZXJjb3JzbyAlcyDDqCBzdGF0byByaW5vbWluYXRvL2VsaW1pbmF0byIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzkgbGliL2luZGV4LnRjbDo2NyBsaWIvaW5kZXgudGNsOjEzMAotIzogbGliL2luZGV4LnRjbDoxOTgKLW1zZ2lkICJmaWxlcyIKKyM6IGFwcGx5LmM6MzUyNiBhcHBseS5jOjM2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIlczogbm9uIGVzaXN0ZSBuZWxsJ2luZGljZSIKKworIzogYXBwbHkuYzozNTM1IGFwcGx5LmM6MzcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiBub24gY29ycmlzcG9uZGUgYWxsJ2luZGljZSIKKworIzogYXBwbHkuYzozNTcwCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorImRhbCByZXBvc2l0b3J5IG1hbmNhIGlsIGJsb2IgbmVjZXNzYXJpbyBwZXIgcmlwaWVnYXJlIHN1bCBtZXJnZSBhIHRyZSB2aWUuIgorCisjOiBhcHBseS5jOjM1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJSaXBpZWdvIHN1bCBtZXJnZSBhIHRyZSB2aWUuLi5cbiIKKworIzogYXBwbHkuYzozNTg5IGFwcGx5LmM6MzU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGkgY29udGVudXRpIGNvcnJlbnRpIGRpICclcyciCisKKyM6IGFwcGx5LmM6MzYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJSaXBpZWdvIHN1bCBtZXJnZSBhIHRyZSB2aWUgbm9uIHJpdXNjaXRvLi4uXG4iCisKKyM6IGFwcGx5LmM6MzYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIlBhdGNoIGFwcGxpY2F0YSBhICclcycgY29uIGNvbmZsaXR0aS5cbiIKKworIzogYXBwbHkuYzozNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICJQYXRjaCAnJXMnIGFwcGxpY2F0YSBjb3JyZXR0YW1lbnRlLlxuIgorCisjOiBhcHBseS5jOjM2NTAKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICJsYSByaW1vemlvbmUgZGVsbGEgcGF0Y2ggbGFzY2lhIGNvbnRlbnV0aSBkZWwgZmlsZSIKKworIzogYXBwbHkuYzozNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlczogdGlwbyBlcnJhdG8iCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIGhhIGlsIHRpcG8gJW8sIGF0dGVzbyAlbyIKKworIzogYXBwbHkuYzozODc2IGFwcGx5LmM6Mzg3OCByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICJwZXJjb3JzbyAnJXMnIG5vbiB2YWxpZG8iCisKKyM6IGFwcGx5LmM6MzkzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBlc2lzdGUgZ2nDoCBuZWxsJ2luZGljZSIKKworIzogYXBwbHkuYzozOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IGVzaXN0ZSBnacOgIG5lbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisKKyM6IGFwcGx5LmM6Mzk1NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgImlsIG51b3ZvIG1vZG8gKCVvKSBkaSAlcyBub24gY29ycmlzcG9uZGUgYWwgdmVjY2hpbyBtb2RvICglbykiCisKKyM6IGFwcGx5LmM6Mzk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgImlsIG51b3ZvIG1vZG8gKCVvKSBkaSAlcyBub24gY29ycmlzcG9uZGUgYWwgdmVjY2hpbyBtb2RvICglbykgZGkgJXMiCisKKyM6IGFwcGx5LmM6Mzk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiaWwgZmlsZSBpbnRlcmVzc2F0byAnJXMnIHNpIHRyb3ZhIG9sdHJlIHVuIGNvbGxlZ2FtZW50byBzaW1ib2xpY28iCisKKyM6IGFwcGx5LmM6Mzk4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiBsYSBwYXRjaCBub24gc2kgYXBwbGljYSBjb3JyZXR0YW1lbnRlIgorCisjOiBhcHBseS5jOjQwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIkNvbnRyb2xsbyBkZWxsYSBwYXRjaCAlcyBpbiBjb3Jzby4uLiIKKworIzogYXBwbHkuYzo0MDkzCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgImxlIGluZm9ybWF6aW9uaSBTSEExIHBlciBpbCBzb3R0b21vZHVsbyAlcyBzb25vIG1hbmNhbnRpIG8gaW51dGlsaSIKKworIzogYXBwbHkuYzo0MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAibW9kaWZpY2EgbW9kbyBwZXIgJXMgY2hlIG5vbiDDqCBuZWxsJ0hFQUQgY29ycmVudGUiCisKKyM6IGFwcGx5LmM6NDEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAibGUgaW5mb3JtYXppb25pIFNIQTEgc29ubyBtYW5jYW50aSBvIGludXRpbGkgKCVzKS4iCisKKyM6IGFwcGx5LmM6NDExMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSAlcyBhbGwnaW5kaWNlIHRlbXBvcmFuZW8iCisKKyM6IGFwcGx5LmM6NDEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBsJ2luZGljZSB0ZW1wb3JhbmVvIGluICVzIgorCisjOiBhcHBseS5jOjQyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSByaW11b3ZlcmUgJXMgZGFsbCdpbmRpY2UiCisKKyM6IGFwcGx5LmM6NDI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgInBhdGNoIGNvcnJvdHRhIHBlciBpbCBzb3R0b21vZHVsbyAlcyIKKworIzogYXBwbHkuYzo0MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsbyBzdGF0IGRlbCBmaWxlIGFwcGVuYSBjcmVhdG8gJyVzJyIKKworIzogYXBwbHkuYzo0MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbCdhcmNoaXZpbyBkaSBiYWNrdXAgcGVyIGlsIGZpbGUgYXBwZW5hIGNyZWF0byAlcyIKKworIzogYXBwbHkuYzo0MzE0IGFwcGx5LmM6NDQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSBsYSB2b2NlIGRlbGxhIGNhY2hlIHBlciAlcyIKKworIzogYXBwbHkuYzo0MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJzY3JpdHR1cmEgaW4gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGFwcGx5LmM6NDM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiY2hpdXN1cmEgZGVsIGZpbGUgJyVzJyBpbiBjb3JzbyIKKworIzogYXBwbHkuYzo0NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSAnJXMnIGNvbiBtb2RvICVvIgorCisjOiBhcHBseS5jOjQ1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiUGF0Y2ggJXMgYXBwbGljYXRhIGNvcnJldHRhbWVudGUuIgorCisjOiBhcHBseS5jOjQ1MzcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiZXJyb3JlIGludGVybm8iCisKKyM6IGFwcGx5LmM6NDU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIkFwcGxpY2F6aW9uZSBkZWxsYSBwYXRjaCAlJXMgY29uICVkIGZyYW1tZW50byByZXNwaW50by4uLiIKK21zZ3N0clsxXSAiQXBwbGljYXppb25lIGRlbGxhIHBhdGNoICUlcyBjb24gJWQgZnJhbW1lbnRpIHJlc3BpbnRpLi4uIgorCisjOiBhcHBseS5jOjQ1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICJub21lIGZpbGUgLnJlaiB0cm9uY2F0byBhICUuKnMucmVqIgorCisjOiBhcHBseS5jOjQ1NTkgYnVpbHRpbi9mZXRjaC5jOjkwMSBidWlsdGluL2ZldGNoLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlICVzIgorCisjOiBhcHBseS5jOjQ1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiRnJhbW1lbnRvICVkIGFwcGxpY2F0byBjb3JyZXR0YW1lbnRlLiIKKworIzogYXBwbHkuYzo0NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiRnJhbW1lbnRvICVkIHJlc3BpbnRvLiIKKworIzogYXBwbHkuYzo0Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIlBhdGNoICclcycgaWdub3JhdGEuIgorCisjOiBhcHBseS5jOjQ3MDQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgImlucHV0IG5vbiByaWNvbm9zY2l1dG8iCisKKyM6IGFwcGx5LmM6NDcyNAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBpbmRleCIKKworIzogYXBwbHkuYzo0ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBsYSBwYXRjaCAnJXMnOiAlcyIKKworIzogYXBwbHkuYzo0OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiVkIGVycm9yZSBkaSBzcGF6aSBiaWFuY2hpIHNvcHByZXNzbyIKK21zZ3N0clsxXSAiJWQgZXJyb3JpIGRpIHNwYXppIGJpYW5jaGkgc29wcHJlc3NpIgorCisjOiBhcHBseS5jOjQ5MTQgYXBwbHkuYzo0OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIHJpZ2EgYWdnaXVuZ2UgZXJyb3JpIGRpIHNwYXppIGJpYW5jaGkuIgorbXNnc3RyWzFdICIlZCByaWdoZSBhZ2dpdW5nb25vIGVycm9yaSBkaSBzcGF6aSBiaWFuY2hpLiIKKworIzogYXBwbHkuYzo0OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIHJpZ2EgYXBwbGljYXRhIGRvcG8gbGEgY29ycmV6aW9uZSBkaSBlcnJvcmkgZGkgc3BhemkgYmlhbmNoaS4iCittc2dzdHJbMV0gIiVkIHJpZ2hlIGFwcGxpY2F0ZSBkb3BvIGxhIGNvcnJlemlvbmUgZGkgZXJyb3JpIGRpIHNwYXppIGJpYW5jaGkuIgorCisjOiBhcHBseS5jOjQ5MzggYnVpbHRpbi9hZGQuYzo1NzkgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6MzkwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBudW92byBmaWxlIGluZGV4IgorCisjOiBhcHBseS5jOjQ5NjYKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJub24gYXBwbGljYXJlIGxlIG1vZGlmaWNoZSBjb3JyaXNwb25kZW50aSBhbCBwZXJjb3JzbyBzcGVjaWZpY2F0byIKKworIzogYXBwbHkuYzo0OTY5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiYXBwbGljYSBsZSBtb2RpZmljaGUgY29ycmlzcG9uZGVudGkgYWwgcGVyY29yc28gc3BlY2lmaWNhdG8iCisKKyM6IGFwcGx5LmM6NDk3MSBidWlsdGluL2FtLmM6MjIwNgorbXNnaWQgIm51bSIKK21zZ3N0ciAibnVtIgorCisjOiBhcHBseS5jOjQ5NzIKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAicmltdW92aSA8bnVtPiBiYXJyZSBpbml6aWFsaSBkYWkgcGVyY29yc2kgZGlmZiB0cmFkaXppb25hbGkiCisKKyM6IGFwcGx5LmM6NDk3NQorbXNnaWQgImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giCittc2dzdHIgImlnbm9yYSBsZSBhZ2dpdW50ZSBjcmVhdGUgZGFsbGEgcGF0Y2giCisKKyM6IGFwcGx5LmM6NDk3NworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorImludmVjZSBkaSBhcHBsaWNhcmUgbGEgcGF0Y2gsIHZpc3VhbGl6emEgbCdvdXRwdXQgZGkgZGlmZnN0YXQgcGVyIGwnaW5wdXQiCisKKyM6IGFwcGx5LmM6NDk4MQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGlsIG51bWVybyBkaSByaWdoZSBhZ2dpdW50ZSBlZCBlbGltaW5hdGUgaW4gbm90YXppb25lIGRlY2ltYWxlIgorCisjOiBhcHBseS5jOjQ5ODMKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJpbnZlY2UgZGkgYXBwbGljYXJlIGxhIHBhdGNoLCB2aXN1YWxpenphIHVuIHJpYXNzdW50byBwZXIgbCdpbnB1dCIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiaW52ZWNlIGRpIGFwcGxpY2FyZSBsYSBwYXRjaCwgdmVyaWZpY2Egc2UgcHXDsiBlc3NlcmUgYXBwbGljYXRhIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgImFzc2ljdXJhIGNoZSBsYSBwYXRjaCBzaWEgYXBwbGljYWJpbGUgYWxsJ2luZGljZSBjb3JyZW50ZSIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICJjb250cmFzc2VnbmEgaSBudW92aSBmaWxlIGNvbiBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiYXBwbGljYSB1bmEgcGF0Y2ggc2VuemEgbW9kaWZpY2FyZSBsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgIiIKKyJhY2NldHRhIHVuYSBwYXRjaCBjaGUgYXBwb3J0YSBtb2RpZmljaGUgYWwgZGkgZnVvcmkgZGVsbCdhcmVhIGRpIGxhdm9ybyIKKworIzogYXBwbHkuYzo0OTk2Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgImFwcGxpY2EgYW5jaGUgbGEgcGF0Y2ggKGRhIHVzYXJlIGNvbiAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJwcm92YSB1biBtZXJnZSBhIHRyZSB2aWUgc2UgbGEgcGF0Y2ggbm9uIHNpIGFwcGxpY2EgY29ycmV0dGFtZW50ZSIKKworIzogYXBwbHkuYzo1MDAwCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgImNvbXBpbGEgdW4gaW5kZXggdGVtcG9yYW5lbyBiYXNhdG8gc3VsbGUgaW5mb3JtYXppb25pIGluZGljZSBpbmNsdXNlIgorCisjOiBhcHBseS5jOjUwMDMgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImkgcGVyY29yc2kgc29ubyBzZXBhcmF0aSBjb24gdW4gY2FyYXR0ZXJlIE5VTCIKKworIzogYXBwbHkuYzo1MDA1Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICJhc3NpY3VyYSBjaGUgYWxtZW5vIDxuPiByaWdoZSBkaSBjb250ZXN0byBjb3JyaXNwb25kYW5vIgorCisjOiBhcHBseS5jOjUwMDYgYnVpbHRpbi9hbS5jOjIxODUgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OAorIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDAgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxMCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImF6aW9uZSIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgInJpbGV2YSByaWdoZSBudW92ZSBvIG1vZGlmaWNhdGUgY2hlIGhhbm5vIGVycm9yaSBkaSBzcGF6aSBiaWFuY2hpIgorCisjOiBhcHBseS5jOjUwMTAgYXBwbHkuYzo1MDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiaWdub3JhIG1vZGlmaWNoZSBhZ2xpIHNwYXppIGJpYW5jaGkgZHVyYW50ZSBsYSByaWNlcmNhIGRlaSBjb250ZXN0aSIKKworIzogYXBwbHkuYzo1MDE2Cittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgImFwcGxpY2EgbGEgcGF0Y2ggaW4gbWFuaWVyYSBpbnZlcnNhIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAibm9uIGFzcGV0dGFyZSBhbG1lbm8gdW5hIHJpZ2EgZGkgY29udGVzdG8iCisKKyM6IGFwcGx5LmM6NTAyMAorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICJsYXNjaWEgaSBmcmFtbWVudGkgcmVzcGludGkgbmVpIGZpbGUgKi5yZWogY29ycmlzcG9uZGVudGkiCisKKyM6IGFwcGx5LmM6NTAyMgorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICJjb25zZW50aSBsYSBzb3ZyYXBwb3NpemlvbmUgZGVpIGZyYW1tZW50aSIKKworIzogYXBwbHkuYzo1MDIzIGJ1aWx0aW4vYWRkLmM6MzA5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NSBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5OCBidWlsdGluL2ZzY2suYzo3NzQKKyM6IGJ1aWx0aW4vbG9nLmM6MjE2NiBidWlsdGluL212LmM6MTIzIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAidmlzdWFsaXp6YSB1bHRlcmlvcmkgZGV0dGFnbGkiCisKKyM6IGFwcGx5LmM6NTAyNQorbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICIiCisidG9sbGVyYSBjYXJhdHRlcmUgZmluZSByaWdhIHJpbGV2YXRvIGVycm9uZWFtZW50ZSBjb21lIG1hbmNhbnRlIGFsbGEgZmluZSAiCisiZGVsIGZpbGUiCisKKyM6IGFwcGx5LmM6NTAyOAorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAiIgorIm5vbiBmYXJlIGFmZmlkYW1lbnRvIHN1bCBudW1lcm8gZGkgcmlnaGUgbmVsbGUgaW50ZXN0YXppb25pIGRlaSBmcmFtbWVudGkiCisKKyM6IGFwcGx5LmM6NTAzMCBidWlsdGluL2FtLmM6MjE5NAorbXNnaWQgInJvb3QiCittc2dzdHIgInJhZGljZSIKKworIzogYXBwbHkuYzo1MDMxCittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAiYW50ZXBvbmkgPHJhZGljZT4gYSB0dXR0aSBpIG5vbWkgZmlsZSIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzxvcHppb25pPl0gPGFsYmVybz4gWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG9zaXRvcnk+IFstLWV4ZWMgPGNvbWFuZG8+XSBbPG9wemlvbmk+XSA8YWxiZXJvPiAiCisiWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwb3NpdG9yeT4gWy0tZXhlYyA8Y29tYW5kbz5dIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjM3MiBidWlsdGluL2FkZC5jOjE4MCBidWlsdGluL2FkZC5jOjU1NSBidWlsdGluL3JtLmM6Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgImxvIHNwZWNpZmljYXRvcmUgcGVyY29yc28gJyVzJyBub24gY29ycmlzcG9uZGUgYWQgYWxjdW4gZmlsZSIKKworIzogYXJjaGl2ZS5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZjogJS4qcyIKK21zZ3N0ciAicmlmZXJpbWVudG8gbm9uIGVzaXN0ZW50ZTogJS4qcyIKKworIzogYXJjaGl2ZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJXMiCittc2dzdHIgIiVzIG5vbiDDqCB1biBub21lIG9nZ2V0dG8gdmFsaWRvIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIG9nZ2V0dG8gYWxiZXJvIHZhbGlkbyIKKworIzogYXJjaGl2ZS5jOjQyNgorbXNnaWQgImN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgdW50cmFja2VkIgorbXNnc3RyICJsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGNvcnJlbnRlIG5vbiDDqCB0cmFjY2lhdGEiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJmbXQiCittc2dzdHIgImZtdCIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICJmb3JtYXRvIGFyY2hpdmlvIgorCisjOiBhcmNoaXZlLmM6NDU4IGJ1aWx0aW4vbG9nLmM6MTY1MworbXNnaWQgInByZWZpeCIKK21zZ3N0ciAicHJlZmlzc28iCisKKyM6IGFyY2hpdmUuYzo0NTkKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICJhbnRlcG9uaSA8cHJlZmlzc28+IGEgb2duaSBub21lIHBlcmNvcnNvIG5lbGwnYXJjaGl2aW8iCisKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMjkgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg5OQorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCiBtc2dzdHIgImZpbGUiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Ci1tc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCi1tc2dzdHIgIkF0dGl2YXppb25lIGluaXppYWxlIG5vbiByaXVzY2l0YS4iCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJzY3JpdmkgbCdhcmNoaXZpbyBpbiBxdWVzdG8gZmlsZSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDExCi1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAiQXByaSIKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJsZWdnaSBpbCBmaWxlIC5naXRhdHRyaWJ1dGVzIG5lbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQotbXNnaWQgIlJlcG9zaXRvcnk6IgotbXNnc3RyICJBcmNoaXZpbzoiCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAiZWxlbmNhIGkgZmlsZSBhcmNoaXZpYXRpIHN1bGxvIHN0YW5kYXJkIGVycm9yIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgYWNjZWRlcmUgYWxsJ2FyY2hpdmlvICVzOiIKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJzYWx2YSBzb2xhbWVudGUiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MwotbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCi1tc2dzdHIgIlF1ZXN0YSByZXZpc2lvbmUgYXR0aXZhIHN0YWNjYXRhIgorIzogYXJjaGl2ZS5jOjQ2NgorbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAiY29tcHJpbWkgcGnDuSB2ZWxvY2VtZW50ZSIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjYwCi1tc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCi1tc2dzdHIgIkVzcHJlc3Npb25lIGRpIHJldmlzaW9uZToiCisjOiBhcmNoaXZlLmM6NDc0Cittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICJjb21wcmltaSBtZWdsaW8iCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAotbXNnaWQgIkxvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiUmFtbyBsb2NhbGUiCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICJlbGVuY2EgaSBmb3JtYXRpIGFyY2hpdmlvIHN1cHBvcnRhdGkiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQotbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiRHVwbGljYXRvIGxvY2FsZSBkaSByYW1vIHJlbW90byIKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NAorbXNnaWQgInJlcG8iCittc2dzdHIgInJlcG9zaXRvcnkiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTM4Ci1tc2dpZCAiVGFnIgotbXNnc3RyICJFdGljaGV0dGEiCisjOiBhcmNoaXZlLmM6NDgwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgInJlY3VwZXJhIGwnYXJjaGl2aW8gZGFsIHJlcG9zaXRvcnkgcmVtb3RvIDxyZXBvc2l0b3J5PiIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjMxNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgotbXNnc3RyICJSZXZpc2lvbmUgbm9uIHZhbGlkYTogJXMiCisjOiBhcmNoaXZlLmM6NDgxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJjb21hbmRvIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Ci1tc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgotbXNnc3RyICJOZXNzdW5hIHJldmlzaW9uZSBzZWxlemlvbmF0YS4iCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICJwZXJjb3JzbyBhbCBjb21hbmRvIHJlbW90byBnaXQtdXBsb2FkLWFyY2hpdmUiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKLW1zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKLW1zZ3N0ciAiTCdlc3ByZXNzaW9uZSBkaSByZXZpc2lvbmUgw6ggdnVvdGEuIgorIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICJPcHppb25lIC0tcmVtb3RlIGluYXR0ZXNhIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCi1tc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAiQWdnaW9ybmF0byIKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiTCdvcHppb25lIC0tZXhlYyBwdcOyIGVzc2VyZSB1c2F0YSBzb2xvIGNvbiAtLXJlbW90ZSIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjU1OQotbXNnaWQgIlVSTCIKLW1zZ3N0ciAiVVJMIgorIzogYXJjaGl2ZS5jOjQ5MworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0IgorbXNnc3RyICJPcHppb25lIC0tb3V0cHV0IGluYXR0ZXNhIgogCi0jOiBsaWIvY29tbWl0LnRjbDo5CisjOiBhcmNoaXZlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiRm9ybWF0byBhcmNoaXZpbyAnJXMnIHNjb25vc2NpdXRvIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIkFyZ29tZW50byBub24gc3VwcG9ydGF0byBwZXIgaWwgZm9ybWF0byAnJXMnOiAtJWQiCisKKyM6IGFyY2hpdmUtdGFyLmM6MTI1IGFyY2hpdmUtemlwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbG8gc3RyZWFtaW5nIGRlbCBibG9iICVzIgorCisjOiBhcmNoaXZlLXRhci5jOjI2NiBhcmNoaXZlLXppcC5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBmaWxlIG1vZGU6IDAlbyAoU0hBMTogJXMpIgorbXNnc3RyICJtb2RvIGZpbGUgbm9uIHN1cHBvcnRhdG86IDAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAlcyIKKworIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhdnZpYXJlIGlsIGZpbHRybyAnJXMnIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaWRpcmV6aW9uYXJlIGlsIGRlc2NyaXR0b3JlIgorCisjOiBhcmNoaXZlLXRhci5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAiaWwgZmlsdHJvICclcycgaGEgc2VnbmFsYXRvIHVuIGVycm9yZSIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICJpbCBwZXJjb3JzbyBub24gw6ggY29kaWZpY2F0byB2YWxpZGFtZW50ZSBpbiBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICJwZXJjb3JzbyB0cm9wcG8gbHVuZ28gKCVkIGNhcmF0dGVyaSwgU0hBMTogJXMpOiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzo0NzkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJlcnJvcmUgZGVmbGF0ZSAoJWQpIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAidGltZXN0YW1wIHRyb3BwbyBncmFuZGUgcGVyIHF1ZXN0byBzaXN0ZW1hOiAlPFBSSXVNQVg+IgorCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiUuKnMgbm9uIMOoIHVuIG5vbWUgYXR0cmlidXRvIHZhbGlkbyIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIiVzIG5vbiBjb25zZW50aXRvOiAlczolZCIKKworIzogYXR0ci5jOjQwOQogbXNnaWQgIiIKLSJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgotIlxuIgotIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCi0idG8gYW1lbmQuXG4iCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCiBtc2dzdHIgIiIKLSJOb24gYyfDqCBuaWVudGUgZGEgY29ycmVnZ2VyZS5cbiIKLSJcbiIKLSJTdGFpIHBlciBjcmVhcmUgbGEgcmV2aXNpb25lIGluaXppYWxlLiBOb24gZXNpc3RlIHVuYSByZXZpc2lvbmUgcHJlY2VkZW50ZSAiCi0iZGEgY29ycmVnZ2VyZS5cbiIKKyJJIHBhdHRlcm4gbmVnYXRpdmkgc29ubyBpZ25vcmF0aSBuZWdsaSBhdHRyaWJ1dGkgZ2l0XG4iCisiVXNhICdcXCEnIHBlciBzcGVjaWZpY2FyZSBsZXR0ZXJhbG1lbnRlIHVuIHB1bnRvIGVzY2xhbWF0aXZvIGluaXppYWxlLiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTgKKyM6IGJpc2VjdC5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIgorbXNnc3RyICJDb250ZW51dG8gbWFsIHJhY2NoaXVzbyBmcmEgdmlyZ29sZXR0ZSBuZWwgZmlsZSAnJXMnOiAlcyIKKworIzogYmlzZWN0LmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGNhbm5vdCBiaXNlY3QgbW9yZSFcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4ndWx0ZXJpb3JlIGJpc2V6aW9uZSFcbiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICIlcyBub24gw6ggdW4gbm9tZSBjb21taXQgdmFsaWRvIgorCisjOiBiaXNlY3QuYzo3NTgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgotIlxuIgotIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCi0iY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKLSJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKIG1zZ3N0ciAiIgotIk5vbiDDqCBwb3NzaWJpbGUgZWZmZXR0dWFyZSB1bmEgY29ycmV6aW9uZSBkdXJhbnRlIHVuYSBmdXNpb25lLlxuIgotIlxuIgotIkluIHF1ZXN0byBtb21lbnRvIHNpIHN0YSBlZmZldHR1YW5kbyB1bmEgZnVzaW9uZSBjaGUgbm9uIMOoIHN0YXRhIGRlbCB0dXR0byAiCi0iY29tcGxldGF0YS4gTm9uIHB1b2kgY29ycmVnZ2VyZSBsYSByZXZpc2lvbmUgcHJlY2VkZW50ZSBhIG1lbm8gY2hlIHByaW1hIHR1ICIKLSJub24gaW50ZXJyb21wYSBsJ29wZXJhemlvbmUgZGkgZnVzaW9uZSBpbiBjb3Jzby5cbiIKKyJMYSBiYXNlIGRlbCBtZXJnZSAlcyBub24gZnVuemlvbmEuXG4iCisiQ2nDsiBzaWduaWZpY2EgY2hlIGlsIGJ1ZyDDqCBzdGF0byBjb3JyZXR0byBmcmEgJXMgZSBbJXNdLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDo0OAotbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKLW1zZ3N0ciAiRXJyb3JlIGR1cmFudGUgaWwgY2FyaWNhbWVudG8gZGVpIGRhdGkgZGVsbGEgcmV2aXNpb25lIGRhIGNvcnJlZ2dlcmU6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo3NQotbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCi1tc2dzdHIgIkltcG9zc2liaWxlIG90dGVuZXJlIGxhIHR1YSBpZGVudGl0w6A6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo4MAotbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCi1tc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQgbm9uIHZhbGlkYToiCi0KLSM6IGxpYi9jb21taXQudGNsOjEyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgotbXNnc3RyICJhdHRlbnppb25lOiBUY2wgbm9uIHN1cHBvcnRhIGxhIGNvZGlmaWNhICclcycuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoxNDkKKyM6IGJpc2VjdC5jOjc2MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKIG1zZ3N0ciAiIgotIkwndWx0aW1vIHN0YXRvIGFuYWxpenphdG8gbm9uIGNvcnJpc3BvbmRlIGFsbG8gc3RhdG8gZGVsbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJVbiBhbHRybyBwcm9ncmFtbWEgR2l0IGhhIG1vZGlmaWNhdG8gcXVlc3RvIGFyY2hpdmlvIGRhbGwndWx0aW1hIGFuYWxpc2kuICIKLSJCaXNvZ25hIGVmZmV0dHVhcmUgdW5hIG51b3ZhIGFuYWxpc2kgcHJpbWEgZGkgcG90ZXIgY3JlYXJlIHVuYSBudW92YSAiCi0icmV2aXNpb25lLlxuIgotIlxuIgotIkxhIG51b3ZhIGFuYWxpc2kgY29taW5jZXLDoCBvcmEuXG4iCisiTGEgYmFzZSBkZWwgbWVyZ2UgJXMgw6ggbnVvdmEuXG4iCisiTGEgcHJvcHJpZXTDoCDDqCBzdGF0YSBtb2RpZmljYXRhIGZyYSAlcyBlIFslc10uXG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjE3MgotIywgdGNsLWZvcm1hdAorIzogYmlzZWN0LmM6NzY4CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgotImJlZm9yZSBjb21taXR0aW5nLlxuIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCiBtc2dzdHIgIiIKLSJOb24gw6ggcG9zc2liaWxlIGNyZWFyZSB1bmEgcmV2aXNpb25lIGNvbiBmaWxlIG5vbiBzb3R0b3Bvc3RpIGEgZnVzaW9uZS5cbiIKLSJcbiIKLSJJbCBmaWxlICVzIHByZXNlbnRhIGRlaSBjb25mbGl0dGkuIERldmkgcmlzb2x2ZXJsaSBlIHByZXBhcmFyZSBpbCBmaWxlIHBlciAiCi0iY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUgcHJpbWEgZGkgZWZmZXR0dWFyZSBxdWVzdGEgYXppb25lLlxuIgorIkxhIGJhc2UgZGVsIG1lcmdlICVzIMOoICVzLlxuIgorIkNpw7Igc2lnbmlmaWNhIGNoZSBpbCBwcmltbyBjb21taXQgJyVzJyDDqCBmcmEgJXMgZSBbJXNdLlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODAKLSMsIHRjbC1mb3JtYXQKKyM6IGJpc2VjdC5jOjc3NgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgotIlxuIgotIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCiBtc2dzdHIgIiIKLSJTdGF0byBkaSBmaWxlICVzIHNjb25vc2NpdXRvLlxuIgotIlxuIgotIlF1ZXN0byBwcm9ncmFtbWEgbm9uIHB1w7IgY3JlYXJlIHVuYSByZXZpc2lvbmUgY29udGVuZW50ZSBpbCBmaWxlICVzLlxuIgorIkFsY3VuZSByZXZpc2lvbmkgJXMgbm9uIHNvbm8gYW50ZW5hdGUgZGVsbGEgcmV2aXNpb25lICVzLlxuIgorImdpdCBiaXNlY3Qgbm9uIHB1w7IgZnVuemlvbmFyZSBjb3JyZXR0YW1lbnRlIGluIHF1ZXN0byBjYXNvLlxuIgorIkZvcnNlIGhhaSBjb25mdXNvIGxlIHJldmlzaW9uaSAlcyBjb24gcXVlbGxlICVzP1xuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODgKKyM6IGJpc2VjdC5jOjc4OQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCiBtc2dzdHIgIiIKLSJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuXG4iCi0iXG4iCi0iRGV2aSBwcmVwYXJhcmUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgYWxtZW5vIDEgZmlsZSBwcmltYSBkaSBlZmZldHR1YXJlICIKLSJxdWVzdGEgb3BlcmF6aW9uZS5cbiIKKyJsYSBiYXNlIGRlbCBtZXJnZSBmcmEgJXMgZSBbJXNdIGRldidlc3NlcmUgc2FsdGF0YS5cbiIKKyJOb24gw6ggcG9zc2liaWxlIGVzc2VyZSBzaWN1cmkgY2hlIGlsIHByaW1vIGNvbW1pdCAlcyBzaWEgZnJhICVzIGUgJXMuXG4iCisiQ29udGludW8gY29tdW5xdWUuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMDMKKyM6IGJpc2VjdC5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICJCaXNlemlvbmU6IGRldidlc3NlcmUgdGVzdGF0YSB1bmEgYmFzZSBkZWwgbWVyZ2VcbiIKKworIzogYmlzZWN0LmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIgorbXNnc3RyICLDqCByaWNoaWVzdGEgdW5hIHJldmlzaW9uZSAlcyIKKworIzogYmlzZWN0LmM6ODg0IGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBpbCBmaWxlICclcyciCisKKyM6IGJpc2VjdC5jOjkyOCBidWlsdGluL21lcmdlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlICclcyciCisKKyM6IGJpc2VjdC5jOjk1OAorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICJsZXR0dXJhIHJpZmVyaW1lbnRpIGRlbGxhIGJpc2V6aW9uZSBub24gcml1c2NpdGEiCisKKyM6IGJpc2VjdC5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgZXJhIHNpYSAlcyBzaWEgJXNcbiIKKworIzogYmlzZWN0LmM6OTg1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0iXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKLSJcbiIKLSItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCi0iLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKLSItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKIG1zZ3N0ciAiIgotIkJpc29nbmEgZm9ybmlyZSB1biBtZXNzYWdnaW8gZGkgcmV2aXNpb25lLlxuIgotIlxuIgotIlVuIGJ1b24gbWVzc2FnZ2lvIGRpIHJldmlzaW9uZSBoYSBpbCBzZWd1ZW50ZSBmb3JtYXRvOlxuIgotIlxuIgotIi0gUHJpbWEgbGluZWE6IGRlc2NyaXZpIGluIHVuYSBmcmFzZSBjacOyIGNoZSBoYWkgZmF0dG8uXG4iCi0iLSBTZWNvbmRhIGxpbmVhOiB2dW90YS5cbiIKLSItIFRlcnphIGxpbmVhOiBzcGllZ2EgYSBjb3NhIHNlcnZlIGxhIHR1YSBtb2RpZmljYS5cbiIKKyJOZXNzdW4gY29tbWl0IHRlc3RhYmlsZSB0cm92YXRvLlxuIgorIkZvcnNlIGhhaSBpbml6aWF0byBpbCBwcm9jZWRpbWVudG8gc3BlY2lmaWNhbmRvIHBhcmFtZXRyaSBwZXJjb3JzbyBlcnJhdGk/XG4iCiAKLSM6IGxpYi9jb21taXQudGNsOjIzNAotbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgotbXNnc3RyICJBdnZpbyBwcmUtY29tbWl0IGhvb2suLi4iCisjOiBiaXNlY3QuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIihjaXJjYSAlZCBwYXNzbykiCittc2dzdHJbMV0gIihjaXJjYSAlZCBwYXNzaSkiCiAKLSM6IGxpYi9jb21taXQudGNsOjI0OQotbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgotbXNnc3RyICJSZXZpc2lvbmUgcmlmaXV0YXRhIGRhbCBwcmUtY29tbWl0IGhvb2suIgorIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjLgorIzogYmlzZWN0LmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dpZF9wbHVyYWwgIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dzdHJbMF0gIiIKKyJCaXNlemlvbmUgaW4gY29yc286ICVkIHJldmlzaW9uZSByaW1hbmVudGUgZGEgdGVzdGFyZSBkb3BvIHF1ZXN0YSAlc1xuIgorbXNnc3RyWzFdICIiCisiQmlzZXppb25lIGluIGNvcnNvOiAlZCByZXZpc2lvbmkgcmltYW5lbnRpIGRhIHRlc3RhcmUgZG9wbyBxdWVzdGEgJXNcbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjcyCi1tc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCi1tc2dzdHIgIkF2dmlvIGNvbW1pdC1tc2cgaG9vay4uLiIKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgIi0tY29udGVudHMgZSAtLXJldmVyc2Ugbm9uIHNvbm8gY29tcGF0aWJpbGkuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyODcKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiUmV2aXNpb25lIHJpZml1dGF0YSBkYWwgY29tbWl0LW1zZyBob29rLiIKKyM6IGJsYW1lLmM6MjcxNAorbXNnaWQgImNhbm5vdCB1c2UgLS1jb250ZW50cyB3aXRoIGZpbmFsIGNvbW1pdCBvYmplY3QgbmFtZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdXNhcmUgLS1jb250ZW50cyBjb24gaWwgbm9tZSBvZ2dldHRvIGRlbCBjb21taXQgZmluYWxlIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMDAKLW1zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCi1tc2dzdHIgIkFyY2hpdmlhemlvbmUgbW9kaWZpY2hlLi4uIgorIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICIiCisibGUgb3B6aW9uaSAtLXJldmVyc2UgZSAtLWZpcnN0LXBhcmVudCBzZSB1c2F0ZSBpbnNpZW1lIHJpY2hpZWRvbm8gY2hlIHNpYSAiCisic3BlY2lmaWNhdG8gbCd1bHRpbW8gY29tbWl0IgogCi0jOiBsaWIvY29tbWl0LnRjbDozMTYKLW1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCi1tc2dzdHIgIndyaXRlLXRyZWUgbm9uIHJpdXNjaXRvOiIKKyM6IGJsYW1lLmM6Mjc0NCBidW5kbGUuYzoxNjcgcmVmLWZpbHRlci5jOjIyMDMgcmVtb3RlLmM6MTk0MSBzZXF1ZW5jZXIuYzoyMDkzCisjOiBzZXF1ZW5jZXIuYzo0NDYwIGJ1aWx0aW4vY29tbWl0LmM6MTA0MCBidWlsdGluL2xvZy5jOjM4OCBidWlsdGluL2xvZy5jOjk5MQorIzogYnVpbHRpbi9sb2cuYzoxNTIwIGJ1aWx0aW4vbG9nLmM6MTkyNSBidWlsdGluL2xvZy5jOjIyMTUgYnVpbHRpbi9tZXJnZS5jOjQxMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE5MgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICJpbXBvc3RhemlvbmUgcGVyY29yc28gcmV2aXNpb25pIG5vbiByaXVzY2l0YSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzE3IGxpYi9jb21taXQudGNsOjM2MSBsaWIvY29tbWl0LnRjbDozODIKLW1zZ2lkICJDb21taXQgZmFpbGVkLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUuIgotCi0jOiBsaWIvY29tbWl0LnRjbDozMzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgotbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgc2VtYnJhIGVzc2VyZSBkYW5uZWdnaWF0YSIKLQotIzogbGliL2NvbW1pdC50Y2w6MzM5CisjOiBibGFtZS5jOjI3NjIKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgogbXNnc3RyICIiCi0iTmVzc3VuYSBtb2RpZmljYSBwZXIgbGEgbnVvdmEgcmV2aXNpb25lLlxuIgotIlxuIgotIlF1ZXN0YSByZXZpc2lvbmUgbm9uIG1vZGlmaWNhIGFsY3VuIGZpbGUgZSBub24gZWZmZXR0dWEgYWxjdW5hIGZ1c2lvbmUuXG4iCi0iXG4iCi0iU2kgcHJvY2VkZXLDoCBzdWJpdG8gYWQgdW5hIG51b3ZhIGFuYWxpc2kuXG4iCisibGUgb3B6aW9uaSAtLXJldmVyc2UgZSAtLWZpcnN0LXBhcmVudCBzZSB1c2F0ZSBpbnNpZW1lIHJpY2hpZWRvbm8gY2hlIHNpYSAiCisic3BlY2lmaWNhdG8gdW4gaW50ZXJ2YWxsbyBuZWxsYSBjYXRlbmEgZGVsIHByaW1vIGNvbW1pdCBnZW5pdG9yZSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzQ2Ci1tc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgotbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuIgorIzogYmxhbWUuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAiaWwgcGVyY29yc28gJXMgaW4gJXMgbm9uIGVzaXN0ZSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzYwCi1tc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKLW1zZ3N0ciAiY29tbWl0LXRyZWUgbm9uIHJpdXNjaXRvOiIKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGJsb2IgJXMgcGVyIGlsIHBlcmNvcnNvICVzIgogCi0jOiBsaWIvY29tbWl0LnRjbDozODEKLW1zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCi1tc2dzdHIgInVwZGF0ZS1yZWYgbm9uIHJpdXNjaXRvOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NDY5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgotbXNnc3RyICJDcmVhdGEgcmV2aXNpb25lICVzOiAlcyIKLQotIzogbGliL2NvbnNvbGUudGNsOjU5Ci1tc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiRWxhYm9yYXppb25lIGluIGNvcnNvLi4uIGF0dGVuZGVyZS4uLiIKLQotIzogbGliL2NvbnNvbGUudGNsOjE4NgotbXNnaWQgIlN1Y2Nlc3MiCi1tc2dzdHIgIlN1Y2Nlc3NvIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MjAwCi1tc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgotbXNnc3RyICJFcnJvcmU6IGNvbWFuZG8gbm9uIHJpdXNjaXRvIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQzCi1tc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIk51bWVybyBkaSBvZ2dldHRpIHNsZWdhdGkiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAiU3BhemlvIHN1IGRpc2NvIHV0aWxpenphdG8gZGEgb2dnZXR0aSBzbGVnYXRpIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ1Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJOdW1lcm8gZGkgb2dnZXR0aSBpbXBhY2NoZXR0YXRpIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgotbXNnc3RyICJOdW1lcm8gZGkgcGFjY2hldHRpIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ3Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJTcGF6aW8gc3UgZGlzY28gdXRpbGl6emF0byBkYSBvZ2dldHRpIGltcGFjY2hldHRhdGkiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKLW1zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgotbXNnc3RyICJPZ2dldHRpIGltcGFjY2hldHRhdGkgY2hlIGF0dGVuZG9ubyBsYSBwb3RhdHVyYSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OQotbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCi1tc2dzdHIgIkZpbGUgaW51dGlsaSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo3MgotbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCi1tc2dzdHIgIkNvbXByZXNzaW9uZSBkZWxsJ2FyY2hpdmlvIGluIGNvcnNvIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjgzCi1tc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCi1tc2dzdHIgIlZlcmlmaWNhIGRlbGwnYXJjaGl2aW8gY29uIGZzY2stb2JqZWN0cyBpbiBjb3JzbyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgotIlxuIgotIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgotInRoZSBkYXRhYmFzZS5cbiIKLSJcbiIKLSJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKLW1zZ3N0ciAiIgotIlF1ZXN0byBhcmNoaXZpbyBhdHR1YWxtZW50ZSBoYSBjaXJjYSAlaSBvZ2dldHRpIHNsZWdhdGkuXG4iCi0iXG4iCi0iUGVyIG1hbnRlbmVyZSBidW9uZSBwcmVzdGF6aW9uaSBzaSByYWNjb21hbmRhIGRpIGNvbXByaW1lcmUgbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJDb21wcmltZXJlIGwnYXJjaGl2aW8gb3JhPyIKLQotIzogbGliL2RhdGUudGNsOjI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKLW1zZ3N0ciAiR2l0IGhhIHJlc3RpdHVpdG8gdW5hIGRhdGEgbm9uIHZhbGlkYTogJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDo2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKLSJcbiIKLSJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCi0idGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKLSJ0aGUgc2FtZSBzdGF0ZS4iCi1tc2dzdHIgIiIKLSJOb24gc29ubyBzdGF0ZSB0cm92YXRlIGRpZmZlcmVuemUuXG4iCi0iXG4iCi0iJXMgbm9uIGhhIG1vZGlmaWNoZS5cbiIKLSJcbiIKLSJMYSBkYXRhIGRpIG1vZGlmaWNhIGRpIHF1ZXN0byBmaWxlIMOoIHN0YXRhIGNhbWJpYXRhIGRhIHVuJ2FsdHJhICIKLSJhcHBsaWNhemlvbmUsIG1hIGlsIGNvbnRlbnV0byBkZWwgZmlsZSDDqCByaW1hc3RvIGludmFyaWF0by5cbiIKLSJcbiIKLSJTaSBwcm9jZWRlcsOgIGF1dG9tYXRpY2FtZW50ZSBhZCB1bmEgbnVvdmEgYW5hbGlzaSBwZXIgdHJvdmFyZSBhbHRyaSBmaWxlIGNoZSAiCi0icG90cmViYmVybyBhdmVyZSBsbyBzdGVzc28gc3RhdG8uIgotCi0jOiBsaWIvZGlmZi50Y2w6MTA0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgotbXNnc3RyICJDYXJpY2FtZW50byBkZWxsZSBkaWZmZXJlbnplIGRpICVzLi4uIgotCi0jOiBsaWIvZGlmZi50Y2w6MTI1Ci1tc2dpZCAiIgotIkxPQ0FMOiBkZWxldGVkXG4iCi0iUkVNT1RFOlxuIgotbXNnc3RyICIiCi0iTE9DQUxFOiBjYW5jZWxsYXRvXG4iCi0iUkVNT1RPOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTMwCi1tc2dpZCAiIgotIlJFTU9URTogZGVsZXRlZFxuIgotIkxPQ0FMOlxuIgotbXNnc3RyICIiCi0iUkVNT1RPOiBjYW5jZWxsYXRvXG4iCi0iTE9DQUxFOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTM3Ci1tc2dpZCAiTE9DQUw6XG4iCi1tc2dzdHIgIkxPQ0FMRTpcbiIKLQotIzogbGliL2RpZmYudGNsOjE0MAotbXNnaWQgIlJFTU9URTpcbiIKLW1zZ3N0ciAiUkVNT1RPOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MjAyIGxpYi9kaWZmLnRjbDozMTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgdmlzdWFsaXp6YXJlICVzIgotCi0jOiBsaWIvZGlmZi50Y2w6MjAzCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKLW1zZ3N0ciAiRXJyb3JlIG5lbCBjYXJpY2FtZW50byBkZWwgZmlsZToiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMTAKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCi1tc2dzdHIgIkFyY2hpdmlvIEdpdCAoc290dG9wcm9nZXR0bykiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMjIKLW1zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCi1tc2dzdHIgIiogRmlsZSBiaW5hcmlvIChpbCBjb250ZW51dG8gbm9uIHNhcsOgIG1vc3RyYXRvKS4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMjcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKLSIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKLW1zZ3N0ciAiIgotIiogSWwgZmlsZSBub24gdHJhY2NpYXRvIMOoIGRpICVkIGJ5dGUuXG4iCi0iKiBTYXJhbm5vIHZpc3VhbGl6emF0aSBzb2xvIGkgcHJpbWkgJWQgYnl0ZS5cbiIKLQotIzogbGliL2RpZmYudGNsOjIzMwotIywgdGNsLWZvcm1hdAorIzogYnJhbmNoLmM6NTMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogbXNnc3RyICIiCiAiXG4iCi0iKiAlcyBub24gdmlzdWFsaXp6YSBjb21wbGV0YW1lbnRlIHF1ZXN0byBmaWxlIG5vbiB0cmFjY2lhdG8uXG4iCi0iKiBQZXIgdmlzdWFsaXp6YXJlIGlsIGZpbGUgY29tcGxldG8sIHVzYXJlIHVuIHByb2dyYW1tYSBlc3Rlcm5vLlxuIgorIkRvcG8gYXZlciBjb3JyZXR0byBsJ2Vycm9yZSDDqCBwb3NzaWJpbGUgcHJvdmFyZSBhIGNvcnJlZ2dlcmVcbiIKKyJsZSBpbmZvcm1hemlvbmkgZGkgdHJhY2NpYW1lbnRvIHJlbW90byBlc2VndWVuZG9cbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogCi0jOiBsaWIvZGlmZi50Y2w6NDgyCi1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsYSBzZXppb25lIHNjZWx0YSBkYWxsYSBudW92YSByZXZpc2lvbmUuIgorIzogYnJhbmNoLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJOb24gaW1wb3N0byBpbCBicmFuY2ggJXMgY29tZSB1cHN0cmVhbSBkaSBzw6kgc3Rlc3NvLiIKIAotIzogbGliL2RpZmYudGNsOjQ4OQotbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgcHJlcGFyYXJlIGxhIHNlemlvbmUgc2NlbHRhIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lLiIKKyM6IGJyYW5jaC5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkJyYW5jaCAnJXMnIGltcG9zdGF0byBwZXIgdHJhY2NpYXJlIGlsIGJyYW5jaCByZW1vdG8gJyVzJyBkYSAnJXMnIHRyYW1pdGUgIgorInJlYmFzZS4iCiAKLSM6IGxpYi9kaWZmLnRjbDo1NjgKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxhIHJpZ2Egc2NlbHRhIGRhbGxhIG51b3ZhIHJldmlzaW9uZS4iCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJy4iCittc2dzdHIgIkJyYW5jaCAnJXMnIGltcG9zdGF0byBwZXIgdHJhY2NpYXJlIGlsIGJyYW5jaCByZW1vdG8gJyVzJyBkYSAnJXMnLiIKIAotIzogbGliL2RpZmYudGNsOjU3NgotbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgcHJlcGFyYXJlIGxhIHJpZ2Egc2NlbHRhIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lLiIKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJCcmFuY2ggJyVzJyBpbXBvc3RhdG8gcGVyIHRyYWNjaWFyZSBpbCBicmFuY2ggbG9jYWxlICclcycgdHJhbWl0ZSByZWJhc2UuIgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgIlByZWRlZmluaXRvIgorIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiQnJhbmNoICclcycgaW1wb3N0YXRvIHBlciB0cmFjY2lhcmUgaWwgYnJhbmNoIGxvY2FsZSAnJXMnLiIKIAotIzogbGliL2VuY29kaW5nLnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTeXN0ZW0gKCVzKSIKLW1zZ3N0ciAiQ29kaWZpY2EgZGkgc2lzdGVtYSAoJXMpIgorIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiQnJhbmNoICclcycgaW1wb3N0YXRvIHBlciB0cmFjY2lhcmUgaWwgcmlmZXJpbWVudG8gcmVtb3RvICclcycgdHJhbWl0ZSAiCisicmViYXNlLiIKIAotIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnLiIKK21zZ3N0ciAiQnJhbmNoICclcycgaW1wb3N0YXRvIHBlciB0cmFjY2lhcmUgaWwgcmlmZXJpbWVudG8gcmVtb3RvICclcycuIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkJyYW5jaCAnJXMnIGltcG9zdGF0byBwZXIgdHJhY2NpYXJlIGlsIHJpZmVyaW1lbnRvIGxvY2FsZSAnJXMnIHRyYW1pdGUgIgorInJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBpbXBvc3RhdG8gcGVyIHRyYWNjaWFyZSBpbCByaWZlcmltZW50byBsb2NhbGUgJyVzJy4iCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgbGEgY29uZmlndXJhemlvbmUgcmVsYXRpdmEgYWwgYnJhbmNoIHVwc3RyZWFtIgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiIgorIklsIHRyYWNjaWFtZW50byBub24gYXZ2ZXJyw6A6IGluZm9ybWF6aW9uaSBhbWJpZ3VlIHBlciBpbCByaWZlcmltZW50byAlcyIKKworIzogYnJhbmNoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBub21lIGJyYW5jaCB2YWxpZG8uIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIlVuIGJyYW5jaCBkZW5vbWluYXRvICclcycgZXNpc3RlIGdpw6AuIgorCisjOiBicmFuY2guYzoyMTMKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIHVuIGFnZ2lvcm5hbWVudG8gZm9yemF0byBkZWwgYnJhbmNoIGNvcnJlbnRlLiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgaW1wb3N0YXJlIGxlIGluZm9ybWF6aW9uaSBkaSB0cmFjY2lhbWVudG86IGlsIHB1bnRvIGRpIHBhcnRlbnphICIKKyInJXMnIG5vbiDDqCB1biBicmFuY2guIgorCisjOiBicmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiaWwgYnJhbmNoIHVwc3RyZWFtIHJpY2hpZXN0byAnJXMnIG5vbiBlc2lzdGUiCisKKyM6IGJyYW5jaC5jOjIzNworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIlNlIHByZXZlZGkgZGkgYmFzYXJlIGlsIHR1byBsYXZvcm8gc3UgdW4gYnJhbmNoXG4iCisidXBzdHJlYW0gZ2nDoCBlc2lzdGVudGUsIHBvdHJlc3RpIGRvdmVyIGVzZWd1aXJlXG4iCisiXCJnaXQgZmV0Y2hcIiBwZXIgcmVjdXBlcmFybG8uXG4iCisiXG4iCisiU2UgcHJldmVkaSBkaSBlc2VndWlyZSBpbCBwdXNoIGRpIHVuIG51b3ZvIGJyYW5jaCBsb2NhbGVcbiIKKyJjaGUgdHJhY2NlcsOgIGxhIHN1YSBjb250cm9wYXJ0ZSByZW1vdGEsIHBvdHJlc3RpIHZvbGVyXG4iCisidXNhcmUgXCJnaXQgcHVzaCAtdVwiIHBlciBpbXBvc3RhcmUgbGEgY29uZmlndXJhemlvbmUgZGVsXG4iCisiYnJhbmNoIHVwc3RyZWFtIGR1cmFudGUgaWwgcHVzaC4iCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIk5vbWUgb2dnZXR0byBub24gdmFsaWRvOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIk5vbWUgb2dnZXR0byBhbWJpZ3VvOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIlB1bnRvIGRpIGJyYW5jaCBub24gdmFsaWRvOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICJJbCBjaGVja291dCBkaSAnJXMnIMOoIGdpw6Agc3RhdG8gZXNlZ3VpdG8gaW4gJyVzJyIKKworIzogYnJhbmNoLmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIgorbXNnc3RyICJMJ0hFQUQgZGVsbCdhbGJlcm8gZGkgbGF2b3JvICVzIG5vbiDDqCBhZ2dpb3JuYXRvIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIG5vbiBzZW1icmEgZXNzZXJlIHVuIGZpbGUgYnVuZGxlIHYyIgorCisjOiBidW5kbGUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgImludGVzdGF6aW9uZSBub24gcmljb25vc2NpdXRhOiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjkwIHJlcmVyZS5jOjQ4MCByZXJlcmUuYzo2OTAgc2VxdWVuY2VyLmM6MjM0NCBzZXF1ZW5jZXIuYzozMTA4CisjOiBidWlsdGluL2NvbW1pdC5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJyVzJyIKKworIzogYnVuZGxlLmM6MTQzCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIkRhbCByZXBvc2l0b3J5IG1hbmNhbm8gcXVlc3RpIGNvbW1pdCByaWNoaWVzdGkgY29tZSBwcmVyZXF1aXNpdG86IgorCisjOiBidW5kbGUuYzoxNDYKK21zZ2lkICJuZWVkIGEgcmVwb3NpdG9yeSB0byB2ZXJpZnkgYSBidW5kbGUiCittc2dzdHIgIsOoIG5lY2Vzc2FyaW8gdW4gcmVwb3NpdG9yeSBwZXIgdmVyaWZpY2FyZSB1biBidW5kbGUiCisKKyM6IGJ1bmRsZS5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiSWwgYnVuZGxlIGNvbnRpZW5lIHF1ZXN0byByaWZlcmltZW50bzoiCittc2dzdHJbMV0gIklsIGJ1bmRsZSBjb250aWVuZSBxdWVzdGkgJWQgcmlmZXJpbWVudGk6IgorCisjOiBidW5kbGUuYzoyMDQKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiTmVsIGJ1bmRsZSDDqCByZWdpc3RyYXRhIHVuYSBjcm9ub2xvZ2lhIGNvbXBsZXRhLiIKKworIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJJbCBidW5kbGUgcmljaGllZGUgcXVlc3RvIHJpZmVyaW1lbnRvOiIKK21zZ3N0clsxXSAiSWwgYnVuZGxlIHJpY2hpZWRlIHF1ZXN0aSAlZCByaWZlcmltZW50aToiCisKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgImltcG9zc2liaWxlIGR1cGxpY2FyZSBpbCBkZXNjcml0dG9yZSBidW5kbGUiCisKKyM6IGJ1bmRsZS5jOjI4MAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIkltcG9zc2liaWxlIGF2dmlhcmUgcGFjay1vYmplY3RzIgorCisjOiBidW5kbGUuYzoyOTEKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAiY29tYW5kbyBwYWNrLW9iamVjdHMgbW9ydG8iCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgImNvbWFuZG8gcmV2LWxpc3QgbW9ydG8iCisKKyM6IGJ1bmRsZS5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAiaWwgcmlmZXJpbWVudG8gJyVzJyDDqCBlc2NsdXNvIGRhbGxlIG9wemlvbmkgZGkgcmV2LWxpc3QiCisKKyM6IGJ1bmRsZS5jOjQ2MSBidWlsdGluL2xvZy5jOjIwMyBidWlsdGluL2xvZy5jOjE4MTQgYnVpbHRpbi9zaG9ydGxvZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmdvbWVudG8gbm9uIHJpY29ub3NjaXV0bzogJXMiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICJNaSByaWZpdXRvIGRpIGNyZWFyZSB1biBidW5kbGUgdnVvdG8uIgorCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgJyVzJyIKKworIzogYnVuZGxlLmM6NTA0Cittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICJjb21hbmRvIGluZGV4LXBhY2sgbW9ydG8iCisKKyM6IGNvbG9yLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgInZhbG9yZSBjb2xvcmUgbm9uIHZhbGlkbzogJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjgxMSBidWlsdGluL2FtLmM6MzU0IGJ1aWx0aW4vYW0uYzozOTgKKyM6IGJ1aWx0aW4vYW0uYzoxMzY2IGJ1aWx0aW4vYW0uYzoyMDA5IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgJXMiCisKKyM6IGNvbW1pdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIG5vbiDDqCB1biBjb21taXQhIgorCisjOiBjb21taXQuYzoxOTMKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKyJJbCBzdXBwb3J0byBwZXIgPEdJVF9ESVI+L2luZm8vZ3JhZnQgw6ggZGVwcmVjYXRvXG4iCisiZSBzYXLDoCByaW1vc3NvIGluIHVuYSB2ZXJzaW9uZSBmdXR1cmEgZGkgR2l0LlxuIgorIlxuIgorIlVzYSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJwZXIgY29udmVydGlyZSBpIGdyYWZ0IGluIHJlZiBzb3N0aXR1dGl2aS5cbiIKKyJcbiIKKyJQZXIgZGlzYWJpbGl0YXJlIHF1ZXN0byBtZXNzYWdnaW8sIGVzZWd1aVxuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgorCisjOiBjb21taXQuYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIklsIGNvbW1pdCAlcyBoYSB1bmEgZmlybWEgR1BHIG5vbiBhZmZpZGFiaWxlLCBwcmVzdW1pYmlsbWVudGUgZGkgJXMuIgorCisjOiBjb21taXQuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICJJbCBjb21taXQgJXMgaGEgdW5hIGZpcm1hIEdQRyBub24gdmFsaWRhIHByZXN1bWliaWxtZW50ZSBkaSAlcy4iCisKKyM6IGNvbW1pdC5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAiSWwgY29tbWl0ICVzIG5vbiBoYSB1bmEgZmlybWEgR1BHLiIKKworIzogY29tbWl0LmM6MTE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIklsIGNvbW1pdCAlcyBoYSB1bmEgZmlybWEgR1BHIHZhbGlkYSBkaSAlc1xuIgorCisjOiBjb21taXQuYzoxNDE1Cittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisiQXR0ZW56aW9uZTogaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBub24gw6ggY29uZm9ybWUgYWxsYSBjb2RpZmljYSBVVEYtOC5cbiIKKyJQb3RyZXN0aSB2b2xlcmxvIG1vZGlmaWNhcmUgZG9wbyBhdmVyIGNvcnJldHRvIGlsIG1lc3NhZ2dpbywgbyBpbXBvc3RhcmVcbiIKKyJsYSB2YXJpYWJpbGUgZGkgY29uZmlndXJhemlvbmUgaTE4bi5jb21taXRlbmNvZGluZyBhbGxhIGNvZGlmaWNhIHVzYXRhXG4iCisiZGFsIHR1byBwcm9nZXR0by5cbiIKKworIzogY29tbWl0LWdyYXBoLmM6MTMwCittc2dpZCAiY29tbWl0LWdyYXBoIGZpbGUgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJpbCBmaWxlIGdyYWZvIGRlaSBjb21taXQgJXMgw6ggdHJvcHBvIHBpY2NvbG8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggc2lnbmF0dXJlICVYIGRvZXMgbm90IG1hdGNoIHNpZ25hdHVyZSAlWCIKK21zZ3N0ciAibGEgZmlybWEgZGVsIGdyYWZvIGRlaSBjb21taXQgJVggbm9uIGNvcnJpc3BvbmRlIGFsbGEgZmlybWEgJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICJsYSB2ZXJzaW9uZSBkZWwgZ3JhZm8gZGVpIGNvbW1pdCAlWCBub24gY29ycmlzcG9uZGUgYWxsYSB2ZXJzaW9uZSAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXNoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAiIgorImxhIHZlcnNpb25lIGhhc2ggZGVsIGdyYWZvIGRlaSBjb21taXQgJVggbm9uIGNvcnJpc3BvbmRlIGFsbGEgdmVyc2lvbmUgJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIzMgorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBsb29rdXAgdGFibGUgZW50cnkgbWlzc2luZzsgZmlsZSBtYXkgYmUgaW5jb21wbGV0ZSIKK21zZ3N0ciAiIgorInZvY2UgYmxvY2NvIGdyYWZvIGRlaSBjb21taXQgbWFuY2FudGUgbmVsbGEgdGFiZWxsYSBkaSByaWNlcmNhOyBpbCBmaWxlICIKKyJwb3RyZWJiZSBub24gZXNzZXJlIGNvbXBsZXRvIgorCisjOiBjb21taXQtZ3JhcGguYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAib2Zmc2V0IGJsb2NjbyBncmFmbyBkZWkgY29tbWl0IGltcHJvcHJpbyAlMDh4JTA4eCIKKworIzogY29tbWl0LWdyYXBoLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgImwnSUQgZGVsIGJsb2NjbyBncmFmbyBkZWkgY29tbWl0ICUwOHggY29tcGFyZSBwacO5IHZvbHRlIgorCisjOiBjb21taXQtZ3JhcGguYzozNTAKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIG5vIGJhc2UgZ3JhcGhzIGNodW5rIgorbXNnc3RyICJpbCBncmFmbyBkZWkgY29tbWl0IG5vbiBoYSB1biBibG9jY28gZ3JhZmkgZGkgYmFzZSIKKworIzogY29tbWl0LWdyYXBoLmM6MzYwCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJsYSBjYXRlbmEgZGVsIGdyYWZvIGRlaSBjb21taXQgbm9uIGNvcnJpc3BvbmRlIgorCisjOiBjb21taXQtZ3JhcGguYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICJjYXRlbmEgZ3JhZm8gZGVpIGNvbW1pdCBub24gdmFsaWRhOiBsYSByaWdhICclcycgbm9uIMOoIHVuIGhhc2giCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQzMworbXNnaWQgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgdHV0dGkgaSBmaWxlIGdyYWZvIGRlaSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU2NCBjb21taXQtZ3JhcGguYzo2MjQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisicG9zaXppb25lIGNvbW1pdCBub24gdmFsaWRhLiBJbCBncmFmbyBkZWkgY29tbWl0IMOoIHByb2JhYmlsbWVudGUgY29ycm90dG8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgaWwgY29tbWl0ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzo4NTggYnVpbHRpbi9hbS5jOjEyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb21taXQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwMTcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgdHlwZSBvZiBvYmplY3QgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJlY3VwZXJhcmUgaWwgdGlwbyBkZWxsJ29nZ2V0dG8gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNDkKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJDYXJpY2FtZW50byBjb21taXQgbm90aSBuZWwgZ3JhZm8gZGVpIGNvbW1pdCBpbiBjb3JzbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA2NgorbXNnaWQgIkV4cGFuZGluZyByZWFjaGFibGUgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIkVzcGFuc2lvbmUgZGVpIGNvbW1pdCByYWdnaXVuZ2liaWxpIG5lbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDg1Cittc2dpZCAiQ2xlYXJpbmcgY29tbWl0IG1hcmtzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiUmltb3ppb25lIGRlaSBjb250cmFzc2VnbmkgY29tbWl0IG5lbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTA0Cittc2dpZCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiCittc2dzdHIgIkNhbGNvbG8gbnVtZXJpIGdlbmVyYXppb25lIGRlbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICJSaWNlcmNhIGRlaSBjb21taXQgcGVyIGlsIGdyYWZvIGRlaSBjb21taXQgaW4gJWQgcGFjayBpbiBjb3JzbyIKK21zZ3N0clsxXSAiUmljZXJjYSBkZWkgY29tbWl0IHBlciBpbCBncmFmbyBkZWkgY29tbWl0IGluICVkIHBhY2sgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGwnYWdnaXVudGEgZGVsIHBhY2sgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGwnYXBlcnR1cmEgZGVsbCdpbmRpY2UgcGVyICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gIiIKKyJSaWNlcmNhIGRlaSBjb21taXQgcGVyIGlsIGdyYWZvIGRlaSBjb21taXQgZGEgJWQgcmlmZXJpbWVudG8gaW4gY29yc28iCittc2dzdHJbMV0gIiIKKyJSaWNlcmNhIGRlaSBjb21taXQgcGVyIGlsIGdyYWZvIGRlaSBjb21taXQgZGEgJWQgcmlmZXJpbWVudGkgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAiSUQgb2dnZXR0byBjb21taXQgbm9uIHZhbGlkbzogJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNTUKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorIlJpY2VyY2EgZGVpIGNvbW1pdCBwZXIgaWwgZ3JhZm8gZGVpIGNvbW1pdCBmcmEgZ2xpIG9nZ2V0dGkgbmVpIHBhY2sgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNzAKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiQ29udGVnZ2lvIGNvbW1pdCBkaXN0aW50aSBuZWwgZ3JhZm8gZGVpIGNvbW1pdCBpbiBjb3JzbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTMwMAorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJSaWNlcmNhIGRlZ2xpIGFyY2hpIGFnZ2l1bnRpdmkgbmVsIGdyYWZvIGRlaSBjb21taXQgaW4gY29yc28iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDYKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51bWVybyBlc2F0dG8gZGVnbGkgSUQgZ3JhZm8gZGkgYmFzZSIKKworIzogY29tbWl0LWdyYXBoLmM6MTM3OSBtaWR4LmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGxlIHByaW1lIGRpcmVjdG9yeSBkaSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTM5MSBidWlsdGluL2luZGV4LXBhY2suYzozMDYgYnVpbHRpbi9yZXBhY2suYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgJyVzJyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAiU2NyaXR0dXJhIGluICVkIHBhc3NhZ2dpbyBkZWwgZ3JhZm8gZGVpIGNvbW1pdCBpbiBjb3JzbyIKK21zZ3N0clsxXSAiU2NyaXR0dXJhIGluICVkIHBhc3NhZ2dpIGRlbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDkyCittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlIGNhdGVuYSBncmFmbyBkZWkgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzoxNTA0Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSBiYXNlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaWRlbm9taW5hcmUgaWwgZmlsZSBkaSBiYXNlIGdyYWZvIGRlaSBjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MjQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlkZW5vbWluYXJlIGlsIGZpbGUgdGVtcG9yYW5lbyBncmFmbyBkZWkgY29tbWl0IgorCisjOiBjb21taXQtZ3JhcGguYzoxNjM1Cittc2dpZCAiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiCittc2dzdHIgIlNjYW5zaW9uZSBkZWkgY29tbWl0IHNvdHRvcG9zdGkgYSBtZXJnZSBpbiBjb3JzbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiCittc2dzdHIgIklEIGNvbW1pdCBkdXBsaWNhdG8gaW5hdHRlc286ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjcwCittc2dpZCAiTWVyZ2luZyBjb21taXQtZ3JhcGgiCittc2dzdHIgIk1lcmdlIGRlbCBncmFmbyBkZWkgY29tbWl0IGluIGNvcnNvIgorCisjOiBjb21taXQtZ3JhcGguYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICIiCisiaWwgZm9ybWF0byBkZWwgZ3JhZm8gZGVpIGNvbW1pdCBub24gcHXDsiBlc3NlcmUgdXNhdG8gcGVyIHNjcml2ZXJlICVkIGNvbW1pdCIKKworIzogY29tbWl0LWdyYXBoLmM6MTg3MQorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgInRyb3BwaSBjb21taXQgZGEgc2NyaXZlcmUgbmVsIGdyYWZvIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYxCittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisiaWwgZmlsZSBkZWwgZ3JhZm8gZGVpIGNvbW1pdCBoYSB1biBjaGVja3N1bSBub24gY29ycmV0dG8gZSBwcm9iYWJpbG1lbnRlIMOoICIKKyJjb3Jyb3R0byIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgImlsIGdyYWZvIGRlaSBjb21taXQgaGEgdW4gb3JkaW5lIE9JRCBub24gY29ycmV0dG86ICVzIHNlZ3VpdG8gZGEgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODEgY29tbWl0LWdyYXBoLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKK21zZ3N0ciAiIgorImlsIGdyYWZvIGRlaSBjb21taXQgaGEgdW4gdmFsb3JlIGZhbm91dCBub24gY29ycmV0dG86IGZhbm91dFslZF0gPSAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCAlcyBuZWwgZ3JhZm8gZGVpIGNvbW1pdCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAwNgorbXNnaWQgIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiVmVyaWZpY2EgZGVpIGNvbW1pdCBuZWwgZ3JhZm8gZGVpIGNvbW1pdCBpbiBjb3JzbyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCAlcyBkYWwgZGF0YWJhc2Ugb2dnZXR0aSBwZXIgaWwgZ3JhZm8gZGVpICIKKyJjb21taXQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiIgorImwnT0lEIGRlbGwnYWxiZXJvIHJhZGljZSBwZXIgaWwgY29tbWl0ICVzIG5lbCBncmFmbyBkZWkgY29tbWl0IMOoICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIGlzIHRvbyBsb25nIgorbXNnc3RyICJsJ2VsZW5jbyBnZW5pdG9yaSBuZWwgZ3JhZm8gZGVpIGNvbW1pdCBwZXIgaWwgY29tbWl0ICVzIMOoIHRyb3BwbyBsdW5nbyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiaWwgZ2VuaXRvcmUgbmVsIGdyYWZvIGRlaSBjb21taXQgcGVyICVzIMOoICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgIiIKKyJsJ2VsZW5jbyBnZW5pdG9yaSBuZWwgZ3JhZm8gZGVpIGNvbW1pdCBwZXIgaWwgY29tbWl0ICVzIMOoIGZpbml0byBwcmltYSBkZWwgIgorInByZXZpc3RvIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIGdlbmVyYXRpb24gbnVtYmVyIHplcm8gZm9yIGNvbW1pdCAlcywgYnV0IG5vbi16ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAiIgorImlsIGdyYWZvIGRlaSBjb21taXQgaGEgdW4gbnVtZXJvIGdlbmVyYXppb25lIHplcm8gcGVyIGlsIGNvbW1pdCAlcyBtYSBub24gIgorInBhcmkgYSB6ZXJvIHBlciBnbGkgYWx0cmkiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisiaWwgZ3JhZm8gZGVpIGNvbW1pdCBoYSB1biBudW1lcm8gZ2VuZXJhemlvbmUgbm9uIHBhcmkgYSB6ZXJvIHBlciBpbCBjb21taXQgIgorIiVzIG1hIHBhcmkgYSB6ZXJvIHBlciBnbGkgYWx0cmkiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAiaWwgbnVtZXJvIGdlbmVyYXppb25lIG5lbCBncmFmbyBkZWkgY29tbWl0IHBlciBpbCBjb21taXQgJXMgw6ggJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorbXNnc3RyICIiCisibGEgZGF0YSBwZXIgaWwgY29tbWl0ICVzIG5lbCBncmFmbyBkZWkgY29tbWl0IMOoICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW1vcmlhIGVzYXVyaXRhIgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorInByb2ZvbmRpdMOgIG1hc3NpbWEgZGkgaW5jbHVzaW9uZSAoJWQpIHN1cGVyYXRhIGR1cmFudGUgbCdpbmNsdXNpb25lIGRpXG4iCisiXHQlc1xuIgorImRhXG4iCisiXHQlc1xuIgorIkNpw7IgcHXDsiBlc3NlcmUgZG92dXRvIGEgZGVsbGUgaW5jbHVzaW9uaSBjaXJjb2xhcmkuIgorCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNwYW5kZXJlIGlsIHBlcmNvcnNvIGRpIGluY2x1c2lvbmUgJyVzJyIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJsZSBpbmNsdXNpb25pIGNvbmZpZ3VyYXppb25lIHJlbGF0aXZlIGRldm9ubyBwcm92ZW5pcmUgZGEgZmlsZSIKKworIzogY29uZmlnLmM6MTk3Cittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGUgY29uZGl0aW9uYWxzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICIiCisiaSBjb25kaXppb25hbGkgZGkgaW5jbHVzaW9uZSBjb25maWd1cmF6aW9uZSByZWxhdGl2aSBkZXZvbm8gcHJvdmVuaXJlIGRhIGZpbGUiCisKKyM6IGNvbmZpZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICJsYSBjaGlhdmUgbm9uIGNvbnRpZW5lIHVuYSBzZXppb25lOiAlcyIKKworIzogY29uZmlnLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJsYSBjaGlhdmUgbm9uIGNvbnRpZW5lIHVuIG5vbWUgdmFyaWFiaWxlOiAlcyIKKworIzogY29uZmlnLmM6NDA2IHNlcXVlbmNlci5jOjI1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJjaGlhdmUgbm9uIHZhbGlkYTogJXMiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICJjaGlhdmUgbm9uIHZhbGlkYSAobnVvdmEgcmlnYSk6ICVzIgorCisjOiBjb25maWcuYzo0NDggY29uZmlnLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIgorbXNnc3RyICJwYXJhbWV0cm8gY29uZmlndXJhemlvbmUgZml0dGl6aW86ICVzIgorCisjOiBjb25maWcuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgZm9ybWF0IGluICVzIgorbXNnc3RyICJmb3JtYXRvIGZpdHRpemlvIGluICVzIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgInJpZ2EgY29uZmlndXJhemlvbmUgJWQgZXJyYXRhIG5lbCBibG9iICVzIgorCisjOiBjb25maWcuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgInJpZ2EgY29uZmlndXJhemlvbmUgJWQgZXJyYXRhIG5lbCBmaWxlICVzIgorCisjOiBjb25maWcuYzo4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJyaWdhIGNvbmZpZ3VyYXppb25lICVkIGVycmF0YSBuZWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAicmlnYSBjb25maWd1cmF6aW9uZSAlZCBlcnJhdGEgbmVsIGJsb2Igc290dG9tb2R1bG8gJXMiCisKKyM6IGNvbmZpZy5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICJyaWdhIGNvbmZpZ3VyYXppb25lICVkIGVycmF0YSBuZWxsYSByaWdhIGRpIGNvbWFuZG8gJXMiCisKKyM6IGNvbmZpZy5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgInJpZ2EgY29uZmlndXJhemlvbmUgJWQgZXJyYXRhIGluICVzIgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJvdXQgb2YgcmFuZ2UiCittc2dzdHIgImZ1b3JpIGludGVydmFsbG8iCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAidW5pdMOgIG5vbiB2YWxpZGEiCisKKyM6IGNvbmZpZy5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgInZhbG9yZSBjb25maWd1cmF6aW9uZSBudW1lcmljbyAnJXMnIGVycmF0byBwZXIgJyVzJzogJXMiCisKKyM6IGNvbmZpZy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAidmFsb3JlIGNvbmZpZ3VyYXppb25lIG51bWVyaWNvICclcycgZXJyYXRvIHBlciAnJXMnIG5lbCBibG9iICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIKK21zZ3N0ciAidmFsb3JlIGNvbmZpZ3VyYXppb25lIG51bWVyaWNvICclcycgZXJyYXRvIHBlciAnJXMnIG5lbCBmaWxlICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIiIKKyJ2YWxvcmUgY29uZmlndXJhemlvbmUgbnVtZXJpY28gJyVzJyBlcnJhdG8gcGVyICclcycgbmVsbG8gc3RhbmRhcmQgaW5wdXQ6ICVzIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorInZhbG9yZSBjb25maWd1cmF6aW9uZSBudW1lcmljbyAnJXMnIGVycmF0byBwZXIgJyVzJyBuZWwgYmxvYiBzb3R0b21vZHVsbyAlczogIgorIiVzIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIiIKKyJ2YWxvcmUgY29uZmlndXJhemlvbmUgbnVtZXJpY28gJyVzJyBlcnJhdG8gcGVyICclcycgbmVsbGEgcmlnYSBkaSBjb21hbmRvICIKKyIlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICJ2YWxvcmUgY29uZmlndXJhemlvbmUgbnVtZXJpY28gJyVzJyBlcnJhdG8gcGVyICclcycgaW4gJXM6ICVzIgorCisjOiBjb25maWcuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgImVzcGFuc2lvbmUgZGlyZWN0b3J5IHV0ZW50ZSBpbiAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogY29uZmlnLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyBwZXIgJyVzJyBub24gw6ggdW4gdGltZXN0YW1wIHZhbGlkbyIKKworIzogY29uZmlnLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiCittc2dzdHIgImx1bmdoZXp6YSBhYmJyZXZpYXppb25lIGZ1b3JpIGludGVydmFsbG86ICVkIgorCisjOiBjb25maWcuYzoxMjIyIGNvbmZpZy5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgImxpdmVsbG8gY29tcHJlc3Npb25lIHpsaWIgJWQgbm9uIHZhbGlkbyIKKworIzogY29uZmlnLmM6MTMyNQorbXNnaWQgImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiY29yZS5jb21tZW50Q2hhciBkb3ZyZWJiZSBlc3NlcmUgY29tcG9zdG8gZGEgdW4gc29sbyBjYXJhdHRlcmUiCisKKyM6IGNvbmZpZy5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICJtb2RhbGl0w6Agbm9uIHZhbGlkYSBwZXIgbGEgY3JlYXppb25lIGRpIHVuIG9nZ2V0dG86ICVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgInZhbG9yZSBtYWxmb3JtYXRvIHBlciAlcyIKKworIzogY29uZmlnLmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAidmFsb3JlIG1hbGZvcm1hdG8gcGVyICVzOiAlcyIKKworIzogY29uZmlnLmM6MTQ1NworbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgImRldidlc3NlcmUgbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gbyBjdXJyZW50IgorCisjOiBjb25maWcuYzoxNTE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibGl2ZWxsbyBjb21wcmVzc2lvbmUgcGFjayAlZCBub24gdmFsaWRvIgorCisjOiBjb25maWcuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIGNvbmZpZyBibG9iIG9iamVjdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjYXJpY2FyZSBsJ29nZ2V0dG8gYmxvYiBjb25maWd1cmF6aW9uZSAnJXMnIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAiaWwgcmlmZXJpbWVudG8gJyVzJyBub24gcHVudGEgYWQgdW4gYmxvYiIKKworIzogY29uZmlnLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgaWwgYmxvYiBjb25maWd1cmF6aW9uZSAnJXMnIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAiYW5hbGlzaSBkaSAlcyBub24gcml1c2NpdGEiCisKKyM6IGNvbmZpZy5jOjE3NDUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsYSBjb25maWd1cmF6aW9uZSBhIHJpZ2EgZGkgY29tYW5kbyIKKworIzogY29uZmlnLmM6MjA5NgorbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAiIgorInNpIMOoIHZlcmlmaWNhdG8gdW4gZXJyb3JlIGltcHJldmlzdG8gZHVyYW50ZSBsYSBsZXR0dXJhIGRlaSBmaWxlIGRpICIKKyJjb25maWd1cmF6aW9uZSIKKworIzogY29uZmlnLmM6MjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIlcyBub24gdmFsaWRvOiAnJXMnIgorCisjOiBjb25maWcuYzoyMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAiIgorImlsIHZhbG9yZSBzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgJyVkJyBkb3ZyZWJiZSBlc3NlcmUgY29tcHJlc28gZnJhIDAgZSAiCisiMTAwIgorCisjOiBjb25maWcuYzoyMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSAnJXMnIGRhbGxhIGNvbmZpZ3VyYXppb25lIGEgcmlnYSBkaSBjb21hbmRvIgorCisjOiBjb25maWcuYzoyMzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAidmFyaWFiaWxlIGNvbmZpZ3VyYXppb25lICclcycgZXJyYXRhIG5lbCBmaWxlICclcycgYWxsYSByaWdhICVkIgorCisjOiBjb25maWcuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lICclcyciCittc2dzdHIgIm5vbWUgc2V6aW9uZSAnJXMnIG5vbiB2YWxpZG8iCisKKyM6IGNvbmZpZy5jOjI0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgaGEgcGnDuSB2YWxvcmkiCisKKyM6IGNvbmZpZy5jOjI1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIG5ldyBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgInNjcml0dHVyYSBkZWwgbnVvdm8gZmlsZSBkaSBjb25maWd1cmF6aW9uZSAlcyBub24gcml1c2NpdGEiCisKKyM6IGNvbmZpZy5jOjI3NTMgY29uZmlnLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYmxvY2NhcmUgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSAlcyIKKworIzogY29uZmlnLmM6Mjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICJhcGVydHVyYSBkaSAlcyBpbiBjb3JzbyIKKworIzogY29uZmlnLmM6Mjc5OSBidWlsdGluL2NvbmZpZy5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdHRlcm46ICVzIgorbXNnc3RyICJwYXR0ZXJuIG5vbiB2YWxpZG86ICVzIgorCisjOiBjb25maWcuYzoyODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImZpbGUgZGkgY29uZmlndXJhemlvbmUgJXMgbm9uIHZhbGlkbyIKKworIzogY29uZmlnLmM6MjgzNyBjb25maWcuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiZnN0YXQgZGkgJXMgbm9uIHJpdXNjaXRhIgorCisjOiBjb25maWcuYzoyODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIG1tYXAgc3UgJyVzJyIKKworIzogY29uZmlnLmM6Mjg1NyBjb25maWcuYzozMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiZXNlY3V6aW9uZSBjaG1vZCBzdSAlcyBub24gcml1c2NpdGEiCisKKyM6IGNvbmZpZy5jOjI5NDIgY29uZmlnLmM6MzE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgJXMiCisKKyM6IGNvbmZpZy5jOjI5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGltcG9zdGFyZSAnJXMnIGEgJyVzJyIKKworIzogY29uZmlnLmM6Mjk3OCBidWlsdGluL3JlbW90ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZWxpbWluYXJlIGwnaW1wb3N0YXppb25lIGRpICclcyciCisKKyM6IGNvbmZpZy5jOjMwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICJub21lIHNlemlvbmUgbm9uIHZhbGlkbzogJXMiCisKKyM6IGNvbmZpZy5jOjMyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIKK21zZ3N0ciAidmFsb3JlIG1hbmNhbnRlIHBlciAnJXMnIgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICIiCisibGEgY29udHJvcGFydGUgcmVtb3RhIGhhIGNoaXVzbyBsYSBjb25uZXNzaW9uZSBkdXJhbnRlIGlsIGNvbnRhdHRvIGluaXppYWxlIgorCisjOiBjb25uZWN0LmM6NjMKK21zZ2lkICIiCisiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cbiIKKyJcbiIKKyJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHNcbiIKKyJhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGxlZ2dlcmUgZGFsIHJlcG9zaXRvcnkgcmVtb3RvLlxuIgorIlxuIgorIkFzc2ljdXJhdGkgZGkgZGlzcG9ycmUgZGVpIHByaXZpbGVnaSBkJ2FjY2Vzc28gY29ycmV0dGlcbiIKKyJlIGNoZSBpbCByZXBvc2l0b3J5IGVzaXN0YS4iCisKKyM6IGNvbm5lY3QuYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0ICclcyciCittc2dzdHIgImlsIHNlcnZlciBub24gc3VwcG9ydGEgJyVzJyIKKworIzogY29ubmVjdC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGZlYXR1cmUgJyVzJyIKK21zZ3N0ciAiaWwgc2VydmVyIG5vbiBzdXBwb3J0YSBsYSBmdW56aW9uYWxpdMOgICclcyciCisKKyM6IGNvbm5lY3QuYzoxMTQKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciBjYXBhYmlsaXRpZXMiCittc2dzdHIgImF0dGVzbyBmbHVzaCBkb3BvIGxldHR1cmEgZnVuemlvbmFsaXTDoCIKKworIzogY29ubmVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBjYXBhYmlsaXRpZXMgYWZ0ZXIgZmlyc3QgbGluZSAnJXMnIgorbXNnc3RyICJpZ25vcm8gbGUgZnVuemlvbmFsaXTDoCBkb3BvIGxhIHByaW1hIHJpZ2EgJyVzJyIKKworIzogY29ubmVjdC5jOjI1MgorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIGNhcGFiaWxpdGllc157fSIKK21zZ3N0ciAiZXJyb3JlIHByb3RvY29sbG86IGNhcGFiaWxpdGllc157fSBub24gYXR0ZXNvIgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAiZXJyb3JlIHByb3RvY29sbG86IGF0dGVzbyBTSEExIHNoYWxsb3csIHJpY2V2dXRvICclcyciCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgImlsIHJlcG9zaXRvcnkgZGVsbGEgY29udHJvcGFydGUgbm9uIHB1w7IgZXNzZXJlIHNoYWxsb3ciCisKKyM6IGNvbm5lY3QuYzozMTMKK21zZ2lkICJpbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAicGFjY2hldHRvIG5vbiB2YWxpZG8iCisKKyM6IGNvbm5lY3QuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIKK21zZ3N0ciAiZXJyb3JlIHByb3RvY29sbG86ICclcycgbm9uIGF0dGVzbyIKKworIzogY29ubmVjdC5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxzLXJlZnMgcmVzcG9uc2U6ICVzIgorbXNnc3RyICJyaXNwb3N0YSBscy1yZWZzIG5vbiB2YWxpZGE6ICVzIgorCisjOiBjb25uZWN0LmM6NDQ1Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgcmVmIGxpc3RpbmciCittc2dzdHIgImF0dGVzbyBmbHVzaCBkb3BvIGVsZW5jbyByZWYiCisKKyM6IGNvbm5lY3QuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgJyVzJyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJpbCBwcm90b2NvbGxvICclcycgbm9uIMOoIHN1cHBvcnRhdG8iCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgImltcG9zc2liaWxlIGltcG9zdGFyZSBTT19LRUVQQUxJVkUgc3VsIHNvY2tldCIKKworIzogY29ubmVjdC5jOjYzNSBjb25uZWN0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2tpbmcgdXAgJXMgLi4uICIKK21zZ3N0ciAiUmlzb2x1emlvbmUgZGkgJXMgaW4gY29yc28uLi4gIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgJXMgKHBvcnRhICVzKSAoJXMpIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorImZhdHRvLlxuIgorIkNvbm5lc3Npb25lIGEgJXMgKHBvcnRhICVzKSBpbiBjb3Jzby4uLiAiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBjb2xsZWdhcnNpIGEgJXM6XG4iCisiJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCisjOiBjb25uZWN0LmM6NjcxIGNvbm5lY3QuYzo3NDgKK21zZ2lkICJkb25lLiIKK21zZ3N0ciAiZmF0dG8uIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSAlcyAoJXMpIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAicG9ydGEgJXMgc2Nvbm9zY2l1dGEiCisKKyM6IGNvbm5lY3QuYzo4NDUgY29ubmVjdC5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBob3N0bmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgIm5vbWUgaG9zdCBzdHJhbm8gJyVzJyBibG9jY2F0byIKKworIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICJwb3J0YSBzdHJhbmEgJyVzJyBibG9jY2F0YSIKKworIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgaWwgcHJveHkgJXMiCisKKyM6IGNvbm5lY3QuYzo5MjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZDsgc2VlICdnaXQgaGVscCBwdWxsJyBmb3IgdmFsaWQgdXJsIHN5bnRheCIKK21zZ3N0ciAiIgorIm5lc3N1biBwZXJjb3JzbyBzcGVjaWZpY2F0bzsgdmVkZXJlICdnaXQgaGVscCBwdWxsJyBwZXIgbGUgc2ludGFzc2kgVVJMICIKKyJ2YWxpZGUiCisKKyM6IGNvbm5lY3QuYzoxMTIzCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAibGEgdmFyaWFudGUgU1NIICdzaW1wbGUnIG5vbiBzdXBwb3J0YSAtNCIKKworIzogY29ubmVjdC5jOjExMzUKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC02IgorbXNnc3RyICJsYSB2YXJpYW50ZSBTU0ggJ3NpbXBsZScgbm9uIHN1cHBvcnRhIC02IgorCisjOiBjb25uZWN0LmM6MTE1MgorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwb3J0IgorbXNnc3RyICJsYSB2YXJpYW50ZSBTU0ggJ3NpbXBsZScgbm9uIHN1cHBvcnRhIGwnaW1wb3N0YXppb25lIGRlbGxhIHBvcnRhIgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAicGVyY29yc28gc3RyYW5vICclcycgYmxvY2NhdG8iCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGZvcmsiCisKKyM6IGNvbm5lY3RlZC5jOjg5IGJ1aWx0aW4vZnNjay5jOjIwOCBidWlsdGluL3BydW5lLmM6NDMKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIkNvbnRyb2xsbyBjb25uZXNzaW9uZSBpbiBjb3JzbyIKKworIzogY29ubmVjdGVkLmM6MTAxCittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgJ2dpdC1yZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjEyMQorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIKK21zZ3N0ciAic2NyaXR0dXJhIG5lbGxhIHJldi1saXN0IG5vbiByaXVzY2l0YSIKKworIzogY29ubmVjdGVkLmM6MTI4Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgImNoaXVzdXJhIHN0YW5kYXJkIGlucHV0IGRlbGxhIHJldi1saXN0IG5vbiByaXVzY2l0YSIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICJjcmxmX2FjdGlvbiAlZCBpbGxlY2l0YSIKKworIzogY29udmVydC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzIgorbXNnc3RyICJDUkxGIHNhcmViYmUgc29zdGl0dWl0byBkYSBMRiBpbiAlcyIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJDUkxGIHNhcsOgIHNvc3RpdHVpdG8gZGEgTEYgaW4gJXMuXG4iCisiSWwgZmlsZSBhdnLDoCBpIHN1b2kgZmluZSByaWdhIG9yaWdpbmFyaSBuZWxsYSBwcm9wcmlhIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisKKyM6IGNvbnZlcnQuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAiTEYgc2FyZWJiZSBzb3N0aXR1aXRvIGRhIENSTEYgaW4gJXMiCisKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiTEYgc2Fyw6Agc29zdGl0dWl0byBkYSBDUkxGIGluICVzLlxuIgorIklsIGZpbGUgYXZyw6AgaSBzdW9pIGZpbmUgcmlnYSBvcmlnaW5hcmkgbmVsbGEgcHJvcHJpYSBkaXJlY3RvcnkgZGkgbGF2b3JvIgorCisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiSWwgQk9NIMOoIHZpZXRhdG8gaW4gJyVzJyBzZSBpbCBmaWxlIMOoIGNvZGlmaWNhdG8gY29tZSAlcyIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIklsIGZpbGUgJyVzJyBjb250aWVuZSB1biBpbmRpY2F0b3JlIGRlbGwnb3JkaW5lIGRlaSBieXRlIChCT00pLiBVc2FyZSBVVEYtIgorIiUuKnMgY29tZSBjb2RpZmljYSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8uIgorCisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIklsIEJPTSDDqCByaWNoaWVzdG8gaW4gJyVzJyBzZSBpbCBmaWxlIMOoIGNvZGlmaWNhdG8gY29tZSAlcyIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiTmVsIGZpbGUgJyVzJyBtYW5jYSB1biBpbmRpY2F0b3JlIGRlbGwnb3JkaW5lIGRlaSBieXRlIChCT00pLiBVc2FyZSBVVEYtJXNCRSAiCisibyBVVEYtJXNMRSAoYSBzZWNvbmRhIGRlbGwnb3JkaW5lIGRlaSBieXRlKSBjb21lIGNvZGlmaWNhIGRlbGwnYWxiZXJvIGRpICIKKyJsYXZvcm8uIgorCisjOiBjb252ZXJ0LmM6NDE5IGNvbnZlcnQuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgImNvbnZlcnNpb25lIGRlbGxhIGNvZGlmaWNhICclcycgZGEgJXMgYSAlcyBub24gcml1c2NpdGEiCisKKyM6IGNvbnZlcnQuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW5jb2RpbmcgJyVzJyBmcm9tICVzIHRvICVzIGFuZCBiYWNrIGlzIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiIgorImlsIHJpc3VsdGF0byBkZWxsYSBjb2RpZmljYSBkaSAnJXMnIGRhICVzIGEgJXMgZSB2aWNldmVyc2Egbm9uIMOoIGxvIHN0ZXNzbyIKKworIzogY29udmVydC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayB0byBydW4gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGZvcmsgcGVyIGVzZWd1aXJlIGlsIGZpbHRybyBlc3Rlcm5vICclcyciCisKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBmb3JuaXJlIGwnaW5wdXQgYWwgZmlsdHJvIGVzdGVybm8gJyVzJyIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgImVzZWN1emlvbmUgZGVsIGZpbHRybyBlc3Rlcm5vICclcycgbm9uIHJpdXNjaXRhOiAlZCIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgImxldHR1cmEgZGFsIGZpbHRybyBlc3Rlcm5vICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJlc2VjdXppb25lIGRlbCBmaWx0cm8gZXN0ZXJubyAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogY29udmVydC5jOjgzOQorbXNnaWQgInVuZXhwZWN0ZWQgZmlsdGVyIHR5cGUiCittc2dzdHIgInRpcG8gZmlsdHJvIGluYXR0ZXNvIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgIm5vbWUgcGVyY29yc28gdHJvcHBvIGx1bmdvIHBlciBpbCBmaWx0cm8gZXN0ZXJubyIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorImlsIGZpbHRybyBlc3Rlcm5vICclcycgbm9uIMOoIHBpw7kgZGlzcG9uaWJpbGUgbm9ub3N0YW50ZSBub24gdHV0dGkgaSBwZXJjb3JzaSAiCisic2lhbm8gc3RhdGkgZmlsdHJhdGkiCisKKyM6IGNvbnZlcnQuYzoxMjIzCittc2dpZCAidHJ1ZS9mYWxzZSBhcmUgbm8gdmFsaWQgd29ya2luZy10cmVlLWVuY29kaW5ncyIKK21zZ3N0ciAidHJ1ZS9mYWxzZSBub24gc29ubyBjb2RpZmljaGUgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIHZhbGlkZSIKKworIzogY29udmVydC5jOjE0MTEgY29udmVydC5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiJXM6IGVzZWN1emlvbmUgZGVsIGZpbHRybyBjbGVhbiAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogY29udmVydC5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIlczogZXNlY3V6aW9uZSBkZWwgZmlsdHJvIHNtdWRnZSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogZGF0ZS5jOjEzOAorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgImluIGZ1dHVybyIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gc2Vjb25kbyBmYSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBzZWNvbmRpIGZhIgorCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBtaW51dG8gZmEiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gbWludXRpIGZhIgorCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IG9yYSBmYSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBvcmUgZmEiCisKKyM6IGRhdGUuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IGdpb3JubyBmYSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBnaW9ybmkgZmEiCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gc2V0dGltYW5hIGZhIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IHNldHRpbWFuZSBmYSIKKworIzogZGF0ZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IG1lc2UgZmEiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4gbWVzaSBmYSIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gYW5ubyIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBhbm5pIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlPFBSSXVNQVg+IG1lc2UgZmEiCittc2dzdHJbMV0gIiVzLCAlPFBSSXVNQVg+IG1lc2kgZmEiCisKKyM6IGRhdGUuYzoxOTcgZGF0ZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBhbm5vIGZhIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IGFubmkgZmEiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyNzIKK21zZ2lkICJQcm9wYWdhdGluZyBpc2xhbmQgbWFya3MiCittc2dzdHIgIlByb3BhZ2F6aW9uZSBjb250cmFzc2VnbmkgaXNvbGUgaW4gY29yc28iCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICJvZ2dldHRvIGFsYmVybyAlcyBub24gdmFsaWRvIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgIiIKKyJjYXJpY2FtZW50byBkZWxsJ2VzcHJlc3Npb25lIHJlZ29sYXJlIGRlbGwnaXNvbGEgcGVyICclcycgbm9uIHJpdXNjaXRvOiAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgorbXNnc3RyICIiCisibCdlc3ByZXNzaW9uZSByZWdvbGFyZSBkZWxsJ2lzb2xhIHRyYXR0YSBkYWxsYSBjb25maWd1cmF6aW9uZSBoYSB0cm9wcGkgIgorImdydXBwaSBjYXR0dXJhIChtYXNzaW1vPSVkKSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAiQ29udHJhc3NlZ25hdGUgJWQgaXNvbGUsIGZhdHRvLlxuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICJsZXR0dXJhIGRlbGwnb3JkZXJmaWxlICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBkaWZmY29yZS1yZW5hbWUuYzo1NDMKK21zZ2lkICJQZXJmb3JtaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAiUmlsZXZhbWVudG8gcmlkZW5vbWluYXppb25lIG5vbiBlc2F0dGEgaW4gY29yc28iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHppb25pPl0gPHBlcmNvcnNvPiA8cGVyY29yc28+IgorCisjOiBkaWZmLW5vLWluZGV4LmM6MjYzCittc2dpZCAiIgorIk5vdCBhIGdpdCByZXBvc2l0b3J5LiBVc2UgLS1uby1pbmRleCB0byBjb21wYXJlIHR3byBwYXRocyBvdXRzaWRlIGEgd29ya2luZyAiCisidHJlZSIKK21zZ3N0ciAiIgorIk5vbiDDqCB1biByZXBvc2l0b3J5IEdpdC4gVXNhIC0tbm8taW5kZXggcGVyIGNvbmZyb250YXJlIGR1ZSBwZXJjb3JzaSBhbCBkaSAiCisiZnVvcmkgZGkgdW4gYWxiZXJvIGRpIGxhdm9ybyIKKworIzogZGlmZi5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiIKKyIgIEFuYWxpc2kgZGVsbGEgcGVyY2VudHVhbGUgZGkgY3V0b2ZmIHN0YXRpc3RpY2hlIGRpcmVjdG9yeSAnJXMnIG5vbiAiCisicml1c2NpdGFcbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIFBhcmFtZXRybyBzdGF0aXN0aWNoZSBkaXJlY3RvcnkgJyVzJyBzY29ub3NjaXV0b1xuIgorCisjOiBkaWZmLmM6Mjk2Cittc2dpZCAiIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgorbXNnc3RyICIiCisibCdpbXBvc3RhemlvbmUgY29sb3JlIHBlciBmaWxlIHNwb3N0YXRpIGRldmUgZXNzZXJlICdubycsICdkZWZhdWx0JywgIgorIidibG9ja3MnLCAnemVicmEnLCAnZGltbWVkLXplYnJhJywgJ3BsYWluJyIKKworIzogZGlmZi5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcycsIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZS1zcGFjZS1jaGFuZ2UnLCAiCisiJ2lnbm9yZS1zcGFjZS1hdC1lb2wnLCAnaWdub3JlLWFsbC1zcGFjZScsICdhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UnIgorbXNnc3RyICIiCisibW9kYWxpdMOgIGNvbG9yLW1vdmVkLXdzICclcycgc2Nvbm9zY2l1dGEsIGkgdmFsb3JpIHBvc3NpYmlsaSBzb25vICdpZ25vcmUtIgorInNwYWNlLWNoYW5nZScsICdpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tIgorImNoYW5nZSciCisKKyM6IGRpZmYuYzozMzIKK21zZ2lkICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKK21zZ3N0ciAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2Ugbm9uIHB1w7IgZXNzZXJlIGNvbWJpbmF0YSBjb24gYWx0cmUgIgorIm1vZGFsaXTDoCBzcGF6aSBiaWFuY2hpIgorCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICIiCisiVmFsb3JlIHNjb25vc2NpdXRvIHBlciBsYSB2YXJpYWJpbGUgZGkgY29uZmlndXJhemlvbmUgJ2RpZmYuc3VibW9kdWxlJzogJyVzJyIKKworIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIlRyb3ZhdGkgZXJyb3JpIG5lbGxhIHZhcmlhYmlsZSBkaSBjb25maWd1cmF6aW9uZSAnZGlmZi5kaXJzdGF0JzpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAicHJvY2Vzc28gZXN0ZXJubyBkaWZmIG1vcnRvLCBtaSBmZXJtbyBhICVzIgorCisjOiBkaWZmLmM6NDU0NworbXNnaWQgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisibGUgb3B6aW9uaSAtLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBlIC1zIHNvbm8gbXV0dWFtZW50ZSBlc2NsdXNpdmUiCisKKyM6IGRpZmYuYzo0NTUwCittc2dpZCAiLUcsIC1TIGFuZCAtLWZpbmQtb2JqZWN0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgImxlIG9wemlvbmkgLUcsIC1TIGUgLS1maW5kLW9iamVjdCBzb25vIG11dHVhbWVudGUgZXNjbHVzaXZlIgorCisjOiBkaWZmLmM6NDYyOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyByaWNoaWVkZSBlc2F0dGFtZW50ZSB1bm8gc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyIKKworIzogZGlmZi5jOjQ2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIgorbXNnc3RyICJ2YWxvcmUgbm9uIHZhbGlkbyBwZXIgLS1zdGF0OiAlcyIKKworIzogZGlmZi5jOjQ2ODEgZGlmZi5jOjQ2ODYgZGlmZi5jOjQ2OTEgZGlmZi5jOjQ2OTYgZGlmZi5jOjUyMDkKKyM6IHBhcnNlLW9wdGlvbnMuYzoxOTkgcGFyc2Utb3B0aW9ucy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIlcyByaWNoaWVkZSB1biB2YWxvcmUgbnVtZXJpY28iCisKKyM6IGRpZmYuYzo0NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKyJBbmFsaXNpIGRlbCBwYXJhbWV0cm8gZGVsbCdvcHppb25lIC0tZGlyc3RhdC8tWCBub24gcml1c2NpdGE6XG4iCisiJXMiCisKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAiY2xhc3NlIG1vZGlmaWNhICclYycgc2Nvbm9zY2l1dGEgaW4gLS1kaWZmLWZpbHRlcj0lcyIKKworIzogZGlmZi5jOjQ4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBhZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKK21zZ3N0ciAidmFsb3JlIHNjb25vc2NpdXRvIGRvcG8gd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCisKKyM6IGRpZmYuYzo0ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSAnJXMnIgorCisjOiBkaWZmLmM6NDg4NiBkaWZmLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIDxuPi88bT4gZm9ybSIKK21zZ3N0ciAiJXMgcmljaGllZGUgaWwgZm9ybWF0byA8bj4vPG0+IgorCisjOiBkaWZmLmM6NDkwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgY2hhcmFjdGVyLCBnb3QgJyVzJyIKK21zZ3N0ciAiJXMgcmljaGllZGUgdW4gY2FyYXR0ZXJlLCByaWNldnV0byAnJXMnIgorCisjOiBkaWZmLmM6NDkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byAtLWNvbG9yLW1vdmVkIGVycmF0bzogJXMiCisKKyM6IGRpZmYuYzo0OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSAnJXMnIGluIC0tY29sb3ItbW92ZWQtd3MiCittc2dzdHIgIm1vZG8gbm9uIHZhbGlkbyAnJXMnIGluIC0tY29sb3ItbW92ZWQtd3MiCisKKyM6IGRpZmYuYzo0OTg0Cittc2dpZCAiIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCittc2dzdHIgIiIKKyJsJ29wemlvbmUgZGlmZi1hbGdvcml0aG0gYWNjZXR0YSBpIHZhbG9yaSBcIm15ZXJzXCIsIFwibWluaW1hbFwiLCBcInBhdGllbmNlIgorIlwiIGUgXCJoaXN0b2dyYW1cIiIKKworIzogZGlmZi5jOjUwMjAgZGlmZi5jOjUwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCB0byAlcyIKK21zZ3N0ciAiYXJnb21lbnRvIG5vbiB2YWxpZG8gcGVyICVzIgorCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiYW5hbGlzaSBkZWwgcGFyYW1ldHJvIGRlbGwnb3B6aW9uZSAtLXN1Ym1vZHVsZSBub24gcml1c2NpdGE6ICclcyciCisKKyM6IGRpZmYuYzo1MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byAtLXdvcmQtZGlmZiBlcnJhdG86ICVzIgorCisjOiBkaWZmLmM6NTI1NworbXNnaWQgIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIGZvcm1hdG8gb3V0cHV0IGRpZmYiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgImdlbmVyYSBwYXRjaCIKKworIzogZGlmZi5jOjUyNjIgYnVpbHRpbi9sb2cuYzoxNzMKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSBsJ291dHB1dCBkZWwgZGlmZiIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICJnZW5lcmEgZGlmZiBjb24gPG4+IHJpZ2hlIGRpIGNvbnRlc3RvIgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgImdlbmVyYSBpbCBkaWZmIGluIGZvcm1hdG8gZ3JlenpvIgorCisjOiBkaWZmLmM6NTI3NgorbXNnaWQgInN5bm9ueW0gZm9yICctcCAtLXJhdyciCittc2dzdHIgInNpbm9uaW1vIGRpICctcCAtLXJhdyciCisKKyM6IGRpZmYuYzo1MjgwCittc2dpZCAic3lub255bSBmb3IgJy1wIC0tc3RhdCciCittc2dzdHIgInNpbm9uaW1vIGRpICctcCAtLXN0YXQnIgorCisjOiBkaWZmLmM6NTI4NAorbXNnaWQgIm1hY2hpbmUgZnJpZW5kbHkgLS1zdGF0IgorbXNnc3RyICItLXN0YXQgbGVnZ2liaWxlIGRhIHVuYSBtYWNjaGluYSIKKworIzogZGlmZi5jOjUyODcKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIC0tc3RhdCIKK21zZ3N0ciAiZW1ldHRpIGluIG91dHB1dCBzb2xvIGwndWx0aW1hIHJpZ2EgZGkgLS1zdGF0IgorCisjOiBkaWZmLmM6NTI4OSBkaWZmLmM6NTI5NworbXNnaWQgIjxwYXJhbTEscGFyYW0yPi4uLiIKK21zZ3N0ciAiPHBhcmFtZXRybzEscGFyYW1ldHJvMj4uLi4iCisKKyM6IGRpZmYuYzo1MjkwCittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIiIKKyJlbWV0dGkgaW4gb3V0cHV0IGxhIGRpc3RyaWJ1emlvbmUgZGVsIG51bWVybyBkaSBtb2RpZmljaGUgcmVsYXRpdm8gYSBvZ25pICIKKyJzb3R0b2RpcmVjdG9yeSIKKworIzogZGlmZi5jOjUyOTQKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKK21zZ3N0ciAic2lub25pbW8gZGkgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCisKKyM6IGRpZmYuYzo1Mjk4Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWZpbGVzLHBhcmFtMSxwYXJhbTIuLi4iCittc2dzdHIgInNpbm9uaW1vIGRpIC0tZGlyc3RhdD1maWxlcyxwYXJhbWV0cm8xLHBhcmFtZXRybzIuLi4iCisKKyM6IGRpZmYuYzo1MzAyCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisiYXZ2aXNhIHNlIGxlIG1vZGlmaWNoZSBpbnRyb2R1Y29ubyBtYXJjYXRvcmkgY29uZmxpdHRvIG8gZXJyb3JpIHNwYXppIGJpYW5jaGkiCisKKyM6IGRpZmYuYzo1MzA1Cittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAiIgorInJpYXNzdW50byBjb25jaXNvIChhZCBlcy4gZWxlbWVudGkgY3JlYXRpLCByaWRlbm9taW5hdGkgZSBtb2RpZmljaGUgbW9kaSkiCisKKyM6IGRpZmYuYzo1MzA4Cittc2dpZCAic2hvdyBvbmx5IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBpIG5vbWkgZGVpIGZpbGUgbW9kaWZpY2F0aSIKKworIzogZGlmZi5jOjUzMTEKK21zZ2lkICJzaG93IG9ubHkgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJ2aXN1YWxpenphIHNvbG8gaSBub21pIGUgbG8gc3RhdG8gZGVpIGZpbGUgbW9kaWZpY2F0aSIKKworIzogZGlmZi5jOjUzMTMKK21zZ2lkICI8d2lkdGg+Wyw8bmFtZS13aWR0aD5bLDxjb3VudD5dXSIKK21zZ3N0ciAiPGFtcGllenphPlssPGFtcGllenphIG5vbWU+Wyw8bnVtZXJvPl1dIgorCisjOiBkaWZmLmM6NTMxNAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IgorbXNnc3RyICJnZW5lcmEgZGlmZnN0YXQiCisKKyM6IGRpZmYuYzo1MzE2IGRpZmYuYzo1MzE5IGRpZmYuYzo1MzIyCittc2dpZCAiPHdpZHRoPiIKK21zZ3N0ciAiPGFtcGllenphPiIKKworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgImdlbmVyYSBpbCBkaWZmc3RhdCBjb24gdW4nYW1waWV6emEgc3BlY2lmaWNhdGEiCisKKyM6IGRpZmYuYzo1MzIwCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIG5hbWUgd2lkdGgiCittc2dzdHIgImdlbmVyYSBpbCBkaWZmc3RhdCBjb24gdW4nYW1waWV6emEgbm9taSBzcGVjaWZpY2F0YSIKKworIzogZGlmZi5jOjUzMjMKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgImdlbmVyYSBpbCBkaWZmc3RhdCBjb24gdW4nYW1waWV6emEgZ3JhZm8gc3BlY2lmaWNhdGEiCisKKyM6IGRpZmYuYzo1MzI1Cittc2dpZCAiPGNvdW50PiIKK21zZ3N0ciAiPG51bWVybz4iCisKKyM6IGRpZmYuYzo1MzI2Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICJnZW5lcmEgaWwgZGlmZnN0YXQgY29uIHJpZ2hlIGxpbWl0YXRlIgorCisjOiBkaWZmLmM6NTMyOQorbXNnaWQgImdlbmVyYXRlIGNvbXBhY3Qgc3VtbWFyeSBpbiBkaWZmc3RhdCIKK21zZ3N0ciAiZ2VuZXJhIHJpYXNzdW50byBjb25jaXNvIG5lbCBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMzIKK21zZ2lkICJvdXRwdXQgYSBiaW5hcnkgZGlmZiB0aGF0IGNhbiBiZSBhcHBsaWVkIgorbXNnc3RyICJzdGFtcGEgaW4gb3V0cHV0IHVuIGRpZmYgYmluYXJpbyBjaGUgcHXDsiBlc3NlcmUgYXBwbGljYXRvIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICJ2aXN1YWxpenphIGkgbm9taSBvZ2dldHRvIHByZSBlIHBvc3QgaW1tYWdpbmUgbmVsbGUgcmlnaGUgXCJpbmRpY2VcIiIKKworIzogZGlmZi5jOjUzMzcKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAidmlzdWFsaXp6YSBkaWZmIGNvbG9yYXRvIgorCisjOiBkaWZmLmM6NTMzOAorbXNnaWQgIjxraW5kPiIKK21zZ3N0ciAiPHRpcG8+IgorCisjOiBkaWZmLmM6NTMzOQorbXNnaWQgIiIKKyJoaWdobGlnaHQgd2hpdGVzcGFjZSBlcnJvcnMgaW4gdGhlICdjb250ZXh0JywgJ29sZCcgb3IgJ25ldycgbGluZXMgaW4gdGhlICIKKyJkaWZmIgorbXNnc3RyICIiCisiZXZpZGVuemlhIGdsaSBlcnJvcmkgZGkgc3BhemkgYmlhbmNoaSBuZWxsZSByaWdoZSAnY29udGVzdG8nLCAndmVjY2hpZScgbyAiCisiJ251b3ZlJyBuZWwgZGlmZiIKKworIzogZGlmZi5jOjUzNDIKK21zZ2lkICIiCisiZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzIGluIC0tcmF3IG9yICIKKyItLW51bXN0YXQiCittc2dzdHIgIiIKKyJub24gcmltdW92ZXJlIGkgbm9taSBwZXJjb3JzbyBlIHVzYXJlIGNhcmF0dGVyaSBOVUwgY29tZSB0ZXJtaW5hdG9yaSBjYW1wbyAiCisiaW4gLS1yYXcgbyAtLW51bXN0YXQiCisKKyM6IGRpZmYuYzo1MzQ1IGRpZmYuYzo1MzQ4IGRpZmYuYzo1MzUxIGRpZmYuYzo1NDU3Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIjxwcmVmaXNzbz4iCisKKyM6IGRpZmYuYzo1MzQ2Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mIFwiYS9cIiIKK21zZ3N0ciAidmlzdWFsaXp6YSBpbCBwcmVmaXNzbyBzb3JnZW50ZSBzcGVjaWZpY2F0byBpbnZlY2UgZGkgXCJhL1wiIgorCisjOiBkaWZmLmM6NTM0OQorbXNnaWQgInNob3cgdGhlIGdpdmVuIGRlc3RpbmF0aW9uIHByZWZpeCBpbnN0ZWFkIG9mIFwiYi9cIiIKK21zZ3N0ciAidmlzdWFsaXp6YSBpbCBwcmVmaXNzbyBkZXN0aW5hemlvbmUgc3BlY2lmaWNhdG8gaW52ZWNlIGRpIFwiYi9cIiIKKworIzogZGlmZi5jOjUzNTIKK21zZ2lkICJwcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0IgorbXNnc3RyICJhbnRlcG9uaSB1biBwcmVmaXNzbyBhZ2dpdW50aXZvIGFkIG9nbmkgcmlnYSBkZWxsJ291dHB1dCIKKworIzogZGlmZi5jOjUzNTUKK21zZ2lkICJkbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeCIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSBhbGN1biBwcmVmaXNzbyBzb3JnZW50ZSBvIGRlc3RpbmF6aW9uZSIKKworIzogZGlmZi5jOjUzNTgKK21zZ2lkICJzaG93IGNvbnRleHQgYmV0d2VlbiBkaWZmIGh1bmtzIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGxpbmVzIgorbXNnc3RyICIiCisidmlzdWFsaXp6YSBpbCBjb250ZXN0byB0cmEgZ2xpIGh1bmsgZGVsIGRpZmYgZmlubyBhbCBudW1lcm8gZGkgcmlnaGUgIgorInNwZWNpZmljYXRvIgorCisjOiBkaWZmLmM6NTM2MiBkaWZmLmM6NTM2NyBkaWZmLmM6NTM3MgorbXNnaWQgIjxjaGFyPiIKK21zZ3N0ciAiPGNhcmF0dGVyZT4iCisKKyM6IGRpZmYuYzo1MzYzCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgbmV3IGxpbmUgaW5zdGVhZCBvZiAnKyciCittc2dzdHIgInNwZWNpZmljYSBpbCBjYXJhdHRlcmUgY2hlIGluZGljYSB1bmEgbnVvdmEgcmlnYSBhbCBwb3N0byBkaSAnKyciCisKKyM6IGRpZmYuYzo1MzY4Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICJzcGVjaWZpY2EgaWwgY2FyYXR0ZXJlIGNoZSBpbmRpY2EgdW5hIHZlY2NoaWEgcmlnYSBhbCBwb3N0byBkaSAnLSciCisKKyM6IGRpZmYuYzo1MzczCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgY29udGV4dCBpbnN0ZWFkIG9mICcgJyIKK21zZ3N0ciAic3BlY2lmaWNhIGlsIGNhcmF0dGVyZSBjaGUgaW5kaWNhIHVuIGNvbnRlc3RvIGFsIHBvc3RvIGRpICcgJyIKKworIzogZGlmZi5jOjUzNzYKK21zZ2lkICJEaWZmIHJlbmFtZSBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIHJpbm9taW5hemlvbmUgZGlmZiIKKworIzogZGlmZi5jOjUzNzcKK21zZ2lkICI8bj5bLzxtPl0iCittc2dzdHIgIjxuPlsvPG0+XSIKKworIzogZGlmZi5jOjUzNzgKK21zZ2lkICJicmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZSIKK21zZ3N0ciAiIgorInNwZXp6YSBtb2RpZmljaGUgZGkgcmlzY3JpdHR1cmEgY29tcGxldGEgaW4gY29wcGllIGVsaW1pbmF6aW9uZS9jcmVhemlvbmUiCisKKyM6IGRpZmYuYzo1MzgyCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgInJpbGV2YSBsZSByaWRlbm9taW5hemlvbmkiCisKKyM6IGRpZmYuYzo1Mzg2Cittc2dpZCAib21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMiCittc2dzdHIgIm9tZXR0aSBsYSBwcmVpbW1hZ2luZSBwZXIgbGUgZWxpbWluYXppb25pIgorCisjOiBkaWZmLmM6NTM4OQorbXNnaWQgImRldGVjdCBjb3BpZXMiCittc2dzdHIgInJpbGV2YSBsZSBjb3BpZSIKKworIzogZGlmZi5jOjUzOTMKK21zZ2lkICJ1c2UgdW5tb2RpZmllZCBmaWxlcyBhcyBzb3VyY2UgdG8gZmluZCBjb3BpZXMiCittc2dzdHIgInVzYSBmaWxlIG5vbiBtb2RpZmljYXRpIGNvbWUgc29yZ2VudGUgcGVyIHRyb3ZhcmUgY29waWUiCisKKyM6IGRpZmYuYzo1Mzk1Cittc2dpZCAiZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJkaXNhYmlsaXRhIHJpbGV2YW1lbnRvIHJpZGVub21pbmF6aW9uZSIKKworIzogZGlmZi5jOjUzOTgKK21zZ2lkICJ1c2UgZW1wdHkgYmxvYnMgYXMgcmVuYW1lIHNvdXJjZSIKK21zZ3N0ciAidXNhIGJsb2IgdnVvdGkgY29tZSBzb3JnZW50ZSByaWRlbm9taW5hemlvbmUiCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgIiIKKyJjb250aW51YSBhIGVsZW5jYXJlIGxhIGNyb25vbG9naWEgZGkgdW4gZmlsZSBhbCBkaSBsw6AgZGVsbGUgcmlkZW5vbWluYXppb25pIgorCisjOiBkaWZmLmM6NTQwMworbXNnaWQgIiIKKyJwcmV2ZW50IHJlbmFtZS9jb3B5IGRldGVjdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyAiCisiZ2l2ZW4gbGltaXQiCittc2dzdHIgIiIKKyJpbXBlZGlzY2kgaWwgcmlsZXZhbWVudG8gcmlkZW5vbWluYXppb25lL2NvcGlhIHNlIGlsIG51bWVybyBkZWxsZSAiCisiZGVzdGluYXppb25pIHJpZGVub21pbmF6aW9uZS9jb3BpYSBlY2NlZGUgaWwgbGltaXRlIHNwZWNpZmljYXRvIgorCisjOiBkaWZmLmM6NTQwNQorbXNnaWQgIkRpZmYgYWxnb3JpdGhtIG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgYWxnb3JpdG1vIGRpZmYiCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAicHJvZHVjaSBpbCBkaWZmIHBpw7kgcGljY29sbyBwb3NzaWJpbGUiCisKKyM6IGRpZmYuYzo1NDEwCittc2dpZCAiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiCittc2dzdHIgImlnbm9yYSBnbGkgc3BhemkgYmlhbmNoaSBkdXJhbnRlIGlsIGNvbmZyb250byBkZWxsZSByaWdoZSIKKworIzogZGlmZi5jOjU0MTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZSIKK21zZ3N0ciAiaWdub3JhIGxlIG1vZGlmaWNoZSBhbCBudW1lcm8gZGVnbGkgc3BhemkgYmlhbmNoaSIKKworIzogZGlmZi5jOjU0MTYKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTCIKK21zZ3N0ciAiaWdub3JhIG1vZGlmaWNoZSBhZ2xpIHNwYXppIGJpYW5jaGkgYSBmaW5lIHJpZ2EiCisKKyM6IGRpZmYuYzo1NDE5Cittc2dpZCAiaWdub3JlIGNhcnJpZXItcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSIKK21zZ3N0ciAiaWdub3JhIGNhcmF0dGVyZSByaXRvcm5vIGEgY2FwbyBhIGZpbmUgcmlnYSIKKworIzogZGlmZi5jOjU0MjIKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB3aG9zZSBsaW5lcyBhcmUgYWxsIGJsYW5rIgorbXNnc3RyICJpZ25vcmEgbW9kaWZpY2hlIGNoZSByaWd1YXJkYW5vIHNvbG8gcmlnaGUgdnVvdGUiCisKKyM6IGRpZmYuYzo1NDI1Cittc2dpZCAiaGV1cmlzdGljIHRvIHNoaWZ0IGRpZmYgaHVuayBib3VuZGFyaWVzIGZvciBlYXN5IHJlYWRpbmciCittc2dzdHIgIiIKKyJldXJpc3RpY2EgcGVyIHNwb3N0YXJlIGkgbGltaXRpIGRlZ2xpIGh1bmsgbmVsIGRpZmYgcGVyIHVuYSBsZXR0dXJhIGFnZXZvbGUiCisKKyM6IGRpZmYuYzo1NDI4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJwYXRpZW5jZSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJnZW5lcmEgaWwgZGlmZiB1c2FuZG8gbCdhbGdvcml0bW8gXCJwYXRpZW5jZSBkaWZmXCIiCisKKyM6IGRpZmYuYzo1NDMyCittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJoaXN0b2dyYW0gZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiZ2VuZXJhIGlsIGRpZmYgdXNhbmRvIGwnYWxnb3JpdG1vIFwiaGlzdG9ncmFtIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzQKK21zZ2lkICI8YWxnb3JpdGhtPiIKK21zZ3N0ciAiPGFsZ29yaXRtbz4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgInNlbGV6aW9uYSB1biBhbGdvcml0bW8gZGlmZiIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIjx0ZXN0bz4iCisKKyM6IGRpZmYuYzo1NDM4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZiB1c2luZyB0aGUgXCJhbmNob3JlZCBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJnZW5lcmEgaWwgZGlmZiB1c2FuZG8gbCdhbGdvcml0bW8gXCJhbmNob3JlZCBkaWZmXCIiCisKKyM6IGRpZmYuYzo1NDQwIGRpZmYuYzo1NDQ5IGRpZmYuYzo1NDUyCittc2dpZCAiPG1vZGU+IgorbXNnc3RyICI8bW9kYWxpdMOgPiIKKworIzogZGlmZi5jOjU0NDEKK21zZ2lkICJzaG93IHdvcmQgZGlmZiwgdXNpbmcgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3JkcyIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgaWwgZGlmZiBwYXJvbGEgcGVyIHBhcm9sYSB1c2FuZG8gPG1vZGFsaXTDoD4gcGVyIGRlbGltaXRhcmUgbGUgIgorInBhcm9sZSBtb2RpZmljYXRlIgorCisjOiBkaWZmLmM6NTQ0MyBkaWZmLmM6NTQ0NiBkaWZmLmM6NTQ5MQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgIjxlc3ByZXNzaW9uZSByZWdvbGFyZT4iCisKKyM6IGRpZmYuYzo1NDQ0Cittc2dpZCAidXNlIDxyZWdleD4gdG8gZGVjaWRlIHdoYXQgYSB3b3JkIGlzIgorbXNnc3RyICJ1c2EgPGVzcHJlc3Npb25lIHJlZ29sYXJlPiBwZXIgZGVjaWRlcmUgY29zYSBjb3N0aXR1aXNjZSB1bmEgcGFyb2xhIgorCisjOiBkaWZmLmM6NTQ0NworbXNnaWQgImVxdWl2YWxlbnQgdG8gLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKK21zZ3N0ciAiIgorImVxdWl2YWxlbnRlIGRpIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxlc3ByZXNzaW9uZSByZWdvbGFyZT4iCisKKyM6IGRpZmYuYzo1NDUwCittc2dpZCAibW92ZWQgbGluZXMgb2YgY29kZSBhcmUgY29sb3JlZCBkaWZmZXJlbnRseSIKK21zZ3N0ciAibGUgcmlnaGUgZGkgY29kaWNlIHNwb3N0YXRlIHNvbm8gY29sb3JhdGUgaW4gbW9kbyBkaXZlcnNvIgorCisjOiBkaWZmLmM6NTQ1MworbXNnaWQgImhvdyB3aGl0ZSBzcGFjZXMgYXJlIGlnbm9yZWQgaW4gLS1jb2xvci1tb3ZlZCIKK21zZ3N0ciAibW9kbyBpbiBjdWkgc29ubyBpZ25vcmF0aSBnbGkgc3BhemkgYmlhbmNoaSBpbiAtLWNvbG9yLW1vdmVkIgorCisjOiBkaWZmLmM6NTQ1NgorbXNnaWQgIk90aGVyIGRpZmYgb3B0aW9ucyIKK21zZ3N0ciAiQWx0cmUgb3B6aW9uaSBkaWZmIgorCisjOiBkaWZmLmM6NTQ1OAorbXNnaWQgIndoZW4gcnVuIGZyb20gc3ViZGlyLCBleGNsdWRlIGNoYW5nZXMgb3V0c2lkZSBhbmQgc2hvdyByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiIgorInNlIGVzZWd1aXRvIGRhIHVuYSBzb3R0b2RpcmVjdG9yeSwgZXNjbHVkaSBsZSBtb2RpZmljaGUgZXN0ZXJuZSBhZCBlc3NhIGUgIgorInZpc3VhbGl6emEgaSBwZXJjb3JzaSByZWxhdGl2aSIKKworIzogZGlmZi5jOjU0NjIKK21zZ2lkICJ0cmVhdCBhbGwgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAidHJhdHRhIHR1dHRpIGkgZmlsZSBjb21lIHNlIGZvc3Nlcm8gZGkgdGVzdG8iCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIgorbXNnc3RyICJzY2FtYmlhIGkgZHVlIGlucHV0LCBnZW5lcmEgdW4gZGlmZiBhbCBjb250cmFyaW8iCisKKyM6IGRpZmYuYzo1NDY2Cittc2dpZCAiZXhpdCB3aXRoIDEgaWYgdGhlcmUgd2VyZSBkaWZmZXJlbmNlcywgMCBvdGhlcndpc2UiCittc2dzdHIgImVzY2kgY29uIGNvZGljZSAxIHNlIGNpIHNvbm8gZGlmZmVyZW56ZSwgY29uIDAgYWx0cmltZW50aSIKKworIzogZGlmZi5jOjU0NjgKK21zZ2lkICJkaXNhYmxlIGFsbCBvdXRwdXQgb2YgdGhlIHByb2dyYW0iCittc2dzdHIgImRpc2FiaWxpdGEgbCdpbnRlcm8gb3V0cHV0IGRlbCBwcm9ncmFtbWEiCisKKyM6IGRpZmYuYzo1NDcwCittc2dpZCAiYWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQiCittc2dzdHIgImNvbnNlbnRpIGwnZXNlY3V6aW9uZSBkaSB1biBoZWxwZXIgZGlmZiBlc3Rlcm5vIgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInJ1biBleHRlcm5hbCB0ZXh0IGNvbnZlcnNpb24gZmlsdGVycyB3aGVuIGNvbXBhcmluZyBiaW5hcnkgZmlsZXMiCittc2dzdHIgIiIKKyJlc2VndWkgZmlsdHJpIGRpIGNvbnZlcnNpb25lIGluIHRlc3RvIGVzdGVybmkgcXVhbmRvIHNpIGNvbmZyb250YW5vIGZpbGUgIgorImJpbmFyaSIKKworIzogZGlmZi5jOjU0NzQKK21zZ2lkICI8d2hlbj4iCittc2dzdHIgIjxxdWFuZG8+IgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAiaWdub3JhIGxlIG1vZGlmaWNoZSBhaSBzb3R0b21vZHVsaSBkdXJhbnRlIGxhIGdlbmVyYXppb25lIGRlbCBkaWZmIgorCisjOiBkaWZmLmM6NTQ3OAorbXNnaWQgIjxmb3JtYXQ+IgorbXNnc3RyICI8Zm9ybWF0bz4iCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgInNwZWNpZmljYSBjb21lIHZlcnJhbm5vIHZpc3VhbGl6emF0ZSBsZSBkaWZmZXJlbnplIG5laSBzb3R0b21vZHVsaSIKKworIzogZGlmZi5jOjU0ODMKK21zZ2lkICJoaWRlICdnaXQgYWRkIC1OJyBlbnRyaWVzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJuYXNjb25kaSBsZSB2b2NpICdnaXQgYWRkIC1OJyBuZWxsJ2luZGljZSIKKworIzogZGlmZi5jOjU0ODYKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAidHJhdHRhIGxlIHZvY2kgJ2dpdCBhZGQgLU4nIGNvbWUgcmVhbGkgbmVsbCdpbmRpY2UiCisKKyM6IGRpZmYuYzo1NDg4Cittc2dpZCAiPHN0cmluZz4iCittc2dzdHIgIjxzdHJpbmdhPiIKKworIzogZGlmZi5jOjU0ODkKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJzdHJpbmciCittc2dzdHIgIiIKKyJjZXJjYSBkaWZmZXJlbnplIGNoZSBtb2RpZmljYW5vIGlsIG51bWVybyBkaSBvY2NvcnJlbnplIGRlbGxhIHN0cmluZ2EgIgorInNwZWNpZmljYXRhIgorCisjOiBkaWZmLmM6NTQ5MgorbXNnaWQgIiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgorbXNnc3RyICIiCisiY2VyY2EgZGlmZmVyZW56ZSBjaGUgbW9kaWZpY2FubyBpbCBudW1lcm8gZGkgb2Njb3JyZW56ZSBkZWxsJ2VzcHJlc3Npb25lICIKKyJyZWdvbGFyZSBzcGVjaWZpY2F0YSIKKworIzogZGlmZi5jOjU0OTUKK21zZ2lkICJzaG93IGFsbCBjaGFuZ2VzIGluIHRoZSBjaGFuZ2VzZXQgd2l0aCAtUyBvciAtRyIKK21zZ3N0ciAidmlzdWFsaXp6YSB0dXR0ZSBsZSBtb2RpZmljaGUgbmVsIGNoYW5nZXNldCBjb24gLVMgbyAtRyIKKworIzogZGlmZi5jOjU0OTgKK21zZ2lkICJ0cmVhdCA8c3RyaW5nPiBpbiAtUyBhcyBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKyJ0cmF0dGEgbGEgPHN0cmluZ2E+IG5lbGwnb3B6aW9uZSAtUyBjb21lIHVuJ2VzcHJlc3Npb25lIHJlZ29sYXJlIFBPU0lYIGVzdGVzYSIKKworIzogZGlmZi5jOjU1MDEKK21zZ2lkICJjb250cm9sIHRoZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcHBlYXIgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiY29udHJvbGxhIGwnb3JkaW5lIGNvbiBjdWkgaSBmaWxlIGFwcGFyaXJhbm5vIG5lbGwnb3V0cHV0IgorCisjOiBkaWZmLmM6NTUwMgorbXNnaWQgIjxvYmplY3QtaWQ+IgorbXNnc3RyICI8SUQgb2dnZXR0bz4iCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICIiCisiY2VyY2EgZGlmZmVyZW56ZSBjaGUgbW9kaWZpY2FubyBpbCBudW1lcm8gZGkgb2Njb3JyZW56ZSBkZWxsJ29nZ2V0dG8gIgorInNwZWNpZmljYXRvIgorCisjOiBkaWZmLmM6NTUwNQorbXNnaWQgIlsoQXxDfER8TXxSfFR8VXxYfEIpLi4uWypdXSIKK21zZ3N0ciAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorCisjOiBkaWZmLmM6NTUwNgorbXNnaWQgInNlbGVjdCBmaWxlcyBieSBkaWZmIHR5cGUiCittc2dzdHIgInNlbGV6aW9uYSBmaWxlIGluIGJhc2UgYWwgdGlwbyBkaWZmIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiPGZpbGU+IgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIlNhbHZhIGwnb3V0cHV0IGluIHVuIGZpbGUgc3BlY2lmaWNvIgorCisjOiBkaWZmLmM6NjE2NAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisiaWwgcmlsZXZhbWVudG8gcmlkZW5vbWluYXppb25lIG5vbiBlc2F0dGEgw6ggc3RhdG8gb21lc3NvIHBlciBsYSBwcmVzZW56YSBkaSAiCisidHJvcHBpIGZpbGUuIgorCisjOiBkaWZmLmM6NjE2NworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorInRyb3ZhdGUgc29sbyBjb3BpZSBkYWkgcGVyY29yc2kgbW9kaWZpY2F0aSBwZXIgbGEgcHJlc2VuemEgZGkgdHJvcHBpIGZpbGUuIgorCisjOiBkaWZmLmM6NjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgIiIKKyJwb3RyZXN0aSB2b2xlciBpbXBvc3RhcmUgbGEgdmFyaWFiaWxlICVzIGFkIGFsbWVubyAlZCBlIHJpcHJvdmFyZSBhZCAiCisiZXNlZ3VpcmUgaWwgY29tYW5kby4iCisKKyM6IGRpci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IgorbXNnc3RyICIiCisibG8gc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAnJXMnIG5vbiBjb3JyaXNwb25kZSBhZCBhbGN1biBmaWxlIG5vdG8gYSBnaXQiCisKKyM6IGRpci5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAicGF0dGVybiBub24gcmljb25vc2NpdXRvOiAnJXMnIgorCisjOiBkaXIuYzo2ODIgZGlyLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJwYXR0ZXJuIG5lZ2F0aXZvIG5vbiByaWNvbm9zY2l1dG86ICclcyciCisKKyM6IGRpci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBoYXZlIGlzc3VlczogcGF0dGVybiAnJXMnIGlzIHJlcGVhdGVkIgorbXNnc3RyICIiCisiaWwgZmlsZSBzcGFyc2UtY2hlY2tvdXQgcG90cmViYmUgYXZlcmUgZGVpIHByb2JsZW1pOiBpbCBwYXR0ZXJuICclcycgw6giCisiIHJpcGV0dXRvIgorCisjOiBkaXIuYzo3MjQKK21zZ2lkICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorbXNnc3RyICJkaXNhYmlsaXRvIGlsIHBhdHRlcm4gbWF0Y2hpbmcgZGkgdGlwbyBjb25lIgorCisjOiBkaXIuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSB1c2FyZSAlcyBjb21lIGZpbGUgZGkgZXNjbHVzaW9uZSIKKworIzogZGlyLmM6MjA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGxhIGRpcmVjdG9yeSAnJXMnIgorCisjOiBkaXIuYzoyNDE1Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgImltcG9zc2liaWxlIG90dGVuZXJlIGlsIG5vbWUgZSBsZSBpbmZvcm1hemlvbmkgc3VsIGtlcm5lbCIKKworIzogZGlyLmM6MjUzOQorbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAibGEgY2FjaGUgbm9uIHRyYWNjaWF0YSDDqCBkaXNhYmlsaXRhdGEgc3UgcXVlc3RvIHNpc3RlbWEgbyBwZXJjb3JzbyIKKworIzogZGlyLmM6MzM0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAiZmlsZSBpbmRleCBjb3Jyb3R0byBuZWwgcmVwb3NpdG9yeSAlcyIKKworIzogZGlyLmM6MzM4OCBkaXIuYzozMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbGUgZGlyZWN0b3J5IHBlciAlcyIKKworIzogZGlyLmM6MzQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBtaWdyYXJlIGxhIGRpcmVjdG9yeSBnaXQgZGEgJyVzJyBhICclcyciCisKKyM6IGVkaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgIiIKKyJzdWdnZXJpbWVudG86IEluIGF0dGVzYSBkZWxsYSBjaGl1c3VyYSBkZWwgZmlsZSBkYSBwYXJ0ZSBkZWxsJ2VkaXRvci4uLiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICJGaWx0cmFnZ2lvIGNvbnRlbnV0byBpbiBjb3JzbyIKKworIzogZW50cnkuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBzdGF0IHN1bCBmaWxlICclcyciCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICJwZXJjb3JzbyBzcGF6aW8gZGVpIG5vbWkgZ2l0IFwiJXNcIiBub24gdmFsaWRvIgorCisjOiBlbnZpcm9ubWVudC5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgaW1wb3N0YXJlIEdJVF9ESVIgYSAnJXMnIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAidHJvcHBpIGFyZ29tZW50aSBwZXIgZXNlZ3VpcmUgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogYXR0ZXNhIGxpc3RhIHNoYWxsb3ciCisKKyM6IGZldGNoLXBhY2suYzoxNTMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogYXR0ZXNvIHBhY2NoZXR0byBmbHVzaCBkb3BvIGxpc3RhIHNoYWxsb3ciCisKKyM6IGZldGNoLXBhY2suYzoxNjQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogYXR0ZXNpIEFDSy9OQUssIHJpY2V2dXRvIHBhY2NoZXR0byBmbHVzaCIKKworIzogZmV0Y2gtcGFjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBhdHRlc2kgQUNLL05BSywgcmljZXZ1dG8gJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIHN1bCByZW1vdG8iCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMgcmljaGllZGUgbXVsdGlfYWNrX2RldGFpbGVkIgorCisjOiBmZXRjaC1wYWNrLmM6MzU2IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAicmlnYSBzaGFsbG93IG5vbiB2YWxpZGE6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzozNjIgZmV0Y2gtcGFjay5jOjEzNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgInJpZ2EgdW5zaGFsbG93IG5vbiB2YWxpZGE6ICclcyciCisKKyM6IGZldGNoLXBhY2suYzozNjQgZmV0Y2gtcGFjay5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIm9nZ2V0dG8gbm9uIHRyb3ZhdG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY3IGZldGNoLXBhY2suYzoxMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluIG9iamVjdDogJXMiCittc2dzdHIgImVycm9yZSBuZWxsJ29nZ2V0dG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICJuZXNzdW5vIHNoYWxsb3cgdHJvdmF0bzogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNzIgZmV0Y2gtcGFjay5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAiYXR0ZXNpIHNoYWxsb3cvdW5zaGFsbG93LCByaWNldnV0byAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgJWQgJXMiCittc2dzdHIgInJpY2V2dXRvICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICJjb21taXQgbm9uIHZhbGlkbzogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgInNtZXR0byBkaSBwcm92YXJlIgorCisjOiBmZXRjaC1wYWNrLmM6NDc1IHByb2dyZXNzLmM6MzIzCittc2dpZCAiZG9uZSIKK21zZ3N0ciAiZmF0dG8iCisKKyM6IGZldGNoLXBhY2suYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICglZCkgJXMiCittc2dzdHIgInJpY2V2dXRvICVzICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAiQ29udHJhc3NlZ25vICVzIGNvbWUgY29tcGxldG8iCisKKyM6IGZldGNoLXBhY2suYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxyZWFkeSBoYXZlICVzICglcykiCittc2dzdHIgImhvIGdpw6AgJXMgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICIiCisiZmV0Y2gtcGFjazogaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgZm9yayBkZWwgZGVtdWx0aXBsZXhlciBkZWxsYSBiYW5kYSAiCisibGF0ZXJsYWUiCisKKyM6IGZldGNoLXBhY2suYzo4MjYKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIHBhY2sgaGVhZGVyIgorbXNnc3RyICJlcnJvcmUgcHJvdG9jb2xsbzogaW50ZXN0YXppb25lIHBhY2sgbm9uIHZhbGlkYSIKKworIzogZmV0Y2gtcGFjay5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgImZldGNoLXBhY2s6IGltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGZvcmsgZGkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyBub24gcml1c2NpdG8iCisKKyM6IGZldGNoLXBhY2suYzo5MTgKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJlcnJvcmUgbmVsIGRlbXVsdGlwbGV4ZXIgZGVsbGEgYmFuZGEgbGF0ZXJhbGUiCisKKyM6IGZldGNoLXBhY2suYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIKK21zZ3N0ciAiTGEgdmVyc2lvbmUgZGVsIHNlcnZlciDDqCAlLipzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcwIGZldGNoLXBhY2suYzo5NzYgZmV0Y2gtcGFjay5jOjk3OSBmZXRjaC1wYWNrLmM6OTg1CisjOiBmZXRjaC1wYWNrLmM6OTg5IGZldGNoLXBhY2suYzo5OTMgZmV0Y2gtcGFjay5jOjk5NyBmZXRjaC1wYWNrLmM6MTAwMQorIzogZmV0Y2gtcGFjay5jOjEwMDUgZmV0Y2gtcGFjay5jOjEwMDkgZmV0Y2gtcGFjay5jOjEwMTMgZmV0Y2gtcGFjay5jOjEwMTcKKyM6IGZldGNoLXBhY2suYzoxMDIzIGZldGNoLXBhY2suYzoxMDI5IGZldGNoLXBhY2suYzoxMDM0IGZldGNoLXBhY2suYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyAlcyIKK21zZ3N0ciAiSWwgc2VydmVyIHN1cHBvcnRhICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIgorbXNnc3RyICJJbCBzZXJ2ZXIgbm9uIHN1cHBvcnRhIGNsaWVudCBzaGFsbG93IgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAiSWwgc2VydmVyIG5vbiBzdXBwb3J0YSAtLXNoYWxsb3ctc2luY2UiCisKKyM6IGZldGNoLXBhY2suYzoxMDM3Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LWV4Y2x1ZGUiCittc2dzdHIgIklsIHNlcnZlciBub24gc3VwcG9ydGEgLS1zaGFsbG93LWV4Y2x1ZGUiCisKKyM6IGZldGNoLXBhY2suYzoxMDQxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIklsIHNlcnZlciBub24gc3VwcG9ydGEgLS1kZWVwZW4iCisKKyM6IGZldGNoLXBhY2suYzoxMDU4Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgIm5lc3N1biBjb21taXQgaW4gY29tdW5lIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogcmVjdXBlcm8gbm9uIHJpdXNjaXRvLiIKKworIzogZmV0Y2gtcGFjay5jOjEyMDkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICJJbCBzZXJ2ZXIgbm9uIHN1cHBvcnRhIGxlIHJpY2hpZXN0ZSBzaGFsbG93IgorCisjOiBmZXRjaC1wYWNrLmM6MTIxNgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgIklsIHNlcnZlciBzdXBwb3J0YSBmaWx0ZXIiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBsYSByaWNoaWVzdGEgc3VsIHJlbW90byIKKworIzogZmV0Y2gtcGFjay5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBzZWN0aW9uIGhlYWRlciAnJXMnIgorbXNnc3RyICJlcnJvcmUgZHVyYW50ZSBsYSBsZXR0dXJhIGRlbGwnaW50ZXN0YXppb25lIGRpIHNlemlvbmUgJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJyVzJywgcmVjZWl2ZWQgJyVzJyIKK21zZ3N0ciAiYXR0ZXNvICclcycsIHJpY2V2dXRvICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIKK21zZ3N0ciAicmlnYSBkaSBjb25mZXJtYSBpbmF0dGVzYTogJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBhY2tzOiAlZCIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdlbGFib3JhemlvbmUgZGVnbGkgYWNrOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjEzMTgKK21zZ2lkICJleHBlY3RlZCBwYWNrZmlsZSB0byBiZSBzZW50IGFmdGVyICdyZWFkeSciCittc2dzdHIgImNpIHNpIGF0dGVuZGV2YSBjaGUgaWwgcGFja2ZpbGUgZm9zc2UgaW52aWF0byBkb3BvICdyZWFkeSciCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICIiCisiY2kgc2kgYXR0ZW5kZXZhIGNoZSBuZXNzdW4nYWx0cmEgc2V6aW9uZSBmb3NzZSBpbnZpYXRhIGluIGFzc2VuemEgZGkgJ3JlYWR5JyIKKworIzogZmV0Y2gtcGFjay5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBzaGFsbG93IGluZm86ICVkIgorbXNnc3RyICJlcnJvcmUgZHVyYW50ZSBsJ2VsYWJvcmF6aW9uZSBkZWxsZSBpbmZvcm1hemlvbmkgc2hhbGxvdzogJWQiCisKKyM6IGZldGNoLXBhY2suYzoxNDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHdhbnRlZC1yZWYsIGdvdCAnJXMnIgorbXNnc3RyICJhdHRlc28gd2FudGVkLXJlZiwgcmljZXZ1dG8gJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIgorbXNnc3RyICJ3YW50ZWQtcmVmIGluYXR0ZXNvOiAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdlbGFib3JhemlvbmUgZGVpIHJpZmVyaW1lbnRpIGRlc2lkZXJhdGk6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICJuZXNzdW4gaGVhZCByZW1vdG8gY29ycmlzcG9uZGVudGUiCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODgKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAiaWwgcmVtb3RvIG5vbiBoYSBpbnZpYXRvIHR1dHRpIGdsaSBvZ2dldHRpIG5lY2Vzc2FyaSIKKworIzogZmV0Y2gtcGFjay5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJyaWZlcmltZW50byByZW1vdG8gbm9uIGVzaXN0ZW50ZTogJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICJJbCBzZXJ2ZXIgbm9uIGNvbnNlbnRlIHJpY2hpZXN0ZSBwZXIgbCdvZ2dldHRvIG5vbiBwdWJibGljaXp6YXRvICVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjIzCittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGlsIGZpbGUgdGVtcG9yYW5lbyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAic2NyaXR0dXJhIGRlbGxhIGZpcm1hIHNlcGFyYXRhIGluICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBncGctaW50ZXJmYWNlLmM6MzkwCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgbm9uIMOoIHJpdXNjaXRvIGEgZmlybWFyZSBpIGRhdGkiCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAiaWdub3JvIGlsIGNvbG9yZSBub24gdmFsaWRvICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCisKKyM6IGdyZXAuYzo2NjgKK21zZ2lkICIiCisiZ2l2ZW4gcGF0dGVybiBjb250YWlucyBOVUxMIGJ5dGUgKHZpYSAtZiA8ZmlsZT4pLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkICIKKyJ3aXRoIC1QIHVuZGVyIFBDUkUgdjIiCittc2dzdHIgIiIKKyJpbCBwYXR0ZXJuIGZvcm5pdG8gKGNvbiAtZiA8ZmlsZT4pIGNvbnRpZW5lIHVuIGJ5dGUgTlVMTC4gQ2nDsiDDqCBzdXBwb3J0YXRvICIKKyJzb2xvIGNvbiAtUCB1c2FuZG8gUENSRSB2MiIKKworIzogZ3JlcC5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyc6IGltcG9zc2liaWxlIGxlZ2dlcmUgJXMiCisKKyM6IGdyZXAuYzoyMTQxIHNldHVwLmM6MTY1IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAic3RhdCBkaSAnJXMnIG5vbiByaXVzY2l0byIKKworIzogZ3JlcC5jOjIxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAiJyVzJzogbGV0dHVyYSB0cm9wcG8gYnJldmUiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJjcmVhIHVuJ2FyZWEgZGkgbGF2b3JvICh2ZWRpIGFuY2hlOiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICJsYXZvcmEgc3VsbGUgbW9kaWZpY2hlIGNvcnJlbnRpICh2ZWRpIGFuY2hlOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiZXNhbWluYSBsYSBjcm9ub2xvZ2lhIGUgbG8gc3RhdG8gKHZlZGkgYW5jaGU6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgImF1bWVudGEsIGNvbnRyYXNzZWduYSBlIG1ldHRpIGEgcHVudG8gbGEgY3Jvbm9sb2dpYSBjb211bmUiCisKKyM6IGhlbHAuYzoyNworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAiY29sbGFib3JhICh2ZWRpIGFuY2hlOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorCisjOiBoZWxwLmM6MzEKK21zZ2lkICJNYWluIFBvcmNlbGFpbiBDb21tYW5kcyIKK21zZ3N0ciAiQ29tYW5kaSBwcmluY2lwYWxpIGRpIGFsdG8gbGl2ZWxsbyIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJDb21hbmRpIC8gb3BlcmF6aW9uaSBkaSBtYW5pcG9sYXppb25lIGF1c2lsaWFyaSIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiQ29tYW5kaSAvIG9wZXJhemlvbmkgZGkgaW50ZXJyb2dhemlvbmUgYXVzaWxpYXJpIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAiSW50ZXJhemlvbmUgY29uIGFsdHJpIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIkNvbWFuZGkgLyBvcGVyYXppb25pIGRpIG1hbmlwb2xhemlvbmUgZGkgYmFzc28gbGl2ZWxsbyIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAiQ29tYW5kaSAvIG9wZXJhemlvbmkgZGkgaW50ZXJyb2dhemlvbmUgZGkgYmFzc28gbGl2ZWxsbyIKKworIzogaGVscC5jOjM3Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2luZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgIkNvbWFuZGkgZGkgYmFzc28gbGl2ZWxsbyAvIFNpbmNyb25penphemlvbmUgcmVwb3NpdG9yeSIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAiQ29tYW5kaSBkaSBiYXNzbyBsaXZlbGxvIC8gRnVuemlvbmkgaGVscGVyIGludGVybmUiCisKKyM6IGhlbHAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICJjb21hbmRpIGdpdCBkaXNwb25pYmlsaSBpbiAnJXMnIgorCisjOiBoZWxwLmM6MzA1Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICJjb21hbmRpIGdpdCBkaXNwb25pYmlsaSBhbHRyb3ZlIG5lbCB0dW8gJFBBVEgiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIlF1ZXN0aSBzb25vIGkgY29tYW5kaSBHaXQgY29tdW5pIHVzYXRpIGluIHZhcmllIHNpdHVhemlvbmk6IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgInRpcG8gZWxlbmNvIGNvbWFuZGkgbm9uIHN1cHBvcnRhdG86ICclcyciCisKKyM6IGhlbHAuYzo0MDMKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAiTGUgZ3VpZGUgR2l0IGNvbXVuaSBzb25vOiIKKworIzogaGVscC5jOjUxMgorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyB0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCIKK21zZ3N0ciAiIgorIlZlZGkgJ2dpdCBoZWxwIDxjb21hbmRvPicgcGVyIHNhcGVybmUgZGkgcGnDuSBzdSB1biBzb3R0b2NvbWFuZG8gc3BlY2lmaWNvIgorCisjOiBoZWxwLmM6NTE3Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIkNvbWFuZGkgZXN0ZXJuaSIKKworIzogaGVscC5jOjUzMgorbXNnaWQgIkNvbW1hbmQgYWxpYXNlcyIKK21zZ3N0ciAiQWxpYXMgY29tYW5kaSIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyInJXMnIHNlbWJyYSBlc3NlcmUgdW4gY29tYW5kbyBnaXQsIG1hIG5vbiDDqCBzdGF0b1xuIgorInBvc3NpYmlsZSBlc2VndWlybG8uIEZvcnNlIGdpdC0lcyDDqCBjb3Jyb3R0bz8iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiT2ggb2guIElsIHR1byBzaXN0ZW1hIG5vbiByaXBvcnRhIGFsY3VuIGNvbWFuZG8gR2l0LiIKKworIzogaGVscC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJBVFRFTlpJT05FOiBoYWkgY2hpYW1hdG8gdW4gY29tYW5kbyBHaXQgJyVzJyBpbmVzaXN0ZW50ZS4iCisKKyM6IGhlbHAuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiQ29udGludW8gYXNzdW1lbmRvIGNoZSBpbnRlbmRlc3NpICclcycuIgorCisjOiBoZWxwLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgaW4gJTAuMWYgc2Vjb25kcywgYXNzdW1pbmcgdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIkNvbnRpbnVvIGZyYSAlMC4xZiBzZWNvbmRpIGFzc3VtZW5kbyBjaGUgaW50ZW5kZXNzaSAnJXMnLiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgbm9uIMOoIHVuIGNvbWFuZG8gZ2l0LiBWZWRpICdnaXQgLS1oZWxwJy4iCisKKyM6IGhlbHAuYzo2OTkKK21zZ2lkICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kIGlzIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kcyBhcmUiCittc2dzdHJbMF0gIiIKKyJcbiIKKyJJbCBjb21hbmRvIG1hZ2dpb3JtZW50ZSBzaW1pbGUgw6giCittc2dzdHJbMV0gIiIKKyJcbiIKKyJJIGNvbWFuZGkgbWFnZ2lvcm1lbnRlIHNpbWlsaSBzb25vIgorCisjOiBoZWxwLmM6NzE0Cittc2dpZCAiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB2ZXJzaW9uIFs8b3B6aW9uaT5dIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKKworIzogaGVscC5jOjc4NworbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIkludGVuZGV2aSBxdWVzdG8/IgorbXNnc3RyWzFdICIiCisiXG4iCisiSW50ZW5kZXZpIHVubyBkaSBxdWVzdGk/IgorCisjOiBpZGVudC5jOjM0OQorbXNnaWQgIiIKKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBEaW1taSBjaGkgc2VpLlxuIgorIlxuIgorIkVzZWd1aVxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwidHVAZXNlbXBpby5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJJbCB0dW8gbm9tZVwiXG4iCisiXG4iCisicGVyIGltcG9zdGFyZSBsJ2lkZW50aXTDoCBwcmVkZWZpbml0YSBkZWwgdHVvIGFjY291bnQuXG4iCisiT21ldHRpIC0tZ2xvYmFsIHBlciBpbXBvc3RhcmUgbCdpZGVudGl0w6Agc29sbyBpbiBxdWVzdG8gcmVwb3NpdG9yeS5cbiIKKyJcbiIKKworIzogaWRlbnQuYzozNzkKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICIiCisibmVzc3VuIGluZGlyaXp6byBlLW1haWwgc3BlY2lmaWNhdG8gZSByaWxldmFtZW50byBhdXRvbWF0aWNvIGRpc2FiaWxpdGF0byIKKworIzogaWRlbnQuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHJpbGV2YXJlIGF1dG9tYXRpY2FtZW50ZSBsJ2luZGlyaXp6byBlLW1haWwgKGhvIHJpY2F2YXRvICclcycpIgorCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAibmVzc3VuIG5vbWUgc3BlY2lmaWNhdG8gZSByaWxldmFtZW50byBhdXRvbWF0aWNvIGRpc2FiaWxpdGF0byIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlsZXZhcmUgYXV0b21hdGljYW1lbnRlIGlsIG5vbWUgKGhvIHJpY2F2YXRvICclcycpIgorCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgIm5vbWUgaWRlbnQgdnVvdG8gKHBlciA8JXM+KSBub24gY29uc2VudGl0byIKKworIzogaWRlbnQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZSBjb25zaXN0cyBvbmx5IG9mIGRpc2FsbG93ZWQgY2hhcmFjdGVyczogJXMiCittc2dzdHIgImlsIG5vbWUgw6ggY29tcG9zdG8gc29sbyBkYSBjYXJhdHRlcmkgbm9uIGNvbnNlbnRpdGk6ICVzIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0byBkYXRhIG5vbiB2YWxpZG86ICVzIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICJsYSB2b2NlICclcycgbmVsbCdhbGJlcm8gJXMgaGEgbGEgbW9kYWxpdMOgIGFsYmVybywgbWEgbm9uIMOoIHVuIGFsYmVybyIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAibGEgdm9jZSAnJXMnIG5lbGwnYWxiZXJvICVzIGhhIGxhIG1vZGFsaXTDoCBibG9iLCBtYSBub24gw6ggdW4gYmxvYiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjYXJpY2FyZSBsJ2FsYmVybyByYWRpY2UgcGVyIGlsIGNvbW1pdCAlcyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFjY2VkZXJlIGFsIGJsb2Igc3BhcnNlIGluICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBpIGRhdGkgZmlsdHJvIHNwYXJzZSBpbiAlcyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NTgKK21zZ2lkICJleHBlY3RlZCAndHJlZTo8ZGVwdGg+JyIKK21zZ3N0ciAiYXR0ZXNvICd0cmVlOjxwcm9mb25kaXTDoD4nIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo3MworbXNnaWQgInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIgorbXNnc3RyICJpbCBzdXBwb3J0byBwZXIgaSBmaWx0cmkgc3BhcnNlOnBlcmNvcnNvIMOoIHN0YXRvIHJpbW9zc28iCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAic3BlY2lmaWNhdG9yZSBmaWx0cm8gJyVzJyBub24gdmFsaWRvIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVzdCBlc2NhcGUgY2hhciBpbiBzdWItZmlsdGVyLXNwZWM6ICclYyciCittc2dzdHIgIiIKKyLDqCBuZWNlc3NhcmlvIGVzZWd1aXJlIGwnZXNjYXBlIGRlbCBjYXJhdHRlcmUgbmVsbG8gc3BlY2lmaWNhdG9yZSBkZWwgIgorInNvdHRvZmlsdHJvOiAnJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgImF0dGVzbyBxdWFsY29zYSBkb3BvIGxhIHJpY29tYmluYXppb25lOiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSBjb21iaW5hcmUgcGnDuSBzcGVjaWZpY2F0b3JpIGZpbHRybyIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGNyZWFyZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIlNlbWJyYSBjaGUgdW4gYWx0cm8gcHJvY2Vzc28gZ2l0IHNpYSBpbiBlc2VjdXppb25lIGluIHF1ZXN0byByZXBvc2l0b3J5LCBhZCAiCisiZXMuXG4iCisidW4gZWRpdG9yIGFwZXJ0byBkYSAnZ2l0IGNvbW1pdCcuIEFzc2ljdXJhdGkgY2hlIHR1dHRpIGkgcHJvY2Vzc2lcbiIKKyJzaWFubyB0ZXJtaW5hdGksIHF1aW5kaSByaXByb3ZhLiBTZSBsJ29wZXJhemlvbmUgY29udGludWEgYSBub24gcml1c2NpcmUsIMOoXG4iCisicG9zc2liaWxlIGNoZSB1biBwcm9jZXNzbyBnaXQgc2lhIGFuZGF0byBpbiBjcmFzaCBpbiBxdWVzdG8gcmVwb3NpdG9yeVxuIgorImluIHByZWNlZGVuemE6IHJpbXVvdmkgbWFudWFsbWVudGUgaWwgZmlsZSBwZXIgY29udGludWFyZS4iCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlICclcy5sb2NrJzogJXMiCisKKyM6IG1lcmdlLmM6NDEKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgImxldHR1cmEgZGVsbGEgY2FjaGUgbm9uIHJpdXNjaXRhIgorCisjOiBtZXJnZS5jOjEwNyByZXJlcmUuYzo3MjAgYnVpbHRpbi9hbS5jOjE4NzQgYnVpbHRpbi9hbS5jOjE5MDgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MzkgYnVpbHRpbi9jaGVja291dC5jOjc5OCBidWlsdGluL2Nsb25lLmM6ODA5CisjOiBidWlsdGluL3N0YXNoLmM6MjY0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBudW92byBmaWxlIGluZGV4IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjcKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKGNvbW1pdCBub24gdmFsaWRvKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRfY2FjaGVpbmZvIG5vbiByaXVzY2l0byBwZXIgaWwgcGVyY29yc28gJyVzJzsgaW50ZXJyb21wbyBpbCBtZXJnZS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorImFnZ2lvcm5hbWVudG8gYWRkX2NhY2hlaW5mbyBub24gcml1c2NpdG8gcGVyIGlsIHBlcmNvcnNvICclcyc7IGludGVycm9tcG8gaWwgIgorIm1lcmdlLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgImNyZWF6aW9uZSBkZWwgcGVyY29yc28gJyVzJyBub24gcml1c2NpdGElcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIlJpbXVvdm8gJXMgcGVyIGZhcmUgc3BhemlvIGFsbGEgc290dG9kaXJlY3RvcnlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTEwIG1lcmdlLXJlY3Vyc2l2ZS5jOjkyOQorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogZm9yc2Ugc2kgdHJhdHRhIGRpIHVuIGNvbmZsaXR0byBEL0Y/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJtaSByaWZpdXRvIGRpIHBlcmRlcmUgdW4gZmlsZSBub24gdHJhY2NpYXRvIGluICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk2MCBidWlsdGluL2NhdC1maWxlLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgbCdvZ2dldHRvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICJhdHRlc28gYmxvYiBwZXIgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyc6ICVzIgorbXNnc3RyICJhcGVydHVyYSBkaSAnJXMnIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgImNyZWF6aW9uZSBkZWwgY29sbGVnYW1lbnRvIHNpbWJvbGljbyAnJXMnIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAibm9uIHNvIGNoZSBmYXJlIGNvbiAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiTWVyZ2UgZGVsIHNvdHRvbW9kdWxvICVzIG5vbiByaXVzY2l0byAoY2hlY2tvdXQgbm9uIGVzZWd1aXRvKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAiTWVyZ2UgZGVsIHNvdHRvbW9kdWxvICVzIG5vbiByaXVzY2l0byAoY29tbWl0IG5vbiBwcmVzZW50aSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBkb24ndCBmb2xsb3cgbWVyZ2UtYmFzZSkiCittc2dzdHIgIiIKKyJNZXJnZSBkZWwgc290dG9tb2R1bG8gJXMgbm9uIHJpdXNjaXRvIChpIGNvbW1pdCBub24gc2VndW9ubyBsYSBiYXNlIGRlbCAiCisibWVyZ2UpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjIxIG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyB0byB0aGUgZm9sbG93aW5nIGNvbW1pdDoiCittc2dzdHIgIkVzZWd1byBpbCBmYXN0IGZvcndhcmQgZGVsIHNvdHRvbW9kdWxvICVzIGFsIHNlZ3VlbnRlIGNvbW1pdDoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjQgbWVyZ2UtcmVjdXJzaXZlLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIgorbXNnc3RyICJFc2VndW8gaWwgZmFzdCBmb3J3YXJkIGRlbCBzb3R0b21vZHVsbyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtZXJnZSBmb2xsb3dpbmcgY29tbWl0cyBub3QgZm91bmQpIgorbXNnc3RyICIiCisiTWVyZ2UgZGVsIHNvdHRvbW9kdWxvICVzIG5vbiByaXVzY2l0byAobWVyZ2UgZG9wbyBpIGNvbW1pdCBub24gdHJvdmF0bykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIk1lcmdlIGRlbCBzb3R0b21vZHVsbyAlcyBub24gcml1c2NpdG8gKG5vbiBmYXN0IGZvcndhcmQpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY0Cittc2dpZCAiRm91bmQgYSBwb3NzaWJsZSBtZXJnZSByZXNvbHV0aW9uIGZvciB0aGUgc3VibW9kdWxlOlxuIgorbXNnc3RyICJUcm92YXRhIHBvc3NpYmlsZSByaXNvbHV6aW9uZSBtZXJnZSBwZXIgaWwgc290dG9tb2R1bG86XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisiU2Ugw6ggY29ycmV0dGEgYWdnaXVuZ2lsYSBzZW1wbGljZW1lbnRlIGFsbCdpbmRpY2UsIGFkIGVzZW1waW9cbiIKKyJ1c2FuZG86XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJwZXIgYWNjZXR0YXJlIHF1ZXN0byBzdWdnZXJpbWVudG8uXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobXVsdGlwbGUgbWVyZ2VzIGZvdW5kKSIKK21zZ3N0ciAiTWVyZ2UgZGVsIHNvdHRvbW9kdWxvICVzIG5vbiByaXVzY2l0byAocGnDuSBtZXJnZSB0cm92YXRpKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0OQorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICJFc2VjdXppb25lIGRlbCBtZXJnZSBpbnRlcm5vIG5vbiByaXVzY2l0YSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpdW5nZXJlICVzIGFsIGRhdGFiYXNlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiTWVyZ2UgYXV0b21hdGljbyBkaSAlcyBpbiBjb3JzbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgd3JpdGluZyB0byAlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIkVycm9yZTogbWkgcmlmaXV0byBkaSBwZXJkZXJlIGlsIGZpbGUgbm9uIHRyYWNjaWF0byAlczsgc2NyaXZvIGludmVjZSBpbiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAoJXMvZWxpbWluYXppb25lKTogJXMgZWxpbWluYXRvIGluICVzIGUgJXMgaW4gJXMuIFZlcnNpb25lICVzIGRpICIKKyIlcyBsYXNjaWF0YSBuZWxsJ2FsYmVyby4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAoJXMvZWxpbWluYXppb25lKTogJXMgZWxpbWluYXRvIGluICVzIGUgJXMgY29tZSAlcyBpbiAlcy4gVmVyc2lvbmUgIgorIiVzIGRpICVzIGxhc2NpYXRhIG5lbGwnYWxiZXJvLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiQ09ORkxJVFRPICglcy9lbGltaW5hemlvbmUpOiAlcyBlbGltaW5hdG8gaW4gJXMgZSAlcyBpbiAlcy4gVmVyc2lvbmUgJXMgZGkgIgorIiVzIGxhc2NpYXRhIG5lbGwnYWxiZXJvIGluICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiQ09ORkxJVFRPICglcy9lbGltaW5hemlvbmUpOiAlcyBlbGltaW5hdG8gaW4gJXMgZSAlcyBjb21lICVzIGluICVzLiBWZXJzaW9uZSAiCisiJXMgZGkgJXMgbGFzY2lhdGEgbmVsbCdhbGJlcm8gaW4gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTM0Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICJyaWRlbm9taW5hemlvbmUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJyaW5vbWluYXRvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjE0IG1lcmdlLXJlY3Vyc2l2ZS5jOjI1MzAgbWVyZ2UtcmVjdXJzaXZlLmM6MzE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgJXMiCittc2dzdHIgIk1pIHJpZml1dG8gZGkgcGVyZGVyZSB1biBmaWxlIHNwb3JjbyBpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzLCBldmVuIHRob3VnaCBpdCdzIGluIHRoZSB3YXkuIgorbXNnc3RyICIiCisiTWkgcmlmaXV0byBkaSBwZXJkZXJlIHVuIGZpbGUgbm9uIHRyYWNjaWF0byBpbiAlcywgYmVuY2jDqSBzaWEgZCdvc3RhY29sby4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAgQWRkZWQgJXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElUVE8gKHJpZGVub21pbmF6aW9uZS9hZ2dpdW50YSk6IGVsZW1lbnRvIHJpZGVub21pbmF0byAlcy0+JXMgaW4gJXMuICVzICIKKyJhZ2dpdW50byBpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMgw6ggdW5hIGRpcmVjdG9yeSBpbiAlczsgbGEgYWdnaXVuZ28gY29tZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiTWkgcmlmaXV0byBkaSBwZXJkZXJlIHVuIGZpbGUgbm9uIHRyYWNjaWF0byBpbiAlczsgbG8gYWdnaXVuZ28gY29tZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiQ09ORkxJVFRPIChyaWRlbm9taW5hemlvbmUvcmlkZW5vbWluYXppb25lKTogZmlsZSByaWRlbm9taW5hdG8gXCIlc1wiLT5cIiVzIgorIlwiIG5lbCBicmFuY2ggXCIlc1wiLCByaWRlbm9taW5hdG8gXCIlc1wiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NDIKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAobGFzY2lhdG8gaXJyaXNvbHRvKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElUVE8gKHJpZGVub21pbmF6aW9uZS9yaWRlbm9taW5hemlvbmUpOiBmaWxlIHJpZGVub21pbmF0byAlcy0+JXMgaW4gJXMuICIKKyJSaWRlbm9taW5hdG8gJXMtPiVzIGluICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAoc3BsaXQgcmlkZW5vbWluYXppb25lIGRpcmVjdG9yeSk6IG5vbiDDqCBjaGlhcm8gZG92ZSBjb2xsb2NhcmUgJXMgIgorInBlcmNow6kgbGEgZGlyZWN0b3J5ICVzIMOoIHN0YXRhIHJpZGVub21pbmF0YSBpbiBwacO5IGRpcmVjdG9yeSBkaXZlcnNlIGUgIgorIm5lc3N1bmEgZGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZSBjb250aWVuZSBsYSBtYWdnaW9yIHBhcnRlIGRlaSBmaWxlLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUVE8gKHJpZGVub21pbmF6aW9uZSBkaXJlY3RvcnkgaW1wbGljaXRhKTogaWwgZmlsZS9kaXJlY3RvcnkgZXNpc3RlbnRlICIKKyIlcyDDqCBkJ29zdGFjb2xvIGFsbGUgc2VndWVudGkgcmlkZW5vbWluYXppb25pIGRpcmVjdG9yeSBjaGUgc3Bvc3Rhbm8gaW4gdGFsZSAiCisicG9zaXppb25lIGkgc2VndWVudGkgcGVyY29yc2k6ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyJDT05GTElUVE8gKHJpZGVub21pbmF6aW9uZSBkaXJlY3RvcnkgaW1wbGljaXRhKTogaW1wb3NzaWJpbGUgbWFwcGFyZSBwacO5IGRpICIKKyJ1biBwZXJjb3JzbyBpbiAlczsgZGVsbGUgcmlkZW5vbWluYXppb25pIGRpcmVjdG9yeSBpbXBsaWNpdGUgaGFubm8gdGVudGF0byAiCisiZGkgc3Bvc3RhcmUgaW4gdGFsZSBwb3NpemlvbmUgaSBzZWd1ZW50aSBwZXJjb3JzaTogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIGRpcmVjdG9yeSAlcy0+JXMgaW4gJXMuIFJlbmFtZSBkaXJlY3RvcnkgJXMtIgorIj4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocmlkZW5vbWluYXppb25lL3JpZGVub21pbmF6aW9uZSk6IGRpcmVjdG9yeSByaWRlbm9taW5hdGEgJXMtPiVzICIKKyJpbiAlcy4gRGlyZWN0b3J5IHJpZGVub21pbmF0YSAlcy0+JXMgaW4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIkFUVEVOWklPTkU6IGV2aXRvIGRpIGFwcGxpY2FyZSBsYSByaWRlbm9taW5hemlvbmUgJXMgLT4gJXMgYSAlcyBwZXJjaMOpICVzICIKKyJzdGVzc28gw6ggc3RhdG8gcmlkZW5vbWluYXRvLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgbCdvZ2dldHRvICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICJsJ29nZ2V0dG8gJXMgbm9uIMOoIHVuIGJsb2IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIm1vZGlmaWNhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIm1vZGlmaWNhdG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwOTgKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICJjb250ZW51dG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMDIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICJhZ2dpdW50YS9hZ2dpdW50YSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIk9tZXNzbyAlcyAoZWxlbWVudG8gc290dG9wb3N0byBhIG1lcmdlIHVndWFsZSBhIHF1ZWxsbyBlc2lzdGVudGUpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ3IGdpdC1zdWJtb2R1bGUuc2g6OTkzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzb3R0b21vZHVsbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiQ09ORkxJVFRPICglcyk6IGNvbmZsaXR0byBkaSBtZXJnZSBpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiTG8gYWdnaXVuZ28gY29tZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJQZXJjb3JzbyBhZ2dpb3JuYXRvOiAlcyBhZ2dpdW50byBpbiAlcyBpbiB1bmEgZGlyZWN0b3J5IHJpZGVub21pbmF0YSBpbiAlczsgIgorImxvIHNwb3N0byBpbiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgIgorImluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocG9zaXppb25lIGZpbGUpOiAlcyBhZ2dpdW50byBpbiAlcyBpbiB1bmEgZGlyZWN0b3J5IHJpZGVub21pbmF0YSAiCisiaW4gJXMsIGlsIGNoZSBzdWdnZXJpc2NlIGNoZSBmb3JzZSBkb3ZyZWJiZSBlc3NlcmUgc3Bvc3RhdG8gaW4gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICIKKyIlczsgbW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIlBlcmNvcnNvIGFnZ2lvcm5hdG86ICVzIHJpZGVub21pbmF0byBpbiAlcyBpbiAlcyBpbiB1bmEgZGlyZWN0b3J5ICIKKyJyaWRlbm9taW5hdGEgaW4gJXM7IGxvIHNwb3N0byBpbiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgIgorIndhcyByZW5hbWVkIGluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAocG9zaXppb25lIGZpbGUpOiAlcyByaWRlbm9taW5hdG8gaW4gJXMgaW4gJXMgaW4gdW5hIGRpcmVjdG9yeSAiCisicmlkZW5vbWluYXRhIGluICVzLCBpbCBjaGUgc3VnZ2VyaXNjZSBjaGUgZm9yc2UgZG92cmViYmUgZXNzZXJlIHNwb3N0YXRvIGluICIKKyIlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIlJpbW96aW9uZSBkaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQwOAorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJmaWxlL2RpcmVjdG9yeSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQxMworbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJkaXJlY3RvcnkvZmlsZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRUTyAoJXMpOiB1bmEgZGlyZWN0b3J5IGRlbm9taW5hdGEgJXMgZXNpc3RlIGdpw6AgaW4gJXMuIEFnZ2l1bmdvICVzICIKKyJjb21lICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiQWdnaXVudGEgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKGFkZC9hZGQpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiQ09ORkxJVFRPIChhZ2dpdW5naS9hZ2dpdW5naSk6IGNvbmZsaXR0byBkaSBtZXJnZSBpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ4MgorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSEiCittc2dzdHIgIkdpw6AgYWdnaW9ybmF0byEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICJtZXJnZSBkZWdsaSBhbGJlcmkgJXMgZSAlcyBub24gcml1c2NpdG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1OTUKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiTWVyZ2UgaW4gY29yc286IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICJ0cm92YXRvICV1IGFudGVuYXRvIGNvbXVuZToiCittc2dzdHJbMV0gInRyb3ZhdGkgJXUgYW50ZW5hdGkgY29tdW5pOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY1OAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAiaWwgbWVyZ2Ugbm9uIGhhIHJlc3RpdHVpdG8gYWxjdW4gY29tbWl0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisiTGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgYWkgc2VndWVudGkgZmlsZSBzYXJlYmJlcm8gc292cmFzY3JpdHRlIGRhbCBtZXJnZTpcbiIKKyIgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ29nZ2V0dG8gJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgzMiBidWlsdGluL21lcmdlLmM6Njk0IGJ1aWx0aW4vbWVyZ2UuYzo4NzQKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBsJ2luZGljZS4iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJpbCBmaWxlIG11bHRpLXBhY2staW5kZXggJXMgw6ggdHJvcHBvIHBpY2NvbG8iCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAibGEgZmlybWEgZGVsIG11bHRpLXBhY2staW5kZXggMHglMDh4IG5vbiBjb3JyaXNwb25kZSBhbGxhIGZpcm1hIDB4JTA4eCIKKworIzogbWlkeC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiAlZCBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAidmVyc2lvbmUgJWQgbXVsdGktcGFjay1pbmRleCBub24gcmljb25vc2NpdXRhIgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJsYSB2ZXJzaW9uZSBkZWxsJ2hhc2ggJXUgbm9uIGNvcnJpc3BvbmRlIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgIm9mZnNldCBibG9jY28gbm9uIHZhbGlkbyAodHJvcHBvIGdyYW5kZSkiCisKKyM6IG1pZHguYzoxMzIKK21zZ2lkICJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICJsJ0lEIGJsb2NjbyBmaW5hbGUgbXVsdGktcGFjay1pbmRleCBjb21wYXJlIHByaW1hIGRpIHF1YW50byBwcmV2aXN0byIKKworIzogbWlkeC5jOjE0NQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiCittc2dzdHIgImRhbCBtdWx0aS1wYWNrLWluZGV4IG1hbmNhIGlsIGJsb2NjbyByaWNoaWVzdG8gcGFjay1uYW1lIgorCisjOiBtaWR4LmM6MTQ3Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBmYW5vdXQgY2h1bmsiCittc2dzdHIgImRhbCBtdWx0aS1wYWNrLWluZGV4IG1hbmNhIGlsIGJsb2NjbyByaWNoaWVzdG8gZmFub3V0IE9JRCIKKworIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgbG9va3VwIGNodW5rIgorbXNnc3RyICJkYWwgbXVsdGktcGFjay1pbmRleCBtYW5jYSBpbCBibG9jY28gcmljaGllc3RvIGxvb2t1cCBPSUQiCisKKyM6IG1pZHguYzoxNTEKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IG9mZnNldHMgY2h1bmsiCittc2dzdHIgImRhbCBtdWx0aS1wYWNrLWluZGV4IG1hbmNhIGlsIGJsb2NjbyByaWNoaWVzdG8gb2Zmc2V0IG9nZ2V0dGkiCisKKyM6IG1pZHguYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAibm9taSBwYWNrIG11bHRpLXBhY2staW5kZXggaW4gZGlzb3JkaW5lOiAnJXMnIGFwcGFyZSBwcmltYSBkaSAnJXMnIgorCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAicGFjay1pbnQtaWQgbm9uIHZhbGlkbzogJXUgKCV1IHBhY2sgdG90YWxpKSIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorIm5lbCBtdWx0aS1wYWNrLWluZGV4IMOoIHNhbHZhdG8gdW4gb2Zmc2V0IGEgNjQgYml0LCBtYSBvZmZfdCDDqCB0cm9wcG8gcGljY29sbyIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGxhIHByZXBhcmF6aW9uZSBkZWwgcGFja2ZpbGUgZGFsIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJhZ2dpdW50YSBkZWwgcGFja2ZpbGUgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICJhcGVydHVyYSBkZWwgcGFjay1pbmRleCAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAicmljZXJjYSBkZWxsJ29nZ2V0dG8gJWQgbmVsIHBhY2tmaWxlIG5vbiByaXVzY2l0YSIKKworIzogbWlkeC5jOjg0MgorbXNnaWQgIkFkZGluZyBwYWNrZmlsZXMgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiQWdnaXVudGEgZGVpIGZpbGUgcGFjayBhbCBtdWx0aS1wYWNrLWluZGV4IGluIGNvcnNvIgorCisjOiBtaWR4LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3Qgc2VlIHBhY2stZmlsZSAlcyB0byBkcm9wIgorbXNnc3RyICJub24gaG8gdmlzdG8gaWwgZmlsZSBwYWNrICVzIGRhIHNjYXJ0YXJlIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiU2NyaXR0dXJhIGRlaSBjaHVuayBuZWwgbXVsdGktcGFjay1pbmRleCBpbiBjb3JzbyIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgInB1bGl6aWEgZGVsIG11bHRpLXBhY2staW5kZXggJXMgbm9uIHJpdXNjaXRhIgorCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJSaWNlcmNhIGRpIGZpbGUgcGFjayByZWZlcmVuemlhdGkgaW4gY29yc28iCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCittc2dzdHIgIiIKKyJmYW5vdXQgb2lkIGluIGRpc29yZGluZTogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCisKKyM6IG1pZHguYzoxMTI4Cittc2dpZCAiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJWZXJpZmljYSBvcmRpbmUgT0lEIG5lbCBtdWx0aS1wYWNrLWluZGV4IGluIGNvcnNvIgorCisjOiBtaWR4LmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJvaWQgbG9va3VwIG91dCBvZiBvcmRlcjogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKK21zZ3N0ciAibG9va3VwIG9pZCBpbiBkaXNvcmRpbmU6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCisKKyM6IG1pZHguYzoxMTU3Cittc2dpZCAiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIgorbXNnc3RyICJPcmRpbmFtZW50byBkZWdsaSBvZ2dldHRpIG5lbCBwYWNrZmlsZSBpbiBjb3JzbyIKKworIzogbWlkeC5jOjExNjQKK21zZ2lkICJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiCittc2dzdHIgIlZlcmlmaWNhIG9mZnNldCBvZ2dldHRpIGluIGNvcnNvIgorCisjOiBtaWR4LmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrIGVudHJ5IGZvciBvaWRbJWRdID0gJXMiCittc2dzdHIgImNhcmljYW1lbnRvIHZvY2UgcGFjayBwZXIgb2lkWyVkXSA9ICVzIG5vbiByaXVzY2l0byIKKworIzogbWlkeC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjay1pbmRleCBmb3IgcGFja2ZpbGUgJXMiCittc2dzdHIgImNhcmljYW1lbnRvIHBhY2staW5kZXggcGVyIGlsIHBhY2tmaWxlICVzIG5vbiByaXVzY2l0byIKKworIzogbWlkeC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQgZm9yIG9pZFslZF0gPSAlczogJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKK21zZ3N0ciAib2Zmc2V0IG9nZ2V0dG8gbm9uIGNvcnJldHRvIHBlciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCisKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJDb250ZWdnaW8gZGVnbGkgb2dnZXR0aSByZWZlcmVuemlhdGkgaW4gY29yc28iCisKKyM6IG1pZHguYzoxMjMwCittc2dpZCAiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ3N0ciAiUmljZXJjYSBlZCBlbGltaW5hemlvbmUgZGVpIGZpbGUgcGFjayBub24gcmVmZXJlbnppYXRpIGluIGNvcnNvIgorCisjOiBtaWR4LmM6MTM4OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMiCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgcGFjay1vYmplY3RzIgorCisjOiBtaWR4LmM6MTQwNworbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBmaW5pcmUgcGFjay1vYmplY3RzIgorCisjOiBuYW1lLWhhc2guYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X2RpciB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgdGhyZWFkIGxhenlfZGlyOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBpbCB0aHJlYWQgbGF6eV9uYW1lOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBibG9jY2FyZSBpbCB0aHJlYWQgbGF6eV9uYW1lOiAlcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisiTm9uIGhhaSBjb25jbHVzbyBpbCBtZXJnZSBkZWxsZSBub3RlIHByZWNlZGVudGUgKCVzIGVzaXN0ZSkuXG4iCisiVXNhICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG8gJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyBwZXIgZXNlZ3VpcmUgaWwgIgorImNvbW1pdC9pbnRlcnJvbXBlcmUgaWwgbWVyZ2UgcHJlY2VkZW50ZSBwcmltYSBkaSBpbml6aWFyZSB1biBudW92byBtZXJnZSAiCisiZGVsbGUgbm90ZS4iCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIk5vbiBoYWkgY29uY2x1c28gaWwgbWVyZ2UgZGVsbGUgbm90ZSAoJXMgZXNpc3RlKS4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDYKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21taXQgZGkgdW4gYWxiZXJvIGRlbGxlIG5vdGUgbm9uIGluaXppYWxpenphdG8vbm9uICIKKyJyZWZlcmVuemlhdG8iCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3JlIGRpIG5vdGVzLnJld3JpdGVNb2RlIGVycmF0bzogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIk1pIHJpZml1dG8gZGkgcmlzY3JpdmVyZSBsZSBub3RlIGluICVzIChhbCBkaSBmdW9yaSBkaSByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3JlIGRpICVzIGVycmF0bzogJyVzJyIKKworIzogb2JqZWN0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSBcIiVzXCIiCittc2dzdHIgInRpcG8gb2dnZXR0byBcIiVzXCIgbm9uIHZhbGlkbyIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAibCdvZ2dldHRvICVzIMOoIHVuICVzLCBub24gdW4gJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAibCdvZ2dldHRvICVzIGhhIGwnSUQgdGlwbyBzY29ub3NjaXV0byAlZCIKKworIzogb2JqZWN0LmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnb2dnZXR0bzogJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiaGFzaCBub24gY29ycmlzcG9uZGVudGU6ICVzIgorCisjOiBwYWNrZmlsZS5jOjY0MQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJvZmZzZXQgY29sbG9jYXRvIHByaW1hIGRlbGxhIGZpbmUgZGVsIHBhY2tmaWxlICguaWR4IGNvcnJvdHRvPykiCisKKyM6IHBhY2tmaWxlLmM6MTg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgIiIKKyJvZmZzZXQgY29sbG9jYXRvIHByaW1hIGRlbGwnaW5pemlvIGRlbGwnaW5kaWNlIHBhY2sgcGVyICVzIChpbmRpY2UgY29ycm90dG8/KSIKKworIzogcGFja2ZpbGUuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2sgaW5kZXggZm9yICVzICh0cnVuY2F0ZWQgaW5kZXg/KSIKK21zZ3N0ciAiIgorIm9mZnNldCBjb2xsb2NhdG8gZG9wbyBsYSBmaW5lIGRlbGwnaW5kaWNlIHBhY2sgcGVyICVzIChpbmRpY2UgdHJvbmNhdG8/KSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiVzIHJpY2hpZWRlIHVuIHZhbG9yZSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluY29tcGF0aWJsZSB3aXRoICVzIgorbXNnc3RyICIlcyBub24gw6ggY29tcGF0aWJpbGUgY29uICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiJXMgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiBxdWFsY29zJ2FsdHJvIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiVzIG5vbiByaWNoaWVkZSB1biB2YWxvcmUiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiVzIG5vbiDDqCBkaXNwb25pYmlsZSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiIKKyIlcyByaWNoaWVkZSB1biB2YWxvcmUgaW50ZXJvIG5vbiBuZWdhdGl2byBjb24gdW4gc3VmZmlzc28gay9tL2cgZmFjb2x0YXRpdm8iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICJvcHppb25lIGFtYmlndWE6ICVzIChwb3RyZWJiZSBlc3NlcmUgLS0lcyVzIG8gLS0lcyVzKSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMyBwYXJzZS1vcHRpb25zLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIKK21zZ3N0ciAiZm9yc2UgaW50ZW5kZXZpIGAtLSVzYCAoY29uIGR1ZSB0cmF0dGluaSk/IgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIm9wemlvbmUgc2Nvbm9zY2l1dGEgYCVzJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN3aXRjaCBgJWMnIgorbXNnc3RyICJvcHppb25lIGAlY2Agc2Nvbm9zY2l1dGEiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub24tYXNjaWkgb3B0aW9uIGluIHN0cmluZzogYCVzJyIKK21zZ3N0ciAib3B6aW9uZSBub24gQVNDSUkgc2Nvbm9zY2l1dGEgcHJlc2VudGUgbmVsbGEgc3RyaW5nYTogYCVzJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg4OAorbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAidXNvOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgIG9wcHVyZTogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTUKK21zZ2lkICItTlVNIgorbXNnc3RyICItTlVNIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgImFsaWFzIGRpIC0tJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoyMCBwYXJzZS1vcHRpb25zLWNiLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAibCdvcHppb25lIGAlcycgcmljaGllZGUgdW4gdmFsb3JlIG51bWVyaWNvIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICJkYXRhIHNjYWRlbnphICclcycgbWFsZm9ybWF0YSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAibCdvcHppb25lIGAlcycgcmljaGllZGUgXCJhbHdheXNcIiwgXCJhdXRvXCIgbyBcIm5ldmVyXCIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAibm9tZSBvZ2dldHRvICclcycgbWFsZm9ybWF0byIKKworIzogcGF0aC5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmVuZGVyZSAlcyBzY3JpdmliaWxlIGRhbCBncnVwcG8iCisKKyM6IHBhdGhzcGVjLmM6MTMwCittc2dpZCAiRXNjYXBlIGNoYXJhY3RlciAnXFwnIG5vdCBhbGxvd2VkIGFzIGxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiCittc2dzdHIgIiIKKyJDYXJhdHRlcmUgZGkgZXNjYXBlICdcXCcgbm9uIGNvbnNlbnRpdG8gY29tZSB1bHRpbW8gY2FyYXR0ZXJlIGRlbCB2YWxvcmUgIgorImF0dHJpYnV0byIKKworIzogcGF0aHNwZWMuYzoxNDgKK21zZ2lkICJPbmx5IG9uZSAnYXR0cjonIHNwZWNpZmljYXRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIsOIIGNvbnNlbnRpdGEgc29sbyB1bmEgc3BlY2lmaWNhICdhdHRyOicuIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAibGEgc3BlY2lmaWNhIGF0dHIgbm9uIGRldmUgZXNzZXJlIHZ1b3RhIgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICJub21lIGF0dHJpYnV0byAlcyBub24gdmFsaWRvIgorCisjOiBwYXRoc3BlYy5jOjI1OQorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKyJsZSBpbXBvc3RhemlvbmkgZ2xvYmFsaSBzcGVjaWZpY2F0b3JlIHBlcmNvcnNvICdnbG9iJyBlICdub2dsb2InIG5vbiBzb25vICIKKyJjb21wYXRpYmlsaSIKKworIzogcGF0aHNwZWMuYzoyNjYKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisibCdpbXBvc3RhemlvbmUgZ2xvYmFsZSBzcGVjaWZpY2F0b3JlIHBlcmNvcnNvICdsaXRlcmFsJyDDqCBpbmNvbXBhdGliaWxlIGNvbiAiCisidHV0dGUgbGUgYWx0cmUgaW1wb3N0YXppb25pIGdsb2JhbGkgc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyIKKworIzogcGF0aHNwZWMuYzozMDYKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgInBhcmFtZXRybyBwZXIgaWwgbWFnaWMgc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAncHJlZml4JyBub24gdmFsaWRvIgorCisjOiBwYXRoc3BlYy5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICJNYWdpYyBzcGVjaWZpY2F0b3JlIHBlcmNvcnNvICclLipzJyBpbiAnJXMnIG5vbiB2YWxpZG8iCisKKyM6IHBhdGhzcGVjLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAiJyknIG1hbmNhbnRlIGFsbGEgZmluZSBkZWwgbWFnaWMgc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyBpbiAnJXMnIgorCisjOiBwYXRoc3BlYy5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAiTWFnaWMgc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAnJWMnIGluICclcycgbm9uIGltcGxlbWVudGF0byIKKworIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzOiAnbGl0ZXJhbCcgZSAnZ2xvYicgbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IHBhdGhzcGVjLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXM6ICclcycgw6ggYWwgZGkgZnVvcmkgZGVsIHJlcG9zaXRvcnkiCisKKyM6IHBhdGhzcGVjLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiJyVzJyAob3B6aW9uZSBtbmVtb25pY2E6ICclYycpIgorCisjOiBwYXRoc3BlYy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIlczogbWFnaWMgc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyBub24gc3VwcG9ydGF0byBkYSBxdWVzdG8gY29tYW5kbzogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorImxvIHNwZWNpZmljYXRvcmUgcGVyY29yc28gJyVzJyBzaSB0cm92YSBvbHRyZSB1biBjb2xsZWdhbWVudG8gc2ltYm9saWNvIgorCisjOiBwYXRoc3BlYy5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIGlzIGJhZGx5IHF1b3RlZDogJXMiCittc2dzdHIgImxhIHJpZ2Egbm9uIMOoIGJlbiByYWNjaGl1c2EgdHJhIHZpcmdvbGV0dGU6ICVzIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgcGFjY2hldHRvIGZsdXNoIgorCisjOiBwa3QtbGluZS5jOjk5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGRlbGltIHBhY2tldCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgcGFjY2hldHRvIGRlbGltIgorCisjOiBwa3QtbGluZS5jOjEwNgorbXNnaWQgImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgInNjcml0dHVyYSBjb24gZmx1c2ggcGFjY2hldHRvIG5vbiByaXVzY2l0YSIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgImVycm9yZSBwcm90b2NvbGxvOiByaWdhIGltcG9zc2liaWxtZW50ZSBsdW5nYSIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICJzY3JpdHR1cmEgcGFjY2hldHRvIGNvbiBmb3JtYXRvIG5vbiByaXVzY2l0YSIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAiIgorInNjcml0dHVyYSBwYWNjaGV0dG8gbm9uIHJpdXNjaXRhIC0gaSBkYXRpIHNvbm8gcGnDuSBkZWxsYSBkaW1lbnNpb25lIG1hc3NpbWEgIgorInBhY2NoZXR0byIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJzY3JpdHR1cmEgcGFjY2hldHRvIG5vbiByaXVzY2l0YSIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICJlcnJvcmUgZGkgbGV0dHVyYSIKKworIzogcGt0LWxpbmUuYzozMDMKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIKK21zZ3N0ciAibCdpbnRlcmxvY3V0b3JlIHJlbW90byBoYSBjaGl1c28gaW5hc3BldHRhdGFtZW50ZSBsYSBjb25uZXNzaW9uZSIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgImVycm9yZSBwcm90b2NvbGxvOiBjYXJhdHRlcmUgbHVuZ2hlenphIHJpZ2Egbm9uIHZhbGlkbzogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAiZXJyb3JlIHByb3RvY29sbG86IGx1bmdoZXp6YSByaWdhIG5vbiB2YWxpZGE6ICVkIgorCisjOiBwa3QtbGluZS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJlcnJvcmUgcmVtb3RvOiAlcyIKKworIzogcHJlbG9hZC1pbmRleC5jOjExOQorbXNnaWQgIlJlZnJlc2hpbmcgaW5kZXgiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gaW5kaWNlIGluIGNvcnNvIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbHN0YXQgaW4gdmVyc2lvbmUgdGhyZWFkZWQ6ICVzIgorCisjOiBwcmV0dHkuYzo5ODEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGZvcm1hdG8gLS1wcmV0dHkiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjIzCittc2dpZCAiUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJSZW1vdG8gc2VuemEgVVJMIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9taXNvciByZW1vdGUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICJpbCBub21lIGRlbCByZW1vdG8gcHJvbWV0dGVudGUgbm9uIHB1w7IgaW5pemlhcmUgY29uICcvJzogJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXZ2aWFyZSBgbG9nYCIKKworIzogcmFuZ2UtZGlmZi5jOjc3Cittc2dpZCAiY291bGQgbm90IHJlYWQgYGxvZ2Agb3V0cHV0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGwnb3V0cHV0IGRpIGBsb2dgIgorCisjOiByYW5nZS1kaWZmLmM6OTYgc2VxdWVuY2VyLmM6NTE2MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0ICclcyciCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnaGVhZGVyIEdpdCAnJS4qcyciCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAiZ2VuZXJhemlvbmUgZGVsIGRpZmYgbm9uIHJpdXNjaXRhIgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBpbCByZWdpc3RybyBkaSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICJub24gYWdnaXVuZ2Vyw7IgbCdhbGlhcyBmaWxlICclcycgKCclcycgZXNpc3RlIGdpw6AgbmVsbCdpbmRpY2UpIgorCisjOiByZWFkLWNhY2hlLmM6Njk2Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSB1biBibG9iIHZ1b3RvIG5lbCBkYXRhYmFzZSBvZ2dldHRpIgorCisjOiByZWFkLWNhY2hlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisiJXM6IMOoIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHNvbG8gZmlsZSByZWdvbGFyaSwgY29sbGVnYW1lbnRpIHNpbWJvbGljaSBvICIKKyJkaXJlY3RvcnkgR2l0IgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiJyVzJyBub24gaGEgdW4gY29tbWl0IGRpIGN1aSDDqCBzdGF0byBlc2VndWl0byBpbCBjaGVja291dCIKKworIzogcmVhZC1jYWNoZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaW5kZXggZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBpbmRpY2l6emFyZSBpbCBmaWxlICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpdW5nZXJlICclcycgYWxsJ2luZGljZSIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBzdGF0IHN1ICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIiclcycgY29tcGFyZSBzaWEgY29tZSBmaWxlIHNpYSBjb21lIGRpcmVjdG9yeSIKKworIzogcmVhZC1jYWNoZS5jOjE1MzEKK21zZ2lkICJSZWZyZXNoIGluZGV4IgorbXNnc3RyICJBZ2dpb3JuYW1lbnRvIGluZGljZSIKKworIzogcmVhZC1jYWNoZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gaW1wb3N0YXRvLCBtYSBpbCB2YWxvcmUgbm9uIMOoIHZhbGlkby5cbiIKKyJVc28gbGEgdmVyc2lvbmUgJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiR0lUX0lOREVYX1ZFUlNJT04gaW1wb3N0YXRvLCBtYSBpbCB2YWxvcmUgbm9uIMOoIHZhbGlkby5cbiIKKyJVc28gbGEgdmVyc2lvbmUgJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICJmaXJtYSBub24gdmFsaWRhOiAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICJ2ZXJzaW9uZSBpbmRpY2Ugbm9uIHZhbGlkYTogJWQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI0Cittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgImZpcm1hIFNIQTEgZmlsZSBpbmRpY2Ugbm9uIHZhbGlkYSIKKworIzogcmVhZC1jYWNoZS5jOjE3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgImwnaW5kaWNlIHVzYSBsJ2VzdGVuc2lvbmUgJS40cyBjaGUgbm9uIGNvbXByZW5kaWFtbyIKKworIzogcmVhZC1jYWNoZS5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJS40cyBleHRlbnNpb24iCittc2dzdHIgImVzdGVuc2lvbmUgJS40cyBpZ25vcmF0YSIKKworIzogcmVhZC1jYWNoZS5jOjE3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICJmb3JtYXRvIHZvY2UgaW5kaWNlIHNjb25vc2NpdXRvOiAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBuYW1lIGZpZWxkIGluIHRoZSBpbmRleCwgbmVhciBwYXRoICclcyciCittc2dzdHIgImNhbXBvIG5vbWUgbWFsZm9ybWF0byBuZWxsJ2luZGljZSwgdmljaW5vIGFsIHBlcmNvcnNvICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoxODY2Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgaW4gaW5kZXgiCittc2dzdHIgInZvY2kgc3RhZ2Ugbm9uIG9yZGluYXRlIG5lbGwnaW5kaWNlIgorCisjOiByZWFkLWNhY2hlLmM6MTg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBzdGFnZSBlbnRyaWVzIGZvciBtZXJnZWQgZmlsZSAnJXMnIgorbXNnc3RyICJ2b2NpIHN0YWdlIG11bHRpcGxlIHBlciBpbCBmaWxlIHNvdHRvcG9zdG8gYSBtZXJnZSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MTg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIKK21zZ3N0ciAidm9jaSBzdGFnZSBub24gb3JkaW5hdGUgcGVyICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoxOTc4IHJlYWQtY2FjaGUuYzoyMjY2IHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogYnVpbHRpbi9hZGQuYzo0OTkgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzggYnVpbHRpbi9jaGVja291dC5jOjQ3MAorIzogYnVpbHRpbi9jaGVja291dC5jOjY1NCBidWlsdGluL2NsZWFuLmM6OTY3IGJ1aWx0aW4vY29tbWl0LmM6MzY3CisjOiBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0OTkgYnVpbHRpbi9tdi5jOjE0NQorIzogYnVpbHRpbi9yZXNldC5jOjI0NiBidWlsdGluL3JtLmM6MjcxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMzIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgImZpbGUgaW5kaWNlIGNvcnJvdHRvIgorCisjOiByZWFkLWNhY2hlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgdGhyZWFkIGxvYWRfY2FjaGVfZW50cmllczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBibG9jY2FyZSBpbCB0aHJlYWQgbG9hZF9jYWNoZV9lbnRyaWVzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzOiBhcGVydHVyYSBkZWwgZmlsZSBpbmRpY2Ugbm9uIHJpdXNjaXRhIgorCisjOiByZWFkLWNhY2hlLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHN0YXQgdGhlIG9wZW4gaW5kZXgiCittc2dzdHIgIiVzOiBpbXBvc3NpYmlsZSBlc2VndWlyZSBzdGF0IHN1bGwnaW5kaWNlIGFwZXJ0byIKKworIzogcmVhZC1jYWNoZS5jOjIxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlczogZmlsZSBpbmRpY2UgcGnDuSBwaWNjb2xvIGRlbGxhIGRpbWVuc2lvbmUgYXR0ZXNhIgorCisjOiByZWFkLWNhY2hlLmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIlczogaW1wb3NzaWJpbGUgbWFwcGFyZSBpbCBmaWxlIGluZGljZSIKKworIzogcmVhZC1jYWNoZS5jOjIyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGlsIHRocmVhZCBsb2FkX2luZGV4X2V4dGVuc2lvbnM6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYmxvY2NhcmUgaWwgdGhyZWFkIGxvYWRfaW5kZXhfZXh0ZW5zaW9uczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGwnaW5kaWNlIGNvbmRpdmlzbyAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gaW5kZXgsIGV4cGVjdCAlcyBpbiAlcywgZ290ICVzIgorbXNnc3RyICJpbmRpY2UgY29ycm90dG8sIGF0dGVzbyAlcyBpbiAlcywgcHJlc2VudGUgJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMDIxIHN0cmJ1Zi5jOjExNDUgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY2hpdWRlcmUgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjMxMjQgc2VxdWVuY2VyLmM6MjQyOSBzZXF1ZW5jZXIuYzo0MDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGxvIHN0YXQgZGkgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjMxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBsYSBkaXJlY3RvcnkgZ2l0OiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHVubGluazogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNvcnJlZ2dlcmUgaSBwZXJtZXNzaSBkaSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MzMyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiCittc2dzdHIgIiVzOiBpbXBvc3NpYmlsZSByaXBpZWdhcmUgc3VsbG8gc3RhZGlvIDAiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCittc2dzdHIgIiIKKyJpbXBvc3RhemlvbmUgJXMgbm9uIHJpY29ub3NjaXV0YSBwZXIgbCdvcHppb25lIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiAiCisiTGEgaWdub3JvLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzUKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1hbmQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImIsIGJyZWFrID0gc3RvcCBoZXJlIChjb250aW51ZSByZWJhc2UgbGF0ZXIgd2l0aCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJylcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDb21hbmRpOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2EgaWwgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNhIGlsIGNvbW1pdCwgbWEgbW9kaWZpY2EgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdFxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2EgaWwgY29tbWl0LCBtYSBmZXJtYXRpIHBlciBtb2RpZmljYXJsb1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzYSBpbCBjb21taXQsIG1hIGZvbmRpbG8gY29uIGlsIGNvbW1pdCBwcmVjZWRlbnRlXG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBjb21lIFwic3F1YXNoXCIsIG1hIHNjYXJ0YSBpbCBtZXNzYWdnaW8gZGkgbG9nIGRpICIKKyJxdWVzdG9cbiIKKyIgICAgICAgICAgICAgICAgICAgIGNvbW1pdFxuIgorIngsIGV4ZWMgPGNvbWFuZG8+ID0gZXNlZ3VpIGlsIGNvbWFuZG8gKGlsIHJlc3RvIGRlbGxhIHJpZ2EpIHVzYW5kbyBsYSBzaGVsbFxuIgorImIsIGJyZWFrID0gZmVybWF0aSBxdWkgKGNvbnRpbnVhIGlsIHJlYmFzZSBpbiB1biBzZWNvbmRvIG1vbWVudG8gY29uICIKKyInZ2l0ICAgICAgICAgICByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IGVsaW1pbmEgaWwgY29tbWl0XG4iCisibCwgbGFiZWwgPGV0aWNoZXR0YT4gPSBldGljaGV0dGEgbCdIRUFEIGNvcnJlbnRlIGNvbiB1biBub21lXG4iCisidCwgcmVzZXQgPGV0aWNoZXR0YT4gPSByZWltcG9zdGEgSEVBRCBhIHVuJ2V0aWNoZXR0YVxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8ZXRpY2hldHRhPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhIHVuIGNvbW1pdCBkaSBtZXJnZSB1c2FuZG8gaWwgbWVzc2FnZ2lvIGRlbCBjb21taXQgZGkgbWVyZ2VcbiIKKyIuICAgICAgIG9yaWdpbmFsZSAobyBsYSBvbmVsaW5lIHNlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBjb21taXQgZGkgIgorIm1lcmdlXG4iCisiLiAgICAgICBvcmlnaW5hbGUpLiBVc2EgLWMgPGNvbW1pdD4gcGVyIHJpZm9ybXVsYXJlIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQuXG4iCisiXG4iCisiUXVlc3RlIHJpZ2hlIHBvc3Nvbm8gZXNzZXJlIHJpb3JkaW5hdGU7IHNhcmFubm8gZXNlZ3VpdGUgZGFsbGEgcHJpbWEgIgorImFsbCd1bHRpbWEuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiUmViYXNlIGRpICVzIHN1ICVzICglZCBjb21hbmRvKSIKK21zZ3N0clsxXSAiUmViYXNlIGRpICVzIHN1ICVzICglZCBjb21hbmRpKSIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NjUgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIyOAorbXNnaWQgIiIKKyJcbiIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgorbXNnc3RyICIiCisiXG4iCisiTm9uIGVsaW1pbmFyZSBhbGN1bmEgcmlnYS4gVXNhIGVzcGxpY2l0YW1lbnRlICdkcm9wJyBwZXIgcmltdW92ZXJlIHVuICIKKyJjb21taXQuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJSaW11b3ZlbmRvIHVuYSByaWdhIGRhIHF1aSBJTCBDT01NSVQgQ09SUklTUE9OREVOVEUgQU5EUsOAIFBFUkRVVE8uXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTdGFpIG1vZGlmaWNhbmRvIGlsIGZpbGUgdG9kbyBkaSB1biByZWJhc2UgaW50ZXJhdHRpdm8gaW4gY29yc28uXG4iCisiUGVyIGNvbnRpbnVhcmUgaWwgcmViYXNlIGRvcG8gbGEgbW9kaWZpY2EsIGVzZWd1aTpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDgKK21zZ2lkICIiCisiXG4iCisiSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkNpw7Igbm9ub3N0YW50ZSwgc2UgcmltdW92aSB0dXR0bywgaWwgcmViYXNlIHNhcsOgIGFubnVsbGF0by5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODUgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk1NQorbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICJOb3RhIGNoZSBpIGNvbW1pdCB2dW90aSBzb25vIGNvbW1lbnRhdGkiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwNSByZXJlcmUuYzo0ODUgcmVyZXJlLmM6NjkyIHNlcXVlbmNlci5jOjM1MzYKKyM6IHNlcXVlbmNlci5jOjM1NjIgc2VxdWVuY2VyLmM6NTI2MyBidWlsdGluL2ZzY2suYzozNDYgYnVpbHRpbi9yZWJhc2UuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlICclcyciCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcycuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb3BpYXJlICclcycgaW4gJyVzJy4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuXG4iCisiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iCittc2dzdHIgIiIKKyJBdHRlbnppb25lOiDDqCBwb3NzaWJpbGUgY2hlIGFsY3VuaSBjb21taXQgc2lhbm8gc3RhdGkgc2NhcnRhdGkgIgorImFjY2lkZW50YWxtZW50ZS5cbiIKKyJDb21taXQgc2NhcnRhdGkgKGRhbCBwacO5IGFsIG1lbm8gcmVjZW50ZSk6XG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mICIKKyJ3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQZXIgZXZpdGFyZSBxdWVzdG8gbWVzc2FnZ2lvLCB1c2EgXCJkcm9wXCIgcGVyIHJpbXVvdmVyZSB1biBjb21taXRcbiIKKyJlc3BsaWNpdGFtZW50ZS5cbiIKKyJcbiIKKyJVc2EgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHBlciBtb2RpZmljYXJlIGlsIGxpdmVsbG9cbiIKKyJkZWdsaSBhdnZpc2kuXG4iCisiSSBjb21wb3J0YW1lbnRpIHBvc3NpYmlsaSBzb25vIGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICIlcyBub24gcHVudGEgYSB1biBvZ2dldHRvIHZhbGlkbyEiCisKKyM6IHJlZnMuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgZGFuZ2xpbmcgc3ltcmVmICVzIgorbXNnc3RyICJpZ25vcm8gaWwgcmlmZXJpbWVudG8gc2ltYm9saWNvIHBlbmRlbnRlICVzIgorCisjOiByZWZzLmM6NjY5IHJlZi1maWx0ZXIuYzoyMDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGJyb2tlbiByZWYgJXMiCittc2dzdHIgImlnbm9ybyBpbCByaWZlcmltZW50byByb3R0byAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlICclcycgaW4gc2NyaXR0dXJhOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIHJpZmVyaW1lbnRvICclcyciCisKKyM6IHJlZnMuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgImlsIHJpZmVyaW1lbnRvICclcycgZXNpc3RlIGdpw6AiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIklEIG9nZ2V0dG8gaW5hdHRlc28gZHVyYW50ZSBsYSBzY3JpdHR1cmEgZGkgJyVzJyIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6Mjc5MyBzZXF1ZW5jZXIuYzoyOTk3CisjOiBzZXF1ZW5jZXIuYzozMDExIHNlcXVlbmNlci5jOjMyNjkgc2VxdWVuY2VyLmM6NTE3OSBzdHJidWYuYzoxMTQyCisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBzdSAnJXMnIgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNDAgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJyVzJyBpbiBzY3JpdHR1cmEiCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICJJRCBvZ2dldHRvIGluYXR0ZXNvIGR1cmFudGUgbCdlbGltaW5hemlvbmUgZGkgJyVzJyIKKworIzogcmVmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICJpbCByZWdpc3RybyBwZXIgaWwgcmlmZXJpbWVudG8gJXMgaGEgZGVsbGUgdm9jaSBtYW5jYW50aSBkb3BvICVzIgorCisjOiByZWZzLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiCittc2dzdHIgImlsIHJlZ2lzdHJvIHBlciBpbCByaWZlcmltZW50byAlcyDDqCB0ZXJtaW5hdG8gaW5hc3BldHRhdGFtZW50ZSBhICVzIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICJpbCByZWdpc3RybyBwZXIgJXMgw6ggdnVvdG8iCisKKyM6IHJlZnMuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICJtaSByaWZpdXRvIGRpIGFnZ2lvcm5hcmUgaWwgcmlmZXJpbWVudG8gY29uIGlsIG5vbWUgbm9uIHZhbGlkbyAnJXMnIgorCisjOiByZWZzLmM6MTIzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cGRhdGVfcmVmIGZhaWxlZCBmb3IgcmVmICclcyc6ICVzIgorbXNnc3RyICJ1cGRhdGVfcmVmIHBlciBpbCByaWZlcmltZW50byAnJXMnIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IHJlZnMuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJhZ2dpb3JuYW1lbnRpIG11bHRpcGxpIHBlciBpbCByaWZlcmltZW50byAnJXMnIG5vbiBjb25zZW50aXRpIgorCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAiYWdnaW9ybmFtZW50aSByaWZlcmltZW50byB2aWV0YXRpIG5lbGwnYW1iaWVudGUgcXVhcmFudGVuYSIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiJyVzJyBlc2lzdGUgZ2nDoDsgaW1wb3NzaWJpbGUgY3JlYXJlICclcyciCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZ2VzdGlyZSAnJXMnIGUgJyVzJyBjb250ZW1wb3JhbmVhbWVudGUiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJpbXVvdmVyZSBpbCByaWZlcmltZW50byAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0OCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlbGltaW5hcmUgaWwgcmlmZXJpbWVudG8gJXM6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUxIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGVsaW1pbmFyZSBpIHJpZmVyaW1lbnRpOiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAic3BlY2lmaWNhdG9yZSByaWZlcmltZW50byAnJXMnIG5vbiB2YWxpZG8iCisKKyM6IHJlZi1maWx0ZXIuYzo0MiB3dC1zdGF0dXMuYzoxOTM4Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAic3Bhcml0byIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICJkb3BvICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICJwcmltYSBkaSAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgImRvcG8gJWQsIHByaW1hIGRpICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgImZvcm1hdG8gYXR0ZXNvOiAlJShjb2xvcjo8Y29sb3JlPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgImNvbG9yZSBub24gcmljb25vc2NpdXRvOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAiQXR0ZXNvIHZhbG9yZSBpbnRlcm86IHJlZm5hbWU6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgIkF0dGVzbyB2YWxvcmUgaW50ZXJvOiByZWZuYW1lOnJzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvICUlKCVzKSBub24gcmljb25vc2NpdXRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkgbm9uIGFjY2V0dGEgYXJnb21lbnRpIgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byAlJShvYmplY3RzaXplKSBub24gcmljb25vc2NpdXRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpIG5vbiBhY2NldHRhIGFyZ29tZW50aSIKKworIzogcmVmLWZpbHRlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoYm9keSkgbm9uIGFjY2V0dGEgYXJnb21lbnRpIgorCisjOiByZWYtZmlsdGVyLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKHN1YmplY3QpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShzdWJqZWN0KSBub24gYWNjZXR0YSBhcmdvbWVudGkiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmdvbWVudG8gJSUodHJhaWxlcnMpIHNjb25vc2NpdXRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAiYXR0ZXNvIHZhbG9yZSBwb3NpdGl2byBpbiBjb250ZW50czpsaW5lcz0lcyIKKworIzogcmVmLWZpbHRlci5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvICUlKGNvbnRlbnRzKSBub24gcmljb25vc2NpdXRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJhdHRlc28gdmFsb3JlIHBvc2l0aXZvIGluIG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJnb21lbnRvICUlKG9iamVjdG5hbWUpIG5vbiByaWNvbm9zY2l1dG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAiZm9ybWF0byBhdHRlc286ICUlKGFsaWduOjxhbXBpZXp6YT4sPHBvc2l6aW9uZT4pIgorCisjOiByZWYtZmlsdGVyLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAidmFsb3JlIG5vbiByaWNvbm9zY2l1dG86IHBvc2l0aW9uOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAidmFsb3JlIG5vbiByaWNvbm9zY2l1dG86IHdpZHRoOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmdvbWVudG8gJSUoYWxpZ24pIG5vbiByaWNvbm9zY2l1dG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICJhdHRlc2EgYW1waWV6emEgcG9zaXRpdmEgY29uIGwnYXRvbSAlJShhbGlnbikiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byAlJShpZikgbm9uIHJpY29ub3NjaXV0bzogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbWUgY2FtcG8gbWFsZm9ybWF0bzogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIm5vbWUgY2FtcG8gc2Nvbm9zY2l1dG86ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5LCBidXQgdGhlIGZpZWxkICclLipzJyByZXF1aXJlcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGEiCittc2dzdHIgIiIKKyJub24gw6ggdW4gcmVwb3NpdG9yeSBnaXQsIG1hIGlsIGNhbXBvICclLipzJyByaWNoaWVkZSBsJ2FjY2Vzc28gYWkgZGF0aSAiCisib2dnZXR0byIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKGlmKSB1c2F0byBzZW56YSB1biBhdG9tbyAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICJmb3JtYXRvOiBhdG9tbyAlJSh0aGVuKSB1c2F0byBzZW56YSB1biBhdG9tbyAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKHRoZW4pIHVzYXRvIHBpw7kgZGkgdW5hIHZvbHRhIgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIGFmdGVyICUlKGVsc2UpIgorbXNnc3RyICJmb3JtYXRvOiBhdG9tbyAlJSh0aGVuKSB1c2F0byBkb3BvICUlKGVsc2UpIgorCisjOiByZWYtZmlsdGVyLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKGVsc2UpIHVzYXRvIHNlbnphIHVuIGF0b21vICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogYXRvbW8gJSUoZWxzZSkgdXNhdG8gc2VuemEgdW4gYXRvbW8gJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKGVsc2UpIHVzYXRvIHBpw7kgZGkgdW5hIHZvbHRhIgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgImZvcm1hdG86IGF0b21vICUlKGVuZCkgdXNhdG8gc2VuemEgbCdhdG9tbyBjb3JyaXNwb25kZW50ZSIKKworIzogcmVmLWZpbHRlci5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZm9ybWF0IHN0cmluZyAlcyIKK21zZ3N0ciAic3RyaW5nYSBkaSBmb3JtYXRvICVzIG1hbGZvcm1hdGEiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgJXMiCittc2dzdHIgIm5lc3N1biBicmFuY2gsIGVzZWd1byBpbCByZWJhc2UgZGkgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAibmVzc3VuIGJyYW5jaCwgZXNlZ3VvIGlsIHJlYmFzZSBkZWxsJ0hFQUQgc2NvbGxlZ2F0byAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAibmVzc3VuIGJyYW5jaCwgYmlzZXppb25lIGF2dmlhdGEgc3UgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICJuZXNzdW4gYnJhbmNoIgorCisjOiByZWYtZmlsdGVyLmM6MTU0MCByZWYtZmlsdGVyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgIm9nZ2V0dG8gJXMgbWFuY2FudGUgcGVyICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgInBhcnNlX29iamVjdF9idWZmZXIgbm9uIHJpdXNjaXRvIHN1ICVzIHBlciAlcyIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJvZ2dldHRvIG1hbGZvcm1hdG8gaW4gJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjIwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgImlnbm9ybyBpbCByaWZlcmltZW50byBjb24gaWwgbm9tZSBtYWxmb3JtYXRvICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICJmb3JtYXRvOiBhdG9tbyAlJShlbmQpIG1hbmNhbnRlIgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAibCdvcHppb25lIGAlcycgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgImwnb3B6aW9uZSBgJXMnIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS1uby1tZXJnZWQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAibm9tZSBkZWxsJ29nZ2V0dG8gJXMgbWFsZm9ybWF0byIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAibCdvcHppb25lIGAlcycgZGV2ZSBwdW50YXJlIGFkIHVuIGNvbW1pdCIKKworIzogcmVtb3RlLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZyByZW1vdGUgc2hvcnRoYW5kIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgIiIKKyJsYSBmb3JtYSBicmV2ZSBkZWxsYSBjb25maWd1cmF6aW9uZSBkZWwgcmVtb3RvIG5vbiBwdcOyIGluaXppYXJlIGNvbiAnLyc6ICVzIgorCisjOiByZW1vdGUuYzo0MTMKK21zZ2lkICJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIsOoIHN0YXRhIHNwZWNpZmljYXRhIHBpw7kgZGkgdW5hIGRpcmV0dGl2YSByZWNlaXZlcGFjaywgdXNvIGxhIHByaW1hIgorCisjOiByZW1vdGUuYzo0MjEKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiw6ggc3RhdGEgc3BlY2lmaWNhdGEgcGnDuSBkaSB1bmEgZGlyZXR0aXZhIHVwbG9hZHBhY2ssIHVzbyBsYSBwcmltYSIKKworIzogcmVtb3RlLmM6NjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBzaWEgJXMgc2lhICVzIGluICVzIgorCisjOiByZW1vdGUuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgc29saXRhbWVudGUgdHJhY2NpYSAlcywgbm9uICVzIgorCisjOiByZW1vdGUuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyB0cmFjY2lhIHNpYSAlcyBzaWEgJXMiCisKKyM6IHJlbW90ZS5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgImxhIGNoaWF2ZSAnJXMnIGRlbCBwYXR0ZXJuIG5vbiBhdmV2YSB1biAnKiciCisKKyM6IHJlbW90ZS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAiaWwgdmFsb3JlICclcycgZGVsIHBhdHRlcm4gbm9uIGhhIHVuICcqJyIKKworIzogcmVtb3RlLmM6MTAwMworIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkiCittc2dzdHIgIm5lc3N1bmEgY29ycmlzcG9uZGVuemEgcGVyIGxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8gc29yZ2VudGUgJXMiCisKKyM6IHJlbW90ZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICIiCisic29ubyBzdGF0ZSB0cm92YXRlIHBpw7kgY29ycmlzcG9uZGVuemUgcGVyIGxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8gIgorInNvcmdlbnRlICVzIgorCisjLiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorIy4gPHJlbW90ZT4gPHNyYz46PGRzdD4iIHB1c2gsIGFuZCAiYmVpbmcgcHVzaGVkICgnJXMnKSIgaXMKKyMuIHRoZSA8c3JjPi4KKyMuCisjOiByZW1vdGUuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGVzdGluYXRpb24geW91IHByb3ZpZGVkIGlzIG5vdCBhIGZ1bGwgcmVmbmFtZSAoaS5lLixcbiIKKyJzdGFydGluZyB3aXRoIFwicmVmcy9cIikuIFdlIHRyaWVkIHRvIGd1ZXNzIHdoYXQgeW91IG1lYW50IGJ5OlxuIgorIlxuIgorIi0gTG9va2luZyBmb3IgYSByZWYgdGhhdCBtYXRjaGVzICclcycgb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIi0gQ2hlY2tpbmcgaWYgdGhlIDxzcmM+IGJlaW5nIHB1c2hlZCAoJyVzJylcbiIKKyIgIGlzIGEgcmVmIGluIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIElmIHNvIHdlIGFkZCBhIGNvcnJlc3BvbmRpbmdcbiIKKyIgIHJlZnMve2hlYWRzLHRhZ3N9LyBwcmVmaXggb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIlxuIgorIk5laXRoZXIgd29ya2VkLCBzbyB3ZSBnYXZlIHVwLiBZb3UgbXVzdCBmdWxseSBxdWFsaWZ5IHRoZSByZWYuIgorbXNnc3RyICIiCisiTGEgZGVzdGluYXppb25lIGNoZSBoYWkgZm9ybml0byBub24gw6ggdW4gbm9tZSByaWZlcmltZW50b1xuIgorImNvbXBsZXRvIChvc3NpYSBjaGUgaW5pemlhIGNvbiBcInJlZnMvXCIpLiBBYmJpYW1vIHByb3ZhdG8gYVxuIgorImluZG92aW5hcmUgY2nDsiBjaGUgaW50ZW5kZXZpIGRpcmU6XG4iCisiXG4iCisiLSBjZXJjYW5kbyB1biByaWZlcmltZW50byBjb3JyaXNwb25kZW50ZSBhICclcycgbmVsIHJlbW90bztcbiIKKyItIGNvbnRyb2xsYW5kbyBzZSBsYSA8c29yZ2VudGU+IHNvdHRvcG9zdGEgYSBwdXNoICgnJXMnKSBmb3NzZSB1blxuIgorIiAgcmlmZXJpbWVudG8gY29tcHJlc28gZnJhIHF1ZWxsaSBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJbiB0YWxcbiIKKyIgIGNhc28gYXZyZW1tbyBhZ2dpdW50byBpbCBwcmVmaXNzbyBjb3JyaXNwb25kZW50ZVxuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIGFsIHJlbW90by5cbiIKKyJcbiIKKyJOZXNzdW5hIGRlbGxlIGR1ZSBvcHppb25pIGhhIGZ1bnppb25hdG8sIHF1aW5kaSBjaSBzaWFtbyBhcnJlc2kuXG4iCisiRGV2aSBzcGVjaWZpY2FyZSB1biByaWZlcmltZW50byBjb21wbGV0YW1lbnRlIHF1YWxpZmljYXRvLiIKKworIzogcmVtb3RlLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBjb21taXQgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorbXNnc3RyICIiCisiTGEgcGFydGUgPHNvcmdlbnRlPiBkZWxsbyBzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvXG4iCisiw6ggdW4gb2dnZXR0byB0YWcuIEZvcnNlIGludGVuZGV2aSBjcmVhcmUgdW4gbnVvdm9cbiIKKyJicmFuY2ggZXNlZ3VlbmRvIGlsIHB1c2ggYSAnJXM6cmVmcy9oZWFkcy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRhZyBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyB0YWcgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIkxhIHBhcnRlIDxzb3JnZW50ZT4gZGVsbG8gc3BlY2lmaWNhdG9yZSByaWZlcmltZW50b1xuIgorIsOoIHVuIG9nZ2V0dG8gdGFnLiBGb3JzZSBpbnRlbmRldmkgY3JlYXJlIHVuIG51b3ZvXG4iCisiYnJhbmNoIGVzZWd1ZW5kbyBpbCBwdXNoIGEgJyVzOnJlZnMvdGFncy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRyZWUgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgdHJlZSBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisiTGEgcGFydGUgPHNvcmdlbnRlPiBkZWxsbyBzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvXG4iCisiw6ggdW4gb2dnZXR0byBhbGJlcm8uIEZvcnNlIGludGVuZGV2aSBhZ2dpdW5nZXJlIHVuXG4iCisidGFnIGEgdW4gbnVvdm8gYWxiZXJvIGVzZWd1ZW5kbyBpbCBwdXNoIGFcbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCisKKyM6IHJlbW90ZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJMYSBwYXJ0ZSA8c29yZ2VudGU+IGRlbGxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG9cbiIKKyLDqCB1biBvZ2dldHRvIGJsb2IuIEZvcnNlIGludGVuZGV2aSBhZ2dpdW5nZXJlIHVuXG4iCisidGFnIGEgdW4gbnVvdm8gYmxvYiBlc2VndWVuZG8gaWwgcHVzaCBhXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorCisjOiByZW1vdGUuYzoxMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIiVzIG5vbiBwdcOyIGVzc2VyZSByaXNvbHRvIGluIHVuIGJyYW5jaCIKKworIzogcmVtb3RlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImltcG9zc2liaWxlIGVsaW1pbmFyZSAnJXMnOiBpbCByaWZlcmltZW50byByZW1vdG8gbm9uIGVzaXN0ZSIKKworIzogcmVtb3RlLmM6MTExNworIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIiIKKyJzb25vIHN0YXRlIHRyb3ZhdGUgcGnDuSBjb3JyaXNwb25kZW56ZSBwZXIgbG8gc3BlY2lmaWNhdG9yZSByaWZlcmltZW50byAiCisiZGVzdGluYXppb25lICVzIgorCisjOiByZW1vdGUuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiIgorImxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8gZGVzdGluYXppb25lICVzIHJpY2V2ZSBkYXRpIGRhIHBpw7kgZGkgdW5hICIKKyJzb3JnZW50ZSIKKworIzogcmVtb3RlLmM6MTYyNyByZW1vdGUuYzoxNzI4Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBub24gcHVudGEgYWQgdW4gYnJhbmNoIgorCisjOiByZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJicmFuY2ggJyVzJyBub24gZXNpc3RlbnRlIgorCisjOiByZW1vdGUuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICJuZXNzdW4gdXBzdHJlYW0gY29uZmlndXJhdG8gcGVyIGlsIGJyYW5jaCAnJXMnIgorCisjOiByZW1vdGUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisiYnJhbmNoIHVwc3RyZWFtICclcycgbm9uIG1lbW9yaXp6YXRvIGNvbWUgYnJhbmNoIGNoZSBuZSB0cmFjY2lhIHVubyByZW1vdG8iCisKKyM6IHJlbW90ZS5jOjE2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJsYSBkZXN0aW5hemlvbmUgZGVsIHB1c2ggJyVzJyBzdWwgcmVtb3RvICclcycgbm9uIGhhIHVuIGJyYW5jaCBsb2NhbGUgY2hlIGxhICIKKyJ0cmFjY2lhIgorCisjOiByZW1vdGUuYzoxNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgImlsIGJyYW5jaCAnJXMnIG5vbiBoYSB1biByZW1vdG8gcGVyIGlsIHB1c2giCisKKyM6IHJlbW90ZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICJnbGkgc3BlY2lmaWNhdG9yaSByaWZlcmltZW50byBwZXIgJyVzJyBub24gaW5jbHVkb25vICclcyciCisKKyM6IHJlbW90ZS5jOjE2OTUKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgImlsIHB1c2ggbm9uIGhhIHVuYSBkZXN0aW5hemlvbmUgKHB1c2guZGVmYXVsdCDDqCAnbm90aGluZycpIgorCisjOiByZW1vdGUuYzoxNzE3Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlIGlsIHB1c2ggJ3NpbXBsZScgYSB1bmEgc2luZ29sYSBkZXN0aW5hemlvbmUiCisKKyM6IHJlbW90ZS5jOjE4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGlsIHJpZmVyaW1lbnRvIHJlbW90byAlcyIKKworIzogcmVtb3RlLmM6MTg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogSWdub3JvIGxvY2FsbWVudGUgaWwgcmlmZXJpbWVudG8gc3RyYW5vICclcyciCisKKyM6IHJlbW90ZS5jOjIwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJJbCB0dW8gYnJhbmNoIMOoIGJhc2F0byBzdSAnJXMnLCBtYSBsJ3Vwc3RyZWFtIMOoIHNjb21wYXJzby5cbiIKKworIzogcmVtb3RlLmM6MjAyMworbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBwZXIgY29ycmVnZ2VyZSBsYSBzaXR1YXppb25lKVxuIgorCisjOiByZW1vdGUuYzoyMDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICJJbCB0dW8gYnJhbmNoIMOoIGFnZ2lvcm5hdG8gcmlzcGV0dG8gYSAnJXMnLlxuIgorCisjOiByZW1vdGUuYzoyMDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIgorbXNnc3RyICJJbCB0dW8gYnJhbmNoIGUgJyVzJyBmYW5ubyByaWZlcmltZW50byBhIGNvbW1pdCBkaWZmZXJlbnRpLlxuIgorCisjOiByZW1vdGUuYzoyMDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iCittc2dzdHIgIiAgKHVzYSBcIiVzXCIgcGVyIHZpc3VhbGl6emFyZSBpIGRldHRhZ2xpKVxuIgorCisjOiByZW1vdGUuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIklsIHR1byBicmFuY2ggw6ggYXZhbnRpIHJpc3BldHRvIGEgJyVzJyBkaSAlZCBjb21taXQuXG4iCittc2dzdHJbMV0gIklsIHR1byBicmFuY2ggw6ggYXZhbnRpIHJpc3BldHRvIGEgJyVzJyBkaSAlZCBjb21taXQuXG4iCisKKyM6IHJlbW90ZS5jOjIwNDMKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcHVzaFwiIHBlciBwdWJibGljYXJlIGkgdHVvaSBjb21taXQgbG9jYWxpKVxuIgorCisjOiByZW1vdGUuYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJJbCB0dW8gYnJhbmNoLCByaXNwZXR0byBhICclcycsIMOoIGluZGlldHJvIGRpICVkIGNvbW1pdCBlIG5lIHBvc3NvIGVzZWd1aXJlICIKKyJpbCBmYXN0IGZvcndhcmQuXG4iCittc2dzdHJbMV0gIiIKKyJJbCB0dW8gYnJhbmNoLCByaXNwZXR0byBhICclcycsIMOoIGluZGlldHJvIGRpICVkIGNvbW1pdCBlIG5lIHBvc3NvIGVzZWd1aXJlICIKKyJpbCBmYXN0IGZvcndhcmQuXG4iCisKKyM6IHJlbW90ZS5jOjIwNTQKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHB1bGxcIiBwZXIgYWdnaW9ybmFyZSBpbCB0dW8gYnJhbmNoIGxvY2FsZSlcbiIKKworIzogcmVtb3RlLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyJJbCB0dW8gYnJhbmNoIGUgJyVzJyBzb25vIGRpdmVudGF0aSBkaXZlcmdlbnRpXG4iCisiZSBoYW5ubyByaXNwZXR0aXZhbWVudGUgJWQgZSAlZCBjb21taXQgZGlmZmVyZW50aS5cbiIKK21zZ3N0clsxXSAiIgorIklsIHR1byBicmFuY2ggZSAnJXMnIHNvbm8gZGl2ZW50YXRpIGRpdmVyZ2VudGlcbiIKKyJlIGhhbm5vIHJpc3BldHRpdmFtZW50ZSAlZCBlICVkIGNvbW1pdCBkaWZmZXJlbnRpLlxuIgorCisjOiByZW1vdGUuYzoyMDY3Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICh1c2EgXCJnaXQgcHVsbFwiIHBlciBlc2VndWlyZSBpbCBtZXJnZSBkZWwgYnJhbmNoIHJlbW90byBuZWwgdHVvKVxuIgorCisjOiByZW1vdGUuYzoyMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIG5vbWUgb2dnZXR0byBhdHRlc28gJyVzJyIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgIm5vbWUgcmlmZXJpbWVudG8gc29zdGl0dXRpdm8gbm9uIHZhbGlkbzogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAicmlmZXJpbWVudG8gc29zdGl0dXRpdm8gZHVwbGljYXRvOiAlcyIKKworIzogcmVwbGFjZS1vYmplY3QuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiCittc2dzdHIgInByb2ZvbmRpdMOgIHNvc3RpdHV6aW9uZSB0cm9wcG8gZWxldmF0YSBwZXIgbCdvZ2dldHRvICVzIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIk1FUkdFX1JSIGNvcnJvdHRhIgorCisjOiByZXJlcmUuYzoyNjQgcmVyZXJlLmM6MjY5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIHJlY29yZCByZXJlcmUiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAic2kgc29ubyB2ZXJpZmljYXRpIGVycm9yaSBkdXJhbnRlIGxhIHNjcml0dHVyYSBkaSAnJXMnICglcykiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAiZmx1c2ggZGkgJyVzJyBub24gcml1c2NpdG8iCisKKyM6IHJlcmVyZS5jOjUwMyByZXJlcmUuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb25mbGljdCBodW5rcyBpbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGdsaSBodW5rIGNvbmZsaXR0byBpbiAnJXMnIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAidXRpbWUoKSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgInNjcml0dHVyYSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICInJXMnIGFnZ2l1bnRvIGFsbCdhcmVhIGRpIHN0YWdpbmcgdXNhbmRvIGxhIHJpc29sdXppb25lIHByZWNlZGVudGUuIgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgIlJpc29sdXppb25lIHBlciAnJXMnIHJlZ2lzdHJhdGEuIgorCisjOiByZXJlcmUuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzb2x2ZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiUmlzb2x0byBjb25mbGl0dG8gaW4gJyVzJyB1c2FuZG8gbGEgcmlzb2x1emlvbmUgcHJlY2VkZW50ZS4iCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGwndW5saW5rIGRlbGwnb2dnZXR0byBzbWFycml0byAnJXMnIgorCisjOiByZXJlcmUuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlNhbHZhdGEgcHJlaW1tYWdpbmUgZGkgJyVzJyIKKworIzogcmVyZXJlLmM6ODgxIHN1Ym1vZHVsZS5jOjIwNjcgYnVpbHRpbi9sb2cuYzoxODcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbGEgZGlyZWN0b3J5ICclcyciCisKKyM6IHJlcmVyZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgImFnZ2lvcm5hbWVudG8gZGVsbG8gc3RhdG8gY29uZmxpdHRvIHBlciAnJXMnIG5vbiByaXVzY2l0byIKKworIzogcmVyZXJlLmM6MTA2OCByZXJlcmUuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJyVzJyIKK21zZ3N0ciAibmVzc3VuYSByaXNvbHV6aW9uZSBwcmVzZW50ZSBpbiBtZW1vcmlhIHBlciAnJXMnIgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCd1bmxpbmsgZGkgJyVzJyIKKworIzogcmVyZXJlLmM6MTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJQcmVpbW1hZ2luZSBkaSAnJXMnIGFnZ2lvcm5hdGEiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiUmlzb2x1emlvbmUgcGVyICclcycgZGltZW50aWNhdGFcbiIKKworIzogcmVyZXJlLmM6MTE5OQorbXNnaWQgInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGxhIGRpcmVjdG9yeSBjYWNoZSByciIKKworIzogcmV2aXNpb24uYzoyNDk3Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAic2VtYnJhIGNoZSBpbCB0dW8gYnJhbmNoIGNvcnJlbnRlIHNpYSByb3R0byIKKworIzogcmV2aXNpb24uYzoyNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAiaWwgdHVvIGJyYW5jaCBjb3JyZW50ZSAnJXMnIG5vbiBoYSBhbmNvcmEgY29tbWl0IgorCisjOiByZXZpc2lvbi5jOjI3MDgKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLWJpc2VjdCIKKworIzogcmV2aXNpb24uYzoyNzEyCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICItTCBub24gc3VwcG9ydGEgYW5jb3JhIGZvcm1hdGkgZGlmZiBvbHRyZSBhIC1wIGUgLXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYyCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICJhcGVydHVyYSBkaSAvZGV2L251bGwgbm9uIHJpdXNjaXRhIgorCisjOiBydW4tY29tbWFuZC5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhc3luYyB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgdGhyZWFkIGFzeW5jOiAlcyIKKworIzogcnVuLWNvbW1hbmQuYzoxMzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgJyVzJyBob29rIHdhcyBpZ25vcmVkIGJlY2F1c2UgaXQncyBub3Qgc2V0IGFzIGV4ZWN1dGFibGUuXG4iCisiWW91IGNhbiBkaXNhYmxlIHRoaXMgd2FybmluZyB3aXRoIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorbXNnc3RyICIiCisiTCdob29rICclcycgw6ggc3RhdG8gaWdub3JhdG8gcGVyY2jDqSBub24gw6ggaW1wb3N0YXRvIGNvbWUgZXNlZ3VpYmlsZS5cbiIKKyJQdW9pIGRpc2FiaWxpdGFyZSBxdWVzdCdhdnZpc28gY29uIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAuIgorCisjOiBzZW5kLXBhY2suYzoxNDQKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICIiCisicGFjY2hldHRvIGZsdXNoIGluYXR0ZXNvIGR1cmFudGUgbGEgbGV0dHVyYSBkZWxsbyBzdGF0byBkZWNvbXByZXNzaW9uZSBkZWwgIgorInJlbW90byIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbG8gc3RhdG8gZGVjb21wcmVzc2lvbmUgZGVsIHJlbW90bzogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgImRlY29tcHJlc3Npb25lIHN1bCByZW1vdG8gbm9uIHJpdXNjaXRhOiAlcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgImZpcm1hIGRlbCBjZXJ0aWZpY2F0byBwZXIgaWwgcHVzaCBub24gcml1c2NpdGEiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiaWwgcmljZXZlbnRlIG5vbiBzdXBwb3J0YSBpIHB1c2ggLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorIm5vbiBpbnZpbyB1biBjZXJ0aWZpY2F0byBwdXNoIHBlcmNow6kgaWwgcmljZXZlbnRlIG5vbiBzdXBwb3J0YSBpIHB1c2ggLS0iCisic2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MzcKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgImlsIHJpY2V2ZW50ZSBub24gc3VwcG9ydGEgaSBwdXNoIC0tYXRvbWljIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIKK21zZ3N0ciAiaWwgcmljZXZlbnRlIG5vbiBzdXBwb3J0YSBsZSBvcHppb25pIHB1c2giCisKKyM6IHNlcXVlbmNlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICJtb2RhbGl0w6AgcHVsaXppYSBtZXNzYWdnaW8gY29tbWl0IG5vbiB2YWxpZGE6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVsaW1pbmFyZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMTMgYnVpbHRpbi9yZWJhc2UuYzo3ODEgYnVpbHRpbi9yZWJhc2UuYzoxNzA2IGJ1aWx0aW4vcm0uYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaW11b3ZlcmUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzIzCittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJyZXZlcnQiCisKKyM6IHNlcXVlbmNlci5jOjMyNQorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICJjaGVycnktcGljayIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICJyZWJhc2UgLWkiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgImF6aW9uZSBzY29ub3NjaXV0YTogJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4NworbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisiZG9wbyBhdmVyIHJpc29sdG8gaSBjb25mbGl0dGksIGNvbnRyYXNzZWduYSBpIHBlcmNvcnNpIGNvcnJldHRpXG4iCisiY29uICdnaXQgYWRkIDxwYXRoPicgbyAnZ2l0IHJtIDxwYXRoPiciCisKKyM6IHNlcXVlbmNlci5jOjM5MAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisiZG9wbyBhdmVyIHJpc29sdG8gaSBjb25mbGl0dGksIGNvbnRyYXNzZWduYSBpIHBlcmNvcnNpIGNvcnJldHRpXG4iCisiY29uICdnaXQgYWRkIDxwYXRoPicgbyAnZ2l0IHJtIDxwYXRoPicgZWQgZXNlZ3VpXG4iCisiaWwgY29tbWl0IGRlbCByaXN1bHRhdG8gY29uICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6NDAzIHNlcXVlbmNlci5jOjI5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYmxvY2NhcmUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgY2FyYXR0ZXJlIGRpIGZpbmUgcmlnYSBpbiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTUgc2VxdWVuY2VyLmM6Mjc5OCBzZXF1ZW5jZXIuYzoyOTk5IHNlcXVlbmNlci5jOjMwMTMKKyM6IHNlcXVlbmNlci5jOjMyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgImZpbmFsaXp6YXppb25lIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzggc2VxdWVuY2VyLmM6MTcwNyBzZXF1ZW5jZXIuYzoyODE4IHNlcXVlbmNlci5jOjMyNTkKKyM6IHNlcXVlbmNlci5jOjMzNjggYnVpbHRpbi9hbS5jOjI0NCBidWlsdGluL2NvbW1pdC5jOjc4MyBidWlsdGluL21lcmdlLmM6MTExNworIzogYnVpbHRpbi9yZWJhc2UuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIKK21zZ3N0ciAibGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgc2FyZWJiZXJvIHNvdnJhc2NyaXR0ZSBkYSAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjQ2OAorbXNnaWQgImNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiZXNlZ3VpIGlsIGNvbW1pdCBkZWxsZSBtb2RpZmljaGUgbyBsbyBzdGFzaCBwZXIgcHJvY2VkZXJlLiIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiBmYXN0IGZvcndhcmQiCisKKyM6IHNlcXVlbmNlci5jOjUzOSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiTW9kYWxpdMOgIHB1bGl6aWEgbm9uIHZhbGlkYTogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51b3ZvIGZpbGUgaW5kaWNlIgorCisjOiBzZXF1ZW5jZXIuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdhbGJlcm8gY2FjaGUiCisKKyM6IHNlcXVlbmNlci5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgaWwgY29tbWl0IEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgIm5lc3N1bmEgY2hpYXZlIHByZXNlbnRlIGluICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHJpbXVvdmVyZSBnbGkgYXBpY2kgZGFsIHZhbG9yZSBkaSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo3OTIgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MDUKKyM6IGJ1aWx0aW4vYW0uYzo3OTcgYnVpbHRpbi9tZXJnZS5jOjExMTQgYnVpbHRpbi9yZWJhc2UuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAnJXMnIGluIGxldHR1cmEiCisKKyM6IHNlcXVlbmNlci5jOjgwMgorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIidHSVRfQVVUSE9SX05BTUUnIGdpw6Agc3BlY2lmaWNhdG8iCisKKyM6IHNlcXVlbmNlci5jOjgwNworbXNnaWQgIidHSVRfQVVUSE9SX0VNQUlMJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICInR0lUX0FVVEhPUl9FTUFJTCcgZ2nDoCBzcGVjaWZpY2F0byIKKworIzogc2VxdWVuY2VyLmM6ODEyCittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfREFURScgZ2nDoCBzcGVjaWZpY2F0byIKKworIzogc2VxdWVuY2VyLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAidmFyaWFiaWxlICclcycgc2Nvbm9zY2l1dGEiCisKKyM6IHNlcXVlbmNlci5jOjgyMQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIidHSVRfQVVUSE9SX05BTUUnIG1hbmNhbnRlIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0VNQUlMJyIKK21zZ3N0ciAiJ0dJVF9BVVRIT1JfRU1BSUwnIG1hbmNhbnRlIgorCisjOiBzZXF1ZW5jZXIuYzo4MjUKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0RBVEUnIgorbXNnc3RyICInR0lUX0FVVEhPUl9EQVRFJyBtYW5jYW50ZSIKKworIzogc2VxdWVuY2VyLmM6OTAyIHNlcXVlbmNlci5jOjE0MjcKK21zZ2lkICJtYWxmb3JtZWQgaWRlbnQgbGluZSIKK21zZ3N0ciAicmlnYSBpZGVudCBtYWxmb3JtYXRhIgorCisjOiBzZXF1ZW5jZXIuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUgc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorImhhaSBtb2RpZmljaGUgaW4gc3RhZ2luZyBuZWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJTZSBxdWVzdGUgbW9kaWZpY2hlIGRldm9ubyBlc3NlcmUgc290dG9wb3N0ZSBhIHNxdWFzaCBuZWwgY29tbWl0XG4iCisicHJlY2VkZW50ZSwgZXNlZ3VpOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiU2UgZGV2b25vIGVzc2VyZSBpbmNsdXNlIGluIHVuIG51b3ZvIGNvbW1pdCwgZXNlZ3VpOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkluIGVudHJhbWJpIGkgY2FzaSwgdW5hIHZvbHRhIGZpbml0bywgY29udGludWEgY29uOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMTgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAiaG9vayAncHJlcGFyZS1jb21taXQtbXNnJyBub24gcml1c2NpdG8iCisKKyM6IHNlcXVlbmNlci5jOjEyMjQKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJJbCB0dW8gbm9tZSBlIGwnaW5kaXJpenpvIGUtbWFpbCBzb25vIHN0YXRpIGNvbmZpZ3VyYXRpIGF1dG9tYXRpY2FtZW50ZSAiCisidXNhbmRvXG4iCisiaWwgdHVvIG5vbWUgdXRlbnRlIGVkIGlsIG5vbWUgaG9zdC4gUGVyIGZhdm9yZSwgdmVyaWZpY2EgY2hlIHNpYW5vIGVzYXR0aS5cbiIKKyLDiCBwb3NzaWJpbGUgZWxpbWluYXJlIHF1ZXN0byBtZXNzYWdnaW8gaW1wb3N0YW5kb2xpIGVzcGxpY2l0YW1lbnRlLlxuIgorIkVzZWd1aSBpbCBzZWd1ZW50ZSBjb21hbmRvIGUgc2VndWkgbGUgaXN0cnV6aW9uaSBmb3JuaXRlIG5lbCB0dW8gZWRpdG9yXG4iCisicGVyIG1vZGlmaWNhcmUgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJEb3BvIHF1ZXN0YSBvcGVyYXppb25lLCBwdW9pIHJpcHJpc3RpbmFyZSBsJ2lkZW50aXTDoCB1c2F0YSBpbiBxdWVzdG8gY29tbWl0ICIKKyJjb246XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjM3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiSWwgdHVvIG5vbWUgZSBsJ2luZGlyaXp6byBlLW1haWwgc29ubyBzdGF0aSBjb25maWd1cmF0aSBhdXRvbWF0aWNhbWVudGUgIgorInVzYW5kb1xuIgorImlsIHR1byBub21lIHV0ZW50ZSBlZCBpbCBub21lIGhvc3QuIFBlciBmYXZvcmUsIHZlcmlmaWNhIGNoZSBzaWFubyBlc2F0dGkuXG4iCisiw4ggcG9zc2liaWxlIGVsaW1pbmFyZSBxdWVzdG8gbWVzc2FnZ2lvIGltcG9zdGFuZG9saSBlc3BsaWNpdGFtZW50ZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJJbCB0dW8gbm9tZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB0dUBlc2VtcGlvLmNvbVxuIgorIlxuIgorIkRvcG8gcXVlc3RhIG9wZXJhemlvbmUsIHB1b2kgcmlwcmlzdGluYXJlIGwnaWRlbnRpdMOgIHVzYXRhIGluIHF1ZXN0byBjb21taXQgIgorImNvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyNzkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGlsIGNvbW1pdCBhcHBlbmEgY3JlYXRvIgorCisjOiBzZXF1ZW5jZXIuYzoxMjgxCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCBhcHBlbmEgY3JlYXRvIgorCisjOiBzZXF1ZW5jZXIuYzoxMzI3Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgSEVBRCBhZnRlciBjcmVhdGluZyBjb21taXQiCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSBIRUFEIGRvcG8gbGEgY3JlYXppb25lIGRlbCBjb21taXQiCisKKyM6IHNlcXVlbmNlci5jOjEzMjkKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJIRUFEIHNjb2xsZWdhdG8iCisKKyM6IHNlcXVlbmNlci5jOjEzMzMKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIChjb21taXQgcmFkaWNlKSIKKworIzogc2VxdWVuY2VyLmM6MTM1NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJMJ0hFQUQgJXMgbm9uIMOoIHVuIGNvbW1pdCEiCisKKyM6IHNlcXVlbmNlci5jOjEzNjAgc2VxdWVuY2VyLmM6MTQ1OCBidWlsdGluL2NvbW1pdC5jOjE1NjkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0IEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE0MTEgc2VxdWVuY2VyLmM6MjA1NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnYXV0b3JlIGRlbCBjb21taXQiCisKKyM6IHNlcXVlbmNlci5jOjE0MzEKK21zZ2lkICJjb3JydXB0ZWQgYXV0aG9yIHdpdGhvdXQgZGF0ZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaW5mb3JtYXppb25pIHN1bGwnYXV0b3JlIGNvcnJvdHRlIChzZW56YSBkYXRhKSIKKworIzogc2VxdWVuY2VyLmM6MTQ0NyBidWlsdGluL2FtLmM6MTU2MSBidWlsdGluL21lcmdlLmM6Njg0Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgbm9uIMOoIHJpdXNjaXRvIGEgc2NyaXZlcmUgdW4gYWxiZXJvIgorCisjOiBzZXF1ZW5jZXIuYzoxNDgwIHNlcXVlbmNlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQgZGEgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTUxNiBidWlsdGluL2FtLmM6MTU4MyBidWlsdGluL2NvbW1pdC5jOjE2NjggYnVpbHRpbi9tZXJnZS5jOjg4MworIzogYnVpbHRpbi9tZXJnZS5jOjkwOAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICJzY3JpdHR1cmEgZGVsbCdvZ2dldHRvIGRlbCBjb21taXQgbm9uIHJpdXNjaXRhIgorCisjOiBzZXF1ZW5jZXIuYzoxNTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCBnZW5pdG9yZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTY1NiBzZXF1ZW5jZXIuYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgImNvbWFuZG8gc2Nvbm9zY2l1dG86ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNzE0IHNlcXVlbmNlci5jOjE3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICJRdWVzdGEgw6ggdW5hIGNvbWJpbmF6aW9uZSBkaSAlZCBjb21taXQuIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI0Cittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgIsOoIG5lY2Vzc2FyaWEgdW4nSEVBRCBwZXIgaWwgZml4dXAiCisKKyM6IHNlcXVlbmNlci5jOjE3MjYgc2VxdWVuY2VyLmM6MzMwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgbCdIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI4Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQgZGVsbCdIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNzQxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTYKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICJRdWVzdG8gw6ggaWwgcHJpbW8gbWVzc2FnZ2lvIGRpIGNvbW1pdDoiCisKKyM6IHNlcXVlbmNlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBkaSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJWQ6IgorbXNnc3RyICJRdWVzdG8gw6ggaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBudW1lcm8gJWQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJWQgd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiSWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBudW1lcm8gJWQgc2Fyw6Agc2FsdGF0bzoiCisKKyM6IHNlcXVlbmNlci5jOjE4NTAKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJpbCBmaWxlIGluZGljZSBub24gw6ggc3RhdG8gc290dG9wb3N0byBhIG1lcmdlLiIKKworIzogc2VxdWVuY2VyLmM6MTg1NworbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgZml4dXAgc3VsIGNvbW1pdCByYWRpY2UiCisKKyM6IHNlcXVlbmNlci5jOjE4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJpbCBjb21taXQgJXMgw6ggdW4gbWVyZ2UgbWEgbm9uIMOoIHN0YXRhIHNwZWNpZmljYXRhIGwnb3B6aW9uZSAtbS4iCisKKyM6IHNlcXVlbmNlci5jOjE4ODQgc2VxdWVuY2VyLmM6MTg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgImlsIGNvbW1pdCAlcyBub24gaGEgaWwgZ2VuaXRvcmUgJWQiCisKKyM6IHNlcXVlbmNlci5jOjE4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgImltcG9zc2liaWxlIG90dGVuZXJlIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQgcGVyICVzIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTkxNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiBpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbW1pdCBnZW5pdG9yZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlkZW5vbWluYXJlICclcycgaW4gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJldmVydCBkaSAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYXBwbGljYXJlICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGxldHR1cmEgZGVsbCdpbmRpY2Ugbm9uIHJpdXNjaXRhIgorCisjOiBzZXF1ZW5jZXIuYzoyMTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGFnZ2lvcm5hbWVudG8gZGVsbCdpbmRpY2Ugbm9uIHJpdXNjaXRvIgorCisjOiBzZXF1ZW5jZXIuYzoyMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIiVzIG5vbiBhY2NldHRhIGFyZ29tZW50aTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgImFyZ29tZW50aSBtYW5jYW50aSBwZXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclLipzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjIyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJyaWdhICVkIG5vbiB2YWxpZGE6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgJyVzJyBzZW56YSB1biBjb21taXQgcHJlY2VkZW50ZSIKKworIzogc2VxdWVuY2VyLmM6MjM0OCBidWlsdGluL3JlYmFzZS5jOjE3MiBidWlsdGluL3JlYmFzZS5jOjE5NworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjMgYnVpbHRpbi9yZWJhc2UuYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgJyVzJy4iCisKKyM6IHNlcXVlbmNlci5jOjIzODQKK21zZ2lkICJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImFubnVsbG8gdW4nb3BlcmF6aW9uZSBkaSBjaGVycnktcGljayBpbiBjb3JzbyIKKworIzogc2VxdWVuY2VyLmM6MjM5MQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImFubnVsbG8gdW4nb3BlcmF6aW9uZSBkaSByZXZlcnQgaW4gY29yc28iCisKKyM6IHNlcXVlbmNlci5jOjI0MzUKK21zZ2lkICJwbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiY29ycmVnZ2kgbGEgc2l0dWF6aW9uZSB1c2FuZG8gJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKKworIzogc2VxdWVuY2VyLmM6MjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAiZm9nbGlvIGlzdHJ1emlvbmkgaW51dGlsaXp6YWJpbGU6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI0NDIKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIm5lc3N1biBjb21taXQgYW5hbGl6emF0by4iCisKKyM6IHNlcXVlbmNlci5jOjI0NTMKK21zZ2lkICJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gY2hlcnJ5LXBpY2sgZHVyYW50ZSB1biByZXZlcnQuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDU1Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHVuIHJldmVydCBkdXJhbnRlIHVuIGNoZXJyeS1waWNrLiIKKworIzogc2VxdWVuY2VyLmM6MjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgInZhbG9yZSBub24gdmFsaWRvIHBlciAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI2MzAKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8gaW51dGlsaXp6YWJpbGUiCisKKyM6IHNlcXVlbmNlci5jOjI2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgImZvZ2xpbyBvcHppb25pIG1hbGZvcm1hdGk6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI3MzYgc2VxdWVuY2VyLmM6NDQ2MworbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLDqCBzdGF0byBwYXNzYXRvIHVuIGluc2llbWUgZGkgY29tbWl0IHZ1b3RvIgorCisjOiBzZXF1ZW5jZXIuYzoyNzUyCittc2dpZCAicmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgInVuJ29wZXJhemlvbmUgZGkgcmV2ZXJ0IMOoIGdpw6AgaW4gY29yc28iCisKKyM6IHNlcXVlbmNlci5jOjI3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAicHJvdmEgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU3Cittc2dpZCAiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAidW4nb3BlcmF6aW9uZSBkaSBjaGVycnktcGljayDDqCBnacOgIGluIGNvcnNvIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU5CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAicHJvdmEgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3Rvcnkgc2VxdWVuY2VyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI3ODgKK21zZ2lkICJjb3VsZCBub3QgbG9jayBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmlsZSBibG9jY2FyZSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyODQ4IHNlcXVlbmNlci5jOjQyMDkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5lc3N1bmEgb3BlcmF6aW9uZSBkaSBjaGVycnktcGljayBvIHJldmVydCBpbiBjb3JzbyIKKworIzogc2VxdWVuY2VyLmM6Mjg1MCBzZXF1ZW5jZXIuYzoyODYxCittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI4NTIgc2VxdWVuY2VyLmM6Mjg5NgorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgaW50ZXJyb21wZXJlIGwnb3BlcmF6aW9uZSBkYSB1biBicmFuY2ggY2hlIGRldmUgZXNzZXJlIGFuY29yYSAiCisiY3JlYXRvIgorCisjOiBzZXF1ZW5jZXIuYzoyODgyIGJ1aWx0aW4vZ3JlcC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAnJXMnOiAlcyIKKworIzogc2VxdWVuY2VyLmM6Mjg4NQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgImZpbmUgZGVsIGZpbGUgaW5hdHRlc2EiCisKKyM6IHNlcXVlbmNlci5jOjI4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICIiCisiaWwgZmlsZSAnJXMnIGluIGN1aSDDqCBzdGF0byBzYWx2YXRvIGwnSEVBRCBwcmltYSBkZWwgY2hlcnJ5IHBpY2sgw6ggY29ycm90dG8iCisKKyM6IHNlcXVlbmNlci5jOjI5MDIKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIiIKKyJTZW1icmEgY2hlIHR1IGFiYmlhIHNwb3N0YXRvIGwnSEVBRC4gTm9uIGVzZWd1byBpbCByZXdpbmQsIGNvbnRyb2xsYSBsJ0hFQUQhIgorCisjOiBzZXF1ZW5jZXIuYzoyOTQzCittc2dpZCAibm8gcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJuZXNzdW4gcmV2ZXJ0IGluIGNvcnNvIgorCisjOiBzZXF1ZW5jZXIuYzoyOTUxCittc2dpZCAibm8gY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5lc3N1biBjaGVycnktcGljayBpbiBjb3JzbyIKKworIzogc2VxdWVuY2VyLmM6Mjk2MQorbXNnaWQgImZhaWxlZCB0byBza2lwIHRoZSBjb21taXQiCittc2dzdHIgInNhbHRvIGRlbCBjb21taXQgbm9uIHJpdXNjaXRvIgorCisjOiBzZXF1ZW5jZXIuYzoyOTY4Cittc2dpZCAidGhlcmUgaXMgbm90aGluZyB0byBza2lwIgorbXNnc3RyICJub24gYyfDqCBudWxsYSBkYSBzYWx0YXJlIgorCisjOiBzZXF1ZW5jZXIuYzoyOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJoYXZlIHlvdSBjb21taXR0ZWQgYWxyZWFkeT9cbiIKKyJ0cnkgXCJnaXQgJXMgLS1jb250aW51ZVwiIgorbXNnc3RyICIiCisiaGFpIGdpw6AgZXNlZ3VpdG8gaWwgY29tbWl0P1xuIgorInByb3ZhIFwiZ2l0ICVzIC0tY29udGludWVcIiIKKworIzogc2VxdWVuY2VyLmM6MzA5NSBzZXF1ZW5jZXIuYzo0MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgJXMiCisKKyM6IHNlcXVlbmNlci5jOjMxMzQgc2VxdWVuY2VyLmM6NDEwMQorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgbCdIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29waWFyZSAnJXMnIGluICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLDiCBwb3NzaWJpbGUgbW9kaWZpY2FyZSBpbCBjb21taXQgb3JhIGNvblxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiUXVhbmRvIHNlaSBzb2RkaXNmYXR0byBkZWxsZSBtb2RpZmljaGUsIGVzZWd1aVxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIkltcG9zc2liaWxlIGFwcGxpY2FyZSAlcy4uLiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBtZXJnZSBkaSAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMTkwIHNlcXVlbmNlci5jOjMxOTQgYnVpbHRpbi9kaWZmdG9vbC5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNvcGlhcmUgJyVzJyBpbiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJlc2VjdXppb25lIG5vbiByaXVzY2l0YTogJXNcbiIKKyIlc1B1b2kgY29ycmVnZ2VyZSBpbCBwcm9ibGVtYSBlIHF1aW5kaSBlc2VndWlyZVxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMjcKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICJlIHNvbm8gc3RhdGUgYXBwb3J0YXRlIG1vZGlmaWNoZSBhbGwnaW5kaWNlIGUvbyBhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorCisjOiBzZXF1ZW5jZXIuYzozMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImVzZWN1emlvbmUgcml1c2NpdGE6ICVzXG4iCisibWEgc29ubyBzdGF0ZSBtYW50ZW51dGUgbW9kaWZpY2hlIGFsbCdpbmRpY2UgZS9vIGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisiRXNlZ3VpIGlsIGNvbW1pdCBvIGxvIHN0YXNoIGRlbGxlIG1vZGlmaWNoZSwgcXVpbmRpIGVzZWd1aVxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIm5vbWUgZXRpY2hldHRhIGlsbGVjaXRvOiAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjMzNDgKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgInNjcml0dHVyYSBjb21taXQgcmFkaWNlIGZhbHNvIGluIGNvcnNvIgorCisjOiBzZXF1ZW5jZXIuYzozMzUzCittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAic2NyaXR0dXJhIHNxdWFzaC1vbnRvIGluIGNvcnNvIgorCisjOiBzZXF1ZW5jZXIuYzozMzkxIGJ1aWx0aW4vcmViYXNlLmM6ODc2IGJ1aWx0aW4vcmViYXNlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgbCdhbGJlcm8gZGkgJXMiCisKKyM6IHNlcXVlbmNlci5jOjM0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM0NjcKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIG1lcmdlIHNlbnphIHVuYSByZXZpc2lvbmUgY29ycmVudGUiCisKKyM6IHNlcXVlbmNlci5jOjM0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjM0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBtZXJnZTogJyUuKnMnIgorbXNnc3RyICJub24gYyfDqCBudWxsYSBkaSBjdWkgZXNlZ3VpcmUgaWwgbWVyZ2U6ICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzUxMAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgImlsIG1lcmdlIG9jdG9wdXMgbm9uIHB1w7IgZXNzZXJlIGVzZWd1aXRvIHN1IHVuIFtudW92byBjb21taXQgcmFkaWNlXSIKKworIzogc2VxdWVuY2VyLmM6MzUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgImltcG9zc2liaWxlIG90dGVuZXJlIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQgcGVyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV2ZW4gYXR0ZW1wdCB0byBtZXJnZSAnJS4qcyciCittc2dzdHIgIm5vbiDDqCBzdGF0byBuZW1tZW5vIHBvc3NpYmlsZSB0ZW50YXJlIGRpIGVzZWd1aXJlIGlsIG1lcmdlIGRpICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzcwNAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIm1lcmdlOiBpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBudW92byBmaWxlIGluZGljZSIKKworIzogc2VxdWVuY2VyLmM6Mzc3MyBidWlsdGluL3JlYmFzZS5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAiU3Rhc2ggYXV0b21hdGljbyBhcHBsaWNhdG8uXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBtZW1vcml6emFyZSAlcyIKKworIzogc2VxdWVuY2VyLmM6Mzc4OCBidWlsdGluL3JlYmFzZS5jOjc0OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiTCdhcHBsaWNhemlvbmUgZGVsbG8gc3Rhc2ggYXV0b21hdGljbyBoYSBnZW5lcmF0byBjb25mbGl0dGkuXG4iCisiTGUgdHVlIG1vZGlmaWNoZSBzb25vIGFsIHNpY3VybyBuZWxsbyBzdGFzaC5cbiIKKyJQdW9pIGVzZWd1aXJlIFwiZ2l0IHN0YXNoIHBvcFwiIG8gXCJnaXQgc3Rhc2ggZHJvcFwiIGluIHF1YWx1bnF1ZSBtb21lbnRvLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGkgJXMiCisKKyM6IHNlcXVlbmNlci5jOjM4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXM6IG5vbiDDqCB1biBPSUQgdmFsaWRvIgorCisjOiBzZXF1ZW5jZXIuYzozODY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgImltcG9zc2liaWxlIHNjb2xsZWdhcmUgbCdIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICJGZXJtYXRvIGEgSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAiRmVybWF0byBhICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21hbmRvIHRvZG9cbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIlxuIgorIklsIGNvbWFuZG8gw6ggc3RhdG8gcGlhbmlmaWNhdG8gbnVvdmFtZW50ZS4gUGVyIG1vZGlmaWNhcmxvIHByaW1hIGRpXG4iCisiY29udGludWFyZSwgbW9kaWZpY2EgcHJpbWEgbGEgbGlzdGEgdG9kbzpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgIkZlcm1hdG8gYSAlcy4uLiAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjQwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICJjb21hbmRvICVkIHNjb25vc2NpdXRvIgorCisjOiBzZXF1ZW5jZXIuYzo0MTA5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6NDExNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAnb250byciCisKKyM6IHNlcXVlbmNlci5jOjQxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGwnSEVBRCBhICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MjIxCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZWJhc2U6IGNpIHNvbm8gZGVsbGUgbW9kaWZpY2hlIG5vbiBpbiBzdGFnaW5nLiIKKworIzogc2VxdWVuY2VyLmM6NDIzMAorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBtb2RpZmljYXJlIHVuIGNvbW1pdCBpbmVzaXN0ZW50ZSIKKworIzogc2VxdWVuY2VyLmM6NDIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgImZpbGUgbm9uIHZhbGlkbzogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICJjb250ZW51dGkgbm9uIHZhbGlkaTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDIzNworbXNnaWQgIiIKKyJcbiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIlxuIgorIkNpIHNvbm8gbW9kaWZpY2hlIGRpIGN1aSBub24gw6ggc3RhdG8gZXNlZ3VpdG8gaWwgY29tbWl0IG5lbCB0dW8gYWxiZXJvXG4iCisiZGkgbGF2b3JvLiBFc2VndWluZSBwcmltYSBpbCBjb21taXQgZSBxdWluZGkgZXNlZ3VpIG51b3ZhbWVudGUgJ2dpdCByZWJhc2VcbiIKKyItLWNvbnRpbnVlJy4iCisKKyM6IHNlcXVlbmNlci5jOjQyNzMgc2VxdWVuY2VyLmM6NDMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDMyNworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmltdW92ZXJlIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjQzMzQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY29tbWl0IGRlbGxlIG1vZGlmaWNoZSBpbiBzdGFnaW5nLiIKKworIzogc2VxdWVuY2VyLmM6NDQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNoZXJyeSBwaWNrIGRpIHVuICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiByZXZpc2lvbmUgbm9uIHZhbGlkYSIKKworIzogc2VxdWVuY2VyLmM6NDQ3OQorbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgcmV2ZXJ0IGNvbWUgY29tbWl0IGluaXppYWxlIgorCisjOiBzZXF1ZW5jZXIuYzo0OTUyCittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogb3B6aW9uaSBub24gZ2VzdGl0ZSIKKworIzogc2VxdWVuY2VyLmM6NDk1NQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogZXJyb3JlIGR1cmFudGUgbGEgcHJlcGFyYXppb25lIGRlbGxlIHJldmlzaW9uaSIKKworIzogc2VxdWVuY2VyLmM6NTExMworbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKyJQdW9pIGNvcnJlZ2dlcmUgcXVlc3RhIHNpdHVhemlvbmUgY29uICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBlIHF1aW5kaSAiCisiZXNlZ3VpcmUgJ2dpdCByZWJhc2UgLS1jb250aW51ZScuXG4iCisiT3BwdXJlIHB1b2kgaW50ZXJyb21wZXJlIGlsIHJlYmFzZSBjb24gJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCisKKyM6IHNlcXVlbmNlci5jOjUyMjYgc2VxdWVuY2VyLmM6NTI0MworbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgIm51bGxhIGRhIGZhcmUiCisKKyM6IHNlcXVlbmNlci5jOjUyNTcKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzYWx0YXJlIGkgY29tYW5kaSBwaWNrIG5vbiBuZWNlc3NhcmkiCisKKyM6IHNlcXVlbmNlci5jOjUzNTEKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICJsbyBzY3JpcHQgw6ggZ2nDoCBzdGF0byByaW9yZGluYXRvLiIKKworIzogc2V0dXAuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiclcycgw6ggYWwgZGkgZnVvcmkgZGVsIHJlcG9zaXRvcnkiCisKKyM6IHNldHVwLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiBwZXJjb3JzbyBub24gZXNpc3RlbnRlIG5lbGwnYWxiZXJvIGRpIGxhdm9yby5cbiIKKyJVc2EgJ2dpdCA8Y29tYW5kbz4gLS0gPHBlcmNvcnNvPi4uLicgcGVyIHNwZWNpZmljYXJlIHBlcmNvcnNpIG5vbiBlc2lzdGVudGkgIgorImxvY2FsbWVudGUuIgorCisjOiBzZXR1cC5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJhcmdvbWVudG8gJyVzJyBhbWJpZ3VvOiByZXZpc2lvbmUgc2Nvbm9zY2l1dGEgbyBwZXJjb3JzbyBub24gbmVsbCdhbGJlcm8gZGkgIgorImxhdm9yby5cbiIKKyJVc2EgJy0tJyBwZXIgc2VwYXJhcmUgaSBwZXJjb3JzaSBkYWxsZSByZXZpc2lvbmksIGNvbWUgc2VndWU6XG4iCisiJ2dpdCA8Y29tYW5kbz4gWzxyZXZpc2lvbmU+Li4uXSAtLSBbPGZpbGU+Li4uXSciCisKKyM6IHNldHVwLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIiIKKyJsJ29wemlvbmUgJyVzJyBkZXZlIGVzc2VyZSBzcGVjaWZpY2F0YSBwcmltYSBkZWdsaSBhcmdvbWVudGkgY2hlIG5vbiAiCisiY29zdGl0dWlzY29ubyB1bidvcHppb25lIgorCisjOiBzZXR1cC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisiYXJnb21lbnRvICclcycgYW1iaWd1bzogw6ggc2lhIHVuYSByZXZpc2lvbmUgc2lhIHVuIG5vbWUgZmlsZVxuIgorIlVzYSAnLS0nIHBlciBzZXBhcmFyZSBpIHBlcmNvcnNpIGRhbGxlIHJldmlzaW9uaSwgY29tZSBzZWd1ZTpcbiIKKyInZ2l0IDxjb21hbmRvPiBbPHJldmlzaW9uZT4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKKworIzogc2V0dXAuYzozOTEKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHVwIHdvcmsgdHJlZSB1c2luZyBpbnZhbGlkIGNvbmZpZyIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHByZXBhcmFyZSBsJ2FsYmVybyBkaSBsYXZvcm8gdXNhbmRvIHVuYSBjb25maWd1cmF6aW9uZSBub24gdmFsaWRhIgorCisjOiBzZXR1cC5jOjM5NQorbXNnaWQgInRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIgorbXNnc3RyICJxdWVzdCdvcGVyYXppb25lIGRldmUgZXNzZXJlIGVzZWd1aXRhIGluIHVuIGFsYmVybyBkaSBsYXZvcm8iCisKKyM6IHNldHVwLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJBdHRlc2EgdmVyc2lvbmUgcmVwb3NpdG9yeSBHaXQgPD0gJWQsIHRyb3ZhdGEgJWQiCisKKyM6IHNldHVwLmM6NTQ5Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJ0cm92YXRlIGVzdGVuc2lvbmkgcmVwb3NpdG9yeSBzY29ub3NjaXV0ZToiCisKKyM6IHNldHVwLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbCdhcGVydHVyYSBkaSAnJXMnIgorCisjOiBzZXR1cC5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIiclcycgdHJvcHBvIGdyYW5kZSBwZXIgZXNzZXJlIHVuIGZpbGUgLmdpdCIKKworIzogc2V0dXAuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbGEgbGV0dHVyYSBkaSAlcyIKKworIzogc2V0dXAuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiCittc2dzdHIgImZvcm1hdG8gZmlsZSBHaXQgbm9uIHZhbGlkbzogJXMiCisKKyM6IHNldHVwLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgIm5lc3N1biBwZXJjb3JzbyBwcmVzZW50ZSBuZWwgZmlsZSBHaXQ6ICVzIgorCisjOiBzZXR1cC5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIiVzIG5vbiDDqCB1biByZXBvc2l0b3J5IEdpdCIKKworIzogc2V0dXAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiJyQlcycgw6ggdHJvcHBvIGdyYW5kZSIKKworIzogc2V0dXAuYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgIiclcycgbm9uIMOoIHVuIHJlcG9zaXRvcnkgR2l0IgorCisjOiBzZXR1cC5jOjcyMCBzZXR1cC5jOjcyMiBzZXR1cC5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbW9kaWZpY2FyZSBsYSBkaXJlY3RvcnkgY29ycmVudGUgaW4gJyVzJyIKKworIzogc2V0dXAuYzo3MjUgc2V0dXAuYzo3ODEgc2V0dXAuYzo3OTEgc2V0dXAuYzo4MzAgc2V0dXAuYzo4MzgKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdG9ybmFyZSBhbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29ycmVudGUiCisKKyM6IHNldHVwLmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclKnMlcyVzJyIKK21zZ3N0ciAic3RhdCBkaSAnJSpzJXMlcycgbm9uIHJpdXNjaXRvIgorCisjOiBzZXR1cC5jOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29ycmVudGUiCisKKyM6IHNldHVwLmM6MTA5OSBzZXR1cC5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlbnRyYXJlIGluICclcyciCisKKyM6IHNldHVwLmM6MTExMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIHJlcG9zaXRvcnkgR2l0IChuw6kgbG8gw6ggYWxjdW5hIGRlbGxlIGRpcmVjdG9yeSBnZW5pdHJpY2kpIgorCisjOiBzZXR1cC5jOjExMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICIiCisibm9uIMOoIHVuIHJlcG9zaXRvcnkgR2l0IChuw6kgbG8gw6ggYWxjdW4gZ2VuaXRvcmUgZmlubyBhbCBwdW50byBkaSBtb3VudCAlcylcbiIKKyJNaSBmZXJtbyBhbCBsaW1pdGUgZGVsIGZpbGVzeXN0ZW0gKGwnb3B6aW9uZSBHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNICIKKyJub24gw6ggaW1wb3N0YXRhKS4iCisKKyM6IHNldHVwLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorInNpIMOoIHZlcmlmaWNhdG8gdW4gcHJvYmxlbWEgY29uIGlsIHZhbG9yZSBtb2RvIGZpbGUgZGkgY29yZS5zaGFyZWRSZXBvc2l0b3J5ICIKKyIoMCUuM28pLlxuIgorIklsIHByb3ByaWV0YXJpbyBkZWkgZmlsZSBkZXZlIGF2ZXJlIHNlbXByZSBpIHBlcm1lc3NpIGRpIGxldHR1cmEgZSBzY3JpdHR1cmEuIgorCisjOiBzZXR1cC5jOjEyNzEKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIgorbXNnc3RyICJhcGVydHVyYSBkaSAvZGV2L251bGwgbyBkdXAgbm9uIHJpdXNjaXRhIgorCisjOiBzZXR1cC5jOjEyODYKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiZm9yayBub24gcml1c2NpdGEiCisKKyM6IHNldHVwLmM6MTI5MQorbXNnaWQgInNldHNpZCBmYWlsZWQiCittc2dzdHIgInNldHNpZCBub24gcml1c2NpdGEiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICIiCisibGEgZGlyZWN0b3J5IG9nZ2V0dGkgJXMgbm9uIGVzaXN0ZTsgY29udHJvbGxhIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCisKKyM6IHNoYTEtZmlsZS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiCittc2dzdHIgImltcG9zc2liaWxlIG5vcm1hbGl6emFyZSBpbCBwZXJjb3JzbyBhbHRlcm5hdGl2byBvZ2dldHRvOiAlcyIKKworIzogc2hhMS1maWxlLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpZ25vcmluZyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgbmVzdGluZyB0b28gZGVlcCIKK21zZ3N0ciAiIgorIiVzOiBpZ25vcm8gZ2xpIGFyY2hpdmkgb2dnZXR0byBhbHRlcm5hdGl2aSwgbGEgbmlkaWZpY2F6aW9uZSDDqCB0cm9wcG8gIgorInByb2ZvbmRhIgorCisjOiBzaGExLWZpbGUuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBvYmplY3QgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbm9ybWFsaXp6YXJlIGxhIGRpcmVjdG9yeSBvZ2dldHRpOiAlcyIKKworIzogc2hhMS1maWxlLmM6NjI1Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBmZG9wZW4gc3VsIGZpbGUgZGkgbG9jayBhbHRlcm5hdGVzIgorCisjOiBzaGExLWZpbGUuYzo2NDMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBhbHRlcm5hdGVzIgorCisjOiBzaGExLWZpbGUuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSBuZXcgYWx0ZXJuYXRlcyBmaWxlIGludG8gcGxhY2UiCittc2dzdHIgImltcG9zc2liaWxlIHNwb3N0YXJlIGlsIG51b3ZvIGZpbGUgYWx0ZXJuYXRlcyBuZWxsYSBwb3NpemlvbmUgY29ycmV0dGEiCisKKyM6IHNoYTEtZmlsZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImlsIHBlcmNvcnNvICclcycgbm9uIGVzaXN0ZSIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICIiCisibCdhZ2dpdW50YSBkZWwgcmVwb3NpdG9yeSBkaSByaWZlcmltZW50byAnJXMnIGNvbWUgY2hlY2tvdXQgY29sbGVnYXRvIG5vbiDDqCAiCisiYW5jb3JhIHN1cHBvcnRhdGEuIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiaWwgcmVwb3NpdG9yeSBkaSByaWZlcmltZW50byAnJXMnIG5vbiDDqCB1biByZXBvc2l0b3J5IGxvY2FsZS4iCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgImlsIHJlcG9zaXRvcnkgZGkgcmlmZXJpbWVudG8gJyVzJyDDqCBzaGFsbG93IgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJpbCByZXBvc2l0b3J5IGRpIHJpZmVyaW1lbnRvICclcycgw6ggdW4gZ3JhZnQiCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgInJpZ2Egbm9uIHZhbGlkYSBkdXJhbnRlIGwnYW5hbGlzaSBkZWkgcmlmZXJpbWVudGkgZGVnbGkgYWx0ZXJuYXRpOiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAidGVudG8gZGkgZXNlZ3VpcmUgbW1hcCAlPFBSSXVNQVg+IGFsIGRpIHNvcHJhIGRlbCBsaW1pdGUgJTxQUkl1TUFYPiIKKworIzogc2hhMS1maWxlLmM6OTY0Cittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIm1tYXAgbm9uIHJpdXNjaXRhIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICJsJ29nZ2V0dG8gJXMgw6ggdnVvdG8iCisKKyM6IHNoYTEtZmlsZS5jOjEyNTIgc2hhMS1maWxlLmM6MjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJvZ2dldHRvIHNjaW9sdG8gJyVzJyBjb3Jyb3R0byIKKworIzogc2hhMS1maWxlLmM6MTI1NCBzaGExLWZpbGUuYzoyMzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICJkYXRpIGludXRpbGl6emFiaWxpIHByZXNlbnRpIGFsbGEgZmluZSBkZWxsJ29nZ2V0dG8gc2Npb2x0byAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxMjk2Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAidGlwbyBvZ2dldHRvIG5vbiB2YWxpZG8iCisKKyM6IHNoYTEtZmlsZS5jOjEzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZGVjb21wcmltZXJlIGwnaW50ZXN0YXppb25lICVzIGNvbiAtLWFsbG93LXVua25vd24tdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZGVjb21wcmltZXJlIGwnaW50ZXN0YXppb25lICVzIgorCisjOiBzaGExLWZpbGUuYzoxMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2ludGVzdGF6aW9uZSAlcyBjb24gLS1hbGxvdy11bmtub3duLXR5cGUiCisKKyM6IHNoYTEtZmlsZS5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2ludGVzdGF6aW9uZSAlcyIKKworIzogc2hhMS1maWxlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImxldHR1cmEgZGVsbCdvZ2dldHRvICVzIG5vbiByaXVzY2l0YSIKKworIzogc2hhMS1maWxlLmM6MTU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICIlcyBzb3N0aXR1dGl2byBub24gdHJvdmF0byBwZXIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2dnZXR0byBzY2lvbHRvICVzIChzYWx2YXRvIGluICVzKSDDqCBjb3Jyb3R0byIKKworIzogc2hhMS1maWxlLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2dnZXR0byBhcmNoaXZpYXRvICVzIChzYWx2YXRvIGluICVzKSDDqCBjb3Jyb3R0byIKKworIzogc2hhMS1maWxlLmM6MTY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSAlcyIKKworIzogc2hhMS1maWxlLmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgaW1wb3N0YXJlIGkgcGVybWVzc2kgYSAnJXMnIgorCisjOiBzaGExLWZpbGUuYzoxNzEzCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiZXJyb3JlIGRpIHNjcml0dHVyYSBkZWwgZmlsZSIKKworIzogc2hhMS1maWxlLmM6MTczMgorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbGEgY2hpdXN1cmEgZGVsIGZpbGUgb2dnZXR0byBzY2lvbHRvIgorCisjOiBzaGExLWZpbGUuYzoxNzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKyJwZXJtZXNzaSBub24gc3VmZmljaWVudGkgcGVyIGwnYWdnaXVudGEgZGkgdW4gb2dnZXR0byBhbCBkYXRhYmFzZSByZXBvc2l0b3J5ICIKKyIlcyIKKworIzogc2hhMS1maWxlLmM6MTc5OQorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBpbCBmaWxlIHRlbXBvcmFuZW8iCisKKyM6IHNoYTEtZmlsZS5jOjE4MjMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgb2dnZXR0byBzY2lvbHRvIgorCisjOiBzaGExLWZpbGUuYzoxODI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29tcHJpbWVyZSBjb24gZGVmbGF0ZSBpbCBudW92byBvZ2dldHRvICVzICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgImRlZmxhdGVFbmQgbm9uIHJpdXNjaXRhIHN1bGwnb2dnZXR0byAlcyAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgInNvbm8gY29uZnVzbyBkYWxsJ29yaWdpbmUgZGF0aSBvZ2dldHRvIG5vbiBzdGFiaWxlIHBlciAlcyIKKworIzogc2hhMS1maWxlLmM6MTg0NyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAlcyIKK21zZ3N0ciAidXRpbWUoKSBkaSAlcyBub24gcml1c2NpdGEiCisKKyM6IHNoYTEtZmlsZS5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ29nZ2V0dG8gcGVyICVzIgorCisjOiBzaGExLWZpbGUuYzoxOTYyCittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgImNvbW1pdCBjb3Jyb3R0byIKKworIzogc2hhMS1maWxlLmM6MTk3MAorbXNnaWQgImNvcnJ1cHQgdGFnIgorbXNnc3RyICJ0YWcgY29ycm90dG8iCisKKyM6IHNoYTEtZmlsZS5jOjIwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiZXJyb3JlIGRpIGxldHR1cmEgZHVyYW50ZSBsJ2luZGljaXp6YXppb25lIGRpICVzIgorCisjOiBzaGExLWZpbGUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IHJlYWQgd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImxldHR1cmEgdHJvcHBvIGJyZXZlIGR1cmFudGUgbCdpbmRpY2l6emF6aW9uZSBkaSAlcyIKKworIzogc2hhMS1maWxlLmM6MjE0NSBzaGExLWZpbGUuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiCittc2dzdHIgIiVzOiBpbnNlcmltZW50byBkZWwgcmVjb3JkIG5lbCBkYXRhYmFzZSBub24gcml1c2NpdG8iCisKKyM6IHNoYTEtZmlsZS5jOjIxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiJXM6IHRpcG8gZGkgZmlsZSBub24gc3VwcG9ydGF0byIKKworIzogc2hhMS1maWxlLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiVzIG5vbiDDqCB1biBvZ2dldHRvIHZhbGlkbyIKKworIzogc2hhMS1maWxlLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIG9nZ2V0dG8gJyVzJyB2YWxpZG8iCisKKyM6IHNoYTEtZmlsZS5jOjIyMTMgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0MDMgc2hhMS1maWxlLmM6MjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICJtYW5jYXRhIGNvcnJpc3BvbmRlbnphIHBlciAlcyAoYXR0ZXNvICVzKSIKKworIzogc2hhMS1maWxlLmM6MjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbW1hcCBzdSAlcyIKKworIzogc2hhMS1maWxlLmM6MjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZGVjb21wcmltZXJlIGwnaW50ZXN0YXppb25lIGRpICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBoZWFkZXIgb2YgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbCdpbnRlc3RhemlvbmUgZGkgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBjb250ZW50cyBvZiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZGVjb21wcmltZXJlIGkgY29udGVudXRpIGRpICVzIgorCisjOiBzaGExLW5hbWUuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgImxvIFNIQTEgYnJldmUgJXMgw6ggYW1iaWd1byIKKworIzogc2hhMS1uYW1lLmM6NDk4Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiSSBjYW5kaWRhdGkgc29ubzoiCisKKyM6IHNoYTEtbmFtZS5jOjc5NworbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJHaXQgbm9ybWFsbWVudGUgbm9uIGNyZWEgbWFpIHVuIHJpZmVyaW1lbnRvIGNoZSB0ZXJtaW5hIGNvbiA0MFxuIgorImNhcmF0dGVyaSBlc2FkZWNpbWFsaSBwZXJjaMOpIHNhcsOgIGlnbm9yYXRvIHNlIHNpIHNwZWNpZmljYW5vXG4iCisic2VtcGxpY2VtZW50ZSA0MCBjYXJhdHRlcmkgZXNhZGVjaW1hbGkuIFF1ZXN0aSByaWZlcmltZW50aVxuIgorInBvdHJlYmJlcm8gZXNzZXJlIGNyZWF0aSBwZXIgZXJyb3JlLiBBZCBlc2VtcGlvOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJkb3ZlIFwiJGJyXCIgw6ggdnVvdG8gcGVyIHF1YWxjaGUgbW90aXZvIGUgcXVpbmRpIHZpZW5lIGNyZWF0byB1blxuIgorInJpZmVyaW1lbnRvIGNvbiA0MCBjYXJhdHRlcmkgZXNhZGVjaW1hbGkuIEVzYW1pbmEgdGFsaVxuIgorInJpZmVyaW1lbnRpIGVkIGVsaW1pbmFsaSBzZSBuZWNlc3NhcmlvLiBEaXNhYmlsaXRhIHF1ZXN0b1xuIgorIm1lc3NhZ2dpbyBlc2VndWVuZG8gXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIiCittc2dzdHIgIiV1LiUyLjJ1IEdpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQi9zIgorbXNnc3RyICIldS4lMi4ydSBHaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlCisjOiBzdHJidWYuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCIgorbXNnc3RyICIldS4lMi4ydSBNaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgTWlCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZQorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzIgorbXNnc3RyWzBdICIldSBieXRlIgorbXNnc3RyWzFdICIldSBieXRlIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiV1IGJ5dGUvcyIKK21zZ3N0clsxXSAiJXUgYnl0ZS9zIgorCisjOiBzdHJidWYuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIG1vZGlmaWNhcmUgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTE0IHN1Ym1vZHVsZS5jOjE0MworbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgbW9kaWZpY2FyZSBpbCBmaWxlIC5naXRtb2R1bGVzIG5vbiBzb3R0b3Bvc3RvIGEgbWVyZ2UsIHJpc29sdmkgIgorInByaW1hIGkgY29uZmxpdHRpIGRpIG1lcmdlIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSB1bmEgc2V6aW9uZSBpbiAuZ2l0bW9kdWxlcyBkb3ZlIHBhdGg9JXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGxhIHZvY2UgLmdpdG1vZHVsZXMgcGVyICVzIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICJzdGFnaW5nIGRlbCBmaWxlIC5naXRtb2R1bGVzIGFnZ2lvcm5hdG8gbm9uIHJpdXNjaXRvIgorCisjOiBzdWJtb2R1bGUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgIm5lbCBzb3R0b21vZHVsbyBub24gcG9wb2xhdG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiTG8gc3BlY2lmaWNhdG9yZSBwZXJjb3JzbyAnJXMnIMOoIG5lbCBzb3R0b21vZHVsbyAnJS4qcyciCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAibGEgdm9jZSBzb3R0b21vZHVsbyAnJXMnICglcykgw6ggdW4gJXMsIG5vbiB1biBjb21taXQiCisKKyM6IHN1Ym1vZHVsZS5jOjExNDcgYnVpbHRpbi9icmFuY2guYzo2ODAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwMTYKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmlzb2x2ZXJlIEhFQUQgY29tZSByaWZlcmltZW50byB2YWxpZG8uIgorCisjOiBzdWJtb2R1bGUuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3Mgc3VibW9kdWxlICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGFjY2VkZXJlIGFsIHNvdHRvbW9kdWxvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICInJXMnIG5vbiByaWNvbm9zY2l1dG8gY29tZSByZXBvc2l0b3J5IEdpdCIKKworIzogc3VibW9kdWxlLmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhdnZpYXJlICdnaXQgc3RhdHVzJyBuZWwgc290dG9tb2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgJ2dpdCBzdGF0dXMnIG5lbCBzb3R0b21vZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhbm51bGxhcmUgbCdpbXBvc3RhemlvbmUgZGVsbCdvcHppb25lIGNvcmUud29ya3RyZWUgbmVsICIKKyJzb3R0b21vZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxOTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAiaWwgc290dG9tb2R1bG8gJyVzJyBoYSBsJ2luZGljZSBzcG9yY28iCisKKyM6IHN1Ym1vZHVsZS5jOjE5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGlsIHNvdHRvbW9kdWxvICclcycuIgorCisjOiBzdWJtb2R1bGUuYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSBnaXQgZGlyICclcycgaXMgaW5zaWRlIGdpdCBkaXIgJyUuKnMnIgorbXNnc3RyICIiCisibGEgZGlyZWN0b3J5IEdpdCBkZWwgc290dG9tb2R1bG8gJyVzJyDDqCBhbGwnaW50ZXJubyBkZWxsYSBkaXJlY3RvcnkgR2l0ICclLipzJyIKKworIzogc3VibW9kdWxlLmM6MjA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicmVsb2NhdGVfZ2l0ZGlyIGZvciBzdWJtb2R1bGUgJyVzJyB3aXRoIG1vcmUgdGhhbiBvbmUgd29ya3RyZWUgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorInJlbG9jYXRlX2dpdGRpciBub24gw6ggc3VwcG9ydGF0YSBwZXIgaWwgc290dG9tb2R1bG8gJyVzJyBjb24gcGnDuSBkaSB1biAiCisiYWxiZXJvIGRpIGxhdm9ybyIKKworIzogc3VibW9kdWxlLmM6MjA2MCBzdWJtb2R1bGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHJpY2VyY2FyZSBpbCBub21lIHBlciBpbCBzb3R0b21vZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgIm1pIHJpZml1dG8gZGkgc3Bvc3RhcmUgJyVzJyBpbiB1bmEgZGlyZWN0b3J5IEdpdCBlc2lzdGVudGUiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorIlN0byBtaWdyYW5kbyBsYSBkaXJlY3RvcnkgR2l0IGRpICclcyVzJyBkYVxuIgorIiclcycgYVxuIgorIiclcydcbiIKKworIzogc3VibW9kdWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsJ2F6aW9uZSByaWNvcnNpdmFtZW50ZSBuZWwgc290dG9tb2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MjE5OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXZ2aWFyZSBscy1maWxlcyBpbiAuLiIKKworIzogc3VibW9kdWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgImxzLXRyZWUgaGEgcmVzdGl0dWl0byBpbCB2YWxvcmUgZGkgcml0b3JubyBpbmF0dGVzbyAlZCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAiaWdub3JvIHVuIG5vbWUgc290dG9tb2R1bG8gc29zcGV0dG86ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzAzCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICJpIHZhbG9yaSBuZWdhdGl2aSBub24gc29ubyBjb25zZW50aXRpIHBlciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICclcycgd2hpY2ggbWF5IGJlIGludGVycHJldGVkIGFzIGEgY29tbWFuZC1saW5lIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKyJpZ25vcm8gJyVzJyBjaGUgcG90cmViYmUgZXNzZXJlIGludGVycHJldGF0byBjb21lIGFyZ29tZW50byBkZWxsYSByaWdhIGRpICIKKyJjb21hbmRvOiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAidmFsb3JlIG5vbiB2YWxpZG8gcGVyICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbGEgdm9jZSAuZ2l0bW9kdWxlcyAlcyIKKworIzogdHJhaWxlci5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJydW5uaW5nIHRyYWlsZXIgY29tbWFuZCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkZWwgY29tYW5kbyBmaW5hbGUgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJ2YWxvcmUgJyVzJyBzY29ub3NjaXV0byBwZXIgbGEgY2hpYXZlICclcyciCisKKyM6IHRyYWlsZXIuYzo1MzkgdHJhaWxlci5jOjU0NCBidWlsdGluL3JlbW90ZS5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICJwacO5IGRpIHVuICVzIgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgInRva2VuIGZpbmFsZSB2dW90byBuZWxsYSBzdHJpbmdhIGZpbmFsZSAnJS4qcyciCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGZpbGUgZGkgaW5wdXQgJyVzJyIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgZGFsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IHRyYWlsZXIuYzoxMDExIHdyYXBwZXIuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGxvIHN0YXQgZGkgJyVzJyIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgImlsIGZpbGUgJXMgbm9uIMOoIHVuIGZpbGUgcmVnb2xhcmUiCisKKyM6IHRyYWlsZXIuYzoxMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgImlsIGZpbGUgJXMgbm9uIMOoIHNjcml2aWJpbGUgZGFsbCd1dGVudGUiCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSB1biBmaWxlIHRlbXBvcmFuZW8iCisKKyM6IHRyYWlsZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUgdG8gJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJpZGVub21pbmFyZSBpbCBmaWxlIHRlbXBvcmFuZW8gaW4gJXMiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiTCd1cHN0cmVhbSBkaSAnJXMnIHNhcmViYmUgaW1wb3N0YXRvIGEgJyVzJyBkaSAnJXMnXG4iCisKKyM6IHRyYW5zcG9ydC5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBidW5kbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBidW5kbGUgJyVzJyIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAidHJhc3BvcnRvOiBvcHppb25lIHByb2ZvbmRpdMOgICclcycgbm9uIHZhbGlkYSIKKworIzogdHJhbnNwb3J0LmM6MjY2Cittc2dpZCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscyIKK21zZ3N0ciAidmVkaSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIHBlciBtYWdnaW9yaSBkZXR0YWdsaSIKKworIzogdHJhbnNwb3J0LmM6MjY3Cittc2dpZCAic2VydmVyIG9wdGlvbnMgcmVxdWlyZSBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgbGF0ZXIiCittc2dzdHIgImxlIG9wemlvbmkgc2VydmVyIHJpY2hpZWRvbm8gbGEgdmVyc2lvbmUgMiBvIHN1Y2Nlc3NpdmEgZGVsIHByb3RvY29sbG8iCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbGEgY29uZmlndXJhemlvbmUgdHJhbnNwb3J0LmNvbG9yLioiCisKKyM6IHRyYW5zcG9ydC5jOjcwNQorbXNnaWQgInN1cHBvcnQgZm9yIHByb3RvY29sIHYyIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgInN1cHBvcnRvIGFsbGEgdmVyc2lvbmUgMiBkZWwgcHJvdG9jb2xsbyBub24gYW5jb3JhIGltcGxlbWVudGF0byIKKworIzogdHJhbnNwb3J0LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgZm9yIGNvbmZpZyAnJXMnOiAlcyIKK21zZ3N0ciAidmFsb3JlIHNjb25vc2NpdXRvIHBlciBsYSBjb25maWd1cmF6aW9uZSAnJXMnOiAlcyIKKworIzogdHJhbnNwb3J0LmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydCAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ0cmFzcG9ydG8gJyVzJyBub24gY29uc2VudGl0byIKKworIzogdHJhbnNwb3J0LmM6OTQ5Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAiZ2l0LW92ZXItcnN5bmMgbm9uIMOoIHBpw7kgc3VwcG9ydGF0byIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIHBlcmNvcnNpIHNvdHRvbW9kdWxvIGNvbnRlbmdvbm8gbW9kaWZpY2hlXG4iCisibm9uIHRyb3ZhdGUgc3UgbmVzc3VuIHJlbW90bzpcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQcm92YVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisibyBlc2VndWkgdW4gY2QgYWwgcGVyY29yc28gZSB1c2FcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisicGVyIGVzZWd1aXJuZSBpbCBwdXNoIGEgdW4gcmVtb3RvLlxuIgorIlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDU2Cittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICJJbnRlcnJvbXBvIGwnb3BlcmF6aW9uZS4iCisKKyM6IHRyYW5zcG9ydC5jOjEyMDEKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBhbGwgbmVlZGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgInB1c2ggZGkgdHV0dGkgaSBzb3R0b21vZHVsaSByaWNoaWVzdGkgbm9uIHJpdXNjaXRvIgorCisjOiB0cmFuc3BvcnQuYzoxMzQ1IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTYKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAib3BlcmF6aW9uZSBub24gc3VwcG9ydGF0YSBkYWwgcHJvdG9jb2xsbyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgInNjcml0dHVyYSBjb21wbGV0YSB2ZXJzbyBsJ2hlbHBlciByZW1vdG8gbm9uIHJpdXNjaXRhIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgbCdoZWxwZXIgcmVtb3RvIHBlciAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTYwIHRyYW5zcG9ydC1oZWxwZXIuYzo1NzAKK21zZ2lkICJjYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZHVwbGljYXJlIGlsIGRlc2NyaXR0b3JlIGZpbGUgZGVsbCdvdXRwdXQgaGVscGVyIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIG1hbmRhdG9yeSBjYXBhYmlsaXR5ICVzOyB0aGlzIHJlbW90ZSBoZWxwZXIgcHJvYmFibHkgbmVlZHMgbmV3ZXIgIgorInZlcnNpb24gb2YgR2l0IgorbXNnc3RyICIiCisiY2FwYWJpbGl0eSBuZWNlc3NhcmlhICVzIHNjb25vc2NpdXRhOyBxdWVzdCdoZWxwZXIgcmVtb3RvIHByb2JhYmlsbWVudGUgIgorInJpY2hpZWRlIHVuYSB2ZXJzaW9uZSBkaSBHaXQgcGnDuSByZWNlbnRlIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICJxdWVzdG8gaGVscGVyIHJlbW90byBkb3ZyZWJiZSBpbXBsZW1lbnRhcmUgbGEgY2FwYWJpbGl0eSByZWZzcGVjIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Mjg0IHRyYW5zcG9ydC1oZWxwZXIuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciCittc2dzdHIgIiVzIGhhIGludmlhdG8gdW4gbWVzc2FnZ2lvIGluYXR0ZXNvOiAnJXMnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIlcyBoYSBibG9jY2F0byBhbmNoZSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQ5MgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWltcG9ydCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgZmFzdC1pbXBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MTUKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IgorbXNnc3RyICJlcnJvcmUgZHVyYW50ZSBsJ2VzZWN1emlvbmUgZGkgZmFzdC1pbXBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDQgdHJhbnNwb3J0LWhlbHBlci5jOjExMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIHJpZmVyaW1lbnRvICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiCittc2dzdHIgInJpc3Bvc3RhIGluYXR0ZXNhIGEgY29ubmVjdDogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTEKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorImwnaW1wb3N0YXppb25lIGRlbCBwZXJjb3JzbyBkZWwgc2Vydml6aW8gcmVtb3RvIG5vbiDDqCBzdXBwb3J0YXRhIGRhbCAiCisicHJvdG9jb2xsbyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxMworbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAicGVyY29yc28gc2Vydml6aW8gcmVtb3RvIG5vbiB2YWxpZG8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb25uZXR0ZXJzaSBhbCBzb3R0b3NlcnZpemlvICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICJhdHRlc2kgb2svZXJyb3IsIGwnaGVscGVyIGhhIGludmlhdG8gJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgImwnaGVscGVyIGhhIHNlZ25hbGF0byB1bm8gc3RhdG8gaW5hdHRlc28gZGkgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIKK21zZ3N0ciAibCdoZWxwZXIgJXMgbm9uIHN1cHBvcnRhIGRyeS1ydW4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgImwnaGVscGVyICVzIG5vbiBzdXBwb3J0YSAtLXNpZ25lZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZD1pZi1hc2tlZCIKK21zZ3N0ciAibCdoZWxwZXIgJXMgbm9uIHN1cHBvcnRhIC0tc2lnbmVkPWlmLWFza2VkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIgorbXNnc3RyICJsJ2hlbHBlciAlcyBub24gc3VwcG9ydGEgLS1hdG9taWMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAibCdoZWxwZXIgJXMgbm9uIHN1cHBvcnRhICdwdXNoLW9wdGlvbiciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjQKK21zZ2lkICJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIKK21zZ3N0ciAiIgorImwnaGVscGVyIHJlbW90byBub24gc3VwcG9ydGEgaWwgcHVzaDsgw6ggbmVjZXNzYXJpbyB1bm8gc3BlY2lmaWNhdG9yZSAiCisicmlmZXJpbWVudG8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAibCdoZWxwZXIgJXMgbm9uIHN1cHBvcnRhICdmb3JjZSciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDE2Cittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBmYXN0LWV4cG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjEKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICJlcnJvcmUgZHVyYW50ZSBsJ2VzZWN1emlvbmUgZGkgZmFzdC1leHBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorIk5lc3N1biByaWZlcmltZW50byBpbiBjb211bmUgZSBuZXNzdW5vIHNwZWNpZmljYXRvOyBub24gZXNlZ3VvIG51bGxhLlxuIgorIkZvcnNlIGRvdnJlc3RpIHNwZWNpZmljYXJlIHVuIGJyYW5jaCBjb21lICdtYXN0ZXInLlxuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICJyaXNwb3N0YSBtYWxmb3JtYXRhIG5lbGwnZWxlbmNvIHJpZmVyaW1lbnRpOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCglcykgZmFpbGVkIgorbXNnc3RyICJyZWFkKCVzKSBub24gcml1c2NpdGEiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRlKCVzKSBmYWlsZWQiCittc2dzdHIgIndyaXRlKCVzKSBub24gcml1c2NpdGEiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgInRocmVhZCAlcyBub24gcml1c2NpdG8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgImpvaW4gbm9uIHJpdXNjaXRhIHBlciBpbCB0aHJlYWQgJXM6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM3MCB0cmFuc3BvcnQtaGVscGVyLmM6MTM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgaWwgdGhyZWFkIHBlciBsYSBjb3BpYSBkZWkgZGF0aTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIndhaXQgbm9uIHJpdXNjaXRhIHBlciBpbCBwcm9jZXNzbyAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgInByb2Nlc3NvICVzIG5vbiByaXVzY2l0byIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzMgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDIKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXZ2aWFyZSBpbCB0aHJlYWQgcGVyIGxhIGNvcGlhIGRlaSBkYXRpIgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAib2dnZXR0byBhbGJlcm8gdHJvcHBvIGNvcnRvIgorCisjOiB0cmVlLXdhbGsuYzozOQorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgIm1vZG8gbWFsZm9ybWF0byBuZWxsYSB2b2NlIGRlbGwnYWxiZXJvIgorCisjOiB0cmVlLXdhbGsuYzo0MworbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgIm5vbWUgZmlsZSB2dW90byBuZWxsYSB2b2NlIGRlbGwnYWxiZXJvIgorCisjOiB0cmVlLXdhbGsuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IGNvbnRhaW5zIGJhY2tzbGFzaDogJyVzJyIKK21zZ3N0ciAiaWwgbm9tZSBmaWxlIG5lbGxhIHZvY2UgYWxiZXJvIGNvbnRpZW5lIHVuYSBiYXJyYSByb3Zlc2NpYXRhOiAnJXMnIgorCisjOiB0cmVlLXdhbGsuYzoxMjQKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBmaWxlIgorbXNnc3RyICJmaWxlIGFsYmVyIHRyb3BwbyBjb3J0byIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkxlIHR1ZSBtb2RpZmljaGUgbG9jYWxpIGFpIHNlZ3VlbnRpIGZpbGUgc2FyZWJiZXJvIHNvdnJhc2NyaXR0ZSBjb24gaWwgIgorImNoZWNrb3V0OlxuIgorIiUlc0VzZWd1aSBpbCBjb21taXQgbyBsbyBzdGFzaCBkZWxsZSBtb2RpZmljaGUgcHJpbWEgZGkgY2FtYmlhcmUgYnJhbmNoLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJMZSB0dWUgbW9kaWZpY2hlIGxvY2FsaSBhaSBzZWd1ZW50aSBmaWxlIHNhcmViYmVybyBzb3ZyYXNjcml0dGUgY29uIGlsICIKKyJjaGVja291dDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkxlIHR1ZSBtb2RpZmljaGUgbG9jYWxpIGFpIHNlZ3VlbnRpIGZpbGUgc2FyZWJiZXJvIHNvdnJhc2NyaXR0ZSBjb24gaWwgIgorIm1lcmdlOlxuIgorIiUlc0VzZWd1aSBpbCBjb21taXQgbyBsbyBzdGFzaCBkZWxsZSBtb2RpZmljaGUgcHJpbWEgZGkgZXNlZ3VpcmUgaWwgbWVyZ2UuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkxlIHR1ZSBtb2RpZmljaGUgbG9jYWxpIGFpIHNlZ3VlbnRpIGZpbGUgc2FyZWJiZXJvIHNvdnJhc2NyaXR0ZSBjb24gaWwgIgorIm1lcmdlOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiTGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgYWkgc2VndWVudGkgZmlsZSBzYXJlYmJlcm8gc292cmFzY3JpdHRlIGNvbiAiCisibCdvcGVyYXppb25lIGRpICVzOlxuIgorIiUlc0VzZWd1aSBpbCBjb21taXQgbyBsbyBzdGFzaCBkZWxsZSBtb2RpZmljaGUgcHJpbWEgZGkgZXNlZ3VpcmUgIgorImwnb3BlcmF6aW9uZSBkaSAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiTGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgYWkgc2VndWVudGkgZmlsZSBzYXJlYmJlcm8gc292cmFzY3JpdHRlIGNvbiAiCisibCdvcGVyYXppb25lIGRpICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyJMJ2FnZ2lvcm5hbWVudG8gZGVsbGUgc2VndWVudGkgZGlyZWN0b3J5IGZhcmViYmUgc8OsIGNoZSBkZWkgZmlsZSBub24gIgorInRyYWNjaWF0aSBpbiBlc3NlIGNvbnRlbnV0aSB2ZW5nYW5vIHBlcnNpOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBub24gdHJhY2NpYXRpIHByZXNlbnRpIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBzYXJlYmJlcm8gIgorImVsaW1pbmF0aSBjb24gaWwgY2hlY2tvdXQ6XG4iCisiJSVzU3Bvc3RhbGkgbyBlbGltaW5hbGkgcHJpbWEgZGkgY2FtYmlhcmUgYnJhbmNoLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSBwcmVzZW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvICIKKyJlbGltaW5hdGkgY29uIGlsIGNoZWNrb3V0OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBub24gdHJhY2NpYXRpIHByZXNlbnRpIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBzYXJlYmJlcm8gIgorImVsaW1pbmF0aSBkYWwgbWVyZ2U6XG4iCisiJSVzU3Bvc3RhbGkgbyBlbGltaW5hbGkgcHJpbWEgZGkgZXNlZ3VpcmUgaWwgbWVyZ2UuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBub24gdHJhY2NpYXRpIHByZXNlbnRpIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBzYXJlYmJlcm8gIgorImVsaW1pbmF0aSBkYWwgbWVyZ2U6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisiZWxpbWluYXRpIGNvbiBsJ29wZXJhemlvbmUgZGkgJXM6XG4iCisiJSVzU3Bvc3RhbGkgbyBlbGltaW5hbGkgcHJpbWEgZGkgZXNlZ3VpcmUgbCdvcGVyYXppb25lIGRpICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSBwcmVzZW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvICIKKyJlbGltaW5hdGkgY29uIGwnb3BlcmF6aW9uZSBkaSAlczpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSBwcmVzZW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvICIKKyJzb3ZyYXNjcml0dGkgY29uIGlsIGNoZWNrb3V0OlxuIgorIiUlc1Nwb3N0YWxpIG8gZWxpbWluYWxpIHByaW1hIGRpIGNhbWJpYXJlIGJyYW5jaC4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSBwcmVzZW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvICIKKyJzb3ZyYXNjcml0dGkgY29uIGlsIGNoZWNrb3V0OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aSBwcmVzZW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvICIKKyJzb3ZyYXNjcml0dGkgZGFsIG1lcmdlOlxuIgorIiUlc1Nwb3N0YWxpIG8gZWxpbWluYWxpIHByaW1hIGRpIGVzZWd1aXJlIGlsIG1lcmdlLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisic292cmFzY3JpdHRpIGRhbCBtZXJnZTpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisic292cmFzY3JpdHRpIGNvbiBsJ29wZXJhemlvbmUgZGkgJXM6XG4iCisiJSVzU3Bvc3RhbGkgbyBlbGltaW5hbGkgcHJpbWEgZGkgZXNlZ3VpcmUgbCdvcGVyYXppb25lIGRpICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiSSBzZWd1ZW50aSBmaWxlIG5vbiB0cmFjY2lhdGkgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyAiCisic292cmFzY3JpdHRpIGNvbiBsJ29wZXJhemlvbmUgZGkgJXM6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgIiIKKyJMYSB2b2NlICclcycgc2kgc292cmFwcG9uZSBhICclcycuIEltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNvbGxlZ2FtZW50by4iCisKKyM6IHVucGFjay10cmVlcy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQ6IHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90IHVwIHRvIGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGlsIGNoZWNrb3V0IHNwYXJzZTogbGUgc2VndWVudGkgdm9jaSBub24gc29ubyAiCisiYWdnaW9ybmF0ZTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gc2FyZWJiZXJvIHNvdnJhc2NyaXR0aSBjb24gIgorImwnYWdnaW9ybmFtZW50byBkZWwgY2hlY2tvdXQgc3BhcnNlOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJJIHNlZ3VlbnRpIGZpbGUgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIHNhcmViYmVybyBlbGltaW5hdGkgY29uICIKKyJsJ2FnZ2lvcm5hbWVudG8gZGVsIGNoZWNrb3V0IHNwYXJzZTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgaWwgc290dG9tb2R1bG86XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICJJbnRlcnJvbXBvIGwnb3BlcmF6aW9uZVxuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTcKK21zZ2lkICJVcGRhdGluZyBmaWxlcyIKK21zZ3N0ciAiQWdnaW9ybmFtZW50byBkZWkgZmlsZSBpbiBjb3JzbyIKKworIzogdW5wYWNrLXRyZWVzLmM6MzQ5Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorIm9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtKSBhbmQgb25seSBvbmUgZnJvbSB0aGUgc2FtZVxuIgorImNvbGxpZGluZyBncm91cCBpcyBpbiB0aGUgd29ya2luZyB0cmVlOlxuIgorbXNnc3RyICIiCisiaSBzZWd1ZW50aSBwZXJjb3JzaSBzb25vIGVudHJhdGkgaW4gY29uZmxpdHRvIChhZCBlcy4gc2UgY2lcbiIKKyJzb25vIHBlcmNvcnNpIGNoZSBkaWZmZXJpc2Nvbm8gc29sbyBwZXIgbGUgbWFpdXNjb2xlL21pbnVzY29sZVxuIgorInN1IHVuIGZpbGVzeXN0ZW0gbm9uIHNlbnNpYmlsZSBhIHRhbGUgZGlmZmVyZW56YSkgZSBzb2xvIHVub1xuIgorInBlciBncnVwcG8gaW4gY29uZmxpdHRvIMOoIG5lbGwnYWxiZXJvIGRpIGxhdm9ybzpcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0MQorbXNnaWQgIlVwZGF0aW5nIGluZGV4IGZsYWdzIgorbXNnc3RyICJBZ2dpb3JuYW1lbnRvIGRlaSBjb250cmFzc2VnbmkgaW5kaWNlIGluIGNvcnNvIgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJub21lIHNjaGVtYSBVUkwgbm9uIHZhbGlkbyBvIHN1ZmZpc3NvICc6Ly8nIG1hbmNhbnRlIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInNlcXVlbnphIGRpIGVzY2FwZSAlWFggbm9uIHZhbGlkYSIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAiaG9zdCBtYW5jYW50ZSBlIGxvIHNjaGVtYSBub24gw6ggJ2ZpbGU6JyIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJ1biBVUkwgJ2ZpbGU6JyBub24gcHXDsiBhdmVyZSB1biBudW1lcm8gZGkgcG9ydGEiCisKKyM6IHVybG1hdGNoLmM6MjQ3Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIKK21zZ3N0ciAiY2FyYXR0ZXJpIG5vbiB2YWxpZGkgbmVsIG5vbWUgaG9zdCIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJudW1lcm8gZGkgcG9ydGEgbm9uIHZhbGlkbyIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICJwYXJ0ZSBwZXJjb3JzbyAnLi4nIG5vbiB2YWxpZGEiCisKKyM6IHdvcmt0cmVlLmM6MjU4IGJ1aWx0aW4vYW0uYzoyMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImxldHR1cmEgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IHdvcmt0cmVlLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIiclcycgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIHByaW5jaXBhbGUgbm9uIMOoIGxhIGRpcmVjdG9yeSBkZWwgcmVwb3NpdG9yeSIKKworIzogd29ya3RyZWUuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgd29ya2luZyB0cmVlIGxvY2F0aW9uIgorbXNnc3RyICIiCisiaWwgZmlsZSAnJXMnIG5vbiBjb250aWVuZSBpbCBwZXJjb3JzbyBhc3NvbHV0byBhbGxhIHBvc2l6aW9uZSBkZWxsJ2FsYmVybyBkaSAiCisibGF2b3JvIgorCisjOiB3b3JrdHJlZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIG5vbiBlc2lzdGUiCisKKyM6IHdvcmt0cmVlLmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgLmdpdCBmaWxlLCBlcnJvciBjb2RlICVkIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBmaWxlIC5naXQsIGNvZGljZSBkJ2Vycm9yZSAlZCIKKworIzogd29ya3RyZWUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIiclcycgbm9uIHB1bnRhIGEgJyVzJyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAnJXMnIGluIGxldHR1cmEgZSBzY3JpdHR1cmEiCisKKyM6IHdyYXBwZXIuYzozODcgd3JhcHBlci5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFjY2VkZXJlIGEgJyVzJyIKKworIzogd3JhcHBlci5jOjU5NgorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgb3R0ZW5lcmUgbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBjb3JyZW50ZSIKKworIzogd3Qtc3RhdHVzLmM6MTU4Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICJQZXJjb3JzaSBub24gc290dG9wb3N0aSBhIG1lcmdlOiIKKworIzogd3Qtc3RhdHVzLmM6MTg3IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgcGVyIHJpbXVvdmVyZSBnbGkgZWxlbWVudGkgIgorImRhbGwnYXJlYSBkaSBzdGFnaW5nKSIKKworIzogd3Qtc3RhdHVzLmM6MTkwIHd0LXN0YXR1cy5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXNvdXJjZT0lcyAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHBlciByaW11b3ZlcmUgZ2xpICIKKyJlbGVtZW50aSBkYWxsJ2FyZWEgZGkgc3RhZ2luZykiCisKKyM6IHd0LXN0YXR1cy5jOjE5MyB3dC1zdGF0dXMuYzoyMjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgcGVyIHJpbXVvdmVyZSBnbGkgZWxlbWVudGkgZGFsbCdhcmVhIGRpICIKKyJzdGFnaW5nKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiBwZXIgY29udHJhc3NlZ25hcmUgaWwgY29uZmxpdHRvIGNvbWUgcmlzb2x0bykiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzoyMDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGNvbWUgYXBwcm9wcmlhdG8gcGVyIGNvbnRyYXNzZWduYXJlIGlsICIKKyJjb25mbGl0dG8gY29tZSByaXNvbHRvKSIKKworIzogd3Qtc3RhdHVzLmM6MjAxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgcm0gPGZpbGU+Li4uXCIgcGVyIGNvbnRyYXNzZWduYXJlIGlsIGNvbmZsaXR0byBjb21lIHJpc29sdG8pIgorCisjOiB3dC1zdGF0dXMuYzoyMTEgd3Qtc3RhdHVzLmM6MTA3NAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiTW9kaWZpY2hlIGRpIGN1aSB2ZXJyw6AgZXNlZ3VpdG8gaWwgY29tbWl0OiIKKworIzogd3Qtc3RhdHVzLmM6MjM0IHd0LXN0YXR1cy5jOjEwODMKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIk1vZGlmaWNoZSBub24gbmVsbCdhcmVhIGRpIHN0YWdpbmcgcGVyIGlsIGNvbW1pdDoiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiBwZXIgYWdnaW9ybmFyZSBnbGkgZWxlbWVudGkgZGkgY3VpIHNhcsOgICIKKyJlc2VndWl0byBpbCBjb21taXQpIgorCisjOiB3dC1zdGF0dXMuYzoyNDAKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgcGVyIGFnZ2lvcm5hcmUgZ2xpIGVsZW1lbnRpIGRpIGN1aSBzYXLDoCAiCisiZXNlZ3VpdG8gaWwgY29tbWl0KSIKKworIzogd3Qtc3RhdHVzLmM6MjQxCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgcmVzdG9yZSA8ZmlsZT4uLi5cIiBwZXIgc2NhcnRhcmUgbGUgbW9kaWZpY2hlIG5lbGxhIGRpcmVjdG9yeSAiCisiZGkgbGF2b3JvKSIKKworIzogd3Qtc3RhdHVzLmM6MjQzCittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisiICAoZXNlZ3VpIGlsIGNvbW1pdCBvIHNjYXJ0YSBpbCBjb250ZW51dG8gbm9uIHRyYWNjaWF0byBvIG1vZGlmaWNhdG8gbmVpICIKKyJzb3R0b21vZHVsaSkiCisKKyM6IHd0LXN0YXR1cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCAlcyA8ZmlsZT4uLi5cIiBwZXIgaW5jbHVkZXJlIGwnZWxlbWVudG8gZnJhIHF1ZWxsaSBkaSBjdWkgdmVycsOgICIKKyJlc2VndWl0byBpbCBjb21taXQpIgorCisjOiB3dC1zdGF0dXMuYzoyNjgKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJlbnRyYW1iaSBlbGltaW5hdGk6IgorCisjOiB3dC1zdGF0dXMuYzoyNzAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgImFnZ2l1bnRvIGRhIG5vaToiCisKKyM6IHd0LXN0YXR1cy5jOjI3MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgImVsaW1pbmF0byBkYSBsb3JvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc0Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgImFnZ2l1bnRvIGRhIGxvcm86IgorCisjOiB3dC1zdGF0dXMuYzoyNzYKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiZWxpbWluYXRvIGRhIG5vaToiCisKKyM6IHd0LXN0YXR1cy5jOjI3OAorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICJlbnRyYW1iaSBhZ2dpdW50aToiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImJvdGggbW9kaWZpZWQ6IgorbXNnc3RyICJlbnRyYW1iaSBtb2RpZmljYXRpOiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJudW92byBmaWxlOiIKKworIzogd3Qtc3RhdHVzLmM6MjkyCittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAiY29waWF0bzoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICJlbGltaW5hdG86IgorCisjOiB3dC1zdGF0dXMuYzoyOTYKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgIm1vZGlmaWNhdG86IgorCisjOiB3dC1zdGF0dXMuYzoyOTgKK21zZ2lkICJyZW5hbWVkOiIKK21zZ3N0ciAicmlub21pbmF0bzoiCisKKyM6IHd0LXN0YXR1cy5jOjMwMAorbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICJtb2RpZmljYSB0aXBvOiIKKworIzogd3Qtc3RhdHVzLmM6MzAyCittc2dpZCAidW5rbm93bjoiCittc2dzdHIgInNjb25vc2NpdXRvOiIKKworIzogd3Qtc3RhdHVzLmM6MzA0Cittc2dpZCAidW5tZXJnZWQ6IgorbXNnc3RyICJub24gc290dG9wb3N0byBhIG1lcmdlOiIKKworIzogd3Qtc3RhdHVzLmM6Mzg0Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAibnVvdmkgY29tbWl0LCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4NgorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGVudXRvIG1vZGlmaWNhdG8sICIKKworIzogd3Qtc3RhdHVzLmM6Mzg4Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGVudXRvIG5vbiB0cmFjY2lhdG8sICIKKworIzogd3Qtc3RhdHVzLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gIkxvIHN0YXNoIGF0dHVhbG1lbnRlIGhhICVkIHZvY2UiCittc2dzdHJbMV0gIkxvIHN0YXNoIGF0dHVhbG1lbnRlIGhhICVkIHZvY2kiCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJTb3R0b21vZHVsaSBtb2RpZmljYXRpIG1hIG5vbiBhZ2dpb3JuYXRpOiIKKworIzogd3Qtc3RhdHVzLmM6OTQwCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiTW9kaWZpY2hlIGFpIHNvdHRvbW9kdWxpIGRpIGN1aSB2ZXJyw6AgZXNlZ3VpdG8gaWwgY29tbWl0OiIKKworIzogd3Qtc3RhdHVzLmM6MTAyMgorbXNnaWQgIiIKKyJEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iCittc2dzdHIgIiIKKyJOb24gbW9kaWZpY2FyZSBvIHJpbXVvdmVyZSBsYSByaWdhIHNvcHJhc3RhbnRlLlxuIgorIlR1dHRvIGNpw7IgY2hlIHNpIHRyb3ZhIGFsIGRpIHNvdHRvIGRpIGVzc2Egc2Fyw6AgaWdub3JhdG8uIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTb25vIHN0YXRpIG5lY2Vzc2FyaSAlLjJmIHNlY29uZGkgcGVyIGNhbGNvbGFyZSBpbCBudW1lcm8gZGkgY29tbWl0XG4iCisicHJlY2VkZW50aS9zdWNjZXNzaXZpIG5lbCBicmFuY2guXG4iCisiUHVvaSB1c2FyZSAnLS1uby1haGVhZC1iZWhpbmQnIHBlciBldml0YXJlIGlsIGNhbGNvbG8uXG4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDQKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIkhhaSBkZWkgcGVyY29yc2kgbm9uIHNvdHRvcG9zdGkgYSBtZXJnZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExNDcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIChyaXNvbHZpIGkgY29uZmxpdHRpIGVkIGVzZWd1aSBcImdpdCBjb21taXRcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiCittc2dzdHIgIiAgKHVzYSBcImdpdCBtZXJnZSAtLWFib3J0XCIgcGVyIGludGVycm9tcGVyZSBpbCBtZXJnZSkiCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJUdXR0aSBpIGNvbmZsaXR0aSBzb25vIHN0YXRpIHJpc29sdGkgbWEgaWwgbWVyZ2Ugw6ggYW5jb3JhIGluIGNvcnNvLiIKKworIzogd3Qtc3RhdHVzLmM6MTE1NgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKHVzYSBcImdpdCBjb21taXRcIiBwZXIgdGVybWluYXJlIGlsIG1lcmdlKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2NQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiU2VpIG5lbCBiZWwgbWV6em8gZGkgdW5hIHNlc3Npb25lIGFtLiIKKworIzogd3Qtc3RhdHVzLmM6MTE2OAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiTGEgcGF0Y2ggY29ycmVudGUgw6ggdnVvdGEuIgorCisjOiB3dC1zdGF0dXMuYzoxMTcyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAocmlzb2x2aSBpIGNvbmZsaXR0aSBlIHF1aW5kaSBlc2VndWkgXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTE3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYW0gLS1za2lwXCIgcGVyIHNhbHRhcmUgcXVlc3RhIHBhdGNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTE3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IGFtIC0tYWJvcnRcIiBwZXIgcmlwcmlzdGluYXJlIGlsIGJyYW5jaCBvcmlnaW5hcmlvKSIKKworIzogd3Qtc3RhdHVzLmM6MTMwOQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAiZ2l0LXJlYmFzZS10b2RvIMOoIG1hbmNhbnRlLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxMQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICJOZXNzdW4gY29tYW5kbyBlc2VndWl0by4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAiVWx0aW1vIGNvbWFuZG8gZXNlZ3VpdG8gKCVkIGNvbWFuZG8gZXNlZ3VpdG8pOiIKK21zZ3N0clsxXSAiVWx0aW1pIGNvbWFuZGkgZXNlZ3VpdGkgKCVkIGNvbWFuZGkgZXNlZ3VpdGkpOiIKKworIzogd3Qtc3RhdHVzLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAodmVkaSBkaSBwacO5IG5lbCBmaWxlICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIk5lc3N1biBjb21hbmRvIHJpbWFuZW50ZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAiUHJvc3NpbW8gY29tYW5kbyBkYSBlc2VndWlyZSAoJWQgY29tYW5kbyByaW1hbmVudGUpOiIKK21zZ3N0clsxXSAiUHJvc3NpbWkgY29tYW5kaSBkYSBlc2VndWlyZSAoJWQgY29tYW5kaSByaW1hbmVudGkpOiIKKworIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiBwZXIgdmlzdWFsaXp6YXJlIGUgbW9kaWZpY2FyZSBsZSAiCisib3BlcmF6aW9uaSkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIkF0dHVhbG1lbnRlIHN0YWkgZXNlZ3VlbmRvIGlsIHJlYmFzZSBkZWwgYnJhbmNoICclcycgc3UgJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIkF0dHVhbG1lbnRlIHN0YWkgZXNlZ3VlbmRvIHVuIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAocmlzb2x2aSBpIGNvbmZsaXR0aSBlIHF1aW5kaSBlc2VndWkgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCByZWJhc2UgLS1za2lwXCIgcGVyIHNhbHRhcmUgcXVlc3RhIHBhdGNoKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKHVzYSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHBlciBlc2VndWlyZSBpbCBjaGVja291dCBkZWwgYnJhbmNoIG9yaWdpbmFyaW8pIgorCisjOiB3dC1zdGF0dXMuYzoxMzgyCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodHV0dGkgaSBjb25mbGl0dGkgc29ubyBzdGF0aSByaXNvbHRpOiBlc2VndWkgXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIkF0dHVhbG1lbnRlIHN0YWkgZGl2aWRlbmRvIHVuIGNvbW1pdCBkdXJhbnRlIGlsIHJlYmFzZSBkZWwgYnJhbmNoICclcycgc3UgIgorIiclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMzkxCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkF0dHVhbG1lbnRlIHN0YWkgZGl2aWRlbmRvIHVuIGNvbW1pdCBkdXJhbnRlIHVuIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEzOTQKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKFVuYSB2b2x0YSBjaGUgbGEgdHVhIGRpcmVjdG9yeSBkaSBsYXZvcm8gw6ggcHVsaXRhLCBlc2VndWkgXCJnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJBdHR1YWxtZW50ZSBzdGFpIG1vZGlmaWNhbmRvIHVuIGNvbW1pdCBkdXJhbnRlIGlsIHJlYmFzZSBkZWwgYnJhbmNoICclcycgc3UgIgorIiclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxNDAzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJBdHR1YWxtZW50ZSBzdGFpIG1vZGlmaWNhbmRvIHVuIGNvbW1pdCBkdXJhbnRlIHVuIHJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDYKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBwZXIgY29ycmVnZ2VyZSBpbCBjb21taXQgY29ycmVudGUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAodXNhIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgdW5hIHZvbHRhIHNvZGRpc2ZhdHRvIGRlbGxlIHR1ZSBtb2RpZmljaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5Cittc2dpZCAiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgaW4gY29yc28uIgorCisjOiB3dC1zdGF0dXMuYzoxNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkF0dHVhbG1lbnRlIHN0YWkgZXNlZ3VlbmRvIGlsIGNoZXJyeS1waWNrIGRlbCBjb21taXQgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHJpc29sdmkgaSBjb25mbGl0dGkgZWQgZXNlZ3VpIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzIKK21zZ2lkICIgIChydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAoZXNlZ3VpIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBwZXIgY29udGludWFyZSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHR1dHRpIGkgY29uZmxpdHRpIHNvbm8gc3RhdGkgcmlzb2x0aTogZXNlZ3VpIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiCisiXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiBwZXIgc2FsdGFyZSBxdWVzdGEgcGF0Y2gpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM5Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgICh1c2EgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHBlciBhbm51bGxhcmUgbCdvcGVyYXppb25lIGRpIGNoZXJyeS1waWNrKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJSZXZlcnQgaW4gY29yc28uIgorCisjOiB3dC1zdGF0dXMuYzoxNDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIgorbXNnc3RyICJBdHR1YWxtZW50ZSBzdGFpIGVzZWd1ZW5kbyBpbCByZXZlcnQgZGVsIGNvbW1pdCAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTgKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHJpc29sdmkgaSBjb25mbGl0dGkgZWQgZXNlZ3VpIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChlc2VndWkgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiBwZXIgY29udGludWFyZSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICh0dXR0aSBpIGNvbmZsaXR0aSBzb25vIHN0YXRpIHJpc29sdGk6IGVzZWd1aSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHJldmVydCAtLXNraXBcIiBwZXIgc2FsdGFyZSBxdWVzdGEgcGF0Y2gpIgorCisjOiB3dC1zdGF0dXMuYzoxNDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAodXNhIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgcGVyIGFubnVsbGFyZSBsJ29wZXJhemlvbmUgZGkgcmV2ZXJ0KSIKKworIzogd3Qtc3RhdHVzLmM6MTQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIkF0dHVhbG1lbnRlIHN0YWkgZXNlZ3VlbmRvIHVuYSBiaXNlemlvbmUgcGFydGVuZG8gZGFsIGJyYW5jaCAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ4MgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIkF0dHVhbG1lbnRlIHN0YWkgZXNlZ3VlbmRvIHVuYSBiaXNlemlvbmUuIgorCisjOiB3dC1zdGF0dXMuYzoxNDg1Cittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYmlzZWN0IHJlc2V0XCIgcGVyIHRvcm5hcmUgYWwgYnJhbmNoIG9yaWdpbmFyaW8pIgorCisjOiB3dC1zdGF0dXMuYzoxNjk0Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiU3VsIGJyYW5jaCAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJyZWJhc2UgaW50ZXJhdHRpdm8gaW4gY29yc28gc3UgIgorCisjOiB3dC1zdGF0dXMuYzoxNzAzCittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNlIGluIGNvcnNvIHN1ICIKKworIzogd3Qtc3RhdHVzLmM6MTcxMworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIkF0dHVhbG1lbnRlIG5vbiBzZWkgc3UgYWxjdW4gYnJhbmNoLiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJDb21taXQgaW5pemlhbGUiCisKKyM6IHd0LXN0YXR1cy5jOjE3MzEKK21zZ2lkICJObyBjb21taXRzIHlldCIKK21zZ3N0ciAiTm9uIGNpIHNvbm8gYW5jb3JhIGNvbW1pdCIKKworIzogd3Qtc3RhdHVzLmM6MTc0NQorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiRmlsZSBub24gdHJhY2NpYXRpIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ3Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiRmlsZSBpZ25vcmF0aSIKKworIzogd3Qtc3RhdHVzLmM6MTc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiU29ubyBzdGF0aSBuZWNlc3NhcmkgJS4yZiBzZWNvbmRpIHBlciBlbGVuY2FyZSBpIGZpbGUgbm9uXG4iCisidHJhY2NpYXRpLiAnc3RhdHVzIC11bm8nIHBvdHJlYmJlIHZlbG9jaXp6YXJlIHRhbGUgb3BlcmF6aW9uZSxcbiIKKyJtYSBkZXZpIHN0YXJlIGF0dGVudG8gYSBub24gZGltZW50aWNhcnRpIGRpIGFnZ2l1bmdlcmVcbiIKKyJhdXRvbm9tYW1lbnRlIGkgZmlsZSBudW92aSAodmVkaSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorCisjOiB3dC1zdGF0dXMuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIkZpbGUgbm9uIHRyYWNjaWF0aSBub24gZWxlbmNhdGklcyIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAodXNhIGwnb3B6aW9uZSAtdSBwZXIgdmlzdWFsaXp6YXJlIGkgZmlsZSBub24gdHJhY2NpYXRpKSIKKworIzogd3Qtc3RhdHVzLmM6MTc2NQorbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJuZXNzdW5hIG1vZGlmaWNhIGFnZ2l1bnRhIGFsIGNvbW1pdCAodXNhIFwiZ2l0IGFkZFwiIGUvbyBcImdpdCBjb21taXQgLWFcIilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICJuZXNzdW5hIG1vZGlmaWNhIGFnZ2l1bnRhIGFsIGNvbW1pdFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJub24gw6ggc3RhdG8gYWdnaXVudG8gbnVsbGEgYWwgY29tbWl0IG1hIHNvbm8gcHJlc2VudGkgZmlsZSBub24gdHJhY2NpYXRpICIKKyIodXNhIFwiZ2l0IGFkZFwiIHBlciB0cmFjY2lhcmxpKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICIiCisibm9uIMOoIHN0YXRvIGFnZ2l1bnRvIG51bGxhIGFsIGNvbW1pdCBtYSBzb25vIHByZXNlbnRpIGZpbGUgbm9uIHRyYWNjaWF0aVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICIiCisibm9uIGMnw6ggbnVsbGEgZGkgY3VpIGVzZWd1aXJlIGlsIGNvbW1pdCAoY3JlYS9jb3BpYSBkZWkgZmlsZSBlIHVzYSBcImdpdCBhZGQiCisiXCIgcGVyIHRyYWNjaWFybGkpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODUgd3Qtc3RhdHVzLmM6MTc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICJub24gYyfDqCBudWxsYSBkaSBjdWkgZXNlZ3VpcmUgaWwgY29tbWl0XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorIm5vbiBjJ8OoIG51bGxhIGRpIGN1aSBlc2VndWlyZSBpbCBjb21taXQgKHVzYSAtdSBwZXIgdmlzdWFsaXp6YXJlIGkgZmlsZSBub24gIgorInRyYWNjaWF0aSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgIm5vbiBjJ8OoIG51bGxhIGRpIGN1aSBlc2VndWlyZSBpbCBjb21taXQsIGwnYWxiZXJvIGRpIGxhdm9ybyDDqCBwdWxpdG9cbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAiTm9uIGNpIHNvbm8gYW5jb3JhIGNvbW1pdCBzdSIKKworIzogd3Qtc3RhdHVzLmM6MTkwOQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKG5lc3N1biBicmFuY2gpIgorCisjOiB3dC1zdGF0dXMuYzoxOTQwCittc2dpZCAiZGlmZmVyZW50IgorbXNnc3RyICJkaWZmZXJlbnRlIgorCisjOiB3dC1zdGF0dXMuYzoxOTQyIHd0LXN0YXR1cy5jOjE5NTAKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJpbmRpZXRybyAiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDUgd3Qtc3RhdHVzLmM6MTk0OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAiYXZhbnRpICIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIKKyM6IHd0LXN0YXR1cy5jOjI0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgJXM6IGNpIHNvbm8gZGVsbGUgbW9kaWZpY2hlIG5vbiBpbiBzdGFnaW5nLiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3NgorbXNnaWQgImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorImlub2x0cmUsIGwnaW5kaWNlIGNvbnRpZW5lIG1vZGlmaWNoZSBkaSBjdWkgbm9uIMOoIHN0YXRvIGVzZWd1aXRvIGlsIGNvbW1pdC4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgJXM6IGwnaW5kaWNlIGNvbnRpZW5lIG1vZGlmaWNoZSBkaSBjdWkgbm9uIMOoIHN0YXRvICIKKyJlc2VndWl0byBpbCBjb21taXQuIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgInVubGluayBkaSAnJXMnIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9hZGQuYzoyNgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs8b3B6aW9uaT5dIFstLV0gPHNwZWNpZmljYXRvcmUgcGVyY29yc28+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInN0YXRvIGRpZmYgaW5hdHRlc28gJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTIgYnVpbHRpbi9jb21taXQuYzoyODgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImFnZ2lvcm5hbWVudG8gZGVpIGZpbGUgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL2FkZC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJlbGltaW5hICclcydcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzcKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiTW9kaWZpY2hlIG5vbiBuZWxsJ2FyZWEgZGkgc3RhZ2luZyBkb3BvIGwnYWdnaW9ybmFtZW50byBkZWxsJ2luZGljZToiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUyIGJ1aWx0aW4vcmV2LXBhcnNlLmM6ODk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIGwnaW5kaWNlIgorCisjOiBidWlsdGluL2FkZC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlICclcycgaW4gc2NyaXR0dXJhLiIKKworIzogYnVpbHRpbi9hZGQuYzoyNjcKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIGxhIHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjI3MAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICJtb2RpZmljYSBkZWxsYSBwYXRjaCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGxvIHN0YXQgZGkgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyNzUKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIlBhdGNoIHZ1b3RhLiBPcGVyYXppb25lIGludGVycm90dGEuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXBwbGljYXJlICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg4Cittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICJJIHNlZ3VlbnRpIHBlcmNvcnNpIHNvbm8gaWdub3JhdGkgZGEgdW5vIGRlaSBmaWxlIC5naXRpZ25vcmU6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA4IGJ1aWx0aW4vY2xlYW4uYzo5MTAgYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL212LmM6MTI0CisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU2IGJ1aWx0aW4vcHVsbC5jOjIyMyBidWlsdGluL3B1c2guYzo1NDgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM0NCBidWlsdGluL3JtLmM6MjQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY1Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAidGVzdCBjb250cm9sbGF0byIKKworIzogYnVpbHRpbi9hZGQuYzozMTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICJzY2VsdGEgaW50ZXJhdHRpdmEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgyIGJ1aWx0aW4vcmVzZXQuYzozMDcKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAic2VsZXppb25hIGdsaSBodW5rIGluIG1vZGFsaXTDoCBpbnRlcmF0dGl2YSIKKworIzogYnVpbHRpbi9hZGQuYzozMTMKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgIm1vZGlmaWNhIGlsIGRpZmYgY29ycmVudGUgZSBhcHBsaWNhbG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE0Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJjb25zZW50aSBsJ2FnZ2l1bnRhIGRpIGZpbGUgYWx0cmltZW50aSBpZ25vcmF0aSIKKworIzogYnVpbHRpbi9hZGQuYzozMTUKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiYWdnaW9ybmEgaSBmaWxlIHRyYWNjaWF0aSIKKworIzogYnVpbHRpbi9hZGQuYzozMTYKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgInJpbm9ybWFsaXp6YSBpIGZpbmUgcmlnYSBkZWkgZmlsZSB0cmFjY2lhdGkgKGltcGxpY2EgLXUpIgorCisjOiBidWlsdGluL2FkZC5jOjMxNworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAic2FsdmEgc29sbyBpbCBmYXR0byBjaGUgaWwgcGVyY29yc28gc2Fyw6AgYWdnaXVudG8gc3VjY2Vzc2l2YW1lbnRlIgorCisjOiBidWlsdGluL2FkZC5jOjMxOAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiYWdnaXVuZ2kgbGUgbW9kaWZpY2hlIGRhIHR1dHRpIGkgZmlsZSB0cmFjY2lhdGkgZSBub24iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgImlnbm9yYSBpIHBlcmNvcnNpIGVsaW1pbmF0aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gKGNvbWUgLS1uby1hbGwpIgorCisjOiBidWlsdGluL2FkZC5jOjMyMworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAibm9uIGVzZWd1aXJlIGwnYWdnaXVudGEsIGFnZ2lvcm5hIHNvbG8gbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAiIgorInNhbHRhIHNlbXBsaWNlbWVudGUgaSBmaWxlIGNoZSBub24gcG9zc29ubyBlc3NlcmUgYWdnaXVudGkgYSBjYXVzYSBkaSBlcnJvcmkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI1Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICIiCisiY29udHJvbGxhIHNlIGkgZmlsZSAtIGFuY2hlIHF1ZWxsaSBtYW5jYW50aSAtIHNvbm8gaWdub3JhdGkgZHVyYW50ZSBpbCB0ZXN0ICIKKyJjb250cm9sbGF0byIKKworIzogYnVpbHRpbi9hZGQuYzozMjcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgImVzZWd1aSBsJ292ZXJyaWRlIGRlbCBiaXQgZXNlZ3VpYmlsZSBkZWkgZmlsZSBlbGVuY2F0aSIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgImVtZXR0aSB1biBhdnZpc28gcXVhbmRvIHNpIGFnZ2l1bmdlIHVuIHJlcG9zaXRvcnkgaW5jb3Jwb3JhdG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiSGFpIGFnZ2l1bnRvIHVuIGFsdHJvIHJlcG9zaXRvcnkgR2l0IGFsbCdpbnRlcm5vIGRlbCByZXBvc2l0b3J5XG4iCisiY29ycmVudGUuIEkgY2xvbmkgZGVsIHJlcG9zaXRvcnkgZXN0ZXJubyBub24gY29udGVycmFubm8gaVxuIgorImNvbnRlbnV0aSBkZWwgcmVwb3NpdG9yeSBpbmNvcnBvcmF0byBlIG5vbiBzYXByYW5ubyBjb21lIG90dGVuZXJsaS5cbiIKKyJTZSBpbnRlbmRldmkgYWdnaXVuZ2VyZSB1biBzb3R0b21vZHVsbywgdXNhOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJTZSBoYWkgYWdnaXVudG8gcXVlc3RvIHBlcmNvcnNvIHBlciBlcnJvcmUsIHB1b2kgcmltdW92ZXJsb1xuIgorImRhbGwnaW5kaWNlIGNvbjpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlZlZGkgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBwZXIgdWx0ZXJpb3JpIGluZm9ybWF6aW9uaS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgImFnZ2l1bnRhIHJlcG9zaXRvcnkgR2l0IGluY29ycG9yYXRvIGluIGNvcnNvOiAlcyIKKworIzogYnVpbHRpbi9hZGQuYzozOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAiVXNhIC1mIHNlIHZ1b2kgZGF2dmVybyBhZ2dpdW5nZXJsaS5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0MDAKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJhZ2dpdW50YSBkZWkgZmlsZSBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDI4IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBub24gw6ggY29tcGF0aWJpbGUgY29uIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzo0MzQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS1lZGl0IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSBlIC11IG5vbiBzb25vIGNvbXBhdGliaWxpIGZyYSBsb3JvIgorCisjOiBidWlsdGluL2FkZC5jOjQ0OQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIkwnb3B6aW9uZSAtLWlnbm9yZS1taXNzaW5nIHB1w7IgZXNzZXJlIHVzYXRhIHNvbG8gY29uIC0tZHJ5LXJ1biIKKworIzogYnVpbHRpbi9hZGQuYzo0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IgorbXNnc3RyICJJbCBwYXJhbWV0cm8gLS1jaG1vZCAnJXMnIGRldmUgZXNzZXJlIC14IG8gK3giCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDcxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ4IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIgorbXNnc3RyICIiCisiLS1wYXRoc3BlYy1mcm9tLWZpbGUgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiBnbGkgYXJnb21lbnRpIHNwZWNpZmljYXRvcmUiCisiIHBlcmNvcnNvIgorCisjOiBidWlsdGluL2FkZC5jOjQ3OCBidWlsdGluL2NoZWNrb3V0LmM6MTY2MCBidWlsdGluL2NvbW1pdC5jOjM2MAorIzogYnVpbHRpbi9yZXNldC5jOjMzMworbXNnaWQgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCittc2dzdHIgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmljaGllZGUgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gbnVsbGEsIG5vbiDDqCBzdGF0byBhZ2dpdW50byBudWxsYS5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIkZvcnNlIGludGVuZGV2aSBkaXJlICdnaXQgYWRkIC4nP1xuIgorCisjOiBidWlsdGluL2FtLmM6MzQ3Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbG8gc2NyaXB0IGF1dGhvciIKKworIzogYnVpbHRpbi9hbS5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIMOoIHN0YXRvIGVsaW1pbmF0byBkYWxsJ2hvb2sgYXBwbHlwYXRjaC1tc2ciCisKKyM6IGJ1aWx0aW4vYW0uYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJSaWdhIGRpIGlucHV0IG1hbGZvcm1hdGE6ICclcycuIgorCisjOiBidWlsdGluL2FtLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJDb3BpYSBkZWxsZSBub3RlIGRhICclcycgYSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9hbS5jOjUzNworbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiZnNlZWsgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2FtLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGxhIHBhdGNoICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo3OTAKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiUHXDsiBlc3NlcmUgYXBwbGljYXRhIHNvbG8gdW5hIHNlcmllIGRpIHBhdGNoIFN0R0lUIHBlciB2b2x0YSIKKworIzogYnVpbHRpbi9hbS5jOjgzOAorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJ0aW1lc3RhbXAgbm9uIHZhbGlkbyIKKworIzogYnVpbHRpbi9hbS5jOjg0MyBidWlsdGluL2FtLmM6ODU1Cittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgInJpZ2EgRGF0ZSBub24gdmFsaWRhIgorCisjOiBidWlsdGluL2FtLmM6ODUwCittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIm9mZnNldCBmdXNvIG9yYXJpbyBub24gdmFsaWRvIgorCisjOiBidWlsdGluL2FtLmM6OTQzCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJSaWxldmFtZW50byBkZWwgZm9ybWF0byBkZWxsYSBwYXRjaCBub24gcml1c2NpdG8uIgorCisjOiBidWlsdGluL2FtLmM6OTQ4IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiY3JlYXppb25lIGRlbGxhIGRpcmVjdG9yeSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9hbS5jOjk1MworbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiRGl2aXNpb25lIGRlbGxlIHBhdGNoIG5vbiByaXVzY2l0YS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICJVbmEgdm9sdGEgcmlzb2x0byBxdWVzdG8gcHJvYmxlbWEsIGVzZWd1aSBcIiVzIC0tY29udGludWVcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiU2UgcHJlZmVyaXNjaSBzYWx0YXJlIHF1ZXN0YSBwYXRjaCwgZXNlZ3VpIGludmVjZSBcIiVzIC0tc2tpcFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICIiCisiUGVyIHJpcHJpc3RpbmFyZSBpbCBicmFuY2ggb3JpZ2luYXJpbyBlIHRlcm1pbmFyZSBpbCBwYXRjaGluZywgZXNlZ3VpIFwiJXMgLS0iCisiYWJvcnRcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTY5Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIiIKKyJQYXRjaCBpbnZpYXRhIGNvbiBmb3JtYXQ9Zmxvd2VkOyBnbGkgc3BhemkgYWwgdGVybWluZSBkZWxsZSByaWdoZSBwb3RyZWJiZXJvICIKKyJlc3NlcmUgYW5kYXRpIHBlcmR1dGkuIgorCisjOiBidWlsdGluL2FtLmM6MTE5NworbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiTGEgcGF0Y2ggw6ggdnVvdGEuIgorCisjOiBidWlsdGluL2FtLmM6MTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAicmlnYSBhdXRvcmUgbWFuY2FudGUgbmVsIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9hbS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICJyaWdhIGlkZW50IG5vbiB2YWxpZGE6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg0Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkRhbCByZXBvc2l0b3J5IG1hbmNhbm8gaSBibG9iIG5lY2Vzc2FyaSBwZXIgcmlwaWVnYXJlIHN1bCBtZXJnZSBhIHRyZSB2aWUuIgorCisjOiBidWlsdGluL2FtLmM6MTQ4NgorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIiIKKyJVdGlsaXp6byBsZSBpbmZvcm1hemlvbmkgZGVsbCdpbmRpY2UgcGVyIHJpY29zdHJ1aXJlIHVuIGFsYmVybyBkaSBiYXNlLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTUwNQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyJIYWkgbW9kaWZpY2F0byBtYW51YWxtZW50ZSBsYSBwYXRjaD9cbiIKKyJOb24gcHXDsiBlc3NlcmUgYXBwbGljYXRhIGFpIGJsb2IgcmVnaXN0cmF0aSBuZWwgc3VvIGluZGljZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTExCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICJSaXBpZWdvIHN1bCBwYXRjaGluZyBkZWxsYSBiYXNlIGUgc3VsIG1lcmdlIGEgdHJlIHZpZS4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MzcKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICJNZXJnZSBkZWxsZSBtb2RpZmljaGUgbm9uIHJpdXNjaXRvLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NjkKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJhcHBsaWNhemlvbmUgYSB1bmEgY3Jvbm9sb2dpYSB2dW90YSIKKworIzogYnVpbHRpbi9hbS5jOjE2MTYgYnVpbHRpbi9hbS5jOjE2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXByZW5kZXJlIGwnYXR0aXZpdMOgOiAlcyBub24gZXNpc3RlLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzgKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIklsIGNvcnBvIGRlbCBjb21taXQgw6g6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICIiCisiQXBwbGljbz8gU8OsIFt5XS9ObyBbbl0vTW9kaWZpY2EgW2VdL1tWXWlzdWFsaXp6YSBwYXRjaC9bQV1jY2V0dGEgdHV0dG86IgorCisjOiBidWlsdGluL2FtLmM6MTY5NSBidWlsdGluL2NvbW1pdC5jOjM5NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBmaWxlIGluZGljZSIKKworIzogYnVpbHRpbi9hbS5jOjE2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICJJbmRpY2Ugc3BvcmNvOiBpbXBvc3NpYmlsZSBhcHBsaWNhcmUgbGUgcGF0Y2ggKGVsZW1lbnRvIHNwb3JjbzogJXMpIgorCisjOiBidWlsdGluL2FtLmM6MTczOSBidWlsdGluL2FtLmM6MTgwNworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJS4qcyIKK21zZ3N0ciAiQXBwbGljYXppb25lIGluIGNvcnNvOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc1NgorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiTmVzc3VuYSBtb2RpZmljYSAtLSBwYXRjaCBnacOgIGFwcGxpY2F0YS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICJQYXRjaCBub24gcml1c2NpdGEgYSAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2NgorbXNnaWQgIlVzZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorIlVzYSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyBwZXIgdmlzdWFsaXp6YXJlIGxhIHBhdGNoIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9hbS5jOjE4MTAKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyJOZXNzdW5hIG1vZGlmaWNhIC0gdGkgc2VpIGRpbWVudGljYXRvIGRpIHVzYXJlICdnaXQgYWRkJz9cbiIKKyJTZSBub24gcmltYW5lIG51bGxhIGRhIGFnZ2l1bmdlcmUgYWxsJ2FyZWEgZGkgc3RhZ2luZywgZm9yc2UgcXVhbGNvcydhbHRyb1xuIgorImhhIGdpw6AgaW50cm9kb3R0byBsZSBzdGVzc2UgbW9kaWZpY2hlOyBwb3RyZXN0aSB2b2xlciBzYWx0YXJlIHF1ZXN0YSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODE3Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisiTmVsbCdpbmRpY2UgaGFpIGFuY29yYSBkZWkgcGVyY29yc2kgZGkgY3VpIG5vbiDDqCBzdGF0byBlc2VndWl0byBpbCBtZXJnZS5cbiIKKyJEb3ZyZXN0aSBlc2VndWlyZSAnZ2l0IGFkZCcgc3Ugb2duaSBmaWxlIGkgY3VpIGNvbmZsaXR0aSBzb25vIHN0YXRpIHJpc29sdGkgIgorInBlciBjb250cmFzc2VnbmFybGkgY29tZSB0YWxpLlxuIgorIlBvdHJlc3RpIGVzZWd1aXJlIGBnaXQgcm1gIHN1IHVuIGZpbGUgcGVyIGFjY2V0dGFybmUgbGEgcmlzb2x1emlvbmUgIgorIlwiZWxpbWluYXRvIGRhIGxvcm9cIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTI0IGJ1aWx0aW4vYW0uYzoxOTI4IGJ1aWx0aW4vYW0uYzoxOTQwIGJ1aWx0aW4vcmVzZXQuYzozNDYKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ29nZ2V0dG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTc2Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJwdWxpemlhIGRlbGwnaW5kaWNlIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9hbS5jOjIwMjAKK21zZ2lkICIiCisiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFEIHNpbmNlIHRoZSBsYXN0ICdhbScgZmFpbHVyZS5cbiIKKyJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIKK21zZ3N0ciAiIgorIlNlbWJyYSBjaGUgdHUgYWJiaWEgc3Bvc3RhdG8gSEVBRCBkYWxsJ3VsdGltYSBlc2VjdXppb25lIG5vbiByaXVzY2l0YSBkaSAiCisiJ2FtJy5cbiIKKyJOb24gcml0b3JubyBpbmRpZXRybyBhIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJWYWxvcmUgbm9uIHZhbGlkbyBwZXIgLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE1MworbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzxvcHppb25pPl0gWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIxNTQKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3B6aW9uaT5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImVzZWd1aSBpbiBtb2RhbGl0w6AgaW50ZXJhdHRpdmEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYyCittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgIm9wemlvbmUgc3RvcmljYSAtLSBub24gZXNlZ3VlIG51bGxhIgorCisjOiBidWlsdGluL2FtLmM6MjE2NAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICJjb25zZW50aSBpbCByaXBpZWdvIHN1bCBtZXJnZSBhIHRyZSB2aWUgc2UgbmVjZXNzYXJpbyIKKworIzogYnVpbHRpbi9hbS5jOjIxNjUgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTEKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSBtZXNzYWdnaSIKKworIzogYnVpbHRpbi9hbS5jOjIxNjcKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJhZ2dpdW5naSB1bmEgcmlnYSBTaWduZWQtb2ZmLWJ5IGFsIG1lc3NhZ2dpbyBkaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcwCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgImNvbnZlcnRpIGNvZGlmaWNhIGluIFVURi04IChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImZvcm5pc2NpIGwnYXJnb21lbnRvIC1rIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3NAorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImZvcm5pc2NpIGwnYXJnb21lbnRvIC1iIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImZvcm5pc2NpIGwnYXJnb21lbnRvIC1tIGEgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3OAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgImZvcm5pc2NpIGEgZ2l0LW1haWxzcGxpdCBsJ2FyZ29tZW50byAtLWtlZXAtY3IgcGVyIGlsIGZvcm1hdG8gbWJveCIKKworIzogYnVpbHRpbi9hbS5jOjIxODEKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAiIgorIm5vbiBmb3JuaXJlIGwnYXJnb21lbnRvIC0ta2VlcC1jciBhIGdpdC1tYWlsc3BsaXQgaW5kaXBlbmRlbnRlbWVudGUgZGFsICIKKyJ2YWxvcmUgZGkgYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjE4NAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAicmltdW92aSB0dXR0ZSBsZSByaWdoZSBwcmltYSBkaSB1bmEgcmlnYSBcInRhZ2xpYSBxdWlcIiIKKworIzogYnVpbHRpbi9hbS5jOjIxODYgYnVpbHRpbi9hbS5jOjIxODkgYnVpbHRpbi9hbS5jOjIxOTIgYnVpbHRpbi9hbS5jOjIxOTUKKyM6IGJ1aWx0aW4vYW0uYzoyMTk4IGJ1aWx0aW4vYW0uYzoyMjAxIGJ1aWx0aW4vYW0uYzoyMjA0IGJ1aWx0aW4vYW0uYzoyMjA3CisjOiBidWlsdGluL2FtLmM6MjIxMworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgInBhc3NhIGwnYXJnb21lbnRvIGEgZ2l0LWFwcGx5IgorCisjOiBidWlsdGluL2FtLmM6MjIwMyBidWlsdGluL2NvbW1pdC5jOjEzODYgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzYgYnVpbHRpbi9ncmVwLmM6ODgzIGJ1aWx0aW4vbWVyZ2UuYzoyNDkKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2MCBidWlsdGluL3B1bGwuYzoyMTkgYnVpbHRpbi9yZWJhc2UuYzoxNDY5CisjOiBidWlsdGluL3JlcGFjay5jOjMxNSBidWlsdGluL3JlcGFjay5jOjMxOSBidWlsdGluL3JlcGFjay5jOjMyMQorIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MCBidWlsdGluL3Nob3ctcmVmLmM6MTcyIGJ1aWx0aW4vdGFnLmM6NDAzCisjOiBwYXJzZS1vcHRpb25zLmg6MTU0IHBhcnNlLW9wdGlvbnMuaDoxNzUgcGFyc2Utb3B0aW9ucy5oOjMxNgorbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA5IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzgKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NSBidWlsdGluL3RhZy5jOjQzNyBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0byIKKworIzogYnVpbHRpbi9hbS5jOjIyMTAKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgImlsIGZvcm1hdG8gZGVsbGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICIiCisiZXNlZ3VpIGwnb3ZlcnJpZGUgZGVsIG1lc3NhZ2dpbyBkJ2Vycm9yZSBxdWFuZG8gc2kgdmVyaWZpY2EgdW4gZXJyb3JlIGxlZ2F0byAiCisiYWxsZSBwYXRjaCIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICIiCisiY29udGludWEgbCdhcHBsaWNhemlvbmUgZGVsbGUgcGF0Y2ggZG9wbyBsYSByaXNvbHV6aW9uZSBkaSB1biBjb25mbGl0dG8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgInNpbm9uaW1pIGRpIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI0Cittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAic2FsdGEgbGEgcGF0Y2ggY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI3Cittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAicmlwcmlzdGluYSBpbCBicmFuY2ggb3JpZ2luYXJpbyBlIGludGVycm9tcGkgbCdvcGVyYXppb25lIGRpIHBhdGNoaW5nLiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICJpbnRlcnJvbXBpIGwnb3BlcmF6aW9uZSBkaSBwYXRjaGluZyBtYSBtYW50aWVuaSBIRUFEIGRvdifDqC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMzCittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZC4iCittc2dzdHIgInZpc3VhbGl6emEgbGEgcGF0Y2ggaW4gZmFzZSBkaSBhcHBsaWNhemlvbmUuIgorCisjOiBidWlsdGluL2FtLmM6MjIzNworbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAibWVudGkgc3VsbGEgZGF0YSBkZWwgY29tbWl0IgorCisjOiBidWlsdGluL2FtLmM6MjIzOQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgInVzYSBpbCB0aW1lc3RhbXAgY29ycmVudGUgY29tZSBkYXRhIGF1dG9yZSIKKworIzogYnVpbHRpbi9hbS5jOjIyNDEgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMCBidWlsdGluL2NvbW1pdC5jOjE1MDcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODYgYnVpbHRpbi9wdWxsLmM6MTk0IGJ1aWx0aW4vcmViYXNlLmM6NTA5CisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTMgYnVpbHRpbi9yZXZlcnQuYzoxMTcgYnVpbHRpbi90YWcuYzo0MTgKK21zZ2lkICJrZXktaWQiCittc2dzdHIgIklEIGNoaWF2ZSIKKworIzogYnVpbHRpbi9hbS5jOjIyNDIgYnVpbHRpbi9yZWJhc2UuYzo1MTAgYnVpbHRpbi9yZWJhc2UuYzoxNTE0Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAiZmlybWEgaSBjb21taXQgY29uIEdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDUKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKGEgdXNvIGludGVybm8gcGVyIGdpdC1yZWJhc2UpIgorCisjOiBidWlsdGluL2FtLmM6MjI2MworbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIkwnb3B6aW9uZSAtYi8tLWJpbmFyeSBub24gZXNlZ3VlIG51bGxhIGRhIG1vbHRvIHRlbXBvIGVcbiIKKyJzYXLDoCByaW1vc3NhLiBOb24gdXNhcmxhIHBpw7kuIgorCisjOiBidWlsdGluL2FtLmM6MjI3MAorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAibGV0dHVyYSBkZWxsJ2luZGljZSBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorImxhIGRpcmVjdG9yeSBkaSByZWJhc2UgcHJlY2VkZW50ZSAlcyBlc2lzdGUgYW5jb3JhIG1hIMOoIHN0YXRhIHNwZWNpZmljYXRhICIKKyJ1bidtYm94LiIKKworIzogYnVpbHRpbi9hbS5jOjIzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKyJUcm92YXRhIGRpcmVjdG9yeSBzbWFycml0YSAlcy5cbiIKKyJVc2EgXCJnaXQgYW0gLS1hYm9ydFwiIHBlciBlbGltaW5hcmxhLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMTUKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICJPcGVyYXppb25lIGRpIHJpc29sdXppb25lIG5vbiBpbiBjb3Jzbywgbm9uIHJpcHJlbmRpYW1vLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjUKK21zZ2lkICJpbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIHBhdGNoZXMgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorImxhIG1vZGFsaXTDoCBpbnRlcmF0dGl2YSByaWNoaWVkZSBjaGUgbGUgcGF0Y2ggc2lhbm8gZm9ybml0ZSBzdWxsYSByaWdhIGRpICIKKyJjb21hbmRvIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPG9wemlvbmk+XSBbPHBhdGNoPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBpbCBmaWxlIGFyY2hpdmlvICclcyciCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmVkaXJpZ2VyZSBsJ291dHB1dCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogaWwgcmVtb3RvIG5vbiBoYSB1biBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGF0dGVzaSBBQ0svTkFLLCByaWNldnV0byBwYWNjaGV0dG8gZGkgZmx1c2giCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBlcnJvcmUgZGVsIHByb3RvY29sbG8iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBhdHRlc28gdW4gZmx1c2giCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPHRlcm1pbmUgcmV2aXNpb25lIG5vbiBmdW56aW9uYW50ZT4gIgorIjx0ZXJtaW5lIHJldmlzaW9uZSBmdW56aW9uYW50ZT4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjUKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNgorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdG8+IDxyZXZpc2lvbmU+IDx0ZXJtaW5lICIKKyJyZXZpc2lvbmUgZnVuemlvbmFudGU+IDx0ZXJtaW5lIHJldmlzaW9uZSBub24gZnVuemlvbmFudGU+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjcKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbW1hbmQ+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPGNvbWFuZG8+IDx0ZXJtaW5lIHJldmlzaW9uZSAiCisiZnVuemlvbmFudGU+IDx0ZXJtaW5lIHJldmlzaW9uZSBub24gZnVuemlvbmFudGU+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPHRlcm1pbmUgcmV2aXNpb25lIGZ1bnppb25hbnRlPiAiCisiPHRlcm1pbmUgcmV2aXNpb25lIG5vbiBmdW56aW9uYW50ZT4gWzx0ZXJtaW5lPl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtaW5lPiAtLXRlcm0te25ldywiCisiYmFkfT08dGVybWluZT5dWy0tbm8tY2hlY2tvdXRdIFs8bm9uIGZ1bnppb25hbnRlPiBbPGZ1bnppb25hbnRlPi4uLl1dIFstLV0gIgorIls8cGVyY29yc2k+Li4uXSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGVybSIKK21zZ3N0ciAiJyVzJyBub24gw6ggdW4gdGVybWluZSB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdXNhcmUgaWwgY29tYW5kbyBuYXRpdm8gJyVzJyBjb21lIHRlcm1pbmUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNhbWJpYXJlIGlsIHNpZ25pZmljYXRvIGRlbCB0ZXJtaW5lICclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgInVzYSBkdWUgdGVybWluaSBkaWZmZXJlbnRpIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSBCSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIk5vbiBzdGlhbW8gZXNlZ3VlbmRvIHVuIGJpc2VjdC5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBub24gw6ggdW4gY29tbWl0IHZhbGlkbyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGVsbCdIRUFEIG9yaWdpbmFyaW8gJyVzJy4gUHJvdmEgY29uICdnaXQgIgorImJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJBcmdvbWVudG8gYmlzZWN0X3dyaXRlIGVycmF0bzogJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZ2V0IHRoZSBvaWQgb2YgdGhlIHJldiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByZWN1cGVyYXJlIGwnT0lEIGRlbGxhIHJldmlzaW9uZSAnJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IG9wZW4gdGhlIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIkNvbWFuZG8gbm9uIHZhbGlkbzogYXR0dWFsbWVudGUgc3RhaSBlc2VndWVuZG8gdW5hIGJpc2V6aW9uZSAlcy8lcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJEZXZpIHNwZWNpZmljYXJlIGFsbWVubyB1bmEgcmV2aXNpb25lICVzIGVkIHVuYSAlcy5cbiIKKyJQdW9pIHVzYXJlIFwiZ2l0IGJpc2VjdCAlc1wiIGUgXCJnaXQgYmlzZWN0ICVzXCIgcGVyIHF1ZXN0byBzY29wby4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJEZXZpIGluaXppYXJlIGNvbiBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJRdWluZGkgZGV2aSBzcGVjaWZpY2FyZSBhbG1lbm8gdW5hIHJldmlzaW9uZSAlcyBlZCB1bmEgJXMuXG4iCisiUHVvaSB1c2FyZSBcImdpdCBiaXNlY3QgJXNcIiBlIFwiZ2l0IGJpc2VjdCAlc1wiIGEgcXVlc3RvIHNjb3BvLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJiaXNlY3Rpbmcgb25seSB3aXRoIGEgJXMgY29tbWl0IgorbXNnc3RyICJlc2VndW8gbGEgYmlzZXppb25lIHNvbG8gY29uIHVuIGNvbW1pdCAlcyIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMzMAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJTZWkgc2ljdXJvPyBbWS9uXSAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzcKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICJuZXNzdW4gdGVybWluZSBkZWZpbml0byIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjdXJyZW50IHRlcm1zIGFyZSAlcyBmb3IgdGhlIG9sZCBzdGF0ZVxuIgorImFuZCAlcyBmb3IgdGhlIG5ldyBzdGF0ZS5cbiIKK21zZ3N0ciAiIgorIkkgdHVvaSB0ZXJtaW5pIGNvcnJlbnRpIHNvbm8gJXMgcGVyIGxvIHN0YXRvIHZlY2NoaW9cbiIKKyJlICVzIHBlciBsbyBzdGF0byBudW92by5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorImFyZ29tZW50byAlcyBub24gdmFsaWRvIHBlciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiTGUgb3B6aW9uaSBzdXBwb3J0YXRlIHNvbm86IC0tdGVybS1nb29kfC0tdGVybS1vbGQgZSAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBvcHRpb246ICclcyciCittc2dzdHIgIm9wemlvbmUgbm9uIHJpY29ub3NjaXV0YTogJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICJzZW1icmEgY2hlICclcycgbm9uIHNpYSB1bmEgcmV2aXNpb25lIHZhbGlkYSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUxMgorbXNnaWQgImJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiSEVBRCBub24gdmFsaWRhIC0gaG8gYmlzb2dubyBkaSB1bidIRUFEIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNraW5nIG91dCAnJXMnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHN0YXJ0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJjaGVja291dCBkaSAnJXMnIG5vbiByaXVzY2l0by4gUHJvdmEgY29uICdnaXQgYmlzZWN0IHN0YXJ0IDxicmFuY2ggdmFsaWRvPicuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTQ4Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAibm9uIGVzZWd1aXLDsiBsYSBiaXNlemlvbmUgc3UgdW4gYWxiZXJvIHNvdHRvcG9zdG8gYSBjZy1zZWVrIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUxCittc2dpZCAiYmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiaGVhZCBub24gdmFsaWRhIC0gcmlmZXJpbWVudG8gc2ltYm9saWNvIHN0cmFubyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZjogJyVzJyIKK21zZ3N0ciAicmlmZXJpbWVudG8gbm9uIHZhbGlkbzogJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMQorbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgImVzZWd1aSAnZ2l0IGJpc2VjdCBuZXh0JyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzMworbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAic2NyaXZpIGkgdGVybWluaSBpbiAuZ2l0L0JJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNQorbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAicHVsaXNjaSBsbyBzdGF0byBiaXNlemlvbmUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIKK21zZ3N0ciAiY29udHJvbGxhIHNlIGxlIHJldmlzaW9uaSBhdHRlc2Ugc29ubyBwcmVzZW50aSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgInJlaW1wb3N0YSBsbyBzdGF0byBkZWxsYSBiaXNlemlvbmUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSBpbiBCSVNFQ1RfTE9HIgorbXNnc3RyICJzY3JpdmkgbG8gc3RhdG8gZGVsbGEgYmlzZXppb25lIGluIEJJU0VDVF9MT0ciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDMKK21zZ2lkICJjaGVjayBhbmQgc2V0IHRlcm1zIGluIGEgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJjb250cm9sbGEgZSBpbXBvc3RhIGkgdGVybWluaSBpbiB1bm8gc3RhdG8gYmlzZXppb25lIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAiIgorImNvbnRyb2xsYSBzZSBlc2lzdG9ubyB0ZXJtaW5pIHBlciByZXZpc2lvbmkgbm9uIGZ1bnppb25hbnRpIG8gZnVuemlvbmFudGkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDcKK21zZ2lkICJwcmludCBvdXQgdGhlIGJpc2VjdCB0ZXJtcyIKK21zZ3N0ciAic3RhbXBhIGkgdGVybWluaSBkZWxsYSBiaXNlemlvbmUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDkKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgImluaXppYSBsYSBzZXNzaW9uZSBkaSBiaXNlemlvbmUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTEKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICJhZ2dpb3JuYSBCSVNFQ1RfSEVBRCBhbnppY2jDqSBlc2VndWlyZSBpbCBjaGVja291dCBkZWwgY29tbWl0IGNvcnJlbnRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUzCittc2dpZCAibm8gbG9nIGZvciBCSVNFQ1RfV1JJVEUiCittc2dzdHIgIm5vbiByZWdpc3RyYXJlIGxlIG9wZXJhemlvbmkgZXNlZ3VpdGUgcGVyIEJJU0VDVF9XUklURSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MAorbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyByaWNoaWVkZSBkdWUgYXJnb21lbnRpIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njc0Cittc2dpZCAiLS1iaXNlY3QtY2xlYW4tc3RhdGUgcmVxdWlyZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1jbGVhbi1zdGF0ZSBub24gcmljaGllZGUgYXJnb21lbnRpIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjgxCittc2dpZCAiLS1iaXNlY3QtcmVzZXQgcmVxdWlyZXMgZWl0aGVyIG5vIGFyZ3VtZW50IG9yIGEgY29tbWl0IgorbXNnc3RyICItLWJpc2VjdC1yZXNldCByaWNoaWVkZSBvIG5lc3N1biBhcmdvbWVudG8gbyB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODUKK21zZ2lkICItLWJpc2VjdC13cml0ZSByZXF1aXJlcyBlaXRoZXIgNCBvciA1IGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3Qtd3JpdGUgcmljaGllZGUgbyBxdWF0dHJvIG8gY2lucXVlIGFyZ29tZW50aSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5MQorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJpY2hpZWRlIHRyZSBhcmdvbWVudGkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTcKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmljaGllZGUgZHVlIG8gdHJlIGFyZ29tZW50aSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMworbXNnaWQgIi0tYmlzZWN0LXRlcm1zIHJlcXVpcmVzIDAgb3IgMSBhcmd1bWVudCIKK21zZ3N0ciAiLS1iaXNlY3QtdGVybXMgcmljaGllZGUgemVybyBvIHVuIGFyZ29tZW50byIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMxCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzxvcHppb25pPl0gWzxvcHppb25pIHJldmlzaW9uZT5dIFs8cmV2aXNpb25lPl0gWy0tXSA8ZmlsZT4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICJsZSA8b3B6aW9uaSByZXZpc2lvbmU+IHNvbm8gZG9jdW1lbnRhdGUgaW4gZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGluZyBhIGNvbG9yOiAlcyIKK21zZ3N0ciAiYXR0ZXNvIGNvbG9yZTogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgImRldmUgdGVybWluYXJlIGNvbiB1biBjb2xvcmUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgImNvbG9yZSAnJXMnIG5vbiB2YWxpZG8gaW4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc0NworbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICJ2YWxvcmUgbm9uIHZhbGlkbyBwZXIgYmxhbWUuY29sb3JpbmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGxhIHJldmlzaW9uZSAlcyBkYSBpZ25vcmFyZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIiIKKyJWaXN1YWxpenphIGxlIHZvY2kgYmxhbWUgaW5jcmVtZW50YWxtZW50ZSwgYSBtYW5vIGEgbWFubyBjaGUgbGUgdHJvdmlhbW8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDUKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiVmlzdWFsaXp6YSB1biBoYXNoIFNIQS0xIHZ1b3RvIHBlciBpIGNvbW1pdCBsaW1pdGUgKGltcG9zdGF6aW9uZSAiCisicHJlZGVmaW5pdGE6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDYKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJOb24gZ2VzdGlyZSBpIGNvbW1pdCByYWRpY2UgY29tZSBjb21taXQgbGltaXRlIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGE6ICIKKyJvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ3Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsZSBzdGF0aXN0aWNoZSBzdWwgY29zdG8gZGVsbCdvcGVyYXppb25lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ4Cittc2dpZCAiRm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJGb3J6YSBsJ2luZGljYXppb25lIGQnYXZhbnphbWVudG8gZGVsbCdvcGVyYXppb25lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ5Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIlZpc3VhbGl6emEgaWwgcHVudGVnZ2lvIGRpIG91dHB1dCBwZXIgbGUgdm9jaSBibGFtZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICIiCisiVmlzdWFsaXp6YSBpbCBub21lIGZpbGUgb3JpZ2luYXJpbyAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhOiBhdXRvbWF0aWNvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIlZpc3VhbGl6emEgaWwgbnVtZXJvIGRpIHJpZ2Egb3JpZ2luYXJpbyAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUyCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiIgorIlZpc3VhbGl6emEgbCdvdXRwdXQgaW4gdW4gZm9ybWF0byBwcm9nZXR0YXRvIHBlciBsJ3V0aWxpenpvIGRhIHBhcnRlIGRpIHVuYSAiCisibWFjY2hpbmEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTMKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyJWaXN1YWxpenphIGlsIGZvcm1hdG8gcG9yY2VsYWluIGNvbiBsZSBpbmZvcm1hemlvbmkgc3VsIGNvbW1pdCBwZXIgb2duaSByaWdhIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIlVzYSBsYSBzdGVzc2EgbW9kYWxpdMOgIGRpIG91dHB1dCBkaSBnaXQtYW5ub3RhdGUgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YTogIgorIm9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTUKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlZpc3VhbGl6emEgaWwgdGltZXN0YW1wIGdyZXp6byAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiVmlzdWFsaXp6YSBsJ2hhc2ggU0hBMSBkZWwgY29tbWl0IGluIGZvcm1hIGx1bmdhIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGE6ICIKKyJvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIk5vbiB2aXN1YWxpenphcmUgaWwgbm9tZSBhdXRvcmUgZSBpbCB0aW1lc3RhbXAgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YTogIgorIm9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJWaXN1YWxpenphIGwnaW5kaXJpenpvIGUtbWFpbCBkZWxsJ2F1dG9yZSBpbnZlY2UgZGVsIG5vbWUgKGltcG9zdGF6aW9uZSAiCisicHJlZGVmaW5pdGE6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTkKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiSWdub3JhIGxlIGRpZmZlcmVuemUgcmVsYXRpdmUgYWdsaSBzcGF6aSBiaWFuY2hpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwIGJ1aWx0aW4vbG9nLmM6MTcwMgorbXNnaWQgInJldiIKK21zZ3N0ciAicmV2aXNpb25lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwCittc2dpZCAiSWdub3JlIDxyZXY+IHdoZW4gYmxhbWluZyIKK21zZ3N0ciAiSWdub3JhIDxyZXZpc2lvbmU+IGR1cmFudGUgbCdlc2VjdXppb25lIGRlbCBibGFtZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgIklnbm9yYSBsZSByZXZpc2lvbmkgc3BlY2lmaWNhdGUgaW4gPGZpbGU+IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYyCittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAiY29sb3JhIGluIG1vZG8gZGlmZmVyZW50ZSBpIG1ldGFkYXRpIHJpZG9uZGFudGkgZGVsbGEgcmlnYSBwcmVjZWRlbnRlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICJjb2xvcmEgbGUgcmlnaGUgaW4gYmFzZSBhbGwnZXTDoCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiVXNhIGNpY2xpIGV4dHJhIHBlciB0cm92YXJlIHVuYSBjb3JyaXNwb25kZW56YSBtaWdsaW9yZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NQorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiVXNhIGxlIHJldmlzaW9uaSBzYWx2YXRlIGluIDxmaWxlPiBhbnppY2jDqSByaWNoaWFtYXJlIGdpdC1yZXYtbGlzdCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIlVzYSBpIGNvbnRlbnV0aSBkaSA8ZmlsZT4gY29tZSBpbW1hZ2luZSBmaW5hbGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcgYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgInNjb3JlIgorbXNnc3RyICJwdW50ZWdnaW8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJUcm92YSBjb3BpZSBkZWxsZSByaWdoZSBhbGwnaW50ZXJubyBlIGZyYSBmaWxlIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiVHJvdmEgcmlnaGUgc3Bvc3RhdGUgYWxsJ2ludGVybm8gZSBmcmEgZmlsZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIkVsYWJvcmEgc29sbyBsJ2ludGVydmFsbG8gcmlnaGUgbixtLCBjb250YW5kb2xlIGRhIDEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjEKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICIiCisiLS1wcm9ncmVzcyBub24gcHXDsiBlc3NlcmUgdXNhdG8gY29uIC0taW5jcmVtZW50YWwgbyBjb24gaSBmb3JtYXRpIHBvcmNlbGFpbiIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5NzIKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICI0IGFubmksIDExIGdpb3JuaSBmYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gImlsIGZpbGUgJXMgaGEgc29sbyAlbHUgcmlnYSIKK21zZ3N0clsxXSAiaWwgZmlsZSAlcyBoYSBzb2xvICVsdSByaWdoZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjExMjUKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICJFc2VndW8gaWwgYmxhbWUgc3VsbGUgcmlnaGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcHppb25pPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B6aW9uaT5dIFstbF0gWy1mXSA8bm9tZSBicmFuY2g+IFs8cHVudG8gZGkgcGFydGVuemE+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wemlvbmk+XSBbLXJdICgtZCB8IC1EKSA8bm9tZSBicmFuY2g+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B6aW9uaT5dICgtbSB8IC1NKSBbPHZlY2NoaW8gYnJhbmNoPl0gPG51b3ZvIGJyYW5jaD4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcHppb25pPl0gKC1jIHwgLUMpIFs8dmVjY2hpbyBicmFuY2g+XSA8bnVvdm8gYnJhbmNoPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcHppb25pPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzUKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B6aW9uaT5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJlbGltaW5vIGlsIGJyYW5jaCAnJXMnIGRpIGN1aSDDqCBzdGF0byBlc2VndWl0byBpbCBtZXJnZSBpblxuIgorIiAgICAgICAgICclcycsIG1hIGRpIGN1aSBub24gw6ggYW5jb3JhIHN0YXRvIGVzZWd1aXRvIGlsIG1lcmdlIGluIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJub24gZWxpbWlubyBpbCBicmFuY2ggJyVzJyBkaSBjdWkgbm9uIMOoIGFuY29yYSBzdGF0byBlc2VndWl0byBpbCBtZXJnZSBpblxuIgorIiAgICAgICAgICclcycsIGJlbmNow6kgbmUgc2lhIHN0YXRvIGVzZWd1aXRvIGlsIG1lcmdlIGluIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgbCdvZ2dldHRvIGNvbW1pdCBwZXIgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiSWwgYnJhbmNoICclcycgbm9uIMOoIHN0YXRvIHNvdHRvcG9zdG8gY29tcGxldGFtZW50ZSBhIHVuIG1lcmdlLlxuIgorIlNlIHNlaSBzaWN1cm8gZGkgdm9sZXJsbyBlbGltaW5hcmUsIGVzZWd1aSAnZ2l0IGJyYW5jaCAtRCAlcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGVsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyMAorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdXNhcmUgLWEgY29uIC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBsJ29nZ2V0dG8gY29tbWl0IHBlciBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlbGltaW5hcmUgaWwgYnJhbmNoICclcycgZGkgY3VpIMOoIHN0YXRvIGVzZWd1aXRvIGlsIGNoZWNrb3V0IGluICIKKyInJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiYnJhbmNoIHJlbW90byB0cmFjY2lhdG8gJyVzJyBub24gdHJvdmF0by4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImJyYW5jaCAnJXMnIG5vbiB0cm92YXRvLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsJ2VsaW1pbmF6aW9uZSBkZWwgYnJhbmNoIHJlbW90byB0cmFjY2lhdG8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGwnZWxpbWluYXppb25lIGRlbCBicmFuY2ggJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJCcmFuY2ggcmVtb3RvIHRyYWNjaWF0byAlcyBlbGltaW5hdG8gKGVyYSAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJCcmFuY2ggJXMgZWxpbWluYXRvIChlcmEgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbGEgc3RyaW5nYSBkaSBmb3JtYXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIkhFQUQgKCVzKSBwdW50YSBhIHVuIG9nZ2V0dG8gbm9uIGluIHJlZnMvaGVhZHMvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiUmViYXNlIGRlbCBicmFuY2ggJXMgaW4gY29yc28gaW4gJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAiQmlzZXppb25lIGRlbCBicmFuY2ggJXMgaW4gY29yc28gaW4gJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgY29waWFyZSBpbCBicmFuY2ggY29ycmVudGUgcXVhbmRvIG5vbiBzaSDDqCBzdSBhbGN1biBicmFuY2guIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwNAorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgcmlkZW5vbWluYXJlIGlsIGJyYW5jaCBjb3JyZW50ZSBxdWFuZG8gbm9uIHNpIMOoIHN1IGFsY3VuIGJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIk5vbWUgYnJhbmNoIG5vbiB2YWxpZG86ICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIlJpZGVub21pbmF6aW9uZSBkZWwgYnJhbmNoIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIkNvcGlhIGRlbCBicmFuY2ggbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICJDcmVhdGEgY29waWEgZGVsIGJyYW5jaCBtYWwgZGVub21pbmF0byAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiQnJhbmNoIG1hbCBkZW5vbWluYXRvICclcycgcmlub21pbmF0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoIHJlbmFtZWQgdG8gJXMsIGJ1dCBIRUFEIGlzIG5vdCB1cGRhdGVkISIKK21zZ3N0ciAiQnJhbmNoIHJpbm9taW5hdG8gaW4gJXMsIG1hIEhFQUQgbm9uIMOoIGFnZ2lvcm5hdG8hIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NgorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIklsIGJyYW5jaCDDqCBzdGF0byByaW5vbWluYXRvLCBtYSBsJ2FnZ2lvcm5hbWVudG8gZGVsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgIgorIm5vbiDDqCByaXVzY2l0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjgKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIklsIGJyYW5jaCDDqCBzdGF0byBjb3BpYXRvLCBtYSBsJ2FnZ2lvcm5hbWVudG8gZGVsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgbm9uICIKKyLDqCByaXVzY2l0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorIk1vZGlmaWNhIGxhIGRlc2NyaXppb25lIGRlbCBicmFuY2hcbiIKKyIgICVzXG4iCisiTGUgcmlnaGUgY2hlIGluaXppYW5vIGNvbiAnJWMnIHNhcmFubm8gb21lc3NlLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBnZW5lcmljaGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGwnaGFzaCBlIGwnb2dnZXR0bywgdXNhIGwnb3B6aW9uZSBkdWUgdm9sdGUgcGVyIGlsIGJyYW5jaCB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjEKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGkgbWVzc2FnZ2kgaW5mb3JtYXRpdmkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIyCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgImltcG9zdGEgbGEgbW9kYWxpdMOgIHRyYWNraW5nICh2ZWRpIGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQKK21zZ2lkICJkbyBub3QgdXNlIgorbXNnc3RyICJub24gdXNhcmUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2IGJ1aWx0aW4vcmViYXNlLmM6NTA1Cittc2dpZCAidXBzdHJlYW0iCittc2dzdHIgInVwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAibW9kaWZpY2EgbGUgaW5mb3JtYXppb25pIHN1bGwndXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3Cittc2dpZCAidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgInJpbXVvdmkgbGUgaW5mb3JtYXppb25pIHN1bGwndXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJ1c2EgbCdvdXRwdXQgY29sb3JhdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiYWdpc2NpIHN1aSBicmFuY2ggcmVtb3RpIHRyYWNjaWF0aSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzEgYnVpbHRpbi9icmFuY2guYzo2MzMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJzdGFtcGEgc29sbyBpIGJyYW5jaCBjaGUgY29udGVuZ29ubyBpIGNvbW1pdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJzdGFtcGEgc29sbyBpIGJyYW5jaCBjaGUgbm9uIGNvbnRlbmdvbm8gaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM3Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAiQXppb25pIHNwZWNpZmljaGUgZGkgZ2l0LWJyYW5jaDoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgImVsZW5jYSBzaWEgaSBicmFuY2ggcmVtb3RpIHRyYWNjaWF0aSBzaWEgcXVlbGxpIGxvY2FsaSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAiZWxpbWluYSBpbCBicmFuY2ggY29tcGxldGFtZW50ZSBzb3R0b3Bvc3RvIGEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQxCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAiZWxpbWluYSBpbCBicmFuY2ggKGFuY2hlIHNlIG5vbiDDqCBzdGF0byBzb3R0b3Bvc3RvIGEgbWVyZ2UpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJzcG9zdGEvcmlub21pbmEgdW4gYnJhbmNoIGUgaWwgc3VvIHJlZ2lzdHJvIGRlaSByaWZlcmltZW50aSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJzcG9zdGEvcmlub21pbmEgdW4gYnJhbmNoIGFuY2hlIHNlIGxhIGRlc3RpbmF6aW9uZSBlc2lzdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ0Cittc2dpZCAiY29weSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAiY29waWEgdW4gYnJhbmNoIGUgaWwgc3VvIHJlZ2lzdHJvIGRlaSByaWZlcmltZW50aSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDUKK21zZ2lkICJjb3B5IGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImNvcGlhIHVuIGJyYW5jaCBhbmNoZSBzZSBsYSBkZXN0aW5hemlvbmUgZXNpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICJlbGVuY2EgaSBub21pIGRlaSBicmFuY2giCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICJ2aXN1YWxpenphIGlsIG5vbWUgZGVsIGJyYW5jaCBjb3JyZW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAiY3JlYSBpbCByZWdpc3RybyBkZWkgcmlmZXJpbWVudGkgZGVsIGJyYW5jaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTAKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAibW9kaWZpY2EgbGEgZGVzY3JpemlvbmUgZGVsIGJyYW5jaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICJmb3J6YSBsYSBjcmVhemlvbmUsIHNwb3N0YW1lbnRvL3JpZGVub21pbmF6aW9uZSwgZWxpbWluYXppb25lIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJzdGFtcGEgc29sbyBpIGJyYW5jaCBzb3R0b3Bvc3RpIGEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJzdGFtcGEgc29sbyBpIGJyYW5jaCBub24gc290dG9wb3N0aSBhIG1lcmdlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiZWxlbmNhIGkgYnJhbmNoIGluIGNvbG9ubmUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICJvZ2dldHRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1OAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSBicmFuY2ggZGVsbCdvZ2dldHRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4IGJ1aWx0aW4vdGFnLmM6NDQwCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICIiCisibCdvcmRpbmFtZW50byBlIGlsIGZpbHRyYWdnaW8gbm9uIGZhbm5vIGRpZmZlcmVuemEgdHJhIG1haXVzY29sZSBlIG1pbnVzY29sZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQzOAorIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICJmb3JtYXRvIGRhIHVzYXJlIHBlciBsJ291dHB1dCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NAorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEIG5vbiB0cm92YXRvIGZyYSBpIHJpZmVyaW1lbnRpL2hlYWQhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZSAtLXZlcmJvc2Ugbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzIzIGJ1aWx0aW4vYnJhbmNoLmM6Nzc3IGJ1aWx0aW4vYnJhbmNoLmM6Nzg2Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIm5vbWUgYnJhbmNoIHJpY2hpZXN0byIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmlsZSBmb3JuaXJlIHVuYSBkZXNjcml6aW9uZSBwZXIgbCdIRUFEIHNjb2xsZWdhdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU4Cittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgImltcG9zc2liaWxlIG1vZGlmaWNhcmUgbGEgZGVzY3JpemlvbmUgcGVyIHBpw7kgZGkgdW4gYnJhbmNoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAiTm9uIGVzaXN0ZSBhbmNvcmEgbmVzc3VuIGNvbW1pdCBzdWwgYnJhbmNoICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIk5vbiBlc2lzdGUgYWxjdW4gYnJhbmNoIGRlbm9taW5hdG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgzCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgY29weSBvcGVyYXRpb24iCittc2dzdHIgInNvbm8gcHJlc2VudGkgdHJvcHBpIGJyYW5jaCBwZXIgY29uc2VudGlyZSB1bidvcGVyYXppb25lIGRpIGNvcGlhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICIiCisic29ubyBwcmVzZW50aSB0cm9wcGkgYXJnb21lbnRpIHBlciBjb25zZW50aXJlIHVuJ29wZXJhemlvbmUgZGkgIgorInJpZGVub21pbmF6aW9uZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiIgorInNvbm8gcHJlc2VudGkgdHJvcHBpIGFyZ29tZW50aSBwZXIgY29uc2VudGlyZSBsJ2ltcG9zdGF6aW9uZSBkZWwgbnVvdm8gIgorInVwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBpbXBvc3RhcmUgbCd1cHN0cmVhbSBkaSBIRUFEIGEgJXMgcXVhbmRvIG5vbiBwdW50YSBhZCBhbGN1biAiCisiYnJhbmNoLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiYnJhbmNoICclcycgbm9uIGVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImlsIGJyYW5jaCAnJXMnIG5vbiBlc2lzdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICIiCisic29ubyBwcmVzZW50aSB0cm9wcGkgYXJnb21lbnRpIHBlciByaW11b3ZlcmUgbGUgaW5mb3JtYXppb25pIHN1bGwndXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI1Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHJpbXVvdmVyZSBsZSBpbmZvcm1hemlvbmkgc3VsbCd1cHN0cmVhbSBkaSBIRUFEIHF1YW5kbyBub24gcHVudGEgIgorImFkIGFsY3VuIGJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiSWwgYnJhbmNoICclcycgbm9uIGhhIGluZm9ybWF6aW9uaSBzdWxsJ3Vwc3RyZWFtIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgIiIKKyJUaGUgLWEsIGFuZCAtciwgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IHRha2UgYSBicmFuY2ggbmFtZS5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdXNlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIKK21zZ3N0ciAiIgorIkxlIG9wemlvbmkgZGkgJ2dpdCBicmFuY2gnIC1hIGUgLXIgbm9uIHJpY2hpZWRvbm8gdW4gbm9tZSBicmFuY2guXG4iCisiRm9yc2Ugdm9sZXZpIHVzYXJlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICIiCisibCdvcHppb25lICctLXNldC11cHN0cmVhbScgbm9uIMOoIHBpw7kgc3VwcG9ydGF0YS4gVXNhICctLXRyYWNrJyBvICctLXNldC0iCisidXBzdHJlYW0tdG8nLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNSBidWlsdGluL2J1bmRsZS5jOjIzCittc2dpZCAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iCittc2dzdHIgImdpdCBidW5kbGUgY3JlYXRlIFs8b3B6aW9uaT5dIDxmaWxlPiA8YXJnb21lbnRpIGdpdC1yZXYtbGlzdD4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYgYnVpbHRpbi9idW5kbGUuYzoyOAorbXNnaWQgImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHppb25pPl0gPGZpbGU+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE3IGJ1aWx0aW4vYnVuZGxlLmM6MzMKK21zZ2lkICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8bm9tZSByaWZlcmltZW50bz4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxub21lIHJpZmVyaW1lbnRvPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjI4Cittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgbGEgYmFycmEgZGkgYXZhbnphbWVudG8iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjMwCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAidmlzdWFsaXp6YSBsYSBiYXJyYSBkaSBhdmFuemFtZW50byIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgbGEgYmFycmEgZGkgYXZhbnphbWVudG8gZHVyYW50ZSBsYSBmYXNlIGRpIHNjcml0dHVyYSBvZ2dldHRpIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjczIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAic2ltaWxlIGEgLS1hbGwtcHJvZ3Jlc3MgcXVhbmRvIMOoIHZpc3VhbGl6emF0YSBsYSBiYXJyYSBkaSBhdmFuemFtZW50byIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIlBlciBjcmVhcmUgdW4gYnVuZGxlIMOoIG5lY2Vzc2FyaW8gdW4gcmVwb3NpdG9yeS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgaSBkZXR0YWdsaSBzdWwgYnVuZGxlIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIMOoIGNvcnJldHRvXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJQZXIgZGVjb21wcmltZXJlIHVuIGJ1bmRsZSDDqCBuZWNlc3NhcmlvIHVuIHJlcG9zaXRvcnkuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2OCBidWlsdGluL3JlbW90ZS5jOjE2MDkKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICIiCisidmlzdWFsaXp6YSB1bHRlcmlvcmkgZGV0dGFnbGk7IGRldmUgZXNzZXJlIGNvbGxvY2F0byBwcmltYSBkaSB1biBzb3R0b2NvbWFuZG8iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTkwIGJ1aWx0aW4vcmVtb3RlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJTb3R0b2NvbWFuZG8gc2Nvbm9zY2l1dG86ICVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0aXBvPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBlcmNvcnNvPl0gPG9nZ2V0dG8+IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk2Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYxNworbXNnaWQgIm9ubHkgb25lIGJhdGNoIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIgorbXNnc3RyICJwdcOyIGVzc2VyZSBzcGVjaWZpY2F0YSBzb2xvIHVuJ29wemlvbmUgYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzUKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjx0aXBvPiBwdcOyIGVzc2VyZSB1bm8gZnJhIGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM2Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAidmlzdWFsaXp6YSB0aXBvIG9nZ2V0dG8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzcKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJ2aXN1YWxpenphIGRpbWVuc2lvbmkgb2dnZXR0byIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAiZXNjaSBjb24gY29kaWNlIGQndXNjaXRhIHplcm8gc2Ugbm9uIHNpIHNvbm8gdmVyaWZpY2F0aSBlcnJvcmkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDAKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAic3RhbXBhIGlsIGNvbnRlbnV0byBkZWxsJ29nZ2V0dG8gY29uIHVuIGZvcm1hdG8gbGVnZ2liaWxlIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImVzZWd1aSB0ZXh0Y29udiBzdWwgY29udGVudXRvIGRlbGwnb2dnZXR0byAocGVyIGdsaSBvZ2dldHRpIGJsb2IpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZXNlZ3VpIGkgZmlsdHJpIHN1bCBjb250ZW51dG8gZGVsbCdvZ2dldHRvIChwZXIgZ2xpIG9nZ2V0dGkgYmxvYikiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDo5OTIKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ2Cittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgInVzYSB1biBwZXJjb3JzbyBzcGVjaWZpY28gcGVyIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ4Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICJjb25zZW50aSBhIC1zIGUgLXQgZGkgZnVuemlvbmFyZSBjb24gb2dnZXR0aSBtYWxmb3JtYXRpL2NvcnJvdHRpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICJlc2VndWkgaWwgYnVmZmVyaW5nIGRlbGwnb3V0cHV0IGRpIC0tYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGxlIGluZm9ybWF6aW9uaSBlIGlsIGNvbnRlbnV0byBkZWdsaSBvZ2dldHRpIGZvcm5pdGkgbmVsbG8gIgorInN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJ2aXN1YWxpenphIGxlIGluZm9ybWF6aW9uaSBkZWdsaSBvZ2dldHRpIGZvcm5pdGkgbmVsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTkKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIiIKKyJzZWd1aSBpIGNvbGxlZ2FtZW50aSBzaW1ib2xpY2kgZW50cm8gbCdhbGJlcm8gKHVzYXRvIGNvbiAtLWJhdGNoIG8gLS1iYXRjaC0iCisiY2hlY2spIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYxCittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAidmlzdWFsaXp6YSB0dXR0aSBnbGkgb2dnZXR0aSBjb24gLS1iYXRjaCBvIC0tYmF0Y2gtY2hlY2siCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjMKK21zZ2lkICJkbyBub3Qgb3JkZXIgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCittc2dzdHIgIm5vbiBvcmRpbmFyZSBsJ291dHB1dCBkaSAtLWJhdGNoLWFsbC1vYmplY3RzIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHJpYnV0bz4uLi5dIFstLV0gPG5vbWUgcGVyY29yc28+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxNAorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyaWJ1dG8+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgImluZGljYSB0dXR0aSBnbGkgYXR0cmlidXRpIGltcG9zdGF0aSBzdWwgZmlsZSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjIKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAidXNhIHNvbG8gaWwgZmlsZSAuZ2l0YXR0cmlidXRlcyBkZWxsJ2luZGljZSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgImxlZ2dpIGkgbm9taSBkZWkgZmlsZSBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjUgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNworbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJ0ZXJtaW5hIGkgcmVjb3JkIGRpIGlucHV0IGUgb3V0cHV0IGNvbiB1biBjYXJhdHRlcmUgTlVMIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM1IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDYKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgbCdhdmFuemFtZW50byBkZWxsJ29wZXJhemlvbmUiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjkKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIHBlcmNvcnNpIGRpIGlucHV0IG5vbiBjb3JyaXNwb25kZW50aSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzozMQorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICJpZ25vcmEgbCdpbmRpY2UgZHVyYW50ZSBpbCBjb250cm9sbG8iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYwCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc3BlY2lmaWNhcmUgaSBub21pIHBlcmNvcnNvIGNvbiAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiBoYSBzZW5zbyBzb2xvIGNvbiAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICJuZXNzdW4gcGVyY29yc28gc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY5Cittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIi0tcXVpZXQgw6ggdmFsaWRvIHNvbG8gY29uIHVuIG5vbWUgcGVyY29yc28gc2luZ29sbyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzEKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSB1c2FyZSBzaWEgLS1xdWlldCBzaWEgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NAorbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIi0tbm9uLW1hdGNoaW5nIMOoIHZhbGlkbyBzb2xvIGNvbiAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjkKK21zZ2lkICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCittc2dzdHIgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B6aW9uaT5dIDxjb250YXR0bz4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImxlZ2dpIGkgY29udGF0dGkgYW5jaGUgZGFsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb250YXR0bzogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICJuZXNzdW4gY29udGF0dG8gc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B6aW9uaT5dIFstLV0gWzxmaWxlPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAibGEgZmFzZSBkZXYnZXNzZXJlIGNvbXByZXNhIGZyYSAxIGUgMyBvIGFsbCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJlc2VndWkgaWwgY2hlY2tvdXQgZGkgdHV0dGkgaSBmaWxlIG5lbGwnaW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJmb3J6YSBsYSBzb3ZyYXNjcml0dHVyYSBkZWkgZmlsZSBlc2lzdGVudGkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICJub24gZW1ldHRlcmUgdW4gYXZ2aXNvIHBlciBpIGZpbGUgZXNpc3RlbnRpIGUgaSBmaWxlIG5vbiBuZWxsJ2luZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAibm9uIGVzZWd1aXJlIGlsIGNoZWNrb3V0IGRlaSBmaWxlIG51b3ZpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgImFnZ2lvcm5hIGxlIGluZm9ybWF6aW9uaSBzdGF0IG5lbCBmaWxlIGluZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVnZ2kgbCdlbGVuY28gZGVpIHBlcmNvcnNpIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc3Cittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICJzY3JpdmkgaWwgY29udGVudXRvIGluIGZpbGUgdGVtcG9yYW5laSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OCBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzkKK21zZ2lkICJzdHJpbmciCittc2dzdHIgInN0cmluZ2EiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJhZ2dpdW5naSBpbCBwcmVmaXNzbyA8c3RyaW5nYT4gZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVpIGZpbGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODEKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAiY29waWEgaSBmaWxlIGRhbGxhIGZhc2Ugc3BlY2lmaWNhdGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMQorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3B6aW9uaT5dIDxicmFuY2g+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzIKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wemlvbmk+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs8b3B6aW9uaT5dIDxicmFuY2g+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIKK21zZ2lkICJnaXQgcmVzdG9yZSBbPG9wdGlvbnM+XSBbLS1zb3VyY2U9PGJyYW5jaD5dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc3RvcmUgWzxvcHppb25pPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUgYnVpbHRpbi9jaGVja291dC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiaWwgcGVyY29yc28gJyVzJyBub24gaGEgbGEgbm9zdHJhIHZlcnNpb25lIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiaWwgcGVyY29yc28gJyVzJyBub24gaGEgbGEgbG9ybyB2ZXJzaW9uZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJpbCBwZXJjb3JzbyAnJXMnIG5vbiBoYSB0dXR0ZSBsZSB2ZXJzaW9uaSBuZWNlc3NhcmllIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiaWwgcGVyY29yc28gJyVzJyBub24gaGEgbGUgdmVyc2lvbmkgbmVjZXNzYXJpZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAicGVyY29yc28gJyVzJzogaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgaWwgcmlzdWx0YXRvIGRlbCBtZXJnZSBwZXIgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gIlJpY3JlYXRvICVkIGNvbmZsaXR0byBkaSBtZXJnZSIKK21zZ3N0clsxXSAiUmljcmVhdGkgJWQgY29uZmxpdHRpIGRpIG1lcmdlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIkFnZ2lvcm5hdG8gJWQgcGVyY29yc28gZGEgJXMiCittc2dzdHJbMV0gIkFnZ2lvcm5hdGkgJWQgcGVyY29yc2kgZGEgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICJBZ2dpb3JuYXRvICVkIHBlcmNvcnNvIGRhbGwnaW5kaWNlIgorbXNnc3RyWzFdICJBZ2dpb3JuYXRpICVkIHBlcmNvcnNpIGRhbGwnaW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDEyIGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTUgYnVpbHRpbi9jaGVja291dC5jOjQxOAorIzogYnVpbHRpbi9jaGVja291dC5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiclcycgbm9uIHB1w7IgZXNzZXJlIHVzYXRvIGNvbiBpIHBlcmNvcnNpIGluIGZhc2UgZGkgYWdnaW9ybmFtZW50byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyBub24gcHXDsiBlc3NlcmUgdXNhdG8gY29uICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgZGVpIHBlcmNvcnNpIGUgcGFzc2FyZSBhbCBicmFuY2ggJyVzJyAiCisiY29udGVtcG9yYW5lYW1lbnRlLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgIm7DqSAnJXMnIG7DqSAnJXMnIHNvbm8gc3RhdGkgc3BlY2lmaWNhdGkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgIiclcycgZGV2J2Vzc2VyZSB1c2F0byBxdWFuZG8gJyVzJyBub24gw6ggc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDUgYnVpbHRpbi9jaGVja291dC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG9yICclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyBvICclcycgbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRpIGNvbiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUwOSBidWlsdGluL2NoZWNrb3V0LmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiaWwgcGVyY29yc28gJyVzJyBub24gw6ggc3RhdG8gc290dG9wb3N0byBhIG1lcmdlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgyIGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6ODIKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAicHJpbWEgZGV2aSByaXNvbHZlcmUgbCdpbmRpY2UgY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBjb250aW51YXJlIGNvbiBtb2RpZmljaGUgaW4gc3RhZ2UgbmVpIGZpbGUgc2VndWVudGk6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzYW1pbmFyZSBpbCByZWdpc3RybyBkZWkgcmlmZXJpbWVudGkgcGVyICclcyc6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzcKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBzaSB0cm92YSBvcmEgYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4MSBidWlsdGluL2Nsb25lLmM6NzE2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmlwcmlzdGluYSBpbCBicmFuY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJTaSDDqCBnacOgIHN1ICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiU2kgw6ggcGFzc2F0aSBhbCBicmFuY2ggJyVzJyBlIGxvIHNpIMOoIHJlaW1wb3N0YXRvXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQgYnVpbHRpbi9jaGVja291dC5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiU2kgw6ggcGFzc2F0aSBhIHVuIG51b3ZvIGJyYW5jaCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiU2kgw6ggcGFzc2F0aSBhbCBicmFuY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi5lIGFsdHJpICVkLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiQXR0ZW56aW9uZTogc3RhaSByaW11b3ZlbmRvICVkIGNvbW1pdCBub24gY29sbGVnYXRvIGFkIGFsY3VuXG4iCisiYnJhbmNoOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJBdHRlbnppb25lOiBzdGFpIHJpbXVvdmVuZG8gJWQgY29tbWl0IG5vbiBjb2xsZWdhdGkgYWQgYWxjdW5cbiIKKyJicmFuY2g6XG4iCisiXG4iCisiJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyJTZSB2dW9pIG1hbnRlbmVybG8gY3JlYW5kbyB1biBudW92byBicmFuY2gsIHF1ZXN0byBwb3RyZWJiZSBlc3NlcmVcbiIKKyJ1biBidW9uIG1vbWVudG8gcGVyIGZhcmxvIGNvbjpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bm9tZSBkZWwgbnVvdm8gYnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiU2UgdnVvaSBtYW50ZW5lcmxpIGNyZWFuZG8gdW4gbnVvdm8gYnJhbmNoLCBxdWVzdG8gcG90cmViYmUgZXNzZXJlXG4iCisidW4gYnVvbiBtb21lbnRvIHBlciBmYXJsbyBjb246XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5vbWUgZGVsIG51b3ZvIGJyYW5jaD4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJlcnJvcmUgaW50ZXJubyBkdXJhbnRlIGxhIHZpc2l0YSBkZWxsZSByZXZpc2lvbmkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDExCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIkxhIHByZWNlZGVudGUgcG9zaXppb25lIGRpIEhFQUQgZXJhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA1MSBidWlsdGluL2NoZWNrb3V0LmM6MTI4NgorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIlNlaSBzdSB1biBicmFuY2ggY2hlIGRldmUgYW5jb3JhIGVzc2VyZSBjcmVhdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc4Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkIgorbXNnc3RyICJhdHRlc28gc29sbyB1biByaWZlcmltZW50byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgImF0dGVzbyBzb2xvIHVuIHJpZmVyaW1lbnRvLCAlZCBzcGVjaWZpY2F0aS4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKyInJXMnIHBvdHJlYmJlIGVzc2VyZSBzaWEgdW4gZmlsZSBsb2NhbGUsIHNpYSB1biBicmFuY2ggZGEgdHJhY2NpYXJlLlxuIgorIlVzYSAtLSAoZSBmYWNvbHRhdGl2YW1lbnRlIC0tbm8tZ3Vlc3MpIHBlciByaW11b3ZlcmUgbCdhbWJpZ3VpdMOgIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NSBidWlsdGluL3dvcmt0cmVlLmM6MjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJyaWZlcmltZW50byBub24gdmFsaWRvOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTggYnVpbHRpbi9jaGVja291dC5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJpbCByaWZlcmltZW50byBub24gw6ggdW4gYWxiZXJvOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAiYXR0ZXNvIGJyYW5jaCwgcmljZXZ1dG8gdGFnICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgcmVtb3RlIGJyYW5jaCAnJXMnIgorbXNnc3RyICJhdHRlc28gYnJhbmNoLCByaWNldnV0byBicmFuY2ggcmVtb3RvICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIKK21zZ3N0ciAiYXR0ZXNvIGJyYW5jaCwgcmljZXZ1dG8gJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAiYXR0ZXNvIGJyYW5jaCwgcmljZXZ1dG8gY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzI3Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBjYW1iaWFyZSBicmFuY2ggZHVyYW50ZSB1biBtZXJnZVxuIgorIkNvbnNpZGVyYSBsJ3VzbyBkaSBcImdpdCBtZXJnZSAtLXF1aXRcIiBvIGRpIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzEKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uXG4iCisiQ29uc2lkZXIgXCJnaXQgYW0gLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgY2FtYmlhcmUgYnJhbmNoIG5lbCBiZWwgbWV6em8gZGkgdW5hIHNlc3Npb25lIGFtXG4iCisiQ29uc2lkZXJhIGwndXNvIGRpIFwiZ2l0IGFtIC0tcXVpdFwiIG8gZGkgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZWJhc2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBjYW1iaWFyZSBicmFuY2ggZHVyYW50ZSB1biByZWJhc2VcbiIKKyJDb25zaWRlcmEgbCd1c28gZGkgXCJnaXQgcmViYXNlIC0tcXVpdFwiIG8gZGkgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzOQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGNhbWJpYXJlIGJyYW5jaCBkdXJhbnRlIHVuIGNoZXJyeS1waWNrXG4iCisiQ29uc2lkZXJhIGwndXNvIGRpIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG8gZGkgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0MworbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZXZlcnRpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZXZlcnQgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgY2FtYmlhcmUgYnJhbmNoIGR1cmFudGUgdW4gcmV2ZXJ0XG4iCisiQ29uc2lkZXJhIGwndXNvIGRpIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvIGRpIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDcKK21zZ2lkICJ5b3UgYXJlIHN3aXRjaGluZyBicmFuY2ggd2hpbGUgYmlzZWN0aW5nIgorbXNnc3RyICJzdGFpIGNhbWJpYW5kbyBicmFuY2ggZHVyYW50ZSB1bmEgYmlzZXppb25lIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJpIHBlcmNvcnNpIG5vbiBwb3Nzb25vIGVzc2VyZSB1c2F0aSBwYXNzYW5kbyBkYSB1biBicmFuY2ggYSB1biBhbHRybyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTcgYnVpbHRpbi9jaGVja291dC5jOjEzNjEgYnVpbHRpbi9jaGVja291dC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyBub24gcHXDsiBlc3NlcmUgdXNhdG8gcGFzc2FuZG8gZGEgdW4gYnJhbmNoIGEgdW4gYWx0cm8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzcyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MCBidWlsdGluL2NoZWNrb3V0LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiJyVzJyBub24gcHXDsiBlc3NlcmUgdXNhdG8gY29uICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IHRha2UgPHN0YXJ0LXBvaW50PiIKK21zZ3N0ciAiJyVzJyBub24gYWNjZXR0YSBsJ2FyZ29tZW50byA8cHVudG8gZGkgcGFydGVuemE+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY2FtYmlhcmUgYnJhbmNoIHBlciBwYXNzYXJlIGEgJyVzJyBjaGUgbm9uIMOoIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTcKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBvciBjb21taXQgYXJndW1lbnQiCittc2dzdHIgImFyZ29tZW50byBicmFuY2ggbyBjb21taXQgbWFuY2FudGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM5IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMyBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODUKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjEzOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJmb3J6YSBsJ2luZGljYXppb25lIGQnYXZhbnphbWVudG8gZGVsbCdvcGVyYXppb25lIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJlc2VndWkgdW4gbWVyZ2UgYSB0cmUgdmllIGNvbiBpbCBudW92byBicmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQxIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgInN0aWxlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MgorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgInN0aWxlIGNvbmZsaXR0aSAobWVyZ2UgbyBkaWZmMykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU0IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDMKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgInNjb2xsZWdhIGwnSEVBRCBhbCBjb21taXQgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU1Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgImltcG9zdGEgbGUgaW5mb3JtYXppb25pIHN1bGwndXBzdHJlYW0gcGVyIGlsIG51b3ZvIGJyYW5jaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiZXNlZ3VpIGZvcnphdGFtZW50ZSBpbCBjaGVja291dCAoc2NhcnRhIGxlIG1vZGlmaWNoZSBsb2NhbGkpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1OQorbXNnaWQgIm5ldy1icmFuY2giCittc2dzdHIgIm51b3ZvIGJyYW5jaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIm51b3ZvIGJyYW5jaCBzZW56YSBnZW5pdG9yZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjEgYnVpbHRpbi9tZXJnZS5jOjI4OAorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiYWdnaW9ybmEgaSBmaWxlIGlnbm9yYXRpIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2NAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAiIgorIm5vbiBjb250cm9sbGFyZSBzZSB1biBhbHRybyBhbGJlcm8gZGkgbGF2b3JvIGNvbnRpZW5lIGlsIHJpZmVyaW1lbnRvICIKKyJzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzcKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKyJlc2VndWkgaWwgY2hlY2tvdXQgZGVsbGEgbm9zdHJhIHZlcnNpb25lIHBlciBpIGZpbGUgbm9uIHNvdHRvcG9zdGkgYSBtZXJnZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODAKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorImVzZWd1aSBpbCBjaGVja291dCBkZWxsYSBsb3JvIHZlcnNpb25lIHBlciBpIGZpbGUgbm9uIHNvdHRvcG9zdGkgYSBtZXJnZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODQKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgIm5vbiBsaW1pdGFyZSBnbGkgc3BlY2lmaWNhdG9yaSBwZXJjb3JzbyBzb2xvIGFsbGUgdm9jaSBzcGFyc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTM3Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJsZSBvcHppb25pIC1iLCAtQiBlIC0tb3JwaGFuIHNvbm8gbXV0dWFtZW50ZSBlc2NsdXNpdmUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTQwCittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJsZSBvcHppb25pIC1wIGUgLS1vdmVybGF5IHNvbm8gbXV0dWFsbWVudGUgZXNjbHVzaXZlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU3NworbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayByaWNoaWVkZSBpbCBub21lIGRpIHVuIGJyYW5jaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1ODIKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIm5vbWUgZGVsIGJyYW5jaCBtYW5jYW50ZTsgcHJvdmEgY29uIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzMQorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJzcGVjaWZpY2F0b3JlIHBlcmNvcnNvIG5vbiB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiIKKyInJXMnIG5vbiDDqCB1biBjb21taXQgZSBub24gc2kgcHXDsiBjcmVhcmUgdW4gYnJhbmNoICclcycgY2hlIHBhcnRhIGRhIGVzc28iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBub24gYWNjZXR0YSB1biBwZXJjb3JzbyAnJXMnIGNvbWUgYXJnb21lbnRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSBub24gw6ggY29tcGF0aWJpbGUgY29uIC0tZGV0YWNoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1NCBidWlsdGluL3Jlc2V0LmM6MzI0Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLXBhdGNoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY2NQorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGUgLS1tZXJnZSBzb25vIGluY29tcGF0aWJpbGkgcXVhbmRvXG4iCisic2kgZXNlZ3VlIGlsIGNoZWNrb3V0IGRlbGwnaW5kaWNlLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NzAKK21zZ2lkICJ5b3UgbXVzdCBzcGVjaWZ5IHBhdGgocykgdG8gcmVzdG9yZSIKK21zZ3N0ciAiZGV2aSBzcGVjaWZpY2FyZSBpbCBwZXJjb3Jzby9pIHBlcmNvcnNpIGRhIHJpcHJpc3RpbmFyZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIHJlbW90ZSB0cmFja2luZyBicmFuY2guXG4iCisiV2UgZm91bmQgJWQgcmVtb3RlcyB3aXRoIGEgcmVmZXJlbmNlIHRoYXQgbWF0Y2hlZC4gU28gd2UgZmVsbCBiYWNrXG4iCisib24gdHJ5aW5nIHRvIHJlc29sdmUgdGhlIGFyZ3VtZW50IGFzIGEgcGF0aCwgYnV0IGZhaWxlZCB0aGVyZSB0b28hXG4iCisiXG4iCisiSWYgeW91IG1lYW50IHRvIGNoZWNrIG91dCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggb24sIGUuZy4gJ29yaWdpbicsXG4iCisieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5hbWU+XG4iCisiXG4iCisiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKyJvbmUgcmVtb3RlLCBlLmcuIHRoZSAnb3JpZ2luJyByZW1vdGUsIGNvbnNpZGVyIHNldHRpbmdcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iCittc2dzdHIgIiIKKyInJXMnIGNvcnJpc3BvbmRlIGEgcGnDuSBkaSB1biBicmFuY2ggcmVtb3RvLlxuIgorIkFiYmlhbW8gdHJvdmF0byAlZCByZW1vdGkgY29uIHVuIHJpZmVyaW1lbnRvIGNvcnJpc3BvbmRlbnRlLCBwZXIgY3VpXG4iCisiYWJiaWFtbyByaXBpZWdhdG8gdGVudGFuZG8gZGkgcmlzb2x2ZXJlIGwnYXJnb21lbnRvIGNvbWUgcGVyY29yc28sIG1hXG4iCisibm9uIHNpYW1vIHJpdXNjaXRpIG5lbW1lbm8gYSBwb3J0YXJlIGEgdGVybWluZSB0YWxlIG9wZXJhemlvbmUhXG4iCisiXG4iCisiU2UgaW50ZW5kZXZpIGVzZWd1aXJlIGlsIGNoZWNrb3V0IGRpIHVuIGJyYW5jaCByZW1vdG8sIGFkIGVzLiAnb3JpZ2luJyxcbiIKKyJwdW9pIGZhcmxvIHVzYW5kbyBsYSB2ZXJzaW9uZSBjb21wbGV0YW1lbnRlIHF1YWxpZmljYXRhIGRlbCBub21lXG4iCisiY29uIGwnb3B6aW9uZSAtLXRyYWNrOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5vbWU+XG4iCisiXG4iCisiU2UgcHJlZmVyaXNjaSBjaGUgaSBjaGVja291dCBkaSB1biA8bm9tZT4gYW1iaWd1byBzaWFubyBzZW1wcmUgcmlzb2x0aVxuIgorInJpc3BldHRvIGEgdW4gcGFydGljb2xhcmUgcmVtb3RvLCBhZCBlcy4gJ29yaWdpbicsIHBvdHJlc3RpIHZvbGVyXG4iCisiaW1wb3N0YXJlIGNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIG5lbCB0dW8gZmlsZSBkaSBjb25maWd1cmF6aW9uZS4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NyBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTY5CisjOiBidWlsdGluL3JlbW90ZS5jOjE3MSBidWlsdGluL3dvcmt0cmVlLmM6NDk5IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDEKK21zZ2lkICJicmFuY2giCittc2dzdHIgImJyYW5jaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTUKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JlYSB1biBudW92byBicmFuY2ggZWQgZXNlZ3VpbmUgaWwgY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYS9yZWltcG9zdGEgdW4gYnJhbmNoIGVkIGVzZWd1aW5lIGlsIGNoZWNrb3V0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxOAorbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgImNyZWEgaWwgcmVnaXN0cm8gZGVpIHJpZmVyaW1lbnRpIHBlciBpbCBudW92byBicmFuY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIwCittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICJwcmV2ZWRpICdnaXQgY2hlY2tvdXQgPGJyYW5jaCBpbmVzaXN0ZW50ZT4nIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMQorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICJ1c2EgbW9kYWxpdMOgIG92ZXJsYXkgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY2Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhIHVuIG51b3ZvIGJyYW5jaCBlIHBhc3NhIGEgcXVlc3QndWx0aW1vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc2OAorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgc3dpdGNoIHRvIGEgYnJhbmNoIgorbXNnc3RyICJjcmVhL3JlaW1wb3N0YSB1biBicmFuY2ggZSBwYXNzYSBhIHF1ZXN0J3VsdGltbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgInByZXZlZGkgJ2dpdCBzd2l0Y2ggPGJyYW5jaCBpbmVzaXN0ZW50ZT4nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3MgorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAic2NhcnRhIGxlIG1vZGlmaWNoZSBsb2NhbGkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA0Cittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAiYWxiZXJvIGRhIGN1aSBlc2VndWlyZSBpbCBjaGVja291dCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDYKK21zZ2lkICJyZXN0b3JlIHRoZSBpbmRleCIKK21zZ3N0ciAicmlwcmlzdGluYSBsJ2luZGljZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDgKK21zZ2lkICJyZXN0b3JlIHRoZSB3b3JraW5nIHRyZWUgKGRlZmF1bHQpIgorbXNnc3RyICJyaXByaXN0aW5hIGwnYWxiZXJvIGRpIGxhdm9ybyAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTAKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiaWdub3JhIHZvY2kgbm9uIHNvdHRvcG9zdGUgYSBtZXJnZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTEKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIgorbXNnc3RyICJ1c2EgbW9kYWxpdMOgIG92ZXJsYXkiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dICIKKyI8cGVyY29yc2k+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiRWxpbWluYXppb25lIGRpICVzIGluIGNvcnNvXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiRWxpbWluZXJlaSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJTYWx0byBpbCByZXBvc2l0b3J5ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiU2FsdGVyZWkgaWwgcmVwb3NpdG9yeSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZWxpbWluYXppb25lIGRpICVzIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsJ2xzdGF0IGRpICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisiR3VpZGEgYWwgcHJvbXB0OlxuIgorIjEgICAgICAgICAgLSBzZWxlemlvbmEgdW4gZWxlbWVudG8gbnVtZXJhdG9cbiIKKyJwaXBwbyAgICAgIC0gc2VsZXppb25hIHVuIGVsZW1lbnRvIGJhc2FuZG90aSBzdSB1biBwcmVmaXNzbyB1bml2b2NvXG4iCisiICAgICAgICAgICAtICh2dW90bykgbm9uIHNlbGV6aW9uYXJlIG5pZW50ZVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisiR3VpZGEgYWwgcHJvbXB0OlxuIgorIjEgICAgICAgICAgLSBzZWxlemlvbmEgdW4gc2luZ29sbyBlbGVtZW50b1xuIgorIjMtNSAgICAgICAgLSBzZWxlemlvbmEgdW4gaW50ZXJ2YWxsbyBkaSBlbGVtZW50aVxuIgorIjItMyw2LTkgICAgLSBzZWxlemlvbmEgaW50ZXJ2YWxsaSBtdWx0aXBsaVxuIgorInBpcHBvICAgICAgLSBzZWxlemlvbmEgdW4gZWxlbWVudG8gYmFzYW5kb3RpIHN1IHVuIHByZWZpc3NvIHVuaXZvY29cbiIKKyItLi4uICAgICAgIC0gZGVzZWxlemlvbmEgZWxlbWVudGkgc3BlY2lmaWNpXG4iCisiKiAgICAgICAgICAtIHNlbGV6aW9uYSB0dXR0aSBnbGkgZWxlbWVudGlcbiIKKyIgICAgICAgICAgIC0gKHZ1b3RvKSB0ZXJtaW5hIGlsIHByb2Nlc3NvIGRpIHNlbGV6aW9uZVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTIxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTcwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3NQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/XG4iCittc2dzdHIgIkVoICglcyk/XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICJJbW1ldHRpIGkgcGF0dGVybiBkYSBpZ25vcmFyZT4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiQVRURU5aSU9ORTogSW1wb3NzaWJpbGUgdHJvdmFyZSBlbGVtZW50aSBjb3JyaXNwb25kZW50aSBhICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiU2VsZXppb25hIGdsaSBlbGVtZW50aSBkYSBlbGltaW5hcmUiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiRWxpbWluYXJlICVzIFt5L05dPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBpbml6aWEgbGEgcHVsaXppYVxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBlc2NsdWRpIGRlZ2xpIGVsZW1lbnRpIGRhbGwnZWxpbWluYXppb25lXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGV6aW9uYSBnbGkgZWxlbWVudGkgZGEgZWxpbWluYXJlIHNwZWNpZmljYW5kb2xpXG4iCisiICAgICAgICAgICAgICAgICAgICAgIGNvbiBkZWkgbnVtZXJpXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZlcm1hIG9nbmkgZWxpbWluYXppb25lIChjb21lIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gdGVybWluYSBsYSBwdWxpemlhXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHZpc3VhbGl6emEgcXVlc3RhIHNjaGVybWF0YVxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBndWlkYSBhbCBwcm9tcHQgZGkgc2VsZXppb25lIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiRWxpbWluZXJlaSBpbCBzZWd1ZW50ZSBlbGVtZW50bzoiCittc2dzdHJbMV0gIkVsaW1pbmVyZWkgaSBzZWd1ZW50aSBlbGVtZW50aToiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiTm9uIGNpIHNvbm8gcGnDuSBmaWxlIGRhIHJpcHVsaXJlLCBlc2NvLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJub24gc3RhbXBhcmUgaSBub21pIGRlaSBmaWxlIGVsaW1pbmF0aSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICJmb3J6YSBsJ29wZXJhemlvbmUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAicHVsaXppYSBpbnRlcmF0dGl2YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAicmltdW92aSBpbnRlcmUgZGlyZWN0b3J5IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDggYnVpbHRpbi9kZXNjcmliZS5jOjU1MAorIzogYnVpbHRpbi9ncmVwLmM6OTAxIGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjQgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgInBhdHRlcm4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTYKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiYWdnaXVuZ2kgPHBhdHRlcm4+IGFsbGUgcmVnb2xlIHVzYXRlIHBlciBpZ25vcmFyZSBpIGZpbGUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICJlbGltaW5hIGFuY2hlIGkgZmlsZSBpZ25vcmF0aSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgImVsaW1pbmEgc29sbyBpIGZpbGUgaWdub3JhdGkiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IGUgLVggbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRpIGluc2llbWUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugw6ggaW1wb3N0YXRvIGEgdHJ1ZSBlIG7DqSAtaSwgbsOpIC1uLCBuw6kgLWYgc29ubyBzdGF0aSAiCisic3BlY2lmaWNhdGk7IG1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgbGEgcHVsaXppYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIMOoIHRydWUgcGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSBlIG7DqSAtaSwgbsOpIC1uLCBuw6kgLWYgIgorInNvbm8gc3RhdGkgc3BlY2lmaWNhdGk7IG1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgbGEgcHVsaXppYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ1Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbPG9wemlvbmk+XSBbLS1dIDxyZXBvc2l0b3J5PiBbPGRpcmVjdG9yeT5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAibm9uIGNyZWFyZSB1biBjaGVja291dCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0IGJ1aWx0aW4vY2xvbmUuYzo5NiBidWlsdGluL2luaXQtZGIuYzo0ODkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgImNyZWEgdW4gcmVwb3NpdG9yeSBzcG9nbGlvIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiY3JlYSB1biByZXBvc2l0b3J5IG1pcnJvciAoaW1wbGljYSBjaGUgc2lhIHNwb2dsaW8pIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwCittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgInBlciBjbG9uYXJlIGRhIHVuIHJlcG9zaXRvcnkgbG9jYWxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIm5vbiB1c2FyZSBpIGNvbGxlZ2FtZW50aSByZWFsaSBsb2NhbGksIGNvcGlhIHNlbXByZSBpIGZpbGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiaW1wb3N0YSBpbCByZXBvc2l0b3J5IGNvbWUgY29uZGl2aXNvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAicGF0aHNwZWMiCittc2dzdHIgInNwZWNpZmljYXRvcmUgcGVyY29yc28iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJpbml6aWFsaXp6YSBzb3R0b21vZHVsaSBkdXJhbnRlIGxhIGNsb25hemlvbmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm51bWVybyBkaSBzb3R0b21vZHVsaSBjbG9uYXRpIGluIHBhcmFsbGVsbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgImRpcmVjdG9yeSBtb2RlbGxpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgImRpcmVjdG9yeSBkYSBjdWkgc2FyYW5ubyByZWN1cGVyYXRpIGkgbW9kZWxsaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNCBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzkyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NQorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJyZXBvc2l0b3J5IGRpIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk0CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NworbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgInVzYSAtLXJlZmVyZW5jZSBzb2xvIGR1cmFudGUgbGEgY2xvbmF6aW9uZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOSBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ2CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTQgYnVpbHRpbi9yZXBhY2suYzozMjcKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub21lIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIwCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICJ1c2EgPG5vbWU+IGFuemljaMOpICdvcmlnaW4nIHBlciB0cmFjY2lhcmUgbCd1cHN0cmVhbSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgImVzZWd1aSBpbCBjaGVja291dCBkaSA8YnJhbmNoPiBhbnppY2jDqSBkZWxsJ0hFQUQgZGVsIHJlbW90byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNAorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgInBlcmNvcnNvIGFsIGNvbWFuZG8gcmVtb3RvIGdpdC11cGxvYWQtcGFjayIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjg0MAorIzogYnVpbHRpbi9wdWxsLmM6MjI3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgInByb2ZvbmRpdMOgIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI2Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJjcmVhIHVuIGNsb25lIHNoYWxsb3cgY29uIHF1ZXN0YSBwcm9mb25kaXTDoCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNyBidWlsdGluL2ZldGNoLmM6MTcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MworbXNnaWQgInRpbWUiCittc2dzdHIgInRlbXBvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgImNyZWEgdW4gY2xvbmUgc2hhbGxvdyBhIHBhcnRpcmUgZGFsbCdpc3RhbnRlIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5IGJ1aWx0aW4vZmV0Y2guYzoxNzIgYnVpbHRpbi9mZXRjaC5jOjE5NQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ1Cittc2dpZCAicmV2aXNpb24iCittc2dzdHIgInJldmlzaW9uZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAiIgorImF1bWVudGEgbGEgcHJvZm9uZGl0w6AgZGVsbGEgY3Jvbm9sb2dpYSBkZWwgY2xvbmUgc2hhbGxvdyBmaW5vIGFsbGEgcmV2aXNpb25lICIKKyJzcGVjaWZpY2F0YSBlc2NsdXNhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMyCittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJjbG9uYSBzb2xvIHVuIGJyYW5jaCwgSEVBRCBvIHF1ZWxsbyBzcGVjaWZpY2F0byBjb24gLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzQKK21zZ2lkICJkb24ndCBjbG9uZSBhbnkgdGFncywgYW5kIG1ha2UgbGF0ZXIgZmV0Y2hlcyBub3QgdG8gZm9sbG93IHRoZW0iCittc2dzdHIgIm5vbiBjbG9uYXJlIGFsY3VuIHRhZyBlIGZhaSBzw6wgY2hlIGkgZmV0Y2ggc3VjY2Vzc2l2aSBub24gbGkgc2VndWFubyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgInR1dHRpIGkgc290dG9tb2R1bGkgY2xvbmF0aSBzYXJhbm5vIHNoYWxsb3ciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzcgYnVpbHRpbi9pbml0LWRiLmM6NDk1Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICJkaXJlY3RvcnkgR2l0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NgorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgInNlcGFyYSBsYSBkaXJlY3RvcnkgR2l0IGRhbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiY2hpYXZlPXZhbG9yZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAiaW1wb3N0YSBsYSBjb25maWd1cmF6aW9uZSBuZWwgbnVvdm8gcmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAic3BlY2lmaWNhIGRlbCBzZXJ2ZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgIm9wemlvbmUgZGEgdHJhc21ldHRlcmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDMgYnVpbHRpbi9mZXRjaC5jOjE5MSBidWlsdGluL3B1bGwuYzoyNDAKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NAorbXNnaWQgInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJ1c2Egc29sbyBpbmRpcml6emkgSVB2NCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjI0MworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgInVzYSBzb2xvIGluZGlyaXp6aSBJUHY2IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ5Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgdXNlIHRoZWlyIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJ0dXR0aSBpIHNvdHRvbW9kdWxpIGNsb25hdGkgdXNlcmFubm8gaWwgbG9ybyByaXNwZXR0aXZvIGJyYW5jaCByZW1vdG8gIgorInRyYWNjaWF0byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgIiIKKyJpbml6aWFsaXp6YSBpbCBmaWxlIHNwYXJzZS1jaGVja291dCBwZXIgaW5jbHVkZXJlIHNvbG8gaSBmaWxlIG5lbCBwZXJjb3JzbyIKKyIgcmFkaWNlIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjg3Cittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgaW5kb3ZpbmFyZSBhbGN1biBub21lIGRpcmVjdG9yeS5cbiIKKyJTcGVjaWZpY2EgdW5hIGRpcmVjdG9yeSB0cmFtaXRlIGxhIHJpZ2EgZGkgY29tYW5kbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiaW5mb3JtYXppb25lOiBJbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIHVuIGFsdGVybmF0byBhICclcyc6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGVzaXN0ZSBlIG5vbiDDqCB1bmEgZGlyZWN0b3J5IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGFydCBpdGVyYXRvciBvdmVyICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGF2dmlhcmUgbCdpdGVyYXRvcmUgc3UgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiY3JlYXppb25lIGRlbCBjb2xsZWdhbWVudG8gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICJjb3BpYSBkZWwgZmlsZSBpbiAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gaXRlcmF0ZSBvdmVyICclcyciCittc2dzdHIgIml0ZXJhemlvbmUgc3UgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiZmF0dG8uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MDgKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisiQ2xvbmUgY29tcGxldGF0byBjb24gc3VjY2Vzc28sIG1hIGlsIGNoZWNrb3V0IG5vbiDDqCByaXVzY2l0by5cbiIKKyJQdW9pIGVzYW1pbmFyZSBnbGkgZWxlbWVudGkgZGkgY3VpIMOoIHN0YXRvIGVzZWd1aXRvIGlsIGNoZWNrb3V0XG4iCisiY29uICdnaXQgc3RhdHVzJyBlIHJpcHJvdmFyZSBhZCBlc2VndWlyZSBpbCBjaGVja291dCBjb25cbiIKKyInZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBicmFuY2ggcmVtb3RvICVzIGRhIGNsb25hcmUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NTIKK21zZ2lkICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgImluaXppYWxpenphemlvbmUgZGVsIGZpbGUgc3BhcnNlLWNoZWNrb3V0IG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorImwnSEVBRCByZW1vdG8gZmEgcmlmZXJpbWVudG8gYSB1biByaWZlcmltZW50byBpbmVzaXN0ZW50ZSwgaW1wb3NzaWJpbGUgIgorImVzZWd1aXJlIGlsIGNoZWNrb3V0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODA2Cittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODU2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGkgcGFyYW1ldHJpIG5lbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTE5Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgcmVwYWNrIHBlciBwdWxpcmUgbCdhcmVhIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyMQorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCd1bmxpbmsgZGVsIGZpbGUgYWx0ZXJuYXRlcyB0ZW1wb3JhbmVvIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU5IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk0OAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIlRyb3BwaSBhcmdvbWVudGkuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTYzCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJEZXZpIHNwZWNpZmljYXJlIHVuIHJlcG9zaXRvcnkgZGEgY2xvbmFyZS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJsZSBvcHppb25pIC0tYmFyZSBlIC0tb3JpZ2luICVzIG5vbiBzb25vIGNvbXBhdGliaWxpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3OQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJsZSBvcHppb25pIC0tYmFyZSBlIC0tc2VwYXJhdGUtZ2l0LWRpciBub24gc29ubyBjb21wYXRpYmlsaS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJpbCByZXBvc2l0b3J5ICclcycgbm9uIGVzaXN0ZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5OCBidWlsdGluL2ZldGNoLmM6MTc4NworIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgImxhIHByb2ZvbmRpdMOgICVzIG5vbiDDqCB1biBudW1lcm8gcG9zaXRpdm8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKyJpbCBwZXJjb3JzbyBkaSBkZXN0aW5hemlvbmUgJyVzJyBlc2lzdGUgZ2nDoCBlIG5vbiDDqCB1bmEgZGlyZWN0b3J5IHZ1b3RhLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJsJ2FsYmVybyBkaSBsYXZvcm8gJyVzJyBlc2lzdGUgZ2nDoC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDMzIGJ1aWx0aW4vY2xvbmUuYzoxMDU0IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6MzAyIGJ1aWx0aW4vd29ya3RyZWUuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsZSBwcmltZSBkaXJlY3RvcnkgZGkgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3RvcnkgZGVsbCdhbGJlcm8gZGkgbGF2b3JvICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJDbG9uZSBuZWwgcmVwb3NpdG9yeSBzcG9nbGlvICclcycgaW4gY29yc28uLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmUgaW4gJyVzJyBpbiBjb3Jzby4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA4NAorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiaWwgY2xvbmUgLS1yZWN1cnNpdmUgbm9uIMOoIGNvbXBhdGliaWxlIG7DqSBjb24gLS1yZWZlcmVuY2UgbsOpIGNvbiAtLXJlZmVyZW5jZS0iCisiaWYtYWJsZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNDgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiTCdvcHppb25lIC0tZGVwdGggw6ggaWdub3JhdGEgbmVpIGNsb25pIGxvY2FsaTsgdXNhIGZpbGU6Ly8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MAorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIkwnb3B6aW9uZSAtLXNoYWxsb3ctc2luY2Ugw6ggaWdub3JhdGEgbmVpIGNsb25pIGxvY2FsaTsgdXNhIGZpbGU6Ly8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MgorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiTCdvcHppb25lIC0tc2hhbGxvdy1leGNsdWRlIMOoIGlnbm9yYXRhIG5laSBjbG9uaSBsb2NhbGk7IHVzYSBmaWxlOi8vLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIkwnb3B6aW9uZSAtLWZpbHRlciDDqCBpZ25vcmF0YSBuZWkgY2xvbmkgbG9jYWxpOyB1c2EgZmlsZTovLy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU3Cittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAiaWwgcmVwb3NpdG9yeSBzb3JnZW50ZSDDqCBzaGFsbG93LCBpZ25vcm8gbCdvcHppb25lIC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYyCittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICJsJ29wemlvbmUgLS1sb2NhbCDDqCBpZ25vcmF0YSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMzcgYnVpbHRpbi9jbG9uZS5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIklsIGJyYW5jaCByZW1vdG8gJXMgbm9uIMOoIHN0YXRvIHRyb3ZhdG8gbmVsbCd1cHN0cmVhbSAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNDgKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJTZW1icmEgY2hlIHR1IGFiYmlhIGNsb25hdG8gdW4gcmVwb3NpdG9yeSB2dW90by4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJyZWN1cGVyYSBsZSB2YXJpYWJpbGkgZGkgY29uZmlndXJhemlvbmUgZGEgcXVpIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI4IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJsYXlvdXQgZGEgdXNhcmUiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICJMYXJnaGV6emEgbWFzc2ltYSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIlNwYXppIHZ1b3RpIHBlciBpbCBtYXJnaW5lIHNpbmlzdHJvIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIlNwYXppIHZ1b3RpIHBlciBpbCBtYXJnaW5lIGRlc3RybyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJTcGF6aSB2dW90aSBmcmEgbGUgY29sb25uZSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIGRldmUgZXNzZXJlIGlsIHByaW1vIGFyZ29tZW50byIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE4Cittc2dpZCAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dIFsoLUYgIgorIjxmaWxlPikuLi5dIDx0cmVlPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxnZW5pdG9yZT4pLi4uXSBbLVNbPElEIGNoaWF2ZT5dXSBbKC1tIDxtZXNzYWdnaW8+KS4uLl0gIgorIlsoLUYgPGZpbGU+KS4uLl0gPGFsYmVybz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcGFyZW50ICVzIGlnbm9yZWQiCittc2dzdHIgImdlbml0b3JlIGR1cGxpY2F0byAlcyBpZ25vcmF0byIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjU2IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzYgYnVpbHRpbi9sb2cuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiVzIG5vbiDDqCB1biBub21lIG9nZ2V0dG8gdmFsaWRvIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IGFwZXJ0dXJhIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IGxldHR1cmEgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBjbG9zZSAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IGNoaXVzdXJhIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICJnZW5pdG9yZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMgorbXNnaWQgImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIklEIGRpIHVuIG9nZ2V0dG8gY29tbWl0IGdlbml0b3JlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NiBidWlsdGluL21lcmdlLmM6MjcwCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NjkKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAibWVzc2FnZ2lvIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE1IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NgorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJtZXNzYWdnaW8gZGkgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE4Cittc2dpZCAicmVhZCBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsZWdnaSBpbCBtZXNzYWdnaW8gZGkgbG9nIGRlbCBjb21taXQgZGEgdW4gZmlsZSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMSBidWlsdGluL2NvbW1pdC5jOjE1MDggYnVpbHRpbi9tZXJnZS5jOjI4NworIzogYnVpbHRpbi9wdWxsLmM6MTk1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE4Cittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICJmaXJtYSBpbCBjb21taXQgY29uIEdQRyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzMworbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICLDqCBuZWNlc3NhcmlvIGZvcm5pcmUgZXNhdHRhbWVudGUgdW4gYWxiZXJvIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBsZXR0dXJhIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MQorbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs8b3B6aW9uaT5dIFstLV0gPHNwZWNpZmljYXRvcmUgcGVyY29yc28+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzxvcHppb25pPl0gWy0tXSA8c3BlY2lmaWNhdG9yZSBwZXJjb3Jzbz4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTEKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJIYWkgcmljaGllc3RvIGRpIG1vZGlmaWNhcmUgaWwgY29tbWl0IHBpw7kgcmVjZW50ZSwgbWEgZXNlZ3VpcmUgdGFsZVxuIgorIm9wZXJhemlvbmUgbG8gcmVuZGVyZWJiZSB2dW90by4gUHVvaSByaXBldGVyZSBsJ2VzZWN1emlvbmUgZGVsIGNvbWFuZG9cbiIKKyJjb24gLS1hbGxvdy1lbXB0eSBvIHB1b2kgcmltdW92ZXJlIGNvbXBsZXRhbWVudGUgaWwgY29tbWl0IGNvblxuIgorIlwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTYKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAiIgorIklsIGNoZXJyeS1waWNrIHByZWNlZGVudGUgb3JhIMOoIHZ1b3RvLCBwcm9iYWJpbG1lbnRlIGEgY2F1c2EgZGkgYWxjdW5pXG4iCisiY29uZmxpdHRpIHJpc29sdGkuXG4iCisiU2UgdnVvaSBjb211bnF1ZSBlc2VndWlybmUgaWwgY29tbWl0LCB1c2E6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJBbHRyaW1lbnRpLCB1c2EgJ2dpdCBjaGVycnktcGljayAtLXNraXAnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYKK21zZ2lkICIiCisiYW5kIHRoZW4gdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorInRvIHJlc3VtZSBjaGVycnktcGlja2luZyB0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCittc2dzdHIgIiIKKyJlIHF1aW5kaSB1c2E6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisicGVyIHJpcHJlbmRlcmUgbCdlc2VjdXppb25lIGlsIGNoZXJyeS1waWNrIHBlciBpIGNvbW1pdCByaW1hbmVudGkuXG4iCisiU2UgdnVvaSBzYWx0YXJlIHF1ZXN0byBjb21taXQsIHVzYTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiZGVjb21wcmVzc2lvbmUgZGVsbCdvZ2dldHRvIEhFQUQgZGVsbCdhbGJlcm8gbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAibCdvcHppb25lIC0tcGF0aHNwZWMtZnJvbS1maWxlIG5vbiBoYSBzZW5zbyBjb24gLWEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICIiCisiTm9uIHNwZWNpZmljYXJlIHVuIHBlcmNvcnNvIGNvbiBsZSBvcHppb25pIC0taW5jbHVkZS8tLW9ubHkgbm9uIGhhIHNlbnNvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGwnaW5kaWNlIHRlbXBvcmFuZW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzgyCittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAiYWdnaXVudGEgaW50ZXJhdHRpdmEgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGwnaW5kaWNlIHRlbXBvcmFuZW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzk4Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdhbGJlcm8gY2FjaGUgcHJpbmNpcGFsZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjMgYnVpbHRpbi9jb21taXQuYzo0NDYgYnVpbHRpbi9jb21taXQuYzo0OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgbmV3X2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gY29tbWl0IHBhcnppYWxlIGR1cmFudGUgdW4gbWVyZ2UuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NworbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gY29tbWl0IHBhcnppYWxlIGR1cmFudGUgdW4gY2hlcnJ5LXBpY2suIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4NQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ2luZGljZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgaW5kaWNlIHRlbXBvcmFuZW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgImRhbCBjb21taXQgJyVzJyBtYW5jYSBsJ2ludGVzdGF6aW9uZSBhdXRvcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiCittc2dzdHIgImlsIGNvbW1pdCAnJXMnIGhhIHVuYSByaWdhIGF1dG9yZSBtYWxmb3JtYXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyMworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFtZXRybyAtLWF1dGhvciBtYWxmb3JtYXRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY3NgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgc2VsZXppb25hcmUgdW4gY2FyYXR0ZXJlIGNvbW1lbnRvIG5vbiB1c2F0b1xuIgorIm5lbCBtZXNzYWdnaW8gZGkgY29tbWl0IGNvcnJlbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxNCBidWlsdGluL2NvbW1pdC5jOjc0NyBidWlsdGluL2NvbW1pdC5jOjEwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgaWwgY29tbWl0ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyNiBidWlsdGluL3Nob3J0bG9nLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsZXR0dXJhIGRlbCBtZXNzYWdnaW8gZGkgbG9nIGRhbGxvIHN0YW5kYXJkIGlucHV0KVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyOAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGxvZyBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlIGRpIGxvZyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc2MyBidWlsdGluL2NvbW1pdC5jOjc3OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG1vZGVsbG8gZGkgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZW1icmEgY2hlIHR1IHN0aWEgZXNlZ3VlbmRvIGlsIGNvbW1pdCBkaSB1biBtZXJnZS5cbiIKKyJTZSBjacOyIG5vbiDDqCBjb3JyZXR0bywgZWxpbWluYSBpbCBmaWxlXG4iCisiXHQlc1xuIgorImUgcmlwcm92YS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2VtYnJhIGNoZSB0dSBzdGlhIGVzZWd1ZW5kbyBpbCBjb21taXQgZGkgdW4gbWVyZ2UuXG4iCisiU2UgY2nDsiBub24gw6ggY29ycmV0dG8sIGVsaW1pbmEgaWwgZmlsZVxuIgorIlx0JXNcbiIKKyJlIHJpcHJvdmEuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJJbW1ldHRpIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQgcGVyIGxlIG1vZGlmaWNoZS4gTGUgcmlnaGUgY2hlIGluaXppYW5vXG4iCisiY29uICclYycgc2FyYW5ubyBpZ25vcmF0ZSBlIHVuIG1lc3NhZ2dpbyB2dW90byBpbnRlcnJvbXBlcsOgIGlsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJJbW1ldHRpIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQgcGVyIGxlIG1vZGlmaWNoZS4gTGUgcmlnaGUgY2hlIGluaXppYW5vXG4iCisiY29uICclYycgc2FyYW5ubyBtYW50ZW51dGU7IHB1b2kgcmltdW92ZXJsZSBhdXRvbm9tYW1lbnRlIHNlIGxvIGRlc2lkZXJpLlxuIgorIlVuIG1lc3NhZ2dpbyB2dW90byBpbnRlcnJvbXBlcsOgIGlsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0F1dG9yZTogICAgICAgICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVzRGF0YTogICAgICAgICAgICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNFc2VjdXRvcmUgY29tbWl0OiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjUKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ2luZGljZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTIKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgY29zdHJ1emlvbmUgZGVnbGkgYWxiZXJpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDYgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJGb3JuaXNjaSBpbCBtZXNzYWdnaW8gdXNhbmRvIGwnb3B6aW9uZSAtbSBvIC1GLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICIiCisiLS1hdXRob3IgJyVzJyBub24gw6ggbmVsIGZvcm1hdG8gJ05vbWUgPGUtbWFpbD4nIGUgbm9uIGNvcnJpc3BvbmRlIGFkIGFsY3VuICIKKyJhdXRvcmUgZXNpc3RlbnRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAiTW9kbyBub24gdmFsaWRvIGlnbm9yYXRvOiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODIgYnVpbHRpbi9jb21taXQuYzoxMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiTW9kbyBmaWxlIG5vbiB0cmFjY2lhdGkgbm9uIHZhbGlkbzogJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTIyCittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWxvbmcgZSAteiBub24gc29ubyBjb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY2Cittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiTCd1c28gZGkgZW50cmFtYmUgbGUgb3B6aW9uaSAtLXJlc2V0LWF1dGhvciBlIC0tYXV0aG9yIG5vbiBoYSBzZW5zbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIk5vbiBjJ8OoIG51bGxhIGRhIG1vZGlmaWNhcmUuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJTZWkgbmVsIGJlbCBtZXp6byBkaSB1biBtZXJnZSAtIGltcG9zc2liaWxlIGVzZWd1aXJlIGwnYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJTZWkgbmVsIGJlbCBtZXp6byBkaSB1biBjaGVycnktcGljayAtIGltcG9zc2liaWxlIGVzZWd1aXJlIGwnYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODMKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICJMZSBvcHppb25pIC0tc3F1YXNoIGUgLS1maXh1cCBub24gcG9zc29ubyBlc3NlcmUgdXNhdGUgaW5zaWVtZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIlNvbG8gdW5hIGRlbGxlIG9wemlvbmkgLWMvLUMvLUYvLS1maXh1cCBwdcOyIGVzc2VyZSB1c2F0YS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iCittc2dzdHIgIkwnb3B6aW9uZSAtbSBub24gcHXDsiBlc3NlcmUgY29tYmluYXRhIGNvbiAtYy8tQy8tRi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwMworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIkwnb3B6aW9uZSAtLXJlc2V0LWF1dGhvciBwdcOyIGVzc2VyZSB1c2F0YSBzb2xvIGNvbiAtQywgLWMgbyAtLWFtZW5kLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjIwCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisiUHXDsiBlc3NlcmUgdXNhdGEgc29sbyB1bmEgZGVsbGUgb3B6aW9uaSAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0tIgorImludGVyYWN0aXZlLy0tcGF0Y2guIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJpIHBlcmNvcnNpICclcyAuLi4nIG5vbiBoYW5ubyBzZW5zbyBjb24gLWEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NyBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgInZpc3VhbGl6emEgY29uY2lzYW1lbnRlIGxvIHN0YXRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTkgYnVpbHRpbi9jb21taXQuYzoxNTIxCittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgInZpc3VhbGl6emEgbGUgaW5mb3JtYXppb25pIHN1bCBicmFuY2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MQorbXNnaWQgInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iCittc2dzdHIgInZpc3VhbGl6emEgbGUgaW5mb3JtYXppb25pIHN1bGxvIHN0YXNoIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjMgYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgImNhbGNvbGEgdHV0dGkgaSB2YWxvcmkgZG9wby9wcmltYSBkaSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2lvbmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NSBidWlsdGluL2NvbW1pdC5jOjE1MjUgYnVpbHRpbi9wdXNoLmM6NTQ5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjUwCittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgIm91dHB1dCBsZWdnaWJpbGUgZGEgdW5hIG1hY2NoaW5hIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI3Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICJ2aXN1YWxpenphIGxvIHN0YXRvIGluIGZvcm1hIGx1bmdhIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzEgYnVpbHRpbi9jb21taXQuYzoxNTMwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgInRlcm1pbmEgbGUgdm9jaSBjb24gTlVMIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9jb21taXQuYzoxMzc3IGJ1aWx0aW4vY29tbWl0LmM6MTUzMworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTMgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU5IGJ1aWx0aW4vcmViYXNlLmM6MTUyNSBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAibW9kZSIKK21zZ3N0ciAibW9kbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc0IGJ1aWx0aW4vY29tbWl0LmM6MTUzMworbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgZmlsZSBub24gdHJhY2NpYXRpLCBtb2RhbGl0w6AgZmFjb2x0YXRpdmU6IGFsbCwgbm9ybWFsLCBuby4gIgorIihJbXBvc3RhemlvbmUgcHJlZGVmaW5pdGE6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OAorbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgZmlsZSBpZ25vcmF0aSwgbW9kYWxpdMOgIGZhY29sdGF0aXZlOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAiCisiKEltcG9zdGF6aW9uZSBwcmVkZWZpbml0YTogdHJhZGl0aW9uYWwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODAgcGFyc2Utb3B0aW9ucy5oOjE5MgorbXNnaWQgIndoZW4iCittc2dzdHIgInF1YW5kbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiaWdub3JhIG1vZGlmaWNoZSBhaSBzb3R0b21vZHVsaSwgb3B6aW9uZSBmYWNvbHRhdGl2YSBcInF1YW5kb1wiOiBhbGwsIGRpcnR5LCAiCisidW50cmFja2VkLiAoSW1wb3N0YXppb25lIHByZWRlZmluaXRhOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODMKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJlbGVuY2EgaSBmaWxlIG5vbiB0cmFjY2lhdGkgaW4gY29sb25uZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg0Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICJub24gcmlsZXZhcmUgbGUgcmlkZW5vbWluYXppb25pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAiIgorInJpbGV2YSBsZSByaWRlbm9taW5hemlvbmksIGltcG9zdGEgZmFjb2x0YXRpdmFtZW50ZSBsJ2luZGljZSBkaSBzaW1pbGFyaXTDoCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDA2Cittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorIkNvbWJpbmF6aW9uZSBkaSBhcmdvbWVudGkgc3VpIGZpbGUgaWdub3JhdGkgZSBub24gdHJhY2NpYXRpIG5vbiBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODkKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICIiCisib21ldHRpIGRpIHZpc3VhbGl6emFyZSBpbCByaWVwaWxvZ28gZG9wbyB1biBjb21taXQgY29tcGxldGF0byBjb24gc3VjY2Vzc28iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MAorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAidmlzdWFsaXp6YSBpbCBkaWZmIG5lbCBtb2RlbGxvIGRlbCBtZXNzYWdnaW8gZGkgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTIKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIG1lc3NhZ2dpbyBkaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MyBidWlsdGluL21lcmdlLmM6Mjc0IGJ1aWx0aW4vdGFnLmM6NDE0Cittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAibGVnZ2kgaWwgbWVzc2FnZ2lvIGRhIHVuIGZpbGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAiYXV0b3JlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAic292cmFzY3JpdmkgbCdhdXRvcmUgcGVyIGlsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1IGJ1aWx0aW4vZ2MuYzo1MzgKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgInNvdnJhc2NyaXZpIGxhIGRhdGEgcGVyIGlsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OCBidWlsdGluL2NvbW1pdC5jOjE0OTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMCBwYXJzZS1vcHRpb25zLmg6MzI4IHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicml1c2EgaWwgbWVzc2FnZ2lvIGRlbCBjb21taXQgc3BlY2lmaWNhdG8gcGVyIHBvaSBtb2RpZmljYXJsbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4Cittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgInJpdXNhIGlsIG1lc3NhZ2dpbyBkZWwgY29tbWl0IHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisidXNhIGlsIG1lc3NhZ2dpbyBpbiBmb3JtYXRvIGF1dG9zcXVhc2ggcGVyIGNvcnJlZ2dlcmUgaWwgY29tbWl0IHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInVzYSBpbCBtZXNzYWdnaW8gaW4gZm9ybWF0byBhdXRvc3F1YXNoIHBlciBlc2VndWlyZSBsbyBzcXVhc2ggZGVsIGNvbW1pdCAiCisic3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgImlsIGNvbW1pdCBvcmEgaGEgbWUgY29tZSBhdXRvcmUgKG9wemlvbmUgdXNhdGEgY29uIC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIgYnVpbHRpbi9sb2cuYzoxNjM0IGJ1aWx0aW4vbWVyZ2UuYzoyODkKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NCBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAiYWdnaXVuZ2kgU2lnbmVkLW9mZi1ieToiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAidXNhIGlsIGZpbGUgbW9kZWxsbyBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgImZvcnphIGxhIG1vZGlmaWNhIGRlbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNgorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJpbmNsdWRpIGxvIHN0YXRvIG5lbCBtb2RlbGxvIGRlbCBtZXNzYWdnaW8gZGkgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBjb250ZW51dG8gY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTIKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImVzZWd1aSBpbCBjb21taXQgZGkgdHV0dGkgaSBmaWxlIG1vZGlmaWNhdGkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMworbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAiYWdnaXVuZ2kgaSBmaWxlIHNwZWNpZmljYXRpIGFsbCdpbmRpY2UgcGVyIGlsIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE0Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgImFnZ2l1bmdpIGkgZmlsZSBpbiBtb2RhbGl0w6AgaW50ZXJhdHRpdmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImFnZ2l1bmdpIGxlIG1vZGlmaWNoZSBpbiBtb2RhbGl0w6AgaW50ZXJhdHRpdmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIGNvbW1pdCBzb2xvIGRlaSBmaWxlIHNwZWNpZmljYXRpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTcKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiaWdub3JhIGdsaSBob29rIHByZS1jb21taXQgZSBjb21taXQtbXNnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJ2aXN1YWxpenphIGdsaSBlbGVtZW50aSBkaSBjdWkgc2FyZWJiZSBlc2VndWl0byBpbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMQorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAibW9kaWZpY2EgaWwgY29tbWl0IHByZWNlZGVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiaWdub3JhIGwnaG9vayBwb3N0LXJld3JpdGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzOQorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgImFjY2V0dGEgZGkgcmVnaXN0cmFyZSB1bmEgbW9kaWZpY2EgdnVvdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0MQorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgImFjY2V0dGEgZGkgcmVnaXN0cmFyZSB1bmEgbW9kaWZpY2EgY29uIHVuIG1lc3NhZ2dpbyB2dW90byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkZpbGUgTUVSR0VfSEVBRCBjb3Jyb3R0byAoJXMpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIE1FUkdFX01PREUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJJbnRlcnJvbXBvIGlsIGNvbW1pdCBhIGNhdXNhIGRpIHVuIG1lc3NhZ2dpbyBkaSBjb21taXQgdnVvdG8uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIkludGVycm9tcG8gaWwgY29tbWl0OyBub24gaGFpIG1vZGlmaWNhdG8gaWwgbWVzc2FnZ2lvLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2ODYKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIklsIHJlcG9zaXRvcnkgw6ggc3RhdG8gYWdnaW9ybmF0bywgbWEgbm9uIMOoIHN0YXRvXG4iCisicG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgbmV3X2luZGV4LiBWZXJpZmljYSBjaGUgaWxcbiIKKyJkaXNjbyBub24gc2lhIHBpZW5vIGUgY2hlIGxhIHF1b3RhIG5vbiBzaWEgc3RhdGFcbiIKKyJzdXBlcmF0YSwgcXVpbmRpIGVzZWd1aSBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgcGVyXG4iCisicHJvY2VkZXJlIGFsIHJpcHJpc3Rpbm8uIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTcKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxkaXJlY3Rvcnkgb2dnZXR0aT5dIFstLXNoYWxsb3ddIFstLSIKKyJbbm8tXXByb2dyZXNzXSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIyCittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLSIKKyJyZWFjaGFibGV8LS1zdGRpbi1wYWNrc3wtLXN0ZGluLWNvbW1pdHNdIFstLVtuby1dcHJvZ3Jlc3NdIDxzcGxpdCBvcHRpb25zPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8ZGlyZWN0b3J5IG9nZ2V0dGk+XSBbLS1hcHBlbmR8LS1zcGxpdF0gIgorIlstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPG9wemlvbmkgc3BsaXQ+IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAzCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4NyBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAiZGlyZWN0b3J5IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA0CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4OAorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAiTGEgZGlyZWN0b3J5IG9nZ2V0dGkgaW4gY3VpIG1lbW9yaXp6YXJlIGlsIGdyYWZvIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICJzZSBpbCBncmFmbyBkZWkgY29tbWl0IMOoIGRpdmlzbywgdmVyaWZpY2Egc29sbyBsJ3VsdGltbyBmaWxlIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjczIHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZ3JhZm8gZGVpIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgImluaXppYSBsYSB2aXNpdGEgZGEgdHV0dGkgaSByaWZlcmltZW50aSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDgKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgIiIKKyJlc2FtaW5hIGkgcGFjay1pbmRleCBlbGVuY2F0aSBzdWxsbyBzdGFuZGFyZCBpbnB1dCBhbGxhIHJpY2VyY2EgZGkgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgImluaXppYSBsYSB2aXNpdGEgYWkgY29tbWl0IGVsZW5jYXRpIHN1bGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMgorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImluY2x1ZGkgdHV0dGkgaSBjb21taXQgZ2nDoCBwcmVzZW50aSBuZWwgZmlsZSBjb21taXQtZ3JhcGgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE1Cittc2dpZCAiYWxsb3cgd3JpdGluZyBhbiBpbmNyZW1lbnRhbCBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiY29uc2VudGkgbGEgc2NyaXR0dXJhIGRpIHVuIGZpbGUgZ3JhZm8gZGVpIGNvbW1pdCBpbmNyZW1lbnRhbGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE3IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAibnVtZXJvIG1hc3NpbW8gZGkgY29tbWl0IGluIHVuIGdyYWZvIGRlaSBjb21taXQgZGl2aXNvIG5vbiBkaSBiYXNlIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExOQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICJyYXBwb3J0byBtYXNzaW1vIGZyYSBkdWUgbGl2ZWxsaSBkaSB1biBncmFmbyBkZWkgY29tbWl0IGRpdmlzbyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzcKK21zZ2lkICJ1c2UgYXQgbW9zdCBvbmUgb2YgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb3IgLS1zdGRpbi1wYWNrcyIKK21zZ3N0ciAidXNhIGFsIHBpw7kgdW4nb3B6aW9uZSBmcmEgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cyBvIC0tc3RkaW4tcGFja3MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwMyBidWlsdGluL2Vudi0taGVscGVyLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIC0tdHlwZSBhcmd1bWVudCwgJXMiCittc2dzdHIgImFyZ29tZW50byAtLXR5cGUgbm9uIHJpY29ub3NjaXV0bzogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTE1Cittc2dpZCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiCittc2dzdHIgInNvbG8gdW4gdGlwbyBwZXIgdm9sdGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI0Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIlBlcmNvcnNvIGZpbGUgZGkgY29uZmlndXJhemlvbmUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhIGlsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgZ2xvYmFsZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjYKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSBkaSBzaXN0ZW1hIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNworbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSBkZWwgcmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjgKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSBwZXIgYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgInVzYSBpbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIklEIGJsb2IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAibGVnZ2kgbGEgY29uZmlndXJhemlvbmUgZGFsbCdvZ2dldHRvIGJsb2Igc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICJBemlvbmUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm90dGllbmkgdmFsb3JlOiBub21lIFtlc3ByZXNzaW9uZS1yZWdvbGFyZS12YWxvcmVdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMworbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib3R0aWVuaSB0dXR0aSBpIHZhbG9yaTogY2hpYXZlIFtlc3ByZXNzaW9uZS1yZWdvbGFyZS12YWxvcmVdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisib3R0aWVuaSBpIHZhbG9yaSBpbiBiYXNlIGEgdW4nZXNwcmVzc2lvbmUgcmVnb2xhcmU6IGVzcHJlc3Npb25lLXJlZ29sYXJlLSIKKyJub21lIFtlc3ByZXNzaW9uZS1yZWdvbGFyZS12YWxvcmVdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgIm90dGllbmkgaWwgdmFsb3JlIHNwZWNpZmljbyBwZXIgbCdVUkw6IHNlemlvbmVbLnZhcmlhYmlsZV0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisic29zdGl0dWlzY2kgdHV0dGUgbGUgdmFyaWFiaWxpIGNvcnJpc3BvbmRlbnRpOiBub21lLXZhbG9yZSBbZXNwcmVzc2lvbmUtIgorInJlZ29sYXJlLXZhbG9yZV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICJhZ2dpdW5naSB1bmEgbnVvdmEgdmFyaWFiaWxlOiBub21lIHZhbG9yZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJyaW11b3ZpIHVuYSB2YXJpYWJpbGU6IG5vbWUgW2VzcHJlc3Npb25lLXJlZ29sYXJlLXZhbG9yZV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInJpbXVvdmkgdHV0dGUgbGUgY29ycmlzcG9uZGVuemU6IG5vbWUgW2VzcHJlc3Npb25lLXJlZ29sYXJlLXZhbG9yZV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJyaW5vbWluYSBzZXppb25lOiB2ZWNjaGlvLW5vbWUgbnVvdm8tbm9tZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICJyaW11b3ZpIHVuYSBzZXppb25lOiBub21lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJlbGVuY2EgdHV0dGkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgImFwcmkgdW4gZWRpdG9yIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJ0cm92YSBpbCBjb2xvcmUgY29uZmlndXJhdG86IHNsb3QgW3ZhbG9yZS1wcmVkZWZpbml0b10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ1Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgInRyb3ZhIGwnaW1wb3N0YXppb25lIGNvbG9yZTogc2xvdCBbc3RhbmRhcmQtb3V0cHV0LcOoLXVuYS10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozOAorbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiYWwgdmFsb3JlIMOoIGFzc2VnbmF0byBxdWVzdG8gdGlwbyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDgKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgImlsIHZhbG9yZSDDqCBcInRydWVcIiBvIFwiZmFsc2VcIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiaWwgdmFsb3JlIMOoIHVuIG51bWVybyBkZWNpbWFsZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgImlsIHZhbG9yZSDDqCAtLWJvb2wgbyAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJpbCB2YWxvcmUgw6ggdW4gcGVyY29yc28gKG5vbWUgZmlsZSBvIGRpcmVjdG9yeSkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUyCittc2dpZCAidmFsdWUgaXMgYW4gZXhwaXJ5IGRhdGUiCittc2dzdHIgImlsIHZhbG9yZSDDqCB1bmEgZGF0YSBkaSBzY2FkZW56YSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKIG1zZ2lkICJPdGhlciIKIG1zZ3N0ciAiQWx0cm8iCiAKLSM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKLW1zZ2lkICJlcnJvciIKLW1zZ3N0ciAiZXJyb3JlIgorIzogYnVpbHRpbi9jb25maWcuYzoxNTQKK21zZ2lkICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgInRlcm1pbmEgaSB2YWxvcmkgY29uIHVuIGJ5dGUgTlVMIgogCi0jOiBsaWIvZXJyb3IudGNsOjM2Ci1tc2dpZCAid2FybmluZyIKLW1zZ3N0ciAiYXR0ZW56aW9uZSIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICJ2aXN1YWxpenphIHNvbG8gaSBub21pIGRlbGxlIHZhcmlhYmlsaSIKIAotIzogbGliL2Vycm9yLnRjbDo5NAotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NgorbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKIG1zZ3N0ciAiIgotIkJpc29nbmEgY29ycmVnZ2VyZSBnbGkgZXJyb3JpIHN1ZGRldHRpIHByaW1hIGRpIGNyZWFyZSB1bmEgbnVvdmEgcmV2aXNpb25lLiIKKyJyaXNwZXR0YSBsZSBkaXJlY3RvcnkgZGkgaW5jbHVzaW9uZSBkdXJhbnRlIGlsIHJlY3VwZXJvIGRlbGxlIHZhcmlhYmlsaSIKIAotIzogbGliL2luZGV4LnRjbDo2Ci1tc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgotbXNnc3RyICJJbXBvc3NpYmlsZSBzYmxvY2NhcmUgbCdhY2Nlc3NvIGFsbCdpbmRpY2UiCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NworbXNnaWQgInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGwnb3JpZ2luZSBkZWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsICIKKyJyaWdhIGRpIGNvbWFuZG8pIgogCi0jOiBsaWIvaW5kZXgudGNsOjE1Ci1tc2dpZCAiSW5kZXggRXJyb3IiCi1tc2dzdHIgIkVycm9yZSBuZWxsJ2luZGljZSIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICJ2YWxvcmUiCiAKLSM6IGxpYi9pbmRleC50Y2w6MTcKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICJjb24gLS1nZXQsIHVzYSBpbCB2YWxvcmUgcHJlZGVmaW5pdG8gc2UgbGEgdm9jZSDDqCBtYW5jYW50ZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIgorbXNnc3RyICJudW1lcm8gZGkgYXJnb21lbnRpIGVycmF0bywgZG92cmViYmVybyBlc3NlcmUgJWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSBmcm9tICVkIHRvICVkIgorbXNnc3RyICJudW1lcm8gZGkgYXJnb21lbnRpIGVycmF0bywgZG92cmViYmVybyBlc3NlcmUgZGEgJWQgYSAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgInBhdHRlcm4gY2hpYXZlIG5vbiB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAiZm9ybWF0dGF6aW9uZSBkZWwgdmFsb3JlIGNvbmZpZ3VyYXppb25lIHByZWRlZmluaXRvIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBjb2xvciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIGNvbG9yZSAnJXMnIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGlsIHZhbG9yZSBjb2xvcmUgcHJlZGVmaW5pdG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk2IGJ1aWx0aW4vY29uZmlnLmM6NzQyCittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAibm9uIHNpIMOoIGluIHVuYSBkaXJlY3RvcnkgZ2l0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5OQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibGEgc2NyaXR0dXJhIHN1IHN0YW5kYXJkIGlucHV0IG5vbiDDqCBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUwMgorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImxhIHNjcml0dHVyYSBkaSBibG9iIGRpIGNvbmZpZ3VyYXppb25lIG5vbiDDqCBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlIGwnaW5kaWNlLiBPcmEgc2Fyw6AgYXZ2aWF0YSB1bmEgbnVvdmEgYW5hbGlzaSBjaGUgIgotImFnZ2lvcm5lcsOgIGdpdC1ndWkuIgorIiMgUXVlc3RvIMOoIGlsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgdXRlbnRlIGRpIEdpdC5cbiIKKyJbdXNlcl1cbiIKKyIjIEFkYXR0YSBlIGRlY29tbWVudGEgbGUgc2VndWVudGkgcmlnaGU6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgogCi0jOiBsaWIvaW5kZXgudGNsOjI4Ci1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgIkNvbnRpbnVhIgorIzogYnVpbHRpbi9jb25maWcuYzo2MTEKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgInNvbG8gdW4gZmlsZSBkaSBjb25maWd1cmF6aW9uZSBwZXIgdm9sdGEiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzEKLW1zZ2lkICJVbmxvY2sgSW5kZXgiCi1tc2dzdHIgIlNibG9jY2EgbCdhY2Nlc3NvIGFsbCdpbmRpY2UiCisjOiBidWlsdGluL2NvbmZpZy5jOjYxNgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCBwdcOyIGVzc2VyZSB1c2F0byBzb2xvIGluIHVuIHJlcG9zaXRvcnkgR2l0IgogCi0jOiBsaWIvaW5kZXgudGNsOjI4OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKLW1zZ3N0ciAiJXMgbm9uIGZhcsOgIHBhcnRlIGRlbGxhIHByb3NzaW1hIHJldmlzaW9uZSIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjE5Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiBwdcOyIGVzc2VyZSB1c2F0byBzb2xvIGluIHVuIHJlcG9zaXRvcnkgR2l0IgogCi0jOiBsaWIvaW5kZXgudGNsOjMyOAotbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCi1tc2dzdHIgIlByb250byBwZXIgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUuIgorIzogYnVpbHRpbi9jb25maWcuYzo2MzgKK21zZ2lkICIkSE9NRSBub3Qgc2V0IgorbXNnc3RyICIkSE9NRSBub24gaW1wb3N0YXRhIgogCi0jOiBsaWIvaW5kZXgudGNsOjM0MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyAlcyIKLW1zZ3N0ciAiQWdnaXVudGEgZGkgJXMgaW4gY29yc28iCi0KLSM6IGxpYi9pbmRleC50Y2w6Mzk4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCi1tc2dzdHIgIkFubnVsbGFyZSBsZSBtb2RpZmljaGUgbmVsIGZpbGUgJXM/IgotCi0jOiBsaWIvaW5kZXgudGNsOjQwMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKLW1zZ3N0ciAiQW5udWxsYXJlIGxlIG1vZGlmaWNoZSBpbiBxdWVzdGkgJWkgZmlsZT8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDA4Ci1tc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgotbXNnc3RyICIiCi0iVHV0dGUgbGUgbW9kaWZpY2hlIG5vbiBwcmVwYXJhdGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgc2FyYW5ubyBwZXJzZSBwZXIgIgotInNlbXByZS4iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDExCi1tc2dpZCAiRG8gTm90aGluZyIKLW1zZ3N0ciAiTm9uIGZhcmUgbmllbnRlIgotCi0jOiBsaWIvaW5kZXgudGNsOjQyOQotbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKLW1zZ3N0ciAiQW5udWxsbyBsZSBtb2RpZmljaGUgbmVpIGZpbGUgc2VsZXppb25hdGkiCi0KLSM6IGxpYi9pbmRleC50Y2w6NDMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICJBbm51bGxvIGxlIG1vZGlmaWNoZSBpbiAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxMworIzogYnVpbHRpbi9jb25maWcuYzo2NTgKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgogbXNnc3RyICIiCi0iTm9uIHBvc3NvIGVmZmV0dHVhcmUgZnVzaW9uaSBkdXJhbnRlIHVuYSBjb3JyZXppb25lLlxuIgotIlxuIgotIkJpc29nbmEgZmluaXJlIGRpIGNvcnJlZ2dlcmUgcXVlc3RhIHJldmlzaW9uZSBwcmltYSBkaSBpbml6aWFyZSB1bmEgIgotInF1YWx1bnF1ZSBmdXNpb25lLlxuIgorIi0td29ya3RyZWUgbm9uIHB1w7IgZXNzZXJlIHVzYXRvIGNvbiBhbGJlcmkgZGkgbGF2b3JvIG11bHRpcGxpIGEgbWVub1xuIgorImNoZSBsJ2VzdGVuc2lvbmUgZGkgY29uZmlndXJhemlvbmUgd29ya3RyZWVDb25maWcgbm9uIHNpYSBhYmlsaXRhdGEuXG4iCisiTGVnZ2kgbGEgc2V6aW9uZSBcIkZJTEUgREkgQ09ORklHVVJBWklPTkVcIiBpbiBcImdpdCBoZWxwIHdvcmt0cmVlXCIgcGVyXG4iCisiaSBkZXR0YWdsaSIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogYnVpbHRpbi9jb25maWcuYzo2ODgKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAiLS1nZXQtY29sb3IgZSBpbCB0aXBvIGRlbGxhIHZhcmlhYmlsZSBub24gc29ubyBjb2VyZW50aSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OTMKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICJzb2xvIHVuJ2F6aW9uZSBwZXIgdm9sdGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IMOoIGFwcGxpY2FiaWxlIHNvbG8gYSAtLWxpc3QgbyAtLWdldC1yZWdleHAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzEyCiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKIG1zZ3N0ciAiIgotIkwndWx0aW1vIHN0YXRvIGFuYWxpenphdG8gbm9uIGNvcnJpc3BvbmRlIGFsbG8gc3RhdG8gZGVsbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJVbiBhbHRybyBwcm9ncmFtbWEgR2l0IGhhIG1vZGlmaWNhdG8gcXVlc3RvIGFyY2hpdmlvIGRhbGwndWx0aW1hIGFuYWxpc2kuIgotIkJpc29nbmEgZWZmZXR0dWFyZSB1bmEgbnVvdmEgYW5hbGlzaSBwcmltYSBkaSBwb3RlciBlZmZldHR1YXJlIHVuYSBmdXNpb25lLlxuIgotIlxuIgotIkxhIG51b3ZhIGFuYWxpc2kgY29taW5jZXLDoCBvcmEuXG4iCisiLS1zaG93LW9yaWdpbiDDqCBhcHBsaWNhYmlsZSBzb2xvIGEgLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwIGUgLS1saXN0IgogCi0jOiBsaWIvbWVyZ2UudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NvbmZpZy5jOjcxOAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIi0tZGVmYXVsdCDDqCBhcHBsaWNhYmlsZSBzb2xvIGEgLS1nZXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSAnJXMnIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczNAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGwnZWxhYm9yYXppb25lIGRlbC9kZWkgZmlsZSBkaSBjb25maWd1cmF6aW9uZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgImxhIG1vZGlmaWNhIGRlbGxvIHN0YW5kYXJkIGlucHV0IG5vbiDDqCBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibGEgbW9kaWZpY2EgZGVpIGJsb2Igbm9uIMOoIHN1cHBvcnRhdGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgZmlsZSBkaSBjb25maWd1cmF6aW9uZSAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NzMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgotIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgogbXNnc3RyICIiCi0iU2VpIG5lbCBtZXp6byBkaSB1bmEgZnVzaW9uZSBjb24gY29uZmxpdHRpLlxuIgotIlxuIgotIklsIGZpbGUgJXMgaGEgZGVpIGNvbmZsaXR0aS5cbiIKLSJcbiIKLSJCaXNvZ25hIHJpc29sdmVyZSBpIGNvbmZsaXR0aSwgcHJlcGFyYXJlIGlsIGZpbGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgZWQgIgotImluZmluZSBjcmVhcmxhIHBlciBjb21wbGV0YXJlIGxhIGZ1c2lvbmUgYXR0dWFsZS4gU29sbyBhIHF1ZXN0byBwdW50byBwb3RyYWkgIgotImluaXppYXJlIHVuJ2FsdHJhIGZ1c2lvbmUuXG4iCisiaW1wb3NzaWJpbGUgc292cmFzY3JpdmVyZSB2YWxvcmkgbXVsdGlwbGkgY29uIHVuIHNpbmdvbG8gdmFsb3JlXG4iCisiICAgICAgIFVzYSB1bidlc3ByZXNzaW9uZSByZWdvbGFyZSwgLS1hZGQgbyAtLXJlcGxhY2UtYWxsIHBlciBtb2RpZmljYXJlICVzLiIKIAotIzogbGliL21lcmdlLnRjbDo1NQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jb25maWcuYzo4NDcgYnVpbHRpbi9jb25maWcuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAic2V6aW9uZSAlcyBub24gZXNpc3RlbnRlIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAic3RhbXBhIGxlIGRpbWVuc2lvbmkgaW4gdW4gZm9ybWF0byBsZWdnaWJpbGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8b3B6aW9uaT5dIFs8ZXNwcmVzc2lvbmUgY29tbWl0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxvcHppb25pPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAiaGVhZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgImxlZ2dlcm8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiYW5ub3RhdG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJpbCB0YWcgYW5ub3RhdG8gJXMgbm9uIMOoIGRpc3BvbmliaWxlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImlsIHRhZyBhbm5vdGF0byAlcyBub24gaGEgdW4gbm9tZSBpbmNvcnBvcmF0byIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJpbCB0YWcgJyVzJyBpbiByZWFsdMOgIHF1aSDDqCAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAibmVzc3VuIHRhZyBjb3JyaXNwb25kZSBlc2F0dGFtZW50ZSBhICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiIgorIk5lc3N1bmEgY29ycmlzcG9uZGVuemEgZXNhdHRhIHN1aSByaWZlcmltZW50aSBvIHN1aSB0YWcsIHN0byBlc2VndWVuZG8gdW5hICIKKyJyaWNlcmNhIHBlciBkZXNjcml2ZXJlIGlsIGNvbW1pdFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJyaWNlcmNhIHRlcm1pbmF0YSBpbiAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA3CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKLSJcbiIKLSJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKLSJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKIG1zZ3N0ciAiIgotIlNlaSBuZWwgbWV6em8gZGkgdW5hIG1vZGlmaWNhLlxuIgotIlxuIgotIklsIGZpbGUgJXMgw6ggc3RhdG8gbW9kaWZpY2F0by5cbiIKLSJcbiIKLSJCaXNvZ25hIGNvbXBsZXRhcmUgbGEgY3JlYXppb25lIGRlbGxhIHJldmlzaW9uZSBhdHR1YWxlIHByaW1hIGRpIGluaXppYXJlICIKLSJ1bmEgZnVzaW9uZS4gSW4gcXVlc3RvIG1vZG8gc2Fyw6AgcGnDuSBmYWNpbGUgaW50ZXJyb21wZXJlIHVuYSBmdXNpb25lIG5vbiAiCi0icml1c2NpdGEsIG5lbCBjYXNvIGNlIG5lIGZvc3NlIGJpc29nbm8uXG4iCisiTmVzc3VuIHRhZyBhbm5vdGF0byBwdcOyIGRlc2NyaXZlcmUgJyVzJy5cbiIKKyJDacOyIG5vbm9zdGFudGUsIGMnZXJhbm8gZGVpIHRhZyBub24gYW5ub3RhdGk6IHByb3ZhIGNvbiAtLXRhZ3MuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIG9mICVzIgotbXNnc3RyICIlcyBkaSAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKLW1zZ3N0ciAiRnVzaW9uZSBkaSAlcyBlICVzIGluIGNvcnNvLi4uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzMQotbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgotbXNnc3RyICJGdXNpb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLiIKLQotIzogbGliL21lcmdlLnRjbDoxMzMKLW1zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAiRnVzaW9uZSBub24gcml1c2NpdGEuIEJpc29nbmEgcmlzb2x2ZXJlIGkgY29uZmxpdHRpLiIKLQotIzogbGliL21lcmdlLnRjbDoxNTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBJbnRvICVzIgotbXNnc3RyICJGdXNpb25lIGluICVzIgotCi0jOiBsaWIvbWVyZ2UudGNsOjE3NwotbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgotbXNnc3RyICJSZXZpc2lvbmUgZGEgZm9uZGVyZSIKLQotIzogbGliL21lcmdlLnRjbDoyMTIKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgogbXNnc3RyICIiCi0iSW50ZXJydXppb25lIGltcG9zc2liaWxlIGR1cmFudGUgdW5hIGNvcnJlemlvbmUuXG4iCi0iXG4iCi0iQmlzb2duYSBmaW5pcmUgZGkgY29ycmVnZ2VyZSBxdWVzdGEgcmV2aXNpb25lLlxuIgorIk5lc3N1biB0YWcgcHXDsiBkZXNjcml2ZXJlICclcycuXG4iCisiUHJvdmEgY29uIC0tYWx3YXlzIG8gY3JlYSBkZWkgdGFnLiIKIAotIzogbGliL21lcmdlLnRjbDoyMjIKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgImhvIGF0dHJhdmVyc2F0byAlbHUgY29tbWl0XG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDQKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkFib3J0IG1lcmdlP1xuIgotIlxuIgotIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgogbXNnc3RyICIiCi0iSW50ZXJyb21wZXJlIGZ1c2lvbmU/XG4iCi0iXG4iCi0iTCdpbnRlcnJ1emlvbmUgZGVsbGEgZnVzaW9uZSBhdHR1YWxlIGNhdXNlcsOgIGxhIHBlcmRpdGEgZGkgKlRVVFRFKiBsZSAiCi0ibW9kaWZpY2hlIG5vbiBhbmNvcmEgcHJlc2VudGkgbmVsbCdhcmNoaXZpby5cbiIKLSJcbiIKLSJDb250aW51YXJlIGNvbiBsJ2ludGVycnV6aW9uZSBkZWxsYSBmdXNpb25lIGF0dHVhbGU/IgorInRyb3ZhdGkgcGnDuSBkaSAlaSB0YWc7IGhvIGVsZW5jYXRvIGkgJWkgcGnDuSByZWNlbnRpXG4iCisiaG8gdGVybWluYXRvIGxhIHJpY2VyY2EgaW4gJXNcbiIKIAotIzogbGliL21lcmdlLnRjbDoyMjgKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiZGVzY3JpdmkgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIG5vbWUgb2dnZXR0byB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIKK21zZ3N0ciAiJXMgbm9uIMOoIG7DqSB1biBjb21taXQgbsOpIHVuIGJsb2IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzcKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICJ0cm92YSBpbCB0YWcgc3VjY2Vzc2l2byBhbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzgKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJlc2VndWkgaWwgZGVidWcgZGVsbGEgc3RyYXRlZ2lhIGRpIHJpY2VyY2Egc3VsbG8gc3RhbmRhcmQgZXJyb3IiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzkKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAidXNhIHF1YWx1bnF1ZSByaWZlcmltZW50byIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJ1c2EgcXVhbHVucXVlIHRhZywgYW5jaGUgcXVlbGxpIG5vbiBhbm5vdGF0aSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgInVzYSBzZW1wcmUgaWwgZm9ybWF0byBsdW5nbyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MgorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAic2VndWkgc29sbyBpbCBwcmltbyBnZW5pdG9yZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBsZSBjb3JyaXNwb25kZW56ZSBlc2F0dGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDcKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICJjb25zaWRlcmEgZ2xpIDxuPiB0YWcgcGnDuSByZWNlbnRpIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGE6IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0OQorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImNvbnNpZGVyYSBzb2xvIGkgdGFnIGNvcnJpc3BvbmRlbnRpIGFsIDxwYXR0ZXJuPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm9uIGNvbnNpZGVyYXJlIGkgdGFnIGNvcnJpc3BvbmRlbnRpIGFsIDxwYXR0ZXJuPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MyBidWlsdGluL25hbWUtcmV2LmM6NDczCittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICJ2aXN1YWxpenphIGwnb2dnZXR0byBjb21taXQgYWJicmV2aWF0byBjb21lIGZhbGxiYWNrIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU0IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTcKK21zZ2lkICJtYXJrIgorbXNnc3RyICJjb250cmFzc2Vnbm8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTUKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIiIKKyJhZ2dpdW5naSA8Y29udHJhc3NlZ25vPiBhbGwnYWxiZXJvIGRpIGxhdm9ybyBzcG9yY28gKGltcG9zdGF6aW9uZSAiCisicHJlZGVmaW5pdGE6IFwiLWRpcnR5XCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU4Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiCittc2dzdHIgIiIKKyJhZ2dpdW5naSA8Y29udHJhc3NlZ25vPiBhbGwnYWxiZXJvIGRpIGxhdm9ybyByb3R0byAoaW1wb3N0YXppb25lICIKKyJwcmVkZWZpbml0YTogXCItYnJva2VuXCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTc2Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyBub24gw6ggY29tcGF0aWJpbGUgY29uIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MDUKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiTmVzc3VuIG5vbWUgdHJvdmF0bywgbm9uIMOoIHBvc3NpYmlsZSBkZXNjcml2ZXJlIG51bGxhLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1NgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWRpcnR5IG5vbiDDqCBjb21wYXRpYmlsZSBjb24gbGUgZXNwcmVzc2lvbmkgY29tbWl0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU4Cittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiBub24gw6ggY29tcGF0aWJpbGUgY29uIGxlIGVzcHJlc3Npb25pIGNvbW1pdCIKKworIzogYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiclcyc6IG5vbiDDqCB1biBmaWxlIHJlZ29sYXJlIG8gdW4gY29sbGVnYW1lbnRvIHNpbWJvbGljbyIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3B6aW9uZSBub24gdmFsaWRhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIk5vbiDDqCB1biByZXBvc2l0b3J5IEdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJzcGVjaWZpY2F0byBvZ2dldHRvIG5vbiB2YWxpZG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJwacO5IGRpIGR1ZSBibG9iIHNwZWNpZmljYXRpOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAic3BlY2lmaWNhdG8gb2dnZXR0byBub24gZ2VzdGl0byAnJXMnLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzxvcHppb25pPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgIm5vbiByaXVzY2l0bzogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBjb2xsZWdhbWVudG8gc2ltYm9saWNvICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZmlsZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlIGNvbGxlZ2FtZW50byBzaW1ib2xpY28gJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGwnb2dnZXR0byAlcyBwZXIgaWwgY29sbGVnYW1lbnRvIHNpbWJvbGljbyAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMwogbXNnaWQgIiIKLSJSZXNldCBjaGFuZ2VzP1xuIgotIlxuIgotIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCiBtc2dzdHIgIiIKLSJSaXByaXN0aW5hcmUgbGEgcmV2aXNpb25lIGF0dHVhbGUgZSBhbm51bGxhcmUgbGUgbW9kaWZpY2hlP1xuIgotIlxuIgotIkwnYW5udWxsYW1lbnRvIGRlbGxlIG1vZGlmaWNoZSBjYXVzZXLDoCBsYSBwZXJkaXRhIGRpICpUVVRURSogbGUgbW9kaWZpY2hlICIKLSJub24gYW5jb3JhIHByZXNlbnRpIG5lbGwnYXJjaGl2aW8uXG4iCi0iXG4iCi0iQ29udGludWFyZSBjb24gbCdhbm51bGxhbWVudG8gZGVsbGUgbW9kaWZpY2hlIGF0dHVhbGk/IgorImkgZm9ybWF0aSBkaWZmIGNvbWJpbmF0aSAoJy1jJyBlICctLWNjJykgbm9uIHNvbm8gc3VwcG9ydGF0aSBpblxuIgorIm1vZGFsaXTDoCBkaWZmIGRpcmVjdG9yeSAoJy1kJyBlICctLWRpci1kaWZmJykuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjIzOQotbXNnaWQgIkFib3J0aW5nIgotbXNnc3RyICJJbnRlcnJ1emlvbmUiCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIgorbXNnc3RyICJlbnRyYW1iaSBpIGZpbGUgcmlzdWx0YW5vIG1vZGlmaWNhdGk6ICclcycgZSAnJXMnLiIKIAotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAicmlwcmlzdGlubyBmaWxlIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICJpbCBmaWxlIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyDDqCBzdGF0byBtYW50ZW51dG8uIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI2NwotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgIkludGVycnV6aW9uZSBub24gcml1c2NpdGEuIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgImVzaXN0b25vIGZpbGUgdGVtcG9yYW5laSBpbiAnJXMnLiIKIAotIzogbGliL21lcmdlLnRjbDoyNjkKLW1zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCi1tc2dzdHIgIkludGVycnV6aW9uZSBjb21wbGV0YXRhLiBQcm9udG8uIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICJwb3RyZXN0aSB2b2xlciByaXB1bGlybGkgbyByaXByaXN0aW5hcmxpLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6OAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCi1tc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWxsYSByZXZpc2lvbmUgY29tdW5lPyIKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAidXNhIGBkaWZmLmd1aXRvb2xgIGFuemljaMOpIGBkaWZmLnRvb2xgIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo5Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCi1tc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWwgcmFtbyBhdHR1YWxlPyIKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAiZXNlZ3VpIHVuIGRpZmYgZGlyZWN0b3J5IGNvbXBsZXRvIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCi1tc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWxsJ2FsdHJvIHJhbW8/IgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMQorbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAibm9uIGNoaWVkZXJlIGNvbmZlcm1hIHByaW1hIGRpIGxhbmNpYXJlIHVuIHRvb2wgZGlmZiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDYKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAidXNhIGNvbGxlZ2FtZW50aSBzaW1ib2xpY2kgaW4gbW9kYWxpdMOgIGRpZmYgZGlyZWN0b3J5IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAic3RydW1lbnRvIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICJ1c2EgbG8gc3RydW1lbnRvIGRpZmYgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTAKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgIiIKKyJzdGFtcGEgdW4gZWxlbmNvIGRpIHN0cnVtZW50aSBkaWZmIGNoZSBwb3Nzb25vIGVzc2VyZSB1c2F0aSBjb24gYC0tdG9vbGAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTMKIG1zZ2lkICIiCi0iTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKLSJcbiIKLSIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgotIlxuIgotIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKIG1zZ3N0ciAiIgotIlNpIHN0YW5ubyBtb3N0cmFuZG8gc29sbyBsZSBtb2RpZmljaGUgY29uIGNvbmZsaXR0aS5cbiIKLSJcbiIKLSIlcyBzYXLDoCBzb3ZyYXNjcml0dG8uXG4iCi0iXG4iCi0iUXVlc3RhIG9wZXJhemlvbmUgcHXDsiBlc3NlcmUgbW9kaWZpY2F0YSBzb2xvIHJpY29taW5jaWFuZG8gbGEgZnVzaW9uZS4iCisiZmFpIHPDrCBjaGUgJ2dpdC1kaWZmdG9vbCcgZXNjYSBxdWFuZG8gdW5vIHN0cnVtZW50byBkaWZmIGludm9jYXRvICIKKyJyZXN0aXR1aXNjZSB1biBjb2RpY2UgZCd1c2NpdGEgZGl2ZXJzbyBkYSB6ZXJvIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNgorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAic3BlY2lmaWNhIHVuIGNvbWFuZG8gcGVyc29uYWxpenphdG8gcGVyIHZpc3VhbGl6emFyZSBpIGRpZmYiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICJmb3JuaXRvIGEgYGRpZmZgIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMyCittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAiZGlmZnRvb2wgcmljaGllZGUgdW4gYWxiZXJvIGRpIGxhdm9ybyBvIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzkKK21zZ2lkICItLWRpci1kaWZmIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tZGlyLWRpZmYgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzQyCittc2dpZCAiLS1ndWksIC0tdG9vbCBhbmQgLS1leHRjbWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAibGUgb3B6aW9uaSAtLWd1aSwgLS10b29sIGVkIC0tZXh0Y21kIHNvbm8gbXV0dWFsbWVudGUgZXNjbHVzaXZlIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzUwCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICJuZXNzdW5vIDxzdHJ1bWVudG8+IHNwZWNpZmljYXRvIHBlciAtLXRvb2w9PHN0cnVtZW50bz4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTcKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgIm5lc3N1biA8Y29tYW5kbz4gc3BlY2lmaWNhdG8gcGVyIC0tZXh0Y21kPTxjb21hbmRvPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B6aW9uaT4gPHZhcmlhYmlsZSBkJ2FtYmllbnRlPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgInRpcG8iCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MQorbXNnaWQgImRlZmF1bHQgZm9yIGdpdF9lbnZfKiguLi4pIHRvIGZhbGwgYmFjayBvbiIKIG1zZ3N0ciAiIgotIklsIGZpbGUgJXMgc2VtYnJhIGNvbnRlbmVyZSBjb25mbGl0dGkgbm9uIHJpc29sdGksIHByZXBhcmFyZSBwZXIgbGEgcHJvc3NpbWEgIgotInJldmlzaW9uZT8iCisiaW1wb3N0YXppb25lIHByZWRlZmluaXRhIHN1IGN1aSByaXBpZWdoZXJhbm5vIGxlIGNoaWFtYXRlIGdpdF9lbnZfKiguLi4pIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKIG1zZ3N0ciAiIgotIkxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgcGVyICVzIMOoIHByZXBhcmF0YSBwZXIgbGEgcHJvc3NpbWEgcmV2aXNpb25lIgorIm5vbiB2aXN1YWxpenphcmUgbWVzc2FnZ2ksIHVzYSBzb2xvIGlsIHZhbG9yZSBkaSBnaXRfZW52XyooKSBjb21lIGNvZGljZSAiCisiZCd1c2NpdGEiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQotbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKIG1zZ3N0ciAiIgotIk5vbiDDqCBwb3NzaWJpbGUgcmlzb2x2ZXJlIGkgY29uZmxpdHRpIHBlciBjYW5jZWxsYXppb25pIG8gbGluayBjb24gdW4gIgotInByb2dyYW1tYSBlc3Rlcm5vIgorImwnb3B6aW9uZSBgLS1kZWZhdWx0JyByaWNoaWVkZSB1biB2YWxvcmUgYm9vbGVhbm8gY29uIGAtLXR5cGU9Ym9vbGAsIG5vbiBgJXNgIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKLW1zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgotbXNnc3RyICJOb24gZXNpc3RlIHVuIGZpbGUgY29uIGNvbmZsaXR0aS4iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgotbXNnc3RyICInJXMnIG5vbiDDqCB1bmEgR1VJIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpLiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MjY4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgotbXNnc3RyICJJbCBwcm9ncmFtbWEgJyVzJyBub24gw6ggc3VwcG9ydGF0byIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzAzCi1tc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCi1tc2dzdHIgIkxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgw6ggZ2nDoCBhdnZpYXRhLCB0ZXJtaW5hcmxhPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzIzCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCi0iJXMiCisib3B0aW9uIGAtLWRlZmF1bHQnIGV4cGVjdHMgYW4gdW5zaWduZWQgbG9uZyB2YWx1ZSB3aXRoIGAtLXR5cGU9dWxvbmdgLCBub3QgYCIKKyIlc2AiCiBtc2dzdHIgIiIKLSJFcnJvcmU6IHJldmlzaW9uZSBub24gdHJvdmF0YTpcbiIKLSIlcyIKKyJsJ29wemlvbmUgYC0tZGVmYXVsdCcgcmljaGllZGUgdW4gdmFsb3JlIHVuc2lnbmVkIGxvbmcgY29uIGAtLXR5cGU9dWxvbmdgLCAiCisibm9uIGAlc2AiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MwotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI5Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtvcHppb25pLWVsZW5jby1yZXZdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUyCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKyJFcnJvcmU6IEltcG9zc2liaWxlIGVzcG9ydGFyZSBpIHRhZyBuaWRpZmljYXRpIGEgbWVubyBjaGUgbm9uIHNpYSAiCisic3BlY2lmaWNhdGEgbCdvcHppb25lIC0tbWFyay10YWdzLiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTIKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICJ2aXN1YWxpenphIGwnYXZhbnphbWVudG8gZG9wbyA8bj4gb2dnZXR0aSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgInNlbGV6aW9uYSBsYSBnZXN0aW9uZSBkZWkgdGFnIGZpcm1hdGkiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAic2VsZXppb25hIGxhIGdlc3Rpb25lIGRlaSB0YWcgY2hlIGNvbnRyYXNzZWduYW5vIG9nZ2V0dGkgZmlsdHJhdGkiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCittc2dzdHIgIiIKKyJzZWxlemlvbmEgbGEgZ2VzdGlvbmUgZGVpIG1lc3NhZ2dpIGRpIGNvbW1pdCBpbiB1bmEgY29kaWZpY2EgYWx0ZXJuYXRpdmEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIkVzZWd1aSBpbCBkdW1wIGRlaSBjb250cmFzc2VnbmkgaW4gcXVlc3RvIGZpbGUiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICJJbXBvcnRhIGkgY29udHJhc3NlZ25pIGRhIHF1ZXN0byBmaWxlIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgIkltcG9ydGEgaSBjb250cmFzc2VnbmkgZGEgcXVlc3RvIGZpbGUgc2UgZXNpc3RlIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3MQorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICJVc2EgdW4gdGFnZ2VyIGZhbHNvIHNlIGkgdGFnIG5vbiBuZSBoYW5ubyB1bm8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIlZpc3VhbGl6emEgaW4gb3V0cHV0IGwnYWxiZXJvIGNvbXBsZXRvIHBlciBvZ25pIGNvbW1pdCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzUKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiVXNhIGxhIGZ1bnppb25hbGl0w6AgXCJmYXR0b1wiIHBlciB0ZXJtaW5hcmUgaWwgZmx1c3NvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NgorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAiT21ldHRpIGwnb3V0cHV0IGRlaSBkYXRpIGRlaSBibG9iIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NyBidWlsdGluL2xvZy5jOjE3MDUKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICJzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAiQXBwbGljYSBsbyBzcGVjaWZpY2F0b3JlIHJpZmVyaW1lbnRvIGFpIHJpZmVyaW1lbnRpIGVzcG9ydGF0aSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzkKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICJyZW5kaSBhbm9uaW1vIGwnb3V0cHV0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiIgorIkZhaSByaWZlcmltZW50byBhaSBnZW5pdG9yaSBub24gbmVsIGZsdXNzbyBmYXN0LWV4cG9ydCB0cmFtaXRlIGwnSUQgb2dnZXR0byIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAiVmlzdWFsaXp6YSBnbGkgSUQgb2dnZXR0byBvcmlnaW5hcmkgZGVpIGJsb2IvY29tbWl0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAiRXRpY2hldHRhIGkgdGFnIGNvbiBJRCBjb250cmFzc2Vnbm8iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZm9ybmlyZSBlbnRyYW1iZSBsZSBvcHppb25pIC0taW1wb3J0LW1hcmtzIGUgLS1pbXBvcnQtbWFya3MtaWYtIgorImV4aXN0cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcHppb25pPl0gWzxyZXBvc2l0b3J5PiBbPHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcHppb25pPl0gPGdydXBwbz4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wemlvbmk+XSBbKDxyZXBvc2l0b3J5PiB8IDxncnVwcG8+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2Cittc2dpZCAiZmV0Y2gucGFyYWxsZWwgY2Fubm90IGJlIG5lZ2F0aXZlIgorbXNnc3RyICJmZXRjaC5wYXJhbGxlbCBub24gcHXDsiBlc3NlcmUgbmVnYXRpdm8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzkgYnVpbHRpbi9wdWxsLmM6MjA0Cittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIGZldGNoIGRhIHR1dHRpIGkgcmVtb3RpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxIGJ1aWx0aW4vcHVsbC5jOjI0OAorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvZmV0Y2giCittc2dzdHIgImltcG9zdGEgbCd1cHN0cmVhbSBwZXIgZ2l0IHB1bGwvZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MjA3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJhZ2dpdW5naSBpIGRhdGkgYSAuZ2l0L0ZFVENIX0hFQUQgYW56aWNow6kgc292cmFzY3JpdmVybGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MjEwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICJwZXJjb3JzbyBpbiBjdWkgY2FyaWNhcmUgaWwgcGFjayBzdWwgcmVtb3RvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIKK21zZ3N0ciAiZm9yemEgbGEgc292cmFzY3JpdHR1cmEgZGVsIHJpZmVyaW1lbnRvIGxvY2FsZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIGZldGNoIGRhIHBpw7kgcmVtb3RpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjIxNAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgImVzZWd1aSBpbCBmZXRjaCBkaSB0dXR0aSBpIHRhZyBlIGRlZ2xpIG9nZ2V0dGkgYXNzb2NpYXRpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJub24gZXNlZ3VpcmUgaWwgZmV0Y2ggZGkgYWxjdW4gdGFnICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibnVtZXJvIGRpIHNvdHRvbW9kdWxpIHJlY3VwZXJhdGkgaW4gcGFyYWxsZWxvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjIxNworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICIiCisiZWxpbWluYSBpIGJyYW5jaCBjaGUgbmUgdHJhY2NpYW5vIHVubyByZW1vdG8gbWEgbm9uIHBpw7kgcHJlc2VudGkgc3VsIHJlbW90byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OAorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIiIKKyJlbGltaW5hIGkgdGFnIGxvY2FsaSBub24gcGnDuSBwcmVzZW50aSBzdWwgcmVtb3RvIGUgc292cmFzY3JpdmkgaSB0YWcgIgorIm1vZGlmaWNhdGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9mZXRjaC5jOjE4MiBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgImEgcmljaGllc3RhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHJvbGxhIGlsIHJlY3VwZXJvIHJpY29yc2l2byBkZWkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjI1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgIm1hbnRpZW5pIGlsIHBhY2sgc2NhcmljYXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgImNvbnNlbnRpIGwnYWdnaW9ybmFtZW50byBkZWwgcmlmZXJpbWVudG8gSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OSBidWlsdGluL2ZldGNoLmM6MTc1IGJ1aWx0aW4vcHVsbC5jOjIyOAorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgImF1bWVudGEgbGEgcHJvZm9uZGl0w6AgZGVsbGEgY3Jvbm9sb2dpYSBkaSB1biBjbG9uZSBzaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgIiIKKyJhdW1lbnRhIGxhIHByb2ZvbmRpdMOgIGRlbGxhIGNyb25vbG9naWEgZGkgdW4gY2xvbmUgc2hhbGxvdyBpbiBiYXNlIGFsIHRlbXBvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIzMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICJjb252ZXJ0aSBpbiB1biByZXBvc2l0b3J5IGNvbXBsZXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAiYW50ZXBvbmkgcXVlc3RvIHByZWZpc3NvIGFsbCdvdXRwdXQgZGVsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MwogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKyJpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEgcGVyIGlsIHJlY3VwZXJvIHJpY29yc2l2byBkZWkgc290dG9tb2R1bGkgKGEgIgorInByaW9yaXTDoCBtaW5vcmUgcmlzcGV0dG8gYWkgZmlsZSBkaSBjb25maWd1cmF6aW9uZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODcgYnVpbHRpbi9wdWxsLmM6MjM0Cittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICJhY2NldHRhIGkgcmlmZXJpbWVudGkgY2hlIGFnZ2lvcm5hbm8gLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg4IGJ1aWx0aW4vcHVsbC5jOjIzNgorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAibWFwcGEgcmlmZXJpbWVudGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODkgYnVpbHRpbi9wdWxsLmM6MjM3Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgInNwZWNpZmljYSBsYSBtYXBwYSBkZWkgcmlmZXJpbWVudGkgcGVyIGlsIGZldGNoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgInNlZ25hbGEgY2hlIGFiYmlhbW8gc29sbyBvZ2dldHRpIHJhZ2dpdW5naWJpbGkgZGEgcXVlc3Qnb2dnZXR0byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiZXNlZ3VpICdnYyAtLWF1dG8nIGRvcG8gaWwgZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDEgYnVpbHRpbi9wdWxsLmM6MjQ2Cittc2dpZCAiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIgorbXNnc3RyICJjb250cm9sbGEgYWdnaW9ybmFtZW50aSBmb3J6YXRpIHN1IHR1dHRpIGkgYnJhbmNoIGFnZ2lvcm5hdGkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDMKK21zZ2lkICJ3cml0ZSB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJzY3JpdmkgaWwgZ3JhZm8gZGVpIGNvbW1pdCBkb3BvIGlsIGZldGNoIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgbCdIRUFEIGRlbCByaWZlcmltZW50byByZW1vdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAiaWwgdmFsb3JlIGRlbGwnb3B6aW9uZSBmZXRjaC5vdXRwdXQgY29udGllbmUgaWwgdmFsb3JlIG5vbiB2YWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAib2dnZXR0byAlcyBub24gdHJvdmF0byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1NQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW2FnZ2lvcm5hdG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyaWZpdXRhdG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGZldGNoIG5lbCBicmFuY2ggY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlt0YWcgYWdnaW9ybmF0b10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODAgYnVpbHRpbi9mZXRjaC5jOjgxNyBidWlsdGluL2ZldGNoLmM6ODM5CisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgaWwgcmlmZXJpbWVudG8gbG9jYWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg0Cittc2dpZCAid291bGQgY2xvYmJlciBleGlzdGluZyB0YWciCittc2dzdHIgInNvdnJhc2NyaXZlcmViYmUgaWwgdGFnIGVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW251b3ZvIHRhZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltudW92byBicmFuY2hdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEyCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbnVvdm8gcmlmZXJpbWVudG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiYWdnaW9ybmFtZW50byBmb3J6YXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAibm9uIGZhc3QgZm9yd2FyZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg3NworbXNnaWQgIiIKKyJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCittc2dzdHIgIiIKKyJJbCBmZXRjaCBub3JtYWxtZW50ZSBpbmRpY2EgcXVhbGkgYnJhbmNoIHNpYW5vIHN0YXRpIHNvdHRvcG9zdGkgYWRcbiIKKyJhZ2dpb3JuYW1lbnRvIGZvcnphdG8sIG1hIHRhbGUgY29udHJvbGxvIMOoIHN0YXRvIGRpc2FiaWxpdGF0by4gUGVyXG4iCisicmlhYmlsaXRhcmxvLCB1c2EgbCdvcHppb25lICctLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG8gZXNlZ3VpICdnaXQgY29uZmlnXG4iCisiZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZScuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisiU29ubyBzdGF0aSByaWNoaWVzdGkgJS4yZiBzZWNvbmRpIHBlciBjb250cm9sbGFyZSBsYSBwcmVzZW56YSBkaSBldmVudHVhbGlcbiIKKyJhZ2dpb3JuYW1lbnRpIGZvcnphdGkuIFB1b2kgdXNhcmUgJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgbyBlc2VndWlyZVxuIgorIidnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlJyBwZXIgb21ldHRlcmUgcXVlc3RvIGNvbnRyb2xsby5cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIG5vbiBoYSBpbnZpYXRvIHR1dHRpIGdsaSBvZ2dldHRpIG5lY2Vzc2FyaVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiVzIHJpZml1dGF0byBwZXJjaMOpIG5vbiDDqCBjb25zZW50aXRvIGFnZ2lvcm5hcmUgcmFkaWNpIHNoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDE3IGJ1aWx0aW4vZmV0Y2guYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJEYSAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyJub24gw6ggc3RhdG8gcG9zc2liaWxlIGFnZ2lvcm5hcmUgYWxjdW5pIHJpZmVyaW1lbnRpIGxvY2FsaTsgcHJvdmEgYWQgIgorImVzZWd1aXJlXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyBwZXIgcmltdW92ZXJlIG9nbmkgYnJhbmNoIHZlY2NoaW8gaW4gY29uZmxpdHRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgZGl2ZW50ZXLDoCBwZW5kZW50ZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIMOoIGRpdmVudGF0byBwZW5kZW50ZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbZWxpbWluYXRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTkgYnVpbHRpbi9yZW1vdGUuYzoxMDM1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIobmVzc3VubykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorIk1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgaWwgZmV0Y2ggbmVsIGJyYW5jaCBjb3JyZW50ZSAlcyBkaSB1biByZXBvc2l0b3J5IG5vbiAiCisiYmFyZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiTCdvcHppb25lIFwiJXNcIiBjb24gaWwgdmFsb3JlIFwiJXNcIiBub24gw6ggdmFsaWRhIHBlciAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJMJ29wemlvbmUgXCIlc1wiIMOoIGlnbm9yYXRhIHBlciAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxMgorbXNnaWQgIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIKK21zZ3N0ciAicmlsZXZhdGkgYnJhbmNoIG11bHRpcGxpLCBzdGF0byBpbmNvbXBhdGliaWxlIGNvbiAtLXNldC11cHN0cmVhbSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjcKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibm9uIGltcG9zdG8gbCd1cHN0cmVhbSBwZXIgdW4gYnJhbmNoIHJlbW90byBjaGUgbmUgdHJhY2NpYSB1bm8gcmVtb3RvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyOQorbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSB0YWciCittc2dzdHIgIm5vbiBpbXBvc3RvIGwndXBzdHJlYW0gcGVyIHVuIHRhZyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMxCittc2dpZCAidW5rbm93biBicmFuY2ggdHlwZSIKK21zZ3N0ciAidGlwbyBicmFuY2ggc2Nvbm9zY2l1dG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMzCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorIm5lc3N1biBicmFuY2ggc29yZ2VudGUgdHJvdmF0by5cbiIKKyJkZXZpIHNwZWNpZmljYXJlIGVzYXR0YW1lbnRlIHVuIGJyYW5jaCBjb24gbCdvcHppb25lIC0tc2V0LXVwc3RyZWFtLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NTkgYnVpbHRpbi9mZXRjaC5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiUmVjdXBlcm8gZGkgJXMgaW4gY29yc29cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NjkgYnVpbHRpbi9mZXRjaC5jOjE2MjQgYnVpbHRpbi9yZW1vdGUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSByZWN1cGVyYXJlICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmVjdXBlcmFyZSAnJXMnIChjb2RpY2UgZGkgdXNjaXRhOiAlZClcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2ODQKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byBhbGN1biByZXBvc2l0b3J5IHJlbW90by4gU3BlY2lmaWNhIHVuIFVSTCBvIGlsXG4iCisibm9tZSBkaSB1biByZW1vdG8gZGEgY3VpIGRvdnJhbm5vIGVzc2VyZSByZWN1cGVyYXRlIGxlIG51b3ZlIHJldmlzaW9uaS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzIxCittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiRGV2aSBzcGVjaWZpY2FyZSBpbCBub21lIGRpIHVuIHRhZy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcxCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTGUgcHJvZm9uZGl0w6AgbmVnYXRpdmUgaW4gLS1kZWVwZW4gbm9uIHNvbm8gc3VwcG9ydGF0ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzMKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJsZSBvcHppb25pIC0tZGVlcGVuIGUgLS1kZXB0aCBzb25vIG11dHVhbG1lbnRlIGVzY2x1c2l2ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzgKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1kZXB0aCBlIC0tdW5zaGFsbG93IG5vbiBwb3Nzb25vIGVzc2VyZSB1c2F0aSBpbnNpZW1lLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODAKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS11bnNoYWxsb3cgc3UgdW4gcmVwb3NpdG9yeSBjb21wbGV0byBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzk2Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIG5vbiByaWNoaWVkZSB1biByZXBvc2l0b3J5IGNvbWUgYXJnb21lbnRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5OAorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbm9uIGhhIHNlbnNvIGNvbiBkZWdsaSBzcGVjaWZpY2F0b3JpIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJSZW1vdG8gbyBncnVwcG8gcmVtb3RpIG5vbiBlc2lzdGVudGU6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgxNAorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorIlJlY3VwZXJhcmUgdW4gZ3J1cHBvIGUgc3BlY2lmaWNhcmUgZ2xpIHNwZWNpZmljYXRvcmkgcmlmZXJpbWVudG8gbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzMgorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIHB1w7IgZXNzZXJlIHVzYXRvIHNvbG8gY29uIGlsIHJlbW90byBjb25maWd1cmF0byBuZWxsZSBlc3RlbnNpb25pLiIKKyJwYXJ0aWFsY2xvbmUiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2dpbz5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NAorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAicG9wb2xhIGlsIHJlZ2lzdHJvIGNvbiBhbCBwacO5IDxuPiB2b2NpIGRlbCByZWdpc3RybyBicmV2ZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiYWxpYXMgZGkgLS1sb2cgKGRlcHJlY2F0bykiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MAorbXNnaWQgInRleHQiCittc2dzdHIgInRlc3RvIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgInVzYSA8dGVzdG8+IGNvbWUgc3RyaW5nYSBpbml6aWFsZSBkZWwgbWVzc2FnZ2lvIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODIKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiZmlsZSBkYSBjdWkgbGVnZ2VyZSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHppb25pPl0gWzxwYXR0ZXJuPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvZ2dldHRvPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiIgorInJhY2NoaXVkaSBpIHNlZ25hcG9zdG8gZnJhIHZpcmdvbGV0dGUgaW4gbW9kbyBkYSBwb3RlcmxpIHVzYXJlIGluIHVuYSBzaGVsbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAiIgorInJhY2NoaXVkaSBpIHNlZ25hcG9zdG8gZnJhIHZpcmdvbGV0dGUgaW4gbW9kbyBkYSBwb3RlcmxpIHVzYXJlIGNvbiBQZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIiIKKyJyYWNjaGl1ZGkgaSBzZWduYXBvc3RvIGZyYSB2aXJnb2xldHRlIGluIG1vZG8gZGEgcG90ZXJsaSB1c2FyZSBjb24gUHl0aG9uIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgInJhY2NoaXVkaSBpIHNlZ25hcG9zdG8gZnJhIHZpcmdvbGV0dGUgaW4gbW9kbyBkYSBwb3RlcmxpIHVzYXJlIGNvbiBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBzb2xvIDxuPiByaWZlcmltZW50aSBjb3JyaXNwb25kZW50aSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAicmlzcGV0dGEgbGUgc3RyaW5naGUgZGkgZm9ybWF0byBwZXIgaSBjb2xvcmkiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgcmlmZXJpbWVudGkgY2hlIHB1bnRhbm8gYWxsJ29nZ2V0dG8gZGF0byIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgcmlmZXJpbWVudGkgc290dG9wb3N0aSBhIG1lcmdlIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgcmlmZXJpbWVudGkgbm9uIHNvdHRvcG9zdGkgYSBtZXJnZSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgcmlmZXJpbWVudGkgY29udGVuZW50aSBpbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDcKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJzdGFtcGEgc29sbyBpIHJpZmVyaW1lbnRpIGNoZSBub24gY29udGVuZ29ubyBpbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY4IGJ1aWx0aW4vZnNjay5jOjE0NyBidWlsdGluL2ZzY2suYzoxNDgKK21zZ2lkICJ1bmtub3duIgorbXNnc3RyICJzY29ub3NjaXV0byIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgImVycm9yZSBpbiAlcyAlczogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICJhdnZpc28gaW4gJXMgJXM6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDMgYnVpbHRpbi9mc2NrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIgorbXNnc3RyICJjb2xsZWdhbWVudG8gcm90dG8gZGEgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNTUKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICJ0aXBvIG9nZ2V0dG8gZXJyYXRvIG5lbCBjb2xsZWdhbWVudG8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorImNvbGxlZ2FtZW50byByb3R0byBkYSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgICAgICAgYSAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICIlcyBtYW5jYW50ZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVhY2hhYmxlICVzICVzIgorbXNnc3RyICIlcyBub24gcmFnZ2l1bmdpYmlsZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICIlcyBwZW5kZW50ZSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzM5Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsb3N0LWZvdW5kIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdGVybWluYXJlICclcyciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyIKK21zZ3N0ciAiQ29udHJvbGxvIGRpICVzIGluIGNvcnNvIgorCisjOiBidWlsdGluL2ZzY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5ICglZCBvYmplY3RzKSIKK21zZ3N0ciAiQ29udHJvbGxvIGNvbm5lc3Npb25lIGluIGNvcnNvICglZCBvZ2dldHRpKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICJDb250cm9sbG8gZGkgJXMgaW4gY29yc28gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAiY29sbGVnYW1lbnRpIHJvdHRpIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAicmFkaWNlICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnZ2VkICVzICVzICglcykgaW4gJXMiCittc2dzdHIgImVzZWd1aXRvIHRhZyBkaSAlcyAlcyAoJXMpIGluICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVzOiBvZ2dldHRvIGNvcnJvdHRvIG8gbWFuY2FudGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiVzOiB2b2NlIHJlZ2lzdHJvIHJpZmVyaW1lbnRpIG5vbiB2YWxpZGE6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lcyIKK21zZ3N0ciAiQ29udHJvbGxvIHJlZ2lzdHJvIHJpZmVyaW1lbnRpICVzLT4lcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciAlcyIKK21zZ3N0ciAiJXM6IHB1bnRhdG9yZSBTSEExIG5vbiB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJXM6IG5vbiDDqCB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOQorbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICJhdnZpc286IG5lc3N1biByaWZlcmltZW50byBwcmVkZWZpbml0byIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiJXM6IG9nZ2V0dG8gY29ycm90dG8gbyBtYW5jYW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIgorbXNnc3RyICIlczogaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ29nZ2V0dG86ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgImZpbGUgU0hBMSBub24gdmFsaWRvOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiQ29udHJvbGxvIGRpcmVjdG9yeSBvZ2dldHRpIGluIGNvcnNvIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIkNvbnRyb2xsbyBkaXJlY3Rvcnkgb2dnZXR0aSBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIkNvbnRyb2xsbyBjb2xsZWdhbWVudG8gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5NSBidWlsdGluL2luZGV4LXBhY2suYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiJXMgbm9uIHZhbGlkbyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyB0byBzb21ldGhpbmcgc3RyYW5nZSAoJXMpIgorbXNnc3RyICIlcyBwdW50YSBhIHF1YWxjb3NhIGRpIHN0cmFubyAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiVzOiBsJ0hFQUQgc2NvbGxlZ2F0byBub24gcHVudGEgYSBuaWVudGUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgImF2dmlzbzogJXMgcHVudGEgYSB1biBicmFuY2ggbm9uIG5hdG8gKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI0Cittc2dpZCAiQ2hlY2tpbmcgY2FjaGUgdHJlZSIKK21zZ3N0ciAiQ29udHJvbGxvIGNhY2hlIGFsYmVybyBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIlczogcHVudGF0b3JlIFNIQTEgbm9uIHZhbGlkbyBuZWxsYSBjYWNoZSBhbGJlcmkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIm9nZ2V0dG8gbm9uIGFsYmVybyBuZWxsYSBjYWNoZSBhbGJlcmkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8b3B6aW9uaT5dIFs8b2dnZXR0bz4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzUKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInZpc3VhbGl6emEgb2dnZXR0aSBub24gcmFnZ2l1bmdpYmlsaSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc2Cittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICJ2aXN1YWxpenphIG9nZ2V0dGkgcGVuZGVudGkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NworbXNnaWQgInJlcG9ydCB0YWdzIgorbXNnc3RyICJzZWduYWxhIGkgdGFnIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzgKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAic2VnbmFsYSBpIG5vZGkgcmFkaWNlIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAicmVuZGkgZ2xpIG9nZ2V0dGkgaW5kaWNlIG5vZGkgaGVhZCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJyZW5kaSBpIHJlZ2lzdHJpIGRlaSByaWZlcmltZW50aSBub2RpIGhlYWQgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJjb25zaWRlcmEgYW5jaGUgaSBwYWNrIGUgZ2xpIG9nZ2V0dGkgYWx0ZXJuYXRpdmkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MgorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICJjb250cm9sbGEgc29sbyBsYSBjb25uZXNzaW9uZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJhYmlsaXRhIGNvbnRyb2xsaSBwacO5IHJlc3RyaXR0aXZpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAic2NyaXZpIG9nZ2V0dGkgcGVuZGVudGkgaW4gLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODYgYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgInZpc3VhbGl6emEgbCdhdmFuemFtZW50byIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg3Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAidmlzdWFsaXp6YSBub21pIGRldHRhZ2xpYXRpIHBlciBnbGkgb2dnZXR0aSByYWdnaXVuZ2liaWxpIgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29udHJvbGxvIG9nZ2V0dGkgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiVzOiBvZ2dldHRvIG1hbmNhbnRlIgorCisjOiBidWlsdGluL2ZzY2suYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICJwYXJhbWV0cm8gbm9uIHZhbGlkbzogYXR0ZXNvIFNIQTEsIHByZXNlbnRlICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzozNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiZnN0YXQgZGkgJXMgbm9uIHJpdXNjaXRvOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICJhbmFsaXNpIGRlbGwnb3B6aW9uZSAnJXMnIGNvbiB2YWxvcmUgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbG8gc3RhdCBkaSAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDg0IGJ1aWx0aW4vbm90ZXMuYzoyNDAgYnVpbHRpbi90YWcuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgogIlxuIgogIiVzIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgYXZ2aWFyZSBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpOlxuIgorIkwndWx0aW1hIGVzZWN1emlvbmUgZGkgZ2MgaGEgc2VnbmFsYXRvIHF1YW50byBzZWd1ZS4gQ29ycmVnZ2kgbGEgY2F1c2FcbiIKKyJhbGxhIHJhZGljZSBlZCBlbGltaW5hICVzLlxuIgorIkwnb3BlcmF6aW9uZSBkaSBwdWxpemlhIGF1dG9tYXRpY2Egbm9uIHNhcsOgIGVzZWd1aXRhIGZpbm8gYWxsJ2VsaW1pbmF6aW9uZVxuIgorImRlbCBmaWxlLlxuIgogIlxuIgogIiVzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKLW1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCi1tc2dzdHIgIkF2dmlvIGRlbCBwcm9ncmFtbWEgcGVyIGxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgaW4gY29yc28uLi4iCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgImVsaW1pbmEgb2dnZXR0aSBub24gcmVmZXJlbnppYXRpIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNzUgbGliL21lcmdldG9vbC50Y2w6MzgzCi1tc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgotbXNnc3RyICJSaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIG5vbiByaXVzY2l0YS4iCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJzaWkgcGnDuSBhY2N1cmF0byAodGVtcGkgZGkgZXNlY3V6aW9uZSBtYWdnaW9yaSkiCiAKLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKKyM6IGJ1aWx0aW4vZ2MuYzo1NDIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJhYmlsaXRhIG1vZGFsaXTDoCBnYXJiYWdlIGNvbGxlY3RvciBhdXRvbWF0aWNhIgorCisjOiBidWlsdGluL2djLmM6NTQ1Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCiBtc2dzdHIgIiIKLSJMYSBjb2RpZmljYSBkZWkgY2FyYXR0ZXJpICclcycgc3BlY2lmaWNhdGEgcGVyIHR1dHRpIGdsaSBhcmNoaXZpIG5vbiDDqCB2YWxpZGEiCisiZm9yemEgbCdlc2VjdXppb25lIGRlbCBnYXJiYWdlIGNvbGxlY3RvciBhbmNoZSBuZWwgY2FzbyBpbiBjdWkgdmUgbmUgIgorInBvdHJlYmJlIGVzc2VyZSB1biBhbHRybyBpbiBlc2VjdXppb25lIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgorIzogYnVpbHRpbi9nYy5jOjU0OAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCiBtc2dzdHIgIiIKLSJMYSBjb2RpZmljYSBkZWkgY2FyYXR0ZXJpICclcycgc3BlY2lmaWNhdGEgcGVyIGwnYXJjaGl2aW8gYXR0dWFsZSAgbm9uIMOoICIKLSJ2YWxpZGEiCisiZXNlZ3VpIGlsIHJlcGFjayBkaSB0dXR0aSBnbGkgYWx0cmkgcGFjayBhZCBlY2NlemlvbmUgZGkgcXVlbGxvIHBpw7kgZ3JhbmRlIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMTcKLW1zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgotbXNnc3RyICJSaXByaXN0aW5hIHZhbG9yaSBwcmVkZWZpbml0aSIKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiYW5hbGlzaSBkZWwgdmFsb3JlICVzIGRpIGdjLmxvZ2V4cGlyeSBub24gcml1c2NpdGEiCiAKLSM6IGxpYi9vcHRpb24udGNsOjEyMQotbXNnaWQgIlNhdmUiCi1tc2dzdHIgIlNhbHZhIgorIzogYnVpbHRpbi9nYy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJhbmFsaXNpIGRlbCB2YWxvcmUgJXMgcGVyIGxhIHNjYWRlbnphIGRlbGxlIGVsaW1pbmF6aW9uaSBub24gcml1c2NpdGEiCiAKLSM6IGxpYi9vcHRpb24udGNsOjEzMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkFyY2hpdmlvIGRpICVzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzIKLW1zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgotbXNnc3RyICJUdXR0aSBnbGkgYXJjaGl2aSIKLQotIzogbGliL29wdGlvbi50Y2w6MTM4Ci1tc2dpZCAiVXNlciBOYW1lIgotbXNnc3RyICJOb21lIHV0ZW50ZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTM5Ci1tc2dpZCAiRW1haWwgQWRkcmVzcyIKLW1zZ3N0ciAiSW5kaXJpenpvIEVtYWlsIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDEKLW1zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKLW1zZ3N0ciAiUmllcGlsb2dvIG5lbGxlIHJldmlzaW9uaSBkaSBmdXNpb25lIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDIKLW1zZ2lkICJNZXJnZSBWZXJib3NpdHkiCi1tc2dzdHIgIlByb2xpc3NpdMOgIGRlbGxhIGZ1c2lvbmUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MwotbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCi1tc2dzdHIgIk1vc3RyYSBzdGF0aXN0aWNoZSBkZWxsZSBkaWZmZXJlbnplIGRvcG8gbGEgZnVzaW9uZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ0Ci1tc2dpZCAiVXNlIE1lcmdlIFRvb2wiCi1tc2dzdHIgIlByb2dyYW1tYSBkYSB1dGlsaXp6YXJlIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDYKLW1zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgotbXNnc3RyICJGaWRhdGkgZGVsbGUgZGF0ZSBkaSBtb2RpZmljYSBkZWkgZmlsZSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ3Ci1tc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKIG1zZ3N0ciAiIgotIkVmZmV0dHVhIHBvdGF0dXJhIGRlaSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIGR1cmFudGUgaWwgcmVjdXBlcm8iCisiQ29tcHJpbW8gaWwgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIHBlciBvdHRlbmVyZSBsZSBtaWdsaW9yaSBwcmVzdGF6aW9uaS5cbiIKIAotIzogbGliL29wdGlvbi50Y2w6MTQ4Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCi1tc2dzdHIgIkFwcGFpYSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIgorIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIkNvbXByaW1vIGlsIHJlcG9zaXRvcnkgcGVyIG90dGVuZXJlIGxlIG1pZ2xpb3JpIHByZXN0YXppb25pLlxuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDkKLW1zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKLW1zZ3N0ciAiUmljZXJjYSBjb3BpZSBzb2xvIG5laSBmaWxlIG1vZGlmaWNhdGkiCisjOiBidWlsdGluL2djLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIlZlZGkgXCJnaXQgaGVscCBnY1wiIHBlciBsZSBvcGVyYXppb25pIGRpIG1hbnV0ZW56aW9uZSBtYW51YWxpLlxuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTAKLW1zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKLW1zZ3N0ciAiTnVtZXJvIG1pbmltbyBkaSBsZXR0ZXJlIGNoZSBhdHRpdmFubyBsYSByaWNlcmNhIGRlbGxlIGNvcGllIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTEKLW1zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKLW1zZ3N0ciAiR2lvcm5pIGRpIGNvbnRlc3RvIG5lbGxhIGNyb25vbG9naWEgZGVsbGUgYW5ub3RhemlvbmkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MgotbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCi1tc2dzdHIgIk51bWVybyBkaSBsaW5lZSBkaSBjb250ZXN0byBuZWxsZSBkaWZmZXJlbnplIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTMKLW1zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgotbXNnc3RyICJMYXJnaGV6emEgZGVsIG1lc3NhZ2dpbyBkaSByZXZpc2lvbmUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NAotbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKLW1zZ3N0ciAiTW9kZWxsbyBwZXIgaWwgbm9tZSBkaSB1biBudW92byByYW1vIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTUKLW1zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCi1tc2dzdHIgIkNvZGlmaWNhIHByZWRlZmluaXRhIHBlciBpbCBjb250ZW51dG8gZGVpIGZpbGUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjIwMwotbXNnaWQgIkNoYW5nZSIKLW1zZ3N0ciAiQ2FtYmlhIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyMzAKLW1zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKLW1zZ3N0ciAiTGluZ3VhIGRpemlvbmFyaW86IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNTQKLW1zZ2lkICJDaGFuZ2UgRm9udCIKLW1zZ3N0ciAiQ2FtYmlhIGNhcmF0dGVyaSIKLQotIzogbGliL29wdGlvbi50Y2w6MjU4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hvb3NlICVzIgotbXNnc3RyICJTY2VnbGkgJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI2NAotbXNnaWQgInB0LiIKLW1zZ3N0ciAicHQuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNzgKLW1zZ2lkICJQcmVmZXJlbmNlcyIKLW1zZ3N0ciAiUHJlZmVyZW56ZSIKLQotIzogbGliL29wdGlvbi50Y2w6MzE0Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgc2FsdmFyZSBjb21wbGV0YW1lbnRlIGxlIG9wemlvbmk6IgotCi0jOiBsaWIvcmVtb3RlLnRjbDoxNjMKLW1zZ2lkICJSZW1vdmUgUmVtb3RlIgotbXNnc3RyICJSaW11b3ZpIGFyY2hpdmlvIHJlbW90byIKLQotIzogbGliL3JlbW90ZS50Y2w6MTY4Ci1tc2dpZCAiUHJ1bmUgZnJvbSIKLW1zZ3N0ciAiRWZmZXR0dWEgcG90YXR1cmEgZGEiCi0KLSM6IGxpYi9yZW1vdGUudGNsOjE3MwotbXNnaWQgIkZldGNoIGZyb20iCi1tc2dzdHIgIlJlY3VwZXJhIGRhIgotCi0jOiBsaWIvcmVtb3RlLnRjbDoyMTUKLW1zZ2lkICJQdXNoIHRvIgotbXNnc3RyICJQcm9wYWdhIHZlcnNvIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKLW1zZ2lkICJBZGQgUmVtb3RlIgotbXNnc3RyICJBZ2dpdW5naSBhcmNoaXZpbyByZW1vdG8iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAotbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgotbXNnc3RyICJBZ2dpdW5naSBudW92byBhcmNoaXZpbyByZW1vdG8iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgotbXNnaWQgIkFkZCIKLW1zZ3N0ciAiQWdnaXVuZ2kiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNwotbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgotbXNnc3RyICJEZXR0YWdsaSBzdWxsJ2FyY2hpdmlvIHJlbW90byIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCi1tc2dpZCAiTG9jYXRpb246IgotbXNnc3RyICJQb3NpemlvbmU6IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjIKLW1zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKLW1zZ3N0ciAiQWx0cmEgYXppb25lIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKLW1zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKLW1zZ3N0ciAiUmVjdXBlcmEgc3ViaXRvIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKLW1zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgotbXNnc3RyICJJbml6aWFsaXp6YSBsJ2FyY2hpdmlvIHJlbW90byBlIHByb3BhZ2EiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NwotbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCi1tc2dzdHIgIk5vbiBmYXJlIGFsdHJvIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAxCi1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKLW1zZ3N0ciAiSW5zZXJpcmUgdW4gbm9tZSBwZXIgbCdhcmNoaXZpbyByZW1vdG8uIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIiclcycgbm9uIMOoIHV0aWxpenphYmlsZSBjb21lIG5vbWUgZGkgYXJjaGl2aW8gcmVtb3RvLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgbCdhcmNoaXZpbyByZW1vdG8gJyVzJyBwb3N0byBpbiAnJXMnLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmV0Y2ggJXMiCi1tc2dzdHIgInJlY3VwZXJhIGRhICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgotbXNnc3RyICJSZWN1cGVybyAlcyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGluaXppYWxpenphcmUgbCdhcmNoaXZpbyBwb3N0byBpbiAnJXMnLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MyBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo2MwotIzogbGliL3RyYW5zcG9ydC50Y2w6ODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJwdXNoICVzIgotbXNnc3RyICJwcm9wYWdhIHZlcnNvICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKLW1zZ3N0ciAiSW1wb3N0byAlcyAoaW4gJXMpIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKLW1zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgotbXNnc3RyICJFbGltaW5hIHJhbW8gcmVtb3RvIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ3Ci1tc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgotbXNnc3RyICJEYSBhcmNoaXZpbyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICJSZW1vdG86IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQotbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCi1tc2dzdHIgIlBvc2l6aW9uZSBzcGVjaWZpY2E6IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Ci1tc2dpZCAiQnJhbmNoZXMiCi1tc2dzdHIgIlJhbWkiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Ci1tc2dpZCAiRGVsZXRlIE9ubHkgSWYiCi1tc2dzdHIgIkVsaW1pbmEgc29sbyBzZSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTEKLW1zZ2lkICJNZXJnZWQgSW50bzoiCi1tc2dzdHIgIkZ1c28gaW46IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgotbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKLW1zZ3N0ciAiU2kgcmljaGllZGUgdW4gcmFtbyBwZXIgJ0Z1c28gaW4nLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgotIlxuIgotIiAtICVzIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCiBtc2dzdHIgIiIKLSJJIHJhbWkgc2VndWVudGkgbm9uIHNvbm8gc3RhdGkgZnVzaSBjb21wbGV0YW1lbnRlIGluICVzOlxuIgotIlxuIgotIiAtICVzIgorImdjIMOoIGdpw6AgaW4gZXNlY3V6aW9uZSBzdWwgY29tcHV0ZXIgJyVzJyBjb24gUElEICU8UFJJdU1BWD4gKHVzYSAtLWZvcmNlIHNlICIKKyJub24gbG8gw6gpIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9nYy5jOjY5NAogbXNnaWQgIiIKLSJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKLSJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIHZlcmlmaWNhcmUgdW5hIG8gcGnDuSBmdXNpb25pOiBtYW5jYW5vIGxlIHJldmlzaW9uaSBuZWNlc3NhcmllLiAiCi0iUHJvdmEgcHJpbWEgYSByZWN1cGVyYXJsZSBkYSAlcy4iCisiQ2kgc29ubyB0cm9wcGkgb2dnZXR0aSBzcGFyc2kgbm9uIHJhZ2dpdW5naWJpbGk7IGVzZWd1aSAnZ2l0IHBydW5lJyBwZXIgIgorImVsaW1pbmFybGkuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNwotbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKLW1zZ3N0ciAiU2NlZ2xpZXJlIHVubyBvIHBpw7kgcmFtaSBkYSBjYW5jZWxsYXJlLiIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI5Cittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGdyZXAgWzxvcHppb25pPl0gWy1lXSA8cGF0dGVybj4gWzxyZXZpc2lvbmU+Li4uXSBbWy0tXSA8cGVyY29yc28+Li4uXSIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgotbXNnc3RyICJDYW5jZWxsYXppb25lIHJhbWkgZGEgJXMiCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBjcmVhemlvbmUgZGVsIHRocmVhZCBub24gcml1c2NpdGE6ICVzIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgotbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgotbXNnc3RyICJOZXNzdW4gYXJjaGl2aW8gc2VsZXppb25hdG8uIgorIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJzcGVjaWZpY2F0byBudW1lcm8gbm9uIHZhbGlkbyBkaSB0aHJlYWQgKCVkKSBwZXIgJXMiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCi1tc2dzdHIgIkFuYWxpc2kgaW4gY29yc28gJXMuLi4iCisjLiBUUkFOU0xBVE9SUzogJXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24KKyMuIHZhcmlhYmxlIGZvciB0d2Vha2luZyB0aHJlYWRzLCBjdXJyZW50bHkKKyMuIGdyZXAudGhyZWFkcworIy4KKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTM0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MjcKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICJub24gdmkgw6ggc3VwcG9ydG8gcGVyIGkgdGhyZWFkLCBpZ25vcm8gJXMiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjIxCi1tc2dpZCAiRmluZDoiCi1tc2dzdHIgIlRyb3ZhOiIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ2NyBidWlsdGluL2dyZXAuYzo1OTIgYnVpbHRpbi9ncmVwLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCB0cmVlICglcykiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjIzCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAiU3VjYyIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBncmVwIHN1IHVuIG9nZ2V0dG8gZGkgdGlwbyAlcyIKIAotIzogbGliL3NlYXJjaC50Y2w6MjQKLW1zZ2lkICJQcmV2IgotbXNnc3RyICJQcmVjIgorIzogYnVpbHRpbi9ncmVwLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgInN3aXRjaCAnJWMnIHJpY2hpZWRlIHVuIHZhbG9yZSBudW1lcmljbyIKIAotIzogbGliL3NlYXJjaC50Y2w6MjUKLW1zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKLW1zZ3N0ciAiRGlzdGluZ3VpIG1haXVzY29sZSIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgImNlcmNhIG5lbGwnaW5kZXggYW56aWNow6kgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgotbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBzaG9ydGN1dDoiCisjOiBidWlsdGluL2dyZXAuYzo4MTcKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAibGEgcmljZXJjYSBuZWkgY29udGVudXRpIG5vbiDDqCBnZXN0aXRhIGRhIEdpdCIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKLW1zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCi1tc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIGljb25hOiIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOQorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiY2VyY2Egc2lhIG5laSBmaWxlIHRyYWNjaWF0aSBzaWEgaW4gcXVlbGxpIG5vbiB0cmFjY2lhdGkiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NwotbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIkNvcnJldHRvcmUgb3J0b2dyYWZpY28gbm9uIHN1cHBvcnRhdG8iCisjOiBidWlsdGluL2dyZXAuYzo4MjEKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImlnbm9yYSBpIGZpbGUgc3BlY2lmaWNhdGkgaW4gJy5naXRpZ25vcmUnIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKLW1zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKLW1zZ3N0ciAiQ29ycmV6aW9uZSBvcnRvZ3JhZmljYSBpbmRpc3BvbmliaWxlIgorIzogYnVpbHRpbi9ncmVwLmM6ODIzCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICJjZXJjYSByaWNvcnNpdmFtZW50ZSBpbiBvZ25pIHNvdHRvbW9kdWxvIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKLW1zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCi1tc2dzdHIgIkxhIGNvbmZpZ3VyYXppb25lIGRlbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIG5vbiDDqCB2YWxpZGEiCisjOiBidWlsdGluL2dyZXAuYzo4MjYKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBsZSByaWdoZSBub24gY29ycmlzcG9uZGVudGkiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKLW1zZ3N0ciAiSWwgZGl6aW9uYXJpbyDDqCBzdGF0byByZWltcG9zdGF0byBzdSAlcy4iCisjOiBidWlsdGluL2dyZXAuYzo4MjgKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJyaWNlcmNhIGNvcnJpc3BvbmRlbnplIHNlbnphIGRpZmZlcmVuemUgbWFpdXNjb2xlL21pbnVzY29sZSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjczCi1tc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKLW1zZ3N0ciAiSWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyBoYSByaXBvcnRhdG8gdW4gZXJyb3JlIGFsbCdhdnZpbyIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMAorbXNnaWQgIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIgorbXNnc3RyICJjZXJjYSBjb3JyaXNwb25kZW56ZSBhaSBwYXR0ZXJuIHNvbG8gYSBpbml6aW8vZmluZSBwYXJvbGEiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJDb3JyZXR0b3JlIG9ydG9ncmFmaWNvIG5vbiByaWNvbm9zY2l1dG8iCisjOiBidWlsdGluL2dyZXAuYzo4MzIKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICJlbGFib3JhIGkgZmlsZSBiaW5hcmkgY29tZSB0ZXN0dWFsaSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICJOZXNzdW4gc3VnZ2VyaW1lbnRvIgorIzogYnVpbHRpbi9ncmVwLmM6ODM0Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJub24gY2VyY2FyZSBjb3JyaXNwb25kZW56ZSBhaSBwYXR0ZXJuIG5laSBmaWxlIGJpbmFyaSIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAotbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiSWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyBoYSBtYW5kYXRvIHVuIEVPRiBpbmFzcGV0dGF0byIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiZWxhYm9yYSBpIGZpbGUgYmluYXJpIGNvbiBmaWx0cmkgZGkgY29udmVyc2lvbmUgaW4gdGVzdG8iCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKLW1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKLW1zZ3N0ciAiRXJyb3JlIG5lbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIgorIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiY2VyY2EgbmVsbGUgc290dG9kaXJlY3RvcnkgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjMxCi1tc2dpZCAiTm8ga2V5cyBmb3VuZC4iCi1tc2dzdHIgIkNoaWF2aSBub24gdHJvdmF0ZS4iCisjOiBidWlsdGluL2dyZXAuYzo4NDEKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgInNjZW5kaSBhbCBwacO5IGRpIDxwcm9mb25kaXTDoD4gbGl2ZWxsaSIKIAotIzogbGliL3NzaGtleS50Y2w6MzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgotbXNnc3RyICJDaGlhdmUgcHViYmxpY2EgdHJvdmF0YSBpbjogJXMiCisjOiBidWlsdGluL2dyZXAuYzo4NDUKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAidXNhIGVzcHJlc3Npb25pIHJlZ29sYXJpIFBPU0lYIGVzdGVzZSIKIAotIzogbGliL3NzaGtleS50Y2w6NDAKLW1zZ2lkICJHZW5lcmF0ZSBLZXkiCi1tc2dzdHIgIkNyZWEgY2hpYXZlIgorIzogYnVpbHRpbi9ncmVwLmM6ODQ4Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJ1c2EgZXNwcmVzc2lvbmkgcmVnb2xhcmkgUE9TSVggZGkgYmFzZSAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhKSIKIAotIzogbGliL3NzaGtleS50Y2w6NTYKLW1zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKLW1zZ3N0ciAiQ29waWEgbmVnbGkgYXBwdW50aSIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJpbnRlcnByZXRhIGkgcGF0dGVybiBjb21lIHN0cmluZ2hlIGZpc3NlIgogCi0jOiBsaWIvc3Noa2V5LnRjbDo3MAotbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgotbXNnc3RyICJMYSB0dWEgY2hpYXZlIHB1YmJsaWNhIE9wZW5TU0giCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgInVzYSBlc3ByZXNzaW9uaSByZWdvbGFyaSBjb21wYXRpYmlsaSBjb24gUGVybCIKIAotIzogbGliL3NzaGtleS50Y2w6NzgKLW1zZ2lkICJHZW5lcmF0aW5nLi4uIgotbXNnc3RyICJDcmVhemlvbmUgY2hpYXZlIGluIGNvcnNvLi4uIgorIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgInZpc3VhbGl6emEgbnVtZXJpIGRpIHJpZ2EiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjg0Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2dyZXAuYzo4NTgKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgInZpc3VhbGl6emEgaWwgbnVtZXJvIGRpIGNvbG9ubmEgZGVsbGEgcHJpbWEgY29ycmlzcG9uZGVuemEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGkgbm9taSBmaWxlIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjAKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIG5vbWkgZmlsZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIG5vbWkgZmlsZSByZWxhdGl2aSBhbGxhIGRpcmVjdG9yeSBkaSBwcmltbyBsaXZlbGxvIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjQKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBpIG5vbWkgZmlsZSBhbnppY2jDqSBsZSByaWdoZSBjb3JyaXNwb25kZW50aSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgInNpbm9uaW1vIGRpIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjkKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBpIG5vbWkgZGVpIGZpbGUgbm9uIGNvcnJpc3BvbmRlbnRpIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJzdGFtcGEgTlVMIGRvcG8gaSBub21pIGZpbGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NAorbXNnaWQgInNob3cgb25seSBtYXRjaGluZyBwYXJ0cyBvZiBhIGxpbmUiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBsZSBwYXJ0aSBjb3JyaXNwb25kZW50aSBkaSB1bmEgcmlnYSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc2Cittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBpbCBudW1lcm8gZGkgY29ycmlzcG9uZGVuemUgYW56aWNow6kgbGUgcmlnaGUgY29ycmlzcG9uZGVudGkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICJldmlkZW56aWEgY29ycmlzcG9uZGVuemUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICJzdGFtcGEgdW5hIHJpZ2EgdnVvdGEgZnJhIGxlIGNvcnJpc3BvbmRlbnplIGluIGZpbGUgZGlmZmVyZW50aSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgxCittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgaWwgbm9tZSBmaWxlIHNvbG8gdW5hIHZvbHRhIHByaW1hIGRlbGxlIGNvcnJpc3BvbmRlbnplIG5lbGxvICIKKyJzdGVzc28gZmlsZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgInZpc3VhbGl6emEgPG4+IHJpZ2hlIGRpIGNvbnRlc3RvIHByaW1hIGUgZG9wbyBsZSBjb3JyaXNwb25kZW56ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg3Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAidmlzdWFsaXp6YSA8bj4gcmlnaGUgZGkgY29udGVzdG8gcHJpbWEgZGVsbGUgY29ycmlzcG9uZGVuemUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4OQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAidmlzdWFsaXp6YSA8bj4gcmlnaGUgZGkgY29udGVzdG8gZG9wbyBsZSBjb3JyaXNwb25kZW56ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkxCittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAidXNhIDxuPiB0aHJlYWQgZGkgbGF2b3JvIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJzY29yY2lhdG9pYSBwZXIgLUMgTlVNIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTUKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJ2aXN1YWxpenphIHVuYSByaWdhIGNvbiBpbCBub21lIGZ1bnppb25lIHByaW1hIGRlbGxlIGNvcnJpc3BvbmRlbnplIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTcKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAidmlzdWFsaXp6YSBsYSBmdW56aW9uZSBjaXJjb3N0YW50ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAwCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgImxlZ2dpIGxlIGNvcnJpc3BvbmRlbnplIGRhIHVuIGZpbGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMgorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiY2VyY2EgY29ycmlzcG9uZGVuemUgY29uIDxwYXR0ZXJuPiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA0Cittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiY29tYmluYSBpIHBhdHRlcm4gc3BlY2lmaWNhdGkgY29uIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiIgorInNlZ25hbGEgdW5hIGNvcnJpc3BvbmRlbnphIGNvbiBpbCBjb2RpY2UgZGkgdXNjaXRhIHNlbnphIGVtZXR0ZXJlIG91dHB1dCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE4Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgc29sbyBsZSBjb3JyaXNwb25kZW56ZSBuZWkgZmlsZSBpbiBjdWkgdmkgc29ubyBjb3JyaXNwb25kZW56ZSBwZXIgIgorInR1dHRpIGkgcGF0dGVybiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgInZpc3VhbGl6emEgbCdhbGJlcm8gZGkgYW5hbGlzaSBwZXIgbCdlc3ByZXNzaW9uZSBncmVwIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjQKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAicGFnZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyNAorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJ2aXN1YWxpenphIGkgZmlsZSBjb3JyaXNwb25kZW50aSBuZWwgcGFnZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyOAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiY29uc2VudGkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5MgorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgIm5lc3N1biBwYXR0ZXJuIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI4Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIi0tbm8taW5kZXggbyAtLXVudHJhY2tlZCBub24gcG9zc29ubyBlc3NlcmUgdXNhdGUgY29uIGxlIHJldmlzaW9uaSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSBsYSByZXZpc2lvbmUgJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJjb21iaW5hemlvbmUgZGkgb3B6aW9uaSBub24gdmFsaWRhLCBpZ25vcm8gLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJub24gdmkgw6ggc3VwcG9ydG8gcGVyIGkgdGhyZWFkLCBpZ25vcm8gLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDczIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgInNwZWNpZmljYXRvIG51bWVybyBub24gdmFsaWRvIGRpIHRocmVhZCAoJWQpIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDk2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgZnVuemlvbmEgc29sbyBzdWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMTkKK21zZ2lkICJvcHRpb24gbm90IHN1cHBvcnRlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorbXNnc3RyICJvcHppb25lIG5vbiBzdXBwb3J0YXRhIGNvbiAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyNQorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1jYWNoZWQgbyAtLXVudHJhY2tlZCBub24gcG9zc29ubyBlc3NlcmUgdXNhdGUgY29uIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzEKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgbm9uIHB1w7IgZXNzZXJlIHVzYXRhIHBlciBpIGNvbnRlbnV0aSB0cmFjY2lhdGkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzkKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4iCittc2dzdHIgInNvbm8gc3BlY2lmaWNhdGkgc2lhIC0tY2FjaGVkIHNpYSBkZWdsaSBhbGJlcmkiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NQogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKLSJcbiIKLSIlcyIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKIG1zZ3N0ciAiIgotIkltcG9zc2liaWxlIGF2dmlhcmUgc3NoLWtleWdlbjpcbiIKLSJcbiIKLSIlcyIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0aXBvPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKIAotIzogbGliL3NzaGtleS50Y2w6MTExCi1tc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgotbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVsbGEgY2hpYXZlLiIKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4NgorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTgKLW1zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgotbXNnc3RyICJMYSBjaGlhdmUgw6ggc3RhdGEgY3JlYXRhIGNvbiBzdWNjZXNzbywgbWEgbm9uIMOoIHN0YXRhIHRyb3ZhdGEuIgorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgInRpcG8gb2dnZXR0byIKIAotIzogbGliL3NzaGtleS50Y2w6MTIxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgotbXNnc3RyICJMYSBjaGlhdmUgw6ggaW46ICVzIgorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgInNjcml2aSBsJ29nZ2V0dG8gbmVsIGRhdGFiYXNlIG9nZ2V0dGkiCiAKLSM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCi1tc2dzdHIgIiUxJHMgLi4uICU2JHM6ICUyJCppIGRpICU0JCppICglNyQzaSUlKSIKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVnZ2kgbCdvZ2dldHRvIGRhbGxvIHN0YW5kYXJkIGlucHV0IgogCi0jOiBsaWIvdG9vbHMudGNsOjc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZyAlcyByZXF1aXJlcyBhIHNlbGVjdGVkIGZpbGUuIgotbXNnc3RyICJCaXNvZ25hIHNlbGV6aW9uYXJlIHVuIGZpbGUgcHJpbWEgZGkgZXNlZ3VpcmUgJXMuIgorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJzYWx2YSBpbCBmaWxlIGNvc8OsIGNvbSfDqCBzZW56YSBmaWx0cmkiCiAKLSM6IGxpYi90b29scy50Y2w6OTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKLW1zZ3N0ciAiVnVvaSBkYXZ2ZXJvIGVzZWd1aXJlICVzPyIKLQotIzogbGliL3Rvb2xzLnRjbDoxMTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sOiAlcyIKLW1zZ3N0ciAiQWNjZXNzb3JpbzogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZzogJXMiCi1tc2dzdHIgIkVzZWd1bzogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTQ5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKLW1zZ3N0ciAiSWwgcHJvZ3JhbW1hIGVzdGVybm8gw6ggdGVybWluYXRvIGNvbiBzdWNjZXNzbzogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgotbXNnc3RyICJJbCBwcm9ncmFtbWEgZXN0ZXJubyBoYSByaXBvcnRhdG8gdW4gZXJyb3JlOiAlcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKLW1zZ2lkICJBZGQgVG9vbCIKLW1zZ3N0ciAiQWdnaXVuZ2kgYWNjZXNzb3JpbyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKLW1zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKLW1zZ3N0ciAiQWdnaXVuZ2kgdW4gbnVvdm8gY29tYW5kbyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzMKLW1zZ2lkICJBZGQgZ2xvYmFsbHkiCi1tc2dzdHIgIkFnZ2l1bmdpIHBlciB0dXR0aSBnbGkgYXJjaGl2aSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDUKLW1zZ2lkICJUb29sIERldGFpbHMiCi1tc2dzdHIgIkRldHRhZ2xpIHN1bGwnYWNjZXNzb3JpbyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKLW1zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKLW1zZ3N0ciAiVXRpbGl6emEgaWwgc2VwYXJhdG9yZSAnLycgcGVyIGNyZWFyZSB1biBhbGJlcm8gZGkgc290dG9tZW51OiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NjEKLW1zZ2lkICJDb21tYW5kOiIKLW1zZ3N0ciAiQ29tYW5kbzoiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjc0Ci1tc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKLW1zZ3N0ciAiTW9zdHJhIHVuYSBmaW5lc3RyYSBkaSBkaWFsb2dvIHByaW1hIGRlbGwnYXZ2aW8iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjgwCi1tc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCi1tc2dzdHIgIkNoaWVkaSBhbGwndXRlbnRlIGRpIHNjZWdsaWVyZSB1bmEgcmV2aXNpb25lIChpbXBvc3RhICRSRVZJU0lPTikiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjg1Ci1tc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCi1tc2dzdHIgIkNoaWVkaSBhbGwndXRlbnRlIGRpIGZvcm5pcmUgYXJnb21lbnRpIGFnZ2l1bnRpdmkgKGltcG9zdGEgJEFSR1MpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo5MgotbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKLW1zZ3N0ciAiTm9uIG1vc3RyYXJlIGxhIGZpbmVzdHJhIGRpIGNvbWFuZG8iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjk3Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAiQXZ2aWEgc29sbyBzZSDDqCBzZWxlemlvbmF0YSB1bmEgZGlmZmVyZW56YSAoJEZJTEVOQU1FIG5vbiDDqCB2dW90bykiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjEyMQotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCi1tc2dzdHIgIkJpc29nbmEgZGFyZSB1biBub21lIGFsbCdhY2Nlc3NvcmlvLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTCdhY2Nlc3NvcmlvICclcycgZXNpc3RlIGdpw6AuIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDQKIG1zZ2lkICIiCi0iQ291bGQgbm90IGFkZCB0b29sOlxuIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorImVzZWd1aSBzZW1wbGljZW1lbnRlIGwnaGFzaCBkaSBkYXRpIGludXRpbGkgcGVyIGNyZWFyZSBvZ2dldHRpIGNvcnJvdHRpIGFsICIKKyJmaW5lIGRpIGVzZWd1aXJlIGlsIGRlYnVnIGRpIEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICJlbGFib3JhIGkgZmlsZSBjb21lIHNlIGZvc3Nlcm8gaW4gcXVlc3RvIHBlcmNvcnNvIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgInN0YW1wYSB0dXR0aSBpIGNvbWFuZGkgZGlzcG9uaWJpbGkiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgImVzY2x1ZGkgbGUgZ3VpZGUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJzdGFtcGEgdW4gZWxlbmNvIGRpIGd1aWRlIHV0aWxpIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICJzdGFtcGEgaSBub21pIGRpIHR1dHRlIGxlIHZhcmlhYmlsaSBkaSBjb25maWd1cmF6aW9uZSIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJ2aXN1YWxpenphIGxhIHBhZ2luYSBtYW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgInZpc3VhbGl6emEgaWwgbWFudWFsZSBuZWwgYnJvd3NlciBXZWIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU0Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgInZpc3VhbGl6emEgbGEgcGFnaW5hIGluZm8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAic3RhbXBhIGxhIGRlc2NyaXppb25lIGRlbCBjb21hbmRvIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21hbmRvPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJmb3JtYXRvIGRpIGFpdXRvICclcycgbm9uIHJpY29ub3NjaXV0byIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiRXNlY3V6aW9uZSBkaSBlbWFjc2NsaWVudCBub24gcml1c2NpdGEuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTcKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIlZlcmlmaWNhIGRlbGxhIHZlcnNpb25lIGRpIGVtYWNzY2xpZW50IG5vbiByaXVzY2l0YS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJsYSB2ZXJzaW9uZSAnJWQnIGRpIGVtYWNzY2xpZW50IMOoIHRyb3BwbyB2ZWNjaGlhICg8MjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgImVzZWN1emlvbmUgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IHBhdGggYWQgdW4gdmlzdWFsaXp6YXRvcmUgbWFuIHBhZ2VzIG5vbiBzdXBwb3J0YXRvLlxuIgorIlVzYSBpbnZlY2UgJ21hbi48dG9vbD4uY21kJy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBjb21hbmRvIHBlciB2aXN1YWxpenphdG9yZSBtYW4gcGFnZXMgc3VwcG9ydGF0by5cbiIKKyJQZXIgZmF2b3JlIHVzYSAnbWFuLjx0b29sPi5wYXRoJyBpbnZlY2UuIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJzogdmlzdWFsaXp6YXRvcmUgbWFuIHNjb25vc2NpdXRvLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzY3Cittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJuZXNzdW4gdmlzdWFsaXp6YXRvcmUgbWFuIGhhIGdlc3RpdG8gbGEgcmljaGllc3RhIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJuZXNzdW4gdmlzdWFsaXp6YXRvcmUgaW5mbyBoYSBnZXN0aXRvIGxhIHJpY2hpZXN0YSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM0IGJ1aWx0aW4vaGVscC5jOjQ0NSBnaXQuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbGlhc2VkIHRvICclcyciCittc2dzdHIgIiclcycgw6ggdW4gYWxpYXMgZGkgJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAic3RyaW5nYSBhbGlhcy4lcyBub24gdmFsaWRhOiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDc3IGJ1aWx0aW4vaGVscC5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAidXNvOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiVmVkaSAnZ2l0IGhlbHAgY29uZmlnJyBwZXIgbWFnZ2lvcmkgaW5mb3JtYXppb25pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgInRpcG8gb2dnZXR0byBub24gY29ycmlzcG9uZGVudGUgaW4gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIgorbXNnc3RyICJub24gc2kgw6ggcmljZXZ1dG8gbCdvZ2dldHRvIGF0dGVzbyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIm9nZ2V0dG8gJXM6IGF0dGVzbyB0aXBvICVzLCB0cm92YXRvICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gImltcG9zc2liaWxlIHJpZW1waXJlICVkIGJ5dGUiCittc2dzdHJbMV0gImltcG9zc2liaWxlIHJpZW1waXJlICVkIGJ5dGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OAorbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAiRU9GIHByZW1hdHVybyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiZXJyb3JlIGRpIGxldHR1cmEgaW4gaW5wdXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MQorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJ1c2F0aSBwacO5IGJ5dGUgZGkgcXVlbGxpIGRpc3BvbmliaWxpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo2MDQKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICJwYWNrIHRyb3BwbyBsYXJnbyBwZXIgbGEgZGVmaW5pemlvbmUgY29ycmVudGUgZGkgb2ZmX3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MSBidWlsdGluL3VucGFjay1vYmplY3RzLmM6OTUKK21zZ2lkICJwYWNrIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUiCittc2dzdHIgImlsIHBhY2sgc3VwZXJhIGxhIGRpbWVuc2lvbmUgbWFzc2ltYSBjb25zZW50aXRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgcGFjayAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjYKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAibGEgZmlybWEgZGVsIHBhY2sgbm9uIGNvaW5jaWRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAidmVyc2lvbmUgcGFjayAlPFBSSXUzMj4gbm9uIHN1cHBvcnRhdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAiaWwgcGFjayBoYSB1biBvZ2dldHRvIGRhbm5lZ2dpYXRvIGFsbCdvZmZzZXQgJTxQUkl1TUFYPjogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICJpbmZsYXRlIGhhIHJlc3RpdHVpdG8gaWwgY29kaWNlICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJvdmVyZmxvdyBkZWwgdmFsb3JlIGRlbGwnb2Zmc2V0IGJhc2UgZGVsIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjMKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgImwnb2Zmc2V0IGJhc2UgZGVsIGRlbHRhIMOoIGZ1b3JpIGRhbGwnaW50ZXJ2YWxsbyBjb25zZW50aXRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAidGlwbyBvZ2dldHRvICVkIHNjb25vc2NpdXRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjIKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBwcmVhZCBzdWwgZmlsZSBwYWNrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmaW5lIGRlbCBmaWxlIHBhY2sgcHJlbWF0dXJhLCAlPFBSSXVNQVg+IGJ5dGUgbWFuY2FudGUiCittc2dzdHJbMV0gImZpbmUgZGVsIGZpbGUgcGFjayBwcmVtYXR1cmEsICU8UFJJdU1BWD4gYnl0ZSBtYW5jYW50aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTkwCittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgImluY29uc2lzdGVuemEgZ3JhdmUgZGkgaW5mbGF0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0MSBidWlsdGluL2luZGV4LXBhY2suYzo3NjQKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMyBidWlsdGluL2luZGV4LXBhY2suYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJUUk9WQVRBIENPTExJU0lPTkUgU0hBMSBDT04gJXMgISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGxlIGluZm9ybWF6aW9uaSBzdWxsJ29nZ2V0dG8gZXNpc3RlbnRlOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSBsZWdnZXJlIGwnb2dnZXR0byAlcyBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJvZ2dldHRvIGJsb2IgJXMgbm9uIHZhbGlkbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NQorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAiZXJyb3JlIGZzY2sgbmVsbCdvZ2dldHRvIHNvdHRvcG9zdG8gYSBwYWNrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIk5vbiB0dXR0aSBnbGkgb2dnZXR0aSBmaWdsaW8gZGkgJXMgc29ubyByYWdnaXVuZ2liaWxpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTkgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUwCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJhcHBsaWNhemlvbmUgZGVsIGRlbHRhIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJSaWNlemlvbmUgZGVnbGkgb2dnZXR0aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkluZGljaXp6YXppb25lIGRlZ2xpIG9nZ2V0dGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTIKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgImlsIHBhY2sgw6ggY29ycm90dG8gKFNIQTEgbm9uIGNvcnJpc3BvbmRlKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NworbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgZnN0YXQgc3VsIGZpbGUgcGFjayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAiaWwgcGFjayBoYSBkYXRpIGludXRpbGkgYWxsYSBmaW5lIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTcyCittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAiY29uZnVzaW9uZSBvbHRyZSBvZ25pIGZvbGxpYSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NQorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIlJpc29sdXppb25lIGRlaSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjcmVhcmUgaWwgdGhyZWFkOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0NgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgImNvbmZ1c2lvbmUgb2x0cmUgb2duaSBmb2xsaWEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyWzBdICJjb21wbGV0YXRvIGNvbiAlZCBvZ2dldHRvIGxvY2FsZSIKK21zZ3N0clsxXSAiY29tcGxldGF0byBjb24gJWQgb2dnZXR0aSBsb2NhbGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIkNoZWNrc3VtIGluIGNvZGEgaW5hdHRlc28gcGVyICVzIChkaXNjbyBjb3Jyb3R0bz8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJwYWNrIGhhICVkIGRlbHRhIGlycmlzb2x0byIKK21zZ3N0clsxXSAicGFjayBoYSAlZCBkZWx0YSBpcnJpc29sdGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGRlZmxhdGUgc3VsbCdvZ2dldHRvIGFnZ2l1bnRvIGFsbGEgZmluZSAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICJsJ29nZ2V0dG8gbG9jYWxlICVzIMOoIGNvcnJvdHRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJpbCBub21lIGRlbCBmaWxlIHBhY2sgJyVzJyBub24gdGVybWluYSBjb24gJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBmaWxlICVzICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4gJXMgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjaGl1ZGVyZSBpbCBmaWxlICVzIHNjcml0dG8gJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ1OQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICJlcnJvcmUgbmVsbGEgY2hpdXN1cmEgZGVsIGZpbGUgcGFjayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3MworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGFyY2hpdmlhcmUgaWwgZmlsZSBwYWNrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDgxCittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGFyY2hpdmlhcmUgaW5kZXggZmlsZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAicGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IG5vbiB2YWxpZGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlIHBhY2sgJyVzJyBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgcGFjayBpZHggZXNpc3RlbnRlIHBlciAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIm5vbiBkZWx0YTogJWQgb2dnZXR0byIKK21zZ3N0clsxXSAibm9uIGRlbHRhOiAlZCBvZ2dldHRpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gImx1bmdoZXp6YSBkZWxsYSBjYXRlbmEgPSAlZDogJWx1IG9nZ2V0dG8iCittc2dzdHJbMV0gImx1bmdoZXp6YSBkZWxsYSBjYXRlbmEgPSAlZDogJWx1IG9nZ2V0dGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2ODkKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdG9ybmFyZSBhbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0MQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc1NyBidWlsdGluL2luZGV4LXBhY2suYzoxNzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiJXMgZXJyYXRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzc3Cittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIi0tZml4LXRoaW4gbm9uIHB1w7IgZXNzZXJlIHVzYXRvIHNlbnphIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzkKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tc3RkaW4gcmljaGllZGUgdW4gcmVwb3NpdG9yeSBHaXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODUKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IHNlbnphIHVuIG5vbWUgZGVsIGZpbGUgcGFjayBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgzMyBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTgxCittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgImVycm9yZSBmc2NrIG5lZ2xpIG9nZ2V0dGkgc290dG9wb3N0aSBhIHBhY2siCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHN0YXQgc3VsIG1vZGVsbG8gJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGxhIGRpcmVjdG9yeSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBsaW5rICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY3JlYXJlIGlsIGNvbGxlZ2FtZW50byBzaW1ib2xpY28gZGEgJyVzJyBhICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29waWFyZSAnJXMnIGluICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICJpZ25vcm8gaWwgbW9kZWxsbyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgaW4gJXMiCittc2dzdHIgIm1vZGVsbGkgbm9uIHRyb3ZhdGkgaW4gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAibm9uIGNvcGlvIGkgbW9kZWxsaSBkYSAnJXMnOiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBnZXN0aXJlIGlsIHRpcG8gZGkgZmlsZSAlZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzcG9zdGFyZSAlcyBpbiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgZXNpc3RlIGdpw6AiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIlJlaW5pemlhbGl6emF0byByZXBvc2l0b3J5IEdpdCBjb25kaXZpc28gZXNpc3RlbnRlIGluICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJSZWluaXppYWxpenphdG8gcmVwb3NpdG9yeSBHaXQgZXNpc3RlbnRlIGluICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIkluaXppYWxpenphdG8gcmVwb3NpdG9yeSBHaXQgY29uZGl2aXNvIHZ1b3RvIGluICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiSW5pemlhbGl6emF0byByZXBvc2l0b3J5IEdpdCB2dW90byBpbiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08ZGlyZWN0b3J5LW1vZGVsbG8+XSBbLS0iCisic2hhcmVkWz08cGVybWVzc2k+XV0gWzxkaXJlY3Rvcnk+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgInBlcm1lc3NpIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTIKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgInNwZWNpZmljYSBjaGUgaWwgcmVwb3NpdG9yeSBHaXQgZGV2ZSBlc3NlcmUgY29uZGl2aXNvIGNvbiBwacO5IHV0ZW50aSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI5IGJ1aWx0aW4vaW5pdC1kYi5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3RvcnkgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgImltcG9zc2liaWxlIG1vZGlmaWNhcmUgbGEgZGlyZWN0b3J5IGNvcnJlbnRlIGluICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIiVzIChvIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub24gY29uc2VudGl0byBzZW56YSBzcGVjaWZpY2FyZSAlcyAobyAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIkltcG9zc2liaWxlIGFjY2VkZXJlIGFsbCdhbGJlcm8gZGkgbGF2b3JvICclcyciCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTYKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsb3JlPl0pLi4uXSBbPGZpbGU+Li4uXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NQorbXNnaWQgImVkaXQgZmlsZXMgaW4gcGxhY2UiCittc2dzdHIgIm1vZGlmaWNhIGkgZmlsZSBzdWwgcG9zdG8iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTYKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICJyaW11b3ZpIHNwYXppIGRhbGxlIHN0cmluZ2hlIGZpbmFsaSB2dW90ZSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OQorbXNnaWQgIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIKK21zZ3N0ciAiZG92ZSBjb2xsb2NhcmUgbGEgbnVvdmEgc3RyaW5nYSBmaW5hbGUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAxCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgImF6aW9uZSBkYSBlc2VndWlyZSBzZSBsYSBzdHJpbmdhIGZpbmFsZSBlc2lzdGUgZ2nDoCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICJhemlvbmUgZGEgZXNlZ3VpcmUgc2UgbGEgc3RyaW5nYSBmaW5hbGUgw6ggbWFuY2FudGUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICJlbWV0dGkgaW4gb3V0cHV0IHNvbG8gbGUgc3RyaW5naGUgZmluYWxpIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNgorbXNnaWQgImRvIG5vdCBhcHBseSBjb25maWcgcnVsZXMiCittc2dzdHIgIm5vbiBhcHBsaWNhcmUgbGUgcmVnb2xlIGRpIGNvbmZpZ3VyYXppb25lIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICJ1bmlzY2kgaSB2YWxvcmkgcmVzaSBjb250aWd1aSBkYWdsaSBzcGF6aSBiaWFuY2hpIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgImltcG9zdGEgbGUgb3B6aW9uaSBkaSBhbmFsaXNpIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMAorbXNnaWQgImRvIG5vdCB0cmVhdCAtLS0gc3BlY2lhbGx5IgorbXNnc3RyICJub24gdHJhdHRhcmUgbGEgc2VxdWVuemEgLS0tIGluIG1vZG8gc3BlY2lhbGUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTExCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAic3RyaW5nYSBmaW5hbGUiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEyCittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgInN0cmluZ2EvZSBmaW5hbGUvaSBkYSBhZ2dpdW5nZXJlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEyMworbXNnaWQgIi0tdHJhaWxlciB3aXRoIC0tb25seS1pbnB1dCBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXRyYWlsZXIgY29uIC0tb25seS1pbnB1dCBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMzCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAibmVzc3VuIGZpbGUgZGkgaW5wdXQgc3BlY2lmaWNhdG8gcGVyIGxhIG1vZGlmaWNhIHN1bCBwb3N0byIKKworIzogYnVpbHRpbi9sb2cuYzo1NgorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzxvcHppb25pPl0gWzxpbnRlcnZhbGxvLXJldmlzaW9uaT5dIFtbLS1dIDxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL2xvZy5jOjU3Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFs8b3B6aW9uaT5dIDxvZ2dldHRvPi4uLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgIm9wemlvbmUgLS1kZWNvcmF0ZSBub24gdmFsaWRhOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAidmlzdWFsaXp6YSBzb3JnZW50ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzUKK21zZ2lkICJVc2UgbWFpbCBtYXAgZmlsZSIKK21zZ3N0ciAiVXNhIGlsIGZpbGUgbWFwcGF0dXJhIGUtbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzcKK21zZ2lkICJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgImRlY29yYSBzb2xvIGkgcmlmZXJpbWVudGkgY29ycmlzcG9uZGVudGkgYSA8cGF0dGVybj4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5Cittc2dpZCAiZG8gbm90IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIm5vbiBkZWNvcmFyZSBpIHJpZmVyaW1lbnRpIGNvcnJpc3BvbmRlbnRpIGEgPHBhdHRlcm4+IgorCisjOiBidWlsdGluL2xvZy5jOjE4MAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgIm9wemlvbmkgZGVjb3JhemlvbmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIkVsYWJvcmEgbCdpbnRlcnZhbGxvIHJpZ2hlIG4sbSBuZWwgZmlsZSwgY29udGFuZG9sZSBkYSAxIgorCisjOiBidWlsdGluL2xvZy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIk91dHB1dCBmaW5hbGU6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6IGZpbGUgbm9uIHZhbGlkbyIKKworIzogYnVpbHRpbi9sb2cuYzo1NTAgYnVpbHRpbi9sb2cuYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlIGwnb2dnZXR0byAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAidGlwbyBzY29ub3NjaXV0bzogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGNvdmVyIGZyb20gZGVzY3JpcHRpb24gbW9kZSIKK21zZ3N0ciAiJXM6IG1vZG8gbGV0dGVyYSBkYSBkZXNjcml6aW9uZSBub24gdmFsaWRvIgorCisjOiBidWlsdGluL2xvZy5jOjgyMQorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIG5vbiBoYSBhbGN1biB2YWxvcmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTM2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICJpbCBub21lIGRlbGxhIGRpcmVjdG9yeSBkaSBvdXRwdXQgw6ggdHJvcHBvIGx1bmdvIgorCisjOiBidWlsdGluL2xvZy5jOjk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSBwYXRjaCAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo5NjkKK21zZ2lkICJuZWVkIGV4YWN0bHkgb25lIHJhbmdlIgorbXNnc3RyICLDqCBuZWNlc3NhcmlvIHNwZWNpZmljYXJlIGVzYXR0YW1lbnRlIHVuIGludGVydmFsbG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTc5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgImlsIHZhbG9yZSBub24gw6ggdW4gaW50ZXJ2YWxsbyIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAibGEgbGV0dGVyYSBkaSBhY2NvbXBhZ25hbWVudG8gZGV2J2Vzc2VyZSBpbiBmb3JtYXRvIGUtbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQ5Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBjb3Zlci1sZXR0ZXIgZmlsZSIKK21zZ3N0ciAiY3JlYXppb25lIGRlbCBmaWxlIGxldHRlcmEgZGkgYWNjb21wYWduYW1lbnRvIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgInZhbG9yZSBpbi1yZXBseS10byBmb2xsZTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wemlvbmk+XSBbPGRhPiB8IDxpbnRlcnZhbGxvIHJldmlzaW9uaT5dIgorCisjOiBidWlsdGluL2xvZy5jOjEzMTMKK21zZ2lkICJ0d28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiZHVlIGRpcmVjdG9yeSBkaSBvdXRwdXQ/IgorCisjOiBidWlsdGluL2xvZy5jOjE0MjQgYnVpbHRpbi9sb2cuYzoyMTk3IGJ1aWx0aW4vbG9nLmM6MjE5OSBidWlsdGluL2xvZy5jOjIyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21taXQgJXMiCittc2dzdHIgImNvbW1pdCAlcyBzY29ub3NjaXV0byIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM0IGJ1aWx0aW4vcmVwbGFjZS5jOjU4IGJ1aWx0aW4vcmVwbGFjZS5jOjIwNworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYiCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSAnJXMnIGNvbWUgcmlmZXJpbWVudG8gdmFsaWRvIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzkKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGVzYXR0YW1lbnRlIGxhIGJhc2UgZGVsIG1lcmdlIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKK21zZ2lkICIiCisiZmFpbGVkIHRvIGdldCB1cHN0cmVhbSwgaWYgeW91IHdhbnQgdG8gcmVjb3JkIGJhc2UgY29tbWl0IGF1dG9tYXRpY2FsbHksXG4iCisicGxlYXNlIHVzZSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHRvIHRyYWNrIGEgcmVtb3RlIGJyYW5jaC5cbiIKKyJPciB5b3UgY291bGQgc3BlY2lmeSBiYXNlIGNvbW1pdCBieSAtLWJhc2U9PGJhc2UtY29tbWl0LWlkPiBtYW51YWxseSIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHJlY3VwZXJhcmUgbCd1cHN0cmVhbSwgc2UgdnVvaSByZWdpc3RyYXJlIGF1dG9tYXRpY2FtZW50ZVxuIgorImlsIGNvbW1pdCBkaSBiYXNlIHVzYSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHBlciB0cmFjY2lhcmUgdW4gYnJhbmNoXG4iCisicmVtb3RvLlxuIgorIkluIGFsdGVybmF0aXZhIHB1b2kgc3BlY2lmaWNhcmUgbWFudWFsbWVudGUgaWwgY29tbWl0IGRpIGJhc2UgY29uXG4iCisiLS1iYXNlPTxJRCBjb21taXQgZGkgYmFzZT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MworbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgZXNhdHRhbWVudGUgbGEgYmFzZSBkZWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3NAorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZCBiZSB0aGUgYW5jZXN0b3Igb2YgcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAiaWwgY29tbWl0IGRpIGJhc2UgZG92cmViYmUgZXNzZXJlIGwnYW50ZW5hdG8gZGVsbCdlbGVuY28gcmV2aXNpb25pIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzgKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAiaWwgY29tbWl0IGRpIGJhc2Ugbm9uIGRvdnJlYmJlIGVzc2VyZSBuZWxsJ2VsZW5jbyByZXZpc2lvbmkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgImltcG9zc2liaWxlIG90dGVuZXJlIGwnSUQgZGVsbGEgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MworbXNnaWQgImZhaWxlZCB0byBpbmZlciByYW5nZS1kaWZmIHJhbmdlcyIKK21zZ3N0ciAiaW5mZXJlbnphIGRlZ2xpIGludGVydmFsbGkgcmFuZ2UtZGlmZiBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYyOQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgInVzYSBbUEFUQ0ggbi9tXSBhbmNoZSBjb24gdW5hIHNpbmdvbGEgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzMgorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICJ1c2EgW1BBVENIXSBhbmNoZSBjb24gcGnDuSBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM2Cittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgInN0YW1wYSBsZSBwYXRjaCBzdWxsbyBzdGFuZGFyZCBvdXRwdXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzOAorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICJnZW5lcmEgdW5hIGxldHRlcmEgZGkgYWNjb21wYWduYW1lbnRvIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDAKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgInVzYSB1bmEgc2VxdWVuemEgbnVtZXJpY2Egc2VtcGxpY2UgcGVyIGkgbm9taSBmaWxlIGRpIG91dHB1dCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQxCittc2dpZCAic2Z4IgorbXNnc3RyICJzdWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDIKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAidXNhIDxzdWZmPiBhbnppY2jDqSAnLnBhdGNoJyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ0Cittc2dpZCAic3RhcnQgbnVtYmVyaW5nIHBhdGNoZXMgYXQgPG4+IGluc3RlYWQgb2YgMSIKK21zZ3N0ciAiaW5pemlhIGEgbnVtZXJhcmUgbGUgcGF0Y2ggZGEgPG4+IGFuemljaMOpIGRhIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NgorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAiY29udHJhc3NlZ25hIGxhIHNlcmllIGNvbWUgbCduLWVzaW1hIHZlcnNpb25lIHJldmlzaW9uYXRhIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDgKK21zZ2lkICJVc2UgW1JGQyBQQVRDSF0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJVc2EgW1JGQyBQQVRDSF0gYW56aWNow6kgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICJtb2RvLWxldHRlcmEtZGEtZGVzY3JpemlvbmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MgorbXNnaWQgImdlbmVyYXRlIHBhcnRzIG9mIGEgY292ZXIgbGV0dGVyIGJhc2VkIG9uIGEgYnJhbmNoJ3MgZGVzY3JpcHRpb24iCittc2dzdHIgIiIKKyJnZW5lcmEgcGFydGkgZGkgdW5hIGxldHRlcmEgZCdhY2NvbXBhZ25hbWVudG8gYmFzYW5kb3NpIHN1bGxhIGRlc2NyaXppb25lIGRpIgorIiB1biBicmFuY2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiVXNhIFs8cHJlZmlzc28+XSBhbnppY2jDqSBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTcKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgInNhbHZhIGkgZmlsZSByaXN1bHRhbnRpIGluIDxkaXI+IgorCisjOiBidWlsdGluL2xvZy5jOjE2NjAKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAibm9uIGVsaW1pbmFyZS9hZ2dpdW5nZXJlIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIm5vbiBtYW5kYXJlIGluIG91dHB1dCBkaWZmIGJpbmFyaSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY1Cittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgIm1hbmRhIGluIG91dHB1dCB1biBoYXNoIGNvc3RpdHVpdG8gZGEgc29saSB6ZXJpIG5lbGwnaW50ZXN0YXppb25lIEZyb20iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAibm9uIGluY2x1ZGVyZSB1bmEgcGF0Y2ggY29ycmlzcG9uZGVudGUgYSB1biBjb21taXQgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2OQorbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgaWwgZm9ybWF0byBkZWxsYSBwYXRjaCBhbnppY2jDqSBsJ2ltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSAocGF0Y2ggIgorIisgc3RhdCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAiTWVzc2FnZ2lzdGljYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcyCittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJpbnRlc3RhemlvbmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgImFnZ2l1bmdpIGludGVzdGF6aW9uZSBlLW1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAiZS1tYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAiYWdnaXVuZ2kgaW50ZXN0YXppb25lIEE6IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiYWdnaXVuZ2kgaW50ZXN0YXppb25lIENjOiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc4Cittc2dpZCAiaWRlbnQiCittc2dzdHIgImlkZW50aXTDoCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc5Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorImltcG9zdGEgbCdpbmRpcml6em8gRGEgYSA8aWRlbnRpdMOgPiAobyBhbGwnaWRlbnRpdMOgIGRpIGNoaSBoYSBjcmVhdG8gaWwgIgorImNvbW1pdCBzZSBhc3NlbnRlKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgxCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAiSUQgbWVzc2FnZ2lvIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODIKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgInJlbmRpIGxhIHByaW1hIGUtbWFpbCB1bmEgcmlzcG9zdGEgYSA8SUQgbWVzc2FnZ2lvPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgzIGJ1aWx0aW4vbG9nLmM6MTY4NgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICJkZWxpbWl0YXRvcmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgImFsbGVnYSBsYSBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg3Cittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAiaW5jbHVkaSBsYSBwYXRjaCBuZWwgbWVzc2FnZ2lvIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTEKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiIgorImFiaWxpdGEgaWwgcmFnZ3J1cHBhbWVudG8gbWVzc2FnZ2kgcGVyIGNvbnZlcnNhemlvbmUsIHN0aWxpOiBzdXBlcmZpY2lhbGUsICIKKyJwcm9mb25kbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJmaXJtYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk0Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICJhZ2dpdW5naSB1bmEgZmlybWEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NQorbXNnaWQgImJhc2UtY29tbWl0IgorbXNnc3RyICJjb21taXQgZGkgYmFzZSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk2Cittc2dpZCAiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIKK21zZ3N0ciAiIgorImFnZ2l1bmdpIGxlIGluZm9ybWF6aW9uaSBwcmVyZXF1aXNpdG8gcGVyIGwnYWxiZXJvIGFsbGEgc2VyaWUgZGVsbGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiYWdnaXVuZ2kgdW5hIGZpcm1hIGRhIGZpbGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIm5vbiBzdGFtcGFyZSBpIG5vbWkgZmlsZSBkZWxsZSBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAxCittc2dpZCAic2hvdyBwcm9ncmVzcyB3aGlsZSBnZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgInZpc3VhbGl6emEgbCdhdmFuemFtZW50byBkZWxsJ29wZXJhemlvbmUgZGkgZ2VuZXJhemlvbmUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMworbXNnaWQgInNob3cgY2hhbmdlcyBhZ2FpbnN0IDxyZXY+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKyJ2aXN1YWxpenphIGxlIG1vZGlmaWNoZSByaXNwZXR0byBhIDxyZXZpc2lvbmU+IG5lbGxhIGxldHRlcmEgZGkgIgorImFjY29tcGFnbmFtZW50byBvIGluIHVuYSBwYXRjaCBzaW5nb2xhIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDYKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmVmc3BlYz4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgbGUgbW9kaWZpY2hlIHJpc3BldHRvIGEgPHNwZWNpZmljYXRvcmUgcmV2aXNpb25lPiBuZWxsYSBsZXR0ZXJhICIKKyJkaSBhY2NvbXBhZ25hbWVudG8gbyBpbiB1bmEgcGF0Y2ggc2luZ29sYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAicGVyY2VudHVhbGUgaW4gYmFzZSBhIGN1aSB2aWVuZSBwZXNhdGEgbGEgY3JlYXppb25lIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAicmlnYSBpZGVudCBub24gdmFsaWRhOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxODA3Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgImxlIG9wemlvbmkgLW4gZSAtayBzb25vIG11dHVhbWVudGUgZXNjbHVzaXZlIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDkKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJsZSBvcHppb25pIC0tc3ViamVjdC1wcmVmaXgvLS1yZmMgZSAtayBzb25vIG11dHVhbWVudGUgZXNjbHVzaXZlIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTcKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxOQorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgyMQorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1jaGVjayBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg1NAorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICJzdGFuZGFyZCBvdXRwdXQsIG8gZGlyZWN0b3J5LCBxdWFsZSBkZWkgZHVlPyIKKworIzogYnVpbHRpbi9sb2cuYzoxOTU4Cittc2dpZCAiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICItLWludGVyZGlmZiByaWNoaWVkZSAtLWNvdmVyLWxldHRlciBvIHVuYSBzaW5nb2xhIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjIKK21zZ2lkICJJbnRlcmRpZmY6IgorbXNnc3RyICJJbnRlcmRpZmY6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJkaWZmIGFnYWluc3QgdiVkOiIKK21zZ3N0ciAiSW50ZXJkaWZmIHJpc3BldHRvIGFsbGEgdmVyc2lvbmUgJWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIi0tY3JlYXRpb24tZmFjdG9yIHJpY2hpZWRlIC0tcmFuZ2UtZGlmZiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTczCittc2dpZCAiLS1yYW5nZS1kaWZmIHJlcXVpcmVzIC0tY292ZXItbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiLS1yYW5nZS1kaWZmIHJpY2hpZWRlIC0tY292ZXItbGV0dGVyIG8gdW5hIHNpbmdvbGEgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk4MQorbXNnaWQgIlJhbmdlLWRpZmY6IgorbXNnc3RyICJSYW5nZS1kaWZmOiIKKworIzogYnVpbHRpbi9sb2cuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJSYW5nZS1kaWZmIHJpc3BldHRvIGFsbGEgdmVyc2lvbmUgJWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlIGZpcm1hICclcyciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiR2VuZXJhemlvbmUgZGVsbGUgcGF0Y2ggaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjA3MworbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICJjcmVhemlvbmUgZGVpIGZpbGUgZGkgb3V0cHV0IG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTMyCittc2dpZCAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iCittc2dzdHIgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXRlPl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIHRyb3ZhcmUgdW4gYnJhbmNoIHJlbW90byB0cmFjY2lhdG8sIHNwZWNpZmljYSA8dXBzdHJlYW0+ICIKKyJtYW51YWxtZW50ZS5cbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFs8b3B6aW9uaT5dIFs8ZmlsZT4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI2Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiaWRlbnRpZmljYSBsbyBzdGF0byBkZWwgZmlsZSBjb24gaSB0YWciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjgKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAidXNhIGxldHRlcmUgbWludXNjb2xlIHBlciBpIGZpbGUgY2hlIHNpICdhc3N1bW9ubyBub24gbW9kaWZpY2F0aSciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICJ1c2EgbGV0dGVyZSBtaW51c2NvbGUgcGVyIGkgZmlsZSAnZnNtb25pdG9yIGNsZWFuJyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMgorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICJ2aXN1YWxpenphIGZpbGUgaW4gY2FjaGUgbmVsbCdvdXRwdXQgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzQKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzdWFsaXp6YSBmaWxlIGVsaW1pbmF0aSBuZWxsJ291dHB1dCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzdWFsaXp6YSBmaWxlIG1vZGlmaWNhdGkgbmVsbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc3VhbGl6emEgYWx0cmkgZmlsZSBuZWxsJ291dHB1dCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXN1YWxpenphIGZpbGUgaWdub3JhdGkgbmVsbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgaWwgbm9tZSBkZWxsJ29nZ2V0dG8gXCJjb250ZW51dGkgbmVsbCdhcmVhIGRpIHN0YWdpbmdcIiAiCisibmVsbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICJ2aXN1YWxpenphIGkgZmlsZSBuZWwgZmlsZXN5c3RlbSBjaGUgZGV2b25vIGVzc2VyZSByaW1vc3NpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJ2aXN1YWxpenphIHNvbG8gaSBub21pIGRlbGxlIGRpcmVjdG9yeSAnYWx0cm8nIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgInZpc3VhbGl6emEgaSBmaW5lIHJpZ2EgZGVpIGZpbGUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTEKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIGxlIGRpcmVjdG9yeSB2dW90ZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzdWFsaXp6YSBmaWxlIG5vbiBzb3R0b3Bvc3RpIGEgbWVyZ2UgbmVsbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAidmlzdWFsaXp6YSBpbmZvcm1hemlvbmkgcmVzb2x2ZS11bmRvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJzYWx0YSBpIGZpbGUgY29ycmlzcG9uZGVudGkgYSBcImVzcHJlc3Npb25lIHJlZ29sYXJlXCIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjEKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICJsZSBlc3ByZXNzaW9uaSByZWdvbGFyaSBkaSBlc2NsdXNpb25lIHNvbm8gbGV0dGUgZGEgPGZpbGU+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY0Cittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIiIKKyJsZWdnaSBlc3ByZXNzaW9uaSByZWdvbGFyaSBkaSBlc2NsdXNpb25lIGFnZ2l1bnRpdmUgc3BlY2lmaWNoZSBwZXIgZGlyZWN0b3J5ICIKKyJkYSA8ZmlsZT4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjYKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICJhZ2dpdW5naSBsZSBlc2NsdXNpb25pIHN0YW5kYXJkIGRpIEdpdCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJyZW5kaSBsJ291dHB1dCByZWxhdGl2byBhbGxhIGRpcmVjdG9yeSByYWRpY2UgZGVsIHByb2dldHRvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTczCittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgImVzZWd1aSByaWNvcnNpdmFtZW50ZSBzdWkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgInNlIGRlaSA8ZmlsZT4gbm9uIHNvbm8gbmVsbCdpbmRpY2UsIGNvbnNpZGVyYWxvIHVuIGVycm9yZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NgorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICJlc3ByZXNzaW9uZSBhbGJlcm8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisiZmluZ2kgY2hlIGkgcGVyY29yc2kgcmltb3NzaSBkYSA8ZXNwcmVzc2lvbmUgYWxiZXJvPiBpbiBwb2kgc2lhbm8gYW5jb3JhICIKKyJwcmVzZW50aSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3OQorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgInZpc3VhbGl6emEgaW5mb3JtYXppb25pIGRpIGRlYnVnIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGVzZWd1aWJpbGU+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyaWZlcmltZW50aT4uLi5dXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICJub24gc3RhbXBhcmUgbCdVUkwgZGVsIHJlbW90byIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MCBidWlsdGluL2xzLXJlbW90ZS5jOjYyIGJ1aWx0aW4vcmViYXNlLmM6MTUxOAorbXNnaWQgImV4ZWMiCittc2dzdHIgImVzZWd1aWJpbGUiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAicGVyY29yc28gZGkgZ2l0LXVwbG9hZC1wYWNrIHN1bGwnaG9zdCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjUKK21zZ2lkICJsaW1pdCB0byB0YWdzIgorbXNnc3RyICJsaW1pdGF0aSBhaSB0YWciCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAibGltaXRhdGkgYWxsZSBoZWFkIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgaSB0YWcgcmltb3NzaSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICJ0aWVuaSBpbiBjb25zaWRlcmF6aW9uZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MgorbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAiIgorImVzY2kgY29uIGNvZGljZSBkJ3VzY2l0YSAyIHNlIG5vbiBzb25vIHN0YXRpIHRyb3ZhdGkgcmlmZXJpbWVudGkgIgorImNvcnJpc3BvbmRlbnRpIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgInZpc3VhbGl6emEgcmlmZXJpbWVudG8gc290dG9zdGFudGUgb2x0cmUgYWxsJ29nZ2V0dG8gYSBjdWkgcHVudGEiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjMwCittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzxvcHppb25pPl0gPGVzcHJlc3Npb25lIGFsYmVybz4gWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjgKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBhbGJlcmkiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAiZXNlZ3VpIHJpY29yc2l2YW1lbnRlIG5laSBzb3R0b2FsYmVyaSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAidmlzdWFsaXp6YSBnbGkgYWxiZXJpIGR1cmFudGUgbGEgcmljb3JzaW9uZSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAidGVybWluYSBsZSB2b2NpIGNvbiB1biBieXRlIE5VTCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiaW5jbHVkaSBkaW1lbnNpb25pIG9nZ2V0dG8iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOCBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJlbGVuY2Egc29sbyBpIG5vbWkgZmlsZSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAidXNhIG5vbWkgcGVyY29yc28gY29tcGxldGkiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAiIgorImVsZW5jYSBsJ2ludGVybyBhbGJlcm87IG5vbiBzb2xvIGxhIGRpcmVjdG9yeSBjb3JyZW50ZSAoaW1wbGljYSAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWFpbHNwbGl0LmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IG1ib3g6ICclcyciCittc2dzdHIgIm1ib3ggdnVvdGE6ICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxvcHppb25pPl0gWzxjb21taXQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU2Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTcKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgImxvIHN3aXRjaCAnbScgcmljaGllZGUgdW4gdmFsb3JlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgImwnb3B6aW9uZSBgJXMnIHJpY2hpZWRlIHVuIHZhbG9yZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHRyb3ZhcmUgbGEgc3RyYXRlZ2lhIGRpIG1lcmdlICclcycuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiTGUgc3RyYXRlZ2llIGRpc3BvbmliaWxpIHNvbm86IgorCisjOiBidWlsdGluL21lcmdlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJMZSBzdHJhdGVnaWUgcGVyc29uYWxpenphdGUgZGlzcG9uaWJpbGkgc29ubzoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDQgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAibm9uIHZpc3VhbGl6emFyZSB1biBkaWZmc3RhdCBhbCB0ZXJtaW5lIGRlbCBtZXJnZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NyBidWlsdGluL3B1bGwuYzoxNTUKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgInZpc3VhbGl6emEgdW4gZGlmZnN0YXQgYWwgdGVybWluZSBkZWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDggYnVpbHRpbi9wdWxsLmM6MTU4Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKHNpbm9uaW1vIGRpIC0tc3RhdCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTAgYnVpbHRpbi9wdWxsLmM6MTYxCittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisiYWdnaXVuZ2kgKGFsIHBpw7kgPG4+KSB2b2NpIGRhbCByZWdpc3RybyBicmV2ZSBhbCBtZXNzYWdnaW8gZGkgY29tbWl0IGRlbCAiCisibWVyZ2UiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTMgYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgImNyZWEgdW4gc2luZ29sbyBjb21taXQgYW56aWNow6kgZXNlZ3VpcmUgdW4gbWVyZ2UiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTUgYnVpbHRpbi9wdWxsLmM6MTcwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICJlc2VndWkgdW4gY29tbWl0IHNlIGlsIG1lcmdlIGhhIHN1Y2Nlc3NvIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU3IGJ1aWx0aW4vcHVsbC5jOjE3MworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAibW9kaWZpY2EgaWwgbWVzc2FnZ2lvIHByaW1hIGRpIGVzZWd1aXJlIGlsIGNvbW1pdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgImNvbnNlbnRpIGZhc3QgZm9yd2FyZCAoaW1wb3N0YXppb25lIHByZWRlZmluaXRhKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MSBidWlsdGluL3B1bGwuYzoxODAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICJpbnRlcnJvbXBpIHNlIGlsIGZhc3QgZm9yd2FyZCBub24gw6ggcG9zc2liaWxlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY1IGJ1aWx0aW4vcHVsbC5jOjE4MworbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAidmVyaWZpY2EgY2hlIGlsIGNvbW1pdCBzcGVjaWZpY2F0byBhYmJpYSB1bmEgZmlybWEgR1BHIHZhbGlkYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE4NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTIgYnVpbHRpbi9yZWJhc2UuYzoxNTMxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgInN0cmF0ZWdpYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL3B1bGwuYzoxODgKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgInN0cmF0ZWdpYSBkaSBtZXJnZSBkYSB1c2FyZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIm9wemlvbmU9dmFsb3JlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vcHVsbC5jOjE5MgorbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIm9wemlvbmUgcGVyIGxhIHN0cmF0ZWdpYSBkaSBtZXJnZSBzZWxlemlvbmF0YSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAibWVzc2FnZ2lvIGRpIGNvbW1pdCBkZWwgbWVyZ2UgKHBlciB1biBtZXJnZSBub24gZmFzdCBmb3J3YXJkKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3OAorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJpbnRlcnJvbXBpIGlsIG1lcmdlIGF0dHVhbG1lbnRlIGluIGNvcnNvIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgwCittc2dpZCAiLS1hYm9ydCBidXQgbGVhdmUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhbG9uZSIKK21zZ3N0ciAiZXNlZ3VpIC0tYWJvcnQgbWEgbWFudGllbmkgaW1tdXRhdGkgbCdpbmRpY2UgZSBsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODIKK21zZ2lkICJjb250aW51ZSB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiY29udGludWEgaWwgbWVyZ2UgYXR0dWFsbWVudGUgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODQgYnVpbHRpbi9wdWxsLmM6MTk5Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJjb25zZW50aSBkaSB1bmlyZSBjcm9ub2xvZ2llIG5vbiBjb3JyZWxhdGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTAKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAiaWdub3JhIGdsaSBob29rIHByZS1tZXJnZS1jb21taXQgZSBjb21taXQtbXNnIgorCisjOiBidWlsdGluL21lcmdlLmM6MzA3Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgZXNlZ3VpcmUgc3Rhc2guIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEyCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJlc2VjdXppb25lIGRpIHN0YXNoIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJub24gw6ggdW4gb2dnZXR0byB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzM5IGJ1aWx0aW4vbWVyZ2UuYzozNTYKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJyZWFkLXRyZWUgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzg2Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAobnVsbGEgZGkgY3VpIGVzZWd1aXJlIGxvIHNxdWFzaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJDb21taXQgZGkgc3F1YXNoIC0tIG5vbiBhZ2dpb3JubyBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJOZXNzdW4gbWVzc2FnZ2lvIGRpIG1lcmdlIC0tIEhFQUQgbm9uIHZpZW5lIGFnZ2lvcm5hdG9cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICInJXMnIG5vbiBwdW50YSBhZCB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiU3RyaW5nYSBicmFuY2guJXMubWVyZ2VvcHRpb25zIGVycmF0YTogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDUKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJOb24gZ2VzdGlzY28gbnVsbGEgY2hlIG5vbiBzaWEgaWwgbWVyZ2UgZGkgZHVlIGhlYWQuIgorCisjOiBidWlsdGluL21lcmdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIk9wemlvbmUgc2Nvbm9zY2l1dGEgcGVyIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBsZWdnZXJlIGRhICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisiTm9uIGVzZWd1byBpbCBjb21taXQgZGVsIG1lcmdlOyB1c2EgJ2dpdCBjb21taXQnIHBlciBjb21wbGV0YXJlIGlsIG1lcmdlLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODAxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkluc2VyaXNjaSB1biBtZXNzYWdnaW8gZGkgY29tbWl0IHBlciBzcGllZ2FyZSBwZXJjaMOpIMOoIG5lY2Vzc2FyaW9cbiIKKyJxdWVzdG8gbWVyZ2UsIGluIHBhcnRpY29sYXJlIHNlIHNpIGVzZWd1ZSBpbCBtZXJnZSBkaSB1biB1cHN0cmVhbVxuIgorImFnZ2lvcm5hdG8gaW4gdW4gdG9waWMgYnJhbmNoLlxuIgorIlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA2Cittc2dpZCAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiVW4gbWVzc2FnZ2lvIHZ1b3RvIGludGVycm9tcGVyw6AgaWwgY29tbWl0LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiTGUgcmlnaGUgY2hlIGluaXppYW5vIGNvbiAnJWMnIHNhcmFubm8gaWdub3JhdGUgZSB1biBtZXNzYWdnaW8gdnVvdG9cbiIKKyJpbnRlcnJvbXBlcsOgIGlsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2MgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGRpIGNvbW1pdCB2dW90by4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICJTcGxlbmRpZG8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIk1lcmdlIGF1dG9tYXRpY28gZmFsbGl0bzsgcmlzb2x2aSBpIGNvbmZsaXR0aSBlZCBlc2VndWkgaWwgY29tbWl0XG4iCisiZGVsIHJpc3VsdGF0by5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3NworbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTmVzc3VuIGJyYW5jaCBjb3JyZW50ZS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzkKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5lc3N1biByZW1vdGUgcGVyIGlsIGJyYW5jaCBjb3JyZW50ZS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODEKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5lc3N1biB1cHN0cmVhbSBkaSBkZWZhdWx0IGRlZmluaXRvIHBlciBpbCBicmFuY2ggY29ycmVudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIk5lc3N1biBicmFuY2ggY2hlIHRyYWNjaSB1biByZW1vdG8gcGVyICVzIGRhICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIgorbXNnc3RyICJWYWxvcmUgZXJyYXRvICclcycgbmVsbCdhbWJpZW50ZSAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgIm5vbiDDqCBxdWFsY29zYSBkaSBjdWkgcG9zc2lhbW8gZXNlZ3VpcmUgaWwgbWVyZ2UgaW4gJXM6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4MAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICJub24gw6ggcXVhbGNvc2EgZGkgY3VpIHBvc3NpYW1vIGVzZWd1aXJlIGlsIG1lcmdlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4MworbXNnaWQgIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYWJvcnQgbm9uIHJpY2hpZWRlIGFyZ29tZW50aSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODcKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIk5vbiBjJ8OoIG5lc3N1biBtZXJnZSBkYSBpbnRlcnJvbXBlcmUgKE1FUkdFX0hFQUQgbWFuY2FudGUpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTYKK21zZ2lkICItLXF1aXQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tcXVpdCBub24gcmljaGllZGUgYXJnb21lbnRpIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMwOQorbXNnaWQgIi0tY29udGludWUgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tY29udGludWUgbm9uIHJpY2hpZWRlIGFyZ29tZW50aSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIk5vbiBjJ8OoIG5lc3N1biBtZXJnZSBpbiBjb3JzbyAoTUVSR0VfSEVBRCBtYW5jYW50ZSkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJOb24gaGFpIGNvbmNsdXNvIGlsIG1lcmdlIChNRVJHRV9IRUFEIGVzaXN0ZSkuXG4iCisiRXNlZ3VpIGlsIGNvbW1pdCBkZWxsZSBtb2RpZmljaGUgcHJpbWEgZGkgZXNlZ3VpcmUgaWwgbWVyZ2UuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNgorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJOb24gaGFpIGNvbmNsdXNvIGlsIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGVzaXN0ZSkuXG4iCisiRXNlZ3VpIGlsIGNvbW1pdCBkZWxsZSBtb2RpZmljaGUgcHJpbWEgZGkgZXNlZ3VpcmUgaWwgbWVyZ2UuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiSWwgY2hlcnJ5LXBpY2sgbm9uIMOoIHN0YXRvIGNvbmNsdXNvIChDSEVSUllfUElDS19IRUFEIGVzaXN0ZSkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICJOb24gw6ggcG9zc2liaWxlIGNvbWJpbmFyZSAtLXNxdWFzaCBjb24gLS1uby1mZi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzU1Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1jb21taXQuIgorbXNnc3RyICJOb24gw6ggcG9zc2liaWxlIGNvbWJpbmFyZSAtLXNxdWFzaCBjb24gLS1jb21taXQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3MQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICJOZXNzdW4gY29tbWl0IHNwZWNpZmljYXRvIGUgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm9uIGltcG9zdGF0by4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzg4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIkxvIHNxdWFzaCBkaSB1biBjb21taXQgaW4gdW4naGVhZCB2dW90YSBub24gw6ggYW5jb3JhIHN1cHBvcnRhdG8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIlVuIGNvbW1pdCBub24gZmFzdCBmb3J3YXJkIG5vbiBoYSBzZW5zbyBpbiB1bidoZWFkIHZ1b3RhIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyAtIG5vbiDDqCBxdWFsY29zYSBwZXIgY3VpIHBvc3NpYW1vIGVzZWd1aXJlIGlsIG1lcmdlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NworbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIlNpIHB1w7IgZXNlZ3VpcmUgc29sbyBpbCBtZXJnZSBkaSB1bm8gZSB1biBzb2xvIGNvbW1pdCBpbiB1bidoZWFkIHZ1b3RhIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ3NgorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIm1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgaWwgbWVyZ2UgZGkgY3Jvbm9sb2dpZSBub24gY29ycmVsYXRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4NQorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkdpw6AgYWdnaW9ybmF0by4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICJBZ2dpb3JuYW1lbnRvIGRpICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiUHJvdm8gY29uIHVuIG1lcmdlIHZlcmFtZW50ZSBiYW5hbGUgZGVudHJvIGwnaW5kaWNlLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5vLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU2OQorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIgorbXNnc3RyICJHacOgIGFnZ2lvcm5hdG8uIE9oIHPDrCEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTc1Cittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICJGYXN0IGZvcndhcmQgbm9uIHBvc3NpYmlsZSwgaW50ZXJyb21wbyBsJ29wZXJhemlvbmUuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5OCBidWlsdGluL21lcmdlLmM6MTY2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAiUmlwcmlzdGlubyBsJ2FsYmVybyBpbiB1bm8gc3RhdG8gcHVsaXRvLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJUZW50YXRpdm8gY29uIGxhIHN0cmF0ZWdpYSBkaSBtZXJnZSAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiTmVzc3VuYSBzdHJhdGVnaWEgZGkgbWVyZ2UgaGEgZ2VzdGl0byBpbCBtZXJnZS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIk1lcmdlIGNvbiBsYSBzdHJhdGVnaWEgJXMgZmFsbGl0by5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIlVzbyAlcyBwZXIgcHJlcGFyYXJlIHVuYSByaXNvbHV6aW9uZSBtYW51YWxlLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY3NworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiSWwgbWVyZ2UgYXV0b21hdGljbyDDqCBhbmRhdG8gYSBidW9uIGZpbmU7IGZlcm1hdG8gcHJpbWEgZGVsIGNvbW1pdCBjb21lICIKKyJyaWNoaWVzdG9cbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM1Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzYKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyaWZlcmltZW50bz4gWzxjb21taXQ+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICJtYW5kYSBpbiBvdXRwdXQgdHV0dGkgZ2xpIGFudGVuYXRpIGNvbXVuaSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU1Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICJ0cm92YSBnbGkgYW50ZW5hdGkgcGVyIHVuIHNpbmdvbG8gbWVyZ2UgYSBuIHZpZSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU3Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgImVsZW5jYSBsZSByZXZpc2lvbmkgbm9uIHJhZ2dpdW5naWJpbGkgZGFsbGUgYWx0cmUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1OQorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiaWwgcHJpbW8gYXJnb21lbnRvIMOoIGFudGVuYXRvIGRlbGwnYWx0cm8/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiIgorInRyb3ZhIGlsIHB1bnRvIGRpIGZvcmsgZGkgPGNvbW1pdD4gZGFsIHJlZ2lzdHJvIGRlaSByaWZlcmltZW50aSBkaSAiCisiPHJpZmVyaW1lbnRvPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OQorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wemlvbmk+XSBbLUwgPG5vbWUxPiBbLUwgPG9yaWdpbmFsZT4gWy1MIDxub21lMj5dXV0gIgorIjxmaWxlMT4gPGZpbGUgb3JpZ2luYWxlPiA8ZmlsZTI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImludmlhIGkgcmlzdWx0YXRpIGFsbG8gc3RhbmRhcmQgb3V0cHV0IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNgorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJ1c2EgdW4gbWVyZ2UgYmFzYXRvIHN1IGRpZmYzIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAicGVyIGkgY29uZmxpdHRpLCB1c2EgbGEgbm9zdHJhIHZlcnNpb25lIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJwZXIgaSBjb25mbGl0dGksIHVzYSBsYSBsb3JvIHZlcnNpb25lIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgInBlciBpIGNvbmZsaXR0aSwgdXNhIHVuYSB2ZXJzaW9uZSB1bml0YSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAicGVyIGkgY29uZmxpdHRpLCB1c2EgcXVlc3RhIGRpbWVuc2lvbmUgZGVpIGNvbnRyYXNzZWduaSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgIm5vbiBlbWV0dGVyZSBhdnZpc2kgaW4gY2FzbyBkaSBjb25mbGl0dGkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ3Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICJpbXBvc3RhIGV0aWNoZXR0ZSBwZXIgZmlsZTEvZmlsZSBvcmlnaW5hbGUvZmlsZTIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gJXMiCittc2dzdHIgIm9wemlvbmUgc2Nvbm9zY2l1dGEgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnb2dnZXR0byAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2UuIElnbm9yaW5nICVzLiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZXMuIElnbm9yaW5nICVzLiIKK21zZ3N0clswXSAiaW1wb3NzaWJpbGUgZ2VzdGlyZSBwacO5IGRpICVkIGJhc2UuIElnbm9ybyAlcy4iCittc2dzdHJbMV0gImltcG9zc2liaWxlIGdlc3RpcmUgcGnDuSBkaSAlZCBiYXNpLiBJZ25vcm8gJXMuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAibm9uIGdlc3Rpc2NvIG51bGxhIGNoZSBub24gc2lhIGlsIG1lcmdlIGRpIGR1ZSBoZWFkLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NCBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXNvbHZlcmUgaWwgcmlmZXJpbWVudG8gJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiTWVyZ2UgZGkgJXMgY29uICVzIGluIGNvcnNvXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICJsJ2lucHV0IMOoIHRlcm1pbmF0byBkYSBOVUwiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU1IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJjb25zZW50aSBvZ2dldHRpIG1hbmNhbnRpIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAiY29uc2VudGkgbGEgY3JlYXppb25lIGRpIHBpw7kgZGkgdW4gYWxiZXJvIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPG9wemlvbmk+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC1zaXplPTwiCisiZGltZW5zaW9uZT4pIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKyJkaXJlY3Rvcnkgb2dnZXR0aSBjb250ZW5lbnRlIHVuIGluc2llbWUgZGkgY29wcGllIHBhY2tmaWxlIGUgcGFjay1pbmRleCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjkKK21zZ2lkICIiCisiZHVyaW5nIHJlcGFjaywgY29sbGVjdCBwYWNrLWZpbGVzIG9mIHNtYWxsZXIgc2l6ZSBpbnRvIGEgYmF0Y2ggdGhhdCBpcyAiCisibGFyZ2VyIHRoYW4gdGhpcyBzaXplIgorbXNnc3RyICIiCisiZHVyYW50ZSBpbCByZXBhY2ssIHJhY2NvZ2xpIGkgZmlsZSBwYWNrIGRpIGRpbWVuc2lvbmkgcGnDuSBwaWNjb2xlIGluIHVuICIKKyJncnVwcG8gcGnDuSBncmFuZGUgZGkgcXVlc3RlIGRpbWVuc2lvbmkiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjUwIGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NjcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMiCittc2dzdHIgInRyb3BwaSBhcmdvbWVudGkiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICJsJ29wemlvbmUgLS1iYXRjaC1zaXplIMOoIGNvbnNlbnRpdGEgc29sbyBwZXIgaWwgc290dG9jb21hbmRvICdyZXBhY2snIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgc3ViY29tbWFuZDogJXMiCittc2dzdHIgInNvdHRvY29tYW5kbyBzY29ub3NjaXV0bzogJXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzxvcHppb25pPl0gPHNvcmdlbnRlPi4uLiA8ZGVzdGluYXppb25lPiIKKworIzogYnVpbHRpbi9tdi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAiTGEgZGlyZWN0b3J5ICVzIMOoIG5lbGwnaW5kaWNlIGUgbm9uIMOoIHNwZWNpZmljYXRvIHVuIHNvdHRvbW9kdWxvPyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJFc2VndWkgbG8gc3RhZ2UgZGVsbGUgbW9kaWZpY2hlIGEgLmdpdG1vZHVsZXMgbyBlc2VndWluZSBsbyBzdGFzaCBwZXIgIgorInByb2NlZGVyZSIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIMOoIG5lbGwnaW5kaWNlIgorCisjOiBidWlsdGluL212LmM6MTI1Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJmb3J6YSBzcG9zdGFtZW50by9yaWRlbm9taW5hemlvbmUgYW5jaGUgc2UgbGEgZGVzdGluYXppb25lIGVzaXN0ZSIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJzYWx0YSBlcnJvcmkgc3Bvc3RhbWVudG8vcmlkZW5vbWluYXppb25lIgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJsYSBkZXN0aW5hemlvbmUgJyVzJyBub24gw6ggdW5hIGRpcmVjdG9yeSIKKworIzogYnVpbHRpbi9tdi5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIkNvbnRyb2xsbyBsYSByaWRlbm9taW5hemlvbmUgZGkgJyVzJyBpbiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICJzb3VyZ2VudGUgZXJyYXRhIgorCisjOiBidWlsdGluL212LmM6MTg3Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSBzcG9zdGFyZSBsYSBkaXJlY3RvcnkgaW4gc8OpIHN0ZXNzYSIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIm5vbiDDqCBwb3NzaWJpbGUgc3Bvc3RhcmUgbGEgZGlyZWN0b3J5IHN1IHVuIGZpbGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJsYSBkaXJlY3Rvcnkgc29yZ2VudGUgw6ggdnVvdGEiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjQKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJub24gw6ggc290dG8gY29udHJvbGxvIGRpIHZlcnNpb25lIgorCisjOiBidWlsdGluL212LmM6MjI3Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICJsYSBkZXN0aW5hemlvbmUgZXNpc3RlIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgInNvdnJhc2NyaXR0dXJhIGRpICVzIGluIGNvcnNvIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc292cmFzY3JpdmVyZSIKKworIzogYnVpbHRpbi9tdi5jOjI0MQorbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAiZm9udGkgbXVsdGlwbGUgcGVyIGxhIHN0ZXNzYSBkZXN0aW5hemlvbmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImxhIGRpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUgbm9uIGVzaXN0ZSIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIHNvcmdlbnRlPSVzLCBkZXN0aW5hemlvbmU9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiUmlub21pbmF6aW9uZSBkaSAlcyBpbiAlcyBpbiBjb3Jzb1xuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzE2IGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICJyaW5vbWluYSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwMworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3B6aW9uaT5dIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA0Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxvcHppb25pPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3B6aW9uaT5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjIKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgInN0YW1wYSBzb2xvIGkgbm9taSAobm9uIGxvIFNIQS0xKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MworbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAidXNhIHNvbG8gdGFnIHBlciBkZW5vbWluYXJlIGkgY29tbWl0IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY1Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgInVzYSBzb2xvIGkgcmlmZXJpbWVudGkgY29ycmlzcG9uZGVudGkgYSA8cGF0dGVybj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjcKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImlnbm9yYSBpIHJpZmVyaW1lbnRpIGNvcnJpc3BvbmRlbnRpIGEgPHBhdHRlcm4+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY5Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAiZWxlbmNhIHR1dHRpIGkgY29tbWl0IHJhZ2dpdW5naWJpbGkgZGEgdHV0dGkgaSByaWZlcmltZW50aSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MAorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVnZ2kgZGFsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzEKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgImNvbnNlbnRpIGRpIHN0YW1wYXJlIG5vbWkgYG5vbiBkZWZpbml0b2AgKGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzcKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiZGVyZWZlcmVuemlhIHRhZyBuZWxsJ2lucHV0ICh1c28gaW50ZXJubykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyaWZlcmltZW50byBub3RlPl0gW2xpc3QgWzxvZ2dldHRvPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyaWZlcmltZW50byBub3RlPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSAiCisiPG1lc3NhZ2dpbz4gfCAtRiA8ZmlsZT4gfCAoLWMgfCAtQykgPG9nZ2V0dG8+XSBbPG9nZ2V0dG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyaWZlcmltZW50byBub3RlPl0gY29weSBbLWZdIDxvZ2dldHRvIHNvcmdlbnRlPiA8b2dnZXR0byAiCisiZGVzdGluYXppb25lPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJpZmVyaW1lbnRvIG5vdGU+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bWVzc2FnZ2lvPiAiCisifCAtRiA8ZmlsZT4gfCAoLWMgfCAtQykgPG9nZ2V0dG8+XSBbPG9nZ2V0dG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmlmZXJpbWVudG8gbm90ZT5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2dnZXR0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJpZmVyaW1lbnRvIG5vdGU+XSBzaG93IFs8b2dnZXR0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJpZmVyaW1lbnRvIG5vdGU+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVnaWE+XSAiCisiPHJpZmVyaW1lbnRvIG5vdGU+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJpZmVyaW1lbnRvIG5vdGU+XSByZW1vdmUgWzxvZ2dldHRvPi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmlmZXJpbWVudG8gbm90ZT5dIHBydW5lIFstbl0gWy12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmlmZXJpbWVudG8gbm90ZT5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NAorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8b2dnZXR0bz5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYWRkIFs8b3B6aW9uaT5dIFs8b2dnZXR0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgY29weSBbPG9nZ2V0dG8+XSA8b2dnZXR0byBzb3JnZW50ZT4gPG9nZ2V0dG8gZGVzdGluYXppb25lPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxvZ2dldHRvIHNvcmdlbnRlPiA8b2dnZXR0byBkZXN0aW5hemlvbmU+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYwCittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B6aW9uaT5dIFs8b2dnZXR0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPG9nZ2V0dG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwCittc2dpZCAiZ2l0IG5vdGVzIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHNob3cgWzxvZ2dldHRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NQorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B6aW9uaT5dIDxyaWZlcmltZW50byBub3RlPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHppb25pPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wemlvbmk+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgyCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2dnZXR0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODcKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPG9wemlvbmk+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkyCittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcKK21zZ2lkICJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6IgorbXNnc3RyICJTY3JpdmkvbW9kaWZpY2EgbGUgbm90ZSBwZXIgbCdvZ2dldHRvIHNlZ3VlbnRlOiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXZ2aWFyZSAnc2hvdycgcGVyIGwnb2dnZXR0byAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBsJ291dHB1dCBkaSAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0ZXJtaW5hcmUgJ3Nob3cnIHBlciBsJ29nZ2V0dG8gJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5NworbXNnaWQgInBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiZm9ybmlzY2kgaSBjb250ZW51dGkgZGVsbGUgbm90ZSB1c2FuZG8gbCdvcHppb25lIC1tIG8gLUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGwnb2dnZXR0byBub3RhIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICJpIGNvbnRlbnV0aSBkZWxsYSBub3RhIHNvbm8gc3RhdGkgbGFzY2lhdGkgaW4gJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGFwcmlyZSBvIGxlZ2dlcmUgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlICclcycgY29tZSByaWZlcmltZW50byB2YWxpZG8uIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAibGV0dHVyYSBkZWxsJ29nZ2V0dG8gJyVzJyBub24gcml1c2NpdGEuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpIGRhdGkgZGVsbGEgbm90YSBkYWxsJ29nZ2V0dG8gbm9uIGJsb2IgJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJyaWdhIGRpIGlucHV0IG1hbGZvcm1hdGE6ICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJjb3BpYSBkZWxsZSBub3RlIGRhICclcycgYSAnJXMnIG5vbiByaXVzY2l0YSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorIm1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgJXMgZGVsbGUgbm90ZSBpbiAlcyAoYWwgZGkgZnVvcmkgZGkgcmVmcy9ub3Rlcy8pIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAidHJvcHBpIHBhcmFtZXRyaSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIm5lc3N1bmEgbm90YSB0cm92YXRhIHBlciBsJ29nZ2V0dG8gJXMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEwIGJ1aWx0aW4vbm90ZXMuYzo1NzYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICJjb250ZW51dGkgZGVsbGEgbm90YSBjb21lIHN0cmluZ2EiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTMgYnVpbHRpbi9ub3Rlcy5jOjU3OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJjb250ZW51dGkgZGVsbGEgbm90YSBpbiB1biBmaWxlIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE2IGJ1aWx0aW4vbm90ZXMuYzo1ODIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgInJpdXNhIGwnb2dnZXR0byBub3RhIHNwZWNpZmljYXRvIHBlciBwb2kgbW9kaWZpY2FybG8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTkgYnVpbHRpbi9ub3Rlcy5jOjU4NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAicml1c2EgbCdvZ2dldHRvIG5vdGEgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjIgYnVpbHRpbi9ub3Rlcy5jOjU4OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAiY29uc2VudGkgaWwgc2FsdmF0YWdnaW8gZGkgdW5hIG5vdGEgdnVvdGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjMgYnVpbHRpbi9ub3Rlcy5jOjQ5NgorbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgInNvc3RpdHVpc2NpIGxlIG5vdGUgZXNpc3RlbnRpIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSBub3RlLiBUcm92YXRlIG5vdGUgZXNpc3RlbnRpIHBlciBsJ29nZ2V0dG8gJXMuIFVzYSAnLSIKKyJmJyBwZXIgc292cmFzY3JpdmVyZSBsZSBub3RlIGVzaXN0ZW50aSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ2MyBidWlsdGluL25vdGVzLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiU292cmFzY3JpdHR1cmEgZGVsbGUgbm90ZSBlc2lzdGVudGkgcGVyIGwnb2dnZXR0byAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiUmltb3ppb25lIGRlbGxhIG5vdGEgcGVyIGwnb2dnZXR0byAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk3Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImxlZ2dpIG9nZ2V0dGkgZGFsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiIgorImNhcmljYSBsYSBjb25maWd1cmF6aW9uZSBkaSByaXNjcml0dHVyYSBwZXIgPGNvbWFuZG8+IChpbXBsaWNhIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJ0cm9wcGkgcG9jaGkgcGFyYW1ldHJpIgorCisjOiBidWlsdGluL25vdGVzLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGNvcGlhcmUgbGUgbm90ZS4gVHJvdmF0ZSBub3RlIGVzaXN0ZW50aSBwZXIgbCdvZ2dldHRvICVzLiBVc2EgJy0iCisiZicgcGVyIHNvdnJhc2NyaXZlcmUgbGUgbm90ZSBlc2lzdGVudGkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIm5vdGUgbWFuY2FudGkgcGVyIGwnb2dnZXR0byBzb3JnZW50ZSAlcy4gSW1wb3NzaWJpbGUgY29waWFyZS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorIkxlIG9wemlvbmkgLW0vLUYvLWMvLUMgcGVyIGlsIHNvdHRvY29tYW5kbyAnZWRpdCcgc29ubyBkZXByZWNhdGUuXG4iCisiVXNhICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBhbCBsb3JvIHBvc3RvLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6Njk4Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAiZWxpbWluYXppb25lIGRlbCByaWZlcmltZW50byBOT1RFU19NRVJHRV9QQVJUSUFMIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAiZWxpbWluYXppb25lIGRlbCByaWZlcmltZW50byBOT1RFU19NRVJHRV9SRUYgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAicmltb3ppb25lIGRlbGwnYWxiZXJvIGRpIGxhdm9ybyBkaSAnZ2l0IG5vdGVzIG1lcmdlJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjIKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCByZWYgTk9URVNfTUVSR0VfUEFSVElBTCIKK21zZ3N0ciAibGV0dHVyYSBkZWwgcmlmZXJpbWVudG8gTk9URVNfTUVSR0VfUEFSVElBTCBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBjb21taXQgZGEgTk9URVNfTUVSR0VfUEFSVElBTC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0IGRhIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzM5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICJyaXNvbHV6aW9uZSBkaSBOT1RFU19NRVJHRV9SRUYgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICJmaW5hbGl6emF6aW9uZSBkZWwgbWVyZ2UgZGVsbGUgbm90ZSBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAic3RyYXRlZ2lhIGRpIG1lcmdlIGRlbGxlIG5vdGUgJXMgc2Nvbm9zY2l1dGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgZ2VuZXJhbGkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIG1lcmdlIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorInJpc29sdmkgaSBjb25mbGl0dGkgZGVsbGUgbm90ZSB1c2FuZG8gbGEgc3RyYXRlZ2lhIGRhdGEgKG1hbnVhbC9vdXJzL3RoZWlycy8iCisidW5pb24vY2F0X3NvcnRfdW5pcSkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJDb21taXQgZGVsbGUgbm90ZSBub24gc290dG9wb3N0ZSBhIG1lcmdlIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorImZpbmFsaXp6YSBpbCBtZXJnZSBkZWxsZSBub3RlIGVzZWd1ZW5kbyBpbCBjb21taXQgZGVsbGUgbm90ZSBub24gc290dG9wb3N0ZSAiCisiYSBtZXJnZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIkludGVycnV6aW9uZSBkZWxsYSByaXNvbHV6aW9uZSBkZWwgbWVyZ2UgZGVsbGUgbm90ZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJpbnRlcnJvbXBpIGlsIG1lcmdlIGRlbGxlIG5vdGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MDcKK21zZ2lkICJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiCittc2dzdHIgImltcG9zc2liaWxlIHVzYXJlIGNvbnRlbXBvcmFuZWFtZW50ZSAtLWNvbW1pdCwgLS1hYm9ydCBvIC1zLy0tc3RyYXRlZ3kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTIKK21zZ2lkICJtdXN0IHNwZWNpZnkgYSBub3RlcyByZWYgdG8gbWVyZ2UiCittc2dzdHIgImRldmkgc3BlY2lmaWNhcmUgdW4gcmlmZXJpbWVudG8gbm90ZSBkYSBzb3R0b3BvcnJlIGEgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAtcy8tLXN0cmF0ZWd5OiAlcyIKK21zZ3N0ciAiLXMvLS1zdHJhdGVneSBzY29ub3NjaXV0YTogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgIsOoIGdpw6AgaW4gY29yc28gdW4nb3BlcmF6aW9uZSBkaSBtZXJnZSBkZWxsZSBub3RlIGluICVzIGFsIHBlcmNvcnNvICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgIiIKKyJzYWx2YXRhZ2dpbyBkZWwgY29sbGVnYW1lbnRvIGFsIHJpZmVyaW1lbnRvIGNvcnJlbnRlIGRlbGxlIG5vdGUgKCVzKSBub24gIgorInJpdXNjaXRvIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkLiBGaXggY29uZmxpY3RzIGluICVzIGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICIKKyInZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLSIKKyJhYm9ydCcuXG4iCittc2dzdHIgIiIKKyJNZXJnZSBhdXRvbWF0aWNvIGRlbGxlIG5vdGUgbm9uIHJpdXNjaXRvLiBSaXNvbHZpIGkgY29uZmxpdHRpIGluICVzIGVkICIKKyJlc2VndWkgaWwgY29tbWl0IGRlbCByaXN1bHRhdG8gY29uICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG8gaW50ZXJyb21waSAiCisiaWwgbWVyZ2UgY29uICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTcgYnVpbHRpbi90YWcuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIlJpc29sdXppb25lIGRpICclcycgY29tZSByaWZlcmltZW50byB2YWxpZG8gbm9uIHJpdXNjaXRhLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiTCdvZ2dldHRvICVzIG5vbiBoYSBub3RlLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTEyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICJpbCB0ZW50YXRpdm8gZGkgcmltdW92ZXJlIHVuYSBub3RhIGluZXNpc3RlbnRlIG5vbiDDqCB1biBlcnJvcmUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVnZ2kgaSBub21pIGRlZ2xpIG9nZ2V0dGkgZGFsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEzMCBidWlsdGluL3dvcmt0cmVlLmM6MTY0Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICJub24gcmltdW92ZXJlLCBsaW1pdGF0aSBhIHZpc3VhbGl6emFyZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgInNlZ25hbGEgbGUgbm90ZSBlbGltaW5hdGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgInJpZmVyaW1lbnRvIG5vdGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTkKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAidXNhIGxlIG5vdGUgaW4gPHJpZmVyaW1lbnRvIG5vdGU+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzb3R0b2NvbWFuZG8gc2Nvbm9zY2l1dG86ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B6aW9uaT4uLi5dIFs8IDxlbGVuY28gcmlmZXJpbWVudGk+IHwgPCA8ZWxlbmNvICIKKyJvZ2dldHRpPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTMKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHppb25pPi4uLl0gPG5vbWUgYmFzZT4gWzwgPGVsZW5jbyByaWZlcmltZW50aT4gfCA8ICIKKyI8ZWxlbmNvIG9nZ2V0dGk+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2tlZCBvYmplY3QgQ1JDIGZvciAlcyIKK21zZ3N0ciAiQ1JDIG9nZ2V0dG8gc290dG9wb3N0byBhIHBhY2sgJXMgZXJyYXRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJvZ2dldHRvIHNvdHRvcG9zdG8gYSBwYWNrICVzIGNvcnJvdHRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAicmlsZXZhdG8gZGVsdGEgcmljb3JzaXZvIHBlciBsJ29nZ2V0dG8gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9yZGVyZWQgJXUgb2JqZWN0cywgZXhwZWN0ZWQgJTxQUkl1MzI+IgorbXNnc3RyICIldSBvZ2dldHRpIG9yZGluYXRpLCBhdHRlc2kgJTxQUkl1MzI+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBpcyBpbnZhbGlkOiAlcyIKK21zZ3N0ciAicGFja2ZpbGUgbm9uIHZhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBpbCBwYWNrZmlsZSBwZXIgaWwgc3VvIHJpdXNvOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MDIKK21zZ2lkICJ1bmFibGUgdG8gc2VlayBpbiByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHNlZWsgbmVsIHBhY2tmaWxlIHJpdXNhdG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODEzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgZGFsIHBhY2tmaWxlIHJpdXNhdG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODQxCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorImRpc2FiaWxpdG8gbGEgc2NyaXR0dXJhIGRlbGxlIGJpdG1hcCwgaSBwYWNrIHNvbm8gZGl2aXNpIGEgY2F1c2EgIgorImRlbGwnaW1wb3N0YXppb25lIHBhY2sucGFja1NpemVMaW1pdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NTQKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIlNjcml0dHVyYSBkZWdsaSBvZ2dldHRpIGluIGNvcnNvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkxNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICJzdGF0IGRpICVzIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAic2NyaXR0aSAlPFBSSXUzMj4gb2dnZXR0aSBxdWFuZG8gbWUgbmUgYXR0ZW5kZXZvICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMTY0Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIiIKKyJkaXNhYmlsaXRvIGxhIHNjcml0dHVyYSBkZWxsZSBiaXRtYXAgcGVyY2jDqSBhbGN1bmkgb2dnZXR0aSBub24gc2FyYW5ubyAiCisic290dG9wb3N0aSBhIHBhY2siCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIKK21zZ3N0ciAib3ZlcmZsb3cgZGVsbCdvZmZzZXQgYmFzZSBkZWwgZGVsdGEgbmVsIHBhY2sgcGVyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIKK21zZ3N0ciAib2Zmc2V0IGJhc2UgZGVsIGRlbHRhIGZ1b3JpIGRhbGwnaW50ZXJ2YWxsbyBjb25zZW50aXRvIHBlciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODcwCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29udGVnZ2lvIGRlZ2xpIG9nZ2V0dGkgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgImltcG9zc2liaWxlIHJlY3VwZXJhcmUgbGUgZGltZW5zaW9uaSBkaSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3QgaGVhZGVyIG9mICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnaW50ZXN0YXppb25lIG9nZ2V0dG8gZGkgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMDEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgbCdvZ2dldHRvICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKK21zZ3N0ciAiIgorIm9nZ2V0dG8gJXM6IGx1bmdoZXp6YSBvZ2dldHRvIGluY29uc2lzdGVudGUgKCU8UFJJdU1BWD4gY29udHJvICU8UFJJdU1BWD4pIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMjUKK21zZ2lkICJzdWJvcHRpbWFsIHBhY2sgLSBvdXQgb2YgbWVtb3J5IgorbXNnc3RyICJwYWNrIHN1Ym90dGltbyAtIG1lbW9yaWEgZXNhdXJpdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICJDb21wcmVzc2lvbmUgZGVsdGEgaW4gY29yc28sIHVzbyBmaW5vIGEgJWQgdGhyZWFkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHBhY2sgZGVnbGkgb2dnZXR0aSByYWdnaXVuZ2liaWxpIGRhbCB0YWcgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIkNvbXByZXNzaW9uZSBvZ2dldHRpIGluIGNvcnNvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjUKK21zZ2lkICJpbmNvbnNpc3RlbmN5IHdpdGggZGVsdGEgY291bnQiCittc2dzdHIgImluY29uc2lzdGVuemEgY29uIGlsIG51bWVybyBkZWkgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgZWRnZSBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorImF0dGVzbyBJRCBvZ2dldHRvIGFyY28sIHJpY2V2dXRpIGRhdGkgZXJyYXRpOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorImF0dGVzbyBJRCBvZ2dldHRvLCByaWNldnV0aSBkYXRpIGVycmF0aTpcbiIKKyIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg0NgorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIC0tbWlzc2luZyIKK21zZ3N0ciAidmFsb3JlIG5vbiB2YWxpZG8gcGVyIC0tbWlzc2luZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTA1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAxMworbXNnaWQgImNhbm5vdCBvcGVuIHBhY2sgaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBsJ2luZGljZSBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0IGF0ICVzIGNvdWxkIG5vdCBiZSBleGFtaW5lZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNhbWluYXJlIGwnb2dnZXR0byBzY2lvbHRvICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMjEKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICJpbXBvc3NpYmlsZSBmb3J6YXJlIGwnb2dnZXR0byBzY2lvbHRvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmV2ICclcyciCittc2dzdHIgIiclcycgbm9uIMOoIHVuYSByZXZpc2lvbmUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAicmV2aXNpb25lICclcycgZXJyYXRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDEKK21zZ2lkICJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIGdsaSBvZ2dldHRpIHJlY2VudGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICJ2ZXJzaW9uZSAlcyBkaSBpbmRleCBub24gc3VwcG9ydGF0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgInZlcnNpb25lICclcycgZGkgaW5kZXggZXJyYXRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzYKK21zZ2lkICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKK21zZ3N0ciAiPHZlcnNpb25lPlssPG9mZnNldD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzcKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICJzY3JpdmkgaWwgZmlsZSBpbmRpY2UgcGFjayB1c2FuZG8gbGEgdmVyc2lvbmUgZm9ybWF0byBpZHggc3BlY2lmaWNhdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgImRpbWVuc2lvbmUgbWFzc2ltYSBkaSBvZ25pIGZpbGUgcGFjayBpbiBvdXRwdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiaWdub3JhIGdsaSBvZ2dldHRpIHByZXNpIGluIHByZXN0aXRvIGRhbGxvIHN0b3JlIG9nZ2V0dGkgYWx0ZXJuYXRpdm8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NAorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiaWdub3JhIGdsaSBvZ2dldHRpIHNvdHRvcG9zdGkgYSBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDYKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICJsaW1pdGEgbGEgZmluZXN0cmEgZGkgcGFjayBhbCBudW1lcm8gZGkgb2dnZXR0aSBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ4Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiIgorImxpbWl0YSBsYSBmaW5lc3RyYSBkaSBwYWNrIGFsbGEgbWVtb3JpYSBzcGVjaWZpY2F0YSBpbiBhZ2dpdW50YSBhbCBsaW1pdGUgIgorInN1Z2xpIG9nZ2V0dGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1MAorbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICJsdW5naGV6emEgbWFzc2ltYSBkZWxsYSBjYXRlbmEgZGkgZGVsdGEgY29uc2VudGl0YSBuZWwgcGFjayByaXN1bHRhbnRlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTIKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgInJpdXNhIGkgZGVsdGEgZXNpc3RlbnRpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTQKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICJyaXVzYSBnbGkgb2dnZXR0aSBlc2lzdGVudGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NgorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAidXNhIG9nZ2V0dGkgT0ZTX0RFTFRBIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTgKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICIiCisidXNhIHBpw7kgdGhyZWFkIGR1cmFudGUgbGEgcmljZXJjYSBkZWxsZSBtaWdsaW9yaSBjb3JyaXNwb25kZW56ZSBwZXIgaSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAibm9uIGNyZWFyZSB1biBvdXRwdXQgcGFjayB2dW90byIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYyCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVnZ2kgZ2xpIGFyZ29tZW50aSByZXZpc2lvbmUgZGFsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2NAorbXNnaWQgImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIgorbXNnc3RyICJsaW1pdGEgZ2xpIG9nZ2V0dGkgYSBxdWVsbGkgbm9uIGFuY29yYSBzb3R0b3Bvc3RpIGEgcGFjayIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgImluY2x1ZGkgZ2xpIG9nZ2V0dGkgcmFnZ2l1bmdpYmlsaSBkYSBxdWFsdW5xdWUgcmlmZXJpbWVudG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiaW5jbHVkaSBnbGkgb2dnZXR0aSByZWZlcmVuemlhdGkgZGEgdm9jaSBkZWwgbG9nIHJpZmVyaW1lbnRpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzMKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICJpbmNsdWRpIGdsaSBvZ2dldHRpIHJlZmVyZW56aWF0aSBkYWxsJ2luZGljZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc2Cittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICJpbnZpYSBpbCBwYWNrIGluIG91dHB1dCBzdWxsbyBzdGFuZGFyZCBvdXRwdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3OAorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAiIgorImluY2x1ZGkgZ2xpIG9nZ2V0dGkgdGFnIGNoZSBmYW5ubyByaWZlcmltZW50byBhZ2xpIG9nZ2V0dGkgZGEgc290dG9wb3JyZSBhICIKKyJwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIm1hbnRpZW5pIGdsaSBvZ2dldHRpIG5vbiByYWdnaXVuZ2liaWxpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODIKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImVzZWd1aSBpbCBwYWNrIGRlZ2xpIG9nZ2V0dGkgbm9uIHJhZ2dpdW5naWJpbGkgc2Npb2x0aSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg0Cittc2dpZCAidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImRlY29tcHJpbWkgZ2xpIG9nZ2V0dGkgbm9uIHJhZ2dpdW5naWJpbGkgcGnDuSByZWNlbnRpIGRpIDx0ZW1wbz4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NworbXNnaWQgInVzZSB0aGUgc3BhcnNlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0iCittc2dzdHIgInVzYSBsJ2FsZ29yaXRtbyBkaSByYWdnaXVuZ2liaWxpdMOgIHNwYXJzZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg5Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgImNyZWEgcGFjayB0aGluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTEKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAiY3JlYSBwYWNrIGFkYXR0aSBwZXIgZmV0Y2ggc2hhbGxvdyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkzCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiaWdub3JhIGkgcGFjayBjaGUgaGFubm8gdW4gZmlsZSAua2VlcCBjaGUgbGkgYWNjb21wYWduYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk1Cittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAiaWdub3JhIHF1ZXN0byBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTcKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJsaXZlbGxvIGNvbXByZXNzaW9uZSBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTkKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAibm9uIG5hc2NvbmRlcmUgaSBjb21taXQgaW5uZXN0YXRpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDEKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyJ1c2EgdW4gaW5kaWNlIGJpdG1hcCBzZSBkaXNwb25pYmlsZSBwZXIgdmVsb2NpenphcmUgaWwgY29udGVnZ2lvIGRlZ2xpICIKKyJvZ2dldHRpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDMKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICJzY3JpdmkgdW4gaW5kaWNlIGJpdG1hcCBpbnNpZW1lIGFsbCdpbmRpY2UgcGFjayIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzA3Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggaWYgcG9zc2libGUiCittc2dzdHIgInNjcml2aSB1biBpbmRpY2UgYml0bWFwIHNlIHBvc3NpYmlsZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzExCittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiYXppb25lIGRhIGVzZWd1aXJlIHN1Z2xpIG9nZ2V0dGkgbWFuY2FudGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNAorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICJub24gZXNlZ3VpcmUgaWwgcGFjayBkZWdsaSBvZ2dldHRpIG5laSBmaWxlIHBhY2sgcHJvbWV0dGVudGkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNgorbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgInJpc3BldHRhIGxlIGlzb2xlIGR1cmFudGUgbGEgY29tcHJlc3Npb25lIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgImxhIHByb2ZvbmRpdMOgIGRlbGxhIGNhdGVuYSBkZWkgZGVsdGEgKCVkKSDDqCB0cm9wcG8gZWxldmF0YSwgZm9yem8gJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAiaWwgdmFsb3JlIHBhY2suZGVsdGFDYWNoZUxpbWl0IMOoIHRyb3BwbyBlbGV2YXRvLCBmb3J6byAlZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA0Cittc2dpZCAiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIiCittc2dzdHIgIiIKKyItLW1heC1wYWNrLXNpemUgbm9uIHB1w7IgZXNzZXJlIHVzYXRvIHBlciBnZW5lcmFyZSB1biBwYWNrIGRhIHRyYXNmZXJpcmUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNgorbXNnaWQgIm1pbmltdW0gcGFjayBzaXplIGxpbWl0IGlzIDEgTWlCIgorbXNnc3RyICJpbCBsaW1pdGUgbWluaW1vIGRlbGxlIGRpbWVuc2lvbmkgZGVpIHBhY2sgw6ggMSBNaUIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxMQorbXNnaWQgIi0tdGhpbiBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhbiBpbmRleGFibGUgcGFjayIKK21zZ3N0ciAiLS10aGluIG5vbiBwdcOyIGVzc2VyZSB1c2F0byBwZXIgZ2VuZXJhcmUgdW4gcGFjayBpbmRpY2l6emFiaWxlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSBlIC0tdW5wYWNrLXVucmVhY2hhYmxlIG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjAKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgImltcG9zc2liaWxlIHVzYXJlIC0tZmlsdGVyIHNlbnphIC0tc3Rkb3V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0ODEKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICJFbnVtZXJhemlvbmUgZGVnbGkgb2dnZXR0aSBpbiBjb3JzbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2VkICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSIKK21zZ3N0ciAiIgorIiU8UFJJdTMyPiBvZ2dldHRpIHRvdGFsaSAoJTxQUkl1MzI+IGRlbHRhKSwgJTxQUkl1MzI+IHJpdXRpbGl6emF0aSAiCisiKCU8UFJJdTMyPiBkZWx0YSkiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzxvcHppb25pPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgImVzZWd1aSBpbCBwYWNrIGRpIHR1dHRvIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgImVsaW1pbmEgaSByaWZlcmltZW50aSBzY2lvbHRpIChpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjkKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MgorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICJSaW1vemlvbmUgb2dnZXR0aSBkdXBsaWNhdGkgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMgorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGVtcG8+XSBbLS1dIFs8aGVhZD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTMxCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICJzZWduYWxhIGdsaSBvZ2dldHRpIHJpcHVsaXRpIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImZhaSBzY2FkZXJlIG9nZ2V0dGkgcGnDuSB2ZWNjaGkgZGkgPHRlbXBvPiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImxpbWl0IHRyYXZlcnNhbCB0byBvYmplY3RzIG91dHNpZGUgcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICJsaW1pdGEgbGEgdmlzaXRhIGFnbGkgb2dnZXR0aSBhbCBkaSBmdW9yaSBkZWkgZmlsZSBwYWNrIHByb21ldHRlbnRpIgorCisjOiBidWlsdGluL3BydW5lLmM6MTUwCittc2dpZCAiY2Fubm90IHBydW5lIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCdlbGltaW5hemlvbmUgaW4gdW4gcmVwb3NpdG9yeSAnb2dnZXR0aSBwcmV6aW9zaSciCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY2IGJ1aWx0aW4vcHVsbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVmFsb3JlIG5vbiB2YWxpZG8gcGVyICVzOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzxvcHppb25pPl0gWzxyZXBvc2l0b3J5PiBbPHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250cm9sbGEgaWwgcmVjdXBlcm8gcmljb3JzaXZvIGRlaSBzb3R0b21vZHVsaSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIk9wemlvbmkgcmVsYXRpdmUgYWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0OQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiaW5jb3Jwb3JhIGxlIG1vZGlmaWNoZSBlc2VndWVuZG8gdW4gcmViYXNlIGFuemljaMOpIHVuIG1lcmdlIgorCisjOiBidWlsdGluL3B1bGwuYzoxNzcgYnVpbHRpbi9yZWJhc2UuYzo0NjcgYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgImNvbnNlbnRpIGZhc3QgZm9yd2FyZCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgImVzZWd1aSBzdGFzaC9zdGFzaCBwb3AgYXV0b21hdGljYW1lbnRlIHByaW1hIGUgZG9wbyBpbCByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwMgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiT3B6aW9uaSByZWxhdGl2ZSBhbCBmZXRjaCIKKworIzogYnVpbHRpbi9wdWxsLmM6MjEyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiZm9yemEgbGEgc292cmFzY3JpdHR1cmEgZGVsIGJyYW5jaCBsb2NhbGUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibnVtZXJvIGRpIHNvdHRvbW9kdWxpIHJlY3VwZXJhdGkgaW4gcGFyYWxsZWxvIgorCisjOiBidWlsdGluL3B1bGwuYzozMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIlZhbG9yZSBub24gdmFsaWRvIHBlciBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM3Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5vbiBjaSBzb25vIGNhbmRpZGF0aSBpbiBiYXNlIGFpIHF1YWxpIGVzZWd1aXJlIGlsIHJlYmFzZSBmcmEgaSByaWZlcmltZW50aSAiCisiYXBwZW5hIHJlY3VwZXJhdGkuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzkKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5vbiBjaSBzb25vIGNhbmRpZGF0aSBpbiBiYXNlIGFpIHF1YWxpIGVzZWd1aXJlIGlsIG1lcmdlIGZyYSBpIHJpZmVyaW1lbnRpICIKKyJhcHBlbmEgcmVjdXBlcmF0aS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MAorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyJJbiBnZW5lcmFsZSwgcXVlc3RvIHNpZ25pZmljYSBjaGUgaGFpIGZvcm5pdG8gdW5vIHNwZWNpZmljYXRvcmVcbiIKKyJyaWZlcmltZW50byBjaGUgbm9uIGF2ZXZhIGNvcnJpc3BvbmRlbnplIG5lbCByZW1vdG8uIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorIkhhaSBjaGllc3RvIGRpIGVzZWd1aXJlIHVuIHB1bGwgZGFsIHJlbW90byAnJXMnIG1hIG5vbiBoYWlcbiIKKyJzcGVjaWZpY2F0byB1biBicmFuY2guIERhbCBtb21lbnRvIGNoZSBxdWVzdG8gbm9uIMOoIGlsIHJlbW90b1xuIgorImNvbmZpZ3VyYXRvIGNvbWUgcHJlZGVmaW5pdG8gcGVyIGlsIGJyYW5jaCBjb3JyZW50ZSwgZGV2aVxuIgorInNwZWNpZmljYXJlIHVuIGJyYW5jaCBzdWxsYSByaWdhIGRpIGNvbWFuZG8uIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDggYnVpbHRpbi9yZWJhc2UuYzoxMzc1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICJBdHR1YWxtZW50ZSBub24gc2VpIHN1IHVuIGJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlNwZWNpZmljYSBpbCBicmFuY2ggaW4gYmFzZSBhIGN1aSB2dW9pIGVmZmV0dHVhcmUgaWwgcmViYXNlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcHVsbC5jOjQ2NyBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICJTcGVjaWZpY2EgaWwgYnJhbmNoIGluIGJhc2UgYSBjdWkgdnVvaSBlZmZldHR1YXJlIGlsIG1lcmdlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUzIGJ1aWx0aW4vcHVsbC5jOjQ2OAorbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlZlZGkgZ2l0LXB1bGwoMSkgcGVyIHVsdGVyaW9yaSBkZXR0YWdsaS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NjEgYnVpbHRpbi9wdWxsLmM6NDcwCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI8cmVtb3RvPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDU1IGJ1aWx0aW4vcHVsbC5jOjQ3MCBidWlsdGluL3B1bGwuYzo0NzUKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPGJyYW5jaD4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MyBidWlsdGluL3JlYmFzZS5jOjEzNzMgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3NQorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJOb24gY2kgc29ubyBpbmZvcm1hemlvbmkgZGkgdHJhY2NpYW1lbnRvIHBlciBpbCBicmFuY2ggY29ycmVudGUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzIgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgIiIKKyJTZSB2dW9pIGltcG9zdGFyZSBsZSBpbmZvcm1hemlvbmkgZGkgdHJhY2NpYW1lbnRvIHBlciBxdWVzdG8gYnJhbmNoIHB1b2kgIgorImZhcmxvIGNvbjoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkxhIHR1YSBjb25maWd1cmF6aW9uZSBzcGVjaWZpY2EgY2hlIGRldmUgZXNzZXJlIGVzZWd1aXRvXG4iCisiaWwgbWVyZ2UgY29uIGlsIHJpZmVyaW1lbnRvICclcycgZGVsIHJlbW90bywgbWEgdW4gdGFsZVxuIgorInJpZmVyaW1lbnRvIG5vbiDDqCBzdGF0byByZWN1cGVyYXRvLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhY2NlZGVyZSBhbCBjb21taXQgJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg2NworbXNnaWQgImlnbm9yaW5nIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZm9yIHJlYmFzZSIKK21zZ3N0ciAiaWdub3JvIC0tdmVyaWZ5LXNpZ25hdHVyZSBwZXIgaWwgcmViYXNlIgorCisjOiBidWlsdGluL3B1bGwuYzo5MjIKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICJsJ29wemlvbmUgLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gw6ggdmFsaWRhIHNvbG8gY29uIC0tcmViYXNlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTMwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAiQWdnaW9ybm8gdW4gYnJhbmNoIG5vbiBuYXRvIGNvbiBsZSBtb2RpZmljaGUgYWdnaXVudGUgYWxsJ2luZGljZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgInB1bGwgY29uIHJlYmFzZSIKKworIzogYnVpbHRpbi9wdWxsLmM6OTM1Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiZXNlZ3VpbmUgaWwgY29tbWl0IG8gbG8gc3Rhc2guIgorCisjOiBidWlsdGluL3B1bGwuYzo5NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisiaWwgZmV0Y2ggaGEgYWdnaW9ybmF0byBsJ2hlYWQgZGVsXG4iCisiYnJhbmNoIGNvcnJlbnRlLlxuIgorIkVzZWd1byBpbCBmYXN0IGZvcndhcmQgZGVsbCdhbGJlcm9cbiIKKyJkaSBsYXZvcm8gZGFsIGNvbW1pdCAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBmYXN0IGZvcndhcmQgZGVsbCdhbGJlcm9cbiIKKyJkaSBsYXZvcm8uXG4iCisiRG9wbyBlc3NlcnRpIGFzc2ljdXJhdG8gZGkgYXZlciBzYWx2YXRvIHR1dHRvIGNpw7JcbiIKKyJjaGUgw6ggaW1wb3J0YW50ZSBkYWxsJ291dHB1dCBkaVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJlc2VndWlcbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJwZXIgZXNlZ3VpcmUgaWwgcmlwcmlzdGluby4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk4MQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBtZXJnZSBkaSBwacO5IGJyYW5jaCBpbiB1biBoZWFkIHZ1b3RvLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTg1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgcmViYXNlIHN1IHBpw7kgYnJhbmNoLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTkyCittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZWJhc2Ugc2UgY2kgc29ubyBkZWxsZSBtb2RpZmljaGUgcmVnaXN0cmF0ZSAiCisibG9jYWxtZW50ZSBhaSBzb3R0b21vZHVsaSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxvcHppb25pPl0gWzxyZXBvc2l0b3J5PiBbPHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjExMgorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAiZXNlZ3VpIGlsIHRhZyBkZWxsYSBmb3JtYSBicmV2ZSBzZW56YSA8dGFnPiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTIyCittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIi0tZGVsZXRlIGFjY2V0dGEgc29sbyBub21pIGRlaSByZWYgZGkgZGVzdGluYXppb25lIGluIGNoaWFybyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTY4Cittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorIlxuIgorIlBlciBzY2VnbGllcmUgcGVybWFuZW50ZW1lbnRlIHVuYSBkZWxsZSBkdWUgb3B6aW9uaSwgdmVkaSBwdXNoLmRlZmF1bHQgaW4gIgorIidnaXQgaGVscCBjb25maWcnLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgogIiVzIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSBsJ2FjY2Vzc29yaW86XG4iCisiSWwgYnJhbmNoIHVwc3RyZWFtIGRlbCBicmFuY2ggYXR0dWFsZSBub24gY29ycmlzcG9uZGUgYWxcbiIKKyJub21lIGRlbCBicmFuY2ggYXR0dWFsZS4gUGVyIGVzZWd1aXJlIGlsIHB1c2ggYWwgYnJhbmNoIHVwc3RyZWFtXG4iCisiZGVsIHJlbW90bywgdXNhXG4iCiAiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJQZXIgZXNlZ3VpcmUgaWwgcHVzaCBhbCBicmFuY2ggY29uIGxvIHN0ZXNzbyBub21lIGRlbCByZW1vdG8sIHVzYVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCiAiJXMiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE5MAotbXNnaWQgIlJlbW92ZSBUb29sIgotbXNnc3RyICJSaW11b3ZpIGFjY2Vzc29yaW8iCisjOiBidWlsdGluL3B1c2guYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisiQXR0dWFsbWVudGUgbm9uIHNlaSBzdSB1biBicmFuY2guXG4iCisiUGVyIGVzZWd1aXJlIG9yYSBpbCBwdXNoIGRlbGxhIGNyb25vbG9naWEgY2hlIGhhIGNvbmRvdHRvXG4iCisiYWxsbyBzdGF0byBjb3JyZW50ZSAoSEVBRCBzY29sbGVnYXRvKSwgdXNhXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5vbWUgZGVsIGJyYW5jaCByZW1vdG8+XG4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE5NgotbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgotbXNnc3RyICJSaW11b3ZpIGkgY29tYW5kaSBhY2Nlc3NvcmkiCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJJbCBicmFuY2ggY29ycmVudGUgJXMgbm9uIGhhIGFsY3VuIGJyYW5jaCB1cHN0cmVhbS5cbiIKKyJQZXIgZXNlZ3VpcmUgaWwgcHVzaCBkZWwgYnJhbmNoIGNvcnJlbnRlIGVkIGltcG9zdGFyZSBpbCByZW1vdG8gY29tZSAiCisidXBzdHJlYW0sIHVzYVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDAKLW1zZ2lkICJSZW1vdmUiCi1tc2dzdHIgIlJpbXVvdmkiCisjOiBidWlsdGluL3B1c2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIiIKKyJJbCBicmFuY2ggY29ycmVudGUgJXMgaGEgcGnDuSBicmFuY2ggdXBzdHJlYW0sIG1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgaWwgcHVzaC4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjIzNgotbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCi1tc2dzdHIgIihJbCBjb2xvcmUgYmx1IGluZGljYSBhY2Nlc3NvcmkgcGVyIGwnYXJjaGl2aW8gbG9jYWxlKSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiU3RhaSBlc2VndWVuZG8gaWwgcHVzaCBhbCByZW1vdG8gJyVzJywgY2hlIG5vbiDDqCBsJ3Vwc3RyZWFtIGRlbFxuIgorImJyYW5jaCBjb3JyZW50ZSAnJXMnLCBzZW56YSBkaXJtaSBkaSBjb3NhIGRldm8gZXNlZ3VpcmUgaWwgcHVzaFxuIgorInBlciBhZ2dpb3JuYXJlIHF1YWxlIGJyYW5jaCByZW1vdG8uIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW4gQ29tbWFuZDogJXMiCi1tc2dzdHIgIkF2dmlhIGlsIGNvbWFuZG86ICVzIgorIzogYnVpbHRpbi9wdXNoLmM6MjcwCittc2dpZCAiIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgIiIKKyJOb24gw6ggc3RhdG8gc3BlY2lmaWNhdG8gYWxjdW4gcmVmc3BlYyBwZXIgaWwgcHVzaCwgZSBwdXNoLmRlZmF1bHQgw6ggXCJub3RoaW5nIgorIlwiLiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCi1tc2dpZCAiQXJndW1lbnRzIgotbXNnc3RyICJBcmdvbWVudGkiCisjOiBidWlsdGluL3B1c2guYzoyNzcKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJHbGkgYWdnaW9ybmFtZW50aSBzb25vIHN0YXRpIHJpZml1dGF0aSBwZXJjaMOpIGwndWx0aW1vIGNvbW1pdCBkZWwgYnJhbmNoXG4iCisiYXR0dWFsZSDDqCByaW1hc3RvIGluZGlldHJvIHJpc3BldHRvIGFsbGEgc3VhIGNvbnRyb3BhcnRlIHJlbW90YS5cbiIKKyJJbnRlZ3JhIGxlIG1vZGlmaWNoZSByZW1vdGUgKGFkIGVzLiBjb24gJ2dpdCBwdWxsIC4uLicpIHByaW1hIGRpXG4iCisiZXNlZ3VpcmUgbnVvdmFtZW50ZSBpbCBwdXNoLlxuIgorIlZlZGkgbGEgJ05vdGEgc3VpIGZhc3QgZm9yd2FyZCcgaW4gJ2dpdCBwdXNoIC0taGVscCcgcGVyIHVsdGVyaW9yaVxuIgorImRldHRhZ2xpLiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ4Ci1tc2dpZCAiT0siCi1tc2dzdHIgIk9LIgorIzogYnVpbHRpbi9wdXNoLmM6MjgzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiR2xpIGFnZ2lvcm5hbWVudGkgc29ubyBzdGF0aSByaWZpdXRhdGkgcGVyY2jDqSBsJ3VsdGltbyBjb21taXQgZGkgdW5cbiIKKyJicmFuY2ggZGkgY3VpIMOoIHN0YXRvIGVzZWd1aXRvIGlsIHB1c2ggw6ggcmltYXN0byBpbmRpZXRybyByaXNwZXR0b1xuIgorImFsbGEgc3VhIGNvbnRyb3BhcnRlIHJlbW90YS4gRXNlZ3VpIGlsIGNoZWNrb3V0IGRpIHF1ZXN0byBicmFuY2ggZVxuIgorImludGVncmEgbGUgbW9kaWZpY2hlIHJlbW90ZSAoYWQgZXMuIGNvbiAnZ2l0IHB1bGwgLi4uJykgcHJpbWEgZGlcbiIKKyJlc2VndWlyZSBudW92YW1lbnRlIGlsIHB1c2guXG4iCisiVmVkaSBsYSAnTm90YSBzdWkgZmFzdCBmb3J3YXJkJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBwZXIgdWx0ZXJpb3JpXG4iCisiZGV0dGFnbGkuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKLW1zZ3N0ciAiUmVjdXBlcm8gbnVvdmUgbW9kaWZpY2hlIGRhICVzIgorIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkdsaSBhZ2dpb3JuYW1lbnRpIHNvbm8gc3RhdGkgcmlmaXV0YXRpIHBlcmNow6kgaWwgcmVtb3RvIGNvbnRpZW5lIGRlbGxlXG4iCisibW9kaWZpY2hlIGNoZSBub24gaGFpIGxvY2FsbWVudGUuIENpw7Igc29saXRhbWVudGUgw6ggY2F1c2F0byBkYSB1biBwdXNoXG4iCisiZGEgdW4gYWx0cm8gcmVwb3NpdG9yeSBhbGxvIHN0ZXNzbyByaWZlcmltZW50by4gUG90cmVzdGkgdm9sZXIgaW50ZWdyYXJlXG4iCisibGUgbW9kaWZpY2hlIHJlbW90ZSAoYWQgZXMuIGNvbiAnZ2l0IHB1bGwgLi4uJykgcHJpbWEgZGkgZXNlZ3VpcmVcbiIKKyJudW92YW1lbnRlIGlsIHB1c2guXG4iCisiVmVkaSBsYSAnTm90YSBzdWkgZmFzdCBmb3J3YXJkJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBwZXIgdWx0ZXJpb3JpXG4iCisiZGV0dGFnbGkuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAotIywgdGNsLWZvcm1hdAotbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKLW1zZ3N0ciAicG90YXR1cmEgcmVtb3RhIGRpICVzIgorIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiIgorIkdsaSBhZ2dpb3JuYW1lbnRpIHNvbm8gc3RhdGkgcmlmaXV0YXRpIHBlcmNow6kgaWwgdGFnIGVzaXN0ZSBnacOgIG5lbCByZW1vdG8uIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgotbXNnc3RyICJFZmZldHR1YSBwb3RhdHVyYSBkZWkgZHVwbGljYXRpIGxvY2FsaSBkaSByYW1pIHJlbW90aSBjYW5jZWxsYXRpIGRhICVzIgorIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJOb24gcHVvaSBhZ2dpb3JuYXJlIHVuIHJpZmVyaW1lbnRvIHJlbW90byBjaGUgcHVudGEgYSB1biBvZ2dldHRvXG4iCisiZGl2ZXJzbyBkYSB1biBjb21taXQgbyBhZ2dpb3JuYXJlIHVuIHJpZmVyaW1lbnRvIHJlbW90byBwZXIgZmFybG9cbiIKKyJwdW50YXJlIGEgdW4gb2dnZXR0byBkaXZlcnNvIGRhIHVuIGNvbW1pdCBzZW56YSB1c2FyZSBsJ29wemlvbmVcbiIKKyInLS1mb3JjZScuXG4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgotbXNnc3RyICJQcm9wYWdhemlvbmUgbW9kaWZpY2hlIGEgJXMiCisjOiBidWlsdGluL3B1c2guYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICJQdXNoIHN1ICVzIGluIGNvcnNvXG4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWlycm9yaW5nIHRvICVzIgotbXNnc3RyICJNaXJyb3JpbmcgdmVyc28gJXMiCisjOiBidWlsdGluL3B1c2guYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgInB1c2ggZGkgYWxjdW5pIHJpZmVyaW1lbnRpIHN1ICclcycgbm9uIHJpdXNjaXRvIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCi1tc2dzdHIgIlByb3BhZ2F6aW9uZSAlcyAlcyBhICVzIgorIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAicmVwb3NpdG9yeSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCi1tc2dpZCAiUHVzaCBCcmFuY2hlcyIKLW1zZ3N0ciAiUHJvcGFnYSByYW1pIgorIzogYnVpbHRpbi9wdXNoLmM6NTQzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAiZXNlZ3VpIGlsIHB1c2ggZGkgdHV0dGkgaSByaWZlcmltZW50aSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTE0Ci1tc2dpZCAiU291cmNlIEJyYW5jaGVzIgotbXNnc3RyICJSYW1pIGRpIG9yaWdpbmUiCisjOiBidWlsdGluL3B1c2guYzo1NDQgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgImVzZWd1aSBpbCBtaXJyb3IgZGkgdHV0dGkgaSByaWZlcmltZW50aSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCi1tc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQXJjaGl2aW8gZGkgZGVzdGluYXppb25lIgorIzogYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgImVsaW1pbmEgcmlmZXJpbWVudGkiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQotbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCi1tc2dzdHIgIk9wemlvbmkgZGkgdHJhc2ZlcmltZW50byIKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NworbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAiZXNlZ3VpIGlsIHB1c2ggZGVpIHRhZyAobm9uIHB1w7IgZXNzZXJlIHVzYXRvIGNvbiAtLWFsbCBvIC0tbWlycm9yKSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTcxCi1tc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCi1tc2dzdHIgIlNvdnJhc2NyaXZpIHJhbW8gZXNpc3RlbnRlIChhbGN1bmUgbW9kaWZpY2hlIHBvdHJlYmJlcm8gZXNzZXJlIHBlcnNlKSIKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgImZvcnphIGdsaSBhZ2dpb3JuYW1lbnRpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzUKLW1zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKLW1zZ3N0ciAiVXRpbGl6emEgJ3RoaW4gcGFjaycgKHBlciBjb25uZXNzaW9uaSBsZW50ZSkiCisjOiBidWlsdGluL3B1c2guYzo1NTIgYnVpbHRpbi9zZW5kLXBhY2suYzoxODEKK21zZ2lkICI8cmVmbmFtZT46PGV4cGVjdD4iCittc2dzdHIgIjxub21lIHJpZmVyaW1lbnRvPjo8dmFsb3JlIGF0dGVzbz4iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQotbXNnaWQgIkluY2x1ZGUgdGFncyIKLW1zZ3N0ciAiSW5jbHVkaSBldGljaGV0dGUiCisjOiBidWlsdGluL3B1c2guYzo1NTMgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiIgorInJpY2hpZWRpIGNoZSBpbCB2ZWNjaGlvIHZhbG9yZSBkZWwgcmlmZXJpbWVudG8gY29ycmlzcG9uZGEgYSBxdWVzdG8gdmFsb3JlIgorCisjOiBidWlsdGluL3B1c2guYzo1NTYKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgImNvbnRyb2xsYSBpbCBwdXNoIHJpY29yc2l2byBkZWkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OCBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgInVzYSB1biB0aGluIHBhY2siCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgInByb2dyYW1tYSByaWNlemlvbmUgcGFjayIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgImltcG9zdGEgbCd1cHN0cmVhbSBwZXIgZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjQKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAiZWxpbWluYSBpIHJpZmVyaW1lbnRpIHJpbW9zc2kgbG9jYWxtZW50ZSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY2Cittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgImlnbm9yYSBsJ2hvb2sgcHJlLXB1c2giCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAiZXNlZ3VpIGlsIHB1c2ggZGVpIHRhZyBtYW5jYW50aSBtYSByaWxldmFudGkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MCBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICJmaXJtYSBpbCBwdXNoIGNvbiBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJyaWNoaWVkaSBsJ2F0b21pY2l0w6AgZGVsbGEgdHJhbnNhemlvbmUgYWwgcmVtb3RvIgorCisjOiBidWlsdGluL3B1c2guYzo1OTAKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiLS1kZWxldGUgbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLWFsbCwgLS1taXJyb3IgZSAtLXRhZ3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MgorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICItLWRlbGV0ZSBub24gaGEgc2Vuc28gc2VuemEgYWxjdW4gcmVmIgorCisjOiBidWlsdGluL3B1c2guYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAicmVwb3NpdG9yeSAnJXMnIGVycmF0byIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEzCittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyJOZXNzdW5hIGRlc3RpbmF6aW9uZSBwZXIgaWwgcHVzaCBjb25maWd1cmF0YS5cbiIKKyJTcGVjaWZpY2EgdW4gVVJMIGRhbGxhIHJpZ2EgZGkgY29tYW5kbyBvcHB1cmUgY29uZmlndXJhcmUgdW4gcmVwb3NpdG9yeSAiCisicmVtb3RvIHVzYW5kb1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bm9tZT4gPHVybD5cbiIKKyJcbiIKKyJlIHBvaSBlc2VndWlyZSBpbCBwdXNoIHVzYW5kbyBpbCBub21lIGRlbCByZW1vdGVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5vbWU+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZSAtLXRhZ3Mgbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzMAorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIG5vbiBwdcOyIGVzc2VyZSBjb21iaW5hdG8gY29uIGRlZ2xpIHNwZWNpZmljYXRvcmkgcmlmZXJpbWVudG8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3IgZSAtLXRhZ3Mgbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNgorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIG5vbiBwdcOyIGVzc2VyZSBjb21iaW5hdG8gY29uIGRlZ2xpIHNwZWNpZmljYXRvcmkgcmlmZXJpbWVudG8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzOQorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCBlIC0tbWlycm9yIG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL3B1c2guYzo2NDMKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICJsZSBvcHppb25pIHB1c2ggbm9uIGRldm9ubyBhdmVyZSBjYXJhdHRlcmkgZGkgZmluZSByaWdhIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo4Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC1iYXNlPi4uPG9sZC10aXA+IDxuZXctYmFzZT4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorImdpdCByYW5nZS1kaWZmIFs8b3B6aW9uaT5dIDx2ZWNjaGlhIGJhc2U+Li48dmVjY2hpbyB1bHRpbW8gY29tbWl0PiA8bnVvdmEgIgorImJhc2U+Li48bnVvdm8gdWx0aW1vIGNvbW1pdD4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjkKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8b2xkLXRpcD4uLi48bmV3LXRpcD4iCittc2dzdHIgIiIKKyJnaXQgcmFuZ2UtZGlmZiBbPG9wemlvbmk+XSA8dmVjY2hpbyB1bHRpbW8gY29tbWl0Pi4uLjxudW92byB1bHRpbW8gY29tbWl0PiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MTAKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8YmFzZT4gPG9sZC10aXA+IDxuZXctdGlwPiIKK21zZ3N0ciAiIgorImdpdCByYW5nZS1kaWZmIFs8b3B6aW9uaT5dIDxiYXNlPiA8dmVjY2hpbyB1bHRpbW8gY29tbWl0PiA8bnVvdm8gdWx0aW1vICIKKyJjb21taXQ+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMgorbXNnaWQgIlBlcmNlbnRhZ2UgYnkgd2hpY2ggY3JlYXRpb24gaXMgd2VpZ2h0ZWQiCittc2dzdHIgIlBlcmNlbnR1YWxlIGluIGJhc2UgYSBjdWkgdmllbmUgcGVzYXRhIGxhIGNyZWF6aW9uZSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjQKK21zZ2lkICJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIgorbXNnc3RyICJ1c2EgY29sb3JpIHNlbXBsaWNpIHBlciBpbCBkaWZmIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorbXNnaWQgIm5vdGVzIgorbXNnc3RyICJub3RlIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGxvZyciCittc2dzdHIgInBhc3NhdG8gYSAnZ2l0IGxvZyciCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICJuZXNzdW4gLi4gbmVsbCdpbnRlcnZhbGxvOiAnJXMnIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo2NAorbXNnaWQgInNpbmdsZSBhcmcgZm9ybWF0IG11c3QgYmUgc3ltbWV0cmljIHJhbmdlIgorbXNnc3RyICJpbCBmb3JtYXRvIGRlbGwndW5pY28gYXJnb21lbnRvIGRldidlc3NlcmUgdW4gaW50ZXJ2YWxsbyBzaW1tZXRyaWNvIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3OQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgImRldm9ubyBlc3NlcmUgc3BlY2lmaWNhdGkgZHVlIGludGVydmFsbGkgY29tbWl0IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjQxCittc2dpZCAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiCittc2dzdHIgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS0iCisicHJlZml4PTxwcmVmaXNzbz4pIFstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby0iCisic3BhcnNlLWNoZWNrb3V0XSBbLS1pbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDxlc3ByZXNzaW9uZSBhbGJlcm8gMT4gIgorIls8ZXNwcmVzc2lvbmUgYWxiZXJvIDI+IFs8ZXNwcmVzc2lvbmUgYWxiZXJvIDM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgInNjcml2aSBsJ2luZGljZSByaXN1bHRhbnRlIGluIDxmaWxlPiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAic3Z1b3RhIHNvbG8gbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiTWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAiZXNlZ3VpIGlsIG1lcmdlIG9sdHJlIGEgdW5hIGxldHR1cmEiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICJtZXJnZSBhIHRyZSB2aWUgc2Ugbm9uIHNvbm8gcmljaGllc3RpIG1lcmdlIGEgbGl2ZWxsbyBkaSBmaWxlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgIm1lcmdlIGEgdHJlIHZpZSBzZSBzb25vIHByZXNlbnRpIGFnZ2l1bnRlIGVkIGVsaW1pbmF6aW9uaSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzcKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJjb21lIC1tLCBtYSBzY2FydGEgbGUgdm9jaSBub24gc290dG9wb3N0ZSBhIG1lcmdlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPHNvdHRvZGlyZWN0b3J5Pi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgImxlZ2dpIGwnYWxiZXJvIG5lbGwnaW5kaWNlIGluIDxzb3R0b2RpcmVjdG9yeT4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0MgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgImFnZ2lvcm5hIGwnYWxiZXJvIGRpIGxhdm9ybyBjb24gaWwgcmlzdWx0YXRvIGRlbCBtZXJnZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDQKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgImdpdGlnbm9yZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDUKK21zZ2lkICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iCittc2dzdHIgImNvbnNlbnRpIGxhIHNvdnJhc2NyaXR0dXJhIGRlaSBmaWxlIGlnbm9yYXRpIGVzcGxpY2l0YW1lbnRlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAibm9uIGNvbnRyb2xsYXJlIGwnYWxiZXJvIGRpIGxhdm9ybyBkb3BvIGlsIG1lcmdlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAibm9uIGFnZ2lvcm5hcmUgbCdpbmRpY2UgbyBsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUxCittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICJzYWx0YSBsJ2FwcGxpY2F6aW9uZSBkZWwgZmlsdHJvIGNoZWNrb3V0IHNwYXJzZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgImVzZWd1aSBpbCBkZWJ1ZyBkaSB1bnBhY2stdHJlZXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgaSBtZXNzYWdnaSBkaSBmZWVkYmFjayIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxODgKK21zZ2lkICJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiUHJpbWEgZGV2aSByaXNvbHZlcmUgbCdpbmRpY2UgY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPiB8IC0ta2VlcC1iYXNlXSAiCisiWzx1cHN0cmVhbT4gWzxicmFuY2g+XV0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wemlvbmldIFstLWV4ZWMgPGNvbWFuZG8+XSBbLS1vbnRvIDxudW92YSBiYXNlPiB8IC0ta2VlcC0iCisiYmFzZV0gWzx1cHN0cmVhbT4gWzxicmFuY2g+XV0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNvbWFuZG8+XSBbLS1vbnRvIDxudW92YSBiYXNlPl0gLS1yb290ICIKKyJbPGJyYW5jaD5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6MjAxIGJ1aWx0aW4vcmViYXNlLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAiZWxlbmNvIHRvZG8gaW51dGlsaXp6YWJpbGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2IGJ1aWx0aW4vcmViYXNlLmM6MjEyIGJ1aWx0aW4vcmViYXNlLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjcxCittc2dpZCAibm8gSEVBRD8iCittc2dzdHIgIm5lc3N1bidIRUFEPyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSB1biAlcyB0ZW1wb3JhbmVvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMwNAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb250cmFzc2VnbmFyZSBjb21lIGludGVyYXR0aXZvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgImltcG9zc2liaWxlIGdlbmVyYXJlIGwnZWxlbmNvIHRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDAyCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgIiIKKyJsZSBvcHppb25pIC0tdXBzdHJlYW0gbyAtLW9udG8gcmljaGllZG9ubyBjaGUgc2lhIGZvcm5pdG8gdW4gY29tbWl0IGRpIGJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZSBbPG9wemlvbmk+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NjkKK21zZ2lkICJrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIm1hbnRpZW5pIGkgY29tbWl0IHZ1b3RpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiY29uc2VudGkgY29tbWl0IGNvbiBtZXNzYWdnaSB2dW90aSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzIKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAiZXNlZ3VpIGlsIHJlYmFzZSBkZWkgY29tbWl0IGRpIG1lcmdlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NAorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICJtYW50aWVuaSBpIHB1bnRpIGRpIGJyYW5jaCBvcmlnaW5hbGkgZGVpIGN1Z2luaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzYKK21zZ2lkICJtb3ZlIGNvbW1pdHMgdGhhdCBiZWdpbiB3aXRoIHNxdWFzaCEvZml4dXAhIgorbXNnc3RyICJzcG9zdGEgaSBjb21taXQgY2hlIGluaXppYW5vIGNvbiBzcXVhc2ghL2ZpeHVwISIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzcKK21zZ2lkICJzaWduIGNvbW1pdHMiCittc2dzdHIgImZpcm1hIGkgY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3OSBidWlsdGluL3JlYmFzZS5jOjE0NTUKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICJ2aXN1YWxpenphIHVuIGRpZmZzdGF0IGRlbGxlIG1vZGlmaWNoZSB1cHN0cmVhbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODEKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgImNvbnRpbnVhIGlsIHJlYmFzZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODMKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAic2FsdGEgaWwgY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAibW9kaWZpY2EgbCdlbGVuY28gdG9kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODYKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJ2aXN1YWxpenphIGxhIHBhdGNoIGNvcnJlbnRlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJhYmJyZXZpYSBnbGkgSUQgZGVpIGNvbW1pdCBuZWxsJ2VsZW5jbyB0b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImVzcGFuZGkgZ2xpIElEIGRlaSBjb21taXQgbmVsbCdlbGVuY28gdG9kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTMKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJjb250cm9sbGEgbCdlbGVuY28gdG9kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTUKK21zZ2lkICJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIgorbXNnc3RyICJyaWRpc3BvbmkgbGUgcmlnaGUgZml4dXAvc3F1YXNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NworbXNnaWQgImluc2VydCBleGVjIGNvbW1hbmRzIGluIHRvZG8gbGlzdCIKK21zZ3N0ciAiaW5zZXJpc2NpIGkgY29tYW5kaSBleGVjIG5lbGwnZWxlbmNvIHRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk4Cittc2dpZCAib250byIKK21zZ3N0ciAic3UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgInJldmlzaW9uaS1saW1pdGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgImxpbWl0YSBsYSByZXZpc2lvbmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAzCittc2dpZCAic3F1YXNoLW9udG8iCittc2dzdHIgInNxdWFzaC1zdSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDQKK21zZ2lkICJzcXVhc2ggb250byIKK21zZ3N0ciAiZXNlZ3VpIGxvIHNxdWFzaCBzdSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDYKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICJpbCBjb21taXQgdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJub21lIGhlYWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZCBuYW1lIgorbXNnc3RyICJub21lIGhlYWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTEzCittc2dpZCAicmViYXNlIHN0cmF0ZWd5IgorbXNnc3RyICJzdHJhdGVnaWEgZGkgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgIm9wemlvbmkgc3RyYXRlZ2lhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNQorbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgIm9wemlvbmkgc3RyYXRlZ2lhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNgorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAicGFzc2EgYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTcKK21zZ2lkICJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIKK21zZ3N0ciAiaWwgYnJhbmNoIG8gaWwgY29tbWl0IGRpIGN1aSBlc2VndWlyZSBpbCBjaGVja291dCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTgKK21zZ2lkICJvbnRvLW5hbWUiCittc2dzdHIgIm5vbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJzdWwgbm9tZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTkKK21zZ2lkICJjbWQiCittc2dzdHIgImNvbWFuZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICJpbCBjb21hbmRvIGRhIGVzZWd1aXJlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUyMiBidWlsdGluL3JlYmFzZS5jOjE1NDAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIKK21zZ3N0ciAic2NoZWR1bGEgbnVvdmFtZW50ZSBsZSBvcGVyYXppb25pIGBleGVjYCBub24gcml1c2NpdGUgYXV0b21hdGljYW1lbnRlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0MAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICItLVtuby1dcmViYXNlLWNvdXNpbnMgbm9uIGhhIGVmZmV0dG8gc2VuemEgLS1yZWJhc2UtbWVyZ2VzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIiVzIHJpY2hpZWRlIHVuIHJlYmFzZSBpbnRlcmF0dGl2byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCAnb250byc6ICclcyciCittc2dzdHIgImltcG9zc2liaWxlIG90dGVuZXJlICdvbnRvJzogJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciCittc2dzdHIgIm9yaWctaGVhZCBub24gdmFsaWRhOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBpbnZhbGlkIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorbXNnc3RyICJpZ25vcm8gaWwgdmFsb3JlIG5vbiB2YWxpZG8gcGVyIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgbWVtb3JpenphcmUgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODQ5Cittc2dpZCAiY291bGQgbm90IGRldGVybWluZSBIRUFEIHJldmlzaW9uIgorbXNnc3RyICJpbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBsYSByZXZpc2lvbmUgSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo5NzIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxCittc2dpZCAiIgorIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCittc2dzdHIgIiIKKyJSaXNvbHZpIG1hbnVhbG1lbnRlIHR1dHRpIGkgY29uZmxpdHRpLCBjb250cmFzc2VnbmFsaSBjb21lXG4iCisicmlzb2x0aSBjb24gXCJnaXQgYWRkL3JtIDxmaWxlIGluIGNvbmZsaXR0bz5cIiwgcXVpbmRpIGVzZWd1aVxuIgorIlwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiSW4gYWx0ZXJuYXRpdmEsIHB1b2kgc2FsdGFyZSBxdWVzdG8gY29tbWl0OiBlc2VndWkgXCJnaXQgcmViYXNlXG4iCisiLS1za2lwXCIuXG4iCisiUGVyIGludGVycm9tcGVyZSBsJ29wZXJhemlvbmUgZSB0b3JuYXJlIGFsbG8gc3RhdG8gcHJlY2VkZW50ZVxuIgorImlsIFwiZ2l0IHJlYmFzZVwiLCBlc2VndWkgXCJnaXQgcmViYXNlIC0tYWJvcnRcIi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisiXG4iCisiR2l0IGhhIHJpc2NvbnRyYXRvIHVuIGVycm9yZSBkdXJhbnRlIGxhIHByZXBhcmF6aW9uZSBkZWxsZSBwYXRjaFxuIgorInBlciBhcHBsaWNhcmUgbnVvdmFtZW50ZSBxdWVzdGUgcmV2aXNpb25pOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkRpIGNvbnNlZ3VlbnphLCBHaXQgbm9uIHB1w7IgZXNlZ3Vpcm5lIGlsIHJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXNcbiIKKyJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuXG4iCisiU2VlIGdpdC1yZWJhc2UoMSkgZm9yIGRldGFpbHMuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorbXNnc3RyICIiCisiJXNcbiIKKyJTcGVjaWZpY2EgaWwgYnJhbmNoIHN1IGN1aSBlZmZldHR1YXJlIGlsIHJlYmFzZS5cbiIKKyJWZWRpIGdpdC1yZWJhc2UoMSkgcGVyIGkgZGV0dGFnbGkuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxicmFuY2g+J1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJTZSB2dW9pIGltcG9zdGFyZSBsZSBpbmZvcm1hemlvbmkgZGkgdHJhY2NpYW1lbnRvIHBlciBxdWVzdG8gYnJhbmNoIHB1b2kgIgorImZhcmxvIGNvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTMKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICJpIGNvbWFuZGkgZXhlYyBub24gcG9zc29ubyBjb250ZW5lcmUgY2FyYXR0ZXJpIGRpIGZpbmUgcmlnYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDE3Cittc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnc3RyICJjb21hbmRvIGV4ZWMgdnVvdG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NgorbXNnaWQgInJlYmFzZSBvbnRvIGdpdmVuIGJyYW5jaCBpbnN0ZWFkIG9mIHVwc3RyZWFtIgorbXNnc3RyICJlc2VndWkgaWwgcmViYXNlIHN1bCBicmFuY2ggc3BlY2lmaWNhdG8gYW56aWNow6kgc3UgcXVlbGxvIHVwc3RyZWFtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDgKK21zZ2lkICJ1c2UgdGhlIG1lcmdlLWJhc2Ugb2YgdXBzdHJlYW0gYW5kIGJyYW5jaCBhcyB0aGUgY3VycmVudCBiYXNlIgorbXNnc3RyICJ1c2EgbGEgYmFzZSBkZWwgbWVyZ2UgZGVsbCd1cHN0cmVhbSBlIGRlbCBicmFuY2ggY29tZSBiYXNlIGNvcnJlbnRlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTAKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJjb25zZW50aSBsJ2VzZWN1emlvbmUgZGVsbCdob29rIHByZS1yZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MgorbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAic2lpIHNpbGVuemlvc28uIGltcGxpY2EgLS1uby1zdGF0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTgKK21zZ2lkICJkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgdW4gZGlmZnN0YXQgZGVsbGUgbW9kaWZpY2hlIHVwc3RyZWFtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjEKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICJhZ2dpdW5naSB1bmEgcmlnYSBTaWduZWQtb2ZmLWJ5OiBhIG9nbmkgY29tbWl0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjQKK21zZ2lkICJtYWtlIGNvbW1pdHRlciBkYXRlIG1hdGNoIGF1dGhvciBkYXRlIgorbXNnc3RyICIiCisiZmFpIGNvcnJpc3BvbmRlcmUgbGEgZGF0YSBkZWxsYSBwZXJzb25hIGNoZSBoYSBlc2VndWl0byBpbCBjb21taXQgYWxsYSBkYXRhIgorIiBhdXRvcmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NgorbXNnaWQgImlnbm9yZSBhdXRob3IgZGF0ZSBhbmQgdXNlIGN1cnJlbnQgZGF0ZSIKK21zZ3N0ciAiaWdub3JhIGxhIGRhdGEgYXV0b3JlIGUgdXNhIGxhIGRhdGEgY29ycmVudGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OAorbXNnaWQgInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIKK21zZ3N0ciAic2lub25pbW8gZGkgLS1yZXNldC1hdXRob3ItZGF0ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDcwIGJ1aWx0aW4vcmViYXNlLmM6MTQ3NAorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFwcGx5JyIKK21zZ3N0ciAicGFzc2F0byBhICdnaXQgYXBwbHknIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzIKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIgorbXNnc3RyICJpZ25vcmEgbW9kaWZpY2hlIGFnbGkgc3BhemkgYmlhbmNoaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDc2IGJ1aWx0aW4vcmViYXNlLmM6MTQ3OQorbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAiZXNlZ3VpIGlsIGNoZXJyeS1waWNrIGRpIHR1dHRpIGkgY29tbWl0LCBhbmNoZSBzZSBub24gbW9kaWZpY2F0aSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDgxCittc2dpZCAiY29udGludWUiCittc2dzdHIgImNvbnRpbnVhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODQKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICJzYWx0YSBsYSBwYXRjaCBjb3JyZW50ZSBlIGNvbnRpbnVhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODYKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgImludGVycm9tcGkgZWQgZXNlZ3VpIGlsIGNoZWNrb3V0IGRlbCBicmFuY2ggb3JpZ2luYXJpbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg5Cittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAiaW50ZXJyb21waSBtYSBtYW50aWVuaSBsJ0hFQUQgZG92J8OoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAibW9kaWZpY2EgbCdlbGVuY28gdG9kbyBkdXJhbnRlIHVuIHJlYmFzZSBpbnRlcmF0dGl2byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDkzCittc2dpZCAic2hvdyB0aGUgcGF0Y2ggZmlsZSBiZWluZyBhcHBsaWVkIG9yIG1lcmdlZCIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgaWwgZmlsZSBwYXRjaCBjaGUgc3RhIHBlciBlc3NlcmUgYXBwbGljYXRvIG8gc290dG9wb3N0byBhIG1lcmdlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTYKK21zZ2lkICJ1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSIKK21zZ3N0ciAidXNhIGxlIHN0cmF0ZWdpZSBkaSBtZXJnZSBwZXIgZXNlZ3VpcmUgaWwgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDAKK21zZ2lkICJsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbGlzdCBvZiBjb21taXRzIHRvIHJlYmFzZSIKK21zZ3N0ciAiIgorImNvbnNlbnRpIGFsbCd1dGVudGUgZGkgbW9kaWZpY2FyZSBsJ2VsZW5jbyBkZWkgY29tbWl0IGRpIGN1aSBlc2VndWlyZSBpbCAiCisicmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDQKK21zZ2lkICIoREVQUkVDQVRFRCkgdHJ5IHRvIHJlY3JlYXRlIG1lcmdlcyBpbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZW0iCittc2dzdHIgIihERVBSRUNBVE8pIHByb3ZhIGEgcmljcmVhcmUgaSBtZXJnZSBhbnppY2jDqSBpZ25vcmFybGkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwOQorbXNnaWQgInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIKK21zZ3N0ciAibWFudGllbmkgaSBjb21taXQgdnVvdGkgZHVyYW50ZSBpbCByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMQorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkiCittc2dzdHIgInNwb3N0YSBpIGNvbW1pdCBjaGUgaW5pemlhbm8gY29uIHNxdWFzaCEvZml4dXAhIGluIC1pIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTcKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICJlc2VndWkgc3Rhc2gvc3Rhc2ggcG9wIGF1dG9tYXRpY2FtZW50ZSBwcmltYSBlIGRvcG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxOQorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICJhZ2dpdW5naSByaWdoZSBleGVjIGRvcG8gb2duaSBjb21taXQgZGVsbGEgbGlzdGEgbW9kaWZpY2FiaWxlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImNvbnNlbnRpIGlsIHJlYmFzZSBkaSBjb21taXQgY29uIG1lc3NhZ2dpIHZ1b3RpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjYKK21zZ2lkICJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iCittc2dzdHIgInByb3ZhIGFkIGVzZWd1aXJlIGlsIHJlYmFzZSBkZWkgbWVyZ2UgYW56aWNow6kgc2FsdGFybGkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyOQorbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAiIgorInVzYSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHBlciByaWRlZmluaXJlIHBpw7kgcHJlY2lzYW1lbnRlIGwndXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMQorbXNnaWQgInVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInVzYSBsYSBzdHJhdGVnaWEgZGkgbWVyZ2Ugc3BlY2lmaWNhdGEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAib3B6aW9uZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTM0Cittc2dpZCAicGFzcyB0aGUgYXJndW1lbnQgdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInBhc3NhIGwnYXJnb21lbnRvIGFsbGEgc3RyYXRlZ2lhIGRpIG1lcmdlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzcKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICJlc2VndWkgaWwgcmViYXNlIGRpIHR1dHRpIGkgY29tbWl0IHJhZ2dpdW5naWJpbGkgZmlubyBhIHF1ZWxsaSByYWRpY2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiaWwgc3VwcG9ydG8gcGVyIHJlYmFzZS51c2VCdWlsdGluIMOoIHN0YXRvIHJpbW9zc28hXG4iCisiVmVkaSBsYSB2b2NlIHJlbGF0aXZhIGluICdnaXQgaGVscCBjb25maWcnIHBlciBpIGRldHRhZ2xpLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTYwCittc2dpZCAiSXQgbG9va3MgbGlrZSAnZ2l0IGFtJyBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIlNlbWJyYSBjaGUgJ2dpdCBhbScgc2lhIGluIGNvcnNvLiBJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZWJhc2UuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDEKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIMOoIGRlcHJlY2F0by4gVXNhIC0tcmViYXNlLW1lcmdlcy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwNgorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1vbnRvJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29tYmluYXJlICctLWtlZXAtYmFzZScgY29uICctLW9udG8nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDgKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tcm9vdCciCittc2dzdHIgImltcG9zc2liaWxlIGNvbWJpbmFyZSAnLS1rZWVwLWJhc2UnIGNvbiAnLS1yb290JyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiTmVzc3VuIHJlYmFzZSBpbiBjb3Jzbz8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYxNgorbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiIgorIkwnYXppb25lIC0tZWRpdC10b2RvIHB1w7IgZXNzZXJlIHVzYXRhIHNvbG8gZHVyYW50ZSB1biByZWJhc2UgaW50ZXJhdHRpdm8uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MzkKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIGwnSEVBRCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjUxCittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisiRGV2aSBtb2RpZmljYXJlIHR1dHRpIGkgY29uZmxpdHRpIGRpIG1lcmdlIGVcbiIKKyJxdWluZGkgY29udHJhc3NlZ25hcmxpIGNvbWUgcmlzb2x0aSB1c2FuZG9cbiIKKyJnaXQgYWRkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NzAKK21zZ2lkICJjb3VsZCBub3QgZGlzY2FyZCB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY2FydGFyZSBsZSBtb2RpZmljaGUgYWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbW92ZSBiYWNrIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSByaXRvcm5hcmUgYSAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAlcyBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JXNcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQlc1xuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuXG4iCittc2dzdHIgIiIKKyJTZW1icmEgY2hlIGVzaXN0YSBnacOgIHVuYSBkaXJlY3RvcnkgJXMgZSBtaSBkb21hbmRvXG4iCisic2UgdHUgc2lhIGdpw6AgbmVsIGJlbCBtZXp6byBkaSB1biBhbHRybyByZWJhc2UuIFNlIHF1ZXN0byDDqCBpbCBjYXNvLFxuIgorInByb3ZhIGNvbiBpbCBjb21hbmRvXG4iCisiXHQlc1xuIgorIlNlIHF1ZXN0byBub24gw6ggaWwgY2FzbywgZXNlZ3VpXG4iCisiXHQlc1xuIgorImVkIGVzZWd1aW1pIGRpIG51b3ZvLiBNaSBmZXJtbyBuZWwgY2FzbyBpbiBjdWkgdHUgYWJiaWEgYW5jb3JhXG4iCisic2FsdmF0byBxdWFsY29zYSBkaSBpbXBvcnRhbnRlIGzDrC5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzU3Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJsJ29wemlvbmUgYENgIHJpY2hpZWRlIHVuIHZhbG9yZSBudW1lcmljbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgIk1vZG8gc2Nvbm9zY2l1dG86ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MjAKK21zZ2lkICItLXN0cmF0ZWd5IHJlcXVpcmVzIC0tbWVyZ2Ugb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1zdHJhdGVneSByaWNoaWVkZSAtLW1lcmdlIG8gLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODYwCittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMgcmljaGllZGUgLS1leGVjIG8gLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODcyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorbXNnc3RyICJub24gw6ggcG9zc2liaWxlIGNvbWJpbmFyZSBsZSBvcHppb25pIGFtIGNvbiBxdWVsbGUgaW50ZXJhY3RpdmUgbyBtZXJnZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODkxCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb21iaW5hcmUgJy0tcHJlc2VydmUtbWVyZ2VzJyBjb24gJy0tcmViYXNlLW1lcmdlcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5NQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisiZXJyb3JlOiBpbXBvc3NpYmlsZSBjb21iaW5hcmUgJy0tcHJlc2VydmUtbWVyZ2VzJyBjb24gJy0tcmVzY2hlZHVsZS1mYWlsZWQtIgorImV4ZWMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICJ1cHN0cmVhbSBub24gdmFsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MjUKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIGlsIG51b3ZvIGNvbW1pdCByYWRpY2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2Ugd2l0aCBicmFuY2giCittc2dzdHIgIiIKKyInJXMnOiDDqCBuZWNlc3NhcmlvIHNwZWNpZmljYXJlIGVzYXR0YW1lbnRlIHVuYSBiYXNlIHBlciBpbCBtZXJnZSBjb24gaWwgIgorImJyYW5jaCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJyVzJzogw6ggbmVjZXNzYXJpbyBzcGVjaWZpY2FyZSBlc2F0dGFtZW50ZSB1bmEgYmFzZSBwZXIgaWwgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICInJXMnIG5vbiBwdW50YSBhIHVuIGNvbW1pdCB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2gvY29tbWl0ICclcyciCittc2dzdHIgImVycm9yZSBmYXRhbGU6IGJyYW5jaC9jb21taXQgJyVzJyBpbmVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTk1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICJSaWZlcmltZW50byBub24gZXNpc3RlbnRlOiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDA2Cittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaXNvbHZlcmUgSEVBRCBjb21lIHJldmlzaW9uZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ0Cittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgbG8gc3Rhc2ggYXV0b21hdGljbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgIlJpc3Bvc3RhIHN0YXNoIG5vbiBhdHRlc2E6ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIGxhIGRpcmVjdG9yeSAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIlN0YXNoIGF1dG9tYXRpY28gY3JlYXRvOiAlc1xuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTkKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSByZXNldCAtLWhhcmQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2OAorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIkVzZWd1aW5lIGlsIGNvbW1pdCBvIGxvIHN0YXNoLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBwYXNzYXJlIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQgw6ggYWdnaW9ybmF0by4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLlxuIgorbXNnc3RyICJJbCBicmFuY2ggY29ycmVudGUgJXMgw6ggYWdnaW9ybmF0by5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI5Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiSEVBRCDDqCBhZ2dpb3JuYXRvLCBmb3J6byBpbCByZWJhc2UuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC5cbiIKK21zZ3N0ciAiSWwgYnJhbmNoIGNvcnJlbnRlICVzIMOoIGFnZ2lvcm5hdG8sIGZvcnpvIGlsIHJlYmFzZS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIkwnaG9vayBwcmUtcmViYXNlIGhhIHJpZml1dGF0byBkaSBjb25zZW50aXJlIGlsIHJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIHRvICVzOlxuIgorbXNnc3RyICJNb2RpZmljaGUgYSAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAiTW9kaWZpY2hlIGRhICVzIGEgJXM6XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorIlBlciBwcmltYSBjb3NhLCByaXByaXN0aW5vIGwnaGVhZCBwZXIgcmlhcHBsaWNhcmUgbGUgdHVlIG1vZGlmaWNoZSBzdSBkaSAiCisiZXNzby4uLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODMKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIkltcG9zc2liaWxlIHNjb2xsZWdhcmUgbCdIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJXMgdG8gJXMuXG4iCittc2dzdHIgIkZhc3QgZm9yd2FyZCBkYSAlcyBhICVzIGVzZWd1aXRvLlxuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjMyCittc2dpZCAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCittc2dzdHIgImdpdCByZWNlaXZlLXBhY2sgPGRpcmVjdG9yeSBHaXQ+IgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjgzMAorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnRcbiIKKyJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2hcbiIKKyJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisiXG4iCisiWW91IGNhbiBzZXQgdGhlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKyJpdHMgY3VycmVudCBicmFuY2g7IGhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3VcbiIKKyJhcnJhbmdlZCB0byB1cGRhdGUgaXRzIHdvcmsgdHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZVxuIgorIm90aGVyIHdheS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHNldFxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlBlciBpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEsIGwnYWdnaW9ybmFtZW50byBkZWwgYnJhbmNoIGNvcnJlbnRlXG4iCisiaW4gdW4gcmVwb3NpdG9yeSBub24gc3BvZ2xpbyDDqCBuZWdhdG8sIHBlcmNow6kgcmVuZGVyZWJiZSBsJ2luZGljZVxuIgorImUgbCdhbGJlcm8gZGkgbGF2b3JvIGluY29uc2lzdGVudGkgY29uIGkgZGF0aSBkaSBjdWkgc2kgw6ggZXNlZ3VpdG9cbiIKKyJpbCBwdXNoIGUgcmljaGllZGVyZWJiZSAnZ2l0IHJlc2V0IC0taGFyZCcgcGVyIHJpcHJpc3RpbmFyZSBsYVxuIgorImNvcnJpc3BvbmRlbnphIGRlbGwnYWxiZXJvIGRpIGxhdm9ybyBjb24gSEVBRC5cbiIKKyJcbiIKKyJQdW9pIGltcG9zdGFyZSBsYSB2YXJpYWJpbGUgZGkgY29uZmlndXJhemlvbmVcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgYSAnaWdub3JlJyBvICd3YXJuJyBuZWwgcmVwb3NpdG9yeVxuIgorInJlbW90byBwZXIgY29uc2VudGlyZSBpbCBwdXNoIG5lbCBicmFuY2ggY29ycmVudGU7IGNpw7Igbm9ub3N0YW50ZSxcbiIKKyJxdWVzdG8gbm9uIMOoIHJhY2NvbWFuZGF0byBhIG1lbm8gY2hlIHR1IG5vbiBwcm92dmVkYSBhZCBhZ2dpb3JuYXJlXG4iCisiaWwgc3VvIGFsYmVybyBkaSBsYXZvcm8gaW4gbW9kbyBjaGUgY29ycmlzcG9uZGEgYSBjacOyIGRpIGN1aSBoYWlcbiIKKyJlc2VndWl0byBpbCBwdXNoIGluIHF1YWxjaGUgYWx0cm8gbW9kby5cbiIKKyJcbiIKKyJQZXIgbm9uIHZpc3VhbGl6emFyZSBwacO5IHF1ZXN0byBtZXNzYWdnaW8gZSBtYW50ZW5lcmUgY29tdW5xdWVcbiIKKyJpbCBjb21wb3J0YW1lbnRvIHByZWRlZmluaXRvLCBpbXBvc3RhIGxhIHZhcmlhYmlsZSBkaVxuIgorImNvbmZpZ3VyYXppb25lICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBhICdyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NTAKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlBlciBpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEsIGwnZWxpbWluYXppb25lIGRlbCBicmFuY2ggY29ycmVudGVcbiIKKyLDqCBuZWdhdGEsIHBlcmNow6kgaWwgcHJvc3NpbW8gJ2dpdCBjbG9uZScgZmFyZWJiZSBzw6wgY2hlIG5vbiB2ZW5nYVxuIgorImVzZWd1aXRvIGlsIGNoZWNrb3V0IGRpIG5lc3N1biBmaWxlLCBjYXVzYW5kbyBjb25mdXNpb25lLlxuIgorIlxuIgorIlB1b2kgaW1wb3N0YXJlIGxhIHZhcmlhYmlsZSBkaSBjb25maWd1cmF6aW9uZVxuIgorIidyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBhICd3YXJuJyBvICdpZ25vcmUnIG5lbCByZXBvc2l0b3J5XG4iCisicmVtb3RvIHBlciBjb25zZW50aXJlIGwnZWxpbWluYXppb25lIGRlbCBicmFuY2ggY29ycmVudGUsIGNvbiBvXG4iCisic2VuemEgdW4gbWVzc2FnZ2lvIGQnYXZ2aXNvLlxuIgorIlxuIgorIlBlciBub24gdmlzdWFsaXp6YXJlIHBpw7kgcXVlc3RvIG1lc3NhZ2dpbywgcHVvaSBpbXBvc3RhcmxhIGFcbiIKKyIncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzNgorbXNnaWQgInF1aWV0IgorbXNnc3RyICJub24gdmlzdWFsaXp6YXJlIG1lc3NhZ2dpIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiRGV2aSBzcGVjaWZpY2FyZSB1bmEgZGlyZWN0b3J5LiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoxNworbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0ZW1wbz5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGVtcG8+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSAiCisiPHJpZmVyaW1lbnRpPi4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyMgorbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJpZmVyaW1lbnRpPi4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyNQorbXNnaWQgImdpdCByZWZsb2cgZXhpc3RzIDxyZWY+IgorbXNnc3RyICJnaXQgcmVmbG9nIGV4aXN0cyA8cmlmZXJpbWVudG8+IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2NyBidWlsdGluL3JlZmxvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyBub24gw6ggdW4gdGltZXN0YW1wIHZhbGlkbyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIKK21zZ3N0ciAiQ29udHJhc3NlZ25vIGdsaSBvZ2dldHRpIHJhZ2dpdW5naWJpbGkuLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiJXMgbm9uIHB1bnRhIGEgbmllbnRlISIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2OTUKK21zZ2lkICJubyByZWZsb2cgc3BlY2lmaWVkIHRvIGRlbGV0ZSIKK21zZ3N0ciAibmVzc3VuIHJlZ2lzdHJvIHJpZmVyaW1lbnRpIGRhIGVsaW1pbmFyZSBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAibm9uIMOoIHVuIHJlZ2lzdHJvIHJpZmVyaW1lbnRpOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICJsb2cgcmlmZXJpbWVudGkgbm9uIGVzaXN0ZW50ZSBwZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0byByaWZlcmltZW50byBub24gdmFsaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bm9tZT4gPFVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTggYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8dmVjY2hpbz4gPG51b3ZvPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjQzCittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAgYnVpbHRpbi9yZW1vdGUuYzo0OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5vbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5vbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzCittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3J1cHBvPiB8IDxyZW1vdG8+KS4uLl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bm9tZT4gPGJyYW5jaD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUgYnVpbHRpbi9yZW1vdGUuYzo3NAorbXNnaWQgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5vbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI2IGJ1aWx0aW4vcmVtb3RlLmM6NzkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bm9tZT4gPG51b3ZvIFVSTD4gWzx2ZWNjaGlvIFVSTD5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5vbWU+IDxudW92byBVUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5vbWU+IDxVUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzCittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPG9wemlvbmk+XSA8bm9tZT4gPFVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxub21lPiA8YnJhbmNoPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5vbWU+IDxicmFuY2g+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs8b3B6aW9uaT5dIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs8b3B6aW9uaT5dIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wemlvbmk+XSBbPGdydXBwbz4gfCA8cmVtb3RvPl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGkgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIMOoIHBlcmljb2xvc28gZSBkZXByZWNhdG87IHBlciBmYXZvcmVcbiIKKyJcdCB1c2EgaW52ZWNlIC0tbWlycm9yLWZldGNoIG8gLS1taXJyb3ItcHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmdvbWVudG8gZGkgbWlycm9yIHNjb25vc2NpdXRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICJyZWN1cGVyYSBpIGJyYW5jaCByZW1vdGkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY1Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiaW1wb3J0YSB0dXR0aSBpIHRhZyBlIGdsaSBvZ2dldHRpIGFzc29jaWF0aSBkdXJhbnRlIGlsIHJlY3VwZXJvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAibyBub24gcmVjdXBlcmFyZSBhbGN1biB0YWcgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiYnJhbmNoIGRhIHRyYWNjaWFyZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJicmFuY2ggbWFzdGVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICIiCisiaW1wb3N0YSBpbCByZW1vdG8gY29tZSBtaXJyb3Igc3UgY3VpIGVzZWd1aXJlIHB1c2ggbyBkYSBjdWkgcmVjdXBlcmFyZSBkYXRpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgInNwZWNpZmljYXJlIHVuIGJyYW5jaCBtYXN0ZXIgY29uIC0tbWlycm9yIG5vbiBoYSBzZW5zbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisic3BlY2lmaWNhcmUgaSBicmFuY2ggZGEgdHJhY2NpYXJlIGhhIHNlbnNvIHNvbG8gY29uIGkgbWlycm9yIGRhIGN1aSAiCisicmVjdXBlcmFyZSBkYXRpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NCBidWlsdGluL3JlbW90ZS5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJpbCByZW1vdG8gJXMgZXNpc3RlIGdpw6AuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OCBidWlsdGluL3JlbW90ZS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBub21lIGRpIHJlbW90byB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY29uZmlndXJhcmUgaWwgbWFzdGVyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgb3R0ZW5lcmUgbGEgbWFwcGEgZGkgcmVjdXBlcm8gcGVyIGxvIHNwZWNpZmljYXRvcmUgcmlmZXJpbWVudG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDQzIGJ1aWx0aW4vcmVtb3RlLmM6NDUxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKGNvcnJpc3BvbmRlbnRlKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTUKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKGVsaW1pbmEpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYyOSBidWlsdGluL3JlbW90ZS5jOjc2NCBidWlsdGluL3JlbW90ZS5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJyVzJyIKK21zZ3N0ciAiUmVtb3RvIG5vbiBlc2lzdGVudGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaWRlbm9taW5hcmUgbGEgc2V6aW9uZSBkaSBjb25maWd1cmF6aW9uZSBkYSAnJXMnIGluICIKKyInJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKyJOb24gYWdnaW9ybm8gbG8gc3BlY2lmaWNhdG9yZSByaWZlcmltZW50byBkaSByZWN1cGVybyBub24gcHJlZGVmaW5pdG9cbiIKKyJcdCVzXG4iCisiXHRBZ2dpb3JuYSBsYSBjb25maWd1cmF6aW9uZSBtYW51YWxtZW50ZSBzZSBuZWNlc3NhcmlvLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImVsaW1pbmF6aW9uZSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImNyZWF6aW9uZSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDEKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIk5vdGE6IHVuIGJyYW5jaCBhbCBkaSBmdW9yaSBkZWxsYSBnZXJhcmNoaWEgcmVmcy9yZW1vdGVzLyBub24gw6ggc3RhdG8gIgorImVsaW1pbmF0bztcbiIKKyJwZXIgZWxpbWluYXJsbywgdXNhOiIKK21zZ3N0clsxXSAiIgorIk5vdGE6IGFsY3VuaSBicmFuY2ggYWwgZGkgZnVvcmkgZGVsbGEgZ2VyYXJjaGlhIHJlZnMvcmVtb3Rlcy8gbm9uIHNvbm8gc3RhdGkgIgorImVsaW1pbmF0aTtcbiIKKyJwZXIgZWxpbWluYXJsaSwgdXNhOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaW11b3ZlcmUgbGEgc2V6aW9uZSBkaSBjb25maWd1cmF6aW9uZSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBudW92byAoaWwgcHJvc3NpbW8gZmV0Y2ggbG8gc2FsdmVyw6AgaW4gcmVtb3Rlcy8lcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE5Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiB0cmFjY2lhdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiB2ZWNjaGlvICh1c2EgJ2dpdCByZW1vdGUgcHJ1bmUnIHBlciByaW11b3ZlcmxvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjMKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIiIKKyJ2YWxvcmUgYnJhbmNoLiVzLm1lcmdlIG5vbiB2YWxpZG87IGltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJlYmFzZSBzdSBwacO5IGRpICIKKyJ1biBicmFuY2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNlIGludGVyYXR0aXZvIHN1bCByZW1vdG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSAod2l0aCBtZXJnZXMpIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJyZWJhc2UgaW50ZXJhdHRpdm8gKGNvbiBtZXJnZSkgc3VsIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAicmViYXNlIHN1bCByZW1vdG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBtZXJnZSBjb24gaWwgcmVtb3RlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIm1lcmdlIGNvbiBpbCByZW1vdGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAgZSBjb24gaWwgcmVtb3RvICVzXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiY3JlYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJlbGltaW5hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzgKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJhZ2dpb3JuYXRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJmYXN0IGZvcndhcmQgcG9zc2liaWxlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibG9jYWxlIG5vbiBhZ2dpb3JuYXRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgZXNlZ3VlIHVuIGFnZ2lvcm5hbWVudG8gZm9yemF0byBzdSAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBlc2VndWUgaWwgcHVzaCBzdSAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIGVzZWd1ZSB1biBhZ2dpb3JuYW1lbnRvIGZvcnphdG8gc3UgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIGVzZWd1ZSBpbCBwdXNoIHN1ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjkKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAibm9uIGludGVycm9nYXJlIGkgcmVtb3RpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCByZWN1cGVybzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1OCBidWlsdGluL3JlbW90ZS5jOjExNzQgYnVpbHRpbi9yZW1vdGUuYzoxMzEzCittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIihuZXNzdW4gVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgICAgIFVSTCBwdXNoOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc2IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OCBidWlsdGluL3JlbW90ZS5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgYnJhbmNoIEhFQUQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIobm9uIGludGVycm9nYXRvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICIoc2Nvbm9zY2l1dG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorIiAgYnJhbmNoIEhFQUQgKGwnSEVBRCByZW1vdG8gw6ggYW1iaWd1bywgcG90cmViYmUgZXNzZXJlIHVubyBkZWkgc2VndWVudGkpOlxuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICBCcmFuY2ggcmVtb3RvOiVzIgorbXNnc3RyWzFdICIgIEJyYW5jaCByZW1vdGk6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NyBidWlsdGluL3JlbW90ZS5jOjEyMjMKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAoc3RhdG8gbm9uIHJpY2hpZXN0bykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNgorbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgIEJyYW5jaCBsb2NhbGUgY29uZmlndXJhdG8gcGVyICdnaXQgcHVsbCc6IgorbXNnc3RyWzFdICIgIEJyYW5jaCBsb2NhbGkgY29uZmlndXJhdGkgcGVyICdnaXQgcHVsbCc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTQKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIEkgcmlmZXJpbWVudGkgbG9jYWxpIHNhcmFubm8gY29waWF0aSBkYSAnZ2l0IHB1c2gnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgUmVmIGxvY2FsZSBjb25maWd1cmF0byBwZXIgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clsxXSAiICBSZWYgbG9jYWxpIGNvbmZpZ3VyYXRpIHBlciAnZ2l0IHB1c2gnJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDEKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgImltcG9zdGEgcmVmcy9yZW1vdGVzLzxub21lPi9IRUFEIGluIGJhc2UgYWwgcmVtb3RvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDMKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICJlbGltaW5hIHJlZnMvcmVtb3Rlcy88bm9tZT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU4Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgbCdIRUFEIHJlbW90byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjYwCittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIkJyYW5jaCBIRUFEIHJlbW90aSBtdWx0aXBsaS4gU2NlZ2xpbmUgdW5vIGVzcGxpY2l0YW1lbnRlIGNvbjoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGVsaW1pbmFyZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIk5vbiDDqCB1biByZWYgdmFsaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBjb25maWd1cmFyZSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBkaXZlbnRlcsOgIHBlbmRlbnRlISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIMOoIGRpdmVudGF0byBwZW5kZW50ZSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICJFbGltaW5hemlvbmUgZGkgJXMgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW3NhcmViYmUgZWxpbWluYXRvXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBbZWxpbWluYXRvXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzc0Cittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiZWxpbWluYSByZW1vdGkgZG9wbyBpbCBmZXRjaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM3IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5MSBidWlsdGluL3JlbW90ZS5jOjE1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiUmVtb3RlICclcycgbm9uIGVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUzCittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAiYWdnaXVuZ2kgYnJhbmNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjAKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJuZXNzdW4gcmVtb3RlIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NzcKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAiaW50ZXJyb2dhIGdsaSBVUkwgcGVyIGlsIHB1c2ggYW56aWNow6kgZ2xpIFVSTCBwZXIgaWwgZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3OQorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAicmVzdGl0dWlzY2kgdHV0dGkgZ2xpIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIm5lc3N1biBVUkwgY29uZmlndXJhdG8gcGVyIGlsIHJlbW90byAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzMKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAibWFuaXBvbGEgZ2xpIFVSTCBwZXIgaWwgcHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM1Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiYWdnaXVuZ2kgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzcKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAiZWxpbWluYSBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0NAorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJQYXR0ZXJuIFVSTCB2ZWNjaGlvIG5vbiB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICJOZXNzdW5hIFVSTCB0cm92YXRhOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkzCittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICJOb24gZWxpbWluZXLDsiB0dXR0aSBnbGkgVVJMIG5vbiBwdXNoIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzCittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPG9wemlvbmk+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOAorbXNnaWQgIiIKKyJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAgaW5kZXhlcy4gIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV4IG9yIGRpc2FibGUgdGhlIHBhY2sud3JpdGViaXRtYXBzIGNvbmZpZ3VyYXRpb24uIgorbXNnc3RyICIiCisiSSByZXBhY2sgaW5jcmVtZW50YWxpIG5vbiBzb25vIGNvbXBhdGliaWxpIGNvbiBnbGkgaW5kaWNpIGJpdG1hcC5cbiIKKyJVc2EgLS1uby13cml0ZS1iaXRtYXAtaW5kZXggbyBkaXNhYmlsaXRhIGwnb3B6aW9uZSBkaSBjb25maWd1cmF6aW9uZVxuIgorInBhY2sud3JpdGViaXRtYXBzLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgYXZ2aWFyZSBwYWNrLW9iamVjdHMgcGVyIGVzZWd1aXJlIGlsIHJlcGFjayBkZWdsaSBvZ2dldHRpICIKKyJwcm9tZXR0ZW50aSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMzAgYnVpbHRpbi9yZXBhY2suYzo0MTYKK21zZ2lkICJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iCittc2dzdHIgIiIKKyJyZXBhY2s6IERhIHBhY2stb2JqZWN0cyBtaSBhdHRlbmRldm8gc29sbyByaWdoZSBjb24gZ2xpIElEIGNvbXBsZXRpICIKKyJlc2FkZWNpbWFsaSBkZWdsaSBvZ2dldHRpLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyNTQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHBvcnRhcmUgYSB0ZXJtaW5lIHBhY2stb2JqZWN0cyBwZXIgZXNlZ3VpcmUgaWwgcmVwYWNrIGRlZ2xpICIKKyJvZ2dldHRpIHByb21ldHRlbnRpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5MgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICJlc2VndWkgaWwgcGFjayBkaSB0dXR0byBpbiB1biBzaW5nb2xvIHBhY2siCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiY29tZSAtYSBlIHJlbmRpIHNjaW9sdGkgZ2xpIG9nZ2V0dGkgbm9uIHJhZ2dpdW5naWJpbGkiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk3Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICJyaW11b3ZpIGkgcGFjayByaWRvbmRhbnRpIGVkIGVzZWd1aSBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJmb3JuaXNjaSBsJ29wemlvbmUgLS1uby1yZXVzZS1kZWx0YSBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAxCittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJmb3JuaXNjaSBsJ29wemlvbmUgLS1uby1yZXVzZS1vYmplY3QgYSBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMworbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAibm9uIGVzZWd1aXJlIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA2Cittc2dpZCAicGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgImZvcm5pc2NpIGwnb3B6aW9uZSAtLWxvY2FsIGEgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgInNjcml2aSBsJ2luZGljZSBiaXRtYXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEwCittc2dpZCAicGFzcyAtLWRlbHRhLWlzbGFuZHMgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiZm9ybmlzY2kgbCdvcHppb25lIC0tZGVsdGEtaXNsYW5kcyBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgImRhdGEgYXBwcm9zc2ltYXRpdmEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEyCittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiY29uIC1BLCBub24gcmVuZGVyZSBzY2lvbHRpIGdsaSBvZ2dldHRpIG1lbm8gcmVjZW50aSBkaSBxdWVzdGEgZGF0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTQKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiY29uIC1hLCBlc2VndWkgaWwgcmVwYWNrIGRlZ2xpIG9nZ2V0dGkgbm9uIHJhZ2dpdW5naWJpbGkiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJkaW1lbnNpb25lIGRlbGxhIGZpbmVzdHJhIHVzYXRhIHBlciBsYSBjb21wcmVzc2lvbmUgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJ5dGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIiIKKyJjb21lIHNvcHJhLCBtYSBsaW1pdGEgbGUgZGltZW5zaW9uaSBkZWxsYSBtZW1vcmlhIGludmVjZSBkZWwgbnVtZXJvIGRpIHZvY2kiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJsaW1pdGEgbGEgcHJvZm9uZGl0w6AgbWFzc2ltYSBkZWkgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIyCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIgorbXNnc3RyICJsaW1pdGEgaWwgbnVtZXJvIG1hc3NpbW8gZGkgdGhyZWFkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJkaW1lbnNpb25lIG1hc3NpbWEgZGkgb2duaSBmaWxlIHBhY2siCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI2Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgImVzZWd1aSBpbCByZXBhY2sgZGVnbGkgb2dnZXR0aSBuZWkgcGFjayBjb250cmFzc2VnbmF0aSBjb24gLmtlZXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgIm5vbiBlc2VndWlyZSBpbCByZXBhY2sgZGkgcXVlc3RvIHBhY2siCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzM4Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZWxpbWluYXJlIGkgcGFjayBpbiB1biByZXBvc2l0b3J5ICdvZ2dldHRpIHByZXppb3NpJyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNDIKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSBlIC1BIG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyNQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICJOb24gY2kgc29ubyBvZ2dldHRpIG51b3ZpIGRpIGN1aSBlc2VndWlyZSBpbCBwYWNrLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorIkFWVklTTzogQWxjdW5pIHBhY2sgaW4gdXNvIHNvbm8gc3RhdGkgcmlkZW5vbWluYXRpXG4iCisiQVZWSVNPOiBhZ2dpdW5nZW5kbyBpbCBwcmVmaXNzbyBvbGQtIGFsIGxvcm8gbm9tZVxuIgorIkFWVklTTzogcGVyIGNvbnNlbnRpcm5lIGxhIHNvc3RpdHV6aW9uZSBjb24gbGFcbiIKKyJBVlZJU086IG51b3ZhIHZlcnNpb25lIGRlbCBmaWxlLiBNYSBsJ29wZXJhemlvbmVcbiIKKyJBVlZJU086IG5vbiDDqCByaXVzY2l0YSBlIGFuY2hlIGlsIHRlbnRhdGl2byBkaVxuIgorIkFWVklTTzogcmlkZW5vbWluYXJsaSBjb24gaWwgbG9ybyBub21lIG9yaWdpbmFsZVxuIgorIkFWVklTTzogbm9uIMOoIHJpdXNjaXRvLiBSaWRlbm9taW5hbGkgbWFudWFsbWVudGVcbiIKKyJBVlZJU086IGVudHJvICVzOlxuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgImVsaW1pbmF6aW9uZSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9nZ2V0dG8+IDxvZ2dldHRvIHNvc3RpdHV0aXZvPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9nZ2V0dG8+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxnZW5pdG9yZT4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxvZ2dldHRvPi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0bz5dIFstbCBbPHBhdHRlcm4+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisiZm9ybWF0byBzb3N0aXR1emlvbmUgbm9uIHZhbGlkbzogJyVzJ1xuIgorImkgZm9ybWF0aSB2YWxpZGkgc29ubyAnc2hvcnQnLCAnbWVkaXVtJyBlICdsb25nJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgcmVmICclcycgbm90IGZvdW5kIgorbXNnc3RyICJyaWZlcmltZW50byBzb3N0aXR1dGl2byAnJXMnIG5vbiB0cm92YXRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZXBsYWNlIHJlZiAnJXMnIgorbXNnc3RyICJFbGltaW5hdG8gcmlmZXJpbWVudG8gc29zdGl0dXRpdm8gJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmIG5hbWUiCittc2dzdHIgIiclcycgbm9uIMOoIHVuIG5vbWUgcmlmZXJpbWVudG8gdmFsaWRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiaWwgcmlmZXJpbWVudG8gc29zdGl0dXRpdm8gJyVzJyBlc2lzdGUgZ2nDoCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPYmplY3RzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZS5cbiIKKyInJXMnIHBvaW50cyB0byBhIHJlcGxhY2VkIG9iamVjdCBvZiB0eXBlICclcydcbiIKKyJ3aGlsZSAnJXMnIHBvaW50cyB0byBhIHJlcGxhY2VtZW50IG9iamVjdCBvZiB0eXBlICclcycuIgorbXNnc3RyICIiCisiR2xpIG9nZ2V0dGkgZGV2b25vIGVzc2VyZSBkZWxsbyBzdGVzc28gdGlwby5cbiIKKyInJXMnIHB1bnRhIGEgdW4gb2dnZXR0byBzb3N0aXR1aXRvIGRpIHRpcG8gJyVzJ1xuIgorIm1lbnRyZSAnJXMnIHB1bnRhIGEgdW4gb2dnZXR0byBzb3N0aXR1dGl2byBkaSB0aXBvICclcycuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAnJXMnIGluIHNjcml0dHVyYSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQyCittc2dpZCAiY2F0LWZpbGUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiY2F0LWZpbGUgaGEgc2VnbmFsYXRvIHVuIGVycm9yZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJXMgaW4gbGV0dHVyYSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGFuY2lhcmUgbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBkYSBta3RyZWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4NQorbXNnaWQgIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJta3RyZWUgaGEgc2VnbmFsYXRvIHVuIGVycm9yZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg5Cittc2dpZCAibWt0cmVlIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCBuYW1lIgorbXNnc3RyICJta3RyZWUgbm9uIGhhIHJlc3RpdHVpdG8gdW4gbm9tZSBvZ2dldHRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZzdGF0ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBmc3RhdCBzdSAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgbCdvZ2dldHRvIG5lbCBkYXRhYmFzZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzIyIGJ1aWx0aW4vcmVwbGFjZS5jOjM3OCBidWlsdGluL3JlcGxhY2UuYzo0MjMKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAibm9tZSBvZ2dldHRvIG5vbiB2YWxpZG86ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBpbCB0aXBvIGRlbGwnb2dnZXR0byAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzQyCittc2dpZCAiZWRpdGluZyBvYmplY3QgZmlsZSBmYWlsZWQiCittc2dzdHIgIm1vZGlmaWNhIGRlbCBmaWxlIG9nZ2V0dG8gbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAiaWwgbnVvdm8gb2dnZXR0byDDqCBsbyBzdGVzc28gZGkgcXVlbGxvIHZlY2NoaW86ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgJXMgY29tZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgInRhZyBtZXJnZSBub24gdmFsaWRvIG5lbCBjb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAidGFnIG1lcmdlIG1hbGZvcm1hdG8gbmVsIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorImlsIGNvbW1pdCBvcmlnaW5hcmlvICclcycgY29udGllbmUgaWwgdGFnIG1lcmdlICclcycgY2hlIMOoIHN0YXRvIHNjYXJ0YXRvOyAiCisidXNhIC0tZWRpdCBhbnppY2jDqSAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgImlsIGNvbW1pdCBvcmlnaW5hcmlvICclcycgaGEgdW5hIGZpcm1hIEdQRyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY5Cittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgImxhIGZpcm1hIHNhcsOgIHJpbW9zc2EgbmVsIGNvbW1pdCBzb3N0aXR1dGl2byEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgY29tbWl0IHNvc3RpdHV0aXZvIHBlciAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgImdyYWZ0IHBlciAnJXMnIG5vbiBuZWNlc3NhcmlvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAiaWwgbnVvdm8gY29tbWl0IMOoIGxvIHN0ZXNzbyBkaSBxdWVsbG8gdmVjY2hpbzogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgY29udmVydGlyZSBpIHNlZ3VlbnRpIGdyYWZ0OlxuIgorIiVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDcKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAiZWxlbmNhIGkgcmlmZXJpbWVudGkgc29zdGl0dXRpdmkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OAorbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgImVsaW1pbmEgaSByaWZlcmltZW50aSBzb3N0aXR1dGl2aSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgIm1vZGlmaWNhIGwnb2dnZXR0byBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgImNhbWJpYSBpIGdlbml0b3JpIGRpIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUxCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICJjb252ZXJ0aSB1biBmaWxlIGdyYWZ0IGVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUyCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAic29zdGl0dWlzY2kgaWwgcmlmZXJpbWVudG8gc2UgZXNpc3RlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTQKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIm5vbiBzdGFtcGFyZSBpIGNvbnRlbnV0aSBpbiB1biBmb3JtYXRvIGxlZ2dpYmlsZSAocGVyIC0tZWRpdCkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NQorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAidXNhIHF1ZXN0byBmb3JtYXRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjgKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICItLWZvcm1hdCBub24gcHXDsiBlc3NlcmUgdXNhdG8gcXVhbmRvIG5vbiBzaSBlbGVuY2FubyB2b2NpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NzYKK21zZ2lkICItZiBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gd3JpdGluZyBhIHJlcGxhY2VtZW50IgorbXNnc3RyICItZiBoYSBzZW5zbyBzb2xvIHNlIHNpIHN0YSBzY3JpdmVuZG8gdW4gb2dnZXR0byBzb3N0aXR1dGl2byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTgwCittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1yYXcgaGEgc2Vuc28gc29sbyBjb24gLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODYKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1kIHJpY2hpZWRlIGFsbWVubyB1biBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5MgorbXNnaWQgImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICJudW1lcm8gZGkgYXJnb21lbnRpIGVycmF0byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk4Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIHJpY2hpZWRlIGVzYXR0YW1lbnRlIHVuIGFyZ29tZW50byIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA0Cittc2dpZCAiLWcgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZyByaWNoaWVkZSBhbG1lbm8gdW4gYXJnb21lbnRvIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTAKK21zZ2lkICItLWNvbnZlcnQtZ3JhZnQtZmlsZSB0YWtlcyBubyBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgbm9uIHJpY2hpZWRlIGFyZ29tZW50aSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjE2Cittc2dpZCAib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIKK21zZ3N0ciAiY29uIC1sIHB1w7IgZXNzZXJlIHNwZWNpZmljYXRvIHNvbG8gdW4gcGF0dGVybiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMworbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgIiIKKyJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGVyY29yc28+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICJyZWdpc3RyYSBsZSByaXNvbHV6aW9uaSBwdWxpdGUgbmVsbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAiJ2dpdCByZXJlcmUgZm9yZ2V0JyBzZW56YSBwZXJjb3JzaSDDqCBkZXByZWNhdG8iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBnZW5lcmFyZSBpbCBkaWZmIHBlciAnJXMnIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPGVzcHJlc3Npb25lIGFsYmVybz5dIFstLV0gPHNwZWNpZmljYXRvcmUgcGVyY29yc28+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzxlc3ByZXNzaW9uZSIKKyIgYWxiZXJvPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNQorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXSIKK21zZ3N0ciAiIgorImdpdCByZXNldCAtLXBhdGNoIFs8ZXNwcmVzc2lvbmUgYWxiZXJvPl0gWy0tXSBbPHNwZWNpZmljYXRvcmUgcGVyY29yc28+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgIm1pc3RvIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJzb2Z0IgorbXNnc3RyICJzb2Z0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJoYXJkIgorbXNnc3RyICJoYXJkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAibWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgImtlZXAiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJOb24gaGFpIHVuIEhFQUQgdmFsaWRvLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBsJ2FsYmVybyBkaSBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGwnYWxiZXJvIGRpICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCBvcmEgc2kgdHJvdmEgYSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSB1biAlcyByZXNldCBuZWwgY29yc28gZGkgdW4gbWVyZ2UuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk0IGJ1aWx0aW4vc3Rhc2guYzo1MTkgYnVpbHRpbi9zdGFzaC5jOjU5NAorIzogYnVpbHRpbi9zdGFzaC5jOjYxOAorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgbWVzc2FnZ2ksIHNlZ25hbGEgc29sbyBnbGkgZXJyb3JpIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk2Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInJlaW1wb3N0YSBsJ0hFQUQgZSBsJ2luZGljZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAicmVpbXBvc3RhIHNvbG8gbCdIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk5IGJ1aWx0aW4vcmVzZXQuYzozMDEKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICJyZWltcG9zdGEgbCdIRUFELCBsJ2luZGljZSBlIGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAicmVpbXBvc3RhIGwnSEVBRCBtYSBtYW50aWVuaSBsZSBtb2RpZmljaGUgbG9jYWxpIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIiIKKyJzYWx2YSBzb2xvIGlsIGZhdHRvIGNoZSBpIHBlcmNvcnNpIHJpbW9zc2kgc2FyYW5ubyBhZ2dpdW50aSBzdWNjZXNzaXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiUmlzb2x1emlvbmUgZGkgJyVzJyBjb21lIHJldmlzaW9uZSB2YWxpZGEgbm9uIHJpdXNjaXRhLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIlJpc29sdXppb25lIGRpICclcycgY29tZSBhbGJlcm8gdmFsaWRvIG5vbiByaXVzY2l0YS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggbm9uIMOoIGNvbXBhdGliaWxlIGNvbiAtLXtoYXJkLG1peGVkLHNvZnR9IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICItLW1peGVkIGNvbiBpIHBhdGggw6ggZGVwcmVjYXRhOyB1c2EgaW52ZWNlICdnaXQgcmVzZXQgLS0gPHBhdGg+Jy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSB1biAlcyByZXNldCBjb24gZGVpIHBlcmNvcnNpLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMgcmVzZXQgbm9uIMOoIGNvbnNlbnRpdG8gaW4gdW4gcmVwb3NpdG9yeSBzcG9nbGlvIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIHB1w7IgZXNzZXJlIHVzYXRvIHNvbG8gY29uIC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTIKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiTW9kaWZpY2hlIG5vbiBuZWxsJ2FyZWEgZGkgc3RhZ2luZyBkb3BvIGlsIHJlc2V0OiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisiXG4iCisiQ2kgc29ubyB2b2x1dGkgJS4yZiBzZWNvbmRpIHBlciBlbGVuY2FyZSBsZSBtb2RpZmljaGUgbm9uIG5lbGwnYXJlYSBkaVxuIgorInN0YWdpbmcgZG9wbyBpbCByZXNldC4gUHVvaSB1c2FyZSAnLS1xdWlldCcgcGVyIG5vbiB2aXN1YWxpenphcmUgcXVlc3RvXG4iCisibWVzc2FnZ2lvLiBJbXBvc3RhIGwnb3B6aW9uZSBkaSBjb25maWd1cmF6aW9uZSByZXNldC5xdWlldCBhIHRydWUgcGVyXG4iCisicmVuZGVyZSB0YWxlIGNvbXBvcnRhbWVudG8gcXVlbGxvIHByZWRlZmluaXRvLlxuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaXByaXN0aW5hcmUgaWwgZmlsZSBpbmRpY2UgYWxsYSByZXZpc2lvbmUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBudW92byBmaWxlIGluZGljZS4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0MTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBjb21iaW5hcmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgZSAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0NzIKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIHJlcXVpcmVzIC0tb2JqZWN0cyIKK21zZ3N0ciAiaWwgZmlsdHJhZ2dpbyBvZ2dldHRpIHJpY2hpZWRlIC0tb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyMgorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAicmV2LWxpc3Qgbm9uIHN1cHBvcnRhIGxhIHZpc3VhbGl6emF6aW9uZSBkZWxsZSBub3RlIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTI1Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS11c2UtYml0bWFwLWluZGV4IHdpdGggb2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29tYmluYXJlIC0tdXNlLWJpdG1hcC1pbmRleCBjb24gaWwgZmlsdHJhZ2dpbyBvZ2dldHRpIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B6aW9uaT5dIC0tIFs8YXJnb21lbnRpPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDEzCittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICJtYW50aWVuaSBsYSBzdHJpbmdhIHBhc3NhdGEgYC0tYCBjb21lIGFyZ29tZW50byIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgIiIKKyJ0ZXJtaW5hIGwnYW5hbGlzaSBkb3BvIGlsIHByaW1vIGFyZ29tZW50byBub24gY29ycmlzcG9uZGVudGUgYSB1bidvcHppb25lIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgImVtZXR0aSBsJ291dHB1dCBpbiBmb3JtYSBcInN0dWNrIGxvbmdcIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHppb25pPl0gLS0gWzxhcmdvbWVudGk+Li4uXVxuIgorIiAgIG86IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZ29tZW50bz4uLi5dXG4iCisiICAgbzogZ2l0IHJldi1wYXJzZSBbPG9wemlvbmk+XSBbPGFyZ29tZW50bz4uLi5dXG4iCisiXG4iCisiRXNlZ3VpIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgcGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkgc3VsbGEgIgorInByaW1hXG4iCisibW9kYWxpdMOgIGQndXNvLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNAorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs8b3B6aW9uaT5dIDxlc3ByZXNzaW9uZSBjb21taXQ+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPHNvdHRvY29tYW5kbz4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHppb25pPl0gPGVzcHJlc3Npb25lIGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHNvdHRvY29tYW5kbz4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyIKK21zZ3N0ciAibCdvcHppb25lIGAlcycgcmljaGllZGUgdW4gbnVtZXJvIG1hZ2dpb3JlIGRpIHplcm8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBub24gcHXDsiBlc3NlcmUgdXNhdGEgY29uICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgInRlcm1pbmEgbGEgc2VxdWVuemEgcmV2ZXJ0IG8gY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicmlwcmVuZGkgbGEgc2VxdWVuemEgcmV2ZXJ0IG8gY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiYW5udWxsYSBsYSBzZXF1ZW56YSByZXZlcnQgbyBjaGVycnktcGljayIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAic2FsdGEgaWwgY29tbWl0IGNvcnJlbnRlIGUgY29udGludWEiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgIm5vbiBlc2VndWlyZSBpbCBjb21taXQgYXV0b21hdGljYW1lbnRlIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJtb2RpZmljYSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IgorCisjOiBidWlsdGluL3JldmVydC5jOjExMQorbXNnaWQgInBhcmVudC1udW1iZXIiCittc2dzdHIgIm51bWVyby1nZW5pdG9yZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICJzZWxlemlvbmEgaWwgZ2VuaXRvcmUgbWFpbmxpbmUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInN0cmF0ZWdpYSBkaSBtZXJnZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJvcHppb25lIHBlciBsYSBzdHJhdGVnaWEgZGkgbWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJhZ2dpdW5naSBpbCBub21lIGRlbCBjb21taXQgYWxsYSBmaW5lIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICJtYW50aWVuaSBpIGNvbW1pdCBpbml6aWFsbWVudGUgdnVvdGkiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIm1hbnRpZW5pIGkgY29tbWl0IHJpZG9uZGFudGkgZSB2dW90aSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJyZXZlcnQgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0NQorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiY2hlcnJ5LXBpY2sgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL3JtLmM6MTkKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPG9wemlvbmk+XSBbLS1dIDxmaWxlPi4uLiIKKworIzogYnVpbHRpbi9ybS5jOjIwNworbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnc3RyWzBdICIiCisiaWwgc2VndWVudGUgZmlsZSBoYSBjb250ZW51dGkgbmVsbCdhcmVhIGRpIHN0YWdpbmcgY2hlXG4iCisiZGlmZmVyaXNjb25vIHNpYSByaXNwZXR0byBhIHF1ZWxsaSBkZWwgZmlsZSBzaWEgcmlzcGV0dG8gYSBIRUFEOiIKK21zZ3N0clsxXSAiIgorImkgc2VndWVudGkgZmlsZSBoYW5ubyBjb250ZW51dGkgbmVsbCdhcmVhIGRpIHN0YWdpbmcgY2hlXG4iCisiZGlmZmVyaXNjb25vIHNpYSByaXNwZXR0byBhIHF1ZWxsaSBkZWwgZmlsZSBzaWEgcmlzcGV0dG8gYSBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMgorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKHVzYSAtZiBwZXIgZm9yemFybmUgbGEgcmltb3ppb25lKSIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gImlsIHNlZ3VlbnRlIGZpbGUgaGEgZGVsbGUgbW9kaWZpY2hlIGluIHN0YWdpbmcgbmVsbCdpbmRpY2U6IgorbXNnc3RyWzFdICJpIHNlZ3VlbnRpIGZpbGUgaGFubm8gZGVsbGUgbW9kaWZpY2hlIGluIHN0YWdpbmcgbmVsbCdpbmRpY2U6IgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1c2EgLS1jYWNoZWQgcGVyIG1hbnRlbmVyZSBpbCBmaWxlIG8gLWYgcGVyIGZvcnphcm5lIGxhIHJpbW96aW9uZSkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gImlsIHNlZ3VlbnRlIGZpbGUgaGEgZGVsbGUgbW9kaWZpY2hlIGxvY2FsaToiCittc2dzdHJbMV0gImkgc2VndWVudGkgZmlsZSBoYW5ubyBkZWxsZSBtb2RpZmljaGUgbG9jYWxpOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIm5vbiBlbGVuY2FyZSBpIGZpbGUgcmltb3NzaSIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJyaW11b3ZpIHNvbG8gZGFsbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiaWdub3JhIGlsIGNvbnRyb2xsbyBzdWxsbyBzdGF0byBkaSBhZ2dpb3JuYW1lbnRvIgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgImNvbnNlbnRpIHJpbW96aW9uaSByaWNvcnNpdmUiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDcKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAiIgorImVzY2kgY29uIGNvZGljZSBkJ3VzY2l0YSB6ZXJvIGFuY2hlIG5lbCBjYXNvIGluIGN1aSBub24gdmkgc2lhbm8gIgorImNvcnJpc3BvbmRlbnplIgorCisjOiBidWlsdGluL3JtLmM6Mjg5Cittc2dpZCAicGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJlc2VndWkgbG8gc3RhZ2UgZGVsbGUgbW9kaWZpY2hlIGEgLmdpdG1vZHVsZXMgbyBlc2VndWluZSBsbyBzdGFzaCBwZXIgIgorInByb2NlZGVyZSIKKworIzogYnVpbHRpbi9ybS5jOjMwNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICJub24gcmltdW92byAnJXMnIHJpY29yc2l2YW1lbnRlIHNlbnphIC1yIgorCisjOiBidWlsdGluL3JtLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBub24gw6ggcG9zc2liaWxlIGVsaW1pbmFyZSAlcyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoyMAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJpZmVyaW1lbnRvPi4uLl1cbiIKKyIgIC0tYWxsIGUgdW5vIHNwZWNpZmljYXRvcmUgPHJpZmVyaW1lbnRvPiBzb25vIG11dHVhbG1lbnRlIGVzY2x1c2l2aS4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgIm5vbWUgcmVtb3RvIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJ1c2EgcHJvdG9jb2xsbyBSUEMgc2VuemEgc3RhdG8iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc4Cittc2dpZCAicmVhZCByZWZzIGZyb20gc3RkaW4iCittc2dzdHIgImxlZ2dpIGkgcmlmZXJpbWVudG8gZGFsbG8gc3RhbmRhcmQgaW5wdXQiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAic3RhbXBhIGxvIHN0YXRvIGRlbGwnaGVscGVyIHJlbW90byIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE0Cittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzxvcHppb25pPl0gWzxpbnRlcnZhbGxvIHJldmlzaW9uaT5dIFtbLS1dIDxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTUKK21zZ2lkICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nIFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAiUmFnZ3J1cHBhIHBlciBwZXJzb25hIGNoZSBoYSBlc2VndWl0byBpbCBjb21taXQgYW56aWNow6kgcGVyIGF1dG9yZSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAib3JkaW5hIGwnb3V0cHV0IGluIGJhc2UgYWwgbnVtZXJvIGRpIGNvbW1pdCBwZXIgYXV0b3JlIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIk9tZXR0aSBsZSBkZXNjcml6aW9uaSBkZWkgY29tbWl0LCBmb3JuaXNjaSBzb2xvIGlsIG51bWVybyBkZWkgY29tbWl0IgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsJ2luZGlyaXp6byBlLW1haWwgZGkgb2duaSBhdXRvcmUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiPHc+Wyw8aTE+Wyw8aTI+XV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIk91dHB1dCBhIGNhcG8gYXV0b21hdGljbyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjMwMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgInRyb3BwaSBhcmdvbWVudGkgZm9ybml0aSBvbHRyZSBhbCByZXBvc2l0b3J5IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTxxdWFuZG8+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2aXNpb25lPiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTcKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmlmZXJpbWVudG8+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAiaWdub3JvICVzOyBub24gcG9zc28gZ2VzdGlyZSBwacO5IGRpICVkIHJpZmVyaW1lbnRvIgorbXNnc3RyWzFdICJpZ25vcm8gJXM7IG5vbiBwb3NzbyBnZXN0aXJlIHBpw7kgZGkgJWQgcmlmZXJpbWVudGkiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICJuZXNzdW4gcmlmZXJpbWVudG8gY29ycmlzcG9uZGVudGUgYSAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIGJyYW5jaCBjaGUgbmUgdHJhY2NpYW5vIHVubyByZW1vdG8gZSBxdWVsbGkgbG9jYWxpIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgInZpc3VhbGl6emEgaSBicmFuY2ggY2hlIG5lIHRyYWNjaWFubyB1bm8gcmVtb3RvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiY29sb3JlICcqISstJyBjb3JyaXNwb25kZW50ZSBhbCBicmFuY2giCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAidmlzdWFsaXp6YSA8bj4gY29tbWl0IHVsdGVyaW9yaSByaXNwZXR0byBhbGwnYW50ZW5hdG8gY29tdW5lIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICJzaW5vbmltbyBkaSBtb3JlPS0xIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU0Cittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgIm5vbiB2aXN1YWxpenphcmUgbGUgc3RyaW5naGUgZGkgZGVub21pbmF6aW9uZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NgorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJpbmNsdWRpIGlsIGJyYW5jaCBjb3JyZW50ZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OAorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAiZGVub21pbmEgaSBjb21taXQgY29uIGkgbG9ybyBub21pIG9nZ2V0dG8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICJ2aXN1YWxpenphIGxlIGJhc2kgbWVyZ2UgcG9zc2liaWxpIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYyCittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIHJpZmVyaW1lbnRpIG5vbiByYWdnaXVuZ2liaWxpIGRhIG5lc3N1biBhbHRybyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAidmlzdWFsaXp6YSBpIGNvbW1pdCBpbiBvcmRpbmUgdG9wb2xvZ2ljbyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NworbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICJ2aXN1YWxpenphIHNvbG8gaSBjb21taXQgbm9uIHN1bCBwcmltbyBicmFuY2giCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjkKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgInZpc3VhbGl6emEgaSBtZXJnZSByYWdnaXVuZ2liaWxpIHNvbG8gZGFsbCd1bHRpbW8gY29tbWl0IGRpIHVuIGJyYW5jaCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAiIgorImVzZWd1aSB1biBvcmRpbmFtZW50byB0b3BvbG9naWNvIG1hbnRlbmVuZG8gbCdvcmRpbmUgZGVsbGUgZGF0ZSBvdmUgcG9zc2liaWxlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxiYXNlPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzUKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAiIgorInZpc3VhbGl6emEgbGUgPG4+IHZvY2kgcGnDuSByZWNlbnRpIGRlbCBsb2cgZGVpIHJpZmVyaW1lbnRpIHBhcnRlbmRvIGRhIGJhc2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyItLXJlZmxvZyBub24gw6ggY29tcGF0aWJpbGUgY29uIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgbyAtLW1lcmdlLWJhc2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzUKK21zZ2lkICJubyBicmFuY2hlcyBnaXZlbiwgYW5kIEhFQUQgaXMgbm90IHZhbGlkIgorbXNnc3RyICJuZXNzdW4gYnJhbmNoIGZvcm5pdG8gZSBsJ0hFQUQgbm9uIMOoIHZhbGlkbyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczOAorbXNnaWQgIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiCittc2dzdHIgImwnb3B6aW9uZSAtLXJlZmxvZyByaWNoaWVkZSBpbCBub21lIGRpIHVuIGJyYW5jaCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5ICVkIGVudHJ5IGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dpZF9wbHVyYWwgIm9ubHkgJWQgZW50cmllcyBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnc3RyWzBdICJwdcOyIGVzc2VyZSB2aXN1YWxpenphdGEgc29sbyAlZCB2b2NlIHBlciB2b2x0YS4iCittc2dzdHJbMV0gInBvc3Nvbm8gZXNzZXJlIHZpc3VhbGl6emF0ZSBzb2xvICVkIHZvY2kgcGVyIHZvbHRhLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAicmlmZXJpbWVudG8gbm9uIGVzaXN0ZW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gImltcG9zc2liaWxlIGdlc3RpcmUgcGnDuSBkaSAlZCByZXZpc2lvbmUuIgorbXNnc3RyWzFdICJpbXBvc3NpYmlsZSBnZXN0aXJlIHBpw7kgZGkgJWQgcmV2aXNpb25pLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgbm9uIMOoIHVuIHJpZmVyaW1lbnRvIHZhbGlkby4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgaWwgY29tbWl0ICVzICglcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEzCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MgorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBpIHRhZyAobCdvcHppb25lIHB1w7IgZXNzZXJlIGNvbWJpbmF0YSBjb24gaGVhZHMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAidmlzdWFsaXp6YSBzb2xvIGxlIGhlYWQgKGwnb3B6aW9uZSBwdcOyIGVzc2VyZSBjb21iaW5hdGEgY29uIHRhZ3MpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY0Cittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAiIgorImNvbnRyb2xsbyBwacO5IHN0cmluZ2VudGUgZGVpIHJpZmVyaW1lbnRpLCByaWNoaWVkZSB1biBwZXJjb3JzbyBlc2F0dG8gYWwgIgorInJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY3IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjkKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgInZpc3VhbGl6emEgaWwgcmlmZXJpbWVudG8gSEVBRCBhbmNoZSBzZSBmaWx0cmF0byIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICJkZXJlZmVyZW56aWEgaSB0YWcgaW4gSUQgb2dnZXR0byIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MworbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAidmlzdWFsaXp6YSBsJ2hhc2ggU0hBMSB1c2FuZG8gc29sbyA8bj4gY2FyYXR0ZXJpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIm5vbiBzdGFtcGFyZSBpIHJpc3VsdGF0aSBzdWxsbyBzdGFuZGFyZCBvdXRwdXQgKHV0aWxlIGNvbiAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisidmlzdWFsaXp6YSBpIHJpZmVyaW1lbnRpIGRhdGkgc3VsbG8gc3RhbmRhcmQgaW5wdXQgY2hlIG5vbiBzb25vIG5lbCAiCisicmVwb3NpdG9yeSBsb2NhbGUiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGRpc2FibGUpIDxvcHRpb25zPiIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSA8b3B6aW9uaT4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjEKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICIiCisicXVlc3RvIGFsYmVybyBkaSBsYXZvcm8gbm9uIMOoIHNwYXJzZSAoaWwgZmlsZSBzcGFyc2UtY2hlY2tvdXQgcG90cmViYmUgbm9uIgorIiBlc2lzdGVyZSkiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjIwCittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgImltcG9zdGF6aW9uZSBkZWxsJ29wemlvbmUgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjM3Cittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjU2Cittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAiaW5pemlhbGl6emEgaWwgY2hlY2tvdXQgc3BhcnNlIGluIG1vZGFsaXTDoCBjb25lIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI2MgorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJpbml6aWFsaXp6YSBzcGFyc2UtY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImFwZXJ0dXJhIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM2MQorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0ICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0ICgtLXN0ZGluIHwgPHBhdHRlcm4+KSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNzgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gc3RhbmRhcmQgaW4iCittc2dzdHIgImxlZ2dpIGkgcGF0dGVybiBkYWxsbyBzdGFuZGFyZCBpbnB1dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozODQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJpbXBvc3RhIGkgcGF0dGVybiBzcGFyc2UtY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDQ3Cittc2dpZCAiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgImRpc2FiaWxpdGEgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQ1OQorbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImVycm9yZSBkdXJhbnRlIGwnYWdnaW9ybmFtZW50byBkZWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjIgYnVpbHRpbi9zdGFzaC5jOjM3Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzdGFzaCBsaXN0IFs8b3B6aW9uaT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjMgYnVpbHRpbi9zdGFzaC5jOjQyCittc2dpZCAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggc2hvdyBbPG9wemlvbmk+XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNCBidWlsdGluL3N0YXNoLmM6NDcKK21zZ2lkICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjYgYnVpbHRpbi9zdGFzaC5jOjYyCittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYnJhbmNoIDxub21lIGJyYW5jaD4gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjcgYnVpbHRpbi9zdGFzaC5jOjY3Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyOCBidWlsdGluL3N0YXNoLmM6NzcKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdnaW8+XVxuIgorIiAgICAgICAgICBbLS1dIFs8c3BlY2lmaWNhdG9yZSBwZXJjb3Jzbz4uLi5dXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjMxIGJ1aWx0aW4vc3Rhc2guYzo4NAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdnaW8+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyCittc2dpZCAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU3Cittc2dpZCAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo3MgorbXNnaWQgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorbXNnc3RyICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZ2lvPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIiclcycgbm9uIMOoIHVuIGNvbW1pdCBzaW1pbGUgYSB1bm8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIKK21zZ3N0ciAiVHJvcHBlIHJldmlzaW9uaSBzcGVjaWZpY2F0ZTolcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICJOZXNzdW5hIHZvY2UgZGkgc3Rhc2ggdHJvdmF0YS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIlcyBub24gw6ggdW4gcmlmZXJpbWVudG8gdmFsaWRvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjI0IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzUKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciBjb24gcGFyYW1ldHJpIG5vbiDDqCBpbXBsZW1lbnRhdG8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDMKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgImltcG9zc2liaWxlIGFwcGxpY2FyZSB1bm8gc3Rhc2ggbmVsIG1lenpvIGRpIHVuIG1lcmdlIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBnZW5lcmFyZSBpbCBkaWZmICVzXiEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjEKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgImNpIHNvbm8gY29uZmxpdHRpIG5lbGwnaW5kaWNlLiBQcm92YSBzZW56YSAtLWluZGV4LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyNworbXNnaWQgImNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgImltcG9zc2liaWxlIHNhbHZhcmUgbCdhbGJlcm8gaW5kaWNlIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDM2Cittc2dpZCAiY291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2giCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmlwcmlzdGluYXJlIGkgZmlsZSBub24gdHJhY2NpYXRpIGRhbGxvIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlcyIKK21zZ3N0ciAiTWVyZ2UgZGkgJXMgY29uICVzIGluIGNvcnNvIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYwIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJMJ2luZGljZSBub24gw6ggc3RhdG8gcmltb3NzbyBkYWxsbyBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MjEgYnVpbHRpbi9zdGFzaC5jOjYyMAorbXNnaWQgImF0dGVtcHQgdG8gcmVjcmVhdGUgdGhlIGluZGV4IgorbXNnc3RyICJ0ZW50YSBkaSByaWNyZWFyZSBsJ2luZGljZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgIkhvIHNjYXJ0YXRvICVzICglcykiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIlczogSW1wb3NzaWJpbGUgc2NhcnRhcmUgbGEgdm9jZSBkaSBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyVzJyBub24gw6ggdW4gcmlmZXJpbWVudG8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiIgorIkxhIHZvY2UgZGkgc3Rhc2ggw6ggbWFudGVudXRhIG5lbCBjYXNvIGluIGN1aSB0dSBuZSBhYmJpYSBudW92YW1lbnRlIGJpc29nbm8uIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU1IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJOb21lIGRlbCBicmFuY2ggbm9uIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk1IGJ1aWx0aW4vc3Rhc2guYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlICVzIGNvbiAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxMyBidWlsdGluL3N0YXNoLmM6MTQ3MCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgIm1lc3NhZ2dpbyBkaSBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyMworbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICJcImdpdCBzdGFzaCBzdG9yZVwiIHJpY2hpZWRlIHVuIGFyZ29tZW50byA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEwNDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTgKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIHNlbGV6aW9uYXRhIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJOb24gaGFpIGFuY29yYSB1biBjb21taXQgaW5pemlhbGUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTcyIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTY1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIkltcG9zc2liaWxlIHNhbHZhcmUgbG8gc3RhdG8gY29ycmVudGUgZGkgaW5kZXgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTgxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2FsdmFyZSBpIGZpbGUgbm9uIHRyYWNjaWF0aSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExOTIgYnVpbHRpbi9zdGFzaC5jOjEyMDEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMDEKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE0Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIkltcG9zc2liaWxlIHNhbHZhcmUgbG8gc3RhdG8gY29ycmVudGUgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTIyOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIzNAorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICJJbXBvc3NpYmlsZSByZWdpc3RyYXJlIGxvIHN0YXRvIGRlbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyNzggZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgdXNhcmUgLS1wYXRjaCBlIC0taW5jbHVkZS11bnRyYWNrZWQgbyAtLWFsbCBhbGxvIHN0ZXNzbyB0ZW1wbyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTQKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICJUaSBzZWkgc2NvcmRhdG8gZGkgZXNlZ3VpcmUgJ2dpdCBhZGQnPyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNDYKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgbG9jYWxlIGRhIHNhbHZhcmUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzE2IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIkltcG9zc2liaWxlIGluaXppYWxpenphcmUgc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzMxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzYWx2YXJlIGxvIHN0YXRvIGF0dHVhbGUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAlcyIKK21zZ3N0ciAiRGlyZWN0b3J5IGRpIGxhdm9ybyBlIHN0YXRvIGluZGljZSBzYWx2YXRpOiAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0MjYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozODUKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsZSBtb2RpZmljaGUgYWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYxIGJ1aWx0aW4vc3Rhc2guYzoxNDk3Cittc2dpZCAia2VlcCBpbmRleCIKK21zZ3N0ciAibWFudGllbmkgbCdpbmRpY2UiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYzIGJ1aWx0aW4vc3Rhc2guYzoxNDk5Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAiZXNlZ3VpIGxvIHN0YXNoIGluIG1vZGFsaXTDoCBwYXRjaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjQgYnVpbHRpbi9zdGFzaC5jOjE1MDAKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICJtb2RhbGl0w6Agc2lsZW56aW9zYSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjYgYnVpbHRpbi9zdGFzaC5jOjE1MDIKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAiaW5jbHVkaSBpIGZpbGUgbm9uIHRyYWNjaWF0aSBuZWxsbyBzdGFzaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjggYnVpbHRpbi9zdGFzaC5jOjE1MDQKK21zZ2lkICJpbmNsdWRlIGlnbm9yZSBmaWxlcyIKK21zZ3N0ciAiaW5jbHVkaSBpIGZpbGUgaWdub3JhdGkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleGVjICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSAlcyIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgInNhbHRhIGUgcmltdW92aSB0dXR0ZSBsZSByaWdoZSBjaGUgaW5pemlhbm8gY29uIHVuIGNhcmF0dGVyZSBjb21tZW50byIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6NDAKK21zZ2lkICJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiCittc2dzdHIgImFudGVwb25pIGlsIGNhcmF0dGVyZSBjb21tZW50byBlIHVubyBzcGF6aW8gYSBvZ25pIHJpZ2EiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIkF0dGVzbyBub21lIHJpZmVyaW1lbnRvIGNvbXBsZXRvLCByaWNldnV0byAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0Cittc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSBub24gcmljaGllZGUgYXJnb21lbnRpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmltdW92ZXJlIHVuIGNvbXBvbmVudGUgZGFsbCdVUkwgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MAorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgImFuY29yYWdnaW8gYWx0ZXJuYXRpdm8gcGVyIGkgcGVyY29yc2kgcmVsYXRpdmkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwZXJjb3Jzbz5dIFs8cGVyY29yc28+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiTmVzc3VuIFVSTCB0cm92YXRvIGluIC5naXRtb2R1bGVzIHBlciBpbCBwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJXMnXG4iCittc2dzdHIgIkVudHJvIGluICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKyJydW5fY29tbWFuZCBoYSByZXN0aXR1aXRvIHVuIGNvZGljZSBkaXZlcnNvIGRhIHplcm8gcGVyICVzXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorInJ1bl9jb21tYW5kIGhhIHJlc3RpdHVpdG8gdW4gY29kaWNlIGRpdmVyc28gZGEgemVybyBkdXJhbnRlIGxhIHJpY29yc2lvbmUgIgorIm5laSBzb3R0b21vZHVsaSBpbm5lc3RhdGkgZGkgJXNcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIGVudGVyaW5nIGVhY2ggc3VibW9kdWxlIGNvbW1hbmQiCittc2dzdHIgIk5vbiB2aXN1YWxpenphcmUgbCdvdXRwdXQgZGVpIGNvbWFuZGkgZXNlZ3VpdGkgaW4gb2duaSBzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiRXNlZ3VpIHJpY29yc2l2YW1lbnRlIHN1aSBzb3R0b21vZHVsaSBpbm5lc3RhdGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NzIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tYW5kbz4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgdHJvdmFyZSBsYSBjb25maWd1cmF6aW9uZSAnJXMnLiBBc3N1bW8gY2hlIHF1ZXN0byByZXBvc2l0b3J5IHNpYSAiCisiaWwgcHJvcHJpbyByZXBvc2l0b3J5IGF1dG9yaXRhdGl2byB1cHN0cmVhbS4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiUmVnaXN0cmF6aW9uZSBkZWxsJ1VSTCBwZXIgaWwgcGVyY29yc28gc290dG9tb2R1bG8gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiU290dG9tb2R1bG8gJyVzJyAoJXMpIHJlZ2lzdHJhdG8gcGVyIGlsIHBlcmNvcnNvICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBjb21tYW5kIHVwZGF0ZSBtb2RlIHN1Z2dlc3RlZCBmb3Igc3VibW9kdWxlICclcydcbiIKK21zZ3N0ciAiIgorImF2dmlzbzogc3VnZ2VyaXRhIG1vZGFsaXTDoCBjb21hbmRvIGFnZ2lvcm5hbWVudG8gcGVyIGlsIHNvdHRvbW9kdWxvICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKyJSZWdpc3RyYXppb25lIGRlbGxhIG1vZGFsaXTDoCBhZ2dpb3JuYW1lbnRvIHBlciBpbCBwZXJjb3JzbyBzb3R0b21vZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEwCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgIk5vbiB2aXN1YWxpenphcmUgbCdvdXRwdXQgZGVsbCdpbml6aWFsaXp6YXppb25lIGRlbCBzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wemlvbmk+XSBbPHBlcmNvcnNvPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3ODcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJtYXBwaW5nIHNvdHRvbW9kdWxvIHBlciBpbCBwZXJjb3JzbyAnJXMnIG5vbiB0cm92YXRvIGluIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgcmVmIGluc2lkZSB0aGUgc3VibW9kdWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHJpc29sdmVyZSBpbCByaWZlcmltZW50byBIRUFEIG5lbCBzb3R0b21vZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODU0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgInJpY29yc2lvbmUgbmVsIHNvdHRvbW9kdWxvICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTg5Cittc2dpZCAiU3VwcHJlc3Mgc3VibW9kdWxlIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIk5vbiB2aXN1YWxpenphcmUgbCdvdXRwdXQgZGVsbG8gc3RhdG8gZGVsIHNvdHRvbW9kdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc5Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIiIKKyJVc2EgaWwgY29tbWl0IHNhbHZhdG8gbmVsbCdpbmRpY2UgYW56aWNow6kgcXVlbGxvIHNhbHZhdG8gbmVsbCdIRUFEIGRlbCAiCisic290dG9tb2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODAKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgImVzZWd1aSByaWNvcnNpdmFtZW50ZSBzdWkgc290dG9tb2R1bGkgaW5uZXN0YXRpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwZXJjb3Jzbz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTA5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8cGVyY29yc28+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIgorbXNnc3RyICJTaW5jcm9uaXp6YXppb25lIFVSTCBzb3R0b21vZHVsbyBwZXIgJyVzJyBpbiBjb3Jzb1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgInJlZ2lzdHJhemlvbmUgZGVsbCdVUkwgcGVyIGlsIHBlcmNvcnNvIHNvdHRvbW9kdWxvICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAicmVjdXBlcm8gZGVsIHJlbW90byBwcmVkZWZpbml0byBwZXIgaWwgc290dG9tb2R1bG8gJyVzJyBub24gcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiYWdnaW9ybmFtZW50byBkZWwgcmVtb3RvIHBlciBpbCBzb3R0b21vZHVsbyAnJXMnIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICIiCisiTm9uIHZpc3VhbGl6emFyZSBsJ291dHB1dCBkZWxsYSBzaW5jcm9uaXp6YXppb25lIGRlbGwnVVJMIGRlbCBzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwZXJjb3Jzbz5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkgKHVzZSAncm0gLXJmJyBpZiB5b3UgIgorInJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIkwnYWxiZXJvIGRpIGxhdm9ybyBkZWwgc290dG9tb2R1bG8gKCclcycpIGNvbnRpZW5lIHVuYSBkaXJlY3RvcnkgLmdpdCAodXNhICIKKyIncm0gLXJmJyBzZSB2dW9pIHZlcmFtZW50ZSByaW11b3ZlcmxhLCBpbmNsdXNhIGwnaW50ZXJhIHN1YSBjcm9ub2xvZ2lhKSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisiTCdhbGJlcm8gZGkgbGF2b3JvIGRlbCBzb3R0b21vZHVsbyAoJyVzJykgY29udGllbmUgbW9kaWZpY2hlIGxvY2FsaTsgdXNhICctIgorImYnIHBlciBzY2FydGFybGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiRGlyZWN0b3J5ICclcycgcmlwdWxpdGFcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGwnYWxiZXJvIGRpIGxhdm9ybyBkZWwgc290dG9tb2R1bG8gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3RvcnkgdnVvdGEgZGVsIHNvdHRvbW9kdWxvICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIlJpbW9zc2EgcmVnaXN0cmF6aW9uZSBzb3R0b21vZHVsbyAnJXMnICglcykgcGVyIGlsIHBlcmNvcnNvICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTAKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorIlJpbXVvdmkgZ2xpIGFsYmVyaSBkaSBsYXZvcm8gZGVpIHNvdHRvbW9kdWxpIGFuY2hlIHNlIGNvbnRlbmdvbm8gbW9kaWZpY2hlICIKKyJsb2NhbGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiQW5udWxsYSBsYSByZWdpc3RyYXppb25lIGRpIHR1dHRpIGkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTk2Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGVyY29yc28+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiVXNhICctLWFsbCcgc2UgdnVvaSB2ZXJhbWVudGUgZGVpbml6aWFsaXp6YXJlIHR1dHRpIGkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjc1Cittc2dpZCAiIgorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorbXNnc3RyICIiCisiVW4gYWx0ZXJuYXRvIGNhbGNvbGF0byBhIHBhcnRpcmUgZGFsbCdhbHRlcm5hdG8gZGkgdW4gcHJvZ2V0dG8gZGkgbGl2ZWxsb1xuIgorInN1cGVyaW9yZSBub24gw6ggdmFsaWRvLlxuIgorIlBlciBjb25zZW50aXJlIGEgR2l0IGRpIGVzZWd1aXJlIGlsIGNsb25lIHNlbnphIGFsdGVybmF0aSBpbiB0YWwgY2FzbywiCisiIGltcG9zdGFcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBhICdpbmZvJyBvLCBlcXVpdmFsZW50ZW1lbnRlLCBlc2VndWkgaWwiCisiIGNsb25lXG4iCisiY29uIGwnb3B6aW9uZSAnLS1yZWZlcmVuY2UtaWYtYWJsZScgYW56aWNow6kgJy0tcmVmZXJlbmNlJy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzE0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIHVuIGFsdGVybmF0byBwZXIgaWwgc290dG9tb2R1bG8gJyVzJzogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJWYWxvcmUgJyVzJyBwZXIgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgbm9uIHJpY29ub3NjaXV0byIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJWYWxvcmUgJyVzJyBwZXIgc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIG5vbiByaWNvbm9zY2l1dG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgzCittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgInBlcmNvcnNvIGluIGN1aSBzYXLDoCBjbG9uYXRvIGlsIG51b3ZvIHNvdHRvbW9kdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NgorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIm5vbWUgZGVsIG51b3ZvIHNvdHRvbW9kdWxvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4OQorbXNnaWQgInVybCB3aGVyZSB0byBjbG9uZSB0aGUgc3VibW9kdWxlIGZyb20iCittc2dzdHIgIlVSTCBkYSBjdWkgY2xvbmFyZSBpbCBzb3R0b21vZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgInByb2ZvbmRpdMOgIHBlciBpIGNsb25pIHNoYWxsb3ciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk3Cittc2dpZCAiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIKK21zZ3N0ciAiZm9yemEgbCdpbmRpY2F6aW9uZSBkJ2F2YW56YW1lbnRvIGRlbGxhIGNsb25hemlvbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk5Cittc2dpZCAiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiCittc2dzdHIgImRpc2FiaWxpdGEgaWwgY2xvbmUgaW4gdW5hIGRpcmVjdG9yeSBub24gdnVvdGEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSAtLXVybCA8dXJsPiAtLXBhdGggPHBhdGg+IgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGVyY29yc28+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5vbWU+XSBbLS1kZXB0aCA8cHJvZm9uZGl0w6A+XSAtLXVybCA8VVJMPiAtLXBhdGggIgorIjxwZXJjb3Jzbz4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGNyZWF0ZS91c2UgJyVzJyBpbiBhbm90aGVyIHN1Ym1vZHVsZSdzIGdpdCBkaXIiCittc2dzdHIgIiIKKyJtaSByaWZpdXRvIGRpIGNyZWFyZS91c2FyZSAnJXMnIG5lbGxhIGRpcmVjdG9yeSBHaXQgZGkgdW4gYWx0cm8gc290dG9tb2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiY2xvbmUgZGkgJyVzJyBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICgnJXMnKSBub24gcml1c2NpdG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSBub3QgZW1wdHk6ICclcyciCittc2dzdHIgImRpcmVjdG9yeSBub24gdnVvdGE6ICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsYSBkaXJlY3RvcnkgZGVsIHNvdHRvbW9kdWxvIHBlciAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKyJNb2RhbGl0w6AgYWdnaW9ybmFtZW50byAnJXMnIG5vbiB2YWxpZGEgcGVyIGlsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAoJyVzJykiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiw4ggc3RhdGEgY29uZmlndXJhdGEgdW5hIG1vZGFsaXTDoCBhZ2dpb3JuYW1lbnRvICclcycgbm9uIHZhbGlkYSBwZXIgaWwgIgorInBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAoJyVzJykiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICclcycgbm90IGluaXRpYWxpemVkIgorbXNnc3RyICJQZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gKCclcycpIG5vbiBpbml6aWFsaXp6YXRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5OAorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICJQb3RyZXN0aSB2b2xlciB1c2FyZSAndXBkYXRlIC0taW5pdCcuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIklnbm9ybyBpbCBzb3R0b21vZHVsbyAlcyBub24gc290dG9wb3N0byBhIG1lcmdlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiSWdub3JvIGlsIHNvdHRvbW9kdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiCittc2dzdHIgIkNsb25lIGRpICclcycgbm9uIHJpdXNjaXRvLiBOdW92byB0ZW50YXRpdm8gcHJvZ3JhbW1hdG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICIiCisiQ2xvbmUgZGkgJyVzJyBub24gcml1c2NpdG8gcGVyIGxhIHNlY29uZGEgdm9sdGEsIGludGVycm9tcG8gbCdvcGVyYXppb25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMAorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJwZXJjb3JzbyBuZWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc5Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIiIKKyJwZXJjb3JzbyBuZWxsJ2FsYmVybyBkaSBsYXZvcm8gYXR0cmF2ZXJzbyBpIGNvbmZpbmkgZGVpIHNvdHRvbW9kdWxpIGlubmVzdGF0aSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODMKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvIG5vbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg5Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICJDcmVhIHVuIGNsb25lIHNoYWxsb3cgbGltaXRhdG8gYWwgbnVtZXJvIGRpIHJldmlzaW9uaSBzcGVjaWZpY2F0byIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTIKK21zZ2lkICJwYXJhbGxlbCBqb2JzIgorbXNnc3RyICJwcm9jZXNzaSBkYSBlc2VndWlyZSBpbiBwYXJhbGxlbG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk0Cittc2dpZCAid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIgorbXNnc3RyICJkZXRlcm1pbmEgc2UgaWwgY2xvbmUgaW5pemlhbGUgc2Fyw6Agc2hhbGxvdyBjb21lIHJhY2NvbWFuZGF0byIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTUKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJub24gc3RhbXBhcmUgbCdpbmRpY2F6aW9uZSBkaSBhdmFuemFtZW50byBkZWxsYSBjbG9uYXppb25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkwNAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGVyY29yc28+XSBbPHBlcmNvcnNvPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE3Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICJ2YWxvcmUgcGFyYW1ldHJvIGFnZ2lvcm5hbWVudG8gZXJyYXRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlICglcykgYnJhbmNoIGNvbmZpZ3VyZWQgdG8gaW5oZXJpdCBicmFuY2ggZnJvbSBzdXBlcnByb2plY3QsIGJ1dCAiCisidGhlIHN1cGVycHJvamVjdCBpcyBub3Qgb24gYW55IGJyYW5jaCIKK21zZ3N0ciAiIgorIklsIGJyYW5jaCBkZWwgc290dG9tb2R1bG8gKCVzKSDDqCBjb25maWd1cmF0byBpbiBtb2RvIGRhIGVyZWRpdGFyZSBpbCBicmFuY2ggIgorImRhbCBwcm9nZXR0byBhbCBsaXZlbGxvIHN1cGVyaW9yZSwgbWEgcXVlc3RvIG5vbiDDqCBzdSBhbGN1biBicmFuY2giCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIHJlY3VwZXJhcmUgdW4gaGFuZGxlIHJlcG9zaXRvcnkgcGVyIGlsIHNvdHRvbW9kdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIxCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgImVzZWd1aSByaWNvcnNpdmFtZW50ZSBzdWkgc290dG9tb2R1bGkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTI3Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wemlvbmk+XSBbPHBlcmNvcnNvPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTgzCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAiY29udHJvbGxhIHNlIMOoIHNpY3VybyBzY3JpdmVyZSBzdWwgZmlsZSAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODYKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICJyaW11b3ZpIGxhIGNvbmZpZ3VyYXppb25lIG5lbCBmaWxlIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bm9tZT4gWzx2YWxvcmU+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5vbWU+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyIGdpdC1zdWJtb2R1bGUuc2g6MTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiYXNzaWN1cmF0aSBjaGUgaWwgZmlsZSAuZ2l0bW9kdWxlcyBzaWEgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2MiBnaXQuYzo0MzMgZ2l0LmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiJXMgbm9uIHN1cHBvcnRhIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiclcycgbm9uIMOoIHVuIHNvdHRvY29tYW5kbyBzdWJtb2R1bGUtLWhlbHBlciB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHppb25pPl0gPG5vbWU+IFs8cmlmZXJpbWVudG8+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxub21lPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKyJub24gdmlzdWFsaXp6YXJlIG1lc3NhZ2dpIGQnZXJyb3JlIHNlIGNpIHNvbm8gcmlmZXJpbWVudGkgbm9uIHNpbWJvbGljaSAiCisiKHNjb2xsZWdhdGkpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiZWxpbWluYSByaWZlcmltZW50byBzaW1ib2xpY28iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgImFiYnJldmlhIGlsIHJpZmVyaW1lbnRvIG5lbGwnb3V0cHV0IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAibW90aXZvIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJtb3Rpdm8gZGVsbCdhZ2dpb3JuYW1lbnRvIgorCisjOiBidWlsdGluL3RhZy5jOjI1Cittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dXG4iCisiXHRcdDx0YWduYW1lPiBbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8SUQgY2hpYXZlPl0gWy1mXSBbLW0gPG1lc3NhZ2dpbz4gfCAtRiA8ZmlsZT5dXG4iCisiXHRcdDxub21lIHRhZz4gWzxoZWFkPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjcKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA8bm9tZSB0YWc+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI4Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bWVybz5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9nZ2V0dG8+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdG8+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXRvPl0gPG5vbWUgdGFnPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJ0YWcgJyVzJyBub24gdHJvdmF0by4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiVGFnICclcycgZWxpbWluYXRvIChlcmEgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNjcml2aSB1biBtZXNzYWdnaW8gcGVyIGlsIHRhZzpcbiIKKyIgICVzXG4iCisiTGUgcmlnaGUgY2hlIGluaXppYW5vIGNvbiAnJWMnIHNhcmFubm8gaWdub3JhdGUuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTY3JpdmkgdW4gbWVzc2FnZ2lvIHBlciBpbCB0YWc6XG4iCisiICAlc1xuIgorIkxlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gJyVjJyBzYXJhbm5vIG1hbnRlbnV0ZTsgcHVvaSByaW11b3ZlcmxlICIKKyJhdXRvbm9tYW1lbnRlIHNlIGxvIGRlc2lkZXJpLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjE5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgImltcG9zc2liaWxlIGZpcm1hcmUgaWwgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgc2NyaXZlcmUgaWwgZmlsZSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBjcmVhdGVkIGEgbmVzdGVkIHRhZy4gVGhlIG9iamVjdCByZWZlcnJlZCB0byBieSB5b3VyIG5ldyB0YWcgaXNcbiIKKyJhbHJlYWR5IGEgdGFnLiBJZiB5b3UgbWVhbnQgdG8gdGFnIHRoZSBvYmplY3QgdGhhdCBpdCBwb2ludHMgdG8sIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCittc2dzdHIgIiIKKyJIYWkgY3JlYXRvIHVuIHRhZyBpbm5lc3RhdG8uIEwnb2dnZXR0byBhIGN1aSBzaSByaWZlcmlzY2UgaWwgdHVvIG51b3ZvXG4iCisidGFnIMOoIGdpw6AgdW4gdGFnLiBTZSBpbnRlbmRldmkgYWdnaXVuZ2VyZSB1biB0YWcgYWxsJ29nZ2V0dG8gYSBjdWlcbiIKKyJwdW50YSwgdXNhOlxuIgorIlxuIgorIlx0Z2l0IHRhZyAtZiAlcyAlc157fSIKKworIzogYnVpbHRpbi90YWcuYzoyMzIKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJ0aXBvIG9nZ2V0dG8gZXJyYXRvLiIKKworIzogYnVpbHRpbi90YWcuYzoyODQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgIm5lc3N1biBtZXNzYWdnaW8gcGVyIGlsIHRhZz8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIklsIG1lc3NhZ2dpbyBkZWwgdGFnIMOoIHN0YXRvIGxhc2NpYXRvIGluICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgImVsZW5jYSBpIG5vbWkgZGVpIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MDQKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAic3RhbXBhIGxlIHByaW1lIDxuPiByaWdoZSBkaSBvZ25pIG1lc3NhZ2dpbyB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA2Cittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgImVsaW1pbmEgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJ2ZXJpZmljYSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgY3JlYXppb25lIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MTEKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgInRhZyBhbm5vdGF0bywgcmljaGllZGUgdW4gbWVzc2FnZ2lvIgorCisjOiBidWlsdGluL3RhZy5jOjQxMworbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICJtZXNzYWdnaW8gdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgImZvcnphIG1vZGlmaWNhIGRlbCBtZXNzYWdnaW8gdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgInRhZyBhbm5vdGF0byBlIGZpcm1hdG8gY29uIEdQRyIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJ1c2EgdW4nYWx0cmEgY2hpYXZlIHBlciBmaXJtYXJlIGlsIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MjAKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICJzb3N0aXR1aXNjaSBpbCB0YWcgc2UgZXNpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjQyMSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgImNyZWEgdW4gcmVnaXN0cm8gcmlmZXJpbWVudGkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIzCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBlbGVuY28gdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjQyNAorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAidmlzdWFsaXp6YSBsJ2VsZW5jbyBkZWkgdGFnIGluIGNvbG9ubmUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJzdGFtcGEgc29sbyBpIHRhZyBjaGUgY29udGVuZ29ubyBpbCBjb21taXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI2IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJzdGFtcGEgc29sbyBpIHRhZyBjaGUgbm9uIGNvbnRlbmdvbm8gaSBjb21taXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAic3RhbXBhIHNvbG8gaSB0YWcgc290dG9wb3N0aSBhIG1lcmdlIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJzdGFtcGEgc29sbyBpIHRhZyBub24gc290dG9wb3N0aSBhIG1lcmdlIgorCisjOiBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJzdGFtcGEgc29sbyBpIHRhZyBkZWxsJ29nZ2V0dG8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGUgLW4gbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA0Cittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImwnb3B6aW9uZSAtbiDDqCBjb25zZW50aXRhIHNvbG8gaW4gbW9kYWxpdMOgIGVsZW5jbyIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJsJ29wemlvbmUgLS1jb250YWlucyDDqCBjb25zZW50aXRhIHNvbG8gaW4gbW9kYWxpdMOgIGVsZW5jbyIKKworIzogYnVpbHRpbi90YWcuYzo1MDgKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJsJ29wemlvbmUgLS1uby1jb250YWlucyDDqCBjb25zZW50aXRhIHNvbG8gaW4gbW9kYWxpdMOgIGVsZW5jbyIKKworIzogYnVpbHRpbi90YWcuYzo1MTAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAibCdvcHppb25lIC0tcG9pbnRzLWF0IMOoIGNvbnNlbnRpdGEgc29sbyBpbiBtb2RhbGl0w6AgZWxlbmNvIgorCisjOiBidWlsdGluL3RhZy5jOjUxMgorbXNnaWQgIi0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICIiCisibGUgb3B6aW9uaSAtLW1lcmdlZCBlIC0tbm8tbWVyZ2VkIHNvbm8gY29uc2VudGl0ZSBzb2xvIGluIG1vZGFsaXTDoCBlbGVuY28iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLDqCBjb25zZW50aXRhIHVuYSBzb2xhIG9wemlvbmUgdHJhIC1GIGUgLW0uIgorCisjOiBidWlsdGluL3RhZy5jOjU0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAidHJvcHBpIHBhcmFtZXRyaSIKKworIzogYnVpbHRpbi90YWcuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiclcycgbm9uIMOoIHVuIG5vbWUgdGFnIHZhbGlkby4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJpbCB0YWcgJyVzJyBlc2lzdGUgZ2nDoCIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJUYWcgJyVzJyBhZ2dpb3JuYXRvIChlcmEgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDEKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiRGVjb21wcmVzc2lvbmUgZGVnbGkgb2dnZXR0aSBpbiBjb3JzbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiY3JlYXppb25lIGRlbGxhIGRpcmVjdG9yeSAlcyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiY3JlYXppb25lIGRlbCBmaWxlICVzIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICJlbGltaW5hemlvbmUgZGVsIGZpbGUgJXMgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiZWxpbWluYXppb25lIGRlbGxhIGRpcmVjdG9yeSAlcyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgIlRlc3QgZGkgbXRpbWUgaW4gJyVzJyBpbiBjb3JzbyAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTU0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgIiIKKyJsZSBpbmZvcm1hemlvbmkgc3RhdCBkZWxsYSBkaXJlY3Rvcnkgbm9uIGNhbWJpYW5vIGRvcG8gbCdhZ2dpdW50YSBkaSB1biAiCisibnVvdm8gZmlsZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibGUgaW5mb3JtYXppb25pIHN0YXQgZGVsbGEgZGlyZWN0b3J5IG5vbiBjYW1iaWFubyBkb3BvIGwnYWdnaXVudGEgZGkgdW5hICIKKyJudW92YSBkaXJlY3RvcnkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTgwCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorImxlIGluZm9ybWF6aW9uaSBzdGF0IGRlbGxhIGRpcmVjdG9yeSBjYW1iaWFubyBkb3BvIGwnYWdnaW9ybmFtZW50byBkaSB1biBmaWxlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJsZSBpbmZvcm1hemlvbmkgc3RhdCBkZWxsYSBkaXJlY3RvcnkgY2FtYmlhbm8gZG9wbyBsJ2FnZ2l1bnRhIGRpIHVuIGZpbGUgaW4gIgorInVuYSBzb3R0b2RpcmVjdG9yeSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyJsZSBpbmZvcm1hemlvbmkgc3RhdCBkZWxsYSBkaXJlY3Rvcnkgbm9uIGNhbWJpYW5vIGRvcG8gbCdlbGltaW5hemlvbmUgZGkgdW4gIgorImZpbGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjE1Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJsZSBpbmZvcm1hemlvbmkgc3RhdCBkZWxsYSBkaXJlY3Rvcnkgbm9uIGNhbWJpYW5vIGRvcG8gbCdlbGltaW5hemlvbmUgZGkgdW5hICIKKyJkaXJlY3RvcnkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8b3B6aW9uaT5dIFstLV0gWzxmaWxlPi4uLl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc0Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICIiCisiY29udGludWEgbCdhZ2dpb3JuYW1lbnRvIGFuY2hlIG5lbCBjYXNvIGluIGN1aSBsJ2luZGljZSByaWNoaWVkYSBkaSBlc3NlcmUgIgorImFnZ2lvcm5hdG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgImFnZ2lvcm5hbWVudG86IGlnbm9yYSBpIHNvdHRvbW9kdWxpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MAorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICJub24gaWdub3JhcmUgaSBudW92aSBmaWxlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MgorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICJjb25zZW50aSBjaGUgZGVpIGZpbGUgc29zdGl0dWlzY2FubyBkZWxsZSBkaXJlY3RvcnkgZSB2aWNldmVyc2EiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg0Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAibm90YSBzZSBkZWkgZmlsZSBtYW5jYW5vIGRhbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorImVzZWd1aSBsJ2FnZ2lvcm5hbWVudG8gYW5jaGUgc2UgbCdpbmRpY2UgY29udGllbmUgZGVsbGUgdm9jaSBub24gc290dG9wb3N0ZSAiCisiYSBtZXJnZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODkKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgImFnZ2lvcm5hIGxlIGluZm9ybWF6aW9uaSBzdGF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MworbXNnaWQgImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIKK21zZ3N0ciAiY29tZSAtLXJlZnJlc2gsIG1hIGlnbm9yYSBsJ2ltcG9zdGF6aW9uZSBhc3N1bWUtdW5jaGFuZ2VkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NworbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjxtb2RvPiw8b2dnZXR0bz4sPHBlcmNvcnNvPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgImFnZ2l1bmdlIGxhIHZvY2Ugc3BlY2lmaWNhdGEgYWxsJ2luZGljZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA4Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICJjb250cmFzc2VnbmEgaSBmaWxlIGNvbWUgXCJub24gc2FyYW5ubyBtb2RpZmljYXRpXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAicmVpbXBvc3RhIGEgemVybyBpbCBiaXQgXCJub24gc2FyYW5ubyBtb2RpZmljYXRpXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgImNvbnRyYXNzZWduYSBpIGZpbGUgY29tZSBcInNvbGFtZW50ZSBkYSBpbmRpY2l6emFyZVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTcKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAicmVpbXBvc3RhIGEgemVybyBpbCBiaXQgXCJzb2xhbWVudGUgZGEgaW5kaWNpenphcmVcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIwCittc2dpZCAiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIKK21zZ3N0ciAibm9uIGVzZWd1aXJlIGlsIHRvdWNoIGRpIHZvY2kgcHJlc2VudGkgc29sbyBuZWxsJ2luZGljZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDIyCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJhZ2dpdW5naSBzb2xvIGFsbCdpbmRpY2U7IG5vbiBhZ2dpdW5nZXJlIGlsIGNvbnRlbnV0byBhbCBkYXRhYmFzZSBvZ2dldHRpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjQKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICJyaW11b3ZpIGkgcGVyY29yc2kgc3BlY2lmaWNhdGkgYW5jaGUgc2UgcHJlc2VudGkgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgImNvbiAtLXN0ZGluOiBsZSByaWdoZSBkaSBpbnB1dCBzb25vIHRlcm1pbmF0ZSBkYSBieXRlIE5VTEwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyOAorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxlZ2dpIGwnZWxlbmNvIGRlaSBwZXJjb3JzaSBkYSBhZ2dpb3JuYXJlIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWdnaXVuZ2kgbGUgdm9jaSBzcGVjaWZpY2F0ZSBzdWxsbyBzdGFuZGFyZCBpbnB1dCBhbGwnaW5kaWNlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzYKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgInJpcG9wb2xhIGxlIGZhc2kgMiBlIDMgcGVyIGkgcGVyY29yc2kgZWxlbmNhdGkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0MAorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJhZ2dpb3JuYSBzb2xvIGxlIHZvY2kgZGlmZmVyZW50aSByaXNwZXR0byBhbGwnSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiaWdub3JhIGkgZmlsZSBtYW5jYW50aSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAic3RhbXBhIGxlIGF6aW9uaSBzdWxsbyBzdGFuZGFyZCBvdXRwdXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIiCisiKHBlciBpIGNvbWFuZGkgYWQgYWx0byBsaXZlbGxvKSBkaW1lbnRpY2EgaSBjb25mbGl0dGkgbm9uIHJpc29sdGkgc2FsdmF0aSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgInNjcml2aSBsJ2luZGljZSBpbiBxdWVzdG8gZm9ybWF0byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgImFiaWxpdGEgbyBkaXNhYmlsaXRhIGwnaW5kaWNlIHN1ZGRpdmlzbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU3Cittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJhYmlsaXRhL2Rpc2FiaWxpdGEgbGEgY2FjaGUgbm9uIHRyYWNjaWF0YSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU5Cittc2dpZCAidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgInZlcmlmaWNhIHNlIGlsIGZpbGVzeXN0ZW0gc3VwcG9ydGEgbGEgY2FjaGUgbm9uIHRyYWNjaWF0YSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYxCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImFiaWxpdGEgbGEgY2FjaGUgbm9uIHRyYWNjaWF0YSBzZW56YSB0ZXN0YXJlIGlsIGZpbGVzeXN0ZW0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MworbXNnaWQgIndyaXRlIG91dCB0aGUgaW5kZXggZXZlbiBpZiBpcyBub3QgZmxhZ2dlZCBhcyBjaGFuZ2VkIgorbXNnc3RyICJzY3JpdmkgbCdpbmRpY2UgYW5jaGUgc2Ugbm9uIMOoIHN0YXRvIGNvbnRyYXNzZWduYXRvIGNvbWUgbW9kaWZpY2F0byIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIKK21zZ3N0ciAiYWJpbGl0YSBvIGRpc2FiaWxpdGEgaWwgbW9uaXRvciBkZWwgZmlsZXN5c3RlbSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgImNvbnRyYXNzZWduYSBpIGZpbGUgY29tZSB2YWxpZGkgcmlzcGV0dG8gYWwgbW9uaXRvciBkZWwgZmlsZXN5c3RlbSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDcwCittc2dpZCAiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIKK21zZ3N0ciAiIgorInJlaW1wb3N0YSBhIHplcm8gaWwgYml0IFwiZmlsZSB2YWxpZGkgcmlzcGV0dG8gYWwgbW9uaXRvciBkZWwgZmlsZXN5c3RlbVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzMKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggw6ggaW1wb3N0YXRvIGEgZmFsc2U7IHJpbXVvdmlsbyBvIG1vZGlmaWNhbG8gc2UgdnVvaSAiCisidmVyYW1lbnRlIGFiaWxpdGFyZSBsJ2luZGljZSBzdWRkaXZpc28iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4MgorbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCDDqCBpbXBvc3RhdG8gYSB0cnVlOyByaW11b3ZpbG8gbyBtb2RpZmljYWxvIHNlIHZ1b2kgdmVyYW1lbnRlICIKKyJkaXNhYmlsaXRhcmUgbCdpbmRpY2Ugc3VkZGl2aXNvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTQKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIMOoIGltcG9zdGF0byBhIHRydWU7IHJpbXVvdmlsbyBvIG1vZGlmaWNhbG8gc2UgdnVvaSAiCisidmVyYW1lbnRlIGRpc2FiaWxpdGFyZSBsYSBjYWNoZSBub24gdHJhY2NpYXRhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTgKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIkNhY2hlIG5vbiB0cmFjY2lhdGEgZGlzYWJpbGl0YXRhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDYKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZW5hYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIMOoIGltcG9zdGF0byBhIGZhbHNlOyByaW11b3ZpbG8gbyBtb2RpZmljYWxvIHNlIHZ1b2kgIgorInZlcmFtZW50ZSBhYmlsaXRhcmUgbGEgY2FjaGUgbm9uIHRyYWNjaWF0YSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJDYWNoZSBub24gdHJhY2NpYXRhIGFiaWxpdGF0YSBwZXIgJyVzJyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjE4Cittc2dpZCAiY29yZS5mc21vbml0b3IgaXMgdW5zZXQ7IHNldCBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZW5hYmxlIGZzbW9uaXRvciIKK21zZ3N0ciAiIgorImNvcmUuZnNtb25pdG9yIG5vbiDDqCBpbXBvc3RhdG87IGltcG9zdGFsbyBzZSB2dW9pIHZlcmFtZW50ZSBhYmlsaXRhcmUgaWwgIgorIm1vbml0b3IgZGVsIGZpbGVzeXN0ZW0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyMgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICJtb25pdG9yIGZpbGVzeXN0ZW0gYWJpbGl0YXRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjUKK21zZ2lkICIiCisiY29yZS5mc21vbml0b3IgaXMgc2V0OyByZW1vdmUgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3Igw6ggaW1wb3N0YXRvOyByaW11b3ZpIHRhbGUgaW1wb3N0YXppb25lIHNlIHZ1b2kgdmVyYW1lbnRlICIKKyJkaXNhYmlsaXRhcmUgaWwgbW9uaXRvciBkZWwgZmlsZXN5c3RlbSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI5Cittc2dpZCAiZnNtb25pdG9yIGRpc2FibGVkIgorbXNnc3RyICJtb25pdG9yIGZpbGVzeXN0ZW0gZGlzYWJpbGl0YXRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHppb25pPl0gLWQgPG5vbWUgcmlmZXJpbWVudG8+IFs8dmVjY2hpbyB2YWxvcmU+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisiZ2l0IHVwZGF0ZS1yZWYgWzxvcHppb25pPl0gICAgPG5vbWUgcmlmZXJpbWVudG8+IDxudW92byB2YWxvcmU+IFs8dmVjY2hpbyAiCisidmFsb3JlPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPG9wemlvbmk+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NAorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICJlbGltaW5hIGlsIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiYWdnaW9ybmEgPG5vbWUgcmlmZXJpbWVudG8+LCBub24gY2nDsiBhIGN1aSBwdW50YSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAibG8gc3RhbmRhcmQgaW5wdXQgaGEgYXJnb21lbnRpIHRlcm1pbmF0aSBkYSBOVUwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZWdnaSBhZ2dpb3JuYW1lbnRpIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjcKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTUKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICJhZ2dpb3JuYSBpIGZpbGUgaW5mb3JtYXppb25pIHBhcnRlbmRvIGRhIHplcm8iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoxMQorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B6aW9uaT5dIDxkaXJlY3Rvcnk+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICJlc2NpIGRvcG8gdW4gc29sbyBzY2FtYmlvIHJpY2hpZXN0YS9yaXNwb3N0YSIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICJlc2NpIHN1Yml0byBkb3BvIGwnYW5udW5jaW8gaW5pemlhbGUgZGVsIHJpZmVyaW1lbnRvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJub24gcHJvdmFyZSBhIHV0aWxpenphcmUgPGRpcmVjdG9yeT4vLmdpdC8gc2UgPGRpcmVjdG9yeT4gbm9uIMOoIHVuYSAiCisiZGlyZWN0b3J5IEdpdCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgImludGVycm9tcGkgaWwgdHJhc2ZlcmltZW50byBkb3BvIDxuPiBzZWNvbmRpIGRpIGluYXR0aXZpdMOgIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJzdGFtcGEgaSBjb250ZW51dGkgZGVsIGNvbW1pdCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjkgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgInN0YW1wYSBsJ291dHB1dCBncmV6em8gZGVsbG8gc3RhdG8gZGkgR1BHIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTUKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJkZXR0YWdsaWF0byIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgInZpc3VhbGl6emEgc29sbyBsZSBzdGF0aXN0aWNoZSIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTgKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXRvPl0gPHRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM2Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJzdGFtcGEgaSBjb250ZW51dGkgZGVsIHRhZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHppb25pPl0gPHBlcmNvcnNvPiBbPGVzcHJlc3Npb25lIGNvbW1pdD5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHppb25pPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHppb25pPl0gPHBlcmNvcnNvPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA8YWxiZXJvIGRpIGxhdm9ybz4gPG51b3ZvIHBlcmNvcnNvPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIxCittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHppb25pPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wemlvbmk+XSA8YWxiZXJvIGRpIGxhdm9ybz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMworbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwZXJjb3Jzbz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MCBidWlsdGluL3dvcmt0cmVlLmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgJyVzJyIKK21zZ3N0ciAiZWxpbWluYXppb25lIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIlJpbXVvdm8gd29ya3RyZWVzLyVzOiBub24gw6ggdW5hIGRpcmVjdG9yeSB2YWxpZGEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJSaW11b3ZvIHdvcmt0cmVlcy8lczogaWwgZmlsZSBnaXRkaXIgbm9uIGVzaXN0ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIlJpbXVvdm8gd29ya3RyZWVzLyVzOiBpbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGZpbGUgZ2l0ZGlyICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlJlbW92aW5nIHdvcmt0cmVlcy8lczogc2hvcnQgcmVhZCAoZXhwZWN0ZWQgJTxQUkl1TUFYPiBieXRlcywgcmVhZCAiCisiJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKyJSaW11b3ZvIHdvcmt0cmVlcy8lczogbGV0dGkgbWVubyBkYXRpIGRlbCBwcmV2aXN0byAoYXR0ZXNpICU8UFJJdU1BWD5ieXRlLCAiCisiJTxQUkl1TUFYPiBsZXR0aSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJSaW11b3ZvIHdvcmt0cmVlcy8lczogZmlsZSBnaXRkaXIgbm9uIHZhbGlkbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIlJpbXVvdm8gd29ya3RyZWVzLyVzOiBpbCBmaWxlIGdpdGRpciBwdW50YSBhIHVuIHBlcmNvcnNvIG5vbiBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgInNlZ25hbGEgZ2xpIGFsYmVyaSBkaSBsYXZvcm8gZWxpbWluYXRpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImZhaSBzY2FkZXJlIGdsaSBhbGJlcmkgZGkgbGF2b3JvIHBpw7kgdmVjY2hpIGRpIDx0ZW1wbz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyBlc2lzdGUgZ2nDoCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2l1bmdlcmUgbnVvdmFtZW50ZSBsJ2FsYmVybyBkaSBsYXZvcm8gJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiJyVzJyDDqCB1biBhbGJlcm8gZGkgbGF2b3JvIG1hbmNhbnRlIG1hIGJsb2NjYXRvO1xuIgorInVzYSAnYWRkIC1mIC1mJyBwZXIgZXNlZ3VpcmUgbCdvdmVycmlkZSwgbyAndW5sb2NrJyBlICdwcnVuZScgbyAncmVtb3ZlJyBwZXIgIgorInJpbXVvdmVybG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYnIHRvIG92ZXJyaWRlLCBvciAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiJyVzJyDDqCB1biBhbGJlcm8gZGkgbGF2b3JvIG1hbmNhbnRlIG1hIGdpw6AgcmVnaXN0cmF0bztcbiIKKyJ1c2EgJ2FkZCAtZicgcGVyIGVzZWd1aXJlIGwnb3ZlcnJpZGUsIG8gJ3BydW5lJyBvICdyZW1vdmUnIHBlciByaW11b3ZlcmxvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3RvcnkgZGkgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzOSBidWlsdGluL3dvcmt0cmVlLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAobmV3IGJyYW5jaCAnJXMnKSIKK21zZ3N0ciAiUHJlcGFyYXppb25lIGRlbGwnYWxiZXJvIGRpIGxhdm9ybyBpbiBjb3JzbyAobnVvdm8gYnJhbmNoICclcycpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIgorbXNnc3RyICIiCisiUHJlcGFyYXppb25lIGRlbGwnYWxiZXJvIGRpIGxhdm9ybyBpbiBjb3JzbyAocmVpbXBvc3RvIGlsIGJyYW5jaCAnJXMnOyBlcmEgYSAiCisiJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICJQcmVwYXJhemlvbmUgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIGluIGNvcnNvIChjaGVja291dCBkaSAnJXMnKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGRldGFjaGVkIEhFQUQgJXMpIgorbXNnc3RyICJQcmVwYXJhemlvbmUgZGVsbCdhbGJlcm8gZGkgbGF2b3JvIGluIGNvcnNvIChIRUFEIHNjb2xsZWdhdG8gJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICIiCisiZXNlZ3VpIGlsIGNoZWNrb3V0IGRpIDxicmFuY2g+IGFuY2hlIHNlIHRhbGUgb3BlcmF6aW9uZSDDqCBzdGF0YSBlc2VndWl0YSBpbiAiCisidW4gYWx0cm8gYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwMAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgImNyZWEgdW4gbnVvdm8gYnJhbmNoIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAyCittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICJjcmVhIG8gcmVpbXBvc3RhIHVuIGJyYW5jaCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNAorbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICJwb3BvbGEgaWwgbnVvdm8gYWxiZXJvIGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNQorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICJtYW50aWVuaSBibG9jY2F0byBpbCBudW92byBhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA4Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAiaW1wb3N0YSBsYSBtb2RhbGl0w6AgdHJhY2tpbmcgKHZlZGkgZ2l0LWJyYW5jaCgxKSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTEKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorInRlbnRhIGRpIGNlcmNhcmUgdW5hIGNvcnJpc3BvbmRlbnphIGZyYSBpbCBub21lIGRlbCBudW92byBicmFuY2ggZSB1biBicmFuY2ggIgorInJlbW90byBkYSB0cmFjY2lhcmUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTkKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJsZSBvcHppb25pIC1iLCAtQiBlIC0tZGV0YWNoIHNvbm8gbXV0dWFsbWVudGUgZXNjbHVzaXZlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgwCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIiIKKyJsJ29wemlvbmUgLS1bbm8tXXRyYWNrIHB1w7IgZXNzZXJlIHVzYXRhIHNvbG8gc2UgdmllbmUgY3JlYXRvIHVuIG51b3ZvIGJyYW5jaCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4MAorbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAibW90aXZvIGRpIGJsb2NjbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MiBidWlsdGluL3dvcmt0cmVlLmM6NzI1IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcycgbm9uIMOoIHVuIGFsYmVybyBkaSBsYXZvcm8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTQgYnVpbHRpbi93b3JrdHJlZS5jOjcyNworbXNnaWQgIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIgorbXNnc3RyICJOb24gw6ggcG9zc2liaWxlIGJsb2NjYXJlIG8gc2Jsb2NjYXJlIGwnYWxiZXJvIGRpIGxhdm9ybyBwcmluY2lwYWxlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIiclcycgw6ggZ2nDoCBibG9jY2F0byBwZXIgcXVlc3RvIG1vdGl2bzogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyDDqCBnacOgIGJsb2NjYXRvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyBub24gw6ggYmxvY2NhdG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzAKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiIgorImdsaSBhbGJlcmkgZGkgbGF2b3JvIGNvbnRlbmVudGkgc290dG9tb2R1bGkgbm9uIHBvc3Nvbm8gZXNzZXJlIHNwb3N0YXRpIG8gIgorInJpbW9zc2kiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzgKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICJmb3J6YSBsbyBzcG9zdGFtZW50byBhbmNoZSBzZSBsJ2FsYmVybyBkaSBsYXZvcm8gw6ggc3BvcmNvIG8gYmxvY2NhdG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MDEgYnVpbHRpbi93b3JrdHJlZS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGEgbWFpbiB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcycgw6ggdW4gYWxiZXJvIGRpIGxhdm9ybyBwcmluY2lwYWxlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBpbCBub21lIGRlc3RpbmF6aW9uZSBkYSAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsYSBkZXN0aW5hemlvbmUgJyVzJyBlc2lzdGUgZ2nDoCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHNwb3N0YXJlIHVuIGFsYmVybyBkaSBsYXZvcm8gYmxvY2NhdG8sIG1vdGl2YXppb25lIGJsb2NjbzogJXNcbiIKKyJ1c2EgJ21vdmUgLWYgLWYnIHBlciBlc2VndWlybmUgbCdvdmVycmlkZSBvIHNibG9jY2FsbyBwcmltYSBkaSBlc2VndWlyZSAiCisibCdvcGVyYXppb25lIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIyCittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHNwb3N0YXJlIHVuIGFsYmVybyBkaSBsYXZvcm8gYmxvY2NhdG87XG4iCisidXNhICdtb3ZlIC1mIC1mJyBwZXIgZXNlZ3Vpcm5lIGwnb3ZlcnJpZGUgbyBzYmxvY2NhbG8gcHJpbWEgZGkgZXNlZ3VpcmUgIgorImwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IG1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAidmFsaWRhemlvbmUgbm9uIHJpdXNjaXRhLCBpbXBvc3NpYmlsZSBzcG9zdGFyZSBsJ2FsYmVybyBkaSBsYXZvcm86ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODMwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBtb3ZlICclcycgdG8gJyVzJyIKK21zZ3N0ciAic3Bvc3RhbWVudG8gZGkgJyVzJyBpbiAnJXMnIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICJlc2VjdXppb25lIGRpICdnaXQgc3RhdHVzJyBzdSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNvbnRhaW5zIG1vZGlmaWVkIG9yIHVudHJhY2tlZCBmaWxlcywgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICIiCisiJyVzJyBjb250aWVuZSBmaWxlIG1vZGlmaWNhdGkgbyBub24gdHJhY2NpYXRpLCB1c2EgLS1mb3JjZSBwZXIgZWxpbWluYXJsbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJlc2VjdXppb25lIGRpICdnaXQgc3RhdHVzJyBzdSAnJXMnIG5vbiByaXVzY2l0YSwgY29kaWNlICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTEwCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiZm9yemEgbGEgcmltb3ppb25lIGFuY2hlIHNlIGwnYWxiZXJvIGRpIGxhdm9ybyDDqCBzcG9yY28gbyBibG9jY2F0byIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJpbXBvc3NpYmlsZSByaW11b3ZlcmUgdW4gYWxiZXJvIGRpIGxhdm9ybyBibG9jY2F0bywgbW90aXZhemlvbmUgYmxvY2NvOiAlc1xuIgorInVzYSAncmVtb3ZlIC1mIC1mJyBwZXIgZXNlZ3Vpcm5lIGwnb3ZlcnJpZGUgbyBzYmxvY2NhbG8gcHJpbWEgZGkgZXNlZ3VpcmUgIgorImwnb3BlcmF6aW9uZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzNQorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgcmltdW92ZXJlIHVuIGFsYmVybyBkaSBsYXZvcm8gYmxvY2NhdG87XG4iCisidXNhICdyZW1vdmUgLWYgLWYnIHBlciBlc2VndWlybmUgbCdvdmVycmlkZSBvIHNibG9jY2FsbyBwcmltYSBkaSBlc2VndWlyZSAiCisibCdvcGVyYXppb25lIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgcmVtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgInZhbGlkYXppb25lIG5vbiByaXVzY2l0YSwgaW1wb3NzaWJpbGUgcmltdW92ZXJlIGwnYWxiZXJvIGRpIGxhdm9ybzogJXMiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZmlzc28+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI4Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI8cHJlZmlzc28+LyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjkKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgInNjcml2aSBsJ29nZ2V0dG8gYWxiZXJvIHBlciB1bmEgc290dG9kaXJlY3RvcnkgPHByZWZpc3NvPiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzEKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICJ1dGlsZSBzb2xvIHBlciBpbCBkZWJ1ZyIKKworIzogZmFzdC1pbXBvcnQuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICdtYXJrJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIkF0dGVzbyBjb21hbmRvICdtYXJrJywgcmljZXZ1dG8gJXMiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAndG8nIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiQXR0ZXNvIGNvbWFuZG8gJ3RvJywgcmljZXZ1dG8gJXMiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmZWF0dXJlICclcycgZm9yYmlkZGVuIGluIGlucHV0IHdpdGhvdXQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCittc2dzdHIgImZ1bnppb25hbGl0w6AgJyVzJyB2aWV0YXRhIG5lbGwnaW5wdXQgc2VuemEgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBlcm1pc3Npb25zIG9uIHlvdXIgc29ja2V0IGRpcmVjdG9yeSBhcmUgdG9vIGxvb3NlOyBvdGhlclxuIgorInVzZXJzIG1heSBiZSBhYmxlIHRvIHJlYWQgeW91ciBjYWNoZWQgY3JlZGVudGlhbHMuIENvbnNpZGVyIHJ1bm5pbmc6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorbXNnc3RyICIiCisiSSBwZXJtZXNzaSBzdWxsYSBkaXJlY3RvcnkgZGVsIHNvY2tldCBzb25vIHRyb3BwbyBsYXNjaGk7IGFsdHJpXG4iCisidXRlbnRpIHBvdHJlYmJlcm8gZXNzZXJlIGluIGdyYWRvIGRpIGxlZ2dlcmUgbGUgY3JlZGVuemlhbGkgbmVsbGFcbiIKKyJjYWNoZS4gVmFsdXRhIGRpIGVzZWd1aXJlOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAic3RhbXBhIGkgbWVzc2FnZ2kgZGkgZGVidWcgc3VsbG8gc3RhbmRhcmQgZXJyb3IiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIG5vdCBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICJpbCBjb21taXQgJXMgbm9uIMOoIGNvbnRyYXNzZWduYXRvIGNvbWUgcmFnZ2l1bmdpYmlsZSIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE2MgorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAidHJvcHBpIGNvbW1pdCBjb250cmFzc2VnbmF0aSBjb21lIHJhZ2dpdW5naWJpbGkiCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzo3Cittc2dpZCAidGVzdC10b29sIHNlcnZlLXYyIFs8b3B0aW9ucz5dIgorbXNnc3RyICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHppb25pPl0iCisKKyM6IHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxOQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWR2ZXJ0aXNpbmcgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJlc2NpIHN1Yml0byBkb3BvIGF2ZXIgYW5udW5jaWF0byBsZSBmdW56aW9uYWxpdMOgIgorCisjOiBnaXQuYzoyNworbXNnaWQgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cGF0aD5dIFstLXdvcmstdHJlZT08cGF0aD5dIFstLW5hbWVzcGFjZT08bmFtZT5dXG4iCisiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iCittc2dzdHIgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwZXJjb3Jzbz5dIFstYyA8bm9tZT49PHZhbG9yZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwZXJjb3Jzbz5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLSIKKyJwYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBlcmNvcnNvPl0gWy0td29yay10cmVlPTxwZXJjb3Jzbz5dIFstLSIKKyJuYW1lc3BhY2U9PG5vbWU+XVxuIgorIiAgICAgICAgICAgPGNvbWFuZG8+IFs8YXJnb21lbnRpPl0iCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKyJTZWUgJ2dpdCBoZWxwIGdpdCcgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiJ2dpdCBoZWxwIC1hJyBlICdnaXQgaGVscCAtZycgZWxlbmNhbm8gaSBzb3R0b2NvbWFuZGkgZGlzcG9uaWJpbGkgZVxuIgorImFsY3VuZSBndWlkZSBjb25jZXR0dWFsaS4gVmVkaSAnZ2l0IGhlbHAgPGNvbWFuZG8+JyBvICdnaXQgaGVscCA8Y29uY2V0dG8+J1xuIgorInBlciBsZWdnZXJlIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkgc3UgdW4gc290dG9jb21hbmRvIG8gc3UgdW4gY29uY2V0dG9cbiIKKyJzcGVjaWZpY2kuXG4iCisiVmVkaSAnZ2l0IGhlbHAgZ2l0JyBwZXIgdW5hIHBhbm9yYW1pY2EgZGVsIHNpc3RlbWEuIgorCisjOiBnaXQuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAibmVzc3VuYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGEgcGVyIC0tZ2l0LWRpclxuIgorCisjOiBnaXQuYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIgorbXNnc3RyICJuZXNzdW5vIHNwYXppbyBkZWkgbm9taSBzcGVjaWZpY2F0byBwZXIgLS1uYW1lc3BhY2VcbiIKKworIzogZ2l0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIKK21zZ3N0ciAibmVzc3VuYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGEgcGVyIC0td29yay10cmVlXG4iCisKKyM6IGdpdC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iCittc2dzdHIgIm5lc3N1biBwcmVmaXNzbyBzcGVjaWZpY2F0byBwZXIgLS1zdXBlci1wcmVmaXhcbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYzogYXR0ZXNhIHN0cmluZ2EgZGkgY29uZmlndXJhemlvbmVcbiIKKworIzogZ2l0LmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAibmVzc3VuYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGEgcGVyIC1DXG4iCisKKyM6IGdpdC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAib3B6aW9uZSBzY29ub3NjaXV0YTogJXNcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICJkdXJhbnRlIGwnZXNwYW5zaW9uZSBkZWxsJ2FsaWFzICclcyc6ICclcyciCisKKyM6IGdpdC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKyJsJ2FsaWFzICclcycgbW9kaWZpY2EgbGUgdmFyaWFiaWxpIGQnYW1iaWVudGUuXG4iCisiUHVvaSB1c2FyZSAnIWdpdCcgbmVsbCdhbGlhcyBwZXIgZmFybG8iCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgImFsaWFzIHZ1b3RvIHBlciAlcyIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgImFsaWFzIHJpY29yc2l2bzogJXMiCisKKyM6IGdpdC5jOjQ1OQorbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJlcnJvcmUgZGkgc2NyaXR0dXJhIHN1bGxvIHN0YW5kYXJkIG91dHB1dCIKKworIzogZ2l0LmM6NDYxCittc2dpZCAidW5rbm93biB3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZXJyb3JlIGRpIHNjcml0dHVyYSBzY29ub3NjaXV0byBzdWxsbyBzdGFuZGFyZCBvdXRwdXQiCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImNoaXVzdXJhIGRlbGxvIHN0YW5kYXJkIG91dHB1dCBub24gcml1c2NpdGEiCisKKyM6IGdpdC5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YgJyVzJyBkb2VzIG5vdCB0ZXJtaW5hdGU6JXMiCittc2dzdHIgInJpbGV2YXRvIGNpY2xvIGFsaWFzOiBsJ2VzcGFuc2lvbmUgZGkgJyVzJyBub24gdGVybWluYTolcyIKKworIzogZ2l0LmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgJXMgYXMgYSBidWlsdGluIgorbXNnc3RyICJpbXBvc3NpYmlsZSBnZXN0aXJlICVzIGNvbWUgY29tYW5kbyBpbmNvcnBvcmF0byIKKworIzogZ2l0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorInVzbzogJXNcbiIKKyJcbiIKKworIzogZ2l0LmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICJlc3BhbnNpb25lIGRlbGwnYWxpYXMgJyVzJyBub24gcml1c2NpdGE7ICclcycgbm9uIMOoIHVuIGNvbWFuZG8gR2l0XG4iCisKKyM6IGdpdC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuIGNvbW1hbmQgJyVzJzogJXNcbiIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkZWwgY29tYW5kbyAnJXMnIG5vbiByaXVzY2l0YTogJXNcbiIKKworIzogaHR0cC5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICJ2YWxvcmUgbmVnYXRpdm8gcGVyIGh0dHAucG9zdGJ1ZmZlcjsgdXNvIGwnaW1wb3N0YXppb25lIHByZWRlZmluaXRhICVkIgorCisjOiBodHRwLmM6Mzk5Cittc2dpZCAiRGVsZWdhdGlvbiBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4yMi4wIgorbXNnc3RyICJJbCBjb250cm9sbG8gZGVsZWdhemlvbmUgbm9uIMOoIHN1cHBvcnRhdG8gY29uIGNVUkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIklsIHBpbm5pbmcgZGVsbGUgY2hpYXZpIHB1YmJsaWNoZSBub24gw6ggc3VwcG9ydGF0byBjb24gY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjg3NgorbXNnaWQgIkNVUkxTU0xPUFRfTk9fUkVWT0tFIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub24gw6ggc3VwcG9ydGF0byBjb24gY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjk0OQorbXNnaWQgIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIKK21zZ3N0ciAiTGUgcmVzdHJpemlvbmkgcHJvdG9jb2xsbyBub24gc29ubyBzdXBwb3J0YXRlIGNvbiBjVVJMIDwgNy4xOS40IgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiQmFja2VuZCBTU0wgJyVzJyBub24gc3VwcG9ydGF0by4gQmFja2VuZCBTU0wgc3VwcG9ydGF0aToiCisKKyM6IGh0dHAuYzoxMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogY1VSTCB3YXMgYnVpbHQgd2l0aG91dCBTU0wgYmFja2VuZHMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBpbXBvc3RhcmUgaWwgYmFja2VuZCBTU0wgYSAnJXMnOiBjVVJMIMOoIHN0YXRvIGNvbXBpbGF0byBzZW56YSAiCisiYmFja2VuZCBTU0wiCisKKyM6IGh0dHAuYzoxMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogYWxyZWFkeSBzZXQiCittc2dzdHIgIkltcG9zc2liaWxlIGltcG9zdGFyZSBpbCBiYWNrZW5kIFNTTCBhICclcyc6IGdpw6AgaW1wb3N0YXRvIgorCisjOiBodHRwLmM6MTk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdVUkwgZGkgYmFzZSBkYWxsYSByZWRpcmV6aW9uZTpcbiIKKyIgIHJpY2hpZXN0YTogJXNcbiIKKyIgICByZWRpcmVjdDogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAidmlyZ29sZXR0ZSBub24gdmFsaWRlIG5lbCB2YWxvcmUgcHVzaC1vcHRpb246ICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAiJXNpbmZvL3JlZnMgbm9uIHZhbGlkbzogw6ggdW4gcmVwb3NpdG9yeSBHaXQ/IgorCisjOiByZW1vdGUtY3VybC5jOjM2NAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBleHBlY3RlZCBzZXJ2aWNlLCBnb3QgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisicmlzcG9zdGEgZGVsIHNlcnZlciBub24gdmFsaWRhOyBhdHRlc28gc2Vydml6aW8sIHJpY2V2dXRvIHBhY2NoZXR0byBmbHVzaCIKKworIzogcmVtb3RlLWN1cmwuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGdvdCAnJXMnIgorbXNnc3RyICJyaXNwb3N0YSBkZWwgc2VydmVyIG5vbiB2YWxpZGE7IHJpY2V2dXRvICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBub3QgZm91bmQiCittc2dzdHIgInJlcG9zaXRvcnkgJyVzJyBub24gdHJvdmF0byIKKworIzogcmVtb3RlLWN1cmwuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0aGVudGljYXRpb24gZmFpbGVkIGZvciAnJXMnIgorbXNnc3RyICJBdXRlbnRpY2F6aW9uZSBub24gcml1c2NpdGEgcGVyICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFjY2VkZXJlIGEgJyVzJzogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIHRvICVzIgorbXNnc3RyICJyZWRpcmV6aW9uZSBhICVzIGluIGNvcnNvIgorCisjOiByZW1vdGUtY3VybC5jOjU5MworbXNnaWQgInNob3VsZG4ndCBoYXZlIEVPRiB3aGVuIG5vdCBnZW50bGUgb24gRU9GIgorbXNnc3RyICIiCisibm9uIGRvdnJlYmJlIGVzc2VyY2kgdW4gcGFjY2hldHRvIGZpbmUgZmlsZSBzZSBub24gc2kgw6ggYWNjb21vZGFudGkgY29uICIKKyJxdWVzdGkgdWx0aW1pIgorCisjOiByZW1vdGUtY3VybC5jOjY3MworbXNnaWQgInVuYWJsZSB0byByZXdpbmQgcnBjIHBvc3QgZGF0YSAtIHRyeSBpbmNyZWFzaW5nIGh0dHAucG9zdEJ1ZmZlciIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHJpdG9ybmFyZSBhIHVuIHB1bnRvIHByZWNlZGVudGUgZGVpIGRhdGkgUE9TVCBSUEMgLSBwcm92YSBhZCAiCisiYXVtZW50YXJlIGlsIHZhbG9yZSBkaSBodHRwLnBvc3RCdWZmZXIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICJSUEMgbm9uIHJpdXNjaXRhOyAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo3NzMKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZ2VzdGlyZSBwdXNoIGNvc8OsIGdyYW5kaSIKKworIzogcmVtb3RlLWN1cmwuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorbXNnc3RyICIiCisiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgZGVmbGF0ZSBkZWxsYSByaWNoaWVzdGE7IGVycm9yZSBkZWZsYXRlIHpsaWIgJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZW5kIGVycm9yICVkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBkZWZsYXRlIGRlbGxhIHJpY2hpZXN0YTsgZXJyb3JlIGZpbmUgemxpYiAlZCIKKworIzogcmVtb3RlLWN1cmwuYzoxMDIzCittc2dpZCAiZHVtYiBodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJpbCB0cmFzcG9ydG8gaHR0cCBzdHVwaWRvIG5vbiBzdXBwb3J0YSBsZSBmdW56aW9uYWxpdMOgIHNoYWxsb3ciCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAzNworbXNnaWQgImZldGNoIGZhaWxlZC4iCittc2dzdHIgInJlY3VwZXJvIG5vbiByaXVzY2l0by4iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTA4NQorbXNnaWQgImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIKK21zZ3N0ciAiIgorImltcG9zc2liaWxlIHJlY3VwZXJhcmUgaSBkYXRpIGluIGJhc2UgYWxsbyBTSEExIGNvbiBpbCB0cmFzcG9ydG8gSFRUUCAiCisiaW50ZWxsaWdlbnRlIgorCisjOiByZW1vdGUtY3VybC5jOjExMjkgcmVtb3RlLWN1cmwuYzoxMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAiZXJyb3JlIHByb3RvY29sbG86IGF0dGVzbyBTSEEvcmlmZXJpbWVudG8sIHJpY2V2dXRvICclcyciCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE0NyByZW1vdGUtY3VybC5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAlcyIKK21zZ3N0ciAiaWwgdHJhc3BvcnRvIEhUVFAgbm9uIHN1cHBvcnRhICVzIgorCisjOiByZW1vdGUtY3VybC5jOjExODMKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiZ2l0LWh0dHAtcHVzaCBub24gcml1c2NpdG8iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2NworbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgInJlbW90ZS1jdXJsOiB1c286IGdpdCByZW1vdGUtY3VybCA8cmVtb3RvPiBbPFVSTD5dIgorCisjOiByZW1vdGUtY3VybC5jOjEzOTkKK21zZ2lkICJyZW1vdGUtY3VybDogZXJyb3IgcmVhZGluZyBjb21tYW5kIHN0cmVhbSBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IGVycm9yZSBkdXJhbnRlIGxhIGxldHR1cmEgZGVsIGZsdXNzbyBkZWkgY29tYW5kaSBkYSBHaXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwNgorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgInJlbW90ZS1jdXJsOiB0ZW50YXRvIHVuIGZldGNoIHNlbnphIHVuIHJlcG9zaXRvcnkgbG9jYWxlIgorCisjOiByZW1vdGUtY3VybC5jOjE0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogcmljZXZ1dG8gY29tYW5kbyBzY29ub3NjaXV0byAnJXMnIGRhIEdpdCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODUKK21zZ2lkICJhcmdzIgorbXNnc3RyICJhcmdvbWVudGkiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjg2Cittc2dpZCAib2JqZWN0IGZpbHRlcmluZyIKK21zZ3N0ciAiZmlsdHJhZ2dpbyBvZ2dldHRpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTgzCittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgImRhdGEtc2NhZGVuemEiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxOTcKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgIm5vLW9wIChyZXRyb2NvbXBhdGliaWxpdMOgKSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMwOQorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAidmlzdWFsaXp6YSBwacO5IGRldHRhZ2xpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzExCittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAidmlzdWFsaXp6YSBtZW5vIGRldHRhZ2xpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzE3Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgInVzYSA8bj4gY2lmcmUgcGVyIG1vc3RyYXJlIGdsaSBoYXNoIFNIQS0xIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAiY29tZSByaW11b3ZlcmUgZ2xpIHNwYXppIGUgaSAjY29tbWVudGkgZGFsIG1lc3NhZ2dpbyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNworbXNnaWQgInJlYWQgcGF0aHNwZWMgZnJvbSBmaWxlIgorbXNnc3RyICJsZWdnaSBnbGkgc3BlY2lmaWNhdG9yaSBwZXJjb3JzbyBkYSB1biBmaWxlIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisiY29uIC0tcGF0aHNwZWMtZnJvbS1maWxlIGdsaSBlbGVtZW50aSBzcGVjaWZpY2F0b3JpIHBlcmNvcnNvIHNvbm8gc2VwYXJhdGkgZGEiCisiIHVuIGNhcmF0dGVyZSBOVUwiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgImNoaWF2ZSIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAibm9tZSBjYW1wbyBpbiBiYXNlIGEgY3VpIG9yZGluYXJlIgorCisjOiByZXJlcmUuaDo0NAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorImFnZ2lvcm5hIGwnaW5kaWNlIGNvbiBsYSB0ZWNuaWNhIGRpIHJpc29sdXppb25lIGNvbmZsaXR0aSByaXV0aWxpenphdGEgc2UgIgorInBvc3NpYmlsZSIKKworIzogd3Qtc3RhdHVzLmg6NjcKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAiSEVBRCBzY29sbGVnYXRvIHN1ICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIHNjb2xsZWdhdG8gZGEgIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQWdnaXVuZ2UgaSBjb250ZW51dGkgZGVsIGZpbGUgYWxsJ2luZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6NTEKK21zZ2lkICJBcHBseSBhIHNlcmllcyBvZiBwYXRjaGVzIGZyb20gYSBtYWlsYm94IgorbXNnc3RyICJBcHBsaWNhIHVuYSBzZXJpZSBkaSBwYXRjaCBkYSB1bmEgY2FzZWxsYSBkaSBwb3N0YSIKKworIzogY29tbWFuZC1saXN0Lmg6NTIKK21zZ2lkICJBbm5vdGF0ZSBmaWxlIGxpbmVzIHdpdGggY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICJBbm5vdGEgbGUgcmlnaGUgZGVpIGZpbGUgY29uIGxlIGluZm9ybWF6aW9uaSBzdWkgY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQXBwbGljYSB1bmEgcGF0Y2ggYWkgZmlsZSBlL28gYWxsJ2luZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJJbXBvcnRhIHVuIHJlcG9zaXRvcnkgR05VIEFyY2ggaW4gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICJDcmVhIHVuIGFyY2hpdmlvIGRpIGZpbGUgZGEgdW4gYWxiZXJvIGNvbiBub21lIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NgorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgIlVzYSBsYSByaWNlcmNhIGJpbmFyaWEgcGVyIHRyb3ZhcmUgaWwgY29tbWl0IGNoZSBoYSBpbnRyb2RvdHRvIHVuIGJ1ZyIKKworIzogY29tbWFuZC1saXN0Lmg6NTcKK21zZ2lkICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiCittc2dzdHIgIiIKKyJWaXN1YWxpenphIHF1YWxpIHJldmlzaW9uZSBlIGF1dG9yZSBoYW5ubyBtb2RpZmljYXRvIG9nbmkgc2luZ29sYSByaWdhIGRpIHVuICIKKyJmaWxlIHBlciB1bHRpbWkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU4Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkVsZW5jYSwgY3JlYSBvIGVsaW1pbmEgYnJhbmNoIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICJTcG9zdGEgb2dnZXR0aSBlIHJpZmVyaW1lbnRpIGluIGJhc2UgYSB1biBhcmNoaXZpbyIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICIiCisiRm9ybmlzY2kgaW5mb3JtYXppb25pIHN1bCBjb250ZW51dG8gbyBzdWwgdGlwbyBlIHN1bGxlIGRpbWVuc2lvbmkgcGVyIGdsaSAiCisib2dnZXR0aSBkaSB1biByZXBvc2l0b3J5IgorCisjOiBjb21tYW5kLWxpc3QuaDo2MQorbXNnaWQgIkRpc3BsYXkgZ2l0YXR0cmlidXRlcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsZSBpbmZvcm1hemlvbmkgc3VnbGkgYXR0cmlidXRpIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NjIKK21zZ2lkICJEZWJ1ZyBnaXRpZ25vcmUgLyBleGNsdWRlIGZpbGVzIgorbXNnc3RyICJFc2VndWkgaWwgZGVidWcgZGVpIGZpbGUgZ2l0aWdub3JlL2VzY2x1ZGkgZmlsZSIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJWaXN1YWxpenphIGkgbm9taSBjYW5vbmljaSBlIGdsaSBpbmRpcml6emkgZS1tYWlsIGRlaSBjb250YXR0aSIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIiIKKyJQYXNzYSBkYSB1biBicmFuY2ggYSB1biBhbHRybyBvIHJpcHJpc3RpbmEgaSBmaWxlIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkNvcGlhIGRlaSBmaWxlIGRhbGwnaW5kaWNlIGFsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NgorbXNnaWQgIkVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkIgorbXNnc3RyICJTaSBhc3NpY3VyYSBjaGUgdW4gbm9tZSByaWZlcmltZW50byBzaWEgYmVuIGZvcm1hdG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICJUcm92YSBjb21taXQgY2hlIGRldm9ubyBlc3NlcmUgYW5jb3JhIGFwcGxpY2F0aSB1cHN0cmVhbSIKKworIzogY29tbWFuZC1saXN0Lmg6NjgKK21zZ2lkICJBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAiQXBwbGljYSBsZSBtb2RpZmljaGUgaW50cm9kb3R0ZSBkYSBhbGN1bmkgY29tbWl0IGVzaXN0ZW50aSIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiQWx0ZXJuYXRpdmEgZ3JhZmljYSBhIGdpdC1jb21taXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcwCittc2dpZCAiUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlJpbXVvdmUgaSBmaWxlIG5vbiB0cmFjY2lhdGkgZGFsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiQ2xvbmEgdW4gcmVwb3NpdG9yeSBpbiB1bmEgbnVvdmEgZGlyZWN0b3J5IgorCisjOiBjb21tYW5kLWxpc3QuaDo3MgorbXNnaWQgIkRpc3BsYXkgZGF0YSBpbiBjb2x1bW5zIgorbXNnc3RyICJWaXN1YWxpenphIGkgZGF0aSBpbiBjb2xvbm5lIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJSZWdpc3RyYSBtb2RpZmljaGUgYWwgcmVwb3NpdG9yeSIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIlNjcml2ZSBlIHZlcmlmaWNhIGkgZmlsZSBncmFmbyBkZWkgY29tbWl0IGRpIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiQ3JlYSB1biBudW92byBvZ2dldHRvIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzYKK21zZ2lkICJHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zIgorbXNnc3RyICJPdHRpZW5lIGUgaW1wb3N0YSBsZSBvcHppb25pIGEgbGl2ZWxsbyBkaSByZXBvc2l0b3J5IG8gZ2xvYmFsaSIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAiIgorIkNvbnRhIGlsIG51bWVybyBkaSBvZ2dldHRpIG5vbiBpbiB1biBwYWNrIGUgbGEgbG9ybyBvY2N1cGF6aW9uZSBkaSBzcGF6aW8gc3UgIgorImRpc2NvIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OAorbXNnaWQgIlJldHJpZXZlIGFuZCBzdG9yZSB1c2VyIGNyZWRlbnRpYWxzIgorbXNnc3RyICJSZWN1cGVyYSBlIHNhbHZhIGNyZWRlbnppYWxpIHV0ZW50ZSIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiSGVscGVyIHBlciBzYWx2YXJlIHRlbXBvcmFuZWFtZW50ZSBwYXNzd29yZCBpbiBtZW1vcmlhIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICJIZWxwZXIgcGVyIHNhbHZhcmUgY3JlZGVuemlhbGkgc3UgZGlzY28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgxCittc2dpZCAiRXhwb3J0IGEgc2luZ2xlIGNvbW1pdCB0byBhIENWUyBjaGVja291dCIKK21zZ3N0ciAiRXNwb3J0YSB1biBzaW5nb2xvIGNvbW1pdCBpbiB1biBjaGVja291dCBDVlMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgyCittc2dpZCAiU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUiCittc2dzdHIgIiIKKyJSZWN1cGVyYSBpIGRhdGkgZGEgdW4gc2lzdGVtYSBkaSBjb250cm9sbG8gZGkgdmVyc2lvbmUgY2hlIGxlIHBlcnNvbmUgIgorImFkb3Jhbm8gb2RpYXJlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICJVbiBlbXVsYXRvcmUgZGkgc2VydmVyIENWUyBwZXIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgIlVuIHNlcnZlciB2ZXJhbWVudGUgc2VtcGxpY2UgcGVyIHJlcG9zaXRvcnkgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NQorbXNnaWQgIkdpdmUgYW4gb2JqZWN0IGEgaHVtYW4gcmVhZGFibGUgbmFtZSBiYXNlZCBvbiBhbiBhdmFpbGFibGUgcmVmIgorbXNnc3RyICIiCisiQXR0cmlidWlzY2UgdW4gbm9tZSBsZWdnaWJpbGUgYSB1biBvZ2dldHRvIGJhc2FuZG9zaSBzdSB1biByaWZlcmltZW50byAiCisiZGlzcG9uaWJpbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorIlZpc3VhbGl6emEgbGUgbW9kaWZpY2hlIGZyYSBjb21taXQsIHVuIGNvbW1pdCBlIGwnYWxiZXJvIGRpIGxhdm9ybywgZWNjLiIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIkNvbmZyb250YSBmaWxlIG5lbGwnYWxiZXJvIGRpIGxhdm9ybyBlIG5lbGwnaW5kaWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OAorbXNnaWQgIkNvbXBhcmUgYSB0cmVlIHRvIHRoZSB3b3JraW5nIHRyZWUgb3IgaW5kZXgiCittc2dzdHIgIkNvbmZyb250YSB1biBhbGJlcm8gY29uIGwnYWxiZXJvIGRpIGxhdm9ybyBvIGwnaW5kaWNlIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OQorbXNnaWQgIkNvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzIgorbXNnc3RyICIiCisiQ29uZnJvbnRhIGlsIGNvbnRlbnV0byBlIGkgbW9kZSBkZWkgYmxvYiB0cm92YXRpIHRyYW1pdGUgZHVlIG9nZ2V0dGkgYWxiZXJvIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiIgorIlZpc3VhbGl6emEgbGUgbW9kaWZpY2hlIHVzYW5kbyB0b29sIGNvbXVuaSBwZXIgbGEgdmlzdWFsaXp6YXppb25lIGRlaSBkaWZmIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICJFc3BvcnRhdG9yZSBkaSBkYXRpIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAiQmFja2VuZCBwZXIgaW1wb3J0YXRvcmkgZGkgZGF0aSBHaXQgdmVsb2NpIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MworbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlNjYXJpY2Egb2dnZXR0aSBlIHJpZmVyaW1lbnRpIGRhIHVuIGFsdHJvIHJlcG9zaXRvcnkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk0Cittc2dpZCAiUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlJpY2V2ZSBvZ2dldHRpIG1hbmNhbnRpIGRhIHVuIGFsdHJvIHJlcG9zaXRvcnkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAiUmlzY3JpdmUgYnJhbmNoIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiR2VuZXJhIHVuIG1lc3NhZ2dpbyBkaSBjb21taXQgZGVsIG1lcmdlIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAiVmlzdWFsaXp6YSBpbiBvdXRwdXQgbGUgaW5mb3JtYXppb25pIHN1IG9nbmkgcmlmZXJpbWVudG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAiUHJlcGFyYSBwYXRjaCBwZXIgaWwgbG9ybyBpbnZpbyB0cmFtaXRlIGUtbWFpbCIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgIlZlcmlmaWNhIGxhIGNvbm5lc3Npb25lIGUgbGEgdmFsaWRpdMOgIGRlZ2xpIG9nZ2V0dGkgbmVsIGRhdGFiYXNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmlwdWxpc2NlIGZpbGUgbm9uIG5lY2Vzc2FyaSBlIG90dGltaXp6YSBpbCByZXBvc2l0b3J5IGxvY2FsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAxCittc2dpZCAiRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUiCittc2dzdHIgIkVzdHJhZSBsJ0lEIGRlbCBjb21taXQgZGEgdW4gYXJjaGl2aW8gY3JlYXRvIHVzYW5kbyBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJTdGFtcGEgbGUgcmlnaGUgY29ycmlzcG9uZGVudGkgYSB1bidlc3ByZXNzaW9uZSByZWdvbGFyZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiVW4naW50ZXJmYWNjaWEgZ3JhZmljYSBwb3J0YWJpbGUgcGVyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIkNhbGNvbGEgbCdJRCBvZ2dldHRvIGUgY3JlYSBmYWNvbHRhdGl2YW1lbnRlIHVuIGJsb2IgZGEgdW4gZmlsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTA1Cittc2dpZCAiRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IEdpdCIKK21zZ3N0ciAiVmlzdWFsaXp6YSB1bmEgZ3VpZGEgYSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIkltcGxlbWVudGF6aW9uZSBsYXRvIHNlcnZlciBkaSBHaXQgc3UgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAiU2NhcmljYSBkYXRpIGRhIHVuIHJlcG9zaXRvcnkgR2l0IHJlbW90byB0cmFtaXRlIEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRXNlZ3VlIGlsIHB1c2ggZGkgb2dnZXR0aSBzdSB1biBhbHRybyByZXBvc2l0b3J5IHRyYW1pdGUgSFRUUC9EQVYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlciIKK21zZ3N0ciAiSW52aWEgdW4gaW5zaWVtZSBkaSBwYXRjaCBkYWxsbyBzdGFuZGFyZCBpbnB1dCBhIHVuYSBjYXJ0ZWxsYSBJTUFQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTAKK21zZ2lkICJCdWlsZCBwYWNrIGluZGV4IGZpbGUgZm9yIGFuIGV4aXN0aW5nIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJHZW5lcmEgaWwgZmlsZSBpbmRpY2UgcGFjayBwZXIgdW4gYXJjaGl2aW8gZXNpc3RlbnRlIHNvdHRvcG9zdG8gYSBwYWNrIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTEKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiQ3JlYSB1biByZXBvc2l0b3J5IEdpdCB2dW90byBvIG5lIHJlaW5pemlhbGl6emEgdW5vIGVzaXN0ZW50ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTEyCittc2dpZCAiSW5zdGFudGx5IGJyb3dzZSB5b3VyIHdvcmtpbmcgcmVwb3NpdG9yeSBpbiBnaXR3ZWIiCittc2dzdHIgIlNmb2dsaWEgaXN0YW50YW5lYW1lbnRlIGlsIHR1byByZXBvc2l0b3J5IGRpIGxhdm9ybyBzdSBnaXR3ZWIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMworbXNnaWQgIkFkZCBvciBwYXJzZSBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGluIGNvbW1pdCBtZXNzYWdlcyIKK21zZ3N0ciAiQWdnaXVuZ2UgbyBhbmFsaXp6YSBpbmZvcm1hemlvbmkgc3RydXR0dXJhdGUgbmVpIG1lc3NhZ2dpIGRpIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgIklsIGJyb3dzZXIgcGVyIGkgcmVwb3NpdG9yeSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNQorbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIlZpc3VhbGl6emEgaSBsb2cgZGVpIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlZpc3VhbGl6emEgaW5mb3JtYXppb25pIHN1aSBmaWxlIG5lbGwnaW5kaWNlIGUgbmVsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRWxlbmNhIGkgcmlmZXJpbWVudGkgaW4gdW4gcmVwb3NpdG9yeSByZW1vdG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIkVsZW5jYSBpIGNvbnRlbnV0aSBkaSB1biBvZ2dldHRvIGFsYmVybyIKKworIzogY29tbWFuZC1saXN0Lmg6MTE5Cittc2dpZCAiRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSIKK21zZ3N0ciAiIgorIkVzdHJhZSBsYSBwYXRjaCBlIGxlIGluZm9ybWF6aW9uaSBzdWxsJ2F1dG9yZSBkYSB1biBzaW5nb2xvIG1lc3NhZ2dpbyBlLW1haWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiVW4gc2VtcGxpY2UgcHJvZ3JhbW1hIHBlciBzdWRkaXZpZGVyZSBpIGZpbGUgVU5JWCBtYm94IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAiVW5pc2NlIGR1ZSBvIHBpw7kgY3Jvbm9sb2dpZSBkaSBzdmlsdXBwbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTIyCittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgIlRyb3ZhIGlsIG1hZ2dpb3IgbnVtZXJvIHBvc3NpYmlsZSBkaSBhbnRlbmF0aSBjb211bmkgcGVyIHVuIG1lcmdlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAiRXNlZ3VlIHVuIG1lcmdlIGEgdHJlIHZpZSBzdSBmaWxlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjQKK21zZ2lkICJSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nIgorbXNnc3RyICJFc2VndWUgdW4gbWVyZ2UgcGVyIGkgZmlsZSBjaGUgbG8gcmljaGllZG9ubyIKKworIzogY29tbWFuZC1saXN0Lmg6MTI1Cittc2dpZCAiVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleCIKK21zZ3N0ciAiSWwgcHJvZ3JhbW1hIGhlbHBlciBzdGFuZGFyZCBkYSB1c2FyZSBjb24gZ2l0LW1lcmdlLWluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorIkVzZWd1ZSBnbGkgc3RydW1lbnRpIGRpIHJpc29sdXppb25lIGNvbmZsaXR0aSBkaSBtZXJnZSBwZXIgcmlzb2x2ZXJlIGkgIgorImNvbmZsaXR0aSBkaSBtZXJnZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiVmlzdWFsaXp6YSB1biBtZXJnZSBhIHRyZSB2aWUgc2VuemEgbW9kaWZpY2FyZSBsJ2luZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgIlNjcml2ZSBlIHZlcmlmaWNhIGluZGljaSBtdWx0aS1wYWNrIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjkKK21zZ2lkICJDcmVhdGVzIGEgdGFnIG9iamVjdCIKK21zZ3N0ciAiQ3JlYSB1biBvZ2dldHRvIHRhZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIkdlbmVyYSB1biBvZ2dldHRvIGFsYmVybyBkYSB0ZXN0byBpbiBmb3JtYXRvIGxzLXRyZWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMQorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAiU3Bvc3RhIG8gcmlub21pbmEgdW4gZmlsZSwgdW5hIGRpcmVjdG9yeSBvIHVuIGNvbGxlZ2FtZW50byBzaW1ib2xpY28iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMgorbXNnaWQgIkZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMiCittc2dzdHIgIlRyb3ZhIGkgbm9taSBzaW1ib2xpY2kgcGVyIGxlIHJldmlzaW9uaSBkYXRlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzMKK21zZ2lkICJBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMiCittc2dzdHIgIkFnZ2l1bmdlIG8gZXNhbWluYSBsZSBub3RlIGFnbGkgb2dnZXR0aSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgIkltcG9ydGEgZGF0aSBkYSwgbyBpbnZpYSBkYXRpIGEsIHJlcG9zaXRvcnkgUGVyZm9yY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkNyZWF0ZSBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMiCittc2dzdHIgIkNyZWEgdW4gYXJjaGl2aW8gZGkgb2dnZXR0aSBzb3R0b3Bvc3RvIGEgcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAiVHJvdmEgZmlsZSBwYWNrIHJpZG9uZGFudGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNworbXNnaWQgIlBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcyIKK21zZ3N0ciAiRXNlZ3VlIGlsIHBhY2sgZGkgaGVhZCBlIHRhZyBwZXIgdW4gYWNjZXNzbyBlZmZpY2llbnRlIGFsIHJlcG9zaXRvcnkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOAorbXNnaWQgIlJvdXRpbmVzIHRvIGhlbHAgcGFyc2luZyByZW1vdGUgcmVwb3NpdG9yeSBhY2Nlc3MgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorIlJvdXRpbmUgY2hlIGFpdXRhbm8gYWQgYW5hbGl6emFyZSBpIHBhcmFtZXRyaSBkaSBhY2Nlc3NvIGFpIHJlcG9zaXRvcnkgcmVtb3RpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzkKK21zZ2lkICJDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaCIKK21zZ3N0ciAiQ2FsY29sYSBsJ0lEIHVuaXZvY28gcGVyIHVuYSBwYXRjaCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQwCittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJFbGltaW5hIHR1dHRpIGdsaSBvZ2dldHRpIG5vbiByYWdnaXVuZ2liaWxpIGRhbCBkYXRhYmFzZSBvZ2dldHRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDEKK21zZ2lkICJSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMiCittc2dzdHIgIlJpbXVvdmUgZ2xpIG9nZ2V0dGkgYWdnaXVudGl2aSBnacOgIHByZXNlbnRpIG5laSBmaWxlIHBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiIgorIkVzZWd1ZSBpbCBmZXRjaCBlIGwnaW50ZWdyYXppb25lIGNvbiB1biBhbHRybyByZXBvc2l0b3J5IG8gdW4gYnJhbmNoIGxvY2FsZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJBZ2dpb3JuYSBpIHJpZmVyaW1lbnRpIHJlbW90aSBpbnNpZW1lIGFnbGkgb2dnZXR0aSBhc3NvY2lhdGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiQXBwbGljYSB1biBpbnNpZW1lIGRpIHBhdGNoIHF1aWx0IHN1bCBicmFuY2ggY29ycmVudGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NQorbXNnaWQgIkNvbXBhcmUgdHdvIGNvbW1pdCByYW5nZXMgKGUuZy4gdHdvIHZlcnNpb25zIG9mIGEgYnJhbmNoKSIKK21zZ3N0ciAiQ29tcGFyYSBkdWUgaW50ZXJ2YWxsaSBkaSBjb21taXQgKGFkIGVzLiBkdWUgdmVyc2lvbmkgZGkgdW4gYnJhbmNoKSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ2Cittc2dpZCAiUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleCIKK21zZ3N0ciAiTGVnZ2UgbGUgaW5mb3JtYXppb25pIHN1IHVuIGFsYmVybyBkYWxsJ2luZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICJSaWFwcGxpY2EgZGVpIGNvbW1pdCBkb3BvIGwndWx0aW1vIGNvbW1pdCBkaSB1biBicmFuY2giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmljZXZlIHF1YW50byBzb3R0b3Bvc3RvIGEgcHVzaCBuZWwgcmVwb3NpdG9yeSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiR2VzdGlzY2UgbGUgaW5mb3JtYXppb25pIGRlbCByZWdpc3RybyBkZWkgcmlmZXJpbWVudGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MAorbXNnaWQgIk1hbmFnZSBzZXQgb2YgdHJhY2tlZCByZXBvc2l0b3JpZXMiCittc2dzdHIgIkdlc3Rpc2NlIGwnaW5zaWVtZSBkZWkgcmVwb3NpdG9yeSB0cmFjY2lhdGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MQorbXNnaWQgIlBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkiCittc2dzdHIgIkVzZWd1ZSBpbCBwYWNrIGRlZ2xpIG9nZ2V0dGkgbm9uIHNvdHRvcG9zdGkgYSBwYWNrIGluIHVuIHJlcG9zaXRvcnkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICJDcmVhLCBlbGVuY2EsIGVsaW1pbmEgaSByaWZlcmltZW50aSBwZXIgc29zdGl0dWlyZSBvZ2dldHRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTMKK21zZ2lkICJHZW5lcmF0ZXMgYSBzdW1tYXJ5IG9mIHBlbmRpbmcgY2hhbmdlcyIKK21zZ3N0ciAiR2VuZXJhIHVuIHJpYXNzdW50byBkZWxsZSBtb2RpZmljaGUgaW4gc29zcGVzbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAiUml1c2EgbGEgcmlzb2x1emlvbmUgcmVnaXN0cmF0YSBkZWkgbWVyZ2UgY2hlIGhhbm5vIGdlbmVyYXRvIGNvbmZsaXR0aSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU1Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIlJpcHJpc3RpbmEgbCdIRUFEIGNvcnJlbnRlIGFsbG8gc3RhdG8gc3BlY2lmaWNhdG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJSaXByaXN0aW5hIGkgZmlsZSBuZWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkVzZWd1ZSBpbCByZXZlcnQgZGkgYWxjdW5pIGNvbW1pdCBlc2lzdGVudGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiRWxlbmNhIGdsaSBvZ2dldHRpIGNvbW1pdCBpbiBvcmRpbmUgY3Jvbm9sb2dpY28gaW52ZXJzbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAiU2NlZ2xpZSBlIGFsdGVyYSBpIHBhcmFtZXRyaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTYwCittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIlJpbXVvdmUgZmlsZSBkYWxsJ2FsYmVybyBkaSBsYXZvcm8gZSBkYWxsJ2luZGljZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgIkludmlhIHVuIGluc2llbWUgZGkgcGF0Y2ggY29tZSBlLW1haWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MgorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJFc2VndWUgaWwgcHVzaCBkaSBvZ2dldHRpIHN1IHVuIGFsdHJvIHJlcG9zaXRvcnkgdHJhbWl0ZSBpbCBwcm90b2NvbGxvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYzCittc2dpZCAiUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcyIKK21zZ3N0ciAiU2hlbGwgZGkgbG9naW4gbGltaXRhdGEgcGVyIGNvbmNlZGVyZSBhY2Nlc3NvIFNTSCBzb2xvIHBlciBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NAorbXNnaWQgIlN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0IgorbXNnc3RyICJSaWFzc3VtZSBsJ291dHB1dCBkaSAnZ2l0IGxvZyciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICJWaXN1YWxpenphIHZhcmkgdGlwaSBkaSBvZ2dldHRpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjYKK21zZ2lkICJTaG93IGJyYW5jaGVzIGFuZCB0aGVpciBjb21taXRzIgorbXNnc3RyICJWaXN1YWxpenphIGkgYnJhbmNoIGUgaSBsb3JvIGNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY3Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsJ2luZGljZSBkaSB1biBhcmNoaXZpbyBzb3R0b3Bvc3RvIGEgcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiRWxlbmNhIGkgcmlmZXJpbWVudGkgaW4gdW4gcmVwb3NpdG9yeSBsb2NhbGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OQorbXNnaWQgIkdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cyIKK21zZ3N0ciAiIgorIkNvZGljZSBkaSBpbml6aWFsaXp6YXppb25lIGRlbGwnaW50ZXJuYXppb25hbGl6emF6aW9uZSBkaSBHaXQgcGVyIGdsaSBzY3JpcHQgIgorInNoZWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzAKK21zZ2lkICJDb21tb24gR2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlIgorbXNnc3RyICJDb2RpY2UgY29tdW5lIGRpIGluaXppYWxpenphemlvbmUgZGkgR2l0IHBlciBnbGkgc2NyaXB0IHNoZWxsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzEKK21zZ2lkICJJbml0aWFsaXplIGFuZCBtb2RpZnkgdGhlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiSW5pemlhbGl6emEgZSBtb2RpZmljYSBzcGFyc2UtY2hlY2tvdXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MgorbXNnaWQgIlN0YXNoIHRoZSBjaGFuZ2VzIGluIGEgZGlydHkgd29ya2luZyBkaXJlY3RvcnkgYXdheSIKK21zZ3N0ciAiTWV0dGUgZGEgcGFydGUgbGUgbW9kaWZpY2hlIGluIHVuYSBkaXJlY3RvcnkgZGkgbGF2b3JvIHNwb3JjYSIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIKK21zZ3N0ciAiQWdnaXVuZ2UgaSBjb250ZW51dGkgZGVpIGZpbGUgYWxsJ2FyZWEgZGkgc3RhZ2luZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc0Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsbyBzdGF0byBkZWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICJSaW11b3ZlIHNwYXppIGJpYW5jaGkgbm9uIG5lY2Vzc2FyaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAiSW5pemlhbGl6emEsIGFnZ2lvcm5hIG8gZXNhbWluYSBzb3R0b21vZHVsaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICJPcGVyYXRpdml0w6AgYmlkaXJlemlvbmFsZSB0cmEgdW4gcmVwb3NpdG9yeSBTdWJ2ZXJzaW9uIGUgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIlBhc3NhIGRhIHVuIGJyYW5jaCBhIHVuIGFsdHJvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJMZWdnZSwgbW9kaWZpY2EgZWQgZWxpbWluYSByaWZlcmltZW50aSBzaW1ib2xpY2kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICJDcmVhLCBlbGVuY2EsIGVsaW1pbmEgbyB2ZXJpZmljYSB1biBvZ2dldHRvIHRhZyBmaXJtYXRvIGNvbiBHUEciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICJDcmVhIHVuIGZpbGUgdGVtcG9yYW5lbyBjb24gaSBjb250ZW51dGkgZGkgdW4gYmxvYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJEZWNvbXByaW1lIGdsaSBvZ2dldHRpIGRhIHVuIGFyY2hpdmlvIHNvdHRvcG9zdG8gYSBwYWNrIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODMKK21zZ2lkICJSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4IgorbXNnc3RyICJSZWdpc3RyYSBpIGNvbnRlbnV0aSBkZWkgZmlsZSBkZWxsJ2FsYmVybyBkaSBsYXZvcm8gbmVsbCdpbmRpY2UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIlVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseSIKK21zZ3N0ciAiQWdnaW9ybmEgaW4gbW9kbyBzaWN1cm8gaWwgbm9tZSBvZ2dldHRvIHNhbHZhdG8gaW4gdW4gcmlmZXJpbWVudG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICJBZ2dpb3JuYSBpbCBmaWxlIGluZm9ybWF6aW9uaSBhZ2dpdW50aXZlIHBlciBhaXV0YXJlIGkgc2VydmVyIHN0dXBpZGkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICJSZWludmlhIGwnYXJjaGl2aW8gYSBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICJSZWludmlhIGdsaSBvZ2dldHRpIHNvdHRvcG9zdGkgYSBwYWNrIGEgZ2l0LWZldGNoLXBhY2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OAorbXNnaWQgIlNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZSIKK21zZ3N0ciAiVmlzdWFsaXp6YSB1bmEgdmFyaWFiaWxlIGxvZ2ljYSBkaSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgIlZlcmlmaWNhIGxhIGZpcm1hIEdQRyBkZWkgY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTAKK21zZ2lkICJWYWxpZGF0ZSBwYWNrZWQgR2l0IGFyY2hpdmUgZmlsZXMiCittc2dzdHIgIkNvbnZhbGlkYSBpIGZpbGUgYXJjaGl2aW8gc290dG9wb3N0aSBhIHBhY2sgZGkgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTEKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICJWZXJpZmljYSBsYSBmaXJtYSBHUEcgZGVpIHRhZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTkyCittc2dpZCAiR2l0IHdlYiBpbnRlcmZhY2UgKHdlYiBmcm9udGVuZCB0byBHaXQgcmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAiSW50ZXJmYWNjaWEgV2ViIHBlciBHaXQgKGZyb250ZW5kIFdlYiBhaSByZXBvc2l0b3J5IEdpdCkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIlNob3cgbG9ncyB3aXRoIGRpZmZlcmVuY2UgZWFjaCBjb21taXQgaW50cm9kdWNlcyIKK21zZ3N0ciAiIgorIlZpc3VhbGl6emEgaSByZWdpc3RyaSBpbnNpZW1lIGFsbGUgZGlmZmVyZW56ZSBpbnRyb2RvdHRlIGRhIGNpYXNjdW4gY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAiR2VzdGlzY2UgYWxiZXJpIGRpIGxhdm9ybyBtdWx0aXBsaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk1Cittc2dpZCAiQ3JlYXRlIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiQ3JlYSB1biBvZ2dldHRvIGFsYmVybyBkYWxsJ2luZGljZSBjb3JyZW50ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiRGVmaW5pemlvbmUgZGkgYXR0cmlidXRpIHBlciBwZXJjb3JzbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJJbnRlcmZhY2NpYSBhIHJpZ2EgZGkgY29tYW5kbyBkaSBHaXQgZSBjb252ZW56aW9uaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk4Cittc2dpZCAiQSBHaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycyIKK21zZ3N0ciAiVW4gdHV0b3JpYWwgR2l0IGRpIGJhc2UgcGVyIGdsaSBzdmlsdXBwYXRvcmkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OQorbXNnaWQgIkdpdCBmb3IgQ1ZTIHVzZXJzIgorbXNnc3RyICJHaXQgcGVyIHV0ZW50aSBDVlMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICJNZXNzYSBhIHB1bnRvIGRlbGwnb3V0cHV0IGRpIGRpZmYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMQorbXNnaWQgIkEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzIGZvciBFdmVyeWRheSBHaXQiCittc2dzdHIgIlVuIGluc2llbWUgZGkgY29tYW5kaSB1dGlsZSBlIG1pbmltYWxlIHBlciBsJ3VzbyBxdW90aWRpYW5vIGRpIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiQSBHaXQgR2xvc3NhcnkiCittc2dzdHIgIlVuIGdsb3NzYXJpbyBkaSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMworbXNnaWQgIkhvb2tzIHVzZWQgYnkgR2l0IgorbXNnc3RyICJIb29rIHVzYXRpIGRhIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA0Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiU3BlY2lmaWNhIGkgZmlsZSBpbnRlbnppb25hbG1lbnRlIG5vbiB0cmFjY2lhdGkgZGEgaWdub3JhcmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICJEZWZpbml6aW9uZSBwcm9wcmlldMOgIHNvdHRvbW9kdWxvIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDYKK21zZ2lkICJHaXQgbmFtZXNwYWNlcyIKK21zZ3N0ciAiU3BhemkgZGVpIG5vbWkgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDcKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSBMYXlvdXQiCittc2dzdHIgIlN0cnV0dHVyYSByZXBvc2l0b3J5IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA4Cittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICJDb21lIHNwZWNpZmljYXJlIHJldmlzaW9uaSBlIGludGVydmFsbGkgaW4gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDkKK21zZ2lkICJNb3VudGluZyBvbmUgcmVwb3NpdG9yeSBpbnNpZGUgYW5vdGhlciIKK21zZ3N0ciAiTW9udG8gdW4gcmVwb3NpdG9yeSBkZW50cm8gdW4gYWx0cm8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdDogcGFydCB0d28iCittc2dzdHIgIlVuIHR1dG9yaWFsIGludHJvZHV0dGl2byBwZXIgR2l0OiBzZWNvbmRhIHBhcnRlIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgIlVuIHR1dG9yaWFsIGludHJvZHV0dGl2byBwZXIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTIKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIlVuYSBwYW5vcmFtaWNhIGRlaSBmbHVzc2kgZGkgbGF2b3JvIHJhY2NvbWFuZGF0aSBpbiBHaXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiRGV2aSBpbml6aWFyZSBjb24gXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo2MAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiVnVvaSBjaGUgbWUgbmUgb2NjdXBpIGlvIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJSZXZpc2lvbmUgZm9ybml0YSBub24gdmFsaWRhOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIlJldmlzaW9uZSBmb3JuaXRhIG5vbiB2YWxpZGE6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiUmV2aXNpb25lIGZvcm5pdGEgbm9uIHZhbGlkYTogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIHJpY2hpZWRlIHVuIHNvbG8gYXJnb21lbnRvLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJOZXNzdW4gZmlsZSBkaSBsb2cgc3BlY2lmaWNhdG8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICJpbXBvc3NpYmlsZSBsZWdnZXJlICRmaWxlIHBlciByaWVzZWd1aXJlIGkgY29tYW5kaSBjb250ZW51dGkiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBkaSBjb3NhIHN0YWkgcGFybGFuZG8/IgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MQorbXNnaWQgImJpc2VjdCBydW4gZmFpbGVkOiBubyBjb21tYW5kIHByb3ZpZGVkLiIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkaSBiaXNlY3Qgbm9uIHJpdXNjaXRhOiBuZXNzdW4gY29tYW5kbyBmb3JuaXRvLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgImVzZWN1emlvbmUgZGkgJGNvbW1hbmQgaW4gY29yc28iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyJlc2VjdXppb25lIGRpIGJpc2VjdCBub24gcml1c2NpdGE6XG4iCisiaWwgY29kaWNlIGRpIHVzY2l0YSAkcmVzIGRhICckY29tbWFuZCcgw6ggPCAwIG9wcHVyZSA+PSAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgImwnZXNlY3V6aW9uZSBkaSBiaXNlY3Qgbm9uIHB1w7IgcGnDuSBwcm9zZWd1aXJlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJlc2VjdXppb25lIGRpIGJpc2VjdCBub24gcml1c2NpdGE6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIMOoIHVzY2l0byBjb24gaWwgY29kaWNlIGRpIGVycm9yZSAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiZXNlY3V6aW9uZSBkaSBiaXNlY3QgY29tcGxldGF0YSBjb24gc3VjY2Vzc28iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzAwCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJOb24gc3RpYW1vIGVzZWd1ZW5kbyB1bmEgYmlzZXppb25lLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NDYKK21zZ2lkICIiCisiRXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJtZXJnZSIKK21zZ3N0ciAiIgorIkVycm9yZTogbGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgYWkgc2VndWVudGkgZmlsZSBzYXJlYmJlcm8gc292cmFzY3JpdHRlIGRhbCAiCisibWVyZ2UiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIklsIG1lcmdlIGF1dG9tYXRpY28gbm9uIGhhIGZ1bnppb25hdG8uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgIk5vbiBkb3ZyZWJiZSBlc3NlcmUgZXNlZ3VpdG8gdW4gbWVyZ2Ugb2N0b3B1cy4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIHVuIGNvbW1pdCBjb211bmUgY29uICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiR2nDoCBhZ2dpb3JuYXRvIHJpc3BldHRvIGEgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgIkVzZWd1byBpbCBmYXN0IGZvcndhcmQgYTogJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiUHJvdm8gdW4gbWVyZ2Ugc2VtcGxpY2UgY29uICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgIklsIG1lcmdlIHNlbXBsaWNlIG5vbiBoYSBmdW56aW9uYXRvLCBwcm92byBpbCBtZXJnZSBhdXRvbWF0aWNvLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmltdW92ZXJlIGwnaW5kaWNlIHRlbXBvcmFuZW8gKG5vbiBwdcOyIHN1Y2NlZGVyZSkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgJHJlZl9zdGFzaCBjb24gJHdfY29tbWl0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgImVycm9yZTogb3B6aW9uZSBzY29ub3NjaXV0YSBwZXIgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICRzdGFzaF9tc2ciCittc2dzdHIgIkRpcmVjdG9yeSBkaSBsYXZvcm8gZSBzdGF0byBpbmRpY2Ugc2FsdmF0aTogJHN0YXNoX21zZyIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJvcHppb25lIHNjb25vc2NpdXRhOiAkb3B0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiVHJvcHBlIHJldmlzaW9uaSBzcGVjaWZpY2F0ZTogJFJFViIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIG5vbiDDqCB1biByaWZlcmltZW50byB2YWxpZG8iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3MnIG5vbiDDqCB1biBjb21taXQgZGkgdGlwbyBzdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIG5vbiDDqCB1biByaWZlcmltZW50byBhIHVubyBzdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MTgKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBsJ2luZGljZSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MjIKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIkltcG9zc2liaWxlIGFwcGxpY2FyZSB1bm8gc3Rhc2ggbmVsIG1lenpvIGRpIHVuIG1lcmdlIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIkNpIHNvbm8gY29uZmxpdHRpIGluIGluZGV4LiBQcm92YSBzZW56YSAtLWluZGV4LiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzIKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHNhbHZhcmUgbCdhbGJlcm8gaW5kaWNlIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY0MQorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IgorbXNnc3RyICIiCisiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaXByaXN0aW5hcmUgaSBmaWxlIG5vbiB0cmFjY2lhdGkgZGFsbGEgdm9jZSBzdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaW11b3ZlcmUgaSBmaWxlIG1vZGlmaWNhdGkgZGFsbCdhcmVhIGRpIHN0YWdpbmciCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICIke1JFVn0gZWxpbWluYXRhICgkcykiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IG5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmltdW92ZXJlIGxhIHZvY2UgZGkgc3Rhc2giCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzkyCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoUGVyIHJpcHJpc3RpbmFybGkgZGlnaXRhIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIwMgorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiSWwgcGVyY29yc28gcmVsYXRpdm8gcHXDsiBlc3NlcmUgdXNhdG8gc29sbyBkYWwgcHJpbW8gbGl2ZWxsbyBkZWxsJ2FsYmVybyBkaSAiCisibGF2b3JvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMgorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiVVJMIHJlcG9zaXRvcnk6OiAnJHJlcG8nIGRldmUgZXNzZXJlIGFzc29sdXRvIG8gaW5pemlhcmUgY29uIC4vfC4uLyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIGVzaXN0ZSBnacOgIG5lbGwnaW5kaWNlIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyBlc2lzdGUgZ2nDoCBuZWxsJ2luZGljZSBlIG5vbiDDqCB1biBzb3R0b21vZHVsbyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiJyRzbV9wYXRoJyBub24gaGEgdW4gY29tbWl0IGRpIGN1aSDDqCBzdGF0byBlc2VndWl0byBpbCBjaGVja291dCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiSWwgc2VndWVudGUgcGVyY29yc28gw6ggaWdub3JhdG8gZGEgdW5vIGRlaSB0dW9pIGZpbGUgLmdpdGlnbm9yZTpcbiIKKyIkc21fcGF0aFxuIgorIlVzYSAtZiBzZSB2dW9pIGRhdnZlcm8gYWdnaXVuZ2VybG8uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFnZ2l1bnRhIGRlbCByZXBvc2l0b3J5IGVzaXN0ZW50ZSBpbiAnJHNtX3BhdGgnIGFsbCdpbmRpY2UiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBlc2lzdGUgZ2nDoCBlIG5vbiDDqCB1biByZXBvc2l0b3J5IEdpdCB2YWxpZG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKyLDiCBzdGF0YSB0cm92YXRhIGxvY2FsbWVudGUgdW5hIGRpcmVjdG9yeSBHaXQgcGVyICckc21fbmFtZScgY29uIGkgc2VndWVudGkgIgorInJlbW90aToiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCAiCisicmVwb1xuIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisiU2UgdnVvaSByaXVzYXJlIHF1ZXN0YSBkaXJlY3RvcnkgR2l0IGxvY2FsZSBhbnppY2jDqSBjbG9uYXJsYSBudW92YW1lbnRlIGRhXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2EgbCdvcHppb25lICctLWZvcmNlJy4gU2UgbGEgZGlyZWN0b3J5IEdpdCBsb2NhbGUgbm9uIMOoIGlsIHJlcG9zaXRvcnlcbiIKKyJjb3JyZXR0bywgbyBzZSBub24gc2VpIHNpY3VybyBkaSBjacOyIGNoZSBxdWVzdG8gdm9nbGlhIGRpcmUsIHNjZWdsaSB1biAiCisiYWx0cm9cbiIKKyJub21lIGNvbiBsJ29wemlvbmUgJy0tbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiUmlhdHRpdm8gbGEgZGlyZWN0b3J5IEdpdCBsb2NhbGUgcGVyIGlsIHNvdHRvbW9kdWxvICckc21fbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjaGVja291dCBkZWwgc290dG9tb2R1bG8gJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkFnZ2l1bnRhIGRlbCBzb3R0b21vZHVsbyAnJHNtX3BhdGgnIG5vbiByaXVzY2l0YSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiUmVnaXN0cmF6aW9uZSBkZWwgc290dG9tb2R1bG8gJyRzbV9wYXRoJyBub24gcml1c2NpdGEiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgdHJvdmFyZSBsYSByZXZpc2lvbmUgY29ycmVudGUgbmVsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAiCisiJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgZmV0Y2ggbmVsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgdHJvdmFyZSBsYSByZXZpc2lvbmUgY29ycmVudGUgcGVyICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSBuZWwgIgorInBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxMworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzsgdHJ5aW5nIHRvIGRpcmVjdGx5IGZldGNoICIKKyIkc2hhMToiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBmZXRjaCBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICckZGlzcGxheXBhdGgnOyAiCisicHJvdm8gYSByZWN1cGVyYXJlIGRpcmV0dGFtZW50ZSAkc2hhMToiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiAkc2hhMS4gIgorIkRpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisiRmV0Y2ggZXNlZ3VpdG8gbmVsIHBlcmNvcnNvIGRlbCBzb3R0b21vZHVsbyAnJGRpc3BsYXlwYXRoJywgbWEgbm9uIGNvbnRlbmV2YSAiCisiJHNoYTEuIEZldGNoIGRpcmV0dG8gZGkgdGFsZSBjb21taXQgbm9uIHJpdXNjaXRvLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY2hlY2tvdXQgZGkgJyRzaGExJyBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJQZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gJyRkaXNwbGF5cGF0aCc6IGVzZWd1aXRvIGNoZWNrb3V0IGRpICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZWJhc2UgZGkgJyRzaGExJyBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiUGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICckZGlzcGxheXBhdGgnOiBlc2VndWl0byByZWJhc2Ugc3UgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgbWVyZ2UgZGkgJyRzaGExJyBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAiUGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICckZGlzcGxheXBhdGgnOiBlc2VndWl0byBtZXJnZSBpbiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiRXNlY3V6aW9uZSBkaSAnJGNvbW1hbmQgJHNoYTEnIG5vbiByaXVzY2l0YSBuZWwgcGVyY29yc28gZGVsIHNvdHRvbW9kdWxvICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJQZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJSaWNvcnNpb25lIG5lbCBwZXJjb3JzbyBkZWwgc290dG9tb2R1bG8gJyRkaXNwbGF5cGF0aCcgbm9uIHJpdXNjaXRhIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg4NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIkwnb3B6aW9uZSAtLWNhY2hlZCBub24gcHXDsiBlc3NlcmUgdXNhdGEgY29uIGwnb3B6aW9uZSAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkzOAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJtb2RhbGl0w6AgJG1vZF9kc3QgaW5hdHRlc2EiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAgQXR0ZW56aW9uZTogJGRpc3BsYXlfbmFtZSBub24gY29udGllbmUgaWwgY29tbWl0ICRzaGExX3NyYyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBBdHRlbnppb25lOiAkZGlzcGxheV9uYW1lIG5vbiBjb250aWVuZSBpbCBjb21taXQgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICBBdHRlbnppb25lOiAkZGlzcGxheV9uYW1lIG5vbiBjb250aWVuZSBpIGNvbW1pdCAkc2hhMV9zcmMgZSAkc2hhMV9kc3QiCisKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiVmVkaSBnaXQtJHtjbWR9KDEpIHBlciB1bHRlcmlvcmkgZGV0dGFnbGkuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTA5Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICJTdGFzaCBhdXRvbWF0aWNvIGFwcGxpY2F0by4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgbWVtb3JpenphcmUgJHN0YXNoX3NoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgIlJlYmFzZSBpbiBjb3JzbyAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkNvbWFuZGk6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzYSBpbCBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2EgaWwgY29tbWl0LCBtYSBtb2RpZmljYSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0XG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzYSBpbCBjb21taXQsIG1hIGZlcm1hdGkgcGVyIG1vZGlmaWNhcmxvXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNhIGlsIGNvbW1pdCwgbWEgZm9uZGlsbyBjb24gaWwgY29tbWl0IHByZWNlZGVudGVcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGNvbWUgXCJzcXVhc2hcIiwgbWEgc2NhcnRhIGlsIG1lc3NhZ2dpbyBkaSBsb2cgZGkgIgorInF1ZXN0b1xuIgorIiAgICAgICAgICAgICAgICAgICAgY29tbWl0XG4iCisieCwgZXhlYyA8Y29tYW5kbz4gPSBlc2VndWkgaWwgY29tYW5kbyAoaWwgcmVzdG8gZGVsbGEgcmlnYSkgdXNhbmRvIGxhIHNoZWxsXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IGVsaW1pbmEgaWwgY29tbWl0XG4iCisibCwgbGFiZWwgPGV0aWNoZXR0YT4gPSBldGljaGV0dGEgbCdIRUFEIGNvcnJlbnRlIGNvbiB1biBub21lXG4iCisidCwgcmVzZXQgPGV0aWNoZXR0YT4gPSByZWltcG9zdGEgSEVBRCBhIHVuJ2V0aWNoZXR0YVxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8ZXRpY2hldHRhPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhIHVuIGNvbW1pdCBkaSBtZXJnZSB1c2FuZG8gaWwgbWVzc2FnZ2lvIGRlbCBjb21taXQgZGkgbWVyZ2VcbiIKKyIuICAgICAgIG9yaWdpbmFsZSAobyBsYSBvbmVsaW5lIHNlIG5vbiDDqCBzdGF0byBzcGVjaWZpY2F0byB1biBjb21taXQgZGkgIgorIm1lcmdlXG4iCisiLiAgICAgICBvcmlnaW5hbGUpLiBVc2EgLWMgPGNvbW1pdD4gcGVyIHJpZm9ybXVsYXJlIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQuXG4iCisiXG4iCisiUXVlc3RlIHJpZ2hlIHBvc3Nvbm8gZXNzZXJlIHJpb3JkaW5hdGU7IHNhcmFubm8gZXNlZ3VpdGUgZGFsbGEgcHJpbWEgIgorImFsbCd1bHRpbWEuXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIsOIIHBvc3NpYmlsZSBtb2RpZmljYXJlIGlsIGNvbW1pdCBvcmEgY29uXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJRdWFuZG8gc2VpIHNvZGRpc2ZhdHRvIGRlbGxlIG1vZGlmaWNoZSwgZXNlZ3VpXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMTogbm9uIMOoIHVuIGNvbW1pdCBjaGUgcG9zc2EgZXNzZXJlIHNjZWx0byIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjMzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCittc2dzdHIgIk5vbWUgY29tbWl0IG5vbiB2YWxpZG86ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzY0Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIHNjcml2ZXJlIGxvIFNIQTEgZGVsIGNvbW1pdCBjaGUgZG92cmViYmUgc29zdGl0dWlyZSBxdWVsbG8gIgorImNvcnJlbnRlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIkZhc3QgZm9yd2FyZCBhICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBmYXN0IGZvcndhcmQgYSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJJbXBvc3NpYmlsZSBzcG9zdGFyZSBsJ0hFQUQgYSAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIk1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgbG8gc3F1YXNoIGRpIHVuIG1lcmdlOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgcmllc2VjdXppb25lIGRlbCBtZXJnZSBkaSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIkltcG9zc2liaWxlIHNjZWdsaWVyZSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICJRdWVzdG8gw6ggaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdCBudW1lcm8gJHtufToiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJJbCBtZXNzYWdnaW8gZGkgY29tbWl0IG51bWVybyAke259IHNhcsOgIHNhbHRhdG86IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIlF1ZXN0YSDDqCB1bmEgY29tYmluYXppb25lIGRpICRjb3VudCBjb21taXQuIgorbXNnc3RyWzFdICJRdWVzdGEgw6ggdW5hIGNvbWJpbmF6aW9uZSBkaSAkY291bnQgY29tbWl0LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiUXVlc3RhIMOoIHVuYSBjb21iaW5hemlvbmUgZGkgMiBjb21taXQuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTM2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NzkKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXBwbGljYXJlICRzaGExLi4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgbW9kaWZpY2FyZSBpbCBjb21taXQgZG9wbyBsYSBzY2VsdGEgZGkgJHNoYTEuLi4gJHJlc3RcbiIKKyJNb2x0byBwcm9iYWJpbG1lbnRlIHF1ZXN0byDDqCBkb3Z1dG8gYSB1biBtZXNzYWdnaW8gZGkgY29tbWl0IHZ1b3RvLCBvcHB1cmVcbiIKKyJsJ2VzZWN1emlvbmUgZGVsbCdob29rIGRpIHByZS1jb21taXQgbm9uIMOoIHJpdXNjaXRhLiBJbiBxdWVzdCd1bHRpbW8gY2FzbyxcbiIKKyJwb3RyZWJiZSBlc3NlcmUgbmVjZXNzYXJpbyByaXNvbHZlcmUgaWwgcHJvYmxlbWEgZXZpZGVuemlhdG8gcGVyIGVzc2VyZSBpblxuIgorImdyYWRvIGRpIG1vZGlmaWNhcmUgaWwgbWVzc2FnZ2lvIGRpIGNvbW1pdC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorbXNnc3RyICJGZXJtYXRvIGEgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlICckc3F1YXNoX3N0eWxlJyBzZW56YSB1biBjb21taXQgcHJlY2VkZW50ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiRXNlZ3VvICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAiRXNlY3V6aW9uZSBub24gcml1c2NpdGE6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImUgc29ubyBzdGF0ZSBhcHBvcnRhdGUgbW9kaWZpY2hlIGFsbCdpbmRpY2UgZS9vIGFsbCdhbGJlcm8gZGkgbGF2b3JvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Njk1Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIlB1b2kgY29ycmVnZ2VyZSBpbCBwcm9ibGVtYSBlIHF1aW5kaSBlc2VndWlyZVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0XG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIkVzZWN1emlvbmUgcml1c2NpdGE6ICRyZXN0XG4iCisibWEgc29ubyBzdGF0ZSBtYW50ZW51dGUgbW9kaWZpY2hlIGFsbCdpbmRpY2UgZS9vIGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisiRXNlZ3VpIGlsIGNvbW1pdCBvIGxvIHN0YXNoIGRlbGxlIG1vZGlmaWNoZSwgcXVpbmRpIGVzZWd1aVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICJDb21hbmRvIHNjb25vc2NpdXRvOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcyMAorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJDb3JyZWdnaSBsYSBzaXR1YXppb25lIHVzYW5kbyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCAkaGVhZF9uYW1lLiIKK21zZ3N0ciAiUmViYXNlIGUgYWdnaW9ybmFtZW50byBkaSAkaGVhZF9uYW1lIGVzZWd1aXRpIGNvbiBzdWNjZXNzby4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTIKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgImltcG9zc2liaWxlIHJpbXVvdmVyZSBDSEVSUllfUElDS19IRUFEIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiSGFpIG1vZGlmaWNoZSBpbiBzdGFnaW5nIG5lbGwnYWxiZXJvIGRpIGxhdm9yby5cbiIKKyJTZSBxdWVzdGUgbW9kaWZpY2hlIGRldm9ubyBlc3NlcmUgc290dG9wb3N0ZSBhIHNxdWFzaCBuZWwgY29tbWl0XG4iCisicHJlY2VkZW50ZSwgZXNlZ3VpOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiU2UgZGV2b25vIGVzc2VyZSBpbmNsdXNlIGluIHVuIG51b3ZvIGNvbW1pdCwgZXNlZ3VpOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGVudHJhbWJpIGkgY2FzaSwgdW5hIHZvbHRhIGZpbml0bywgY29udGludWEgY29uOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiIgorIkVycm9yZSBkdXJhbnRlIGxhIHJpY2VyY2EgZGVsbCdpZGVudGl0w6AgZGVsbCdhdXRvcmUgcGVyIGxhIG1vZGlmaWNhIGRlbCAiCisiY29tbWl0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJDaSBzb25vIG1vZGlmaWNoZSBkaSBjdWkgbm9uIMOoIHN0YXRvIGVzZWd1aXRvIGlsIGNvbW1pdCBuZWwgdHVvIGFsYmVyb1xuIgorImRpIGxhdm9yby4gRXNlZ3VpbmUgcHJpbWEgaWwgY29tbWl0IGUgcXVpbmRpIGVzZWd1aSBudW92YW1lbnRlICdnaXQgcmViYXNlXG4iCisiLS1jb250aW51ZScuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDgKK21zZ2lkICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgY29tbWl0IGRlbGxlIG1vZGlmaWNoZSBpbiBzdGFnaW5nLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTY1Cittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBsJ2VkaXRvciIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNoZWNrb3V0IGRpICRzd2l0Y2hfdG8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAiTmVzc3VuJ0hFQUQ/IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjcmVhcmUgbGEgZGlyZWN0b3J5IHRlbXBvcmFuZWEgJHN0YXRlX2RpciIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMQorbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb250cmFzc2VnbmFyZSBjb21lIGludGVyYXR0aXZvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJSZWJhc2UgZGkgJHNob3J0cmV2aXNpb25zIHN1ICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tYW5kbykiCittc2dzdHJbMV0gIlJlYmFzZSBkaSAkc2hvcnRyZXZpc2lvbnMgc3UgJHNob3J0b250byAoJHRvZG9jb3VudCBjb21hbmRpKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk5NyBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTAwMgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBpbml6aWFsaXp6YXJlIGkgY29tbWl0IHJpc2NyaXR0aSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgInVzbzogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIG1vZGlmaWNhcmUgbGEgZGlyZWN0b3J5IGNvcnJlbnRlIGluICRjZHVwLCBpbCBwcmltbyBsaXZlbGxvICIKKyJkZWxsJ2FsYmVybyBkaSBsYXZvcm8iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIiIKKyJlcnJvcmUgZmF0YWxlOiAkcHJvZ3JhbV9uYW1lIG5vbiBwdcOyIGVzc2VyZSB1c2F0byBzZW56YSB1biBhbGJlcm8gZGkgbGF2b3JvLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgcmViYXNlOiBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSBub24gaW4gc3RhZ2luZy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSByaXNjcml2ZXJlIGkgYnJhbmNoOiBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSBub24gaW4gc3RhZ2luZy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSB1biBwdWxsIHNlZ3VpdG8gZGEgdW4gcmViYXNlOiBjaSBzb25vIGRlbGxlIG1vZGlmaWNoZSAiCisibm9uIGluIHN0YWdpbmcuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlICRhY3Rpb246IGNpIHNvbm8gZGVsbGUgbW9kaWZpY2hlIG5vbiBpbiBzdGFnaW5nLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MworbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSB1biByZWJhc2U6OiBsJ2luZGljZSBjb250aWVuZSBtb2RpZmljaGUgZGkgY3VpIG5vbiDDqCAiCisic3RhdG8gZXNlZ3VpdG8gaWwgY29tbWl0LiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgdW4gcHVsbCBzZWd1aXRvIGRhIHVuIHJlYmFzZTogbCdpbmRpY2UgY29udGllbmUgIgorIm1vZGlmaWNoZSBkaSBjdWkgbm9uIMOoIHN0YXRvIGVzZWd1aXRvIGlsIGNvbW1pdC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgJGFjdGlvbjogbCdpbmRpY2UgY29udGllbmUgbW9kaWZpY2hlIGRpIGN1aSBub24gw6ggc3RhdG8gIgorImVzZWd1aXRvIGlsIGNvbW1pdC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJJbm9sdHJlLCBsJ2luZGljZSBjb250aWVuZSBtb2RpZmljaGUgZGkgY3VpIG5vbiDDqCBzdGF0byBlc2VndWl0byBpbCBjb21taXQuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiRGV2aSBlc2VndWlyZSBxdWVzdG8gY29tYW5kbyBkYWwgcHJpbW8gbGl2ZWxsbyBkZWxsJ2FsYmVybyBkaSBsYXZvcm8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGlsIHBlcmNvcnNvIGFzc29sdXRvIGRlbGxhIGRpcmVjdG9yeSBHaXQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMjBzICUzMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gImVzZWd1aXRvIHRvdWNoIHN1ICVkIHBlcmNvcnNvXG4iCittc2dzdHJbMV0gImVzZWd1aXRvIHRvdWNoIHN1ICVkIHBlcmNvcnNpXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJTZSBsYSBwYXRjaCB2aWVuZSBhcHBsaWNhdGEgc2VuemEgcHJvYmxlbWksIGwnaHVuayBtb2RpZmljYXRvIHNhcsOgXG4iCisiY29udHJhc3NlZ25hdG8gaW1tZWRpYXRhbWVudGUgcGVyIGwnYWdnaXVudGEgYWxsJ2FyZWEgZGkgc3RhZ2luZy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisiU2UgbGEgcGF0Y2ggdmllbmUgYXBwbGljYXRhIHNlbnphIHByb2JsZW1pLCBsJ2h1bmsgbW9kaWZpY2F0byBzYXLDoFxuIgorImNvbnRyYXNzZWduYXRvIGltbWVkaWF0YW1lbnRlIHBlciBsbyBzdGFzaC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNlIGxhIHBhdGNoIHZpZW5lIGFwcGxpY2F0YSBzZW56YSBwcm9ibGVtaSwgbCdodW5rIG1vZGlmaWNhdG8gc2Fyw6BcbiIKKyJjb250cmFzc2VnbmF0byBpbW1lZGlhdGFtZW50ZSBwZXIgbGEgcmltb3ppb25lIGRhbGwnYXJlYSBkaSBzdGFnaW5nLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3MQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc3Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBhcHBseWluZy4iCittc2dzdHIgIiIKKyJTZSBsYSBwYXRjaCB2aWVuZSBhcHBsaWNhdGEgc2VuemEgcHJvYmxlbWksIGwnaHVuayBtb2RpZmljYXRvIHNhcsOgXG4iCisiY29udHJhc3NlZ25hdG8gaW1tZWRpYXRhbWVudGUgcGVyIGwnYXBwbGljYXppb25lLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIlNlIGxhIHBhdGNoIHZpZW5lIGFwcGxpY2F0YSBzZW56YSBwcm9ibGVtaSwgbCdodW5rIG1vZGlmaWNhdG8gc2Fyw6BcbiIKKyJjb250cmFzc2VnbmF0byBpbW1lZGlhdGFtZW50ZSBwZXIgbGEgcmltb3ppb25lLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiYXBlcnR1cmEgZGVsIGZpbGUgZGkgbW9kaWZpY2EgaHVuayBpbiBzY3JpdHR1cmEgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiUGVyIHJpbXVvdmVyZSAnJXMnIHJpZ2hlLCByZW5kaWxlIHJpZ2hlICcgJyAoY29udGVzdG8pLlxuIgorIlBlciByaW11b3ZlcmUgJyVzJyByaWdoZSwgZWxpbWluYWxlLlxuIgorIkxlIHJpZ2hlIGNoZSBpbml6aWFubyBjb24gJXMgc2FyYW5ubyByaW1vc3NlLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExNDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICJhcGVydHVyYSBkZWwgZmlsZSBkaSBtb2RpZmljYSBodW5rIGluIGxldHR1cmEgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjQ4Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFnZ2l1bmdpIHF1ZXN0J2h1bmsgYWxsJ2FyZWEgZGkgc3RhZ2luZ1xuIgorIm4gLSBub24gYWdnaXVuZ2VyZSBxdWVzdCdodW5rIGFsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyJxIC0gZXNjaTsgbm9uIGFnZ2l1bmdlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGkgYWxsJ2FyZWEgZGkgIgorInN0YWdpbmdcbiIKKyJhIC0gYWdnaXVuZ2kgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIGFsbCdhcmVhIGRpICIKKyJzdGFnaW5nXG4iCisiZCAtIG5vbiBhZ2dpdW5nZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSBhbGwnYXJlYSBkaSAiCisic3RhZ2luZyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU0Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGVzZWd1aSBsbyBzdGFzaCBkaSBxdWVzdCdodW5rXG4iCisibiAtIG5vbiBlc2VndWlyZSBsbyBzdGFzaCBkaSBxdWVzdCdodW5rXG4iCisicSAtIGVzY2k7IG5vbiBlc2VndWlyZSBsbyBzdGFzaCBkaSBxdWVzdCdodW5rIG7DqSBkaSBxdWVsbGkgcmltYW5lbnRpXG4iCisiYSAtIGVzZWd1aSBsbyBzdGFzaCBkaSBxdWVzdCdodW5rIGUgZGkgdHV0dGkgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKKyJkIC0gbm9uIGVzZWd1aXJlIGxvIHN0YXNoIG7DqSBkaSBxdWVzdCdodW5rIG7DqSBkaSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSByaW11b3ZpIHF1ZXN0J2h1bmsgZGFsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyJuIC0gbm9uIHJpbXVvdmVyZSBxdWVzdCdodW5rIGRhbGwnYXJlYSBkaSBzdGFnaW5nXG4iCisicSAtIGVzY2k7IG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGkgZGFsbCdhcmVhIGRpICIKKyJzdGFnaW5nXG4iCisiYSAtIHJpbXVvdmkgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIGRhbGwnYXJlYSBkaSAiCisic3RhZ2luZ1xuIgorImQgLSBub24gcmltdW92ZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSBkYWxsJ2FyZWEgZGkgIgorInN0YWdpbmciCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgYWxsJ2luZGljZVxuIgorIm4gLSBub24gYXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2luZGljZVxuIgorInEgLSBlc2NpOyBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgcmltYW5lbnRpXG4iCisiYSAtIGFwcGxpY2EgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlXG4iCisiZCAtIG5vbiBhcHBsaWNhcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjkwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gcmltdW92aSBxdWVzdCdodW5rIGRhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorIm4gLSBub24gcmltdW92ZXJlIHF1ZXN0J2h1bmsgZGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisicSAtIGVzY2k7IG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSByaW1hbmVudGlcbiIKKyJhIC0gcmltdW92aSBxdWVzdCdodW5rIGUgdHV0dGkgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGVcbiIKKyJkIC0gbm9uIHJpbXVvdmVyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHN1Y2Nlc3NpdmkgbmVsIGZpbGUiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gcmltdW92aSBxdWVzdCdodW5rIGRhbGwnaW5kaWNlIGUgZGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisibiAtIG5vbiByaW11b3ZlcmUgcXVlc3QnaHVuayBkYWxsJ2luZGljZSBlIGRhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorInEgLSBlc2NpOyBub24gcmltdW92ZXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgcmltYW5lbnRpXG4iCisiYSAtIHJpbXVvdmkgcXVlc3QnaHVuayBlIHR1dHRpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlXG4iCisiZCAtIG5vbiByaW11b3ZlcmUgbsOpIHF1ZXN0J2h1bmsgbsOpIHF1ZWxsaSBzdWNjZXNzaXZpIG5lbCBmaWxlIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgYWxsJ2luZGljZSBlIGFsbCdhbGJlcm8gZGkgbGF2b3JvXG4iCisibiAtIG5vbiBhcHBsaWNhcmUgcXVlc3QnaHVuayBhbGwnaW5kaWNlIGUgYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJxIC0gZXNjaTsgbm9uIGFwcGxpY2FyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHJpbWFuZW50aVxuIgorImEgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgZSB0dXR0aSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZVxuIgorImQgLSBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjk2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwcGxpY2EgcXVlc3QnaHVuayBhbGwnYWxiZXJvIGRpIGxhdm9yb1xuIgorIm4gLSBub24gYXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2FsYmVybyBkaSBsYXZvcm9cbiIKKyJxIC0gZXNjaTsgbm9uIGFwcGxpY2FyZSBuw6kgcXVlc3QnaHVuayBuw6kgcXVlbGxpIHJpbWFuZW50aVxuIgorImEgLSBhcHBsaWNhIHF1ZXN0J2h1bmsgZSB0dXR0aSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZVxuIgorImQgLSBub24gYXBwbGljYXJlIG7DqSBxdWVzdCdodW5rIG7DqSBxdWVsbGkgc3VjY2Vzc2l2aSBuZWwgZmlsZSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzExCittc2dpZCAiIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiZyAtIHNlbGV6aW9uYSB1biBodW5rIGEgY3VpIGFuZGFyZVxuIgorIi8gLSBjZXJjYSB1biBodW5rIGNvcnJpc3BvbmRlbnRlIGFsbCdlc3ByZXNzaW9uZSByZWdvbGFyZSBkYXRhXG4iCisiaiAtIG5vbiBkZWNpZGVyZSBpbiBtZXJpdG8gYSBxdWVzdCdodW5rLCB2YWkgYWwgc3VjY2Vzc2l2byBodW5rIHBlciBjdWkgbm9uICIKKyLDqCBzdGF0YSBwcmVzYSB1bmEgZGVjaXNpb25lXG4iCisiSiAtIG5vbiBkZWNpZGVyZSBpbiBtZXJpdG8gYSBxdWVzdCdodW5rLCB2YWkgYWxsJ2h1bmsgc3VjY2Vzc2l2b1xuIgorImsgLSBub24gZGVjaWRlcmUgaW4gbWVyaXRvIGEgcXVlc3QnaHVuaywgdmFpIGFsIHByZWNlZGVudGUgaHVuayBwZXIgY3VpIG5vbiAiCisiw6ggc3RhdGEgcHJlc2EgdW5hIGRlY2lzaW9uZVxuIgorIksgLSBub24gZGVjaWRlcmUgaW4gbWVyaXRvIGEgcXVlc3QnaHVuaywgdmFpIGFsbCdodW5rIHByZWNlZGVudGVcbiIKKyJzIC0gc3VkZGl2aWRpIGwnaHVuayBjb3JyZW50ZSBpbiBodW5rIHBpw7kgcGljY29saVxuIgorImUgLSBtb2RpZmljYSBtYW51YWxtZW50ZSBsJ2h1bmsgY29ycmVudGVcbiIKKyI/IC0gc3RhbXBhIHVuYSBndWlkYVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDIKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIKK21zZ3N0ciAiR2xpIGh1bmsgc2VsZXppb25hdGkgbm9uIHNpIGFwcGxpY2FubyBzZW56YSBwcm9ibGVtaSBhbGwnaW5kaWNlIVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDMKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAiVnVvaSBjb211bnF1ZSBhcHBsaWNhcmxpIGFsbCdhbGJlcm8gZGkgbGF2b3JvPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0NgorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBhcHBsaWNhdG8gbnVsbGEuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAiaWdub3JvIGNpw7IgY2hlIG5vbiDDqCBzdGF0byBzb3R0b3Bvc3RvIGEgbWVyZ2U6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTW9kaWZpY2EgbW9kbyBzdGFnZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJFbGltaW5hemlvbmUgc3RhZ2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkVzZWd1aXJlIGxvIHN0YWdlIGRpIHF1ZXN0J2h1bmsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTW9kaWZpY2EgbW9kbyBzdGFzaCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJFbGltaW5hemlvbmUgc3Rhc2ggW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkVzZWd1aXJlIGxvIHN0YXNoIGRpIHF1ZXN0J2h1bmsgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJSaW1vemlvbmUgbW9kaWZpY2EgbW9kbyBkYWxsJ2FyZWEgZGkgc3RhZ2luZyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlJpbW96aW9uZSBlbGltaW5hemlvbmUgZGFsbCdhcmVhIGRpIHN0YWdpbmcgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiUmltdW92ZXJlIHF1ZXN0J2h1bmsgZGFsbCdhcmVhIGRpIHN0YWdpbmcgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljYXJlIGxhIG1vZGlmaWNhIG1vZG8gYWxsJ2luZGljZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNhcmUgbCdlbGltaW5hemlvbmUgYWxsJ2luZGljZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljYXJlIHF1ZXN0J2h1bmsgYWxsJ2luZGljZSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlNjYXJ0YXJlIGxlIG1vZGlmaWNoZSBtb2RvIGRhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlNjYXJ0YXJlIGwnZWxpbWluYXppb25lIGRhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTY2FydGFyZSBxdWVzdCdodW5rIGRhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJTY2FydGFyZSBsYSBtb2RpZmljYSBtb2RvIGRhbGwnaW5kaWNlIGUgZGFsbCdhbGJlcm8gZGkgbGF2b3JvIFt5LG4scSxhLGQiCisiJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJTY2FydGFyZSBsJ2VsaW1pbmF6aW9uZSBkYWxsJ2luZGljZSBlIGRhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICIiCisiU2NhcnRhcmUgcXVlc3QnaHVuayBkYWxsJ2luZGljZSBlIGRhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwcGxpY2FyZSBsYSBtb2RpZmljYSBtb2RvIGFsbCdpbmRpY2UgZSBhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkIgorIiVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIiIKKyJBcHBsaWNhcmUgbCdlbGltaW5hemlvbmUgYWxsJ2luZGljZSBlIGFsbCdhbGJlcm8gZGkgbGF2b3JvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwcGxpY2FyZSBxdWVzdCdodW5rIGFsbCdpbmRpY2UgZSBhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNhcmUgbGEgbW9kaWZpY2EgbW9kbyBhbGwnYWxiZXJvIGRpIGxhdm9ybyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNhcmUgbCdlbGltaW5hemlvbmUgYWxsJ2FsYmVybyBkaSBsYXZvcm8gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2FyZSBxdWVzdCdodW5rIGFsbCdhbGJlcm8gZGkgbGF2b3JvIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzAKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iCittc2dzdHIgIk5lc3N1biBhbHRybyBodW5rIGEgY3VpIGFuZGFyZVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcydcbiIKK21zZ3N0ciAiTnVtZXJvIG5vbiB2YWxpZG86ICclcydcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIk1pIGRpc3BpYWNlLCDDqCBkaXNwb25pYmlsZSBzb2xvICVkIGh1bmsuXG4iCittc2dzdHJbMV0gIk1pIGRpc3BpYWNlLCBzb25vIGRpc3BvbmliaWxpIHNvbG8gJWQgaHVuay5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgIk5lc3N1biBhbHRybyBodW5rIGluIGN1aSByaWNlcmNhcmVcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICJFc3ByZXNzaW9uZSByZWdvbGFyZSBkaSByaWNlcmNhICVzIG1hbGZvcm1hdGE6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY0NgorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICJOZXNzdW4gaHVuayBjb3JyaXNwb25kZSBhbCBwYXR0ZXJuIGZvcm5pdG9cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjU4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4MAorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmtcbiIKK21zZ3N0ciAiTmVzc3VuIGh1bmsgcHJlY2VkZW50ZVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjg2Cittc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dzdHIgIk5lc3N1biBodW5rIHN1Y2Nlc3Npdm9cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjkyCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiTWkgZGlzcGlhY2UsIG5vbiBwb3NzbyBzdWRkaXZpZGVyZSBxdWVzdCdodW5rXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCittc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dzdHJbMF0gIlN1ZGRpdmlzbyBpbiAlZCBodW5rLlxuIgorbXNnc3RyWzFdICJTdWRkaXZpc28gaW4gJWQgaHVuay5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJNaSBkaXNwaWFjZSwgbm9uIHBvc3NvIG1vZGlmaWNhcmUgcXVlc3QnaHVua1xuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc3MworbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mICIKKyJjaGFuZ2VzXG4iCittc2dzdHIgIiIKKyJzdGF0dXMgICAgICAgIC0gdmlzdWFsaXp6YSBpIHBlcmNvcnNpIGNvbiBtb2RpZmljaGVcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWdnaXVuZ2UgbG8gc3RhdG8gZGVsbCdhbGJlcm8gZGkgbGF2b3JvIGFsbCdpbnNpZW1lIGRlbGxlXG4iCisiICAgICAgICAgICAgICAgIG1vZGlmaWNoZSBuZWxsJ2FyZWEgZGkgc3RhZ2luZ1xuIgorInJldmVydCAgICAgICAgLSByaXByaXN0aW5hIGwnaW5zaWVtZSBkZWxsZSBtb2RpZmljaGUgbmVsbCdhcmVhIGRpIHN0YWdpbmdcbiIKKyIgICAgICAgICAgICAgICAgYWxsYSB2ZXJzaW9uZSBIRUFEXG4iCisicGF0Y2ggICAgICAgICAtIHNlbGV6aW9uYSBlIGFnZ2lvcm5hIGdsaSBodW5rIGluIG1vZG8gc2VsZXR0aXZvXG4iCisiZGlmZiAgICAgICAgICAtIHZpc3VhbGl6emEgbGUgZGlmZmVyZW56ZSBmcmEgSEVBRCBlIGwnaW5kaWNlXG4iCisiYWRkIHVudHJhY2tlZCAtIGFnZ2l1bmdlIGkgY29udGVudXRpIGRlaSBmaWxlIG5vbiB0cmFjY2lhdGkgYWxsJ2luc2llbWUgZGlcbiIKKyIgICAgICAgICAgICAgICAgbW9kaWZpY2hlIG5lbGwnYXJlYSBkaSBzdGFnaW5nXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjUKK21zZ2lkICJtaXNzaW5nIC0tIgorbXNnc3RyICItLSBtYW5jYW50ZSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODIxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVua25vd24gLS1wYXRjaCBtb2RlOiAlcyIKK21zZ3N0ciAibW9kYWxpdMOgIC0tcGF0Y2ggc2Nvbm9zY2l1dGE6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAiYXJnb21lbnRvICVzIG5vbiB2YWxpZG8sIGF0dGVzbyAtLSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgIiIKKyJpbCBmdXNvIG9yYXJpbyBsb2NhbGUgZGlmZmVyaXNjZSBkYSBHTVQgZGkgdW4gaW50ZXJ2YWxsbyBub24gbXVsdGlwbG8gZGkgdW4gIgorIm1pbnV0b1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MQorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICJsJ29mZnNldCBkZWwgZnVzbyBvcmFyaW8gbG9jYWxlIMOoIG1hZ2dpb3JlIG8gdWd1YWxlIGEgMjQgb3JlXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICJsJ2VkaXRvciBub24gw6ggdGVybWluYXRvIHJlZ29sYXJtZW50ZSwgaW50ZXJyb21wbyB0dXR0ZSBsZSBvcGVyYXppb25pIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIgorbXNnc3RyICIiCisiJyVzJyBjb250aWVuZSB1bmEgdmVyc2lvbmUgaW50ZXJtZWRpYSBkZWxsJ2UtbWFpbCBjaGUgc3RhdmkgY29tcG9uZW5kby5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIiclcy5maW5hbCcgY29udGllbmUgbCdlLW1haWwgY29tcG9zdGEuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDA4Cittc2dpZCAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIgorbXNnc3RyICItLWR1bXAtYWxpYXNlcyBub24gw6ggY29tcGF0aWJpbGUgY29uIGFsdHJlIG9wemlvbmlcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODEgZ2l0LXNlbmQtZW1haWwucGVybDo2ODMKK21zZ2lkICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBnaXQgZm9ybWF0LXBhdGNoIGFsIGRpIGZ1b3JpIGRpIHVuIHJlcG9zaXRvcnlcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisiYGJhdGNoLXNpemVgIGUgYHJlbG9naW5gIGRldm9ubyBlc3NlcmUgc3BlY2lmaWNhdGkgaW5zaWVtZSAoc3VsbGEgcmlnYSBkaSAiCisiY29tYW5kbyBvIHRyYW1pdGUgdW4nb3B6aW9uZSBkaSBjb25maWd1cmF6aW9uZSlcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0OTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIkNhbXBvIC0tc3VwcHJlc3MtY2Mgc2Nvbm9zY2l1dG86ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgLS1jb25maXJtIHNjb25vc2NpdXRhOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgImF0dGVuemlvbmU6IG5vbiBzb25vIHN1cHBvcnRhdGkgYWxpYXMgc2VuZG1haWwgY29uIHZpcmdvbGV0dGU6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgImF0dGVuemlvbmU6IGA6aW5jbHVkZTpgIG5vbiBzdXBwb3J0YXRvOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXR0ZW56aW9uZTogcmVkaXJlemlvbmkgYC9maWxlYCBvIGB8cGlwZWAgbm9uIHN1cHBvcnRhdGU6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgImF0dGVuemlvbmU6IHJpZ2Egc2VuZG1haWwgbm9uIHJpY29ub3NjaXV0YTogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisiSWwgZmlsZSAnJXMnIGVzaXN0ZSBtYSB0YWxlIHN0cmluZ2EgcG90cmViYmUgY29ycmlzcG9uZGVyZVxuIgorImFuY2hlIGFsbCdpbnRlcnZhbGxvIGRpIGNvbW1pdCBwZXIgY3VpIGdlbmVyYXJlIGRlbGxlIHBhdGNoLlxuIgorIlNwZWNpZmljYSBxdWFsIMOoIGlsIGNhc28gY29ycmV0dG8uLi5cbiIKKyJcbiIKKyIgICAgKiAuLi51c2FuZG8gXCIuLyVzXCIgc2UgaW50ZW5kaSByaWZlcmlydGkgYWwgZmlsZSwgby4uLlxuIgorIiAgICAqIC4uLmZvcm5lbmRvIGwnb3B6aW9uZSAtLWZvcm1hdC1wYXRjaCBzZSB0aSByaWZlcmlzY2lcbiIKKyIgICAgICBhIHVuIGludGVydmFsbG8uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAib3BlbmRpciBkaSAlcyBub24gcml1c2NpdGE6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyJlcnJvcmUgZmF0YWxlOiAlczogJXNcbiIKKyJhdHRlbnppb25lOiBub24gw6ggc3RhdGEgaW52aWF0YSBhbGN1bmEgcGF0Y2hcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MDUKK21zZ2lkICIiCisiXG4iCisiTm8gcGF0Y2ggZmlsZXMgc3BlY2lmaWVkIVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTmVzc3VuIGZpbGUgcGF0Y2ggc3BlY2lmaWNhdG8hXG4iCisiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk5vIHN1YmplY3QgbGluZSBpbiAlcz8iCittc2dzdHIgIlJpZ2Egb2dnZXR0byBhc3NlbnRlIGluICVzPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICJBcGVydHVyYSBkaSAlcyBpbiBzY3JpdHR1cmEgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyJMZSByaWdoZSBjaGUgaW5pemlhbm8gY29uIFwiR0lUOlwiIHNhcmFubm8gcmltb3NzZS5cbiIKKyJWYWx1dGEgZGkgaW5jbHVkZXJlIHVuIGRpZmZzdGF0IGdsb2JhbGUgbyB1biBzb21tYXJpbyBwZXJcbiIKKyJsYSBwYXRjaCBjaGUgc3RhaSBzY3JpdmVuZG8uXG4iCisiXG4iCisiUmltdW92aSBpbCBjb3JwbyBzZSBub24gdnVvaSBpbnZpYXJlIHVuIHNvbW1hcmlvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlczogJXMiCittc2dzdHIgIkFwZXJ0dXJhIGRpICVzIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAiQXBlcnR1cmEgZGkgJXMuZmluYWwgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MjMKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICJFLW1haWwgcmlhc3N1bnRpdmEgdnVvdGEsIGxhIG9tZXR0b1xuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAiVXNhcmUgPCVzPiBbeS9OXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxMworbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorIkkgc2VndWVudGkgZmlsZSBzb25vIGNvZGlmaWNhdGkgYSA4IGJpdCBtYSBub24gZGljaGlhcmFubyB1biBDb250ZW50LSIKKyJUcmFuc2Zlci1FbmNvZGluZy5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTgKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICJDaGUgY29kaWZpY2EgYSA4IGJpdCBkZXZvIGRpY2hpYXJhcmUgW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIk1pIHJpZml1dG8gZGkgZXNlZ3VpcmUgbCdpbnZpbyBwZXJjaMOpIGxhIHBhdGNoXG4iCisiXHQlc1xuIgorImhhIGNvbWUgb2dnZXR0byBuZWwgbW9kZWxsbyAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBGb3JuaXNjaSBsJ29wemlvbmUgLS0iCisiZm9yY2Ugc2UgdnVvaSB2ZXJhbWVudGUgcHJvY2VkZXJlIGNvbiBsJ2ludmlvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk0NQorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgIiIKKyJBIGNoaSBkb3ZyYW5ubyBlc3NlcmUgaW52aWF0ZSBsZSBlLW1haWwgKHNlIGRldm9ubyBlc3NlcmUgaW52aWF0ZSBhICIKKyJxdWFsY3Vubyk/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICJlcnJvcmUgZmF0YWxlOiBsJ2FsaWFzICclcycgc2kgZXNwYW5kZSBpbiBzZSBzdGVzc29cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NzUKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICIiCisiTWVzc2FnZS1JRCBkYSB1c2FyZSBuZWxsJ2ludGVzdGF6aW9uZSBJbi1SZXBseS1UbyBwZXIgbGEgcHJpbWEgZS1tYWlsIChzZSAiCisiZGV2J2Vzc2VyZSB1c2F0byk/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDMzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgImVycm9yZTogaW1wb3NzaWJpbGUgZXN0cmFycmUgdW4gaW5kaXJpenpvIHZhbGlkbyBkYSAlc1xuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTA0NQorbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAiIgorIkNvc2EgZGV2byBmYXJlIGNvbiBxdWVzdCdpbmRpcml6em8/IChFc2NpIFtxXXxzY2FydGEgW2RdfG1vZGlmaWNhIFtlXSk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzYyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJJbCBwZXJjb3JzbyBDQSBcIiVzXCIgbm9uIGVzaXN0ZSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ1Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAgICBMJ2VsZW5jbyBDYyBkaSBjdWkgc29wcmEgw6ggc3RhdG8gZXNwYW5zbyBhZ2dpdW5nZW5kb1xuIgorIiAgICBpbmRpcml6emkgYWdnaXVudGl2aSB0cm92YXRpIG5lbCBtZXNzYWdnaW8gZGkgY29tbWl0IGRlbGxhXG4iCisiICAgIHBhdGNoLiBQZXIgaW1wb3N0YXppb25lIHByZWRlZmluaXRhIHNlbmQtZW1haWwgcmljaGllZGVcbiIKKyIgICAgY29tZSBwcm9jZWRlcmUgcHJpbWEgZGVsbCdpbnZpbyBvZ25pcXVhbHZvbHRhIHNpIHZlcmlmaWNoaVxuIgorIiAgICB0YWxlIGV2ZW5pZW56YS4gUXVlc3RvIGNvbXBvcnRhbWVudG8gw6ggY29udHJvbGxhdG9cbiIKKyIgICAgZGFsbCdpbXBvc3RhemlvbmUgZGkgY29uZmlndXJhemlvbmUgc2VuZGVtYWlsLmNvbmZpcm0uXG4iCisiXG4iCisiICAgIFBlciB1bHRlcmlvcmkgaW5mb3JtYXppb25pLCBlc2VndWkgJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFBlciBtYW50ZW5lcmUgaWwgY29tcG9ydGFtZW50byBjb3JyZW50ZSwgbWEgbm9uXG4iCisiICAgIHZpc3VhbGl6emFyZSBwacO5IHF1ZXN0byBtZXNzYWdnaW8sIGVzZWd1aSAnZ2l0IGNvbmZpZ1xuIgorIiAgICAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSBbbl0gW2VdIFtxXSBbYV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MAorbXNnaWQgIlNlbmQgdGhpcyBlbWFpbD8gKFt5XWVzfFtuXW98W2VdZGl0fFtxXXVpdHxbYV1sbCk6ICIKK21zZ3N0ciAiIgorIkludmlhcmUgcXVlc3QnZS1tYWlsPyAoU8OsIFt5XXxbbl1vfG1vZGlmaWNhIFtlXXxlc2NpIFtxXXxpbnZpYSB0dXR0ZSBbYV0pOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ2MworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAiw4ggcmljaGllc3RhIHVuYSByaXNwb3N0YSBhbGxhIHJpY2hpZXN0YSBkaSBpbnZpbyBlLW1haWwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ5MQorbXNnaWQgIlRoZSByZXF1aXJlZCBTTVRQIHNlcnZlciBpcyBub3QgcHJvcGVybHkgZGVmaW5lZC4iCittc2dzdHIgIklsIHNlcnZlciBTTVRQIHJpY2hpZXN0byBub24gw6ggZGVmaW5pdG8gaW4gbW9kbyBhZGVndWF0by4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIklsIHNlcnZlciBub24gc3VwcG9ydGEgU1RBUlRUTFMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NDMgZ2l0LXNlbmQtZW1haWwucGVybDoxNTQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNUQVJUVExTIGZhaWxlZCEgJXMiCittc2dzdHIgIlNUQVJUVExTIG5vbiByaXVzY2l0byEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1NgorbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBpbml6aWFsaXp6YXJlIFNNVFAgaW4gbW9kbyBhZGVndWF0by4gQ29udHJvbGxhIGxhIGNvbmZpZ3VyYXppb25lICIKKyJlIHVzYSAtLXNtdHAtZGVidWcuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHNlbmQgJXNcbiIKK21zZ3N0ciAiSW52aW8gZGkgJXMgbm9uIHJpdXNjaXRvXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICJUZXN0IGludmlvICVzIHJpdXNjaXRvXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZW50ICVzXG4iCittc2dzdHIgIiVzIGludmlhdG9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc5Cittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiRXNlY3V6aW9uZSBkaSBwcm92YSByaXVzY2l0YS4gSWwgcmVnaXN0cm8gw6ggaWwgc2VndWVudGU6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT3BlcmF6aW9uZSByaXVzY2l0YS4gSWwgcmVnaXN0cm8gw6ggaWwgc2VndWVudGU6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5MQorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICJSaXN1bHRhdG86ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTk0Cittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICJSaXN1bHRhdG86IE9LXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIGZpbGUgJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NTkgZ2l0LXNlbmQtZW1haWwucGVybDoxNjc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSBBZ2dpdW5nbyBjYzogJXMgZGFsbGEgcmlnYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgQWdnaXVuZ28gdG86ICVzIGRhbGxhIHJpZ2EgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG5vbi1tYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihub24gbWJveCkgQWdnaXVuZ28gY2M6ICVzIGRhbGxhIHJpZ2EgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKGNvcnBvKSBBZ2dpdW5nbyBjYzogJXMgZGFsbGEgcmlnYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykgSW1wb3NzaWJpbGUgZXNlZ3VpcmUgJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgQWdnaXVuZ28gJXM6ICVzIGRhOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykgY2hpdXN1cmEgZGVsbGEgcGlwZSBhICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MDUKK21zZ2lkICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiCittc2dzdHIgImltcG9zc2liaWxlIGludmlhcmUgaWwgbWVzc2FnZ2lvIGNvbiBjb2RpZmljYSBhIDcgYml0IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MTMKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICJjb2RpZmljYSBkaSB0cmFzZmVyaW1lbnRvIG5vbiB2YWxpZGEiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NCBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMDYgZ2l0LXNlbmQtZW1haWwucGVybDoyMDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJXM6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlczogbGEgcGF0Y2ggY29udGllbmUgdW5hIHJpZ2EgcGnDuSBsdW5nYSBkaSA5OTggY2FyYXR0ZXJpIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIlNhbHRvICVzIGNvbiBpbCBzdWZmaXNzbyBkaSBiYWNrdXAgJyVzJy5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgIkludmlhcmUgJXM/IFt5fE5dOiAiCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAidW5hYmxlIHRvIGdldCB0cmVlIGZvciAlcyIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJpbGUgcmVjdXBlcmFyZSBsJ2FsYmVybyBwZXIgJXMiCisKKyN+IG1zZ2lkICJVc2UgYW4gZXhwZXJpbWVudGFsIGhldXJpc3RpYyB0byBpbXByb3ZlIGRpZmZzIgorI34gbXNnc3RyICJVc2EgdW4nZXVyaXN0aWNhIHNwZXJpbWVudGFsZSBwZXIgbWlnbGlvcmFyZSBpIGRpZmYiCisKKyN+IG1zZ2lkICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorI34gbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPGRpcmVjdG9yeSBvZ2dldHRpPl0iCisKKyN+IG1zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxkaXJlY3Rvcnkgb2dnZXR0aT5dIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInVua25vd24gY29yZS51bnRyYWNrZWRDYWNoZSB2YWx1ZSAnJXMnOyB1c2luZyAna2VlcCcgZGVmYXVsdCB2YWx1ZSIKKyN+IG1zZ3N0ciAiIgorI34gInZhbG9yZSBjb3JlLnVudHJhY2tlZENhY2hlICclcycgbm9uIHZhbGlkbzsgdXRpbGl6emVyw7IgaWwgdmFsb3JlICIKKyN+ICJwcmVkZWZpbml0byAna2VlcCciCisKKyN+IG1zZ2lkICJjYW5ub3QgY2hhbmdlIHBhcnRpYWwgY2xvbmUgcHJvbWlzb3IgcmVtb3RlIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBtb2RpZmljYXJlIGlsIHJlbW90byBwcm9tZXR0ZW50ZSBkZWwgY2xvbmUgcGFyemlhbGUiCisKKyN+IG1zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKKyN+IG1zZ3N0ciAiZXJyb3JlIGR1cmFudGUgbGEgY29zdHJ1emlvbmUgZGVnbGkgYWxiZXJpIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQgJyVzJyBpbiAnJXMnIgorI34gbXNnc3RyICJmb3JtYXRvIGRhdGEgJyVzJyBub24gdmFsaWRvIGluICclcyciCisKKyN+IG1zZ2lkICJ3cml0aW5nIHJvb3QgY29tbWl0IgorI34gbXNnc3RyICJzY3JpdHR1cmEgY29tbWl0IHJhZGljZSBpbiBjb3JzbyIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzIG1heSBiZSBsb3N0OiAlcyIKKyN+IG1zZ3N0ciAiIgorI34gImxlIG1vZGlmaWNoZSBpbiBzdGFnZSBuZWkgc2VndWVudGkgZmlsZSBwb3RyZWJiZXJvIGFuZGFyZSBwZXJkdXRlOiAlcyIKKworI34gbXNnaWQgIiIKKyN+ICItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorI34gInBhcnRpYWxDbG9uZSIKKyN+IG1zZ3N0ciAiIgorI34gIi0tZmlsdGVyIHB1w7IgZXNzZXJlIHVzYXRvIHNvbG8gY29uIGlsIHJlbW90byBjb25maWd1cmF0byBuZWxsZSBlc3RlbnNpb25pLiIKKyN+ICJwYXJ0aWFsQ2xvbmUiCisKKyN+IG1zZ2lkICJ2ZXJpZnkgY29tbWl0LW1zZyBob29rIgorI34gbXNnc3RyICJ2ZXJpZmljYSBob29rIGNvbW1pdC1tc2ciCisKKyN+IG1zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5LW9wdGlvbiciCisjfiBtc2dzdHIgImltcG9zc2liaWxlIGNvbWJpbmFyZSAnLS1yZWJhc2UtbWVyZ2VzJyBjb24gJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKworIywgYy1mb3JtYXQKKyN+IG1zZ2lkICJpbnZhbGlkIHNwYXJzZSB2YWx1ZSAnJXMnIgorI34gbXNnc3RyICJ2YWxvcmUgc3BhcnNlIG5vbiB2YWxpZG86ICclcyciCisKKyN+IG1zZ2lkICIiCisjfiAiRmV0Y2ggbm9ybWFsbHkgaW5kaWNhdGVzIHdoaWNoIGJyYW5jaGVzIGhhZCBhIGZvcmNlZCB1cGRhdGUsIGJ1dCB0aGF0ICIKKyN+ICJjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJJbCBmZXRjaCBub3JtYWxtZW50ZSBpbmRpY2EgcXVhbGkgYnJhbmNoIHNpYW5vIHN0YXRpIHNvdHRvcG9zdGkgYWQgIgorI34gImFnZ2lvcm5hbWVudG8gZm9yemF0bywgbWEgdGFsZSBjb250cm9sbG8gw6ggc3RhdG8gZGlzYWJpbGl0YXRvLiIKKworI34gbXNnaWQgIiIKKyN+ICJvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgZmFsc2UnIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJvIGVzZWd1aXJlICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlJyBwZXIgb21ldHRlcmUgIgorI34gInF1ZXN0b1xuIgorI34gImNvbnRyb2xsby5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJsb2cubWFpbG1hcCBpcyBub3Qgc2V0OyBpdHMgaW1wbGljaXQgdmFsdWUgd2lsbCBjaGFuZ2UgaW4gYW5cbiIKKyN+ICJ1cGNvbWluZyByZWxlYXNlLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgcHJlc2VydmUgY3VycmVudFxuIgorI34gImJlaGF2aW91ciwgc2V0IHRoZSBsb2cubWFpbG1hcCBjb25maWd1cmF0aW9uIHZhbHVlIHRvIGZhbHNlLlxuIgorI34gIlxuIgorI34gIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBhZG9wdCB0aGUgbmV3IGJlaGF2aW91ciBub3csIHNldCB0aGVcbiIKKyN+ICJsb2cubWFpbG1hcCBjb25maWd1cmF0aW9uIHZhbHVlIHRvIHRydWUuXG4iCisjfiAiXG4iCisjfiAiU2VlICdnaXQgaGVscCBjb25maWcnIGFuZCBzZWFyY2ggZm9yICdsb2cubWFpbG1hcCcgZm9yIGZ1cnRoZXIgIgorI34gImluZm9ybWF0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gImxvZy5tYWlsbWFwIG5vbiDDqCBpbXBvc3RhdG87IGlsIHN1byB2YWxvcmUgaW1wbGljaXRvIHNhcsOgIG1vZGlmaWNhdG9cbiIKKyN+ICJpbiB1bmEgcHJvc3NpbWEgdmVyc2lvbmUuIFBlciBlbGltaW5hcmUgcXVlc3RvIG1lc3NhZ2dpbyBlIG1hbnRlbmVyZVxuIgorI34gImlsIGNvbXBvcnRhbWVudG8gYXR0dWFsZSwgaW1wb3N0YSBpbCB2YWxvcmUgZGkgY29uZmlndXJhemlvbmVcbiIKKyN+ICJsb2cubWFpbG1hcCBhIGZhbHNlLlxuIgorI34gIlxuIgorI34gIlBlciBlbGltaW5hcmUgcXVlc3RvIG1lc3NhZ2dpbyBlIGFkb3R0YXJlIGlsIG51b3ZvIGNvbXBvcnRhbWVudG8gb3JhLFxuIgorI34gImltcG9zdGEgaWwgdmFsb3JlIGRpIGNvbmZpZ3VyYXppb25lIGxvZy5tYWlsbWFwIGEgdHJ1ZS5cbiIKKyN+ICJcbiIKKyN+ICJWZWRpICdnaXQgaGVscCBjb25maWcnIGUgY2VyY2EgJ2xvZy5tYWlsbWFwJyBwZXIgdWx0ZXJpb3JpIGluZm9ybWF6aW9uaS4iCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrX2RldGFpbGVkIgorI34gbXNnc3RyICJJbCBzZXJ2ZXIgc3VwcG9ydGEgbXVsdGlfYWNrX2RldGFpbGVzIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG5vLWRvbmUiCisjfiBtc2dzdHIgIklsIHNlcnZlciBzdXBwb3J0YSBuby1kb25lIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2FjayIKKyN+IG1zZ3N0ciAiSWwgc2VydmVyIHN1cHBvcnRhIG11bHRpX2FjayIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQtNjRrIgorI34gbXNnc3RyICJJbCBzZXJ2ZXIgc3VwcG9ydGEgc2lkZS1iYW5kLTY0ayIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQiCisjfiBtc2dzdHIgIklsIHNlcnZlciBzdXBwb3J0YSBzaWRlLWJhbmQiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKKyN+IG1zZ3N0ciAiSWwgc2VydmVyIHN1cHBvcnRhIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIKKyN+IG1zZ3N0ciAiSWwgc2VydmVyIHN1cHBvcnRhIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgb2ZzLWRlbHRhIgorI34gbXNnc3RyICJJbCBzZXJ2ZXIgc3VwcG9ydGEgb2ZzLWRlbHRhIgorCisjfiBtc2dpZCAiKEhFQUQgZGV0YWNoZWQgYXQgJXMpIgorI34gbXNnc3RyICIoSEVBRCBzY29sbGVnYXRvIHN1ICVzKSIKKworI34gbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorI34gbXNnc3RyICIoSEVBRCBzY29sbGVnYXRvIGRhICVzKSIKKworI34gbXNnaWQgIkNoZWNraW5nIG91dCBmaWxlcyIKKyN+IG1zZ3N0ciAiQ2hlY2tvdXQgZGVpIGZpbGUgaW4gY29yc28iCisKKyN+IG1zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCisjfiBtc2dzdHIgIiIKKyN+ICJpbXBvc3NpYmlsZSBlc2VndWlyZSBsJ2F0dGl2aXTDoCBpbiBtb2RhbGl0w6AgaW50ZXJhdHRpdmEgY29uIGxvIHN0YW5kYXJkICIKKyN+ICJpbnB1dCBub24gY29sbGVnYXRvIGEgdW4gdGVybWluYWxlLiIKKworI34gbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCisjfiBtc2dzdHIgInN0YXQgZGkgJXMgbm9uIHJpdXNjaXRvXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorI34gIlxuIgorI34gIiAgICBnaXQgcmVzZXRcbiIKKyN+ICJcbiIKKyN+ICJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorI34gInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlNlIHZ1b2kgaWdub3JhcmUgcXVlc3RvIGNvbW1pdCwgdXNhOlxuIgorI34gIlxuIgorI34gIiAgICBnaXQgcmVzZXRcbiIKKyN+ICJcbiIKKyN+ICJRdWluZGkgaWwgY29tYW5kbyBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgZmFyw6AgcmlwcmVuZGVyZVxuIgorI34gImlsIGNoZXJyeSBwaWNraW5nIHBlciBpIGNvbW1pdCByaW1hbmVudGkuXG4iCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgdmVyYjogJXMiCisjfiBtc2dzdHIgInZlcmJvIG5vbiByaWNvbm9zY2l1dG86ICVzIgorCisjfiBtc2dpZCAiaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCisjfiBtc2dzdHIgImxhIHZlcnNpb25lIGRlbGwnaGFzaCAlWCBub24gY29ycmlzcG9uZGUgYWxsYSB2ZXJzaW9uZSAlWCIKKworI34gbXNnaWQgIm9wdGlvbiAnJXMnIHJlcXVpcmVzIGEgdmFsdWUiCisjfiBtc2dzdHIgImwnb3B6aW9uZSAnJXMnIHJpY2hpZWRlIHVuIHZhbG9yZSIKKworI34gbXNnaWQgImNvdWxkIG5vdCB0cmFuc2Zvcm0gdGhlIHRvZG8gbGlzdCIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJpbGUgdHJhc2Zvcm1hcmUgbCdlbGVuY28gdG9kbyIKKworI34gbXNnaWQgImRlZmF1bHQiCisjfiBtc2dzdHIgImltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCisjfiBtc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgY3JlYXJlIGxhIGRpcmVjdG9yeSAnJXMnIgorCisjLCBmdXp6eQorI34gbXNnaWQgImNvdWxkIG5vdCBvcGVuICVzIgorI34gbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJyVzJyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJDb3VsZCBub3QgbW92ZSBiYWNrIHRvICRoZWFkX25hbWUiCisjfiBtc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmltdW92ZXJlIGlsIGJyYW5jaCAlcyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tc2lnbm9mZicgd2l0aCAnLS1wcmVzZXJ2ZS1tZXJnZXMnIgorI34gbXNnc3RyICJJbXBvc3NpYmlsZSBjb21iaW5hcmUgLS1uby1mZiBjb24gLS1mZi1vbmx5LiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorI34gbXNnc3RyICJJbXBvc3NpYmlsZSBjb21iaW5hcmUgLS1uby1mZiBjb24gLS1mZi1vbmx5LiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneS1vcHRpb24nIgorI34gbXNnc3RyICJJbXBvc3NpYmlsZSBjb21iaW5hcmUgLS1uby1mZiBjb24gLS1mZi1vbmx5LiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneSciCisjfiBtc2dzdHIgIkltcG9zc2liaWxlIGNvbWJpbmFyZSAtLW5vLWZmIGNvbiAtLWZmLW9ubHkuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorI34gbXNnc3RyICInJXMnIG5vbiBwdW50YSBhZCB1biBjb21taXQiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiQ2hhbmdlcyB0byAkb250bzoiCisjfiBtc2dzdHIgIk1vZGlmaWNoZSBkaSBjdWkgdmVycsOgIGVzZWd1aXRvIGlsIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJpZ25vcmluZyB1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJyIKKyN+IG1zZ3N0ciAibW9kYWxpdMOgIGNvbG9yLW1vdmVkLXdzIHNjb25vc2NpdXRhICclcycgaWdub3JhdGEiCisKKyN+IG1zZ2lkICJvbmx5ICd0cmVlOjAnIGlzIHN1cHBvcnRlZCIKKyN+IG1zZ3N0ciAiw6ggc3VwcG9ydGF0byBzb2xvICd0cmVlOjAnIgorCisjfiBtc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCisjfiBtc2dzdHIgIlJpZGVub21pbm8gJXMgaW4gJXMgZSAlcyBpbiAlcyIKKworI34gbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCisjfiBtc2dzdHIgIkFnZ2l1bnRhIGVsZW1lbnRvIHNvdHRvcG9zdG8gYSBtZXJnZSAlcyIKKworI34gbXNnaWQgIkludGVybmFsIGVycm9yIgorI34gbXNnc3RyICJFcnJvcmUgaW50ZXJubyIKKworI34gbXNnaWQgIm1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCisjfiBtc2dzdHIgIsOoIHN0YXRvIHNwZWNpZmljYXRvIG1haW5saW5lIG1hIGlsIGNvbW1pdCAlcyBub24gw6ggdW4gbWVyZ2UuIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXMiCisjfiBtc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgc2hhMSBjb24gbm9tZSAlcyIKKworI34gbXNnaWQgImNhbm5vdCByZWFkIHNoYTFfZmlsZSBmb3IgJXMiCisjfiBtc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBzaGExIHBlciAlcyIKKworI34gbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKKyN+IG1zZ3N0ciAib3B6aW9uZSBub24gcmljb25vc2NpdXRhOiAnJGFyZyciCisKKyN+IG1zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKKyN+IG1zZ3N0ciAiJyRpbnZhbGlkJyBub24gw6ggdW4gY29tbWl0IHZhbGlkbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyAobG9va2luZyBmb3IgJyVzJykiCisjfiBtc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgbGVnZ2VyZSBpbCBmaWxlIGRpIGxvZyAnJXMnIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkNhbid0IHN0YXQgJXMiCisjfiBtc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGxvIHN0YXQgZGkgJyVzJyIKKworI34gbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKKyN+IG1zZ3N0ciAiUmVtb3RlIG5vbiBlc2lzdGVudGU6ICVzIgorCisjfiBtc2dpZCAiICVkIGZpbGUgY2hhbmdlZCIKKyN+IG1zZ2lkX3BsdXJhbCAiICVkIGZpbGVzIGNoYW5nZWQiCisjfiBtc2dzdHJbMF0gIiAlZCBmaWxlIG1vZGlmaWNhdG8iCisjfiBtc2dzdHJbMV0gIiAlZCBmaWxlIG1vZGlmaWNhdGkiCisKKyN+IG1zZ2lkICIsICVkIGluc2VydGlvbigrKSIKKyN+IG1zZ2lkX3BsdXJhbCAiLCAlZCBpbnNlcnRpb25zKCspIgorI34gbXNnc3RyWzBdICIsICVkIGluc2VyemlvbmUoKykiCisjfiBtc2dzdHJbMV0gIiwgJWQgaW5zZXJ6aW9uaSgrKSIKKworI34gbXNnaWQgIiwgJWQgZGVsZXRpb24oLSkiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgZGVsZXRpb25zKC0pIgorI34gbXNnc3RyWzBdICIuICVkIHJpbW96aW9uZSgtKSIKKyN+IG1zZ3N0clsxXSAiLCAlZCByaW1vemlvbmkoLSkiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCisjfiBtc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgZXNlZ3VpcmUgZ3BnLiIKKworI34gbXNnaWQgImdwZyBkaWQgbm90IGFjY2VwdCB0aGUgZGF0YSIKKyN+IG1zZ3N0ciAiZ3BnIG5vbiBoYSBhY2NldHRhdG8gaSBkYXRpIgorCisjfiBtc2dpZCAiJyVzJzogJXMiCisjfiBtc2dzdHIgIiclcyc6ICVzIgorCisjfiBtc2dpZCAiaW4gJTAuMWYgc2Vjb25kcyBhdXRvbWF0aWNhbGx5Li4uIgorI34gbXNnc3RyICJhdXRvbWF0aWNhbWVudGUgdHJhICUwLjFmIHNlY29uZGkuLi4iCisKKyN+IG1zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorI34gbXNnc3RyICJOb24gaGFpIHVuIEhFQUQgdmFsaWRvIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCisjfiBtc2dzdHIgImltcG9zc2liaWxlIHRyb3ZhcmUgbCd1dGVudGUgY29ycmVudGUgbmVsIGZpbGUgcGFzc3dkOiAlcyIKKworI34gbXNnaWQgIm5vIHN1Y2ggdXNlciIKKyN+IG1zZ3N0ciAidXRlbnRlIG5vbiBlc2lzdGVudGUiCisKKyN+IG1zZ2lkICJidWciCisjfiBtc2dzdHIgImJ1ZyIKKworI34gbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorI34gbXNnc3RyICJjb3BpYXRvOiAgICAgJXMgLT4gJXMiCisKKyN+IG1zZ2lkICJkZWxldGVkOiAgICAlcyIKKyN+IG1zZ3N0ciAiZWxpbWluYXRvOiAgICAlcyIKKworI34gbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorI34gbXNnc3RyICJtb2RpZmljYXRvOiAgICVzIgorCisjfiBtc2dpZCAicmVuYW1lZDogICAgJXMgLT4gJXMiCisjfiBtc2dzdHIgInJpbm9taW5hdG86ICAgICVzIC0+ICVzIgorCisjfiBtc2dpZCAiLCBiZWhpbmQgIgorI34gbXNnc3RyICIsIGluZGlldHJvICIKKworI34gbXNnaWQgIm5vIGZpbGVzIGFkZGVkIgorI34gbXNnc3RyICJuZXNzdW4gZmlsZSBhZ2dpdW50byIKKworI34gbXNnaWQgIm9vcHMiCisjfiBtc2dzdHIgIm9vcHMiCisKKyN+IG1zZ2lkICIlczogaGFzIGJlZW4gZGVsZXRlZC9yZW5hbWVkIgorI34gbXNnc3RyICIlczogw6ggc3RhdGEgZWxpbWluYXRhL3Jpbm9taW5hdGEiCisKKyN+IG1zZ2lkICJbJXM6IGFoZWFkICVkXSIKKyN+IG1zZ3N0ciAiWyVzOiBhdmFudGkgJWRdIgorCisjfiBtc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZGlmZl9zZXR1cF9kb25lIG5vbiByaXVzY2l0byIKKworI34gbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLWIvLUIvLS1vcnBoYW4iCisjfiBtc2dzdHIgIi0tZGV0YWNoIG5vbiBwdcOyIGVzc2VyZSB1c2F0YSBjb24gLWIvLUIvLS1vcnBoYW4iCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLWRldGFjaCBub24gcHXDsiBlc3NlcmUgdXNhdGEgY29uIC10IgorCisjfiBtc2dpZCAiLS1vcnBoYW4gY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKKyN+IG1zZ3N0ciAiLS1vcnBoYW4gbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAtdCIKKworI34gbXNnaWQgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgImdpdCBjaGVja291dDogLWYgZSAtbSBub24gc29ubyBjb21wYXRpYmlsaSIKKworI34gbXNnaWQgIk5vIGV4aXN0aW5nIGF1dGhvciBmb3VuZCB3aXRoICclcyciCisjfiBtc2dzdHIgIk5lc3N1biBhdXRvcmUgZXNpc3RlbnRlIHRyb3ZhdG8gY29uICclcyciCisKKyN+IG1zZ2lkICInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iCisjfiBtc2dzdHIgIiclcyc6IG5vbiDDqCB1bmEgZGlyZWN0b3J5IGRlbGxhIGRvY3VtZW50YXppb25lLiIKKworI34gbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCisjfiBtc2dzdHIgIlJlaW5pemlhbGl6emF0byB1biBlc2lzdGVudGUiCisKKyN+IG1zZ2lkICJJbml0aWFsaXplZCBlbXB0eSIKKyN+IG1zZ3N0ciAiSW5pemlhbGl6emF0byB1biIKKworI34gbXNnaWQgIiBzaGFyZWQiCisjfiBtc2dzdHIgIiBjb25kaXZpc28iCisKKyN+IG1zZ2lkICJXcml0aW5nIFNRVUFTSF9NU0ciCisjfiBtc2dzdHIgIlNjcml0dHVyYSBkaSBTUVVBU0hfTVNHIgorCisjfiBtc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCisjfiBtc2dzdHIgIkNvbXBsZXRhbWVudG8gZGkgU1FVQVNIX01TRyIKKworI34gbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorI34gbXNnc3RyICJub21lIHRhZyB0cm9wcG8gbHVuZ286ICUuKnMuLi4iCisKKyN+IG1zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorI34gbXNnc3RyICJpbnRlc3RhemlvbmUgZGVsIHRhZyB0cm9wcG8gZ3JhbmRlLiIKKworI34gbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorI34gbXNnc3RyICLDiCBuZWNlc3NhcmlvIGltcG9zdGFyZSBsZSBpbmZvcm1hemlvbmkgc3VsIGNvbW1pdHRlciIKKworI34gbXNnaWQgIiIKKyN+ICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSBydW4gXCIkY21kbGluZSAtLXJlc29sdmVkXCIuXG4iCisjfiAiSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisjfiAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCisjfiBtc2dzdHIgIiIKKyN+ICJRdWFuZG8gaGFpIHJpc29sdG8gaWwgcHJvYmxlbWEgZXNlZ3VpIFwiJGNtZGxpbmUgLS1yZXNvbHZlZFwiLlxuIgorI34gIlNlIHZ1b2kgc2FsdGFyZSBxdWVzdGEgcGF0Y2gsIGVzZWd1aSBpbnZlY2UgXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyN+ICJQZXIgcmlwcmlzdGluYXJlIGlsIGJyYW5jaCBvcmlnaW5hbGUgZSBpbnRlcnJvbXBlcmUgbCdhcHBsaWNhemlvbmUgZGVsbGUgIgorI34gInBhdGNoIGVzZWd1aSBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCisKKyN+IG1zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKKyN+IG1zZ3N0ciAiSWwgZm9ybWF0byBwYXRjaCAkcGF0Y2hfZm9ybWF0IG5vbiDDqCBzdXBwb3J0YXRvLiIKKworI34gbXNnaWQgIlBsZWFzZSBtYWtlIHVwIHlvdXIgbWluZC4gLS1za2lwIG9yIC0tYWJvcnQ/IgorI34gbXNnc3RyICJQZXIgZmF2b3JlLCBkZWNpZGl0aS4gLS1za2lwIG8gLS1hYm9ydD8iCisKKyN+IG1zZ2lkICJQYXRjaCBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuIgorI34gbXNnc3RyICJMYSBwYXRjaCBub24gY29udGllbmUgdW4gaW5kaXJpenpvIGVtYWlsIHZhbGlkby4iCisKKyN+IG1zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorI34gbXNnc3RyICJQYXRjaCBub24gcml1c2NpdGEgYSAkbXNnbnVtICRGSVJTVExJTkUiCisKKyN+IG1zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCisjfiBtc2dzdHIgIlBlciBmYXZvcmUsIGNoaWFtYSAnYmlzZWN0X3N0YXRlJyBjb24gYWxtZW5vIHVuIGFyZ29tZW50by4iCisKKyN+IG1zZ2lkICIiCisjfiAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyN+ICIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCisjfiBtc2dzdHIgIiIKKyN+ICJlcnJvcmU6IG9wemlvbmUgc2Nvbm9zY2l1dGEgcGVyICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorI34gIiAgICAgICAgUGVyIGFnZ2l1bmdlcmUgdW4gbWVzc2FnZ2lvLCB1c2FyZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCisKKyN+IG1zZ2lkICJTdG9wcGluZyBhdCAnJHNtX3BhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkludGVycnV6aW9uZSBhICckc21fcGF0aCc7IGxvIHNjcmlwdCBoYSByZXN0aXR1aXRvIHVubyBzdGF0byBkaXZlcnNvIGRhICIKKyN+ICJ6ZXJvLiIKKworI34gbXNnaWQgIi0tIgorI34gbXNnc3RyICItLSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBleHRyYWN0IGVtYWlsIGZyb20gY29tbWl0dGVyIGlkZW50aXR5LiIKKyN+IG1zZ3N0ciAiIgorI34gIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgZXN0cmFycmUgbCdpbmRpcml6em8gZW1haWwgZGFsbCdpZGVudGl0w6AgZGVsICIKKyN+ICJjb21taXR0ZXIuIgpkaWZmIC0tZ2l0IGEvcG8va28ucG8gYi9wby9rby5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZlMjFjCi0tLSAvZGV2L251bGwKKysrIGIvcG8va28ucG8KQEAgLTAsMCArMSwxODAwMCBAQAorIyBHaXQgS29yZWFuIHRyYW5zbGF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IGdpdCBLb3JlYW4gdHJhbnNsYXRpb24gY29udHJpYnV0b3JzCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMKKyMgQ29udHJpYnV0b3JzOgorIyAgSHl1bmp1biBLaW0gPHlvbG9zZWVtQHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbT4sIDIwMTUuCisjICBDaGFuZ3dvbyBSeXUgPGN3cnl1QGRlYmlhbi5vcmc+LCAyMDE1LTIwMTguCisjICBTaWh5ZW9uIEphbmcgPHVuZWVkc2loeWVvbkBnbWFpbC5jb20+LCAyMDE4LgorIyAgR3dhbi1neWVvbmcgTXVuIDxlbG9uZ2J1Z0BnbWFpbC5jb20+LCAyMDE4LgorIworIyAtIOyekeyXheyekOuKlCDsnIQgQ29udHJpYnV0b3JzIOuqqeuhneyXkCDstpTqsIDtlbQg7KO87IS47JqULgorIyAtIOuyiOyXre2VmOuptOyEnCA4MOy7rOufvOydhCDrhJjslrTqsIDsp4Ag7JWK64+E66GdIO2VtCDso7zshLjsmpQuCisjICAgLSDqsIDriqXtlZztlZwg7JuQ66y47J20IDHspITsnbTrqbQgMeykhOyXkCDrk6TslrTqsIDqsowg7ZWY6rOgLCDrtoDrk53snbTtlZjrqbQg6rK97Jqw7JeQIOuUsOudvAorIyAgICAg7JWM66ee6rKMIOykhOuwlOq/iO2VqeuLiOuLpC4gKOy7pOunqOuTnOudvOyduOydtOuptCDspITrsJTqv4jtlZjqs6Ag64uk7J2MIOykhOyXkCDtg60gMuqwnCkKKyMgLSDsmqnslrTripQg7J286rSA7ISx7J2EIOyngOy8nCDso7zsi63si5zsmKQuCisjICAgLSDsmqnslrTqsIAg67CU64CM7Ja07JW8IO2VnOuLpOqzoCDsg53qsIHtlZjrqbQg6re466CH6rKMIOuyiOyXre2VmOq4sCDsoITsl5Ag7Lap67aE7Z6IIOydmOqyrCDqtZDtmZjsnYQKKyMgICAgIO2VmOyLreyLnOyYpC4KKyMgLSDsnbzrsJjsoIHsnbgg66y47J6l7JeQ7IScIOyYgeyWtCDri6jslrTrpbwg6re464yA66GcIOyTsOyngCDslYrsirXri4jri6QuIOy1nOyGjO2VnCDsnYzsl63tlanri4jri6QuCisjICAgLSDsmIjsmbjsoIHsnLzroZwg66qF66C57Ja0IOuTsSDrrLjsnpAg6re464yA66GcIOqwgOumrO2CpOuKlCDqsr3smrDsl5Drp4wg7JuQ66y4IOq3uOuMgOuhnCDslIHri4jri6QuCisjICAgICAtIOyYiDog7JeF7Iqk7Yq466a8IOy2lOyggeyXkCAnb3JpZ2luJyDrjIDsi6AgPOydtOumhD7snYQg7IKs7Jqp7ZWp64uI64ukCisjICAgLSDrsojsl63rkJwg7Jqp7Ja06rCAIOq5gyDrqoXroLnslrTsmYAg7Jew6rSA65CY64qUIOqyveyasOyXkOuKlCDqtITtmLgg7JWI7JeQIOyUgeuLiOuLpC4KKyMgICAgIC0g7JiIOiDrkJjrj4zrpqzquLAocmV2ZXJ0KeqwgCDsp4Ttlokg7KSR7J6F64uI64ukCisjIC0g7Jqp7Ja0OgorIyAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjICB8IDMtd2F5IG1lcmdlICB8IDMt67Cp7ZalIOuzke2VqSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGF1dGhvciAgICAgICB8IOyekeyEseyekCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgYmlzZWN0ICAgICAgIHwg7J2065Ox67aEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBibG9iICAgICAgICAgfCDruJTroa0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgYnVuZGxlICAgICAgIHwg67KI65OkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGJyYW5jaCAgICAgICB8IOu4jOuenOy5mCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgY2hlcnJ5LXBpY2sgIHwgKOy7pOuwiykg67m87Jik6riwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGNvbW1pdCAgICAgICB8IOy7pOuwiyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBjb21taXQtaXNoICAgfCDsu6TrsIst65Sw7JyEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBjb21taXR0ZXIgICAgfCDsu6Trr7jthLAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGNvbmZsaWN0ICAgICB8IOy2qeuPjCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBmYXN0LWZvcndhcmQgfCDsoJXrsKntlqUg7KeE7ZaJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgZnNtb25pdG9yICAgIHwg7YyM7J28IOyLnOyKpO2FnCDrqqjri4jthLAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IEdpdCAgICAgICAgICB8IOq5gyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGdyYWZ0ICAgICAgICB8IOq3uOuemO2UhO2KuCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IGhlYWQgICAgICAgICB8IO2XpOuTnCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBob29rICAgICAgICAgfCDtm4TtgawgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgaGlzdG9yeSAgICAgIHwgKOy7pOuwiykg64K07JetICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgbG9nICAgICAgICAgIHwg6riw66GdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IG1lcmdlICAgICAgICB8IOuzke2VqSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBub3RlICAgICAgICAgfCDrhbjtirggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgb2N0b3B1cyAgICAgIHwg7Jil7Yag7Y287IqkICjrs5Htlakg7KCE6561KSAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IHBhY2sgICAgICAgICB8IOustuydjCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBwYXRoc3BlYyAgICAgfCDqsr3roZzrqoXshLggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBwcm9taXNvciAgICAgfCDtlITrnbzrr7jshJwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCByZWJhc2UgICAgICAgfCDrpqzrsqDsnbTsiqQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCByZWYgICAgICAgICAgfCDroIjtjbzrn7DsiqQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCByZXBvICAgICAgICAgfCDsoIDsnqXshowgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICB8IHJlbW90ZSAgICAgICB8IOumrOuqqO2KuCAo7KCA7J6l7IaMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgIHwgcmVzZXQgICAgICAgIHwg7J6s7KeA7KCVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCByZXZlcnQgICAgICAgfCDrkJjrj4zrpqzquLAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBzdWJjb21tYW5kICAgfCDtlZjsnIQg66qF66C5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCBzdWJtb2R1bGUgICAgfCDtlZjsnIQg66qo65OIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCB0cmVlLWlzaCAgICAgfCDtirjrpqwt65Sw7JyEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCB3b3JrIHRyZWUgICAgfCDsnpHsl4Ug7Y+0642UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgfCB3b3JraW5nIHRyZWUgfCDsnpHsl4Ug7Y+0642UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxOC0wNi0xNiAyMjowNiswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxOC0wNi0xOSAwMjowMCswOTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDaGFuZ3dvbyBSeXUgPGN3cnl1QGRlYmlhbi5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2l0IEtvcmVhbiB0cmFuc2xhdGlvbiA8aHR0cDovL2dpdGh1Yi5jb20vY2hhbmd3b28vZ2l0LWwxMG4tIgorImtvPlxuIgorIkxhbmd1YWdlOiBrb1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisiWC1HZW5lcmF0b3I6IFBvZWRpdCAyLjAuNlxuIgorCisjOiBhZHZpY2UuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIlc+2ejO2KuDogJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjEzNworbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDtjIzsnbzsnbQg7J6I7Jy866+A66GcLCDsu6TrsIsg67m87Jik6riw66W8IO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYWR2aWNlLmM6MTM5Cittc2dpZCAiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg7YyM7J287J20IOyeiOycvOuvgOuhnCwg7Luk67CL7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBhZHZpY2UuYzoxNDEKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDtjIzsnbzsnbQg7J6I7Jy866+A66GcLCDrs5HtlantlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGFkdmljZS5jOjE0MworbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLrs5HtlantlZjsp4Ag7JWK7J2AIO2MjOydvOydtCDsnojsnLzrr4DroZwsIO2SgOydhCDtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGFkdmljZS5jOjE0NQorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYAg7YyM7J287J20IOyeiOycvOuvgOuhnCwg65CY64+M66as6riw66W8IO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYWR2aWNlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDtjIzsnbzsnbQg7J6I7Jy866+A66GcLCAlcyDtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGFkdmljZS5jOjE1NQorbXNnaWQgIiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCittc2dzdHIgIiIKKyLsnpHsl4Ug7Y+0642U7JeQ7IScIOusuOygnOulvCDrsJTroZzsnqHsnYAg64uk7J2MLCAnZ2l0IGFkZC9ybSA87YyM7J28PifsnYQg7KCB7KCI7Z6IXG4iCisi7IKs7Jqp7ZW0IO2VtOqysCDtkZzsi5ztlZjqs6Ag7Luk67CL7ZWY7Iut7Iuc7JikLiIKKworIzogYWR2aWNlLmM6MTYzCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIgorbXNnc3RyICLtlbTqsrDtlZjsp4Ag66q77ZWcIOy2qeuPjCDrlYzrrLjsl5Ag64Gd64Kp64uI64ukLiIKKworIzogYWR2aWNlLmM6MTY4IGJ1aWx0aW4vbWVyZ2UuYzoxMjUwCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICLrs5Htlakg7J6R7JeF7J2EIOuLpCDrp4jsuZjsp4Ag7JWK7JWY7Iq164uI64ukIChNRVJHRV9IRUFEIO2MjOydvOydtCDsnojsirXri4jri6QpLiIKKworIzogYWR2aWNlLmM6MTcwCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAi67OR7ZWp7ZWY6riwIOyghOyXkCDrs4Dqsr0g7IKs7ZWt7J2EIOy7pOuwi+2VmOyLreyLnOyYpC4iCisKKyM6IGFkdmljZS5jOjE3MQorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAi67OR7ZWp7J2EIOuniOy5mOyngCDrqrvtlojquLAg65WM66y47JeQIOuBneuCqeuLiOuLpC4iCisKKyM6IGFkdmljZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogY2hlY2tpbmcgb3V0ICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBwZXJmb3JtaW5nIGFub3RoZXIgY2hlY2tvdXQuXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorbXNnc3RyICIiCisi7KO87J2YOiAnJXMnIOyytO2BrOyVhOybg+2VmOq4sC5cbiIKKyJcbiIKKyLsp4DquIggJ0hFQUTqsIAg67aE66as65CcJyDsg4Htg5zsnoXri4jri6QuIOydtCDsg4Htg5zsl5DshJzripQg7Jes6riw7KCA6riwIOuPjOyVhOuztOqzoCxcbiIKKyLsi6Ttl5jsoIHsnLzroZwg67CU6r646rOgIOy7pOuwi+2VmOuNlOudvOuPhCwg7LK07YGs7JWE7JuD7ZWgIOyImCDsnojripQg64uk66W4IOu4jOuenOy5mOyXkFxuIgorIuyYge2WpeydhCDrr7jsuZjsp4Ag7JWK6rOgIOuzgOqyvSDsgqztla3snYQg7J6D7Ja067KE66a0IOyImCDsnojsirXri4jri6QuXG4iCisiXG4iCisi7Luk67CL7J2EIOycoOyngO2VmOuKlCDruIzrnpzsuZjrpbwg7IOI66GcIOunjOuTnOugpOuptCwgKOyngOq4iOydtOuToCDrgpjspJHsnbTrk6ApIOyytO2BrOyVhOybg1xuIgorIuuqheugueydhCDri6Tsi5wg7ZWY66m07IScIC1iIOyYteyFmOydhCDsgqzsmqntlZjrqbQg65Cp64uI64ukLiDsmIjrpbwg65Ok7Ja0OlxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iIDzsg4gt67iM656c7LmYLeydtOumhD5cbiIKKyJcbiIKKworIzogYXBwbHkuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg6rO167CxIOyYteyFmCAnJXMnIgorCisjOiBhcHBseS5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg6rO167CxIOustOyLnCDsmLXshZggJyVzJyIKKworIzogYXBwbHkuYzoxMjIKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3Qg67CPIC0tM3dheSDsmLXshZjsnYAg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYXBwbHkuYzoxMjQKK21zZ2lkICItLWNhY2hlZCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1jYWNoZWQg67CPIC0tM3dheSDsmLXshZjsnYAg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYXBwbHkuYzoxMjcKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIuyggOyepeyGjCDrsJbsl5DshJwgLS0zd2F5IOyYteyFmCDsgqzsmqkiCisKKyM6IGFwcGx5LmM6MTM4Cittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAi7KCA7J6l7IaMIOuwluyXkOyEnCAtLWluZGV4IOyYteyFmCDsgqzsmqkiCisKKyM6IGFwcGx5LmM6MTQxCittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIuyggOyepeyGjCDrsJbsl5DshJwgLS1jYWNoZWQg7Ji17IWYIOyCrOyaqSIKKworIzogYXBwbHkuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAi7YOA7J6E7Iqk7YOs7ZSEIOygleq3nOyLneydhCDspIDruYTtlaAg7IiYIOyXhuyKteuLiOuLpCAoJXMpIgorCisjOiBhcHBseS5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMoKeyXkOyEnCDri6TsnYwg7J6F66Cl7JeQIOuMgO2VtCAlZOuyiOydhCDrpqzthLTtlojsirXri4jri6Q6ICVzIgorCisjOiBhcHBseS5jOjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLtjKjsuZjsnZggJWTrsogg7KSE7JeQIO2MjOydvCDsnbTrpoTsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTog7J6Y66q765CcIGdpdC1kaWZmIC0gJTIkZOuyiCDspITsl5DshJwgL2Rldi9udWxs7J2EIOq4sOuMgO2WiOyngOunjCwgJyUxJHMn7J20IgorIijqsIApIOyZlOyKteuLiOuLpCIKKworIzogYXBwbHkuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IOyemOuqu+uQnCBnaXQtZGlmZiAtICVk67KIIOykhOyXkCDsg4gg7YyM7J28IOydtOumhOydtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBhcHBseS5jOjk0OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTog7J6Y66q765CcIGdpdC1kaWZmIC0gJWTrsogg7KSE7JeQIOyYiOyghCDtjIzsnbwg7J2066aE7J20IOyYrOuwlOultOyngCDslYrsirXri4jri6QiCisKKyM6IGFwcGx5LmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTog7J6Y66q765CcIGdpdC1kaWZmIC0gJWTrsogg7KSE7JeQ7IScIC9kZXYvbnVsbOydhCDquLDrjIDtlojsirXri4jri6QiCisKKyM6IGFwcGx5LmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAiJWTrsogg7KSE7JeQIOyemOuqu+uQnCDrqqjrk5w6ICVzIgorCisjOiBhcHBseS5jOjEzMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgIuydvOq0gOyEsSDsl4bripQg7Zek642UIOykhCAlZOuyiCDrsI8gJWTrsogiCisKKyM6IGFwcGx5LmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY291bnQ6IOyYiOyDgey5mCDrqrvtlZwg7KSEOiAlLipzIgorCisjOiBhcHBseS5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiJWTrsogg7KSE7JeQIO2XpOuNlCDsl4bripQg7Yyo7LmYIOu2gOu2hDogJS4qcyIKKworIzogYXBwbHkuYzoxNTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIiIKKyLqsr3roZwg7J2066aEIOu2gOu2hOyXkOyEnCAlZOqwnOulvCDsoJzqsbDrnbwg65WMIGdpdCBkaWZmIO2XpOuNlOyXkCDtjIzsnbwg7J2066aEIOygleuztOqwgCDsl4bsirXri4giCisi64ukLiAoJWTrsogg7KSEKSIKKworIzogYXBwbHkuYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiCittc2dzdHIgImdpdCBkaWZmIO2XpOuNlOyXkCDtjIzsnbwg7J2066aEIOygleuztOqwgCDsl4bsirXri4jri6QgKCVk67KIIOykhCkiCisKKyM6IGFwcGx5LmM6MTc2MworbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICLsg4gg7YyM7J287J20IOyYiOyghCDrgrTsmqnsl5Ag7J2Y7KG07ZWp64uI64ukIgorCisjOiBhcHBseS5jOjE3NjUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICLsgq3soJztlZwg7YyM7J287JeQIOyVhOyngSDrgrTsmqnsnbQg65Ok7Ja0IOyeiOyKteuLiOuLpCIKKworIzogYXBwbHkuYzoxNzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi7Yyo7LmY6rCAICVk67KIIOykhOyXkOyEnCDrp53qsIDsoYzsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MTgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi7IOIIO2MjOydvCAlc+ydtCjqsIApIOyYiOyghCDrgrTsmqnsl5Ag7J2Y7KG07ZWp64uI64ukIgorCisjOiBhcHBseS5jOjE4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi7IKt7KCc7ZWcIO2MjOydvCAlc+ydtCjqsIApIOyVhOyngSDrgrTsmqnsnbQg65Ok7Ja0IOyeiOyKteuLiOuLpCIKKworIzogYXBwbHkuYzoxODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIOqyveqzoDogJXMg7YyM7J287J2YIOuCtOyaqeydtCDruYTslrQg7J6I7KeA66eMIOyCreygnOuQmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MTk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICIlZOuyiCDspITsl5Ag67CU7J2064SI66asIO2MqOy5mOqwgCDshpDsg4HrkJjsl4jsirXri4jri6Q6ICUuKnMiCisKKyM6IGFwcGx5LmM6MjAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIiVk67KIIOykhOyXkCDrsJTsnbTrhIjrpqwg7Yyo7LmY6rCAIOydtO2VtO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjIxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAiJWTrsogg7KSE7JeQIOyTsOugiOq4sCDrjbDsnbTthLDrp4wg7J6I64qUIO2MqOy5mCIKKworIzogYXBwbHkuYzoyMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIiVzIOyLrOuzvOumrSDrp4Htgazrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOyXtOqxsOuCmCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzoyOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAi7KSEIOyLnOyekeydtCDsnpjrqrvrkKg6ICclYyciCisKKyM6IGFwcGx5LmM6MzA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIu2MqOy5mCAlZOuyiCDrtoDrtoQgJWTrsogg7KSE7JeQ7IScIOyEseqztSAo7Jik7ZSE7IWLICVk67KIIOykhCkiCisKKyM6IGFwcGx5LmM6MzA2NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICLsu6jthY3siqTtirjqsIAgKCVsZC8lbGQp66GcIOykhOyWtOuTreuLiOuLpC4gKCVk67KIIOykhOyXkOyEnCDsoIHsmqkpIgorCisjOiBhcHBseS5jOjMwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIuuLpOydjOydhCDqsoDsg4ntlZjrjZgg7KSROlxuIgorIiUuKnMiCisKKyM6IGFwcGx5LmM6MzA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICInJXMn7JeQIOuMgO2VnCDrsJTsnbTrhIjrpqwg7Yyo7LmYIOuNsOydtO2EsOqwgCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzEwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiIgorIuuwmOuMgCDtl53tgazqsIAg7JeG7Jy866m0ICclcyfsl5Ag64yA7ZWcIOuwlOydtOuEiOumrCDtjKjsuZjrpbwg67CY64yA66GcIOyggeyaqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnIHdpdGhvdXQgZnVsbCBpbmRleCBsaW5lIgorbXNnc3RyICIiCisi7KCE7LK0IOyduOuNseyKpCDrnbzsnbjsnbQg7JeG7Jy866m0ICclcyfsl5Ag64yA7ZWcIOuwlOydtOuEiOumrCDtjKjsuZjrpbwg7KCB7Jqp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgIu2MqOy5mOqwgCAnJXMnKCVzKeyXkCDsoIHsmqnrkJjsp4Drp4wsIO2YhOyerCDrgrTsmqnqs7wg7J287LmY7ZWY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGFwcGx5LmM6MzE2NworIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcGF0Y2ggYXBwbGllcyB0byBhbiBlbXB0eSAnJXMnIGJ1dCBpdCBpcyBub3QgZW1wdHkiCittc2dzdHIgIu2MqOy5mOuKlCDruYggJyVzJ+yXkCDsoIHsmqnrkJjsp4Drp4wsIO2YhOyerCDruYTslrQg7J6I7KeAIOyViuyKteuLiOuLpCIKKworIzogYXBwbHkuYzozMTg1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICInJTIkcyfsl5Ag64yA7ZWcIO2VhOyalO2VnCAlMSRzIO2PrOyKpO2KuOydtOuvuOyngOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzozMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICLrsJTsnbTrhIjrpqwg7Yyo7LmY66W8ICclcyfsl5Ag7KCB7Jqp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorIiclcyfsl5Ag64yA7ZWcIOuwlOydtOuEiOumrCDtjKjsuZjqsIAg7Jis67CU66W07KeAIOyViuydgCDqsrDqs7zrpbwg66eM65Ot64uI64ukLiAo6riw64yA7ZWcIOqwkiAlcywg7IukIgorIuygnCAlcykiCisKKyM6IGFwcGx5LmM6MzIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAi7Yyo7LmYIOyLpO2MqDogJXM6JWxkIgorCisjOiBhcHBseS5jOjMzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOqwgOyguOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjMzOTYgYXBwbHkuYzozNDA3IGFwcGx5LmM6MzQ1MyBzZXR1cC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDsnb3ripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBhcHBseS5jOjM0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi7Ius67O866atIOunge2BrCDrkqTsl5Ag7J6I64qUICclcycg7J296riwIgorCisjOiBhcHBseS5jOjM0MzMgYXBwbHkuYzozNjczCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICIlcyDqsr3roZzqsIAg7J2066aE7J20IOuwlOuAjOyXiOqxsOuCmCDsgq3soJzrkJjsl4jsirXri4jri6QiCisKKyM6IGFwcGx5LmM6MzUxNiBhcHBseS5jOjM2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIlczog7J24642x7Iqk7JeQIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzozNTI1IGFwcGx5LmM6MzY5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiDsnbjrjbHsiqTsmYAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYXBwbHkuYzozNTYwCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAi7KCA7J6l7IaM7JeQIDMt67Cp7ZalIOuzke2VqeycvOuhnCDrjIDsi6DtlaAg65WMIO2VhOyalO2VnCDruJTroa3snbQg7JeG7Iq164uI64ukLiIKKworIzogYXBwbHkuYzozNTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiMy3rsKntlqUg67OR7ZWp7Jy866GcIOuMgOyLoO2VqeuLiOuLpC4uLlxuIgorCisjOiBhcHBseS5jOjM1NzkgYXBwbHkuYzozNTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIiclcyfsnZgg7ZiE7J6sIOuCtOyaqeydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzozNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIjMt67Cp7ZalIOuzke2VqeycvOuhnCDrjIDsi6DtlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLi4uXG4iCisKKyM6IGFwcGx5LmM6MzYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iCittc2dzdHIgIu2MqOy5mOulvCAnJXMn7JeQIOy2qeuPjOydtCDsnojripQg7IOB7YOc66GcIOyggeyaqS5cbiIKKworIzogYXBwbHkuYzozNjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLtjKjsuZjrpbwgJyVzJ+yXkCDtjKjsuZgg66y47KCcIOyXhuydtCDsoIHsmqkuXG4iCisKKyM6IGFwcGx5LmM6MzY0MAorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgIuygnOqxsO2VmOuKlCDtjKjsuZgg64uk7J2M7JeQIO2MjOydvCDrgrTsmqnsnbQg64Ko7JWY7Iq164uI64ukIgorCisjOiBhcHBseS5jOjM3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiDsnpjrqrvrkJwg7KKF66WYIgorCisjOiBhcHBseS5jOjM3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlc+ydmCDsooXrpZjqsIAgJW/snbTsp4Drp4wgJW/snbQo6rCAKSDrkJjslrTslbwg7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjM4NjQgYXBwbHkuYzozODY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwg6rK966GcICclcyciCisKKyM6IGFwcGx5LmM6MzkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiDsnbTrr7gg7J24642x7Iqk7JeQIOyeiOyKteuLiOuLpCIKKworIzogYXBwbHkuYzozOTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IOydtOuvuCDsnpHsl4Ug65SU66CJ7YSw66as7JeQIOyeiOyKteuLiOuLpCIKKworIzogYXBwbHkuYzozOTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAiJTIkc+ydmCDsg4gg66qo65OcKCUxJG8p6rCAIOyYiOyghCDrqqjrk5woJTMkbynsmYAg64uk66aF64uI64ukIgorCisjOiBhcHBseS5jOjM5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICIlMiRz7J2YIOyDiCDrqqjrk5woJTEkbynqsIAgJTQkc+ydmCDsmIjsoIQg66qo65OcKCUzJG8p7JmAIOuLpOumheuLiOuLpCIKKworIzogYXBwbHkuYzozOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLsmIHtlqUg67Cb64qUICclcycg7YyM7J287J20IOyLrOuzvOumrSDrp4Htgawg65Kk7JeQIOyeiOyKteuLiOuLpCIKKworIzogYXBwbHkuYzozOTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6IO2MqOy5mOulvCDsoIHsmqntlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBhcHBseS5jOjM5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIiVzIO2MqOy5mOulvCDtmZXsnbjtlZjripQg7KSR7J6F64uI64ukLi4uIgorCisjOiBhcHBseS5jOjQwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAic2hhMSDsoJXrs7TqsIAg7JeG6rGw64KYICVzIO2VmOychCDrqqjrk4jsl5DshJwg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDA4NworIywgYy1mb3JtYXQKK21zZ2lkICJtb2RlIGNoYW5nZSBmb3IgJXMsIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IEhFQUQiCittc2dzdHIgIiVz7JeQIOuMgO2VnCDrqqjrk5wg67OA6rK97J207KeA66eMLCDtmITsnqwgSEVBROyXkCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAic2hhMSDsoJXrs7TqsIAg7JeG6rGw64KYIOyTuCDsiJgg7JeG7Iq164uI64ukICglcykuIgorCisjOiBhcHBseS5jOjQwOTUgYnVpbHRpbi9jaGVja291dC5jOjIzNSBidWlsdGluL3Jlc2V0LmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIuqyveuhnCAnJXMn7JeQIOuMgO2VtCBtYWtlX2NhY2hlX2VudHJ5IOyLpO2MqCIKKworIzogYXBwbHkuYzo0MDk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICLsnoTsi5wg7J24642x7Iqk7JeQICVzIO2VreuqqeydhCDstpTqsIDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzo0MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgIuyehOyLnCDsnbjrjbHsiqTrpbwgJXPsl5Ag7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDI0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOyXkOyEnCAlc+ydhCjrpbwpIOygnOqxsO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICLtlZjsnIQg66qo65OIICVz7JeQIOuMgO2VtCDshpDsg4HrkJwg7Yyo7LmYIgorCisjOiBhcHBseS5jOjQyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgIuyDiOuhnCDrp4zrk6Ag7YyM7J28ICclcyfsl5Ag64yA7ZW0IHN0YXQoKe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgIuyDiOuhnCDrp4zrk6Ag7YyM7J28ICclcyfsl5Ag64yA7ZW0IOyYiOu5hCDsoIDsnqXshozrpbwg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDMwMiBhcHBseS5jOjQ0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgIiVz7JeQIOuMgO2VtCDsupDsi5wg7ZWt66qp7J2EIOy2lOqwgO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQzNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgIiclcyfsl5Ag7JOw64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYXBwbHkuYzo0MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIO2MjOydvOydhCDri6vripQg7KSR7J6F64uI64ukIgorCisjOiBhcHBseS5jOjQ0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICInJXMnIO2MjOydvOyXkCDsk7gg7IiYIOyXhuyKteuLiOuLpCAoJyVvJyDrqqjrk5wpIgorCisjOiBhcHBseS5jOjQ1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiJXMg7Yyo7LmYIOq5lOuBlO2VmOqyjCDsoIHsmqkuIgorCisjOiBhcHBseS5jOjQ1MjMKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAi64K067aAIOyYpOulmCIKKworIzogYXBwbHkuYzo0NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiJSVzIO2MqOy5mOulvCAoJWTqsJwg6rGw67aAKSDsoIHsmqkuLi4iCisKKyM6IGFwcGx5LmM6NDUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgInRydW5jYXRpbmcgLnJlaiDtjIzsnbwg7J2066aE7J2EICclLipzLnJlaico7Jy8KeuhnCDsnpDrpoQiCisKKyM6IGFwcGx5LmM6NDU0NSBidWlsdGluL2ZldGNoLmM6Nzg2IGJ1aWx0aW4vZmV0Y2guYzoxMDM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQ1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAi7Yyo7LmYIOu2gOychCAjJWQg6rmU64GU7ZWY6rKMIOyggeyaqS4iCisKKyM6IGFwcGx5LmM6NDU2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIu2MqOy5mCDrtoDsnIQgIyVkIOqxsOu2gOuQqC4iCisKKyM6IGFwcGx5LmM6NDY3MworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkIHBhdGNoICclcycuIgorbXNnc3RyICLtjKjsuZggJyVzJyDqsbTrhIjrnIAuIgorCisjOiBhcHBseS5jOjQ2ODEKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgIuyduOyLne2VoCDsiJgg7JeG64qUIOyeheugpSIKKworIzogYXBwbHkuYzo0NzAwCittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAi7J24642x7IqkIO2MjOydvOydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYXBwbHkuYzo0ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgIiclcycg7Yyo7LmY66W8IOyXtCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogYXBwbHkuYzo0ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIuqzteuwsSDsmKTrpZggJWTqsJzrpbwg64SY7Ja06rCR64uI64ukIgorCisjOiBhcHBseS5jOjQ4NzAgYXBwbHkuYzo0ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVk67KIIOykhOyXkOyEnCDqs7XrsLEg7Jik66WY66W8IOy2lOqwgO2VqeuLiOuLpC4iCisKKyM6IGFwcGx5LmM6NDg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICLqs7XrsLEg7Jik66WY66W8IOuwlOuhnOyeoeydgCDrkqTsl5AgJWTrsogg7KSEIOyggeyaqS4iCisKKyM6IGFwcGx5LmM6NDg5NCBidWlsdGluL2FkZC5jOjUzOCBidWlsdGluL212LmM6MzAwIGJ1aWx0aW4vcm0uYzozODkKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuyDiCDsnbjrjbHsiqQg7YyM7J287JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBhcHBseS5jOjQ5MjEgYXBwbHkuYzo0OTI0IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vYW0uYzoyMjU3CisjOiBidWlsdGluL2Nsb25lLmM6MTIwIGJ1aWx0aW4vZmV0Y2guYzoxMjYgYnVpbHRpbi9wdWxsLmM6MTk4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDA1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxMyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU4NAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1ODcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MDcKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTk3Cittc2dpZCAicGF0aCIKK21zZ3N0ciAi6rK966GcIgorCisjOiBhcHBseS5jOjQ5MjIKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLso7zslrTsp4Qg6rK966Gc7JeQIO2VtOuLue2VmOuKlCDrs4Dqsr0g7IKs7ZWt7J2EIOyggeyaqe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDkyNQorbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIuyjvOyWtOynhCDqsr3roZzsl5Ag7ZW064u57ZWY64qUIOuzgOqyvSDsgqztla3snYQg7KCB7Jqp7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5MjcgYnVpbHRpbi9hbS5jOjIyNjMKK21zZ2lkICJudW0iCittc2dzdHIgIuqwnOyImCIKKworIzogYXBwbHkuYzo0OTI4Cittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIuyghO2GteyggeyduCBkaWZmIOqyveuhnCDslZ7snZggPOqwnOyImD7qsJzsnZgg7JWeIOyKrOuemOyLnCgvKeulvCDsoJzqsbDtlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDkzMQorbXNnaWQgImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giCittc2dzdHIgIu2MqOy5mOyXkOyEnCDstpTqsIDtlZjripQg7YyM7J287J2EIOustOyLnO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTMzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLtjKjsuZjrpbwg7KCB7Jqp7ZWY64qUIOuMgOyLoCwg7J6F66Cl7JeQIOuMgO2VnCBkaWZmc3RhdOydhCDstpzroKXtlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDkzNworbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIuyLreynhOyImOuhnCDstpTqsIAg67CPIOyCreygnO2VnCDspIQg7IiY66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTM5Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi7Yyo7LmY66W8IOyggeyaqe2VmOuKlCDrjIDsi6AsIOyeheugpeyXkCDrjIDtlZwg7JqU7JW97J2EIOy2nOugpe2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTQxCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi7Yyo7LmY66W8IOyggeyaqe2VmOuKlCDrjIDsi6AsIO2MqOy5mOulvCDsoIHsmqkg6rCA64ql7ZWc7KeAIO2ZleyduO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTQzCittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICLtmITsnqwg7J24642x7Iqk7JeQ7IScIO2MqOy5mOqwgCDsoIHsmqkg6rCA64ql7ZWc7KeAIO2ZleyduO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTQ1Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuyekeyXhSDtj7TrjZTrpbwg67CU6r647KeAIOyViuqzoCDtjKjsuZjrpbwg7KCB7Jqp7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5NDcKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICLsnpHsl4Ug7JiB7JetIOuwluydmCDtjIzsnbzsnYQg67CU6r6464qUIO2MqOy5mOulvCDtl4jsmqntlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk1MAorbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICLqt7jrpqzqs6Ag7Yyo7LmY64+EIOyggeyaqe2VqeuLiOuLpCAoLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrIOyYteyFmOqzvCDqsJnsnbQg7IKs7JqpKSIKKworIzogYXBwbHkuYzo0OTUyCittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAi7Yyo7LmY66W8IOyggeyaqe2VmOyngCDslYrsnLzrqbQgMy3rsKntlqUg67OR7ZWp7J2EIOyLnOuPhO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTU0Cittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIuuCtOyepSDsnbjrjbHsiqQg7KCV67O066W8IOyCrOyaqe2VtCDsnoTsi5wg7J24642x7Iqk66W8IOunjOuTreuLiOuLpCIKKworIzogYXBwbHkuYzo0OTU3IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjggYnVpbHRpbi9scy1maWxlcy5jOjUxNQorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICLqsr3roZzrpbwgTlVMIOusuOyekOuhnCDqtazrtoTtlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk1OQorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAi7LWc7IaM7ZWcIDxuPuykhOydtCDsu6jthY3siqTtirjsmYAg7J287LmY7ZWY64qU7KeAIO2ZleyduO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTYwIGJ1aWx0aW4vYW0uYzoyMjQyIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTUKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTcgYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTc3Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLrj5nsnpEiCisKKyM6IGFwcGx5LmM6NDk2MQorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICLqs7XrsLEg7Jik66WY6rCAIOyeiOuKlCDstpTqsIDrkJDqsbDrgpgg7IiY7KCV65CcIOykhOydhCDssL7sirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDk2NCBhcHBseS5jOjQ5NjcKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICLsu6jthY3siqTtirjrpbwg7LC+7J2EIOuVjCDqs7XrsLEg67OA6rK9IOyCrO2VreydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk3MAorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICLtjKjsuZjrpbwg67CY64yAIOyInOyEnOuhnCDsoIHsmqntlanri4jri6QiCisKKyM6IGFwcGx5LmM6NDk3MgorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICLstZzshoztlZzsnZgg7Luo7YWN7Iqk7Yq4IO2VnCDspITrj4Qg7JeG7J20IOyggeyaqe2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTc0Cittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgIuqxsOu2gOuQnCDtjKjsuZgg67aA67aE7J2EIOuMgOydkeuQmOuKlCAqLnJlaiDtjIzsnbzsl5Ag64Ko6rKo65Gh64uI64ukIgorCisjOiBhcHBseS5jOjQ5NzYKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAi7Yyo7LmYIOu2gOu2hOydtCDqsrnss5Drj4Qg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBhcHBseS5jOjQ5NzcgYnVpbHRpbi9hZGQuYzoyOTAgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMQorIzogYnVpbHRpbi9jb21taXQuYzoxMzAxIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk4IGJ1aWx0aW4vZnNjay5jOjY2NgorIzogYnVpbHRpbi9sb2cuYzoxOTAxIGJ1aWx0aW4vbXYuYzoxMjIgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjQKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICLsnpDshLjtnogg7ZGc7IucIgorCisjOiBhcHBseS5jOjQ5NzkKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi7YyM7J28IOuBneyXkCDspITrsJTqv4jsnbQg67mg7KGM7J2M7J2EIOyemOuquyDqsoDsg4ntlZwg6rK97Jqw7JeQIOustOyLnO2VqeuLiOuLpCIKKworIzogYXBwbHkuYzo0OTgyCittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICLtjKjsuZgg67aA67aE7J2YIO2XpOuNlOydmCDspIQg7IiY66W8IOyLoOyaqe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGFwcGx5LmM6NDk4NCBidWlsdGluL2FtLmM6MjI1MQorbXNnaWQgInJvb3QiCittc2dzdHIgIuy1nOyDgeychCIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAi66qo65OgIO2MjOydvCDsnbTrpoTsl5AgPOy1nOyDgeychD7rpbwg7JWe7JeQIOu2meyeheuLiOuLpCIKKworIzogYXJjaGl2ZS5jOjEzCittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzzsmLXshZg+XSA87Yq466asLeuUsOychD4gWzzqsr3roZw+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzsoIDsnqXshow+IFstLWV4ZWMgPOuqheuguT5dIFs87Ji17IWYPl0gPO2KuOumrC3rlLDsnIQ+IFs86rK966GcIgorIj4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTYKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA87KCA7J6l7IaMPiBbLS1leGVjIDzrqoXroLk+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozNTEgYnVpbHRpbi9hZGQuYzoxNzYgYnVpbHRpbi9hZGQuYzo1MTQgYnVpbHRpbi9ybS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICInJXMnIOqyveuhnOuqheyEuOqwgCDslrTrlqQg7YyM7J286rO864+EIOydvOy5mO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGFyY2hpdmUuYzo0MzQKK21zZ2lkICJmbXQiCittc2dzdHIgIu2YleyLnSIKKworIzogYXJjaGl2ZS5jOjQzNAorbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICLslZXstpUg7ZiV7IudIgorCisjOiBhcmNoaXZlLmM6NDM1IGJ1aWx0aW4vbG9nLmM6MTQ2MgorbXNnaWQgInByZWZpeCIKK21zZ3N0ciAi7KCR65GQ7Ja0IgorCisjOiBhcmNoaXZlLmM6NDM2Cittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAi7JWE7Lm07J2067iM7J2YIOqwgSDqsr3roZwg7J2066aE7J2YIOyVnuyXkCDsp4DsoJXtlZwg6rK966Gc66W8IOu2meyeheuLiOuLpCIKKworIzogYXJjaGl2ZS5jOjQzNyBidWlsdGluL2JsYW1lLmM6ODEzIGJ1aWx0aW4vYmxhbWUuYzo4MTQgYnVpbHRpbi9jb25maWcuYzoxMjcKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDA3IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDA5IGJ1aWx0aW4vZ3JlcC5jOjg2OQorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMyBidWlsdGluL2xzLWZpbGVzLmM6NTUxIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDUgYnVpbHRpbi9ub3Rlcy5jOjU2OCBidWlsdGluL3JlYWQtdHJlZS5jOjExOQorIzogcGFyc2Utb3B0aW9ucy5oOjE2NQorbXNnaWQgImZpbGUiCittc2dzdHIgIu2MjOydvCIKKworIzogYXJjaGl2ZS5jOjQzOCBidWlsdGluL2FyY2hpdmUuYzo4OQorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi7JWE7Lm07J2067iM66W8IOydtCDtjIzsnbzsl5Ag7JSB64uI64ukIgorCisjOiBhcmNoaXZlLmM6NDQwCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlOydmCAuZ2l0YXR0cmlidXRlc+ulvCDsnb3sirXri4jri6QiCisKKyM6IGFyY2hpdmUuYzo0NDEKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICLslYTsubTsnbTruIzsl5Ag7Y+s7ZWo65CcIO2MjOydvOydhCDtkZzspIDsmKTrpZjroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBhcmNoaXZlLmM6NDQyCittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAi7KCA7J6l66eMIO2VmOq4sCIKKworIzogYXJjaGl2ZS5jOjQ0MworbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAi642UIOu5oOultOqyjCDslZXstpUiCisKKyM6IGFyY2hpdmUuYzo0NTEKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgIuuNlCDsnpHqsowg7JWV7LaVIgorCisjOiBhcmNoaXZlLmM6NDU0Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICLsp4Dsm5DtlZjripQg7JWV7LaVIO2YleyLneydmCDrqqnroZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBhcmNoaXZlLmM6NDU2IGJ1aWx0aW4vYXJjaGl2ZS5jOjkwIGJ1aWx0aW4vY2xvbmUuYzoxMTAgYnVpbHRpbi9jbG9uZS5jOjExMworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTMKK21zZ2lkICJyZXBvIgorbXNnc3RyICLsoIDsnqXshowiCisKKyM6IGFyY2hpdmUuYzo0NTcgYnVpbHRpbi9hcmNoaXZlLmM6OTEKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAi7JuQ6rKpIOyggOyepeyGjCA87KCA7J6l7IaMPuyXkOyEnCDslYTsubTsnbTruIzrpbwg6rCA7KC47Ji164uI64ukIgorCisjOiBhcmNoaXZlLmM6NDU4IGJ1aWx0aW4vYXJjaGl2ZS5jOjkyIGJ1aWx0aW4vbm90ZXMuYzo0ODkKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICLrqoXroLkiCisKKyM6IGFyY2hpdmUuYzo0NTkgYnVpbHRpbi9hcmNoaXZlLmM6OTMKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgIuybkOqyqSBnaXQtdXBsb2FkLWFyY2hpdmUg66qF66C57J2YIOqyveuhnCIKKworIzogYXJjaGl2ZS5jOjQ2NgorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICLsmIjsg4HsuZgg66q77ZWcIOyYteyFmCAtLXJlbW90ZSIKKworIzogYXJjaGl2ZS5jOjQ2OAorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICItLWV4ZWMg7Ji17IWY7J2AIC0tcmVtb3RlIOyYteyFmOqzvCDqsJnsnbQg7IKs7Jqp7ZWgIOqyveyasOyXkOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpC4iCisKKyM6IGFyY2hpdmUuYzo0NzAKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIKK21zZ3N0ciAi7JiI7IOB7LmYIOuqu+2VnCDsmLXshZggLS1vdXRwdXQiCisKKyM6IGFyY2hpdmUuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDslYTsubTsnbTruIwg7ZiV7IudICclcyciCisKKyM6IGFyY2hpdmUuYzo0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXJndW1lbnQgbm90IHN1cHBvcnRlZCBmb3IgZm9ybWF0ICclcyc6IC0lZCIKK21zZ3N0ciAiJyVzJyDtmJXsi53sl5DshJzripQg7KeA7JuQ7ZWY7KeAIOyViuuKlCDsnbjsnpA6IC0lZCIKKworIzogYXR0ci5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLipz7J2AKOuKlCkg7Jis67CU66W4IOyGjeyEsSDsnbTrpoTsnbQg7JWE64uZ64uI64ukIgorCisjOiBhdHRyLmM6NDE1Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisiZ2l0IGF0dHJpYnV0ZXPsl5DshJwg67CY64yAIO2MqO2EtOydgCDrrLTsi5zrkKnri4jri6QuXG4iCisi7JWe7JeQIOuKkOuCjO2RnOulvCDsk7DroKTrqbQgJ1xcISfrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikLiIKKworIzogYmlzZWN0LmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIiclcycg7YyM7J28IOyViOyXkCDsnpjrqrvrkJwg65Sw7Ji07ZGc6rCAIOu2meydgCDrgrTsmqk6ICVzIgorCisjOiBiaXNlY3QuYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICLrjZQg7J207IOBIOydtOuTseu2hO2VoCDsiJgg7JeG7Iq164uI64ukIVxuIgorCisjOiBiaXNlY3QuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiCittc2dzdHIgIuyYrOuwlOuluCDsu6TrsIsg7J2066aE7J20IOyVhOuLmeuLiOuLpCAoJXMpIgorCisjOiBiaXNlY3QuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIiVzIOuzke2VqSDrsqDsnbTsiqTqsIAg67mE7KCV7IOB7J6F64uI64ukLlxuIgorIuuyhOq3uOqwgCAlcyDrsI8gWyVzXSDsgqzsnbTsl5DshJwg6rOg7LOQ7KGM64uk64qUIOucu+yeheuLiOuLpC5cbiIKKworIzogYmlzZWN0LmM6NzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyIlcyDrs5Htlakg67Kg7J207Iqk6rCAIOyDiOuhreyKteuLiOuLpC5cbiIKKyLsho3shLHsnbQgJXMg67CPIFslc10g7IKs7J207JeQ7IScIOuzgOqyveuQmOyXiOyKteuLiOuLpC5cbiIKKworIzogYmlzZWN0LmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKyJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiJXMg67OR7ZWpIOuyoOydtOyKpOqwgCAlc+yeheuLiOuLpC5cbiIKKyLsspjsnYwgJyVzJyDsu6TrsIvsnbQgJXMg67CPIFslc10g7IKs7J20652864qUIOucu+yeheuLiOuLpC5cbiIKKworIzogYmlzZWN0LmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAiIgorIuydvOu2gCAlcyDrpqzruYTsoITsnbQgJXMg66as67mE7KCE7J2YIOqzvOqxsCDtla3rqqnsnbQg7JWE64uZ64uI64ukLlxuIgorImdpdCBiaXNlY3Qg66qF66C57J2AIOydtCDqsr3smrDsl5DripQg7Jis67CU66W06rKMIOuPmeyeke2VmOyngCDslYrsirXri4jri6QuXG4iCisiJXMg67CPICVzIOumrOu5hOyghOydhCDsnpjrqrsg7JO0IOqygyDslYTri5nri4jquYw/XG4iCisKKyM6IGJpc2VjdC5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisiJXMg67CPICVzIOyCrOydtOydmCDrs5Htlakg67Kg7J207Iqk66W8IOqxtOuEiOucgeuLiOuLpC5cbiIKKyLqt7jrn6zrr4DroZwg7LKY7J2MICVzIOy7pOuwi+ydtCAlcyDrsI8gJXMg7IKs7J207JeQIOyeiOuKlOyngCDtmZXsi6DtlaAg7IiYIOyXhuyKteuLiOuLpC5cbiIKKyLslrTsqIzrk6Ag6rOE7IaN7ZWp64uI64ukLiIKKworIzogYmlzZWN0LmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgIuydtOuTseu2hDog67OR7ZWpIOuyoOydtOyKpOulvCDsi5ztl5jtlbTslbwg7ZWp64uI64ukXG4iCisKKyM6IGJpc2VjdC5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAi7ZWY64KY7J2YICVzIOumrOu5hOyghOydtCDtlYTsmpTtlanri4jri6QiCisKKyM6IGJpc2VjdC5jOjg3MCBidWlsdGluL25vdGVzLmM6MTc1IGJ1aWx0aW4vdGFnLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIO2MjOydvOydhCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYmlzZWN0LmM6OTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDtjIzsnbzsnYQg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJpc2VjdC5jOjk1MQorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICLsnbTrk7HrtoQg66CI7Y2865+w7IqkIOydveq4sOyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJpc2VjdC5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXPsnYAo64qUKSAlcyDrsI8gJXMg66qo65GQ7JeQIO2VtOuLueuQqeuLiOuLpFxuIgorCisjOiBiaXNlY3QuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyLsi5ztl5gg6rCA64ql7ZWcIOy7pOuwi+ydtCDsl4bsirXri4jri6QuXG4iCisi7J6Y66q765CcIOqyveuhnCDtjIzrnbzrr7jthLDroZwg7Iuc7J6R7ZWY7KeAIOyViuyVmOyKteuLiOq5jD9cbiIKKworIzogYmlzZWN0LmM6OTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIijrjIDrnrUgJWQg64uo6rOEKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjLgorIzogYmlzZWN0LmM6MTAwMworIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dpZF9wbHVyYWwgIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dzdHJbMF0gIuydtOuTseu2hDogJTIkcyDrkqTsl5Ag7Iuc7ZeY7ZWgIOumrOu5hOyghOydtCAlMSRk6rCcIOuCqOyVmOyKteuLiOuLpFxuIgorCisjOiBibGFtZS5jOjE3NTYKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIOuwjyAtLXJldmVyc2Ug7Ji17IWY7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QuIgorCisjOiBibGFtZS5jOjE3NjcKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgIi0tY29udGVudHMg7Ji17IWY7J2EIOuniOyngOuniSDsmKTruIzsoJ3tirgg7J2066aE7JeQIOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBibGFtZS5jOjE3ODcKK21zZ2lkICItLXJldmVyc2UgYW5kIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgc3BlY2lmaWVkIGxhdGVzdCBjb21taXQiCittc2dzdHIgIiIKKyItLXJldmVyc2Ug67CPIC0tZmlyc3QtcGFyZW50IOyYteyFmOydhCDqsJnsnbQg7JOw66m0IOy1nOq3vCDsu6TrsIvsnYQg7KeA7KCV7ZW07JW8IO2VqeuLiOuLpCIKKworIzogYmxhbWUuYzoxNzk2IGJ1bmRsZS5jOjE2MCByZWYtZmlsdGVyLmM6MjA3NSBzZXF1ZW5jZXIuYzoxODYxCisjOiBzZXF1ZW5jZXIuYzozNjMyIGJ1aWx0aW4vY29tbWl0LmM6OTgxIGJ1aWx0aW4vbG9nLmM6MzY2IGJ1aWx0aW4vbG9nLmM6OTIwCisjOiBidWlsdGluL2xvZy5jOjEzNzEgYnVpbHRpbi9sb2cuYzoxNzAyIGJ1aWx0aW4vbG9nLmM6MTk1MCBidWlsdGluL21lcmdlLmM6MzcyCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIuumrOu5hOyghCB3YWxrIOykgOu5hOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJsYW1lLmM6MTgxNAorbXNnaWQgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCittc2dzdHIgIiIKKyItLXJldmVyc2Ug67CPIC0tZmlyc3QtcGFyZW50IOyYteyFmOydhCDqsJnsnbQg7JOw66m0IOy1nOy0iC3sg4HsnIQg7LK07J246rO8IOuylOychOqwgCDtlYTsmpTtlanri4giCisi64ukIgorCisjOiBibGFtZS5jOjE4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICIlcyDqsr3roZzqsIAgJXMg7JWI7JeQIOyXhuyKteuLiOuLpCIKKworIzogYmxhbWUuYzoxODM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiCittc2dzdHIgIiVzIOqyveuhnOyXkCDrjIDtlbQgJXMg67iU66Gt7J2EIOydveydhCDsiJgg7JeG7J2MIgorCisjOiBicmFuY2guYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKK21zZ3N0ciAiIgorIlxuIgorIuyYpOulmOulvCDsiJjsoJXtlZwg64uk7J2MIOybkOqyqSDstpTsoIEg7KCV67O066W8XG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiIOuqheugueydhFxuIgorIuyLpO2Wie2VtCDsiJjsoJXtlaAg7IiYIOyeiOyKteuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiJXMg67iM656c7LmY66W8IOyekOyLoOydmCDsl4XsiqTtirjrprzsnLzroZwg7KeA7KCV7ZWY7KeAIOyViuydjC4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIiclcycg67iM656c7LmY6rCAIOumrOuyoOydtOyKpOulvCDthrXtlbQg66as66qo7Yq47J2YICclcycg67iM656c7LmY66W8ICgnJXMn7JeQ7IScKSDrlLDrnbzqsIDrj4TroZ0g7ISkIgorIuygleuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnLiIKK21zZ3N0ciAiIgorIiclcycg67iM656c7LmY6rCAIOumrOuqqO2KuOydmCAnJXMnIOu4jOuenOy5mOulvCAoJyVzJ+yXkOyEnCkg65Sw65286rCA64+E66GdIOyEpOygleuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyInJXMnIOu4jOuenOy5mOqwgCDrpqzrsqDsnbTsiqTrpbwg7Ya17ZW0IOumrOuqqO2KuOydmCAnJXMnIOu4jOuenOy5mOulvCDrlLDrnbzqsIDrj4TroZ0g7ISk7KCV65CY7JeI7Iq164uIIgorIuuLpC4iCisKKyM6IGJyYW5jaC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycuIgorbXNnc3RyICInJXMnIOu4jOuenOy5mOqwgCAnJXMnIOu4jOuenOy5mOulvCDrlLDrnbzqsIDrj4TroZ0g7ISk7KCV65CY7JeI7Iq164uI64ukLiIKKworIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiJyVzJyDruIzrnpzsuZjqsIAg66as67Kg7J207Iqk66W8IO2Gte2VtCDrpqzrqqjtirjsnZggJyVzJyDroIjtjbzrn7DsiqTrpbwg65Sw65286rCA64+E66GdIOyEpOygleuQmOyXiOyKtSIKKyLri4jri6QuIgorCisjOiBicmFuY2guYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIiclcycg67iM656c7LmY6rCAIOumrOuqqO2KuOydmCAnJXMnIOugiO2NvOufsOyKpOulvCDrlLDrnbzqsIDrj4TroZ0g7ISk7KCV65CY7JeI7Iq164uI64ukLiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyInJXMnIOu4jOuenOy5mOqwgCDrpqzrsqDsnbTsiqTrpbwg7Ya17ZW0IOuhnOy7rOydmCAnJXMnIOugiO2NvOufsOyKpOulvCDrlLDrnbzqsIDrj4TroZ0g7ISk7KCV65CY7JeI7Iq164uIIgorIuuLpC4iCisKKyM6IGJyYW5jaC5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICInJXMnIOu4jOuenOy5mOqwgCDroZzsu6zsnZggJyVzJyDroIjtjbzrn7DsiqTrpbwg65Sw65286rCA64+E66GdIOyEpOygleuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjEyMAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAi7JeF7Iqk7Yq466a8IOu4jOuenOy5mCDshKTsoJXsnYQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJyYW5jaC5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICLrlLDrnbzqsIDsp4Ag7JWK7J2MOiAlcyDroIjtjbzrn7DsiqTsl5Ag64yA7ZW0IOyVoOunpO2VnCDsoJXrs7QiCisKKyM6IGJyYW5jaC5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOyYrOuwlOuluCDruIzrnpzsuZgg7J2066aE7J20IOyVhOuLmeuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi7J2066aE7J20ICclcyfsnbgg67iM656c7LmY6rCAIOydtOuvuCDsnojsirXri4jri6QuIgorCisjOiBicmFuY2guYzoyMTQKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjrpbwg6rCV7KCc66GcIOyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnJhbmNoLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisi65Sw65286rCA6riwIOygleuztOulvCDshKTsoJXtlaAg7IiYIOyXhuyKteuLiOuLpC4g7Iuc7J6RIOychOy5mCAnJXMn7J20KOqwgCkg67iM656c7LmY6rCAIOyVhOuLmeuLiOuLpC4iCisKKyM6IGJyYW5jaC5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLsmpTssq3tlZwg7JeF7Iqk7Yq466a8ICclcycg67iM656c7LmY6rCAIOyXhuyKteuLiOuLpCIKKworIzogYnJhbmNoLmM6MjM4Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisiXG4iCisi66as66qo7Yq47JeQIOydtOuvuCDsnojripQg7JeF7Iqk7Yq466a8IOu4jOuenOy5mOulvCDquLDrsJjsnLzroZwg7J6R7JeF7ZWY66Ck66m0LFxuIgorIuuovOyggCBcImdpdCBmZXRjaFwi66GcIOqwgOyguCDrpqzrqqjtirgg67iM656c7LmY66W8IOqwgOyguOyYteuLiOuLpC5cbiIKKyJcbiIKKyLsg4gg66Gc7LusIOu4jOuenOy5mOulvCDqsbDquLDsl5Ag7ZW064u57ZWY64qUIOumrOuqqO2KuCDruIzrnpzsuZjroZwgcHVzaO2VmOugpOuptCxcbiIKKyJcImdpdCBwdXNoIC11XCLroZwgcHVzaO2VmOuKlCDsl4XsiqTtirjrprzsnYQg7ISk7KCV7ZWgIOyImCDsnojsirXri4jri6QuIgorCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICLsmKzrsJTrpbgg7Jik67iM7KCd7Yq4IOydtOumhOydtCDslYTri5nri4jri6Q6ICclcycuIgorCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi7JWg66ek7ZWcIOyYpOu4jOygne2KuCDsnbTrpoQ6ICclcycuIgorCisjOiBicmFuY2guYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAi7Jis67CU66W4IOu4jOuenOy5mCDsnITsuZjqsIAg7JWE64uZ64uI64ukOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMn7J2AKOuKlCkg7J2066+4ICclcycg7JyE7LmY7JeQIOuwm+yVhOyguCDsnojsirXri4jri6QiCisKKyM6IGJyYW5jaC5jOjM4MworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlCAlc+ydmCDtl6Trk5zqsIAg7JeF642w7J207Yq465CY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVuZGxlLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyDtjIzsnbzsnbQg67KE7KCEMiDrsojrk6Qg7YyM7J2866GcIOuztOydtOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1bmRsZS5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAi7J247Iud7ZWgIOyImCDsl4bripQg7Zek642UOiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjg4IHNlcXVlbmNlci5jOjIwODEgc2VxdWVuY2VyLmM6MjU1OCBidWlsdGluL2NvbW1pdC5jOjc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1bmRsZS5jOjEzOQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICLsoIDsnqXshozsl5Ag7ZWE7IiY7KCB7J24IOuLpOydjCDsu6TrsIvsnbQg7JeG7Iq164uI64ukOiIKKworIzogYnVuZGxlLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLrsojrk6Tsl5Ag64uk7J2MIOugiO2NvOufsOyKpCAlZOqwnOqwgCDsnojsirXri4jri6Q6IgorCisjOiBidW5kbGUuYzoxOTcKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAi67KI65Ok7J2AIOyghOyytCDsu6TrsIsg64K07Jet7J2EIOq4sOuhne2VqeuLiOuLpC4iCisKKyM6IGJ1bmRsZS5jOjE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAi67KI65Ok7JeQIOuLpOydjCDroIjtjbzrn7DsiqQgJWTqsJzqsIAg7ZWE7JqU7ZWp64uI64ukOiIKKworIzogYnVuZGxlLmM6MjU4Cittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFjay1vYmplY3RzIOuqheugueydhCDsi6TtlontlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVuZGxlLmM6MjY5Cittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgInBhY2stb2JqZWN0cyDrqoXroLnsnbQg7KO97JeI7Iq164uI64ukIgorCisjOiBidW5kbGUuYzozMTEKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCDrqoXroLnsnbQg7KO97JeI7Iq164uI64ukIgorCisjOiBidW5kbGUuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgInJldi1saXN0IOyYteyFmOyXkOyEnCAnJXMnIOugiO2NvOufsOyKpOqwgCDsoJzsmbjrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1bmRsZS5jOjQ1MCBidWlsdGluL2xvZy5jOjE4MyBidWlsdGluL2xvZy5jOjE2MDcgYnVpbHRpbi9zaG9ydGxvZy5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDsnbjsnpA6ICVzIgorCisjOiBidW5kbGUuYzo0NTgKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAi67mIIOuyiOuTpOydgCDrp4zrk6Tsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVuZGxlLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidW5kbGUuYzo0OTgKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgImluZGV4LXBhY2sg66qF66C57J20IOyjveyXiOyKteuLiOuLpCIKKworIzogY29sb3IuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAi7J6Y66q765CcIOyDiSDqsJI6ICUuKnMiCisKKyM6IGNvbW1pdC5jOjQzIHNlcXVlbmNlci5jOjIzNjQgYnVpbHRpbi9hbS5jOjQyMSBidWlsdGluL2FtLmM6NDY1CisjOiBidWlsdGluL2FtLmM6MTQzNiBidWlsdGluL2FtLmM6MjA3MiBidWlsdGluL3JlcGxhY2UuYzozNzYKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgInBhcnNlICVz7J2EKOulvCkg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGNvbW1pdC5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzLCDsu6TrsIvsnbQg7JWE64uZ64uI64ukIgorCisjOiBjb21taXQuYzoxODIKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKyI8R0lUX0RJUj4vaW5mby9ncmFmdHPsl5Ag64yA7ZWcIOyngOybkOydgCDri6TsnYwg6rmDXG4iCisi67KE7KCE7JeQ7IScIOygnOqxsOuQoCDsmIjsoJXsnoXri4jri6QuXG4iCisiXG4iCisi6re4656Y7ZSE7Yq466W8IOugiO2NvOufsOyKpOuhnCDsoITtmZjtlZjroKTrqbRcbiIKKyJcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCIg66qF66C57J2EXG4iCisi7IKs7Jqp7ZWY7Iut7Iuc7JikLlxuIgorIlxuIgorIuydtCDrqZTsi5zsp4Drpbwg67O07KeAIOyViuycvOugpOuptFxuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiXG4iCisi66qF66C57J2EIOyCrOyaqe2VmOyLreyLnOyYpCIKKworIzogY29tbWl0LmM6MTU0MAorbXNnaWQgIiIKKyJXYXJuaW5nOiBjb21taXQgbWVzc2FnZSBkaWQgbm90IGNvbmZvcm0gdG8gVVRGLTguXG4iCisiWW91IG1heSB3YW50IHRvIGFtZW5kIGl0IGFmdGVyIGZpeGluZyB0aGUgbWVzc2FnZSwgb3Igc2V0IHRoZSBjb25maWdcbiIKKyJ2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHRoZSBlbmNvZGluZyB5b3VyIHByb2plY3QgdXNlcy5cbiIKK21zZ3N0ciAiIgorIuqyveqzoDog7Luk67CLIOuplOyLnOyngOqwgCBVVEYtOCDsnbjsvZTrlKnsl5Ag66ee7KeAIOyViuyKteuLiOuLpC5cbiIKKyLrqZTsi5zsp4Drpbwg7IiY7KCV7ZWcIOuLpOydjCDsu6TrsIvsnYQg7IiY7KCV7ZWY6rGw64KYLCDshKTsoJXsnZggaTE4bi5jb21taXRlbmNvZGluZ1xuIgorIuuzgOyImOulvCDtlITroZzsoJ3tirjqsIAg7IKs7JqpIOykkeyduCDsnbjsvZTrlKnsnLzroZwg66ee7LaU7Iut7Iuc7JikLlxuIgorCisjOiBjb21taXQtZ3JhcGguYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgIuy7pOuwiyDqt7jrnpjtlIQg7Y+s66e37JeQ7IScIOy7pOuwiyAlZOqwnOulvCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogY29tbWl0LWdyYXBoLmM6Njk2Cittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAi6re4656Y7ZSE66W8IOyTsOq4sOyXkOuKlCDsu6TrsIsg7IiY6rCAIOuEiOustCDrp47sirXri4jri6QiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjcwNyBidWlsdGluL2luaXQtZGIuYzo1MTYgYnVpbHRpbi9pbml0LWRiLmM6NTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAiJXPsl5Ag64yA7ZW0IG1rZGly66W8IO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNSBjb21wYXQvb2JzdGFjay5jOjQwNworbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuuplOuqqOumrCDrsJTri6XrgqgiCisKKyM6IGNvbmZpZy5jOjE4NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAi7IOB64yAIOqyveuhnCDshKTsoJUgaW5jbHVkZSDsobDqsbTsnYAg7YyM7J287JeQ7IScIOyZgOyVvCDtlanri4jri6QiCisKKyM6IGNvbmZpZy5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAi67iU66GtICUyJHMg7JWI7JeQICUxJGTrsogg7KSE7JeQIOyemOuqu+uQnCDshKTsoJUiCisKKyM6IGNvbmZpZy5jOjc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAi7YyM7J28ICUyJHMg7JWI7JeQICUxJGTrsogg7KSE7JeQIOyemOuqu+uQnCDshKTsoJUiCisKKyM6IGNvbmZpZy5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu2RnOykgCDsnoXroKUg7JWI7JeQICVk67KIIOykhOyXkCDsnpjrqrvrkJwg7ISk7KCVIgorCisjOiBjb25maWcuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOu4lOuhrSAlMiRzIOyViOyXkCAlMSRk67KIIOykhOyXkCDsnpjrqrvrkJwg7ISk7KCVIgorCisjOiBjb25maWcuYzo4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAi66qF66C57ZaJICUyJHMg7JWI7JeQICUxJGTrsogg7KSE7JeQIOyemOuqu+uQnCDshKTsoJUiCisKKyM6IGNvbmZpZy5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgIiUyJHMg7JWI7JeQICUxJGTrsogg7KSE7JeQIOyemOuqu+uQnCDshKTsoJUiCisKKyM6IGNvbmZpZy5jOjkzNgorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAi67KU7JyE66W8IOuyl+yWtOuCqCIKKworIzogY29uZmlnLmM6OTM2Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICLri6jsnITqsIAg7J6Y66q765CoIgorCisjOiBjb25maWcuYzo5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7IiY7LmYIOyEpOyglSDqsJIgJyVzJyAo7YKkICclcycpOiAlcyIKKworIzogY29uZmlnLmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7IiY7LmYIOyEpOyglSDqsJIgJyVzJyAo7YKkICclcycsIOu4lOuhrSAlcyk6ICVzIgorCisjOiBjb25maWcuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogJXMiCittc2dzdHIgIuyemOuqu+uQnCDsiJjsuZgg7ISk7KCVIOqwkiAnJXMnICjtgqQgJyVzJywg7YyM7J28ICVzKTogJXMiCisKKyM6IGNvbmZpZy5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIuyemOuqu+uQnCDsiJjsuZgg7ISk7KCVIOqwkiAnJXMnICjtgqQgJyVzJywg7ZGc7KSA7J6F66ClKTogJXMiCisKKyM6IGNvbmZpZy5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogJXMiCittc2dzdHIgIuyemOuqu+uQnCDsiJjsuZgg7ISk7KCVIOqwkiAnJXMnICjtgqQgJyVzJywg7ZWY7JyEIOuqqOuTiCDruJTroa0gJXMpOiAlcyIKKworIzogY29uZmlnLmM6OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIuyemOuqu+uQnCDsiJjsuZgg7ISk7KCVIOqwkiAnJXMnICjtgqQgJyVzJywg66qF66C57ZaJICVzKTogJXMiCisKKyM6IGNvbmZpZy5jOjk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIuyemOuqu+uQnCDsiJjsuZgg7ISk7KCVIOqwkiAnJXMnICjtgqQgJyVzJywgJXMg7JWI7JeQKTogJXMiCisKKyM6IGNvbmZpZy5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAi64uk7J2M7JeQIOyCrOyaqeyekCDrlJTroInthLDrpqwg7ZmV7J6l7JeQIOyLpO2MqDogJyVzJyIKKworIzogY29uZmlnLmM6MTA2NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyDqsJLsnbQgJyVzJ+yXkCDrjIDtlbQg7Jis67CU66W4IOyLnOqwgSDqsJLsnbQg7JWE64uZ64uI64ukIgorCisjOiBjb25maWcuYzoxMTcxIGNvbmZpZy5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIiVk67KI7J2AIOyYrOuwlOuluCB6bGliIOyVley2lSDri6jqs4TqsIAg7JWE64uZ64uI64ukIgorCisjOiBjb25maWcuYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IOyDneyEsSDrqqjrk5zqsIAg7Jis67CU66W07KeAIOyViuyKteuLiOuLpDogJXMiCisKKyM6IGNvbmZpZy5jOjE0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIuyemOuquyDrrLbsnYwg7JWV7LaVIOuLqOqzhCAlZCIKKworIzogY29uZmlnLmM6MTY4MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLrqoXroLntlokg7ISk7KCV7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBjb25maWcuYzoyMDEzCittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICLshKTsoJUg7YyM7J287J2EIOydveuKlCDspJEg7JWMIOyImCDsl4bripQg7Jik66WY6rCAIOyDneqyvOyKteuLiOuLpCIKKworIzogY29uZmlnLmM6MjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwgJXM6ICclcyciCisKKyM6IGNvbmZpZy5jOjIyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb3JlLnVudHJhY2tlZENhY2hlIHZhbHVlICclcyc7IHVzaW5nICdrZWVwJyBkZWZhdWx0IHZhbHVlIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCBjb3JlLnVudHJhY2tlZENhY2hlIOqwkiAnJXMnLiDquLDrs7jqsJLsnLzroZwgJ2tlZXAnIOyCrOyaqSIKKworIzogY29uZmlnLmM6MjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSDqsJIoJyVkJynsnYAgMOyXkOyEnCAxMDAg7IKs7J207Jes7JW8IO2VqeuLiOuLpCIKKworIzogY29uZmlnLmM6MjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIuuqheugue2WiSDshKTsoJXsl5DshJwgJyVzJ+ydhCjrpbwpIOyEpOygle2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBjb25maWcuYzoyMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAiJyUyJHMnIO2MjOydvOydmCAlMyRk67KIIOykhCAnJTEkcycg7ISk7KCVIOuzgOyImOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGNvbmZpZy5jOjI0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXPsnYAo64qUKSDsl6zrn6wg6rCcIOqwkuydtCDsnojsirXri4jri6QiCisKKyM6IGNvbmZpZy5jOjI3NjYgY29uZmlnLmM6MzAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJmc3RhdCBvbiAlcyBmYWlsZWQiCittc2dzdHIgIiVz7JeQIOuMgO2VtCBmc3RhdCDsi6TtjKgiCisKKyM6IGNvbmZpZy5jOjI5MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSAnJXMnKOycvCnroZwg7ISk7KCV7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGNvbmZpZy5jOjI5MDcgYnVpbHRpbi9yZW1vdGUuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVuc2V0ICclcyciCittc2dzdHIgIiclcycg7ISk7KCV7J2EIOyngOyauCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJUaGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICLrpqzrqqjtirgg7Lih7J20IOy1nOy0iCDsl7DqsrDtlojsnYQg65WMIOyXsOqysOydhCDrgYrsl4jsirXri4jri6QiCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisi66as66qo7Yq4IOyggOyepeyGjOyXkOyEnCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpFxuIgorIlxuIgorIuyYrOuwlOuluCDsoJHqt7wg6raM7ZWc7J20IOyeiOuKlOyngCwg6re466as6rOgIOyggOyepeyGjOqwgCDsnojripTsp4BcbiIKKyLtmZXsnbjtlZjsi63si5zsmKQuIgorCisjOiBjb25uZWN0ZWQuYzo2NiBidWlsdGluL2ZzY2suYzoyMDEgYnVpbHRpbi9wcnVuZS5jOjE0NQorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi7Jew6rKw7J2EIO2ZleyduO2VmOuKlCDspJHsnoXri4jri6QiCisKKyM6IGNvbm5lY3RlZC5jOjc4Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiJ2dpdCByZXYtbGlzdCfrpbwg7Iuk7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGNvbm5lY3RlZC5jOjk4Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICJyZXYtbGlzdCDsk7DquLDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBjb25uZWN0ZWQuYzoxMDUKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAicmV2LWxpc3TsnZgg7ZGc7KSA7J6F66Cl7J2EIOuLq+uKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGNvbnZlcnQuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy4iCittc2dzdHIgIiVz7JeQ7IScIENSTEbripQgTEbroZwg67CU64Cd64uI64ukLiIKKworIzogY29udmVydC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisiJXPsl5DshJwgQ1JMRuuKlCBMRuuhnCDrsJTrgJ3ri4jri6QuXG4iCisi7J6R7JeFIOuUlOugie2EsOumrOyXkOyEnOuKlCDsm5Drnpgg7KSEIOuwlOq/iCDtmJXsi53snYQg7Jyg7KeA7ZWp64uI64ukLiIKKworIzogY29udmVydC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICIlc+yXkOyEnCBMRuuKlCBDUkxG66GcIOuwlOuAneuLiOuLpC4iCisKKyM6IGNvbnZlcnQuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorIiVz7JeQ7IScIExG64qUIENSTEbroZwg67CU64Cd64uI64ukLlxuIgorIuyekeyXhSDrlJTroInthLDrpqzsl5DshJzripQg7JuQ656YIOykhCDrsJTqv4gg7ZiV7Iud7J2EIOycoOyngO2VqeuLiOuLpC4iCisKKyM6IGNvbnZlcnQuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQk9NIGlzIHByb2hpYml0ZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICInJXMn7JeQ7IScIOyduOy9lOuUqeydtCAlc+ydtOuptCBCT03snbQg6riI7KeA65Cp64uI64ukIgorCisjOiBjb252ZXJ0LmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lcyBhcyB3b3JraW5nLSIKKyJ0cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIiclcycg7YyM7J287JeQIEJPTShieXRlIG9yZGVyIG1hcmsp7J20IOuTpOyWtCDsnojsirXri4jri6QuIHdvcmtpbmctdHJlZS1lbmNvZGluZ+ycvOuhnCAiCisiVVRGLSVzIOqwkuydhCDsgqzsmqntlZjsi63si5zsmKQuIgorCisjOiBjb252ZXJ0LmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyByZXF1aXJlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIiclcyfsl5DshJwg7J247L2U65Sp7J20ICVz7J2066m0IEJPTeydtCDtlYTsmpTtlanri4jri6QiCisKKyM6IGNvbnZlcnQuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICclcycgaXMgbWlzc2luZyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXNCRSBvciBVVEYtIgorIiVzTEUgKGRlcGVuZGluZyBvbiB0aGUgYnl0ZSBvcmRlcikgYXMgd29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIiclcycg7YyM7J287JeQIEJPTShieXRlIG9yZGVyIG1hcmsp7J20IOyXhuyKteuLiOuLpC4gKOuwlOydtO2KuCDsiJzshJzsl5Ag65Sw6528KSBVVEYtJXNCRSDrmJAiCisi64qUIFVURi0lc0xFIOqwkuydhCB3b3JraW5nLXRyZWUtZW5jb2RpbmfsnLzroZwg7IKs7Jqp7ZWY7Iut7Iuc7JikLiIKKworIzogY29udmVydC5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiJyVzJ+ydmCDsnbjsvZTrlKnsnYQgJXPsl5DshJwgJXMo7Jy8KeuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBjb252ZXJ0LmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImVuY29kaW5nICclcycgZnJvbSAlcyB0byAlcyBhbmQgYmFjayBpcyBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKyInJXMn7J2YIOyduOy9lOuUqeydhCAlc+yXkOyEnCAlcyjsnLwp66GcIOuzgO2ZmO2VmOqzoCDri6Tsi5wg7Jet7Jy866GcIOuzgO2ZmO2WiOydhCDrlYwg7JuQ656YIOuCtOyaqeqzvCAiCisi64uk66aF64uI64ukLiIKKworIzogY29udmVydC5jOjEyMjUKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICJ0cnVlL2ZhbHNl64qUIOyYrOuwlOuluCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIOqwkuydtCDslYTri5nri4jri6QiCisKKyM6IGRhdGUuYzoxMTYKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICLrr7jrnpjsl5AiCisKKyM6IGRhdGUuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+7LSIIOyghCIKKworIzogZGF0ZS5jOjEyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbWludXRlcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD7rtoQg7KCEIgorCisjOiBkYXRlLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+7Iuc6rCEIOyghCIKKworIzogZGF0ZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD7snbwg7KCEIgorCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gd2Vla3MgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+7KO8IOyghCIKKworIzogZGF0ZS5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+64usIOyghCIKKworIzogZGF0ZS5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD7rhYQiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJXMsICU8UFJJdU1BWD7ri6wg7KCEIgorCisjOiBkYXRlLmM6MTc1IGRhdGUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD7rhYQg7KCEIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIOyInOyEnCDtjIzsnbzsnYQg7J2964qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTM1Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIuu2gOygle2Zle2VnCDsnbTrpoQg67CU6r646riwIO2DkOyDieydhCDsiJjtlontlZjripQg7KSRIgorCisjOiBkaWZmLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJyVzJyDsmLXshZjsl5DripQg6rCS7J20IO2VhOyalO2VqeuLiOuLpCIKKworIzogZGlmZi5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiAgZGlyc3RhdCDsnpDrpoQg7Y287IS87Yq4IOqwkiAnJXMnIO2MjOyLseyXkCDsi6TtjKjtlojsirXri4jri6RcbiIKKworIzogZGlmZi5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIOyVjCDsiJgg7JeG64qUIGRpcnN0YXQg7YyM652866+47YSwICclcydcbiIKKworIzogZGlmZi5jOjI4MQorbXNnaWQgIiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ3plYnJhJywgJ2RpbW1lZF96ZWJyYScsICIKKyIncGxhaW4nIgorbXNnc3RyICIiCisi7Jiu6rmAIOyDiSDshKTsoJXsnYAgJ25vJywgJ2RlZmF1bHQnLCAnemVicmEnLCAnZGltbWVkX3plYnJhJywgJ3BsYWluJyDspJHsnZgg7ZWY64KY7J6FIgorIuuLiOuLpC4iCisKKyM6IGRpZmYuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIidkaWZmLnN1Ym1vZHVsZScg7ISk7KCVIOuzgOyImOyXkCDslYwg7IiYIOyXhuuKlCDqsJI6ICclcyciCisKKyM6IGRpZmYuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyInZGlmZi5zdWJtb2R1bGUnIOyEpOyglSDrs4DsiJjsl5Ag7Jik66WYOlxuIgorIiVzJyIKKworIzogZGlmZi5jOjM4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAi7Jm467aAIGRpZmYg7ZSE66Gc6re4656o7J20IOyjveydjCwgJXMg7JyE7LmY7JeQ7IScIOupiOy2pCIKKworIzogZGlmZi5jOjQxNTMKK21zZ2lkICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBhbmQgLXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorIlwiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2ssIC1zIOyYteyFmCDspJEg7ZWY64KY66eMIOyTuCDsiJgg7J6I7Iq164uI64ukIgorCisjOiBkaWZmLmM6NDE1NgorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItRywgLVMsIC0tZmluZC1vYmplY3Qg7Ji17IWYIOykkSDtlZjrgpjrp4wg7JO4IOyImCDsnojsirXri4jri6QiCisKKyM6IGRpZmYuYzo0MjQ0Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IOyYteyFmOyXkOuKlCDsoJXtmZXtnogg7ZWY64KY7J2YIOqyveuhnOuqheyEuOqwgCDtlYTsmpTtlanri4jri6QiCisKKyM6IGRpZmYuYzo0NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKyItLWRpcnN0YXQvLVgg7Ji17IWYIO2MjOudvOuvuO2EsOulvCDtjIzsi7HtlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukOlxuIgorIiVzIgorCisjOiBkaWZmLmM6NDQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiLS1zdWJtb2R1bGUg7Ji17IWYIO2MjOudvOuvuO2EsCDtjIzsi7Hsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukOiAnJXMnIgorCisjOiBkaWZmLmM6NTUwMAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICLtjIzsnbzsnbQg64SI66y0IOunjuyVhOyEnCDrtoDsoJXtmZXtlZwg7J2066aEIOuwlOq+uOq4sCDqsoDsg4kg6riw64ql7J2EIOqxtOuEiOucgeuLiOuLpC4iCisKKyM6IGRpZmYuYzo1NTAzCittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICLtjIzsnbzsnbQg64SI66y0IOunjuyVhOyEnCDsiJjsoJXtlZwg6rK966Gc7J2YIOuzteyCrOuzuOunjCDssL7slZjsirXri4jri6QuIgorCisjOiBkaWZmLmM6NTUwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgIiVzIOuzgOyImOulvCDstZzshoztlZwgJWQo7Jy8KeuhnCDshKTsoJXtlZjqs6Ag66qF66C57J2EIOuLpOyLnCDsi5zrj4TtlbQg67O07Iut7Iuc7JikLiIKKworIzogZGlyLmM6MTg2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiJyVzJyDrlJTroInthLDrpqzrpbwg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGRpci5jOjIxMDkKK21zZ2lkICJmYWlsZWQgdG8gZ2V0IGtlcm5lbCBuYW1lIGFuZCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi7Luk64SQIOydtOumhOqzvCDsoJXrs7Trpbwg6rCA7KC47Jik64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogZGlyLmM6MjIzMworbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbi4iCittc2dzdHIgIuydtCDsi5zsiqTthZwg65iQ64qUIOychOy5mOyXkOyEnOuKlCDstpTsoIHrkJjsp4Ag7JWK64qUIOy6kOyLnOulvCDsgqzsmqntlZjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogZGlyLmM6MzA3NSBkaXIuYzozMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICIlc+yXkCDtlYTsmpTtlZwg65SU66CJ7YSw66as66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBkaXIuYzozMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIiclcyfsl5DshJwgJyVzJyjsnLwp66GcIGdpdCDrlJTroInthLDrpqzrpbwg7Jiu6rKo7JisIOyImCDsl4bsirXri4jri6QiCisKKyM6IGVkaXRvci5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgIu2ejO2KuDog7Y647KeR6riw6rCAIO2MjOydvOydhCDri6vquLDrpbwg6riw64uk66as64qUIOykkeyeheuLiOuLpC4uLiVjIgorCisjOiBlbnRyeS5jOjE3NworbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICLrgrTsmqkg7ZWE7YSw66eBIgorCisjOiBlbnRyeS5jOjQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgIiclcycg7YyM7J287JeQIHN0YXTsnYQg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGZldGNoLW9iamVjdC5jOjE3Cittc2dpZCAiUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJVUkwg7JeG64qUIOumrOuqqO2KuCIKKworIzogZmV0Y2gtcGFjay5jOjI1NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiDslpXsnYAg66qp66Gd7J2EIOyYiOyDge2VqCIKKworIzogZmV0Y2gtcGFjay5jOjI2NgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBBQ0svTkFL6rCAIOyZgOyVvCDtlZjsp4Drp4wsIO2UjOufrOyLnCDtjKjtgrfsnYQg67Cb7JWY7Iq164uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6Mjg1IGJ1aWx0aW4vYXJjaGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgIuumrOuqqO2KuCDsmKTrpZg6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IEFDSy9OQUvqsIAg7JmA7JW8IO2VmOyngOunjCwgJyVzJ+ydhCjrpbwpIOuwm+yVmOyKteuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjMzOAorbXNnaWQgIi0tc3RhdGVsZXNzLXJwYyByZXF1aXJlcyBtdWx0aV9hY2tfZGV0YWlsZWQiCittc2dzdHIgIi0tc3RhdGVsZXNzLXJwYyDsmLXshZjsnYAgbXVsdGlfYWNrX2RldGFpbGVk6rCAIO2VhOyalO2VqeuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjQyOSBmZXRjaC1wYWNrLmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgInNoYWxsb3cg7KSE7J20IOyemOuqu+uQqDogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzUgZmV0Y2gtcGFjay5jOjEzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgInVuc2hhbGxvdyDspITsnbQg7J6Y66q765CoOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQzNyBmZXRjaC1wYWNrLmM6MTMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3Qgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq46rCAIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NDAgZmV0Y2gtcGFjay5jOjEzMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq47JeQIOyYpOulmDogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NDIgZmV0Y2gtcGFjay5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2hhbGxvdyBmb3VuZDogJXMiCittc2dzdHIgInNoYWxsb3fqsIAg7JeG7Iq164uI64ukOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ0NSBmZXRjaC1wYWNrLmM6MTMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICJzaGFsbG93L3Vuc2hhbGxvd+qwgCDsmYDslbwg7ZWY7KeA66eMLCAlc+ydhCjrpbwpIOuwm+yVmOyKteuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgJWQgJXMiCittc2dzdHIgIuuwm+ydjDogJXMgJWQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgIuyemOuqu+uQnCDsu6TrsIsgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgIu2PrOq4sO2VqCIKKworIzogZmV0Y2gtcGFjay5jOjU0MyBwcm9ncmVzcy5jOjIyOQorbXNnaWQgImRvbmUiCittc2dzdHIgIuyZhOujjCIKKworIzogZmV0Y2gtcGFjay5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAi67Cb7J2MOiAlcyAoJWQpICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiCittc2dzdHIgIiVzIO2VreuqqeydhCDsmYTro4zroZwg7ZGc7IucIgorCisjOiBmZXRjaC1wYWNrLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICLsnbTrr7ggJXMgKCVzKSDsnojsnYwiCisKKyM6IGZldGNoLXBhY2suYzo4NjkKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGFjazog7IKs7J2065Oc67C065OcIOuUlOupgO2LsO2UjOugieyEnOulvCBmb3Jr7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzo4NzcKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIHBhY2sgaGVhZGVyIgorbXNnc3RyICLtlITroZzthqDsvZwg7Jik66WYOiDsnpjrqrvrkJwg66y27J2MIO2XpOuNlCIKKworIzogZmV0Y2gtcGFjay5jOjk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgImZldGNoLXBhY2s6ICVzIOuqheugueydhCBmb3Jr7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzo5NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyDsi6TtjKgiCisKKyM6IGZldGNoLXBhY2suYzo5NjIKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICLsgqzsnbTrk5zrsLTrk5wg65SU66mA7Yuw7ZSM66CJ7ISc7JeQIOyYpOulmCIKKworIzogZmV0Y2gtcGFjay5jOjk4OQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2xpZW50cyIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIHNoYWxsb3cg7YG065287J207Ja47Yq466W8IOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzo5OTMKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICLshJzrsoTsl5DshJwgbXVsdGlfYWNrX2RldGFpbGVk66W8IOyngOybkO2VqeuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjk5NgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBuby1kb25lIgorbXNnc3RyICLshJzrsoTsl5DshJwgbm8tZG9uZeydhCDsp4Dsm5Dtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDAyCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2FjayIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIG11bHRpX2Fja+ulvCDsp4Dsm5Dtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDA2Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZC02NGsiCittc2dzdHIgIuyEnOuyhOyXkOyEnCBzaWRlLWJhbmQtNjRr66W8IOyngOybkO2VqeuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjEwMTAKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kIgorbXNnc3RyICLshJzrsoTsl5DshJwgc2lkZS1iYW5k66W8IOyngOybkO2VqeuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjEwMTQKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIGFsbG93LXRpcC1zaGExLWluLXdhbnTrpbwg7KeA7JuQ7ZWp64uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTAxOAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorbXNnc3RyICLshJzrsoTsl5DshJwgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudOulvCDsp4Dsm5Dtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDI4Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG9mcy1kZWx0YSIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIG9mcy1kZWx0YeulvCDsp4Dsm5Dtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDM0IGZldGNoLXBhY2suYzoxMjA0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGZpbHRlciIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIO2VhO2EsOulvCDsp4Dsm5Dtlanri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIuyEnOuyhCDrsoTsoITsnbQgJS4qc+yeheuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjEwNDgKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgIuyEnOuyhOyXkOyEnCAtLXNoYWxsb3ctc2lnbmVkIOyYteyFmOydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTA1MgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICLshJzrsoTsl5DshJwgLS1zaGFsbG93LWV4Y2x1ZGUg7Ji17IWY7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGZldGNoLXBhY2suYzoxMDU0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIuyEnOuyhOyXkOyEnCAtLWRlZXBlbiDsmLXshZjsnYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjEwNjUKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAi6rO17Ya1IOy7pOuwiyDsl4bsnYwiCisKKyM6IGZldGNoLXBhY2suYzoxMDc3IGZldGNoLXBhY2suYzoxNDE0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiDqsIDsoLjsmKTquLAg7Iuk7YyoLiIKKworIzogZmV0Y2gtcGFjay5jOjExOTkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICLshJzrsoTsl5DshJwgc2hhbGxvdyDsmpTssq3snYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogZmV0Y2gtcGFjay5jOjE1ODQKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAi7ZW064u57ZWY64qUIOumrOuqqO2KuCDtl6Trk5zqsIAg7JeG7Iq164uI64ukIgorCisjOiBmZXRjaC1wYWNrLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIuq3uOufsCDrpqzrqqjtirjqsIAg66CI7Y2865+w7Iqk6rCAIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGZldGNoLXBhY2suYzoxNjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICLshJzrsoTsl5DshJwg7JWM66Ck7KeA7KeAIOyViuydgCAlcyDsmKTruIzsoJ3tirjsl5Ag64yA7ZWcIOyalOyyreydhCDtl4jsmqntlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTg1Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGfsl5DshJwg642w7J207YSw66W8IOyEnOuqhe2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjEwCittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAi7J6E7IucIO2MjOydvOydhCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ3BnLWludGVyZmFjZS5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAi67aE66as65CcIOyEnOuqheydhCAnJXMn7JeQIOyTsOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGdyYXBoLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAibG9nLmdyYXBoQ29sb3Jz7JeQIOyemOuqu+uQnCDsg4nsnYQgKCclLipzJykg66y07Iuc7ZWp64uI64ukIgorCisjOiBncmVwLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJzogJXPsnYQo66W8KSDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ3JlcC5jOjIwMzcgc2V0dXAuYzoxNjQgYnVpbHRpbi9jbG9uZS5jOjQwOSBidWlsdGluL2RpZmYuYzo4MQorIzogYnVpbHRpbi9ybS5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICInJXMn7JeQIOuMgO2VtCBzdGF0KCnsnbQg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBncmVwLmM6MjA0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICInJXMnOiDsnb3ri6TqsIAg7J6Y66a8IgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAi7J6R7JeFIOqzteqwhCDsi5zsnpEgKOywuOqzoDogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBoZWxwLmM6MjQKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAi67OA6rK9IOyCrO2VreyXkCDrjIDtlZwg7J6R7JeFICjssLjqs6A6IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKKworIzogaGVscC5jOjI1Cittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICLsu6TrsIsg64K07Jet6rO8IOyDge2DnCDrs7TquLAgKOywuOqzoDogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAi7Luk67CLIOuCtOyXreydhCDtgqTsmrDqs6AsIO2RnOyLnO2VmOqzoCwg7KGw7J6R7ZWY6riwIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgIu2YkeuPmSDsnpHsl4UgKOywuOqzoDogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKKworIzogaGVscC5jOjMxCittc2dpZCAiTWFpbiBQb3JjZWxhaW4gQ29tbWFuZHMiCittc2dzdHIgIuyjvOyalCDsgqzsmqnsnpDsmqkg66qF66C5IgorCisjOiBoZWxwLmM6MzIKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIuuztOyhsCDrqoXroLkgLyDsobDsnpEg6riw64qlIgorCisjOiBoZWxwLmM6MzMKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICLrs7TsobAg66qF66C5IC8g7KCV67O0IO2ajeuTnSDquLDriqUiCisKKyM6IGhlbHAuYzozNAorbXNnaWQgIkludGVyYWN0aW5nIHdpdGggT3RoZXJzIgorbXNnc3RyICLri6Trpbgg7IKs656M6rO8IOyGjO2GtSIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICLsoIDsiJjspIAg66qF66C5LyDsobDsnpEg6riw64qlIgorCisjOiBoZWxwLmM6MzYKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICLrs7TsobAg66qF66C5IC8g7KCV67O0IO2ajeuTnSDquLDriqUiCisKKyM6IGhlbHAuYzozNworbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNoaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAi67O07KGwIOuqheuguSAvIOyggOyepeyGjCDrj5nquLDtmZQg6riw64qlIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICLrs7TsobAg66qF66C5IC8g64K067aAIOyCrOyaqSDquLDriqUiCisKKyM6IGhlbHAuYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICInJXMn7JeQIOyeiOuKlCDquYMg66qF66C5IgorCisjOiBoZWxwLmM6MzAwCittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICLri6TrpbggJFBBVEjsl5Ag7J6I64qUIOq5gyDrqoXroLkiCisKKyM6IGhlbHAuYzozMDkKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIuuLpOydjOydgCDsl6zrn6zqsIDsp4Ag7IOB7Zmp7JeQ7IScIOyekOyjvCDsgqzsmqntlZjripQg6rmDIOuqheugueyeheuLiOuLpDoiCisKKyM6IGhlbHAuYzozNTggZ2l0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAi7KeA7JuQ7ZWY7KeAIOuqheuguSDsl7TqsbAg67Cp7IudICclcyciCisKKyM6IGhlbHAuYzo0MDUKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAi7J6Q7KO8IOyCrOyaqe2VmOuKlCDquYMg7JWI64K07ISc64qUIOuLpOydjOqzvCDqsJnsirXri4jri6Q6IgorCisjOiBoZWxwLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIiclcyfsnYAo64qUKSDquYMg66qF66C57Jy866GcIOuztOydtOyngOunjCwg7Iuk7ZaJ7ZWgIOyImFxuIgorIuyXhuyKteuLiOuLpC4g7JWE66eI64+EIGdpdC0lcyDrp53qsIDsp4Qg6rKDIOqwmeyKteuLiOuLpC4iCisKKyM6IGhlbHAuYzo1MjYKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAi7Ja065286528LiDsi5zsiqTthZzsl5Ag6rmDIOuqheugueydtCDtlZjrgpjrj4Qg7JeG64uk6rOgIOuCmOyYteuLiOuLpC4iCisKKyM6IGhlbHAuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi6rK96rOgOiDsnbTrpoTsnbQgJyVzJ+yduCDquYMg66qF66C57J2EIOyLpO2Wie2WiOyngOunjCwg6re4IOuqheugueydtCDsl4bsirXri4jri6QuIgorCisjOiBoZWxwLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIiclcycg66qF66C57J2065286rOgIOqwgOygle2VmOqzoCDqs4Tsho3tlanri4jri6QuIgorCisjOiBoZWxwLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgaW4gJTAuMWYgc2Vjb25kcywgYXNzdW1pbmcgdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIiUwLjFm7LSIIOuSpOyXkCAnJXMnIOuqheugueydtOudvOqzoCDqsIDsoJXtlZjqs6Ag6rOE7IaN7ZWp64uI64ukLiIKKworIzogaGVscC5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcyfsnYAo64qUKSDquYMg66qF66C57J20IOyVhOuLmeuLiOuLpC4gJ2dpdCAtLWhlbHAn66W8IOywuOqzoO2VmOyLreyLnOyYpC4iCisKKyM6IGhlbHAuYzo1NzAKK21zZ2lkICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kIGlzIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kcyBhcmUiCittc2dzdHJbMF0gIiIKKyJcbiIKKyLqsIDsnqUg67mE7Iq37ZWcIOuqheugueydgCIKKworIzogaGVscC5jOjU4NQorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPOyYteyFmD5dIgorCisjOiBoZWxwLmM6NjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKKworIzogaGVscC5jOjY1NgorbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIuuLpOydjOydhCDsnZjrj4TtlZjsi6Ag6rKDIOyVhOuLiOyXiOuCmOyalD8iCisKKyM6IGlkZW50LmM6MzQyCittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIOuCtOqwgCDriITqtazsnbjsp4Ag7ISk7KCV7ZWY7Iut7Iuc7JikLlxuIgorIlxuIgorIuuLpOydjOydhCDsi6TtlontlZjrqbQsXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCLrgrQg7J2066aEXCJcbiIKKyJcbiIKKyLqs4TsoJXsnZgg6riw67O4IOyLoOybkCDsoJXrs7Trpbwg7ISk7KCV7ZWp64uI64ukLlxuIgorIi0tZ2xvYmFsIOyYteyFmOydhCDrubzrqbQg7J20IOyggOyepeyGjOyEnOunjCDsi6Dsm5Ag7KCV67O066W8IOyEpOygle2VqeuLiOuLpC5cbiIKKyJcbiIKKworIzogaWRlbnQuYzozNjYKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICLrqZTsnbwg7KO87IaM6rCAIOyXhuqzoCDsnpDrj5kg6rKA7IKs6rCAIOq6vOyguCDsnojsirXri4jri6QiCisKKyM6IGlkZW50LmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiCittc2dzdHIgIuuplOydvCDso7zshozrpbwg7J6Q64+ZIOqygOyCrO2VoCDsiJgg7JeG7Iq164uI64ukICgnJXMnIOywvuydjCkiCisKKyM6IGlkZW50LmM6MzgxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICLsnbTrpoTsnbQg7JeG6rOgIOyekOuPmSDqsoDsgqzqsIAg6rq87KC4IOyeiOyKteuLiOuLpCIKKworIzogaWRlbnQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAi7J2066aE7J2EIOyekOuPmSDqsoDsgqztlaAg7IiYIOyXhuyKteuLiOuLpCAoJyVzJyDssL7snYwpIgorCisjOiBpZGVudC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgIuu5iCDsnbTrpoTsnZgg7Iug7JuQIOygleuztOuKlCAoPCVzPuyXkCDrjIDtlbQpIO2XiOyaqe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGlkZW50LmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICLsnbTrpoTsnbQg7ZeI7Jqp7ZWY7KeAIOyViuuKlCDrrLjsnpDroZzrp4wg7J2066Oo7Ja07KC4IOyeiOyKteuLiOuLpDogJXMiCisKKyM6IGlkZW50LmM6NDE2IGJ1aWx0aW4vY29tbWl0LmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLsi5zqsIEg7ZiV7Iud7J20IOyemOuqu+uQmOyXiOyKteuLiOuLpDogJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjM2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAi7Jes65+sIOqwnOydmCDtlYTthLAg7JaR7Iud7J2AIOqysO2VqeuQoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxMjYKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHBhcnRpYWwgY2xvbmUgcHJvbWlzb3IgcmVtb3RlIgorbXNnc3RyICLtlITrnbzrr7jshJwg66as66qo7Yq4IOyggOyepeyGjOuhnOu2gO2EsCDrtoDrtoQg67O17KCc66W8IO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisiJyVzLmxvY2snIO2MjOydvOydhCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpDogJXMuXG4iCisiXG4iCisi7J20IOyggOyepeyGjOyXkOyEnCDri6Trpbgg6rmDIO2UhOuhnOyEuOyKpOqwgCDsi6Ttlokg7KSR7J24IOqyg+ycvOuhnCDrs7TsnoXri4jri6QuICjsmIjrpbxcbiIKKyLrk6TslrQgJ2dpdCBjb21taXQnIOuqheugueycvOuhnCDtjrjsp5HquLDqsIAg7Je066CkIOyeiOuLpOuToOyngC4pIOuqqOuToCDtlITroZzshLjsiqTrpbxcbiIKKyLrgZ3rg4jripTsp4Ag7ZmV7J247ZWY7Iuc6rOgIOuLpOyLnCDsi5zrj4TtlbQg67O07Iut7Iuc7JikLiDqt7jrnpjrj4Qg6rOE7IaNIOyLpO2MqO2VmOuptCwg7J20XG4iCisi7KCA7J6l7IaM7JeQ7IScIOq5gyDtlITroZzshLjsiqTqsIAg7KCE7JeQIOydtOyDgSDsooXro4ztlojsnYQg7IiY64+EIOyeiOyKteuLiOuLpDpcbiIKKyLsiJjrj5nsnLzroZwg7ZW064u5IO2MjOydvOydhCDsoJzqsbDtlZjqs6Ag6rOE7IaN7ZWY7Iut7Iuc7JikLiIKKworIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICInJXMubG9jayfsnYQg66eM65OkIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBtZXJnZS5jOjcxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLsupDsi5zrpbwg7J2964qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogbWVyZ2UuYzoxMzYgYnVpbHRpbi9hbS5jOjE5NDYgYnVpbHRpbi9hbS5jOjE5ODAgYnVpbHRpbi9jaGVja291dC5jOjM3OAorIzogYnVpbHRpbi9jaGVja291dC5jOjYwNiBidWlsdGluL2Nsb25lLmM6NzYxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLsg4gg7J24642x7IqkIO2MjOydvOydhCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk4Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIijsnpjrqrvrkJwg7Luk67CLKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICInJXMnIOqyveuhnOyXkCDrjIDtlbQgYWRkaW5mb19jYWNoZSDsi6TtjKguIOuzke2VqSDspJHsp4AuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgdG8gcmVmcmVzaCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgIiclcycg6rK966Gc7JeQIOuMgO2VtCBhZGRpbmZvX2NhY2hlIOyDiOuhnCDqs6Dsuagg7Iuk7YyoLiDrs5Htlakg7KSR7KeALiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NDEwCittc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIu2KuOumrCDruYzrk5zsl5Ag7Jik66WYIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiJyVzJyDqsr3roZwg66eM65Ok6riw7JeQIOyLpO2MqO2WiOyKteuLiOuLpCVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAi7ZWY7JyEIOuUlOugie2EsOumrOyXkCDqs7XqsITsnYQg66eM65Oc66Ck6rOgICVz7J2EKOulvCkg7KCc6rGw7ZWp64uI64ukXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkwNiBtZXJnZS1yZWN1cnNpdmUuYzo5MjUKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICI6IOyVhOuniOuPhCBEL0Yg7Lap64+MPyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyDsnITsuZjsnZgg7LaU7KCB65CY7KeAIOyViuuKlCDtjIzsnbzsnYQg7J6D6riw66W8IOqxsOu2gO2VqeuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTU3IGJ1aWx0aW4vY2F0LWZpbGUuYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAiJXMgJyVzJyDsmKTruIzsoJ3tirjrpbwg7J297J2EIOyImCDsl4bsnYwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICIlcyAnJXMn7JeQIOuMgO2VtCDruJTroa3snYQg7JiI7IOBIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiCittc2dzdHIgIiclcyfsnYQo66W8KSDsl6zripTrjbAg7Iuk7YyoOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICInJXMnIOyLrOuzvOumrSDrp4Htgazsl5Ag7Iuk7YyoOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTk5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIuuLpOydjOydhCDslrTrlrvqsowg7ZWg7KeAIOyVjCDsiJgg7JeG7Iq164uI64ukOiAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiJXMg7ZWY7JyEIOuqqOuTiCDrs5Htlakg7Iuk7YyoICjqsIDsoLjsmKTsp4Ag7JWK7J2MKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE5MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAiJXMg7ZWY7JyEIOuqqOuTiCDrs5Htlakg7Iuk7YyoICjsu6TrsIvsnbQg7JeG7Iq164uI64ukKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAiJXMg7ZWY7JyEIOuqqOuTiCDrs5Htlakg7Iuk7YyoICjsu6TrsIvsnbQg67OR7ZWpIOuyoOydtOyKpOulvCDrlLDrpbTsp4Ag7JWK7Iq164uI64ukKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwOCBtZXJnZS1yZWN1cnNpdmUuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICIlcyDtlZjsnIQg66qo65OI7J2EIOuLpOydjCDsu6TrsIvsnLzroZwg7KCV67Cp7ZalIOynhO2WiToiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTEgbWVyZ2UtcmVjdXJzaXZlLmM6MTIyMworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIgorbXNnc3RyICIlcyDtlZjsnIQg66qo65OI7J2EIOygleuwqe2WpSDsp4TtlokiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kKSIKK21zZ3N0ciAiJXMg7ZWY7JyEIOuqqOuTiCDrs5Htlakg7Iuk7YyoICjrs5HtlantlaAg65WMIOuUsOudvOqwiCDsu6TrsIvsnbQg7JeG7Iq164uI64ukKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiJXMg7ZWY7JyEIOuqqOuTiCDrs5Htlakg7Iuk7YyoICjsoJXrsKntlqXsnbQg7JWE64uZ64uI64ukKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MAorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiOyXkCDrjIDtlbQg6rCA64ql7ZWcIOuzke2VqSDrsKnrspXsnYQg7LC+7JWY7Iq164uI64ukOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAiIgorIuydtCDsoJzslYjsnbQg66ee7Jy866m0IOyduOuNseyKpOyXkCDstpTqsIDtlZjrqbQg65Cp64uI64ukLiDsmIjrpbwg65Ok7Ja0XG4iCisi64uk7J2MIOuqheugueydhCDsgqzsmqntlZjrqbQ6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyLsoJzslYjsnYQg67Cb7JWE65Ok7J206rKMIOuQqeuLiOuLpC5cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICIlcyDtlZjsnIQg66qo65OIIOuzke2VqSDsi6TtjKggKOuzke2VqeydtCDsl6zrn6zqsJwg7J6I7Iq164uI64ukKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTMyMQorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICLrgrTrtoAg67OR7ZWpIOyLpO2WieyXkCDsi6TtjKgiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiJXPsnYQo66W8KSDrjbDsnbTthLDrsqDsnbTsiqTsl5Ag7LaU6rCA7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICLsnpDrj5kg67OR7ZWpOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQyMworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgd3JpdGluZyB0byAlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIuyYpOulmDogJXMg7JyE7LmY7J2YIOy2lOyggeuQmOyngCDslYrripQg7YyM7J287J2EIOyeg+q4sOulvCDqsbDrtoDtlanri4jri6QuIOuMgOyLoCAlc+yXkCDslIHri4jri6QuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgIiIKKyLstqnrj4wgKCVzL+yCreygnCk6ICVzICjsnITsuZggJXMpIOuwjyAlcyAoJXPsl5DshJwpIOyCreygnC4gJXMg67KE7KCE7J2YICVzIO2KuOumrOyXkCDrgqjsnYwuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZS4iCittc2dzdHIgIiIKKyLstqnrj4wgKCVzL+yCreygnCk6ICVzICjsnITsuZggJXMpIOyCreygnCwgJXPsl5DshJwgJXMo7Jy8KeuhnCAo7JyE7LmYICVzKS4gJXMg67KE7KCE7J2YICVzIO2KuCIKKyLrpqzsl5Ag64Ko7J2MLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisi7Lap64+MICglcy/sgq3soJwpOiAlcyAo7JyE7LmYICVzKSDrsI8gJXMgKOychOy5mCAlcykg7IKt7KCcLiAlcyDrsoTsoITsnZggJXMg7Yq466as7JeQICVzKOycvCkiCisi66GcIOuCqOydjC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIuy2qeuPjCAoJXMv7IKt7KCcKTogJXMgKOychOy5mCAlcykg7IKt7KCcLCAlc+yXkOyEnCAlcyjsnLwp66GcICjsnITsuZggJXMpLiAlcyDrsoTsoITsnZggJXMg7Yq4IgorIuumrOyXkCDrgqjsnYwgKOychOy5mCAlcykuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI2Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICLsnbTrpoTrsJTqvrjquLAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjYKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLsnbTrpoTrsJTqv4giCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODAgbWVyZ2UtcmVjdXJzaXZlLmM6MTczNiBtZXJnZS1yZWN1cnNpdmUuYzoyMzY4CisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAiJXMg7JyE7LmY7J2YIOuzgOqyveuQnCDtjIzsnbzsnYQg7J6D6riw66W8IOqxsOu2gO2VqeuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXPsnYAo64qUKSAlc+yXkCDsnojripQg65SU66CJ7YSw66as66GcICVzKOycvCnroZwg7J2066aE7J2EIOuwlOq/ieuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMg7JyE7LmY7J2YIOy2lOyggeuQmOyngCDslYrripQg7YyM7J287J2EIOyeg+q4sOulvCDqsbDrtoDtlanri4jri6QuIOuMgOyLoCAlcyDstpTqsIAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIuy2qeuPjCAo7J2066aE67CU6r646riwL+ydtOumhOuwlOq+uOq4sCk6IFwiJTMkc1wiIOu4jOuenOy5mOyXkOyEnCDsnbTrpoTrsJTqvrjquLAgXCIlMSRzXCItPlwiJTIkcyIKKyJcIiBcIiU2JHNcIiDruIzrnpzsuZjsl5DshJwg7J2066aEIOuwlOq+uOq4sCBcIiU0JHNcIi0+XCIlNSRzXCIlNyRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjMwCittc2dpZCAiIChsZWZ0IHVucmVzb2x2ZWQpIgorbXNnc3RyICIgKO2VtOqysOuQmOyngCDslYrsnYwpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIuy2qeuPjCAocmVuYW1lL3JlbmFtZSk6IOydtOumhCDrsJTqvrjquLAgJXMtPiVzICjsnITsuZggJXMpLiDsnbTrpoQg67CU6r646riwICVzLT4lcyAo7JyE7LmYICIKKyIlcykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCittc2dzdHIgIuuMgOyLoCDsnbTrpoTsnYQgJXPsl5DshJwgJXMo7Jy8KeuhnCDrsJTqvrjqs6AgJXPsl5DshJwgJXMo7Jy8KeuhnCDrsJTqv4nri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAiIgorIiVzIOychOy5mOydmCDstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvOydhCDsnoPquLDrpbwgKOyeg+yWtOuyhOumtCDsmIjsoJXsnbTsp4Drp4wpIOqxsOu2gO2VqeuLiOuLpC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogVW5jbGVhciB3aGVyZSB0byBwbGFjZSAlcyBiZWNhdXNlICIKKyJkaXJlY3RvcnkgJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdpdGggbm8gZGVzdGluYXRpb24gIgorImdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisi7Lap64+MICjrlJTroInthLDrpqwg7J2066aEIOuwlOq+uOq4sCDrtoTrpqwpOiAlcyDtjIzsnbzsnYQg7Ja065SU7JeQIOuGk+ydhOyngCDrtojrtoTrqoXtlanri4jri6QuICVzIOuUlCIKKyLroInthLDrpqzqsIAg7Jes65+sIOqwnOydmCDri6Trpbgg65SU66CJ7YSw66as66GcIOydtOumhOydtCDrsJTrgIzsl4jqs6Ag7YyM7J28IOuLpOyImOqwgCDrk6TslrQg7J6I64qUIOuMgOyDgSIKKyLsnbQg7JeG6riwIOuVjOusuOyeheuLiOuLpC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogRXhpc3RpbmcgZmlsZS9kaXIgYXQgJXMgaW4gdGhlIHdheSBvZiAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZShzKSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcgcGF0aChzKSB0aGVyZTogJXMuIgorbXNnc3RyICIiCisi7Lap64+MICjrrLXsi5zsoIHsnbgg65SU66CJ7YSw66asIOydtOumhCDrsJTqvrjquLApOiAlcyDsnITsuZjsnZgg6riw7KG0IO2MjOydvC/rlJTroInthLDrpqzqsIAg66y17Iuc7KCB7Jy8IgorIuuhnCDrlJTroInthLDrpqwg7J2066aE7J20IOuwlOuAjOyWtCDri6TsnYwg6rK966Gc6rCAIOuTpOyWtOqwiCDsmIjsoJXsnoXri4jri6Q6ICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTk5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBDYW5ub3QgbWFwIG1vcmUgdGhhbiBvbmUgcGF0aCB0byAlczsgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRyaWVkIHRvIHB1dCB0aGVzZSBwYXRocyB0aGVyZTogJXMiCittc2dzdHIgIiIKKyLstqnrj4wgKOusteyLnOyggeyduCDrlJTroInthLDrpqwg7J2066aEIOuwlOq+uOq4sCk6IOyXrOufrCDqsJzsnZgg6rK966Gc66W8ICVz7JeQIOuMgOydke2VoCDsiJgg7JeG7Iq164uIIgorIuuLpC4g66y17Iuc7KCB7J24IOuUlOugie2EsOumrCDsnbTrpoQg67CU6r646riwIOq4sOuKpeydgCDsnbTrk6Qg6rK966Gc66W8IO2VtOuLuSDsnITsuZjsl5Ag64aT64+E66GdIOyLnOuPhCIKKyLtlanri4jri6Q6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyLstqnrj4wgKHJlbmFtZS9yZW5hbWUpOiDsnbTrpoQg67CU6r646riwICVzLT4lcyAo7JyE7LmYICVzKS4g7J2066aEIOuwlOq+uOq4sCAlcy0+JXMgKOychOy5mCAiCisiJXMpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyAlcyAtPiAlcyByZW5hbWUgdG8gJXMsIGJlY2F1c2UgJXMgaXRzZWxmIHdhcyAiCisicmVuYW1lZC4iCittc2dzdHIgIiIKKyLqsr3qs6A6ICVzIC0+ICVzIOydtOumhCDrsJTqvrjquLAgKOuMgOyDgSAlcykg7KCB7JqpIOqxsOu2gC4gJXMg7J6Q7LK06rCAIOydtOuvuCDsnbTrpoTsnbQg67CU64CM7JeIIgorIuyKteuLiOuLpC4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAlcyBhZGRlZCBpbiAlcyIKK21zZ3N0ciAi7Lap64+MIChyZW5hbWUvYWRkKTog7J2066aEIOuwlOq+uOq4sCAlcy0+JXMgKOychOy5mCAlcykuICVzIOy2lOqwgCAo7JyE7LmYICVzKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICLrs5HtlanrkJwgJXPsnYQo66W8KSDstpTqsIDtlanri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI3NTggbWVyZ2UtcmVjdXJzaXZlLmM6MzA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAi64yA7IugICVzKOycvCnroZwg7LaU6rCA7ZWp64uI64ukIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiJXMg7Jik67iM7KCd7Yq466W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICIlcyDsmKTruIzsoJ3tirjripQg67iU66Gt7J20IOyVhOuLmeuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk4NgorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAi7IiY7KCVIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTg2Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIuyImOygleuQqCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk5NworbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIuuCtOyaqSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAwNAorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgIuy2lOqwgC/stpTqsIAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICLqsbTrhIjrm7DquLA6ICVzICjquLDsobTqs7wg6rCZ6rKMIOuzke2VqSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNTUgZ2l0LXN1Ym1vZHVsZS5zaDo4OTUKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgIu2VmOychCDrqqjrk4giCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIuy2qeuPjCAoJXMpOiAlc+yXkCDrs5Htlakg7Lap64+MIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICLsoJzqsbA6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjA0Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgIu2MjOydvC/rlJTroInthLDrpqwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyMTAKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAi65SU66CJ7YSw66asL+2MjOydvCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIxNworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIuy2qeuPjCAoJXMpOiDsnbTrpoTsnbQgJXPsnbgg65SU66CJ7YSw66as6rCAICVz7JeQIOyeiOyKteuLiOuLpC4gJXPsnYQo66W8KSAlcyjsnLwp66GcIOy2lOqwgO2VqeuLiOuLpCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIuy2lOqwgDogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBtZXJnZSAoZGlydHk6ICVzKSIKK21zZ3N0ciAi67OA6rK965CcIOyduOuNseyKpDog67OR7ZWp7ZWgIOyImCDsl4bsirXri4jri6QgKGRpcnR5OiAlcykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNzEKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICLsnbTrr7gg7JeF642w7J207Yq4IOyDge2DnOyeheuLiOuLpCEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICIlcyDrsI8gJXMg7Yq466as7J2YIOuzke2VqeydtCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzNzkKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAi67OR7ZWpOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAi6rO86rGw7J2YIOqzte2GtSDsu6TrsIsgJXXqsJwg67Cc6rKsOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQzMQorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAi67OR7ZWpIOqysOqzvOyXkCDsu6TrsIvsnbQg7JeG7Iq164uI64ukIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiJyVzJyDsmKTruIzsoJ3tirjrpbwg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1MTEgYnVpbHRpbi9tZXJnZS5jOjY1OSBidWlsdGluL21lcmdlLmM6ODE2Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAi7J24642x7Iqk66W8IOyTuCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisi7J207KCE7J2YIOuFuO2KuCDrs5HtlansnYQg64ukIOuniOy5mOyngCDslYrslZjsirXri4jri6QgKCVzIOyeiOydjCkuXG4iCisi7IOI66GcIOuFuO2KuCDrs5HtlansnYQg7Iuc7J6R7ZWY6riwIOyghOyXkCAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0J1xuIgorIuuYkOuKlCAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQn66GcIOydtOyghCDrs5HtlansnYQg7Luk67CLL+ykkeyngO2VmOyLreyLnOyYpC4iCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIuuFuO2KuCDrs5Htlakg7J6R7JeF7J2EIOuLpCDrp4jsuZjsp4Ag7JWK7JWY7Iq164uI64ukLiAoJXMg7J6I7J2MKSIKKworIzogbm90ZXMtdXRpbHMuYzo0MworbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAi7LSI6riw7ZmU7ZWY7KeAIOyViuyVmOqxsOuCmCDroIjtjbzrn7DsiqTtlZjsp4Ag7JWK7J2AIG5vdGVzIO2KuOumrOulvCDsu6TrsIvtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogbm90ZXMtdXRpbHMuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwgbm90ZXMucmV3cml0ZU1vZGUg6rCSOiAnJXMnIgorCisjOiBub3Rlcy11dGlscy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiJXPsl5DshJwg64W47Yq466W8IOuLpOyLnCDsk7DquLDrpbwg6rGw67aA7ZWp64uI64ukIChyZWZzL25vdGVzLyDrsJbsnoQpIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mCisjLiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMKKyMuIGl0cyB2YWx1ZS4KKyMuCisjOiBub3Rlcy11dGlscy5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIuyemOuqu+uQnCAlcyDqsJI6ICclcyciCisKKyM6IG9iamVjdC5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq466W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogcGFja2ZpbGUuYzo1NjMKK21zZ2lkICJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIKK21zZ3N0ciAi7Jik7ZSE7IWL7J20IOustuydjCDtjIzsnbwg7JWe7J6F64uI64ukICjrp53qsIDsp4QgLmlkeD8pIgorCisjOiBwYWNrZmlsZS5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIgorbXNnc3RyICLsmKTtlITshYvsnbQgJXPsnZgg66y27J2MIOyduOuNseyKpCDsi5zsnpHrs7Tri6Qg7JWe7J6F64uI64ukICjrp53qsIDsp4Qg7J24642x7IqkPykiCisKKyM6IHBhY2tmaWxlLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmV5b25kIGVuZCBvZiBwYWNrIGluZGV4IGZvciAlcyAodHJ1bmNhdGVkIGluZGV4PykiCittc2dzdHIgIuyYpO2UhOyFi+ydtCAlc+ydmCDrrLbsnYwg7J24642x7IqkIOuBneuztOuLpCDrkqTsnoXri4jri6QgKOunneqwgOynhCDsnbjrjbHsiqQ/KSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjYyMQorbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAi7IKs7Jqp67KVOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgIOuYkOuKlDogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo2ODgKK21zZ2lkICItTlVNIgorbXNnc3RyICItTlVNIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICLtmJXsi53snbQg7J6Y66q765CcIOunjOujjCDsi5zqsIE6ICclcyciCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIuyemOuqu+uQnCDtmJXsi53snZgg7Jik67iM7KCd7Yq4IOydtOumhCAnJXMnIgorCisjOiBwYXRoLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICIlc+ydhCjrpbwpIOq3uOujueyXkOyEnCDsk7DquLAg6rCA64ql7ZWY64+E66GdIOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBwYXRoc3BlYy5jOjEyOQorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICLsho3shLEg6rCS7J2YIOuniOyngOuniSDrrLjsnpDroZwgJ1xcXFwnIOydtOyKpOy8gOydtO2UhCDrrLjsnpDripQg7ZeI7Jqp7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogcGF0aHNwZWMuYzoxNDcKK21zZ2lkICJPbmx5IG9uZSAnYXR0cjonIHNwZWNpZmljYXRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIu2VmOuCmOydmCAnYXR0cjonIOuqheyEuOunjCDtl4jsmqntlanri4jri6QuIgorCisjOiBwYXRoc3BlYy5jOjE1MAorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAiYXR0ciDrqoXshLjripQg67mE7Ja0IOyeiOycvOuptCDslYgg65Cp64uI64ukIgorCisjOiBwYXRoc3BlYy5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7IaN7ISxIOydtOumhCAlcyIKKworIzogcGF0aHNwZWMuYzoyNTgKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICInZ2xvYicg67CPICdub2dsb2InIOqyveuhnOuqheyEuCDsoITssrQg7ISk7KCV7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IHBhdGhzcGVjLmM6MjY1Cittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAiIgorIidsaXRlcmFsJyDqsr3roZzrqoXshLgg7KCE7LK0IOyEpOygleydgCDri6Trpbgg6rK966Gc66qF7IS4IOyghOyytCDshKTsoJXqs7wg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogcGF0aHNwZWMuYzozMDUKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgIuqyveuhnOuqheyEuCDsp4Dsi5zslrQgJ3ByZWZpeCfsl5Ag7J6Y66q765CcIO2MjOudvOuvuO2EsCIKKworIzogcGF0aHNwZWMuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIOqyveuhnOuqheyEuCDsp4Dsi5zslrQgJyUuKnMnICjsnITsuZggJyVzJykiCisKKyM6IHBhdGhzcGVjLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAi6rK966GcIOuqheyEuCDsp4Dsi5zslrQg64Gd7JeQICcpJyDruaDsp5AgKOychOy5mCAnJXMnKSIKKworIzogcGF0aHNwZWMuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIuq1rO2YhOuQmOyngCDslYrsnYAg6rK966Gc66qF7IS4IOyngOyLnOyWtCAnJWMnICjsnITsuZggJyVzJykiCisKKyM6IHBhdGhzcGVjLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczogJ2xpdGVyYWwn6rO8ICdnbG9iJ+ydgCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBwYXRoc3BlYy5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiAnJXMn7J2AKOuKlCkg7KCA7J6l7IaMIOuwluyeheuLiOuLpCIKKworIzogcGF0aHNwZWMuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICInJXMnICjri6jstpXtgqQ6ICclYycpIgorCisjOiBwYXRoc3BlYy5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIlczog6rK966Gc66qF7IS4IOyngOyLnOyWtOqwgCDsnbQg66qF66C57Ja07JeQ7IScIOyngOybkO2VmOyngCDslYrsirXri4jri6Q6ICVzIgorCisjOiBwYXRoc3BlYy5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiclcycg6rK966Gc66qF7IS464qUIOyLrOuzvOumrSDrp4Htgawg7JWE656Y7JeQIOyeiOyKteuLiOuLpCIKKworIzogcHJldHR5LmM6OTYyCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAiLS1wcmV0dHkg7ZiV7Iud7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiByZWFkLWNhY2hlLmM6MTUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiaW5kZXgudmVyc2lvbuydtCDshKTsoJXrkJjsl4jsp4Drp4wsIOydtCDqsJLsnbQg7J6Y66q765CY7JeI7Iq164uI64ukLlxuIgorIiVpIOuyhOyghOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IHJlYWQtY2FjaGUuYzoxNTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiR0lUX0lOREVYX1ZFUlNJT07snbQg7ISk7KCV65CY7JeI7KeA66eMLCDsnbQg6rCS7J20IOyemOuqu+uQmOyXiOyKteuLiOuLpC5cbiIKKyIlaSDrsoTsoITsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiByZWFkLWNhY2hlLmM6MjQwNCBzZXF1ZW5jZXIuYzo0MzM4IHdyYXBwZXIuYzo2NTggYnVpbHRpbi9tZXJnZS5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSDri6vsnYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogcmVhZC1jYWNoZS5jOjI0Nzcgc2VxdWVuY2VyLmM6MjEwMiBzZXF1ZW5jZXIuYzozMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSBzdGF0KCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogcmVhZC1jYWNoZS5jOjI0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgImdpdCDrlJTroInthLDrpqzrpbwg7Je0IOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5saW5rOiAlcyIKK21zZ3N0ciAi66eB7YGsIO2VtOygnO2VoCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogcmVmcy5jOjczMiBzZXF1ZW5jZXIuYzo0MzM0IHNlcXVlbmNlci5jOjQzOTMgd3JhcHBlci5jOjIyNSB3cmFwcGVyLmM6Mzk1CisjOiBidWlsdGluL2FtLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIiclcyfsnYQo66W8KSDsk7DquLDsmqnsnLzroZwg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IHJlZnMuYzoxODgwCittc2dpZCAicmVmIHVwZGF0ZXMgZm9yYmlkZGVuIGluc2lkZSBxdWFyYW50aW5lIGVudmlyb25tZW50IgorbXNnc3RyICLqsqnrpqzrkJwg7ZmY6rK97JeQ7IScIOugiO2NvOufsOyKpCDsl4XrjbDsnbTtirjqsIAg6riI7KeA65Cp64uI64ukIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICIlcyDroIjtjbzrn7DsiqTrpbwg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMDUgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1MzEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAiJXMg66CI7Y2865+w7Iqk66W8IOyCreygnO2VoCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTIwOCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICLroIjtjbzrn7DsiqTrpbwg7IKt7KCc7ZWgIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MzUgd3Qtc3RhdHVzLmM6MTg1MAorbXNnaWQgImdvbmUiCittc2dzdHIgIuyXhuydjCIKKworIzogcmVmLWZpbHRlci5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICIlZOqwnCDslZ4iCisKKyM6IHJlZi1maWx0ZXIuYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWQiCittc2dzdHIgIiVk6rCcIOuSpCIKKworIzogcmVmLWZpbHRlci5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgIiVk6rCcIOyVniwgJWTqsJwg65KkIgorCisjOiByZWYtZmlsdGVyLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgIuyYiOyDge2VnCDtmJXsi506ICUlKGNvbG9yOjzsg4k+KSIKKworIzogcmVmLWZpbHRlci5jOjEyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgY29sb3I6ICUlKGNvbG9yOiVzKSIKK21zZ3N0ciAi7J247Iud7ZWgIOyImCDsl4bripQg7IOJOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAi7KCV7IiYIOqwkuydtCDsmYDslbwg7ZWp64uI64ukIHJlZm5hbWU6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgIuygleyImCDqsJLsnbQg7JmA7JW8IO2VqeuLiOuLpCByZWZuYW1lOnJzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi7J247Iud7ZWgIOyImCDsl4bripQgJSUoJXMpIOyduOyekDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkp7JeQIOyduOyekOulvCDrsJvsp4Ag7JWK7Iq164uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKHN1YmplY3QpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShzdWJqZWN0KeyXkCDsnbjsnpDrpbwg67Cb7KeAIOyViuyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUICUlKHRyYWlsZXJzKSDsmLXshZgg7J247J6QOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAiJ2NvbnRlbnRzOmxpbmVzPSVzJ+yXkOyEnCAw67O064ukIO2BsCDqsJLsnbQg7JmA7JW8IO2VqeuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoY29udGVudHMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQgJSUoY29udGVudHMpIOyduOyekDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAiJ2NvbnRlbnRzOnNob3J0PSVzJ+yXkOyEnCAw67O064ukIO2BsCDqsJLsnbQg7JmA7JW8IO2VqeuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0bmFtZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCAlJShvYmplY3RuYW1lKSDsnbjsnpA6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAi7JiI7IOB7ZWcIO2YleyLnTogJSUoYWxpZ246POuEiOu5hD4sPOychOy5mD4pIgorCisjOiByZWYtZmlsdGVyLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAi7J247Iud7ZWgIOyImCDsl4bripQg7JyE7LmYOiVzIgorCisjOiByZWYtZmlsdGVyLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAi7J247Iud7ZWgIOyImCDsl4bripQg64SI67mEOiVzIgorCisjOiByZWYtZmlsdGVyLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLsnbjsi53tlaAg7IiYIOyXhuuKlCAlJShhbGlnbikg7J247J6QOiVzIgorCisjOiByZWYtZmlsdGVyLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICIlJShhbGlnbikg7JWE7Yaw7JeQIOuEiOu5hOqwgCAw67O064ukIOy7pOyVvCDtlanri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuyduOyLne2VoCDsiJgg7JeG64qUICUlKGlmKSDsnbjsnpA6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICLsnpjrqrvrkJwg7ZiV7Iud7J2YIO2VhOuTnCDsnbTrpoQ6ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDtlYTrk5wg7J2066aEOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoaWYpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAi7ZiV7IudOiAlJShpZikg7JWE7Yaw7J20ICUlKHRoZW4pIOyVhO2GsCDsl4bsnbQg7IKs7Jqp65CY7JeI7Iq164uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgIu2YleyLnTogJSUodGhlbikg7JWE7Yaw7J20ICUlKGlmKSDslYTthrAg7JeG7J20IOyCrOyaqeuQmOyXiOyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjY3MworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAi7ZiV7IudOiAlJSh0aGVuKSDslYTthrDsnbQg7Jes65+s67KIIOyCrOyaqeuQmOyXiOyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAi7ZiV7IudOiAlJSh0aGVuKSDslYTthrDsnbQgJSUoZWxzZSkg65Kk7JeQIOyCrOyaqeuQmOyXiOyKteuLiOuLpCIKKworIzogcmVmLWZpbHRlci5jOjcwMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLtmJXsi506ICUlKGVsc2UpIOyVhO2GsOydtCAlJShpZikg7JWE7YawIOyXhuydtCDsgqzsmqnrkJjsl4jsirXri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIu2YleyLnTogJSUoZWxzZSkg7JWE7Yaw7J20ICUlKHRoZW4pIOyVhO2GsCDsl4bsnbQg7IKs7Jqp65CY7JeI7Iq164uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICLtmJXsi506ICUlKGVsc2UpIOyVhO2GsOydtCDsl6zrn6zrsogg7IKs7Jqp65CY7JeI7Iq164uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgIu2YleyLnTogJSUoZW5kKSDslYTthrDsnbQg64yA7J2R65CY64qUIOyVhO2GsCDsl4bsnbQg7IKs7Jqp65CY7JeI7Iq164uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7ZiV7Iud7J2YIOusuOyekOyXtCAlcyIKKworIzogcmVmLWZpbHRlci5jOjEzODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgcmViYXNpbmcgJXMpIgorbXNnc3RyICIo67iM656c7LmYIOyXhuydjCwgJXMg66as67Kg7J207IqkKSIKKworIzogcmVmLWZpbHRlci5jOjEzOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIijruIzrnpzsuZgg7JeG7J2MLCDrtoTrpqzrkJwgSEVBRCAlcyDrpqzrsqDsnbTsiqQpIgorCisjOiByZWYtZmlsdGVyLmM6MTM5MworIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcykiCittc2dzdHIgIijruIzrnpzsuZgg7JeG7J2MLCDsnbTrk7HrtoQgJXPsl5DshJwg7Iuc7J6RKSIKKworIy4gVFJBTlNMQVRPUlM6IG1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgIkhFQUQKKyMuIGRldGFjaGVkIGF0ICIgaW4gd3Qtc3RhdHVzLmMKKyMuCisjOiByZWYtZmlsdGVyLmM6MTQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIihIRUFEICVzIOychOy5mOyXkOyEnCDrtoTrpqzrkKgpIgorCisjLiBUUkFOU0xBVE9SUzogbWFrZSBzdXJlIHRoaXMgbWF0Y2hlcyAiSEVBRAorIy4gZGV0YWNoZWQgZnJvbSAiIGluIHd0LXN0YXR1cy5jCisjLgorIzogcmVmLWZpbHRlci5jOjE0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiCittc2dzdHIgIihIRUFEICVzKOycvCnroZzrtoDthLAg67aE66as65CoKSIKKworIzogcmVmLWZpbHRlci5jOjE0MTIKK21zZ2lkICIobm8gYnJhbmNoKSIKK21zZ3N0ciAiKOu4jOuenOy5mCDsl4bsnYwpIgorCisjOiByZWYtZmlsdGVyLmM6MTQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgIuyXhuuKlCDsmKTruIzsoJ3tirggJXMsICVz7JeQIOuMgO2VtCIKKworIzogcmVmLWZpbHRlci5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICIlc+yXkCBwYXJzZV9vYmplY3RfYnVmZmVyIOyLpO2MqCAoJXPsl5Ag64yA7ZW0KSIKKworIzogcmVmLWZpbHRlci5jOjE5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICInJXMn7JeQIOyemOuqu+uQnCDtmJXsi53snZgg7Jik67iM7KCd7Yq4IgorCisjOiByZWYtZmlsdGVyLmM6MTk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAi66ed6rCA7KeEIOydtOumhCAlc+yXkCDroIjtjbzrn7DsiqTrpbwg66y07Iuc7ZWp64uI64ukIgorCisjOiByZWYtZmlsdGVyLmM6MTk4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICLrp53qsIDsp4Qg66CI7Y2865+w7IqkICVzIOustOyLnCIKKworIzogcmVmLWZpbHRlci5jOjIyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAi7ZiV7IudOiAlJShlbmQpIOyVhO2GsOydtCDsl4bsirXri4jri6QiCisKKyM6IHJlZi1maWx0ZXIuYzoyMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi7J6Y66q765CcIO2YleyLneydmCDsmKTruIzsoJ3tirgg7J2066aEICVzIgorCisjOiByZW1vdGUuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICIlcyDrsI8gJXPsnYQo66W8KSDrqqjrkZAgJXPsl5Ag6rCA7KC47JisIOyImCDsl4bsirXri4jri6QiCisKKyM6IHJlbW90ZS5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIlc+ydgCjripQpIOuztO2GtSAlc+ydhCjrpbwpIOy2lOygge2VmOqzoCwgJXPsnYQo66W8KSDstpTsoIHtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiByZW1vdGUuYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlc+ydgCjripQpICVzIOuwjyAlcyDrqqjrkZAg7LaU7KCB7ZWp64uI64ukIgorCisjOiByZW1vdGUuYzo2MjEKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAi64K067aAIOyYpOulmCIKKworIzogcmVtb3RlLmM6MTUzNCByZW1vdGUuYzoxNjM1Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBROqwgCDruIzrnpzsuZjrpbwg6rCA66as7YKk7KeAIOyViuyKteuLiOuLpCIKKworIzogcmVtb3RlLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAi6re465+wIOu4jOuenOy5mOqwgCDsl4bsirXri4jri6Q6ICclcyciCisKKyM6IHJlbW90ZS5jOjE1NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIiclcycg67iM656c7LmY7JeQIOuMgO2VtCDsl4XsiqTtirjrprzsnYQg7ISk7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogcmVtb3RlLmM6MTU1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi7JeF7Iqk7Yq466a8ICclcycg67iM656c7LmY6rCAIOumrOuqqO2KuCDstpTsoIEg67iM656c7LmY66GcIOyggOyepeuQmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IHJlbW90ZS5jOjE1NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIuumrOuqqO2KuCAnJTIkcyfsnZgg7ZG47IucIOuMgOyDgSAnJTEkcyfsl5Ag66Gc7LusIOy2lOyggSDruIzrnpzsuZjqsIAg7JeG7Iq164uI64ukIgorCisjOiByZW1vdGUuYzoxNTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgIiclcycg67iM656c7LmY7JeQIO2RuOyLnCDrpqzrqqjtirjqsIAg7JeG7Iq164uI64ukIgorCisjOiByZW1vdGUuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDrjIDtlZwg7ZG47IucIOugiO2NvOufsOyKpOuqheyEuOyXkCAnJXMn7J20KOqwgCkg65Ok7Ja0IOyeiOyngCDslYrsirXri4jri6QiCisKKyM6IHJlbW90ZS5jOjE2MDIKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgIu2RuOyLnOydmCDrjIDsg4HsnbQg7JeG7Iq164uI64ukIChwdXNoLmRlZmF1bHTqsIAgJ25vdGhpbmcn7J6F64uI64ukKSIKKworIzogcmVtb3RlLmM6MTYyNAorbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIu2VmOuCmOydmCDrjIDsg4Hsl5Ag64yA7ZW0ICdzaW1wbGUnIO2RuOyLnOulvCDsspjrpqztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogcmVtb3RlLmM6MTkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiYXNlZCBvbiAnJXMnLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuXG4iCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjqsIAgJyVzJyDquLDrsJjsnbTsp4Drp4wsIOyXheyKpO2KuOumvOydtCDsl4bslrTsoYzsirXri4jri6QuXG4iCisKKyM6IHJlbW90ZS5jOjE5NDMKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAo67CU66Gc7J6h7Jy866Ck66m0IFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKVxuIgorCisjOiByZW1vdGUuYzoxOTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICLruIzrnpzsuZjqsIAgJyVzJ+yXkCDrp57qsowg7JeF642w7J207Yq465CcIOyDge2DnOyeheuLiOuLpC5cbiIKKworIzogcmVtb3RlLmM6MTk1MAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mOyZgCAnJXMn7J20KOqwgCkg64uk66W4IOy7pOuwi+ydhCDroIjtjbzrn7DsiqTtlanri4jri6QuXG4iCisKKyM6IHJlbW90ZS5jOjE5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICjsnpDshLjtlZwg7KCV67O066W8IOychO2VtCBcIiVzXCLsnYQo66W8KSDsgqzsmqntlZjsi63si5zsmKQpXG4iCisKKyM6IHJlbW90ZS5jOjE5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAi67iM656c7LmY6rCAICclcyfrs7Tri6QgJWTqsJwg7Luk67CL66eM7YG8IOyVnuyXkCDsnojsirXri4jri6QuXG4iCisKKyM6IHJlbW90ZS5jOjE5NjMKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICjroZzsu6zsl5Ag7J6I64qUIOy7pOuwi+ydhCDsoJzstpztlZjroKTrqbQgXCJnaXQgcHVzaFwi66W8IOyCrOyaqe2VmOyLreyLnOyYpClcbiIKKworIzogcmVtb3RlLmM6MTk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICLruIzrnpzsuZjqsIAgJyVzJ+uztOuLpCAlZOqwnCDsu6TrsIsg65Kk7JeQIOyeiOqzoCwg7JWe7Jy866GcIOuPjOumtCDsiJgg7J6I7Iq164uI64ukLlxuIgorCisjOiByZW1vdGUuYzoxOTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKOuhnOy7rCDruIzrnpzsuZjrpbwg7JeF642w7J207Yq47ZWY66Ck66m0IFwiZ2l0IHB1bGxcIuydhCDsgqzsmqntlZjsi63si5zsmKQpXG4iCisKKyM6IHJlbW90ZS5jOjE5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisi7ZiE7J6sIOu4jOuenOy5mOyZgCAnJXMn7J20KOqwgCkg6rCI65287KGM7Iq164uI64ukLFxuIgorIuuLpOuluCDsu6TrsIvsnbQg6rCB6rCBICVk6rCc7JmAICVk6rCcIOyeiOyKteuLiOuLpC5cbiIKKworIzogcmVtb3RlLmM6MTk4NworbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiIgorIiAgKOumrOuqqO2KuOydmCDruIzrnpzsuZjrpbwg7ZiE7J6sIOu4jOuenOy5mOuhnCDrs5HtlantlZjroKTrqbQgXCJnaXQgcHVsbFwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpClcbiIKKworIzogcmV2aXNpb24uYzoyMjg5Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mOqwgCDrp53qsIDsp4Qg6rKD7LKY65+8IOuztOyeheuLiOuLpCIKKworIzogcmV2aXNpb24uYzoyMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAi7ZiE7J6sICclcycg67iM656c7LmY7JeQIOyVhOyngSDslYTrrLQg7Luk67CL64+EIOyXhuyKteuLiOuLpCIKKworIzogcmV2aXNpb24uYzoyNDg5Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IOyYteyFmOydgCAtLWJpc2VjdCDsmLXshZjqs7wg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogcnVuLWNvbW1hbmQuYzo3MjgKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIi9kZXYvbnVsbCDsl7TquLAg7Iuk7YyoIgorCisjOiBydW4tY29tbWFuZC5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKyInJXMnIO2bhO2BrOqwgCDsi6Ttlokg6rCA64ql7ZWY64+E66GdIOyEpOygleuQmOyngCDslYrslYTshJwsIOustOyLnOuQqeuLiOuLpC5cbiIKKyLsnbQg6rK96rOg64qUIGBnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZWAg66qF66C57Jy866GcIOuBjCDsiJgg7J6I7Iq164uI64ukLiIKKworIzogc2VuZC1wYWNrLmM6MTQxCittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAi66as66qo7Yq4IOustuydjCDtkoDquLAg7IOB7YOc66W8IOydveuKlCDrj5nslYgg67Cc7IOd7ZWcIOyYiOyDgey5mCDrqrvtlZwg7ZSM65+s7IucIO2MqO2CtyIKKworIzogc2VuZC1wYWNrLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgIuumrOuqqO2KuCDrrLbsnYwg7ZKA6riwIOyDge2DnOulvCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgIuumrOuqqO2KuCDrrLbsnYwg7ZKA6riwIOyLpO2MqDogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOAorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICLtkbjsi5wg7J247Kad7IScIOyEnOuqheyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IHNlbmQtcGFjay5jOjQyMQorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAi67Cb64qUIOyqveyXkOyEnCAtLXNpZ25lZCDtkbjsi5zrpbwg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogc2VuZC1wYWNrLmM6NDIzCittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisi67Cb64qUIOyqveyXkOyEnCAtLXNpZ25lZCDtkbjsi5zrpbwg7KeA7JuQ7ZWY7KeAIOyViuycvOuvgOuhnCDtkbjsi5wg7J247Kad7ISc66W8IOuztOuCtOyngCDslYrsirXri4jri6QiCisKKyM6IHNlbmQtcGFjay5jOjQzNQorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAi67Cb64qUIOyqveyXkOyEnCAtLWF0b21pYyDtkbjsi5zrpbwg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogc2VuZC1wYWNrLmM6NDQwCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgIuuwm+uKlCDsqr3sl5DshJwg7ZG47IucIOyYteyFmOydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIOy7pOuwiyDrqZTsi5zsp4Ag7KCV66asIOuqqOuTnCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7IKt7KCc7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjMwMQorbXNnaWQgInJldmVydCIKK21zZ3N0ciAicmV2ZXJ0IgorCisjOiBzZXF1ZW5jZXIuYzozMDMKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyM6IHNlcXVlbmNlci5jOjMwNQorbXNnaWQgInJlYmFzZSAtaSIKK21zZ3N0ciAicmViYXNlIC1pIgorCisjOiBzZXF1ZW5jZXIuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDrj5nsnpE6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzozNjQKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorIuydtCDstqnrj4zsnYQg7ZW06rKw7ZWcIOuSpOyXkCwg67CU66Gc7J6h7J2AIOqyveuhnOulvFxuIgorIidnaXQgYWRkIDzqsr3roZw+JyDrmJDripQgJ2dpdCBybSA86rK966GcPifroZwg7ZGc7Iuc7ZWY7Iut7Iuc7JikIgorCisjOiBzZXF1ZW5jZXIuYzozNjcKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorIuydtCDstqnrj4zsnYQg7ZW06rKw7ZWcIOuSpOyXkCwg67CU66Gc7J6h7J2AIOqyveuhnOulvFxuIgorIidnaXQgYWRkIDzqsr3roZw+JyDrmJDripQgJ2dpdCBybSA86rK966GcPifroZwg7ZGc7Iuc7ZWY7Iut7Iuc7JikLlxuIgorIuq3uOumrOqzoCDqsrDqs7zrrLzsnYQgJ2dpdCBjb21taXQn7Jy866GcIOy7pOuwi+2VmOyLreyLnOyYpCIKKworIzogc2VxdWVuY2VyLmM6MzgwIHNlcXVlbmNlci5jOjI0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyeoOq4gCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzozODIgc2VxdWVuY2VyLmM6MjM0NiBzZXF1ZW5jZXIuYzoyNDcyIHNlcXVlbmNlci5jOjI0ODYKKyM6IHNlcXVlbmNlci5jOjI2OTQgc2VxdWVuY2VyLmM6NDMzNiBzZXF1ZW5jZXIuYzo0Mzk5IHdyYXBwZXIuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIiclcyfsl5Ag7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZW9sIHRvICclcyciCittc2dzdHIgIiclcyfsl5Ag7KSE67CU6r+I7J2EIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzozOTIgc2VxdWVuY2VyLmM6MjM1MSBzZXF1ZW5jZXIuYzoyNDc0IHNlcXVlbmNlci5jOjI0ODgKKyM6IHNlcXVlbmNlci5jOjI3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgIiclcycg66eI7LmY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6NDE1IHNlcXVlbmNlci5jOjgwNCBzZXF1ZW5jZXIuYzoxNDkzIHNlcXVlbmNlci5jOjIzNzEKKyM6IHNlcXVlbmNlci5jOjI2ODQgc2VxdWVuY2VyLmM6Mjc4OCBidWlsdGluL2FtLmM6MjU5IGJ1aWx0aW4vY29tbWl0LmM6NzI3CisjOiBidWlsdGluL21lcmdlLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICInJXMn7JeQ7IScIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIKK21zZ3N0ciAi66Gc7LusIOuzgOqyvSDsgqztla3snYQgJXMg65WM66y47JeQIOuNruyWtCDsk7Dqsowg65Cp64uI64ukLiIKKworIzogc2VxdWVuY2VyLmM6NDQ1Cittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICLrs4Dqsr0g7IKs7ZWt7J2EIOy7pOuwi+2VmOqxsOuCmCDsiqTtg5zsi5ztlZwg64uk7J2MIOqzhOyGje2VmOyLreyLnOyYpC4iCisKKyM6IHNlcXVlbmNlci5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFzdC1mb3J3YXJkIgorbXNnc3RyICIlczog7KCV67Cp7ZalIOynhO2WiSIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UgLWkiLgorIy4KKyM6IHNlcXVlbmNlci5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczog7IOIIOyduOuNseyKpCDtjIzsnbzsnYQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjU3OQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZSIKK21zZ3N0ciAi7LqQ7IucIO2KuOumrOulvCDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6NTkyCittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiCittc2dzdHIgIkhFQUQg7Luk67CL7J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUgc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIuyekeyXhSDtj7TrjZTsl5Ag7Iqk7YWM7J207KeV7ZWcIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukLlxuIgorIuydtCDrs4Dqsr0g7IKs7ZWt7J2EIOydtOyghCDsu6TrsIvsl5Ag7ZWp7LmY66Ck66m0LFxuIgorIuuLpOydjOydhCDsi6TtlontlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyLsg4gg7Luk67CL7Jy866GcIOunjOuTnOugpOuptCDri6TsnYzsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAlc1xuIgorIlxuIgorIuyWtOuWpCDqsr3smrDsnbTrk6AsIOuniOy5nCDri6TsnYzsl5Ag64uk7J2MIOuqheugueycvOuhnCDqs4Tsho3tlanri4jri6Q6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6ODE4Cittc2dpZCAid3JpdGluZyByb290IGNvbW1pdCIKK21zZ3N0ciAi7LWc7IOB7JyEIOy7pOuwi+ydhCDslIHri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjEwNDMKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAiJ3ByZXBhcmUtY29tbWl0LW1zZycg7ZuE7YGs6rCAIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTA1MAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIuydtOumhOqzvCDsoITsnpDrqZTsnbwg7KO87IaM66W8IOyCrOyaqeyekCDsnbTrpoTqs7wg7Zi47Iqk7Yq4IOydtOumhOydhCDsnbTsmqntlbTshJwg7J6Q64+Z7Jy866GcXG4iCisi7ISk7KCV7ZaI7Iq164uI64ukLiDsnbQg7KCV67O06rCAIOunnuuKlOyngCDtmZXsnbjtlZjsi63si5zsmKQuIOydtCDrqZTsi5zsp4Drpbwg67O07KeAIOyViuycvOugpOuptCDsoJXrs7QiCisi66W8XG4iCisi66qF7Iuc7KCB7Jy866GcIOyEpOygle2VmOyLreyLnOyYpC4g64uk7J2MIOuqheugueyWtOulvCDsi6TtlontlZjqs6Ag7Y647KeR6riw7J2YIOyViOuCtOyXkCDrlLDrnbwg7ISk7KCVXG4iCisi7YyM7J287J2EIO2OuOynke2VmOyLreyLnOyYpDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyLsnbTroIfqsowg7ZWcIOuLpOydjCwg7J20IOy7pOuwi+yXkCDsgqzsmqntlZwg7Iug7JuQIOygleuztOulvCDri6TsnYzqs7wg6rCZ7J20IO2VtOyEnCDrsJTqv4Ag7IiYIOyeiOyKteuLiCIKKyLri6Q6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMDYzCittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisi7J2066aE6rO8IOyghOyekOuplOydvCDso7zshozrpbwg7IKs7Jqp7J6QIOydtOumhOqzvCDtmLjsiqTtirgg7J2066aE7J2EIOydtOyaqe2VtOyEnFxuIgorIuyekOuPmeycvOuhnCDshKTsoJXtlojsirXri4jri6QuIOydtCDsoJXrs7TqsIAg66ee64qU7KeAIO2ZleyduO2VmOyLreyLnOyYpC4g7J20IOuplOyLnOyngOulvFxuIgorIuuztOyngCDslYrsnLzroKTrqbQg7KCV67O066W8IOuqheyLnOyggeycvOuhnCDshKTsoJXtlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwi64K0IOydtOumhFwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyLsnbTroIfqsowg7ZWcIOuLpOydjCwg7J20IOy7pOuwi+yXkCDsgqzsmqntlZwg7Iug7JuQIOygleuztOulvCDri6TsnYzqs7wg6rCZ7J20IO2VtOyEnCDrsJTqv4Ag7IiYIOyeiOyKteuLiCIKKyLri6Q6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMTAzCittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAi7IOI66GcIOunjOuToCDsu6TrsIvsnYQg7LC+7JWE67O8IOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjExMDUKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIuyDiOuhnCDrp4zrk6Ag7Luk67CL7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMTUxCittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgSEVBRCBhZnRlciBjcmVhdGluZyBjb21taXQiCittc2dzdHIgIuy7pOuwi+ydhCDrp4zrk6Ag7ZuEIEhFQUTrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjExNTMKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJIRUFEIOu2hOumrOuQqCIKKworIzogc2VxdWVuY2VyLmM6MTE1NworbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKOy1nOyDgeychC3su6TrsIspIgorCisjOiBzZXF1ZW5jZXIuYzoxMTc4Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgIkhFQUTrpbwg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJIRUFEICVz7J2AKOuKlCkg7Luk67CL7J20IOyVhOuLmeuLiOuLpCEiCisKKyM6IHNlcXVlbmNlci5jOjExODQgYnVpbHRpbi9jb21taXQuYzoxNTI4Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICJIRUFEIOy7pOuwi+ydhCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTIzNSBzZXF1ZW5jZXIuYzoxODMyCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCBhdXRob3IiCittc2dzdHIgIuy7pOuwiyDsnpHshLHsnpDrpbwg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjEyNDUgYnVpbHRpbi9hbS5jOjE2MzAgYnVpbHRpbi9tZXJnZS5jOjY0NQorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgImdpdCB3cml0ZS10cmVl6rCAIO2KuOumrOulvCDsk7DripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMjYyIHNlcXVlbmNlci5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICIgJyVzJ+ydmCDsu6TrsIsg66mU7Iuc7KeA66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxMjg0IGJ1aWx0aW4vYW0uYzoxNjUwIGJ1aWx0aW4vY29tbWl0LmM6MTYzMSBidWlsdGluL21lcmdlLmM6ODI1CisjOiBidWlsdGluL21lcmdlLmM6ODUwCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgIuy7pOuwiyDsmKTruIzsoJ3tirjrpbwg7JOw64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICIlcyDsu6TrsIvsnYQg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjEzNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzIOydtOyghCDsu6TrsIvsnYQg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjE1MDAgc2VxdWVuY2VyLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIuy7pOuwiyAlZOqwnOqwgCDshJ7snbgg6rKw6rO87J6F64uI64ukLiIKKworIzogc2VxdWVuY2VyLmM6MTUxMCBzZXF1ZW5jZXIuYzo0MzU1Cittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgIuuwlOuhnOyeoeycvOugpOuptCBIRUFE6rCAIO2VhOyalO2VqeuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTUxMiBzZXF1ZW5jZXIuYzoyNzI5Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiSEVBROulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTUxNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiSEVBROydmCDsu6TrsIsg66mU7Iuc7KeA66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxNTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjE1MjcgZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDU3Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAiMeuyiOynuCDsu6TrsIsg66mU7Iuc7KeA7J6F64uI64ukOiIKKworIzogc2VxdWVuY2VyLmM6MTUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIKK21zZ3N0ciAiJXPsnZgg7Luk67CLIOuplOyLnOyngOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJWQ6IgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeAICMlZOuyiOyeheuLiOuLpDoiCisKKyM6IHNlcXVlbmNlci5jOjE1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeAICMlZOuyiOydhCDqsbTrhIjrnIHri4jri6Q6IgorCisjOiBzZXF1ZW5jZXIuYzoxNTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOuqheuguTogJWQiCisKKyM6IHNlcXVlbmNlci5jOjE2MzEKK21zZ2lkICJ5b3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICLsnbjrjbHsiqQg7YyM7J287J20IOuzke2VqeuQmOyngCDslYrslZjsirXri4jri6QuIgorCisjOiBzZXF1ZW5jZXIuYzoxNjM4Cittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICLstZzsg4HsnIQg7Luk67CL7J2EIOuwlOuhnOyeoeydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiJXMg7Luk67CL7J2AIOuzke2VqeydtOyngOunjCAtbSDsmLXshZjsnbQg7KO87Ja07KeA7KeAIOyViuyVmOyKteuLiOuLpC4iCisKKyMgRklYTUU6ICJwYXJlbnQgJWQiIOuyiO2YuOqwgCDrrLTsiqgg7J2Y66+4PworIzogc2VxdWVuY2VyLmM6MTY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIiVzIOy7pOuwi+yXkCDsnbTsoIQg7Luk67CLICVk7J20KOqwgCkg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxNjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIuuplOyduOudvOyduOydhCDsp4DsoJXtlojsp4Drp4wgJXMg7Luk67CL7J20IOuzke2VqSDsu6TrsIvsnbQg7JWE64uZ64uI64ukLiIKKworIzogc2VxdWVuY2VyLmM6MTY3NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiJXPsl5Ag64yA7ZWcIOy7pOuwiyDrqZTsi5zsp4Drpbwg6rCA7KC47JisIOyImCDsl4bsirXri4jri6QiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxNjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6ICVzIOydtOyghCDsu6TrsIvsnYQg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjE3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgIiclcyfsl5DshJwgJyVzJyjsnLwp66GcIOydtOumhOydhCDrsJTqv4Ag7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTgxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICLri6TsnYzsnYQg65CY64+M66a0KHJldmVydCkg7IiYIOyXhuyKteuLiOuLpDogJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICLri6TsnYzsnYQg7KCB7Jqp7ZWgKGFwcGx5KSDsiJgg7JeG7Iq164uI64ukOiAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTg2NAorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLruYgg7Luk67CLIOuqqOydjOydhCDqsbTrhIgg65yB64uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IOyduOuNseyKpCDsnb3quLDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoxODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IOyduOuNseyKpCDsg4jroZwg6rOg7Lmo7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICIlcyjsnYAp64qUIOyduOyekOulvCDtl4jsmqntlZjsp4Ag7JWK7Iq164uI64ukOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxOTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnRzIGZvciAlcyIKK21zZ3N0ciAi7JeG64qUIOyduOyekCwgJXPsl5Ag64yA7ZW0IgorCisjOiBzZXF1ZW5jZXIuYzoyMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi7J6Y66q765CcIOykhCAlZDogJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLsnbTsoIQg7Luk67CLIOyXhuydtCAnJXMnIOyImO2Wie2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyMDg1IHNlcXVlbmNlci5jOjQxMzggc2VxdWVuY2VyLmM6NDE3MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAiJyVzJ+yXkOyEnCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IHNlcXVlbmNlci5jOjIxMDgKK21zZ2lkICJwbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIOuqheugueycvOuhnCDrsJTroZzsnqHsnLzsi63si5zsmKQuIgorCisjOiBzZXF1ZW5jZXIuYzoyMTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICLsgqzsmqkg67aI6rCA64qlIOyduOyKpO2KuOufreyFmCDsi5ztirg6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxMTUKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIu2MjOyLse2VnCDsu6TrsIvsnbQg7JeG7Iq164uI64ukLiIKKworIzogc2VxdWVuY2VyLmM6MjEyNgorbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICLrkJjrj4zrpqzquLAocmV2ZXJ0KSDspJHsl5Ag67m87Jik6riwKGNoZXJyeS1waWNrKeulvCDtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IHNlcXVlbmNlci5jOjIxMjgKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAi67m87Jik6riwKGNoZXJyeS1waWNrKSDspJHsl5Ag65CY64+M66as6riwKHJldmVydCnrpbwg7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBzZXF1ZW5jZXIuYzoyMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIO2CpDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjIxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIlc+ydmCDqsJLsnbQg7J6Y66q765CoOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjI2OQorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICLrtojslYjtlZwgc3F1YXNoLW9udG8iCisKKyM6IHNlcXVlbmNlci5jOjIyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgIu2YleyLneydtCDsnpjrqrvrkJwg7Ji17IWYIOyLnO2KuDogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjMyMworbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuydtOuvuCDsu6TrsIsg67m87Jik6riwKGNoZXJyeS1waWNrKSDrmJDripQg65CY64+M66as6riwKHJldmVydCnqsIAg7KeE7ZaJIOykkeyeheuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjMyNAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCittc2dzdHIgIlwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiDrqoXroLnsnYQg7ZW0IOuztOyLreyLnOyYpCIKKworIzogc2VxdWVuY2VyLmM6MjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiJyVzJyDsi5ztgIDshJwg65SU66CJ7YSw66as66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQxCittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAiSEVBROulvCDsnqDquIAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjM5NiBzZXF1ZW5jZXIuYzozNDAzCittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICLrubzsmKTquLAoY2hlcnJ5LXBpY2spIOuYkOuKlCDrkJjrj4zrpqzquLAocmV2ZXJ0KeqwgCDsp4Ttlokg7KSR7J207KeAIOyViuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjM5OAorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIkhFQUTrpbwg6rWs7ZW0IOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNDAwIHNlcXVlbmNlci5jOjI0MzUKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAi7IOI66GcIOunjOuTpOqzoCDsnojripQg67iM656c7LmY7JeQ7IScIOykkeyngO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNDIxIGJ1aWx0aW4vZ3JlcC5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIiclcyfsnYQo66W8KSDsnb3snYQg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI0MjQKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICLsmIjsg4HsuZgg66q77ZWY6rKMIO2MjOydvOydtCDrgZ3rgqzsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICLrubzsmKTquLAg7KCE7JeQIOyggOyepe2VnCBIRUFEIO2MjOydvOydtCgnJXMnKSDshpDsg4HrkJjsl4jsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI0NDEKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIkhFQUTrpbwg7Jiu6ri0IOqygyDqsJnsirXri4jri6QuIOuQmOuPjOumrOyngCDslYrsirXri4jri6QuIEhFQUTrpbwg7ZmV7J247ZWY7Iut7Iuc7JikISIKKworIzogc2VxdWVuY2VyLmM6MjU0NSBzZXF1ZW5jZXIuYzozMzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgJXMiCittc2dzdHIgIiVz7J2EKOulvCkg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI1ODMgc2VxdWVuY2VyLmM6MzMwMQorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIkhFQUTrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI2MTggc2VxdWVuY2VyLmM6MjYyMiBidWlsdGluL2RpZmZ0b29sLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkOyEnCAnJXMnKOycvCnroZwg67O17IKs7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI2NDEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzoyNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLsi6Ttlokg7Iuk7YyoOiAlc1xuIgorIiVz66y47KCc66W8IOuwlOuhnOyeoeqzoCwg64uk7J2M7J2EIOyLpO2Wie2VmOyLreyLnOyYpFxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjI2NTIKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICLqt7jrpqzqs6Ag7J24642x7IqkIOq3uOumrOqzoC/rmJDripQg7J6R7JeFIO2PtOuNlOyXkCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpFxuIgorCisjOiBzZXF1ZW5jZXIuYzoyNjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuyLpO2WiSDshLHqs7U6ICVzXG4iCisi7ZWY7KeA66eMIOuzgOqyvSDsgqztla3snYQg7J24642x7IqkIOuwjy/rmJDripQg7J6R7JeFIO2PtOuNlOyXkCDrgqjqsqjrkaHri4jri6QuXG4iCisi67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlZjqsbDrgpgg7Iqk7YOc7Iuc7JeQIOuEo+ycvOugpOuptCwg64uk7J2M7J2EIOyLpO2Wie2VmOyLreyLnOyYpDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzoyNzcxCittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICLqsIDsp5wg7LWc7IOB7JyEIOy7pOuwi+ydhCDslIHri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI3NzYKK21zZ2lkICJ3cml0aW5nIHNxdWFzaC1vbnRvIgorbXNnc3RyICJzcXVhc2gtb250b+ulvCDslIHri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAiJXPsnZgg7Yq466as66W8IOywvuuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI4MjkKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOulvCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6Mjg2MQorbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAi7ZiE7J6sIOumrOu5hOyghCDsl4bsnbQg67OR7ZWp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiJyVzJyDtlbTqsrDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgIiclcyfsnZgg7Luk67CLIOuplOyLnOyngOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MjkxNiBzZXF1ZW5jZXIuYzoyOTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICInJXMn7JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzZXF1ZW5jZXIuYzozMDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIgorbXNnc3RyICInJS4qcycg67OR7ZWp7J2EIOyLnOuPhOuPhCDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzAyMQorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuuzke2VqTog7IOIIOyduOuNseyKpCDtjIzsnbzsnYQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjMwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guXG4iCittc2dzdHIgIuyekOuPmSDsiqTtg5zsi5wg7KCB7JqpLlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzEwMyBnaXQtcmViYXNlLnNoOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIuyekOuPmeyKpO2DnOyLnCDsoIHsmqnsl5Ag7Lap64+M7J20IOuwnOyDne2WiOyKteuLiOuLpC5cbiIKKyLrs4Dqsr0g7IKs7ZWt7J2AIOyKpO2DnOyLnCDslYjsl5Ag7JWI7KCE7ZWY6rKMIOuTpOyWtCDsnojsirXri4jri6QuXG4iCisi7Ja47KCc65Og7KeAIFwiZ2l0IHN0YXNoIHBvcFwiIOuYkOuKlCBcImdpdCBzdGFzaCBkcm9wXCLsnYQg7Iuk7ZaJ7ZWgIOyImCDsnojsirXri4jri6QuXG4iCisKKyM6IHNlcXVlbmNlci5jOjMxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLtlaAg7J28IOuqqeuhnSDrqoXroLnsnYQg7Iuk7ZaJ7ZWgIOyImCDsl4bsirXri4jri6RcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIuyKpOy8gOykhOydhCDsobDsoJXtlanri4jri6QuIOqzhOyGjSDtlZjquLAg7KCE7JeQIOuqheugueyWtOulvCDtjrjsp5HtlZjroKTrqbQsIOuovOyggCDri6TsnYxcbiIKKyLtlaAg7J28IOuqqeuhneydhCDtjrjsp5HtlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlcy4uLiAgJS4qc1xuIgorbXNnc3RyICIlcy4uLiAgJS4qcyDsnITsuZjsl5DshJwg66mI7LeE7Iq164uI64ukXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDrqoXroLkgJWQiCisKKyM6IHNlcXVlbmNlci5jOjMzMDkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvcmlnLWhlYWQiCittc2dzdHIgIm9yaWctaGVhZOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzMxNCBzZXF1ZW5jZXIuYzo0MzUyCittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICInb250byfrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjMzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICJIRUFE66W8ICVzIOychOy5mOuhnCDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzQxNAorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLrpqzrsqDsnbTsiqTtlaAg7IiYIOyXhuyKteuLiOuLpDog7Iqk7YWM7J207KeV7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IHNlcXVlbmNlci5jOjM0MjMKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAi7JeG64qUIOy7pOuwi+ydhCDsiJjsoJXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgIuyemOuqu+uQnCDtjIzsnbw6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb250ZW50czogJyVzJyIKK21zZ3N0ciAi7J6Y66q765CcIOuCtOyaqTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzQzMAorbXNnaWQgIiIKKyJcbiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIlxuIgorIuyekeyXhSDtj7TrjZTsl5Ag7Luk67CL7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4g7J20IOyCrO2VreydhCDrqLzsoIBcbiIKKyLsu6TrsIvtlZjqs6AgJ2dpdCByZWJhc2UgLS1jb250aW51ZScg66qF66C57J2EIOuLpOyLnCDsi6TtlontlZjsi63si5zsmKQuIgorCisjOiBzZXF1ZW5jZXIuYzozNDU1IHNlcXVlbmNlci5jOjM0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgIu2MjOydvOydhCDsk7gg7IiYIOyXhuyKteuLiOuLpDogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzUwOAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiQ0hFUlJZX1BJQ0tfSEVBROulvCDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6MzUxNQorbXNnaWQgImNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLsiqTthYzsnbTsp5XtlZwg67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IHNlcXVlbmNlci5jOjM2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzOiAlcyDsu6TrsIvsnYQg67m87JisIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjM2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGJhZCByZXZpc2lvbiIKK21zZ3N0ciAiJXM6IOyemOuqu+uQnCDrpqzruYTsoIQiCisKKyM6IHNlcXVlbmNlci5jOjM2NDkKK21zZ2lkICJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIuy1nOy0iOydmCDsu6TrsIvsnLzroZwg65CY64+M66a0IOyImCDsl4bsirXri4jri6QiCisKKyM6IHNlcXVlbmNlci5jOjQwOTgKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiDsspjrpqztlZjsp4Ag7JWK7J2AIOyYteyFmCIKKworIzogc2VxdWVuY2VyLmM6NDEwMQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDog66as67mE7KCEIOykgOu5hCDspJEg7Jik66WYIgorCisjOiBzZXF1ZW5jZXIuYzo0MTQyIHNlcXVlbmNlci5jOjQxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIgorbXNnc3RyICLsgqzsmqntlaAg7IiYIOyXhuuKlCDtlaAg7J28IOuqqeuhnTogJXMiCisKKyM6IHNlcXVlbmNlci5jOjQyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKK21zZ3N0ciAiIgorInJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIOyYteyFmOyXkCDrjIDtlbQg7J247Iud7ZWgIOyImCDsl4bripQgJXMg7ISk7KCVLiDrrLTsi5ztlanri4jri6QuIgorCisjOiBzZXF1ZW5jZXIuYzo0MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorIuqyveqzoDog7J2867aAIOy7pOuwi+ydtCDsnZjrj4TsuZgg7JWK6rKMIOuyhOugpOyhjOydhCDsiJjrj4Qg7J6I7Iq164uI64ukLlxuIgorIuuyhOugpOynhCDsu6TrsIsgKOy1nOq3vOyXkOyEnCDqs7zqsbAg7Iic7IScKTpcbiIKKworIzogc2VxdWVuY2VyLmM6NDMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mICIKKyJ3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCittc2dzdHIgIiIKKyLsnbQg66mU7Iuc7KeA66W8IOuztOyngCDslYrsnLzroKTrqbQsIFwiZHJvcFwi7J2EIOyCrOyaqe2VtCDrqoXsi5zsoIHsnLzroZwg7Luk67CL7J2EIOygnOqxsO2VmOyLreyLnCIKKyLsmKQuXG4iCisiXG4iCisiJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIOuqheugueycvOuhnCDqsr3qs6Ag64uo6rOE66W8IOuwlOq/gCDsiJgg7J6I7Iq164uIIgorIuuLpC5cbiIKKyLqsIDriqXtlZwg64+Z7J6R7J2AOiBpZ25vcmUsIHdhcm4sIGVycm9yXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjQzMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIidnaXQgcmViYXNlIC0tZWRpdC10b2RvJyDrqoXroLnsnLzroZwg67CU66Gc7J6h7J2EIOyImCDsnojqs6AgJ2dpdCByZWJhc2UgLS1jb250aW51ZScg66qFIgorIuugueydhCDsi6Ttlontlanri4jri6QuXG4iCisi65iQ64qUICdnaXQgcmViYXNlIC0tYWJvcnQnIOuqheugueycvOuhnCDrpqzrsqDsnbTsiqTrpbwg7KSR7KeA7ZWgIOyImOuPhCDsnojsirXri4jri6QuXG4iCisKKyM6IHNlcXVlbmNlci5jOjQzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICInJXMnIOy7pOuwi+ydhCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2VxdWVuY2VyLmM6NDQ5MAorbXNnaWQgInRoZSBzY3JpcHQgd2FzIGFscmVhZHkgcmVhcnJhbmdlZC4iCittc2dzdHIgIuyKpO2BrOumve2KuOulvCDsnbTrr7gg7J6s6rWs7ISx7ZaI7Iq164uI64ukLiIKKworIzogc2V0dXAuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiclcyfsnYAo64qUKSDsoIDsnqXshowg67CW7J6F64uI64ukIgorCisjOiBzZXR1cC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IG5vIHN1Y2ggcGF0aCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnZ2l0IDxjb21tYW5kPiAtLSA8cGF0aD4uLi4nIHRvIHNwZWNpZnkgcGF0aHMgdGhhdCBkbyBub3QgZXhpc3QgbG9jYWxseS4iCittc2dzdHIgIiIKKyIlczog7J6R7JeFIO2PtOuNlOyXkCDqt7jrn7Ag6rK966Gc6rCAIOyXhuyKteuLiOuLpC5cbiIKKyLroZzsu6zsl5Ag7JeG64qUIOqyveuhnOulvCDsp4DsoJXtlZjroKTrqbQgJ2dpdCA866qF66C5PiAtLSA86rK966GcPi4uLicg7Iud7Jy866GcIOyCrOyaqe2VmOyLreyLnOyYpC4iCisKKyM6IHNldHVwLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorIuyVoOunpO2VnCDsnbjsnpAgJyVzJzog7JWMIOyImCDsl4bripQg66as67mE7KCEIOuYkOuKlCDsnpHsl4Ug7Y+0642U7JeQIOyXhuuKlCDqsr3roZwuXG4iCisi6rK966Gc7JmAIOumrOu5hOyghOydhCDqtazrtoTtlZjroKTrqbQg64uk7J2M6rO8IOqwmeydtCAnLS0n66W8IOyCrOyaqe2VmOyLreyLnOyYpDpcbiIKKyInZ2l0IDzrqoXroLk+IFs866as67mE7KCEPi4uLl0gLS0gWzztjIzsnbw+Li4uXSciCisKKyM6IHNldHVwLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIiclcycg7Ji17IWY7J2AICDsmLXshZjsnbQg7JWE64uMIOyduOyekCDsoITsl5Ag7JmA7JW8IO2VqeuLiOuLpCIKKworIzogc2V0dXAuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorIuyVoOunpO2VnCDsnbjsnpAgJyVzJzog7JWMIOyImCDsl4bripQg66as67mE7KCEIOuwjyDtjIzsnbwg7J2066aEXG4iCisi6rK966Gc7JmAIOumrOu5hOyghOydhCDqtazrtoTtlZjroKTrqbQg64uk7J2M6rO8IOqwmeydtCAnLS0n66W8IOyCrOyaqe2VmOyLreyLnOyYpDpcbiIKKyInZ2l0IDzrqoXroLk+IFs866as67mE7KCEPi4uLl0gLS0gWzztjIzsnbw+Li4uXSciCisKKyM6IHNldHVwLmM6Mzg5Cittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgIuyemOuqu+uQnCDshKTsoJXsnYQg7IKs7Jqp7ZWY7JesIOyekeyXhSDtj7TrjZTrpbwg7ISk7KCV7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNldHVwLmM6MzkzCittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgIuydtCDsnpHsl4XsnYAg7J6R7JeFIO2PtOuNlOyXkOyEnCDsi6TtlontlbTslbwg7ZWp64uI64ukIgorCisjOiBzZXR1cC5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAi6rmDIOyggOyepeyGjCDrsoTsoIQgPD0gJWQg67KE7KCE7J2EIOq4sOuMgO2VmOyngOunjCwgJWQg67KE7KCE7J20IOuwnOqyrOuQmOyXiOyKteuLiOuLpCIKKworIzogc2V0dXAuYzo1MTEKK21zZ2lkICJ1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9ucyBmb3VuZDoiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOyggOyepeyGjCDtmZXsnqXsnbQg7J6I7Iq164uI64ukOiIKKworIzogc2V0dXAuYzo1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Jes64qU642wIOyYpOulmCIKKworIzogc2V0dXAuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGxhcmdlIHRvIGJlIGEgLmdpdCBmaWxlOiAnJXMnIgorbXNnc3RyICIuZ2l0IO2MjOydvOydtCDrhIjrrLQg7YG964uI64ukOiAnJXMnIgorCisjOiBzZXR1cC5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOydveuKlOuNsCDsmKTrpZgiCisKKyM6IHNldHVwLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLquYPtjIzsnbwg7ZiV7Iud7J20IOyemOuqu+uQmOyXiOyKteuLiOuLpDogJXMiCisKKyM6IHNldHVwLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgIuq5g+2MjOydvOyXkCDqsr3roZzqsIAg7JeG7Iq164uI64ukOiAlcyIKKworIzogc2V0dXAuYzo1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICLquYMg7KCA7J6l7IaM6rCAIOyVhOuLmeuLiOuLpDogJXMiCisKKyM6IHNldHVwLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIickJXMn7J20KOqwgCkg64SI66y0IO2BveuLiOuLpCIKKworIzogc2V0dXAuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgIuq5gyDsoIDsnqXshozqsIAg7JWE64uZ64uI64ukOiAnJXMnIgorCisjOiBzZXR1cC5jOjY4MiBzZXR1cC5jOjY4NCBzZXR1cC5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkCDrjIDtlbQgY2hkaXLrpbwg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNldHVwLmM6Njg3IHNldHVwLmM6NzQzIHNldHVwLmM6NzUzIHNldHVwLmM6NzkyIHNldHVwLmM6ODAwIHNldHVwLmM6ODE1Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIu2YhOyerCDrlJTroInthLDrpqzroZwg64+M7JWE7JisIOyImCDsl4bsirXri4jri6QiCisKKyM6IHNldHVwLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICIo7ZiE7J6sIO2PtOuNlCDrmJDripQg7IOB7JyEIO2PtOuNlCDspJEg7J2867aA6rCAKSDquYMg7KCA7J6l7IaM6rCAIOyVhOuLmeuLiOuLpDogJXMiCisKKyM6IHNldHVwLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclKnMlcyVzJyIKK21zZ3N0ciAiJyUqcyVzJXMn7JeQIOuMgO2VtCBzdGF0KCnsnbQg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBzZXR1cC5jOjEwNTQKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLtmITsnqwg7J6R7JeFIOuUlOugie2EsOumrOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2V0dXAuYzoxMDY2IHNldHVwLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgIiclcyfsl5Ag64yA7ZW0IOuzgOqyvSDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc2V0dXAuYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKyJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIKK21zZ3N0ciAiIgorIijtmITsnqwg7Y+0642UIOuYkOuKlCDsg4HsnIQg7Y+0642UIOu2gO2EsCDrp4jsmrTtirgg7JyE7LmYICVzIOq5jOyngCDsnbzrtoDqsIApIOq5gyDsoIDsnqXshozqsIAg7JWE64uZ64uIIgorIuuLpFxuIgorIu2MjOydvCDsi5zsiqTthZwg6rK96rOE7JeQ7IScIOykkeyngO2VqeuLiOuLpC4gKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0g7ISk7KCV65CY7KeAIOyViiIKKyLsnYwpIgorCisjOiBzZXR1cC5jOjExNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyJjb3JlLnNoYXJlZFJlcG9zaXRvcnkg7YyM7J2866qo65OcIOqwkuyXkCAoMCUuM28pIOusuOygnOqwgCDsnojsirXri4jri6QuXG4iCisi7YyM7J287J2YIOyGjOycoOyekOyXkCDsnb3quLDsmYAg7JOw6riwIOq2jO2VnOydtCDsnojslrTslbwg7ZWp64uI64ukLiIKKworIzogc2V0dXAuYzoxMjExCittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAiL2Rldi9udWxsIOyXtOq4sCDrmJDripQgZHVwKCnsnbQg7Iuk7YyoIgorCisjOiBzZXR1cC5jOjEyMjYKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiZm9yayDsi6TtjKgiCisKKyM6IHNldHVwLmM6MTIzMQorbXNnaWQgInNldHNpZCBmYWlsZWQiCittc2dzdHIgInNldHNpZCDsi6TtjKgiCisKKyM6IHNoYTEtZmlsZS5jOjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiclcycg6rK966Gc6rCAIOyXhuyKteuLiOuLpCIKKworIzogc2hhMS1maWxlLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICIiCisi66CI7Y2865+w7IqkICclcycg7KCA7J6l7IaM66W8IOyXsOqysOuQnCDssrTtgazslYTsm4PsnLzroZwg7JOw6riw64qUIOyVhOyngSDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogc2hhMS1maWxlLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIuugiO2NvOufsOyKpCAnJXMnIOyggOyepeyGjOqwgCDroZzsu6wg7KCA7J6l7IaM6rCAIOyVhOuLmeuLiOuLpC4iCisKKyM6IHNoYTEtZmlsZS5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgIuugiO2NvOufsOyKpCAnJXMnIOyggOyepeyGjOqwgCDslpXsnYAg7KCA7J6l7IaM7J6F64uI64ukIgorCisjOiBzaGExLWZpbGUuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICLroIjtjbzrn7DsiqQgJyVzJyDsoIDsnqXshozqsIAg6re4656Y7ZSE7Yq466GcIOu2meydgCDsoIDsnqXshozsnoXri4jri6QiCisKKyM6IHNoYTEtbmFtZS5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAi7Ken7J2AIFNIQTEgJXPsnYAo64qUKSDsl6zrn7/sl5Ag64yA7J2R65Cp64uI64ukIgorCisjOiBzaGExLW5hbWUuYzo0NTMKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICLtm4Trs7TripQg64uk7J2M6rO8IOqwmeyKteuLiOuLpDoiCisKKyM6IHNoYTEtbmFtZS5jOjY5NQorbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIuq5g+yXkOyEnOuKlCDrs7TthrUgNDDqsJzsnZggMTbsp4TsiJgg66y47J6Q66GcIOuBneuCmOuKlCDroIjtjbzrn7DsiqTrpbwg66eM65Ok7KeAIOyViuyKteuLiOuLpC5cbiIKKyIxNuynhOyImCDrrLjsnpAgNDDsnpDrpbwg7KeA7KCV7ZaI7J2EIOuVjCDsnbQg66CI7Y2865+w7Iqk6rCAIOustOyLnOuQmOq4sCDrlYzrrLjsnoXri4jri6QuIOydtFxuIgorIuugiO2NvOufsOyKpOuKlCDsi6TsiJjroZwg66eM65Ok7Ja07KGM7J2EIOyImOuPhCDsnojsirXri4jri6QuIOyYiOulvCDrk6TslrQsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisi7Jes6riw7IScIFwiJGJyXCLsnYAg67mE7Ja0IOyeiOycvOuvgOuhnCA0MOyekCDroIjtjbzrn7DsiqTqsIAg66eM65Ok7Ja07KeR64uI64ukLiDsnbQg66CI7Y2865+w7Iqk66W8XG4iCisi7ZmV7J247ZW0IOuztOyLnOqzoCDsnpjrqrsg66eM65Ok7Ja07KeEIOqyg+ydtOuptCDsp4DsmrDsi63si5zsmKQuIOydtCDrqZTsi5zsp4Drpbwg67O06rOgIOyLtuyngFxuIgorIuyViuycvOuptCBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIg66qF66C57J2EIOyCrOyaqe2VmOyLreyLnOyYpC4iCisKKyM6IHN1Ym1vZHVsZS5jOjk3IHN1Ym1vZHVsZS5jOjEzMQorbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisi67OR7ZWp7ZWY7KeAIOyViuydgCAuZ2l0bW9kdWxlc+ulvCDrsJTqv4Ag7IiYIOyXhuyKteuLiOuLpC4g67OR7ZWpIOy2qeuPjOydhCDrqLzsoIAg7ZW06rKw7ZWY7Iut7Iuc7JikIgorCisjOiBzdWJtb2R1bGUuYzoxMDEgc3VibW9kdWxlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAi6rK966Gc6rCAICVz7J28IOuVjCAuZ2l0bW9kdWxlc+ydmCDshLnshZjsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICIuZ2l0bW9kdWxlcyDtla3rqqkgJXPsnYQo66W8KSDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICIlc+yXkCDrjIDtlZwgLmdpdG1vZHVsZXMg7ZWt66qp7J2EIOygnOqxsO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxNTMKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICLsl4XrjbDsnbTtirjtlZwgLmdpdG1vZHVsZXPrpbwg7Luk67CL7ZWgIOyCrO2VreycvOuhnCDtkZzsi5ztlZjripTrjbAg7Iuk7YyoIgorCisjOiBzdWJtb2R1bGUuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgIuuCtOyaqeydtCDsl4bripQg7ZWY7JyEIOuqqOuTiCAnJXMn7JeQ7IScIgorCisjOiBzdWJtb2R1bGUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICLqsr3roZzrqoXshLggJyVzJ+ydgCjripQpICcnJS4qcycg7ZWY7JyEIOuqqOuTiCDslYjsl5Ag7J6I7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgIuyEnOu4jOuqqOuTiCDtla3rqqkgJyVzJyglcynsnYAo64qUKSAlc+ydtOqzoCwg7Luk67CL7J20IOyVhOuLmeuLiOuLpCIKKworIzogc3VibW9kdWxlLmM6MTA2OSBidWlsdGluL2JyYW5jaC5jOjY1MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTc0MworbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJIRUFE66W8IOyYrOuwlOuluCDroIjtjbzrn7DsiqTroZwg6rWs7ZW064K064qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IHN1Ym1vZHVsZS5jOjEzNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICInJXMn7J2AKOuKlCkg6rmDIOyggOyepeyGjOuhnCDsnbjsi53rkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIu2VmOychCDrqqjrk4ggJyVzJ+yXkOyEnCAnZ2l0IHN0YXR1cyfrpbwg7Iuc7J6R7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjE1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIu2VmOychCDrqqjrk4ggJyVzJ+yXkOyEnCAnZ2l0IHN0YXR1cyfrpbwg7Iuk7ZaJ7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjE2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgaGFzIGRpcnR5IGluZGV4IgorbXNnc3RyICInJXMnIO2VmOychCDrqqjrk4jsl5Ag67OA6rK965CcIOyduOuNseyKpOqwgCDsnojsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyLsl6zrn6wg6rCc7J2YIOyekeyXhSDtj7TrjZTqsIAg7J6I64qUIO2VmOychCDrqqjrk4ggJyVzJ+yXkCDrjIDtlbQgcmVsb2NhdGVfZ2l0ZGly7J2AIOyngOybkO2VmOyngCAiCisi7JWK7Iq164uI64ukIgorCisjOiBzdWJtb2R1bGUuYzoxNzMwIHN1Ym1vZHVsZS5jOjE3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCAnJXMn7J2YIOydtOumhOydhCDssL7slYTrs7wg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLmM6MTczNCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI2MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiJyVzJyDrlJTroInthLDrpqzrpbwg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorIiclcyVzJ+ydmCDquYMg65SU66CJ7YSw66as66W8IOyYruq5geuLiOuLpDpcbiIKKyInJXMn7JeQ7IScXG4iCisiJyVzJyjsnLwp66GcXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi7J6s6reA7KCB7Jy866GcICclcycg7ZWY7JyEIOuqqOuTiOyXkCDrk6TslrTqsIgg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLmM6MTg2NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAiJy4uJyDslYjsl5DshJwgbHMtZmlsZXPrpbwg7Iuc7J6R7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHN1Ym1vZHVsZS5jOjE5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIgorbXNnc3RyICJscy10cmVl6rCAIOyYiOyDgey5mCDrqrvtlZwg7L2U65OcICVk67KI7J2EIOumrO2EtO2WiOyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAi7J2Y7Ius7Iqk65+s7Jq0IO2VmOychCDrqqjrk4gg7J2066aE7J2EIOustOyLnO2VqeuLiOuLpDogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyOTQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZXMgbm90IGFsbG93ZWQgZm9yIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCittc2dzdHIgInN1Ym1vZHVsZS5mZXRjaGpvYnMg6rCS7JeQIOydjOyImOulvCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAiJXPsnZgg6rCS7J20IOyYrOuwlOultOyngCDslYrsirXri4jri6QiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgIu2KuOugiOydvOufrCDrqoXroLkgJyVzJyDsi6Ttlokg7Iuk7YyoIgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg6rCSICclcycsIO2CpCAnJXMnIgorCisjOiB0cmFpbGVyLmM6NTM5IHRyYWlsZXIuYzo1NDQgYnVpbHRpbi9yZW1vdGUuYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAiJXPsnbQo6rCAKSDsl6zrn6zqsJzsnoXri4jri6QiCisKKyM6IHRyYWlsZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAi7Yq466CI7J2865+sICclLipzJ+yXkOyEnCDruYgg7Yq466CI7J2865+sIO2GoO2BsCIKKworIzogdHJhaWxlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIiclcycg7J6F66ClIO2MjOydvOydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHRyYWlsZXIuYzoxMDA4IGJ1aWx0aW4vYW0uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAiJXPsl5Ag64yA7ZW0IHN0YXQoKe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB0cmFpbGVyLmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiJyVzJyDtjIzsnbzsnbQg7J2867CYIO2MjOydvOydtCDslYTri5nri4jri6QiCisKKyM6IHRyYWlsZXIuYzoxMDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IHdyaXRhYmxlIGJ5IHVzZXIiCittc2dzdHIgIuyCrOyaqeyekOqwgCAlcyDtjIzsnbzsl5Ag7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IHRyYWlsZXIuYzoxMDI0Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIuyehOyLnCDtjIzsnbzsnYQg7Je0IOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiB0cmFpbGVyLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICLsnoTsi5wg7YyM7J28IOydtOumhOydhCAnJXMnKOycvCnroZwg67CU6r+AIOyImCDsl4bsirXri4jri6QiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiJyUxJHMn7J2YIOyXheyKpO2KuOumvOydhCAnJTMkcyfsnZggJyUyJHMnKOycvCnroZwg7ISk7KCV7ZWp64uI64ukXG4iCisKKyM6IHRyYW5zcG9ydC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgInRyYW5zcG9ydDog7J6Y66q765CcIOq5iuydtCDsmLXshZg6ICVzIgorCisjOiB0cmFuc3BvcnQuYzo1ODQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICJ0cmFuc3BvcnQuY29sb3IuKiDshKTsoJXsnYQg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IHRyYW5zcG9ydC5jOjk5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIiIKKyLri6TsnYwg7ZWY7JyEIOuqqOuTiCDqsr3roZzsl5Ag66as66qo7Yq4IOyWtOuUlOyXkOuPhCDsl4bripRcbiIKKyLrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpDpcbiIKKworIzogdHJhbnNwb3J0LmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLrpqzrqqjtirjsl5Ag7ZG47Iuc7ZWY66Ck66m0XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyLrmJDripQg7ZW064u5IOqyveuhnOuhnCBjZO2VnCDri6TsnYxcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisi66qF66C57J2EIOyLnOuPhO2VtCDrs7Tsi63si5zsmKRcbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTAwOAorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAi7KSR7KeA7ZWoLiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICIlcyDroIjtjbzrn7DsiqTrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IHRyZWUtd2Fsay5jOjMxCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICLrhIjrrLQg7Ken7J2AIO2KuOumrCDsmKTruIzsoJ3tirgiCisKKyM6IHRyZWUtd2Fsay5jOjM3Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAi7Yq466asIOyXlO2KuOumrOyXkCDsnpjrqrvrkJwg7ZiV7Iud7J2YIOuqqOuTnCIKKworIzogdHJlZS13YWxrLmM6NDEKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICLtirjrpqwg7JeU7Yq466as7JeQIOu5iCDtjIzsnbwg7J2066aEIgorCisjOiB0cmVlLXdhbGsuYzoxMTMKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBmaWxlIgorbXNnc3RyICLrhIjrrLQg7Ken7J2AIO2KuOumrCDtjIzsnbwiCisKKyM6IHVucGFjay10cmVlcy5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLri6TsnYwg7YyM7J287J2YIOuhnOy7rCDrs4Dqsr0g7IKs7ZWt7J2EIOyytO2BrOyVhOybgyDrlYzrrLjsl5Ag642u7Ja0IOyTsOqyjCDrkKnri4jri6Q6XG4iCisiJSVz67iM656c7LmY66W8IOyghO2ZmO2VmOq4sCDsoITsl5Ag67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlZjqsbDrgpgg7Iqk7YOc7Iuc7ZWY7Iut7Iuc7JikLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLri6TsnYwg7YyM7J287J2YIOuhnOy7rCDrs4Dqsr0g7IKs7ZWt7J2EIOyytO2BrOyVhOybgyDrlYzrrLjsl5Ag642u7Ja0IOyTsOqyjCDrkKnri4jri6Q6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLri6TsnYwg7YyM7J287J2YIOuhnOy7rCDrs4Dqsr0g7IKs7ZWt7J2EIOuzke2VqSDrlYzrrLjsl5Ag642u7Ja0IOyTsOqyjCDrkKnri4jri6Q6XG4iCisiJSVz67OR7ZWp7ZWY6riwIOyghOyXkCDrs4Dqsr0g7IKs7ZWt7J2EIOy7pOuwi+2VmOqxsOuCmCDsiqTtg5zsi5ztlZjsi63si5zsmKQuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAi64uk7J2MIO2MjOydvOydmCDroZzsu6wg67OA6rK9IOyCrO2VreydhCDrs5Htlakg65WM66y47JeQIOuNruyWtCDsk7Dqsowg65Cp64uI64ukLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi64uk7J2MIO2MjOydvOydmCDroZzsu6wg67OA6rK9IOyCrO2VreydhCAlcyDrlYzrrLjsl5Ag642u7Ja0IOyTsOqyjCDrkKnri4jri6Q6XG4iCisiJSVzJXMg7KCE7JeQIOuzgOqyvSDsgqztla3snYQg7Luk67CL7ZWY6rGw64KYIOyKpO2DnOyLnO2VmOyLreyLnOyYpC4iCisKKyM6IHVucGFjay10cmVlcy5jOjEyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisi64uk7J2MIO2MjOydvOydmCDroZzsu6wg67OA6rK9IOyCrO2VreydhCAlcyDrlYzrrLjsl5Ag642u7Ja0IOyTsOqyjCDrkKnri4jri6Q6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlbTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuuLpOydjCDrlJTroInthLDrpqzrpbwg7JeF642w7J207Yq47ZWY66m0IOq3uCDslYjsnZgg7LaU7KCB7ZWY7KeAIOyViuuKlCDtjIzsnbzsnYQg7J6D7Ja067KE66a964uI64ukOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIuyytO2BrOyVhOybgyDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlOydmCDtjIzsnbzsnbQg7KCc6rGw65Cp64uI64ukOlxuIgorIiUlc+u4jOuenOy5mOulvCDsoITtmZjtlZjquLAg7KCE7JeQIOydtCDtjIzsnbzsnYQg7Jiu6riw6rGw64KYIOygnOqxsO2VmOyLreyLnOyYpC4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi7LK07YGs7JWE7JuDIOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642UIO2MjOydvOydtCDsoJzqsbDrkKnri4jri6Q6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi67OR7ZWpIOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642U7J2YIO2MjOydvOydtCDsoJzqsbDrkKnri4jri6Q6XG4iCisiJSVz67OR7ZWp7ZWY6riwIOyghOyXkCDsnbQg7YyM7J287J2EIOyYruq4sOqxsOuCmCDsoJzqsbDtlZjsi63si5zsmKQuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuuzke2VqSDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlCDtjIzsnbzsnbQg7KCc6rGw65Cp64uI64ukOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIiVzIOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642U7J2YIO2MjOydvOydtCDsoJzqsbDrkKnri4jri6Q6XG4iCisiJSVzJXMg7ZWY6riwIOyghOyXkCDsnbQg7YyM7J287J2EIOyYruq4sOqxsOuCmCDsoJzqsbDtlZjsi63si5zsmKQuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIiVzIOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642UIO2MjOydvOydtCDsoJzqsbDrkKnri4jri6Q6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisi7LK07YGs7JWE7JuDIOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642U7J2YIO2MjOydvOydhCDrja7slrTslIHri4jri6Q6XG4iCisiJSVz67iM656c7LmY66W8IOyghO2ZmO2VmOq4sCDsoITsl5Ag7J20IO2MjOydvOydhCDsmK7quLDqsbDrgpgg7KCc6rGw7ZWY7Iut7Iuc7JikLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuyytO2BrOyVhOybgyDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlCDtjIzsnbzsnYQg642u7Ja07JSB64uI64ukOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLrs5Htlakg65WM66y47JeQIOy2lOygge2VmOyngCDslYrripQg64uk7J2MIOyekeyXhSDtj7TrjZTsnZgg7YyM7J287J2EIOuNruyWtOyUgeuLiOuLpDpcbiIKKyIlJXPrs5HtlantlZjquLAg7KCE7JeQIOydtCDtjIzsnbzsnYQg7Jiu6riw6rGw64KYIOygnOqxsO2VmOyLreyLnOyYpC4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuuzke2VqSDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlCDtjIzsnbzsnYQg642u7Ja07JSB64uI64ukOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyIlcyDrlYzrrLjsl5Ag7LaU7KCB7ZWY7KeAIOyViuuKlCDri6TsnYwg7J6R7JeFIO2PtOuNlOydmCDtjIzsnbzsnYQg642u7Ja07JSB64uI64ukOlxuIgorIiUlcyVzIO2VmOq4sCDsoITsl5Ag7J20IO2MjOydvOydhCDsmK7quLDqsbDrgpgg7KCc6rGw7ZWY7Iut7Iuc7JikLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiJXMg65WM66y47JeQIOy2lOygge2VmOyngCDslYrripQg64uk7J2MIOyekeyXhSDtj7TrjZQg7YyM7J287J2EIOuNruyWtOyUgeuLiOuLpDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIKK21zZ3N0ciAiJyVzJyDtla3rqqnsnbQgJyVzJ+yZgCjqs7wpIOqyuey5qeuLiOuLpC4gIOustuydhCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuuTnOusuCDssrTtgazslYTsm4PsnYQg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6QuIOuLpOydjCDtla3rqqnsnbQg7LWc7Iug7Jy866GcIOyXheuNsOydtO2KuOuQmOyngCDslYoiCisi7JWY7Iq164uI64ukOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi65Oc66y4IOyytO2BrOyVhOybgyDsl4XrjbDsnbTtirgg65WM66y47JeQIOy2lOygge2VmOyngCDslYrripQg64uk7J2MIOyekeyXhSDtj7TrjZQg7YyM7J287J2EIOuNruyWtOyUgeuLiCIKKyLri6Q6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuuTnOusuCDssrTtgazslYTsm4Mg7JeF642w7J207Yq4IOuVjOusuOyXkCDstpTsoIHtlZjsp4Ag7JWK64qUIOuLpOydjCDsnpHsl4Ug7Y+0642UIO2MjOydvOydhCDsoJzqsbDtlanri4giCisi64ukOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICIiCisi7ZWY7JyEIOuqqOuTiOydhCAg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6Q6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICLspJHsp4DtlahcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzQ0Cittc2dpZCAiQ2hlY2tpbmcgb3V0IGZpbGVzIgorbXNnc3RyICLtjIzsnbzsnYQg6rCA7KC47Ji164uI64ukIgorCisjOiB1cmxtYXRjaC5jOjE2MworbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJVUkwg7Iqk7YK0IOydtOumhOydtCDsnpjrqrvrkJjsl4jqsbDrgpggJzovLyfqsIAg65Kk7JeQIOu2meyngCDslYrslZjsirXri4jri6QiCisKKyM6IHVybG1hdGNoLmM6MTg3IHVybG1hdGNoLmM6MzQ2IHVybG1hdGNoLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAi7J6Y66q765CcICVYWCDsnbTsiqTsvIDsnbTtlIQg7Iuc7YCA7IqkIgorCisjOiB1cmxtYXRjaC5jOjIxNQorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICLtmLjsiqTtirjqsIAg7JeG6rOgIOyKpO2CtOydtCAnZmlsZTon7J20IOyVhOuLmeuLiOuLpCIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICInZmlsZTonIFVSTOyXkOuKlCDtj6ztirgg67KI7Zi466W8IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB1cmxtYXRjaC5jOjI0NworbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgIu2YuOyKpO2KuCDsnbTrpoTsl5Ag7J6Y66q765CcIOusuOyekCIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLsnpjrqrvrkJwg7Y+s7Yq4IOuyiO2YuCIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICLqsr3roZzsl5DshJwg7J6Y66q765CcICcuLicg67aA67aEIgorCisjOiB3b3JrdHJlZS5jOjI0NSBidWlsdGluL2FtLmM6MjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7J2964qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogd29ya3RyZWUuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhdCBtYWluIHdvcmtpbmcgdHJlZSBpcyBub3QgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5IgorbXNnc3RyICLrqZTsnbgg7J6R7JeFIO2PtOuNlOydmCAnJXMn7J2AKOuKlCkg7KCA7J6l7IaMIOuUlOugie2EsOumrOqwgCDslYTri5nri4jri6QiCisKKyM6IHdvcmt0cmVlLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiJyVzJyDtjIzsnbzsnYAg7J6R7JeFIO2PtOuNlCDsnITsuZjsnZgg7KCI64yAIOqyveuhnOulvCDqsIDsp4Dsp4Ag7JWK7Iq164uI64ukIgorCisjOiB3b3JrdHJlZS5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMn7J20KOqwgCkg7JeG7Iq164uI64ukIgorCisjOiB3b3JrdHJlZS5jOjMyMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIC5naXQg7YyM7J287J20IOyVhOuLmeuLiOuLpCwg7IOB7YOcIOy9lOuTnOqwgCAlZCDsnoXri4jri6QiCisKKyM6IHdvcmt0cmVlLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgYmFjayB0byAnJXMnIgorbXNnc3RyICInJXMn7J2AKOuKlCkgJyVzJ+ydhCjrpbwpIOqwgOumrO2CpOyngCDslYrsirXri4jri6QiCisKKyM6IHdyYXBwZXIuYzoyMjMgd3JhcHBlci5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICLsnb3quLDsmYAg7JOw6riw7Jqp7Jy866GcICclcyfsnYQo66W8KSDsl7Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogd3JhcHBlci5jOjIyNyB3cmFwcGVyLmM6Mzk3IGJ1aWx0aW4vYW0uYzozMjAgYnVpbHRpbi9hbS5jOjc3MAorIzogYnVpbHRpbi9hbS5jOjg2MiBidWlsdGluL21lcmdlLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICInJXMn7J2EKOulvCkg7J296riw7Jqp7Jy866GcIOyXtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB3cmFwcGVyLmM6NDI0IHdyYXBwZXIuYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICInJXMn7JeQIOygkeq3vO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiB3cmFwcGVyLmM6NjMyCittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLtmITsnqwg7J6R7JeFIOuUlOugie2EsOumrOulvCDqsIDsoLjsmKwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogd3Qtc3RhdHVzLmM6MTU0Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICLrs5HtlantlZjsp4Ag7JWK7J2AIOqyveuhnDoiCisKKyM6IHd0LXN0YXR1cy5jOjE4MSB3dC1zdGF0dXMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICjsiqTthYzsnbTsp4Ag7ZW07KCc7ZWY66Ck66m0IFwiZ2l0IHJlc2V0ICVzIDztjIzsnbw+Li4uXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTgzIHd0LXN0YXR1cy5jOjIxMAorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAo7Iqk7YWM7J207KeAIO2VtOygnO2VmOugpOuptCBcImdpdCBybSAtLWNhY2hlZCA87YyM7J28Pi4uLlwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjE4NworbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAo7ZW06rKw7ZaI64uk6rOgIO2RnOyLnO2VmOugpOuptCBcImdpdCBhZGQgPO2MjOydvD4uLi5cIuydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxODkgd3Qtc3RhdHVzLmM6MTkzCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAo7ZW06rKw7ZaI64uk6rOgIO2RnOyLnO2VmOugpOuptCDslYzrp57qsowgXCJnaXQgYWRkL3JtIDztjIzsnbw+Li4uXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTkxCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKO2VtOqysO2WiOuLpOqzoCDtkZzsi5ztlZjroKTrqbQgXCJnaXQgcm0gPO2MjOydvD4uLi5cIuydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoyMDIgd3Qtc3RhdHVzLmM6MTAxNQorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi7Luk67CL7ZWgIOuzgOqyvSDsgqztla06IgorCisjOiB3dC1zdGF0dXMuYzoyMjAgd3Qtc3RhdHVzLmM6MTAyNAorbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAi7Luk67CL7ZWY64+E66GdIOygle2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VrToiCisKKyM6IHd0LXN0YXR1cy5jOjIyNAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICjrrLTsl4fsnYQg7Luk67CL7ZWg7KeAIOuwlOq+uOugpOuptCBcImdpdCBhZGQgPO2MjOydvD4uLi5cIuydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoyMjYKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAo66y07JeH7J2EIOy7pOuwi+2VoOyngCDrsJTqvrjroKTrqbQgXCJnaXQgYWRkL3JtIDztjIzsnbw+Li4uXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MjI3Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAo7J6R7JeFIO2PtOuNlOydmCDrs4Dqsr0g7IKs7ZWt7J2EIOuyhOumrOugpOuptCBcImdpdCBjaGVja291dCAtLSA87YyM7J28Pi4uLlwi7J2EIOyCrOyaqe2VmOyLrSIKKyLsi5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoyMjkKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKyIgICjtlZjsnIQg66qo65OI7J2YIOy2lOyggeuQmOyngCDslYrripQg7YyM7J287J2064KYIOyImOygleuQnCDrgrTsmqnsnYQg7Luk67CL7ZWY6rGw64KYIOuyhOumrOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAo7Luk67CL7ZWgIOyCrO2VreyXkCDtj6ztlajtlZjroKTrqbQgXCJnaXQgJXMgPO2MjOydvD4uLi5cIuydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoyNTYKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICLslpHsqr3sl5DshJwg7IKt7KCcOiIKKworIzogd3Qtc3RhdHVzLmM6MjU4Cittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICLsnbQg7Kq97JeQ7IScIOy2lOqwgDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2MAorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgIuyggCDsqr3sl5DshJwg7IKt7KCcOiIKKworIzogd3Qtc3RhdHVzLmM6MjYyCittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgIuyggCDsqr3sl5DshJwg7LaU6rCAOiIKKworIzogd3Qtc3RhdHVzLmM6MjY0Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgIuydtCDsqr3sl5DshJwg7IKt7KCcOiIKKworIzogd3Qtc3RhdHVzLmM6MjY2Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgIuyWkeyqveyXkOyEnCDstpTqsIA6IgorCisjOiB3dC1zdGF0dXMuYzoyNjgKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAi7JaR7Kq97JeQ7IScIOyImOyglToiCisKKyM6IHd0LXN0YXR1cy5jOjI3OAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAi7IOIIO2MjOydvDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MAorbXNnaWQgImNvcGllZDoiCittc2dzdHIgIuuzteyCrO2VqDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MgorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICLsgq3soJztlag6IgorCisjOiB3dC1zdGF0dXMuYzoyODQKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgIuyImOygle2VqDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NgorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICLsnbTrpoQg67CU6r+IOiIKKworIzogd3Qtc3RhdHVzLmM6Mjg4Cittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgIuyiheulmCDrsJTrgJw6IgorCisjOiB3dC1zdGF0dXMuYzoyOTAKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAi7JWMIOyImCDsl4bsnYw6IgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIuuzke2Vqe2VmOyngCDslYrsnYw6IgorCisjOiB3dC1zdGF0dXMuYzozNzIKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICLsg4gg7Luk67CLLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3NAorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAi7IiY7KCV7ZWcIOuCtOyaqSwgIgorCisjOiB3dC1zdGF0dXMuYzozNzYKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICLstpTsoIHtlZjsp4Ag7JWK7J2AIOuCtOyaqSwgIgorCisjOiB3dC1zdGF0dXMuYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAi7ZiE7J6sIOyKpO2DnOyLnOyXkCAlZOqwnCDtla3rqqnsnbQg7J6I7Iq164uI64ukIgorCisjOiB3dC1zdGF0dXMuYzo4ODUKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAi67OA6rK965CY7JeI7KeA66eMIOyXheuNsOydtO2KuO2VmOyngCDslYrsnYAg7ZWY7JyEIOuqqOuTiDoiCisKKyM6IHd0LXN0YXR1cy5jOjg4NworbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIuy7pOuwi+2VoCDtlZjsnIQg66qo65OI7J2YIOuzgOqyvSDsgqztla06IgorCisjOiB3dC1zdGF0dXMuYzo5NjkKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICIiCisi7JyE7J2YIOykhOydhCDrsJTqvrjqsbDrgpgg7KeA7Jqw7KeAIOuniOyLreyLnOyYpC5cbiIKKyLslYTrnpgg7J6I64qUIOuCtOyaqeydgCDrqqjrkZAg66y07Iuc65Cp64uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTA4NAorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDqsr3roZzqsIAg7J6I7Iq164uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTA4NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKOy2qeuPjOydhCDrsJTroZzsnqHqs6AgXCJnaXQgY29tbWl0XCLsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTA4OQorbXNnaWQgIiAgKHVzZSBcImdpdCBtZXJnZSAtLWFib3J0XCIgdG8gYWJvcnQgdGhlIG1lcmdlKSIKK21zZ3N0ciAiICAo67OR7ZWp7J2EIOykkeuLqO2VmOugpOuptCBcImdpdCBtZXJnZSAtLWFib3J0XCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTA5NAorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIuuqqOuToCDstqnrj4zsnYQg67CU66Gc7J6h7JWY7KeA66eMIOyVhOyngSDrs5HtlantlZjripQg7KSR7J6F64uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTA5NworbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKOuzke2VqeydhCDrp4jrrLTrpqztlZjroKTrqbQgXCJnaXQgY29tbWl0XCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTEwNworbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiYW0g7IS47IWYIOykkeqwhOyXkCDsnojsirXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxMTEwCittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLtmITsnqwg7Yyo7LmY6rCAIOu5hOyWtCDsnojsirXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo7Lap64+M7J2EIOuwlOuhnOyeoeydgCDri6TsnYwgXCJnaXQgYW0gLS1jb250aW51ZVwi66W8IOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjExMTYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAo7J20IO2MqOy5mOulvCDqsbTrhIgg65uw66Ck66m0IFwiZ2l0IGFtIC0tc2tpcFwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjExMTgKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKOybkOuzuCDruIzrnpzsuZjrpbwg67O16rWs7ZWY66Ck66m0IFwiZ2l0IGFtIC0tYWJvcnRcIuulvCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMjUwCittc2dpZCAiZ2l0LXJlYmFzZS10b2RvIGlzIG1pc3NpbmcuIgorbXNnc3RyICJnaXQtcmViYXNlLXRvZG/qsIAg7JeG7Iq164uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTI1MgorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICLsmYTro4ztlZwg66qF66C5IOyXhuydjC4iCisKKyM6IHd0LXN0YXR1cy5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAi7LWc6re8IOyZhOujjO2VnCDrqoXroLkgKCVk6rCcIOuqheuguSDsmYTro4wpOiIKKworIzogd3Qtc3RhdHVzLmM6MTI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAo7J6Q7IS47ZWcIOygleuztOuKlCAlcyDtjIzsnbwg7LC46rOgKSIKKworIzogd3Qtc3RhdHVzLmM6MTI3MQorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIuuqheugueydtCDrgqjslYTsnojsp4Ag7JWK7J2MLiIKKworIzogd3Qtc3RhdHVzLmM6MTI3NAorIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICLri6TsnYzsl5Ag7ZWgIOuqheuguSAoJWTqsJwg66qF66C5IOuCqOydjCk6IgorCisjOiB3dC1zdGF0dXMuYzoxMjgyCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgICjrs7Tqs6Ag7Y647KeR7ZWY66Ck66m0IFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wi66W8IOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIu2YhOyerCAnJXMnIOu4jOuenOy5mOulvCAnJXMnIOychOuhnCDrpqzrsqDsnbTsiqTtlZjripQg7KSR7J6F64uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTMwMAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAi7ZiE7J6sIOumrOuyoOydtOyKpO2VmOuKlCDspJHsnoXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxMzE0Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKOy2qeuPjOydhCDrsJTroZzsnqHqs6AgXCJnaXQgcmViYXNlIC0tY29udGludWVcIuulvCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMzE2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICjsnbQg7Yyo7LmY66W8IOqxtOuEiOubsOugpOuptCBcImdpdCByZWJhc2UgLS1za2lwXCLsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTMxOAorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAo7JuQ67O4IOu4jOuenOy5mOulvCDqsIDsoLjsmKTroKTrqbQgXCJnaXQgcmViYXNlIC0tYWJvcnRcIuulvCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMzI0Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAo66qo65OgIOy2qeuPjOydhCDrsJTroZzsnqHslZjsirXri4jri6Q6IFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLrpbwg7Iuk7ZaJ7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTMyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLtmITsnqwgJyVzJyDruIzrnpzsuZjrpbwgJyVzJyDsnITroZwg66as67Kg7J207Iqk7ZWY64qUIOykkSDsu6TrsIvsnYQg67aE66as7ZWY64qUIOykkeyeheuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMzMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAi7ZiE7J6sIOumrOuyoOydtOyKpO2VmOuKlCDspJEg7Luk67CL7J2EIOu2hOumrO2VmOuKlCDspJHsnoXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxMzM2Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKOyekeyXhSDtj7TrjZTqsIAg6rmo64GX7ZW07KeA66m0LCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwi66W8IOyLpO2Wie2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiJyVzJyDruIzrnpzsuZjrpbwgJyVzJyDsnITroZwg66as67Kg7J207Iqk7ZWY64qUIOykkSDsu6TrsIvsnYQg7Y647KeR7ZWY64qUIOykkeyeheuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNDUKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIuumrOuyoOydtOyKpCDspJHsl5Ag7Luk67CL7J2EIO2OuOynke2VmOuKlCDspJHsnoXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxMzQ4Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiICAo7ZiE7J6sIOy7pOuwi+ydhCDsiJjsoJXtlZjroKTrqbQgXCJnaXQgY29tbWl0IC0tYW1lbmRcIuydhCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMzUwCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIgICjrs4Dqsr0g7IKs7ZWt7JeQIOunjOyhse2VoCDrlYwgXCJnaXQgcmViYXNlIC0tY29udGludWVcIuulvCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIu2YhOyerCAlcyDsu6TrsIvsnYQg672R7JWEIOuCtOqzoCDsnojsirXri4jri6QuIgorCisjOiB3dC1zdGF0dXMuYzoxMzY1Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKOy2qeuPjOydhCDrsJTroZzsnqHqs6AgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwi66W8IOyLpO2Wie2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNjgKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKOuqqOuToCDstqnrj4zsnYQg67CU66Gc7J6h7JWY7Iq164uI64ukOiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCLrpbwg7Iuk7ZaJ7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3MAorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIgICjrvZHquLAg7J6R7JeF7J2EIOy3qOyGjO2VmOugpOuptCBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAi7ZiE7J6sICVzIOy7pOuwi+ydhCDrkJjrj4zrpqzripQg7KSR7J6F64uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MTM4NAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo7Lap64+M7J2EIOuwlOuhnOyeoeqzoCBcImdpdCByZXZlcnQgLS1jb250aW51ZVwi66W8IOyLpO2Wie2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzODcKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICjrqqjrk6Ag7Lap64+M7J2EIOuwlOuhnOyeoeyVmOyKteuLiOuLpDogXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIuulvCDsi6TtlontlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxMzg5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAo65CY64+M66as6riwIOyekeyXheydhCDst6jshoztlZjroKTrqbQgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIuulvCDsgqzsmqntlZjsi63si5zsmKQpIgorCisjOiB3dC1zdGF0dXMuYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiJ+ydtOuTseu2hO2VmOuKlCDspJHsnoXri4jri6QuICclcycg67iM656c7LmY67aA7YSwIOyLnOyekS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICIn7J2065Ox67aE7ZWY64qUIOykkeyeheuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDcKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKOybkOuemCDruIzrnpzsuZjroZwg64+M7JWE6rCA66Ck66m0IFwiZ2l0IGJpc2VjdCByZXNldFwi7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IHd0LXN0YXR1cy5jOjE2MDQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICLtmITsnqwg67iM656c7LmYICIKKworIzogd3Qtc3RhdHVzLmM6MTYxMAorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIuuMgO2ZlO2YlSDrpqzrsqDsnbTsiqQg7KeE7ZaJIOykkS4g6rCIIOychOy5mOuKlCAiCisKKyM6IHd0LXN0YXR1cy5jOjE2MTIKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLrpqzrsqDsnbTsiqQg7KeE7ZaJIOykkS4g6rCIIOychOy5mOuKlCAiCisKKyM6IHd0LXN0YXR1cy5jOjE2MTcKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAiSEVBROqwgCDri6TsnYwg7JyE7LmY7JeQ7IScIOu2hOumrDogIgorCisjOiB3dC1zdGF0dXMuYzoxNjE5Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiSEVBROqwgCDri6TsnYzsnLzroZzrtoDthLAg67aE66asOiAiCisKKyM6IHd0LXN0YXR1cy5jOjE2MjIKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICLtmITsnqwg7Ja065akIOu4jOuenOy5mOuPhCDsgqzsmqntlZjsp4Ag7JWK7J2MLiIKKworIzogd3Qtc3RhdHVzLmM6MTY0MgorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICLstZzstIgg7Luk67CLIgorCisjOiB3dC1zdGF0dXMuYzoxNjQzCittc2dpZCAiTm8gY29tbWl0cyB5ZXQiCittc2dzdHIgIuyVhOyngSDsu6TrsIvsnbQg7JeG7Iq164uI64ukIgorCisjOiB3dC1zdGF0dXMuYzoxNjU3Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLstpTsoIHtlZjsp4Ag7JWK64qUIO2MjOydvCIKKworIzogd3Qtc3RhdHVzLmM6MTY1OQorbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIuustOyLnO2VnCDtjIzsnbwiCisKKyM6IHd0LXN0YXR1cy5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIuy2lOygge2VmOyngCDslYrripQg7YyM7J287J2EIOuqqOuRkCDtmZXsnbjtlZjripTrjbAgJS4yZuy0iOqwgCDqsbjroLjsirXri4jri6QuXG4iCisiJ3N0YXR1cyAtdW5vJyDsmLXshZjsnYQg7JOw66m0IOu5qOudvOyniCDsiJjrj4Qg7J6I7KeA66eMLCDsg4gg7YyM7J287J2EXG4iCisi7KeB7KCRIOywvuyVhOyEnCDstpTqsIDtlbTslbwg7ZWp64uI64ukLiAoJ2dpdCBoZWxwIHN0YXR1cycg7LC46rOgKSIKKworIzogd3Qtc3RhdHVzLmM6MTY2OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICLstpTsoIHtlZjsp4Ag7JWK64qUIO2MjOydvOydhCDrs7Tsp4Ag7JWK7Iq164uI64ukJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE2NzEKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKOy2lOygge2VmOyngCDslYrripQg7YyM7J287J2EIOuztOugpOuptCAtdSDsmLXshZjsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogd3Qtc3RhdHVzLmM6MTY3NworbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgIuuzgOqyvSDsgqztla0g7JeG7J2MIgorCisjOiB3dC1zdGF0dXMuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisi7Luk67CL7ZWgIOuzgOqyvSDsgqztla3snYQg7LaU6rCA7ZWY7KeAIOyViuyVmOyKteuLiOuLpCAoXCJnaXQgYWRkXCIg67CPL+uYkOuKlCBcImdpdCBjb21taXQgLWEiCisiXCLrpbxcbiIKKyLsgqzsmqntlZjsi63si5zsmKQpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAi7Luk67CL7ZWgIOuzgOqyvSDsgqztla3snYQg7LaU6rCA7ZWY7KeAIOyViuyVmOyKteuLiOuLpFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyLsu6TrsIvtlaAg7IKs7ZWt7J2EIOy2lOqwgO2VmOyngCDslYrslZjsp4Drp4wg7LaU7KCB7ZWY7KeAIOyViuuKlCDtjIzsnbzsnbQg7J6I7Iq164uI64ukICjstpTsoIHtlZjroKTrqbQgIgorIlwiZ2l0XG4iCisiYWRkXCLrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICLsu6TrsIvtlaAg7IKs7ZWt7J2EIOy2lOqwgO2VmOyngCDslYrslZjsp4Drp4wg7LaU7KCB7ZWY7KeAIOyViuuKlCDtjIzsnbzsnbQg7J6I7Iq164uI64ukXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyLsu6TrsIvtlaAg7IKs7ZWtIOyXhuydjCAo7YyM7J287J2EIOunjOuTpOqxsOuCmCDrs7XsgqztlZjqs6AgXCJnaXQgYWRkXCLrpbwg7IKs7Jqp7ZWY66m0IOy2lOygge2VqeuLiCIKKyLri6QpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2OTcgd3Qtc3RhdHVzLmM6MTcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICLsu6TrsIvtlaAg7IKs7ZWtIOyXhuydjFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIiIKKyLsu6TrsIvtlaAg7IKs7ZWtIOyXhuydjCAo7LaU7KCB7ZWY7KeAIOyViuuKlCDtjIzsnbzsnYQg67O066Ck66m0IC11IOyYteyFmOydhCDsgqzsmqntlZjsi63si5zsmKQpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICLsu6TrsIvtlaAg7IKs7ZWtIOyXhuydjCwg7J6R7JeFIO2PtOuNlCDquajrgZftlahcbiIKKworIzogd3Qtc3RhdHVzLmM6MTgxNworbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAi7JWE7KeBIOy7pOuwi+ydtCDsl4bsirXri4jri6QsIOychOy5mDogPCIKKworIzogd3Qtc3RhdHVzLmM6MTgyMQorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKOu4jOuenOy5mCDsl4bsnYwpIgorCisjOiB3dC1zdGF0dXMuYzoxODUyCittc2dpZCAiZGlmZmVyZW50IgorbXNnc3RyICLri6TrpoQiCisKKyM6IHd0LXN0YXR1cy5jOjE4NTQgd3Qtc3RhdHVzLmM6MTg2MgorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIuuLpOydjCDrkqTsl5A6ICIKKworIzogd3Qtc3RhdHVzLmM6MTg1NyB3dC1zdGF0dXMuYzoxODYwCittc2dpZCAiYWhlYWQgIgorbXNnc3RyICLri6TsnYwg7JWe7JeQOiAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiVzIO2VoCDsiJgg7JeG7Iq164uI64ukOiDsiqTthYzsnbTsp5XtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukLiIKKworIzogd3Qtc3RhdHVzLmM6MjM3MgorbXNnaWQgImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi7LaU6rCA66GcLCDsnbjrjbHsiqTsl5Ag7Luk67CL7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IHd0LXN0YXR1cy5jOjIzNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIlcyDtlaAg7IiYIOyXhuyKteuLiOuLpDog7J24642x7Iqk7JeQIOy7pOuwi+2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIiclcycg7YyM7J28IOyCreygnOyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjQKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPOyYteyFmD5dIFstLV0gPOqyveuhnOuqheyEuD4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAi7JiI7IOB7LmYIOuqu+2VnCBkaWZmIOyDge2DnCAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo4OCBidWlsdGluL2NvbW1pdC5jOjI2NgorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAi7YyM7J28IOyXheuNsOydtO2KuOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAiJyVzJyDsoJzqsbBcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzMKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAi7J24642x7Iqk66W8IOyDiOuhnCDqs6DsuZwg64uk7J2MIOy7pOuwiyDtkZzsi5ztlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla06IgorCisjOiBidWlsdGluL2FkZC5jOjIzMyBidWlsdGluL3Jldi1wYXJzZS5jOjg5MgorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiJyVzJyDtjIzsnbzsnYQg7JOw6riw7Jqp7Jy866GcIOyXtCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hZGQuYzoyNDgKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIu2MqOy5mOulvCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzoyNTEKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAi7Yyo7LmYIO2OuOynkeyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSBzdGF0KCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzoyNTYKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIuu5iCDtjKjsuZguIOykkeyngC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7KCB7Jqp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY5Cittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICLri6TsnYwg6rK966Gc64qUIC5naXRpZ25vcmUg7YyM7J28IOykkSDtlZjrgpgg65WM66y47JeQIOustOyLnO2VqeuLiOuLpDpcbiIKKworIzogYnVpbHRpbi9hZGQuYzoyODkgYnVpbHRpbi9jbGVhbi5jOjkxMSBidWlsdGluL2ZldGNoLmM6MTQ1IGJ1aWx0aW4vbXYuYzoxMjMKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTUgYnVpbHRpbi9wdWxsLmM6MjEyIGJ1aWx0aW4vcHVzaC5jOjU1NworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQyIGJ1aWx0aW4vcm0uYzoyNDAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICLqsIDsp5zroZwg7Iuk7ZaJIgorCisjOiBidWlsdGluL2FkZC5jOjI5MgorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgIuuMgO2ZlOyLneycvOuhnCDqs6DrpoXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjkzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1IGJ1aWx0aW4vcmVzZXQuYzozMDIKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAi64yA7ZmU7Iud7Jy866GcIOuzgOqyveuQnCDrtoDrtoTsnYQg7ISg7YOd7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjI5NAorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAi7ZiE7J6sIGRpZmbrpbwg7Y647KeR7ZWY6rOgIOyggeyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzoyOTUKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIuustOyLnO2VmOuKlCDtjIzsnbzsnZgg7LaU6rCA66W8IO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzoyOTYKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi7LaU7KCB65CY64qUIO2MjOydvOydhCDsl4XrjbDsnbTtirjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk3Cittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICLstpTsoIHrkJwg7YyM7J287J2YIOyDiOykhOusuOyekChFT0wp66W8IOyerCDsoIHsmqntlanri4jri6QgKC11IOyYteyFmCDtj6ztlagpIgorCisjOiBidWlsdGluL2FkZC5jOjI5OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAi64KY7KSR7JeQIOy2lOqwgO2VoCDqsoPsnbTrnbzripQg7IKs7Iuk66eMIOq4sOuhne2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzoyOTkKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuy2lOyggeuQmOqzoCDstpTsoIHrkJjsp4Ag7JWK64qUIOuqqOuToCDtjIzsnbzsnZgg67OA6rK9IOyCrO2VreydhCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAyCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIuyekeyXhSDtj7TrjZTsl5DshJwg7KCc6rGw7ZWcIOqyveuhnOulvCDrrLTsi5ztlanri4jri6QgKC0tbm8tYWxs6rO8IOuPmeydvCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA0Cittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICLstpTqsIDtlZjsp4Ag7JWK6rOgIOyduOuNseyKpOunjCDsg4jroZwg6rOg7Lmp64uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjMwNQorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIuyYpOulmCDrlYzrrLjsl5Ag7LaU6rCA7ZWgIOyImCDsl4bripQg7YyM7J287J2EIOqxtOuEiOucgeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzozMDYKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgIuqwgOynnOuhnCDsi6TtlontlojsnYQg65WMIO2MjOydvOydhCDrrLTsi5ztlZjripTsp4Ag7ZmV7J247ZWp64uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjMwNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NAorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiKCsvLSl4IgorCisjOiBidWlsdGluL2FkZC5jOjMwNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NQorbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICLrqqnroZ3snZgg7YyM7J287JeQ7IScIOyLpO2WiSDqsIDriqUg67mE7Yq466W8IOuwlOq/ieuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzozMDkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgIuuCtOyepSDsoIDsnqXshozrpbwg7LaU6rCA7ZWgIOuVjCDqsr3qs6Drpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FkZC5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91J3ZlIGFkZGVkIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgaW5zaWRlIHlvdXIgY3VycmVudCByZXBvc2l0b3J5LlxuIgorIkNsb25lcyBvZiB0aGUgb3V0ZXIgcmVwb3NpdG9yeSB3aWxsIG5vdCBjb250YWluIHRoZSBjb250ZW50cyBvZlxuIgorInRoZSBlbWJlZGRlZCByZXBvc2l0b3J5IGFuZCB3aWxsIG5vdCBrbm93IGhvdyB0byBvYnRhaW4gaXQuXG4iCisiSWYgeW91IG1lYW50IHRvIGFkZCBhIHN1Ym1vZHVsZSwgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJJZiB5b3UgYWRkZWQgdGhpcyBwYXRoIGJ5IG1pc3Rha2UsIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlXG4iCisiaW5kZXggd2l0aDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIu2YhOyerCDsoIDsnqXshowg7JWI7JeQIOuYkCDri6Trpbgg6rmDIOyggOyepeyGjOulvCDstpTqsIDtlojsirXri4jri6QuIOyZuOu2gCDsoIDsnqXshozrpbwg67O17KCc7ZW064+EXG4iCisi64K07J6l65CcIOyggOyepeyGjOydmCDrgrTsmqnsnYQg67O17KCc7ZWY7KeEIOyViuqzoCDslrTrlrvqsowg64K07J6l65CcIOyggOyepeyGjCDrgrTsmqnsnYQg7Ja77J2E7KeAIOygleuztCIKKyLrj4RcbiIKKyLsl4bsirXri4jri6QuIO2VmOychCDrqqjrk4jsnYQg7LaU6rCA7ZWY66Ck66m0LCDri6TsnYwg66qF66C57J2EIOyCrOyaqe2VmOyLreyLnOyYpDpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisi7Iuk7IiY66GcIOydtCDqsr3roZzrpbwg7LaU6rCA7ZaI64uk66m0IOuLpOydjCDrqoXroLnsnLzroZwg7J24642x7Iqk7JeQ7IScIOygnOqxsO2VoCDsiJgg7J6I7Iq164uI64ukOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisi642UIOyekOyEuO2VnCDsoJXrs7TripQgXCJnaXQgaGVscCBzdWJtb2R1bGVcIuydhCDssLjqs6DtlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2FkZC5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmcgZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICLrgrTsnqUg6rmDIOyggOyepeyGjCDstpTqsIA6ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICLsoJXrp5DroZwg7LaU6rCA7ZWY66Ck66m0IC1mIOyYteyFmOydhCDsgqzsmqntlZjsi63si5zsmKQuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mzc4Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAi7YyM7J28IOy2lOqwgOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE2Cittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIOuwjyAtdSDsmLXshZjsnYAg7ISc66GcIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDIzCittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiIgorIi0taWdub3JlLW1pc3Npbmcg7Ji17IWY7J2AIC0tZHJ5LXJ1biDsmLXshZjqs7wg6rCZ7J20IOyCrOyaqe2VoCDqsr3smrDsl5Drp4wg7JO4IOyImCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL2FkZC5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIi0tY2htb2Qg7YyM652866+47YSwICclcyfsnYAo64qUKSAteCDrmJDripQgK3gg7ZiV7Iud7J207Ja07JW8IO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hZGQuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIuyVhOustCDqsoPrj4Qg7KeA7KCV7ZWY7KeAIOyViuyVmOycvOuvgOuhnCDslYTrrLQg6rKD64+EIOy2lOqwgO2VmOyngCDslYrsirXri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICInZ2l0IGFkZCAuJyDrqoXroLnsnYQg7Iuk7ZaJ7ZWY66Ck6rOgIO2VnCDqsoMg7JWE64uI7JeI7Iq164uI6rmMP1xuIgorCisjOiBidWlsdGluL2FkZC5jOjQ0OCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3NyBidWlsdGluL2NoZWNrb3V0LmM6MjgwCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDgzIGJ1aWx0aW4vY2xlYW4uYzo5NTggYnVpbHRpbi9jb21taXQuYzozMjUKKyM6IGJ1aWx0aW4vZGlmZi10cmVlLmM6MTE0IGJ1aWx0aW4vbXYuYzoxNDQgYnVpbHRpbi9yZXNldC5jOjI0MQorIzogYnVpbHRpbi9ybS5jOjI3MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzI4Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICLsnbjrjbHsiqQg7YyM7J287J20IOyGkOyDgeuQmOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjQxNAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICLsnpHshLHsnpAg7Iqk7YGs66a97Yq466W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2FtLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgImFwcGx5cGF0Y2gtbXNnIO2bhO2BrCDrlYzrrLjsl5AgJyVzJ+ydtCjqsIApIOyCreygnOuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzo1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICLsnpjrqrvrkJwg7ZiV7Iud7J2YIOyeheugpSDspIQ6ICclcycuIgorCisjOiBidWlsdGluL2FtLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICInJXMn7JeQ7IScICclcyco7Jy8KeuhnCDrhbjtirjrpbwg67O17IKs7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjYwMgorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiZnNlZWsg7Iuk7YyoIgorCisjOiBidWlsdGluL2FtLmM6NzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICInJXMnIO2MqOy5mOulvCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjg1NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICLtlZzrsojsl5Ag7ZWY64KY7J2YIFN0R0lUIO2MqOy5mCDsi5zrpqzspojrp4wg7KCB7Jqp7ZWgIOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MDMKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAi7Iuc6rCB7J20IOyemOuqu+uQmOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjkwOCBidWlsdGluL2FtLmM6OTIwCittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgIkRhdGUg7KSE7J20IOyemOuqu+uQmOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjkxNQorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICLsi5zqsITrjIAg7Jik7ZSE7IWL7J20IOyemOuqu+uQmOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjEwMDgKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIu2MqOy5mCDtmJXsi50g6rKA7IOJ7J20IOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDEzIGJ1aWx0aW4vY2xvbmUuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiJyVzJyDrlJTroInthLDrpqwg66eM65Ok6riw6rCAIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjEwMTgKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgIu2MqOy5mOulvCDsqrzqsJzripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjExNDggYnVpbHRpbi9jb21taXQuYzozNTEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAi7J24642x7IqkIO2MjOydvOydhCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjExNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIuydtCDrrLjsoJzrpbwg7ZW06rKw7ZaI7J2EIOuVjCBcIiVzIC0tY29udGludWVcIuulvCDsi6TtlontlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2FtLmM6MTE2MworIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgIuydtCDtjKjsuZjrpbwg6rG064SI65uw66Ck66m0LCDqt7gg64yA7IugIFwiJXMgLS1za2lwXCLsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9hbS5jOjExNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICIiCisi7JuQ656YIOu4jOuenOy5mOulvCDrs7XqtaztlZjqs6Ag7Yyo7LmYIOyggeyaqeydhCDspJHsp4DtlZjroKTrqbQgXCIlcyAtLWFib3J0XCLrpbwg7Iuk7ZaJ7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9hbS5jOjEyNzEKK21zZ2lkICJQYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIu2MqOy5mOqwgCDruYTslrQg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjEzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICLsnpjrqrvrkJwg7Iug7JuQIOykhDogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjEzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiJXMg7Luk67CL7J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MTU1NAorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIuyggOyepeyGjOyXkCAzLeuwqe2WpSDrs5HtlansnLzroZwg64yA7Iug7ZWgIOuVjCDtlYTsmpTtlZwg67iU66Gt7J20IOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTU2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAi7J24642x7IqkIOygleuztOulvCDsgqzsmqntlbQg6riw67O4IO2KuOumrOulvCDri6Tsi5wg66eM65Ot64uI64ukLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTU3NQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyLtjKjsuZjrpbwg7KeB7KCRIO2OuOynke2VmOyFqOyKteuLiOq5jD9cbiIKKyLsnbQg7Yyo7LmY64qUIOyduOuNseyKpOyXkCDquLDroZ3rkJwg67iU66Gt7JeQ64qUIOyggeyaqeuQmOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MTU4MQorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAi67Kg7J207IqkIO2MqOy5mCDsoIHsmqkg67CPIDMt67Cp7ZalIOuzke2VqeycvOuhnCDrjIDsi6Dtlanri4jri6QuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjA2Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAi67OA6rK9IOyCrO2VreyXkOyEnCDrs5HtlantlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzcKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICLruYgg7Luk67CLIOuCtOyXreyXkCDrjIDtlbQg7KCB7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MTY4MyBidWlsdGluL2FtLmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIuuLpOyLnCDsi5zsnpHtlaAg7IiYIOyXhuyKteuLiOuLpDogJXPsnbQo6rCAKSDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MTcwMworbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKK21zZ3N0ciAiIgorIu2EsOuvuOuEkOyXkCDtkZzspIAg7J6F66Cl7J20IOyXsOqysOuQmOyngCDslYrsnYAg7IOB7YOc7JeQ7IScIOuMgO2ZlO2YleycvOuhnCDsi6TtlontlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzA4Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICLsu6TrsIsg67O466y47J2AOiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9hbS5jOjE3MTgKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICLsoIHsmqk/IOyYiFt5XS/slYTri4jsmKRbbl0v7Y647KeRW2VdL+2MqOy5mCDrs7TquLBbdl0v66qo65GQIOyggeyaqVthXTogIgorCisjOiBidWlsdGluL2FtLmM6MTc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIuuzgOqyveuQnCDsnbjrjbHsiqQ6IO2MqOy5mOulvCDsoIHsmqntlaAg7IiYIOyXhuyKteuLiOuLpCAoZGlydHk6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE4MDggYnVpbHRpbi9hbS5jOjE4NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIuyggeyaqe2VmOuKlCDspJE6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODI0Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICLrs4Dqsr0g7IKs7ZWtIOyXhuydjCAtLSDtjKjsuZjqsIAg7J2066+4IOyggeyaqeuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICLtjKjsuZjqsIAgJXMgJS4qcyDsnITsuZjsl5DshJwg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MTgzOAorbXNnaWQgIlVzZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCfrpbwg7IKs7Jqp7ZWY7JesIOyLpO2MqO2VnCDtjKjsuZjrpbwg67O8IOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODgyCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisi67OA6rK9IOyCrO2VreydtCDsl4bsirXri4jri6QgLSAnZ2l0IGFkZCcg7IKs7Jqp7J2EIOyeiuycvOyFqOyKteuLiOq5jD9cbiIKKyLsu6TrsIvsnLzroZwg7ZGc7Iuc7ZWgIOyCrO2VreydtCDrgqjslYQg7J6I7KeAIOyViuycvOuptCwg7J2066+4IOqwmeydgCDtjKjsuZjsl5DshJwg7KCB7Jqp65CcXG4iCisi6rK97Jqw7J28IOyImOuPhCDsnojsirXri4jri6QuIOq3uOufsCDqsr3smrDsl5DripQg7J20IO2MqOy5mOulvCDqsbTrhIjrm7DrqbQg65Cp64uI64ukLiIKKworIzogYnVpbHRpbi9hbS5jOjE4ODkKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyLsnbjrjbHsiqTsl5Ag7JWE7KeBIOuzke2Vqe2VmOyngCDslYrsnYAg6rK966Gc6rCAIOuCqOyVhCDsnojsirXri4jri6QuXG4iCisi7Lap64+M7J2EIO2VtOqysO2VnCDtjIzsnbzsnYQgJ2dpdCBhZGQn7ZW07IScIO2VtOqysO2WiOuLpOqzoCDtkZzsi5ztlbTslbwg7ZWp64uI64ukLlxuIgorIu2MjOydvOydmCBcIuyggCDsqr3sl5DshJwg7IKt7KCcXCLrpbwg67Cb7JWE65Ok7J2066Ck66m0IGBnaXQgcm1g7J2EIOyLpO2Wie2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTk2IGJ1aWx0aW4vYW0uYzoyMDAwIGJ1aWx0aW4vYW0uYzoyMDEyIGJ1aWx0aW4vcmVzZXQuYzozMjQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiJyVzJyDsmKTruIzsoJ3tirjrpbwg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MjA0OAorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAi7J24642x7IqkIOyngOyasOq4sOyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDgzCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyLrp4jsp4Drp4kgJ2FtJyDsi6TtjKgg7J207ZuEIEhFQUTrpbwg7Jiu6ri0IOqygyDqsJnsirXri4jri6QuXG4iCisiT1JJR19IRUFE66GcIOuQmOuPjOumrOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIi0tcGF0Y2gtZm9ybWF0IOyYteyFmOyXkCDrjIDtlbQg7J6Y66q765CcIOqwkjogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjEwCittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBbPOyYteyFmD5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjExCittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPOyYteyFmD5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE3Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgIuuMgO2ZlO2YleycvOuhnCDsi6Ttlontlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE5Cittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgIuyVhOustCDrj5nsnpHrj4Qg7ZWY7KeAIOyViuyKteuLiOuLpCAo6rO86rGw67aA7YSwIOyeiOyXiOuNmCDsmLXshZgpIgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICLtlYTsmpTtlZjrqbQgMy3rsKntlqUg67OR7ZWp7Jy866GcIOuMgOyLoO2VmOuPhOuhnSDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU3CisjOiBidWlsdGluL3JlcGFjay5jOjE5MgorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICLqsITrnrXtnogg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuy7pOuwiyDrqZTsi5zsp4Dsl5AgU2lnbmVkLW9mZi1ieSDspITsnYQg64Ko6rmB64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjIyNworbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICJVVEYtOCDsnbjsvZTrlKnsnLzroZwg67OA7ZmY7ZWp64uI64ukICjquLDrs7jqsJIpIgorCisjOiBidWlsdGluL2FtLmM6MjIyOQorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImdpdC1tYWlsaW5mb+yXkCAtayDsmLXshZjsnYQg7JSB64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjIzMQorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImdpdC1tYWlsaW5mb+yXkCAtYiDsmLXshZjsnYQg7JSB64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjIzMworbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImdpdC1tYWlsaW5mb+yXkCAtbSDsmLXshZjsnYQg7JSB64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgIm1ib3gg7ZiV7Iud7JeQIOuMgO2VtCBnaXQtbWFpbHNwbGl07JeQIC0ta2VlcC1jciDsmLXshZjsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICIiCisiYW0ua2VlcGNy7JeQIOustOq0gO2VmOqyjCBnaXQtbWFpbHNwbGl07JeQIC0ta2VlcC1jciDsmLXshZjsnYQg7IKs7Jqp7ZWY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQxCittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICLsoIjst6jshKAg7JWe7J2YIOuqqOuToCDsgqztla3snYQg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjI0MyBidWlsdGluL2FtLmM6MjI0NiBidWlsdGluL2FtLmM6MjI0OSBidWlsdGluL2FtLmM6MjI1MgorIzogYnVpbHRpbi9hbS5jOjIyNTUgYnVpbHRpbi9hbS5jOjIyNTggYnVpbHRpbi9hbS5jOjIyNjEgYnVpbHRpbi9hbS5jOjIyNjQKKyM6IGJ1aWx0aW4vYW0uYzoyMjcwCittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAiZ2l0LWFwcGx57JeQIOuEmOq5geuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyNjAgYnVpbHRpbi9jb21taXQuYzoxMzMyIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2NQorIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjY4IGJ1aWx0aW4vZ3JlcC5jOjg1MyBidWlsdGluL21lcmdlLmM6MjA4CisjOiBidWlsdGluL3B1bGwuYzoxNTAgYnVpbHRpbi9wdWxsLmM6MjA4IGJ1aWx0aW4vcmVwYWNrLmM6MjAxCisjOiBidWlsdGluL3JlcGFjay5jOjIwNSBidWlsdGluL3JlcGFjay5jOjIwNyBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjMxCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY5IGJ1aWx0aW4vdGFnLmM6MzgzIHBhcnNlLW9wdGlvbnMuaDoxNDQKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNDYgcGFyc2Utb3B0aW9ucy5oOjI1OAorbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjY2IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzgKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0MyBidWlsdGluL3RhZy5jOjQxOSBidWlsdGluL3ZlcmlmeS10YWcuYzozOQorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAi7ZiV7IudIgorCisjOiBidWlsdGluL2FtLmM6MjI2NworbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAi7Yyo7LmY7J2YIO2YleyLnSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzMKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgIu2MqOy5mCDsi6TtjKjqsIAg67Cc7IOd7ZaI7J2EIOuVjCDsmKTrpZgg66mU7Iuc7KeAIOuMgOyLoCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc1Cittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAi7Lap64+M7J2EIO2VtOqysO2VnCDri6TsnYwg7Yyo7LmYIOyggeyaqeydhCDqs4Tsho3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4Cittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgIi0tY29udGludWUg7Ji17IWY6rO8IOuPmeydvCIKKworIzogYnVpbHRpbi9hbS5jOjIyODEKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICLtmITsnqwg7Yyo7LmYIOqxtOuEiOubsOq4sCIKKworIzogYnVpbHRpbi9hbS5jOjIyODQKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICLsm5Drnpgg67iM656c7LmY66W8IOuzteq1rO2VmOqzoCDtjKjsuZgg7KCB7JqpIOyekeyXheydhCDspJHsp4Dtlanri4jri6QuIgorCisjOiBidWlsdGluL2FtLmM6MjI4NworbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgIu2MqOy5mCDsnpHsl4XsnYQg7KSR64uo7ZWY7KeA66eMIEhFQUTripQg6re464yA66GcIOuRoeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkwCittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZC4iCittc2dzdHIgIuyggeyaqeuQmOuKlCDtjKjsuZjrpbwg67O07Jes7KSN64uI64ukLiIKKworIyBOT1RFOiDsmLXshZjsnZgg7J2Y66+464qUIOydtOqyjCDrp57ri6QuIOybkOusuOyXkOyEnOuKlCDsgqzsmqnsnpDqsIAKKyMgLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZeudvOuKlCDsmLXshZjsnYQg67O06rOgIOydmOuvuOulvCDslYwg7IiYIOyeiOuLpOqzoCDqsIDsoJXtlZjqs6Ag7J6I64ukLgorIzogYnVpbHRpbi9hbS5jOjIyOTQKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIuy7pOuvuO2EsCDsi5zqsIHsnYQg7J6R7ISx7J6QIOyLnOqwgeycvOuhnCDrhKPsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk2Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAi7ZiE7J6sIOyLnOqwgeydhCDsnpHshLHsnpAg7Iuc6rCB7Jy866GcIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9hbS5jOjIyOTggYnVpbHRpbi9jb21taXQuYzoxNDY4IGJ1aWx0aW4vbWVyZ2UuYzoyMzkKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4MyBidWlsdGluL3JldmVydC5jOjExMiBidWlsdGluL3RhZy5jOjM5OQorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAi7YKkLUlEIgorCisjOiBidWlsdGluL2FtLmM6MjI5OQorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgIkdQRyDshJzrqoUg7Luk67CLIgorCisjOiBidWlsdGluL2FtLmM6MjMwMgorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIoZ2l0LXJlYmFzZeulvCDsnITtlZwg64K067aAIOyaqeuPhCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzIwCittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisiLWIvLS1iaW5hcnkg7Ji17IWY7J2AIOyYpOuenCDsi5zqsIQg64+Z7JWIIOyVhOustCDrj5nsnpHrj4Qg7ZWY7KeAIOyViuyVmOycvOuvgOuhnCwg7J20XG4iCisi7Ji17IWY7J2AIOygnOqxsOuQoCDsmIjsoJXsnoXri4jri6QuIOydtOygnCDsgqzsmqntlZjsp4Ag66eI7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjcKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpCDsnb3quLDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2FtLmM6MjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgIuydtOyghCDrpqzrsqDsnbTsiqQg65SU66CJ7YSw66asICVz7J20KOqwgCkg7JWE7KeBIOyeiOqzoCBtYm9466W8IOyngOygle2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisi67KX7Ja064KcICVzIOuUlOugie2EsOumrOqwgCDrsJzqsqzrkJjsl4jsirXri4jri6QuXG4iCisi7KCc6rGw7ZWY66Ck66m0IFwiZ2l0IGFtIC0tYWJvcnRcIuulvCDsgqzsmqntlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2FtLmM6MjM3MgorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIu2VtOyGjCDsnpHsl4XsnbQg7KeE7ZaJIOykkeyeheuLiOuLpC4g64uk7IucIOyLnOyeke2VmOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPOyYteyFmD5dIFs87Yyo7LmYPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIiclcycg7JWE7Lm07J2067iMIO2MjOydvOydhCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICLstpzroKUg67Cp7Zal7J2EIOuPjOumtCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlOiBVUkwg7JeG64qUIOumrOuqqO2KuCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NTgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgYXJjaGl2ZTogQUNLL05BS+qwgCDsmYDslbwg7ZWY7KeA66eMLCDtlIzrn6zsi5wg7Yyo7YK37J2EIOuwm+yVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IO2UhOuhnO2GoOy9nCDsmKTrpZgiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiDtjIzsnbwg64Gd7J2EIOyYiOyDge2VqCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjEyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDzruYTsoJXsg4Ff7Jqp7Ja0PiA87KCV7IOBX+yaqeyWtD4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICInJXMn7J2AKOuKlCkg7Jis67CU66W4IOyaqeyWtOqwgCDslYTri5nri4jri6QuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgdXNlIHRoZSBidWlsdGluIGNvbW1hbmQgJyVzJyBhcyBhIHRlcm0iCittc2dzdHIgIuuCtOu2gCDrqoXroLnslrQgJyVzJ+ydhCjrpbwpIOyaqeyWtOuhnCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICLsmqnslrQgJyVzJ+ydmCDsnZjrr7jrpbwg67CU6r+AIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MQorbXNnaWQgInBsZWFzZSB1c2UgdHdvIGRpZmZlcmVudCB0ZXJtcyIKK21zZ3N0ciAi65GQIOuLpOuluCDsmqnslrTrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NzgKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0aGUgZmlsZSBCSVNFQ1RfVEVSTVMiCittc2dzdHIgIkJJU0VDVF9URVJNUyDtjIzsnbzsnYQg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMjAKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICInZ2l0IGJpc2VjdCBuZXh0J+ulvCDsiJjtlontlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMjIKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgIuyaqeyWtOulvCAuZ2l0L0JJU0VDVF9URVJNU+yXkCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMjQKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIuydtOuTseu2hCDsg4Htg5zrpbwg7KCV66as7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTI2Cittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgIuyYiOyDgeuQnCDrpqzruYTsoITsnYQg7ZmV7J247ZWp64uI64ukIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTI4Cittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAi7ZiE7J6sIOy7pOuwi+ydhCDqsIDsoLjsmKTripQg64yA7IugIEJJU0VDVF9IRUFE66W8IOyXheuNsOydtO2KuO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE0MworbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyDsmLXshZjsnYAg65GQIOyduOyekOqwgCDtlYTsmpTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNDcKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIOyYteyFmOydgCDsnbjsnpDqsIAg7ZWE7JqU7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI5Cittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzzsmLXshZg+XSBbPOumrOu5hOyghC3smLXshZg+XSBbPOumrOu5hOyghD5dIFstLV0gPO2MjOydvD4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNAorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI866as67mE7KCELeyYteyFmD7snYAgZ2l0LXJldi1saXN0KDEp7JeQIOyEpOuqheuQmOyWtCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICLsg4nsnYQg7JiI7IOB7ZWp64uI64ukOiAlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQxMQorbXNnaWQgIm11c3QgZW5kIHdpdGggYSBjb2xvciIKK21zZ3N0ciAi7IOJ7Jy866GcIOuBneuCmOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgImNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXPsl5Ag7J6Y66q765CcIOyDieydhCAoJyVzJykg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzE1Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgYmxhbWUuY29sb3JpbmciCittc2dzdHIgImJsYW1lLmNvbG9yaW5n7J2YIOqwkuydtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzg2Cittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAi67iU66CI7J6EIO2VreuqqeydhCDssL7snpDrp4jsnpAg7KCQ7KeE7KCB7Jy866GcIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc4NworbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuqwgOyepeyekOumrCDsu6TrsIvsl5Ag64yA7ZW0IOu5iCBTSEEtMeydhCDtkZzsi5ztlanri4jri6QgKOq4sOuzuOqwkjog6rq87KeQKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc4OAorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi7LWc7IOB7JyEIOy7pOuwi+ydhCDqsIDsnqXsnpDrpqwg7Luk67CL7Jy866GcIOy3qOq4ie2VmOyngCDslYrsirXri4jri6QgKOq4sOuzuOqwkjog6rq87KeQKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc4OQorbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIuyekeyXhSDruYTsmqkg7Ya16rOE66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5MAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi6rCV7KCc66GcIOynhO2WiSDsg4HtmansnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzkxCittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIuu4lOugiOyehCDtla3rqqnsl5Ag64yA7ZW0IOy2nOugpSDsoJDsiJjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzkyCittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIuybkOuemCDtjIzsnbwg7J2066aEIO2RnOyLnCAo6riw67O46rCSOiDsnpDrj5kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzkzCittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLsm5Drnpgg7KSEIOuyiO2YuCDtkZzsi5wgKOq4sOuzuOqwkjog7ZWY7KeAIOyViuydjCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTQKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICLsu7Ttk6jthLAg7LKY66as7Jqp7Jy866GcIOyEpOqzhOuQnCDtmJXsi53snLzroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk1Cittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICLspITrp4jri6Qg7Luk67CLIOygleuztOqwgCDtkZzsi5zrkJjripQg7IKs7Jqp7J6Q7JqpIO2YleyLneycvOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTYKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJnaXQtYW5ub3RhdGXsmYAg64+Z7J287ZWcIO2YleyLneydhCDsgqzsmqntlanri4jri6QgKOq4sOuzuOqwkjog6rq87KeQKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5NworbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi64K067aAIO2YleyLneycvOuhnCDsi5zqsIHsnYQg7ZGc7Iuc7ZWp64uI64ukICjquLDrs7jqsJI6IOq6vOynkCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTgKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuq4uOqyjCDsu6TrsIsgU0hBMeydhCDtkZzsi5ztlanri4jri6QgKOq4sOuzuOqwkjog6rq87KeQKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5OQorbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuyekeyEseyekCDsnbTrpoTqs7wg7Iuc6rCB7J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QgKOq4sOuzuOqwkjog6rq87KeQKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi7J6R7ISx7J6QIOydtOumhCDrjIDsi6Dsl5Ag7KCE7J6Q66mU7J287J2EIO2RnOyLnO2VqeuLiOuLpCAo6riw67O46rCSOiDqurzsp5ApIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODAxCittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIuqzteuwsSDrrLjsnpAg7LCo7J207KCQ7J2EIOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMgorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgIuu2iO2VhOyalO2VnCDrqZTtg4DrjbDsnbTthLDrpbwg7JWe7J2YIOykhOqzvCDri6TrpbTqsowg7IOJ7J2EIOy5oO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMworbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAi7KSE7J20IOyWvOuniOuCmCDsmKTrnpgg65CQ64qQ64OQ7JeQIOuUsOudvCDri6TrpbTqsowg7IOJ7J2EIOy5oO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgxMAorbXNnaWQgIlVzZSBhbiBleHBlcmltZW50YWwgaGV1cmlzdGljIHRvIGltcHJvdmUgZGlmZnMiCittc2dzdHIgImRpZmbrpbwg7Zal7IOB7ZWY64qU642wIOyLpO2XmOyggeyduCDtnLTrpqzsiqTti7HsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODEyCittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICLrjZQg7J287LmY7ZWY64qUIO2VreuqqeydhCDssL7ripTrjbAg642UIOyLnOqwhOydhCDshozrqqjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTMKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgImdpdC1yZXYtbGlzdOulvCDtmLjstpztlZjripQg64yA7IugIDztjIzsnbw+7JeQ7IScIOumrOu5hOyghOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTQKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICI87YyM7J28PuydmCDrgrTsmqnsnYQg7LWc7KKFIOydtOuvuOyngOuhnCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTUgYnVpbHRpbi9ibGFtZS5jOjgxNgorbXNnaWQgInNjb3JlIgorbXNnc3RyICLsoJDsiJgiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTUKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICLtjIzsnbwg64K067aA7JmAIO2MjOydvCDsgqzsnbTsnZgg67O17IKs65CcIOykhOydhCDssL7sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTYKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICLtjIzsnbwg64K067aA7JmAIO2MjOydvCDsgqzsnbTsnZgg7Jiu6rKo7KeEIOykhOydhCDssL7sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MTcKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgxNworbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJuLG3spIQgKDHrsogg7KSE67aA7YSwIOyLnOyekSkg7IKs7J207J2YIOuylOychOunjCDsspjrpqwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICIiCisiLS1wcm9ncmVzcyDsmLXshZjsnYAgLS1pbmNyZW1lbnRhbCDsmLXshZjsnbTrgpgg7Y+s7Iqk66CI7J24IO2YleyLneyXkOyEnCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MTcKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICI064WEIDEx64usIOyghCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gIiVzIO2MjOydvOyXkOuKlCDspITsnbQgJWx16rCcIOu/kOyeheuLiOuLpCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNDkKK21zZ2lkICJCbGFtaW5nIGxpbmVzIgorbXNnc3RyICLruJTroIjsnoQg7KSEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs87Ji17IWYPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs87Ji17IWYPl0gWy1sXSBbLWZdIDzruIzrnpzsuZgt7J2066aEPiBbPOyLnOyekS3sp4DsoJA+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOyYteyFmD5dIFstcl0gKC1kIHwgLUQpIDzruIzrnpzsuZgt7J2066aEPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOyYteyFmD5dICgtbSB8IC1NKSBbPOqzvOqxsC3ruIzrnpzsuZg+XSA87IOILeu4jOuenOy5mD4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzEKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzsmLXshZg+XSAoLWMgfCAtQykgWzzqs7zqsbAt67iM656c7LmYPl0gPOyDiC3ruIzrnpzsuZg+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOyYteyFmD5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOyYteyFmD5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyInJXMnIOu4jOuenOy5mOulvCDsgq3soJztlanri4jri6QuIOydtCDruIzrnpzsuZjripQgJyVzJ+yXkFxuIgorIiAgICAgICAgIOuzke2VqeuQmOyXiOyngOunjCwgSEVBROyXkOuKlCDrs5HtlanrkJjsp4Ag7JWK7JWY7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisiJyVzJyDruIzrnpzsuZjrpbwg7IKt7KCc7ZWY7KeAIOyViuyKteuLiOuLpC4g7J20IOu4jOuenOy5mOuKlCAnJXMn7JeQXG4iCisiICAgICAgICAg67OR7ZWp65CY7KeAIOyViuyVmOyngOunjCwgSEVBROyXkOuKlCDrs5HtlanrkJjsl4jsirXri4jri6QuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIiclcyfsl5Ag64yA7ZWcIOy7pOuwiyDsmKTruIzsoJ3tirjrpbwg7LC+7JWE67O8IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIiclcycg67iM656c7LmY6rCAIOyZhOyghO2eiCDrs5HtlanrkJjsp4Ag7JWK7JWY7Iq164uI64ukLlxuIgorIuygleunkOuhnCDsgq3soJztlZjroKTrqbQgJ2dpdCBicmFuY2ggLUQgJXMnIOuqheugueydhCDsi6TtlontlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4MQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgImNvbmZpZy1maWxlIOyXheuNsOydtO2KuOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjEyCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICItYSDsmLXshZjsnYQgLWQg7Ji17IWY6rO8IOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTgKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIkhFQUTsl5Ag64yA7ZWcIOy7pOuwiyDsmKTruIzsoJ3tirjrpbwg7LC+7JWE67O8IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgYnJhbmNoICclcycgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiJyUyJHMnIOychOy5mOyXkCDssrTtgazslYTsm4PtlZwgJyUxJHMnIOu4jOuenOy5mOulvCDsgq3soJztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIuumrOuqqO2KuCDstpTsoIEgJyVzJyDruIzrnpzsuZjqsIAg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiJyVzJyDruIzrnpzsuZjqsIAg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLrpqzrqqjtirgg7LaU7KCBICclcycg67iM656c7LmY66W8IOyCreygnO2VmOuKlOuNsCDsmKTrpZgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICInJXMnIOu4jOuenOy5mOulvCDsgq3soJztlZjripTrjbAg7Jik66WYIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIuumrOuqqO2KuCDstpTsoIEgJyVzJyDruIzrnpzsuZjrpbwg7IKt7KCc7ZWp64uI64ukLiAo6rO86rGwICVzKVxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiJXMg67iM656c7LmYIOyCreygnCAo6rO86rGwICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTYgYnVpbHRpbi90YWcuYzo1OAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICLtj6zrp7cg66y47J6Q7Je07J2EIO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAiJXMg67iM656c7LmY66W8ICVzIOychOy5mOyXkCDrpqzrsqDsnbTsiqTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAiJXMg67iM656c7LmY66W8ICVzIOychOy5mOyXkOyEnCBiaXNlY3Ttlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDc0Cittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICLruIzrnpzsuZgg7JyE7JeQIOyXhuycvOuptOyEnCDtmITsnqwg67iM656c7LmY66W8IOuzteyCrO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzYKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAi67iM656c7LmYIOychOyXkCDsl4bsnLzrqbTshJwg7ZiE7J6sIOu4jOuenOy5mCDsnbTrpoTsnYQg67CU6r+AIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwg67iM656c7LmYIOydtOumhDogJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTQKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAi67iM656c7LmYIOydtOumhCDrsJTqvrjquLAg7Iuk7YyoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUxNgorbXNnaWQgIkJyYW5jaCBjb3B5IGZhaWxlZCIKK21zZ3N0ciAi67iM656c7LmYIOuzteyCrCDsi6TtjKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciCittc2dzdHIgIuydtOumhOydtCDsnpjrqrvrkJwgJyVzJyDruIzrnpzsuZjsnZgg67O17IKs67O47J2EIOunjOuTpOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIuydtOumhOydtCDsnpjrqrvrkJwgJyVzJyDruIzrnpzsuZjsnZgg7J2066aE7J2EIOuLpOultOqyjCDrsJTqv4nri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIuu4jOuenOy5mCDsnbTrpoTsnYQgJXMo7Jy8KeuhnCDrsJTqvrjsp4Drp4wsIEhFQUTrpbwg7JeF642w7J207Yq47ZWY7KeAIOyViuyKteuLiOuLpCEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTM4Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLruIzrnpzsuZjsnZgg7J2066aE7J2EIOuwlOq+uOyngOunjCwgY29uZmlnLWZpbGUg7JeF642w7J207Yq46rCAIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDAKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi67iM656c7LmY66W8IOuzteyCrO2WiOyngOunjCwgY29uZmlnLWZpbGUg7JeF642w7J207Yq46rCAIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorIuuLpOydjCDruIzrnpzsuZjsl5Ag64yA7ZWcIOyEpOuqheydhCDsk7Dsi63si5zsmKQ6XG4iCisiICAlc1xuIgorIiclYycg66y47J6Q66GcIOyLnOyeke2VmOuKlCDspITsnYAg66y07Iuc65Cp64uI64ukLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OQorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAi7J2867CYIOyYteyFmCIKKworIyBGSVhNRTogZ2l2ZSB0d2ljZT8KKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTkxCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIu2VtOyLnOyZgCDsoJzrqqnsnYQg7ZGc7Iuc7ZWY6rOgLCDsl4XsiqTtirjrprwg67iM656c7LmY7JeQIOuMgO2VnCDsnITsuZjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5MgorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIuyXrOufrOqwgOyngCDslYjrgrQg66mU7Iuc7KeA66W8IO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTkzCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgIuy2lOyggSDrqqjrk5zrpbwg7ISk7KCV7ZWp64uI64ukIChnaXQtcHVsbCgxKSDssLjqs6ApIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5NQorbXNnaWQgImRvIG5vdCB1c2UiCittc2dzdHIgIuyCrOyaqe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk3Cittc2dpZCAidXBzdHJlYW0iCittc2dzdHIgIuyXheyKpO2KuOumvCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTcKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIuyXheyKpO2KuOumvCDsoJXrs7Trpbwg67CU6r+J64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5OAorbXNnaWQgIlVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICLsl4XsiqTtirjrprwg7KCV67O066W8IO2VtOygnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTkKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgIuyXrOufrCDsg4nsnLzroZwg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwMAorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIuumrOuqqO2KuCDstpTsoIEg67iM656c7LmY7JeQIOuMgO2VtCDrj5nsnpHtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjAyIGJ1aWx0aW4vYnJhbmNoLmM6NjA0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi7Luk67CL7J20IOyeiOuKlCDruIzrnpzsuZjrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwMyBidWlsdGluL2JyYW5jaC5jOjYwNQorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuy7pOuwi+ydtCDrk6TslrTsnojsp4Ag7JWK7J2AIOu4jOuenOy5mOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjA4Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAi7Yq57KCVIGdpdC1icmFuY2gg64+Z7J6ROiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDkKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAi66as66qo7Yq47JmAIOuhnOy7rOydmCDruIzrnpzsuZgg66qp66Gd7J2EIOuqqOuRkCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjExCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgIuyZhOyghO2eiCDrs5HtlanrkJwg67iM656c7LmY66W8IOyCreygnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTIKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICLruIzrnpzsuZjrpbwg7IKt7KCc7ZWp64uI64ukICjrs5HtlanrkJjsp4Ag7JWK7JWY642U652864+EKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTMKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAi67iM656c7LmY7JmAIOq3uCByZWZsb2frpbwg7Jiu6riw6rGw64KYIOydtOumhOydhCDrsJTqv4nri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE0Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi64yA7IOB7J20IOydtOuvuCDsnojrjZTrnbzrj4Qg67iM656c7LmY66W8IOyYruq4sOqxsOuCmCDsnbTrpoTsnYQg67CU6r+J64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNQorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIuu4jOuenOy5mOyZgCDqt7ggcmVmbG9n66W8IOuzteyCrO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTYKK21zZ2lkICJjb3B5IGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIuuMgOyDgeydtCDsnbTrr7gg7J6I642U652864+EIOu4jOuenOy5mOulvCDrs7Xsgqztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE3Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgIuu4jOuenOy5mCDsnbTrpoQg66qp66Gd7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAi67iM656c7LmY7J2YIHJlZmxvZ+ulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgIuu4jOuenOy5mOydmCDshKTrqoXsnYQg7Y647KeR7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgIuqwleygnOuhnCDrp4zrk6Tqs6AsIOyYruq4sOqxsOuCmCDsnbTrpoTsnYQg67CU6r646rOgLCDsgq3soJztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIuuzke2VqeuQmOuKlCDruIzrnpzsuZjrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi67OR7ZWp65CY7KeAIOyViuuKlCDruIzrnpzsuZjrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAi66qp66Gd7J2EIOyXrOufrCDsl7TroZwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzAKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAia2V5IgorbXNnc3RyICLtgqQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDEgYnVpbHRpbi9scy1yZW1vdGUuYzo3MQorIzogYnVpbHRpbi90YWcuYzo0MTMKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIuygleugrO2VnCDquLDspIDsnbQg65CY64qUIO2VhOuTnCDsnbTrpoQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDMgYnVpbHRpbi9ub3Rlcy5jOjQwOAorIzogYnVpbHRpbi9ub3Rlcy5jOjQxMSBidWlsdGluL25vdGVzLmM6NTcxIGJ1aWx0aW4vbm90ZXMuYzo1NzQKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAib2JqZWN0IgorbXNnc3RyICLsmKTruIzsoJ3tirgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLtlbTri7kg7Jik67iM7KCd7Yq47J2YIOu4jOuenOy5mOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDkgYnVpbHRpbi90YWcuYzo0MjIKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgIuygleugrOqzvCDtlYTthLDrp4HsnYAg64yA7IaM66y47J6Q66W8IOq1rOu2hO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MjAKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM5Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAi7Lac66Cl7JeQIOyCrOyaqe2VoCDtmJXsi50iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU1IGJ1aWx0aW4vY2xvbmUuYzo3MzcKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAi66CI7Y2865+w7IqkL+2XpOuTnCDslYTrnpjsl5AgSEVBROqwgCDsl4bsirXri4jri6QhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY3OAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4g67CPIC0tdmVyYm9zZSDsmLXshZjsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2OTMgYnVpbHRpbi9icmFuY2guYzo3NDUgYnVpbHRpbi9icmFuY2guYzo3NTQKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAi67iM656c7LmYIOydtOumhOydtCDtlYTsmpTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzIxCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi67aE66as65CcIEhFQUTsl5Ag64yA7ZWcIOyEpOuqheydhCDrtoDsl6ztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MjYKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAi7Jes65+sIOu4jOuenOy5mOyXkCDrjIDtlZwg7ISk66qF7J2EIO2OuOynke2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAi7JWE7KeBICclcycg67iM656c7LmY7JeQIOy7pOuwi+ydtCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIuydtOumhOydtCAnJXMn7J24IOu4jOuenOy5mOqwgCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1MQorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICLrs7Xsgqwg7J6R7JeF7JeQIOuMgO2VtCDruIzrnpzsuZjqsIAg64SI66y0IOunjuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjAKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAi7J2066aEIOuwlOq+uOq4sCDsnpHsl4Xsl5Ag64yA7ZW0IOyduOyekOqwgCDrhIjrrLQg66eO7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICLsg4gg7JeF7Iqk7Yq466a87J2EIOyEpOygle2VmOuKlOuNsCDsnbjsnpDqsIAg64SI66y0IOunjuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisiSEVBROydmCDsl4XsiqTtirjrprzsnYQgJXMo7Jy8KeuhnCDshKTsoJXtlaAg7IiYIOyXhuyKteuLiOuLpC4g7Ja065akIOu4jOuenOy5mOuPhCDqsIDrpqztgqTsp4Ag7JWK7Iq164uIIgorIuuLpC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzcyIGJ1aWx0aW4vYnJhbmNoLmM6Nzk0IGJ1aWx0aW4vYnJhbmNoLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgIuq3uOufsCDruIzrnpzsuZjqsIAgKCclcycpIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiclcycg67iM656c7LmY6rCAIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODgKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgIuyXheyKpO2KuOumvCDshKTsoJXsnYQg7ZW07KCc7ZWY64qU642wIOyduOyekOqwgCDrhIjrrLQg66eO7Iq164uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJIRUFE7J2YIOyXheyKpO2KuOumvCDshKTsoJXsnYQg7ZW07KCc7ZWgIOyImCDsl4bsirXri4jri6QuIOyWtOuWpCDruIzrnpzsuZjrj4Qg6rCA66as7YKk7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiJyVzJyDruIzrnpzsuZjsl5Ag7JeF7Iqk7Yq466a8IOygleuztOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODEzCittc2dpZCAiLWEgYW5kIC1yIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCBtYWtlIHNlbnNlIHdpdGggYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorIidnaXQgYnJhbmNoJ+yXkCDrjIDtlbQgLWEg67CPIC1yIOyYteyFmOydgCDruIzrnpzsuZgg7J2066aE6rO8IOqwmeydtCDsk7DrqbQg7JWe65Kk6rCAIOunnuyngCDslYrsirUiCisi64uI64ukIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNgorbXNnaWQgIiIKKyJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgIgorIictLXNldC11cHN0cmVhbS10bycgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInLS1zZXQtdXBzdHJlYW0nIOyYteyFmOydgCDrjZQg7J207IOBIOyCrOyaqeuQmOyngCDslYrqs6Ag7KCc6rGw65CgIOyYiOygleyeheuLiOuLpC4gJy0tdHJhY2snIOuYkCIKKyLripQgJy0tc2V0LXVwc3RyZWFtLXRvJyDsmLXshZjsnYQg7IKs7Jqp7ZW0IOuztOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyDsoJXsg4HsnoXri4jri6RcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo1OAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIuuyiOuTpOydhCDrp4zrk5zroKTrqbQg7KCA7J6l7IaM6rCAIO2VhOyalO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjIKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIuuyiOuTpOydhCDtlbTsoJztlZjroKTrqbQg7KCA7J6l7IaM6rCAIO2VhOyalO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1MjUKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPHR5cGU+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08cGF0aD5dIDxvYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPOyiheulmD4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTzqsr3roZw+XSA87Jik67iM7KCd7Yq4PiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjUyNgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NjMKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjzsooXrpZg+64qUIOuLpOydjCDspJEg7ZWY64KY6rCAIOuQoCDsiJgg7J6I7Iq164uI64ukOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU2NAorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIuyYpOu4jOygne2KuCDsooXrpZjrpbwg67SF64uI64ukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTY1Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IO2BrOq4sOulvCDrtIXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NjcKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgIuyYpOulmOqwgCDsl4bsnYQg65WMIDDsnYQg66as7YS07ZWY6rOgIOuBneuDheuLiOuLpCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU2OAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLsmKTruIzsoJ3tirjsnZgg64K07Jqp7J2EIOyYiOyBmOqyjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NzAKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi67iU66GtIOyYpOu4jOygne2KuOyXkCDrjIDtlbTshJzripQsIOyYpOu4jOygne2KuOydmCDrgrTsmqnsl5Ag64yA7ZW0IHRleHRjb25266W8IOyLpO2Wie2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU3MgorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIuu4lOuhrSDsmKTruIzsoJ3tirjsl5Ag64yA7ZW07ISc64qULCDsmKTruIzsoJ3tirjsnZgg64K07Jqp7JeQIOuMgO2VtCDtlYTthLDrpbwg7Iuk7ZaJ7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTczIGdpdC1zdWJtb2R1bGUuc2g6ODk0Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAi67iU66GtIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTc0Cittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgIi0tdGV4dGNvbnYvLS1maWx0ZXJzIOyYteyFmOyXkCDqsr3roZzrpbwg7KeA7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTc2Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICItcyDrsI8gLXQg7Ji17IWY7J20IOyGkOyDgeuQnCDsmKTruIzsoJ3tirjsl5Ag64yA7ZW0IOuPmeyeke2VmOuPhOuhnSDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NzcKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgIi0tYmF0Y2gg7Lac66Cl7JeQIOuMgO2VtCDrsoTtjbzrp4Htlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NzkKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7J6F66Cl65CcIOyYpOu4jOygne2KuOydmCDsoJXrs7TsmYAg64K07Jqp7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU4MgorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi7ZGc7KSAIOyeheugpeyXkOyEnCDsnoXroKXrkJwg7Jik67iM7KCd7Yq47J2YIOygleuztOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1ODUKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIiIKKyLtirjrpqwg64K067aA7J2YIOyLrOuzvOumrSDrp4Htgazrpbwg65Sw65286rCR64uI64ukICgtLWJhdGNoIOuYkOuKlCAtLWJhdGNoLWNoZWNr7JmAIOqwmeydtCDsgqzsmqkpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTg3Cittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAiLS1iYXRjaCDrmJDripQgLS1iYXRjaC1jaGVja+yXkOyEnCDrqqjrk6Ag7Jik67iM7KCd7Yq466W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTIKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDzsho3shLE+Li4uXSBbLS1dIDzqsr3roZzsnbTrpoQ+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDzsho3shLE+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjAKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgIu2MjOydvOyXkCDshKTsoJXrkJwg66qo65OgIOyGjeyEseydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOyXkOyEnOunjCAuZ2l0YXR0cmlidXRlc+ulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIyIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjQgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMAorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIO2MjOydvCDsnbTrpoTsnYQg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI2Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIk5VTCDrrLjsnpDrpbwg6riw7KSA7Jy866GcIOyekOujjCDsnoXroKUg67CPIOy2nOugpeydhCDrqYjstqXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjAgYnVpbHRpbi9jaGVja291dC5jOjExMTMgYnVpbHRpbi9nYy5jOjUwMAorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi7KeE7ZaJIOyDge2ZqSDtkZzsi5zrpbwg7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICLsnbzsuZjtlZjsp4Ag7JWK64qUIOyeheugpSDqsr3roZzrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjMwCittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgIuqygOyCrO2VoCDrlYwg7J24642x7Iqk66W8IOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTkKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICItLXN0ZGlu7Jy866GcIOqyveuhnCDsnbTrpoTsnYQg7KeA7KCV7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYyCittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IOyYteyFmOydgCAtLXN0ZGluIOyYteyFmOqzvCDqsJnsnbQg7I2o7JW866eMIOydmOuvuOqwgCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY0Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgIuqyveuhnOulvCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OAorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IOyYteyFmOydgCDtlZjrgpjsnZgg6rK966GcIOydtOumhOqzvCDqsJnsnbQg7I2o7JW8IO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzAKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1xdWlldCDrsI8gLS12ZXJib3NlIOyYteyFmOydhCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTczCittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcg7Ji17IWY7J2AIC0tdmVyYm9zZSDsmLXshZjqs7wg6rCZ7J20IOyNqOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjkKK21zZ2lkICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCittc2dzdHIgImdpdCBjaGVjay1tYWlsbWFwIFs87Ji17IWYPl0gPOyXsOudveyymD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIuuYkCDsl7Drnb3sspjrpbwg7ZGc7KSAIOyeheugpeyXkOyEnCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAi7Jew65297LKY66W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDgKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgIuyXsOudveyymOulvCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTI4Cittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPOyYteyFmD5dIFstLV0gWzztjIzsnbw+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE0MworbXNnaWQgInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIgorbXNnc3RyICLsiqTthYzsnbTsp4DripQgMeyXkOyEnCAzIOyCrOydtOydmCDqsJLsnbTqsbDrgpggYWxs7J207Ja07JW8IO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE1OQorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTsnZgg66qo65OgIO2MjOydvOydhCDqsIDsoLjsmLXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjAKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgIuq4sOyhtCDtjIzsnbzsnYQg6rCV7KCc66GcIOuNruyWtCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjIKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICLquLDsobQg7YyM7J286rO8IOyduOuNseyKpOyXkCDsl4bripQg7YyM7J287JeQIOuMgO2VtCDqsr3qs6DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICLsg4gg7YyM7J287J2EIOqwgOyguOyYpOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjYKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAi7J24642x7IqkIO2MjOydvOydmCBzdGF0IOygleuztOulvCDsl4XrjbDsnbTtirjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzAKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg6rK966Gc7J2YIOuqqeuhneydhCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzIKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgIuuCtOyaqeydhCDsnoTsi5wg7YyM7J287JeQIOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTEKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MTAKK21zZ2lkICJzdHJpbmciCittc2dzdHIgIuusuOyekOyXtCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NAorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgIu2MjOydvOydhCDrp4zrk6Qg65WMLCDslZ7sl5AgPOusuOyekOyXtD7snYQg67aZ7J6F64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc2Cittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgIuyngOygle2VnCDsiqTthYzsnbTsp4Dsl5DshJwg7YyM7J287J2EIOuzteyCrO2VtCDsmLXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNworbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs87Ji17IWYPl0gPOu4jOuenOy5mD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyOAorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs87Ji17IWYPl0gWzzruIzrnpzsuZg+XSAtLSA87YyM7J28Pi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNiBidWlsdGluL2NoZWNrb3V0LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICInJXMnIOqyveuhnOyXkCDsmrDrpqzsqr0g67KE7KCE7J20IOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOCBidWlsdGluL2NoZWNrb3V0LmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIiclcycg6rK966Gc7JeQIOyDgeuMgO2OuCDrsoTsoITsnbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIiclcycg6rK966Gc7JeQIO2VhOyalO2VnCDrqqjrk6Ag67KE7KCE7J20IOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIiclcycg6rK966Gc7JeQIO2VhOyalO2VnCDrsoTsoITsnbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICInJXMnIOqyveuhnDog67OR7ZWp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIiclcyfsl5Ag64yA7ZWcIOuzke2VqSDqsrDqs7zrpbwg7LaU6rCA7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTMgYnVpbHRpbi9jaGVja291dC5jOjI1NiBidWlsdGluL2NoZWNrb3V0LmM6MjU5CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyDsmLXshZjsnYAg7JeF642w7J207Yq47ZWY64qUIOqyveuhnOyXkOyEnCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2NSBidWlsdGluL2NoZWNrb3V0LmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyDsmLXshZjsnYAgJXMg7Ji17IWY6rO8IOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIuqyveuhnOulvCDsl4XrjbDsnbTtirjtlZjqs6AgJyVzJyDruIzrnpzsuZjroZwg7KCE7ZmY7ZWY64qUIOydvOydgCDrj5nsi5zsl5Ag7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzQwIGJ1aWx0aW4vY2hlY2tvdXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICInJXMnIOqyveuhnOulvCDrs5HtlantlZjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTA2Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIu2YhOyerCDsnbjrjbHsiqTrpbwg66i87KCAIO2VtOqysO2VtOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIiclcyfsl5Ag64yA7ZW0IHJlZmxvZ+2VoCDsiJgg7JeG7Iq164uI64ukOiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njg0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUTsnZgg7ZiE7J6sIOychOy5mOuKlCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4OCBidWlsdGluL2Nsb25lLmM6NjkxCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJIRUFE66W8IOyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiclcycg67iM656c7LmYIOumrOyFi1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICLsnbTrr7ggJyVzJ+yXkCDsnojsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiJyVzJyDruIzrnpzsuZjroZwg7KCE7ZmY7ZWY6rOgIOumrOyFi+2VqeuLiOuLpFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzAxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIuyDiOuhnCDrp4zrk6AgJyVzJyDruIzrnpzsuZjroZwg7KCE7ZmY7ZWp64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiJyVzJyDruIzrnpzsuZjroZwg7KCE7ZmY7ZWp64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiDqt7jrpqzqs6AgJWTqsJwg642ULlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisi6rK96rOgOiDruIzrnpzsuZgg7KSR7JeQIOyVhOustOqyg+yXkOuPhCDsl7DqsrDrkJjsp4Ag7JWK7J2AIOy7pOuwi+ydtCDrkqTsl5BcbiIKKyIlZOqwnCDsnojsirXri4jri6Q6XG4iCisiXG4iCisiJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyLsg4gg67iM656c7LmY66W8IOunjOuTpOyWtOyEnCDsnbQg7Luk67CL7J2EIOyggOyepe2VmOqzoCDsi7bsnLzrqbQsIOyngOq4iCDri6TsnYzqs7xcbiIKKyLqsJnsnbQg7ZWgIOyImCDsnojsirXri4jri6Q6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPOyDiC3ruIzrnpzsuZgt7J2066aEPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODExCittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAi66as67mE7KCEIHdhbGvsl5Ag64K067aAIOyYpOulmCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgxNQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICLsnbTsoIQgSEVBRCDsnITsuZjripQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NDMgYnVpbHRpbi9jaGVja291dC5jOjEwNDEKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICLtmITsnqwg7JyE7LmY6rCAIOunjOuTpCDsmIjsoJXsnbgg67iM656c7LmY7JeQIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk0NworIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAi7ZWY64KY7J2YIOugiO2NvOufsOyKpOunjCDsp4DsoJXtlbTslbwg7ZWY7KeA66eMICVk6rCc66W8IOyngOygle2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODcgYnVpbHRpbi93b3JrdHJlZS5jOjI0MCBidWlsdGluL3dvcmt0cmVlLmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOugiO2NvOufsOyKpDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDE2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAi66CI7Y2865+w7Iqk6rCAIO2KuOumrOqwgCDslYTri5nri4jri6Q6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA1NQorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLruIzrnpzsuZjrpbwg7KCE7ZmY7ZWY64qU642wIOqyveuhnOulvCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTggYnVpbHRpbi9jaGVja291dC5jOjEwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyDsmLXshZjsnYAg67iM656c7LmY66W8IOyghO2ZmO2VoCDrlYwg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDY2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDY5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDc0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiJyVzJyDsmLXshZjsnYAgJyVzJyDsmLXshZjqs7wg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAi67iM656c7LmY66W8IOy7pOuwi+ydtCDslYTri4wgJyVzJyjsnLwp66GcIOyghO2ZmO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTExNCBidWlsdGluL2NoZWNrb3V0LmM6MTExNiBidWlsdGluL2Nsb25lLmM6MTE4CisjOiBidWlsdGluL3JlbW90ZS5jOjE2NyBidWlsdGluL3JlbW90ZS5jOjE2OSBidWlsdGluL3dvcmt0cmVlLmM6NDMzCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM1Cittc2dpZCAiYnJhbmNoIgorbXNnc3RyICLruIzrnpzsuZgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTE1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgIuyDiCDruIzrnpzsuZjrpbwg66eM65Ok6rOgIOqwgOyguOyYteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMTcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICLruIzrnpzsuZjrpbwg66eM65Ok6rGw64KYIOumrOyFi+2VmOqzoCDqsIDsoLjsmLXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTE4Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAi7IOIIOu4jOuenOy5mOyXkCDrjIDtlZwgcmVmbG9n66W8IOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMTkgYnVpbHRpbi93b3JrdHJlZS5jOjQzNworbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiSEVBROulvCDtlbTri7kg7Luk67CL7JeQ7IScIOu2hOumrO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjAKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAi7IOIIOu4jOuenOy5mOyXkCDrjIDtlZwg7JeF7Iqk7Yq466a8IOygleuztOulvCDshKTsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTIyCittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAi7IOILeu4jOuenOy5mCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjIKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIuyDgeychCDruIzrnpzsuZjqsIAg7JeG64qUIOyDiCDruIzrnpzsuZgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTIzCittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICLrs5HtlanrkJjsp4Ag7JWK7J2AIO2MjOydvOyXkCDrjIDtlbQg7Jqw66as7Kq9IOuyhOyghOydhCDqsIDsoLjsmLXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTI1Cittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIuuzke2VqeuQmOyngCDslYrsnYAg7YyM7J287JeQIOuMgO2VtCDsg4HrjIDtjrgg67KE7KCE7J2EIOqwgOyguOyYteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAi6rCV7KCc66GcIOyytO2BrOyVhOybg+2VqeuLiOuLpCAo66Gc7Lus7JeQ7IScIOyImOygle2VnCDsgqztla3snYQg67KE66a964uI64ukKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMjkKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi7IOIIOu4jOuenOy5mOyXkCDrjIDtlbQgMy3rsKntlqUg67OR7ZWp7J2EIOyImO2Wie2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzEgYnVpbHRpbi9tZXJnZS5jOjI0MQorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi66y07Iuc7ZWY64qUIO2MjOydvOydhCDsl4XrjbDsnbTtirjtlanri4jri6QgKOq4sOuzuOqwkikiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTMzIGJ1aWx0aW4vbG9nLmM6MTQ5OSBwYXJzZS1vcHRpb25zLmg6MjY0Cittc2dpZCAic3R5bGUiCittc2dzdHIgIuyKpO2DgOydvCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzQKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICLstqnrj4wg7Iqk7YOA7J28IChtZXJnZSDrmJDripQgZGlmZjMpIgorCisjIEZJWE1FOiDsnZjrr7gg67aI66qFCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNworbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAi6rK966Gc66qF7IS466W8IOuTnOusuCDtla3rqqnsl5Drp4wg7KCc7ZWc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzkKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyIKK21zZ3N0ciAiJ2dpdCBjaGVja291dCA87JeG64qULeu4jOuenOy5mD4n7JeQIOuMgO2VtCDstpTsuKHtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQxCittc2dpZCAiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIgorbXNnc3RyICLri6Trpbgg7J6R7JeF7Y+0642U7JeQIOyjvOyWtOynhCDroIjtjbzrn7DsiqTqsIAg7J6I64qU7KeAIO2ZleyduO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ1IGJ1aWx0aW4vY2xvbmUuYzo4NSBidWlsdGluL2ZldGNoLmM6MTQ5CisjOiBidWlsdGluL21lcmdlLmM6MjM4IGJ1aWx0aW4vcHVsbC5jOjEyOCBidWlsdGluL3B1c2guYzo1NzIKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLqsJXsoJzroZwg7KeE7ZaJIOyDge2ZqeydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc1Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIg67CPIC0tb3JwaGFuIOyYteyFmOydgCDshJzroZwg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExOTIKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sg7Ji17IWY7J2AIOu4jOuenOy5mCDsnbTrpoTsnbQg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5NworbXNnaWQgIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAi67iM656c7LmYIOydtOumhOydtCDsl4bsirXri4jri6QuIC1iIOyYteyFmOydhCDsgqzsmqntlbQg67O07Iut7Iuc7JikIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIzMworbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICLqsr3roZwg66qF7IS46rCAIOyemOuqu+uQmOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQgYW5kIGEgYnJhbmNoICclcycgY2Fubm90IGJlIGNyZWF0ZWQgZnJvbSBpdCIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOy7pOuwi+ydtCDslYTri4jqs6Ag7Jes6riw7JeQ7IScICclcycg67iM656c7LmY66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dDogLS1kZXRhY2gg7Ji17IWY7J2AIOqyveuhnCDsnbjsnpDrpbwg67Cb7KeAIOyViuyKteuLiOuLpCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0OAorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIOuwjyAtLW1lcmdlIOyYteyFmOydgCDsnbjrjbHsiqTsl5DshJxcbiIKKyLqsIDsoLjsmKwg6rK97Jqw7JeQ64qUIOyEnOuhnCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI2Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDztjKjthLQ+XSBbLXggfCAtWF0gWy0tXSA86rK966GcPi4uLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIiVzIOygnOqxsFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIiVzIOygnOqxsO2VoCDsmIjsoJVcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiJXMg7KCA7J6l7IaMIOqxtOuEiOucgFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIiVzIOyggOyepeyGjCDqsbTrhIjrm7gg7JiI7KCVXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICIlcyDsoJzqsbDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAiIgorIu2UhOuhrO2UhO2KuCDrj4Tsm4Drp5A6XG4iCisiMSAgICAgICAgICAtIO2VtOuLuSDrsojtmLjsnZgg7ZWt66qp7J2EIOyEoO2DnVxuIgorImZvbyAgICAgICAgLSDsnKDsnbztlZwg7KCR65GQ7Ja07JeQIO2VtOuLue2VmOuKlCDtla3rqqkg7ISg7YOdXG4iCisiICAgICAgICAgICAtICjruYgg7J6F66ClKSDshKDtg53tlZjsp4Ag7JWK7J2MXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDYgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgIiIKKyLtlITroaztlITtirgg64+E7JuA66eQOlxuIgorIjEgICAgICAgICAgLSDtlbTri7kg67KI7Zi47J2YIO2VreuqqeydhCDshKDtg51cbiIKKyIzLTUgICAgICAgIC0g7ZW064u5IOuylOychOydmCDtla3rqqnsnYQg7ISg7YOdXG4iCisiMi0zLDYtOSAgICAtIOyXrOufrCDqsJwg67KU7JyE66W8IOyEoO2DnVxuIgorImZvbyAgICAgICAgLSDsnKDsnbztlZwg7KCR65GQ7Ja07JeQIO2VtOuLue2VmOuKlCDtla3rqqkg7ISg7YOdXG4iCisiLS4uLiAgICAgICAtIO2VtOuLuSDtla3rqqkg7ISg7YOdIO2VtOygnFxuIgorIiogICAgICAgICAgLSDrqqjrk6Ag7ZWt66qpIOyEoO2DnVxuIgorIiAgICAgICAgICAgLSAo67mIIOyeheugpSkg7ISg7YOdIOuniOy5qFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTU0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU1OQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/XG4iCittc2dzdHIgIuyWtOudvOudvCAoJXMpP1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAi66y07Iuc7ZWgIO2MqO2EtOydhCDsnoXroKXtlZjsi63si5zsmKQ+PiAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIuqyveqzoDog64uk7J2M7JeQIO2VtOuLue2VmOuKlCDtla3rqqnsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIyCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAi7IKt7KCc7ZWgIO2VreuqqeydhCDshKDtg53tlZjsi63si5zsmKQiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiJXMg7KCc6rGw7ZWp64uI6rmMIFt5L05dPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3ODggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAi64GdLlxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk2Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0g7KeA7Jqw6riwIOyLnOyekVxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0g7IKt7KCc7ZWgIO2VreuqqeydhCDrsojtmLjroZwg7ISg7YOdXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIOyCreygnCDtla3rqqnsnYQgKFwicm0gLWlcIiDsspjrn7wpIO2VmOuCmO2VmOuCmCDtmZXsnbhcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0g7KeA7Jqw6riwIOykkeyngFxuIgorImhlbHAgICAgICAgICAgICAgICAgLSDsnbQg7ZmU66m0IO2RnOyLnFxuIgorIj8gICAgICAgICAgICAgICAgICAgLSDtlITroaztlITtirgg7ISg7YOdIOuPhOybgOunkCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTMKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIqKiog66qF66C5ICoqKiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyNCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTAKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAi66y07JeH7J2EIO2VoOq5jOyalCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMgorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIuuLpOydjCDtla3rqqnsnYQg7KCc6rGw7ZWgIOyYiOygleyeheuLiOuLpDoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDgKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAi7KeA7Jq4IO2MjOydvOydtCDsnbTsoJwg7JeG7Jy866+A66GcIOuBneuDheuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTAKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAi7KCc6rGw7ZWgIO2MjOydvCDsnbTrpoTsnYQg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgImZvcmNlIgorbXNnc3RyICLqsJXsoJwiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTMKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAi64yA7ZmU7ZiVIOyngOyasOq4sCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNQorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi7KCE7LK0IOuUlOugie2EsOumrCDsoJzqsbAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTYgYnVpbHRpbi9kZXNjcmliZS5jOjUzMyBidWlsdGluL2Rlc2NyaWJlLmM6NTM1CisjOiBidWlsdGluL2dyZXAuYzo4NzEgYnVpbHRpbi9sb2cuYzoxNTcgYnVpbHRpbi9sb2cuYzoxNTkKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDggYnVpbHRpbi9uYW1lLXJldi5jOjM5NyBidWlsdGluL25hbWUtcmV2LmM6Mzk5CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc2Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAi7Yyo7YS0IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgIuq3nOy5meydhCDrrLTsi5ztlZjroKTrqbQgPO2MqO2EtD7snYQg7LaU6rCA7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE4Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAi66y07Iuc7ZWcIO2MjOydvOuPhCDsoJzqsbAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MjAKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICLrrLTsi5ztlZwg7YyM7J2866eMIOygnOqxsCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzOAorbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLXgg67CPIC1YIOyYteyFmOydgCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDIKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2XqsIAgdHJ1ZeuhnCDshKTsoJXrkJjsl4jqs6AgLWksIC1uLCAtZiDsmLXshZgg7KSRIO2VmOuCmOuPhCDsk7Dsp4Ag7JWK7JWY7Iq1IgorIuuLiOuLpC4g7KeA7Jqw7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIOq4sOuzuOqwkuydtCB0cnVl7J206rOgIC1pLCAtbiwgLWYg7Ji17IWYIOykkSDtlZjrgpjrj4Qg7JOw7KeAIOyViuyVmOyKteuLiCIKKyLri6QuIOyngOyasOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MgorbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzzsmLXshZg+XSBbLS1dIDzsoIDsnqXshow+IFs865SU66CJ7YSw66asPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NworbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICLssrTtgazslYTsm4PsnYQg66eM65Ok7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4IGJ1aWx0aW4vY2xvbmUuYzo5MCBidWlsdGluL2luaXQtZGIuYzo0NzkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIuqwhOuete2VnCDsoIDsnqXshozrpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAi66+465+sIOyggOyepeyGjOulvCDrp4zrk63ri4jri6QgKOqwhOuete2VnCDsoIDsnqXshozroZwg7Leo6riJKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIuuhnOy7rCDsoIDsnqXshozsl5DshJwg67O17KCc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTYKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAi66Gc7LusIO2VmOuTnOunge2BrOulvCDsgqzsmqntlZjsp4Ag7JWK6rOgLCDtla3sg4Eg67O17IKs7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6rO17JygIOyggOyepeyGjOuhnCDshKTsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAgYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICLqsr3roZzrqoXshLgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAgYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgIuuzteygnO2VnCDqsrDqs7zrrLzsl5DshJwg7ZWY7JyEIOuqqOuTiOydhCDstIjquLDtmZTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIuuzkeugrOyggeycvOuhnCDrs7XsoJztlZjripQg7ZWY7JyE66qo65OIIOqwnOyImCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOCBidWlsdGluL2luaXQtZGIuYzo0NzYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgIuyEnOyLnS3rlJTroInthLDrpqwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDkgYnVpbHRpbi9pbml0LWRiLmM6NDc3Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAi7ISc7Iud7J2EIOyCrOyaqe2VoCDrlJTroInthLDrpqwg7JyE7LmYIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExIGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjMKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTk0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgIuugiO2NvOufsOyKpCDsoIDsnqXshowiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjUKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTk2Cittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAi67O17KCc7ZWgIOqyveyasOyXkOunjCAtLXJlZmVyZW5jZeulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTY2IGJ1aWx0aW4vcmVwYWNrLmM6MjEzCittc2dpZCAibmFtZSIKK21zZ3N0ciAi7J2066aEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE3Cittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICLsl4XsiqTtirjrprwg7LaU7KCB7JeQICdvcmlnaW4nIOuMgOyLoCA87J2066aEPuydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTkKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICLrpqzrqqjtirjsnZggSEVBRCDrjIDsi6AgPOu4jOuenOy5mD7rpbwg6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIxCittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAi66as66qo7Yq47J2YIGdpdC11cGxvYWQtcGFjayDqsr3roZwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjIgYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL2dyZXAuYzo4MTMKKyM6IGJ1aWx0aW4vcHVsbC5jOjIxNgorbXNnaWQgImRlcHRoIgorbXNnc3RyICLquYrsnbQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjMKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgIuyngOygle2VnCDquYrsnbTsnZgg7JaV7J2AIOuzteygnOulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQgYnVpbHRpbi9mZXRjaC5jOjE1MiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTcKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTQKK21zZ2lkICJ0aW1lIgorbXNnc3RyICLsi5zqsIEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIHNpbmNlIGEgc3BlY2lmaWMgdGltZSIKK21zZ3N0ciAi7KeA7KCV7ZWcIOyLnOqwhCDsnbTtm4TsnZgg7JaV7J2AIOuzteygnOulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYgYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICLrpqzruYTsoIQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjcgYnVpbHRpbi9mZXRjaC5jOjE1NQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiCittc2dzdHIgIuumrOu5hOyghOydhCDsoJzsmbjtlbQg7JaV7J2AIOuzteygnOydmCDsu6TrsIsg64K07Jet7J2EIOq5iuqyjCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjkKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgIu2VmOuCmOydmCDruIzrnpzsuZjrp4wg67O17KCc7ZWp64uI64ukIChIRUFEIOuYkOuKlCAtLWJyYW5jaOuhnCDsp4DsoJUpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMxCittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICLtg5zqt7jrpbwg67O17KCc7ZWY7KeAIOyViuyKteuLiOuLpC4g64KY7KSR7JeQIOqwgOyguOyYrCDrlYzrj4Qg7YOc6re466W8IOuUsOultOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMzCittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAi66qo65OgIOuzteygnO2VnCDtlZjsnIQg66qo65OI7J2AIOyWleydgCDrqqjrk4jsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzQgYnVpbHRpbi9pbml0LWRiLmM6NDg1Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICJnaXRkaXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzUgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi6rmDIOuUlOugie2EsOumrOulvCDsnpHsl4Ug7Y+0642U7JmAIOuzhOqwnOydmCDsnITsuZjsl5Ag64aT7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICLtgqQ96rCSIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM3Cittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICLsg4gg7KCA7J6l7IaMIOyViOyXkOyEnCDshKTsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzggYnVpbHRpbi9mZXRjaC5jOjE3MyBidWlsdGluL3B1bGwuYzoyMjkKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4MworbXNnaWQgInVzZSBJUHY0IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJJUHY0IOyjvOyGjOunjCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDAgYnVpbHRpbi9mZXRjaC5jOjE3NSBidWlsdGluL3B1bGwuYzoyMzIKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4NQorbXNnaWQgInVzZSBJUHY2IGFkZHJlc3NlcyBvbmx5IgorbXNnc3RyICJJUHY2IOyjvOyGjOunjCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyNzgKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisi65SU66CJ7YSw66asIOydtOumhOydhCDslYzslYTrgrwg7IiYIOyXhuyKteuLiOuLpC5cbiIKKyLrqoXroLntlonsl5DshJwg65SU66CJ7YSw66as66W8IOyngOygle2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAi7KCV67O0OiAnJXMn7JeQIOuMgO2VnCDrs7TsobAg7YyM7J287J2EIOy2lOqwgO2VoCDsiJgg7JeG7Iq164uI64ukOiAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSDsl6zripTrjbAg7Iuk7YyoIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICInJXMn7J20KOqwgCkg7J6I7KeA66eMIOuUlOugie2EsOumrOqwgCDslYTri5nri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAiJyVzJ+yXkCDrjIDtlbQgc3RhdCgp7J20IOyLpO2MqO2WiOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICInJXMnIOunge2BrOulvCDrp4zrk5zripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAi7YyM7J287J2EICclcyco7Jy8KeuhnCDrs7XsgqztlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgIuyZhOujjC5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ5MQorbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHRoZSBjaGVja291dCB3aXRoICdnaXQgY2hlY2tvdXQgLWYgSEVBRCdcbiIKK21zZ3N0ciAiIgorIuuzteygnOqwgCDshLHqs7Xtlojsp4Drp4wsIOyytO2BrOyVhOybg+ydtCDsi6TtjKjtlojsirXri4jri6QuXG4iCisiJ2dpdCBzdGF0dXMnIOuqheugueycvOuhnCDrrLTsl4fsnYQg7LK07YGs7JWE7JuD7ZaI64qU7KeAIOyCtO2OtOuzvCDsiJgg7J6I6rOgXG4iCisiJ2dpdCBjaGVja291dCAtZiBIRUFEJ+uhnCDssrTtgazslYTsm4PsnYQg64uk7IucIO2VoCDsiJgg7J6I7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIuuzteygnO2VoCDrpqzrqqjtirjsnZggJXMg67iM656c7LmY66W8IOywvuydhCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY2MworbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICLrpqzrqqjtirjsl5DshJwg7ZWE7JqU7ZWcIOyYpOu4jOygne2KuOulvCDrqqjrkZAg67O064K07KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzI4Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICLrpqzrqqjtirggSEVBROqwgCDsl4bripQg66CI7Y2865+w7Iqk66W8IOywuOqzoO2VmOuvgOuhnCwg7LK07YGs7JWE7JuD7ZWgIOyImCDsl4bsirXri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NTgKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U66W8IOyytO2BrOyVhOybg+2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiCittc2dzdHIgIu2MjOudvOuvuO2EsOulvCDshKTsoJUg7YyM7J287JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODY2Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAi7KCV66as7Jqp7Jy866GcIHJlcGFja+2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODY4Cittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICLrs7TsobAg7J6E7IucIO2MjOydvOydhCDsgq3soJztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwNyBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NDcKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICLrhIjrrLQg7J247J6Q6rCAIOunjuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MTEKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIuuzteygnO2VoCDsoIDsnqXshozrpbwg7KeA7KCV7ZW07JW8IO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUg67CPIC0tb3JpZ2luICVzIOyYteyFmOydgCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNworbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUg67CPIC0tc2VwYXJhdGUtZ2l0LWRpciDsmLXshZjsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIOyggOyepeyGjOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NDYgYnVpbHRpbi9mZXRjaC5jOjE0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLquYrsnbTqsIAoJXMpIDDrs7Tri6Qg7YGwIOyImOqwgCDslYTri5nri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAi64yA7IOBIOqyveuhnOqwgCgnJXMnKSDsnbTrr7gg7J6I6rOgIOu5iCDrlJTroInthLDrpqzqsIAg7JWE64uZ64uI64ukLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIuyekeyXhSDtj7TrjZTqsIAoJyVzJykg7J2066+4IOyeiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODEgYnVpbHRpbi9jbG9uZS5jOjEwMDIgYnVpbHRpbi9kaWZmdG9vbC5jOjI3MAorIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0NiBidWlsdGluL3dvcmt0cmVlLmM6Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICInJXMn7J2YIOyVniDrlJTroInthLDrpqzrpbwg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIuyekeyXhSDtj7TrjZTrpbwoJyVzJykg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICLqsITrnrXtlZwg7KCA7J6l7IaM66GcKCclcycpIOuzteygnO2VqeuLiOuLpC4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICInJXMn7JeQIOuzteygnO2VqeuLiOuLpC4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzMgorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiY2xvbmUgLS1yZWN1cnNpdmUg7Ji17IWY7J2AIC0tcmVmZXJlbmNlIOuwjyAtLXJlZmVyZW5jZS1pZi1hYmxlIOyYteyFmOydhCDqsJnsnbQg7JOw64qUICIKKyLqsoPqs7wg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOTMKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tZGVwdGgg7Ji17IWY7J2AIOuhnOy7rCDrs7XsoJzsl5DshJwg66y07Iuc65Cp64uI64ukLiDrjIDsi6Dsl5AgJ2ZpbGU6Ly8n7J2EIOyCrOyaqe2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDk1Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1zaW5jZSDsmLXshZjsnYAg66Gc7LusIOuzteygnOyXkOyEnCDrrLTsi5zrkKnri4jri6QuIOuMgOyLoOyXkCAnZmlsZTovLyfsnYQg7IKs7Jqp7ZWY7IutIgorIuyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDk3Cittc2dpZCAiLS1zaGFsbG93LWV4Y2x1ZGUgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1zaGFsbG93LWV4Y2x1ZGUg7Ji17IWY7J2AIOuhnOy7rCDrs7XsoJzsl5DshJwg66y07Iuc65Cp64uI64ukLiDrjIDsi6Dsl5AgJ2ZpbGU6Ly8n7J2EIOyCrOyaqe2VmCIKKyLsi63si5zsmKQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5OQorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIOyYteyFmOydgCDroZzsu6wg67O17KCc7JeQ7IScIOustOyLnOuQqeuLiOuLpC4g64yA7Iug7JeQICdmaWxlOi8vJ+ydhCDsgqzsmqntlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwMgorbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgIuybkOuzuCDsoIDsnqXshozqsIAg7JaV7J2AIOyggOyepeyGjOydtOuvgOuhnCwgLS1sb2NhbCDsmLXshZjsnYQg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwNworbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAiLS1sb2NhbCDsmLXshZjsnYAg66y07Iuc65Cp64uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2OSBidWlsdGluL2Nsb25lLmM6MTE3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAi66as66qo7Yq47J2YICVzIOu4jOuenOy5mOqwgCDsl4XsiqTtirjrprwgJXPsl5Ag7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE4MAorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIuu5iCDsoIDsnqXshozrpbwg67O17KCc7ZWcIOqyg+yymOufvCDrs7TsnoXri4jri6QuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjEwCittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLshKTsoJUg67OA7IiY66W8IOywvuyVhCDrtIXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIuyCrOyaqe2VoCDrsLDsuZgiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICLstZzrjIAg64SI67mEIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAi7Jm87Kq9IOqwgOyepeyekOumrOyXkCDssYTsmrgg6rO167CxIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIuyYpOuluOyqvSDqsIDsnqXsnpDrpqzsl5Ag7LGE7Jq4IOqzteuwsSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICLsl7Qg7IKs7J207JeQIOyxhOyauCDqs7XrsLEiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZOuKlCDssqsg67KI7Ke4IOyduOyekOyXrOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzcKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGNvbW1pdCBbPOyYteyFmD5dIFstLV0gPOqyveuhnOuqheyEuD4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPOyYteyFmD5dIFstLV0gPOqyveuhnOuqheyEuD4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDcKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyLstZzstIjsnZgg7Luk67CL7J2EIOuwlOq+uOugpOqzoCDtlZjsp4Drp4wsIOq3uOugh+qyjCDtlZjrqbQg7Luk67CL7J20IOu5hOyWtCDsnojqsowg65Cp64uI64ukLlxuIgorIi0tYWxsb3ctZW1wdHkg7Ji17IWY6rO8IOqwmeydtCDsnbQg66qF66C57J2EIOuwmOuzte2VoCDsiJjrj4Qg7J6I6rOgLCBcImdpdCByZXNldCBIRUFEXCJcbiIKKyLrqoXroLnsnLzroZwg7Luk67CL7J2EIOyZhOyghO2eiCDsoJzqsbDtlaAg7IiY64+EIOyeiOyKteuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisi7J207KCEIOy7pOuntyDrubzsmKTquLDqsIAg67mE7Ja0IOyeiOyKteuLiOuLpC4g7JWE66eI64+EIOy2qeuPjCDtlbTqsrAg6rO87KCV7JeQ7IScIOq3uOugh+qyjCDrkJDsnYRcbiIKKyLqsoPsnoXri4jri6QuIOq3uOuemOuPhCDsu6TrsIvtlZjroKTrqbQg64uk7J2M6rO8IOqwmeydtCDtlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU5Cittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgcmVzZXQnXG4iCittc2dzdHIgIuyVhOuLiOuptCAnZ2l0IHJlc2V0J+ydhCDsgqzsmqntlZjsi63si5zsmKRcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MgorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorbXNnc3RyICIiCisi7J20IOy7pOuwi+ydhCDqsbTrhIjrm7DroKTrqbQsIOuLpOydjOydhCDsgqzsmqntlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIuq3uCDri6TsnYzsl5AgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwi66W8IO2VmOuptCDrgpjrqLjsp4Ag7Luk67CL7JeQXG4iCisi64yA7ZW0IOy7pOuwiyDrubzsmKTquLDrpbwg64uk7IucIOyLnOyeke2VqeuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoyOTMKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIkhFQUQg7Yq466asIOyYpOu4jOygne2KuOydmCDrrLbsnYzsnYQg7ZG464qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzozMzQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi7J6E7IucIOyduOuNseyKpOulvCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzozNDAKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICLrjIDtmZTtmJUg7LaU6rCA6rCAIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTMKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi7J6E7IucIOyduOuNseyKpOulvCDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTUKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAi7KO87JqUIOy6kOyLnCDtirjrpqzrpbwg7JeF642w7J207Yq47ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzozODAgYnVpbHRpbi9jb21taXQuYzo0MDMgYnVpbHRpbi9jb21taXQuYzo0NDkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgIm5ld19pbmRleCDtjIzsnbzsl5Ag7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDMyCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICLrs5HtlantlZjripQg7KSRIOu2gOu2hCDsu6TrsIvsnYQg7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQzNAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAi7Luk67CLIOu5vOyYpOq4sOulvCDtlZjripQg7KSRIOu2gOu2hCDsu6TrsIvsnYQg7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ0MgorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2MQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAi7J6E7IucIOyduOuNseyKpCDtjIzsnbzsnYQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgIiclcycg7Luk67CL7JeQIOyekeyEseyekCDtl6TrjZTqsIAg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICInJXMnIOy7pOuwi+ydmCDsnpHshLHsnpAg7Zek642UIO2YleyLneydtCDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTc5Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAiLS1hdXRob3Ig7YyM652866+47YSwIO2YleyLneydtCDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjMxCittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyLtmITsnqwg7Luk67CLIOuplOyLnOyngOyXkOyEnCDsgqzsmqnrkJjsp4Ag7JWK64qUIOyjvOyEnSDrrLjsnpDrpbxcbiIKKyLshKDtg53tlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NjggYnVpbHRpbi9jb21taXQuYzo3MDEgYnVpbHRpbi9jb21taXQuYzoxMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICIlcyDsu6TrsIvsnYQg7LC+7JWE67O8IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgwIGJ1aWx0aW4vc2hvcnRsb2cuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiKO2RnOykgCDsnoXroKXsl5DshJwg66Gc6re4IOuplOyLnOyngOulvCDsnb3snYwpXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjgyCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg66Gc6re4IOuplOyLnOyngOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDroZzqt7gg7YyM7J287J2EIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxNSBidWlsdGluL2NvbW1pdC5jOjcyMworbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIlNRVUFTSF9NU0frpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzIwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJNRVJHRV9NU0frpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzc0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAi7Luk67CLIOyEnOyLneydhCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisi67OR7ZWp7J2EIOy7pOuwi+2VmOugpOuKlCDqsoPsnLzroZwg67O07J6F64uI64ukLlxuIgorIuq3uOugh+yngCDslYrri6TrqbQsIOuLpOydjCDtjIzsnbzsnYQg7KeA7Jqw6rOgLFxuIgorIlx0JXNcbiIKKyLri6Tsi5wg7Iuc64+E7ZWY7Iut7Iuc7JikLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLsu6TrsIsg67m87Jik6riw66W8IOy7pOuwi+2VmOugpOuKlCDqsoPsnLzroZwg67O07J6F64uI64ukLlxuIgorIuq3uOugh+yngCDslYrri6TrqbQsIOuLpOydjCDtjIzsnbzsnYQg7KeA7Jqw6rOgLFxuIgorIlx0JXNcbiIKKyLri6Tsi5wg7Iuc64+E7ZWY7Iut7Iuc7JikLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisi67OA6rK9IOyCrO2VreyXkCDrjIDtlZwg7Luk67CLIOuplOyLnOyngOulvCDsnoXroKXtlZjsi63si5zsmKQuICclYycg66y47J6Q66GcIOyLnOyeke2VmOuKlFxuIgorIuykhOydgCDrrLTsi5zrkJjqs6AsIOuplOyLnOyngOulvCDsnoXroKXtlZjsp4Ag7JWK7Jy866m0IOy7pOuwi+ydtCDspJHsp4DrkKnri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisi67OA6rK9IOyCrO2VreyXkCDrjIDtlZwg7Luk67CLIOuplOyLnOyngOulvCDsnoXroKXtlZjsi63si5zsmKQuICclYycg66y47J6Q66GcIOyLnOyeke2VmOuKlFxuIgorIuykhOydgCDrs7TsobTrkJjri4gsIO2VhOyalO2VmOuptCDsp4HsoJEg7KCc6rGw7ZWY7Iut7Iuc7JikLiDrqZTsi5zsp4Drpbwg7J6F66Cl7ZWY7KeAXG4iCisi7JWK7Jy866m0IOy7pOuwi+ydtCDspJHsp4DrkKnri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPsnpHshLHsnpA6ICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVz7Iuc6rCBOiAgICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVz7Luk66+47YSwOiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NjcKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkzMworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICLtirjrpqzrpbwg66eM65Oc64qU642wIOyYpOulmCIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NDcgYnVpbHRpbi90YWcuYzoyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICLrqZTsi5zsp4DrpbwgLW0g65iQ64qUIC1GIOyYteyFmOycvOuhnCDsnoXroKXtlZjsi63si5zsmKQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yICclcycg7Ji17IWY7J20ICfsnbTrpoQgPOyghOyekOuplOydvD4nIO2YleyLneydtCDslYTri4jqs6Ag6riw7KG0IOyekeyEseyekOyXkOuPhCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAwNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICLrrLTsi5ztlZwg66qo65Oc6rCAICgnJXMnKSDsnpjrqrvrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxOSBidWlsdGluL2NvbW1pdC5jOjEyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICLstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvCDrqqjrk5zqsIAgKCclcycpIOyemOuqu+uQmOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU3Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWxvbmcg67CPIC16IOyYteyFmOydgCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwOTAKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXJlc2V0LWF1dGhvciDrsI8gLS1hdXRob3Ig7Ji17IWY7J2EIOuqqOuRkCDsgqzsmqntlZjrqbQg7JWe65Kk6rCAIOunnuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA5OQorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICLrsJTqv4Ag7IKs7ZWt7J20IOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEwMgorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIuuzke2VqSDspJHsl5Ag7J6I7Iq164uI64ukIC0tIOy7pOuwi+ydhCDrsJTqv4Ag7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEwNAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIuy7pOuwiyDrubzsmKTquLAg7KSR7JeQIOyeiOyKteuLiOuLpCAtLSDsu6TrsIvsnYQg67CU6r+AIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMDcKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICItLXNxdWFzaCDrsI8gLS1maXh1cCDsmLXshZjsnYAg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMTcKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiLWMvLUMvLUYvLS1maXh1cCDsmLXshZgg7KSR7JeQIO2VmOuCmOunjCDsgqzsmqntlaAg7IiYIOyeiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTExOQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iCittc2dzdHIgIi1tIOyYteyFmOydgCAtYy8tQy8tRiDsmLXshZjqs7wg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTI3Cittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3Ig7Ji17IWY7J2AIC1DLCAtYyDrmJDripQgLS1hbWVuZCDsmLXshZjqs7wg6rCZ7J20IOyNqOyVvCDtlanri4jri6QuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDQKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyItLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCDsmLXshZgg7KSRIO2VmOuCmOunjCDsgqzsmqntlaAg7IiYIOyeiOyKteuLiCIKKyLri6QuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDYKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIuqyveuhnOqwgCDsl4bsnbQgLS1pbmNsdWRlLy0tb25seSDsmLXshZjsnYQg7JOw66m0IOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTYwIGJ1aWx0aW4vdGFnLmM6NTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7KCV66asIOuqqOuTnCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY1Cittc2dpZCAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiLWEg7Ji17IWY6rO8IOqyveuhnOulvCDqsJnsnbQg7IKs7Jqp7ZWY66m0IOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzAzIGJ1aWx0aW4vY29tbWl0LmM6MTQ4MAorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAi7IOB7YOc66W8IOqwhOuete2VmOqyjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMwNSBidWlsdGluL2NvbW1pdC5jOjE0ODIKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi67iM656c7LmYIOygleuztOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMwNworbXNnaWQgInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iCittc2dzdHIgIuyKpO2DnOyLnCDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMDkgYnVpbHRpbi9jb21taXQuYzoxNDg0Cittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgIuyVni/rkqQg6rCSIOyghOyytOulvCDqs4TsgrDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMxMQorbXNnaWQgInZlcnNpb24iCittc2dzdHIgIuuyhOyghCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzExIGJ1aWx0aW4vY29tbWl0LmM6MTQ4NiBidWlsdGluL3B1c2guYzo1NTgKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1ODEKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAi7Lu07ZOo7YSw6rCAIOydveydhCDsiJgg7J6I64qUIO2YleyLnSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ4OAorbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAi6ri0IO2YleyLneycvOuhnCDsg4Htg5zrpbwg7ZGc7Iuc7ZWp64uI64ukICjquLDrs7jqsJIpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMTcgYnVpbHRpbi9jb21taXQuYzoxNDkxCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgIk5VTCDrrLjsnpDroZwg7ZWt66qp7J2EIOuBneuDheuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzE5IGJ1aWx0aW4vY29tbWl0LmM6MTMyMyBidWlsdGluL2NvbW1pdC5jOjE0OTQKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDAxIGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDA0IGJ1aWx0aW4vdGFnLmM6Mzk3Cittc2dpZCAibW9kZSIKK21zZ3N0ciAi66qo65OcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjAgYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisi7LaU7KCB65CY7KeAIOyViuuKlCDtjIzsnbzsnYQg7ZGc7Iuc7ZWp64uI64ukLiDstpTqsIAg7Ji17IWYOiBhbGwsIG5vcm1hbCwgbm8gKOq4sOuzuOqwkjogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI0Cittc2dpZCAiIgorInNob3cgaWdub3JlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uIChEZWZhdWx0OiAiCisidHJhZGl0aW9uYWwpIgorbXNnc3RyICIiCisi66y07Iuc65CcIO2MjOydvOydhCDtkZzsi5ztlanri4jri6QuIOy2lOqwgCDsmLXshZg6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uICjquLDrs7jqsJI6ICIKKyJ0cmFkaXRpb25hbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNiBwYXJzZS1vcHRpb25zLmg6MTY3Cittc2dpZCAid2hlbiIKK21zZ3N0ciAi7Ja47KCcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjcKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyLtlZjsnIQg66qo65OI7J2YIOuzgOqyveydhCDrrLTsi5ztlanri4jri6QuIOy2lOqwgCDsmLXshZg6IGFsbCwgZGlydHksIHVudHJhY2tlZC4gKOq4sOuzuOqwkjogIgorImFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyOQorbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgIuy2lOyggeuQmOyngCDslYrripQg7YyM7J287J2YIOuqqeuhneydhCDsl6zrn6wg7Je066GcIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzMwCittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICLsnbTrpoQg67CU6r646riw66W8IOqygOyCrO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzMgorbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICLsnbTrpoQg67CU6r646riwIOqygOyCrO2VmOqzoCwg67aA6rCA7KCB7Jy866GcIOycoOyCrOyEsSDsnbjrjbHsiqTrpbwg7ISk7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTIKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICLrrLTsi5ztlZwg66qo65Oc7JmAIOy2lOyggeuQmOyngCDslYrripQg7YyM7J287J2YIOyduOyImOqwgCDsp4Dsm5DrkJjsp4Ag7JWK64qUIOyhsO2VqeyeheuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDUwCittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAi7ISx6rO17KCB7J24IOy7pOuwiyDtm4Tsl5Ag7JqU7JW97J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1MQorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAi7Luk67CLIOuplOyLnOyngCDshJzsi53sl5AgZGlmZuulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1MworbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIuy7pOuwiyDrqZTsi5zsp4Ag7Ji17IWYIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTQgYnVpbHRpbi90YWcuYzozOTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICLtjIzsnbzsl5DshJwg66mU7Iuc7KeA66W8IOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDU1Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICLsnpHshLHsnpAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1NQorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICLsu6TrsIvsnZgg7J6R7ISx7J6Q66W8IOyngOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDU2IGJ1aWx0aW4vZ2MuYzo1MDEKK21zZ2lkICJkYXRlIgorbXNnc3RyICLsi5zqsIEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1NgorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAi7Luk67CL7J2YIOyLnOqwgeydhCDsp4DsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1NyBidWlsdGluL21lcmdlLmM6MjI4IGJ1aWx0aW4vbm90ZXMuYzo0MDIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NjUgYnVpbHRpbi90YWcuYzozOTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLrqZTsi5zsp4AiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1NworbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeAIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTggYnVpbHRpbi9jb21taXQuYzoxNDU5IGJ1aWx0aW4vY29tbWl0LmM6MTQ2MAorIzogYnVpbHRpbi9jb21taXQuYzoxNDYxIHBhcnNlLW9wdGlvbnMuaDoyNzAgcmVmLWZpbHRlci5oOjkyCittc2dpZCAiY29tbWl0IgorbXNnc3RyICLsu6TrsIsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ1OAorbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLsp4DsoJXtlZwg7Luk67CL7J2YIOuplOyLnOyngOulvCDsnqzsgqzsmqntlZjqs6Ag7Y647KeR7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NTkKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi7KeA7KCV7ZWcIOy7pOuwi+yXkOyEnCDrqZTsi5zsp4Drpbwg7J6s7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NjAKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLsp4DsoJXtlZwg7Luk67CL7J2EIOyImOygle2VmOuKlOuNsCBhdXRvc3F1YXNoIO2YleyLnSDrqZTsi5zsp4Drpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NjEKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi7KeA7KCV7ZWcIOy7pOuwi+ydhCDtlansuZjripTrjbAgYXV0b3NxdWFzaCDtmJXsi50g66mU7Iuc7KeA66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDYyCittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAi7Luk67CL7J2EIOuCtOqwgCDsnpHshLHtlZwg6rKD7Jy866GcIOunjOuTreuLiOuLpCAoLUMvLWMvLS1hbWVuZOyZgCDqsJnsnbQg7IKs7JqpKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDYzIGJ1aWx0aW4vbG9nLmM6MTQ0NiBidWlsdGluL21lcmdlLmM6MjQyCisjOiBidWlsdGluL3B1bGwuYzoxNTQgYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgIlNpZ25lZC1vZmYtYnk6IOykhOydhCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2NAorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAi7KeA7KCV7ZWcIOyEnOyLnSDtjIzsnbzsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NjUKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAi7Luk67CLIO2OuOynkeydhCDqsJXsoJztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2NgorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIuq4sOuzuOqwkiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDY2IGJ1aWx0aW4vdGFnLmM6Mzk4Cittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAi66mU7Iuc7KeA7JeQ7IScIOqzteuwseqzvCAj7KO87ISd7J2EIOyngOybgeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDY3Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIuy7pOuwiyDrqZTsi5zsp4Ag7ISc7Iud7JeQIOyDge2DnOulvCDtj6ztlajtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ2OSBidWlsdGluL21lcmdlLmM6MjQwIGJ1aWx0aW4vcHVsbC5jOjE4NAorIzogYnVpbHRpbi9yZXZlcnQuYzoxMTMKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkdQRyDshJzrqoUg7Luk67CLIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzIKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAi7Luk67CLIOuCtOyaqSDsmLXshZgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3MworbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAi67OA6rK965CcIO2MjOydvOydhCDrqqjrkZAg7Luk67CL7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzQKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgIuyngOygle2VnCDtjIzsnbzsnYQg7Luk67CL7ZWgIOyduOuNseyKpOyXkCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3NQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICLrjIDtmZTtmJXsnLzroZwg7YyM7J287J2EIOy2lOqwgO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc2Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAi64yA7ZmU7ZiV7Jy866GcIOuzgOqyvSDsgqztla3snYQg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzcKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgIuyngOygle2VnCDtjIzsnbzrp4wg7Luk67CL7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzgKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAi7Luk67CLIOyghCDtm4TtgazsmYAg7Luk67CLIOuplOyLnOyngCDtm4Ttgazrpbwg6rG064SI65yB64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzkKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICLrrLTsl4fsnYQg7Luk67CL7ZWg7KeAIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkyCittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLrsJTroZwg7JWeIOy7pOuwi+ydhCDrsJTqv4nri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MworbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAi64uk7Iuc7JOw6riwIO2bhCDtm4Ttgazrpbwg6rG064SI65yB64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTgKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICLruYgg67OA6rK9IOyCrO2VreydhCDquLDroZ3tlZjrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICLruYgg66mU7Iuc7KeA7JmAIOqwmeydtCDrs4Dqsr0g7IKs7ZWt7J2EIOq4sOuhne2VmOuPhOuhnSDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICLshpDsg4HrkJwgTUVSR0VfSEVBRCDtjIzsnbwgKCVzKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTgwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAiTUVSR0VfTU9EReulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAi7Luk67CLIOuplOyLnOyngOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICLsu6TrsIvsnYQg7KSR7KeA7ZWp64uI64ukLiDsu6TrsIsg66mU7Iuc7KeA6rCAIOu5hOyWtCDsnojsirXri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIuy7pOuwi+ydhCDspJHsp4Dtlanri4jri6QuIOuplOyLnOyngOulvCDtjrjsp5HtlZjsp4Ag7JWK7JWY7Iq164uI64ukLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTAKK21zZ2lkICIiCisiUmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc2V0IEhFQURcIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIuyggOyepeyGjOulvCDsl4XrjbDsnbTtirjtlojsirXri4jri6QuIO2VmOyngOunjCBuZXdfaW5kZXgg7YyM7J287J2EIOyTuCDsiJhcbiIKKyLsl4bsirXri4jri6QuIOuUlOyKpO2BrOqwgCDqvYkg7LCo7KeAIOyViuyVmOqzoCDsoJztlZwg7Jqp65+J7J2EIOuEmOyWtOqwgOyngFxuIgorIuyViuyVmOuKlOyngCDtmZXsnbjtlZjsi63si5zsmKQuIOq3uOumrOqzoCAnZ2l0IHJlc2V0IEhFQUQn66GcIOuzteq1rO2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6OQorbXNnaWQgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCittc2dzdHIgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA87Jik67iM7KCd7Yq465SU66CJ7YSw66asPl0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNgorbXNnaWQgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKK21zZ3N0ciAiZ2l0IGNvbW1pdC1ncmFwaCByZWFkIFstLW9iamVjdC1kaXIgPOyYpOu4jOygne2KuOuUlOugie2EsOumrD5dIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjEKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmRdIFstLXN0ZGluLXBhY2tzfC0tIgorInN0ZGluLWNvbW1pdHNdIgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDzsmKTruIzsoJ3tirjrlJTroInthLDrpqw+XSBbLS1hcHBlbmRdIFstLXN0ZGluLSIKKyJwYWNrc3wtLXN0ZGluLWNvbW1pdHNdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjM5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6OTIKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQ3IGJ1aWx0aW4vZmV0Y2guYzoxNjEgYnVpbHRpbi9sb2cuYzoxNDY2Cittc2dpZCAiZGlyIgorbXNnc3RyICLrlJTroInthLDrpqwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDAgYnVpbHRpbi9jb21taXQtZ3JhcGguYzo5MworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNDgKK21zZ2lkICJUaGUgb2JqZWN0IGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZ3JhcGgiCittc2dzdHIgIuq3uOuemO2UhOulvCDsoIDsnqXtlaAg7Jik67iM7KCd7Yq4IOuUlOugie2EsOumrCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo5NQorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAi7Luk67CL7J2EIOywvuydhCDrlYwg7ZGc7KSA7J6F66Cl7JeQ7IScIOyXtOqxsO2VnCDrrLbsnYwg7J24642x7Iqk66W8IOqygOyCrO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo5NworbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5Ag7Je06rGw7ZWcIOy7pOuwi+yXkOyEnOu2gO2EsCDqt7jrpqzquLDrpbwg7Iuc7J6R7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjk5Cittc2dpZCAiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiY29tbWl0LWdyYXBoIO2MjOydvOyXkCDsnbTrr7gg7J6I64qUIOuqqOuToCDsu6TrsIvsnYQg7Y+s7ZWo7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwOAorbXNnaWQgImNhbm5vdCB1c2UgYm90aCAtLXN0ZGluLWNvbW1pdHMgYW5kIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIi0tc3RkaW4tY29tbWl0cyDrsI8gLS1zdGRpbi1wYWNrcyDsmLXshZjsnYAg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwCittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQgLS10eXBlIOyduOyekDogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTIzCittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIuyEpOyglSDtjIzsnbwg7JyE7LmYIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNAorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgIuqzte2GtSDshKTsoJUg7YyM7J287J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjUKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICLsi5zsiqTthZwg7ISk7KCVIO2MjOydvOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgIuyggOyepeyGjCDshKTsoJUg7YyM7J287J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgIuyngOygle2VnCDshKTsoJUg7YyM7J287J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjgKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICLruJTroa0taWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAi7KeA7KCV7ZWcIOu4lOuhrSDsmKTruIzsoJ3tirjsl5DshJwg7ISk7KCV7J2EIOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIuuPmeyekSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi6rCS7J2EIOqwgOyguOyYteuLiOuLpDogPOydtOumhD4gWzzqsJIt7KCV6rec7IudPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLrqqjrk6Ag6rCS7J2EIOqwgOyguOyYteuLiOuLpDogPO2CpD4gWzzqsJIt7KCV6rec7IudPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuygleq3nOyLneyXkCDrjIDtlZwg6rCS7J2EIOqwgOyguOyYteuLiOuLpDogPOydtOumhC3soJXqt5zsi50+IFs86rCSLeygleq3nOyLnT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMworbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgIjxVUkw+7JeQIO2KueygleuQmOuKlCDqsJLsnYQg6rCA7KC47Ji164uI64ukOiA87IS57IWYPlsuPOuzgOyImD5dIDxVUkw+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICLtlbTri7ntlZjripQg67OA7IiY66W8IOuqqOuRkCDsoJzqsbDtlanri4jri6Q6IDzsnbTrpoQ+IDzqsJI+IFs86rCSLeygleq3nOyLnT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAi7IOIIOuzgOyImOulvCDstpTqsIDtlanri4jri6Q6IDzsnbTrpoQ+IDzqsJI+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuuzgOyImOulvCDsoJzqsbDtlanri4jri6Q6IDzsnbTrpoQ+IFs86rCSLeygleq3nOyLnT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLtlbTri7ntlZjripQg7ZWt66qp7J2EIOuqqOuRkCDsoJzqsbDtlanri4jri6Q6IDzsnbTrpoQ+IFs86rCSLeygleq3nOyLnT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOAorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAi7IS57IWY7J2YIOydtOumhOydhCDrsJTqv4nri4jri6Q6IDzsmJst7J2066aEPiA87IOILeydtOumhD4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAi7IS57IWY7J2EIOygnOqxsO2VqeuLiOuLpDogPOydtOumhD4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgIuyghOyytCDrqqnroZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICLtjrjsp5HquLDrpbwg7Je964uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICLshKTsoJXtlZwg7IOJ7J2EIOywvuyKteuLiOuLpDogc2xvdCBbPOq4sOuzuOqwkj5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICLsg4kg7ISk7KCV7J2EIOywvuyKteuLiOuLpDogc2xvdCBbPO2RnOykgOy2nOugpeydtC1UVFnsnbjsp4At7Jes67aAPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAi6rCSIOyiheulmCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgIuqwkuydtCDtlbTri7kg7KKF66WY66GcIOyjvOyWtOynkeuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDYKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgIuqwkuydtCBcInRydWVcIiDrmJDripQgXCJmYWxzZVwi7J6F64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NworbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICLqsJLsnbQg7Iut7KeE7IiY7J6F64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAi6rCS7J20IC0tYm9vbCDrmJDripQgLS1pbnTsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIKK21zZ3N0ciAi6rCS7J20IOqyveuhnCjtjIzsnbwg65iQ64qUIOuUlOugie2EsOumrCDsnbTrpoQp7J6F64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICLqsJLsnbQg66eM66OMIOyLnOqwgeyeheuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAi6riw7YOAIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi6rCS7J2EIE5VTCDrsJTsnbTtirjroZwg64Gd64OF64uI64ukIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAi67OA7IiYIOydtOumhOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU0Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICLssL7slYTrs7wg65WMIGluY2x1ZGUg7KeA7Iuc7Ja066W8IOqzoOugpO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTUKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICLshKTsoJXsnZgg7Lac7LKY66W8IO2RnOyLnO2VqeuLiOuLpCAo7YyM7J28LCDtkZzspIAg7J6F66ClLCDruJTroa0sIOuqheugue2WiSkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAidmFsdWUiCittc2dzdHIgIuqwkiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTYKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgIi0td2dldCDsmLXshZjsl5DshJwsIO2VtOuLuSDtla3rqqnsnbQg7JeG7Jy866m0IOq4sOuzuOqwkuydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICLquLDrs7gg7ISk7KCVIOqwkuydhCDtj6zrp6TtjIXtlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0MzEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAi6riw67O4IOyDiSDqsJLsnYQg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIOq5g+ydmCDsgqzsmqnsnpDrs4Qg7ISk7KCVIO2MjOydvOyeheuLiOuLpC5cbiIKKyJbdXNlcl1cbiIKKyIjIOuLpOydjCDspITsnYQg7JWM66ee6rKMIOqzoOy5mOqzoCDslZ7snZgg7KO87ISd7J2EIOygnOqxsO2VmOyLreyLnOyYpDpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAzCittc2dpZCAiLS1sb2NhbCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWxvY2FsIOyYteyFmOydgCDquYMg7KCA7J6l7IaMIOyViOyXkOyEnOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MDYKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1ibG9iIOyYteyFmOydgCDquYMg7KCA7J6l7IaMIOyViOyXkOyEnOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgIiVzIOyEpOyglSDtjIzsnbzsnYQg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisi7Jes65+sIOqwnOydmCDqsJLsnYQg7ZWY64KY7J2YIOqwkuycvOuhnCDrja7slrTsk7gg7IiYIOyXhuyKteuLiOuLpC5cbiIKKyIlc+ydhCjrpbwpIOuzgOqyve2VmOugpOuptCDsoJXqt5zsi53snYQg7JOw6rGw64KYLCAtLWFkZCDrmJDripQgLS1yZXBsYWNlLWFsbCDsmLXshZjsnYRcbiIKKyLsgqzsmqntlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAi7IKs656M7J20IOydveq4sCDsoovsnYAg7ZiV7Iud7Jy866GcIO2BrOq4sOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs87Ji17IWYPl0gWzzsu6TrsIst65Sw7JyEPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzzsmLXshZg+XSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTcKK21zZ2lkICJoZWFkIgorbXNnc3RyICJoZWFkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTcKK21zZ2lkICJsaWdodHdlaWdodCIKK21zZ3N0ciAibGlnaHR3ZWlnaHQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NworbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAiYW5ub3RhdGVkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAi7KO87ISdIOuLrOumsCAlcyDtg5zqt7jrpbwg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAi7KO87ISdIOuLrOumsCAlcyDtg5zqt7jsl5Ag64K07J6l65CcIOydtOumhOydtCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiJyVzJyDtg5zqt7jqsIAg7Iuk7KCcIOyXrOq4sCAnJXMn7J6F64uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAi7Ja065akIO2DnOq3uOuPhCAnJXMn7JmAKOqzvCkg7KCV7ZmV7Z6IIOydvOy5mO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAi7Ja065akIOugiO2NvOufsOyKpOuCmCDtg5zqt7jrj4Qg7KCV7ZmV7Z6IIOydvOy5mO2VmOyngCDslYrqs6AsIOyEpOuqheydhCDqsoDsg4ntlanri4jri6RcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiJXPsl5DshJwg6rKA7IOJIOuniOy5qFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisi7Ja065akIOyjvOyEnSDri6zrprAg7YOc6re464+EICclcyfsnYQo66W8KSDshKTrqoXtlZjsp4Ag7JWK7Iq164uI64ukLlxuIgorIu2VmOyngOunjCDso7zshJ0g64us66as7KeAIOyViuydgCDtg5zqt7jqsIAg7J6I7Iq164uI64ukOiAtLXRhZ3Mg7Ji17IWY7J2EIO2VtCDrs7Tsi63si5zsmKQuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyLslrTrlqQg7YOc6re464+EICclcyfsnYQo66W8KSDshKTrqoXtlaAg7IiYIOyXhuyKteuLiOuLpC5cbiIKKyItLWFsd2F5cyDsmLXshZjsnYQg7I2oIOuztOqxsOuCmCwg7YOc6re466W8IOunjOuTpOyWtCDrs7Tsi63si5zsmKQuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLsu6TrsIsgJWx16rCc66W8IOqwgOuhnOyniOuggOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorIu2DnOq3uOulvCAlaeqwnCDrhJjqsowg7LC+7JWY7Iq164uI64ukLiDqsIDsnqUg7LWc6re87J2YICVp6rCcIOuqqeuhneydhFxuIgorIu2RnOyLnO2VqeuLiOuLpC4gJXMg7JyE7LmY7JeQ7IScIOqygOyDieydhCDspJHsp4Dtlanri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiJXMg7ISk66qF7ZWp64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MDAgYnVpbHRpbi9sb2cuYzo1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIuyYrOuwlOuluCDsmKTruIzsoJ3tirgg7J2066aE7J20IOyVhOuLmeuLiOuLpCAoJXMpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzKOydgCnripQg7Luk67CL64+EIOu4lOuhreuPhCDslYTri5nri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjIKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICLsu6TrsIsg64uk7J2M7JeQIOyYpOuKlCDtg5zqt7jrpbwg7LC+7Iq164uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIzCittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAi7ZGc7KSAIOyYpOulmOyXkOyEnCDqsoDsg4kg7KCE65617J2EIOuUlOuyhOq5he2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyNAorbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICLrqqjrk6Ag66CI7Y2865+w7Iqk66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyNQorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICLrqqjrk6Ag7YOc6re466W8LCDso7zshJ0g64us66as7KeAIOyViuydgCDtg5zqt7jquYzsp4Ag7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI2Cittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAi7ZWt7IOBIOq4tCDtmJXsi53snYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTI3Cittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICLssqsg67KI7Ke4IOydtOyghCDsu6TrsIvrp4wg65Sw65286rCR64uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTMwCittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAi7KCV7ZmV7Z6IIOydvOy5mO2VmOuKlCDtla3rqqnrp4wg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTMyCittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiPG4+6rCc7J2YIOqwgOyepSDstZzqt7zsnZgg7YOc6re466eMIOqzoOugpO2VqeuLiOuLpCAo6riw67O46rCSOiAxMCkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzQKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICI87Yyo7YS0PuqzvCDsnbzsuZjtlZjripQg7YOc6re466eMIOqzoOugpO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNgorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiPO2MqO2EtD7qs7wg7J287LmY7ZWY64qUIO2DnOq3uOulvCDqs6DroKTtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM4IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDYKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIuuMgOyViOycvOuhnCDsmpTslb3tlZwg7Luk67CLIOyYpOu4jOygne2KuOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzkgYnVpbHRpbi9kZXNjcmliZS5jOjU0MgorbXNnaWQgIm1hcmsiCittc2dzdHIgIu2RnOyLnCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MAorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAi67OA6rK965CcIOyekeyXhSDtj7TrjZTsl5AgPO2RnOyLnD7rpbwg65Kk7JeQIOu2meyeheuLiOuLpCAo6riw67O46rCSOiBcIi1kaXJ0eVwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MworbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICLrp53qsIDsp4Qg7J6R7JeFIO2PtOuNlOyXkCA87ZGc7IucPuulvCDrkqTsl5Ag67aZ7J6F64uI64ukICjquLDrs7jqsJI6IFwiLWJyb2tlblwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU2MQorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcg7Ji17IWY7J2AIC0tYWJicmV2PTAg7Ji17IWY6rO8IO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1OTAKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAi7J2066aE7J20IOyXhuyKteuLiOuLpC4g7JWE66y06rKD64+EIOyEpOuqhe2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY0MAorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWRpcnR5IOyYteyFmOydgCDsu6TrsIvqsJnsnYAg7ZWt66qp6rO8IO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NDIKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tYnJva2VuIOyYteyFmOydgCDsu6TrsIvqsJnsnYAg7ZWt66qp6rO8IO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMnOiDsnbzrsJgg7YyM7J287J2064KYIOyLrOuzvOumrSDrp4HtgazqsIAg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7Ji17IWYOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU2Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuq5gyDsoIDsnqXshozqsIAg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL2RpZmYuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIuyemOuqu+uQnCAnJXMnIOyYpOu4jOygne2KuOqwgCDso7zslrTsoYzsirXri4jri6QuIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAi65GQIOqwnOuztOuLpCDrp47snYAg67iU66Gt7J20IOyjvOyWtOyhjOyKteuLiOuLpDogJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIuyymOumrO2VmOyngCDslYrsnYAgJyVzJyDsmKTruIzsoJ3tirjqsIAg7KO87Ja07KGM7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI5Cittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzzsmLXshZg+XSBbPOy7pOuwiz4gWzzsu6TrsIs+XV0gWy0tXSBbPOqyveuhnD4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgIuyLpO2MqDogJWQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAiJXMg7Ius67O866atIOunge2BrOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgIiVzIOyLrOuzvOumrSDrp4Htgawg7YyM7J287J2EIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAiJTIkcyDsi6zrs7zrpq0g66eB7YGs7JeQIOuMgO2VnCAlMSRzIOyYpOu4jOygne2KuOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMgorbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKyLsu7TrsJTsnbjrk5wgZGlmZiDtmJXsi53snYAgKCctYycg67CPICctLWNjJykg65SU66CJ7YSw66asIGRpZmYg66qo65Oc7JeQ7ISc64qUXG4iCisiKCctZCcg67CPICctLWRpci1kaWZmJykg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgIuuRkCDtjIzsnbzsnbQg7IiY7KCV65CY7JeI7Iq164uI64ukOiAnJXMnIOuwjyAnJXMnLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICLsnpHsl4Ug7Y+0642U6rCAIOuCqOqyqOyguCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAi7J6E7IucIO2MjOydvOydtCAnJXMn7JeQIOyeiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDYKK21zZ2lkICJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIKK21zZ3N0ciAi7J20IO2MjOydvOydhCDsp4DsmrDqsbDrgpgg67O16rWs7ZWgIOyImCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk1Cittc2dpZCAidXNlIGBkaWZmLmd1aXRvb2xgIGluc3RlYWQgb2YgYGRpZmYudG9vbGAiCittc2dzdHIgImBkaWZmLnRvb2xgIOuMgOyLoCBgZGlmZi5ndWl0b29sYOydhCDsgqzsmqntlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAi7KCE7LK0IOuUlOugie2EsOumrCBkaWZm66W8IOyImO2Wie2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5OQorbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAiZGlmZiDrj4Tqtazrpbwg7Iuk7ZaJ7ZWY6riwIOyghOyXkCDtlITroaztlITtirjrpbwg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNAorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICJkaXItZGlmZiDrqqjrk5zsl5DshJwg7Ius67O866atIOunge2BrOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDUKK21zZ2lkICI8dG9vbD4iCittc2dzdHIgIjzrj4Tqtaw+IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA2Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICLsp4DsoJXtlZwgZGlmZiDrj4Tqtazrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICJgLS10b29sYCDsmLXshZjsl5DshJwg7IKs7Jqp7ZWgIOyImCDsnojripQgZGlmZiDrj4Tqtawg66qp66Gd7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMQorbXNnaWQgIiIKKyJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uIC0gemVybyBleGl0ICIKKyJjb2RlIgorbXNnc3RyICIiCisi7Iuk7ZaJ7ZWcIGRpZmYg64+E6rWs6rCAIDDsnbQg7JWE64uMIOy9lOuTnOulvCDrpqzthLTtlZjrqbQgJ2dpdC1kaWZmdG9vbCfsnbQg64Gd64KY6rKMIO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMworbXNnaWQgIjxjb21tYW5kPiIKK21zZ3N0ciAiPOuqheuguT4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTQKK21zZ2lkICJzcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMiCittc2dzdHIgImRpZmbrpbwg67O064qUIOuqheugueyWtOulvCDsgqzsmqnsnpDqsIAg7KeA7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzM4Cittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICItLXRvb2w9POuPhOq1rD4g7Ji17IWY7JeQIDzrj4Tqtaw+6rCAIOyjvOyWtOyngOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDUKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgIi0tZXh0Y21kPTzrqoXroLk+IOyYteyFmOyXkCA866qF66C5PuydtCDso7zslrTsp4Dsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjcKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LeyYteyFmF0iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDAwCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IDxuPuqwnCDrkqTsl5Ag7KeE7ZaJIOyDge2ZqeydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDAyCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICLshJzrqoXtlZwg7YOc6re47J2YIOyymOumrCDrsKnsi53snYQg7ISg7YOd7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwNQorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgIu2VhO2EsOunge2VnCDsmKTruIzsoJ3tirjsl5Ag64yA7ZWcIO2DnOq3uOydmCDsspjrpqwg67Cp7Iud7J2EIOyEoO2Dne2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMDgKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi7J20IO2MjOydvOuhnCDtkZzsi5zrpbwg64K067O064OF64uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAxMAorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAi7J20IO2MjOydvOyXkOyEnCDtkZzsi5zrpbwg6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAxMgorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICLtg5zqt7jsl5Ag7YOc6re467aZ7J24IOyCrOuejOydtCDsl4bsnYQg65WMIOqwgOynnOuhnCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDE0Cittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIuy7pOuwiyDrp4jri6Qg7KCE7LK0IO2KuOumrOulvCDstpzroKXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDE2Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIuyKpO2KuOumvOydhCDrgZ3rgrTripTrjbAg7JmE66OMIOq4sOuKpeydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDE3Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICLruJTroa0g642w7J207YSw7J2YIOy2nOugpeydhCDqsbTrhIjrnIHri4jri6QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDE4Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAi66CI7Y2865+w7Iqk66qF7IS4IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAxOQorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAi66CI7Y2865+w7Iqk66qF7IS466W8IOuCtOuztOuCuCDroIjtjbzrn7DsiqTsl5Ag7KCB7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAyMAorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgIuy2nOugpeydhCDsnbXrqoXtmZTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNgorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs87Ji17IWYPl0gWzzsoIDsnqXshow+IFs866CI7Y2865+w7Iqk66qF7IS4Pi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjcKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs87Ji17IWYPl0gPOq3uOujuT4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyOAorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPOyYteyFmD5dIFsoPOyggOyepeyGjD4gfCA86re466O5PikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjkKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIzIGJ1aWx0aW4vcHVsbC5jOjE5MworbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIuuqqOuToCDrpqzrqqjtirjsl5DshJwg6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI1IGJ1aWx0aW4vcHVsbC5jOjE5NgorbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAi642u7Ja07JOw7KeAIOunkOqzoCAuZ2l0L0ZFVENIX0hFQUTsl5Ag642n67aZ7J6F64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI3IGJ1aWx0aW4vcHVsbC5jOjE5OQorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAi66as66qo7Yq4IOyqveyXkCDrrLbsnYzsnYQg7JeF66Gc65Oc7ZWgIOqyveuhnCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyOCBidWlsdGluL3B1bGwuYzoyMDEKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLroZzsu6wg67iM656c7LmY66W8IOqwleygnOuhnCDrja7slrTslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzAKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgIuyXrOufrCDrpqzrqqjtirjsl5DshJwg6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTMyIGJ1aWx0aW4vcHVsbC5jOjIwMworbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIuuqqOuToCDtg5zqt7jsmYAg6rSA66CoIOyYpOu4jOygne2KuOulvCDqsIDsoLjsmLXri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzQKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIuuqqOuToCDtg5zqt7jrpbwg6rCA7KC47Jik7KeAIOyViuyKteuLiOuLpCAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzNgorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIuuzkeugrOyggeycvOuhnCDrsJvslYTsmKTripQg7ZWY7JyE66qo65OIIOqwnOyImCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOCBidWlsdGluL3B1bGwuYzoyMDYKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAi66as66qo7Yq47JeQIOydtOygnCDsl4bripQg66as66qo7Yq4IOy2lOyggSDruIzrnpzsuZjrpbwg7J6Y652864OF64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQwCittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAi66as66qo7Yq4IOyggOyepeyGjOyXkCDsl4bripQg66Gc7LusIO2DnOq3uOulvCDsoJzqsbDtlZjqs6Ag67OA6rK965CcIO2DnO2BrOulvCDsoIHsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEgYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL3B1bGwuYzoxMzEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgIuyjvOusuO2YlSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MgorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIu2VmOychCDrqqjrk4gg7J6s6reA7KCB7Jy866GcIOqwgOyguOyYpOq4sCDrsKnsi53snYQg7ISk7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2IGJ1aWx0aW4vcHVsbC5jOjIxNAorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICLri6TsmrTroZzrk5ztlZwg66y27J2M7J2EIOuztOyhtO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICJIRUFEIOugiO2NvOufsOyKpCDsl4XrjbDsnbTtirjrpbwg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUxIGJ1aWx0aW4vZmV0Y2guYzoxNTcgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAi7JaV7J2AIOuzteygnOydmCDsu6TrsIsg64K07Jet7J2EIOq5iuqyjCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIKK21zZ3N0ciAi7JaV7J2AIOuzteygnOydmCDsu6TrsIsg64K07Jet7J2EIOyLnOqwhOydhCDquLDspIDsnLzroZwg6rmK6rKMIOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OSBidWlsdGluL3B1bGwuYzoyMjAKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi7JmE7KCE7ZWcIOyggOyepeyGjOuhnCDsoITtmZjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjIKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCDstpzroKXsnZgg7JWe7JeQIOydtCDrlJTroInthLDrpqzrpbwg67aZ7J6F64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY1Cittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICLtlZjsnIQg66qo65OI7J2EIOyerOq3gOyggeycvOuhnCDqsIDsoLjsmKwg65WMIOq4sOuzuOqwkiAo7ISk7KCVIO2MjOydvOuztOuLpCDrgq7snYAg7Jqw7ISgIOyInOychCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkgYnVpbHRpbi9wdWxsLmM6MjIzCittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICIuZ2l0L3NoYWxsb3frpbwg7JeF642w7J207Yq47ZWY64qUIOugiO2NvOufsOyKpOulvCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wdWxsLmM6MjI1Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICLroIjtjbzrn7DsiqTrp7UiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzEgYnVpbHRpbi9wdWxsLmM6MjI2Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgIuugiO2NvOufsOyKpOuntSDqsIDsoLjsmKTquLDrpbwg7KeA7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzcgYnVpbHRpbi9wdXNoLmM6NTgyCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAi7ISc67KELeyghOyaqS3smLXshZgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzIgYnVpbHRpbi9scy1yZW1vdGUuYzo3NyBidWlsdGluL3B1c2guYzo1ODIKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICLsoITshqHtlaAg7Ji17IWYIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDQyCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIuumrOuqqO2KuCDroIjtjbzrn7DsiqQgSEVBROulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICJmZXRjaC5vdXRwdXQg7ISk7KCV7JeQIOyemOuqu+uQnCDqsJLsnbQg7J6I7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICIlcyDsmKTruIzsoJ3tirjqsIAg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjU3Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJb7LWc7IugIOyDge2DnF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NzAgYnVpbHRpbi9mZXRjaC5jOjc1MAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIlvqsbDrtoDrkKhdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjcxCittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjsl5DshJwg6rCA7KC47JisIOyImCDsl4bsnYwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2ODAKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlvtg5zqt7gg7JeF642w7J207Yq4XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY4MSBidWlsdGluL2ZldGNoLmM6NzE0IGJ1aWx0aW4vZmV0Y2guYzo3MzAKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NDUKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAi66Gc7LusIOugiO2NvOufsOyKpOulvCDsl4XrjbDsnbTtirjtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwMAorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW+yDiOuhnOyatCDtg5zqt7hdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzAzCittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJb7IOI66Gc7Jq0IOu4jOuenOy5mF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MDYKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIlvsg4jroZzsmrQg66CI7Y2865+w7IqkXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc0NQorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgIuqwleygnCDsl4XrjbDsnbTtirgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTAKK21zZ2lkICJub24tZmFzdC1mb3J3YXJkIgorbXNnc3RyICLsoJXrsKntlqUg7KeE7ZaJ7J20IOyVhOuLmCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVz7J20KOqwgCkg66qo65OgIO2VhOyalO2VnCDsmKTruIzsoJ3tirjrpbwg67O064K07KeAIOyViuyVmOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIuyWleydgCDstZzsg4HsnITsnZgg7JeF642w7J207Yq46rCAIO2XiOyaqeuQmOyngCDslYrsnLzrr4DroZwgJXPsnYQo66W8KSDqsbDrtoDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MDMgYnVpbHRpbi9mZXRjaC5jOjk5OQorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiJS4qcyBVUkzsl5DshJxcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisi7JeF642w7J207Yq47ZWgIOyImCDsl4bripQg66Gc7LusIOugiO2NvOufsOyKpOqwgCDsnojsirXri4jri6QuIOqzvOqxsCDstqnrj4wg67iM656c7LmY66W8XG4iCisiIOygnOqxsO2VmOugpOuptCAnZ2l0IHJlbW90ZSBwcnVuZSAlcycg66qF66C57J2EIOyLpO2Wie2VtCDrs7Tsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIOugiO2NvOufsOyKpOqwgCDsl7DqsrDsnbQg64GK7Ja07KeA6rKMIOuQqeuLiOuLpCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMg66CI7Y2865+w7Iqk6rCAIOyXsOqysOydtCDrgYrslrTsoYzsirXri4jri6QpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAwMgorbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW+yCreygnOuQqF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDAzIGJ1aWx0aW4vcmVtb3RlLmM6MTAzMworbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKOyXhuydjCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6rCE65617ZWcIOyggOyepeyGjOqwgCDslYTri4wg7KCA7J6l7IaM7J2YIO2YhOyerCAlcyDruIzrnpzsuZjroZwg6rCA7KC47Jik6riw66W8IOqxsOygiO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiXCIlc1wiIOyYteyFmOydmCBcIiVzXCIg6rCS7J2AICVz7JeQIOuMgO2VtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIlwiJXNcIiDsmLXshZjsnYAgJyVzJ+yXkCDrjIDtlbQg66y07Iuc65Cp64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIiVz7J2EKOulvCkg6rCA7KC47Jik64qUIOykkVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI4OSBidWlsdGluL3JlbW90ZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDqsIDsoLjsmKwg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMzUgYnVpbHRpbi9mZXRjaC5jOjE1MDMKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBjb3JlLnBhcnRpYWxDbG9uZSIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIOyYteyFmOydgCBjb3JlLnBhcnRpYWxDbG9uZeyXkCDshKTsoJXrkJwg66as66qo7Yq4IOyggOyepeyGjOyXkOunjCDsgqzsmqntlaAg7IiYIOyeiOyKteuLiCIKKyLri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzU4Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLrpqzrqqjtirgg7KCA7J6l7IaM66W8IOyngOygle2VmOyngCDslYrslZjsirXri4jri6QuIOyDiCDrpqzruYTsoITsnYQg6rCA7KC47JisIOyImCDsnojripRcbiIKKyJVUkzsnbTrgpgg66as66qo7Yq4IOydtOumhOydhCDsp4DsoJXtlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5NQorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIu2DnOq3uCDsnbTrpoTsnYQg7KeA7KCV7ZW07JW8IO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDQ0Cittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiLS1kZWVwZW4g7Ji17IWY7JeQIOydjOyImCDquYrsnbTripQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NDYKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiwgLS1kZXB0aCDsmLXshZgg7KSRIO2VmOuCmOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NTEKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1kZXB0aCDrsI8gLS11bnNoYWxsb3cg7Ji17IWY7J2AIOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NTMKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorIuyZhOyghO2VnCDsoIDsnqXshozsl5Ag64yA7ZW0IC0tdW5zaGFsbG93IOyYteyFmOydhCDsgqzsmqntlZjripQg6rG0IOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2OQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCDrqoXroLnsl5Ag7KCA7J6l7IaMIOyduOyekOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDcxCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCDrqoXroLnsnYAg66CI7Y2865+w7Iqk66qF7IS4IOyduOyekOyZgCDqsJnsnbQg7JOw66m0IOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICLqt7jrn7Ag66as66qo7Yq464KYIOumrOuqqO2KuCDqt7jro7nsnbQg7JeG7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0ODcKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuq3uOujueydhCDqsIDsoLjsmKTqs6Ag66CI7Y2865+w7Iqk66qF7IS466W8IOyngOygle2VmOuptCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTUKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA866mU7Iuc7KeAPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPO2MjOydvD5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjYKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgInNob3J0bG9n7JeQ7IScIOy1nOuMgCA8bj7qsJwg66Gc6re466W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjY5Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiLS1sb2fsmYAg64+Z7J28ICjsl4bslrTsp4gg7JiI7KCVKSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcyCittc2dpZCAidGV4dCIKK21zZ3N0ciAi7YWN7Iqk7Yq4IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgIjzthY3siqTtirg+66W8IOyLnOyekSDrqZTsi5zsp4DroZwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAi7J297Ja065Ok7J28IO2MjOydvCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzzsmLXshZg+XSBbPO2MqO2EtD5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA87Jik67iM7KCd7Yq4Pl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPOy7pOuwiz5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzzsu6TrsIs+XV0gWy0tbm8tY29udGFpbnMgWzzsu6TrsIs+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAi7IW47JeQIOygge2Vqe2VmOqyjCDtlIzroIjsnbTsiqTtmYDrjZTrpbwg7J247Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICLtjoTsl5Ag7KCB7ZWp7ZWY6rKMIO2UjOugiOydtOyKpO2ZgOuNlOulvCDsnbjsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzIKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAi7YyM7J207I2s7JeQIOygge2Vqe2VmOqyjCDtlIzroIjsnbTsiqTtmYDrjZTrpbwg7J247Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgIu2LsO2BtOyXkCDsoIHtlantlZjqsowg7ZSM66CI7J207Iqk7ZmA642U66W8IOyduOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICI8bj7qsJzsnZgg7ZW064u57ZWY64qUIOugiO2NvOufsOyKpOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzkgYnVpbHRpbi90YWcuYzo0MjEKK21zZ2lkICJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiCittc2dzdHIgIu2PrOuntyDsg4nsnYQg7Jyg7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQzCittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IgorbXNnc3RyICLso7zslrTsp4Qg7Jik67iM7KCd7Yq466W8IOqwgOumrO2CpOuKlCDroIjtjbzrn7DsiqTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi67OR7ZWp7ZWY64qUIOugiO2NvOufsOyKpOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuuKlCDroIjtjbzrn7DsiqTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi7Luk67CL7J20IOuTpOyWtCDsnojripQg66CI7Y2865+w7Iqk66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuy7pOuwi+ydtCDrk6TslrQg7J6I7KeAIOyViuydgCDroIjtjbzrn7DsiqTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo1NjkKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIuyYpOu4jOygne2KuCDrlJTroInthLDrpqzrpbwg7ZmV7J247ZWY64qUIOykkeyeheuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjYxCittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgWzzsmLXshZg+XSBbPOyYpOu4jOygne2KuD4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo2NjcKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIuygkeq3vO2VoCDsiJgg7JeG64qUIOyYpOu4jOygne2KuOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY2OAorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAi7Jew6rKw7J20IOuBiuyWtOynhCDsmKTruIzsoJ3tirjrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo2NjkKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAi7YOc6re466W8IOyVjOumveuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcwCittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgIuy1nOyDgeychCDrhbjrk5zrpbwg7JWM66a964uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzEKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAi7J24642x7IqkIOyYpOu4jOygne2KuCDtl6Trk5wg64W465Oc66W8IOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJyZWZsb2cg7Zek65OcIOuFuOuTnOulvCDrp4zrk63ri4jri6QgKOq4sOuzuOqwkikiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3MworbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICLrrLbsnYzqs7wg67O07KGwIOyYpOu4jOygne2KuOuPhCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NAorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICLsl7DqsrDrp4wg7ZmV7J247ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgIuuNlCDsl4TqsqntlZjqsowg7ZmV7J247ZWp64uI64ukIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzcKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAiLmdpdC9sb3N0LWZvdW5kIOyViOyXkCDsl7DqsrDsnbQg64GK7Ja07KeEIOyYpOu4jOygne2KuOulvCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3OCBidWlsdGluL3BydW5lLmM6MTA5Cittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAi7KeE7ZaJIOyDge2ZqeydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3OQorbXNnaWQgInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIuygkeq3vO2VoCDsiJgg7JeG64qUIOyYpOu4jOygne2KuOydmCDsnbTrpoTsnYQg7J6Q7IS47Z6IIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzQ1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq466W8IO2ZleyduO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9nYy5jOjMzCittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9nYy5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmc3RhdCAlczogJXMiCittc2dzdHIgIiclcyfsl5AgZnN0YXQoKe2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL2djLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbid0IHN0YXQgJXMiCittc2dzdHIgIiclcyfsl5Agc3RhdCgp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLrp4jsp4Drp4kg6rCA67mE7KeA7Lus66CJ7YSw7JeQ7IScIOuLpOydjOydhCDslYzroKTsmZTsirXri4jri6QuIOybkOyduOydhCDrsJTroZzsnqHsnYBcbiIKKyLri6TsnYwgJXMg7YyM7J287J2EIOygnOqxsO2VmOyLreyLnOyYpC5cbiIKKyLsnbQg7YyM7J287J2EIOygnOqxsO2VmOq4sCDsoITsl5DripQg7J6Q64+ZIOygleumrCDsnpHsl4XsnYQg7IiY7ZaJ7ZWY7KeAIOyViuyKteuLiOuLpC5cbiIKKyJcbiIKKyIlcyIKKworIzogYnVpbHRpbi9nYy5jOjUwMgorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICLroIjtjbzrn7DsiqTtlZjsp4Ag7JWK64qUIOyYpOu4jOygne2KuOulvCDsnpjrnbzrg4Xri4jri6QiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MDQKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgIuuNlCDsnpDshLjtnogg6rKA7IKs7ZWp64uI64ukICjsi6Ttlokg7Iuc6rCEIOuKmOyWtOuCqCkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MDUKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICLsnpDrj5kg6rCA67mE7KeA7Lus66CJ7YSwIOuqqOuTnOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1MDgKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAi7J2066+4IOqwgOu5hOyngOy7rOugie2EsOqwgCDsi6Ttlokg7KSR7J20642U652864+EIOqwleygnOuhnCDqsIDruYTsp4Dsu6zroInthLDrpbwg7Iuk7ZaJ7ZWp64uI64ukIgorCisjOiBidWlsdGluL2djLmM6NTExCittc2dpZCAicmVwYWNrIGFsbCBvdGhlciBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayIKK21zZ3N0ciAi6rCA7J6lIO2BsCDrrLbsnYzsnYQg7KCc7Jm47ZWcIOuLpOuluCDrrLbsnYzsnYQg64uk7IucIOustuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9nYy5jOjUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgZ2MubG9nZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJnYy5sb2dleHBpcnkg6rCS7J2EICglcykg7YyM7Iux7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9nYy5jOjUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICLrp4zro4zqsJIgJXMg7YyM7Iux7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9nYy5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAi7LWc7KCBIOyEseuKpeydhCDsnITtlbQg67Cx6re465287Jq065Oc7JeQ7IScIOyekOuPmeycvOuhnCDsoIDsnqXshozsnZgg66y27J2M7J2EIOunjOuTreuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIuy1nOyggSDshLHriqXsnYQg7JyE7ZW0IOyekOuPmeycvOuhnCDsoIDsnqXshozsnZgg66y27J2M7J2EIOunjOuTreuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU2MgorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICLsiJjrj5kg6rSA66asIOyekeyXheydgCBcImdpdCBoZWxwIGdjXCIg64K07Jqp7J2EIOywuOqzoO2VmOyLreyLnOyYpC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2MgaXMgYWxyZWFkeSBydW5uaW5nIG9uIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2UgaWYgbm90KSIKK21zZ3N0ciAiIgorIuqwgOu5hOyngOy7rOugie2EsOqwgCDsnbTrr7ggJyVzJyDsu7Ttk6jthLDsl5DshJwgJTxQUkl1TUFYPiBQSUTroZwg7Iuk7ZaJIOykkeyeheuLiOuLpCAo7JWE64uI66m0IC0tIgorImZvcmNl66W8IOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2NDUKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyLripDsiqjtlZwg7Jik67iM7KCd7Yq46rCAIOuEiOustCDrp47sirXri4jri6QuIOygnOqxsO2VmOugpOuptCAnZ2l0IHBydW5lJ+ydhCDsi6TtlontlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL2dyZXAuYzoyOAorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzzsmLXshZg+XSBbLWVdIDztjKjthLQ+IFs866as67mE7KCEPi4uLl0gW1stLV0gPOqyveuhnD4uLi5dIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiDsiqTroIjrk5zrpbwg66eM65Oc64qU642wIOyLpO2MqO2WiOyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOyKpOugiOuTnCDsiJjrpbwgJTIkc+yXkCDrjIDtlbQg7KeA7KCV7ZaI7Iq164uI64ukICglMSRkKSIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyOTMgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNSBidWlsdGluL2luZGV4LXBhY2suYzoxNzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgIuyKpOugiOuTnCDquLDriqXsnbQg7JeG7Iq164uI64ukLiAlcyDrrLTsi5wiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ2MSBidWlsdGluL2dyZXAuYzo1ODIgYnVpbHRpbi9ncmVwLmM6NjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAi7Yq466as66W8IOydveydhCDsiJgg7JeG7Iq164uI64ukICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICLsooXrpZjqsIAgJXPsnbgg7Jik67iM7KCd7Yq47JeQ7IScIGdyZXDsnYQg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwMworIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJgJWMnIOyYteyFmOyXkOuKlCDsiKvsnpAg6rCS7J20IOyZgOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5MAorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIuyekeyXhSDtj7TrjZQg64yA7Iug7JeQIOyduOuNseyKpOyXkOyEnCDqsoDsg4ntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5MgorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICLquYPsnLzroZwg6rSA66as7ZWY7KeAIOyViuydgCDrgrTsmqnsl5DshJwg7LC+7Iq164uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo3OTQKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuy2lOyggeuQmOuKlCDtjIzsnbzqs7wg7LaU7KCB65CY7KeAIOyViuuKlCDtjIzsnbwg66qo65GQ7JeQ7IScIOqygOyDie2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6Nzk2Cittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICInLmdpdGlnbm9yZSfroZwg7KeA7KCV7ZWcIO2MjOydvOydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc5OAorbXNnaWQgInJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBlYWNoIHN1Ym1vZHVsZSIKK21zZ3N0ciAi6rCBIO2VmOychCDrqqjrk4jsl5Ag7J6s6reA7KCB7Jy866GcIOqygOyDie2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODAxCittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIuydvOy5mO2VmOyngCDslYrripQg7KSE7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODAzCittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAi64yA7IaM66y47J6QIOq1rOuzhO2VmOyngCDslYrqs6Ag67mE6rWQ7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDUKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAi64uo7Ja0IOqyveqzhCDrtoDrtoTsl5Ag64yA7ZW07ISc66eMIO2MqO2EtOydhCDrp57stqXri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwNworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgIuuwlOydtOuEiOumrCDtjIzsnbzsnYQg7YWN7Iqk7Yq466GcIOyymOumrO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA5Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICLrsJTsnbTrhIjrpqwg7YyM7J287JeQ7IScIO2MqO2EtOydhCDrp57stpTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTIKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgInRleHRjb252IO2VhO2EsOulvCDsgqzsmqntlbQg67CU7J2064SI66asIO2MjOydvOydhCDsspjrpqztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNAorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAi7LWc64yAIDzquYrsnbQ+IOuLqOqzhOunjO2BvCDrgrTroKTqsJHri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOAorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJQT1NJWCDtmZXsnqUg7KCV6rec7Iud7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIxCittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICLquLDrs7ggUE9TSVgg7KCV6rec7Iud7J2EIOyCrOyaqe2VqeuLiOuLpCAo6riw67O46rCSKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI0Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgIu2MqO2EtOydhCDqs6DsoJUg66y47J6Q7Je066GcIO2VtOyEne2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI3Cittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICLtjoTqs7wg7Zi47ZmY65CY64qUIOygleq3nOyLneydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMAorbXNnaWQgInNob3cgbGluZSBudW1iZXJzIgorbXNnc3RyICLspIQg67KI7Zi466W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMxCittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIu2MjOydvCDsnbTrpoTsnYQg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMyCittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIu2MjOydvCDsnbTrpoTsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzQKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLtjIzsnbwg7J2066aE7J2EIOy1nOyDgeychCDrlJTroInthLDrpqwg7IOB64yAIOqyveuhnOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNgorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi7J287LmY7ZWY64qUIOykhOydhCDtkZzsi5ztlZjsp4Ag7JWK6rOgIO2MjOydvCDsnbTrpoTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzgKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAiLS1maWxlcy13aXRoLW1hdGNoZXMg7Ji17IWY6rO8IOuPmeydvCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQxCittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICLsnbzsuZjtlZjsp4Ag7JWK64qUIO2MjOydvOydmCDsnbTrpoTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDMKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICLtjIzsnbwg7J2066aEIOuLpOydjOyXkCBOVUzsnYQg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDYKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLsnbzsuZjtlZjripQg7KSE7J2EIO2RnOyLnO2VmOyngCDslYrqs6Ag7J287LmY7ZWY64qUIOyImOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NworbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICLsnbzsuZjtlZjripQg67aA67aE7J2EIOqwleyhsO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ5Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgIuuLpOuluCDtjIzsnbwg7IKs7J207JeQIOydvOy5mO2VmOuKlCDrtoDrtoTsnZgg7IKs7J207JeQIOu5iCDspITsnYQg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTEKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICLqsJnsnYAg7YyM7J287JeQ7IScIOyXrOufrCDqsJzqsIAg7J287LmY7ZWY66m0IO2MjOydvCDsnbTrpoTsnYQg7ZWcIOuyiOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLsnbzsuZjtlZjripQg67aA67aEIOyVnuuSpOyXkCDsu6jthY3siqTtirjrpbwgPG4+7KSEIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAi7J287LmY7ZWY64qUIOu2gOu2hCDslZ7sl5Ag7Luo7YWN7Iqk7Yq466W8IDxuPuykhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAi7J287LmY7ZWY64qUIOu2gOu2hCDrkqTsl5Ag7Luo7YWN7Iqk7Yq466W8IDxuPuykhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgIjxuPuqwnOydmCDsnpHsl4Ug7Iqk66CI65Oc66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAiLUMgTlVNIOyYteyFmOydmCDspITsnoQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NQorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIuydvOy5mCDtla3rqqkg7JWe7JeQIO2VqOyImCDsnbTrpoQg7KSE7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY3Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgIuuTpOyWtCDsnojripQg7ZWo7IiY66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcwCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgIu2MjOydvOyXkOyEnCDtjKjthLTsnYQg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzIKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIjztjKjthLQ+6rO8IOydvOy5mCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc0Cittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiLWUg7Ji17IWY7Jy866GcIOyngOygle2VnCDtjKjthLTsnYQg6rKw7ZWp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODYKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAi7Lac66Cl7ZWY7KeAIOyViuqzoCDsnbzsuZjtlZjripQg7ZWt66qp7J2EIGV4aXQoKSDsg4Htg5wg67KI7Zi466GcIOumrO2EtO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg4Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAi66qo65OgIO2MqO2EtOqzvCDsnbzsuZjtlZjripQg7YyM7J287J2YIOydvOy5mO2VmOuKlCDrtoDrtoTrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTAKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAiZ3JlcCDtkZztmITsi53sl5Ag64yA7ZWcIO2MjOyLsSDtirjrpqzrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTQKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAi7Y6Y7J207KCAIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTQKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAi7J287LmY7ZWY64qUIO2MjOydvOydhCDtjpjsnbTsoIAg7ZSE66Gc6re4656o7JeQ7IScIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk4Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICJncmVwKDEpIOyLpO2WieydhCDtl4jsmqntlanri4jri6QgKOydtCDruYzrk5zsl5DshJzripQg66y07IucKSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTYyCittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgIu2MqO2EtOydhCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTk0Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIi0tbm8taW5kZXgg65iQ64qUIC0tdW50cmFja2VkIOyYteyFmOydgCDrpqzruYTsoITqs7wg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAi66as67mE7KCE7J2EIOywvuyVhOuCvCDsiJgg7JeG7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNiBidWlsdGluL2luZGV4LXBhY2suYzoxNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgIuyemOuqu+uQnCDsiqTroIjrk5wg7IiY66W8IOyngOygle2WiOyKteuLiOuLpCAoJWQpIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDQxCittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgIuyKpOugiOuTnCDquLDriqXsnbQg7JeG7Iq164uI64ukLiAtLXRocmVhZHMg7Ji17IWYIOustOyLnCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NQorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIOyYteyFmOydgCDsnpHsl4Ug7Y+0642U7JeQ7ISc66eMIOuPmeyeke2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA4OAorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMuIgorbXNnc3RyICItLXJlY3Vyc2Utc3VibW9kdWxlc+yZgCDqsJnsnbQg7KeA7JuQ7ZWY7KeAIOyViuuKlCDsmLXshZjsnoXri4jri6QuIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDk0Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAiIgorIi0tY2FjaGVkIOuYkOuKlCAtLXVudHJhY2tlZCDsmLXshZjsnYAgLS1uby1pbmRleCDsmLXshZjqs7wg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEwMAorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQg7Ji17IWY7J2AIOy2lOyggeuQmOuKlCDrgrTsmqnsl5Ag64yA7ZW0IOyTuCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEwOAorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iCittc2dzdHIgIi0tY2FjaGVkIOyYteyFmOqzvCDtirjrpqzrpbwg66qo65GQIOyngOygle2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4MworbXNnaWQgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPOyiheulmD5dIFstd10gWy0tcGF0aD087YyM7J28PiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDztjIzsnbw+Li4uIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODQKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk2Cittc2dpZCAidHlwZSIKK21zZ3N0ciAi7KKF66WYIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTYKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IOyiheulmCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk3Cittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIuyYpOu4jOygne2KuOulvCDsmKTruIzsoJ3tirgg642w7J207YSw67Kg7J207Iqk66GcIOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7Jik67iM7KCd7Yq466W8IOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMQorbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICLtjIzsnbzsnYQg7ZWE7YSwIOyXhuydtCDqt7jrjIDroZwg7KCA7J6l7ZWp64uI64ukIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAi7J6E7J2Y7J2YIOyTsOugiOq4sCDrjbDsnbTthLDrpbwg7ZW07Iuc7ZW0IOyGkOyDgeuQnCDsmKTruIzsoJ3tirjrpbwg66eM65Ot64uI64ukICjrlJTrsoTquYXsmqkpIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgIu2MjOydvOydtCDsnbQg6rK966Gc7JeQ7IScIOyYqCDqsoPsspjrn7wg7LKY66as7ZWp64uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo0NQorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgIuyCrOyaqSDqsIDriqXtlZwg66qo65OgIOuqheugueydmCDrqqnroZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgImV4Y2x1ZGUgZ3VpZGVzIgorbXNnc3RyICLshKTrqoXshJwg7KCc7Jm4IgorCisjOiBidWlsdGluL2hlbHAuYzo0NworbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAi7Jyg7Jqp7ZWcIOyViOuCtOyEnCDrqqnroZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo0OAorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgIuunqCDtjpjsnbTsp4Drpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICLsm7kg67iM65287Jqw7KCA7JeQ7IScIOyEpOuqheyEnOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgIuyduO2PrCDtjpjsnbTsp4Drpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo1MworbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgIuuqheugueyWtCDshKTrqoXsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo1OAorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzzrqoXroLk+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgIiclcycg64+E7JuA66eQIO2PrOunt+ydhCDsnbjsi53tlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9oZWxwLmM6OTcKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJlbWFjc2NsaWVudCDsi5zsnpHsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTEwCittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICJlbWFjc2NsaWVudCDrsoTsoIQg7YyM7Iux7JeQIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJlbWFjc2NsaWVudCAnJWQnIOuyhOyghOydgCDrhIjrrLQg6rO86rGwICg8IDIyKSDrsoTsoITsnoXri4jri6QuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMzYgYnVpbHRpbi9oZWxwLmM6MTU4IGJ1aWx0aW4vaGVscC5jOjE2OCBidWlsdGluL2hlbHAuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJyIKK21zZ3N0ciAi7Iuk7ZaJIOyLpO2MqDogJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzog7KeA7JuQ7ZWY7KeAIOyViuuKlCDrp6gg7Y6Y7J207KeAIOuztOq4sCDtlITroZzqt7jrnqgg6rK966GcLlxuIgorIuuMgOyLoOyXkCAnbWFuLjzrj4Tqtaw+LmNtZCcg7Ji17IWY7J2EIOyCrOyaqe2VtCDrs7Tsi63si5zsmKQuIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzog7KeA7JuQ7ZWY7KeAIOyViuuKlCDrp6gg7Y6Y7J207KeAIOuztOq4sCDtlITroZzqt7jrnqgg66qF66C5LlxuIgorIuuMgOyLoOyXkCAnbWFuLjzrj4Tqtaw+LnBhdGgnIOyYteyFmOydhCDsgqzsmqntlbQg67O07Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcyc6IOyVjCDsiJgg7JeG64qUIOunqCDtjpjsnbTsp4Ag67O06riwIO2UhOuhnOq3uOueqC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2MAorbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAi7JqU7LKt7J2EIOyymOumrO2VnCDrp6gg7Y6Y7J207KeAIOuztOq4sCDtlITroZzqt7jrnqjsnbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzozNjgKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLsmpTssq3snYQg7LKY66as7ZWcIOyduO2PrCDtjpjsnbTsp4Ag67O06riwIO2UhOuhnOq3uOueqOydtCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyDrqoXroLnsnYAgJyVzJyDrqoXroLnsnZgg64uo7LaV7J6F64uI64ukIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDIgYnVpbHRpbi9oZWxwLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICLsgqzsmqnrspU6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSDsl7Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICLsmKTruIzsoJ3tirgg7KKF66WY6rCAIOunnuyngCDslYrsirXri4jri6QgKCVzKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIuyYiOyDge2VnCAlcyDsmKTruIzsoJ3tirjrpbwg67Cb7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIiVzIOyYpOu4jOygne2KuDog7JiI7IOB7ZWcIOyiheulmCAlcywg7Iuk7KCcICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gIiVkIOuwlOydtO2KuOulvCDssYTsmrgg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgzCittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICLrhIjrrLQg67mo66asIO2MjOydvOydtCDrgZ3rgqgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4NAorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgIuyeheugpeyXkCDsnb3quLAg7Jik66WYIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTYKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAi7J6I64qUIOuwlOydtO2KuOuztOuLpCDrjZQg66eO7J20IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzAzCittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAi7ZiE7J6sIOygleydmOuQnCBvZmZfdOyXkCDruYTtlbQg66y27J2M7J20IOuEiOustCDtgb3ri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6OTMKK21zZ2lkICJwYWNrIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUiCittc2dzdHIgIuustuydjCDtgazquLDqsIAg7LWc64yAIO2XiOyaqSDtgazquLDrpbwg64SY7JeI7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICInJXMnIOustuydjCDtjIzsnbzsnYQg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0MQorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICLrrLbsnYwg7ISc66qF7J20IOunnuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICLrrLbsnYzsnZggJTxQUkl1MzI+IOuyhOyghOydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgIuustuydjOydmCAlPFBSSXVNQVg+IOyYpO2UhOyFi+yXkCDsnpjrqrvrkJwg7Jik67iM7KCd7Yq46rCAIOyeiOyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICJpbmZsYXRl6rCAICVk67KI7J2EIOumrO2EtO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMxCittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAi64247YOAIOuyoOydtOyKpCDsmKTruIzsoJ3tirjsl5Ag64yA7ZW0IOyYpO2UhOyFiyDqsJLsnbQg7Jik67KE7ZSM66Gc7JqwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzkKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgIuuNuO2DgCDrsqDsnbTsiqQg7Jik7ZSE7IWL7J20IOuylOychOulvCDrspfslrTrgqzsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDsmKTruIzsoJ3tirgg7KKF66WYICVk67KIIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NzgKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICLrrLbsnYwg7YyM7J287JeQIOuMgO2VtCBwcmVhZOulvCDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAi66y27J2MIO2MjOydvOydtCDrhIjrrLQg7J287LCNIOuBneuCqC4gJTxQUkl1TUFYPiDrsJTsnbTtirgg67aA7KGxIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo2MDYKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAi7Ius6rCB7ZWcIGluZmxhdGUg67aA7KGw7ZmUIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NTEgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzU3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc4MAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODE5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIlNIQTEg7Lap64+M7J20ICVz7JeQ7IScIOuwnOqyrOuQmOyXiOyKteuLiOuLpCEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc1NCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE5OAorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiVz7J2EKOulvCkg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAi6riw7KG0ICVzIOyYpOu4jOygne2KuCDsoJXrs7Trpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIuq4sOyhtCAlcyDsmKTruIzsoJ3tirjrpbwg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg67iU66GtIOyYpOu4jOygne2KuCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg2MAorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAi66y27J2MIOyYpOu4jOygne2KuOyXkOyEnCBmc2NrIOyYpOulmCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIuyemOuqu+uQnCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICIlc+ydmCDrqqjrk6Ag7ZWY7JyEIOyYpOu4jOygne2KuOyXkCDsoJHqt7ztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTM0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk2NQorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAi64247YOA66W8IOyggeyaqe2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMzUKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq466W8IOuwm+uKlCDspJEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMzUKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICLsmKTruIzsoJ3tirgg7J24642x7Iqk66W8IOunjOuTnOuKlCDspJEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjkKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgIuustuydjOydtCDshpDsg4HrkJjsl4jsirXri4jri6QgKFNIQTEg7J287LmY7ZWY7KeAIOyViuydjCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzQKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIuustuydjCDtjIzsnbzsl5Ag64yA7ZW0IGZzdGF0KCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3NworbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAi66y27J2M7J2YIOuBneyXkCDsk7DroIjquLAg642w7J207YSw6rCAIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE4OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgInBhcnNlX3BhY2tfb2JqZWN0cygp7JeQ7IScIOq3ueyLrO2VnCDtmLzrnoAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMTIKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICLrjbjtg4Drpbwg7JWM7JWE64K064qUIOykkSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIuyKpOugiOuTnOulvCDrp4zrk6Qg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjUKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICLqt7nsi6ztlZwg7Zi8656AIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAi66Gc7LusIOyYpOu4jOygne2KuCAlZOqwnCDrp4jsuagiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIiVz7JeQIOuMgO2VtCDsmIjsg4HsuZgg66q77ZWcIO2FjOydvCDssrTtgazshKwgKOuUlOyKpO2BrCDshpDsg4E/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI4NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAi66y27J2M7JeQIOyVjOyVhOuCtOyngCDrqrvtlZwg64247YOAICVk6rCc6rCAIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAi7LaU6rCA7ZWcIOyYpOu4jOygne2KuOulvCBkZWZsYXRl7ZWgIOyImCDsl4bsirXri4jri6QgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAiJXMg66Gc7LusIOyYpOu4jOygne2KuOqwgCDshpDsg4HrkJjsl4jsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgIiclcycg66y27J2M7YyM7J28IOydtOumhOydtCAnLnBhY2sn7Jy866GcIOuBneuCmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAiJXMg7YyM7J287J2EIOyTuCDsiJgg7JeG7Iq164uI64ukICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4gJXMgZmlsZSAnJXMnIgorbXNnc3RyICLsk7QgJXPtjIzsnbzsnYQg64ur7J2EIOyImCDsl4bsirXri4jri6QgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ1OQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICLrrLbsnYwg7YyM7J287J2EIOuLq+uKlOuNsCDsmKTrpZgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICLrrLbsnYwg7YyM7J287J2EIOyggOyepe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDgxCittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIuyduOuNseyKpCDtjIzsnbzsnYQg7KCA7J6l7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAi7J6Y66q765CcIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAi6riw7KG0ICclcycg66y27J2MIO2MjOydvOydhCDsl7Qg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICInJXMn7JeQIOuMgO2VnCDquLDsobQg66y27J2MIGlkeCDtjIzsnbzsnYQg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAi64247YOAIOyVhOuLmDog7Jik67iM7KCd7Yq4ICVk6rCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIuyytOyduCDquLjsnbQgPSAlZDog7Jik67iM7KCd7Yq4ICVsdeqwnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY4OAorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLtmITsnqwg65SU66CJ7YSw66as66GcIOuPjOyVhOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzM5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NDIKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NTggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIuyemOuqu+uQnCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc3OAorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIOyYteyFmOydgCAtLXN0ZGluIOyYteyFmOqzvCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODAKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tc3RkaW4g7Ji17IWY7J2AIOq5gyDsoIDsnqXshozqsIAg7ZWE7JqU7ZWp64uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg2Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSDsmLXshZjsl5Ag66y27J2M7YyM7J28IOydtOumhOydhCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODM2IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1NzgKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIKK21zZ3N0ciAi66y27J2MIOyYpOu4jOygne2KuOyXkOyEnCBmc2NrIOyYpOulmCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIHN0YXQoKe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICInJXMnIOyEnOyLneydhCBzdGF0KCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIG9wZW5kaXIoKe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIHJlYWRsaW5rKCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkgJyVzJ+yXkCBzeW1saW5rKCntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkgJyVzJ+yXkCDrs7XsgqztlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgIiVzIOyEnOyLneydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICIlc+yXkCDshJzsi53snbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgIiclcyfsl5DshJwg7ISc7Iud7J2EIOuzteyCrO2VmOyngCDslYrsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgIu2MjOydvCDsooXrpZggJWTrsojsnYQg7LKY66as7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiJXPsnYQo66W8KSAlcyjsnLwp66GcIOyYruq4uCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNDggYnVpbHRpbi9pbml0LWRiLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyDtjIzsnbzsnbQg7J2066+4IOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMlcyDslYjsnZgg6riw7KG0IOqzteycoCDquYMg7KCA7J6l7IaM66W8IOuLpOyLnCDstIjquLDtmZTtlojsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIOyViOydmCDquLDsobQg6rmDIOyggOyepeyGjOulvCDri6Tsi5wg7LSI6riw7ZmU7ZaI7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIOyViOydmCDruYgg6rO17JygIOq5gyDsoIDsnqXshozrpbwg64uk7IucIOy0iOq4sO2ZlO2WiOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIOyViOydmCDruYgg6rmDIOyggOyepeyGjOulvCDri6Tsi5wg7LSI6riw7ZmU7ZaI7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ1OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT087ISc7IudLeuUlOugie2EsOumrD5dIFstLXNoYXJlZFs9POq2jCIKKyLtlZw+XV0gWzzrlJTroInthLDrpqw+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDgxCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgIuq2jO2VnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDgyCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICLquYMg7KCA7J6l7IaM66W8IOuLpOuluCDsgqzsmqnsnpDqsIAg6rO17Jyg7ZWgIOyImCDsnojqsowg7KeA7KCVIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICIlc+yXkCDrjIDtlbQgY2hkaXLrpbwg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKOuYkOuKlCAtLXdvcmstdHJlZT0865SU66CJ7YSw66asPikg7ZeI7Jqp65CY7KeAIOyViuydjC4gJXMgKOuYkOuKlCAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSDsp4DsoJXsnbQg7JeG7Jy866m0IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlCAnJXMn7JeQIOygkeq3vO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE1Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDzthqDtgbA+Wyg9fDopPCIKKyLqsJI+XSkuLi5dIFs87YyM7J28Pi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTIKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICLtjIzsnbzsnYQg7KeB7KCRIO2OuOynke2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5MworbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgIuu5iCDtirjroIjsnbzrn6zrpbwg7J6Y652864OF64uI64ukIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk2Cittc2dpZCAid2hlcmUgdG8gcGxhY2UgdGhlIG5ldyB0cmFpbGVyIgorbXNnc3RyICLsg4gg7Yq466CI7J2865+s66W8IOuGk+ydhCDsnITsuZgiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi7Yq466CI7J2865+s6rCAIOydtOuvuCDsnojsnYQg65WMIOuPmeyekSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDAKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICLtirjroIjsnbzrn6zqsIAg7JeG7J2EIOuVjCDrj5nsnpEiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICLtirjroIjsnbzrn6zrp4wg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMworbXNnaWQgImRvIG5vdCBhcHBseSBjb25maWcgcnVsZXMiCittc2dzdHIgIuyEpOyglSDqt5zsuZnsnYQg7KCB7Jqp7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDQKK21zZ2lkICJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIKK21zZ3N0ciAi6rO167Cx7Jy866GcIOqzhOyGjeuQnCDqsJLsnYQg7Jew6rKw7ZWp64uI64ukIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNQorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgIu2MjOyLsSDsmLXshZgg7ISk7KCVIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgInRyYWlsZXIiCittc2dzdHIgIu2KuOugiOydvOufrCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDgKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAi7LaU6rCA7ZWgIO2KuOugiOydvOufrCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTcKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIOyYteyFmOqzvCAtLW9ubHktaW5wdXQg7Ji17IWY7J2AIOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEyNworbXNnaWQgIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciCittc2dzdHIgIu2MjOydvCDsp4HsoJEg7Y647KeR7JeQIOyeheugpSDtjIzsnbzsnYQg7KeA7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzo0OAorbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzzsmLXshZg+XSBbPOumrOu5hOyghC3rspTsnIQ+XSBbWy0tXSA86rK966GcPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDkKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzzsmLXshZg+XSA87Jik67iM7KCd7Yq4Pi4uLiIKKworIzogYnVpbHRpbi9sb2cuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIC0tZGVjb3JhdGUg7Ji17IWYOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTMKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAiZGlmZuulvCDstpzroKXtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1NAorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICLshozsiqTrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICLrqZTsnbwg66e1IO2MjOydvOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICI87Yyo7YS0PuqzvCDsnbzsuZjtlZjripQg66CI7Y2865+w7Iqk66eMIOq+uOuwieuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTkKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiPO2MqO2EtD7qs7wg7J287LmY7ZWY64qUIOugiO2NvOufsOyKpOulvCDqvrjrr7jsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE2MAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgIuq+uOuvuOq4sCDsmLXshZgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIu2MjOydvOyXkOyEnCBuLG0g67KU7JyE7J2YIOykhOydhCDsspjrpqztlanri4jri6QgKDHrtoDthLAg7Iuc7J6RKSIKKworIzogYnVpbHRpbi9sb2cuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICLstZzsooUg7Lac66ClOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiDsnpjrqrvrkJwg7YyM7J28IgorCisjOiBidWlsdGluL2xvZy5jOjUyNSBidWlsdGluL2xvZy5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiVzIOyYpOu4jOygne2KuOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7KKF66WYOiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo3NjQKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyDshKTsoJXsl5Ag6rCS7J20IOyXhuydjCIKKworIzogYnVpbHRpbi9sb2cuYzo4NjUKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIuy2nOugpSDrlJTroInthLDrpqzsnZgg7J2066aE7J20IOuEiOustCDquYHri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIiVzIO2MqOy5mCDtjIzsnbzsnYQg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODk4Cittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgIuygle2Zle2eiCDtlZjrgpjsnZgg67KU7JyE6rCAIO2VhOyalO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTA4Cittc2dpZCAiTm90IGEgcmFuZ2UuIgorbXNnc3RyICLrspTsnITqsIAg7JWE64uZ64uI64ukLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDE0Cittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAi7Luk67KE66CI7YSw64qUIOyghOyekOuplOydvCDtmJXsi53snbTslrTslbwg7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAi7KCV7Iug64KY6rCEIGluLXJlcGx5LXRvIO2XpOuNlDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEyMgorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPOyYteyFmD5dIFs87Iuc7J6R7Iuc6rCBPiB8IDzrpqzruYTsoIQt67KU7JyEPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE3MgorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICLstpzroKUg65SU66CJ7YSw66as6rCAIOuRkOqwnD8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI3OSBidWlsdGluL2xvZy5jOjE5MzIgYnVpbHRpbi9sb2cuYzoxOTM0IGJ1aWx0aW4vbG9nLmM6MTk0NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7Luk67CLICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyODkgYnVpbHRpbi9ub3Rlcy5jOjg4NyBidWlsdGluL3RhZy5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyYrOuwlOuluCDroIjtjbzrn7DsiqTroZwg7JWM7JWE64K064qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI5NAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UuIgorbXNnc3RyICLsoJXtmZXtlZwg67OR7ZWpIOq4sOykgOygkOydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI5OAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5LiIKK21zZ3N0ciAiIgorIuyXheyKpO2KuOumvOydhCDqsIDsoLjsmKTripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiDrsqDsnbTsiqQg7Luk67CL7J2EIOyekOuPmeycvOuhnCDquLDroZ3tlZjroKTrqbQsXG4iCisiJ2dpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8nIOuqheugueycvOuhnCDsm5Dqsqkg67iM656c7LmY66W8IOy2lOygge2VmOyLreyLnOyYpC5cbiIKKyLslYTri4jrqbQg7KeB7KCRICctLWJhc2U9POq4sOykgOygkC3su6TrsIstSUQ+JyDsmLXshZjsnLzroZwg6riw7KSA7KCQIOy7pOuwi+ydhCDsp4DsoJXtlaBcbiIKKyLsiJjrj4Qg7J6I7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzE4Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAi7KCV7ZmV7ZWcIOuzke2VqSDquLDspIDsoJDsnYQg7LC+64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxMzI5Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkIGJlIHRoZSBhbmNlc3RvciBvZiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICLquLDspIDsoJAg7Luk67CL7J2AIOumrOu5hOyghCDrqqnroZ3snZgg7IOB7JyEIOy7pOuwi+ydtOyWtOyVvCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzMworbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZG4ndCBiZSBpbiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICLquLDspIDsoJAg7Luk67CL7J2AIOumrOu5hOyghCDrqqnroZ3sl5Ag65Ok7Ja0IOyeiOycvOuptCDslYgg65Cp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjEzODIKK21zZ2lkICJjYW5ub3QgZ2V0IHBhdGNoIGlkIgorbXNnc3RyICLtjKjsuZggSUTrpbwg7JWM7JWE64K8IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgIu2VmOuCmOydmCDtjKjsuZjsl5Ag64yA7ZW07ISc64+EIFtQQVRDaCBuL21d7J2EIOu2meyeheuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQ0Cittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgIuyXrOufrCDqsJwg7Yyo7LmY7JeQIOuMgO2VtOyEnOuPhCBbUEFUQ0hd66W8IOu2meyeheuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDQ4Cittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgIu2MqOy5mOulvCDtkZzspIAg7Lac66Cl7Jy866GcIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDUwCittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgIuy7pOuyhOugiO2EsOulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1MgorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAi7Lac66ClIO2MjOydvCDsnbTrpoTsl5Ag6rCE64uo7ZWcIOydvOugqCDrsojtmLjrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTMKK21zZ2lkICJzZngiCittc2dzdHIgIu2ZleyepeyekCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDU0Cittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgIicucGF0Y2gnIOuMgOyLoCA87ZmV7J6l7J6QPuulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1NgorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgIu2MqOy5mCDrsojtmLjrpbwgMSDrjIDsi6AgPG4+7JeQ7IScIOyLnOyeke2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDU4Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICLsi5zrpqzspojrpbwgTuuyiOynuCByZS1yb2xs66GcIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDYwCittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiW1BBVENIXSDrjIDsi6AgW1JGQyBQQVRDSF3rpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjMKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIltQQVRDSF0g64yA7IugIFs87KCR65GQ7Ja0Pl3rpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjYKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgIuqysOqzvCDtjIzsnbzsnYQgPOuUlOugie2EsOumrD7sl5Ag7KCA7J6l7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjkKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAiW1BBVENIXeulvCDsnpDrpbTqsbDrgpgg7LaU6rCA7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDcyCittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAi67CU7J2064SI66asIGRpZmbrpbwg66eM65Ok7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc0Cittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgIkZyb20g7Zek642U7JeQ7IScIOuqqOuRkCAw7J24IO2VtOyLnOulvCDstpzroKXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3NgorbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAi7JeF7Iqk7Yq466a87JeQIOyeiOuKlCDtjKjsuZjrpbwg7Y+s7ZWo7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICLquLDrs7jqsJIgKO2MqOy5mCArIO2GteqzhCkg64yA7IugIO2MqOy5mCDtmJXsi53snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0ODAKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIuuplOyLnOynlSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDgxCittc2dpZCAiaGVhZGVyIgorbXNnc3RyICLtl6TrjZQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ4MgorbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgIuyghOyekOuplOydvCDtl6TrjZQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ4MyBidWlsdGluL2xvZy5jOjE0ODUKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAi7KCE7J6Q66mU7J28IgorCisjOiBidWlsdGluL2xvZy5jOjE0ODMKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAiVG86IO2XpOuNlOulvCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ4NQorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICJDYzog7Zek642U66W8IOy2lOqwgO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDg3Cittc2dpZCAiaWRlbnQiCittc2dzdHIgIuyLoOybkCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDg4Cittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiPOyLoOybkD7sl5DshJwgRnJvbSDso7zshozrpbwg7ISk7KCV7ZWp64uI64ukICjsl4bsnLzrqbQg7Luk66+47YSwIOyjvOyGjCDsi6Dsm5Ag7IKs7JqpKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDkwCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAi66mU7Iuc7KeALUlEIgorCisjOiBidWlsdGluL2xvZy5jOjE0OTEKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgIuyyqyDrqZTsnbzsnYQgPOuplOyLnOyngC1JRD7sl5Ag64yA7ZWcIOuLteyepSDrqZTsnbzroZwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE0OTIgYnVpbHRpbi9sb2cuYzoxNDk1Cittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgIuqyveqzhCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDkzCittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAi7Yyo7LmY66W8IOyyqOu2gO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDk2Cittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAi7Yyo7LmY66W8IOuzuOusuOyXkCDtj6ztlajtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUwMAorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICLrqZTsi5zsp4Dsl5Ag7Iqk66CI65Oc66W8IOyCrOyaqSwg7Iqk7YOA7J28OiBzaGFsbG93LCBkZWVwIgorCisjOiBidWlsdGluL2xvZy5jOjE1MDIKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgIuyEnOuqhSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTAzCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICLshJzrqoXsnYQg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1MDQKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAi67Kg7J207IqkLey7pOuwiyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTA1Cittc2dpZCAiYWRkIHByZXJlcXVpc2l0ZSB0cmVlIGluZm8gdG8gdGhlIHBhdGNoIHNlcmllcyIKK21zZ3N0ciAi7KCE7KCc7KGw6rG0IO2KuOumrCDsoJXrs7Trpbwg7Yyo7LmYIOyLnOumrOymiOyXkCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUwNworbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAi7YyM7J287JeQ7IScIOyEnOuqheydhCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUwOAorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIu2MqOy5mCDtjIzsnbwg7J2066aE7J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUxMAorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICLtjKjsuZjrpbwg66eM65Oc64qUIOuPmeyViCDsp4TtlonrpaDsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAi7J6Y66q765CcIOyLoOybkCDspIQ6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE2MDAKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi1uIOuwjyAtayDsmLXshZjsnYAg7ZWY64KY66eMIOyNqOyVvCDtlanri4jri6QuIgorCisjOiBidWlsdGluL2xvZy5jOjE2MDIKK21zZ2lkICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyDrsI8gLWsg7Ji17IWY7J2AIO2VmOuCmOunjCDsjajslbwg7ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjEwCittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkg7Ji17IWY7J2AIOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE2MTIKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMg7Ji17IWY7J2AIOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE2MTQKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sg7Ji17IWY7J2AIOyVnuuSpOqwgCDrp57sp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDYKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAi7ZGc7KSAIOy2nOugpeydtOuCmCDrlJTroInthLDrpqwg7KSR7JeQIO2VmOuCmOunjCDsp4DsoJXtlbTslbwg7ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiclcycg65SU66CJ7YSw66as66W8IOunjOuTpCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDshJzrqoUg7YyM7J287J2EIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL2xvZy5jOjE3NzMKK21zZ2lkICJHZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIu2MqOy5mCDsg53shLEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICLstpzroKUg7YyM7J287J2EIOunjOuTnOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NworbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzzsl4XsiqTtirjrprw+IFs87Zek65OcPiBbPO2VnOqzhOqwkj5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTkyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKyLstpTsoIHrkJjripQg66as66qo7Yq4IOu4jOuenOy5mOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpC4gPOyXheyKpO2KuOumvD7snYQg7IiY64+Z7Jy866GcIOyngOygle2VmOyLreyLnCIKKyLsmKQuXG4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjgKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPOyYteyFmD5dIFs87YyM7J28Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MTcKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICLtjIzsnbwg7IOB7YOc66W8IO2DnOq3uOyZgCDqsJnsnbQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTE5Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgIifrs4Dqsr3rkJjsp4Ag7JWK7JWY64uk6rOgIOqwgOyglScg7YyM7J287JeQIOyGjOusuOyekOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjEKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICIn7YyM7J28IOyLnOyKpO2FnCDrqqjri4jthLDsl5Ag67OA6rK965CY7KeAIOyViuydgCcg7YyM7J287JeQIOyGjOusuOyekOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjMKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAi7Lac66Cl7JeQIOy6kOyLnOuQnCDtjIzsnbzsnYQg7ZGc7Iuc7ZWp64uI64ukICjquLDrs7jqsJIpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI1Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuy2nOugpeyXkCDsgq3soJzrkJwg7YyM7J287J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNworbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi7Lac66Cl7JeQIOyImOygleuQnCDtjIzsnbzsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI5Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLstpzroKXsl5Ag6riw7YOAIO2MjOydvOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzEKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi7Lac66Cl7JeQIOustOyLnOuQnCDtjIzsnbzsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuy2nOugpeyXkCDsu6TrsIsg7ZGc7Iuc65CcIOuCtOyaqeydmCDsmKTruIzsoJ3tirgg7J2066aE7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzNgorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIu2MjOydvCDsi5zsiqTthZzsl5DshJwg7KCc6rGw7ZW07JW8IO2VmOuKlCDtjIzsnbzsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICLquLDtg4Ag65SU66CJ7YSw66as7J2YIOydtOumhOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDAKK21zZ2lkICJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIKK21zZ3N0ciAi7YyM7J287J2YIOykhCDrgZ3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQyCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi67mIIOuUlOugie2EsOumrCDtkZzsi5ztlZjsp4Ag7JWK6riwIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ1Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLstpzroKXsl5Ag67OR7ZWp7ZWY7KeAIOyViuydgCDtjIzsnbzsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgInJlc29sdmUtdW5kbyDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICLtjKjthLTsl5Ag7J287LmY7ZWY64qUIO2MjOydvOydhCDqsbTrhIjrnIHri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTIKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICLsoJzsmbjtlaAg7Yyo7YS07J2EIDztjIzsnbw+7JeQ7IScIOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NQorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICI87YyM7J28PuyXkOyEnCDstpTqsIDsoIHsnbgg65SU66CJ7YSw66as67OEIOygnOyZuCDtjKjthLTsnYQg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAi7ZGc7KSAIOq5gyDsoJzsmbgg7Yyo7YS07J2EIOy2lOqwgO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLstZzsg4HsnIQg65SU66CJ7YSw66asIOyDgeuMgCDqsr3roZzroZwg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYzCittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgIu2VmOychCDrqqjrk4jsl5Ag7J6s6reA7KCB7Jy866GcIOyggeyaqSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NQorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAiPO2MjOydvD7snbQg7J24642x7IqkIOyViOyXkCDsl4bsnLzrqbQg7Jik66WY66GcIOy3qOq4ie2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICLtirjrpqwt65Sw7JyEIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiPO2KuOumrC3rlLDsnIQ+IOuSpOuhnCDsoJzqsbDtlZwg6rK966Gc6rCAIOyeiOuLpOqzoCDqsIDsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICLrlJTrsoTquYUg642w7J207YSw66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTzsi6Ttlok+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs87KCA7J6l7IaMPiBbPOugiO2NvOufsOyKpD4uLi5dXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICLsm5DqsqkgVVJM7J2EIO2RnOyLnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MgorbXNnaWQgImV4ZWMiCittc2dzdHIgIuyLpO2WiSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MSBidWlsdGluL2xzLXJlbW90ZS5jOjYzCittc2dpZCAicGF0aCBvZiBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSBob3N0IgorbXNnc3RyICLsm5Dqsqkg7Zi47Iqk7Yq47J2YIGdpdC11cGxvYWQtcGFjayDqsr3roZwiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjUKK21zZ2lkICJsaW1pdCB0byB0YWdzIgorbXNnc3RyICLtg5zqt7jsl5Ag7ZWc7KCVIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgIu2XpOuTnOyXkCDtlZzsoJUiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAi67KX6rKo7KeEIO2DnOq3uOulvCDtkZzsi5ztlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgInVybC4867Kg7J207IqkPi5pbnN0ZWFkT2Yg7ISk7KCV7J2EIOqzoOugpO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo3MworbXNnaWQgImV4aXQgd2l0aCBleGl0IGNvZGUgMiBpZiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCIKK21zZ3N0ciAi7ZW064u57ZWY64qUIOugiO2NvOufsOyKpOqwgCDsl4bsnLzrqbQg7L2U65OcIDLrsojsnLzroZwg64Gd64OF64uI64ukIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc2Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgIuugiO2NvOufsOyKpOyZgCDroIjtjbzrn7DsiqTqsIAg6rCA66as7YKk64qUIOyYpOu4jOygne2KuOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjI5Cittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzzsmLXshZg+XSA87Yq466asLeuUsOychD4gWzzqsr3roZw+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI3Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICLtirjrpqzrp4wg7ZGc7IucIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjkKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIu2VmOychCDtirjrpqzroZwg7J6s6reA7KCB7Jy866GcIOyggeyaqSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMxCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAi7J6s6reA7KCB7Jy866GcIOyggeyaqe2VoCDrlYwg7Yq466asIO2RnOyLnCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM0Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi7ZWt66qp7J2EIE5VTCDrsJTsnbTtirjroZwg64Gd64OF64uI64ukIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICLsmKTruIzsoJ3tirgg7YGs6riwIO2PrO2VqCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM3IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOQorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgIu2MjOydvCDsnbTrpoTrp4wg66qp66GdIO2RnOyLnCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQyCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAi7KCE7LK0IOqyveuhnCDsnbTrpoQg7IKs7JqpIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDQKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIuyghOyytCDtirjrpqwg66qp66GdIO2RnOyLnCwg7ZiE7J6sIOuUlOugie2EsOumrOunjCDslYTri4jrnbwgKC0tZnVsbC1uYW1lIOyYteyFmCDtj6ztlagpIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICLruYggbWJveDogJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjUxCittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgImdpdCBtZXJnZSBbPOyYteyFmD5dIFs87Luk67CLPi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjUzCittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTEwCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJgbScg7Ji17IWY7JeQ64qUIOqwkuydtCDtlYTsmpTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiJyVzJyDrs5Htlakg7KCE65617J2EIOywvuydhCDsiJgg7JeG7Iq164uI64ukLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIuyCrOyaqSDqsIDriqXtlZwg7KCE65617J2AOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi7IKs7JqpIOqwgOuKpe2VnCDsgqzsmqnsnpAg7ISk7KCVIOyghOueteydgDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDMgYnVpbHRpbi9wdWxsLmM6MTQyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi67OR7ZWp7J20IOuBneuCoCDrlYwgZGlmZnN0YXTsnYQg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNiBidWlsdGluL3B1bGwuYzoxNDUKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIuuzke2VqeydtCDrgZ3rgqAg65WMIGRpZmZzdGF07J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNyBidWlsdGluL3B1bGwuYzoxNDgKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIoLS1zdGF0IOyYteyFmOqzvCDrj5nsnbwpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA5IGJ1aWx0aW4vcHVsbC5jOjE1MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi67OR7ZWpIOy7pOuwi+ydmCDrqZTsi5zsp4Dsl5Agc2hvcnRsb2cg7ZWt66qp7J2EICjstZzrjIAgPG4+6rCcKSDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTIgYnVpbHRpbi9wdWxsLmM6MTU3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgIuuzke2Vqe2VmOuKlCDrjIDsi6Ag7ZWY64KY7J2YIOy7pOuwi+ydhCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTQgYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICLrs5HtlansnbQg7ISx6rO17ZWY66m0IOy7pOuwi+ydhCDtlanri4jri6QgKOq4sOuzuOqwkikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTYgYnVpbHRpbi9wdWxsLmM6MTYzCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICLsu6TrsIsg7KCE7JeQIOuplOyLnOyngOulvCDtjrjsp5Htlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTcKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICLsoJXrsKntlqUg7KeE7ZaJ7J2EIO2XiOyaqe2VqeuLiOuLpCAo6riw67O46rCSKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxOSBidWlsdGluL3B1bGwuYzoxNjkKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICLsoJXrsKntlqUg7KeE7ZaJ7J20IOu2iOqwgOuKpe2VmOuptCDspJHsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjMgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLsp4DsoJXtlZwg7Luk67CL7JeQIOyYrOuwlOuluCBHUEcg7ISc66qF7J20IOyeiOuKlOyngCDqsoDspp3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjQgYnVpbHRpbi9ub3Rlcy5jOjc3NyBidWlsdGluL3B1bGwuYzoxNzYKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA5Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgIuyghOuetSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyNSBidWlsdGluL3B1bGwuYzoxNzcKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgIuyCrOyaqe2VoCDrs5Htlakg7KCE6561IgorCisjOiBidWlsdGluL21lcmdlLmM6MjI2IGJ1aWx0aW4vcHVsbC5jOjE4MAorbXNnaWQgIm9wdGlvbj12YWx1ZSIKK21zZ3N0ciAi7Ji17IWYPeqwkiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyNyBidWlsdGluL3B1bGwuYzoxODEKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLshKDtg53tlZwg67OR7ZWpIOyghOueteyXkCDrjIDtlZwg7Ji17IWYIgorCisjOiBidWlsdGluL21lcmdlLmM6MjI5Cittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICLrs5Htlakg7Luk67CLIOuplOyLnOyngCAo7KCV67Cp7Zal7J20IOyVhOuLjCDrs5Htlansl5Ag64yA7ZW0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIzMworbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLtmITsnqwg7KeE7ZaJIOykkeyduCDrs5HtlansnYQg7KSR7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MjM1Cittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIu2YhOyerCDsp4Ttlokg7KSR7J24IOuzke2VqeydhCDqs4Tsho3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMzcgYnVpbHRpbi9wdWxsLmM6MTg4Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICLqtIDqs4Qg7JeG64qUIOy7pOuwiyDrgrTsl63snZgg67OR7ZWp7J2EIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0MworbXNnaWQgInZlcmlmeSBjb21taXQtbXNnIGhvb2siCittc2dzdHIgIuy7pOuwiyDrqZTsi5zsp4Ag7ZuE7YGs66W8IOqygOymne2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OAorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICJzdGFzaOulvCDsi6TtlontlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzMKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgIuyKpO2DnOyLnCDsi6TtjKgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAi7Jis67CU66W4IOyYpOu4jOygne2KuOqwgCDslYTri5nri4jri6Q6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzAwIGJ1aWx0aW4vbWVyZ2UuYzozMTcKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJyZWFkLXRyZWUg7Iuk7YyoIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQ3Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAo7ZWp7LmgIOuCtOyaqeydtCDsl4bsirXri4jri6QpIgorCisjOiBidWlsdGluL21lcmdlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAi7Luk67CLIO2Vqey5mOq4sCAtLSBIRUFE66W8IOyXheuNsOydtO2KuO2VmOyngCDslYrsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIuuzke2VqSDrqZTsi5zsp4DqsIAg7JeG7Iq164uI64ukIC0tIEhFQUTrpbwg7JeF642w7J207Yq47ZWY7KeAIOyViuyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcyfsnbQo6rCAKSDsu6TrsIvsnYQg6rCA66as7YKk7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICLsnpjrqrvrkJwgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyDrrLjsnpDsl7Q6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjY5Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAi65GQIOqwnOydmCDtl6Trk5wg67OR7ZWpIOyZuOyXkOuKlCDsspjrpqztlZjsp4Ag7JWK7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJtZXJnZS1yZWN1cnNpdmXsl5Ag64yA7ZW0IOyVjCDsiJgg7JeG64qUIOyYteyFmDogLVglcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgJXMiCittc2dzdHIgIiVz7JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6NzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiJyVzJ+yXkOyEnCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyLrs5HtlansnYQg7Luk67CL7ZWY7KeAIOyViuyKteuLiOuLpC4g67OR7ZWp7J2EIOuniOy5mOugpOuptCAnZ2l0IGNvbW1pdCfsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuyZnCDsnbQg67OR7ZWp7J20IO2VhOyalO2VnOyngOulvCDshKTrqoXtlZjripQg7Luk67CLIOuplOyLnOyngOulvCDsnoXroKXtlZjsi63si5zsmKQuIO2Kue2eiFxuIgorIuyXheyKpO2KuOumvCDsl4XrjbDsnbTtirjrpbwg7Ja065akIOuqqeyggeyaqSDruIzrnpzsuZjroZwg67OR7ZWp7ZWgIOuVjOuKlCDrsJjrk5zsi5wg6re466CH6rKMXG4iCisi7ZWY7Iut7Iuc7JikLlxuIgorIlxuIgorIiclYycg66y47J6Q66GcIOyLnOyeke2VmOuKlCDspITsnYAg66y07Iuc65CY6rOgLCDrqZTsi5zsp4DqsIAg67mE7Ja0IOyeiOycvOuptCDsu6TrsIvsnYRcbiIKKyLspJHsp4Dtlanri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDAKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIuu5iCDsu6TrsIsg66mU7Iuc7KeALiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgxOQorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIu2bjOulre2VqeuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICLsnpDrj5kg67OR7ZWp7J20IOyLpO2MqO2WiOyKteuLiOuLpC4g7Lap64+M7J2EIOuwlOuhnOyeoeqzoCDqsrDqs7zrrLzsnYQg7Luk67CL7ZWY7Iut7Iuc7JikLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTExCittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICLtmITsnqwg67iM656c7LmY6rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MTMKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjsl5Ag64yA7ZWcIOumrOuqqO2KuOqwgCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTE1Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLtmITsnqwg67iM656c7LmY7JeQIOuMgO2VtCDquLDrs7gg7JeF7Iqk7Yq466a87J2EIOyngOygle2VmOyngCDslYrslZjsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIuumrOuqqO2KuCAlMiRz7JeQ7IScICUxJHPsl5Ag64yA7ZWcIOumrOuqqO2KuCDstpTsoIEg67iM656c7LmY6rCAIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwg6rCSICclcycsIO2ZmOqyvSAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiCittc2dzdHIgIiVzIOyViOyXkOyEnCDrs5HtlantlaAg7IiYIOyeiOuKlCDtla3rqqnsnbQg7JWE64uZ64uI64ukOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExMDkKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAi67OR7ZWp7ZWgIOyImCDsnojripQg7ZWt66qp7J20IOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTEKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IOyYteyFmOydgCDsnbjsnpDrpbwg67Cb7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMTUKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuykkeyngO2VoCDrs5Htlakg7J6R7JeF7J20IOyXhuyKteuLiOuLpC4gKE1FUkdFX0hFQUTqsIAg7JeG7J2MKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjcKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIOyYteyFmOydgCDsnbjsnpDrpbwg67Cb7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzEKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuynhO2WiSDspJHsnbgg67OR7ZWpIOyekeyXheydtCDsl4bsirXri4jri6QuIChNRVJHRV9IRUFE6rCAIOyXhuydjCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjQ3Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIuuzke2VqeydhCDrp4jsuZjsp4Ag7JWK7JWY7Iq164uI64ukLiAoTUVSR0VfSEVBRCDsnojsnYwpXG4iCisi67OR7ZWp7ZWY6riwIOyghOyXkCDrs4Dqsr0g7IKs7ZWt7J2EIOy7pOuwi+2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjU0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIuy7pOuwiyDrubzsmKTquLDrpbwg66eI7LmY7KeAIOyViuyVmOyKteuLiOuLpC4gKENPTU1JVF9QSUNLX0hFQUQg7J6I7J2MKVxuIgorIuuzke2Vqe2VmOq4sCDsoITsl5Ag67OA6rK9IOyCrO2VreydhCDsu6TrsIvtlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI1NworbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAi7Luk67CLIOu5vOyYpOq4sOulvCDrp4jsuZjsp4Ag7JWK7JWY7Iq164uI64ukLiAoQ0hFUlJZX1BJQ0tfSEVBRCDsnojsnYwpIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2NgorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICItLXNxdWFzaCDsmLXshZjsnYQgLS1uby1mZiDsmLXshZjqs7wg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzQKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAi7Luk67CL7J2EIOyngOygle2VmOyngCDslYrslZjqs6AgIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFt66W8IOyEpOygle2VmOyngCDslYrslZjsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5MQorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICLruYgg7Zek65Oc66GcIOy7pOuwi+ydhCDtlansuZjquLDripQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTMKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAi7KCV67Cp7Zal7J20IOyVhOuLjCDsu6TrsIvsnYAg67mIIO2XpOuTnOyXkOyEnOuKlCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSDrs5HtlantlaAg7IiYIOyeiOuKlCDtla3rqqnsnbQg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMwMAorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIuu5iCDtl6Trk5zsl5DripQg7KCV7ZmV7Z6IIO2VmOuCmOydmCDsu6TrsIvrp4wg67OR7ZWp7ZWgIOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiVzIOy7pOuwi+yXkCDsi6DrorDtlZjsp4Ag7JWK64qUICjshJzrqoXsnpDqsIAgJXPrnbzqs6Ag7ZWY64qUKSBHUEcg7ISc66qF7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIlcyDsu6TrsIvsl5Ag7J6Y66q765CcICjshJzrqoXsnpDqsIAgJXPrnbzqs6Ag7ZWY64qUKSBHUEcg7ISc66qF7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIiVzIOy7pOuwi+yXkCBHUEcg7ISc66qF7J20IOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiJXMg7Luk67CL7JeQICVz7J2YIOyYrOuwlOuluCBHUEcg7ISc66qF7J20IOyXhuyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQwMgorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIuq0gOqzhCDsl4bripQg7Luk67CLIOuCtOyXreydmCDrs5HtlansnYQg6rGw67aA7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQxMQorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4iCittc2dzdHIgIuydtOuvuCDsl4XrjbDsnbTtirgg7IOB7YOc7J6F64uI64ukLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIuyXheuNsOydtO2KuCDspJEgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICLslYTso7wg6rCE64uo7ZWcIOyduOuNseyKpCDrgrTrtoAg67OR7ZWp7J2EIOyLnOuPhO2VqeuLiOuLpC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICLslYTri5guXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDk0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIuydtOuvuCDsl4XrjbDsnbTtirgg7IOB7YOc7J6F64uI64ukLiDslbztmLghIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUwMAorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAi7KCV67Cp7Zal7J20IOu2iOqwgOuKpe2VmOuvgOuhnCwg7KSR7KeA7ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MjMgYnVpbHRpbi9tZXJnZS5jOjE2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIu2KuOumrOulvCDrs7jrnpgg7JyE7LmY66GcIOuQmOuPjOumveuLiOuLpC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUyNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAi67OR7ZWpIOyghOuetSAlcyDsi5zrj4QuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIuuzke2VqeydhCDsspjrpqztlZwg7KCE65617J20IOyXhuyKteuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIuyghOuetSAlcyjsnLwp66GcIOuzke2VqeydtCDsi6TtjKjtlojsirXri4jri6QuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICLsiJjrj5kg7ZW06rKw7J2YIOykgOu5hOulvCDsnITtlbQgJXMg7KCE65617J2EIOyCrOyaqe2VqeuLiOuLpC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAi7J6Q64+ZIOuzke2VqeydtCDsnpgg7KeE7ZaJ65CY7JeI7Iq164uI64ukLiDsmpTssq3tlZzrjIDroZwg7Luk67CLIOyghOyXkCDspJHsp4Dtlanri4jri6RcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzAKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA87Luk67CLPiA87Luk67CLPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzEKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDzsu6TrsIs+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPOy7pOuwiz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA87Luk67CLPiA87Luk67CLPiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzQKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDzroIjtjbzrn7DsiqQ+IFs87Luk67CLPl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMAorbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAi66qo65OgIOqzvOqxsCDqs7XthrUg7Luk67CL7J2EIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjIyCittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICLtlZjrgpjsnZggbi3rsKntlqUg67OR7ZWp7JeQIOuMgO2VnCDqs7zqsbAg7Luk67CL7J2EIOywvuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjI0Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgIuuLpOuluCDqs7Psl5DshJwg7KCR6re8IOu2iOqwgOuKpe2VnCDrpqzruYTsoIQg66qp66Gd7J2EIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjI2Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICLssqvrsojsp7jqsIAg64uk66W4IOqyg+ydmCDqs7zqsbAg7Luk67CL7J247KeAIOyXrOu2gD8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyOAorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICI866CI7Y2865+w7IqkPuydmCByZWZsb2fsl5DshJwgPOy7pOuwiz7snbQg67aE66as65CcIOychOy5mOulvCDssL7sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjkKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzzsmLXshZg+XSBbLUwgPOydtOumhDE+IFstTCA8b3JpZz4gWy1MIDzsnbTrpoQyPl1dXSA87YyM7J28MT4gPOuzuOuemC0iCisi7YyM7J28PiA87YyM7J28Mj4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjMzCittc2dpZCAic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi6rKw6rO866W8IO2RnOykgCDstpzroKXsnLzroZwg67O064OF64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNAorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJkaWZmMyDquLDrsJgg67OR7ZWp7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIuy2qeuPjOydtCDrsJzsg53tlZjrqbQsIOyasOumrOyqvSDrsoTsoITsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLstqnrj4zsnbQg67Cc7IOd7ZWY66m0LCDsg4HrjIDtjrgg67KE7KCE7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICLstqnrj4zsnbQg67Cc7IOd7ZWY66m0LCDtlansuZwg67KE7KCE7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAi7Lap64+M7J20IOuwnOyDne2VmOuptCwg7J20IO2BrOq4sOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQzCittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICLstqnrj4zsl5Ag64yA7ZW0IOqyveqzoO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICI87YyM7J28MT4vPOuzuOuemC3tjIzsnbw+LzztjIzsnbwyPuyXkCDrjIDtlZwg66CI7J2067iU7J2EIOyEpOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7Ji17IWYOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIiclcycg7Jik67iM7KCd7Yq466W8IO2MjOyLse2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2UuIElnbm9yaW5nICVzLiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZXMuIElnbm9yaW5nICVzLiIKK21zZ3N0clswXSAi67Kg7J207Iqk66W8ICVk6rCcIOuztOuLpCDrp47snbQg7JO4IOyImCDsl4bsirXri4jri6QuICVzIOustOyLnO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjMKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLrkZAg6rCc7J2YIO2XpOuTnCDrs5Htlakg7Jm47JeQ64qUIOyymOumrO2VmOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY5IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgcmVmICclcyciCittc2dzdHIgIiclcycg66CI7Y2865+w7Iqk66W8IOyVjOyVhOuCvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlc1xuIgorbXNnc3RyICIlcyDrs5HtlaksICVzIO2VreuqqeqzvFxuIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY1Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTMKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAi7J6F66Cl7J20IE5VTOuhnCDrgZ3rgqnri4jri6QiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI1Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICLsl4bripQg7Jik67iM7KCd7Yq466W8IO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTUKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgIuyXrOufrOqwnCDtirjrpqwg66eM65Ok6riw66W8IO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjE3Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPOyYteyFmD5dIDzsm5Drs7g+Li4uIDzrjIDsg4E+IgorCisjOiBidWlsdGluL212LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICIlcyDrlJTroInthLDrpqzqsIAg7J24642x7Iqk7JeQIOyeiOqzoCDtlZjsnIQg66qo65OI7J20IOyXhuyKteuLiOuLpD8iCisKKyM6IGJ1aWx0aW4vbXYuYzo4NCBidWlsdGluL3JtLmM6Mjg4Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIuqzhOyGje2VmOugpOuptCAuZ2l0bW9kdWxlc+ydmCDrs4Dqsr0g7IKs7ZWt7J2EIOyKpO2FjOydtOyngOyXkCDrhKPqsbDrgpgg7Iqk7YOc7IucIO2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9tdi5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipz7J20KOqwgCkg7J24642x7Iqk7JeQIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjEyNAorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi64yA7IOB7J20IOydtOuvuCDsnojslrTrj4Qg6rCV7KCc66GcIOyYruq4sOq4sC/snbTrpoQg67CU6r646riw66W8IO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjEyNgorbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICLsmK7quLDquLAv7J2066aEIOuwlOq+uOq4sCDsmKTrpZjrpbwg6rG064SIIOucgeuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi64yA7IOB7J20ICgnJXMnKSDrlJTroInthLDrpqzqsIAg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL212LmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpICclcyco7Jy8KeuhnCDsnbTrpoQg67CU6r646riw7ZWp64uI64ukXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODMKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICLsnpjrqrvrkJwg7JuQ67O4IgorCisjOiBidWlsdGluL212LmM6MTg2Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAi65SU66CJ7YSw66as66W8IOyekOq4sCDsnpDsi6DsnLzroZwg7Jiu6ri4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODkKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICLrlJTroInthLDrpqzrpbwg7YyM7J2866GcIOyYruq4uCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL212LmM6MTk4Cittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAi7JuQ67O4IOuUlOugie2EsOumrOqwgCDruYTslrQg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL212LmM6MjIzCittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAi67KE7KCEIOy7qO2KuOuhpCDspJHsnbQg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL212LmM6MjI2Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICLrjIDsg4HsnbQg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL212LmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIiclcycg642u7Ja07JOw6riwIgorCisjOiBidWlsdGluL212LmM6MjM3Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAi642u7Ja07JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDAKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIuuPmeydvO2VnCDrjIDsg4Hsl5Ag64yA7ZW0IOyXrOufrCDqsJwg7JuQ67O4IgorCisjOiBidWlsdGluL212LmM6MjQyCittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLrjIDsg4Eg65SU66CJ7YSw66as6rCAIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9tdi5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIOybkOuzuD0lcywg64yA7IOBPSVzIgorCisjOiBidWlsdGluL212LmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIuydtOumhCDrsJTqvrjquLAsICclcyfsl5DshJwgJyVzJyjsnLwp66GcXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzYgYnVpbHRpbi9yZW1vdGUuYzo3MTUgYnVpbHRpbi9yZXBhY2suYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiclcyfsnZgg7J2066aEIOuwlOq+uOq4sOqwgCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMzgKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPOyYteyFmD5dIDzsu6TrsIs+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzM5Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzsmLXshZg+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM0MAorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzsmLXshZg+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6Mzk1Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICLsnbTrpoTrp4wg7ZGc7IucIChTSEEtMSDsl4bsnbQpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6Mzk2Cittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICLsu6TrsIvsnYQg7KeA7KCV7ZWgIOuVjCDtg5zqt7jrp4wg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6Mzk4Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIjztjKjthLQ+6rO8IOydvOy5mO2VmOuKlCDroIjtjbzrn7DsiqTrp4wg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDAwCittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICI87Yyo7YS0PuqzvCDsnbzsuZjtlZjripQg66CI7Y2865+w7Iqk66W8IOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwMgorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIuuqqOuToCDroIjtjbzrn7DsiqTsl5DshJwg7KCR6re8IOqwgOuKpe2VnCDrqqjrk6Ag7Luk67CLIOuqqeuhneydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDMKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIu2RnOykgOyeheugpeyXkOyEnCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDQKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgImDsoJXsnZjrkJjsp4Ag7JWK7J2AJyDsnbTrpoQg7ZGc7Iuc66W8IO2XiOyaqe2VqeuLiOuLpCAo6riw67O46rCSKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQxMAorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICLsnoXroKXsnZgg7YOc6re4IOugiO2NvOufsOyKpOulvCDrlLDrnbzqsJHri4jri6QgKOuCtOu2gCDsgqzsmqkpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA864W47Yq4LeugiO2NvOufsOyKpD5dIFtsaXN0IFs87Jik67iM7KCd7Yq4Pl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDzrqZTsi5zsp4A+IHwgLUYgPO2MjCIKKyLsnbw+IHwgKC1jIHwgLUMpIDzsmKTruIzsoJ3tirg+XSBbPOyYpOu4jOygne2KuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPOuFuO2KuC3roIjtjbzrn7DsiqQ+XSBjb3B5IFstZl0gPOybkOuzuC3smKTruIzsoJ3tirg+IDzrjIDsg4Et7Jik67iM7KCd7Yq4PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPOyqveyngC3roIjtjbzrn7DsiqQ+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA866mU7Iuc7KeAPiB8IC1GIDwiCisi7YyM7J28PiB8ICgtYyB8IC1DKSA87Jik67iM7KCd7Yq4Pl0gWzzsmKTruIzsoJ3tirg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA87Kq97KeALeugiO2NvOufsOyKpD5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs87Jik67iM7KCd7Yq4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPOyYpOu4jOygne2KuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPOuFuO2KuC3roIjtjbzrn7DsiqQ+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDzsoITrnrU+XSA864W47Yq4LeugiO2NvOufsOyKpD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA864W47Yq4LeugiO2NvOufsOyKpD5dIHJlbW92ZSBbPOyYpOu4jOygne2KuD4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOuFuO2KuC3roIjtjbzrn7DsiqQ+XSBwcnVuZSBbLW5dIFstdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOuFuO2KuC3roIjtjbzrn7DsiqQ+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBbPOyYpOu4jOygne2KuD5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYWRkIFs87Ji17IWYPl0gWzzsmKTruIzsoJ3tirg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUyCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzzsmLXshZg+XSA87JuQ67O4LeyYpOu4jOygne2KuD4gPOuMgOyDgS3smKTruIzsoJ3tirg+IgorCisjOiBidWlsdGluL25vdGVzLmM6NTMKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPOybkOuzuC3smKTruIzsoJ3tirg+IDzrjIDsg4Et7Jik67iM7KCd7Yq4Pl0uLi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1OAorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPOyYteyFmD5dIFs87Jik67iM7KCd7Yq4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MworbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs87Jik67iM7KCd7Yq4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OAorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs87Jik67iM7KCd7Yq4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MworbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs87Ji17IWYPl0gPOyqveyngC3roIjtjbzrn7DsiqQ+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzQKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzzsmLXshZg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwCittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs87Jik67iM7KCd7Yq4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NQorbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs87Ji17IWYPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MAorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAi64uk7J2MIOyYpOu4jOygne2KuOyXkCDrhbjtirjrpbwg7JOw6rGw64KYIO2OuOynke2VqeuLiOuLpDoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiclcycg7Jik67iM7KCd7Yq47JeQIOuMgO2VtCAnc2hvdyfrpbwg7Iuc7J6R7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICInc2hvdycg7Lac66Cl7J2EIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4ICclcyfsl5Ag64yA7ZW0ICdzaG93J+ulvCDrp4jsuZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6MTk1Cittc2dpZCAicGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICLrhbjtirgg64K07Jqp7J2EIC1tIOuYkOuKlCAtRiDsmLXshZjsnLzroZwg7J6F66Cl7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICLrhbjtirgg7Jik67iM7KCd7Yq466W8IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICLrhbjtirgg64K07Jqp7J2AICVz7JeQIOuCqOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzNCBidWlsdGluL3RhZy5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7J297J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzYgYnVpbHRpbi90YWcuYzo1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Je06rGw64KYIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU1IGJ1aWx0aW4vbm90ZXMuYzozMDYgYnVpbHRpbi9ub3Rlcy5jOjMwOAorIzogYnVpbHRpbi9ub3Rlcy5jOjM3NiBidWlsdGluL25vdGVzLmM6NDMxIGJ1aWx0aW4vbm90ZXMuYzo1MTcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MjIgYnVpbHRpbi9ub3Rlcy5jOjYwMCBidWlsdGluL25vdGVzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Jis67CU66W4IOugiO2NvOufsOyKpOuhnCDslYzslYTrgrTripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIiclcycg7Jik67iM7KCd7Yq4IOydveq4sOyXkCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi67iU66Gt7J20IOyVhOuLjCAnJXMnIOyYpOu4jOygne2KuOyXkCDrjIDtlbQg64W47Yq4IOuNsOydtO2EsOulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICLsnpjrqrvrkJwg7ZiV7Iud7J2YIOyeheugpSDspIQ6ICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICInJXMn7JeQ7IScICclcyco7Jy8KeuhnCDrhbjtirjrpbwg67O17IKs7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyMuCisjOiBidWlsdGluL25vdGVzLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvICVzIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiJXPsl5DshJwg64W47Yq466W8ICVzIO2VmOq4sOulvCDqsbDrtoDtlanri4jri6QgKHJlZnMvbm90ZXMvIOuwluyehCkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNjkgYnVpbHRpbi9ub3Rlcy5jOjQyNCBidWlsdGluL25vdGVzLmM6NTAwCisjOiBidWlsdGluL25vdGVzLmM6NTEyIGJ1aWx0aW4vbm90ZXMuYzo1ODggYnVpbHRpbi9ub3Rlcy5jOjY1NQorIzogYnVpbHRpbi9ub3Rlcy5jOjgwNSBidWlsdGluL25vdGVzLmM6OTUyIGJ1aWx0aW4vbm90ZXMuYzo5NzMKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICLtjIzrnbzrr7jthLDqsIAg64SI66y0IOunjuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4MiBidWlsdGluL25vdGVzLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIiVzIOyYpOu4jOygne2KuOyXkCDrjIDtlbQg64W47Yq46rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDMgYnVpbHRpbi9ub3Rlcy5jOjU2NgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgIuusuOyekOyXtOuhnCDrhbjtirgg64K07JqpIgorCisjOiBidWlsdGluL25vdGVzLmM6NDA2IGJ1aWx0aW4vbm90ZXMuYzo1NjkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAi7YyM7J28IOyViOyXkCDrhbjtirgg64K07JqpIgorCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIuyngOygle2VnCDrhbjtirgg7Jik67iM7KCd7Yq466W8IOyerOyCrOyaqe2VmOqzoCDtjrjsp5Htlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAi7KeA7KCV7ZWcIOuFuO2KuCDsmKTruIzsoJ3tirjrpbwg7J6s7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE1IGJ1aWx0aW4vbm90ZXMuYzo1NzgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgIuu5iCDrhbjtirgg7KCA7J6l7J2EIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxNiBidWlsdGluL25vdGVzLmM6NDg3Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAi6riw7KG0IOuFuO2KuOulvCDrsJTqv4nri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyLrhbjtirjrpbwg7LaU6rCA7ZWgIOyImCDsl4bsirXri4jri6QuICVzIOyYpOu4jOygne2KuOyXkCDrjIDtlZwg6riw7KG0IOuFuO2KuOqwgCDsnojsirXri4jri6QuIOq4sOyhtCDrhbjtirgiCisi66W8IOuNruyWtOyTsOugpOuptCAnLWYnIOyYteyFmOydhCDsgqzsmqntlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NTYgYnVpbHRpbi9ub3Rlcy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiVzIOyYpOu4jOygne2KuOyXkCDrjIDtlZwg6riw7KG0IOuFuO2KuOulvCDrja7slrTslIHri4jri6RcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ2NyBidWlsdGluL25vdGVzLmM6NjI3IGJ1aWx0aW4vbm90ZXMuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiVzIOyYpOu4jOygne2KuOyXkCDrjIDtlZwg64W47Yq466W8IOygnOqxsO2VqeuLiOuLpFxuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDg4Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7Jik67iM7KCd7Yq466W8IOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5MAorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICI866qF66C5PuyXkCDrjIDtlZwg64uk7Iuc7JOw6riwIOyEpOygleydhCDsnb3slrTrk6TsnoXri4jri6QgKC0tc3RkaW4g7Ji17IWYIO2PrO2VqCkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDgKK21zZ2lkICJ0b28gZmV3IHBhcmFtZXRlcnMiCittc2dzdHIgIu2MjOudvOuvuO2EsOqwgCDrhIjrrLQg7KCB7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIuuFuO2KuOulvCDrs7XsgqztlaAg7IiYIOyXhuyKteuLiOuLpC4gJXMg7Jik67iM7KCd7Yq47JeQIOuMgO2VnCDquLDsobQg64W47Yq46rCAIOyeiOyKteuLiOuLpC4g6riw7KG0IOuFuO2KuCIKKyLrpbwg642u7Ja07JOw66Ck66m0ICctZicg7Ji17IWY7J2EIOyCrOyaqe2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAi7JuQ67O4ICVzIOyYpOu4jOygne2KuOyXkCDrjIDtlZwg64W47Yq46rCAIOyXhuyKteuLiOuLpC4g67O17IKs7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL25vdGVzLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyItbS8tRi8tYy8tQyDsmLXshZjsnYAgJ2VkaXQnIO2VmOychCDrqoXroLnsl5Ag64yA7ZW0IOyCrOyaqeydhCDqtoztlZjsp4Ag7JWK7Iq164uI64ukLlxuIgorIuuMgOyLoOyXkCAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycg66qF66C57J2EIOyCrOyaqe2VmOyLreyLnOyYpC5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY4OAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgIk5PVEVTX01FUkdFX1BBUlRJQUwg66CI7Y2865+w7IqkIOyCreygnOyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIk5PVEVTX01FUkdFX1JFRiDroIjtjbzrn7DsiqQg7IKt7KCc7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY5MgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgIidnaXQgbm90ZXMgbWVyZ2UnIOyekeyXhe2KuOumrCDsoJzqsbDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NzEyCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgIk5PVEVTX01FUkdFX1BBUlRJQUwg66CI7Y2865+w7IqkIOydveq4sOyXkCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MTQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgZnJvbSBOT1RFU19NRVJHRV9QQVJUSUFMLiIKK21zZ3N0ciAiTk9URVNfTUVSR0VfUEFSVElBTOyXkOyEnCDsu6TrsIvsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzE2Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJOT1RFU19NRVJHRV9QQVJUSUFM7JeQ7IScIOy7pOuwi+ydhCDtjIzsi7HtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIk5PVEVTX01FUkdFX1JFRiDslYzslYTrgrTquLDsl5Ag7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6NzMyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICLrhbjtirgg67OR7ZWp7J2EIOuniOy5mOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub3RlcyBtZXJnZSBzdHJhdGVneSAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg64W47Yq4IOuzke2VqSDsoITrnrUgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIuydvOuwmCDsmLXshZgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICLrs5Htlakg7Ji17IWYIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzc4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorIuyjvOyWtOynhCDsoITrnrXsnYQg7IKs7Jqp7ZW0IOuFuO2KuCDstqnrj4zsnYQg7ZW06rKw7ZWp64uI64ukIChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzgwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDrhbjtirgg7Luk67CLIgorCisjOiBidWlsdGluL25vdGVzLmM6NzgyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDrhbjtirjrpbwg7Luk67CL7ZW0IOuFuO2KuCDrs5HtlansnYQg66eI7Lmp64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAi64W47Yq4IOuzke2VqSDtlbTqsrAg7KSR7KeAIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg2Cittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgIuuFuO2KuCDrs5HtlansnYQg7KSR7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk3Cittc2dpZCAiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5IgorbXNnc3RyICItLWNvbW1pdCwgLS1hYm9ydCwgLXMvLS1zdHJhdGVneSDsmLXshZjsnYQg7ISe7Ja0IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6ODAyCittc2dpZCAibXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIgorbXNnc3RyICLrs5HtlantlaAg64W47Yq4IOugiO2NvOufsOyKpOulvCDsp4DsoJXtlbTslbwg7ZWp64uI64ukIgorCisjOiBidWlsdGluL25vdGVzLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOyghOuetSgtcy8tLXN0cmF0ZWd5KTogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgIiVzIOychOy5mOuhnCDrhbjtirgg67OR7ZWp7J20IOydtOuvuCAlc+yXkOyEnCDsp4TtlonspJHsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0b3JlIGxpbmsgdG8gY3VycmVudCBub3RlcyByZWYgKCVzKSIKK21zZ3N0ciAi7ZiE7J6sIOuFuO2KuCDroIjtjbzrn7DsiqTsnZggKCVzKSDrp4Htgazrpbwg7KCA7J6l7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIuyekOuPmSDrhbjtirgg67OR7ZWp7J20IOyLpO2MqO2WiOyKteuLiOuLpC4gJXMg7JWI7J2YIOy2qeuPjOydhCDrsJTroZzsnqHqs6Ag6rKw6rO866W8ICdnaXQgbm90ZXMgIgorIm1lcmdlIC0tY29tbWl0JyDrqoXroLnsnLzroZwg7Luk67CL7ZWY7Iut7Iuc7JikLiDrmJDripQgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyDrqoXroLnsnLwiCisi66GcIOuzke2VqeydhCDspJHsp4DtlZjsi63si5zsmKQuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIiVzIOyYpOu4jOygne2KuOyXkCDrhbjtirjqsIAg7JeG7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgIuyXhuuKlCDrhbjtirjrpbwg7KCc6rGw7ZWY66Ck64qUIOyLnOuPhOulvCDsmKTrpZjqsIAg7JWE64uMIOqyg+ycvOuhnCDst6jquIntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi7ZGc7KSAIOyeheugpeyXkOyEnCDsmKTruIzsoJ3tirgg7J2066aE7J2EIOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk0MyBidWlsdGluL3BydW5lLmM6MTA3IGJ1aWx0aW4vd29ya3RyZWUuYzoxNTEKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgIuygnOqxsO2VmOyngCDslYrqs6AsIOuztOyXrOyjvOq4sOunjCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NDQKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICLsnpjrnbzrgrgg64W47Yq466W8IOyVjOumveuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk4NgorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAi64W47Yq4LeugiO2NvOufsOyKpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk4NworbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICI864W47Yq4LeugiO2NvOufsOyKpD7sl5DshJwg64W47Yq466W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7ZWY7JyEIOuqheuguTogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDgKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzzsmLXshZg+Li4uXSBbPCA866CI7Y2865+w7Iqk66qp66GdPiB8IDwgPOyYpOu4jOygne2KuOuqqeuhnT5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQ5Cittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs87Ji17IWYPi4uLl0gPOuyoOydtOyKpOydtOumhD4gWzwgPOugiO2NvOufsOyKpOuqqeuhnT4gfCA8IDzsmKTruIzsoJ3tirjrqqnroZ0iCisiPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiZGVmbGF0ZSDsmKTrpZggKCVkKSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MTAKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICIiCisi67Cw7Yq466e1IOyTsOq4sOulvCDtlZjsp4Ag7JWK7Iq164uI64ukLiDrrLbsnYzsnYAgcGFjay5wYWNrU2l6ZUxpbWl0IOqwkuyXkCDrlLDrnbwg7Kq86rCc7KeR64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgyMworbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IOyTsOuKlCDspJEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTEwNgorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICLrrLbsnYzsl5Ag65Ok7Ja07J6I7KeAIOyViuydgCDsmKTruIzsoJ3tirjqsIAg7J6I7Jy866+A66GcLCDruYTtirjrp7Ug7JOw6riw66W8IO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTc2NQorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuCDqsJzsiJgg7IS464qUIOykkSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAiJXPsnZgg7YGs6riw66W8IOyVjOyVhOuCvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdCBoZWFkZXIgb2YgJXMiCittc2dzdHIgIiVz7J2YIOyYpOu4jOygne2KuCDtl6TrjZTrpbwg7YyM7Iux7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU2NAorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuCDslZXstpXtlZjripQg7KSRIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MzUKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAtLW1pc3NpbmciCittc2dzdHIgIi0tbWlzc2luZ+ydmCDqsJLsnbQg7Jis67CU66W07KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIuyngOybkO2VmOyngCDslYrripQg7J24642x7IqkIOuyhOyghCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIuyemOuqu+uQnCDsnbjrjbHsiqQg67KE7KCEICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEwMgorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLsp4TtlonrpaDsnYQg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTA0Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi7KeE7ZaJ66Wg7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTA2Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgIuyYpOu4jOygne2KuCDsk7DquLAg64uo6rOE7JeQ7IScIOynhO2WieuloOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEwOQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAi7KeE7ZaJ66Wg7J20IO2RnOyLnOuQoCDrlYwgLS1hbGwtcHJvZ3Jlc3PsmYAg67mE7Iq37ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTAKK21zZ2lkICJ2ZXJzaW9uWyxvZmZzZXRdIgorbXNnc3RyICLrsoTsoIRbLOyYpO2UhOyFi10iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExMQorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIuyngOygle2VnCDrsoTsoITsnZgg7J24642x7IqkIO2YleyLneyXkCDrlLDrnbwg66y27J2MIOyduOuNseyKpCDtjIzsnbzsnYQg7JSB64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICLstpzroKUg66y27J2MIO2MjOydvOydmCDstZzrjIAg7YGs6riwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTYKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgIuuztOyhsCDsmKTruIzsoJ3tirgg7KCA7J6l7IaM7JeQ7IScIOu5jOugpOyYqCDsmKTruIzsoJ3tirjrpbwg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTgKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIuustuydjCDsmKTruIzsoJ3tirjrpbwg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjAKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICLrrLbsnYwg7JyI64+E7Jqw66W8IOyYpOu4jOygne2KuCDri6jsnITroZwg7KCc7ZWc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjIKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICLrrLbsnYwg7JyI64+E7Jqw66W8IOyYpOu4jOygne2KuCDri6jsnITsl5Ag7LaU6rCA66GcIOuplOuqqOumrCDri6jsnITroZwg7KCc7ZWc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjQKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAi6rKw6rO866y8IOustuydjOyXkOyEnCDtl4jsmqnrkJjripQg7LWc64yAIOq4uOydtOydmCDrjbjtg4Ag7LK07J24IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjYKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgIuq4sOyhtCDrjbjtg4Drpbwg7J6s7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjgKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICLquLDsobQg7Jik67iM7KCd7Yq466W8IOyerOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTMwCittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJPRlNfREVMVEEg7Jik67iM7KCd7Yq466W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTMyCittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAi7LWc7IOB7J2YIOuNuO2DgCDsnbzsuZjrpbwg6rKA7IOJ7ZWY64qU642wIOyKpOugiOuTnOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzNAorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgIuu5iCDrrLbsnYwg7Lac66Cl7J2EIOunjOuTpOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzNgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg66as67mE7KCEIOyduOyekOulvCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEzOAorbXNnaWQgImxpbWl0IHRoZSBvYmplY3RzIHRvIHRob3NlIHRoYXQgYXJlIG5vdCB5ZXQgcGFja2VkIgorbXNnc3RyICLrrLbsp4Ag7JWK64qUIOyYpOu4jOygne2KuCDsiJjrpbwg7KCc7ZWc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDEKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAi66qo65OgIOugiO2NvOufsOyKpOyXkOyEnCDsoJHqt7wg6rCA64ql7ZWcIOyYpOu4jOygne2KuOulvCDtj6ztlajtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0NAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAicmVmbG9nIO2VreuqqeyXkOyEnCDroIjtjbzrn7DsiqTtlaAg7IiYIOyeiOuKlCDsmKTruIzsoJ3tirjrpbwg7Y+s7ZWo7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTsl5DshJw8IOugiO2NvOufsOyKpO2VmOuKlCDsmKTruIzsoJ3tirjrpbwg7Y+s7ZWo7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTAKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgIuustuydjOydhCDtkZzspIAg7Lac66Cl7Jy866GcIOy2nOugpe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTUyCittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICLrrLbsnYzsl5Ag65Ok7Ja06rCIIOyYpOu4jOygne2KuOulvCDroIjtjbzrn7DsiqTtlZjripQg7YOc6re4IOyYpOu4jOygne2KuOulvCDtj6ztlajtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE1NAorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi7KCR6re8IOu2iOqwgOuKpSDsmKTruIzsoJ3tirjrpbwg67O07KG07ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTYKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIuuKkOyKqO2VnCDsoJHqt7wg67aI6rCA64qlIOyYpOu4jOygne2KuOulvCDrrLbsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE1OAorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICI87Iuc6rCBPuuztOuLpCDsg4jroZzsmrQg7KCR6re8IOu2iOqwgOuKpSDsmKTruIzsoJ3tirjsnZgg66y27J2M7J2EIO2SieuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTYxCittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgIuyWh+ydgCDrrLbsnYzsnYQg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNjMKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAi7JaV7J2AIOqwgOyguOyYpOq4sOyXkCDsoIHtlantlZwg66y27J2M7J2EIOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTY1Cittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAi7ZW064u57ZWY64qUIC5rZWVwIO2MjOydvOydtCDsnojripQg66y27J2M7J2EIOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTY3Cittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAi7J20IOustuydjOydhCDrrLTsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE2OQorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIuustuydjCDslZXstpUg64uo6rOEIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNzEKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAi6re4656Y7ZSE7Yq466GcIOuwnOyDne2VnCDsu6TrsIvsnYQg7Iio6riw7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTczCittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLqsIDriqXtlZjrqbQg67mE7Yq466e1IOyduOuNseyKpOulvCDsgqzsmqntlbQg7Jik67iM7KCd7Yq4IOyEuOq4sCDsho3rj4Trpbwg64aS7J6F64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNzUKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICLrrLbsnYwg7J24642x7Iqk7JmAIOqwmeydtCDruYTtirjrp7Ug7J24642x7Iqk66W8IOyUgeuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTc4Cittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi7JeG64qUIOyYpOu4jOygne2KuOulvCDsspjrpqztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE4MQorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICLtlITrnbzrr7jshJwg66y27J2MIO2MjOydvOyXkCDsmKTruIzsoJ3tirjrpbwg66y27KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICLrjbjtg4Ag7LK07J24IOq5iuydtCDqsJLsnbQgKCVkKSDrhIjrrLQg7YG964uI64ukLiAlZCDqsJLsnLzroZwg7KGw7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgInBhY2suZGVsdGFDYWNoZUxpbWl0IOqwkuydtCDrhIjrrLQg7YG964uI64ukLiAlZCDqsJLsnLzroZwg7KGw7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMzgKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICLsmKTruIzsoJ3tirgg64KY7Je07ZWY64qUIOykkSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo3Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE1Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICLrqqjrkZAg66y27Iq164uI64ukIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE2Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIuuKkOyKqO2VnCDroIjtjbzrn7DsiqTrpbwg7J6Y652864OF64uI64ukICjquLDrs7jqsJIpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjgKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MQorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICLspJHrs7XrkJwg7Jik67iM7KCd7Yq4IOygnOqxsCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjExCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDzsi5zqsIE+XSBbLS1dIFs87Zek65OcPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDgKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgIuyemOudvOuCuCDsmKTruIzsoJ3tirjrpbwg7JWM66a964uI64ukIgorCisjOiBidWlsdGluL3BydW5lLmM6MTExCittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIjzsi5zqsIE+67O064ukIOyYpOuemCDrkJwg7Jik67iM7KCd7Yq466W8IOunjOujjO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjExMworbXNnaWQgImxpbWl0IHRyYXZlcnNhbCB0byBvYmplY3RzIG91dHNpZGUgcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICLtlITrnbzrr7jshJwg66y27J2M7YyM7J28IOuwluyXkOyEnCDsmKTruIzsoJ3tirgg7LC+7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyNworbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAicHJlY2lvdXMtb2JqZWN0cyDsoIDsnqXshozsl5DshJwg7J6Y652864K8IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU5IGJ1aWx0aW4vcHVsbC5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiJXPsnZgg6rCS7J20IOyYrOuwlOultOyngCDslYrsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4MQorbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPOyYteyFmD5dIFs87KCA7J6l7IaMPiBbPOugiO2NvOufsOyKpOuqheyEuD4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTMyCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIu2VmOychCDrqqjrk4gg7J6s6reA7KCB7Jy866GcIOqwgOyguOyYpOq4sCDrsKnsi53snYQg7KGw7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL3B1bGwuYzoxMzYKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAi67OR7ZWpIOq0gOugqCDsmLXshZgiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjEzOQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAi67OA6rK9IOyCrO2VreydhCDsoIHsmqntlaAg65WMIOuzke2Vqe2VmOuKlCDrjIDsi6Ag66as67Kg7J207Iqk7ZWp64uI64ukIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjYgYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjIzIGJ1aWx0aW4vcmV2ZXJ0LmM6MTIxCittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIgorbXNnc3RyICLsoJXrsKntlqUg7KeE7ZaJ7J2EIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTc1Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgIuumrOuyoOydtOyKpCDsoITqs7wg7ZuE7JeQIHN0YXNoIOuwjyBzdGFzaCBwb3DsnYQg7J6Q64+Z7Jy866GcIO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTkxCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICLqsIDsoLjsmKTquLAg6rSA66CoIOyYteyFmCIKKworIzogYnVpbHRpbi9wdWxsLmM6MjA5Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLrs5HroKzsoIHsnLzroZwg7ZKA7J2EIOyLpO2Wie2VoCDtlZjsnITrqqjrk4gg6rCc7IiYIgorCisjOiBidWlsdGluL3B1bGwuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgInB1bGwuZmbsl5Ag64yA7ZW0IOyemOuqu+uQnCDqsJI6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjAKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICLqsIDsoLjsmKgg66CI7Y2865+w7IqkIOykkeyXkCDrpqzrsqDsnbTsiqTtlaAg64yA7IOBIO2bhOuztOqwgCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MjIKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAi6rCA7KC47JioIOugiO2NvOufsOyKpCDspJHsl5Ag67OR7ZWp7ZWgIOuMgOyDgSDtm4Trs7TqsIAg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDIzCittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIuuztO2GtSDsnbTrn7Ag6rK97Jqw64qUIOumrOuqqO2KuCDsqr3sl5DripQg7JeG64qUIOyZgOydvOuTnOy5tOuTnCDroIjtjbzrn7DsiqTrqoXshLjqsIBcbiIKKyLso7zslrTsoYzsnYQg65WMIOydvOyWtOuCqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisi66as66qo7Yq4ICclcyfsl5DshJwg7ZKA7J2EIOyalOyyre2WiOyngOunjCwg67iM656c7LmY66W8IOyngOygle2VmOyngCDslYrslZjsirXri4jri6QuXG4iCisi7J20IOumrOuqqO2KuOuKlCDtmITsnqwg67iM656c7LmY7JeQIOuMgO2VtCDquLDrs7jsnLzroZwg7ISk7KCV65CcIOumrOuqqO2KuOqwgFxuIgorIuyVhOuLiOq4sCDrlYzrrLjsl5AsIOuqheugue2WieyXkOyEnCDruIzrnpzsuZjrpbwg7KeA7KCV7ZW07JW8IO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzMSBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAi7ZiE7J6sIOyWtOuWpCDruIzrnpzsuZgg7JyE7JeQ64+EIOyeiOyngCDslYrsirXri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzMgYnVpbHRpbi9wdWxsLmM6NDQ4IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzkKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuIgorbXNnc3RyICLslrTrlqQg67iM656c7LmY66W8IOuMgOyDgeycvOuhnCDrpqzrsqDsnbTsiqTtlaDsp4Ag7KeA7KCV7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM1IGJ1aWx0aW4vcHVsbC5jOjQ1MCBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICLslrTrlqQg67iM656c7LmY66W8IOuMgOyDgeycvOuhnCDrs5HtlantlaDsp4Ag7KeA7KCV7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM2IGJ1aWx0aW4vcHVsbC5jOjQ1MQorbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIuyekOyEuO2VnCDsoJXrs7TripQgZ2l0LXB1bGwoMSkg7Y6Y7J207KeA66W8IOywuOqzoO2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOCBidWlsdGluL3B1bGwuYzo0NDQgYnVpbHRpbi9wdWxsLmM6NDUzCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjzrpqzrqqjtirg+IgorCisjOiBidWlsdGluL3B1bGwuYzo0MzggYnVpbHRpbi9wdWxsLmM6NDUzIGJ1aWx0aW4vcHVsbC5jOjQ1OCBnaXQtcmViYXNlLnNoOjUyMworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI867iM656c7LmYPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ2IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzUKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mOyXkCDstpTsoIEg7KCV67O06rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAi7J20IOu4jOuenOy5mOyXkCDrjIDtlZwg7LaU7KCBIOygleuztOulvCDshKTsoJXtlZjroKTrqbQg64uk7J2M6rO8IOqwmeydtCDtlaAg7IiYIOyeiOyKteuLiOuLpDoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIuyEpOygleyXkOyEnCDrpqzrqqjtirjsnZggJyVzJyDroIjtjbzrn7DsiqTsmYAg67OR7ZWp7ZWY64+E66GdIOyngOygle2WiOyngOunjCxcbiIKKyLqt7jrn7Ag66CI7Y2865+w7Iqk66W8IOqwgOyguOyYpOyngCDslYrslZjsirXri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo4MjYKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgIuumrOuyoOydtOyKpOyXkCDrjIDtlbQgLS12ZXJpZnktc2lnbmF0dXJlcyDsmLXshZjsnYQg66y07Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3B1bGwuYzo4NzQKK21zZ2lkICItLVtuby1dYXV0b3N0YXNoIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UuIgorbXNnc3RyICItLVtuby1dYXV0b3N0YXNoIOyYteyFmOydgCAtLXJlYmFzZSDsmLXshZjqs7wg6rCZ7J20IOyNqOyVvCDtlanri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo4ODIKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICLrp4zrk6TslrTsp4Dsp4Ag7JWK7J2AIOu4jOuenOy5mOulvCDsnbjrjbHsiqTsl5Ag7LaU6rCA65CcIOuzgOqyvSDsgqztla3snLzroZwg7JeF642w7J207Yq47ZWp64uI64ukLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODg1Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAi66as67Kg7J207Iqk66GcIO2SgO2VmOq4sCIKKworIzogYnVpbHRpbi9wdWxsLmM6ODg2Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAi7Luk67CL7ZWY6rGw64KYIOyKpO2DnOyLnOyXkCDrhKPsnLzsi63si5zsmKQuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisi7ZiE7J6sIOu4jOuenOy5mCDtl6Trk5zrpbwg7JeF642w7J207Yq47ZaI7Iq164uI64ukLlxuIgorIuyekeyXhSDtj7TrjZTrpbwgJXMg7Luk67CL7JeQ7IScIOygleuwqe2WpVxuIgorIuynhO2Wie2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyLsnpHsl4Ug7Y+0642U66W8IOygleuwqe2WpSDsp4TtlontlaAg7IiYIOyXhuyKteuLiOuLpC5cbiIKKyLri6TsnYwg66qF66C5IOy2nOugpeyXkOyEnCDspJHsmpTtlZwg7IKs7ZWt7J2EIOyggOyepe2VnCDri6TsnYwsXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIuuLpOydjOydhCDsi6TtlontlZjrqbRcbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyLrs7XqtazrkKnri4jri6QuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzEKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAi7Jes65+sIOu4jOuenOy5mOulvCDruYgg7Zek65Oc66GcIOuzke2Vqe2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTM1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAi7Jes65+sIOu4jOuenOy5mOuhnCDrpqzrsqDsnbTsiqTtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk0MgorbXNnaWQgImNhbm5vdCByZWJhc2Ugd2l0aCBsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIgorbXNnc3RyICLroZzsu6zsl5DshJwg6riw66Gd7ZWcIO2VmOychCDrqqjrk4gg7IiY7KCVIOyCrO2VreydhCDsnbTsmqntlbQg66as67Kg7J207Iqk7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs87Ji17IWYPl0gWzzsoIDsnqXshow+IFs866CI7Y2865+w7Iqk66qF7IS4Pi4uLl1dIgorCisjOiBidWlsdGluL3B1c2guYzoxMTEKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgIjztg5zqt7g+IOyXhuydtCDtg5zqt7gg7KSE7J6EIgorCisjOiBidWlsdGluL3B1c2guYzoxMjEKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUg7Ji17IWY7J2AIOydvOuwmCDrjIDsg4Eg66CI7Y2865+w7IqkIOydtOumhOunjCDrsJvsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2NQorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyLslrTripAg7ZWcIOyqvSDsmLXshZjrp4wg6rOE7IaNIOyEoO2Dne2VmOugpOuptCwgJ2dpdCBoZWxwIGNvbmZpZyfsl5DshJwgcHVzaC5kZWZhdWx066W8IOywuOqzoCIKKyLtlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisi7ZiE7J6sIOu4jOuenOy5mOydmCDsl4XsiqTtirjrprwg67iM656c7LmY6rCAIO2YhOyerCDruIzrnpzsuZjsnZgg7J2066aE6rO8XG4iCisi6rCZ7KeAIOyViuyKteuLiOuLpC4g66as66qo7Yq47J2YIOyXheyKpO2KuOumvCDruIzrnpzsuZjroZwg7ZG47Iuc7ZWY66Ck66m0XG4iCisi64uk7J2M6rO8IOqwmeydtCDtlZjsi63si5zsmKQuXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyLrpqzrqqjtirjsnZgg6rCZ7J2AIOydtOumhOycvOuhnCDtkbjsi5ztlZjroKTrqbQg64uk7J2M6rO8IOqwmeydtCDtlZjsi63si5zsmKQuXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzICVzXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyLtmITsnqwg7Ja065akIOu4jOuenOy5mCDsnITsl5Drj4Qg7J6I7KeAIOyViuyKteuLiOuLpC5cbiIKKyLsp4DquIgg7ZiE7J6sIChIRUFEIOu2hOumrCkg7IOB7YOc6rmM7KeA7J2YIOy7pOuwiyDrgrTsl63snYQg7ZG47Iuc7ZWY66Ck66m0XG4iCisi64uk7J2M6rO8IOqwmeydtCDtlZjsi63si5zsmKQuXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisi7ZiE7J6sIOu4jOuenOy5mCAlc+yXkCDsl4XsiqTtirjrprwg67iM656c7LmY6rCAIOyXhuyKteuLiOuLpC5cbiIKKyLtmITsnqwg67iM656c7LmY66W8IO2RuOyLnO2VmOqzoCDtlbTri7kg66as66qo7Yq466W8IOyXheyKpO2KuOumvOycvOuhnCDsp4DsoJXtlZjroKTrqbRcbiIKKyLri6TsnYzqs7wg6rCZ7J20IO2VmOyLreyLnOyYpC5cbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICLtmITsnqwg67iM656c7LmYICAlc+yXkCDsl6zrn6wg7JeF7Iqk7Yq466a8IOu4jOuenOy5mOqwgCDsnojsirXri4jri6QuIO2RuOyLnOulvCDqsbDsoIjtlanri4jri6QuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorIiclcycg66as66qo7Yq466GcIO2RuOyLnO2VmOuKlCDspJHsnoXri4jri6QuIO2VmOyngOunjCDsnbQg66as66qo7Yq464qUIO2YhOyerFxuIgorIiclcycg67iM656c7LmY7J2YIOyXheyKpO2KuOumvOydtCDslYTri5nri4jri6QuIOyWtOuWpCDrpqzrqqjtirgg67iM656c7LmY7JeQIOustOyXh+ydhFxuIgorIu2RuOyLnO2VoOyngCDshKTsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjY3Cittc2dpZCAiIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgIiIKKyLtkbjsi5ztlaAg66CI7Y2865+w7Iqk66qF7IS466W8IOyngOygle2VmOyngCDslYrslZjqs6AsIHB1c2guZGVmYXVsdCDqsJLsnbQgJ25vdGhpbmcn7J6F64uI64ukLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc0Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi7ZiE7J6sIOu4jOuenOy5mOydmCDrgZ3snbQg66as66qo7Yq4IOu4jOuenOy5mOuztOuLpCDrkqTsl5Ag7J6I7Jy866+A66GcIOyXheuNsOydtO2KuOqwgFxuIgorIuqxsOu2gOuQmOyXiOyKteuLiOuLpC4g7ZG47Iuc7ZWY6riwIOyghOyXkCAoJ2dpdCBwdWxsIC4uLicg65OxIOuqheugueycvOuhnCkg66as66qo7Yq4XG4iCisi67OA6rK9IOyCrO2VreydhCDtj6ztlajtlZjsi63si5zsmKQuXG4iCisi7J6Q7IS47ZWcIOygleuztOuKlCAnZ2l0IHB1c2ggLS1oZWxwJ+ydmCBcIk5vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycg67aA67aE7J2EXG4iCisi7LC46rOg7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgwCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi7ZiE7J6sIOu4jOuenOy5mOydmCDrgZ3snbQg66as66qo7Yq4IOu4jOuenOy5mOuztOuLpCDrkqTsl5Ag7J6I7Jy866+A66GcIOyXheuNsOydtO2KuOqwgFxuIgorIuqxsOu2gOuQmOyXiOyKteuLiOuLpC4g7J20IOu4jOuenOy5mOulvCDssrTtgazslYTsm4PtlZjqs6Ag7ZG47Iuc7ZWY6riwIOyghOyXkFxuIgorIignZ2l0IHB1bGwgLi4uJyDrk7Eg66qF66C57Jy866GcKSDrpqzrqqjtirgg67OA6rK9IOyCrO2VreydhCDtj6ztlajtlZjsi63si5zsmKQuXG4iCisi7J6Q7IS47ZWcIOygleuztOuKlCAnZ2l0IHB1c2ggLS1oZWxwJ+ydmCBcIk5vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycg67aA67aE7J2EXG4iCisi7LC46rOg7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg2Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuumrOuqqO2KuOyXkCDroZzsu6zsl5Ag7JeG64qUIOyCrO2VreydtCDrk6TslrQg7J6I7Jy866+A66GcIOyXheuNsOydtO2KuOqwgFxuIgorIuqxsOu2gOuQmOyXiOyKteuLiOuLpC4g7J20IOyDge2ZqeydgCDrs7TthrUg65iQIOuLpOuluCDsoIDsnqXshozsl5DshJwg6rCZ7J2AXG4iCisi7KCA7J6l7IaM66GcIO2RuOyLnO2VoCDrlYwg67Cc7IOd7ZWp64uI64ukLiAg7ZG47Iuc7ZWY6riwIOyghOyXkFxuIgorIignZ2l0IHB1bGwgLi4uJyDrk7Eg66qF66C57Jy866GcKSDrpqzrqqjtirgg67OA6rK9IOyCrO2VreydhCDrqLzsoIBcbiIKKyLtj6ztlajtlbTslbwg7ZWp64uI64ukLlxuIgorIuyekOyEuO2VnCDsoJXrs7TripQgJ2dpdCBwdXNoIC0taGVscCfsnZggXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIOu2gOu2hOydhFxuIgorIuywuOqzoO2VmOyLreyLnOyYpC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MworbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIuumrOuqqO2KuOyXkCDtg5zqt7jqsIAg7J2066+4IOyeiOq4sCDrlYzrrLjsl5Ag7JeF642w7J207Yq46rCAIOqxsOu2gOuQmOyXiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NgorbXNnaWQgIiIKKyJZb3UgY2Fubm90IHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBwb2ludHMgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJvciB1cGRhdGUgYSByZW1vdGUgcmVmIHRvIG1ha2UgaXQgcG9pbnQgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJ3aXRob3V0IHVzaW5nIHRoZSAnLS1mb3JjZScgb3B0aW9uLlxuIgorbXNnc3RyICIiCisiJy0tZm9yY2UnIOyYteyFmOydtCDsl4bsnbQg7Luk67CL7J20IOyVhOuLjCDsmKTruIzsoJ3tirjrpbwg6rCA66as7YKk64qUIOumrOuqqO2KuFxuIgorIuugiO2NvOufsOyKpOulvCDsl4XrjbDsnbTtirjtlZjqsbDrgpgsIOy7pOuwi+ydtCDslYTri4wg7Jik67iM7KCd7Yq466W8IOqwgOumrO2CpOuPhOuhnVxuIgorIuyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukLlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICLri6TsnYzsl5Ag7ZG47IucOiAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIuugiO2NvOufsOyKpOulvCAnJXMn7JeQIO2RuOyLnO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwg7KCA7J6l7IaMICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NgorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisi7ZG47IucIOuMgOyDgeydhCDshKTsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLlxuIgorIuuqheugue2WieyXkOyEnCBVUkzsnYQg7KeA7KCV7ZWY6rGw64KYIOuLpOydjOydhCDsgqzsmqntlbQg66as66qo7Yq4IOyggOyepeyGjOulvCDshKTsoJXtlZjsi63si5zsmKRcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPOydtOumhD4gPFVSTD5cbiIKKyJcbiIKKyLqt7jrpqzqs6Ag7J20IOumrOuqqO2KuCDsnbTrpoTsnYQg7IKs7Jqp7ZW0IO2RuOyLnO2VmOyLreyLnOyYpFxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUxCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAi7KCA7J6l7IaMIgorCisjOiBidWlsdGluL3B1c2guYzo1NTIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICLrqqjrk6Ag66CI7Y2865+w7IqkIO2RuOyLnO2VmOq4sCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICLrqqjrk6Ag66CI7Y2865+w7IqkIOuvuOufrCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU1Cittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgIuugiO2NvOufsOyKpCDsgq3soJwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NgorbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAi7YOc6re4IO2RuOyLnO2VmOq4sCAoLS1hbGwg65iQ64qUIC0tbWlycm9yIOyYteyFmOqzvCDqsJnsnbQg7JO4IOyImCDsl4bsnYwpIgorCisjOiBidWlsdGluL3B1c2guYzo1NTkgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjcKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICLqsJXsoJzroZwg7JeF642w7J207Yq4IgorCisjOiBidWlsdGluL3B1c2guYzo1NjEgYnVpbHRpbi9zZW5kLXBhY2suYzoxODEKK21zZ2lkICJyZWZuYW1lPjo8ZXhwZWN0IgorbXNnc3RyICLroIjtjbzrn7DsiqTsnbTrpoQ+OjzsmIjsg4EiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MiBidWlsdGluL3NlbmQtcGFjay5jOjE4MgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICLroIjtjbzrn7DsiqTsnZgg6rO86rGwIOqwkuydtCDsnbQg6rCS7J207Ja07JW8IO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY1Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLsnqzqt4DsoIEg7ZWY7JyEIOuqqOuTiCDtkbjsi5wg67Cp7Iud7J2EIOyEpOygle2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAi7JaH7J2AIOustuydjOydhCDsgqzsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2OCBidWlsdGluL3B1c2guYzo1NjkgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgInJlY2VpdmUgcGFjayDtlITroZzqt7jrnqgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MAorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICJnaXQgcHVsbC9zdGF0dXPsl5Ag64yA7ZWcIOyXheyKpO2KuOumvOydhCDshKTsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MworbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICLroZzsu6zsl5DshJwg7KCc6rGw7ZWcIOugiO2NvOufsOyKpOulvCDsnpjrnbzrg4Xri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NQorbXNnaWQgImJ5cGFzcyBwcmUtcHVzaCBob29rIgorbXNnc3RyICLtkbjsi5wg7KCEIO2bhO2BrOulvCDqsbTrhIjrnIHri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NgorbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAi67mg7KGM7KeA66eMIOq0gOugqOuQnCDtg5zqt7jrpbwg7ZG47Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo1NzkgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAi7ZG47Iuc7JeQIEdQRyDshJzrqoUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4MSBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICLrpqzrqqjtirgg7Kq97JeQIOybkOyekCDtirjrnpzsnq3shZjsnYQg7JqU7LKt7ZWp64uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo1OTkKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiLS1kZWxldGUg7Ji17IWY7J2AIC0tYWxsLCAtLW1pcnJvciwgLS10YWdzIOyYteyFmOqzvCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3B1c2guYzo2MDEKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUg7Ji17IWY7J2AIOugiO2NvOufsOyKpCDsl4bsnbQg7JWe65Kk6rCAIOunnuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYwNAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwg67CPIC0tdGFncyDsmLXshZjsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wdXNoLmM6NjA2Cittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwg7Ji17IWY7J2AIOugiO2NvOufsOyKpOuqheyEuOyZgCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3Ig67CPIC0tdGFncyDsmLXshZjsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEyCittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3Ig7Ji17IWY7J2AIOugiO2NvOufsOyKpOuqheyEuOyZgCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxNQorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCDrsI8gLS1taXJyb3Ig7Ji17IWY7J2AIO2YuO2ZmOuQmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNAorbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgIu2RuOyLnCDsmLXshZjsl5DripQg7KSE67CU6r+IIOusuOyekOqwgCDrk6TslrTqsIgg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MAorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTzsoJHrkZDslrQ+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD087YyM7J28Pl0gKC0tZW1wdHkgfCA87Yq466asLeuUsOychD4gWzztirjrpqwt65Sw7JyEMj4gWzztirjrpqwt65Sw7JyEMz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIwCittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAi6rKw6rO8IOyduOuNseyKpOulvCA87YyM7J28PuyXkCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCittc2dpZCAib25seSBlbXB0eSB0aGUgaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOulvCDruYTsmrDquLDrp4wg7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIuuzke2Vqe2VmOq4sCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjcKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICLsnb3snYAg64uk7J2MIOuzke2VqeydhCDsiJjtlontlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICLtjIzsnbwg64uo7JyEIOuzke2VqeydtCDtlYTsmpTtlZjsp4Ag7JWK7Jy866m0IDMt67Cp7ZalIOuzke2VqeydhCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAi7LaU6rCA7JmAIOygnOqxsOqwgCDsnojsnYQg65WMIDMt67Cp7ZalIOuzke2VqeydhCDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiLW3qs7wg64+Z7J287ZWY7KeA66eMLCDrs5HtlanrkJjsp4Ag7JWK7J2AIO2VreuqqeydhCDrsoTrpr3ri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM0Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI87ZWY7JyE65SU66CJ7YSw66asPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIu2KuOumrOulvCA87ZWY7JyE65SU66CJ7YSw66asPi8g7JWE656YIOyduOuNseyKpOuhnCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM4Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlOulvCDrs5Htlakg6rKw6rO866GcIOyXheuNsOydtO2KuO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDAKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgImdpdGlnbm9yZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDEKK21zZ2lkICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iCittc2dzdHIgIuustOyLnO2VmOuKlCDtjIzsnbzsnYQg642u7Ja07JOw64+E66GdIOuqheyLnOyggeycvOuhnCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ0Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICLrs5Htlakg7ZuE7JeQIOyekeyXhSDtj7TrjZTrpbwg7ZmV7J247ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDUKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIuyduOuNseyKpOuCmCDsnpHsl4Ug7Y+0642U66W8IOyXheuNsOydtO2KuO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ3Cittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICLrk5zrrLgg7LK07YGs7JWE7JuDIO2VhO2EsCDsoIHsmqnsnYQg6rG064SI65yB64uI64ukIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OQorbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAidW5wYWNrLXRyZWVzIOuUlOuyhOq5hSIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjgKK21zZ2lkICJnaXQgcmViYXNlLS1oZWxwZXIgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWhlbHBlciBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MjQKK21zZ2lkICJrZWVwIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIuu5iCDsu6TrsIvsnYQg7Jyg7KeA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MjYgYnVpbHRpbi9yZXZlcnQuYzoxMjMKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgIuu5iCDrqZTsi5zsp4DroZwg7Luk67CL7J2EIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjI3Cittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgIuuzke2VqSDsu6TrsIvsnYQg66as67Kg7J207Iqk7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MjkKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAi6rSA66Co65CcIOuzuOuemCDruIzrnpzsuZgg7JyE7LmY66W8IOycoOyngO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjMwCittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICLrpqzrsqDsnbTsiqQg6rOE7IaNIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MzIKK21zZ2lkICJhYm9ydCByZWJhc2UiCittc2dzdHIgIuumrOuyoOydtOyKpOulvCDspJHsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzozNQorbXNnaWQgIm1ha2UgcmViYXNlIHNjcmlwdCIKK21zZ3N0ciAi66as67Kg7J207IqkIOyKpO2BrOumve2KuOulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzozNworbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLtlaAg7J28IOuqqeuhneydmCDsu6TrsIsg7JWE7J2065SU66W8IOykhOyeheuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzozOQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIu2VoCDsnbwg66qp66Gd7J2YIOy7pOuwiyDslYTsnbTrlJTrpbwg64qY7J6F64uI64ukLiIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjQxCittc2dpZCAiY2hlY2sgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi7ZWgIOydvCDrqqnroZ3snYQg7ZmV7J247ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6NDMKK21zZ2lkICJza2lwIHVubmVjZXNzYXJ5IHBpY2tzIgorbXNnc3RyICLrtojtlYTsmpTtlZwg67m87Jik6riw66W8IOqxtOuEiOucgeuLiOuLpCIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjQ1Cittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAiZml4dXAvc3F1YXNoIOykhCDsnqzqtazshLEiCisKKyMgRW5nbGlzaCBUZXh07JeQ7ISc64qUIGluc2VydOulvCDsgqzsmqntlZjsp4Drp4wsIOyGjOyKpOy9lOuTnOyXkOuKlCBhZGTroZwg7ZGc7ZiE65CY7Ja0IOyeiOyKteuLiOuLpC4KKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzo0NworbXNnaWQgImluc2VydCBleGVjIGNvbW1hbmRzIGluIHRvZG8gbGlzdCIKK21zZ3N0ciAi7ZWgIOydvCDrqqnroZ3sl5Ag7Iuk7ZaJIOuqheugueydhCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzo2OAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICIiCisiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIOyYteyFmOydgCAtLXJlYmFzZS1tZXJnZXMg7Ji17IWYIOyXhuydtOuKlCDslYTrrLQg7Zqo6rO86rCAIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzozMQorbXNnaWQgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorbXNnc3RyICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NDIKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLquLDrs7jqsJLsnLzroZwg6rCE65617ZWcIOyggOyepeyGjOqwgCDslYTri4wg7ZiE7J6sIOu4jOuenOy5mOydmCDsl4XrjbDsnbTtirjripQg6rGw67aA65Cp64uI64ukLlxuIgorIuyXheuNsOydtO2KuO2VmOuptCDsnbjrjbHsiqTsmYAg7J6R7JeFIO2KuOumrOqwgCDtkbjsi5ztlZwg64K07Jqp6rO8IOydvOy5mO2VmOyngCDslYrqsowg65CY66+A66GcLFxuIgorIidnaXQgcmVzZXQgLS1oYXJkJ+uhnCDsnpHsl4Ug7Y+0642U66W8IEhFQUTsl5Ag66ee7Law7JW8IO2VqeuLiOuLpC5cbiIKKyJcbiIKKyLrpqzrqqjtirgg7KCA7J6l7IaM7JeQ7IScICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyDshKTsoJUg67OA7IiY66W8ICdpZ25vcmUn64KYXG4iCisiJ3dhcm4n7Jy866GcIOyEpOygle2VmOuptCDtmITsnqwg67iM656c7LmY66GcIO2RuOyLnO2VoCDsiJgg7J6I7Iq164uI64ukLiDtlZjsp4Drp4wg7J6R7JeFXG4iCisi7Y+0642U7J2YIOuCtOyaqeydhCDtkbjsi5ztlaAg64K07Jqp7JeQIOunnuy2lOuKlCDqsowg7JWE64uI652866m0IOy2lOyynO2VmOyngCDslYrsirXri4jri6QuXG4iCisiXG4iCisi7J20IOuplOyLnOyngOulvCDrs7Tsp4Ag7JWK6rOgIOq4sOuzuCDrj5nsnpHsnYQg6rOE7IaNIO2VmOugpOuptCxcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcg7ISk7KCVIOuzgOyImOulvCAncmVmdXNlJ+uhnCDshKTsoJXtlZjsi63si5zsmKQuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjg2MgorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorIid3YXJuJyBvciAnaWdub3JlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGVsZXRpbmcgdGhlXG4iCisiY3VycmVudCBicmFuY2gsIHdpdGggb3Igd2l0aG91dCBhIHdhcm5pbmcgbWVzc2FnZS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisi6riw67O46rCS7Jy866GcLCDtmITsnqwg67iM656c7LmY7J2YIOyCreygnOuKlCDqsbDrtoDrkKnri4jri6QuIOuLpOydjOyXkCAnZ2l0IGNsb25lJ+2VoCDrlYxcbiIKKyLslYTrrLQg7YyM7J2864+EIOyytO2BrOyVhOybg+2VmOyngCDslYrqsowg65CY66+A66GcIO2YvOuPmeydhCDsnbzsnLztgqTquLAg65WM66y47J6F64uI64ukLlxuIgorIlxuIgorIidyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyDshKTsoJUg67OA7IiY66W8ICdpZ25vcmUn64KYICd3YXJuJ+ycvOuhnCDshKTsoJXtlZjrqbRcbiIKKyIo6rK96rOgIOuplOyLnOyngOulvCDtj6ztlajtlZjqsbDrgpgg7Y+s7ZWo7ZWY7KeAIOyViuqzoCkg7ZiE7J6sIOu4jOuenOy5mOulvCDsgq3soJztlaAg7IiYXG4iCisi7J6I7Iq164uI64ukLlxuIgorIlxuIgorIuydtCDrqZTsi5zsp4Drpbwg67O07KeAIOyViuycvOugpOuptCwg7J20IOyEpOyglSDrs4DsiJjrpbwgJ3JlZnVzZSfroZwg7ISk7KCV7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTM1Cittc2dpZCAicXVpZXQiCittc2dzdHIgIuy2nOugpSDslYrquLAiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk0OQorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLrlJTroInthLDrpqzrpbwg7KeA7KCV7ZW07JW8IO2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTMyIGJ1aWx0aW4vcmVmbG9nLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMn7J2AKOuKlCkg7Jis67CU66W4IOyLnOqwgSDqsJLsnbQg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA867iM656c7LmYPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA87J2066aEPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNiBidWlsdGluL3JlbW90ZS5jOjM2Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDzsmJvsnbTrpoQ+IDzsg4jsnbTrpoQ+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3IGJ1aWx0aW4vcmVtb3RlLmM6NDEKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDzsnbTrpoQ+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4IGJ1aWx0aW4vcmVtb3RlLmM6NDYKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDzsnbTrpoQ+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA867iM656c7LmYPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA87J2066aEPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA87J2066aEPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMQorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPOq3uOujuT4gfCA866as66qo7Yq4PikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPOydtOumhD4gPOu4jOuenOy5mD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMgYnVpbHRpbi9yZW1vdGUuYzo3MgorbXNnaWQgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPOydtOumhD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQgYnVpbHRpbi9yZW1vdGUuYzo3NworbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDzsnbTrpoQ+IDzsg4h1cmw+IFs87JibdXJsPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUgYnVpbHRpbi9yZW1vdGUuYzo3OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA87J2066aEPiA87IOIdXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDzsnbTrpoQ+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMxCittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPOyYteyFmD5dIDzsnbTrpoQ+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA87J2066aEPiA867iM656c7LmYPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1MgorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPOydtOumhD4gPOu4jOuenOy5mD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTcKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzzsmLXshZg+XSA87J2066aEPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MgorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs87Ji17IWYPl0gPOydtOumhD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjcKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzzsmLXshZg+XSBbPOq3uOujuT4gfCA866as66qo7Yq4Pl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIiVzIOyXheuNsOydtO2KuCDspJEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4Cittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9y64qUIOychO2XmO2VmOuvgOuhnCDsgqzsmqnsnYQg6raM7ZWY7KeAIOyViuyKteuLiOuLpC4g64yA7Iug7JeQXG4iCisiXHQgLS1taXJyb3I9ZmV0Y2gg65iQ64qUIC0tbWlycm9yPXB1c2jrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIC0tbWlycm9yIOyYteyFmCDsnbjsnpA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MQorbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgIuumrOuqqO2KuCDruIzrnpzsuZjrpbwg6rCA7KC47Ji164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgIuqwgOyguOyYrCDrlYwg66qo65OgIO2DnOq3uOyZgCDqtIDroKgg7Jik67iM7KCd7Yq466W8IOqwgOyguOyYteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjYKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIuyVhOuLiOuptCDslYTrrLQg7YOc6re464+EIOqwgOyguOyYpOyngCDslYrsirXri4jri6QgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY4Cittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAi7LaU7KCB7ZWgIOu4jOuenOy5mCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjkKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICLrp4jsiqTthLAg67iM656c7LmYIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MAorbXNnaWQgInB1c2h8ZmV0Y2giCittc2dzdHIgInB1c2h8ZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIuumrOuqqO2KuOulvCDtkbjsi5wg65iQ64qUIOqwgOyguOyYrCDrlYwg7IKs7Jqp7ZWgIOuvuOufrOuhnCDshKTsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgzCittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiLS1taXJyb3Ig7Ji17IWY6rO8IOqwmeydtCDrp4jsiqTthLAg67iM656c7LmY66W8IOyngOygle2VmOuptCDslZ7rkqTqsIAg66ee7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICLrp4jsiqTthLAg67iM656c7LmY66W8IOyngOygleydgCBmZXRjaCDrr7jrn6zsl5DshJzrp4wg7JWe65Kk6rCAIOunnuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTIgYnVpbHRpbi9yZW1vdGUuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiJXMg66as66qo7Yq46rCAIOydtOuvuCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NiBidWlsdGluL3JlbW90ZS5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICInJXMn7J2AKOuKlCkg7Jis67CU66W4IOumrOuqqO2KuCDsnbTrpoTsnbQg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIuuniOyKpO2EsCAnJXMn7J2EKOulvCkg7ISk7KCV7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIlcyDroIjtjbzrn7DsiqTrqoXshLjsl5Ag64yA7ZWcIOqwgOyguOyYpOq4sCDrp7XsnYQg7Ja77J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDQxIGJ1aWx0aW4vcmVtb3RlLmM6NDQ5Cittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKOydvOy5mCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUzCittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIijsgq3soJwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYyNyBidWlsdGluL3JlbW90ZS5jOjc2MiBidWlsdGluL3JlbW90ZS5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCittc2dzdHIgIuq3uOufsCDrpqzrqqjtirjqsIAg7JeG7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIuyEpOyglSDshLnshZjsnYQgJyVzJ+yXkOyEnCAnJXMnKOycvCnroZwg67CU6r+AIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIuq4sOuzuOqwkuydtCDslYTri4wg6rCA7KC47Jik6riwIOugiO2NvOufsOyKpOuqheyEuOulvCDsl4XrjbDsnbTtirjtlZjsp4Ag7JWK7Iq164uI64ukXG4iCisiXHQlc1xuIgorIlx07ZWE7JqU7ZWY66m0IOyEpOygleydhCDsiJjrj5nsnLzroZwg7JeF642w7J207Yq47ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiclcycg7IKt7KCc6rCAIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIiclcycg66eM65Ok6riw6rCAIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3OTkKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIuyVjOumvDog66CI7Y2865+w7IqkL+umrOuqqO2KuC8g6rOE7Li1IOq1rOyhsCDrsJbsl5Ag7J6I64qUIOydvOu2gCDruIzrnpzsuZjqsIAg7KCc6rGw65CY7KeAIOyViuyVmOyKteuLiCIKKyLri6QuXG4iCisi7IKt7KCc7ZWY66Ck66m0IOuLpOydjOydhCDsgqzsmqntlZjsi63si5zsmKQ6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIuyEpOyglSDshLnshZggJyVzJ+ydhCjrpbwpIOygnOqxsO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiDsg4gg7ZWt66qpICjri6TsnYwg6rCA7KC47Jik6riw64qUIHJlbW90ZXMvJXMg7JWE656YIOyggOyepeuQqeuLiOuLpCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE3Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDstpTsoIHrkKgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE5Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiDsmKTrnpjrkKggKOygnOqxsO2VmOugpOuptCAnZ2l0IHJlbW90ZSBwcnVuZSfsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjEKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIuyemOuqu+uQnCBicmFuY2guJXMubWVyZ2Ug6rCSLiDsl6zrn6wg6rCcIOu4jOuenOy5mOuhnCDrpqzrsqDsnbTsiqTtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5IG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLrpqzrqqjtirggJXMg7JyE66GcIOuMgO2ZlOyLneycvOuhnCDrpqzrsqDsnbTsiqTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSAod2l0aCBtZXJnZXMpIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLrpqzrqqjtirggJXMg7JyE66GcIOuMgO2ZlOyLneycvOuhnCAo67OR7ZWpIO2PrO2VqCkg66as67Kg7J207Iqk7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLrpqzrqqjtirggJXMg7JyE66GcIOumrOuyoOydtOyKpO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIOuzke2VqTog66as66qo7Yq4ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIuuzke2VqTog66as66qo7Yq4ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIOq3uOumrOqzoCDrpqzrqqjtirggJXNcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDI5Cittc2dpZCAiY3JlYXRlIgorbXNnc3RyICLrp4zrk6TquLAiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMgorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAi7IKt7KCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzYKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICLstZzsi6Ag7IOB7YOcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzkKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICLsoJXrsKntlqUg7KeE7ZaJIOqwgOuKpSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQyCittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgIuuhnOy7rOydtCDrkqTrlqjslrTsp5AiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0OQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qc+yXkOyEnCAlLSpzKOycvCnroZwg6rCV7KCcICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qc+yXkOyEnCAlLSpzKOycvCnroZwg7ZG47IucICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpz7JeQ7IScICVzKOycvCnroZwg6rCV7KCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qc+yXkOyEnCAlcyjsnLwp66GcIO2RuOyLnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI3Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgIuumrOuqqO2KuOyXkCDsp4jsnZjtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiog66as66qo7Yq4ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIOqwgOyguOyYpOq4sCBVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYgYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTMxMQorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoVVJMIOyXhuydjCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MCBidWlsdGluL3JlbW90ZS5jOjExNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIO2RuOyLnCAgVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc0IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NiBidWlsdGluL3JlbW90ZS5jOjExNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgSEVBRCDruIzrnpzsuZg6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzQKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIo7KeI7J2Y7ZWY7KeAIOyViuydjCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorbXNnaWQgIih1bmtub3duKSIKK21zZ3N0ciAiKOyVjCDsiJgg7JeG7J2MKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiAgSEVBRCDruIzrnpzsuZggKOumrOuqqO2KuCBIRUFE64qUIOyVoOunpO2VmOqzoCwg64uk7J2MIOykkSDtlZjrgpjsnbwg7IiYIOyeiOyKteuLiOuLpCk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIOumrOuqqO2KuCDruIzrnpzsuZg6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NSBidWlsdGluL3JlbW90ZS5jOjEyMjEKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAo7IOB7YOc66W8IOyniOydmO2VmOyngCDslYrsnYwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDQKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICAnZ2l0IHB1bGwn7JeQIOyCrOyaqe2VoCDroZzsu6wg67iM656c7LmY66W8IOyEpOyglToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxMgorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAg66Gc7LusIOugiO2NvOufsOyKpOulvCAnZ2l0IHB1c2gn66GcIOuvuOufrOunge2VoCDsmIjsoJUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICDroZzsu6wg66CI7Y2865+w7Iqk66W8ICdnaXQgcHVzaCfroZwg66+465+s66eBJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzkKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgIuugiO2NvOufsOyKpC/rpqzrqqjtirgvPOydtOumhD4vSEVBRCDqsJLsnYQg66as66qo7Yq47JeQIOunnuqyjCDshKTsoJXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0MQorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIuugiO2NvOufsOyKpC/rpqzrqqjtirgvPOydtOumhD4vSEVBRCDqsJLsnYQg7IKt7KCc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTYKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICLrpqzrqqjtirggSEVBROulvCDqsrDsoJXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU4Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKyLrpqzrqqjtirggSEVBRCDruIzrnpzsuZjqsIAg7Jes65+s6rCc7J6F64uI64ukLiDri6TsnYwg7KSRIO2VmOuCmOulvCDrqoXsi5zsoIHsnLzroZwg7KeA7KCV7ZWY7Iut7Iuc7JikOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIiVz7J2EKOulvCkg7IKt7KCc7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICLsmKzrsJTrpbgg66CI7Y2865+w7Iqk6rCAIOyVhOuLmeuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIiVz7J2EKOulvCkg7ISk7KCV7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXPsnZgg7Jew6rKw7J20IOuBiuyWtOynkeuLiOuLpCEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NworIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlc+ydmCDsl7DqsrDsnbQg64GK7Ja07KGM7Iq164uI64ukISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIuyemOudvOuDhDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW+yemOudvOuCvCDsmIjsoJVdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFvsnpjrnbzrg4RdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzIKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLqsIDsoLjsmKgg7ZuE7JeQIOumrOuqqO2KuOulvCDsnpjrnbzrg4Xri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNSBidWlsdGluL3JlbW90ZS5jOjE0ODkgYnVpbHRpbi9yZW1vdGUuYzoxNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIuq3uOufsCDrpqzrqqjtirjqsIAg7JeG7Iq164uI64ukICgnJXMnKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUxCittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAi67iM656c7LmY66W8IOy2lOqwgO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDU4Cittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAi66as66qo7Yq466W8IOyngOygle2VmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3NQorbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICLqsIDsoLjsmKTquLAgVVJM7J20IOyVhOuLiOudvCDtkbjsi5wgVVJM7J2EIOyniOydmO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDc3Cittc2dpZCAicmV0dXJuIGFsbCBVUkxzIgorbXNnc3RyICLrqqjrk6AgVVJM7J2EIOumrO2EtO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIiclcycg66as66qo7Yq47JeQIOuMgO2VnCBVUkzsnYQg7ISk7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTMxCittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIu2RuOyLnCBVUkzsnYQg7KeA7KCV7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzMKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJVUkzsnYQg7LaU6rCA7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzUKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAiVVJM7J2EIOyCreygnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQyCittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSDsmLXshZjsnYQg65GY64ukIOyTsOuptCDslYgg65Cp64uI64ukIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICLsnpjrqrvrkJwg7Jik656Y7KCEIFVSTCDtjKjthLQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICLqt7jrn7AgVVJM7J20IOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MQorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAi7ZG47Iuc7Jqp7J20IOyVhOuLjCDrqqjrk6AgVVJM7J2EIOyCreygnO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYwNworbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgIuyekOyEuO2eiCDtkZzsi5ztlanri4jri6QgKO2VmOychCDrqoXroLkg7JWe7JeQIOyZgOyVvCDtlanri4jri6QpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7ZWY7JyEIOuqheuguTogJXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs87Ji17IWYPl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMKK21zZ2lkICIiCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAiIgorIuygkOynhOyggeyduCByZXBhY2vsnYAg67mE7Yq466e1IOyduOuNseyKpOyZgCDtmLjtmZjrkJjsp4Ag7JWK7Iq164uI64ukLlxuIgorIi0tbm8td3JpdGUtYml0bWFwLWluZGV466W8IOyCrOyaqe2VmOqxsOuCmCBwYWNrLndyaXRlYml0bWFwcyDshKTsoJXsnYQg64GE7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODAKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAi7ZWY64KY7J2YIOustuydjCDslYjsl5Ag66qo65GQIOustuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODIKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICItYeyZgCDrj5nsnbztlZjqs6AsIOygkeq3vCDrtojqsIDriqUg7Jik67iM7KCd7Yq466W8IOuKkOyKqO2VmOqyjCDrsJTqv4nri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg1Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICLsl6zrtoTsnZgg66y27J2M7J2EIOygnOqxsO2VmOqzoCwgZ2l0LXBydW5lLXBhY2tlZOulvCDsi6Ttlontlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg3Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgImdpdC1wYWNrLW9iamVjdHPsl5AgLS1uby1yZXVzZS1kZWx0YSDsmLXshZjsnYQg64SY6rmB64uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiZ2l0LXBhY2stb2JqZWN0c+yXkCAtLW5vLXJldXNlLW9iamVjdCDsmLXshZjsnYQg64SY6rmB64uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5MQorbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAiZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mb+ulvCDsi6TtlontlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5NAorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJnaXQtcGFjay1vYmplY3Rz7JeQIC0tbG9jYWwg7Ji17IWY7J2EIOuEmOq5geuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTYKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgIuu5hO2KuOuntSDsnbjrjbHsiqTrpbwg7JSB64uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5NworbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICLrjIDrnrXsnZjsi5zqsIEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTk4Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiIgorIi1B7JeQIOy2lOqwgOuhnCwg7KeA7KCV7ZWcIOyLnOqwgeuztOuLpCDsmKTrnpjrkJwg7Jik67iM7KCd7Yq466W8IOuKkOyKqO2VmOqyjCDrp4zrk6Tsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIwMAorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICItYeyZgCDqsJnsnbQsIOygkeq3vCDrtojqsIDriqUg7Jik67iM7KCd7Yq466W8IOuLpOyLnCDrrLbsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjAyCittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICLrjbjtg4Ag7JWV7LaV7JeQIOyCrOyaqe2VoCDsnIjrj4TsmrAg7YGs6riwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIwMyBidWlsdGluL3JlcGFjay5jOjIwOQorbXNnaWQgImJ5dGVzIgorbXNnc3RyICLrsJTsnbTtirjsiJgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjA0Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIuychOyZgCDrj5nsnbztlZjsp4Drp4wsIO2VreuqqSDsiJgg64yA7IugIOuplOuqqOumrCDtgazquLDrpbwg7KCc7ZWc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIwNgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAi7LWc64yAIOuNuO2DgCDquYrsnbTrpbwg7KCc7ZWc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIwOAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAi7LWc64yAIOyKpOugiOuTnCDsiJjrpbwg7KCc7ZWc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIxMAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICLrrLbsnYwg7YyM7J287J2YIOy1nOuMgCDtgazquLAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjEyCittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgIi5rZWVw7Jy866GcIO2RnOyLnOuQnCDrrLbsnYzsnZgg7Jik67iM7KCd7Yq466W8IOuLpOyLnCDrrLbsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjE0Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgIuydtCDrrLbsnYzsnYQg64uk7IucIOustuyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjI0Cittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAicHJlY2lvdXMtb2JqZWN0cyDsoIDsnqXshozsnZgg66y27J2M7J2EIOyCreygnO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIyOAorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLUEgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIOuwjyAtQSDsmLXshZjsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0MjUgYnVpbHRpbi93b3JrdHJlZS5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgIiclcycg7KCc6rGw7JeQIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPOyYpOu4jOygne2KuD4gPOuMgOyytOydtOumhD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDzsmKTruIzsoJ3tirg+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPOy7pOuwiz4gWzzsg4HsnIQ+Li4uXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjUKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCA87Jik67iM7KCd7Yq4Pi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD087ZiV7IudPl0gWy1sIFs87Yyo7YS0Pl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNzEgYnVpbHRpbi9yZXBsYWNlLmM6NDE1IGJ1aWx0aW4vcmVwbGFjZS5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAi7Jis67CU66W4IOyYpOu4jOygne2KuCDsnbTrpoTsnbQg7JWE64uZ64uI64ukOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLsu6TrsIsgJyVzJ+yXkCDsnpjrqrvrkJwg67OR7ZWp7YOc6re4IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLsu6TrsIsgJyVzJ+yXkCDsnpjrqrvrkJwg7ZiV7Iud7J2YIOuzke2Vqe2DnOq3uCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyLrs7jrnpgg7Luk67CLICclcyfsl5Ag67KE66Ck7KeEIOuzke2Vqe2DnOq3uCAnJXMn7J20KOqwgCkg65Ok7Ja0IOyeiOyKteuLiOuLpC4gLS1ncmFmdCDrjIDsi6AgLS0iCisiZWRpdCDsmLXshZjsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUuIgorbXNnc3RyICLrs7jrnpgg7Luk67CLICclcyfsl5AgR1BHIOyEnOuqheydtCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjEKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAi64yA7LK0IOy7pOuwi+yXkOyEnCDshJzrqoXsnYQg7KCc6rGw7ZWp64uI64ukISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICLri6TsnYzsl5Ag64yA7ZWcIOuMgOyytCDsu6TrsIvsnYQg7JO4IOyImCDsl4bsirXri4jri6Q6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuuLpOydjCDqt7jrnpjtlITtirjrpbwg67OA7ZmY7ZWgIOyImCDsl4bsirXri4jri6Q6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUzNQorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICLrjIDssrQg66CI7Y2865+w7IqkIOuqqeuhneydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUzNgorbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgIuuMgOyytCDroIjtjbzrn7DsiqTrpbwg7IKt7KCc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MzcKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAi7ZiE7J6sIOyYpOu4jOygne2KuOulvCDtjrjsp5Htlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUzOAorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIuy7pOuwi+ydmCDsg4HsnIQg7ZWt66qp7J2EIOuwlOq/ieuLiOuLpCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTM5Cittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICLquLDsobQg6re4656Y7ZSE7Yq4IO2MjOydvOydhCDrs4DtmZjtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0MAorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgIuugiO2NvOufsOyKpOqwgCDsnojsnLzrqbQg64yA7LK07ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDIKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIi0tZWRpdOyXkCDrjIDtlZwg64K07Jqp7J2EIOyYiOyBmOqyjCDtkZzsi5ztlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDMKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgIuydtCDtmJXsi53snYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPOqyveuhnD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjU5Cittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgIuyduOuNseyKpOyXkCDquZTrgZTtlZwg7ZW06rKw7J2EIOuTseuhne2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5Cittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPOy7pOuwiz5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPO2KuOumrC3rlLDsnIQ+XSBbLS1dIDzqsr3roZw+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzEKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs87Yq466asLeuUsOychD5dIFstLV0gWzzqsr3roZw+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3Cittc2dpZCAibWl4ZWQiCittc2dzdHIgIu2YvO2VqSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3Cittc2dpZCAic29mdCIKK21zZ3N0ciAi7IaM7ZSE7Yq4IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcKK21zZ2lkICJoYXJkIgorbXNnc3RyICLtlZjrk5wiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNworbXNnaWQgIm1lcmdlIgorbXNnc3RyICLrs5HtlakiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNworbXNnaWQgImtlZXAiCittc2dzdHIgIuycoOyngCIKKworIzogYnVpbHRpbi9yZXNldC5jOjc4Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIuyYrOuwlOuluCBIRUFE6rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIkhFQUTsnZgg7Yq466as66W8IOywvuuKlOuNsCDsi6TtjKjtlojsirXri4jri6QuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIiVz7J2YIO2KuOumrOulvCDssL7ripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBROydmCDtmITsnqwg7JyE7LmY64qUICVz7J6F64uI64ukIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIuuzke2VqSDspJHsl5AgJXMg66as7IWL7J2EIO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OQorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgIuqwhOuete2eiCDtkZzsi5wsIOyYpOulmOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTEKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiSEVBROyZgCDsnbjrjbHsiqTrpbwg66as7IWL7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjkyCittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICJIRUFE66eMIOumrOyFi+2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3Jlc2V0LmM6Mjk2Cittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiSEVBRCwg7J24642x7IqkLCDsnpHsl4Xtj7TrjZTrpbwg66as7IWL7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk4Cittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJIRUFE66W8IOumrOyFi+2VmOyngOunjCDroZzsu6wg67OA6rK9IOyCrO2VreydhCDrgqjqsqjrkaHri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDQKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAi7KCc6rGw7ZWcIOqyveuhnOulvCDrgpjspJHsl5Ag7LaU6rCA7ZWc64uk64qUIOyCrOyLpOunjCDquLDroZ3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpIOyYrOuwlOuluCDrpqzruYTsoITsnLzroZwg7LC+64qU642wIOyLpO2MqO2WiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICInJXMn7J2EKOulvCkg7Jis67CU66W4IO2KuOumrOuhnCDssL7ripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzOAorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCDsmLXshZjsnYAgLS17aGFyZCxtaXhlZCxzb2Z0fSDsmLXshZjqs7wg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQg7Ji17IWY7J2EIOqyveuhnOyZgCDqsJnsnbQg7JOw6riw64qUIOygnOqxsOuQoCDsmIjsoJXsnoXri4jri6QuIOuMgOyLoOyXkCAnZ2l0IHJlc2V0IC0tIDzqsr0iCisi66GcPifrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIuqyveuhnOyZgCDqsJnsnbQgJXMg66as7IWL7J2EIO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMg66as7IWL7J2AIOqwhOuete2VnCDsoIDsnqXshozsl5DshJzrp4wg7JO4IOyImCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjMKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiLU4g7Ji17IWY7J2AIC0tbWl4ZWQg7Ji17IWY6rO8IOqwmeydtCDsjajslbzrp4wg7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzgwCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIuumrOyFiyDrkqTsl5Ag7Iqk7YWM7J207KeV7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWtOiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAi7J24642x7IqkIO2MjOydvOydhCAnJXMnIOumrOu5hOyghOycvOuhnCDrpqzshYvtlaAg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTAKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICLsg4gg7J24642x7IqkIO2MjOydvOydhCDsk7gg7IiYIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzozOTcKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIgorbXNnc3RyICItLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyDsmLXshZjqs7wgLS1taXNzaW5nIOyYteyFmOydhCDqsrDtlakg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0NTUKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIHJlcXVpcmVzIC0tb2JqZWN0cyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IO2VhO2EsOungeydgCAtLW9iamVjdHMg7Ji17IWY7J20IO2VhOyalO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNwYXJzZSB2YWx1ZSAnJXMnIgorbXNnc3RyICLsnpjrqrvrkJwg65Oc66y4IOqwkiAnJXMnIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDk5Cittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdOuKlCDrhbjtirgg7ZGc7Iuc66W8IOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MDIKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLXVzZS1iaXRtYXAtaW5kZXggd2l0aCBvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICItLXVzZS1iaXRtYXAtaW5kZXgg7Ji17IWY7JeQIOyYpOu4jOygne2KuCDtlYTthLDrp4HsnYQg6rKw7ZWpIO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwNgorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs87Ji17IWYPl0gLS0gWzzsnbjsnpA+Li4uXSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTEKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgIuyduOyekOuhnCDrhJjquLQgYC0tYOulvCDsnKDsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDEzCittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICLssqvrsojsp7gg7Ji17IWY7J20IOyVhOuLjCDsnbjsnpAg65Kk7JeQIO2MjOyLseydhCDspJHsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE2Cittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAic3R1Y2sgbG9uZyDtmJXsi53snLzroZwg7Lac66Cl7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjU0OQorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPOyYteyFmD5dIC0tIFs87J247J6QPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs87J247J6QPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPOyYteyFmD5dIFs87J247J6QPi4uLl1cbiIKKyJcbiIKKyLssqvrsojsp7gg7IKs7Jqp67Cp67KV7JeQIOuMgO2VtCDsnpDshLjtnogg7JWM6rOgIOyLtuycvOuptCwgXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWgiCisiXCLrpbxcbiIKKyLsi6TtlontlbQg67O07Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMworbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs87Ji17IWYPl0gPOy7pOuwiy3rlLDsnIQ+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPO2VmOychOuqheuguT4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzzsmLXshZg+XSA87Luk67CLLeuUsOychD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPO2VmOychOuqheuguT4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlc+ydgCjripQpICVz7JmAKOqzvCkg6rCZ7J20IOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3JldmVydC5jOjk5Cittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi65CY64+M66as6riwIOuYkOuKlCDsu6TrsIsg67m87Jik6riwIOyXsOyGjeydhCDrgZ3rg4Xri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAwCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi65CY64+M66as6riwIOuYkOuKlCDsu6TrsIsg67m87Jik6riwIOyXsOyGjeydhCDqs4Tsho3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAxCittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi65CY64+M66as6riwIOuYkOuKlCDsu6TrsIsg67m87Jik6riwIOyXsOyGjeydhCDst6jshoztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgIuyekOuPmeycvOuhnCDsu6TrsIvtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMworbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeA66W8IO2OuOynke2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDYKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICLsnbTsoIQt7Luk67CLLeuyiO2YuCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICLsnbTsoIQg7Luk67CLIOykkSDrqZTsnbjrnbzsnbgg7ISg7YOdIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLrs5Htlakg7KCE6561IgorCisjOiBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi7Ji17IWYIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMQorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIuuzke2VqSDsoITrnrUg7Ji17IWYIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyMAorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAi7Luk67CLIOydtOumhOydhCDrkqTsl5Ag67aZ7J6F64uI64ukIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyMgorbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICLstZzstIgg67mIIOy7pOuwi+ydhCDsnKDsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI0Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIuyXrOu2hOydmCDruYgg7Luk67CL7J2EIOycoOyngO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMTQKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICLrkJjrj4zrpqzquLAg7Iuk7YyoIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyNworbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiY2hlcnJ5LXBpY2sg7Iuk7YyoIgorCisjOiBidWlsdGluL3JtLmM6MTgKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPOyYteyFmD5dIFstLV0gPO2MjOydvD4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDYKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorIuuLpOydjCDtjIzsnbzsl5Ag7YyM7J286rO8IEhFQUQg66qo65GQIOuLpOuluCDsiqTthYzsnbTsp5XtlZwg64K07Jqp7J20XG4iCisi7J6I7Iq164uI64ukOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKOqwleygnOuhnCDsoJzqsbDtlZjroKTrqbQgLWYg7Ji17IWY7J2EIOyCrOyaqe2VmOyLreyLnOyYpCkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTUKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICLri6TsnYwg7YyM7J287J20IOyduOuNseyKpOyXkCDsiqTthYzsnbTsp5XtlZwg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6Q6IgorCisjOiBidWlsdGluL3JtLmM6MjE5IGJ1aWx0aW4vcm0uYzoyMjgKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIijtjIzsnbzsnYQg7Jyg7KeA7ZWY66Ck66m0IC0tY2FjaGVkIOyYteyFmCwg6rCV7KCc66GcIOygnOqxsO2VmOugpOuptCAtZiDsmLXshZjsnYQg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogYnVpbHRpbi9ybS5jOjIyNQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAi64uk7J2MIO2MjOydvOyXkCDroZzsu6wg7IiY7KCVIOyCrO2VreydtCDsnojsirXri4jri6Q6IgorCisjOiBidWlsdGluL3JtLmM6MjQxCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAi7KCc6rGw7ZWcIO2MjOydvCDrqqnroZ3snYQg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTsl5DshJzrp4wg7KCc6rGw7ZWp64uI64ukIgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgIuy1nOyLoCDrsoTsoIQg7ZmV7J247J2EIO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAi7J6s6reA7KCBIOygnOqxsOulvCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDYKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAi7JWE66y0IOqyg+uPhCDsnbzsuZjtlZjsp4Ag7JWK7Jy866m0IOyDge2DnCAw67KI7Jy866GcIOuBneuCqeuLiOuLpCIKKworIzogYnVpbHRpbi9ybS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICItciDsmLXshZjsnbQg7JeG7Jy866m0IOyerOq3gOyggeycvOuhnCAnJXMn7J2EKOulvCkg7KCc6rGw7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ybS5jOjM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybTogJXPsnYQo66W8KSDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9ybS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgIiclcyfsnYQo66W8KSDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoyMAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs87Zi47Iqk7Yq4PjpdPOuUlOugie2EsOumrD4gWzzroIjtjbzrn7AiCisi7IqkPi4uLl1cbiIKKyIgIC0tYWxsIOyYteyFmOqzvCDrqoXsi5zsoIHsnbggPOugiO2NvOufsOyKpD4g66qF7IS4IOykkSDtlZjrgpjrp4wg7IKs7Jqp7ZWgIOyImCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICLrpqzrqqjtirgg7J2066aEIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NworbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICLsg4Htg5wg7JeG64qUIFJQQyDtlITroZzthqDsvZzsnYQg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQ7IScIOugiO2NvOufsOyKpOulvCDsnb3sirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAi66as66qo7Yq4IOuPhOybgCDtlITroZzqt7jrnqjsnZgg7IOB7YOc66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zZXJ2ZS5jOjcKK21zZ2lkICJnaXQgc2VydmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzZXJ2ZSBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL3NlcnZlLmM6MTcgYnVpbHRpbi91cGxvYWQtcGFjay5jOjIzCittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICLtlZjrgpjsnZgg7JqU7LKtL+ydkeuLtSDqtZDtmZgg65Kk7JeQIOuBneuCqeuLiOuLpCIKKworIzogYnVpbHRpbi9zZXJ2ZS5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIuq4sOuKpSDsoJXrs7Qg6rWQ7ZmYIOuSpOyXkCDsponsi5wg64Gd64Kp64uI64ukIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTQKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPOyYteyFmD5dIFs866as67mE7KCELeuylOychD5dIFtbLS1dIDzqsr3roZw+Li4uXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1Cittc2dpZCAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPOyYteyFmD5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAi7J6R7ISx7J6Q6rCAIOyVhOuLjCDsu6Trr7jthLDroZwg66y27Iq164uI64ukIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICLsnpHshLHsnpDrs4Qg7Luk67CLIOyImOyXkCDrlLDrnbwg7KCV66Cs7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIuy7pOuwiyDshKTrqoXsnYQg7IOd65617ZWY6rOgLCDsu6TrsIsg7IiY66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIuyekeyEseyekOydmCDsoITsnpDrqZTsnbwg7KO87IaM66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MQorbXNnaWQgIndbLGkxWyxpMl1dIgorbXNnc3RyICJ3WyxpMVssaTJdXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAi7KSE67CU6r+IIOy2nOugpSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI5OAorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBnaXZlbiBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIuyggOyepeyGjCDrsJbsl5DshJwg7KO87Ja07KeEIOyduOyekOqwgCDrhIjrrLQg66eO7Iq164uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTzsi5zqsIE+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg866as67mE7KCEPiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTYKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPOuyoOydtOyKpD5dXSBbLS1saXN0XSBbPOugiO2NvOufsOyKpD5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWYiCittc2dpZF9wbHVyYWwgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIgorbXNnc3RyWzBdICIlcyDrrLTsi5wuIOugiO2NvOufsOyKpOulvCAlZOqwnOuztOuLpCDrp47snbQg7LKY66as7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICIlc+yZgCjqs7wpIOydvOy5mO2VmOuKlCDroIjtjbzrn7DsiqTqsIAg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjI2Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLrpqzrqqjtirgg7LaU7KCBIOuwjyDroZzsu6wg67iM656c7LmY66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYyOAorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLrpqzrqqjtirgg7LaU7KCBIOu4jOuenOy5mOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzAKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICLruIzrnpzsuZjsl5Ag65Sw66W4ICcqISstJyDtkZzsi5zsl5Ag7IOJ7J2EIOyehe2emeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzMgorbXNnaWQgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIgorbXNnc3RyICLqs7XthrUg7J207KCEIOy7pOuwiyDrkqTsnZggPG4+6rCc7J2YIOy7pOuwi+ydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzQKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgIi0tbW9yZT0tMSDsmLXshZjqs7wg64+Z7J28IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjM1Cittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgIuydtOumhCDrrLjsnpDsl7TsnYQg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzNworbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLtmITsnqwg67iM656c7LmY66W8IO2PrO2VqCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzOQorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAi7Luk67CL7J2YIOydtOumhOydhCDqt7gg7Jik67iM7KCd7Yq4IOydtOumhOycvOuhnCDrtpnsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDEKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICLqsIDriqXtlZwg67OR7ZWpIOq4sOykgOygkOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDMKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICLri6Trpbgg7Ja065akIOugiO2NvOufsOyKpOyXkOyEnOuPhCDsoJHqt7wg67aI6rCA64ql7ZWcIOugiO2NvOufsOyKpOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDUKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIuychOyDgSDsiJzshJzsl5Ag65Sw6528IOy7pOuwi+ydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDgKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAi7LKrIOu4jOuenOy5mOyXkCDsl4bripQg7Luk67CL66eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MAorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAi7ZWY64KY7J2YIOuBneyXkOyEnOunjCDsoJHqt7wg6rCA64ql7ZWcIOuzke2VqeydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTIKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIuqwgOuKpe2VmOuptCDsi5zqsIQg7Iic7ISc66W8IOycoOyngO2VmOuptOyEnCDsnITsg4Eg7Iic7ISc66GcIOygleugrCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NQorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw867Kg7J207IqkPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAi6riw7KSA67aA7YSwIOyLnOyeke2VtCDstZzrjIAgPG4+6rCc7J2YIOy1nOq3vCByZWYtbG9nIO2VreuqqeydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2OTAKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIiIKKyItLXJlZmxvZyDsmLXshZjsnYAgLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCwgLS1tZXJnZS1iYXNlIOyYteyFmOqzvCDtmLjtmZjrkJgiCisi7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcxNAorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgIuu4jOuenOy5mOulvCDsp4DsoJXtlZjsp4Ag7JWK7JWY6rOgLCBIRUFE6rCAIOyYrOuwlOultOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTcKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXJlZmxvZyDsmLXshZjsnYAg67iM656c7LmYIOydtOumhOydtCDtlYTsmpTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAi7ZWcIOuyiOyXkCAlZOqwnCDtla3rqqnrp4wg7ZGc7Iuc7ZWgIOyImCDsnojsirXri4jri6QuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmICVzIgorbXNnc3RyICLqt7jrn7Ag66CI7Y2865+w7Iqk6rCAIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2LiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmV2cy4iCittc2dzdHJbMF0gIuumrOu5hOyghOydhCAlZOqwnOuztOuLpCDrp47snbQg7LKY66as7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOyYrOuwlOuluCDroIjtjbzrn7DsiqTqsIAg7JWE64uZ64uI64ukLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCBjb21taXQgJXMgKCVzKSIKK21zZ3N0ciAiJXMg7Luk67CL7J2EIOywvuydhCDsiJgg7JeG7J2MICglcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMAorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPO2MqO2EtD4uLi5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTEKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz087Yyo7YS0Pl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNTkKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICLtg5zqt7jrp4wg7ZGc7IucICjtl6Trk5zsmYAg6rKw7ZWpIOqwgOuKpSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjAKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICLtl6Trk5zrp4wg7ZGc7IucICjtg5zqt7jsmYAg6rKw7ZWpIOqwgOuKpSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjEKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICLrjZQg7JeE6rKp7ZWcIOugiO2NvOufsOyKpCDqsoDsgqwsIOygle2Zle2eiCDtlZjrgpjsnZgg66CI7Y2865+w7IqkIOqyveuhnCDtlYTsmpQiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjQgYnVpbHRpbi9zaG93LXJlZi5jOjE2NgorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAiSEVBRCDroIjtjbzrn7DsiqTrpbwg7ZGc7Iuc7ZWp64uI64ukICjtlYTthLDrp4HrkJjshJwg7KCc7Jm465CY642U652864+EKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2OAorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICLtg5zqt7jrpbwg7Jik67iM7KCd7Yq4IElE66GcIOuUsOudvOqwkeuLiOuLpCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MAorbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAiU0hBLTEg7ZGc7Iuc7JeQIDxuPuqwnOydmCDsiKvsnpDrp4wg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc0Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIu2RnOykgCDstpzroKXsl5Ag6rKw6rO866W8IO2RnOyLnO2VmOyngCDslYrsirXri4jri6QgKC0tdmVyaWZ5IOyYteyFmOqzvCDsgqzsmqntlZjrqbQg7KKL7J2MKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NgorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIuuhnOy7rCDsoIDsnqXshozsl5Ag7JeG64qUIOugiO2NvOufsOyKpOulvCDtkZzspIAg7J6F66Cl7JeQ7IScIOydveyWtCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM2Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICLso7zshJ0g66y47J6Q66GcIOyLnOyeke2VmOuKlCDrqqjrk6Ag7KSE7J2EIOqxtOuEiOubsOqzoCDsoJzqsbDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM5Cittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICLqsIEg7KSE7J2YIOyVnuyXkCDso7zshJ0g66y47J6Q7JmAIOqzteuwseydhCDrtpnsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozNyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIuq3uOufsCDroIjtjbzrn7DsiqTqsIAg7JeG7Iq164uI64ukOiAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAi7KCE7LK0IOugiO2NvOufsOyKpCDsnbTrpoTsnbQg7ZWE7JqU7ZWY7KeA66eMLCDsnoXroKXsnYAgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MQorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUg7Ji17IWY7J2AIOyduOyekOqwgCDtlYTsmpTtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICInJXMnIFVSTCDtlZjrgpjsnZgg64uo6rOE66W8IOyemOudvOuCvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDA2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjExCittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAi7IOB64yAIOqyveuhnOyXkCDsgqzsmqntlaAg65iQ64uk66W4IOq4sOykgCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9POqyveuhnD5dIFs86rK966GcPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NjIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIi5naXRtb2R1bGVz7JeQ7IScIO2VmOychCDrqqjrk4gg6rK966GcICclcyfsl5Ag64yA7ZWcIFVSTOydtCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKyInJXMnIOyEpOygleydhCDssL7slYTrs7wg7IiYIOyXhuyKteuLiOuLpC4g7J20IOyggOyepeyGjOqwgCDsnpDssrQg7JeF7Iqk7Yq466a87J2065286rOgIOqwgOygle2VqeuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyVzJ+yXkCDrjIDtlZwgVVJM7J2EIOuTseuhne2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiJyUzJHMnIOqyveuhnOyXkCDrjIDtlbQgJyUxJHMnICglMiRzKSDtlZjsnIQg66qo65OIIOuTseuhnVxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICLqsr3qs6A6ICclcycg7ZWY7JyEIOuqqOuTiOyXkCDrjIDtlbQg7Luk66eo65OcIOyXheuNsOydtO2KuCDrqqjrk5zqsIAg7KCc7JWI65CY7JeI7Iq164uI64ukXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICInJXMnIO2VmOychCDrqqjrk4jsl5Ag64yA7ZW0IOyXheuNsOydtO2KuCDrqqjrk5wg65Ox66Gd7J20IOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU1NAorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBmb3IgaW5pdGlhbGl6aW5nIGEgc3VibW9kdWxlIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOy0iOq4sO2ZlOyXkCDstpzroKXsnYQg7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU1OQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPOqyveuhnD5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAi6rK966GcICclcyfsl5Ag64yA7ZW0IC5naXRtb2R1bGVz7JeQIOyeiOuKlCDtlZjsnITrqqjrk4gg66ek7ZWR7J20IOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJIRUFEIOugiO2NvOufsOyKpOulvCAnJXMnIO2VmOychCDrqqjrk4gg7JWI7JeQ7IScIOywvuydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njk3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiJyVzJyDtlZjsnIQg66qo65OI7JeQIOyerOq3gOyggeycvOuhnCDsoIHsmqnsnbQg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzIxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDMxCittc2dpZCAiU3VwcHJlc3Mgc3VibW9kdWxlIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIu2VmOychCDrqqjrk4gg7IOB7YOc66W8IOy2nOugpe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MjIKK21zZ2lkICIiCisiVXNlIGNvbW1pdCBzdG9yZWQgaW4gdGhlIGluZGV4IGluc3RlYWQgb2YgdGhlIG9uZSBzdG9yZWQgaW4gdGhlIHN1Ym1vZHVsZSAiCisiSEVBRCIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCBIRUFE7JeQIOyggOyepeuQnCDsu6TrsIsg64yA7IugIOyduOuNseyKpOyXkCDsoIDsnqXrkJwg7Luk67CL7J2EIOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcyMworbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi64K07J6l65CcIO2VmOychCDrqqjrk4jsl5Ag7J6s6reA7KCB7Jy866GcIOyggeyaqSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcyOAorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzzqsr3roZw+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc1MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPOqyveuhnD4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIu2VmOychCDrqqjrk4ggVVJM7J2EICclcyfsl5Ag64yA7ZW0IOuPmeq4sO2ZlFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966GcICclcyfsl5Ag64yA7ZWcIFVSTOydhCDrk7HroZ3tlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorIu2VmOychCDrqqjrk4gg6rK966GcICclcyfsl5Ag64yA7ZWcIOq4sOuzuCDrpqzrqqjtirggKOyggOyepeyGjCnrpbwg6rCA7KC47Jik64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKyLtlZjsnIQg66qo65OIIOqyveuhnCAnJXMn7JeQIOuMgO2VnCDrpqzrqqjtirggKOyggOyepeyGjCnrpbwg7JeF642w7J207Yq47ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgIu2VmOychCDrqqjrk4ggVVJMIOuPmeq4sO2ZlCDstpzroKUg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg5NworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi7KSR7LKp65CcIO2VmOychCDrqqjrk4jsl5Ag7J6s6reA7KCB7Jy866GcIOyggeyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkwMgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPOqyveuhnD5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSAodXNlICdybSAtcmYnIGlmIHlvdSAiCisicmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisi7ZWY7JyEIOuqqOuTiCDsnpHsl4Ug7Y+0642UICclcyfsl5AgLmdpdCDrlJTroInthLDrpqzqsIAg7J6I7Iq164uI64ukICjsoJXrp5DroZwg66qo65OgIOy7pOuwiyDrgrTsl63snYQgIgorIu2PrO2VqO2VmOyXrCDsoJzqsbDtlZjroKTrqbQgJ3JtIC1yZifrpbwg7IKs7Jqp7ZWY7Iut7Iuc7JikKSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgIgorInRoZW0iCittc2dzdHIgIiIKKyLtlZjsnIQg66qo65OIIOyekeyXhSDtj7TrjZQgJyVzJ+yXkCDroZzsu6wg7IiY7KCVIOyCrO2VreydtCDsnojsirXri4jri6QuIOuyhOumrOugpOuptCAnLWYn66W8IOyCrOyaqe2VmCIKKyLsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICInJXMnIOuUlOugie2EsOumrOulvCDsp4Dsm4Hri4jri6RcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOyekeyXhSDtj7TrjZQgICclcyfsnYQo66W8KSDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAi67mIIO2VmOychCDrqqjrk4gg65SU66CJ7YSw66as66W8ICVz7J2EKOulvCkg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiJyVzJyDtlZjsnIQg66qo65OI7J20ICglcykgJyVzJyDqsr3roZzsl5Ag64yA7ZW0IOuTseuhneuQmOyngCDslYrslZjsirXri4jri6RcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMzIKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAi66Gc7LusIOuzgOqyvSDsgqztla3snbQg7J6I7Ja064+EIO2VmOychCDrqqjrk4gg7J6R7JeFIO2PtOuNlOulvCDsoJzqsbDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDMzCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAi66qo65OgIO2VmOychCDrqqjrk4jsnYQg66qp66Gd7JeQ7IScIOygnOqxsO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMzgKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzzqsr3roZw+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDUyCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAi7KCV66eQ66GcIOuqqOuToCDtlZjsnIQg66qo65OIIOy0iOq4sO2ZlOulvCDtlbTsoJztlZjroKTrqbQgJy0tYWxsJ+ydhCDsgqzsmqntlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAiJyVzJyDtlZjsnIQg66qo65OI7JeQIOuztOyhsCDsmKTruIzsoJ3tirjrpbwg7LaU6rCA7ZWgIOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAic3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3nsl5Ag64yA7ZWcIOqwkuydtCgnJXMnKSDslYwg7IiYIOyXhuuKlCDqsJLsnoXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAic3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9u7JeQIOuMgO2VnCDqsJLsnbQoJyVzJykg7JWMIOyImCDsl4bripQg6rCS7J6F64uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxNAorbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICLsg4gg7ZWY7JyEIOuqqOuTiOydhCDrs7XsoJztlaAg64yA7IOBIOychOy5mCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMTcKK21zZ2lkICJuYW1lIG9mIHRoZSBuZXcgc3VibW9kdWxlIgorbXNnc3RyICLsg4gg7ZWY7JyEIOuqqOuTiCDsnbTrpoQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjIwCittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiOydhCDrs7XsoJztlbQg7JisIFVSTCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMjgKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgIuyWleydgCDrs7XsoJzsl5Ag7IKs7Jqp7ZWgIOq5iuydtCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMzEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MDYKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLrs7XsoJwg7KeE7ZaJIOyDge2ZqeydhCDtla3sg4Eg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIzNgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9POqyveuhnD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgPOyggOyepeyGjCIKKyI+XSBbLS1uYW1lIDzsnbTrpoQ+XSBbLS1kZXB0aCA86rmK7J20Pl0gLS11cmwgPHVybD4gLS1wYXRoIDzqsr3roZw+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgIiclcyfsl5DshJwg7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyVzJ+yXkCDrs7XsoJztlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIiclcyfsl5Ag64yA7ZWcIO2VmOychCDrqqjrk4gg65SU66CJ7YSw66as66W8IOqwgOyguOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAiJyVzJyDtlZjsnIQg66qo65OIIOqyveuhnOqwgCDstIjquLDtmZTrkJjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM1MQorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICIndXBkYXRlIC0taW5pdCfsnYQg7ZWY66Ck6rOgIO2VnCDqsoMg7JWE64uI7JeI7Iq164uI6rmMPyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICLrs5HtlantlZjsp4Ag7ZWY7JyEIOuqqOuTiCAlcyDqsbTrhIjrnIAiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLtlZjsnIQg66qo65OIICclcycg6rG064SI65yAIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICInJXMnIOuzteygnO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QuIOyerOyLnOuPhCDsmIjsoJUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICLrkZDrsojsp7ggJyVzJyDrs7XsoJztlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiDspJHsp4Dtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTg1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODA4Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuyekeyXhSDtj7TrjZTroZwg6rCA64qUIOqyveuhnCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1ODgKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlOuhnCDqsIDripQg6rK966GcLCDrgrTsnqXrkJwg7ZWY7JyEIOuqqOuTiOydmCDqsr3qs4Qg7Ya16rO8IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5MgorbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IOuYkOuKlCBub25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5OAorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAi7KeA7KCV7ZWcIOqwnOyImOydmCDrpqzruYTsoITsl5DshJwg7J6Y66awIOyWleydgCDrs7XsoJzrpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYwMQorbXNnaWQgInBhcmFsbGVsIGpvYnMiCittc2dzdHIgIuuzkeugrCDsnpHsl4Ug6rCc7IiYIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYwMworbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAi7LWc7LSIIOuzteygnOqwgCDslpXsnYAg67O17KCcIOy2lOyynOydhCDrlLDrpbzsp4Ag7Jes67aAIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYwNAorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIuuzteygnCDqs7zsoJXsnYQg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MTEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlX2Nsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlX2Nsb25lIFstLXByZWZpeD086rK966GcPl0gWzzqsr3roZw+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjQKK21zZ2lkICJiYWQgdmFsdWUgZm9yIHVwZGF0ZSBwYXJhbWV0ZXIiCittc2dzdHIgIu2MjOudvOuvuO2EsCDsl4XrjbDsnbTtirjsl5Ag6rCS7J20IOyemOuqu+uQmOyXiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgIiIKKyLtlZjsnIQg66qo65OIICglcykg67iM656c7LmY6rCAIOyDgeychCDtlITroZzsoJ3tirgg67iM656c7LmY66W8IOydtOyWtOuwm+uPhOuhnSDshKTsoJXrkJjsl4jsp4Drp4wsIOyDgeychCAiCisi7ZSE66Gc7KCd7Yq47JeQIOu4jOuenOy5mOqwgCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODA5Cittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgIu2VmOychCDrqqjrk4jsl5Ag7J6s6reA7KCB7Jy866GcIOyggeyaqSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZW1iZWQtZ2l0LWRpciBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGVtYmVkLWdpdC1kaXIgWzzqsr3roZw+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlc+yXkOyEnCAtLXN1cGVyLXByZWZpeCDsmLXshZjsnYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIgorbXNnc3RyICInJXMn7J2AKOuKlCkg7Jis67CU66W4IHN1Ym1vZHVsZS0taGVscGVyIO2VmOychCDrqoXroLnsnbQg7JWE64uZ64uI64ukIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs87Ji17IWYPl0gPOydtOumhD4gWzzroIjtjbzrn7DsiqQ+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDzsnbTrpoQ+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAi7Ius67O87J20IOyVhOuLjCAo67aE66as65CcKSDroIjtjbzrn7DsiqTsl5Ag64yA7ZW0IOyXkOufrCDrqZTsi5zsp4Drpbwg7ZGc7Iuc7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIuyLrOuzvOumrSDroIjtjbzrn7DsiqTrpbwg7IKt7KCc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICLroIjtjbzrn7DsiqQg7Lac66Cl7J2EIOykhOyeheuLiOuLpCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjIKK21zZ2lkICJyZWFzb24iCittc2dzdHIgIuydtOycoCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjIKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAi7JeF642w7J207Yq47J2YIOydtOycoCIKKworIzogYnVpbHRpbi90YWcuYzoyNAorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XSA8dGFnbmFtZT4gIgorIls8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDztgqQtSUQ+XSBbLWZdIFstbSA866mU7Iuc7KeAPiB8IC1GIDztjIzsnbw+XSA87YOc6re47J2066aEPlxuIgorIlx0XHRbPO2XpOuTnD5dIgorCisjOiBidWlsdGluL3RhZy5jOjI1Cittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPO2DnOq3uOydtOumhD4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjYKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstbls867KI7Zi4Pl1dIFstLWNvbnRhaW5zIDzsu6TrsIs+XSBbLS1uby1jb250YWlucyA87Luk67CLPl0gWy0tcG9pbnRzLSIKKyJhdCA87Jik67iM7KCd7Yq4Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTztmJXsi50+XSBbLS1bbm8tXW1lcmdlZCBbPOy7pOuwiz5dXSBbPO2MqO2EtD4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjI4Cittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PO2YleyLnT5dIDztg5zqt7jsnbTrpoQ+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIiclcycg7YOc6re46rCAIOyXhuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiJyVzJyDtg5zqt7gg7IKt7KCc7ZWoICjqs7zqsbAgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuuLpOydjCDtg5zqt7jsl5Ag64yA7ZWcIOuplOyLnOyngOulvCDsk7Dsi63si5zsmKQ6XG4iCisiICAlc1xuIgorIiclYycg66y47J6Q66GcIOyLnOyeke2VmOuKlCDspITsnYAg66y07Iuc65Cp64uI64ukLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisi64uk7J2MIO2DnOq3uOyXkCDrjIDtlZwg66mU7Iuc7KeA66W8IOyTsOyLreyLnOyYpDpcbiIKKyIgICVzXG4iCisiJyVjJyDrrLjsnpDroZwg7Iuc7J6R7ZWY64qUIOykhOydgCDsnKDsp4DrkKnri4jri6QuIOygnOqxsO2VmOugpOuptCDsp4HsoJEg7KeA7JuM7JW8IO2VqeuLiOuLpC5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxOTAKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICLtg5zqt7jsl5Ag7ISc66qF7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICLtg5zqt7gg7YyM7J287J2EIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjIxNworbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgIuyemOuqu+uQnCDsmKTruIzsoJ3tirgg7KKF66WYLiIKKworIzogYnVpbHRpbi90YWcuYzoyNjYKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgIu2DnOq3uCDrqZTsi5zsp4Ag7JeG7J2MPyIKKworIzogYnVpbHRpbi90YWcuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAi7YOc6re4IOuplOyLnOyngOqwgCAlcyDtjIzsnbzsl5Ag64Ko7JWEIOyeiOyKteuLiOuLpFxuIgorCisjOiBidWlsdGluL3RhZy5jOjM4MgorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICLtg5zqt7gg7J2066aEIOuqqeuhneydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzg0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgIuqwgSDtg5zqt7gg66mU7Iuc7KeA7J2YIDxuPuykhOydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzg2Cittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgIu2DnOq3uOulvCDsgq3soJztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzg3Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgIu2DnOq3uOulvCDqsoDspp3tlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzg5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIu2DnOq3uCDrp4zrk6TquLAg7Ji17IWYIgorCisjOiBidWlsdGluL3RhZy5jOjM5MQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAi7KO87ISdIOuLrOumsCDtg5zqt7gsIOuplOyLnOyngOqwgCDtlYTsmpTtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzkzCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIu2DnOq3uCDrqZTsi5zsp4AiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzk1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAi6rCV7KCc66GcIO2DnOq3uCDrqZTsi5zsp4Drpbwg7Y647KeR7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjM5NgorbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgIuyjvOyEnSDri6zrpqzqs6AgR1BHIOyEnOuqhe2VnCDtg5zqt7giCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAwCittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi7YOc6re466W8IOyEnOuqhe2VmOuKlOuNsCDsp4DsoJXtlZwg7YKk66W8IOyCrOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0MDEKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICLtg5zqt7jqsIAg7J6I7Jy866m0IOuwlOq/ieuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0MDIgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICJyZWZsb2frpbwg66eM65Ot64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjQwNAorbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIu2DnOq3uCDrqqnroZ0g67O06riwIOyYteyFmCIKKworIzogYnVpbHRpbi90YWcuYzo0MDUKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgIu2DnOq3uCDrqqnroZ3snYQg7Jes65+sIOyXtOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA2IGJ1aWx0aW4vdGFnLmM6NDA4Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLtlbTri7kg7Luk67CL7J20IOuTpOyWtCDsnojripQg7YOc6re466eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0MDcgYnVpbHRpbi90YWcuYzo0MDkKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIu2VtOuLuSDsu6TrsIvsnbQg65Ok7Ja0IOyeiOyngCDslYrsnYAg7YOc6re466eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0MTAKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLrs5HtlanrkJwg7YOc6re466eMIO2RnOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0MTEKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi67OR7ZWp65CY7KeAIOyViuydgCDtg5zqt7jrp4wg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjQxNgorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLtlbTri7kg7Jik67iM7KCd7Yq47J2YIO2DnOq3uOunjCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDYwCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIOuwjyAtbiDsmLXshZjsnYAg7Zi47ZmY65CY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo0ODIKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiLW4g7Ji17IWY7J2AIOumrOyKpO2KuCDrqqjrk5zsl5DshJzrp4wg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjQ4NAorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIi0tY29udGFpbnMg7Ji17IWY7J2AIOumrOyKpO2KuCDrqqjrk5zsl5DshJzrp4wg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjQ4NgorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIi0tbm8tY29udGFpbnMg7Ji17IWY7J2AIOumrOyKpO2KuCDrqqjrk5zsl5DshJzrp4wg7ZeI7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjQ4OAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICItLXBvaW50cy1hdCDsmLXshZjsnYAg66as7Iqk7Yq4IOuqqOuTnOyXkOyEnOunjCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDkwCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIi0tbWVyZ2VkIOuwjyAtLW5vLW1lcmdlZCDsmLXshZjsnYAg66as7Iqk7Yq4IOuqqOuTnOyXkOyEnOunjCDtl4jsmqntlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTAxCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLtlZjrgpjsnZggLUYg65iQ64qUIC1tIOyYteyFmOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIwCittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICLtjIzrnbzrr7jthLDqsIAg64SI66y0IOunjuyKteuLiOuLpCIKKworIzogYnVpbHRpbi90YWcuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiclcyfsnYAo64qUKSDsmKzrsJTrpbgg7YOc6re4IOydtOumhOydtCDslYTri5nri4jri6QuIgorCisjOiBidWlsdGluL3RhZy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi7YOc6re4ICclcyfsnbQo6rCAKSDsnbTrr7gg7J6I7Iq164uI64ukIgorCisjOiBidWlsdGluL3RhZy5jOjU2MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIu2DnOq3uCAnJXMnIOyXheuNsOydtO2KuCAo6rO86rGwICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NDk4Cittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuCDrrLbsnYwg7ZG464qUIOykkSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiJXMg65SU66CJ7YSw66asIOunjOuTpOq4sCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgIiVz7JeQIOuMgO2VtCBzdGF0KCnsnbQg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiJXMg7YyM7J287J2EIOunjOuTnOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiJXMg7YyM7J287J2EIOyCreygnO2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTEzIGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIlcyDrlJTroInthLDrpqzrpbwg7IKt7KCc7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyBtdGltZSBpbiAnJXMnICIKK21zZ3N0ciAiJyVzJyDslYjsnZgg7IiY7KCVIOyLnOqwgeydhCDtmZXsnbjtlZjripQg7KSR7J6F64uI64ukICIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAi7IOIIO2MjOydvOydhCDstpTqsIDtlZwg7ZuE7JeQIOuUlOugie2EsOumrCDsoJXrs7TqsIAg67CU64CM7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICLsg4gg65SU66CJ7YSw66as66W8IOy2lOqwgO2VnCDtm4Tsl5Ag65SU66CJ7YSw66asIOygleuztOqwgCDrsJTrgIzsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE3OAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgIu2MjOydvOydhCDsl4XrjbDsnbTtirjtlZwg7ZuE7JeQIOuUlOugie2EsOumrCDsoJXrs7TqsIAg67CU64CM7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODkKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICLtlZjsnIQg65SU66CJ7YSw66as7JeQIO2MjOydvOydhCDstpTqsIDtlZwg7ZuE7JeQIOuUlOugie2EsOumrCDsoJXrs7TqsIAg67CU64CM7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIu2MjOydvOydhCDsgq3soJztlZwg7ZuE7JeQIOuUlOugie2EsOumrCDsoJXrs7TqsIAg67CU64CM7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTMKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi65SU66CJ7YSw66as66W8IOyCreygnO2VnCDtm4Tsl5Ag65SU66CJ7YSw66asIOygleuztOqwgCDrsJTrgIzsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMAorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIOyYpOy8gOydtCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1ODkKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzzsmLXshZg+XSBbLS1dIFs87YyM7J28Pi4uLl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ2Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICLsnbjrjbHsiqTsl5Ag7JeF642w7J207Yq46rCAIO2VhOyalO2VmOuNlOudvOuPhCDsg4jroZwg6rOg7Lmo7J2EIOqzhOyGje2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NDkKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAi7IOI66GcIOqzoOy5qDog7ZWY7JyEIOuqqOuTiCDrrLTsi5wiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTUyCittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgIuyDiCDtjIzsnbzsnYQg66y07Iuc7ZWgIOyImCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU0Cittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgIuuUlOugie2EsOumrOulvCDtjIzsnbzroZwsIOuYkOuKlCDqt7gg67CY64yA66GcIOuwlOq/gCDsiJgg7J6I6rKMIO2XiOyaqe2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTYKK21zZ2lkICJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICLsnpHsl4Xtj7TrjZTsl5DshJwg7JWM66a8IO2MjOydvOydtCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU4Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIuyduOuNseyKpOyXkCDrs5HtlantlZjsp4Ag7JWK7J2AIO2VreuqqeydtCDsnojslrTrj4Qg7IOI66GcIOqzoOy5qeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjEKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgIu2MjOydvCDsoJXrs7Trpbwg7IOI66GcIOqzoOy5qeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjUKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgIi0tcmVmcmVzaOyZgCDrj5nsnbztlZjsp4Drp4wsIGFzc3VtZS11bmNoYW5nZWQg7ISk7KCV7J2EIOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjkKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI866qo65OcPiw87Jik67iM7KCd7Yq4Piw86rK966GcPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzAKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgIuyngOygle2VnCDtla3rqqnsnYQg7J24642x7Iqk7JeQIOy2lOqwgO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzkKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgIu2MjOydvOydhCBcIuuwlOq+uOyngCDslYrsnYxcIuycvOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICLrsJTqvrjsp4Ag7JWK7J2M7Jy866GcIOqwgOyglSAoYXNzdW1lZC11bmNoYW5nZWQpIOu5hO2KuOulvCDsp4Dsm4Hri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg1Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAi7YyM7J287J2EIOyduOuNseyKpCDsoITsmqnsnLzroZwgKFwiaW5kZXgtb25seVwiKSDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg4Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIuyekeyXhe2PtOuNlCDqsbTrhIjrm7DquLAgKHNraXAtd29ya3RyZWUpIOu5hO2KuOulvCDsp4Dsm4Hri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkxCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKyLsnbjrjbHsiqTsl5Drp4wg7LaU6rCA7ZWp64uI64ukLiDrgrTsmqnsnYQg7Jik67iM7KCd7Yq4IOuNsOydtO2EsOuyoOydtOyKpOyXkCDstpTqsIDtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MworbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgIuyekeyXhSDtj7TrjZTsl5Ag7J6I7Ja064+EIO2VtOuLuSDqsr3roZzrpbwg7KCc6rGw7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NQorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiLS1zdGRpbuqzvCDqsJnsnbQg7IKs7JqpOiDsnoXroKUg7KSE7J2AIE5VTCDrsJTsnbTtirjroZwg64Gd64Kp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NworbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7JeF642w7J207Yq47ZWgIOqyveuhnOydmCDrqqnroZ3snYQg7J297Iq164uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDEKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi7ZGc7KSAIOyeheugpeyXkOyEnCDsnb3snYAg7ZWt66qp7J2EIOyduOuNseyKpOyXkCDstpTqsIDtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwNQorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAi6rK966GcIOuqqeuhneyXkCDrjIDtlbQgIzIg67CPICMzIOyKpO2FjOydtOynleydhCDri6Tsi5wg7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDkKK21zZ2lkICJvbmx5IHVwZGF0ZSBlbnRyaWVzIHRoYXQgZGlmZmVyIGZyb20gSEVBRCIKK21zZ3N0ciAiSEVBROyZgCDri6Trpbgg7ZWt66qp66eMIOyXheuNsOydtO2KuO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDEzCittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlOyXkCDsl4bripQg7YyM7J287J2EIOustOyLnO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE2Cittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLtkZzspIAg7Lac66Cl7JeQIOuPmeyekeydhCDslYzrpr3ri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxOAorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICLsoIDsnqXtlZwg7ZW06rKw65CY7KeAIOyViuydgCDstqnrj4zsnYQg66y07Iuc7ZWp64uI64ukICjsgqzsmqnsnpDsmqkg66qF66C5IOyaqeuPhCkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICLsnbjrjbHsiqTrpbwg7J20IO2YleyLneycvOuhnCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNAorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICLsiqTtlIzrpr8g7J24642x7Iqk66W8IOy8nOqxsOuCmCDrgZXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNgorbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAi7LaU7KCB7ZWY7KeAIOyViuuKlCDsupDsi5wg7IKs7Jqp7J2EIOy8nOqxsOuCmCDrgZXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyOAorbXNnaWQgInRlc3QgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLtjIzsnbwg7Iuc7Iqk7YWc7J20IOy2lOygge2VmOyngCDslYrripQg7LqQ7Iuc66W8IOyngOybkO2VmOuKlOyngCDqsoDsgqztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzMAorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICLtjIzsnbwg7Iuc7Iqk7YWcIOyLnO2XmCDsl4bsnbQg7LaU7KCB7ZWY7KeAIOyViuuKlCDsupDsi5zrpbwg7IKs7Jqp7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzIKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAi67OA6rK965CcIOqyg+ycvOuhnCDtkZzsi5zrkJjsp4Ag7JWK7J2AIOqyveyasOyXkOuPhCDsnbjrjbHsiqTsl5Ag7JSB64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzQKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBmaWxlIHN5c3RlbSBtb25pdG9yIgorbXNnc3RyICLtjIzsnbwg7Iuc7Iqk7YWcIOuqqOuLiO2EsOulvCDsvJzqsbDrgpgg64GV64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzYKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAiIgorIu2MjOydvCDsi5zsiqTthZwg66qo64uI7YSw66eBIOq4sOuKpeydtCDrs4Dqsr3sgqztla3snYQg7ZmV7J247ZWY64qUIOu5hO2KuOulvCDtjIzsnbzsl5Ag7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzkKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICLtjIzsnbwg7Iuc7Iqk7YWcIOuqqOuLiO2EsOungSDquLDriqXsnbQg67OA6rK97IKs7ZWt7J2EIO2ZleyduO2VmOuKlCDruYTtirjrpbwg7KeA7JuB64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExMzgKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXgg6rCS7J20IOqxsOynk+yeheuLiOuLpC4g7KCV66eQ66GcIOyKpO2UjOumvyDsnbjrjbHsiqTrpbwg7IKs7Jqp7ZWY66Ck66m0IOydtCDqsJLsnYQg7KCcIgorIuqxsO2VmOqxsOuCmCDrsJTqvrjsi63si5zsmKQuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNDcKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXgg6rCS7J20IOywuOyeheuLiOuLpC4g7KCV66eQ66GcIOyKpO2UjOumvyDsnbjrjbHsiqTrpbwg7IKs7Jqp7ZWY7KeAIOyViuycvOugpOuptCDsnbQg6rCSIgorIuydhCDsoJzqsbDtlZjqsbDrgpgg67CU6r647Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTU4Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDqsJLsnbQg7LC47J6F64uI64ukLiDsoJXrp5DroZwg7LaU7KCB7ZWY7KeAIOyViuuKlCDsupDsi5zrpbwg7IKs7Jqp7ZWY7KeAIOyViuycvCIKKyLroKTrqbQg7J20IOqwkuydhCDsoJzqsbDtlZjqsbDrgpgg67CU6r647Iut7Iuc7JikLiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTYyCittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICLstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvCDsupDsi5zrpbwg7IKs7Jqp7ZWY7KeAIOyViuyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTcwCittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDqsJLsnbQg6rGw7KeT7J6F64uI64ukLiDsoJXrp5DroZwg7LaU7KCB7ZWY7KeAIOyViuuKlCDsupDsi5zrpbwg7IKs7Jqp7ZWY66Ck66m0ICIKKyLsnbQg6rCS7J2EIOygnOqxsO2VmOqxsOuCmCDrsJTqvrjsi63si5zsmKQuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGVuYWJsZWQgZm9yICclcyciCittc2dzdHIgIiclcyfsl5Ag64yA7ZW0IOy2lOyggeuQmOyngCDslYrripQg7LqQ7Iuc66W8IOyCrOyaqe2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4MgorbXNnaWQgImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyBzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGVuYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvcuqwgCDshKTsoJXrkJjsp4Ag7JWK7JWY7Iq164uI64ukLiDsoJXrp5DroZwg7YyM7J28IOyLnOyKpO2FnCDrqqjri4jthLDrpbwg7IKs7Jqp7ZWY66Ck66m0ICIKKyLshKTsoJXtlZjsi63si5zsmKQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4NgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICLtjIzsnbwg7Iuc7Iqk7YWcIOuqqOuLiO2EsOqwgCDsvJzsoYzsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4OQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvcuqwgCDshKTsoJXrkJjslrQg7J6I7Iq164uI64ukLiDsoJXrp5DroZwg7YyM7J28IOyLnOyKpO2FnCDrqqjri4jthLDrpbwg7IKs7Jqp7ZWY7KeAIOyViuycvCIKKyLroKTrqbQg7ISk7KCV7J2EIOygnOqxsO2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTkzCittc2dpZCAiZnNtb25pdG9yIGRpc2FibGVkIgorbXNnc3RyICLtjIzsnbwg7Iuc7Iqk7YWcIOuqqOuLiO2EsOqwgCDqurzsoYzsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPOyYteyFmD5dIC1kIDzroIjtjbzrn7DsiqTsnbTrpoQ+IFs86rO86rGwLeqwkj5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs87Ji17IWYPl0gICAgPOugiO2NvOufsOyKpOydtOumhD4gPOyDiC3qsJI+IFs86rO86rGwLeqwkj5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzzsmLXshZg+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICLroIjtjbzrn7DsiqTrpbwg7IKt7KCc7ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjUKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiPOugiO2NvOufsOyKpOydtOumhD7snYQg6rCA66as7YKk7KeAIOyViuuKlCDtla3rqqnsnLzroZwg7JeF642w7J207Yq47ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICLtkZzspIAg7J6F66Cl7JeQIE5VTOuhnCDrgZ3rgpjripQg7J247J6Q6rCAIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgIu2RnOykgCDsnoXroKXsl5DshJwg7JeF642w7J207Yq466W8IOydveyKteuLiOuLpCIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE1Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAi67CU64ul67aA7YSwIOygleuztCDtjIzsnbzsnYQg7JeF642w7J207Yq47ZWp64uI64ukIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPOyYteyFmD5dIDzrlJTroInthLDrpqw+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgIuy1nOy0iCDroIjtjbzrn7DsiqQg7JWM66a8IOuSpOyXkCDsponsi5wg64Gd64Kp64uI64ukIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyI865SU66CJ7YSw66asPuqwgCDquYMg65SU66CJ7YSw66as6rCAIOyVhOuLiOuptCA865SU66CJ7YSw66asPi8uZ2l0LyDtj7TrjZTrpbwg7Iuc64+E7ZWY7KeAIOyViuyKteuLiOuLpC4iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICI8bj7stIgg64+Z7JWIIOuwmOydkeydtCDsl4bsnLzrqbQg7KCE7Iah7J2EIOykkeyngO2VqeuLiOuLpCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTgKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDzsu6TrsIs+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3MworbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAi7Luk67CLIOuCtOyaqeydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjc0IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICLsm5Drs7ggR1BHIOyDge2DnOulvCDstpzroKXtlanri4jri6QiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA866y27J2MPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAi7J6Q7IS47Z6IIO2RnOyLnCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgIu2GteqzhOunjCDtkZzsi5wiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE5Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD087ZiV7IudPl0gPO2DnOq3uD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM3Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICLtg5zqt7gg64K07JqpIO2RnOyLnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gWzxjb21taXQtaXNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzzsmLXshZg+XSA86rK966GcPiBbPOy7pOuwiy3rlLDsnIQ+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsaXN0IFs87Ji17IWYPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsb2NrIFs8b3B0aW9ucz5dIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGxvY2sgWzzsmLXshZg+XSA86rK966GcPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8bmV3LXBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbW92ZSA87J6R7JeF7Yq466asPiA87IOILeqyveuhnD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs87Ji17IWYPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPOyYteyFmD5dIDzsnpHsl4Xtirjrpqw+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA86rK966GcPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJ3b3JrdHJlZXMvJXMg7KCc6rGwOiDsmKzrsJTrpbgg65SU66CJ7YSw66as6rCAIOyVhOuLmeuCmOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIndvcmt0cmVlcy8lcyDsoJzqsbA6IGdpdGRpciDtjIzsnbzsnbQg7JeG7Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjkgYnVpbHRpbi93b3JrdHJlZS5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAid29ya3RyZWVzLyVzIOygnOqxsDogZ2l0ZGlyIO2MjOydvOydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCAoJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlJlbW92aW5nIHdvcmt0cmVlcy8lczogc2hvcnQgcmVhZCAoZXhwZWN0ZWQgJTxQUkl1TUFYPiBieXRlcywgcmVhZCAiCisiJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKyLsnpHsl4Ug7Yq466asIOygnOqxsC8lczog67aA7KGx7ZWY6rKMIOydveydjCAoJTxQUkl1TUFYPiDrsJTsnbTtirgg7JiI7IOBLCAlPFBSSXVNQVg+IOuwlOydtO2KuCAiCisi7J297J2MKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIKK21zZ3N0ciAid29ya3RyZWVzLyVzIOygnOqxsDogZ2l0ZGlyIO2MjOydvOydtCDsmKzrsJTrpbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAid29ya3RyZWVzLyVzIOygnOqxsDogZ2l0ZGlyIO2MjOydvOydtCDsl4bripQg7JyE7LmY66W8IOqwgOumrO2CteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE1MgorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAi7J6Y652864K4IOyekeyXhSDtj7TrjZTrpbwg7JWM66a964uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTU0Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIjzsi5zqsIE+67O064ukIOyYpOuemCDrkJwg7J6R7JeFIO2PtOuNlOulvCDrp4zro4ztlanri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJ+ydtCjqsIApIOydtOuvuCDsnojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAiJyVzJ+ydmCDrlJTroInthLDrpqzrpbwg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozNzMgYnVpbHRpbi93b3JrdHJlZS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIuyekeyXhSDtirjrpqwg7KSA67mEIOykkSAo7IOIIOu4jOuenOy5mCAnJXMnKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAi7J6R7JeFIO2KuOumrCDspIDruYQg7KSRICgnJXMnIOu4jOuenOy5mCDsnqzshKTsoJUg7KSRLiDsm5Drnpgg7JyE7LmYICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGNoZWNraW5nIG91dCAnJXMnKSIKK21zZ3N0ciAi7J6R7JeFIO2KuOumrCDspIDruYQg7KSRICgnJXMnIOqwgOyguOyYpOuKlCDspJEpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIuyekeyXhSDtirjrpqwg7KSA67mEIOykkSAo67aE66as65CcIEhFQUQgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDMxCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICLri6Trpbgg7J6R7JeFIO2PtOuNlOyXkOyEnCDssrTtgazslYTsm4PtlojrjZTrnbzrj4QgPOu4jOuenOy5mD7rpbwg7LK07YGs7JWE7JuD7ZWp64uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM0Cittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAi7IOIIOu4jOuenOy5mOulvCDrp4zrk63ri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzYKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgIuu4jOuenOy5mOulvCDrp4zrk6TqsbDrgpgg66as7IWL7ZWp64uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM4Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgIuyDiCDsnpHsl4Ug7Y+0642U66W8IOunjOuTreuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzOQorbXNnaWQgImtlZXAgdGhlIG5ldyB3b3JraW5nIHRyZWUgbG9ja2VkIgorbXNnc3RyICLsg4gg7J6R7JeFIO2PtOuNlOulvCDsnqDqtogg65Gh64uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAi7LaU7KCBIOuqqOuTnOulvCDshKTsoJXtlanri4jri6QgKGdpdC1icmFuY2goMSkg7LC46rOgKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0NAorbXNnaWQgInRyeSB0byBtYXRjaCB0aGUgbmV3IGJyYW5jaCBuYW1lIHdpdGggYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLsg4gg67iM656c7LmYIOydtOumhOqzvCDrpqzrqqjtirgg7LaU7KCBIOu4jOuenOy5mOulvCDsnbzsuZgg7Iuc7YK164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDUyCittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CLCAtLWRldGFjaCDsmLXshZgg7KSRIO2VmOuCmOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMQorbXNnaWQgIi0tW25vLV10cmFjayBjYW4gb25seSBiZSB1c2VkIGlmIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIgorbXNnc3RyICItLVtuby1ddHJhY2sg7Ji17IWY7J2AIOyDiOuhnOyatCDruIzrn7DsuZjqsIAg7IOd7ISx65CY7JeI7J2EIOqyveyasOyXkOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYxMQorbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAi7J6g6re464qUIOydtOycoCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYyMyBidWlsdGluL3dvcmt0cmVlLmM6NjU2IGJ1aWx0aW4vd29ya3RyZWUuYzo3MTAKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcyfsnYAo64qUKSDsnpHsl4Ug7Y+0642U6rCAIOyVhOuLmeuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYyNSBidWlsdGluL3dvcmt0cmVlLmM6NjU4Cittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIuuplOyduCDsnpHsl4Ug7Y+0642U66W8IOyeoOq3uOqxsOuCmCDsnqDquIgg7ZW07KCc7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOydtOuvuCDsnqDqsrzsirXri4jri6QuIOydtOycoDogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOydtOuvuCDsnqDqsrzsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICInJXMn7J2AKOuKlCkg7J6g6riw7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NQorbXNnaWQgIndvcmtpbmcgdHJlZXMgY29udGFpbmluZyBzdWJtb2R1bGVzIGNhbm5vdCBiZSBtb3ZlZCBvciByZW1vdmVkIgorbXNnc3RyICLtlZjsnIQg66qo65OI7J20IO2PrO2VqOuQnCDsnpHsl4Ug7Y+0642U64qUIOyYruq4sOqxsOuCmCDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjcxMiBidWlsdGluL3dvcmt0cmVlLmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYSBtYWluIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiJyVzJ+ydgCjripQpIOuplOyduCDsnpHsl4Ug7Y+0642U7J6F64uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICInJXMn7JeQ7IScIOuMgOyDgSDsnbTrpoTsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFyZ2V0ICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIu2DgOqyjCAnJXMn7J20KOqwgCkg7J2066+4IOyeiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlcyIKK21zZ3N0ciAi7J6g6ri0IOyekeyXhSDtj7TrjZTrpbwg7Jiu6ri4IOyImCDsl4bsirXri4jri6QuIOyeoOq4tCDsnbTsnKA6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzMyCittc2dpZCAiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlIgorbXNnc3RyICLsnqDquLQg7J6R7JeFIO2PtOuNlOulvCDsmK7quLgg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IG1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAi7Jyg7Zqo7ISxIOqygOyCrOyXkCDsi6TtjKjtlZjsl6wsIOyekeyXhSDtj7TrjZTrpbwg7Jiu6ri4IOyImCDsl4bsirXri4jri6Q6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBtb3ZlICclcycgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJ+ydhCjrpbwpICclcyco7Jy8KeuhnCDsmK7quLDripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcyciCittc2dzdHIgIiclcyfsl5DshJwgJ2dpdCBzdGF0dXMn66W8IOyLpO2Wie2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBkaXJ0eSwgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICInJXMn7J20KOqwgCkg67OA6rK9IOuQmOyXiOyKteuLiOuLpCwgIOyCreygnO2VmOugpOuptCAtLWZvcmNl66W8IOyCrOyaqe2VmOyLreyLnOyYpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICInJXMn7JeQ7IScICdnaXQgc3RhdHVzJ+ulvCDsi6TtlontlZjripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLCAg7L2U65OcICVkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA4IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICInJXMn7J2EKOulvCkg7IKt7KCc7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgzNAorbXNnaWQgImZvcmNlIHJlbW92aW5nIGV2ZW4gaWYgdGhlIHdvcmt0cmVlIGlzIGRpcnR5IgorbXNnc3RyICLsnpHsl4Xtirjrpqzsl5Ag67OA6rK97IKs7ZWt7J20IOyeiOuNlOudvOuPhCDqsJXsoJzroZwg7KCc6rGw7ZWp64uI64ukIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXMiCittc2dzdHIgIuyeoOq4tCDsnpHsl4Ug7Y+0642U66W8IOygnOqxsO2VoCDsiJgg7JeG7Iq164uI64ukLiDsnqDquLQg7J207JygOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg1OAorbXNnaWQgImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlIgorbXNnc3RyICLsnqDquLQg7J6R7JeFIO2PtOuNlOulvCDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICLsnKDtmqjshLEg6rKA7IKs7JeQIOyLpO2MqO2VmOyXrCwg7J6R7JeFIO2PtOuNlOulvCDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpDogJXMiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE0Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD087KCR65GQ7Ja0Pi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyNworbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPOygkeuRkOyWtD4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAi7ZWY7JyEIOuUlOugie2EsOumrCA87KCR65GQ7Ja0PuyXkCDrjIDtlbQg7Yq466asIOyYpOu4jOygne2KuOulvCDslIHri4jri6QiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMxCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAi65SU67KE6rmFIOyaqeuPhOuhnOunjCDsgqzsmqkiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBlcm1pc3Npb25zIG9uIHlvdXIgc29ja2V0IGRpcmVjdG9yeSBhcmUgdG9vIGxvb3NlOyBvdGhlclxuIgorInVzZXJzIG1heSBiZSBhYmxlIHRvIHJlYWQgeW91ciBjYWNoZWQgY3JlZGVudGlhbHMuIENvbnNpZGVyIHJ1bm5pbmc6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorbXNnc3RyICIiCisi7IaM7LyTIOuUlOugie2EsOumrOydmCDqtoztlZzsnbQg64SI66y0IOuKkOyKqO2VqeuLiOuLpC4g64uk66W4IOyCrOyaqeyekOqwgFxuIgorIuy6kOyLnOyXkCDrk6TslrQg7J6I64qUIOu5hOuwgCDsoJXrs7Trpbwg7J297J2EIOyImCDsnojsirXri4jri6QuIOuLpOydjOydhCDsi6TtlontlbQg67O07Iut7Iuc7JikOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcxCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAi65SU67KE6rmFIOuplOyLnOyngOulvCDtkZzspIDsmKTrpZjroZwg7Lac66Cl7ZWp64uI64ukIgorCisjOiBnaXQuYzoyNworbXNnaWQgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XVxuIgorIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cGF0aD5dIFstLXdvcmstdHJlZT08cGF0aD5dIFstLW5hbWVzcGFjZT08bmFtZT5dXG4iCisiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iCittc2dzdHIgIiIKKyJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDzqsr3roZw+XSBbLWMgPOydtOumhD49POqwkj5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTzqsr3roZw+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9POqyveuhnD5dIFstLXdvcmstdHJlZT086rK966GcPl0gWy0tbmFtZXNwYWNlPTzsnbTrpoQ+XVxuIgorIiAgICAgICAgICAgPOuqheuguT4gWzzsnbjsnpA+XSIKKworIzogZ2l0LmM6MzQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LiIKK21zZ3N0ciAiIgorIidnaXQgaGVscCAtYScg67CPICdnaXQgaGVscCAtZycg66qF66C57J2EIOyLpO2Wie2VmOuptCDtlZjsnIQg66qF66C57Ja07JmAIOqwnOuFkCDshKTrqoXshJzsnZhcbiIKKyLrqqnroZ3snYQg67O8IOyImCDsnojsirXri4jri6QuIO2KueyglSDtlZjsnIQg66qF66C57Ja064KYIOqwnOuFkOyXkCDrjIDtlbQg7J297Ja0IOuztOugpOuptCAnZ2l0IGhlbHBcbiIKKyI866qF66C5Picg65iQ64qUICdnaXQgaGVscCA86rCc64WQPicg66qF66C57J2EIOyLpO2Wie2VmOyLreyLnOyYpC4iCisKKyM6IGdpdC5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0tZ2l0LWRpclxuIgorbXNnc3RyICItLWdpdC1kaXLsl5Ag64yA7ZWcIOyjvOyWtOynhCDrlJTroInthLDrpqzqsIAg7JeG7Iq164uI64ukXG4iCisKKyM6IGdpdC5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgIi0tbmFtZXNwYWNl7JeQIOuMgO2VnCDso7zslrTsp4Qg64Sk7J6EIOyKpO2OmOydtOyKpOqwgCDsl4bsirXri4jri6RcbiIKKworIzogZ2l0LmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWVcbiIKK21zZ3N0ciAiLS13b3JrLXRyZWXsl5Ag64yA7ZWcIOyjvOyWtOynhCDrlJTroInthLDrpqzqsIAg7JeG7Iq164uI64ukXG4iCisKKyM6IGdpdC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcmVmaXggZ2l2ZW4gZm9yIC0tc3VwZXItcHJlZml4XG4iCittc2dzdHIgIi0tc3VwZXItcHJlZml47JeQIOuMgO2VnCDsoJHrkZDslrTqsIAg7KO87Ja07KeA7KeAIOyViuyVmOyKteuLiOuLpFxuIgorCisjOiBnaXQuYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iCittc2dzdHIgIi1j64qUIOyYteyFmOyXkOuKlCDshKTsoJUg66y47J6Q7Je07J20IOyZgOyVvCDtlanri4jri6RcbiIKKworIzogZ2l0LmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAiLUMg7Ji17IWY7JeQIOyjvOyWtOynhCDrlJTroInthLDrpqzqsIAg7JeG7Iq164uI64ukXG4iCisKKyM6IGdpdC5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQg7Ji17IWYOiAlc1xuIgorCisjOiBnaXQuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgIuuzhOy5rSAnJXMn7J2YIO2ZleyepeyXkCDsi6TtjKjtlojsirXri4jri6QuICclcyfsnYAo64qUKSDquYMg66qF66C57J20IOyVhOuLmeuLiOuLpFxuIgorCisjOiBnaXQuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgIiclcyfsnYQo66W8KSDsl6zripTrjbAg7Iuk7YyoOiAlc1xuIgorCisjOiBodHRwLmM6MzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgImh0dHAucG9zdGJ1ZmZlcuydtCAw67O064ukIOyekeydgCDqsJLsnoXri4jri6QuIOq4sOuzuOqwkiAlZCIKKworIyBIVFRQIGRlbGVnYXRpb24KKyM6IGh0dHAuYzozNjkKK21zZ2lkICJEZWxlZ2F0aW9uIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjIyLjAiCittc2dzdHIgIuuUnOumrOqyjOydtOyFmCDsu6jtirjroaTsnYAgY1VSTCA3LjQ0LjAg7JWeIOuyhOyghOyXkOyEnOuKlCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukIgorCisjOiBodHRwLmM6Mzc4Cittc2dpZCAiUHVibGljIGtleSBwaW5uaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICLqs7XqsJwg7YKkIOqzoOygleydgCBjVVJMIDcuNDQuMCDslZ4g67KE7KCE7JeQ7ISc64qUIOyngOybkO2VmOyngCDslYrsirXri4jri6QiCisKKyM6IGh0dHAuYzoxODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmFibGUgdG8gdXBkYXRlIHVybCBiYXNlIGZyb20gcmVkaXJlY3Rpb246XG4iCisiICBhc2tlZCBmb3I6ICVzXG4iCisiICAgcmVkaXJlY3Q6ICVzIgorbXNnc3RyICIiCisi66as64uk7J2066CJ7IWY7JeQ7IScIFVSTCDrsqDsnbTsiqTrpbwg7JeF642w7J207Yq47ZWgIOyImCDsl4bsirXri4jri6Q6XG4iCisiICAgICAgIOyalOyyrTogJXNcbiIKKyIg66as64uk7J2066CJ7Yq4OiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVkaXJlY3RpbmcgdG8gJXMiCittc2dzdHIgIiVzKOycvCnroZwg66as64uk7J2066CJ7Yq4IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo1OQorbXNnaWQgImFyZ3MiCittc2dzdHIgIuyduOyekCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6NjAKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLsmKTruIzsoJ3tirgg7ZWE7YSw66eBIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTU3Cittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgIuunjOujjC3si5zqsIEiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNzIKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgIuyVhOustCDrj5nsnpHrj4Qg7ZWY7KeAIOyViuydjCAo7Zi47ZmY7JqpKSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjI1MQorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAi642UIOyekOyEuO2eiCDtkZzsi5ztlanri4jri6QiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNTMKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICLrjZQg6rCE65617Z6IIO2RnOyLnO2VqeuLiOuLpCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjI1OQorbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJTSEEtMSDtkZzsi5zsl5AgPG4+6rCc7J2YIOyIq+yekOulvCDsgqzsmqntlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUwCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICLtjIzsnbwg64K07Jqp7J2EIOyduOuNseyKpOyXkCDstpTqsIDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAi66mU7J287ZWo7JeQ7IScIOyXsOyGjeuQnCDtjKjsuZjrpbwg7KCB7Jqp7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIu2MjOydvCDspITrp4jri6Qg7Luk67CLIOygleuztOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUzCittc2dpZCAiQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4IgorbXNnc3RyICLtjKjsuZjrpbwg7YyM7J28IOuwjy/rmJDripQg7J24642x7Iqk7JeQIOyggeyaqe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYW4gQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJhcmNoIOyggOyepeyGjOulvCDquYMg7KCA7J6l7IaM66GcIOqwgOyguOyYteuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAi7KeA7KCV7ZWcIO2KuOumrOyXkCDrk6TslrQg7J6I64qUIO2MjOydvOydmCDslYTsubTsnbTruIzrpbwg66eM65Ot64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NgorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgIuydtOynhCDtg5Dsg4nsnLzroZwg67KE6re466W8IOunjOuTpOyWtOuCuCDsu6TrsIvsnYQg7LC+7Iq164uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NworbXNnaWQgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIKK21zZ3N0ciAi7YyM7J28IOykhOuniOuLpCDrgZ3sl5Ag66eI7KeA66eJ7Jy866GcIOyImOygle2VnCDrpqzruYTsoITqs7wg7J6R7ISx7J6Q66W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NTgKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAi67iM656c7LmY66W8IOunjOuTpOqxsOuCmCwg7IKt7KCc7ZWY6rGw64KYLCDrqqnroZ3snYQg7Lac66Cl7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICLslYTsubTsnbTruIwg7ZiV7YOc66GcIOyYpOu4jOygne2KuOyZgCDroIjtjbzrn7DsiqTrpbwg7Jiu6rmB64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgIuyggOyepeyGjCDsmKTruIzsoJ3tirjsl5Ag64yA7ZW0IOuCtOyaqSDrmJDripQg7KKF66WY7JmAIO2BrOq4sCDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MQorbXNnaWQgIkRpc3BsYXkgZ2l0YXR0cmlidXRlcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiZ2l0YXR0cmlidXRlcyDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgImdpdGlnbm9yZSAvIOygnOyZuO2VoCDtjIzsnbzsnYQg65SU67KE6rmF7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworbXNnaWQgIlNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMiCittc2dzdHIgIuyXsOudveyymOydmCDsoITssrQg7J2066aE6rO8IOuplOydvCDso7zshozrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAi67iM656c7LmY66W8IOyghO2ZmO2VmOqxsOuCmCDsnpHsl4Ug7YyM7J287J2EIOuzteq1rO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NjUKK21zZ2lkICJDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuyduOuNseyKpOydmCDtjIzsnbzsnYQg7J6R7JeFIO2PtOuNlOuhnCDrs7Xsgqztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgIuugiO2NvOufsOyKpCDsnbTrpoTsnZgg7ZiV7Iud7J20IOyYrOuwlOuluOyngCDtmZXsnbjtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICLsl4XsiqTtirjrprzsl5Ag7KCB7Jqp7ZW07JW8IO2VoCDsu6TrsIvsnYQg7LC+7Iq164uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OAorbXNnaWQgIkFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgc29tZSBleGlzdGluZyBjb21taXRzIgorbXNnc3RyICLquLDsobQg7Luk67CL7Jy866GcIOuwnOyDne2VnCDrs4Dqsr0g7IKs7ZWt7J2EIOyggeyaqe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NjkKK21zZ2lkICJHcmFwaGljYWwgYWx0ZXJuYXRpdmUgdG8gZ2l0LWNvbW1pdCIKK21zZ3N0ciAiZ2l0LWNvbW1pdOydmCDqt7jrnpjtlL0g64yA7LK0IOuyhOyghCIKKworIzogY29tbWFuZC1saXN0Lmg6NzAKK21zZ2lkICJSZW1vdmUgdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlOyXkOyEnCDstpTsoIHrkJjsp4Ag7JWK64qUIO2MjOydvOydhCDsoJzqsbDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICLsoIDsnqXshozrpbwg67O17KCc7ZW0IOyDiCDrlJTroInthLDrpqzroZwg6rCA7KC47Ji164uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MgorbXNnaWQgIkRpc3BsYXkgZGF0YSBpbiBjb2x1bW5zIgorbXNnc3RyICLrjbDsnbTthLDrpbwg7Jes65+sIOyXtOuhnCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjczCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIuuwlOuAkCDsgqztla3snYQg7KCA7J6l7IaM7JeQIOq4sOuhne2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQgZ3JhcGggZmlsZXMiCittc2dzdHIgIuq5gyDsu6TrsIsg6re4656Y7ZSEIO2MjOydvOydhCDsk7Dqs6Ag7ZmV7J247ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NQorbXNnaWQgIkNyZWF0ZSBhIG5ldyBjb21taXQgb2JqZWN0IgorbXNnc3RyICLsg4gg7Luk67CLIOyYpOu4jOygne2KuOulvCDrp4zrk63ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc2Cittc2dpZCAiR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucyIKK21zZ3N0ciAi7KCA7J6l7IaMIOyYteyFmCDrmJDripQg7KCE7LK0IOyYteyFmOydhCDrs7TqsbDrgpgg7ISk7KCV7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo3NworbXNnaWQgIkNvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uIgorbXNnc3RyICLrrLbsl6zsp4Dsp4Ag7JWK7J2AIOyYpOu4jOygne2KuOydmCDqsJzsiJgg67CPIOq3uCDrlJTsiqTtgawg7IKs7Jqp65+J7J2EIOy4oeygle2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NzgKK21zZ2lkICJSZXRyaWV2ZSBhbmQgc3RvcmUgdXNlciBjcmVkZW50aWFscyIKK21zZ3N0ciAi7IKs7Jqp7J6QIOu5hOuwgCDsoJXrs7Trpbwg6rCA7KC47Jik6rOgIOyggOyepe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAi66mU66qo66as7JeQIOyehOyLnOuhnCDslZTtmLgg7KCA7J6l7ZWY64qUIOuPhOybgCDrqoXroLkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIuu5hOuwgCDsoJXrs7Trpbwg65SU7Iqk7YGs7JeQIOyggOyepe2VmOuKlCDrj4Tsm4Ag66qF66C5IgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgIu2VmOuCmOydmCDsu6TrsIvsnYQgQ1ZTIOyytO2BrOyVhOybg+ycvOuhnCDrgrTrs7Trg4Xri4jri6QiCisKKyMgKiAicGVvcGxlIGxvdmUgdG8gaGF0ZSIg67KI7Jet7J2AIOyghOuLrO2VmOq4sCDtnpjrk6Tqs6Ag67mg7KC464+EIOuCtOyaqSDrrLjsoJzqsIAg7JeG7Jy866+A66GcIOyDneuetQorIzogY29tbWFuZC1saXN0Lmg6ODIKK21zZ2lkICJTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZSIKK21zZ3N0ciAi64uk66W4IOyGjOyKpCDsvZTrk5wg6rSA66asIOyLnOyKpO2FnOyXkOyEnCDrjbDsnbTthLAg6rCA7KC47Jik6riwIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICLquYPsmqkgQ1ZTIOyEnOuyhCDsl5DrrqzroIjsnbTthLAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg0Cittc2dpZCAiQSByZWFsbHkgc2ltcGxlIHNlcnZlciBmb3IgR2l0IHJlcG9zaXRvcmllcyIKK21zZ3N0ciAi6rmDIOyggOyepeyGjOyXkCDrjIDtlZwg7JWE7KO8IOqwhOuLqO2VnCDshJzrsoQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg1Cittc2dpZCAiR2l2ZSBhbiBvYmplY3QgYSBodW1hbiByZWFkYWJsZSBuYW1lIGJhc2VkIG9uIGFuIGF2YWlsYWJsZSByZWYiCittc2dzdHIgIuyCrOyaqSDqsIDriqXtlZwg66CI7Y2865+w7Iqk66W8IOq4sOykgOycvOuhnCDsmKTruIzsoJ3tirjsl5Ag7J297J2EIOyImCDsnojripQg7J2066aE7J2EIOu2gOyXrO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6ODYKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICLsu6TrsIvqs7wg7Luk67CLIOyCrOydtCwg7Luk67CL6rO8IOyekeyXhSDrgrTsmqkg7IKs7J20IOuTseydmCDrsJTrgJAg7KCQ7J2EIOu0heuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIuyekeyXhSDtj7TrjZTsmYAg7J24642x7Iqk7J2YIO2MjOydvOydhCDruYTqtZDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg4Cittc2dpZCAiQ29tcGFyZSBhIHRyZWUgdG8gdGhlIHdvcmtpbmcgdHJlZSBvciBpbmRleCIKK21zZ3N0ciAi7Yq466as66W8IOyekeyXhSDtj7TrjZTrgpgg7J24642x7Iqk7JmAIOu5hOq1kO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6ODkKK21zZ2lkICJDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cyIKK21zZ3N0ciAi65GQIOqwnOydmCDtirjrpqwg7Jik67iM7KCd7Yq47JeQIOyeiOuKlCDrgrTsmqnqs7wg67iU66Gt7J2YIOuqqOuTnOulvCDruYTqtZDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkwCittc2dpZCAiU2hvdyBjaGFuZ2VzIHVzaW5nIGNvbW1vbiBkaWZmIHRvb2xzIgorbXNnc3RyICLsnbzrsJjsoIHsnbggZGlmZiDrj4Tqtazrpbwg7IKs7Jqp7ZW0IOuzgOqyvSDsgqztla3snYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MQorbXNnaWQgIkdpdCBkYXRhIGV4cG9ydGVyIgorbXNnc3RyICLquYMg642w7J207YSwIOuCtOuztOuCtOq4sCIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAi6rOg7IaNIOq5gyDrjbDsnbTthLAg6rCA7KC47Jik6riwIOuwseyXlOuTnCIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLri6Trpbgg7KCA7J6l7IaM7JeQ7IScIOyYpOu4jOygne2KuOyZgCDroIjtjbzrn7DsiqTrpbwg64uk7Jq066Gc65Oc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLri6Trpbgg7KCA7J6l7IaM7JeQ7IScIOyXhuuKlCDsmKTruIzsoJ3tirjrpbwg64uk7Jq066Gc65Oc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIuumrOuqqO2KuCDruIzrnpzsuZgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLrs5Htlakg7Luk67CLIOuplOyLnOyngOulvCDrp4zrk63ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk3Cittc2dpZCAiT3V0cHV0IGluZm9ybWF0aW9uIG9uIGVhY2ggcmVmIgorbXNnc3RyICLqsIEg66CI7Y2865+w7Iqk7J2YIOygleuztOulvCDstpzroKXtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAi66mU7J28IOygnOy2nCDsmqnrj4TroZwg7Yyo7LmY66W8IOykgOu5hO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6OTkKK21zZ2lkICJWZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UiCittc2dzdHIgIuyXsOqysOydhCDtmZXsnbjtlZjqs6Ag642w7J207YSw67Kg7J207Iqk7J2YIOyYpOu4jOygne2KuOqwgCDsmKzrsJTrpbjsp4Ag7ZmV7J247ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi67aI7ZWE7JqU7ZWcIO2MjOydvOydhCDsp4DsmrDqs6Ag66Gc7LusIOyggOyepeyGjOulvCDstZzsoIHtmZTtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMQorbXNnaWQgIkV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlIgorbXNnc3RyICJnaXQtYXJjaGl2ZeuhnCDrp4zrk6Ag7JWE7Lm07J2067iM7JeQ7IScIOy7pOuwiyBJROulvCDstpTstpztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMgorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAi7Yyo7YS06rO8IOydvOy5mO2VmOuKlCDspITsnYQg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDMKK21zZ2lkICJBIHBvcnRhYmxlIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gR2l0IgorbXNnc3RyICLquYPsnZgg7Y+s7YSw67iUIOq3uOuemO2UvSDsnbjthLDtjpjsnbTsiqQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNAorbXNnaWQgIkNvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlIgorbXNnc3RyICLsmKTruIzsoJ3tirggSUTrpbwg6rOE7IKw7ZWY6rOgIOyEoO2DneyggeycvOuhnCDtjIzsnbzsnZgg67iU66Gt7J2EIOunjOuTreuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA1Cittc2dpZCAiRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IEdpdCIKK21zZ3N0ciAi6rmD7J2YIOuPhOybgOunkCDsoJXrs7Trpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDYKK21zZ2lkICJTZXJ2ZXIgc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgb3ZlciBIVFRQIgorbXNnc3RyICLquYMgSFRUUCDtlITroZzthqDsvZzsnZgg7ISc67KE7LihIOq1rO2YhCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAi7JuQ6rKpIOq5gyDsoIDsnqXshozsl5DshJwgSFRUUOulvCDthrXtlbQg64uk7Jq066Gc65Oc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIuyYpOu4jOygne2KuOulvCBIVFRQL0RBVuulvCDthrXtlbQg64uk66W4IOyggOyepeyGjOuhnCDtkbjsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgZnJvbSBzdGRpbiB0byBhbiBJTUFQIGZvbGRlciIKK21zZ3N0ciAi7ZGc7KSA7J6F66Cl7JeQ7IScIO2MqOy5mCDrqqjsnYzsnYQg7J297Ja0IElNQVAg7Y+0642U66GcIOuztOuDheuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTEwCittc2dpZCAiQnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAi6riw7KG0IOustuydjCDslYTsubTsnbTruIzsl5Ag64yA7ZWcIOustuydjCDsnbjrjbHsiqQg7YyM7J287J2EIOunjOuTreuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIuu5iCDquYMg7KCA7J6l7IaM66W8IOunjOuTpOqxsOuCmCDquLDsobQg7KCA7J6l7IaM66W8IOuLpOyLnCDstIjquLDtmZTtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMgorbXNnaWQgIkluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIgorbXNnc3RyICLrgrQg7J6R7JeFIOyggOyepeyGjOulvCBnaXR3ZWLsl5DshJwg7KaJ7IucIOyCtO2OtOu0heuLiOuLpCIKKworIyAqICJTaWduZWQtb2ZmLWJ5OiBuYW1lIiDqsJnsnYAg7KCV67O066W8IOunkO2VnOuLpAorIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiYWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeA7JeQIOq1rOyhsO2ZlOuQnCDsoJXrs7Trpbwg7LaU6rCA7ZWY6rGw64KYIOygleuztOulvCDtjIzsi7Htlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNAorbXNnaWQgIlRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyIgorbXNnc3RyICLquYMg7KCA7J6l7IaMIOyCtO2OtOuztOq4sCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE1Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAi7Luk67CLIOq4sOuhneydhCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLsnbjrjbHsiqTsmYAg7J6R7JeFIO2PtOuNlOydmCDtjIzsnbzsl5Ag64yA7ZWcIOygleuztOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IgorbXNnc3RyICLsm5Dqsqkg7KCA7J6l7IaM7J2YIOugiO2NvOufsOyKpOulvCDsl7TqsbDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIu2KuOumrCDsmKTruIzsoJ3tirjsnZgg64K07Jqp7J2EIOyXtOqxsO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE5Cittc2dpZCAiRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSIKK21zZ3N0ciAi7ZWY64KY7J2YIOuplOydvCDrqZTsi5zsp4Dsl5DshJwg7Yyo7LmY7JmAIOyekeyEseyekCDsoJXrs7Trpbwg672R7JWE64OF64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgIuqwhOuLqO2VnCDsnKDri4nsiqQgbWJveCDsqrzqsJzquLAg7ZSE66Gc6re4656oIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjEKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAi7Jes65+sIOqwnOydmCDqsJzrsJwg64K07Jet7J2EIO2VmOuCmOuhnCDtlansuanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICLrs5Htlansl5Ag7IKs7Jqp7ZWgIOy1nOyEoOydmCDqs7XthrUg6rO86rGwIOy7pOuwi+ydhCDssL7sirXri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMworbXNnaWQgIlJ1biBhIHRocmVlLXdheSBmaWxlIG1lcmdlIgorbXNnc3RyICIzLeuwqe2WpSDtjIzsnbwg67OR7ZWp7J2EIOyLpO2Wie2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAi67OR7ZWp7J20IO2VhOyalO2VnCDtjIzsnbzsl5Ag64yA7ZW0IOuzke2VqeydhCDsi6Ttlontlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNQorbXNnaWQgIlRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBnaXQtbWVyZ2UtaW5kZXgiCittc2dzdHIgImdpdC1tZXJnZS1pbmRleOyZgCDqsJnsnbQg7IKs7Jqp7ZWY64qUIOq4sOuzuCDrj4Tsm4Ag7ZSE66Gc6re4656oIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAi67OR7ZWpIOy2qeuPjCDsg4Htmansl5DshJwg67OR7ZWpIOy2qeuPjCDtlbTqsrAg64+E6rWs66W8IOyLpO2Wie2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAi7J24642x7Iqk66W8IOuwlOq+uOyngCDslYrqs6AgMy3rsKntlqUg67OR7ZWp7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIu2DnOq3uCDsmKTruIzsoJ3tirjrpbwg66eM65Ot64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjkKK21zZ2lkICJCdWlsZCBhIHRyZWUtb2JqZWN0IGZyb20gbHMtdHJlZSBmb3JtYXR0ZWQgdGV4dCIKK21zZ3N0ciAibHMtdHJlZSDtj6zrp7fsnZgg7YWN7Iqk7Yq47JeQ7IScIHRyZWUtb2JqZWN066W8IOunjOuTreuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICLtjIzsnbwsIOuUlOugie2EsOumrCwg7Ius67O866atIOunge2BrOulvCDsmK7quLDqsbDrgpgg7J2066aE7J2EIOuwlOq/ieuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cyIKK21zZ3N0ciAi7KO87Ja07KeEIOumrOu5hOyghOyXkCDrjIDtlZwg7Ius67O8IOydtOumhOydhCDssL7sirXri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMgorbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAi7Jik67iM7KCd7Yq4IOuFuO2KuOulvCDstpTqsIDtlZjqsbDrgpgg7IK07Y6067SF64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzMKK21zZ2lkICJJbXBvcnQgZnJvbSBhbmQgc3VibWl0IHRvIFBlcmZvcmNlIHJlcG9zaXRvcmllcyIKK21zZ3N0ciAiUGVyZm9yY2Ug7KCA7J6l7IaM7JeQ7IScIOqwgOyguOyYpOqxsOuCmCDsoIDsnqXshozroZwg7KCc7Lac7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzQKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICLsmKTruIzsoJ3tirjsnZgg66y27J2MIOyVhOy5tOydtOu4jOulvCDrp4zrk63ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNQorbXNnaWQgIkZpbmQgcmVkdW5kYW50IHBhY2sgZmlsZXMiCittc2dzdHIgIuykkeuzteuQnCDrrLbsnYwg7YyM7J287J2EIOywvuyKteuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiUGFjayBoZWFkcyBhbmQgdGFncyBmb3IgZWZmaWNpZW50IHJlcG9zaXRvcnkgYWNjZXNzIgorbXNnc3RyICLtmqjsnKjsoIHsnbgg7KCA7J6l7IaMIOygkeq3vOydhCDsnITtlbQg7Zek65Oc7JmAIO2DnOq3uOulvCDrrLbsirXri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNworbXNnaWQgIlJvdXRpbmVzIHRvIGhlbHAgcGFyc2luZyByZW1vdGUgcmVwb3NpdG9yeSBhY2Nlc3MgcGFyYW1ldGVycyIKK21zZ3N0ciAi7JuQ6rKpIOyggOyepeyGjCDsoJHqt7wg7YyM652866+47YSw66W8IO2MjOyLse2VmOuKlOuNsCDsgqzsmqntlZjripQg6rO17Ya1IOq4sOuKpSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM4Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgIu2MqOy5mOyXkCDrjIDtlZwg7Jyg7J287ZWcIElE66W8IOqzhOyCsO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLsmKTruIzsoJ3tirgg642w7J207YSw67Kg7J207Iqk7JeQ7IScIOuPhOuLrO2VoCDsiJgg7JeG64qUIOyYpOu4jOygne2KuOulvCDrqqjrkZAg7J6Y652864OF64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDAKK21zZ2lkICJSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMiCittc2dzdHIgIuustuydjCDtjIzsnbzsl5Ag7J2066+4IOuTpOyWtCDsnojripQg7Jik67iM7KCd7Yq466W8IOy2lOqwgOuhnCDsoJzqsbDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAi64uk66W4IOyggOyepeyGjCDrmJDripQg64uk66W4IOuhnOy7rCDruIzrnpzsuZjsl5DshJwg6rCA7KC47Jik6rGw64KYIO2Gte2Vqe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQyCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLsm5Dqsqkg66CI7Y2865+w7IqkIOuwjyDqt7jsmYAg6rSA66Co65CcIOyYpOu4jOygne2KuOulvCDsl4XrjbDsnbTtirjtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mOyXkCBxdWlsdCDtjKjsuZgg66qo7J2M7J2EIOyggeyaqe2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ0Cittc2dpZCAiUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleCIKK21zZ3N0ciAi7Yq466asIOygleuztOulvCDsnbjrjbHsiqTroZwg7J297Iq164uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDUKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIuy7pOuwi+ydhCDri6Trpbgg67Kg7J207IqkIOuBneydmCDstZzsg4HsnITsl5DshJwg7KCB7Jqp7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKK21zZ2lkICJSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIuyggOyepeyGjOyXkCDtkbjsi5ztlZwg64K07Jqp7J2EIOuwm+yKteuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAicmVmbG9nIOygleuztOulvCDqtIDrpqztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIk1hbmFnZSBzZXQgb2YgdHJhY2tlZCByZXBvc2l0b3JpZXMiCittc2dzdHIgIuy2lOygge2VmOuKlCDsoIDsnqXshowg66qo7J2M7J2EIOq0gOumrO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ5Cittc2dpZCAiUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAi7KCA7J6l7IaM7J2YIOustuyXrOyngOyngCDslYrsnYAg7Jik67iM7KCd7Yq466W8IOustuyKteuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUwCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgIuyYpOu4jOygne2KuOulvCDrsJTqvrjripQg66CI7Y2865+w7Iqk66W8IOunjOuTpOqxsOuCmCwg7ZGc7Iuc7ZWY6rGw64KYLCDsgq3soJztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MQorbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICLsmIjsoJXrkJwg67OA6rK9IOyCrO2VreydmCDsmpTslb3snYQg66eM65Ot64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTIKK21zZ2lkICJSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIgorbXNnc3RyICLstqnrj4ztlZjripQg67OR7ZWp7J2YIOq4sOuhneuQnCDtlbTqsrAg67Cp67KV7J2EIOuLpOyLnCDsgqzsmqntlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLtmITsnqwgSEVBROulvCDsp4DsoJXtlZwg7IOB7YOc66GcIOyerOyEpOygle2ZlO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV2ZXJ0IHNvbWUgZXhpc3RpbmcgY29tbWl0cyIKK21zZ3N0ciAi6riw7KG0IOy7pOuwi+ydhCDrkJjrj4zrpr3ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAi7Iuc6rCEIOuwmOuMgCDsiJzshJzsl5Ag65Sw6528IOy7pOuwiyDsmKTruIzsoJ3tirjrpbwg7Je06rGw7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJQaWNrIG91dCBhbmQgbWFzc2FnZSBwYXJhbWV0ZXJzIgorbXNnc3RyICLtjIzrnbzrr7jthLDrpbwg7LC+7JWE64K07IScIOyhsOygle2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTU3Cittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIu2MjOydvOydhCDsnpHsl4Ug7Y+0642U7JeQ7IScIOygnOqxsO2VmOqzoCDsnbjrjbHsiqTsl5DshJzrj4Qg7KCc6rGw7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTgKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGFzIGVtYWlscyIKK21zZ3N0ciAi7Yyo7LmYIOuqqOydjOydhCDrqZTsnbzroZwg67O064OF64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTkKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLsmKTruIzsoJ3tirjrpbwg6rmDIO2UhOuhnO2GoOy9nOydhCDthrXtlbQg64uk66W4IOyggOyepeyGjOuhnCDtkbjsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MAorbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIuq5g+unjCDsgqzsmqntlZjripQgU1NIIOygkeq3vOyXkCDtlYTsmpTtlZwg7KCc7ZWc65CcIOuhnOq3uOyduCDshbgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0IgorbXNnc3RyICInZ2l0IGxvZycg7Lac66Cl7J2EIOyalOyVve2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIuyXrOufrOqwgOyngCDsooXrpZjsnZgg7Jik67iM7KCd7Yq466W8IO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYzCittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAi67iM656c7LmYIOuqqeuhneqzvCDqt7gg7Luk67CL7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY0Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAi66y27Jes7KeEIOyVhOy5tOydtOu4jCDsnbjrjbHsiqTrpbwg7ZGc7Iuc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjUKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLroZzsu6wg7KCA7J6l7IaM7J2YIOugiO2NvOufsOyKpOulvCDsl7TqsbDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIkdpdCdzIGkxOG4gc2V0dXAgY29kZSBmb3Igc2hlbGwgc2NyaXB0cyIKK21zZ3N0ciAi7IW4IOyKpO2BrOumve2KuOulvCDsnITtlZwg6rmD7J2YIOq1reygnO2ZlCDspIDruYQg7L2U65OcIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJDb21tb24gR2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlIgorbXNnc3RyICLqs7XthrUg6rmDIOyFuCDsiqTtgazrpr3tirgg7KSA67mEIOy9lOuTnCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICLsnpHsl4Ug7Y+0642U7J2YIOuzgOqyvSDsgqztla3snYQg7J6E7Iuc66GcIOuLpOuluCDqs7Psl5Ag7KCA7J6l7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjkKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgc3RhZ2luZyBhcmVhIgorbXNnc3RyICLtjIzsnbwg64K07Jqp7J2EIOyKpO2FjOydtOynlSDsmIHsl63sl5Ag7LaU6rCA7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzAKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICLsnpHsl4Ug7Y+0642UIOyDge2DnOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICLrtojtlYTsmpTtlZwg6rO167CxIOusuOyekOulvCDsoJzqsbDtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MgorbXNnaWQgIkluaXRpYWxpemUsIHVwZGF0ZSBvciBpbnNwZWN0IHN1Ym1vZHVsZXMiCittc2dzdHIgIu2VmOychCDrqqjrk4jsnYQg7LSI6riw7ZmU7ZWY6rGw64KYLCDsl4XrjbDsnbTtirjtlZjqsbDrgpgsIOyhsOyCrO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICLshJzruIzrsoTsoIQg7KCA7J6l7IaM7JmAIOq5gyDsgqzsnbTsnZgg7JaR67Cp7ZalIOuPmeyekSIKKworIzogY29tbWFuZC1saXN0Lmg6MTc0Cittc2dpZCAiUmVhZCwgbW9kaWZ5IGFuZCBkZWxldGUgc3ltYm9saWMgcmVmcyIKK21zZ3N0ciAi7Ius67O866atIOugiO2NvOufsOyKpOulvCDsnb3qs6AsIOyImOygle2VmOqzoCwg7IKt7KCc7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzUKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAi7YOc6re466W8IOunjOuTpOqxsOuCmCwg7ZGc7Iuc7ZWY6rGw64KYLCDsgq3soJztlZjqsbDrgpgsIEdQRyDshJzrqoXsnYQg6rKA7Kad7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzYKK21zZ2lkICJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cyIKK21zZ3N0ciAi67iU66Gt7J2YIOuCtOyaqeycvOuhnCDsnoTsi5wg7YyM7J287J2EIOunjOuTreuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICLrrLbsnYwg7JWE7Lm07J2067iM7JeQ7IScIOyYpOu4jOygne2KuOulvCDtkoDslrTrg4Xri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3OAorbXNnaWQgIlJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgiCittc2dzdHIgIuyekeyXhSDtj7TrjZTsl5DshJwg7YyM7J28IOuCtOyaqeydhCDsnbjrjbHsiqTsl5Ag65Ox66Gd7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIuugiO2NvOufsOyKpOyXkCDsoIDsnqXrkJwg7Jik67iM7KCd7Yq4IOydtOumhOydhCDslYjsoITtlZjqsowg7JeF642w7J207Yq47ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJVcGRhdGUgYXV4aWxpYXJ5IGluZm8gZmlsZSB0byBoZWxwIGR1bWIgc2VydmVycyIKK21zZ3N0ciAi64uo7IicIOyEnOuyhOyXkCDrj4Tsm4DsnYQg7KO864+E66GdIOuztOyhsCDsoJXrs7Qg7YyM7J287J2EIOyXheuNsOydtO2KuO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTgxCittc2dpZCAiU2VuZCBhcmNoaXZlIGJhY2sgdG8gZ2l0LWFyY2hpdmUiCittc2dzdHIgIuyVhOy5tOydtOu4jOulvCDri6Tsi5wgZ2l0LWFyY2hpdmXroZwg67O064OF64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODIKK21zZ2lkICJTZW5kIG9iamVjdHMgcGFja2VkIGJhY2sgdG8gZ2l0LWZldGNoLXBhY2siCittc2dzdHIgIuustuydgCDsmKTruIzsoJ3tirjrpbwg64uk7IucIGdpdC1mZXRjaC1wYWNr7Jy866GcIOuztOuDheuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICLquYPsnZgg64W866as7KCBIOuzgOyImOulvCDtkZzsi5ztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgIuy7pOuwi+ydmCBHUEcg7ISc66qF7J2EIO2ZleyduO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICLrrLbsnYwg6rmDIOyVhOy5tOydtOu4jCDtjIzsnbzsnYQg6rKA7Kad7ZWp64uI64ukIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODYKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzIgorbXNnc3RyICLtg5zqt7jsnZggR1BHIOyEnOuqheydhCDtmZXsnbjtlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NworbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgIuq5gyDsm7kg7J247YSw7Y6Y7J207IqkICjquYMg7KCA7J6l7IaM7JeQIOuMgO2VnCDsm7kg7ZSE66Gg7Yq47JeU65OcKSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICLqsIEg7Luk67CL7Jy866GcIOuwnOyDne2VmOuKlCDssKjsnbTsoJDrp4jri6Qg6riw66Gd7J2EIO2RnOyLnO2VqeuLiOuLpCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiTWFuYWdlIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMiCittc2dzdHIgIuyXrOufrCDqsJzsnZgg7J6R7JeFIO2PtOuNlOulvCDqtIDrpqztlanri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MAorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIu2YhOyerCDsnbjrjbHsiqTsl5DshJwg7Yq466asIOyYpOu4jOygne2KuOulvCDrp4zrk63ri4jri6QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MQorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgIuqyveuhnOuniOuLpCDsho3shLEg7KCV7J2Y7ZWY6riwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgY29udmVudGlvbnMiCittc2dzdHIgIuq5gyDrqoXroLntlokg7J247YSw7Y6Y7J207IqkIOuwjyDqtIDsirUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MworbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgIuqwnOuwnOyekOulvCDsnITtlZwg6rmDIO2VteyLrCDrlLDrnbztlZjquLAg66y47IScIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTQKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiQ1ZTIOyCrOyaqeyekOulvCDsnITtlZwg6rmDIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTUKK21zZ2lkICJUd2Vha2luZyBkaWZmIG91dHB1dCIKK21zZ3N0ciAiZGlmZiDstpzroKUg66+47IS4IOyhsOyglSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiQSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMgZm9yIEV2ZXJ5ZGF5IEdpdCIKK21zZ3N0ciAi66ek7J2866ek7J28IOycoOyaqe2VmOqyjCDsgqzsmqntlaAg7LWc7IaM7ZWc7J2YIOq5gyDrqoXroLnslrQg66qo7J2MIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTcKK21zZ2lkICJBIEdpdCBHbG9zc2FyeSIKK21zZ3N0ciAi6rmDIOyaqeyWtCDsgqzsoIQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkhvb2tzIHVzZWQgYnkgR2l0IgorbXNnc3RyICLquYPsl5DshJwg7IKs7Jqp7ZWY64qUIO2bhO2BrCIKKworIzogY29tbWFuZC1saXN0Lmg6MTk5Cittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAi7J2Y64+E7KCB7Jy866GcIOy2lOygge2VmOyngCDslYrripQg7YyM7J287J2EIOustOyLnO2VmOqyjCDsp4DsoJXtlZjquLAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOyGjeyEsSDsoJXsnZjtlZjquLAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMQorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICLquYMg64Sk7J6E7Iqk7Y6Y7J207IqkIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSBMYXlvdXQiCittc2dzdHIgIuq5gyDsoIDsnqXshowg6rWs7KGwIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDMKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIuq5g+ydmCDrpqzruYTsoIQg67CPIOuylOychOulvCDsp4DsoJXtlZjquLAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdDogcGFydCB0d28iCittc2dzdHIgIuq5gyDrlLDrnbztlZjquLAg7JWI64K07IScOiAy67aAIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgIuq5gyDrlLDrnbztlZjquLAg7JWI64K07IScIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDYKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIuy2lOyynO2VmOuKlCDquYMg7Zmc7JqpIOyekeyXhSDsiJzshJzsnZgg6rCc7JqUIgorCisjOiByZXJlcmUuaDo0MAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAi6rCA64ql7ZWY66m0IOyduOuNseyKpOulvCDsnqzsgqzsmqntlZwg7Lap64+MIO2VtOqysOuhnCDsl4XrjbDsnbTtirjtlanri4jri6QiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiXCJnaXQgYmlzZWN0IHN0YXJ0XCIg66qF66C57Jy866GcIOyLnOyeke2VtOyVvCDtlanri4jri6QiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo2MAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAi7KeA6riIIO2VmOyLnOqyoOyKteuLiOq5jCBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRhcmcnIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDsmLXshZg6ICckYXJnJyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyRhcmcn7J2AKOuKlCkg7Jis67CU66W4IOumrOu5hOyghOyymOufvCDrs7TsnbTsp4Ag7JWK7Iq164uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjE1NAorbXNnaWQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAi7J6Y66q765CcIEhFQUQgLSBIRUFE6rCAIO2VhOyalO2VqeuLiOuLpCIKKworIzogZ2l0LWJpc2VjdC5zaDoxNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVja2luZyBvdXQgJyRzdGFydF9oZWFkJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisiJyRzdGFydF9oZWFkJyDrsJvslYTsmKTquLDqsIAg7Iuk7Yyo7ZaI7Iq164uI64ukLiAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWQtYnJhbmNoPifrpbwgIgorIu2VtCDrs7Tsi63si5zsmKQuIgorCisjOiBnaXQtYmlzZWN0LnNoOjE3NworbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgImNnLXNlZWvtlZwg7Yq466as7JeQ7IScIGJpc2VjdOulvCDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LWJpc2VjdC5zaDoxODEKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICLsnpjrqrvrkJwgSEVBRCAtIOyLrOuzvOumrSDroIjtjbzrn7DsiqTqsIAg7J6Y66q765CY7JeI7Iq164uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMworIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJHN0YXRlIgorbXNnc3RyICLsnpjrqrvrkJwgYmlzZWN0X3dyaXRlIOyduOyekDogJHN0YXRlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAi7J6Y66q765CcIOumrOu5hOyghCDsnoXroKU6ICRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MjY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYmlzZWN0ZWRfaGVhZCIKK21zZ3N0ciAi7J6Y66q765CcIOumrOu5hOyghCDsnoXroKU6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjI3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAi7J6Y66q765CcIOumrOu5hOyghCDsnoXroKU6ICRyZXYiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyDrqoXroLnsnYAg7ZWY64KY7J2YIOyduOyekOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBiaXNlY3Rpbmcgb25seSB3aXRoIGEgJFRFUk1fQkFEIGNvbW1pdC4iCittc2dzdHIgIuqyveqzoDog7ZWY64KY7J2YICRURVJNX0JBRCDsu6TrsIvsl5Ag64yA7ZW07ISc66eMIOydtOuTseu2hC4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDozMTIKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAi7ZmV7Iuk7ZWp64uI6rmMIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGJhZF9zeW4gYW5kIG9uZSAkZ29vZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIuy1nOyGjO2VnCDtlZjrgpjsnZggJGJhZF9zeW4g67CPIO2VmOuCmOydmCAkZ29vZF9zeW4g66as67mE7KCE7J2EIOuEmOqyqOyVvCDtlanri4jri6QuXG4iCisiKFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIOuwjyBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIg66qF66C57J2EIOyLpO2Wie2VmOuptCDrkKnri4jri6QuKSIKKworIzogZ2l0LWJpc2VjdC5zaDozMjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRnb29kX3N5biBhbmQgb25lICRiYWRfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyJcImdpdCBiaXNlY3Qgc3RhcnRcIuulvCDsi6TtlontlbTslbwg7ZWp64uI64ukLlxuIgorIuq3uCDri6TsnYwg7LWc7IaM7ZWcIO2VmOuCmOydmCAkZ29vZF9zeW4g67CPIO2VmOuCmOydmCAkYmFkX3N5biDrpqzruYTsoITsnYQg64SY6rKo7JW8IO2VqeuLiOuLpFxuIgorIihcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiDrsI8gXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIOuqheugueydhCDsi6TtlontlZjrqbQg65Cp64uI64ukLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mzk4IGdpdC1iaXNlY3Quc2g6NTEyCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICLsnbTrk7HrtoTtlZjripQg7KSR7J6F64uI64ukLiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorbXNnc3RyICInJGludmFsaWQn7J2AKOuKlCkg7Jis67CU66W4IOy7pOuwi+ydtCDslYTri5nri4jri6QiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICckYnJhbmNoJy5cbiIKKyJUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorIuuzuOuemOydmCBIRUFEICckYnJhbmNoJ+ydhCjrpbwpIOyytO2BrOyVhOybg+2VoCDsiJgg7JeG7Iq164uI64ukLlxuIgorIidnaXQgYmlzZWN0IHJlc2V0IDzsu6TrsIs+J+ydhCDtlbQg67O07Iut7Iuc7JikIgorCisjOiBnaXQtYmlzZWN0LnNoOjQyMgorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIuuhnOq3uCDtjIzsnbzsnbQg7KO87Ja07KeA7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogZ2l0LWJpc2VjdC5zaDo0MjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgIuuLpOyLnCDsnqzsg53tlaAgJGZpbGUg7YyM7J287J2EIOydveydhCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ0NAorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8g66y07IqoIOyGjOumrOyduOyngCDrqqjrpbTqsqDsirXri4jri6Q/IgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1MworbXNnaWQgImJpc2VjdCBydW4gZmFpbGVkOiBubyBjb21tYW5kIHByb3ZpZGVkLiIKK21zZ3N0ciAi7J2065Ox67aEIOyLpO2WieydtCDsi6TtjKjtlojsirXri4jri6Q6IOyjvOyWtOynhCDrqoXroLnslrTqsIAg7JeG7Iq164uI64ukLiIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgIuyLpO2WiTogJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyLsnbTrk7HrtoQg7Iuk7ZaJ7J20IOyLpO2MqO2WiOyKteuLiOuLpDpcbiIKKyInJGNvbW1hbmQnIOuqheugueyXkOyEnCDsg4Htg5wg7L2U65OcICckcmVzJ+ydtCjqsIApIDDrs7Tri6Qg7J6R6rGw64KYIDEyOOuztOuLpCDtgb3ri4jri6QiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDkxCittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgIuydtOuTseu2hCDsi6TtlonsnYQg6rOE7IaNIO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ5NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyLsnbTrk7HrtoQg7Iuk7ZaJ7J20IOyLpO2MqO2WiOyKteuLiOuLpDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScg66qF66C57JeQ7IScIOyDge2DnCDsvZTrk5zqsIAgJyRyZXMn7J6F64uI64ukIgorCisjOiBnaXQtYmlzZWN0LnNoOjUwNAorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAi7J2065Ox67aEIOyLpO2WiSDshLHqs7UiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTMzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAkVEVSTV9CQUQvJFRFUk1fR09PRCBiaXNlY3QuIgorbXNnc3RyICLsnpjrqrvrkJwg66qF66C57Ja0OiDtmITsnqwgJFRFUk1fQkFELyRURVJNX0dPT0Qg7J2065Ox67aEIOykkeyeheuLiOuLpC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6NTY3Cittc2dpZCAibm8gdGVybXMgZGVmaW5lZCIKK21zZ3N0ciAi7Jqp7Ja066W8IOygleydmO2VmOyngCDslYrslZjsirXri4jri6QiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTg0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAkYXJnIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisiJ2dpdCBiaXNlY3QgdGVybXMn7JeQIOuMgO2VtCDsnpjrqrvrkJwg7J247J6QICckYXJnJy5cbiIKKyLsp4Dsm5DtlZjripQg7Ji17IWY7J2AOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIOuwjyAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICLsmKTrpZg6IOuLpOydjCDtjIzsnbzsnZgg66Gc7LusIOuzgOqyvSDsgqztla3snYQg67OR7ZWpIOuVjOusuOyXkCDrja7slrQg7JOw6rKMIOuQqeuLiOuLpC4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIuyekOuPmSDrs5HtlansnbQg64+Z7J6R7ZWY7KeAIOyViuyVmOyKteuLiOuLpC4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYyCittc2dpZCAiU2hvdWxkIG5vdCBiZSBkb2luZyBhbiBvY3RvcHVzLiIKK21zZ3N0ciAi7Jil7Yag7Y287IqkIOyghOuetSDrs5HtlansnYQg7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiJHByZXR0eV9uYW1lKOycvCnroZwg6rO17Ya1IOy7pOuwi+ydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi7J2066+4ICRwcmV0dHlfbmFtZeyXkCDsl4XrjbDsnbTtirgg7IOB7YOc7J6F64uI64ukIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHRvOiAkcHJldHR5X25hbWUiCittc2dzdHIgIuuLpOydjOycvOuhnCDsoJXrsKntlqUg7KeE7ZaJOiAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjk3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICIkcHJldHR5X25hbWXsl5Ag6rCE64uo7ZWcIOuzke2VqSDsi5zrj4Ttlanri4jri6QiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICLqsITri6jtlZwg67OR7ZWp7J20IOuPmeyeke2VmOyngCDslYrsirXri4jri6QuIOyekOuPmSDrs5HtlansnYQg7Iuc64+E7ZWp64uI64ukLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MQorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorbXNnc3RyICIiCisi66qo65OgIOy2qeuPjOydhCDsiJjrj5nsnLzroZwg7ZW06rKw7ZWY6rOgLCDrqqjrkZAgXCJnaXQgYWRkL3JtIDzstqnrj4xf7YyM7J28PlwiIOuqheugueycvOuhnFxuIgorIu2VtOqysO2WiOuLpOqzoCDtkZzsi5ztlZjqs6AsIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIg66qF66C57J2EIOyLpO2Wie2VmOyLreyLnOyYpC4g7J20IO2MqOy5mCIKKyLrpbxcbiIKKyLqsbTrhIjrm7DroKTrqbQsIOuMgOyLoOyXkCBcImdpdCByZWJhc2UgLS1za2lwXCIg66qF66C57J2EIOyLpO2Wie2VmOyLreyLnOyYpC4g66as67Kg7J207Iqk66W8XG4iCisi7KSR7KeA7ZWY6rOgIFwiZ2l0IHJlYmFzZVwiIOuqheuguSDsoITsnZgg7JuQ656YIOyDge2DnOuhnCDrj4zslYTqsIDroKTrqbQsIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiXG4iCisi66qF66C57J2EIOyLpO2Wie2VmOyLreyLnOyYpC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTczIGdpdC1yZWJhc2Uuc2g6NDQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbW92ZSBiYWNrIHRvICRoZWFkX25hbWUiCittc2dzdHIgIickaGVhZF9uYW1lJyDsnITsuZjroZwg64+M7JWE6rCIIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTg0Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICLsnpDrj5nsiqTtg5zsi5wg7KCB7JqpLiIKKworIzogZ2l0LXJlYmFzZS5zaDoxODcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAiXCIkc3Rhc2hfc2hhMVwi7J2EKOulvCkg7KCA7J6l7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjI5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIuumrOuyoOydtOyKpCDsoIQg7ZuE7YGs7JeQ7IScIOumrOuyoOydtOyKpOulvCDqsbDrtoDtlojsirXri4jri6QuIgorCisjOiBnaXQtcmViYXNlLnNoOjIzNAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICInZ2l0IGFtJ+ydtCDsp4Ttlokg7KSR7J24IOqyg+yymOufvCDrs7TsnoXri4jri6QuIOumrOuyoOydtOyKpO2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogZ2l0LXJlYmFzZS5zaDo0MDMKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICLrpqzrsqDsnbTsiqTqsIAg7KeE7ZaJIOykkeydtOyngCDslYrsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDE0Cittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICItLWVkaXQtdG9kbyDrj5nsnpHsnYAg64yA7ZmU7ZiVIOumrOuyoOydtOyKpOyXkOyEnOunjCDsgqzsmqntlaAg7IiYIOyeiOyKteuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDIxCittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiSEVBROulvCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS5zaDo0MjQKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyLrqqjrk6Ag67OR7ZWpIOy2qeuPjOydhCDtjrjsp5HtlZjqs6AgZ2l0IGFkZFxuIgorIuuqheugueycvOuhnCDtlbTqsrDrkJjsl4jri6Tqs6Ag7ZGc7Iuc7ZW07JW8IO2VqeuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS5zaDo0NjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuIgorbXNnc3RyICIiCisi7J2066+4ICckc3RhdGVfZGlyX2Jhc2UnIOuUlOugie2EsOumrOqwgCDsnojripQg6rKD7Jy866GcIOuztOyVhCwg7J2066+4XG4iCisi65iQIOuLpOuluCDrpqzrsqDsnbTsiqQg7KSR7JeQIOyeiOuKlCDqsoMg6rCZ7Iq164uI64ukLiDqt7jrn6ztlZwg6rK97Jqw7JeQ64qUXG4iCisi64uk7J2M7J2EIOyLnOuPhO2VtCDrs7Tsi63si5zsmKQ6XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisi66as67Kg7J207IqkIOykkeydtCDslYTri4jrnbzrqbQg64uk7J2M7J2EIOyLnOuPhO2VmOqzoCxcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisi7J20IOuqheugueydhCDri6Tsi5wg7Iuk7ZaJ7ZWY7Iut7Iuc7JikLiDspJHsmpTtlZwg7IKs7ZWt7J20IOuCqOyVhCDsnojsnYQg6rK97Jqw66W8XG4iCisi64yA67mE7ZW0IOyXrOq4sOyEnCDrqYjstqXri4jri6QuIgorCisjOiBnaXQtcmViYXNlLnNoOjUwOQorbXNnaWQgImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1zaWdub2ZmJyB3aXRoICctLXByZXNlcnZlLW1lcmdlcyciCittc2dzdHIgIiIKKyLsmKTrpZg6ICctLXNpZ25vZmYnIOyYteyFmOqzvCAnLS1wcmVzZXJ2ZS1tZXJnZXMnIOyYteyFmOydhCDqsJnsnbQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICckdXBzdHJlYW1fbmFtZSciCittc2dzdHIgIuyemOuqu+uQnCDsl4XsiqTtirjrprwgJyR1cHN0cmVhbV9uYW1lJyIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorbXNnc3RyICIkb250b19uYW1lOiDsl6zrn6wg6rCc7J2YIOuzke2VqSDrsqDsnbTsiqTqsIAg7J6I7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLnNoOjU2NCBnaXQtcmViYXNlLnNoOjU2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJG9udG9fbmFtZTog67OR7ZWpIOuyoOydtOyKpOqwgCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogJG9udG9fbmFtZSIKK21zZ3N0ciAi7Jis67CU66W4IOy7pOuwi+ydhCDqsIDrpqztgqTsp4Ag7JWK7Iq164uI64ukOiAkb250b19uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJGJyYW5jaF9uYW1lJyIKK21zZ3N0ciAi7LmY66qF7KCBIOydtOyDgTog6re465+wIOu4jOuenOy5mC/su6TrsIvsnbQg7JeG7Iq164uI64ukICckYnJhbmNoX25hbWUnIgorCisjOiBnaXQtcmViYXNlLnNoOjYzMgorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIuyekOuPmSDsiqTtg5zsi5zrpbwg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKK21zZ3N0ciAi7J6Q64+ZIOyKpO2DnOyLnOulvCDrp4zrk6Tsl4jsirXri4jri6Q6ICRzdGFzaF9hYmJyZXYiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjQxCittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAi7Luk67CL7ZWY6rGw64KYIOyKpO2DnOyLnOyXkCDrhKPsnLzsi63si5zsmKQuIgorCisjOiBnaXQtcmViYXNlLnNoOjY2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiSEVBROqwgCDstZzsi6Ag7IOB7YOc7J6F64uI64ukLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2NjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAi7ZiE7J6sIOu4jOuenOy5mOqwgCAoJGJyYW5jaF9uYW1lKSDstZzsi6Ag7IOB7YOc7J6F64uI64ukLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIkhFQUTqsIAg7LWc7IugIOyDge2DnOyeheuLiOuLpC4g6rCV7KCcIOumrOuyoOydtOyKpO2VqeuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6Njc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIu2YhOyerCDruIzrnpzsuZjqsIAgKCRicmFuY2hfbmFtZSkg7LWc7IugIOyDge2DnOyeheuLiOuLpC4g6rCV7KCcIOumrOuyoOydtOyKpO2VqeuLiOuLpC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6Njg4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKK21zZ3N0ciAi67OA6rK9IOyCrO2VrSAnJG1iJ+yXkOyEnCAnJG9udG8nKOycvCnroZw6IgorCisjOiBnaXQtcmViYXNlLnNoOjY5NworbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAi7J6R7JeFIOyCrO2VreydhCDri6Tsi5wg64Sj6riwIOychO2VtCDrqLzsoIAg7Zek65Oc66W8IOuSpOuhnCDrj4zrpr3ri4jri6QuLi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NzA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCittc2dzdHIgIiRicmFuY2hfbmFtZSDruIzrnpzsuZjrpbwgJG9udG9fbmFtZSDsnITsuZjroZwg7KCV67Cp7ZalIOynhO2Wie2VqeuLiOuLpC4iCisKKyM6IGdpdC1zdGFzaC5zaDo2MQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIOuqheugueydhCDtjIzrnbzrr7jthLDsmYAg6rCZ7J20IOyTsOq4sOuKlCDqtaztmITrkJjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6MTA4Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIuyVhOyngSDstZzstIgg7Luk67CL7J20IOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjEyMworbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICLtmITsnqwg7J24642x7IqkIOyDge2DnOulvCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjEzOAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuy2lOygge2VmOyngCDslYrripQg7YyM7J287J2EIOyggOyepe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6MTU4IGdpdC1zdGFzaC5zaDoxNzEKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAi7ZiE7J6sIOyekeyXhSDtj7TrjZQg7IOB7YOc66W8IOyggOyepe2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6MTc1Cittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAi67OA6rK9IOyCrO2VreydhCDshKDtg53tlZjsp4Ag7JWK7JWY7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6MTc4Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIuyehOyLnCDsnbjrjbHsiqTrpbwg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QgKOydvOyWtOuCoCDsiJgg7JeG64qUIOyDge2ZqSkiCisKKyM6IGdpdC1zdGFzaC5zaDoxOTEKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAi7J6R7JeFIO2PtOuNlCDsg4Htg5zrpbwg6riw66Gd7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDoyMjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAiJHJlZl9zdGFzaOydhCjrpbwpICR3X2NvbW1pdCjsnLwp66GcIOyXheuNsOydtO2KuO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6MjgxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBwdXNoJzogJG9wdGlvbiIKK21zZ3N0ciAi7Jik66WYOiAnc3Rhc2ggcHVzaCfsl5Ag64yA7ZW0IOyVjCDsiJgg7JeG64qUIOyYteyFmDogJG9wdGlvbiIKKworIzogZ2l0LXN0YXNoLnNoOjI5NQorbXNnaWQgIkNhbid0IHVzZSAtLXBhdGNoIGFuZCAtLWluY2x1ZGUtdW50cmFja2VkIG9yIC0tYWxsIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIiIKKyItLXBhdGNoIOyYteyFmOqzvCAtLWluY2x1ZGUtdW50cmFja2VkIOuYkOuKlCAtLWFsbCDsmLXshZjsnYQg64+Z7Iuc7JeQIOyTuCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6MzAzCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICLsoIDsnqXtlaAg66Gc7LusIOuzgOqyvSDsgqztla3snbQg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6MzA4Cittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIuyKpO2DnOyLnOulvCDstIjquLDtmZTtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjMxMgorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAi7ZiE7J6sIOyDge2DnOulvCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjMxMworIywgc2gtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICRzdGFzaF9tc2ciCittc2dzdHIgIuyekeyXhSDtj7TrjZTsmYAgJHN0YXNoX21zZyDsnbjrjbHsiqQg7IOB7YOc66W8IOyggOyepe2WiOyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjM0MgorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAi7J6R7JeF7Y+0642UIOuzgOqyvSDsgqztla3snYQg7KCc6rGw7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCDsmLXshZg6ICRvcHQiCisKKyM6IGdpdC1zdGFzaC5zaDo1MDMKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAi7Iqk7YOc7IucIO2VreuqqeydtCDsl4bsirXri4jri6QuIgorCisjOiBnaXQtc3Rhc2guc2g6NTEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICLrhIjrrLQg66eO7J2AIOumrOu5hOyghOydhCDsp4DsoJXtlojsirXri4jri6Q6ICRSRVYiCisKKyM6IGdpdC1zdGFzaC5zaDo1MjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNl7J2AKOuKlCkg7Jis67CU66W4IOugiO2NvOufsOyKpOqwgCDslYTri5nri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDo1NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIickYXJncyfsnYAo64qUKSDsiqTtg5zsi5wg7Luk67CL7J20IOyVhOuLmeuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjU2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIickYXJncyfsnYAo64qUKSDsiqTtg5zsi5wg66CI7Y2865+w7Iqk6rCAIOyVhOuLmeuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjU3MgorbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICLsnbjrjbHsiqTrpbwg7IOI66GcIOqzoOy5oCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6NTc2Cittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICLrs5Htlakg64+E7KSR7JeQIOyKpO2DnOyLnOulvCDsoIHsmqntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjU4NAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIuyduOuNseyKpOyXkCDstqnrj4wuIC0taW5kZXgg7JeG7J20IOyLnOuPhO2VtCDrs7Tsi63si5zsmKQuIgorCisjOiBnaXQtc3Rhc2guc2g6NTg2Cittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAi7J24642x7IqkIO2KuOumrOulvCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjU5NQorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IgorbXNnc3RyICLsiqTtg5zsi5wg7ZWt66qp7JeQ7IScIOy2lOygge2VmOyngCDslYrripQg7YyM7J287J2EIOuzteq1rO2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6NjIwCittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIuyImOygle2VnCDtjIzsnbzsnYQg7Iqk7YWM7J207KeA7JeQ7IScIOu6hCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3Rhc2guc2g6NjM1Cittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICLsnbjrjbHsiqTqsIAg7Iqk7YOc7Iuc7JeQ7IScIOu5oOyhjOyKteuLiOuLpC4iCisKKyM6IGdpdC1zdGFzaC5zaDo2NDkKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAi64uk7IucIO2VhOyalO2VoCDrlYzrpbwg64yA67mE7ZW0IOyKpO2DnOyLnCDtla3rqqnsnYQg67O06rSA7ZWp64uI64ukLiIKKworIzogZ2l0LXN0YXNoLnNoOjY1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiJHtSRVZ9IOyngOybgCAoJHMpIgorCisjOiBnaXQtc3Rhc2guc2g6NjU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IOyKpO2DnOyLnCDtla3rqqnsnYQg7KeA7Jq4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdGFzaC5zaDo2NjcKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIuu4jOuenOy5mCDsnbTrpoTsnYQg7KeA7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpCIKKworIzogZ2l0LXN0YXNoLnNoOjc0NgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKOuzteq1rO2VmOugpOuptCBcImdpdCBzdGFzaCBhcHBseVwi66W8IOyLpO2Wie2VmOyLreyLnOyYpCkiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTg4Cittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuyDgeuMgCDqsr3roZzripQg7J6R7JeFIO2PtOuNlOydmCDstZzsg4HsnITsl5DshJzrp4wg7JO4IOyImCDsnojsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICLsoIDsnqXshowgVVJMOiAnJHJlcG8nIOqwkuydgCDsoIjrjIAg6rK966Gc6rGw64KYIC4vIOuYkOuKlCAuLi/roZwg7Iuc7J6R7ZW07JW8IO2VqeuLiOuLpC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiJyRzbV9wYXRoJ+ydgCjripQpIOydtOuvuCDsnbjrjbHsiqTsl5Ag7J6I7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIyMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJ+ydgCjripQpIOydtOuvuCDsnbjrjbHsiqTsl5Ag7J6I6rOgIO2VmOychCDrqqjrk4jsnbQg7JWE64uZ64uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyLri6TsnYwg6rK966Gc64qUIC5naXRpZ25vcmUg7YyM7J287JeQ7IScIOustOyLnO2VqeuLiOuLpDpcbiIKKyIkc21fcGF0aFxuIgorIuygleunkOuhnCDstpTqsIDtlZjroKTrqbQgLWYg7Ji17IWY7J2EIOyCrOyaqe2VmOyLreyLnOyYpC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiJyRzbV9wYXRoJ+ydmCDquLDsobQg7KCA7J6l7IaM66W8IOyduOuNseyKpOyXkCDstpTqsIDtlanri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjUxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAiJyRzbV9wYXRoJ+ydtCjqsIApIOydtOuvuCDsnojqs6Ag7Jis67CU66W4IGdpdCDsoIDsnqXshozqsIAg7JWE64uZ64uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICInJHNtX25hbWUn7JeQIOuMgO2VnCDquYMg65SU66CJ7YSw66as6rCAIOuhnOy7rOyXkOyEnCDrpqzrqqjtirjqsIAg7J6I64qUIOyxhOuhnCDsnojsirXri4jri6Q6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI2MQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIuydtCDroZzsu6wg6rmDIOuUlOugie2EsOumrOulvCDri6TsnYwg7KCA7J6l7IaM7JeQ7IScIOuLpOyLnCDrs7XsoJztlZjripQg64yA7IugIOuLpOyLnCDsgqzsmqntlZjroKTrqbQsXG4iCisiICAkcmVhbHJlcG9cbiIKKyInLS1mb3JjZScg7Ji17IWY7J2EIOyCrOyaqe2VmOyLreyLnOyYpC4g66Gc7LusIOq5gyDrlJTroInthLDrpqzqsIAg7Jis67CU66W4IOyggOyepeyGjOqwgCDslYTri4jqsbDrgphcbiIKKyLrrLTsiqgg7J2Y66+47J247KeAIOyemCDrqqjrpbTqsqDsnLzrqbQgJy0tbmFtZScg7Ji17IWY7Jy866GcIOuLpOuluCDsnbTrpoTsnYQg7ISg7YOd7ZWY7Iut7Iuc7JikLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIuuhnOy7rCDquYMg65SU66CJ7YSw66as66W8ICckc21fbmFtZScg7ZWY7JyE66qo65OI66GcIOuLpOyLnCDtmZzshLHtmZTtlanri4jri6QuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3OQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICInJHNtX3BhdGgnIO2VmOychCDrqqjrk4jsnYQg7LK07YGs7JWE7JuD7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjg0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICInJHNtX3BhdGgnIO2VmOychCDrqqjrk4jsnYQg7LaU6rCA7ZWY64qU642wIOyLpO2MqO2WiOyKteuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiJyRzbV9wYXRoJyDtlZjsnIQg66qo65OI7J2EIOuTseuhne2VmOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiJyRkaXNwbGF5cGF0aCcg65Ok7Ja06rCQIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRkaXNwbGF5cGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICInJGRpc3BsYXlwYXRoJ+yXkOyEnCDrqYjstqQuIOyKpO2BrOumve2KuOqwgCAw7J20IOyVhOuLjCDsg4Htg5zrpbwg66as7YS07ZWoLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966Gc7JeQ7IScICgnJGRpc3BsYXlwYXRoJykg7ZiE7J6sIOumrOu5hOyghOydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJHNtX3BhdGgn7JeQ7IScIOqwgOyguOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisi7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyRzbV9wYXRoJ+yXkOyEnCDtmITsnqwgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IOumrOu5hOyghOydhCDssL7snYQg7IiYICIKKyLsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966GcICckZGlzcGxheXBhdGgn7JeQ7IScIOqwgOyguOyYrCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorIickZGlzcGxheXBhdGgnIO2VmOychCDrqqjrk4gg6rK966Gc7JeQ7IScIOqwgOyguOyZlOyngOunjCwgJHNoYTEg7Luk67CL7J20IOuTpOyWtOyeiOyngCDslYrsirXri4giCisi64ukLiDsnbQg7Luk67CL7J2EIOyngeygkSDqsIDsoLjsmKTripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJGRpc3BsYXlwYXRoJ+yXkOyEnCAnJHNoYTEn7J2EKOulvCkg7LK07YGs7JWE7JuD7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAi7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyRkaXNwbGF5cGF0aCc6ICckc2hhMScg7LK07YGs7JWE7JuDIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLtlZjsnIQg66qo65OIIOqyveuhnCAnJGRpc3BsYXlwYXRoJ+yXkOyEnCAnJHNoYTEn7J2EKOulvCkg66as67Kg7J207Iqk7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjUyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966GcICckZGlzcGxheXBhdGgnOiAnJHNoYTEnKOycvCnroZwg66as67Kg7J207IqkIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY1NworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966GcICckZGlzcGxheXBhdGgn7JeQ7IScICckc2hhMScg67OR7ZWp7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966GcICckZGlzcGxheXBhdGgnOiAnJHNoYTEn7JeQ7IScIOuzke2VqSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiJyRjb21tYW5kICRzaGExJyDsi6TtlonsnbQg7ZWY7JyEIOuqqOuTiCDqsr3roZwgJyRkaXNwbGF5cGF0aCfsl5DshJwg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIu2VmOychCDrqqjrk4gg6rK966GcICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi7J6s6reA7KCB7Jy866GcIO2VmOychCDrqqjrk4gg6rK966GcICckZGlzcGxheXBhdGgn7JeQIOuTpOyWtOqwgOuKlOuNsCDsi6TtjKjtlojsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzkxCittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiLS1jYWNoZWQg7Ji17IWY7J2AIC0tZmlsZXMg7Ji17IWY6rO8IOqwmeydtCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAi7JiI7IOB7LmYIOuqu+2VnCDrqqjrk5wgJG1vZF9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAg6rK96rOgOiAnJGRpc3BsYXlfbmFtZSfsl5AgJyRzaGExX3NyYycg7Luk67CL7J20IOuTpOyWtOyeiOyngCDslYrsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAg6rK96rOgOiAnJGRpc3BsYXlfbmFtZSfsl5AgJyRzaGExX2RzdCcg7Luk67CL7J20IOuTpOyWtOyeiOyngCDslYrsirXri4jri6QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKyIgIOqyveqzoDogJyRkaXNwbGF5X25hbWUn7JeQICckc2hhMV9zcmMnIOuwjyAnJHNoYTFfZHN0JyDsu6TrsIvsnbQg65Ok7Ja07J6I7KeAIOyViuyKteuLiOuLpCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICLsnpDshLjtlZwg7KCV67O064qUIGdpdC0ke2NtZH0oMSkg7Y6Y7J207KeA66W8IOywuOqzoO2VmOyLreyLnOyYpC4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjE0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNpbmcgKCRuZXdfY291bnQvJHRvdGFsKSIKK21zZ3N0ciAi66as67Kg7J207Iqk7KSRICgkbmV3X2NvdW50LyR0b3RhbCkiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjE1OAorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWFuZD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisi66qF66C57Ja0OlxuIgorIiBwLCBwaWNrID0g7Luk67CLIOyCrOyaqVxuIgorIiByLCByZXdvcmQgPSDsu6TrsIsg7IKs7Jqp7ZWY7KeA66eMLCDsu6TrsIsg66mU7Iuc7KeAIO2OuOynkVxuIgorIiBlLCBlZGl0ID0g7Luk67CLIOyCrOyaqe2VmOyngOunjCwg7Luk67CLIOyImOyglShhbWVuZCnsnYQg7JyE7ZW0IOykkeuLqFxuIgorIiBzLCBzcXVhc2ggPSDsu6TrsIsg7IKs7Jqp7ZWY7KeA66eMLCDsnbTsoIQg7Luk67CL6rO8IO2Vqey5mOq4sFxuIgorIiBmLCBmaXh1cCA9IFwic3F1YXNoXCLsmYAg6rCZ7KeA66eMLCDsnbQg7Luk67CL7J2YIOuhnOq3uCDrqZTsi5zsp4Drpbwg67KE66a8XG4iCisiIHgsIGV4ZWMgPSDshbjsnYQg7IKs7Jqp7ZW0IOuqheuguSDsi6TtlokgKOuSpOyXkCDrqoXroLkg7KeA7KCVKVxuIgorIiBkLCBkcm9wID0g7Luk67CLIOygnOqxsFxuIgorIiBsLCBsYWJlbCA866CI7J2067iUPiA9IO2YhOyerCBIRUFE7JeQIOydtOumhOydhCDrtpnsnoXri4jri6RcbiIKKyIgdCwgcmVzZXQgPOugiOydtOu4lD4gPSBIRUFE66W8IOugiOydtOu4lCDsnITsuZjroZwg66as7IWL7ZWp64uI64ukXG4iCisiIG0sIG1lcmdlIFstQyA87Luk67CLPiB8IC1jIDzsu6TrsIs+XSA866CI7J2067iUPiBbIyA87ZWc7KSEPl1cbiIKKyIgLiAgICAgICDrs7jrnpgg67OR7ZWpIOy7pOuwi+ydmCDrqZTsi5zsp4Drpbwg7J207Jqp7ZW0IOuzke2VqSDsu6TrsIvsnYQg66eM65Ot64uI64ukLlxuIgorIiAuICAgICAgICjrs7jrnpgg67OR7ZWpIOy7pOuwi+ydhCDsp4DsoJXtlZjsp4Ag7JWK64qUIOqyveyasCwgPO2VnOykhD7snYQg66mU7Iuc7KeA66GcXG4iCisiIC4gICAgICAg7IKs7Jqp7ZWp64uI64ukLikg7Luk67CLIOuplOyLnOyngOulvCDtjrjsp5HtlZjroKTrqbQgLWMgPOy7pOuwiz7snYQg7IKs7JqpLlxuIgorIlxuIgorIuydtCDspITsnYAg7Iic7ISc66W8IOuwlOq/gCDsiJgg7J6I7Iq164uI64ukLiDsnITsl5DshJwg7JWE656YIOyInOyEnOuhnCDsi6Ttlontlanri4jri6QuXG4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjE3OQorbXNnaWQgIiIKKyJcbiIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgorbXNnc3RyICIiCisiXG4iCisi7KSE7J2EIOygnOqxsO2VmOyngCDslYrsirXri4jri6QuIOy7pOuwi+ydhCDsoJzqsbDtlZjroKTrqbQg66qF7Iuc7KCB7Jy866GcICdkcm9wJ+ydhCDsgqzsmqntlZjsi63si5zsmKQuXG4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjE4MworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuyXrOq4sCDspITsnYQg7KCc6rGw7ZWY66m0IO2VtOuLuSDsu6TrsIvsnYQg7J6D7Ja067KE66a964uI64ukIVxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoyMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIuyngOq4iCDri6TsnYwg66qF66C57Jy866GcIOy7pOuwi+ydhCDsiJjsoJXtlaAg7IiYIOyeiOyKteuLiOuLpDpcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIuuzgOqyvSDsgqztla3sl5Ag66eM7KGx7ZWY66m0LCDri6TsnYzsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMTog67m87Jik6riw6rCAIOqwgOuKpe2VnCDsu6TrsIvsnbQg7JWE64uZ64uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICLsnpjrqrvrkJwg7Luk67CLIOydtOumhDogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjMyNQorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgIu2YhOyerCDsu6TrsIvsnZgg64yA7LK0IHNoYTHsnYQg7JO4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjM3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICLsoJXrsKntlqUg7KeE7ZaJLCAkc2hhMSDsnITsuZjroZwiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjM3OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiJHNoYTEg7JyE7LmY66GcIOygleuwqe2WpSDsp4TtlontlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6Mzg3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIkhFQUTrpbwgJGZpcnN0X3BhcmVudCDsnITsuZjroZwg7Jiu6ri4IOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjM5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gc3F1YXNoIGEgbWVyZ2U6ICRzaGExIgorbXNnc3RyICLrs5Htlakgc3F1YXNoIOqxsOu2gDogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAiJHNoYTEg67OR7ZWp7J2EIOuLpOyLnCDtlZjripTrjbAg7Jik66WYIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICIkc2hhMeydhCDrubzsmKTquLAg7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQyOAorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICLsu6TrsIsg66mU7Iuc7KeAICMke25967KI7J6F64uI64ukOiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDMzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiIyR7bn3rsojsp7gg7Luk67CLIOuplOyLnOyngOulvCDqsbTrhIjrnIHri4jri6Q6IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0NDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAi7Luk67CLICRjb3VudOqwnOqwgCDshJ7snbgg6rKw6rO87J6F64uI64ukLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiJGZpeHVwX21zZ+ulvCDsk7gg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDU2Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIuy7pOuwiyAy6rCc6rCAIOyEnuyduCDqsrDqs7zsnoXri4jri6QuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0OTcgZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NTQwCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo1NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAi64uk7J2M7J2EIOyggeyaqe2VoChhcHBseSkg7IiYIOyXhuyKteuLiOuLpDogJHNoYTEuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjU3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIuyEseqzteyggeycvOuhnCAkc2hhMS4uLiAkcmVzdCDsu6TrsIvsnYQg67m87JioIOuSpOyXkCDsu6TrsIvsnYQg7IiY7KCV7ZWgIOyImCDsl4bsirXri4jri6QuXG4iCisi64yA67aA67aE7J2YIOqyveyasCDruYgg7Luk67CLIOuplOyLnOyngCDrlYzrrLjsnbTqsbDrgpgsIOuYkOuKlCDsu6TrsIsg7KCEIO2bhO2BrOqwgCDsi6TtjKjtlojquLBcbiIKKyLrlYzrrLjsnoXri4jri6QuIOy7pOuwiyDrqZTsi5zsp4Drpbwg7IiY7KCV7ZWY6riwIOyghOyXkCDsnbQg66y47KCc66W8IOuovOyggCDtlbTqsrDtlbTslbwg7ZWp64uI64ukLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NTg3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAi64uk7J2M7JeQ7IScIOupiOy2peuLiOuLpDogJHNoYTFfYWJicmV2Li4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi7J207KCEIOy7pOuwiyDsl4bsnbQgJyRzcXVhc2hfc3R5bGUnIOyImO2Wie2VoCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2NDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGluZzogJHJlc3QiCittc2dzdHIgIuyLpO2WiSDspJE6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2NTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICLsi6Ttlokg7Iuk7YyoOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjU0Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuq3uOumrOqzoCDsnbjrjbHsiqQg6re466as6rOgL+uYkOuKlCDsnpHsl4Ug7Y+0642U7JeQIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2NTYKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi66y47KCc66W8IOuwlOuhnOyeoeqzoCwg64uk7J2M7J2EIOyLpO2Wie2VmOyLreyLnOyYpFxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi7Iuk7ZaJIOyEseqztTogJHJlc3RcbiIKKyLtlZjsp4Drp4wg67OA6rK9IOyCrO2VreydhCDsnbjrjbHsiqQg67CPL+uYkOuKlCDsnpHsl4Ug7Y+0642U7JeQIOuCqOqyqOuRoeuLiOuLpC5cbiIKKyLrs4Dqsr0g7IKs7ZWt7J2EIOy7pOuwi+2VmOqxsOuCmCDsiqTtg5zsi5zsl5Ag64Sj7Jy866Ck66m0LCDri6TsnYzsnYQg7Iuk7ZaJ7ZWY7Iut7Iuc7JikOlxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2ODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIOuqheuguTogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjY4MQorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICInZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycg66qF66C57Jy866GcIOuwlOuhnOyeoeycvOyLreyLnOyYpC4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjcxNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIuyEseqzteyggeycvOuhnCDrpqzrsqDsnbTsiqTtlojqs6AgJGhlYWRfbmFtZSDsl4XrjbDsnbTtirjtlojsirXri4jri6QuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo3NDAKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIkhFQUTripQg67aE66as7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjc3OAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiQ0hFUlJZX1BJQ0tfSEVBROulvCDsoJzqsbDtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NzgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisi7J6R7JeFIO2PtOuNlOyXkCDsiqTthYzsnbTsp5XtlZwg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuXG4iCisi7J20IOuzgOqyvSDsgqztla3snYQg7J207KCEIOy7pOuwi+yXkCDtlansuZjroKTrqbQsXG4iCisi64uk7J2M7J2EIOyLpO2Wie2VmOyLreyLnOyYpDpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIuyDiCDsu6TrsIvsnLzroZwg66eM65Oc66Ck66m0IOuLpOydjOydhCDsi6TtlontlZjsi63si5zsmKQ6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisi7Ja065akIOqyveyasOydtOuToCwg66eI7LmcIOuLpOydjOyXkCDri6TsnYwg66qF66C57Jy866GcIOqzhOyGje2VqeuLiOuLpDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo4MDAKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAi7Luk67CL7J2EIOyImOygle2VnCDsnpHshLHsnpAg7Iug7JuQ7J2EIOywvuuKlOuNsCDsmKTrpZgiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjgwNQorbXNnaWQgIiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisi7J6R7JeFIO2PtOuNlOyXkCDsu6TrsIvtlZjsp4Ag7JWK7J2AIOuzgOqyvSDsgqztla3snbQg7J6I7Iq164uI64ukLiDsnbQg7IKs7ZWt7J2EIOuovOyggFxuIgorIuy7pOuwi+2VmOqzoCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyDrqoXroLnsnYQg64uk7IucIOyLpO2Wie2VmOyLreyLnOyYpC4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjgxMCBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo4MTQKK21zZ2lkICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi7Iqk7YWM7J207KeV7ZWcIOuzgOqyvSDsgqztla3snYAg7Luk67CL7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo4NDMKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLsp4Ttlokg7KSR7J24IOuMgO2ZlO2YlSDrpqzrsqDsnbTsiqTsnZggVE9ETyDtjIzsnbzsnYQg7Y647KeR7ZWY64qUIOykkeyeheuLiOuLpC5cbiIKKyLtjrjsp5Eg65Kk7JeQIOumrOuyoOydtOyKpOulvCDqs4Tsho3tlZjroKTrqbQg64uk7J2M7J2EIOyLpO2Wie2VmOyLreyLnOyYpDpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjg1MSBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo5MzcKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgIu2OuOynkeq4sOulvCDsi6TtlontlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6ODcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAiJHN3aXRjaF90b+ulvCDssrTtgazslYTsm4PtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6ODc5Cittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIkhFQUTqsIAg7JeG7Iq164uI64ukPyIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6ODgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICLsnoTsi5zroZwgJHN0YXRlX2RpciDrlJTroInthLDrpqzrpbwg66eM65OkIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjg4MworbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICLrjIDtmZTtmJXsnLzroZwg7ZGc7Iuc7ZWgIOyImCDsl4bsirXri4jri6QuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo5MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kcykiCittc2dzdHJbMF0gIuumrOuyoOydtOyKpCAkc2hvcnRyZXZpc2lvbnMsICRzaG9ydG9udG8g7JyE66GcICjrqoXroLkgJHRvZG9jb3VudOqwnCkiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjkyMAorbXNnaWQgIiIKKyJcbiIKKyJcdEhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisiXG4iCisiXHQiCittc2dzdHIgIiIKKyJcbiIKKyLtlZjsp4Drp4wg66qo65GQIOygnOqxsO2VoCDqsr3smrAsIOumrOuyoOydtOyKpOulvCDspJHsp4Dtlanri4jri6QuXG4iCisiXG4iCisiXHQiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjkyNworbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICLri6gg67mIIOy7pOuwi+ydgCDso7zshJ0g7LKY66as65CY7JeI7Iq164uI64ukLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6OTgwCittc2dpZCAiQ291bGQgbm90IGdlbmVyYXRlIHRvZG8gbGlzdCIKK21zZ3N0ciAi7ZWgIOydvCDrqqnroZ3snYQg7IOd7ISx7ZWgIOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEwMDEgZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTAwNgorbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICLri6Tsi5wg7J6R7ISx65CcIOy7pOuwi+ydhCDstIjquLDtmZTtlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgIuyCrOyaqeuylTogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiJGNkdXAg65SU66CJ7YSw66as66GcICjsnpHsl4Xtj7TrjZQg7LWc7IOB7JyEKSDsnbTrj5ntlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5OSBnaXQtc2gtc2V0dXAuc2g6MjA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAi7LmY66qF7KCBOiAkcHJvZ3JhbV9uYW1l7J2AIOyekeyXhSDtj7TrjZQg7JeG7J20IOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMAorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLrpqzrsqDsnbTsiqTtlaAg7IiYIOyXhuyKteuLiOuLpDog7Iqk7YWM7J207KeV7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjMKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuu4jOuenOy5mOulvCDri6Tsi5wg7JO4IOyImCDsl4bsirXri4jri6Q6IOyKpO2FjOydtOynle2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisi66as67Kg7J207Iqk66GcIO2SgOydhCDtlaAg7IiYIOyXhuyKteuLiOuLpDog7Iqk7YWM7J207KeV7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiJGFjdGlvbiDtlaAg7IiYIOyXhuyKteuLiOuLpDog7Iqk7YWM7J207KeV7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDIKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLrpqzrsqDsnbTsiqTtlaAg7IiYIOyXhuyKteuLiOuLpDog7J24642x7Iqk7JeQIOy7pOuwi+2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ1Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyLrpqzrsqDsnbTsiqTroZwg7ZKA7J2EIO2VoCDsiJgg7JeG7Iq164uI64ukOiDsnbjrjbHsiqTsl5Ag7Luk67CL7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIkYWN0aW9uIO2VoCDsiJgg7JeG7Iq164uI64ukOiDsnbjrjbHsiqTsl5Ag7Luk67CL7ZWY7KeAIOyViuydgCDrs4Dqsr0g7IKs7ZWt7J20IOyeiOyKteuLiOuLpC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTIKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuy2lOqwgOuhnCwg7J24642x7Iqk7JeQIOy7pOuwi+2VmOyngCDslYrsnYAg67OA6rK9IOyCrO2VreydtCDsnojsirXri4jri6QuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzcyCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAi7J20IOuqheugueydgCDsnpHsl4Ug7Y+0642U7J2YIOy1nOyDgeychOyXkOyEnOunjCDsk7gg7IiYIOyeiOyKteuLiOuLpC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzcKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAi6rmDIOuUlOugie2EsOumrOydmCDsoIjrjIAg6rK966Gc66W8IOyVjOyVhOuCvCDsiJgg7JeG7Iq164uI64ukIgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTk2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTEycyAlMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE5NworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAi7Iqk7YWM7J207KeVIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE5NworbXNnaWQgInVuc3RhZ2VkIgorbXNnc3RyICLslYjsiqTthYzsnbTsp5UiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjUzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICLrsJTsnbTrhIjrpqwiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE2Cittc2dpZCAibm90aGluZyIKK21zZ3N0ciAi7JeG7J2MIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxMworbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAi7JWI67CU64CcIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYwOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIuqyveuhnCAlZOqwnCDstpTqsIBcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi6rK966GcICVk6rCcIOyXheuNsOydtO2KuFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJyZXZlcnRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInJldmVydGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIuqyveuhnCAlZOqwnCDrkJjrj4zrprxcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidG91Y2hlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInRvdWNoZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi6rK966GcICVk6rCcIOqxtOuTnOumvFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNworbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAi7JeF642w7J207Yq4IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzOQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAi65CY64+M66as6riwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY2MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIgorbXNnc3RyICLso7zsnZg6ICVz7J2AKOuKlCkg7ZiE7J6sIOy2lOygge2VmOyngCDslYrsirXri4jri6QuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjczCittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAi7LaU7KCB7ZWY7KeAIOyViuuKlCDtjIzsnbwg7LaU6rCAIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OQorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAi7LaU7KCB7ZWY7KeAIOyViuuKlCDtjIzsnbwg7JeG7J2MLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwMzMKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnc3RyICIiCisi7Yyo7LmY6rCAIOq5lOuBlO2VmOqyjCDsoIHsmqnrkJjrqbQsIO2OuOynkSDrtoDrtoTsnYAg7KaJ7IucIOyKpO2FjOydtOynleycvOuhnFxuIgorIu2RnOyLnOuQqeuLiOuLpC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzNgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICIiCisi7Yyo7LmY6rCAIOq5lOuBlO2VmOqyjCDsoIHsmqnrkJjrqbQsIO2OuOynkSDrtoDrtoTsnYAg7KaJ7IucIOyKpO2DnOyLnOyXkFxuIgorIu2RnOyLnOuQqeuLiOuLpC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzOQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorIu2MqOy5mOqwgCDquZTrgZTtlZjqsowg7KCB7Jqp65CY66m0LCDtjrjsp5Eg67aA67aE7J2AIOymieyLnCDsiqTthYzsnbTsp5Ug7JWE64uY7Jy866GcXG4iCisi7ZGc7Iuc65Cp64uI64ukLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDQyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisi7Yyo7LmY6rCAIOq5lOuBlO2VmOqyjCDsoIHsmqnrkJjrqbQsIO2OuOynkSDrtoDrtoTsnYAg7KaJ7IucIOyggeyaqeycvOuhnFxuIgorIu2RnOyLnOuQqeuLiOuLpC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA0NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNDgKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisi7Yyo7LmY6rCAIOq5lOuBlO2VmOqyjCDsoIHsmqnrkJjrqbQsIO2OuOynkSDrtoDrtoTsnYAg7KaJ7IucIOuyhOumvOycvOuhnFxuIgorIu2RnOyLnOuQqeuLiOuLpC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA4NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIuu2gOu2hCDtjrjsp5Eg7YyM7J287J2EIOyTsOq4sOyaqeycvOuhnCDsl6zripTrjbAg7Iuk7YyoOiAnJXMnIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwODYKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAi7IiY64+ZIOu2gOu2hCDtjrjsp5Eg66qo65OcIC0tIOu5oOuluCDshKTrqoXsnYAg66eoIOyVhOuemOulvCDrs7Tsi63si5zsmKQuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA5MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIiclcycg7KSE7J2EIOygnOqxsO2VmOugpOuptCwg7KSE7J2EICcgJyDspITroZwg66eM65Oc7Iut7Iuc7JikICjsu6jthY3siqTtirgpLlxuIgorIiclcycg7KSE7J2EIOygnOqxsO2VmOugpOuptCwg7KSE7J2EIOyCreygnO2VmOyLreyLnOyYpC4uXG4iCisiJXMo7Jy8KeuhnCDsi5zsnpHtlZjripQg7KSE7J2AIOygnOqxsOuQqeuLiOuLpFxuIgorCisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMDAKK21zZ2lkICIiCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCittc2dzdHIgIiIKKyLquZTrgZTtlZjqsowg7KCB7Jqp65CY7KeAIOyViuycvOuptCwg64uk7IucIO2OuOynke2VoCDquLDtmozqsIAg7J6I7Iq164uI64ukLiDrqqjrk6Ag7KSE7J2EIOygnOqxsO2VoCDqsr0iCisi7JqwLFxuIgorIu2OuOynkeydgCDspJHri6jrkJjqs6Ag7J20IOu2gOu2hOydgCDrs4Dqsr3rkJjsp4Ag7JWK7J2AIOyDge2DnOuhnCDrgqjslYTsnojqsowg65Cp64uI64ukLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICLrtoDrtoQg7Y647KeRIO2MjOydvOydhCDsnb3quLDsmqnsnLzroZwg7Jes64qU642wIOyLpO2MqDogJyVzJyIKKworIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuIENvbnNpZGVyIHRyYW5zbGF0aW5nIChzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIGFzCisjLiAoc2F5aW5nICJuIiBmb3IgIm5vIiBkaXNjYXJkcyEpIGlmIHRoZSB0cmFuc2xhdGlvbgorIy4gb2YgdGhlIHdvcmQgIm5vIiBkb2VzIG5vdCBzdGFydCB3aXRoIG4uCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMTMKK21zZ2lkICIiCisiWW91ciBlZGl0ZWQgaHVuayBkb2VzIG5vdCBhcHBseS4gRWRpdCBhZ2FpbiAoc2F5aW5nIFwibm9cIiBkaXNjYXJkcyEpIFt5L25dPyAiCittc2dzdHIgIiIKKyLtjrjsp5HtlZwg67aA67aE7J20IOyggeyaqeuQmOyngCDslYrsirXri4jri6QuIOuLpOyLnCDtjrjsp5HtlZjsi5zqsqDsirXri4jquYwgKFwibm9cIuudvOqzoCDtlZjrqbQg67KE66a9IgorIuuLiOuLpCEpIFt5L25dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIyMgorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDsnbQg67aA67aEIOyKpO2FjOydtOynlVxuIgorIm4gLSDsnbQg67aA67aEIOyKpO2FjOydtOynle2VmOyngCDslYrsnYxcbiIKKyJxIC0g64Gd64K06riwLiDsnbQg67aA67aE6rO8IOuCmOuouOyngCDrqqjrkZAg7Iqk7YWM7J207KeV7ZWY7KeAIOyViuydjFxuIgorImEgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCDsiqTthYzsnbTsp5VcbiIKKyJkIC0g7J20IOu2gOu2hOqzvCDtjIzsnbzsnZgg65KkIOu2gOu2hCDrqqjrkZAg7Iqk7YWM7J207KeV7ZWY7KeAIOyViuydjCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjI4Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOydtCDrtoDrtoQg7Iqk7YOc7IucXG4iCisibiAtIOydtCDrtoDrtoQg7Iqk7YOc7Iuc7ZWY7KeAIOyViuydjFxuIgorInEgLSDrgZ3rgrTquLAuIOydtCDrtoDrtoTqs7wg64KY66i47KeAIOuqqOuRkCDsiqTtg5zsi5ztlZjsp4Ag7JWK7J2MXG4iCisiYSAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIOyKpO2DnOyLnFxuIgorImQgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCDsiqTtg5zsi5ztlZjsp4Ag7JWK7J2MIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMzQKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOydtCDrtoDrtoQg7Iqk7YWM7J207KeVIO2VtOygnFxuIgorIm4gLSDsnbQg67aA67aEIOyKpO2FjOydtOynlSDtlbTsoJztlZjsp4Ag7JWK7J2MXG4iCisicSAtIOuBneuCtOq4sC4g7J20IOu2gOu2hOqzvCDrgpjrqLjsp4Ag66qo65GQIOyKpO2FjOydtOynlSDtlbTsoJztlZjsp4Ag7JWK7J2MXG4iCisiYSAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIOyKpO2FjOydtOynlSDtlbTsoJxcbiIKKyJkIC0g7J20IOu2gOu2hOqzvCDtjIzsnbzsnZgg65KkIOu2gOu2hCDrqqjrkZAg7Iqk7YWM7J207KeVIO2VtOygnO2VmOyngCDslYrsnYwiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI0MAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDsnbQg67aA67aEIOyduOuNseyKpOyXkCDsoIHsmqlcbiIKKyJuIC0g7J20IOu2gOu2hCDsnbjrjbHsiqTsl5Ag7KCB7Jqp7ZWY7KeAIOyViuydjFxuIgorInEgLSDrgZ3rgrTquLAuIOydtCDrtoDrtoTqs7wg64KY66i47KeAIOuqqOuRkCDsoIHsmqntlZjsp4Ag7JWK7J2MXG4iCisiYSAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIFxuIgorImQgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCDsoIHsmqntlZjsp4Ag7JWK7J2MIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDYKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDsnbQg67aA67aEIOyekeyXhSDtj7TrjZTsl5DshJwg67KE66a8XG4iCisibiAtIOydtCDrtoDrtoQg7J6R7JeFIO2PtOuNlOyXkOyEnCDrsoTrpqzsp4Ag7JWK7J2MXG4iCisicSAtIOuBneuCtOq4sC4g7J20IOu2gOu2hOqzvCDrgpjrqLjsp4Ag66qo65GQIOuyhOumrOyngCDslYrsnYxcbiIKKyJhIC0g7J20IOu2gOu2hOqzvCDtjIzsnbzsnZgg65KkIOu2gOu2hCDrqqjrkZAg67KE66a8XG4iCisiZCAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIOuyhOumrOyngCDslYrsnYwiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1MgorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g7J20IOu2gOu2hCDsnbjrjbHsiqTsmYAg7J6R7JeFIO2PtOuNlOyXkOyEnCDrsoTrprxcbiIKKyJuIC0g7J20IOu2gOu2hCDsnbjrjbHsiqTsmYAg7J6R7JeFIO2PtOuNlOyXkOyEnCDrsoTrpqzsp4Ag7JWK7J2MXG4iCisicSAtIOuBneuCtOq4sC4g7J20IOu2gOu2hOqzvCDrgpjrqLjsp4Ag66qo65GQIOuyhOumrOyngCDslYrsnYxcbiIKKyJhIC0g7J20IOu2gOu2hOqzvCDtjIzsnbzsnZgg65KkIOu2gOu2hCDrqqjrkZAg67KE66a8XG4iCisiZCAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIOuyhOumrOyngCDslYrsnYwiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI1OAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOydtCDrtoDrtoQg7J24642x7Iqk7JmAIOyekeyXhSDtj7TrjZTsl5Ag7KCB7JqpXG4iCisibiAtIOydtCDrtoDrtoQg7J24642x7Iqk7JmAIOyekeyXhSDtj7TrjZTsl5Ag7KCB7Jqp7ZWY7KeAIOyViuydjFxuIgorInEgLSDrgZ3rgrTquLAuIOydtCDrtoDrtoTqs7wg64KY66i47KeAIOuqqOuRkCDsoIHsmqntlZjsp4Ag7JWK7J2MXG4iCisiYSAtIOydtCDrtoDrtoTqs7wg7YyM7J287J2YIOuSpCDrtoDrtoQg66qo65GQIFxuIgorImQgLSDsnbQg67aA67aE6rO8IO2MjOydvOydmCDrkqQg67aA67aEIOuqqOuRkCDsoIHsmqntlZjsp4Ag7JWK7J2MIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzMKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0g7J2064+Z7ZWgIOu2gOu2hCDshKDtg51cbiIKKyIvIC0g7KO87Ja07KeEIOygleq3nOyLneyXkCDrp57ripQg67aA67aEIOqygOyDiVxuIgorImogLSDsnbQg67aA67aEIOuvuOqysOyglSDsg4Htg5zroZwg64Ko6rKo65GQ6rOgLCDri6TsnYwg66+46rKw7KCVIOu2gOu2hCDrs7TquLBcbiIKKyJKIC0g7J20IOu2gOu2hCDrr7jqsrDsoJUg7IOB7YOc66GcIOuCqOqyqOuRkOqzoCwg64uk7J2MIOu2gOu2hCDrs7TquLBcbiIKKyJrIC0g7J20IOu2gOu2hCDrr7jqsrDsoJUg7IOB7YOc66GcIOuCqOqyqOuRkOqzoCwg7J207KCEIOuvuOqysOyglSDrtoDrtoQg67O06riwXG4iCisiSyAtIOydtCDrtoDrtoQg66+46rKw7KCVIOyDge2DnOuhnCDrgqjqsqjrkZDqs6AsIOydtOyghCDrtoDrtoQg67O06riwXG4iCisicyAtIO2YhOyerCDrtoDrtoTsnYQg7J6R7J2AIOu2gOu2hOydhCDsqrzqsJzquLBcbiIKKyJlIC0g7ZiE7J6sIOu2gOu2hOydhCDsiJjrj5nsnLzroZwg7Y647KeRXG4iCisiPyAtIOuPhOybgOunkCDrs7TquLBcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzA0Cittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghXG4iCittc2dzdHIgIuyEoO2Dne2VnCDrtoDrtoTsnYAg7J24642x7Iqk7JeQIOyggeyaqeuQmOyngCDslYrsirXri4jri6QhXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMwNQorbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICLqt7jrnpjrj4Qg7J6R7JeFIO2PtOuNlOyXkCDsoIHsmqntlaDquYzsmpQ/IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMDgKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICLslYTrrLQg6rKD64+EIOyggeyaqeuQmOyngCDslYrslZjsirXri4jri6QuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMxOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAi67OR7ZWp7ZWY7KeAIOyViuydgCDsgqztla0g66y07IucOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMjgKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICLrsJTsnbTrhIjrpqwg7YyM7J2866eMIOuwlOuAjOyXiOyKteuLiOuLpC5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzMwCittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAi67OA6rK9IOyCrO2VrSDsl4bsnYwuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMzOAorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAi7Yyo7LmYIOyXheuNsOydtO2KuCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzkwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLrqqjrk5wg67OA6rK97J2EIOyKpO2FjOydtOynle2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzkxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsgq3soJzrpbwg7Iqk7YWM7J207KeV7ZWp64uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzOTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsnbQg67aA67aEIOyKpO2FjOydtOynle2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzk1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLrqqjrk5wg67OA6rK9IOyKpO2DnOyLnO2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzk2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsgq3soJwg7Iqk7YOc7Iuc7ZWp64uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzOTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsnbQg67aA67aEIOyKpO2DnOyLnO2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDAwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuuqqOuTnCDrs4Dqsr3snYQg7Iqk7YWM7J207KeAIO2VtOygnO2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDAxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuyCreygnOulvCDsiqTthYzsnbTsp4Ag7ZW07KCc7ZWp64uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MDIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuydtCDrtoDrtoTsnYQg7Iqk7YWM7J207KeAIO2VtOygnO2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDA1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLrqqjrk5wg67OA6rK97J2EIOyduOuNseyKpOyXkCDsoIHsmqntlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7IKt7KCc66W8IOyduOuNseyKpOyXkCDsoIHsmqntlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwNworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuydtCDrtoDrtoTsnYQg7J24642x7Iqk7JeQIOyggeyaqe2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDEwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi66qo65OcIOuzgOqyveydhCDsnpHsl4Ug7Y+0642U7JeQ7IScIOuyhOumveuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7IKt7KCc66W8IOyekeyXhSDtj7TrjZTsl5DshJwg67KE66a964uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7J20IOu2gOu2hOydhCDsnpHsl4Ug7Y+0642U7JeQ7IScIOuyhOumveuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuuqqOuTnCDrs4Dqsr3snYQg7J24642x7Iqk7JmAIOyekeyXhSDtj7TrjZTsl5DshJwg67KE66a964uI6rmMIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi7IKt7KCc66W8IOyduOuNseyKpOyZgCDsnpHsl4Ug7Y+0642U7JeQ7IScIOuyhOumveuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDE3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsnbQg67aA67aE7J2EIOyduOuNseyKpOyZgCDsnpHsl4Ug7Y+0642U7JeQ7IScIOuyhOumveuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDIwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi66qo65OcIOuzgOqyveydhCDsnbjrjbHsiqTsmYAg7J6R7JeFIO2PtOuNlOyXkCDsoIHsmqntlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuyCreygnOulvCDsnbjrjbHsiqTsmYAg7J6R7JeFIO2PtOuNlOyXkCDsoIHsmqntlanri4jquYwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLsnbQg67aA67aE7J2EIOyduOuNseyKpOyZgCDsnpHsl4Ug7Y+0642U7JeQIOyggeyaqe2VqeuLiOq5jCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTIyCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290b1xuIgorbXNnc3RyICLsnbTrj5ntlaAg67aA67aE7J20IOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1MjkKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAi7Ja064qQIOu2gOu2hOycvOuhnCDsnbTrj5ntlanri4jquYwgKOuNlCDrs7TroKTrqbQgPHJldD4pPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUzMQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAi7Ja064qQIOu2gOu2hOycvOuhnCDsnbTrj5ntlanri4jquYw/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIuyemOuqu+uQnCDrsojtmLg6ICclcydcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTQ1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLlxuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuXG4iCittc2dzdHJbMF0gIuuvuOyViO2VqeuLiOuLpC4g67aA67aE7J20ICVk6rCcIOuwluyXkCDsl4bsirXri4jri6QuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnc3RyICLqsoDsg4ntlaAg67aA67aE7J20IOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzUKK21zZ2lkICJzZWFyY2ggZm9yIHJlZ2V4PyAiCittc2dzdHIgIuygleq3nOyLneydhCDqsoDsg4ntlanri4jquYw/IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgIuyemOuqu+uQnCDtmJXtg5zsnZgg6rKA7IOJIOygleq3nOyLnSAlczogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTk4Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIlvso7zslrTsp4Qg7Yyo7YS07JeQIOunnuuKlCDrtoDrtoTsnbQg7JeG7Iq164uI64ukXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzIKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgIuydtOyghCDrtoDrtoTsnbQg7JeG7Iq164uI64ukXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzgKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAi64uk7J2MIOu2gOu2hOydtCDsl4bsirXri4jri6RcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ0Cittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAi66+47JWI7ZWp64uI64ukLiDsnbQg67aA67aE7J2EIOu2hOumrCDtlaAg7IiYIOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rLlxuIgorbXNnaWRfcGx1cmFsICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIgorbXNnc3RyWzBdICIlZOqwnCDrtoDrtoTsnLzroZwg64KY64iV64uI64ukLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjAKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIuuvuOyViO2VqeuLiOuLpC4g7J20IOu2gOu2hOydhCDsiJjsoJXtlaAg7IiYIOyXhuyKteuLiOuLpFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDYKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAiZGlmZiDqsoDthqAiCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzI1Cittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorInN0YXR1cyAgICAgICAgLSDrs4Dqsr0g7IKs7ZWt7J20IOyeiOuKlCDqsr3roZzrpbwg7ZGc7Iuc7ZWp64uI64ukXG4iCisidXBkYXRlICAgICAgICAtIOuzgOqyvSDsgqztla0g7Iqk7YWM7J207KeVIOuqqOydjOyXkCDsnpHsl4Ug7Y+0642UIOyDge2DnOulvCDstpTqsIDtlanri4jri6RcbiIKKyJyZXZlcnQgICAgICAgIC0g67OA6rK9IOyCrO2VrSDsiqTthYzsnbTsp5Ug66qo7J2M7J2EIEhFQUQg67KE7KCE7Jy866GcIOuQmOuPjOumveuLiOuLpFxuIgorInBhdGNoICAgICAgICAgLSDrsJTrgJAg67aA67aE7J2EIOqzqOudvOyEnCDqsJzrs4TsoIHsnLzroZwg7JeF642w7J207Yq47ZWp64uI64ukXG4iCisiZGlmZiAgICAgICAgICAtIEhFQUTsmYAg7J24642x7IqkIOyCrOydtOydmCDssKjsnbTsoJDsnYQg67SF64uI64ukXG4iCisiYWRkIHVudHJhY2tlZCAtIOy2lOyggeuQmOyngCDslYrripQg7YyM7J287J2YIOuCtOyaqeydhCDrs4Dqsr0g7IKs7ZWtIOyKpO2FjOydtOynlSDrqqjsnYzsl5Ag7LaU6rCA7ZWpIgorIuuLiOuLpFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NDIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzQ3CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU3CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY3Cittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAiLS0g67mg7KeQIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICLslYwg7IiYIOyXhuuKlCAtLXBhdGNoIOuqqOuTnDogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCAlcywgZXhwZWN0aW5nIC0tIgorbXNnc3RyICLsnbjsnpDqsIAgKCVzKSDsnpjrqrvrkJjsl4jqs6AsIC0t6rCAIOyZgOyVvCDtlanri4jri6QiCisKKyMg7KO87J2YOiDstIgg64uo7JyE7J28IOqyveyasOulvCDrp5DtlZzri6QKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTMwCittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICLsp4Dsl60g7Iuc6rCE64yA7JmAIEdNVOydmCDssKjsnbTqsIAg67aEIOuLqOychOqwgCDslYTri5nri4jri6RcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzcgZ2l0LXNlbmQtZW1haWwucGVybDoxNDMKK21zZ2lkICJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIKK21zZ3N0ciAi7KeA7JetIOyLnOqwgSDsmKTtlITshYvsnbQgMjTsi5zqsITrs7Tri6Qg7YGs6rGw64KYIOyekeyKteuLiOuLpFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIxMSBnaXQtc2VuZC1lbWFpbC5wZXJsOjIxNworbXNnaWQgInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIKK21zZ3N0ciAi7Y647KeR6riw6rCAIOu5hOygleyDgeyggeycvOuhnCDrgZ3rgpjshJwsIOuqqOuRkCDspJHsp4Dtlanri4jri6QiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Mjk0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIiclcycg7JWI7JeQIOyekeyEsSDspJHsnbTsl4jrjZgg7KSR6rCEIOuyhOyghOydmCDsoITsnpDrqZTsnbzsnbQg65Ok7Ja0IOyeiOyKteuLiOuLpC5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyOTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIiclcy5maW5hbCcg7JWI7JeQIOyekeyEse2VnCDsoITsnpDrqZTsnbzsnbQg65Ok7Ja0IOyeiOyKteuLiOuLpC5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTcKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgIi0tZHVtcC1hbGlhc2VzIOyYteyFmOydgCDri6Trpbgg7Ji17IWY6rO8IO2YuO2ZmOuQmOyngCDslYrsirXri4jri6RcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozODMgZ2l0LXNlbmQtZW1haWwucGVybDo2MzgKK21zZ2lkICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorbXNnc3RyICLsoIDsnqXshowg67CW7JeQ7IScIGdpdCBmb3JtYXQtcGF0Y2gg66qF66C57J2EIOyLpO2Wie2VoCDsiJgg7JeG7Iq164uI64ukXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Mzg2Cittc2dpZCAiIgorImBiYXRjaC1zaXplYCBhbmQgYHJlbG9naW5gIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyICh2aWEgY29tbWFuZC1saW5lIG9yICIKKyJjb25maWd1cmF0aW9uIG9wdGlvbilcbiIKK21zZ3N0ciAiIgorImBiYXRjaC1zaXplYOyZgCBgcmVsb2dpbmDsnYAg6rCZ7J20IOyngOygle2VtOyVvCDtlanri4jri6QgKOuqheugue2WiSDrmJDripQg7ISk7KCVIOyYteyFmClcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0NTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIuyVjCDsiJgg7JeG64qUIC0tc3VwcHJlc3MtY2Mg7ZWE65OcOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDg1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAi7JWMIOyImCDsl4bripQgLS1jb25maXJtIOyEpOyglTogJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUxMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLqsr3qs6A6IOuUsOyYtO2RnOqwgCDsnojripQgc2VuZG1haWwg67OE7Lmt7J2AIOyngOybkO2VmOyngCDslYrsirXri4jri6Q6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIuqyveqzoDogYDppbmNsdWRlOmDripQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIuqyveqzoDogYC9maWxlYCDrmJDripQgYHxwaXBlYCDrpqzri6TsnbTroInshZjsnYAg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAi6rK96rOgOiBzZW5kbWFpbCDspITsnbQg7J247Iud65CY7KeAIOyViuyKteuLiOuLpDogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2MDQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIkZpbGUgJyVzJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHNcbiIKKyJ0byBwcm9kdWNlIHBhdGNoZXMgZm9yLiAgUGxlYXNlIGRpc2FtYmlndWF0ZSBieS4uLlxuIgorIlxuIgorIiAgICAqIFNheWluZyBcIi4vJXNcIiBpZiB5b3UgbWVhbiBhIGZpbGU7IG9yXG4iCisiICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLlxuIgorbXNnc3RyICIiCisiJyVzJyDtjIzsnbzsnbQg7J6I7KeA66eMIOydtCDtjIzsnbzsnYAg7Yyo7LmY66W8IOunjOuTpCDrjIDsg4Hsnbgg7Luk67CL7J2YIOuylOychOqwgFxuIgorIuuQoCDsiJjrj4Qg7J6I7Iq164uI64ukLiDri6TsnYzqs7wg6rCZ7J20IOyVoOunpO2VqOydhCDsl4bslaAg7KO87Iut7Iuc7JikLi4uXG4iCisiXG4iCisiICAgICog7YyM7J287J2EIOydmOuPhO2WiOuLpOuptCBcIi4vJXNcIijsnbQp65286rOgIOyTsOqzoCwg7JWE64uI66m0XG4iCisiICAgICog67KU7JyE66W8IOydmOuPhO2WiOuLpOuptCAtLWZvcm1hdC1wYXRjaCDsmLXshZgg7IKs7JqpXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjI1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAiJXPsl5Agb3BlbmRpciDsi6TtjKg6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyLsuZjrqoXsoIEg7Jik66WYOiAlczogJXNcbiIKKyLqsr3qs6A6IO2MqOy5mOulvCDrs7TrgrTsp4Ag7JWK7JWY7Iq164uI64ukXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjYwCittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIu2MqOy5mCDtjIzsnbzsnYQg7KeA7KCV7ZWY7KeAIOyViuyVmOyKteuLiOuLpFxuIgorIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY3MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJObyBzdWJqZWN0IGxpbmUgaW4gJXM/IgorbXNnc3RyICIlcyDslYjsl5Ag7KCc66qpIOykhOydtCDsl4bsirXri4jri6Q/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAlczogJXMiCittc2dzdHIgIiVz7JeQIOyTsOugpOqzoCDsl6zripTrjbAg7Iuk7YyoOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2OTQKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyJcIkdJVDpcIuycvOuhnCDsi5zsnpHtlZjripQg7KSE7J2AIOygnOqxsOuQqeuLiOuLpC5cbiIKKyLsnpHshLEg7KSR7J24IO2MqOy5mOyXkCDrjIDtlbQg7KCE7LK0IGRpZmZzdGF07J2EIO2PrO2VqO2VmOqxsOuCmFxuIgorIuuqqeywqOulvCDtj6ztlajtlbQg67O07Iut7Iuc7JikLlxuIgorIlxuIgorIuyalOyVveydhCDrs7TrgrTripQg6rKMIOyVhOuLiOudvOuptCDrs7jrrLgg64K07Jqp7J2EIOyngOyasOyLreyLnOyYpC5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICIlc+ydhCjrpbwpIOyXrOuKlOuNsCDsi6TtjKg6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjczNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIiVzLmZpbmFs7J2EIOyXrOuKlOuNsCDsi6TtjKg6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc3OAorbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIuyalOyVvSDsoITsnpDrqZTsnbzsnbQg67mE7Ja0IOyeiOyWtOyEnCDrhJjslrTqsJHri4jri6QuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODEzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICLsoJXrp5DroZwgPCVzPuydhCjrpbwpIOyCrOyaqe2VmOyLnOqyoOyKteuLiOq5jCBbeS9OXT8gIgorCisjIOyjvOydmDogJzhiaXQn7J2065286rOgIOq3uOuMgOuhnCDsk7Tri6QuIOuplOydvCBlbmNvZGluZyDtl6TrjZTsl5Ag7JO4IGxpdGVyYWzsnYQg6rCA66as7YK0CisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg2OAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorIuuLpOydjCDtjIzsnbzsnbQgOGJpdOydtOyngOunjCwgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ+ydhCDshKTsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLlxuIgorCisjIOyjvOydmDogJzhiaXQn7J2065286rOgIOq3uOuMgOuhnCDsk7Tri6QuIOuplOydvCBlbmNvZGluZyDtl6TrjZTsl5Ag7JO4IGxpdGVyYWzsnYQg6rCA66as7YK0CisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg3MworbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIuyWtOuWpCA4Yml0IOyduOy9lOuUqeydhCDshKDslrjtlanri4jquYwgW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg4MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIuuztOuCtOyngCDslYrsirXri4jri6QuIOuLpOydjCDtjKjsuZjqsIBcbiIKKyJcdCVzXG4iCisi7KCc66qpIOyEnOyLneyduCAnKioqIFNVQkpFQ1QgSEVSRSAqKion6rCAIOuTpOyWtCDsnojsirXri4jri6QuIOygleunkOuhnCDrs7TrgrTroKTrqbQgLS1mb3JjZSAiCisi7Ji17IWY7J2EIOyCrOyaqe2VmOyLreyLnOyYpC5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MDAKK21zZ2lkICJUbyB3aG9tIHNob3VsZCB0aGUgZW1haWxzIGJlIHNlbnQgKGlmIGFueW9uZSk/IgorbXNnc3RyICLriITqtazsl5Dqsowg7KCE7J6Q66mU7J287J2EIOuztOuCtOyVvCDtlanri4jquYwgKOuztOuCvCDrjIDsg4HsnbQg7J6I64uk66m0KT8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBhbGlhcyAnJXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iCittc2dzdHIgIuy5mOuqheyggSDsmKTrpZg6ICclcycg67OE7Lmt7J2AIOyekOq4sCDsnpDsi6DsnYQg6rCA66as7YK164uI64ukXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTMwCittc2dpZCAiTWVzc2FnZS1JRCB0byBiZSB1c2VkIGFzIEluLVJlcGx5LVRvIGZvciB0aGUgZmlyc3QgZW1haWwgKGlmIGFueSk/ICIKK21zZ3N0ciAi7LKrIOuplOydvOyXkCDrjIDtlbQgKOyeiOuLpOuptCkgTWVzc2FnZS1JROqwgCBJbi1SZXBseS1Ub+yXkCDsgqzsmqnrkJjsl4jsirXri4jri6Q/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5ODggZ2l0LXNlbmQtZW1haWwucGVybDo5OTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICLsmKTrpZg6IOuLpOydjOyXkOyEnCDsmKzrsJTrpbgg7KO87IaM66W8IOy2lOy2nO2VoCDsiJgg7JeG7Iq164uI64ukOiAlc1xuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAwMAorbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAi7J20IOyjvOyGjOuhnCDrrLTsl4fsnYQg7ZWY7Iuc6rKg7Iq164uI6rmMPyAoW3Fd64Gd64K06riwfFtkXeuyhOumrOq4sHxbZV3tjrjsp5EpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTMxNworIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiXCIlc1wiIENBIOqyveuhnOqwgCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQwMAorbXNnaWQgIiIKKyIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIgorIiAgICBhZGRyZXNzZXMgZm91bmQgaW4gdGhlIHBhdGNoIGNvbW1pdCBtZXNzYWdlLiBCeSBkZWZhdWx0XG4iCisiICAgIHNlbmQtZW1haWwgcHJvbXB0cyBiZWZvcmUgc2VuZGluZyB3aGVuZXZlciB0aGlzIG9jY3Vycy5cbiIKKyIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIgorIiAgICBjb25maWd1cmF0aW9uIHNldHRpbmcuXG4iCisiXG4iCisiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iCisiICAgIFRvIHJldGFpbiB0aGUgY3VycmVudCBiZWhhdmlvciwgYnV0IHNxdWVsY2ggdGhpcyBtZXNzYWdlLFxuIgorIiAgICBydW4gJ2dpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0bycuXG4iCisiXG4iCittc2dzdHIgIiIKKyIgICAg7JyE7J2YIENjIOuqqeuhneydgCDtjKjsuZgg7Luk67CLIOuplOyLnOyngOyXkCDrk6TslrQg7J6I64qUIOy2lOqwgCDso7zshozroZxcbiIKKyIgICAg7ZmV7J6l65Cp64uI64ukLiDquLDrs7jqsJLsnLzroZwg7ZmV7J6l65CY6riwIOyghOyXkCBzZW5kLWVtYWls7JeQ7IScXG4iCisiICAgIOusvOyWtOu0heuLiOuLpC4g7J2065+wIOuPmeyekeydgCBzZW5kbWFpbC5jb25maXJtIOyEpOygleyXkOyEnFxuIgorIiAgICDsobDsoJXtlaAg7IiYIOyeiOyKteuLiOuLpC5cbiIKKyJcbiIKKyIgICAg7KCV67O066W8IOuNlCDrs7TroKTrqbQsICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAn66W8IOyLpO2Wie2VmOyLreyLnOyYpC5cbiIKKyIgICAg7ZiE7J6sIOuPmeyekeydhCDsnKDsp4DtlZjroKTrqbQsIOydtCDrqZTsi5zsp4Drpbwg66y07Iuc7ZWY6rOgLFxuIgorIiAgICAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJyDrqoXroLnsnYRcbiIKKyIgICAg7Iuk7ZaJ7ZWY7Iut7Iuc7JikLlxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDE1Cittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICIiCisi7J20IOyghOyekOuplOydvOydhCDrs7TrgrTsi5zqsqDsirXri4jquYw/IChbeV3smIh8W25d7JWE64uI7JikfFtlXe2OuOynkXxbcV3rgZ3rgrTquLB8W2Fd66qo65GQKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MTgKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIu2VhOyalO2VnCDsoITsnpDrqZTsnbwg64u17J6lIOuztOuDheuLiOuLpCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ2Cittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAi7ZWE7JqU7ZWcIFNNVFAg7ISc67KE66W8IOygnOuMgOuhnCDsp4DsoJXtlZjsp4Ag7JWK7JWY7Iq164uI64ukLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNUQVJUVExTISAlcyIKK21zZ3N0ciAi7ISc67KE7JeQ7IScIFNUQVJUVExT66W8IOyngOybkO2VmOyngCDslYrsirXri4jri6QhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0OTggZ2l0LXNlbmQtZW1haWwucGVybDoxNTAyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNUQVJUVExTIGZhaWxlZCEgJXMiCittc2dzdHIgIlNUQVJUVExTIOyLpO2MqCEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxMgorbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgIiIKKyJTTVRQ66W8IOygnOuMgOuhnCDstIjquLDtmZTtlaAg7IiYIOyXhuyKteuLiOuLpC4g7ISk7KCV7J2EIO2ZleyduO2VmOqzoCAtLXNtdHAtZGVidWcg7Ji17IWY7J2EIOyCrOyaqSIKKyLtlZjsi63si5zsmKQuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHNlbmQgJXNcbiIKK21zZ3N0ciAiJXPsnYQo66W8KSDrs7TrgrTripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICIlcyDrs7TrgrTripQg7Z2J64K0XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzMworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZW50ICVzXG4iCittc2dzdHIgIiVzIOuztOuDhFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzUKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICLshLHqs7Ug7Z2J64K0LiDquLDroZ3snYA6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzNQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAi7ISx6rO1LiDquLDroZ3snYA6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICLqsrDqs7w6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTUwCittc2dpZCAiUmVzdWx0OiBPS1xuIgorbXNnc3RyICLqsrDqs7w6IOygleyDgVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICIlcyDtjIzsnbzsnYQg7Je0IOyImCDsl4bsirXri4jri6QiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYxNSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIGNjOiAlcyDstpTqsIAsICclcycg7KSE7JeQ7IScXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgdG86ICVzIOy2lOqwgCwgJyVzJyDspITsl5DshJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveOyVhOuLmCkgY2M6ICVzIOy2lOqwgCwgJyVzJyDspITsl5DshJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjk5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihib2R5KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIijrs7jrrLgpIGNjOiAlcyDstpTqsIAsICclcycg7KSE7JeQ7IScXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTgxNworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIENvdWxkIG5vdCBleGVjdXRlICclcyciCittc2dzdHIgIiglcykgJyVzJ+ydhCDsi6TtlontlaAg7IiYIOyXhuyKteuLiOuLpCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODI0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykgJXM6ICVzIOy2lOqwgCwgJyVzJyDspITsl5DshJxcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiKCVzKSAnJXMnKOydhCnrpbwg7Zal7ZWcIO2MjOydtO2UhOulvCDri6vripTrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NTUKK21zZ2lkICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiCittc2dzdHIgIuuplOyLnOyngOulvCA367mE7Yq466GcIOuztOuCvCDsiJgg7JeG7Iq164uI64ukIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NjMKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICLsnpjrqrvrkJwg7KCE7IahIOyduOy9lOuUqSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTAxIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1MiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIiVz7J2EKOulvCkg7Je0IOyImCDsl4bsirXri4jri6Q6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlczog7Yyo7LmY7JeQIDk5OOyekOuztOuLpCDrjZQg6ri0IOykhOydtCDrk6TslrQg7J6I7Iq164uI64ukIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIiVzIOuEmOyWtOqwkCwg7JiI67mEIO2ZleyepeyekCAnJXMnIOyeiOydjC5cbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgIuygleunkOuhnCAlcyDtjIzsnbzsnYQg67O064K07Iuc6rKg7Iq164uI6rmMPyBbeXxOXTogIgpkaWZmIC0tZ2l0IGEvcG8vcHRfUFQucG8gYi9wby9wdF9QVC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJkNTVhCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcHRfUFQucG8KQEAgLTAsMCArMSwxNjgwNCBAQAorIyBQb3J0dWd1ZXNlIHRyYW5zbGF0aW9ucyBmb3IgR2l0IHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAxMiBNYXJjbyBTb3VzYSA8bWFyY29tc291c2EgQVQgZ21haWwuY29tPgorIyBDb3B5cmlnaHQgKEMpIDIwMTYgVmFzY28gQWxtZWlkYSA8dmFzY29tYWxtZWlkYUBzYXBvLnB0PgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIENvbnRyaWJ1dG9yczoKKyMgLSBNYXJjbyBTb3VzYSA8bWFyY29tc291c2EgQVQgZ21haWwuY29tPgorIyBWYXNjbyBBbG1laWRhIDx2YXNjb21hbG1laWRhQHNhcG8ucHQ+LCAyMDE2LCAyMDE3LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDQtMjMgMDk6NTQrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTctMDUtMDEgMjE6MTcrMDAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVmFzY28gQWxtZWlkYSA8dmFzY29tYWxtZWlkYUBzYXBvLnB0PlxuIgorIkxhbmd1YWdlLVRlYW06IFBvcnR1Z3Vlc2VcbiIKKyJMYW5ndWFnZTogcHRcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogVmlydGFhbCAwLjcuMVxuIgorCisjOiBhZHZpY2UuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiAlLipzXG4iCittc2dzdHIgImRpY2E6ICUuKnNcbiIKKworIzogYWR2aWNlLmM6ODMKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyIGNoZXJyeS1waWNrIHBvcnF1ZSB0ZW0gZmljaGVpcm9zIG7Do28gaW50ZWdyYWRvcy4iCisKKyM6IGFkdmljZS5jOjg1Cittc2dpZCAiQ29tbWl0dGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHN1Ym1ldGVyIHBvcnF1ZSB0ZW0gZmljaGVpcm9zIG7Do28gaW50ZWdyYWRvcy4iCisKKyM6IGFkdmljZS5jOjg3Cittc2dpZCAiTWVyZ2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGludGVncmFyIHBvcnF1ZSB0ZW0gZmljaGVpcm9zIG7Do28gaW50ZWdyYWRvcy4iCisKKyM6IGFkdmljZS5jOjg5Cittc2dpZCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHB1eGFyIHBvcnF1ZSB0ZW0gZmljaGVpcm9zIG7Do28gaW50ZWdyYWRvcy4iCisKKyM6IGFkdmljZS5jOjkxCittc2dpZCAiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgcmV2ZXJ0ZSBwb3JxdWUgdGVtIGZpY2hlaXJvcyBuw6NvIGludGVncmFkb3MuIgorCisjOiBhZHZpY2UuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVmZXR1YXIgJXMgcG9ycXVlIHRlbSBmaWNoZWlyb3MgbsOjbyBpbnRlZ3JhZG9zLiIKKworIzogYWR2aWNlLmM6MTAxCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIkNvcnJpamEtb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyBlIHVzZSAnZ2l0IGFkZC9ybSA8ZmljaGVpcm8+J1xuIgorImNvbmZvcm1lIGFwcm9wcmlhZG8gcGFyYSBtYXJjw6EtbG9zIGNvbW8gcmVzb2x2aWRvcyBlIHN1Ym1ldGEuIgorCisjOiBhZHZpY2UuYzoxMDkKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIkEgdGVybWluYXIgZGV2aWRvIGEgY29uZmxpdG8gbsOjbyByZXNvbHZpZG8uIgorCisjOiBhZHZpY2UuYzoxMTQgYnVpbHRpbi9tZXJnZS5jOjExODUKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIk7Do28gY29uY2x1w61kbyBhIGludGVncmHDp8OjbyAoTUVSR0VfSEVBRCBwcmVzZW50ZSkuIgorCisjOiBhZHZpY2UuYzoxMTYKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIgorbXNnc3RyICJTdWJtZXRhIGFzIHN1YXMgYWx0ZXJhw6fDtWVzIGFudGVzIGRlIGludGVncmFyLiIKKworIzogYWR2aWNlLmM6MTE3Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICJBIHRlcm1pbmFyIGRldmlkbyBhIGludGVncmHDp8OjbyBpbmNvbXBsZXRhLiIKKworIzogYWR2aWNlLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBjaGVja2luZyBvdXQgJyVzJy5cbiIKKyJcbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBjaGVja291dC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYiB3aXRoIHRoZSBjaGVja291dCBjb21tYW5kIGFnYWluLiBFeGFtcGxlOlxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCittc2dzdHIgIiIKKyJOb3RhOiBhIGV4dHJhaXIgJyVzJy5cbiIKKyJcbiIKKyJFbmNvbnRyYS1zZSBlbSBlc3RhZG8gJ0hFQUQgZGVzdGFjYWRhJy4gUG9kZSBpbnNwZWNpb25hciwgZmF6ZXIgYWx0ZXJhw6fDtWVzXG4iCisiZXhwZXJpbWVudGFpcyBlIHN1Ym1ldMOqLWxhcyBlIHBvZGUgZGVzY2FydGFyIHF1YWxxdWVyIGNvbW1pdCBxdWUgZmHDp2EgbmVzdGVcbiIKKyJlc3RhZG8gc2VtIGludGVyZmVyaXIgb3V0cm8gcmFtbyBzZSBleHRyYWlyIG91dHJvIHJhbW8uXG4iCisiXG4iCisiU2UgZGVzZWphIGNyaWFyIHVtIG5vdm8gcmFtbyBwYXJhIHJldGVyIG9zIGNvbW1pdHMgcXVlIGNyaW91LCBwb2RlIGZhesOqLWxvXG4iCisiKGFnb3JhIG91IG1haXMgdGFyZGUpIHVzYW5kbyAtYiBjb20gbyBjb21hbmRvIGNoZWNrb3V0IG91dHJhIHZlei4gRXhlbXBsbzpcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiA8bm92by1ub21lLXJhbW8+XG4iCisiXG4iCisKKyM6IGFwcGx5LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIm9ww6fDo28gZGUgZXNwYcOnbyBlbSBicmFuY28gbsOjbyByZWNvbmhlY2lkYSAnJXMnIgorCisjOiBhcHBseS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib3DDp8OjbyBkZSBpZ25vcmFyIGVzcGHDp28gZW0gYnJhbmNvIG7Do28gcmVjb25oZWNpZGEgJyVzJyIKKworIzogYXBwbHkuYzoxMjUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgZSAtLTN3YXkgbsOjbyBwb2RlbSBzZXIgdXNhZG9zIGp1bnRvcy4iCisKKyM6IGFwcGx5LmM6MTI3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIGUgLS0zd2F5IG7Do28gcG9kZW0gc2VyIHVzYWRvcyBqdW50b3MuIgorCisjOiBhcHBseS5jOjEzMAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IGZvcmEgZGUgdW0gcmVwb3NpdMOzcmlvIgorCisjOiBhcHBseS5jOjE0MQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXggZm9yYSBkZSB1bSByZXBvc2l0w7NyaW8iCisKKyM6IGFwcGx5LmM6MTQ0Cittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIGZvcmEgZGUgdW0gcmVwb3NpdMOzcmlvIgorCisjOiBhcHBseS5jOjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBwcmVwYXJhciBhIHJlZ2V4cCBkZSBjYXJpbWJvIGRlIGRhdGEvaG9yYSAlcyIKKworIzogYXBwbHkuYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIHJldG9ybm91ICVkIHBhcmEgYSBlbnRyYTogJXMiCisKKyM6IGFwcGx5LmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlbmNvbnRyYXIgbyBub21lIGRvIGZpY2hlaXJvIG5vIHBhdGNoIG5hIGxpbmhhICVkIgorCisjOiBhcHBseS5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGluY29ycmV0byAtIGVzcGVyYXZhLXNlIC9kZXYvbnVsbCwgb2J0ZXZlLXNlICVzIG5hIGxpbmhhICIKKyIlZCIKKworIzogYXBwbHkuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGluY29ycmV0byAtIG8gbm9tZSBkbyBub3ZvIGZpY2hlaXJvIG5hIGxpbmhhICVkIMOpICIKKyJpbmNvbnNpc3RlbnRlIgorCisjOiBhcHBseS5jOjk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogZ2l0LWRpZmYgaW5jb3JyZXRvIC0gbyBub21lIGRvIGZpY2hlaXJvIGFudGlnbyBuYSBsaW5oYSAlZCDDqSAiCisiaW5jb25zaXN0ZW50ZSIKKworIzogYXBwbHkuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBnaXQtZGlmZiBpbmNvcnJldG8gLSBlc3BlcmF2YS1zZSAvZGV2L251bGwgbmEgbGluaGEgJWQiCisKKyM6IGFwcGx5LmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY29udGFnZW06IGxpbmhhIGluZXNwZXJhZGE6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTU1NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJmcmFnbWVudG8gZGUgcGF0Y2ggc2VtIGNhYmXDp2FsaG8gbmEgbGluaGEgJWQ6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTU3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisibyBjYWJlw6dhbGhvIGRvIGdpdCBkaWZmIG7Do28gcmV2ZWxvdSBvIG5vbWUgZG8gZmljaGVpcm8gZGVwb2lzIGRlIHNlIHJlbW92ZXIgIgorIiVkIGNvbXBvbmVudGUgZG8gY2FtaW5obyAobGluaGEgJWQpIgorbXNnc3RyWzFdICIiCisibyBjYWJlw6dhbGhvIGRvIGdpdCBkaWZmIG7Do28gcmV2ZWxvdSBvIG5vbWUgZG8gZmljaGVpcm8gZGVwb2lzIGRlIHNlIHJlbW92ZXIgIgorIiVkIGNvbXBvbmVudGVzIGRlIGNhbWluaG8gKGxpbmhhICVkKSIKKworIzogYXBwbHkuYzoxNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiCittc2dzdHIgIm8gY2FiZcOnYWxobyBkbyBnaXQgZGlmZiBuw6NvIHJldmVsYSBvIG5vbWUgZG8gZmljaGVpcm8gKGxpbmhhICVkKSIKKworIzogYXBwbHkuYzoxNzU5Cittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIm8gbm92byBmaWNoZWlybyBkZXBlbmRlIGRlIGNvbnRlw7pkb3MgYW50aWdvcyIKKworIzogYXBwbHkuYzoxNzYxCittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAibyBmaWNoZWlybyBlbGltaW5hZG8gYWluZGEgdGVtIGNvbnRlw7pkb3MiCisKKyM6IGFwcGx5LmM6MTc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIGNvcnJvbXBpZG8gbmEgbGluaGEgJWQiCisKKyM6IGFwcGx5LmM6MTgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibyBub3ZvIGZpY2hlaXJvICVzIGRlcGVuZGUgZGUgY29udGXDumRvcyBhbnRpZ29zIgorCisjOiBhcHBseS5jOjE4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAibyBmaWNoZWlybyBlbGltaW5hZG8gJXMgYWluZGEgdGVtIGNvbnRlw7pkb3MiCisKKyM6IGFwcGx5LmM6MTgzNworIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiBhdmlzbzogbyBmaWNoZWlybyAlcyBmaWNhcsOhIHZhemlvLCBtYXMgbsOjbyBzZXLDoSBlbGltaW5hZG8iCisKKyM6IGFwcGx5LmM6MTk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJwYXRjaCBiaW7DoXJpbyBjb3Jyb21waWRvIG5hIGxpbmhhICVkOiAlLipzIgorCisjOiBhcHBseS5jOjIwMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJwYXRjaCBiaW7DoXJpbyBuw6NvIHJlY29uaGVjaWRvIG5hIGxpbmhhICVkIgorCisjOiBhcHBseS5jOjIxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggaW5jb21wcmVlbnPDrXZlbCBuYSBsaW5oYSAlZCIKKworIzogYXBwbHkuYzoyMjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciBhIGxpZ2HDp8OjbyBzaW1iw7NsaWNhICVzIgorCisjOiBhcHBseS5jOjIyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgb3UgbGVyICVzIgorCisjOiBhcHBseS5jOjI5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICJpbsOtY2lvIGRlIGxpbmhhIGludsOhbGlkbzogJyVjJyIKKworIzogYXBwbHkuYzozMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiRXhjZXJ0byBuwrolZCBiZW0gc3VjZWRpZG8gbmEgbGluaGEgJWQgKCVkIGxpbmhhIGRlc2xvY2FkYSkuIgorbXNnc3RyWzFdICJFeGNlcnRvIG7CuiVkIGJlbSBzdWNlZGlkbyBuYSBsaW5oYSAlZCAoJWQgbGluaGFzIGRlc2xvY2FkYXMpLiIKKworIzogYXBwbHkuYzozMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIkNvbnRleHRvIHJlZHV6aWRvIHBhcmEgKCVsZC8lbGQpIHBhcmEgYXBsaWNhciBvIGZyYWdtZW50byBlbSAlZCIKKworIzogYXBwbHkuYzozMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJhbyBwcm9jdXJhIHBvcjpcbiIKKyIlLipzIgorCisjOiBhcHBseS5jOjMwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAiZmFsdGEgZGUgZGFkb3MgZG8gcGF0Y2ggYmluw6FyaW8gJyVzJyIKKworIzogYXBwbHkuYzozMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXZlcnNlLWFwcGx5IGEgYmluYXJ5IHBhdGNoIHdpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIgorbXNnc3RyICIiCisibsOjbyDDqSBwb3Nzw612ZWwgYXBsaWNhciBvIHJldmVyc28gZGUgdW0gcGF0Y2ggYmluw6FyaW8gYSAnJXMnIHNlbSBvIGV4Y2VydG8gIgorInJldmVyc28iCisKKyM6IGFwcGx5LmM6MzEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgIiIKKyJuw6NvIMOpIHBvc3PDrXZlbCBhcGxpY2FyIHBhdGNoIGJpbsOhcmlvIGEgJyVzJyBzZW0gbGluaGEgZGUgw61uZGljZSBjb21wbGV0YSIKKworIzogYXBwbHkuYzozMTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgcGF0Y2ggYXBwbGllcyB0byAnJXMnICglcyksIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorIm8gcGF0Y2ggYXBsaWNhLXNlIGEgJyVzJyAoJXMpLCBxdWUgbsOjbyBjb3JyZXNwb25kZSBhb3MgY29udGXDumRvcyBhdHVhaXMuIgorCisjOiBhcHBseS5jOjMxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICJvIHBhdGNoIGFwbGljYS1zZSBhIHVtICclcycgdmF6aW8gbWFzIG7Do28gZXN0w6EgdmF6aW8iCisKKyM6IGFwcGx5LmM6MzE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIGEgcG9zdGltYWdlIG5lY2Vzc8OhcmlhICVzIGRlICclcyciCisKKyM6IGFwcGx5LmM6MzE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAibyBwYXRjaCBiaW7DoXJpbyBuw6NvIGZvaSBhcGxpY2FkbyBjb3JyZXRhbWVudGUgYSAnJXMnIgorCisjOiBhcHBseS5jOjMxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJvIHBhdGNoIGJpbsOhcmlvIGFwbGljYWRvIGEgJyVzJyBnZXJhIHJlc3VsdGFkb3MgaW5jb3JyZXRvcyAoZXNwZXJhdmEtc2UgJXMsICIKKyJvYnRldmUtc2UgJXMpIgorCisjOiBhcHBseS5jOjMyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgImZhbGhhIGFvIGFwbGljYXIgbyBwYXRjaDogJXM6JWxkIgorCisjOiBhcHBseS5jOjMzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBleHRyYWlyICVzIgorCisjOiBhcHBseS5jOjMzODEgYXBwbHkuYzozMzkyIGFwcGx5LmM6MzQzOCBzZXR1cC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAiZmFsaGEgYW8gbGVyICVzIgorCisjOiBhcHBseS5jOjMzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiYSBsZXIgJyVzJyBpbmRpY2FkbyBwb3IgdW1hIGxpZ2HDp8OjbyBzaW1iw7NsaWNhIgorCisjOiBhcHBseS5jOjM0MTggYXBwbHkuYzozNjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICJvIGNhbWluaG8gJXMgZm9pIGVsaW1pbmFkbyBvdSBtdWRvdSBkZSBub21lIgorCisjOiBhcHBseS5jOjM1MDEgYXBwbHkuYzozNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IG7Do28gZXhpc3RlIG5vIMOtbmRpY2UiCisKKyM6IGFwcGx5LmM6MzUxMCBhcHBseS5jOjM2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIlczogbsOjbyB0ZW0gY29ycmVzcG9uZMOqbmNpYSBubyDDrW5kaWNlIgorCisjOiBhcHBseS5jOjM1NDUKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisibyByZXBvc2l0w7NyaW8gbsOjbyB0ZW0gbyBibG9iIG5lY2Vzc8OhcmlvIHBhcmEgcmVjb3JyZXIgYSBpbnRlZ3Jhw6fDo28gY29tIDMgIgorInBvbnRvcy4iCisKKyM6IGFwcGx5LmM6MzU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIkEgcmVjb3JyZXIgYSBpbnRlZ3Jhw6fDo28gY29tIDMgcG9udG9zLi4uXG4iCisKKyM6IGFwcGx5LmM6MzU2NCBhcHBseS5jOjM1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIG8gY29udGXDumRvIGF0dWFsIGRlICclcyciCisKKyM6IGFwcGx5LmM6MzU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJGYWxoYSBhIHJlY29ycmVyIGEgaW50ZWdyYcOnw6NvIGNvbSAzIHBvbnRvcy4uLlxuIgorCisjOiBhcHBseS5jOjM1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICJQYXRjaCBhcGxpY2FkbyBhICclcycgY29tIGNvbmZsaXRvcy5cbiIKKworIzogYXBwbHkuYzozNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICJQYXRjaCBhcGxpY2FkbyBhICclcycgY29tIHN1Y2Vzc28uXG4iCisKKyM6IGFwcGx5LmM6MzYyNQorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgInBhdGNoIGRlIHJlbW/Dp8OjbyBkZWl4YSBjb250ZcO6ZG9zIG5vIGZpY2hlaXJvIgorCisjOiBhcHBseS5jOjM2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiB0aXBvIGVycmFkbyIKKworIzogYXBwbHkuYzozNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgw6kgZG8gdGlwbyAlbywgZXNwZXJhZG8gJW8iCisKKyM6IGFwcGx5LmM6Mzg1MCBhcHBseS5jOjM4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgImNhbWluaG8gaW52w6FsaWRvICclcyciCisKKyM6IGFwcGx5LmM6MzkwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBqw6EgZXhpc3RlIG5vIMOtbmRpY2UiCisKKyM6IGFwcGx5LmM6MzkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVzOiBqw6EgZXhpc3RlIG5vIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8iCisKKyM6IGFwcGx5LmM6MzkzMQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIm8gbm92byBtb2RvICglbykgZGUgJXMgbsOjbyBjb3JyZXNwb25kZSBhbyBtb2RvIGFudGlnbyAoJW8pIgorCisjOiBhcHBseS5jOjM5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJvIG5vdm8gbW9kbyAoJW8pIGRlICVzIG7Do28gY29ycmVzcG9uZGUgYW8gbW9kbyBhbnRpZ28gKCVvKSBkZSAlcyIKKworIzogYXBwbHkuYzozOTU2CisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJvIGZpY2hlaXJvIGFmZXRhZG8gJyVzJyDDqSBpbmRpY2FkbyBwb3IgdW1hIGxpZ2HDp8OjbyBzaW1iw7NsaWNhIgorCisjOiBhcHBseS5jOjM5NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogcGF0Y2ggbsOjbyBzZSBhcGxpY2EgY29tIHN1Y2Vzc28iCisKKyM6IGFwcGx5LmM6Mzk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAiQSB2ZXJpZmljYXIgbyBwYXRjaCAlcy4uLiIKKworIzogYXBwbHkuYzo0MDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgImZhbHRhIGluZm9ybWHDp8OjbyBkZSBzaGExIG91IG7Do28gw6kgw7p0aWwgcGFyYSBvIHN1Ym3Ds2R1bG8gJXMiCisKKyM6IGFwcGx5LmM6NDA3MworIywgYy1mb3JtYXQKK21zZ2lkICJtb2RlIGNoYW5nZSBmb3IgJXMsIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IEhFQUQiCittc2dzdHIgImFsdGVyYcOnw6NvIGRlIG1vZG8gZGUgJXMgcXVlIG7Do28gZXN0w6EgbmEgSEVBRCBhdHVhbCIKKworIzogYXBwbHkuYzo0MDc2CisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzICglcykuIgorbXNnc3RyICJmYWx0YSBpbmZvcm1hw6fDo28gZGUgc2hhMSBvdSBuw6NvIMOpIMO6dGlsICglcykuIgorCisjOiBhcHBseS5jOjQwODEgYnVpbHRpbi9jaGVja291dC5jOjI1MiBidWlsdGluL3Jlc2V0LmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgImZhbGhhIGFvIGludm9jYXIgbWFrZV9jYWNoZV9lbnRyeSBlbSAnJXMnIgorCisjOiBhcHBseS5jOjQwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFkZCAlcyB0byB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhZGljaW9uYXIgJXMgYW8gw61uZGljZSB0ZW1wb3LDoXJpbyIKKworIzogYXBwbHkuYzo0MDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciDDrW5kaWNlIHRlbXBvcsOhcmlvIHBhcmEgJXMiCisKKyM6IGFwcGx5LmM6NDIzMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHJlbW92ZXIgJXMgZG8gw61uZGljZSIKKworIzogYXBwbHkuYzo0MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAicGF0Y2ggY29ycm9tcGlkbyBubyBzdWJtw7NkdWxvICVzIgorCisjOiBhcHBseS5jOjQyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIG9idGVyIGVzdGFkbyBkbyBub3ZvIGZpY2hlaXJvIGNyaWFkbyAnJXMnIgorCisjOiBhcHBseS5jOjQyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgIiIKKyJuw6NvIMOpIHBvc3PDrXZlbCBjcmlhciBhcm1hemVuYW1lbnRvIGRlIHNlZ3VyYW7Dp2EgZG8gZmljaGVpcm8gcmVjw6ltLWNyaWFkbyAlcyIKKworIzogYXBwbHkuYzo0Mjg4IGFwcGx5LmM6NDQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWRpY2lvbmFyICVzIMOgIGNhY2hlIgorCisjOiBhcHBseS5jOjQzMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgImZhbGhhIGFvIGVzY3JldmVyIHBhcmEgJyVzJyIKKworIzogYXBwbHkuYzo0MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJhIGZlY2hhciBvIGZpY2hlaXJvICclcyciCisKKyM6IGFwcGx5LmM6NDQwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVzY3JldmVyIG8gZmljaGVpcm8gJyVzJyBjb20gbyBtb2RvICVvIgorCisjOiBhcHBseS5jOjQ1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiUGF0Y2ggJXMgYXBsaWNhZG8gY29tIHN1Y2Vzc28uIgorCisjOiBhcHBseS5jOjQ1MDkKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiZXJybyBpbnRlcm5vIgorCisjOiBhcHBseS5jOjQ1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICJBIGFwbGljYXIgcGF0Y2ggJSVzIGNvbSAlZCByZWplacOnw6NvLi4uIgorbXNnc3RyWzFdICJBIGFwbGljYXIgcGF0Y2ggJSVzIGNvbSAlZCByZWplacOnw7Vlcy4uLiIKKworIzogYXBwbHkuYzo0NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAiYSB0cnVuY2FyIG8gbm9tZSBkbyBmaWNoZWlybyAucmVqIGVtICUuKnMucmVqIgorCisjOiBhcHBseS5jOjQ1MzEgYnVpbHRpbi9mZXRjaC5jOjczOSBidWlsdGluL2ZldGNoLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhYnJpciAlcyIKKworIzogYXBwbHkuYzo0NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIkV4Y2VydG8gbsK6JWQgYXBsaWNhZG8gY29tIHN1Y2Vzc28uIgorCisjOiBhcHBseS5jOjQ1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICJFeGNlcnRvIG7CuiVkIHJlamVpdGFkby4iCisKKyM6IGFwcGx5LmM6NDY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkIHBhdGNoICclcycuIgorbXNnc3RyICJQYXRjaCAnJXMnIGlnbm9yYWRvLiIKKworIzogYXBwbHkuYzo0NjY3Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJlbnRyYWRhIG7Do28gcmVjb25oZWNpZGEiCisKKyM6IGFwcGx5LmM6NDY4NgorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgbyBmaWNoZWlybyBkZSDDrW5kaWNlIgorCisjOiBhcHBseS5jOjQ4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgbyBwYXRjaCAnJXMnOiAlcyIKKworIzogYXBwbHkuYzo0ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiVkIGVycm8gZGUgZXNwYcOnbyBlbSBicmFuY28gcmVwcmltaWRvIgorbXNnc3RyWzFdICIlZCBlcnJvcyBkZSBlc3Bhw6dvIGVtIGJyYW5jbyByZXByaW1pZG9zIgorCisjOiBhcHBseS5jOjQ4NTYgYXBwbHkuYzo0ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIGxpbmhhIGFkaWNpb25hIGVycm9zIGRlIGVzcGHDp28gZW0gYnJhbmNvLiIKK21zZ3N0clsxXSAiJWQgbGluaGFzIGFkaWNpb25hbSBlcnJvcyBkZSBlc3Bhw6dvIGVtIGJyYW5jby4iCisKKyM6IGFwcGx5LmM6NDg2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBsaW5oYSBhcGxpY2FkYSBkZXBvaXMgZGUgY29ycmlnaXIgZXJyb3MgZGUgZXNwYcOnbyBlbSBicmFuY28uIgorbXNnc3RyWzFdICIlZCBsaW5oYXMgYXBsaWNhZGFzIGRlcG9pcyBkZSBjb3JyaWdpciBlcnJvcyBkZSBlc3Bhw6dvIGVtIGJyYW5jby4iCisKKyM6IGFwcGx5LmM6NDg4MCBidWlsdGluL2FkZC5jOjQ2MyBidWlsdGluL212LmM6Mjk4IGJ1aWx0aW4vcm0uYzozOTEKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBub3ZvIGZpY2hlaXJvIGRlIMOtbmRpY2UiCisKKyM6IGFwcGx5LmM6NDkxMSBhcHBseS5jOjQ5MTQgYnVpbHRpbi9hbS5jOjIyNzcgYnVpbHRpbi9hbS5jOjIyODAKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9mZXRjaC5jOjk4IGJ1aWx0aW4vcHVsbC5jOjE4MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjMwNCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjI5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzMKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNjEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjM5Cittc2dpZCAicGF0aCIKK21zZ3N0ciAiY2FtaW5obyIKKworIzogYXBwbHkuYzo0OTEyCittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAibsOjbyBhcGxpY2FyIGFsdGVyYcOnw7VlcyBxdWUgY29ycmVzcG9uZGFtIGFvIGNhbWluaG8gZm9ybmVjaWRvIgorCisjOiBhcHBseS5jOjQ5MTUKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJhcGxpY2FyIGFsdGVyYcOnw7VlcyBxdWUgY29ycmVzcG9uZGFtIGFvIGNhbWluaG8gZm9ybmVjaWRvIgorCisjOiBhcHBseS5jOjQ5MTcgYnVpbHRpbi9hbS5jOjIyODYKK21zZ2lkICJudW0iCittc2dzdHIgIm51bSIKKworIzogYXBwbHkuYzo0OTE4Cittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgInJlbW92ZXIgPG51bT4gYmFycmFzIMOgIGVzcXVlcmRhIGRvcyBjYW1pbmhvcyBkZSBkaWZmIHRyYWRpY2lvbmFsIgorCisjOiBhcHBseS5jOjQ5MjEKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJpZ25vcmFyIGFkacOnw7VlcyBmZWl0YXMgcGVsbyBwYXRjaCIKKworIzogYXBwbHkuYzo0OTIzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJlbSB2ZXogZGUgYXBsaWNhciBvIHBhdGNoLCBtb3N0cmFyIG8gZGlmZnN0YXQgZGEgZW50cmFkYSIKKworIzogYXBwbHkuYzo0OTI3Cittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAibW9zdHJhciBuw7ptZXJvIGRlIGxpbmhhcyBhZGljaW9uYWRhcyBlIHJlbW92aWRhcyBlbSBub3Rhw6fDo28gZGVjaW1hbCIKKworIzogYXBwbHkuYzo0OTI5Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiZW0gdmV6IGRlIGFwbGljYXIgbyBwYXRjaCwgbW9zdHJhciB1bSByZXN1bW8gZGEgZW50cmFkYSIKKworIzogYXBwbHkuYzo0OTMxCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiZW0gdmV6IGRlIGFwbGljYXIgbyBwYXRjaCwgdmVyaWZpY2FyIHNlIG8gcGF0Y2ggcG9kZSBzZXIgYXBsaWNhZG8iCisKKyM6IGFwcGx5LmM6NDkzMworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiZ2FyYW50aXIgcXVlIG8gcGF0Y2ggcG9kZSBzZXIgYXBsaWNhZG8gYW8gw61uZGljZSBhdHVhbCIKKworIzogYXBwbHkuYzo0OTM1Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImFwbGljYXIgdW0gcGF0Y2ggc2VtIHRvY2FyIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGFwcGx5LmM6NDkzNworbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgImFjZWl0YXIgcGF0Y2hlcyBxdWUgYWx0ZXJhbSBmaWNoZWlyb3MgZm9yYSBkYSDDoXJlYSBkZSB0cmFiYWxobyIKKworIzogYXBwbHkuYzo0OTM5Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgImFwbGljYXIgbyBwYXRjaCB0YW1iw6ltICh1c2UgY29tIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCisKKyM6IGFwcGx5LmM6NDk0MQorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgInRlbnRhciBpbnRlZ3Jhw6fDo28gY29tIHRyw6pzIHBvbnRvcyBzZSB1bSBwYXRjaCBuw6NvIHNlIGFwbGljYSBjb20gw6p4aXRvIgorCisjOiBhcHBseS5jOjQ5NDMKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorImNvbnN0cnVpciB1bSDDrW5kaWNlIHRlbXBvcsOhcmlvIGJhc2VhZG8gbmEgaW5mb3JtYcOnw6NvIGluY29ycG9yYWRhIGRvIMOtbmRpY2UiCisKKyM6IGFwcGx5LmM6NDk0NiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY5IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MDgKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAib3MgY2FtaW5ob3MgZXN0w6NvIHNlcGFyYWRvcyBwb3IgY2FyYWN0ZXJlcyBOVUwiCisKKyM6IGFwcGx5LmM6NDk0OAorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAiZ2FyYW50aXIgcXVlLCBwZWxvIG1lbm9zLCA8bj4gbGluaGFzIGRlIGNvbnRleHRvIGNvaW5jaWRlbSIKKworIzogYXBwbHkuYzo0OTQ5IGJ1aWx0aW4vYW0uYzoyMjY1Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICJhw6fDo28iCisKKyM6IGFwcGx5LmM6NDk1MAorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICJkZXRldGFyIGxpbmhhcyBub3ZhcyBvdSBtb2RpZmljYWRhcyBxdWUgdGVuaGFtIGVzcGHDp29zIGVtIGJyYW5jbyIKKworIzogYXBwbHkuYzo0OTUzIGFwcGx5LmM6NDk1NgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgImlnbm9yYXIgYWx0ZXJhw6fDtWVzIGRlIGVzcGHDp28gZW0gYnJhbmNvIGFvIHByb2N1cmFyIGNvbnRleHRvIgorCisjOiBhcHBseS5jOjQ5NTkKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiYXBsaWNhciBvIHBhdGNoIGVtIHJldmVyc28iCisKKyM6IGFwcGx5LmM6NDk2MQorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICJuw6NvIGVzcGVyYXIgbmVuaHVtYSBsaW5oYSBkZSBjb250ZXh0byIKKworIzogYXBwbHkuYzo0OTYzCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgImRlaXhhciBvcyBleGNlcnRvcyByZWplaXRhZG9zIG5vcyByZXNwZXRpdm9zIGZpY2hlaXJvcyAqLnJlaiIKKworIzogYXBwbHkuYzo0OTY1Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgInBlcm1pdGlyIGEgc29icmVwb3Npw6fDo28gZGUgZXhjZXJ0b3MiCisKKyM6IGFwcGx5LmM6NDk2NiBidWlsdGluL2FkZC5jOjI2NyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE5CisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzcgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTQgYnVpbHRpbi9mc2NrLmM6NjUxCisjOiBidWlsdGluL2xvZy5jOjE4NjcgYnVpbHRpbi9tdi5jOjEyMiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNAorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgInNlciB2ZXJib3NvIgorCisjOiBhcHBseS5jOjQ5NjgKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorInRvbGVyYXIgZGV0ZcOnw7VlcyBpbmNvcnJldGFzIGRlIGZhbHRhIGRlIG5vdmEgbGluaGEgbm8gZmluYWwgZG8gZmljaGVpcm8iCisKKyM6IGFwcGx5LmM6NDk3MQorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAibsOjbyBjb25maWFyIG5hIGNvbnRhZ2VtIGRlIGxpbmhhcyBubyBjYWJlw6dhbGhvIGRvcyBleGNlcnRvcyIKKworIzogYXBwbHkuYzo0OTczIGJ1aWx0aW4vYW0uYzoyMjc0Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicmFpeiIKKworIzogYXBwbHkuYzo0OTc0Cittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAicHJlY2VkZXIgPHJvb3Q+IGEgdG9kb3Mgb3Mgbm9tZXMgZGUgZmljaGVpcm8iCisKKyM6IGFyY2hpdmUuYzoxMgorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs8b3DDp8O1ZXM+XSA8w6Fydm9yZS1ldGM+IFs8Y2FtaW5obz4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTMKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3DDp8O1ZXM+XSA8w6Fydm9yZS1ldGM+ICIKKyJbPGNhbWluaG8+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjMzMiBidWlsdGluL2FkZC5jOjE1MiBidWlsdGluL2FkZC5jOjQ0MiBidWlsdGluL3JtLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgIm8gZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvICclcycgbsOjbyBjb3JyZXNwb25kZSBhIG5lbmh1bSBmaWNoZWlybyIKKworIzogYXJjaGl2ZS5jOjQxNworbXNnaWQgImZtdCIKK21zZ3N0ciAiZm10IgorCisjOiBhcmNoaXZlLmM6NDE3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgImZvcm1hdG8gZG8gYXJxdWl2byIKKworIzogYXJjaGl2ZS5jOjQxOCBidWlsdGluL2xvZy5jOjE0MzYKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgInByZWZpeG8iCisKKyM6IGFyY2hpdmUuYzo0MTkKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICJwcmVjZWRlciBvIHByZWZpeG8gYSBjYWRhIG5vbWUgZGUgY2FtaW5obyBkZW50cm8gZG8gYXJxdWl2byIKKworIzogYXJjaGl2ZS5jOjQyMCBidWlsdGluL2JsYW1lLmM6MjU5OCBidWlsdGluL2JsYW1lLmM6MjU5OSBidWlsdGluL2NvbmZpZy5jOjU5CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg3IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODkgYnVpbHRpbi9ncmVwLmM6MTA2MQorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMSBidWlsdGluL2xzLWZpbGVzLmM6NTQyIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDEgYnVpbHRpbi9ub3Rlcy5jOjU2NCBidWlsdGluL3JlYWQtdHJlZS5jOjEyOQorIzogcGFyc2Utb3B0aW9ucy5oOjE1MworbXNnaWQgImZpbGUiCittc2dzdHIgImZpY2hlaXJvIgorCisjOiBhcmNoaXZlLmM6NDIxIGJ1aWx0aW4vYXJjaGl2ZS5jOjg5Cittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJlc2NyZXZlciBvIGFycXVpdm8gcGFyYSBlc3RlIGZpY2hlaXJvIgorCisjOiBhcmNoaXZlLmM6NDIzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAibGVyIC5naXRhdHRyaWJ1dGVzIGRvIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8iCisKKyM6IGFyY2hpdmUuYzo0MjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICJsaXN0YXIgZmljaGVpcm9zIGFycXVpdmFkb3MgcGFyYSBzdGRlcnIiCisKKyM6IGFyY2hpdmUuYzo0MjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICJhcm1hemVuYXIgYXBlbmFzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJjb21wcmVzc8OjbyByw6FwaWRhIgorCisjOiBhcmNoaXZlLmM6NDM0Cittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICJjb21wcmVzc8OjbyDDs3RpbWEiCisKKyM6IGFyY2hpdmUuYzo0MzcKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgImxpc3RhciBmb3JtYXRvcyBkZSBhcnF1aXZvIHN1cG9ydGFkb3MiCisKKyM6IGFyY2hpdmUuYzo0MzkgYnVpbHRpbi9hcmNoaXZlLmM6OTAgYnVpbHRpbi9jbG9uZS5jOjEwMyBidWlsdGluL2Nsb25lLmM6MTA2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODIKK21zZ2lkICJyZXBvIgorbXNnc3RyICJyZXBvIgorCisjOiBhcmNoaXZlLmM6NDQwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkxCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgIm9idGVyIG8gYXJxdWl2byBhIHBhcnRpciBkbyByZXBvc2l0w7NyaW8gcmVtb3RvIDxyZXBvPiIKKworIzogYXJjaGl2ZS5jOjQ0MSBidWlsdGluL2FyY2hpdmUuYzo5MiBidWlsdGluL25vdGVzLmM6NDg1Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAiY29tYW5kbyIKKworIzogYXJjaGl2ZS5jOjQ0MiBidWlsdGluL2FyY2hpdmUuYzo5MworbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAiY2FtaW5obyBwYXJhIG8gY29tYW5kbyBnaXQtdXBsb2FkLWFyY2hpdmUgbm8gcmVtb3RvIgorCisjOiBhcmNoaXZlLmM6NDQ5Cittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1yZW1vdGUiCittc2dzdHIgIk9ww6fDo28gaW5lc3BlcmFkYSAtLXJlbW90ZSIKKworIzogYXJjaGl2ZS5jOjQ1MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICJBIG9ww6fDo28gLS1leGVjIHPDsyBwb2RlIHNlciB1c2FkYSBlbSBjb25qdW50byBjb20gLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0NTMKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIKK21zZ3N0ciAiT3DDp8OjbyBpbmVzcGVyYWRhIC0tb3V0cHV0IgorCisjOiBhcmNoaXZlLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiRm9ybWF0byBkZSBhcnF1aXZvIGRlc2NvbmhlY2lkbyAnJXMnIgorCisjOiBhcmNoaXZlLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIkFyZ3VtZW50byBuw6NvIHN1cG9ydGFkbyBwYXJhIG8gZm9ybWF0byAnJXMnOiAtJWQiCisKKyM6IGF0dHIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS4qcyBuw6NvIMOpIHVtIG5vbWUgZGUgYXRyaWJ1dG8gdsOhbGlkbyIKKworIzogYXR0ci5jOjQwOAorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIk9zIHBhZHLDtWVzIG5lZ2F0aXZvcyBzw6NvIGlnbm9yYWRvcyBub3MgYXRyaWJ1dG9zIGRvIGdpdFxuIgorIlVzZSAnXFwhJyBwYXJhIHVtYSBleGNsYW1hw6fDo28gbGl0ZXJhbCDDoCBlc3F1ZXJkYS4iCisKKyM6IGJpc2VjdC5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciBvIGZpY2hlaXJvICclcyciCisKKyM6IGJpc2VjdC5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIgorbXNnc3RyICJDb250ZcO6ZG8gaW5jb3JyZXRhbWVudGUgY2l0YWRvIG5vIGZpY2hlaXJvICclcyc6ICVzIgorCisjOiBiaXNlY3QuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICJOw6NvIHNlIGVzdMOhIGEgYmlzc2V0YXIgbWFpcyFcbiIKKworIzogYmlzZWN0LmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICIlcyBuw6NvIMOpIHVtIG5vbWUgZGUgY29tbWl0IHbDoWxpZG8iCisKKyM6IGJpc2VjdC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiQSBiYXNlIGRlIGludGVncmHDp8OjbyAlcyDDqSBtw6EgKGJhZCkuXG4iCisiU2lnbmlmaWNhIHF1ZSBvIGJ1ZyBmb2kgY29ycmlnaWRvIGVudHJlICVzIGUgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJBIGJhc2UgZGUgaW50ZWdyYcOnw6NvICVzIMOpIG5vdmEgKG5ldykuXG4iCisiQSBwcm9wcmllZGFkZSBmb2kgbXVkYWRhIGVudHJlICVzIGUgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKyJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiQSBiYXNlIGRlIGludGVncmHDp8OjbyAlcyDDqSAlcy5cbiIKKyJTaWduaWZpY2EgcXVlIG8gcHJpbWVpcm8gY29tbWl0ICclcycgZXN0w6EgZW50cmUgJXMgZSBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorIk1heWJlIHlvdSBtaXN0b29rICVzIGFuZCAlcyByZXZzP1xuIgorbXNnc3RyICIiCisiQWxndW1hcyByZXZpc8O1ZXMgJXMgbsOjbyBhbnRlY2VkZW0gYSByZXZpc8OjbyAlcy5cbiIKKyJnaXQgYmlzZWN0IG7Do28gcG9kZSBmdW5jaW9uYXIgY29ycmV0YW1lbnRlIG5lc3RhIHNpdHVhw6fDo28uXG4iCisiVGFsdmV6IGNvbmZ1bmRpdSByZXZpc8O1ZXMgJXMgZSAlcz9cbiIKKworIzogYmlzZWN0LmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCittc2dzdHIgIiIKKyJ0ZW0tc2UgcXVlIHNhbHRhciBhIGJhc2UgZGUgaW50ZWdyYcOnw6NvIGVudHJlICVzIGUgWyVzXS5cbiIKKyJQb3J0YW50byBuw6NvIHNlIHBvZGUgdGVyIGEgY2VydGV6YSBxdWUgbyBwcmltZWlybyBjb21taXQgJXMgZXN0w6EgZW50cmUgJXMgZSAiCisiJXMuXG4iCisiQ29udGludWEtc2UgZGUgcXVhbHF1ZXIgbWFuZWlyYS4iCisKKyM6IGJpc2VjdC5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICJBIGJpc3NldGFyOiB1bWEgYmFzZSBkZSBpbnRlZ3Jhw6fDo28gdGVtIGRlIHNlciB0ZXN0YWRhXG4iCisKKyM6IGJpc2VjdC5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAicHJlY2lzYS1zZSBkZSB1bWEgcmV2aXPDo28gJXMiCisKKyM6IGJpc2VjdC5jOjg2NyBidWlsdGluL25vdGVzLmM6MTc0IGJ1aWx0aW4vdGFnLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgbyBmaWNoZWlybyAnJXMnIgorCisjOiBiaXNlY3QuYzo5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gZmljaGVpcm8gJyVzJyIKKworIzogYmlzZWN0LmM6OTQ4Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGxlciByZWZlcsOqbmNpYXMgYmlzc2V0YWRhcyIKKworIzogYmlzZWN0LmM6OTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyBlcmEgJXMgZSAlcyBlbSBzaW11bHTDom5lb1xuIgorCisjOiBiaXNlY3QuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyJOZW5odW0gY29tbWl0IHRlc3TDoXZlbCBlbmNvbnRyYWRvLlxuIgorIlRhbHZleiB0ZW5oYSBjb21lw6dhZG8gY29tIHBhcsOibWV0cm9zIGRlIGNhbWluaG8gaW5jb3JyZXRvcz9cbiIKKworIzogYmlzZWN0LmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIihhcHJveGltYWRhbWVudGUgJWQgcGFzc28pIgorbXNnc3RyWzFdICIoYXByb3hpbWFkYW1lbnRlICVkIHBhc3NvcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGgKKyMuICIocm91Z2hseSAlZCBzdGVwcykiIHRyYW5zbGF0aW9uCisjOiBiaXNlY3QuYzo5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJBIGJpc3NldGFyOiBmYWx0YSAlZCByZXZpc8OjbyBwYXJhIHRlc3RhciBkZXBvaXMgZGVzdGEgJXNcbiIKK21zZ3N0clsxXSAiQSBiaXNzZXRhcjogZmFsdGFtICVkIHJldmlzw7VlcyBwYXJhIHRlc3RhciBkZXBvaXMgZGVzdGEgJXNcbiIKKworIzogYnJhbmNoLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkFmdGVyIGZpeGluZyB0aGUgZXJyb3IgY2F1c2UgeW91IG1heSB0cnkgdG8gZml4IHVwXG4iCisidGhlIHJlbW90ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBieSBpbnZva2luZ1xuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCittc2dzdHIgIiIKKyJcbiIKKyJBcMOzcyByZXNvbHZlciBhIGNhdXNhIGRvIGVycm8sIHBvZGUgdGVudGFyIGNvcnJpZ2lyXG4iCisibyByYW1vIHJlbW90byBxdWUgZGV2ZSBzZXIgc2VndWlkbywgaW52b2NhbmRvXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKKworIzogYnJhbmNoLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJPIHJhbW8gJXMgbsOjbyBmb2kgY29uZmlndXJhZG8gY29tIHJhbW8gYSBtb250YW50ZSBkZWxlIHByw7NwcmlvLiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICJSYW1vICVzIGNvbmZpZ3VyYWRvIHBhcmEgc2VndWlyIG8gcmFtbyByZW1vdG8gJXMgZGUgJXMgcG9yIHJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAlcyBmcm9tICVzLiIKK21zZ3N0ciAiUmFtbyAlcyBjb25maWd1cmFkbyBwYXJhIHNlZ3VpciBvIHJhbW8gcmVtb3RvICVzIGRlICVzLiIKKworIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICJSYW1vICVzIGNvbmZpZ3VyYWRvIHBhcmEgc2VndWlyIG8gcmFtbyBsb2NhbCAlcyBwb3IgcmViYXNlLiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMuIgorbXNnc3RyICJSYW1vICVzIGNvbmZpZ3VyYWRvIHBhcmEgc2VndWlyIG8gcmFtbyBsb2NhbCAlcy4iCisKKyM6IGJyYW5jaC5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICJSYW1vICVzIGNvbmZpZ3VyYWRvIHBhcmEgc2VndWlyIGEgcmVmZXLDqm5jaWEgcmVtb3RhICVzIHBvciByZWJhc2UuIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICVzLiIKK21zZ3N0ciAiUmFtbyAlcyBjb25maWd1cmFkbyBwYXJhIHNlZ3VpciBhIHJlZmVyw6puY2lhIHJlbW90YSAlcy4iCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIlJhbW8gJXMgY29uZmlndXJhZG8gcGFyYSBzZWd1aXIgYSByZWZlcsOqbmNpYSBsb2NhbCAlcyBwb3IgcmViYXNlLiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzLiIKK21zZ3N0ciAiUmFtbyAlcyBjb25maWd1cmFkbyBwYXJhIHNlZ3VpciBhIHJlZmVyw6puY2lhIGxvY2FsICVzLiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgYSBjb25maWd1cmHDp8OjbyBkbyByYW1vIGEgbW9udGFudGUiCisKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICJOw6NvIHNlZ3VpZG86IGluZm9ybWHDp8OjbyBkYSByZWZlcsOqbmNpYSAlcyBhbWLDrWd1YSIKKworIzogYnJhbmNoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIG7Do28gw6kgdW0gbm9tZSB2w6FsaWRvIHBhcmEgdW0gcmFtby4iCisKKyM6IGJyYW5jaC5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiSsOhIGV4aXN0ZSB1bSByYW1vIGRlc2lnbmFkbyAnJXMnLiIKKworIzogYnJhbmNoLmM6MTk4Cittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBmb3LDp2FyIGEgYXR1YWxpemHDp8OjbyBkbyByYW1vIGF0dWFsLiIKKworIzogYnJhbmNoLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgY29uZmlndXJhciByYW1vIGEgc2VndWlyOyBvIHBvbnRvIGluaWNpYWwgJyVzJyBuw6NvIMOpIHVtIHJhbW8uIgorCisjOiBicmFuY2guYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibyByYW1vIGEgbW9udGFudGUgc29saWNpdGFkbyAnJXMnIG7Do28gZXhpc3RlIgorCisjOiBicmFuY2guYzoyMjIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIiIKKyJcbiIKKyJTZSBwcmV0ZW5kZSBlZmV0dWFyIHJlYmFzZSBkbyBzZXUgdHJhYmFsaG8gc29icmUgdW0gcmFtb1xuIgorImEgbW9udGFudGUgcXVlIGrDoSBleGlzdGUgbm8gcmVtb3RvLCBwb2RlIHNlciBuZWNlc3PDoXJpb1xuIgorImV4ZWN1dGFyIFwiZ2l0IGZldGNoXCIgcGFyYSBvYnTDqi1sby5cbiIKKyJcbiIKKyJTZSBwcmV0ZW5kZSBwdWJsaWNhciB1bSBub3ZvIHJhbW8gbG9jYWwgcXVlIGlyw6Egc2VndWlyXG4iCisibyBzZXUgaG9tw7Nsb2dvIHJlbW90bywgcG9kZSB1c2FyIFwiZ2l0IHB1c2ggLXVcIiBwYXJhIGNvbmZpZ3VyYXJcbiIKKyJvIHJlc3BldGl2byByYW1vIGEgbW9udGFudGUsIGFvIG1lc21vIHRlbXBvIHF1ZSBwdWJsaWNhLiIKKworIzogYnJhbmNoLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm9tZSBkZSBvYmpldG8gaW52w6FsaWRvOiAnJXMnLiIKKworIzogYnJhbmNoLmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIk5vbWUgZGUgb2JqZXRvIGFtYsOtZ3VvOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIlBvbnRvIG5vIHJhbW8gaW52w6FsaWRvOiAnJXMnLiIKKworIzogYnJhbmNoLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMnIGZvaSBqw6EgZXh0cmHDrWRvIGVtICclcyciCisKKyM6IGJyYW5jaC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAiSEVBRCBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvICVzIG7Do28gZXN0w6EgYXR1YWxpemFkYSIKKworIzogYnVuZGxlLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyBuw6NvIHBhcmVjZSBzZXIgdW0gZmljaGVpcm8gYnVuZGxlIHYyIgorCisjOiBidW5kbGUuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgImNhYmXDp2FsaG8gbsOjbyByZWNvbmhlY2lkbzogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo4NyBzZXF1ZW5jZXIuYzoxMzM5IHNlcXVlbmNlci5jOjE3NjAgYnVpbHRpbi9jb21taXQuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICclcyciCisKKyM6IGJ1bmRsZS5jOjEzOQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJPIHJlcG9zaXTDs3JpbyBuw6NvIHBvc3N1w60gZXN0ZXMgY29tbWl0cyBwcsOpLXJlcXVpc2l0YWRvczoiCisKKyM6IGJ1bmRsZS5jOjE2MyByZWYtZmlsdGVyLmM6MTg1MiBzZXF1ZW5jZXIuYzoxMTYyIHNlcXVlbmNlci5jOjIyOTkKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyODExIGJ1aWx0aW4vY29tbWl0LmM6MTA2MSBidWlsdGluL2xvZy5jOjM1MworIzogYnVpbHRpbi9sb2cuYzo4OTcgYnVpbHRpbi9sb2cuYzoxMzQ3IGJ1aWx0aW4vbG9nLmM6MTY3MyBidWlsdGluL2xvZy5jOjE5MTYKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNTkgYnVpbHRpbi9zaG9ydGxvZy5jOjE3NgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBjb25maWd1cmFyIHBlcmN1cnNvIGRlIHJldmlzw7VlcyIKKworIzogYnVuZGxlLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJPIGJ1bmRsZSBjb250w6ltIGVzdGEgcmVmZXLDqm5jaWE6IgorbXNnc3RyWzFdICJPIGJ1bmRsZSBjb250w6ltIGVzdGFzICVkIHJlZmVyw6puY2lhczoiCisKKyM6IGJ1bmRsZS5jOjE5MgorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJPIHBhY290ZSByZWdpc3RhIHVtIGhpc3TDs3JpY28gY29tcGxldG8uIgorCisjOiBidW5kbGUuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIk8gYnVuZGxlIHJlcXVlciBlc3RhIHJlZmVyw6puY2lhOiIKK21zZ3N0clsxXSAiTyBidW5kbGUgcmVxdWVyIGVzdGFzICVkIHJlZmVyw6puY2lhczoiCisKKyM6IGJ1bmRsZS5jOjI1MworbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBsYW7Dp2FyIHBhY2stb2JqZWN0cyIKKworIzogYnVuZGxlLmM6MjY0Cittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgInBhY2stb2JqZWN0cyB0ZXJtaW5vdSBpbmVzcGVyYWRhbWVudGUiCisKKyM6IGJ1bmRsZS5jOjMwNAorbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IHRlcm1pbm91IGluZXNwZXJhZGFtZW50ZSIKKworIzogYnVuZGxlLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJhIHJlZmVyw6puY2lhICclcycgw6kgZXhjbHXDrWRhIHBlbGFzIG9ww6fDtWVzIGRlIHJldi1saXN0IgorCisjOiBidW5kbGUuYzo0NDMgYnVpbHRpbi9sb2cuYzoxNzAgYnVpbHRpbi9sb2cuYzoxNTc5IGJ1aWx0aW4vc2hvcnRsb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIG7Do28gcmVjb25oZWNpZG86ICVzIgorCisjOiBidW5kbGUuYzo0NTEKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiQ3JpYcOnw6NvIGRlIGJ1bmRsZSB2YXppbyByZWN1c2FkYS4iCisKKyM6IGJ1bmRsZS5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGNyaWFyICclcyciCisKKyM6IGJ1bmRsZS5jOjQ5MQorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiaW5kZXgtcGFjayB0ZXJtaW5vdSBpbmVzcGVyYWRhbWVudGUiCisKKyM6IGNvbG9yLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgInZhbG9yIGRlIGNvciBpbnbDoWxpZG86ICUuKnMiCisKKyM6IGNvbW1pdC5jOjQwIHNlcXVlbmNlci5jOjE1NzIgYnVpbHRpbi9hbS5jOjQyMSBidWlsdGluL2FtLmM6NDU3CisjOiBidWlsdGluL2FtLmM6MTQ5MyBidWlsdGluL2FtLmM6MjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciAlcyIKKworIzogY29tbWl0LmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMgbsOjbyDDqSB1bSBjb21taXQhIgorCisjOiBjb21taXQuYzoxNTExCittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisiYXZpc286IGEgbWVuc2FnZW0gZGUgY29tbWl0IG7Do28gY29uZm9ybWEgY29tIFVURi04LlxuIgorIlBvZGUgcXVlcmVyIGVtZW5kw6EtbG8gZGVwb2lzIGRlIGNvcnJpZ2lyIGEgbWVuc2FnZW0gb3UgZGVmaW5pciBhXG4iCisidmFyacOhdmVsIGRlIGNvbmZpZ3VyYcOnw6NvIGkxOG4uY29tbWl0ZW5jb2RpbmcgY29tIGEgY29kaWZpY2HDp8OjbyBxdWVcbiIKKyJvIHNldSBwcm9qZXRvIHV0aWxpemEuXG4iCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAibWVtw7NyaWEgZXNnb3RhZGEiCisKKyM6IGNvbmZpZy5jOjE5MQorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAiY29uZmlndXJhw6fDo28gcmVsYXRpdmEgY29tIGluY2x1c8OjbyBjb25kaWNpb25hbCBkZXZlIHByb3ZpciBkZSBmaWNoZWlyb3MiCisKKyM6IGNvbmZpZy5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAibGluaGEgZGUgY29uZmlndXJhw6fDo28gJWQgaW5jb3JyZXRhIG5vIGJsb2IgJXMiCisKKyM6IGNvbmZpZy5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAibGluaGEgZGUgY29uZmlndXJhw6fDo28gJWQgaW5jb3JyZXRhIG5vIGZpY2hlaXJvICVzIgorCisjOiBjb25maWcuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsaW5oYSBkZSBjb25maWd1cmHDp8OjbyAlZCBpbmNvcnJldGEgbmEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBjb25maWcuYzo3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICJsaW5oYSBkZSBjb25maWd1cmHDp8OjbyAlZCBpbmNvcnJldGEgbm8gc3VibcOzZHVsby1ibG9iICVzIgorCisjOiBjb25maWcuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAibGluaGEgZGUgY29uZmlndXJhw6fDo28gJWQgaW5jb3JyZXRhIG5hIGxpbmhhIGRlIGNvbWFuZG9zICVzIgorCisjOiBjb25maWcuYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICJsaW5oYSBkZSBjb25maWd1cmHDp8OjbyAlZCBpbmNvcnJldGEgZW0gJXMiCisKKyM6IGNvbmZpZy5jOjg0MAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAiZm9yYSBkZSBpbnRlcnZhbG8iCisKKyM6IGNvbmZpZy5jOjg0MAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAidW5pZGFkZSBpbnbDoWxpZGEiCisKKyM6IGNvbmZpZy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgInZhbG9yIG51bcOpcmljbyAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRvOiAlcyIKKworIzogY29uZmlnLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICJ2YWxvciBudW3DqXJpY28gJyVzJyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0byBubyBibG9iICVzOiAlcyIKKworIzogY29uZmlnLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICJ2YWxvciBudW3DqXJpY28gJyVzJyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0byBubyBmaWNoZWlybyAlczogJXMiCisKKyM6IGNvbmZpZy5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIiIKKyJ2YWxvciBudW3DqXJpY28gJyVzJyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0byBuYSBlbnRyYWRhIHBhZHLDo286ICVzIgorCisjOiBjb25maWcuYzo4NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICIiCisidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbm8gc3VibcOzZHVsby1ibG9iICVzOiAlcyIKKworIzogY29uZmlnLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIiIKKyJ2YWxvciBudW3DqXJpY28gJyVzJyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0byBuYSBsaW5oYSBkZSBjb21hbmRvcyAlczogIgorIiVzIgorCisjOiBjb25maWcuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICJ2YWxvciBudW3DqXJpY28gJyVzJyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0byBlbSAlczogJXMiCisKKyM6IGNvbmZpZy5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBleHBhbmRpciBkaXJldMOzcmlvIGRlIHV0aWxpemFkb3IgZW06ICclcyciCisKKyM6IGNvbmZpZy5jOjEwNDggY29uZmlnLmM6MTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibsOtdmVsIGRlIGNvbXByZXNzw6NvIHpsaWIgJWQgaW5jb3JyZXRvIgorCisjOiBjb25maWcuYzoxMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAibW9kbyBpbnbDoWxpZG8gcGFyYSBjcmlhw6fDo28gZGUgb2JqZXRvOiAlcyIKKworIzogY29uZmlnLmM6MTMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibsOtdmVsIGRlIGNvbXBhY3Rhw6fDo28gZG8gcGFjb3RlICVkIGluY29ycmV0byIKKworIzogY29uZmlnLmM6MTUyMgorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhbmFsaXNhciBjb25maWd1cmHDp8OjbyBkZSBsaW5oYSBkZSBjb21hbmRvcyIKKworIzogY29uZmlnLmM6MTU3MgorbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAiIgorIm9jb3JyZXUgdW0gZXJybyBkZXNjb25oZWNpZG8gZHVyYW50ZSBhIGxlaXR1cmEgZG9zIGZpY2hlaXJvcyBkZSBjb25maWd1cmHDp8OjbyIKKworIzogY29uZmlnLmM6MTkzMQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICJJbnbDoWxpZG8gJXM6ICclcyciCisKKyM6IGNvbmZpZy5jOjE5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb3JlLnVudHJhY2tlZENhY2hlIHZhbHVlICclcyc7IHVzaW5nICdrZWVwJyBkZWZhdWx0IHZhbHVlIgorbXNnc3RyICIiCisidmFsb3IgJyVzJyBkZSBjb3JlLnVudHJhY2tlZENhY2hlIGRlc2NvbmhlY2lkbzsgdXNhciAna2VlcCcgdmFsb3IgcG9yIG9taXNzw6NvIgorCisjOiBjb25maWcuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAibyB2YWxvciAnJWQnIGRlIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSBkZXZlIGVzdGFyIGVudHJlIDAgZSAxMDAiCisKKyM6IGNvbmZpZy5jOjE5ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhbmFsaXNhciAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvIGRlIGxpbmhhIGRlIGNvbWFuZG9zIgorCisjOiBjb25maWcuYzoxOTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAidmFyacOhdmVsIGRlIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRhIG5vIGZpY2hlaXJvICclcycgbmEgbGluaGEgJWQiCisKKyM6IGNvbmZpZy5jOjIwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgdGVtIG3Dumx0aXBsb3MgdmFsb3JlcyIKKworIzogY29uZmlnLmM6MjM4NCBjb25maWcuYzoyNjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgZGUgZnN0YXQgZGUgJXMiCisKKyM6IGNvbmZpZy5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBkZWZpbmlyICclcycgY29tbyAnJXMnIgorCisjOiBjb25maWcuYzoyNTA0IGJ1aWx0aW4vcmVtb3RlLmM6Nzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgcmVpbmljaWFyICclcyciCisKKyM6IGNvbm5lY3QuYzo0OQorbXNnaWQgIlRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgIk8gcmVtb3RvIGRlc2xpZ291IGFww7NzIGNvbnRhY3RvIGluaWNpYWwiCisKKyM6IGNvbm5lY3QuYzo1MQorbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIGxlciBkbyByZXBvc2l0w7NyaW8gcmVtb3RvLlxuIgorIlxuIgorIkNlcnRpZmljYS1zZSBxdWUgdGVtIG9zIGRpcmVpdG9zIGRlIGFjZXNzbyBjb3JyZXRvc1xuIgorImUgcXVlIG8gcmVwb3NpdMOzcmlvIGV4aXN0ZS4iCisKKyM6IGNvbm5lY3RlZC5jOjYzIGJ1aWx0aW4vZnNjay5jOjE5MCBidWlsdGluL3BydW5lLmM6MTQwCittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICJBIHZlcmlmaWNhciBjb25lY3RpdmlkYWRlIgorCisjOiBjb25uZWN0ZWQuYzo3NQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBleGVjdXRhciAnZ2l0IHJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6OTUKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgImZhbGhhIGFvIGVzY3JldmVyIHBhcmEgcmV2LWxpc3QiCisKKyM6IGNvbm5lY3RlZC5jOjEwMgorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluIgorbXNnc3RyICJmYWxoYSBhbyBmZWNoYXIgZW50cmFkYSBwYWRyw6NvIGRlIHJldi1saXN0IgorCisjOiBjb252ZXJ0LmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG4iCisiVGhlIGZpbGUgd2lsbCBoYXZlIGl0cyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKyJDUkxGIHNlcsOhIHN1YnN0aXR1w61kbyBwb3IgTEYgZW0gJXMuXG4iCisiTyBmaW5hbCBkZSBsaW5oYSBvcmlnaW5hbCBzZXLDoSBtYW50aWRvIG5vIGZpY2hlaXJvIGRhIHN1YSDDoXJ2b3JlIGRlIHRyYWJhbGhvLiIKKworIzogY29udmVydC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLiIKK21zZ3N0ciAiQ1JMRiBzZXLDoSBzdWJzdGl0dcOtZG8gcG9yIExGIGVtICVzLiIKKworIzogY29udmVydC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisiTEYgc2Vyw6Egc3Vic3RpdHXDrWRvIHBvciBDUkxGIGVtICVzLlxuIgorIk8gZmluYWwgZGUgbGluaGEgb3JpZ2luYWwgc2Vyw6EgbWFudGlkbyBubyBmaWNoZWlybyBkYSBzdWEgw6Fydm9yZSBkZSB0cmFiYWxoby4iCisKKyM6IGNvbnZlcnQuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAiTEYgc2Vyw6Egc3Vic3RpdHXDrWRvIHBvciBDUkxGIGVtICVzLiIKKworIzogZGF0ZS5jOjk3Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAibm8gZnV0dXJvIgorCisjOiBkYXRlLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gImjDoSAlbHUgc2VndW5kbyIKK21zZ3N0clsxXSAiaMOhICVsdSBzZWd1bmRvcyIKKworIzogZGF0ZS5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICJow6EgJWx1IG1pbnV0byIKK21zZ3N0clsxXSAiaMOhICVsdSBtaW51dG9zIgorCisjOiBkYXRlLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiaMOhICVsdSBob3JhIgorbXNnc3RyWzFdICJow6EgJWx1IGhvcmFzIgorCisjOiBkYXRlLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgZGF5cyBhZ28iCittc2dzdHJbMF0gImjDoSAlbHUgZGlhIgorbXNnc3RyWzFdICJow6EgJWx1IGRpYXMiCisKKyM6IGRhdGUuYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgd2Vla3MgYWdvIgorbXNnc3RyWzBdICJow6EgJWx1IHNlbWFuYSIKK21zZ3N0clsxXSAiaMOhICVsdSBzZW1hbmFzIgorCisjOiBkYXRlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICJow6EgJWx1IG3DqnMiCittc2dzdHJbMV0gImjDoSAlbHUgbWVzZXMiCisKKyM6IGRhdGUuYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1IGFubyIKK21zZ3N0clsxXSAiJWx1IGFub3MiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gImjDoSAlcyBlICVsdSBtw6pzIgorbXNnc3RyWzFdICJow6EgJXMgZSAlbHUgbWVzZXMiCisKKyM6IGRhdGUuYzoxNTYgZGF0ZS5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgeWVhciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyBhZ28iCittc2dzdHJbMF0gImjDoSAlbHUgYW5vIgorbXNnc3RyWzFdICJow6EgJWx1IGFub3MiCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgImZhbGhhIGFvIGxlciBvIGZpY2hlaXJvIGRlIGNvbWFuZG8gJyVzJyIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTM2Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIkRldGXDp8OjbyBkZSBtdWRhbsOnYSBkZSBub21lIGluZXhhdGEgZW0gY3Vyc28iCisKKyM6IGRpZmYuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJyVzJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJhIG9ww6fDo28gJyVzJyByZXF1ZXIgdW0gdmFsb3IiCisKKyM6IGRpZmYuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIgIEZhbGhhIGFvIGFuYWxpc2FyIHBlcmNlbnRhZ2VtIGxpbWl0ZSBkZSBkaXJzdGF0ICclcydcbiIKKworIzogZGlmZi5jOjEyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIFBhcsOibWV0cm8gZGUgZGlyc3RhdCBkZXNjb25oZWNpZG8gJyVzJ1xuIgorCisjOiBkaWZmLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICJWYWxvciBkZXNjb25oZWNpZG8gbmEgdmFyacOhdmVsIGRlIGNvbmZpZ3VyYcOnw6NvICdkaWZmLnN1Ym1vZHVsZSc6ICclcyciCisKKyM6IGRpZmYuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJFcnJvcyBlbmNvbnRyYWRvcyBuYSB2YXJpw6F2ZWwgZGUgY29uZmlndXJhw6fDo28gJ2RpZmYuZGlyc3RhdCc6XG4iCisiJXMiCisKKyM6IGRpZmYuYzozMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgIm8gZGlmZiBleHRlcm5vIHRlcm1pbm91IGluZXNwZXJhZGFtZW50ZSwgaW50ZXJyb21waWRvIGVtICVzIgorCisjOiBkaWZmLmM6MzQyOAorbXNnaWQgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLW5hbWUtb25seSwgLS1uYW1lLXN0YXR1cywgLS1jaGVjayBlIC1zIHPDo28gbXV0dWFtZW50ZSBleGNsdXNpdm9zIgorCisjOiBkaWZmLmM6MzUxOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyByZXF1ZXIgZXhhdGFtZW50ZSB1bSDDum5pY28gZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvIgorCisjOiBkaWZmLmM6MzY4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisiRmFsaGEgYW8gYW5hbGlzYXIgcGFyw6JtZXRybyBkYSBvcMOnw6NvIC0tZGlyc3RhdC8tWDpcbiIKKyIlcyIKKworIzogZGlmZi5jOjM2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIkZhbGhhIGFvIGFuYWxpc2FyIHBhcsOibWV0cm8gZGEgb3DDp8OjbyAtLXN1Ym1vZHVsZTogJyVzJyIKKworIzogZGlmZi5jOjQ3MTkKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorImEgZGV0ZcOnw6NvIG11ZGFuw6dhIGRlIG5vbWUgaW5leGF0YSBmb2kgb21pdGlkYSBkZXZpZG8gYSBkZW1hc2lhZG9zIGZpY2hlaXJvcy4iCisKKyM6IGRpZmYuYzo0NzIyCittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisic8OzIGZvcmFtIGVuY29udHJhZGFzIGPDs3BpYXMgZGUgY2FtaW5ob3MgbW9kaWZpY2Fkb3MgZGV2aWRvIGEgZGVtYXNpYWRvcyAiCisiZmljaGVpcm9zLiIKKworIzogZGlmZi5jOjQ3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBtYXkgd2FudCB0byBzZXQgeW91ciAlcyB2YXJpYWJsZSB0byBhdCBsZWFzdCAlZCBhbmQgcmV0cnkgdGhlIGNvbW1hbmQuIgorbXNnc3RyICIiCisicG9kZSB0ZW50YXIgZGVmaW5pciBhIHZhcmnDoXZlbCAlcyBwYXJhLCBwZWxvIG1lbm9zLCAlZCBlIHJlcGV0aXIgbyBjb21hbmRvLiIKKworIzogZGlyLmM6MTg5OQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICJmYWxoYSBhbyBvYnRlciBub21lIGUgaW5mb3JtYcOnw6NvIGRvIGtlcm5lbCIKKworIzogZGlyLmM6MjAxOAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbi4iCittc2dzdHIgIkEgY2FjaGUgbsOjbyBjb250cm9sYWRhIGVzdMOhIGRlc2F0aXZhZGEgbmVzdGUgc2lzdGVtYSBvdSBsb2NhbGl6YcOnw6NvLiIKKworIzogZGlyLmM6Mjc3NiBkaXIuYzoyNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgbyBkaXJldMOzcmlvcyBwYXJhICVzIgorCisjOiBkaXIuYzoyODA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBtaWdyYXIgbyBkaXJldMOzcmlvIGdpdCBkZSAnJXMnIHBhcmEgJyVzJyIKKworIzogZW50cnkuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgc3RhdCBkbyBmaWNoZWlybyAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MjQ5Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGVzcGVyYXZhLXNlIGxpc3RhIHJhc2EiCisKKyM6IGZldGNoLXBhY2suYzoyNjEKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGVzcGVyYXZhLXNlIEFDSy9OQUssIG9idGV2ZS1zZSBFT0YiCisKKyM6IGZldGNoLXBhY2suYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogZXNwZXJhdmEtc2UgQUNLL05BSywgb2J0ZXZlLXNlICclcyciCisKKyM6IGZldGNoLXBhY2suYzozMzEKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMgcmVxdWVyIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImxpbmhhIHJhc2EgaW52w6FsaWRhOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAibGluaGEgcGFyYSBhcHJvZnVuZGFyIGludsOhbGlkYTogJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIm9iamV0byBuw6NvIGVuY29udHJhZG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluIG9iamVjdDogJXMiCittc2dzdHIgImVycm8gbm8gb2JqZXRvOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAicmFzbyBuw6NvIGVuY29udHJhZG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgImVzcGVyYXZhLXNlIHJhc28vYXByb2Z1bmRhciwgb2J0ZXZlLXNlICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAib2J0ZXZlLXNlICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICJjb21taXQgaW52w6FsaWRvICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NTE5Cittc2dpZCAiZ2l2aW5nIHVwIgorbXNnc3RyICJkZXNpc3TDqm5jaWEiCisKKyM6IGZldGNoLXBhY2suYzo1MjkgcHJvZ3Jlc3MuYzoyMzUKK21zZ2lkICJkb25lIgorbXNnc3RyICJjb25jbHXDrWRvIgorCisjOiBmZXRjaC1wYWNrLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICJvYnRldmUtc2UgJXMgKCVkKSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICJNYXJjYWRvICVzIGNvbW8gY29tcGxldG8iCisKKyM6IGZldGNoLXBhY2suYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxyZWFkeSBoYXZlICVzICglcykiCittc2dzdHIgImrDoSBzZSB0ZW0gJXMgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjc3MworbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrOiBuw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyIGZvcmsgZGUgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKKworIzogZmV0Y2gtcGFjay5jOjc4MQorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgImVycm8gZGUgcHJvdG9jb2xvOiBjYWJlw6dhbGhvIGRlIHBhY290ZSBpbmNvcnJldG8iCisKKyM6IGZldGNoLXBhY2suYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiBuw6NvIMOpIHBvc3PDrXZlbCBjcmlhciBwcm9jZXNzbyBmaWxobyAlcyIKKworIzogZmV0Y2gtcGFjay5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmYWlsZWQiCittc2dzdHIgIiVzIGZhbGhvdSIKKworIzogZmV0Y2gtcGFjay5jOjg1NQorbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImVycm8gbm8gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKKworIzogZmV0Y2gtcGFjay5jOjg4MgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNoYWxsb3cgY2xpZW50cyIKK21zZ3N0ciAiTyBzZXJ2aWRvciBuw6NvIHN1cG9ydGEgY2xpZW50ZXMgcmFzb3MiCisKKyM6IGZldGNoLXBhY2suYzo4ODYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICJPIHNlcnZpZG9yIHN1cG9ydGEgbXVsdGlfYWNrX2RldGFpbGVkIgorCisjOiBmZXRjaC1wYWNrLmM6ODg5Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG5vLWRvbmUiCittc2dzdHIgIk8gc2Vydmlkb3Igc3Vwb3J0YSBuby1kb25lIgorCisjOiBmZXRjaC1wYWNrLmM6ODk1Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2FjayIKK21zZ3N0ciAiTyBzZXJ2aWRvciBzdXBvcnRhIG11aWx0aV9hY2siCisKKyM6IGZldGNoLXBhY2suYzo4OTkKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kLTY0ayIKK21zZ3N0ciAiTyBzZXJ2aWRvciBzdXBvcnRhIHNpZGUtYmFuZC02NGsiCisKKyM6IGZldGNoLXBhY2suYzo5MDMKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kIgorbXNnc3RyICJPIHNlcnZpZG9yIHN1cG9ydGEgc2lkZS1iYW5kIgorCisjOiBmZXRjaC1wYWNrLmM6OTA3Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCittc2dzdHIgIk8gc2Vydmlkb3Igc3Vwb3J0YSBhbGxvdy10aXAtc2hhMS1pbi13YW50IgorCisjOiBmZXRjaC1wYWNrLmM6OTExCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCittc2dzdHIgIk8gc2Vydmlkb3Igc3Vwb3J0YSBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorCisjOiBmZXRjaC1wYWNrLmM6OTIxCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG9mcy1kZWx0YSIKK21zZ3N0ciAiTyBzZXJ2aWRvciBzdXBvcnRhIG9mcy1kZWx0YSIKKworIzogZmV0Y2gtcGFjay5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICJBIHZlcnPDo28gZG8gc2Vydmlkb3Igw6kgJS4qcyIKKworIzogZmV0Y2gtcGFjay5jOjkzNAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAiTyBzZXJ2aWRvciBuw6NvIHN1cG9ydGEgLS1zaGFsbG93LXNpbmNlIgorCisjOiBmZXRjaC1wYWNrLmM6OTM4Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LWV4Y2x1ZGUiCittc2dzdHIgIk8gc2Vydmlkb3IgbsOjbyBzdXBvcnRhIC0tc2hhbGxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6OTQwCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIk8gc2Vydmlkb3IgbsOjbyBzdXBvcnRhIC0tZGVlcGVuIgorCisjOiBmZXRjaC1wYWNrLmM6OTUxCittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgIm5lbmh1bSBjb21taXQgZW0gY29tdW0iCisKKyM6IGZldGNoLXBhY2suYzo5NjMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6IGZhbGhhIGFvIG9idGVyLiIKKworIzogZmV0Y2gtcGFjay5jOjExMjUKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAibmVuaHVtYSBjYWJlw6dhIHJlbW90YSBjb3JyZXNwb25kZW50ZSIKKworIzogZmV0Y2gtcGFjay5jOjExNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJyZWZlcsOqbmNpYSByZW1vdGEgJXMgaW5leGlzdGVudGUiCisKKyM6IGZldGNoLXBhY2suYzoxMTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICJPIHNlcnZpZG9yIG7Do28gcGVybWl0ZSBwZWRpZG8gZG8gb2JqZXRvIG7Do28gYW51bmNpYWRvICVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTg1Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgbsOjbyBhc3Npbm91IG9zIGRhZG9zIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjE1Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIGZpY2hlaXJvIHRlbXBvcsOhcmlvIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBlc2NyZXZlciBhc3NpbmF0dXJhIGRlc3RhY2FkYSBlbSAnJXMnIgorCisjOiBncmFwaC5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgImlnbm9yYXIgY29yIGludsOhbGlkYSAnJS4qcycgZW0gbG9nLmdyYXBoQ29sb3JzIgorCisjOiBncmVwLmM6MTc5NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJzogbsOjbyBmb2kgcG9zc8OtdmVsIGxlciAlcyIKKworIzogZ3JlcC5jOjE4MTMgYnVpbHRpbi9jbG9uZS5jOjM5OSBidWlsdGluL2RpZmYuYzo4MSBidWlsdGluL3JtLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgImZhbGhhIGFvIGludm9jYXIgc3RhdCBkZSAnJXMnIgorCisjOiBncmVwLmM6MTgyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICInJXMnOiBsZWl0dXJhIHRydW5jYWRhIgorCisjOiBoZWxwLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY29tYW5kb3MgZG8gZ2l0IGRpc3BvbsOtdmVsIGVtICclcyciCisKKyM6IGhlbHAuYzoyMjUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgImNvbWFuZG9zIGRvIGdpdCBkaXNwb27DrXZlaXMgbm91dHJhcyBsb2NhbGl6YcOnw7VlcyBlbSAkUEFUSCIKKworIzogaGVscC5jOjI1NgorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAiRXN0ZXMgc8OjbyBjb21hbmRvcyBkbyBHaXQgY29tdW5zIHVzYWRvcyBlbSBkaXZlcnNhcyBzaXR1YcOnw7VlczoiCisKKyM6IGhlbHAuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiJyVzJyBwYXJlY2Ugc2VyIHVtIGNvbWFuZG8gZG8gZ2l0LCBtYXMgbsOjbyDDqSBwb3Nzw612ZWxcbiIKKyJleGVjdXTDoS1sby4gVGFsdmV6IGdpdC0lcyBlc3RlamEgZGFuaWZpY2Fkbz8iCisKKyM6IGhlbHAuYzozNzYKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiT2ggbsOjby4gTsOjbyBow6EgbmVuaHVtIGNvbWFuZG8gZG8gR2l0IGRpc3BvbsOtdmVsIG5vIHNpc3RlbWEuIgorCisjOiBoZWxwLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuXG4iCisiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnIgorbXNnc3RyICIiCisiQVZJU086IEludm9jb3UgdW0gY29tYW5kbyBkbyBHaXQgZGVzaWduYWRvICclcycgcXVlIG7Do28gZXhpc3RlLlxuIgorIkNvbnRpbnVhbmRvLCBhc3N1bWluZG8gcXVlIHF1ZXJpYSBkaXplciAnJXMnIgorCisjOiBoZWxwLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKK21zZ3N0ciAiYXV0b21hdGljYW1lbnRlIGVtICUwLjFmLi4uIgorCisjOiBoZWxwLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iCittc2dzdHIgImdpdDogJyVzJyBuw6NvIMOpIHVtIGNvbWFuZG8gZG8gZ2l0LiBDb25zdWx0ZSAnZ2l0IC0taGVscCcuIgorCisjOiBoZWxwLmM6NDE0IGhlbHAuYzo0ODAKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyJRdWVyaWEgZGl6ZXIgaXN0bz8iCittc2dzdHJbMV0gIiIKKyJcbiIKKyJRdWVyaWEgZGl6ZXIgZGVzdGU/IgorCisjOiBoZWxwLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKKworIzogaWRlbnQuYzozNDMKK21zZ2lkICIiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogUG9yIGZhdm9yIGRpZ2EgcXVlIMOpLlxuIgorIlxuIgorIkV4ZWN1dGVcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcImV1QGV4ZW1wbG8uY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiTWV1IE5vbWVcIlxuIgorIlxuIgorInBhcmEgZGVmaW5pciBhIGlkZW50aWRhZGUgcHJlZGVmaW5pZGEgZGEgc3VhIGNvbnRhLlxuIgorIk9taXRhIC0tZ2xvYmFsIHBhcmEgZGVmaW5pciBhIGlkZW50aWRhZGUgYXBlbmFzIG5lc3RlIHJlcG9zaXTDs3Jpby5cbiIKKyJcbiIKKworIzogaWRlbnQuYzozNjcKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJuZW5odW0gZS1tYWlsIGluZGljYWRvIGUgYSBkZXRlw6fDo28gYXV0b23DoXRpY2EgZXN0w6EgZGVzYXRpdmFkYSIKKworIzogaWRlbnQuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAiIgorIm7Do28gw6kgcG9zc8OtdmVsIGRldGV0YXIgYXV0b21hdGljYW1lbnRlIGVuZGVyZcOnbyBkZSBlLW1haWwgKG9idGV2ZS1zZSAnJXMnKSIKKworIzogaWRlbnQuYzozODIKK21zZ2lkICJubyBuYW1lIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIm5lbmh1bSBub21lIGluZGljYWRvIGUgYSBkZXRlw6fDo28gYXV0b23DoXRpY2EgZXN0w6EgZGVzYXRpdmFkYSIKKworIzogaWRlbnQuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZGV0ZXRhciBhdXRvbWF0aWNhbWVudGUgbyBub21lIChvYnRldmUtc2UgJyVzJykiCisKKyM6IGlkZW50LmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAibm9tZSBkZSBpZGVudGlmaWNhw6fDo28gdmF6aW8gKGRlIDwlcz4pIG7Do28gw6kgcGVybWl0aWRvIgorCisjOiBpZGVudC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAibm9tZSBjb25zaXN0ZSBhcGVuYXMgZGUgY2FyYWN0ZXJlcyBuw6NvIHBlcm1pdGlkb3M6ICVzIgorCisjOiBpZGVudC5jOjQxNyBidWlsdGluL2NvbW1pdC5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAiZm9ybWF0byBkZSBkYXRhIGludsOhbGlkbzogJXMiCisKKyM6IGxvY2tmaWxlLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMuXG4iCisiXG4iCisiQW5vdGhlciBnaXQgcHJvY2VzcyBzZWVtcyB0byBiZSBydW5uaW5nIGluIHRoaXMgcmVwb3NpdG9yeSwgZS5nLlxuIgorImFuIGVkaXRvciBvcGVuZWQgYnkgJ2dpdCBjb21taXQnLiBQbGVhc2UgbWFrZSBzdXJlIGFsbCBwcm9jZXNzZXNcbiIKKyJhcmUgdGVybWluYXRlZCB0aGVuIHRyeSBhZ2Fpbi4gSWYgaXQgc3RpbGwgZmFpbHMsIGEgZ2l0IHByb2Nlc3NcbiIKKyJtYXkgaGF2ZSBjcmFzaGVkIGluIHRoaXMgcmVwb3NpdG9yeSBlYXJsaWVyOlxuIgorInJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBjcmlhciAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIk91dHJvIHByb2Nlc3NvIGdpdCBwYXJlY2UgZXN0YXIgYSBleGVjdXRhciBuZXN0ZSByZXBvc2l0w7NyaW8sIGUuZy5cbiIKKyJ1bSBlZGl0b3IgYWJlcnRvIHBvciAnZ2l0IGNvbW1pdCcuIENlcnRpZmlxdWUtc2UgcXVlIHRvZG9zIG9zIHByb2Nlc3Nvc1xuIgorInRlcm1pbmFyYW0gZSB0ZW50ZSBkZSBub3ZvLiBTZSBhaW5kYSBhc3NpbSBmYWxoYXIsIHVtIHByb2Nlc3NvIGdpdFxuIgorInBvZGUgdGVyIGZhbGhhZG8gYW50ZXJpb3JtZW50ZSBubyByZXBvc2l0w7NyaW86XG4iCisicmVtb3ZhIG8gZmljaGVpcm8gbWFudWFsbWVudGUgcGFyYSBjb250aW51YXIuIgorCisjOiBsb2NrZmlsZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiCittc2dzdHIgIk7Do28gw6kgZm9pIHBvc3PDrXZlbCBjcmlhciAnJXMubG9jayc6ICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJmYWxoYSBhbyBsZXIgYSBjYWNoZSIKKworIzogbWVyZ2UuYzo5NiBidWlsdGluL2FtLmM6MjAwMCBidWlsdGluL2FtLmM6MjAzNSBidWlsdGluL2NoZWNrb3V0LmM6MzkzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjA3IGJ1aWx0aW4vY2xvbmUuYzo3NDkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBub3ZvIGZpY2hlaXJvIGRlIMOtbmRpY2UiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwOQorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoY29tbWl0IGluY29ycmV0bylcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjMxIG1lcmdlLXJlY3Vyc2l2ZS5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmZvX2NhY2hlIGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJhZGRpbmZvX2NhY2hlIGZhbGhvdSBubyBjYW1pbmhvICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMworbXNnaWQgImVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJlcnJvIGFvIGNvbnN0cnVpciDDoXJ2b3JlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgImZhbGhhIGFvIGNyaWFyIG8gY2FtaW5obyAnJXMnJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjczOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICJBIHJlbW92ZXIgJXMgcGFyYSBjcmlhciBlc3Bhw6dvIHBhcmEgbyBzdWJkaXJldMOzcmlvXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc1MiBtZXJnZS1yZWN1cnNpdmUuYzo3NzEKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICI6IHRhbHZleiB1bSBjb25mbGl0byBEL0Y/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJwZXJkYSBkZSBmaWNoZWlybyBuw6NvIGNvbnRyb2xhZG8gZW0gJyVzJyByZWN1c2FkYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODAzIGJ1aWx0aW4vY2F0LWZpbGUuYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIG8gb2JqZXRvICVzOiAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiYmxvYiBwYXJhICVzICclcycgZXNwZXJhZG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiZmFsaGEgYW8gYWJyaXIgJyVzJzogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnOiAlcyIKK21zZ3N0ciAiZmFsaGEgYW8gY3JpYXIgYSBsaWdhw6fDo28gc2ltYsOzbGljYSAnJXMnOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIm7Do28gc2VpIG8gcXVlIGZhemVyIGNvbSAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk4NQorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICJGYWxoYSBhbyBleGVjdXRhciBpbnRlZ3Jhw6fDo28gaW50ZXJuYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGFkaWNpb25hciAlcyDDoCBiYXNlIGRlIGRhZG9zIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgIiIKKyJDT05GTElUTyAoJXMvZWxpbWluYXIpOiAlcyBlbGltaW5hZG8gZW0gJXMgZSAlcyBlbSAlcy4gVmVyc8OjbyBkZSAlcyBkZSAlcyAiCisiZGVpeGFkYSBuYSDDoXJ2b3JlLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJVE8gKCVzL2VsaW1pbmFyKTogJXMgZWxpbWluYWRvIGVtICVzIGUgJXMgcGFyYSAlcyBlbSAlcy4gVmVyc8OjbyBkZSAlcyAiCisiZGUgJXMgZGVpeGFkYSBuYSDDoXJ2b3JlLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiQ09ORkxJVE8gKCVzL2VsaW1pbmFyKTogJXMgZWxpbWluYWRvIGVtICVzIGUgJXMgZW0gJXMuIFZlcnPDo28gZGUgJXMgZGUgJXMgIgorImRlaXhhZGEgbmEgw6Fydm9yZSBlbSAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIkNPTkZMSVRPICglcy9lbGltaW5hcik6ICVzIGVsaW1pbmFkbyBlbSAlcyBlICVzIHBhcmEgJXMgZW0gJXMuIFZlcnPDo28gZGUgJXMgIgorImRlICVzIGRlaXhhZGEgbmEgw6Fydm9yZSBlbSAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNDMKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgIm11ZGFyIG5vbWUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNDMKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJub21lIG11ZGFkbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMgw6kgdW0gZGlyZXTDs3JpbyBlbSAlcyBhZGljaW9uYW5kbyAlcyBubyBzZXUgbHVnYXIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRPIChtdWRhciBub21lL211ZGFyIG5vbWUpOiBNdWRhciBvIG5vbWUgXCIlc1wiLT5cIiVzXCIgbm8gcmFtbyBcIiVzXCIgIgorIm11ZGFyIG8gbm9tZSBcIiVzXCItPlwiJXNcIiBlbSBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIzMAorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChwb3IgcmVzb2x2ZXIpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRPIChtdWRhciBub21lL211ZGFyIG5vbWUpOiBNdWRhciBkZSBub21lICVzLT4lcyBlbSAlcy4gTXVkYXIgbyBub21lICIKKyIlcy0+JXMgZW0gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCittc2dzdHIgIkEgbXVkYXIgbyBub21lIGRlICVzIHBhcmEgJXMgZSBkZSAlcyBwYXJhICVzLCBlbSBhbHRlcm5hdGl2YSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICVzIGFkZGVkIGluICVzIgorbXNnc3RyICIiCisiQ09ORkxJVE8gKG11ZGFyIG5vbWUvYWRpY2lvbmFyKTogTXVkYXIgbyBub21lICVzLT4lcyBlbSAlcy4gJXMgYWRpY2lvbmFkbyBlbSAiCisiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIG1lcmdlZCAlcyIKK21zZ3N0ciAiQSBhZGljaW9uYXIgJXMgaW50ZWdyYWRvIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTUwIG1lcmdlLXJlY3Vyc2l2ZS5jOjE3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIkEgYWRpY2lvbmFyIGNvbW8gJXMsIGVtIGFsdGVybmF0aXZhLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgbyBvYmpldG8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIm8gb2JqZXRvICVzIG7Do28gw6kgdW0gYmxvYiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY3OQorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAibW9kaWZpY2FyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjc5Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIm1vZGlmaWNhZG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2ODkKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICJjb250ZcO6ZG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2OTYKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICJhZGljaW9uYXIvYWRpY2lvbmFyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAiJXMgaWdub3JhZG8gKGludGVncmFkbyDDqSBpZ3VhbCBhbyBleGlzdGVudGUpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiQSBpbnRlZ3JhciBhdXRvbWF0aWNhbWVudGUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NTAgZ2l0LXN1Ym1vZHVsZS5zaDo5NDQKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgInN1Ym3Ds2R1bG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIkNPTkZMSVRPICglcyk6IGNvbmZsaXRvIGRlIGludGVncmHDp8OjbyBlbSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiQSByZW1vdmVyICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODcxCittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgImZpY2hlaXJvL2RpcmV0w7NyaW8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4NzcKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAiZGlyZXTDs3Jpby9maWNoZWlybyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg4MworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVRPICglcyk6IEjDoSB1bSBkaXJldMOzcmlvIGRlc2lnbmFkbyAlcyBlbSAlcy4gQSBhZGljaW9uYXIgJXMgY29tbyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIkEgYWRpY2lvbmFyICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTI5Cittc2dpZCAiQWxyZWFkeSB1cC10by1kYXRlISIKK21zZ3N0ciAiSsOhIGVzdMOhIGF0dWFsaXphZG8hIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gaW50ZWdyYXIgYXMgw6Fydm9yZXMgJXMgZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAyMQorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICJBIGludGVncmFyOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAiJXUgYW50ZWNlc3NvciBjb211bSBlbmNvbnRyYWRvOiIKK21zZ3N0clsxXSAiJXUgYW50ZWNlc3NvcmVzIGNvbXVucyBlbmNvbnRyYWRvczoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwNzMKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgImEgaW50ZWdyYcOnw6NvIG7Do28gcmV0b3Jub3UgbmVuaHVtIGNvbW1pdCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIG9iamV0byAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTUwIGJ1aWx0aW4vbWVyZ2UuYzo2NDUgYnVpbHRpbi9tZXJnZS5jOjc5MgorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVzY3JldmVyIG5vIMOtbmRpY2UuIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKyJOw6NvIGNvbmNsdcOtdSBhIGludGVncmHDp8OjbyBkZSBub3RhcyBhbnRlcmlvciAoJXMgZXhpc3RlKS5cbiIKKyJVc2UgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3UgJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0JyBwYXJhIHN1Ym1ldGVyLyIKKyJhYm9ydGFyIGEgaW50ZWdyYcOnw6NvIGFudGVyaW9yIGFudGVzIGRlIGNvbWXDp2FyIHVtYSBub3ZhIGludGVncmHDp8OjbyBkZSBub3Rhcy4iCisKKyM6IG5vdGVzLW1lcmdlLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIk7Do28gY29uY2x1w61kbyBhIGludGVncmHDp8OjbyBkZSBpbnRlZ3Jhw6fDo28gZGUgbm90YXMgKCVzIHByZXNlbnRlKS4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDEKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBzdWJtZXRlciDDoXJ2b3JlIGRlIG5vdGFzIG7Do28gaW5pY2lhbGl6YWRhIG91IG7Do28gcmVmZXJlbmNpYWRhIgorCisjOiBub3Rlcy11dGlscy5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIlZhbG9yIGRlIG5vdGVzLnJld3JpdGVNb2RlIGluY29ycmV0bzogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIlJlZXNjcml0YSBkZSBub3RhcyBlbSAlcyAoZm9yYSBkZSByZWZzL25vdGVzLykgcmVjdXNhZGEiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCisjLiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUKKyM6IG5vdGVzLXV0aWxzLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3IgaW5jb3JyZXRvIGRlICVzOiAnJXMnIgorCisjOiBvYmplY3QuYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIG9iamV0bzogJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1NzIKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgInV0aWxpemHDp8OjbzogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbgorIzogcGFyc2Utb3B0aW9ucy5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgICAgICAgb3U6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICAgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo2MzEKK21zZ2lkICItTlVNIgorbXNnc3RyICItTlVNIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJub21lIGRvIG9iamV0byBtYWxmb3JtYWRvICclcyciCisKKyM6IHBhdGguYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBkYXIgcGVybWlzc8OjbyBkZSBlc2NyaXRhIGFvIGdydXBvIGEgJXMiCisKKyM6IHBhdGhzcGVjLmM6MTI1Cittc2dpZCAiRXNjYXBlIGNoYXJhY3RlciAnXFwnIG5vdCBhbGxvd2VkIGFzIGxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiCittc2dzdHIgIiIKKyJPIGNhcsOhY3RlciBkZSBlc2NhcGUgJ1xcJyBuw6NvIHBvZGUgc2VyIHVzYWRvIGNvbW8gw7psdGltbyBjYXLDoWN0ZXIgbm8gdmFsb3IgIgorImRlIGF0dHIiCisKKyM6IHBhdGhzcGVjLmM6MTQzCittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJTw7Mgc2UgcG9kZSBlc3BlY2lmaWNhciB1bSAnYXR0cjonLiIKKworIzogcGF0aHNwZWMuYzoxNDYKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgImVzcGVjaWZpY2Fkb3IgYXR0ciBuw6NvIHBvZGUgZXN0YXIgdmF6aW8iCisKKyM6IHBhdGhzcGVjLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgIm5vbWUgZGUgYXRyaWJ1dG8gaW52w6FsaWRvICVzIgorCisjOiBwYXRoc3BlYy5jOjI1NAorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKyJhcyBkZWZpbmnDp8O1ZXMgZ2xvYmFpcyAnZ2xvYicgZSAnbm9nbG9iJyBkZSBlc3BlY2lmaWNhZG9yIGRlIGNhbWluaG8gIgorIihwYXRoc3BlYykgc8OjbyBpbmNvbXBhdMOtdmVpcyIKKworIzogcGF0aHNwZWMuYzoyNjEKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisiYSBkZWZpbmnDp8OjbyBnbG9iYWwgZGUgZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvICdsaXRlcmFsJyDDqSBpbmNvbXBhdMOtdmVsIGNvbSAiCisidG9kYXMgYXMgb3V0cmFzIGRlZmluacOnw7VlcyBnbG9iYWlzIGRlIGVzcGVjaWZpY2Fkb3IgZGUgY2FtaW5obyAocGF0aHNwZWMpIgorCisjOiBwYXRoc3BlYy5jOjMwMQorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAicGFyw6JtZXRybyBpbnbDoWxpZG8gbmEgbcOhZ2ljYSAncHJlZml4JyBkbyBlc3BlY2lmaWNhZG9yIGRlIGNhbWluaG8iCisKKyM6IHBhdGhzcGVjLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIk3DoWdpY2EgZG8gZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvICclLipzJyBpbnbDoWxpZGEgZW0gJyVzJyIKKworIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICJGYWx0YSB1bSAnKScgbm8gZmluYWwgZGEgbcOhZ2ljYSBkbyBlc3BlY2lmaWNhZG9yIGRlIGNhbWluaG8gZW0gJyVzJyIKKworIzogcGF0aHNwZWMuYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIk3DoWdpY2EgZGUgZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvICclYycgZW0gJyVzJyBuw6NvIGltcGxlbWVudGFkYSIKKworIzogcGF0aHNwZWMuYzo0MjEgcGF0aHNwZWMuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJPIGNhbWluaG8gJyVzJyBlc3TDoSBkZW50cm8gZG8gc3VibcOzZHVsbyAnJS4qcyciCisKKyM6IHBhdGhzcGVjLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczogJ2xpdGVyYWwnIGUgJ2dsb2InIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IHBhdGhzcGVjLmM6NDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXM6ICclcycgZXN0w6EgZm9yYSBkbyByZXBvc2l0w7NyaW8iCisKKyM6IHBhdGhzcGVjLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiJyVzJyAobW5lbcOzbmljYTogJyVjJykiCisKKyM6IHBhdGhzcGVjLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiIKKyIlczogbcOhZ2ljYSBkZSBlc3BlY2lmaWNhZG9yIGRlIGNhbWluaG8gbsOjbyBzdXBvcnRhZGEgcG9yIGVzdGUgY29tYW5kbzogJXMiCisKKyM6IHBhdGhzcGVjLmM6NjQ0Cittc2dpZCAiIgorImVtcHR5IHN0cmluZ3MgYXMgcGF0aHNwZWNzIHdpbGwgYmUgbWFkZSBpbnZhbGlkIGluIHVwY29taW5nIHJlbGVhc2VzLiBwbGVhc2UgIgorInVzZSAuIGluc3RlYWQgaWYgeW91IG1lYW50IHRvIG1hdGNoIGFsbCBwYXRocyIKK21zZ3N0ciAiIgorImNhZGVpYXMgZGUgY2FyYWN0ZXJlcyB2YXppYXMgY29tbyBlc3BlY2lmaWNhZG9yZXMgZGUgY2FtaW5obyB0b3JuYXItc2Utw6NvICIKKyJpbnbDoWxpZGFzIG5hcyBwcsOzeGltYXMgdmVyc8O1ZXMuIFVzZSAuIHBhcmEgY29ycmVzcG9uZGVyIGEgdG9kb3Mgb3MgY2FtaW5ob3MiCisKKyM6IHBhdGhzcGVjLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibyBlc3BlY2lmaWNhZG9yIGRlIGNhbWluaG8gJyVzJyDDqSBpbmRpY2FkbyBwb3IgdW1hIGxpZ2HDp8OjbyBzaW1iw7NsaWNhIgorCisjOiBwcmV0dHkuYzo5ODIKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBmb3JtYXRvIGRlIC0tcHJldHR5IgorCisjOiByZWFkLWNhY2hlLmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiaW5kZXgudmVyc2lvbiBkZWZpbmlkbywgbWFzIGNvbSB2YWxvciBpbnbDoWxpZG8uXG4iCisiQSB1c2FyIGEgdmVyc8OjbyAlaSIKKworIzogcmVhZC1jYWNoZS5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBkZWZpbmlkbywgbWFzIGNvbSB2YWxvciBpbnbDoWxpZG8uXG4iCisiQSB1c2FyIGEgdmVyc8OjbyAlaSIKKworIzogcmVhZC1jYWNoZS5jOjIyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgc3RhdCBkZSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBnaXQgZGlyOiAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZGlyZXTDs3JpbyBnaXQ6ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5saW5rOiAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgaW52b2NhciB1bmxpbms6ICVzIgorCisjOiByZWZzLmM6NjE5IGJ1aWx0aW4vbWVyZ2UuYzo4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICclcycgcGFyYSBlc2NyaXRhIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoyNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVsaW1pbmFyIGEgcmVmZXLDqm5jaWEgJXM6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoyNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlbGltaW5hciBhcyByZWZlcsOqbmNpYXM6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoyNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZWxpbWluYXIgYSByZWZlcsOqbmNpYSAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1IHd0LXN0YXR1cy5jOjE3ODAKK21zZ2lkICJnb25lIgorbXNnc3RyICJkZXNhcGFyZWNpZG8iCisKKyM6IHJlZi1maWx0ZXIuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAiw6AgZnJlbnRlICVkIgorCisjOiByZWYtZmlsdGVyLmM6MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICJhdHLDoXMgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICLDoCBmcmVudGUgJWQsIGF0csOhcyAlZCIKKworIzogcmVmLWZpbHRlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICJmb3JtYXRvIGVzcGVyYWRvOiAlJShjb2xvcjo8Y29yPikiCisKKyM6IHJlZi1maWx0ZXIuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGNvbG9yOiAlJShjb2xvcjolcykiCittc2dzdHIgImNvciBuw6NvIHJlY29uaGVjaWRhOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAidmFsb3IgaW50ZWlybyBlc3BlcmFkbyByZWZuYW1lOmxzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIgorbXNnc3RyICJWYWxvciBpbnRlaXJvIGVzcGVyYWRvIHJlZm5hbWU6cnN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gZGUgJSUoJXMpIG7Do28gcmVjb25oZWNpZG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShib2R5KSBuw6NvIGxldmEgYXJndW1lbnRvcyIKKworIzogcmVmLWZpbHRlci5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkgbsOjbyBsZXZhIGFyZ3VtZW50b3MiCisKKyM6IHJlZi1maWx0ZXIuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUodHJhaWxlcnMpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJSh0cmFpbGVycykgbsOjbyBsZXZhIGFyZ3VtZW50b3MiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgInZhbG9yIHBvc2l0aXZvIGVzcGVyYWRvIGNvbnRlbnRzOmxpbmVzPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gZGUgJSUoY29udGVudHMpIG7Do28gcmVjb25oZWNpZG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgInZhbG9yIHBvc2l0aXZvIGVzcGVyYWRvIG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIGRlICUlKG9iamVjdG5hbWUpIG7Do28gcmVjb25oZWNpZG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAiZm9ybWF0byBlc3BlcmFkbzogJSUoYWxpZ246PGxhcmd1cmE+LDxwb3Npw6fDo28+KSIKKworIzogcmVmLWZpbHRlci5jOjI1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgInBvc2nDp8OjbyBuw6NvIHJlY29uaGVjaWRhOiVzIgorCisjOiByZWYtZmlsdGVyLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAibGFyZ3VyYSBuw6NvIHJlY29uaGVjaWRhOiVzIgorCisjOiByZWYtZmlsdGVyLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gZGUgJSUoYWxpZ24pIG7Do28gcmVjb25oZWNpZG86ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHdpZHRoIGV4cGVjdGVkIHdpdGggdGhlICUlKGFsaWduKSBhdG9tIgorbXNnc3RyICJsYXJndXJhIHBvc2l0aXZhIGVzcGVyYWRhIGNvbSBvIMOhdG9tbyAlJShhbGduKSIKKworIzogcmVmLWZpbHRlci5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnRvIGRlICUlKGlmKSBuw6NvIHJlY29uaGVjaWRvOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAibm9tZSBkZSBmaWNoZWlybyBtYWxmb3JtYWRvOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAibm9tZSBkbyBjYW1wbyBkZXNjb25oZWNpZG86ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShpZikgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJmb3JtYXRvOiDDoXRvbW8gJSUoaWYpIHV0aWxpemFkbyBzZW0gw6F0b21vICUlKHRoZW4pIGNvcnJlc3BvbmRlbnRlIgorCisjOiByZWYtZmlsdGVyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJSh0aGVuKSB1dGlsaXphZG8gc2VtIMOhdG9tbyAlJShpZikgY29ycmVzcG9uZGVudGUiCisKKyM6IHJlZi1maWx0ZXIuYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgImZvcm1hdG86IMOhdG9tbyAlJSh0aGVuKSB1dGlsaXphZG8gbWFpcyBxdWUgdW1hIHZleiIKKworIzogcmVmLWZpbHRlci5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKHRoZW4pIHV0aWxpemFkbyBkZXBvaXMgZGUgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKGVsc2UpIHV0aWxpemFkbyBzZW0gw6F0b21vICUlKGlmKSBjb3JyZXNwb25kZW50ZSIKKworIzogcmVmLWZpbHRlci5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKGVsc2UpIHV0aWxpemFkbyBzZW0gw6F0b21vICUlKHRoZW4pIGNvcnJlc3BvbmRlbnRlIgorCisjOiByZWYtZmlsdGVyLmM6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJmb3JtYXRvOiDDoXRvbW8gJSUoZWxzZSkgdXRpbGl6YWRvIG1haXMgcXVlIHVtYSB2ZXoiCisKKyM6IHJlZi1maWx0ZXIuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gdXNlZCB3aXRob3V0IGNvcnJlc3BvbmRpbmcgYXRvbSIKK21zZ3N0ciAiZm9ybWF0bzogw6F0b21vICUlKGVuZCkgdXRpbGl6YWRvIHNlbSDDoXRvbW8gY29ycmVzcG9uZGVudGUiCisKKyM6IHJlZi1maWx0ZXIuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgImNhZGVpYSBtYWxmb3JtYWRhICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTI0NworIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCByZWJhc2luZyAlcykiCittc2dzdHIgIihuZW5odW0gcmFtbywgYSBlZmV0dWFyIHJlYmFzZSBkZSAlcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzKSIKK21zZ3N0ciAiKG5lbmh1bSByYW1vLCBiaXNzZWPDp8OjbyBpbmljaWFkYSBlbSAlcykiCisKKyMuIFRSQU5TTEFUT1JTOiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzCisjLiAiSEVBRCBkZXRhY2hlZCBhdCAiIGluIHd0LXN0YXR1cy5jCisjOiByZWYtZmlsdGVyLmM6MTI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIihIRUFEIGRlc3RhY2FkYSBlbSAlcykiCisKKyMuIFRSQU5TTEFUT1JTOiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzCisjLiAiSEVBRCBkZXRhY2hlZCBmcm9tICIgaW4gd3Qtc3RhdHVzLmMKKyM6IHJlZi1maWx0ZXIuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorbXNnc3RyICIoSEVBRCBkZXN0YWNhZGEgZGUgJXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTI2NQorbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIobmVuaHVtIHJhbW8pIgorCisjOiByZWYtZmlsdGVyLmM6MTQyMCByZWYtZmlsdGVyLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgImZhbHRhIG8gb2JqZXRvICVzIGRlICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQyMyByZWYtZmlsdGVyLmM6MTQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgImZhbGhhIGFvIGludm9jYXIgcGFyc2Vfb2JqZWN0X2J1ZmZlciBzb2JyZSAlcyBkZSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJvYmpldG8gbWFsZm9ybWFkbyBlbSAnJXMnIgorCisjOiByZWYtZmlsdGVyLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAiYSByZWZlcsOqbmNpYSAlcyBjb20gbm9tZSBkYW5pZmljYWRvIGZvaSBpZ25vcmFkYSIKKworIzogcmVmLWZpbHRlci5jOjE3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAiYSByZWZlcsOqbmNpYSAlcyBkYW5pZmljYWRhIGZvaSBpZ25vcmFkYSIKKworIzogcmVmLWZpbHRlci5jOjIwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAiZm9ybWF0bzogZmFsdGEgw6F0b21vICUlKGVuZCkiCisKKyM6IHJlZi1maWx0ZXIuYzoyMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAibm9tZSBkZSBvYmpldG8gbWFsZm9ybWFkbyAlcyIKKworIzogcmVtb3RlLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgb2J0ZXIgJXMgZSAlcyBhbyBtZXNtbyB0ZW1wbyBwYXJhICVzIgorCisjOiByZW1vdGUuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgZ2VyYWxtZW50ZSBzZWd1ZSAlcywgbsOjbyAlcyIKKworIzogcmVtb3RlLmM6NzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIKK21zZ3N0ciAiJXMgc2VndWUgJXMgZSAlcyBlbSBzaW11bHTDom5lbyIKKworIzogcmVtb3RlLmM6NzcwCittc2dpZCAiSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkVycm8gaW50ZXJubyIKKworIzogcmVtb3RlLmM6MTY4NSByZW1vdGUuYzoxNzg3Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBuw6NvIGFwb250YSBwYXJhIHVtIHJhbW8iCisKKyM6IHJlbW90ZS5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgInJhbW8gaW5leGlzdGVudGU6ICclcyciCisKKyM6IHJlbW90ZS5jOjE2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIm5lbmh1bSByYW1vIGEgbW9udGFudGUgY29uZmlndXJhZG8gcGFyYSBvIHJhbW8gJyVzJyIKKworIzogcmVtb3RlLmM6MTcwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorIm8gcmFtbyBhIG1vbnRhbnRlICclcycgbsOjbyBlc3TDoSBndWFyZGFkbyBjb21vIHVtIHJhbW8gZGUgbW9uaXRvcml6YcOnw6NvIHJlbW90byIKKworIzogcmVtb3RlLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorIm8gZGVzdGlubyBkZSBwdWJsaWNhw6fDo28gJyVzJyBubyByZW1vdG8gJyVzJyBuw6NvIMOpIHNlZ3VpZG8gcG9yIG5lbmh1bSByYW1vICIKKyJsb2NhbCIKKworIzogcmVtb3RlLmM6MTczMAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICJvIHJhbW8gJyVzJyBuw6NvIHRlbSBuZW5odW0gcmVtb3RvIHBhcmEgcHVibGljYXIiCisKKyM6IHJlbW90ZS5jOjE3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICIiCisiJyUyJHMnIG7Do28gZmF6IHBhcnRlIGRvcyBlc3BlY2lmaWNhZG9yZXMgZGUgcmVmZXLDqm5jaWEgZGUgJyUxJHMnIHBhcmEgIgorInB1YmxpY2HDp8OjbyIKKworIzogcmVtb3RlLmM6MTc1NAorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAicHVibGljYcOnw6NvIHNlbSBkZXN0aW5vIChwdXNoLmRlZmF1bHQgw6kgJ25vdGhpbmcnKSIKKworIzogcmVtb3RlLmM6MTc3NgorbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHJlc29sdmVyIGEgcHVibGljYcOnw6NvICdzaW1wbGUnIG51bSDDum5pY28gZGVzdGlubyIKKworIzogcmVtb3RlLmM6MjA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiYXNlZCBvbiAnJXMnLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuXG4iCittc2dzdHIgIkEgYmFzZSBkbyBzZXUgcmFtbyDDqSAnJXMnLCBtYXMgbyByYW1vIGEgbW9udGFudGUgZGVzYXBhcmVjZXUuXG4iCisKKyM6IHJlbW90ZS5jOjIwODUKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgcGFyYSBjb3JyaWdpcilcbiIKKworIzogcmVtb3RlLmM6MjA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cC10by1kYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAiTyBzZXUgcmFtbyBlc3TDoSBhdHVhbGl6YWRvIGNvbSAnJXMnLlxuIgorCisjOiByZW1vdGUuYzoyMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIk8gc2V1IHJhbW8gZXN0w6Egw6AgZnJlbnRlIGRlICclcycgcG9yICVkIGNvbW1pdC5cbiIKK21zZ3N0clsxXSAiTyBzZXUgcmFtbyBlc3TDoSDDoCBmcmVudGUgZGUgJyVzJyBwb3IgJWQgY29tbWl0cy5cbiIKKworIzogcmVtb3RlLmM6MjA5OAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKHVzZSBcImdpdCBwdXNoXCIgcGFyYSBwdWJsaWNhciBvcyBjb21taXRzIGxvY2FpcylcbiIKKworIzogcmVtb3RlLmM6MjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCisiTyBzZXUgcmFtbyBlc3TDoSBhdHLDoXMgZGUgJyVzJyBwb3IgJWQgY29tbWl0LCBwb2RlbmRvIHNlciBhdHVhbGl6YWRvIGNvbSAiCisiYXZhbsOnbyByw6FwaWRvLlxuIgorbXNnc3RyWzFdICIiCisiTyBzZXUgcmFtbyBlc3TDoSBhdHLDoXMgZGUgJyVzJyBwb3IgJWQgY29tbWl0cywgcG9kZW5kbyBzZXIgYXR1YWxpemFkbyBjb20gIgorImF2YW7Dp28gcsOhcGlkby5cbiIKKworIzogcmVtb3RlLmM6MjEwOQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgICh1c2UgXCJnaXQgcHVsbFwiIHBhcmEgYXR1YWxpemFyIG8gc2V1IHJhbW8gbG9jYWwpXG4iCisKKyM6IHJlbW90ZS5jOjIxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiTyBzZXUgcmFtbyBlICclcycgZGl2ZXJnaXJhbSxcbiIKKyJ0ZW5kbyBjYWRhIHVtICVkIGUgJWQgY29tbWl0IGRpZmVyZW50ZSwgcmVzcGV0aXZhbWVudGUuXG4iCittc2dzdHJbMV0gIiIKKyJPIHNldSByYW1vIGUgJyVzJyBkaXZlcmdpcmFtLFxuIgorInRlbmRvIGNhZGEgdW0gJWQgZSAlZCBjb21taXRzIGRpZmVyZW50ZXMsIHJlc3BldGl2YW1lbnRlLlxuIgorCisjOiByZW1vdGUuYzoyMTIyCittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICh1c2UgXCJnaXQgcHVsbFwiIHBhcmEgaW50ZWdyYXIgbyByYW1vIHJlbW90byBubyBzZXUgcmFtbylcbiIKKworIzogcmV2aXNpb24uYzoyMTU4Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAibyByYW1vIGF0dWFsIHBhcmVjZSBlc3RhciBkYW5pZmljYWRvIgorCisjOiByZXZpc2lvbi5jOjIxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJvIHJhbW8gYXR1YWwgJyVzJyBhaW5kYSBuw6NvIGNvbnTDqW0gbmVuaHVtIGNvbW1pdCIKKworIzogcmV2aXNpb24uYzoyMzU1Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IMOpIGluY29tcGF0w612ZWwgY29tIC0tYmlzZWN0IgorCisjOiBydW4tY29tbWFuZC5jOjEyNQorbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gYWJyaXIgL2Rldi9udWxsIgorCisjOiBydW4tY29tbWFuZC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJkdXAyKCVkLCVkKSBmYWlsZWQiCittc2dzdHIgImR1cDIoJWQsJWQpIGZhbGhvdSIKKworIzogc2VuZC1wYWNrLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFuYWxpc2FyIHN0YXR1cyBkZSBkZXNjb21wYWN0YcOnw6NvIHJlbW90YTogJXMiCisKKyM6IHNlbmQtcGFjay5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgdW5wYWNrIGZhaWxlZDogJXMiCittc2dzdHIgImRlc2NvbXBhY3Rhw6fDo28gcmVtb3RhIGZhbGhvdTogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMxNQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICJmYWxoYSBhbyBhc3NpbmFyIG8gY2VydGlmaWNhZG8gZGUgcHVibGljYcOnw6NvIgorCisjOiBzZW5kLXBhY2suYzo0MjgKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgIm8gcmVjZXRvciBuw6NvIHN1cG9ydGEgcHVibGljYcOnw6NvIGNvbSAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDMwCittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisiY2VydGlmaWNhZG8gZGUgcHVibGljYcOnw6NvIG7Do28gZW52aWFkbyB1bWEgdmV6IHF1ZSBvIHJlY2V0b3IgbsOjbyBzdXBvcnRhICIKKyJwdWJsaWNhw6fDo28gY29tIC0tc2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0NDIKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgIm8gcmVjZXRvciBuw6NvIHN1cG9ydGEgcHVibGljYcOnw6NvIGNvbSAtLWF0b21pYyIKKworIzogc2VuZC1wYWNrLmM6NDQ3Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgIm8gcmVjZXRvciBuw6NvIHN1cG9ydGEgb3DDp8O1ZXMgZGUgcHVibGljYcOnw6NvIgorCisjOiBzZXF1ZW5jZXIuYzoyMTUKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgInJldmVydGVyIgorCisjOiBzZXF1ZW5jZXIuYzoyMTcKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyM6IHNlcXVlbmNlci5jOjIxOQorbXNnaWQgInJlYmFzZSAtaSIKK21zZ3N0ciAicmViYXNlIC1pIgorCisjOiBzZXF1ZW5jZXIuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICJBw6fDo28gZGVzY29uaGVjaWRhOiAlZCIKKworIzogc2VxdWVuY2VyLmM6Mjc4Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJkZXBvaXMgZGUgcmVzb2x2ZXIgb3MgY29uZmxpdG9zLCBtYXJxdWUgb3MgY2FtaW5ob3MgY29ycmlnaWRvc1xuIgorImNvbSAnZ2l0IGFkZCA8Y2FtaW5ob3M+JyBvdSAnZ2l0IHJtIDxjYW1pbmhvcz4nIgorCisjOiBzZXF1ZW5jZXIuYzoyODEKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorImRlcG9pcyBkZSByZXNvbHZlciBvcyBjb25mbGl0b3MsIG1hcnF1ZSBvcyBjYW1pbmhvcyBjb3JyaWdpZG9zXG4iCisiY29tICdnaXQgYWRkIDxjYW1pbmhvcz4nIG91ICdnaXQgcm0gPGNhbWluaG9zPidcbiIKKyJlIHN1Ym1ldGEgbyByZXN1bHRhZG8gY29tICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6Mjk0IHNlcXVlbmNlci5jOjE2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGJsb3F1ZWFyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI5NyBzZXF1ZW5jZXIuYzoxNTUzIHNlcXVlbmNlci5jOjE2ODAgc2VxdWVuY2VyLmM6MTY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIGVtICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZW9sIHRvICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBmaW0gZGUgbGluaGEgZW0gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzA1IHNlcXVlbmNlci5jOjE1NTggc2VxdWVuY2VyLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJy4iCittc2dzdHIgImZhbGhhIGFvIGZpbmFsaXphciAnJXMnLiIKKworIzogc2VxdWVuY2VyLmM6MzI5IHNlcXVlbmNlci5jOjgxNCBzZXF1ZW5jZXIuYzoxNTc5IGJ1aWx0aW4vYW0uYzoyNTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzQ5IGJ1aWx0aW4vbWVyZ2UuYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgImFzIHN1YXMgYWx0ZXJhw6fDtWVzIGxvY2FpcyBzZXLDo28gc3Vic3RpdHXDrWRhcyBhbyAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjM1OQorbXNnaWQgImNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAic3VibWV0YSBvdSBlc2NvbmRhIGFzIHN1YXMgYWx0ZXJhw6fDtWVzIHBhcmEgY29udGludWFyLiIKKworIzogc2VxdWVuY2VyLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYXN0LWZvcndhcmQiCittc2dzdHIgIiVzOiBhdmFuw6dvIHLDoXBpZG8iCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAqICJyZWJhc2UgLWkiLgorIy4KKyM6IHNlcXVlbmNlci5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogTsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIG5vdm8gZmljaGVpcm8gZGUgw61uZGljZSIKKworIzogc2VxdWVuY2VyLmM6NDg5Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXRcbiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHJlc29sdmVyIG8gY29tbWl0IEhFQURcbiIKKworIzogc2VxdWVuY2VyLmM6NTA5Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlXG4iCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhdHVhbGl6YXIgYSDDoXJ2b3JlIGRlIGNhY2hlXG4iCisKKyM6IHNlcXVlbmNlci5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisidGVtIGFsdGVyYcOnw7VlcyBwcmVwYXJhZGFzIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG9cbiIKKyJTZSB0ZW5jaW9uYSBlc21hZ2FyIGVzdGFzIGFsdGVyYcOnw7VlcyBubyBjb21taXQgYW50ZXJpb3IsIGV4ZWN1dGU6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJTZSB0ZW5jaW9uYSBww7QtbGFzIG51bSBub3ZvIGNvbW1pdCwgZXhlY3V0ZTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJFbSBhbWJvcyBvcyBjYXNvcywgcXVhbmRvIGVzdGl2ZXIgcHJvbnRvLCBjb250aW51ZSBjb206XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gY29tbWl0ICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlc1xuIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBjb21taXQgcGFpICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5leHBlY3RlZCAxc3QgbGluZSBvZiBzcXVhc2ggbWVzc2FnZTpcbiIKKyJcbiIKKyJcdCUuKnMiCittc2dzdHIgIiIKKyIxwqogbGluaGEgaW5lc3BlcmFkYSBkYSBtZW5zYWdlbSBkZSBzcXVhc2g6XG4iCisiXG4iCisiXHQlLipzIgorCisjOiBzZXF1ZW5jZXIuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgMXN0IGxpbmUgb2Ygc3F1YXNoIG1lc3NhZ2U6XG4iCisiXG4iCisiXHQlLipzIgorbXNnc3RyICIiCisiMcKqIGxpbmhhIGludsOhbGlkYSBkYSBtZW5zYWdlbSBkZSBzcXVhc2g6XG4iCisiXG4iCisiXHQlLipzIgorCisjOiBzZXF1ZW5jZXIuYzo4MzMgc2VxdWVuY2VyLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAlZCBjb21taXRzLiIKK21zZ3N0ciAiSXN0byDDqSBhIGNvbWJpbmHDp8OjbyBkZSAlZCBjb21taXRzLiIKKworIzogc2VxdWVuY2VyLmM6ODQyCittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgIm5lY2Vzc8OhcmlhIHVtYSBIRUFEIHBhcmEgZml4dXAiCisKKyM6IHNlcXVlbmNlci5jOjg0NAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6ODQ2Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIGEgbWVuc2FnZW0gZGUgY29tbWl0IGRlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZXNjcmV2ZXIgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6ODYxIGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQ0NQorbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgIkVzdGEgw6kgYSAxwqogbWVuc2FnZW0gZGUgY29tbWl0OiIKKworIzogc2VxdWVuY2VyLmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIGEgbWVuc2FnZW0gZGUgY29tbWl0IGRlICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAiRXN0YSDDqSBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBuwrolZDoiCisKKyM6IHNlcXVlbmNlci5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyVkIHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIkEgbWVuc2FnZW0gZGUgY29tbWl0ICMlZCBzZXLDoSBpZ25vcmFkYToiCisKKyM6IHNlcXVlbmNlci5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICJjb21hbmRvIGRlc2NvbmhlY2lkbzogJWQiCisKKyM6IHNlcXVlbmNlci5jOjk1MgorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgImZpY2hlaXJvIGRlIMOtbmRpY2UgbsOjbyBpbnRlZ3JhZG8uIgorCisjOiBzZXF1ZW5jZXIuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJvIGNvbW1pdCAlcyDDqSB1bWEgaW50ZWdyYcOnw6NvIG1hcyBuw6NvIGZvaSBmb3JuZWNpZGEgYSBvcMOnw6NvIC1tLiIKKworIzogc2VxdWVuY2VyLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAibyBjb21taXQgJXMgbsOjbyB0ZW0gbyBwYWkgJWQiCisKKyM6IHNlcXVlbmNlci5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorbXNnc3RyICIiCisiYSBsaW5oYSBwcmluY2lwYWwgZm9pIGVzcGVjaWZpY2FkYSBtYXMgbyBjb21taXQgJXMgbsOjbyDDqSB1bWEgaW50ZWdyYcOnw6NvLiIKKworIzogc2VxdWVuY2VyLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBvYnRlciBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBkZSAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlIGEgInRvZG8iIGNvbW1hbmQgbGlrZQorIy4gInJldmVydCIgb3IgInBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMS4KKyM6IHNlcXVlbmNlci5jOjEwMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczogbsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gY29tbWl0IHBhaSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTA3MSBzZXF1ZW5jZXIuYzoxODIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbXVkYXIgbyBub21lIGRlICclcycgcGFyYSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxMTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCByZXZlcnRlciAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhcGxpY2FyICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxMTY1Cittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgIm8gY29uanVudG8gZGUgY29tbWl0cyBlc3BlY2lmaWNhZG8gZXN0w6EgdmF6aW8iCisKKyM6IHNlcXVlbmNlci5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogZmFsaGEgYW8gbGVyIG8gw61uZGljZSIKKworIzogc2VxdWVuY2VyLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBmYWxoYSBhbyBhdHVhbGl6YXIgbyDDrW5kaWNlIgorCisjOiBzZXF1ZW5jZXIuYzoxMzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAibGluaGEgJWQgaW52w6FsaWRhOiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAnJXMnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVmZXR1YXIgJyVzJyBzZW0gdW0gY29tbWl0IGFudGVyaW9yIgorCisjOiBzZXF1ZW5jZXIuYzoxMzQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcycuIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyICclcycuIgorCisjOiBzZXF1ZW5jZXIuYzoxMzQ5Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgImNvcnJpamEtbyB1c2FuZG8gJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKKworIzogc2VxdWVuY2VyLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAiZm9saGEgZGUgaW5zdHJ1w6fDtWVzIGludXRpbGl6w6F2ZWw6ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKK21zZ2lkICJubyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIm5lbmh1bSBjb21taXQgYW5hbGlzYWRvLiIKKworIzogc2VxdWVuY2VyLmM6MTM2NworbXNnaWQgImNhbm5vdCBjaGVycnktcGljayBkdXJpbmcgYSByZXZlcnQuIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyIGNoZXJyeS1waWNrIGR1cmFudGUgdW1hIHJldmVyc8Ojby4iCisKKyM6IHNlcXVlbmNlci5jOjEzNjkKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgcmV2ZXJ0ZXIgZHVyYW50ZSB1bSBjaGVycnktcGljay4iCisKKyM6IHNlcXVlbmNlci5jOjE0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJjaGF2ZSBpbnbDoWxpZGE6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAidmFsb3IgaW52w6FsaWRvIGRlICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAiZm9saGEgZGUgb3DDp8O1ZXMgbWFsZm9ybWFkYTogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTUzMAorbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImNoZXJyeS1waWNrIG91IHJldmVydCBlbSBjdXJzbyIKKworIzogc2VxdWVuY2VyLmM6MTUzMQorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCittc2dzdHIgInRlbnRlIFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwtLWFib3J0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgbyBkaXJldMOzcmlvIGRvIHNlcXVlbmNpYWRvciAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNTQ4Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGJsb3F1ZWFyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2MDQgc2VxdWVuY2VyLmM6MjE1OQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibmVuaHVtIGNoZXJyeS1waWNrIG91IHJldmVydCBlbSBjdXJzbyIKKworIzogc2VxdWVuY2VyLmM6MTYwNgorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHJlc29sdmVyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2MDggc2VxdWVuY2VyLmM6MTY0MgorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhYm9ydGFyIHVtIHJhbW8gYWluZGEgbsOjbyBjcmlhZG8iCisKKyM6IHNlcXVlbmNlci5jOjE2MjggYnVpbHRpbi9ncmVwLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyICclcyciCisKKyM6IHNlcXVlbmNlci5jOjE2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciAnJXMnOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTYzMQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgImZpbSBkZSBmaWNoZWlybyBpbmVzcGVyYWRvIgorCisjOiBzZXF1ZW5jZXIuYzoxNjM3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAibyBmaWNoZWlybyBIRUFEIGRlIHByZS1jaGVycnktcGljayAnJXMnIGVzdMOhIGNvcnJvbXBpZG8iCisKKyM6IHNlcXVlbmNlci5jOjE2NDgKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIlBhcmVjZSBxdWUgYSBIRUFEIHNlIG1vdmV1LiBOw6NvIHJlY3VhbmRvLCB2ZXJpZmlxdWUgYSBIRUFELiIKKworIzogc2VxdWVuY2VyLmM6MTc4NSBzZXF1ZW5jZXIuYzoyMDU4Cittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE4MjUgYnVpbHRpbi9kaWZmdG9vbC5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjb3BpYXIgJyVzJyBwYXJhICclcyciCisKKyM6IHNlcXVlbmNlci5jOjE4NDEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIMOtbmRpY2UiCisKKyM6IHNlcXVlbmNlci5jOjE4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBmYWlsZWQ6ICVzXG4iCisiJXNZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImEgZXhlY3XDp8OjbyBmYWxob3U6ICVzXG4iCisiJXNQb2RlIGNvcnJpZ2lyIG8gcHJvYmxlbWEgZSBleGVjdXRhclxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjE4NTIKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICJlIGZleiBhbHRlcmHDp8O1ZXMgYW8gw61uZGljZSBlL291IMOgIMOhcnZvcmUgZGUgdHJhYmFsaG9cbiIKKworIzogc2VxdWVuY2VyLmM6MTg1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJFeGVjdXRhZG8gY29tIHN1Y2Vzc286ICVzXG4iCisibWFzIGRlaXhvdSBhbHRlcmHDp8O1ZXMgbm8gw61uZGljZSBlL291IG5hIMOhcnZvcmUgZGUgdHJhYmFsaG9cbiIKKyJTdWJtZXRhIG91IGVzY29uZGEgYXMgYWx0ZXJhw6fDtWVzIGUgZXhlY3V0ZVxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjE5MTMgZ2l0LXJlYmFzZS5zaDoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICJQaWxoYSBhdXRvbcOhdGljYSAoYXV0b3N0YXNoKSBhcGxpY2FkYS4iCisKKyM6IHNlcXVlbmNlci5jOjE5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBndWFyZGFyICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxOTI3IGdpdC1yZWJhc2Uuc2g6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiU3VyZ2lyYW0gY29uZmxpdG9zIGFvIGFwbGljYXIgYSBwaWxoYSBhdXRvbcOhdGljYSAoYXV0b3N0YXNoKS5cbiIKKyJBcyBzdWFzIGFsdGVyYcOnw7VlcyBlc3TDo28gZ3VhcmRhZGFzIG5hIHBpbGhhLlxuIgorIlBvZGUgZXhlY3V0YXIgXCJnaXQgc3Rhc2ggcG9wXCIgb3UgXCJnaXQgc3Rhc2ggZHJvcFwiIG9wb3J0dW5hbWVudGUuXG4iCisKKyM6IHNlcXVlbmNlci5jOjIwMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlcy4uLiAgJS4qc1xuIgorbXNnc3RyICJQYXJvdSBhICVzLi4uICAlLipzXG4iCisKKyM6IHNlcXVlbmNlci5jOjIwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kICVkIgorbXNnc3RyICJjb21hbmRvIGRlc2NvbmhlY2lkbyAlZCIKKworIzogc2VxdWVuY2VyLmM6MjA2NgorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvcmlnLWhlYWQiCisKKyM6IHNlcXVlbmNlci5jOjIwNzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnb250byciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgJ29udG8nIgorCisjOiBzZXF1ZW5jZXIuYzoyMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhdHVhbGl6YXIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjIwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYXR1YWxpemFyIEhFQUQgcGFyYSAlcyIKKworIzogc2VxdWVuY2VyLmM6MjE2OAorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCByZWJhc2VhcjogdGVtIGFsdGVyYcOnw7VlcyBuw6NvIHByZXBhcmFkYXMuIgorCisjOiBzZXF1ZW5jZXIuYzoyMTczCittc2dpZCAiY291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgcmVtb3ZlciBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyMTgyCittc2dpZCAiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVtZW5kYXIgY29tbWl0IG7Do28tZXhpc3RlbnRlIgorCisjOiBzZXF1ZW5jZXIuYzoyMTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsZTogJyVzJyIKK21zZ3N0ciAiZmljaGVpcm8gaW52w6FsaWRvOiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgImNvbnRlw7pkbyBpbnbDoWxpZG86ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxODkKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJUZW0gYWx0ZXJhw6fDtWVzIHBvciBzdWJtZXRlciBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvLiBTdWJtZXRhLWFzIHByaW1laXJvXG4iCisiZSBleGVjdXRlICdnaXQgcmViYXNlIC0tY29udGludWUnIGRlIG5vdm8uIgorCisjOiBzZXF1ZW5jZXIuYzoyMTk5Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBzdWJtZXRlciBhcyBhbHRlcmHDp8O1ZXMgcHJlcGFyYWRhcy4iCisKKyM6IHNlcXVlbmNlci5jOjIyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzOiBuw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyIGNoZXJyeS1waWNrIGRlICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiByZXZpc8OjbyBpbmNvcnJldGEiCisKKyM6IHNlcXVlbmNlci5jOjIzMTYKK21zZ2lkICJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHJldmVydGVyIGNvbW8gY29tbWl0IGluaWNpYWwiCisKKyM6IHNldHVwLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiBuw6NvIGjDoSB0YWwgY2FtaW5obyBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvLlxuIgorIlVzZSAnZ2l0IDxjb21hbmRvPiAtLSA8Y2FtaW5obz4uLi4nIHBhcmEgZXNwZWNpZmljYXIgY2FtaW5ob3MgcXVlIG7Do28gIgorImV4aXN0ZW0gbG9jYWxtZW50ZS4iCisKKyM6IHNldHVwLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogdW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLlxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorImFyZ3VtZW50byBhbWLDrWd1byAnJXMnOiByZXZpc8OjbyBvdSBjYW1pbmhvIGRlc2NvbmhlY2lkb3MgbsOjbyBlbmNvbnRyYWRvIG5hICIKKyLDoXJ2b3JlIGRlIHRyYWJhbGhvLlxuIgorIlVzZSAnLS0nIHBhcmEgc2VwYXJhciBjYW1pbmhvcyBkZSByZXZpc8O1ZXMsIGFzc2ltOlxuIgorIidnaXQgPGNvbWFuZG8+IFs8cmV2aXPDo28+Li4uXSAtLSBbPGZpY2hlaXJvPi4uLl0nIgorCisjOiBzZXR1cC5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisiYXJndW1lbnRvIGFtYsOtZ3VvICclcyc6IHJldmlzw6NvIGUgbm9tZSBkZSBmaWNoZWlyb1xuIgorIlVzZSAnLS0nIHBhcmEgc2VwYXJhciBjYW1pbmhvcyBkZSByZXZpc8O1ZXMsIGFzc2ltOlxuIgorIidnaXQgPGNvbWFuZG8+IFs8cmV2aXPDo28+Li4uXSAtLSBbPGZpY2hlaXJvPi4uLl0nIgorCisjOiBzZXR1cC5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAiRXNwZXJhdmEtc2UgdmVyc8OjbyBkbyByZXBvc2l0w7NyaW8gZ2l0IDw9ICVkLCBvYnRldmUtc2UgJWQiCisKKyM6IHNldHVwLmM6NDgzCittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICJleHRlbnPDtWVzIGRlIHJlcG9zaXTDs3JpbyBkZXNjb25oZWNpZGFzIGVuY29udHJhZGFzOiIKKworIzogc2V0dXAuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiCittc2dzdHIgIk7Do28gw6kgdW0gcmVwb3NpdMOzcmlvIGdpdCAob3UgdW0gZG9zIGRpcmV0w7NyaW9zIHBhaSk6ICVzIgorCisjOiBzZXR1cC5jOjc3OCBidWlsdGluL2luZGV4LXBhY2suYzoxNjQ2Cittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHZvbHRhciBhbyBkaXJldMOzcmlvIGRlIHRyYWJhbGhvIGF0dWFsIgorCisjOiBzZXR1cC5jOjEwMTAKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBsZXIgbyBkaXJldMOzcmlvIGRlIHRyYWJhbGhvIGF0dWFsIgorCisjOiBzZXR1cC5jOjEwMjIgc2V0dXAuYzoxMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdG8gJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbXVkYXIgcGFyYSAnJXMnIgorCisjOiBzZXR1cC5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICIiCisiTsOjbyDDqSB1bSByZXBvc2l0w7NyaW8gZ2l0IChvdSB1bSBkaXJldMOzcmlvIHBhaSBhdMOpIGFvIHBvbnRvIGRlIG1vbnRhZ2VtICVzKVxuIgorIkludGVycm9tcGlkbyBubyBsaW1pdGUgZG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgIgorIihHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG7Do28gZGVmaW5pZG8pLiIKKworIzogc2V0dXAuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisiUHJvYmxlbWEgY29tIG8gdmFsb3IgY29yZS5zaGFyZWRSZXBvc2l0b3J5IG1vZG8gZGUgZmljaGVpcm8gKDAlLjNvKS5cbiIKKyJPIGRvbm8gZG9zIGZpY2hlaXJvcyB0ZW0gZGUgdGVyIHNlbXByZSBwZXJtaXNzw7VlcyBkZSBsZWl0dXJhIGUgZXNjcml0YS4iCisKKyM6IHNoYTFfZmlsZS5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIm8gY2FtaW5obyAnJXMnIG7Do28gZXhpc3RlIgorCisjOiBzaGExX2ZpbGUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBhcyBhIGxpbmtlZCBjaGVja291dCBpcyBub3Qgc3VwcG9ydGVkIHlldC4iCittc2dzdHIgIiIKKyJhaW5kYSBuw6NvIMOpIHN1cG9ydGFkYSBhIGZ1bmNpb25hbGlkYWRlIHF1ZSBwZXJtaXRlIHRlciBvIHJlcG9zaXTDs3JpbyBkZSAiCisicmVmZXLDqm5jaWEgJyVzJyBjb21vIHVtYSBleHRyYcOnw6NvIGxpZ2FkYS4iCisKKyM6IHNoYTFfZmlsZS5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJvIHJlcG9zaXTDs3JpbyBkZSByZWZlcsOqbmNpYSAnJXMnIG7Do28gw6kgdW0gcmVwb3NpdMOzcmlvIGxvY2FsLiIKKworIzogc2hhMV9maWxlLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAibyByZXBvc2l0w7NyaW8gZGUgcmVmZXLDqm5jaWEgJyVzJyDDqSByYXNvIgorCisjOiBzaGExX2ZpbGUuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJvIHJlcG9zaXTDs3JpbyBkZSByZWZlcsOqbmNpYSAnJXMnIGVzdMOhIGVueGVydGFkbyIKKworIzogc2hhMV9maWxlLmM6MTI0NQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJvZmZzZXQgYW50ZXMgZG8gZmltIGRvIGZpY2hlaXJvIGRlIHBhY290ZSAoLmlkeCBkYW5pZmljYWRvPykiCisKKyM6IHNoYTFfZmlsZS5jOjI3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIgorbXNnc3RyICJvZmZzZXQgYW50ZXMgZG8gaW7DrWNpbyBkbyDDrW5kaWNlIGRvIHBhY290ZSAlcyAow61uZGljZSBjb3Jyb21waWRvPykiCisKKyM6IHNoYTFfZmlsZS5jOjI3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICJvZmZzZXQgZGVwb2lzIGRvIGZpbSBkbyDDrW5kaWNlIGRvIHBhY290ZSAlcyAow61uZGljZSB0cnVuY2Fkbz8pIgorCisjOiBzaGExX25hbWUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIlNIQTEgY3VydG8gJXMgw6kgYW1iw61ndW8iCisKKyM6IHNoYTFfbmFtZS5jOjQyMAorbXNnaWQgIlRoZSBjYW5kaWRhdGVzIGFyZToiCittc2dzdHIgIk9zIGNhbmRpZGF0b3Mgc8OjbzoiCisKKyM6IHNoYTFfbmFtZS5jOjU4MAorbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIk5vcm1hbG1lbnRlIG8gR2l0IG51bmNhIGNyaWEgcmVmZXLDqm5jaWFzIHF1ZSB0ZXJtaW5lbSBlbSA0MCBjYXJhY3RlcmVzICIKKyJoZXhhZGVjaW1haXMsXG4iCisicG9pcyB1bWEgcmVmZXLDqm5jaWEgZGVzdGFzIHNlcmlhIGlnbm9yYWRhIHNlIGluZGljYXNzZSBzw7MgNDAgY2FyYWN0ZXJlcyAiCisiaGV4YWRlY2ltYWlzLlxuIgorIkVzdGFzIHJlZmVyw6puY2lhcyBwb2RlbSBzZXIgY3JpYWRhcyBwb3IgZW5nYW5vLiBDb21vIG5vIGV4ZW1wbG8sXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisib25kZSBcIiRiclwiIGVzdMOhIHZhemlvIGUgw6kgY3JpYWRhIHVtYSByZWZlcsOqbmNpYSBkZSA0MCBjYXJhY3RlcmVzICIKKyJoZXhhZGVjaW1haXMuXG4iCisiQW5hbGlzZSBlc3RhcyByZWZlcsOqbmNpYXMgZSBlbGltaW5lLWFzIHNlIGRlc2VqYXIuIERlc2F0aXZlIGVzdGFcbiIKKyJtZW5zYWdlbSBleGVjdXRhbmRvIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIzogc3VibW9kdWxlLmM6Njcgc3VibW9kdWxlLmM6MTAxCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBhbHRlcmFyIC5naXRtb2R1bGVzIG7Do28gaW50ZWdyYWRvLCByZXNvbHZhIHByaW1laXJvIG9zICIKKyJjb25mbGl0b3MgZGUgaW50ZWdyYcOnw6NvIgorCisjOiBzdWJtb2R1bGUuYzo3MSBzdWJtb2R1bGUuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJTZWPDp8OjbyBkZSAuZ2l0bW9kdWxlcyBjdWpvIHBhdGg9JXMgbsOjbyBlbmNvbnRyYWRhIgorCisjOiBzdWJtb2R1bGUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYXR1YWxpemFyIG8gZWxlbWVudG8gJXMgZGUgLmdpdG1vZHVsZXMiCisKKyM6IHN1Ym1vZHVsZS5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHJlbW92ZXIgbyBlbGVtZW50byAlcyBkZSAuZ2l0bW9kdWxlcyIKKworIzogc3VibW9kdWxlLmM6MTIzCittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gcHJlcGFyYXIgLmdpdG1vZHVsZXMgYXR1YWxpemFkbyIKKworIzogc3VibW9kdWxlLmM6MTYxCittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hKb2JzIgorbXNnc3RyICJuw6NvIMOpIHBlcm1pdGlkbyB2YWxvcmVzIG5lZ2F0aXZvcyBlbSBzdWJtb2R1bGUuZmV0Y2hKb2JzIgorCisjOiBzdWJtb2R1bGUuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJyVzJyBuw6NvIMOpIHJlY29uaGVjaWRvIGNvbW8gdW0gcmVwb3NpdMOzcmlvIGdpdCIKKworIzogc3VibW9kdWxlLmM6MTMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgaW5pY2lhciAnZ2l0IHN0YXR1cycgbm8gc3VibcOzZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXhlY3V0YXIgJ2dpdCBzdGF0dXMnIG5vIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgIm8gc3VibcOzZHVsbyAnJXMnIHRlbSDDrW5kaWNlIHN1am8iCisKKyM6IHN1Ym1vZHVsZS5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJyZWxvY2F0ZV9naXRkaXIgcGFyYSBzdWJtb2R1bGUgJyVzJyBjb20gbWFpcyBkbyBxdWUgdW1hIMOhcnZvcmUgZGUgdHJhYmFsaG8gIgorIm7Do28gc3Vwb3J0YWRvIgorCisjOiBzdWJtb2R1bGUuYzoxNjkxIHN1Ym1vZHVsZS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHByb2N1cmFyIHBlbG8gc3VibcOzZHVsbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxNjk1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzgKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZGlyZXTDs3JpbyAnJXMnIgorCisjOiBzdWJtb2R1bGUuYzoxNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKyJBIG1pZ3JhciBkaXJldMOzcmlvIGdpdCBkZSAnJXMlcycgZGVcbiIKKyInJXMnIHBhcmFcbiIKKyInJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHBlcmNvcnJlciByZWN1cnNpdmFtZW50ZSBvIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogc3VibW9kdWxlLmM6MTgyNgorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYXIgbHMtZmlsZXMgZW0gLi4iCisKKyM6IHN1Ym1vZHVsZS5jOjE4NDYKK21zZ2lkICJCVUc6IHJldHVybmVkIHBhdGggc3RyaW5nIGRvZXNuJ3QgbWF0Y2ggY3dkPyIKK21zZ3N0ciAiQlVHOiByZXR1cm5lZCBwYXRoIHN0cmluZyBkb2Vzbid0IG1hdGNoIGN3ZD8iCisKKyM6IHN1Ym1vZHVsZS5jOjE4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIgorbXNnc3RyICJscy10cmVlIHJldG9ybm91IGPDs2RpZ28gZGUgcmV0b3JubyBpbmVzcGVyYWRvICVkIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICJ2YWxvciBpbnbDoWxpZG8gZGUgJXMiCisKKyM6IHRyYWlsZXIuYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGV4ZWN1dGFyIG8gY29tYW5kbyB0cmFpbGVyICclcyciCisKKyM6IHRyYWlsZXIuYzo0NzMgdHJhaWxlci5jOjQ3NyB0cmFpbGVyLmM6NDgxIHRyYWlsZXIuYzo1MzUgdHJhaWxlci5jOjUzOQorIzogdHJhaWxlci5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJ2YWxvciBkZXNjb25oZWNpZG8gJyVzJyBkYSBjaGF2ZSAnJXMnIgorCisjOiB0cmFpbGVyLmM6NTI1IHRyYWlsZXIuYzo1MzAgYnVpbHRpbi9yZW1vdGUuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAibWFpcyBkbyBxdWUgdW0gJXMiCisKKyM6IHRyYWlsZXIuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAidG9rZW4gdGVybWluYWRvciB2YXppbyBubyB0ZXJtaW5hZG9yICclLipzJyIKKworIzogdHJhaWxlci5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgbyBmaWNoZWlybyBkZSBlbnRyYWRhICclcyciCisKKyM6IHRyYWlsZXIuYzo3MjUKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogdHJhaWxlci5jOjk0OSBidWlsdGluL2FtLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBzdGF0IGRlICVzIgorCisjOiB0cmFpbGVyLmM6OTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICJvIGZpY2hlaXJvICVzIG7Do28gw6kgdW0gZmljaGVpcm8gcmVndWxhciIKKworIzogdHJhaWxlci5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICJvIGZpY2hlaXJvICVzIG7Do28gcG9kZSBzZXIgZXNjcml0byBwZWxvIHV0aWxpemFkb3IiCisKKyM6IHRyYWlsZXIuYzo5NjUKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIGZpY2hlaXJvIHRlbXBvcsOhcmlvIgorCisjOiB0cmFpbGVyLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbXVkYXIgbyBub21lIGRvIGZpY2hlaXJvIHRlbXBvcsOhcmlvIHBhcmEgJXMiCisKKyM6IHRyYW5zcG9ydC5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIgorbXNnc3RyICJJcmlhIGRlZmluaXIgbyByYW1vIGEgbW9udGFudGUgZGUgJyVzJyBjb21vICclcycgZGUgJyVzJ1xuIgorCisjOiB0cmFuc3BvcnQuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0OiBpbnZhbGlkIGRlcHRoIG9wdGlvbiAnJXMnIgorbXNnc3RyICJ0cmFuc3BvcnRlOiBvcMOnw6NvIGRlIHByb2Z1bmRpZGFkZSAnJXMnIGludsOhbGlkYSIKKworIzogdHJhbnNwb3J0LmM6ODg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBjYW1pbmhvcyBkZSBzdWJtw7NkdWxvIGNvbnTDqm0gYWx0ZXJhw6fDtWVzIHF1ZVxuIgorIm7Do28gcHVkZXJhbSBzZXIgZW5jb250cmFkYXMgYSBuZW5odW0gcmVtb3RvOlxuIgorCisjOiB0cmFuc3BvcnQuYzo4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiUG9yIGZhdm9yIHRlbnRlXG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvdSBjZCBwYXJhIG8gY2FtaW5obyBlIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJwYXJhIHB1YmxpY8OhLWxhcyBubyByZW1vdG8uXG4iCisiXG4iCisKKyM6IHRyYW5zcG9ydC5jOjkwMQorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAiQWJvcnRhZG8uIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBsZXIgYSByZWZlcsOqbmNpYSAlcyIKKworIzogdHJlZS13YWxrLmM6MzEKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBvYmplY3QiCittc2dzdHIgIm9iamV0byDDoXJ2b3JlIGRlbWFzaWFkbyBjdXJ0byIKKworIzogdHJlZS13YWxrLmM6MzcKK21zZ2lkICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICJtb2RvIG5hIGVudHJhZGEgZGUgw6Fydm9yZSBtYWxmb3JtYWRvIgorCisjOiB0cmVlLXdhbGsuYzo0MQorbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgIm5vbWUgZGUgZmljaGVpcm8gdmF6aW8gbmEgZW50cmFkYSBkZSDDoXJ2b3JlIgorCisjOiB0cmVlLXdhbGsuYzoxMTMKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBmaWxlIgorbXNnc3RyICJmaWNoZWlybyBkZSDDoXJ2b3JlIGRlbWFzaWFkbyBjdXJ0byIKKworIzogdW5wYWNrLXRyZWVzLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkFzIHN1YXMgYWx0ZXJhw6fDtWVzIGxvY2FpcyBub3Mgc2VndWludGVzIGZpY2hlaXJvcyBzZXJpYW0gc3Vic3RpdHXDrWRhcyBhbyAiCisiZXh0cmFpcjpcbiIKKyIlJXNTdWJtZXRhIGFzIHN1YXMgYWx0ZXJhw6fDtWVzIG91IGVzY29uZGEtYXMgYW50ZXMgZGUgdHJvY2FyIGRlIHJhbW8uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkFzIHN1YXMgYWx0ZXJhw6fDtWVzIGxvY2FpcyBub3Mgc2VndWludGVzIGZpY2hlaXJvcyBzZXJpYW0gc3Vic3RpdHXDrWRhcyBhbyAiCisiZXh0cmFpcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkFzIHN1YXMgYWx0ZXJhw6fDtWVzIGxvY2FpcyBub3Mgc2VndWludGVzIGZpY2hlaXJvcyBzZXJpYW0gc3Vic3RpdHXDrWRhcyBhbyAiCisiaW50ZWdyYXI6XG4iCisiJSVzU3VibWV0YSBhcyBzdWFzIGFsdGVyYcOnw7VlcyBvdSBlc2NvbmRhLWFzIGFudGVzIGRlIGludGVncmFyLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJBcyBzdWFzIGFsdGVyYcOnw7VlcyBsb2NhaXMgbm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3Mgc2VyaWFtIHN1YnN0aXR1w61kYXMgYW8gIgorImludGVncmFyOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiQXMgc3VhcyBhbHRlcmHDp8O1ZXMgbG9jYWlzIG5vcyBzZWd1aW50ZXMgZmljaGVpcm9zIHNlcmlhbSBzdWJzdGl0dcOtZGFzIHBvciAiCisiJXM6XG4iCisiJSVzU3VibWV0YSBhcyBzdWFzIGFsdGVyYcOnw7VlcyBvdSBlc2NvbmRhLWFzIGFudGVzIGRlIGVmZXR1YXIgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkFzIHN1YXMgYWx0ZXJhw6fDtWVzIGxvY2FpcyBub3Mgc2VndWludGVzIGZpY2hlaXJvcyBzZXJpYW0gc3Vic3RpdHXDrWRhcyBwb3IgIgorIiVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyJBdHVhbGl6YXIgb3Mgc2VndWludGVzIGRpcmV0w7NyaW9zIHBlcmRlIG9zIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xvcyBkZW50cm8gIgorImRlbGVzOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIHNlcmlhbSAiCisicmVtb3ZpZG9zIGFvIGV4dHJhaXI6XG4iCisiJSVzTW92YSBvdSByZW1vdmEtb3MgYW50ZXMgZGUgdHJvY2FyIGRlIHJhbW9zLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInJlbW92aWRvcyBhbyBleHRyYWlyOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIHNlcmlhbSAiCisicmVtb3ZpZG9zIGFvIGludGVncmFyOlxuIgorIiUlc01vdmEgb3UgcmVtb3ZhLW9zIGFudGVzIGRlIGludGVncmFyLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInJlbW92aWRvcyBhbyBpbnRlZ3JhcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInJlbW92aWRvcyBwb3IgJXM6XG4iCisiJSVzTW92YSBvdSByZW1vdmEtb3MgYW50ZXMgZGUgZWZldHVhciAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJyZW1vdmlkb3MgcG9yICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIHNlcmlhbSAiCisic3Vic3RpdHXDrWRvcyBhbyBleHRyYWlyOlxuIgorIiUlc01vdmEgb3UgcmVtb3ZhLW9zIGFudGVzIGRlIHRyb2NhciBkZSByYW1vcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInN1YnN0aXR1w61kb3MgYW8gZXh0cmFpcjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJzdWJzdGl0dcOtZG9zIGFvIGludGVncmFyOlxuIgorIiUlc01vdmEgb3UgcmVtb3ZhLW9zIGFudGVzIGRlIGludGVncmFyLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gc2VyaWFtICIKKyJzdWJzdGl0dcOtZG9zIGFvIGludGVncmFyOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInN1YnN0aXR1w61kb3MgcG9yICVzOlxuIgorIiUlc01vdmEgb3UgcmVtb3ZhLW9zIGFudGVzIGRlIGVmZXR1YXIgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJPcyBzZWd1aW50ZXMgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gIgorInN1YnN0aXR1w61kb3MgcG9yICVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICJBIGVudHJhZGEgJyVzJyBzb2JyZXDDtWUtc2UgY29tICclcycuIE7Do28gw6kgcG9zc8OtdmVsIHZpbmN1bGFyLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAtdG8tZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGV4dHJhaXIgZXNwYXJzYW1lbnRlOiBhcyBzZWd1aW50ZXMgZW50cmFkYXMgbsOjbyBlc3TDo28gIgorImF0dWFsaXphZGFzOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiT3Mgc2VndWludGVzIGZpY2hlaXJvcyBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIHNlcmlhbSBzdWJzdGl0dcOtZG9zIGFvICIKKyJhdHVhbGl6YXIgYSBleHRyYcOnw6NvIGVzcGFyc2E6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyBzZXJpYW0gcmVtb3ZpZG9zIGFvIGF0dWFsaXphciBhICIKKyJleHRyYcOnw6NvIGVzcGFyc2E6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzdWJtb2R1bGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBhdHVhbGl6YXIgc3VibcOzZHVsbzpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nXG4iCittc2dzdHIgIkEgYWJvcnRhclxuIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIHVwZGF0ZSBzdHJhdGVneSBub3Qgc3VwcG9ydGVkIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHByb2N1cmFyIHBlbG8gc3VibcOzZHVsbyAnJXMnIgorCisjOiB1bnBhY2stdHJlZXMuYzozNDAKK21zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCittc2dzdHIgIkEgZXh0cmFpciBmaWNoZWlyb3MiCisKKyM6IHVybG1hdGNoLmM6MTYzCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgIm5vbWUgZGUgZXNxdWVtYSBkZSBVUkwgaW52w6FsaWRvIG91IGZhbHRhIGRvIHN1Zml4byAnOi8vJyIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICJzZXF1ZW5jaWEgZGUgZXNjYXBlICVYWCBpbnbDoWxpZGEiCisKKyM6IHVybG1hdGNoLmM6MjE1Cittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgInNpc3RlbWEgYW5maXRyacOjbyBuw6NvIGluZGljYWRvIGUgbyBlc3F1ZW1hIG7Do28gw6kgZG8gdGlwbyAnZmlsZTonIgorCisjOiB1cmxtYXRjaC5jOjIzMgorbXNnaWQgImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiCittc2dzdHIgInVtIFVSTCBkbyB0aXBvICdmaWxlOicgbsOjbyBwb2RlIHRlciB1bSBuw7ptZXJvIGRlIHBvcnRhIgorCisjOiB1cmxtYXRjaC5jOjI0NworbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgImNhcmFjdGVyZXMgaW52w6FsaWRvcyBubyBub21lIGRvIGFuZml0cmnDo28iCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSBwb3J0YSBpbnbDoWxpZG8iCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAic2VnbWVudG8gZGUgY2FtaW5obyAnLi4nIGludsOhbGlkbyIKKworIzogd29ya3RyZWUuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiZmFsaGEgYW8gbGVyICclcyciCisKKyM6IHdyYXBwZXIuYzoyMjIgd3JhcHBlci5jOjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgJyVzJyBwYXJhIGxlaXR1cmEgZSBlc2NyaXRhIgorCisjOiB3cmFwcGVyLmM6MjI0IHdyYXBwZXIuYzozOTQgYnVpbHRpbi9hbS5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgJyVzJyBwYXJhIGVzY3JpdGEiCisKKyM6IHdyYXBwZXIuYzoyMjYgd3JhcHBlci5jOjM5NiBidWlsdGluL2FtLmM6MzIwIGJ1aWx0aW4vYW0uYzo3NTkKKyM6IGJ1aWx0aW4vYW0uYzo4NDcgYnVpbHRpbi9jb21taXQuYzoxNzAwIGJ1aWx0aW4vbWVyZ2UuYzoxMDE1CisjOiBidWlsdGluL3B1bGwuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICclcycgcGFyYSBsZWl0dXJhIgorCisjOiB3cmFwcGVyLmM6NTgxIHdyYXBwZXIuYzo2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhY2VkZXIgYSAnJXMnIgorCisjOiB3cmFwcGVyLmM6NjEwCittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBkZSBvYnRlciBvIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8gYXR1YWwiCisKKyM6IHdyYXBwZXIuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgcGFyYSAlcyIKKworIzogd3JhcHBlci5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBmZWNoYXIgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE1MQorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiQ2FtaW5ob3MgbsOjbyBpbnRlZ3JhZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6MTc4IHd0LXN0YXR1cy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmljaGVpcm8+Li4uXCIgcGFyYSBkZXNwcmVwYXJhcikiCisKKyM6IHd0LXN0YXR1cy5jOjE4MCB3dC1zdGF0dXMuYzoyMDcKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmljaGVpcm8+Li4uXCIgcGFyYSBkZXNwcmVwYXJhcikiCisKKyM6IHd0LXN0YXR1cy5jOjE4NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IGFkZCA8ZmljaGVpcm8+Li4uXCIgcGFyYSBtYXJjYXIgY29tbyByZXNvbHZpZG8pIgorCisjOiB3dC1zdGF0dXMuYzoxODYgd3Qtc3RhdHVzLmM6MTkwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmljaGVpcm8+Li4uXCIgY29uZm9ybWUgYXByb3ByaWFkbyBwYXJhIG1hcmNhciBjb21vICIKKyJyZXNvbHZpZG8pIgorCisjOiB3dC1zdGF0dXMuYzoxODgKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IHJtIDxmaWNoZWlybz4uLi5cIiBwYXJhIG1hcmNhciBjb21vIHJlc29sdmlkbykiCisKKyM6IHd0LXN0YXR1cy5jOjE5OSB3dC1zdGF0dXMuYzo5NTgKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkFsdGVyYcOnw7VlcyBwYXJhIHNlcmVtIHN1Ym1ldGlkYXM6IgorCisjOiB3dC1zdGF0dXMuYzoyMTcgd3Qtc3RhdHVzLmM6OTY3Cittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICJBbHRlcmHDp8O1ZXMgbsOjbyBwcmVwYXJhZGFzIHBhcmEgc3VibWV0ZXI6IgorCisjOiB3dC1zdGF0dXMuYzoyMjEKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IGFkZCA8ZmljaGVpcm8+Li4uXCIgcGFyYSBhdHVhbGl6YXIgbyBxdWUgc2Vyw6Egc3VibWV0aWRvKSIKKworIzogd3Qtc3RhdHVzLmM6MjIzCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWNoZWlybz4uLi5cIiBwYXJhIGF0dWFsaXphciBvIHF1ZSBzZXLDoSBzdWJtZXRpZG8pIgorCisjOiB3dC1zdGF0dXMuYzoyMjQKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpY2hlaXJvPi4uLlwiIHBhcmEgZGVzY2FydGFyIGFsdGVyYcOnw7VlcyBubyAiCisiZGlyZXTDs3JpbyBkZSB0cmFiYWxobykiCisKKyM6IHd0LXN0YXR1cy5jOjIyNgorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKHN1Ym1ldGEgb3UgZGVzY2FydGUgbyBjb250ZcO6ZG8gbW9kaWZpY2FkbyBvdSBuw6NvIGNvbnRyb2xhZG8gbm9zICIKKyJzdWJtw7NkdWxvcykiCisKKyM6IHd0LXN0YXR1cy5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0ICVzIDxmaWNoZWlybz4uLi5cIiBwYXJhIGluY2x1aXIgbm8gcXVlIHNlcsOhIHN1Ym1ldGlkbykiCisKKyM6IHd0LXN0YXR1cy5jOjI1MworbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgImVsaW1pbmFkbyBwb3IgYW1ib3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNTUKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgImFkaWNpb25hZG8gcG9yIG7Ds3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNTcKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJlbGltaW5hZG8gcG9yIGVsZXM6IgorCisjOiB3dC1zdGF0dXMuYzoyNTkKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAiYWRpY2lvbmFkbyBwb3IgZWxlczoiCisKKyM6IHd0LXN0YXR1cy5jOjI2MQorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICJlbGltaW5hZG8gcG9yIG7Ds3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAiYWRpY2lvbmFkbyBwb3IgYW1ib3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNjUKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAibW9kaWZpY2FkbyBwb3IgYW1ib3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNzUKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgIm5vdm8gZmljaGVpcm86IgorCisjOiB3dC1zdGF0dXMuYzoyNzcKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICJjb3BpYWRvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc5Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgImVsaW1pbmFkbzoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MQorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAibW9kaWZpY2FkbzoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MworbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICJub21lIG11ZGFkbzoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NQorbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICJ0aXBvIGFsdGVyYWRvOiIKKworIzogd3Qtc3RhdHVzLmM6Mjg3Cittc2dpZCAidW5rbm93bjoiCittc2dzdHIgImRlc2NvbmhlY2lkbzoiCisKKyM6IHd0LXN0YXR1cy5jOjI4OQorbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAibsOjbyBpbnRlZ3JhZG86IgorCisjOiB3dC1zdGF0dXMuYzozNzEKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJub3ZvcyBjb21taXRzLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3MworbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGXDumRvIG1vZGlmaWNhZG8sICIKKworIzogd3Qtc3RhdHVzLmM6Mzc1Cittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGXDumRvIG7Do28gY29udHJvbGFkbywgIgorCisjOiB3dC1zdGF0dXMuYzo4MzEKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiU3VibcOzZHVsb3MgYWx0ZXJhZG9zIG1hcyBuw6NvIGF0dWFsaXphZG9zOiIKKworIzogd3Qtc3RhdHVzLmM6ODMzCittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiQWx0ZXJhw6fDtWVzIGVtIHN1Ym3Ds2R1bG9zIHBhcmEgc2VyZW0gc3VibWV0aWRhczoiCisKKyM6IHd0LXN0YXR1cy5jOjkxNAorbXNnaWQgIiIKKyJEbyBub3QgdG91Y2ggdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyB3aWxsIGJlIHJlbW92ZWQuIgorbXNnc3RyICIiCisiTsOjbyBhbHRlcmUgYSBsaW5oYSBhY2ltYS5cbiIKKyJUdWRvIG8gcXVlIGVzdGl2ZXIgYWJhaXhvIHNlcsOhIHJlbW92aWRvLiIKKworIzogd3Qtc3RhdHVzLmM6MTAyNgorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAiSMOhIGNhbWluaG9zIG7Do28gaW50ZWdyYWRvcy4iCisKKyM6IHd0LXN0YXR1cy5jOjEwMjkKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIChjb3JyaWphIG9zIGNvbmZsaXRvcyBlIGV4ZWN1dGUgXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMDMxCittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHBhcmEgYWJvcnRhciBhIGludGVncmHDp8OjbykiCisKKyM6IHd0LXN0YXR1cy5jOjEwMzYKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICJUb2RvcyBvcyBjb25mbGl0b3MgZm9yYW0gY29ycmlnaWRvcyBtYXMgYWluZGEgZXN0w6EgYSBpbnRlZ3Jhci4iCisKKyM6IHd0LXN0YXR1cy5jOjEwMzkKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgY29tbWl0XCIgcGFyYSBjb25jbHVpciBhIGludGVncmHDp8OjbykiCisKKyM6IHd0LXN0YXR1cy5jOjEwNDkKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIlNlc3PDo28gYW0gZW0gY3Vyc28uIgorCisjOiB3dC1zdGF0dXMuYzoxMDUyCittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJPIHBhdGNoIGF0dWFsIGVzdMOhIHZhemlvLiIKKworIzogd3Qtc3RhdHVzLmM6MTA1NgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGNvcnJpamEgb3MgY29uZmxpdG9zIGUgZXhlY3V0ZSBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMDU4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiBwYXJhIGlnbm9yYXIgZXN0ZSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjEwNjAKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgcGFyYSByZXN0YXVyYXIgbyByYW1vIG9yaWdpbmFsKSIKKworIzogd3Qtc3RhdHVzLmM6MTE4OQorbXNnaWQgImdpdC1yZWJhc2UtdG9kbyBpcyBtaXNzaW5nLiIKK21zZ3N0ciAiZ2l0LXJlYmFzZS10b2RvIG7Do28gZXhpc3RlLiIKKworIzogd3Qtc3RhdHVzLmM6MTE5MQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICJOZW5odW0gY29tYW5kbyBjb25jbHXDrWRvLiIKKworIzogd3Qtc3RhdHVzLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICLDmmx0aW1vIGNvbWFuZG8gY29uY2x1w61kbyAoJWQgY29tYW5kbyBjb25jbHXDrWRvKToiCittc2dzdHJbMV0gIsOabHRpbW9zIGNvbWFuZG9zIGNvbmNsdcOtZG9zICglZCBjb21hbmRvcyBjb25jbHXDrWRvcyk6IgorCisjOiB3dC1zdGF0dXMuYzoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgICh2ZWphIG1haXMgbm8gZmljaGVpcm8gJXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMjEwCittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAiTmVuaHVtIGNvbWFuZG8gcG9yIGNvbmNsdWlyLiIKKworIzogd3Qtc3RhdHVzLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICJQcsOzeGltbyBjb21hbmRvIGEgZXhlY3V0YXIgKCVkIGNvbWFuZG8gcmVzdGFudGUpOiIKK21zZ3N0clsxXSAiUHLDs3hpbW9zIGNvbWFuZG9zIGEgZXhlY3V0YXIgKCVkIGNvbWFuZG9zIHJlc3RhbnRlcyk6IgorCisjOiB3dC1zdGF0dXMuYzoxMjIxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgcGFyYSB2aXN1YWxpemFyIGUgZWRpdGFyKSIKKworIzogd3Qtc3RhdHVzLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiRXN0w6EgYSByZWFsaXphciByZWJhc2UgZG8gcmFtbyAnJXMnIHNvYnJlICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMjM5Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJFc3TDoSBhIHJlYmFzZWFyIG5lc3RlIG1vbWVudG8uIgorCisjOiB3dC1zdGF0dXMuYzoxMjUzCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGNvcnJpamEgb3MgY29uZmxpdG9zIGUgZXhlY3V0ZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTI1NQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBwYXJhIGlnbm9yYXIgZXN0ZSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjEyNTcKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHBhcmEgcmVzdGF1cmFyIG8gcmFtbyBvcmlnaW5hbCkiCisKKyM6IHd0LXN0YXR1cy5jOjEyNjMKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgICh0b2RvcyBvcyBjb25mbGl0b3MgZm9yYW0gY29ycmlnaWRvczogZXhlY3V0ZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiRXN0w6EgYSBkaXZpZGlyIHVtIGNvbW1pdCBhbyBtZXNtbyB0ZW1wbyBxdWUgc2UgZWZldHVhIHJlYmFzZSBkbyByYW1vICclcycgIgorInNvYnJlICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMjcyCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkVzdMOhIGEgZGl2aWRpciB1bSBjb21taXQgZHVyYW50ZSB1bSByZWJhc2UuIgorCisjOiB3dC1zdGF0dXMuYzoxMjc1Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChBc3NpbSBxdWUgbyBkaXJldMOzcmlvIGRlIHRyYWJhbGhvIGVzdGl2ZXIgbGltcG8sIGV4ZWN1dGUgXCJnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJFc3TDoSBhIGVkaXRhciB1bSBjb21taXQgYW8gbWVzbW8gdGVtcG8gcXVlIGVmZXR1YSByZWJhc2UgZG8gcmFtbyAnJXMnIHNvYnJlICIKKyInJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTI4NAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiRXN0w6EgYSBlZGl0YXIgdW0gY29tbWl0IGR1cmFudGUgdW0gcmViYXNlLiIKKworIzogd3Qtc3RhdHVzLmM6MTI4NworbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHBhcmEgZW1lbmRhciBvIGNvbW1pdCBhdHVhbCkiCisKKyM6IHd0LXN0YXR1cy5jOjEyODkKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBhc3NpbSBxdWUgZXN0aXZlciBzYXRpc2ZlaXRvIGNvbSBhcyAiCisiYWx0ZXJhw6fDtWVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICJFc3TDoSBhIHJlYWxpemFyIGNoZXJyeS1waWNrIGRvIGNvbW1pdCAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzMDQKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoY29ycmlqYSBvcyBjb25mbGl0b3MgZSBleGVjdXRlIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDcKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHRvZG9zIG9zIGNvbmZsaXRvcyBmb3JhbSBjb3JyaWdpZG9zOiBleGVjdXRlIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiCisiXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzA5Cittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHBhcmEgY2FuY2VsYXIgYSBvcGVyYcOnw6NvIGRlIGNoZXJyeS1waWNrKSIKKworIzogd3Qtc3RhdHVzLmM6MTMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiRXN0w6EgYSByZXZlcnRlciBvIGNvbW1pdCAlcyBuZXN0ZSBjb21lbnRvLiIKKworIzogd3Qtc3RhdHVzLmM6MTMyMworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoY29ycmlqYSBkb3MgY29uZmxpdG9zIGUgZXhlY3V0ZSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTMyNgorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHRvZG9zIG9zIGNvbmZsaXRvcyBmb3JhbSBjb3JyaWdpZG9zOiBleGVjdXRlIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMzI4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAodXNlIFwiZ2l0IHJldmVyIC0tYWJvcnRcIiBwYXJhIGNhbmNlbGFyIGEgb3BlcmHDp8OjbyBkZSByZXZlcnPDo28pIgorCisjOiB3dC1zdGF0dXMuYzoxMzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiRXN0w6EgYSBiaXNzZXRhciwgaW5pY2lhZG8gYSBwYXJ0aXIgZG8gcmFtbyAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTM0MworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIkVzdMOhIGEgYmlzc2V0YXIgbmVzdGUgbW9tZW50by4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNDYKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiBwYXJhIHZvbHRhciBhbyByYW1vIG9yaWdpbmFsKSIKKworIzogd3Qtc3RhdHVzLmM6MTU0MworbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIk5vIHJhbW8gIgorCisjOiB3dC1zdGF0dXMuYzoxNTQ5Cittc2dpZCAiaW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNlIGludGVyYXRpdm8gZW0gY3Vyc287IHNvYnJlICIKKworIzogd3Qtc3RhdHVzLmM6MTU1MQorbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzZSBlbSBjdXJzbzsgc29icmUgIgorCisjOiB3dC1zdGF0dXMuYzoxNTU2Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUQgZGVzdGFjYWRhIGVtICIKKworIzogd3Qtc3RhdHVzLmM6MTU1OAorbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIkhFQUQgZGVzdGFjYWRhIGRlICIKKworIzogd3Qtc3RhdHVzLmM6MTU2MQorbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIk7Do28gc2UgZW5jb250cmEgZW0gbmVuaHVtIHJhbW8gbmVzdGUgbW9tZW50by4iCisKKyM6IHd0LXN0YXR1cy5jOjE1NzkKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiQ29tbWl0IGluaWNpYWwiCisKKyM6IHd0LXN0YXR1cy5jOjE1OTMKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIkZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIgorCisjOiB3dC1zdGF0dXMuYzoxNTk1Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiRmljaGVpcm9zIGlnbm9yYWRvcyIKKworIzogd3Qtc3RhdHVzLmM6MTU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiQSBlbnVtZXJhw6fDo28gZG9zIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGRlbW9yb3UgJS4yZiBzZWd1bmRvc1xuIgorImEgY29uY2x1aXIuICdzdGF0dXMgLXVubycgcG9kZSBhY2VsZXJhciBvIHByb2Nlc3NvLCBtYXMgZGV2ZSB0ZXJcbiIKKyJjdWlkYWRvIGRlIG7Do28gc2UgZXNxdWVjZXIgZGUgYWRpY2lvbmFyIG5vdm9zIGZpY2hlaXJvc1xuIgorIihjb25zdWx0ZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorCisjOiB3dC1zdGF0dXMuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIkZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIG7Do28gbGlzdGFkb3MlcyIKKworIzogd3Qtc3RhdHVzLmM6MTYwNworbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAodXNlIGEgb3DDp8OjbyAtdSBwYXJhIG1vc3RyYXIgb3MgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MpIgorCisjOiB3dC1zdGF0dXMuYzoxNjEzCittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiU2VtIGFsdGVyYcOnw7VlcyIKKworIzogd3Qtc3RhdHVzLmM6MTYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIKK21zZ3N0ciAiIgorIm5lbmh1bWEgYWx0ZXJhw6fDo28gYWRpY2lvbmFkYSBwYXJhIHN1Ym1ldGVyICh1c2UgXCJnaXQgYWRkXCIgZS9vdSBcImdpdCAiCisiY29tbWl0IC1hXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE2MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAibmVuaHVtYSBhbHRlcmHDp8OjbyBhZGljaW9uYWRhIHBhcmEgc3VibWV0ZXJcbiIKKworIzogd3Qtc3RhdHVzLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisibsOjbyBmb2kgYWRpY2lvbmFkbyBuYWRhIHBhcmEgc3VibWV0ZXIsIG1hcyBleGlzdGVtIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zICIKKyIodXNlIFwiZ2l0IGFkZFwiIHBhcmEgY29udHJvbMOhLWxvcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTYyNworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorIm7Do28gZm9pIGFkaWNpb25hZG8gbmFkYSBwYXJhIHN1Ym1ldGVyLCBtYXMgZXhpc3RlbSBmaWNoZWlyb3MgbsOjbyAiCisiY29udHJvbGFkb3NcbiIKKworIzogd3Qtc3RhdHVzLmM6MTYzMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorIm7Do28gaMOhIG5hZGEgcGFyYSBzdWJtZXRlciAoY3JpZS9jb3BpZSBmaWNoZWlyb3MgZSB1c2UgXCJnaXQgYWRkXCIgcGFyYSAiCisiY29udHJvbMOhLWxvcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTYzMyB3dC1zdGF0dXMuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIm7Do28gaMOhIG5hZGEgcGFyYSBzdWJtZXRlclxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIiIKKyJuw6NvIGjDoSBuYWRhIHBhcmEgc3VibWV0ZXIgKHVzZSAtdSBwYXJhIG1vc3RyYXIgb3MgZmljaGVpcm9zIG7Do28gIgorImNvbnRyb2xhZG9zKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW5cbiIKK21zZ3N0ciAibsOjbyBow6EgbmFkYSBwYXJhIHN1Ym1ldGVyLCDDoXJ2b3JlIGRlIHRyYWJhbGhvIGxpbXBhXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NDkKK21zZ2lkICJJbml0aWFsIGNvbW1pdCBvbiAiCittc2dzdHIgIkNvbW1pdCBpbmljaWFsIGVtICIKKworIzogd3Qtc3RhdHVzLmM6MTc1MworbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKG5lbmh1bSByYW1vKSIKKworIzogd3Qtc3RhdHVzLmM6MTc4MiB3dC1zdGF0dXMuYzoxNzkwCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiYXRyw6FzICIKKworIzogd3Qtc3RhdHVzLmM6MTc4NSB3dC1zdGF0dXMuYzoxNzg4Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICLDoCBmcmVudGUgIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGFjdGlvbiBpcyBlLmcuICJwdWxsIHdpdGggcmViYXNlIgorIzogd3Qtc3RhdHVzLmM6MjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyICVzOiB0ZW0gYWx0ZXJhw6fDtWVzIG7Do28gcHJlcGFyYWRhcy4iCisKKyM6IHd0LXN0YXR1cy5jOjIyODYKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgImFsw6ltIGRpc3NvLCBvIMOtbmRpY2UgY29udMOpbSBhbHRlcmHDp8O1ZXMgbsOjbyBzdWJtZXRpZGFzLiIKKworIzogd3Qtc3RhdHVzLmM6MjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVmZXR1YXIgJXM6IG8gw61uZGljZSBjb250w6ltIGFsdGVyYcOnw7VlcyBuw6NvIHN1Ym1ldGlkYXMuIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTcgYnVpbHRpbi9jbG9uZS5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgImZhbGhhIGFvIGludm9jYXIgdW5saW5rIGRlICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjIKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPG9ww6fDtWVzPl0gWy0tXSA8Y2FtaW5obz4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiZGlmZiBzdGF0dXMgaW5lc3BlcmFkbyAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo4NSBidWlsdGluL2NvbW1pdC5jOjI5MQorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gYXR1YWxpemFyIG9zIGZpY2hlaXJvcyIKKworIzogYnVpbHRpbi9hZGQuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJyZW1vdmVyICclcydcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNDkKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiQWx0ZXJhw6fDtWVzIG7Do28gcHJlcGFyYWRhcyBkZXBvaXMgZGUgYXR1YWxpemFyIG8gw61uZGljZToiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5IGJ1aWx0aW4vcmV2LXBhcnNlLmM6ODcyCittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gw61uZGljZSIKKworIzogYnVpbHRpbi9hZGQuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAnJXMnIHBhcmEgZXNjcml0YS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjI0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgcGF0Y2giCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjI3Cittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGVkaXRhciBwYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIG9idGVyIHN0YXQgZGUgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyMzIKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIlBhdGNoIHZhemlvLiBBYm9ydGFkby4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYXBsaWNhciAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjI0NworbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiT3Mgc2VndWludGVzIGNhbWluaG9zIGVzdMOjbyBpZ25vcmFkb3MgcG9yIGFsZ3VtIGZpY2hlaXJvIC5naXRpZ25vcmU6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY2IGJ1aWx0aW4vY2xlYW4uYzo4NzYgYnVpbHRpbi9mZXRjaC5jOjExNSBidWlsdGluL212LmM6MTIzCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU1IGJ1aWx0aW4vcHVsbC5jOjE5OCBidWlsdGluL3B1c2guYzo1MjQKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyOCBidWlsdGluL3JtLmM6MjQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAic2ltdWxhciBhw6fDo28iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY5Cittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAic2VsZcOnw6NvIGludGVyYXRpdmEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjcwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc3IGJ1aWx0aW4vcmVzZXQuYzoyODYKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAic2VsZWNpb25hciBibG9jb3MgaW50ZXJhdGl2YW1lbnRlIgorCisjOiBidWlsdGluL2FkZC5jOjI3MQorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAiZWRpdGFyIG8gZGlmZiBhdHVhbCBlIGFwbGljw6EtbG8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjcyCittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJwZXJtaXRpciBhZGljaW9uYXIgZmljaGVpcm9zIGlnbm9yYWRvcyIKKworIzogYnVpbHRpbi9hZGQuYzoyNzMKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiYXR1YWxpemFyIGZpY2hlaXJvcyBjb250cm9sYWRvcyIKKworIzogYnVpbHRpbi9hZGQuYzoyNzQKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInJlZ2lzdGFyIGFwZW5hcyBvIGZhY3RvIGRlIHF1ZSBvIGNhbWluaG8gc2Vyw6EgYWRpY2lvbmFkbyBtYWlzIHRhcmRlIgorCisjOiBidWlsdGluL2FkZC5jOjI3NQorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorImFkaWNpb25hciBhbHRlcmHDp8O1ZXMgZGUgdG9kb3Mgb3MgZmljaGVpcm9zIGNvbnRyb2xhZG9zIG91IG7Do28gY29udHJvbGFkb3MiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc4Cittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmFyIGNhbWluaG9zIHJlbW92aWRvcyBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIChvIG1lc21vIHF1ZSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjgwCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJuw6NvIGFkaWNpb25hciwgYXBlbmFzIGF0dWFsaXphciBvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjgxCittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAiaWdub3JhciBmaWNoZWlyb3MgcXVlIG7Do28gcG9kZW0gc2VyIGFkaWNpb25hZG9zIHBvciBjYXVzYSBkZSBlcnJvcyIKKworIzogYnVpbHRpbi9hZGQuYzoyODIKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgInZlcmlmaWNhciBxdWFpcyBvcyBmaWNoZWlyb3MgaWdub3JhZG9zIG5hIHNpbXVsYcOnw6NvIgorCisjOiBidWlsdGluL2FkZC5jOjI4MyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1MQorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiKCsvLSl4IgorCisjOiBidWlsdGluL2FkZC5jOjI4MyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1MgorbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICJzdWJzdGl0dWlyIG8gYml0IGV4ZWN1dMOhdmVsIGRvcyBmaWNoZWlyb3MgbGlzdGFkb3MiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIlVzZSAtZiBzZSBkZXNlamEgbWVzbW8gYWRpY2lvbsOhLWxvcy5cbiIKKworIzogYnVpbHRpbi9hZGQuYzozMTIKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBhZGljaW9uYXIgZmljaGVpcm9zIgorCisjOiBidWlsdGluL2FkZC5jOjM0OAorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSBlIC11IHPDo28gbXV0dWFtZW50ZSBpbmNvbXBhdMOtdmVpcyIKKworIzogYnVpbHRpbi9hZGQuYzozNTUKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICJBIG9ww6fDo28gLS1pZ25vcmUtbWlzc2luZyBzw7MgcG9kZSBzZXIgdXNhZGEgZW0gY29uanVudG8gY29tIC0tZHJ5LXJ1biIKKworIzogYnVpbHRpbi9hZGQuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IgorbXNnc3RyICJvIHBhcsOibWV0cm8gJyVzJyBkZSAtLWNobW9kIHRlbSBkZSBzZXIgLXggb3UgK3giCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJOw6NvIGZvaSBlc3BlY2lmaWNhZG8gbmFkYSwgbmFkYSBhZGljaW9uYWRvLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiUXVlcmlhIGRpemVyICdnaXQgYWRkIC4nP1xuIgorCisjOiBidWlsdGluL2FkZC5jOjM4MCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MiBidWlsdGluL2NoZWNrb3V0LmM6Mjk4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDkxIGJ1aWx0aW4vY2xlYW4uYzo5MjAgYnVpbHRpbi9jb21taXQuYzozNTAKKyM6IGJ1aWx0aW4vbXYuYzoxNDMgYnVpbHRpbi9yZXNldC5jOjIzNSBidWlsdGluL3JtLmM6MjcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjQ0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJmaWNoZWlybyBkZSDDrW5kaWNlIGNvcnJvbXBpZG8iCisKKyM6IGJ1aWx0aW4vYW0uYzo0MTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gYXV0b3IgZG8gc2NyaXB0IgorCisjOiBidWlsdGluL2FtLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiclcycgZm9pIGVsaW1pbmFkbyBwZWxvIGhvb2sgYXBwbHlwYXRjaC1tc2ciCisKKyM6IGJ1aWx0aW4vYW0uYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJMaW5oYSBkZSBlbnRyYWRhIG1hbGZvcm1hZGE6ICclcycuIgorCisjOiBidWlsdGluL2FtLmM6NTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJGYWxoYSBhbyBjb3BpYXIgbm90YXMgZGUgJyVzJyBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo1OTUKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGludm9jYXIgZnNlZWsiCisKKyM6IGJ1aWx0aW4vYW0uYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIHBhdGNoICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo4NDAKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiU8OzIHBvZGUgc2VyIGFwbGljYWRhIHVtYSBzw6lyaWUgZGUgcGF0Y2hlcyBTdEdJVCBkdW1hIHPDsyB2ZXoiCisKKyM6IGJ1aWx0aW4vYW0uYzo4ODcKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiY2FyaW1ibyBkZSBkYXRhL2hvcmEgaW52w6FsaWRvIgorCisjOiBidWlsdGluL2FtLmM6ODkwIGJ1aWx0aW4vYW0uYzo4OTgKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAibGluaGEgZGUgRGF0YSBpbnbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vYW0uYzo4OTUKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAibXVkYW7Dp2EgZGUgZnVzbyBob3LDoXJpbyBpbnbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vYW0uYzo5ODQKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIkZhbGhhIGFvIGRldGV0YXIgbyBmb3JtYXRvIGRvIHBhdGNoLiIKKworIzogYnVpbHRpbi9hbS5jOjk4OSBidWlsdGluL2Nsb25lLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgImZhbGhhIGFvIGNyaWFyIG8gZGlyZXTDs3JpbyAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6OTkzCittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJGYWxoYSBhbyBkaXZpZGlyIHBhdGNoZXMuIgorCisjOiBidWlsdGluL2FtLmM6MTEyNSBidWlsdGluL2NvbW1pdC5jOjM3NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlc2NyZXZlciBvIGZpY2hlaXJvIGRlIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICJBcMOzcyByZXNvbHZlciBlc3RlIHByb2JsZW1hLCBleGVjdXRlIFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjExNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICJTZSBwcmVmZXJpciBpZ25vcmFyIGVzdGUgcGF0Y2gsIGV4ZWN1dGUgXCIlcyAtLXNraXBcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIlBhcmEgcmVzdGF1cmFyIG8gcmFtbyBvcmlnaW5hbCBlIGludGVycm9tcGVyIGEgYXBsaWNhw6fDo28gZG9zIHBhdGNoZXMsICIKKyJleGVjdXRlIFwiJXMgLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEzMTYKK21zZ2lkICJQYXRjaCBpcyBlbXB0eS4gV2FzIGl0IHNwbGl0IHdyb25nPyIKK21zZ3N0ciAiTyBwYXRjaCBlc3TDoSB2YXppby4gRm9pIGRpdmlkaWRvIGluY29ycmV0YW1lbnRlPyIKKworIzogYnVpbHRpbi9hbS5jOjEzOTAgYnVpbHRpbi9sb2cuYzoxNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgImxpbmhhIGRlIGlkZW50aWRhZGUgaW52w6FsaWRhOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjE0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gY29tbWl0ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTYxMAorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKyJPIHJlcG9zaXTDs3JpbyBuw6NvIHRlbSBvcyBibG9icyBuZWNlc3PDoXJpb3MgcGFyYSByZWNvcnJlciBhIGludGVncmHDp8OjbyBjb20gMyAiCisicG9udG9zLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MTIKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICJBIHVzYXIgaW5mb3JtYcOnw6NvIGRvIMOtbmRpY2UgcGFyYSByZWNvbnN0cnVpciB1bWEgw6Fydm9yZSBkZSBiYXNlLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTYzMQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyJFZGl0b3UgbyBwYXRjaCBtYW51YWxtZW50ZT9cbiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBhcGxpY8OhLWxvIGFvcyBibG9icyByZWdpc3RhZG9zIG5vIMOtbmRpY2UuIgorCisjOiBidWlsdGluL2FtLmM6MTYzNworbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiIgorIkEgcmVjb3JyZXIgYSB1bWEgZGUgYmFzZSBwYXJhIGFwbGljYcOnw6NvIGRlIHBhdGNoZXMgZSBpbnRlZ3Jhw6fDo28gY29tIDMgIgorInBvbnRvcy4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE2NjIKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICJGYWxoYSBhbyBpbnRlZ3JhciBhcyBhbHRlcmHDp8O1ZXMuIgorCisjOiBidWlsdGluL2FtLmM6MTY4NiBidWlsdGluL21lcmdlLmM6NjMxCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgZmFsaG91IGFvIGVzY3JldmVyIHVtYSDDoXJ2b3JlIgorCisjOiBidWlsdGluL2FtLmM6MTY5MworbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgImEgYXBsaWNhciBhIHVtIGhpc3TDs3JpY28gdmF6aW8iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzA2IGJ1aWx0aW4vY29tbWl0LmM6MTc2NCBidWlsdGluL21lcmdlLmM6ODAyCisjOiBidWlsdGluL21lcmdlLmM6ODI3Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgImZhbGhhIGFvIGVzY3JldmVyIG9iamV0byBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzM5IGJ1aWx0aW4vYW0uYzoxNzQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgY29udGludWFyOiAlcyBuw6NvIGV4aXN0ZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzU5Cittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisibsOjbyDDqSBwb3Nzw612ZWwgZW50cmFyIGVtIG1vZG8gaW50ZXJhdGl2byBzZW0gdW0gZW50cmFkYSBwYWRyw6NvIGNvbmVjdGFkYSBhICIKKyJ1bSB0ZXJtaW5hbC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY0Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJDb3JwbyBkbyBjb21taXQ6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTc3NAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIkFwbGljYXI/IFt5XXNpbS9bbl3Do28vW2VdZGl0YXIvW3ZdZXIgcGF0Y2gvW2FdY2VpdGFyIHRvZG9zOiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiw41uZGljZSBtb2RpZmljYWRvOiBuw6NvIMOpIHBvc3PDrXZlbCBhcGxpY2FyIHBhdGNoZXMgKG1vZGlmaWNhZG86ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE4NjEgYnVpbHRpbi9hbS5jOjE5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIkEgYXBsaWNhcjogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE4NzcKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIk5lbmh1bWEgYWx0ZXJhw6fDo28gLS0gSsOhIGZvaSBhcGxpY2FkbyBvIHBhdGNoLiIKKworIzogYnVpbHRpbi9hbS5jOjE4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIkZhbGhhIGFvIGFwbGljYXIgbyBwYXRjaCBlbSAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29weSBvZiB0aGUgcGF0Y2ggdGhhdCBmYWlsZWQgaXMgZm91bmQgaW46ICVzIgorbXNnc3RyICJBIGPDs3BpYSBkbyBwYXRjaCBxdWUgZmFsaG91IGVuY29udHJhLXNlIGVtOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjE5MzYKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyJTZW0gYWx0ZXJhw6fDtWVzIC0gZXNxdWVjZXUtc2UgZGUgdXNhciAnZ2l0IGFkZCc/XG4iCisiU2UgbsOjbyBow6EgbmFkYSBwb3IgcHJlcGFyYXIsIHByb3ZhdmVsbWVudGUgZXNzYXMgbWVzbWFzIGFsdGVyYcOnw7Vlc1xuIgorImrDoSBmb3JhbSBpbnRyb2R1emlkYXM7IHBvZGUgcXVlcmVyIGlnbm9yYXIgZXN0ZSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTQzCittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiRGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz8iCittc2dzdHIgIiIKKyJBaW5kYSBow6EgY2FtaW5ob3MgbsOjbyBpbnRlZ3JhZG9zIG5vIMOtbmRpY2UuXG4iCisiRXNxdWVjZXUtc2UgZGUgdXNhciAnZ2l0IGFkZCc/IgorCisjOiBidWlsdGluL2FtLmM6MjA1MSBidWlsdGluL2FtLmM6MjA1NSBidWlsdGluL2FtLmM6MjA2NyBidWlsdGluL3Jlc2V0LmM6MzA4CisjOiBidWlsdGluL3Jlc2V0LmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIG9iamV0byAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjIxMDMKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgImZhbGhhIGFvIGxpbXBhciBvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTM3Cittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJQYXJlY2UgcXVlIGEgSEVBRCBmb2kgbW92aWRhIGRlc2RlIGEgw7psdGltYSB2ZXogcXVlIG8gJ2FtJyBmYWxob3UuXG4iCisiTsOjbyByZWN1YW5kbyBhIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJWYWxvciBpbnbDoWxpZG8gZGUgLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjIzMworbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzxvcMOnw7Vlcz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM0Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPG9ww6fDtWVzPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKKworIzogYnVpbHRpbi9hbS5jOjIyNDAKK21zZ2lkICJydW4gaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAiZXhlY3V0YXIgaW50ZXJhdGl2YW1lbnRlIgorCisjOiBidWlsdGluL2FtLmM6MjI0MgorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJvcMOnw6NvIGhpc3TDs3JpY2EgLS0gc2VtLWHDp8OjbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDQKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAicGVybWl0aXIgcmVjb3JyZXIgYSBpbnRlZ3Jhw6fDo28gY29tIDMgcG9udG9zIHNlIG5lY2Vzc8OhcmlvIgorCisjOiBidWlsdGluL2FtLmM6MjI0NSBidWlsdGluL2luaXQtZGIuYzo0ODMgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NworIzogYnVpbHRpbi9yZXBhY2suYzoxNzgKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAic2lsZW5jaW9zbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDcKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJhZGljaW9uYXIgdW1hIGxpbmhhIGNvbSBTaWduZWQtb2YtYnkgbm8gZmltIGRhIG1lbnNhZ2VtIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9hbS5jOjIyNTAKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAicmVjb2RpZmljYXIgZW0gdXRmOCAocHJlZGVmaW5pw6fDo28pIgorCisjOiBidWlsdGluL2FtLmM6MjI1MgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhciBhIG9ww6fDo28gLWsgYW8gZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjI1NAorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhciBhIG9ww6fDo28gLWIgYW8gZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjI1NgorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NhciBhIG9ww6fDo28gLW0gYW8gZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjI1OAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgInBhc3NhciBhIG9ww6fDo28gLS1rZWVwLWNyIGFvIGdpdG1haWxzcGxpdCBwYXJhIGZvcm1hdG8gZGUgbWJveCIKKworIzogYnVpbHRpbi9hbS5jOjIyNjEKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAiIgorIm7Do28gcGFzc2FyIGEgb3DDp8OjbyAtLWtlZXAtY3IgYW8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudGVtZW50ZSBkZSBhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjY0Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICJyZXRpcmFyIHRvZG8gbyBjb250ZcO6ZG8gYW50ZXMgZGEgbGluaGEgZGUgdGVzb3VyYSIKKworIzogYnVpbHRpbi9hbS5jOjIyNjYgYnVpbHRpbi9hbS5jOjIyNjkgYnVpbHRpbi9hbS5jOjIyNzIgYnVpbHRpbi9hbS5jOjIyNzUKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4IGJ1aWx0aW4vYW0uYzoyMjgxIGJ1aWx0aW4vYW0uYzoyMjg0IGJ1aWx0aW4vYW0uYzoyMjg3CisjOiBidWlsdGluL2FtLmM6MjI5MworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgInRyYW5zbWl0aXIgYW8gZ2l0LWFwcGx5IgorCisjOiBidWlsdGluL2FtLmM6MjI4MyBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjIgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjY1CisjOiBidWlsdGluL2dyZXAuYzoxMDQ1IGJ1aWx0aW4vbWVyZ2UuYzoyMDEgYnVpbHRpbi9wdWxsLmM6MTM1CisjOiBidWlsdGluL3B1bGwuYzoxOTQgYnVpbHRpbi9yZXBhY2suYzoxODcgYnVpbHRpbi9yZXBhY2suYzoxOTEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2MzcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OSBidWlsdGluL3RhZy5jOjM5OAorIzogcGFyc2Utb3B0aW9ucy5oOjEzMiBwYXJzZS1vcHRpb25zLmg6MTM0IHBhcnNlLW9wdGlvbnMuaDoyNDUKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI4OSBidWlsdGluL2JyYW5jaC5jOjU5MiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3CisjOiBidWlsdGluL3JlcGxhY2UuYzo0NDIgYnVpbHRpbi90YWcuYzo0MzMgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgImZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkwCittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICJmb3JtYXRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIHBhdGNoZXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJzdWJzdGl0dWlyIGEgbWVuc2FnZW0gZGUgZXJybyBxdWFuZG8gYSBhcGxpY2HDp8OjbyBkbyBwYXRjaCBmYWxoYSIKKworIzogYnVpbHRpbi9hbS5jOjIyOTgKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICJjb250aW51YXIgYSBhcGxpY2FyIG9zIHBhdGNoZXMgZGVwb2lzIGRlIHJlc29sdmVyIG9zIGNvbmZsaXRvcyIKKworIzogYnVpbHRpbi9hbS5jOjIzMDEKK21zZ2lkICJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIKK21zZ3N0ciAic2luw7NuaW1vIGRlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA0Cittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiaWdub3JhciBvIHBhdGNoIGF0dWFsIgorCisjOiBidWlsdGluL2FtLmM6MjMwNworbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgInJlc3RhdXJhciBvIHJhbW8gb3JpZ2luYWwgZSBhYm9ydGFyIGEgb3BlcmHDp8OjbyBkZSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzExCittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICJtZW50aXIgc29icmUgYSBkYXRhIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9hbS5jOjIzMTMKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICJ1c2FyIGEgZGF0YSBlIGhvcmEgYXR1YWwgY29tbyBkYXRhIGRlIGF1dG9yIgorCisjOiBidWlsdGluL2FtLmM6MjMxNSBidWlsdGluL2NvbW1pdC5jOjE2MDAgYnVpbHRpbi9tZXJnZS5jOjIzMgorIzogYnVpbHRpbi9wdWxsLmM6MTY1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExIGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAia2V5LWlkIgorbXNnc3RyICJpZC1jaGF2ZSIKKworIzogYnVpbHRpbi9hbS5jOjIzMTYKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICJhc3NpbmFyIG9zIGNvbW1pdHMgY29tIEdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIzMTkKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKHVzbyBpbnRlcm5vIGRlIGdpdC1yZWJhc2UpIgorCisjOiBidWlsdGluL2FtLmM6MjMzNAorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIkEgb3DDp8OjbyAtYi8tLWJpbmFyeSBow6EgbXVpdG8gcXVlIMOpIGlnbm9yYWRhIGUgc2Vyw6FcbiIKKyJmdXR1cmFtZW50ZSByZW1vdmlkYS4gUG9yIGZhdm9yIG7Do28gYSB1c2UuIgorCisjOiBidWlsdGluL2FtLmM6MjM0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZmFsaGEgYW8gbGVyIG8gw61uZGljZSIKKworIzogYnVpbHRpbi9hbS5jOjIzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisibyBkaXJldMOzcmlvIGRlIHJlYmVzYSBhbnRlcmlvciAlcyBhaW5kYSBleGlzdGUsIG1hcyBmb2kgZm9ybmVjaWRhIHVtYSBtYm94LiIKKworIzogYnVpbHRpbi9hbS5jOjIzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKyJEaXJldMOzcmlvIGFiYW5kb25hZG8gJXMgZW5jb250cmFkby5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHBhcmEgbyByZW1vdmVyLiIKKworIzogYnVpbHRpbi9hbS5jOjIzODYKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICJBIG9wZXJhw6fDo28gZGUgcmVzb2x1w6fDo28gbsOjbyBlc3TDoSBlbSBjdXJzbywgbsOjbyByZXRvbWFuZG8uIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPG9ww6fDtWVzPl0gWzxwYXRjaD4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgbyBmaWNoZWlybyBkZSBhcnF1aXZvICclcyciCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHJlZGlyZWNpb25hciBhIHNhw61kYSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogUmVtb3RvIHNlbSBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgImdpdCBhcmNoaXZlOiBlc3BlcmF2YS1zZSBBQ0svTkFLLCBvYnRldmUtc2UgRU9GIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgImVycm8gcmVtb3RvOiAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBlcnJvIGRlIHByb3RvY29sbyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGVzdmF6aWFtZW50byBkZSBjYWNoZSAoZmx1c2gpIGVzcGVyYWRvIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICJleGVjdXRhciAnZ2l0IGJpc2VjdCBuZXh0JyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE5Cittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiYXR1YWxpemFyIEJJU0VDVF9IRUFEIGVtIHZleiBkZSBleHRyYWlyIG8gY29tbWl0IGF0dWFsIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzMKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPG9ww6fDtWVzPl0gWzxyZXYtb3DDp8O1ZXM+XSBbPHJldj5dIFstLV0gPGZpY2hlaXJvPiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjM4Cittc2dpZCAiPHJldi1vcHRzPiBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgIjxyZXYtb3DDp8O1ZXM+IGVzdMOjbyBkb2N1bWVudGFkYXMgZW0gZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTc3NworbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIkxpbmhhcyBkZSBjdWxwYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1NzMKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICIiCisiTW9zdHJhciBlbnRyYWRhcyBkZSBjdWxwYSDDoCBtZWRpZGEgcXVlIGZvcmVtIGVuY29udHJhZGFzLCBpbmNyZW1lbnRhbG1lbnRlIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU3NAorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RhciBTSEEtMSBkb3MgY29tbWl0cyBsaW1pdGUgZW0gYnJhbmNvIChQcmVkZWZpbmnDp8OjbzogZGVzYXRpdmFkbykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTc1Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJOw6NvIHRyYXRhciBvcyBjb21taXRzIHJhaXogY29tbyBsaW1pdGVzIChQcmVkZWZpbmnDp8OjbzogZGVzYXRpdmFkbykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTc2Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiTW9zdHJhciBlc3RhdMOtc3RpY2FzIGRlIGN1c3RvIGRlIGF0aXZpZGFkZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1NzcKK21zZ2lkICJGb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIkZvcsOnYXIgaW5mb3JtYcOnw6NvIGRlIHByb2dyZXNzbyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1NzgKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiTW9zdHJhciBhIHBvbnR1YcOnw6NvIGRhcyBlbnRyYWRhcyBkZSBjdWxwYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1NzkKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiTW9zdHJhciBvIG5vbWUgZG8gZmljaGVpcm8gb3JpZ2luYWwgKFByZWRlZmluacOnw6NvOiBhdXRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1ODAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYXIgbsO6bWVyb3MgZGUgbGluaGEgb3JpZ2luYWlzIChQcmVkZWZpbmnDp8OjbzogZGVzYXRpdmFkbykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTgxCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiTW9zdHJhciBlbSBmb3JtYXRvIHByw7NwcmlvIHBhcmEgc2VyIGNvbnN1bW8gcG9yIHVtYSBtw6FxdWluYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1ODIKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIk1vc3RyYXIgZW0gZm9ybWF0byBkZSBwb3JjZWxhbmEgY29tIGluZm9ybWHDp8O1ZXMgZGUgY29tbWl0IHBvciBsaW5oYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1ODMKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJVc2FyIG8gbWVzbW8gbW9kbyBkZSBzYcOtZGEgcXVlIGdpdC1hbm5vdGF0ZSAoUHJlZGVmaW5pw6fDo286IGRlc2F0aXZhZG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU4NAorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9zdHJhciBjYXJpbWJvIGRlIGRhdGEvaG9yYSBlbSBicnV0byAoUHJlZGVmaW5pw6fDo286IGRlc2F0aXZhZG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU4NQorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTW9zdHJhciBTSEExIGxvbmdvIGRlIGNvbW1pdCAoUHJlZGVmaW5pw6fDo286IGRlc2F0aXZhZG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU4NgorbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJTdXByaW1pciBub21lIGRlIGF1dG9yIGUgY2FyaW1ibyBkZSBkYXRhL2hvcmEgKFByZWRlZmluacOnw6NvOiBkZXNhdGl2YWRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1ODcKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYXIgbyBlbWFpbCBkbyBhdXRvciBlbSB2ZXogZG8gbm9tZSAoUHJlZGVmaW5pw6fDo286IGRlc2F0aXZhZG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU4OAorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICJJZ25vcmFyIGFzIGRpZmVyZW7Dp2FzIGRlIGVzcGHDp28gZW0gYnJhbmNvIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU5NQorbXNnaWQgIlVzZSBhbiBleHBlcmltZW50YWwgaGV1cmlzdGljIHRvIGltcHJvdmUgZGlmZnMiCittc2dzdHIgIlVzYXIgdW0gaGV1csOtc3RpY2EgZXhwZXJpbWVudGFsIHBhcmEgbWVsaG9yYXIgZGlmZnMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTk3Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICJEZXNwZW5kZXIgY2ljbG9zIGV4dHJhIHBhcmEgZW5jb250cmFyIHVtYSBtZWxob3IgY29ycmVzcG9uZMOqbmNpYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1OTgKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIlVzYXIgcmV2aXPDtWVzIGRvIDxmaWNoZWlybz4gZW0gdmV6IGRlIGludm9jYXIgZ2l0LXJldi1saXN0IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjU5OQorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIlVzYXIgbyBjb250ZcO6ZG8gZG8gPGZpY2hlaXJvPiBjb21vIGltYWdlbSBmaW5hbCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI2MDAgYnVpbHRpbi9ibGFtZS5jOjI2MDEKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAicG9udHVhw6fDo28iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNjAwCittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiTG9jYWxpemFyIGxpbmhhcyBjb3BpYWRhcyBkZW50cm8gZSBlbnRyZSBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNjAxCittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiTG9jYWxpemFyIGxpbmhhcyBtb3ZpZGFzIGRlbnRybyBlIGVudHJlIGZpY2hlaXJvcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI2MDIKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI2MDIKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiUHJvY2Vzc2FyIGFwZW5hcyBvIGludGVydmFsbyBkZSBsaW5oYXMgbixtLCBhIGNhbnRhciBkZSAxIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjY0OQorbXNnaWQgIi0tcHJvZ3Jlc3MgY2FuJ3QgYmUgdXNlZCB3aXRoIC0taW5jcmVtZW50YWwgb3IgcG9yY2VsYWluIGZvcm1hdHMiCittc2dzdHIgIiIKKyItLXByb2dyZXNzIG7Do28gcG9kZSBzZXIgdXNhZG8gY29tIC0taW5jcmVtZW50YWwgb3UgZm9ybWF0b3MgZGUgcG9yY2VsYW5hIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZSBtYXhpbXVtCisjLiBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbiAiZ2l0IGJsYW1lIgorIy4gb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIsIHdoaWNoCisjLiB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0IGFtb25nIHZhcmlvdXMgZm9ybXMgb2YKKyMuIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dCB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IKKyMuIGZld2VyIGRpc3BsYXkgY29sdW1ucy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNjk3Cittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiaMOhIDQgYW5vcyBlIDExIG1lc2VzIGF0csOhcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI3NzcKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIGUgLS1yZXZlcnNlIG7Do28gc2UgbWlzdHVyYW0gYmVtLiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI3OTcKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHVzYXIgLS1jb250ZW50cyBjb20gbm9tZSBkZSBvYmpldG8gY29tbWl0IGZpbmFsIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjgwMgorbXNnaWQgIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIKK21zZ3N0ciAiIgorIi0tcmV2ZXJzZSBlIC0tZmlyc3QtcGFyZW50IGp1bnRvcyByZXF1ZXIgcXVlIHNlIGVzcGVjaWZpcXVlIG8gw7psdGltbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyODI5Cittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCBqdW50b3MgcmVxdWVyIGludGVydmFsbyBhbyBsb25nbyBkbyBwcmltZWlyby1wYWkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyODQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAibyBjYW1pbmhvICVzIG7Do28gZXhpc3RlIGVtICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6Mjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgbyBibG9iICVzIGRvIGNhbWluaG8gJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyODcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmUiCittc2dpZF9wbHVyYWwgImZpbGUgJXMgaGFzIG9ubHkgJWx1IGxpbmVzIgorbXNnc3RyWzBdICJvIGZpY2hlaXJvICVzIHPDsyB0ZW0gJWx1IGxpbmhhIgorbXNnc3RyWzFdICJvIGZpY2hlaXJvICVzIHPDsyB0ZW0gJWx1IGxpbmhhcyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9ww6fDtWVzPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3DDp8O1ZXM+XSBbLWxdIFstZl0gPG5vbWUtcmFtbz4gWzxwb250by1kZS1wYXJ0aWRhPl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjgKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcMOnw7Vlcz5dIFstcl0gKC1kIHwgLUQpIDxub21lLWRvLXJhbW8+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI5Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3DDp8O1ZXM+XSAoLW0gfCAtTSkgWzxyYW1vLWFudGlnbz5dIDxub3ZvLXJhbW8+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMwCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9ww6fDtWVzPl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzEKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3DDp8O1ZXM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisiYSBlbGltaW5hciBvIHJhbW8gJyVzJyBpbnRlZ3JhZG8gZW1cbiIKKyIgICAgICAgICAnJXMnLCBtYXMgYWluZGEgbsOjbyBpbnRlZ3JhZG8gZW0gSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorInJhbW8gJyVzJyBuw6NvIGVsaW1pbmFkbywgdmlzdG8gcXVlIGFpbmRhIG7Do28gZm9pIGludGVncmFkbyBlbVxuIgorIiAgICAgICAgICclcycsIGFwZXNhciBkZSBqw6EgdGVyIHNpZG8gaW50ZWdyYWRvIGVtIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBwZXNxdWlzYXIgcGVsbyBvYmpldG8gY29tbWl0IGRlICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIk8gcmFtbyAnJXMnIG7Do28gZm9pIHRvdGFsbWVudGUgaW50ZWdyYWRvLlxuIgorIlNlIHRlbSBhIGNlcnRlemEgcXVlIG8gcXVlciBlbGltaW5hciwgZXhlY3V0ZSAnZ2l0IGJyYW5jaCAtRCAlcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkZhbGhhIGFvIGF0dWFsaXphciBvIGZpY2hlaXJvIGRlIGNvbmZpZ3VyYcOnw6NvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMAorbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgdXNhciAtYSBjb20gLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcGVzcXVpc2FyIHBlbG8gb2JqZXRvIGNvbW1pdCBkZSBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVsaW1pbmFyIG8gcmFtbyAnJXMnIGV4dHJhw61kbyBlbSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAicmFtbyBkZSBtb25pdG9yaXphw6fDo28gcmVtb3RvICclcycgbsOjbyBlbmNvbnRyYWRvLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAicmFtbyAnJXMnIG7Do28gZW5jb250cmFkby4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJybyBhIGVsaW1pbmFyIG8gcmFtbyBkZSBtb25pdG9yaXphw6fDo28gcmVtb3RvICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvIGEgZWxpbWluYXIgcmFtbyAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIlJhbW8gZGUgbW9uaXRvcml6YcOnw6NvIHJlbW90byAlcyBlbGltaW5hZG8gKGVyYSAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJSYW1vICVzIGVsaW1pbmFkbyAoZXJhICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIHJlYmFzZWQgYXQgJXMiCittc2dzdHIgIk8gcmFtbyAlcyBlc3TDoSBhIHNlciByZWJhc2VhZG8gZW0gJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyBiaXNlY3RlZCBhdCAlcyIKK21zZ3N0ciAiTyByYW1vICVzIGVzdMOhIGEgc2VyIGJpc3NldGFkbyBlbSAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjAKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorIm7Do28gw6kgcG9zc8OtdmVsIG11ZGFyIG8gbm9tZSBkbyByYW1vIGF0dWFsIHZpc3RhIHF1ZSBuw6NvIHNlIGVuY29udHJhIG51bSByYW1vLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiTm9tZSBkZSByYW1vIGludsOhbGlkbzogJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODcKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAiRmFsaGEgYW8gbXVkYXIgbyBub21lIGRvIHJhbW8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJPIHJhbW8gaW5jb3JyZXRhbWVudGUgZGVub21pbmFkbyAnJXMnIG11ZG91IGRlIG5vbWUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIk8gbm9tZSBkbyByYW1vIG11ZG91IHBhcmEgJXMsIG1hcyBhIEhFQUQgbsOjbyBlc3TDoSBhdHVhbGl6YWRhISIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDIKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJPIHJhbW8gbXVkb3UgZGUgbm9tZSwgbWFzIGEgYXR1YWxpemHDp8OjbyBkbyBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbyBmYWxob3UiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iCittc2dzdHIgIiIKKyJFZGl0ZSBhIGRlc2NyacOnw6NvIGRvIHJhbW86XG4iCisiICAlc1xuIgorIkxpbmhhIGNvbWXDp2FkYXMgY29tICclYycgc2Vyw6NvIGlnbm9yYWRhcy5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTEKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGdlbsOpcmljYXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUzCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgImFwcmVzZW50YXIgaGFzaCBlIGFzc3VudG8sIGR1cGxpcXVlIHBhcmEgcmFtb3MgYSBtb250YW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTQKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICJzdXByaW1pciBtZW5zYWdlbnMgaW5mb3JtYXRpdmFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1NQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJjb25maWd1cmFyIG1vZG8gZGUgc2VndWltZW50byAoY29uc3VsdGUgZ2l0LXB1bGwoMSkpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1NworbXNnaWQgImNoYW5nZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJhbHRlcmFyIGEgaW5mb3JtYcOnw6NvIGRvIHJhbW8gYSBtb250YW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTkKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAiYSBtb250YW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NTkKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgImFsdGVyYXIgYSBpbmZvcm1hw6fDo28gZG8gcmFtbyBhIG1vbnRhbnRlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2MAorbXNnaWQgIlVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJSZW1vdmVyIGEgaW5mb3JtYcOnw6NvIGRvIHJhbW8gYSBtb250YW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjEKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgInVzYXIgc2HDrWRhIGNvbG9yaWRhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2MgorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgImF0dWFyIHNvYnJlIHJhbW9zIGRlIG1vbml0b3JpemHDp8OjbyByZW1vdG9zIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NCBidWlsdGluL2JyYW5jaC5jOjU2NgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyByYW1vcyBxdWUgY29udGVuaGFtIG8gY29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU2NSBidWlsdGluL2JyYW5jaC5jOjU2NworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyByYW1vcyBxdWUgbsOjbyBjb250ZW5oYW0gbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTcwCittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAiQcOnw7VlcyBlc3BlY8OtZmljYXMgZG8gZ2l0LWJyYW5jaDoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTcxCittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgImxpc3RhciByYW1vcyBkZSBtb25pdG9yaXphw6fDo28gcmVtb3RvcyBlIHJhbW9zIGxvY2FpcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NzMKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAiZWxpbWluYXIgdW0gcmFtbyB0b3RhbG1lbnRlIGludGVncmFkbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NzQKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICJlbGltaW5hciB1bSByYW1vIChtZXNtbyBxdWUgbsOjbyB0ZW5oYSBzaWRvIGludGVncmFkbykiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTc1Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIm1vdmVyIG91IG11ZGFyIG8gbm9tZSBkZSB1bSByYW1vIGUgbyBzZXUgcmVmbG9nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU3NgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIm1vdmVyIG91IG11ZGFyIG8gbm9tZSBkZSB1bSByYW1vLCBtZXNtbyBxdWUgbyBkZXN0aW5vIGrDoSBleGlzdGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTc3Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgImxpc3RhciBvcyBub21lcyBkb3MgcmFtb3MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTc4Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgImNyaWFyIHJlZmxvZyBkbyByYW1vIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICJlZGl0YXIgYSBkZXNjcmnDp8OjbyBkbyByYW1vIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgImZvcsOnYXIgY3JpYcOnw6NvLCBtb3Zlci9tdWRhciBvIG5vbWUgb3UgZXhjbHVzw6NvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgb3MgcmFtb3MgcXVlIGZvcmFtIGludGVncmFkb3MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTgzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgb3MgcmFtb3MgcXVlIG7Do28gZm9yYW0gaW50ZWdyYWRvcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgImxpc3RhciBvcyByYW1vcyBlbSBjb2x1bmFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4IGJ1aWx0aW4vdGFnLmM6NDI2Cittc2dpZCAia2V5IgorbXNnc3RyICJjaGF2ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODYgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQyNworbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAibm9tZSBkbyBjYW1wbyBwZWxvIHF1YWwgb3JkZXJuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg4IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDEgYnVpbHRpbi9ub3Rlcy5jOjQwNAorIzogYnVpbHRpbi9ub3Rlcy5jOjQwNyBidWlsdGluL25vdGVzLmM6NTY3IGJ1aWx0aW4vbm90ZXMuYzo1NzAKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAib2JqZWN0IgorbXNnc3RyICJvYmpldG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg5Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgb3MgcmFtb3MgZG8gb2JqZXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3IGJ1aWx0aW4vdGFnLmM6NDM0Cittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICJvcmRlbmFyIGUgZmlsdHJhciBzw6NvIGluc2Vuc8OtdmVpcyBhIG1hacO6c2N1bGFzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5MiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3IGJ1aWx0aW4vdGFnLmM6NDMzCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgImZvcm1hdG8gYSB1c2FyIG5hIHNhw61kYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTEKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiRmFsaGEgYW8gcmVzb2x2ZXIgSEVBRCBudW1hIHJlZmVyw6puY2lhIHbDoWxpZGEuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxNSBidWlsdGluL2Nsb25lLmM6NzI0Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIkhFQUQgbsOjbyBlbmNvbnRyYWRhIGVtIHJlZnMvaGVhZHMhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZSAtLXZlcmJvc2Ugc8OjbyBpbmNvbXBhdMOtdmVpcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDkgYnVpbHRpbi9icmFuY2guYzo3MDEKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAibm9tZSBkbyByYW1vIMOpIG9icmlnYXTDs3JpbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NzcKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBhdHJpYnVpciBkZXNjcmnDp8OjbyBhIEhFQUQgZGVzdGFjYWRhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY4MgorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlZGl0YXIgYSBkZXNjcmnDp8OjbyBkZSBtYWlzIGRvIHF1ZSB1bSByYW1vIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAiQWluZGEgbsOjbyBow6EgY29tbWl0cyBubyByYW1vICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIk7Do28gaMOhIG5lbmh1bSByYW1vIGRlbm9taW5hZG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA3Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAiZGVtYXNpYWRvcyByYW1vcyBwYXJhIHVtYSBvcGVyYcOnw6NvIGRlIG11ZGFuw6dhIGRlIG5vbWUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzEyCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiZGVtYXNpYWRvcyByYW1vcyBwYXJhIGRlZmluaXIgbm92byByYW1vIGEgbW9udGFudGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorIm7Do28gZm9pIHBvc3PDrXZlbCBkZWZpbmlyICVzIGNvbW8gcmFtbyBhIG1vbnRhbnRlIGRlIEhFQUQgdmlzdG8gcXVlIGVzdGEgbsOjbyAiCisiYXBvbnRhIHBhcmEgdW0gcmFtby4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzE5IGJ1aWx0aW4vYnJhbmNoLmM6NzQxIGJ1aWx0aW4vYnJhbmNoLmM6NzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgIm8gcmFtbyAnJXMnIG7Do28gZXhpc3RlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibyByYW1vICclcycgbsOjbyBleGlzdGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzM1Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgImRlbWFzaWFkb3MgcmFtb3MgcGFyYSByZW1vdmVyIGEgZGVmaW5pw6fDo28gZGUgcmFtbyBhIG1vbnRhbnRlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczOQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyJuw6NvIGZvaSBwb3Nzw612ZWwgcmVtb3ZlciBhIGRlZmluacOnw6NvIGRlIHJhbW8gYSBtb250YW50ZSBkZSBIRUFEIHZpc3RvIHF1ZSAiCisiZXN0YSBuw6NvIGFwb250YSBwYXJhIHVtIHJhbW8uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIk8gcmFtbyAnJXMnIG7Do28gdGVtIGluZm9ybWHDp8OjbyBzb2JyZSBvIHJhbW8gYSBtb250YW50ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTkKK21zZ2lkICJpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNyZWF0ZSAnSEVBRCcgbWFudWFsbHkiCittc2dzdHIgIm7Do28gZmF6IHNlbnRpZG8gY3JpYXIgJ0hFQUQnIG1hbnVhbG1lbnRlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2NQorbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKyJhcyBvcMOnw7VlcyAtYSBlIC1yIGRlICdnaXQgYnJhbmNoJyBuw6NvIGZhemVtIHNlbnRpZG8gY29tIHVtIG5vbWUgZGUgcmFtbyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtLXNldC11cHN0cmVhbSBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gQ29uc2lkZXIgdXNpbmcgLS0iCisidHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG9cbiIKK21zZ3N0ciAiIgorIkEgb3DDp8OjbyAtLXNldC11cHN0cmVhbSDDqSBvYnNvbGV0YSBlIHNlcsOhIHJlbW92aWRhLiBDb25zaWRlcmUgbyB1c28gZGUgLS0iCisidHJhY2sgb3UgLS1zZXQtdXBzdHJlYW0tdG9cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZSBxdWVyIHF1ZSAnJXMnIHNpZ2EgJyVzJywgZmHDp2E6XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyBlc3TDoSBjb3JyZXRvXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTgKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICLDiSBuZWNlc3PDoXJpbyB1bSByZXBvc2l0w7NyaW8gcGFyYSBjcmlhciB1bSBidW5kbGUuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjYyCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICLDiSBwcmVjaXNvIHVtIHJlcG9zaXTDs3JpbyBwYXJhIGRlc2VtcGFjb3Rhci4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1MTMKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPHR5cGU+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08cGF0aD5dIDxvYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPHRpcG8+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08Y2FtaW5obz5dIDxvYmpldG8+IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTE0Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAtLSIKKyJmaWx0ZXJzXSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU1MQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPHRpcG8+IHBvZGUgc2VyIHVtIGRlOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU1MgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIm1vc3RyYXIgdGlwbyBkbyBvYmpldG8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NTMKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJtb3N0cmFyIHRhbWFuaG8gZG8gb2JqZXRvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTU1Cittc2dpZCAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIgorbXNnc3RyICJzYWlyIGNvbSByZXRvcm5vIHplcm8gcXVhbmRvIG7Do28gaG91dmVyIGVycm9zIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTU2Cittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIm1vc3RyYXIgY29udGXDumRvIGRvIG9iamV0byBjb20gaW1wcmVzc8OjbyBib25pdGEiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NTgKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZXhlY3V0YXIgdGV4dGNvbnYgbm8gY29udGXDumRvIGRlIG9iamV0b3MgYmxvYiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU2MAorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biBmaWx0ZXJzIG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInBhcmEgb2JqZXRvcyBibG9iLCBjb3JyZXIgZmlsdHJvcyBzb2JyZSBvIGNvbnRlw7pkbyBkbyBvYmpldG8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NjEgZ2l0LXN1Ym1vZHVsZS5zaDo5NDMKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTYyCittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgInVzYXIgdW0gY2FtaW5obyBlc3BlY8OtZmljbyBwYXJhIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTY0Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICJwZXJtaXRpciBxdWUgLXMgZSAtdCBmdW5jaW9uZW0gY29tIG9iamV0b3MgZGFuaWZpY2Fkb3MvY29ycm9tcGlkb3MiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NjUKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgImNhcnJlZ2FyIGEgc2HDrWRhIGRlIC0tYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NjcKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm1vc3RyYXIgaW5mb3JtYcOnw6NvIGUgY29udGXDumRvIGRvcyBvYmpldG9zIGZvcm5lY2lkb3MgbmEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTcwCittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJtb3N0cmFyIGluZm9ybWHDp8OjbyBzb2JyZSBvcyBvYmpldG9zIGZvcm5lY2lkb3MgbmEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTczCittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisic2VndWlyIGxpZ2HDp8O1ZXMgc2ltYsOzbGljYSBubyBpbnRlcmlvciBkYSDDoXJ2b3JlICh1c2FkbyBjb20gLS1iYXRjaCBvdSAtLSIKKyJiYXRjaC1jaGVjaykiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1NzUKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICJtb3N0cmFyIHRvZG9zIG9zIG9iamV0b3MgY29tIC0tYmF0Y2ggb3UgLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHJpYnV0bz4uLi5dIFstLV0gPGNhbWluaG8+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMgorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHJpYnV0bz4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxOQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiYXByZXNlbnRhciB0b2RvcyBvcyBhdHJpYnV0b3MgZGVmaW5pZG9zIG5vIGZpY2hlaXJvIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMAorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJ1c2FyIC5naXRhdHRyaWJ1dGVzIGFwZW5hcyBhIHBhcnRpciBkbyDDrW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsZXIgb3Mgbm9tZXMgZG9zIGZpY2hlaXJvcyBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjQKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAidGVybWluYXIgcmVnaXN0b3MgZGEgZW50cmFkYSBlIGRhIHNhw61kYSBjb20gdW0gY2Fyw6FjdGVyIE5VTCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOCBidWlsdGluL2NoZWNrb3V0LmM6MTE1OCBidWlsdGluL2djLmM6MzUyCittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJzdXByaW1pciBpbmZvcm1hw6fDo28gZGUgcHJvZ3Jlc3NvIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgIm1vc3RyYXIgY2FtaW5ob3MgZGUgZW50cmFkYSBzZW0gY29ycmVzcG9uZMOqbmNpYSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOAorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICJpZ25vcmFyIG8gw61uZGljZSBhbyB2ZXJpZmljYXIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU0Cittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZXNwZWNpZmljYXIgY2FtaW5ob3MgY29tIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU3Cittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IHPDsyBmYXogc2VudGlkbyBjb20gLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTkKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAibmVuaHVtIGNhbWluaG8gZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IHPDsyDDqSB2w6FsaWRvIGNvbSB1bSDDum5pY28gY2FtaW5obyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjUKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgdXNhciAtLXF1aWV0IGUgLS12ZXJib3NlIHNpbXVsdGFuZWFtZW50ZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyBzw7Mgw6kgdsOhbGlkbyBjb20gLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo4Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPG9ww6fDtWVzPl0gPGNvbnRhY3RvPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTMKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAidGFtYsOpbSBsZXIgY29udGFjdG9zIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhbmFsaXNhciBvIGNvbnRhY3RvOiAlcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDcKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgIm5lbmh1bSBjb250YWN0byBlc3BlY2lmaWNhZG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMjcKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3DDp8O1ZXM+XSBbLS1dIFs8ZmljaGVpcm8+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE0NAorbXNnaWQgInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIgorbXNnc3RyICJzdGFnZSBkZXZlIHNlciB1bSBuw7ptZXJvIGVudHJlIDEgZSAzIG91IG8gcGFyw6JtZXRybyBhbGwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjAKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiZXh0cmFpciB0b2RvcyBvcyBmaWNoZWlyb3MgcHJlc2VudGVzIG5vIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjEKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgImZvcsOnYXIgc3Vic3RpdHVpw6fDo28gZG9zIGZpY2hlaXJvcyBleGlzdGVudGVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTYzCittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorIm7Do28gbW9zdHJhciBhdmlzbyBwYXJhIGZpY2hlaXJvcyBleGlzdGVudGVzIGUgZmljaGVpcm9zIG7Do28gcHJlc2VudGVzIG5vICIKKyLDrW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICJuw6NvIGV4dHJhaXIgbm92b3MgZmljaGVpcm9zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgImF0dWFsaXphciBpbmZvcm1hw6fDo28gZGUgc3RhdCBubyBmaWNoZWlybyBkZSDDrW5kaWNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsZXIgbGlzdGEgZGUgY2FtaW5ob3MgZGEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICJlc2NyZXZlciBvIGNvbnRlw7pkbyBlbSBmaWNoZWlyb3MgdGVtcG9yw6FyaW9zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc0IGJ1aWx0aW4vY29sdW1uLmM6MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzOAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgwCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDcyCittc2dpZCAic3RyaW5nIgorbXNnc3RyICJjYWRlaWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzUKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJwcmVjZWRlciA8Y2FkZWlhPiBhbyBjcmlhciBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAiY29waWFyIG9zIGZpY2hlaXJvcyBkbyBlc3TDoWdpbyBpbmRpY2FkbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcMOnw7Vlcz5dIDxyYW1vPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI4Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcMOnw7Vlcz5dIFs8cmFtbz5dIC0tIDxmaWNoZWlybz4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTMgYnVpbHRpbi9jaGVja291dC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAibyBjYW1pbmhvICclcycgbsOjbyB0ZW0gYSBub3NzYSB2ZXJzw6NvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAibyBjYW1pbmhvICclcycgbsOjbyB0ZW0gYSB2ZXJzw6NvIGRlbGVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIm8gY2FtaW5obyAnJXMnIG7Do28gdGVtIHRvZGFzIGFzIHZlcnPDtWVzIG5lY2Vzc8OhcmlhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIm8gY2FtaW5obyAnJXMnIG7Do28gdGVtIGFzIHZlcnPDtWVzIG5lY2Vzc8OhcmlhcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiY2FtaW5obyAnJXMnOiBuw6NvIMOpIHBvc3PDrXZlbCBpbnRlZ3JhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgYWRpY2lvbmFyIG9zIHJlc3VsdGFkb3MgZGEgaW50ZWdyYcOnw6NvIGRlICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjkgYnVpbHRpbi9jaGVja291dC5jOjI3MiBidWlsdGluL2NoZWNrb3V0LmM6Mjc1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiJyVzJyBuw6NvIHBvZGUgc2VyIHVzYWRvIGNvbSBjYW1pbmhvcyBlbSBhdHVhbGl6YcOnw6NvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjgxIGJ1aWx0aW4vY2hlY2tvdXQuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIG7Do28gcG9kZSBzZXIgdXNhZG8gY29tICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGF0dWFsaXphciBvcyBjYW1pbmhvcyBlIG11ZGFyIHBhcmEgbyByYW1vICclcycgYW8gbWVzbW8gdGVtcG8uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzU4IGJ1aWx0aW4vY2hlY2tvdXQuYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICJvIGNhbWluaG8gJyVzJyBuw6NvIGZvaSBpbnRlZ3JhZG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MTMKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAicHJpbWVpcm8gZGV2ZSByZXNvbHZlciBvIMOtbmRpY2UgYXR1YWwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVmZXR1YXIgcmVmbG9nIGRlICclcyc6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODUKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBlc3TDoSBhZ29yYSBlbSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4OSBidWlsdGluL2Nsb25lLmM6Njc4Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYXR1YWxpemFyIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmVwb3IgcmFtbyAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIkrDoSBlbSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIk11ZG91IHBhcmEgZSByZXDDtHMgbyByYW1vICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjcwMiBidWlsdGluL2NoZWNrb3V0LmM6MTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJNdWRvdSBwYXJhIG8gbm92byByYW1vICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJNdWRvdSBwYXJhIG8gcmFtbyAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiBlIG1haXMgJWQuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJBdmlzbzogZGVpeGEgJWQgY29tbWl0IHBhcmEgdHLDoXMsIG7Do28gbGlnYWRvIGEgbmVuaHVtIHJhbW86XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIkF2aXNvOiBkZWl4YSAlZCBjb21taXRzIHBhcmEgdHLDoXMsIG7Do28gbGlnYWRvcyBhIG5lbmh1bSByYW1vOlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisiU2UgZGVzZWphIG1hbnTDqi1sbywgY3JpYW5kbyB1bSBub3ZvIHJhbW8sIGFnb3JhIHNlcmlhIHVtYSBib2EgYWx0dXJhXG4iCisicGFyYSBmYXrDqi1sbyBjb206XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5vbWUtZG8tbm92by1yYW1vPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiU2UgZGVzZWphIG1hbnTDqi1sb3MsIGNyaWFuZG8gdW0gbm92byByYW1vLCBhZ29yYSBzZXJpYSB1bWEgYm9hIGFsdHVyYVxuIgorInBhcmEgZmF6w6otbG8gY29tOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxub21lLWRvLW5vdm8tcmFtbz4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgxNgorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgImVycm8gaW50ZXJubyBkdXJhbnRlIG8gY3Vyc28gZGUgcmV2aXPDtWVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODIwCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIkEgcG9zacOnw6NvIGFudGVyaW9yIGRlIEhFQUQgZXJhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODQ3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDg1Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiRXN0w6EgbnVtIHJhbW8gYWluZGEgbsOjbyBjcmlhZG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgImVzcGVyYXZhLXNlIGFwZW5hcyB1bWEgcmVmZXLDqm5jaWEsICVkIGZvcm5lY2lkYXMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAzMSBidWlsdGluL3dvcmt0cmVlLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicmVmZXLDqm5jaWEgaW52w6FsaWRhOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJhIHJlZmVyw6puY2lhIG7Do28gw6kgdW1hIMOhcnZvcmU6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA5OQorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJuw6NvIHBvZGVtIHNlciB1c2Fkb3MgY2FtaW5ob3MgYW8gbXVkYXIgZGUgcmFtbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMDIgYnVpbHRpbi9jaGVja291dC5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyBuw6NvIHBvZGUgc2VyIHVzYWRvIGFvIG11ZGFyIGRlIHJhbW8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTEwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTEzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiJyVzJyBuw6NvIHBvZGUgc2VyIHVzYWRvIGNvbSAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgbXVkYXIgZGUgcmFtbyBwYXJhICclcycsIHZpc3RvIHF1ZSBuw6NvIMOpIHVtIGNvbW1pdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTkgYnVpbHRpbi9jaGVja291dC5jOjExNjEgYnVpbHRpbi9jbG9uZS5jOjExMQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNjUgYnVpbHRpbi9yZW1vdGUuYzoxNjcgYnVpbHRpbi93b3JrdHJlZS5jOjMyNQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyNworbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAicmFtbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNjAKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3JpYXIgZSBleHRyYWlyIHVtIG5vdm8gcmFtbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNjIKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICJjcmlhci9yZXBvciBlIGV4dHJhaXIgdW0gcmFtbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNjMKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmlhciByZWZsb2cgZG8gbm92byByYW1vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE2NCBidWlsdGluL3dvcmt0cmVlLmM6MzI5Cittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJkZXN0YWNhciBIRUFEIG5vIGNvbW1pdCBpbmRpY2FkbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNjUKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZGVmaW5pciBhIGluZm9ybWHDp8OjbyBkbyByYW1vIGEgbW9udGFudGUgZG8gbm92byByYW1vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE2NworbXNnaWQgIm5ldy1icmFuY2giCittc2dzdHIgIm5vdm8tcmFtbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNjcKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIm5vdm8gcmFtbyBzZW0gcGFpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE2OAorbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiZXh0cmFpciBhIG5vc3NhIHZlcnPDo28gZG9zIGZpY2hlaXJvcyBuw6NvIGludGVncmFkb3MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTcwCittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImV4dHJhaXIgYSB2ZXJzw6NvIGRlbGVzIGRvcyBmaWNoZWlyb3MgbsOjbyBpbnRlZ3JhZG9zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3MgorbXNnaWQgImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIgorbXNnc3RyICJmb3LDp2FyIGV4dHJhw6fDo28gKGRlc2NhcnRhciBtb2RpZmljYcOnw7VlcyBsb2NhaXMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3MworbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJyZWFsaXphciB1bWEgaW50ZWdyYcOnw6NvIGNvbSAzIHBvbnRvcyBjb20gbyBub3ZvIHJhbW8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc0IGJ1aWx0aW4vbWVyZ2UuYzoyMzQKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgImF0dWFsaXphciBmaWNoZWlyb3MgaWdub3JhZG9zIChwcmVkZWZpbmnDp8OjbykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc1IGJ1aWx0aW4vbG9nLmM6MTQ3MyBwYXJzZS1vcHRpb25zLmg6MjUxCittc2dpZCAic3R5bGUiCittc2dzdHIgImVzdGlsbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNzYKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICJlc3RpbG8gZGUgY29uZmxpdG8gKG1lcmdlIG91IGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNzkKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgIm7Do28gcmVzdHJpbmdpciBlc3BlY2lmaWNhZG9yZXMgZGUgY2FtaW5obyBhIGVudHJhZGFzIGVzcGFyc2FzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE4MQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICJ0ZW50YXIgYWRpdmluaGFyICdnaXQgY2hlY2tvdXQgPHJhbW8taW5leGlzdGVudGU+JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExODMKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIiIKKyJuw6NvIHZlcmlmaWNhciBzZSBvdXRyYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGNvbnTDqW0gYSByZWZlcsOqbmNpYSBmb3JuZWNpZGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTg3IGJ1aWx0aW4vY2xvbmUuYzo3OCBidWlsdGluL2ZldGNoLmM6MTE5CisjOiBidWlsdGluL21lcmdlLmM6MjMxIGJ1aWx0aW4vcHVsbC5jOjExNyBidWlsdGluL3B1c2guYzo1MzkKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJmb3LDp2FyIGluZm9ybWHDp8OjbyBkZSBwcm9ncmVzc28iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjI0Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgZSAtLW9ycGhhbiBzw6NvIG11dHVhbWVudGUgZXhjbHVzaXZvcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDEKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sgcmVxdWVyIHVtIG5vbWUgZHVtIHJhbW8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjQ2Cittc2dpZCAiTWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIgorbXNnc3RyICJGYWx0YSB1bSBub21lIGR1bSByYW1vOyB0ZW50ZSAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyODIKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiZXNwZWNpZmljYcOnw6NvIGRlIGNhbWluaG8gaW52w6FsaWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBhdHVhbGl6YXIgb3MgY2FtaW5obyBlIG11ZGFyIHBhcmEgbyByYW1vICclcycgYW8gbWVzbW8gIgorInRlbXBvLlxuIgorIlByZXRlbmRpYSBleHRyYWlyICclcycgbyBxdWFsIG7Do28gcG9kZSBzZXIgcmVzb2x2aWRvIGNvbW8gY29tbWl0PyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIG7Do28gYWNlaXRhIHVtIGNhbWluaG8gY29tbyBhcmd1bWVudG8gJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyOTgKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBlIC0tbWVyZ2Ugc8OjbyBpbmNvbXBhdMOtdmVpc1xuIgorImR1cmFudGUgYSBleHRyYcOnw6NvIGRvIMOtbmRpY2UuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjUKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhZHLDo28+XSBbLXggfCAtWF0gWy0tXSA8Y2FtaW5ob3M+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiQSByZW1vdmVyICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiUmVtb3ZlcmlhICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIkEgaWdub3JhciBvIHJlcG9zaXTDs3JpbyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIklnbm9yYXJpYSBvIHJlcG9zaXTDs3JpbyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZmFsaGEgYW8gcmVtb3ZlciAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI5NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyJBanVkYSBkZSBsaW5oYSBkZSBjb21hbmRvczpcbiIKKyIxICAgICAgICAgIC0gc2VsZWNpb25hciB1bSBpdGVtIG51bWVyYWRvXG4iCisiZm9vICAgICAgICAtIHNlbGVjaW9uYXIgaXRlbSBiYXNlYWRvIG5vIHByZWZpeG8gw7puaWNvXG4iCisiICAgICAgICAgICAtICh2YXppbykgbsOjbyBzZWxlY2lvbmEgbmFkYVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisiQWp1ZGEgZGUgbGluaGEgZGUgY29tYW5kb3M6XG4iCisiMSAgICAgICAgICAtIHNlbGVjaW9uYXIgdW0gw7puaWNvIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWNpb25hciB1bSBpbnRlcnZhbG8gZGUgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWNpb25hciBtw7psdGlwbG9zIGludGVydmFsb3NcbiIKKyJmb28gICAgICAgIC0gc2VsZWNpb25hciBpdGVtIGJhc2VhZG8gbm8gcHJlZml4byDDum5pY29cbiIKKyItLi4uICAgICAgIC0gZGVzc2VsZWNpb25hciBpdGVucyBlc3BlY2lmaWNhZG9zXG4iCisiKiAgICAgICAgICAtIGVzY29saGVyIHRvZG9zIG9zIGl0ZW5zXG4iCisiICAgICAgICAgICAtICh2YXppbykgY29uY2x1aXIgc2VsZcOnw6NvXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MTcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1ODkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTk0CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiTyBxdcOqICglcyk/XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICJJbnRyb2R1emEgcGFkcsO1ZXMgYSBpZ25vcmFyPj4gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICJBVklTTzogbsOjbyBmb3JhbSBlbmNvbnRyYWRvcyBpdGVucyBjb3JyZXNwb25kZW50ZXMgYTogJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MTcKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICJTZWxlY2lvbmUgaXRlbnMgcGFyYSBlbGltaW5hciIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICJSZW1vdmVyICVzIFt5L05dPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3ODMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAiQWRldXMuXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTEKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBjb21lw6dhciBhIGxpbXBhclxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWlyIGl0ZW5zIGRhIGVsaW1pbmHDp8Ojb1xuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY2lvbmFyIGl0ZW5zIHBhcmEgc2VyZW0gZWxpbWluYWRvcyBwb3IgbsO6bWVyb1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtYXIgY2FkYSBlbGltaW5hw6fDo28gKGNvbW8gXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBwYXJhciBsaW1wZXphXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIGVzdGEgYWp1ZGFcbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gYWp1ZGEgcGFyYSBzZWxlw6fDo28gZW0gbGluaGEgZGUgY29tYW5kb3MiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzM2Cittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIENvbWFuZG9zICoqKiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MzMKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiRSBhZ29yYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgyNworbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIlJlbW92ZXJpYSBvIHNlZ3VpbnRlIGl0ZW06IgorbXNnc3RyWzFdICJSZW1vdmVyaWEgb3Mgc2VndWludGVzIGl0ZW5zOiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg0NAorbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICJOw6NvIGjDoSBtYWlzIGZpY2hlaXJvcyBwb3IgbGltcGFyLCBhIHRlcm1pbmFyLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg3NQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJuw6NvIGltcHJpbWlyIG9zIG5vbWVzIGRvcyBmaWNoZWlyb3MgcmVtb3ZpZG9zIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODc3Cittc2dpZCAiZm9yY2UiCittc2dzdHIgImZvcsOnYXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NzgKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAibGltcGV6YSBpbnRlcmF0aXZhIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODgwCittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJyZW1vdmVyIGRpcmV0w7NyaW9zIGludGVpcm9zIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODgxIGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDkgYnVpbHRpbi9kZXNjcmliZS5jOjQ1MQorIzogYnVpbHRpbi9ncmVwLmM6MTA2MyBidWlsdGluL2xzLWZpbGVzLmM6NTM5IGJ1aWx0aW4vbmFtZS1yZXYuYzozNDgKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozNTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3NgorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgInBhZHLDo28iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4ODIKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiYWRpY2lvbmFyIDxwYWRyw6NvPiDDoHMgcmVncmFzIGlnbm9yYWRhcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg4MworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgInRhbWLDqW0gcmVtb3ZlciBmaWNoZWlyb3MgaWdub3JhZG9zIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODg1Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAicmVtb3ZlciBhcGVuYXMgZmljaGVpcm9zIGlnbm9yYWRvcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMworbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLXggZSAtWCBuw6NvIHBvZGUgc2VyIHVzYWRvcyBqdW50b3MiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDcKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmaW5pZG8gY29tbyB0cnVlIGUgbmVuaHVtIC1pLCAtbiwgb3UgLWYgZm9ybmVjaWRvOyAiCisibGltcGV6YSByZWN1c2FkYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHByZWRlZmluaWRvIGNvbW8gdHJ1ZSBlIG5lbmh1bSAtaSwgLW4sIG91IC1mIGZvcm5lY2lkbzsgIgorImxpbXBlemEgcmVjdXNhZGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNworbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzxvcMOnw7Vlcz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MAorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJuw6NvIGNyaWFyIHVtYSBleHRyYcOnw6NvIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODEgYnVpbHRpbi9jbG9uZS5jOjgzIGJ1aWx0aW4vaW5pdC1kYi5jOjQ3OAorbXNnaWQgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY3JpYXIgdW0gcmVwb3NpdMOzcmlvIG51IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODUKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiY3JpYXIgdW0gcmVwb3NpdMOzcmlvIGVzcGVsaGFkbyAoaW1wbGljYSByZXBvc2l0w7NyaW8gbnUpIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODcKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAicGFyYSBjbG9uYXIgZGUgdW0gcmVwb3NpdMOzcmlvIGxvY2FsIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODkKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAibsOjbyB1c2FyIGxpZ2HDp8O1ZXMgZml4YXMsIGNvcGlhciBzZW1wcmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MQorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJjb25maWd1cmFyIGNvbW8gcmVwb3NpdMOzcmlvIHBhcnRpbGhhZG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MyBidWlsdGluL2Nsb25lLmM6OTcKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAicGF0aHNwZWMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MyBidWlsdGluL2Nsb25lLmM6OTcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJpbmljaWFsaXphciBzdWJtw7NkdWxvcyBubyBjbG9uZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibsO6bWVybyBkZSBzdWJtw7NkdWxvcyBjbG9uYWRvcyBlbSBwYXJhbGVsbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMSBidWlsdGluL2luaXQtZGIuYzo0NzUKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgImRpcmV0w7NyaW8tbW9kZWxvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ3NgorbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgImRpcmV0w7NyaW8gcXVlIGNvbnTDqW0gb3MgbW9kZWxvcyB1c2Fkb3MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQgYnVpbHRpbi9jbG9uZS5jOjEwNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTgzCittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgInJlcG9zaXTDs3JpbyBkZSByZWZlcsOqbmNpYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgInVzYXIgLS1yZWZlcmVuY2UgYXBlbmFzIHBhcmEgY2xvbmFyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA5IGJ1aWx0aW4vY29sdW1uLmM6MjYgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDMKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub21lIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICJ1c2FyIDxub21lPiBlbSB2ZXogZGUgJ29yaWdpbicgcGFyYSBzZWd1aXIgbyByYW1vIGEgbW9udGFudGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTIKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICJleHRyYWlyIDxyYW1vPiBlbSB2ZXogZGEgSEVBRCBkbyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICJjYW1pbmhvIHBhcmEgZ2l0LXVwbG9hZC1wYWNrIG5vIHJlbW90byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNSBidWlsdGluL2ZldGNoLmM6MTIwIGJ1aWx0aW4vZ3JlcC5jOjEwMDYKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwMgorbXNnaWQgImRlcHRoIgorbXNnc3RyICJwcm9mdW5kaWRhZGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgImNyaWFyIHVtIGNsb25lIHJhc28gY29tIGVzc2EgcHJvZnVuZGlkYWRlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE3IGJ1aWx0aW4vZmV0Y2guYzoxMjIgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTE4CisjOiBwYXJzZS1vcHRpb25zLmg6MTQyCittc2dpZCAidGltZSIKK21zZ3N0ciAiaG9yYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc2luY2UgYSBzcGVjaWZpYyB0aW1lIgorbXNnc3RyICJjcmlhciB1bSBjbG9uZSByYXNvIGRlc2RlIHVtYSBkYXRhIGVzcGVjw61maWNhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vZmV0Y2guYzoxMjQKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAicmV2aXPDo28iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAgYnVpbHRpbi9mZXRjaC5jOjEyNQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiCittc2dzdHIgImFwcm9mdW5kYXIgbyBoaXN0w7NyaWNvIGRlIHVtIGNsb25lIHJhc28sIGV4Y2x1aW5kbyBhIHJldmlzw6NvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJjbG9uYXIgYXBlbmFzIHVtIHJhbW8sIEhFQUQgb3UgLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICJxdWFscXVlciBzdWJtw7NkdWxvIGNsb25hZG8gc2Vyw6EgcmFzbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2luaXQtZGIuYzo0ODQKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgImdpdGRpciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNiBidWlsdGluL2luaXQtZGIuYzo0ODUKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJzZXBhcmFyIG8gcmVwb3NpdMOzcmlvIGdpdCBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3Cittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICJjaGF2ZT12YWxvciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAiZGVmaW5pciBjb25maWd1cmHDp8OjbyBkZW50cm8gZG8gbm92byByZXBvc2l0w7NyaW8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjkgYnVpbHRpbi9mZXRjaC5jOjE0MCBidWlsdGluL3B1c2guYzo1NTAKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAidXNhciBhcGVuYXMgZW5kZXJlw6dvcyBJUHY0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTMxIGJ1aWx0aW4vZmV0Y2guYzoxNDIgYnVpbHRpbi9wdXNoLmM6NTUyCittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgInVzYXIgYXBlbmFzIGVuZGVyZcOnb3MgSVB2NiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI2OAorbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgYWRpdmluaGFyIG8gbm9tZSBkbyBkaXJldMOzcmlvLlxuIgorIkVzcGVjaWZpcXVlIHVtIGRpcmV0w7NyaW8gbmEgbGluaGEgZGUgY29tYW5kb3MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgImluZm86IE7Do28gZm9pIHBvc3PDrXZlbCBhZGljaW9uYXIgc29icmVzc2FsZW50ZSBkZSAnJXMnOiAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImZhbGhhIGFvIGFicmlyICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGV4aXN0ZSBlIG7Do28gw6kgdW0gZGlyZXTDs3JpbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorbXNnc3RyICJmYWxoYSBhbyBpbnZvY2FyIHN0YXQgZGUgJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiZmFsaGEgYW8gY3JpYXIgYSBsaWdhw6fDo28gJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgImZhbGhhIGFvIGNvcGlhciBvIGZpY2hlaXJvIHBhcmEgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICJjb25jbHXDrWRvLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDc4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgdGhlIGNoZWNrb3V0IHdpdGggJ2dpdCBjaGVja291dCAtZiBIRUFEJ1xuIgorbXNnc3RyICIiCisiQ2xvbmFkbyBjb20gc3VjZXNzbywgbWFzIGEgZXh0cmHDp8OjbyBmYWxob3UuXG4iCisiUG9kZSBpbnNwZWNpb25hciBvIHF1ZSBmb2kgZXh0cmHDrWRvIGNvbSAnZ2l0IHN0YXR1cydcbiIKKyJlIHJlcGV0aXIgYSBleHRyYcOnw6NvIGNvbSAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIlJhbW8gcmVtb3RvICVzIG7Do28gZW5jb250cmFkbyBwYXJhIGNsb25hci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NTAKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAibyByZW1vdG8gbsOjbyBlbnZpb3UgdG9kb3Mgb3Mgb2JqZXRvcyBuZWNlc3PDoXJpb3MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGF0dWFsaXphciAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcxNQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorImEgSEVBRCByZW1vdGEgcmVmZXJlbmNpYSB1bWEgcmVmZXLDqm5jaWEgaW5leGlzdGVudGUsIG7Do28gw6kgcG9zc8OtdmVsICIKKyJleHRyYWlyLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzQ2Cittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGV4dHJhaXIgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzg2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBvcyBwYXLDom1ldHJvcyBubyBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0OQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHJlZW1wYWNvdGFyIHBhcmEgbGltcGFyIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODUxCittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICIiCisibsOjbyDDqSBwb3Nzw612ZWwgaW52b2NhciB1bmxpbmsgc29icmUgbyBmaWNoZWlybyBzb2JyZXNzYWxlbnRlIHRlbXBvcsOhcmlvIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODg0IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkwMQorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIkRlbWFzaWFkb3MgYXJndW1lbnRvcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4ODgKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIkRldmUgZXNwZWNpZmljYXIgdW0gcmVwb3NpdMOzcmlvIHBhcmEgY2xvbmFyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwMQorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgImFzIG9ww6fDtWVzIC0tYmFyZSBlIC0tb3JpZ2luICVzIHPDo28gaW5jb21wYXTDrXZlaXMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTA0Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSBlIC0tc2VwYXJhdGUtZ2l0LWRpciBzw6NvIGluY29tcGF0w612ZWlzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIm8gcmVwb3NpdMOzcmlvICclcycgbsOjbyBleGlzdGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjMgYnVpbHRpbi9mZXRjaC5jOjEzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICJwcm9mdW5kaWRhZGUgJXMgbsOjbyDDqSB1bSBuw7ptZXJvIHBvc2l0aXZvIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIm8gY2FtaW5obyBkZSBkZXN0aW5vICclcycgasOhIGV4aXN0ZSBlIG7Do28gw6kgdW0gZGlyZXTDs3JpbyB2YXppby4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJhIMOhcnZvcmUgZGUgdHJhYmFsaG8gJyVzJyBqw6EgZXhpc3RlLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1OCBidWlsdGluL2Nsb25lLmM6OTY5IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNTIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMjIgYnVpbHRpbi93b3JrdHJlZS5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG9zIGRpcmV0w7NyaW9zIHN1cGVyaW9yZXMgZGUgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZGlyZXTDs3JpbyBkZSDDoXJ2b3JlIGRlIHRyYWJhbGhvICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIkEgY2xvbmFyIG5vIHJlcG9zaXTDs3JpbyBudSAnJXMnLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiQSBjbG9uYXIgZW0gJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk5Cittc2dpZCAiIgorImNsb25lIC0tcmVjdXJzaXZlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYm90aCAtLXJlZmVyZW5jZSBhbmQgLS1yZWZlcmVuY2UtaWYtIgorImFibGUiCittc2dzdHIgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBuw6NvIMOpIGNvbXBhdMOtdmVsIGNvbSBhbWJvcyAtLXJlZmVyZW5jZSBlIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA1NQorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWRlcHRoIMOpIGlnbm9yYWRvIGVtIGNsb25lcyBsb2NhaXM7IHVzZSBmaWxlOi8vIC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDU3Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LXNpbmNlIMOpIGlnbm9yYWRvIGVtIGNsb25lcyBsb2NhaXM7IHVzZSBmaWxlOi8vIC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDU5Cittc2dpZCAiLS1zaGFsbG93LWV4Y2x1ZGUgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLXNoYWxsb3ctZXhjbHVkZSDDqSBpZ25vcmFkbyBlbSBjbG9uZXMgbG9jYWlzOyB1c2UgZmlsZTovLyAuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2MgorbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgIm8gcmVwb3NpdMOzcmlvIGRlIG9yaWdlbSDDqSByYXNvLCAtLWxvY2FsIGlnbm9yYWRvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2NworbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAiLS1sb2NhbCBpZ25vcmFkbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCittc2dzdHIgIk7Do28gc2VpIGNvbW8gY2xvbmFyICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyNiBidWlsdGluL2Nsb25lLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiTyByYW1vIHJlbW90byAlcyBuw6NvIGZvaSBlbmNvbnRyYWRvIG5vIHJlcG9zaXTDs3JpbyBhIG1vbnRhbnRlICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEzNworbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIlBhcmVjZSBmb2kgY2xvbmFkbyB1bSByZXBvc2l0w7NyaW8gdmF6aW8uIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjkKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8b3DDp8O1ZXM+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNgorbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAicGVzcXVpc2FyIHZhcmnDoXZlaXMgZGUgY29uZmlndXJhw6fDo28iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9jb2x1bW4uYzoyOAorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgImVzcXVlbWEgYSB1c2FyIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAiTGFyZ3VyYSBtw6F4aW1hIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiRXNwYcOnbyBkZSBwcmVlbmNoaW1lbnRvIG5hIGJvcmRhIGVzcXVlcmRhIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIkVzcGHDp28gZGUgcHJlZW5jaGltZW50byBuYSBib3JkYSBkaXJlaXRhIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIkVzcGHDp28gZGUgcHJlZW5jaGltZW50byBlbnRyZSBjb2x1bmFzIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQgZGV2ZSBzZXIgbyBwcmltZWlybyBhcmd1bWVudG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzgKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGNvbW1pdCBbPG9ww6fDtWVzPl0gWy0tXSA8ZXNwZWNpZmljYWRvci1kZS1jYW1pbmhvPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MworbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs8b3DDp8O1ZXM+XSBbLS1dIDxlc3BlY2lmaWNhZG9yLWRlLWNhbWluaG8+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiTyBzZXUgbm9tZSBlIGVuZGVyZcOnbyBkZSBlLW1haWwgZm9yYW0gY29uZmlndXJhZG9zIGF1dG9tYXRpY2FtZW50ZSBjb20gYmFzZVxuIgorIm5vIHNldSBub21lIGRlIHV0aWxpemFkb3IgZSBub21lIGRlIG3DoXF1aW5hLiBWZXJpZmlxdWUgc2UgZXN0w6NvIGNvcnJldG9zLlxuIgorIlBvZGUgc3VwcmltaXIgZXN0YSBtZW5zYWdlbSBjb25maWd1cmFuZG8tb3MgZXhwbGljaXRhbWVudGUuIEV4ZWN1dGVcbiIKKyJvIHNlZ3VpbnRlIGNvbWFuZG8gZSBzaWdhIGFzIGluc3RydcOnw7VlcyBubyBlZGl0b3IgcGFyYSBlZGl0YXJcbiIKKyJvIGZpY2hlaXJvIGRlIGNvbmZpZ3VyYcOnw6NvOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFww7NzIGZhemVyIGlzdG8sIHBvZGUgY29ycmlnaXIgYSBpZGVudGlkYWRlIHVzYWRhIG5lc3RlIGNvbW1pdCBjb206XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYxCittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiTyBzZXUgbm9tZSBlIGVuZGVyZcOnbyBkZSBlLW1haWwgZm9yYW0gY29uZmlndXJhZG9zIGF1dG9tYXRpY2FtZW50ZSBjb20gYmFzZVxuIgorIm5vIHNldSBub21lIGRlIHV0aWxpemFkb3IgZSBub21lIGRlIG3DoXF1aW5hLiBWZXJpZmlxdWUgc2UgZXN0w6NvIGNvcnJldG9zLlxuIgorIlBvZGUgc3VwcmltaXIgZXN0YSBtZW5zYWdlbSBjb25maWd1cmFuZG8tb3MgZXhwbGljaXRhbWVudGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiTyBTZXUgTm9tZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB1dGlsaXphZG9yQGV4ZW1wbG8uY29tXG4iCisiXG4iCisiQXDDs3MgZmF6ZXIgaXN0bywgcG9kZSBjb3JyaWdpciBhIGlkZW50aWRhZGUgdXNhZGEgbmVzdGUgY29tbWl0IGNvbTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJQZWRpdSBwYXJhIGVtZW5kYXIgbyBjb21taXQgbWFpcyByZWNlbnRlLCBtYXMgYW8gZmF6w6otbG8gdG9ybsOhLWxvLWlhXG4iCisidmF6aW8uIFBvZGUgcmVwZXRpciBvIGNvbWFuZG8gY29tIC0tYWxsb3ctZW1wdHksIG91IHBvZGUgcmVtb3ZlciBvXG4iCisiY29tbWl0IGNvbXBsZXRhbWVudGUgY29tIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzgKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk8gY2hlcnJ5LXBpY2sgYW50ZXJpb3IgZXN0w6EgdmF6aW8sIHBvc3NpdmVsbWVudGUgZGV2aWRvIGEgcmVzb2x1w6fDo28gZGUgIgorImNvbmZsaXRvcy5cbiIKKyJTZSBkZXNlamEgc3VibWV0ZXIgZGUgcXVhbHF1ZXIgZm9ybWEsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODUKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiQ2FzbyBjb250csOhcmlvLCB1c2UgJ2dpdCByZXNldCdcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorbXNnc3RyICIiCisiU2UgZGVzZWphIGlnbm9yYXIgZXN0ZSBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc2V0XG4iCisiXG4iCisiRGVwb2lzIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBpcsOhIHJldG9tYXIgbyBjaGVycnktcGlja1xuIgorImRvcyByZXN0YW50ZXMgY29tbWl0cy5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMTgKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgImZhbGhhIGFvIGRlc2NvbXBhY3RhciBvIG9iamV0byDDoXJ2b3JlIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzU5Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciDDrW5kaWNlIHRlbXBvcsOhcmlvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGFkaWNpb25hciBpbnRlcmF0aXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc4Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGF0dWFsaXphciBvIMOtbmRpY2UgdGVtcG9yw6FyaW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzgwCittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgIkZhbGhhIGFvIGF0dWFsaXphciBhIMOhcnZvcmUgZGUgY2FjaGUgcHJpbmNpcGFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwNCBidWlsdGluL2NvbW1pdC5jOjQyNyBidWlsdGluL2NvbW1pdC5jOjQ3NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZXNjcmV2ZXIgbyBmaWNoZWlybyBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDU4Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBmYXplciB1bSBjb21taXQgcGFyY2lhbCBkdXJhbnRlIHVtYSBpbnRlZ3Jhw6fDo28uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2MAorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZmF6ZXIgdW0gY29tbWl0IHBhcmNpYWwgZHVyYW50ZSB1bSBjaGVycnktcGljay4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDY5Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgbyDDrW5kaWNlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4OAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZXNjcmV2ZXIgZmljaGVpcm8gZGUgw61uZGljZSB0ZW1wb3LDoXJpbyIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAibyBjb21taXQgJyVzJyBuw6NvIHRlbSBjYWJlw6dhbGhvIGRlIGF1dG9yIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICJvIGNvbW1pdCAnJXMnIHRlbSBhIGxpbmhhIGRlIGF1dG9yIG1hbGZvcm1hZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjAzCittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyw6JtZXRybyAtLWF1dGhvciBtYWxmb3JtYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY1NQorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisibsOjbyBmb2kgcG9zc8OtdmVsIHNlbGVjaW9uYXIgdW0gY2Fyw6FjdGVyIGRlIGNvbWVudMOhcmlvIHF1ZVxuIgorIm7Do28gZXN0aXZlc3NlIGrDoSBhIHNlciB1c2FkbyBuYSBtZW5zYWdlbSBkZSBjb21taXQgYXR1YWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjkyIGJ1aWx0aW4vY29tbWl0LmM6NzI1IGJ1aWx0aW4vY29tbWl0LmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNvbnN1bHRhciBvIGNvbW1pdCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDQgYnVpbHRpbi9zaG9ydGxvZy5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIoYSBsZXIgbWVuc2FnZW0gZGUgbG9nIGRhIGVudHJhZGEgcGFkcsOjbylcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDYKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIGxvZyBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciBvIGZpY2hlaXJvIGRlIGxvZyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczNyBidWlsdGluL2NvbW1pdC5jOjc0NQorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NDIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc5NgorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBvIG1vZGVsbyBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlBhcmVjZSBxdWUgZXN0w6EgYSBzdWJtZXRlciB1bWEgaW50ZWdyYcOnw6NvLlxuIgorIlNlIG7Do28gZm9yIG8gY2FzbywgcmVtb3ZhIG8gZmljaGVpcm9cbiIKKyJcdCVzXG4iCisiZSB0ZW50ZSBkZSBub3ZvLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQYXJlY2UgcXVlIGVzdMOhIGEgc3VibWV0ZXIgdW0gY2hlcnJ5LXBpY2suXG4iCisiU2UgbsOjbyDDqSBvIGNhc28sIHJlbW92YSBvIGZpY2hlaXJvXG4iCisiXHQlc1xuIgorImUgdGVudGUgb3V0cmEgdmV6LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW50cm9kdXphIGEgbWVuc2FnZW0gZGUgY29tbWl0IGRhcyBzdWFzIGFsdGVyYcOnw7Vlcy5cbiIKKyJMaW5oYXMgY29tZcOnYWRhcyBjb20gJyVjJyBzZXLDo28gaWdub3JhZGFzLCBlIHVtYSBtZW5zYWdlbSB2YXppYVxuIgorImFib3J0YSBvIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJJbnRyb2R1emlhIGEgbWVuc2FnZW0gZGUgY29tbWl0IGRhcyBzdWFzIGFsdGVyYcOnw7Vlcy5cbiIKKyJMaW5oYXMgY29tZcOnYWRhcyBjb20gJyVjJyBzZXLDo28gbWFudGlkYXM7IHBvZGUgcmVtb3bDqi1sYXMgc2UgbyBkZXNlamFyLlxuIgorIlVtYSBtZW5zYWdlbSB2YXppYSBhYm9ydGEgbyBjb21taXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNBdXRvcjogICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXRhOiAgICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4OTIKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgbGVyIG8gw61uZGljZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NTQKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiRXJybyBhbyBjb25zdHJ1aXIgw6Fydm9yZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTY4IGJ1aWx0aW4vdGFnLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiSW5kaXF1ZSBhIG1lbnNhZ2VtIHVzYW5kbyBhcyBvcMOnw7VlcyAtbSBvdSAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yICclcycgbsOjbyDDqSBkbyB0aXBvICdOb21lIDxlbWFpbD4nIGUgbsOjbyBjb3JyZXNwb25kZSBhIHVtIGF1dG9yICIKKyJleGlzdGVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA4NiBidWlsdGluL2NvbW1pdC5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJNb2RvIGludsOhbGlkbyBkZSBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjQKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbG9uZyBlIC16IHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1NAorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIk7Do28gZmF6IHNlbnRpZG8gdXNhciAtLXJlc2V0LWF1dGhvciBlIC0tYXV0aG9yIGFvIG1lc21vIHRlbXBvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjMKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiTsOjbyBow6EgbmFkYSBwYXJhIGVtZW5kYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjYKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJJbnRlZ3Jhw6fDo28gZW0gY3Vyc28gLS0gbsOjbyDDqSBwb3Nzw612ZWwgZW1lbmRhci4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2OAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkNoZXJyeS1waWNrIGVtIGN1cnNvIC0tIG7Do28gw6kgcG9zc8OtdmVsIGVtZW5kYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzEKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICJBcyBvcMOnw7VlcyAtLXNxdWFzaCBlIC0tZml4dXAgbsOjbyBwb2RlbSBzZXIgdXNhZGFzIGp1bnRhcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgxCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIkFwZW5hcyB1bSBlbnRyZSAtYy8tQy8tRi8tLWZpeHVwIHBvZGUgc2VyIHVzYWRvLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICJBIG9ww6fDo28gLW0gbsOjbyBwb2RlIHNlciBjb21iaW5hZGEgY29tIC1jL0MvLUYvLS1maXh1cC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MQorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIHPDsyBwb2RlIHNlciB1c2FkbyBjb20gLUMsIC1jIG91IC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDgKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJBcGVuYXMgdW0gZW50cmUgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggcG9kZSBzZXIgdXNhZG8uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMTAKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkFzIG9ww6fDtWVzIC0taW5jbHVkZS8tLW9ubHkgbsOjbyBmYXplbSBzZW50aWRvIHNlbSBpbmRpY2FyIGNhbWluaG9zLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjEyCittc2dpZCAiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgb3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKK21zZ3N0ciAiQ2FtaW5ob3MgZXhwbMOtY2l0b3MgZXNwZWNpZmljYWRvcyBzZW0gLWkgb3UgLW87IGFzc3VtaW5kbyAtLW9ubHkuLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNCBidWlsdGluL3RhZy5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiTW9kbyBkZSBsaW1wZXphIGludsOhbGlkbyAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjI5Cittc2dpZCAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiSW5kaWNhciBjYW1pbmhvcyBjb20gLWEgbsOjbyBmYXogc2VudGlkby4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzOSBidWlsdGluL2NvbW1pdC5jOjE2MTIKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgIm1vc3RyYXIgc3RhdHVzIGRlIGZvcm1hIGNvbmNpc2EiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MSBidWlsdGluL2NvbW1pdC5jOjE2MTQKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAibW9zdHJhciBpbmZvcm1hw6fDo28gZG8gcmFtbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQzCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc8OjbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQzIGJ1aWx0aW4vY29tbWl0LmM6MTYxNiBidWlsdGluL3B1c2guYzo1MjUKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDMKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAic2HDrWRhIGludGVsaWfDrXZlbCBwb3IgbcOhcXVpbmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0NiBidWlsdGluL2NvbW1pdC5jOjE2MTgKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgImFwcmVzZW50YXIgc3RhdHVzIGVtIGZvcm1hdG8gbG9uZ28gKHByZWRlZmluacOnw6NvKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQ5IGJ1aWx0aW4vY29tbWl0LmM6MTYyMQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICJ0ZXJtaW5hciBlbnRyYWRhcyBjb20gTlVMIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTEgYnVpbHRpbi9jb21taXQuYzoxNjI0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODEKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODQgYnVpbHRpbi90YWcuYzo0MTEKK21zZ2lkICJtb2RlIgorbXNnc3RyICJtb2RvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTIgYnVpbHRpbi9jb21taXQuYzoxNjI0Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisibW9zdHJhciBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcywgbW9kbyDDqSBvcGNpb25hbDogYWxsLCBub3JtYWwsIG5vLiAiCisiKFByZWRlZmluacOnw6NvOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTUKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIm1vc3RyYXIgZmljaGVpcm9zIGlnbm9yYWRvcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU2IHBhcnNlLW9wdGlvbnMuaDoxNTUKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJxdWFuZG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NworbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImlnbm9yYXIgYWx0ZXJhw6fDtWVzIGVtIHN1Ym3Ds2R1bG9zLCBxdWFuZG8gw6kgb3BjaW9uYWw6IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihQcmVkZWZpbmnDp8OjbzogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU5Cittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAibGlzdGFyIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGVtIGNvbHVuYXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzNQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjb25zdWx0YXIgbyBjb21taXQgcmVjw6ltLWNyaWFkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDM3Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBjb21taXQgcmVjw6ltLWNyaWFkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDgyCittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSEVBRCBkZXN0YWNhZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NQorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKGNvbW1pdC1yYWl6KSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTgyCittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAic3VwcmltaXIgbyByZXN1bW8gZGVwb2lzIGRlIHN1Ym1ldGVyIGNvbSBzdWNlc3NvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODMKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIm1vc3RyYXIgZGlmZiBubyBtb2RlbG8gZGEgbWVuc2FnZW0gZGUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODUKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkZSBtZW5zYWdlbSBkZSBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NiBidWlsdGluL3RhZy5jOjQwOQorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgImxlciBtZW5zYWdlbSBkZSB1bSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg3Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg3Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgInN1YnN0aXR1aXIgYXV0b3IgZG8gY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODggYnVpbHRpbi9nYy5jOjM1MworbXNnaWQgImRhdGUiCittc2dzdHIgImRhdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAic3Vic3RpdHVpciBkYXRhIGRvIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg5IGJ1aWx0aW4vbWVyZ2UuYzoyMjEgYnVpbHRpbi9ub3Rlcy5jOjM5OAorIzogYnVpbHRpbi9ub3Rlcy5jOjU2MSBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIm1lbnNhZ2VtIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODkKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibWVuc2FnZW0gZGUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTAgYnVpbHRpbi9jb21taXQuYzoxNTkxIGJ1aWx0aW4vY29tbWl0LmM6MTU5MgorIzogYnVpbHRpbi9jb21taXQuYzoxNTkzIHBhcnNlLW9wdGlvbnMuaDoyNTcgcmVmLWZpbHRlci5oOjc3Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5MAorbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyZXV0aWxpemFyIGUgZWRpdGFyIGEgbWVuc2FnZW0gZGUgdW0gY29tbWl0IGVzcGVjaWZpY2FkbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkxCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgInJldXRpbGl6YXIgYSBtZW5zYWdlbSBkZSB1bSBjb21taXQgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTIKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisidXNhciBtZW5zYWdlbSBjb20gZm9ybWF0byBhdXRvc3F1YXNoIHBhcmEgY29ycmlnaXIgbyBjb21taXQgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTMKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInVzYXIgbWVuc2FnZW0gY29tIGZvcm1hdG8gYXV0b3NxdWFzaCBwYXJhIGVzbWFnYXIgbyBjb21taXQgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTQKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICJhZ29yYSBzb3UgZXUgbyBhdXRvciBkbyBjb21taXQgKHVzYWRvIGNvbSBDLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTUgYnVpbHRpbi9sb2cuYzoxNDIwIGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICJhZGljaW9uYXIgU2lnbmVkLW9mZi1ieToiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NgorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAidXNhciBmaWNoZWlybyBkZSBtb2RlbG8gZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTcKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiZm9yw6dhciBlZGnDp8OjbyBkbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5OAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgInByZWRlZmluacOnw6NvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTggYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJjb21vIHJldGlyYXIgZXNwYcOnb3MgZSAjY29tZW50w6FyaW9zIGRhIG1lbnNhZ2VtIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTkKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiaW5jbHVpciBzdGF0dXMgbm8gbW9kZWxvIGRhIG1lbnNhZ2VtIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjAxIGJ1aWx0aW4vbWVyZ2UuYzoyMzMgYnVpbHRpbi9wdWxsLmM6MTY2CisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAiYXNzaW5hciBvIGNvbW1pdCBjb20gR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDQKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAiT3DDp8O1ZXMgZGUgY29udGXDumRvIGRvIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjA1Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJzdWJtZXRlciB0b2RvcyBvcyBmaWNoZWlyb3MgYWx0ZXJhZG9zIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDYKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgImFkaWNpb25hciBmaWNoZWlyb3MgZXNwZWNpZmljYWRvcyBhbyDDrW5kaWNlIHBhcmEgc3VibWV0ZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwNworbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJhZGljaW9uYXIgZmljaGVpcm9zIGludGVyYXRpdmFtZW50ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjA4Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAiYWRpY2lvbmFyIGFsdGVyYcOnw7VlcyBpbnRlcmF0aXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwOQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAic3VibWV0ZXIgc29tZW50ZSBvcyBmaWNoZWlyb3MgZXNwZWNpZmljYWRvcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjEwCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgImlnbm9yYXIgcHJlLWNvbW1pdCBlIGNvbW1pdC1tc2cgaG9va3MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMQorbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgIm1vc3RyYXIgbyBxdWUgc2VyaWEgc3VibWV0aWRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjIKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgImVtZW5kYXIgbyBjb21taXQgYW50ZXJpb3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyMworbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiaWdub3JhciBwb3N0LXJld3JpdGUgaG9vayIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjI4Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAiYWNlaXRhciBvIHJlZ2lzdG8gZHVtYSBhbHRlcmHDp8OjbyB2YXppYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjMwCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiYWNlaXRhciBvIHJlZ2lzdG8gZHVtYSBhbHRlcmHDp8OjbyBjb20gdW1hIG1lbnNhZ2VtIHZhemlhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIGNvbW1pdCBIRUFEIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiRmljaGVpcm8gTUVSR0VfSEVBRCBjb3Jyb21waWRvICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTcxNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciBhIG1lbnNhZ2VtIGRlIGNvbW1pdDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIkEgYWJvcnRhciBvIGNvbW1pdDsgbsOjbyBlZGl0b3UgYSBtZW5zYWdlbS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIkEgYWJvcnRhciBvIGNvbW1pdCB1bWEgdmV6IHF1ZSBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBlc3TDoSB2YXppYS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzk3Cittc2dpZCAiIgorIlJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJPIHJlcG9zaXTDs3JpbyBmb2kgYXR1YWxpemFkbywgbWFzIG7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlclxuIgorIm8gZmljaGVpcm8gbmV3X2luZGV4LiBWZXJpZmlxdWUgc2UgbyBkaXNjbyBuw6NvIGVzdMOhIGNoZWlvXG4iCisiZSBxdWUgYSBxdW90YSBuw6NvIGZvaSBleGNlZGlkYSBlIGV4ZWN1dGUgXCJnaXQgcmVzZXQgSEVBRFwiIHBhcmEgcmVjdXBlcmFyLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo5Cittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTUKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiTG9jYWxpemHDp8OjbyBkbyBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NgorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgInVzYXIgZmljaGVpcm8gZGUgY29uZmlndXJhw6fDo28gZ2xvYmFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU3Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhciBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbyBkbyBzaXN0ZW1hIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgInVzYXIgZmljaGVpcm8gZGUgY29uZmlndXJhw6fDo28gZG8gcmVwb3NpdMOzcmlvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2FyIGZpY2hlaXJvIGRlIGNvbmZpZ3VyYcOnw6NvIGZvcm5lY2lkbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MAorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgImlkLWJsb2IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICJsZXIgY29uZmlndXJhw6fDo28gYSBwYXJ0aXIgZG8gb2JqZXRvIGJsb2IgZm9ybmVjaWRvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICJBw6fDo28iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjIKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0ZXIgdmFsb3I6IG5vbWUgW3JlZ2V4LWRvLXZhbG9yXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MworbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0ZXIgdG9kb3Mgb3MgdmFsb3JlczogY2hhdmUgW3JlZ2V4LWRvLXZhbG9yXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJvYnRlciB2YWxvcmVzIHBhcmEgYSByZWdleHA6IHJlZ2V4LWRvLW5vbWUgW3JlZ2V4LWRvLXZhbG9yXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NQorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgIm9idGVyIHZhbG9yIGRvIFVSTCBlc3BlY2lmaWNhZG86IHNlY3Rpb25bLnZhcl0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY2Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgIiIKKyJzdWJzdGl0dWlyIHRvZG9zIGFzIHZhcmnDoXZlaXMgY29ycmVzcG9uZGVudGVzOiBub21lIHZhbG9yIFtyZWdleC1kby12YWxvcl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjcKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgImFkaWNpb25hciB1bWEgbm92YSB2YXJpw6F2ZWw6IG5vbWUgdmFsb3IiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjgKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJyZW1vdmVyIHVtYSB2YXJpw6F2ZWw6IG5vbWUgW3JlZ2V4LWRvLXZhbG9yXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OQorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJyZW1vdmVyIHRvZGFzIGFzIGNvcnJlc3BvbmTDqm5jaWFzOiBub21lIFtyZWdleC1kby12YWxvcl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzAKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIm11ZGFyIG8gbm9tZSBkYSBzZWPDp8Ojbzogbm9tZS1hbnRpZ28gbm92by1ub21lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAicmVtb3ZlciB1bWEgc2Vjw6fDo286IG5vbWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzIKK21zZ2lkICJsaXN0IGFsbCIKK21zZ3N0ciAibGlzdGFyIHRvZG9zIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgImFicmlyIHVtIGVkaXRvciIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJlbmNvbnRyYXIgYSBjb3IgY29uZmlndXJhZGE6IHNsb3QgW3ByZWRlZmluacOnw6NvXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJlbmNvbnRyYXIgYSBkZWZpbmnDp8OjbyBkZSBjb3I6IHNsb3QgW3N0ZG91dC3DqS10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVGlwbyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NworbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAibyB2YWxvciDDqSBcInRydWVcIiAodmVyZGFkZWlybykgb3UgXCJmYWxzZVwiIChmYWxzbykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzgKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAibyB2YWxvciDDqSB1bSBuw7ptZXJvIGRlY2ltYWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzkKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgIm8gdmFsb3Igw6kgLS1ib29sIG91IC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgwCittc2dpZCAidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIKK21zZ3N0ciAibyB2YWxvciDDqSB1bSBjYW1pbmhvIChub21lIGR1bSBmaWNoZWlybyBvdSBkaXJldMOzcmlvKSIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MQorbXNnaWQgIk90aGVyIgorbXNnc3RyICJPdXRybyIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MgorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAidGVybWluYXIgdmFsb3JlcyBjb20gbyBieXRlIE5VTCIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MworbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAibW9zdHJhciBhcGVuYXMgb3Mgbm9tZXMgZGFzIHZhcmnDoXZlaXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODQKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgInJlc3BlaXRhciBkaXJldGl2YXMgZGUgaW5jbHVzw6NvIGFvIHBlc3F1aXNhciIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NQorbXNnaWQgInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiCittc2dzdHIgIiIKKyJtb3N0cmFyIGEgb3JpZ2VtIGRhIGNvbmZpZ3VyYcOnw6NvIChmaWNoZWlybywgZW50cmFkYSBwYWRyw6NvLCBibG9iLCBsaW5oYSBkZSAiCisiY29tYW5kb3MpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMyNworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhbmFsaXNhciBvIHZhbG9yIGRlIGNvciBwb3Igb21pc3PDo28iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIEVzdGUgw6kgbyBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbyBkbyBHaXQgZG8gdXRpbGl6YWRvci5cbiIKKyJbdXNlcl1cbiIKKyIjIEFkYXB0ZSBlIHJldGlyZSBvcyBjb21lbnTDoXJpb3MgZGFzIHNlZ3VpbnRlcyBsaW5oYXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgY3JpYXIgbyBmaWNoZWlybyBkZSBjb25maWd1cmHDp8OjbyAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCittc2dzdHIgIiIKKyJuw6NvIMOpIHBvc3PDrXZlbCBzdWJzdGl0dWlyIG3Dumx0aXBsb3MgdmFsb3JlcyBwb3IgdW0gw7puaWNvIHZhbG9yXG4iCisiXHRVc2UgdW1hIHJlZ2V4cCwgLS1hZGQgb3UgLS1yZXBsYWNlLWFsbCBwYXJhIGFsdGVyYXIgJXMuIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo4NgorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjk2Cittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICJpbXByaW1pciBkaW1lbnPDtWVzIGVtIGZvcm1hdG8gaW50ZWxpZ8OtdmVsIHBvciBodW1hbm9zIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTgKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPG9ww6fDtWVzPl0gWzxjb21taXQtZXRjPi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxOQorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxvcMOnw7Vlcz5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MworbXNnaWQgImhlYWQiCittc2dzdHIgImNhYmXDp2EiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MworbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICJsZXZlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTMKK21zZ2lkICJhbm5vdGF0ZWQiCittc2dzdHIgImFub3RhZG8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJhIHRhZyBhbm90YWRhICVzIG7Do28gZXN0w6EgZGlzcG9uw612ZWwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAiYSB0YWcgYW5vdGFkYSAlcyBuw6NvIHRlbSBuZW5odW0gbm9tZSBpbmNvcnBvcmFkbyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJhIHRhZyAnJXMnIGVzdMOhIGRlIGZhY3RvIGVtICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODMgYnVpbHRpbi9sb2cuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiVzIG7Do28gw6kgdW0gbm9tZSBkZSBvYmpldG8gdsOhbGlkbyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgbsOjbyDDqSB1bSBvYmpldG8gJyVzJyB2w6FsaWRvIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAibmVuaHVtYSB0YWcgY29ycmVzcG9uZGUgZXhhdGFtZW50ZSBhICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgIsOgIHByb2N1cmFyIGRhIGRlc2NyacOnw6NvIGRlICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgImEgcGVzcXVpc2EgdGVybWlub3UgZW0gJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIHVzYXIgdGFncyBhbm90YWRhcyBwYXJhIGRlc2NyZXZlciAnJXMnLlxuIgorIk5vIGVudGFudG8sIMOpIHBvc3PDrXZlbCBjb20gdGFncyBuw6NvIGFub3RhZGFzOiB0ZW50ZSAtLXRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCB1c2FyIHRhZ3MgcGFyYSBkZXNjcmV2ZXIgJyVzJy5cbiIKKyJUZW50ZSAtLWFsd2F5cywgb3UgY3JpZSBhbGd1bWFzIHRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIlbHUgY29tbWl0cyBwZXJjb3JyaWRvc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorIm1haXMgZGUgJWkgdGFncyBlbmNvbnRyYWRhczsgZm9yYW0gbGlzdGFkYXMgYXMgJWkgbWFpcyByZWNlbnRlc1xuIgorInBlc3F1aXNhIGludGVycm9tcGlkYSBlbSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDM4Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAibG9jYWxpemFyIGEgdGFnIHF1ZSB2ZW0gYXDDs3MgbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzkKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJkZXB1cmFyIGEgZXN0cmF0w6lnaWEgZGUgcHJvY3VyYSBwYXJhIHN0ZGVyciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0MAorbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICJ1c2FyIHVtYSByZWZlcsOqbmNpYSBxdWFscXVlciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0MQorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJ1c2FyIHVtYSB0YWcgcXVhbHF1ZXIsIG1lc21vIG7Do28gYW5vdGFkYSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0MgorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgInVzYXIgc2VtcHJlIGZvcm1hdG8gbG9uZ28iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDMKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgInNlZ3VpciBzw7MgbyBwcmltZWlybyBwYWkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NDYKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgY29ycmVzcG9uZMOqbmNpYXMgZXhhdGFzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQ4Cittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiY29uc2lkZXJhciBhcyA8bj4gdGFncyBtYWlzIHJlY2VudGVzIChwcmVkZWZpbmnDp8OjbzogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDUwCittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiYXBlbmFzIGNvbnNpZGVyYXIgdGFncyBxdWUgY29ycmVzcG9uZGFtIGFvIDxwYWRyw6NvPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1MgorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibsOjbyBjb25zaWRlcmFyIHRhZ3MgcXVlIGNvcnJlc3BvbmRhbSBhbyA8cGFkcsOjbz4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTQgYnVpbHRpbi9uYW1lLXJldi5jOjM1NworbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAibW9zdHJhciBvYmpldG9zIGRlIGNvbW1pdCBhYnJldmlhZG9zIGVtIHJlY3Vyc28iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTUgYnVpbHRpbi9kZXNjcmliZS5jOjQ1OAorbXNnaWQgIm1hcmsiCittc2dzdHIgIm1hcmNhIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU2Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICIiCisiYWNyZXNjZW50YXIgPG1hcmNhPiBzZSBhIMOhcnZvcmUgZGUgdHJhYmFsaG8gY29udGl2ZXIgYWx0ZXJhw6fDtWVzICIKKyIocHJlZGVmaW5pw6fDo286IFwiLWRpcnR5XCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU5Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiCittc2dzdHIgIiIKKyJhY3Jlc2NlbnRhciA8bWFyY2E+IG5vIGNhc28gZGUgw6Fydm9yZSBkZSB0cmFiYWxobyBxdWVicmFkYSAocHJlZGVmaW5pw6fDo286IFwiLSIKKyJicm9rZW5cIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NzcKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIMOpIGluY29tcGF0w612ZWwgY29tIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MDYKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiTmVuaHVtIG5vbWUgZW5jb250cmFkbywgbsOjbyDDqSBwb3Nzw612ZWwgZGVzY3JldmVyLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0OQorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWRpcnR5IMOpIGluY29tcGF0w612ZWwgY29tIGNvbW1pdHMgb3Ugc2VtZWxoYW50ZXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTEKK21zZ2lkICItLWJyb2tlbiBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tYnJva2VuIMOpIGluY29tcGF0w612ZWwgY29tIGNvbW1pdHMgb3Ugc2VtZWxoYW50ZXMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMnOiBuw6NvIMOpIHVtIGZpY2hlaXJvIHJlZ3VsYXIgbmVtIHVtYSBsaWdhw6fDo28gc2ltYsOzbGljYSIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3DDp8OjbyBpbnbDoWxpZGE6ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzozNTgKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTsOjbyDDqSB1bSByZXBvc2l0w7NyaW8gZ2l0IgorCisjOiBidWlsdGluL2RpZmYuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIm9iamV0byBpbnbDoWxpZG8gJyVzJyBmb3JuZWNpZG8uIgorCisjOiBidWlsdGluL2RpZmYuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAibWFpcyBkbyBxdWUgZG9pcyBibG9icyBmb3JuZWNpZG9zOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAib2JqZXRvIHNlbSB0cmF0YW1lbnRvICclcycgZm9ybmVjaWRvLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI4Cittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzxvcMOnw7Vlcz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8Y2FtaW5obz4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgImZhbGhhOiAlZCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIGEgbGlnYcOnw6NvIHNpbWLDs2xpY2EgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgc3ltbGluayBmaWxlICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gZmljaGVpcm8gZGUgbGlnYcOnw6NvIHNpbWLDs2xpY2EgJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gb2JqZXRvICVzIGRhIGxpZ2HDp8OjbyBzaW1iw7NsaWNhICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Mzk1Cittc2dpZCAiIgorImNvbWJpbmVkIGRpZmYgZm9ybWF0cygnLWMnIGFuZCAnLS1jYycpIGFyZSBub3Qgc3VwcG9ydGVkIGluXG4iCisiZGlyZWN0b3J5IGRpZmYgbW9kZSgnLWQnIGFuZCAnLS1kaXItZGlmZicpLiIKK21zZ3N0ciAiIgorImZvcm1hdG9zIGRpZmYgY29tYmluYWRvKCctYycgZSAnLS1jYycpIG7Do28gc8OjbyBzdXBvcnRhZG9zIGVtXG4iCisibW9kbyBkaWZmIGRpcmV0w7NyaW8gKCctZCcgZSAnLS1kaXItZGlmZicpLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAiYW1ib3Mgb3MgZmljaGVpcm9zIG1vZGlmaWNhZG9zOiAnJXMnIGUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MTEKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAiZmljaGVpcm8gZGUgw6Fydm9yZSBkZSB0cmFiYWxobyBmb2kgZGVpeGFkby4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICJleGlzdGVtIGZpY2hlaXJvcyB0ZW1wb3LDoXJpb3MgZW0gJyVzJy4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MjMKK21zZ2lkICJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIKK21zZ3N0ciAicG9kZSBxdWVyZXIgbGltcGFyIG91IHJlY3VwZXLDoS1sb3MuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjY5Cittc2dpZCAidXNlIGBkaWZmLmd1aXRvb2xgIGluc3RlYWQgb2YgYGRpZmYudG9vbGAiCittc2dzdHIgInVzZSAnZGlmZi5ndWl0b29sJyBlbSB2ZXogZGUgJ2RpZmYudG9vbCciCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NzEKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAiZWZldHVhciBkaWZmIGRpcmV0w7NyaW8gY29tcGxldG8iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NzMKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgIm7Do28gcGVyZ3VudGFyIGFudGVzIGRlIGxhbsOnYXIgdW1hIGZlcnJhbWVudGEgZGlmZiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY3OQorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICJ1c2FyIHN5bWxpbmtzIG5vIG1vZGkgZGlyLWRpZmYiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2ODAKK21zZ2lkICI8dG9vbD4iCittc2dzdHIgIjxmZXJyYW1lbnRhPiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY4MQorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAidXNhciBhIGZlcnJhbWVudGEgZGlmZiBlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2ODMKK21zZ2lkICJwcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAiCittc2dzdHIgIiIKKyJpbXByaW1pciB1bWEgbGlzdGEgZGUgZmVycmFtZW50YXMgZGlmZiBxdWUgcG9kZW0gc2VyIHVzYWRhcyBjb20gJy0tdG9vbCciCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2ODYKK21zZ2lkICIiCisibWFrZSAnZ2l0LWRpZmZ0b29sJyBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbiAtIHplcm8gZXhpdCAiCisiY29kZSIKK21zZ3N0ciAiIgorImZhemVyIGNvbSBxdWUgJ2dpdC1kaWZmdG9vbCcgdGVybWluZSBxdWFuZG8gdW1hIGZlcnJhbWVudGEgZGlmZiBpbnZvY2FkYSAiCisicmV0b3JuYSB1bSBjw7NkaWdvIGRlIHNhw61kYSBuw6NvIG51bG8iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2ODgKK21zZ2lkICI8Y29tbWFuZD4iCittc2dzdHIgIjxjb21hbmRvPiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY4OQorbXNnaWQgInNwZWNpZnkgYSBjdXN0b20gY29tbWFuZCBmb3Igdmlld2luZyBkaWZmcyIKK21zZ3N0ciAiZXNwZWNpZmljYXIgdW0gY29tYW5kbyBwZXJzb25hbGl6YWRvIHBhcmEgdmVyIGRpZmZzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEzCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICJuZW5odW1hIDxmZXJyYW1lbnRhPiBkYWRhIGEgLS10b29sPTxmZXJyYW1lbnRhPiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcyMAorbXNnaWQgIm5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPiIKK21zZ3N0ciAibmVuaHVtIDxjbWQ+IGRhZG8gYSAtLWV4dGNtZD08Y21kPiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI1Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtvcMOnw7Vlcy1kZS1yZXYtbGlzdF0iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODAKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICJtb3N0cmFyIHByb2dyZXNzbyBkZXBvaXMgZGUgPG4+IG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODIKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgInNlbGVjaW9uYXIgbyB0cmF0YW1lbnRvIGRlIHRhZ3MgYXNzaW5hZGFzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg1Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAic2VsZWNpb25hciBvIHRyYXRhbWVudG8gZGUgdGFncyBxdWUgYXBvbnRlbSBwYXJhIG9iamV0b3MgZmlsdHJhZG9zIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg4Cittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIkNhcHR1cmFyIG1hcmNhcyBuZXN0ZSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5MAorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAiSW1wb3J0YXIgbWFyY2FzIGRlc3RlIGZpY2hlaXJvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTkyCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIkludmVudGFyIHVtIGF1dG9yIGRlIHRhZyBwYXJhIHRhZ3MgcXVlIG7Do28gdGVuaGFtIHVtIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk0Cittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIk1vc3RyYXIgYSDDoXJ2b3JlIGNvbXBsZXRhIHBhcmEgY2FkYSBjb21taXQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTYKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiVXNhciBhIGZ1bmNpb25hbGlkYWRlIGRvbmUgcGFyYSB0ZXJtaW5hciBvIGZsdXhvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk3Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJJZ25vcmFyIGEgZXhpYmnDp8OjbyBkZSBkYWRvcyBkZSBibG9iIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk4Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAiZXNwZWNpZmljYWRvciBkZSByZWZlcsOqbmNpYSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5OQorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAiQXBsaWNhciBvIGVzcGVjaWZpY2Fkb3IgZGUgcmVmZXLDqm5jaWEgYSByZWZlcsOqbmNpYXMgZXhwb3J0YWRhcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMDAKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICJhbm9uaW1pemFyIHNhw61kYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIxCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGZldGNoIFs8b3DDp8O1ZXM+XSBbPHJlcG9zaXTDs3Jpbz4gWzxlc3BlY2lmaWNhZG9yLWRlLXJlZmVyw6puY2lhPi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjIKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8b3DDp8O1ZXM+XSA8Z3J1cG8+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjMKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcMOnw7Vlcz5dIFsoPHJlcG9zaXTDs3Jpbz4gfCA8Z3J1cG8+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNAorbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8b3DDp8O1ZXM+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk1IGJ1aWx0aW4vcHVsbC5jOjE3NQorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIm9idGVyIGRlIHRvZG9zIG9zIHJlbW90b3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NyBidWlsdGluL3B1bGwuYzoxNzgKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgImFjcmVzY2VudGFyIGEgLmdpdC9GRVRDSF9IRUFEIGVtIHZleiBkZSBzdWJzdGl0dWlyIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTkgYnVpbHRpbi9wdWxsLmM6MTgxCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICJjYW1pbmhvIHBhcmEgbyBjb21hbmRvIHVwbG9hZCBwYWNrIG5vIHJlbW90byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMCBidWlsdGluL3B1bGwuYzoxODMKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJmb3LDp2FyIGEgc3Vic3RpdHVpw6fDo28gZG8gcmFtbyBsb2NhbCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMgorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAib2J0ZXIgZGUgbcO6bHRpcGxvcyByZW1vdG9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA0IGJ1aWx0aW4vcHVsbC5jOjE4NQorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIm9idGVyIHRvZGFzIGFzIHRhZ3MgZSBvYmpldG9zIGFzc29jaWFkb3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDYKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIm7Do28gb2J0ZXIgdG9kYXMgYXMgdGFncyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwOAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIm7Dum1lcm8gZGUgc3VibcOzZHVsb3Mgb2J0aWRvcyBlbSBwYXJhbGVsbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMCBidWlsdGluL3B1bGwuYzoxODgKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAiIgorImVsaW1pbmFyIG9zIHJhbW9zIGRlIG1vbml0b3JpemHDp8OjbyByZW1vdG9zIHF1ZSBqw6EgbsOjbyBleGlzdGVtIG5vIHJlbW90byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMSBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgIm9uLWRlbWFuZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMiBidWlsdGluL3B1bGwuYzoxOTIKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250cm9sYXIgYSBvYnRlbsOnw6NvIHJlY3Vyc2l2YSBkZSBzdWJtw7NkdWxvcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNiBidWlsdGluL3B1bGwuYzoyMDAKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAibWFudGVyIG8gcGFjb3RlIHRyYW5zZmVyaWRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgInBlcm1pdGlyIGEgYXR1YWxpemHDp8OjbyBkYSByZWZlcsOqbmNpYSBIRUFEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIxIGJ1aWx0aW4vZmV0Y2guYzoxMjcgYnVpbHRpbi9wdWxsLmM6MjAzCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAiYXByb2Z1bmRhciBvIGhpc3TDs3JpY28gZGUgdW0gY2xvbmUgcmFzbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICJhcHJvZnVuZGFyIG8gaGlzdMOzcmljbyBkZSByZXBvc2l0w7NyaW8gcmFzbyBjb20gYmFzZSBuYSBkYXRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI5IGJ1aWx0aW4vcHVsbC5jOjIwNgorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICJjb252ZXJ0ZXIgbnVtIHJlcG9zaXTDs3JpbyBjb21wbGV0byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMSBidWlsdGluL2xvZy5jOjE0NDAKK21zZ2lkICJkaXIiCittc2dzdHIgImRpciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMgorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgInByZWNlZGVyIGlzdG8gYW8gY2FtaW5obyBkbyBzdWJtw7NkdWxvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM1Cittc2dpZCAiZGVmYXVsdCBtb2RlIGZvciByZWN1cnNpb24iCittc2dzdHIgIm1vZG8gcmVjdXJzaXZvIHBvciBvbWlzc8OjbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzNyBidWlsdGluL3B1bGwuYzoyMDkKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgImFjZWl0YXIgcmVmZXLDqm5jaWEgcXVlIGF0dWFsaXplbSAuZ2l0L3NoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzggYnVpbHRpbi9wdWxsLmM6MjExCittc2dpZCAicmVmbWFwIgorbXNnc3RyICJtYXBhIGRlIHJlZmVyw6puY2lhcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOSBidWlsdGluL3B1bGwuYzoyMTIKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAiZXNwZWNpZmljYXIgbWFwYSBkZSByZWZlcsOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozOTUKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiUmVmZXLDqm5jaWEgcmVtb3RhIEhFQUQgbsOjbyBlbmNvbnRyYWRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZ3VyYXRpb24gZmV0Y2gub3V0cHV0IGNvbnRhaW5zIGludmFsaWQgdmFsdWUgJXMiCittc2dzdHIgImEgY29uZmlndXJhw6fDo28gZmV0Y2gub3VwdXQgY29udMOpbSBvIHZhbG9yIGludsOhbGlkbyAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJvYmpldG8gJXMgbsOjbyBlbmNvbnRyYWRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjEwCittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbYXR1YWxpemFkb10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MjMgYnVpbHRpbi9mZXRjaC5jOjcwMworbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyZWplaXRhZG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjI0Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIG9idGVyIG5vIHJhbW8gYXR1YWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MzMKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlt0YWcgYXR1YWxpemFkYV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MzQgYnVpbHRpbi9mZXRjaC5jOjY2NyBidWlsdGluL2ZldGNoLmM6NjgzCisjOiBidWlsdGluL2ZldGNoLmM6Njk4Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGF0dWFsaXphciBhIHJlZmVyw6puY2lhIGxvY2FsIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjUzCittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbbm92YSB0YWddIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjU2Cittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJbbm92byByYW1vXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1OQorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW25vdmEgcmVmZXLDqm5jaWFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6Njk4Cittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiYXR1YWxpemHDp8OjbyBmb3LDp2FkYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcwMworbXNnaWQgIm5vbi1mYXN0LWZvcndhcmQiCittc2dzdHIgInNlbSBhdmFuw6dvLXLDoXBpZG8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyBuw6NvIGVudmlvdSB0b2RvcyBvcyBvYmpldG9zIG5lY2Vzc8Ohcmlvc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiVzIHJlamVpdGFkbywgcG9ycXVlIGFzIHJhw616ZXMgcmFzYXMgbsOjbyBwb2RlbSBzZXIgYXR1YWxpemFkYXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTUgYnVpbHRpbi9mZXRjaC5jOjk1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiRGUgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyJhbGd1bWFzIHJlZmVyw6puY2lhcyBsb2NhaXMgbsOjbyBwdWRlcmFtIHNlciBhdHVhbGl6YWRhczsgdGVudGUgZXhlY3V0YXJcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHBhcmEgcmVtb3ZlciBhbGd1bSByYW1vIGFudGlnbyBlbSBjb25mbGl0byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgZmljYXLDoSBzdXNwZW5zbykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgZmljb3Ugc3VzcGVuc28pIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTU0Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbZWxpbWluYWRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk1NSBidWlsdGluL3JlbW90ZS5jOjEwMjIKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihuZW5odW0pIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiT2J0ZW7Dp8OjbyBkZSBvYmpldG9zIG5vIHJhbW8gYXR1YWwgJXMgZGUgdW0gcmVwb3NpdMOzcmlvIG7Do28gbnUgcmVjdXNhZGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiTyB2YWxvciBcIiUyJHNcIiBkYSBvcMOnw6NvIFwiJTEkc1wiIG7Do28gw6kgdsOhbGlkbyBlbSAlMyRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIk9ww6fDo28gXCIlc1wiIGlnbm9yYWRhIGVtICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiCittc2dzdHIgIk7Do28gc2VpIGNvbW8gb2J0ZXIgZGUgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIkEgb2J0ZXIgZGUgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMzggYnVpbHRpbi9yZW1vdGUuYzo5NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBkZSAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNTYKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5lbmh1bSByZXBvc2l0w7NyaW8gcmVtb3RvIGVzcGVjaWZpY2Fkby4gRXNwZWNpZmlxdWUgdW0gVVJMIG91XG4iCisibyBub21lIHJlbW90byBhIHBhcnRpciBkbyBxdWFsIGFzIG5vdmFzIHJldmlzw7VlcyBkZXZlbSBzZXIgb2J0aWRhcy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjc5Cittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiRGV2ZSBlc3BlY2lmaWNhciB1bSBub21lIHBhcmEgYSB0YWcuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTMyMQorbXNnaWQgIk5lZ2F0aXZlIGRlcHRoIGluIC0tZGVlcGVuIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk7Do28gw6kgc3Vwb3J0YWRhIHByb2Z1bmRpZGFkZSBuZWdhdGl2YSBlbSAtLWRlZXBlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMjMKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiBlIC0tZGVwdGggc8OjbyBtdXR1YW1lbnRlIGV4Y2x1c2l2b3MiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzI4Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGggZSAtLXVuc2hhbGxvdyBuw6NvIHBvZGVtIHNlciB1c2Fkb3MganVudG9zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTMzMAorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJ1c2FyIC0tdW5zaGFsbG93IG51bSByZXBvc2l0w7NyaW8gY29tcGxldG8gbsOjbyBmYXogc2VudGlkbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzNTIKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbsOjbyBsZXZhIHVtIHJlcG9zaXTDs3JpbyBjb21vIGFyZ3VtZW50byIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzNTQKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIG7Do28gZmF6IHNlbnRpZG8gY29tIGVzcGVjaWZpY2Fkb3JlcyBkZSByZWZlcsOqbmNpYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiTyByZW1vdG8gb3UgZ3J1cG8gcmVtb3RvIG7Do28gZXhpc3RlOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzNzMKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIk7Do28gZmF6IHNlbnRpZG8gb2J0ZXIgdW0gZ3J1cG8gZSBlc3BlY2lmaWNhciB1bWEgcmVmZXLDqm5jaWEiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE0Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lbnNhZ2VtPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgIgorIjxmaWNoZWlybz5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjMKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgInBvdm9hciBvIHJlZ2lzdG8gY29tLCBubyBtw6F4aW1vLCA8bj4gZW50cmFkYXMgZG8gc2hvcnRsb2ciCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2NgorbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgImFsaWFzIGRlIC0tbG9nIChvYnNvbGV0bykiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2OQorbXNnaWQgInRleHQiCittc2dzdHIgInRleHRvIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzAKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgInVzYXIgPHRleHRvPiBubyBpbsOtY2lvIGRhIG1lbnNhZ2VtIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzEKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiZmljaGVpcm8gYSBsZXIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxvcMOnw7Vlcz5dIFs8cGFkcsOjbz5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjcKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiIgorImVudm9sdmVyIG9zIG1hcmNhZG9yZXMgZGUgcG9zacOnw6NvIGVtIGFzcGFzIGRlIGZvcm1hIGFkZXF1YWRhIHBhcmEgIgorImludGVycHJldGFkb3JlcyBkZSBjb21hbmRvcyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOQorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAiZW52b2x2ZXIgb3MgbWFyY2Fkb3JlcyBkZSBwb3Npw6fDo28gZW0gYXNwYXMgZGUgZm9ybWEgYWRlcXVhZGEgcGFyYSBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMxCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIiIKKyJlbnZvbHZlciBvcyBtYXJjYWRvcmVzIGRlIHBvc2nDp8OjbyBlbSBhc3BhcyBkZSBmb3JtYSBhZGVxdWFkYSBwYXJhIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMworbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICJlbnZvbHZlciBvcyBtYXJjYWRvcmVzIGRlIHBvc2nDp8OjbyBlbSBhc3BhcyBkZSBmb3JtYSBhZGVxdWFkYSBwYXJhIFRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNgorbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICJtb3N0cmFyIGFwZW5hcyA8bj4gcmVmZXLDqm5jaWFzIGNvcnJlc3BvbmRpZGFzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQxCittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgcmVmZXLDqm5jaWFzIHF1ZSBhcG9udGVtIHBhcmEgbyBvYmpldG8gZm9ybmVjaWRvIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQzCittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIHJlZmVyZW5jaWFkYXMgaW50ZWdyYWRhcyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgcmVmZXLDqm5jaWFzIG7Do28gaW50ZWdyYWRhIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIHJlZmVyw6puY2lhcyBxdWUgY29udGVuaGFtIG8gY29tbWl0IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIHJlZmVyw6puY2lhcyBxdWUgbsOjbyBjb250ZW5oYW0gbyBjb21taXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU1NAorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAiQSB2ZXJpZmljYXIgZGlyZXTDs3Jpb3MgZGUgb2JqZXRvcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQ2Cittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgWzxvcMOnw7Vlcz5dIFs8b2JqZXRvPi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1MgorbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhciBvYmpldG9zIGluYWxjYW7Dp8OhdmVpcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjUzCittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICJtb3N0cmFyIG9iamV0b3Mgc3VzcGVuc29zIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTQKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAibW9zdHJhciB0YWdzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTUKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAibW9zdHJhciBuw7NzIHJhaXoiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1NgorbXNnaWQgIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIgorbXNnc3RyICJjb25zaWRlcmFyIG9iamV0b3MgZG8gw61uZGljZSBjb21vIG7Ds3MgY2FiZcOnYSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU3Cittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJjb25zaWRlcmFyIG9zIHJlZmxvZ3MgY29tbyBuw7NzIGNhYmXDp2EgKHByZWRlZmluacOnw6NvKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU4Cittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgImNvbnNpZGVyYXIgdGFtYsOpbSBwYWNvdGVzIGUgb2JqZXRvcyBzb2JyZXNzYWxlbnRlIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTkKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAidmVyaWZpY2FyIHPDsyBhIGNvbmV0aXZpZGFkZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjYwCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJhdGl2YXIgdmVyaWZpY2HDp8OjbyBtYWlzIHJpZ29yb3NhIgorCisjOiBidWlsdGluL2ZzY2suYzo2NjIKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAiZXNjcmV2ZXIgb2JqZXRvcyBzdXNwZW5zb3MgZW0gLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo2NjMgYnVpbHRpbi9wcnVuZS5jOjEwNworbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgIm1vc3RyYXIgcHJvZ3Jlc3NvIgorCisjOiBidWlsdGluL2ZzY2suYzo2NjQKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJtb3N0cmFyIG5vbWVzIHZlcmJvc29zIGRlIG9iamV0b3MgaW5hbGNhbsOnw6F2ZWlzIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICJBIHZlcmlmaWNhciBvYmpldG9zIgorCisjOiBidWlsdGluL2djLmM6MjUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICJmYWxoYSBhbyBpbnZvY2FyIGZzdGF0IHNvYnJlICVzOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4ndCBzdGF0ICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBpbnZvY2FyIHN0YXQgc29icmUgJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiBQbGVhc2UgY29ycmVjdCB0aGUgcm9vdCBjYXVzZVxuIgorImFuZCByZW1vdmUgJXMuXG4iCisiQXV0b21hdGljIGNsZWFudXAgd2lsbCBub3QgYmUgcGVyZm9ybWVkIHVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJBIMO6bHRpbWEgZXhlY3XDp8OjbyBkbyBnYyByZXBvcnRvdSBvIHNlZ3VpbnRlLlxuIgorIkNvcnJpamEgYSBvcmlnZW0gZG8gcHJvYmxlbWEgZSByZW1vdmEgJXMuXG4iCisiQSBsaW1wZXphIGF1dG9tw6F0aWNhIG7Do28gc2Vyw6EgcmVhbGl6YWRhIGVucXVhbnRvIG8gZmljaGVpcm8gZXhpc3Rpci5cbiIKKyJcbiIKKyIlcyIKKworIzogYnVpbHRpbi9nYy5jOjM1NAorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJlbGltaW5hciBmaWNoZWlyb3MgbsOjbyByZWZlcmVuY2lhZG9zIgorCisjOiBidWlsdGluL2djLmM6MzU2Cittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJzZXIgbWFpcyBtaW51Y2lvc28gKGF1bWVudGEgbyB0ZW1wbyBkZSBleGVjdcOnw6NvKSIKKworIzogYnVpbHRpbi9nYy5jOjM1NworbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgImF0aXZhciBtb2RvIGF1dG8tZ2MiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNTgKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiZm9yw6dhciBhIGV4ZWN1w6fDo28gZG8gZ2MgbWVzbW8gcXVlIGhhamEgb3V0cm8gZ2MgYSBleGVjdXRhciIKKworIzogYnVpbHRpbi9nYy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZ2MubG9nZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJmYWxoYSBhbyBhbmFsaXNhciBvIHZhbG9yICVzIGRlIGdjLmxvZ2V4cGlyeSIKKworIzogYnVpbHRpbi9nYy5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorIkEgYXV0b2NvbXBhY3RhciBvIHJlcG9zaXTDs3JpbyBlbSBzZWd1bmRvIHBsYW5vIHBhcmEgb2J0ZXIgdW0gbWVsaG9yICIKKyJkZXNlbXBlbmhvLlxuIgorCisjOiBidWlsdGluL2djLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiQSBhdXRvY29tcGFjdGFyIG8gcmVwb3NpdMOzcmlvIHBhcmEgb2J0ZXIgdW0gbWVsaG9yIGRlc2VtcGVuaG8uXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiQ29uc3VsdGUgXCJnaXQgaGVscCBnY1wiIHBhcmEgbGVyIHNvYnJlIG1hbnV0ZW7Dp8OjbyBtYW51YWwuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyJnYyBqw6EgYSBleGVjdXRhciBuYSBtw6FxdWluYSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBzZSBuw6NvIGZvciBvICIKKyJjYXNvKSIKKworIzogYnVpbHRpbi9nYy5jOjQ3MQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorIkV4aXN0ZW0gZGVtYXNpYWRvcyBvYmpldG8gc29sdG9zIGluYWxjYW7Dp8OhdmVpczsgZXhlY3V0ZSAnZ2l0IHBydW5lJyBwYXJhIG9zICIKKyJyZW1vdmVyLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjUKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs8b3DDp8O1ZXM+XSBbLWVdIDxwYWRyw6NvPiBbPHJldj4uLi5dIFtbLS1dIDxjYW1pbmhvPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IGZhbGhhIGFvIGNyaWFyIHRocmVhZDogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIKK21zZ3N0ciAibyBuw7ptZXJvIGRlIHRocmVhZHMgZXNwZWNpZmljYWRvIGVtICUyJHMgw6kgaW52w6FsaWRvICglMSRkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzY5IGJ1aWx0aW4vZ3JlcC5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgYSDDoXJ2b3JlICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZWZldHVhciBncmVwIGRlIG9iamV0b3MgZG8gdGlwbyAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkzCisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImEgb3DDp8OjbyAnJWMnIGVzcGVyYSB1bSB2YWxvciBudW3DqXJpY28iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MAorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgInByb2N1cmFyIG5vIMOtbmRpY2UgZW0gdmV6IGRlIHByb2N1cmFyIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MgorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICJwcm9jdXJhciBlbSBjb250ZcO6ZG9zIG7Do28gZ2VyaWRvcyBwZWxvIGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTg0Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJwcm9jdXJhciBlbSBmaWNoZWlyb3MgY29udHJvbGFkb3MgZSBuw6NvIGNvbnRyb2xhZG9zIgorCisjOiBidWlsdGluL2dyZXAuYzo5ODYKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImlnbm9yYXIgZmljaGVpcm9zIGVzcGVjaWZpY2Fkb3MgdmlhICcuZ2l0aWdub3JlJyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTg4Cittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICJwcm9jdXJhciByZWN1cnNpdmFtZW50ZSBlbSBjYWRhIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5MAorbXNnaWQgImJhc2VuYW1lIgorbXNnc3RyICJub21lYmFzZSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTkxCittc2dpZCAicHJlcGVuZCBwYXJlbnQgcHJvamVjdCdzIGJhc2VuYW1lIHRvIG91dHB1dCIKK21zZ3N0ciAicHJlY2VkZXIgbyBub21lYmFzZSBkbyBwcm9qZXRvIHBhaSBuYSBzYcOtZGEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5NAorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJtb3N0cmFyIGxpbmhhcyBuw6NvIGNvcnJlc3BvbmRpZGFzIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTYKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICJuw6NvIGRpZmVyZW5jaWFyIG1hacO6c2N1bGFzIGRlIG1pbsO6c2N1bGFzIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTgKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAiY29ycmVzcG9uZGVyIHBhZHLDtWVzIGFwZW5hcyBhIHBhbGF2cmFzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDAwCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAicHJvY2Vzc2FyIGZpY2hlaXJvcyBiaW7DoXJpb3MgY29tbyB0ZXh0byIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwMgorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAiaWdub3JhciBmaWNoZWlyb3MgYmluw6FyaW9zIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDA1Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICJwcm9jZXNzYXIgZmljaGVpcm9zIGJpbsOhcmlvcyBjb20gZmlsdHJvcyB0ZXh0Y29udiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAwNworbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAiZGVzY2VyIG5vIG3DoXhpbW8gYXTDqSA8cHJvZnVuZGlkYWRlPiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAxMQorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1c2FyIGV4cHJlc3PDtWVzIHJlZ3VsYXJlcyBlc3RlbmRpZGFzIGRvIFBPU0lYIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDE0Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJ1c2FyIGV4cHJlc3PDtWVzIHJlZ3VsYXJlcyBiw6FzaWNhcyBkbyBQT1NJWCAocHJlZGVmaW5pw6fDo28pIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDE3Cittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgImludGVycHJldGFyIHBhZHLDtWVzIGNvbW8gY2FkZWlhcyBkZSBjYXJhY3RlcmVzIGZpeGFzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDIwCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1c2FyIGV4cHJlc3PDtWVzIHJlZ3VsYXJlcyBjb21wYXTDrXZlaXMgY29tIFBlcmwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjMKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAibW9zdHJhciBuw7ptZXJvcyBkZSBsaW5oYSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyNAorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJuw6NvIG1vc3RyYXIgbm9tZXMgZGUgZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMjUKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAibW9zdHJhciBub21lcyBkZSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyNworbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIm1vc3RyYXIgbm9tZXMgZGUgZmljaGVpcm8gcmVsYXRpdmFtZW50ZSBhbyBkaXJldMOzcmlvIHN1cGVyaW9yIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI5Cittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJtb3N0cmFyIGFwZW5hcyBub21lcyBkZSBmaWNoZWlybyBlbSB2ZXogZGUgbGluaGFzIGNvcnJlc3BvbmRpZGFzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDMxCittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgInNpbsOzbmltbyBkZSAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNAorbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAibW9zdHJhciBhcGVuYXMgbm9tZXMgZGUgZmljaGVpcm8gc2VtIGNvcnJlc3BvbmTDqm5jaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzYKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJpbXByaW1pciBOVUwgZGVwb2lzIGRvcyBub21lcyBkZSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzOAorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm1vc3RyYXIgbyBuw7ptZXJvIGRlIGNvcnJlc3BvbmTDqm5jaWFzIGVtIHZleiBkYXMgbGluaGEgY29ycmVzcG9uZGlkYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzkKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAicmVhbMOnYXIgY29ycmVzcG9uZMOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNDEKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiIgorImltcHJpbWlyIHVtYSBsaW5oYSBlbSBicmFuY28gZW50cmUgY29ycmVzcG9uZMOqbmNpYXMgZGUgZGlmZXJlbnRlcyBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNDMKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisibW9zdHJhciBzw7MgdW1hIHZleiBvIG5vbWUgZG8gZmljaGVpcm8gYWNpbWEgZGFzIGNvcnJlc3BvbmTDqm5jaWFzIGRlbnRybyBkbyAiCisibWVzbW8gZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNDYKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAibW9zdHJhciA8bj4gbGluaGFzIGRlIGNvbnRleHRvIGFudGVzIGUgZGVwb2lzIGRhcyBjb3JyZXNwb25kw6puY2lhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA0OQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYXIgPG4+IGxpbmhhcyBkZSBjb250ZXh0byBhbnRlcyBkYXMgY29ycmVzcG9uZMOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNTEKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYXIgPG4+IGxpbmhhcyBkZSBjb250ZXh0byBkZXBvaXMgZGFzIGNvcnJlc3BvbmTDqm5jaWFzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDUzCittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAidXNhciA8bj4gdGhyZWFkcyBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1NAorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgImF0YWxobyBwYXJhIC1DIE5VTSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA1NworbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYXIgdW1hIGxpbmhhIGNvbSBvIG5vbWUgZGEgZnVuw6fDo28gYW50ZXMgZGFzIGNvcnJlc3BvbmTDqm5jaWFzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDU5Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgIm1vc3RyYXIgYSBmdW7Dp8OjbyBjaXJjdW5kYW50ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2MgorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICJsZXIgcGFkcsO1ZXMgZG8gZmljaGVpcm8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjQKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgInByb2N1cmFyIDxwYWRyw6NvPiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2NgorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgImNvbWJpbmFyIHBhZHLDtWVzIGVzcGVjaWZpY2Fkb3MgY29tIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDc4Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgImluZGljYXIgcGFkcsOjbyBlbmNvbnRyYWRvIG5vIHZhbG9yIGRlIHNhw61kYSwgbWFzIG7Do28gaW1wcmltaXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwODAKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICIiCisibW9zdHJhciBhcGVuYXMgY29ycmVzcG9uZMOqbmNpYXMgZGUgZmljaGVpcm8gcXVlIHRlbmhhbSB0b2RvcyBvcyBwYWRyw7VlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA4MgorbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICJtb3N0cmFyIMOhcnZvcmUgZGUgYW5hbGlzZSBkYSBleHByZXNzw7VlcyBncmVwIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDg2Cittc2dpZCAicGFnZXIiCittc2dzdHIgInBhZ2luYWRvciIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA4NgorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJtb3N0cmFyIGZpY2hlaXJvcyBjb20gY29ycmVzcG9uZMOqbmNpYXMgbm8gcGFnaW5hZG9yIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDg5Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICJwZXJtaXRpciBpbnZvY2FyIGdyZXAoMSkgKGlnbm9yYWRvIG5lc3RhIGNvbXBpbGHDp8OjbykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExNTMKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuLiIKK21zZ3N0ciAibmVuaHVtIHBhZHLDo28gZm9ybmVjaWRvLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTE4OQorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICItLW5vLWluZGV4IG91IC0tdW50cmFja2VkIG7Do28gcG9kZW0gc2VyIHVzYWRvcyBlbSByZXZpc8O1ZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgcmVzb2x2ZXIgcmV2aXPDo286ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMjI4IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAibsO6bWVybyBkZSB0aHJlYWRzIGVzcGVjaWZpY2FkbyBpbnbDoWxpZG8gKCVkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTI1MQorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIHPDsyBmdW5jaW9uYSBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL2dyZXAuYzoxMjc0Cittc2dpZCAib3B0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCAtLXJlY3Vyc2Utc3VibW9kdWxlcy4iCittc2dzdHIgIm9ww6fDo28gbsOjbyBzdXBvcnRhZGEgY29tIC0tcmVjdXJzZS1zdWJtb2R1bGVzLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTI4MAorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIi0tY2FjaGVkIG91IC0tdW50cmFja2VkIG7Do28gcG9kZW0gc2VyIHVzYWRvcyBjb20gLS1uby1pbmRleC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEyODYKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cy4iCittc2dzdHIgIiIKKyItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBuw6NvIHBvZGVtIHNlciB1c2Fkb3MgZW0gY29udGXDumRvcyBuw6NvIGNvbnRyb2xhZG9zLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTI5NAorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iCittc2dzdHIgIi0tY2FjaGVkIGUgw6Fydm9yZXMgZm9yYW0gZm9ybmVjaWRvcyBzaW11bHRhbmVhbWVudGUuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODEKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0aXBvPl0gWy13XSBbLS1wYXRoPTxmaWNoZWlybz4gfCAtLW5vLWZpbHRlcnNdIFstLSIKKyJzdGRpbl0gWy0tXSA8ZmljaGVpcm8+Li4uIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODIKK21zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dzdHIgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk0Cittc2dpZCAidHlwZSIKK21zZ3N0ciAidGlwbyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk0Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgInRpcG8gZG8gb2JqZXRvIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTUKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiZXNjcmV2ZXIgbyBvYmpldG8gbmEgYmFzZSBkZSBkYWRvcyBkZSBvYmpldG9zIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTcKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVyIG8gb2JqZXRvIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgImd1YXJkYXIgbyBmaWNoZWlybyB0YWwgY29tbyBlc3TDoSwgc2VtIGZpbHRyb3MiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDAKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICIiCisib2J0ZXIgaGFzaCBkZSBsaXhvIGFsZWF0w7NyaW8gcGFyYSBjcmlhciBvYmpldG9zIGNvcnJvbXBpZG9zIHBhcmEgZGVwdXJhciBvICIKKyJHaXQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAicHJvY2Vzc2FyIG8gZmljaGVpcm8gY29tbyBzZSBlc3RlIGZvc3NlIGRvIGNhbWluaG8gaW5kaWNhZG8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyCittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAiaW1wcmltaXIgdG9kb3Mgb3MgY29tYW5kb3MgZGlzcG9uw612ZWlzIgorCisjOiBidWlsdGluL2hlbHAuYzo0MworbXNnaWQgImV4Y2x1ZGUgZ3VpZGVzIgorbXNnc3RyICJleGNsdWlyIGd1aWFzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NAorbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAiaW1wcmltaXIgbGlzdGEgZGUgZ3VpYXMgw7p0ZWlzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NQorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgIm1vc3RyYXIgcMOhZ2luYSBkbyBtYW51YWwiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgIm1vc3RyYXIgbyBtYW51YWwgbm8gbmF2ZWdhZG9yIHdlYiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAibW9zdHJhciBww6FnaW5hIGluZm8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU0Cittc2dpZCAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGNvbW1hbmQ+XSIKK21zZ3N0ciAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGNvbWFuZG8+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgImZvcm1hdG8gZGUgYWp1ZGEgbsOjbyByZWNvbmhlY2lkbyAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzo5MworbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgIkZhbGhhIGFvIGluaWNpYXIgZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDYKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIkZhbGhhIGFvIGFuYWxpc2FyIGEgdmVyc8OjbyBkbyBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJhIHZlcnPDo28gZG8gZW1hY3NjbGllbnQgJyVkJyDDqSBkZW1hc2lhZG8gYW50aWdhICg8IDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEzMiBidWlsdGluL2hlbHAuYzoxNTMgYnVpbHRpbi9oZWxwLmM6MTYyIGJ1aWx0aW4vaGVscC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBleGVjdXRhciAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBjYW1pbmhvIHBhcmEgdmlzdWFsaXphZG9yIGRlIG1hbnVhbCBuw6NvIHN1cG9ydGFkby5cbiIKKyJDb25zaWRlcmUgdXNhciAnbWFuLjxmZXJyYW1lbnRhPi5jbWQnLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IGNvbWFuZG8gZGUgdmlzdWFsaXphZG9yIGRlIG1hbnVhbCBzdXBvcnRhZG8uXG4iCisiQ29uc2lkZXJlIHVzYXIgJ21hbi48ZmVycmFtZW50YT4ucGF0aCcuIgorCisjOiBidWlsdGluL2hlbHAuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJzogdmlzdWFsaXphZG9yIGRlIG1hbnVhbCBkZXNjb25oZWNpZG8uIgorCisjOiBidWlsdGluL2hlbHAuYzozNTMKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIm5lbmh1bSB2aXN1YWxpemFkb3IgZGUgbWFudWFsIGF0ZW5kZXUgbyBwZWRpZG8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM2MQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIm5lbmh1bSB2aXN1YWxpemFkb3IgZGUgaW5mbyBhdGVuZGV1IG8gcGVkaWRvIgorCisjOiBidWlsdGluL2hlbHAuYzo0MDMKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICJEZWZpbmlyIGF0cmlidXRvcyBwb3IgY2FtaW5obyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDA0Cittc2dpZCAiRXZlcnlkYXkgR2l0IFdpdGggMjAgQ29tbWFuZHMgT3IgU28iCittc2dzdHIgIkRpw6FyaW8gR2l0IGNvbSBtYWlzIG91IG1lbm9zIDIwIENvbWFuZG9zIgorCisjOiBidWlsdGluL2hlbHAuYzo0MDUKK21zZ2lkICJBIEdpdCBnbG9zc2FyeSIKK21zZ3N0ciAiVW0gR2xvc3PDoXJpbyBkbyBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQwNgorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIiIKKyJFc3BlY2lmaWNhciBmaWNoZWlyb3MgbsOjbyBjb250cm9sYWRvcyBwYXJhIHNlcmVtIGludGVuY2lvbmFsbWVudGUgaWdub3JhZG9zIgorCisjOiBidWlsdGluL2hlbHAuYzo0MDcKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiRGVmaW5pciBwcm9wcmllZGFkZXMgZGUgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQwOAorbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiRXNwZWNpZmljYXIgcmV2aXPDtWVzIGUgaW50ZXJ2YWxvcyBkbyBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQwOQorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCAoZm9yIHZlcnNpb24gMS41LjEgb3IgbmV3ZXIpIgorbXNnc3RyICJVbWEgaW50cm9kdcOnw6NvIGFvIEdpdCAodmVyc8OjbyAxLjUuMSBvdSBtYWlzIHJlY2VudGUpIgorCisjOiBidWlsdGluL2hlbHAuYzo0MTAKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIlVtYSBkZXNjcmnDp8OjbyBnZXJhbCBkb3MgZmx1eG9zIGRlIHRyYWJhbGhvIHJlY29tZW5kYWRvcyBwYXJhIG8gR2l0IgorCisjOiBidWlsdGluL2hlbHAuYzo0MjIKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOlxuIgorbXNnc3RyICJPcyBndWlhcyBjb211bnMgZG8gR2l0OlxuIgorCisjOiBidWlsdGluL2hlbHAuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYGdpdCAlcycgaXMgYWxpYXNlZCB0byBgJXMnIgorbXNnc3RyICInZ2l0ICVzJyDDqSB1bSBhbGlhcyBkZSAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzo0NjIgYnVpbHRpbi9oZWxwLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICJ1dGlsaXphw6fDo286ICVzJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgImluY29tcGF0aWJpbGlkYWRlIGRlIHRpcG8gZGUgb2JqZXRvIGVtICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAibyBvYmpldG8gZXNwZXJhZG8gJXMgbsOjbyBmb2kgcmVjZWJpZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICJvYmpldG8gJXM6IHRpcG8gZXNwZXJhZG8gJXMsIG9idGlkbyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICJuw6NvIMOpIHBvc3PDrXZlbCBwcmVlbmNoZXIgJWQgYnl0ZSIKK21zZ3N0clsxXSAibsOjbyDDqSBwb3Nzw612ZWwgcHJlZW5jaGVyICVkIGJ5dGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzkKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgImZpbSBkZSBmaWNoZWlybyAoRU9GKSBwcmVtYXR1cm8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4MAorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgImVycm8gZGUgbGVpdHVyYSBkYSBlbnRyYWRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTIKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAiZm9yYW0gdXNhZG9zIG1haXMgYnl0ZXMgZG9zIHF1ZSBlc3RhdmFtIGRpc3BvbsOtdmVpcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk5Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAicGFjb3RlIGRlbWFzaWFkbyBncmFuZGUgcGFyYSBhIGRlZmluacOnw6NvIGF0dWFsIGRlIG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMDIgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjkyCittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJvIHBhY290ZSBleGNlZGUgbyB0YW1hbmhvIG3DoXhpbW8gcGVybWl0aWRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyIG8gZmljaGVpcm8gZGUgcGFjb3RlICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzNworbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJhIGFzc2luYXR1cmEgZG8gcGFjb3RlIG7Do28gY29ycmVzcG9uZGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICJ2ZXJzw6NvIGRlIHBhY290ZSAlPFBSSXUzMj4gbsOjbyBzdXBvcnRhZGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAicGFjb3RlIGNvbSBvYmpldG8gaW5jb3JyZXRvIG5vIG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgImEgZGVzY29tcGFjdGHDp8OjbyByZXRvcm5vdSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTI4Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAiZGVsdGEgZGUgb2JqZXRvIGJhc2UgY29tIGNhcGFjaWRhZGUgZXhjZWRpZGEgbm8gdmFsb3IgZGUgb2Zmc2V0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzYKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgIm9mZnNldCBkYSBiYXNlIGRlbHRhIGVzdMOhIGZvcmEgZG8gbGltaXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAib2JqZXRvIGRlIHRpcG8gZGVzY29uaGVjaWRvICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NzUKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBpbnZvY2FyIHByZWFkIHNvYnJlIG8gZmljaGVpcm8gZGUgcGFjb3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmaW0gcHJlbWF0dXJvIGRlIGZpY2hlaXJvIGRlIHBhY290ZSwgZmFsdGEgJTxQUkl1TUFYPiBieXRlIgorbXNnc3RyWzFdICJmaW0gcHJlbWF0dXJvIGRlIGZpY2hlaXJvIGRlIHBhY290ZSwgZmFsdGFtICU8UFJJdU1BWD4gYnl0ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjYwMworbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJpbmNvbnNpc3TDqm5jaWEgZGUgZGVzY29tcGFjdGHDp8OjbyBncmF2ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc1NSBidWlsdGluL2luZGV4LXBhY2suYzo3NzgKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxNiBidWlsdGluL2luZGV4LXBhY2suYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJDT0xJU8ODTyBERSBTSEExIENPTSAlcyBFTkNPTlRSQURBISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzUyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTY0CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGxlciAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCBpbmZvICVzIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgaW5mb3JtYcOnw6NvIGRlIG9iamV0byBleGlzdGVudGUgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGxlciBvIG9iamV0byBleGlzdGVudGUgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJvYmpldG8gYmxvYiBpbnbDoWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICJpbnbDoWxpZG8gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg1MworbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAiRXJybyBubyBvYmpldG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiTmVtIHRvZG9zIG9zIG9iamV0b3MgZmlsaG9zIGRlICVzIHPDo28gYWxjYW7Dp8OhdmVpcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTI3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1OAorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiZmFsaGEgYW8gYXBsaWNhciBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJBIHJlY2ViZXIgb2JqZXRvcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkEgaW5kZXhhciBvYmpldG9zIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICJwYWNvdGUgY29ycm9tcGlkbyAoU0hBMSBuw6NvIGNvcnJlc3BvbmRlKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2NQorbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgaW52b2NhciBmc3RhdCBzb2JyZSBvIGZpY2hlaXJvIGRlIHBhY290ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2OAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAicGFjb3RlIGNvbSBsaXhvIG5vIGZpbmFsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTc5Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAiZXh0cmVtYSBjb25mdXPDo28gZW0gcGFyc2VfcGFja19vYmplY3RzKCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDIKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICJBIHJlc29sdmVyIGRlbHRhcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciB0aHJlYWQ6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjU1Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiZXh0cmVtYSBjb25mdXPDo28iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyWzBdICJjb25jbHXDrWRvIGNvbSAlZCBvYmpldG8gbG9jYWwiCittc2dzdHJbMV0gImNvbmNsdcOtZG8gY29tICVkIG9iamV0b3MgbG9jYWlzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJTb21hIGRlIHZlcmlmaWNhw6fDo28gaW5lc3BlcmFkYSBubyBmaW5hbCBkZSAlcyAoY29ycnVww6fDo28gbm8gZGlzY28/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI3NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAicGFjb3RlIGNvbSAlZCBkZWx0YSBuw6NvIHJlc29sdmlkbyIKK21zZ3N0clsxXSAicGFjb3RlIGNvbSAlZCBkZWx0YXMgbsOjbyByZXNvbHZpZG9zIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzAxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBjb21wYWN0YXIgb2JqZXRvIGFjcmVzY2VudGFkbyAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICJvYmpldG8gbG9jYWwgJXMgY29ycm9tcGlkbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwMworbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICJlcnJvIGFvIGZlY2hhciBmaWNoZWlybyBkZSBwYWNvdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBlc2NyZXZlciBvIGZpY2hlaXJvIGRlIGNvbnNlcnZhw6fDo28gJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQyMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZmVjaGFyIG8gZmljaGVpcm8gZGUgY29uc2VydmHDp8OjbyAnJXMnIGVzY3JpdG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBndWFyZGFyIGZpY2hlaXJvIGRlIHBhY290ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ0MQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBndWFyZGFyIG8gZmljaGVpcm8gw61uZGljZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4gaW5jb3JyZXRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDg5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAic2VtIHN1cG9ydGUgZGUgdGhyZWFkcywgJXMgaWdub3JhZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGFicmlyIG8gZmljaGVpcm8gZGUgcGFjb3RlICclcycgZXhpc3RlbnRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGFicmlyIG8gZmljaGVpcm8gZGUgw61uZGljZSBkbyBwYWNvdGUgZXhpc3RlbnRlIGRlICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAiJWQgb2JqZXRvIG7Do28gZGVsdGEiCittc2dzdHJbMV0gIiVkIG9iamV0b3MgbsOjbyBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTYwMworIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJjb21wcmltZW50byBkZSBjYWRlaWEgPSAlZDogJWx1IG9iamV0byIKK21zZ3N0clsxXSAiY29tcHJpbWVudG8gZGUgY2FkZWlhID0gJWQ6ICVsdSBvYmpldG9zIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJvIG5vbWUgZG8gZmljaGVpcm8gZGUgcGFjb3RlICclcycgbsOjbyB0ZXJtaW5hIGVtICcucGFjayciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OTggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcwMQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcxNyBidWlsdGluL2luZGV4LXBhY2suYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiJXMgaW5jb3JyZXRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzM3Cittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIi0tZml4LXRoaW4gbsOjbyBwb2RlIHNlciB1c2FkbyBzZW0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOQorbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1zdGRpbiByZXF1ZXIgdW0gcmVwb3NpdMOzcmlvIGdpdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0NworbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkgc2VtIG5vbWUgZG8gZmljaGVpcm8gZGUgcGFjb3RlIGluZGljYWRvIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBpbnZvY2FyIHN0YXQgc29icmUgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgaW52b2NhciBzdGF0IHNvYnJlIG8gbW9kZWxvICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyIChvcGVuZGlyKSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyIChyZWFkbGluaykgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBjcmlhciBhIGxpZ2HDp8OjbyBzaW1iw7NsaWNhICclcycgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBjb3BpYXIgJyVzJyBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICJtb2RlbG8gJXMgaWdub3JhZG8iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kICVzIgorbXNnc3RyICJtb2RlbG9zIG7Do28gZW5jb250cmFkb3MgZW0gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAibW9kZWxvcyBuw6NvIGNvcGlhZG9zIGRlICclcyc6ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBwcm9jZXNzYXIgbyB0aXBvIGRlIGZpY2hlaXJvICVkIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBtb3ZlciAlcyBwYXJhICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNDcgYnVpbHRpbi9pbml0LWRiLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyBqw6EgZXhpc3RlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJSZXBvc2l0w7NyaW8gR2l0IHBhcnRpbGhhZG8gZSBleGlzdGVudGUgcmVpbmljaWFsaXphZG8gZW0gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIlJlcG9zaXTDs3JpbyBHaXQgZXhpc3RlbSByZWluaWNpYWxpemFkbyBlbSAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJSZXBvc2l0w7NyaW8gR2l0IHZhemlvIGUgcGFydGlsaGFkbyBpbmljaWFsaXphZG8gZW0gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJSZXBvc2l0w7NyaW8gR2l0IHZhemlvIGluaWNpYWxpemFkbyBlbSAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ1NworbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08ZGlyZXTDs3Jpby1tb2RlbG8+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc8O1ZXM+XV0gWzxkaXJldMOzcmlvPl0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4MAorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICJwZXJtaXNzw7VlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDgxCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICIiCisiZXNwZWNpZmljYXIgcXVlIG8gcmVwb3NpdMOzcmlvIGdpdCBzZXLDoSBwYXJ0aWxoYWRvIHBvciB2w6FyaW9zIHV0aWxpemFkb3JlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTE1IGJ1aWx0aW4vaW5pdC1kYi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGNyaWFyIG8gZGlyZXTDs3JpbyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbXVkYXIgcGFyYSBvIGRpcmV0w7NyaW8gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKG91IC0td29yay10cmVlPTxkaXJldMOzcmlvPikgbsOjbyDDqSBwZXJtaXRpZG8gc2VtIGVzcGVjaWZpY2FyICVzIChvdSAtLWdpdC0iCisiZGlyPTxkaXJldMOzcmlvPikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBhY2VkZXIgw6Agw6Fydm9yZSBkZSB0cmFiYWxobyAnJXMnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE1Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbG9yPl0pLi4uXSBbPGZpY2hlaXJvPi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MjYKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICJlZGl0YXIgZmljaGVpcm9zIG5vIGxvY2FsIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI3Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAiY29ydGFyIHRlcm1pbmFkb3JlcyB2YXppb3MiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MjgKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICJ0ZXJtaW5hZG9yIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI5Cittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgInRlcm1pbmFkb3JlcyBhIGFkaWNpb25hciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo0MgorbXNnaWQgIm5vIGlucHV0IGZpbGUgZ2l2ZW4gZm9yIGluLXBsYWNlIGVkaXRpbmciCittc2dzdHIgIm5lbmh1bSBmaWNoZWlybyBkZSBlbnRyYWRhIGZvcm5lY2lkbyBwYXJhIGVkacOnw6NvIG5vIGxvY2FsIgorCisjOiBidWlsdGluL2xvZy5jOjQ0Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPG9ww6fDtWVzPl0gWzxpbnRlcnZhbG8tZGUtcmV2aXPDtWVzPl0gW1stLV0gPGNhbWluaG8+Li4uXSIKKworIzogYnVpbHRpbi9sb2cuYzo0NQorbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgc2hvdyBbPG9ww6fDtWVzPl0gPG9iamV0bz4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgIm9ww6fDo28gLS1kZWNvcmF0ZSBpbnbDoWxpZGE6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE0NAorbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJzdXByaW1pciBzYcOtZGEgZG8gZGlmZiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDUKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAibW9zdHJhciBvcmlnZW0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgInVzYXIgZmljaGVpcm8gZGUgbWFwZWFtZW50byBkZSBjb3JyZWlvIgorCisjOiBidWlsdGluL2xvZy5jOjE0NworbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgIm9ww6fDtWVzIGRlIGRlY29yYcOnw6NvIgorCisjOiBidWlsdGluL2xvZy5jOjE1MAorbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJwcm9jZXNzYXIgaW50ZXJ2YWxvIGRlIGxpbmhhcyBuLG0sIGEgY29udGFyIGEgcGFydGlyIGRlIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiUmVzdWx0YWRvIGZpbmFsOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiBmaWNoZWlybyBpbmNvcnJldG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTA3IGJ1aWx0aW4vbG9nLmM6NjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIG9iamV0byAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo2MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAiVGlwbyBkZXNjb25oZWNpZG86ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjc0NgorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIHNlbSB2YWxvciIKKworIzogYnVpbHRpbi9sb2cuYzo4NDYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIm8gbm9tZSBkbyBkaXJldMOzcmlvIGRlIHNhw61kYSDDqSBkZW1hc2lhZG8gbG9uZ28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGFicmlyIG8gZmljaGVpcm8gZGUgcGF0Y2ggJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODc1Cittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgIsOJIG5lY2Vzc8OhcmlvIGV4YXRhbWVudGUgdW0gaW50ZXJ2YWxvLiIKKworIzogYnVpbHRpbi9sb2cuYzo4ODUKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgIk7Do28gw6kgdW0gaW50ZXJ2YWxvLiIKKworIzogYnVpbHRpbi9sb2cuYzo5OTEKK21zZ2lkICJDb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICJBIGNhcnRhIGRlIGFwcmVzZW50YcOnw6NvIHByZWNpc2EgZGUgdW0gZm9ybWF0byBkZSBlLW1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICJpbi1yZXBseS10byBpbmNvcnJldG86ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTgKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcMOnw7Vlcz5dIFs8ZGVzZGU+IHwgPGludGVydmFsby1kZS1yZXZpc8O1ZXM+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQ4Cittc2dpZCAiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIkRvaXMgZGlyZXTDs3Jpb3MgZGUgc2HDrWRhPyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU1IGJ1aWx0aW4vbG9nLmM6MTg5OCBidWlsdGluL2xvZy5jOjE5MDAgYnVpbHRpbi9sb2cuYzoxOTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJDb21taXQgZGVzY29uaGVjaWRvICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjUgYnVpbHRpbi9ub3Rlcy5jOjg4MyBidWlsdGluL3RhZy5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiRmFsaGEgYW8gcmVzb2x2ZXIgJyVzJyBudW1hIHJlZmVyw6puY2lhIHbDoWxpZGEuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNzAKK21zZ2lkICJDb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGVuY29udHJhciBhIGJhc2UgZXhhdGEgZGUgaW50ZWdyYcOnw6NvLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjc0Cittc2dpZCAiIgorIkZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkuIgorbXNnc3RyICIiCisiRmFsaGEgYW8gb2J0ZXIgcmFtbyBhIG1vbnRhbnRlLCBzZSBxdWVyIGdyYXZhciBvIGNvbW1pdCBiYXNlICIKKyJhdXRvbWF0aWNhbWVudGUsXG4iCisidXNlIGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBwYXJhIHNlZ3VpciB1bSByYW1vIHJlbW90by5cbiIKKyJPdSBwb2RlIGVzcGVjaWZpY2FyIG8gY29tbWl0IGJhc2UgY29tIC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbG1lbnRlLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjk0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiRmFsaGEgYW8gcHJvY3VyYXIgYmFzZSBleGF0YSBkZSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMwNQorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZCBiZSB0aGUgYW5jZXN0b3Igb2YgcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAibyBjb21taXQgYmFzZSBkZXZlIHNlciBvIGFudGVjZXNzb3IgZGEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBidWlsdGluL2xvZy5jOjEzMDkKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGRuJ3QgYmUgaW4gcmV2aXNpb24gbGlzdCIKK21zZ3N0ciAibyBjb21taXQgYmFzZSBuw6NvIGRldmUgZmF6ZXIgcGFydGUgZGEgbGlzdGEgZGUgcmV2aXPDtWVzIgorCisjOiBidWlsdGluL2xvZy5jOjEzNTgKK21zZ2lkICJjYW5ub3QgZ2V0IHBhdGNoIGlkIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBvYnRlciBvIGlkIGRvIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE0MTUKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJ1c2FyIFtQQVRDSCBuL21dIG1lc21vIGNvbSB1bSDDum5pY28gcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQxOAorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICJ1c2FyIFtQQVRDSF0gbWVzbW8gY29tIG3Dumx0aXBsb3MgcGF0Y2hlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDIyCittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgImltcHJpbWlyIHBhdGNoZXMgcGFyYSBhIHNhw61kYSBwYWRyw6NvIgorCisjOiBidWlsdGluL2xvZy5jOjE0MjQKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiZ2VyYXIgdW1hIGNhcnRhIGRlIGFwcmVzZW50YcOnw6NvIgorCisjOiBidWlsdGluL2xvZy5jOjE0MjYKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgIiIKKyJ1c2FyIHVtYSBzZXF1w6puY2lhIGRlIG7Dum1lcm9zIHNpbXBsZXMgcGFyYSBkZW5vbWluYXIgb3MgZmljaGVpcm9zIGdlcmFkb3MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyNworbXNnaWQgInNmeCIKK21zZ3N0ciAic2Z4IgorCisjOiBidWlsdGluL2xvZy5jOjE0MjgKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAidXNhciA8c2Z4PiBlbSB2ZXogZGUgJy5wYXRjaCciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzMAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgImNvbWXDp2FyIGEgbnVtZXJhciBvcyBwYXRjaGVzIGVtIDxuPiBlbSB2ZXogZGUgMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDMyCittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICJtYXJjYXIgYSBzw6lyaWUgY29tbyBhIG4tw6lzaW1hIHJlaXRlcmHDp8OjbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM0Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiVXNhciBbUkZDIFBBVENIXSBlbSB2ZXogZGUgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDM3Cittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJ1c2FyIFs8cHJlZml4bz5dIGVtIHZleiBkZSBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDAKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgImd1YXJkYXIgb3MgZmljaGVpcm9zIHJlc3VsdGFudGVzIGVtIDxkaXI+IgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAibsOjbyB0aXJhci9pbnNlcmlyIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0NgorbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIm7Do28gZ2VyYXIgZGlmZnMgYmluw6FyaW9zIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDgKK21zZ2lkICJvdXRwdXQgYWxsLXplcm8gaGFzaCBpbiBGcm9tIGhlYWRlciIKK21zZ3N0ciAicHJlZW5jaGVyIG8gY2FiZcOnYWxobyBGcm9tIGNvbSBoYXNoIGRlIHplcm9zIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTAKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIm7Do28gaW5jbHVpciB1bSBwYXRjaCBxdWUgY29pbmNpZGEgY29tIHVtIGNvbW1pdCBhIG1vbnRhbnRlIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTIKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgIiIKKyJtb3N0cmFyIG5vIGZvcm1hdG8gZGUgcGF0Y2ggZW0gdmV6IGRlIG5vIGZvcm1hdG8gcG9yIG9taXNzw6NvIChwYXRjaCArIHN0YXQpIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTQKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIk1lbnNhZ2VtIgorCisjOiBidWlsdGluL2xvZy5jOjE0NTUKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgImNhYmXDp2FsaG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1NgorbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgImFkaWNpb25hciBjYWJlw6dhbGhvIGRlIGUtbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDU3IGJ1aWx0aW4vbG9nLmM6MTQ1OQorbXNnaWQgImVtYWlsIgorbXNnc3RyICJlLW1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1NworbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICJhZGljaW9uYXIgY2FiZcOnYWxobyBUbzoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ1OQorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICJhZGljaW9uYXIgY2FiZcOnYWxobyBDYzoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MQorbXNnaWQgImlkZW50IgorbXNnc3RyICJpZGVudGlkYWRlIgorCisjOiBidWlsdGluL2xvZy5jOjE0NjIKK21zZ2lkICJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIgorbXNnc3RyICIiCisiZGVmaW5pciBvIGVuZGVyZcOnbyBGcm9tIGNvbW8gPGlkZW50aWRhZGU+IChvdSBjb21vIGlkZW50aWRhZGUgZG8gY29tbWl0dGVyICIKKyJzZSBuw6NvIGluZGljYWRvKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDY0Cittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAiaWQtbWVuc2FnZW0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2NQorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAidXNhciBvIHByaW1laXJvIGVtYWlsIHBhcmEgcmVzcG9uZGVyIGEgPGlkLW1lbnNhZ2VtPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDY2IGJ1aWx0aW4vbG9nLmM6MTQ2OQorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICJsaW1pdGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2NworbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgImFuZXhhciBvIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzAKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJpbmNvcnBvcmFyIG8gcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ3NAorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICJhdGl2YXIgbWVuc2FnZW5zIHBvciB0w7NwaWNvcywgZXN0aWxvczogc2hhbGxvdyAocmFzbyksIGRlZXAgKHByb2Z1bmRvKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc2Cittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJhc3NpbmF0dXJhIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzcKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgImFkaWNpb25hciB1bWEgYXNzaW5hdHVyYSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZS1jb21taXQiCittc2dzdHIgImNvbW1pdC1iYXNlIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzkKK21zZ2lkICJhZGQgcHJlcmVxdWlzaXRlIHRyZWUgaW5mbyB0byB0aGUgcGF0Y2ggc2VyaWVzIgorbXNnc3RyICJhZGljaW9uYXIgaW5mb3JtYcOnw6NvIHByw6ktcmVxdWlzaXRvIGRhIMOhcnZvcmUgw6Agc8OpcmllIGRlIHBhdGNoZXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ4MQorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiYWRpY2lvbmFyIHVtYSBhc3NpbmF0dXJhIGRlIHVtIGZpY2hlaXJvIgorCisjOiBidWlsdGluL2xvZy5jOjE0ODIKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICJuw6NvIGltcHJpbWlyIG9zIG5vbWVzIGRvcyBmaWNoZWlyb3MgZGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3MgorbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiLW4gZSAtayBzw6NvIG11dHVhbWVudGUgZXhjbHVzaXZvcy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3NAorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4Ly0tcmZjIGUgLWsgc8OjbyBtdXR1YW1lbnRlIGV4Y2x1c2l2b3MuIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODIKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSBuw6NvIGZheiBzZW50aWRvIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODQKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMgbsOjbyBmYXogc2VudGlkbyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTg2Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrIG7Do28gZmF6IHNlbnRpZG8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYxNgorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICJzYcOtZGEgcGFkcsOjbywgb3UgZGlyZXTDs3JpbywgcXVhbCBkZWxlcz8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYxOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY3JpYXIgbyBkaXJldMOzcmlvICclcyciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzaWduYXR1cmUgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgbyBmaWNoZWlybyBkZSBhc3NpbmF0dXJhICclcyciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc4NAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICJGYWxoYSBhbyBjcmlhciBvcyBmaWNoZWlyb3MgZGUgc2HDrWRhIgorCisjOiBidWlsdGluL2xvZy5jOjE4MzMKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8cmFtby1hLW1vbnRhbnRlPiBbPGhlYWQ+IFs8bGltaXRlPl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoxODg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIk8gcmFtbyByZW1vdG8gc2VndWlkbyBuw6NvIGZvaSBlbmNvbnRyYWRvLCBlc3BlY2lmaXF1ZSA8cmFtby1hLW1vbnRhbnRlPiAiCisibWFudWFsbWVudGUuXG4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjEKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPG9ww6fDtWVzPl0gWzxmaWNoZWlybz4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTEwCittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiaWRlbnRpZmljYXIgbyBlc3RhZG8gZG8gZmljaGVpcm8gY29tIHRhZ3MiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MTIKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAiIgorInVzYXIgbGV0cmFzIG1pbsO6c2N1bGFzIHBhcmEgZmljaGVpcm9zICdhc3N1bWlkbyBuw6NvIGFsdGVyYWRvJyAoJ2Fzc3VtZSAiCisidW5jaGFuZ2VkJykiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MTQKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAibW9zdHJhciBmaWNoZWlyb3MgZW0gY2FjaGUgbmEgc2HDrWRhIChwcmVkZWZpbmnDp8OjbykiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MTYKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibW9zdHJhciBmaWNoZWlyb3MgZWxpbWluYWRvcyBuYSBzYcOtZGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MTgKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYXIgZmljaGVpcm9zIG1vZGlmaWNhZG9zIG5hIHNhw61kYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyMAorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibW9zdHJhciBvdXRyb3MgZmljaGVpcm9zIG5hIHNhw61kYSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyMgorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIGZpY2hlaXJvcyBpZ25vcmFkb3MgbmEgc2HDrWRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI1Cittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYXIgbm9tZSBkZSBvYmpldG9zIGNvbSBjb250ZcO6ZG8gcHJlcGFyYWRvLCBuYSBzYcOtZGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjcKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICIiCisibW9zdHJhciBmaWNoZWlyb3Mgbm8gc2lzdGVtYSBkZSBmaWNoZWlyb3MgcXVlIHByZWNpc2FtIGRlIHNlciByZW1vdmlkb3MiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjkKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgIm1vc3RyYXIgbm9tZXMgZGUgZGlyZXTDs3Jpb3MgJ290aGVyJyAob3V0cm8pIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMxCittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgIm1vc3RyYXIgZmluYWlzIGRlIGxpbmhhIGRvcyBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzMKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICJuw6NvIG1vc3RyYXIgZGlyZXTDs3Jpb3MgdmF6aW9zIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM2Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmFyIGZpY2hlaXJvcyBuw6NvIGludGVncmFkb3MgbmEgc2HDrWRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIm1vc3RyYXIgaW5mb3JtYcOnw6NvIGRlIHJlc29sdmVyLWRlc2ZhemVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQwCittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJpZ25vcmFyIGZpY2hlaXJvcyBxdWUgY29ycmVzcG9uZGFtIGFvIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICJsZXIgcGFkcsO1ZXMgZGUgZXhjbHVzw6NvIGRvIDxmaWNoZWlybz4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDYKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAibGVyIHBhZHLDtWVzIGRlIGV4Y2x1c8OjbyBwb3IgZGlyZXTDs3JpbyBkbyA8ZmljaGVpcm8+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ4Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAiaW5jbHVpciBhcyBleGNsdXPDtWVzIHN0YW5kYXJkIGRvIGdpdCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1MQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJtb3N0cmFyIG9zIGNhbWluaG9zIHJlbGF0aXZhbWVudGUgYW8gZGlyZXTDs3JpbyBzdXBlcmlvciBkbyBwcm9qZXRvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgInBlcmNvcnJlciBzdWJtw7NkdWxvcyByZWN1cnNpdmFtZW50ZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NgorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAic2UgdW0gPGZpY2hlaXJvPiBuw6NvIGVzdGl2ZXIgbm8gw61uZGljZSwgdHJhdGFyIGNvbW8gZXJybyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NworbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICLDoXJ2b3JlLWV0YyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIiIKKyJmaW5naXIgcXVlIG9zIGNhbWluaG9zIHJlbW92aWRvcyBkZXNkZSA8w6Fydm9yZS1ldGM+IGFpbmRhIGVzdMOjbyBwcmVzZW50ZXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICJtb3N0cmFyIGRhZG9zIGRlIGRlcHVyYcOnw6NvIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdMOzcmlvPiBbPHJlZmVyw6puY2lhcz4uLi5dXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1MgorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICJuw6NvIGltcHJpbWlyIFVSTCByZW1vdG8iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTMgYnVpbHRpbi9scy1yZW1vdGUuYzo1NQorbXNnaWQgImV4ZWMiCittc2dzdHIgImV4ZWMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTQgYnVpbHRpbi9scy1yZW1vdGUuYzo1NgorbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAiY2FtaW5obyBwYXJhIGdpdC11cGxvYWQtcGFjayBubyBzZXJ2aWRvciByZW1vdG8iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTgKK21zZ2lkICJsaW1pdCB0byB0YWdzIgorbXNnc3RyICJyZXN0cmluZ2lyLXNlIGEgdGFncyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImxpbWl0IHRvIGhlYWRzIgorbXNnc3RyICJyZXN0cmluZ2lyLXNlIGEgY2FiZcOnYXMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAibsOjbyBtb3N0cmFyIHRhZ3MgZGVzY2FzY2FkYXMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjIKK21zZ2lkICJ0YWtlIHVybC48YmFzZT4uaW5zdGVhZE9mIGludG8gYWNjb3VudCIKK21zZ3N0ciAidGVyIHVybC48YmFzZT4uaW5zdGVhZE9mIGVtIGNvbnRhIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY0Cittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICJ0ZXJtaW5hciBjb20gY8OzZGlnbyBkZSBzYcOtZGEgMiBzZSBuw6NvIGZvcmVtIGVuY29udHJhZGFzIHJlZmVyw6puY2lhcyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NgorbXNnaWQgInNob3cgdW5kZXJseWluZyByZWYgaW4gYWRkaXRpb24gdG8gdGhlIG9iamVjdCBwb2ludGVkIGJ5IGl0IgorbXNnc3RyICJtb3N0cmFyIGEgcmVmZXLDqm5jaWEgc3ViamFjZW50ZSBlbSBhZGnDp8OjbyBhbyBvYmpldG8gcG9yIGVsYSBhcG9udGFkbyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MjgKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPG9ww6fDtWVzPl0gPMOhcnZvcmUtZXRjPiBbPGNhbWluaG8+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI2Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICJtb3N0cmFyIGFwZW5hcyDDoXJ2b3JlcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI4Cittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICJwZXJjb3JyZXIgYXMgc3Viw6Fydm9yZXMgcmVjdXJzaXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgIm1vc3RyYXIgw6Fydm9yZXMgYW8gcGVyY29ycmVyIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzMKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5hciBlbnRyYWRhcyBjb20gbyBieXRlIE5VTCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM0Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiaW5jbHVpciBkaW1lbnPDo28gZG9zIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNiBidWlsdGluL2xzLXRyZWUuYzoxMzgKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJsaXN0YXIgYXBlbmFzIG9zIG5vbWVzIGRlIGZpY2hlaXJvIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDEKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICJ1c2FyIG5vbWVzIGRlIGNhbWluaG8gY29tcGxldG9zIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIiIKKyJtb3N0cmFyIGEgw6Fydm9yZSBjb21wbGV0YTsgbsOjbyBhcGVuYXMgbyBkaXJldMOzcmlvIGF0dWFsIChpbXBsaWNhIC0tZnVsbC1uYW1lKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ2Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgImdpdCBtZXJnZSBbPG9ww6fDtWVzPl0gWzxjb21taXQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ3Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NDgKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDMKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgImEgb3DDp8OjbyAnbScgcmVxdWVyIHVtIHZhbG9yIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIkVzdHJhdMOpZ2lhIGRlIGludGVncmHDp8OjbyAnJXMnIG7Do28gZW5jb250cmFkYS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJFc3RyYXTDqWdpYXMgZGlzcG9uw612ZWlzOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiRXN0cmF0w6lnaWFzIHBlcnNvbmFsaXphZGFzIGRpc3BvbsOtdmVpczoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTYgYnVpbHRpbi9wdWxsLmM6MTI3Cittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAibsOjbyBhcHJlc2VudGFyIHVtIGRpZmZzdGF0IGFvIGZpbSBkYSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTkgYnVpbHRpbi9wdWxsLmM6MTMwCittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJtb3N0cmFyIHVtIGRpZmZzdGF0IGFvIGZpbSBkYSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDAgYnVpbHRpbi9wdWxsLmM6MTMzCittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKHNpbsOzbmltbyBkZSAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjAyIGJ1aWx0aW4vcHVsbC5jOjEzNgorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImFkaWNpb25hciAobm8gbcOheGltbyA8bj4pIGVudHJhZGFzIGRvIHNob3J0bG9nIMOgIG1lbnNhZ2VtIGRlIGNvbW1pdCBkYSAiCisiaW50ZWdyYcOnw6NvIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA1IGJ1aWx0aW4vcHVsbC5jOjEzOQorbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJjcmlhciB1bSDDum5pY28gY29tbWl0IGVtIHZleiBkZSByZWFsaXphciB1bWEgaW50ZWdyYcOnw6NvIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA3IGJ1aWx0aW4vcHVsbC5jOjE0MgorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAicmVhbGl6YXIgdW0gY29tbWl0IHNlIGEgaW50ZWdyYcOnw6NvIGZvciBiZW0gc3VjZWRpZGEgKHByZWRlZmluacOnw6NvKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwOSBidWlsdGluL3B1bGwuYzoxNDUKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgImVkaXRhciBhIG1lbnNhZ2VtIGFudGVzIGRlIHN1Ym1ldGVyIgorCisjOiBidWlsdGluL21lcmdlLmM6MjEwCittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAicGVybWl0aXIgYXZhbsOnbyByw6FwaWRvIChwcmVkZWZpbmnDp8OjbykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTIgYnVpbHRpbi9wdWxsLmM6MTUxCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYWJvcnRhciBzZSBuw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyIGF2YW7Dp28gcsOhcGlkbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNiBidWlsdGluL3B1bGwuYzoxNTQKK21zZ2lkICJ2ZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCittc2dzdHIgInZlcmlmaWNhciBzZSBvIGNvbW1pdCB0ZW0gdW1hIGFzc2luYXR1cmEgR1BHIHbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTcgYnVpbHRpbi9ub3Rlcy5jOjc3MyBidWlsdGluL3B1bGwuYzoxNTgKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdMOpZ2lhIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE4IGJ1aWx0aW4vcHVsbC5jOjE1OQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAiZXN0cmF0w6lnaWEgZGUgaW50ZWdyYcOnw6NvIGEgdXNhciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxOSBidWlsdGluL3B1bGwuYzoxNjIKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIm9ww6fDo289dmFsb3IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjAgYnVpbHRpbi9wdWxsLmM6MTYzCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3DDp8O1ZXMgZGEgZXN0cmF0w6lnaWEgZGUgaW50ZWdyYcOnw6NvIHNlbGVjaW9uYWRhIgorCisjOiBidWlsdGluL21lcmdlLmM6MjIyCittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICJtZW5zYWdlbSBkZSBjb21taXQgKGRlIGludGVncmHDp8OjbyBuw6NvIHN1c2NldMOtdmVsIGEgYXZhbsOnbyByw6FwaWRvKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyNgorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJhYm9ydGFyIGludGVncmHDp8OjbyBlbSBjdXJzbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyOAorbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJjb250aW51YXIgYSBpbnRlZ3Jhw6fDo28gZW0gY3Vyc28iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMzAgYnVpbHRpbi9wdWxsLmM6MTcwCittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJwZXJtaXRpciBpbnRlZ3Jhw6fDo28gZGUgaGlzdMOzcmljb3MgbsOjbyByZWxhY2lvbmFkb3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTgKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGV4ZWN1dGFyIG8gY29tYW5kbyBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjMKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGV4ZWN1dGFyIG8gY29tYW5kbyBzdGFzaCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJub21lIGRlIG9iamV0byBpbnbDoWxpZG86ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjg3IGJ1aWx0aW4vbWVyZ2UuYzozMDQKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBleGVjdXRhciBvIGNvbWFuZG8gcmVhZC10cmVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MzM0Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAobsOjbyBow6EgbmFkYSBwYXJhIGVzbWFnYXIpIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiQ29tbWl0IGVzbWFnYWRvIC0tIEhFQUQgbsOjbyBhdHVhbGl6YWRhXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJOZW5odW1hIG1lbnNhZ2VtIGRlIGludGVncmHDp8OjbyAtLSBIRUFEIG7Do28gYXR1YWxpemFkYVxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycgbsOjbyBhcG9udGEgcGFyYSB1bSBjb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiVmFsb3IgZGUgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBpbmNvcnJldG86ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjU2Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiTsOjbyBzZSBwcm9jZXNzYSBvdXRyYSBjb2lzYSBzZW7Do28gaW5jb3Jwb3Jhw6fDo28gZGUgZHVhcyBjYWJlw6dhcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiT3DDp8OjbyBkZXNjb25oZWNpZGEgZGUgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGxlciAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkNvbW1pdCBkZSBpbnRlZ3Jhw6fDo28gbsOjbyByZWFsaXphZG87IHVzZSAnZ2l0IGNvbW1pdCcgcGFyYSBjb25jbHVpciBhICIKKyJpbnRlZ3Jhw6fDo28uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW50cm9kdXphIHVtYSBtZW5zYWdlbSBkZSBjb21taXQsIGV4cGxpY2FuZG8gcG9yIHF1ZSBlc3RhIGludGVncmHDp8OjbyDDqSAiCisibmVjZXNzw6FyaW8sXG4iCisic29icmV0dWRvIHNlIGluY29ycG9yYSB1bSByYW1vIGEgbW9udGFudGUgYXR1YWxpemFkbywgbnVtIHJhbW8gdMOzcGljby5cbiIKKyJcbiIKKyJMaW5oYXMgY29tZcOnYWRhcyBjb20gJyVjJyBzw6NvIGlnbm9yYWRhcyBlIHVtYSBtZW5zYWdlbSB2YXppYVxuIgorImFib3J0YSBvIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc3NgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiTWVuc2FnZW0gZGUgY29tbWl0IHZhemlhLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIk1hcmF2aWxob3NvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJGYWxoYSBhbyByZWFsaXphciBpbnRlZ3Jhw6fDo28gYXV0b23DoXRpY2E7IGNvcnJpamEgb3MgY29uZmxpdG9zIGUgc3VibWV0YSBvICIKKyJyZXN1bHRhZG8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTAKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5lbmh1bSByYW1vIGF0dWFsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg5MgorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTsOjbyBow6EgdW0gcmVtb3RvIHBhcmEgbyByYW1vIGF0dWFsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg5NAorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTsOjbyBlc3TDoSBkZWZpbmlkbyBuZW5odW0gcmFtbyBhIG1vbnRhbnRlIHBhcmEgbyByYW1vIGF0dWFsLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJOZW5odW0gcmFtbyBkZSBtb25pdG9yaXphw6fDo28gcmVtb3RvIHNlZ3VpZG8gcG9yICVzIGRlICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIlZhbG9yICclcycgaW5jb3JyZXRvIG5vIGFtYmllbnRlICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZmVjaGFyICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIKK21zZ3N0ciAibsOjbyBzZSBwb2RlIGludGVncmFyIGVtICVzOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwODEKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAibsOjbyBzZSBwb2RlIGludGVncmFyIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NgorbXNnaWQgIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYWJvcnQgbsOjbyBsZXZhIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTUwCittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJOw6NvIGjDoSBuZW5odW1hIGludGVncmHDp8OjbyBwYXJhIHNlIGFib3J0YXIgKE1FUkdFX0hFQUQgbsOjbyBwcmVzZW50ZSkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE2MgorbXNnaWQgIi0tY29udGludWUgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tY29udGludWUgbsOjbyBsZXZhIGFyZ3VtZW50b3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTY2Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgaW4gcHJvZ3Jlc3MgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJOw6NvIGjDoSBuZW5odW1hIGludGVncmHDp8OjbyBlbSBjdXJzbyAoTUVSR0VfSEVBRCBuw6NvIHByZXNlbnRlKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgyCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIk7Do28gY29uY2x1aXUgYSBpbnRlZ3Jhw6fDo28gKE1FUkdFX0hFQUQgcHJlc2VudGUpLlxuIgorIlN1Ym1ldGEgYXMgc3VhcyBhbHRlcmHDp8O1ZXMgYW50ZXMgZGUgaW50ZWdyYXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4OQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBuw6NvIGNvbmNsdcOtZG8gKENIRVJSWV9QSUNLX0hFQUQgcHJlc2VudGUpLlxuIgorIlN1Ym1ldGEgYXMgc3VhcyBhbHRlcmHDp8O1ZXMgYW50ZXMgZGUgaW50ZWdyYXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE5MgorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgbsOjbyBjb25jbHXDrWRvIChDSEVSUllfUElDS19IRUFEIHByZXNlbnRlKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjAxCittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGNvbWJpbmFyIC0tc3F1YXNoIGUgLS1uby1mZi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjA5Cittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIk5lbmh1bSBjb21taXQgZXNwZWNpZmljYWRvIGUgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbsOjbyBkZWZpbmlkby4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjI2Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIkVzbWFnYXIgdW0gY29tbWl0IG51bWEgY2FiZcOnYSB2YXppYSBhaW5kYSBuw6NvIMOpIHN1cG9ydGFkbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjgKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorIk7Do28gZmF6IHNlbnRpZG8gc3VibWV0ZXIgZGUgbW9kbyBuw6NvIHN1c2NldMOtdmVsIGEgYXZhbsOnbyByw6FwaWRvLCBudW1hIGNhYmXDp2EgIgorInZhemlhIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyAtIG7Do28gw6kgYWxnbyBzZSBwb3NzYSBpbnRlZ3JhciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzUKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJTw7Mgc2UgcG9kZSBpbnRlZ3JhciBleGF0YW1lbnRlIHVtIGNvbW1pdCBudW1hIGNhYmXDp2EgdmF6aWEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyJBIGFzc2luYXR1cmEgR1BHIGRvIGNvbW1pdCAlcywgYWxlZ2FkYW1lbnRlIGFzc2luYWRhIHBvciAlcywgbsOjbyDDqSBkZSAiCisiY29uZmlhbsOnYS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICIiCisiQSBhc3NpbmF0dXJhIEdQRyBkbyBjb21taXQgJXMsIGFsZWdhZGFtZW50ZSBhc3NpbmFkYSBwb3IgJXMsIGVzdMOhIGluY29ycmV0YS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIk8gY29tbWl0ICVzIG7Do28gdGVtIHVtYSBhc3NpbmF0dXJhIEdQRy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiQSBhc3NpbmF0dXJhIEdQRyBkbyBjb21taXQgJXMgcG9yICVzIGVzdMOhIGNvcnJldGFcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDAKK21zZ2lkICJyZWZ1c2luZyB0byBtZXJnZSB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJpbnRlZ3Jhw6fDo28gZGUgaGlzdMOzcmljb3MgbsOjbyByZWxhY2lvbmFkb3MgcmVjdXNhZGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQ5Cittc2dpZCAiQWxyZWFkeSB1cC10by1kYXRlLiIKK21zZ3N0ciAiSsOhIGVzdMOhIGF0dWFsaXphZG8uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiQSBhdHVhbGl6YXIgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICJBIHRlbnRhciBpbnRlZ3Jhw6fDo28gbWVzbW8gdHJpdmlhbCBubyBpbnRlcmlvciBkbyDDrW5kaWNlLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk7Do28uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDMyCittc2dpZCAiQWxyZWFkeSB1cC10by1kYXRlLiBZZWVhaCEiCittc2dzdHIgIkrDoSBlc3TDoSBhdHVhbGl6YWRvLiBTaW0hIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQzOAorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgYXZhbsOnYXIgcmFwaWRhbWVudGUsIGEgYWJvcnRhci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYxIGJ1aWx0aW4vbWVyZ2UuYzoxNTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICJBIHJlY3VhciBhIMOhcnZvcmUgYW8gc2V1IGVzdGFkbyBvcmlnaW5hbC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAiQSB0ZW50YXIgYSBlc3RyYXTDqWdpYSBkZSBpbnRlZ3Jhw6fDo28gJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIk5lbmh1bWEgZXN0cmF0w6lnaWEgZGUgaW50ZWdyYcOnw6NvIGNvbnNlZ3VpdSBwcm9jZXNzYXIgYSBpbnRlZ3Jhw6fDo28uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJGYWxoYSBhbyBpbnRlZ3JhciBjb20gYSBlc3RyYXTDqWdpYSAlcy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIkEgdXNhciAlcyBwYXJhIHByZXBhcmFyIHJlc29sdcOnw6NvIG1hbnVhbC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkEgaW50ZWdyYcOnw6NvIGF1dG9tw6F0aWNhIGZvaSBiZW0gc3VjZWRpZGE7IGludGVycm9tcGlkYSBhbnRlcyBkZSBzdWJtZXRlciAiCisiY29tbyBzb2xpY2l0YWRvXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjI5Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMwCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzEKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmZXLDqm5jaWE+IFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxNworbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAibW9zdHJhciB0b2RvcyBvcyBhbnRlY2Vzc29yZXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxOQorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAiZW5jb250cmFyIGFudGVjZXNzb3JlcyBkZSB1bWEgw7puaWNhIGludGVncmHDp8OjbyBjb20gbiBwb250b3MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMQorbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJsaXN0YXIgcmV2aXPDtWVzIG7Do28gYWxjYW7Dp8OhdmVpcyBhIHBhcnRpciBkZSBvdXRyYXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMworbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAibyBwcmltZWlybyDDqSBhbnRlY2Vzc29yIGRvIHNlZ3VuZG8/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjUKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiIgorImRlc2NvYnJpciBvbmRlIGZvaSBxdWUgbyA8Y29tbWl0PiBkaXZlcmdpdSB1c2FuZG8gbyByZWZsb2cgZGEgPHJlZmVyw6puY2lhPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OAorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9ww6fDtWVzPl0gWy1MIDxub21lMT4gWy1MIDxvcmlnPiBbLUwgPG5vbWUyPl1dXSA8ZmljaGVpcm8xPiAiCisiPGZpY2hlaXJvLW9yaWc+IDxmaWNoZWlybzI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozMgorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImVudmlhciByZXN1bHRhZG9zIHBhcmEgYSBzYcOtZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzMKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAidXNhciBpbnRlZ3Jhw6fDo28gYmFzZWFkYSBlbSBkaWZmMyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgInVzYXIgYSBub3NzYSB2ZXJzw6NvIGVtIGNhc28gZGUgY29uZmxpdG8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM2Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgInVzYXIgYSB2ZXJzw6NvIGRlbGVzIGVtIGNhc28gZGUgY29uZmxpdG8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM4Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAidXNhciBhIHVuacOjbyBkYXMgdmVyc8O1ZXMgZW0gY2FzbyBkZSBjb25mbGl0byIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDEKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAidXNhciBlc3RlIGNvbXByaW1lbnRvIGRlIG1hcmNhZG9yIHBhcmEgb3MgY29uZmxpdG9zIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MgorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAibsOjbyBhbGVydGFyIHNvYnJlIGNvbmZsaXRvcyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgImRlZmluaXIgaWRlbnRpZmljYXJlcyBwYXJhIGZpY2hlaXJvMS9maWNoZWlyby1vcmlnL2ZpY2hlaXJvMiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAib3DDp8OjbyBkZXNjb25oZWNpZG8gJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBvYmpldG8gJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gIm7Do28gw6kgcG9zc8OtdmVsIHByb2Nlc3NhciBtYWlzIGRvIHF1ZSAlZCBiYXNlLiBJZ25vcmFyICVzLiIKK21zZ3N0clsxXSAibsOjbyDDqSBwb3Nzw612ZWwgcHJvY2Vzc2FyIG1haXMgZG8gcXVlICVkIGJhc2VzLiBJZ25vcmFyICVzLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2MworbXNnaWQgIm5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIm7Do28gc2UgcG9kZSBwcm9jZXNzYXIgb3V0cmEgY29pc2Egc2Vuw6NvIGludGVncmHDp8OjbyBkZSBkdWFzIGNhYmXDp2FzLiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo2OSBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgcmVzb2x2ZXIgYSByZWZlcsOqbmNpYSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAiQSBpbnRlZ3JhciAlcyBjb20gJXNcbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NQorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUyCittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgImEgZW50cmFkYSB0ZXJtaW5hIGNvbSBOVUwiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUzIGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI0Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJwZXJtaXRpciBvYmpldG9zIG7Do28gcHJlc2VudGVzIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAicGVybWl0aXIgYSBjcmlhw6fDo28gZGUgbWFpcyBkbyBxdWUgdW1hIMOhcnZvcmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNgorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzxvcMOnw7Vlcz5dIDxvcmlnZW0+Li4uIDxkZXN0aW5vPiIKKworIzogYnVpbHRpbi9tdi5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAiTyBkaXJldMOzcmlvICVzIGVzdMOhIG5vIMOtbmRpY2UgcG9yw6ltIG5lbmh1bSBzdWJtw7NkdWxvPyIKKworIzogYnVpbHRpbi9tdi5jOjg0IGJ1aWx0aW4vcm0uYzoyOTAKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorIlByZXBhcmUgYXMgc3VhcyBhbHRlcmHDp8O1ZXMgZW0gLmdpdG1vZHVsZXMgb3UgZXNjb25kYS1hcyBwYXJhIHByb3NzZWd1aXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyBlc3TDoSBubyDDrW5kaWNlIgorCisjOiBidWlsdGluL212LmM6MTI0Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJmb3LDp2FyIG1vdmVyL211ZGFyIG8gbm9tZSBtZXNtbyBxdWUgbyBkZXN0aW5vIGV4aXN0YSIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJpZ25vcmFyIGVycm9zIGFvIG1vdmVyL211ZGFyIG8gbm9tZSIKKworIzogYnVpbHRpbi9tdi5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAibyBkZXN0aW5vICclcycgbsOjbyDDqSB1bSBkaXJldMOzcmlvIgorCisjOiBidWlsdGluL212LmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiQSB2ZXJpZmljYXIgYSBtdWRhbsOnYSBkZSBub21lIGRlICclcycgcGFyYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODIKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICJvcmlnZW0gaW5jb3JyZXRhIgorCisjOiBidWlsdGluL212LmM6MTg1Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbW92ZXIgdW0gZGlyZXTDs3JpbyBwYXJhIGRlbnRybyBkZSBzaSBwcsOzcHJpbyIKKworIzogYnVpbHRpbi9tdi5jOjE4OAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIG1vdmVyIHVtIGRpcmV0w7NyaW8gcGFyYSB1bSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9tdi5jOjE5NworbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIm8gZGlyZXTDs3JpbyBkZSBvcmlnZW0gZXN0w6EgdmF6aW8iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjIKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJuw6NvIGVzdMOhIG5vIGNvbnRyb2xvIGRlIHZlcnPDtWVzIgorCisjOiBidWlsdGluL212LmM6MjI1Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICJvIGRlc3Rpbm8gasOhIGV4aXN0ZSIKKworIzogYnVpbHRpbi9tdi5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICJhIHN1YnN0aXR1aXIgJyVzJyIKKworIzogYnVpbHRpbi9tdi5jOjIzNgorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHN1YnN0aXR1aXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzkKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIm3Dumx0aXBsYXMgb3JpZ2VucyBwYXJhIG8gbWVzbW8gZGVzdGlubyIKKworIzogYnVpbHRpbi9tdi5jOjI0MQorbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibyBkaXJldMOzcmlvIGRlIGRlc3Rpbm8gbsOjbyBleGlzdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCBvcmlnZW09JXMsIGRlc3Rpbm89JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiQSBtdWRhciBkZSBub21lIGRlICVzIHBhcmEgJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjI3NSBidWlsdGluL3JlbW90ZS5jOjcxMCBidWlsdGluL3JlcGFjay5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gbXVkYXIgbyBub21lIGRlICclcyciCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyODkKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9ww6fDtWVzPl0gPGNvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyOTAKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9ww6fDtWVzPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyOTEKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3DDp8O1ZXM+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzQ2Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgbm9tZXMgKHNlbSBTSEEtMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozNDcKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgInVzYXIgYXBlbmFzIHRhZ3MgcGFyYSBkZXNpZ25hciBjb21taXRzIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzQ5Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgInVzYXIgYXBlbmFzIHJlZmVyw6puY2lhIHF1ZSBjb3JyZXNwb25kYW0gYW8gPHBhZHLDo28+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzUxCittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJpZ25vcmFyIHJlZmVyw6puY2lhcyBxdWUgY29ycmVzcG9uZGFtIGFvIDxwYWRyw6NvPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM1MworbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgImxpc3RhciB0b2RvcyBvcyBjb21taXRzIGFsY2Fuw6fDoXZlaXMgYSBwYXJ0aXIgZGUgdG9kYXMgYXMgcmVmZXLDqm5jaWFzIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzU0Cittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJsZXIgZGEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzU1Cittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJwZXJtaXRpciBpbXByaW1pciBub21lcyAnaW5kZWZpbmlkb3MnIChwcmVkZWZpbmnDp8OjbykiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozNjEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiZGVzcmVmZXJlbmNpYXIgdGFncyBuYSBlbnRyYWRhICh1c28gaW50ZXJubykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamV0bz5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GICIKKyI8ZmljaGVpcm8+IHwgKC1jIHwgLUMpIDxvYmpldG8+XSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxkZS1vYmpldG8+IDxwYXJhLW9iamV0bz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GICIKKyI8ZmljaGVpcm8+IHwgKC1jIHwgLUMpIDxvYmpldG8+XSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxlc3RyYXTDqWdpYT5dIDxub3Rlcy1yZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamV0bz4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW4gfCAtdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbiB8IC12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxCittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xpc3QgWzxvYmpldG8+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NgorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPG9ww6fDtWVzPl0gWzxvYmpldG8+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzxvcMOnw7Vlcz5dIDxkZS1vYmpldG8+IDxwYXJhLW9iamV0bz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MgorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZGUtb2JqZXRvPiA8cGFyYS1vYmpldG8+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU3Cittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs8b3DDp8O1ZXM+XSBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjIKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjcKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPG9iamV0bz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPG9ww6fDtWVzPl0gPG5vdGVzLXJlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3DDp8O1ZXM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3DDp8O1ZXM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5Cittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZXRvPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NAorbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs8b3DDp8O1ZXM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5Cittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTQKK21zZ2lkICJXcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6IgorbXNnc3RyICJFc2NyZXZhL2VkaXRlIGFzIG5vdGFzIGRvIHNlZ3VpbnRlIG9iamV0bzoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIG8gY29tYW5kbyAnc2hvdycgc29icmUgbyBvYmpldG8gJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MQorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgYSBzYcOtZGEgZG8gY29tYW5kbyAnc2hvdyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyBjb25jbHVpciBvIGNvbWFuZG8gJ3Nob3cnIHNvYnJlIG8gb2JqZXRvICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTQKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgImZvcm5lw6dhIG8gY29udGXDumRvIGRhIG5vdGEgdXNhbmRvIGEgb3DDp8OjbyAtbSBvdSAtRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZXNjcmV2ZXIgbyBvYmpldG8gZGUgbm90YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAibyBjb250ZcO6ZG8gZGEgbm90YSBmb2kgY29sb2NhZG8gZW0gJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzMgYnVpbHRpbi90YWcuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzUgYnVpbHRpbi90YWcuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgb3UgbGVyICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTQgYnVpbHRpbi9ub3Rlcy5jOjMwNSBidWlsdGluL25vdGVzLmM6MzA3CisjOiBidWlsdGluL25vdGVzLmM6MzcyIGJ1aWx0aW4vbm90ZXMuYzo0MjcgYnVpbHRpbi9ub3Rlcy5jOjUxMworIzogYnVpbHRpbi9ub3Rlcy5jOjUxOCBidWlsdGluL25vdGVzLmM6NTk2IGJ1aWx0aW4vbm90ZXMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgImZhbGhhIGFvIHJlc29sdmVyICclcycgY29tbyB1bWEgcmVmZXLDqm5jaWEgdsOhbGlkYS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICJmYWxoYSBhbyBsZXIgbyBvYmpldG8gJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsZXIgb3MgZGFkb3MgZGEgbm90YSBkZSB1bSBvYmpldG8gbsOjby1ibG9iICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAibGluaGEgZGUgZW50cmFkYSBtYWxmb3JtYWRhOiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiZmFsaGEgYW8gY29waWFyIG5vdGFzIGRlICclcycgcGFyYSAnJXMnIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYQorIy4gZ2l0IG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIzogYnVpbHRpbi9ub3Rlcy5jOjM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byAlcyBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgImZvaSByZWN1c2FkbyBlZmV0dWFyICVzIGRlIG5vdGFzIGVtICVzIChmb3JhIGRlIHJlZnMvbm90ZXMvKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2NSBidWlsdGluL25vdGVzLmM6NDIwIGJ1aWx0aW4vbm90ZXMuYzo0OTYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDggYnVpbHRpbi9ub3Rlcy5jOjU4NCBidWlsdGluL25vdGVzLmM6NjUxCisjOiBidWlsdGluL25vdGVzLmM6ODAxIGJ1aWx0aW4vbm90ZXMuYzo5NDggYnVpbHRpbi9ub3Rlcy5jOjk2OQorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgImRlbWFzaWFkb3MgcGFyw6JtZXRyb3MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzggYnVpbHRpbi9ub3Rlcy5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJuZW5odW1hIG5vdGEgZW5jb250cmFkYSBwYXJhIG8gb2JqZXRvICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5OSBidWlsdGluL25vdGVzLmM6NTYyCittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiY29udGXDumRvIGRhIG5vdGEgc29iIGEgZm9ybWEgZGUgY2FkZWlhIGRlIGNhcmFjdGVyZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDIgYnVpbHRpbi9ub3Rlcy5jOjU2NQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJjb250ZcO6ZG8gZGEgbm90YSBkZSB1bSBmaWNoZWlybyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwNSBidWlsdGluL25vdGVzLmM6NTY4Cittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJyZXV0aWxpemFyIGUgZWRpdGFyIG8gb2JqZXRvIGRlIG5vdGEgZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL25vdGVzLmM6NDA4IGJ1aWx0aW4vbm90ZXMuYzo1NzEKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgInJldXRpbGl6YXIgbyBvYmpldG8gZGUgbm90YSBlc3BlY2lmaWNhZG8iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTEgYnVpbHRpbi9ub3Rlcy5jOjU3NAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAicGVybWl0aXIgZ3VhcmRhciB1bWEgbm90YSB2YXppYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NDgzCittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAic3Vic3RpdHVpciBub3RhcyBleGlzdGVudGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgYWRpY2lvbmFyIG5vdGFzLiBOb3RhcyBkbyBvYmpldG8gJXMgZW5jb250cmFkYXMuIFVzZSAnLWYnICIKKyJwYXJhIHN1YnN0aXR1w60tbGFzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ1MiBidWlsdGluL25vdGVzLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiQSBzdWJzdGl0dWlyIGFzIG5vdGFzIGV4aXN0ZW50ZXMgZG8gb2JqZXRvICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjYyMyBidWlsdGluL25vdGVzLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJBIHJlbW92ZXIgYSBub3RhIGRvIG9iamV0byAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDg0Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImxlciBvYmpldG9zIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ4NgorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICJjYXJyZWdhciBjb25maWd1cmHDp8OjbyBkZSByZWVzY3JpdGEgZG8gPGNvbWFuZG8+IChpbXBsaWNhIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NTA0Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJwYXLDom1ldHJvcyBpbnN1ZmljaWVudGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGNvcGlhciBub3Rhcy4gTm90YXMgZG8gb2JqZXRvICVzIGVuY29udHJhZGFzLiBVc2UgJy1mJyBwYXJhICIKKyJzdWJzdGl0dcOtLWxhcy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgImZhbHRhbSBub3RhcyBubyBvYmpldG8gZGUgb3JpZ2VtICVzLiBOw6NvIMOpIHBvc3PDrXZlbCBjb3BpYXIuIgorCisjOiBidWlsdGluL25vdGVzLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJBcyBvcMOnw7VlcyAtbS8tRi8tYy8tQyBzw6NvIG9ic29sZXRhcyBubyBzdWJjb21hbmRvICdlZGl0Jy5cbiIKKyJVc2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGVtIHNldSBsdWdhci5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY4NAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgImZhbGhhIGFvIGVsaW1pbmFyIGEgcmVmZXLDqm5jaWEgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY4NgorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1JFRiIKK21zZ3N0ciAiZmFsaGEgYW8gZWxpbWluYXIgYSByZWZlcsOqbmNpYSBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2ODgKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICdnaXQgbm90ZXMgbWVyZ2UnIHdvcmt0cmVlIgorbXNnc3RyICJmYWxoYSBhbyByZW1vdmVyIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBkZSAnZ2l0IG5vdGVzIG1lcmdlJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwOAorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJmYWxoYSBhbyBsZXIgcmVmZXLDqm5jaWEgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcxMAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZW5jb250cmFyIG8gY29tbWl0IGRlIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzEyCittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBjb21taXQgZGUgTk9URVNfTUVSR0VfUEFSVElBTC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjUKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgImZhbGhhIGFvIHJlc29sdmVyIE5PVEVTX01FUkdFX1JFRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyOAorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIKK21zZ3N0ciAiZmFsaGEgYW8gZmluYWxpemFyIGludGVncmHDp8OjbyBkZSBub3RhcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIgorbXNnc3RyICJlc3RyYXTDqWdpYSBkZSBpbnRlZ3Jhw6fDo28gZGUgbm90YXMgJXMgZGVzY29uaGVjaWRhIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcwCittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBnZXJhaXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzIKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkZSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzQKK21zZ2lkICIiCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgorbXNnc3RyICIiCisicmVzb2x2ZXIgY29uZmxpdG9zIG5hcyBub3RhcyB1c2FuZG8gYSBlc3RyYXTDqWdpYSBpbmRpY2FkYSAobWFudWFsL291cnMvIgorInRoZWlycy91bmlvbi9jYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3NgorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIkEgc3VibWV0ZXIgbm90YXMgbsOjbyBpbnRlZ3JhZGFzIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzc4Cittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiY29uY2x1aXIgaW50ZWdyYcOnw6NvIGRlIG5vdGFzLCBzdWJtZXRlbmRvIG5vdGFzIG7Do28gaW50ZWdyYWRhcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4MAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIkEgYWJvcnRhciByZXNvbHXDp8OjbyBkZSBpbnRlZ3Jhw6fDo28gZGFzIG5vdGFzIgorCisjOiBidWlsdGluL25vdGVzLmM6NzgyCittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgImFib3J0YXIgaW50ZWdyYcOnw6NvIGRhcyBub3RhcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbWlzdHVyYXIgLS1jb21taXQsIC0tYWJvcnQgb3UgLXMvLS1zdHJhdGVneSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5OAorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAidGVtIGRlIGVzcGVjaWZpY2FyIHVtYSByZWZlcsOqbmNpYSBkZSBub3RhcyBwYXJhIGludGVncmFyIgorCisjOiBidWlsdGluL25vdGVzLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gLXMvLS1zdHJhdGVneTogJXMiCittc2dzdHIgIi1zLy0tc3RyYXRlZ3kgZGVzY29uaGVjaWRhOiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJhIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAidW1hIGludGVncmHDp8OjbyBkYXMgbm90YXMgZW0gJXMgasOhIGVzdMOhIGVtIGN1cnNvIGVtICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgImZhbGhhIGFvIGd1YXJkYXIgbGlnYcOnw6NvIMOgIHJlZmVyw6puY2lhIGRlIG5vdGFzIGF0dWFsICglcykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggIgorIidnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciBhYm9ydCB0aGUgbWVyZ2Ugd2l0aCAnZ2l0IG5vdGVzIG1lcmdlIC0tIgorImFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIkEgaW50ZWdyYcOnw6NvIGF1dG9tw6F0aWNhIGRlIG5vdGFzIGZhbGhvdS4gQ29ycmlqYSBvcyBjb25mbGl0b3MgZW0gJXMgZSAiCisic3VibWV0YSBvIHJlc3VsdGFkbyBjb20gJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3UgYWJvcnRlIGEgaW50ZWdyYcOnw6NvICIKKyJjb20gJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0Jy5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiTyBvYmpldG8gJXMgbsOjbyB0ZW0gbmVuaHVtYSBub3RhXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTgKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgIm7Do28gY29uc2lkZXJhciBjb21vIGVycm8gYSByZW1vw6fDo28gZGUgdW1hIG5vdGEgbsOjbyBleGlzdGVudGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDEKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGVyIG5vbWUgZG9zIG9iamV0b3MgZGEgZW50cmFkYSBwYWRyw6NvIgorCisjOiBidWlsdGluL25vdGVzLmM6OTM5IGJ1aWx0aW4vcHJ1bmUuYzoxMDUgYnVpbHRpbi93b3JrdHJlZS5jOjEyNworbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAibsOjbyByZW1vdmVyLCBtb3N0cmFyIGFwZW5hcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk0MAorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgInJlcG9ydGFyIG5vdGFzIHBvZGFkYXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5ODIKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgIm5vdGVzLXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk4MworbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICJ1c2FyIG5vdGFzIGRlIDxub3Rlcy1yZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJzdWJjb21hbmRvIGRlc2NvbmhlY2lkbzogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcMOnw7Vlcz4uLi5dIFs8IDxsaXN0YS1yZWZlcsOqbmNpYXM+IHwgPCA8bGlzdGEtIgorIm9iamV0b3M+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMAorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9ww6fDtWVzPi4uLl0gPG5vbWUtYmFzZT4gWzwgPGxpc3RhLXJlZmVyw6puY2lhcz4gfCA8IDxsaXN0YS0iCisib2JqZXRvcz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3NyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgImVycm8gYW8gY29tcGFjdGFyICglZCkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzcwCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAiIgorImEgZGVzYXRpdmFyIGVzY3JpdGEgZGUgbWFwYSBkZSBiaXRzLCBvcyBwYWNvdGVzIHPDo28gZGl2aWRpZG9zIGRldmlkbyBhIHBhY2suIgorInBhY2tTaXplTGltaXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzgzCittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICJBIGVzY3JldmVyIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTA2MworbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisiYSBkZXNhdGl2YXIgZXNjcml0YSBkZSBtYXBhIGRlIGJpdHMsIHZpc3RvIHF1ZSBhbGd1bnMgb2JqZXRvcyBuw6NvIGVzdMOjbyBhICIKKyJzZXIgY29tcGFjdGFkb3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQyNgorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIkEgY29tcHJpbWlyIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICJ2ZXJzw6NvIGRlIMOtbmRpY2UgJXMgbsOjbyBzdXBvcnRhZGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJ2ZXJzw6NvIGRlIMOtbmRpY2UgJyVzJyBpbmNvcnJldGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg2MworbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJuw6NvIG1vc3RyYXIgbWVkaWRvciBkZSBwcm9ncmVzc28iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg2NQorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIm1vc3RyYXIgbWVkaWRvciBkZSBwcm9ncmVzc28iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg2NworbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICJtb3N0cmFyIG1lZGlkb3IgZGUgcHJvZ3Jlc3NvIGR1cmFudGUgYSBmYXNlIGRlIGVzY3JpdGEgZGUgb2JqZXRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODcwCittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJzZW1lbGhhbnRlIGEgLS1hbGwtcHJvZ3Jlc3MgcXVhbmRvIG8gbWVkaWRvciBkZSBwcm9ncmVzc28gw6kgbW9zdHJhZG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg3MQorbXNnaWQgInZlcnNpb25bLG9mZnNldF0iCittc2dzdHIgInZlcnPDo29bLG9mZnNldF0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg3MgorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKyJlc2NyZXZlciBvIGZpY2hlaXJvIGRlIMOtbmRpY2UgZG8gcGFjb3RlIG5hIHZlcnPDo28gZGUgZm9ybWF0byBlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg3NQorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgInRhbWFuaG8gbcOheGltbyBkZSBjYWRhIGZpY2hlaXJvIGRlIHBhY290ZSBnZXJhZG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg3NworbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiaWdub3JhciBvYmpldG9zIGVtcHJlc3RhZG9zIGRvIGFycXVpdm8gZGUgb2JqZXRvcyBzb2JyZXNzYWxlbnRlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODc5Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJpZ25vcmFyIG9iamV0b3MgY29tcGFjdGFkb3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg4MQorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImxpbWl0YXIgYSBqYW5lbGEgZGUgY29tcGFjdGHDp8OjbyBwb3Igb2JqZXRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODgzCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiIgorImxpbWl0YXIgYSBqYW5lbGEgZGUgY29tcGFjdGHDp8OjbyBwb3IgbWVtw7NyaWEgZW0gYWRpw6fDo28gYW8gbGltaXRlIHBvciBvYmpldG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4ODUKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAidGFtYW5obyBtw6F4aW1vIGRlIGNhZGVpYXMgZGVsdGEgcGVybWl0aWRhcyBubyBwYWNvdGUgcmVzdWx0YW50ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODg3Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICJyZXV0aWxpemFyIGRlbHRhcyBleGlzdGVudGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4ODkKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICJyZXV0aWxpemFyIG9iamV0b3MgZXhpc3RlbnRlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODkxCittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJ1c2FyIG9iamV0b3MgT0ZTX0RFTFRBIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4OTMKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICJ1c2FyIHRocmVhZHMgYW8gcHJvY3VyYXIgcGVsYSBtZWxob3IgY29ycmVzcG9uZMOqbmNpYSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODk1Cittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAibsOjbyBjcmlhciB1bSBwYWNvdGUgdmF6aW8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg5NworbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxlciBhcmd1bWVudG9zIGRlIHJldmlzw6NvIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODk5Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgInJlc3RyaW5naXItc2UgYW9zIG9iamV0b3MgcXVlIGFpbmRhIG7Do28gZm9yYW0gY29tcGFjdGFkb3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkwMgorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICJpbmNsdWlyIG9iamV0b3MgYWxjYW7Dp8OhdmVpcyBhIHBhcnRpciBkZSBxdWFscXVlciByZWZlcsOqbmNpYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTA1Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICJpbmNsdWlyIG9iamV0b3MgcmVmZXJlbmNpYWRvcyBwb3IgZW50cmFkYXMgZG8gcmVmbG9nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MDgKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICJpbmNsdWlyIG9iamV0b3MgcmVmZXJlbmNpYWRvcyBwZWxvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkxMQorbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAiZ2VyYXIgcGFjb3RlIHBhcmEgYSBzYcOtZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTEzCittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICJpbmNsdWlyIG9iamV0b3MgdGFnIHF1ZSByZWZpcmFtIG9iamV0b3MgYSBjb21wYWN0YXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkxNQorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibWFudGVyIG9iamV0b3MgaW5hbGNhbsOnw6F2ZWlzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MTcKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImVtcGFjb3RhciBvYmpldG9zIHNvbHRvcyBpbmFsY2Fuw6fDoXZlaXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkxOQorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJkZXNjb21wYWN0YXIgb2JqZXRvcyBpbmFsY2Fuw6fDoXZlaXMgbWFpcyByZWNlbnRlcyBxdWUgPHRlbXBvPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTIyCittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgImNyaWFyIHBhY290ZXMgZmlub3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkyNAorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICJjcmlhciBwYWNvdGVzIGFkZXF1YWRvcyBwYXJhIG9idGVyIGVtIHJlcG9zaXTDs3Jpb3MgcG91Y28gcHJvZnVuZG9zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MjYKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICJpZ25vcmFyIHBhY290ZXMgcXVlIHRlbmhhbSB1bSBmaWNoZWlybyAua2VlcCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTI4Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAibsOtdmVsIGRlIGNvbXBhY3Rhw6fDo28gZG8gcGFjb3RlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5MzAKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAibsOjbyBlc2NvbmRlciBjb21taXRzIGludHJvZHV6aWRvcyBwb3IgZW54ZXJ0b3MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkzMgorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorInVzYXIgdW0gw61uZGljZSBkZSBtYXBhIGRlIGJpdHMgc2UgZGlzcG9uw612ZWwsIHBhcmEgYWNlbGVyYXIgYSBjb250YWdlbSBkZSAiCisib2JqZXRvcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTM0Cittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAiZXNjcmV2ZXIgdW0gw61uZGljZSBkZSBtYXBhIGRlIGJpdHMganVudGFtZW50ZSBjb20gbyDDrW5kaWNlIGRvIHBhY290ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDYxCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQSBjb250YXIgb2JqZXRvcyIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo2Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTQKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgImNvbXBhY3RhciB0dWRvIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE1Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgImVsaW1pbmFyIHJlZmVyw6puY2lhcyBzb2x0YXMgKHByZWRlZmluacOnw6NvKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDAKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiQSByZW1vdmVyIG9iamV0b3MgZHVwbGljYWRvcyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjExCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLWV4cGlyZSA8dGVtcG8+XSBbLS1dIFs8aGVhZD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA2Cittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICJhcHJlc2VudGFyIG9iamV0b3MgZWxpbWluYWRvcyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwOQorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJleHBpcmFyIG9iamV0b3MgbWFpcyBhbnRpZ29zIHF1ZSA8dGVtcG8+IgorCisjOiBidWlsdGluL3BydW5lLmM6MTIzCittc2dpZCAiY2Fubm90IHBydW5lIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBsaW1wYXIgbnVtIHJlcG9zaXTDs3JpbyBkZSBvYmpldG9zLXByZWNpb3NvcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NTEgYnVpbHRpbi9wdWxsLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJWYWxvciBpbnbDoWxpZG8gZGUgJXM6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo3MworbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPG9ww6fDtWVzPl0gWzxyZXBvc2l0w7NyaW8+IFs8ZXNwZWNpZmljYWRvci1kZS1yZWZlcsOqbmNpYT4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTIxCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIk9ww6fDtWVzIHJlbGF0aXZhcyBhIGludGVncmHDp8OjbyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTI0Cittc2dpZCAiaW5jb3Jwb3JhdGUgY2hhbmdlcyBieSByZWJhc2luZyByYXRoZXIgdGhhbiBtZXJnaW5nIgorbXNnc3RyICJpbmNvcnBvcmFyIGFsdGVyYcOnw7VlcyBwb3IgcmViYXNlIGVtIHZleiBkZSBpbnRlZ3JhciIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ4IGJ1aWx0aW4vcmViYXNlLS1oZWxwZXIuYzoxOCBidWlsdGluL3JldmVydC5jOjEyMAorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAicGVybWl0aXIgYXZhbsOnbyByw6FwaWRvIgorCisjOiBidWlsdGluL3B1bGwuYzoxNTcKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAiZW1waWxoYXIvZGVzZW1waWxoYXIgYXV0b21hdGljYW1lbnRlIGFudGVzIGRlIGRlcG9pcyBkZSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3MworbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiT3DDp8O1ZXMgcmVsYWNpb25hZGFzIGNvbSBvYnRlbsOnw6NvIGRlIG9iamV0b3MiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE5NQorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIHB1bGxlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAibsO6bWVybyBkZSBzdWJtw7NkdWxvcyBwdXhhZG9zIGVtIHBhcmFsZWxvIgorCisjOiBidWlsdGluL3B1bGwuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIlZhbG9yIGludsOhbGlkbyBkZSBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6Mzk3Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk7Do28gaMOhIG5lbmh1bSBjYW5kaWRhdG8gY29tIG8gcXVhbCByZWFsaXphciByZWJhc2UgZGUgZW50cmUgYXMgcmVmZXLDqm5jaWFzICIKKyJxdWUgc2UgYWNhYmFyYW0gZGUgb2J0ZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzozOTkKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk7Do28gaMOhIG5lbmh1bSBjYW5kaWRhdG8gY29tIG8gcXVhbCBpbnRlZ3JhciBkZSBlbnRyZSBhcyByZWZlcsOqbmNpYXMgcXVlIHNlICIKKyJhY2FiYXJhbSBvYnRlci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQwMAorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyJHZXJhbG1lbnRlLCBzaWduaWZpY2EgcXVlIGZvcm5lY2V1IHVtIGVzcGVjaWZpY2Fkb3IgZGUgcmVmZXLDqm5jaWFcbiIKKyJjb20gdW0gY2Fyw6FjdGVyIHVuaXZlcnNhbCAod2lsZGNhcmQpIHF1ZSBuw6NvIGNvcnJlc3BvbmRlIGEgbmVuaHVtIHJlbW90by4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiU29saWNpdG91IHB1eGFyIG8gcmVtb3RvICclcycsIG1hcyBuw6NvIGVzcGVjaWZpY291IHVtIHJhbW8uXG4iCisiVW1hIHZleiBxdWUgZXN0ZSBuw6NvIMOpIG8gcmVtb3RvIGNvbmZpZ3VyYWRvIHBvciBwcmVkZWZpbmnDp8Ojb1xuIgorImRvIHJhbW8gYXR1YWwsIGRldmUgZXNwZWNpZmljYXIgdW0gcmFtbyBuYSBsaW5oYSBkZSBjb21hbmRvcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQwOCBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAiTsOjbyBzZSBlbmNvbnRyYSBlbSBuZW5odW0gcmFtbyBkZSBtb21lbnRvLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDEwIGJ1aWx0aW4vcHVsbC5jOjQyNSBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAiRXNwZWNpZmlxdWUgbyByYW1vIHNvYnJlIG8gcXVhbCBwcmV0ZW5kZSByZWFsaXphciByZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MTIgYnVpbHRpbi9wdWxsLmM6NDI3IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIkVzcGVjaWZpcXVlIG8gcmFtbyBjb20gbyBxdWFsIHByZXRlbmRlIGludGVncmFyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDEzIGJ1aWx0aW4vcHVsbC5jOjQyOAorbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIkNvbnN1bHRlIGdpdC1wdWxsKDEpIHBhcmEgb2J0ZXIgbWFpcyBkZXRhbGhlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQxNSBidWlsdGluL3B1bGwuYzo0MjEgYnVpbHRpbi9wdWxsLmM6NDMwCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjxyZW1vdG8+IgorCisjOiBidWlsdGluL3B1bGwuYzo0MTUgYnVpbHRpbi9wdWxsLmM6NDMwIGJ1aWx0aW4vcHVsbC5jOjQzNSBnaXQtcmViYXNlLnNoOjQ1NQorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI8cmFtbz4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQyMyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk8gcmFtbyBhdHVhbCBuw6NvIHNlZ3VlIG5lbmh1bSByYW1vLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDMyIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICIiCisiU2UgZGVzZWphIGRlZmluaXIgbyByYW1vIHF1ZSBkZXZlIHNlciBzZWd1aWRvIHBvciBlc3RlIHJhbW8sIHBvZGUgZmF6w6otbG8gIgorImNvbToiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkEgY29uZmlndXJhw6fDo28gaW5kaWNhIHBhcmEgaW50ZWdyYXIgY29tIGEgcmVmZXLDqm5jaWEgJyVzJ1xuIgorImRvIHJlbW90bywgbWFzIGFxdWVsYSByZWZlcsOqbmNpYSBuw6NvIGZvaSBvYnRpZGEuIgorCisjOiBidWlsdGluL3B1bGwuYzo3NTQKK21zZ2lkICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiCittc2dzdHIgImlnbm9yYWRvIC0tdmVyaWZ5LXNpZ25hdHVyZXMgcGFyYSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjgwMQorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgImEgb3DDp8OjbyAtLVtuby1dYXV0b3N0YXNoIHPDsyDDqSB2w6FsaWRhIGNvbSAtLXJlYmFzZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjgwOQorbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJBIGF0dWFsaXphciB1bSByYW1vIHF1ZSBhaW5kYSBuw6NvIGZvaSBjcmlhZG8gZSBjb20gYWx0ZXJhw6fDtWVzIGFkaWNpb25hZGFzIGFvICIKKyLDrW5kaWNlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODEyCittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAicHV4YXIgY29tIHJlYmFzZSIKKworIzogYnVpbHRpbi9wdWxsLmM6ODEzCittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAic3VibWV0YSBvdSBlc2NvbmRhLWFzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorIm8gZmV0Y2ggYXR1YWxpem91IGEgY2FiZcOnYSBkbyByYW1vIGF0dWFsLlxuIgorImEgYXZhbsOnYXIgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGEgcGFydGlyIGRvXG4iCisiY29tbWl0ICVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGF2YW7Dp2FyIHJhcGlkYW1lbnRlIGEgw6Fydm9yZSBkZSB0cmFiYWxoby5cbiIKKyJEZXBvaXMgZGUgZ3VhcmRhciB0b2RhcyBhcyBhbHRlcmHDp8O1ZXMgaW1wb3J0YW50ZXMgaW5kaWNhZGFzIHBvclxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJleGVjdXRlXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisicGFyYSByZWN1cGVyYXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTgKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgaW50ZWdyYXIgbcO6bHRpcGxvcyByYW1vcyBudW1hIGNhYmXDp2EgdmF6aWEuIgorCisjOiBidWlsdGluL3B1bGwuYzo4NjIKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyIHJlYmFzZSBzb2JyZSBtw7psdGlwbG9zIHJhbW9zLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTYKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxvcMOnw7Vlcz5dIFs8cmVwb3NpdMOzcmlvPiBbPGVzcGVjaWZpY2Fkb3ItZGUtcmVmZXLDqm5jaWE+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjg5Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJmb3JtYSBhYnJldmlhZGEgZGUgdGFnIHNlbSA8dGFnPiIKKworIzogYnVpbHRpbi9wdXNoLmM6OTkKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgc8OzIGFjZWl0YSBub21lcyBzaW1wbGVzIGNvbW8gcmVmZXLDqm5jaWFzIGRlIGRlc3Rpbm8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE0MworbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyJQYXJhIGVzY29saGVyIHVtYSBvcMOnw6NvIHBlcm1hbmVudGVtZW50ZSwgY29uc3VsdGUgcHVzaC5kZWZhdWx0IGVtICdnaXQgaGVscCAiCisiY29uZmlnJy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzICVzXG4iCisiJXMiCittc2dzdHIgIiIKKyJPIHJhbW8gYSBtb250YW50ZSBkbyByYW1vIGF0dWFsIG7Do28gY29pbmNpZGUgY29tIG8gbm9tZSBkbyByYW1vIGF0dWFsLlxuIgorIlBhcmEgcHVibGljYXIgbm8gcmFtbyBhIG1vbnRhbnRlIG5vIHJlbW90bywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJQYXJhIHB1YmxpY2FyIG5vIHJhbW8gY29tIG8gbWVzbW8gbm9tZSBubyByZW1vdG8sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorCisjOiBidWlsdGluL3B1c2guYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisiTsOjbyBzZSBlbmNvbnRyYSBlbSBuZW5odW0gcmFtbyBuZXN0ZSBtb21lbnRvLlxuIgorIlBhcmEgcHVibGljYXIgbyBoaXN0w7NyaWNvIHF1ZSBjb25kdXppdSBhbyBlc3RhZG8gYXR1YWwgKGRlIEhFQURcbiIKKyJkZXN0YWNhZGEpLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJPIHJhbW8gYXR1YWwgJXMgbsOjbyB0ZW0gbmVuaHVtIHJhbW8gYSBtb250YW50ZS5cbiIKKyJQYXJhIHB1YmxpY2FyIG8gcmFtbyBhdHVhbCBlIGRlZmluaXIgbyByZW1vdG8gYSBtb250YW50ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiTyByYW1vIGF0dWFsICVzIHRlbSBtw7psdGlwbG9zIHJhbW9zIGEgbW9udGFudGUsIHB1YmxpY2HDp8OjbyByZWN1c2FkYS4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiTyByZW1vdG8gJyVzJywgbm8gcXVhbCBwcmV0ZW5kZSBwdWJsaWNhciwgbsOjbyDDqSBvIHJlbW90byBhIG1vbnRhbnRlXG4iCisiZG8gcmFtbyBhdHVhbCAnJXMnLiBEZXZlIGluZGljYXIgbyBxdWUgcHJldGVuZGUgcHVibGljYXIgZSBxdWUgcmFtb1xuIgorInJlbW90byBhdHVhbGl6YXIuIgorCisjOiBidWlsdGluL3B1c2guYzoyNDUKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorIk7Do28gaW5kaWNvdSBuZW5odW0gZXNwZWNpZmljYWRvciBkZSByZWZlcsOqbmNpYSBwYXJhIHB1YmxpY2FyIGUgbyB2YWxvciBkZSAiCisicHVzaC5kZWZhdWx0IMOpIFwibm90aGluZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjUyCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiQXMgYXR1YWxpemHDp8O1ZXMgZm9yYW0gcmVqZWl0YWRhcyBwb3JxdWUgYSBwb250YSBkbyByYW1vIGF0dWFsIGVzdMOhIGF0cmFzYWRhXG4iCisiZW0gcmVsYcOnw6NvIGFvIGhvbcOzbG9nbyByZW1vdG8uIEludGVncmUgYXMgYWx0ZXJhw6fDtWVzIHJlbW90YXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYW50ZXMgZGUgcHVibGljYXIgZGUgbm92by5cbiIKKyJDb25zdWx0ZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBlbSAnZ2l0IHB1c2ggLS1oZWxwJyBwYXJhIG9idGVyIGRldGFsaGVzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjU4Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiQXMgYXR1YWxpemHDp8O1ZXMgZm9yYW0gcmVqZWl0YWRhcyBwb3JxdWUgYSBwb250YSBkbyByYW1vIGF0dWFsIGVzdMOhIGF0cmFzYWRhXG4iCisiZW0gcmVsYcOnw6NvIGFvIGhvbcOzbG9nbyByZW1vdG8uIEV4dHJhaWEgbyByYW1vIGUgaW50ZWdyZVxuIgorImFzIGFsdGVyYcOnw7VlcyByZW1vdGFzIChlLmcuICdnaXQgcHVsbCAuLi4nKSBhbnRlcyBkZSBwdWJsaWNhciBkZSBub3ZvLlxuIgorIkNvbnN1bHRlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGVtICdnaXQgcHVzaCAtLWhlbHAnIHBhcmEgb2J0ZXIgZGV0YWxoZXMuIgorCisjOiBidWlsdGluL3B1c2guYzoyNjQKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiQXMgYXR1YWxpemHDp8O1ZXMgZm9yYW0gcmVqZWl0YWRhcyBwb3JxdWUgbyByZW1vdG8gY29udMOpbSBhbHRlcmHDp8O1ZXMgcXVlXG4iCisibsOjbyB0ZW0gbG9jYWxtZW50ZS4gSGFiaXR1YWxtZW50ZSwgYWNvbnRlY2UgcG9ycXVlIG91dHJvIHJlcG9zaXTDs3JpbyAiCisicHVibGljb3VcbiIKKyJuYSBtZXNtYSByZWZlcsOqbmNpYS4gUG9kZSBpbnRlZ3JhciBwcmltZWlybyBhcyBhbHRlcmHDp8O1ZXMgcmVtb3Rhc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYW50ZXMgZGUgcHVibGljYXIgZGUgbm92by5cbiIKKyJDb25zdWx0ZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBlbSAnZ2l0IHB1c2ggLS1oZWxwJyBwYXJhIG9idGVyIGRldGFsaGVzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjcxCittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiQXMgYXR1YWxpemHDp8O1ZXMgZm9yYW0gcmVqZWl0YWRhcyBwb3JxdWUgYSB0YWcgasOhIGV4aXN0ZSBubyByZW1vdG8uIgorCisjOiBidWlsdGluL3B1c2guYzoyNzQKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIGF0dWFsaXphciB1bWEgcmVmZXLDqm5jaWEgcmVtb3RhIHF1ZSBhcG9udGUgcGFyYSB1bVxuIgorIm9iamV0byBuw6NvIGNvbW1pdCwgb3UgYXR1YWxpemFyIHVtYSByZWZlcsOqbmNpYSByZW1vdGEgZmF6ZW5kby1hXG4iCisiYXBvbnRhciBwYXJhIHVtIG9iamV0byBuw6NvIGNvbW1pdCwgc2VtIHVzYXIgYSBvcMOnw6NvICctLWZvcmNlJy5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAiQSBwdWJsaWNhciBlbSAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgImZhbGhhIGFvIHB1YmxpY2FyIGFsZ3VtYXMgcmVmZXLDqm5jaWFzIGVtICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJyZXBvc2l0w7NyaW8gJyVzJyBpbmNvcnJldG8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM3MAorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiRGVzdGlubyBkZSBwdWJsaWNhw6fDo28gbsOjbyBkZWZpbmlkby5cbiIKKyJJbmRpcXVlIHVtIFVSTCBuYSBsaW5oYSBkZSBjb21hbmRvcyBvdSBjb25maWd1cmUgdW0gcmVwb3NpdMOzcmlvIHJlbW90byAiCisidXNhbmRvXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxub21lPiA8dXJsPlxuIgorIlxuIgorImUgcHVibGlxdWUgdXNhbmRvIG8gbm9tZSByZW1vdG9cbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5vbWU+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4OAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZSAtLXRhZ3Mgc8OjbyBpbmNvbXBhdMOtdmVpcyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzg5Cittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwgbsOjbyBwb2RlIHNlciBjb21iaW5hZG8gY29tIGVzcGVjaWZpY2Fkb3JlcyBkZSByZWZlcsOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3IgZSAtLXRhZ3Mgc8OjbyBpbmNvbXBhdMOtdmVpcyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk1Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3IgbsOjbyBwb2RlIHNlciBjb21iaW5hZG8gY29tIGVzcGVjaWZpY2Fkb3JlcyBkZSByZWZlcsOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQwMAorbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCBlIC0tbWlycm9yIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUxOAorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgInJlcG9zaXTDs3JpbyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTE5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAicHVibGljYXIgdG9kYXMgYXMgcmVmZXLDqm5jaWFzIgorCisjOiBidWlsdGluL3B1c2guYzo1MjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgInJlcGxpY2FyIHRvZGFzIGFzIHJlZmVyw6puY2lhcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTIyCittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgImVsaW1pbmFyIHJlZmVyw6puY2lhcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTIzCittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICJwdWJsaWNhciB0YWdzIChuw6NvIHBvZGUgc2VyIHVzYWRvIGNvbSAtLWFsbCBvdSAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUyNiBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgImZvcsOnYXIgYXR1YWxpemHDp8OjbyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTI4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicmVmbmFtZT46PGV4cGVjdCIKK21zZ3N0ciAibm9tZSBkYSByZWZlcsOqbmNpYT46PGVzcGVyYWRvIgorCisjOiBidWlsdGluL3B1c2guYzo1MjkgYnVpbHRpbi9zZW5kLXBhY2suYzoxODAKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiZXhpZ2lyIHF1ZSBvIGFudGlnbyB2YWxvciBkYSByZWZlcsOqbmNpYSB0ZW5oYSBlc3RlIHZhbG9yIgorCisjOiBidWlsdGluL3B1c2guYzo1MzIKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgImNvbnRyb2xhciBhIHB1YmxpY2HDp8OjbyByZWN1cnNpdmEgZGUgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUzNCBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgInVzYXIgcGFjb3RlIGZpbm8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUzNSBidWlsdGluL3B1c2guYzo1MzYgYnVpbHRpbi9zZW5kLXBhY2suYzoxNTkKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYwCittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgInByb2dyYW1hIHJlY2VpdmUgcGFjayIKKworIzogYnVpbHRpbi9wdXNoLmM6NTM3Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgImRlZmluaXIgbyByYW1vIGEgbW9udGFudGUgdXNhZG8gY29tIGdpdCBwdWxsL3N0YXR1cyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQwCittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgImVsaW1pbmFyIHJlZmVyw6puY2lhcyByZW1vdmlkYXMgbG9jYWxtZW50ZSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgImlnbm9yYXIgcHJlLXB1c2ggaG9vayIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzCittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICJwdWJsaWNhciB0YWdzIHBlcmRpZGFzIG1hcyByZWxldmFudGVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDYgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjcKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAiYXNzaW5hciBwdWJsaWNhw6fDo28gY29tIEdQRyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgInNvbGljaXRhciB0cmFuc2HDp8OjbyBhdMOzbWljYSBubyBzZXJ2aWRvciByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0OSBidWlsdGluL3NlbmQtcGFjay5jOjE3MAorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAiZXNwZWPDrWZpY28gZG8gc2Vydmlkb3IiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0OSBidWlsdGluL3NlbmQtcGFjay5jOjE3MQorbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAib3DDp8OjbyBwYXJhIHRyYW5zbWl0aXIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MworbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDDqSBpbmNvbXBhdMOtdmVsIGNvbSAtLWFsbCwgLS1taXJyb3IgZSAtLXRhZ3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NQorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICItLWRlbGV0ZSBuw6NvIGZheiBzZW50aWRvIHNlbSB1bWEgcmVmZXLDqm5jaWEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4NAorbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgImFzIG9ww6fDtWVzIGRlIHB1YmxpY2HDp8OjbyBuw6NvIHBvZGVtIHRlciBjYXJhdGVyZXMgZGUgbm92YSBsaW5oYSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MAorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tIgorInByZWZpeD08cHJlZml4bz4pIFstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby0iCisic3BhcnNlLWNoZWNrb3V0XSBbLS1pbmRleC1vdXRwdXQ9PGZpY2hlaXJvPl0gKC0tZW1wdHkgfCA8w6Fydm9yZS1ldGMxPiAiCisiWzzDoXJ2b3JlLWV0YzI+IFs8w6Fydm9yZS1ldGMzPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzAKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICJlc2NyZXZlciBvIMOtbmRpY2UgcmVzdWx0YW50ZSBubyA8ZmljaGVpcm8+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJhcGVuYXMgZXN2YXppYXIgbyDDrW5kaWNlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIkEgaW50ZWdyYXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM3Cittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAicmVhbGl6YXIgdW1hIGludGVncmHDp8OjbyBlbSBhZGnDp8OjbyBhIHVtYSBsZWl0dXJhIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAiIgorImludGVncmFyIGNvbSAzIHBvbnRvcyBzZSBhIGludGVncmHDp8OjbyBhbyBuw612ZWwgZGUgZmljaGVpcm9zIG7Do28gZm9yICIKKyJuZWNlc3PDoXJpYSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDEKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICJpbnRlZ3JhciBjb20gMyBwb250byBuYSBwcmVzZW7Dp2EgZGUgYWRpw6fDtWVzIGUgcmVtb8Onw7VlcyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDMKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJvIG1lc21vIHF1ZSAtbSwgbWFzIGRlc2NhcnRhciBlbnRyYWRhcyBuw6NvIGludGVncmFkYXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ0Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI8c3ViZGlyZXTDs3Jpbz4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICJsZXIgYSDDoXJ2b3JlIGVtIDxzdWJkaXJldMOzcmlvPi8gcGFyYSBvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ4Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiYXR1YWxpemFyIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBjb20gb3MgcmVzdWx0YWRvcyBkYSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUwCittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUxCittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJwZXJtaXRpciBxdWUgb3MgZmljaGVpcm9zIGV4cGxpY2l0YW1lbnRlIGlnbm9yYWRvcyBzZWphbSBzdWJzdGl0dcOtZG9zIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1NAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAibsOjbyB2ZXJpZmljYXIgYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGRlcG9pcyBkZSBpbnRlZ3JhciIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTUKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIm7Do28gYXR1YWxpemFyIG8gw61uZGljZSBvdSBhIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICJpZ25vcmFyIGEgYXBsaWNhw6fDo28gZG8gZmlsdHJvIGRlIGV4dHJhw6fDo28gZXNwYXJzYSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTkKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgImRlcHVyYXIgdW5wYWNrLXRyZWVzIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6NworbXNnaWQgImdpdCByZWJhc2UtLWhlbHBlciBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlYmFzZS0taGVscGVyIFs8b3DDp8O1ZXM+XSIKKworIzogYnVpbHRpbi9yZWJhc2UtLWhlbHBlci5jOjE5Cittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICJjb250aW51YXIgcmViYXNlIgorCisjOiBidWlsdGluL3JlYmFzZS0taGVscGVyLmM6MjEKK21zZ2lkICJhYm9ydCByZWJhc2UiCittc2dzdHIgImFib3J0YXIgcmViYXNlIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjI3Cittc2dpZCAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCittc2dzdHIgImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjc5NgorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnRcbiIKKyJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2hcbiIKKyJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisiXG4iCisiWW91IGNhbiBzZXQgdGhlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKyJpdHMgY3VycmVudCBicmFuY2g7IGhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3VcbiIKKyJhcnJhbmdlZCB0byB1cGRhdGUgaXRzIHdvcmsgdHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZVxuIgorIm90aGVyIHdheS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHNldFxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlBvciBwcmVkZWZpbmnDp8OjbywgYXR1YWxpemFyIG8gcmFtbyBhdHVhbCBudW0gcmVwb3NpdMOzcmlvIG7Do28tbnVcbiIKKyLDqSBwcm9pYmlkbywgcG9ycXVlIHRvcm5hcsOhIG8gw61uZGljZSBlIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBpbmNvbnNpc3RlbnRlc1xuIgorImNvbSBvIHF1ZSBwdWJsaWNvdSBlIHJlcXVlcmVyw6EgJ2dpdCByZXNldCAtLWhhcmQnIHBhcmEgaWd1YWxhciBhXG4iCisiw6Fydm9yZSBkZSB0cmFiYWxobyDDoCBIRUFELlxuIgorIlxuIgorIlBvZGUgZGVmaW5pciBhIHZhcmnDoXZlbCBjb25maWd1cmHDp8OjbyAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCdcbiIKKyJjb21vICdpZ25vcmUnIG91ICd3YXJuJyBubyByZXBvc2l0w7NyaW8gcmVtb3RvIHBhcmEgcGVybWl0aXIgcHVibGljYXJcbiIKKyJwYXJhIG8gcmFtbyBhdHVhbCBkZWxlOyBubyBlbnRhbnRvLCBuw6NvIMOpIHJlY29tZW5kYW5kbyBhIG1lbm9zIHF1ZVxuIgorImNvbnNpZ2EgZGUgb3V0cmEgZm9ybWEgYXR1YWxpemFyIGEgw6Fydm9yZSBkZSB0cmFiYWxobyBkZWxlIHBhcmFcbiIKKyJyZWZsZXRpciBvIHF1ZSBwdWJsaWNvdS5cbiIKKyJcbiIKKyJQYXJhIHN1cHJpbWlyIGVzdGEgbWVuc2FnZW0gZSBtYW50ZXIgbyBjb21wb3J0YW1lbnRvIHByZWRlZmluaWRvLCBkZWZpbmEgYSAiCisidmFyacOhdmVsIGRlIGNvbmZpZ3VyYcOnw6NvICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb21vICdyZWZ1c2UnLiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MTYKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dFxuIgorIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uXG4iCisiXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlBvciBwcmVkZWZpbmnDp8OjbywgZWxpbWluYXIgbyByYW1vIGF0dWFsIMOpIHByb2liaWRvLCBwb3JxdWUgbyBwcsOzeGltb1xuIgorIidnaXQgY2xvbmUnIG7Do28gcmVzdWx0YXLDoSBlbSBuZW5odW0gZmljaGVpcm8gZXh0cmHDrWRvLCBjYXVzYW5kbyBjb25mdXPDo28uXG4iCisiXG4iCisiUG9kZSBkZWZpbmlyIGEgdmFyacOhdmVsIGRlIGNvbmZpZ3VyYcOnw6NvICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb21vXG4iCisiJ3dhcm4nIG91ICdpZ25vcmUnIG5vIHJlcG9zaXTDs3JpbyByZW1vdG8gcGFyYSBwZXJtaXRpciBlbGltaW5hciBvXG4iCisicmFtbyBhdHVhbCwgY29tIG91IHNlbSB1bWEgbWVuc2FnZW0gZGUgYXZpc28uXG4iCisiXG4iCisiUGFyYSBzdXByaW1pciBlc3RhIG1lbnNhZ2VtLCBwb2RlIGRlZmluw60tbGEgY29tbyAncmVmdXNlJy4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTg4OQorbXNnaWQgInF1aWV0IgorbXNnc3RyICJzaWxlbmNpb3NvIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MDMKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiRGV2ZSBlc3BlY2lmaWNhciB1bSBkaXJldMOzcmlvLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclcycgZW0gJyVzJyBuw6NvIMOpIHVtIGNhcmltYm8gZGUgZGF0YS9ob3JhIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTQwIGJ1aWx0aW4vcmVmbG9nLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIG7Do28gw6kgdW0gY2FyaW1ibyBkZSBkYXRhL2hvcmEgdsOhbGlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzCittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPHJhbW8+XSBbLW0gPG1lc3RyZT5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxub21lPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNCBidWlsdGluL3JlbW90ZS5jOjM0Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDxhbnRpZ28+IDxub3ZvPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNSBidWlsdGluL3JlbW90ZS5jOjM5Cittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA8bm9tZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYgYnVpbHRpbi9yZW1vdGUuYzo0NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5vbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8cmFtbz4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5vbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOQorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdydXBvPiB8IDxyZW1vdG8+KS4uLl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bm9tZT4gPHJhbW8+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NzAKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMiBidWlsdGluL3JlbW90ZS5jOjc1Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5vbWU+IDxub3ZvLXVybD4gWzx1cmwtYW50aWdvPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMgYnVpbHRpbi9yZW1vdGUuYzo3NgorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bm9tZT4gPG5vdm8tdXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNCBidWlsdGluL3JlbW90ZS5jOjc3Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxub21lPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOQorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzxvcMOnw7Vlcz5dIDxub21lPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5vbWU+IDxyYW1vPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5vbWU+IDxyYW1vPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NQorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPG9ww6fDtWVzPl0gPG5vbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYwCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzxvcMOnw7Vlcz5dIDxub21lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NQorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9ww6fDtWVzPl0gWzxncnVwbz4gfCA8cmVtb3RvPl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIkEgYXR1YWxpemFyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNgorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyItLW1pcnJvciDDqSBwZXJpZ29zbyBlIG9ic29sZXRvO1xuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvdSAtLW1pcnJvcj1wdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBkZSBtaXJyb3IgZGVzY29uaGVjaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICJvYnRlciBvcyByYW1vcyByZW1vdG9zIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgImltcG9ydGFyIHRvZGFzIGFzIHRhZ3MgZSBvYmpldG9zIGFzc29jaWFkb3MgYW8gb2J0ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY0Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICJvdSBuw6NvIG9idGVyIG5lbmh1bWEgdGFnICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NgorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgInJhbW9zIGEgc2VndWlyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NworbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgInJhbW8gbWVzdHJlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OAorbXNnaWQgInB1c2h8ZmV0Y2giCittc2dzdHIgInB1c2h8ZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY5Cittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgImNvbmZpZ3VyYXIgbyByZW1vdG8gY29tbyB1bSBlc3BlbGhvIHBhcmEgcHVibGljYXIgb3Ugb2J0ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgxCittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiZXNwZWNpZmljYXIgdW0gcmFtbyBtZXN0cmUgbsOjbyBmYXogc2VudGlkbyBjb20gLS1taXJyb3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgzCittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiZXNwZWNpZmljYXIgcmFtb3MgcGFyYSBzZWd1aXIgc8OzIGZheiBzZW50aWRvIGNvbSBmZXRjaCBtaXJyb3JzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5MCBidWlsdGluL3JlbW90ZS5jOjYyOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJvIHJlbW90byAlcyBqw6EgZXhpc3RlLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTQgYnVpbHRpbi9yZW1vdGUuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiJyVzJyBuw6NvIMOpIHVtIG5vbWUgZGUgcmVtb3RvIHbDoWxpZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNvbmZpZ3VyYcOnw6NvIG8gcmFtbyBtZXN0cmUgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgbyBtYXBhIGRlIGZldGNoIGRvIGVzcGVjaWZpY2Fkb3IgZGUgcmVmZXLDqm5jaWEgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDM3IGJ1aWx0aW4vcmVtb3RlLmM6NDQ1Cittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKGNvcnJlc3BvbmRlbnRlKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDkKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKGVsaW1pbmFkbykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjIyIGJ1aWx0aW4vcmVtb3RlLmM6NzU3IGJ1aWx0aW4vcmVtb3RlLmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKK21zZ3N0ciAiUmVtb3RvIGluZXhpc3RlbnRlOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgbXVkYXIgbyBub21lIGRhIHNlY8Onw6NvIGRlIGNvbmZpZ3VyYcOnw6NvIGRlICclcycgcGFyYSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKyJPIHNlZ3VpbnRlIGVzcGVjaWZpY2Fkb3IgZGUgcmVmZXLDqm5jaWEsIG7Do28tcHJlZGVmaW5pZG8gZSB1c2FkbyBwYXJhIG9idGVyICIKKyJvYmpldG9zLCBuw6NvIGZvaSBhdHVhbGl6YWRvXG4iCisiXHQlc1xuIgorIlx0QXR1YWxpemUgYSBjb25maWd1cmHDp8OjbyBtYW51YWxtZW50ZSBzZSBuZWNlc3PDoXJpby4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJmYWxoYSBhbyBlbGltaW5hciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gY3JpYXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3OTQKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIk5vdGE6IFVtIHJhbW8gZm9yYSBkYSBoaWVyYXJxdWlhIHJlZnMvcmVtb3Rlcy8gbsOjbyBmb2kgcmVtb3ZpZG87XG4iCisicGFyYSBvIHJlbW92ZXIsIHVzZToiCittc2dzdHJbMV0gIiIKKyJOb3RhOiBhbGd1bnMgcmFtb3MgZm9yYSBkYSBoaWVyYXJxdWlhIHJlZnMvcmVtb3Rlcy8gbsOjbyBmb3JhbSByZW1vdmlkb3M7XG4iCisicGFyYSBvcyByZW1vdmVyLCB1c2U6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZW1vdmVyIGEgc2Vjw6fDo28gZGUgY29uZmlndXJhw6fDo28gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIgbm92byAob3MgcHLDs3hpbWEgb2JqZXRvcyBvYnRpZG9zIHNlcsOjbyBndWFyZGFkb3MgZW0gcmVtb3Rlcy8lcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTEyCittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiBzZWd1aWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgb2Jzb2xldG8gKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgcGFyYSByZW1vdmVyKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MTYKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk1NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIiIKKyJicmFuY2guJXMubWVyZ2UgaW52w6FsaWRvOyBuw6NvIMOpIHBvc3PDrXZlbCByZWJhc2VhciBzb2JyZSBtYWlzIGRvIHF1ZSB1bSByYW1vIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgInJlYmFzZWlhIGludGVyYXRpdmFtZW50ZSBzb2JyZSAlcyBkbyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgInJlYmFzZWlhIHNvYnJlICVzIGRvIHJlbW90byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIGludGVncmEgY29tICVzIGRvIHJlbW90byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJpbnRlZ3JhIGNvbSAlcyBkbyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAgZSBjb20gbyAlcyBkbyByZW1vdG9cbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDE4Cittc2dpZCAiY3JlYXRlIgorbXNnc3RyICJjcmlhZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAyMQorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiZWxpbWluYWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMjUKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJhdHVhbGl6YWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMjgKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJwb2RlIHNlciBhdmFuw6dhZG8gcmFwaWRhbWVudGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMQorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICJsb2NhbCBkZXNhdHVhbGl6YWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgZm9yw6dhIGVtICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHB1YmxpY2EgZW0gJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBmb3LDp2EgZW0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHB1YmxpY2EgZW0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExNgorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICJuw6NvIGNvbnN1bHRhciByZW1vdG9zIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogcmVtb3RvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIE9idGVyICAgIGRvIFVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE0NSBidWlsdGluL3JlbW90ZS5jOjExNTggYnVpbHRpbi9yZW1vdGUuYzoxMjk3Cittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIihuZW5odW0gVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduIHdpdGgKKyMuIHRoZSBvbmUgaW4gIiAgRmV0Y2ggVVJMOiAlcyIgdHJhbnNsYXRpb24KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NiBidWlsdGluL3JlbW90ZS5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIFB1YmxpY2FyIG5vIFVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE2MCBidWlsdGluL3JlbW90ZS5jOjExNjIgYnVpbHRpbi9yZW1vdGUuYzoxMTY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIFJhbW8gSEVBRDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE2MAorbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIihuw6NvIGNvbnN1bHRhZG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjIKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIihkZXNjb25oZWNpZG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiICBSYW1vIEhFQUQgKG8gcmVtb3RvIEhFQUQgw6kgYW1iw61ndW8sIHBvZGUgc2VyIHVtIGRvcyBzZWd1aW50ZXMpOlxuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICBSYW1vIHJlbW90bzolcyIKK21zZ3N0clsxXSAiICBSYW1vcyByZW1vdG9zOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODEgYnVpbHRpbi9yZW1vdGUuYzoxMjA3Cittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKGVzdGFkbyBuw6NvIGNvbnN1bHRhZG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTAKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICBSYW1vIGxvY2FsIGNvbmZpZ3VyYWRvIHBhcmEgJ2dpdCBwdWxsJzoiCittc2dzdHJbMV0gIiAgUmFtb3MgbG9jYWlzIGNvbmZpZ3VyYWRvcyBwYXJhICdnaXQgcHVsbCc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTgKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIFJlZmVyw6puY2lhcyBsb2NhaXMgc2Vyw6NvIHJlZmxldGlkYXMgKG1pcnJvcikgcG9yICdnaXQgcHVzaCciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBSZWZlcsOqbmNpYSBsb2NhbCBjb25maWd1cmFkYSBwYXJhICdnaXQgcHVzaCclczoiCittc2dzdHJbMV0gIiAgUmVmZXLDqm5jaWFzIGxvY2FpcyBjb25maWd1cmFkYXMgcGFyYSAnZ2l0IHB1c2gnJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjUKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgImRlZmluaXIgcmVmcy9yZW1vdGVzLzxub21lPi9IRUFEIGRlIGFjb3JkbyBjb20gbyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyNworbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgImVsaW1pbmFyIHJlZnMvcmVtb3Rlcy88bm9tZT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQyCittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZGV0ZXJtaW5hciBvIHJlbW90byBIRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDQKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiTcO6bHRpcGxvcyByYW1vcyBIRUFEIHJlbW90b3MuIEVzY29saGEgdW0gZXhwbGljaXRhbWVudGUgY29tOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBlbGltaW5hciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIlJlZmVyw6puY2lhIGludsOhbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjb25maWd1cmFyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIGZpY2Fyw6Egc3VzcGVuc28hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgZmljb3Ugc3VzcGVuc28hIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiQSBlbGltaW5hciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbZWxpbWluYXJpYV0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMworIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW2VsaW1pbmFkb10gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1OAorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgImVsaW1pbmFyIHJlbW90b3MgZGVwb2lzIGRlIG9idGVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MjEgYnVpbHRpbi9yZW1vdGUuYzoxNDc1IGJ1aWx0aW4vcmVtb3RlLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICJSZW1vdG8gaW5leGlzdGVudGUgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM3Cittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAiYWRpY2lvbmFyIHJhbW8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ0NAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIm5lbmh1bSByZW1vdG8gZXNwZWNpZmljYWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjEKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAiY29uc3VsdGFyIFVSTHMgZGUgcHVibGljYcOnw6NvIGVtIHZleiBkZSBVUkxzIHV0aWxpemFkb3MgcGFyYSBvYnRlciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDYzCittc2dpZCAicmV0dXJuIGFsbCBVUkxzIgorbXNnc3RyICJyZXRvcm5hciB0b2RvcyBvcyBVUkxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIKK21zZ3N0ciAibyByZW1vdG8gJyVzJyBuw6NvIHRlbSBuZW5odW0gVVJMIGNvbmZpZ3VyYWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MTcKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAibWFuaXB1bGFyIFVSTHMgZGUgcHVibGljYcOnw6NvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MTkKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJhZGljaW9uYXIgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MjEKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAiZWxpbWluYXIgVVJMcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTI4Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSBuw6NvIGZheiBzZW50aWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJQYWRyw6NvIGRlIFVSTCBhbnRpZ28gaW52w6FsaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiVVJMIG7Do28gZW5jb250cmFkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU3OQorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgcmVtb3ZlciB0b2RvcyBvcyBVUkxzIGRlIG7Do28gcHVibGljYcOnw6NvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTMKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICJzZXIgdmVyYm9zbzsgZGV2ZSBzZXIgY29sb2NhZG8gYW50ZXMgZGUgdW0gc3ViY29tYW5kbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIlN1YmNvbWFuZG8gZGVzY29uaGVjaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzxvcMOnw7Vlcz5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIyCittc2dpZCAiIgorIkluY3JlbWVudGFsIHJlcGFja3MgYXJlIGluY29tcGF0aWJsZSB3aXRoIGJpdG1hcCBpbmRleGVzLiAgVXNlXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggb3IgZGlzYWJsZSB0aGUgcGFjay53cml0ZWJpdG1hcHMgY29uZmlndXJhdGlvbi4iCittc2dzdHIgIiIKKyJSZXBhY2tzIGluY3JlbWVudGFpcyBzw6NvIGluY29tcGF0w612ZWlzIGNvbSDDrW5kaWNlcyBiaXRtYXAuIFVzZVxuIgorIi0tbm8td3JpdGUtYml0bWFwLcOtbmRleCBvdSBkZXNhdGl2ZSBhIGNvbmZpZ3VyYcOnw6NvIHBhY2sud3JpdGViaXRtYXBzLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAiY29tcGFjdGFyIHR1ZG8gbnVtIMO6bmljbyBwYWNvdGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY4Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAibyBtZXNtbyBxdWUgLWEsIGUgc29sdGFyIG9iamV0b3MgaW5hbGNhbsOnw6F2ZWlzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3MQorbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAicmVtb3ZlciBwYWNvdGVzIHJlZHVuZGFudGVzIGUgZXhlY3V0YXIgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzMKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2FyIC0tbm8tcmV1c2UtZGVsdGEgYW8gZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzUKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc3NhciAtLW5vLXJldXNlLW9iamVjdCBhbyBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NworbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAibsOjbyBleGVjdXRhciBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MAorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzYXIgLS1sb2NhbCBhbyBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MgorbXNnaWQgIndyaXRlIGJpdG1hcCBpbmRleCIKK21zZ3N0ciAiZXNjcmV2ZXIgw61uZGljZSBkZSBtYXBhIGRlIGJpdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgzCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgImFwcm94aW1hciIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODQKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICJjb20gLUEsIG7Do28gc29sdGFyIG1haXMgb2JqZXRvcyBhbMOpbSBkZXN0ZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg2Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImNvbSAtYSwgcmVlbXBhY290YXIgb2JqZXRvcyBpbmFsY2Fuw6fDoXZlaXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg4Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJkaW1lbnPDo28gZGEgamFuZWxhIHVzYWRhIGVtIGNvbXByZXNzw6NvIGRlIGRlbHRhcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODkgYnVpbHRpbi9yZXBhY2suYzoxOTMKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAiYnl0ZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkwCittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIiIKKyJvIG1lc21vIHF1ZSBvIGFudGVyaW9yLCBtYXMgbGltaXRhciBhIG1lbcOzcmlhIHVzYWRhIGVtIHZleiBkbyBuw7ptZXJvIGRlICIKKyJlbnRyYWRhcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgImxpbWl0YXIgYSBwcm9mdW5kaWRhZGUgbcOheGltYSBkZSBkZWx0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAidGFtYW5obyBtw6F4aW1vIGRlIGNhZGEgZmljaGVpcm8gZGUgcGFjb3RlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE5NgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICJyZWVtcGFjb3RhciBvYmpldG9zIGVtIHBhY290ZXMgbWFyY2Fkb3MgY29tIC5rZWVwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIwNgorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVsaW1pbmFyIHBhY290ZXMgbnVtIHJlcG9zaXTDs3JpbyBkZSBvYmpldG9zLXByZWNpb3NvcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMTAKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSBlIC1BIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDAwIGJ1aWx0aW4vd29ya3RyZWUuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnJXMnIgorbXNnc3RyICJmYWxoYSBhbyByZW1vdmVyICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE5Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDxvYmpldG8+IDxzdWJzdGl0dWnDp8Ojbz4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIwCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmpldG8+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYWk+Li4uXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPG9iamV0bz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdG8+XSBbLWwgWzxwYWRyw6NvPl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjkgYnVpbHRpbi9yZXBsYWNlLmM6MzY3IGJ1aWx0aW4vcmVwbGFjZS5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAiTm9tZSBkZSBvYmpldG8gaW52w6FsaWRvOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJtZXJnZXRhZyBpbmNvcnJldGEgbm8gY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgIm1lcmdldGFnIG1hbGZvcm1hZGEgbm8gY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisibyBjb21taXQgb3JpZ2luYWwgJyVzJyBjb250w6ltIGEgbWVyZ2V0YWcgJyVzJyBxdWUgZm9pIGV4Y2x1w61kYTsgdXNlIC0tZWRpdCAiCisiZW0gdmV6IGRlIC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZS4iCittc2dzdHIgIm8gY29tbWl0IG9yaWdpbmFsICclcycgdGVtIHVtYSBhc3NpbmF0dXJhIGdwZy4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwNgorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICJhIGFzc2luYXR1cmEgc2Vyw6EgcmVtb3ZpZGEgZG8gY29tbWl0IHN1cGxlbnRlISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgbyBjb21taXQgc3VwbGVudGUgZGU6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNgorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICJsaXN0YXIgcmVmZXLDqm5jaWFzIHN1YnN0aXR1w61kYXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNworbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgImVsaW1pbmFyIHJlZmVyw6puY2lhcyBzdWJzdGl0dcOtZGFzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzgKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAiZWRpdGFyIG9iamV0byBleGlzdGVudGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzOQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIm11ZGFyIG9zIHBhaXMgZGUgdW0gY29tbWl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NDAKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJzdWJzdGl0dWlyIGEgcmVmZXLDqm5jaWEgc2UgZXN0YSBleGlzdGlyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NDEKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIm7Do28gbW9zdHJhciBvIGNvbnRlw7pkbyBkZSAtLWVkaXQgY29tIGltcHJlc3PDo28gYm9uaXRhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NDIKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgInVzYXIgZXN0ZSBmb3JtYXRvIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEyCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiIgorImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxjYW1pbmhvPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NTgKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAicmVnaXN0YXIgcmVzb2x1w6fDtWVzIGxpbXBhcyBubyDDrW5kaWNlIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjYKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjcKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPMOhcnZvcmUtZXRjPl0gWy0tXSA8Y2FtaW5ob3M+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs8w6Fydm9yZS1ldGM+XSBbLS1dIFs8Y2FtaW5ob3M+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWl4ZWQiCittc2dzdHIgIm1pc3R1cmFkbyIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAic29mdCIKK21zZ3N0ciAic3VhdmUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImhhcmQiCittc2dzdHIgImZvcnRlIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAibWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImtlZXAiCittc2dzdHIgImNvbnNlcnZhZG9yIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAiSEVBRCBpbnbDoWxpZGEuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzYKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJGYWxoYSBhbyBwcm9jdXJhciDDoXJ2b3JlIGRlIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIkZhbGhhIGFvIHByb2N1cmFyIMOhcnZvcmUgZGUgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIGVzdMOhIGFnb3JhIGVtICVzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHJlcG9yIGRlIG1vZG8gJXMgZHVyYW50ZSB1bWEgaW50ZWdyYcOnw6NvLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3NgorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgInNpbGVuY2lvc28sIHPDsyByZXBvcnRhciBlcnJvcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OAorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJyZXBvciBIRUFEIGUgw61uZGljZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OQorbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAicmVwb3IgSEVBRCBhcGVuYXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODEgYnVpbHRpbi9yZXNldC5jOjI4MworbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgInJlcG9yIEhFQUQsIMOtbmRpY2UgZSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjg1Cittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJyZXBvciBIRUFEIG1hcyBjb25zZXJ2YXIgYWx0ZXJhw6fDtWVzIGxvY2FpcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJyZWdpc3RhciBhcGVuYXMgbyBmYWN0byBkZSBxdWUgb3MgY2FtaW5ob3MgcmVtb3ZpZG9zIHNlcsOjbyBhZGljaW9uYWRvcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICJGYWxoYSBhbyByZXNvbHZlciAnJXMnIGNvbW8gcmVmZXLDqm5jaWEgdsOhbGlkYS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICJGYWxoYSBhbyByZXNvbHZlciAnJXMnIGNvbW8gw6Fydm9yZSB2w6FsaWRhLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyMgorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCDDqSBpbmNvbXBhdMOtdmVsIGNvbSAtLXtoYXJkLG1peGVkLHNvZnR9IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMxCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICIiCisiLS1taXhlZCBhY29tcGFuaGFkbyBjb20gY2FtaW5ob3Mgw6kgb2Jzb2xldG87IHVzZSAnZ2l0IHJlc2V0IC0tIDxjYW1pbmhvcz4nLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHJlcG9yIGRlIG1vZG8gJXMgY29tIGNhbWluaG9zLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTsOjbyDDqSBwZXJtaXRpZG8gcmVwb3IgZGUgbW9kbyAlcyBudW0gcmVwb3NpdMOzcmlvIG51IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQ3Cittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIHPDsyBwb2RlIHNlciB1c2FkbyBjb20gLS1taXhlZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2NAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICJBbHRlcmHDp8O1ZXMgbsOjbyBwcmVwYXJhZGFzIGRlcG9pcyBkZSByZXBvcjoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZXBvciBvIGZpY2hlaXJvIMOtbmRpY2UgcGFyYSBhIHJldmlzw6NvICclcycuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzc0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIG5vdm8gZmljaGVpcm8gZGUgw61uZGljZS4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzozNTQKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IG7Do28gc3Vwb3J0YSBhcHJlc2VudGHDp8OjbyBkZSBub3RhcyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozOTMKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9ww6fDtWVzPl0gLS0gWzxhcmd1bWVudG9zPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6Mzk4Cittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICJjb25zZXJ2YXIgJy0tJyBwYXNzYWRvIGNvbW8gYXJndW1lbnRvIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwMAorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAicGFyYXIgZGUgYW5hbGlzYXIgZGVwb2lzIGRvIHByaW1laXJvIGFyZ3VtZW50byBxdWUgbsOjbyBzZWphIHVtYSBvcMOnw6NvIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwMworbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgIm1vc3RyYXIgZW0gZm9ybWF0byBmaXhvIGUgbG9uZ28iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTM0Cittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3DDp8O1ZXM+XSAtLSBbPGFyZ3VtZW50b3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmd1bWVudG9zPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9ww6fDtWVzPl0gWzxhcmd1bWVudG9zPi4uLl1cbiIKKyJcbiIKKyJFeGVjdXRlIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgcGFyYSBvYnRlciBtYWlzIGluZm9ybWHDp8OjbyBzb2JyZSBhICIKKyJwcmltZWlyYSB1dGlsaXphw6fDo28uIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyCittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzxvcMOnw7Vlcz5dIDxjb21taXQtZXRjPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMworbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kbz4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjgKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxvcMOnw7Vlcz5dIDxjb21taXQtZXRjPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyOQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMgbsOjbyBwb2RlIHNlciB1c2FkbyBjb20gJXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTgKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJ0ZXJtaW5hciByZXZlcnPDo28gb3UgY2hlcnJ5LXBpY2siCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTkKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJyZXRvbWFyIGEgcmV2ZXJzw6NvIG91IGNoZXJyeS1waWNrIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImNhbmNlbGFyIHJldmVyc8OjbyBvdSBjaGVycnktcGljayIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDEKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAibsOjbyBzdWJtZXRlciBhdXRvbWF0aWNhbWVudGUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImVkaXRhciBhIG1lbnNhZ2VtIGRlIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICJuw7ptZXJvLXBhaSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDYKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICJzZWxlY2lvbmFyIHBhaSBwcmluY2lwYWwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdMOpZ2lhIGRlIGludGVncmHDp8OjbyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDkKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIm9ww6fDo28iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3DDp8OjbyBkZSBlc3RyYXTDqWdpYSBkZSBpbnRlZ3Jhw6fDo28iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE5Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJhY3Jlc2NlbnRhciBub21lIGRvIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjEKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAicHJlc2VydmFyIGNvbW1pdHMgaW5pY2lhbG1lbnRlIHZhemlvcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjIKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgInBlcm1pdGlyIGNvbW1pdHMgY29tIG1lbnNhZ2VucyB2YXppYXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTIzCittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIm1hbnRlciBjb21taXRzIHJlZHVuZGFudGVzIGUgdmF6aW9zIgorCisjOiBidWlsdGluL3JldmVydC5jOjIxMQorbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIHJldmVydGVyIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyNAorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiZmFsaGEgYW8gZWZldHVhciBjaGVycnktcGljayIKKworIzogYnVpbHRpbi9ybS5jOjE3Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gWzxvcMOnw7Vlcz5dIFstLV0gPGZpY2hlaXJvPi4uLiIKKworIzogYnVpbHRpbi9ybS5jOjIwNQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnc3RyWzBdICIiCisibyBzZWd1aW50ZSBmaWNoZWlybyB0ZW0gY29udGXDumRvIHByZXBhcmFkbyBubyDDrW5kaWNlIGRpZmVyZW50ZVxuIgorImRvIGNvbnRlw7pkbyBubyBmaWNoZWlybyBlIGVtIEhFQUQ6IgorbXNnc3RyWzFdICIiCisib3Mgc2VndWludGVzIGZpY2hlaXJvcyB0w6ptIGNvbnRlw7pkbyBwcmVwYXJhZG8gbm8gw61uZGljZSBkaWZlcmVudGVcbiIKKyJkbyBjb250ZcO6ZG8gbm8gZmljaGVpcm8gZSBlbSBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMAorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKHVzZSAtZiBwYXJhIGZvcsOnYXIgcmVtb8Onw6NvKSIKKworIzogYnVpbHRpbi9ybS5jOjIxNAorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gIm8gc2VndWludGUgZmljaGVpcm8gY29udMOpbSBhbHRlcmHDp8O1ZXMgcHJlcGFyYWRhcyBubyDDrW5kaWNlOiIKK21zZ3N0clsxXSAib3Mgc2VndWludGVzIGZpY2hlaXJvcyBjb250w6ptIGFsdGVyYcOnw7VlcyBwcmVwYXJhZGFzIG5vIMOtbmRpY2U6IgorCisjOiBidWlsdGluL3JtLmM6MjE4IGJ1aWx0aW4vcm0uYzoyMjcKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgcGFyYSBtYW50ZXIgbyBmaWNoZWlybywgb3UgLWYgcGFyYSBmb3LDp2FyIHJlbW/Dp8OjbykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMjQKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gIm8gc2VndWludGUgZmljaGVpcm8gY29udMOpbSBhbHRlcmHDp8O1ZXMgbG9jYWlzOiIKK21zZ3N0clsxXSAib3Mgc2VndWludGVzIGZpY2hlaXJvcyBjb250w6ptIGFsdGVyYcOnw7VlcyBsb2NhaXM6IgorCisjOiBidWlsdGluL3JtLmM6MjQyCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibsOjbyBsaXN0YXIgZmljaGVpcm9zIHJlbW92aWRvcyIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJyZW1vdmVyIGFwZW5hcyBkbyDDrW5kaWNlIgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgImlnbm9yYXIgdmVyaWZpY2HDp8OjbyBkZSBhdHVhbGl6YcOnw6NvIgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgInBlcm1pdGlyIHJlbW/Dp8OjbyByZWN1cnNpdmEiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDcKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAic2FpciBjb20gdmFsb3IgemVybyBtZXNtbyBxdWFuZG8gbsOjbyBow6EgY29ycmVzcG9uZMOqbmNpYSIKKworIzogYnVpbHRpbi9ybS5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICJuw6NvIHJlbW92ZXIgJyVzJyByZWN1cnNpdmFtZW50ZSBzZW0gLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IG7Do28gw6kgcG9zc8OtdmVsIHJlbW92ZXIgJXMiCisKKyM6IGJ1aWx0aW4vcm0uYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSAnJXMnIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgcmVtb3ZlciAnJXMnIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE4Cittc2dpZCAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmV0w7NyaW8+ICIKKyJbPHJlZmVyw6puY2lhPi4uLl1cbiIKKyIgIC0tYWxsIGUgZXNwZWNpZmljYcOnw6NvIGV4cGxpY2l0YSBkdW1hIDxyZWZlcsOqbmNpYT4gc8OjbyBtdXR1YW1lbnRlICIKKyJleGNsdXNpdm9zLiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAibm9tZSBkbyByZW1vdG8iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgInVzZSBwcm90b2NvbG8gUlBDIHNlbSBlc3RhZG8iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc2Cittc2dpZCAicmVhZCByZWZzIGZyb20gc3RkaW4iCittc2dzdHIgImxlciByZWZlcsOqbmNpYXMgZG8gc3RkaW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiaW1wcmltaXIgZXN0YWRvIGRvIHByb2dyYW1hIGF1eGlsaWFyIHJlbW90byIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzCittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc2hvcnRsb2cgWzxvcMOnw7Vlcz5dIFs8aW50ZXJ2YWxvLWRlLXJldmlzw7Vlcz5dIFtbLS1dIFs8Y2FtaW5obz4uLi5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI0OAorbXNnaWQgIkdyb3VwIGJ5IGNvbW1pdHRlciByYXRoZXIgdGhhbiBhdXRob3IiCittc2dzdHIgImFncnVwYXIgcG9yIGNvbW1pdHRlciBlbSB2ZXogZGUgYXV0b3IiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNTAKK21zZ2lkICJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiCittc2dzdHIgIm9yZGVuYXIgc2HDrWRhIGRlIGFjb3JkbyBjb20gbyBuw7ptZXJvIGRlIGNvbW1pdHMgcG9yIGF1dG9yIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjUyCittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgInN1cHJpbWlyIGEgZGVzY3Jpw6fDo28gZG9zIGNvbW1pdHMsIGZvcm5lY2VyIGFwZW5hcyBvIG7Dum1lcm8gZGUgY29tbWl0cyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI1NAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIk1vc3RyYXIgbyBlbmRlcmXDp28gZGUgZS1tYWlsIGRlIGNhZGEgYXV0b3IiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNTUKK21zZ2lkICJ3WyxpMVssaTJdXSIKK21zZ3N0ciAid1ssaTFbLGkyXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNTYKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgImFqdXN0YXIgbGluaGFzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldmlzw6NvPiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTQKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWZlcsOqbmNpYT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWYiCittc2dpZF9wbHVyYWwgImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIgorbXNnc3RyWzBdICJpZ25vcmFyICVzOyBuw6NvIMOpIHBvc3PDrXZlbCBwcm9jZXNzYXIgbWFpcyBkbyBxdWUgJWQgcmVmZXLDqm5jaWEiCittc2dzdHJbMV0gImluZ29yYXIgJXM7IG7Do28gw6kgcG9zc8OtdmVsIHByb2Nlc3NhciBtYWlzIGRvIHF1ZSAlZCByZWZlcsOqbmNpYXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICJuZW5odW1hIHJlZmVyw6puY2lhIGNvcnJlc3BvbmRlIGNvbSAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzMgorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAibW9zdHJhciBvcyByYW1vcyBkZSBtb25pdG9yaXphw6fDo28gcmVtb3RvcyBlIG9zIHJhbW9zIGxvY2FpcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzNAorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJtb3N0cmFyIG9zIHJhbW9zIGRlIG1vbml0b3JpemHDp8OjbyByZW1vdG9zIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjM2Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiY29sb3JpciAnKiErLScgY29ycmVzcG9uZGVuZG8gYW8gcmFtbyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjYzOAorbXNnaWQgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIgorbXNnc3RyICJtb3N0cmFyIG1haXMgPG4+IGNvbW1pdHMgZGVwb2lzIGRvIGFudGVjZXNzb3IgY29tdW0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDAKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgInNpbsOzbmltbyBkZSBtb3JlPS0xIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQxCittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgInN1cHJpbWlyIGEgY2FkZWlhcyBkZSBjYXJhY3RlcmVzIGRlIG5vbWVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQzCittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgImluY2x1aXIgbyByYW1vIGF0dWFsIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICJkZXNpZ25hciBjb21taXRzIHBlbG9zIHNldXMgbm9tZXMgZGUgb2JqZXRvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAibW9zdHJhciBwb3Nzw612ZWlzIGJhc2VzIGRlIGludGVncmHDp8OjbyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0OQorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgIm1vc3RyYXIgcmVmZXLDqm5jaWFzIGluYWxjYW7Dp8OhdmVpcyBhIHBhcnRpciBkZSBvdXRyYXMgcmVmZXLDqm5jaWFzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUxCittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJtb3N0cmFyIGNvbW1pdHMgZW0gb3JkZW0gdG9wb2zDs2dpY2EiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTQKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAibW9zdHJhciBhcGVuYXMgY29tbWl0cyBuw6NvIHByZXNlbnRlcyBubyBwcmltZWlybyByYW1vIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU2Cittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICJtb3N0cmFyIGludGVncmHDp8O1ZXMgYWxjYW7Dp8OhdmVpcyBhIHBhcnRpciBkdW1hIMO6bmljYSBwb250YSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OAorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAiIgorIm9yZGVuYXIgdG9wb2xvZ2ljYW1lbnRlLCBtYW50ZW5kbyBhIG9yZGVuYcOnw6NvIHBvciBkYXRhIHNlbXByZSBxdWUgcG9zc8OtdmVsIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYxCittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxiYXNlPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAibW9zdHJhciBhcyA8bj4gZW50cmFkYXMgZGUgcmVmLWxvZyBtYWlzIHJlY2VudGUgYSBwYXJ0aXIgZGEgYmFzZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY5NgorbXNnaWQgIiIKKyItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIKK21zZ3N0ciAiIgorIi0tcmVmbG9nIMOpIGluY29tcGF0w612ZWwgY29tIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzIwCittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAibmVuaHVtIHJhbW8gZm9ybmVjaWRvIGUgSEVBRCBuw6NvIMOpIHbDoWxpZGEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MjMKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICJhIG9ww6fDo28gLS1yZWZsb2cgcHJlY2lzYSBkbyBub21lIGRlIHVtIHJhbW8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAiYXBlbmFzICVkIGVudHJhZGEgcG9kZW0gc2VyIG1vc3RyYWRhcyBuZXN0ZSBtb21lbnRvLiIKK21zZ3N0clsxXSAiYXBlbmFzICVkIGVudHJhZGFzIHBvZGVtIHNlciBtb3N0cmFkYXMgbmVzdGUgbW9tZW50by4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWYgJXMiCittc2dzdHIgInJlZmVyw6puY2lhIGluZXhpc3RlbnRlICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIgorbXNnc3RyWzBdICJuw6NvIMOpIHBvc3PDrXZlbCBwcm9jZXNzYXIgbWFpcyBkbyBxdWUgJWQgcmV2aXPDo28uIgorbXNnc3RyWzFdICJuw6NvIMOpIHBvc3PDrXZlbCBwcm9jZXNzYXIgbWFpcyBkbyBxdWUgJWQgcmV2aXPDtWVzLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgxOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycgbsOjbyDDqSB1bWEgcmVmZXLDqm5jaWEgdsOhbGlkYS4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVuY29udHJhciBvIGNvbW1pdCAlcyAoJXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYWRyw6NvPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMQorbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYWRyw6NvPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNTkKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICJtb3N0cmFyIGFwZW5hcyB0YWdzIChwb2RlIHNlciBjb21iaW5hZG8gY29tIGhlYWRzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MAorbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgIm1vc3RyYXIgYXBlbmFzIGNhYmXDp2FzIChwb2RlIHNlciBjb21iaW5hZG8gY29tIHRhZ3MpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYxCittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAiIgorInZlcmlmaWNhw6fDo28gZGUgcmVmZXLDqm5jaWFzIG1haXMgcmlnb3Jvc2EsIHJlcXVlciBvIGNhbWluaG8gZXhhdG8gZGEgIgorInJlZmVyw6puY2lhIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY0IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjYKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgIm1vc3RyYXIgYSByZWZlcsOqbmNpYSBIRUFELCBtZXNtbyBxdWUgZm9zc2UgZmlsdHJhZGEiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjgKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiZGVzcmVmZXJlbmNpYXIgdGFncyBlbSBJRHMgZGUgb2JqZXRvIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcwCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJtb3N0cmFyIGhhc2ggU0hBMSBjb20gPG4+IGRpZ2l0b3MiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzQKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAibsOjbyBpbXByaW1pciByZXN1bHRhZG9zIHBhcmEgbyBzdGRvdXQgKMO6dGlsIGNvbSAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzYKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJtb3N0cmFyIHJlZmVyw6puY2lhcyBkbyBzdGRpbiBxdWUgbsOjbyBlc3TDo28gbm8gcmVwb3NpdMOzcmlvIGxvY2FsIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxNworbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzozNQorbXNnaWQgInNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiIgorImlnbm9yYXIgZSByZW1vdmVyIHRvZGFzIGFzIGxpbmhhcyBjb21lw6dhZGFzIGNvbSB1bSBjYXLDoWN0ZXIgZGUgY29tZW50w6FyaW8iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM4Cittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICJwcmVjZWRlciBjYWRhIGxpbmhhIGNvbSB1bSBjYXLDoWN0ZXIgZGUgY29tZW50w6FyaW8gZSB1bSBlc3Bhw6dvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICJSZWZlcsOqbmNpYSBpbmV4aXN0ZW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIkVzcGVyYXZhLXNlIHVtIG5vbWUgY29tcGxldG8gZGUgdW1hIHJlZmVyw6puY2lhLCBvYnRldmUtc2UgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICclcyciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHRpcmFyIHVtIGNvbXBvbmVudGUgZG8gVVJMICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMDUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMAorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIsOibmNvcmEgYWx0ZXJuYXRpdmEgcGFyYSBjYW1pbmhvcyByZWxhdGl2b3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozMTAKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxjYW1pbmhvPl0gWzxjYW1pbmhvPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozNTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIk5lbmh1bSBVUkwgZW5jb250cmFkbyBwYXJhIG8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICclcycgZW0gLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIiIKKyJuw6NvIMOpIHBvc3PDrXZlbCBlbmNvbnRyYXIgY29uZmlndXJhw6fDo28gJyVzJy4gQXNzdW1pciBxdWUgZXN0ZSByZXBvc2l0w7NyaW8gw6kgbyAiCisicHLDs3ByaW8gcmVwb3NpdMOzcmlvIGEgbW9udGFudGUgYXV0b3JpdMOhcmlvLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJGYWxoYSBhbyByZWdpc3RhciBvIFVSTCBkbyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICJTdWJtw7NkdWxvICclcycgKCVzKSByZWdpc3RhZG8gY29tIGNhbWluaG8gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJhdmlzbzogbW9kbyBkZSBhdHVhbGl6YcOnw6NvIGRvIGNvbWFuZG8gc3VnZXJpZG8gcGFyYSBvIHN1Ym3Ds2R1bG8gJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiRmFsaGEgYW8gcmVnaXN0YXIgbyBtb2RvIGRlIGF0dWFsaXphw6fDo28gZG8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NDMKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiU3VwcmltaXIgYSBzYcOtZGEgYW8gaW5pY2lhbGl6YXIgdW0gc3VibcOzZHVsbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ0OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPGNhbWluaG8+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3NgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPGNhbWluaG8+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKyJuZW5odW0gbWFwZWFtZW50byBkZSBzdWJtw7NkdWxvIGRvIGNhbWluaG8gJyVzJyBlbmNvbnRyYWRvIGVtIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIgorbXNnc3RyICJvIHN1Ym3Ds2R1bG8gJyVzJyBuw6NvIHBvZGUgYWRpY2lvbmFyIHNvYnJlc3NhbGVudGU6ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJPIHZhbG9yICclcycgZGUgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kgbsOjbyDDqSByZWNvbmhlY2lkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIk8gdmFsb3IgJyVzJyBkZSBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gbsOjbyDDqSByZWNvbmhlY2lkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMworbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICJzw610aW8gcGFyYSBhb25kZSBvIG5vdm8gc3VibcOzZHVsbyBzZXLDoSBjbG9uYWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjM2Cittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAibm9tZSBkbyBub3ZvIHN1Ym3Ds2R1bG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzkKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICJ1cmwgZG9uZGUgY2xvbmFyIG8gc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NDUKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgInByb2Z1bmRpZGFkZSBkZSBjbG9uZXMgcmFzb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NDggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk5MworbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgImZvcsOnYXIgcHJvZ3Jlc3NvIGRhIGNsb25hZ2VtIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSAtLXVybCA8dXJsPiAtLXBhdGggPHBhdGg+IgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08Y2FtaW5obz5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0w7NyaW8+XSBbLS1uYW1lIDxub21lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxjYW1pbmhvPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgImZhbGhhIGFvIGNsb25hciAnJXMnIG5vIGNhbWluaG8gZGUgc3VibcOzZHVsbyAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIG9idGVyIG8gZGlyZXTDs3JpbyBkbyBzdWJtw7NkdWxvIGRlICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIkNhbWluaG8gZGUgc3VibcOzZHVsbyAnJXMnIG7Do28gaW5pY2lhbGl6YWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzY4Cittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIlByZXRlbmRpYSB1c2FyICd1cGRhdGUgLS1pbml0Jz8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICJBIGlnbm9yYXIgc3VibcOzZHVsbyAlcyBuw6NvIGludGVncmFkbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiQSBpZ25vcmFyIHN1Ym3Ds2R1bG8gJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk0MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICJGYWxoYSBhbyBjbG9uYXIgJyVzJy4gTm92YSB0ZW50YXRpdmEgYWdlbmRhZGEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycgYSBzZWNvbmQgdGltZSwgYWJvcnRpbmciCittc2dzdHIgIkZhbGhhIGFvIGNsb25hciAnJXMnIHBlbGEgc2VndW5kYSB2ZXosIGFib3J0YWRvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYyCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImNhbWluaG8gcGFyYSBhIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzcKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAiIgorImNhbWluaG8gcGFyYSBhIMOhcnZvcmUgZGUgdHJhYmFsaG8sIGF0cmF2ZXNzYW5kbyBsaW1pdGVzIGRlIHN1Ym3Ds2R1bG9zICIKKyJhbmluaGFkb3MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODEKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvdSBub25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTg1Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICJjcmlhciB1bSBjbG9uZSByYXNvLCB0cnVuY2FkbyBhbyBuw7ptZXJvIGVzcGVjaWZpY2FkbyBkZSByZXZpc8O1ZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5ODgKK21zZ2lkICJwYXJhbGxlbCBqb2JzIgorbXNnc3RyICJ0cmFiYWxob3MgZW0gcGFyYWxlbG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5OTAKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgInNlIG8gY2xvbmUgaW5pY2lhbCBkZXZlIHNlZ3VpciBhIHJlY29tZW5kYcOnw6NvIHJhc2EiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5OTEKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJuw6NvIGltcHJpbWlyIHByb2dyZXNzbyBkYSBjbG9uYWdlbSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk5OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGVfY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGVfY2xvbmUgWy0tcHJlZml4PTxjYW1pbmhvPl0gWzxjYW1pbmhvPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDA4Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICJ2YWxvciBpbmNvcnJldG8gbm8gcGFyw6JtZXRybyB1cGRhdGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisiTyByYW1vIGRvIHN1Ym3Ds2R1bG8gKCVzKSBmb2kgY29uZmlndXJhZG8gcGFyYSBoZXJkYXIgbyByYW1vIGRvIHN1cGVycHJvamV0bywgIgorIm1hcyBvIHN1cGVycHJvamV0byBuw6NvIGVzdMOhIGVtIG5lbmh1bSByYW1vIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE2MworbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICJwZXJjb3JyZXIgc3VibcOzZHVsb3MgcmVjdXJzaXZhbWVudGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTY5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGVtYmVkLWdpdC1kaXIgWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBlbWJlZC1naXQtZGlyIFs8Y2FtaW5obz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIyNgorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN1YmNvbW1hbmQiCittc2dzdHIgIm8gc3ViY29tYW5kbyBzdWJtb2R1bGUtLWhlbHBlciBkZXZlIHNlciBpbnZvY2FkbyBjb20gdW0gc3ViY29tYW5kbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyBuw6NvIHN1cG9ydGEgLS1zdXBlci1wcmVmaXgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAiJyVzJyBuw6NvIMOpIHVtIHN1YmNvbWFuZG8gdsOhbGlkbyBkZSBzdWJtb2R1bGUtLWhlbHBlciIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo3Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPG9ww6fDtWVzPl0gPG5vbWU+IFs8cmVmZXLDqm5jaWE+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxub21lPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKyJzdXByaW1pciBtZW5zYWdlbnMgZGUgZXJybyBzb2JyZSByZWZlcsOqbmNpYXMgbsOjby1zaW1iw7NsaWNhcyAoZGVzdGFjYWRhcykiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICJlbGltaW5hciByZWZlcsOqbmNpYXMgc2ltYsOzbGljYXMiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgImVuY3VydGFyIGEgYXByZXNlbnRhw6fDo28gZGUgcmVmZXLDqm5jaWFzIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAicmF6w6NvIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJyYXrDo28gZGEgYXR1YWxpemHDp8OjbyIKKworIzogYnVpbHRpbi90YWcuYzoyMworbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XSA8dGFnbmFtZT4gIgorIls8aGVhZD5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxpZC1jaGF2ZT5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpY2hlaXJvPl0gPG5vbWUtZGEtIgorInRhZz4gWzxoZWFkPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA8bm9tZS1kYS10YWc+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI1Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS0iCisicG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PGZvcm1hdD5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dICIKKyJbLS1wb2ludHMtYXQgPG9iamV0bz5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0bz5dIFstLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl1dIFs8cGFkcsOjbz4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjI3Cittc2dpZCAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdD5dIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiBbLS1mb3JtYXQ9PGZvcm1hdG8+XSA8bm9tZXRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAidGFnICclcycgbsOjbyBlbmNvbnRyYWRhLiIKKworIzogYnVpbHRpbi90YWcuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGVsaW1pbmFkYSAoZXJhICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc2NyZXZhIGEgbWVuc2FnZW0gZGEgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5oYSBjb21lw6dhZGFzIGNvbSAnJWMnIHNlcsOjbyBpZ25vcmFkYXMuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc2NyZXZhIGEgbWVuc2FnZW0gZGEgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5oYXMgY29tZcOnYWRhcyBjb20gJyVjJyBzZXLDo28gbWFudGlkYXM7IHBvZGUgcmVtb3bDqi1sYXMgc2UgbyBkZXNlamFyLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjIxMAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhc3NpbmFyIGEgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjIxMgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIG8gZmljaGVpcm8gZGEgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjIzNgorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgInRpcG8gZGUgb2JqZXRvIGluY29ycmV0by4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjgyCittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICJzZW0gbWVuc2FnZW0gZGUgdGFnPyIKKworIzogYnVpbHRpbi90YWcuYzoyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiQSBtZW5zYWdlbSBkYSB0YWcgZm9pIGd1YXJkYWRhIGVtICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzEyCittc2dpZCAidGFnOiB0YWdnaW5nICIKK21zZ3N0ciAidGFnOiBhIGNvbG9jYXIgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjMyMAorbXNnaWQgIm9iamVjdCBvZiB1bmtub3duIHR5cGUiCittc2dzdHIgIm9iamV0byBkZSB0aXBvIGRlc2NvbmhlY2lkbyIKKworIzogYnVpbHRpbi90YWcuYzozMjcKK21zZ2lkICJjb21taXQgb2JqZWN0IgorbXNnc3RyICJvYmpldG8gY29tbWl0IgorCisjOiBidWlsdGluL3RhZy5jOjMzNQorbXNnaWQgInRyZWUgb2JqZWN0IgorbXNnc3RyICJvYmpldG8gw6Fydm9yZSIKKworIzogYnVpbHRpbi90YWcuYzozMzgKK21zZ2lkICJibG9iIG9iamVjdCIKK21zZ3N0ciAib2JqZXRvIGJsb2IiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzQxCittc2dpZCAib3RoZXIgdGFnIG9iamVjdCIKK21zZ3N0ciAib3V0cm8gb2JqZXRvIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzozOTcKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAibGlzdGFyIG9zIG5vbWVzIGRhcyB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6Mzk5Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgImltcHJpbWlyIDxuPiBsaW5oYXMgZGUgY2FkYSBtZW5zYWdlbSBkZSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAxCittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgImVsaW1pbmFyIHRhZ3MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgInZlcmlmaWNhciB0YWdzIgorCisjOiBidWlsdGluL3RhZy5jOjQwNAorbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkZSBjcmlhw6fDo28gZGUgdGFncyIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgInRhZyBhbm90YWRhLCDDqSBuZWNlc3PDoXJpbyB1bWEgbWVuc2FnZW0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA4Cittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIm1lbnNhZ2VtIGRhIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzo0MTAKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICJ0YWcgYW5vdGFkYSBlIGFzc2luYWRhIGNvbSBHUEciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE0Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAidXNhciBvdXRyYSBjaGF2ZSBwYXJhIGFzc2luYXIgYSB0YWciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAicmVwbGFjZSB0aGUgdGFnIGlmIGV4aXN0cyIKK21zZ3N0ciAic3Vic3RpdHVpciBhIHRhZyBzZSBlc3RhIGV4aXN0aXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE2IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAiY3JpYXIgdW0gcmVmbG9nIgorCisjOiBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGRlIGxpc3RhZ2VtIGRlIHRhZ3MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE5Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJtb3N0cmFyIGEgbGlzdGEgZGUgdGFncyBlbSBjb2x1bmFzIgorCisjOiBidWlsdGluL3RhZy5jOjQyMCBidWlsdGluL3RhZy5jOjQyMgorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIHRhZ3MgcXVlIGNvbnRlbmhhbSBvIGNvbW1pdCIKKworIzogYnVpbHRpbi90YWcuYzo0MjEgYnVpbHRpbi90YWcuYzo0MjMKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWlyIGFwZW5hcyB0YWdzIHF1ZSBuw6NvIGNvbnRlbmhhbSBvIGNvbW1pdCIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJpbXByaW1pciBhcGVuYXMgYXMgdGFncyBxdWUgZm9yYW0gaW50ZWdyYWRhcyIKKworIzogYnVpbHRpbi90YWcuYzo0MjUKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIGFzIHRhZ3MgcXVlIG7Do28gZm9yYW0gaW50ZWdyYWRhcyIKKworIzogYnVpbHRpbi90YWcuYzo0MzAKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAiaW1wcmltaXIgYXBlbmFzIGFzIHRhZ3MgZG8gb2JqZXRvIgorCisjOiBidWlsdGluL3RhZy5jOjQ2OQorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBlIC1uIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDkxCittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImEgb3DDp8OjbyAtbiBzw7Mgw6kgcGVybWl0aWRhIG5vIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDkzCittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiYSBvcMOnw6NvIC0tY29udGFpbnMgc8OzIMOpIHBlcm1pdGlkYSBubyBtb2RvIGxpc3RhIgorCisjOiBidWlsdGluL3RhZy5jOjQ5NQorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgImEgb3DDp8OjbyAtLWNvbnRhaW5zIHPDsyDDqSBwZXJtaXRpZGEgbm8gbW9kbyBsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo0OTcKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiYSBvcMOnw6NvIC0tcG9pbnRzLWF0IHPDsyDDqSBwZXJtaXRpZGEgbm8gbW9kbyBsaXN0YSIKKworIzogYnVpbHRpbi90YWcuYzo0OTkKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAiYXMgb3DDp8O1ZXMgLS1tZXJnZWQgZSAtLW5vLW1lcmdlZCBzw7Mgc8OjbyBwZXJtaXRpZGFzIG5vIG1vZG8gbGlzdGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJzw7Mgw6kgcGVybWl0aWRvIHVtIG9ww6fDo28gLUYgb3UgLW0uIgorCisjOiBidWlsdGluL3RhZy5jOjUyOQorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAiZGVtYXNpYWRvIHBhcsOibWV0cm9zIgorCisjOiBidWlsdGluL3RhZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiJyVzJyBuw6NvIMOpIHVtIG5vbWUgZGUgdGFnIHbDoWxpZG8uIgorCisjOiBidWlsdGluL3RhZy5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiYSB0YWcgJyVzJyBqw6EgZXhpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGF0dWFsaXphZGEgKGVyYSAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjQ5MworbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICJBIGRlc2NvbXBhY3RhciBvYmpldG9zIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJmYWxoYSBhbyBjcmlhciBvIGRpcmV0w7NyaW8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgImZhbGhhIGFvIGludm9jYXIgc3RhdCBkZSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgImZhbGhhIGFvIGNyaWFyIG8gZmljaGVpcm8gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAiZmFsaGEgYW8gZWxpbWluYXIgbyBmaWNoZWlybyAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTAgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgImZhbGhhIGFvIGVsaW1pbmFyIG8gZGlyZXTDs3JpbyAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyBtdGltZSBpbiAnJXMnICIKK21zZ3N0ciAiQSB0ZXN0YXIgbXRpbWUgZW0gJyVzJyAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQ5Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgIiIKKyJhIGluZm9ybWHDp8OjbyBkZSBzdGF0IGRvIGRpcmV0w7NyaW8gbsOjbyBtdWRvdSBkZXBvaXMgZGUgYWRpY2lvbmFyIHVtIG5vdm8gIgorImZpY2hlaXJvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2MgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJhIGluZm9ybWHDp8OjbyBkZSBzdGF0IGRvIGRpcmV0w7NyaW8gbsOjbyBtdWRvdSBkZXBvaXMgZGUgYWRpY2lvbmFyIHVtIG5vdm8gIgorImRpcmV0w7NyaW8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTc1Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiYSBpbmZvcm1hw6fDo28gZGUgc3RhdCBtdWRvdSBkZXBvaXMgZGUgYXR1YWxpemFyIHVtIGZpY2hlaXJvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4NgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJhIGluZm9ybWHDp8OjbyBkZSBzdGF0IGRvIGRpcmV0w7NyaW8gbXVkb3UgZGVwb2lzIGRlIGFkaWNpb25hciB1bSBmaWNoZWlybyAiCisiZGVudHJvIGR1bSBzdWJkaXJldMOzcmlvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorImEgaW5mb3JtYcOnw6NvIGRlIHN0YXQgZG8gZGlyZXTDs3JpbyBuw6NvIG11ZG91IGRlcG9pcyBkZSBlbGltaW5hciB1bSBmaWNoZWlybyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTAKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImEgaW5mb3JtYcOnw6NvIGRlIHN0YXQgZG8gZGlyZXTDs3JpbyBuw6NvIG11ZG91IGRlcG9pcyBkZSBlbGltaW5hciB1bSBkaXJldMOzcmlvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxNworbXNnaWQgIiBPSyIKK21zZ3N0ciAiIE9LIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU2OAorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9ww6fDtWVzPl0gWy0tXSBbPGZpY2hlaXJvPi4uLl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTIzCittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICJjb250aW51YXIgYSByZWZyZXNjYXIgbWVzbW8gcXVhbmRvIG8gw61uZGljZSBwcmVjaXNlIGRlIHNlciBhdHVhbGl6YWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyNgorbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICJyZWZyZXNjYXI6IGlnbm9yYXIgc3VibcOzZHVsb3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI5Cittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgIm7Do28gaWdub3JhciBub3ZvcyBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTMxCittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgImRlaXhhciBxdWUgb3MgZmljaGVpcm9zIHN1YnN0aXR1YW0gb3MgZGlyZXTDs3Jpb3MgZSB2aWNlLXZlcnNhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzMworbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImF2aXNhciBzb2JyZSBmaWNoZWlyb3MgcXVlIGZhbHRlbSBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzNQorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJyZWZyZXNjYXIgbWVzbW8gcXVlIG8gw61uZGljZSBjb250ZW5oYSBlbnRyYWRhcyBuw6NvIGludGVncmFkYXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTM4Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJyZWZyZXNjYXIgaW5mb3JtYcOnw6NvIGRlIHN0YXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQyCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJjb21vIC0tcmVmcmVzaCwgbWFzIGlnbm9yYXIgYSBkZWZpbmnDp8OjbyBhc3N1bWUtdW5jaGFuZ2VkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NgorbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjxtb2RvPiw8b2JqZXRvPiw8Y2FtaW5obz4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ3Cittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICJhZGljaW9uYXIgbyBlbGVtZW50byBlc3BlY2lmaWNhZG8gYW8gw61uZGljZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTYKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgIm1hcmNhciBmaWNoZWlyb3MgY29tbyBcIm7Do28gYWx0ZXJhZG9zXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU5Cittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICJsaW1wYXIgbyBiaXQgYXNzdW1lZC11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYyCittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAibWFyY2FyIGZpY2hlaXJvcyBjb21vIFwiw7puaWNvcyBkbyDDrW5kaWNlXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY1Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgImxpbXBhciBvIGJpdCBpZ25vcmFyLcOhcnZvcmUtZGUtdHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY4Cittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJzw7MgYWRpY2lvbmFyIGFvIMOtbmRpY2U7IG7Do28gYWRpY2lvbmFyIG8gY29udGXDumRvIMOgIGJhc2UgZGUgZGFkb3MgZGUgb2JqZXRvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzAKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICIiCisicmVtb3ZlciBvcyBjYW1pbmhvcyBtZW5jaW9uYWRvIG1lc21vIHNlIGVzdGl2ZXJlbSBwcmVzZW50ZXMgbmEgw6Fydm9yZSBkZSAiCisidHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTcyCittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJjb20gLS1zdGRpbjogYXMgbGluaGFzIGRhIGVudHJhZGEgc8OjbyB0ZXJtaW5hZGFzIGNvbSBieXRlcyBudWxvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsZXIgbGlzdGEgZGUgY2FtaW5obyBhIGF0dWFsaXphciBkYSBlbnRyYWRhIHBhZHLDo28iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc4Cittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgImFkaWNpb25hciBlbGVtZW50b3MgZGEgZW50cmFkYSBwYWRyw6NvIGFvIMOtbmRpY2UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICJyZXBvdm9hciBhcyBmYXNlcyBuwroyIGUgbsK6MyBkb3MgY2FtaW5ob3MgbGlzdGFkb3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgImF0dWFsaXphciBhcGVuYXMgZWxlbWVudG9zIHF1ZSBkaWZpcmFtIGRlIEhFQUQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkwCittc2dpZCAiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiaWdub3JhciBmaWNoZWlyb3MgbsOjbyBwcmVzZW50ZXMgbmEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTMKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIm1vc3RyYXIgYcOnw7VlcyBuYSBzYcOtZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTUKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiIgorIihwYXJhIHBvcmNlbGFuYXMpIGVzcXVlY2VyIGNvbmZsaXRvcyBndWFyZGFkb3MgcXVlIG7Do28gZm9yYW0gcmVzb2x2aWRvcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTkKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiZXNjcmV2ZXIgbyDDrW5kaWNlIG5lc3RlIGZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwMQorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJhdGl2YXIgb3UgZGVzYXRpdmFyIGEgZGl2aXPDo28gZG8gw61uZGljZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAzCittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJhdGl2YXIgb3UgZGVzYXRpdmFyIGNhY2hlIG7Do28gY29udHJvbGFkYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA1Cittc2dpZCAidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgInRlc3RhciBzZSBvIHNpc3RlbWEgZGUgZmljaGVpcm9zIHN1cG9ydGEgY2FjaGUgbsOjbyBjb250cm9sYWRhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDcKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiYXRpdmFyIGNhY2hlIG7Do28gY29udHJvbGFkYSBzZW0gdGVzdGFyIG8gc2lzdGVtYSBkZSBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTEwNworbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImVuYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCBlc3TDoSBkZWZpbmlkYSBjb21vIGZhbHNlOyByZW1vdmEgb3UgYWx0ZXJlLWEgc2UgcHJldGVuZGUgIgorIm1lc21vIGF0aXZhciDDrW5kaWNlIHNlcGFyYWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExMTYKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIiIKKyJjb3JlLnNwbGl0SW5kZXggZXN0w6EgZGVmaW5pZGEgY29tbyB0cnVlOyByZW1vdmEgb3UgYWx0ZXJlLWEgc2UgcHJldGVuZGUgIgorIm1lc21vIGRlc2F0aXZhciDDrW5kaWNlIHNlcGFyYWRvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExMjcKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGVzdMOhIGRlZmluaWRhIGNvbW8gdHJ1ZTsgcmVtb3ZhIG91IGFsdGVyZS1hIHNlIHByZXRlbmRlICIKKyJtZXNtbyBkZXNhdGl2YXIgYSBjYWNoZSBuw6NvIGNvbnRyb2xhZGEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTEzMQorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiQSBjYWNoZSBuw6NvIGNvbnRyb2xhZGEgZXN0w6EgZGVzYXRpdmFkYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTM5Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgIgorInRvIGVuYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBlc3TDoSBkZWZpbmlkYSBjb21vIGZhbHNlOyByZW1vdmEgb3UgYWx0ZXJlLWEgc2UgcHJldGVuZGUgIgorIm1lc21vIGF0aXZhciBhIGNhY2hlIG7Do28gY29udHJvbGFkYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJBIGNhY2hlIG7Do28gY29udHJvbGFkYSBkZSAnJXMnIGZvaSBhdGl2YWRhLiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6OQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxvcMOnw7Vlcz5dIC1kIDxub21lLWRhLXJlZmVyw6puY2lhPiBbPHZhbG9yLWFudGlnbz5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgIiIKKyJnaXQgdXBkYXRlLXJlZiBbPG9ww6fDtWVzPl0gICAgPG5vbWUtZGEtcmVmZXLDqm5jaWE+IDxub3ZvLXZhbG9yPiBbPHZhbG9yLSIKKyJhbnRpZ28+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3DDp8O1ZXM+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICJlbGltaW5hciBhIHJlZmVyw6puY2lhIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjUKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiIgorImF0dWFsaXphciBhIHJlZmVyw6puY2lhIDxub21lLWRhLXJlZmVyw6puY2lhPiwgbsOjbyBhIHJlZmVyw6puY2lhIHF1ZSBlc3RhIGFwb250YSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAib3MgYXJndW1lbnRvcyBkYSBlbnRyYWRhIHBhZHLDo28gdGVybWluYW0gZW0gTlVMIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGVyIGF0dWFsaXphw6fDtWVzIGRhIGVudHJhZGEgcGFkcsOjbyIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo2Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE0Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAiYXR1YWxpemFyIG9zIGZpY2hlaXJvcyBkZSBpbmZvcm1hw6fDo28gZG8gemVybyIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTcKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3MgorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAiaW1wcmltaXIgY29udGXDumRvIGRvIGNvbW1pdCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzMgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzcKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgImltcHJpbWlyIGluZm9ybWHDp8OjbyBkbyBncGcgZW0gYnJ1dG8iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NAorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NAorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgInZlcmJvc28iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NgorbXNnaWQgInNob3cgc3RhdGlzdGljcyBvbmx5IgorbXNnc3RyICJtb3N0cmFyIGFwZW5hcyBlc3RhdMOtc3RpY2FzIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdG8+XSA8dGFnPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzYKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgImltcHJpbWlyIGNvbnRlw7pkbyBkYSB0YWciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNQorbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8YnJhbmNoPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxvcMOnw7Vlcz5dIDxjYW1pbmhvPiBbPHJhbW8+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3DDp8O1ZXM+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE3Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbG9jayBbPG9ww6fDtWVzPl0gPGNhbWluaG8+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9ww6fDtWVzPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgdW5sb2NrIDxjYW1pbmhvPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJBIHJlbW92ZXIgd29ya3RyZWVzLyVzOiBkaXJldMOzcmlvIGludsOhbGlkbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkEgcmVtb3ZlciB3b3JrdHJlZXMvJXM6IG8gZmljaGVpcm8gZ2l0ZGlyIG7Do28gZXhpc3RlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICJBIHJlbW92ZXIgd29ya3RyZWVzLyVzOiBuw6NvIMOpIHBvc3PDrXZlbCBsZXIgbyBmaWNoZWlybyBnaXRkaXIgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIKK21zZ3N0ciAiQSByZW1vdmVyIHdvcmt0cmVlcy8lczogZmljaGVpcm8gZ2l0ZGlyIGludsOhbGlkbyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAiIgorIkEgcmVtb3ZlciB3b3JrdHJlZXMvJXM6IG8gZmljaGVpcm8gZ2l0ZGlyIGFwb250YSBwYXJhIHVtYSBsb2NhbGl6YcOnw6NvICIKKyJpbmV4aXN0ZW50ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyOAorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAicmVwb3J0YXIgw6Fydm9yZXMgZGUgdHJhYmFsaG8gcG9kYWRhcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEzMAorbXNnaWQgImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJleHBpcmFyIMOhcnZvcmVzIGRlIHRyYWJhbGhvIG1haXMgYW50aWdvcyBxdWUgPHRlbXBvPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICInJXMnIGrDoSBleGlzdGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZGlyZXTDs3JpbyBkZSAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyAlcyAoaWRlbnRpZmllciAlcykiCittc2dzdHIgIkEgcHJlcGFyYXIgJXMgKGlkZW50aWZpY2Fkb3IgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzI0Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICIiCisiZXh0cmFpciBvIDxyYW1vPiBtZXNtbyBzZSBqw6EgdGVuaGEgc2lkbyBleHRyYcOtZG8gbm91dHJhIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjYKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmlhciB1bSBub3ZvIHJhbW8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjgKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgImNyaWFyIG91IHJlcG9yIHVtIHJhbW8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMzAKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAicG92b2FyIGEgbm92YSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzM4Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIGUgLS1kZXRhY2ggc8OjbyBtdXR1YW1lbnRlIGV4Y2x1c2l2b3MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NzMKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgInJhesOjbyBkZSB0cmFuY2FyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDg1IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiclcycgbsOjbyDDqSB1bWEgw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ4NyBidWlsdGluL3dvcmt0cmVlLmM6NTIwCittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIkEgw6Fydm9yZSBkZSB0cmFiYWxobyBwcmluY2lwYWwgbsOjbyBwb2RlIHNlciB0cmFuY2FkYSBuZW0gZGVzdHJhbmNhZGEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCwgcmVhc29uOiAlcyIKK21zZ3N0ciAiJyVzJyBqw6EgZXN0w6EgdHJhbmNhZGEsIHJhesOjbzogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyBqw6EgZXN0w6EgdHJhbmNhZGEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICInJXMnIG7Do28gZXN0w6EgdHJhbmNhZGEiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4bz4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjxwcmVmaXhvPi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI3Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJlc2NyZXZlciBvYmpldG8gw6Fydm9yZSBkbyBzdWJkaXJldMOzcmlvIDxwcmVmaXhvPiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzAKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICJhcGVuYXMgw7p0aWwgcGFyYSBkZXB1cmHDp8OjbyIKKworIzogdXBsb2FkLXBhY2suYzoyMgorbXNnaWQgImdpdCB1cGxvYWQtcGFjayBbPG9wdGlvbnM+XSA8ZGlyPiIKK21zZ3N0ciAiZ2l0IHVwbG9hZC1wYWNrIFs8b3DDp8O1ZXM+XSA8ZGlyPiIKKworIzogdXBsb2FkLXBhY2suYzoxMDQwCittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICJ0ZXJtaW5hciBkZXBvaXMgZGUgdW1hIMO6bmljYSB0cm9jYSBkZSBwZWRpZG8vcmVzcG9zdGEiCisKKyM6IHVwbG9hZC1wYWNrLmM6MTA0MgorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAic2FpciBpbWVkaWF0YW1lbnRlIGRlcG9pcyBkbyBhbsO6bmNpbyBpbmljaWFsIGRhIHJlZmVyw6puY2lhIgorCisjOiB1cGxvYWQtcGFjay5jOjEwNDQKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIm7Do28gdGVudGFyIDxkaXJldMOzcmlvPi8uZ2l0LyBzZSBvIDxkaXJldMOzcmlvPiBuw6NvIGZvciB1bSBkaXJldMOzcmlvIEdpdCIKKworIzogdXBsb2FkLXBhY2suYzoxMDQ2Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgImludGVycm9tcGVyIHRyYW5zZmVyw6puY2lhIGRlcG9pcyBkZSA8bj4gc2VndW5kb3MgZGUgaW5hdGl2aWRhZGUiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBlcm1pc3Npb25zIG9uIHlvdXIgc29ja2V0IGRpcmVjdG9yeSBhcmUgdG9vIGxvb3NlOyBvdGhlclxuIgorInVzZXJzIG1heSBiZSBhYmxlIHRvIHJlYWQgeW91ciBjYWNoZWQgY3JlZGVudGlhbHMuIENvbnNpZGVyIHJ1bm5pbmc6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorbXNnc3RyICIiCisiQXMgcGVybWlzc8O1ZXMgZG8gZGlyZXTDs3JpbyBkbyBzb2NrZXQgc8OjbyBkZW1hc2lhZG8gZnJhY2FzOyBvdXRyb3NcbiIKKyJ1dGlsaXphZG9yZXMgcG9kZXLDo28gY29uc2VndWlyIGFzIHN1YXMgY3JlZGVuY2lhaXMgZW0gY2FjaGUuIENvbnNpZGVyZSAiCisiZXhlY3V0YXI6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNzEKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICJpbXByaW1pciBtZW5zYWdlbnMgZGUgZGVwdXJhw6fDo28gbm8gc3RkZXJyIgorCisjOiBnaXQuYzoxNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuIgorbXNnc3RyICIiCisiJ2dpdCBoZWxwIC1hJyBlICdnaXQgaGVscCAtZycgbGlzdGFtIG9zIHN1YmNvbWFuZG9zIGRpc3BvbsOtdmVpcyBlIGFsZ3Vuc1xuIgorImd1aWFzIGRlIGNvbmNlaXRvcy4gQ29uc3VsdGUgJ2dpdCBoZWxwIDxjb21hbmRvPicgb3UgJ2dpdCBoZWxwIDxjb25jZWl0bz4nXG4iCisicGFyYSBsZXIgc29icmUgdW0gc3ViY29tYW5kbyBvdSBjb25jZWl0byBlc3BlY8OtZmljby4iCisKKyM6IGh0dHAuYzozNTUKK21zZ2lkICJEZWxlZ2F0aW9uIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjIyLjAiCittc2dzdHIgIk7Do28gw6kgc3Vwb3J0YWRvIGRlbGVnYXIgY29udHJvbG8gY29tIGNVUkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzozNjQKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIk7Do28gw6kgc3Vwb3J0YWRvIGFmaXhhciBjaGF2ZXMgcMO6YmxpY2FzIGNvbSBjVVJMIDwgNy40NC4wIgorCisjOiBodHRwLmM6MTc1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAiIgorIm7Do28gw6kgcG9zc8OtdmVsIGF0dWFsaXphciBiYXNlIGRlIHVybCBkZSByZWRpcmXDp8OjbzpcbiIKKyIgIHBlZGlkbyBwYXJhOiAlc1xuIgorIiAgICByZWRpcmXDp8OjbzogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZGlyZWN0aW5nIHRvICVzIgorbXNnc3RyICJhIHJlZGlyZWNpb25hciBwYXJhICVzICIKKworIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgImluaWNpYXIgdW1hIMOhcmVhIGRlIHRyYWJhbGhvIChjb25zdWx0ZSB0YW1iw6ltOiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTAKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAidHJhYmFsaGFyIG5hIGFsdGVyYcOnw6NvIGF0dWFsIChjb25zdWx0ZSB0YW1iw6ltOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTEKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgImV4YW1pbmFyIG8gaGlzdMOzcmljbyBlIGVzdGFkbyAoY29uc3VsdGUgdGFtYsOpbTogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogY29tbW9uLWNtZHMuaDoxMgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgImF1bWVudGFyLCBtYXJjYXIgZSBhanVzdGFyIG8gc2V1IGhpc3TDs3JpY28gY29tdW0iCisKKyM6IGNvbW1vbi1jbWRzLmg6MTMKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgImNvbGFib3JhciAoY29uc3VsdGUgdGFtYsOpbTogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKKworIzogY29tbW9uLWNtZHMuaDoxNworbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiQWRpY2lvbmFyIGNvbnRlw7pkb3MgZGUgZmljaGVpcm9zIGFvIMOtbmRpY2UiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJVc2UgcHJvY3VyYSBiaW7DoXJpbyBwYXJhIGVuY29udHJhciBvIGNvbW1pdCBxdWUgaW50cm9kdXppdSB1bSBidWciCisKKyM6IGNvbW1vbi1jbWRzLmg6MTkKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiTGlzdGFyLCBjcmlhciBvdSBlbGltaW5hciByYW1vcyIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiTXVkYXIgZGUgcmFtb3Mgb3UgcmVzdGF1cmFyIG9zIGZpY2hlaXJvcyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBjb21tb24tY21kcy5oOjIxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJDbG9uYXIgdW0gcmVwb3NpdMOzcmlvIG51bSBub3ZvIGRpcmV0w7NyaW8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjIKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiR3JhdmFyIGFsdGVyYcOnw7VlcyBubyByZXBvc2l0w7NyaW8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjMKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICIiCisiTW9zdHJhciBhbHRlcmHDp8O1ZXMgZW50cmUgY29tbWl0cywgZW50cmUgY29tbWl0IGUgw6Fydm9yZSBkZSB0cmFiYWxobywgZXRjIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVHJhbnNmZXJpciBvYmpldG9zIGUgcmVmZXLDqm5jaWFzIGRvdXRybyByZXBvc2l0w7NyaW8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjUKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkltcHJpbWlyIGxpbmhhcyBxdWUgY29ycmVzcG9uZGFtIGEgdW0gcGFkcsOjbyIKKworIzogY29tbW9uLWNtZHMuaDoyNgorbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICJDcmlhciB1bSByZXBvc2l0w7NyaW8gR2l0IHZhemlvIG91IHJlaW5pY2lhbGl6YXIgdW0gasOhIGV4aXN0ZW50ZSIKKworIzogY29tbW9uLWNtZHMuaDoyNworbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIk1vc3RyYXIgaGlzdMOzcmljbyBkZSBjb21taXRzIgorCisjOiBjb21tb24tY21kcy5oOjI4Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIkp1bnRhciBkdWFzIG91IG1haXMgaGlzdMOzcmlhcyBkZSBkZXNlbnZvbHZpbWVudG8gbnVtYSBzw7MiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjkKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIk1vdmVyIG91IG11ZGFyIG8gbm9tZSBkZSB1bSBmaWNoZWlybywgZGlyZXTDs3JpbyBvdSBsaWdhw6fDo28gc2ltYsOzbGljYSIKKworIzogY29tbW9uLWNtZHMuaDozMAorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiT2J0ZXIgZSBpbnRlZ3JhciBjb20gb3V0cm8gcmVwb3NpdMOzcmlvIG91IG91dHJvIHJhbW8gbG9jYWwiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzEKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIkF0dWFsaXphciByZWZlcsOqbmNpYXMgcmVtb3RhcyBqdW50YW1lbnRlIGNvbSBvYmpldG9zIGFzc29jaWFkb3MiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzIKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIlJlYXBsaWNhciBjb21taXRzIG5vIHRvcG8gZGUgb3V0cmEgYmFzZSIKKworIzogY29tbW9uLWNtZHMuaDozMworbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICJSZXBvciBhIEhFQUQgYXR1YWwgbm8gZXN0YWRvIGVzcGVjaWZpY2FkbyIKKworIzogY29tbW9uLWNtZHMuaDozNAorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJSZW1vdmVyIGZpY2hlaXJvcyBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGUgZG8gw61uZGljZSIKKworIzogY29tbW9uLWNtZHMuaDozNQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICJNb3N0cmFyIHbDoXJpb3MgdGlwb3Mgb2JqZXRvcyIKKworIzogY29tbW9uLWNtZHMuaDozNgorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIk1vc3RyYXIgbyBlc3RhZG8gZGEgw6Fydm9yZXMgZGUgdHJhYmFsaG8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MzcKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiQ3JpYXIsIGxpc3RhciwgZWxpbWluYXIgb3UgdmVyaWZpY2FyIHVtIG9iamV0byB0YWcgYXNzaW5hZG8gY29tIEdQRyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE0NQorbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJkYXRhLWRlLXZhbGlkYWRlIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTYwCittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICJzZW0tYcOnw6NvIChyZXRyb2NvbXBhdGliaWxpZGFkZSkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzgKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgInNlciBtYWlzIHZlcmJvc28iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNDAKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICJzZXIgbWFpcyBzaWxlbmNpb3NvIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjQ2Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgInVzYXIgPG4+IGTDrWdpdG9zIHBhcmEgbW9zdHJhciBTSEEtMXMiCisKKyM6IHJlcmVyZS5oOjQwCittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisiYXR1YWxpemFyIG8gw61uZGljZSBjb20gcmVzb2x1w6fDtWVzIGRlIGNvbmZsaXRvcyByZXV0aWxpemFkYXMgc2UgcG9zc8OtdmVsIgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIkRldmUgY29tZcOnYXIgcG9yIGV4ZWN1dGFyIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIlF1ZXIgcXVlIG8gR2l0IG8gZmHDp2EgcG9yIHNpIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCittc2dzdHIgIm9ww6fDo28gbsOjbyByZWNvbmhlY2lkYTogJyRhcmcnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICInJGFyZycgbsOjbyBwYXJlY2VyIHNlciB1bWEgcmV2aXPDo28gdsOhbGlkYSIKKworIzogZ2l0LWJpc2VjdC5zaDoxNTQKK21zZ2lkICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIkhFQUQgaW5jb3JyZXRhIC0gw6kgbmVjZXNzw6FyaW8gdW1hIEhFQUQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorIkZhbGhhIGFvIGV4dHJhaXIgJyRzdGFydF9oZWFkJy4gVGVudGUgJ2dpdCBiaXNlY3QgcmVzZXQgPHJhbW8tdsOhbGlkbz4nLiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNzcKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBiaXNzZXRhciBudW1hIMOhcnZvcmUgXCJjZy1zZWVrJ2VkXCIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTgxCittc2dpZCAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiSEVBRCBpbmNvcnJldGEgLSByZWZlcsOqbmNpYSBzaW1iw7NsaWNhIGRlc2NvbmhlY2lkYSIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICRzdGF0ZSIKK21zZ3N0ciAiQXJndW1lbnRvIGRlIGJpc2VjdF93cml0ZSBpbmNvcnJldG86ICRzdGF0ZSIKKworIzogZ2l0LWJpc2VjdC5zaDoyNjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIlJldmlzw6NvIGluY29ycmV0YSBuYSBlbnRyYWRhOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIlJldmlzw6NvIGluY29ycmV0YSBuYSBlbnRyYWRhOiAkYmlzZWN0ZWRfaGVhZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIlJldmlzw6NvIGluY29ycmV0YSBuYSBlbnRyYWRhOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgc8OzIGxldmEgdW0gYXJndW1lbnRvLiIKKworIzogZ2l0LWJpc2VjdC5zaDozMjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSAkVEVSTV9CQUQgY29tbWl0LiIKK21zZ3N0ciAiQXZpc286IGEgYmlzc2V0YXIgc8OzIGNvbSB1bSBjb21taXQgJFRFUk1fQkFELiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjMyOAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICJUZW0gYSBjZXJ0ZXphIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGJhZF9zeW4gYW5kIG9uZSAkZ29vZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkRldmUgaW5kaWNhciBwZWxvIG1lbm9zIHVtYSByZXZpc8OjbyAkYmFkX3N5biBlIHVtYSByZXZpc8OjbyAkZ29vZF9zeW4uXG4iCisiKFBvZGUgdXNhciBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBlIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBwYXJhIGVzc2UgZmltLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAkZ29vZF9zeW4gYW5kIG9uZSAkYmFkX3N5biByZXZpc2lvbi5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgYW5kIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBmb3IgdGhhdC4pIgorbXNnc3RyICIiCisiRGV2ZSBjb21lw6dhciBwb3IgZXhlY3V0YXIgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiSW5kaXF1ZSBwZWxvIG1lbm9zIHVtYSByZXZpc8OjbyAkZ29vZF9zeW4gZSB1bWEgcmV2aXPDo28gJGJhZF9zeW4uXG4iCisiKFBvZGUgdXNhciBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBlIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBwYXJhIGVzc2UgZmltLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDE0IGdpdC1iaXNlY3Quc2g6NTQ2Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJOw6NvIHNlIGVzdMOhIGEgYmlzc2V0YXIuIgorCisjOiBnaXQtYmlzZWN0LnNoOjQyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIickaW52YWxpZCcgbsOjbyDDqSB1bSBjb21taXQgdsOhbGlkbyIKKworIzogZ2l0LWJpc2VjdC5zaDo0MzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIGV4dHJhaXIgYSBIRUFEIG9yaWdpbmFsIGRlICckYnJhbmNoJy5cbiIKKyJUZW50ZSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1OAorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIk5lbmh1bSBmaWNoZWlybyBkZSBsb2cgZm9ybmVjaWRvIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgbGVyICRmaWxlIHBhcmEgcmVwcm9kdXppciIKKworIzogZ2l0LWJpc2VjdC5zaDo0ODAKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IGRvIHF1ZSDDqSBxdWUgZXN0w6EgYSBmYWxhcj8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJhIGV4ZWN1dGFyICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisiZmFsaGEgYW8gYmlzc2V0YXI6XG4iCisiY8OzZGlnbyBkZSBzYcOtZGEgJHJlcyBkZSAnJGNvbW1hbmQnIMOpIDwgMCBvdSA+PSAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTI1Cittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGNvbnRpbnVhciBhIGJpc3NldGFyIgorCisjOiBnaXQtYmlzZWN0LnNoOjUzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJmYWxoYSBhbyBiaXNzZXRhcjpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgcmV0b3Jub3UgY29tIG8gY8OzZGlnbyBkZSBlcnJvICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTM4Cittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICJiaXNzZWPDp8OjbyBjb25jbHXDrWRhIGNvbSBzdWNlc3NvIgorCisjOiBnaXQtYmlzZWN0LnNoOjU2NQorbXNnaWQgInBsZWFzZSB1c2UgdHdvIGRpZmZlcmVudCB0ZXJtcyIKK21zZ3N0ciAidXNlIGRvaXMgdGVybW9zIGRpZmVyZW50ZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHRlcm0nIGlzIG5vdCBhIHZhbGlkIHRlcm0iCittc2dzdHIgIickdGVybScgbsOjbyDDqSB1bSB0ZXJtbyB2w6FsaWRvIgorCisjOiBnaXQtYmlzZWN0LnNoOjU3OAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2FuJ3QgdXNlIHRoZSBidWlsdGluIGNvbW1hbmQgJyR0ZXJtJyBhcyBhIHRlcm0iCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIHVzYXIgbyBjb21hbmRvICckdGVybScgY29tbyB1bSB0ZXJtbyIKKworIzogZ2l0LWJpc2VjdC5zaDo1ODcgZ2l0LWJpc2VjdC5zaDo1OTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0ZXJtICckdGVybSciCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFsdGVyYXIgbyBzaWduaWZpY2FkbyBkbyB0ZXJtbyAnJHRlcm0nIgorCisjOiBnaXQtYmlzZWN0LnNoOjYwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21tYW5kOiB5b3UncmUgY3VycmVudGx5IGluIGEgJFRFUk1fQkFELyRURVJNX0dPT0QgYmlzZWN0LiIKK21zZ3N0ciAiIgorIkNvbWFuZG8gaW52w6FsaWRvOiBlc3TDoS1zZSBhIGJpc3NldGFyIHVzYW5kbyBvcyB0ZXJtb3MgJFRFUk1fQkFELyRURVJNX0dPT0QuIgorCisjOiBnaXQtYmlzZWN0LnNoOjYzNgorbXNnaWQgIm5vIHRlcm1zIGRlZmluZWQiCittc2dzdHIgIm5lbmh1bSB0ZXJtbyBkZWZpbmlkbyIKKworIzogZ2l0LWJpc2VjdC5zaDo2NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIGFyZ3VtZW50ICRhcmcgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyJhcmd1bWVudG8gaW52w6FsaWRvICRhcmcgZGUgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIk9ww6fDtWVzIHN1cG9ydGFkYXM6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgZSAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiRXJybzogQXMgc3VhcyBhbHRlcmHDp8O1ZXMgbG9jYWlzIG5vcyBzZWd1aW50ZXMgZmljaGVpcm9zIHNlcmlhbSBzdWJzdGl0dcOtZGFzICIKKyJhbyBpbnRlZ3JhciIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjEKK21zZ2lkICJBdXRvbWF0ZWQgbWVyZ2UgZGlkIG5vdCB3b3JrLiIKK21zZ3N0ciAiQSBpbnRlZ3Jhw6fDo28gYXV0b23DoXRpY2EgbsOjbyBmdW5jaW9ub3UuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgIk7Do28gc2UgZGV2aXJpYSBlc3RhciBhIGZhemVyIHVtIHBvbHZvLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGNvbW1vbiBjb21taXQgd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVuY29udHJhciBjb21taXQgY29tdW0gY29tICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgdXAtdG8tZGF0ZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiSsOhIGVzdMOhIGF0dWFsaXphZG8gY29tICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyB0bzogJHByZXR0eV9uYW1lIgorbXNnc3RyICJBIGF2YW7Dp2FyIHJhcGlkYW1lbnRlIHBhcmE6ICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6OTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCittc2dzdHIgIkEgdGVudGFyIGludGVncmHDp8OjbyBzaW1wbGVzIGNvbSAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjEwMgorbXNnaWQgIlNpbXBsZSBtZXJnZSBkaWQgbm90IHdvcmssIHRyeWluZyBhdXRvbWF0aWMgbWVyZ2UuIgorbXNnc3RyICJBIGludGVncmHDp8OjbyBzaW1wbGVzIG7Do28gZnVuY2lvbm91LCBhIHRlbnRhciBpbnRlZ3Jhw6fDo28gYXV0b23DoXRpY2EuIgorCisjOiBnaXQtcmViYXNlLnNoOjU3Cittc2dpZCAiIgorIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHJlYmFzaW5nLCBydW4gXCJnaXQgcmViYXNlIC0tYWJvcnQiCisiXCIuIgorbXNnc3RyICIiCisiRGVwb2lzIGRlIHJlc29sdmVyIGVzdGUgcHJvYmxlbWEsIGV4ZWN1dGUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJTZSBwcmVmZXJlIGlnbm9yYXIgZXN0ZSBwYXRjaCwgZXhlY3V0ZSBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiUGFyYSBleHRyYWlyIG8gcmFtbyBvcmlnaW5hbCBlIGludGVycm9tcGVyIG8gcmViYXNlLCBleGVjdXRlIFwiZ2l0IHJlYmFzZSAtLSIKKyJhYm9ydFwiLiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNTcgZ2l0LXJlYmFzZS5zaDozOTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJGhlYWRfbmFtZSIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHZvbHRhciBwYXJhICRoZWFkX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGd1YXJkYXIgJHN0YXNoX3NoYTEiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjExCittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIlJlYmFzZSByZWN1c2FkbyBwZWxvIGhvb2sgcHJlLXJlYmFzZS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjE2Cittc2dpZCAiSXQgbG9va3MgbGlrZSBnaXQtYW0gaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICJQYXJlY2UgcXVlIG8gZ2l0LWFtIGVzdMOhIGVtIGN1cnNvLiBOw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyIHJlYmFzZS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzU3Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiUmViYXNlIG7Do28gZXN0w6EgZW0gY3Vyc28/IgorCisjOiBnaXQtcmViYXNlLnNoOjM2OAorbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiQSBhw6fDo28gLS1lZGl0LXRvZG8gc8OzIHBvZGUgc2VyIHVzYWRhIGR1cmFudGUgdW0gcmViYXNlIGludGVyYXRpdm8uIgorCisjOiBnaXQtcmViYXNlLnNoOjM3NQorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGxlciBIRUFEIgorCisjOiBnaXQtcmViYXNlLnNoOjM3OAorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIkRldmUgZWRpdGFyIHRvZG9zIG9zIGNvbmZsaXRvcyBkYSBpbnRlZ3Jhw6fDo29cbiIKKyJlIG1hcmPDoS1sb3MgY29tbyByZXNvbHZpZG9zIHVzYW5kbyBnaXQgYWRkIgorCisjOiBnaXQtcmViYXNlLnNoOjQxOAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICRzdGF0ZV9kaXJfYmFzZSBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS4iCittc2dzdHIgIiIKKyJQYXJlY2UgcXVlIGrDoSBleGlzdGUgdW0gZGlyZXTDs3JpbyAkc3RhdGVfZGlyX2Jhc2UgZVxuIgorIsOpIHBvc3PDrXZlbCBxdWUgb3V0cm8gcHJvY2Vzc28gZGUgcmViYXNlIGrDoSBlc3RlamEgZW0gY3Vyc28uXG4iCisiU2UgZm9yIG8gY2FzbywgdGVudGVcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJTZSBuw6NvIGZvciBvIGNhc28sXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImUgZXhlY3V0ZSBvIGNvbWFuZG8gZGUgbm92by4gQSBleGVjdcOnw6NvIGZvaSBpbnRlcnJvbXBpZGEgbm8gY2FzbyBkZVxuIgorImFpbmRhIHRlciBhbGdvIGltcG9ydGFudGUgbmVzc2Ugc8OtdGlvLiIKKworIzogZ2l0LXJlYmFzZS5zaDo0NjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJHVwc3RyZWFtX25hbWUiCittc2dzdHIgIiR1cHN0cmVhbV9uYW1lIGEgbW9udGFudGUgaW52w6FsaWRvIgorCisjOiBnaXQtcmViYXNlLnNoOjQ5MworIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiRvbnRvX25hbWU6IGjDoSBtYWlzIGRvIHF1ZSB1bWEgYmFzZSBkZSBpbnRlZ3Jhw6fDo28iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDk2IGdpdC1yZWJhc2Uuc2g6NTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkb250b19uYW1lOiB0aGVyZSBpcyBubyBtZXJnZSBiYXNlIgorbXNnc3RyICIkb250b19uYW1lOiBuw6NvIGjDoSBuZW5odW1hIGJhc2UgZGUgaW50ZWdyYcOnw6NvIgorCisjOiBnaXQtcmViYXNlLnNoOjUwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCittc2dzdHIgIk7Do28gYXBvbnRhIHBhcmEgdW0gY29tbWl0IHbDoWxpZG86ICRvbnRvX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTI4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2g6ICRicmFuY2hfbmFtZSIKK21zZ3N0ciAiZmF0YWw6IHJhbW8gaW5leGlzdGVudGU6ICRicmFuY2hfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjEKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlbXBpbGhhciBhdXRvbWF0aWNhbWVudGUgKGF1dG9zdGFzaCkiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKK21zZ3N0ciAiUGlsaGEgYXV0b23DoXRpY2EgKGF1dG9zdGFzaCkgY3JpYWRhOiAkc3Rhc2hfYWJicmV2IgorCisjOiBnaXQtcmViYXNlLnNoOjU3MAorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIlN1Ym1ldGEgb3UgZXNjb25kYS1hcy4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIk8gcmFtbyBhdHVhbCAkYnJhbmNoX25hbWUgZXN0w6EgYXR1YWxpemFkby4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIk8gcmFtbyBhdHVhbCAkYnJhbmNoX25hbWUgZXN0w6EgYXR1YWxpemFkbywgcmViYXNlIGZvcsOnYWRvLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAkbWIgdG8gJG9udG86IgorbXNnc3RyICJBbHRlcmHDp8O1ZXMgZGUgJG1iIHBhcmEgJG9udG86IgorCisjOiBnaXQtcmViYXNlLnNoOjYxNAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAiIgorIlByaW1laXJvLCBhIHJlY3VhciBhIGNhYmXDp2EgcGFyYSByZXBsaWNhciBhcyBzdWFzIGFsdGVyYcOnw7VlcyBubyB0b3BvIGRlbGEuLi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCittc2dzdHIgIiRicmFuY2hfbmFtZSBhdmFuw6dhZG8gcmFwaWRhbWVudGUgcGFyYSAkb250b19uYW1lLiIKKworIzogZ2l0LXN0YXNoLnNoOjUzCittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICJuw6NvIGVzdMOhIGltcGxlbWVudGFkbyBnaXQgc3Rhc2ggY2xlYXIgY29tIHBhcsOibWV0cm9zIgorCisjOiBnaXQtc3Rhc2guc2g6OTQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAiTyBjb21taXQgaW5pY2lhbCBhaW5kYSBuw6NvIGV4aXN0ZSIKKworIzogZ2l0LXN0YXNoLnNoOjEwOQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBndWFyZGFyIG8gZXN0YWRvIGF0dWFsIGRvIMOtbmRpY2UiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBndWFyZGFyIG9zIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIgorCisjOiBnaXQtc3Rhc2guc2g6MTQ0IGdpdC1zdGFzaC5zaDoxNTcKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZ3VhcmRhciBvIGVzdGFkbyBhdHVhbCBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIgorCisjOiBnaXQtc3Rhc2guc2g6MTYxCittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiTmVuaHVtYSBhbHRlcmHDp8OjbyBzZWxlY2lvbmFkYSIKKworIzogZ2l0LXN0YXNoLnNoOjE2NAorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCByZW1vdmVyIG8gw61uZGljZSB0ZW1wb3LDoXJpbyAobsOjbyBwb2RlIGFjb250ZWNlcikiCisKKyM6IGdpdC1zdGFzaC5zaDoxNzcKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZ3JhdmFyIG8gZXN0YWRvIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGdpdC1zdGFzaC5zaDoyMDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgYXR1YWxpemFyICRyZWZfc3Rhc2ggY29tICR3X2NvbW1pdCIKKworIy4gVFJBTlNMQVRPUlM6ICRvcHRpb24gaXMgYW4gaW52YWxpZCBvcHRpb24sIGxpa2UKKyMuIGAtLWJsYWgtYmxhaCcuIFRoZSA3IHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorIy4gc2Vjb25kIGxpbmUgY29ycmVzcG9uZCB0byAiZXJyb3I6ICIuIFNvIHlvdSBzaG91bGQgbGluZQorIy4gdXAgdGhlIHNlY29uZCBsaW5lIHdpdGggaG93ZXZlciBtYW55IGNoYXJhY3RlcnMgdGhlCisjLiB0cmFuc2xhdGlvbiBvZiAiZXJyb3I6ICIgdGFrZXMgaW4geW91ciBsYW5ndWFnZS4gRS5nLiBpbgorIy4gRW5nbGlzaCB0aGlzIGlzOgorIy4KKyMuICQgZ2l0IHN0YXNoIHNhdmUgLS1ibGFoLWJsYWggMj4mMSB8IGhlYWQgLW4gMgorIy4gZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6IC0tYmxhaC1ibGFoCisjLiBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICctLWJsYWgtYmxhaCcKKyM6IGdpdC1zdGFzaC5zaDoyNjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKK21zZ3N0ciAiIgorImVycm86IG9ww6fDo28gZGVzY29uaGVjaWRhIGRlICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgIFBhcmEgZm9ybmVjZXIgdW1hIG1lbnNhZ2VtLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorCisjOiBnaXQtc3Rhc2guc2g6Mjc4Cittc2dpZCAiQ2FuJ3QgdXNlIC0tcGF0Y2ggYW5kIC0taW5jbHVkZS11bnRyYWNrZWQgb3IgLS1hbGwgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIHVzYXIgLS1wYXRjaCBlIC0taW5jbHVkZS11bnRyYWNrZWQgb3UgLS1hbGwgYW8gbWVzbW8gdGVtcG8iCisKKyM6IGdpdC1zdGFzaC5zaDoyODYKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIk7Do28gaMOhIGFsdGVyYcOnw7VlcyBsb2NhaXMgcGFyYSBndWFyZGFyIgorCisjOiBnaXQtc3Rhc2guc2g6MjkxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGluaWNpYWxpemFyIGEgcGlsaGEiCisKKyM6IGdpdC1zdGFzaC5zaDoyOTUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGd1YXJkYXIgbyBlc3RhZG8gYXR1YWwiCisKKyM6IGdpdC1zdGFzaC5zaDoyOTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICJEaXJldMOzcmlvIGRlIHRyYWJhbGhvIGUgZXN0YWRvIGRvIMOtbmRpY2UgJHN0YXNoX21zZyBndWFyZGFkb3MiCisKKyM6IGdpdC1zdGFzaC5zaDozMjMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHJlbW92ZXIgYXMgYWx0ZXJhw6fDtWVzIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGdpdC1zdGFzaC5zaDo0NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJvcMOnw6NvIGRlc2NvbmhlY2lkbzogJG9wdCIKKworIzogZ2l0LXN0YXNoLnNoOjQ4NAorbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAiTmVuaHVtYSBwaWxoYSBlbmNvbnRyYWRhLiIKKworIzogZ2l0LXN0YXNoLnNoOjQ5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiRGVtYXNpYWRhcyByZXZpc8O1ZXMgZXNwZWNpZmljYWRhczogJFJFViIKKworIzogZ2l0LXN0YXNoLnNoOjUwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2UgbsOjbyDDqSB1bWEgcmVmZXLDqm5jaWEgdsOhbGlkYSIKKworIzogZ2l0LXN0YXNoLnNoOjUzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBuw6NvIMOpIHVtIGNvbW1pdCBzZW1lbGhhbnRlIGEgcGlsaGEiCisKKyM6IGdpdC1zdGFzaC5zaDo1NDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIG7Do28gw6kgdW1hIHJlZmVyw6puY2lhIGRlIHBpbGhhIgorCisjOiBnaXQtc3Rhc2guc2g6NTUzCittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCByZWZyZXNjYXIgbyDDrW5kaWNlIgorCisjOiBnaXQtc3Rhc2guc2g6NTU3Cittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBhcGxpY2FyIHVtYSBwaWxoYSBkdXJhbnRlIHVtYSBpbnRlZ3Jhw6fDo28iCisKKyM6IGdpdC1zdGFzaC5zaDo1NjUKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJDb25mbGl0b3Mgbm8gw61uZGljZS4gVGVudGUgc2VtIC0taW5kZXguIgorCisjOiBnaXQtc3Rhc2guc2g6NTY3Cittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGd1YXJkYXIgw6Fydm9yZSBkbyDDrW5kaWNlIgorCisjOiBnaXQtc3Rhc2guc2g6NTc2Cittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2giCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZXN0YXVyYXIgb3MgZmljaGVpcm9zIG7Do28gY29udHJvbGFkb3MgZGEgcGlsaGEiCisKKyM6IGdpdC1zdGFzaC5zaDo2MDEKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZGVzcHJlcGFyYXIgb3MgZmljaGVpcm9zIG1vZGlmaWNhZG8iCisKKyM6IGdpdC1zdGFzaC5zaDo2MTYKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgIk8gw61uZGljZSBuw6NvIGZvaSByZXBvc3RvLiIKKworIzogZ2l0LXN0YXNoLnNoOjYzMAorbXNnaWQgIlRoZSBzdGFzaCBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICJBIHBpbGhhIMOpIGd1YXJkYSBubyBjYXNvIGRlIHByZWNpc2FyIGRlbGEgZGUgbm92by4iCisKKyM6IGdpdC1zdGFzaC5zaDo2MzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIkEgZGVzY2FydGFyICR7UkVWfSAoJHMpIgorCisjOiBnaXQtc3Rhc2guc2g6NjQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IE7Do28gZm9pIHBvc3PDrXZlbCBkZXNjYXJ0YXIgZWxlbWVudG8gZGEgcGlsaGEiCisKKyM6IGdpdC1zdGFzaC5zaDo2NDgKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5lbmh1bSBub21lIGRlIHJhbW8gZXNwZWNpZmljYWRvIgorCisjOiBnaXQtc3Rhc2guc2g6NzI3Cittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoUGFyYSBvcyByZXN0YXVyYXIgZXhlY3V0ZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxODEKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIk9zIGNhbWluaG9zIHJlbGF0aXZvcyBzw7MgcG9kZW0gc2VyIHVzYWRvcyBhIHBhcnRpciBkbyB0b3BvIGRhIMOhcnZvcmUgZGUgIgorInRyYWJhbGhvIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiVVJMIGRvIHJlcG9zaXTDs3JpbzogJyRyZXBvJyBkZXZlIHNlciBhYnNvbHV0byBvdSBjb21lw6dhciBjb20gLi98Li4vIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcgasOhIGV4aXN0ZSBubyDDrW5kaWNlIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIxMworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyBqw6EgZXhpc3RlIG5vIMOtbmRpY2VlIG7Do28gw6kgdW0gc3VibcOzZHVsbyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiTyBzZWd1aW50ZSBjYW1pbmhvIGZvaSBpZ25vcmFkbyBwb3IgdW0gZmljaGVpcm8gLmdpdGlnbm9yZTpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBzZSBwcmV0ZW5kZSBtZXNtbyBhZGljaW9uw6EtbG8uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkEgYWRpY2lvbmFyIHJlcG9zaXTDs3JpbyBleGlzdGVudGUgZW0gJyRzbV9wYXRoJyBhbyDDrW5kaWNlIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzOAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcgasOhIGV4aXN0ZSBlIG7Do28gw6kgdW1hIHJlcG9zaXTDs3JpbyBnaXQgdsOhbGlkbyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorIlVtIGRpcmV0w7NyaW8gZ2l0IGRlICckc21fbmFtZScgZm9pIGVuY29udHJhZG8gbG9jYWxtZW50ZSBjb20gb3MgcmVtb3RvczoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCAiCisicmVwb1xuIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisiU2UgcXVlciByZXV0aWxpemFyIGVzdGUgZGlyZXTDs3JpbyBnaXQgbG9jYWwgZW0gdmV6IGRlIGNsb25hciBkZSBub3ZvIGRlXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2UgYSBvcMOnw6NvICctLWZvcmNlJy4gU2UgbyBkaXJldMOzcmlvIGdpdCBsb2NhbCBuw6NvIMOpIG8gcmVwbyBjb3JyZXRvXG4iCisib3UgbsOjbyB0ZW0gYSBjZXJ0ZXphIG8gcXVlIGlzdG8gc2lnbmlmaWNhIGVzY29saGEgb3V0cm8gbm9tZSBjb20gYSBvcMOnw6NvICctLSIKKyJuYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICJBIHJlYXRpdmFyIG8gZGlyZXTDs3JpbyBnaXQgbG9jYWwgZG8gc3VibcOzZHVsbyAnJHNtX25hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGV4dHJhaXIgbyBzdWJtw7NkdWxvICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJGYWxoYSBhbyBhZGljaW9uYXIgbyBzdWJtw7NkdWxvICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkZhbGhhIGFvIHJlZ2lzdGFyIG8gc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkEgZW50cmFyIGVtICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM2MQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRkaXNwbGF5cGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICIiCisiSW50ZXJyb21waWRvIGVtICckZGlzcGxheXBhdGgnOyBvIHNjcmlwdCByZXRvcm5vdSB1bSB2YWxvciBkaWZlcmVudGUgZGUgemVyby4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyBhbmQgLS1hbGwgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiZXNwZWNpZmljYWRvciBkZSBjYW1pbmhvIGUgLS1hbGwgc8OjbyBpbmNvbXBhdMOtdmVpcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVzZSAnLS1hbGwnIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKyJVc2UgJy0tYWxsJyBzZSBwcmV0ZW5kZSBtZXNtbyBhbnVsYXIgYSBpbmljaWFsaXphw6fDo28gdG9kb3Mgb3Mgc3VibcOzZHVsb3MiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDU3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5XG4iCisiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisiQSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGRvIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCcgY29udMOpbSB1bSBkaXJldMOzcmlvIC5naXRcbiIKKyIodXNlICdybSAtcmYnIHNlIHByZXRlbmRlIG1lc21vIHJlbW92w6otbG8sIGluY2x1aW5kbyB0b2RvIG8gc2V1IGhpc3TDs3JpY28pIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gIgorImRpc2NhcmQgdGhlbSIKK21zZ3N0ciAiIgorIkEgw6Fydm9yZSBkZSB0cmFiYWxobyBkbyBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIGNvbnTDqW0gYWx0ZXJhw6fDtWVzIGxvY2FpczsgIgorInVzZSAnLWYnIHBhcmEgYXMgZGVzY2FydGFyIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkRpcmV0w7NyaW8gJyRkaXNwbGF5cGF0aCcgbGltcG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgcmVtb3ZlciBhIMOhcnZvcmUgZGUgdHJhYmFsaG8gZG8gc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gZGlyZXTDs3JpbyB2YXppbyBkbyBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4MQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIk8gcmVnaXN0byBkbyBzdWJtw7NkdWxvICckbmFtZScgKCR1cmwpIGZvaSByZW1vdmlkbyBkbyBjYW1pbmhvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIk7Do28gZm9pIHBvc3PDrXZlbCBlbmNvbnRyYXIgYSByZXZpc8OjbyBhdHVhbCBubyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gIgorIickZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBubyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAiCisiJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIk7Do28gZm9pIHBvc3PDrXZlbCBlbmNvbnRyYXIgYSByZXZpc8OjbyBhdHVhbCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gbm8gIgorImNhbWluaG8gZGUgc3VibcOzZHVsbyAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBvYnRlciBubyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRmV0Y2hlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJywgYnV0IGl0IGRpZCBub3QgY29udGFpbiAkc2hhMS4gIgorIkRpcmVjdCBmZXRjaGluZyBvZiB0aGF0IGNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisiT2J0ZXZlLXNlIG5vIGNhbWluaG8gZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJywgbWFzIG7Do28gY29udGluaGEgJHNoYTEuICIKKyJGYWxoYSBhbyBvYnRlciBhcXVlbGUgY29tbWl0IGRpcmV0YW1lbnRlLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBleHRyYWlyICckc2hhMScgbm8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY4NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIkNhbWluaG8gZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJzogJyRzaGExJyBleHRyYcOtZG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njg4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgZWZldHVhciByZWJhc2UgZGUgJyRzaGExJyBubyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gIgorIickZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICJDYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCc6IHJlYmFzZSBjb25jbHXDrWRvIGVtICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgaW50ZWdyYXIgJyRzaGExJyBubyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIkNhbWluaG8gZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJzogaW50ZWdyYWRvIGVtICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJGYWxoYSBhbyBleGVjdXRhciAnJGNvbW1hbmQgJHNoYTEnIG5vIGNhbWluaG8gZGUgc3VibcOzZHVsbyAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJDYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJGYWxoYSBhbyBwZXJjb3JyZXIgbyBjYW1pbmhvIGRlIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQwCittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiQSBvcMOnw6NvIC0tY2FjaGVkIG7Do28gcG9kZSBzZXIgdXNhZGEgY29tIGEgb3DDp8OjbyAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5MgorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJtb2RvIGluZXNwZXJhZG8gJG1vZF9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAgQXZpc286ICRkaXNwbGF5X25hbWUgbsOjbyBjb250w6ltIG8gY29tbWl0ICRzaGExX3NyYyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBXYXJuOiAkZGlzcGxheV9uYW1lIG7Do28gY29udMOpbSBvIGNvbW1pdCAkc2hhMV9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTE4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBjb250w6ltIG9zIGNvbW1pdHMgJHNoYTFfc3JjIGUgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwNjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiRmFsaGEgYW8gcGVyY29ycmVyIHJlY3Vyc2l2YW1lbnRlIG8gY2FtaW5obyBkZSBzdWJtw7NkdWxvICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTEzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiQSBzaW5jcm9uaXphciBvIFVSTCBkbyBzdWJtw7NkdWxvICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIkNvbnN1bHRlIGdpdC0ke2NtZH0oMSkgcGFyYSBvYnRlciBtYWlzIGRldGFsaGVzLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICJBIHJlYmFzZWFyICgkbmV3X2NvdW50LyR0b3RhbCkiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjE1NgorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyIgcCwgcGljayA9IHVzZSBjb21taXRcbiIKKyIgciwgcmV3b3JkID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiIGUsIGVkaXQgPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyIgcywgc3F1YXNoID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyIgZiwgZml4dXAgPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyIgeCwgZXhlYyA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyIgZCwgZHJvcCA9IHJlbW92ZSBjb21taXRcbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICIiCisiXG4iCisiQ29tYW5kb3M6XG4iCisiIHAsIHBpY2sgPSB1c2FyIGNvbW1pdFxuIgorIiByLCByZXdvcmQgPSB1c2FyIGNvbW1pdCwgbWFzIGVkaXRhciBhIG1lbnNhZ2VtIGRlIGNvbW1pdFxuIgorIiBlLCBlZGl0ID0gdXNhciBjb21taXQsIG1hcyBwYXJhciBwYXJhIGVtZW5kYXJcbiIKKyIgcywgc3F1YXNoID0gdXNhciBjb21taXQsIG1hcyBmdW5kaXIgY29tIG8gY29tbWl0IGFudGVyaW9yXG4iCisiIGYsIGZpeHVwID0gY29tbyBcInNxdWFzaFwiLCBtYXMgZGVzY2FydGFyIGEgbWVuc2FnZW0gZGVzdGUgY29tbWl0XG4iCisiIHgsIGV4ZWMgPSBleGVjdXRhciBvIGNvbWFuZG8gKG8gcmVzdG8gZGEgbGluaGEpIHVzYW5kbyBhIHNoZWxsXG4iCisiIGQsIGRyb3AgPSByZW1vdmVyIGNvbW1pdFxuIgorIlxuIgorIkVzdGFzIGxpbmhhcyBwb2RlIHNlciByZW9yZGVuYWRhczsgc8OjbyBleGVjdXRhZGFzIGRlIGNpbWEgcGFyYSBiYWl4by5cbiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTcxCittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOw6NvIHJlbW92ZXIgbmVuaHVtIGxpbmhhLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0YW1lbnRlIHBhcmEgcmVtb3ZlciB1bSBjb21taXQuXG4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjE3NQorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlIHJlbW92ZXIgdW1hIGxpbmhhIGRhcXVpIEFRVUVMRSBDT01NSVQgU0VSw4EgUEVSRElETy5cbiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJQb2RlIGVtZW5kYXIgbyBjb21taXQgYWdvcmEsIGNvbVxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiQXNzaW0gcXVlIGVzdGl2ZXIgc2F0aXNmZWl0byBjb20gYXMgYWx0ZXJhw6fDtWVzLCBleGVjdXRlXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjIzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiRzaGExOiBuw6NvIMOpIHVtIGNvbW1pdCBxdWUgc2UgcG9zc2EgYXBhbmhhciIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6Mjc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAiTm9tZSBkZSBjb21taXQgaW52w6FsaWRvOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MzE3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZXNjcmV2ZXIgbyBzaGExIHN1YnN0aXR1dG8gZG8gY29tbWl0IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDozNjkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiQXZhbsOnby1yw6FwaWRvIHBhcmEgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjM3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgYXZhbsOnYXIgcmFwaWRhbWVudGUgcGFyYSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MzgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIG1vdmVyIEhFQUQgcGFyYSAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDozODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAiUmVjdXNhLXNlIGEgZXNtYWdhciB1bWEgaW50ZWdyYcOnw6NvOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6Mzk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICJFcnJvIGFvIHJlZmF6ZXIgaW50ZWdyYcOnw6NvICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYXBhbmhhciAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NDE2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgIkVzdGEgw6kgYSBtZW5zYWdlbSBkZSBjb21taXQgbsK6JHtufToiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMke259IHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIkEgbWVuc2FnZW0gZGUgY29tbWl0IG7CuiR7bn0gc2Vyw6EgaWdub3JhZGE6IgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo0MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAiSXN0byDDqSBhIGNvbWJpbmHDp8OjbyBkZSAkY291bnQgY29tbWl0LiIKK21zZ3N0clsxXSAiSXN0byDDqSBhIGNvbWJpbmHDp8OjbyBkZSAkY291bnQgY29tbWl0cy4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQ0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVzY3JldmVyICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQ0NAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorbXNnc3RyICJJc3RvIMOpIGEgY29tYmluYcOnw6NvIGRlIDIgY29tbWl0cy4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjQ4NSBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo1MjgKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjUzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYXBsaWNhciAkc2hhMS4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NTU5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIGVtZW5kYXIgbyBjb21taXQgZGVwb2lzIGRlIGFwYW5oYXIgY29tIHN1Y2Vzc28gJHNoYTEuLi4gIgorIiRyZXN0XG4iCisiRGV2ZS1zZSBwcm92YXZlbG1lbnRlIGEgdW1hIG1lbnNhZ2VtIGRlIGNvbW1pdCB2YXppYSBvdSBvIHByZS1jb21taXQgaG9vayAiCisiZmFsaG91LlxuIgorIlNlIG8gcHJlLWNvbW1pdCBob29rIGZhbGhvdSwgcG9kZSBwcmVjaXNhciBkZSByZXNvbHZlciBvIHByb2JsZW1hIGFudGUgZGUgIgorInBvZGVyXG4iCisicmVmb3JtdWxhciBhIG1lbnNhZ2VtIGRvIGNvbW1pdC4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjU3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIlBhcm91IGVtICRzaGExX2FiYnJldi4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NTg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJyRzcXVhc2hfc3R5bGUnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGVmZXR1YXIgJyRzcXVhc2hfc3R5bGUnIHNlbSB1bSBjb21taXQgYW50ZXJpb3IiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjYzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiQSBleGVjdXRhcjogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjYzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgIkZhbGhhIGFvIGV4ZWN1dGFyOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjQxCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImUgZmV6IGFsdGVyYcOnw7VlcyBhbyDDrW5kaWNlIGUvb3Ugw6Agw6Fydm9yZSBkZSB0cmFiYWxobyIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjQzCittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIlBvZGUgY29ycmlnaXIgbyBwcm9ibGVtYSBlIGV4ZWN1dGFyXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyMuIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2NTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJFeGVjdXRhZG8gY29tIHN1Y2Vzc286ICRyZXN0XG4iCisibWFzIGRlaXhvdSBhbHRlcmHDp8O1ZXMgbm8gw61uZGljZSBlL291IG5hIMOhcnZvcmUgZGUgdHJhYmFsaG9cbiIKKyJTdWJtZXRhIG91IGVzY29uZGEgYXMgYWx0ZXJhw6fDtWVzIGUgZXhlY3V0ZVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo2NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIkNvbWFuZG8gZGVzY29uaGVjaWRvOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NjY4Cittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIkNvcnJpamEtbyB1c2FuZG8gJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NzAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCAkaGVhZF9uYW1lLiIKK21zZ3N0ciAiJGhlYWRfbmFtZSByZWJhc2VhZG8gZSBhdHVhbGl6YWRvIGNvbSBzdWNlc3NvLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6NzUwCittc2dpZCAiQ291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHNhbHRhciBjb21hbmRvcyBwaWNrIGRlc25lY2Vzc8OhcmlvcyIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIFNIQS0xIGlzIG1pc3Npbmcgb3IgaXNuJ3QgYSBjb21taXQgaW4gdGhlIGZvbGxvd2luZyBsaW5lOlxuIgorIiAtICRsaW5lIgorbXNnc3RyICIiCisiQXZpc286IGZhbHRhIG8gU0hBLTEgb3UgYSBzZWd1aW50ZSBsaW5oYSBuw6NvIHRlbSB1bSBjb21taXQ6XG4iCisiIC0gJGxpbmUiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjk0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBjb21tYW5kIGlzbid0IHJlY29nbml6ZWQgaW4gdGhlIGZvbGxvd2luZyBsaW5lOlxuIgorIiAtICRsaW5lIgorbXNnc3RyICIiCisiQXZpc286IG8gY29tYW5kbyBuw6NvIMOpIHJlY29uaGVjaWRvIG5hIHNlZ3VpbnRlIGxpbmhhOlxuIgorIiAtICRsaW5lIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDo5ODAKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBkZXN0YWNhciBIRUFEIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMDE4Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOiIKK21zZ3N0ciAiIgorIkF2aXNvOiBhbGd1bnMgY29tbWl0cyBwb2RlbSB0ZXIgc2lkbyBkZXNjYXJ0YWRvcyBhY2lkZW50YWxtZW50ZS5cbiIKKyJDb21taXRzIGRlc2NhcnRhZG9zIChtYWlzIG5vdm8gcGFyYSBvIG1haXMgdmVsaG8pOiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTAyNgorbXNnaWQgIiIKKyJUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSBcImRyb3BcIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC5cbiIKKyJcbiIKKyJVc2UgJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2YgIgorIndhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci4iCittc2dzdHIgIiIKKyJQYXJhIGV2aXRhciBlc3RhIG1lbnNhZ2VtLCB1c2UgXCJkcm9wXCIgcGFyYSByZW1vdmVyIHVtIGNvbW1pdCAiCisiZXhwbGljaXRhbWVudGUuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyBwYXJhIG11ZGFyIG8gbsOtdmVsIGRlIGF2aXNvcy5cbiIKKyJPIGNvbXBvcnRhbWVudG9zIHBvc3PDrXZlaXMgc8OjbzogaWdub3JlLCB3YXJuLCBlcnJvci4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjEwMzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbnJlY29nbml6ZWQgc2V0dGluZyAkY2hlY2tfbGV2ZWwgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gIgorIklnbm9yaW5nLiIKK21zZ3N0ciAiIgorIkRlZmluacOnw6NvICRjaGVja19sZXZlbCBkZXNjb25oZWNpZGEgZGEgb3DDp8OjbyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gIgorIklnbm9yYWRvLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTA1NAorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuIgorbXNnc3RyICIiCisiUG9kZSBjb3Jyw60tbG8gY29tICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBlIGRlcG9pcyBleGVjdXRhciAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMDU1Cittc2dpZCAiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuIgorbXNnc3RyICJPdSBwb2RlIGFib3J0YXIgbyByZWJhc2UgY29tICdnaXQgcmViYXNlIC0tYWJvcnQnLiIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTA4MworbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHJlbW92ZXIgQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTA4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIlRlbSBhbHRlcmHDp8O1ZXMgcHJlcGFyYWRhcyBuYSDDoXJ2b3JlIGRlIHRyYWJhbGhvLlxuIgorIlNlIHRlbmNpb25hIGVzbWFnYXIgZXN0YXMgYWx0ZXJhw6fDtWVzXG4iCisibm8gY29tbWl0IGFudGVyaW9yLCBleGVjdXRlOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiU2UgdGVuY2lvbmEgcMO0LWxhcyBudW0gbm92byBjb21taXQsIGV4ZWN1dGU6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiRW0gYW1ib3Mgb3MgY2Fzb3MsIHF1YW5kbyBlc3RpdmVyIHByb250bywgY29udGludWUgY29tOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjExMDUKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiRXJybyBhbyB0ZW50YXIgZW5jb250cmFyIGEgaWRlbnRpZGFkZSBkbyBhdXRvciBwYXJhIGVtZW5kYXIgbyBjb21taXQiCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjExMTAKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIlRlbSBhbHRlcmHDp8O1ZXMgcG9yIHN1Ym1ldGVyIG5hIMOhcnZvcmUgZGUgdHJhYmFsaG8uIFN1Ym1ldGEtYXMgcHJpbWVpcm9cbiIKKyJlIGV4ZWN1dGUgJ2dpdCByZWJhc2UgLS1jb250aW51ZScgZGUgbm92by4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjExMTUgZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTExOQorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgc3VibWV0ZXIgYXMgYWx0ZXJhw6fDtWVzIHByZXBhcmFkYXMuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTQ3Cittc2dpZCAiIgorIlxuIgorIllvdSBhcmUgZWRpdGluZyB0aGUgdG9kbyBmaWxlIG9mIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLlxuIgorIlRvIGNvbnRpbnVlIHJlYmFzZSBhZnRlciBlZGl0aW5nLCBydW46XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRXN0w6EgYSBlZGl0YXIgbyBmaWNoZWlybyBkZSB0YXJlZmEgZGUgdW0gcmViYXNlIGludGVyYXRpdm8gZW0gY3Vyc28uXG4iCisiUGFyYSBjb250aW51YXIgbyByZWJhc2UgZGVwb2lzIGRlIGVkaXRhciwgZXhlY3V0ZTpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjExNTUgZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTMxMworbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGV4ZWN1dGFyIG8gZWRpdG9yIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGV4dHJhaXIgJHN3aXRjaF90byIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTE3MworbXNnaWQgIk5vIEhFQUQ/IgorbXNnc3RyICJTZW0gSEVBRD8iCisKKyM6IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjExNzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjcmlhciAkc3RhdGVfZGlyIHRlbXBvcsOhcmlvIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTc2Cittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBtYXJjYXIgY29tbyBpbnRlcmF0aXZvIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMTg2IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoOjExOTEKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYWxpemFyIGNvbW1pdHMgcmVlc2NyaXRvcyIKKworIzogZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2g6MTI5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBzb2JyZSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbWFuZG8pIgorbXNnc3RyWzFdICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIHNvYnJlICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tYW5kb3MpIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMjk2Cittc2dpZCAiIgorIlxuIgorIkhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJObyBlbnRhbnRvLCBzZSByZW1vdmVyIHR1ZG8sIG8gcmViYXNlIHNlcsOhIGFib3J0YWRvLlxuIgorIlxuIgorCisjOiBnaXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaDoxMzAzCittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIk5vdGUgcXVlIGNvbW1pdHMgdmF6aW9zIHPDo28gY29tZW50YWRvcyIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgInV0aWxpemHDp8OjbzogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIk7Do28gw6kgcG9zc8OtdmVsIG11ZGFyIGRlIGRpcmV0w7NyaW8gcGFyYSAkY2R1cCwgbyB0b3BvIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTkgZ2l0LXNoLXNldHVwLnNoOjIwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIG7Do28gcG9kZSBzZXIgdXNhZG8gc2VtIHVtYSDDoXJ2b3JlIGRlIHRyYWJhbGhvLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMAorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCByZWJhc2VhcjogdGVtIGFsdGVyYcOnw7VlcyBuw6NvIHByZXBhcmFkYXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIzCittc2dpZCAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCByZWVzY3JldmVyIHJhbW9zOiB0ZW0gYWx0ZXJhw6fDtWVzIG7Do28gcHJlcGFyYWRhcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjYKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHB1eGFyIGNvbSByZWJhc2U6IHRlbSBhbHRlcmHDp8O1ZXMgbsOjbyBwcmVwYXJhZGFzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyOQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBlZmV0dWFyICRhY3Rpb246IHRlbSBhbHRlcmHDp8O1ZXMgbsOjbyBwcmVwYXJhZGFzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MgorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIHJlYmFzZWFyOiBvIMOtbmRpY2UgY29udMOpbSBhbHRlcmHDp8O1ZXMgbsOjbyBzdWJtZXRpZGFzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NQorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgcHV4YXIgY29tIHJlYmFzZTogbyDDrW5kaWNlIGNvbnTDqW0gYWx0ZXJhw6fDtWVzIG7Do28gc3VibWV0aWRhcy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciAkYWN0aW9uOiBvIMOtbmRpY2UgY29udMOpbSBhbHRlcmHDp8O1ZXMgbsOjbyBzdWJtZXRpZGFzLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI1MgorbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiQWzDqW0gZGlzc28sIG8gw61uZGljZSBjb250w6ltIGFsdGVyYcOnw7VlcyBuw6NvIHN1Ym1ldGlkYXMuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzcyCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAiIgorIlByZWNpc2EgZGUgZXhlY3V0YXIgZXN0ZSBjb21hbmRvIGEgcGFydGlyIGRvIHRvcG8gZGEgw6Fydm9yZSBkZSB0cmFiYWxoby4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzcKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZGV0ZXJtaW5hciBvIGNhbWluaG8gYWJzb2x1dG8gZG8gZGlyZXTDs3JpbyBnaXQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTJzICUxMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjM5Cittc2dpZCAic3RhZ2VkIgorbXNnc3RyICJwcmVwYXJhZG8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjM5Cittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgIm7Do28gcHJlcGFyYWRvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI4OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxMworbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAiYmluw6FyaW8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzUxCittc2dpZCAibm90aGluZyIKK21zZ3N0ciAibmFkYSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozNDgKK21zZ2lkICJ1bmNoYW5nZWQiCittc2dzdHIgIm7Do28gYWx0ZXJhZG8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjQ0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImFkZGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAiYWRkZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiJWQgY2FtaW5obyBhZGljaW9uYXJcbiIKK21zZ3N0clsxXSAiJWQgY2FtaW5ob3MgYWRpY2lvbmFkb3NcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiJWQgY2FtaW5obyBhdHVhbGl6YWRvXG4iCittc2dzdHJbMV0gIiVkIGNhbWluaG9zIGF0dWFsaXphZG9zXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjUwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiJWQgY2FtaW5obyByZXZlcnRpZG9cbiIKK21zZ3N0clsxXSAiJWQgY2FtaW5ob3MgcmV2ZXJ0aWRvc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJ0b3VjaGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidG91Y2hlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICIlZCBjYW1pbmhvIGFmZXRhZG9cbiIKK21zZ3N0clsxXSAiJWQgY2FtaW5ob3MgYWZldGFkb3NcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NjIKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIkF0dWFsaXphciIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzQKK21zZ2lkICJSZXZlcnQiCittc2dzdHIgIlJldmVydGVyIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY5NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIgorbXNnc3RyICJub3RhOiAlcyDDqSBhZ29yYSBuw6NvIGNvbnRyb2xhZG8uXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NzA4Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAiQWRpY2lvbmFyIG7Do28gY29udHJvbGFkb3MiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NzE0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICJOZW5odW0gZmljaGVpcm9zIG7Do28gY29udHJvbGFkby5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDMwCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNlIG8gcGF0Y2ggc2UgYXBsaWNhciBjb3JyZXRhbWVudGUsIG8gZXhjZXJ0byBlZGl0YWRvIHNlcsOhIG1hcmNhZG9cbiIKKyJjb21vIHByZXBhcmFkbyBpbWVkaWF0YW1lbnRlLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDMzCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFzaGluZy4iCittc2dzdHIgIiIKKyJTZSBvIHBhdGNoIHNlIGFwbGljYXIgY29ycmV0YW1lbnRlLCBvIGV4Y2VydG8gZWRpdGFkbyBzZXLDoSBtYXJjYWRvXG4iCisiY29tbyBlc2NvbmRpZG8gaW1lZGlhdGFtZW50ZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzNgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorIlNlIG8gcGF0Y2ggc2UgYXBsaWNhciBjb3JyZXRhbWVudGUsIG8gZXhjZXJ0byBlZGl0YWRvIHNlcsOhIG1hcmNhZG9cbiIKKyJjb21vIG7Do28gcHJlcGFyYWRvIGltZWRpYXRhbWVudGUuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwMzkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDQ4Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBhcHBseWluZy4iCittc2dzdHIgIiIKKyJTZSBvIHBhdGNoIHNlIGFwbGljYXIgY29ycmV0YW1lbnRlLCBvIGV4Y2VydG8gZWRpdGFkbyBzZXLDoSBtYXJjYWRvXG4iCisicGFyYSBzZXIgYXBsaWNhZG8gaW1lZGlhdGFtZW50ZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA0MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNDUKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICIiCisiU2UgbyBwYXRjaCBzZSBhcGxpY2FyIGNvcnJldGFtZW50ZSwgbyBleGNlcnRvIGVkaXRhZG8gc2Vyw6EgbWFyY2Fkb1xuIgorInBhcmEgc2VyIGRlc2NhcnRhZG8gaW1lZGlhdGFtZW50ZS4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIiIKKyJuw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBmaWNoZWlybyBkZSBlZGnDp8OjbyBkbyBleGNlcnRvIHBhcmEgZXNjcml0YTogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICJNb2RvIGRlIGVkacOnw6NvIG1hbnVhbCBkZSBleGNlcnRvIC0tIHZlciBndWlhIHLDoXBpZG8gYWJhaXhvIG5vIGZpbmFsLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyJQYXJhIHJlbW92ZXIgbGluaGFzICclcycsIHRvcm5lLWFzIGxpbmhhcyAnICcgKGNvbnRleHRvKS5cbiIKKyJQYXJhIHJlbW92ZXIgbGluaGFzICclcycsIGVsaW1pbmUtYXMuXG4iCisiTGluaGFzIGNvbWXDp2FkYXMgY29tICVzIHNlcsOjbyByZW1vdmlkYXMuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3MworbXNnaWQgIiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKK21zZ3N0ciAiIgorIlNlIG7Do28gc2UgYXBsaWNhciBjb3JyZXRhbWVudGUsIHNlci1saGUtw6EgZGFkYSBvcG9ydHVuaWRhZGUgcGFyYSBlZGl0YXJcbiIKKyJkZSBub3ZvLiAgU2UgdG9kYXMgYXMgbGluaGFzIGRvIGV4Y2VydG8gZm9yZW0gcmVtb3ZpZGFzLCBhIGVkacOnw6NvIMOpXG4iCisiYWJvcnRhZGEgZSBvIGV4Y2V0byDDqSBkZWl4YWRvIGluYWx0ZXJhZG8uXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA4NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIiIKKyJuw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBmaWNoZWlybyBkZSBlZGnDp8OjbyBkbyBleGNlcnRvIHBhcmEgbGVpdHVyYTogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTc4Cittc2dpZCAiIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgorbXNnc3RyICIiCisiTyBleGNlcnRvIHF1ZSBlZGl0b3UgbsOjbyBhcGxpY2EuXG4iCisiRWRpdGUgZGUgbm92byAocmVzcG9uZGVyIFwibsOjb1wiIGRlc2NhcnRhISkgW3kvbl0/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTg3Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIHByZXBhcmFyIGVzdGUgZXhjZXJ0b1xuIgorIm4gLSBuw6NvIHByZXBhcmFyIGVzdGUgZXhjZXJ0b1xuIgorInEgLSBzYWlyOyBuw6NvIHByZXBhcmFyIGVzdGUgZXhjZXJ0byBuZW0gb3MgcmVzdGFudGVzXG4iCisiYSAtIHByZXBhcmFyIGVzdGUgZXhjZXJ0byBlIHRvZG9zIG9zIGV4Y2VydG9zIHNlZ3VpbnRlcyBubyBmaWNoZWlyb1xuIgorImQgLSBuw6NvIHByZXBhcmFyIGVzdGUgZXhjZXJ0byBuZW0gb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExOTMKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZXNjb25kZXIgZXN0ZSBleGNlcnRvXG4iCisibiAtIG7Do28gZXNjb25kZXIgZXN0ZSBleGNlcnRvXG4iCisicSAtIHNhaXI7IG7Do28gZXNjb25kZXIgZXN0ZSBleGNlcnRvIG5lbSBvcyByZXN0YW50ZXNcbiIKKyJhIC0gZXNjb25kZXIgZXN0ZSBleGNlcnRvIGUgdG9kb3Mgb3Mgc2VndWludGVzIG5vIGZpY2hlaXJvXG4iCisiZCAtIG7Do28gZXNjb25kZXIgZXN0ZSBleGNlcnRvIG5lbSBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE5OQorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZGVzcHJlcGFyYXIgZXN0ZSBleGNlcnRvXG4iCisibiAtIG7Do28gZGVzcHJlcGFyYXIgZXN0ZSBleGNlcnRvXG4iCisicSAtIHNhaXI7IG7Do28gZGVzcHJlcGFyYXIgZXN0ZSBleGNlcnRvIG5lbSBvdXRyb3MgcmVzdGFudGVzXG4iCisiYSAtIGRlc3ByZXBhcmFyIGVzdGUgZXhjZXJ0byBlIHRvZG9zIG9zIGV4Y2VydG9zIHNlZ3VpbnRlcyBubyBmaWNoZWlyb1xuIgorImQgLSBuw6NvIGRlc3ByZXBhcmFyIGVzdGUgZXhjZXJ0byBuZW0gb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMDUKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gYXBsaWNhciBlc3RlIGV4Y2VydG8gYW8gw61uZGljZVxuIgorIm4gLSBuw6NvIGFwbGljYXIgZXN0ZSBleGNlcnRvIGFvIMOtbmRpY2VcbiIKKyJxIC0gc2FpcjsgbsOjbyBhcGxpY2FyIGVzdGUgZXhjZXJ0byBuZW0gb3MgcmVzdGFudGVzXG4iCisiYSAtIGFwbGljYXIgZXN0ZSBleGNlcnRvIGUgdG9kb3Mgb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvXG4iCisiZCAtIG7Do28gYXBsaWNhciBlc3RlIGV4Y2VydG8gbmVtIG9zIGV4Y2VydG9zIHNlZ3VpbnRlcyBubyBmaWNoZWlybyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjExCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZGVzY2FydGFyIGVzdGUgZXhjZXJ0byBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvXG4iCisibiAtIG7Do28gZGVzY2FydGFyIGVzdGUgZXhjZXJ0byBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvXG4iCisicSAtIHNhaXI7IG7Do28gZGVzY2FydGFyIGVzdGUgZXhjZXJ0byBuZW0gb3MgcmVzdGFudGVzXG4iCisiYSAtIGRlc2NhcnRhciBlc3RlIGV4Y2VydG8gZSB0b2RvcyBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm9cbiIKKyJkIC0gbsOjbyBkZXNjYXJ0YXIgZXN0ZSBleGNlcnRvIG5lbSBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIxNworbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZGVzY2FydGFyIGVzdGUgZXhjZXJ0byBkbyDDrW5kaWNlIGUgZGEgw6Fydm9yZSBkZSB0cmFiYWxob1xuIgorIm4gLSBuw6NvIGRlc2NhcnRhciBlc3RlIGV4Y2VydG8gZG8gw61uZGljZSBuZW0gZGEgw6Fydm9yZSBkZSB0cmFiYWxob1xuIgorInEgLSBzYWlyOyBuw6NvIGRlc2NhcnRhciBlc3RlIGV4Y2VydG8gbmVtIG5lbmh1bSBkb3MgcmVzdGFudGVzXG4iCisiYSAtIGRlc2NhcnRhciBlc3RlIGV4Y2VydG8gZSB0b2RvcyBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm9cbiIKKyJkIC0gbsOjbyBkZXNjYXJ0YXIgZXN0ZSBleGNlcnRvIG5lbSBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIyMworbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwbGljYXIgZXN0ZSBleGNlcnRvIGFvIMOtbmRpY2UgZSDDoCDDoXJ2b3JlIGRlIHRyYWJhbGhvXG4iCisibiAtIG7Do28gYXBsaWNhciBlc3RlIGV4Y2VydG8gYW8gw61uZGljZSBlIMOgIMOhcnZvcmUgZGUgdHJhYmFsaG9cbiIKKyJxIC0gc2FpcjsgbsOjbyBhcGxpY2FyIGVzdGUgZXhjZXJ0byBvdSByZXN0YW50ZXNcbiIKKyJhIC0gYXBsaWNhciBlc3RlIGV4Y2VydG8gZSB0b2RvcyBvcyBleGNlcnRvcyBzZWd1aW50ZXMgbm8gZmljaGVpcm9cbiIKKyJkIC0gbsOjbyBhcGxpY2FyIGVzdGUgZXhjZXJ0byBuZW0gb3MgZXhjZXJ0b3Mgc2VndWludGVzIG5vIGZpY2hlaXJvIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMzIKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0gc2VsZWNpb25hciB1bSBleGNlcnRvIHBhcmEgaXJcbiIKKyIvIC0gcHJvY3VyYXIgcG9yIHVtIGV4Y2VydG8gY29ycmVzcG9uZGVuZG8gw6AgcmVnZXggZGFkYVxuIgorImogLSBkZWl4YXIgZXN0ZSBleGNlcnRvIGluZGVjaWRpZG8sIHZlciBleGNlcnRvIHNlZ3VpbnRlIGluZGVjaWRpZG9cbiIKKyJKIC0gZGVpeGFyIGVzdGUgZXhjZXJ0byBpbmRlY2lkaWRvLCB2ZXIgZXhjZXJ0byBzZWd1aW50ZVxuIgorImsgLSBkZWl4YXIgZXN0ZSBleGNlcnRvIGluZGVjaWRpZG8sIHZlciBleGNlcnRvIGFudGVyaW9yIGluZGVjaWRpZG9cbiIKKyJLIC0gZGVpeGFyIGVzdGUgZXhjZXJ0byBpbmRlY2lkaWRvLCB2ZXIgZXhjZXJ0byBhbnRlcmlvclxuIgorInMgLSBkaXZpZGlyIG8gZXhjZXJ0byBhdHVhbCBlbSBleGNlcnRvcyBtYWlzIHBlcXVlbm9zXG4iCisiZSAtIGVkaXRhciBtYW51YWxtZW50ZSBvIGV4Y2VydG8gYXR1YWxcbiIKKyI/IC0gaW1wcmltaXIgYWp1ZGFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYzCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghXG4iCittc2dzdHIgIk9zIGV4Y2VydG9zIHNlbGVjaW9uYWRvcyBuw6NvIGFwbGljYW0gYW8gw61uZGljZSFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjY0Cittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgIkFwbGljw6EtbG9zIMOgIMOhcnZvcmUgZGUgdHJhYmFsaG8gbWVzbW8gYXNzaW0/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjY3Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAiTsOjbyBmb2kgYXBsaWNhZG8gbmFkYS5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjc4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICJpZ25vcmFkbyBuw6NvIGludGVncmFkbzogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg3Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiQXBlbmFzIGZpY2hlaXJvcyBiaW7DoXJpb3MgYWx0ZXJhZG9zLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODkKK21zZ2lkICJObyBjaGFuZ2VzLlxuIgorbXNnc3RyICJTZW0gYWx0ZXJhw6fDtWVzLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTcKK21zZ2lkICJQYXRjaCB1cGRhdGUiCittc2dzdHIgIkF0dWFsaXphciBwYXRjaCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQ5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIlByZXBhcmFyIGFsdGVyYcOnw6NvIGRlIG1vZG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzUwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIlByZXBhcmFyIGVsaW1pbmHDp8OjbyBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIlByZXBhcmFyIGVzdGUgZXhjZXJ0byBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiRXNjb25kZXIgYWx0ZXJhw6fDo28gZGUgbW9kbyBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggZGVsZXRpb24gW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiRXNjb25kZXIgZWxpbWluYcOnw6NvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiRXNjb25kZXIgZXN0ZSBleGNlcnRvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIk7Do28gcHJlcGFyYXIgYWx0ZXJhw6fDo28gZGUgbW9kbyBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJOw6NvIHByZXBhcmFyIGVsaW1pbmHDp8OjbyBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiTsOjbyBwcmVwYXJhciBlc3RlIGV4Y2VydG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIkFwbGljYXIgYWx0ZXJhw6fDo28gZGUgbW9kbyBhbyDDrW5kaWNlIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJBcGxpY2FyIGVsaW1pbmHDp8OjbyBhbyDDrW5kaWNlIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiQXBsaWNhciBlc3RlIGV4Y2VydG8gYW8gw61uZGljZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIkRlc2NhcnRhciBhbHRlcmHDp8OjbyBkZSBtb2RvIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICJEZXNjYXJ0YXIgZWxpbWluYcOnw6NvIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiRGVzY2FydGFyIGVzdGUgZXhjZXJ0byBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIiIKKyJEZXNjYXJ0YXIgYWx0ZXJhw6fDo28gZGUgbW9kbyBkbyDDrW5kaWNlIGUgZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBbeSxuLHEsYSxkLC8iCisiJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiIgorIkRlc2NhcnRhciBlbGltaW5hw6fDo28gZG8gw61uZGljZSBlIGRhIMOhcnZvcmUgZGUgdHJhYmFsaG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQsLyVzLD9dPyAiCittc2dzdHIgIiIKKyJEZXNjYXJ0YXIgZXN0ZSBleGNlcnRvIGRvIMOtbmRpY2UgZSBkYSDDoXJ2b3JlIGRlIHRyYWJhbGhvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwbGljYXIgYWx0ZXJhw6fDo28gZGUgbW9kbyBhbyDDrW5kaWNlIGUgw6Agw6Fydm9yZSBkZSB0cmFiYWxobyBbeSxuLHEsYSxkLC8iCisiJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkLC8lcyw/XT8gIgorbXNnc3RyICIiCisiQXBsaWNhciBlbGltaW5hw6fDo28gYW8gw61uZGljZSBlIMOgIMOhcnZvcmUgZGUgdHJhYmFsaG8gW3ksbixxLGEsZCwvJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzgxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCwvJXMsP10/ICIKK21zZ3N0ciAiIgorIkFwbGljYXIgZXN0ZSBleGNlcnRvIGFvIMOtbmRpY2UgZSDDoCDDoXJ2b3JlIGRlIHRyYWJhbGhvIFt5LG4scSxhLGQsLyVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ4NAorbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICJpciBwYXJhIHF1ZSBleGNlcnRvICg8cmV0PiBwYXJhIHZlciBtYWlzKT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0ODYKK21zZ2lkICJnbyB0byB3aGljaCBodW5rPyAiCittc2dzdHIgImlyIHBhcmEgcXVlIGV4Y2VydG8/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDk1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIk7Dum1lcm8gaW52w6FsaWRvOiAnJXMnXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTUwMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICJMYW1lbnRvLCBhcGVuYXMgJWQgZXhjZXJ0byBkaXNwb27DrXZlbC5cbiIKK21zZ3N0clsxXSAiTGFtZW50bywgYXBlbmFzICVkIGV4Y2VydG9zIGRpc3BvbsOtdmVpcy5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTI2Cittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICJwcm9jdXJhciBwb3IgcmVnZXg/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTM5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICJSZWdleHAgZGUgcGVzcXVpc2EgbWFsZm9ybWFkYSAlczogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTQ5Cittc2dpZCAiTm8gaHVuayBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuXG4iCittc2dzdHIgIk5lbmh1bSBleGNlcnRvIGNvcnJlc3BvbmRlIGFvIHBhZHLDo28gZm9ybmVjaWRvXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU2MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODMKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgIk5lbmh1bSBleGNlcnRvIGFudGVyaW9yXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODkKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAiTmVuaHVtIGV4Y2VydG8gc2VndWludGVcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVuay5cbiIKK21zZ2lkX3BsdXJhbCAiU3BsaXQgaW50byAlZCBodW5rcy5cbiIKK21zZ3N0clswXSAiRGl2aWRpciBlbSAlZCBleGNlcnRvLlxuIgorbXNnc3RyWzFdICJEaXZpZGlyIGVtICVkIGV4Y2VydG9zLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NDkKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAiUmV2ZXIgZGlmZiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBkbyBub3QgdHJhbnNsYXRlIHRoZSBjb21tYW5kIG5hbWVzCisjLiAnc3RhdHVzJywgJ3VwZGF0ZScsICdyZXZlcnQnLCBldGMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjgKK21zZ2lkICIiCisic3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzXG4iCisidXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlc1xuIgorInJldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvblxuIgorInBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHlcbiIKKyJkaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXhcbiIKKyJhZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiAiCisiY2hhbmdlc1xuIgorbXNnc3RyICIiCisic3RhdHVzICAgICAgICAtIG1vc3RyYXIgY2FtaW5ob3MgY29tIGFsdGVyYcOnw7Vlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGljaW9uYXIgbyBlc3RhZG8gZGEgw6Fydm9yZSBkZSB0cmFiYWxobyBhbyBjb25qdW50byBkZSAiCisiYWx0ZXJhw6fDtWVzIHByZXBhcmFkYXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0ZXIgY29uanVudG8gZGUgYWx0ZXJhw6fDtWVzIHByZXBhcmFkYXMgZGUgdm9sdGEgw6AgdmVyc8OjbyAiCisiZGUgSEVBRFxuIgorInBhdGNoICAgICAgICAgLSBlc2NvbGhlciBleGNlcnRvcyBlIGF0dWFsaXphciBzZWxldGl2YW1lbnRlXG4iCisiZGlmZiAgICAgICAgICAtIHZlciBkaWZmIGVudHJlIEhFQUQgZSDDrW5kaWNlXG4iCisiYWRkIHVudHJhY2tlZCAtIGFkaWNpb25hciBjb250ZcO6ZG9zIGRlIGZpY2hlaXJvcyBuw6NvIGNvbnRyb2xhZG9zIGFvIGNvbmp1bnRvICIKKyJkZSBhbHRlcmHDp8O1ZXMgcHJlcGFyYWRhc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjkwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzAwCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzEwCittc2dpZCAibWlzc2luZyAtLSIKK21zZ3N0ciAiZmFsdGEgLS0iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcwNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgIk1vZGUgZGUgLS1wYXRjaCBkZXNjb25oZWNpZG86ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MTIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAiYXJndW1lbnRvIGludsOhbGlkbyAlcywgZXNwZXJhdmEtc2UgLS0iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTIxCittc2dpZCAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIgorbXNnc3RyICJhIHpvbmEgbG9jYWwgZGlmZXJlIGRlIEdNVCBwb3IgdW0gaW50ZXJ2YWxvIG7Do28gYXJyZW5kYWRvIGFvIG1pbnV0b1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEyOCBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNAorbXNnaWQgImxvY2FsIHRpbWUgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyNCBob3Vyc1xuIgorbXNnc3RyICJhIGRpZmVyZW7Dp2EgZGUgdGVtcG8gbG9jYWwgw6kgbWFpb3Igb3UgaWd1YWwgYSAyNCBob3Jhc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwOAorbXNnaWQgInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIKK21zZ3N0ciAibyBlZGl0b3Igc2FpdSBjb20gZXJyb3MsIGFib3J0YXIgdHVkbyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoyODIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiIKK21zZ3N0ciAiJyVzJyBjb250w6ltIHVtYSB2ZXJzw6NvIGludGVybcOpZGlhIGRvIGUtbWFpbCBxdWUgZXN0ZXZlIGEgY29tcG9yLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjI4NworIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMuZmluYWwnIGNvbnRhaW5zIHRoZSBjb21wb3NlZCBlbWFpbC5cbiIKK21zZ3N0ciAiJyVzLmZpbmFsJyBjb250w6ltIG8gZS1tYWlsIGNvbXBvc3RvLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMwNQorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXTDrXZlbCBjb20gb3V0cmFzIG9ww6fDtWVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MzY4IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjIzCittc2dpZCAiQ2Fubm90IHJ1biBnaXQgZm9ybWF0LXBhdGNoIGZyb20gb3V0c2lkZSBhIHJlcG9zaXRvcnlcbiIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZXhlY3V0YXIgZ2l0IGZvcm1hdC1wYXRjaCBmb3JhIGRlIHVtIHJlcG9zaXTDs3Jpb1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQzNworIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tc3VwcHJlc3MtY2MgZmllbGQ6ICclcydcbiIKK21zZ3N0ciAiQ2FtcG8gZGUgLS1zdXBwcmVzcy1jYyBkZXNjb25oZWNpZG86ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0NjYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLWNvbmZpcm0gc2V0dGluZzogJyVzJ1xuIgorbXNnc3RyICJEZWZpbmlkacOnw6NvIC0tY29uZmlybSBkZXNjb25oZWNpZGE6ICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0OTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgYWxpYXMgd2l0aCBxdW90ZXMgaXMgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXZpc286IHNlbmRtYWlsIGFsaWFzIGNvbSBhc3BhcyBuw6NvIMOpIHN1cG9ydGFkbzogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYDppbmNsdWRlOmAgbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXZpc286IGA6aW5jbHVkZTpgIG7Do28gc3Vwb3J0YWRvOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUwMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiYXZpc286IGAvZmlsZWAgb3UgcmVkaXJlw6fDo28gYHxwaXBlYCBuw6NvIHN1cG9ydGFkbzogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAiYXZpc286IGxpbmhhIHNlbmRtYWlsIG7Do28gw6kgcmVjb25oZWNpZGE6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTg5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzXG4iCisidG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi5cbiIKKyJcbiIKKyIgICAgKiBTYXlpbmcgXCIuLyVzXCIgaWYgeW91IG1lYW4gYSBmaWxlOyBvclxuIgorIiAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS5cbiIKK21zZ3N0ciAiIgorIk8gZmljaGVpcm8gJyVzJyBleGlzdGUgbWFzIHRhbWLDqW0gcG9kZSBzZXIgdW0gaW50ZXJ2YWxvIGRlIGNvbW1pdHNcbiIKKyJwYXJhIG9zIHF1YWlzIHByb2R1emlyIHBhdGNoZXMuICBQb3IgZmF2b3IgZGVzYW1iaWd1ZS4uLlxuIgorIlxuIgorIiAgICAqIERpemVuZG8gXCIuLyVzXCIgc2UgcHJldGVuZGUgdW0gZmljaGVpcm87IG91XG4iCisiICAgICogUGFzc2FuZG8gYSBvcMOnw6NvIC0tZm9ybWF0LXBhdGNoIHNlIHByZXRlbmRlIHVtIGludGVydmFsbyBkZSBjb21taXRzLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjYxMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiCittc2dzdHIgIkZhbGhhIGFvIGFicmlyIGRpcmV0w7NyaW8gJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjYzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisiYXZpc286IG5lbmh1bSBwYXRjaCBmb2kgZW52aWFkb1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY0NQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOZW5odW0gZmljaGVpcm8gcGF0Y2ggZXNwZWNpZmljYWRvIVxuIgorIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJObyBzdWJqZWN0IGxpbmUgaW4gJXM/IgorbXNnc3RyICJOZW5odW0gbGluaGEgZGUgYXNzdW50byBlbSAlcz8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIGZvciB3cml0aW5nICVzOiAlcyIKK21zZ3N0ciAiRmFsaGEgYW8gYWJyaXIgJXMgcGFyYSBlc2NyaXRhOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2NzgKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyJMaW5oYXMgY29tZcOnYWRhcyBjb20gXCJHSVQ6XCIgc2Vyw6NvIHJlbW92aWRvcy5cbiIKKyJDb25zaWRlcmUgaW5jbHVpciB1bSBkaWZmc3RhdCBnZXJhbCBvdSB0YWJlbGEgZGUgY29udGXDumRvc1xuIgorImRvIHBhdGNoIHF1ZSBlc3TDoSBhIGVzY3JldmVyLlxuIgorIlxuIgorIkFwYWd1ZSBvIGNvbnRlw7pkbyBkbyBjb3JwbyBzZSBuw6NvIGRlc2VqYSBlbnZpYXIgdW0gc3Vtw6FyaW8uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzAxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzLmZpbmFsOiAlcyIKK21zZ3N0ciAiRmFsaGEgYW8gYWJyaXIgJXMuZmluYWw6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlczogJXMiCittc2dzdHIgIkZhbGhhIGFvIGFicmlyICVzOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICJUby9DYy9CY2MgZmllbGRzIGFyZSBub3QgaW50ZXJwcmV0ZWQgeWV0LCB0aGV5IGhhdmUgYmVlbiBpZ25vcmVkXG4iCittc2dzdHIgIk9zIGNhbXBvcyBUby9DYy9CY2MgbsOjbyBzw6NvIGludGVycHJldGFkb3MgYWluZGEsIGZvcmFtIGlnbm9yYWRvc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc0OAorbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIk8gZS1tYWlsIGRlIHN1bcOhcmlvIGVzdMOhIHZhemlvLCBzYWx0w6EtbG8gw6AgZnJlbnRlXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzgwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICJUZW0gYSBjZXJ0ZXphIHF1ZSBxdWVyIHVzYXIgPCVzPiBbeS9OXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgwOQorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyBmaWNoZWlyb3Mgc8OjbyA4Yml0LCBtYXMgbsOjbyBkZWNsYXJhbSB1bSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4MTQKK21zZ2lkICJXaGljaCA4Yml0IGVuY29kaW5nIHNob3VsZCBJIGRlY2xhcmUgW1VURi04XT8gIgorbXNnc3RyICJRdWUgY29kaWZpY2HDp8OjbyA4Yml0IHNlIGRldmUgZGVjbGFyYXIgW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgyMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIlJlY3VzYXIgZW52aW8gcG9ycXVlIG8gcGF0Y2hcbiIKKyJcdCVzXG4iCisidGVtIG8gYXNzdW50byBtb2RlbG8gJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzc2UgLS1mb3JjZSBzZSBwcmV0ZW5kZSBtZXNtbyAiCisiZW52aWFyLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg0MQorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgIlBhcmEgcXVlbSBkZXZlbSBzZXIgZW52aWFkb3Mgb3MgZS1tYWlscyAoc2UgYWxndcOpbSk/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg1OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRlIHBhcmEgc2kgcHLDs3ByaW9cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo4NzEKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICIiCisiTWVzc2FnZS1JRCBwYXJhIHNlciB1c2FkbyBjb21vIEluLVJlcGx5LVRvIHBhcmEgbyBwcmltZWlybyBlLW1haWwgKHNlICIKKyJhbGd1bSk/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MjEgZ2l0LXNlbmQtZW1haWwucGVybDo5MjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICJlcnJvOiBuw6NvIMOpIHBvc3PDrXZlbCBleHRyYWlyIHVtIGVuZGVyZcOnbyB2w6FsaWRvIGRlOiAlc1xuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTMzCittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICJPIHF1ZSBmYXplciBjb20gZXN0ZSBlbmRlcmXDp28/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJPIGNhbWluaG8gZGUgQ0EgJyVzJyBuw6NvIGV4aXN0ZSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzA5Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAgICBBIGxpc3RhIGRlIENjIGFjaW1hIGZvaSBleHBhbmRpZGEgY29tIGVuZGVyZcOnb3NcbiIKKyIgICAgYWRpY2lvbmFpcyBlbmNvbnRyYWRvcyBuYSBtZW5zYWdlbSBkZSBjb21taXQgZG8gcGF0Y2guXG4iCisiICAgIFBvciBvbWlzc8OjbyBzZW5kLWVtYWlsIHBlcmd1bnRhIGFudGVzIGRlIGVudmlhciBxdWFuZG9cbiIKKyIgICAgaXN0byBvY29ycmUuIEVzdGUgY29tcG9ydGFtZW50byDDqSBjb250cm9sYWRvIHBlbGEgZGVmaW5pw6fDo29cbiIKKyIgICAgZGUgY29uZmlndXJhw6fDo28gc2VuZGVtYWlsLmNvbmZpcm0uXG4iCisiXG4iCisiICAgIFBhcmEgaW5mb3JtYcOnw6NvIGFkaWNpb25hbCwgZXhlY3V0ZSAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgUGFyYSByZXRlciBvIGNvbXBvcnRhbWVudG8gYXR1YWwsIG1hcyBzdXByaW1pciBlc3RhIG1lbnNhZ2VtLFxuIgorIiAgICBleGVjdXRlICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbcV0gW2FdIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzMjQKK21zZ2lkICJTZW5kIHRoaXMgZW1haWw/IChbeV1lc3xbbl1vfFtxXXVpdHxbYV1sbCk6ICIKK21zZ3N0ciAiRW52aWFyIGVzdGUgZS1tYWlsPyAoW3ldZXN8W25db3xbcV11aXR8W2FdbGwpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTMyNworbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAiw4kgbmVjZXNzw6FyaWEgcmVzcG9zdGEgc2UgZGVzZWphIGVudmlhciBlc3RlIGUtbWFpbCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzUzCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAiTyBzZXJ2aWRvciBTTVRQIG5lY2Vzc8OhcmlvIG7Do28gZXN0w6EgZGVmaW5pZG8gY29ycmV0YW1lbnRlLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNUQVJUVExTISAlcyIKK21zZ3N0ciAiTyBzZXJ2aWRvciBuw6NvIHN1cG9ydGEgU1RBUlRUTFMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MDMKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgaW5pY2lhbGl6YXIgU01UUCBkZXZpZGFtZW50ZS4gVmVyaWZpcXVlIGEgY29uZmlndXJhw6fDo28gZSB1c2UgIgorIi0tc210cC1kZWJ1Zy4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gc2VuZCAlc1xuIgorbXNnc3RyICJGYWxoYSBhbyBlbnZpYXIgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDI0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRyeS1TZW50ICVzXG4iCittc2dzdHIgIlNpbXVsYWRvLUVudmlhZG8gJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDI0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAiRW52aWFkbyAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0MjYKK21zZ2lkICJEcnktT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJTaW11bGFkby1PSy4gTyByZWdpc3RvIGRpejpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDI2Cittc2dpZCAiT0suIExvZyBzYXlzOlxuIgorbXNnc3RyICJPSy4gTyByZWdpc3RvIGRpejpcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDM4Cittc2dpZCAiUmVzdWx0OiAiCittc2dzdHIgIlJlc3VsdGFkbzogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NDEKK21zZ2lkICJSZXN1bHQ6IE9LXG4iCittc2dzdHIgIlJlc3VsdGFkbzogT0tcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDU0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgbyBmaWNoZWlybyAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTAxIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgQWRpY2lvbmFyIGNjOiAlcyBkYSBsaW5oYSAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUwNworIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgQWRpY2lvbmFyIHBhcmE6ICVzIGRhIGxpbmhhICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTU1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobm9uLW1ib3gpIEFkaWNpb25hciBjYzogJXMgZGEgbGluaGEgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKGJvZHkpIEFkaWNpb25hciBjYzogJXMgZGEgbGluaGEgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIgorbXNnc3RyICIoJXMpIE7Do28gZm9pIHBvc3PDrXZlbCBleGVjdXRhciAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2ODMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSBBZGljaW9uYXIgJXM6ICVzIGRlOiAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY4NworIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykgZmFsaGEgYW8gZmVjaGFyIHBpcGUgcGFyYSAnJXMnIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3MTQKK21zZ2lkICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiCittc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGVudmlhciBtZW5zYWdlbSBjb21vIDdiaXQiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcyMgorbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgImNvZGlmaWNhw6fDo28gZGUgdHJhbnNmZXLDqm5jaWEgaW52w6FsaWRhIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NDEgZ2l0LXNlbmQtZW1haWwucGVybDoxNzkyIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTgwMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlczogJXNcbiIKK21zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgJXM6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlczogbyBwYXRjaCBjb250w6ltIHVtYSBsaW5oYSBtYWlzIGxvbmdhIHF1ZSA5OTggY2FyYXRlcmVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIlNhbHRhciAlcyBjb20gc3VmaXhvIGRlIGJhY2t1cCAnJXMnLlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgIlt5fE5dIiBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTc2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gc2VuZCAlcz8gW3l8Tl06ICIKK21zZ3N0ciAiRGVzZWphIG1lc21vIGVudmlhciAlcz8gW3l8Tl06ICIKKworI34gbXNnaWQgIiIKKyN+ICJUaGVyZSBpcyBub3RoaW5nIHRvIGV4Y2x1ZGUgZnJvbSBieSA6KGV4Y2x1ZGUpIHBhdHRlcm5zLlxuIgorI34gIlBlcmhhcHMgeW91IGZvcmdvdCB0byBhZGQgZWl0aGVyICc6Lycgb3IgJy4nID8iCisjfiBtc2dzdHIgIiIKKyN+ICJOw6NvIGjDoSBuYWRhIHBhcmEgZXhjbHVpciBkZSBhY29yZG8gY29tIG8gcGFkcsOjbyA6KGV4Y2x1aXIpLlxuIgorI34gIlRhbHZleiBzZSB0ZW5oYSBlc3F1ZWNpZG8gZGUgYWNyZXNjZW50YXIgJzovJyBvdSAnLicgPyIKKworI34gbXNnaWQgInVucmVjb2duaXplZCBmb3JtYXQ6ICUlKCVzKSIKKyN+IG1zZ3N0ciAiZm9ybWF0byBuw6NvIHJlY29uaGVjaWRvOiAlJSglcykiCisKKyN+IG1zZ2lkICI6c3RyaXA9IHJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlciBhcmd1bWVudCIKKyN+IG1zZ3N0ciAiOnN0cmlwPSByZXF1ZXIgdW0gaW50ZWlybyBwb3NpdGl2byBjb21vIGFyZ3VtZW50byIKKworI34gbXNnaWQgInJlZiAnJXMnIGRvZXMgbm90IGhhdmUgJWxkIGNvbXBvbmVudHMgdG8gOnN0cmlwIgorI34gbXNnc3RyICJhIHJlZmVyw6puY2lhICclcycgbsOjbyB0ZW0gJWxkIGNvbXBvbmVudGVzIGNvbW8gc2UgaW5kaWNhIGVtIDpzdHJpcCIKKworI34gbXNnaWQgInVua25vd24gJS4qcyBmb3JtYXQgJXMiCisjfiBtc2dzdHIgImZvcm1hdG8gZGUgJS4qcyBkZXNjb25oZWNpZG8gJXMiCisKKyN+IG1zZ2lkICJbJXM6IGdvbmVdIgorI34gbXNnc3RyICJbJXM6IGRlc2FwYXJlY2lkb10iCisKKyN+IG1zZ2lkICJbJXNdIgorI34gbXNnc3RyICJbJXNdIgorCisjfiBtc2dpZCAiWyVzOiBiZWhpbmQgJWRdIgorI34gbXNnc3RyICJbJXM6IGF0csOhcyAlZF0iCisKKyN+IG1zZ2lkICJbJXM6IGFoZWFkICVkXSIKKyN+IG1zZ3N0ciAiWyVzOiDDoCBmcmVudGUgJWRdIgorCisjfiBtc2dpZCAiWyVzOiBhaGVhZCAlZCwgYmVoaW5kICVkXSIKKyN+IG1zZ3N0ciAiWyVzOiDDoCBmcmVudGUgJWQsIGF0csOhcyAlZF0iCisKKyN+IG1zZ2lkICIgKioqKiBpbnZhbGlkIHJlZiAqKioqIgorI34gbXNnc3RyICIgKioqKiByZWZlcsOqbmNpYXMgaW52w6FsaWRhICoqKioiCisKKyN+IG1zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKKyN+IG1zZ3N0ciAiZGlyZXTDs3JpbyBkZSBvYmpldG9zIGRlbWFzaWFkbyBsb25nbyAlLipzIgorCisjfiBtc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIDxtc2c+IEhFQUQgPGNvbW1pdD4iCisjfiBtc2dzdHIgImdpdCBtZXJnZSBbPG9ww6fDtWVzPl0gPG1zZz4gSEVBRCA8Y29tbWl0PiIKKworI34gbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorI34gbXNnc3RyICInJXMnIG7Do28gw6kgdW0gY29tbWl0IgorCisjfiBtc2dpZCAiY2Fubm90IG9wZW4gZmlsZSAnJXMnIgorI34gbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhYnJpciBvIGZpY2hlaXJvICclcyciCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgY2xvc2UgZmlsZSAlcyIKKyN+IG1zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgZmVjaGFyIG8gZmljaGVpcm8gJXMiCisKKyN+IG1zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKKyN+IG1zZ3N0ciAibyBub21lIGRhIHRhZyDDqSBkZW1hc2lhZG8gbG9uZ286ICUuKnMuLi4iCisKKyN+IG1zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorI34gbXNnc3RyICJjYWJlw6dhbGhvIGRhIHRhZyBkZW1hc2lhZG8gbG9uZ28uIgorCisjfiBtc2dpZCAiIgorI34gIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisjfiAibWFya2VkIGZvciBkaXNjYXJkaW5nIgorI34gbXNnc3RyICIiCisjfiAiU2UgbyBwYXRjaCBzZSBhcGxpY2FyIGNvcnJldGFtZW50ZSwgbyBleGNlcnRvIGVkaXRhZG8gc2Vyw6EgbWFyY2Fkb1xuIgorI34gInBhcmEgc2VyIGRlc2NhcnRhZG8gaW1lZGlhdGFtZW50ZS4iCisKKyN+IG1zZ2lkICJVc2UgYW4gZXhwZXJpbWVudGFsIGJsYW5rLWxpbmUtYmFzZWQgaGV1cmlzdGljIHRvIGltcHJvdmUgZGlmZnMiCisjfiBtc2dzdHIgIiIKKyN+ICJVc2FyIHVtYSBoZXVyw61zdGljYSBleHBlcmltZW50YWwgYmFzZWFkYSBlbSBsaW5oYXMgYnJhbmNhcyBwYXJhIG1lbGhvcmFyICIKKyN+ICJkaWZmcyIKKworI34gbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCisjfiBtc2dzdHIgIkludGVsaWdlbnRlLi4uIGEgZW1lbmRhciBvIMO6bHRpbW8gY29tbWl0IGNvbSBvIMOtbmRpY2Ugc3Vqby4iCisKKyN+IG1zZ2lkICIiCisjfiAidGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgKG9yIG9uZSBvZiBpdHMgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisjfiAidXNlcyBhIC5naXQgZGlyZWN0b3J5OiIKKyN+IG1zZ2lkX3BsdXJhbCAiIgorI34gInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlcyAob3Igb25lIG9mIHRoZWlyIG5lc3RlZCBzdWJtb2R1bGVzKVxuIgorI34gInVzZSBhIC5naXQgZGlyZWN0b3J5OiIKKyN+IG1zZ3N0clswXSAiIgorI34gIm8gc3VibcOzZHVsbyBzZWd1aW50ZSAob3UgdW0gZG9zIHNldXMgc3VibcOzZHVsb3MgYW5pbmhhZG9zKVxuIgorI34gInVzYSB1bSBkaXJldMOzcmlvIC5naXQ6IgorI34gbXNnc3RyWzFdICIiCisjfiAib3Mgc3VibcOzZHVsb3Mgc2VndWludGVzIChvdSB1bSBkb3Mgc2V1cyBzdWJtw7NkdWxvcylcbiIKKyN+ICJ1c2FtIHVtIGRpcmV0w7NyaW8gLmdpdDoiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzICIKKyN+ICJoaXN0b3J5KSIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIih1c2UgJ3JtIC1yZicgc2UgcHJldGVuZGUgbWVzbW8gcmVtb3bDqi1sbywgaW5jbHVpbmRvIHRvZG8gbyBzZXUgaGlzdMOzcmljbykiCisKKyN+IG1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiCisjfiBtc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBlbSAlcyIKKworI34gbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKKyN+IG1zZ3N0ciAiRXJybyBhbyByZW1hdGFyICVzLiIKKworI34gbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCisjfiBtc2dzdHIgIkFzIHN1YXMgYWx0ZXJhw6fDtWVzIGxvY2FpcyBzZXLDo28gc3Vic3RpdHXDrWRhcyBwb3IgY2hlcnJ5LXBpY2suIgorCisjfiBtc2dpZCAiQ2Fubm90IHJldmVydCBkdXJpbmcgYW5vdGhlciByZXZlcnQuIgorI34gbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCByZXZlcnRlciBkdXJhbnRlIG91dHJhIHJldmVyc8Ojby4iCisKKyN+IG1zZ2lkICJDYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGFub3RoZXIgY2hlcnJ5LXBpY2suIgorI34gbXNnc3RyICIiCisjfiAiTsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciBjaGVycnktcGljayBkdXJhbnRlIG91dHJvIGNoZXJyeS1waWNrLiBkdXJhbnRlIHVtICIKKyN+ICJjaGVycnktcGljay4iCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgcGFyc2UgbGluZSAlZC4iCisjfiBtc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBhIGxpbmhhICVkLiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgJXMiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCAlcy4iCisjfiBtc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBsZXIgJXMuIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGZvcm1hdCAlcy4iCisjfiBtc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBmb3JtYXRhciAlcy4iCisKKyN+IG1zZ2lkICIlczogJXMiCisjfiBtc2dzdHIgIiVzOiAlcyIKKworI34gbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKKyN+IG1zZ3N0ciAibsOjbyDDqSBwb3Nzw612ZWwgYWJyaXIgJXM6ICVzIgorCisjfiBtc2dpZCAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCisjfiBtc2dzdHIgIlByaW1laXJvIHRlbSBkZSBkZWZpbmlyIGEgc3VhIGluZm9ybWHDp8OjbyBkZSBjb21taXR0ZXIiCisKKyN+IG1zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG86IHVuaWRhZGUgaW52w6FsaWRhIgorCisjfiBtc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbm8gYmxvYiAlczogdW5pZGFkZSAiCisjfiAiaW52w6FsaWRhIgorCisjfiBtc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbm8gZmljaGVpcm8gJXM6ICIKKyN+ICJ1bmlkYWRlIGludsOhbGlkYSIKKworI34gbXNnaWQgIiIKKyN+ICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbmEgZW50cmFkYSBwYWRyw6NvOiAiCisjfiAidW5pZGFkZSBpbnbDoWxpZGEiCisKKyN+IG1zZ2lkICIiCisjfiAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInZhbG9yIG51bcOpcmljbyAnJXMnIGRhIGNvbmZpZ3VyYcOnw6NvICclcycgaW5jb3JyZXRvIG5vIHN1Ym3Ds2R1bG8tYmxvYiAlczogIgorI34gInVuaWRhZGUgaW52w6FsaWRhIgorCisjfiBtc2dpZCAiIgorI34gImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAidmFsb3IgbnVtw6lyaWNvICclcycgZGEgY29uZmlndXJhw6fDo28gJyVzJyBpbmNvcnJldG8gbmEgbGluaGEgZGUgY29tYW5kb3MgIgorI34gIiVzOiB1bmlkYWRlIGludsOhbGlkYSIKKworI34gbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJ2YWxvciBudW3DqXJpY28gJyVzJyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIGluY29ycmV0byBlbSAlczogdW5pZGFkZSBpbnbDoWxpZGEiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAybmQgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgMsKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAzcmQgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgM8KqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA0dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgNMKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA1dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgNcKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA2dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgNsKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA3dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgN8KqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA4dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgOMKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA5dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgOcKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAxMHRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAiRXN0YSDDqSBhIDEwwqogbWVuc2FnZW0gZGUgY29tbWl0OiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlICR7bn10aCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIkVzdGEgw6kgYSAke259wqogbWVuc2FnZW0gZGUgY29tbWl0OiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlICR7bn1zdCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIkVzdMOhIMOpIGEgJHtufcKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259bmQgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgJHtufcKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAke259cmQgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICJFc3RhIMOpIGEgJHtufcKqIG1lbnNhZ2VtIGRlIGNvbW1pdDoiCisKKyN+IG1zZ2lkICJUaGUgMXN0IGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgMcKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgMm5kIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgMsKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgM3JkIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgM8KqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgNHRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgNMKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgNXRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgNcKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgNnRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgNsKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgN3RoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgN8KqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgOHRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgOMKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgOXRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkEgOcKqIG1lbnNhZ2VtIGRlIGNvbW1pdCBzZXLDoSBpZ25vcmFkYToiCisKKyN+IG1zZ2lkICJUaGUgMTB0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJBIDEwwqogbWVuc2FnZW0gZGUgY29tbWl0IHNlcsOhIGlnbm9yYWRhOiIKKworI34gbXNnaWQgIlRoZSAke259dGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQSAke259wqogbWVuc2FnZW0gZGUgY29tbWl0IHNlcsOhIGlnbm9yYWRhOiIKKworI34gbXNnaWQgIlRoZSAke259c3QgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQSAke259wqogbWVuc2FnZW0gZGUgY29tbWl0IHNlcsOhIGlnbm9yYWRhOiIKKworI34gbXNnaWQgIlRoZSAke259bmQgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQSAke259wqogbWVuc2FnZW0gZGUgY29tbWl0IHNlcsOhIGlnbm9yYWRhOiIKKworI34gbXNnaWQgIlRoZSAke259cmQgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQSAke259wqogbWVuc2FnZW0gZGUgY29tbWl0IHNlcsOhIGlnbm9yYWRhOiIKKworI34gbXNnaWQgImNvdWxkIG5vdCBydW4gZ3BnLiIKKyN+IG1zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGV4ZWN1dGFyIGdwZy4iCisKKyN+IG1zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCisjfiBtc2dzdHIgImdwZyBuw6NvIGFjZWl0b3Ugb3MgZGFkb3MiCisKKyN+IG1zZ2lkICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSBpbiB0aGUgdHJlZSIKKyN+IG1zZ3N0ciAidGlwbyBkZSBvYmpldG8gc2VtIHN1cG9ydGUgZW5jb250cmFkbyBuYSDDoXJ2b3JlIgorCisjfiBtc2dpZCAiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iCisjfiBtc2dzdHIgIkZhbGhhIGRlIGludGVncmHDp8OjbyBmYXRhbCwgbsOjbyBkZXZpYSBhY29udGVjZXIuIgorCisjfiBtc2dpZCAiVW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIKKyN+IG1zZ3N0ciAiQ2FtaW5obyBuw6NvIHByb2Nlc3NhZG8/Pz8gJXMiCisKKyN+IG1zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcyIKKyN+IG1zZ3N0ciAiRXJybyBhbyByZW1hdGFyICVzLiIKKworI34gbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKKyN+IG1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGVmZXR1YXIgJXMgZHVyYW50ZSAlcyIKKworI34gbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKKyN+IG1zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgZWZldHVhciBjaGVycnktcGljayBudW1hIGNhYmXDp2EgdmF6aWEiCisKKyN+IG1zZ2lkICJjb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKKyN+IG1zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICVzIHBhcmEgZXNjcml0YSIKKworI34gbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBicmFuY2ggZGVzY3JpcHRpb24gdGVtcGxhdGUiCisjfiBtc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBvIG1vZGVsbyBkYSBkZXNjcmnDp8OjbyBkbyByYW1vIgorCisjfiBtc2dpZCAiY29ycnVwdCBpbmRleCBmaWxlIgorI34gbXNnc3RyICJmaWNoZWlybyBkZSDDrW5kaWNlIGNvcnJvbXBpZG8iCisKKyN+IG1zZ2lkICJkZXRhY2ggdGhlIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorI34gbXNnc3RyICJkZXN0YWNhciBIRUFEIG5vIGNvbW1pdCBpbmRpY2FkbyIKKworI34gbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eS4uLiAiCisjfiBtc2dzdHIgIkEgdmVyaWZpY2FyIGEgY29uZWN0aXZpZGFkZS4uLiAiCisKKyN+IG1zZ2lkICIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiCisjfiBtc2dzdHIgIiAgKG7Do28gw6kgcG9zc8OtdmVsIGF0dWFsaXphciBhIHJlZmVyw6puY2lhIGxvY2FsKSIKKworI34gbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCisjfiBtc2dzdHIgImV4aXN0ZW50ZSByZWluaWNpYWxpemFkbyIKKworI34gbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorI34gbXNnc3RyICJ2YXppbyBpbmljaWFsaXphZG8iCisKKyN+IG1zZ2lkICIgc2hhcmVkIgorI34gbXNnc3RyICIgcGFydGlsaGFkbyIKKworI34gbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKKyN+IG1zZ3N0ciAidmVyaWZpY2FyIHNlIG8gY29tbWl0IHRlbSB1bWEgYXNzaW5hdHVyYSBHUEcgdsOhbGlkYSIKKworI34gbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKKyN+IG1zZ3N0ciAiQSBlc2NyZXZlciBTUVVBU0hfTVNHIgorCisjfiBtc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCisjfiBtc2dzdHIgIkEgY29uY2x1aXIgU1FVQVNIX01TRyIKKworI34gbXNnaWQgIiAgIGFuZCB3aXRoIHJlbW90ZSIKKyN+IG1zZ3N0ciAiICAgZSBjb20gbyByZW1vdG8iCisKKyN+IG1zZ2lkICJyZW1vdmluZyAnJXMnIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZmFsaGEgYW8gcmVtb3ZlciAnJXMnIgorCisjfiBtc2dpZCAicHJvZ3JhbSBlcnJvciIKKyN+IG1zZ3N0ciAiZXJybyBkbyBwcm9ncmFtYSIKKworI34gbXNnaWQgIlBsZWFzZSBjYWxsICdiaXNlY3Rfc3RhdGUnIHdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIKKyN+IG1zZ3N0ciAiSW52b3F1ZSAnYmlzZWN0X3N0YXRlJyBjb20gcGVsbyBtZW5vcyB1bSBhcmd1bWVudG8uIgorCisjfiBtc2dpZCAiIgorI34gIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gIgorI34gImZyb20iCisjfiBtc2dzdHIgIiIKKyN+ICJTZSBkZXNlamEgcmV1dGlsaXphciBlc3RlIGRpcmV0w7NyaW8gZ2l0IGxvY2FsIGVtIHZleiBkZSBjbG9uYXIgZGUgbm92byBkZSIKKworI34gbXNnaWQgIiIKKyN+ICJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCAiCisjfiAicmVwbyIKKyN+IG1zZ3N0ciAiIgorI34gInVzZSBhIG9ww6fDo28gJy0tZm9yY2UnLiBTZSBvIGRpcmV0w7NyaW8gZ2l0IGxvY2FsIG7Do28gw6kgbyByZXBvc2l0w7NyaW8gIgorI34gImNvcnJldG8iCisKKyN+IG1zZ2lkICIiCisjfiAib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorI34gIm9wdGlvbi4iCisjfiBtc2dzdHIgIiIKKyN+ICJvdSBzZSBuw6NvIHRlbSBhIGNlcnRlemEgZG8gcXVlIGlzdG8gc2lnbmlmaWNhLCBlc2NvbGhhIG91dHJvIG5vbWUgY29tIGEgIgorI34gIm9ww6fDo28gJy0tbmFtZScuIgorCisjfiBtc2dpZCAiU3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5IgorI34gbXNnc3RyICIiCisjfiAiQSDDoXJ2b3JlIGRlIHRyYWJhbGhvIGRvIHN1Ym3Ds2R1bG8gJyRkaXNwbGF5cGF0aCcgY29udMOpbSB1bSBkaXJldMOzcmlvIC5naXQiCisKKyN+IG1zZ2lkICIiCisjfiAiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzICIKKyN+ICJoaXN0b3J5KSIKKyN+IG1zZ3N0ciAiIgorI34gIih1c2UgJ3JtIC1yZicgc2UgcHJldGVuZGUgbWVzbW8gcmVtb3bDqi1sbywgaW5jbHVpbmRvIHRvZG8gbyBzZXUgaGlzdMOzcmljbykiCisKKyN+IG1zZ2lkICInJXMnOiAlcyIKKyN+IG1zZ3N0ciAiJyVzJzogJXMiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorI34gbXNnc3RyICJuw6NvIMOpIHBvc3PDrXZlbCBhY2VkZXIgYSAnJXMnOiAlcyIKKworI34gbXNnaWQgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCisjfiBtc2dzdHIgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCisKKyN+IG1zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorI34gbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorCisjfiBtc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCisjfiBtc2dzdHIgIm7Do28gw6kgcG9zc8OtdmVsIGFicmlyICVzOiAlc1xuIgorCisjfiBtc2dpZCAiUGxlYXNlLCBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorI34gbXNnc3RyICIiCisjfiAiUHJlcGFyZSBhcyBzdWFzIGFsdGVyYcOnw7VlcyBlbSAuZ2l0bW9kdWxlcyBvdSBlc2NvbmRhLWFzIChzdGFzaCkgcGFyYSAiCisjfiAicHJvc3NlZ3VpciIKKworI34gbXNnaWQgImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIgorI34gbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgdmFsaWRhciBhIHRhZyAnJXMnIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlbW92ZTogJXMiCisjfiBtc2dzdHIgImZhbGhhIGFvIHJlbW92ZXI6ICVzIgorCisjfiBtc2dpZCAiVGhlIC0tZXhlYyBvcHRpb24gbXVzdCBiZSB1c2VkIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uIgorI34gbXNnc3RyICJBIG9ww6fDo28gLS1leGVjIGRldmUgc2VyIHVzYWRhIGNvbSBhIG9ww6fDo28gLS1pbnRlcmFjdGl2ZSIKKworI34gbXNnaWQgIiIKKyN+ICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyN+ICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKKyN+IG1zZ3N0ciAiIgorI34gIlN1Ym3Ds2R1bG8gZW0gJyRkaXNwbGF5cGF0aCcgbsOjbyBpbmljaWFsaXphZG9cbiIKKyN+ICJUYWx2ZXogcXVlaXJhIHVzYXIgJ3VwZGF0ZSAtLWluaXQnPyIKKworI34gbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQiCisjfiBtc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIGZvcm1hdG8iCisKKyN+IG1zZ2lkICJpbXByb3BlciBmb3JtYXQgZW50ZXJlZCBhbGlnbjolcyIKKyN+IG1zZ3N0ciAiZm9ybWF0byBpbXByw7NwcmlvIGludHJvZHV6aWRvIGFsaWduOiVzIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHNldCBjb3JlLndvcmt0cmVlIGluICVzIgorI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZGVmaW5pciBjb3JlLndvcmt0cmVlIGVtICVzIgorCisjfiBtc2dpZCAiIgorI34gInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGhhcyBjaGFuZ2VkIGluXG4iCisjfiAiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisjfiAiYW5kIG1haW50YWluIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvciwgdXNlOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyN+ICJcbiIKKyN+ICJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBub3csIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorI34gIlxuIgorI34gIldoZW4gcHVzaC5kZWZhdWx0IGlzIHNldCB0byAnbWF0Y2hpbmcnLCBnaXQgd2lsbCBwdXNoIGxvY2FsIGJyYW5jaGVzXG4iCisjfiAidG8gdGhlIHJlbW90ZSBicmFuY2hlcyB0aGF0IGFscmVhZHkgZXhpc3Qgd2l0aCB0aGUgc2FtZSBuYW1lLlxuIgorI34gIlxuIgorI34gIlNpbmNlIEdpdCAyLjAsIEdpdCBkZWZhdWx0cyB0byB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgJ3NpbXBsZSdcbiIKKyN+ICJiZWhhdmlvciwgd2hpY2ggb25seSBwdXNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4iCisjfiAicmVtb3RlIGJyYW5jaCB0aGF0ICdnaXQgcHVsbCcgdXNlcyB0byB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLlxuIgorI34gIlxuIgorI34gIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAncHVzaC5kZWZhdWx0JyBmb3IgZnVydGhlciAiCisjfiAiaW5mb3JtYXRpb24uXG4iCisjfiAiKHRoZSAnc2ltcGxlJyBtb2RlIHdhcyBpbnRyb2R1Y2VkIGluIEdpdCAxLjcuMTEuIFVzZSB0aGUgc2ltaWxhciBtb2RlXG4iCisjfiAiJ2N1cnJlbnQnIGluc3RlYWQgb2YgJ3NpbXBsZScgaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0KSIKKyN+IG1zZ3N0ciAiIgorI34gInB1c2guZGVmYXVsdCBuw6NvIGVzdMOhIGRlZmluaWRvOyBvIHNldSB2YWxvciBpbXBsw61jaXRvIGZvaSBhbHRlcmFkb1xuIgorI34gIm5vIEdpdCAyLjAgZGUgJ21hdGNoaW5nJyBwYXJhICdzaW1wbGUnLiBQYXJhIHN1cHJpbWlyIGVzdGEgbWVuc2FnZW1cbiIKKyN+ICJlIG1hbnRlciBvIGNvbXBvcnRhbWVudG8gdHJhZGljaW9uYWwsIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisjfiAiXG4iCisjfiAiUGFyYSBzdXByaW1pciBlc3RhIG1lbnNhZ2VtIGUgYWRvdGFyIG8gbm92byBjb21wb3J0YW1lbnRvLCB1c2U6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyN+ICJcbiIKKyN+ICJRdWFuZG8gcHVzaC5kZWZhdWx0IGVzdMOhIGRlZmluaWRvIGNvbW8gJ21hdGNoaW5nJywgbyBHaXQgcHVibGljYVxuIgorI34gIm9zIHJhbW9zIGxvY2FpcyBub3MgcmFtb3MgcmVtb3RvcyBxdWUgasOhIGV4aXN0YW0gY29tIG8gbWVzbW8gbm9tZS5cbiIKKyN+ICJcbiIKKyN+ICJEZXNkZSBhIHZlcnPDo28gMi4wLCBvIEdpdCBhc3N1bWUgbyBjb21wb3J0YW1lbnRvIG1haXMgY29uc2VydmF0aXZvICIKKyN+ICInc2ltcGxlJyxcbiIKKyN+ICJwdWJsaWNhbmRvIHPDsyBvIHJhbW8gYXR1YWwgbm8gcmFtbyByZW1vdG8gY29ycmVzcG9uZGVudGUsIHF1ZSDDqSB1c2Fkb1xuIgorI34gInBhcmEgYXR1YWxpemFyIG8gcmFtbyBhdHVhbCBjb20gJ2dpdCBwdWxsJy5cbiIKKyN+ICJDb25zdWx0ZSAnZ2l0IGhlbHAgY29uZmlnJyBlIHByb2N1cmUgcG9yICdwdXNoLmRlZmF1bHQnIHBhcmEgbWFpcyAiCisjfiAiaW5mb3JtYcOnw7Vlcy5cbiIKKyN+ICIobyBtb2RvICdzaW1wbGUnIGZvaSBpbnRyb2R1emlkbyBubyBHaXQgMS43LjExLiBVc2UgbyBtb2RvIHNlbWVsaGFudGVcbiIKKyN+ICInY3VycmVudCcgZW0gdmV6IGRlICdzaW1wbGUnIHNlIHBvciB2ZXplcyB1c2EgdmVyc8O1ZXMgYW50ZXJpb3JlcyBkbyBHaXQpIgorCisjfiBtc2dpZCAiY2hlY2t8b24tZGVtYW5kfG5vIgorI34gbXNnc3RyICJjaGVja3xvbi1kZW1hbmR8bm8iCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCisjfiBtc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhY3Jlc2NlbnRhciAnJXMnIgorCisjfiBtc2dpZCAiTWlzc2luZyBhdXRob3I6ICVzIgorI34gbXNnc3RyICJBdXRvciBlbSBmYWx0YTogJXMiCisKKyN+IG1zZ2lkICJUZXN0aW5nICIKKyN+IG1zZ3N0ciAiQSB0ZXN0YXIgIgorCisjfiBtc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKKyN+IG1zZ3N0ciAiIgorI34gIk1pZ3JhciBjb21taXRzIGxvY2FpcyBwYXJhIGEgY2FiZcOnYSBhdHVhbGl6YWRhIGVtIHJlbGHDp8OjbyBhbyByYW1vIGEgIgorI34gIm1vbnRhbnRlIgorCisjfiBtc2dpZCAiICVkIGZpbGUgY2hhbmdlZCIKKyN+IG1zZ2lkX3BsdXJhbCAiICVkIGZpbGVzIGNoYW5nZWQiCisjfiBtc2dzdHJbMF0gIiAlZCBmaWNoZWlybyBtb2RpZmljYWRvIgorI34gbXNnc3RyWzFdICIgJWQgZmljaGVpcm9zIG1vZGlmaWNhZG9zIgorCisjfiBtc2dpZCAiLCAlZCBpbnNlcnRpb24oKykiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgaW5zZXJ0aW9ucygrKSIKKyN+IG1zZ3N0clswXSAiLCAlZCBhZGnDp8OjbygrKSIKKyN+IG1zZ3N0clsxXSAiLCAlZCBhZGnDp8O1ZXMoKykiCisKKyN+IG1zZ2lkICIsICVkIGRlbGV0aW9uKC0pIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGRlbGV0aW9ucygtKSIKKyN+IG1zZ3N0clswXSAiLCAlZCBlbGltaW5hZG8oLSkiCisjfiBtc2dzdHJbMV0gIiwgJWQgZWxpbWluYWRvcygtKSIKKworI34gbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiCisjfiBtc2dzdHIgIlZvY8OqIG7Do28gdGVtIHVtYSBIRUFEIHbDoWxpZGEiCisKKyN+IG1zZ2lkICJidWciCisjfiBtc2dzdHIgImVycm8iCisKKyN+IG1zZ2lkICJjb3BpZWQ6ICAgICAlcyAtPiAlcyIKKyN+IG1zZ3N0ciAiY29waWFkbzogICAgICVzIC0+ICVzIgorCisjfiBtc2dpZCAibW9kaWZpZWQ6ICAgJXMiCisjfiBtc2dzdHIgIm1vZGlmaWNhZG86ICAgJXMiCisKKyN+IG1zZ2lkICJyZW5hbWVkOiAgICAlcyAtPiAlcyIKKyN+IG1zZ3N0ciAibXVkYWRvIGRlIG5vbWU6ICAgICVzIC0+ICVzIgorCisjfiBtc2dpZCAiLCBiZWhpbmQgIgorI34gbXNnc3RyICIsIGF0csOhcyAiCisKKyN+IG1zZ2lkICJubyBmaWxlcyBhZGRlZCIKKyN+IG1zZ3N0ciAibmVuaHVtIGZpY2hlaXJvcyBhZGljaW9uYWRvIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGV4dHJhY3QgZW1haWwgZnJvbSBjb21taXR0ZXIgaWRlbnRpdHkuIgorI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXh0cmFpciBhIGlkZW50aWRhZGUgZG8gY29tbWl0dGVyIGRvIGUtbWFpbC4iCisKKyN+IG1zZ2lkICJvcHRpb24gJXMgZG9lcyBub3QgYWNjZXB0IG5lZ2F0aXZlIGZvcm0iCisjfiBtc2dzdHIgIm9ww6fDo28gJXMgbsOjbyBhY2VpdGEgZm9ybWF0byBuZWdhdGl2byIKKworI34gbXNnaWQgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgorI34gbXNnc3RyICJBcGxpY2FuZG86ICRGSVJTVExJTkUiCisKKyN+IG1zZ2lkICItLSIKKyN+IG1zZ3N0ciAiLS0iCisKKyN+IG1zZ2lkICJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIgorI34gbXNnc3RyICJQb3IgZmF2b3IgaW5zaXJhIGEgbWVuc2FnZW0gZGUgY29tbWl0IGRhcyBzdWFzIGFsdGVyYcOnw7Vlcy4iCmRpZmYgLS1naXQgYS9wby9ydS5wbyBiL3BvL3J1LnBvCmluZGV4IDlmNTMwNWMuLmE3N2I0NjIgMTAwNjQ0Ci0tLSBhL3BvL3J1LnBvCisrKyBiL3BvL3J1LnBvCkBAIC0xLDE1ICsxLDE4IEBACi0jIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gcnVzc2lhbgotIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisjIFNPTUUgREVTQ1JJUFRJVkUgVElUTEUuCisjIENvcHlyaWdodCAoQykgWUVBUiBUSEUgUEFDS0FHRSdTIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIFBBQ0tBR0UgcGFja2FnZS4KKyMgCiAjIFRyYW5zbGF0b3JzOgotIyBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT4sIDIwMTUtMjAxNgotIyBJcmluYSBSaWVzZW4gPGlyaW5hLnJpZXNlbkBnbWFpbC5jb20+LCAyMDA3CisjIERpbWl0cml5IFJ5YXphbnRjZXYgPERKbTAwbkBtYWlsLnJ1PiwgMjAxNC0yMDE5CisjIGluc29sb3IsIDIwMTQKKyMgaW5zb2xvciwgMjAxNAorIyDQp9GD0Log0KLQsNCx0LvQuNGG0L7QvNC10L3QtNC10LvQtdC10LIgPGF1cnVtNDQ0YW5AZ21haWwuY29tPiwgMjAxOQogbXNnaWQgIiIKIG1zZ3N0ciAiIgogIlByb2plY3QtSWQtVmVyc2lvbjogR2l0IFJ1c3NpYW4gTG9jYWxpemF0aW9uIFByb2plY3RcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDEtMjYgMTU6NDctMDgwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDYtMzAgMTI6MzkrMDAwMFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE5LTA2LTA0IDA4OjI0KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE5LTA2LTIxIDE3OjI4KzAwMDBcbiIKICJMYXN0LVRyYW5zbGF0b3I6IERpbWl0cml5IFJ5YXphbnRjZXYgPERKbTAwbkBtYWlsLnJ1PlxuIgogIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW4gKGh0dHA6Ly93d3cudHJhbnNpZmV4LmNvbS9kam0wMG4vZ2l0LXBvLXJ1L2xhbmd1YWdlL3J1LylcbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgpAQCAtMTgsMjM2NSArMjEsMjE3MDcgQEAKICJMYW5ndWFnZTogcnVcbiIKICJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTQ7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuJTEwPD00ICYmIChuJTEwMDwxMiB8fCBuJTEwMD4xNCkgPyAxIDogbiUxMD09MCB8fCAobiUxMD49NSAmJiBuJTEwPD05KSB8fCAobiUxMDA+PTExICYmIG4lMTAwPD0xNCk/IDIgOiAzKTtcbiIKIAotIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjc5MyBnaXQtZ3VpLnNoOjgwNyBnaXQtZ3VpLnNoOjgyMCBnaXQtZ3VpLnNoOjkwMwotIzogZ2l0LWd1aS5zaDo5MjIKLW1zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKLW1zZ3N0ciAiZ2l0LWd1aTog0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LAiCisjOiBhZHZpY2UuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXPQv9C+0LTRgdC60LDQt9C60LA6ICUuKnMlc1xuIgogCi0jOiBnaXQtZ3VpLnNoOjc0MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgotbXNnc3RyICLQkiAlcyDRg9GB0YLQsNC90L7QstC70LXQvSDQvdC10LLQtdGA0L3Ri9C5INGI0YDQuNGE0YI6IgorIzogYWR2aWNlLmM6MTU2Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0LrQvtC/0LjRgNC+0LLQsNC90LjQtSDQutC+0LzQvNC40YLQsCDQsiDRgtC10LrRg9GJ0YPRjiDQstC10YLQutGDLCDRgtCw0Log0LrQsNC6INGDINCy0LDRgSDQuNC80LXRjtGC0YHRjyDQvdC1INGB0LvQuNGC0YvQtSDRhNCw0LnQu9GLLiIKIAotIzogZ2l0LWd1aS5zaDo3NzkKLW1zZ2lkICJNYWluIEZvbnQiCi1tc2dzdHIgItCo0YDQuNGE0YIg0LjQvdGC0LXRgNGE0LXQudGB0LAiCisjOiBhZHZpY2UuYzoxNTgKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LfQsNC60L7QvNC80LjRgtC40YLRjCwg0YLQsNC6INC60LDQuiDRgyDQstCw0YEg0LjQvNC10Y7RgtGB0Y8g0L3QtSDRgdC70LjRgtGL0LUg0YTQsNC50LvRiy4iCiAKLSM6IGdpdC1ndWkuc2g6NzgwCi1tc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCi1tc2dzdHIgItCo0YDQuNGE0YIg0LrQvtC90YHQvtC70Lgg0Lgg0LjQt9C80LXQvdC10L3QuNC5IChkaWZmKSIKKyM6IGFkdmljZS5jOjE2MAorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUsINGC0LDQuiDQutCw0Log0YMg0LLQsNGBINC40LzQtdGO0YLRgdGPINC90LUg0YHQu9C40YLRi9C1INGE0LDQudC70YsuIgogCi0jOiBnaXQtZ3VpLnNoOjc5NAotbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKLW1zZ3N0ciAiZ2l0INC90LUg0L3QsNC50LTQtdC9INCyIFBBVEguIgorIzogYWR2aWNlLmM6MTYyCittc2dpZCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INCy0YvQv9C+0LvQvdC40YLRjCDQv9C+0LvRg9GH0LXQvdC40LUsINGC0LDQuiDQutCw0Log0YMg0LLQsNGBINC40LzQtdGO0YLRgdGPINC90LUg0YHQu9C40YLRi9C1INGE0LDQudC70YsuIgogCi0jOiBnaXQtZ3VpLnNoOjgyMQotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRgNCw0YHQv9C+0LfQvdCw0YLRjCDRgdGC0YDQvtC60YMg0LLQtdGA0YHQuNC4IEdpdDogIgorIzogYWR2aWNlLmM6MTY0Cittc2dpZCAiUmV2ZXJ0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8sINGC0LDQuiDQutCw0Log0YMg0LLQsNGBINC40LzQtdGO0YLRgdGPINC90LUg0YHQu9C40YLRi9C1INGE0LDQudC70YsuIgogCi0jOiBnaXQtZ3VpLnNoOjgzOQotIywgdGNsLWZvcm1hdAorIzogYWR2aWNlLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LLRi9C/0L7Qu9C90LjRgtGMICVzLCDRgtCw0Log0LrQsNC6INGDINCy0LDRgSDQuNC80LXRjtGC0YHRjyDQvdC1INGB0LvQuNGC0YvQtSDRhNCw0LnQu9GLLiIKKworIzogYWR2aWNlLmM6MTc0CiBtc2dpZCAiIgotIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAi0JjRgdC/0YDQsNCy0YzRgtC1INC40YUg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSwg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgYWRkL3JtIDzRhNCw0LnQuz7CuyxcbtGH0YLQvtCx0Ysg0L/QvtC80LXRgtC40YLRjCDQuNGB0L/RgNCw0LLQu9C10L3QuNC1INC4INGB0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCLiIKKworIzogYWR2aWNlLmM6MTgyCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIgorbXNnc3RyICLQktGL0YXQvtC0INC40Lct0LfQsCDQvdC10YDQsNC30YDQtdGI0LXQvdC90L7Qs9C+INC60L7QvdGE0LvQuNC60YLQsC4iCisKKyM6IGFkdmljZS5jOjE4NyBidWlsdGluL21lcmdlLmM6MTMyMAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAi0JLRiyDQvdC1INC30LDQstC10YDRiNC40LvQuCDRgdC70LjRj9C90LjQtSAo0L/RgNC40YHRg9GC0YHRgtCy0YPQtdGCINGE0LDQudC7IE1FUkdFX0hFQUQpLiIKKworIzogYWR2aWNlLmM6MTg5Cittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAi0J/QtdGA0LXQtCDRgdC70LjRj9C90LjQtdC8LCDQstGL0L/QvtC70L3QuNGC0LUg0LrQvtC80LzQuNGCINCy0LDRiNC40YUg0LjQt9C80LXQvdC10L3QuNC5LiIKKworIzogYWR2aWNlLmM6MTkwCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICLQktGL0YXQvtC0INC40Lct0LfQsCDQvdC10LfQsNCy0LXRgNGI0LXQvdC90L7Qs9C+INGB0LvQuNGP0L3QuNGPLiIKKworIzogYWR2aWNlLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBjaGVja2luZyBvdXQgJyVzJy5cbiIKICJcbiIKLSIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgcGVyZm9ybWluZyBhbm90aGVyIGNoZWNrb3V0LlxuIgogIlxuIgotIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYiB3aXRoIHRoZSBjaGVja291dCBjb21tYW5kIGFnYWluLiBFeGFtcGxlOlxuIgogIlxuIgotIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC+0L/RgNC10LTQtdC70LjRgtGMINCy0LXRgNGB0LjRjiBHaXRcblxuJXMg0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0LLQtdGA0YHQuNGOIMKrJXPCuy5cblxu0LTQu9GPICVzINGC0YDQtdCx0YPQtdGC0YHRjyDQstC10YDRgdC40Y8gR2l0LCDQvdCw0YfQuNC90LDRjyDRgSAxLjUuMFxuXG7Qn9GA0LXQtNC/0L7Qu9C+0LbQuNGC0YwsINGH0YLQviDCqyVzwrsg0Lgg0LXRgdGC0Ywg0LLQtdGA0YHQuNGPIDEuNS4wP1xuIgorIiAgZ2l0IGNoZWNrb3V0IC1iIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCittc2dzdHIgItCf0YDQuNC80LXRh9Cw0L3QuNC1OiDQv9C10YDQtdGF0L7QtCDQvdCwIMKrJXPCuy5cblxu0JLRiyDRgdC10LnRh9Cw0YEg0LIg0YHQvtGB0YLQvtGP0L3QuNC4IMKr0L7RgtC00LXQu9GR0L3QvdC+0LPQviBIRUFEwrsuINCS0Ysg0LzQvtC20LXRgtC1INC+0YHQvNC+0YLRgNC10YLRjNGB0Y8sINGB0LTQtdC70LDRgtGMXG7RjdC60YHQv9C10YDQuNC80LXQvdGC0LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQuCDQt9Cw0LrQvtC80LzQuNGC0LjRgtGMINC40YUsINGC0LDQutC20LUg0LLRiyDQvNC+0LbQtdGC0LUg0L7RgtC80LXQvdC40YLRjFxu0LjQt9C80LXQvdC10L3QuNGPINC70Y7QsdGL0YUg0LrQvtC80LzQuNGC0L7QsiDQsiDRjdGC0L7QvCDRgdC+0YHRgtC+0Y/QvdC40Lgg0L3QtSDQt9Cw0YLRgNCw0LPQuNCy0LDRjyDQu9GO0LHRi9C1INCy0LXRgtC60Lgg0LhcbtC90LUg0L/QtdGA0LXRhdC+0LTRjyDQvdCwINC90LjRhS5cblxu0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvtC30LTQsNGC0Ywg0L3QvtCy0YPRjiDQstC10YLQutGDINC4INGB0L7RhdGA0LDQvdC40YLRjCDRgdCy0L7QuCDQutC+0LzQvNC40YLRiywg0YLQviDQstGLXG7QvNC+0LbQtdGC0LUg0YHQtNC10LvQsNGC0Ywg0Y3RgtC+ICjRgdC10LnRh9Cw0YEg0LjQu9C4INC/0L7Qt9C20LUpINCy0YvQt9Cy0LDQsiDQutC+0LzQsNC90LTRgyBjaGVja291dCDRgdC90L7QstCwLFxu0L3QviDRgSDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtYi4g0J3QsNC/0YDQuNC80LXRgDpcblxuICBnaXQgY2hlY2tvdXQgLWIgPNC40LzRjy3QvdC+0LLQvtC5LdCy0LXRgtC60Lg+XG5cbiIKIAotIzogZ2l0LWd1aS5zaDoxMTI4Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICLQmtCw0YLQsNC70L7QsyBHaXQg0L3QtSDQvdCw0LnQtNC10L06IgorIzogYWxpYXMuYzo1MAorbXNnaWQgImNtZGxpbmUgZW5kcyB3aXRoIFxcIgorbXNnc3RyICLQutC+0LzQsNC90LTQvdCw0Y8g0YHRgtGA0L7QutCwINC30LDQutCw0L3Rh9C40LLQsNC10YLRgdGPINGB0LjQvNCy0L7Qu9C+0LwgXFwiCiAKLSM6IGdpdC1ndWkuc2g6MTE0NgotbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0LXRgNC10LnRgtC4INC6INC60L7RgNC90Y4g0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwINGA0LXQv9C+0LfQuNGC0L7RgNC40Y86ICIKKyM6IGFsaWFzLmM6NTEKK21zZ2lkICJ1bmNsb3NlZCBxdW90ZSIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GJ0LXQvdCwINC30LDQutGA0YvQstCw0Y7RidCw0Y8g0LrQsNCy0YvRh9C60LAiCiAKLSM6IGdpdC1ndWkuc2g6MTE1NAotbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKLW1zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQsdC10Lcg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwOiIKKyM6IGFwcGx5LmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90LDRjyDQvtC/0YbQuNGPINC00LvRjyDQv9GA0L7QsdC10LvQvtCyIMKrJXPCuyIKIAotIzogZ2l0LWd1aS5zaDoxMTYyCi1tc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgItCe0YLRgdGD0YLRgdGC0LLRg9C10YIg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisjOiBhcHBseS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3QsNGPINC+0L/RhtC40Y8g0LTQu9GPINC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNGPINC/0YDQvtCx0LXQu9C+0LIgwqslc8K7IgogCi0jOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDRgdC+0YHRgtC+0Y/QvdC40Lgg0YTQsNC50LvQvtCy4oCmIgorIzogYXBwbHkuYzoxMjkKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3Qg0LggLS0zd2F5INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKIAotIzogZ2l0LWd1aS5zaDoxMzkwCi1tc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKLW1zZ3N0ciAi0J/QvtC40YHQuiDQuNC30LzQtdC90LXQvdC90YvRhSDRhNCw0LnQu9C+0LLigKYiCisjOiBhcHBseS5jOjEzMQorbXNnaWQgIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLWNhY2hlZCDQuCAtLTN3YXkg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4uIgogCi0jOiBnaXQtZ3VpLnNoOjE0NTQKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICLQktGL0LfQvtCyINC/0LXRgNC10YXQstCw0YLRh9C40LrQsCBwcmVwYXJlLWNvbW1pdC1tc2figKYiCisjOiBhcHBseS5jOjEzNAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5INCy0L3QtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgogCi0jOiBnaXQtZ3VpLnNoOjE0NzEKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgotbXNnc3RyICLQmtC+0LzQvNC40YIg0L/RgNC10YDQstCw0L0g0L/QtdGA0LXRhdCy0LDRgtGH0LjQutC+0LwgcHJlcGFyZS1jb21taXQtbXNnLiIKKyM6IGFwcGx5LmM6MTQ1Cittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCDQstC90LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKIAotIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKLW1zZ2lkICJSZWFkeS4iCi1tc2dzdHIgItCT0L7RgtC+0LLQvi4iCisjOiBhcHBseS5jOjE0OAorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCDQstC90LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKIAotIzogZ2l0LWd1aS5zaDoxNzg3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0L3QviAlcyDQuNC3ICVzINGE0LDQudC70L7Qsi4iCisjOiBhcHBseS5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7QtNCz0L7RgtC+0LLQuNGC0Ywg0YDQtdCz0YPQu9GP0YDQvdC+0LUg0LLRi9GA0LDQttC10L3QuNC1INC00LvRjyDQvNC10YLQutC4INCy0YDQtdC80LXQvdC4ICVzIgogCi0jOiBnaXQtZ3VpLnNoOjE5MTMKLW1zZ2lkICJVbm1vZGlmaWVkIgotbXNnc3RyICLQndC1INC40LfQvNC10L3QtdC90L4iCisjOiBhcHBseS5jOjgzOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMg0LLQvtC30LLRgNCw0YLQuNC7ICVkINC00LvRjyDQstCy0L7QtNCwOiAlcyIKIAotIzogZ2l0LWd1aS5zaDoxOTE1Ci1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgItCY0LfQvNC10L3QtdC90L4sINC90LUg0LIg0LjQvdC00LXQutGB0LUiCisjOiBhcHBseS5jOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0LjQvNGPINGE0LDQudC70LAg0LIg0YHRgtGA0L7QutC1INC/0LDRgtGH0LAgJWQiCiAKLSM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKLW1zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKLW1zZ3N0ciAi0JIg0LjQvdC00LXQutGB0LUg0LTQu9GPINC60L7QvNC80LjRgtCwIgorIzogYXBwbHkuYzo5NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6INC/0LvQvtGF0L7QuSBnaXQtZGlmZiDigJQg0L7QttC40LTQsNC70L7RgdGMIC9kZXYvbnVsbCwg0L/QvtC70YPRh9C10L3QviAlcyDQvdCwINGB0YLRgNC+0LrQtSAlZCIKIAotIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQotbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICLQp9Cw0YHRgtC4LCDQsiDQuNC90LTQtdC60YHQtSDQtNC70Y8g0LrQvtC80LzQuNGC0LAiCisjOiBhcHBseS5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiDQv9C70L7RhdC+0LkgZ2l0LWRpZmYg4oCUINC90LUg0YHQvtCz0LvQsNGB0YPRjtGJ0LXQtdGB0Y8g0L3QvtCy0L7QtSDQuNC80Y8g0YTQsNC50LvQsCDQvdCwINGB0YLRgNC+0LrQtSAlZCIKIAotIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICLQkiDQuNC90LTQtdC60YHQtSDQtNC70Y8g0LrQvtC80LzQuNGC0LAsINC+0YLRgdGD0YLRgdGC0LLRg9C10YIiCisjOiBhcHBseS5jOjk1NworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiDQv9C70L7RhdC+0LkgZ2l0LWRpZmYg4oCUINC90LUg0YHQvtCz0LvQsNGB0YPRjtGJ0LXQtdGB0Y8g0YHRgtCw0YDQvtC1INC40LzRjyDRhNCw0LnQu9CwINC90LAg0YHRgtGA0L7QutC1ICVkIgogCi0jOiBnaXQtZ3VpLnNoOjE5MjAKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAi0KLQuNC/INGE0LDQudC70LAg0LjQt9C80LXQvdGR0L0sINC90LUg0LIg0LjQvdC00LXQutGB0LUiCisjOiBhcHBseS5jOjk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6INC/0LvQvtGF0L7QuSBnaXQtZGlmZiAg4oCUINC+0LbQuNC00LDQu9C+0YHRjCAvZGV2L251bGwg0L3QsCDRgdGC0YDQvtC60LUgJWQiCiAKLSM6IGdpdC1ndWkuc2g6MTkyMQotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCi1tc2dzdHIgItCi0LjQvyDRhNCw0LnQu9CwINC40LfQvNC10L3RkdC9LCDQsiDQuNC90LTQtdC60YHQtSIKKyM6IGFwcGx5LmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INGA0LXQttC40LwgJWQ6ICVzIgogCi0jOiBnaXQtZ3VpLnNoOjE5MjMKLW1zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgItCd0LUg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y8sINC90LUg0LIg0LjQvdC00LXQutGB0LUiCisjOiBhcHBseS5jOjEzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgItC/0YDQvtGC0LjQstC+0YDQtdGH0LjQstGL0LUg0YHRgtGA0L7QutC4INC30LDQs9C+0LvQvtCy0LrQsCAlZCDQuCAlZCIKIAotIzogZ2l0LWd1aS5zaDoxOTI4Ci1tc2dpZCAiTWlzc2luZyIKLW1zZ3N0ciAi0J7RgtGB0YPRgtGB0YLQstGD0LXRgiIKKyM6IGFwcGx5LmM6MTQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY291bnQ6INC90LUg0L7QttC40LTQsNC10LzQsNGPINGB0YLRgNC+0LrQsDogJS4qcyIKIAotIzogZ2l0LWd1aS5zaDoxOTI5Ci1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgotbXNnc3RyICLQkiDQuNC90LTQtdC60YHQtSDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjyIKKyM6IGFwcGx5LmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLRhNGA0LDQs9C80LXQvdGCINC40LfQvNC10L3QtdC90LjQuSDQsdC10Lcg0LfQsNCz0L7Qu9C+0LLQutCwINC90LAg0YHRgtGA0L7QutC1ICVkOiAlLipzIgogCi0jOiBnaXQtZ3VpLnNoOjE5MzAKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCi1tc2dzdHIgItCSINC40L3QtNC10LrRgdC1INC00LvRjyDRg9C00LDQu9C10L3QuNGPLCDQtdGJ0LUg0L3QtSDRg9C00LDQu9C10L3QviIKKyM6IGFwcGx5LmM6MTU3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSIKKyIgY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUiCisiIGNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICLQt9Cw0LPQvtC70L7QstC+0LogZ2l0IGRpZmYg0L3QtSDQvdCw0YjQtdC7INC40L3RhNC+0YDQvNCw0YbQuNGOINC+0LEg0LjQvNC10L3QuCDRhNCw0LnQu9CwINC/0YDQuCDRg9C00LDQu9C10L3QuNC4ICVkINCy0LXQtNGD0YnQtdCz0L4g0LrQvtC80L/QvtC90LXQvdGC0LAg0L/Rg9GC0Lgg0Log0YTQsNC50LvRgyAo0YHRgtGA0L7QutCwICVkKSIKK21zZ3N0clsxXSAi0LfQsNCz0L7Qu9C+0LLQvtC6IGdpdCBkaWZmINC90LUg0L3QsNGI0LXQuyDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINC40LzQtdC90Lgg0YTQsNC50LvQsCDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCAlZCDQstC10LTRg9GJ0LjRhSDQutC+0LzQv9C+0L3QtdC90YIg0L/Rg9GC0Lgg0Log0YTQsNC50LvRgyAo0YHRgtGA0L7QutCwICVkKSIKK21zZ3N0clsyXSAi0LfQsNCz0L7Qu9C+0LLQvtC6IGdpdCBkaWZmINC90LUg0L3QsNGI0LXQuyDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINC40LzQtdC90Lgg0YTQsNC50LvQsCDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCAlZCDQstC10LTRg9GJ0LjRhSDQutC+0LzQv9C+0L3QtdC90YIg0L/Rg9GC0Lgg0Log0YTQsNC50LvRgyAo0YHRgtGA0L7QutCwICVkKSIKK21zZ3N0clszXSAi0LfQsNCz0L7Qu9C+0LLQvtC6IGdpdCBkaWZmINC90LUg0L3QsNGI0LXQuyDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINC40LzQtdC90Lgg0YTQsNC50LvQsCDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCAlZCDQstC10LTRg9GJ0LjRhSDQutC+0LzQv9C+0L3QtdC90YIg0L/Rg9GC0Lgg0Log0YTQsNC50LvRgyAo0YHRgtGA0L7QutCwICVkKSIKIAotIzogZ2l0LWd1aS5zaDoxOTMyIGdpdC1ndWkuc2g6MTkzMyBnaXQtZ3VpLnNoOjE5MzQgZ2l0LWd1aS5zaDoxOTM1Ci0jOiBnaXQtZ3VpLnNoOjE5MzYgZ2l0LWd1aS5zaDoxOTM3Ci1tc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKLW1zZ3N0ciAi0KLRgNC10LHRg9C10YLRgdGPINGA0LDQt9GA0LXRiNC10L3QuNC1INC60L7QvdGE0LvQuNC60YLQsCDQv9GA0Lgg0YHQu9C40Y/QvdC40LgiCisjOiBhcHBseS5jOjE1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lICVkKSIKK21zZ3N0ciAi0LfQsNCz0L7Qu9C+0LLQvtC6IGdpdCBkaWZmINC90LUg0YHQvtC00LXRgNC20LjRgiDQuNC90YTQvtGA0LzQsNGG0LjQuCDQvtCxINC40LzQtdC90Lgg0YTQsNC50LvQsCAo0YHRgtGA0L7QutCwICVkKSIKIAotIzogZ2l0LWd1aS5zaDoxOTcyCi1tc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAi0JfQsNC/0YPRgdC60LDQtdGC0YHRjyBnaXRr4oCmINCf0L7QtNC+0LbQtNC40YLQtSwg0L/QvtC20LDQu9GD0LnRgdGC0LDigKYiCisjOiBhcHBseS5jOjE3NzIKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi0L3QvtCy0YvQuSDRhNCw0LnQuyDQt9Cw0LLQuNGB0LjRgiDQvtGCINGB0YLQsNGA0L7Qs9C+INGB0L7QtNC10YDQttC40LzQvtCz0L4iCiAKLSM6IGdpdC1ndWkuc2g6MTk4NAotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgotbXNnc3RyICJnaXRrINC90LUg0L3QsNC50LTQtdC9INCyIFBBVEguIgorIzogYXBwbHkuYzoxNzc0Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi0YPQtNCw0LvQtdC90L3Ri9C5INGE0LDQudC7INCy0YHQtSDQtdGJ0LUg0LjQvNC10LXRgiDRgdC+0LTQtdGA0LbQuNC80L7QtSIKIAotIzogZ2l0LWd1aS5zaDoyMDQzCi1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiCi1tc2dzdHIgImdpdCBndWkg0L3QtSDQvdCw0LnQtNC10L0g0LIgUEFUSC4iCisjOiBhcHBseS5jOjE4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLQv9Cw0YLRhyDQv9C+0LLRgNC10LbQtNC10L0g0L3QsCDRgdGC0YDQvtC60LUgJWQiCiAKLSM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Ci1tc2dpZCAiUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0KDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKyM6IGFwcGx5LmM6MTg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi0L3QvtCy0YvQuSDRhNCw0LnQuyAlcyDQt9Cw0LLQuNGB0LjRgiDQvtGCINGB0YLQsNGA0L7Qs9C+INGB0L7QtNC10YDQttC40LzQvtCz0L4iCiAKLSM6IGdpdC1ndWkuc2g6MjQ1NgotbXNnaWQgIkVkaXQiCi1tc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMIgorIzogYXBwbHkuYzoxODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgItGD0LTQsNC70LXQvdC90YvQuSDRhNCw0LnQuyAlcyDQstGB0LUg0LXRidC1INC40LzQtdC10YIg0YHQvtC00LXRgNC20LjQvNC+0LUiCiAKLSM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCi1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICLQktC10YLQutCwIgorIzogYXBwbHkuYzoxODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INGE0LDQudC7ICVzINGB0YLQsNC90L7QstC40YLRgdGPINC/0YPRgdGC0YvQvCwg0L3QviDQvdC1INGD0LTQsNC70Y/QtdGC0YHRjyIKIAotIzogZ2l0LWd1aS5zaDoyNDYxIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKLW1zZ2lkICJDb21taXRAQG5vdW4iCi1tc2dzdHIgItCa0L7QvNC80LjRgiIKKyM6IGFwcGx5LmM6MTk5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLQv9C+0LLRgNC10LbQtNC10L3QvdGL0Lkg0LTQstC+0LjRh9C90YvQuSDQv9Cw0YLRhyDQvdCwINGB0YLRgNC+0LrQtSAlZDogJS4qcyIKIAotIzogZ2l0LWd1aS5zaDoyNDY0IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4Ci1tc2dpZCAiTWVyZ2UiCisjOiBhcHBseS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0LTQstC+0LjRh9C90YvQuSDQv9Cw0YLRhyDQvdCwINGB0YLRgNC+0LrQtSAlZCIKKworIzogYXBwbHkuYzoyMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgItC/0LDRgtGHINGBINC80YPRgdC+0YDQvtC8INC90LAg0YHRgtGA0L7QutC1ICVkIgorCisjOiBhcHBseS5jOjIyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YHQuNC80LLQvtC70YzQvdGD0Y4g0YHRgdGL0LvQutGDICVzIgorCisjOiBhcHBseS5jOjIyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDQuNC70Lgg0L/RgNC+0YfQtdGB0YLRjCAlcyIKKworIzogYXBwbHkuYzoyOTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC90LDRh9Cw0LvQviDRgdGC0YDQvtC60Lg6IMKrJWPCuyIKKworIzogYXBwbHkuYzozMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAi0KfQsNGB0YLRjCAjJWQg0YPRgdC/0LXRiNC90L4g0L/RgNC40LzQtdC90LXQvdCwINC90LAgJWQgKNGB0L4g0YHQtNCy0LjQs9C+0Lwg0LIgJWQg0YHRgtGA0L7QutGDKS4iCittc2dzdHJbMV0gItCn0LDRgdGC0YwgIyVkINGD0YHQv9C10YjQvdC+INC/0YDQuNC80LXQvdC10L3QsCDQvdCwICVkICjRgdC+INGB0LTQstC40LPQvtC8INCyICVkINGB0YLRgNC+0LrQuCkuIgorbXNnc3RyWzJdICLQp9Cw0YHRgtGMICMlZCDRg9GB0L/QtdGI0L3QviDQv9GA0LjQvNC10L3QtdC90LAg0L3QsCAlZCAo0YHQviDRgdC00LLQuNCz0L7QvCDQsiAlZCDRgdGC0YDQvtC6KS4iCittc2dzdHJbM10gItCn0LDRgdGC0YwgIyVkINGD0YHQv9C10YjQvdC+INC/0YDQuNC80LXQvdC10L3QsCDQvdCwICVkICjRgdC+INGB0LTQstC40LPQvtC8INCyICVkINGB0YLRgNC+0LopLiIKKworIzogYXBwbHkuYzozMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgItCa0L7QvdGC0LXQutGB0YIg0YHRg9C20LXQvSDQtNC+ICglbGQvJWxkKSwg0YfRgtC+0LHRiyDQv9GA0LjQvNC10L3QuNGC0Ywg0YTRgNCw0LPQvNC10L3RgiDQvdCwICVkINGB0YLRgNC+0LrQtSIKKworIzogYXBwbHkuYzozMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgItC/0YDQuCDQv9C+0LjRgdC60LU6XG4lLipzIgorCisjOiBhcHBseS5jOjMxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GJ0LXQvdGLINC00LDQvdC90YvQtSDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QsNGC0YfQsCDQtNC70Y8gwqslc8K7IgorCisjOiBhcHBseS5jOjMxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INCy0YvQv9C+0LvQvdC40YLRjCByZXZlcnNlLWFwcGx5INC00LvRjyDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QsNGC0YfQsCwg0LHQtdC3INC+0LHRgNCw0YnQtdC90LjRjyDQuNC30LzQtdC90LXQvdC40Lkg0LHQu9C+0LrQsCDCqyVzwrsiCisKKyM6IGFwcGx5LmM6MzE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INC/0YDQuNC80LXQvdC40YLRjCDQtNCy0L7QuNGH0L3Ri9C5INC/0LDRgtGHIMKrJXPCuyDQsdC10Lcg0YHRgtGA0L7QutC4INGBINGD0LrQsNC30LDQvdC90L7QuSDQv9C+0LvQvdC+0Lkg0LLQtdGA0YHQuNC10Lkg0LjQvdC00LXQutGB0LAiCisKKyM6IGFwcGx5LmM6MzE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCittc2dzdHIgItC/0LDRgtGHINC/0YDQuNC80LXQvdGP0YLRgdGPINC6INGE0LDQudC70YMgwqslc8K7ICglcyksINC90L4g0LXQs9C+INGC0LXQutGD0YnQtdC1INGB0L7QtNC10YDQttC40LzQvtC1INC90LUg0YHQvtC+0YLQstC10YHRgtCy0YPQtdGCINC+0LbQuNC00LDQtdC80L7QvNGDLiIKKworIzogYXBwbHkuYzozMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAi0L/QsNGC0Ycg0L/RgNC40LzQtdC90Y/QtdGC0YHRjyDQuiDQv9GD0YHRgtC+0LzRgyDRhNCw0LnQu9GDIMKrJXPCuywg0L3QviDRhNCw0LnQuyDQvdC1INC/0YPRgdGC0L7QuSIKKworIzogYXBwbHkuYzozMTk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQvdC10L7QsdGF0L7QtNC40LzRg9GOINC/0L7RgdGL0LvQutGDICVzINC00LvRjyDCqyVzwrsiCisKKyM6IGFwcGx5LmM6MzIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQvNC10L3QuNGC0Ywg0LTQstC+0LjRh9C90YvQuSDQv9Cw0YLRhyDQuiDCqyVzwrsiCisKKyM6IGFwcGx5LmM6MzIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAi0L/QvtGB0LvQtSDQv9GA0LjQvNC10L3QtdC90LjRjyDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QsNGC0YfQsCDQtNC70Y8gwqslc8K7INCx0YvQuyDQv9C+0LvRg9GH0LXQvSDQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YDQtdC30YPQu9GM0YLQsNGCICjQvtC20LjQtNCw0LvQvtGB0YwgJXMsINC/0L7Qu9GD0YfQtdC90L4gJXMpIgorCisjOiBhcHBseS5jOjMyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQv9GA0LjQvNC10L3QtdC90LjRjyDQuNC30LzQtdC90LXQvdC40Lk6ICVzOiVsZCIKKworIzogYXBwbHkuYzozMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC60LvRjtGH0LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQvdCwICVzIgorCisjOiBhcHBseS5jOjM0MTIgYXBwbHkuYzozNDIzIGFwcGx5LmM6MzQ2OSBtaWR4LmM6NTkgc2V0dXAuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMICVzIgorCisjOiBhcHBseS5jOjM0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi0YfRgtC10L3QuNC1INC40Lcgwqslc8K7INC30LAg0YHQuNC80LLQvtC70LjRh9C10YHQutC+0Lkg0YHRgdGL0LvQutC+0LkiCisKKyM6IGFwcGx5LmM6MzQ0OSBhcHBseS5jOjM2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgItC/0YPRgtGMICVzINCx0YvQuyDQv9C10YDQtdC40LzQtdC90L7QstCw0L0v0YPQtNCw0LvQtdC9IgorCisjOiBhcHBseS5jOjM1MzUgYXBwbHkuYzozNzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6INC90LXRgiDQsiDQuNC90LTQtdC60YHQtSIKKworIzogYXBwbHkuYzozNTQ0IGFwcGx5LmM6MzcxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiDQvdC1INGB0L7QstC/0LDQtNCw0LXRgiDRgSDQuNC90LTQtdC60YHQvtC8IgorCisjOiBhcHBseS5jOjM1NzkKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICLQsiDRgNC10L/QvtC30LjRgtC+0YDQuNC4INC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0L3QtdC+0LHRhdC+0LTQuNC80YvQuSDQtNCy0L7QuNGH0L3Ri9C5INC+0LHRitC10LrRgiDQtNC70Y8g0L7RgtC60LDRgtCwINC6INGC0YDRkdGF0YXQvtC00L7QstC+0LzRgyDRgdC70LjRj9C90LjRji4iCisKKyM6IGFwcGx5LmM6MzU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgItCe0YLQutCw0YIg0Log0YLRgNGR0YXRhdC+0LTQvtCy0L7QvNGDINGB0LvQuNGP0L3QuNGO4oCmXG4iCisKKyM6IGFwcGx5LmM6MzU5OCBhcHBseS5jOjM2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YLQtdC60YPRidC10LUg0YHQvtC00LXRgNC20LjQvNC+0LUgwqslc8K7IgorCisjOiBhcHBseS5jOjM2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrQsNGC0LjRgtGM0YHRjyDQuiDRgtGA0ZHRhdGF0L7QtNC+0LLQvtC80YMg0YHQu9C40Y/QvdC40Y7igKZcbiIKKworIzogYXBwbHkuYzozNjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAi0J/QsNGC0Ycg0L/RgNC40LzQtdC90LXQvSDQuiDCqyVzwrsg0YEg0LrQvtC90YTQu9C40LrRgtCw0LzQuC5cbiIKKworIzogYXBwbHkuYzozNjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLQn9Cw0YLRhyDQv9GA0LjQvNC10L3QtdC9INC6IMKrJXPCuyDQsdC10Lcg0L7RiNC40LHQvtC6LlxuIgorCisjOiBhcHBseS5jOjM2NTkKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICLQv9Cw0YLRhyDRg9C00LDQu9C10L3QuNGPINC90LUg0YPQtNCw0LvQuNC7INGB0L7QtNC10YDQttC40LzQvtC1INGE0LDQudC70LAiCisKKyM6IGFwcGx5LmM6MzczMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6INC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRgtC40L8iCisKKyM6IGFwcGx5LmM6MzczNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzINC40LzQtdC10YIg0YLQuNC/ICVvLCDQsCDQvtC20LjQtNCw0LvRgdGPICVvIgorCisjOiBhcHBseS5jOjM4ODUgYXBwbHkuYzozODg3IHJlYWQtY2FjaGUuYzo4MzAgcmVhZC1jYWNoZS5jOjg1NgorIzogcmVhZC1jYWNoZS5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQv9GD0YLRjCDCqyVzwrsiCisKKyM6IGFwcGx5LmM6Mzk0MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiDRg9C20LUg0YHQvtC00LXRgNC20LjRgtGB0Y8g0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGFwcGx5LmM6Mzk0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVzOiDRg9C20LUg0YHQvtC00LXRgNC20LjRgtGB0Y8g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYXBwbHkuYzozOTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAi0L3QvtCy0YvQuSDRgNC10LbQuNC8INC00L7RgdGC0YPQv9CwICglbykg0LTQu9GPICVzINC90LUg0YHQvtC+0YLQstC10YLRgdGC0LLRg9C10YIg0YHRgtCw0YDQvtC80YMg0YDQtdC20LjQvNGDINC00L7RgdGC0YPQv9CwICglbykiCisKKyM6IGFwcGx5LmM6Mzk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgItC90L7QstGL0Lkg0YDQtdC20LjQvCDQtNC+0YHRgtGD0L/QsCAoJW8pINC00LvRjyAlcyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGB0YLQsNGA0L7QvNGDINGA0LXQttC40LzRgyDQtNC+0YHRgtGD0L/QsCAoJW8pINC00LvRjyAlcyIKKworIzogYXBwbHkuYzozOTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLQt9Cw0YLRgNC+0L3Rg9GC0YvQuSDRhNCw0LnQuyDCqyVzwrsg0L3QsNGF0L7QtNC40YLRgdGPINC30LAg0YHQuNC80LLQvtC70LjRh9C10YHQutC+0Lkg0YHRgdGL0LvQutC+0LkiCisKKyM6IGFwcGx5LmM6Mzk5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiDQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQuNC80LXQvdC40YLRjCDQv9Cw0YLRhyIKKworIzogYXBwbHkuYzo0MDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC/0LDRgtGH0LAgJXPigKYiCisKKyM6IGFwcGx5LmM6NDEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDQvtCxIHNoYTEg0L7RgtGB0YPRgtGB0YLQstGD0LXRgiDQuNC70Lgg0LHQtdGB0L/QvtC70LXQt9C90LAg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyAlcyIKKworIzogYXBwbHkuYzo0MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAi0LjQt9C80LXQvdC10L0g0YDQtdC20LjQvCDQtNC70Y8gJXMsINC60L7RgtC+0YDRi9C5INC90LUg0L3QsNGF0L7QtNC40YLRgdGPINCyINGC0LXQutGD0YnQtdC8IEhFQUQiCisKKyM6IGFwcGx5LmM6NDExMgorIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0L7QsSBzaGExINC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0LjQu9C4INCx0LXRgdC/0L7Qu9C10LfQvdCwICglcykuIgorCisjOiBhcHBseS5jOjQxMTcgYnVpbHRpbi9jaGVja291dC5jOjI1NyBidWlsdGluL3Jlc2V0LmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgItGB0LHQvtC5IG1ha2VfY2FjaGVfZW50cnkg0LTQu9GPINC/0YPRgtC4IMKrJXPCuyIKKworIzogYXBwbHkuYzo0MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhZGQgJXMgdG8gdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0YwgJXMg0LLQviDQstGA0LXQvNC10L3QvdGL0Lkg0LjQvdC00LXQutGBIgorCisjOiBhcHBseS5jOjQxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINCy0YDQtdC80LXQvdC90YvQuSDQuNC90LTQutC10LrRgSDQsiAlcyIKKworIzogYXBwbHkuYzo0MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCAlcyDQuNC3INC40L3QtNC10LrRgdCwIgorCisjOiBhcHBseS5jOjQzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICLQv9C+0LLRgNC10LbQtNC10L3QvdGL0Lkg0L/QsNGC0Ycg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyAlcyIKKworIzogYXBwbHkuYzo0MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDRgdC+0LfQtNCw0L3QvdC+0LPQviDRhNCw0LnQu9CwIMKrJXPCuyIKKworIzogYXBwbHkuYzo0MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90YvQuSDRhNCw0LnQuyDQtNC70Y8g0YHQvtC30LTQsNC90L3QvtCz0L4g0YTQsNC50LvQsCAlcyIKKworIzogYXBwbHkuYzo0MzIzIGFwcGx5LmM6NDQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQt9Cw0L/QuNGB0Ywg0LIg0LrRjdGI0LUg0LTQu9GPICVzIgorCisjOiBhcHBseS5jOjQzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQsiDCqyVzwrsiCisKKyM6IGFwcGx5LmM6NDM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAi0LfQsNC60YDRi9GC0LjQtSDRhNCw0LnQu9CwIMKrJXPCuyIKKworIzogYXBwbHkuYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINGE0LDQudC7IMKrJXPCuyDRgSDRgNC10LbQuNC80L7QvCDQtNC+0YHRgtGD0L/QsCAlbyIKKworIzogYXBwbHkuYzo0NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgItCf0LDRgtGHICVzINC/0YDQuNC80LXQvdC10L0g0LHQtdC3INC+0YjQuNCx0L7Qui4iCisKKyM6IGFwcGx5LmM6NDU0NgorbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICLQstC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAiCisKKyM6IGFwcGx5LmM6NDU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gItCf0YDQuNC80LXQvdC10L3QuNC1INC/0LDRgtGH0LAgJSVzINGBICVkINC+0YLQutCw0LfQvtC84oCmIgorbXNnc3RyWzFdICLQn9GA0LjQvNC10L3QtdC90LjQtSDQv9Cw0YLRh9CwICUlcyDRgSAlZCDQvtGC0LrQsNC30LDQvNC44oCmIgorbXNnc3RyWzJdICLQn9GA0LjQvNC10L3QtdC90LjQtSDQv9Cw0YLRh9CwICUlcyDRgSAlZCDQvtGC0LrQsNC30LDQvNC44oCmIgorbXNnc3RyWzNdICLQn9GA0LjQvNC10L3QtdC90LjQtSDQv9Cw0YLRh9CwICUlcyDRgSAlZCDQvtGC0LrQsNC30LDQvNC44oCmIgorCisjOiBhcHBseS5jOjQ1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICLRg9GB0LXRh9C10L3QuNC1INC40LzQtdC90LggLnJlaiDRhNCw0LnQu9CwINC00L4gJS4qcy5yZWoiCisKKyM6IGFwcGx5LmM6NDU2OCBidWlsdGluL2ZldGNoLmM6ODM3IGJ1aWx0aW4vZmV0Y2guYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMICVzIgorCisjOiBhcHBseS5jOjQ1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAi0JHQu9C+0Log4oSWJWQg0L/RgNC40LzQtdC90LXQvSDQsdC10Lcg0L7RiNC40LHQvtC6LiIKKworIzogYXBwbHkuYzo0NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAi0JHQu9C+0Log4oSWJWQg0L7RgtC60LvQvtC90LXQvS4iCisKKyM6IGFwcGx5LmM6NDY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkIHBhdGNoICclcycuIgorbXNnc3RyICLQn9Cw0YLRhyDCqyVzwrsg0L/RgNC+0L/Rg9GJ0LXQvS4iCisKKyM6IGFwcGx5LmM6NDcwNAorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAi0L3QtSDRgNCw0YHQv9C+0LfQvdCw0L3QvdGL0Lkg0LLQstC+0LQiCisKKyM6IGFwcGx5LmM6NDcyNAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGE0LDQudC7INC40L3QtNC10LrRgdCwIgorCisjOiBhcHBseS5jOjQ4NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDQv9Cw0YLRhyDCqyVzwrs6ICVzIgorCisjOiBhcHBseS5jOjQ5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAi0L/RgNC+0L/Rg9GJ0LXQvdCwICVkINC+0YjQuNCx0LrQsCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFIgorbXNnc3RyWzFdICLQv9GA0L7Qv9GD0YnQtdC90L4gJWQg0L7RiNC40LHQutC4INCyINC/0YDQvtCx0LXQu9GM0L3Ri9GFINGB0LjQvNCy0L7Qu9Cw0YUiCittc2dzdHJbMl0gItC/0YDQvtC/0YPRidC10L3QviAlZCDQvtGI0LjQsdC+0Log0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhSIKK21zZ3N0clszXSAi0L/RgNC+0L/Rg9GJ0LXQvdC+ICVkINC+0YjQuNCx0L7QuiDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFIgorCisjOiBhcHBseS5jOjQ5MTIgYXBwbHkuYzo0OTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkINGB0YLRgNC+0LrQsCDQtNC+0LHQsNCy0LjQu9CwINC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFLiIKK21zZ3N0clsxXSAiJWQg0YHRgtGA0L7QutC4INC00L7QsdCw0LLQuNC70Lgg0L7RiNC40LHQutC4INCyINC/0YDQvtCx0LXQu9GM0L3Ri9GFINGB0LjQvNCy0L7Qu9Cw0YUuIgorbXNnc3RyWzJdICIlZCDRgdGC0YDQvtC6INC00L7QsdCw0LLQuNC70Lgg0L7RiNC40LHQutC4INCyINC/0YDQvtCx0LXQu9GM0L3Ri9GFINGB0LjQvNCy0L7Qu9Cw0YUuIgorbXNnc3RyWzNdICIlZCDRgdGC0YDQvtC6INC00L7QsdCw0LLQuNC70Lgg0L7RiNC40LHQutC4INCyINC/0YDQvtCx0LXQu9GM0L3Ri9GFINGB0LjQvNCy0L7Qu9Cw0YUuIgorCisjOiBhcHBseS5jOjQ5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQg0YHRgtGA0L7QutCwINC00L7QsdCw0LLQu9C10L3QsCDQv9C+0YHQu9C1INC40YHQv9GA0LDQstC70LXQvdC40Y8g0L7RiNC40LHQvtC6INCyINC/0YDQvtCx0LXQu9Cw0YUuIgorbXNnc3RyWzFdICIlZCDRgdGC0YDQvtC60Lgg0LTQvtCx0LDQstC70LXQvdC+INC/0L7RgdC70LUg0LjRgdC/0YDQsNCy0LvQtdC90LjRjyDQvtGI0LjQsdC+0Log0LIg0L/RgNC+0LHQtdC70LDRhS4iCittc2dzdHJbMl0gIiVkINGB0YLRgNC+0Log0LTQvtCx0LDQstC70LXQvdC+INC/0L7RgdC70LUg0LjRgdC/0YDQsNCy0LvQtdC90LjRjyDQvtGI0LjQsdC+0Log0LIg0L/RgNC+0LHQtdC70LDRhS4iCittc2dzdHJbM10gIiVkINGB0YLRgNC+0LrQuCDQtNC+0LHQsNCy0LvQtdC90L4g0L/QvtGB0LvQtSDQuNGB0L/RgNCw0LLQu9C10L3QuNGPINC+0YjQuNCx0L7QuiDQsiDQv9GA0L7QsdC10LvQsNGFLiIKKworIzogYXBwbHkuYzo0OTM2IGJ1aWx0aW4vYWRkLmM6NTQwIGJ1aWx0aW4vbXYuYzozMDEgYnVpbHRpbi9ybS5jOjM5MAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC90L7QstGL0Lkg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAiCisKKyM6IGFwcGx5LmM6NDk2MyBhcHBseS5jOjQ5NjYgYnVpbHRpbi9hbS5jOjIyMTAgYnVpbHRpbi9hbS5jOjIyMTMKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAgYnVpbHRpbi9mZXRjaC5jOjExOCBidWlsdGluL21lcmdlLmM6MjcxCisjOiBidWlsdGluL3B1bGwuYzoyMDcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwNworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODQ5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODUyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjA5MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE5NworbXNnaWQgInBhdGgiCittc2dzdHIgItC/0YPRgtGMIgorCisjOiBhcHBseS5jOjQ5NjQKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLQvdC1INC/0YDQuNC80LXQvdGP0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0L/QviDRg9C60LDQt9Cw0L3QvdC+0LzRgyDQv9GD0YLQuCIKKworIzogYXBwbHkuYzo0OTY3Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi0L/RgNC40LzQtdC90Y/RgtGMINC40LfQvNC10L3QtdC90LjRjyDQv9C+INGD0LrQsNC30LDQvdC90L7QvNGDINC/0YPRgtC4IgorCisjOiBhcHBseS5jOjQ5NjkgYnVpbHRpbi9hbS5jOjIyMTkKK21zZ2lkICJudW0iCittc2dzdHIgItC60L7Qu9C40YfQtdGB0YLQstC+IgorCisjOiBhcHBseS5jOjQ5NzAKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0YwgPNC60L7Qu9C40YfQtdGB0YLQstC+PiDQstC10LTRg9GJ0LjRhSDQutC+0YHRi9GFINGH0LXRgNGCINC40Lcg0YLRgNCw0LTQuNGG0LjQvtC90L3Ri9GFINC/0YPRgtC10Lkg0YHQv9C40YHQutCwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogYXBwbHkuYzo0OTczCittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC00L7QsdCw0LLQu9C10L3QuNGPLCDRgdC00LXQu9Cw0L3QvdGL0LUg0Y3RgtC40Lwg0L/QsNGC0YfQtdC8IgorCisjOiBhcHBseS5jOjQ5NzUKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgItCy0LzQtdGB0YLQviDQv9GA0LjQvNC10L3QtdC90LjRjyDQv9Cw0YLRh9CwINCy0YvQstC10YHRgtC4INGB0YLQsNGC0LjRgdGC0LjQutGDINC00L7QsdCw0LLQu9C10L3QuNC5INC4INGD0LTQsNC70LXQvdC40Lkg0LTQu9GPINCy0LLQvtC00LAiCisKKyM6IGFwcGx5LmM6NDk3OQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LrQvtC70LjRh9C10YHRgtCy0L4g0LTQvtCx0LDQstC70LXQvdC90YvRhSDQuCDRg9C00LDQu9C10L3QvdGL0YUg0YHRgtGA0L7QuiDQsiDQtNC10YHRj9GC0LjRh9C90L7QvCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuCIKKworIzogYXBwbHkuYzo0OTgxCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi0LLQvNC10YHRgtC+INC/0YDQuNC80LXQvdC10L3QuNGPINC/0LDRgtGH0LAg0LLRi9Cy0LXRgdGC0Lgg0YHQstC+0LTQutGDINC40LfQvNC10L3QtdC90LjQuSDQtNC70Y8g0LLQstC+0LTQsCIKKworIzogYXBwbHkuYzo0OTgzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi0LLQvNC10YHRgtC+INC/0YDQuNC80LXQvdC10L3QuNGPINC/0LDRgtGH0LAg0L/RgNC+0LLQtdGA0LjRgtGMINC/0L7QtNGF0L7QtNC40YIg0LvQuCDQvtC9IgorCisjOiBhcHBseS5jOjQ5ODUKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgItC/0YDQvtCy0LXRgNC40YLRjCwg0YfRgtC+INC/0LDRgtGHINC/0YDQuNC80LXQvdGP0LXRgtGB0Y8g0Log0YLQtdC60YPRidC10LzRgyDQuNC90LTQtdC60YHRgyIKKworIzogYXBwbHkuYzo0OTg3Cittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICLQv9C+0LzQtdGH0LDRgtGMINC90L7QstGL0LUg0YTQsNC50LvRiyDRgSDCq2dpdCBhZGQgLS1pbnRlbnQtdG8tYWRkwrsiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQv9GA0LjQvNC10L3QuNGC0Ywg0L/QsNGC0YcsINC90LUg0LjQt9C80LXQvdGP0Y8g0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IGFwcGx5LmM6NDk5MQorbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgItC/0YDQuNC90Y/RgtGMINC/0LDRgtGHLCDQutC+0YLQvtGA0YvQuSDQt9Cw0YLRgNCw0LPQuNCy0LDQtdGCINGE0LDQudC70Ysg0LfQsCDRgNCw0LHQvtGH0LjQvCDQutCw0YLQsNC70L7Qs9C+0LwiCisKKyM6IGFwcGx5LmM6NDk5NAorbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICLQsCDRgtCw0LrQttC1INC/0YDQuNC80LXQvdC40YLRjCDQv9Cw0YLRhyAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDRgSAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBhcHBseS5jOjQ5OTYKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICLQv9C+0L/Ri9GC0LDRgtGM0YHRjyDRgdC00LXQu9Cw0YLRjCDRgtGA0LXRhdGF0L7QtNC+0LLQvtC1INGB0LvQuNGP0L3QuNC1LCDQtdGB0LvQuCDQv9Cw0YLRhyDQvdC1INC/0YDQuNC80LXQvdGP0LXRgtGB0Y8iCisKKyM6IGFwcGx5LmM6NDk5OAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICLQv9C+0YHRgtGA0L7QuNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INC40L3QtNC10LrRgSwg0L7RgdC90L7QstCw0L3QvdGL0Lkg0L3QsCDQstGB0YLRgNC+0LXQvdC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCDQvtCxINC40L3QtNC10LrRgdC1IgorCisjOiBhcHBseS5jOjUwMDEgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgItC/0YPRgtC4LCDQvtGC0LTQtdC70ZHQvdC90YvQtSDQndCj0JvQldCS0KvQnCDRgdC40LzQstC+0LvQvtC8IgorCisjOiBhcHBseS5jOjUwMDMKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgItGD0LTQvtGB0YLQvtCy0LXRgNC40YLRjNGB0Y8sINGH0YLQviDQv9C+INC60YDQsNC50L3QtdC5INC80LXRgNC1IDxuPiDRgdGC0YDQvtC6INC60L7QvdGC0LXQutGB0YLQsCDRgdC+0LLQv9Cw0LTQsNGO0YIiCisKKyM6IGFwcGx5LmM6NTAwNCBidWlsdGluL2FtLmM6MjE5OCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk3CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk5IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTcgYnVpbHRpbi9yZWJhc2UuYzoxNDE1Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1IgorCisjOiBhcHBseS5jOjUwMDUKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAi0L7Qv9GA0LXQtNC10LvRj9GC0Ywg0L3QvtCy0YvQtSDQuNC70Lgg0LzQvtC00LjRhNC40YbQuNGA0L7QstCw0L3QvdGL0LUg0YHRgtGA0L7QutC4LCDRgyDQutC+0YLQvtGA0YvRhSDQtdGB0YLRjCDQvtGI0LjQsdC60Lgg0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhSIKKworIzogYXBwbHkuYzo1MDA4IGFwcGx5LmM6NTAxMQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhSDQv9GA0Lgg0L/QvtC40YHQutC1INC60L7QvdGC0LXQutGB0YLQsCIKKworIzogYXBwbHkuYzo1MDE0Cittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgItC/0YDQuNC80LXQvdC40YLRjCDQv9Cw0YLRhyDRgSDQvtCx0YDQsNGJ0LXQvdC40LXQvCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGFwcGx5LmM6NTAxNgorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICLQvdC1INC+0LbQuNC00LDRgtGMINC60LDQuiDQvNC40L3QuNC80YPQvCDQvtC00L3QvtC5INGB0YLRgNC+0LrQuCDQutC+0L3RgtC10LrRgdGC0LAiCisKKyM6IGFwcGx5LmM6NTAxOAorbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLQvtGB0YLQsNCy0LjRgtGMINC+0YLQutC70L7QvdC10L3QvdGL0LUg0LHQu9C+0LrQuCDQuNC30LzQtdC90LXQvdC40Lkg0LIg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNGFICoucmVqINGE0LDQudC70LDRhSIKKworIzogYXBwbHkuYzo1MDIwCittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQv9C10YDQtdC60YDRi9Cy0LDRjtGJ0LjQtdGB0Y8g0LHQu9C+0LrQuCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGFwcGx5LmM6NTAyMSBidWlsdGluL2FkZC5jOjI5MSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMTcgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTggYnVpbHRpbi9mc2NrLmM6Nzg2CisjOiBidWlsdGluL2xvZy5jOjIwNDUgYnVpbHRpbi9tdi5jOjEyMyBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgItCx0YvRgtGMINC80L3QvtCz0L7RgdC70L7QstC90LXQtSIKKworIzogYXBwbHkuYzo1MDIzCittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQvdC10LrQvtGA0YDQtdC60YLQvdC+INC+0L/RgNC10LTQtdC70LXQvdC90YvQtSDQv9GA0L7Qv9GD0YnQtdC90L3Ri9C1INC/0YPRgdGC0YvQtSDRgdGC0YDQvtC60Lgg0LIg0LrQvtC90YbQtSDRhNCw0LnQu9CwIgorCisjOiBhcHBseS5jOjUwMjYKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgItC90LUg0LTQvtCy0LXRgNGP0YLRjCDQutC+0LvQuNGH0LXRgdGC0LLRgyDRgdGC0YDQvtC6INC40Lcg0LfQsNCz0L7Qu9C+0LLQutCwINCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBhcHBseS5jOjUwMjggYnVpbHRpbi9hbS5jOjIyMDcKK21zZ2lkICJyb290IgorbXNnc3RyICLQutC+0YDQtdC90YwiCisKKyM6IGFwcGx5LmM6NTAyOQorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0YwgPNC60L7RgNC10L3RjD4g0YHQv9C10YDQtdC00Lgg0LrQviDQstGB0LXQvCDQuNC80LXQvdCw0Lwg0YTQsNC50LvQvtCyIgorCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPNC+0L/RhtC40Lg+XSA80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsD4gWzzQv9GD0YLRjD7igKZdIgorCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKKworIzogYXJjaGl2ZS5jOjE2Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+ICIKKyJbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPNGA0LXQv9C+0LfQuNGC0L7RgNC40Lk+IFstLWV4ZWMgPNC60L7QvNCw0L3QtNCwPl0gWzzQvtC/0YbQuNC4Pl0gPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LA+IFs80L/Rg9GC0Yw+4oCmXSIKKworIzogYXJjaGl2ZS5jOjE3Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPNGA0LXQv9C+0LfQuNGC0L7RgNC40Lk+IFstLWV4ZWMgPNC60L7QvNCw0L3QtNCwPl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTc3IGJ1aWx0aW4vYWRkLmM6NTE2IGJ1aWx0aW4vcm0uYzoyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjQutCw0YLQvtGAINC/0YPRgtC4IMKrJXPCuyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINC90Lgg0L7QtNC90L7QvNGDINGE0LDQudC70YMiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgItC90LXRgiDRgtCw0LrQvtC5INGB0YHRi9C70LrQuDogJS4qcyIKKworIzogYXJjaGl2ZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJXMiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQuNC80Y8g0L7QsdGK0LXQutGC0LA6ICVzIgorCisjOiBhcmNoaXZlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHRyZWUgb2JqZWN0OiAlcyIKK21zZ3N0ciAi0L3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lkg0L7QsdGK0LXQutGCINC00LXRgNC10LLQsDogJXMiCisKKyM6IGFyY2hpdmUuYzo0MjQKK21zZ2lkICJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIKK21zZ3N0ciAi0YLQtdC60YPRidC40Lkg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0L3QtSDQvtGC0YHQu9C10LbQuNCy0LDQtdGC0YHRjyIKKworIzogYXJjaGl2ZS5jOjQ1NQorbXNnaWQgImZtdCIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCIgorCisjOiBhcmNoaXZlLmM6NDU1Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgItGE0L7RgNC80LDRgiDQsNGA0YXQuNCy0LAiCisKKyM6IGFyY2hpdmUuYzo0NTYgYnVpbHRpbi9sb2cuYzoxNTU3Cittc2dpZCAicHJlZml4IgorbXNnc3RyICLQv9GA0LXRhNC40LrRgSIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgItC00L7QsdCw0LLQu9GP0YLRjCDQv9GA0LXRhNC40LrRgSDQv9C10YDQtdC0INC60LDQttC00YvQvCDQv9GD0YLQtdC8INGE0LDQudC70LAg0LIg0LDRgNGF0LjQstC1IgorCisjOiBhcmNoaXZlLmM6NDU4IGJ1aWx0aW4vYmxhbWUuYzo4MjEgYnVpbHRpbi9ibGFtZS5jOjgyMgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEyOSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA5MQorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwOTMgYnVpbHRpbi9ncmVwLmM6ODk1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MyBidWlsdGluL25vdGVzLmM6NDEyCisjOiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzIHBhcnNlLW9wdGlvbnMuaDoxNzcKK21zZ2lkICJmaWxlIgorbXNnc3RyICLRhNCw0LnQuyIKKworIzogYXJjaGl2ZS5jOjQ1OSBidWlsdGluL2FyY2hpdmUuYzo5MAorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi0LfQsNC/0LjRgdGMINCw0YDRhdC40LLQsCDQsiDRjdGC0L7RgiDRhNCw0LnQuyIKKworIzogYXJjaGl2ZS5jOjQ2MQorbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItGH0LjRgtCw0YLRjCAuZ2l0YXR0cmlidXRlcyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBhcmNoaXZlLmM6NDYyCittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAi0L7RgtGH0LXRgiDQvtCxINCw0YDRhdC40LLQuNGA0L7QstCw0L3QvdGL0YUg0YTQsNC50LvQsNGFINCyIHN0ZGVyciIKKworIzogYXJjaGl2ZS5jOjQ2MworbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgItGC0L7Qu9GM0LrQviDRhdGA0LDQvdC10L3QuNC1IgorCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICLRgdC20LjQvNCw0YLRjCDQsdGL0YHRgtGA0LXQtSIKKworIzogYXJjaGl2ZS5jOjQ3MgorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAi0YHQttC40LzQsNGC0Ywg0LvRg9GH0YjQtSIKKworIzogYXJjaGl2ZS5jOjQ3NQorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAi0L/QtdGA0LXRh9C40YHQu9C40YLRjCDQv9C+0LTQtNC10YDQttC40LLQsNC10LzRi9C1INGE0L7RgNC80LDRgtGLINCw0YDRhdC40LLQvtCyIgorCisjOiBhcmNoaXZlLmM6NDc3IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzoxMTAgYnVpbHRpbi9jbG9uZS5jOjExMworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTgKK21zZ2lkICJyZXBvIgorbXNnc3RyICLRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBhcmNoaXZlLmM6NDc4IGJ1aWx0aW4vYXJjaGl2ZS5jOjkyCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgItC/0L7Qu9GD0YfQuNGC0Ywg0LDRgNGF0LjQsiDQuNC3INCy0L3QtdGI0L3QtdCz0L4gPNGA0LXQv9C+0LfQuNGC0L7RgNC40Y8+IgorCisjOiBhcmNoaXZlLmM6NDc5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICLQutC+0LzQsNC90LTQsCIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5NAorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0LrQvtC80LDQvdC00LUgZ2l0LXVwbG9hZC1hcmNoaXZlINC90LAg0LzQsNGI0LjQvdC1INGBINCy0L3QtdGI0L3QuNC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCIKKworIzogYXJjaGl2ZS5jOjQ4NworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICLQndC10L7QttC40LTQsNC90L3QsNGPINC+0L/RhtC40Y8gLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0ODkKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAi0J7Qv9GG0LjRjyAtLWV4ZWMg0LzQvtC20LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINGC0L7Qu9GM0LrQviDQstC80LXRgdGC0LUg0YEgLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLW91dHB1dCIKK21zZ3N0ciAi0J3QtdC+0LbQuNC00LDQvdC90LDRjyDQvtC/0YbQuNGPIC0tb3V0cHV0IgorCisjOiBhcmNoaXZlLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90YvQuSDRhNC+0YDQvNCw0YIg0LDRgNGF0LjQstCwIMKrJXPCuyIKKworIzogYXJjaGl2ZS5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICLQkNGA0LPRg9C80LXQvdGCINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyDQtNC70Y8g0YTQvtGA0LzQsNGC0LAgwqslc8K7OiAtJWQiCisKKyM6IGFyY2hpdmUtdGFyLmM6MTI1IGFyY2hpdmUtemlwLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQv9C+0YLQvtC6INC00LLQvtC40YfQvdC+0LPQviDQvtCx0YrQtdC60YLQsCAlcyIKKworIzogYXJjaGl2ZS10YXIuYzoyNjAgYXJjaGl2ZS16aXAuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIKK21zZ3N0ciAi0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNGL0Lkg0YDQtdC20LjQvCDQtNC+0YHRgtGD0L/QsCDQuiDRhNCw0LnQu9GDOiAwJW8gKFNIQTE6ICVzKSIKKworIzogYXJjaGl2ZS10YXIuYzoyODcgYXJjaGl2ZS16aXAuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMICVzIgorCisjOiBhcmNoaXZlLXRhci5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJyVzJyBmaWx0ZXIiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMINGE0LjQu9GM0YLRgCDCqyVzwrsiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDYyCittc2dpZCAidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQvdCw0L/RgNCw0LLQuNGC0Ywg0LTQtdGB0LrRgNC40L/RgtC+0YAiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICLRhNC40LvRjNGC0YAgwqslc8K7INGB0L7QvtCx0YnQuNC7INC+0LEg0L7RiNC40LHQutC1IgorCisjOiBhcmNoaXZlLXppcC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiCittc2dzdHIgItC/0YPRgtGMINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C8IFVURi04OiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCB0b28gbG9uZyAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCittc2dzdHIgItC/0YPRgtGMINGB0LvQuNGI0LrQvtC8INC00LvQuNC90L3Ri9C5ICglZCDRgdC40LzQstC+0LvQvtCyLCBTSEExOiAlcyk6ICVzIgorCisjOiBhcmNoaXZlLXppcC5jOjQ3NCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyNiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgItC+0YjQuNCx0LrQsCDRgdC20LDRgtC40Y8gKCVkKSIKKworIzogYXJjaGl2ZS16aXAuYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICU8UFJJdU1BWD4iCittc2dzdHIgItC+0YLQvNC10YLQutCwINCy0YDQtdC80LXQvdC4INGB0LvQuNGI0LrQvtC8INCx0L7Qu9GM0YjQsNGPINC00LvRjyDRjdGC0L7QuSDRgdC40YHRgtC10LzRizogJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLipzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80YvQvCDQuNC80LXQvdC10Lwg0LDRgtGA0LjQsdGD0YLQsCIKKworIzogYXR0ci5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIiVzINC90LUg0YDQsNC30YDQtdGI0LXQvdC+OiAlczolZCIKKworIzogYXR0ci5jOjQwOAorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAi0J7RgtGA0LjRhtCw0Y7RidC40LUg0YjQsNCx0LvQvtC90Ysg0LIg0LDRgtGA0LjQsdGD0YLQsNGFIGdpdCDQuNCz0L3QvtGA0LjRgNGD0Y7RgtGB0Y8uXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrXFwhwrsg0LTQu9GPINCx0YPQutCy0LDQu9GM0L3QvtCz0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0YHQuNC80LLQvtC70LAg0LIg0LfQvdCw0YfQtdC90LjQuCDCq9Cy0L7RgdC60LvQuNGG0LDRgtC10LvRjNC90YvQuSDQt9C90LDQusK7LiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgItCf0LvQvtGF0L7QtSDRgdC+0LTQtdGA0LbQuNC80L7QtSDRhNCw0LnQu9CwIMKrJXPCuzogJXMiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0YDQvtC00L7Qu9C20LjRgtGMINCx0LjQvdCw0YDQvdGL0Lkg0L/QvtC40YHQuiFcbiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LjQvNGPINC60L7QvNC80LjRgtCwICVzIgorCisjOiBiaXNlY3QuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAi0JHQsNC30LAg0YHQu9C40Y/QvdC40Y8gJXMg0Y/QstC70Y/QtdGC0YHRjyDQv9C70L7RhdC40Lwg0LrQvtC80LzQuNGC0L7QvC5cbtCt0YLQviDQt9C90LDRh9C40YIsINGH0YLQviDQvtGI0LjQsdC60LAg0LHRi9C70LAg0LjRgdC/0YDQsNCy0LvQtdC90LAg0LPQtNC1LdGC0L4g0LzQtdC20LTRgyAlcyDQuCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAi0JHQsNC30LAg0YHQu9C40Y/QvdC40Y8gJXMg0Y/QstC70Y/QtdGC0YHRjyDQvdC+0LLQvtC5Llxu0KHQstC+0LnRgdGC0LLQviDQsdGL0LvQviDQuNC30LzQtdC90LXQvdC+INCz0LTQtS3RgtC+INC80LXQttC00YMgJXMg0LggWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKyJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICLQkdCw0LfQsCDRgdC70LjRj9C90LjRjyAlcyDRj9Cy0LvRj9C10YLRgdGPICVzLlxu0K3RgtC+INC30L3QsNGH0LjRgiwg0YfRgtC+IMKrJXPCuyDQutC+0LzQvNC40YIg0L3QsNGF0L7QtNC40YLRgdGPINCz0LTQtS3RgtC+INC80LXQttC00YMgJXMg0LggWyVzXS5cbiIKKworIzogYmlzZWN0LmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTb21lICVzIHJldnMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlICVzIHJldi5cbiIKKyJnaXQgYmlzZWN0IGNhbm5vdCB3b3JrIHByb3Blcmx5IGluIHRoaXMgY2FzZS5cbiIKKyJNYXliZSB5b3UgbWlzdG9vayAlcyBhbmQgJXMgcmV2cz9cbiIKK21zZ3N0ciAi0J3QtdGB0LrQvtC70YzQutC+ICVzINC60L7QvNC80LjRgtC+0LIg0L3QtSDRj9Cy0LvRj9GO0YLRgdGPINC/0YDQtdC00LrQsNC80LggJXMg0LrQvtC80LzQuNGC0LAuXG7QkiDRjdGC0L7QvCDRgdC70YPRh9Cw0LUgZ2l0IGJpc2VjdCDQvdC1INC80L7QttC10YIg0YDQsNCx0L7RgtCw0YLRjCDQv9GA0LDQstC40LvRjNC90L4uXG7QktC+0LfQvNC+0LbQvdC+LCDQstGLINC/0LXRgNC10L/Rg9GC0LDQu9C4INGA0LXQtNCw0LrRhtC40LggJXMg0LggJXMg0LzQtdGB0YLQsNC80Lg/XG4iCisKKyM6IGJpc2VjdC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICLQkdCw0LfQsCDRgdC70LjRj9C90LjRjyDQvNC10LbQtNGDICVzINC4IFslc10g0LTQvtC70LbQvdC+INCx0YvRgtGMINC/0YDQvtC/0YPRidC10L3QsC5cbtCf0L7RjdGC0L7QvNGDINC80Ysg0L3QtSDQvNC+0LbQtdC8INCx0YvRgtGMINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0L/QtdGA0LLRi9C5ICVzINC60L7QvNC80LjRgiDQvdCw0YXQvtC00LjRgtGB0Y8g0LzQtdC20LTRgyAlcyDQuCAlcy5cbtCd0L4g0LLRgdC1INC20LUg0L/RgNC+0LTQvtC70LbQsNC10Lwg0L/QvtC40YHQui4iCisKKyM6IGJpc2VjdC5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIgorbXNnc3RyICLQkdC40L3QsNGA0L3Ri9C5INC/0L7QuNGB0Lo6INCx0LDQt9CwINGB0LvQuNGP0L3QuNGPINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQv9GA0L7QstC10YDQtdC90LBcbiIKKworIzogYmlzZWN0LmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIgorbXNnc3RyICLQvdGD0LbQvdC+INGD0LrQsNC30LDRgtGMICVzINGA0LXQtNCw0LrRhtC40Y4iCisKKyM6IGJpc2VjdC5jOjg4NCBidWlsdGluL25vdGVzLmM6MTc3IGJ1aWx0aW4vdGFnLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGE0LDQudC7IMKrJXPCuyIKKworIzogYmlzZWN0LmM6OTI4IGJ1aWx0aW4vbWVyZ2UuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyDCqyVzwrsiCisKKyM6IGJpc2VjdC5jOjk1OAorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0YfRgtC10L3QuNC4INGB0YHRi9C70L7QuiDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QvtC40YHQutCwIgorCisjOiBiaXNlY3QuYzo5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iCittc2dzdHIgIiVzINCx0YvQu9CwINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDQuCAlcyDQuCAlc1xuIgorCisjOiBiaXNlY3QuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgItCi0LXRgdGC0LjRgNGD0LXQvNGL0Lkg0LrQvtC80LzQuNGCINC90LUg0L3QsNC50LTQtdC9Llxu0JLQvtC30LzQvtC20L3Qviwg0LLRiyDQvdCw0YfQsNC70Lgg0L/QvtC40YHQuiDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtCz0L4g0L/QsNGA0LDQvNC10YLRgNCwINC/0YPRgtC4P1xuIgorCisjOiBiaXNlY3QuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIijQv9GA0LjQvNC10YDQvdC+ICVkINGI0LDQsykiCittc2dzdHJbMV0gIijQv9GA0LjQvNC10YDQvdC+ICVkINGI0LDQs9CwKSIKK21zZ3N0clsyXSAiKNC/0YDQuNC80LXRgNC90L4gJWQg0YjQsNCz0L7QsikiCittc2dzdHJbM10gIijQv9GA0LjQvNC10YDQvdC+ICVkINGI0LDQs9C+0LIpIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGxhc3QgJXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoICIocm91Z2hseSAlZAorIy4gc3RlcHMpIiB0cmFuc2xhdGlvbi4KKyM6IGJpc2VjdC5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICLQkdC40L3QsNGA0L3Ri9C5INC/0L7QuNGB0Lo6ICVkINGA0LXQtNCw0LrRhtC40Y4g0L7RgdGC0LDQu9C+0YHRjCDQv9GA0L7QstC10YDQuNGC0Ywg0L/QvtGB0LvQtSDRjdGC0L7QuSAlc1xuIgorbXNnc3RyWzFdICLQkdC40L3QsNGA0L3Ri9C5INC/0L7QuNGB0Lo6ICVkINGA0LXQtNCw0LrRhtC40Lgg0L7RgdGC0LDQu9C+0YHRjCDQv9GA0L7QstC10YDQuNGC0Ywg0L/QvtGB0LvQtSDRjdGC0L7QuSAlc1xuIgorbXNnc3RyWzJdICLQkdC40L3QsNGA0L3Ri9C5INC/0L7QuNGB0Lo6ICVkINGA0LXQtNCw0LrRhtC40Lkg0L7RgdGC0LDQu9C+0YHRjCDQv9GA0L7QstC10YDQuNGC0Ywg0L/QvtGB0LvQtSDRjdGC0L7QuSAlc1xuIgorbXNnc3RyWzNdICLQkdC40L3QsNGA0L3Ri9C5INC/0L7QuNGB0Lo6ICVkINGA0LXQtNCw0LrRhtC40Lkg0L7RgdGC0LDQu9C+0YHRjCDQv9GA0L7QstC10YDQuNGC0Ywg0L/QvtGB0LvQtSDRjdGC0L7QuSAlc1xuIgorCisjOiBibGFtZS5jOjE3OTQKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzINC4IC0tcmV2ZXJzZSDQvdC1INC+0YfQtdC90Ywg0YHQvtGH0LXRgtCw0Y7RgtGB0Y8uIgorCisjOiBibGFtZS5jOjE4MDgKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgLS1jb250ZW50cyDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0YTQuNC90LDQu9GM0L3QvtCz0L4g0LjQvNC10L3QuCDQvtCx0YrQtdC60YLQsCIKKworIzogYmxhbWUuYzoxODI5Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICLQv9GA0LggLS1yZXZlcnNlINC4IC0tZmlyc3QtcGFyZW50INCy0LzQtdGB0YLQtSDQvdGD0LbQvdC+INGD0LrQsNC30YvQstCw0YLRjCDQutC+0L3QutGA0LXRgtC90YvQuSDQv9C+0YHQu9C10LTQvdC40Lkg0LrQvtC80LzQuNGCIgorCisjOiBibGFtZS5jOjE4MzggYnVuZGxlLmM6MTY0IHJlZi1maWx0ZXIuYzoyMDc3IHJlbW90ZS5jOjE5Mzggc2VxdWVuY2VyLmM6MjAzMAorIzogc2VxdWVuY2VyLmM6NDIyNCBidWlsdGluL2NvbW1pdC5jOjEwMTcgYnVpbHRpbi9sb2cuYzozODIgYnVpbHRpbi9sb2cuYzo5NDAKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyOCBidWlsdGluL2xvZy5jOjE4MDQgYnVpbHRpbi9sb2cuYzoyMDk0CisjOiBidWlsdGluL21lcmdlLmM6NDE1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNTUKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxOTIKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Lgg0L/RgNC+0YXQvtC00LAg0L/QviDRgNC10LTQsNC60YbQuNGP0LwiCisKKyM6IGJsYW1lLmM6MTg1NgorbXNnaWQgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCittc2dzdHIgItC/0YDQuCDRg9C60LDQt9Cw0L3QuNC4IC0tcmV2ZXJzZSDQuCAtLWZpcnN0LXBhcmVudCDQstC80LXRgdGC0LUsINGC0YDQtdCx0YPQtdGC0YHRjyDRgtCw0LrQttC1INGD0LrQsNC30LDRgtGMINC00LjQsNC/0LDQt9C+0L0g0L/QviDRhtC10L/QvtGH0LrQtSDQv9C10YDQstC+0LPQviDRgNC+0LTQuNGC0LXQu9GPIgorCisjOiBibGFtZS5jOjE4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICLQvdC10YIg0YLQsNC60L7Qs9C+INC/0YPRgtC4ICVzINCyICVzIgorCisjOiBibGFtZS5jOjE4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHRitC10LrRgiAlcyDQtNC70Y8g0L/Rg9GC0LggJXMiCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorbXNnc3RyICJcbtCf0L7RgdC70LUg0LjRgdC/0YDQsNCy0LvQtdC90LjRjyDQv9GA0LjRh9C40L3RiyDQvtGI0LjQsdC60LgsXG7QstGLINC80L7QttC10YLQtSDQuNGB0L/RgNCw0LLQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7QuVxu0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQtSwg0YEg0L/QvtC80L7RidGM0Y4g0LrQvtC80LDQvdC00YtcbsKrZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXPCuy4iCisKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAi0J3QtSDRg9GB0YLQsNC90LDQstC70LjQstCw0Y4g0LLQtdGC0LrRgyAlcywg0YLQsNC6INGC0LDQuiDQvtC90LAg0L/RgNC40L3QsNC00LvQtdC20LjRgiDQstGL0YjQtdGB0YLQvtGP0YnQtdC80YMg0YDQtdC/0L7Qt9C40YLQvtGA0LjRji4iCisKKyM6IGJyYW5jaC5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L7RgtGB0LvQtdC20LjQstCw0LXRgiDQstC90LXRiNC90Y7RjiDQstC10YLQutGDIMKrJXPCuyDQuNC3IMKrJXPCuyDQv9C10YDQtdC80LXRidC10L3QuNC10LwuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJy4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INC+0YLRgdC70LXQttC40LLQsNC10YIg0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgyDCqyVzwrsg0LjQtyDCqyVzwrsuIgorCisjOiBicmFuY2guYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvtGC0YHQu9C10LbQuNCy0LDQtdGCINC70L7QutCw0LvRjNC90YPRjiDQstC10YLQutGDIMKrJXPCuyDQv9C10YDQtdC80LXRidC10L3QuNC10LwuIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycuIgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvtGC0YHQu9C10LbQuNCy0LDQtdGCINC70L7QutCw0LvRjNC90YPRjiDQstC10YLQutGDIMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L7RgtGB0LvQtdC20LjQstCw0LXRgiDQstC90LXRiNC90Y7RjiDRgdGB0YvQu9C60YMgwqslc8K7INC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvC4iCisKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnLiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L7RgtGB0LvQtdC20LjQstCw0LXRgiDQstC90LXRiNC90Y7RjiDRgdGB0YvQu9C60YMgwqslc8K7LiIKKworIzogYnJhbmNoLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INC+0YLRgdC70LXQttC40LLQsNC10YIg0LvQvtC60LDQu9GM0L3Rg9GOINGB0YHRi9C70LrRgyDCqyVzwrsg0L/QtdGA0LXQvNC10YnQtdC90LjQtdC8LiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INC+0YLRgdC70LXQttC40LLQsNC10YIg0LvQvtC60LDQu9GM0L3Rg9GOINGB0YHRi9C70LrRgyDCqyVzwrsuIgorCisjOiBicmFuY2guYzoxMTkKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgdXBzdHJlYW0gYnJhbmNoIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC4IgorCisjOiBicmFuY2guYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAi0J3QtSDQvtGC0YHQu9C10LbQuNCy0LDQtdGC0YHRjzog0L3QtdC+0LTQvdC+0LfQvdCw0YfQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8g0LTQu9GPINGB0YHRi9C70LrQuCAlcyIKKworIzogYnJhbmNoLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lwg0LjQvNC10L3QtdC8INCy0LXRgtC60LguIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCS0LXRgtC60LAg0YEg0LjQvNC10L3QtdC8IMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgorCisjOiBicmFuY2guYzoyMTMKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0L7QsdC90L7QstC40YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YLQutGDLiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0YHRgtGA0L7QuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7RgtGB0LvQtdC20LjQstCw0L3QuNGPOyDRgdGC0LDRgNGC0L7QstCw0Y8g0YLQvtGH0LrQsCDCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINCy0LXRgtC60L7QuS4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQt9Cw0L/RgNC+0YjQtdC90L3QsNGPINCy0LXRgtC60LAg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gwqslc8K7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJyYW5jaC5jOjIzNworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiXG7QldGB0LvQuCDQstGLINC/0LvQsNC90LjRgNGD0LXRgtC1INC+0YHQvdC+0LLRi9Cy0LDRgtGMINGB0LLQvtGOINGA0LDQsdC+0YLRgyDQvdCwINCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQtSwg0LrQvtGC0L7RgNCw0Y8g0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCINCy0L4g0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCwg0LLQsNC8INC80L7QttC10YIg0L/QvtGC0YDQtdCx0L7QstCw0YLRjNGB0Y8g0LfQsNC/0YPRgdGC0LjRgtGMIMKrZ2l0IGZldGNowrsg0LTQu9GPINC10LUg0L/QvtC70YPRh9C10L3QuNGPLlxuXG7QldGB0LvQuCDQstGLINC/0LvQsNC90LjRgNGD0LXRgtC1INC+0YLQv9GA0LDQstC40YLRjCDQvdC+0LLRg9GOINC70L7QutCw0LvRjNC90YPRjiDQstC10YLQutGDLCDQutC+0YLQvtGA0LDRjyDQsdGD0LTQtdGCINC+0YLRgdC70LXQttC40LLQsNGC0YzRgdGPLCDQstC+INCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LksINCy0LDQvCDQvNC+0LbQtdGCINC/0L7RgtGA0LXQsdC+0LLQsNGC0YzRgdGPINC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCBwdXNoIC11wrsg4oCUINGH0YLQvtCx0Ysg0YHQvtGF0YDQsNC90LjRgtGMINC90LDRgdGC0YDQvtC50LrRgyDQstGL0YjQtdGB0YLQvtGP0YnQtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuC4iCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQuNC80Y8g0L7QsdGK0LXQutGC0LA6IMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICLQndC10L7QtNC90L7Qt9C90LDRh9C90L7QtSDQuNC80Y8g0L7QsdGK0LXQutGC0LA6IMKrJXPCuy4iCisKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNCw0Y8g0YLQvtGH0LrQsCDQstC10YLQutC4OiDCqyVzwrsuIgorCisjOiBicmFuY2guYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIsKrJXPCuyDRg9C20LUg0L3QsNGF0L7QtNC40YLRgdGPINC90LAgwqslc8K7IgorCisjOiBicmFuY2guYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIkhFQUQg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwICVzINC90LUg0L7QsdC90L7QstC70ZHQvSIKKworIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiwqslc8K7INC90LUg0L/QvtGF0L7QtiDQvdCwINGE0LDQudC7INC/0LDQutC10YLQsCDQstC10YDRgdC40LggMiIKKworIzogYnVuZGxlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0LfQsNCz0L7Qu9C+0LLQvtC6OiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjkwIHJlcmVyZS5jOjQ4MCByZXJlcmUuYzo2OTAgc2VxdWVuY2VyLmM6MjI4MSBzZXF1ZW5jZXIuYzoyOTE2CisjOiBidWlsdGluL2NvbW1pdC5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyIKKworIzogYnVuZGxlLmM6MTQzCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgItCSINGA0LXQv9C+0LfQuNGC0L7RgNC40Lgg0L7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQvdC10L7QsdGF0L7QtNC40LzRi9C1INC60L7QvNC80LjRgtGLOiIKKworIzogYnVuZGxlLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLQn9Cw0LrQtdGCINGB0L7QtNC10YDQttC40YIg0Y3RgtGDICVkINGB0YHRi9C70LrRgzoiCittc2dzdHJbMV0gItCf0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiDRjdGC0LggJWQg0YHRgdGL0LvQutC4OiIKK21zZ3N0clsyXSAi0J/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCINGN0YLQuCAlZCDRgdGB0YvQu9C+0Lo6IgorbXNnc3RyWzNdICLQn9Cw0LrQtdGCINGB0L7QtNC10YDQttC40YIg0Y3RgtC4ICVkINGB0YHRi9C70L7QujoiCisKKyM6IGJ1bmRsZS5jOjIwMQorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICLQn9Cw0LrQtdGCINGB0L7QtNC10YDQttC40YIg0L/QvtC70L3Rg9GOINC40YHRgtC+0YDQuNGOLiIKKworIzogYnVuZGxlLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLQn9Cw0LrQtdGCINGC0YDQtdCx0YPQtdGCINGN0YLRgyAlZCDRgdGB0YvQu9C60YM6IgorbXNnc3RyWzFdICLQn9Cw0LrQtdGCINGC0YDQtdCx0YPQtdGCINGN0YLQuCAlZCDRgdGB0YvQu9C60Lg6IgorbXNnc3RyWzJdICLQn9Cw0LrQtdGCINGC0YDQtdCx0YPQtdGCINGN0YLQuCAlZCDRgdGB0YvQu9C+0Lo6IgorbXNnc3RyWzNdICLQn9Cw0LrQtdGCINGC0YDQtdCx0YPQtdGCINGN0YLQuCAlZCDRgdGB0YvQu9C+0Lo6IgorCisjOiBidW5kbGUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gZHVwIGJ1bmRsZSBkZXNjcmlwdG9yIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC00YPQsdC70LjRgNC+0LLQsNGC0Ywg0LTQtdGB0LrRgNC40L/RgtC+0YAg0L/QsNC60LXRgtCwIgorCisjOiBidW5kbGUuYzoyNzYKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC+0LHRitC10LrRgtGLINC/0LDQutC10YLQsCIKKworIzogYnVuZGxlLmM6Mjg3Cittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgItC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwIHBhY2stb2JqZWN0cyIKKworIzogYnVuZGxlLmM6MzI5Cittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LAgcmV2LWxpc3QiCisKKyM6IGJ1bmRsZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAi0YHRgdGL0LvQutCwIMKrJXPCuyDQuNGB0LrQu9GO0YfQtdC90LAg0LIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNC4INGBINC+0L/RhtC40Y/QvNC4IHJldi1saXN0IgorCisjOiBidW5kbGUuYzo0NTcgYnVpbHRpbi9sb2cuYzoxOTcgYnVpbHRpbi9sb2cuYzoxNzA5IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INCw0YDQs9GD0LzQtdC90YI6ICVzIgorCisjOiBidW5kbGUuYzo0NjUKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAi0J7RgtC60LvQvtC90LXQvdC40LUg0YHQvtC30LTQsNC90LjRjyDQv9GD0YHRgtC+0LPQviDQv9Cw0LrQtdGC0LAuIgorCisjOiBidW5kbGUuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMIMKrJXPCuyIKKworIzogYnVuZGxlLmM6NTAwCittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCBpbmRleC1wYWNrIgorCisjOiBjb2xvci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LfQvdCw0YfQtdC90LjQtSDRhtCy0LXRgtCwOiAlLipzIgorCisjOiBjb21taXQuYzo1MCBzZXF1ZW5jZXIuYzoyNjk3IGJ1aWx0aW4vYW0uYzozNTUgYnVpbHRpbi9hbS5jOjM5OQorIzogYnVpbHRpbi9hbS5jOjEzNzcgYnVpbHRpbi9hbS5jOjIwMjIgYnVpbHRpbi9yZXBsYWNlLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0YwgJXMiCisKKyM6IGNvbW1pdC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutC+0LzQvNC40YLQvtC8ISIKKworIzogY29tbWl0LmM6MTkzCittc2dpZCAiIgorIlN1cHBvcnQgZm9yIDxHSVRfRElSPi9pbmZvL2dyYWZ0cyBpcyBkZXByZWNhdGVkXG4iCisiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBHaXQgdmVyc2lvbi5cbiIKKyJcbiIKKyJQbGVhc2UgdXNlIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIlxuIgorInRvIGNvbnZlcnQgdGhlIGdyYWZ0cyBpbnRvIHJlcGxhY2UgcmVmcy5cbiIKKyJcbiIKKyJUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnkgcnVubmluZ1xuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiIgorbXNnc3RyICLQn9C+0LTQtNC10YDQttC60LAgPEdJVF9ESVI+L2luZm8vZ3JhZnRzINGD0YHRgtCw0YDQtdC70LAg0Lgg0LHRg9C00LXRgiDRg9C00LDQu9C10L3QsCDQsiDRgdC70LXQtNGD0Y7RidC40YUg0LLQtdGA0YHQuNGP0YUgR2l0LlxuXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGXCuyDQtNC70Y8gINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0YHRgNCw0YnQtdC90LjQuSAoZ3JhZnRzKSDQvdCwINGB0YHRi9C70LrQuCDQt9Cw0LzQtdC90YsuXG5cbtCn0YLQvtCx0Ysg0YHQutGA0YvRgtGMINGN0YLQviDRgdC+0L7QsdGJ0LXQvdC40LUg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZcK7IgorCisjOiBjb21taXQuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDRgdC+0LTQtdGA0LbQuNGCINC90LUg0LTQvtCy0LXRgNC10L3QvdGD0Y4gR1BHINC/0L7QtNC/0LjRgdGMLCDQv9GA0LXQtNC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QviDQvtGCICVzLiIKKworIzogY29tbWl0LmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCICVzINGB0L7QtNC10YDQttC40YIg0L/Qu9C+0YXRg9GOIEdQRyDQv9C+0LTQv9C40YHRjCwg0L/RgNC10LTQv9C+0LvQvtC20LjRgtC10LvRjNC90L4g0L7RgiAlcy4iCisKKyM6IGNvbW1pdC5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCICVzINC90LUg0YHQvtC00LXRgNC20LjRgiBHUEcg0L/QvtC00L/QuNGB0YwuIgorCisjOiBjb21taXQuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCICVzINGB0L7QtNC10YDQttC40YIg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YPRjiBHUEcg0L/QvtC00L/QuNGB0YwsINC+0YIgJXMuXG4iCisKKyM6IGNvbW1pdC5jOjEzOTEKK21zZ2lkICIiCisiV2FybmluZzogY29tbWl0IG1lc3NhZ2UgZGlkIG5vdCBjb25mb3JtIHRvIFVURi04LlxuIgorIllvdSBtYXkgd2FudCB0byBhbWVuZCBpdCBhZnRlciBmaXhpbmcgdGhlIG1lc3NhZ2UsIG9yIHNldCB0aGUgY29uZmlnXG4iCisidmFyaWFibGUgaTE4bi5jb21taXRlbmNvZGluZyB0byB0aGUgZW5jb2RpbmcgeW91ciBwcm9qZWN0IHVzZXMuXG4iCittc2dzdHIgItCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCIFVURi04Llxu0JLQvtC30LzQvtC20L3Qviwg0LLRiyDQt9Cw0YXQvtGC0LjRgtC1INC40YHQv9GA0LDQstC40YLRjCDQtdCz0L4g0L/QvtGB0LvQtSDQuNGB0L/RgNCw0LLQu9C10L3QuNGPINGB0L7QvtCx0YnQtdC90LjRj1xu0LjQu9C4INC90LDRgdGC0YDQvtC40YLRjCDQvtC/0YbQuNGOIGkxOG4uY29tbWl0ZW5jb2Rpbmcg0Lgg0YPQutCw0LfQsNGC0Ywg0LrQvtC00LjRgNC+0LLQutGDXG7RgdC+0L7QsdGJ0LXQvdC40LksINC60L7RgtC+0YDRg9GOINC40YHQv9C+0LvRjNC30YPQtdGCINCy0LDRiCDQv9GA0L7QtdC60YIuXG4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNQorbXNnaWQgImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAi0YTQsNC50LsgY29tbWl0LWdyYXBoINGB0LvQuNGI0LrQvtC8INC80LDQu9C10L3RjNC60LjQuSIKKworIzogY29tbWl0LWdyYXBoLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICLQv9C+0LTQv9C40YHRjCBjb21taXQtZ3JhcGgg0YTQsNC50LvQsCAlWCDQvdC1INGB0L7QvtGC0LLQtdGB0YLQstGD0LXRgiDQv9C+0LTQv9C40YHQuCAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgItCy0LXRgNGB0LjRjyBjb21taXQtZ3JhcGgg0YTQsNC50LvQsCAlWCDQvdC1INGB0L7QvtGC0LLQtdGB0YLQstGD0LXRgiDQstC10YDRgdC40LggJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgItCy0LXRgNGB0LjRjyDRhdC10Ygt0YHRg9C80LzRiyBjb21taXQtZ3JhcGgg0YTQsNC50LvQsCAlWCDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINCy0LXRgNGB0LjQuCAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjA3Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIgorbXNnc3RyICLQvdC1INC90LDQudC00LXQvdCwINGC0LDQsdC70LjRhtCwINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjRjyDRh9Cw0YHRgtC10Lkg0LIg0YTQsNC50LvQtSBjb21taXQtZ3JhcGg7INCy0L7Qt9C80L7QttC90L4g0YTQsNC50Lsg0L/QvtCy0YDQtdC20LTRkdC9IgorCisjOiBjb21taXQtZ3JhcGguYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAi0L3QtdC60L7RgNGA0LXQutGC0L3QvtC1INGB0LzQtdGJ0LXQvdC40LUg0YfQsNGB0YLQuCDQsiBjb21taXQtZ3JhcGgg0YTQsNC50LvQtSAlMDh4JTA4eCIKKworIzogY29tbWl0LWdyYXBoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgItGH0LDRgdGC0Ywg0YTQsNC50LvQsCBjb21taXQtZ3JhcGgg0YEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQvtC8ICUwOHgg0L/QvtGP0LLQu9GP0LXRgtGB0Y8g0L3QtdGB0LrQvtC70YzQutC+INGA0LDQtyIKKworIzogY29tbWl0LWdyYXBoLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC60L7QvNC80LjRgiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6NzMyIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0YLQuNC/INC+0LHRitC10LrRgtCwICVzIgorCisjOiBjb21taXQtZ3JhcGguYzo3NjUKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINC40LfQstC10YHRgtC90YvRhSDQutC+0LzQvNC40YLQvtCyINC90LAg0LPRgNCw0YQg0LrQvtC80LzQuNGC0L7QsiIKKworIzogY29tbWl0LWdyYXBoLmM6NzgxCittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi0KDQsNGB0YjQuNGA0LXQvdC40LUg0LTQvtGB0YLQuNC20LjQvNGL0YUg0LrQvtC80LzQuNGC0L7QsiDQvdCwINCz0YDQsNGEINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjc5MworbXNnaWQgIkNsZWFyaW5nIGNvbW1pdCBtYXJrcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgItCe0YfQuNGB0YLQutCwINC/0L7QvNC10YLQvtC6INC60L7QvNC80LjRgtC+0LIg0L3QsCDQs9GA0LDRhNC1INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjgxMworbXNnaWQgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIgorbXNnc3RyICLQktGL0YfQuNGB0LvQtdC90LjQtSDQvdC+0LzQtdGA0L7QsiDQv9C+0LrQvtC70LXQvdC40Lkg0L3QsCDQs9GA0LDRhNC1INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjkzMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrcyIKK21zZ3N0clswXSAi0J/QvtC40YHQuiDQutC+0LzQvNC40YLQvtCyINC00LvRjyDQs9GA0LDRhNCwINC60L7QvNC80LjRgtC+0LIg0LIgJWQg0L/QsNC60LXRgtC1IgorbXNnc3RyWzFdICLQn9C+0LjRgdC6INC60L7QvNC80LjRgtC+0LIg0LTQu9GPINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDQsiAlZCDQv9Cw0LrQtdGC0LDRhSIKK21zZ3N0clsyXSAi0J/QvtC40YHQuiDQutC+0LzQvNC40YLQvtCyINC00LvRjyDQs9GA0LDRhNCwINC60L7QvNC80LjRgtC+0LIg0LIgJWQg0L/QsNC60LXRgtCw0YUiCittc2dzdHJbM10gItCf0L7QuNGB0Log0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINCyICVkINC/0LDQutC10YLQsNGFIgorCisjOiBjb21taXQtZ3JhcGguYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQtNC+0LHQsNCy0LvQtdC90LjRjyDQv9Cw0LrQtdGC0LAgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjk0NQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nIGluZGV4IGZvciAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINC+0YLQutGA0YvRgtC40Y8g0LjQvdC00LXQutGB0LAg0LTQu9GPICVzIgorCisjOiBjb21taXQtZ3JhcGguYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAi0J/QvtC40YHQuiDQutC+0LzQvNC40YLQvtCyINC00LvRjyDQs9GA0LDRhNCwINC60L7QvNC80LjRgtC+0LIg0L/QviAlZCDRgdGB0YvQu9C60LUiCittc2dzdHJbMV0gItCf0L7QuNGB0Log0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINC/0L4gJWQg0YHRgdGL0LvQutCw0LwiCittc2dzdHJbMl0gItCf0L7QuNGB0Log0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINC/0L4gJWQg0YHRgdGL0LvQutCw0LwiCittc2dzdHJbM10gItCf0L7QuNGB0Log0LrQvtC80LzQuNGC0L7QsiDQtNC70Y8g0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINC/0L4gJWQg0YHRgdGL0LvQutCw0LwiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjk5MQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLQn9C+0LjRgdC6INC60L7QvNC80LjRgtC+0LIg0LTQu9GPINCz0YDQsNGE0LAg0LrQvtC80LzQuNGC0L7QsiDRgdGA0LXQtNC4INGD0L/QsNC60L7QstCw0L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogY29tbWl0LWdyYXBoLmM6MTAwNAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLQktGL0YfQuNGB0LvQtdC90LjQtSDQutC+0LvQuNGH0LXRgdGC0LLQsCDQvtGC0LTQtdC70YzQvdGL0YUg0LrQvtC80LzQuNGC0L7QsiDQvdCwINCz0YDQsNGE0LUg0LrQvtC80LzQuNGC0L7QsiIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIKK21zZ3N0ciAi0L/RgNC+0LPRgNCw0LzQvNC1INGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC40Y8g0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCAlZCDQutC+0LzQvNC40YLQvtCyIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDI2Cittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgItCf0L7QuNGB0Log0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvRhSDRgNC10LHQtdGAINC90LAg0LPRgNCw0YTQtSDQutC+0LzQvNC40YLQvtCyIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDUwCittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQutC+0LzQvNC40YLQvtCyINC00LvRjyDQt9Cw0L/QuNGB0Lgg0LPRgNCw0YTQsCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA1NyBtaWR4LmM6ODE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgNC+0LTQuNGC0LXQu9GM0YHQutC40LUg0LrQsNGC0LDQu9C+0LPQuCDQtNC70Y8gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gItCX0LDQv9C40YHRjCDQs9GA0LDRhNCwINC60L7QvNC80LjRgtC+0LIg0LIgJWQg0L/RgNC+0YXQvtC0IgorbXNnc3RyWzFdICLQl9Cw0L/QuNGB0Ywg0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINCyICVkINC/0YDQvtGF0L7QtNCwIgorbXNnc3RyWzJdICLQl9Cw0L/QuNGB0Ywg0LPRgNCw0YTQsCDQutC+0LzQvNC40YLQvtCyINCyICVkINC/0YDQvtGF0L7QtNC+0LIiCittc2dzdHJbM10gItCX0LDQv9C40YHRjCDQs9GA0LDRhNCwINC60L7QvNC80LjRgtC+0LIg0LIgJWQg0L/RgNC+0YXQvtC00LAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNjIKK21zZ2lkICJ0aGUgY29tbWl0LWdyYXBoIGZpbGUgaGFzIGluY29ycmVjdCBjaGVja3N1bSBhbmQgaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgItGE0LDQudC7IGNvbW1pdC1ncmFwaCDRgdC+0LTQtdGA0LbQuNGCINC90LXQv9GA0LDQstC40LvRjNC90YPRjiDQutC+0L3RgtGA0L7Qu9GM0L3Rg9GOINGB0YPQvNC80YMg0Lgg0YHQutC+0YDQtdC1INCy0YHQtdCz0L4g0L/QvtCy0YDQtdC20LTQtdC9IgorCisjOiBjb21taXQtZ3JhcGguYzoxMTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAi0YTQsNC50LsgY29tbWl0LWdyYXBoINGB0L7QtNC10YDQttC40YIg0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC/0L7RgNGP0LTQvtC6IE9JRDogJXMsINCwINC30LDRgtC10LwgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODIgY29tbWl0LWdyYXBoLmM6MTE5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBmYW5vdXQgdmFsdWU6IGZhbm91dFslZF0gPSAldSAhPSAldSIKK21zZ3N0ciAi0YTQsNC50LsgY29tbWl0LWdyYXBoINGB0L7QtNC10YDQttC40YIg0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgZmFub3V0OiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0LrQvtC80LzQuNGCICVzINC40Lcg0YTQsNC50LvQsCBjb21taXQtZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMDYKK21zZ2lkICJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0LrQvtC80LzQuNGC0L7QsiDQvdCwINCz0YDQsNGE0LUg0LrQvtC80LzQuNGC0L7QsiIKKworIzogY29tbWl0LWdyYXBoLmM6MTIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvNC80LjRgiAlcyDQuNC3INCx0LDQt9GLINC+0LHRitC10LrRgtC+0LIg0YTQsNC50LvQsCBjb21taXQtZ3JhcGgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiINCyINGE0LDQudC70LUgY29tbWl0LWdyYXBoIE9JRCDQutC+0YDQvdGPINC00LXRgNC10LLQsCDQtNC70Y8g0LrQvtC80LzQuNGC0LAgJXMg0Y/QstC70Y/QtdGC0YHRjyAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyBpcyB0b28gbG9uZyIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LHQvtC70YzRiNC+0Lkg0YHQv9C40YHQvtC6INGA0L7QtNC40YLQtdC70LXQuSDRhNCw0LnQu9C1IGNvbW1pdC1ncmFwaCDQtNC70Y8g0LrQvtC80LzQuNGC0LAgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgItCyINGE0LDQudC70LUgY29tbWl0LWdyYXBoINGA0L7QtNC40YLQtdC70Ywg0LTQu9GPICVzINGP0LLQu9GP0LXRgtGB0Y8gJXMgIT0gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgdGVybWluYXRlcyBlYXJseSIKK21zZ3N0ciAi0LIg0YTQsNC50LvQtSBjb21taXQtZ3JhcGgg0YHQv9C40YHQvtC6INGA0L7QtNC40YLQtdC70LXQuSDQtNC70Y8g0LrQvtC80LzQuNGC0LAgJXMg0LfQsNC60L7QvdGH0LjQu9GB0Y8g0YHQu9C40YjQutC+0Lwg0YDQsNC90L4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gIgorImVsc2V3aGVyZSIKK21zZ3N0ciAi0LIg0YTQsNC50LvQtSBjb21taXQtZ3JhcGgg0YHQvtC00LXRgNC20LjRgtGB0Y8g0L3Rg9C70LXQstC+0Lkg0L3QvtC80LXRgCDQv9C+0LrQvtC70LXQvdC40Y8g0LTQu9GPINC60L7QvNC80LjRgtCwICVzLCDQvdC+INC90LXQvdGD0LvQtdCy0L7QuSDQsiDQvtGB0YLQsNC70YzQvdGL0YUg0YHQu9GD0YfQsNGP0YUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gIgorImVsc2V3aGVyZSIKK21zZ3N0ciAi0LIg0YTQsNC50LvQtSBjb21taXQtZ3JhcGgg0YHQvtC00LXRgNC20LjRgtGB0Y8g0L3QtdC90YPQu9C10LLQvtC5INC90L7QvNC10YAg0L/QvtC60L7Qu9C10L3QuNGPINC00LvRjyDQutC+0LzQvNC40YLQsCAlcywg0L3QviDQvdGD0LvQtdCy0L7QuSDQsiDQvtGB0YLQsNC70YzQvdGL0YUg0YHQu9GD0YfQsNGP0YUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAi0LIg0YTQsNC50LvQtSBjb21taXQtZ3JhcGgg0L3QvtC80LXRgCDQv9C+0LrQvtC70LXQvdC40Y8g0LTQu9GPINC60L7QvNC80LjRgtCwICVzINGP0LLQu9GP0LXRgtGB0Y8gJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0IGRhdGUgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorbXNnc3RyICLQsiDRhNCw0LnQu9C1IGNvbW1pdC1ncmFwaCDQtNCw0YLQsCDQutC+0LzQvNC40YLQsCAlcyDRj9Cy0LvRj9C10YLRgdGPICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLQv9Cw0LzRj9GC0Ywg0LjRgdGH0LXRgNC/0LDQvdCwIgorCisjOiBjb25maWcuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0YHQutGA0YvRgtGMINC/0YPRgtGMINCy0LrQu9GO0YfQtdC90LjRjyDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjE1MAorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAi0L7RgtC90L7RgdC40YLQtdC70YzQvdGL0LUg0LLQutC70Y7Rh9C10L3QuNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQtNC+0LvQttC90Ysg0LjRgdGF0L7QtNC40YLRjCDQuNC3INGE0LDQudC70L7QsiIKKworIzogY29uZmlnLmM6MTkwCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGUgY29uZGl0aW9uYWxzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICLQvtGC0L3QvtGB0LjRgtC10LvRjNC90YvQtSDRg9GB0LvQvtCy0L3Ri9C1INCy0LrQu9GO0YfQtdC90LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0LTQvtC70LbQvdGLINC40YHRhdC+0LTQuNGC0Ywg0LjQtyDRhNCw0LnQu9C+0LIiCisKKyM6IGNvbmZpZy5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzozNzggc2VxdWVuY2VyLmM6MjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleTogJXMiCittc2dzdHIgItC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INC60LvRjtGHOiAlcyIKKworIzogY29uZmlnLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6NDIwIGNvbmZpZy5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgZm9ybWF0IGluICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCyICVkINGB0YLRgNC+0LrQtSDQtNCy0L7QuNGH0L3QvtCz0L4g0L7QsdGK0LXQutGC0LAgJXMiCisKKyM6IGNvbmZpZy5jOjc5NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCyICVkINGB0YLRgNC+0LrQtSDRhNCw0LnQu9CwICVzIgorCisjOiBjb25maWcuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LIgJWQg0YHRgtGA0L7QutC1INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBjb25maWcuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LIgJWQg0YHRgtGA0L7QutC1INC00LLQvtC40YfQvdC+0LPQviDQvtCx0YrQtdC60YLQsCDQv9C+0LTQvNC+0LTRg9C70Y8gJXMiCisKKyM6IGNvbmZpZy5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LIgJWQg0YHRgtGA0L7QutC1INC60L7QvNC80LDQvdC00L3QvtC5INGB0YLRgNC+0LrQuCAlcyIKKworIzogY29uZmlnLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCyICVkINGB0YLRgNC+0LrQtSDQsiAlcyIKKworIzogY29uZmlnLmM6OTUyCittc2dpZCAib3V0IG9mIHJhbmdlIgorbXNnc3RyICLQstC90LUg0LTQuNCw0L/QsNC30L7QvdCwIgorCisjOiBjb25maWcuYzo5NTIKK21zZ2lkICJpbnZhbGlkIHVuaXQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90L7QtSDRh9C40YHQu9C+IgorCisjOiBjb25maWcuYzo5NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8gwqslc8K7OiAlcyIKKworIzogY29uZmlnLmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGJsb2IgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8gwqslc8K7INCyINC00LLQvtC40YfQvdC+0Lwg0L7QsdGK0LXQutGC0LUgJXM6ICVzIgorCisjOiBjb25maWcuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gZmlsZSAlczogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90L7QtSDRh9C40YHQu9C+0LLQvtC1INC30L3QsNGH0LXQvdC40LUgwqslc8K7INC00LvRjyDCqyVzwrsg0LIg0YTQsNC50LvQtSAlczogJXMiCisKKyM6IGNvbmZpZy5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90L7QtSDRh9C40YHQu9C+0LLQvtC1INC30L3QsNGH0LXQvdC40LUgwqslc8K7INC00LvRjyDCqyVzwrsg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QvtC8INCy0LLQvtC00LU6ICVzIgorCisjOiBjb25maWcuYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8gwqslc8K7INCyINC00LLQvtC40YfQvdC+0Lwg0L7QsdGK0LXQutGC0LUg0L/QvtC00LzQvtC00YPQu9GPICVzOiAlcyIKKworIzogY29uZmlnLmM6OTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90L7QtSDRh9C40YHQu9C+0LLQvtC1INC30L3QsNGH0LXQvdC40LUgwqslc8K7INC00LvRjyDCqyVzwrsg0L3QsCDQutC+0LzQvNCw0L3QtNC90L7QuSDRgdGC0YDQvtC60LUgJXM6ICVzIgorCisjOiBjb25maWcuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8gwqslc8K7INCyICVzOiAlcyIKKworIzogY29uZmlnLmM6MTA3MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICLRgdCx0L7QuSDRgNCw0LfQstC+0YDQsNGH0LjQstCw0L3QuNGPINC/0YPRgtC4INC60LDRgtCw0LvQvtCz0LAg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPOiDCqyVzwrsiCisKKyM6IGNvbmZpZy5jOjEwODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIsKrJXPCuyDQtNC70Y8gwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80L7QuSDQvNC10YLQutC+0Lkg0LTQsNGC0Ysv0LLRgNC10LzQtdC90LgiCisKKyM6IGNvbmZpZy5jOjExNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJicmV2IGxlbmd0aCBvdXQgb2YgcmFuZ2U6ICVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjExODcgY29uZmlnLmM6MTE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGD0YDQvtCy0LXQvdGMINGB0LbQsNGC0LjRjyB6bGliICVkIgorCisjOiBjb25maWcuYzoxMjkwCittc2dpZCAiY29yZS5jb21tZW50Q2hhciBzaG91bGQgb25seSBiZSBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YDQtdC20LjQvCDRgdC+0LfQtNCw0L3QuNGPINC+0LHRitC10LrRgtCwOiAlcyIKKworIzogY29uZmlnLmM6MTM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQyMgorbXNnaWQgIm11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIG9yIGN1cnJlbnQiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTQ4MyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRg9GA0L7QstC10L3RjCDRgdC20LDRgtC40Y8g0L/QsNC60LXRgtCwICVkIgorCisjOiBjb25maWcuYzoxNjA0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIGNvbmZpZyBibG9iIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgY29uZmlnIGJsb2IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNzEwCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRjiDQuNC3INC60L7QvNCw0L3QtNC90L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGNvbmZpZy5jOjIwNTkKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgItC/0YDQvtC40LfQvtGI0LvQsCDQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC+0YjQuNCx0LrQsCDQv9GA0Lgg0YfRgtC10L3QuNC4INGE0LDQudC70L7QsiDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGNvbmZpZy5jOjIyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAi0J3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0LkgJXM6IMKrJXPCuyIKKworIzogY29uZmlnLmM6MjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvcmUudW50cmFja2VkQ2FjaGUgdmFsdWUgJyVzJzsgdXNpbmcgJ2tlZXAnIGRlZmF1bHQgdmFsdWUiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDCqyVzwrsg0LTQu9GPIGNvcmUudW50cmFja2VkQ2FjaGU7INC40YHQv9C+0LvRjNC30YPRjiDRgdGC0LDQvdC00LDRgNGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUgwqtrZWVwwrsiCisKKyM6IGNvbmZpZy5jOjIyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICLQt9C90LDRh9C10L3QuNC1IMKrJWTCuyDQtNC70Y8gc3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlINC00L7Qu9C20L3QviDQsdGL0YLRjCDQvtGCIDAg0LTQviAxMDAiCisKKyM6IGNvbmZpZy5jOjIzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDCqyVzwrsg0LIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC40Lcg0LrQvtC80LDQvdC00L3QvtC5INGB0YLRgNC+0LrQuCIKKworIzogY29uZmlnLmM6MjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDQv9C10YDQtdC80LXQvdC90LDRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lggwqslc8K7INCyINGE0LDQudC70LUgwqslc8K7INC90LAg0YHRgtGA0L7QutC1ICVkIgorCisjOiBjb25maWcuYzoyNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIgorbXNnc3RyICIlcyDQuNC80LXQtdGCINC90LXRgdC60L7Qu9GM0LrQviDQt9C90LDRh9C10L3QuNC5IgorCisjOiBjb25maWcuYzoyNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI3NDAgY29uZmlnLmM6MzA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyNzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZW5pbmcgJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjc4NiBidWlsdGluL2NvbmZpZy5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdHRlcm46ICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyODI0IGNvbmZpZy5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40LggZnN0YXQg0L3QsCDRhNCw0LnQu9C1ICVzIgorCisjOiBjb25maWcuYzoyODM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6Mjg0NCBjb25maWcuYzozMDgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoyOTI5IGNvbmZpZy5jOjMxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjI5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPRgdGC0LDQvdC+0LLQuNGC0Ywgwqslc8K7INCyIMKrJXPCuyIKKworIzogY29uZmlnLmM6Mjk2NSBidWlsdGluL3JlbW90ZS5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdCx0YDQvtGB0LjRgtGMINC30L3QsNGH0LXQvdC40LUg0LTQu9GPIMKrJXPCuyIKKworIzogY29uZmlnLmM6MzA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MzIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjYzCittc2dpZCAiIgorIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG4iCisiXG4iCisiUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBhY2Nlc3MgcmlnaHRzXG4iCisiYW5kIHRoZSByZXBvc2l0b3J5IGV4aXN0cy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40Lcg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLlxuXG7Qo9C00L7RgdGC0L7QstC10YDRjNGC0LXRgdGMLCDRh9GC0L4g0YMg0LLQsNGBINC10YHRgtGMINC90LXQvtCx0YXQvtC00LjQvNGL0LUg0L/RgNCw0LLQsCDQtNC+0YHRgtGD0L/QsFxu0Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCisKKyM6IGNvbm5lY3QuYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0ICclcyciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGZlYXR1cmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjMxMworbXNnaWQgImludmFsaWQgcGFja2V0IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgJyVzJyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo1OTUKK21zZ2lkICJ1bmFibGUgdG8gc2V0IFNPX0tFRVBBTElWRSBvbiBzb2NrZXQiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjYzNSBjb25uZWN0LmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2tpbmcgdXAgJXMgLi4uICIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIKKyM6IGNvbm5lY3QuYzo2NDMgY29ubmVjdC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZS5cbiIKKyJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCisiJXMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6ODQ1IGNvbm5lY3QuYzoxMTcxCisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgaG9zdG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwb3J0ICclcycgYmxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGFydCBwcm94eSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6OTI0Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgIiIKKworIzogY29ubmVjdC5jOjExMTkKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC00IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMTMxCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIKK21zZ3N0ciAiIgorCisjOiBjb25uZWN0LmM6MTE0OAorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwb3J0IgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMjYwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcGF0aG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3QuYzoxMzA3Cittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6ODUgYnVpbHRpbi9mc2NrLmM6MjIxIGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDRgdC+0LXQtNC40L3QtdC90LjRjyIKKworIzogY29ubmVjdGVkLmM6OTcKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCByZXYtbGlzdMK7IgorCisjOiBjb25uZWN0ZWQuYzoxMTcKK21zZ2lkICJmYWlsZWQgd3JpdGUgdG8gcmV2LWxpc3QiCittc2dzdHIgItGB0LHQvtC5INC30LDQv9C40YHQuCDQsiByZXYtbGlzdCIKKworIzogY29ubmVjdGVkLmM6MTI0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgItGB0LHQvtC5INC30LDQutGA0YvRgtC40Y8g0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAg0YMgcmV2LWxpc3QiCisKKyM6IGNvbnZlcnQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBjcmxmX2FjdGlvbiAlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICJMRiDQsdGD0LTQtdGCINC30LDQvNC10L3QtdC9INC90LAgQ1JMRiDQsiAlcyIKKworIzogY29udmVydC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcHJvaGliaXRlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIkJPTSDQt9Cw0L/RgNC10YnQtdC9INCyIMKrJXPCuywg0LXRgdC70Lgg0LrQvtC00LjRgNGD0LXRgtGB0Y8g0LrQsNC6ICVzIgorCisjOiBjb252ZXJ0LmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAi0KTQsNC50Lsgwqslc8K7INGB0L7QtNC10YDQttC40YIg0LzQsNGA0LrQtdGAINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQuCDQsdCw0LnRgtC+0LIgKEJPTSkuINCY0YHQv9C+0LvRjNC30YPQudGC0LUgVVRGLSVzINC60LDQuiDQutC+0LTQuNGA0L7QstC60YMg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwLiIKKworIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00g0YLRgNC10LHRg9C10YLRgdGPINCyIMKrJXPCuywg0LXRgdC70Lgg0LrQvtC00LjRgNGD0LXRgtGB0Y8g0LrQsNC6ICVzIgorCisjOiBjb252ZXJ0LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGlzIG1pc3NpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSVzQkUgb3IgIgorIlVURi0lc0xFIChkZXBlbmRpbmcgb24gdGhlIGJ5dGUgb3JkZXIpIGFzIHdvcmtpbmctdHJlZS1lbmNvZGluZy4iCittc2dzdHIgItCk0LDQudC7IMKrJXPCuyDQvdC1INGB0L7QtNC10YDQttC40YIg0LzQsNGA0LrQtdGAINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQuCDQsdCw0LnRgtC+0LIgKEJPTSkuICDQmNGB0L/QvtC70YzQt9GD0LnRgtC1IFVURi0lc0JFINC40LvQuCBVVEYtJXNMRSAo0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINC/0L7RgNGP0LTQutCwINCx0LDQudGC0L7Qsikg0LrQsNC6INC60L7QtNC40YDQvtCy0LrRgyDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAuIgorCisjOiBjb252ZXJ0LmM6NDI0IGNvbnZlcnQuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQutC+0LTQuNGA0L7QstCw0YLRjCDCqyVzwrsg0LjQtyAlcyDQsiAlcyIKKworIzogY29udmVydC5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICLQv9C10YDQtdC60L7QtNC40YDQvtCy0LDQvdC40LUgwqslc8K7INC40LcgJXMg0LIgJXMg0Lgg0L7QsdGA0LDRgtC90L4g0L3QtSDQvtC00L3QviDQuCDRgtC+INC20LUiCisKKyM6IGNvbnZlcnQuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkICVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo3MzUgY29udmVydC5jOjczOAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo3NDEgY29udmVydC5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjg0NAorbXNnaWQgInVuZXhwZWN0ZWQgZmlsdGVyIHR5cGUiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjg1NQorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICIiCisKKyM6IGNvbnZlcnQuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4dGVybmFsIGZpbHRlciAnJXMnIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZSBhbHRob3VnaCBub3QgYWxsIHBhdGhzIGhhdmUgIgorImJlZW4gZmlsdGVyZWQiCittc2dzdHIgIiIKKworIzogY29udmVydC5jOjEyMjgKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICJ0cnVlL2ZhbHNlINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80YvQvCDQt9C90LDRh9C10L3QuNC10Lwg0LTQu9GPIHdvcmtpbmctdHJlZS1lbmNvZGluZyIKKworIzogY29udmVydC5jOjEzOTggY29udmVydC5jOjE0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBjb252ZXJ0LmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc211ZGdlIGZpbHRlciAlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZGF0ZS5jOjEzNworbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgItCyINCx0YPQtNGD0YnQtdC8IgorCisjOiBkYXRlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDRgdC10LrRg9C90LTQsCDQvdCw0LfQsNC0IgorbXNnc3RyWzFdICIlPFBSSXVNQVg+INGB0LXQutGD0L3QtNGLINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiU8UFJJdU1BWD4g0YHQtdC60YPQvdC0INC90LDQt9Cw0LQiCittc2dzdHJbM10gIiU8UFJJdU1BWD4g0YHQtdC60YPQvdC00Ysg0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbWludXRlcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g0LzQuNC90YPRgtCwINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g0LzQuNC90YPRgtGLINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiU8UFJJdU1BWD4g0LzQuNC90YPRgiDQvdCw0LfQsNC0IgorbXNnc3RyWzNdICIlPFBSSXVNQVg+INC80LjQvdGD0YLRiyDQvdCw0LfQsNC0IgorCisjOiBkYXRlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+INGH0LDRgSDQvdCw0LfQsNC0IgorbXNnc3RyWzFdICIlPFBSSXVNQVg+INGH0LDRgdCwINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiU8UFJJdU1BWD4g0YfQsNGB0L7QsiDQvdCw0LfQsNC0IgorbXNnc3RyWzNdICIlPFBSSXVNQVg+INGH0LDRgdCwINC90LDQt9Cw0LQiCisKKyM6IGRhdGUuYzoxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+INC00LXQvdGMINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g0LTQvdGPINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiU8UFJJdU1BWD4g0LTQvdC10Lkg0L3QsNC30LDQtCIKK21zZ3N0clszXSAiJTxQUkl1TUFYPiDQtNC90Y8g0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDQvdC10LTQtdC70Y4g0L3QsNC30LDQtCIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDQvdC10LTQtdC70Lgg0L3QsNC30LDQtCIKK21zZ3N0clsyXSAiJTxQUkl1TUFYPiDQvdC10LTQtdC70Ywg0L3QsNC30LDQtCIKK21zZ3N0clszXSAiJTxQUkl1TUFYPiDQvdC10LTQtdC70Lgg0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+INC80LXRgdGP0YYg0L3QsNC30LDQtCIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDQvNC10YHRj9GG0LAg0L3QsNC30LDQtCIKK21zZ3N0clsyXSAiJTxQUkl1TUFYPiDQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0IgorbXNnc3RyWzNdICIlPFBSSXVNQVg+INC80LXRgdGP0YbQsCDQvdCw0LfQsNC0IgorCisjOiBkYXRlLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4geWVhciIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDQs9C+0LQiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g0LPQvtC00LAiCittc2dzdHJbMl0gIiU8UFJJdU1BWD4g0LvQtdGCIgorbXNnc3RyWzNdICIlPFBSSXVNQVg+INCz0L7QtNCwIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJTxQUkl1TUFYPiBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlPFBSSXVNQVg+IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlPFBSSXVNQVg+INC80LXRgdGP0YYg0L3QsNC30LDQtCIKK21zZ3N0clsxXSAiJXMsICU8UFJJdU1BWD4g0LzQtdGB0Y/RhtCwINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiVzLCAlPFBSSXVNQVg+INC80LXRgdGP0YbQtdCyINC90LDQt9Cw0LQiCittc2dzdHJbM10gIiVzLCAlPFBSSXVNQVg+INC80LXRgdGP0YbQsCDQvdCw0LfQsNC0IgorCisjOiBkYXRlLmM6MTk2IGRhdGUuYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g0LPQvtC0INC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g0LPQvtC00LAg0L3QsNC30LDQtCIKK21zZ3N0clsyXSAiJTxQUkl1TUFYPiDQu9C10YIg0L3QsNC30LDQtCIKK21zZ3N0clszXSAiJTxQUkl1TUFYPiDQs9C+0LTQsCDQvdCw0LfQsNC0IgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjcyCittc2dpZCAiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIgorbXNnc3RyICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHRyZWUgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgaXNsYW5kIHJlZ2V4IGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCittc2dzdHIgIiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICLRgdCx0L7QuSDRh9GC0LXQvdC40Y8gb3JkZXJmaWxlIMKrJXPCuyIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTQ0Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgItCS0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QtdGC0L7Rh9C90L7QtSDQvtC/0YDQtdC00LXQu9C10L3QuNC1INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgIiIKKworIzogZGlmZi1uby1pbmRleC5jOjI2MworbXNnaWQgIiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgIgorInRyZWUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiAg0KHQsdC+0Lkg0YDQsNC30LHQvtGA0LAg0LLQtdC70LjRh9C40L3RiyDRgdGA0LXQt9CwIChjdXQtb2ZmKSDRgyBkaXJzdGF0IMKrJXPCu1xuIgorCisjOiBkaWZmLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgCBkaXJzdGF0OiDCqyVzwrtcbiIKKworIzogZGlmZi5jOjI5NgorbXNnaWQgIiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkLXplYnJhJywgJ3BsYWluJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bmtub3duIGNvbG9yLW1vdmVkLXdzIG1vZGUgJyVzJywgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlLXNwYWNlLWNoYW5nZScsIgorIiAnaWdub3JlLXNwYWNlLWF0LWVvbCcsICdpZ25vcmUtYWxsLXNwYWNlJywgJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjMzMgorbXNnaWQgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG90aGVyICIKKyJ3aGl0ZXNwYWNlIG1vZGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjRjyDQtNC70Y8g0L/QtdGA0LXQvNC10L3QvdC+0LkgwqtkaWZmLnN1Ym1vZHVsZcK7OiDCqyVzwrsiCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgItCd0LDQudC00LXQvdGLINC+0YjQuNCx0LrQuCDQsiDQv9C10YDQtdC80LXQvdC90L7QuSDCq2RpZmYuZGlyc3RhdMK7OlxuJXMiCisKKyM6IGRpZmYuYzo0MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgItC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwINC/0YDQuCDQstC90LXRiNC90LXQvCDRgdGA0LDQstC90LXQvdC40LgsINC+0YHRgtCw0L3QvtCyINC90LAgJXMiCisKKyM6IGRpZmYuYzo0NTU1Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrINC4IC1zINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBkaWZmLmM6NDU1OAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItRywgLVMg0LggLS1maW5kLW9iamVjdCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogZGlmZi5jOjQ2MzYKK21zZ2lkICItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIKK21zZ3N0ciAiLS1mb2xsb3cg0YLRgNC10LHRg9C10YIg0YDQvtCy0L3QviDQvtC00L3QvtCz0L4g0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0LAg0L/Rg9GC0LgiCisKKyM6IGRpZmYuYzo0Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1zdGF0IHZhbHVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDY4OSBkaWZmLmM6NDY5NCBkaWZmLmM6NDY5OSBkaWZmLmM6NDcwNCBkaWZmLmM6NTIxNworIzogcGFyc2Utb3B0aW9ucy5jOjE5OSBwYXJzZS1vcHRpb25zLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAi0KHQsdC+0Lkg0YDQsNC30LHQvtGA0LAg0L/QsNGA0LDQvNC10YLRgNCwINC+0L/RhtC40LggLS1kaXJzdGF0Ly1YIDpcbiVzIgorCisjOiBkaWZmLmM6NDgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNoYW5nZSBjbGFzcyAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjQ4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBhZnRlciB3cy1lcnJvci1oaWdobGlnaHQ9JS4qcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDg0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0ODk0IGRpZmYuYzo0OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAtLWNvbG9yLW1vdmVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NDk1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgJyVzJyBpbiAtLWNvbG9yLW1vdmVkLXdzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo0OTkyCittc2dpZCAib3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCBcImhpc3RvZ3JhbVwiIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MDI4IGRpZmYuYzo1MDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgdG8gJXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0td29yZC1kaWZmIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI2NQorbXNnaWQgIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MjY3IGRpZmYuYzo1MjczCittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyNzAgYnVpbHRpbi9sb2cuYzoxNjcKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGRpZmYuYzo1Mjc1IGRpZmYuYzo1Mzg5IGRpZmYuYzo1Mzk2Cittc2dpZCAiPG4+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mjc2IGRpZmYuYzo1Mjc5Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI4MQorbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1yYXcnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mjg4Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tc3RhdCciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUyOTIKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTI5NQorbXNnaWQgIm91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgLS1zdGF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mjk3IGRpZmYuYzo1MzA1Cittc2dpZCAiPHBhcmFtMSxwYXJhbTI+Li4uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mjk4Cittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMDIKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMwNgorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzEwCittc2dpZCAid2FybiBpZiBjaGFuZ2VzIGludHJvZHVjZSBjb25mbGljdCBtYXJrZXJzIG9yIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzEzCittc2dpZCAiY29uZGVuc2VkIHN1bW1hcnkgc3VjaCBhcyBjcmVhdGlvbnMsIHJlbmFtZXMgYW5kIG1vZGUgY2hhbmdlcyIKK21zZ3N0ciAi0LrRgNCw0YLQutCw0Y8g0YHQstC+0LTQutCwINC40LfQvNC10L3QtdC90LjQuSwg0LLRgNC+0LTQtSDRgdC+0LfQtNCw0L3QuNC5LCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC5INC40LvQuCDQuNC30LzQtdC90LXQvdC40Lkg0YDQtdC20LjQvNCwINC00L7RgdGC0YPQv9CwIgorCisjOiBkaWZmLmM6NTMxNgorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzE5Cittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTMyMQorbXNnaWQgIjx3aWR0aD5bLDxuYW1lLXdpZHRoPlssPGNvdW50Pl1dIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzIyCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMjQgZGlmZi5jOjUzMjcgZGlmZi5jOjUzMzAKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzI1Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIHdpZHRoIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzI4Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIG5hbWUgd2lkdGgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gZ3JhcGggd2lkdGgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzMzMKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzM0Cittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBsaW1pdGVkIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzM3Cittc2dpZCAiZ2VuZXJhdGUgY29tcGFjdCBzdW1tYXJ5IGluIGRpZmZzdGF0IgorbXNnc3RyICLQs9C10L3QtdGA0LDRhtC40Y8g0LrQvtC80L/QsNC60YLQvdC+0Lkg0YHQstC+0LTQutC4INC40LfQvNC10L3QtdC90LjQuSDQsiBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzNDAKK21zZ2lkICJvdXRwdXQgYSBiaW5hcnkgZGlmZiB0aGF0IGNhbiBiZSBhcHBsaWVkIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzQzCittc2dpZCAic2hvdyBmdWxsIHByZS0gYW5kIHBvc3QtaW1hZ2Ugb2JqZWN0IG5hbWVzIG9uIHRoZSBcImluZGV4XCIgbGluZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNDUKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0NgorbXNnaWQgIjxraW5kPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM0NworbXNnaWQgIiIKKyJoaWdobGlnaHQgd2hpdGVzcGFjZSBlcnJvcnMgaW4gdGhlICdjb250ZXh0JywgJ29sZCcgb3IgJ25ldycgbGluZXMgaW4gdGhlICIKKyJkaWZmIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzUwCittc2dpZCAiIgorImRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycyBpbiAtLXJhdyBvciAiCisiLS1udW1zdGF0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzUzIGRpZmYuYzo1MzU2IGRpZmYuYzo1MzU5IGRpZmYuYzo1NDY1Cittc2dpZCAiPHByZWZpeD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzNTQKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzU3Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgXCJiL1wiIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzYwCittc2dpZCAicHJlcGVuZCBhbiBhZGRpdGlvbmFsIHByZWZpeCB0byBldmVyeSBsaW5lIG9mIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM2MworbXNnaWQgImRvIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzY2Cittc2dpZCAic2hvdyBjb250ZXh0IGJldHdlZW4gZGlmZiBodW5rcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM3MCBkaWZmLmM6NTM3NSBkaWZmLmM6NTM4MAorbXNnaWQgIjxjaGFyPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM3MQorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluc3RlYWQgb2YgJysnIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzc2Cittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGFuIG9sZCBsaW5lIGluc3RlYWQgb2YgJy0nIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1MzgxCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgY29udGV4dCBpbnN0ZWFkIG9mICcgJyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM4NAorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzODUKK21zZ2lkICI8bj5bLzxtPl0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzODYKK21zZ2lkICJicmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTM5MAorbXNnaWQgImRldGVjdCByZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1Mzk0Cittc2dpZCAib21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjUzOTcKK21zZ2lkICJkZXRlY3QgY29waWVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDAxCittc2dpZCAidXNlIHVubW9kaWZpZWQgZmlsZXMgYXMgc291cmNlIHRvIGZpbmQgY29waWVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDAzCittc2dpZCAiZGlzYWJsZSByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDA2Cittc2dpZCAidXNlIGVtcHR5IGJsb2JzIGFzIHJlbmFtZSBzb3VyY2UiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MDgKK21zZ2lkICJjb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQxMQorbXNnaWQgIiIKKyJwcmV2ZW50IHJlbmFtZS9jb3B5IGRldGVjdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyAiCisiZ2l2ZW4gbGltaXQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MTMKK21zZ2lkICJEaWZmIGFsZ29yaXRobSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDE1Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQxOAorbXNnaWQgImlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gY29tcGFyaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDIxCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gYW1vdW50IG9mIHdoaXRlc3BhY2UiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MjQKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQyNworbXNnaWQgImlnbm9yZSBjYXJyaWVyLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MzAKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyB3aG9zZSBsaW5lcyBhcmUgYWxsIGJsYW5rIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDMzCittc2dpZCAiaGV1cmlzdGljIHRvIHNoaWZ0IGRpZmYgaHVuayBib3VuZGFyaWVzIGZvciBlYXN5IHJlYWRpbmciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0MzYKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDQyCittc2dpZCAiPGFsZ29yaXRobT4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NDMKK21zZ2lkICJjaG9vc2UgYSBkaWZmIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ0NQorbXNnaWQgIjx0ZXh0PiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ0NgorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiYW5jaG9yZWQgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ0OCBkaWZmLmM6NTQ1NyBkaWZmLmM6NTQ2MAorbXNnaWQgIjxtb2RlPiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ0OQorbXNnaWQgInNob3cgd29yZCBkaWZmLCB1c2luZyA8bW9kZT4gdG8gZGVsaW1pdCBjaGFuZ2VkIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDUxIGRpZmYuYzo1NDU0IGRpZmYuYzo1NDk5Cittc2dpZCAiPHJlZ2V4PiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ1MgorbXNnaWQgInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ1NQorbXNnaWQgImVxdWl2YWxlbnQgdG8gLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ1OAorbXNnaWQgIm1vdmVkIGxpbmVzIG9mIGNvZGUgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NjEKK21zZ2lkICJob3cgd2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkIGluIC0tY29sb3ItbW92ZWQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJPdGhlciBkaWZmIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NjYKK21zZ2lkICJ3aGVuIHJ1biBmcm9tIHN1YmRpciwgZXhjbHVkZSBjaGFuZ2VzIG91dHNpZGUgYW5kIHNob3cgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0NzAKK21zZ2lkICJ0cmVhdCBhbGwgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3MgorbXNnaWQgInN3YXAgdHdvIGlucHV0cywgcmV2ZXJzZSB0aGUgZGlmZiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ3NAorbXNnaWQgImV4aXQgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMsIDAgb3RoZXJ3aXNlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDc2Cittc2dpZCAiZGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDc4Cittc2dpZCAiYWxsb3cgYW4gZXh0ZXJuYWwgZGlmZiBoZWxwZXIgdG8gYmUgZXhlY3V0ZWQiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0ODAKK21zZ2lkICJydW4gZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDgyCittc2dpZCAiPHdoZW4+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDgzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBpbiB0aGUgZGlmZiBnZW5lcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDg2Cittc2dpZCAiPGZvcm1hdD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0ODcKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ5MQorbXNnaWQgImhpZGUgJ2dpdCBhZGQgLU4nIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU0OTQKK21zZ2lkICJ0cmVhdCAnZ2l0IGFkZCAtTicgZW50cmllcyBhcyByZWFsIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTQ5NgorbXNnaWQgIjxzdHJpbmc+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NDk3Cittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisic3RyaW5nIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTAwCittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisicmVnZXgiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU1MDMKK21zZ2lkICJzaG93IGFsbCBjaGFuZ2VzIGluIHRoZSBjaGFuZ2VzZXQgd2l0aCAtUyBvciAtRyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwNgorbXNnaWQgInRyZWF0IDxzdHJpbmc+IGluIC1TIGFzIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTEwCittc2dpZCAiPG9iamVjdC1pZD4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU1MTEKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJvYmplY3QiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU1MTMKK21zZ2lkICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjU1MTQKK21zZ2lkICJzZWxlY3QgZmlsZXMgYnkgZGlmZiB0eXBlIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTE2Cittc2dpZCAiPGZpbGU+IgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzo1NTE3Cittc2dpZCAiT3V0cHV0IHRvIGEgc3BlY2lmaWMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6NjE1MAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICLQvdC10YLQvtGH0L3QvtC1INC+0L/RgNC10LTQtdC70LXQvdC40LUg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjRjyDQsdGL0LvQviDQv9GA0L7Qv9GD0YnQtdC90L4g0LjQty3Qt9CwINGB0LvQuNGI0LrQvtC8INCx0L7Qu9GM0YjQvtCz0L4g0LrQvtC70LjRh9C10YHRgtCy0LAg0YTQsNC50LvQvtCyLiIKKworIzogZGlmZi5jOjYxNTMKK21zZ2lkICJvbmx5IGZvdW5kIGNvcGllcyBmcm9tIG1vZGlmaWVkIHBhdGhzIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iCittc2dzdHIgItC90LDQudC00LXQvdGLINGC0L7Qu9GM0LrQviDQutC+0L/QuNC4INC40Lcg0LjQt9C80LXQvdC10L3QvdGL0YUg0L/Rg9GC0LXQuSDQuNC3LdC30LAg0YHQu9C40YjQutC+0Lwg0LHQvtC70YzRiNC+0LPQviDQutC+0LvQuNGH0LXRgdGC0LLQsCDRhNCw0LnQu9C+0LIuIgorCisjOiBkaWZmLmM6NjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IG1heSB3YW50IHRvIHNldCB5b3VyICVzIHZhcmlhYmxlIHRvIGF0IGxlYXN0ICVkIGFuZCByZXRyeSB0aGUgY29tbWFuZC4iCittc2dzdHIgItCy0L7Qt9C80L7QttC90L4g0LLRiyDQt9Cw0YXQvtGC0LjRgtC1INGD0YHRgtCw0L3QvtCy0LjRgtGMINC/0LXRgNC10LzQtdC90L3Rg9GOICVzINCyINC60LDQuiDQvNC40L3QuNC80YPQvCDQt9C90LDRh9C10L3QuNC1ICVkINC4INC/0L7QstGC0L7RgNC40YLRjCDQstGL0LfQvtCyINC60L7QvNCw0L3QtNGLLiIKKworIzogZGlyLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCittc2dzdHIgIiIKKworIzogZGlyLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGRpci5jOjE4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LrQsNGC0LDQu9C+0LMgwqslc8K7IgorCisjOiBkaXIuYzoyMDg1Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQuNC80Y8g0Y/QtNGA0LAg0Lgg0LjQvdGE0L7RgNC80LDRhtC40Y4iCisKKyM6IGRpci5jOjIyMDkKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogZGlyLmM6MzAxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzozMDU4IGRpci5jOjMwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LrQsNGC0LDQu9C+0LPQuCDQtNC70Y8gJXMiCisKKyM6IGRpci5jOjMwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC60LDRgtCw0LvQvtCzIGdpdCDRgSDCqyVzwrsg0LIgwqslc8K7IgorCisjOiBlZGl0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiBXYWl0aW5nIGZvciB5b3VyIGVkaXRvciB0byBjbG9zZSB0aGUgZmlsZS4uLiVjIgorbXNnc3RyICLQv9C+0LTRgdC60LDQt9C60LA6INCe0LbQuNC00LDQvdC40LUsINC/0L7QutCwINCy0Ysg0LfQsNC60YDQvtC10YLQtSDRgNC10LTQsNC60YLQvtGAINGBINGE0LDQudC70L7QvOKApiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICLQpNC40LvRjNGC0YDRg9C10YLRgdGPINGB0L7QtNC10YDQttC40LzQvtC1IgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQg0LTQu9GPINGE0LDQudC70LAgwqslc8K7IgorCisjOiBlbnZpcm9ubWVudC5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjOiBlbnZpcm9ubWVudC5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IEdJVF9ESVIgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1vYmplY3QuYzoxNworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAi0JLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQsdC10LcgVVJMIgorCisjOiBmZXRjaC1wYWNrLmM6MTUxCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6INC+0LbQuNC00LDQtdGC0YHRjyDQv9C10YDQtdC00LDRh9CwINGB0L/QuNGB0LrQsCDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNC1INGH0LDRgdGC0LgiCisKKyM6IGZldGNoLXBhY2suYzoxNTQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxNjUKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazog0L7QttC40LTQsNC10YLRgdGPIEFDSy9OQUssINCwINC/0L7Qu9GD0YfQtdC9INC/0YPRgdGC0L7QuSDQv9Cw0LrQtdGCIgorCisjOiBmZXRjaC1wYWNrLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6INC+0LbQuNC00LDQtdGC0YHRjyBBQ0svTkFLLCDQsCDQv9C+0LvRg9GH0LXQvdC+IMKrJXPCuyIKKworIzogZmV0Y2gtcGFjay5jOjE5NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjI1OAorbXNnaWQgIi0tc3RhdGVsZXNzLXJwYyByZXF1aXJlcyBtdWx0aV9hY2tfZGV0YWlsZWQiCittc2dzdHIgIi0tc3RhdGVsZXNzLXJwYyDRgtGA0LXQsdGD0LXRgiBtdWx0aV9hY2tfZGV0YWlsZWQiCisKKyM6IGZldGNoLXBhY2suYzozNjAgZmV0Y2gtcGFjay5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0YHRgtGA0L7QutCwINGH0LDRgdGC0LjRh9C90L7Qs9C+INC/0L7Qu9GD0YfQtdC90LjRjzogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjYgZmV0Y2gtcGFjay5jOjEyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGC0YDQvtC60LAg0L/QvtC70L3QvtCz0L4g0L/QvtC70YPRh9C10L3QuNGPOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OCBmZXRjaC1wYWNrLmM6MTI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3Qgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAi0L7QsdGK0LXQutGCINC90LUg0L3QsNC50LTQtdC9OiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MSBmZXRjaC1wYWNrLmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LIg0L7QsdGK0LXQutGC0LU6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzczIGZldGNoLXBhY2suYzoxMjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICLRh9Cw0YHRgtC40YfQvdGL0Lkg0LrQu9C+0L0g0L3QtSDQvdCw0LnQtNC10L06ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6Mzc2IGZldGNoLXBhY2suYzoxMjg4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgItC+0LbQuNC00LDQu9C+0YHRjCBzaGFsbG93L3Vuc2hhbGxvdywg0LAg0L/QvtC70YPRh9C10L3QviAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgJWQgJXMiCittc2dzdHIgItC/0L7Qu9GD0YfQtdC90L4gJXMgJWQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDQutC+0LzQvNC40YIgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NjUKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgItC+0YHRgtCw0L3QsNCy0LvQuNCy0LDRjiDQtNCw0LvRjNC90LXQudGI0LjQtSDQv9C+0L/Ri9GC0LrQuCIKKworIzogZmV0Y2gtcGFjay5jOjQ3NyBwcm9ncmVzcy5jOjI4NAorbXNnaWQgImRvbmUiCittc2dzdHIgItCz0L7RgtC+0LLQviIKKworIzogZmV0Y2gtcGFjay5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAi0L/QvtC70YPRh9C10L3QviAlcyAoJWQpICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgJXMgYXMgY29tcGxldGUiCittc2dzdHIgItCf0L7QvNC10YfQsNGOICVzINC60LDQuiDQt9Cw0LLQtdGA0YjQtdC90L3Ri9C5IgorCisjOiBmZXRjaC1wYWNrLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICLRg9C20LUg0LXRgdGC0YwgJXMgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjc4MworbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrOiDQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDQv9GA0L7Qs9GA0LDQvNC80YMg0YDQsNC30LHQvtGA0LAg0LTQsNC90L3Ri9GFIgorCisjOiBmZXRjaC1wYWNrLmM6NzkxCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAi0L7RiNC40LHQutCwINC/0YDQvtGC0L7QutC+0LvQsDog0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC30LDQs9C+0LvQvtCy0L7QuiDQv9C+0YLQvtC60LAiCisKKyM6IGZldGNoLXBhY2suYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiDQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDQv9GA0L7Qs9GA0LDQvNC80YMgJXMiCisKKyM6IGZldGNoLXBhY2suYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyDQt9Cw0LLQtdGA0YjQtdC9INGBINC+0YjQuNCx0LrQvtC5IgorCisjOiBmZXRjaC1wYWNrLmM6ODc3Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAi0L/RgNC+0LjQt9C+0YjQu9CwICDQvtGI0LjQsdC60LAg0LIgINC/0YDQvtCz0YDQsNC80LzQtSDRgNCw0LfQsdC+0YDQsCDQtNCw0L3QvdGL0YUiCisKKyM6IGZldGNoLXBhY2suYzo5MDYKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQutC70LjQtdC90YLQvtCyINGBINGH0LDRgdGC0LjRh9C90YvQvCDQutC70L7QvdC40YDQvtCy0LDQvdC40LXQvCIKKworIzogZmV0Y2gtcGFjay5jOjkxMAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2tfZGV0YWlsZWQiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgbXVsdGlfYWNrX2RldGFpbGVkIgorCisjOiBmZXRjaC1wYWNrLmM6OTEzCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIG5vLWRvbmUiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgbm8tZG9uZSIKKworIzogZmV0Y2gtcGFjay5jOjkxOQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2siCittc2dzdHIgItCh0LXRgNCy0LXRgCDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgbXVsdGlfYWNrIgorCisjOiBmZXRjaC1wYWNrLmM6OTIzCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZC02NGsiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgc2lkZS1iYW5kLTY0ayIKKworIzogZmV0Y2gtcGFjay5jOjkyNworbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBzaWRlLWJhbmQiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgc2lkZS1iYW5kIgorCisjOiBmZXRjaC1wYWNrLmM6OTMxCittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgYWxsb3ctdGlwLXNoYTEtaW4td2FudCIKKworIzogZmV0Y2gtcGFjay5jOjkzNQorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCisKKyM6IGZldGNoLXBhY2suYzo5NDUKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgb2ZzLWRlbHRhIgorbXNnc3RyICLQodC10YDQstC10YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIG9mcy1kZWx0YSIKKworIzogZmV0Y2gtcGFjay5jOjk1MSBmZXRjaC1wYWNrLmM6MTE0NAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0YTQuNC70YzRgtGA0LDRhtC40Y4iCisKKyM6IGZldGNoLXBhY2suYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPINGB0LXRgNCy0LXRgNCwICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5NjUKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctc2luY2UiCittc2dzdHIgItCh0LXRgNCy0LXRgCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiAtLXNoYWxsb3ctc2luY2UiCisKKyM6IGZldGNoLXBhY2suYzo5NjkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAi0KHQtdGA0LLQtdGAINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIC0tc2hhbGxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6OTcxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgItCh0LXRgNCy0LXRgCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiAtLWRlZXBlbiIKKworIzogZmV0Y2gtcGFjay5jOjk4OAorbXNnaWQgIm5vIGNvbW1vbiBjb21taXRzIgorbXNnc3RyICLQvdC1INC+0LHRidC40YUg0LrQvtC80LzQuNGC0L7QsiIKKworIzogZmV0Y2gtcGFjay5jOjEwMDAgZmV0Y2gtcGFjay5jOjE0NDkKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2s6INC+0YjQuNCx0LrQsCDQv9GA0Lgg0L/QvtC70YPRh9C10L3QuNC4INC00LDQvdC90YvRhS4iCisKKyM6IGZldGNoLXBhY2suYzoxMTM4Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAi0KHQtdGA0LLQtdGAINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINGH0LDRgdGC0LjRh9C90YvQtSDQt9Cw0L/RgNC+0YHRiyIKKworIzogZmV0Y2gtcGFjay5jOjExNzEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVxdWVzdCB0byByZW1vdGUiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjExODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBzZWN0aW9uIGhlYWRlciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEyNDkKK21zZ2lkICJleHBlY3RlZCBwYWNrZmlsZSB0byBiZSBzZW50IGFmdGVyICdyZWFkeSciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEyNTEKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgIiIKKworIzogZmV0Y2gtcGFjay5jOjEyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBzaGFsbG93IGluZm86ICVkIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHdhbnRlZC1yZWYsIGdvdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGZldGNoLXBhY2suYzoxMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAiIgorCisjOiBmZXRjaC1wYWNrLmM6MTY3NgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICLQvdC10YIg0YHQvtC+0YLQstC10YHRgtCy0YPRjtGJ0LXQs9C+INCy0L3QtdGI0L3QtdCz0L4g0YPQutCw0LfQsNGC0LXQu9GPINC90LAg0LLQtdGC0LrRgyIKKworIzogZmV0Y2gtcGFjay5jOjE2OTkgYnVpbHRpbi9jbG9uZS5jOjY3MworbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICLQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC/0YDQuNGB0LvQsNC7INC90LUg0LLRgdC1INC90LXQvtCx0YXQvtC00LjQvNGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGZldGNoLXBhY2suYzoxNzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAi0L3QtdGCINGC0LDQutC+0Lkg0LLQvdC10YjQvdC10Lkg0YHRgdGL0LvQutC4ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAi0KHQtdGA0LLQtdGAINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC30LDQv9GA0L7RgSDQvdC10L7QsdGK0Y/QstC70LXQvdC90L7Qs9C+INC+0LHRitC10LrRgtCwICVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6MzE4Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcg0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LTQv9C40YHQsNGC0Ywg0LTQsNC90L3Ri9C1IgorCisjOiBncGctaW50ZXJmYWNlLmM6MzQ0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0YTQsNC50LsiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciCittc2dzdHIgItGB0LHQvtC5INC30LDQv9C40YHQuCDQvtGC0YHQvtC10LTQuNC90LXQvdC90L7QuSDQv9C+0LTQv9C40YHQuCDQsiDCqyVzwrsiCisKKyM6IGdyYXBoLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDRg9GOINC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDRhtCy0LXRgiDCqyUuKnPCuyDQsiBsb2cuZ3JhcGhDb2xvcnMiCisKKyM6IGdyZXAuYzoyMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLCqyVzwrs6INC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQtdGB0YLRjCAlcyIKKworIzogZ3JlcC5jOjIxMzAgc2V0dXAuYzoxNjQgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0IMKrJXPCuyIKKworIzogZ3JlcC5jOjIxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCIKK21zZ3N0ciAiwqslc8K7OiDRgdC70LjRiNC60L7QvCDQvNCw0LvQviDQtNCw0L3QvdGL0YUg0L/RgNC+0YfQuNGC0LDQvdC+IgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAi0YHQvtC30LTQsNC90LjQtSDRgNCw0LHQvtGH0LXQuSDQvtCx0LvQsNGB0YLQuCAo0YHQvNC+0YLRgNC40YLQtSDRgtCw0LrQttC1OiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICLRgNCw0LHQvtGC0LAg0YEg0YLQtdC60YPRidC40LzQuCDQuNC30LzQtdC90LXQvdC40Y/QvNC4ICjRgdC80L7RgtGA0LjRgtC1INGC0LDQutC20LU6IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKKworIzogaGVscC5jOjI1Cittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICLQv9GA0L7RgdC80L7RgtGAINC40YHRgtC+0YDQuNC4INC4INGC0LXQutGD0YnQtdCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPICjRgdC80L7RgtGA0LjRgtC1INGC0LDQutC20LU6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgItCy0YvRgNCw0YnQuNCy0LDQvdC40LUsINC+0YLQvNC10YLQutCwINC4INC90LDRgdGC0YDQvtC50LrQsCDQstCw0YjQtdC5INC+0LHRidC10Lkg0LjRgdGC0L7RgNC40LgiCisKKyM6IGhlbHAuYzoyNworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAi0YHQvtCy0LzQtdGB0YLQvdCw0Y8g0YDQsNCx0L7RgtCwICjRgdC80L7RgtGA0LjRgtC1INGC0LDQutC20LU6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICLQntGB0L3QvtCy0L3Ri9C1INC80LDRiNC40L3QvtGH0LjRgtCw0LXQvNGL0LUg0LrQvtC80LDQvdC00YsiCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAi0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Ri9C1INC60L7QvNCw0L3QtNGLIC8g0JzQsNC90LjQv9GD0LvRj9GC0L7RgNGLIgorCisjOiBoZWxwLmM6MzMKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICLQktGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdGL0LUg0LrQvtC80LDQvdC00YsgLyDQl9Cw0L/RgNC+0YHRh9C40LrQuCIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgItCS0LfQsNC40LzQvtC00LXQudGB0YLQstC40LUg0YEg0LTRgNGD0LPQuNC80LgiCisKKyM6IGhlbHAuYzozNQorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAi0J3QuNC30LrQvtGD0YDQvtCy0L3QtdCy0YvQtSDQutC+0LzQsNC90LTRiyAvINCc0LDQvdC40L/Rg9C70Y/RgtC+0YDRiyIKKworIzogaGVscC5jOjM2Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAi0J3QuNC30LrQvtGD0YDQvtCy0L3QtdCy0YvQtSDQutC+0LzQsNC90LTRiyAvINCX0LDQv9GA0L7RgdGH0LjQutC4IgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaGluZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgItCd0LjQt9C60L7Rg9GA0L7QstC90LXQstGL0LUg0LrQvtC80LDQvdC00YsgLyDQodC40L3RhdGA0L7QvdC40LfQsNGG0LjRjyDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIiCisKKyM6IGhlbHAuYzozOAorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVybmFsIEhlbHBlcnMiCittc2dzdHIgItCd0LjQt9C60L7Rg9GA0L7QstC90LXQstGL0LUg0LrQvtC80LDQvdC00YsgLyDQktC90YPRgtGA0LXQvdC90LjQtSDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdGL0LUiCisKKyM6IGhlbHAuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICLQtNC+0YHRgtGD0L/QvdGL0LUg0LrQvtC80LDQvdC00YsgZ2l0INCyIMKrJXPCuyIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00YsgZ2l0LCDQtNC+0YHRgtGD0L/QvdGL0LUg0LIg0LTRgNGD0LPQuNGFINC80LXRgdGC0LDRhSDQstCw0YjQtdCz0L4gJFBBVEgiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdGL0LUg0LrQvtC80LDQvdC00YsgR2l0INC40YHQv9C+0LvRjNC30YPQtdC80YvQtSDQsiDRgNCw0LfQu9C40YfQvdGL0YUg0YHQuNGC0YPQsNGG0LjRj9GFOiIKKworIzogaGVscC5jOjM2MyBnaXQuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBjb21tYW5kIGxpc3RpbmcgdHlwZSAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80YvQuSDRgtC40L8g0YHQv9C40YHQutCwINC60L7QvNCw0L3QtCDCqyVzwrsiCisKKyM6IGhlbHAuYzo0MDMKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAi0J7RgdC90L7QstC90YvQtSDRgNGD0LrQvtCy0L7QtNGB0YLQstCwIEdpdDoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgItCX0LDQv9GD0YHRgtC40YLQtSDCq2dpdCBoZWxwIDzQutC+0LzQsNC90LTQsD7Cuywg0YfRgtC+0LHRiyDQv9GA0L7Rh9C10YHRgtGMINC+INC60L7QvdC60YDQtdGC0L3QvtC5INC/0L7QtNC60L7QvNCw0L3QtNC1IgorCisjOiBoZWxwLmM6NTE3Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIiIKKworIzogaGVscC5jOjUzMgorbXNnaWQgIkNvbW1hbmQgYWxpYXNlcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiwqslc8K7INC/0L7RhdC+0LbQtSDQvdCwINC60L7QvNCw0L3QtNGDIGdpdCwg0L3QviDQvdCw0Lwg0L3QtSDRg9C00LDQu9C+0YHRjCDQtdC1INC30LDQv9GD0YHRgtC40YLRjC4g0JLQvtC30LzQvtC20L3QviwgZ2l0LSVzICDQvdC1INGA0LDQsdC+0YLQsNC10YI/IgorCisjOiBoZWxwLmM6NjU1Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgItCe0Lkt0ZHQuSEg0JLQsNGI0LAg0YHQuNGB0YLQtdC80LAg0L3QtSDRgdC+0L7QsdGJ0LDQtdGCINC90Lgg0L4g0LrQsNC60LjRhSDQutC+0LzQsNC90LTQsNGFIEdpdCDQstC+0L7QsdGJ0LUuIgorCisjOiBoZWxwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgItCS0L3QuNC80LDQvdC40LU6INCS0Ysg0LfQsNC/0YPRgdGC0LjQu9C4INC90LUg0YHRg9GJ0LXRgdGC0LLRg9GO0YnRg9GOINC60L7QvNCw0L3QtNGDIEdpdCDCqyVzwrsuIgorCisjOiBoZWxwLmM6NjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgItCf0YDQvtC00L7Qu9C20LDRjiwg0L/RgNC10LTQv9C+0LvQsNCz0LDRjywg0YfRgtC+INCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDCqyVzwrsuIgorCisjOiBoZWxwLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgaW4gJTAuMWYgc2Vjb25kcywgYXNzdW1pbmcgdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgItCf0YDQvtC00L7Qu9C20YMg0YfQtdGA0LXQtyAlMC4xZiDRgdC10LrRg9C90LQsINC/0YDQtdC00L/QvtC70LDQs9Cw0Y8sINGH0YLQviDQstGLINC40LzQtdC70Lgg0LIg0LLQuNC00YMgwqslc8K7LiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6IMKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQvtC80LDQvdC00L7QuSBnaXQuINCh0LzQvtGC0YDQuNGC0LUgwqtnaXQgLS1oZWxwwrsuIgorCisjOiBoZWxwLmM6Njk5Cittc2dpZCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZCBpcyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIlRoZSBtb3N0IHNpbWlsYXIgY29tbWFuZHMgYXJlIgorbXNnc3RyWzBdICJcbtCh0LDQvNGL0LUg0L/QvtGF0L7QttC40LUg0LrQvtC80LDQvdC00Ys6IgorbXNnc3RyWzFdICJcbtCh0LDQvNGL0LUg0L/QvtGF0L7QttC40LUg0LrQvtC80LDQvdC00Ys6IgorbXNnc3RyWzJdICJcbtCh0LDQvNGL0LUg0L/QvtGF0L7QttC40LUg0LrQvtC80LDQvdC00Ys6IgorbXNnc3RyWzNdICJcbtCh0LDQvNGL0LUg0L/QvtGF0L7QttC40LUg0LrQvtC80LDQvdC00Ys6IgorCisjOiBoZWxwLmM6NzE0Cittc2dpZCAiZ2l0IHZlcnNpb24gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorCisjOiBoZWxwLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMg4oCUICVzIgorCisjOiBoZWxwLmM6Nzg2Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICJcbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDRjdGC0L4/IgorbXNnc3RyWzFdICJcbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDRh9GC0L4t0YLQviDQuNC3INGN0YLQvtCz0L4/IgorbXNnc3RyWzJdICJcbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDRh9GC0L4t0YLQviDQuNC3INGN0YLQvtCz0L4/IgorbXNnc3RyWzNdICJcbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDRh9GC0L4t0YLQviDQuNC3INGN0YLQvtCz0L4/IgorCisjOiBpZGVudC5jOjM0OQorbXNnaWQgIiIKKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKK21zZ3N0ciAiXG4qKiog0J/QvtC20LDQu9GD0LnRgdGC0LAsINGB0LrQsNC20LjRgtC1INC80L3QtSDQutGC0L4g0LLRiyDQtdGB0YLRjC5cblxu0JfQsNC/0YPRgdGC0LjRgtC1XG5cbiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCLQktCw0YjQtSDQmNC80Y9cIlxuXG7QtNC70Y8g0YPQutCw0LfQsNC90LjRjyDQuNC00LXQvdGC0LjRhNC40LrQsNGG0LjQvtC90L3Ri9GFINC00LDQvdC90YvRhSDQsNC60LrQsNGD0L3RgtCwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxu0J/RgNC+0L/Rg9GB0YLQuNGC0LUg0L/QsNGA0LDQvNC10YLRgCAtLWdsb2JhbCDQtNC70Y8g0YPQutCw0LfQsNC90LjRjyDQtNCw0L3QvdGL0YUg0YLQvtC70YzQutC+INC00LvRjyDRjdGC0L7Qs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uXG5cbiIKKworIzogaWRlbnQuYzozNzkKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICLQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyDQvdC1INGD0LrQsNC30LDQvSDQuCDQsNCy0YLQvtC+0L/RgNC10LTQtdC70LXQvdC40LUg0L7RgtC60LvRjtGH0LXQvdC+IgorCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQsNCy0YLQvtC+0L/RgNC10LTQtdC70LXQvdC40LUg0LDQtNGA0LXRgdCwINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyAo0L/QvtC70YPRh9C10L3QviDCqyVzwrspIgorCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi0LjQvNGPINC90LUg0YPQutCw0LfQsNC90L4g0Lgg0LDQstGC0L7QvtC/0YDQtdC00LXQu9C10L3QuNC1INC+0YLQutC70Y7Rh9C10L3QviIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0LDQstGC0L7QvtC/0YDQtdC00LXQu9C10L3QuNC1INC40LzQtdC90LggKNC/0L7Qu9GD0YfQtdC90L4gwqslc8K7KSIKKworIzogaWRlbnQuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgaWRlbnQgbmFtZSAoZm9yIDwlcz4pIG5vdCBhbGxvd2VkIgorbXNnc3RyICLQv9GD0YHRgtC+0LUg0LjQvNGPINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAgKNC00LvRjyA8JXM+KSDQvdC1INGA0LDQt9GA0LXRiNC10L3QviIKKworIzogaWRlbnQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZSBjb25zaXN0cyBvbmx5IG9mIGRpc2FsbG93ZWQgY2hhcmFjdGVyczogJXMiCittc2dzdHIgItC40LzRjyDRgdC+0YHRgtC+0LjRgiDRgtC+0LvRjNC60L4g0LjQtyDQvdC10YDQsNC30YDQtdGI0LXQvdC90YvRhSDRgdC40LzQvtCy0L7Qu9C+0LI6ICVzIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGE0L7RgNC80LDRgiDQtNCw0YLRizogJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIHRyZWUgbW9kZSwgYnV0IGlzIG5vdCBhIHRyZWUiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgcm9vdCB0cmVlIGZvciBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MzYKK21zZ2lkICJtdWx0aXBsZSBmaWx0ZXItc3BlY3MgY2Fubm90IGJlIGNvbWJpbmVkIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDQvtCx0YrQtdC00LjQvdGP0YLRjCDRhNC40LvRjNGC0YDQsNGG0LjRjiDRgSDQv9C+0LzQvtGJ0YzRjiDQvdC10YHQutC+0LvRjNC60LjRhSDRgdC/0LXRhtC40YTQuNC60LDRhtC40LkiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjU4Cittc2dpZCAiZXhwZWN0ZWQgJ3RyZWU6PGRlcHRoPiciCittc2dzdHIgIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6ODQKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNTgKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHBhcnRpYWwgY2xvbmUgcHJvbWlzb3IgcmVtb3RlIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjQt9C80LXQvdC40YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC/0YDQuCDRh9Cw0YHRgtC40YfQvdC+0Lwg0LrQu9C+0L3QuNGA0L7QstCw0L3QuNC4IgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMIMKrJXMubG9ja8K7OiAlcy5cblxu0J/QvtGF0L7QttC1LCDRh9GC0L4g0LTRgNGD0LPQvtC5INC/0YDQvtGG0LXRgdGBIGdpdCDQt9Cw0L/Rg9GJ0LXQvSDQsiDRjdGC0L7QvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4LFxu0L3QsNC/0YDQuNC80LXRgCDRgNC10LTQsNC60YLQvtGAINC+0YLQutGA0YvRgiDQuNC3IMKrZ2l0IGNvbW1pdMK7LiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0YPQsdC10LTQuNGC0LXRgdGMLFxu0YfRgtC+INCy0YHQtSDQv9GA0L7RhtC10YHRgdGLINCx0YvQu9C4INC30LDQstC10YDRiNC10L3RiyDQuCDQv9C+0YLQvtC8INC/0L7Qv9GA0L7QsdGD0LnRgtC1INGB0L3QvtCy0LAuXG7QldGB0LvQuCDRjdGC0L4g0L3QtSDQv9C+0LzQvtC20LXRgiwg0YLQviDQstC+0LfQvNC+0LbQvdC+INC/0YDQvtGG0LXRgdGBIGdpdCDQsdGL0Lsg0YDQsNC90LXQtSDQt9Cw0LLQtdGA0YjQtdC9XG7RgSDQvtGI0LjQsdC60L7QuSDQsiDRjdGC0L7QvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4OiBcbtGD0LTQsNC70LjRgtC1INGE0LDQudC7INCy0YDRg9GH0L3Rg9GOINC00LvRjyDQv9GA0L7QtNC+0LvQttC10L3QuNGPLiIKKworIzogbG9ja2ZpbGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMIMKrJXMubG9ja8K7OiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAi0YHQsdC+0Lkg0YfRgtC10L3QuNGPINC60Y3RiNCwIgorCisjOiBtZXJnZS5jOjEwNyByZXJlcmUuYzo3MjAgYnVpbHRpbi9hbS5jOjE4ODcgYnVpbHRpbi9hbS5jOjE5MjEKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NjEgYnVpbHRpbi9jaGVja291dC5jOjgxMSBidWlsdGluL2Nsb25lLmM6NzczCisjOiBidWlsdGluL3N0YXNoLmM6MjY0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0L3QvtCy0YvQuSDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzIyCittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIijQv9C70L7RhdC+0Lkg0LrQvtC80LzQuNGCKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICLRgdCx0L7QuSBhZGRfY2FjaGVpbmZvINC00LvRjyDQv9GD0YLQuCDCqyVzwrs7INC+0YLQvNC10L3QsCDRgdC70LjRj9C90LjRjy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAi0YHQsdC+0Lkg0L7QsdC90L7QstC70LXQvdC40Y8gYWRkX2NhY2hlaW5mbyDQtNC70Y8g0L/Rg9GC0Lggwqslc8K7OyDQvtGC0LzQtdC90LAg0YHQu9C40Y/QvdC40Y8uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo0MzcKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINC/0YDQuCDQv9C+0YHRgtGA0L7QtdC90LjQuCDQtNC10YDQtdCy0YzQtdCyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQv9GD0YLRjCDCqyVzwrslcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUgJXMsINGH0YLQvtCx0Ysg0L7RgdCy0L7QsdC+0LTQuNGC0Ywg0LzQtdGB0YLQviDQtNC70Y8g0L/QvtC00LrQsNGC0LDQu9C+0LPQvtCyXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg4NiBtZXJnZS1yZWN1cnNpdmUuYzo5MDUKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICI6INCy0L7Qt9C80L7QttC90L4sINC60L7QvdGE0LvQuNC60YIg0LrQsNGC0LDQu9C+0LPQvtCyL9GE0LDQudC70L7Qsj8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg5NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgItC+0YLQutCw0Lcg0L/QvtGC0LXRgNC4INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7Qs9C+INGE0LDQudC70LAg0LIgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MzYgYnVpbHRpbi9jYXQtZmlsZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGCICVzIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgItC+0LbQuNC00LDQtdGC0YHRjyDQtNCy0L7QuNGH0L3Ri9C5INC+0LHRitC10LrRgiDQtNC70Y8gJXMgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywgwqslc8K7OiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGB0LjQvNCy0L7Qu9GM0L3Rg9GOINGB0YHRi9C70LrRgyDCqyVzwrs6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAi0L3QtSDQv9C+0L3Rj9GC0L3Qviwg0YfRgtC+INC00LXQu9Cw0YLRjCDRgSAlMDZvICVzIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgY2hlY2tlZCBvdXQpIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0LvQuNGC0Ywg0L/QvtC00LzQvtC00YPQu9GMICVzICjRgdC+0YHRgtC+0Y/QvdC40LUg0L3QtSDQt9Cw0LHRgNCw0L3QvikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQu9C40YLRjCDQv9C+0LTQvNC+0LTRg9C70YwgJXMgKNC90LXRgiDQutC+0LzQvNC40YLQvtCyKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC70LjRgtGMINC/0L7QtNC80L7QtNGD0LvRjCAlcyAo0YMg0LrQvtC80LzQuNGC0L7QsiDQtNGA0YPQs9Cw0Y8g0LHQsNC30LAg0YHQu9C40Y/QvdC40Y8pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk3IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyB0byB0aGUgZm9sbG93aW5nIGNvbW1pdDoiCittc2dzdHIgItCf0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQg0L/QvtC00LzQvtC00YPQu9GPICVzINC00L4g0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LA6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjAwIG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi0J/QtdGA0LXQvNC+0YLQutCwINCy0L/QtdGA0LXQtCDQv9C+0LTQvNC+0LTRg9C70Y8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kKSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC70LjRgtGMINC/0L7QtNC80L7QtNGD0LvRjCAlcyAo0L3QtdGCINGD0LrQsNC30LDQvdC90YvRhSDQutC+0LzQvNC40YLQvtCyINC00LvRjyDRgdC70LjRj9C90LjRjykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQu9C40YLRjCDQv9C+0LTQvNC+0LTRg9C70YwgJXMgKNC90LXQu9GM0LfRjyDRgdC00LXQu9Cw0YLRjCDQv9C10YDQtdC80L7RgtC60YMg0LLQv9C10YDQtdC0KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI0MAorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAi0J3QsNC50LTQtdC90L4g0LLQvtC30LzQvtC20L3QvtC1INGA0LDQt9GA0LXRiNC10L3QuNC1INGB0LvQuNGP0YLQuNGPINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y86XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICLQldGB0LvQuCDQvtC90L4g0LLQtdGA0L3QvtC1LCDRgtC+INC/0YDQvtGB0YLQviDQtNC+0LHQsNCy0YzRgtC1INC10LPQviDQsiDQuNC90LTQtdC60YEsINC90LDQv9GA0LjQvNC10YAg0YLQsNC6OlxuXG4gIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuXG7RgtC10Lwg0YHQsNC80YvQvCDQv9GA0LjQvdC40LzQsNGPINGN0YLQviDQv9GA0LXQtNC/0L7Qu9C+0LbQtdC90LjQtS5cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0LvQuNGC0Ywg0L/QvtC00LzQvtC00YPQu9GMICVzICjQvdCw0LnQtNC10L3QviDQvdC10YHQutC+0LvRjNC60L4g0YHQu9C40Y/QvdC40LkpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzI1Cittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMINCy0L3Rg9GC0YDQtdC90L3QtdC1INGB0LvQuNGP0L3QuNC1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCAlcyDQsiDQsdCw0LfRgyDQtNCw0L3QvdGL0YUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICLQkNCy0YLQvtGB0LvQuNGP0L3QuNC1ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICLQntGI0LjQsdC60LA6INCe0YLQutCw0Lcg0L/QvtGC0LXRgNC4INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7Qs9C+INGE0LDQudC70LAgJXM7INC30LDQv9C40YHRjCDQsiAlcyDQstC30LDQvNC10L0uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKCVzL9GD0LTQsNC70LXQvdC40LUpOiAlcyDRg9C00LDQu9C10L3QviDQsiAlcyDQuCAlcyDQsiAlcy4g0JLQtdGA0YHQuNGPICVzINC40LcgJXMg0L7RgdGC0LDQstC70LXQvdCwINCyINC00LXRgNC10LLQtS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAoJXMv0YPQtNCw0LvQtdC90LjQtSk6ICVzINGD0LTQsNC70LXQvdC+INCyICVzINC4INC+0YIgJXMg0LTQviAlcyDQsiAlcy4g0JLQtdGA0YHQuNGPICVzINC40LcgJXMg0L7RgdGC0LDQstC70LXQvdCwINCyINC00LXRgNC10LLQtS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAoJXMv0YPQtNCw0LvQtdC90LjQtSk6ICVzINGD0LTQsNC70LXQvdC+INCyICVzINC4ICVzINCyICVzLiDQktC10YDRgdC40Y8gJXMg0LjQtyAlcyDQvtGB0YLQsNCy0LvQtdC90LAg0LIg0LTQtdGA0LXQstC1INC90LAgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKCVzL9GD0LTQsNC70LXQvdC40LUpOiAlcyDRg9C00LDQu9C10L3QviDQsiAlcyDQuCDQvtGCICVzINC00L4gJXMg0LIgJXMuINCS0LXRgNGB0LjRjyAlcyDQuNC3ICVzINC+0YHRgtCw0LLQu9C10L3QsCDQsiDQtNC10YDQtdCy0LUg0L3QsCAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MDkKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgItC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MDkKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLQv9C10YDQtdC40LzQtdC90L7QstCw0L3QviIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU4OSBtZXJnZS1yZWN1cnNpdmUuYzoyNDQ1IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICLQntGC0LrQsNC3INC/0L7RgtC10YDQuCDQuNC30LzQtdC90ZHQvdC90L7Qs9C+INGE0LDQudC70LAgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAi0J7RgtC60LDQtyDQv9C+0YLQtdGA0Lgg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzQvtCz0L4g0YTQsNC50LvQsCAlcywg0LTQsNC20LUg0YEg0YPRh9C10YLQvtC8INC10LPQviDQvdCw0LvQuNGH0LjRjy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAgQWRkZWQgJXMgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMg4oCUINGN0YLQviDQutCw0YLQsNC70L7QsyDQsiAlcywg0LTQvtCx0LDQstC70Y/QtdC8INC60LDQuiAlcyDQstC80LXRgdGC0L4g0Y3RgtC+0LPQviIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY5MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAi0J7RgtC60LDQtyDQv9C+0YLQtdGA0Lgg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzQvtCz0L4g0YTQsNC50LvQsCAlczsg0LTQvtCx0LDQstC70LXQvdC40LUg0LrQsNC6ICVzINCy0LfQsNC80LXQvS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lICIKKyJcIiVzXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAo0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtS/Qv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1KTog0J/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDCqyVzwrvihpLCqyVzwrsg0LIg0LLQtdGC0LrQtSDCqyVzwrsg0Lgg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDCqyVzwrvihpLCqyVzwrsg0LIg0LLQtdGC0LrQtSDCqyVzwrslcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxNgorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiICjQvtGB0YLQsNCy0LvQtdC90L4g0L3QtdGA0LDQt9GA0LXRiNC10L3QvdGL0LwpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAo0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtS/Qv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1KTog0J/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDCqyVzwrvihpLCqyVzwrsg0LIg0LLQtdGC0LrQtSDCqyVzwrsg0Lgg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDCqyVzwrvihpLCqyVzwrsg0LIg0LLQtdGC0LrQtSDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogVW5jbGVhciB3aGVyZSB0byBwbGFjZSAlcyBiZWNhdXNlICIKKyJkaXJlY3RvcnkgJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdpdGggbm8gZGVzdGluYXRpb24gIgorImdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogRXhpc3RpbmcgZmlsZS9kaXIgYXQgJXMgaW4gdGhlIHdheSBvZiAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZShzKSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcgcGF0aChzKSB0aGVyZTogJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogQ2Fubm90IG1hcCBtb3JlIHRoYW4gb25lIHBhdGggdG8gJXM7ICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyB0cmllZCB0byBwdXQgdGhlc2UgcGF0aHMgdGhlcmU6ICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIGRpcmVjdG9yeSAlcy0+JXMgaW4gJXMuIFJlbmFtZSBkaXJlY3RvcnkgIgorIiVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyAlcyAtPiAlcyByZW5hbWUgdG8gJXMsIGJlY2F1c2UgJXMgaXRzZWxmIHdhcyAiCisicmVuYW1lZC4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjkyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INC/0YDQvtGH0LjRgtCw0YLRjCDQvtCx0YrQtdC60YIgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICLQvtCx0YrQtdC60YIgJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LLQvtC40YfQvdGL0Lwg0L7QsdGK0LXQutGC0L7QvCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mjk5NgorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAi0LjQt9C80LXQvdC10L3QuNC1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyOTk2Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgItC40LfQvNC10L3QtdC90L4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMDgKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICLRgdC+0LTQtdGA0LbQuNC80L7QtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAxMgorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgItC00L7QsdCw0LLQu9C10L3QuNC1L9C00L7QsdCw0LLQu9C10L3QuNC1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0LogJXMgKNGB0LvQuNGC0Ysg0L7QtNC40L3QsNC60L7QstGL0LUg0LjQt9C80LXQvdC10L3QuNGPINC60LDQuiDRgdGD0YnQtdGB0YLQstGD0Y7RidC40LUpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDU3IGdpdC1zdWJtb2R1bGUuc2g6OTM3Cittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICLQv9C+0LTQvNC+0LTRg9C70YwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKCVzKTog0JrQvtC90YTQu9C40LrRgiDRgdC70LjRj9C90LjRjyDQsiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAi0JTQvtCx0LDQstC70LXQvdC40LUg0LLQvNC10YHRgtC+INGN0YLQvtCz0L4g0LrQsNC6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIgorIiBpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiIKKyIgJXM7IG1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMTcKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAi0YTQsNC50Lsv0LrQsNGC0LDQu9C+0LMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMjIKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAi0LrQsNGC0LDQu9C+0LMv0YTQsNC50LsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICLQmtCe0J3QpNCb0JjQmtCiICglcyk6INCj0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQutCw0YLQsNC70L7QsyDRgSDQuNC80LXQvdC10Lwgwqslc8K7INCyIMKrJXPCuy4g0JTQvtCx0LDQstC70LXQvdC40LUgwqslc8K7INC60LDQuiDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM0NworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiAgJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM5NgorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSEiCittc2dzdHIgItCj0LbQtSDQvtCx0L3QvtCy0LvQtdC90L4hIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0YHQu9C40Y/QvdC40Y8g0LTQtdGA0LXQstGM0LXQsiDCqyVzwrsg0Lggwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTA0Cittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgItCh0LvQuNGP0L3QuNC1OiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzUxNworIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAi0L3QsNC50LTQtdC9ICV1INC+0LHRidC40Lkg0L/RgNC10LTQvtC6OiIKK21zZ3N0clsxXSAi0L3QsNC50LTQtdC90L4gJXUg0L7QsdGJ0LjRhSDQv9GA0LXQtNC60LA6IgorbXNnc3RyWzJdICLQvdCw0LnQtNC10L3QviAldSDQvtCx0YnQuNGFINC/0YDQtdC00LrQvtCyOiIKK21zZ3N0clszXSAi0L3QsNC50LTQtdC90L4gJXUg0L7QsdGJ0LjRhSDQv9GA0LXQtNC60L7QsjoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1NTYKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgItGB0LvQuNGP0L3QuNC1INC90LUg0LLQtdGA0L3Rg9C70L4g0LrQvtC80LzQuNGCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0L7QsdGK0LXQutGCIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYzOCBidWlsdGluL21lcmdlLmM6NzAyIGJ1aWx0aW4vbWVyZ2UuYzo4NzMKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICLQndC1INGD0LTQsNC10YLRgdGPINC30LDQv9C40YHQsNGC0Ywg0LjQvdC00LXQutGBLiIKKworIzogbWlkeC5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggZmlsZSAlcyBpcyB0b28gc21hbGwiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc2lnbmF0dXJlIDB4JTA4eCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24gJWQgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggdmVyc2lvbiAldSBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAi0LLQtdGA0YHQuNGPINGF0LXRiC3RgdGD0LzQvNGLICV1INC90LUg0YHQvtC+0YLQstC10YLRgdCy0YPQtdGCIgorCisjOiBtaWR4LmM6MTA2Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEzMAorbXNnaWQgInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE0MworbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjE0NQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNDcKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGxvb2t1cCBjaHVuayIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MjU4Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBzdG9yZXMgYSA2NC1iaXQgb2Zmc2V0LCBidXQgb2ZmX3QgaXMgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoyODYKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYXIgbXVsdGktcGFjay1pbmRleCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBtaWR4LmM6MTA0OAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEwNjcKK21zZ2lkICJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIE1JRFgiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXI6IG9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCittc2dzdHIgIiIKKworIzogbWlkeC5jOjEwOTUKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMDEKK21zZ2lkICJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiCittc2dzdHIgIiIKKworIzogbWlkeC5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjayBlbnRyeSBmb3Igb2lkWyVkXSA9ICVzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IG1pZHguYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgIiIKKworIzogbmFtZS1oYXNoLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9kaXIgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuYW1lLWhhc2guYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuYW1lLWhhc2guYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvIGNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgItCS0Ysg0L3QtSDQt9Cw0LrQvtC90YfQuNC70Lgg0L/RgNC10LTRi9C00YPRidC10LUg0YHQu9C40Y/QvdC40LUg0LfQsNC80LXRgtC+0LogKCVzINGB0YPRidC10YHRgtCy0YPQtdGCKS5cbtCX0LDQv9GD0YHRgtC40YLQtSDCq2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdMK7INC40LvQuCDCq2dpdCBub3RlcyBtZXJnZSAtLWFib3J0wrsg0LTQu9GPINC60L7QvNC80LjRgtCwINC40LvQuCDQvtGC0LzQtdC90Ysg0L/RgNC10LTRi9C00YPRidC10LPQviDRgdC70LjRj9C90LjRjyDQuCDQt9Cw0L/Rg9GB0LrQsCDQvdC+0LLQvtCz0L4g0YHQu9C40Y/QvdC40Y8g0LfQsNC80LXRgtC+0LouIgorCisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICLQktGLINC90LUg0LfQsNC60L7QvdGH0LjQu9C4INC/0YDQtdC00YvQtNGD0YnQtdC1INGB0LvQuNGP0L3QuNC1INC30LDQvNC10YLQvtC6ICglcyDRgdGD0YnQtdGB0YLQstGD0LXRgikuIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LfQsNC60L7QvNC80LjRgtC40YLRjCDQvdC10LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNC90L3QvtC1INC40LvQuCDQvdC1INC40LzQtdGO0YnQtdC1INGB0YHRi9C70L7QuiDQtNC10YDQtdCy0L4g0LfQsNC80LXRgtC+0LoiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgbm90ZXMucmV3cml0ZU1vZGU6IMKrJXPCuyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgItCe0YLQutCw0Lcg0LIg0L/QtdGA0LXQt9Cw0L/QuNGB0Lgg0LfQsNC80LXRgtC+0Log0LIgJXMgKNC30LAg0L/RgNC10LTQtdC70LDQvNC4IHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjOiBub3Rlcy11dGlscy5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1INC/0LXRgNC10LzQtdC90L3QvtC5ICVzOiDCqyVzwrsiCisKKyM6IG9iamVjdC5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICIiCisKKyM6IG9iamVjdC5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgYSAlcywgbm90IGEgJXMiCittc2dzdHIgIiIKKworIzogb2JqZWN0LmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIgorbXNnc3RyICIiCisKKyM6IG9iamVjdC5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0L7QsdGK0LXQutGCOiAlcyIKKworIzogb2JqZWN0LmM6MjY3IG9iamVjdC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoICVzIgorbXNnc3RyICLQvdC10YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INGF0LXRiC3RgdGD0LzQvNGLICVzIgorCisjOiBwYWNrZmlsZS5jOjYxNworbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICLRgdC00LLQuNCzINC00L4g0LrQvtC90YbQsCDRhNCw0LnQu9CwINC/0LDQutC10YLQsCAo0LLQvtC30LzQvtC20L3Qviwg0L/QvtCy0YDQtdC20LTRkdC9INGE0LDQudC7IC5pZHg/KSIKKworIzogcGFja2ZpbGUuYzoxODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAi0YHQtNCy0LjQsyDQtNC+INC90LDRh9Cw0LvQsCDQuNC90LTQtdC60YHQsCDQv9Cw0LrQtdGC0LAg0LTQu9GPICVzICjQv9C+0LLRgNC10LbQtNGR0L0g0LjQvdC00LXQutGBPykiCisKKyM6IHBhY2tmaWxlLmM6MTg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmV5b25kIGVuZCBvZiBwYWNrIGluZGV4IGZvciAlcyAodHJ1bmNhdGVkIGluZGV4PykiCittc2dzdHIgItGB0LTQstC40LMg0LfQsCDQv9GA0LXQtNC10LvQsNC80Lgg0LjQvdC00LXQutGB0LAg0L/QsNC60LXRgtCwINC00LvRjyAlcyAo0L7QsdGA0LXQt9Cw0L0g0LjQvdC00LXQutGBPykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImFtYmlndW91cyBvcHRpb246ICVzIChjb3VsZCBiZSAtLSVzJXMgb3IgLS0lcyVzKSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDIzIHBhcnNlLW9wdGlvbnMuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzID8pIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gYCVzJyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODcKK21zZ2lkICIuLi4iCittc2dzdHIgIuKApiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1OiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIzogcGFyc2Utb3B0aW9ucy5jOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgICAgICAgICDQuNC70Lg6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICAgICAgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTQKK21zZ2lkICItTlVNIgorbXNnc3RyICIt0JrQntCb0JjQp9CV0KHQotCS0J4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgb2YgLS0lcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoxMzAgcGFyc2Utb3B0aW9ucy1jYi5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC40LzRjyDQvtCx0YrQtdC60YLQsCDCqyVzwrsiCisKKyM6IHBhdGguYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC10LTQvtGB0YLQsNCy0LjRgtGMINC00L7RgdGC0YPQvyDQuiAlcyDQvdCwINC30LDQv9C40YHRjCIKKworIzogcGF0aHNwZWMuYzoxMjgKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAi0KPQv9GA0LDQstC70Y/RjtGJ0LjQuSDRgdC40LzQstC+0LsgwqtcXMK7INC90LUg0YDQsNC30YDQtdGI0LXQvSDQutCw0Log0L/QvtGB0LvQtdC00L3QuNC5INGB0LjQvNCy0L7QuyDQsiDQt9C90LDRh9C10L3QuNC4IGF0dHIiCisKKyM6IHBhdGhzcGVjLmM6MTQ2Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLQoNCw0LfRgNC10YjQtdC9INGC0L7Qu9GM0LrQviDQvtC00LjQvSDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAgwqthdHRyOsK7LiIKKworIzogcGF0aHNwZWMuYzoxNDkKK21zZ2lkICJhdHRyIHNwZWMgbXVzdCBub3QgYmUgZW1wdHkiCittc2dzdHIgItGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgCBhdHRyINC90LUg0LTQvtC70LbQtdC9INCx0YvRgtGMINC/0YPRgdGC0L7QuSIKKworIzogcGF0aHNwZWMuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUgbmFtZSAlcyIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INC40LzRjyDQsNGC0YDQuNCx0YPRgtCwICVzIgorCisjOiBwYXRoc3BlYy5jOjI1NworbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgItCz0LvQvtCx0LDQu9GM0L3Ri9C1INC+0L/RhtC40Lgg0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0L7QsiDQv9GD0YLQuCDCq2dsb2LCuyDQuCDCq25vZ2xvYsK7INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBwYXRoc3BlYy5jOjI2NAorbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgItCz0LvQvtCx0LDQu9GM0L3QsNGPINC+0L/RhtC40Y8g0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0LAg0L/Rg9GC0LggwqtsaXRlcmFswrsg0L3QtSDRgdC+0LLQvNC10YHRgtC40LzQsCDRgSDQtNGA0YPQs9C40LzQuCDQs9C70L7QsdCw0LvRjNC90YvQvNC4INGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNCw0LzQuCDQtNC+0YHRgtGD0L/QsCIKKworIzogcGF0aHNwZWMuYzozMDQKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQv9Cw0YDQsNC80LXRgtGAINC00LvRjyDQvNCw0LPQuNGH0LXRgdC60L7Qs9C+INGB0LvQvtCy0LAgwqtwcmVmaXjCuyDQsiDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQtSDQv9GD0YLQuCAiCisKKyM6IHBhdGhzcGVjLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90L7QtSDQvNCw0LPQuNGH0LXRgdC60L7QtSDRgdC70L7QstC+IMKrJS4qc8K7INCyINGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNC1INC/0YPRgtC4IMKrJXPCuyIKKworIzogcGF0aHNwZWMuYzozMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICLQn9GA0L7Qv9GD0YnQtdC90L4gwqspwrsg0LIg0LrQvtC90YbQtSDQvNCw0LPQuNGH0LXRgdC60L7Qs9C+INGB0LvQvtCy0LAg0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0LAg0L/Rg9GC0Lggwqslc8K7IgorCisjOiBwYXRoc3BlYy5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAi0J3QtdGA0LXQsNC70LjQt9C+0LLQsNC90L3QvtC1INC80LDQs9C40YfQtdGB0LrQvtC1INGB0LvQvtCy0L4gwqslY8K7INGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNCwINC/0YPRgtC4IMKrJXPCuyIKKworIzogcGF0aHNwZWMuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzOiDCq2xpdGVyYWzCuyDQuCDCq2dsb2LCuyDQvdC1INGB0L7QstC80LXRgdGC0LjQvNGLIgorCisjOiBwYXRoc3BlYy5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiDCqyVzwrsg0LLQvdC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IHBhdGhzcGVjLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiwqslc8K7ICjQvNC90LXQvNC+0L3QuNC60LA6IMKrJWPCuykiCisKKyM6IHBhdGhzcGVjLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVzOiDQvNCw0LPQuNGH0LXRgdC60LjQtSDRgdC70L7QstCwINCyINGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNC1INC/0YPRgtC4INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDRjtGC0YHRjyDQutC+0LzQsNC90LTQvtC5OiAlcyIKKworIzogcGF0aHNwZWMuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAg0L/Rg9GC0Lggwqslc8K7INC90LDRhdC+0LTQuNGC0YHRjyDQt9CwINGB0LjQvNCy0L7Qu9C40YfQtdGB0LrQvtC5INGB0YHRi9C70LrQvtC5IgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjk5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGRlbGltIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjEwNgorbXNnaWQgImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MTk2Cittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCAtIGRhdGEgZXhjZWVkcyBtYXggcGFja2V0IHNpemUiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6Mjk1Cittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBwa3QtbGluZS5jOjMwMworbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5IgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIgorbXNnc3RyICIiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgIiIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjzogJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWRlZCBsc3RhdDogJXMiCittc2dzdHIgIiIKKworIzogcHJldHR5LmM6OTY2Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0YTQvtGA0LzQsNGCINC00LvRjyAtLXByZXR0eSIKKworIzogcmFuZ2UtZGlmZi5jOjU2Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGBsb2dgIgorbXNnc3RyICIiCisKKyM6IHJhbmdlLWRpZmYuYzo1OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NzQgc2VxdWVuY2VyLmM6NDg5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvNC80LjRgiDCqyVzwrsiCisKKyM6IHJhbmdlLWRpZmYuYzoyMjQKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAiIgorCisjOiByYW5nZS1kaWZmLmM6NDU1IHJhbmdlLWRpZmYuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBoYXZlIGEgY29tbWl0IGNoZWNrZWQgb3V0IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgJyVzJyB0byBpbmRleCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0ICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjEzMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTQ5OQorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiaW5kZXgudmVyc2lvbiDRg9C60LDQt9Cw0L0sINC90L4g0LfQvdCw0YfQtdC90LjQtSDQvdC10LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L7QtS5cbtCY0YHQv9C+0LvRjNC30YPRjiDQstC10YDRgdC40Y4gJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICJHSVRfSU5ERVhfVkVSU0lPTiDRg9C60LDQt9Cw0L0sINC90L4g0LfQvdCw0YfQtdC90LjQtSDQvdC10LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L7QtS5cbtCY0YHQv9C+0LvRjNC30YPRjiDQstC10YDRgdC40Y4gJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjkxCittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJS40cyBleHRlbnNpb24iCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbmRleCBlbnRyeSBmb3JtYXQgMHglMDh4IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBuYW1lIGZpZWxkIGluIHRoZSBpbmRleCwgbmVhciBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjE4MzMKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MTgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBzdGFnZSBlbnRyaWVzIGZvciBtZXJnZWQgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxODM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxOTQ2IHJlYWQtY2FjaGUuYzoyMjM0IHJlcmVyZS5jOjU2NSByZXJlcmUuYzo1OTkgcmVyZXJlLmM6MTExMQorIzogYnVpbHRpbi9hZGQuYzo0NjAgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzggYnVpbHRpbi9jaGVja291dC5jOjM1OAorIzogYnVpbHRpbi9jaGVja291dC5jOjY3MiBidWlsdGluL2NoZWNrb3V0LmM6MTA2MCBidWlsdGluL2NsZWFuLmM6OTU1CisjOiBidWlsdGluL2NvbW1pdC5jOjM0NCBidWlsdGluL2RpZmYtdHJlZS5jOjEyMCBidWlsdGluL2dyZXAuYzo0OTgKKyM6IGJ1aWx0aW4vbXYuYzoxNDUgYnVpbHRpbi9yZXNldC5jOjI0NSBidWlsdGluL3JtLmM6MjcxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMwCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICLRhNCw0LnQuyDQuNC90LTQtdC60YHQsCDQv9C+0LLRgNC10LbQtNC10L0iCisKKyM6IHJlYWQtY2FjaGUuYzoyMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6MjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjIyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGluZGV4LCBleHBlY3QgJXMgaW4gJXMsIGdvdCAlcyIKK21zZ3N0ciAiIgorCisjOiByZWFkLWNhY2hlLmM6Mjk4OSB3cmFwcGVyLmM6NjU4IGJ1aWx0aW4vbWVyZ2UuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQutGA0YvRgtGMIMKrJXPCuyIKKworIzogcmVhZC1jYWNoZS5jOjMwOTIgc2VxdWVuY2VyLmM6MjM1NCBzZXF1ZW5jZXIuYzozODA3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQg0LTQu9GPIMKrJXPCuyIKKworIzogcmVhZC1jYWNoZS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LrQsNGC0LDQu9C+0LMgZ2l0OiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtGB0L7QtdC00LjQvdC40YLRjDogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICclcyciCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjMyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCittc2dzdHIgItC90LXRgNCw0YHQv9C+0LfQvdCw0L3QvdCw0Y8g0L3QsNGB0YLRgNC+0LnQutCwICVzINC00LvRjyDQvtC/0YbQuNC4IHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiDQmNCz0L3QvtGA0LjRgNGD0Y4uIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozNQorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWFuZD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiYiwgYnJlYWsgPSBzdG9wIGhlcmUgKGNvbnRpbnVlIHJlYmFzZSBsYXRlciB3aXRoICdnaXQgcmViYXNlIC0tY29udGludWUnKVxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiXG7QmtC+0LzQsNC90LTRizpcbnAsIHBpY2sgPNC60L7QvNC80LjRgj4gPSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LrQvtC80LzQuNGCXG5yLCByZXdvcmQgPNC60L7QvNC80LjRgj4gPSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LrQvtC80LzQuNGCLCDQvdC+INC40LfQvNC10L3QuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwXG5lLCBlZGl0IDzQutC+0LzQvNC40YI+ID0g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC60L7QvNC80LjRgiwg0L3QviDQvtGB0YLQsNC90L7QstC40YLRjNGB0Y8g0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y9cbnMsIHNxdWFzaCA80LrQvtC80LzQuNGCPiA9INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQutC+0LzQvNC40YIsINC90L4g0L7QsdGK0LXQtNC40L3QuNGC0Ywg0YEg0L/RgNC10LTRi9C00YPRidC40Lwg0LrQvtC80LzQuNGC0L7QvFxuZiwgZml4dXAgPNC60L7QvNC80LjRgj4gPSDQutCw0LogwqtzcXVhc2jCuywg0L3QviDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LBcbngsIGV4ZWMgPNC60L7QvNCw0L3QtNCwPiA9INCy0YvQv9C+0LvQvdC40YLRjCDQutC+0LzQsNC90LTRgyAo0L7RgdGC0LDRgtC+0Log0YHRgtGA0L7QutC4KSDRgSDQv9C+0LzQvtGJ0YzRjiDQutC+0LzQsNC90LTQvdC+0Lkg0L7QsdC+0LvQvtGH0LrQuFxuYiwgYnJlYWsgPSDQvtGB0YLQsNC90L7QstC40YLRjNGB0Y8g0LfQtNC10YHRjCAo0L/RgNC+0LTQvtC70LbQuNGC0Ywg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcmViYXNlIC0tY29udGludWXCuylcbmQsIGRyb3AgPNC60L7QvNC80LjRgj4gPSDRg9C00LDQu9C40YLRjCDQutC+0LzQvNC40YJcbmwsIGxhYmVsIDzQvNC10YLQutCwPiA9INC00LDRgtGMINC40LzRjyDRgtC10LrRg9GJ0LXQvNGDIEhFQURcbnQsIHJlc2V0IDzQvNC10YLQutCwPiA9INGB0LHRgNC+0YHQuNGC0YwgSEVBRCDQuiDRg9C60LDQt9Cw0L3QvdC+0Lkg0LzQtdGC0LrQtVxubSwgbWVyZ2UgWy1DIDzQutC+0LzQvNC40YI+IHwgLWMgPNC60L7QvNC80LjRgj5dIDzQvNC10YLQutCwPiBbIyA80YHRgtGA0L7QutCwPl1cbi4g0YHQvtC30LTQsNGC0Ywg0YHQu9C40Y/QvdC40LUg0LjRgdC/0L7Qu9GM0LfRg9GPINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQvtGA0LjQs9C40L3QsNC70YzQvdC+0LPQvlxuLiDRgdC70LjRj9C90LjRjyAo0LjQu9C4INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRg9C60LDQt9Cw0L3QvdGD0Y4g0YHRgtGA0L7QutGDLCDQtdGB0LvQuCDQvtGA0LjQs9C40L3QsNC70YzQvdC+0LVcbi4g0YHQu9C40Y/QvdC40LUg0L3QtSDRg9C60LDQt9Cw0L3QvikuINCY0YHQv9C+0LvRjNC30YPQudGC0LUgLWMgPNC60L7QvNC80LjRgj4g0YfRgtC+0LHRiyDQuNC30LzQtdC90LjRgtGMXG4uINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsC5cblxu0K3RgtC4INGB0YLRgNC+0LrQuCDQvNC+0LbQvdC+INC/0LXRgNC10LzQtdGJ0LDRgtGMOyDQvtC90Lgg0LHRg9C00YPRgiDQstGL0L/QvtC70L3QtdC90Ysg0YHQstC10YDRhdGDINCy0L3QuNC3LlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorbXNnc3RyWzJdICIiCittc2dzdHJbM10gIiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NjUgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjE3MworbXNnaWQgIiIKKyJcbiIKKyJEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LlxuIgorbXNnc3RyICJcbtCd0LUg0YPQtNCw0LvRj9C50YLQtSDRgdGC0YDQvtC60LguINCY0YHQv9C+0LvRjNC30YPQudGC0LUgwqtkcm9wwrssINGH0YLQvtCx0Ysg0Y/QstC90L4g0YPQtNCw0LvQuNGC0Ywg0LrQvtC80LzQuNGCLlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTc3Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICJcbtCV0YHQu9C4INCy0Ysg0YPQtNCw0LvQuNGC0LUg0YHRgtGA0L7QutGDINC30LTQtdGB0YwsINGC0L4g0KPQmtCQ0JfQkNCd0J3Qq9CZINCa0J7QnNCc0JjQoiDQkdCj0JTQldCiINCj0KLQldCg0K/QnS5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNgorbXNnaWQgIiIKKyJcbiIKKyJZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS5cbiIKKyJUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiXG7QktGLINGB0LXQudGH0LDRgSDRgNC10LTQsNC60YLQuNGA0YPQtdGC0LUg0YTQsNC50Lsg0YHQviDRgdC/0LjRgdC60L7QvCDQtNC10Lsg0LTQu9GPINC40L3RgtC10YDQsNC60YLQuNCy0L3QvtCz0L4g0L/QtdGA0LXQvNC10YnQtdC90LjRjy5cbtCU0LvRjyDQv9GA0L7QtNC+0LvQttC10L3QuNGPINC/0LXRgNC10LzQtdGJ0LXQvdC40Y8sINC/0L7RgdC70LUg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRhNCw0LnQu9CwINC30LDQv9GD0YHRgtC40YLQtTpcbiAgICBnaXQgcmViYXNlIC0tY29udGludWVcblxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo3OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODkzCittc2dpZCAiIgorIlxuIgorIkhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisiXG4iCittc2dzdHIgIlxu0J3QviDQtdGB0LvQuCDQstGLINGD0LTQsNC70LjRgtC1INCy0YHQtSwg0YLQviDQv9GA0L7RhtC10YHRgSDQv9C10YDQtdC80LXRidC10L3QuNGPINCx0YPQtNC10YIg0LHRg9C00LXRgiDQv9GA0LXRgNCy0LDQvS5cblxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgItCX0LDQvNC10YLRjNGC0LUsINGH0YLQviDQv9GD0YHRgtGL0LUg0LrQvtC80LzQuNGC0Ysg0LfQsNC60L7QvNC80LXQvdGC0LjRgNC+0LLQsNC90L3RiyIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA1IHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzMzOQorIzogc2VxdWVuY2VyLmM6MzM2NSBzZXF1ZW5jZXIuYzo0OTk2IGJ1aWx0aW4vZnNjay5jOjM1NiBidWlsdGluL3JlYmFzZS5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMIMKrJXPCuyIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJy4iCittc2dzdHIgIiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAi0JLQvdC40LzQsNC90LjQtTog0L3QtdC60L7RgtC+0YDRi9C1INC60L7QvNC80LjRgtGLINC80L7Qs9C70Lgg0LHRi9GC0Ywg0L7RgtCx0YDQvtGI0LXQvdGLINC/0L4g0L7RiNC40LHQutC1Llxu0J7RgtCx0YDQvtGI0LXQvdC90YvQtSDQutC+0LzQvNC40YLRiyAo0L7RgiDQvdC+0LLRi9GFINC6INGB0YLQsNGA0YvQvCk6XG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mIHdhcm5pbmdzLlxuIgorIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cbiIKKyJcbiIKK21zZ3N0ciAi0KfRgtC+0LHRiyDQuNC30LHQtdC20LDRgtGMINGN0YLQvtCz0L4g0YHQvtC+0LHRidC10L3QuNGPLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZHJvcMK7INGH0YLQvtCx0Ysg0Y/QstC90L4g0YPQtNCw0LvQuNGC0Ywg0LrQvtC80LzQuNGCLlxuXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1INC+0L/RhtC40Y4gwqtnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrwrsg0LTQu9GPINC40LfQvNC10L3QtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC5Llxu0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IGlnbm9yZSwgd2FybiwgZXJyb3IuXG5cbiIKKworIzogcmVmcy5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjU5OSByZWYtZmlsdGVyLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNGD0Y4g0L3QtdC/0YDQsNCy0LjQu9GM0L3Rg9GOINGB0YHRi9C70LrRgyAlcyIKKworIzogcmVmcy5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsg0LTQu9GPINC30LDQv9C40YHQuDogJXMiCisKKyM6IHJlZnMuYzo3NDQgcmVmcy5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIiIKKworIzogcmVmcy5jOjc2MyBzZXF1ZW5jZXIuYzo0MDAgc2VxdWVuY2VyLmM6MjY3OSBzZXF1ZW5jZXIuYzoyODA1CisjOiBzZXF1ZW5jZXIuYzoyODE5IHNlcXVlbmNlci5jOjMwNzYgc2VxdWVuY2VyLmM6NDkxMyB3cmFwcGVyLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LIgwqslc8K7IgorCisjOiByZWZzLmM6NzkwIHdyYXBwZXIuYzoyMjUgd3JhcHBlci5jOjM5NSBidWlsdGluL2FtLmM6NzE1CisjOiBidWlsdGluL3JlYmFzZS5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyDQtNC70Y8g0LfQsNC/0LjRgdC4IgorCisjOiByZWZzLmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjE5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjE5NzQKK21zZ2lkICJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiCittc2dzdHIgItC+0LHQvdC+0LLQu9C10L3QuNC1INGB0YHRi9C70L7QuiDQt9Cw0L/RgNC10YnQtdC90L4g0LIg0LjQt9C+0LvQuNGA0L7QstCw0L3QvdC+0Lwg0L7QutGA0YPQttC10L3QuNC4IgorCisjOiByZWZzLmM6MjA3MCByZWZzLmM6MjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZnMuYzoyMDc2IHJlZnMuYzoyMTExCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAiIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINGB0YHRi9C70LrQuCAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0OCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTUzMgorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINGB0YHRi9C70LrRgyAlczogJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNTEgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDRgdGB0YvQu9C60Lg6ICVzIgorCisjOiByZWZzcGVjLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmc3BlYyAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzozOSB3dC1zdGF0dXMuYzoxOTA5Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAi0LjRgdGH0LXQtyIKKworIzogcmVmLWZpbHRlci5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICLQstC/0LXRgNC10LTQuCAlZCIKKworIzogcmVmLWZpbHRlci5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJlaGluZCAlZCIKK21zZ3N0ciAi0L/QvtC30LDQtNC4ICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZCIKK21zZ3N0ciAi0LLQv9C10YDQtdC00LggJWQsINC/0L7Qt9Cw0LTQuCAlZCIKKworIzogcmVmLWZpbHRlci5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICLQvtC20LjQtNCw0LXQvNGL0Lkg0YTQvtGA0LzQsNGCOiAlJShjb2xvcjo8Y29sb3I+KSIKKworIzogcmVmLWZpbHRlci5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgY29sb3I6ICUlKGNvbG9yOiVzKSIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INGG0LLQtdGCOiAlJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAi0J7QttC40LTQsNC10YLRgdGPINGG0LXQu9C+0YfQuNGB0LvQtdC90L3QvtC1INC30L3QsNGH0LXQvdC40LUgcmVmbmFtZTpsc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAi0J7QttC40LTQsNC10YLRgdGPINGG0LXQu9C+0YfQuNGB0LvQtdC90L3QvtC1INC30L3QsNGH0LXQvdC40LUgcmVmbmFtZTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90YvQuSDQsNGA0LPRg9C80LXQvdGCICUlKCVzKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUob2JqZWN0dHlwZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAICUlKGJvZHkpINC90LUg0L/RgNC40L3QuNC80LDQtdGCINCw0YDQs9GD0LzQtdC90YLRiyIKKworIzogcmVmLWZpbHRlci5jOjI3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCAlJShzdWJqZWN0KSDQvdC1INC/0YDQuNC90LjQvNCw0LXRgiDQsNGA0LPRg9C80LXQvdGC0YsiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3Ri9C5INCw0YDQs9GD0LzQtdC90YIg0LTQu9GPICUlKHRyYWlsZXJzKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgItC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0L7QttC40LTQsNC10YIgY29udGVudHM6bGluZXM9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGNvbnRlbnRzKSBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90YvQuSDQsNGA0LPRg9C80LXQvdGCICUlKGNvbnRlbnRzKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAi0L7QttC40LTQsNC10YLRgdGPINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgb2JqZWN0bmFtZTpzaG9ydD0lcyIKKworIzogcmVmLWZpbHRlci5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0bmFtZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiAlJShvYmplY3RuYW1lKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShhbGlnbjo8d2lkdGg+LDxwb3NpdGlvbj4pIgorbXNnc3RyICLQvtC20LjQtNCw0LXQvNGL0Lkg0YTQvtGA0LzQsNGCOiAlJShhbGlnbjo8d2lkdGg+LDxwb3NpdGlvbj4pIgorCisjOiByZWYtZmlsdGVyLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3QsNGPINC/0L7Qt9C40YbQuNGPOiVzIgorCisjOiByZWYtZmlsdGVyLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3QsNGPINGI0LjRgNC40L3QsDolcyIKKworIzogcmVmLWZpbHRlci5jOjQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INCw0YDQs9GD0LzQtdC90YIgJSUoYWxpZ24pOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAi0L7QttC40LTQsNC10YLRgdGPINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QsNGPINGI0LjRgNC40L3QsCDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0YfQsNGB0YLQuNGG0YsgJSUoYWxpZ24pIgorCisjOiByZWYtZmlsdGVyLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShpZikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0LDRgNCz0YPQvNC10L3RgiAlJShpZik6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LjQvNGPINC/0L7Qu9GPOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90L7QtSDQuNC80Y8g0L/QvtC70Y86ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5LCBidXQgdGhlIGZpZWxkICclLipzJyByZXF1aXJlcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGEiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgItGE0L7RgNC80LDRgjog0YfQsNGB0YLQuNGG0LAgJSUoaWYpINC40YHQv9C+0LvRjNC30L7QstCw0L3QsCDQsdC10Lcg0YfQsNGB0YLQuNGG0YsgJSUodGhlbikiCisKKyM6IHJlZi1maWx0ZXIuYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDRh9Cw0YHRgtC40YbQsCAlJSh0aGVuKSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LAg0LHQtdC3INGH0LDRgdGC0LjRhtGLICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDRh9Cw0YHRgtC40YbQsCAlJSh0aGVuKSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LAg0LHQvtC70LXQtSDQvtC00L3QvtCz0L4g0YDQsNC30LAiCisKKyM6IHJlZi1maWx0ZXIuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgItGE0L7RgNC80LDRgjog0YfQsNGB0YLQuNGG0LAgJSUodGhlbikg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdCwINC/0L7RgdC70LUgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDRh9Cw0YHRgtC40YbQsCAlJShlbHNlKSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LAg0LHQtdC3INGH0LDRgdGC0LjRhtGLICUlKGlmKSIKKworIzogcmVmLWZpbHRlci5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCOiDRh9Cw0YHRgtC40YbQsCAlJShlbHNlKSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LAg0LHQtdC3INGH0LDRgdGC0LjRhtGLICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INGH0LDRgdGC0LjRhtCwICUlKGVsc2UpINC40YHQv9C+0LvRjNC30L7QstCw0L3QsCDQsdC+0LvQtdC1INC+0LTQvdC+0LPQviDRgNCw0LfQsCIKKworIzogcmVmLWZpbHRlci5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICLRhNC+0YDQvNCw0YI6INGH0LDRgdGC0LjRhtCwICUlKGVuZCkg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdCwINCx0LXQtyDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC10Lkg0YfQsNGB0YLQuNGG0YsiCisKKyM6IHJlZi1maWx0ZXIuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGC0YDQvtC60LAg0YTQvtGA0LzQsNGC0LAgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nICVzKSIKK21zZ3N0ciAiKNC90LXRgiDQstC10YLQutC4LCDQv9C10YDQtdC80LXRidC10L3QuNC1ICVzKSIKKworIzogcmVmLWZpbHRlci5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIijQvdC10YIg0LLQtdGC0LrQuCDQv9C10YDQtdC80LXRidC10L3QuNC1INC+0YLQtNC10LvRkdC90L3QvtCz0L4gSEVBRCAlcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzKSIKK21zZ3N0ciAiKNC90LXRgiDQstC10YLQutC4LCDQtNCy0L7QuNGH0L3Ri9C5INC/0L7QuNGB0Log0L3QsNGH0LDRgiDQvdCwICVzKSIKKworIy4gVFJBTlNMQVRPUlM6IG1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgIkhFQUQKKyMuIGRldGFjaGVkIGF0ICIgaW4gd3Qtc3RhdHVzLmMKKyM6IHJlZi1maWx0ZXIuYzoxNDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIihIRUFEIGRldGFjaGVkIGF0ICVzKSIKK21zZ3N0ciAiKEhFQUQg0L7RgtC00LXQu9GR0L0g0L3QsCAlcykiCisKKyMuIFRSQU5TTEFUT1JTOiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzICJIRUFECisjLiBkZXRhY2hlZCBmcm9tICIgaW4gd3Qtc3RhdHVzLmMKKyM6IHJlZi1maWx0ZXIuYzoxNDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorbXNnc3RyICIoSEVBRCDQvtGC0LTQtdC70ZHQvSDQvdCw0YfQuNC90LDRjyDRgSAlcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDc4Cittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIijQvdC10YIg0LLQtdGC0LrQuCkiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTEyIHJlZi1maWx0ZXIuYzoxNjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgb2JqZWN0ICVzIGZvciAlcyIKK21zZ3N0ciAi0L3QtSDQvdCw0LnQtNC10L0g0L7QsdGK0LXQutGCICVzINC00LvRjyAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40LggcGFyc2Vfb2JqZWN0X2J1ZmZlciDQvdCwICVzINC00LvRjyAlcyIKKworIzogcmVmLWZpbHRlci5jOjE4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICLQn9C+0LLRgNC10LbQtNGR0L3QvdGL0Lkg0L7QsdGK0LXQutGCIMKrJXPCuyIKKworIzogcmVmLWZpbHRlci5jOjE5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0YPRjiDRgdGB0YvQu9C60YMg0YEg0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C8INC40LzQtdC90LXQvCAlcyIKKworIzogcmVmLWZpbHRlci5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAiZm9ybWF0OiDQv9GA0L7Qv9GD0YnQtdC90LAg0YfQsNGB0YLQuNGG0LAgJSUoZW5kKSIKKworIzogcmVmLWZpbHRlci5jOjIzNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1tZXJnZWQiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjIzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgIiIKKworIzogcmVmLWZpbHRlci5jOjIzNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjQxMAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo0MTgKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LjQt9Cy0LvQtdGH0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+ICVzINC4ICVzINCyICVzIgorCisjOiByZW1vdGUuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMg0L7QsdGL0YfQvdC+INC+0YLRgdC70LXQttC40LLQsNC10YIgJXMsINCwINC90LUgJXMiCisKKyM6IHJlbW90ZS5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzINC+0YLRgdC70LXQttC40LLQsNC10YIg0LggJXMg0LggJXMiCisKKyM6IHJlbW90ZS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbHVlICclcycgb2YgcGF0dGVybiBoYXMgbm8gJyonIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIzogcmVtb3RlLmM6MTAyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA0NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGJsb2Igb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgYmxvYiBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjEwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMTAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWxldGUgJyVzJzogcmVtb3RlIHJlZiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNjI0IHJlbW90ZS5jOjE3MjUKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEINC90LUg0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0LLQtdGC0LrRgyIKKworIzogcmVtb3RlLmM6MTYzMworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAi0L3QtdGCINGC0LDQutC+0Lkg0LLQtdGC0LrQuDogwqslc8K7IgorCisjOiByZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQstGL0YjQtdGB0YLQvtGP0YnQsNGPINCy0LXRgtC60LAg0L3QtSDQvdCw0YHRgtGA0L7QtdC90LAg0LTQu9GPINCy0LXRgtC60Lggwqslc8K7IgorCisjOiByZW1vdGUuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLQstGL0YjQtdGB0YLQvtGP0YnQsNGPINCy0LXRgtC60LAgwqslc8K7INC90LUg0YHQvtGF0YDQsNC90LXQvdCwINC60LDQuiDQvtGC0YHQu9C10LbQuNCy0LDQtdC80LDRjyDQstC10YLQutCwIgorCisjOiByZW1vdGUuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLQvdCw0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuCDCqyVzwrsg0L3QsCDQstC90LXRiNC90LXQvCDRgdC10YDQstC10YDQtSDCqyVzwrsg0L3QtSDQuNC80LXQtdGCINC70L7QutCw0LvRjNC90L7QuSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7QuSDQstC10YLQutC4IgorCisjOiByZW1vdGUuYzoxNjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgItCy0LXRgtC60LAgwqslc8K7INC90LUg0LjQvNC10LXRgiDQstC90LXRiNC90LXQs9C+INGB0LXRgNCy0LXRgNCwINC00LvRjyDQvtGC0L/RgNCw0LLQutC4IgorCisjOiByZW1vdGUuYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0Ysg0L/Rg9GC0Lgg0LTQu9GPINC+0YLQv9GA0LDQstC60Lggwqslc8K7INC90LUg0LLQutC70Y7Rh9Cw0Y7RgiDQsiDRgdC10LHRjyDCqyVzwrsiCisKKyM6IHJlbW90ZS5jOjE2OTIKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgItC+0YLQv9GA0LDQstC60LAg0L3QtSDQuNC80LXQtdGCINGC0L7Rh9C60Lgg0L3QsNC30L3QsNGH0LXQvdC40Y8gKHB1c2guZGVmYXVsdCDQstGL0YHRgtCw0LLQu9C10L0g0LIgwqtub3RoaW5nwrspIgorCisjOiByZW1vdGUuYzoxNzE0Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgwqtzaW1wbGXCuyDQvtGC0L/RgNCw0LLQutGDINCyINC10LTQuNC90YHRgtCy0LXQvdC90YPRjiDRgtC+0YfQutGDINC90LDQt9C90LDRh9C10L3QuNGPIgorCisjOiByZW1vdGUuYzoxODQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiogSWdub3JpbmcgZnVubnkgcmVmICclcycgbG9jYWxseSIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQsdCw0LfQuNGA0YPQtdGC0YHRjyDQvdCwIMKrJXPCuywg0L3QviDQstGL0YjQtdGB0YLQvtGP0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LjRgdGH0LXQty5cbiIKKworIzogcmVtb3RlLmM6MjAyMAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIo0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8g0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtwrspXG4iCisKKyM6IHJlbW90ZS5jOjIwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgItCS0LDRiNCwINCy0LXRgtC60LAg0L7QsdC90L7QstC70LXQvdCwINCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuCDRgSDCqyVzwrsuXG4iCisKKyM6IHJlbW90ZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgItCS0LDRiNCwINCy0LXRgtC60LAg0Lggwqslc8K7INGD0LrQsNC30YvQstCw0Y7RgiDQvdCwINGA0LDQt9C90YvQtSDQutC+0LzQvNC40YLRiy5cbiIKKworIzogcmVtb3RlLmM6MjAzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCIlc1wiIGZvciBkZXRhaWxzKVxuIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrJXPCuyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC+0L/QuNGB0LDQvdC40Y8pXG4iCisKKyM6IHJlbW90ZS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtC/0LXRgNC10LbQsNC10YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGCLlxuIgorbXNnc3RyWzFdICLQktCw0YjQsCDQstC10YLQutCwINC+0L/QtdGA0LXQttCw0LXRgiDCqyVzwrsg0L3QsCAlZCDQutC+0LzQvNC40YLQsC5cbiIKK21zZ3N0clsyXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtC/0LXRgNC10LbQsNC10YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGC0L7Qsi5cbiIKK21zZ3N0clszXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtC/0LXRgNC10LbQsNC10YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGC0L7Qsi5cbiIKKworIzogcmVtb3RlLmM6MjA0MAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcHVzaMK7LCDRh9GC0L7QsdGLINC+0L/Rg9Cx0LvQuNC60L7QstCw0YLRjCDQstCw0YjQuCDQu9C+0LrQsNC70YzQvdGL0LUg0LrQvtC80LzQuNGC0YspXG4iCisKKyM6IHJlbW90ZS5jOjIwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtGC0YHRgtCw0LXRgiDQvtGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgiDQuCDQvNC+0LbQtdGCINCx0YvRgtGMINC/0LXRgNC10LzQvtGC0LDQvdCwINCy0L/QtdGA0LXQtC5cbiIKK21zZ3N0clsxXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtGC0YHRgtCw0LXRgiDQvtGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgtCwINC4INC80L7QttC10YIg0LHRi9GC0Ywg0L/QtdGA0LXQvNC+0YLQsNC90LAg0LLQv9C10YDQtdC0LlxuIgorbXNnc3RyWzJdICLQktCw0YjQsCDQstC10YLQutCwINC+0YLRgdGC0LDQtdGCINC+0YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGC0L7QsiDQuCDQvNC+0LbQtdGCINCx0YvRgtGMINC/0LXRgNC10LzQvtGC0LDQvdCwINCy0L/QtdGA0LXQtC5cbiIKK21zZ3N0clszXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtGC0YHRgtCw0LXRgiDQvtGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgtC+0LIg0Lgg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9C10YDQtdC80L7RgtCw0L3QsCDQstC/0LXRgNC10LQuXG4iCisKKyM6IHJlbW90ZS5jOjIwNTEKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBwdWxswrssINGH0YLQvtCx0Ysg0L7QsdC90L7QstC40YLRjCDQstCw0YjRgyDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGC0LrRgylcbiIKKworIzogcmVtb3RlLmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gItCS0LDRiNCwINCy0LXRgtC60LAg0Lggwqslc8K7INGA0LDQt9C00LXQu9C40LvQuNGB0YxcbtC4INGC0LXQv9C10YDRjCDQuNC80LXRjtGCICVkINC4ICVkINGA0LDQt9C90YvQuSDQutC+0LzQvNC40YIg0LIg0LrQsNC20LTQvtC5INGB0L7QvtGC0LLQtdGC0YHRgtCy0LXQvdC90L4uXG4iCittc2dzdHJbMV0gItCS0LDRiNCwINCy0LXRgtC60LAg0Lggwqslc8K7INGA0LDQt9C00LXQu9C40LvQuNGB0YxcbtC4INGC0LXQv9C10YDRjCDQuNC80LXRjtGCICVkINC4ICVkINGA0LDQt9C90YvRhSDQutC+0LzQvNC40YLQsCDQsiDQutCw0LbQtNC+0Lkg0YHQvtC+0YLQstC10YLRgdGC0LLQtdC90L3Qvi5cbiIKK21zZ3N0clsyXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQuCDCqyVzwrsg0YDQsNC30LTQtdC70LjQu9C40YHRjFxu0Lgg0YLQtdC/0LXRgNGMINC40LzQtdGO0YIgJWQg0LggJWQg0YDQsNC30L3Ri9GFINC60L7QvNC80LjRgtC+0LIg0LIg0LrQsNC20LTQvtC5INGB0L7QvtGC0LLQtdGC0YHRgtCy0LXQvdC90L4uXG4iCittc2dzdHJbM10gItCS0LDRiNCwINCy0LXRgtC60LAg0Lggwqslc8K7INGA0LDQt9C00LXQu9C40LvQuNGB0YxcbtC4INGC0LXQv9C10YDRjCDQuNC80LXRjtGCICVkINC4ICVkINGA0LDQt9C90YvRhSDQutC+0LzQvNC40YLQvtCyINCyINC60LDQttC00L7QuSDRgdC+0L7RgtCy0LXRgtGB0YLQstC10L3QvdC+LlxuIgorCisjOiByZW1vdGUuYzoyMDY0Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHB1bGzCuywg0YfRgtC+0LHRiyDRgdC70LjRgtGMINCy0L3QtdGI0L3RjtGOINCy0LXRgtC60YMg0LIg0LLQsNGI0YMpXG4iCisKKyM6IHJlbW90ZS5jOjIyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIiIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmVwbGFjZS1vYmplY3QuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcmVwbGFjZSByZWY6ICVzIgorbXNnc3RyICIiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSBkZXB0aCB0b28gaGlnaCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoyNjQgcmVyZXJlLmM6MjY5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZXJlIHdlcmUgZXJyb3JzIHdoaWxlIHdyaXRpbmcgJyVzJyAoJXMpIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2VkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rIHN0cmF5ICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDI0IGJ1aWx0aW4vbG9nLmM6MTc1MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MTcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQutCw0YLQsNC70L7QsyDCqyVzwrsiCisKKyM6IHJlcmVyZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTA2OCByZXJlcmUuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIiIKKworIzogcmVyZXJlLmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb3Jnb3QgcmVzb2x1dGlvbiBmb3IgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IHJlcmVyZS5jOjExOTkKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiByci1jYWNoZSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogcmV2aXNpb24uYzoyNDc2Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAi0L/QvtGF0L7QttC1LCDQstCw0YjQsCDRgtC10LrRg9GJ0LDRjyDQstC10YLQutCwINC/0L7QstGA0LXQttC00LXQvdCwIgorCisjOiByZXZpc2lvbi5jOjI0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICLQstCw0YjQsCDRgtC10LrRg9GJ0LDRjyDQstC10YLQutCwIMKrJXPCuyDQtdGJ0LUg0L3QtSDRgdC+0LTQtdGA0LbQuNGCINC90Lgg0L7QtNC90L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiByZXZpc2lvbi5jOjI2NzkKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAi0L7Qv9GG0LjRjiAtLWZpcnN0LXBhcmVudCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLWJpc2VjdCIKKworIzogcmV2aXNpb24uYzoyNjgzCittc2dpZCAiLUwgZG9lcyBub3QgeWV0IHN1cHBvcnQgZGlmZiBmb3JtYXRzIGJlc2lkZXMgLXAgYW5kIC1zIgorbXNnc3RyICIiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYzCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQvtGC0LrRgNGL0YLQuNGPIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgItCf0LXRgNC10YXQstCw0YLRh9C40Logwqslc8K7INCx0YvQuyDQv9GA0L7QuNCz0L3QvtGA0LjRgNC+0LLQsNC9LCDRgtCw0Log0LrQsNC6INC+0L0g0L3QtSDRg9GB0YLQsNC90L7QstC70LXQvSDQutCw0Log0LjRgdC/0L7Qu9C90Y/QtdC80YvQuS5cbtCS0Ysg0LzQvtC20LXRgtC1INC+0YLQutC70Y7Rh9C40YLRjCDRjdGC0L4g0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDRgSDQv9C+0LzQvtGJ0YzRjiDQutC+0LzQsNC90LTRiyDCq2dpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlwrsuIgorCisjOiBzZW5kLXBhY2suYzoxNDEKK21zZ2lkICJ1bmV4cGVjdGVkIGZsdXNoIHBhY2tldCB3aGlsZSByZWFkaW5nIHJlbW90ZSB1bnBhY2sgc3RhdHVzIgorbXNnc3RyICLQvdC10L7QttC40LTQsNC90L3Ri9C5INC/0YPRgdGC0L7QuSDQv9Cw0LrQtdGCINC/0YDQuCDRh9GC0LXQvdC40Lgg0YHRgtCw0YLRg9GB0LAg0LLQvdC10YjQvdC10Lkg0YDQsNGB0L/QsNC60L7QstC60LgiCisKKyM6IHNlbmQtcGFjay5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgcmVtb3RlIHVucGFjayBzdGF0dXM6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDRgdGC0LDRgtGD0YEg0LLQvdC10YjQvdC10Lkg0YDQsNGB0L/QsNC60L7QstC60Lg6ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLQvdC10YjQvdC10Lkg0YDQsNGB0L/QsNC60L7QstC60LUgJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwNgorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICLRgdCx0L7QuSDQv9C+0LTQv9C40YHQsNC90LjRjyDRgdC10YDRgtC40YTQuNC60LDRgtCwINC+0YLQv9GA0LDQstC60LgiCisKKyM6IHNlbmQtcGFjay5jOjQyMAorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAi0L/RgNC40L3QuNC80LDRjtGJ0LDRjyDRgdGC0L7RgNC+0L3QsCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQvtGC0L/RgNCw0LLQutGDINGBINC+0L/RhtC40LXQuSAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDIyCittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0ICIKKyItLXNpZ25lZCBwdXNoIgorbXNnc3RyICLQvdC1INC+0YLQv9GA0LDQstC70Y/QtdC8INGB0LXRgNGC0LjRhNC40LrQsNGCINC00LvRjyDQvtGC0L/RgNCw0LLQutC4LCDRgtCw0Log0LrQsNC6INC/0YDQuNC90LjQvNCw0Y7RidCw0Y8g0YHRgtC+0YDQvtC90LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0L7RgtC/0YDQsNCy0LrRgyDRgSDQvtC/0YbQuNC10LkgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQzNAorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAi0L/RgNC40L3QuNC80LDRjtGJ0LDRjyDRgdGC0L7RgNC+0L3QsCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQvtGC0L/RgNCw0LLQutGDINGBINC+0L/RhtC40LXQuSAtLWF0b21pYyIKKworIzogc2VuZC1wYWNrLmM6NDM5Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgItC/0YDQuNC90LjQvNCw0Y7RidCw0Y8g0YHRgtC+0YDQvtC90LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0L7RgtC/0YDQsNCy0LrRgyDRgSDQvtC/0YbQuNGP0LzQuCIKKworIzogc2VxdWVuY2VyLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG1lc3NhZ2UgY2xlYW51cCBtb2RlICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRgNC10LbQuNC8INC+0YfQuNGB0YLQutC4INGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozMTgKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgItC+0LHRgNCw0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBzZXF1ZW5jZXIuYzozMjAKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAi0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0LrQvtC80LzQuNGCIgorCisjOiBzZXF1ZW5jZXIuYzozMjIKK21zZ2lkICJyZWJhc2UgLWkiCittc2dzdHIgInJlYmFzZSAtaSIKKworIzogc2VxdWVuY2VyLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gYWN0aW9uOiAlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozODIKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAi0L/QvtGB0LvQtSDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0L7Qsiwg0L/QvtC80LXRgtGM0YLQtSDQuNGB0L/RgNCw0LLQu9C10L3QvdGL0LUg0L/Rg9GC0LhcbtGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IGFkZCA80L/Rg9GC0Lg+wrsg0LjQu9C4IMKrZ2l0IHJtIDzQv9GD0YLQuD7CuyIKKworIzogc2VxdWVuY2VyLmM6Mzg1Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgItC/0L7RgdC70LUg0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIsINC/0L7QvNC10YLRjNGC0LUg0LjRgdC/0YDQsNCy0LvQtdC90L3Ri9C1INC/0YPRgtC4XG7RgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBhZGQgPNC/0YPRgtC4PsK7INC40LvQuCDCq2dpdCBybSA80L/Rg9GC0Lg+wrtcbtC4INGB0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IGNvbW1pdMK7IgorCisjOiBzZXF1ZW5jZXIuYzozOTggc2VxdWVuY2VyLmM6MjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQsdC70L7QutC40YDQvtCy0LDRgtGMIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMIGVvbCDQsiDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjQxMCBzZXF1ZW5jZXIuYzoyNjg0IHNlcXVlbmNlci5jOjI4MDcgc2VxdWVuY2VyLmM6MjgyMQorIzogc2VxdWVuY2VyLmM6MzA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LLQtdGA0YjQuNGC0Ywgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo0MzMgc2VxdWVuY2VyLmM6OTc4IHNlcXVlbmNlci5jOjE2NTIgc2VxdWVuY2VyLmM6MjcwNAorIzogc2VxdWVuY2VyLmM6MzA2NiBzZXF1ZW5jZXIuYzozMTc1IGJ1aWx0aW4vYW0uYzoyNDUgYnVpbHRpbi9jb21taXQuYzo3NjAKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTE1IGJ1aWx0aW4vcmViYXNlLmM6NTY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlcy4iCittc2dzdHIgItCy0LDRiNC4INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90YsgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo0NjMKK21zZ2lkICJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgItC00LvRjyDQv9GA0L7QtNC+0LvQttC10L3QuNGPINC30LDQutC+0LzQvNC40YLRjNGC0LUg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPINC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INC40YUuIgorCisjOiBzZXF1ZW5jZXIuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiJXM6INC/0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQiCisKKyM6IHNlcXVlbmNlci5jOjUzNCBidWlsdGluL3RhZy5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0YDQtdC20LjQvNCwINC+0YfQuNGB0YLQutC4ICVzIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorIy4gInJlYmFzZSAtaSIuCisjOiBzZXF1ZW5jZXIuYzo2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6INCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6NjQ2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0LTQtdGA0LXQstC+INC60Y3RiNCwIgorCisjOiBzZXF1ZW5jZXIuYzo2NjAKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0YHQv9C+0LfQvdCw0YLRjCBIRUFEINC60L7QvNC80LjRgiIKKworIzogc2VxdWVuY2VyLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3ODggd3JhcHBlci5jOjIyNyB3cmFwcGVyLmM6Mzk3IGJ1aWx0aW4vYW0uYzo3MDYKKyM6IGJ1aWx0aW4vYW0uYzo3OTggYnVpbHRpbi9tZXJnZS5jOjExMTIgYnVpbHRpbi9yZWJhc2UuYzoxMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywgwqslc8K7INC00LvRjyDRh9GC0LXQvdC40Y8iCisKKyM6IHNlcXVlbmNlci5jOjc5OAorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODAzCittc2dpZCAiJ0dJVF9BVVRIT1JfRU1BSUwnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODA4Cittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgxNworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODE5Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9FTUFJTCciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODIxCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdCAnJXMnIGluICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgItGDINCy0LDRgSDQuNC80LXRjtGC0YHRjyDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUuINCV0YHQu9C4INGN0YLQuCDQuNC30LzQtdC90LXQvdC40Y8g0LTQvtC70LbQvdGLINCx0YvRgtGMINC+0LHRitC10LTQtdC90LXQvdGLINGBINC/0YDQtdC00YvQtNGD0YnQuNC8INC60L7QvNC80LjRgtC+0LwsINGC0L4g0LfQsNC/0YPRgdGC0LjRgtC1OlxuXG4gIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuXG7QldGB0LvQuCDQttC1INC+0L3QuCDQtNC+0LvQttC90Ysg0LHRi9GC0Ywg0L/QvtC80LXRidC10L3RiyDQsiDQvdC+0LLRi9C5INC60L7QvNC80LjRgiwg0YLQviDQt9Cw0L/Rg9GB0YLQuNGC0LU6XG5cbiAgZ2l0IGNvbW1pdCAlc1xuXG7QkiDQu9GO0LHQvtC8INGB0LvRg9GH0LDQtSwg0L/QvtGB0LvQtSDRgtC+0LPQviDQutCw0Log0LLRiyDQt9Cw0LrQvtC90YfQuNGC0LUsINC/0YDQvtC00L7Qu9C20LjRgtGMINC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0LzQvtC20L3QviDQstGL0L/QvtC70L3QuNCyOlxuXG4gIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzo5OTIKK21zZ2lkICJ3cml0aW5nIHJvb3QgY29tbWl0IgorbXNnc3RyICLQt9Cw0L/QuNGB0Ywg0LrQvtC90LXQstC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogc2VxdWVuY2VyLmM6MTIxMworbXNnaWQgIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0L/RgNC4INCy0YvQt9C+0LLQtSDQv9C10YDQtdGF0LLQsNGC0YfQuNC60LAgwqtwcmVwYXJlLWNvbW1pdC1tc2fCuyIKKworIzogc2VxdWVuY2VyLmM6MTIyMAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAi0JLQsNGI0LUg0LjQvNGPINC40LvQuCDRjdC70LXQutGC0YDQvtC90L3QsNGPINC/0L7Rh9GC0LAg0L3QsNGB0YLRgNC+0LXQvdGLINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INC90LAg0L7RgdC90L7QstCw0L3QuNC4INCy0LDRiNC10LPQvlxu0LjQvNC10L3QuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0LjQvNC10L3QuCDQvNCw0YjQuNC90YsuINCf0L7QttCw0LvRg9C50YHRgtCwLCDQv9GA0L7QstC10YDRjNGC0LUsINGH0YLQviDQvtC90LggXG7QvtC/0YDQtdC00LXQu9C10L3RiyDQv9GA0LDQstC40LvRjNC90L4uXG7QktGLINC80L7QttC10YLQtSDQvtGC0LrQu9GO0YfQuNGC0Ywg0Y3RgtC+INGD0LLQtdC00L7QvNC70LXQvdC40LUg0YPRgdGC0LDQvdC+0LLQuNCyINC40YUg0L3QsNC/0YDRj9C80YPRji4g0JfQsNC/0YPRgdGC0LjRgtC1INGB0LvQtdC00YPRjtGJ0YPRjlxu0LrQvtC80LDQvdC00YMg0Lgg0YHQu9C10LTRg9C50YLQtSDQuNC90YHRgtGA0YPQutGG0LjRj9C8INCy0LDRiNC10LPQviDRgtC10LrRgdGC0L7QstC+0LPQviDRgNC10LTQsNC60YLQvtGA0LAsINC00LvRj1xu0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDQstCw0YjQtdCz0L4g0YTQsNC50LvQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lg6XG5cbiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuXG7Qn9C+0YHQu9C1INGN0YLQvtCz0L4sINC40LfQvNC10L3QuNGC0Ywg0LDQstGC0L7RgNGB0YLQstC+INGN0YLQvtC5INC60L7QvNC80LjRgtCwINC80L7QttC90L4g0LHRg9C00LXRgiDRgSDQv9C+0LzQvtGJ0YzRjiDQutC+0LzQsNC90LTRizpcblxuICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjMzCittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICLQktCw0YjQtSDQuNC80Y8g0LjQu9C4INGN0LvQtdC60YLRgNC+0L3QvdCw0Y8g0L/QvtGH0YLQsCDQvdCw0YHRgtGA0L7QtdC90Ysg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0L3QsCDQvtGB0L3QvtCy0LDQvdC40Lgg0LLQsNGI0LXQs9C+XG7QuNC80LXQvdC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQuCDQuNC80LXQvdC4INC80LDRiNC40L3Riy4g0J/QvtC20LDQu9GD0LnRgdGC0LAsINC/0YDQvtCy0LXRgNGM0YLQtSwg0YfRgtC+INC+0L3QuCBcbtC+0L/RgNC10LTQtdC70LXQvdGLINC/0YDQsNCy0LjQu9GM0L3Qvi5cbtCS0Ysg0LzQvtC20LXRgtC1INC+0YLQutC70Y7Rh9C40YLRjCDRjdGC0L4g0YPQstC10LTQvtC80LvQtdC90LjQtSDRg9GB0YLQsNC90L7QstC40LIg0LjRhSDQvdCw0L/RgNGP0LzRg9GOOlxuXG4gICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCLQktCw0YjQtSDQmNC80Y9cIlxuICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cblxu0J/QvtGB0LvQtSDRjdGC0L7Qs9C+LCDQuNC30LzQtdC90LjRgtGMINCw0LLRgtC+0YDRgdGC0LLQviDRjdGC0L7QuSDQutC+0LzQvNC40YLQsCDQvNC+0LbQvdC+INCx0YPQtNC10YIg0YEg0L/QvtC80L7RidGM0Y4g0LrQvtC80LDQvdC00Ys6XG5cbiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTI3NQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgItC90LXQu9GM0LfRjyDQt9Cw0L/RgNC+0YHQuNGC0Ywg0L3QvtCy0L7RgdC+0LfQtNCw0L3QvdGL0Lkg0LrQvtC80LzQuNGCIgorCisjOiBzZXF1ZW5jZXIuYzoxMjc3Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YDQsNC30L7QsdGA0LDRgtGMINC90L7QstC+0YHQvtC30LTQsNC90L3Ri9C5INC60L7QvNC80LjRgiIKKworIzogc2VxdWVuY2VyLmM6MTMyMworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0LggSEVBRCDQv9C+0YHQu9C1INGB0L7Qt9C00LDQvdC40Y8g0LrQvtC80LzQuNGC0LAiCisKKyM6IHNlcXVlbmNlci5jOjEzMjUKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICLQvtGC0LTQtdC70ZHQvdC90YvQuSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxMzI5Cittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAo0LrQvtGA0L3QtdCy0L7QuSDQutC+0LzQvNC40YIpIgorCisjOiBzZXF1ZW5jZXIuYzoxMzUwCittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEzNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJIRUFEICVzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutC+0LzQvNC40YLQvtC8ISIKKworIzogc2VxdWVuY2VyLmM6MTM1NiBidWlsdGluL2NvbW1pdC5jOjE1NTEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMIEhFQUQg0LrQvtC80LzQuNGCIgorCisjOiBzZXF1ZW5jZXIuYzoxNDA4IHNlcXVlbmNlci5jOjIwMDEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0LDQstGC0L7RgNCwINC60L7QvNC80LjRgtCwIgorCisjOiBzZXF1ZW5jZXIuYzoxNDE4IGJ1aWx0aW4vYW0uYzoxNTcyIGJ1aWx0aW4vbWVyZ2UuYzo2ODgKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSDQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LTQtdGA0LXQstC+IgorCisjOiBzZXF1ZW5jZXIuYzoxNDM1IHNlcXVlbmNlci5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0LjQtyDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjE0NjIgYnVpbHRpbi9hbS5jOjE1OTQgYnVpbHRpbi9jb21taXQuYzoxNjUwCisjOiBidWlsdGluL21lcmdlLmM6ODgyIGJ1aWx0aW4vbWVyZ2UuYzo5MDYKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi0YHQsdC+0Lkg0LfQsNC/0LjRgdC4INC+0LHRitC10LrRgtCwINC60L7QvNC80LjRgtCwIgorCisjOiBzZXF1ZW5jZXIuYzoxNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvNC80LjRgiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0YDQvtC00LjRgtC10LvRjNGB0LrQuNC5INC60L7QvNC80LjRgiAlcyIKKworIzogc2VxdWVuY2VyLmM6MTYwMiBzZXF1ZW5jZXIuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0LrQvtC80LDQvdC00LA6ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNjU5IHNlcXVlbmNlci5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICLQrdGC0L4g0L7QsdGK0LXQtNC40L3QtdC90LjQtSAlZCDQutC+0LzQvNC40YLQvtCyLiIKKworIzogc2VxdWVuY2VyLmM6MTY2OQorbXNnaWQgIm5lZWQgYSBIRUFEIHRvIGZpeHVwIgorbXNnc3RyICLQvdGD0LbQtdC9IEhFQUQg0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8iCisKKyM6IHNlcXVlbmNlci5jOjE2NzEgc2VxdWVuY2VyLmM6MzExMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2NzMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDRgtC10LrRg9GJ0LXQs9C+IEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjE2ODYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0MQorbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgItCt0YLQviAxLdC1INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsDoiCisKKyM6IHNlcXVlbmNlci5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQtNC70Y8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAi0K3RgtC+INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQvdC+0LzQtdGAICMlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE3MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0L3QvtC80LXRgCAjJWQg0LHRg9C00LXRgiDQv9GA0L7Qv9GD0YnQtdC90L46IgorCisjOiBzZXF1ZW5jZXIuYzoxNzk1Cittc2dpZCAieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAi0LLQsNGIINC40L3QtNC10LrRgSDQvdC1INGB0LvQuNGCLiIKKworIzogc2VxdWVuY2VyLmM6MTgwMgorbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9GA0LDQstC40YLRjCDQutC+0YDQvdC10LLQvtC5INC60L7QvNC80LjRgiIKKworIzogc2VxdWVuY2VyLmM6MTgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgItC60L7QvNC80LjRgiAlcyDigJQg0Y3RgtC+INC60L7QvNC80LjRgi3RgdC70LjRj9C90LjQtSwg0L3QviDQvtC/0YbQuNGPIC1tINC90LUg0YPQutCw0LfQsNC90LAuIgorCisjOiBzZXF1ZW5jZXIuYzoxODI5IHNlcXVlbmNlci5jOjE4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICLRgyDQutC+0LzQvNC40YLQsCAlcyDQvdC10YIg0L/RgNC10LTQutCwICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC00LvRjyAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlIGEgInRvZG8iIGNvbW1hbmQgbGlrZQorIy4gInJldmVydCIgb3IgInBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMS4KKyM6IHNlcXVlbmNlci5jOjE4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczog0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0YDQvtC00LjRgtC10LvRjNGB0LrQuNC5INC60L7QvNC80LjRgiDQtNC70Y8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywgwqslc8K7INCyIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHRgNCw0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINC60L7QvNC80LjRgtCwICVz4oCmICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxOTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQvNC10L3QuNGC0Ywg0LrQvtC80LzQuNGCICVz4oCmICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6INGB0LHQvtC5INGH0YLQtdC90LjRjyDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6MjA0OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiDRgdCx0L7QuSDQvtCx0L3QvtCy0LvQtdC90LjRjyDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6MjExOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAICVzINC90LUg0L/RgNC40L3QuNC80LDQtdGCINCw0YDQs9GD0LzQtdC90YLRizogwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnRzIGZvciAlcyIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GJ0LXQvdGLINCw0YDQs9GD0LzQtdC90YLRiyDQtNC70Y8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIxNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclLipzJyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGB0YLRgNC+0LrQsCAlZDogJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LLRi9C/0L7Qu9C90LjRgtGMIMKrJXPCuyDQsdC10Lcg0YPQutCw0LfQsNC90LjRjyDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBzZXF1ZW5jZXIuYzoyMjg1IGJ1aWx0aW4vcmViYXNlLmM6MTUzIGJ1aWx0aW4vcmViYXNlLmM6MTc4CisjOiBidWlsdGluL3JlYmFzZS5jOjIwNCBidWlsdGluL3JlYmFzZS5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywgwqslc8K7LiIKKworIzogc2VxdWVuY2VyLmM6MjM2MAorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICLQv9C+0LbQsNC70YPQudGB0YLQsCDQuNGB0L/RgNCw0LLRjNGC0LUg0Y3RgtC+INGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb8K7LiIKKworIzogc2VxdWVuY2VyLmM6MjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQuNCz0L7QtNC90LDRjyDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0LrQsNGA0YLQsCDRgSDQuNC90YHRgtGA0YPQutGG0LjRj9C80Lg6IMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MjM2NworbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAi0LrQvtC80LzQuNGC0Ysg0L3QtSDRgNCw0LfQvtCx0YDQsNC90YsuIgorCisjOiBzZXF1ZW5jZXIuYzoyMzc4Cittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgItC90LXQu9GM0LfRjyDRgdC60L7Qv9C40YDQvtCy0LDRgtGMINC60L7QvNC80LjRgiDQstC+INCy0YDQtdC80Y8g0L/RgNC+0YbQtdGB0YHQsCDQvtCx0YDQsNGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAuIgorCisjOiBzZXF1ZW5jZXIuYzoyMzgwCittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgItC90LXQu9GM0LfRjyDQvtCx0YDQsNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQutC+0LzQvNC40YLQsCDQstC+INCy0YDQtdC80Y8g0LrQvtC/0LjRgNC+0LLQsNC90LjRjyDQutC+0LzQvNC40YLQsC4iCisKKyM6IHNlcXVlbmNlci5jOjI0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI1NDkKK21zZ2lkICJ1bnVzYWJsZSBzcXVhc2gtb250byIKK21zZ3N0ciAi0L3QtdC/0YDQuNCz0L7QtNC90YvQuSDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0YPQv9C70L7RgtC90LjRgtGMLdC90LDQtCIKKworIzogc2VxdWVuY2VyLmM6MjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAi0LjRgdC/0L7RgNGH0LXQvdC90LDRjyDQutCw0YDRgtCwINGBINC+0L/RhtC40Y/QvNC4OiDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjI2NDggc2VxdWVuY2VyLmM6NDIyNworbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLQv9C10YDQtdC00LDQvSDQv9GD0YHRgtC+0Lkg0L3QsNCx0L7RgCDQutC+0LzQvNC40YLQvtCyIgorCisjOiBzZXF1ZW5jZXIuYzoyNjU2Cittc2dpZCAiYSBjaGVycnktcGljayBvciByZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi0LrQvtC/0LjRgNC+0LLQsNC90LjQtSDQuNC70Lgg0L7QsdGA0LDRidC10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQutC+0LzQvNC40YLQsCDRg9C20LUg0LLRi9C/0L7Qu9C90Y/RjtGC0YHRjyIKKworIzogc2VxdWVuY2VyLmM6MjY1NworbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCittc2dzdHIgItC/0L7Qv9GA0L7QsdGD0LnRgtC1IMKrZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydCnCuyIKKworIzogc2VxdWVuY2VyLmM6MjY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQutCw0YLQsNC70L7QsyDQtNC70Y8g0YPQutCw0LfQsNGC0LXQu9GPINGB0LvQtdC00L7QstCw0L3QuNGPINC60L7QvNC80LjRgtC+0LIgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyNjc0Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyNzI5IHNlcXVlbmNlci5jOjM5NzkKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgItC60L7Qv9C40YDQvtCy0LDQvdC40LUg0LjQu9C4INC+0LHRgNCw0YnQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LrQvtC80LzQuNGC0LAg0YPQttC1INCy0YvQv9C+0LvQvdGP0Y7RgtGB0Y8iCisKKyM6IHNlcXVlbmNlci5jOjI3MzEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0L/RgNC10LTQtdC70LjRgtGMIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI3MzMgc2VxdWVuY2VyLmM6Mjc2OAorbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0L7RgtC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0YEg0LLQtdGC0LrQuCwg0LrQvtGC0L7RgNCw0Y8g0LXRidC1INC90LUg0YHQvtC30LTQsNC90LAiCisKKyM6IHNlcXVlbmNlci5jOjI3NTQgYnVpbHRpbi9ncmVwLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywgwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzoyNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyc6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDCqyVzwrs6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU3Cittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi0L3QtdC+0LbQuNC00LDQvdC90YvQuSDQutC+0L3QtdGGINGE0LDQudC70LAiCisKKyM6IHNlcXVlbmNlci5jOjI3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICLRgdC+0YXRgNCw0L3QtdC90L3Ri9C5INGE0LDQudC7INGBIEhFQUQg0L/QtdGA0LXQtCDQutC+0L/QuNGA0L7QstCw0L3QuNC10Lwg0LrQvtC80LzQuNGC0LAgwqslc8K7INC/0L7QstGA0LXQttC00LXQvSIKKworIzogc2VxdWVuY2VyLmM6Mjc3NAorbXNnaWQgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIKK21zZ3N0ciAi0J/QvtGF0L7QttC1LCDRh9GC0L4g0LLRiyDQv9C10YDQtdC80LXRgdGC0LjQu9C4IEhFQUQuINCf0LXRgNC10LzQvtGC0LrQsCDQvdC1INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8sINC/0YDQvtCy0LXRgNGM0YLQtSDRgdCy0L7QuSDRg9C60LDQt9Cw0YLQtdC70YwgSEVBRCEiCisKKyM6IHNlcXVlbmNlci5jOjI5MDMgc2VxdWVuY2VyLmM6Mzg5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0YwgJXMiCisKKyM6IHNlcXVlbmNlci5jOjI5NDEgc2VxdWVuY2VyLmM6Mzg3NAorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI5NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyOTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjI5OTcgc2VxdWVuY2VyLmM6MzAwMSBidWlsdGluL2RpZmZ0b29sLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC60L7Qv9C40YDQvtCy0LDRgtGMIMKrJXPCuyDQsiDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjMwMjMgc2VxdWVuY2VyLmM6MzQ0NiBidWlsdGluL3JlYmFzZS5jOjgzOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTgwIGJ1aWx0aW4vcmViYXNlLmM6MTk0MCBidWlsdGluL3JlYmFzZS5jOjE5OTUKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBzZXF1ZW5jZXIuYzozMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgItC+0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjzogJXNcbiVz0JLRiyDQvNC+0LbQtdGC0LUg0LjRgdC/0YDQsNCy0LjRgtGMINC+0YjQuNCx0LrRgywg0LAg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0YxcblxuICBnaXQgcmViYXNlIC0tY29udGludWVcblxuIgorCisjOiBzZXF1ZW5jZXIuYzozMDM0Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAi0Lgg0LHRi9C70Lgg0YHQtNC10LvQsNC90Ysg0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3QtNC10LrRgdC1INC4L9C40LvQuCDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1XG4iCisKKyM6IHNlcXVlbmNlci5jOjMwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICLRg9GB0L/QtdGI0L3QvtC1INCy0YvQv9C+0LvQvdC10L3QuNC1OiAlc1xu0L3QviDQvtGB0YLQsNC70LjRgdGMINC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90LTQtdC60YHQtSDQuC/QuNC70Lgg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtVxu0KHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPLCDQsCDQt9Cw0YLQtdC8INCy0YvQv9C+0LvQvdC40YLQtVxuXG4gIGdpdCByZWJhc2UgLS1jb250aW51ZVxuXG4iCisKKyM6IHNlcXVlbmNlci5jOjMxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzE1NQorbXNnaWQgIndyaXRpbmcgZmFrZSByb290IGNvbW1pdCIKK21zZ3N0ciAi0LfQsNC/0LjRgdGMINC/0L7QtNC00LXQu9GM0L3QvtCz0L4g0LrQvtGA0L3QtdCy0L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBzZXF1ZW5jZXIuYzozMTYwCittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAi0LfQsNC/0LjRgtGMINGD0L/Qu9C+0YLQvdC40YLRjC3QvdCw0LQiCisKKyM6IHNlcXVlbmNlci5jOjMxOTggYnVpbHRpbi9yZWJhc2UuYzo4NDQgYnVpbHRpbi9yZWJhc2UuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC00LXRgNC10LLQviDQtNC70Y8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjMyMTYgYnVpbHRpbi9yZWJhc2UuYzo4NjMKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IHNlcXVlbmNlci5jOjMyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0YHQv9C+0LfQvdCw0YLRjCDCqyVzwrsiCisKKyM6IHNlcXVlbmNlci5jOjMyNzEKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgItC90LXQu9GM0LfRjyDRgdC70LjRgtGMINCx0LXQtyDRgtC10LrRg9GJ0LXQuSDRgNC10LTQsNC60YbQuNC4IgorCisjOiBzZXF1ZW5jZXIuYzozMjkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzMxNAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MzMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0LTQu9GPIMKrJXPCuyIKKworIzogc2VxdWVuY2VyLmM6MzQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQtNCw0LbQtSDQv9C+0L/Ri9GC0LDRgtGM0YHRjyDRgdC70LjRgtGMIMKrJS4qc8K7IgorCisjOiBzZXF1ZW5jZXIuYzozNDk0Cittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0YHQu9C40Y/QvdC40LU6INCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6MzU2MiBidWlsdGluL3JlYmFzZS5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LXQvdGLINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INGB0L/RgNGP0YLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy5cbiIKKworIzogc2VxdWVuY2VyLmM6MzU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMICVzIgorCisjOiBzZXF1ZW5jZXIuYzozNTc3IGJ1aWx0aW4vcmViYXNlLmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICLQn9GA0LjQvNC10L3QtdC90LjQtSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDRgdC/0YDRj9GC0LDQvdC90YvRhSDQuNC30LzQtdC90LXQvdC40Lkg0LLRi9C30LLQsNC70L4g0LrQvtC90YTQu9C40LrRgtGLLlxu0JLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPINGB0L/RgNGP0YLQsNC90Ysg0Lgg0LIg0LHQtdC30L7Qv9Cw0YHQvdC+0YHRgtC4Llxu0JLRiyDQvNC+0LbQtdGC0LUg0LLRi9C/0L7Qu9C90LjRgtGMIMKrZ2l0IHN0YXNoIHBvcMK7INC40LvQuCDCq2dpdCBzdGFzaCBkcm9wwrsg0LIg0LvRjtCx0L7QuSDQvNC+0LzQtdC90YIuXG4iCisKKyM6IHNlcXVlbmNlci5jOjM2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozNjU3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MjQKK21zZ2lkICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC00LXQu9C40YLRjCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICVzLi4uICAlLipzXG4iCittc2dzdHIgItCe0YHRgtCw0L3QvtCy0LvQtdC90L4g0L3QsCAlcyDigKYgICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6MzgzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0LrQvtC80LDQvdC00LAgJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4ODIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvcmlnLWhlYWQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6Mzg4NworbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0YwgwqtvbnRvwrsiCisKKyM6IHNlcXVlbmNlci5jOjM5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0YwgSEVBRCDQvdCwICVzIgorCisjOiBzZXF1ZW5jZXIuYzozOTkxCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0L7Qsjog0KMg0LLQsNGBINC10YHRgtGMINC90LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogc2VxdWVuY2VyLmM6NDAwMAorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC40YHQv9GA0LDQstC40YLRjCDQvdC10YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INC60L7QvNC80LjRgiIKKworIzogc2VxdWVuY2VyLmM6NDAwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDRhNCw0LnQuzogwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo0MDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDRgdC+0LTQtdGA0LbQuNC80L7QtTogwqslc8K7IgorCisjOiBzZXF1ZW5jZXIuYzo0MDA3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICJcbtCjINCy0LDRgSDQuNC80LXRjtGC0YHRjyDQvdC10LfQsNC60L7QvNC80LjRh9C10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUuINCh0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCLCDQsCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZWJhc2UgLS1jb250aW51ZcK7INGB0L3QvtCy0LAuIgorCisjOiBzZXF1ZW5jZXIuYzo0MDQzIHNlcXVlbmNlci5jOjQwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDA5NgorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo0MTAzCittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC60L7QvNC80LjRgtC40YLRjCDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogc2VxdWVuY2VyLmM6NDIwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6INC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQutC+0LzQvNC40YIgJXMiCisKKyM6IHNlcXVlbmNlci5jOjQyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGJhZCByZXZpc2lvbiIKK21zZ3N0ciAiJXM6INC/0LvQvtGF0LDRjyDRgNC10LTQsNC60YbQuNGPIgorCisjOiBzZXF1ZW5jZXIuYzo0MjQzCittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LLQvtC30LLRgNCw0YLQuNGC0Ywg0LjQt9C90LDRh9Cw0LvRjNC90YvQuSDQutC+0LzQvNC40YIiCisKKyM6IHNlcXVlbmNlci5jOjQ2ODYKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiDQvdC1INC+0LHRgNCw0LHQvtGC0LDQvdC90YvQtSDQvtC/0YbQuNC4IgorCisjOiBzZXF1ZW5jZXIuYzo0Njg5Cittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiDQvtGI0LjQsdC60LAg0L/RgNC4INC+0LHQvdC+0LLQu9C10L3QuNC4INGA0LXQtNCw0LrRhtC40LkiCisKKyM6IHNlcXVlbmNlci5jOjQ4NDcKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgItCS0Ysg0LzQvtC20LXRgtC1INC40YHQv9GA0LDQstC40YLRjCDRjdGC0L4g0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcmViYXNlIC0tZWRpdC10b2RvwrssINCwINC/0L7RgtC+0Lwg0LfQsNC/0YPRgdGC0LjQsiDCq2dpdCByZWJhc2UgLS1jb250aW51ZcK7Llxu0JjQu9C4INCy0Ysg0LzQvtC20LXRgtC1INC/0YDQtdGA0LLQsNGC0Ywg0L/RgNC+0YbQtdGB0YEg0L/QtdGA0LXQvNC10YnQtdC90LjRjywg0LLRi9C/0L7Qu9C90LjQsiDCq2dpdCByZWJhc2UgLS1hYm9ydMK7XG4iCisKKyM6IHNlcXVlbmNlci5jOjQ5NTkgc2VxdWVuY2VyLmM6NDk3NgorbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDk5MAorbXNnaWQgImNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTA3MworbXNnaWQgInRoZSBzY3JpcHQgd2FzIGFscmVhZHkgcmVhcnJhbmdlZC4iCittc2dzdHIgItGB0YbQtdC90LDRgNC40Lkg0YPQttC1INCx0YvQuyDQv9C10YDQtdGB0YLRgNC+0LXQvS4iCisKKyM6IHNldHVwLmM6MTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICLCqyVzwrsg0LLQvdC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IHNldHVwLmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiJXM6INC90LXRgiDRgtCw0LrQvtCz0L4g0L/Rg9GC0Lgg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtS5cbtCY0YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgPNC60L7QvNCw0L3QtNCwPiAtLSA80L/Rg9GC0Yw+4oCmwrsg0LTQu9GPINGD0LrQsNC30LDQvdC40Y8g0L/Rg9GC0LXQuSwg0LrQvtGC0L7RgNGL0LUg0L3QtSDRgdGD0YnQtdGB0YLQstGD0Y7RgiDQu9C+0LrQsNC70YzQvdC+LiIKKworIzogc2V0dXAuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICLQvdC10L7QtNC90L7Qt9C90LDRh9C90YvQuSDQsNGA0LPRg9C80LXQvdGCIMKrJXPCuzog0L3QtdC40LfQstC10YHRgtC90LDRjyDRgNC10LTQsNC60YbQuNGPINC40LvQuCDQvdC1INC/0YPRgtGMINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUuXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrLS3CuyDQtNC70Y8g0L7RgtC00LXQu9C10L3QuNGPINC/0YPRgtC10Lkg0L7RgiDRgNC10LTQsNC60YbQuNC5LCDQstC+0YIg0YLQsNC6OlxuwqtnaXQgPNC60L7QvNCw0L3QtNCwPiBbPNGA0LXQtNCw0LrRhtC40Y8+4oCmXSAtLSBbPNGE0LDQudC7PuKApl3CuyIKKworIzogc2V0dXAuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICLQvdC10L7QtNC90L7Qt9C90LDRh9C90YvQuSDQsNGA0LPRg9C80LXQvdGCIMKrJXPCuzog0Y/QstC70Y/QtdGC0YHRjyDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0Lgg0YDQtdC00LDQutGG0LjQtdC5INC4INC40LzQtdC90LXQvCDRhNCw0LnQu9CwLlxu0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCqy0twrsg0LTQu9GPINC+0YLQtNC10LvQtdC90LjRjyDQv9GD0YLQtdC5INC+0YIg0YDQtdC00LDQutGG0LjQuSwg0LLQvtGCINGC0LDQujpcbsKrZ2l0IDzQutC+0LzQsNC90LTQsD4gWzzRgNC10LTQsNC60YbQuNGPPuKApl0gLS0gWzzRhNCw0LnQuz7igKZdwrsiCisKKyM6IHNldHVwLmM6MzkwCittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgIiIKKworIzogc2V0dXAuYzozOTQKK21zZ2lkICJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBzZXR1cC5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAi0J7QttC40LTQsNC10LzQsNGPINCy0LXRgNGB0LjRjyBnaXQg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyA8PSAlZCwg0LAg0L7QsdC90LDRgNGD0LbQtdC90LAgJWQiCisKKyM6IHNldHVwLmM6NTQ4Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICLQvtCx0L3QsNGA0YPQttC10L3RiyDQvdC10LjQt9Cy0LXRgdGC0L3Ri9C1INGA0LDRgdGI0LjRgNC10L3QuNGPINGA0LXQv9C+0LfQuNGC0L7RgNC40Y86IgorCisjOiBzZXR1cC5jOjU2NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nICclcyciCittc2dzdHIgItC+0YjQuNCx0LrQsCDQvtGC0LrRgNGL0YLQuNGPIMKrJXPCuyIKKworIzogc2V0dXAuYzo1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGxhcmdlIHRvIGJlIGEgLmdpdCBmaWxlOiAnJXMnIgorbXNnc3RyICLRhNCw0LnQuyDRgdC70LjRiNC60L7QvCDQsdC+0LvRjNGI0L7QuSDQutCw0Log0LTQu9GPIC5naXQg0YTQsNC50LvQsDogwqslc8K7IgorCisjOiBzZXR1cC5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0YfRgtC10L3QuNGPICVzIgorCisjOiBzZXR1cC5jOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGE0L7RgNC80LDRgiDRhNCw0LnQu9CwIGdpdGZpbGU6ICVzIgorCisjOiBzZXR1cC5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBwYXRoIGluIGdpdGZpbGU6ICVzIgorbXNnc3RyICLQvdC10YIg0L/Rg9GC0Lgg0LIgZ2l0ZmlsZTogJXMiCisKKyM6IHNldHVwLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCBnaXQ6ICVzIgorCisjOiBzZXR1cC5jOjY3NgorIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICLCqyQlc8K7INGB0LvQuNGI0LrQvtC8INCx0L7Qu9GM0YjQvtC5IgorCisjOiBzZXR1cC5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAi0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCBnaXQ6IMKrJXPCuyIKKworIzogc2V0dXAuYzo3MTkgc2V0dXAuYzo3MjEgc2V0dXAuYzo3NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIGNoZGlyINCyIMKrJXPCuyIKKworIzogc2V0dXAuYzo3MjQgc2V0dXAuYzo3ODAgc2V0dXAuYzo3OTAgc2V0dXAuYzo4Mjkgc2V0dXAuYzo4MzcKK21zZ2lkICJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstC10YDQvdGD0YLRjNGB0Y8g0LIgY3dkIgorCisjOiBzZXR1cC5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQg0LTQu9GPIMKrJSpzJXMlc8K7IgorCisjOiBzZXR1cC5jOjEwODMKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRgtC10LrRg9GJ0LjQuSDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyIKKworIzogc2V0dXAuYzoxMDkyIHNldHVwLmM6MTA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LjQt9C80LXQvdC40YLRjCDQvdCwIMKrJXPCuyIKKworIzogc2V0dXAuYzoxMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICLQvdC1INC90LDQudC00LXQvSBnaXQg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAo0LjQu9C4INC+0LTQuNC9INC40Lcg0YDQvtC00LjRgtC10LvRjNGB0LrQuNGFINC60LDRgtCw0LvQvtCz0L7Qsik6ICVzIgorCisjOiBzZXR1cC5jOjExMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICLQvdC1INC90LDQudC00LXQvSBnaXQg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAo0LjQu9C4INC+0LTQuNC9INC40Lcg0LXQs9C+INC60LDRgtCw0LvQvtCz0L7QsiDQstC/0LvQvtGC0Ywg0LTQviDRgtC+0YfQutC4INC80L7QvdGC0LjRgNC+0LLQsNC90LjRjyAlcylcbtCe0YHRgtCw0L3QsNCy0LvQuNCy0LDRjiDQv9C+0LjRgdC6INC90LAg0LPRgNCw0L3QuNGG0LUg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyAo0YLQsNC6INC60LDQuiBHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNINC90LUg0YPRgdGC0LDQvdC+0LLQu9C10L0pLiIKKworIzogc2V0dXAuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MTI2NAorbXNnaWQgIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC+0YLQutGA0YvRgtC40Y8gL2Rldi9udWxsINC40LvQuCDQtNGD0LHQu9C40YDQvtCy0LDQvdC40Y8g0LTQtdGB0LrRgNC40L/RgtC+0YDQsCIKKworIzogc2V0dXAuYzoxMjc5Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQstGL0L/QvtC70L3QtdC90LjQuCBmb3JrIgorCisjOiBzZXR1cC5jOjEyODQKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40Lggc2V0c2lkIgorCisjOiBzaGExLWZpbGUuYzo0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBhbHRlcm5hdGUgb2JqZWN0IHBhdGg6ICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgb2JqZWN0IGRpcmVjdG9yeTogJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6NjI2Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjY0NAorbXNnaWQgInVuYWJsZSB0byByZWFkIGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo2NTEKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSBuZXcgYWx0ZXJuYXRlcyBmaWxlIGludG8gcGxhY2UiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0L/Rg9GC0Ywgwqslc8K7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IHNoYTEtZmlsZS5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkIGNoZWNrb3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIKK21zZ3N0ciAi0YHRgdGL0LvQsNC10LzRi9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkgwqslc8K7INC60LDQuiDRgdCy0Y/Qt9Cw0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1LCDQv9C+0LrQsCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8uIgorCisjOiBzaGExLWZpbGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAi0YHRgdGL0LvQsNC10LzRi9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkgwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQu9C+0LrQsNC70YzQvdGL0LwuIgorCisjOiBzaGExLWZpbGUuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICLRgdGB0YvQu9Cw0LXQvNGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDCqyVzwrsg0Y/QstC70Y/QtdGC0YHRjyDRh9Cw0YHRgtC40YfQvdGL0LwiCisKKyM6IHNoYTEtZmlsZS5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiCittc2dzdHIgItGB0YHRi9C70LDQtdC80YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IMKrJXPCuyDRj9Cy0LvRj9C10YLRgdGPINGB0YDQsNGJ0LXQvdC90YvQvCIKKworIzogc2hhMS1maWxlLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzo4NzEKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjExNTkgc2hhMS1maWxlLmM6MjI5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjExNjEgc2hhMS1maWxlLmM6MjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJnYXJiYWdlIGF0IGVuZCBvZiBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMjAzCittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE2MTgKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE2MzcKK21zZ2lkICJlcnJvciB3aGVuIGNsb3NpbmcgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MDQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE3MjgKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTczOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTc1MiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkyMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxODI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTg2NworbXNnaWQgImNvcnJ1cHQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjE4NzUKK21zZ2lkICJjb3JydXB0IHRhZyIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoxOTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MTk3NworIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIwNTAgc2hhMS1maWxlLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBzaGExLWZpbGUuYzoyMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQvCDQvtCx0YrQtdC60YLQvtC8IMKrJXPCuyIKKworIzogc2hhMS1maWxlLmM6MjExOCBidWlsdGluL2luZGV4LXBhY2suYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0YwgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIzMDggc2hhMS1maWxlLmM6MjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoIGZvciAlcyAoZXhwZWN0ZWQgJXMpIgorbXNnc3RyICLQvdC10YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INGF0LXRiC3RgdGD0LzQvNGLICVzICjQvtC20LjQtNCw0LXRgtGB0Y8gJXMpIgorCisjOiBzaGExLWZpbGUuYzoyMzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiCittc2dzdHIgIiIKKworIzogc2hhMS1maWxlLmM6MjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTEtZmlsZS5jOjIzNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBjb250ZW50cyBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBzaGExLW5hbWUuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgItGB0L7QutGA0LDRidGR0L3QvdGL0LkgU0hBMSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCAlcyDQvdC10L7QtNC90L7Qt9C90LDRh9C10L0iCisKKyM6IHNoYTEtbmFtZS5jOjUwMQorbXNnaWQgIlRoZSBjYW5kaWRhdGVzIGFyZToiCittc2dzdHIgItCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgzoiCisKKyM6IHNoYTEtbmFtZS5jOjgwMAorbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAi0J7QsdGL0YfQvdC+IEdpdCDQvdC1INGB0L7Qt9C00LDQtdGCINGB0YHRi9C70LrQuCwg0L7QutCw0L3Rh9C40LLQsNGO0YnQuNC10YHRjyDQvdCwIDQwINGI0LXRgdGC0L3QsNC00YbQsNGC0LXRgNC40YfQvdGL0YVcbtGB0LjQvNCy0L7Qu9C+0LIsINC/0L7RgtC+0LzRgywg0YfRgtC+INC+0L3QuCDQsdGD0LTRg9GCINC40LPQvdC+0YDQuNGA0L7QstCw0YLRjNGB0Y8sINC60L7Qs9C00LAg0LLRiyDQv9GA0L7RgdGC0L5cbtGD0LrQsNC20LXRgtC1INGN0YLQviA0MC3RgdC40LzQstC+0LvRjNC90L7QtSDRiNC10YHRgtC90LDQtNGG0LDRgtC10YDQuNGH0L3QvtC1INGH0LjRgdC70L4uINCi0LDQutC40LUg0YHRgdGL0LvQutC4XG7QvNC+0LPQu9C4INCx0YvRgtGMINGB0L7Qt9C00LDQvdGLINC/0L4g0L7RiNC40LHQutC1LiDQndCw0L/RgNC40LzQtdGALCDRgSDQv9C+0LzQvtGJ0YzRjjpcblxuICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSDigKYpXG5cbiwg0LXRgdC70LggwqskYnLCuyDQvtC60LDQt9Cw0LvRgdGPINC/0YPRgdGC0YvQvCwg0YLQviDRgdGB0YvQu9C60LAg0YEgNDAt0YHQuNC80LLQvtC70YzQvdGL0LxcbtGI0LXRgdGC0L3QsNC00YbQsNGC0LXRgNC40YfQvdGL0Lwg0YfQuNGB0LvQvtC8INCx0YPQtNC10YIg0YHQvtC30LTQsNC90LAuINCf0L7QttCw0LvRg9C50YHRgtCwLCDQv9GA0L7RgdC80L7RgtGA0LjRgtC1INGN0YLQuFxu0YHRgdGL0LvQutC4INC4LCDQstC+0LfQvNC+0LbQvdC+LCDRg9C00LDQu9C40YLQtSDQuNGFLiDQktGLINC80L7QttC10YLQtSDQvtGC0LrQu9GO0YfQuNGC0Ywg0Y3RgtC+INGB0L7QvtCx0YnQtdC90LjQtVxu0LfQsNC/0YPRgdGC0LjQsiDCq2dpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC30LzQtdC90LjRgtGMINC90LUg0YHQu9C40YLRi9C5IC5naXRtb2R1bGVzLCDRgdC90LDRh9Cw0LvQsCDRgNCw0LfRgNC10YjQuNGC0LUg0LrQvtC90YTQu9C40LrRgtGLIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INGA0LDQt9C00LXQuyDQsiAuZ2l0bW9kdWxlcywg0LPQtNC1INC/0YPRgtGMINGA0LDQstC10L0gJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDQt9Cw0L/QuNGB0Ywg0LIgLmdpdG1vZHVsZXMg0LTQu9GPICVzIgorCisjOiBzdWJtb2R1bGUuYzoxNjUKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQuNC90LTQtdC60YHQuNGA0L7QstCw0L3QuNGPINC+0LHQvdC+0LLQu9C10L3QvdC+0LPQviAuZ2l0bW9kdWxlcyIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQsiDQv9GD0YHRgtC+0Lwg0L/QvtC00LzQvtC00YPQu9C1IMKrJXPCuyIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi0KHQv9C10YbQuNGE0LjQutCw0YLQvtGAINC/0YPRgtC4IMKrJXPCuyDQsiDQv9C+0LTQvNC+0LTRg9C70LUgwqslLipzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAi0LfQsNC/0LjRgdGMINC/0L7QtNC80L7QtNGD0LvRjyDCqyVzwrsgKCVzKSDRj9Cy0LvRj9C10YLRgdGPICVzLCDQsCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQvtC80LzQuNGC0L7QvCIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk4OAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0L/RgNC10LTQtdC70LjRgtGMIEhFQUQg0LrQsNC6INC00LXQudGB0YLQstC40YLQtdC70YzQvdGD0Y4g0YHRgdGL0LvQutGDLiIKKworIzogc3VibW9kdWxlLmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYWNjZXNzIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLCqyVzwrsg0L3QtSDRgNCw0YHQv9C+0LfQvdCw0L0g0LrQsNC6INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgZ2l0IgorCisjOiBzdWJtb2R1bGUuYzoxNzg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMIMKrZ2l0IHN0YXR1c8K7INCyINC/0L7QtNC80L7QtNGD0LvQtSDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMIMKrZ2l0IHN0YXR1c8K7INCyINC/0L7QtNC80L7QtNGD0LvQtSDCqyVzwrsiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVuc2V0IGNvcmUud29ya3RyZWUgc2V0dGluZyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxOTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIKK21zZ3N0ciAi0L/QvtC00LzQvtC00YPQu9GMIMKrJXPCuyDQuNC80LXQtdGCINC40LfQvNC10L3RkdC90L3Ri9C5INC40L3QtNC10LrRgSIKKworIzogc3VibW9kdWxlLmM6MTk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgIiIKKworIzogc3VibW9kdWxlLmM6MjAwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicmVsb2NhdGVfZ2l0ZGlyIGZvciBzdWJtb2R1bGUgJyVzJyB3aXRoIG1vcmUgdGhhbiBvbmUgd29ya3RyZWUgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAicmVsb2NhdGVfZ2l0ZGlyINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8gwqslc8K7INGBINGD0LrQsNC30LDQvdC40LXQvCDQsdC+0LvQtdC1INC+0LTQvdC+0LPQviDRgNCw0LHQvtGH0LXQs9C+INC00LXRgNC10LLQsCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8iCisKKyM6IHN1Ym1vZHVsZS5jOjIwMjAgc3VibW9kdWxlLmM6MjA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9GA0L7RgdC40YLRjCDQuNC80Y8g0L/QvtC00LzQvtC00YPQu9GPIMKrJXPCuyIKKworIzogc3VibW9kdWxlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICLQn9C10YDQtdC80LXRidC10L3QuNC1INC60LDRgtCw0LvQvtCz0LAgZ2l0INC00LvRjyDCqyVzJXPCuyDQuNC3XG7CqyVzwrsg0LJcbsKrJXPCu1xuIgorCisjOiBzdWJtb2R1bGUuYzoyMTExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQtdC60YPRgNGB0LjQstC90L4g0LfQsNC50YLQuCDQsiDQv9C+0LTQvNC+0LTRg9C70Ywgwqslc8K7IgorCisjOiBzdWJtb2R1bGUuYzoyMTU1Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGxzLWZpbGVzIGluIC4uIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0IGxzLWZpbGVzINCyIC4uIgorCisjOiBzdWJtb2R1bGUuYzoyMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImxzLXRyZWUgcmV0dXJuZWQgdW5leHBlY3RlZCByZXR1cm4gY29kZSAlZCIKK21zZ3N0ciAibHMtdHJlZSDQstC10YDQvdGD0Lsg0L3QtdC+0LbQuNC00LDQvdC90YvQuSDQutC+0LQgJWQiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgc3VzcGljaW91cyBzdWJtb2R1bGUgbmFtZTogJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0YPRjiDQv9C+0LTQvtC30YDQuNGC0LXQu9GM0L3Ri9C5INC/0L7QtNC80L7QtNGD0LvRjCDRgSDQuNC80LXQvdC10Lw6ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6Mjk5Cittc2dpZCAibmVnYXRpdmUgdmFsdWVzIG5vdCBhbGxvd2VkIGZvciBzdWJtb2R1bGUuZmV0Y2hqb2JzIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9C1INC30L3QsNGH0LXQvdC40Y8g0LTQu9GPIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICIg0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMIC5naXRtb2R1bGVzINC30LDQv9C40YHRjCAlcyIKKworIzogdHJhaWxlci5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJydW5uaW5nIHRyYWlsZXIgY29tbWFuZCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INC30LDQv9GD0YHQutC1INC60L7QvNCw0L3QtNGLINC30LDQstC10YDRiNC40YLQtdC70Y8gwqslc8K7IgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8g0LrQu9GO0YfQsCDCqyVzwrsiCisKKyM6IHRyYWlsZXIuYzo1MzkgdHJhaWxlci5jOjU0NCBidWlsdGluL3JlbW90ZS5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICLQsdC+0LvRjNGI0LUg0L7QtNC90L7Qs9C+ICVzIgorCisjOiB0cmFpbGVyLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgItC/0YPRgdGC0LDRjyDQv9C+0YHQu9C10LTQvdGP0Y8g0LvQtdC60YHQtdC80LAg0LIg0LfQsNCy0LXRgNGI0LjRgtC10LvQtSDCqyUuKnPCuyIKKworIzogdHJhaWxlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINCy0YXQvtC00L3QvtC5INGE0LDQudC7IMKrJXPCuyIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IHRyYWlsZXIuYzoxMDExIHdyYXBwZXIuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQg0LTQu9GPICVzIgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAi0YTQsNC50LsgJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC+0LHRi9GH0L3Ri9C8INGE0LDQudC70L7QvCIKKworIzogdHJhaWxlci5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIKK21zZ3N0ciAi0YTQsNC50LsgJXMg0L3QtSDQtNC+0YHRgtGD0L/QtdC9INC90LAg0LfQsNC/0LjRgdGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjiIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0YTQsNC50LsiCisKKyM6IHRyYWlsZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUgdG8gJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INGE0LDQudC7INCyICVzIgorCisjOiB0cmFuc3BvcnQuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iCittc2dzdHIgItCR0YPQtNC10YIg0YPRgdGC0LDQvdC+0LLQu9C10L0g0LLRi9GI0LXRgdGC0L7Rj9GJ0LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC00LvRjyDCqyVzwrsg0L3QsCDCqyVzwrsg0YEgwqslc8K7XG4iCisKKyM6IHRyYW5zcG9ydC5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBidW5kbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0OiBpbnZhbGlkIGRlcHRoIG9wdGlvbiAnJXMnIgorbXNnc3RyICLRgtGA0LDQvdGB0L/QvtGA0YI6INC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQv9Cw0YDQsNC80LXRgtGAINCz0LvRg9Cx0LjQvdGLIMKrJXPCuyIKKworIzogdHJhbnNwb3J0LmM6MjU5Cittc2dpZCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoyNjAKK21zZ2lkICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzo2MjUKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQvtC/0YbQuNGOIHRyYW5zcG9ydC5jb2xvci4qIgorCisjOiB0cmFuc3BvcnQuYzo2OTgKK21zZ2lkICJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6ODkxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydCAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC5jOjk0NQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LmM6MTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvQuCDQv9C+INGD0LrQsNC30LDQvdC90YvQvCDQv9GD0YLRj9C8INGB0L7QtNC10YDQttCw0YIg0LjQt9C80LXQvdC10L3QuNGPLCDQutC+0YLQvtGA0YvQtSDQvdC1INC90LDQudC00LXQvdGLINC90Lgg0L3QsCDQvtC00L3QvtC8INC40Lcg0LLQvdC10YjQvdC40YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyOlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQbGVhc2UgdHJ5XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKK21zZ3N0ciAiXG7Qn9C+0L/RgNC+0LHRg9C50YLQtSDQstGL0L/QvtC70L3QuNGC0YxcblxuXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcblxu0LjQu9C4INC/0LXRgNC10LnRgtC4INCyINC60LDRgtCw0LvQvtCzINGBINC/0L7QvNC+0YnRjNGOINC60L7QvNCw0L3QtNGLIGNkINC4INCy0YvQv9C+0LvQvdC40YLRjFxuXG5cdGdpdCBwdXNoXG5cbtC00LvRjyDQuNGFINC+0YLQv9GA0LDQstC60Lgg0L3QsCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDUyCittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICLQn9GA0LXRgNGL0LLQsNGOLiIKKworIzogdHJhbnNwb3J0LmM6MTE5MworbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoxMzI2IHRyYW5zcG9ydC1oZWxwZXIuYzo2NDUKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTEgdHJhbnNwb3J0LWhlbHBlci5jOjgwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE1MCB0cmFuc3BvcnQtaGVscGVyLmM6NTU5Cittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjA3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyNzQgdHJhbnNwb3J0LWhlbHBlci5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0ODEKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1pbXBvcnQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUwNAorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUzMyB0cmFuc3BvcnQtaGVscGVyLmM6MTA5OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MDAKK21zZ2lkICJzZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjAyCittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZD1pZi1hc2tlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjkzOQorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTkxCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5OTYKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQoJXMpIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0ZSglcykgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTMzNyB0cmFuc3BvcnQtaGVscGVyLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQgdG8gd2FpdCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQwMCB0cmFuc3BvcnQtaGVscGVyLmM6MTQwOQorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIgorbXNnc3RyICIiCisKKyM6IHRyZWUtd2Fsay5jOjMzCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICLRgdC70LjRiNC60L7QvCAg0LrQvtGA0L7RgtC60LjQuSDQvtCx0YrQtdC60YIg0LTQtdGA0LXQstCwIgorCisjOiB0cmVlLXdhbGsuYzozOQorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRgNC10LbQuNC8INCyINC30LDQv9C40YHQuCDQtNC10YDQtdCy0LAiCisKKyM6IHRyZWUtd2Fsay5jOjQzCittc2dpZCAiZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAi0L/Rg9GB0YLQvtC1INC40LzRjyDRhNCw0LnQu9CwINCyINC30LDQv9C40YHQuCDQtNC10YDQtdCy0LAiCisKKyM6IHRyZWUtd2Fsay5jOjExNgorbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgItGB0LvQuNGI0LrQvtC8ICDQutC+0YDQvtGC0LrQuNC5INGE0LDQudC7INC00LXRgNC10LLQsCIKKworIzogdW5wYWNrLXRyZWVzLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAi0JLQsNGI0Lgg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0YTQsNC50LvQsNGFINCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCDQv9C10YDQtdC60LvRjtGH0LXQvdC40Lgg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LU6XG4lJXPQodC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgiDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQstCw0YjQuCDQuNC30LzQtdC90LXQvdC40Y8g0L/QtdGA0LXQtCDQv9C10YDQtdC60LvRjtGH0LXQvdC40LXQvCDQstC10YLQvtC6LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgItCS0LDRiNC4INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YPQutCw0LfQsNC90L3Ri9GFINGE0LDQudC70LDRhSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0Lgg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC4INC90LAg0YHQvtGB0YLQvtGP0L3QuNC1OlxuJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgItCS0LDRiNC4INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YPQutCw0LfQsNC90L3Ri9GFINGE0LDQudC70LDRhSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0Lgg0YHQu9C40Y/QvdC40Lg6XG4lJXPQodC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgiDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQstCw0YjQuCDQuNC30LzQtdC90LXQvdC40Y8g0L/QtdGA0LXQtCDRgdC70LjRj9C90LjQtdC8INCy0LXRgtC+0LouIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAi0JLQsNGI0Lgg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0YTQsNC50LvQsNGFINCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCDRgdC70LjRj9C90LjQuDpcbiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICLQktCw0YjQuCDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINGD0LrQsNC30LDQvdC90YvRhSDRhNCw0LnQu9Cw0YUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0L/RgNC4ICVzOlxuJSVz0KHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPINC/0LXRgNC10LQgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAi0JLQsNGI0Lgg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0YTQsNC50LvQsNGFINCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCAlczpcbiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1INGD0LrQsNC30LDQvdC90YvRhSDQutCw0YLQsNC70L7Qs9C+0LIg0L/RgNC40LLQtdC00LXRgiDQuiDQv9C+0YLQtdGA0LUg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiDQsiDQvdC40YU6XG4lcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ysg0L/RgNC4INC/0LXRgNC10LrQu9GO0YfQtdC90LjQuCDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtTpcbiUlc9Cf0LXRgNC10LzQtdGB0YLQuNGC0LUg0Y3RgtC4INGE0LDQudC70Ysg0LjQu9C4INGD0LTQsNC70LjRgtC1INC40YUg0L/QtdGA0LXQtCDQv9C10YDQtdC60LvRjtGH0LXQvdC40LXQvCDQstC10YLQvtC6LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ysg0L/RgNC4INC/0LXRgNC10LrQu9GO0YfQtdC90LjQuCDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtTpcbiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L3Ri9C1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3RiyDQv9GA0Lgg0YHQu9C40Y/QvdC40Lg6XG4lJXPQn9C10YDQtdC80LXRgdGC0LjRgtC1INGN0YLQuCDRhNCw0LnQu9GLINC40LvQuCDRg9C00LDQu9C40YLQtSDQuNGFINC/0LXRgNC10LQg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC10Lwg0LLQtdGC0L7Qui4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdGL0LUg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDQsdGD0LTRg9GCINGD0LTQsNC70LXQvdGLINC/0YDQuCDRgdC70LjRj9C90LjQuDpcbiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L3Ri9C1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3RiyDQv9GA0LggJXM6XG4lJXPQn9C10YDQtdC80LXRgdGC0LjRgtC1INGN0YLQuCDRhNCw0LnQu9GLINC40LvQuCDRg9C00LDQu9C40YLQtSDQuNGFINC/0LXRgNC10LQgJXMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L3Ri9C1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3RiyDQv9GA0LggJXM6XG4lJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L3Ri9C1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0L/RgNC4INC/0LXRgNC10LrQu9GO0YfQtdC90LjQuCDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtTpcbiUlc9Cf0LXRgNC10LzQtdGB0YLQuNGC0LUg0Y3RgtC4INGE0LDQudC70Ysg0LjQu9C4INGD0LTQsNC70LjRgtC1INC40YUg0L/QtdGA0LXQtCDQv9C10YDQtdC60LvRjtGH0LXQvdC40LXQvCDQstC10YLQvtC6LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdGL0LUg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0Lgg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC4INC90LAg0YHQvtGB0YLQvtGP0L3QuNC1OlxuJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L3Ri9C1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0L/RgNC4INGB0LvQuNGP0L3QuNC4OlxuJSVz0J/QtdGA0LXQvNC10YHRgtC40YLQtSDRjdGC0Lgg0YTQsNC50LvRiyDQuNC70Lgg0YPQtNCw0LvQuNGC0LUg0LjRhSDQv9C10YDQtdC0INC/0LXRgNC10LrQu9GO0YfQtdC90LjQtdC8INCy0LXRgtC+0LouIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCDRgdC70LjRj9C90LjQuDpcbiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCAlczpcbiUlc9Cf0LXRgNC10LzQtdGB0YLQuNGC0LUg0Y3RgtC4INGE0LDQudC70Ysg0LjQu9C4INGD0LTQsNC70LjRgtC1INC40YUg0L/QtdGA0LXQtCAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L3Ri9C1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0L/RgNC4ICVzOlxuJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iCittc2dzdHIgItCX0LDQv9C40YHRjCDCqyVzwrsg0YfQsNGB0YLQuNGH0L3QviDRgdC+0LLQv9Cw0LTQsNC10YIg0YEgwqslc8K7LiAg0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LfQvdCw0YfQuNGC0Ywg0YHQvtC+0YLQstC10YLRgdGC0LLQuNC1LiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHNwYXJzZSBjaGVja291dDogdGhlIGZvbGxvd2luZyBlbnRyaWVzIGFyZSBub3QgdXAgdG8gZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINGH0LDRgdGC0LjRh9C90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LU6INGB0LvQtdC00YPRjtGJ0LjQtSDRjdC70LXQvNC10L3RgtGLINC90LUg0L/QvtGB0LvQtdC00L3QtdC5INCy0LXRgNGB0LjQuDpcbiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCB1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDRhNCw0LnQu9GLINC40Lcg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwINCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC/0YDQuCDQvtCx0L3QvtCy0LvQtdC90LjQuCDRh9Cw0YHRgtC40YfQvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y86XG4lcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCB1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgItCj0LrQsNC30LDQvdC90YvQtSDRhNCw0LnQu9GLINC40Lcg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwINCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ysg0L/RgNC4INC+0LHQvdC+0LLQu9C10L3QuNC4INGH0LDRgdGC0LjRh9C90L7Qs9C+INGB0L7RgdGC0L7Rj9C90LjRjzpcbiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuIgorIiVzIgorbXNnc3RyICLQndC1INGD0LTQvtC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0L/QvtC00LzQvtC00YPQu9GMOlxuJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZ1xuIgorbXNnc3RyICLQn9GA0LXRgNGL0LLQsNGOXG4iCisKKyM6IHVucGFjay10cmVlcy5jOjMxOAorbXNnaWQgIkNoZWNraW5nIG91dCBmaWxlcyIKK21zZ3N0ciAi0KDQsNGB0L/QsNC60L7QstC60LAg0YTQsNC50LvQvtCyIgorCisjOiB1bnBhY2stdHJlZXMuYzozNTAKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBwYXRocyBoYXZlIGNvbGxpZGVkIChlLmcuIGNhc2Utc2Vuc2l0aXZlIHBhdGhzXG4iCisib24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pIGFuZCBvbmx5IG9uZSBmcm9tIHRoZSBzYW1lXG4iCisiY29sbGlkaW5nIGdyb3VwIGlzIGluIHRoZSB3b3JraW5nIHRyZWU6XG4iCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINC40LzRjyBVUkwg0YHRhdC10LzRiyDQuNC70Lgg0L/RgNC+0L/Rg9GJ0LXQvSDRgdGD0YTRhNC40LrRgSDCqzovL8K7IgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRg9C/0YDQsNCy0LvRj9GO0YnQsNGPINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLRjCAlWFgiCisKKyM6IHVybG1hdGNoLmM6MjE1Cittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgItC/0YDQvtC/0YPRidC10L3QviDQuNC80Y8g0YHQtdGA0LLQtdGA0LAg0Lgg0YHRhdC10LzQsCDQtNC+0YHRgtGD0L/QsCDQvdC1IMKrZmlsZTrCuyIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJVUkwg0YHQviDRgdGF0LXQvNC+0LkgwqtmaWxlOsK7INC90LUg0LzQvtC20LXRgiDRgdC+0LTQtdGA0LbQsNGC0Ywg0L3QvtC80LXRgCDQv9C+0YDRgtCwIgorCisjOiB1cmxtYXRjaC5jOjI0NworbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQtSDRgdC40LzQstC+0LvRiyDQsiDQuNC80LXQvdC4INGB0LXRgNCy0LXRgNCwIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQvdC+0LzQtdGAINC/0L7RgNGC0LAiCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGH0LDRgdGC0Ywg0L/Rg9GC0LggwqsuLsK7IgorCisjOiB3b3JrdHJlZS5jOjI1NSBidWlsdGluL2FtLmM6MjA5NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDCqyVzwrsiCisKKyM6IHdvcmt0cmVlLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiB3b3JrdHJlZS5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbGUgZG9lcyBub3QgY29udGFpbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUgbG9jYXRpb24iCittc2dzdHIgIiIKKworIzogd29ya3RyZWUuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiwqslc8K7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IHdvcmt0cmVlLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgLmdpdCBmaWxlLCBlcnJvciBjb2RlICVkIgorbXNnc3RyICIiCisKKyM6IHdvcmt0cmVlLmM6MzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgYmFjayB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzoyMjMgd3JhcHBlci5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyDQtNC70Y8g0YfRgtC10L3QuNGPINC4INC30LDQv9C40YHQuCIKKworIzogd3JhcHBlci5jOjQyNCB3cmFwcGVyLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAiwqslc8K7INC90LXQtNC+0YHRgtGD0L/QvdC+IgorCisjOiB3cmFwcGVyLmM6NjMyCittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0YLQtdC60YPRidC40Lkg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IHd0LXN0YXR1cy5jOjE1NgorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAi0J3QtSDRgdC70LjRgtGL0LUg0L/Rg9GC0Lg6IgorCisjOiB3dC1zdGF0dXMuYzoxODMgd3Qtc3RhdHVzLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZXNldCAlcyA80YTQsNC50Ls+4oCmwrssINGH0YLQvtCx0Ysg0YPQsdGA0LDRgtGMINC40Lcg0LjQvdC00LXQutGB0LApIgorCisjOiB3dC1zdGF0dXMuYzoxODUgd3Qtc3RhdHVzLmM6MjEyCittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJtIC0tY2FjaGVkIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDRg9Cx0YDQsNGC0Ywg0LjQtyDQuNC90LTQtdC60YHQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE4OQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhZGQgPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINC/0L7QvNC10YLQuNGC0Ywg0YDQsNC30YDQtdGI0LXQvdC40LUg0LrQvtC90YTQu9C40LrRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTkxIHd0LXN0YXR1cy5jOjE5NQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhZGQvcm0gPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINC/0L7QvNC10YLQuNGC0Ywg0LLRi9Cx0YDQsNC90L3QvtC1INGA0LDQt9GA0LXRiNC10L3QuNC1INC60L7QvdGE0LvQuNC60YLQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE5MworbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJtIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDQv9C+0LzQtdGC0LjRgtGMINGA0LDQt9GA0LXRiNC10L3QuNC1INC60L7QvdGE0LvQuNC60YLQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjIwNCB3dC1zdGF0dXMuYzoxMDY0Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8sINC60L7RgtC+0YDRi9C1INCx0YPQtNGD0YIg0LLQutC70Y7Rh9C10L3RiyDQsiDQutC+0LzQvNC40YI6IgorCisjOiB3dC1zdGF0dXMuYzoyMjIgd3Qtc3RhdHVzLmM6MTA3MworbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPLCDQutC+0YLQvtGA0YvQtSDQvdC1INCyINC40L3QtNC10LrRgdC1INC00LvRjyDQutC+0LzQvNC40YLQsDoiCisKKyM6IHd0LXN0YXR1cy5jOjIyNgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFkZCA80YTQsNC50Ls+4oCmwrssINGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDRhNCw0LnQuyDQsiDQuNC90LTQtdC60YEpIgorCisjOiB3dC1zdGF0dXMuYzoyMjgKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhZGQvcm0gPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0LjQu9C4INGD0LTQsNC70LjRgtGMINGE0LDQudC7INC40Lcg0LjQvdC00LXQutGB0LApIgorCisjOiB3dC1zdGF0dXMuYzoyMjkKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nICIKKyJkaXJlY3RvcnkpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGNoZWNrb3V0IC0tIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDQvtGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRj1xuICAg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSkiCisKKyM6IHd0LXN0YXR1cy5jOjIzMQorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiICAo0YHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0LjQu9C4INC+0YLQvNC10L3QuNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7QvCDQuNC70Lgg0LjQt9C80LXQvdC10L3QvdC+0Lwg0YHQvtC00LXRgNC20LjQvNC+0Lwg0LIg0L/QvtC00LzQvtC00YPQu9GP0YUpIgorCisjOiB3dC1zdGF0dXMuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgJXMgPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0LIg0YLQviwg0YfRgtC+INCx0YPQtNC10YIg0LLQutC70Y7Rh9C10L3QviDQsiDQutC+0LzQvNC40YIpIgorCisjOiB3dC1zdGF0dXMuYzoyNTgKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICLQvtCx0LAg0YPQtNCw0LvQtdC90Ys6IgorCisjOiB3dC1zdGF0dXMuYzoyNjAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgItC00L7QsdCw0LLQu9C10L3QviDQvdCw0LzQuDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2MgorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgItGD0LTQsNC70LXQvdC+INC40LzQuDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICLQtNC+0LHQsNCy0LvQtdC90L4g0LjQvNC4OiIKKworIzogd3Qtc3RhdHVzLmM6MjY2Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgItGD0LTQsNC70LXQvdC+INC90LDQvNC4OiIKKworIzogd3Qtc3RhdHVzLmM6MjY4Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgItC+0LHQsCDQtNC+0LHQsNCy0LvQtdC90Ys6IgorCisjOiB3dC1zdGF0dXMuYzoyNzAKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAi0L7QsdCwINC40LfQvNC10L3QtdC90Ys6IgorCisjOiB3dC1zdGF0dXMuYzoyODAKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgItC90L7QstGL0Lkg0YTQsNC50Ls6IgorCisjOiB3dC1zdGF0dXMuYzoyODIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICLRgdC60L7Qv9C40YDQvtCy0LDQvdC+OiIKKworIzogd3Qtc3RhdHVzLmM6Mjg0Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgItGD0LTQsNC70LXQvdC+OiIKKworIzogd3Qtc3RhdHVzLmM6Mjg2Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICLQuNC30LzQtdC90LXQvdC+OiIKKworIzogd3Qtc3RhdHVzLmM6Mjg4Cittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgItC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC+OiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgItC40LfQvNC10L3QtdC9INGC0LjQvzoiCisKKyM6IHd0LXN0YXR1cy5jOjI5MgorbXNnaWQgInVua25vd246IgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QvjoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAi0L3QtSDRgdC70LjRgtGL0LU6IgorCisjOiB3dC1zdGF0dXMuYzozNzQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICLQvdC+0LLRi9C1INC60L7QvNC80LjRgtGLLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3NgorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAi0LjQt9C80LXQvdC10L3QviDRgdC+0LTQtdGA0LbQuNC80L7QtSwgIgorCisjOiB3dC1zdGF0dXMuYzozNzgKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICLQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0LUg0YHQvtC00LXRgNC20LjQvNC+0LUsICIKKworIzogd3Qtc3RhdHVzLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJpZXMiCittc2dzdHJbMF0gItCjINCy0LDRgSDRgdC10LnRh9Cw0YEg0YHQv9GA0Y/RgtCw0L3QsCAlZCDQt9Cw0L/QuNGB0YwiCittc2dzdHJbMV0gItCjINCy0LDRgSDRgdC10LnRh9Cw0YEg0YHQv9GA0Y/RgtCw0L3RiyAlZCDQt9Cw0L/QuNGB0LgiCittc2dzdHJbMl0gItCjINCy0LDRgSDRgdC10LnRh9Cw0YEg0YHQv9GA0Y/RgtCw0L3QviAlZCDQt9Cw0L/QuNGB0LXQuSIKK21zZ3N0clszXSAi0KMg0LLQsNGBINGB0LXQudGH0LDRgSDRgdC/0YDRj9GC0LDQvdGLICVkINC30LDQv9C40YHQuCIKKworIzogd3Qtc3RhdHVzLmM6OTI4Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgItCY0LfQvNC10L3QtdC90L3Ri9C1LCDQvdC+INC90LUg0L7QsdC90L7QstC70LXQvdC90YvQtSDQv9C+0LTQvNC+0LTRg9C70Lg6IgorCisjOiB3dC1zdGF0dXMuYzo5MzAKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0LIg0L/QvtC00LzQvtC00YPQu9GP0YUsINC60L7RgtC+0YDRi9C1INCx0YPQtNGD0YIg0LfQsNC60L7QvNC80LjRh9C10L3RizoiCisKKyM6IHd0LXN0YXR1cy5jOjEwMTIKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICLQndC1INC40LfQvNC10L3Rj9C50YLQtSDQuNC70Lgg0YPQtNCw0LvRj9C50YLQtSDRgdGC0YDQvtC60YMg0LLRi9GI0LUg0Y3RgtC+0LkuXG7QktGB0ZEsINGH0YLQviDQvdC40LbQtSDigJQg0LHRg9C00LXRgiDQv9GA0L7QuNCz0L3QvtGA0LjRgNC+0LLQsNC90L4uIgorCisjOiB3dC1zdGF0dXMuYzoxMTE5Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICLQoyDQstCw0YEg0LXRgdGC0Ywg0L3QtSDRgdC70LjRgtGL0LUg0L/Rg9GC0LguIgorCisjOiB3dC1zdGF0dXMuYzoxMTIyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAo0YDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YLRiywg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgY29tbWl0wrspIgorCisjOiB3dC1zdGF0dXMuYzoxMTI0Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IG1lcmdlIC0tYWJvcnTCuywg0YfRgtC+0LHRiyDQvtGB0YLQsNC90L7QstC40YLRjCDQvtC/0LXRgNCw0YbQuNGOINGB0LvQuNGP0L3QuNGPKSIKKworIzogd3Qtc3RhdHVzLmM6MTEyOAorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgItCS0YHQtSDQutC+0L3RhNC70LjQutGC0Ysg0LjRgdC/0YDQsNCy0LvQtdC90YssINC90L4g0LLRiyDQstGB0LUg0LXRidC1INCyINC/0YDQvtGG0LXRgdGB0LUg0YHQu9C40Y/QvdC40Y8uIgorCisjOiB3dC1zdGF0dXMuYzoxMTMxCittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBjb21taXTCuywg0YfRgtC+0LHRiyDQt9Cw0LLQtdGA0YjQuNGC0Ywg0YHQu9C40Y/QvdC40LUpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQwCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICLQktGLINCyINC/0YDQvtGG0LXRgdGB0LUg0YHQtdGB0YHQuNC4IGFtLiIKKworIzogd3Qtc3RhdHVzLmM6MTE0MworbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAi0KLQtdC60YPRidC40Lkg0L/QsNGC0Ycg0L/Rg9GB0YLQvtC5LiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNGA0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGC0YssINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGFtIC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjExNDkKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhbSAtLXNraXDCuywg0YfRgtC+0LHRiyDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRjdGC0L7RgiDQv9Cw0YLRhykiCisKKyM6IHd0LXN0YXR1cy5jOjExNTEKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgYW0gLS1hYm9ydMK7LCDRh9GC0L7QsdGLINCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQvtGA0LjQs9C40L3QsNC70YzQvdGD0Y4g0LLQtdGC0LrRgykiCisKKyM6IHd0LXN0YXR1cy5jOjEyODQKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgImdpdC1yZWJhc2UtdG9kbyDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCLiIKKworIzogd3Qtc3RhdHVzLmM6MTI4NgorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICLQmtC+0LzQsNC90LTRiyDQvdC1INCy0YvQv9C+0LvQvdC10L3Riy4iCisKKyM6IHd0LXN0YXR1cy5jOjEyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAi0J/QvtGB0LvQtdC00L3Rj9GPINC60L7QvNCw0L3QtNCwINCy0YvQv9C+0LvQvdC10L3QsCAoJWQg0LrQvtC80LDQvdC00LAg0LLRi9C/0L7Qu9C90LXQvdCwKToiCittc2dzdHJbMV0gItCf0L7RgdC70LXQtNC90Y/RjyDQutC+0LzQsNC90LTQsCDQstGL0L/QvtC70L3QtdC90LAgKCVkINC60L7QvNCw0L3QtNGLINCy0YvQv9C+0LvQvdC10L3Qvik6IgorbXNnc3RyWzJdICLQn9C+0YHQu9C10LTQvdGP0Y8g0LrQvtC80LDQvdC00LAg0LLRi9C/0L7Qu9C90LXQvdCwICglZCDQutC+0LzQsNC90LQg0LLRi9C/0L7Qu9C90LXQvdC+KToiCittc2dzdHJbM10gItCf0L7RgdC70LXQtNC90Y/RjyDQutC+0LzQsNC90LTQsCDQstGL0L/QvtC70L3QtdC90LAgKCVkINC60L7QvNCw0L3QtCDQstGL0L/QvtC70L3QtdC90L4pOiIKKworIzogd3Qtc3RhdHVzLmM6MTMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAo0YHQvNC+0YLRgNC40YLQtSDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QviDQsiDRhNCw0LnQu9C1ICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTMwNQorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgItCa0L7QvNCw0L3QtCDQsdC+0LvRjNGI0LUg0L3QtSDQvtGB0YLQsNC70L7RgdGMLiIKKworIzogd3Qtc3RhdHVzLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICLQodC70LXQtNGD0Y7RidCw0Y8g0LrQvtC80LDQvdC00LAg0LTQu9GPINCy0YvQv9C+0LvQvdC10L3QuNGPICglZCDQutC+0LzQsNC90LTQsCDQvtGB0YLQsNC70LDRgdGMKToiCittc2dzdHJbMV0gItCh0LvQtdC00YPRjtGJ0LDRjyDQutC+0LzQsNC90LTQsCDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gKCVkINC60L7QvNCw0L3QtNGLINC+0YHRgtCw0LvQvtGB0YwpOiIKK21zZ3N0clsyXSAi0KHQu9C10LTRg9GO0YnQsNGPINC60L7QvNCw0L3QtNCwINC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyAoJWQg0LrQvtC80LDQvdC0INC+0YHRgtCw0LvQvtGB0YwpOiIKK21zZ3N0clszXSAi0KHQu9C10LTRg9GO0YnQsNGPINC60L7QvNCw0L3QtNCwINC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyAoJWQg0LrQvtC80LDQvdC0INC+0YHRgtCw0LvQvtGB0YwpOiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNgorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZWJhc2UgLS1lZGl0LXRvZG/Cuywg0YfRgtC+0LHRiyDQv9GA0L7RgdC80L7RgtGA0LXRgtGMINC4INC40LfQvNC10L3QuNGC0YwpIgorCisjOiB3dC1zdGF0dXMuYzoxMzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQv9C10YDQtdC80LXRidCw0LXRgtC1INCy0LXRgtC60YMgwqslc8K7INC90LDQtCDCqyVzwrsuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQv9C10YDQtdC80LXRidCw0LXRgtC1INCy0LXRgtC60YMuIgorCisjOiB3dC1zdGF0dXMuYzoxMzQ2Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNGA0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGC0YssINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxMzQ4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlYmFzZSAtLXNraXDCuywg0YfRgtC+0LHRiyDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRjdGC0L7RgiDQv9Cw0YLRhykiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTAKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmViYXNlIC0tYWJvcnTCuywg0YfRgtC+0LHRiyDQv9C10YDQtdC50YLQuCDQvdCwINC+0YDQuNCz0LjQvdCw0LvRjNC90YPRjiDQstC10YLQutGDKSIKKworIzogd3Qtc3RhdHVzLmM6MTM1NworbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LLRgdC1INC60L7QvdGE0LvQuNC60YLRiyDRgNCw0LfRgNC10YjQtdC90Ys6INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZWJhc2UgLS1jb250aW51ZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTM2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDRgNCw0LfQtNC10LvRj9C10YLQtSDQutC+0LzQvNC40YIg0L/RgNC4INC/0LXRgNC10LzQtdGJ0LXQvdC40Lgg0LLQtdGC0LrQuCAgwqslc8K7INC90LDQtCDCqyVzwrsuIgorCisjOiB3dC1zdGF0dXMuYzoxMzY2Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINGA0LDQt9C00LXQu9GP0LXRgtC1INC60L7QvNC80LjRgiDQv9GA0Lgg0L/QtdGA0LXQvNC10YnQtdC90LjQuCDQstC10YLQutC4LiIKKworIzogd3Qtc3RhdHVzLmM6MTM2OQorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIo0JrQsNC6INGC0L7Qu9GM0LrQviDQstCw0Ygg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0LHRg9C00LXRgiDRh9C40YHRgtGL0LksINC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZWJhc2UgLS1jb250aW51ZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTM3MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDRgNC10LTQsNC60YLQuNGA0YPQtdGC0LUg0LrQvtC80LzQuNGCINC/0YDQuCDQv9C10YDQtdC80LXRidC10L3QuNC4INCy0LXRgtC60LggIMKrJXPCuyDQvdCw0LQgwqslc8K7LiIKKworIzogd3Qtc3RhdHVzLmM6MTM3OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0YDQtdC00LDQutGC0LjRgNGD0LXRgtC1INC60L7QvNC80LjRgiDQv9GA0Lgg0L/QtdGA0LXQvNC10YnQtdC90LjQuCDQstC10YLQutC4LiIKKworIzogd3Qtc3RhdHVzLmM6MTM4MQorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgY29tbWl0IC0tYW1lbmTCuywg0YfRgtC+0LHRiyDQuNGB0L/RgNCw0LLQuNGC0Ywg0YLQtdC60YPRidC40Lkg0LrQvtC80LzQuNGCKSIKKworIzogd3Qtc3RhdHVzLmM6MTM4MworbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrssINC60L7Qs9C00LAg0LHRg9C00LXRgtC1INC00L7QstC+0LvRjNC90Ysg0LjQt9C80LXQvdC10L3QuNGP0LzQuCkiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTQKK21zZ2lkICJDaGVycnktcGljayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAi0JLRiyDQutC+0L/QuNGA0YPQtdGC0LUg0LrQvtC80LzQuNGCICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTQwNAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjRgNCw0LfRgNC10YjQuNGC0LUg0LrQvtC90YTQu9C40LrRgtGLLCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBjaGVycnktcGljayAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxNDA3Cittc2dpZCAiICAocnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQxMAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQstGB0LUg0LrQvtC90YTQu9C40LrRgtGLINGA0LDQt9GA0LXRiNC10L3Rizog0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjE0MTIKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBjaGVycnktcGljayAtLWFib3J0wrssINGH0YLQvtCx0Ysg0L7RgtC80LXQvdC40YLRjCDQutC+0L/QuNGA0L7QstCw0L3QuNGPINC60L7QvNC80LjRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTQyMgorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINC+0LHRgNCw0YnQsNC10YLQtSDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC80LzQuNGC0LAgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDMxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjRgNCw0LfRgNC10YjQuNGC0LUg0LrQvtC90YTQu9C40LrRgtGLLCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZXZlcnQgLS1jb250aW51ZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNAorbXNnaWQgIiAgKHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQstGB0LUg0LrQvtC90YTQu9C40LrRgtGLINGA0LDQt9GA0LXRiNC10L3Rizog0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJldmVydCAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxNDM5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZXZlcnQgLS1hYm9ydMK7LCDRh9GC0L7QsdGLINC+0YLQvNC10L3QuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDQvtCx0YDQsNGJ0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INC60L7QvNC80LjRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINCyINC/0YDQvtGG0LXRgdGB0LUg0LTQstC+0LjRh9C90L7Qs9C+INC/0L7QuNGB0LrQsCwg0L3QsNGH0LDRgtC+0LPQviDRgSDQstC10YLQutC4IMKrJXPCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQsiDQv9GA0L7RhtC10YHRgdC1INC00LLQvtC40YfQvdC+0LPQviDQv9C+0LjRgdC60LAuIgorCisjOiB3dC1zdGF0dXMuYzoxNDU2Cittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGJpc2VjdCByZXNldMK7LCDRh9GC0L7QsdGLINCy0LXRgNC90YPRgtGM0YHRjyDQvdCwINC40YHRhdC+0LTQvdGD0Y4g0LLQtdGC0LrRgykiCisKKyM6IHd0LXN0YXR1cy5jOjE2NjUKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICLQndCwINCy0LXRgtC60LUgIgorCisjOiB3dC1zdGF0dXMuYzoxNjcyCittc2dpZCAiaW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LUg0L/QtdGA0LXQvNC10YnQtdC90LjQtSDQsiDQv9GA0L7RhtC10YHRgdC1OyDQvdCw0LQgIgorCisjOiB3dC1zdGF0dXMuYzoxNjc0Cittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAi0L/QtdGA0LXQvNC10YnQtdC90LjQtSDQsiDQv9GA0L7RhtC10YHRgdC1OyDQvdCw0LQgIgorCisjOiB3dC1zdGF0dXMuYzoxNjc5Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUQg0L7RgtC00LXQu9GR0L0g0L3QsCAiCisKKyM6IHd0LXN0YXR1cy5jOjE2ODEKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEINC+0YLQtNC10LvRkdC9INC90LDRh9C40L3QsNGPINGBICIKKworIzogd3Qtc3RhdHVzLmM6MTY4NAorbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgItCh0LXQudGH0LDRgSDQvdC4INC90LAg0L7QtNC90L7QuSDQuNC3INCy0LXRgtC+0LoiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDEKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi0J3QsNGH0LDQu9GM0L3Ri9C5INC60L7QvNC80LjRgiIKKworIzogd3Qtc3RhdHVzLmM6MTcwMgorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IgorbXNnc3RyICLQldGJ0LUg0L3QtdGCINC60L7QvNC80LjRgtC+0LIiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTYKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgItCd0LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLIgorCisjOiB3dC1zdGF0dXMuYzoxNzE4Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi0JjQs9C90L7RgNC40YDRg9C10LzRi9C1INGE0LDQudC70YsiCisKKyM6IHd0LXN0YXR1cy5jOjE3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiJS4yZiDRgdC10LrRg9C90LTRiyDQt9Cw0L3Rj9C7INCy0YvQstC+0LQg0YHQv9C40YHQutCwINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIuIMKrc3RhdHVzIC11bm/CuyDQstC+0LfQvNC+0LbQvdC+INC80L7QttC10YIg0YPRgdC60L7RgNC40YLRjCDRjdGC0L4sINC90L4g0LHRg9C00YzRgtC1INCy0L3QuNC80LDRgtC10LvRjNC90YssINC4INC90LUg0LfQsNCx0YPQtNGM0YLQtSDQtNC+0LHQsNCy0LjRgtGMINC90L7QstGL0LUg0YTQsNC50LvRiyDQstGA0YPRh9C90YPRjiAo0YHQvNC+0YLRgNC40YLQtSDCq2dpdCBoZWxwIHN0YXR1c8K7INC00LvRjyDQv9C+0LTRgNC+0LHQvdC+0YHRgtC10LkpLiIKKworIzogd3Qtc3RhdHVzLmM6MTcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICLQndC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyDQvdC1INC/0L7QutCw0LfQsNC90YslcyIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIijQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC+0L/RhtC40Y4gwqstdcK7LCDRh9GC0L7QsdGLINC/0L7QutCw0LfQsNGC0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70YspIgorCisjOiB3dC1zdGF0dXMuYzoxNzM2Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAi0J3QtdGCINC40LfQvNC10L3QtdC90LjQuSIKKworIzogd3Qtc3RhdHVzLmM6MTc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIKK21zZ3N0ciAi0L3QtdGCINC40LfQvNC10L3QtdC90LjQuSDQtNC+0LHQsNCy0LvQtdC90L3Ri9GFINC00LvRjyDQutC+0LzQvNC40YLQsFxuKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgYWRkwrsg0Lgv0LjQu9C4IMKrZ2l0IGNvbW1pdCAtYcK7KVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgItC90LXRgiDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtCx0LDQstC70LXQvdC90YvRhSDQtNC70Y8g0LrQvtC80LzQuNGC0LBcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICLQvdC40YfQtdCz0L4g0L3QtSDQtNC+0LHQsNCy0LvQtdC90L4g0LIg0LrQvtC80LzQuNGCLCDQvdC+INC10YHRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFkZMK7LCDRh9GC0L7QsdGLINC+0YLRgdC70LXQttC40LLQsNGC0Ywg0LjRhSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAi0L3QuNGH0LXQs9C+INC90LUg0LTQvtCx0LDQstC70LXQvdC+INCyINC60L7QvNC80LjRgiwg0L3QviDQtdGB0YLRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRi1xuIgorCisjOiB3dC1zdGF0dXMuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICLQvdC10YfQtdCz0L4g0LrQvtC80LzQuNGC0LjRgtGMICjRgdC+0LfQtNCw0LnRgtC1L9GB0LrQvtC/0LjRgNGD0LnRgtC1INGE0LDQudC70YssINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGFkZMK7LCDRh9GC0L7QsdGLINC+0YLRgdC70LXQttC40LLQsNGC0Ywg0LjRhSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc1NiB3dC1zdGF0dXMuYzoxNzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgItC90LXRh9C10LPQviDQutC+0LzQvNC40YLQuNGC0YxcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICLQvdC10YfQtdCz0L4g0LrQvtC80LzQuNGC0LjRgtGMICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC+0L/RhtC40Y4gwqstdcK7LCDRh9GC0L7QsdGLINC/0L7QutCw0LfQsNGC0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70YspXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhblxuIgorbXNnc3RyICLQvdC10YfQtdCz0L4g0LrQvtC80LzQuNGC0LjRgtGMLCDQvdC10YIg0LjQt9C80LXQvdC10L3QuNC5INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LVcbiIKKworIzogd3Qtc3RhdHVzLmM6MTg3NgorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAi0JXRidC1INC90LXRgiDQutC+0LzQvNC40YLQvtCyINCyIgorCisjOiB3dC1zdGF0dXMuYzoxODgwCittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAo0L3QtdGCINCy0LXRgtC60LgpIgorCisjOiB3dC1zdGF0dXMuYzoxOTExCittc2dpZCAiZGlmZmVyZW50IgorbXNnc3RyICLQvtGC0LvQuNGH0LDQtdGC0YHRjyIKKworIzogd3Qtc3RhdHVzLmM6MTkxMyB3dC1zdGF0dXMuYzoxOTIxCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAi0L/QvtC30LDQtNC4IgorCisjOiB3dC1zdGF0dXMuYzoxOTE2IHd0LXN0YXR1cy5jOjE5MTkKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgItCy0L/QtdGA0LXQtNC4ICIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIKKyM6IHd0LXN0YXR1cy5jOjI0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgJXM6INCjINCy0LDRgSDQtdGB0YLRjCDQvdC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NDkKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgItC6INGC0L7QvNGDINC20LUsINCyINCy0LDRiNC10Lwg0LjQvdC00LXQutGB0LUg0LXRgdGC0Ywg0L3QtdC30LDQutC+0LzQvNC40YfQtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IHd0LXN0YXR1cy5jOjI0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCAlczog0JIg0LLQsNGI0LXQvCDQuNC90LTQtdC60YHQtSDQtdGB0YLRjCDQvdC10LfQsNC60L7QvNC80LjRh9C10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9hZGQuYzoyNQorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs80L7Qv9GG0LjQuD5dIFstLV0gPNGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgC3Qv9GD0YLQuD7igKYiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAi0L3QtdC+0LbQuNC00LDQvdC90YvQuSDRgdGC0LDRgtGD0YEg0YPRgtC40LvQuNGC0Ysg0YHRgNCw0LLQvdC10L3QuNGPICVjIgorCisjOiBidWlsdGluL2FkZC5jOjg5IGJ1aWx0aW4vY29tbWl0LmM6Mjg1Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0L7QsdC90L7QstC70LXQvdC40Lgg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2FkZC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgItGD0LTQsNC70LjRgtGMIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2FkZC5jOjE3NAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICLQndC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQv9C+0YHQu9C1INC+0LHQvdC+0LLQu9C10L3QuNGPINC40L3QtNC10LrRgdCwOiIKKworIzogYnVpbHRpbi9hZGQuYzoyMzQgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTYKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9hZGQuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywgwqslc8K7INC00LvRjyDQt9Cw0L/QuNGB0LguIgorCisjOiBidWlsdGluL2FkZC5jOjI0OQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC/0LDRgtGHIgorCisjOiBidWlsdGluL2FkZC5jOjI1MgorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQuCDQv9Cw0YLRh9CwIgorCisjOiBidWlsdGluL2FkZC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICLQn9GD0YHRgtC+0Lkg0L/QsNGC0YcuINCe0L/QtdGA0LDRhtC40Y8g0L/RgNC10YDQstCw0L3QsC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQuNC80LXQvdC40YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjcwCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICLQodC70LXQtNGD0Y7RidC40LUg0L/Rg9GC0Lgg0LjQs9C90L7RgNC40YDRg9GO0YLRgdGPINC+0LTQvdC40Lwg0LjQtyDQstCw0YjQuNGFINGE0LDQudC70L7QsiAuZ2l0aWdub3JlOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjI5MCBidWlsdGluL2NsZWFuLmM6OTA4IGJ1aWx0aW4vZmV0Y2guYzoxMzcgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMjEgYnVpbHRpbi9wdXNoLmM6NTYwCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDUgYnVpbHRpbi9ybS5jOjI0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgItC/0YDQvtCx0L3Ri9C5INC30LDQv9GD0YHQuiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTMKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90YvQuSDQstGL0LHQvtGAIgorCisjOiBidWlsdGluL2FkZC5jOjI5NCBidWlsdGluL2NoZWNrb3V0LmM6MTM3OSBidWlsdGluL3Jlc2V0LmM6MzA2Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3Ri9C5INCy0YvQsdC+0YAg0LHQu9C+0LrQvtCyIgorCisjOiBidWlsdGluL2FkZC5jOjI5NQorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAi0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGC0LXQutGD0YnQuNC5INGE0LDQudC7INGB0L/QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0Lgg0L/RgNC40LzQtdC90LjRgtGMINC10LPQviIKKworIzogYnVpbHRpbi9hZGQuYzoyOTYKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQtNC+0LHQsNCy0LvQtdC90LjQtSDQuNCz0L3QvtGA0LjRgNGD0LXQvNGL0YUg0LjQvdCw0YfQtSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk3Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0Ywg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9hZGQuYzoyOTgKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgItC/0LXRgNC10L3QvtGA0LzQsNC70LjQt9C40YDQvtCy0LDRgtGMINC60L7QvdGG0Ysg0YHRgtGA0L7QuiAoRU9MKSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIgKNC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQtdGCIC11KSIKKworIzogYnVpbHRpbi9hZGQuYzoyOTkKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0YLQvtC70YzQutC+INGE0LDQutGCLCDRh9GC0L4g0L/Rg9GC0Ywg0LHRg9C00LXRgiDQtNC+0LHQsNCy0LvQtdC9INC/0L7Qt9C20LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAwCittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQuNC3INCy0YHQtdGFINC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINC4INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAzCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQv9GD0YLQuCDRg9C00LDQu9C10L3QvdGL0LUg0LjQtyDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAgKNGC0L7QttC1LCDRh9GC0L4g0LggLS1uby1hbGwpIgorCisjOiBidWlsdGluL2FkZC5jOjMwNQorbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAi0L3QtSDQtNC+0LHQsNCy0LvRj9GC0YwsINGC0L7Qu9GM0LrQviDQvtCx0L3QvtCy0LjRgtGMINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9hZGQuYzozMDYKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHQutCw0YLRjCDRhNCw0LnQu9GLLCDQutC+0YLQvtGA0YvQtSDQvdC1INC80L7Qs9GD0YIg0LHRi9GC0Ywg0LTQvtCx0LDQstC70LXQvdGLINC40Lct0LfQsCDQvtGI0LjQsdC+0LoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA3Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICLRg9C00L7RgdGC0L7QstC10YDQuNGC0YzRgdGPLCDRh9GC0L4g0LTQsNC20LUg0L3QtdC00L7RgdGC0LDRjtGJ0LjQtSDRhNCw0LnQu9GLINCx0YPQtNGD0YIg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDQvdGLINC/0YDQuCAg0L/RgNC+0LHQvdC+0Lwg0LfQsNC/0YPRgdC60LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzA5IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwMQorbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICLQv9C10YDQtdC+0L/RgNC10LTQtdC70LjRgtGMINCx0LjRgiDQstGL0L/QvtC70L3QtdC90LjRjyDQvdCwINGD0LrQsNC30LDQvdC90YvRhSDRhNCw0LnQu9Cw0YUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzExCittc2dpZCAid2FybiB3aGVuIGFkZGluZyBhbiBlbWJlZGRlZCByZXBvc2l0b3J5IgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNCw0YLRjCDQv9GA0Lgg0LTQvtCx0LDQstC70LXQvdC40Lgg0LLRgdGC0YDQvtC10L3QvdC+0LPQviBnaXQg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9hZGQuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSd2ZSBhZGRlZCBhbm90aGVyIGdpdCByZXBvc2l0b3J5IGluc2lkZSB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS5cbiIKKyJDbG9uZXMgb2YgdGhlIG91dGVyIHJlcG9zaXRvcnkgd2lsbCBub3QgY29udGFpbiB0aGUgY29udGVudHMgb2ZcbiIKKyJ0aGUgZW1iZWRkZWQgcmVwb3NpdG9yeSBhbmQgd2lsbCBub3Qga25vdyBob3cgdG8gb2J0YWluIGl0LlxuIgorIklmIHlvdSBtZWFudCB0byBhZGQgYSBzdWJtb2R1bGUsIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJTZWUgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgItCS0Ysg0LTQvtCx0LDQstC40LvQuCDQtNGA0YPQs9C+0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSBnaXQg0LLQvdGD0YLRgNC4INGC0LXQutGD0YnQtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRj1xu0JrQu9C+0L3RiyDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtSDQsdGD0LTRg9GCINGB0L7QtNC10YDQttCw0YLRjCDQstC90YPRgtGA0LXQvdC90LjQuVxu0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQuCDQvdC1INCx0YPQtNGD0YIg0LfQvdCw0YLRjCDQutCw0Log0LXQs9C+INC/0L7Qu9GD0YfQuNGC0YwuXG7QldGB0LvQuCDQstGLINGF0L7RgtC10LvQuCDQtNC+0LHQsNCy0LjRgtGMINC/0L7QtNC80L7QtNGD0LvRjCwg0YLQviDQt9Cw0L/Rg9GB0YLQuNGC0LU6XG5cblx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcblxu0JXRgdC70Lgg0LHRiyDQtNC+0LHQsNCy0LjQu9C4INGN0YLQvtGCINC/0YPRgtGMINC/0L4g0L7RiNC40LHQutC1LCDRgtC+INCy0Ysg0LzQvtC20LXRgtC1INGD0LTQsNC70LjRgtGMINC10LPQvlxu0LjQtyDQuNC90LTQtdC60YHQsCDRgSDQv9C+0LzQvtGJ0YzRjjpcblxuXHRnaXQgcm0gLS1jYWNoZWQgJXNcblxu0JTQu9GPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40Lgg0YHQvNC+0YLRgNC40YLQtSDCq2dpdCBoZWxwIHN1Ym1vZHVsZcK7LiIKKworIzogYnVpbHRpbi9hZGQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi0LTQvtCx0LDQstC70LXQvdC40LUg0LLRgdGC0YDQvtC10L3QvdC+0LPQviBnaXQg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjzogJXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30YPQudGC0LUgLWYsINC10YHQu9C4INCy0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INC00L7QsdCw0LLQuNGC0Ywg0LjRhS5cbiIKKworIzogYnVpbHRpbi9hZGQuYzozNzkKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0L/RgNC4INC00L7QsdCw0LLQu9C10L3QuNC4INGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTkKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEg0LggLXUg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDI2Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAi0J7Qv9GG0LjRjyAtLWlnbm9yZS1taXNzaW5nINC80L7QttC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDRgtC+0LvRjNC60L4g0LLQvNC10YHRgtC1INGBIC0tZHJ5LXJ1biIKKworIzogYnVpbHRpbi9hZGQuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1jaG1vZCBwYXJhbSAnJXMnIG11c3QgYmUgZWl0aGVyIC14IG9yICt4IgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIC0tY2htb2Qgwqslc8K7INC00L7Qu9C20LXQvSDQsdGL0YLRjCAteCDQuNC70LggK3giCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICLQndC40YfQtdCz0L4g0L3QtSDRg9C60LDQt9Cw0L3Qviwg0L3QuNGH0LXQs9C+INC90LUg0LTQvtCx0LDQstC70LXQvdC+LlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAi0JLQvtC30LzQvtC20L3Qviwg0LLRiyDQuNC80LXQu9C4INCyINCy0LjQtNGDIMKrZ2l0IGFkZCAuwrs/XG4iCisKKyM6IGJ1aWx0aW4vYW0uYzozNDgKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0YHRhtC10L3QsNGA0LjQuSDQsNCy0YLQvtGA0YHRgtCy0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIKK21zZ3N0ciAiwqslc8K7INCx0YvQuyDRg9C00LDQu9C10L0g0L/QtdGA0LXRhdCy0LDRgtGH0LjQutC+0LwgYXBwbHlwYXRjaC1tc2ciCisKKyM6IGJ1aWx0aW4vYW0uYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0YHRgtGA0L7QutCwINCy0LLQvtC00LA6IMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQt9Cw0LzQtdGC0LrRgyDQuNC3IMKrJXPCuyDQsiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MzgKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQstGL0L/QvtC70L3QtdC90LjQuCBmc2VlayIKKworIzogYnVpbHRpbi9hbS5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0L/QsNGC0Ycgwqslc8K7IgorCisjOiBidWlsdGluL2FtLmM6NzkxCittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgItCi0L7Qu9GM0LrQviDRgdC10YDQuNGPINC/0LDRgtGH0LXQuSBTdEdJVCDQvNC+0LbQtdGCINCx0YvRgtGMINC/0YDQuNC80LXQvdC10L3QsCDQt9CwINGA0LDQtyIKKworIzogYnVpbHRpbi9hbS5jOjgzOQorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNCw0Y8g0LzQtdGC0LrQsCDQtNCw0YLRiy/QstGA0LXQvNC10L3QuCIKKworIzogYnVpbHRpbi9hbS5jOjg0NCBidWlsdGluL2FtLmM6ODU2Cittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80LDRjyDRgdGC0YDQvtC60LAg0LTQsNGC0YsiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTEKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INGB0LzQtdGJ0LXQvdC40LUg0YfQsNGB0L7QstC+0LPQviDQv9C+0Y/RgdCwIgorCisjOiBidWlsdGluL2FtLmM6OTQ0Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICLQodCx0L7QuSDQvtC/0YDQtdC00LXQu9C10L3QuNGPINGE0L7RgNC80LDRgtCwINC/0LDRgtGH0LAuIgorCisjOiBidWlsdGluL2FtLmM6OTQ5IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQutCw0YLQsNC70L7QsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTQKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30LTQtdC70LjRgtGMINC/0LDRgtGH0Lgg0L3QsCDRh9Cw0YHRgtC4LiIKKworIzogYnVpbHRpbi9hbS5jOjEwODQgYnVpbHRpbi9jb21taXQuYzozNzEKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9hbS5jOjEwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgItCa0L7Qs9C00LAg0LLRiyDRg9GB0YLRgNCw0L3QuNGC0LUg0Y3RgtGDINC/0YDQvtCx0LvQtdC80YMsINC30LDQv9GD0YHRgtC40YLQtSDCqyVzIC0tY29udGludWXCuy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0Y3RgtC+0YIg0L/QsNGC0YcsINGC0L4g0LfQsNC/0YPRgdGC0LjRgtC1IMKrJXMgLS1za2lwwrsuIgorCisjOiBidWlsdGluL2FtLmM6MTEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgItCn0YLQvtCx0Ysg0LLQtdGA0L3Rg9GC0YzRgdGPINC90LAg0L/RgNC10LTRi9C00YPRidGD0Y4g0LLQtdGC0LrRgyDQuCDQvtGB0YLQsNC90L7QstC40YLRjCDQv9GA0LjQvNC10L3QtdC90LjQtSDQuNC30LzQtdC90LXQvdC40LksINC30LDQv9GD0YHRgtC40YLQtSDCqyVzIC0tYWJvcnTCuy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTgzCittc2dpZCAiIgorIlBhdGNoIHNlbnQgd2l0aCBmb3JtYXQ9Zmxvd2VkOyBzcGFjZSBhdCB0aGUgZW5kIG9mIGxpbmVzIG1pZ2h0IGJlIGxvc3QuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjExCittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLQn9Cw0YLRhyDQv9GD0YHRgtC+0LkuIgorCisjOiBidWlsdGluL2FtLmM6MTI3NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICUuKnMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGC0YDQvtC60LAg0LjQtNC10L3RgtC40YTQuNC60LDRhtC40Lg6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvNC80LjRgiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjE0OTUKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICLQkiDRgNC10L/QvtC30LjRgtC+0YDQuNC4INC+0YLRgdGD0YLRgdGC0LLRg9GO0YIg0LTQstC+0LjRh9C90YvQtSDQvtCx0YrQtdC60YLRiywg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSDQtNC70Y8g0L7RgtC60LDRgtCwINC6INGC0YDQtdGF0YXQvtC00L7QstC+0LzRgyDRgdC70LjRj9C90LjRji4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDk3Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfRg9GOINC40L3QtNC10LrRgSDQtNC70Y8g0YDQtdC60L7QvdGB0YLRgNGD0LrRhtC40Lgg0LHQsNC30L7QstC+0LPQviDQtNC10YDQtdCy0LDigKYiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTE2Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAi0JLRiyDQstGA0YPRh9C90YPRjiDQuNC30LzQtdC90Y/Qu9C4INC/0LDRgtGHP1xu0J7QvSDQvdC1INC90LDQutC70LDQtNGL0LLQsNC10YLRgdGPINCx0LXQtyDQvtGI0LjQsdC+0Log0L3QsCDQtNCy0L7QuNGH0L3Ri9C1INC+0LHRitC10LrRgtGLLCDQt9Cw0L/QuNGB0LDQvdC90YvQtSDQsiDQtdCz0L4g0LfQsNCz0L7Qu9C+0LLQutC1LiIKKworIzogYnVpbHRpbi9hbS5jOjE1MjIKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgItCe0YLQutCw0YIg0Log0L/RgNC40LzQtdC90LXQvdC40Y4g0LjQt9C80LXQvdC10L3QuNC5INC6INCx0LDQt9C+0LLQvtC80YMg0LrQvtC80LzQuNGC0YMg0YEg0L/QvtC80L7RidGM0Y4g0YLRgNC10YXRhdC+0LTQvtCy0L7Qs9C+INGB0LvQuNGP0L3QuNGP4oCmIgorCisjOiBidWlsdGluL2FtLmM6MTU0OAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQu9C40YLRjCDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBidWlsdGluL2FtLmM6MTU4MAorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgItC/0YDQuNC80LXQvdC10L3QuNC1INC6INC/0YPRgdGC0L7QuSDQuNGB0YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9hbS5jOjE2MjcgYnVpbHRpbi9hbS5jOjE2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0L/RgNC+0LTQvtC70LbQvdC40YLRjDogJXMg0L3QtSDRgdGD0YnQtdGB0YLQstGD0LXRgiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjQ3Cittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQuNC90YLQtdGA0LDQutGC0LjQstC90L7QtSDQv9C+0LLQtdC00LXQvdC40LUsINCx0LXQtyBzdGRpbiDQv9C+0LTQutC70Y7Rh9C10L3QvdC+0LPQviDQuiDRgtC10YDQvNC40L3QsNC70YMuIgorCisjOiBidWlsdGluL2FtLmM6MTY1MgorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAi0KLQtdC70L4g0LrQvtC80LzQuNGC0LA6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyM6IGJ1aWx0aW4vYW0uYzoxNjYyCittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMPyBbeV0gLSDQtNCwL1tuXSAtINC90LXRgi9bZV0gLSDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjC9bdl0gLSDQv9GA0L7RgdC80L7RgtGA0LXRgtGMINC/0LDRgtGHL1thXSAtINC/0YDQuNC80LXQvdC40YLRjCDQstGB0ZE6ICIKKworIzogYnVpbHRpbi9hbS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICLQmNC90LTQtdC60YEg0LjQt9C80LXQvdGR0L06INC90LXQu9GM0LfRjyDQv9GA0LjQvNC10L3Rj9GC0Ywg0L/QsNGC0YfQuCAo0LjQt9C80LXQvdC10L3QvjogJXMpIgorCisjOiBidWlsdGluL2FtLmM6MTc1MiBidWlsdGluL2FtLmM6MTgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJS4qcyIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LXQvdC40LU6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY5Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICLQndC10YIg0LjQt9C80LXQvdC10L3QuNC5IOKAlCDQn9Cw0YLRhyDRg9C20LUg0L/RgNC40LzQtdC90LXQvS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC40LzQtdC90LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INC90LAgJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NzkKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCcgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE4MjMKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40Lkg4oCUINCy0L7Qt9C80L7QttC90L4sINCy0Ysg0LfQsNCx0YvQu9C4INCy0YvQt9Cy0LDRgtGMIMKrZ2l0IGFkZMK7P1xu0JXRgdC70Lgg0L3QuNGH0LXQs9C+INC90LUg0L7RgdGC0LDQu9C+0YHRjCDQtNC70Y8g0LjQvdC00LXQutGB0LDRhtC40LgsINGC0L4sINGB0LrQvtGA0LXQtSDQstGB0LXQs9C+LCDRh9GC0L4t0YLQviDQtNGA0YPQs9C+0LUg0YPQttC1INGB0LTQtdC70LDQu9C+INGC0LUg0LbQtSDQuNC30LzQtdC90LXQvdC40Y87INCy0L7Qt9C80L7QttC90L4sINCy0LDQvCDRgdC70LXQtNGD0LXRgiDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRjdGC0L7RgiDQv9Cw0YLRhy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODMwCittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyBzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgItCjINCy0LDRgSDQtdGB0YLRjCDQvdC1INGB0LvQuNGC0YvQtSDQv9GD0YLQuCDQsiDQuNC90LTQtdC60YHQtS5cbtCS0Ysg0LTQvtC70LbQvdGLINCy0YvQv9C+0LvQvdC40YLRjCDCq2dpdCBhZGTCuyDQtNC70Y8g0LrQsNC20LTQvtCz0L4g0YTQsNC50LvQsCDRgSDRgNCw0LfRgNC10YjQtdC90L3Ri9C80Lgg0LrQvtC90YTQu9C40LrRgtCw0LzQuCwg0YfRgtC+0LHRiyDQv9C+0LzQtdGC0LjRgtGMINC40YUg0YLQsNC60L7QstGL0LzQuC5cbtCS0Ysg0LzQvtC20LXRgtC1INC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCBybcK7INGBINC40LzQtdC90LXQvCDRhNCw0LnQu9CwLCDRh9GC0L7QsdGLINC/0L7QvNC10YLQuNGC0Ywg0LXQs9C+INC60LDQuiDCq9GD0LTQsNC70LXQvdC+INC40LzQuMK7LiIKKworIzogYnVpbHRpbi9hbS5jOjE5MzcgYnVpbHRpbi9hbS5jOjE5NDEgYnVpbHRpbi9hbS5jOjE5NTMgYnVpbHRpbi9yZXNldC5jOjMyOQorIzogYnVpbHRpbi9yZXNldC5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQvtCx0YrQtdC60YIgwqslc8K7LiIKKworIzogYnVpbHRpbi9hbS5jOjE5ODkKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7Rh9C40YHRgtC40YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDMzCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgItCf0L7RhdC+0LbQtSwg0YfRgtC+INCy0Ysg0L/QtdGA0LXQvNC10YHRgtC40LvQuCBIRUFEINGBINC80L7QvNC10L3RgtCwINC/0L7RgdC70LXQtNC90LXQuSDQvtGI0LjQsdC60Lgg0LLRi9C/0L7Qu9C90LXQvdC40Y8gwqthbcK7Llxu0J/QtdGA0LXQvNC+0YLQutCwINC90LAgT1JJR19IRUFEINC90LUg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyIKKworIzogYnVpbHRpbi9hbS5jOjIxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8gLS1wYXRjaC1mb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MjE2NgorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzzQvtC/0YbQuNC4Pl0gWyg8bWJveD4gfCA8TWFpbGRpcj4p4oCmXSIKKworIzogYnVpbHRpbi9hbS5jOjIxNjcKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs80L7Qv9GG0LjQuD5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTczCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgItC30LDQv9GD0YHRgtC40YLRjCDQsiDQuNC90YLQtdGA0LDQutGC0LjQstC90L7QvCDRgNC10LbQuNC80LUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc1Cittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgItC40YHRgtC+0YDQuNGH0LXRgdC60LDRjyDQvtC/0YbQuNGPIOKAlCDQvdC40YfQtdCz0L4g0L3QtSDQtNC10LvQsNC10YIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc3Cittc2dpZCAiYWxsb3cgZmFsbCBiYWNrIG9uIDN3YXkgbWVyZ2luZyBpZiBuZWVkZWQiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQvtGC0LrQsNGC0LjRgtGM0YHRjyDQuiDRgtGA0LXRhdGF0L7QtNC+0LLQvtC80YMg0YHQu9C40Y/QvdC40Y4sINC10YHQu9C4INC90YPQttC90L4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc4IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU4CisjOiBidWlsdGluL3JlcGFjay5jOjMwNiBidWlsdGluL3N0YXNoLmM6ODA1Cittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgItGC0LjRhdC40Lkg0YDQtdC20LjQvCIKKworIzogYnVpbHRpbi9hbS5jOjIxODAKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINGB0YLRgNC+0LrRgyBTaWduZWQtb2ZmLWJ5INC6INGB0L7QvtCx0YnQtdC90LjRjiDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9hbS5jOjIxODMKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAi0L/QtdGA0LXQutC+0LTQuNGA0L7QstCw0YLRjCDQsiB1dGY4ICjQv9C+INGD0LzQvtC70YfQsNC90LjRjikiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg1Cittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDRhNC70LDQsyAtayDQsiBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg3Cittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDRhNC70LDQsyAtYiDQsiBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg5Cittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDRhNC70LDQsyAtbSDQsiBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTkxCittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDRhNC70LDQsyAtLWtlZXAtY3Ig0LIgZ2l0LW1haWxzcGxpdCDQtNC70Y8g0YTQvtGA0LzQsNGC0LAgbWJveCIKKworIzogYnVpbHRpbi9hbS5jOjIxOTQKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAi0L3QtSDQv9C10YDQtdC00LDQstCw0YLRjCAtLWtlZXAtY3Ig0YTQu9Cw0LMg0LIgZ2l0LW1haWxzcGxpdCDQstC90LUg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCIGFtLmtlZXBjciIKKworIzogYnVpbHRpbi9hbS5jOjIxOTcKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgItC+0LHRgNC10LfQsNGC0Ywg0LLRgdC1INC00L4g0YHRgtGA0L7QutC4INC+0LHRgNC10LfQutC4IgorCisjOiBidWlsdGluL2FtLmM6MjE5OSBidWlsdGluL2FtLmM6MjIwMiBidWlsdGluL2FtLmM6MjIwNSBidWlsdGluL2FtLmM6MjIwOAorIzogYnVpbHRpbi9hbS5jOjIyMTEgYnVpbHRpbi9hbS5jOjIyMTQgYnVpbHRpbi9hbS5jOjIyMTcgYnVpbHRpbi9hbS5jOjIyMjAKKyM6IGJ1aWx0aW4vYW0uYzoyMjI2Cittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDQtdCz0L4g0LIgZ2l0LWFwcGx5IgorCisjOiBidWlsdGluL2FtLmM6MjIxNiBidWlsdGluL2NvbW1pdC5jOjEzNDggYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcxCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQgYnVpbHRpbi9ncmVwLmM6ODc5IGJ1aWx0aW4vbWVyZ2UuYzoyNDcKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1OCBidWlsdGluL3B1bGwuYzoyMTcgYnVpbHRpbi9yZWJhc2UuYzoxNDEyCisjOiBidWlsdGluL3JlcGFjay5jOjMxNyBidWlsdGluL3JlcGFjay5jOjMyMSBidWlsdGluL3JlcGFjay5jOjMyMworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MSBidWlsdGluL3Nob3ctcmVmLmM6MTcyIGJ1aWx0aW4vdGFnLmM6Mzk3CisjOiBwYXJzZS1vcHRpb25zLmg6MTQxIHBhcnNlLW9wdGlvbnMuaDoxNjIgcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIyIGJ1aWx0aW4vYnJhbmNoLmM6NjUzIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzgKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NCBidWlsdGluL3RhZy5jOjQzMSBidWlsdGluL3ZlcmlmeS10YWcuYzozOQorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCIgorCisjOiBidWlsdGluL2FtLmM6MjIyMworbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCLCDQsiDQutC+0YLQvtGA0L7QvCDQvdCw0YXQvtC00Y/RgtGB0Y8g0L/QsNGC0YfQuCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjkKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgItC/0LXRgNC10L7Qv9GA0LXQtNC10LvQuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC+0LEg0L7RiNC40LHQutC1LCDQtdGB0LvQuCDQvdC1INGD0LTQsNC70L7RgdGMINC90LDQu9C+0LbQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBidWlsdGluL2FtLmM6MjIzMQorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgItC/0YDQvtC00L7Qu9C20LjRgtGMINC/0YDQuNC80LXQvdC10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQv9C+0YHQu9C1INGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LjQu9C40LrRgtCwIgorCisjOiBidWlsdGluL2FtLmM6MjIzNAorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICLRgdC40L3QvtC90LjQvCDQtNC70Y8gLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9hbS5jOjIyMzcKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHRgtC40YLRjCDRgtC10LrRg9GJ0LjQuSDQv9Cw0YLRhyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDAKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICLQstC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0L7RgNC40LPQuNC90LDQu9GM0L3Rg9GOINCy0LXRgtC60YMg0Lgg0L7RgtC80LXQvdC40YLRjCDQvtC/0LXRgNCw0YbQuNGOINC/0YDQuNC80LXQvdC10L3QuNGPINC40LfQvNC10L3QtdC90LjQuS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQzCittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI0NgorbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUwCittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICLRgdC+0LLRgNCw0YLRjCDQviDQtNCw0YLQtSDQutC+0LzQvNC40YLQtdGA0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyCittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0LXQutGD0YnQtdC1INCy0YDQtdC80Y8g0LrQsNC6INCy0YDQtdC80Y8g0LDQstGC0L7RgNGB0YLQstCwIgorCisjOiBidWlsdGluL2FtLmM6MjI1NCBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTQ5MQorIzogYnVpbHRpbi9tZXJnZS5jOjI4MiBidWlsdGluL3B1bGwuYzoxOTIgYnVpbHRpbi9yZWJhc2UuYzo0ODkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MyBidWlsdGluL3JldmVydC5jOjExNiBidWlsdGluL3RhZy5jOjQxMgorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAia2V5LWlkIgorCisjOiBidWlsdGluL2FtLmM6MjI1NSBidWlsdGluL3JlYmFzZS5jOjQ5MCBidWlsdGluL3JlYmFzZS5jOjE0NTQKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICLQv9C+0LTQv9C40YHQsNGC0Ywg0LrQvtC80LzQuNGC0Ysg0YEg0L/QvtC80L7RidGM0Y4gR1BHIgorCisjOiBidWlsdGluL2FtLmM6MjI1OAorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIo0LLQvdGD0YLRgNC10L3QvdC10LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0LTQu9GPIGdpdC1yZWJhc2UpIgorCisjOiBidWlsdGluL2FtLmM6MjI3NgorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAi0J7Qv9GG0LjRjyAtYi8tLWJpbmFyeSDRg9C20LUg0LTQvtC70LPQvtC1INCy0YDQtdC80Y8g0L3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDQtdGCINC4INCx0YPQtNC10YIg0YPQtNCw0LvQtdC90LAg0YEg0YHQu9C10LTRg9GO0YnQuNGFINCy0LXRgNGB0LjRj9GFIEdpdC4g0J/QvtC20LDQu9GD0LnRgdGC0LAsINC90LUg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQtdC1LiIKKworIzogYnVpbHRpbi9hbS5jOjIyODMKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgItGB0LHQvtC5INGH0YLQtdC90LjRjyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9hbS5jOjIyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICLQv9GA0LXQtNGL0LTRg9GJ0LjQuSDQutCw0YLQsNC70L7QsyDQv9C10YDQtdC80LXRidC10L3QuNGPICVzINC10YnQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiwg0L3QviDQv9C10YDQtdC00LDQvSBtYm94LiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgItCd0LDQudC00LXQvSDQt9Cw0LHRi9GC0YvQuSDQutCw0YLQsNC70L7QsyAlcy5cbtCY0YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgYW0gLS1hYm9ydMK7LCDRh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC10LPQvi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI4Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAi0J7Qv9C10YDQsNGG0LjRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0L7QsiDQvdC1INCyINC/0YDQvtGG0LXRgdGB0LUg0LLRi9C/0L7Qu9C90LXQvdC40Y8sINC90LUg0L/RgNC+0LTQvtC70LbQsNC10LwuIgorCisjOiBidWlsdGluL2FwcGx5LmM6OAorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPNC+0L/RhtC40Lg+XSBbPNC/0LDRgtGHPuKApl0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YTQsNC50Lsg0LDRgNGF0LjQstCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10L3QsNC/0YDQsNCy0LjRgtGMINCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHQtdC3IFVSTCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgYXJjaGl2ZTog0L7QttC40LTQsNC10YLRgdGPIEFDSy9OQUssINC/0L7Qu9GD0YfQtdC9INC/0LDQutC10YIg0YHQsdGA0L7RgdCwINCx0YPRhNC10YDQsCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INC+0YjQuNCx0LrQsCDQv9GA0L7RgtC+0LrQvtC70LAiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiDQvtC20LjQtNCw0LvRgdGPINGB0LHRgNC+0YEg0LHRg9GE0LXRgNCwIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPGJhZF90ZXJtPiA8Z29vZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0td3JpdGUtdGVybXMgPNC/0LvQvtGF0L7QtS3QvtC/0YDQtdC00LXQu9C10L3QuNC1PiA80YXQvtGA0L7RiNC10LUt0L7Qv9GA0LXQtNC10LvQtdC90LjQtT4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjUKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNworbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGdvb2RfdGVybT4gPGJhZF90ZXJtPiBbPHRlcm0+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgIgorIi0tdGVybS1uZXddIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAiCisiLS10ZXJtLXtuZXcsYmFkfT08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSAiCisiWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRlcm0iCittc2dzdHIgIsKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQvtC/0YPRgdGC0LjQvNGL0Lwg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdC8IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgdXNlIHRoZSBidWlsdGluIGNvbW1hbmQgJyVzJyBhcyBhIHRlcm0iCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLRgdGC0YDQvtC10L3QvdGD0Y4g0LrQvtC80LDQvdC00YMgwqslc8K7INC60LDQuiDQvtC/0YDQtdC00LXQu9C10L3QuNC1IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgdGVybSAnJXMnIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjQt9C80LXQvdC40YLRjCDQt9C90LDRh9C10L3QuNC1INC+0L/RgNC10LTQtdC70LXQvdC40Y8gwqslc8K7IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTExCittc2dpZCAicGxlYXNlIHVzZSB0d28gZGlmZmVyZW50IHRlcm1zIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC00LLQsCDRgNCw0LfQvdGL0YUg0L7Qv9GA0LXQtNC10LvQtdC90LjRjyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyBCSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyVzJy4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IG9wZW4gdGhlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICVzLyVzIGJpc2VjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMjkKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAi0JLRiyDRg9Cy0LXRgNC10L3RiyBbWSAtINC00LAvbiAtINC90LXRgl0/ICIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM3NgorbXNnaWQgIm5vIHRlcm1zIGRlZmluZWQiCittc2dzdHIgItC+0L/RgNC10LTQtdC70LXQvdC40Y8g0L3QtSDQt9Cw0LTQsNC90YsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBvcHRpb246ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTEKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NDcKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LLRi9C/0L7Qu9C90LjRgtGMINC00LLQvtC40YfQvdGL0Lkg0L/QvtC40YHQuiDQvdCwINC00LXRgNC10LLQtSDQv9C+0YHQu9C1IGNnLXNlZWsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTAKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MjcKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICLQstGL0L/QvtC70L3QuNGC0YwgwqtnaXQgYmlzZWN0IG5leHTCuyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYyOQorbXNnaWQgIndyaXRlIHRoZSB0ZXJtcyB0byAuZ2l0L0JJU0VDVF9URVJNUyIKK21zZ3N0ciAi0LfQsNC/0LjRgdCw0YLRjCDQvtC/0YDQtdC00LXQu9C10L3QuNGPINCyIC5naXQvQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMxCittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLQvtGH0LjRgdGC0LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QvtC40YHQutCwIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgItC/0YDQvtCy0LXRgNC40YLRjCDQvtC20LjQtNCw0LXQvNGL0LUg0YDQtdC00LDQutGG0LjQuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MworbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDUKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0YwgQklTRUNUX0hFQUQg0LLQvNC10YHRgtC+INC/0LXRgNC10YXQvtC00LAg0L3QsCDRgtC10LrRg9GJ0LjQuSDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDkKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjY2Cittc2dpZCAiLS13cml0ZS10ZXJtcyByZXF1aXJlcyB0d28gYXJndW1lbnRzIgorbXNnc3RyICItLXdyaXRlLXRlcm1zINGC0YDQtdCx0YPQtdGCINGD0LrQsNC30LDQvdC40Y8g0LTQstGD0YUg0L/QsNGA0LDQvNC10YLRgNC+0LIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzAKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlINC90LUg0YLRgNC10LHRg9C10YIg0YPQutCw0LfQsNC90LjRjyDQv9Cw0YDQsNC80LXRgtGA0L7QsiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NworbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjgxCittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4NworbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjkzCittc2dpZCAiLS1iaXNlY3QtbmV4dC1jaGVjayByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTkKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjMyCittc2dpZCAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8cmV2LW9wdHM+XSBbPHJldj5dIFstLV0gPGZpbGU+IgorbXNnc3RyICJnaXQgYmxhbWUgWzzQvtC/0YbQuNC4Pl0gWzzQvtC/0YbQuNC4LdGA0LXQtNCw0LrRhtC40Lg+XSBbPNGA0LXQtNCw0LrRhtC40Y8+XSBbLS1dIDzRhNCw0LnQuz4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNworbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI80L7Qv9GG0LjQuC1yZXYtbGlzdD4g0LTQvtC60YPQvNC10L3RgtC40YDQvtCy0LDQvdGLINCyIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RpbmcgYSBjb2xvcjogJXMiCittc2dzdHIgItC+0LbQuNC00LDQtdGC0YHRjyDRhtCy0LXRgjogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTQKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgItC00L7Qu9C20L3QviDQt9Cw0LrQsNC90YfQuNCy0LDRgtGM0YHRjyDQvdCwINGG0LLQtdGCIgorCisjOiBidWlsdGluL2JsYW1lLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MTkKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk0Cittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQt9Cw0L/QuNGB0Lgg0LDQstGC0L7RgNGB0YLQstCwINC/0L7RgdGC0LXQv9C10L3QvdC+LCDQsiDQv9GA0L7RhtC10YHRgdC1INC90LDRhdC+0LbQtNC10L3QuNGPIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk1Cittc2dpZCAiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCBTSEEtMSDQtNC70Y8g0LrQvtC80LzQuNGC0L7Qsiwg0L3QtSDQstGF0L7QtNGP0YnQuNGFINCyINCz0YDQsNC90LjRhtGLINC30LDQv9GA0L7RgdCwICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J3QtSDQstC+0YHQv9GA0LjQvdC40LzQsNGC0Ywg0LrQvtGA0L3QtdCy0YvQtSDQutC+0LzQvNC40YLRiyDQutCw0Log0LPRgNCw0L3QuNGH0L3Ri9C1ICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc5NworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YHRgtCw0YLQuNGB0YLQuNC60YMg0YDQsNGB0YXQvtC00L7QsiDQvdCwINCy0YvQv9C+0LvQvdC10L3QuNC1INC30LDQv9GA0L7RgdCwIgorCisjOiBidWlsdGluL2JsYW1lLmM6Nzk4Cittc2dpZCAiRm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLQn9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQstGL0LLQvtC00LjRgtGMINC/0YDQvtCz0YDQtdGB0YEg0LLRi9C/0L7Qu9C90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3OTkKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQvtGG0LXQvdC60YMg0LTQu9GPINC30LDQv9C40YHQtdC5INCw0LLRgtC+0YDRgdGC0LLQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC+0YDQuNCz0LjQvdCw0LvRjNC90L7QtSDQuNC80Y8g0YTQsNC50LvQsCAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwMQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQvtGA0LjQs9C40L3QsNC70YzQvdGL0LUg0L3QvtC80LXRgNCwINGB0YLRgNC+0LogKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGC0LrQu9GO0YfQtdC90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODAyCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQsiDRhNC+0YDQvNCw0YLQtSDQtNC70Y8g0L/RgNC+0LPRgNCw0LzQvNC90L7Qs9C+INGA0LDQt9Cx0L7RgNCwIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODAzCittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINCyINC80LDRiNC40L3QvtGH0LjRgtCw0LXQvNC+0Lwg0YTQvtGA0LzQsNGC0LUsINGBINC/0L7RgdGC0YDQvtGH0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC10Lkg0L4g0LrQvtC80LzQuNGC0LUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDQKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQsNC60L7QuSDQttC1INGE0L7RgNC80LDRgiDQstGL0LLQvtC00LAsINC60LDQuiDQuCBnaXQtYW5ub3RhdGUgKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGC0LrQu9GO0YfQtdC90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODA1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC90LXQvtCx0YDQsNCx0L7RgtCw0L3QvdGL0LUg0LLRgNC10LzQtdC90L3Ri9C1INC80LXRgtC60LggKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGC0LrQu9GO0YfQtdC90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODA2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC00LvQuNC90L3Ri9C5IFNIQTEg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQvtC80LzQuNGC0LAgKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGC0LrQu9GO0YfQtdC90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODA3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDQuNC80Y8g0LDQstGC0L7RgNCwINC4INCy0YDQtdC80LXQvdC90YvQtSDQvNC10YLQutC4ICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgwOAorbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQv9C+0YfRgtGDINCw0LLRgtC+0YDQsCDQstC80LXRgdGC0L4g0LjQvNC10L3QuCAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46INC+0YLQutC70Y7Rh9C10L3QvikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MDkKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAi0JjQs9C90L7RgNC40YDQvtCy0LDRgtGMINGA0LDQt9C70LjRh9C40Y8g0LIg0L/RgNC+0LHQtdC70LDRhSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgxMAorbXNnaWQgImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgxMQorbXNnaWQgImNvbG9yIGxpbmVzIGJ5IGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODE4Cittc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGN0LrRgdC/0LXRgNC10LzQtdC90YLQsNC70YzQvdGD0Y4g0Y3QstGA0LjRgdGC0LjQutGDLCDRh9GC0L7QsdGLINGD0LvRg9GH0YjQuNGC0Ywg0YTQsNC50LvRiyDRgdC/0LjRgdC60LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIwCittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICLQn9C+0YLRgNCw0YLQuNGC0Ywg0LHQvtC70YzRiNC1INCy0YDQtdC80LXQvdC4LCDQtNC70Y8g0L3QsNGF0L7QttC00LXQvdC40Y8g0LvRg9GH0YjQuNGFINGB0L7QstC/0LDQtNC10L3QuNC5IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIxCittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YDQtdC00LDQutGG0LjQuCDQuNC3IDzRhNCw0LnQu9CwPiDQstC80LXRgdGC0L4g0LLRi9C30L7QstCwIGdpdC1yZXYtbGlzdCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdC+0LTQtdGA0LbQuNC80L7QtSA80YTQsNC50LvQsD4g0LrQsNC6INGE0LjQvdCw0LvRjNC90YvQuSDRgdC90LjQvNC+0LoiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjMgYnVpbHRpbi9ibGFtZS5jOjgyNAorbXNnaWQgInNjb3JlIgorbXNnc3RyICLQvNC40L0t0LTQu9C40L3QsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyMworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgItCd0LDQudGC0Lgg0LrQvtC/0LjRgNC+0LLQsNC90LjQtSDRgdGC0YDQvtC6INCyINC/0YDQtdC00LXQu9Cw0YUg0Lgg0LzQtdC20LTRgyDRhNCw0LnQu9Cw0LzQuCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyNAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgItCd0LDQudGC0Lgg0L/QtdGA0LXQvNC10YnQtdC90LjRjyDRgdGC0YDQvtC6INCyINC/0YDQtdC00LXQu9Cw0YUg0Lgg0LzQtdC20LTRgyDRhNCw0LnQu9Cw0LzQuCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjgyNQorbXNnaWQgIm4sbSIKK21zZ3N0ciAi0L3QsNGH0LDQu9C+LNC60L7QvdC10YYiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjUKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAi0J7QsdGA0LDQsdC+0YLQsNGC0Ywg0YLQvtC70YzQutC+INGB0YLRgNC+0LrQuCDQsiDQtNC40LDQv9Cw0LfQvtC90LUg0L3QsNGH0LDQu9C+LNC60L7QvdC10YYsINC90LDRh9C40L3QsNGPINGBIDEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NzYKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICItLXByb2dyZXNzINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBIC0taW5jcmVtZW50YWwg0LjQu9C4INC80LDRiNC40L3QvtGH0LjRgtCw0LXQvNGL0LwgKHBvcmNlbGFpbikg0YTQvtGA0LzQsNGC0L7QvCIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUKKyMuIG1heGltdW0gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4KKyMuICJnaXQgYmxhbWUiIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExCisjLiBtb250aHMgYWdvIiwgd2hpY2ggdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdAorIy4gYW1vbmcgdmFyaW91cyBmb3JtcyBvZiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQKKyMuIHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvciBmZXdlciBkaXNwbGF5CisjLiBjb2x1bW5zLgorIzogYnVpbHRpbi9ibGFtZS5jOjkyNworbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgIjQg0LPQvtC00LAg0LggMTEg0LzQtdGB0Y/RhtC10LIg0L3QsNC30LDQtCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gItGE0LDQudC7ICVzINGB0L7QtNC10YDQttC40YIg0YLQvtC70YzQutC+ICVsdSDRgdGC0YDQvtC60YMiCittc2dzdHJbMV0gItGE0LDQudC7ICVzINGB0L7QtNC10YDQttC40YIg0YLQvtC70YzQutC+ICVsdSDRgdGC0YDQvtC60LgiCittc2dzdHJbMl0gItGE0LDQudC7ICVzINGB0L7QtNC10YDQttC40YIg0YLQvtC70YzQutC+ICVsdSDRgdGC0YDQvtC6IgorbXNnc3RyWzNdICLRhNCw0LnQuyAlcyDRgdC+0LTQtdGA0LbQuNGCINGC0L7Qu9GM0LrQviAlbHUg0YHRgtGA0L7QutC4IgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3NworbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgItCf0YDQvtGB0LzQvtGC0YAg0LDQstGC0L7RgNC+0LIg0YHRgtGA0L7QuiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPNC+0L/RhtC40Lg+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMwCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzzQvtC/0YbQuNC4Pl0gWy1sXSBbLWZdIDzQuNC80Y8t0LLQtdGC0LrQuD4gWzzRgtC+0YfQutCwLdC90LDRh9Cw0LvQsD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs80L7Qv9GG0LjQuD5dIFstcl0gKC1kIHwgLUQpIDzQuNC80Y8t0LLQtdGC0LrQuD7igKYiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzQvtC/0YbQuNC4Pl0gKC1tIHwgLU0pIFs80YHRgtCw0YDQsNGPLdCy0LXRgtC60LA+XSA80L3QvtCy0LDRjy3QstC10YLQutCwPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1jIHwgLUMpIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPNC+0L/RhtC40Lg+XSAoLWMgfCAtQykgWzzRgdGC0LDRgNCw0Y8t0LLQtdGC0LrQsD5dIDzQvdC+0LLQsNGPLdCy0LXRgtC60LA+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPNC+0L/RhtC40Lg+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzozNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCittc2dzdHIgImdpdCBicmFuY2ggWzzQvtC/0YbQuNC4Pl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAi0YPQtNCw0LvQtdC90LjQtSDQstC10YLQutC4IMKrJXPCuywg0LrQvtGC0L7RgNCw0Y8g0LHRi9C70LAg0YHQu9C40YLQsCDRgVxuICAgICAgICAgwqslc8K7LCDQvdC+INC90LUg0YHQu9C40YLQsCDRgSBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70LXQvdC40LUg0LLQtdGC0LrQuCDCqyVzwrssINC60L7RgtC+0YDQsNGPINC10YnQtSDQvdC1INGB0LvQuNGC0LAg0YFcbiAgICAgICAgIMKrJXPCuywg0YXQvtGC0Y8g0YPQttC1INGB0LvQuNGC0LAg0YEgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC+0LHRitC10LrRgiDQutC+0LzQvNC40YLQsCDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INC90LUg0YHQu9C40YLQsCDQv9C+0LvQvdC+0YHRgtGM0Y4uXG7QldGB0LvQuCDQstGLINGD0LLQtdGA0LXQvdGLLCDRh9GC0L4g0YXQvtGC0LjRgtC1INC10LUg0YPQtNCw0LvQuNGC0YwsINC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBicmFuY2ggLUQgJXPCuy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg2Cittc2dpZCAiVXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINGE0LDQudC7INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTcKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INC60LvRjtGH0LggLWEg0LggLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIzCittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0L7QsdGK0LXQutGCINC60L7QvNC80LjRgtCwINC00LvRjyBIRUFEIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgItCd0LXQu9GM0LfRjyDRg9C00LDQu9C40YLRjCDQstC10YLQutGDIMKrJXPCuyDRgi7Qui4g0L7QvdCwINCw0LrRgtC40LLQvdCwINC90LAgwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi0LLQvdC10YjQvdGP0Y8g0L7RgtGB0LvQtdC20LjQstCw0LXQvNCw0Y8g0LLQtdGC0LrQsCDCqyVzwrsg0L3QtSDQvdCw0LnQtNC10L3QsC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgItCy0LXRgtC60LAgwqslc8K7INC90LUg0L3QsNC50LTQtdC90LAuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgItCe0YjQuNCx0LrQsCDRg9C00LDQu9C10L3QuNGPINCy0L3QtdGI0L3QtdC5INC+0YLRgdC70LXQttC40LLQsNC10LzQvtC5INCy0LXRgtC60Lggwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGD0LTQsNC70LXQvdC40Y8g0LLQtdGC0LrQuCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAi0JLQvdC10YjQvdGP0Y8g0L7RgtGB0LvQtdC20LjQstCw0LXQvNCw0Y8g0LLQtdGC0LrQsCAlcyDRg9C00LDQu9C10L3QsCAo0LHRi9C70LAgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAi0JLQtdGC0LrQsCAlcyDRg9C00LDQu9C10L3QsCAo0LHRi9C70LAgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyMSBidWlsdGluL3RhZy5jOjYwCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINGB0YLRgNC+0LrRgyDRhNC+0YDQvNCw0YLQsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTIKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAi0J/RgNC+0LjQt9Cy0L7QtNC40YLRgdGPINC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0LLQtdGC0LrQuCAlcyDQvdCwICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgItCf0YDQvtC40LfQstC+0LTQuNGC0YHRjyDQtNCy0L7QuNGH0L3Ri9C5INC/0L7QuNGB0Log0LIg0LLQtdGC0LrQtSAlcyDQvdCwICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ5NAorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0YHQutC+0L/QuNGA0L7QstCw0YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YLQutGDLCDQtdGB0LvQuCDQstGLINC90LUg0L3QsNGF0L7QtNC40YLQtdGB0Ywg0L3QuCDQvdCwINC+0LTQvdC+0Lkg0LjQtyDQstC10YLQvtC6LiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0OTYKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgywg0LXRgdC70Lgg0LLRiyDQvdC1INC90LDRhdC+0LTQuNGC0LXRgdGMINC90Lgg0L3QsCDQvtC00L3QvtC5INC40Lcg0L3QuNGFLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0LUg0LjQvNGPINCy0LXRgtC60Lg6IMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MzQKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAi0KHQsdC+0Lkg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjRjyDQstC10YLQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUzNgorbXNnaWQgIkJyYW5jaCBjb3B5IGZhaWxlZCIKK21zZ3N0ciAi0KHQsdC+0Lkg0LrQvtC/0LjRgNC+0LLQsNC90LjRjyDQstC10YLQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQodC+0LfQtNCw0L3QsCDQutC+0L/QuNGPINC90LXQv9GA0LDQstC40LvRjNC90L4g0L3QsNC30LLQsNC90L3QvtC5INCy0LXRgtC60Lggwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LAg0L3QtdC/0YDQsNCy0LjQu9GM0L3QviDQvdCw0LfQstCw0L3QvdCw0Y8g0LLQtdGC0LrQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgItCS0LXRgtC60LAg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LAg0LIgJXMsINC90L4gSEVBRCDQvdC1INC+0LHQvdC+0LLQu9C10L0hIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1OAorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi0JLQtdGC0LrQsCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QsCwg0L3QviDQv9GA0L7QuNC30L7RiNC10Lsg0YHQsdC+0Lkg0L7QsdC90L7QstC70LXQvdC40Y8g0YTQsNC50LvQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTYwCittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgItCS0LXRgtC60LAg0YHQutC+0L/QuNGA0L7QstCw0L3QsCwg0L3QviDQv9GA0L7QuNC30L7RiNC10Lsg0YHQsdC+0Lkg0L7QsdC90L7QstC70LXQvdC40Y8g0YTQsNC50LvQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iCittc2dzdHIgItCY0LfQvNC10L3QuNGC0LUg0L7Qv9C40YHQsNC90LjQtSDQtNC70Y8g0LLQtdGC0LrQuDpcbiAgJXNcbtCh0YLRgNC+0LrQuCwg0L3QsNGH0LjQvdCw0Y7RidC40LXRgdGPINGBIMKrJWPCuyDQsdGD0LTRg9GCINCy0YvRgNC10LfQsNC90YsuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjEwCittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICLQntCx0YnQuNC1INC/0LDRgNCw0LzQtdGC0YDRiyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTIKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0YXQtdGILdGB0YPQvNC80YMg0Lgg0YLQtdC80YMsINGD0LrQsNC20LjRgtC1INC00LLQsNC20LTRiyDQtNC70Y8g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxMworbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3Ri9C1INGB0L7QvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTQKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAi0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0YDQtdC20LjQvCDQvtGC0YHQu9C10LbQuNCy0LDQvdC40Y8g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC4ICjRgdC8LiBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE2Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAi0L3QtSDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOCBidWlsdGluL3JlYmFzZS5jOjQ4NQorbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICLQstGL0YjQtdGB0YLQvtGP0YnQsNGPIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAi0LjQt9C80LXQvdC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjE5Cittc2dpZCAiVW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgItCj0LHRgNCw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YbQstC10YLQvdC+0Lkg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjEKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLQstGL0L/QvtC70L3QuNGC0Ywg0LTQtdC50YHRgtCy0LjRjyDQvdCwINC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINCy0L3QtdGI0L3QuNGFINCy0LXRgtC60LDRhSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjMgYnVpbHRpbi9icmFuY2guYzo2MjUKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDQstC10YLQvtC6LCDQutC+0YLQvtGA0YvQtSDRgdC+0LTQtdGA0LbQsNGCINC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjQgYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDQstC10YLQvtC6LCDQutC+0YLQvtGA0YvQtSDQvdC1INGB0L7QtNC10YDQttCw0YIg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyOQorbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgItCh0L/QtdGG0LjRhNC40YfQvdGL0LUg0LTQu9GPIGdpdC1icmFuY2gg0LTQtdC50YHRgtCy0LjRjzoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMwCittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YHQv9C40YHQvtC6INC4INC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINC4INC70L7QutCw0LvRjNC90YvRhSDQstC10YLQvtC6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMgorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDQv9C+0LvQvdC+0YHRgtGM0Y4g0YHQu9C40YLRg9GOINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMzCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0LLQtdGC0LrRgyAo0LTQsNC20LUg0L3QuNC60YPQtNCwINC90LUg0YHQu9C40YLRg9GOKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAi0L/QtdGA0LXQvNC10YHRgtC40YLRjC/Qv9C10YDQtdC40LzQtdC90L7QstCw0YLRjCDQstC10YLQutC4INC4INC10LUg0LbRg9GA0L3QsNC7INGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzUKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLQv9C10YDQtdC80LXRgdGC0LjRgtGML9C/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINCy0LXRgtC60YMsINC00LDQttC1INC10YHQu9C4INGG0LXQu9C10LLQvtC1INC40LzRjyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM2Cittc2dpZCAiY29weSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAi0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQstC10YLQutGDINC4INC10ZEg0LbRg9GA0L3QsNC7INGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJjb3B5IGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgItGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0LLQtdGC0LrRgywg0LTQsNC20LUg0LXRgdC70Lgg0YbQtdC70LXQstC+0LUg0LjQvNGPINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgdC/0LjRgdC+0Log0LjQvNC10L0g0LLQtdGC0L7QuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzkKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0LbRg9GA0L3QsNC7INGB0YHRi9C70L7QuiDQstC10YLQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLQuNC30LzQtdC90LjRgtGMINC+0L/QuNGB0LDQvdC40LUg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QvtC1INGB0L7Qt9C00LDQvdC40LUsINC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0LjQu9C4INGD0LTQsNC70LXQvdC40LUg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0YHQu9C40YLRi9GFINCy0LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDQvdC1INGB0LvQuNGC0YvRhSDQstC10YLQvtC6IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgdC/0LjRgdC+0Log0LLQtdGC0L7QuiDQv9C+INGB0YLQvtC70LHRhtCw0LwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ5IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAib2JqZWN0IgorbXNnc3RyICLQvtCx0YrQtdC60YIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDQstC10YLQvtC6LCDQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQviDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAi0YHQvtGA0YLQuNGA0L7QstC60LAg0Lgg0YTQuNC70YzRgtGA0LDRhtC40Y8g0L3QtSDQt9Cw0LLQuNGB0Y/RgiDQvtGCINGA0LXQs9C40YHRgtGA0LAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzIKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM5Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGE0L7RgNC80LDRgiDQtNC70Y8g0LLRi9Cy0L7QtNCwIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY3NiBidWlsdGluL2Nsb25lLmM6NzQ4Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIkhFQUQg0L3QtSDQvdCw0LnQtNC10L0g0LIgcmVmcy9oZWFkcyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzAwCittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiDQuCAtLXZlcmJvc2Ug0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzE1IGJ1aWx0aW4vYnJhbmNoLmM6NzY5IGJ1aWx0aW4vYnJhbmNoLmM6Nzc4Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgItGC0YDQtdCx0YPQtdGC0YHRjyDQuNC80Y8g0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NDUKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LTQsNGC0Ywg0L7Qv9C40YHQsNC90LjQtSDQvtGC0LTQtdC70ZHQvdC90L7QvNGDIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUwCittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNC30LzQtdC90LjRgtGMINC+0L/QuNGB0LDQvdC40LUg0LHQvtC70LXQtSDQvtC00L3QvtC5INCy0LXRgtC60Lgg0LfQsCDRgNCw0LciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICLQldGJ0LUg0L3QtdGCINC60L7QvNC80LjRgtCwINC90LAg0LLQtdGC0LrQtSDCqyVzwrsuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgItCd0LXRgiDQstC10YLQutC4INGBINC40LzQtdC90LXQvCDCqyVzwrsuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc3NQorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+INCy0LXRgtC+0Log0LTQu9GPINC+0L/QtdGA0LDRhtC40Lgg0LrQvtC/0LjRgNC+0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODQKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0L7QsiDQtNC70Y8g0L7Qv9C10YDQsNGG0LjQuCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNGPIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4OQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQvtCyINC00LvRjyDRg9C60LDQt9Cw0L3QuNGPINC90L7QstC+0Lkg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INGD0YHRgtCw0L3QvtCy0LjRgtGMINCy0YvRiNC10YHRgtC+0Y/RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQtNC70Y8gSEVBRCDQvdCwICVzLCDRgtCw0Log0LrQsNC6INC+0L0g0L3QtSDRg9C60LDQt9GL0LLQsNC10YIg0L3QuCDQvdCwINC+0LTQvdGDINCy0LXRgtC60YMuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NiBidWlsdGluL2JyYW5jaC5jOjgxOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQvdC10YIg0YLQsNC60L7QuSDQstC10YLQutC4IMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgItCy0LXRgtC60LAgwqslc8K7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODEzCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQvtCyINC00LvRjyDRgdCx0YDQvtGB0LAg0YPQutCw0LfQsNC90LjRjyDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODE3Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0YPQsdGA0LDRgtGMINCy0YvRiNC10YHRgtC+0Y/RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQtNC70Y8gSEVBRCwg0YLQsNC6INC60LDQuiDQvtC9INC90LUg0YPQutCw0LfRi9Cy0LDQtdGCINC90Lgg0L3QsCDQvtC00L3RgyDQstC10YLQutGDLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvdC1INC40LzQtdC10YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzMworbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YDRiyAtYSDQuCAtciDQtNC70Y8gwqtnaXQgYnJhbmNowrsg0L3QtSDQuNC80LXRjtGCINGB0LzRi9GB0LvQsCDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0LjQvNC10L3QuCDQstC10YLQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzNgorbXNnaWQgIiIKKyJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgIgorIictLXNldC11cHN0cmVhbS10bycgaW5zdGVhZC4iCittc2dzdHIgItC+0L/RhtC40Y8gLS1zZXQtdXBzdHJlYW0g0LHQvtC70YzRiNC1INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjy4g0JLQvNC10YHRgtC+INC90LXRkSDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrLS10cmFja8K7INC40LvQuCDCqy0tc2V0LXVwc3RyZWFtLXRvwrsiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyDQsiDQv9C+0YDRj9C00LrQtVxuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjU4Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAi0KLRgNC10LHRg9C10YLRgdGPINGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0L/QsNC60LXRgtCwLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2MgorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAi0KLRgNC10LHRg9C10YLRgdGPINGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LTQu9GPINGA0LDRgdC/0LDQutC+0LLQutC4LiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5MworbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAiCisiLXAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC1wIHwgPNGC0LjQvz4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTzQv9GD0YLRjD5dIDzQvtCx0YrQtdC60YI+IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk0Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gWy0tdGV4dGNvbnYgfCAiCisiLS1maWx0ZXJzXSIKK21zZ3N0ciAiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTUKK21zZ2lkICJvbmx5IG9uZSBiYXRjaCBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjMzCittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI80YLQuNC/PiDQvNC+0LbQtdGCINCx0YvRgtGMINC+0LTQvdC40Lwg0LjQtzogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzQKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGC0LjQvyDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YDQsNC30LzQtdGAINC+0LHRitC10LrRgtCwIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIgorbXNnc3RyICLQstGL0LnRgtC4INGBINC90YPQu9C10LLRi9C8INC60L7QtNC+0Lwg0LLQvtC30LLRgNCw0YLQsCwg0LXRgdC70Lgg0L3QtdGCINC+0YjQuNCx0LrQuCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLRgdGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3Ri9C5INCy0YvQstC+0LQg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLQt9Cw0L/Rg9GB0YLQuNGC0YwgdGV4Y29udiDQvdCwINGB0L7QtNC10YDQttC40LzQvtC8INC00LLQvtC40YfQvdGL0YUg0L7QsdGK0LXQutGC0L7QsiAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLQt9Cw0L/Rg9GB0Log0YTQuNC70YzRgtGA0L7QsiDQvdCwINGB0L7QtNC10YDQttC40LzQvtC8INC00LLQvtC40YfQvdGL0YUg0L7QsdGK0LXQutGC0L7QsiAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDMgZ2l0LXN1Ym1vZHVsZS5zaDo5MzYKK21zZ2lkICJibG9iIgorbXNnc3RyICLQtNCy0L7QuNGH0L3Ri9C5INC+0LHRitC10LrRgiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NAorbXNnaWQgInVzZSBhIHNwZWNpZmljIHBhdGggZm9yIC0tdGV4dGNvbnYvLS1maWx0ZXJzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7Qv9GA0LXQtNC10LvQtdC90L3Ri9C5INC/0YPRgtGMINC00LvRjyAtLXRleHRjb252Ly0tZmlsdGVycyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NgorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMIC1zINC4IC10INGA0LDQsdC+0YLQsNGC0Ywg0YEg0L/QvtCy0YDQtdC20LTRkdC90L3Ri9C80Lgg0L7QsdGK0LXQutGC0LDQvNC4IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ3Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICLQsdGD0YTRhNC10YDQuNGA0L7QstCw0YLRjCDQstGL0LLQvtC0IC0tYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0Lgg0YHQvtC00LXRgNC20LjQvNC+0LUg0L7QsdGK0LXQutGC0L7Qsiwg0L/QtdGA0LXQtNCw0L3QvdGL0YUg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1MworbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINC+0LHRitC10LrRgtCw0YUsINC/0LXRgNC10LTQsNC90L3Ri9GFINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTcKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgItC/0LXRgNC10YXQvtC00LjRgtGMINC/0L4g0YHQuNC80LLQvtC70YzQvdGL0Lwg0YHRgdGL0LvQutCw0Lwg0LLQvdGD0YLRgNC4INC00LXRgNC10LLQsCAo0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINGBINC+0L/RhtC40Y/QvNC4IC0tYmF0Y2gg0LggLS1iYXRjaC1jaGVjaykiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTkKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINCy0YHQtSDQvtCx0YrQtdC60YLRiyDRgSDQvtC/0YbQuNGP0LzQuCAtLWJhdGNoINC40LvQuCAtLWJhdGNoLWNoZWNrIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYxCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEzCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA80LDRgtGA0LjQsdGD0YI+4oCmXSBbLS1dIDzQv9GD0YLRjD7igKYiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPNCw0YLRgNC40LHRg9GCPuKApl0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxCittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQstGB0LUg0LDRgtGA0LjQsdGD0YLRiyDRg9GB0YLQsNC90L7QstC70LXQvdC90YvQtSDQtNC70Y8g0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjIKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviAuZ2l0YXR0cmlidXRlcyDQuNC3INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi0L7QutC+0L3Rh9Cw0L3QuNC1INCy0LLQvtC00LAg0Lgg0LLRi9Cy0L7QtNCwINC30LDQv9C40YHQtdC5INC/0L4g0J3Qo9Cb0JXQktCe0JzQoyDRgdC40LzQstC+0LvRgyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMSBidWlsdGluL2NoZWNrb3V0LmM6MTM1NSBidWlsdGluL2djLmM6NTM4CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk5Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQstGL0L/QvtC70L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC90LUg0YHQvtCy0L/QsNC00LDRjtGJ0LjQtSDQstCy0LXQtNC10L3QvdGL0LUg0L/Rg9GC0LgiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC40L3QtNC10LrRgSDQv9GA0Lgg0L/RgNC+0LLQtdGA0LrQtSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjAKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YPQutCw0LfRi9Cy0LDRgtGMINC/0YPRgtC4INCy0LzQtdGB0YLQtSDRgSDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiDQuNC80LXQtdGCINGB0LzRi9GB0Lsg0YLQvtC70YzQutC+INCy0LzQtdGB0YLQtSDRgSDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICLQvdC1INGD0LrQsNC30LDQvSDQv9GD0YLRjCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjkKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0L/RgNC4INGD0LrQsNC30LDQvdC40Lgg0L7QtNC90L7Qs9C+INC/0YPRgtC4IgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviAtLXF1aWV0INC4IC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzQKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LLQvNC10YHRgtC1INGBIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzzQvtC/0YbQuNC4Pl0gPNC60L7QvdGC0LDQutGCPuKApiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTQKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0YLQsNC60LbQtSDRh9C40YLQsNGC0Ywg0LrQvtC90YLQsNC60YLRiyDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvdGC0LDQutGCOiAlcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDgKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgItC90LUg0YPQutCw0LfQsNC90Ysg0LrQvtC90YLQsNC60YLRiyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEzMQorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzzQvtC/0YbQuNC4Pl0gWy0tXSBbPNGE0LDQudC7PuKApl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAi0LjQvdC00LXQutGBINC00L7Qu9C20LXQvSDQsdGL0YLRjCDQvNC10LbQtNGDIDEg0LggMyDQuNC70LggYWxsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgItC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0YHQvtGB0YLQvtGP0L3QuNC1INCy0YHQtdGFINGE0LDQudC70L7QsiDQuNC3INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QsNGPINC/0LXRgNC10LfQsNC/0LjRgdGMINGB0YPRidC10YHRgtCy0YPRjtGJ0LjRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjRjyDQtNC70Y8g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFINC4INC90LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY5Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICLQvdC1INGB0L7Qt9C00LDQstCw0YLRjCDQvdC+0LLRi9C1INGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAi0L7QsdC90L7QstC40YLRjCDRgdGC0LDRgtC40YHRgtC40LrRgyDQtNC+0YHRgtGD0L/QsCDQsiDRhNCw0LnQu9C1INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0YHQv9C40YHQvtC6INC/0YPRgtC10Lkg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAi0LfQsNC/0LjRgdCw0YLRjCDRgdC+0LTQtdGA0LbQuNC80L7QtSDQstC+INCy0YDQtdC80LXQvdC90YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc1CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg1NgorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MgorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAi0YHRgtGA0L7QutCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc5Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDRgdC/0LXRgNC10LTQuCA80YHRgtGA0L7QutGDPiDQv9GA0Lgg0YHQvtC30LTQsNC90LjQuCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODEKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAi0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0YTQsNC50LvRiyDQuNC3INGD0LrQsNC30LDQvdC90L7Qs9C+INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzIKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPNC+0L/RhtC40Lg+XSA80LLQtdGC0LrQsD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMworbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs80L7Qv9GG0LjQuD5dIFs80LLQtdGC0LrQsD5dIC0tIDzRhNCw0LnQuz7igKYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEgYnVpbHRpbi9jaGVja291dC5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAi0L/Rg9GC0Ywgwqslc8K7INC90LUg0LjQvNC10LXRgiDQvdCw0YjQtdC5INCy0LXRgNGB0LjQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MyBidWlsdGluL2NoZWNrb3V0LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuyDQvdC1INC40LzQtdC10YIg0LjRhSDQstC10YDRgdC40LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAi0L/Rg9GC0Ywgwqslc8K7INC90LUg0LjQvNC10LXRgiDQstGB0LXRhSDQvdC10L7QsdGF0L7QtNC40LzRi9GFINCy0LXRgNGB0LjQuSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuyDQvdC1INC40LzQtdC10YIg0L3QtdC+0LHRhdC+0LTQuNC80YvRhSDQstC10YDRgdC40LkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuzog0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC70LjRgtGMIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0Ywg0YDQtdC30YPQu9GM0YLQsNGCINGB0LvQuNGP0L3QuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMzMSBidWlsdGluL2NoZWNrb3V0LmM6MzM0IGJ1aWx0aW4vY2hlY2tvdXQuYzozMzcKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICLCqyVzwrsg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9GA0Lgg0L7QsdC90L7QstC70LXQvdC40Lgg0L/Rg9GC0LXQuSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM0MyBidWlsdGluL2NoZWNrb3V0LmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiwqslc8K7INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC+0LHQvdC+0LLQu9GP0YLRjCDQv9GD0YLQuCDQuCDQv9C10YDQtdC60LvRjtGH0LDRgtGM0YHRjyDQvdCwINCy0LXRgtC60YMgwqslc8K7INC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozOTYgYnVpbHRpbi9jaGVja291dC5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuyDQvdC1INGB0LvQuNGCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdCIKK21zZ2lkX3BsdXJhbCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCittc2dzdHJbMl0gIiIKK21zZ3N0clszXSAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorbXNnc3RyWzJdICIiCittc2dzdHJbM10gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkICVkIHBhdGggZnJvbSB0aGUgaW5kZXgiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorbXNnc3RyWzJdICIiCittc2dzdHJbM10gIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY5NQorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLRgdC90LDRh9Cw0LvQsCDQvdGD0LbQvdC+INGA0LDQt9GA0LXRiNC40YLRjCDQutC+0L3RhNC70LjQutGC0Ysg0LIg0LLQsNGI0LXQvCDRgtC10LrRg9GJ0LXQvCDQuNC90LTQtdC60YHQtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IGNvbnRpbnVlIHdpdGggc3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXMgbWF5IGJlIGxvc3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcyc6ICVzXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LbRg9GA0L3QsNC7INGB0YHRi9C70L7QuiDQtNC70Y8gwqslc8K7OiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODkwCittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQg0YHQtdC50YfQsNGBINC90LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQgYnVpbHRpbi9jbG9uZS5jOjcwMQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi0KHQsdGA0L7RgSDQstC10YLQutC4IMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICLQo9C20LUg0L3QsCDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi0J/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INC4INGB0LHRgNC+0YEg0LLQtdGC0LrQuCDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjkwNyBidWlsdGluL2NoZWNrb3V0LmM6MTI4MworIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLQn9C10YDQtdC60LvRjtGH0LXQvdC+INC90LAg0L3QvtCy0YPRjiDQstC10YLQutGDIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCf0LXRgNC10LrQu9GO0YfQtdC90L4g0L3QsCDQstC10YLQutGDIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiDigKYg0Lgg0LXRidC1ICVkLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICLQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDQstGLINC+0YHRgtCw0LLQu9GP0LXRgtC1INC/0L7Qt9Cw0LTQuCAlZCDQutC+0LzQvNC40YIg0L3QtSDRgdC+0LXQtNC40L3QtdC90L3Rg9GOINC90Lgg0YEg0L7QtNC90L7QuSDQuNC3INCy0LDRiNC40YUg0LLQtdGC0L7QujpcblxuJXNcbiIKK21zZ3N0clsxXSAi0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTog0LLRiyDQvtGB0YLQsNCy0LvRj9C10YLQtSDQv9C+0LfQsNC00LggJWQg0LrQvtC80LzQuNGC0LAg0L3QtSDRgdC+0LXQtNC40L3QtdC90L3Ri9C1INC90Lgg0YEg0L7QtNC90L7QuSDQuNC3INCy0LDRiNC40YUg0LLQtdGC0L7QujpcblxuJXNcbiIKK21zZ3N0clsyXSAi0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTog0LLRiyDQvtGB0YLQsNCy0LvRj9C10YLQtSDQv9C+0LfQsNC00LggJWQg0LrQvtC80LzQuNGC0L7QsiDQvdC1INGB0L7QtdC00LjQvdC10L3QvdGL0LUg0L3QuCDRgSDQvtC00L3QvtC5INC40Lcg0LLQsNGI0LjRhSDQstC10YLQvtC6OlxuXG4lc1xuIgorbXNnc3RyWzNdICLQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDQstGLINC+0YHRgtCw0LLQu9GP0LXRgtC1INC/0L7Qt9Cw0LTQuCAlZCDQutC+0LzQvNC40YLQvtCyINC90LUg0YHQvtC10LTQuNC90LXQvdC90YvQtSDQvdC4INGBINC+0LTQvdC+0Lkg0LjQtyDQstCw0YjQuNGFINCy0LXRgtC+0Lo6XG5cbiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICLQldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDRgdC+0YXRgNCw0L3QuNGC0Ywg0LjRhSDRgSDQv9C+0LzQvtGJ0YzRjiDRgdC+0LfQtNCw0L3QuNGPINC90L7QstC+0Lkg0LLQtdGC0LrQuCwg0YLQviDRgdC10LnRh9Cw0YEg0YHQsNC80L7QtSDQstGA0LXQvNGPXG7RgdC00LXQu9Cw0YLRjCDRjdGC0L4g0YEg0L/QvtC80L7RidGM0Y46XG5cbiBnaXQgYnJhbmNoIDzQuNC80Y8t0L3QvtCy0L7QuS3QstC10YLQutC4PiAlc1xuIgorbXNnc3RyWzFdICLQldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDRgdC+0YXRgNCw0L3QuNGC0Ywg0LjRhSDRgSDQv9C+0LzQvtGJ0YzRjiDRgdC+0LfQtNCw0L3QuNGPINC90L7QstC+0Lkg0LLQtdGC0LrQuCwg0YLQviDRgdC10LnRh9Cw0YEg0YHQsNC80L7QtSDQstGA0LXQvNGPXG7RgdC00LXQu9Cw0YLRjCDRjdGC0L4g0YEg0L/QvtC80L7RidGM0Y46XG5cbiBnaXQgYnJhbmNoIDzQuNC80Y8t0L3QvtCy0L7QuS3QstC10YLQutC4PiAlc1xuIgorbXNnc3RyWzJdICLQldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDRgdC+0YXRgNCw0L3QuNGC0Ywg0LjRhSDRgSDQv9C+0LzQvtGJ0YzRjiDRgdC+0LfQtNCw0L3QuNGPINC90L7QstC+0Lkg0LLQtdGC0LrQuCwg0YLQviDRgdC10LnRh9Cw0YEg0YHQsNC80L7QtSDQstGA0LXQvNGPXG7RgdC00LXQu9Cw0YLRjCDRjdGC0L4g0YEg0L/QvtC80L7RidGM0Y46XG5cbiBnaXQgYnJhbmNoIDzQuNC80Y8t0L3QvtCy0L7QuS3QstC10YLQutC4PiAlc1xuIgorbXNnc3RyWzNdICLQldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDRgdC+0YXRgNCw0L3QuNGC0Ywg0LjRhSDRgSDQv9C+0LzQvtGJ0YzRjiDRgdC+0LfQtNCw0L3QuNGPINC90L7QstC+0Lkg0LLQtdGC0LrQuCwg0YLQviDRgdC10LnRh9Cw0YEg0YHQsNC80L7QtSDQstGA0LXQvNGPXG7RgdC00LXQu9Cw0YLRjCDRjdGC0L4g0YEg0L/QvtC80L7RidGM0Y46XG5cbiBnaXQgYnJhbmNoIDzQuNC80Y8t0L3QvtCy0L7QuS3QstC10YLQutC4PiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxNworbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgItCy0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCDQv9GA0Lgg0YXQvtC20LTQtdC90LjQuCDQv9C+INGA0LXQtNCw0LrRhtC40Y/QvCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMjEKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAi0J/RgNC10LTRi9C00YPRidCw0Y8g0L/QvtC30LjRhtC40Y8gSEVBRCDQsdGL0LvQsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTIgYnVpbHRpbi9jaGVja291dC5jOjEyNzgKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICLQktGLINC90LDRhdC+0LTQuNGC0LXRgdGMINC90LAg0LXRidC1INC90LUg0YHQvtC30LTQsNC90L3QvtC5INCy0LXRgtC60LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICLQvtC20LjQtNCw0LXRgtGB0Y8g0YLQvtC70YzQutC+INC+0LTQvdCwINGB0YHRi9C70LrQsCwg0LAg0L/QtdGA0LXQtNCw0L3QviAlZC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjIgYnVpbHRpbi93b3JrdHJlZS5jOjI5MCBidWlsdGluL3dvcmt0cmVlLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGB0YHRi9C70LrQsDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAi0LIg0LTQtdGA0LXQstC1INC90LXRgiDRgtCw0LrQvtC5INGB0YHRi9C70LrQuDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjkyCittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L/Rg9GC0Lgg0L/RgNC4INC/0LXRgNC10LrQu9GO0YfQtdC90LjQuCDQstC10YLQvtC6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI5NSBidWlsdGluL2NoZWNrb3V0LmM6MTI5OSBidWlsdGluL2NoZWNrb3V0LmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIMKrJXPCuyDQv9GA0Lgg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC4INCy0LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzEwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzE1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMxOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiwqslc8K7INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgItCd0LXQu9GM0LfRjyDQv9C10YDQtdC60LvRjtGH0LjRgtGMINCy0LXRgtC60YMg0L3QsCDQvdC1INC60L7QvNC80LjRgiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU4IGJ1aWx0aW4vY2xvbmUuYzoxMTgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY5IGJ1aWx0aW4vcmVtb3RlLmM6MTcxIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTQKK21zZ2lkICJicmFuY2giCittc2dzdHIgItCy0LXRgtC60LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU3Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC4INC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0L3QvtCy0YPRjiDQstC10YLQutGDIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1OQorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgItGB0L7Qt9C00LDRgtGML9GB0LHRgNC+0YHQuNGC0Ywg0Lgg0L/QtdGA0LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0L3QvtCy0YPRjiDQstC10YLQutGDIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2MAorbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC20YPRgNC90LDQuyDRgdGB0YvQu9C+0Log0LTQu9GPINC90L7QstC+0Lkg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjEgYnVpbHRpbi93b3JrdHJlZS5jOjQ5NgorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAi0L7RgtGB0L7QtdC00LjQvdC40YLRjCBIRUFEINC90LAg0YPQutCw0LfQsNC90L3QvtC8INC60L7QvNC80LjRgtC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2MgorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLRg9GB0YLQsNC90L7QstC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LUg0LTQu9GPINC90L7QstC+0Lkg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjQKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICLQvdC+0LLQsNGPLdCy0LXRgtC60LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY0Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICLQvdC+0LLQsNGPINCy0LXRgtC60LAg0LHQtdC3INGA0L7QtNC40YLQtdC70LXQuSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjYKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgItC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0L3QsNGI0YMg0LLQtdGA0YHQuNGOINC00LvRjyDQvdC1INGB0LvQuNGC0YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY5Cittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgItC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0LjRhSDQstC10YDRgdC40Y4g0LTQu9GPINC90LUg0YHQu9C40YLRi9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzEKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L7QtSDQv9C10YDQtdC60LvRjtGH0LXQvdC40LUg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LUgKNC+0YLQsdGA0LDRgdGL0LLQsNC10YIg0LLRgdC1INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3MworbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQstGL0L/QvtC70L3QuNGC0Ywg0YLRgNC10YXRhdC+0LTQvtCy0L7QtSDRgdC70LjRj9C90LjQtSDRgSDQvdC+0LLQvtC5INCy0LXRgtC60L7QuSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNzUgYnVpbHRpbi9tZXJnZS5jOjI4NAorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L7QsdC90L7QstC40YLRjCDQuNCz0L3QvtGA0LjRgNGD0LXQvNGL0LUg0YTQsNC50LvRiyAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NyBidWlsdGluL2xvZy5jOjE1OTQgcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInN0eWxlIgorbXNnc3RyICLRgdGC0LjQu9GMIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM3OAorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgItGB0YLQuNC70Ywg0LrQvtC90YTQu9C40LrRgtC+0LIg0YHQu9C40Y/QvdC40Y8gKG1lcmdlINC40LvQuCBkaWZmMykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgxCittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICLQvdC1INC+0LPRgNCw0L3QuNGH0LjQstCw0YLRjCDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDRiyDQv9GD0YLQuCDRgtC+0LvRjNC60L4g0YfQsNGB0YLQuNGH0L3Ri9C80Lgg0LfQsNC/0LjRgdGP0LzQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODMKK21zZ2lkICJkbyBub3Qgc2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODUKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgItC90LUg0L/RgNC+0LLQtdGA0Y/RgtGMLCDRh9GC0L4g0LTRgNGD0LPQvtC1INC00LXRgNC10LLQviDRg9C20LUg0YHQvtC00LXRgNC20LjRgiDRg9C60LDQt9Cw0L3QvdGD0Y4g0YHRgdGL0LvQutGDIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4OSBidWlsdGluL2Nsb25lLmM6ODggYnVpbHRpbi9mZXRjaC5jOjE0MQorIzogYnVpbHRpbi9tZXJnZS5jOjI4MSBidWlsdGluL3B1bGwuYzoxMzYgYnVpbHRpbi9wdXNoLmM6NTc1CisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0LLRi9Cy0L7QtNC40YLRjCDQv9GA0L7Qs9GA0LXRgdGBIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5MAorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDIyCittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIg0LggLS1vcnBoYW4g0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDI1Cittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQyCittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrINGC0YDQtdCx0YPQtdGCINC40LzRjyDQstC10YLQutC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0NworbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GJ0LXQvdC+INC40LzRjyDQstC10YLQutC4OyDQv9C+0L/RgNC+0LHRg9C50YLQtSAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODQKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgCDQv9GD0YLQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQgYW5kIGEgYnJhbmNoICclcycgY2Fubm90IGJlIGNyZWF0ZWQgZnJvbSBpdCIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutC+0LzQvNC40YLQvtC8LCDQv9C+0Y3RgtC+0LzRgyDQvdC10LLQvtC30LzQvtC20L3QviDRgdC+0LfQtNCw0YLRjCDQuNC3INC90LXQs9C+INCy0LXRgtC60YMgwqslc8K7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dDogLS1kZXRhY2gg0L3QtSDQv9GA0LjQvdC40LzQsNC10YIg0L/Rg9GC0Ywgwqslc8K7INC60LDQuiDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ5OQorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2Ug0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0L/RgNC4INC/0YDQuNC80LXQvdC10L3QuNC4INGB0L7RgdGC0L7Rj9C90LjRjyDQuNC90LTQtdC60YHQsC4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIG1hdGNoZWQgbW9yZSB0aGFuIG9uZSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLlxuIgorIldlIGZvdW5kICVkIHJlbW90ZXMgd2l0aCBhIHJlZmVyZW5jZSB0aGF0IG1hdGNoZWQuIFNvIHdlIGZlbGwgYmFja1xuIgorIm9uIHRyeWluZyB0byByZXNvbHZlIHRoZSBhcmd1bWVudCBhcyBhIHBhdGgsIGJ1dCBmYWlsZWQgdGhlcmUgdG9vIVxuIgorIlxuIgorIklmIHlvdSBtZWFudCB0byBjaGVjayBvdXQgYSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIG9uLCBlLmcuICdvcmlnaW4nLFxuIgorInlvdSBjYW4gZG8gc28gYnkgZnVsbHkgcXVhbGlmeWluZyB0aGUgbmFtZSB3aXRoIHRoZSAtLXRyYWNrIG9wdGlvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luLzxuYW1lPlxuIgorIlxuIgorIklmIHlvdSdkIGxpa2UgdG8gYWx3YXlzIGhhdmUgY2hlY2tvdXRzIG9mIGFuIGFtYmlndW91cyA8bmFtZT4gcHJlZmVyXG4iCisib25lIHJlbW90ZSwgZS5nLiB0aGUgJ29yaWdpbicgcmVtb3RlLCBjb25zaWRlciBzZXR0aW5nXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaW4geW91ciBjb25maWcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDzRiNCw0LHQu9C+0L0+XSBbLXggfCAtWF0gWy0tXSA80L/Rg9GC0Lg+4oCmIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgItCR0YPQtNC10YIg0YPQtNCw0LvQtdC90L4gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0Log0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgItCR0YPQtNC10YIg0L/RgNC+0L/Rg9GJ0LXQvSDRgNC10L/QvtC30LjRgtC+0YDQuNC5ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICLRgdCx0L7QuSDRg9C00LDQu9C10L3QuNGPICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6Mjk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmdcbiIKK21zZ3N0ciAi0KHQv9GA0LDQstC60LAg0L/QviDQstGL0LTQtdC70LXQvdC40Y46XG4xICAgICAgICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0YPQutCw0LfQsNC90L3Ri9C5INGN0LvQtdC80LXQvdGCXG5mb28gICAgICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0Y3Qu9C10LzQtdC90YIg0YEg0YPQutCw0LfQsNC90L3Ri9C8INC/0YDQtdGE0LjQutGB0L7QvFxuICAgICAgICAgICAtICjQv9GD0YHRgtC+KSDQvdC1INCy0YvQsdC40YDQsNGC0Ywg0L3QuNGH0LXQs9C+XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgItCh0L/RgNCw0LLQutCwINC/0L4g0LLRi9C00LXQu9C10L3QuNGOOlxuMSAgICAgICAgICAtINCy0YvQsdGA0LDRgtGMINC+0LTQuNC9INGN0LvQtdC80LXQvdGCXG4zLTUgICAgICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0LTQuNCw0L/QsNC30L7QvSDRjdC70LXQvNC10L3RgtC+0LJcbjItMyw2LTkgICAgLSDQstGL0LHRgNCw0YLRjCDQvdC10YHQutC+0LvRjNC60L4g0LTQuNCw0L/QsNC30L7QvdC+0LJcbmZvbyAgICAgICAgLSDQstGL0LHRgNCw0YLRjCDRjdC70LXQvNC10L3RgiDRgSDRg9C60LDQt9Cw0L3QvdGL0Lwg0L/RgNC10YTQuNC60YHQvtC8XG4t4oCmICAgICAgIC0g0YPQsdGA0LDRgtGMINCy0YvQtNC10LvQtdC90LjQtSDRgSDRg9C60LDQt9Cw0L3QvdGL0YUg0Y3Qu9C10LzQtdC90YLQvtCyXG4qICAgICAgICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0LLRgdC1INGN0LvQtdC80LXQvdGC0YtcbiAgICAgICAgICAgLSAo0L/Rg9GB0YLQvikg0LfQsNCy0LXRgNGI0LjRgtGMINCy0YvQtNC10LvQtdC90LjQtVxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTU0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU1OQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/XG4iCittc2dzdHIgItCl0LwgKCVzKT9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgItCo0LDQsdC70L7QvdGLINC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNGPINCy0LLQvtC00LA+PiAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRjdC70LXQvNC10L3RgtGLINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQtTogJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MTkKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICLQo9C60LDQttC40YLQtSDRjdC70LXQvNC10L3RgtGLINC00LvRjyDRg9C00LDQu9C10L3QuNGPIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgItCj0LTQsNC70LjRgtGMICVzIFt5IC0g0LTQsC9OIC0g0L3QtdGCXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzg1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcxNworIywgYy1mb3JtYXQKK21zZ2lkICJCeWUuXG4iCittc2dzdHIgItCU0L4g0YHQstC40LTQsNC90LjRjy5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjc5MworbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICJjbGVhbiAgICAgICAgICAgICAgIC0g0L3QsNGH0LDRgtGMINC+0YfQuNGB0YLQutGDXG5maWx0ZXIgYnkgcGF0dGVybiAgIC0g0LjRgdC60LvRjtGH0LjRgtGMINGD0LTQsNC70LXQvdC40LUg0Y3Qu9C10LzQtdC90YLQvtCyXG5zZWxlY3QgYnkgbnVtYmVycyAgIC0g0LjRgdC60LvRjtGH0LjRgtGMINGD0LTQsNC70LXQvdC40LUg0Y3Qu9C10LzQtdC90YLQvtCyINC/0L4g0L3QvtC80LXRgNCw0LxcbmFzayBlYWNoICAgICAgICAgICAgLSDQt9Cw0L/RgNCw0YjQuNCy0LDRgtGMINC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNC1INC90LAg0YPQtNCw0LvQtdC90LjQtSDQutCw0LbQtNC+0LPQviDRjdC70LXQvNC10L3RgtCwICjQutCw0LogwqtybSAtacK7KVxucXVpdCAgICAgICAgICAgICAgICAtINC/0YDQtdC60YDQsNGC0LjRgtGMINC+0YfQuNGB0YLQutGDXG5oZWxwICAgICAgICAgICAgICAgIC0g0Y3RgtC+0YIg0Y3QutGA0LDQvVxuPyAgICAgICAgICAgICAgICAgICAtINGB0L/RgNCw0LLQutCwINC/0L4g0LLRi9C00LXQu9C10L3QuNGOIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODIwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5MworbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiDQmtC+0LzQsNC90LTRiyAqKioiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzkwCittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgItCn0YLQviDRgtC10L/QtdGA0YwiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MjkKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICLQo9C00LDQu9C40YLRjCDRgdC70LXQtNGD0Y7RidC40LUg0Y3Qu9C10LzQtdC90YLRizoiCittc2dzdHJbMV0gItCj0LTQsNC70LjRgtGMINGB0LvQtdC00YPRjtGJ0LjQtSDRjdC70LXQvNC10L3RgtGLOiIKK21zZ3N0clsyXSAi0KPQtNCw0LvQuNGC0Ywg0YHQu9C10LTRg9GO0YnQuNC1INGN0LvQtdC80LXQvdGC0Ys6IgorbXNnc3RyWzNdICLQo9C00LDQu9C40YLRjCDRgdC70LXQtNGD0Y7RidC40LUg0Y3Qu9C10LzQtdC90YLRizoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDUKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAi0JHQvtC70YzRiNC1INC90LXRgiDRhNCw0LnQu9C+0LIg0LTQu9GPINC+0YfQuNGB0YLQutC4LCDQstGL0YXQvtC00LjQvC4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDcKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YPQtNCw0LvRj9C10LzRi9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImZvcmNlIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMAorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90LDRjyDQvtGH0LjRgdGC0LrQsCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0LrQsNGC0LDQu9C+0LPQuCDQv9C+0LvQvdC+0YHRgtGM0Y4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTMgYnVpbHRpbi9kZXNjcmliZS5jOjU0NiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ4CisjOiBidWlsdGluL2dyZXAuYzo4OTcgYnVpbHRpbi9sb2cuYzoxNzEgYnVpbHRpbi9sb2cuYzoxNzMKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTcgYnVpbHRpbi9uYW1lLXJldi5jOjQxNyBidWlsdGluL25hbWUtcmV2LmM6NDE5CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAi0YjQsNCx0LvQvtC9IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE0Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0YwgPNGI0LDQsdC70L7QvT4g0LIg0L/RgNCw0LLQuNC70LAg0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTUKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICLRgtCw0LrQttC1INGD0LTQsNC70LjRgtGMINC40LPQvdC+0YDQuNGA0YPQtdC80YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0YLQvtC70YzQutC+INC40LPQvdC+0YDQuNGA0YPQtdC80YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTM1Cittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviAteCDQuCAtWCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzOQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvIgorIiBjbGVhbiIKK21zZ3N0ciAiY2xlYW4ucmVxdWlyZUZvcmNlINGD0YHRgtCw0L3QvtCy0LvQtdC9INC60LDQuiB0cnVlINC4INC90Lgg0L7QtNC90LAg0LjQtyDQvtC/0YbQuNC5IC1pLCAtbiDQuNC70LggLWYg0L3QtSDRg9C60LDQt9Cw0L3QsDsg0L7RgtC60LDQtyDQvtGH0LjRgdGC0LrQuCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MgorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICJjbGVhbi5yZXF1aXJlRm9yY2Ug0YPRgdGC0LDQvdC+0LLQu9C10L0g0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0LrQsNC6IHRydWUg0Lgg0L3QuCDQvtC00L3QsCDQuNC3INC+0L/RhtC40LkgLWksIC1uINC40LvQuCAtZiDQvdC1INGD0LrQsNC30LDQvdCwOyDQvtGC0LrQsNC3INC+0YfQuNGB0YLQutC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs80L7Qv9GG0LjQuD5dIFstLV0gPNGA0LXQv9C+0LfQuNGC0L7RgNC40Lk+IFs80LrQsNGC0LDQu9C+0LM+XSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwCittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgItC90LUg0L/QtdGA0LXQutC70Y7Rh9Cw0YLRjCDRgNCw0LHQvtGH0YPRjiDQutC+0L/QuNGOINC90LAgSEVBRCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzo5MyBidWlsdGluL2luaXQtZGIuYzo0ODkKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINCz0L7Qu9GL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC30LXRgNC60LDQu9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gKNCy0LrQu9GO0YfQsNC10YIg0LIg0YHQtdCx0Y8g0Lgg0L/QsNGA0LDQvNC10YLRgCBiYXJlKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgItC00LvRjyDQutC70L7QvdC40YDQvtCy0LDQvdC40Y8g0LjQtyDQu9C+0LrQsNC70YzQvdC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTkKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAi0L3QtSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LbQtdGB0YLQutC40LUg0YHRgdGL0LvQutC4LCDQstGB0LXQs9C00LAg0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMQorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICLQvdCw0YHRgtGA0L7QuNGC0Ywg0LrQsNC6INC+0LHRidC10LTQvtGB0YLRg9C/0L3Ri9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjQutCw0YLQvtGALdC/0YPRgtC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAi0LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0L/QvtC00LzQvtC00YPQu9C4INCyINC60LvQvtC90LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgItC60L7Qu9C40YfQtdGB0YLQstC+INC/0L7QtNC80L7QtNGD0LvQtdC5LCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINC60LvQvtC90LjRgNC+0LLQsNC90Ysg0L/QsNGA0YDQsNC70LXQu9GM0L3QviIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwOCBidWlsdGluL2luaXQtZGIuYzo0ODYKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgItC60LDRgtCw0LvQvtCzLdGI0LDQsdC70L7QvdC+0LIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDkgYnVpbHRpbi9pbml0LWRiLmM6NDg3Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAi0LrQsNGC0LDQu9C+0LMsINGI0LDQsdC70L7QvdGLINC40Lcg0LrQvtGC0L7RgNC+0LPQviDQsdGD0LTRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0L3RiyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMSBidWlsdGluL2Nsb25lLmM6MTEzIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg1OQorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICLRgdGB0YvQu9Cw0LXQvNGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjEKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9GD0LnRgtC1IC0tcmVmZXJlbmNlINGC0L7Qu9GM0LrQviDQv9GA0Lgg0LrQu9C+0L3QuNGA0L7QstCw0L3QuNC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE2IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwNiBidWlsdGluL3JlcGFjay5jOjMyOQorbXNnaWQgIm5hbWUiCittc2dzdHIgItC40LzRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNworbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIDzQuNC80Y8+INCy0LzQtdGB0YLQviDCq29yaWdpbsK7INC00LvRjyDQvtGC0YHQu9C10LbQuNCy0LDQvdC40Y8g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTkKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICLQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwIDzQstC10YLQutGDPiwg0LLQvNC10YHRgtC+IEhFQUQg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIxCittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAi0L/Rg9GC0Ywg0LogZ2l0LXVwbG9hZC1wYWNrINC90LAg0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMiBidWlsdGluL2ZldGNoLmM6MTQyIGJ1aWx0aW4vZ3JlcC5jOjgzNgorIzogYnVpbHRpbi9wdWxsLmM6MjI1Cittc2dpZCAiZGVwdGgiCittc2dzdHIgItCz0LvRg9Cx0LjQvdCwIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIzCittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDRh9Cw0YHRgtC40YfQvdGL0Lkg0LrQu9C+0L0g0YPQutCw0LfQsNC90L3QvtC5INCz0LvRg9Cx0LjQvdGLIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0IGJ1aWx0aW4vZmV0Y2guYzoxNDQgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk1Cittc2dpZCAidGltZSIKK21zZ3N0ciAi0LLRgNC10LzRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNQorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc2luY2UgYSBzcGVjaWZpYyB0aW1lIgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDRh9Cw0YHRgtC40YfQvdGL0Lkg0LrQu9C+0L0g0LTQviDQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQviDQstGA0LXQvNC10L3QuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNiBidWlsdGluL2ZldGNoLmM6MTQ2IGJ1aWx0aW4vZmV0Y2guYzoxNjkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4OQorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICLRgNC10LTQsNC60YbQuNGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNDcKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lLCBleGNsdWRpbmcgcmV2IgorbXNnc3RyICLRg9Cz0LvRg9Cx0LjRgtGMINC40YHRgtC+0YDQuNGOINGH0LDRgdGC0LjRh9C90L7Qs9C+INC60LvQvtC90LAg0LjRgdC60LvRjtGH0LDRjyDRgNC10LTQsNC60YbQuNGOIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI5Cittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICLQutC70L7QvdC40YDQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQvtC00L3RgyDQstC10YLQutGDLCBIRUFEINC40LvQuCAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMQorbXNnaWQgImRvbid0IGNsb25lIGFueSB0YWdzLCBhbmQgbWFrZSBsYXRlciBmZXRjaGVzIG5vdCB0byBmb2xsb3cgdGhlbSIKK21zZ3N0ciAi0L3QtSDQutC70L7QvdC40YDQvtCy0LDRgtGMINC80LXRgtC60LgsINCwINGC0LDQutC20LUg0L3QsNGB0YLRgNC+0LjRgtGMLCDRh9GC0L7QsdGLINC90LUg0LrQu9C+0L3QuNGA0L7QstCw0LvQuNGB0Ywg0Lgg0LIg0LTQsNC70YzQvdC10LnRiNC10LwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzMKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICLQstGB0LUg0YHQutC70L7QvdC40YDQvtCy0LDQvdC90YvQtSDQv9C+0LTQvNC+0LTRg9C70Lgg0LHRg9C00YPRgiDRh9Cw0YHRgtC40YfQvdGL0LzQuCDQutC70L7QvdCw0LzQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNCBidWlsdGluL2luaXQtZGIuYzo0OTUKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgItC60LDRgtCw0LvQvtCzLWdpdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNSBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICLRgNCw0LfQvNC10YHRgtC40YLRjCDQutCw0YLQsNC70L7QsyBnaXQg0L7RgtC00LXQu9GM0L3QviDQvtGCINGA0LDQsdC+0YfQtdC5INC60L7Qv9C40LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgItC60LvRjtGHPdC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzcKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMINC/0LDRgNCw0LzQtdGC0YDRiyDQstC90YPRgtGA0Lgg0L3QvtCy0L7Qs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkgYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1ODUgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgItC30LDQstC40YHQuNGCLdC+0YIt0YHQtdGA0LLQtdGA0LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkgYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1ODUgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgItC/0LXRgNC10LTQsNCy0LDQtdC80YvQtSDQvtC/0YbQuNC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQwIGJ1aWx0aW4vZmV0Y2guYzoxNjUgYnVpbHRpbi9wdWxsLmM6MjM4CisjOiBidWlsdGluL3B1c2guYzo1ODYKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviBJUHY0INCw0LTRgNC10YHQsCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vcHVsbC5jOjI0MQorIzogYnVpbHRpbi9wdXNoLmM6NTg4Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4gSVB2NiDQsNC00YDQtdGB0LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyODAKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICLQmNC80Y8g0LrQsNGC0LDQu9C+0LPQsCDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YPQs9Cw0LTQsNC90L4uXG7Qo9C60LDQttC40YLQtSDQuNC80Y8g0LrQsNGC0LDQu9C+0LPQsCDRgSDQv9C+0LzQvtGJ0YzRjiDQv9Cw0YDQsNC80LXRgtGA0LAg0LrQvtC80LDQvdC00L3QvtC5INGB0YLRgNC+0LrQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbmZvOiBDb3VsZCBub3QgYWRkIGFsdGVybmF0ZSBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y86INCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCDQsNC70YzRgtC10YDQvdCw0YLQuNCy0YMg0LTQu9GPIMKrJXPCuzogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCINC4INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutCw0YLQsNC70L7Qs9C+0LwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCAlc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAi0YHQsdC+0Lkg0L7RgtGB0L7QtdC00LjQvdC10L3QuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgdGB0YvQu9C60YMgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQutC+0L/QuNGA0L7QstCw0YLRjCDRhNCw0LnQuyDQsiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAi0LPQvtGC0L7QstC+LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDkzCittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgdGhlIGNoZWNrb3V0IHdpdGggJ2dpdCBjaGVja291dCAtZiBIRUFEJ1xuIgorbXNnc3RyICLQmtC70L7QvdC40YDQvtCy0LDQvdC40LUg0L/RgNC+0YjQu9C+INGD0YHQv9C10YjQvdC+LCDQvdC+INCy0L4g0LLRgNC10LzRjyDQv9C10YDQtdC60LvRjtGH0LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC/0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAuXG7QoSDQv9C+0LzQvtGJ0Ywg0LrQvtC80LDQvdC00YsgwqtnaXQgc3RhdHVzwrsg0LLRiyDQvNC+0LbQtdGC0LUg0L/RgNC+0YHQvNC+0YLRgNC10YLRjCwg0LrQsNC60LjQtSDRhNCw0LnQu9GLINCx0YvQu9C4INC+0LHQvdC+0LLQu9C10L3RiyxcbtCwINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IGNoZWNrb3V0IC1mIEhFQUTCuyDQvNC+0LbQvdC+INC/0L7QstGC0L7RgNC40YLRjCDQv9C+0L/Ri9GC0LrRgyDQv9C10YDQtdC60LvRjtGH0LXQvdC40Y8g0L3QsCDQstC10YLQutGDIFxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgyAlcyDQtNC70Y8g0LrQu9C+0L3QuNGA0L7QstCw0L3QuNGPLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0YwgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MzkKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgItCy0L3QtdGI0L3QuNC5IEhFQUQg0YHRgdGL0LvQsNC10YLRgdGPINC90LAg0L3QtdGB0YPRidC10YHRgtCy0YPRjtGJ0YPRjiDRgdGB0YvQu9C60YMsINC90LXQu9GM0LfRjyDQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINGC0LDQutGD0Y4g0LLQtdGA0YHQuNGOLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzcwCittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINCy0LXRgNGB0LjRjiDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODE1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHBhcmFtZXRlcnMgdG8gY29uZmlnIGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODc4Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0L/QtdGA0LXQv9Cw0LrQvtCy0LrRgyDQtNC70Y8g0L7Rh9C40YHRgtC60LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4ODAKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtGB0L7QtdC00LjQvdC40YLRjCDQstGA0LXQvNC10L3QvdGL0LUg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstC90YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIwIGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MgorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgItCh0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtC+0LIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI0Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICLQktGLINC00L7Qu9C20L3RiyDRg9C60LDQt9Cw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC00LvRjyDQutC70L7QvdC40YDQvtCy0LDQvdC40Y8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlINC4IC0tb3JpZ2luICVzINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0MAorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUg0LggLS1zZXBhcmF0ZS1naXQtZGlyINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgItGA0LXQv9C+0LfQuNGC0L7RgNC40Lkgwqslc8K7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTkgYnVpbHRpbi9mZXRjaC5jOjE2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLQs9C70YPQsdC40L3QsCAlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L/QvtC70L7QttC40YLQtdC70YzQvdGL0Lwg0YfQuNGB0LvQvtC8IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgItGG0LXQu9C10LLQvtC5INC/0YPRgtGMIMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIg0Lgg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC/0YPRgdGC0YvQvCDQutCw0YLQsNC70L7Qs9C+0LwuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTQgYnVpbHRpbi9jbG9uZS5jOjEwMTUgYnVpbHRpbi9kaWZmdG9vbC5jOjI2NAorIzogYnVpbHRpbi93b3JrdHJlZS5jOjI5NiBidWlsdGluL3dvcmt0cmVlLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGA0L7QtNC40YLQtdC70YzRgdC60LjQtSDQutCw0YLQsNC70L7Qs9C4INC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0L3QuNC1INCyINCz0L7Qu9GL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDCqyVzwrvigKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0L3QuNC1INCyIMKrJXPCu+KAplxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0NQorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLSIKKyJpZi1hYmxlIgorbXNnc3RyICLQutC70L7QvdC40YDQvtCy0LDQvdC40LUg0YEg0L/QsNGA0LDQvNC10YLRgNC+0LwgLS1yZWN1cnNpdmUg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0L3QuCDRgSAtLXJlZmVyZW5jZSwg0L3QuCDRgSAtLXJlZmVyZW5jZS1pZi1hYmxlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwNgorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWRlcHRoINC40LPQvdC+0YDQuNGA0YPQtdGC0YHRjyDQvdCwINC70L7QutCw0LvRjNC90YvRhSDQutC70L7QvdCw0YU7INCy0LzQtdGB0YLQviDRjdGC0L7Qs9C+INC40YHQv9C+0LvRjNC30YPQudGC0LUgZmlsZTovLy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTA4Cittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LXNpbmNlINC40LPQvdC+0YDQuNGA0YPQtdGC0YHRjyDQvdCwINC70L7QutCw0LvRjNC90YvRhSDQutC70L7QvdCw0YU7INC40YHQv9C+0LvRjNC30YPQudGC0LUgZmlsZTovLyDQstC80LXRgdGC0L4g0Y3RgtC+0LPQvi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEwCittc2dpZCAiLS1zaGFsbG93LWV4Y2x1ZGUgaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLXNoYWxsb3ctZXhjbHVkZSDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0L3QsCDQu9C+0LrQsNC70YzQvdGL0YUg0LrQu9C+0L3QsNGFOyDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IGZpbGU6Ly8g0LLQvNC10YHRgtC+INGN0YLQvtCz0L4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExMgorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTExNQorbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgItC40YHRhdC+0LTQvdGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDRj9Cy0LvRj9C10YLRgdGPINGH0LDRgdGC0LjRh9C90YvQvCwgLS1sb2NhbCDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTIwCittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICItLWxvY2FsINC40LPQvdC+0YDQuNGA0YPQtdGC0YHRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOTcgYnVpbHRpbi9jbG9uZS5jOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgItCS0L3QtdGI0L3Rj9GPINCy0LXRgtC60LAgJXMg0L3QtSDQvdCw0LnQtNC10L3QsCDQsiDQstGL0YjQtdGB0YLQvtGP0YnQtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LggJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjA4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi0J/QvtGF0L7QttC1LCDRh9GC0L4g0LLRiyDQutC70L7QvdC40YDQvtCy0LDQu9C4INC/0YPRgdGC0L7QuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoxMAorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgItC30LDQv9GA0L7RgdC40YLRjCDQv9C10YDQtdC80LXQvdC90YvQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdGF0LXQvNGDINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjRjyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvRjNC90LDRjyDRiNC40YDQuNC90LAiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvtGC0YHRgtGD0L/QsCDRgdC70LXQstCwIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgItCg0LDRgdGB0YLQvtGP0L3QuNC1INC+0YLRgdGC0YPQv9CwINGB0L/RgNCw0LLQsCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvtGC0YHRgtGD0L/QsCDQvNC10LbQtNGDINC60L7Qu9C+0L3QutCw0LzQuCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCAtLWNvbW1hbmQg0LTQvtC70LbQtdC9INCx0YvRgtGMINC/0LXRgNCy0YvQvCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE4Cittc2dpZCAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dIFsoLUYgIgorIjxmaWxlPikuLi5dIDx0cmVlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNDgwIGJ1aWx0aW4vbWVyZ2UuYzoyNjgKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ3MworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLRgdC+0L7QsdGJ0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNDgwCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorbXNnaWQgInJlYWQgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTQ5MiBidWlsdGluL21lcmdlLmM6MjgzCisjOiBidWlsdGluL3B1bGwuYzoxOTMgYnVpbHRpbi9yZXZlcnQuYzoxMTcKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgItC/0L7QtNC/0LjRgdCw0YLRjCDQutC+0LzQvNC40YIg0YEg0L/QvtC80L7RidGM0Y4gR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE0MAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MQorbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs80L7Qv9GG0LjQuD5dIFstLV0gPNGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgC3Qv9GD0YLQuD7igKYiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDYKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPNC+0L/RhtC40Lg+XSBbLS1dIDzRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAt0L/Rg9GC0Lg+4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICLQktGLINC/0L7Qv9GA0L7RgdC40LvQuCDQuNGB0L/RgNCw0LLQuNGC0Ywg0L/QvtGB0LvQtdC00L3QuNC5INC60L7QvNC80LjRgiwg0L3QviDQtNC10LvQsNGPINGN0YLQviDQstGLINGB0LTQtdC70LDQtdGC0LVcbtC/0YPRgdGC0L7QuSDQutC+0LzQvNC40YIuINCS0Ysg0LzQvtC20LXRgtC1INC/0L7QstGC0L7RgNC40YLRjCDRjdGC0YMg0LrQvtC80LDQvdC00YMg0YEg0L7Qv9GG0LjQtdC5IC0tYWxsb3ctZW1wdHlcbtC40LvQuCDQstGLINC80L7QttC10YLQtSDRg9C00LDQu9C40YLRjCDQutC+0LzQvNC40YIg0L/QvtC70L3QvtGB0YLRjNGOINGBINC/0L7QvNC+0YnRjNGOINC60L7QvNCw0L3QtNGLIFxuwqtnaXQgcmVzZXQgSEVBRF7Cuy5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICLQmtC+0L/QuNGA0YPQtdC80YvQuSDQutC+0LzQvNC40YIg0YLQtdC/0LXRgNGMINC/0YPRgdGCLCDQstC+0LfQvNC+0LbQvdC+INC/0L7RgdC70LUg0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIuXG7QldGB0LvQuCDQstGLINCy0YHQtSDRgNCw0LLQvdC+INGF0L7RgtC40YLQtSDRgdC00LXQu9Cw0YLRjCDQv9GD0YHRgtC+0Lkg0LrQvtC80LzQuNGCLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1OlxuXG4gICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MworbXNnaWQgIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IHJlc2V0J1xuIgorbXNnc3RyICLQkiDQv9GA0L7RgtC40LLQvdC+0Lwg0YHQu9GD0YfQsNC1LCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlc2V0wrtcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorbXNnc3RyICLQldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDQv9GA0L7Qv9GD0YHRgtC40YIg0Y3RgtC+0YIg0LrQvtC80LzQuNGCLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC60L7QvNCw0L3QtNGDOlxuXG4gICAgZ2l0IHJlc2V0XG5cbtCf0L7RgdC70LUg0Y3RgtC+0LPQviDCq2dpdCBjaGVycnktcGljayAtLWNvbnRpbnVlwrsg0L/RgNC+0LTQvtC70LbQuNGCINC60L7Qv9C40YDQvtCy0LDQvdC40LUg0L7RgdGC0LDQstGI0LjRhdGB0Y8g0LrQvtC80LzQuNGC0L7Qsi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMTIKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgItGB0LHQvtC5INGA0LDRgdC/0LDQutC+0LLQutC4INC+0LHRitC10LrRgtCwINC00LXRgNC10LLQsCBIRUFEIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MworbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINCy0YDQtdC80LXQvdC90YvQuSDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzU5Cittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LPQviDQtNC+0LHQsNCy0LvQtdC90LjRjyIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzMKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINCy0YDQtdC80LXQvdC90YvQuSDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc1Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgItCh0LHQvtC5INC/0YDQuCDQvtCx0L3QvtCy0LvQtdC90LjQuCDQvtGB0L3QvtCy0L3QvtCz0L4g0LrRjdGI0LAg0LTQtdGA0LXQstCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQwMCBidWlsdGluL2NvbW1pdC5jOjQyMyBidWlsdGluL2NvbW1pdC5jOjQ2OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINGE0LDQudC7IG5ld19pbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NTIKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgItC90LXQu9GM0LfRjyDRgdC+0LfQtNCw0YLRjCDRh9Cw0YHRgtC40YfQvdGL0Lkg0LrQvtC80LzQuNGCINCy0L4g0LLRgNC10LzRjyDRgdC70LjRj9C90LjRjy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDU0Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YHQvtC30LTQsNGC0Ywg0YfQsNGB0YLQuNGH0L3Ri9C5INC60L7QvNC80LjRgiDQstC+INCy0YDQtdC80Y8g0LrQvtC/0LjRgNC+0LLQsNC90LjRjyDQutC+0LzQvNC40YLQsC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDYyCittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDgxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INGE0LDQudC7INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICLRgyDQutC+0LzQvNC40YLQsCDCqyVzwrsg0L7RgtGB0YPRgtGB0YLQstGD0LXRgiDQsNCy0YLQvtGAINCyINC30LDQs9C+0LvQvtCy0LrQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAi0YMg0LrQvtC80LzQuNGC0LAgwqslc8K7INGB0YLRgNC+0LrQsCDQsNCy0YLQvtGA0LAg0LIg0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC8INGE0L7RgNC80LDRgtC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMAorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgLS1hdXRob3Ig0LIg0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC8INGE0L7RgNC80LDRgtC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY1MworbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LLRi9Cx0YDQsNGC0Ywg0YHQuNC80LLQvtC7INC60L7QvNC80LXQvdGC0LDRgNC40Y8sINC60L7RgtC+0YDRi9C5XG7QvdC1INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQsiDRgtC10LrRg9GJ0LXQvCDRgdC+0L7QsdGJ0LXQvdC40Lgg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjkxIGJ1aWx0aW4vY29tbWl0LmM6NzI0IGJ1aWx0aW4vY29tbWl0LmM6MTA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/RgNC+0YHQuNGC0Ywg0LrQvtC80LzQuNGCICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMyBidWlsdGluL3Nob3J0bG9nLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIijRh9GC0LXQvdC40LUg0YTQsNC50LvQsCDQttGD0YDQvdCw0LvQsCDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwNQorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyDQttGD0YDQvdCw0LvQsCDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyDQttGD0YDQvdCw0LvQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzQwIGJ1aWx0aW4vY29tbWl0LmM6NzU2Cittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0YwgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NDcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIE1FUkdFX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MDcKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0YjQsNCx0LvQvtC9INC+0L/QuNGB0LDQvdC40Y8g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiXG7Qn9C+0YXQvtC20LUsINGH0YLQviDQstGLINC/0YvRgtCw0LXRgtC10YHRjCDQt9Cw0LrQvtC80LzQuNGC0LjRgtGMINGB0LvQuNGP0L3QuNC1Llxu0JXRgdC70Lgg0Y3RgtC+INC+0YjQuNCx0LrQsCwg0L/QvtC20LDQu9GD0LnRgdGC0LAg0YPQtNCw0LvQuNGC0LUg0YTQsNC50Ltcblx0JXNcbtC4INC/0L7Qv9GA0L7QsdGD0LnRgtC1INGB0L3QvtCy0LAuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiXG7Qn9C+0YXQvtC20LUsINGH0YLQviDQstGLINC/0YvRgtCw0LXRgtC10YHRjCDQt9Cw0LrQvtC80LzQuNGC0LjRgtGMINC/0YDQuCDQutC+0L/QuNGA0L7QstCw0L3QuNC4INC60L7QvNC80LjRgtCwLlxu0JXRgdC70Lgg0Y3RgtC+INC90LUg0YLQsNC6LCDRgtC+INGD0LTQsNC70LjRgtC1INGE0LDQudC7XG5cdCVzXG7QuCDQv9C+0L/RgNC+0LHRg9C50YLQtSDRgdC90L7QstCwLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC00LvRjyDQstCw0YjQuNGFINC40LfQvNC10L3QtdC90LjQuS4g0KHRgtGA0L7QutC4LFxu0L3QsNGH0LjQvdCw0Y7RidC40LXRgdGPINGBIMKrJWPCuyDQsdGD0LTRg9GCINC/0YDQvtC40LPQvdC+0YDQuNGA0L7QstCw0L3Riywg0LAg0L/Rg9GB0YLQvtC1INGB0L7QvtCx0YnQtdC90LjQtVxu0L7RgtC80LXQvdGP0LXRgiDQv9GA0L7RhtC10YHRgSDQutC+0LzQvNC40YLQsC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0LTQu9GPINCy0LDRiNC40YUg0LjQt9C80LXQvdC10L3QuNC5LiDQodGC0YDQvtC60LgsXG7QvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEgwqslY8K7INCx0YPQtNGD0YIg0L7RgdGC0LDQstC70LXQvdGLOyDQstGLINC80L7QttC10YLQtSDRg9C00LDQu9C40YLRjCDQuNGFINCy0YDRg9GH0L3Rg9GOLFxu0LXRgdC70Lgg0YXQvtGC0LjRgtC1LiDQn9GD0YHRgtC+0LUg0YHQvtC+0LHRidC10L3QuNC1INC+0YLQvNC10L3Rj9C10YIg0L/RgNC+0YbQtdGB0YEg0LrQvtC80LzQuNGC0LAuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPQkNCy0YLQvtGAOiAgICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXPQlNCw0YLQsDogICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc9Ca0L7QvNC80LjRgtC10YA6ICAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MDIKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk2OQorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC4INC/0L7RgdGC0YDQvtC10L3QuNC4INC00LXRgNC10LLRjNC10LIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTgzIGJ1aWx0aW4vdGFnLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINGD0LrQsNC20LjRgtC1INGB0L7QvtCx0YnQtdC90LjQtSwg0L/RgNC4INGD0LrQsNC30LDQvdC40Lgg0L7Qv9GG0LjQuSAtbSDQuNC70LggLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIi0tYXV0aG9yIMKrJXPCuyDQvdC1INCyINGE0L7RgNC80LDRgtC1IMKr0JjQvNGPIDzQv9C+0YfRgtCwPsK7INC4INC90LUg0YHQvtCy0L/QsNC00LDQtdGCINGBINGB0YPRidC10YHRgtCy0YPRjtGJ0LjQvCDQsNCy0YLQvtGA0L7QvCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaWdub3JlZCBtb2RlICclcyciCittc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80YvQuSDRgNC10LbQuNC8INC/0L7QutCw0LfQsCDQuNCz0L3QvtGA0LjRgNGD0LXQvNGL0YUg0YTQsNC50LvQvtCyIMKrJXPCuyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU5IGJ1aWx0aW4vY29tbWl0LmM6MTI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90YvQuSDRgNC10LbQuNC8INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIgwqslc8K7IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwOTcKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbG9uZyDQuCAteiDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTMwCittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0KPQutCw0LfQsNC90LjQtSDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0L7Qv9GG0LjQuSAtLXJlc2V0LWF1dGhvciDQuCAtLWF1dGhvciDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMzkKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAi0J3QtdGH0LXQs9C+INC40YHQv9GA0LDQstC70Y/RgtGMLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQyCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAi0JLRiyDQsiDQv9GA0L7RhtC10YHRgdC1INGB0LvQuNGP0L3QuNGPIOKAlCAg0YHQtdC50YfQsNGBINC90LXQu9GM0LfRjyDQuNGB0L/RgNCw0LLQu9GP0YLRjC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0NAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgItCS0Ysg0LIg0L/RgNC+0YbQtdGB0YHQtSDQutC+0L/QuNGA0L7QstCw0L3QuNGPINC60L7QvNC80LjRgtCwIOKAlCAg0YHQtdC50YfQsNGBINC90LXQu9GM0LfRjyDQuNGB0L/RgNCw0LLQu9GP0YLRjC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0NworbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgItCe0L/RhtC40LggLS1zcXVhc2gg0LggLS1maXh1cCDQvdC1INC80L7Qs9GD0YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1NworbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICLQnNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YLQvtC70YzQutC+INC+0LTQvdCwINC40Lcg0L7Qv9GG0LjQuSAtYy8tQy8tRi8tLWZpeHVwLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTU5Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjcKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICItLXJlc2V0LWF1dGhvciDQvNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YLQvtC70YzQutC+INC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSDQvtC/0YbQuNGP0LzQuCAtQywgLWMg0LjQu9C4IC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODQKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgItCc0L7QttC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDRgtC+0LvRjNC60L4g0L7QtNC90LAg0LjQtyDQvtC/0YbQuNC5IC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTg2Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QuNC1INC/0YPRgtC10Lkg0LrQsNGC0LDQu9C+0LPQvtCyINGBINC+0L/RhtC40Y/QvNC4IC0taW5jbHVkZS8tLW9ubHkg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzE5IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAi0LrRgNCw0YLQutC+INC/0L7QutCw0LfQsNGC0Ywg0YHRgtCw0YLRg9GBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjEgYnVpbHRpbi9jb21taXQuYzoxNTA1Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LLQtdGA0YHQuNC4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjMKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INGB0L/RgNGP0YLQsNC90L3QvtC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjUgYnVpbHRpbi9jb21taXQuYzoxNTA3Cittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI3Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAi0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjcgYnVpbHRpbi9jb21taXQuYzoxNTA5IGJ1aWx0aW4vcHVzaC5jOjU2MQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY0MworbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICLQvNCw0YjQuNC90L7Rh9C40YLQsNC10LzRi9C5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzMCBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YHRgtCw0YLRg9GBINCyINC00LvQuNC90L3QvtC8INGE0L7RgNC80LDRgtC1ICjQv9C+INGD0LzQvtC70YfQsNC90LjRjikiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzMyBidWlsdGluL2NvbW1pdC5jOjE1MTQKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAi0LfQsNCy0LXRgNGI0LDRgtGMINC30LDQv9C40YHQuCDQndCj0JvQldCS0KvQnCDQsdCw0LnRgtC+0LwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzNSBidWlsdGluL2NvbW1pdC5jOjEzMzkgYnVpbHRpbi9jb21taXQuYzoxNTE3CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA4NSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA4OCBidWlsdGluL3JlYmFzZS5jOjE0NjUKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzEKK21zZ2lkICJtb2RlIgorbXNnc3RyICLRgNC10LbQuNC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzYgYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLLCDQvtC/0YbQuNC+0L3QsNC70YzQvdGL0LUg0YDQtdC20LjQvNGLOiBhbGwgKNCy0YHQtSksIG5vcm1hbCAo0LrQsNC6INC+0LHRi9GH0L3QviksIG5vICjQvdC10YIpLiAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MAorbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LjQs9C90L7RgNC40YDRg9C10LzRi9C1INGE0LDQudC70YssINGBINC+0L/RhtC40L7QvdCw0LvRjNC90YvQvCDRgNC10LbQuNC80L7QvDogdHJhZGl0aW9uYWwgKNGC0YDQsNC00LjRhtC40L7QvdC90YvQuSksIG1hdGNoaW5nICjRgtC+0LvRjNC60L4g0YHQvtCy0L/QsNC00LDRjtGJ0LjQtSksIG5vICjQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMKS4gKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiB0cmFkaXRpb25hbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MiBwYXJzZS1vcHRpb25zLmg6MTc5Cittc2dpZCAid2hlbiIKK21zZ3N0ciAi0LrQvtCz0LTQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQzCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINC/0L7QtNC80L7QtNGD0LvRj9GFLCDQvtC/0YbQuNC+0L3QsNC70YzQvdC+INC60L7Qs9C00LA6IGFsbCAo0LLRgdC10LPQtNCwKSwgZGlydHkgKNC40LfQvNC10L3RkdC90L3Ri9C1KSwgdW50cmFja2VkICjQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUpLiAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0NQorbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0L/QviDRgdGC0L7Qu9Cx0YbQsNC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDYKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgItC90LUg0L7Qv9GA0LXQtNC10LvRj9GC0Ywg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQ4Cittc2dpZCAiZGV0ZWN0IHJlbmFtZXMsIG9wdGlvbmFsbHkgc2V0IHNpbWlsYXJpdHkgaW5kZXgiCittc2dzdHIgItC+0L/RgNC10LTQtdC70Y/RgtGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8sINC+0L/RhtC40L7QvdCw0LvRjNC90L4g0YPRgdGC0LDQvdCw0LLQu9C40LLQsNGC0Ywg0YDQtdC50YLQuNC90LMg0YHRhdC+0LTRgdGC0LLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4Cittc2dpZCAiVW5zdXBwb3J0ZWQgY29tYmluYXRpb24gb2YgaWdub3JlZCBhbmQgdW50cmFja2VkLWZpbGVzIGFyZ3VtZW50cyIKK21zZ3N0ciAi0J3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNCw0Y8g0LrQvtC80LHQuNC90LDRhtC40Y8g0LDRgNCz0YPQvNC10L3RgtC+0LIg0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQuNCz0L3QvtGA0LjRgNGD0LXQvNGL0YUg0Lgg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDczCittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINGB0LLQvtC00LrRgyDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtGB0LvQtSDRg9GB0L/QtdGI0L3QvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3NAorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INCyINGI0LDQsdC70L7QvSDRgdC+0L7QsdGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3NgorbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0YHQvtC+0LHRidC10L3QuNGPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzcgYnVpbHRpbi9tZXJnZS5jOjI3MiBidWlsdGluL3RhZy5jOjQwOAorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LjQtyDRhNCw0LnQu9CwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzgKK21zZ2lkICJhdXRob3IiCittc2dzdHIgItCw0LLRgtC+0YAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3OAorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICLQv9C+0LTQvNC10L3QuNGC0Ywg0LDQstGC0L7RgNCwINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzkgYnVpbHRpbi9nYy5jOjUzOQorbXNnaWQgImRhdGUiCittc2dzdHIgItC00LDRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzkKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgItC/0L7QtNC80LXQvdC40YLRjCDQtNCw0YLRgyDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDgxIGJ1aWx0aW4vY29tbWl0LmM6MTQ4MiBidWlsdGluL2NvbW1pdC5jOjE0ODMKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NCBwYXJzZS1vcHRpb25zLmg6MzIzIHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAi0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODEKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC4INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0L7RgiDRg9C60LDQt9Cw0L3QvdC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDgyCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4MworbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdC+0LUg0YHQvtC+0LHRidC10L3QuNC1INCw0LLRgtC+0YPQv9C70L7RgtC90LXQvdC40Y8g0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8g0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3QvtC1INGB0L7QvtCx0YnQtdC90LjQtSDQsNCy0YLQvtGD0L/Qu9C+0YLQvdC10L3QuNGPINC00LvRjyDRg9C/0LvQvtGC0L3QtdC90LjRjyDRg9C60LDQt9Cw0L3QvdC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg1Cittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAi0LrQvtC80LzQuNGCINGC0LXQv9C10YDRjCDQt9CwINC80L7QuNC8INCw0LLRgtC+0YDRgdGC0LLQvtC8ICjQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0YEgLUMvLWMvLS1hbWVuZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NiBidWlsdGluL2xvZy5jOjE1NDEgYnVpbHRpbi9tZXJnZS5jOjI4NQorIzogYnVpbHRpbi9wdWxsLmM6MTYyIGJ1aWx0aW4vcmV2ZXJ0LmM6MTA5Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMIFNpZ25lZC1vZmYtYnk6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODcKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRg9C60LDQt9Cw0L3QvdGL0Lkg0YTQsNC50Lsg0YjQsNCx0LvQvtC90LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4OAorbXNnaWQgImZvcmNlIGVkaXQgb2YgY29tbWl0IgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MAorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINGB0YLQsNGC0YPRgSDRhNCw0LnQu9C+0LIg0LIg0YjQsNCx0LvQvtC9INGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk2Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLQt9Cw0LrQvtC80LzQuNGC0LjRgtGMINCy0YHQtSDQuNC30LzQtdC90LXQvdC90YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0YPQutCw0LfQsNC90L3Ri9C1INGE0LDQudC70Ysg0LIg0LjQvdC00LXQutGBINC00LvRjyDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QvtC1INC00L7QsdCw0LLQu9C10L3QuNC1INGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LUg0LTQvtCx0LDQstC70LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgItC30LDQutC+0LzQvNC40YLQuNGC0Ywg0YLQvtC70YzQutC+INGD0LrQsNC30LDQvdC90YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDEKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0L/QtdGA0LXRhdCy0LDRgtGH0LjQuiBwcmUtY29tbWl0INC4IGNvbW1pdC1tc2ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMgorbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0YwsINGH0YLQviDQsdGD0LTQtdGCINC30LDQutC+0LzQvNC40YfQtdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNQorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi0LjRgdC/0YDQsNCy0LjRgtGMINC/0YDQtdC00YvQtNGD0YnQuNC5INC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHRgtC40YLRjCDQv9C10YDQtdGF0LLQsNGC0YfQuNC6IHBvc3QtcmV3cml0ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIxCittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC30LDQv9C40YHRjCDQv9GD0YHRgtC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC30LDQv9C40YHRjCDQuNC30LzQtdC90LXQvdC40Lkg0YEg0L/Rg9GB0YLRi9C8INGB0L7QvtCx0YnQtdC90LjQtdC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAi0KTQsNC50LsgTUVSR0VfSEVBRCDQv9C+0LLRgNC10LbQtNC10L0gKCVzKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjAzCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0YwgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LA6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAi0J7RgtC80LXQvdCwINC60L7QvNC80LjRgtCwINC40Lct0LfQsCDQv9GD0YHRgtC+0LPQviDRgdC+0L7QsdGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgItCe0YLQvNC10L3QsCDQutC+0LzQvNC40YLQsDsg0LLRiyDQvdC1INC40LfQvNC10L3QuNC70Lgg0YHQvtC+0LHRidC10L3QuNC1LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NjgKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc2V0IEhFQURcIiB0byByZWNvdmVyLiIKK21zZ3N0ciAi0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQsdGL0Lsg0L7QsdC90L7QstC70LXQvSwg0L3QviDQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0YTQsNC50LsgbmV3X2luZGV4LiDQo9C00L7RgdGC0L7QstC10YDRjNGC0LXRgdGMLCDRh9GC0L4g0L3QsCDQtNC40YHQutC1INC10YHRgtGMINGB0LLQvtCx0L7QtNC90L7QtSDQvNC10YHRgtC+INC4INC60LLQvtGC0LAg0L3QtSDQuNGB0YfQtdGA0L/QsNC90LAsINCwINC/0L7RgdC70LUg0Y3RgtC+0LPQviDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmVzZXQgSEVBRMK7INC00LvRjyDQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNGPLiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMAorbXNnaWQgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCittc2dzdHIgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA80LrQsNGC0LDQu9C+0LMt0L7QsdGK0LXQutGC0L7Qsj5dIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjMKK21zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCittc2dzdHIgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDzQutCw0YLQsNC70L7Qsy3QvtCx0YrQtdC60YLQvtCyPl0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxOAorbXNnaWQgImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDzQutCw0YLQsNC70L7Qsy3QvtCx0YrQtdC60YLQvtCyPl0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTMgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyOAorbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLWFwcGVuZF0gWy0tcmVhY2hhYmxlIgorInwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10iCittc2dzdHIgImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA80LrQsNGC0LDQu9C+0LMt0L7QsdGK0LXQutGC0L7Qsj5dIFstLWFwcGVuZF0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjg5CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE0NyBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjIwNSBidWlsdGluL2ZldGNoLmM6MTUzCisjOiBidWlsdGluL2xvZy5jOjE1NjEKK21zZ2lkICJkaXIiCittc2dzdHIgItC60LDRgtCw0LvQvtCzIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6OTAKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjA2Cittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyDQvtCx0YrQtdC60YLQvtCyINC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjyDQs9GA0LDRhNCwIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjY4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGE0LDQudC7IGNvbW1pdC1ncmFwaCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTUwCittc2dpZCAic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIKK21zZ3N0ciAi0L3QsNGH0LDRgtGMINGB0L4g0LLRgdC10YUg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE1MgorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAi0LjRgdC60LDRgtGMINC60L7QvNC80LjRgtGLINCyIHBhY2staW5kZXhlcywg0L/QtdGA0LXRh9C40YHQu9C10L3QvdGL0YUg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QvtC8INCy0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTU0Cittc2dpZCAic3RhcnQgd2FsayBhdCBjb21taXRzIGxpc3RlZCBieSBzdGRpbiIKK21zZ3N0ciAi0L3QsNGH0LDRgtGMINGBINC60L7QvNC80LjRgtC+0LIsINC/0LXRgNC10YfQuNGB0LvQtdC90L3Ri9GFINC90LAg0YHRgtCw0L3QtNCw0YDRgtC90L7QvCDQstCy0L7QtNC1IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE1NgorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0LLRgdC1INC60L7QvNC80LjRgtGLLCDQutC+0YLQvtGA0YvQtSDRg9C20LUg0LXRgdGC0Ywg0LIg0YTQsNC50LvQtSBjb21taXQtZ3JhcGgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTY1Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgItC40YHQv9C+0LvRjNC30YPQudGC0LUg0YfRgtC+LdGC0L4g0L7QtNC90L4g0LjQtyAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzINC4IC0tc3RkaW4tcGFja3MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNQorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI0Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgItCg0LDQt9C80LXRidC10L3QuNC1INGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNQorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQs9C70L7QsdCw0LvRjNC90YvQuSDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGB0LjRgdGC0LXQvNC90YvQuSDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjgKK21zZ2lkICJ1c2UgcGVyLXdvcmt0cmVlIGNvbmZpZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI5Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YPQutCw0LfQsNC90L3Ri9C5INGE0LDQudC7INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICLQuNC00LXQvdGCLdC00LLQvtC40YfQvS3QvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0L3QsNGB0YLRgNC+0LnQutC4INC40Lcg0YPQutCw0LfQsNC90L3QvtCz0L4g0LTQstC+0LjRh9C90L7Qs9C+INC+0LHRitC10LrRgtCwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAi0JTQtdC50YHRgtCy0LjQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi0L/QvtC70YPRh9C40YLRjCDQt9C90LDRh9C10L3QuNC1OiDQuNC80Y8gW9GI0LDQsdC70L7QvS3Qt9C90LDRh9C10L3QuNC5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC/0L7Qu9GD0YfQuNGC0Ywg0LLRgdC1INC30L3QsNGH0LXQvdC40Y86INC60LvRjtGHIFvRiNCw0LHQu9C+0L0t0LfQvdCw0YfQtdC90LjQuV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM0Cittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC/0L7Qu9GD0YfQuNGC0Ywg0LfQvdCw0YfQtdC90LjRjyDQv9C+INGI0LDQsdC70L7QvdGDOiDRiNCw0LHQu9C+0L0t0LjQvNC10L0gW9GI0LDQsdC70L7QvS3Qt9C90LDRh9C10L3QuNC5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzUKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICLQv9C+0LvRg9GH0LjRgtGMINC30L3QsNGH0LXQvdC40LUsINGB0L/QtdGG0LjRhNC40YfQvdC+0LUg0LTQu9GPIFVSTDog0YDQsNC30LTQtdC7Wy7Qv9C10YDQtdC80LXQvdC90LDRj10gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNgorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICLQt9Cw0LzQtdC90LjRgtGMINCy0YHQtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LUg0L/QtdGA0LXQvNC10L3QvdGL0LU6INC40LzRjyDQt9C90LDRh9C10L3QuNC1IFvRiNCw0LHQu9C+0L0t0LfQvdCw0YfQtdC90LjQuV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC90L7QstGD0Y4g0L/QtdGA0LXQvNC10L3QvdGD0Y46INC40LzRjyDQt9C90LDRh9C10L3QuNC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOAorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItGD0LTQsNC70LjRgtGMINC/0LXRgNC10LzQtdC90L3Rg9GOOiDQuNC80Y8gW9GI0LDQsdC70L7QvS3Qt9C90LDRh9C10L3QuNC5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzkKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0LLRgdC1INGB0L7QstC/0LDQtNCw0Y7RidC40LU6INC40LzRjyBb0YjQsNCx0LvQvtC9LdC30L3QsNGH0LXQvdC40LldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAi0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0YDQsNC30LTQtdC7OiDRgdGC0LDRgNC+0LUt0LjQvNGPINC90L7QstC+0LUt0LjQvNGPIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINGA0LDQt9C00LXQuzog0LjQvNGPIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINCy0LXRgdGMINGB0L/QuNGB0L7QuiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDMKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAi0L7RgtC60YDRi9GC0Ywg0LIg0YDQtdC00LDQutGC0L7RgNC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICLQvdCw0LnRgtC4INC90LDRgdGC0YDQvtC10L3QvdGL0Lkg0YbQstC10YI6INGA0LDQt9C00LXQuyBb0L/Qvi3Rg9C80L7Qu9GH0LDQvdC40Y5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0YwsINGB0YPRidC10YHRgtCy0YPQtdGCINC70Lgg0L3QsNGB0YLRgNC+0LXQvdC90YvQuSDRhtCy0LXRgjog0YDQsNC30LTQtdC7IFtzdGRvdXQt0LXRgdGC0YwtdHR5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDYKK21zZ2lkICJUeXBlIgorbXNnc3RyICLQotC40L8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3Cittc2dpZCAidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICLQt9C90LDRh9C10L3QuNC1IOKAlCDRjdGC0L4gwqt0cnVlwrsgKNC/0YDQsNCy0LTQsCkg0LjQu9C4IMKrZmFsc2XCuyAo0LvQvtC20YwpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OQorbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICLQt9C90LDRh9C10L3QuNC1IOKAlCDRjdGC0L4g0LTQtdGB0Y/RgtC40YfQvdC+0LUg0YfQuNGB0LvQviIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgItC30L3QsNGH0LXQvdC40LUg4oCUINGN0YLQviAtLWJvb2wg0LjQu9C4IC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgItC30L3QsNGH0LXQvdC40LUg4oCUINGN0YLQviDQv9GD0YLRjCAo0Log0YTQsNC50LvRgyDQuNC70Lgg0LrQsNGC0LDQu9C+0LPRgykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUyCittc2dpZCAidmFsdWUgaXMgYW4gZXhwaXJ5IGRhdGUiCittc2dzdHIgItC30L3QsNGH0LXQvdC40LUgLSDRjdGC0L4g0LTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPINGB0YDQvtC60LAg0LTQtdC50YHRgtCy0LjRjyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAi0JTRgNGD0LPQvtC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi0LfQsNCy0LXRgNGI0LDRgtGMINC30L3QsNGH0LXQvdC40Y8g0J3Qo9Cb0JXQktCr0Jwg0LHQsNC50YLQvtC8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NQorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0YLQvtC70YzQutC+INC40LzQtdC90LAg0L/QtdGA0LXQvNC10L3QvdGL0YUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICLRg9GH0LjRgtGL0LLQsNGC0Ywg0LTQuNGA0LXQutGC0LjQstGLIGluY2x1ZGUgKNCy0LrQu9GO0YfQtdC90LjRjyDRhNCw0LnQu9C+0LIpINC/0YDQuCDQt9Cw0L/RgNC+0YHQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTcKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YfQvdC40Log0L3QsNGB0YLRgNC+0LnQutC4ICjRhNCw0LnQuywg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQstCy0L7QtCwg0LTQstC+0LjRh9C90YvQuSDQvtCx0YrQtdC60YIsINC60L7QvNCw0L3QtNC90LDRjyDRgdGC0YDQvtC60LApIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgInZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgZnJvbSAlZCB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ0MworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQt9C90LDRh9C10L3QuNC1INGG0LLQtdGC0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk2IGJ1aWx0aW4vY29uZmlnLmM6NzQyCittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5OQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUwMgorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKK21zZ3N0ciAiIyDQrdGC0L4g0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyBHaXQuXG5bdXNlcl1cbiMg0J/QvtC20LDQu9GD0LnRgdGC0LAsINCw0LTQsNC/0YLQuNGA0YPQudGC0LUg0Lgg0YDQsNGB0LrQvtC80LzQtdC90YLQuNGA0YPQudGC0LUg0YHQu9C10LTRg9GO0YnQuNC1INGB0YLRgNC+0LrQuDpcbiNcdHVzZXIgPSAlc1xuI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxMQorbXNnaWQgIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxNgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LLQvdGD0YLRgNC4IGdpdCDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxOQorbXNnaWQgIi0tYmxvYiBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjM4Cittc2dpZCAiJEhPTUUgbm90IHNldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1OAorbXNnaWQgIiIKKyItLXdvcmt0cmVlIGNhbm5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgd29ya2luZyB0cmVlcyB1bmxlc3MgdGhlIGNvbmZpZ1xuIgorImV4dGVuc2lvbiB3b3JrdHJlZUNvbmZpZyBpcyBlbmFibGVkLiBQbGVhc2UgcmVhZCBcIkNPTkZJR1VSQVRJT04gRklMRVwiXG4iCisic2VjdGlvbiBpbiBcImdpdCBoZWxwIHdvcmt0cmVlXCIgZm9yIGRldGFpbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2ODgKK21zZ2lkICItLWdldC1jb2xvciBhbmQgdmFyaWFibGUgdHlwZSBhcmUgaW5jb2hlcmVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5MworbXNnaWQgIm9ubHkgb25lIGFjdGlvbiBhdCBhIHRpbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MDYKK21zZ2lkICItLW5hbWUtb25seSBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1saXN0IG9yIC0tZ2V0LXJlZ2V4cCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxMgorbXNnaWQgIiIKKyItLXNob3ctb3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCwgLS1nZXQtYWxsLCAtLWdldC1yZWdleHAsIGFuZCAiCisiLS1saXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE4Cittc2dpZCAiLS1kZWZhdWx0IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgImVkaXRpbmcgc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0L/QtdGA0LXQt9Cw0L/QuNGB0LDRgtGMINC90LXRgdC60L7Qu9GM0LrQviDQt9C90LDRh9C10L3QuNC5INC+0LTQvdC40LxcbiAgICAgICDQmNGB0L/QvtC70YzQt9GD0LnRgtC1INGA0LXQs9GD0LvRj9GA0L3Ri9C1INCy0YvRgNCw0LbQtdC90LjRjywg0L/QsNGA0LDQvNC10YLRgNGLIC0tYWRkINC40LvQuCAtLXJlcGxhY2UtYWxsLCDRh9GC0L7QsdGLINC40LfQvNC10L3QuNGC0YwgJXMuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjg0NyBidWlsdGluL2NvbmZpZy5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHNlY3Rpb246ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjkwCittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKK21zZ3N0ciAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6MTAwCittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICLQstGL0LLQvtC0INGA0LDQt9C80LXRgNC+0LIg0LIg0YPQtNC+0LHQvtGH0LjRgtCw0LXQvNC+0Lwg0LTQu9GPINGH0LXQu9C+0LLQtdC60LAg0LLQuNC00LUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs80L7Qv9GG0LjQuD5dIFs80YPQutCw0LfQsNGC0LXQu9GMLdC60L7QvNC80LjRgtCwPuKApl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyOAorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzzQvtC/0YbQuNC4Pl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYzCittc2dpZCAiaGVhZCIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQu9GMINC90LAg0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYzCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgItC70LXQs9C60L7QstC10YHQvdGL0LkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MworbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAi0LDQvdC90L7RgtC40YDQvtCy0LDQvdC90YvQuSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgItCw0L3QvdC+0YLQuNGA0L7QstCw0L3QvdCw0Y8g0LzQtdGC0LrQsCAlcyDQvdC1INC00L7RgdGC0YPQv9C90LAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAi0LDQvdC90L7RgtC40YDQvtCy0LDQvdC90LDRjyDQvNC10YLQutCwICVzINC90LUg0YHQvtC00LXRgNC20LjRgiDQstGB0YLRgNC+0LXQvdC90L7Qs9C+INC90LDQt9Cy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAi0LzQtdGC0LrQsCDCqyVzwrsg0YPQttC1INC30LTQtdGB0Ywgwqslc8K7IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAi0L3QtdGCINC80LXRgtC+0LosINGC0L7Rh9C90L4g0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNGFIMKrJXPCuyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIgorbXNnc3RyICLQndC10YIg0YLQvtGH0L3Ri9GFINGB0L7QstC/0LDQtNC10L3QuNC5INC/0L4g0YHRgdGL0LvQutCw0Lwg0LjQu9C4INGC0LXQs9Cw0LwsINC40YnRgyDQvtC/0LjRgdCw0L3QuNGPXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgItC/0L7QuNGB0Log0L7QutC+0L3Rh9C10L0g0L3QsCAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICLQndC10YIg0LDQvdC90L7RgtC40YDQvtCy0LDQvdC90YvRhSDQvNC10YLQvtC6LCDQutC+0YLQvtGA0YvQtSDQvNC+0LPRg9GCINC+0L/QuNGB0LDRgtGMIMKrJXPCuy5cbtCd0L4g0LjQvNC10Y7RgtGB0Y8g0L3QtdCw0L3QvdC+0YLQuNGA0L7QstCw0L3QvdGL0LUg0LzQtdGC0LrQuDog0L/QvtC/0YDQvtCx0YPQudGC0LUg0LTQvtCx0LDQstC40YLRjCDQv9Cw0YDQsNC80LXRgtGAIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAi0J3QtdGCINC80LXRgtC+0LosINC60L7RgtC+0YDRi9C1INC80L7Qs9GD0YIg0L7Qv9C40YHQsNGC0Ywgwqslc+KApi5cbtCf0L7Qv9GA0L7QsdGD0LnRgtC1INC00L7QsdCw0LLQuNGC0Ywg0L/QsNGA0LDQvNC10YLRgCAtLWFsd2F5cyDQuNC70Lgg0YHQvtC30LTQsNGC0Ywg0LrQsNC60LjQtS3QvdC40LHRg9C00Ywg0LzQtdGC0LrQuC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgItC/0L7RgdC10YnQtdC90L4gJWx1INC60L7QvNC80LjRgtC+0LJcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgItCx0L7Qu9C10LUgJWkg0LzQtdGC0L7QuiDQvdCw0LnQtNC10L3Qvjsg0L/QvtC60LDQt9Cw0L3QviDQv9C+0YHQu9C10LTQvdC40LUgJWlcbtC+0YHRgtCw0L3QvtCy0LvQtdC9INC/0L7QuNGB0Log0L/QvtGB0LvQtSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgItC+0L/QuNGB0LDRgtGMICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQuNC80Y8g0L7QsdGK0LXQutGC0LAgJXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIKK21zZ3N0ciAiJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC60L7QvNC80LjRgtC+0Lwg0LjQu9C4INC00LLQvtC40YfQvdGL0Lwg0L7QsdGK0LXQutGC0L7QvCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNQorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgItC/0L7QuNGB0Log0LzQtdGC0LrQuCwg0LrQvtGC0L7RgNCw0Y8g0LjQtNC10YIg0L/QvtGB0LvQtSDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNgorbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgItCy0YvQstC+0LQg0L7RgtC70LDQtNC+0YfQvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40Lgg0YHRgtGA0LDRgtC10LPQuNC4INC/0L7QuNGB0LrQsCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNworbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LvRjtCx0YPRjiDRgdGB0YvQu9C60YMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzgKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC70Y7QsdGD0Y4g0LzQtdGC0LrRgywg0LTQsNC20LUg0L3QtdCw0L3QvdC+0YLQuNGA0L7QstCw0L3QvdGD0Y4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzkKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICLQstGB0LXQs9C00LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC00LvQuNC90L3Ri9C5INGE0L7RgNC80LDRgiDQstGL0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDAKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgItGB0LvQtdC00L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LfQsCDQv9C10YDQstGL0Lwg0YDQvtC00LjRgtC10LvQtdC8IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQzCittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0YLQvtGH0L3Ri9C1INGB0L7QstC/0LDQtNC10L3QuNGPIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ1Cittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAi0YDQsNGB0YHQvNCw0YLRgNC40LLQsNGC0Ywg0L/QvtGB0LvQtdC00L3QuNC1IDxuPiDQvNC10YLQvtC6ICjQv9C+INGD0LzQvtC70YfQsNC90LjRjjogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ3Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0YDQsNGB0YHQvNCw0YLRgNC40LLQsNGC0Ywg0YLQvtC70YzQutC+INC80LXRgtC60Lgg0L/QviA80YjQsNCx0LvQvtC90YM+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ5Cittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLQvdC1INGD0YfQuNGC0YvQstCw0YLRjCDQvNC10YLQutC4LCDQutC+0YLQvtGA0YvQtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RgiA80YjQsNCx0LvQvtC90YM+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxIGJ1aWx0aW4vbmFtZS1yZXYuYzo0MjYKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgItC10YHQu9C4INC90LUg0L3QsNC50LTQtdC90L4sINC/0L7QutCw0LfQsNGC0Ywg0YHQvtC60YDQsNGJ0LXQvdC90YvQuSDQvdC+0LzQtdGAINGA0LXQtNCw0LrRhtC40Lgg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTIgYnVpbHRpbi9kZXNjcmliZS5jOjU1NQorbXNnaWQgIm1hcmsiCittc2dzdHIgItC/0L7QvNC10YLQutCwIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMIDzQv9C+0LzQtdGC0LrRgz4g0L/RgNC4INC40LfQvNC10L3RkdC90L3QvtC8INGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUgKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDCqy1kaXJ0ecK7KSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMIDzQv9C+0LzQtdGC0LrRgz4g0L3QsCDQv9C+0LLRgNC10LbQtNGR0L3QvdC+0LUg0YDQsNCx0L7Rh9C10LUg0LTQtdGA0LXQstC+ICjQv9C+INGD0LzQvtC70YfQsNC90LjRjjogwqstYnJva2VuwrspIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTc0Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyDQvdC10YHQvtCy0LzQtdGB0YLQuNC80L4g0YEgLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYwMworbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICLQmNC80LXQvdCwINC90LUg0L3QsNC50LTQtdC90YssINC90LUg0LzQvtCz0YMg0L3QuNGH0LXQs9C+INC+0L/QuNGB0LDRgtGMLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1NAorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWRpcnR5INC90LXRgdC+0LLQvNC10YHRgtC40LzQviDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0YPQutCw0LfQsNGC0LXQu9C10Lkg0LrQvtC80LzQuNGC0L7QsiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1NgorbXNnaWQgIi0tYnJva2VuIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1icm9rZW4g0L3QtdGB0L7QstC80LXRgdGC0LjQvNC+INGBINGD0LrQsNC30LDQvdC40LXQvCDRg9C60LDQt9Cw0YLQtdC70LXQuSDQutC+0LzQvNC40YLQvtCyIgorCisjOiBidWlsdGluL2RpZmYuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAiwqslc8K7OiDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L7QsdGL0YfQvdGL0Lwg0YTQsNC50LvQvtC8INC40LvQuCDRgdC40LzQstC+0LvRjNC90L7QuSDRgdGB0YvQu9C60L7QuSIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YA6ICVzIgorCisjOiBidWlsdGluL2RpZmYuYzozNTAKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J3QtSDQvdCw0LnQtNC10L0gZ2l0INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0L0g0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC+0LHRitC10LrRgiDCqyVzwrsuIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0L3QviDQsdC+0LvRjNGI0LUg0LTQstGD0YUg0LTQstC+0LjRh9C90YvRhSDQvtCx0YrQtdC60YLQvtCyOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLQv9C10YDQtdC00LDQvSDQvdC10L7QsdGA0LDQsdC+0YLQsNC90L3Ri9C5INC+0LHRitC10LrRgiDCqyVzwrsuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBkaWZmdG9vbCBbPNC+0L/RhtC40Lg+XSBbPNC60L7QvNC80LjRgj4gWzzQutC+0LzQvNC40YI+XV0gWy0tXSBbPNC/0YPRgtGMPuKApl0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkOiAlZCIKK21zZ3N0ciAi0YHQsdC+0Lk6ICVkIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGB0LjQvNCy0L7Qu9GM0L3Rg9GOINGB0YHRi9C70LrRgyAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI5NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGE0LDQudC7INGB0LjQvNCy0L7Qu9GM0L3QvtC5INGB0YHRi9C70LrQuCAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHRitC10LrRgiAlcyDQtNC70Y8g0YHQuNC80LLQvtC70YzQvdC+0Lkg0YHRgdGL0LvQutC4ICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NDA2Cittc2dpZCAiIgorImNvbWJpbmVkIGRpZmYgZm9ybWF0cygnLWMnIGFuZCAnLS1jYycpIGFyZSBub3Qgc3VwcG9ydGVkIGluXG4iCisiZGlyZWN0b3J5IGRpZmYgbW9kZSgnLWQnIGFuZCAnLS1kaXItZGlmZicpLiIKK21zZ3N0ciAi0LrQvtC80LHQuNC90LjRgNC+0LLQsNC90L3Ri9C1INGE0L7RgNC80LDRgtGLINGE0LDQudC70L7QsiDRgdC/0LjRgdC60LAg0LjQt9C80LXQvdC10L3QuNC5KMKrLWPCuyDQuCDCqy0tY2PCuykg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNGO0YLRgdGPINCyINGA0LXQttC40LzQtSDRgdGA0LDQstC90LXQvdC40Y8g0LrQsNGC0LDQu9C+0LPQvtCyKMKrLWTCuyDQuCDCqy0tZGlyLWRpZmbCuykuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIgorbXNnc3RyICLQvtCx0LAg0YTQsNC50LvQsCDQuNC30LzQtdC90LXQvdGLOiDCqyVzwrsg0Lggwqslc8K7LiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYyOAorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICLRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQsdGL0Lsg0L/QvtC60LjQvdGD0YIuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3Ri9C1INGE0LDQudC70Ysg0YPQttC1INC90LDRhdC+0LTRj9GC0YHRjyDQsiDCqyVzwrsuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQwCittc2dpZCAieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iCittc2dzdHIgItCy0L7Qt9C80L7QttC90L4g0LLRiyDRhdC+0YLQuNGC0LUg0LjRhSDRg9C00LDQu9C40YLRjCDQuNC70Lgg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY4OQorbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgwqtkaWZmLmd1aXRvb2zCuyDQstC80LXRgdGC0L4gwqtkaWZmLnRvb2zCuyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5MQorbXNnaWQgInBlcmZvcm0gYSBmdWxsLWRpcmVjdG9yeSBkaWZmIgorbXNnc3RyICLQstGL0L/QvtC70L3QuNGC0Ywg0L/QvtGE0LDQudC70L7QstC+0LUg0YHRgNCw0LLQvdC10L3QuNC1INCy0YHQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5MworbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAi0L3QtSDRgdC/0YDQsNGI0LjQstCw0YLRjCDQv9C10YDQtdC0INC30LDQv9GD0YHQutC+0Lwg0YPRgtC40LvQuNGC0Ysg0YHRgNCw0LLQvdC10L3QuNGPIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk4Cittc2dpZCAidXNlIHN5bWxpbmtzIGluIGRpci1kaWZmIG1vZGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdC40LzQstC+0LvRjNC90YvQtSDRgdGB0YvQu9C60Lgg0LIg0YDQtdC20LjQvNC1INGB0YDQsNCy0L3QtdC90LjRjyDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk5Cittc2dpZCAidG9vbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAwCittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YPQutCw0LfQsNC90L3Rg9GOINGD0YLQuNC70LjRgtGDINGB0YDQsNCy0L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMgorbXNnaWQgInByaW50IGEgbGlzdCBvZiBkaWZmIHRvb2xzIHRoYXQgbWF5IGJlIHVzZWQgd2l0aCBgLS10b29sYCIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INGD0YLQuNC70LjRgiwg0LrQvtGC0L7RgNGL0LUg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YEg0L/QsNGA0LDQvNC10YLRgNC+0LwgwqstLXRvb2zCuyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNQorbXNnaWQgIiIKKyJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uIC0gemVybyBleGl0IgorIiBjb2RlIgorbXNnc3RyICLQstGL0YXQvtC00LjRgtGMINC40LcgwqtnaXQtZGlmZnRvb2zCuywg0LXRgdC70Lgg0LLRi9C30LLQsNC90L3QsNGPINGD0YLQuNC70LjRgtCwINGB0YDQsNCy0L3QtdC90LjRjyDQstC10YDQvdGD0LvQsCDQvdC1INC90YPQu9C10LLQvtC5INC60L7QtCDQstC+0LfQstGA0LDRgtCwIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7RgdC+0LHRg9GOINC60L7QvNCw0L3QtNGDINC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA5Cittc2dpZCAicGFzc2VkIHRvIGBkaWZmYCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzI0Cittc2dpZCAiZGlmZnRvb2wgcmVxdWlyZXMgd29ya3RyZWUgb3IgLS1uby1pbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzMxCittc2dpZCAiLS1kaXItZGlmZiBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzQKK21zZ2lkICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDIKK21zZ2lkICJubyA8dG9vbD4gZ2l2ZW4gZm9yIC0tdG9vbD08dG9vbD4iCittc2dzdHIgItC90LUg0L/QtdGA0LXQtNCw0L3QsCA80YPRgtC40LvQuNGC0LA+INC00LvRjyAtLXRvb2w9PNGD0YLQuNC70LjRgtCwPiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0OQorbXNnaWQgIm5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPiIKK21zZ3N0ciAi0L3QtSDQv9C10YDQtdC00LDQvdCwIDzQutC+0LzQsNC90LTQsD4g0LTQu9GPIC0tZXh0Y21kPTzQutC+0LzQsNC90LTQsD4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBb0L7Qv9GG0LjQuC1yZXYtbGlzdF0iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDg0Cittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQv9GA0L7Qs9GA0LXRgdGBINC/0L7RgdC70LUgPG4+INC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDg2Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICLQstGL0LHQvtGAINC+0LHRgNCw0LHQvtGC0LrQuCDQv9C+0LTQv9C40YHQsNC90L3Ri9GFINC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDg5Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAi0LLRi9Cx0L7RgCDQvtCx0YDQsNCx0L7RgtC60Lgg0LzQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LzQuCDQv9C+0LzQtdGH0LXQvdGLINC+0YLRhNC40LvRjNGC0YDQvtCy0LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwOTIKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi0JfQsNC/0LjRgdCw0YLRjCDQv9C+0LzQtdGC0LrQuCDQsiDRjdGC0L7RgiDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwOTQKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgItCY0LzQv9C+0YDRgtC40YDQvtCy0LDRgtGMINC/0L7QvNC10YLQutC4INC40Lcg0Y3RgtC+0LPQviDRhNCw0LnQu9CwIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA5NgorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICLQn9C+0LTQtNC10LvQsNGC0Ywg0LDQstGC0L7RgNCwINC80LXRgtC60LgsINC10YHQu9C4INGDINC80LXRgtC60Lgg0L7QvSDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTA5OAorbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICLQktGL0LLQtdGB0YLQuCDQv9C+0LvQvdC+0LUg0LTQtdGA0LXQstC+INC00LvRjyDQutCw0LbQtNC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExMDAKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0L7QvNC10YLQutGDINC30LDQstC10YDRiNC10L3QuNGPINCyINC60L7QvdGG0LUg0L/QvtGC0L7QutCwIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTEwMQorbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0YLQuNGC0Ywg0LLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUg0LTQstC+0LjRh9C90YvRhSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTEwMiBidWlsdGluL2xvZy5jOjE2MDkKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICLRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAg0YHRgdGL0LvQutC4IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTEwMworbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMINGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgCDRgdGB0YvQu9C60Lgg0Log0Y3QutGB0L/QvtGA0YLQuNGA0YPQtdC80YvQvCDRgdGB0YvQu9C60LDQvCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExMDQKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDQstGL0LLQvtC0INCw0L3QvtC90LjQvNC90YvQvCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExMDYKK21zZ2lkICJSZWZlcmVuY2UgcGFyZW50cyB3aGljaCBhcmUgbm90IGluIGZhc3QtZXhwb3J0IHN0cmVhbSBieSBvYmplY3QgaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExMDgKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjgKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPNC+0L/RhtC40Lg+XSBbPNGA0LXQv9C+0LfQuNGC0L7RgNC40Lk+IFs80YHQv9C10YbQuNGE0LjQutCw0YLQvtGALdGB0YHRi9C70LrQuD7igKZdXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI5Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPNC+0L/RhtC40Lg+XSA80LPRgNGD0L/Qv9CwPiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMwCittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs80L7Qv9GG0LjQuD5dIFsoPNGA0LXQv9C+0LfQuNGC0L7RgNC40Lk+IHwgPNCz0YDRg9C/0L/QsD4p4oCmXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMxCittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTUgYnVpbHRpbi9wdWxsLmM6MjAyCittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0Ywg0YHQviDQstGB0LXRhSDQstC90LXRiNC90LjRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTcgYnVpbHRpbi9wdWxsLmM6MjA1Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICLQtNC+0L/QuNGB0LDRgtGMINC6IC5naXQvRkVUQ0hfSEVBRCDQstC80LXRgdGC0L4g0L/QtdGA0LXQt9Cw0L/QuNGB0LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkgYnVpbHRpbi9wdWxsLmM6MjA4Cittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICLQv9GD0YLRjCDQuiDQv9GA0L7Qs9GA0LDQvNC80LUg0YPQv9Cw0LrQvtCy0LrQuCDQv9Cw0LrQtdGC0LAg0L3QsCDQvNCw0YjQuNC90LUg0YEg0LLQvdC10YjQvdC40Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIyCittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICLQuNC30LLQu9C10YfRjCDRgSDQvdC10YHQutC+0LvRjNC60LjRhSDQstC90LXRiNC90LjRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjQgYnVpbHRpbi9wdWxsLmM6MjEyCittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0Ywg0LLRgdC1INC80LXRgtC60Lgg0Lgg0YHQstGP0LfQsNC90L3Ri9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI2Cittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICLQvdC1INC40LfQstC70LXQutCw0YLRjCDQstGB0LUg0LzQtdGC0LrQuCAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyOAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgItC60L7Qu9C40YfQtdGB0YLQstC+INC/0L7QtNC80L7QtNGD0LvQtdC5LCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINGB0LrQsNGH0LDQvdGLINC/0LDRgNGA0LDQu9C10LvRjNC90L4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzAgYnVpbHRpbi9wdWxsLmM6MjE1Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgItC/0L7Rh9C40YHRgtC40YLRjCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDQstC90LXRiNC90LjQtSDQstC10YLQutC4LCDQutC+0YLQvtGA0YvRhSDRg9C20LUg0L3QtdGCINC90LAg0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMgorbXNnaWQgInBydW5lIGxvY2FsIHRhZ3Mgbm8gbG9uZ2VyIG9uIHJlbW90ZSBhbmQgY2xvYmJlciBjaGFuZ2VkIHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzMyBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjEzOQorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAi0L/QviDRgtGA0LXQsdC+0LLQsNC90LjRjiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzNAorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgItGD0L/RgNCw0LLQu9C10L3QuNC1INGA0LXQutGD0YDRgdC40LLQvdGL0Lwg0LjQt9Cy0LvQtdGH0LXQvdC40LXQvCDQv9C+0LTQvNC+0LTRg9C70LXQuSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOCBidWlsdGluL3B1bGwuYzoyMjMKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAi0L7RgdGC0LDQstC40YLRjCDQt9Cw0LPRgNGD0LbQtdC90L3Ri9C5INC/0LDQutC10YIg0LTQsNC90L3Ri9GFIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQwCittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQvtCx0L3QvtCy0LvQtdC90LjQtSDRgdGB0YvQu9C60LggSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTQ5IGJ1aWx0aW4vcHVsbC5jOjIyNgorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgItGD0LvRg9Cz0YPQsdC40YLRjCDQuNGB0YLQvtGA0LjRjiDRh9Cw0YHRgtC40YfQvdC+0LPQviDQutC70L7QvdCwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ1Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgItGD0LPQu9GD0LHQuNGC0Ywg0LjRgdGC0L7RgNC40Y4g0YfQsNGB0YLQuNGH0L3QvtCz0L4g0LrQu9C+0L3QsCDQvtGB0L3QvtCy0YvQstCw0Y/RgdGMINC90LAg0LLRgNC10LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTEgYnVpbHRpbi9wdWxsLmM6MjI5Cittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgItC/0YDQtdC+0LHRgNCw0LfQvtCy0LDRgtGMINCyINC/0L7Qu9C90YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAi0L/RgNC40YHQvtC10LTQuNC90Y/RgtGMINGN0YLQviDRgdC/0LXRgNC10LTQuCDQuiDQstGL0LLQvtC00YMg0L/Rg9GC0LXQuSDQv9C+0LTQvNC+0LTRg9C70Y8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTcKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDRgNC10LrRg9GA0YHQuNCy0L3QvtC1INC40LfQstC70LXRh9C10L3QuNC1INC/0L7QtNC80L7QtNGD0LvQtdC5ICjQsdC+0LvQtdC1INC90LjQt9C60LjQuSDQv9GA0LjQvtGA0LjRgtC10YIsINGH0LXQvCDRhNCw0LnQu9GLINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjEgYnVpbHRpbi9wdWxsLmM6MjMyCittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICLQv9GA0LjQvdC40LzQsNGC0Ywg0YHRgdGL0LvQutC4LCDQutC+0YLQvtGA0YvQtSDQvtCx0L3QvtCy0LvRj9GO0YIgLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYyIGJ1aWx0aW4vcHVsbC5jOjIzNAorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAi0YHQvtC+0YLQstC10YLRgdGC0LLQuNC1LdGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MyBidWlsdGluL3B1bGwuYzoyMzUKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0Ywg0YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INGB0YHRi9C70L7QuiDQv9GA0Lgg0LjQt9Cy0LvQtdGH0LXQvdC40LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzAKK21zZ2lkICJyZXBvcnQgdGhhdCB3ZSBoYXZlIG9ubHkgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGlzIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDY5Cittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRgdGB0YvQu9C60YMgSEVBRCDQvdCwINCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAi0L7Qv9GG0LjRjyBmZXRjaC5vdXRwdXQg0YHQvtC00LXRgNC20LjRgiDQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAi0L7QsdGK0LXQutGCICVzINC90LUg0L3QsNC50LTQtdC9IgorCisjOiBidWlsdGluL2ZldGNoLmM6NzA5Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJb0LDQutGC0YPQsNC70YzQvdC+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcyMiBidWlsdGluL2ZldGNoLmM6NzM4IGJ1aWx0aW4vZmV0Y2guYzo4MDEKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJb0L7RgtC60LvQvtC90LXQvdC+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcyMworbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjQt9Cy0LvQtdGH0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjczMworbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW9C+0LHQvdC+0LLQu9C10L3QuNC1INC80LXRgtC60LhdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzM0IGJ1aWx0aW4vZmV0Y2guYzo3NzEgYnVpbHRpbi9mZXRjaC5jOjc4NAorIzogYnVpbHRpbi9mZXRjaC5jOjc5NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0LvQvtC60LDQu9GM0L3Rg9GOINGB0YHRi9C70LrRgyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjczOAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjAKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIlvQvdC+0LLQsNGPINC80LXRgtC60LBdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzYzCittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJb0L3QvtCy0LDRjyDQstC10YLQutCwXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2NgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW9C90L7QstCw0Y8g0YHRgdGL0LvQutCwXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc5NgorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LUg0L7QsdC90L7QstC70LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDEKK21zZ2lkICJub24tZmFzdC1mb3J3YXJkIgorbXNnc3RyICLQsdC10Lcg0L/QtdGA0LXQvNC+0YLQutC4INCy0L/QtdGA0LXQtCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzINC90LUg0L7RgtC/0YDQsNCy0LjQuyDQstGB0LUg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSDQvtCx0YrQtdC60YLRi1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiVzINC+0YLQutC70L7QvdC10L3QviDQuNC3LdC30LAg0YLQvtCz0L4sINGH0YLQviDRh9Cw0YHRgtC40YfQvdGL0LUg0LrQvtGA0L3QuCDQvdC1INGA0LDQt9GA0LXRiNC10L3QviDQvtCx0L3QvtCy0LvRj9GC0YwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NTkgYnVpbHRpbi9mZXRjaC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgItCY0LcgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQvdC10LrQvtGC0L7RgNGL0LUg0LvQvtC60LDQu9GM0L3Ri9C1INGB0YHRi9C70LrQuDsg0L/QvtC/0YDQvtCx0YPQudGC0LUg0LfQsNC/0YPRgdGC0LjRgtGMIMKrZ2l0IHJlbW90ZSBwcnVuZSAlc8K7LCDRh9GC0L7QsdGLINC/0L7Rh9C40YHRgtC40YLRjCDRgdGC0LDRgNGL0LUsINC60L7QvdGE0LvQuNC60YLRg9GO0YnQuNC1INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyDQsdGD0LTQtdGCINCy0LjRgdGP0YnQtdC5INCy0LXRgtC60L7QuSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzINGB0YLQsNC70LAg0LLQuNGB0Y/RidC10Lkg0LLQtdGC0LrQvtC5KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwODQKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvRg9C00LDQu9C10L3Qvl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDg1IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNgorbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKNC90LXRgikiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J7RgtC60LDQtyDQv9C+0LvRg9GH0LXQvdC40Y8g0LIg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgyAlcyDQvdC1INCz0L7Qu9C+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNworIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDCqyUyJHPCuyDQtNC70Y8g0L/QsNGA0LDQvNC10YLRgNCwIMKrJTEkc8K7INC00LvRjyAlMyRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YAgwqslc8K7INC40LPQvdC+0YDQuNGA0YPQtdGC0YHRjyDQtNC70Y8gJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAi0JjQt9Cy0LvQtdGH0LXQvdC40LUg0LjQtyAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzNiBidWlsdGluL3JlbW90ZS5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjQt9Cy0LvQtdGH0YwgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgyCittc2dpZCAiIgorIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcmVtb3RlIGNvbmZpZ3VyZWQgaW4gIgorImV4dGVuc2lvbnMucGFydGlhbENsb25lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTA2Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgItCd0LUg0YPQutCw0LfQsNC9INCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkuINCj0LrQsNC20LjRgtC1IFVSTCDQuNC70Lgg0LjQvNGPINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQuNC3INC60L7RgtC+0YDQvtCz0L4g0LTQvtC70LbQvdGLINC40LfQstC70LXQutCw0YLRjNGB0Y8g0L3QvtCy0YvQtSDRgNC10LTQsNC60YbQuNC4LiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NDMKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICLQktCw0Lwg0L3Rg9C20L3QviDRg9C60LDQt9Cw0YLRjCDQuNC80Y8g0LzQtdGC0LrQuC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTk0Cittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi0J7RgtGA0LjRhtCw0YLQtdC70YzQvdCw0Y8g0LPRgNGD0LHQuNC90LAg0LTQu9GPIC0tZGVlcGVuINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1OTYKK21zZ2lkICItLWRlZXBlbiBhbmQgLS1kZXB0aCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWRlZXBlbiDQuCAtLWRlcHRoINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwMQorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviAtLWRlcHRoINC4IC0tdW5zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwMworbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXVuc2hhbGxvdyDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwINC90LAg0L/QvtC70L3QvtC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjE5Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsINC90LUg0L/RgNC40L3QuNC80LDQtdGCINC40LzRjyDRgNC10L/QvtC30LjRgtC+0YDQuNGPINC60LDQuiDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYyMQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCDQv9GA0Lgg0YPQutCw0LfQsNC90LjQuCDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQvtCyINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAi0J3QtdGCINGC0LDQutC+0LPQviDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LjQu9C4INCz0YDRg9C/0L/RizogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjM3Cittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC40LUg0LPRgNGD0L/Qv9GLINC4INGD0LrQsNC30LDQvdC40LUg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC5INGB0YHRi9C70L7QuiDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY1MworbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluICIKKyJleHRlbnNpb25zLnBhcnRpYWxjbG9uZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxOAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPNGB0L7QvtCx0YnQtdC90LjQtT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDzRhNCw0LnQuz5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzIKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgItC+0YLQv9GA0LDQstC40YLRjCDQsiDQttGD0YDQvdCw0LsgPG4+INC30LDQv9C40YHQtdC5INC40Lcg0LrQvtGA0L7RgtC60L7Qs9C+INC20YPRgNC90LDQu9CwIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzUKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICLRgdC+0LrRgNCw0YnQtdC90LjQtSDQtNC70Y8gLS1sb2cgKNGD0YHRgtCw0YDQtdCy0YjQtdC1KSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc4Cittc2dpZCAidGV4dCIKK21zZ3N0ciAi0YLQtdC60YHRgiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc5Cittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgPNGC0LXQutGB0YI+INC60LDQuiDQvdCw0YfQsNC70YzQvdC+0LUg0YHQvtC+0LHRidC10L3QuNC1IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODAKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAi0YTQsNC50Lsg0LTQu9GPINGH0YLQtdC90LjRjyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzzQvtC/0YbQuNC4Pl0gWzzRiNCw0LHQu9C+0L0+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPNC+0LHRitC10LrRgj5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEyCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzzQutC+0LzQvNC40YI+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs80LrQvtC80LzQuNGCPl1dIFstLW5vLWNvbnRhaW5zIFs80LrQvtC80LzQuNGCPl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YPQutCw0LfQsNGC0LXQu9C4INC80LXRgdGC0LAg0LfQsNC/0L7Qu9C90LXQvdC40Y8g0LIg0L/QvtC00YXQvtC00Y/RidC10Lwg0YTQvtGA0LzQsNGC0LUg0LTQu9GPINC60L7QvNCw0L3QtNC90L7Qs9C+INC/0YDQvtGG0LXRgdGB0L7RgNCwIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGD0LrQsNC30LDRgtC10LvQuCDQvNC10YHRgtCwINC30LDQv9C+0LvQvdC10L3QuNGPINCyINC/0L7QtNGF0L7QtNGP0YnQtdC8INGE0L7RgNC80LDRgtC1INC00LvRjyBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YPQutCw0LfQsNGC0LXQu9C4INC80LXRgdGC0LAg0LfQsNC/0L7Qu9C90LXQvdC40Y8g0LIg0L/QvtC00YXQvtC00Y/RidC10Lwg0YTQvtGA0LzQsNGC0LUg0LTQu9GPIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGD0LrQsNC30LDRgtC10LvQuCDQvNC10YHRgtCwINC30LDQv9C+0LvQvdC10L3QuNGPINCyINC/0L7QtNGF0L7QtNGP0YnQtdC8INGE0L7RgNC80LDRgtC1INC00LvRjyBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzcKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgtC+0LvRjNC60L4gPG4+INGB0L7QstC/0LDQtNCw0Y7RidC40YUg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YbQstC10YLQsCDQuNC3INGE0L7RgNC80LDRgtCwIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyCittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDRgdGB0YvQu9C+0LosINC60L7RgtC+0YDRi9C1INGD0LrQsNC30YvQstCw0Y7RgiDQvdCwINC/0LXRgNC10LTQsNC90L3Ri9C5INC+0LHRitC10LrRgiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INGB0LvQuNGC0YvRhSDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0L3QtSDRgdC70LjRgtGL0YUg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0YHRgdGL0LvQvtC6LCDQutC+0YLQvtGA0YvQtSDRgdC+0LTQtdGA0LbQsNGCINC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NworbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INGB0YHRi9C70L7Quiwg0LrQvtGC0L7RgNGL0LUg0L3QtSDRgdC+0LTQtdGA0LbQsNGCINC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9mc2NrLmM6ODggYnVpbHRpbi9mc2NrLmM6MTYwIGJ1aWx0aW4vZnNjay5jOjE2MQorbXNnaWQgInVua25vd24iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTIwIGJ1aWx0aW4vZnNjay5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZyBpbiAlcyAlczogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MTU3IGJ1aWx0aW4vZnNjay5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gbGluayBmcm9tICU3cyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoxNjgKK21zZ2lkICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIKKyIgICAgICAgICAgICAgIHRvICU3cyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWFjaGFibGUgJXMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM0OQorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQutC+0L3Rh9C40YLRjCAnJXMnIgorCisjOiBidWlsdGluL2ZzY2suYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSAoJWQgb2JqZWN0cykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQzOAorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnZ2VkICVzICVzICglcykgaW4gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MTkKK21zZ2lkICJub3RpY2U6IE5vIGRlZmF1bHQgcmVmZXJlbmNlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3Npbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2hhMSBmaWxlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2ODIKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY4NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQutCw0YLQsNC70L7Qs9C+0LIg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzA1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0LkgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo3NTAKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs80L7Qv9GG0LjQuD5dIFs80L7QsdGK0LXQutGCPuKApl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NworbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvdC10LTQvtGB0YLRg9C/0L3Ri9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODgKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L7QsdGK0LXQutGC0YssINC90LAg0LrQvtGC0L7RgNGL0LUg0L3QtdGCINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg5Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgItCy0YvQstC10YHRgtC4INC+0YLRh9C10YIg0L/QviDQvNC10YLQutCw0LwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc5MAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQvtGC0YfQtdGCINC/0L4g0LrQvtGA0L3QtdCy0YvQvCDRg9C30LvQsNC8IgorCisjOiBidWlsdGluL2ZzY2suYzo3OTEKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAi0LLQvtGB0L/RgNC40L3QuNC80LDRgtGMINC+0LHRitC10LrRgtGLINCyINC40L3QtNC10LrRgdC1INC60LDQuiDQutC+0YDQvdC10LLRi9C1INGD0LfQu9GLIgorCisjOiBidWlsdGluL2ZzY2suYzo3OTIKK21zZ2lkICJtYWtlIHJlZmxvZ3MgaGVhZCBub2RlcyAoZGVmYXVsdCkiCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC60L7RgNC90LXQstGL0LUg0YPQt9C70Ysg0LbRg9GA0L3QsNC70L7QsiDRgdGB0YvQu9C+0LogKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzkzCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgItGC0LDQutC20LUg0L/RgNC+0LLQtdGA0Y/RgtGMINC/0LDQutC10YLRiyDQuCDQsNC70YzRgtC10YDQvdCw0YLQuNCy0L3Ri9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL2ZzY2suYzo3OTQKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi0YLQvtC70YzQutC+INC/0YDQvtCy0LXRgNC40YLRjCDRgdC+0LXQtNC40L3QtdC90LjQtSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzk1Cittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LHQvtC70LXQtSDRgdGC0YDQvtCz0YPRjiDQv9GA0L7QstC10YDQutGDIgorCisjOiBidWlsdGluL2ZzY2suYzo3OTcKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAi0LfQsNC/0LjRgdCw0YLRjCDQvtCx0YrQtdC60YLRiyDQvdCwINC60L7RgtC+0YDRi9C1INC90LXRgiDRgdGB0YvQu9C+0Log0LIgLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo3OTggYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQstGL0L/QvtC70L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzk5Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQv9C+0LTRgNC+0LHQvdGL0LUg0LjQvNC10L3QsCDQtNC70Y8g0L3QtdC00L7RgdGC0YPQv9C90YvRhSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2ZzY2suYzo4NTkgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI0Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2ZzY2suYzo4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBtaXNzaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlcjogZXhwZWN0ZWQgc2hhMSwgZ290ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjM0Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBmc3RhdCAlczogJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICclcycgdmFsdWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NDc2IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQg0LTQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9nYy5jOjQ4NSBidWlsdGluL25vdGVzLmM6MjQwIGJ1aWx0aW4vdGFnLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9nYy5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGxhc3QgZ2MgcnVuIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcuIFBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisiYW5kIHJlbW92ZSAlcy5cbiIKKyJBdXRvbWF0aWMgY2xlYW51cCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgdW50aWwgdGhlIGZpbGUgaXMgcmVtb3ZlZC5cbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAi0J/QvtGB0LvQtdC00L3QuNC5INC30LDQv9GD0YHQuiBnYyDRgdC+0L7QsdGJ0LjQuyDRgdC70LXQtNGD0Y7RidC10LUuINCf0L7QttCw0LvRg9C50YHRgtCwLCDQuNGB0L/RgNCw0LLRjNGC0LUg0L7RiNC40LHQutGDINC4INGD0LTQsNC70LjRgtC1ICVzLlxu0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LDRjyDQvtGH0LjRgdGC0LrQsCDRgNC10L/QvtC30LjRgtC+0YDQuNGPINC90LUg0LHRg9C00LXRgiDQv9GA0L7QuNC30LLQvtC00LjRgtGM0YHRjywg0L/QvtC60LAg0Y3RgtC+0YIg0YTQsNC50Lsg0L3QtSDRg9C00LDQu9GR0L0uXG5cbiVzIgorCisjOiBidWlsdGluL2djLmM6NTQwCittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgItC/0L7Rh9C40YHRgtC40YLRjCDQvtCx0YrQtdC60YLRiywg0L3QsCDQutC+0YLQvtGA0YvQtSDQvdC10YIg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2djLmM6NTQyCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICLQv9GA0L7QstC10YDRj9GC0Ywg0LHQvtC70LXQtSDQstC90LjQvNCw0YLQtdC70YzQvdC+ICjQt9Cw0L3QuNC80LDQtdGCINCx0L7Qu9GM0YjQtSDQstGA0LXQvNC10L3QuCkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDMKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINGA0LXQttC40LwgYXV0by1nYyIKKworIzogYnVpbHRpbi9nYy5jOjU0NgorbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQt9Cw0L/Rg9GB0YLQuNGC0YwgZ2MsINC00LDQttC1INC10YHRgtGMINC00YDRg9Cz0LDRjyDQutC+0L/QuNGPIGdjINGD0LbQtSDQt9Cw0L/Rg9GJ0LXQvdCwIgorCisjOiBidWlsdGluL2djLmM6NTQ5Cittc2dpZCAicmVwYWNrIGFsbCBvdGhlciBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBnYy5sb2dleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C10YHQutCw0Y8g0YPQv9Cw0LrQvtCy0LrQsCDRgNC10L/QvtC30LjRgtC+0YDQuNGPINCyINGE0L7QvdC1LCDQtNC70Y8g0L7Qv9GC0LjQvNCw0LvRjNC90L7QuSDQv9GA0L7QuNC30LLQvtC00LjRgtC10LvRjNC90L7RgdGC0LguXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQsNGPINGD0L/QsNC60L7QstC60LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjywg0LTQu9GPINC+0L/RgtC40LzQsNC70YzQvdC+0Lkg0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70YzQvdC+0YHRgtC4LlxuIgorCisjOiBidWlsdGluL2djLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgItCh0LzQvtGC0YDQuNGC0LUgwqtnaXQgaGVscCBnY8K7INGA0YPQutC+0LLQvtC00YHRgtCy0LAg0L/QviDRgNGD0YfQvdC+0Lkg0L7Rh9C40YHRgtC60LUuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgImdjINGD0LbQtSDQt9Cw0L/Rg9GJ0LXQvSDQvdCwINGN0YLQvtC8INC60L7QvNC/0YzRjtGC0LXRgNC1IMKrJXPCuyBwaWQgJTxQUkl1TUFYPiAo0LXRgdC70Lgg0L3QtdGCLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IC0tZm9yY2UpIgorCisjOiBidWlsdGluL2djLmM6NjkzCittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlICIKKyJ0aGVtLiIKK21zZ3N0ciAi0JjQvNC10LXRgtGB0Y8g0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQvtCx0YrQtdC60YLQvtCyLCDQvdCwINC60L7RgtC+0YDRi9C1INC90LXRgiDRgdGB0YvQu9C+0Lo7INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBwcnVuZcK7INC00LvRjyDQuNGFINGD0LTQsNC70LXQvdC40Y8uIgorCisjOiBidWlsdGluL2dyZXAuYzoyOQorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzzQvtC/0YbQuNC4Pl0gWy1lXSA80YjQsNCx0LvQvtC9PiBbPNGA0LXQtNCw0LrRhtC40Y8+4oCmXSBbWy0tXSA80L/Rg9GC0Yw+4oCmXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcDog0YHQsdC+0Lkg0YHQvtC30LTQsNC90LjRjyDQv9C+0YLQvtC60LA6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgItGD0LrQsNC30LDQvdC+INC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQv9C+0YLQvtC60L7QsiAoJWQpINC00LvRjyAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI4NyBidWlsdGluL2luZGV4LXBhY2suYzoxNTE0IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MDUKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICLQvdC10YIg0L/QvtC00LTQtdGA0LbQutC4INC/0L7RgtC+0LrQvtCyLCDQuNCz0L3QvtGA0LjRgNC+0LLQsNC90LjQtSAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDY2IGJ1aWx0aW4vZ3JlcC5jOjU5MCBidWlsdGluL2dyZXAuYzo2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQtNC10YDQtdCy0L4gKCVzKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIGdyZXAg0LjQtyDQvtCx0YrQtdC60YLQsCDRgtC40L/QsCAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgwqslY8K7INC+0LbQuNC00LDQtdGCINGH0LjRgdC70L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODExCittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAi0LjRgdC60LDRgtGMINCyINC40L3QtNC10LrRgdC1LCDQsCDQvdC1INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxMworbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICLQuNGB0LrQsNGC0Ywg0LIg0YHQvtC00LXRgNC20LjQvNC+0Lwg0L3QtSDRg9C/0YDQsNCy0LvRj9C10LzRi9C8IGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE1Cittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQuNGB0LrQsNGC0Ywg0Lgg0LIg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUsINC4INCyINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9Cw0YUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNworbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINGE0LDQudC70Ysg0YPQutCw0LfQsNC90L3Ri9C1INCyIMKrLmdpdGlnbm9yZcK7IgorCisjOiBidWlsdGluL2dyZXAuYzo4MTkKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgItGA0LXQutGD0YDRgdC40LLQvdGL0Lkg0L/QvtC40YHQuiDQv9C+INCy0YHQtdC8INC/0L7QtNC80L7QtNGD0LvRj9C8IgorCisjOiBidWlsdGluL2dyZXAuYzo4MjIKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi0LjRgdC60LDRgtGMINCyINC90LXRgdC+0LLQv9Cw0LTQsNGO0YnQuNGFINGB0YLRgNC+0LrQsNGFIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjQKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICLQsdC10Lcg0YPRh9C10YLQsCDRgNC10LPQuNGB0YLRgNCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjYKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAi0LjRgdC60LDRgtGMINGB0L7QstC/0LDQtNC10L3QuNGPINGI0LDQsdC70L7QvdCwINGC0L7Qu9GM0LrQviDQvdCwINCz0YDQsNC90LjRhtCw0YUg0YHQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgItC+0LHRgNCw0LHQvtGC0LrQsCDQtNCy0L7QuNGH0L3Ri9GFINGE0LDQudC70L7QsiDQutCw0Log0YLQtdC60YHRgtCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgItC90LUg0LjRgdC60LDRgtGMINGB0L7QstC/0LDQtNC10L3QuNGPINGI0LDQsdC70L7QvdCwINCyINC00LLQvtC40YfQvdGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzMKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgItC+0LHRgNCw0LHQsNGC0YvQstCw0YLRjNGB0Y8g0LTQstC+0LjRh9C90YvQtSDRhNCw0LnQu9GLINGBINC/0L7QvNC+0YnRjNGOINGE0LjQu9GM0YLRgNC+0LIgdGV4dGNvbnYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNQorbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM3Cittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICLQvdCwINCz0LvRg9Cx0LjQvdC1INC80LDQutGB0LjQvNGDIDzQs9C70YPQsdC40L3QsD4g0YPRgNC+0LLQvdC10LkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0MQorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YDQsNGB0YjQuNGA0LXQvdC90YvQtSDRgNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8gUE9TSVgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NAorbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCx0LDQt9C+0LLRi9C1INGA0LXQs9GD0LvRj9GA0L3Ri9C1INCy0YvRgNCw0LbQtdC90LjRjyBQT1NJWCAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDcKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAi0LjQvdGC0LXRgNC/0YDQtdGC0LjRgNC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC90Ysg0LrQsNC6INGE0LjQutGB0LjRgNC+0LLQsNC90L3Ri9C1INGB0YLRgNC+0LrQuCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUwCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgUGVybC3RgdC+0LLQvNC10YHRgtC40LzRi9C1INGA0LXQs9GD0LvRj9GA0L3Ri9C1INCy0YvRgNCw0LbQtdC90LjRjyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODUzCittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INC90L7QvNC10YDQsCDRgdGC0YDQvtC6IgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU1Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDQuNC80LXQvdCwINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU2Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIg0L7RgtC90L7RgdC40YLQtdC70YzQvdC+INC60LDRgtCw0LvQvtCz0LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYwCittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGC0L7Qu9GM0LrQviDQuNC80LXQvdCwINGE0LDQudC70L7Qsiwg0LAg0L3QtSDRgdC+0LLQv9Cw0LTQsNGO0YnQuNC1INGB0YLRgNC+0LrQuCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgItGB0LjQvdC+0L3QuNC8INC00LvRjyAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY1Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGC0L7Qu9GM0LrQviDQvdC10YHQvtCy0L/QsNC00LDRjtGJ0LjQtSDQuNC80LXQvdCwINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY3Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQtNCy0L7QuNGH0L3Ri9C5INCd0J7Qm9CsINC/0L7RgdC70LUg0YHQv9C40YHQutCwINC40LzQtdC9INGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcwCittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzIKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC60L7Qu9C40YfQtdGB0YLQstC+INGB0L7QstC/0LDQtNC10L3QuNC5LCDQsCDQvdC1INGB0L7QstC/0LDQtNCw0Y7RidC40LUg0YHRgtGA0L7QutC4IgorCisjOiBidWlsdGluL2dyZXAuYzo4NzMKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAi0L/QvtC00YHQstC10YfQuNCy0LDRgtGMINGB0L7QstC/0LDQtNC10L3QuNGPIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzUKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQv9GD0YHRgtGD0Y4g0YHRgtGA0L7QutGDINC/0L7RgdC70LUg0YHQvtCy0L/QsNC00LXQvdC40Lkg0LjQtyDRgNCw0LfQvdGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzcKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC40LzRjyDRhNCw0LnQu9CwINGC0L7Qu9GM0LrQviDRgNCw0Lcg0L3QsCDQvdC10YHQutC+0LvRjNC60L4g0YHQvtCy0L/QsNC00LXQvdC40Lkg0LIg0L7QtNC90L7QvCDRhNCw0LnQu9C1IgorCisjOiBidWlsdGluL2dyZXAuYzo4ODAKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCA8bj4g0YHRgtGA0L7QuiDQutC+0L3RgtC10LrRgdGC0LAg0L/QtdGA0LXQtCDQuCDQv9C+0YHQu9C1INGB0L7QstC/0LDQtNC10L3QuNGPIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODMKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMIDxuPiDRgdGC0YDQvtC6INC60L7QvdGC0LXQutGB0YLQsCDQv9C10YDQtdC0INGB0L7QstC/0LDQtNC10L3QuNC10LwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4NQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCA8bj4g0YHRgtGA0L7QuiDQutC+0L3RgtC10LrRgdGC0LAg0L/QvtGB0LvQtSDRgdC+0LLQv9Cw0LTQtdC90LjRjyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg3Cittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIDzQutC+0Ls+INGA0LDQsdC+0YfQuNGFINC/0L7RgtC+0LrQvtCyIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODgKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICLRgtC+0LbQtSwg0YfRgtC+INC4IC1DINCa0J7Qm9CY0KfQldCh0KLQktCeIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTEKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0YLRgNC+0LrRgyDRgSDQuNC80LXQvdC10Lwg0YTRg9C90LrRhtC40Lgg0L/QtdGA0LXQtCDRgdC+0LLQv9Cw0LTQtdC90LjQtdC8IgorCisjOiBidWlsdGluL2dyZXAuYzo4OTMKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvtC60YDRg9C20LDRjtGJ0YPRjiDRhNGD0L3QutGG0LjRjiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk2Cittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDRiNCw0LHQu9C+0L3RiyDQuNC3INGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5OAorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0L/QvtC40YHQuiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Lkg0YEgPNGI0LDQsdC70L7QvdC+0Lw+IgorCisjOiBidWlsdGluL2dyZXAuYzo5MDAKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICLQvtCx0YrQtdC00LjQvdC40YLRjCDRiNCw0LHQu9C+0L3RiyDRg9C60LDQt9Cw0L3QvdGL0LUg0YEg0L/QvtC80L7RidGM0Y4gLWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxMgorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLQvdC40YfQtdCz0L4g0L3QtSDQstGL0LLQvtC00LjRgtGMLCDRg9C60LDQt9Cw0YLRjCDQvdCwINGB0L7QstC/0LDQtNC10L3QuNC1INGBINC/0L7QvNC+0YnRjNGOINC60L7QtNCwINCy0YvRhdC+0LTQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgtC+0LvRjNC60L4g0YHQvtCy0L/QsNC00LXQvdC40Y8g0LjQtyDRhNCw0LnQu9C+0LIg0LIg0LrQvtGC0L7RgNGL0YUg0YHQvtCy0L/QsNC00LDRjtGCINCy0YHQtSDRiNCw0LHQu9C+0L3RiyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTE2Cittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LTQtdGA0LXQstC+INGA0LDQt9Cx0L7RgNCwINC00LvRjyDQstGL0YDQsNC20LXQvdC40Y8g0L/QvtC40YHQutCwIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjAKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAi0L/QtdC50LTQttC10YAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyMAorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0L7QstC/0LDQtNCw0Y7RidC40LUg0YTQsNC50LvRiyDRgSDQv9C+0LzQvtGJ0YzRjiDQv9GA0L7Qs9GA0LDQvNC80Yst0L/QtdC50LTQttC10YDQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LLRi9C30L7QsiBncmVwKDEpICjQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0LIg0Y3RgtC+0Lkg0YHQsdC+0YDQutC1KSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTg4Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI0Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIi0tbm8taW5kZXgg0LjQu9C4IC0tdW50cmFja2VkINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBINGD0LrQsNC30LDQvdC40LXQvCDRgNC10LLQuNC30LjQuCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0YDQtdC00LDQutGG0LjRjjogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjMKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAzCittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgItC90LXRgiDQv9C+0LTQtNC10YDQttC60Lgg0L/QvtGC0L7QutC+0LIsINC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNC1IC0tdGhyZWFkcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA2OSBidWlsdGluL2luZGV4LXBhY2suYzoxNTExIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICLRg9C60LDQt9Cw0L3QviDQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0L/QvtGC0L7QutC+0LIgKCVkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA5MgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyINGA0LDQsdC+0YLQsNC10YIg0YLQvtC70YzQutC+INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMTUKK21zZ2lkICJvcHRpb24gbm90IHN1cHBvcnRlZCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjEKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTEyNworbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzUKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg1Cittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgWy10IDzRgtC40L8+XSBbLXddIFstLXBhdGg9PNGE0LDQudC7PiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dIFstLV0gPNGE0LDQudC7PuKApiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgItGC0LjQvyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgItGC0LjQvyDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgItC30LDQv9C40YHRjCDQvtCx0YrQtdC60YLQsCDQsiDQsdCw0LfRgyDQtNCw0L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGCINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDMKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAi0YHQvtGF0YDQsNC90LjRgtGMINGE0LDQudC7INCx0LXQtyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDRhNC40LvRjNGC0YDQvtCyIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA0Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAi0YXQtdGI0LjRgNC+0LLQsNGC0Ywg0LvRjtCx0L7QuSDQvNGD0YHQvtGAINC4INGB0L7Qt9C00LDQstCw0YLRjCDQv9C+0LLRgNC10LbQtNC10L3QvdGL0LUg0L7QsdGK0LXQutGC0Ysg0LTQu9GPINC+0YLQu9Cw0LTQutC4IEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtCw0YLRjCDRhNCw0LnQuyDRgtCw0LosINCx0YPQtNGC0L4g0L7QvSDQvdCw0YXQvtC00LjRgtGB0Y8g0L/QviDRg9C60LDQt9Cw0L3QvdC+0LzRgyDQv9GD0YLQuCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0LLRgdC10YUg0LTQvtGB0YLRg9C/0L3Ri9GFINC60L7QvNCw0L3QtCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAi0LjRgdC60LvRjtGH0LjRgtGMINGA0YPQutC+0LLQvtC00YHRgtCy0LAiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ4Cittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0L/QvtC70LXQt9C90YvRhSDRgNGD0LrQvtCy0L7QtNGB0YLQsiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkKK21zZ2lkICJwcmludCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo1MQorbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgItC+0YLQutGA0YvRgtGMINGA0YPQutC+0LLQvtC00YHRgtCy0L4g0LIg0YTQvtGA0LzQsNGC0LUgbWFuIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjCDRgNGD0LrQvtCy0L7QtNGB0YLQstC+INCyINCy0LXQsS3QsdGA0LDRg9C30LXRgNC1IgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjCDRgNGD0LrQvtCy0L7QtNGB0YLQstC+INCyINGE0L7RgNC80LDRgtC1IGluZm8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzzQutC+0LzQsNC90LTQsD5dIgorCisjOiBidWlsdGluL2hlbHAuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INGE0L7RgNC80LDRgiDRgNGD0LrQvtCy0L7QtNGB0YLQstCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAi0KHQsdC+0Lkg0L/RgNC4INC30LDQv9GD0YHQutC1IGVtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTE3Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICLQodCx0L7QuSDQv9GA0Lgg0L7Qv9GA0LXQtNC10LvQtdC90LjQuCDQstC10YDRgdC40LggZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAi0LLQtdGA0YHQuNGPIGVtYWNzY2xpZW50IMKrJWTCuyDRgdC70LjRiNC60L7QvCDRgdGC0LDRgNCw0Y8gKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQt9Cw0L/Rg9GB0LrQtSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiwqslc8K7OiDQv9GD0YLRjCDQtNC70Y8g0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNC+0Lkg0L/RgNC+0LPRgNCw0LzQvNGLINC/0YDQvtGB0LzQvtGC0YDQsCBtYW4uXG7QktC80LXRgdGC0L4g0Y3RgtC+0LPQviDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrbWFuLjzQv9GA0L7Qs9GA0LDQvNC80LA+LmNtZMK7LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiwqslc8K7OiDQutC+0LzQsNC90LTQsCDQtNC70Y8g0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNC+0Lkg0L/RgNC+0LPRgNCw0LzQvNGLINC/0YDQvtGB0LzQvtGC0YDQsCBtYW4uXG7QktC80LXRgdGC0L4g0Y3RgtC+0LPQviDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrbWFuLjzQv9GA0L7Qs9GA0LDQvNC80LA+LnBhdGjCuy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICLCqyVzwrs6INC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0L/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtGB0LzQvtGC0YDQsCBtYW4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgItC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7RgdC80L7RgtGA0LAgbWFuINC90LUg0L7QsdGA0LDQsdC+0YLQsNC70LAg0LfQsNC/0YDQvtGBIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLQv9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0YHQvNC+0YLRgNCwIGluZm8g0L3QtSDQvtCx0YDQsNCx0L7RgtCw0LvQsCDQt9Cw0L/RgNC+0YEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICLCqyVzwrsg4oCUINGN0YLQviDRgdC+0LrRgNCw0YnQtdC90LjQtSDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL2hlbHAuYzo0NDggZ2l0LmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhbGlhcy4lcyBzdHJpbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3NyBidWlsdGluL2hlbHAuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1OiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgItC90LXRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUg0YLQuNC/0LAg0L7QsdGK0LXQutGC0LAg0L3QsCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgItC+0LbQuNC00LDQtdC80YvQuSDQvtCx0YrQtdC60YIg0L3QtSDQv9C+0LvRg9GH0LXQvSDQvdCwICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAi0L7QsdGK0LXQutGCICVzOiDQvtC20LjQtNCw0LXQvNGL0Lkg0YLQuNC/ICVzLCDQv9C+0LvRg9GH0LXQvSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C+0LvQvdC40YLRjCAlZCDQsdCw0LnRgiIKK21zZ3N0clsxXSAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QvtC70L3QuNGC0YwgJWQg0LHQsNC50YLQsCIKK21zZ3N0clsyXSAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QvtC70L3QuNGC0YwgJWQg0LHQsNC50YLQvtCyIgorbXNnc3RyWzNdICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C+0LvQvdC40YLRjCAlZCDQsdCw0LnRgtC+0LIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2NworbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAi0L3QtdC+0LbQuNC00LDQvdC90YvQuSDQutC+0L3QtdGGINGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2OAorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgItC+0YjQuNCx0LrQsCDRh9GC0LXQvdC40Y8g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgwCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0L3QviDQsdC+0LvRjNGI0LUg0LHQsNC50YIsINGH0LXQvCDQsdGL0LvQviDQtNC+0YHRgtGD0L/QvdC+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo2MDAKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICLQv9Cw0LrQtdGCINGB0LvQuNGI0LrQvtC8INCx0L7Qu9GM0YjQvtC5INC00LvRjyDRgtC10LrRg9GJ0LXQs9C+INC+0L/RgNC10LTQtdC70LXQvdC40Y8gb2ZmX3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MCBidWlsdGluL3VucGFjay1vYmplY3RzLmM6OTQKK21zZ2lkICJwYWNrIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUiCittc2dzdHIgItGA0LDQt9C80LXRgCDQv9Cw0LrQtdGC0LAg0L/RgNC10LLRi9GI0LDQtdGCINC80LDQutGB0LjQvNCw0LvRjNC90YvQuSDQtNC+0L/Rg9GB0YLQuNC80YvQuSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzA1IGJ1aWx0aW4vcmVwYWNrLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGE0LDQudC7INC/0LDQutC10YLQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNQorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICLQvdC10YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INC/0L7QtNC/0LjRgdC4INC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgItCy0LXRgNGB0LjRjyDQv9Cw0LrQtdGC0LAgJTxQUkl1MzI+INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICU8UFJJdU1BWD46ICVzIgorbXNnc3RyICLQv9Cw0LrQtdGCINGB0L7QtNC10YDQttC40YIg0L/Qu9C+0YXQvtC5INC+0LHRitC10LrRgiDQv9C+INGB0LzQtdGJ0LXQvdC40Y4gJTxQUkl1TUFYPjogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICLQv9GA0L7Qs9GA0LDQvNC80LAg0YHQttCw0YLQuNGPINCy0LXRgNC90YPQu9CwICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTQKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICLQv9C10YDQtdC/0L7Qu9C90LXQvdC40LUg0LfQvdCw0YfQtdC90LjRjyDRgdC80LXRidC10L3QuNGPINGDINCx0LDQt9C+0LLQvtCz0L4g0L7QsdGK0LXQutGC0LAg0LTQtdC70YzRgtGLIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjIKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgItGB0LzQtdGJ0LXQvdC40LUg0LHQsNC30L7QstC+0Lkg0LTQtdC70YzRgtGLINCy0YvRiNC70L4g0LfQsCDQtNC+0L/Rg9GB0YLQuNC80YvQtSDQv9GA0LXQtNC10LvRiyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdGL0Lkg0YLQuNC/INC+0LHRitC10LrRgtCwICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjEKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBwcmVhZCDQtNC70Y8g0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gItC/0YDQtdC20LTQtdCy0YDQtdC80LXQvdC90L7QtSDQvtC60L7QvdGH0LDQvdC40LUg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAsICU8UFJJdU1BWD4g0LHQsNC50YIg0L7RgtGB0YPRgtGB0YLQstGD0LXRgiIKK21zZ3N0clsxXSAi0L/RgNC10LbQtNC10LLRgNC10LzQtdC90L3QvtC1INC+0LrQvtC90YfQsNC90LjQtSDRhNCw0LnQu9CwINC/0LDQutC10YLQsCwgJTxQUkl1TUFYPiDQsdCw0LnRgtCwINC+0YLRgdGD0YLRgdGC0LLRg9C10YIiCittc2dzdHJbMl0gItC/0YDQtdC20LTQtdCy0YDQtdC80LXQvdC90L7QtSDQvtC60L7QvdGH0LDQvdC40LUg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAsICU8UFJJdU1BWD4g0LHQsNC50YLQvtCyINC+0YLRgdGD0YLRgdGC0LLRg9C10YIiCittc2dzdHJbM10gItC/0YDQtdC20LTQtdCy0YDQtdC80LXQvdC90L7QtSDQvtC60L7QvdGH0LDQvdC40LUg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAsICU8UFJJdU1BWD4g0LHQsNC50YLQvtCyINC+0YLRgdGD0YLRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU4OQorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICLRgdC10YDRjNC10LfQvdC+0LUg0L3QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDQv9GA0Lgg0YDQsNGB0L/QsNC60L7QstC60LUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNCBidWlsdGluL2luZGV4LXBhY2suYzo3NDAgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzYzCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDIgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAi0J3QkNCZ0JTQldCd0JAg0JrQntCb0JvQmNCX0JjQryBTSEExINChICVzICEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1MworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0IGluZm8gJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINGB0YPRidC10YHRgtCy0YPRjtGJ0LXQs9C+INC+0LHRitC10LrRgtCwICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0L7QsdGK0LXQutGCICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGE0LDQudC7INC00LLQvtC40YfQvdC+0LPQviDQvtCx0YrQtdC60YLQsCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NAorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgItCd0LUg0LLRgdC1INC00L7Rh9C10YDQvdC40LUg0L7QsdGK0LXQutGC0YsgJXMg0LTQvtGB0YLQuNC20LjQvNGLIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTggYnVpbHRpbi9pbmRleC1wYWNrLmM6OTQ5Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0L/RgNC40LzQtdC90LXQvdC40Lgg0LTQtdC70YzRgtGLIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE3Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgItCf0L7Qu9GD0YfQtdC90LjQtSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE3Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JjQvdC00LXQutGB0LjRgNC+0LLQsNC90LjQtSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTUxCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICLQv9Cw0LrQtdGCINC/0L7QstGA0LXQttC00LXQvSAo0L3QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSBTSEExKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NgorbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgZnN0YXQg0LTQu9GPINGE0LDQudC70LAg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU5Cittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICLRhNCw0LnQuyDQv9Cw0LrQtdGC0LAg0YHQvtC00LXRgNC20LjRgiDQvNGD0YHQvtGAINCyINC60L7QvdGG0LUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzEKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICLQsdC10LfRg9C80L3QsNGPINC/0YPRgtCw0L3QuNGG0LAg0LIgcGFyc2VfcGFja19vYmplY3RzKCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTQKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICLQntC/0YDQtdC00LXQu9C10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC/0L7RgtC+0Lo6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ1Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAi0LHQtdC30YPQvNC90LDRjyDQv9GD0YLQsNC90LjRhtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAi0LfQsNCy0LXRgNGI0LXQvdC+INGBICVkINC70L7QutCw0LvRjNC90YvQvCDQvtCx0YrQtdC60YLQvtC8IgorbXNnc3RyWzFdICLQt9Cw0LLQtdGA0YjQtdC90L4g0YEgJWQg0LvQvtC60LDQu9GM0L3Ri9C80Lgg0L7QsdGK0LXQutGC0LDQvNC4IgorbXNnc3RyWzJdICLQt9Cw0LLQtdGA0YjQtdC90L4g0YEgJWQg0LvQvtC60LDQu9GM0L3Ri9C80Lgg0L7QsdGK0LXQutGC0LDQvNC4IgorbXNnc3RyWzNdICLQt9Cw0LLQtdGA0YjQtdC90L4g0YEgJWQg0LvQvtC60LDQu9GM0L3Ri9C80Lgg0L7QsdGK0LXQutGC0LDQvNC4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICLQndC10L7QttC40LTQsNC90L3QsNGPINC60L7QvdGC0YDQvtC70YzQvdCw0Y8g0YHRg9C80LzQsCDQsiDQutC+0L3RhtC1ICVzICjQtNC40YHQuiDQv9C+0LLRgNC10LbQtNC10L0/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAi0L/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCICVkINC90LXRgNCw0LfRgNC10YjQtdC90L3Rg9GOINC00LXQu9GM0YLRgyIKK21zZ3N0clsxXSAi0L/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCICVkINC90LXRgNCw0LfRgNC10YjQtdC90L3Ri9C1INC00LXQu9GM0YLRiyIKK21zZ3N0clsyXSAi0L/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCICVkINC90LXRgNCw0LfRgNC10YjQtdC90L3Ri9GFINC00LXQu9GM0YIiCittc2dzdHJbM10gItC/0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiAlZCDQvdC10YDQsNC30YDQtdGI0LXQvdC90YvRhSDQtNC10LvRjNGCIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YHQttCw0YLRjCDQv9GA0LjRgdC+0LXQtNC40L3QtdC90L3Ri9C5INC+0LHRitC10LrRgiAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICLQu9C+0LrQsNC70YzQvdGL0Lkg0L7QsdGK0LXQutGCICVzINC/0L7QstGA0LXQttC00LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAi0LjQvNGPINC/0LDQutC10YLQsCDCqyVzwrsg0L3QtSDQvtC60LDQvdGH0LjQstCw0LXRgtGB0Y8g0L3QsCDCqy5wYWNrwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM5Cittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQv9GA0Lgg0LfQsNC60YDRi9GC0LjQuCDRhNCw0LnQu9CwINC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ1MworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINGE0LDQudC7INC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ2MQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAi0L/Qu9C+0YXQvtC5IHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU3MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YTQsNC50Lsg0L/QsNC60LXRgtCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gItC90LUg0LTQtdC70YzRgtGLOiAlZCDQvtCx0YrQtdC60YIiCittc2dzdHJbMV0gItC90LUg0LTQtdC70YzRgtGLOiAlZCDQvtCx0YrQtdC60YLQsCIKK21zZ3N0clsyXSAi0L3QtSDQtNC10LvRjNGC0Ys6ICVkINC+0LHRitC10LrRgtC+0LIiCittc2dzdHJbM10gItC90LUg0LTQtdC70YzRgtGLOiAlZCDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gItC00LvQuNC90LAg0YbQtdC/0L7Rh9C60LggPSAlZDogJWx1INC+0LHRitC10LrRgiIKK21zZ3N0clsxXSAi0LTQu9C40L3QsCDRhtC10L/QvtGH0LrQuCA9ICVkOiAlbHUg0L7QsdGK0LXQutGC0LAiCittc2dzdHJbMl0gItC00LvQuNC90LAg0YbQtdC/0L7Rh9C60LggPSAlZDogJWx1INC+0LHRitC10LrRgtC+0LIiCittc2dzdHJbM10gItC00LvQuNC90LAg0YbQtdC/0L7Rh9C60LggPSAlZDogJWx1INC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NjcKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstC10YDQvdGD0YLRjNGB0Y8g0LIg0YLQtdC60YPRidC40Lkg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MTYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcxOQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczNSBidWlsdGluL2luZGV4LXBhY2suYzoxNzM5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAi0L/Qu9C+0YXQvtC5ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU1Cittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIi0tZml4LXRoaW4g0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQsdC10LcgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc1NworbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0L7Qv9GG0LjRjyAtLXN0ZGluINGC0YDQtdCx0YPQtdGCINC90LDQu9C40YfQuNGPINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gZ2l0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzYzCittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSDQsdC10Lcg0YPQutCw0LfQsNC90LjRjyDQuNC80LXQvdC4INGE0LDQudC70LAg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODExIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1ODAKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDRiNCw0LHQu9C+0L3QsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIG9wZW5kaXIg0LTQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHJlYWRsaW5rINC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgdC40LzQstC+0LvRjNC90YPRjiDRgdGB0YvQu9C60YMgwqslc8K7INC90LAgwqslc8K7IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDRhNCw0LnQuyDCqyVzwrsg0LIgwqslc8K7IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40LUg0YjQsNCx0LvQvtC90LAgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtSDQutC+0L/QuNGA0YPRjiDRiNCw0LHQu9C+0L3RiyDQuNC3IMKrJXPCuzogJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQtdGC0YHRjyDQvtCx0YDQsNCx0L7RgtCw0YLRjCDRhNCw0LnQuyDRgtC40L/QsCAlZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC10YLRgdGPINC/0LXRgNC10LzQtdGB0YLQuNGC0Ywg0YTQsNC50LsgJXMg0LIgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi0J/QtdGA0LXQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0L0g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INC+0LHRidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSBHaXQg0LIgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgItCf0LXRgNC10LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNC9INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IEdpdCDQsiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0L0g0L/Rg9GB0YLQvtC5INC+0LHRidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSBHaXQg0LIgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0L0g0L/Rg9GB0YLQvtC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgR2l0INCyICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDY4Cittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSAiCisiWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PNC60LDRgtCw0LvQvtCzLdGI0LDQsdC70L7QvdC+0LI+XSBbLS1zaGFyZWRbPTzQv9GA0LDQstCwLdC00L7RgdGC0YPQv9CwPl1dIFs80LrQsNGC0LDQu9C+0LM+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgItC/0YDQsNCy0LAt0LTQvtGB0YLRg9C/0LAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5MgorbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAi0YPQutCw0LbQuNGC0LUsINC10YHQu9C4INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgZ2l0INCx0YPQtNC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDQvdC10YHQutC+0LvRjNC60LjQvNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRj9C80LgiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyNiBidWlsdGluL2luaXQtZGIuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG1rZGlyICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBta2RpciAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgY2hkaXIg0LIgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIlcyAo0LjQu9C4IC0td29yay10cmVlPTzQutCw0YLQsNC70L7Qsz4pINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LHQtdC3INGD0LrQsNC30LDQvdC40Y8gJXMgKNC40LvQuCAtLWdpdC1kaXI9PNC60LDRgtCw0LvQvtCzPikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0LTQvtGB0YLRg9C/INC6INGA0LDQsdC+0YfQtdC80YMg0LrQsNGC0LDQu9C+0LPRgyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTUKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLWluLXBsYWNlXSBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA80LrQu9GO0Yc+Wyg9fDopPNC30L3QsNGH0LXQvdC40LU+XSnigKZdIFs80YTQsNC50Ls+4oCmXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NAorbXNnaWQgImVkaXQgZmlsZXMgaW4gcGxhY2UiCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGE0LDQudC70Ysg0L3QsCDQvNC10YHRgtC1IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk1Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAi0YPQtNCw0LvRj9GC0Ywg0L/Rg9GB0YLRi9C1INC30LDQstC10YDRiNC40YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKK21zZ2lkICJ3aGVyZSB0byBwbGFjZSB0aGUgbmV3IHRyYWlsZXIiCittc2dzdHIgItCz0LTQtSDQv9C+0LzQtdGB0YLQuNGC0Ywg0L3QvtCy0YvQuSDQt9Cw0LLQtdGA0YjQuNGC0LXQu9GMIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMAorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1LCDQtdGB0LvQuCDQt9Cw0LLQtdGA0YjQuNGC0LXQu9GMINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDIKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1LCDQtdGB0LvQuCDQt9Cw0LLQtdGA0YjQuNGC0LXQu9GMINC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA0Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgtC+0LvRjNC60L4g0LfQsNCy0LXRgNGI0LjRgtC10LvQuCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICLQvdC1INC/0YDQuNC80LXQvdGP0YLRjCDQv9GA0LDQstC40LvQsCDQuNC3INGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNgorbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICLQvtCx0YrQtdC00LjQvdC40YLRjCDQt9C90LDRh9C10L3QuNGPINGA0LDQt9C00LXQu9C10L3QvdGL0LUg0L/RgNC+0LHQtdC70L7QvCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDcKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICLRg9C60LDQt9Cw0L3QuNC1INC+0L/RhtC40Lkg0YDQsNC30LHQvtGA0LAiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA5Cittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTAKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICLQt9Cw0LLQtdGA0YjQuNGC0LXQu9GMIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMQorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICLQt9Cw0LLQtdGA0YjQuNGC0LXQu9C4INC00LvRjyDQtNC+0LHQsNCy0LvQtdC90LjRjyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjAKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLW9ubHktaW5wdXQg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzAKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICLQvdC40YfQtdCz0L4g0L3QtSDQv9C10YDQtdC00LDQvdC+LCDQtNC70Y8g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRhNCw0LnQu9C+0LIg0L3QsCDQvNC10YHRgtC1IgorCisjOiBidWlsdGluL2xvZy5jOjU1Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPNC+0L/RhtC40Lg+XSBbPNC00LjQsNC/0LDQt9C+0L0t0YDQtdC00LDQutGG0LjQuT5dIFtbLS1dIDzQv9GD0YLRjD7igKZdIgorCisjOiBidWlsdGluL2xvZy5jOjU2Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFs80L7Qv9GG0LjQuD5dIDzQvtCx0YrQtdC60YI+4oCmIgorCisjOiBidWlsdGluL2xvZy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAg0LTQu9GPIC0tZGVjb3JhdGU6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE2OAorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YfQvdC40LoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDRhNCw0LnQuyDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g0L/QvtGH0YLQvtCy0YvRhSDQsNC00YDQtdGB0L7QsiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzEKK21zZ2lkICJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgItC00LXQutC+0YDQuNGA0L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0YHRgdGL0LvQutC4INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQtSA80YjQsNCx0LvQvtC90YM+IgorCisjOiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLQvdC1INC00LXQutC+0YDQuNGA0L7QstCw0YLRjCDRgdGB0YvQu9C60Lgg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC1IDzRiNCw0LHQu9C+0L3Rgz4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0Cittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAi0L7Qv9GG0LjQuCDRhNC+0YDQvNCw0YLQsCDQstGL0LLQvtC00LAg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2xvZy5jOjE3NworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICLQntCx0YDQsNCx0L7RgtCw0YLRjCDQtNC40LDQv9Cw0LfQvtC9INGB0YLRgNC+0LogbixtINC40Lcg0YTQsNC50LvQsCwg0L3QsNGH0LjQvdCw0Y8g0YEgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICLQpNC40L3QsNC70YzQvdGL0Lkg0LLRi9Cy0L7QtDogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo1MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlczog0L/Qu9C+0YXQvtC5INGE0LDQudC7IgorCisjOiBidWlsdGluL2xvZy5jOjU0NCBidWlsdGluL2xvZy5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjc4NAorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgItCyIGZvcm1hdC5oZWFkZXJzINC90LUg0YPQutCw0LfQsNC90L4g0LfQvdCw0YfQtdC90LjQtSIKKworIzogYnVpbHRpbi9sb2cuYzo4ODUKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgItGB0LvQuNGI0LrQvtC8INC00LvQuNC90L3QvtC1INC40LzRjyDQstGL0YXQvtC00L3QvtCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi9sb2cuYzo5MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjkxOAorbXNnaWQgIm5lZWQgZXhhY3RseSBvbmUgcmFuZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo5MjgKK21zZ2lkICJub3QgYSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEwNTEKK21zZ2lkICJjb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA1NworbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQsiDQv9C+0LvQtSBpbi1yZXBseS10bzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE2MworbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPNC+0L/RhtC40Lg+XSBbPNC90LDRh9C40L3QsNGPLdGBPiB8IDzQtNC40LDQv9Cw0LfQvtC9LdGA0LXQtNCw0LrRhtC40Lk+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIxCittc2dpZCAidHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzMyIGJ1aWx0aW4vbG9nLmM6MjA3NiBidWlsdGluL2xvZy5jOjIwNzggYnVpbHRpbi9sb2cuYzoyMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM0MiBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM0NworbXNnaWQgImNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzUxCittc2dpZCAiIgorImZhaWxlZCB0byBnZXQgdXBzdHJlYW0sIGlmIHlvdSB3YW50IHRvIHJlY29yZCBiYXNlIGNvbW1pdCBhdXRvbWF0aWNhbGx5LFxuIgorInBsZWFzZSB1c2UgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byB0byB0cmFjayBhIHJlbW90ZSBicmFuY2guXG4iCisiT3IgeW91IGNvdWxkIHNwZWNpZnkgYmFzZSBjb21taXQgYnkgLS1iYXNlPTxiYXNlLWNvbW1pdC1pZD4gbWFudWFsbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzcxCittc2dpZCAiZmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzODIKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgItCx0LDQt9C+0LLRi9C5INC60L7QvNC80LjRgiDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0L/RgNC10LTQutC+0Lwg0YHQv9C40YHQutCwINGA0LXQtNCw0LrRhtC40LkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM4NgorbXNnaWQgImJhc2UgY29tbWl0IHNob3VsZG4ndCBiZSBpbiByZXZpc2lvbiBsaXN0IgorbXNnc3RyICLQsdCw0LfQvtCy0YvQuSDQutC+0LzQvNC40YIg0L3QtSDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LIg0YHQv9C40YHQutC1INGA0LXQtNCw0LrRhtC40LkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQv9Cw0YLRh9CwIgorCisjOiBidWlsdGluL2xvZy5jOjE0OTEKK21zZ2lkICJmYWlsZWQgdG8gaW5mZXIgcmFuZ2UtZGlmZiByYW5nZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTM2Cittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCBbUEFUQ0ggbi9tXSDQtNCw0LbQtSDQutC+0LPQtNCwINC+0LTQuNC9INC/0LDRgtGHIgorCisjOiBidWlsdGluL2xvZy5jOjE1MzkKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCBbUEFUQ0hdINC00LDQttC1INC60L7Qs9C00LAg0L3QtdGB0LrQvtC70YzQutC+INC/0LDRgtGH0LXQuSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQzCittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0L/QsNGC0YfQuCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQ1Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINGB0L7Qv9GA0L7QstC+0LTQuNGC0LXQu9GM0L3QvtC1INC/0LjRgdGM0LzQviIKKworIzogYnVpbHRpbi9sb2cuYzoxNTQ3Cittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L/RgNC+0YHRgtGD0Y4g0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtGMINGH0LjRgdC10Lsg0LTQu9GPINC40LzQtdC9INCy0YvRhdC+0LTQvdGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2xvZy5jOjE1NDgKK21zZ2lkICJzZngiCittc2dzdHIgItGB0YPRhNGE0LjQutGBIgorCisjOiBidWlsdGluL2xvZy5jOjE1NDkKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGB0YPRhNGE0LjQutGBIDzRgdGD0YTRhNC40LrRgT4g0LLQvNC10YHRgtC+IMKrLnBhdGNowrsiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU1MQorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgItC90LDRh9Cw0YLRjCDQvdGD0LzQtdGA0LDRhtC40Y4g0L/QsNGC0YfQtdC5INGBIDxuPiwg0LAg0L3QtSDRgSAxIgorCisjOiBidWlsdGluL2xvZy5jOjE1NTMKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgItC/0L7QvNC10YLQuNGC0Ywg0YHQtdGA0LjRjiDQutCw0Log0Y3QvdC90YPRjiDQv9C+0L/Ri9GC0LrRgyIKKworIzogYnVpbHRpbi9sb2cuYzoxNTU1Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIFtSRkMgUEFUQ0hdINCy0LzQtdGB0YLQviBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE1NTgKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCBbPNC/0YDQtdGE0LjQutGBPl0g0LLQvNC10YHRgtC+IFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU2MQorbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAi0YHQvtGF0YDQsNC90LjRgtGMINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidC40LUg0YTQsNC50LvRiyDQsiA80LrQsNGC0LDQu9C+0LM+IgorCisjOiBidWlsdGluL2xvZy5jOjE1NjQKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAi0L3QtSDQvtCx0YDQtdC30LDRgtGML9C00L7QsdCw0LLQu9GP0YLRjCBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjE1NjcKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0LTQstC+0LjRh9C90YvQtSDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU2OQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC90YPQu9C10LLRg9GOINGF0LXRiC3RgdGD0LzQvNGDINCyINC30LDQs9C+0LvQvtCy0LrQtSBGcm9tIgorCisjOiBidWlsdGluL2xvZy5jOjE1NzEKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgItC90LUg0LLQutC70Y7Rh9Cw0YLRjCDQv9Cw0YLRhywg0LXRgdC70Lgg0LrQvtC80LzQuNGCINGD0LbQtSDQtdGB0YLRjCDQsiDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3MworbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQsiDRhNC+0YDQvNCw0YLQtSDQv9Cw0YLRh9CwLCDQsCDQvdC1INCyINGB0YLQsNC90LTQsNGA0YLQvdC+0LwgKNC/0LDRgtGHICsg0YHRgtCw0YLQuNGB0YLQuNC60LApIgorCisjOiBidWlsdGluL2xvZy5jOjE1NzUKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgItCf0LXRgNC10LTQsNGH0LAg0YHQvtC+0LHRidC10L3QuNC5IgorCisjOiBidWlsdGluL2xvZy5jOjE1NzYKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgItC30LDQs9C+0LvQvtCy0L7QuiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTc3Cittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQt9Cw0LPQvtC70L7QstC+0Log0YHQvtC+0LHRidC10L3QuNGPIgorCisjOiBidWlsdGluL2xvZy5jOjE1NzggYnVpbHRpbi9sb2cuYzoxNTgwCittc2dpZCAiZW1haWwiCittc2dzdHIgItC/0L7Rh9GC0LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU3OAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC30LDQs9C+0LvQvtCy0L7QuiBUbzoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MAorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC30LDQs9C+0LvQvtCy0L7QuiBDYzoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU4MgorbXNnaWQgImlkZW50IgorbXNnc3RyICLQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAi0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LDQtNGA0LXRgSDQvtGC0L/RgNCw0LLQuNGC0LXQu9GPINC90LAgPNC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAPiAo0LjQu9C4INC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQvtC80LzQuNGC0LXRgNCwLCDQtdGB0LvQuCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTg1Cittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAi0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAt0YHQvtC+0LHRidC10L3QuNGPIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODYKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgItGB0LTQtdC70LDRgtGMINC/0LXRgNCy0L7QtSDQv9C40YHRjNC80L4g0L7RgtCy0LXRgtC+0Lwg0L3QsCA80LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAt0YHQvtC+0LHRidC10L3QuNGPPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTg3IGJ1aWx0aW4vbG9nLmM6MTU5MAorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICLQstC70L7QttC10L3QuNC1IgorCisjOiBidWlsdGluL2xvZy5jOjE1ODgKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICLQv9GA0LjQu9C+0LbQuNGC0Ywg0L/QsNGC0YciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5MQorbXNnaWQgImlubGluZSB0aGUgcGF0Y2giCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0L/QsNGC0Ycg0LIg0YLQtdC60YHRgiDQv9C40YHRjNC80LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU5NQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINCyINC/0LjRgdGM0LzQsNGFINC40LXRgNCw0YDRhdC40YfQvdC+0YHRgtGMLCDRgdGC0LjQu9C4OiBzaGFsbG93ICjRh9Cw0YHRgtC40YfQvdGD0Y4pLCBkZWVwICjQs9C70YPQsdC+0LrRg9GOKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTk3Cittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICLQv9C+0LTQv9C40YHRjCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTk4Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC/0L7QtNC/0LjRgdGMIgorCisjOiBidWlsdGluL2xvZy5jOjE1OTkKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAi0LHQsNC30L7QstGL0Lkg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL2xvZy5jOjE2MDAKK21zZ2lkICJhZGQgcHJlcmVxdWlzaXRlIHRyZWUgaW5mbyB0byB0aGUgcGF0Y2ggc2VyaWVzIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INGC0YDQtdCx0L7QstCw0L3QuNC4INC00LXRgNC10LLQsCDQuiDRgdC10YDQuNC4INC/0LDRgtGH0LXQuSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjAyCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC/0L7QtNC/0LjRgdGMINC40Lcg0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjAzCittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyINC/0LDRgtGH0LXQuSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjA1Cittc2dpZCAic2hvdyBwcm9ncmVzcyB3aGlsZSBnZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQstGL0L/QvtC70L3QtdC90LjRjyDQstC+INGB0L7Qt9C00LDQvdC40Y8g0L/QsNGC0YfQtdC5IgorCisjOiBidWlsdGluL2xvZy5jOjE2MDYKK21zZ2lkICJyZXYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjA3Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2MTAKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmVmc3BlYz4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2MTIKK21zZ2lkICJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0YHRgtGA0L7QutCwINC40LTQtdC90YLQuNGE0LjQutCw0YbQuNC4OiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAyCittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA0Cittc2dpZCAiLS1zdWJqZWN0LXByZWZpeC8tLXJmYyBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE3MTIKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwIgorCisjOiBidWlsdGluL2xvZy5jOjE3MTQKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzE2Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrINC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc0OAorbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICLRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQg0LjQu9C4INC60LDRgtCw0LvQvtCzPyIKKworIzogYnVpbHRpbi9sb2cuYzoxODM3Cittc2dpZCAiLS1pbnRlcmRpZmYgcmVxdWlyZXMgLS1jb3Zlci1sZXR0ZXIgb3Igc2luZ2xlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg0MQorbXNnaWQgIkludGVyZGlmZjoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODQ4Cittc2dpZCAiLS1jcmVhdGlvbi1mYWN0b3IgcmVxdWlyZXMgLS1yYW5nZS1kaWZmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg1MgorbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODYwCittc2dpZCAiUmFuZ2UtZGlmZjoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJhbmdlLWRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzaWduYXR1cmUgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyDQv9C+0LTQv9C40YHQuCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTkwOAorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDQv9Cw0YLRh9C10LkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk1MgorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAxMQorbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzzQstGL0YjQtdGB0YLQvtGP0YnQsNGPLdCy0LXRgtC60LA+IFs80YDQtdC00LDQutGG0LjRjz4gWzzQvtCz0YDQsNC90LjRh9C10L3QuNC1Pl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoyMDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiAiCisibWFudWFsbHkuXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YPRjiDQstC90LXRiNC90Y7RjiDQstC10YLQutGDLCDRg9C60LDQttC40YLQtSA80LLRi9GI0LXRgdGC0L7Rj9GJ0YPRji3QstC10YLQutGDPiDQstGA0YPRh9C90YPRji5cbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFs80L7Qv9GG0LjQuD5dIFs80YTQsNC50Ls+4oCmXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIg0YEg0LzQtdGC0LrQsNC80LgiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjgKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGB0LjQvNCy0L7Qu9GLINCyINC90LjQttC90LXQvCDRgNC10LPQuNGB0YLRgNC1INC00LvRjyDCq9C/0YDQtdC00L/QvtC70L7QttC40YLQtdC70YzQvdC+INCx0LXQtyDQuNC30LzQtdC90LXQvdC40LnCuyDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzAKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdmc21vbml0b3IgY2xlYW4nIGZpbGVzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YHQuNC80LLQvtC70Ysg0L3QuNC20L3QtdCz0L4g0YDQtdCz0LjRgdGC0YDQsCDQtNC70Y8g0YTQsNC50LvQvtCyIMKrZnNtb25pdG9yIGNsZWFuwrsiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzIKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LrRjdGI0LjRgNC+0LLQsNC90L3Ri9C1INGE0LDQudC70Ysg0L/RgNC4INCy0YvQstC+0LTQtSAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINGD0LTQsNC70LXQvdC90YvQtSDRhNCw0LnQu9GLINC/0YDQuCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzYKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC40LfQvNC10L3QtdC90L3Ri9C1INGE0LDQudC70Ysg0L/RgNC4INCy0YvQstC+0LTQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzOAorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LTRgNGD0LPQuNC1INGE0LDQudC70Ysg0L/RgNC4INCy0YvQstC+0LTQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDQuNCz0L3QvtGA0LjRgNGD0LXQvNGL0LUg0YTQsNC50LvRiyDQv9GA0Lgg0LLRi9Cy0L7QtNC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQzCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC40LzRjyDQuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdC+0LPQviDQvtCx0YrQtdC60YLQsCDQvdCwINCy0YvQstC+0LTQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINGE0LDQudC70Ysg0LIg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzQtSwg0LrQvtGC0L7RgNGL0LUg0LTQvtC70LbQvdGLINCx0YvRgtGMINGD0LTQsNC70LXQvdGLIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDRgtC+0LvRjNC60L4g0LjQvNC10L3QsCDRgyDCq9C00YDRg9Cz0LjRhcK7INC60LDRgtCw0LvQvtCz0L7QsiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0OQorbXNnaWQgInNob3cgbGluZSBlbmRpbmdzIG9mIGZpbGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC60L7QvdGG0Ysg0YHRgtGA0L7QuiDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTEKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICLQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINC/0YPRgdGC0YvQtSDQutCw0YLQsNC70L7Qs9C4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDQvdC1INGB0LvQuNGC0YvQtSDRhNCw0LnQu9GLINC90LAg0LLRi9Cy0L7QtNC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU2Cittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNC4INC+INGA0LDQt9GA0LXRiNC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyINC4INC+0YLQvNC10L3QtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1OAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0YTQsNC50LvRiywg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC1INGI0LDQsdC70L7QvdGDIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINGI0LDQsdC70L7QvdGLINC40YHQutC70Y7Rh9C10L3QuNGPINC40LcgPNGE0LDQudC7PiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NAorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQv9C+0LrQsNGC0LDQu9C+0LbQvdGL0LUg0YjQsNCx0LvQvtC90Ysg0LjRgdC60LvRjtGH0LXQvdC40Y8g0LjQtyA80YTQsNC50Ls+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTY2Cittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C1INC40YHQutC70Y7Rh9C10L3QuNGPIGdpdCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MAorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC/0YPRgtC4INC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviDQutC+0YDQvdC10LLQvtCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQv9GA0L7QtdC60YLQsCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICLRgNC10LrRg9GA0YHQuNCy0L3QviDQv9C+INC/0L7QtNC80L7QtNGD0LvRj9C8IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc1Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICLQtdGB0LvQuCDQutCw0LrQvtC5LdC70LjQsdC+IDzRhNCw0LnQuz4g0L3QtSDQsiDQuNC90LTQtdC60YHQtSwg0YHRh9C40YLQsNGC0Ywg0Y3RgtC+INC+0YjQuNCx0LrQvtC5IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc2Cittc2dpZCAidHJlZS1pc2giCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LAiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICLQv9GA0LjRgtCy0L7RgNC40YLRjNGB0Y8sINGH0YLQviDQv9GD0YLQuCDRg9C00LDQu9C10L3Riywg0YIu0LouIDzRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwPiDQtdGJ0LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzkKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC+0YLQu9Cw0LTQvtGH0L3Rg9GOINC40L3RhNC+0YDQvNCw0YbQuNGOIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICJnaXQgbHMtcmVtb3RlIFstLWhlYWRzXSBbLS10YWdzXSBbLS1yZWZzXSBbLS11cGxvYWQtcGFjaz080LfQsNC/0YPRgdC6Pl1cbiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiAgICAgICAgICAgICAgICAgICAgIFstLXN5bXJlZl0gWzzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbPNGB0YHRi9C70LrQuD7igKZdXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0YwgVVJMINCy0L3QtdGI0L3QuNGFINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQsiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MCBidWlsdGluL2xzLXJlbW90ZS5jOjYyIGJ1aWx0aW4vcmViYXNlLmM6MTQ1OAorbXNnaWQgImV4ZWMiCittc2dzdHIgItC30LDQv9GD0YHQuiIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MSBidWlsdGluL2xzLXJlbW90ZS5jOjYzCittc2dpZCAicGF0aCBvZiBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSBob3N0IgorbXNnc3RyICLQv9GD0YLRjCDQuiBnaXQtdXBsb2FkLXBhY2sg0L3QsCDQstC90LXRiNC90LXQvCDRgdC10YDQstC10YDQtSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LjRgtGMINCy0YvQstC+0LQg0LzQtdGC0LrQsNC80LgiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQuNGC0Ywg0LLRi9Cy0L7QtCDRg9C60LDQt9Cw0YLQtdC70Y/QvNC4INC90LAg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NworbXNnaWQgImRvIG5vdCBzaG93IHBlZWxlZCB0YWdzIgorbXNnc3RyICLQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINGD0LTQsNC70ZHQvdC90YvQtSDQvNC10YLQutC4IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgItGD0YfQuNGC0YvQstCw0YLRjCB1cmwuPNCx0LDQt9CwPi5pbnN0ZWFkT2YiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzIKK21zZ2lkICJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiCittc2dzdHIgItCy0YvRhdC+0LTQuNGC0Ywg0YEg0LrQvtC00L7QvCAyLCDQtdGB0LvQuCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LUg0YHRgdGL0LvQutC4INC90LUg0L3QsNC50LTQtdC90YsiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzUKK21zZ2lkICJzaG93IHVuZGVybHlpbmcgcmVmIGluIGFkZGl0aW9uIHRvIHRoZSBvYmplY3QgcG9pbnRlZCBieSBpdCIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgtCw0LrQttC1INCy0L3Rg9GC0YDQtdC90L3RjtGOINGB0YHRi9C70LrRgyDQsiDQtNC+0L/QvtC70L3QtdC90LjQtSDQuiDQvtCx0YrQtdC60YLRgywg0L3QsCDQutC+0YLQvtGA0YvQuSDQvtC90LAg0YPQutCw0LfRi9Cy0LDQtdGCIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzozMAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs80L7Qv9GG0LjQuD5dIDzRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwPiBbPNC/0YPRgtGMPuKApl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0LTQtdGA0LXQstGM0Y8iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAi0L/RgNC+0YXQvtC00LjRgtGMINGA0LXQutGD0YDRgdC40LLQvdC+INCyINC/0L7QtNC00LXRgNC10LLRjNGPIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzIKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC00LXRgNC10LLRjNGPINC/0YDQuCDRgNC10LrRg9GA0YHQuNCy0L3QvtC8INC/0YDQvtGF0L7QtNC1IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLRgNCw0LfQtNC10LvRj9GC0Ywg0LfQsNC/0LjRgdC4INGBINC/0L7QvNC+0YnRjNGOINCd0KPQm9CV0JLQntCT0J4g0LHQsNC50YLQsCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDRgNCw0LfQvNC10YAg0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOCBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGC0L7Qu9GM0LrQviDQuNC80LXQvdCwINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0L7Qu9C90YvQtSDQv9GD0YLQuCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ1Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQv9C+0LvQvdC+0LUg0LTQtdGA0LXQstC+OyDQvdC1INGC0L7Qu9GM0LrQviDRgtC10LrRg9GJ0LjQuSDQutCw0YLQsNC70L7QsyAo0LLQutC70Y7Rh9Cw0LXRgiDQsiDRgdC10LHRjyAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWFpbHNwbGl0LmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IG1ib3g6ICclcyciCittc2dzdHIgItC/0YPRgdGC0L7QuSBtYm94OiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NAorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzzQvtC/0YbQuNC4Pl0gWzzQutC+0LzQvNC40YI+4oCmXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU1Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTYKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTYKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgItC/0YDQuCDRg9C60LDQt9Cw0L3QuNC4INC/0LDRgNCw0LzQtdGC0YDQsCDCq23CuyDRgtGA0LXQsdGD0LXRgtGB0Y8g0YPQutCw0LfQsNGC0Ywg0LfQvdCw0YfQtdC90LjQtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INGB0YLRgNCw0YLQtdCz0LjRjiDRgdC70LjRj9C90LjRjyDCqyVzwrsuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi0JTQvtGB0YLRg9C/0L3Ri9C1INGB0YLRgNCw0YLQtdCz0LjQuDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgItCU0L7RgdGC0YPQv9C90YvQtSDQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjQtSDRgdGC0YDQsNGC0LXQs9C40Lg6IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQyIGJ1aWx0aW4vcHVsbC5jOjE1MAorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDRgdGC0LDRgtC40YHRgtC40LrRgyDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtGB0LvQtSDQvtC60L7QvdGH0LDQvdC40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDUgYnVpbHRpbi9wdWxsLmM6MTUzCittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdGC0LDRgtC40YHRgtC40LrRgyDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtGB0LvQtSDQvtC60L7QvdGH0LDQvdC40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDYgYnVpbHRpbi9wdWxsLmM6MTU2Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKNGB0LjQvdC+0L3QuNC8INC00LvRjyAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjE1OQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCAo0LzQsNC60YHQuNC80YPQvCA8bj4pINC30LDQv9C40YHQtdC5INC40Lcg0LrQvtGA0L7RgtC60L7Qs9C+INC20YPRgNC90LDQu9CwINCyINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDRgyDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MSBidWlsdGluL3B1bGwuYzoxNjUKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0L7QtNC40L0g0LrQvtC80LzQuNGCLCDQstC80LXRgdGC0L4g0LLRi9C/0L7Qu9C90LXQvdC40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTMgYnVpbHRpbi9wdWxsLmM6MTY4Cittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDQutC+0LzQvNC40YIsINC10YHQu9C4INGB0LvQuNGP0L3QuNC1INC/0YDQvtGI0LvQviDRg9GB0L/QtdGI0L3QviAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU1IGJ1aWx0aW4vcHVsbC5jOjE3MQorbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAi0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQv9C10YDQtdC0INCy0YvQv9C+0LvQvdC10L3QuNC10Lwg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTcKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L/QtdGA0LXQvNC+0YLQutGDINCy0L/QtdGA0LXQtCAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU5IGJ1aWx0aW4vcHVsbC5jOjE3OAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgItC+0YLQvNC10L3QuNGC0Ywg0LLRi9C/0L7Qu9C90LXQvdC40LUg0YHQu9C40Y/QvdC40Y8sINC10YHQu9C4INC/0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQg0L3QtdCy0L7Qt9C80L7QttC90LAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjMgYnVpbHRpbi9wdWxsLmM6MTgxCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0YwsINGH0YLQviDRg9C60LDQt9Cw0L3QvdGL0Lkg0LrQvtC80LzQuNGCINC40LzQtdC10YIg0LLQtdGA0L3Rg9GOINGN0LvQtdC60YLRgNC+0L3QvdGD0Y4g0L/QvtC00L/QuNGB0YwgR1BHIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY0IGJ1aWx0aW4vbm90ZXMuYzo3ODcgYnVpbHRpbi9wdWxsLmM6MTg1CisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MiBidWlsdGluL3JlYmFzZS5jOjE0NzEgYnVpbHRpbi9yZXZlcnQuYzoxMTMKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAi0YHRgtGA0LDRgtC10LPQuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY1IGJ1aWx0aW4vcHVsbC5jOjE4NgorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfRg9C10LzQsNGPINGB0YLRgNCw0YLQtdCz0LjRjyDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL3B1bGwuYzoxODkKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y890LfQvdCw0YfQtdC90LjQtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL3B1bGwuYzoxOTAKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLQvtC/0YbQuNC4INC00LvRjyDQstGL0LHRgNCw0L3QvdC+0Lkg0YHRgtGA0LDRgtC10LPQuNC4INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5Cittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICLRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0LTQu9GPINGB0LvQuNGP0L3QuNGPICjQtNC70Y8g0YHQu9C40Y/QvdC40Y8g0LHQtdC3INC/0LXRgNC10LzQvtGC0LrQuCDQstC/0LXRgNC10LQpIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc2Cittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgItC+0YLQvNC10L3QuNGC0Ywg0LLRi9C/0L7Qu9C90LXQvdC40LUg0L/RgNC+0LjRgdGF0L7QtNGP0YnQtdCz0L4g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzgKK21zZ2lkICJjb250aW51ZSB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAi0L/RgNC+0LTQvtC70LbQuNGC0Ywg0LLRi9C/0L7Qu9C90LXQvdC40LUg0L/RgNC+0LjRgdGF0L7QtNGP0YnQtdCz0L4g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODAgYnVpbHRpbi9wdWxsLmM6MTk3Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0YHQu9C40Y/QvdC40LUg0L3QtdGB0LLRj9C30LDQvdC90YvRhSDQuNGB0YLQvtGA0LjQuSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODYKK21zZ2lkICJ2ZXJpZnkgY29tbWl0LW1zZyBob29rIgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0Ywg0L/QtdGA0LXRhdCy0LDRgtGH0LjQuiBjb21taXQtbXNnIgorCisjOiBidWlsdGluL21lcmdlLmM6MzExCittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXNoLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxNgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INCy0YvQv9C+0LvQvdC10L3QuNC4IHN0YXNoIgorCisjOiBidWlsdGluL21lcmdlLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQvtCx0YrQtdC60YI6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQzIGJ1aWx0aW4vbWVyZ2UuYzozNjAKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40LggcmVhZC10cmVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MzkwCittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAo0L3QtdGH0LXQs9C+INGD0L/Qu9C+0YLQvdGP0YLRjCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLQo9C/0LvQvtGC0L3QtdC90LjQtSDQutC+0LzQvNC40YLQsCDigJQg0L3QtSDQvtCx0L3QvtCy0LvRj9GPIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgItCd0LXRgiDRgdC+0L7QsdGJ0LXQvdC40Y8g0YHQu9C40Y/QvdC40Y8g4oCUINC90LUg0L7QsdC90L7QstC70Y/QtdC8IEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICLCqyVzwrsg0L3QtSDRg9C60LDQt9GL0LLQsNC10YIg0L3QsCDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGB0YLRgNC+0LrQsCBicmFuY2guJXMubWVyZ2VvcHRpb25zOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcxMgorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgItCd0LUg0L7QsdGA0LDQsdCw0YLRi9Cy0LDRjiDQvdC40YfQtdCz0L4sINC60YDQvtC80LUg0YHQu9C40Y/QvdC40Y8g0LTQstGD0YUg0YPQutCw0LfQsNGC0LXQu9C10Lkg0L3QsCDQstC10YLQutC4LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C10YHRgtGMINC40Lcgwqslc8K7IgorCisjOiBidWlsdGluL21lcmdlLmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAi0J3QtSDQstGL0L/QvtC70L3Rj9GOINC60L7QvNC80LjRgiDRgdC70LjRj9C90LjRjzsg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBjb21taXTCuyDQtNC70Y8g0LfQsNCy0LXRgNGI0LXQvdC40Y8g0YHQu9C40Y/QvdC40Y8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDgKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTMKK21zZ2lkICJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg1NworbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAi0J/Rg9GB0YLQvtC1INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICLQn9GA0LXQutGA0LDRgdC90L4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7QstC10YHRgtC4INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LUg0YHQu9C40Y/QvdC40LU7INC40YHQv9GA0LDQstGM0YLQtSDQutC+0L3RhNC70LjQutGC0Ysg0Lgg0YHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0YDQtdC30YPQu9GM0YLQsNGC0LAuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzUKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgItCd0LXRgiDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC4LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3NworbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0KMg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDQvdC10YIg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3OQorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0JTQu9GPINGC0LXQutGD0YnQtdC5INCy0LXRgtC60Lgg0L3QtSDRg9C60LDQt9Cw0L3QsCDQstGL0YjQtdGB0YLQvtGP0YnQsNGPINCy0LXRgtC60LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgItCd0LUg0YPQutCw0LfQsNC90LAg0LLQvdC10YjQvdGP0Y8g0L7RgtGB0LvQtdC20LjQstCw0LXQvNCw0Y8g0LLQtdGC0LrQsCDQtNC70Y8gJXMg0L3QsCAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIHZhbHVlICclcycgaW4gZW52aXJvbm1lbnQgJyVzJyIKK21zZ3N0ciAi0J/Qu9C+0YXQvtC1INC30L3QsNGH0LXQvdC40LUgwqslc8K7INCyINC/0LXRgNC10LzQtdC90L3QvtC5INC+0LrRgNGD0LbQtdC90LjRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIKK21zZ3N0ciAi0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGC0LXQvCwg0YfRgtC+INC80L7QttC90L4g0YHQu9C40YLRjCDQsiAlczogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTc4Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgItC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgtC10LwsINGH0YLQviDQvNC+0LbQvdC+INGB0LvQuNGC0YwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjgxCittc2dpZCAiLS1hYm9ydCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAi0L7Qv9GG0LjRjyAtLWFib3J0INC90LUg0L/RgNC40L3QuNC80LDQtdGCINCw0YDQs9GD0LzQtdC90YLRiyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODUKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgItCd0LXRgiDRgdC70LjRj9C90LjRjywg0LrQvtGC0L7RgNC+0LUg0LzQvtC20L3QviDQvtGC0LzQtdC90LjRgtGMICjQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINGE0LDQudC7IE1FUkdFX0hFQUQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTcKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICLQvtC/0YbQuNGPIC0tY29udGludWUg0L3QtSDQv9GA0LjQvdC40LzQsNC10YIg0LDRgNCz0YPQvNC10L3RgtGLIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMwMQorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIGluIHByb2dyZXNzIChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAi0KHQtdC50YfQsNGBINC90LUg0L/RgNC+0LjRgdGF0L7QtNC40YIg0YHQu9C40Y/QvdC40LUgKNC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0YTQsNC50LsgTUVSR0VfSEVBRCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxNworbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgItCS0Ysg0L3QtSDQt9Cw0LLQtdGA0YjQuNC70Lgg0YHQu9C40Y/QvdC40LUgKNC/0YDQuNGB0YPRgtGB0YLQstGD0LXRgiDRhNCw0LnQuyBNRVJHRV9IRUFEKS5cbtCS0YvQv9C+0LvQvdC40YLQtSDQutC+0LzQvNC40YIg0LLQsNGI0LjRhSDQuNC30LzQtdC90LXQvdC40LksINC/0LXRgNC10LQg0YHQu9C40Y/QvdC40LXQvC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzI0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAi0JLRiyDQvdC1INC30LDQstC10YDRiNC40LvQuCDQutC+0L/QuNGA0L7QstCw0L3QuNC1INC60L7QvNC80LjRgtCwICjQv9GA0LjRgdGD0YLRgdGC0LLRg9C10YIg0YTQsNC50LsgQ0hFUlJZX1BJQ0tfSEVBRCkuXG7Qn9C+0LbQsNC70YPQudGB0YLQsCwg0LfQsNC60L7QvNC80LjRgtGM0YLQtSDQstCw0YjQuCDQuNC30LzQtdC90LXQvdC40Y8sINC/0LXRgNC10LQg0YHQu9C40Y/QvdC40LXQvC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzI3Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICLQktGLINC90LUg0LfQsNCy0LXRgNGI0LjQu9C4INC60L7Qv9C40YDQvtCy0LDQvdC40LUg0LrQvtC80LzQuNGC0LAgKNC/0YDQuNGB0YPRgtGB0YLQstGD0LXRgiDRhNCw0LnQuyBDSEVSUllfUElDS19IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQxCittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgItCd0LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IC0tc3F1YXNoINC4IC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0OQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICLQmtC+0LzQvNC40YIg0L3QtSDRg9C60LDQt9Cw0L0g0Lgg0L/QsNGA0LDQvNC10YLRgCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSDQvdC1INGD0YHRgtCw0L3QvtCy0LvQtdC9LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNjYKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAi0KPQv9C70L7RgtC90LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0LIg0L/Rg9GB0YLRg9GOINCy0LXRgtC60YMg0LXRidC1INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNjgKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAi0JrQvtC80LzQuNGCLCDQvdC1INGP0LLQu9GP0Y7RidC40LnRgdGPINC/0LXRgNC10LzQvtGC0LrQvtC5INCy0L/QtdGA0LXQtCwg0L3QtdGCINGB0LzRi9GB0LvQsCDQtNC10LvQsNGC0Ywg0LIg0L/Rg9GB0YLRg9GOINCy0LXRgtC60YMuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0YLQtdC8LCDRh9GC0L4g0LzQvtC20L3QviDRgdC70LjRgtGMIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3NQorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgItCc0L7QttC90L4g0YLQvtC70YzQutC+INC+0LTQuNC9INC60L7QvNC80LjRgiDQsiDQv9GD0YHRgtGD0Y4g0LLQtdGC0LrRgy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDU0Cittc2dpZCAicmVmdXNpbmcgdG8gbWVyZ2UgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAi0L7RgtC60LDQtyDRgdC70LjRj9C90LjRjyDQvdC10YHQstGP0LfQsNC90L3Ri9GFINC40YHRgtC+0YDQuNC5INC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NjMKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICLQo9C20LUg0L7QsdC90L7QstC70LXQvdC+LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1ICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAi0J/QvtC/0YvRgtC60LAg0YLRgNC40LLQuNCw0LvRjNC90L7Qs9C+INGB0LvQuNGP0L3QuNGPINCyINC40L3QtNC10LrRgdC14oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgItCd0LUg0LLRi9GI0LvQvi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDcKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIKK21zZ3N0ciAi0KPQttC1INC+0LHQvdC+0LLQu9C10L3Qvi4g0JrRgNGD0YLQviEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTUzCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICLQn9C10YDQtdC80L7RgtC60LAg0LLQv9C10YDQtdC0INC90LXQstC+0LfQvNC+0LbQvdCwLCDQvtGC0LzQtdC90LAuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NiBidWlsdGluL21lcmdlLmM6MTY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAi0J/QtdGA0LXQvNC+0YLQutCwINC00LXRgNC10LLQsCDQuiDQuNGB0YXQvtC00L3QvtC80YMg0YHQvtGB0YLQvtGP0L3QuNGO4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICLQn9C+0L/Ri9GC0LrQsCDRgdC70LjRj9C90LjRjyDRgSDQv9C+0LzQvtGJ0YzRjiDRgdGC0YDQsNGC0LXQs9C40LggJXPigKZcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgItCd0Lgg0L7QtNC90LAg0YHRgtGA0LDRgtC10LPQuNGPINGB0LvQuNGP0L3QuNGPINC90LUg0L7QsdGA0LDQsdC+0YLQsNC70LAg0YHQu9C40Y/QvdC40LUuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICLQodCx0L7QuSDQv9GA0Lgg0YHQu9C40Y/QvdC40Lgg0YEg0L/QvtC80L7RidGM0Y4g0YHRgtGA0LDRgtC10LPQuNC4ICVzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfRg9GOICVzINC00LvRjyDQv9C+0LTQs9C+0YLQvtCy0LrQuCDRgNGD0YfQvdC+0LPQviDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0L7Qsi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7QtSDRgdC70LjRj9C90LjQtSDQv9GA0L7RiNC70L4g0YPRgdC/0LXRiNC90L47INC60LDQuiDQuCDQt9Cw0L/RgNCw0YjQuNCy0LDQu9C4LCDQvtGB0YLQsNC90L7QstC70LXQvdC+INC/0LXRgNC10LQg0LLRi9C/0L7Qu9C90LXQvdC40LXQvCDQutC+0LzQvNC40YLQsFxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDzQutC+0LzQvNC40YI+IDzQutC+0LzQvNC40YI+4oCmIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMworbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPNC60L7QvNC80LjRgj7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA80LrQvtC80LzQuNGCPuKApiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzUKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDzQutC+0LzQvNC40YI+IDzQutC+0LzQvNC40YI+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPNGB0YHRi9C70LrQsD4gWzzQutC+0LzQvNC40YI+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTUzCittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQstGB0LXRhSDQvtCx0YnQuNGFINC/0YDQtdC00LrQvtCyIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTUKK21zZ2lkICJmaW5kIGFuY2VzdG9ycyBmb3IgYSBzaW5nbGUgbi13YXkgbWVyZ2UiCittc2dzdHIgItCy0YvQstC10YHRgtC4INC/0YDQtdC00LrQvtCyINC00LvRjyDQvtC00L3QvtCz0L4g0LzQvdC+0LPQvtGF0L7QtNC+0LLQvtCz0L4g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0YDQtdC00LDRhtC40LksINC60L7RgtC+0YDRi9C1INC90LUg0LTQvtGB0YLQuNC20LjQvNGLINC40Lcg0LTRgNGD0LMg0LTRgNGD0LPQsCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU5Cittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICLRj9Cy0LvRj9C10YLRgdGPINC/0LXRgNCy0YvQvCDQv9GA0LXQtNC60L7QvCDQstGC0L7RgNC+0LPQviDRg9C60LDQt9Cw0L3QvdC+0LPQviDQutC+0LzQvNC40YLQsD8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE2MQorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICLQvdCw0LnRgtC4INC20YPRgNC90LDQu9C1INGB0YHRi9C70L7QuiA80YHRgdGL0LvQutCwPiDQs9C00LUg0LjQvNC10L3QvdC+IDzQutC+0LzQvNC40YI+INGA0LDQt9Cy0LXRgtCy0LjQu9GB0Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjkKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICJnaXQgbWVyZ2UtZmlsZSBbPNC+0L/RhtC40Lg+XSBbLUwg0LjQvNGPMSBbLUwgb3JpZyBbLUwg0LjQvNGPMl1dXSA80YTQsNC50LsxPiA80L7RgNC40LMt0YTQsNC50Ls+IDzRhNCw0LnQuzI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGA0LXQt9GD0LvRjNGC0LDRgiDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIGRpZmYzINGB0LvQuNGP0L3QuNC1IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAi0L/RgNC4INCy0L7Qt9C90LjQutC90L7QstC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyLCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L3QsNGI0YMg0LLQtdGA0YHQuNGOIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLQv9GA0Lgg0LLQvtC30L3QuNC60L3QvtCy0LXQvdC40Lgg0LrQvtC90YTQu9C40LrRgtC+0LIsINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQuNGFINCy0LXRgNGB0LjRjiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDEKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICLQv9GA0Lgg0LLQvtC30L3QuNC60L3QvtCy0LXQvdC40Lgg0LrQvtC90YTQu9C40LrRgtC+0LIsINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtCx0LUg0LLQtdGA0YHQuNC4IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICLQv9GA0Lgg0LLQvtC30L3QuNC60L3QvtCy0LXQvdC40Lgg0LrQvtC90YTQu9C40LrRgtC+0LIsINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRjdGC0L7RgiDRgNCw0LfQvNC10YAg0LzQsNGA0LrQtdGA0LAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICLQvdC1INC/0YDQtdC00YPQv9GA0LXQttC00LDRgtGMINC+INC60L7QvdGE0LvQuNC60YLQsNGFIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAi0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LzQtdGC0LrQuCDQtNC70Y8g0YTQsNC50LsxL9C+0YDQuNCzLdGE0LDQudC7L9GE0LDQudC7MiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90LDRjyDQvtC/0YbQuNGPICVzIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0L7QsdGK0LXQutGCIMKrJXPCuyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gItC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDQsdCw0LfRiy4g0JjQs9C90L7RgNC40YDRg9GOICVzLiIKK21zZ3N0clsxXSAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LHQvtC70YzRiNC1ICVkINCx0LDQty4g0JjQs9C90L7RgNC40YDRg9GOICVzLiIKK21zZ3N0clsyXSAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LHQvtC70YzRiNC1ICVkINCx0LDQty4g0JjQs9C90L7RgNC40YDRg9GOICVzLiIKK21zZ3N0clszXSAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LHQvtC70YzRiNC1ICVkINCx0LDQt9GLLiDQmNCz0L3QvtGA0LjRgNGD0Y4gJXMuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY0Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAi0L3QtSDQvtCx0YDQsNCx0LDRgtGL0LLQsNGOINC90LjRh9C10LPQviwg0LrRgNC+0LzQtSDRgdC70LjRj9C90LjRjyDQtNCy0YPRhSDRg9C60LDQt9Cw0YLQtdC70LXQuSDQvdCwINCy0LXRgtC60LguIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjcwIGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgcmVmICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNGB0L/QvtC30L3QsNGC0Ywg0YHRgdGL0LvQutGDIMKrJXPCuyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXNcbiIKK21zZ3N0ciAi0KHQu9C40Y/QvdC40LUgJXMg0LggJXNcbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NgorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0Cittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgItCy0LLQvtC0INC+0YLQtNC10LvRkdC90L3Ri9C5INCd0KPQm9CV0JLQq9Cc0Jgg0YHQuNC80LLQvtC70LDQvNC4IgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0LTQvtC/0YPRgdGC0LjRgtGMINC+0YLRgdGD0YLRgdGC0LLQuNC1INC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU2Cittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICLQtNC+0L/Rg9GB0YLQuNGC0Ywg0YHQvtC30LTQsNC90LjQtSDQsdC+0LvQtdC1INC+0LTQvdC+0LPQviDQtNC10YDQtdCy0LAiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjkKK21zZ2lkICJnaXQgbXVsdGktcGFjay1pbmRleCBbLS1vYmplY3QtZGlyPTxkaXI+XSAod3JpdGV8dmVyaWZ5KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyMgorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgY29udGFpbmluZyBzZXQgb2YgcGFja2ZpbGUgYW5kIHBhY2staW5kZXggcGFpcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NDAgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo2NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgdmVyYjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE4Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPNC+0L/RhtC40Lg+XSA80LjRgdGC0L7Rh9C90LjQuj7igKYgPNC90LDQt9C90LDRh9C10L3QuNC1PiIKKworIzogYnVpbHRpbi9tdi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMgJXMg0LIg0LjQvdC00LXQutGB0LUg0Lgg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC/0L7QtNC80L7QtNGD0LvQtdC8PyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgItCn0YLQvtCx0Ysg0L/RgNC+0LTQvtC70LbQuNGC0YwsINC/0YDQvtC40L3QtNC10LrRgdC40YDRg9C50YLQtSDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQstCw0YjQuCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YTQsNC50LvQtSAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzINCyINC40L3QtNC10YHQtSIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0L/QtdGA0LXQvNC10YnQsNGC0Ywv0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YwsINC00LDQttC1INC10YHQu9C4INGG0LXQu9GMINGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL212LmM6MTI3Cittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgItC/0YDQvtC/0YPRgdC60LDRgtGMINC+0YjQuNCx0LrQuCDQv9GA0Lgg0L/QtdGA0LXQvNC10YnQtdC90LjQuC/Qv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC4IgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICLRhtC10LvQtdCy0L7QuSDQv9GD0YLRjCDCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC60LDRgtCw0LvQvtCz0L7QvCIKKworIzogYnVpbHRpbi9tdi5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjRjyDQuNC3IMKrJXPCuyDQsiDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgItC/0LvQvtGF0L7QuSDQuNGB0YLQvtGH0L3QuNC6IgorCisjOiBidWlsdGluL212LmM6MTg3Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC/0LXRgNC10LzQtdGB0YLQuNGC0Ywg0LrQsNGC0LDQu9C+0LMg0LIg0YHQsNC80L7Qs9C+INGB0LXQsdGPIgorCisjOiBidWlsdGluL212LmM6MTkwCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC/0LXRgNC10LzQtdGB0YLQuNGC0Ywg0LrQsNGC0LDQu9C+0LMg0LIg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICLQuNGB0YXQvtC00L3Ri9C5INC60LDRgtCw0LvQvtCzINC/0YPRgdGCIgorCisjOiBidWlsdGluL212LmM6MjI0Cittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAi0L3QtSDQv9C+0LQg0LLQtdGA0YHQuNC+0L3QvdGL0Lwg0LrQvtC90YLRgNC+0LvQtdC8IgorCisjOiBidWlsdGluL212LmM6MjI3Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICLRhtC10LvQtdCy0L7QuSDQv9GD0YLRjCDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAi0L/QtdGA0LXQt9Cw0L/QuNGB0Ywgwqslc8K7IgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC30LDQv9C40YHQsNGC0YwiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDEKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgItC90LXRgdC60L7Qu9GM0LrQviDQuNGB0YLQvtGH0L3QuNC60L7QsiDQtNC70Y8g0L7QtNC90L7Qs9C+INGG0LXQu9C10LLQvtCz0L4g0L/Rg9GC0LgiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgItGG0LXQu9C10LLQvtC5INC60LDRgtCw0LvQvtCzINC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCDQvtGC0LrRg9C00LA9JXMsINC60YPQtNCwPSVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUgJXMg0LIgJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjI3NyBidWlsdGluL3JlbW90ZS5jOjcxNyBidWlsdGluL3JlcGFjay5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Lggwqslc8K7IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzU1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzQvtC/0YbQuNC4Pl0gPNC60L7QvNC80LjRgj7igKYiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozNTYKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPNC+0L/RhtC40Lg+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjM1NworbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzQvtC/0YbQuNC4Pl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQxNQorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0LjQvNC10L3QsCAo0LHQtdC3IFNIQS0xKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQxNgorbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQvNC10YLQutC4INC00LvRjyDQuNC80LXQvdC+0LLQsNC90LjRjyDQutC+0LzQvNC40YLQvtCyIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDE4Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0YHRgdGL0LvQutC4LCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LUgPNGI0LDQsdC70L7QvdGDPiAiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MjAKK21zZ2lkICJpZ25vcmUgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRgdGB0YvQu9C60LgsINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQtSA80YjQsNCx0LvQvtC90YM+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDIyCittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INCy0YHQtdGFINC60L7QvNC80LjRgtC+0LIsINC00L7RgdGC0LjQttC40LzRi9GFINGB0L4g0LLRgdC10YUg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDIzCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQyNAorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINCy0YvQstC+0LQgwqt1bmRlZmluZWTCuywg0LXRgdC70Lgg0L3QtSDQvdCw0LnQtNC10L3QviAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDMwCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgItGA0LDQt9GL0LzQtdC90L7QstGL0LLQsNGC0Ywg0LLQstC10LTQtdC90L3Ri9C1INC80LXRgtC60LggKNC00LvRjyDQstC90YPRgtGA0LXQvdC90LXQs9C+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gW2xpc3QgWzzQvtCx0YrQtdC60YI+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IgorIiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDzRgdC+0L7QsdGJ0LXQvdC40LU+IHwgLUYgPNGE0LDQudC7PiB8ICgtYyB8IC1DKSA80L7QsdGK0LXQutGCPl0gWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gY29weSBbLWZdIDzQuNC3LdC+0LHRitC10LrRgtCwPiA80LIt0L7QsdGK0LXQutGCPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwiCisiICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA80YHQvtC+0LHRidC10L3QuNC1PiB8IC1GIDzRhNCw0LnQuz4gfCAoLWMgfCAtQykgPNC+0LHRitC10LrRgj5dIFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIHNob3cgWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA80YHRgtGA0LDRgtC10LPQuNGPPl0gPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIHJlbW92ZSBbPNC+0LHRitC10LrRgj7igKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW5dIFstdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNC40LzRjy3Qt9Cw0LzQtdGC0LrQuD5dIHBydW5lIFstbl0gWy12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBbPNC+0LHRitC10LrRgj5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYWRkIFs80L7Qv9GG0LjQuD5dIFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NAorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs80L7Qv9GG0LjQuD5dIDzQuNC3LdC+0LHRitC10LrRgtCwPiA80LIt0L7QsdGK0LXQutGCPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU1Cittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzzQuNC3LdC+0LHRitC10LrRgtCwPiA80LIt0L7QsdGK0LXQutGCPl3igKYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MAorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPNC+0L/RhtC40Lg+XSBbPNC+0LHRitC10LrRgj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPNC+0LHRitC10LrRgj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPNC+0LHRitC10LrRgj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPNC+0L/RhtC40Lg+XSA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODIKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NworbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6OTIKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NworbXNnaWQgIldyaXRlL2VkaXQgdGhlIG5vdGVzIGZvciB0aGUgZm9sbG93aW5nIG9iamVjdDoiCittc2dzdHIgItCX0LDQv9C40YHQsNGC0Ywv0LjQt9C80LXQvdC40YLRjCDQt9Cw0LzQtdGC0LrQuCDQtNC70Y8g0YHQu9C10LTRg9GO0YnQtdCz0L4g0L7QsdGK0LXQutGC0LA6IgorCisjOiBidWlsdGluL25vdGVzLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDCq3Nob3fCuyDQtNC70Y8g0L7QsdGK0LXQutGC0LAgwqslc8K7IgorCisjOiBidWlsdGluL25vdGVzLmM6MTU0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LLRi9Cy0L7QtCDCq3Nob3fCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCy0LXRgNGI0LjRgtGMIMKrc2hvd8K7INC00LvRjyDQvtCx0YrQtdC60YLQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTcKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgItC/0L7QttCw0LvRg9C50YHRgtCwLCDRg9C60LDQttC40YLQtSDRgdC+0LTQtdGA0LbQuNC80L7QtSDQt9Cw0LzQtdGC0LrQuCwg0LjRgdC/0L7Qu9GM0LfRg9GPINC+0L/RhtC40Y4gLW0g0LjQu9C4IC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjA2Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0L7QsdGK0LXQutGCINC30LDQvNC10YLQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICLRgdC+0LTQtdGA0LbQuNC80L7QtSDQt9Cw0LzQtdGC0LrQuCDQvtGB0YLQsNC70L7RgdGMINCyICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQyIGJ1aWx0aW4vdGFnLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDQuNC70Lgg0L/RgNC+0YfQuNGC0LDRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MyBidWlsdGluL25vdGVzLmM6MzEzIGJ1aWx0aW4vbm90ZXMuYzozMTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODMgYnVpbHRpbi9ub3Rlcy5jOjQzOCBidWlsdGluL25vdGVzLmM6NTI2CisjOiBidWlsdGluL25vdGVzLmM6NTMxIGJ1aWx0aW4vbm90ZXMuYzo2MTAgYnVpbHRpbi9ub3Rlcy5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfRgNC10YjQuNGC0Ywgwqslc8K7INC60LDQuiDRgdGB0YvQu9C60YMuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGCIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQtNCw0L3QvdGL0LUg0LfQsNC80LXRgtC60Lgg0LjQtyDQvdC10LTQstC+0LjRh9C90L7Qs9C+INC+0LHRitC10LrRgtCwIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0LLQstC10LTQtdC90L3QsNGPINGB0YLRgNC+0LrQsDogwqslc8K7LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC60L7Qv9C40YDQvtCy0LDRgtGMINC30LDQvNC10YLQutGDINC40Lcgwqslc8K7INCyIMKrJXPCuyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBmaXJzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgZ2l0CisjLiBub3RlcyBjb21tYW5kOiAnYWRkJywgJ21lcmdlJywgJ3JlbW92ZScsIGV0Yy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICLQvtGC0LrQsNC3INCyINC/0LXRgNC10LfQsNC/0LjRgdC4ICVzINC30LDQvNC10YLQvtC6INCyICVzICjQt9CwINC/0YDQtdC00LXQu9Cw0LzQuCByZWZzL25vdGVzLykiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzYgYnVpbHRpbi9ub3Rlcy5jOjQzMSBidWlsdGluL25vdGVzLmM6NTA5CisjOiBidWlsdGluL25vdGVzLmM6NTIxIGJ1aWx0aW4vbm90ZXMuYzo1OTggYnVpbHRpbi9ub3Rlcy5jOjY2NQorIzogYnVpbHRpbi9ub3Rlcy5jOjgxNSBidWlsdGluL25vdGVzLmM6OTYzIGJ1aWx0aW4vbm90ZXMuYzo5ODUKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICLQv9C10YDQtdC00LDQvdC+INGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0L/QsNGA0LDQvNC10YLRgNC+0LIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozODkgYnVpbHRpbi9ub3Rlcy5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICLQvdC1INC90LDQudC00LXQvdCwINC30LDQvNC10YLQutCwINC00LvRjyDQvtCx0YrQtdC60YLQsCAlcy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTAgYnVpbHRpbi9ub3Rlcy5jOjU3NgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgItGC0LXQutGB0YLQvtCy0L7QtSDRgdC+0LTQtdGA0LbQuNC80L7QtSDQt9Cw0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMyBidWlsdGluL25vdGVzLmM6NTc5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgItGB0L7QtNC10YDQttC40LzQvtC1INC30LDQvNC10YLQutC4INCyINGE0LDQudC70LUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTYgYnVpbHRpbi9ub3Rlcy5jOjU4MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC4INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRg9C60LDQt9Cw0L3QvdGL0Lkg0L7QsdGK0LXQutGCINC30LDQvNC10YLQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NDE5IGJ1aWx0aW4vbm90ZXMuYzo1ODUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRg9C60LDQt9Cw0L3QvdGL0Lkg0L7QsdGK0LXQutGCINC30LDQvNC10YLQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NDIyIGJ1aWx0aW4vbm90ZXMuYzo1ODgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDRgdC+0YXRgNCw0L3QtdC90LjQtSDQv9GD0YHRgtC+0Lkg0LfQsNC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MjMgYnVpbHRpbi9ub3Rlcy5jOjQ5NgorbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgItC30LDQvNC10L3QuNGC0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC1INC30LDQvNC10YLQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0Ywg0LfQsNC80LXRgtC60YMuINCd0LDQudC00LXQvdCwINGB0YPRidC10YHRgtCy0YPRjtGJ0LDRjyDQt9Cw0LzQtdGC0LrQsCDRgyDQvtCx0YrQtdC60YLQsCAlcy4g0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQv9Cw0YDQsNC80LXRgtGAIMKrLWbCuyDQtNC70Y8g0L/QtdGA0LXQt9Cw0L/QuNGB0Lgg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFINC30LDQvNC10YLQvtC6LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ2MyBidWlsdGluL25vdGVzLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAi0J/QtdGA0LXQt9Cw0L/QuNGB0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFINC30LDQvNC10YLQvtC6INGDINC+0LHRitC10LrRgtCwICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NzUgYnVpbHRpbi9ub3Rlcy5jOjYzNyBidWlsdGluL25vdGVzLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INC30LDQvNC10YLQutC4INGDINC+0LHRitC10LrRgtCwICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTcKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHRitC10LrRgtGLINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAi0LfQsNCz0YDRg9C30LjRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQv9C10YDQtdC30LDQv9C40YHQuCDQtNC70Y8g0LrQvtC80LDQvdC00YsgPNC60L7QvNCw0L3QtNCwPiAo0LLQutC70Y7Rh9Cw0LXRgiDQsiDRgdC10LHRjyAtLXN0ZGluKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxNworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0L3QviDRgdC70LjRiNC60L7QvCDQvNCw0LvQviDQv9Cw0YDQsNC80LXRgtGA0L7QsiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSIKKyIgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQt9Cw0LzQtdGC0LrRgy4g0J3QsNC50LTQtdC90LAg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQsNGPINC30LDQvNC10YLQutCwINGDINC+0LHRitC10LrRgtCwICVzLiDQmNGB0L/QvtC70YzQt9GD0LnRgtC1INC/0LDRgNCw0LzQtdGC0YAgwqstZsK7INC00LvRjyDQv9C10YDQtdC30LDQv9C40YHQuCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40YUg0LfQsNC80LXRgtC+0LouIgorCisjOiBidWlsdGluL25vdGVzLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICLQvdC10YIg0LfQsNC80LXRgtC+0Log0YMg0LjRgdGF0L7QtNC90L7Qs9C+INC+0LHRitC10LrRgtCwICVzLiDQndC10LvRjNC30Y8g0YHQutC+0L/QuNGA0L7QstCw0YLRjC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAi0J7Qv9GG0LjQuCAtbS8tRi8tYy8tQyDQtNC70Y8g0L/QvtC00LrQvtC80LDQvdC00YsgwqtlZGl0wrsg0YPRgdGC0LDRgNC10LvQuC5cbtCY0YHQv9C+0LvRjNC30YPQudGC0LUg0LLQvNC10YHRgtC+INC90LjRhSDCq2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUPCuy5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjY5OAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YHRgdGL0LvQutGDIE5PVEVTX01FUkdFX1BBUlRJQUwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YHRgdGL0LvQutGDIE5PVEVTX01FUkdFX1JFRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcwMgorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJ2dpdCBub3RlcyBtZXJnZScgd29ya3RyZWUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMgwqtnaXQgbm90ZXMgbWVyZ2XCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRgdGB0YvQu9C60YMgTk9URVNfTUVSR0VfUEFSVElBTCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyNAorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0LrQvtC80LzQuNGCINC40LcgTk9URVNfTUVSR0VfUEFSVElBTC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvNC80LjRgiDQuNC3IE5PVEVTX01FUkdFX1BBUlRJQUwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzM5Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9GA0LXRiNC40YLRjCBOT1RFU19NRVJHRV9SRUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NDIKK21zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgbm90ZXMgbWVyZ2UiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCy0LXRgNGI0LjRgtGMINGB0LvQuNC90LjQtSDQt9Cw0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINGB0YLRgNCw0YLQtdCz0LjRjyDRgdC70LjRj9C90LjRjyDQt9Cw0LzQtdGC0L7QuiAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4NAorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAi0J7QsdGJ0LjQtSDQvtC/0YbQuNC4IgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc4OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgIgorIihtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQutC+0L3RhNC70LjQutGC0Ysg0LfQsNC80LXRgtC+0Log0YEg0L/QvtC80L7RidGM0Y4g0YPQutCw0LfQsNC90L3QvtC5INGB0YLRgNCw0YLQtdCz0LjQuCAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uL2NhdF9zb3J0X3VuaXEpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi0JrQvtC80LzQuNGCINC90LUg0YHQu9C40YLRi9GFINC30LDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL25vdGVzLmM6NzkyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi0LfQsNCy0LXRgNGI0LjRgtGMINGB0LvQuNGP0L3QuNC1INC30LDQvNC10YLQvtC6INC60L7QvNC80LjRgtC+0Lwg0L3QtSDRgdC70LjRgtGL0YUg0LfQsNC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICLQntGC0LzQtdC90LAg0YDQsNC30YDQtdGI0LXQvdC40Y8g0YHQu9C40Y/QvdC40Y8g0LfQsNC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OTYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAi0L7RgtC80LXQvdC40YLRjCDRgdC70LjRj9C90LjQtSDQt9Cw0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgwNworbXNnaWQgImNhbm5vdCBtaXggLS1jb21taXQsIC0tYWJvcnQgb3IgLXMvLS1zdHJhdGVneSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4gLS1jb21taXQsIC0tYWJvcnQg0LggLXMvLS1zdHJhdGVneSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgxMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAi0LLRiyDQtNC+0LvQttC90Ysg0YPQutCw0LfQsNGC0Ywg0YHRgdGL0LvQutGDINC30LDQvNC10YLQutC4INC00LvRjyDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAg0LTQu9GPIC1zLy0tc3RyYXRlZ3k6ICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgImEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICLRgdC70LjRj9C90LjQtSDQt9Cw0LzQtdGC0L7QuiDQsiAlcyDRg9C20LUg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyDQvdCwICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINCw0LTRgNC10YEg0YLQtdC60YPRidC10Lkg0YHRgdGL0LvQutC4INC90LAg0LfQsNC80LXRgtC60YMgKCVzKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCIKKyIgJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgIgorIi0tYWJvcnQnLlxuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INGB0LvQuNGC0Ywg0LfQsNC80LXRgtC60LguINCY0YHQv9GA0LDQstGM0YLQtSDQutC+0L3RhNC70LjQutGC0Ysg0LIgJXMg0Lgg0LfQsNC60L7QvNC80LjRgtGM0YLQtSDRgNC10LfRg9C70YzRgtCw0YIg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXTCuywg0LjQu9C4INC/0YDQtdGA0LLQuNGC0LUg0L/RgNC+0YbQtdGB0YEg0YHQu9C40Y/QvdC40Y8g0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydMK7LlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDQt9GA0LXRiNC40YLRjCDCqyVzwrsg0LrQsNC6INGB0YHRi9C70LrRgy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgItCjINC+0LHRitC10LrRgtCwICVzINC90LXRgiDQt9Cw0LzQtdGC0LrQuFxuIgorCisjOiBidWlsdGluL25vdGVzLmM6OTEyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICLQv9C+0L/Ri9GC0LrQsCDRg9C00LDQu9C10L3QuNGPINC90LXRgdGD0YnQtdGB0YLQstGD0Y7RidC10Lkg0LfQsNC80LXRgtC60Lgg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC+0YjQuNCx0LrQvtC5IgorCisjOiBidWlsdGluL25vdGVzLmM6OTE1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDQuNC80LXQvdCwINC+0LHRitC10LrRgtC+0LIg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NCBidWlsdGluL3BydW5lLmM6MTMwIGJ1aWx0aW4vd29ya3RyZWUuYzoxNjUKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgItC90LUg0YPQtNCw0LvRj9GC0YwsINGC0L7Qu9GM0LrQviDQv9C+0LrQsNC30LDRgtGMINGB0L/QuNGB0L7QuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0L/QuNGB0L7QuiDRg9C00LDQu9C10L3QvdGL0YUg0LfQsNC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5OTgKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgItGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQt9Cw0LzQtdGC0LrRgyDQuNC3IDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0L/QvtC00LrQvtC80LDQvdC00LA6ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzzQvtC/0YbQuNC4PuKApl0gWzwgPNGB0L/QuNGB0L7Qui3RgdGB0YvQu9C+0Lo+IHwgPCA80YHQv9C40YHQvtC6LdC+0LHRitC10LrRgtC+0LI+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MworbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICJnaXQgcGFjay1vYmplY3RzIFs80L7Qv9GG0LjQuD7igKZdIDzQuNC80Y8t0LHQsNC30Ys+IFs8IDzRgdC/0LjRgdC+0Lot0YHRgdGL0LvQvtC6PiB8IDwgPNGB0L/QuNGB0L7Qui3QvtCx0YrQtdC60YLQvtCyPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYWNrZWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBpcyBpbnZhbGlkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBwYWNrZmlsZSBmb3IgcmV1c2U6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4Cittc2dpZCAidW5hYmxlIHRvIHNlZWsgaW4gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODA5Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MzcKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICLQvtGC0LrQu9GO0YfQtdC90LjQtSDQt9Cw0L/QuNGB0Lgg0LHQuNGC0L7QstGL0YUg0LrQsNGA0YIsINGC0LDQuiDQutCw0Log0LrQsNGA0YLRiyDQsdGL0LvQuCDRgNCw0LfQsdC40YLRiyDQvdCwINGH0LDRgdGC0Lgg0LjQty3Qt9CwIHBhY2sucGFja1NpemVMaW1pdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NTAKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgItCX0LDQv9C40YHRjCDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkxMiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTE2MQorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICLQvtGC0LrQu9GO0YfQtdC90LjQtSDQt9Cw0L/QuNGB0Lgg0LHQuNGC0L7QstGL0YUg0LrQsNGA0YIsINGC0LDQuiDQutCw0Log0L3QtdC60L7RgtC+0YDRi9C1INC+0LHRitC10LrRgtGLINC90LUg0LHRi9C70Lgg0YPQv9Cw0LrQvtCy0LDQvdGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxODY3Cittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0J/QvtC00YHRh9C10YIg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxOTk3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGA0LDQt9C80LXRgCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3QgaGVhZGVyIG9mICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQt9Cw0LPQvtC70L7QstC+0Log0L7QsdGK0LXQutGC0LAgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjA4MiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwOTgKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDg1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTIyCittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcyIKK21zZ3N0ciAi0J/RgNC4INGB0LbQsNGC0LjQuCDQuNC30LzQtdC90LXQvdC40Lkg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00L4gJWQg0L/QvtGC0L7QutC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFjayBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRhZyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjcKK21zZ2lkICJDb21wcmVzc2luZyBvYmplY3RzIgorbXNnc3RyICLQodC20LDRgtC40LUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjczCittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgZWRnZSBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg1OAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIC0tbWlzc2luZyIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INC30L3QsNGH0LXQvdC40LUg0LTQu9GPIC0tbWlzc2luZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTE3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAyNQorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2sgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCBhdCAlcyBjb3VsZCBub3QgYmUgZXhhbWluZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDMzCittc2dpZCAidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmV2ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE1MworbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgItC90LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzQsNGPINCy0LXRgNGB0LjRjyDQuNC90LTQtdC60YHQsCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgItC/0LvQvtGF0LDRjyDQstC10YDRgdC40Y8g0LjQvdC00LXQutGB0LAgwqslc8K7IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDAKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC/0YDQvtCz0YDQtdGB0YEg0LLRi9C/0L7Qu9C90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQstGL0L/QvtC70L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ0Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQstGL0L/QvtC70L3QtdC90LjRjyDQstC+INCy0YDQtdC80Y8g0LfQsNC/0LjRgdC4INC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NworbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAi0L/QvtGF0L7QttC1INC90LAgLS1hbGwtcHJvZ3Jlc3Mg0L/RgNC4INCy0LrQu9GO0YfQtdC90L3QvtC8INC/0YDQvtCz0YDQtdGB0YHQtSDQstGL0L/QvtC70L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ4Cittc2dpZCAiPHZlcnNpb24+Wyw8b2Zmc2V0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ5Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAi0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCDQv9Cw0LrQtdGC0LAg0LIg0YPQutCw0LfQsNC90L3QvtC5INCy0LXRgNGB0LjQuCDRhNC+0YDQvNCw0YLQsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUyCittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9GM0L3Ri9C5INGA0LDQt9C80LXRgCDQutCw0LbQtNC+0LPQviDQstGL0YXQvtC00L3QvtCz0L4g0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NAorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINGH0YPQttC40LUg0L7QsdGK0LXQutGC0YssINCy0LfRj9GC0YvQtSDQuNC3INCw0LvRjNGC0LXRgNC90LDRgtC40LLQvdC+0LPQviDRhdGA0LDQvdC40LvQuNGJ0LAg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU2Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0YPQv9Cw0LrQvtCy0LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU4Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQuNGC0Ywg0L7QutC90L4g0L/QsNC60LXRgtCwINC/0L4g0LrQvtC70LjRh9C10YHRgtCy0YMg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAi0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L4g0Log0LrQvtC70LjRh9C10YHRgtCy0YMg0L7QsdGK0LXQutGC0L7QsiDQvtCz0YDQsNC90LjRh9C40YLRjCDQvtC60L3QviDQv9Cw0LrQtdGC0LAg0L/QviDQv9Cw0LzRj9GC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MgorbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0YDQsNC30YDQtdGI0LXQvdC90LDRjyDQtNC70LjQvdCwINGG0LXQv9C+0YfQutC4INC00LXQu9GM0YIg0LIg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LXQvCDQv9Cw0LrQtdGC0LUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2NAorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0L7QstGC0L7RgNC90L4g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC1INC00LXQu9GM0YLRiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY2Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0L7QstGC0L7RgNC90L4g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjgKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtCx0YrQtdC60YLRiyBPRlNfREVMVEEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MAorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvNC90L7Qs9C+0L/QvtGC0L7Rh9C90L7RgdGC0Ywg0L/RgNC4INC/0L7QuNGB0LrQtSDQu9GD0YfRiNC40YUg0YHQvtCy0L/QsNC00LXQvdC40Lkg0LTQtdC70YzRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcyCittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAi0L3QtSDRgdC+0LfQtNCw0LLQsNGC0Ywg0L/Rg9GB0YLRi9C1INCy0YvRhdC+0LTQvdGL0LUg0L/QsNC60LXRgtGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzQKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0LDRgNCz0YPQvNC10L3RgtGLINGA0LXQtNCw0LrRhtC40Lkg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc2Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LjRgtGM0YHRjyDQvtCx0YrQtdC60YLQsNC80LgsINC60L7RgtC+0YDRi9C1INC10YnQtSDQvdC1INGD0L/QsNC60L7QstCw0L3RiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc5Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0L7QsdGK0LXQutGC0YssINC60L7RgtC+0YDRi9C1INC00L7RgdGC0LjQttC40LzRiyDQv9C+INC70Y7QsdC+0Lkg0LjQtyDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MgorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQvtCx0YrQtdC60YLRiywg0L3QsCDQutC+0YLQvtGA0YvQtSDRgdGB0YvQu9Cw0Y7RgtGB0Y8g0LfQsNC/0LjRgdC4INC20YPRgNC90LDQu9CwINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg1Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQvtCx0YrQtdC60YLRiywg0L3QsCDQutC+0YLQvtGA0YvQtSDRgdGB0YvQu9Cw0LXRgtGB0Y8g0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODgKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgItCy0YvQstC10YHRgtC4INC/0LDQutC10YIg0L3QsCAg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQstGL0LLQvtC0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTAKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0L7QsdGK0LXQutGC0Ysg0LzQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LUg0YHRgdGL0LvQsNGO0YLRgdGPINC90LAg0YPQv9Cw0LrQvtCy0YvQstCw0LXQvNGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MgorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0YHQvtGF0YDQsNC90Y/RgtGMINGB0YHRi9C70LrQuCDQvdCwINC90LXQtNC+0YHRgtGD0L/QvdGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NAorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0L/QsNC60L7QstCw0YLRjCDQvdC10LTQvtGB0YLQuNC20LjQvNGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NgorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLRgNCw0YHQv9Cw0LrQvtCy0LDRgtGMINC90LXQtNC+0YHRgtGD0L/QvdGL0LUg0L7QsdGK0LXQutGC0YssINC60L7RgtC+0YDRi9C1INC90L7QstC10LUsINGH0LXQvCA80LLRgNC10LzRjz4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5OQorbXNnaWQgInVzZSB0aGUgc3BhcnNlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAxCittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgItGB0L7Qt9C00LDQstCw0YLRjCDRgtC+0L3QutC40LUg0L/QsNC60LXRgtGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDMKK21zZ2lkICJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIKK21zZ3N0ciAi0YHQvtC30LTQsNCy0LDRgtGMINC/0LDQutC10YLRiywg0L/QvtC00YXQvtC00Y/RidC40LUg0LTQu9GPINGH0LDRgdGC0LjRh9C90YvRhSDQuNC30LLQu9C10YfQtdC90LjQuSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzA1Cittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC/0LDQutC10YLRiywg0YDRj9C00L7QvCDRgSDQutC+0YLQvtGA0YvQvNC4INC70LXQttC40YIgLmtlZXAg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwNworbXNnaWQgImlnbm9yZSB0aGlzIHBhY2siCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRjdGC0L7RgiDQv9Cw0LrQtdGCIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDkKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICLRg9GA0L7QstC10L3RjCDRgdC20LDRgtC40Y8g0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTEKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAi0L3QtSDRgdC60YDRi9Cy0LDRgtGMINC60L7QvNC80LjRgtGLINGB0YDQsNGJ0LXQvdC40Y/QvNC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTMKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgItC/0L4g0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LjQvdC00LXQutGBINCyINCx0LjRgtC+0LLRi9GFINC60LDRgNGC0LDRhSwg0LTQu9GPINGD0YHQutC+0YDQtdC90LjRjyDQv9C+0LTRgdGH0LXRgtCwINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNQorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgItC30LDQv9C40YHRjCDQuNC90LTQtdC60YHQsCDQsiDQsdC40YLQvtCy0YvRhSDQutCw0YDRgtCw0YUg0LLQvNC10YHRgtC1INGBINC40L3QtNC10LrRgdC+0Lwg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTgKK21zZ2lkICJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtC60LAg0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzIxCittc2dpZCAiZG8gbm90IHBhY2sgb2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgItC90LUg0YPQv9Cw0LrQvtCy0YvQstCw0YLRjCDQvtCx0YrQtdC60YLRiyDQsiBwcm9taXNvciDRhNCw0LnQu9GLINC/0LDQutC10YLQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMjMKK21zZ2lkICJyZXNwZWN0IGlzbGFuZHMgZHVyaW5nIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBjaGFpbiBkZXB0aCAlZCBpcyB0b28gZGVlcCwgZm9yY2luZyAlZCIKK21zZ3N0ciAi0LPQu9GD0LHQuNC90LAg0YbQtdC/0L7Rh9C60Lgg0LjQt9C80LXQvdC10L3QuNC5ICVkINGB0LvQuNGI0LrQvtC8INCx0L7Qu9GM0YjQsNGPLCDQuNGB0L/QvtC70YzQt9GD0Y4g0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4gJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM1MworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAi0LvQuNGB0LjRgiBwYWNrLmRlbHRhQ2FjaGVMaW1pdCDRgdC70LjRiNC60L7QvCDQstGL0YHQvtC60LjQuSwg0LjRgdC/0L7Qu9GM0LfRg9GOINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+ICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDcKK21zZ2lkICItLW1heC1wYWNrLXNpemUgY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSBwYWNrIGZvciB0cmFuc2ZlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDkKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE3Cittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMworbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0ODQKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICLQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2VkICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSIKK21zZ3N0ciAi0JLRgdC10LPQviAlPFBSSXUzMj4gKNC40LfQvNC10L3QtdC90LjRjyAlPFBSSXUzMj4pLCDQv9C+0LLRgtC+0YDQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QviAlPFBSSXUzMj4gKNC40LfQvNC10L3QtdC90LjRjyAlPFBSSXUzMj4pIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE2Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICLQv9Cw0LrQvtCy0LDRgtGMINCy0YHRkSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNworbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICLQv9C+0YfQuNGB0YLQuNGC0Ywg0YHQu9Cw0LHRi9C1INGB0YHRi9C70LrQuCAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjkKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MgorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INC00YPQsdC70LjRgNGD0Y7RidC40YXRgdGPINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMgorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tcHJvZ3Jlc3NdIFstLWV4cGlyZSA80LLRgNC10LzRjz5dIFstLV0gWzzRgNC10LTQsNC60YbQuNGPPuKApl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0L/QuNGB0L7QuiDRg9C00LDQu9C10L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDQvtCx0YrQtdC60YLRiyDRgdGC0LDRgNC10LUg0YfQtdC8IDzQtNCw0YLQsC3QvtC60L7QvdGH0LDQvdC40Y8+IgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LjRgtGMINC+0LHRhdC+0LQg0L7QsdGK0LXQutGC0LDQvNC4INCy0L3QtSBwcm9taXNvciDRhNCw0LnQu9C+0LIg0L/QsNC60LXRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgItC90LXQu9GM0LfRjyDQv9C+0YfQuNGB0YLQuNGC0Ywg0L3QtdC40YHQv9C+0LvRjNC30YPQtdC80YvQtSDQvtCx0YrQtdC60YLRiyDQsiBwcmVjaW91cy1vYmplY3RzINGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY2IGJ1aWx0aW4vcHVsbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgJXM6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4OAorbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPNC+0L/RhtC40Lg+XSBbPNGA0LXQv9C+0LfQuNGC0L7RgNC40Lk+IFs80YHQv9C10YbQuNGE0LjQutCw0YLQvtGALdGB0YHRi9C70LrQuD7igKZdXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQwCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgItGD0L/RgNCw0LLQu9C10L3QuNC1INGA0LXQutGD0YDRgdC40LLQvdGL0Lwg0LjQt9Cy0LvQtdGH0LXQvdC40LXQvCDQv9C+0LTQvNC+0LTRg9C70LXQuSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ0Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgItCe0L/RhtC40LgsINGB0LLRj9C30LDQvdC90YvQtSDRgdC+INGB0LvQuNGP0L3QuNC10LwiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NworbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAi0LfQsNCx0YDQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGBINC/0L7QvNC+0YnRjNGOINC/0LXRgNC10LzQtdGJ0LXQvdC40Y8sINCwINC90LUg0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NSBidWlsdGluL3JlYmFzZS5jOjQ0NyBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC/0LXRgNC10LzQvtGC0LrRgyDQstC/0LXRgNC10LQiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4NAorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIgcmViYXNlIgorbXNnc3RyICLQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQstGL0L/QvtC70L3Rj9GC0Ywgc3Rhc2gvc3Rhc2ggcG9wINC00L4g0Lgg0L/QvtGB0LvQtSDQv9C10YDQtdC80LXRidC10L3QuNGPIgorCisjOiBidWlsdGluL3B1bGwuYzoyMDAKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgItCe0L/RhtC40LgsINGB0LLRj9C30LDQvdC90YvQtSDRgSDQuNC30LLQu9C10YfQtdC90LjQtdC8INC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9wdWxsLmM6MjEwCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90LDRjyDQv9C10YDQtdC30LDQv9C40YHRjCDQu9C+0LrQsNC70YzQvdC+0Lkg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9wdWxsLmM6MjE4Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQviDQv9C+0LTQvNC+0LTRg9C70LXQuSwg0LrQvtGC0L7RgNGL0LUg0LHRg9C00YPRgiDQv9C+0LvRg9GH0LXQvdGLINC/0LDRgNGA0LDQu9C10LvRjNC90L4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciBwdWxsLmZmOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LTQu9GPIHB1bGwuZmY6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzAKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICLQndC10YIg0L/RgNC10YLQtdC90LTQtdC90YLQvtCyINC00LvRjyDQv9C10YDQtdC80LXRidC10L3QuNGPINGB0YDQtdC00Lgg0YHRgdGL0LvQvtC6LCDQutC+0YLQvtGA0YvQtSDQstGLINGC0L7Qu9GM0LrQviDRh9GC0L4g0L/QvtC70YPRh9C40LvQuC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzMgorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICLQndC10YIg0L/RgNC10YLQtdC90LTQtdC90YLQvtCyINC00LvRjyDRgdC70LjRj9C90LjRjyDRgdGA0LXQtNC4INGB0YHRi9C70L7Quiwg0LrQvtGC0L7RgNGL0LUg0LLRiyDRgtC+0LvRjNC60L4g0YfRgtC+INC/0L7Qu9GD0YfQuNC70LguIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzMKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICLQntCx0YvRh9C90L4g0Y3RgtC+INC+0LfQvdCw0YfQsNC10YIsINGH0YLQviDQstGLINC/0LXRgNC10LTQsNC70Lgg0YHQv9C10YbQuNGE0LjQutCw0YbQuNGOINGB0YHRi9C70LrQuCDRgSDQv9C+0LzQvtGJ0YzRjiDRiNCw0LHQu9C+0L3QsCDQuCDRjdGC0L7RgiDRiNCw0LHQu9C+0L0g0L3QuCDRgSDRh9C10Lwg0L3QtSDRgdC+0LLQv9Cw0Lsg0L3QsCDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgItCS0Ysg0L/QvtC/0YDQvtGB0LjQu9C4INC/0L7Qu9GD0YfQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGB0L4g0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIMKrJXPCuywg0L3QviDQvdC1INGD0LrQsNC30LDQu9C4INCy0LXRgtC60YMuINCi0LDQuiDQutCw0Log0Y3RgtC+INC90LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQtNC70Y8gINCy0LDRiNC10Lkg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCwg0LLRiyDQtNC+0LvQttC90Ysg0YPQutCw0LfQsNGC0Ywg0LLQtdGC0LrRgyDQsiDQutC+0LzQsNC90LTQvdC+0Lkg0YHRgtGA0L7QutC1LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQxIGJ1aWx0aW4vcmViYXNlLmM6MTMyMSBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0L3QuCDQvdCwINC+0LTQvdC+0Lkg0LjQtyDQstC10YLQvtC6LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQzIGJ1aWx0aW4vcHVsbC5jOjQ1OCBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINGD0LrQsNC20LjRgtC1INC90LAg0LrQsNC60YPRjiDQstC10YLQutGDINCy0Ysg0YXQvtGC0LjRgtC1INC/0LXRgNC10LzQtdGB0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ1IGJ1aWx0aW4vcHVsbC5jOjQ2MCBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICLQn9C+0LbQsNC70YPQudGB0YLQsCwg0YPQutCw0LbQuNGC0LUg0YEg0LrQsNC60L7QuSDQstC10YLQutC+0Lkg0LLRiyDRhdC+0YLQuNGC0LUg0YHQu9C40YLRjCDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDYgYnVpbHRpbi9wdWxsLmM6NDYxCittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi0JTQu9GPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40LgsINGB0LzQvtGC0YDQuNGC0LUgZ2l0LXB1bGwoMSkuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDggYnVpbHRpbi9wdWxsLmM6NDU0IGJ1aWx0aW4vcHVsbC5jOjQ2MworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzI3IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjQKK21zZ2lkICI8cmVtb3RlPiIKK21zZ3N0ciAiPNCy0L3QtdGI0L3QuNC5LdGA0LXQv9C+0LfQuNGC0L7RgNC40Lk+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NDggYnVpbHRpbi9wdWxsLmM6NDYzIGJ1aWx0aW4vcHVsbC5jOjQ2OAorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI80LLQtdGC0LrQsD4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NiBidWlsdGluL3JlYmFzZS5jOjEzMTkgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3NQorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQoyDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC4INC90LXRgiDQuNC90YTQvtGA0LzQsNGG0LjQuCDQvtCxINC+0YLRgdC70LXQttC40LLQsNC90LjQuC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YPQutCw0LfQsNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0Lkg0LLQtdGC0LrQtSwg0LLRi9C/0L7Qu9C90LjRgtC1OiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorbXNnc3RyICLQktCw0YjQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y8g0YPQutCw0LfRi9Cy0LDQtdGCLCDRh9GC0L4g0L3Rg9C20L3QviDRgdC70LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgdC+INGB0YHRi9C70LrQvtC5XG7CqyVzwrsg0LjQtyDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8sINC90L4g0YLQsNC60LDRjyDRgdGB0YvQu9C60LAg0L3QtSDQsdGL0LvQsCDQv9C+0LvRg9GH0LXQvdCwLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg1NAorbXNnaWQgImlnbm9yaW5nIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZm9yIHJlYmFzZSIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40LUgLS12ZXJpZnktc2lnbmF0dXJlcyDQv9GA0Lgg0L/QtdGA0LXQvNC10YnQtdC90LjQuCIKKworIzogYnVpbHRpbi9wdWxsLmM6OTA5Cittc2dpZCAiLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gaXMgb25seSB2YWxpZCB3aXRoIC0tcmViYXNlLiIKK21zZ3N0ciAiLS1bbm8tXWF1dG9zdGFzaCDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LLQvNC10YHRgtC1INGBIC0tcmViYXNlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTE3Cittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40LUg0LXRidC1INC90LUg0L3QsNGH0LDQstGI0LXQudGB0Y8g0LLQtdGC0LrQuCDRgSDQuNC30LzQtdC90LXQvdC40Y/QvNC4LCDQtNC+0LHQsNCy0LvQtdC90L3Ri9C80Lgg0LIg0LjQvdC00LXQutGBLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTIxCittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAi0L/QvtC70YPRh9C10L3QuNC1INGBINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvCIKKworIzogYnVpbHRpbi9wdWxsLmM6OTIyCittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAi0YHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LjRhS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgItC40LfQstC70LXRh9C10L3QuNC1INC+0LHQvdC+0LLQuNC70L4g0YPQutCw0LfQsNGC0LXQu9GMINC90LAg0LLQsNGI0YMg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgy5cbtC/0LXRgNC10LzQvtGC0LrQsCDQstCw0YjQtdCz0L4g0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwXG7RgSDQutC+0LzQvNC40YLQsCAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQvNC+0YLQsNGC0Ywg0LLQv9C10YDRkdC0INC40LfQvNC10L3QtdC90LjRjyDQsiDQstCw0YjQtdC8INGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUuXG7Qn9C+0YHQu9C1INGC0L7Qs9C+LCDQutCw0Log0LLRiyDRg9Cx0LXQtNC40YLQtdGB0YwsINGH0YLQviDQstGLINGB0L7RhdGA0LDQvdC40LvQuCDQstGB0ZEg0L3QtdC+0LHRhdC+0LTQuNC80L7QtSDQuNC3INCy0YvQstC+0LTQsFxuJCBnaXQgZGlmZiAlc1xuLCDQt9Cw0L/Rg9GB0YLQuNGC0LVcbiQgZ2l0IHJlc2V0IC0taGFyZFxu0LTQu9GPINCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y8g0LjRgdGF0L7QtNC90L7Qs9C+INGB0L7RgdGC0L7Rj9C90LjRjy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk2OAorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICLQndC10LvRjNC30Y8g0YHQu9C40YLRjCDQvdC10YHQutC+0LvRjNC60L4g0LLQtdGC0L7QuiDQsiDQv9GD0YHRgtC+0Lkg0YPQutCw0LfQsNGC0LXQu9GMINC90LAg0LLQtdGC0LrRgy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk3MgorbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0LXRgNC10LzQtdGB0YLQuNGC0Ywg0L3QsNC0INC90LXRgdC60L7Qu9GM0LrQuNC80Lgg0LLQtdGC0LrQsNC80LguIgorCisjOiBidWlsdGluL3B1bGwuYzo5NzkKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAi0L3QtdCy0L7Qt9C80L7QttC90L4g0LLRi9C/0L7Qu9C90LjRgtGMINC/0LXRgNC10LzQtdGJ0LXQvdC40LUg0YEg0LfQsNC/0LjRgdCw0L3QvdGL0LzQuCDQu9C+0LrQsNC70YzQvdGL0LzQuCDQuNC30LzQtdC90LXQvdC40Y/QvNC4INCyINC/0L7QtNC80L7QtNGD0LvRj9GFIgorCisjOiBidWlsdGluL3B1c2guYzoxOQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPNC+0L/RhtC40Lg+XSBbPNGA0LXQv9C+0LfQuNGC0L7RgNC40Lk+IFs80YHQv9C10YbQuNGE0LjQutCw0YLQvtGALdGB0YHRi9C70LrQuD7igKZdXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTExCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICLRg9C60LDQt9Cw0L3QviDRgdC+0LrRgNCw0YnQtdC90LjQtSB0YWcsINC90L4g0L3QtSDRg9C60LDQt9Cw0L3QsCDRgdCw0LzQsCA80LzQtdGC0LrQsD4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMQorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICLQvtC/0YbQuNGPIC0tZGVsZXRlINC/0YDQuNC90LjQvNCw0LXRgiDRgtC+0LvRjNC60L4g0L/RgNC+0YHRgtGL0LUg0YbQtdC70LXQstGL0LUg0LjQvNC10L3QsCDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE2NworbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIlxu0KfRgtC+0LHRiyDQstGL0LHRgNCw0YLRjCDQu9GO0LHRg9GOINC40Lcg0L7Qv9GG0LjQuSDQvdCwINC/0L7RgdGC0L7Rj9C90L3QvtC5INC+0YHQvdC+0LLQtSwg0YHQvNC+0YLRgNC40YLQtSBwdXNoLmRlZmF1bHQg0LIgwqtnaXQgaGVscCBjb25maWfCuy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQvdC1INC90LDRhdC+0LTQuNGC0LXRgdGMINC90Lgg0L3QsCDQvtC00L3QvtC5INC40Lcg0LLQtdGC0L7Qui5cbtCn0YLQvtCx0Ysg0L7RgtC/0YDQsNCy0LjRgtGMINC40YHRgtC+0YDQuNGOLCDQstC10LTRg9GJ0YPRjiDQuiDRgtC10LrRg9GJ0LXQvNGDICjQvtGC0LTQtdC70ZHQvdC90YvQuSBIRUFEKSDRgdC+0YHRgtC+0Y/QvdC40Y4sINC40YHQv9C+0LvRjNC30YPQudGC0LVcblxuICAgIGdpdCBwdXNoICVzIEhFQUQ6PNC40LzRjy3QstC90LXRiNC90LXQuS3QstC10YLQutC4PlxuIgorCisjOiBidWlsdGluL3B1c2guYzoxOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgItCi0LXQutGD0YnQsNGPINCy0LXRgtC60LAgJXMg0L3QtSDQuNC80LXQtdGCINCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQuC5cbtCn0YLQvtCx0Ysg0L7RgtC/0YDQsNCy0LjRgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMg0Lgg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgyDQutCw0Log0LLRi9GI0LXRgdGC0L7Rj9GJ0YPRjiDQtNC70Y8g0Y3RgtC+0Lkg0LLQtdGC0LrQuCwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtVxuXG4gICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAi0JLQsNGI0LAg0YLQtdC60YPRidCw0Y8g0LLQtdGC0LrQsCAlcyDQuNC80LXQtdGCINC90LXRgdC60L7Qu9GM0LrQviDQstGL0YjQtdGB0YLQvtGP0YnQuNGFINCy0LXRgtC+0LosINC+0YLQutCw0Lcg0LIg0L7RgtC/0YDQsNCy0LrQtSDQuNC30LzQtdC90LXQvdC40LkuIgorCisjOiBidWlsdGluL3B1c2guYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0L7RgtC/0YDQsNCy0LvRj9C10YLQtSDQuNC30LzQtdC90LXQvdC40Y8g0L3QsCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IMKrJXPCuywg0LrQvtGC0L7RgNGL0Lkg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINCy0YvRiNC10YHRgtC+0Y/RidC40Lwg0LTQu9GPINCy0LDRiNC10Lkg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDCqyVzwrssINCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINGC0L7Qs9C+LCDRh9GC0L4g0L7RgtC/0YDQsNCy0LvRj9GC0Ywg0Lgg0LIg0LrQsNC60YPRjiDQstC90LXRiNC90Y7RjiDQstC10YLQutGDLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjY5Cittc2dpZCAiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAi0JLRiyDQvdC1INGD0LrQsNC30LDQu9C4INGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjiDRgdGB0YvQu9C60Lgg0LTQu9GPINC+0YLQv9GA0LDQstC60LgsINCwIHB1c2guZGVmYXVsdCDRg9C60LDQt9Cw0L0g0LrQsNC6IMKrbm90aGluZ8K7LiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjc2Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjRjyDQsdGL0LvQuCDQvtGC0LrQu9C+0L3QtdC90YssINGC0LDQuiDQutCw0Log0LLQtdGA0YXRg9GI0LrQsCDQstCw0YjQtdC5INGC0LXQutGD0YnQtdC5INCy0LXRgtC60LhcbtC/0L7Qt9Cw0LTQuCDQtdC1INCy0L3QtdGI0L3QtdC5INGH0LDRgdGC0LguINCX0LDQsdC10YDQuNGC0LUg0Lgg0YHQu9C10LnRgtC1INCy0L3QtdGI0L3QuNC1INC40LfQvNC10L3QtdC90LjRjyBcbijQvdCw0L/RgNC40LzQtdGALCDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBwdWxsIOKApsK7KSDQv9C10YDQtdC0INC/0L7QstGC0L7RgNC90L7QuSDQv9C+0L/Ri9GC0LrQvtC5INC+0YLQv9GA0LDQstC60LhcbtC40LfQvNC10L3QtdC90LjQuS5cbtCU0LvRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4LCDRgdC80L7RgtGA0LjRgtC1IMKrTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzwrtcbtCyIMKrZ2l0IHB1c2ggLS1oZWxwwrsuIgorCisjOiBidWlsdGluL3B1c2guYzoyODIKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNGPINCx0YvQu9C4INC+0YLQutC70L7QvdC10L3Riywg0YLQsNC6INC60LDQuiDQstC10YDRhdGD0YjQutCwINC+0YLQv9GA0LDQstC70Y/QtdC80L7QuSDQstC10YLQutC4XG7Qv9C+0LfQsNC00Lgg0LXQtSDQstC90LXRiNC90LXQuSDRh9Cw0YHRgtC4LiDQn9C10YDQtdC60LvRjtGH0LjRgtC10YHRjCDQvdCwINCy0LXRgtC60YMg0Lgg0LfQsNCx0LXRgNC40YLQtSDQstC90LXRiNC90LjQtVxu0LjQt9C80LXQvdC10L3QuNGPICjQvdCw0L/RgNC40LzQtdGALCDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBwdWxsIOKApsK7KSDQv9C10YDQtdC0INC/0L7QstGC0L7RgNC90L7QuVxu0L/QvtC/0YvRgtC60L7QuSDQvtGC0L/RgNCw0LLQutC4INC40LfQvNC10L3QtdC90LjQuS5cbtCU0LvRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4LCDRgdC80L7RgtGA0LjRgtC1IMKrTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzwrtcbtCyIMKrZ2l0IHB1c2ggLS1oZWxwwrsuIgorCisjOiBidWlsdGluL3B1c2guYzoyODgKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjRjyDQsdGL0LvQuCDQvtGC0LrQu9C+0L3QtdC90YssINGC0LDQuiDQutCw0Log0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDRgdC+0LTQtdGA0LbQuNGCXG7QuNC30LzQtdC90LXQvdC40Y8sINC60L7RgtC+0YDRi9GFINGDINCy0LDRgSDQvdC10YIg0LIg0LLQsNGI0LXQvCDQu9C+0LrQsNC70YzQvdC+0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuC5cbtCe0LHRi9GH0L3Qviwg0Y3RgtC+INGB0LLRj9C30LDQvdC90L4g0YEg0YLQtdC8LCDRh9GC0L4g0LrRgtC+LdGC0L4g0YPQttC1INC+0YLQv9GA0LDQstC40Lsg0LjQt9C80LXQvdC10L3QuNGPINCyIFxu0YLQviDQttC1INC80LXRgdGC0L4uINCf0LXRgNC10LQg0L/QvtCy0YLQvtGA0L3QvtC5INC+0YLQv9GA0LDQstC60L7QuSDQstCw0YjQuNGFINC40LfQvNC10L3QtdC90LjQuSwg0LLQsNC8INC90YPQttC90L5cbtC30LDQsdGA0LDRgtGMINC4INGB0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINC40Lcg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPINGB0LXQsdC1XG4o0L3QsNC/0YDQuNC80LXRgCwg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcHVsbCDigKbCuykuXG7QlNC70Y8g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCwg0YHQvNC+0YLRgNC40YLQtSDCq05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc8K7XG7QsiDCq2dpdCBwdXNoIC0taGVscMK7LiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk1Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40Y8g0LHRi9C70Lgg0L7RgtC60LvQvtC90LXQvdGLLCDRgtCw0Log0LrQsNC6INC80LXRgtC60LAg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCINCy0L4g0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5OAorbXNnaWQgIiIKKyJZb3UgY2Fubm90IHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBwb2ludHMgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJvciB1cGRhdGUgYSByZW1vdGUgcmVmIHRvIG1ha2UgaXQgcG9pbnQgYXQgYSBub24tY29tbWl0IG9iamVjdCxcbiIKKyJ3aXRob3V0IHVzaW5nIHRoZSAnLS1mb3JjZScgb3B0aW9uLlxuIgorbXNnc3RyICLQktGLINC90LUg0LzQvtC20LXRgtC1INC+0LHQvdC+0LLQuNGC0Ywg0LLQvdC10YjQvdGO0Y4g0YHRgdGL0LvQutGDLCDQutC+0YLQvtGA0LDRjyDRg9C60LDQt9GL0LLQsNC10YIg0L3QsCDQvtCx0YrQtdC60YIsINC90LUg0Y/QstC70Y/RjtGJ0LjQudGB0Y8g0LrQvtC80LzQuNGC0L7QvCDQuNC70Lgg0L7QsdC90L7QstC40YLRjCDQstC90LXRiNC90Y7RjiDRgdGB0YvQu9C60YMg0YLQsNC6LCDRh9GC0L7QsdGLINC+0L3QsCDRg9C60LDQt9GL0LLQsNC70LAg0L3QsCDQvtCx0YrQtdC60YIsINC90LUg0Y/QstC70Y/RjtGJ0LjQudGB0Y8g0LrQvtC80LzQuNGC0L7QvCwg0LHQtdC3INGD0LrQsNC30LDQvdC40Y8g0L7Qv9GG0LjQuCDCqy0tZm9yY2XCuy5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDQsiAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC/0YDQsNCy0LjRgtGMINC90LXQutC+0YLQvtGA0YvQtSDRgdGB0YvQu9C60Lgg0LIgwqslc8K7IgorCisjOiBidWlsdGluL3B1c2guYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAi0L/Qu9C+0YXQvtC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gwqslc8K7IgorCisjOiBidWlsdGluL3B1c2guYzozOTkKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSByZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICLQndC1INC90LDRgdGC0YDQvtC10L3QsCDRgtC+0YfQutCwINC90LDQt9C90LDRh9C10L3QuNGPINC00LvRjyDQvtGC0L/RgNCw0LLQutC4Llxu0JvQuNCx0L4g0YPQutCw0LbQuNGC0LUgVVJMINGBINC/0L7QvNC+0YnRjNGOINC60L7QvNCw0L3QtNC90L7QuSDRgdGC0YDQvtC60LgsINC70LjQsdC+INC90LDRgdGC0YDQvtC50YLQtSDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INGBINC/0L7QvNC+0YnRjNGOXG5cbiAgICBnaXQgcmVtb3RlIGFkZCA80LjQvNGPPiA80LDQtNGA0LXRgT5cblxu0LAg0LfQsNGC0LXQvCDQvtGC0L/RgNCw0LLRjNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINGBINC/0L7QvNC+0YnRjNGOINC40LzQtdC90Lgg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPXG5cbiAgICBnaXQgcHVzaCA80LjQvNGPPlxuIgorCisjOiBidWlsdGluL3B1c2guYzo1NTQKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICLRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBidWlsdGluL3B1c2guYzo1NTUgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICLQvtGC0L/RgNCw0LLQuNGC0Ywg0LLRgdC1INGB0YHRi9C70LrQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDQt9C10YDQutCw0LvQviDQstGB0LXRhSDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OAorbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRgdGB0YvQu9C60LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OQorbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAi0L7RgtC/0YDQsNCy0LjRgtGMINC80LXRgtC60LggKNC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLQvNC10YHRgtC1INGBIC0tYWxsINC40LvQuCAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MiBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LUg0L7QsdC90L7QstC70LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NCBidWlsdGluL3NlbmQtcGFjay5jOjE4MQorbXNnaWQgIjxyZWZuYW1lPjo8ZXhwZWN0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NjUgYnVpbHRpbi9zZW5kLXBhY2suYzoxODIKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAi0YLRgNC10LHQvtCy0LDRgtGMLCDRh9GC0L7QsdGLINGB0YLQsNGA0L7QtSDQt9C90LDRh9C10L3QuNC1INGB0YHRi9C70LrQuCDQsdGL0LvQviDQvtC20LjQtNCw0LXQvNGL0LwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2OAorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAi0YPQv9GA0LDQstC70LXQvdC40LUg0YDQtdC60YPRgNGB0LjQstC90L7QuSDQvtGC0L/RgNCw0LLQutC+0Lkg0L/QvtC00LzQvtC00YPQu9C10LkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MCBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0L3QutC40LUg0L/QsNC60LXRgtGLIgorCisjOiBidWlsdGluL3B1c2guYzo1NzEgYnVpbHRpbi9wdXNoLmM6NTcyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICLQv9GD0YLRjCDQuiDQv9GA0L7Qs9GA0LDQvNC80LUg0YPQv9Cw0LrQvtCy0LrQuCDQvdCwINGB0LXRgNCy0LXRgNC1IgorCisjOiBidWlsdGluL3B1c2guYzo1NzMKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAi0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LLRi9GI0LXRgdGC0L7Rj9GJ0YPRjiDQstC10YLQutGDINC00LvRjyBnaXQgcHVsbC9zdGF0dXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3NgorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICLQv9C+0YfQuNGB0YLQuNGC0Ywg0LvQvtC60LDQu9GM0L3QviDRg9C00LDQu9C10L3QvdGL0LUg0YHRgdGL0LvQutC4IgorCisjOiBidWlsdGluL3B1c2guYzo1NzgKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0L/QtdGA0LXRhdCy0LDRgtGH0LjQuiBwcmUtcHVzaCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTc5Cittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICLQvtGC0L/RgNCw0LLQuNGC0Ywg0L/RgNC+0L/Rg9GJ0LXQvdC90YvQtSwg0L3QviDQvdGD0LbQvdGL0LUg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTgyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgItC/0L7QtNC/0LjRgdCw0YLRjCDQvtGC0L/RgNCw0LLQutGDINGBINC/0L7QvNC+0YnRjNGOIEdQRyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTg0IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc2Cittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgItC30LDQv9GA0L7RgdC40YLRjCDQstGL0L/QvtC70L3QtdC90LjQtSDQsNGC0L7QvNCw0YDQvdC+0Lkg0YLRgNCw0L3Qt9Cw0LrRhtC40Lgg0L3QsCDQstC90LXRiNC90LXQuSDRgdGC0L7RgNC+0L3QtSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjAyCittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlINC90LXRgdC+0LLQvNC10YHRgtC40LzQviDRgSAgLS1hbGwsIC0tbWlycm9yINC4IC0tdGFncyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjA0Cittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlINC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAg0LHQtdC3INGD0LrQsNC30LDQvdC40Y8g0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3B1c2guYzo2MDcKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsINC4IC0tdGFncyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogYnVpbHRpbi9wdXNoLmM6NjA5Cittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC80LXRgdGC0LUg0YHQviDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQsNC80Lgg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbWlycm9yINC4IC0tdGFncyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogYnVpbHRpbi9wdXNoLmM6NjE1Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3Ig0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC80LXRgdGC0LUg0YHQviDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YDQsNC80Lgg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3B1c2guYzo2MTgKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwg0LggLS1taXJyb3Ig0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNworbXNnaWQgInB1c2ggb3B0aW9ucyBtdXN0IG5vdCBoYXZlIG5ldyBsaW5lIGNoYXJhY3RlcnMiCittc2dzdHIgItC+0L/RhtC40Lgg0LTQu9GPINC+0YLQv9GA0LDQstC60Lgg0L3QtSDQtNC+0LvQttC90Ysg0YHQvtC00LXRgNC20LDRgtGMINGB0LjQvNCy0L7Qu9GLINC/0LXRgNC10LLQvtC00LAg0YHRgtGA0L7QuiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OQorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoxMAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxiYXNlPiA8b2xkLXRpcD4gPG5ldy10aXA+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjIxCittc2dpZCAiUGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyMworbXNnaWQgInVzZSBzaW1wbGUgZGlmZiBjb2xvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NDYgYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gLi4gaW4gcmFuZ2U6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjAKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo3NQorbXNnaWQgIm5lZWQgdHdvIGNvbW1pdCByYW5nZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pIgorIiBbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSAiCisiWy0taW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PNC/0YDQtdGE0LjQutGBPikgWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0taW5kZXgtb3V0cHV0PTzRhNCw0LnQuz5dICgtLWVtcHR5IHwgPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LAtMT4gWzzRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwLTI+IFs80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsC0zPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjQKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidC40Lkg0LjQvdC00LXQutGBINCyIDzRhNCw0LnQuz4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI3Cittc2dpZCAib25seSBlbXB0eSB0aGUgaW5kZXgiCittc2dzdHIgItC/0YDQvtGB0YLQviDQvtGH0LjRgdGC0LjRgtGMINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjkKK21zZ2lkICJNZXJnaW5nIgogbXNnc3RyICLQodC70LjRj9C90LjQtSIKIAotIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKLW1zZ2lkICJSZW1vdGUiCi1tc2dzdHIgItCS0L3QtdGI0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgItCy0YvQv9C+0LvQvdC40YLRjCDRgdC70LjRj9C90LjQtSDQsiDQtNC+0L/QvtC70L3QtdC90LjQtSDQuiDRh9GC0LXQvdC40Y4iCiAKLSM6IGdpdC1ndWkuc2g6MjQ2OAotbXNnaWQgIlRvb2xzIgotbXNnc3RyICLQktGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdGL0LUg0L7Qv9C10YDQsNGG0LjQuCIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMzCittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICLRgtGA0LXRhdGF0L7QtNC+0LLQvtC1INGB0LvQuNGP0L3QuNC1LCDQtdGB0LvQuCDQvdC1INGC0YDQtdCx0YPQtdGC0YHRjyDRgdC70LjRj9C90LjQtSDQvdCwINGD0YDQvtCy0L3QtSDRhNCw0LnQu9C+0LIiCiAKLSM6IGdpdC1ndWkuc2g6MjQ3NwotbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgotbXNnc3RyICLQn9GA0L7RgdC80L7RgtGAINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAi0YLRgNC10YXRhdC+0LTQvtCy0L7QtSDRgdC70LjRj9C90LjQtSDQsiDRgdC70YPRh9Cw0LUg0L/RgNC40YHRg9GC0YHRgtCy0LjRjyDQtNC+0LHQsNCy0LvQtdC90LjQuSDQuNC70Lgg0YPQtNCw0LvQtdC90LjQuSDRhNCw0LnQu9C+0LIiCiAKLSM6IGdpdC1ndWkuc2g6MjQ4MwotbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgotbXNnc3RyICLQn9GA0L7RgdC80L7RgtGA0LXRgtGMINGE0LDQudC70Ysg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM3Cittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAi0YLQvtC20LUsINGH0YLQviDQuCAtbSwg0L3QviDQvtGC0LzQtdC90Y/QtdGCINC40LfQvNC10L3QtdC90LjRjyDQvdC1INGB0LvQuNGC0YvRhSDQt9Cw0L/QuNGB0LXQuSIKIAotIzogZ2l0LWd1aS5zaDoyNDg3Ci1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDRhNCw0LnQu9GLINCy0LXRgtC60LjigKYiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPNC/0L7QtNC60LDRgtCw0LvQvtCzPi8iCiAKLSM6IGdpdC1ndWkuc2g6MjQ5MgotbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40Y4g0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDQtNC10YDQtdCy0L4g0LIg0LjQvdC00LXQutGBINCyIDzQv9C+0LTQutCw0YLQsNC70L7Qsz4vIgogCi0jOiBnaXQtZ3VpLnNoOjI0OTYKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINCy0YHQtdGFINCy0LXRgtC+0LoiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0MgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0Ywg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0YDQtdC30YPQu9GM0YLQsNGC0L7QvCDRgdC70LjRj9C90LjRjyIKIAotIzogZ2l0LWd1aS5zaDoyNTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YTQsNC50LvRiyDQstC10YLQutC4ICVzIgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDQKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgImdpdGlnbm9yZSIKIAotIzogZ2l0LWd1aS5zaDoyNTA1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGA0LjRjiDQstC10YLQutC4ICVzIgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDUKK21zZ2lkICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQv9C10YDQtdC30LDQv9C40YHRjCDRj9Cy0L3QviDQuNCz0L3QvtGA0LjRgNGD0LXQvNGL0YUg0YTQsNC50LvQvtCyIgogCi0jOiBnaXQtZ3VpLnNoOjI1MTAgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Ci1tc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKLW1zZ3N0ciAi0KHRgtCw0YLQuNGB0YLQuNC60LAg0LHQsNC30Ysg0LTQsNC90L3Ri9GFIgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDgKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgItC90LUg0L/RgNC+0LLQtdGA0Y/RgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC/0L7RgdC70LUg0YHQu9C40Y/QvdC40Y8iCiAKLSM6IGdpdC1ndWkuc2g6MjUxMyBsaWIvZGF0YWJhc2UudGNsOjM0Ci1tc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCi1tc2dzdHIgItCh0LbQsNGC0Ywg0LHQsNC30YMg0LTQsNC90L3Ri9GFIgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDkKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgItC90LUg0L7QsdC90L7QstC70Y/RgtGMINC40L3QtNC10LrRgSDQuNC70Lgg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCiAKLSM6IGdpdC1ndWkuc2g6MjUxNgotbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKLW1zZ3N0ciAi0J/RgNC+0LLQtdGA0LjRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhSIKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUxCittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHRgtC40YLRjCDQv9GA0LjQvNC10L3QtdC90LjQtSDRhNC40LvRjNGC0YDQsCDRh9Cw0YHRgtC40YfQvdC+0LPQviDQv9C10YDQtdC60LvRjtGH0LXQvdC40Y8g0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LUiCiAKLSM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAotIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0Y/RgNC70YvQuiDQvdCwINGA0LDQsdC+0YfQtdC8INGB0YLQvtC70LUiCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1MworbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAi0L7RgtC70LDQtNC60LAgdW5wYWNrLXRyZWVzIgogCi0jOiBnaXQtZ3VpLnNoOjI1MzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKLW1zZ2lkICJRdWl0IgotbXNnc3RyICLQktGL0YXQvtC0IgorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTcKK21zZ2lkICJzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcyIKK21zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjI1NDcKLW1zZ2lkICJVbmRvIgotbXNnc3RyICLQntGC0LzQtdC90LjRgtGMIgotCi0jOiBnaXQtZ3VpLnNoOjI1NTAKLW1zZ2lkICJSZWRvIgotbXNnc3RyICLQn9C+0LLRgtC+0YDQuNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKLW1zZ2lkICJDdXQiCi1tc2dzdHIgItCS0YvRgNC10LfQsNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MjU1NyBnaXQtZ3VpLnNoOjMxMTIgZ2l0LWd1aS5zaDozMTg2IGdpdC1ndWkuc2g6MzI1OQotIzogbGliL2NvbnNvbGUudGNsOjY5Ci1tc2dpZCAiQ29weSIKLW1zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKLW1zZ2lkICJQYXN0ZSIKLW1zZ3N0ciAi0JLRgdGC0LDQstC40YLRjCIKLQotIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKLW1zZ2lkICJEZWxldGUiCi1tc2dzdHIgItCj0LTQsNC70LjRgtGMIgotCi0jOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICLQktGL0LTQtdC70LjRgtGMINCy0YHQtSIKLQotIzogZ2l0LWd1aS5zaDoyNTc2Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICLQodC+0LfQtNCw0YLRjOKApiIKLQotIzogZ2l0LWd1aS5zaDoyNTgyCi1tc2dpZCAiQ2hlY2tvdXQuLi4iCi1tc2dzdHIgItCf0LXRgNC10LnRgtC44oCmIgotCi0jOiBnaXQtZ3VpLnNoOjI1ODgKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGM4oCmIgotCi0jOiBnaXQtZ3VpLnNoOjI1OTMKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgItCj0LTQsNC70LjRgtGM4oCmIgotCi0jOiBnaXQtZ3VpLnNoOjI1OTgKLW1zZ2lkICJSZXNldC4uLiIKLW1zZ3N0ciAi0KHQsdGA0L7RgdC40YLRjOKApiIKLQotIzogZ2l0LWd1aS5zaDoyNjA4Ci1tc2dpZCAiRG9uZSIKLW1zZ3N0ciAi0JfQsNCy0LXRgNGI0LXQvdC+IgotCi0jOiBnaXQtZ3VpLnNoOjI2MTAKLW1zZ2lkICJDb21taXRAQHZlcmIiCi1tc2dzdHIgItCX0LDQutC+0LzQvNC40YLQuNGC0YwiCi0KLSM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKLW1zZ2lkICJOZXcgQ29tbWl0IgotbXNnc3RyICLQndC+0LLRi9C5INC60L7QvNC80LjRgiIKLQotIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NwotbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgotbXNnc3RyICLQmNGB0L/RgNCw0LLQuNGC0Ywg0L/QvtGB0LvQtdC00L3QuNC5INC60L7QvNC80LjRgiIKLQotIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Ci1tc2dpZCAiUmVzY2FuIgotbXNnc3RyICLQn9C10YDQtdGH0LjRgtCw0YLRjCIKLQotIzogZ2l0LWd1aS5zaDoyNjQzCi1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINCyINC40L3QtNC10LrRgSIKLQotIzogZ2l0LWd1aS5zaDoyNjQ5Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCi1tc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0LjQt9C80LXQvdGR0L3QvdGL0LUg0YTQsNC50LvRiyDQsiDQuNC90LTQtdC60YEiCi0KLSM6IGdpdC1ndWkuc2g6MjY1NQotbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCi1tc2dzdHIgItCj0LHRgNCw0YLRjCDQuNC3INC40LfQtNC10LrRgdCwIgotCi0jOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKLW1zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKLW1zZ3N0ciAi0J7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8iCi0KLSM6IGdpdC1ndWkuc2g6MjY2OSBnaXQtZ3VpLnNoOjMzMTAgZ2l0LWd1aS5zaDozMzQxCi1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgItCc0LXQvdGM0YjQtSDQutC+0L3RgtC10LrRgdGC0LAiCi0KLSM6IGdpdC1ndWkuc2g6MjY3MyBnaXQtZ3VpLnNoOjMzMTQgZ2l0LWd1aS5zaDozMzQ1Ci1tc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCi1tc2dzdHIgItCR0L7Qu9GM0YjQtSDQutC+0L3RgtC10LrRgdGC0LAiCi0KLSM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCi1tc2dpZCAiU2lnbiBPZmYiCi1tc2dzdHIgItCS0YHRgtCw0LLQuNGC0YwgU2lnbmVkLW9mZi1ieSIKLQotIzogZ2l0LWd1aS5zaDoyNjk2Ci1tc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCi1tc2dzdHIgItCb0L7QutCw0LvRjNC90L7QtSDRgdC70LjRj9C90LjQteKApiIKLQotIzogZ2l0LWd1aS5zaDoyNzAxCi1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgItCf0YDQtdGA0LLQsNGC0Ywg0YHQu9C40Y/QvdC40LXigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjcxMyBnaXQtZ3VpLnNoOjI3NDEKLW1zZ2lkICJBZGQuLi4iCi1tc2dzdHIgItCU0L7QsdCw0LLQuNGC0YzigKYiCi0KLSM6IGdpdC1ndWkuc2g6MjcxNwotbXNnaWQgIlB1c2guLi4iCi1tc2dzdHIgItCe0YLQv9GA0LDQstC40YLRjOKApiIKLQotIzogZ2l0LWd1aS5zaDoyNzIxCi1tc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0LLQtdGC0LrRg+KApiIKLQotIzogZ2l0LWd1aS5zaDoyNzMxIGdpdC1ndWkuc2g6MzI5MgotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuOKApiIKLQotIzogZ2l0LWd1aS5zaDoyNzQyCi1tc2dpZCAiUmVtb3ZlLi4uIgotbXNnc3RyICLQo9C00LDQu9C40YLRjOKApiIKLQotIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKLW1zZ2lkICJIZWxwIgotbXNnc3RyICLQn9C+0LzQvtGJ0YwiCi0KLSM6IGdpdC1ndWkuc2g6Mjc1NSBnaXQtZ3VpLnNoOjI3NTkgbGliL2Fib3V0LnRjbDoxNAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvdXQgJXMiCi1tc2dzdHIgItCeICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODMKLW1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKLW1zZ3N0ciAi0JTQvtC60YPQvNC10L3RgtCw0YbQuNGPINCyINC40L3RgtC10YDQvdC10YLQtSIKLQotIzogZ2l0LWd1aS5zaDoyNzg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgotbXNnaWQgIlNob3cgU1NIIEtleSIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQutC70Y7RhyBTU0giCi0KLSM6IGdpdC1ndWkuc2g6Mjg5MwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgotbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsDogJXM6INC90LXRgiDRgtCw0LrQvtCz0L4g0YTQsNC50LvQsCDQuNC70Lgg0LrQsNGC0LDQu9C+0LPQsCIKLQotIzogZ2l0LWd1aS5zaDoyOTI2Ci1tc2dpZCAiQ3VycmVudCBCcmFuY2g6IgotbXNnc3RyICLQotC10LrRg9GJ0LDRjyDQstC10YLQutCwOiIKLQotIzogZ2l0LWd1aS5zaDoyOTQ3Ci1tc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKLW1zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINCyINC40L3QtNC10LrRgdC1ICjQsdGD0LTRg9GCINC30LDQutC+0LzQvNC40YfQtdC90YspIgotCi0jOiBnaXQtZ3VpLnNoOjI5NjcKLW1zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgotbXNnc3RyICLQmNC30LzQtdC90LXQvdC+ICjQvdC1INCx0YPQtNC10YIg0YHQvtGF0YDQsNC90LXQvdC+KSIKLQotIzogZ2l0LWd1aS5zaDozMDE3Ci1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAi0JjQvdC00LXQutGB0LjRgNC+0LLQsNGC0Ywg0LLRgdGRIgotCi0jOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MwotbXNnaWQgIlB1c2giCi1tc2dzdHIgItCe0YLQv9GA0LDQstC40YLRjCIKLQotIzogZ2l0LWd1aS5zaDozMDcxCi1tc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgItCh0L7QvtCx0YnQtdC90LjQtSDQv9C10YDQstC+0LPQviDQutC+0LzQvNC40YLQsDoiCi0KLSM6IGdpdC1ndWkuc2g6MzA3MgotbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LjRgdC/0YDQsNCy0LvQtdC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LA6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzMKLW1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LjRgdC/0YDQsNCy0LvQtdC90L3QvtCz0L4g0L/QtdGA0LLQvtCz0L4g0LrQvtC80LzQuNGC0LA6IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzQKLW1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC40YHQv9GA0LDQstC70LXQvdC90L7Qs9C+INGB0LvQuNGP0L3QuNGPOiIKLQotIzogZ2l0LWd1aS5zaDozMDc1Ci1tc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0YHQu9C40Y/QvdC40Y86IgotCi0jOiBnaXQtZ3VpLnNoOjMwNzYKLW1zZ2lkICJDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgItCh0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsDoiCi0KLSM6IGdpdC1ndWkuc2g6MzEyNSBnaXQtZ3VpLnNoOjMyNjcgbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDRgtGMINCy0YHQtSIKLQotIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Ci1tc2dpZCAiRmlsZToiCi1tc2dzdHIgItCk0LDQudC7OiIKLQotIzogZ2l0LWd1aS5zaDozMjU1Ci1tc2dpZCAiUmVmcmVzaCIKLW1zZ3N0ciAi0J7QsdC90L7QstC40YLRjCIKLQotIzogZ2l0LWd1aS5zaDozMjc2Ci1tc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICLQo9C80LXQvdGM0YjQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKLQotIzogZ2l0LWd1aS5zaDozMjgwCi1tc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICLQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKLQotIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCi1tc2dpZCAiRW5jb2RpbmciCi1tc2dzdHIgItCa0L7QtNC40YDQvtCy0LrQsCIKLQotIzogZ2l0LWd1aS5zaDozMjk5Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgotbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0Ywv0KPQsdGA0LDRgtGMINC40LfQvNC10L3QtdC90LjQtSIKLQotIzogZ2l0LWd1aS5zaDozMzA0Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgotbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0Ywv0KPQsdGA0LDRgtGMINGB0YLRgNC+0LrRgyIKLQotIzogZ2l0LWd1aS5zaDozMzIzCi1tc2dpZCAiUnVuIE1lcmdlIFRvb2wiCi1tc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCDQv9GA0L7Qs9GA0LDQvNC80YMg0YHQu9C40Y/QvdC40Y8iCi0KLSM6IGdpdC1ndWkuc2g6MzMyOAotbXNnaWQgIlVzZSBSZW1vdGUgVmVyc2lvbiIKLW1zZ3N0ciAi0JLQt9GP0YLRjCDQstC90LXRiNC90Y7RjiDQstC10YDRgdC40Y4iCi0KLSM6IGdpdC1ndWkuc2g6MzMzMgotbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgotbXNnc3RyICLQktC30Y/RgtGMINC70L7QutCw0LvRjNC90YPRjiDQstC10YDRgdC40Y4iCi0KLSM6IGdpdC1ndWkuc2g6MzMzNgotbXNnaWQgIlJldmVydCBUbyBCYXNlIgotbXNnc3RyICLQntCx0YDQsNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIKLQotIzogZ2l0LWd1aS5zaDozMzU0Ci1tc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDRjdGC0Lgg0LjQt9C80LXQvdC10L3QuNGPINC/0L7QtNC80L7QtNGD0LvRjyIKLQotIzogZ2l0LWd1aS5zaDozMzU4Ci1tc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGA0LjRjiDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC4INC/0L7QtNC80L7QtNGD0LvRjyIKLQotIzogZ2l0LWd1aS5zaDozMzYyCi1tc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINCy0YHQtdGFINCy0LXRgtC+0Log0L/QvtC00LzQvtC00YPQu9GPIgotCi0jOiBnaXQtZ3VpLnNoOjMzNjcKLW1zZ2lkICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCBnaXQgZ3VpINCyINC/0L7QtNC80L7QtNGD0LvQtSIKLQotIzogZ2l0LWd1aS5zaDozMzg5Ci1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0LHQu9C+0Log0LjQtyDQuNC90LTQtdC60YHQsCIKLQotIzogZ2l0LWd1aS5zaDozMzkxCi1tc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKLW1zZ3N0ciAi0KPQsdGA0LDRgtGMINGB0YLRgNC+0LrQuCDQuNC3INC40L3QtNC10LrRgdCwIgotCi0jOiBnaXQtZ3VpLnNoOjMzOTMKLW1zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCi1tc2dzdHIgItCj0LHRgNCw0YLRjCDRgdGC0YDQvtC60YMg0LjQtyDQuNC90LTQtdC60YHQsCIKLQotIzogZ2l0LWd1aS5zaDozMzk2Ci1tc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgotbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINCx0LvQvtC6INCyINC40L3QtNC10LrRgSIKLQotIzogZ2l0LWd1aS5zaDozMzk4Ci1tc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKLW1zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDRgdGC0YDQvtC60Lgg0LIg0LjQvdC00LXQutGBIgotCi0jOiBnaXQtZ3VpLnNoOjM0MDAKLW1zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCi1tc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0YHRgtGA0L7QutGDINCyINC40L3QtNC10LrRgSIKLQotIzogZ2l0LWd1aS5zaDozNDI0Ci1tc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgotbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRj+KApiIKLQotIzogZ2l0LWd1aS5zaDozNTQxCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3JlYmFzZS5jOjMyCiBtc2dpZCAiIgotIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKLSJcbiIKLSJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKLSJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKLSJieSAlczpcbiIKLSJcbiIKLW1zZ3N0ciAi0JLQvtC30LzQvtC20L3RiyDQvtGI0LjQsdC60Lgg0LIg0L/QtdGA0LXQvNC10L3QvdGL0YUg0L7QutGA0YPQttC10L3QuNGPLlxuXG7Qn9C10YDQtdC80LXQvdC90YvQtSDQvtC60YDRg9C20LXQvdC40Y8sINC60L7RgtC+0YDRi9C1INCy0L7Qt9C80L7QttC90L5cbtCx0YPQtNGD0YIg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDQvdGLINC60L7QvNCw0L3QtNCw0LzQuCBHaXQsXG7Qt9Cw0L/Rg9GJ0LXQvdC90YvQvNC4INC40LcgJXNcblxuIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIFs8dXBzdHJlYW0+XSAiCisiWzxicmFuY2g+XSIKK21zZ3N0ciAiIgogCi0jOiBnaXQtZ3VpLnNoOjM1NzAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290ICIKKyJbPGJyYW5jaD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYKK21zZ2lkICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTggYnVpbHRpbi9yZWJhc2UuYzoxODIgYnVpbHRpbi9yZWJhc2UuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIgorbXNnc3RyICLQvdC10L/RgNC40LPQvtC00L3Ri9C5INC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDRgdC/0LjRgdC+0Log0LTQtdC7OiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY3IGJ1aWx0aW4vcmViYXNlLmM6MTkzIGJ1aWx0aW4vcmViYXNlLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI1MgorbXNnaWQgIm5vIEhFQUQ/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjg1Cittc2dpZCAiY291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNDMKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgdG9kbyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzgyCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0MzcKK21zZ2lkICJnaXQgcmViYXNlLS1pbnRlcmFjdGl2ZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ0OQorbXNnaWQgImtlZXAgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAi0L7RgdGC0LDQstC40YLRjCDQv9GD0YHRgtGL0LUg0LrQvtC80LzQuNGC0YsiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDUxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LrQvtC80LzQuNGC0Ysg0YEg0L/Rg9GB0YLRi9C80Lgg0YHQvtC+0LHRidC10L3QuNGP0LzQuCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NTIKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ1NAorbXNnaWQgImtlZXAgb3JpZ2luYWwgYnJhbmNoIHBvaW50cyBvZiBjb3VzaW5zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU2Cittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ1NworbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ1OSBidWlsdGluL3JlYmFzZS5jOjEzOTcKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDYxCittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICLQv9GA0L7QtNC+0LvQttC40YLRjCDQv9C10YDQtdC80LXRidC10L3QuNC1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2MworbXNnaWQgInNraXAgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDY0Cittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDY2Cittc2dpZCAic2hvdyB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2OQorbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQutC+0YDQvtGC0LrQuNC1INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0LrQvtC80LzQuNGC0L7QsiDQsiDRgdC/0LjRgdC60LUg0LTQtdC50YHRgtCy0LjQuSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzEKK21zZ2lkICJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQv9C+0LvQvdGL0LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQutC+0LzQvNC40YLQvtCyINCyINGB0L/QuNGB0LrQtSDQtNC10LnRgdGC0LLQuNC5IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3MworbXNnaWQgImNoZWNrIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgItC/0YDQvtCy0LXRgNC40YLRjCDRgdC/0LjRgdC+0Log0LTQtdC7IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NQorbXNnaWQgInJlYXJyYW5nZSBmaXh1cC9zcXVhc2ggbGluZXMiCittc2dzdHIgItC/0LXRgNC10YHRgtCw0LLQuNGC0Ywg0YHRgtGA0L7QutC4IGZpeHVwL3NxdWFzaCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzcKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgItCy0YHRgtCw0LLQuNGC0Ywg0LrQvtC80LDQvdC00Ysg0LjRgdC/0L7Qu9C90LXQvdC40Y8g0LrQvtC80LzQuNGC0L7QsiDQsiDRgdC/0LjRgdC60LUg0LTQtdC50YHRgtCy0LjQuSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzgKK21zZ2lkICJvbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgxCittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODEKK21zZ2lkICJyZXN0cmljdCByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4MworbXNnaWQgInNxdWFzaC1vbnRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODYKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg4Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg4Cittc2dpZCAiaGVhZCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkzCittc2dpZCAicmViYXNlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk0Cittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5NQorbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTYKK21zZ2lkICJzd2l0Y2gtdG8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJ0aGUgYnJhbmNoIG9yIGNvbW1pdCB0byBjaGVja291dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OAorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OAorbXNnaWQgIm9udG8gbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OQorbXNnaWQgImNtZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OQorbXNnaWQgInRoZSBjb21tYW5kIHRvIHJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMiBidWlsdGluL3JlYmFzZS5jOjE0ODAKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHJlLXNjaGVkdWxlIGFueSBgZXhlY2AgdGhhdCBmYWlscyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICItLVtuby1dcmViYXNlLWNvdXNpbnMg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCDQsdC10Lcg0YPQutCw0LfQsNC90LjRjyAtLXJlYmFzZS1tZXJnZXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTM0IGJ1aWx0aW4vcmViYXNlLmM6MTc4NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCAnb250byc6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjgxNworbXNnaWQgImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjk0MAorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tYWJvcnRcIi4iCittc2dzdHIgItCg0LDQt9GA0LXRiNC40YLQtSDQstGB0LUg0LrQvtC90YTQu9C40LrRgtGLINCy0YDRg9GH0L3Rg9GOLCDQv9C+0LzQtdGC0YzRgtC1INC40YUg0YDQsNC30YDQtdGI0ZHQvdC90YvQvNC4INGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IGFkZC9ybSA80LrQvtC90YTQu9C40LrRgtGD0Y7RidC40LUt0YTQsNC50LvRiz7Cuywg0LAg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuy5cbtCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INC/0YDQvtC/0YPRgdGC0LjRgtGMINGN0YLQvtGCINC60L7QvNC80LjRgiwg0YLQviDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmViYXNlIC0tc2tpcMK7Llxu0KfRgtC+0LHRiyDQstC10YDQvdGD0YLRjNGB0Y8g0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LUg0LTQviDCq2dpdCByZWJhc2XCuywg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlYmFzZSAtLWFib3J0wrsuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwMjEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgotIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKLSJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCi1tc2dzdHIgIlxu0K3RgtC+INC40LfQstC10YHRgtC90LDRjyDQv9GA0L7QsdC70LXQvNCwINGBIFRjbCxcbtGA0LDRgdC/0YDQvtGB0YLRgNCw0L3Rj9C10LzRi9C8IEN5Z3dpbi4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCiAKLSM6IGdpdC1ndWkuc2g6MzU3NQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMzEzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKKyIlc1xuIgorIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC5cbiIKKyJTZWUgZ2l0LXJlYmFzZSgxKSBmb3IgZGV0YWlscy5cbiIKICJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCiAiXG4iCi0iQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgotImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgotInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCi0ifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCi1tc2dzdHIgIlxuXG7QktC80LXRgdGC0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8gJXMg0LzQvtC20L3Qvlxu0YHQvtGF0YDQsNC90LjRgtGMINC30L3QsNGH0LXQvdC40Y8gdXNlci5uYW1lINC4XG51c2VyLmVtYWlsINCyINCS0LDRiNC10Lwg0L/QtdGA0YHQvtC90LDQu9GM0L3QvtC8XG7RhNCw0LnQu9C1IH4vLmdpdGNvbmZpZy5cbiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvYWJvdXQudGNsOjI2Ci1tc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgotbXNnc3RyICJnaXQtZ3VpIC0g0LPRgNCw0YTQuNGH0LXRgdC60LjQuSDQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjQuSDQuNC90YLQtdGA0YTQtdC50YEg0LogR2l0LiIKLQotIzogbGliL2JsYW1lLnRjbDo3MgotbXNnaWQgIkZpbGUgVmlld2VyIgotbXNnc3RyICLQn9GA0L7RgdC80L7RgtGAINGE0LDQudC70LAiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzgKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICLQmtC+0LzQvNC40YI6IgotCi0jOiBsaWIvYmxhbWUudGNsOjI3MQotbXNnaWQgIkNvcHkgQ29tbWl0IgotbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0YLRjCBTSEEtMSIKLQotIzogbGliL2JsYW1lLnRjbDoyNzUKLW1zZ2lkICJGaW5kIFRleHQuLi4iCi1tc2dzdHIgItCd0LDQudGC0Lgg0YLQtdC60YHRguKApiIKLQotIzogbGliL2JsYW1lLnRjbDoyODQKLW1zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgotbXNnc3RyICLQn9GA0L7QstC10YHRgtC4INC/0L7Qu9C90YvQuSDQv9C+0LjRgdC6INC60L7Qv9C40LkiCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjg4Ci1tc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40YfQtdGB0LrQuNC5INC60L7QvdGC0LXQutGB0YIiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MjkxCi1tc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKLW1zZ3N0ciAi0JDQstGC0L7RgNGLINGA0L7QtNC40YLQtdC70YzRgdC60L7Qs9C+INC60L7QvNC80LjRgtCwIgotCi0jOiBsaWIvYmxhbWUudGNsOjQ1MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgItCn0YLQtdC90LjQtSAlc+KApiIKLQotIzogbGliL2JsYW1lLnRjbDo1NTcKLW1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQsNC90L3QvtGC0LDRhtC40Lgg0LrQvtC/0LjRgNC+0LLQsNC90LjQuS/Qv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC54oCmIgotCi0jOiBsaWIvYmxhbWUudGNsOjU3NwotbXNnaWQgImxpbmVzIGFubm90YXRlZCIKLW1zZ3N0ciAi0YHRgtGA0L7QuiDQv9GA0L7QutC+0LzQvNC10L3RgtC40YDQvtCy0LDQvdC+IgotCi0jOiBsaWIvYmxhbWUudGNsOjc2OQotbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgItCX0LDQs9GA0YPQt9C60LAg0LDQvdC90L7RgtCw0YbQuNC5INC/0LXRgNCy0L7QvdCw0YfQsNC70YzQvdC+0LPQviDQv9C+0LvQvtC20LXQvdC40Y8g0L7QsdGK0LXQutGC0LDigKYiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzcyCi1tc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCi1tc2dzdHIgItCQ0L3QvdC+0YLQsNGG0LjRjyDQt9Cw0LLQtdGA0YjQtdC90LAuIgotCi0jOiBsaWIvYmxhbWUudGNsOjgwMgotbXNnaWQgIkJ1c3kiCi1tc2dzdHIgItCX0LDQvdGP0YIiCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODAzCi1tc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCi1tc2dzdHIgItCQ0L3QvdC+0YLQsNGG0LjRjyDRg9C20LUg0LfQsNC/0YPRidC10L3QsCIKLQotIzogbGliL2JsYW1lLnRjbDo4NDIKLW1zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgotbXNnc3RyICLQktGL0L/QvtC70L3QtdC90LjQtSDQv9C+0LvQvdC+0LPQviDQv9C+0LjRgdC60LAg0LrQvtC/0LjQueKApiIKLQotIzogbGliL2JsYW1lLnRjbDo5MTAKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgItCX0LDQs9GA0YPQt9C60LAg0LDQvdC90L7RgtCw0YbQuNC44oCmIgotCi0jOiBsaWIvYmxhbWUudGNsOjk2MwotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgItCQ0LLRgtC+0YA6IgotCi0jOiBsaWIvYmxhbWUudGNsOjk2NwotbXNnaWQgIkNvbW1pdHRlcjoiCi1tc2dzdHIgItCa0L7QvNC80LjRgtC10YA6IgotCi0jOiBsaWIvYmxhbWUudGNsOjk3MgotbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgotbXNnc3RyICLQmNGB0YXQvtC00L3Ri9C5INGE0LDQudC7OiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDIwCi1tc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0YLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1OiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDc1Ci1tc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1OiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDkwCi1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgotbXNnc3RyICLQndC1INC80L7Qs9GDINC/0L7QutCw0LfQsNGC0Ywg0L/RgNC10LTQutCwIgotCi0jOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAotbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0LPRgNGD0LfQutC4INC40LfQvNC10L3QtdC90LjQuToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTIzMQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICLQmNGB0YLQvtGH0L3QuNC6OiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjM3Ci1tc2dpZCAiSW4gRmlsZToiCi1tc2dzdHIgItCk0LDQudC7OiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjQyCi1tc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgotbXNnc3RyICLQodC60L7Qv9C40YDQvtCy0LDQvdC+L9C/0LXRgNC10LzQtdGJ0LXQvdC+INCyOiIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKLW1zZ2lkICJDaGVja291dCBCcmFuY2giCi1tc2dzdHIgItCf0LXRgNC10LnRgtC4INC90LAg0LLQtdGC0LrRgyIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKLW1zZ2lkICJDaGVja291dCIKLW1zZ3N0ciAi0J/QtdGA0LXQudGC0LgiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKLSM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAi0J7RgtC80LXQvdCwIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3IGxpYi90b29sc19kbGcudGNsOjMyOAotbXNnaWQgIlJldmlzaW9uIgotbXNnc3RyICLQktC10YDRgdC40Y8iCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyODAKLW1zZ2lkICJPcHRpb25zIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LgiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgotbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAi0JjQt9Cy0LvQtdGH0Ywg0LjQt9C80LXQvdC10L3QuNGPINC40Lcg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQuCIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKLW1zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCi1tc2dzdHIgItCe0YLRgdC+0LXQtNC40L3QuNGC0Ywg0L7RgiDQu9C+0LrQsNC70YzQvdC+0Lkg0LLQtdGC0LrQuCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCi1tc2dpZCAiQ3JlYXRlIEJyYW5jaCIKLW1zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0LLQtdGC0LrRgyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Ci1tc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCi1tc2dzdHIgItCh0L7Qt9C00LDRgtGMINC90L7QstGD0Y4g0LLQtdGC0LrRgyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCi1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICLQodC+0LfQtNCw0YLRjCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCi1tc2dpZCAiQnJhbmNoIE5hbWUiCi1tc2dzdHIgItCY0LzRjyDQstC10YLQutC4IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCi1tc2dpZCAiTmFtZToiCi1tc2dzdHIgItCd0LDQt9Cy0LDQvdC40LU6IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKLW1zZ3N0ciAi0KHQvtC+0YLQstC10YLRgdGC0LLQvtCy0LDRgtGMINC40LzQtdC90Lgg0L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0Lkg0LLQtdGC0LrQuCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Ci1tc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCi1tc2dzdHIgItCd0LDRh9Cw0LvRjNC90LDRjyDQstC10YDRgdC40Y8iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgotbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgotbXNnc3RyICLQntCx0L3QvtCy0LjRgtGMINC40LzQtdGO0YnRg9GO0YHRjyDQstC10YLQutGDOiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Ci1tc2dpZCAiTm8iCi1tc2dzdHIgItCd0LXRgiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCi1tc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCi1tc2dzdHIgItCi0L7Qu9GM0LrQviBGYXN0IEZvcndhcmQiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQotbXNnaWQgIlJlc2V0IgotbXNnc3RyICLQodCx0YDQvtGBIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKLW1zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKLW1zZ3N0ciAi0J/QvtGB0LvQtSDRgdC+0LfQtNCw0L3QuNGPINGB0LTQtdC70LDRgtGMINGC0LXQutGD0YnQtdC5IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMxCi1tc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCi1tc2dzdHIgItCj0LrQsNC20LjRgtC1INC+0YLQu9C10LbQuNCy0LDQtdC80YPRjiDQstC10YLQutGDLiIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKLW1zZ3N0ciAi0J7RgtGB0LvQtdC20LjQstCw0LXQvNCw0Y8g0LLQtdGC0LrQsCAlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LLQtdGC0LrQvtC5INC90LAg0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuC4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0LjQvNGPINCy0LXRgtC60LguIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTY0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INC40LzRjyDQstC10YLQutC4IMKrJXPCuy4iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNQotbXNnaWQgIkRlbGV0ZSBCcmFuY2giCi1tc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0LLQtdGC0LrQuCIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIwCi1tc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0LvQvtC60LDQu9GM0L3Rg9GOINCy0LXRgtC60YMiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNwotbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgotbXNnc3RyICLQm9C+0LrQsNC70YzQvdGL0LUg0LLQtdGC0LrQuCIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCi1tc2dzdHIgItCj0LTQsNC70LjRgtGMINGC0L7Qu9GM0LrQviDQsiDRgdC70YPRh9Cw0LUsINC10YHQu9C4INCx0YvQu9C+INGB0LvQuNGP0L3QuNC1INGBIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKLW1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCi1tc2dzdHIgItCS0YHQtdCz0LTQsCAo0L3QtSDQstGL0L/QvtC70L3Rj9GC0Ywg0L/RgNC+0LLQtdGA0LrRgyDQvdCwINGB0LvQuNGP0L3QuNC1KSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKLW1zZ3N0ciAi0JLQtdGC0LrQuCwg0LrQvtGC0L7RgNGL0LUg0L3QtSDQv9C+0LvQvdC+0YHRgtGM0Y4g0YHQu9C40LLQsNGO0YLRgdGPINGBICVzOiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzI5CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgogIlxuIgotIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgotbXNnc3RyICLQktC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0YPQtNCw0LvQtdC90L3Ri9C1INCy0LXRgtC60Lgg0YHQu9C+0LbQvdC+LlxuXG7Qn9GA0L7QtNC+0LvQttC40YLRjD8iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3JlYmFzZS5jOjEzNTkKK21zZ2lkICJleGVjIGNvbW1hbmRzIGNhbm5vdCBjb250YWluIG5ld2xpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM2MworbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzOTAKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzOTIKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM5NAorbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MDAKK21zZ2lkICJkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDAzCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MDUgYnVpbHRpbi9yZWJhc2UuYzoxNDA5IGJ1aWx0aW4vcmViYXNlLmM6MTQxMQorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGFtJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTMgYnVpbHRpbi9yZWJhc2UuYzoxNDE1Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNyBidWlsdGluL3JlYmFzZS5jOjE0MjAKK21zZ2lkICJjaGVycnktcGljayBhbGwgY29tbWl0cywgZXZlbiBpZiB1bmNoYW5nZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDIyCittc2dpZCAiY29udGludWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDI1Cittc2dpZCAic2tpcCBjdXJyZW50IHBhdGNoIGFuZCBjb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MjcKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDMwCittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MzEKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MzQKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQzNworbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0MQorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NQorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDkKK21zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUxCittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTcKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1OQorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2MworbXNnaWQgImFsbG93IHJlYmFzaW5nIGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjYKK21zZ2lkICJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY5Cittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MQorbXNnaWQgInVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDczIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAib3B0aW9uIgorbXNnc3RyICLQvtC/0YbQuNGPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzcKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5OAogbXNnaWQgIiIKLSJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgotIiVzIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINCy0LXRgtC60Lg6XG4lcyIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjIKLW1zZ2lkICJSZW5hbWUgQnJhbmNoIgotbXNnc3RyICLQn9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1INCy0LXRgtC60LgiCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDQKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAi0J/QvtGF0L7QttC1LCDRh9GC0L4g0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyDCq2dpdCBhbcK7LiDQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0L/QtdGA0LXQvNC10YnQtdC90LjQtS4iCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YwiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozNgotbXNnaWQgIkJyYW5jaDoiCi1tc2dzdHIgItCS0LXRgtC60LA6IgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKLW1zZ2lkICJOZXcgTmFtZToiCi1tc2dzdHIgItCd0L7QstC+0LUg0L3QsNC30LLQsNC90LjQtToiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKLW1zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0LLQtdGC0LrRgyDQtNC70Y8g0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjRjy4iCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywgwqslc8K7LiAiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxNwotbXNnaWQgIlN0YXJ0aW5nLi4uIgotbXNnc3RyICLQl9Cw0L/Rg9GB0LrigKYiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNgotbXNnaWQgIkZpbGUgQnJvd3NlciIKLW1zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgCDRgdC/0LjRgdC60LAg0YTQsNC50LvQvtCyIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2FkaW5nICVzLi4uIgotbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwICVz4oCmIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTg3Ci1tc2dpZCAiW1VwIFRvIFBhcmVudF0iCi1tc2dzdHIgIlvQndCwINGD0YDQvtCy0LXQvdGMINCy0YvRiNC1XSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDRhNCw0LnQu9GLINCy0LXRgtC60LgiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKLW1zZ2lkICJCcm93c2UiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0YwiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgotbXNnc3RyICLQmNC30LLQu9C10YfQtdC90LjQtSAlcyDQuNC3ICVzICIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCi1tc2dzdHIgItC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwOiDQvdC10LLQvtC30LzQvtC20L3QviDRgNCw0LfRgNC10YjQuNGC0YwgJXMiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCi0jOiBsaWIvc3Noa2V5LnRjbDo1MwotbXNnaWQgIkNsb3NlIgotbXNnc3RyICLQl9Cw0LrRgNGL0YLRjCIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCi1tc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINGD0L/RgNC+0YnRkdC90L3QvtC5INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCBnaXQgcHVsbCDQtNC70Y8gwqslc8K7LiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU0NQogbXNnaWQgIiIKLSJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKLSJcbiIKLSJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgotIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgotbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuXG5cbtCe0L3QsCDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0L/QtdGA0LXQvNC+0YLQsNC90LAg0LLQv9C10YDQtdC0INC6ICVzLlxu0KLRgNC10LHRg9C10YLRgdGPINGB0LvQuNGP0L3QuNC1LiIKKyJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIGlzIGRlcHJlY2F0ZWQuIFVzZSAtLXJlYmFzZS1tZXJnZXMgaW5zdGVhZC4iCittc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3QsNGPINGB0YLRgNCw0YLQtdCz0LjRjyDRgdC70LjRj9C90LjRjyDCqyVzwrsuIgorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTQ5Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAi0J3QtdGCINC/0LXRgNC10LzQtdGJ0LXQvdC40Y8g0LIg0L/RgNC+0YbQtdGB0YHQtT8iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMIMKrJXPCuy4iCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTMKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgItCU0LXQudGB0YLQstC40LUgLS1lZGl0LXRvZG8g0LzQvtC20LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINGC0L7Qu9GM0LrQviDQv9GA0Lgg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0Lwg0L/QtdGA0LXQvNC10YnQtdC90LjQuC4iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Ci1tc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICLQoNCw0LHQvtGH0LDRjyDQvtCx0LvQsNGB0YLRjCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsCDQtNGA0YPQs9C40Lwg0L/RgNC+0YbQtdGB0YHQvtC8LiIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU3NgorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIEhFQUQiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5CisjOiBidWlsdGluL3JlYmFzZS5jOjE1ODgKIG1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBIHJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgotbXNnc3RyICLQn9C+0YHQu9C10LTQvdC10LUg0L/RgNC+0YfQuNGC0LDQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGC0LXQutGD0YnQtdC80YMuXG5cbtChINC80L7QvNC10L3RgtCwINC/0L7RgdC70LXQtNC90LXQuSDQv9GA0L7QstC10YDQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHRi9C7INC40LfQvNC10L3QtdC9INC00YDRg9Cz0L7QuSDQv9GA0L7Qs9GA0LDQvNC80L7QuSBHaXQuINCd0LXQvtCx0YXQvtC00LjQvNC+INC/0LXRgNC10YfQuNGC0LDRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40LksINC/0YDQtdC20LTQtSDRh9C10Lwg0YLQtdC60YPRidCw0Y8g0LLQtdGC0LrQsCDQvNC+0LbQtdGCINCx0YvRgtGMINC40LfQvNC10L3QtdC90LAuXG5cbtCt0YLQviDQsdGD0LTQtdGCINGB0LTQtdC70LDQvdC+INGB0LXQudGH0LDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuC5cbiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAi0JLRiyDQtNC+0LvQttC90Ysg0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINCy0YHQtVxu0LrQvtC90YTQu9C40LrRgtGLINGB0LvQuNGP0L3QuNGPLCDQsCDQv9C+0YLQvtC8INC/0L7QvNC10YLQuNGC0YxcbtC40YUg0LrQsNC6INGA0LDQt9GA0LXRiNC10L3QvdGL0LUg0YEg0L/QvtC80L7RidGM0Y4gZ2l0IGFkZCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgotbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAg0LjQtyDCqyVzwrvigKYiCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDcKK21zZ2lkICJjb3VsZCBub3QgZGlzY2FyZCB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Ci1tc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCi1tc2dzdHIgItGE0LDQudC70Ysg0LjQt9Cy0LvQtdGH0LXQvdGLIgorIzogYnVpbHRpbi9yZWJhc2UuYzoxNjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiCittc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgotbXNnc3RyICLQn9GA0LXRgNCy0LDQvSDQv9C10YDQtdGF0L7QtCDQvdCwIMKrJXPCuyAo0YLRgNC10LHRg9C10YLRgdGPINGB0LvQuNGP0L3QuNC1INGB0L7QtNC10YDQttC40LzQvtCz0L4g0YTQsNC50LvQvtCyKSIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYzNyBidWlsdGluL3JtLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDCqyVzwrsiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Ci1tc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCi1tc2dzdHIgItCi0YDQtdCx0YPQtdGC0YHRjyDRgdC70LjRj9C90LjQtSDRgdC+0LTQtdGA0LbQsNC90LjRjyDRhNCw0LnQu9C+0LIuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgotbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDQvtGB0YLQsNGR0YLRgdGPINGC0LXQutGD0YnQtdC5LiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY2MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCi0iXG4iCi0iSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCBDaGVja291dCcuIgotbXNnc3RyICLQktGLINCx0L7Qu9C10LUg0L3QtSDQvdCw0YXQvtC00LjRgtC10YHRjCDQvdCwINC70L7QutCw0LvRjNC90L7QuSDQstC10YLQutC1LlxuXG7QldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDRgdC90L7QstCwINCy0LXRgNC90YPRgtGM0YHRjyDQuiDQutCw0LrQvtC5LdC90LjQsdGD0LTRjCDQstC10YLQutC1LCDRgdC+0LfQtNCw0LnRgtC1INC10ZEg0YHQtdC50YfQsNGBLCDQvdCw0YfQuNC90LDRjyDRgSDCq9Ci0LXQutGD0YnQtdCz0L4g0L7RgtGB0L7QtdC00LjQvdC10L3QvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y/Cuy4iCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJXMgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCVzXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JXNcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLlxuIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCi1tc2dzdHIgItCS0YvQv9C+0LvQvdC10L0g0L/QtdGA0LXRhdC+0LQg0L3QsCDCqyVzwrsuIgorIzogYnVpbHRpbi9yZWJhc2UuYzoxNjg0Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKLW1zZ3N0ciAi0KHQsdGA0L7RgSDCqyVzwrsgINC90LAgwqslc8K7INC/0YDQuNCy0LXQtNC10YIg0Log0L/QvtGC0LXRgNC1INGB0LvQtdC00YPRjtGJ0LjRhSDQutC+0LzQvNC40YLQvtCyOiIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC/0L7RgtC10YDRj9C90L3Ri9C1INC60L7QvNC80LjRgtGLINCx0YPQtNC10YIg0YHQu9C+0LbQvdC+LiIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc0NworbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgJyVzJz8iCi1tc2dzdHIgItCh0LHRgNC+0YHQuNGC0Ywgwqslc8K7PyIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc5NgorbXNnaWQgImNhbm5vdCBjb21iaW5lIGFtIG9wdGlvbnMgd2l0aCBlaXRoZXIgaW50ZXJhY3RpdmUgb3IgbWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKLW1zZ2lkICJWaXN1YWxpemUiCi1tc2dzdHIgItCd0LDQs9C70Y/QtNC90L4iCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MTUKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgIiIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTgxOQogbXNnaWQgIiIKLSJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgotIlxuIgotIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCB5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKLSJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9GB0YLQsNC90L7QstC40YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YLQutGDLlxuXG7QktCw0Ygg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0L7QsdC90L7QstC70ZHQvSDRgtC+0LvRjNC60L4g0YfQsNGB0YLQuNGH0L3Qvi4g0JHRi9C70Lgg0L7QsdC90L7QstC70LXQvdGLINCy0YHQtSDRhNCw0LnQu9GLINC60YDQvtC80LUg0YHQu9GD0LbQtdCx0L3Ri9GFINGE0LDQudC70L7QsiBHaXQuIFxuXG7QrdGC0L7Qs9C+INC90LUg0LTQvtC70LbQvdC+INCx0YvQu9C+INC/0YDQvtC40LfQvtC50YLQuC4gJXMg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjy4iCisiZXJyb3I6IGNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjJyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Ci1tc2dpZCAiU2VsZWN0IgotbXNnc3RyICLQktGL0LHRgNCw0YLRjCIKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTgyNQorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCi1tc2dpZCAiRm9udCBGYW1pbHkiCi1tc2dzdHIgItCo0YDQuNGE0YIiCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MjgKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1yZWJhc2UtbWVyZ2VzJyB3aXRoICctLXN0cmF0ZWd5JyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Ci1tc2dpZCAiRm9udCBTaXplIgotbXNnc3RyICLQoNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorIzogYnVpbHRpbi9yZWJhc2UuYzoxODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJyVzJyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkxCi1tc2dpZCAiRm9udCBFeGFtcGxlIgotbXNnc3RyICLQn9GA0LjQvNC10YAg0YLQtdC60YHRgtCwIgorIzogYnVpbHRpbi9yZWJhc2UuYzoxODU4Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDoxMDMKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjM4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTkzMworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgItCd0LXRgiDRgtCw0LrQvtC5INGB0YHRi9C70LrQuDogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkyNworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NjgKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INGB0L/RgNGP0YLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk4MworbXNnaWQgImNvdWxkIG5vdCByZXNldCAtLWhhcmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTg0IGJ1aWx0aW4vcmVzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQg0YHQtdC50YfQsNGBINC90LAgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAwMAorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgItCh0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INC40YUuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDUxCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiSEVBRCDRg9C20LUg0LIg0LDQutGC0YPQsNC70YzQvdC+0Lwg0YHQvtGB0YLQvtGP0L3QuNC4LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDYxCittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiSEVBRCDRg9C20LUg0LIg0LDQutGC0YPQsNC70YzQvdC+0Lwg0YHQvtGB0YLQvtGP0L3QuNC4LCDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QvtC1INC/0LXRgNC10LzQtdGJ0LXQvdC40LUuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNzEKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAi0J/QtdGA0LXRhdCy0LDRgtGH0LjQuiBwcmUtcmViYXNlINC+0YLQutCw0LfQsNC7INCyINC/0LXRgNC10LzQtdGJ0LXQvdC40LguIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTUKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzMKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA80LrQsNGC0LDQu9C+0LMtZ2l0PiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MzMKIG1zZ2lkICIiCi0iVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCi0iSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKLW1zZ3N0ciAi0K3RgtC+INC/0YDQuNC80LXRgCDRgtC10LrRgdGC0LAuXG7QldGB0LvQuCDQktCw0Lwg0L3RgNCw0LLQuNGC0YHRjyDRjdGC0L7RgiDRgtC10LrRgdGCLCDRjdGC0L4g0LzQvtC20LXRgiDQsdGL0YLRjCDQktCw0Ygg0YjRgNC40YTRgi4iCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgItCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLCDQvtCx0L3QvtCy0LvRj9GC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgyDQsiDRgNC10L/QvtC30LjRgtC+0YDQuNC4INGBINGA0LDQsdC+0YfQtdC5XG7QutC+0L/QuNC10LkgKNC90LUg0LPQvtC70L7QvCkg0LfQsNC/0YDQtdGJ0LXQvdC+LCDRgtCw0Log0LrQsNC6INGN0YLQviDRgdC00LXQu9Cw0LXRgiDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdC00LXQutGB0LBcbtC4INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQv9GA0L7RgtC40LLQvtGA0LXRh9C40LLRi9C8LCDQuCDQstCw0Lwg0L/RgNC40LnQtNC10YLRgdGPINCy0YvQv9C+0LvQvdC40YLRjFxuwqtnaXQgcmVzZXQgLS1oYXJkwrssINGH0YLQvtCx0Ysg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDRgdC90L7QstCwXG7RgdC+0L7RgtCy0LXRgtGB0YLQstC+0LLQsNC70L4gSEVBRC5cblxu0JLRiyDQvNC+0LbQtdGC0LUg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDQvtC/0YbQuNC4IMKrcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaMK7XG7QsiDCq2lnbm9yZcK7INC40LvQuCDCq3dhcm7CuyDQstC+INCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgsINGH0YLQvtCx0Ysg0YDQsNC30YDQtdGI0LjRgtGMXG7QvtGC0L/RgNCw0LLQutGDINCyINC10LPQviDRgtC10LrRg9GJ0YPRjiDQstC10YLQutGDOyDQvdC+INGN0YLQviDQvdC1INGA0LXQutC+0LzQtdC90LTRg9C10YLRgdGPLCDQtdGB0LvQuCDRgtC+0LvRjNC60L5cbtCy0Ysg0L3QtSDQvdCw0LzQtdGA0LXQvdGLINC+0LHQvdC+0LLQuNGC0Ywg0LXQs9C+INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINGB0L/QvtGB0L7QsdC+0Lwg0L/QvtC00L7QsdC90YvQvFxu0LLRi9GI0LXQvtC/0LjRgdCw0L3QvdC+0LzRgy5cblxu0KfRgtC+0LHRiyDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRjdGC0L4g0YHQvtC+0LHRidC10L3QuNC1INC4INCy0YHQtSDRgNCw0LLQvdC+INC+0YHRgtCw0LLQuNGC0Ywg0L/QvtCy0LXQtNC10L3QuNC1XG7Qv9C+INGD0LzQvtC70YfQsNC90LjRjiwg0YPRgdGC0LDQvdC+0LLQuNGC0LUg0LfQvdCw0YfQtdC90LjQtSDQvtC/0YbQuNC4IMKrcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaMK7XG7QsiDCq3JlZnVzZcK7LiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOAotbXNnaWQgIkdpdCBHdWkiCi1tc2dzdHIgIkdpdCBHdWkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODYKLW1zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCi1tc2dzdHIgItCh0L7Qt9C00LDRgtGMINC90L7QstGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MwotbXNnaWQgIk5ldy4uLiIKLW1zZ3N0ciAi0J3QvtCy0YvQueKApiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzEKLW1zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICLQodC60LvQvtC90LjRgNC+0LLQsNGC0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2Ci1tc2dpZCAiQ2xvbmUuLi4iCi1tc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNGC0YzigKYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgotbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0JLRi9Cx0YDQsNGC0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5Ci1tc2dpZCAiT3Blbi4uLiIKLW1zZ3N0ciAi0J7RgtC60YDRi9GC0YzigKYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCi1tc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKLW1zZ3N0ciAi0J3QtdC00LDQstC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzOAotbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgotbXNnc3RyICLQntGC0LrRgNGL0YLRjCDQv9C+0YHQu9C10LTQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5ICVzOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKLW1zZ2lkICJEaXJlY3Rvcnk6IgotbXNnc3RyICLQmtCw0YLQsNC70L7QszoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0KDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICLQmtCw0YLQsNC70L7QsyAnJXMnINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgItCk0LDQudC7ICclcycg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjYKLW1zZ2lkICJDbG9uZSIKLW1zZ3N0ciAi0KHQutC70L7QvdC40YDQvtCy0LDRgtGMIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQotbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCi1tc2dzdHIgItCY0YHRhdC+0LTQvdC+0LUg0L/QvtC70L7QttC10L3QuNC1OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKLW1zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKLW1zZ3N0ciAi0JrQsNGC0LDQu9C+0LMg0L3QsNC30L3QsNGH0LXQvdC40Y86IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgotbXNnaWQgIkNsb25lIFR5cGU6IgotbXNnc3RyICLQotC40L8g0LrQu9C+0L3QsDoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Ci1tc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgotbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3Ri9C5ICjQkdGL0YHRgtGA0YvQuSwg0L/QvtC70YPQuNC30LHRi9GC0L7Rh9C90YvQuSwgwqvQttC10YHRgtC60LjQtcK7INGB0YHRi9C70LrQuCkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Ci1tc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgotbXNnc3RyICLQn9C+0LvQvdCw0Y8g0LrQvtC/0LjRjyAo0JzQtdC00LvQtdC90L3Ri9C5LCDRgdC+0LfQtNCw0LXRgiDRgNC10LfQtdGA0LLQvdGD0Y4g0LrQvtC/0LjRjikiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCi1tc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCi1tc2dzdHIgItCe0LHRidC40LkgKNCh0LDQvNGL0Lkg0LHRi9GB0YLRgNGL0LksINC90LUg0YDQtdC60L7QvNC10L3QtNGD0LXRgtGB0Y8sINCx0LXQtyDRgNC10LfQtdGA0LLQvdC+0Lkg0LrQvtC/0LjQuCkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjAzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKLW1zZ3N0ciAi0JrQsNGC0LDQu9C+0LMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCi1tc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3Ri9C5INC60LvQvtC9INCy0L7Qt9C80L7QttC10L0g0YLQvtC70YzQutC+INC00LvRjyDQu9C+0LrQsNC70YzQvdC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKLW1zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICLQntCx0YnQuNC5INC60LvQvtC9INCy0L7Qt9C80L7QttC10L0g0YLQvtC70YzQutC+INC00LvRjyDQu9C+0LrQsNC70YzQvdC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgItCf0YPRgtGMICclcycg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgdC60L7QvdGE0LjQs9GD0YDQuNGA0L7QstCw0YLRjCDQuNGB0YXQvtC00L3Ri9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAotbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCi1tc2dzdHIgItCh0YfQuNGC0LDRjiDQvtCx0YrQtdC60YLRiyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKLW1zZ2lkICJidWNrZXRzIgotbXNnc3RyICLQsdC70L7QutC4IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgdC60L7Qv9C40YDQvtCy0LDRgtGMIG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgotbXNnc3RyICLQndC10YfQtdCz0L4g0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDRgSAlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAi0J3QtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0L3QsCDQstC10YLQstGMIMKrbWFzdGVywrsuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgotbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCi1tc2dzdHIgIsKr0JbQtdGB0YLQutC40LUg0YHRgdGL0LvQutC4wrsg0L3QtdC00L7RgdGC0YPQv9C90YsuINCR0YPQtNC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC+INC60L7Qv9C40YDQvtCy0LDQvdC40LUuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKLW1zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0L3QuNC1ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNC90LjQtSBvYmplY3RzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAotbXNnaWQgIktpQiIKLW1zZ3N0ciAi0JrQkSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgotbXNnc3RyICLQndC1INC80L7Qs9GDINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0L7QsdGK0LXQutGCOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKLW1zZ2lkICJMaW5raW5nIG9iamVjdHMiCi1tc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0YHRgdGL0LvQvtC6INC90LAgb2JqZWN0cyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKLW1zZ2lkICJvYmplY3RzIgotbXNnc3RyICLQvtCx0YrQtdC60YLRiyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgdC+0LfQtNCw0YLRjCDCq9C20LXRgdGC0LrRg9GOINGB0YHRi9C70LrRg8K7INC90LAg0L7QsdGK0LXQutGCOiAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTgKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40LfQstC70LXRh9GMINCy0LXRgtC60Lgg0Lgg0L7QsdGK0LXQutGC0YsuINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8g0L3QsCDQutC+0L3RgdC+0LvQuC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY5Ci1tc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40LfQstC70LXRh9GMINC80LXRgtC60LguINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8g0L3QsCDQutC+0L3RgdC+0LvQuC4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCi1tc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQvtC/0YDQtdC00LXQu9C40YLRjCBIRUFELiDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0LrQvtC90YHQvtC70LguIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC+0YfQuNGB0YLQuNGC0YwgJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4Ci1tc2dpZCAiQ2xvbmUgZmFpbGVkLiIKLW1zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0L3QuNC1INC90LUg0YPQtNCw0LvQvtGB0YwuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQotbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKLW1zZ3N0ciAi0JLQtdGC0LrQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQvdC1INCx0YvQu9CwINC/0L7Qu9GD0YfQtdC90LAuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgNCw0YHQv9C+0LfQvdCw0YLRjCAlcyDQutCw0Log0LrQvtC80LzQuNGCLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKLW1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAi0KHQvtC30LTQsNGOINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOSBsaWIvaW5kZXgudGNsOjY3IGxpYi9pbmRleC50Y2w6MTMwCi0jOiBsaWIvaW5kZXgudGNsOjE5OAotbXNnaWQgImZpbGVzIgotbXNnc3RyICLRhNCw0LnQu9C+0LIiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Ci1tc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQvdCw0YfQsNC70YzQvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGE0LDQudC70L7QsiDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDExCi1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAi0J7RgtC60YDRi9GC0YwiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQotbXNnaWQgIlJlcG9zaXRvcnk6IgotbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAlczoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MwotbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCi1tc2dzdHIgItCi0LXQutGD0YnQtdC1INC+0YLRgdC+0LXQtNC40L3QtdC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjYwCi1tc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCi1tc2dzdHIgItCS0YvRgNCw0LbQtdC90LjQtSDQtNC70Y8g0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDQstC10YDRgdC40Lg6IgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzQKLW1zZ2lkICJMb2NhbCBCcmFuY2giCi1tc2dzdHIgItCb0L7QutCw0LvRjNC90LDRjyDQstC10YLQutCwOiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjc5Ci1tc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICLQntGC0YHQu9C10LbQuNCy0LDQtdC80LDRjyDQstC10YLQutCwIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAotbXNnaWQgIlRhZyIKLW1zZ3N0ciAi0JzQtdGC0LrQsCIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjMxNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgotbXNnc3RyICLQndC10LLQtdGA0L3QsNGPINCy0LXRgNGB0LjRjzogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKLW1zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCi1tc2dzdHIgItCS0LXRgNGB0LjRjyDQvdC1INGD0LrQsNC30LDQvdCwLiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgotbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgotbXNnc3RyICLQn9GD0YHRgtC+0LUg0LLRi9GA0LDQttC10L3QuNC1INC00LvRjyDQvtC/0YDQtdC00LXQu9C10L3QuNGPINCy0LXRgNGB0LjQuC4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKLW1zZ2lkICJVcGRhdGVkIgotbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90L4iCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTkKLW1zZ2lkICJVUkwiCi1tc2dzdHIgItCh0YHRi9C70LrQsCIKLQotIzogbGliL2NvbW1pdC50Y2w6OQorIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4NTMKIG1zZ2lkICIiCi0iVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKICJcbiIKLSJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgdG8gYW1lbmQuXG4iCi1tc2dzdHIgItCe0YLRgdGD0YLRgdGC0LLRg9C10YIg0LrQvtC80LzQuNGC0Ysg0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8uXG5cbtCS0Ysg0YHQvtC30LTQsNC10YLQtSDQvdCw0YfQsNC70YzQvdGL0Lkg0LrQvtC80LzQuNGCLCDQt9C00LXRgdGMINC10YnQtSDQvdC10YfQtdCz0L4g0LjRgdC/0YDQsNCy0LvRj9GC0YwuXG4iCisiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG9cbiIKKyInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZVxuIgorImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAi0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4sINGD0LTQsNC70LXQvdC40LUg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDQt9Cw0L/RgNC10YnQtdC90L4sINGC0LDQuiDQutCw0Log0L/QvtGB0LvQtdC00YPRjtGJ0LjQuVxuwqtnaXQgY2xvbmXCuyDQvdC1INGB0LzQvtC20LXRgiDQv9C+0LvRg9GH0LjRgtGMINC90LjQutCw0LrQuNGFINGE0LDQudC70L7Qsiwg0YfRgtC+INC/0YDQuNCy0LXQtNC10YIg0Log0L/Rg9GC0LDQvdC40YbQtS5cblxu0JLRiyDQvNC+0LbQtdGC0LUg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDQvtC/0YbQuNC4IMKrcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudMK7XG7QsiDCq3dhcm7CuyDQuNC70LggwqtpZ25vcmXCuywg0LLQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4LCAg0YfRgtC+0LHRiyDRgNCw0LfRgNC10YjQuNGC0YxcbtGD0LTQsNC70LXQvdC40LUg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDRgSDQuNC70Lgg0LHQtdC3INC/0YDQtdC00YPQv9GA0LXQttC00LDRjtGJ0LXQs9C+INGB0L7QvtCx0YnQtdC90LjRjy5cblxu0KfRgtC+0LHRiyDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRjdGC0L4g0YHQvtC+0LHRidC10L3QuNC1LCDQstGLINC80L7QttC10YLQtSDRg9GB0YLQsNC90L7QstC40YLRjCDQt9C90LDRh9C10L3QuNC1INC+0L/RhtC40LhcbtCyIMKrcmVmdXNlwrsuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxOAorIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTQwCittc2dpZCAicXVpZXQiCittc2dzdHIgItGC0LjRhdC40Lkg0YDQtdC20LjQvCIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTU0Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIGRpcmVjdG9yeS4iCittc2dzdHIgItCS0Ysg0LTQvtC70LbQvdGLINGD0LrQsNC30LDRgtGMINC60LDRgtCw0LvQvtCzLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoxNwogbXNnaWQgIiIKLSJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKLSJcbiIKLSJZb3UgYXJlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlIGN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC40YHQv9GA0LDQstC40YLRjCDQutC+0LzQvNC40YIg0LLQviDQstGA0LXQvNGPINGB0LvQuNGP0L3QuNGPLlxuXG7QotC10LrRg9GJ0LXQtSDRgdC70LjRj9C90LjQtSDQvdC1INC30LDQstC10YDRiNC10L3Qvi4g0J3QtdCy0L7Qt9C80L7QttC90L4g0LjRgdC/0YDQsNCy0LjRgtGMINC/0YDQtdC00YvQtNGD0LjQuSDQutC+0LzQvNC40YIsINC90LUg0L/RgNC10YDRi9Cy0LDRjyDRjdGC0YMg0L7Qv9C10YDQsNGG0LjRji5cbiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSAiCisiWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSIKKyIgPHJlZnM+Li4uIgorbXNnc3RyICIiCiAKLSM6IGxpYi9jb21taXQudGNsOjQ4Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgotbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC4INC30LDQs9GA0YPQt9C60LUg0LTQsNC90L3Ri9GFINC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPINC60L7QvNC80LjRgtCwOiIKLQotIzogbGliL2NvbW1pdC50Y2w6NzUKLW1zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9C+0LvRg9GH0LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+0LEg0LDQstGC0L7RgNGB0YLQstC1OiIKLQotIzogbGliL2NvbW1pdC50Y2w6ODAKLW1zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgotbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNGL0LkgR0lUX0NPTU1JVFRFUl9JREVOVDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjEyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgotbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiBUY2wg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LrQvtC00LjRgNC+0LLQutGDIMKrJXPCuy4iCi0KLSM6IGxpYi9jb21taXQudGNsOjE0OQorIzogYnVpbHRpbi9yZWZsb2cuYzoyMgogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgcmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKLW1zZ3N0ciAi0J/QvtGB0LvQtdC00L3QtdC1INC/0YDQvtGH0LjRgtCw0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC10LrRg9GJ0LXQvNGDLlxuXG7QoSDQvNC+0LzQtdC90YLQsCDQv9C+0YHQu9C10LTQvdC10Lkg0L/RgNC+0LLQtdGA0LrQuCDRgNC10L/QvtC30LjRgtC+0YDQuNC5INCx0YvQuyDQuNC30LzQtdC90LXQvSDQtNGA0YPQs9C+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LkgR2l0LiDQndC10L7QsdGF0L7QtNC40LzQviDQv9C10YDQtdGH0LjRgtCw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5LCDQv9GA0LXQttC00LUg0YfQtdC8INC40LfQvNC10L3Rj9GC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LLRjC4gXG5cbtCt0YLQviDQsdGD0LTQtdGCINGB0LTQtdC70LDQvdC+INGB0LXQudGH0LDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuC5cbiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNzIKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjUKK21zZ2lkICJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2NyBidWlsdGluL3JlZmxvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80L7QuSDQvNC10YLQutC+0Lkg0LTQsNGC0Ysv0LLRgNC10LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgcmVhY2hhYmxlIG9iamVjdHMuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIG5vd2hlcmUhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk1Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZWZsb2cgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc2NAorbXNnaWQgImdpdCByZWZsb2cgWyBzaG93IHwgZXhwaXJlIHwgZGVsZXRlIHwgZXhpc3RzIF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3CiBtc2dpZCAiIgotIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGluZy5cbiIKLW1zZ3N0ciAi0J3QtdC70YzQt9GPINCy0YvQv9C+0LvQvdC40YLRjCDQutC+0LzQvNC40YIg0YEg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQtdC5INGB0LvQuNGP0L3QuNGPLlxuXG7QlNC70Y8g0YTQsNC50LvQsCAlcyDQstC+0LfQvdC40Log0LrQvtC90YTQu9C40LrRgiDRgdC70LjRj9C90LjRjy4g0KDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YIg0Lgg0LTQvtCx0LDQstGM0YLQtSDQuNGFINCyINC40L3QtNC10LrRgSDQv9C10YDQtdC0INCy0YvQv9C+0LvQvdC10L3QuNC10Lwg0LrQvtC80LzQuNGC0LAuXG4iCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gIgorIlstLW1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWy10IDzQstC10YLQutCwPl0gWy1tIDzQvNCw0YHRgtC10YAt0LLQtdGC0LrQsD5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tbWlycm9yPTxmZXRjaHxwdXNoPl0gPNC40LzRjz4gPNCw0LTRgNC10YE+IgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODAKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTggYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA80YHRgtCw0YDQvtC1LdC90LDQt9Cy0LDQvdC40LU+IDzQvdC+0LLQvtC1LdC90LDQt9Cy0LDQvdC40LU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDzQuNC80Y8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDzQuNC80Y8+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA80LLQtdGC0LrQsD4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMKIG1zZ2lkICIiCi0iVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgotIlxuIgotIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCi1tc2dzdHIgItCe0LHQvdCw0YDRg9C20LXQvdC+INC90LXQuNC30LLQtdGB0YLQvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGE0LDQudC70LAgJXMuXG5cbtCk0LDQudC7ICVzINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQt9Cw0LrQvtC80LzQuNGH0LXQvSDRjdGC0L7QuSDQv9GA0L7Qs9GA0LDQvNC80L7QuS5cbiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg80LPRgNGD0L/Qv9CwPiB8IDzQuNC80Y8t0LLQvdC10YjQvdC10LPQvi3RgNC10L/QvtC30LjRgtC+0YDQuNGPPinigKZdIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODgKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA80LjQvNGPPiA80LLQtdGC0LrQsD7igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUgYnVpbHRpbi9yZW1vdGUuYzo3NAorbXNnaWQgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDzQuNC80Y8+IDzQvdC+0LLRi9C5LXVybD4gWzzRgdGC0LDRgNGL0LktdXJsPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA80LjQvNGPPiA80L3QvtCy0YvQuS11cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPNC40LzRjz4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzMKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs80L7Qv9GG0LjQuD5dIDzQuNC80Y8+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUzCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA80LjQvNGPPiA80LLQtdGC0LrQsD7igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDzQuNC80Y8+IDzQstC10YLQutCwPuKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OQorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPNC+0L/RhtC40Lg+XSA80LjQvNGPPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs80L7Qv9GG0LjQuD5dIDzQuNC80Y8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs80L7Qv9GG0LjQuD5dIFs80LPRgNGD0L/Qv9CwPiB8IDzQuNC80Y8t0LLQvdC10YjQvdC10LPQvi3RgNC10L/QvtC30LjRgtC+0YDQuNGPPl3igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMAogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgotbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPRjtGCINC40LfQvNC10L3QtdC90LjRjyDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8uXG5cbtCU0L7QsdCw0LLRjNGC0LUg0LIg0LjQvdC00LXQutGBINGF0L7RgtGPINCx0Ysg0L7QtNC40L0g0YTQsNC50Lsg0L/QtdGA0LXQtCDQstGL0L/QvtC70L3QtdC90LjQtdC8INC60L7QvNC80LjRgtCwLlxuIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAi0LrQu9GO0YcgLS1taXJyb3Ig0L3QtdCx0LXQt9C+0L/QsNGB0LXQvSDQuCDQvdC1INGA0LXQutC+0LzQtdC90LTRg9C10YLRgdGPINC6INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGOO1xu0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQstC80LXRgdGC0L4g0L3QtdCz0L4gLS1taXJyb3I9ZmV0Y2gg0LjQu9C4IC0tbWlycm9yPXB1c2giCiAKLSM6IGxpYi9jb21taXQudGNsOjIwMwotbXNnaWQgIiIKLSJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0iXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKLSJcbiIKLSItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCi0iLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKLSItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCi1tc2dzdHIgItCj0LrQsNC20LjRgtC1INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsC5cblxu0KDQtdC60L7QvNC10L3QtNGD0LXRgtGB0Y8g0YHQu9C10LTRg9GO0YnQuNC5INGE0L7RgNC80LDRgiDRgdC+0L7QsdGJ0LXQvdC40Y86XG5cbi0g0LIg0L/QtdGA0LLQvtC5INGB0YLRgNC+0LrQtSDQutGA0LDRgtC60L7QtSDQvtC/0LjRgdCw0L3QuNC1INGB0LTQtdC70LDQvdC90YvRhSDQuNC30LzQtdC90LXQvdC40Llcbi0g0LLRgtC+0YDQsNGPINGB0YLRgNC+0LrQsCDQv9GD0YHRgtCw0Y9cbi0g0LIg0L7RgdGC0LDQstGI0LjRhdGB0Y8g0YHRgtGA0L7QutCw0YUg0L7Qv9C40YjQuNGC0LUsINGH0YLQviDQtNCw0Y7RgiDQstCw0YjQuCDQuNC30LzQtdC90LXQvdC40Y9cbiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90YvQuSDQsNGA0LPRg9C80LXQvdGCINC00LvRjyBtaXJyb3I6ICVzIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMzQKLW1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKLW1zZ3N0ciAi0JLRi9C30L7QsiDQv9C10YDQtdGF0LLQsNGC0YfQuNC60LAgcHJlLWNvbW1pdOKApiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0Ywg0LLQvdC10YjQvdC40LUg0LLQtdGC0LrQuCIKIAotIzogbGliL2NvbW1pdC50Y2w6MjQ5Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCi1tc2dzdHIgItCa0L7QvNC80LjRgiDQv9GA0LXRgNCy0LDQvSDQv9C10YDQtdCy0LDRgtGH0LjQutC+0LwgcHJlLWNvbW1pdC4iCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgItC40LzQv9C+0YDRgtC40YDQvtCy0LDRgtGMINCy0YHQtSDQvNC10YLQutC4INC4INCw0YHRgdC+0YbQuNC40YDQvtCy0LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiyDQv9GA0Lgg0LjQt9Cy0LvQtdGH0LXQvdC40LgiCiAKLSM6IGxpYi9jb21taXQudGNsOjI3MgotbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICLQktGL0LfQvtCyINC/0LXRgNC10YXQstCw0YLRh9C40LrQsCBjb21taXQtbXNn4oCmIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxNjgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgItC40LvQuCDQvdC1INC40LfQstC70LXQutCw0YLRjCDQvNC10YLQutC4INCy0L7QvtCx0YnQtSAoLS1uby10YWdzKSIKIAotIzogbGliL2NvbW1pdC50Y2w6Mjg3Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgItCa0L7QvNC80LjRgiDQv9GA0LXRgNCy0LDQvSDQv9C10YDQtdCy0LDRgtGH0LjQutC+0LwgY29tbWl0LW1zZyIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAi0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0LLQtdGC0LrQuCIKIAotIzogbGliL2NvbW1pdC50Y2w6MzAwCi1tc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgotbXNnc3RyICLQmtC+0LzQvNC40YIg0LjQt9C80LXQvdC10L3QuNC54oCmIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICLQvNCw0YHRgtC10YAg0LLQtdGC0LrQsCIKIAotIzogbGliL2NvbW1pdC50Y2w6MzE2Ci1tc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgotbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAgd3JpdGUtdHJlZSDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGBINC+0YjQuNCx0LrQvtC5OiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTczCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC60LDQuiDQt9C10YDQutCw0LvQviDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuCDQuNC70Lgg0LjQt9Cy0LvQtdGH0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5IgogCi0jOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgotbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQutC+0LzQvNC40YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAi0YPQutCw0LfQsNC90LjQtSDQvNCw0YHRgtC10YAg0LLQtdGC0LrQuCDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwINGBINC/0LDRgNCw0LzQtdGC0YDQvtC8IC0tbWlycm9yIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgotbXNnc3RyICLQmtC+0LzQvNC40YIgJXMg0L/QvtGF0L7QttC1INC/0L7QstGA0LXQttC00LXQvSIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAi0YPQutCw0LfQsNC90LjQtSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQstC10YLQvtC6INC40LzQtdC10YIg0YHQvNGL0YHQuyDRgtC+0LvRjNC60L4g0L/RgNC4INC30LXRgNC60LDQu9GM0L3QvtC8INC40LfQstC70LXRh9C10L3QuNC4IgogCi0jOiBsaWIvY29tbWl0LnRjbDozMzkKLW1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKLSJcbiIKLSJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCi1tc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINC60L7QvNC80LjRgtCwLlxuXG7QndC4INC+0LTQuNC9INGE0LDQudC7INC90LUg0LHRi9C7INC40LfQvNC10L3QtdC9INC4INC90LUg0LHRi9C70L4g0YHQu9C40Y/QvdC40Y8uXG5cbtCh0LXQudGH0LDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQt9Cw0L/Rg9GB0YLQuNGC0YHRjyDQv9C10YDQtdGH0LjRgtGL0LLQsNC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPLlxuIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxOTQgYnVpbHRpbi9yZW1vdGUuYzo2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAlcyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCiAKLSM6IGxpYi9jb21taXQudGNsOjM0NgotbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKLW1zZ3N0ciAi0J3QtdGCINC40LfQvNC10L3QtdC90LjRjyDQtNC70Y8g0LrQvtC80LzQuNGC0LAuIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNjAKLW1zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgotbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAgY29tbWl0LXRyZWUg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjCDRgSDQvtGI0LjQsdC60L7QuToiCi0KLSM6IGxpYi9jb21taXQudGNsOjM4MQotbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwIHVwZGF0ZS1yZWYg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjCDRgSDQvtGI0LjQsdC60L7QuToiCi0KLSM6IGxpYi9jb21taXQudGNsOjQ2OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKLW1zZ3N0ciAi0KHQvtC30LTQsNC9INC60L7QvNC80LjRgiAlczogJXMgIgotCi0jOiBsaWIvY29uc29sZS50Y2w6NTkKLW1zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgotbXNnc3RyICLQkiDQv9GA0L7RhtC10YHRgdC14oCmINC/0L7QttCw0LvRg9C50YHRgtCwLCDQttC00LjRgtC14oCmIgotCi0jOiBsaWIvY29uc29sZS50Y2w6MTg2Ci1tc2dpZCAiU3VjY2VzcyIKLW1zZ3N0ciAi0J/RgNC+0YbQtdGB0YEg0YPRgdC/0LXRiNC90L4g0LfQsNCy0LXRgNGI0LXQvSIKLQotIzogbGliL2NvbnNvbGUudGNsOjIwMAotbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKLW1zZ3N0ciAi0J7RiNC40LHQutCwOiDQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQutC+0LzQsNC90LTRgyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0MwotbXNnaWQgIk51bWJlciBvZiBsb29zZSBvYmplY3RzIgotbXNnc3RyICLQmtC+0LvQuNGH0LXRgdGC0LLQviDQvdC10YHQstGP0LfQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAi0J7QsdGK0LXQvCDQtNC40YHQutC+0LLQvtCz0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstCwLCDQt9Cw0L3Rj9GC0YvQuSDQvdC10YHQstGP0LfQsNC90L3Ri9C80Lgg0L7QsdGK0LXQutGC0LDQvNC4IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ1Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICLQmtC+0LvQuNGH0LXRgdGC0LLQviDRg9C/0LDQutC+0LLQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgItCa0L7Qu9C40YfQtdGB0YLQstC+IHBhY2st0YTQsNC50LvQvtCyIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ3Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICLQntCx0YrQtdC8INC00LjRgdC60L7QstC+0LPQviDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0LAsINC30LDQvdGP0YLRi9C5INGD0L/QsNC60L7QstCw0L3QvdGL0LzQuCDQvtCx0YrQtdC60YLQsNC80LgiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKLW1zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgotbXNnc3RyICLQndC10YHQstGP0LfQsNC90L3Ri9C1INC+0LHRitC10LrRgtGLLCDQutC+0YLQvtGA0YvQtSDQvNC+0LbQvdC+INGD0LTQsNC70LjRgtGMIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ5Ci1tc2dpZCAiR2FyYmFnZSBmaWxlcyIKLW1zZ3N0ciAi0JzRg9GB0L7RgCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo3MgotbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCi1tc2dzdHIgItCh0LbQsNGC0LjQtSDQsdCw0LfRiyDQvtCx0YrQtdC60YLQvtCyIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjgzCi1tc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCi1tc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0LHQsNC30Ysg0L7QsdGK0LXQutGC0L7QsiDQv9GA0Lgg0L/QvtC80L7RidC4IGZzY2siCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKLSJcbiIKLSJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzIHRoZSBkYXRhYmFzZS5cbiIKLSJcbiIKLSJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKLW1zZ3N0ciAi0K3RgtC+0YIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDRgdC10LnRh9Cw0YEg0YHQvtC00LXRgNC20LjRgiDQv9GA0LjQvNC10YDQvdC+ICVpINGB0LLQvtCx0L7QtNC90YvRhSDQvtCx0YrQtdC60YLQvtCyXG5cbtCU0LvRjyDQu9GD0YfRiNC10Lkg0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70YzQvdC+0YHRgtC4INGA0LXQutC+0LzQtdC90LTRg9C10YLRgdGPINGB0LbQsNGC0Ywg0LHQsNC30YMg0LTQsNC90L3Ri9GFLlxuXG7QodC20LDRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhSDRgdC10LnRh9Cw0YE/IgotCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0LTQsNGC0LAg0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuDogJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDo2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKLSJcbiIKLSIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKLSJcbiIKLSJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCB0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgdGhlIHNhbWUgc3RhdGUuIgotbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Lkg0L3QtSDQvtCx0L3QsNGA0YPQttC10L3Qvi5cblxu0LIgJXMg0L7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQuNC30LzQtdC90LXQvdC40Y8uXG5cbtCU0LDRgtCwINC40LfQvNC10L3QtdC90LjRjyDRhNCw0LnQu9CwINCx0YvQu9CwINC+0LHQvdC+0LLQu9C10L3QsCDQtNGA0YPQs9C+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LksINC90L4g0YHQvtC00LXRgNC20LjQvNC+0LUg0YTQsNC50LvQsCDQvtGB0YLQsNC70L7RgdGMINC/0YDQtdC20L3QuNC8LlxuXG7QodC10LnRh9Cw0YEg0LHRg9C00LXRgiDQt9Cw0L/Rg9GJ0LXQvdC+INC/0LXRgNC10YfQuNGC0YvQstCw0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8sINGH0YLQvtCx0Ysg0L3QsNC50YLQuCDQv9C+0LTQvtCx0L3Ri9C1INGE0LDQudC70YsuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTA0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgotbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINC40LfQvNC10L3QtdC90LjQuSAlc+KApiIKLQotIzogbGliL2RpZmYudGNsOjEyNQotbXNnaWQgIiIKLSJMT0NBTDogZGVsZXRlZFxuIgotIlJFTU9URTpcbiIKLW1zZ3N0ciAi0JvQntCa0JDQm9Cs0J3Qnjog0YPQtNCw0LvRkdC9XG7QktCd0JXQqNCd0JjQmTpcbiIKLQotIzogbGliL2RpZmYudGNsOjEzMAotbXNnaWQgIiIKLSJSRU1PVEU6IGRlbGV0ZWRcbiIKLSJMT0NBTDpcbiIKLW1zZ3N0ciAi0JLQndCV0KjQndCY0Jk6INGD0LTQsNC70ZHQvVxu0JvQntCa0JDQm9Cs0J3QnjpcbiIKLQotIzogbGliL2RpZmYudGNsOjEzNwotbXNnaWQgIkxPQ0FMOlxuIgotbXNnc3RyICLQm9Ce0JrQkNCb0KzQndCeOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTQwCi1tc2dpZCAiUkVNT1RFOlxuIgotbXNnc3RyICLQktCd0JXQqNCd0JjQmTpcbiIKLQotIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0L/QvtC60LDQt9Cw0YLRjCAlcyIKLQotIzogbGliL2RpZmYudGNsOjIwMwotbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0LPRgNGD0LfQutC4INGE0LDQudC70LA6IgotCi0jOiBsaWIvZGlmZi50Y2w6MjEwCi1tc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgotbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5IEdpdCAo0L/QvtC00L/RgNC+0LXQutGCKSIKLQotIzogbGliL2RpZmYudGNsOjIyMgotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAiKiDQlNCy0L7QuNGH0L3Ri9C5INGE0LDQudC7ICjRgdC+0LTQtdGA0LbQuNC80L7QtSDQvdC1INC/0L7QutCw0LfQsNC90L4pIgotCi0jOiBsaWIvZGlmZi50Y2w6MjI3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCi0iKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCi1tc2dzdHIgIiog0KDQsNC30LzQtdGAINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7Qs9C+INGE0LDQudC70LAgJWQg0LHQsNC50YIuXG4qINCf0L7QutCw0LfQsNC90L4g0L/QtdGA0LLRi9GFICVkINCx0LDQudGCLlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MjMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKLW1zZ3N0ciAiXG4qINCd0LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQuSDRhNCw0LnQuyDQvtCx0YDQtdC30LDQvTogJXMuXG4qINCn0YLQvtCx0Ysg0YPQstC40LTQtdGC0Ywg0LLQtdGB0Ywg0YTQsNC50LssINC40YHQv9C+0LvRjNC30YPQudGC0LUg0LLQvdC10YjQvdC40Lkg0YDQtdC00LDQutGC0L7RgC5cbiIKLQotIzogbGliL2RpZmYudGNsOjQ4MgotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40YHQutC70Y7Rh9C40YLRjCDQstGL0LHRgNCw0L3QvdGD0Y4g0YfQsNGB0YLRjC4iCi0KLSM6IGxpYi9kaWZmLnRjbDo0ODkKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0Ywg0LLRi9Cx0YDQsNC90L3Ri9C5INCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuS4iCi0KLSM6IGxpYi9kaWZmLnRjbDo1NjgKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0YDQsNC90L3Rg9GOINGB0YLRgNC+0LrRgy4iCi0KLSM6IGxpYi9kaWZmLnRjbDo1NzYKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0Ywg0LLRi9Cx0YDQsNC90L3Rg9GOINGB0YLRgNC+0LrRgy4iCi0KLSM6IGxpYi9lbmNvZGluZy50Y2w6NDQzCi1tc2dpZCAiRGVmYXVsdCIKLW1zZ3N0ciAi0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4iCi0KLSM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3lzdGVtICglcykiCi1tc2dzdHIgItCh0LjRgdGC0LXQvNC90LDRjyAoJXMpIgotCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQotbXNnaWQgIk90aGVyIgotbXNnc3RyICLQlNGA0YPQs9Cw0Y8iCi0KLSM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKLW1zZ2lkICJlcnJvciIKLW1zZ3N0ciAi0L7RiNC40LHQutCwIgotCi0jOiBsaWIvZXJyb3IudGNsOjM2Ci1tc2dpZCAid2FybmluZyIKLW1zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSIKLQotIzogbGliL2Vycm9yLnRjbDo5NAotbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCi1tc2dzdHIgItCf0LXRgNC10LQg0LrQvtC80LzQuNGC0L7QvCwg0LjRgdC/0YDQsNCy0YzRgtC1INCy0YvRiNC10YPQutCw0LfQsNC90L3Ri9C1INC+0YjQuNCx0LrQuC4iCi0KLSM6IGxpYi9pbmRleC50Y2w6NgotbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINC40L3QtNC10LrRgSIKLQotIzogbGliL2luZGV4LnRjbDoxNQotbXNnaWQgIkluZGV4IEVycm9yIgotbXNnc3RyICLQntGI0LjQsdC60LAg0LIg0LjQvdC00LXQutGB0LUiCi0KLSM6IGxpYi9pbmRleC50Y2w6MTcKLW1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC40L3QtNC10LrRgSBHaXQuINCh0L7RgdGC0L7Rj9C90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPINCx0YPQtNC10YIg0L/QtdGA0LXRh9C40YLQsNC90L4g0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguIgotCi0jOiBsaWIvaW5kZXgudGNsOjI4Ci1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgItCf0YDQvtC00L7Qu9C20LjRgtGMIgotCi0jOiBsaWIvaW5kZXgudGNsOjMxCi1tc2dpZCAiVW5sb2NrIEluZGV4IgotbXNnc3RyICLQoNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINC40L3QtNC10LrRgSIKLQotIzogbGliL2luZGV4LnRjbDoyODkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCi1tc2dzdHIgItCj0LTQsNC70LXQvdC40LUgJXMg0LjQtyDQuNC90LTQtdC60YHQsCIKLQotIzogbGliL2luZGV4LnRjbDozMjgKLW1zZ2lkICJSZWFkeSB0byBjb21taXQuIgotbXNnc3RyICLQk9C+0YLQvtCyINC00LvRjyDQutC+0LzQvNC40YLQsC4iCi0KLSM6IGxpYi9pbmRleC50Y2w6MzQxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nICVzIgotbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSAlc+KApiIKLQotIzogbGliL2luZGV4LnRjbDozOTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKLW1zZ3N0ciAi0J7QsdGA0LDRgtC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YTQsNC50LvQtSAlcz8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDAwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgotbXNnc3RyICLQntCx0YDQsNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiAlaSDRhNCw0LnQu9C1KC3QsNGFKT8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDA4Ci1tc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgotbXNnc3RyICLQm9GO0LHRi9C1INC90LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLCDQsdGD0LTRg9GCINC/0L7RgtC10YDRj9C90Ysg0L/RgNC4INC+0LHRgNCw0YnQtdC90LjQuCDQuNC30LzQtdC90LXQvdC40LkuIgotCi0jOiBsaWIvaW5kZXgudGNsOjQxMQotbXNnaWQgIkRvIE5vdGhpbmciCi1tc2dzdHIgItCd0LjRh9C10LPQviDQvdC1INC00LXQu9Cw0YLRjCIKLQotIzogbGliL2luZGV4LnRjbDo0MjkKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgItCe0LHRgNCw0YnQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LIg0LLRi9Cx0YDQsNC90L3Ri9GFINGE0LDQudC70LDRhSIKLQotIzogbGliL2luZGV4LnRjbDo0MzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgJXMiCi1tc2dzdHIgItCe0LHRgNCw0YnQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LIgJXMiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTMKLW1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INCy0YvQv9C+0LvQvdC40YLRjCDRgdC70LjRj9C90LjQtSDQstC+INCy0YDQtdC80Y8g0LjRgdC/0YDQsNCy0LvQtdC90LjRjy5cblxu0JfQsNCy0LXRgNGI0LjRgtC1INC40YHQv9GA0LDQstC70LXQvdC40LUg0LTQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LAg0L/QtdGA0LXQtCDQstGL0L/QvtC70L3QtdC90LjQtdC8INC+0L/QtdGA0LDRhtC40Lgg0YHQu9C40Y/QvdC40Y8uXG4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjcKLW1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBIHJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgotbXNnc3RyICLQn9C+0YHQu9C10LTQvdC10LUg0L/RgNC+0YfQuNGC0LDQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGC0LXQutGD0YnQtdC80YMuXG5cbtChINC80L7QvNC10L3RgtCwINC/0L7RgdC70LXQtNC90LXQuSDQv9GA0L7QstC10YDQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHRi9C7INC40LfQvNC10L3QtdC9INC00YDRg9Cz0L7QuSDQv9GA0L7Qs9GA0LDQvNC80L7QuSBHaXQuINCd0LXQvtCx0YXQvtC00LjQvNC+INC/0LXRgNC10YfQuNGC0LDRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40LksINC/0YDQtdC20LTQtSDRh9C10Lwg0YHQu9C40Y/QvdC40LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdC00LXQu9Cw0L3Qvi5cblxu0K3RgtC+INCx0YPQtNC10YIg0YHQtNC10LvQsNC90L4g0YHQtdC50YfQsNGBINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LlxuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgotIlxuIgotIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgbWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgotbXNnc3RyICLQn9GA0LXQtNGL0LTRg9GJ0LXQtSDRgdC70LjRj9C90LjQtSDQvdC1INC30LDQstC10YDRiNC10L3QviDQuNC3LdC30LAg0LrQvtC90YTQu9C40LrRgtCwLlxuXG7QlNC70Y8g0YTQsNC50LvQsCAlcyDQstC+0LfQvdC40Log0LrQvtC90YTQu9C40LrRgiDRgdC70LjRj9C90LjRjy5cblxu0KDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YIsINC00L7QsdCw0LLRjNGC0LUg0YTQsNC50Lsg0LIg0LjQvdC00LXQutGBINC4INC30LDQutC+0LzQvNC40YLRjNGC0LUuINCi0L7Qu9GM0LrQviDQv9C+0YHQu9C1INGN0YLQvtCz0L4g0LzQvtC20L3QviDQvdCw0YfQsNGC0Ywg0YHQu9C10LTRg9GO0YnQtdC1INGB0LvQuNGP0L3QuNC1LlxuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gd2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgotbXNnc3RyICLQktGLINC90LDRhdC+0LTQuNGC0LXRgdGMINCyINC/0YDQvtGG0LXRgdGB0LUg0LjQt9C80LXQvdC10L3QuNC5LlxuXG7QpNCw0LnQuyAlcyDQuNC30LzQtdC90ZHQvS5cblxu0JLRiyDQtNC+0LvQttC90Ysg0LfQsNCy0LXRgNGI0LjRgtGMINGC0LXQutGD0YnQuNC5INC60L7QvNC80LjRgiDQv9C10YDQtdC0INC90LDRh9Cw0LvQvtC8INGB0LvQuNGP0L3QuNGPLiDQkiDRgdC70YPRh9Cw0LUg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0LgsINGN0YLQviDQv9C+0LfQstC+0LvQuNGCINC/0YDQtdGA0LLQsNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDRgdC70LjRj9C90LjRjy5cbiIKLQotIzogbGliL21lcmdlLnRjbDoxMDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBvZiAlcyIKLW1zZ3N0ciAiJXMg0LjQtyAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKLW1zZ3N0ciAi0KHQu9C40Y/QvdC40LUgJXMg0LggJXPigKYiCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTMxCi1tc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCi1tc2dzdHIgItCh0LvQuNGP0L3QuNC1INGD0YHQv9C10YjQvdC+INC30LDQstC10YDRiNC10L3Qvi4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTMzCi1tc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCy0LXRgNGI0LjRgtGMINGB0LvQuNGP0L3QuNC1LiDQotGA0LXQsdGD0LXRgtGB0Y8g0YDQsNC30YDQtdGI0LXQvdC40LUg0LrQvtC90YTQu9C40LrRgtCwLiIKLQotIzogbGliL21lcmdlLnRjbDoxNTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBJbnRvICVzIgotbXNnc3RyICLQodC70LjRj9C90LjQtSDRgSAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxNzcKLW1zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKLW1zZ3N0ciAi0JLQtdGA0YHQuNGPLCDRgSDQutC+0YLQvtGA0L7QuSDQv9GA0L7QstC10YHRgtC4INGB0LvQuNGP0L3QuNC1IgotCi0jOiBsaWIvbWVyZ2UudGNsOjIxMgotbXNnaWQgIiIKLSJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCi0iXG4iCi0iWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9GA0LXRgNCy0LDRgtGMINC40YHQv9GA0LDQstC70LXQvdC40LUuXG5cbtCX0LDQstC10YDRiNC40YLQtSDRgtC10LrRg9GJ0LXQtSDQuNGB0L/RgNCw0LLQu9C10L3QuNC1INC60L7QvNC80LjRgtCwLlxuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjIyMgotbXNnaWQgIiIKLSJBYm9ydCBtZXJnZT9cbiIKLSJcbiIKLSJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKLSJcbiIKLSJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKLW1zZ3N0ciAi0J/RgNC10YDQstCw0YLRjCDQvtC/0LXRgNCw0YbQuNGOINGB0LvQuNGP0L3QuNGPP1xuXG7Qn9GA0LXRgNGL0LLQsNC90LjQtSDRgtC10LrRg9GJ0LXQs9C+INGB0LvQuNGP0L3QuNGPINC/0YDQuNCy0LXQtNC10YIg0Log0L/QvtGC0LXRgNC1ICrQktCh0JXQpSog0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5LlxuXG7Qn9GA0L7QtNC+0LvQttC40YLRjD8iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjI4Ci1tc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCi0iXG4iCi0iUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgotbXNnc3RyICLQodCx0YDQvtGB0LjRgtGMINC40LfQvNC10L3QtdC90LjRjz9cblxu0KHQsdGA0L7RgSDQuNC30LzQtdC90LXQvdC40Lkg0L/RgNC40LLQtdC00LXRgiDQuiDQv9C+0YLQtdGA0LUgKtCS0KHQldClKiDQvdC10YHQvtGF0YDQsNC90LXQvdC90YvRhSDQuNC30LzQtdC90LXQvdC40LkuXG5cbtCf0YDQvtC00L7Qu9C20LjRgtGMPyIKLQotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJBYm9ydGluZyIKLW1zZ3N0ciAi0J/RgNC10YDRi9Cy0LDRjiIKLQotIzogbGliL21lcmdlLnRjbDoyMzkKLW1zZ2lkICJmaWxlcyByZXNldCIKLW1zZ3N0ciAi0LjQt9C80LXQvdC10L3QuNGPINCyINGE0LDQudC70LDRhSDQvtGC0LzQtdC90LXQvdGLIgotCi0jOiBsaWIvbWVyZ2UudGNsOjI2NwotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgItCf0YDQtdGA0LLQsNGC0Ywg0L3QtSDRg9C00LDQu9C+0YHRjC4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MjY5Ci1tc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgotbXNnc3RyICLQn9GA0LXRgNCy0LDQvdC+LiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6OAotbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCi1tc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQsdCw0LfQvtCy0YPRjiDQstC10YDRgdC40Y4g0LTQu9GPINGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQsD8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjkKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKLW1zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0LXRgNGB0LjRjiDQuNC3INGN0YLQvtC5INCy0LXRgtC60Lgg0LTQu9GPINGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQsD8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCi1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKLW1zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0LXRgNGB0LjRjiDQuNC3INC00YDRg9Cz0L7QuSDQstC10YLQutC4INC00LvRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0LA/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgotIlxuIgotIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCi0iXG4iCi0iVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKLW1zZ3N0ciAi0JLQvdC40LzQsNC90LjQtSEg0KHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQv9C+0LrQsNC30YvQstCw0LXRgiDRgtC+0LvRjNC60L4g0LrQvtC90YTQu9C40LrRgtGD0Y7RidC40LUg0L7RgtC70LjRh9C40Y8uXG5cbiVzINCx0YPQtNC10YIg0L/QtdGA0LXQv9C40YHQsNC9LlxuXG7QrdGC0L4g0LTQtdC50YHRgtCy0LjQtSDQvNC+0LbQvdC+INC+0YLQvNC10L3QuNGC0Ywg0YLQvtC70YzQutC+INC/0LXRgNC10LfQsNC/0YPRgdC60L7QvCDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPLiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKLW1zZ3N0ciAi0J/QvtGF0L7QttC1LCDRh9GC0L4g0YTQsNC50LsgJXMg0YHQvtC00LXRgNC20LjRgiDQvdC10YDQsNC30YDQtdGI0LXQvdC90YvQtSDQutC+0L3RhNC70LjQutGC0YsuINCf0YDQvtC00L7Qu9C20LjRgtGMINC40L3QtNC10LrRgdCw0YbQuNGOPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6NjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCi1tc2dzdHIgItCU0L7QsdCw0LLQu9GP0Y4g0YDQtdC30YPQu9GM0YLQsNGCINGA0LDQt9GA0LXRiNC10L3QuNGPINC00LvRjyAlcyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTQxCi1tc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgotbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0YHQu9C40Y/QvdC40Y8g0L3QtSDQvtCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0LrQvtC90YTQu9C40LrRgtGLINGBINGD0LTQsNC70LXQvdC40LXQvCDQuNC70Lgg0YPRh9Cw0YHRgtC40LXQvCDRgdGB0YvQu9C+0LoiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgotbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCi1tc2dzdHIgItCa0L7QvdGE0LvQuNC60YLRg9GO0YnQuNC5INGE0LDQudC7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgotbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC/0YDQvtCz0YDQsNC80LzQvtC5INGB0LvQuNGP0L3QuNGPIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCi1tc2dzdHIgItCd0LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzQsNGPINC/0YDQvtCz0YDQsNC80LzQsCDRgdC70LjRj9C90LjRjyDCqyVzwrsiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMwMwotbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgotbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0YHQu9C40Y/QvdC40Y8g0YPQttC1INGA0LDQsdC+0YLQsNC10YIuINCf0YDQtdGA0LLQsNGC0Yw/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKLSIlcyIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDQstC10YDRgdC40Lk6XG4lcyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MzQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKLSJcbiIKLSIlcyIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9GD0YHQutCwINC/0YDQvtCz0YDQsNC80LzRiyDRgdC70LjRj9C90LjRjzpcblxuJXMiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM0NwotbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKLW1zZ3N0ciAi0JfQsNC/0YPRgdC6INC/0YDQvtCz0YDQsNC80LzRiyDRgdC70LjRj9C90LjRj+KApiIKLQotIzogbGliL21lcmdldG9vbC50Y2w6Mzc1IGxpYi9tZXJnZXRvb2wudGNsOjM4MwotbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC/0YDQvtCz0YDQsNC80LzRiyDRgdC70LjRj9C90LjRjy4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKLW1zZ3N0ciAi0J3QtdCy0LXRgNC90LDRjyDQs9C70L7QsdCw0LvRjNC90LDRjyDQutC+0LTQuNGA0L7QstC60LAgwqslc8K7IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgotbXNnc3RyICLQndC10LLQtdGA0L3QsNGPINC60L7QtNC40YDQvtCy0LrQsCDRgNC10L/QvtC30LjRgtC+0YDQuNGPIMKrJXPCuyIKLQotIzogbGliL29wdGlvbi50Y2w6MTE3Ci1tc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKLW1zZ3N0ciAi0JLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiIKLQotIzogbGliL29wdGlvbi50Y2w6MTIxCi1tc2dpZCAiU2F2ZSIKLW1zZ3N0ciAi0KHQvtGF0YDQsNC90LjRgtGMIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyBSZXBvc2l0b3J5IgotbXNnc3RyICLQlNC70Y8g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyAlcyIKLQotIzogbGliL29wdGlvbi50Y2w6MTMyCi1tc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKLW1zZ3N0ciAi0J7QsdGJ0LjQtSAo0LTQu9GPINCy0YHQtdGFINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQsikiCi0KLSM6IGxpYi9vcHRpb24udGNsOjEzOAotbXNnaWQgIlVzZXIgTmFtZSIKLW1zZ3N0ciAi0JjQvNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIKLQotIzogbGliL29wdGlvbi50Y2w6MTM5Ci1tc2dpZCAiRW1haWwgQWRkcmVzcyIKLW1zZ3N0ciAi0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YsiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MQotbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgotbXNnc3RyICLQodGD0LzQvNCw0YDQvdC+0LUg0YHQvtC+0LHRidC10L3QuNC1INC/0YDQuCDRgdC70LjRj9C90LjQuCIKLQotIzogbGliL29wdGlvbi50Y2w6MTQyCi1tc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgotbXNnc3RyICLQo9GA0L7QstC10L3RjCDQtNC10YLQsNC70YzQvdC+0YHRgtC4INGB0L7QvtCx0YnQtdC90LjQuSDQv9GA0Lgg0YHQu9C40Y/QvdC40LgiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MwotbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0L7RgtGH0LXRgiDQvtCxINC40LfQvNC10L3QtdC90LjRj9GFINC/0L7RgdC70LUg0YHQu9C40Y/QvdC40Y8iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NAotbXNnaWQgIlVzZSBNZXJnZSBUb29sIgotbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LTQu9GPINGB0LvQuNGP0L3QuNGPINC/0YDQvtCz0YDQsNC80LzRgyIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ2Ci1tc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKLW1zZ3N0ciAi0JTQvtCy0LXRgNGP0YLRjCDQstGA0LXQvNC10L3QuCDQvNC+0LTQuNGE0LjQutCw0YbQuNC4INGE0LDQudC70LAiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NwotbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKLW1zZ3N0ciAi0KfQuNGB0YLQutCwINC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINCy0LXRgtC+0Log0L/RgNC4INC40LfQstC70LXRh9C10L3QuNC4INC40LfQvNC10L3QtdC90LjQuSIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ4Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCi1tc2dzdHIgItCi0LDQutC+0LUg0LbQtSDQuNC80Y8sINC60LDQuiDQuCDRgyDQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7QuSDQstC10YLQutC4IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDkKLW1zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKLW1zZ3N0ciAi0J/QvtC40YHQuiDQutC+0L/QuNC5INGC0L7Qu9GM0LrQviDQsiDQuNC30LzQtdC90ZHQvdC90YvRhSDRhNCw0LnQu9Cw0YUiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MAotbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgotbXNnc3RyICLQnNC40L3QuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGB0LjQvNCy0L7Qu9C+0LIg0LTQu9GPINC/0L7QuNGB0LrQsCDQutC+0L/QuNC5IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTEKLW1zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKLW1zZ3N0ciAi0KDQsNC00LjRg9GBINC40YHRgtC+0YDQuNGH0LXRgdC60L7Qs9C+INC60L7QvdGC0LXQutGB0YLQsCAo0LIg0LTQvdGP0YUpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTIKLW1zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgotbXNnc3RyICLQp9C40YHQu9C+INGB0YLRgNC+0Log0LIg0LrQvtC90YLQtdC60YHRgtC1IGRpZmYiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MwotbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCi1tc2dzdHIgItCo0LjRgNC40L3QsCDRgtC10LrRgdGC0LAg0YHQvtC+0LHRidC10L3QuNGPINC60L7QvNC80LjRgtCwIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTQKLW1zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCi1tc2dzdHIgItCo0LDQsdC70L7QvSDQtNC70Y8g0LjQvNC10L3QuCDQvdC+0LLQvtC5INCy0LXRgtC60LgiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NQotbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKLW1zZ3N0ciAi0JrQvtC00LjRgNC+0LLQutCwINGB0L7QtNC10YDQttCw0L3QuNGPINGE0LDQudC70LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjIwMwotbXNnaWQgIkNoYW5nZSIKLW1zZ3N0ciAi0JjQt9C80LXQvdC40YLRjCIKLQotIzogbGliL29wdGlvbi50Y2w6MjMwCi1tc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCi1tc2dzdHIgItCh0LvQvtCy0LDRgNGMINC00LvRjyDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjzoiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI1NAotbXNnaWQgIkNoYW5nZSBGb250IgotbXNnc3RyICLQmNC30LzQtdC90LjRgtGMIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDaG9vc2UgJXMiCi1tc2dzdHIgItCS0YvQsdC10YDQuNGC0LUgJXMiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI2NAotbXNnaWQgInB0LiIKLW1zZ3N0ciAicHQuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNzgKLW1zZ2lkICJQcmVmZXJlbmNlcyIKLW1zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgotCi0jOiBsaWIvb3B0aW9uLnRjbDozMTQKLW1zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9C90L7RgdGC0YzRjiDRgdC+0YXRgNCw0L3QuNGC0Ywg0L3QsNGB0YLRgNC+0LnQutC4OiIKLQotIzogbGliL3JlbW90ZS50Y2w6MTYzCi1tc2dpZCAiUmVtb3ZlIFJlbW90ZSIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0YHRgdGL0LvQutGDINC90LAg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKLQotIzogbGliL3JlbW90ZS50Y2w6MTY4Ci1tc2dpZCAiUHJ1bmUgZnJvbSIKLW1zZ3N0ciAi0KfQuNGB0YLQutCwIgotCi0jOiBsaWIvcmVtb3RlLnRjbDoxNzMKLW1zZ2lkICJGZXRjaCBmcm9tIgotbXNnc3RyICLQmNC30LLQu9C10YfQtdC90LjQtSDQuNC3IgotCi0jOiBsaWIvcmVtb3RlLnRjbDoyMTUKLW1zZ2lkICJQdXNoIHRvIgotbXNnc3RyICLQntGC0L/RgNCw0LLQuNGC0YwiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxOQotbXNnaWQgIkFkZCBSZW1vdGUiCi1tc2dzdHIgItCX0LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDRgtGMINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAotbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgotbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgotbXNnaWQgIkFkZCIKLW1zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjM3Ci1tc2dpZCAiUmVtb3RlIERldGFpbHMiCi1tc2dzdHIgItCY0L3RhNC+0YDQvNCw0YbQuNGPINC+INCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAotbXNnaWQgIkxvY2F0aW9uOiIKLW1zZ3N0ciAi0J/QvtC70L7QttC10L3QuNC1OiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYyCi1tc2dpZCAiRnVydGhlciBBY3Rpb24iCi1tc2dzdHIgItCh0LvQtdC00YPRjtGJ0LDRjyDQvtC/0LXRgNCw0YbQuNGPIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKLW1zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKLW1zZ3N0ciAi0KHRgNCw0LfRgyDQuNC30LLQu9C10YfRjCDQuNC30LzQtdC90LXQvdC40Y8iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3MQotbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCi1tc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0Lgg0L7RgtC/0YDQsNCy0LjRgtGMIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKLW1zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgotbXNnc3RyICLQkdC+0LvRjNGI0LUg0L3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDRgtGMIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAxCi1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKLW1zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0L3QsNC30LLQsNC90LjQtSDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OCBidWlsdGluL3JlbW90ZS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgogbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00L7Qv9GD0YHRgtC40LzRi9C8INC40LzQtdC90LXQvCDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgogCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMIMKrJXPCuyDQuNC3IMKrJXPCuy4gIgorIzogYnVpbHRpbi9yZW1vdGUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDRgdGC0YDQvtC40YLRjCDQvNCw0YHRgtC10YAg0LLQtdGC0LrRgyDCqyVzwrsiCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMgbGliL3RyYW5zcG9ydC50Y2w6NgotIywgdGNsLWZvcm1hdAotbXNnaWQgImZldGNoICVzIgotbXNnc3RyICLQuNC30LLQu9C10YfQtdC90LjQtSAlcyIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40LfQstC70LXRh9GMINC60LDRgNGC0YMg0LTQu9GPINGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNCwINGB0YHRi9C70LrQuCAlcyIKIAotIzogbGliL3JlbW90ZV9hZGQudGNsOjEzNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKLW1zZ3N0ciAi0JjQt9Cy0LvQtdGH0LXQvdC40LUgJXMiCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MyBidWlsdGluL3JlbW90ZS5jOjQ1MQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIijRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidCw0Y8pIgogCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQsiDCqyVzwrsuIgorIzogYnVpbHRpbi9yZW1vdGUuYzo0NTUKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKNGD0LTQsNC70LXQvdC90LDRjykiCiAKLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKLSM6IGxpYi90cmFuc3BvcnQudGNsOjgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicHVzaCAlcyIKLW1zZ3N0ciAi0L7RgtC/0YDQsNCy0LjRgtGMICVzIgorIzogYnVpbHRpbi9yZW1vdGUuYzo2MjkgYnVpbHRpbi9yZW1vdGUuYzo3NjUgYnVpbHRpbi9yZW1vdGUuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICclcyciCittc2dzdHIgIiIKIAotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCi1tc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQsCAlcyAo0LIgJXMpIgorIzogYnVpbHRpbi9yZW1vdGUuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0Ywg0YHQtdC60YbQuNGOINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDRgSDCqyVzwrsg0L3QsCDCqyVzwrsiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAotbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCi1tc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0LLQtdGC0LrQuCDQstC+INCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKLW1zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCi1tc2dzdHIgItCY0Lcg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICLQstC90LXRiNC90LjQuToiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTQ5Ci1tc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKLW1zZ3N0ciAi0KPQutCw0LfQsNC90L3QvtC1INC/0L7Qu9C+0LbQtdC90LjQtToiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODQKLW1zZ2lkICJCcmFuY2hlcyIKLW1zZ3N0ciAi0JLQtdGC0LrQuCIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKLW1zZ2lkICJEZWxldGUgT25seSBJZiIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0YLQvtC70YzQutC+INCyINGB0LvRg9GH0LDQtSwg0LXRgdC70LgiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTExCi1tc2dpZCAiTWVyZ2VkIEludG86IgotbXNnc3RyICLQodC70LjRj9C90LjQtSDRgToiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCi1tc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgotbXNnc3RyICLQlNC70Y8g0L7Qv9C10YDQsNGG0LjQuCDCq9Ch0LvQuNGP0L3QuNC1INGBwrsg0YLRgNC10LHRg9C10YLRgdGPINGD0LrQsNC30LDRgtGMINCy0LXRgtC60YMuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9yZW1vdGUuYzo2NjYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgotIlxuIgotIiAtICVzIgotbXNnc3RyICLQodC70LXQtNGD0Y7RidC40LUg0LLQtdGC0LrQuCDQvNC+0LPRg9GCINCx0YvRgtGMINC+0LHRitC10LTQuNC90LXQvdGLINGBICVzINC/0YDQuCDQv9C+0LzQvtGJ0Lgg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjzpcblxuIC0gJXMiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgItCd0LUg0L7QsdC90L7QstC70Y/RjiDQvdC10YHRgtCw0L3QtNCw0YDRgtC90YPRjiDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAg0YHRgdGL0LvQutC4INC00LvRjyDQuNC30LLQu9C10YfQtdC90LjRj1xuXHQlc1xuXHTQn9C+0LbQsNC70YPQudGB0YLQsCwg0LXRgdC70Lgg0YLRgNC10LHRg9C10YLRgdGPLCDQvtCx0L3QvtCy0LjRgtC1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjRjiDQstGA0YPRh9C90YPRji4iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3JlbW90ZS5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDIKIG1zZ2lkICIiCi0iT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCi0ibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCi1tc2dzdHIgItCd0LXQutC+0YLQvtGA0YvQtSDRgtC10YHRgtGLINC90LAg0YHQu9C40Y/QvdC40LUg0L3QtSDQv9GA0L7RiNC70LgsINC/0L7RgtC+0LzRgyDRh9GC0L4g0LLRiyDQvdC1INC40LfQstC70LXQutC70Lgg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSDQutC+0LzQvNC40YLRiy4g0J/QvtC/0YvRgtCw0LnRgtC10YHRjCDQuNC30LLQu9C10YfRjCDQuNGFINC40LcgJXMuIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gItCf0YDQuNC80LXRh9Cw0L3QuNC1OiDQndC10LrQvtGC0L7RgNGL0LUg0LLQtdGC0LrQuCDQstC90LUg0LjQtdGA0LDRgNGF0LjQuCByZWZzL3JlbW90ZXMvINC90LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3RiztcbtGH0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0Ywg0LjRhSwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtToiCittc2dzdHJbMV0gItCf0YDQuNC80LXRh9Cw0L3QuNC1OiDQndC10LrQvtGC0L7RgNGL0LUg0LLQtdGC0LrQuCDQstC90LUg0LjQtdGA0LDRgNGF0LjQuCByZWZzL3JlbW90ZXMvINC90LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3RiztcbtGH0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0Ywg0LjRhSwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtToiCittc2dzdHJbMl0gItCf0YDQuNC80LXRh9Cw0L3QuNC1OiDQndC10LrQvtGC0L7RgNGL0LUg0LLQtdGC0LrQuCDQstC90LUg0LjQtdGA0LDRgNGF0LjQuCByZWZzL3JlbW90ZXMvINC90LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3RiztcbtGH0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0Ywg0LjRhSwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtToiCittc2dzdHJbM10gItCf0YDQuNC80LXRh9Cw0L3QuNC1OiDQndC10LrQvtGC0L7RgNGL0LUg0LLQtdGC0LrQuCDQstC90LUg0LjQtdGA0LDRgNGF0LjQuCByZWZzL3JlbW90ZXMvINC90LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3RiztcbtGH0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0Ywg0LjRhSwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtToiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA3Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgotbXNnc3RyICLQo9C60LDQttC40YLQtSDQvtC00L3RgyDQuNC70Lgg0L3QtdGB0LrQvtC70YzQutC+INCy0LXRgtC+0Log0LTQu9GPINGD0LTQsNC70LXQvdC40Y8uIgorIzogYnVpbHRpbi9yZW1vdGUuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINGB0LXQutGG0LjRjiDRhNCw0LnQu9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDCqyVzwrsiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKLW1zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQstC10YLQvtC6INC40LcgJXMiCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiDQvdC+0LLQsNGPICjRgdC70LXQtNGD0Y7RidC10LUg0LjQt9Cy0LvQtdGH0LXQvdC40LUg0YHQvtGF0YDQsNC90LjRgiDQtdC1INCyIHJlbW90ZXMvJXMpIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgotbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgotbXNnc3RyICLQndC1INGD0LrQsNC30LDQvSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIwCittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDQvtGC0YHQu9C10LbQuNCy0LDQtdGC0YHRjyIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTY2FubmluZyAlcy4uLiIKLW1zZ3N0ciAi0J/QtdGA0LXRh9C40YLRi9Cy0LDQvdC40LUgJXPigKYiCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMgorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIg0L3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdCwICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlbW90ZSBwcnVuZcK7LCDRh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMKSIKIAotIzogbGliL3NlYXJjaC50Y2w6MjEKLW1zZ2lkICJGaW5kOiIKLW1zZ3N0ciAi0J/QvtC40YHQujoiCisjOiBidWlsdGluL3JlbW90ZS5jOjkyNAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCiAKLSM6IGxpYi9zZWFyY2gudGNsOjIzCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAi0JTQsNC70YzRiNC1IgorIzogYnVpbHRpbi9yZW1vdGUuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgCDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggYnJhbmNoLiVzLm1lcmdlOyDQvdC10LLQvtC30LzQvtC20L3QviDQv9C10YDQtdC80LXRgdGC0LjRgtGMINCx0L7Qu9C10LUg0YfQtdC8INC90LDQtCAxINCy0LXRgtC60L7QuSIKIAotIzogbGliL3NlYXJjaC50Y2w6MjQKLW1zZ2lkICJQcmV2IgotbXNnc3RyICLQntCx0YDQsNGC0L3QviIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi0L/QtdGA0LXQvNC10YnQsNC10YLRgdGPINC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQvdCw0LQg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQvtC5ICVzIgogCi0jOiBsaWIvc2VhcmNoLnRjbDoyNQotbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgotbXNnc3RyICLQmNCz0L0uINCx0L7Qu9GM0YjQuNC1L9C80LDQu9C10L3RjNC60LjQtSIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSAod2l0aCBtZXJnZXMpIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICIiCiAKLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgotbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC30LDQv9C40YHQsNGC0Ywg0YHRgdGL0LvQutGDOiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgItC/0LXRgNC10LzQtdGJ0LDQtdGC0YHRjyDQvdCw0LQg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQvtC5ICVzIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjEzNwotbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKLW1zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LfQsNC/0LjRgdCw0YLRjCDQt9C90LDRh9C+0Lo6IgorIzogYnVpbHRpbi9yZW1vdGUuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiINCx0YPQtNC10YIg0YHQu9C40YLQsCDRgSDQstC90LXRiNC90LXQuSDQstC10YLQutC+0LkgJXMiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NwotbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgItCd0LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzQsNGPINC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAi0LHRg9C00LXRgiDRgdC70LjRgtCwINGBINCy0L3QtdGI0L3QtdC5INCy0LXRgtC60L7QuSAlcyIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Ci1tc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCi1tc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPINC90LUg0LTQvtGB0YLRg9C/0L3QsCIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAg0Lgg0YEg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQvtC5ICVzXG4iCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAotbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ysg0L/RgNC+0LLQtdGA0LrQuCDQv9GA0LDQstC+0L/QuNGB0LDQvdC40Y8iCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzIKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgItGB0L7Qt9C00LDQvdCwIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgItCh0LvQvtCy0LDRgNGMINCy0LXRgNC90YPRgiDQuiAlcy4iCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzUKK21zZ2lkICJkZWxldGUiCittc2dzdHIgItGD0LTQsNC70LXQvdCwIgogCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLW1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0LLQtdGA0LrQuCDQv9GA0LDQstC+0L/QuNGB0LDQvdC40Y8g0L3QtSDRgdC80L7Qs9C70LAg0LfQsNC/0YPRgdGC0LjRgtGM0YHRjyIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzOQorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgItGD0LbQtSDQsNC60YLRg9Cw0LvRjNC90LAiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICLQndC10YDQsNGB0L/QvtC30L3QsNC90L3QsNGPINC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MgorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgItCy0L7Qt9C80L7QttC90LAg0L/QtdGA0LXQvNC+0YLQutCwINCy0L/QtdGA0LXQtCIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICLQmNGB0L/RgNCw0LLQu9C10L3QuNC5INC90LUg0L3QsNC50LTQtdC90L4iCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDUKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAi0LvQvtC60LDQu9GM0L3QsNGPINCy0LXRgtC60LAg0YPRgdGC0LDRgNC10LvQsCIKIAotIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAotbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPINC/0YDQtdGA0LLQsNC70LAg0L/QtdGA0LXQtNCw0YfRgyDQtNCw0L3QvdGL0YUiCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg0LHRg9C00LXRgiDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQvtGC0L/RgNCw0LLQu9C10L3QsCDQsiAlLSpzICglcykiCiAKLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKLW1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzINCx0YPQtNC10YIg0L7RgtC/0YDQsNCy0LvQtdC90LAg0LIgJS0qcyAoJXMpIgogCi0jOiBsaWIvc3Noa2V5LnRjbDozMQotbXNnaWQgIk5vIGtleXMgZm91bmQuIgotbXNnc3RyICLQmtC70Y7RhyDQvdC1INC90LDQudC00LXQvSIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzINCx0YPQtNC10YIg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0L7RgtC/0YDQsNCy0LvQtdC90LAg0LIgJXMiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjM0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKLW1zZ3N0ciAi0J/Rg9Cx0LvQuNGH0L3Ri9C5INC60LvRjtGHINC40LcgJXMiCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDQsdGD0LTQtdGCINC+0YLQv9GA0LDQstC70LXQvdCwINCyICVzIgogCi0jOiBsaWIvc3Noa2V5LnRjbDo0MAotbXNnaWQgIkdlbmVyYXRlIEtleSIKLW1zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0LrQu9GO0YciCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzAKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAi0L3QtSDQvtC/0YDQsNGI0LjQstCw0YLRjCDQstC90LXRiNC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgogCi0jOiBsaWIvc3Noa2V5LnRjbDo1NgotbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgotbXNnc3RyICLQodC60L7Qv9C40YDQvtCy0LDRgtGMINCyINCx0YPRhNC10YAg0L7QsdC80LXQvdCwIgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgJXMiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjcwCi1tc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCi1tc2dzdHIgItCS0LDRiCDQv9GD0LHQu9C40YfQvdGL0Lkg0LrQu9GO0YcgT3BlblNTSCIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMINC00LvRjyDQuNC30LLQu9C10YfQtdC90LjRjzogJXMiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjc4Ci1tc2dpZCAiR2VuZXJhdGluZy4uLiIKLW1zZ3N0ciAi0KHQvtC30LTQsNC90LjQteKApiIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1OSBidWlsdGluL3JlbW90ZS5jOjExNzUgYnVpbHRpbi9yZW1vdGUuYzoxMzE0Cittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIijQvdC10YIgVVJMKSIKIAotIzogbGliL3NzaGtleS50Y2w6ODQKLSMsIHRjbC1mb3JtYXQKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTczIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgICBVUkwg0LTQu9GPINC+0YLQv9GA0LDQstC60Lg6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzcgYnVpbHRpbi9yZW1vdGUuYzoxMTc5IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBIRUFEINCy0LXRgtC60LA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzcKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIo0L3QtSDQt9Cw0L/RgNCw0YjQuNCy0LDQu9GB0Y8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzkKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIijQvdC10LjQt9Cy0LXRgdGC0L3QvikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MworIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiAgSEVBRCDQstC10YLQutCwIChIRUFEINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQvdC10L7QtNC90L7Qt9C90LDRh9C90YvQuSwg0LzQvtC20LXRgiDQsdGL0YLRjCDQvtC00L3QuNC8INC40LcpOlxuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICDQktC90LXRiNC90Y/RjyDQstC10YLQutCwOiVzIgorbXNnc3RyWzFdICIgINCS0L3QtdGI0L3QuNC1INCy0LXRgtC60Lg6JXMiCittc2dzdHJbMl0gIiAg0JLQvdC10YjQvdC40LUg0LLQtdGC0LrQuDolcyIKK21zZ3N0clszXSAiICDQktC90LXRiNC90LjQtSDQstC10YLQutC4OiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTggYnVpbHRpbi9yZW1vdGUuYzoxMjI0Cittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKNGB0YLQsNGC0YPRgSDQvdC1INC30LDQv9GA0LDRiNC40LLQsNC70YHRjykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNworbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgINCb0L7QutCw0LvRjNC90LDRjyDQstC10YLQutCwLCDQvdCw0YHRgtGA0L7QtdC90L3QsNGPINC00LvRjyDCq2dpdCBwdWxswrs6IgorbXNnc3RyWzFdICIgINCb0L7QutCw0LvRjNC90YvQtSDQstC10YLQutC4LCDQvdCw0YHRgtGA0L7QtdC90L3Ri9C1INC00LvRjyDCq2dpdCBwdWxswrs6IgorbXNnc3RyWzJdICIgINCb0L7QutCw0LvRjNC90YvQtSDQstC10YLQutC4LCDQvdCw0YHRgtGA0L7QtdC90L3Ri9C1INC00LvRjyDCq2dpdCBwdWxswrs6IgorbXNnc3RyWzNdICIgINCb0L7QutCw0LvRjNC90YvQtSDQstC10YLQutC4LCDQvdCw0YHRgtGA0L7QtdC90L3Ri9C1INC00LvRjyDCq2dpdCBwdWxswrs6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTUKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIg0JvQvtC60LDQu9GM0L3Ri9C1INGB0YHRi9C70LrQuCwg0LfQtdGA0LrQsNC70LjRgNGD0LXQvNGL0LUg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcHVzaMK7IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAg0JvQvtC60LDQu9GM0L3QsNGPINGB0YHRi9C70LrQsCwg0L3QsNGB0YLRgNC+0LXQvdC90LDRjyDQtNC70Y8gwqtnaXQgcHVzaMK7JXM6IgorbXNnc3RyWzFdICIgINCb0L7QutCw0LvRjNC90YvQtSDRgdGB0YvQu9C60LgsINC90LDRgdGC0YDQvtC10L3QvdGL0LUg0LTQu9GPIMKrZ2l0IHB1c2jCuyVzOiIKK21zZ3N0clsyXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0YHRgdGL0LvQutC4LCDQvdCw0YHRgtGA0L7QtdC90L3Ri9C1INC00LvRjyDCq2dpdCBwdXNowrslczoiCittc2dzdHJbM10gIiAg0JvQvtC60LDQu9GM0L3Ri9C1INGB0YHRi9C70LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVzaMK7JXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDIKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMIHJlZnMvcmVtb3Rlcy880LjQvNGPPi9IRUFEINCyINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0NAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgItGD0LTQsNC70LjRgtGMIHJlZnMvcmVtb3Rlcy880LjQvNGPPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTkKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0L/RgNC10LTQtdC70LjRgtGMINCy0L3QtdGI0L3QuNC5IEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI2MQorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICLQndC10YHQutC+0LvRjNC60L4g0LLQvdC10YjQvdC40YUgSEVBRCDQstC10YLQvtC6LiDQo9C60LDQttC40YLQtSDRj9Cy0L3QviDQvtC00L3RgyDQuNC3INC90LjRhToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzQsNGPINGB0YHRi9C70LrQsDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNGB0YLRgNC+0LjRgtGMICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzINCx0YPQtNC10YIg0LLQuNGB0Y/RidC10Lkg0LLQtdGC0LrQvtC5ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzINGB0YLQsNC70LAg0LLQuNGB0Y/RidC10Lkg0LLQtdGC0LrQvtC5ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgItCe0YfQuNGB0YLQutCwICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFvQsdGD0LTQtdGCINGD0LTQsNC70LXQvdCwXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBb0YPQtNCw0LvQtdC90LBdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzUKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLQv9C+0YfQuNGB0YLQuNGC0Ywg0LLQvdC10YjQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCDQv9C+0YHQu9C1INC40LfQstC70LXRh9C10L3QuNGPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzggYnVpbHRpbi9yZW1vdGUuYzoxNDkyIGJ1aWx0aW4vcmVtb3RlLmM6MTU2MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICLQndC10YIg0YLQsNC60L7Qs9C+INCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1NAorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDYxCittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAi0L3QtSDRg9C60LDQt9Cw0L0g0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDc4Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgItC30LDQv9GA0L7RgdC40YLRjCBVUkwg0L7RgtC/0YDQsNCy0LrQuCwg0LLQvNC10YHRgtC+IFVSTCDQuNC30LLQu9C10YfQtdC90LjRjyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDgwCittc2dpZCAicmV0dXJuIGFsbCBVUkxzIgorbXNnc3RyICLQstC10YDQvdGD0YLRjCDQstGB0LUgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIKK21zZ3N0ciAiVVJMINC90LUg0L3QsNGB0YLRgNC+0LXQvdGLINC00LvRjyDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gwqslc8K7IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzQKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAi0YPQv9GA0LDQstC70LXQvdC40LUgVVJMINC+0YLQv9GA0LDQstC60LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNgorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0YwgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzgKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0YwgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDUKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBIC0tZGVsZXRlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YjQsNCx0LvQvtC9INGB0YLQsNGA0L7Qs9C+IFVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgItCd0LUg0L3QsNC50LTQtdC90Ysg0YHQvtCy0L/QsNC00LXQvdC40Y8gVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTk0Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICLQndC10LvRjNC30Y8g0YPQtNCw0LvQuNGC0Ywg0LLRgdC1IFVSTCDQvdC1LdC+0YLQv9GA0LDQstC60LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxMAorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgItCx0YvRgtGMINC80L3QvtCz0L7RgdC70L7QstC90LXQtTsg0LTQvtC70LbQvdC+INGB0YLQvtGP0YLRjCDQv9C10YDQtdC0INC/0L7QtNC60L7QvNCw0L3QtNC+0LkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3QsNGPINC/0L7QtNC60L7QvNCw0L3QtNCwOiAlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMgorbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjcKIG1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCi0iXG4iCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAi0JjQvdC60YDQtdC80LXQvdGC0LDQu9GM0L3Ri9C1INC/0LXRgNC10L/QsNC60L7QstC60Lgg0L3QtSDRgdC+0LLQvNC10YHRgtC40LzRiyDRgSDQuNC90LTQtdC60YHQsNC80Lgg0LIg0LHQuNGC0L7QstGL0YUg0LrQsNGA0YLQsNGFLiAg0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIC0tbm8td3JpdGUtYml0bWFwLWluZGV4INC40LvQuCDQvtGC0LrQu9GO0YfQuNGC0LUg0L/QsNGA0LDQvNC10YLRgCDQutC+0L3RhNC40LPRg9GA0LDRhtC40LggcGFjay53cml0ZWJpdG1hcHMuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjIwMAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMzkgYnVpbHRpbi9yZXBhY2suYzo0MTQKK21zZ2lkICJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyNTYKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICLRg9C/0LDQutC+0LLQsNGC0Ywg0LLRgdGRINCyINC+0LTQuNC9INC/0LDQutC10YIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk2Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAi0YLQvtC20LUsINGH0YLQviDQuCAtYSwg0L3QviDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QviDQvtGC0LHRgNC+0YHQuNGC0Ywg0L3QtdC00L7RgdGC0LjQttC40LzRi9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0LUg0LvQuNGI0L3QuNC1INC/0LDQutC10YLRiyDQuCDQt9Cw0L/Rg9GB0YLQuNGC0LUgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDQvtC/0YbQuNGOIC0tbm8tcmV1c2UtZGVsdGEg0LIgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0L7Qv9GG0LjRjiAtLW5vLXJldXNlLW9iamVjdCDQsiBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNQorbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAi0L3QtSDQt9Cw0L/Rg9GB0LrQsNGC0YwgZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDQvtC/0YbQuNGOIC0tbG9jYWwg0LIgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgItC30LDQv9C40YHRjCDQuNC90LTQtdC60YHQsCDQsiDQsdC40YLQvtCy0YvRhSDQutCw0YDRgtCw0YUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEyCittc2dpZCAicGFzcyAtLWRlbHRhLWlzbGFuZHMgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMworbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICLQv9GA0LjQvNC10YDQvdCw0Y8t0LTQsNGC0LAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE0Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAi0YEg0L7Qv9GG0LjQtdC5IC1BLCDQvdC1INC+0YLQsdGA0LDRgdGL0LLQsNGC0Ywg0L7QsdGK0LXQutGC0Ysg0YHRgtCw0YDQtdC1LCDRh9C10Lwg0YPQutCw0LfQsNC90L4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAid2l0aCAtYSwgcmVwYWNrIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgItGBINC/0LDRgNCw0LzQtdGC0YDQvtC8IC1hLCDQv9C10YDQtdC/0LDQutC+0LLQsNGC0Ywg0L3QtdC00L7RgdGC0YPQv9C90YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTgKK21zZ2lkICJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgItGA0LDQt9C80LXRgCDQvtC60L3QsCwg0LjRgdC/0L7Qu9GM0LfRg9C10LzRi9C5INC00LvRjyDQutC+0LzQv9GA0LXRgdGB0LjQuCDQtNC10LvRjNGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxOSBidWlsdGluL3JlcGFjay5jOjMyNQorbXNnaWQgImJ5dGVzIgorbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQvi3QsdCw0LnRgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAi0YLQvtC20LUsINGH0YLQviDQuCDQstGL0YjQtSwg0L3QviDQvtCz0YDQsNC90LjRh9C40YLRjCDRgNCw0LfQvNC10YAg0L/QsNC80Y/RgtC4LCDQsCDQvdC1INC60L7Qu9C40YfQtdGB0YLQstC+INC30LDQv9C40YHQtdC5IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQtdC90LjQtSDQvdCwINC80LDQutGB0LjQvNCw0LvRjNC90YPRjiDQs9C70YPQsdC40L3RgyDQtNC10LvRjNGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQtdC90LjQtSDQvdCwINC80LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQv9C+0YLQvtC60L7QsiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjYKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9GM0L3Ri9C5INGA0LDQt9C80LXRgCDQutCw0LbQtNC+0LPQviDQuNC3INGE0LDQudC70L7QsiDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgItC/0LXRgNC10YPQv9Cw0LrQvtCy0LDRgtGMINC+0LHRitC10LrRgtGLINCyINC/0LDQutC10YLRiywg0L/QvtC80LXRh9C10L3QvdGL0LUg0YTQsNC50LvQvtC8IC5rZWVwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMzMAorbXNnaWQgImRvIG5vdCByZXBhY2sgdGhpcyBwYWNrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQwCittc2dpZCAiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINGD0LTQsNC70Y/RgtGMINC/0LDQutC10YLRiyDQsiBwcmVjaW91cy1vYmplY3RzINGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQ0Cittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUg0LggLUEg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDIzCittc2dpZCAiTm90aGluZyBuZXcgdG8gcGFjay4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5XG4iCisiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKyJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlXG4iCisiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIHRoZVxuIgorIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorIldBUk5JTkc6IG9yaWdpbmFsIG5hbWVzIGFsc28gZmFpbGVkLlxuIgorIldBUk5JTkc6IFBsZWFzZSByZW5hbWUgdGhlbSBpbiAlcyBtYW51YWxseTpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgItGB0LHQvtC5INGD0LTQsNC70LXQvdC40Y8gwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSA80L7QsdGK0LXQutGCPiA80LfQsNC80LXQvdCwPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPNC+0LHRitC10LrRgj4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA80LrQvtC80LzQuNGCPiBbPNGA0L7QtNC40YLQtdC70Yw+4oCmXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjUKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tY29udmVydC1ncmFmdC1maWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDzQvtCx0YrQtdC60YI+4oCmIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTzRhNC+0YDQvNCw0YI+XSBbLWwgWzzRiNCw0LHQu9C+0L0+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZXBsYWNlIHJlZiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQyCittc2dpZCAiY2F0LWZpbGUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmc3RhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyMiBidWlsdGluL3JlcGxhY2UuYzozNzcgYnVpbHRpbi9yZXBsYWNlLmM6NDIyCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAi0L/Qu9C+0YXQsNGPINC80LXRgtC60LAg0YHQu9C40Y/QvdC40Y8g0LIg0LrQvtC80LzQuNGC0LUgwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLQv9C+0LLRgNC10LbQtNGR0L3QvdCw0Y8g0LzQtdGC0LrQsCDRgdC70LjRj9C90LjRjyDQsiDQutC+0LzQvNC40YLQtSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICLQvtGA0LjQs9C40L3QsNC70YzQvdGL0Lkg0LrQvtC80LzQuNGCIMKrJXPCuyDRgdC+0LTQtdGA0LbQuNGCINC80LXRgtC60YMg0YHQu9C40Y/QvdC40Y8gwqslc8K7LCDQutC+0YLQvtGA0LDRjyDQsdGL0LvQsCDQvtGC0LHRgNC+0YjQtdC90LA7INC40YHQv9C+0LvRjNC30YPQudGC0LUgLS1lZGl0INCy0LzQtdGB0YLQviAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY4Cittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgItC/0L7QtNC/0LjRgdGMINCx0YPQtNC10YIg0YPQtNCw0LvQtdC90LAg0LIg0LfQsNC80LXQvdC10L3QvdC+0Lwg0LrQvtC80LzQuNGC0LUhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQt9Cw0LzQtdC90YMg0LTQu9GPINC60L7QvNC80LjRgtCwOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJncmFmdCBmb3IgJyVzJyB1bm5lY2Vzc2FyeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjb252ZXJ0IHRoZSBmb2xsb3dpbmcgZ3JhZnQocyk6XG4iCiAiJXMiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCBzc2gta2V5Z2VuOlxuXG4lcyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTEKLW1zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCi1tc2dzdHIgItCa0LvRjtGHINC90LUg0YHQvtC30LTQsNC9LiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0NgorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0LfQsNC80LXQvdGP0LXQvNGL0YUg0YHRgdGL0LvQvtC6IgogCi0jOiBsaWIvc3Noa2V5LnRjbDoxMTgKLW1zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgotbXNnc3RyICLQodC+0LfQtNCw0L3QuNC1INC60LvRjtGH0LAg0LfQsNCy0LXRgNGI0LjQu9C+0YHRjCwg0L3QviDRgNC10LfRg9C70YzRgtCw0YIg0L3QtSDQsdGL0Lsg0L3QsNC50LTQtdC9IgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ3Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAi0YPQtNCw0LvQtdC90LjQtSDQt9Cw0LzQtdC90Y/QtdC80YvRhSDRgdGB0YvQu9C+0LoiCiAKLSM6IGxpYi9zc2hrZXkudGNsOjEyMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKLW1zZ3N0ciAi0JLQsNGIINC60LvRjtGHINC90LDRhdC+0LTQuNGC0YHRjyDQsjogJXMiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAi0LjQt9C80LXQvdC10L3QuNC1INGB0YPRidC10YHRgtCy0YPRjtGJ0LXQs9C+INC+0LHRitC10LrRgtCwIgogCi0jOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgotbXNnc3RyICIlcyDigKYgJSppINC40LcgJSppICVzICglM2klJSkiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICLQuNC30LzQtdC90LXQvdC40LUg0YDQvtC00LjRgtC10LvRjyDQutC+0LzQvNC40YLQsCIKIAotIzogbGliL3Rvb2xzLnRjbDo3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKLW1zZ3N0ciAi0JfQsNC/0YPRgdC6ICVzINGC0YDQtdCx0YPQtdGCINCy0YvQsdGA0LDQvdC90L7Qs9C+INGE0LDQudC70LAuIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29scy50Y2w6OTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKLW1zZ3N0ciAi0JTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LfQsNC/0YPRgdGC0LjRgtGMICVzPyIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgItC30LDQvNC10L3QsCDRgdGB0YvQu9C60LgsINC10YHQu9C4INC+0L3QsCDRgdGD0YnQtdGB0YLQstGD0LXRgiIKIAotIzogbGliL3Rvb2xzLnRjbDoxMTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sOiAlcyIKLW1zZ3N0ciAi0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3QsNGPINC+0L/QtdGA0LDRhtC40Y86ICVzIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUzCittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICLQvdC1INC00LXQu9Cw0YLRjCDRgdGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3Ri9C5INCy0YvQstC+0LQg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQtNC70Y8gLS1lZGl0IgogCi0jOiBsaWIvdG9vbHMudGNsOjExMQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmc6ICVzIgotbXNnc3RyICLQktGL0L/QvtC70L3QtdC90LjQtTogJXMiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTQKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRjdGC0L7RgiDRhNC+0YDQvNCw0YIiCiAKLSM6IGxpYi90b29scy50Y2w6MTQ5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKLW1zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwICVzINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YPRgdC/0LXRiNC90L4uIgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTY3Cittc2dpZCAiLS1mb3JtYXQgY2Fubm90IGJlIHVzZWQgd2hlbiBub3QgbGlzdGluZyIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHMudGNsOjE1MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC/0YDQvtCz0YDQsNC80LzRizogJXMiCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NzUKK21zZ2lkICItZiBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gd3JpdGluZyBhIHJlcGxhY2VtZW50IgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjIyCi1tc2dpZCAiQWRkIFRvb2wiCi1tc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3Rg9GOINC+0L/QtdGA0LDRhtC40Y4iCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NzkKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjI4Ci1tc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCi1tc2dzdHIgItCd0L7QstCw0Y8g0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3QsNGPINC+0L/QtdGA0LDRhtC40Y8iCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODUKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzMKLW1zZ2lkICJBZGQgZ2xvYmFsbHkiCi1tc2dzdHIgItCU0L7QsdCw0LLQuNGC0Ywg0LTQu9GPINCy0YHQtdGFINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQsiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5MQorbXNnaWQgImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjQ1Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICLQntC/0LjRgdCw0L3QuNC1INCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90L7QuSDQvtC/0LXRgNCw0YbQuNC4IgorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk3Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKLW1zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKLW1zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCqy/CuyDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQv9C+0LTQvNC10L3RjiIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwMworbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICLQmtC+0LzQsNC90LTQsDoiCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MDkKK21zZ2lkICItLWNvbnZlcnQtZ3JhZnQtZmlsZSB0YWtlcyBubyBhcmd1bWVudCIKK21zZ3N0ciAiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3NAotbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LTQuNCw0LvQvtCzINC/0LXRgNC10LQg0LfQsNC/0YPRgdC60L7QvCIKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNQorbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgIiIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6ODAKLW1zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKLW1zZ3N0ciAi0JfQsNC/0YDQvtGBINC90LAg0LLRi9Cx0L7RgCDQstC10YDRgdC40LggKNGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCICRSRVZJU0lPTikiCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPNC/0YPRgtGMPuKApiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjg1Ci1tc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCi1tc2dzdHIgItCX0LDQv9GA0L7RgSDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9GFINCw0YDQs9GD0LzQtdC90YLQvtCyICjRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgiAkQVJHUykiCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0YfQuNGB0YLRi9C1INGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQvtCyINCyINC40L3QtNC10LrRgSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKLW1zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCi1tc2dzdHIgItCd0LUg0L/QvtC60LDQt9GL0LLQsNGC0Ywg0L7QutC90L4g0LLRi9Cy0L7QtNCwINC60L7QvNCw0L3QtNGLIgorIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjk3Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAi0JfQsNC/0YPRgdC6INGC0L7Qu9GM0LrQviDQtdGB0LvQuCDQv9C+0LrQsNC30LDQvSDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5ICgkRklMRU5BTUUg0L3QtSDQv9GD0YHRgtC+KSIKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICIiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjEyMQotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCi1tc2dzdHIgItCj0LrQsNC20LjRgtC1INC90LDQt9Cy0LDQvdC40LUg0LLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3QvtC5INC+0L/QtdGA0LDRhtC40LguIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICLQktGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdCw0Y8g0L7Qv9C10YDQsNGG0LjRjyDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTUxCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL3Jlc2V0LmM6MzIKIG1zZ2lkICIiCi0iQ291bGQgbm90IGFkZCB0b29sOlxuIgotIiVzIgotbXNnc3RyICLQntGI0LjQsdC60LAg0LTQvtCx0LDQstC70LXQvdC40Y8g0L/RgNC+0LPRgNCw0LzQvNGLOlxuJXMiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs80LrQvtC80LzQuNGCPl0iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE5MAotbXNnaWQgIlJlbW92ZSBUb29sIgotbXNnc3RyICLQo9C00LDQu9C40YLRjCDQv9GA0L7Qs9GA0LDQvNC80YMiCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LA+XSBbLS1dIDzQv9GD0YLQuD7igKYiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE5NgotbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgotbXNnc3RyICLQo9C00LDQu9C40YLRjCDQutC+0LzQsNC90LTRiyDQv9GA0L7Qs9GA0LDQvNC80YsiCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsD5dIFstLV0gWzzQv9GD0YLQuD7igKZdIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDAKLW1zZ2lkICJSZW1vdmUiCi1tc2dzdHIgItCj0LTQsNC70LjRgtGMIgorIzogYnVpbHRpbi9yZXNldC5jOjQwCittc2dpZCAibWl4ZWQiCittc2dzdHIgItGB0LzQtdGI0LDQvdC90YvQuSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjM2Ci1tc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKLW1zZ3N0ciAiKNCh0LjQvdC40Lwg0LLRi9C00LXQu9C10L3RiyDQv9GA0L7Qs9GA0LDQvNC80Ysg0LvQvtC60LDQu9GM0L3Ri9C1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y4pIgorIzogYnVpbHRpbi9yZXNldC5jOjQwCittc2dpZCAic29mdCIKK21zZ3N0ciAi0LzRj9Cz0LrQuNC5IgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW4gQ29tbWFuZDogJXMiCi1tc2dzdHIgItCX0LDQv9GD0YHQuiDQutC+0LzQsNC90LTRizogJXMiCisjOiBidWlsdGluL3Jlc2V0LmM6NDAKK21zZ2lkICJoYXJkIgorbXNnc3RyICLQttC10YHRgtC60LjQuSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCi1tc2dpZCAiQXJndW1lbnRzIgotbXNnc3RyICLQkNGA0LPRg9C80LXQvdGC0YsiCisjOiBidWlsdGluL3Jlc2V0LmM6NDAKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAi0YHQu9C40Y/QvdC40LXQvCIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ4Ci1tc2dpZCAiT0siCi1tc2dzdHIgIk9LIgorIzogYnVpbHRpbi9yZXNldC5jOjQwCittc2dpZCAia2VlcCIKK21zZ3N0ciAi0L7RgdGC0LDQstC70LXQvdC40LXQvCIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCi1tc2dzdHIgItCY0LfQstC70LXRh9C10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQuNC3ICVzICIKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MQorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICLQoyDQstCw0YEg0L3QtdGCINCy0LXRgNC90L7Qs9C+IEhFQUQuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAotIywgdGNsLWZvcm1hdAotbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKLW1zZ3N0ciAi0YfQuNGB0YLQutCwINCy0L3QtdGI0L3QtdCz0L4gJXMiCisjOiBidWlsdGluL3Jlc2V0LmM6ODMKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0LTQtdGA0LXQstC+INGDIEhFQUQuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgotbXNnc3RyICLQp9C40YHRgtC60LAg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0LLQtdGC0L7Quiwg0YPQtNCw0LvRkdC90L3Ri9GFINC40LcgJXMiCisjOiBidWlsdGluL3Jlc2V0LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQtNC10YDQtdCy0L4g0YMgJXMuIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKLW1zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LIgJXMgIgorIzogYnVpbHRpbi9yZXNldC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LLRi9C/0L7Qu9C90LjRgtGMINGB0LHRgNC+0YEg0LIg0YDQtdC20LjQvNC1IMKrJXPCuyDQstC+INCy0YDQtdC80Y8g0YHQu9C40Y/QvdC40Y8uIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKLW1zZ3N0ciAi0KLQvtGH0L3QvtC1INC60L7Qv9C40YDQvtCy0LDQvdC40LUg0LIgJXMiCisjOiBidWlsdGluL3Jlc2V0LmM6MjkzIGJ1aWx0aW4vc3Rhc2guYzo1MTQgYnVpbHRpbi9zdGFzaC5jOjU4OQorIzogYnVpbHRpbi9zdGFzaC5jOjYxMworbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgItGC0LjRhdC40Lkg0YDQtdC20LjQvCwg0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0L7RiNC40LHQutC4IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCi1tc2dzdHIgItCe0YLQv9GA0LDQstC60LAgJXMgJXMg0LIgJXMiCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk1Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgItGB0LHRgNC+0YHQuNGC0YwgSEVBRCDQuCDQuNC90LTQtdC60YEiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjEwMAotbXNnaWQgIlB1c2ggQnJhbmNoZXMiCi1tc2dzdHIgItCe0YLQv9GA0LDQstC40YLRjCDQstC10YLQutC4IgorIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAi0YHQsdGA0L7RgdC40YLRjCDRgtC+0LvRjNC60L4gSEVBRCIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTE0Ci1tc2dpZCAiU291cmNlIEJyYW5jaGVzIgotbXNnc3RyICLQmNGB0YXQvtC00L3Ri9C1INCy0LXRgtC60LgiCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk4IGJ1aWx0aW4vcmVzZXQuYzozMDAKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICLRgdCx0YDQvtGB0LjRgtGMIEhFQUQsINC40L3QtNC10LrRgSDQuCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCi1tc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKLW1zZ3N0ciAi0KDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQvdCw0LfQvdCw0YfQtdC90LjRjyIKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDIKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgItGB0LHRgNC+0YHQuNGC0YwgSEVBRCwg0L3QviDQvtGB0YLQsNCy0LjRgtGMINC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8iCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQotbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCi1tc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvtGC0L/RgNCw0LLQutC4IgorIzogYnVpbHRpbi9yZXNldC5jOjMwOAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGC0L7Qu9GM0LrQviDRhNCw0LrRgiDRgtC+0LPQviwg0YfRgtC+INGD0LTQsNC70LXQvdC90YvQtSDQv9GD0YLQuCDQsdGD0LTRg9GCINC00L7QsdCw0LLQu9C10L3RiyDQv9C+0LfQttC1IgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKLW1zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKLW1zZ3N0ciAi0J/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0L/QtdGA0LXQt9Cw0L/QuNGB0LDRgtGMINGB0YPRidC10YHRgtCy0YPRjtGJ0YPRjiDQstC10YLQutGDICjQstC+0LfQvNC+0LbQvdCwINC/0L7RgtC10YDRjyDQuNC30LzQtdC90LXQvdC40LkpIgorIzogYnVpbHRpbi9yZXNldC5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDRgdC/0L7Qt9C90LDRgtGMIMKrJXPCuyDQutCw0Log0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YPRjiDRgNC10LTQsNC60YbQuNGOLiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTc1Ci1tc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCi1tc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCB0aGluIHBhY2sgKNC00LvRjyDQvNC10LTQu9C10L3QvdGL0YUg0YHQtdGC0LXQstGL0YUg0L/QvtC00LrQu9GO0YfQtdC90LjQuSkiCisjOiBidWlsdGluL3Jlc2V0LmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0YHQv9C+0LfQvdCw0YLRjCDCqyVzwrsg0LrQsNC6INC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0LUg0LTQtdGA0LXQstC+LiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTc5Ci1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICLQn9C10YDQtdC00LDRgtGMINC80LXRgtC60LgiCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTMKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INC+0L/RhtC40LggLS1taXhlZCDRgSDQv9GD0YLRj9C80Lgg0YPRgdGC0LDRgNC10LvQvjsg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZXNldCAtLSA80L/Rg9GC0Lg+wrsgaW5zdGVhZC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LLRi9C/0L7Qu9C90LjRgtGMINGB0LHRgNC+0YEg0LIg0YDQtdC20LjQvNC1IMKrJXPCuyDQstC80LXRgdGC0LUg0YEg0YPQutCw0LfQsNC90LjQtdC8INC/0YPRgtC4LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0YHQsdGA0L7RgSDCqyVzwrsg0YDQsNC30YDQtdGI0LXQvSDRgtC+0LvRjNC60L4g0YEg0LPQvtC70YvQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC10LwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzQKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiLU4g0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLQvNC10YHRgtC1INGBIC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozOTUKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAi0J3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0L/QvtGB0LvQtSDRgdCx0YDQvtGB0LA6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdCx0YDQvtGB0LjRgtGMINGE0LDQudC7INC40L3QtNC10LrRgdCwINC90LAg0YDQtdC00LDQutGG0LjRjiDCqyVzwrsuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC90L7QstGL0Lkg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDA1Cittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgYW5kIC0tbWlzc2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDY2Cittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgItGE0LjQu9GM0YLRgNCw0YbQuNGPINC+0LHRitC10LrRgtC+0LIg0YLRgNC10LHRg9C10YIg0YPQutCw0LfQsNC90LjRjyDQv9Cw0YDQsNC80LXRgtGA0LAgLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3BhcnNlIHZhbHVlICclcyciCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDRh9Cw0YHRgtC40YfQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MTAKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC+0YLQvtCx0YDQsNC20LXQvdC40LUg0LfQsNC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MTMKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLXVzZS1iaXRtYXAtaW5kZXggd2l0aCBvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIC0tdXNlLWJpdG1hcC1pbmRleCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEg0YTQuNC70YzRgtGA0LDRhtC40LXQuSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs80L7Qv9GG0LjQuD5dIC0tIFs80LDRgNCz0YPQvNC10L3RgtGLPuKApl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDEzCittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICLQv9C10YDQtdC00LDQstCw0YLRjCDQtNCw0LvQtdC1IMKrLS3CuyDQutCw0Log0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgItC+0YHRgtCw0L3QvtCy0LjRgtGMINGA0LDQt9Cx0L7RgCDQv9C+0YHQu9C1INC/0LXRgNCy0L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQsCDQvdC1INGP0LLQu9GP0Y7RidC10LPQvtGB0Y8g0L7Qv9GG0LjQtdC5IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LDRgNCz0YPQvNC10L3RgtGLINCyINC00LvQuNC90L3QvtC8INGE0L7RgNC80LDRgtC1IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjU1MQorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs80L7Qv9GG0LjQuD5dIC0tIFs80LDRgNCz0YPQvNC10L3RgtGLPuKApl1cbiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzzQsNGA0LPRg9C80LXQvdGCPuKApl1cbiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs80L7Qv9GG0LjQuD5dIFs80LDRgNCz0YPQvNC10L3Rgj7igKZdXG5cbtCX0LDQv9GD0YHRgtC40YLQtSDQutC+0LzQsNC90LTRgyDCq2dpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaMK7INC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0L/QvtC00YDQvtCx0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INC/0LXRgNCy0L7QvCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQuC4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPNC+0L/RhtC40Lg+XSA80YPQutCw0LfQsNGC0LXQu9GMLdC60L7QvNC80LjRgtCwPuKApiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNQorbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDzQv9C+0LTQutC+0LzQsNC90LTQsD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzzQvtC/0YbQuNC4Pl0gPNGD0LrQsNC30LDRgtC10LvRjC3QutC+0LzQvNC40YLQsD7igKYiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPNC/0L7QtNC60L7QvNCw0L3QtNCwPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLQutC+0L3QtdGGINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQuCDQutC+0L/QuNGA0L7QstCw0L3QuNGPINC40LvQuCDQvtCx0YDQsNGJ0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0L/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtGMINC60L7Qv9C40YDQvtCy0LDQvdC40Y8g0LjQu9C4INC+0LHRgNCw0YnQtdC90LjRjyDQuNC30LzQtdC90LXQvdC40Lkg0LrQvtC80LzQuNGC0L7QsiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLQvtGC0LzQtdC90LAg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC4INC60L7Qv9C40YDQvtCy0LDQvdC40Y8g0LjQu9C4INC+0LHRgNCw0YnQtdC90LjRjyDQuNC30LzQtdC90LXQvdC40Lkg0LrQvtC80LzQuNGC0L7QsiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDYKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAi0L3QtSDQutC+0LzQvNC40YLQuNGC0Ywg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LgiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItC40LfQvNC10L3QuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgInBhcmVudC1udW1iZXIiCittc2dzdHIgItC90L7QvNC10YAt0YDQvtC00LjRgtC10LvRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnc3RyICLQstGL0LHQvtGAINC+0YHQvdC+0LLQvdC+0LPQviDRgNC+0LTQuNGC0LXQu9GPIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMworbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLRgdGC0YDQsNGC0LXQs9C40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE1Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi0L7Qv9GG0LjRjyDQtNC70Y8g0YHRgtGA0LDRgtC10LPQuNC4INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNAorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQuNC80Y8g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI2Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgItGB0L7RhdGA0LDQvdC40YLRjCDQuNC30L3QsNGH0LDQu9GM0L3QviDQv9GD0YHRgtGL0LUg0LrQvtC80LzQuNGC0YsiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgItC+0YHRgtCw0LLQuNGC0Ywg0LjQt9Cx0YvRgtC+0YfQvdGL0LUsINC/0YPRgdGC0YvQtSDQutC+0LzQvNC40YLRiyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMjcKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQvtCx0YDQsNGJ0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0MAorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INC60L7Qv9C40YDQvtCy0LDQvdC40Lgg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs80L7Qv9GG0LjQuD5dIFstLV0gPNGE0LDQudC7PuKApiIKKworIzogYnVpbHRpbi9ybS5jOjIwNworbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnc3RyWzBdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0L7RgtC70LjRh9Cw0Y7RidC40LXRgdGPINC4INC+0YIg0YTQsNC50LvQsCwg0Lgg0L7RgiBIRUFEOiIKK21zZ3N0clsxXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINC+0YLQu9C40YfQsNGO0YnQuNC10YHRjyDQuCDQvtGCINGE0LDQudC70LAsINC4INC+0YIgSEVBRDoiCittc2dzdHJbMl0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQvtGC0LvQuNGH0LDRjtGJ0LjQtdGB0Y8g0Lgg0L7RgiDRhNCw0LnQu9CwLCDQuCDQvtGCIEhFQUQ6IgorbXNnc3RyWzNdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0L7RgtC70LjRh9Cw0Y7RidC40LXRgdGPINC4INC+0YIg0YTQsNC50LvQsCwg0Lgg0L7RgiBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMgorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICJcbijQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC+0L/RhtC40Y4gwqstZsK7INC00LvRjyDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QvtCz0L4g0YPQtNCw0LvQtdC90LjRjykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdC00LXQutGB0LU6IgorbXNnc3RyWzFdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdC00LXQutGB0LU6IgorbXNnc3RyWzJdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdC00LXQutGB0LU6IgorbXNnc3RyWzNdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdC00LXQutGB0LU6IgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiXG4o0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIMKrLS1jYWNoZWTCuyDQtNC70Y8g0L7RgdGC0LDQstC70LXQvdC40Y8g0YTQsNC50LvQsCwg0LjQu9C4IMKrLWbCuyDQtNC70Y8g0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L7Qs9C+INGD0LTQsNC70LXQvdC40Y8pIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y86IgorbXNnc3RyWzFdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y86IgorbXNnc3RyWzJdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y86IgorbXNnc3RyWzNdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y86IgorCisjOiBidWlsdGluL3JtLmM6MjQyCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINGB0L/QuNGB0L7QuiDRg9C00LDQu9C10L3QvdGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL3JtLmM6MjQzCittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINGC0L7Qu9GM0LrQviDQuNC3INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINC/0YDQvtCy0LXRgNC60YMg0LDQutGC0YPQsNC70YzQvdC+0YHRgtC4IgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDRgNC10LrRg9GA0YHQuNCy0L3QvtC1INGD0LTQsNC70LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDcKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAi0LLRi9GF0L7QtCDRgSDQvdGD0LvQtdCy0YvQvCDQutC+0LTQvtC8INCy0L7Qt9Cy0YDQsNGC0LAsINC00LDQttC1INC10YHQu9C4INC90LjRh9C10LPQviDQvdC1INC90LDQudC00LXQvdC+IgorCisjOiBidWlsdGluL3JtLmM6Mjg5Cittc2dpZCAicGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjMwNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICLQvdC1INGD0LTQsNC70Y/RjiDRgNC10LrRg9GA0YHQuNCy0L3QviDCqyVzwrsg0LHQtdC3INGD0LrQsNC30LDQvdC40Y8g0L7Qv9GG0LjQuCAtciIKKworIzogYnVpbHRpbi9ybS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybTog0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCAlcyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoyMAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzzRgdC10YDQstC10YA+Ol080LrQsNGC0LDQu9C+0LM+IFs80YHRgdGL0LvQutCwPuKApl1cbiAgLS1hbGwg0Lgg0Y/QstC90YvQuSDRgdC/0LXRhtC40YTQuNC60LDRgtC+0YAgPNGB0YHRi9C70LrQuD4g0LLQt9Cw0LjQvNC90L4g0LjRgdC60LvRjtGH0LDRjtGJ0LjQtS4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgItC40LzRjyDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgItC/0YDQvtGC0L7QutC+0Lsg0LHQtdC3INGB0L7RhdGA0LDQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQtNC70Y8gUlBDIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0YHRgdGL0LvQutC4INC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHRgtCw0YLRg9GBINC+0YIg0YHQutGA0LjQv9GC0LAg0LLQvdC10YjQvdC10LPQviDRgdC10YDQstC10YDQsCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE0Cittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzzQvtC/0YbQuNC4Pl0gWzzQtNC40LDQv9Cw0LfQvtC9LdGA0LXQtNCw0LrRhtC40Lk+XSBbWy0tXSA80L/Rg9GC0Yw+4oCmXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1Cittc2dpZCAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NAorbXNnaWQgIkdyb3VwIGJ5IGNvbW1pdHRlciByYXRoZXIgdGhhbiBhdXRob3IiCittc2dzdHIgItCT0YDRg9C/0L/QuNGA0L7QstCw0YLRjCDQv9C+INC60L7QvNC80LjRgtC10YDRgywg0LAg0L3QtSDQv9C+INCw0LLRgtC+0YDRgyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAi0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNGC0Ywg0LLRi9Cy0L7QtCDQv9C+INC60L7Qu9C40YfQtdGB0YLQstGDINC60L7QvNC80LjRgtC+0LIg0YMg0LDQstGC0L7RgNCwIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgItCd0LUg0LLRi9Cy0L7QtNC40YLRjCDQvtC/0LjRgdCw0L3QuNGPINC60L7QvNC80LjRgtC+0LIsINCwINGC0L7Qu9GM0LrQviDQuNGFINC60L7Qu9C40YfQtdGB0YLQstC+IgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQv9C+0YfRgtGDINC60LDQttC00L7Qs9C+INC40Lcg0LDQstGC0L7RgNC+0LIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiPHc+Wyw8aTE+Wyw8aTI+XV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgItCf0LXRgNC10L3QvtGBINGB0YLRgNC+0Log0L3QsCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZ2l2ZW4gb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG5cdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTzQutC+0LPQtNCwPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG5cdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDzRgNC10LTQsNC60YbQuNGPPiB8IDzRiNCw0LHQu9C+0L0+KeKApl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxNworbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw80LHQsNC30LA+XV0gWy0tbGlzdF0gWzzRgdGB0YvQu9C60LA+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAi0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40LUgJXM7INC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDRgdGB0YvQu9C60LgiCittc2dzdHJbMV0gItC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNC1ICVzOyDQvdC10LLQvtC30LzQvtC20L3QviDQvtCx0YDQsNCx0L7RgtCw0YLRjCDQsdC+0LvRjNGI0LUgJWQg0YHRgdGL0LvQvtC6IgorbXNnc3RyWzJdICLQuNCz0L3QvtGA0LjRgNC+0LLQsNC90LjQtSAlczsg0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LHQvtC70YzRiNC1ICVkINGB0YHRi9C70L7QuiIKK21zZ3N0clszXSAi0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40LUgJXM7INC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDRgdGB0YvQu9C60LgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICLQvdC10YIg0YHQvtCy0L/QsNC00LDRjtGJ0LjRhSDQt9Cw0L/QuNGB0LXQuSDRgSAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NgorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgdC/0LjRgdC+0Log0Lgg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0LLQvdC10YjQvdC40YUg0Lgg0LvQvtC60LDQu9GM0L3Ri9GFINCy0LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDgKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgdC/0LjRgdC+0Log0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0LLQvdC10YjQvdC40YUg0LLQtdGC0L7QuiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MAorbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgItC+0LrRgNCw0YjQuNCy0LDRgtGMIMKrKiErLcK7INCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuCDRgSDQstC10YLQutC+0LkiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTIKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCA8bj4g0LrQvtC80LzQuNGC0L7QsiDQv9C+0YHQu9C1INC+0LHRidC10LPQviDQv9GA0LXQtNC60LAiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTQKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgItGB0LjQvdC+0L3QuNC8INC00LvRjyBtb3JlPS0xIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU1Cittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDQuNC80LXQvdC+0LLQsNC90L3Ri9C1INGB0YLRgNC+0LrQuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NworbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINCyINCy0YvQstC+0LQg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OQorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAi0LjQvNC10L3QvtCy0LDRgtGMINC60L7QvNC80LjRgtGLINC40YUg0LjQvNC10L3QsNC80Lgg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MQorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INCy0L7Qt9C80L7QttC90YvQtSDQsdCw0LfRiyDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MworbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0YHRi9C70LrQuCwg0L3QtdC00L7RgdGC0YPQv9C90YvQtSDQuNC3INC70Y7QsdGL0YUg0LTRgNGD0LPQuNGFINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NQorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0LrQvtC80LzQuNGC0Ysg0LIg0YLQvtC/0L7Qu9C+0LPQuNGH0LXRgdC60L7QvCDQv9C+0YDRj9C00LrQtSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2OAorbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgtC+0LvRjNC60L4g0LrQvtC80LzQuNGC0YssINC+0YLRgdGD0YLRgdGC0LLRg9GO0YnQuNC1INCyINC/0LXRgNCy0L7QuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcwCittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC70LjRj9C90LjRjywg0LTQvtGB0YLQuNC20LjQvNGL0LUg0YLQvtC70YzQutC+INC40Lcg0L7QtNC90L7QuSDQuNC3INCy0LXRgNGF0YPRiNC10LoiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzIKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgItGC0L7Qv9C+0LvQvtCz0LjRh9C10YHQutCw0Y8g0YHQvtGA0YLQuNGA0L7QstC60LAsINGBINGB0L7RhdGA0LDQvdC10L3QuNC10Lwg0L/QvtGA0Y/QtNC60LAg0LTQsNGCLCDQtdGB0LvQuCDQstC+0LfQvNC+0LbQvdC+IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc1Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDzQsdCw0LfQsD5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc2Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0YwgPG4+INC/0L7RgdC70LXQtNC90LjRhSDQt9Cw0L/QuNGB0LXQuSDQsiDQttGD0YDQvdCw0LvQtSDRgdGB0YvQu9C+0LosINC90LDRh9C40L3QsNGPINGBINCx0LDQt9GLIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzEyCittc2dpZCAiIgorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS0iCisiYmFzZSIKK21zZ3N0ciAiLS1yZWZsb2cg0L3QtdGB0L7QstC80LXRgdGC0LjQvNC+INGBIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQg0LggLS1tZXJnZS1iYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM2Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAi0L3QtSDRg9C60LDQt9Cw0L3RiyDQstC10YLQutC4INC4IEhFQUQg0L3QtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM5Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCAtLXJlZmxvZyDRgtGA0LXQsdGD0LXRgiDRg9C60LDQt9Cw0L3QuNGPINC40LzQtdC90Lgg0L7QtNC90L7QuSDQstC10YLQutC4IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gItGC0L7Qu9GM0LrQviAlZCDQt9Cw0L/QuNGB0Ywg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9C+0LrQsNC30LDQvdCwINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCittc2dzdHJbMV0gItGC0L7Qu9GM0LrQviAlZCDQt9Cw0L/QuNGB0Lgg0LzQvtCz0YPRgiDQsdGL0YLRjCDQv9C+0LrQsNC30LDQvdGLINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCittc2dzdHJbMl0gItGC0L7Qu9GM0LrQviAlZCDQt9Cw0L/QuNGB0LXQuSDQvNC+0LPRg9GCINCx0YvRgtGMINC/0L7QutCw0LfQsNC90Ysg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKK21zZ3N0clszXSAi0YLQvtC70YzQutC+ICVkINC30LDQv9C40YHQuCDQvNC+0LPRg9GCINCx0YvRgtGMINC/0L7QutCw0LfQsNC90Ysg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAi0L3QtdGCINGC0LDQutC+0Lkg0YHRgdGL0LvQutC4ICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIgorbXNnc3RyWzBdICLQvdC10LLQvtC30LzQvtC20L3QviDQvtCx0YDQsNCx0L7RgtCw0YLRjCDQsdC+0LvRjNGI0LUgJWQg0YDQtdC00LDQutGG0LjQuC4iCittc2dzdHJbMV0gItC90LXQstC+0LfQvNC+0LbQvdC+INC+0LHRgNCw0LHQvtGC0LDRgtGMINCx0L7Qu9GM0YjQtSAlZCDRgNC10LTQsNC60YbQuNC5LiIKK21zZ3N0clsyXSAi0L3QtdCy0L7Qt9C80L7QttC90L4g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LHQvtC70YzRiNC1ICVkINGA0LXQtNCw0LrRhtC40LkuIgorbXNnc3RyWzNdICLQvdC10LLQvtC30LzQvtC20L3QviDQvtCx0YDQsNCx0L7RgtCw0YLRjCDQsdC+0LvRjNGI0LUgJWQg0YDQtdC00LDQutGG0LjQuC4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYuIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00L7Qv9GD0YHRgtC40LzQvtC5INGB0YHRi9C70LrQvtC5INC90LAg0LrQvtC80LzQuNGCLiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmluZCBjb21taXQgJXMgKCVzKSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC60L7QvNC80LjRgiAlcyAoJXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgIgorIi0taGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS1oYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs80YjQsNCx0LvQvtC9PuKApl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTzRiNCw0LHQu9C+0L0+XSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MgorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGC0L7Qu9GM0LrQviDQvNC10YLQutC4ICjQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEgLS1oZWFkcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjMKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgtC+0LvRjNC60L4g0LPQvtC70L7QstGLICjQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEgLS10YWdzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgItCx0L7Qu9C10LUg0YHRgtGA0L7Qs9Cw0Y8g0L/RgNC+0LLQtdGA0LrQsCDRgdGB0YvQu9C+0LosINGC0YDQtdCx0YPQtdGCINGC0L7Rh9C90YvQuSDQv9GD0YLRjCDRgdGB0YvQu9C60LgiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHRgdGL0LvQutGDIEhFQUQsINC00LDQttC1INC10YHQu9C4INC+0L3QsCDQsdGD0LTQtdGCINC+0YLRhNC40LvRjNGC0YDQvtCy0LDQvdCwIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgItGA0LDQt9GL0LzQtdC90L7QstCw0YLRjCDQvNC10YLQutC4INCyINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MworbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIDxuPiDRgdC40LzQstC+0LvQvtCyINC00LvRjyDQstGL0LLQvtC00LAgU0hBLTEg0YXQtdGILdGB0YPQvNC80YsiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAi0L3QtSDQv9C10YfQsNGC0LDRgtGMINGA0LXQt9GD0LvRjNGC0LDRgiDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCAo0L/QvtC70LXQt9C90L4g0YEg0L7Qv9GG0LjQtdC5IMKrLS12ZXJpZnnCuykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdGB0YvQu9C60Lgg0YHQviDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCwg0LrQvtGC0L7RgNGL0YUg0L3QtdGCINCyINC70L7QutCw0LvRjNC90L7QvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MjIgYnVpbHRpbi9zdGFzaC5jOjM3Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzdGFzaCBsaXN0IFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjMgYnVpbHRpbi9zdGFzaC5jOjQyCittc2dpZCAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggc2hvdyBbPNC+0L/RhtC40LjQuD5dIFs80YHQv9GA0Y/RgtCw0L3QvdGL0LUt0LjQt9C80LXQvdC10L3QuNGPPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNCBidWlsdGluL3N0YXNoLmM6NDcKK21zZ2lkICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzzRgdC/0YDRj9GC0LDQvdC90YvQtS3QuNC30LzQtdC90LXQvdC40Y8+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI1Cittc2dpZCAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs80YHQv9GA0Y/RgtCw0L3QvdGL0LUt0LjQt9C80LXQvdC10L3QuNGPPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjIKK21zZ2lkICJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBicmFuY2ggPNC40LzRjy3QstC10YLQutC4PiBbPNGB0L/RgNGP0YLQsNC90L3Ri9C1LdC40LfQvNC10L3QtdC90LjRjz5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjcgYnVpbHRpbi9zdGFzaC5jOjY3Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyOCBidWlsdGluL3N0YXNoLmM6NzcKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4gICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA80YHQvtC+0LHRidC10L3QuNC1Pl1cbiAgICAgICAgICBbLS1dIFs80YHQv9C10YbQuNGE0LjQutCw0YLQvtGALdC/0YPRgtC4PuKApl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MzEgYnVpbHRpbi9zdGFzaC5jOjg0Cittc2dpZCAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4gICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzzRgdC+0L7QsdGJ0LXQvdC40LU+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyCittc2dpZCAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHBvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs80YHQv9GA0Y/RgtCw0L3QvdGL0LUt0LjQt9C80LXQvdC10L3QuNGPPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NworbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzzRgdC/0YDRj9GC0LDQvdC90YvQtS3QuNC30LzQtdC90LXQvdC40Y8+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjcyCittc2dpZCAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4iCittc2dzdHIgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDzRgdC+0L7QsdGJ0LXQvdC40LU+XSBbLXF8LS1xdWlldF0gPNC60L7QvNC80LjRgj4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutC+0LzQvNC40YLQvtC8INGB0L4g0YHQv9GA0Y/RgtCw0L3QvdGL0LzQuCDQuNC30LzQtdC90LXQvdC40Y/QvNC4IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiCittc2dzdHIgItCf0LXRgNC10LTQsNC90L4g0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDRgNC10LTQsNC60YbQuNC5OiVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTYxIGdpdC1sZWdhY3ktc3Rhc2guc2g6NTQ4Cittc2dpZCAiTm8gc3Rhc2ggZW50cmllcyBmb3VuZC4iCittc2dzdHIgItCd0LUg0L3QsNC50LTQtdC90Ysg0YHQv9GA0Y/RgtCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiVzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80L7QuSDRgdGB0YvQu9C60L7QuSDQvdCwINC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyNCBnaXQtbGVnYWN5LXN0YXNoLnNoOjc1Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICJnaXQgc3Rhc2gg0L7Rh9C40YHRgtC60LAg0YEg0L/QsNGA0LDQvNC10YLRgNCw0LzQuCDQvdC1INGA0LXQsNC70LjQt9C+0LLQsNC90LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDMKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgItC90LXQu9GM0LfRjyDQv9GA0LjQvNC10L3QuNGC0Ywg0YHQv9GA0Y/RgtCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINCy0L4g0LLRgNC10LzRjyDQstGL0L/QvtC70L3QtdC90LjRjyDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdCz0LXQvdC10YDQuNGA0L7QstCw0YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5ICVzXiEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIxCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLQutC+0L3RhNC70LjQutGC0Ysg0LIg0LjQvdC00LXQutGB0LUuINCf0L7Qv9GA0L7QsdGD0LnRgtC1INCx0LXQtyAtLWluZGV4LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyNworbXNnaWQgImNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINC00LXRgNC10LLQviDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNAorbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDQstC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0LjQtyDRgdC/0YDRj9GC0LDQvdC90YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzIgorbXNnc3RyICLQodC70LjRj9C90LjQtSAlcyDQuCAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1OCBnaXQtbGVnYWN5LXN0YXNoLnNoOjY4MAorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAi0JjQvdC00LXQutGBINC90LUg0LHRi9C7INC40LfQstC70LXRh9GR0L0g0LjQtyDRgdC/0YDRj9GC0LDQvdC90YvRhSDQuNC30LzQtdC90LXQvdC40LkuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTE2IGJ1aWx0aW4vc3Rhc2guYzo2MTUKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAi0L/QvtC/0YvRgtC60LAg0L/QtdGA0LXRgdC+0LfQtNCw0L3QuNGPINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJXMgKCVzKSIKK21zZ3N0ciAi0J7RgtCx0YDQvtGI0LXQvdC+ICVzICglcykiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIlczog0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LHRgNC+0YHQuNGC0Ywg0LfQsNC/0LjRgdGMINC40Lcg0YHQv9GA0Y/RgtCw0L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBidWlsdGluL3N0YXNoLmM6NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGB0YHRi9C70LrQvtC5INC90LAg0YHQv9GA0Y/RgtCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjI3IGdpdC1sZWdhY3ktc3Rhc2guc2g6Njk0Cittc2dpZCAiVGhlIHN0YXNoIGVudHJ5IGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCittc2dzdHIgItCh0L/RgNGP0YLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YXRgNCw0L3QtdC90YssINC90LAg0YHQu9GD0YfQsNC5INC10YHQu9C4INC+0L3QuCDRgdC90L7QstCwINCy0LDQvCDQv9C+0L3QsNC00L7QsdGP0YLRgdGPLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjY1MCBnaXQtbGVnYWN5LXN0YXNoLnNoOjcxMgorbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi0J3QtSDRg9C60LDQt9Cw0L3QviDQuNC80Y8g0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc4OSBidWlsdGluL3N0YXNoLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00L7Qu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMICVzINGBICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODA3IGJ1aWx0aW4vc3Rhc2guYzoxNDc0IGJ1aWx0aW4vc3Rhc2guYzoxNTEwCittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAi0L7Qv9C40YHQsNC90LjQtSDRgdC/0YDRj9GC0LDQvdC90YvRhSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MTcKK21zZ2lkICJcImdpdCBzdGFzaCBzdG9yZVwiIHJlcXVpcmVzIG9uZSA8Y29tbWl0PiBhcmd1bWVudCIKK21zZ3N0ciAiwqtnaXQgc3Rhc2ggc3RvcmXCuyDRgtGA0LXQsdGD0LXRgiDRg9C60LDQt9Cw0L3QuNGPINC+0LTQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0LAgPNC60L7QvNC80LjRgj4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMDM5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE3Cittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINC90LUg0LLRi9Cx0YDQsNC90YsiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTM1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MTUwCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgItCjINCy0LDRgSDQtdGJ0LUg0L3QtdGCINC90LDRh9Cw0LvRjNC90L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE2MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjE2NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgtC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTcxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0YHQvtGF0YDQsNC90LjRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE4MiBidWlsdGluL3N0YXNoLmM6MTE5MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMAorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTMKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0YXRgNCw0L3QuNGC0Ywg0YLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyMTkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMzMKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjY4IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzM3Cittc2dpZCAiQ2FuJ3QgdXNlIC0tcGF0Y2ggYW5kIC0taW5jbHVkZS11bnRyYWNrZWQgb3IgLS1hbGwgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCAtLXBhdGNoINC4IC0taW5jbHVkZS11bnRyYWNrZWQg0LjQu9C4IC0tYWxsINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyODQKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICLQktC+0LfQvNC+0LbQvdC+LCDQstGLINC30LDQsdGL0LvQuCDQstGL0L/QvtC70L3QuNGC0YwgwqtnaXQgYWRkwrs/IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI5OSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NQorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAi0J3QtdGCINC70L7QutCw0LvRjNC90YvRhSDQuNC30LzQtdC90LXQvdC40Lkg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMwNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1MAorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINGB0L/RgNGP0YLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINGC0LXQutGD0YnQuNC5INGB0YLQsNGC0YPRgSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICLQoNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQuCDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdC00LXQutGB0LAg0YHQvtGF0YDQsNC90LXQvdGLICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQzMCBnaXQtbGVnYWN5LXN0YXNoLnNoOjM4NAorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NSBidWlsdGluL3N0YXNoLmM6MTUwMQorbXNnaWQgImtlZXAgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjcgYnVpbHRpbi9zdGFzaC5jOjE1MDMKK21zZ2lkICJzdGFzaCBpbiBwYXRjaCBtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY4IGJ1aWx0aW4vc3Rhc2guYzoxNTA0Cittc2dpZCAicXVpZXQgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3MCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcyIGJ1aWx0aW4vc3Rhc2guYzoxNTA4Cittc2dpZCAiaW5jbHVkZSBpZ25vcmUgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTgKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE5Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKK21zZ3N0ciAiZ2l0IHN0cmlwc3BhY2UgWy1jIHwgLS1jb21tZW50LWxpbmVzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MzcKK21zZ2lkICJza2lwIGFuZCByZW1vdmUgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggY29tbWVudCBjaGFyYWN0ZXIiCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINC4INGD0LTQsNC70LjRgtGMINCy0YHQtSDRgdGC0YDQvtC60LgsINC90LDRh9C40L3QsNGO0YnQuNC10YHRjyDRgSDRgdC40LzQstC+0LvQsCDQutC+0LzQvNC10YLQsNGA0LjRjyIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6NDAKK21zZ2lkICJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBzcGFjZSB0byBlYWNoIGxpbmUiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0L/QtdGA0LXQtCDQutCw0LbQtNC+0Lkg0YHRgtGA0L7QutC+0Lkg0YHQuNC80LLQvtC7INC60L7QvNC80LXRgtCw0YDQuNGPINC4INC/0YDQvtCx0LXQuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGluZyBhIGZ1bGwgcmVmIG5hbWUsIGdvdCAlcyIKK21zZ3N0ciAi0J7QttC40LTQsNC70L7RgdGMINC/0L7Qu9C90L7QtSDQuNC80Y8g0YHRgdGL0LvQutC4LCDQsCDQv9C+0LvRg9GH0LXQvdC+ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjIKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdGA0LXQt9Cw0YLRjCDQvtC00LjQvSDQutC+0LzQv9C+0L3QtdC90YIgdXJsIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM2NworbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgItCw0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0Lkg0YHQuNC80LLQvtC7INC00LvRjyDQvtGC0L3QvtGB0LjRgtC10LvRjNC90YvRhSDQv9GD0YLQtdC5IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEzCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD080L/Rg9GC0Yw+XSBbPNC/0YPRgtGMPuKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NzAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYyNworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIlVSTCDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPINC/0L4g0L/Rg9GC0Lggwqslc8K7INC90LUg0L3QsNC50LTQtdC9INCyIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgd2hpbGUgcmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgc3VibW9kdWxlcyBvZiAlc1xuIgorIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2MgorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNDkKK21zZ2lkICJSZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2OQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi0KHQsdC+0Lkg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQsNC00YDQtdGB0LAg0LTQu9GPINC/0YPRgtC4INC/0L7QtNC80L7QtNGD0LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GMIMKrJXPCuyAoJXMpINC30LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDQvSDQv9C+INC/0YPRgtC4IMKrJXPCu1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICLQstC90LjQvNCw0L3QuNC1OiDQv9GA0LXQtNC/0L7Qu9Cw0LPQsNC10LzRi9C5INGA0LXQttC40Lwg0L7QsdC90L7QstC70LXQvdC40Y8g0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgItCh0LHQvtC5INGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0YDQtdC20LjQvNCwINC+0LHQvdC+0LLQu9C10L3QuNGPINC00LvRjyDQv9GD0YLQuCDQv9C+0LTQvNC+0LTRg9C70Y8gwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzA3Cittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgItCd0LUg0LLRi9Cy0L7QtNC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDQuNC90LjRhtC40LDQu9C40LfQsNGG0LjQuCDQv9C+0LTQvNC+0LTRg9C70Y8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPHBhdGg+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtSDQvdCw0LnQtNC10L3QviDRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUg0L/QvtC00LzQvtC00YPQu9C10Lkg0LIgLmdpdG1vZHVsZXMg0LTQu9GPINC/0YPRgtC4IMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0LggSEVBRCDRgdGB0YvQu9C60YMg0LLQvdGD0YLRgNC4INC/0L7QtNC80L7QtNGD0LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NTAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC50YLQuCDQstCz0LvRg9Cx0Ywg0L/QvtC00LzQvtC00YPQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE4NQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICLQndC1INCy0YvQstC+0LTQuNGC0Ywg0YHRgtCw0YLRg9GBINC/0L7QtNC80L7QtNGD0LvRjyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3NQorbXNnaWQgIiIKKyJVc2UgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaW5zdGVhZCBvZiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3VibW9kdWxlICIKKyJIRUFEIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LrQvtC80LzQuNGCINGF0YDQsNC90Y/RidC40LnRgdGPINCyINC40L3QtNC10LrRgdC1INCy0LzQtdGB0YLQviDQutC+0LzQvNC40YLQsCDRhdGA0LDQvdGP0YnQtdCz0L7RgdGPINCyIEhFQUQg0L/QvtC00LzQvtC00YPQu9GPIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc2Cittc2dpZCAicmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICLQv9GA0L7RhdC+0LTQuNGC0Ywg0LLQs9C70YPQsdGMINCy0LvQvtC20LXQvdC90YvRhSDQv9C+0LTQvNC+0LTRg9C70LXQuSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4MQorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzzQv9GD0YLRjD7igKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTA1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA80L/Rg9GC0Yw+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNDcKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDU0Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs80L/Rg9GC0Yw+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODYKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE4NworbXNnaWQgIlVucmVnaXN0ZXIgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTIKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPNC/0YPRgtGMPuKApl1dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIwNgorbXNnaWQgIlVzZSAnLS1hbGwnIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30YPQudGC0LUgwqstLWFsbMK7LCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQtNC10LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0LLRgdC1INC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMDEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIgorbXNnc3RyICLQv9C+0LTQvNC+0LTRg9C70Y4gwqslc8K7INC90LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCDQsNC70YzRgtC10YDQvdCw0YLQuNCy0YM6ICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAi0JfQvdCw0YfQtdC90LjQtSDCqyVzwrsg0LTQu9GPINC/0LDRgNCw0LzQtdGC0YDQsCBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSDQvdC1INGA0LDQv9C+0LfQvdCw0L3QviIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICLQl9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8g0L/QsNGA0LDQvNC10YLRgNCwIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiDQvdC1INGA0LDQv9C+0LfQvdCw0L3QviIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzAKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAi0LrRg9C00LAg0LTQvtC70LbQtdC9INCx0YvRgtGMINGB0LrQu9C+0L3QuNGA0L7QstCw0L0g0L3QvtCy0YvQuSDQv9C+0LTQvNC+0LTRg9C70YwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzczCittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAi0LjQvNGPINC90L7QstC+0LPQviDQv9C+0LTQvNC+0LTRg9C70Y8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc2Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAidXJsINC+0YLQutGD0LTQsCDQtNC+0LvQttC10L0g0LHRi9C7INGB0LrQu9C+0L3QuNGA0L7QstCw0L0g0L3QvtCy0YvQuSDQv9C+0LTQvNC+0LTRg9C70YwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg0Cittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICLQs9C70YPQsdC40L3QsCDQtNC70Y8g0YfQsNGB0YLQuNGH0L3QvtCz0L4g0LrQu9C+0L3QsCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzEKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQstGL0LLQvtC00LjRgtGMINC/0YDQvtCz0YDQtdGB0YEg0LrQu9C+0L3QuNGA0L7QstCw0L3QuNGPIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD080L/Rg9GC0Yw+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlIDzRgNC10L/QvtC30LjRgtC+0YDQuNC5Pl0gWy0tbmFtZSA80LjQvNGPPl0gWy0tZGVwdGggPNCz0LvRg9Cx0LjQvdCwPl0gLS11cmwgPHVybD4gLS1wYXRoIDzQv9GD0YLRjD4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQutC70L7QvdC40YDQvtCy0LDRgtGMIMKrJXPCuyDQsiDQv9C+0LTQvNC+0LTRg9C70Ywg0L/QviDQv9GD0YLQuCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC60LDRgtCw0LvQvtCzINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8gwqslc8K7IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGNvbmZpZ3VyZWQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRjCDQv9C+INC/0YPRgtC4IMKrJXPCuyDQvdC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1NzQKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAi0JLQvtC30LzQvtC20L3Qviwg0LLRiyDRhdC+0YLQtdC70Lgg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIMKrdXBkYXRlIC0taW5pdMK7PyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICLQn9GA0L7Qv9GD0YHQuiDQvdC1INGB0LvQuNGC0L7Qs9C+INC/0L7QtNC80L7QtNGD0LvRjyAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgc3VibW9kdWxlICclcyciCittc2dzdHIgItCf0YDQvtC/0YPRgdC6INC/0L7QtNC80L7QtNGD0LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDCqyVzwrsuINCX0LDQv9C70LDQvdC40YDQvtCy0LDQvdCwINC/0L7QstGC0L7RgNC90LDRjyDQv9C+0L/Ri9GC0LrQsCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycgYSBzZWNvbmQgdGltZSwgYWJvcnRpbmciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDCqyVzwrsg0YHQviDQstGC0L7RgNC+0Lkg0L/QvtC/0YvRgtC60LgsINC+0YLQvNC10L3QsCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwOTIKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0L/Rg9GC0Ywg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NTMKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAi0L/Rg9GC0Ywg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSwg0LIg0L/RgNC10LTQtdC70LDRhSDQs9GA0LDQvdC40YYg0L/QvtC00LzQvtC00YPQu9GPIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg1NworbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0INC40LvQuCBub25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg2MworbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0YfQsNGB0YLQuNGH0L3Ri9C5INC60LvQvtC9LCDQvtCz0YDQsNC90LjRh9C10L3QvdGL0Lkg0YPQutCw0LfQsNC90L3Ri9C8INC60L7Qu9C40YfQtdGB0YLQstC+0Lwg0YDQtdC00LDQutGG0LjQuSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NjYKK21zZ2lkICJwYXJhbGxlbCBqb2JzIgorbXNnc3RyICLQv9Cw0YDQsNC70LvQtdC70YzQvdGL0LUg0LfQsNC00LDRh9C4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg2OAorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAi0LTQvtC70LbQtdC9INC70Lgg0LjQt9C90LDRh9Cw0LvRjNC90YvQuSDQv9GA0L7RhtC10YHRgSDQutC70L7QvdC40YDQvtCy0LDQvdC40Y8g0YHQu9C10LTQvtCy0LDRgtGMINGA0LXQutC+0LzQtdC90LTQsNGG0LjQuCDQviDRh9Cw0YHRgtC40YfQvdC+0YHRgtC4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg2OQorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgItCy0Ysg0LLRi9Cy0L7QtNC40YLRjCDQv9GA0L7Qs9GA0LXRgdGBINC60LvQvtC90LjRgNC+0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzYKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlX2Nsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlX2Nsb25lIFstLXByZWZpeD080L/Rg9GC0Yw+XSBbPNC/0YPRgtGMPuKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg5Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICLQv9C70L7RhdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0L/QsNGA0LDQvNC10YLRgNCwIHVwZGF0ZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgItCS0LXRgtC60LAg0L/QvtC00LzQvtC00YPQu9GPICglcykg0L3QsNGB0YLRgNC+0LXQvdCwINC90LAg0L3QsNGB0LvQtdC00L7QstCw0L3QuNC1INCy0LXRgtC60Lgg0LjQtyDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0LPQviDQv9GA0L7QtdC60YLQsCwg0L3QviDQvtC9INC90LUg0L3QsNGF0L7QtNC40YLRgdGPINC90Lgg0L3QsCDQvtC00L3QvtC5INCy0LXRgtC60LUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwOTMKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAi0YDQtdC60YPRgNGB0LjQstC90L4g0L/QviDQv9C+0LTQvNC+0LTRg9C70Y/QvCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwOTkKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXJzIFs8b3B0aW9ucz5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXJzIFs80L7Qv9GG0LjQuD5dIFs80L/Rg9GC0Yw+4oCmXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNTYKK21zZ2lkICJjaGVjayBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTU5Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE2NAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA80LjQvNGPPiBbPNC30L3QsNGH0LXQvdC40LU+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxNjUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTY2Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODUgZ2l0LXN1Ym1vZHVsZS5zaDoxNzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjM1IGdpdC5jOjQzMyBnaXQuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQv9Cw0YDQsNC80LXRgtGAIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIsKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L/QvtC00LrQvtC80LDQvdC00L7QuSBzdWJtb2R1bGUtLWhlbHBlciIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPNC+0L/RhtC40Lg+XSA80LjQvNGPPiBbPNGB0YHRi9C70LrQsD5dIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjkKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0YHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutCw0YUg0LTQu9GPINC90LXRgdC40LzQstC+0LvRjNC90YvRhSAo0L7RgtGB0L7QtdC00LjQvdC10L3QvdGL0YUpINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINGB0LjQvNCy0L7Qu9GM0L3Ri9C1INGB0YHRi9C70LrQuCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAi0YPQutC+0YDQvtGH0LXQvdC90YvQuSDQstGL0LLQvtC0INGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgItC/0YDQuNGH0LjQvdCwIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICLQv9GA0LjRh9C40L3QsCDQvtCx0L3QvtCy0LvQtdC90LjRjyIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPNGB0L7QvtCx0YnQtdC90LjQtT4gfCAtRiA80YTQsNC50Ls+XVxuXHRcdDzQuNC80Y8t0LzQtdGC0LrQsD4gWzzRgNC10LTQsNC60YbQuNGPPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjcKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA80LjQvNGPLdC80LXRgtC60Lg+4oCmIgorCisjOiBidWlsdGluL3RhZy5jOjI4Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLW5vLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgImdpdCB0YWcgLWwgWy1uWzzQutC+0LvQuNGH0LXRgdGC0LLQvj5dXSBbLS1jb250YWlucyA80LrQvtC80LzQuNGCPl0gWy0tbm8tY29udGFpbnMgPNC60L7QvNC80LjRgj5dIFstLXBvaW50cy1hdCA80L7QsdGK0LXQutGCPl1cblx0XHRbLS1mb3JtYXQ9PNGE0L7RgNC80LDRgj5dIFstLVtuby1dbWVyZ2VkIFs80LrQvtC80LzQuNGCPl1dIFs80YjQsNCx0LvQvtC9PuKApl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAKK21zZ2lkICJnaXQgdGFnIC12IFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IFstLWZvcm1hdD080YTQvtGA0LzQsNGCPl0gPNC40LzRjy3QvNC10YLQutC4PuKApiIKKworIzogYnVpbHRpbi90YWcuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLQvNC10YLQutCwICDCqyVzwrsg0L3QtSDQvdCw0LnQtNC10L3QsC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAi0JzQtdGC0LrQsCDCqyVzwrsg0YPQtNCw0LvQtdC90LAgKNCx0YvQu9CwICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIlxu0JLQstC10LTQuNGC0LUg0YHQvtC+0LHRidC10L3QuNC1INC00LvRjyDQvNC10YLQutC4OlxuICAlc1xu0KHRgtGA0L7QutC4LCDQvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEgwqslY8K7INCx0YPQtNGD0YIg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDQvdGLLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCittc2dzdHIgIlxu0JLQstC10LTQuNGC0LUg0YHQvtC+0LHRidC10L3QuNC1INC00LvRjyDQvNC10YLQutC4OlxuICAlc1xu0KHRgtGA0L7QutC4LCDQvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEgwqslY8K7INCx0YPQtNGD0YIg0L7RgdGC0LDQstC70LXQvdGLOyDQstGLINC80L7QttC10YLQtSDRg9C00LDQu9C40YLRjCDQuNGFINCy0YDRg9GH0L3Rg9GOLCDQtdGB0LvQuCDRhdC+0YLQuNGC0LUuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTkyCittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LTQv9C40YHQsNGC0Ywg0LzQtdGC0LrRgyIKKworIzogYnVpbHRpbi90YWcuYzoxOTQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3RhZy5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjI2Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGC0LjQvyDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi90YWcuYzoyNzgKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgItC90LXRgiDQvtC/0LjRgdCw0L3QuNGPINC80LXRgtC60Lg/IgorCisjOiBidWlsdGluL3RhZy5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LzQtdGC0LrQuCDQsdGL0LvQviDQvtGB0YLQsNCy0LvQtdC90L4g0LIgJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzozOTYKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAi0YHQv9C40YHQvtC6INC90LDQt9Cy0LDQvdC40Lkg0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi90YWcuYzozOTgKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAi0L/QtdGH0LDRgtCw0YLRjCA8bj4g0YHRgtGA0L7QuiDQvtC/0LjRgdCw0L3QuNGPINC+0YIg0LrQsNC20LTQvtC5INC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAwCittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAxCittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgItC/0YDQvtCy0LXRgNC40YLRjCDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3RhZy5jOjQwMworbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0YHQvtC30LTQsNC90LjRjyDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3RhZy5jOjQwNQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAi0LTQu9GPINCw0L3QvdC+0YLQuNGA0L7QstCw0L3QvdC+0Lkg0LzQtdGC0LrQuCDQvdGD0LbQvdC+INGB0L7QvtCx0YnQtdC90LjQtSIKKworIzogYnVpbHRpbi90YWcuYzo0MDcKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAi0L7Qv9C40YHQsNC90LjQtSDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3RhZy5jOjQwOQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0MTAKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICLQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3QsNGPINC4INC/0L7QtNC/0LjRgdCw0L3QvdCw0Y8g0YEg0L/QvtC80L7RidGM0Y4gR1BHINC80LXRgtC60LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC00YDRg9Cz0L7QuSDQutC70Y7RhyDQtNC70Y8g0L/QvtC00L/QuNGB0LDQvdC40Y8g0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICLQt9Cw0LzQtdC90LAg0LzQtdGC0LrQuCwg0LXRgdC70Lgg0L7QvdCwINGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL3RhZy5jOjQxNSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjkKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC20YPRgNC90LDQuyDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE3Cittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4INCy0YvQstC+0LTQsCDRgdC/0LjRgdC60LAg0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi90YWcuYzo0MTgKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YHQv9C40YHQvtC6INC80LXRgtC+0Log0L/QviDRgdGC0L7Qu9Cx0YbQsNC8IgorCisjOiBidWlsdGluL3RhZy5jOjQxOSBidWlsdGluL3RhZy5jOjQyMQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0LzQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LUg0YHQvtC00LXRgNC20LDRgiDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIwIGJ1aWx0aW4vdGFnLmM6NDIyCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDQvNC10YLQvtC6LCDQutC+0YLQvtGA0YvQtSDQvdC1INGB0L7QtNC10YDQttCw0YIg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL3RhZy5jOjQyMworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INGB0LvQuNGC0YvRhSDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL3RhZy5jOjQyNAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDQvdC1INGB0LvQuNGC0YvRhSDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDQvNC10YLQvtC6LCDQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQviDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi90YWcuYzo0NzIKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4g0LggLW4g0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDk0Cittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgItC+0L/RhtC40Y4gLW4g0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INCyINGA0LXQttC40LzQtSDRgdC/0LjRgdC60LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDk2Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAi0L7Qv9GG0LjRjiAtLWNvbnRhaW5zINC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQsiDRgNC10LbQuNC80LUg0YHQv9C40YHQutCwIgorCisjOiBidWlsdGluL3RhZy5jOjQ5OAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgItC+0L/RhtC40Y4gLS1uby1jb250YWlucyDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LIg0YDQtdC20LjQvNC1INGB0L/QuNGB0LrQsCIKKworIzogYnVpbHRpbi90YWcuYzo1MDAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAi0L7Qv9GG0LjRjiAtLXBvaW50cy1hdCDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LIg0YDQtdC20LjQvNC1INGB0L/QuNGB0LrQsCIKKworIzogYnVpbHRpbi90YWcuYzo1MDIKK21zZ2lkICItLW1lcmdlZCBhbmQgLS1uby1tZXJnZWQgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIGxpc3QgbW9kZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuCAtLW1lcmdlZCDQuCAtLW5vLW1lcmdlZCDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LIg0YDQtdC20LjQvNC1INGB0L/QuNGB0LrQsCIKKworIzogYnVpbHRpbi90YWcuYzo1MTMKK21zZ2lkICJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIi1GINC4IC1tINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKKworIzogYnVpbHRpbi90YWcuYzo1MzIKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgItC/0LXRgNC10LTQsNC90L4g0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQv9Cw0YDQsNC80LXRgtGA0L7QsiIKKworIzogYnVpbHRpbi90YWcuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIsKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQvtC/0YPRgdGC0LjQvNGL0Lwg0LjQvNC10L3QtdC8INC80LXRgtC60LguIgorCisjOiBidWlsdGluL3RhZy5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0LzQtdGC0LrQsCDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL3RhZy5jOjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgItCc0LXRgtC60LAgwqslc8K7INC+0LHQvdC+0LLQu9C10L3QsCAo0LHRi9C70LAgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDAKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0KDQsNGB0L/QsNC60L7QstC60LAg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQutCw0YLQsNC70L7QsyAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YTQsNC50LsgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDRhNCw0LnQuyAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTQgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0LrQsNGC0LDQu9C+0LMgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgbXRpbWUgaW4gJyVzJyAiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAgbXRpbWUg0LIgwqslc8K7ICIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNTMKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHRgtCw0YLQuNGB0YLQuNC60Lgg0LrQsNGC0LDQu9C+0LPQsCDQvdC1INC40LfQvNC10L3Rj9C10YLRgdGPINC/0L7RgdC70LUg0LTQvtCx0LDQstC70LXQvdC40Y8g0L3QvtCy0L7Qs9C+INGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTY2Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHRgtCw0YLQuNGB0YLQuNC60Lgg0LrQsNGC0LDQu9C+0LPQsCDQvdC1INC40LfQvNC10L3Rj9C10YLRgdGPINC/0L7RgdC70LUg0LTQvtCx0LDQstC70LXQvdC40Y8g0L3QvtCy0L7Qs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTc5Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHRgtCw0YLQuNGB0YLQuNC60Lgg0LrQsNGC0LDQu9C+0LPQsCDQuNC30LzQtdC90Y/QtdGC0YHRjyDQv9C+0YHQu9C1INC00L7QsdCw0LLQu9C10L3QuNGPINC90L7QstC+0LPQviDRhNCw0LnQu9CwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5MAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINGB0YLQsNGC0LjRgdGC0LjQutC4INC60LDRgtCw0LvQvtCz0LAg0LjQt9C80LXQvdGP0LXRgtGB0Y8g0L/QvtGB0LvQtSDQtNC+0LHQsNCy0LvQtdC90LjRjyDQvdC+0LLQvtCz0L4g0YTQsNC50LvQsCDQstC90YPRgtGA0Lgg0L/QvtC00LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDEKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINGB0YLQsNGC0LjRgdGC0LjQutC4INC60LDRgtCw0LvQvtCz0LAg0L3QtSDQuNC30LzQtdC90Y/QtdGC0YHRjyDQv9C+0YHQu9C1INGD0LTQsNC70LXQvdC40Y8g0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHRgtCw0YLQuNGB0YLQuNC60Lgg0LrQsNGC0LDQu9C+0LPQsCDQvdC1INC40LfQvNC10L3Rj9C10YLRgdGPINC/0L7RgdC70LUg0YPQtNCw0LvQtdC90LjRjyDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMQorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIE9LIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU4OQorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1pbmRleCBbPNC+0L/RhtC40Lg+XSBbLS1dIFs80YTQsNC50Ls+4oCmXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzEKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgItC/0YDQvtC00L7Qu9C20LjRgtGMINC+0LHQvdC+0LLQu9C10L3QuNC1LCDQtNCw0LbQtSDQtdGB0LvQuCDQuNC90LTQtdC60YEg0YLRgNC10LHRg9C10YIg0L7QsdC90L7QstC70LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc0Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgItC+0LHQvdC+0LLQu9C10L3QuNC1OiDQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L/QvtC00LzQvtC00YPQu9C4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICLQvdC1INC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQvdC+0LLRi9C1INGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc5Cittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDRhNCw0LnQu9Cw0Lwg0LfQsNC80LXQvdGP0YLRjCDQutCw0YLQsNC70L7Qs9C4INC4INC90LDQvtCx0L7RgNC+0YIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgxCittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAi0LfQsNC80LXRh9Cw0YLRjCDRhNCw0LnQu9GLINC+0YLRgdGD0YLRgdGC0LLRg9GO0YnQuNC1INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgzCittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0YwsINC00LDQttC1INC10YHQu9C4INCyINC40L3QtNC10LrRgdC1INC40LzQtdGO0YLRgdGPINC90LUg0YHQu9C40YLRi9C1INC30LDQv9C40YHQuCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODYKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0YHRgtCw0YLRg9GB0LUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MAorbXNnaWQgImxpa2UgLS1yZWZyZXNoLCBidXQgaWdub3JlIGFzc3VtZS11bmNoYW5nZWQgc2V0dGluZyIKK21zZ3N0ciAi0LrQsNC6IC0tcmVmcmVzaCwg0L3QviDQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L3QsNGB0YLRgNC+0LnQutGDIGFzc3VtZS11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk0Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPNGA0LXQttC40Lwg0LTQvtGB0YLRg9C/0LA+LDzQvtCx0YrQtdC60YI+LDzQv9GD0YLRjD4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk1Cittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINGD0LrQsNC30LDQvdC90YPRjiDQt9Cw0L/QuNGB0Ywg0LIg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDUKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgItC/0L7QvNC10YLQuNGC0Ywg0YTQsNC50LvRiyDQutCw0LogwqvQvdC1INC40LfQvNC10L3QtdC90L3Ri9C1wrsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwOAorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAi0YPQsdGA0LDRgtGMINC/0L7QvNC10YLQutGDIGFzc3VtZWQtdW5jaGFuZ2VkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTEKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICLQv9C+0LzQtdGC0LjRgtGMINGE0LDQudC70Ysg0LrQsNC6IMKr0YLQvtC70YzQutC+INCyINC40L3QtNC10LrRgdC1wrsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICLRg9Cx0YDQsNGC0Ywg0L/QvtC80LXRgtC60YMgc2tpcC13b3JrdHJlZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgItGC0L7Qu9GM0LrQviDQtNC+0LHQsNCy0LjRgtGMINCyINC40L3QtNC10LrRgTsg0L3QtSDQtNC+0LHQsNCy0LvRj9GC0Ywg0YHQvtC00LXRgNC20LjQvNC+0LUg0LIg0LHQsNC30YMg0LTQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxOQorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINGD0LrQsNC30LDQvdC90YvQtSDQv9GD0YLQuCwg0LTQsNC20LUg0LXRgdC70Lgg0L7QvdC4INGB0YPRidC10YHRgtCy0YPRjtGCINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMQorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAi0YEg0L7Qv9GG0LjQtdC5IC0tc3RkaW46INGB0YLRgNC+0LrQuCDQvdCwINCy0LLQvtC00LUg0L7RgtC00LXQu9GP0Y7RgtGB0Y8g0J3Qo9Cb0JXQktCr0Jwg0LHQsNC50YLQvtC8IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjMKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0YHQv9C40YHQvtC6INC+0LHQvdC+0LLQu9GP0LXQvNGL0YUg0L/Rg9GC0LXQuSDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjcKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQt9Cw0L/QuNGB0Lgg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCDQsiDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzMQorbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAi0LfQsNC90L7QstC+INC30LDQv9C+0LvQvdC40YLRjCDQuNC90LTQtdC60YEgIzIg0LggIzMg0LTQu9GPINGD0LrQsNC30LDQvdC90YvRhSDQv9GD0YLQtdC5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzUKK21zZ2lkICJvbmx5IHVwZGF0ZSBlbnRyaWVzIHRoYXQgZGlmZmVyIGZyb20gSEVBRCIKK21zZ3N0ciAi0L7QsdC90L7QstC40YLRjCDRgtC+0LvRjNC60L4g0LfQsNC/0LjRgdC4LCDQutC+0YLQvtGA0YvQtSDQvtGC0LvQuNGH0LDRjtGC0YHRjyDQvtGCIEhFQUQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzOQorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRhNCw0LnQu9GLLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDIKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgItCy0YvQstC10YHRgtC4INCy0YvQv9C+0LvQvdGP0LXQvNGL0LUg0LTQtdC50YHRgtCy0LjRjyDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ0Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIijQtNC70Y8g0LzQsNGI0LjQvdC90L7QuSDQvtCx0YDQsNCx0L7RgtC60LgpINC30LDQsdGL0YLRjCDRgdC+0YXRgNCw0L3QtdC90L3Ri9C1INC90LXRgNCw0LfRgNC10YjQtdC90L3Ri9C1INC60L7QvdGE0LvQuNC60YLRiyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ4Cittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0LjQvdC00LXQutGBINCyINGD0LrQsNC30LDQvdC90L7QvCDRhNC+0YDQvNCw0YLQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUwCittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQuNC70Lgg0LfQsNC/0YDQtdGC0LjRgtGMINGA0LDQt9C00LXQu9GM0L3Ri9C5INC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUyCittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGML9C+0YLQutC70Y7Rh9C40YLRjCDQutGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU0Cittc2dpZCAidGVzdCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgItC/0YDQvtCy0LXRgNC40YLRjCwg0YfRgtC+INGE0LDQudC70L7QstCw0Y8g0YHQuNGB0YLQtdC80LAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC60Y3RiCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTYKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQutGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiDQsdC10Lcg0L/RgNC+0LLQtdGA0LrQuCDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTgKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAi0LfQsNC/0LjRgdCw0YLRjCDQuNC90LTQtdC60YEsINC00LDQttC1INC10YHQu9C4INC+0L0g0L3QtSDQv9C+0LzQtdGH0LXQvSDQutCw0Log0LjQt9C80LXQvdC10L3QvdGL0LkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MAorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIGZpbGUgc3lzdGVtIG1vbml0b3IiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0LjQu9C4INCy0YvQutC70Y7Rh9C40YLRjCDQvNC+0L3QuNGC0L7RgNC40L3QsyDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjIKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAi0L/QvtC80LXRgtC40YLRjCDRhNCw0LnQuyDQutCw0Log0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDQsiDQvNC+0L3QuNGC0L7RgNC1INGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80YsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NQorbXNnaWQgImNsZWFyIGZzbW9uaXRvciB2YWxpZCBiaXQiCittc2dzdHIgItGB0L3Rj9GC0Ywg0L/QvtC80LXRgtC60YMg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L7RgdGC0Lgg0LzQvtC90LjRgtC+0YDQtSDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNjgKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJlbmFibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgIGNvcmUuc3BsaXRJbmRleCDRg9GB0YLQsNC90L7QstC70LXQvSDQsiBmYWxzZTsg0YPQtNCw0LvQuNGC0LUg0LjQu9C4INC40LfQvNC10L3QuNGC0LUg0LXQs9C+LCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQstC60LvRjtGH0LjRgtGMINGA0LDQt9C00LXQu9C10L3QvdGL0Lkg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNzcKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgIGNvcmUuc3BsaXRJbmRleCDRg9GB0YLQsNC90L7QstC70LXQvSDQsiB0cnVlOyDRg9C00LDQu9C40YLQtSDQuNC70Lgg0LjQt9C80LXQvdC40YLQtSDQtdCz0L4sINC10YHQu9C4INCy0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INC+0YLQutC70Y7Rh9C40YLRjCDRgNCw0LfQtNC10LvQtdC90L3Ri9C5INC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTg4Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIGNvcmUudW50cmFja2VkQ2FjaGUg0YPRgdGC0LDQvdC+0LLQu9C10L0gdHJ1ZTsg0YPQtNCw0LvQuNGC0LUg0LjQu9C4INC40LfQvNC10L3QuNGC0LUg0LXQs9C+LCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQutGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTkyCittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICLQmtGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiDQvtGC0LrQu9GO0YfQtdC9IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDAKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCIKKyIgdG8gZW5hYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgY29yZS51bnRyYWNrZWRDYWNoZSDRg9GB0YLQsNC90L7QstC70LXQvSBmYWxzZTsg0YPQtNCw0LvQuNGC0LUg0LjQu9C4INC40LfQvNC10L3QuNGC0LUg0LXQs9C+LCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQstC60LvRjtGH0LjRgtGMINC60Y3RiCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGVuYWJsZWQgZm9yICclcyciCittc2dzdHIgItCa0Y3RiCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyINCy0LrQu9GO0YfQtdC9INC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMgorbXNnaWQgImNvcmUuZnNtb25pdG9yIGlzIHVuc2V0OyBzZXQgaXQgaWYgeW91IHJlYWxseSB3YW50IHRvIGVuYWJsZSBmc21vbml0b3IiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgY29yZS5mc21vbml0b3Ig0L3QtSDRg9GB0YLQsNC90L7QstC70LXQvTsg0YPRgdGC0LDQvdC+0LLQuNGC0LUg0LXQs9C+INC10YHQu9C4INCy0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INCy0LrQu9GO0YfQuNGC0Ywg0LzQvtC90LjRgtC+0YDQuNC90LMg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjE2Cittc2dpZCAiZnNtb25pdG9yIGVuYWJsZWQiCittc2dzdHIgItC80L7QvdC40YLQvtGA0LjQvdCzINGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80Ysg0LLQutC70Y7Rh9GR0L0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxOQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgItC/0LDRgNCw0LzQtdGC0YAgY29yZS5mc21vbml0b3Ig0YPRgdGC0LDQvdC+0LLQu9C10L07INGD0LTQsNC70LjRgtC1INC10LPQviDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQstGL0LrQu9GO0YfQuNGC0Ywg0LzQvtC90LjRgtC+0YDQuNC90LMg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjIzCittc2dpZCAiZnNtb25pdG9yIGRpc2FibGVkIgorbXNnc3RyICLQvNC+0L3QuNGC0L7RgNC40L3QsyDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLINCy0YvQutC70Y7Rh9GR0L0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPNC+0L/RhtC40Lg+XSAtZCA80LjQvNGPLdGB0YHRi9C70LrQuD4gWzzRgdGC0LDRgNC+0LUt0LfQvdCw0YfQtdC90LjQtT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs80L7Qv9GG0LjQuD5dICAgIDzQuNC80Y8t0YHRgdGL0LvQutC4PiA80L3QvtCy0L7QtS3Qt9C90LDRh9C10L3QuNC1PiBbPNGB0YLQsNGA0L7QtS3Qt9C90LDRh9C10L3QuNC1Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEyCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPNC+0L/RhtC40Lg+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NAorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRgdGB0YvQu9C60YMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMIDzQuNC80Y8t0YHRgdGL0LvQutC4PiDQsCDQvdC1INGC0L4sINC90LAg0YfRgtC+INC+0L3QsCDRg9C60LDQt9GL0LLQsNC10YIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgItCy0LLQvtC0INC+0YLQtNC10LvRkdC90L3Ri9C5INCd0KPQm9CV0JLQq9Cc0Jgg0YHQuNC80LLQvtC70LDQvNC4IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHQvdC+0LLQu9C10L3QuNGPINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NworbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNQorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0YHQtdGA0LLQtdGA0LDRhSDRgSDQvdGD0LvRjyIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjExCittc2dpZCAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxkaXI+IgorbXNnc3RyICJnaXQgdXBsb2FkLXBhY2sgWzzQvtC/0YbQuNC4Pl0gPNC60LDRgtCw0LvQvtCzPiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjIzIHQvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYzoxNworbXNnaWQgInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIKK21zZ3N0ciAi0LLRi9GF0L7QtCDQv9C+0YHQu9C1INC+0LHQvNC10L3QsCDQvtC00L3QuNC8INC30LDQv9GA0L7RgdC+0Lwv0L7RgtCy0LXRgtC+0LwiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAi0LLRi9GF0L7QtNC40YLRjCDRgdGA0LDQt9GDINC/0L7RgdC70LUg0L3QsNGH0LDQu9GM0L3QvtCz0L4g0L7QsdGK0Y/QstC70LXQvdC40Y8g0YHQv9C40YHQutCwINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICLQvdC1INC/0YDQvtCy0LXRgNGP0YLRjCA80LrQsNGC0LDQu9C+0LM+Ly5naXQvINC10YHQu9C4IDzQutCw0YLQsNC70L7Qsz4g0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC60LDRgtCw0LvQvtCz0L7QvCBHaXQiCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICLQv9GA0LXRgNCy0LDRgtGMINC/0LXRgNC10LTQsNGH0YMg0L/QvtGB0LvQtSA80LrQvtC7PiDRgdC10LrRg9C90LQg0L/RgNC+0YHRgtC+0Y8iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjIwCittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA80LrQvtC80LzQuNGCPuKApiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzYKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0L7QtNC10YDQttC40LzQvtC1INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3NyBidWlsdGluL3ZlcmlmeS10YWcuYzozOAorbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgdGL0YDQvtC5INCy0YvQstC+0LQg0YHRgtCw0YLRg9GB0LAg0L7RgiBncGciCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA80L/QsNC60LXRgj7igKYiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NQorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgItCx0YvRgtGMINC80L3QvtCz0L7RgdC70L7QstC90LXQtSIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY3Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGC0L7Qu9GM0LrQviDRgdGC0LDRgtC40YHRgtC40LrRgyIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIFstLWZvcm1hdD08Zm9ybWF0Pl0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTzRhNC+0YDQvNCw0YI+XSA80LzQtdGC0LrQsD7igKYiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM3Cittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC+0LTQtdGA0LbQuNC80L7QtSDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTgKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBbPNC+0L/RhtC40Lg+XSA80L/Rg9GC0Yw+IFs80YPQutCw0LfQsNGC0LXQu9GMLdC60L7QvNC80LjRgtCwPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOQorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIwCittc2dpZCAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbG9jayBbPNC+0L/RhtC40Lg+XSA80L/Rg9GC0Yw+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjEKK21zZ2lkICJnaXQgd29ya3RyZWUgbW92ZSA8d29ya3RyZWU+IDxuZXctcGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBtb3ZlIDzRgNCw0LHQvtGH0LjQuS3QutCw0YLQsNC70L7Qsz4gPNC90L7QstGL0Lkt0L/Rg9GC0Yw+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPG9wdGlvbnM+XSA8d29ya3RyZWU+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs80L7Qv9GG0LjQuD5dIDzRgNCw0LHQvtGH0LjQuS3QutCw0YLQsNC70L7Qsz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNAorbXNnaWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgdW5sb2NrIDzQv9GD0YLRjD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2MSBidWlsdGluL3dvcmt0cmVlLmM6ODkxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDRgNCw0LHQvtGH0LjRhSDQutCw0YLQsNC70L7Qs9C+0LIvJXM6INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutCw0YLQsNC70L7Qs9C+0LwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INGA0LDQsdC+0YfQuNGFINC60LDRgtCw0LvQvtCz0L7Qsi8lczog0YTQsNC50LsgZ2l0ZGlyINC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MSBidWlsdGluL3dvcmt0cmVlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDRgNCw0LHQvtGH0LjRhSDQutCw0YLQsNC70L7Qs9C+0LIvJXM6INC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGE0LDQudC7IGdpdGRpciAoJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICU8UFJJdU1BWD4gYnl0ZXMsIHJlYWQgIgorIiU8UFJJdU1BWD4pIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsC8lczog0L/RgNC+0YfQuNGC0LDQvdC+INC80LDQu9C+INC00LDQvdC90YvRhSAo0L7QttC40LTQsNC70L7RgdGMICU8UFJJdU1BWD4g0LHQsNC50YIsINC/0YDQvtGH0LjRgtCw0L3QviAlPFBSSXVNQVg+KSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0YDQsNCx0L7Rh9C40YUg0LrQsNGC0LDQu9C+0LPQvtCyLyVzOiDQvdC10LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDRhNCw0LnQuyBnaXRkaXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INGA0LDQsdC+0YfQuNGFINC60LDRgtCw0LvQvtCz0L7Qsi8lczogZ2l0ZGlyINGD0LrQsNC30YvQstCw0LXRgiDQvdCwINC90LXRgdGD0YnQtdGB0YLQstGD0Y7RidC10LUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC1IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY2Cittc2dpZCAicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0YPQtNCw0LvQtdC90L3Ri9GFINGA0LDQsdC+0YfQuNGFINC60LDRgtCw0LvQvtCz0L7QsiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2OAorbXNnaWQgImV4cGlyZSB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRgNCw0LHQvtGH0LjQtSDQutCw0YLQsNC70L7Qs9C4INGB0YLQsNGA0LXQtSDRh9C10LwgPNC00LDRgtCwLdC+0LrQvtC90YfQsNC90LjRjz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYnIHRvIG92ZXJyaWRlLCBvciAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQutCw0YLQsNC70L7QsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzIgYnVpbHRpbi93b3JrdHJlZS5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkwCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICLQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwIDzQstC10YLQutCwPiDQtNCw0LbQtSDQtdGB0LvQuCDQvtC90LAg0YPQttC1INCw0LrRgtC40LLQvdCwINCyINC00YDRg9Cz0L7QvCDRgNCw0LHQvtGH0LXRgdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTMKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQvdC+0LLRg9GOINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTUKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC40LvQuCDQv9C10YDQtdC50YLQuCDQvdCwINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTcKK21zZ2lkICJwb3B1bGF0ZSB0aGUgbmV3IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0L3QsNC/0L7Qu9C90LjRgtGMINC90L7QstGL0Lkg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0OTgKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAi0LTQtdGA0LbQsNGC0Ywg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90L3Ri9C8IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LjRgtGMINGA0LXQttC40Lwg0L7RgtGB0LvQtdC20LjQstCw0L3QuNGPINCy0LXRgtC60LggKNGB0LzQvtGC0YDQuNGC0LUgZ2l0LWJyYW5jaCgxKSkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDQKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi0L/Ri9GC0LDRgtGM0YHRjyDQvdCw0LnRgtC4INGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDQuNC80LXQvdC4INC90L7QstC+0Lkg0LLQtdGC0LrQuCDRgSDQuNC80LXQvdC10Lwg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxMgorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiDQuCAtLWRldGFjaCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjU3MworbXNnaWQgIi0tW25vLV10cmFjayBjYW4gb25seSBiZSB1c2VkIGlmIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIgorbXNnc3RyICItLVtuby1ddHJhY2sg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INC60L7Qs9C00LAg0LLRiyDRgdC+0LfQtNCw0ZHRgtC1INC90L7QstGD0Y4g0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3MworbXNnaWQgInJlYXNvbiBmb3IgbG9ja2luZyIKK21zZ3N0ciAi0L/RgNC40YfQuNC90LAg0LHQu9C+0LrQuNGA0L7QstC60LgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODUgYnVpbHRpbi93b3JrdHJlZS5jOjcxOCBidWlsdGluL3dvcmt0cmVlLmM6NzkyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGA0LDQsdC+0YfQuNC8INC60LDRgtCw0LvQvtCz0L7QvCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY4NyBidWlsdGluL3dvcmt0cmVlLmM6NzIwCittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgItCT0LvQsNCy0L3Ri9C5INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L0g0LjQu9C4INGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNC9IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIsKrJXPCuyDRg9C20LUg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC9LCDQv9GA0LjRh9C40L3QsDogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGxvY2tlZCIKK21zZ3N0ciAiwqslc8K7INGD0LbQtSDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICLCqyVzwrsg0L3QtSDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NjMKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzcxCittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzk0IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpZ3VyZSBvdXQgZGVzdGluYXRpb24gbmFtZSBmcm9tICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YXJnZXQgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTUKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBkaXJ0eSwgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biAnZ2l0IHN0YXR1cycgb24gJyVzJywgY29kZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAzCittc2dpZCAiZm9yY2UgcmVtb3ZhbCBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3QgcmVtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI4Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD080L/RgNC10YTQuNC60YE+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI4Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI80L/RgNC10YTQuNC60YE+LyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjkKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgItCy0YvQstC10YHRgtC4INC+0LHRitC10LrRgiDQtNC10YDQtdCy0LAg0LTQu9GPINC/0L7QtNC60LDRgtCw0LvQvtCz0LAg0YEgPNC/0YDQtdGE0LjQutGBPiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzEKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0YLQvtC70YzQutC+INC/0YDQuCDQvtGC0LvQsNC00LrQtSIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgItCf0YDQsNCy0LAg0LTQvtGB0YLRg9C/0LAg0Log0LLQsNGI0LXQvNGDINC60LDRgtCw0LvQvtCz0YMg0YHQvtC60LXRgtC+0LIg0YHQu9C40YjQutC+0Lwg0YHQstC+0LHQvtC00L3Rizsg0LTRgNGD0LPQtSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Lgg0LzQvtCz0YPQuCDRh9C40YLQsNGC0Ywg0LLQsNGI0Lgg0LfQsNC60Y3RiNC40YDQvtCy0LDQvdC90YvQtSDQv9Cw0YDQvtC70Lgg0LTQvtGB0YLRg9C/0LAuINCe0LHQtNGD0LzQsNC50YLQtSDQt9Cw0L/Rg9GB0Log0LrQvtC80LDQvdC00Ys6XG5cblx0Y2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDQvtGC0LvQsNC00L7Rh9C90YvRhSDRgdC+0L7QsdGJ0LXQvdC40Lkg0L3QsCBzdGRlcnIiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIG5vdCBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICIiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNjIKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiCittc2dzdHIgIiIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjcKK21zZ2lkICJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE5Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhZHZlcnRpc2luZyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS1iYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08cGF0aD5dIFstLXdvcmstdHJlZT08cGF0aD5dIFstLW5hbWVzcGFjZT08bmFtZT5dXG4iCisiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iCittc2dzdHIgImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPNC/0YPRgtGMPl0gWy1jIDzQuNC80Y8+PTzQt9C90LDRh9C10L3QuNC1Pl1cbiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz080L/Rg9GC0Yw+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLWJhcmVdXG4gICAgICAgICAgIFstLWdpdC1kaXI9PNC/0YPRgtGMPl0gWy0td29yay10cmVlPTzQv9GD0YLRjD5dIFstLW5hbWVzcGFjZT080LjQvNGPPl1cbiAgICAgICAgICAgPNC60L7QvNCw0L3QtNCwPiBbPNCw0YDQs9GD0LzQtdC90YLRiz5dIgorCisjOiBnaXQuYzozNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuIgorbXNnc3RyICLCq2dpdCBoZWxwIC3QsMK7INC4IMKrZ2l0IGhlbHAgLWfCuyDQstGL0LLQvtC00LjRgiDRgdC/0LjRgdC+0Log0LTQvtGB0YLRg9C/0L3Ri9GFINC/0L7QtNC60L7QvNCw0L3QtCDQuFxu0L3QtdC60L7RgtC+0YDRi9C1INGA0YPQutC+0LLQvtC00YHRgtCy0LAg0L/QviDRgtC10LzQsNC8LiDQl9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgaGVscCA80LrQvtC80LDQvdC00LA+wrsg0LjQu9C4XG7Cq2dpdCBoZWxwIDzRgtC10YDQvNC40L0+wrssINGH0YLQvtCx0Ysg0L/RgNC+0YfQtdGB0YLRjCDQviDQutC+0L3QutGA0LXRgtC90YvRhSDQv9C+0LTQutC+0LzQsNC90LTQtSDQuNC70Lgg0YLQtdC80LUuIgorCisjOiBnaXQuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoxOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbmFtZXNwYWNlIGdpdmVuIGZvciAtLW5hbWVzcGFjZVxuIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByZWZpeCBnaXZlbiBmb3IgLS1zdXBlci1wcmVmaXhcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzoyNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLUNcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiIKKyJZb3UgY2FuIHVzZSAnIWdpdCcgaW4gdGhlIGFsaWFzIHRvIGRvIHRoaXMiCittc2dzdHIgIiIKKworIzogZ2l0LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGFsaWFzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGFsaWFzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo0NTkKK21zZ2lkICJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo0NjEKK21zZ2lkICJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogZ2l0LmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIGxvb3AgZGV0ZWN0ZWQ6IGV4cGFuc2lvbiBvZiAnJXMnIGRvZXMgbm90IHRlcm1pbmF0ZTolcyIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1c2FnZTogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmVnYXRpdmUgdmFsdWUgZm9yIGh0dHAucG9zdGJ1ZmZlcjsgZGVmYXVsdGluZyB0byAlZCIKK21zZ3N0ciAi0L7RgtGA0LjRhtCw0YLQtdC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSBodHRwLnBvc3RidWZmZXI7INC40YHQv9C+0LvRjNC30YPRjiDRgdGC0LDQvdC00LDRgNGC0L3QvtC1INC30L3QsNGH0LXQvdC40LUgJWQiCisKKyM6IGh0dHAuYzozOTkKK21zZ2lkICJEZWxlZ2F0aW9uIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjIyLjAiCittc2dzdHIgItCU0LXQu9C10LPQsNGG0LjRjyDQv9GA0L7QstC10YDQutC4INC/0L7Qu9C90L7QvNC+0YfQuNC5INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyDRgSBjVVJMIDwgNy4yMi4wIgorCisjOiBodHRwLmM6NDA4Cittc2dpZCAiUHVibGljIGtleSBwaW5uaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy40NC4wIgorbXNnc3RyICJQdWJsaWMga2V5IHBpbm5pbmcg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPINGBIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6OTQ5Cittc2dpZCAiUHJvdG9jb2wgcmVzdHJpY3Rpb25zIG5vdCBzdXBwb3J0ZWQgd2l0aCBjVVJMIDwgNy4xOS40IgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIFNTTCBiYWNrZW5kICclcycuIFN1cHBvcnRlZCBTU0wgYmFja2VuZHM6IgorbXNnc3RyICIiCisKKyM6IGh0dHAuYzoxMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgU1NMIGJhY2tlbmQgdG8gJyVzJzogY1VSTCB3YXMgYnVpbHQgd2l0aG91dCBTU0wgYmFja2VuZHMiCittc2dzdHIgIiIKKworIzogaHR0cC5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBhbHJlYWR5IHNldCIKK21zZ3N0ciAiIgorCisjOiBodHRwLmM6MTk2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINCx0LDQt9C+0LLRi9C5IHVybCDQuNC3INC/0LXRgNC10LDQtNGA0LXRgdCw0YbQuNC4OlxuICDQt9Cw0L/RgNC+0YjQtdC90L46ICVzXG4gICDQv9C10YDQtdCw0LTRgNC10YHQvtCy0LDQvdC+OiAlcyIKKworIzogcmVtb3RlLWN1cmwuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaW5mby9yZWZzIG5vdCB2YWxpZDogaXMgdGhpcyBhIGdpdCByZXBvc2l0b3J5PyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjM1NQorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBleHBlY3RlZCBzZXJ2aWNlLCBnb3QgZmx1c2ggcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBnb3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICLCqyVzwrsg0L3QtdC00L7RgdGC0YPQv9C90L46ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAi0L/QtdGA0LXQsNC00YDQtdGB0LDRhtC40Y8g0L3QsCAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo1ODQKK21zZ2lkICJzaG91bGRuJ3QgaGF2ZSBFT0Ygd2hlbiBub3QgZ2VudGxlIG9uIEVPRiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjY2NAorbXNnaWQgInVuYWJsZSB0byByZXdpbmQgcnBjIHBvc3QgZGF0YSAtIHRyeSBpbmNyZWFzaW5nIGh0dHAucG9zdEJ1ZmZlciIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJSUEMgZmFpbGVkOyAlcyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjc2NAorbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjEwMTQKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDI4Cittc2dpZCAiZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjEwNzYKK21zZ2lkICJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMTIwIHJlbW90ZS1jdXJsLmM6MTEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhL3JlZiwgZ290ICclcyciCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMTM4IHJlbW90ZS1jdXJsLmM6MTI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE3NAorbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2MAorbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMzkyCittc2dpZCAicmVtb3RlLWN1cmw6IGVycm9yIHJlYWRpbmcgY29tbWFuZCBzdHJlYW0gZnJvbSBnaXQiCittc2dzdHIgIiIKKworIzogcmVtb3RlLWN1cmwuYzoxMzk5Cittc2dpZCAicmVtb3RlLWN1cmw6IGZldGNoIGF0dGVtcHRlZCB3aXRob3V0IGEgbG9jYWwgcmVwbyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUtY3VybC5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IgorbXNnc3RyICIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oOjYxCittc2dpZCAiYXJncyIKK21zZ3N0ciAi0LDRgNCz0YPQvNC10L3RgtGLIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo2MgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgItGE0LjQu9GM0YLRgNCw0YbQuNGPINC+0LHRitC10LrRgtC+0LIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNzAKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAi0LTQsNGC0LAt0L7QutC+0L3Rh9Cw0L3QuNGPIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTg0Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICLQvdC40YfQtdCz0L4g0L3QtSDQtNC10LvQsNC10YIgKNC+0YHRgtCw0LLQu9C10L3QviDQtNC70Y8g0L7QsdGA0LDRgtC90L7QuSDRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuCkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDQKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgItCx0YvRgtGMINC80L3QvtCz0L7RgdC70L7QstC90LXQtSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMwNgorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgItGC0LjRhdC40Lkg0YDQtdC20LjQvCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMgorbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgPG4+INGG0LjRhNGAINC00LvRjyDQstGL0LLQvtC00LAgU0hBLTEiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzEKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICLQutCw0Log0YPQtNCw0LvRj9GC0Ywg0L/RgNC+0LHQtdC70Ysg0LggI9C60L7QvNC80LXQvdGC0LDRgNC40Lgg0LjQtyDRgdC+0L7QsdGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgItC60LvRjtGHIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICLQuNC80Y8g0L/QvtC70Y8sINC/0L4g0LrQvtGC0L7RgNC+0LzRgyDQstGL0L/QvtC70L3QuNGC0Ywg0YHQvtGA0YLQuNGA0L7QstC60YMiCisKKyM6IHJlcmVyZS5oOjQ0Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINC40L3QtNC10LrRgSDRgSDQv9C+0LzQvtGJ0YzRjiDQv9C10YDQtdC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQsCwg0LXRgdC70Lgg0LLQvtC30LzQvtC20L3QviIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QuNC1INGB0L7QtNC10YDQttC40LzQvtCz0L4g0YTQsNC50LvQsCDQsiDQuNC90LTQtdC60YEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LXQvdC40LUg0YHQtdGA0LjQuCDQv9Cw0YLRh9C10Lkg0LjQtyDQv9C+0YfRgtC+0LLQvtCz0L4g0YHQvtC+0LHRidC10L3QuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgItCQ0L3QvdC+0YLQuNGA0L7QstCw0L3QuNC1INGB0YLRgNC+0Log0YTQsNC50LvQsCDQuNC90YTQvtGA0LzQsNGG0LjQtdC5INC+INC60L7QvNC80LjRgtCw0YUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUzCittc2dpZCAiQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQn9GA0LjQvNC10L3QtdC90LjQtSDQv9Cw0YLRh9CwINC6INGE0LDQudC70LDQvCDQuC/QuNC70Lgg0LjQvdC00LXQutGB0YMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU0Cittc2dpZCAiSW1wb3J0IGEgR05VIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdCIKK21zZ3N0ciAi0JjQvNC/0L7RgNGC0LjRgNC+0LLQsNC90LjQtSBHTlUgQXJjaCDRgNC10L/QvtC30LjRgtC+0YDQuNGPINCyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDQsNGA0YXQuNCy0LAg0YTQsNC50LvQvtCyINC40Lcg0YPQutCw0LfQsNC90L3QvtCz0L4g0LTQtdGA0LXQstCwIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NgorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgItCS0YvQv9C+0LvQvdC10L3QuNC1INC00LLQvtC40YfQvdC+0LPQviDQv9C+0LjRgdC60LAg0LrQvtC80LzQuNGC0LAsINC60L7RgtC+0YDRi9C5INCy0L3QvtGB0LjRgiDQvtGI0LjQsdC60YMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU3Cittc2dpZCAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIgorbXNnc3RyICLQn9C+0LrQsNC3INGA0LXQtNCw0LrRhtC40Lgg0Lgg0LDQstGC0L7RgNCwINC/0L7RgdC70LXQtNC90LXQs9C+INC40LfQvNC10L3QuNCy0YjQtdCz0L4g0LrQsNC20LTRg9GOINGB0YLRgNC+0LrRgyDRhNCw0LnQu9CwIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICLQktGL0LLQvtC0INGB0L/QuNGB0LrQsCwg0YHQvtC30LTQsNC90LjQtSDQuNC70Lgg0YPQtNCw0LvQtdC90LjQtSDQstC10YLQvtC6IgorCisjOiBjb21tYW5kLWxpc3QuaDo1OQorbXNnaWQgIk1vdmUgb2JqZWN0cyBhbmQgcmVmcyBieSBhcmNoaXZlIgorbXNnc3RyICLQn9C10YDQtdC80LXRidC10L3QuNC1INC+0LHRitC10LrRgtC+0LIg0Lgg0YHRgdGL0LvQvtC6INC/0L4g0LDRgNGF0LjQstGDIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MAorbXNnaWQgIlByb3ZpZGUgY29udGVudCBvciB0eXBlIGFuZCBzaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMiCittc2dzdHIgItCS0YvQstC+0LQg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQuNC70Lgg0YLQuNC/0LAg0Lgg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0YDQsNC30LzQtdGA0LUg0LTQu9GPINC+0LHRitC10LrRgtC+0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgItCS0YvQstC+0LQg0LjQvdGE0L7RgNC80LDRhtC40Lgg0LjQtyBnaXRhdHRyaWJ1dGVzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MgorbXNnaWQgIkRlYnVnIGdpdGlnbm9yZSAvIGV4Y2x1ZGUgZmlsZXMiCittc2dzdHIgItCe0YLQu9Cw0LTQutCwINGE0LDQudC70L7QsiBnaXRpZ25vcmUgLyBleGNsdWRlIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworbXNnaWQgIlNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMiCittc2dzdHIgItCS0YvQstC+0LQg0LrQsNC90L7QvdC40YfQvdGL0YUg0LjQvNGR0L0g0Lgg0LDQtNGA0LXRgdC+0LIg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLINC60L7QvdGC0LDQutGC0L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgItCf0LXRgNC10LrQu9GO0YfQtdC90LjQtSDQstC10YLQvtC6INC40LvQuCDQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNC1INGE0LDQudC70L7QsiDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBjb21tYW5kLWxpc3QuaDo2NQorbXNnaWQgIkNvcHkgZmlsZXMgZnJvbSB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNC90LjQtSDRhNCw0LnQu9C+0LIg0LjQtyDQuNC90LTQtdC60YHQsCDQsiDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyIKKworIzogY29tbWFuZC1saXN0Lmg6NjYKK21zZ2lkICJFbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgbmFtZSBpcyB3ZWxsIGZvcm1lZCIKK21zZ3N0ciAi0KPQtNC+0YHRgtC+0LLQtdGA0LjRgtGM0YHRjywg0YfRgtC+INC40LzRjyDRgdGB0YvQu9C60Lgg0L/RgNCw0LLQuNC70YzQvdC+INGB0YTQvtGA0LzQuNGA0L7QstCw0L3QviIKKworIzogY29tbWFuZC1saXN0Lmg6NjcKK21zZ2lkICJGaW5kIGNvbW1pdHMgeWV0IHRvIGJlIGFwcGxpZWQgdG8gdXBzdHJlYW0iCittc2dzdHIgItCf0L7QuNGB0Log0LrQvtC80LzQuNGC0L7QsiDQutC+0YLQvtGA0YvQtSDQtdGJ0LUg0L3QtSDQv9GA0LjQvNC10L3QtdC90Ysg0LLRi9GI0LXRgdGC0L7Rj9GJ0LjQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC10LwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgItCf0YDQuNC80LXQvdC10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSwg0YHQtNC10LvQsNC90L3Ri9GFINCyINC60LDQutC+0Lwt0YLQviDRgdGD0YnQtdGB0YLQstGD0Y7RidC10Lwg0LrQvtC80LzQuNGC0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgItCT0YDQsNGE0LjRh9C10YHQutCw0Y8g0LDQu9GM0YLQtdGA0L3QsNGC0LjQstCwINC00LvRjyBnaXQtY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3MAorbXNnaWQgIlJlbW92ZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIg0LjQtyDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICLQmtC70L7QvdC40YDQvtCy0LDQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQsiDQvdC+0LLRi9C5INC60LDRgtCw0LvQvtCzIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MgorbXNnaWQgIkRpc3BsYXkgZGF0YSBpbiBjb2x1bW5zIgorbXNnc3RyICLQktGL0LLQvtC0INC00LDQvdC90YvRhSDQv9C+INC60L7Qu9C+0L3QutCw0LwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjczCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgItCX0LDQv9C40YHRjCDQuNC30LzQtdC90LXQvdC40Lkg0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgItCX0LDQv9C40YHRjCDQuCDQv9GA0L7QstC10YDQutCwIGNvbW1pdC1ncmFwaCDRhNCw0LnQu9C+0LIgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NQorbXNnaWQgIkNyZWF0ZSBhIG5ldyBjb21taXQgb2JqZWN0IgorbXNnc3RyICLQodC+0LfQtNCw0L3QuNC1INC90L7QstC+0LPQviDQvtCx0YrQtdC60YLQsCDQutC+0LzQvNC40YLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6NzYKK21zZ2lkICJHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC40LUg0Lgg0YPRgdGC0LDQvdC+0LLQutCwINCz0LvQvtCx0LDQu9GM0L3Ri9GFINC+0L/RhtC40Lkg0LjQu9C4INC+0L/RhtC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6NzcKK21zZ2lkICJDb3VudCB1bnBhY2tlZCBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgdGhlaXIgZGlzayBjb25zdW1wdGlvbiIKK21zZ3N0ciAi0J/QvtC00YHRh9C10YIg0LrQvtC70LjRh9C10YHRgtCy0LAg0L3QtdGD0L/QsNC60L7QstCw0L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiDQuCDQuNGFINC/0L7RgtGA0LXQsdC70LXQvdC40Y8g0LTQuNGB0LrQsCIKKworIzogY29tbWFuZC1saXN0Lmg6NzgKK21zZ2lkICJSZXRyaWV2ZSBhbmQgc3RvcmUgdXNlciBjcmVkZW50aWFscyIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QuNC1INC4INGB0L7RhdGA0LDQvdC10L3QuNC1INGD0YfQtdGC0L3Ri9GFINC30LDQv9C40YHQtdC5INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAi0J/QvtC80L7RidC90LjQuiDQtNC70Y8g0LLRgNC10LzQtdC90L3QvtCz0L4g0YXRgNCw0L3QtdC90LjRjyDQv9Cw0YDQvtC70LXQuSDQsiDQv9Cw0LzRj9GC0LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgItCf0L7QvNC+0YnQvdC40Log0LTQu9GPINGF0YDQsNC90LXQvdC40Y8g0YPRh9C10YLQvdGL0YUg0LfQsNC/0LjRgdC10Lkg0L3QsCDQtNC40YHQutC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo4MQorbXNnaWQgIkV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQiCittc2dzdHIgItCt0LrRgdC/0L7RgNGCINC10LTQuNC90YHRgtCy0LXQvdC90L7Qs9C+INC60L7QvNC80LjRgtCwINCyINCy0LjQtNC1INGA0LDQsdC+0YfQtdC5INC60L7Qv9C40LggQ1ZTIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MgorbXNnaWQgIlNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlIgorbXNnc3RyICLQodC/0LDRgdC10L3QuNC1INCy0LDRiNC40YUg0LTQsNC90L3Ri9GFINC40Lcg0LTRgNGD0LPQvtC5INCh0JrQkiDQutC+0YLQvtGA0YPRjiDQu9GO0LTQuCDQu9GO0LHRj9GCINC90LXQvdCw0LLQuNC00LXRgtGMIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MworbXNnaWQgIkEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0IgorbXNnc3RyICLQrdC80YPQu9GP0YLQvtGAINGB0LXRgNCy0LXRgNCwIENWUyDQtNC70Y8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4NAorbXNnaWQgIkEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdpdCByZXBvc2l0b3JpZXMiCittc2dzdHIgItCe0YfQtdC90Ywg0L/RgNC+0YHRgtC+0Lkg0YHQtdGA0LLQtdGAINC00LvRjyBHaXQg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBjb21tYW5kLWxpc3QuaDo4NQorbXNnaWQgIkdpdmUgYW4gb2JqZWN0IGEgaHVtYW4gcmVhZGFibGUgbmFtZSBiYXNlZCBvbiBhbiBhdmFpbGFibGUgcmVmIgorbXNnc3RyICLQn9GA0LjRgdCy0L7QtdC90LjQtSDQvtCx0YrQtdC60YLRgyDRg9C00L7QsdC+0YfQuNGC0LDQtdC80L7QtSDQuNC80Y8g0L3QsCDQvtGB0L3QvtCy0LUg0LTQvtGB0YLRg9C/0L3QvtC5INGB0YHRi9C70LrQuCIKKworIzogY29tbWFuZC1saXN0Lmg6ODYKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICLQktGL0LLQvtC0INGA0LDQt9C90LjRhtGLINC80LXQttC00YMg0LrQvtC80LzQuNGC0LDQvNC4LCDQutC+0LzQvNC40YLQvtC8INC4INGA0LDQsdC+0YfQuNC8INC60LDRgtCw0LvQvtCz0L7QvCDQuCDRgi7QtC4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICLQodGA0LDQstC90LXQvdC40LUg0YHQtdC00LXRgNC20LjQvNC+0LPQviDRhNCw0LnQu9C+0LIg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDRgSDRhNCw0LnQu9Cw0LzQuCDQsiDQuNC90LTQtdC60YHQtSIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICLQodGA0LDQstC90LXQvdC40LUg0LTQtdGA0LXQstCwINGE0LDQudC70L7QsiDRgSDRgNCw0LHQvtGH0LjQvCDQutCw0YLQsNC70L7Qs9C+0Lwg0LjQu9C4INC40L3QtNC10LrRgdC+0LwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgItCh0YDQsNCy0L3QtdC90LjQtSDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC4INGA0LXQttC40LzQsCDQtNCy0L7QuNGH0L3Ri9GFINC+0LHRitC10LrRgtC+0LIsINC90LDQudC00LXQvdC90YvRhSDQv9C+INC00LLRg9C8INC+0LHRitC10LrRgtCw0Lwg0LTQtdGA0LXQstCwIgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAi0J/QvtC60LDQtyDQuNC30LzQtdC90LXQvdC40Lkg0YEg0L/QvtC80L7RidGM0Y4g0YDQsNGB0L/RgNC+0YHRgtGA0LDQvdC10L3QvdGL0YUg0YPRgtC40LvQuNGCINGB0YDQsNCy0L3QtdC90LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAi0K3QutGB0L/QvtGA0YIg0LTQsNC90L3Ri9GFIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdC40Lkg0LjQvdGC0LXRgNGE0LXQudGBINC00LvRjyDQsdGL0YHRgtGA0L7Qs9C+INC40LzQv9C+0YDRgtCwINC00LDQvdC90YvRhSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkzCittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQvtCx0YrQtdC60YLQvtCyINC4INGB0YHRi9C70L7QuiDQuNC3INC00YDRg9Cz0L7Qs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk0Cittc2dpZCAiUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgItCf0L7Qu9GD0YfQtdC90LjQtSDQvdC10LTQvtGB0YLQsNGO0YnQuNGFINC+0LHRitC10LrRgtC+0LIg0LjQtyDQtNGA0YPQs9C+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgItCf0LXRgNC10LfQsNC/0LjRgdGMINCy0LXRgtC+0LoiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk2Cittc2dpZCAiUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLQodC+0LfQtNCw0L3QuNC1INGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCDQtNC70Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk3Cittc2dpZCAiT3V0cHV0IGluZm9ybWF0aW9uIG9uIGVhY2ggcmVmIgorbXNnc3RyICLQktGL0LLQvtC0INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INC60LDQttC00L7QuSDRgdGB0YvQu9C60LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC60LAg0L/QsNGC0YfQtdC5INC00LvRjyDQvtGC0L/RgNCw0LLQutC4INC/0L4g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtC1IgorCisjOiBjb21tYW5kLWxpc3QuaDo5OQorbXNnaWQgIlZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDRgdCy0Y/Qt9C90L7RgdGC0Lgg0Lgg0LLQsNC70LjQtNC90L7RgdGC0Lgg0L7QsdGK0LXQutGC0L7QsiDQsiDQsdCw0LfQtSDQtNCw0L3QvdGL0YUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMAorbXNnaWQgIkNsZWFudXAgdW5uZWNlc3NhcnkgZmlsZXMgYW5kIG9wdGltaXplIHRoZSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLQntGH0LjRgdGC0LrQsCDQvdC10L3Rg9C20L3Ri9GFINGE0LDQudC70L7QsiDQuCDQvtC/0YLQuNC80LjQt9Cw0YbQuNGPINC70L7QutCw0LvRjNC90L7Qs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMQorbXNnaWQgIkV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlIgorbXNnc3RyICLQmNC30LLQu9C10YfQtdC90LjQtSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwINC60L7QvNC80LjRgtCwINC40Lcg0LDRgNGF0LjQstCwLCDRgdC+0LfQtNCw0L3QvdC+0LPQviDRgSDQv9C+0LzQvtGJ0YzRjiBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTAyCittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICLQktGL0LLQvtC0INGB0YLRgNC+0LosINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjRhSDRiNCw0LHQu9C+0L3RgyIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAi0J/QvtGA0YLQsNGC0LjQstC90YvQuSDQs9GA0LDRhNC40YfQtdGB0LrQuNC5INC40L3RgtC10YDRhNC10LnRgSDQtNC70Y8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDQKK21zZ2lkICJDb21wdXRlIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZSIKK21zZ3N0ciAi0JLRi9GH0LjRgdC70LXQvdC40LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQvtCx0YrQtdC60YLQsCDQuCDQstC+0LfQvNC+0LbQvdC+0LUg0YHQvtC30LTQsNC90LjQtSDQtNCy0L7QuNGH0L3QvtCz0L4g0L7QsdGK0LXQutGC0LAg0LjQtyDRhNCw0LnQu9CwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICLQntGC0L7QsdGA0LDQttC10L3QuNC1INGB0L/RgNCw0LLQvtGH0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4INC+IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA2Cittc2dpZCAiU2VydmVyIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgR2l0IG92ZXIgSFRUUCIKK21zZ3N0ciAi0KHQtdGA0LLQtdGA0L3QsNGPINGA0LXQsNC70LjQt9Cw0YbQuNGPINC/0YDQvtGC0L7QutC+0LvQsCBHaXQg0L3QsNC0IEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNworbXNnaWQgIkRvd25sb2FkIGZyb20gYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAiCittc2dzdHIgItCX0LDQs9GA0YPQt9C60LAg0LjQtyDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gR2l0INGBINC/0L7QvNC+0YnRjNGOIEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDQvtCx0YrQtdC60YLQvtCyINCyINC00YDRg9Cz0L7QuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INGBINC/0L7QvNC+0YnRjNGOIEhUVFAvREFWIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDkKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGZyb20gc3RkaW4gdG8gYW4gSU1BUCBmb2xkZXIiCittc2dzdHIgItCe0YLQv9GA0LDQstC60LAg0LrQvtC70LvQtdC60YbQuNC4INC/0LDRgtGH0LXQuSDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwINCyINC/0LDQv9C60YMgSU1BUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTEwCittc2dpZCAiQnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZSIKK21zZ3N0ciAi0J/QvtGB0YLRgNC+0LXQvdC40LUg0YTQsNC50LvQsCDQuNC90LTQtdC60YHQsCDQtNC70Y8g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQtdCz0L4g0YPQv9Cw0LrQvtCy0LDQvdC90L7Qs9C+INCw0YDRhdC40LLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0L/Rg9GB0YLQvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBHaXQg0LjQu9C4INC/0LXRgNC10LjQvdC40YbQuNCw0LvQuNC30LDRhtC40Y8g0YHRg9GJ0LXRgdGC0LLRg9GO0YnQtdCz0L4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMgorbXNnaWQgIkluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIgorbXNnc3RyICLQnNCz0L3QvtCy0LXQvdC90YvQuSDQv9GA0L7RgdC80L7RgtGAINCy0LDRiNC10LPQviDRgNCw0LHQvtGH0LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LIgZ2l0d2ViIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTMKK21zZ2lkICJBZGQgb3IgcGFyc2Ugc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBjb21taXQgbWVzc2FnZXMiCittc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QuNC1INC40LvQuCDRgNCw0LfQsdC+0YAg0YHRgtGA0YPQutGC0YPRgNC40YDQvtCy0LDQvdC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCDQsiDRgdC+0L7QsdGJ0LXQvdC40Y/RhSDQutC+0LzQvNC40YLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgItCR0YDQsNGD0LfQtdGAINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICLQktGL0LLQvtC0INC40YHRgtC+0YDQuNC4INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLQktGL0LLQvtC0INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INGE0LDQudC70LDRhSDQsiDQuNC90LTQtdC60YHQtSDQuCDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgdC/0LjRgdC60LAg0YHRgdGL0LvQvtC6INCy0L4g0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE4Cittc2dpZCAiTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC+0LHRitC10LrRgtCwINC00LXRgNC10LLQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTE5Cittc2dpZCAiRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSIKK21zZ3N0ciAi0JjQt9Cy0LvQtdC60LDQtdGCINC/0LDRgtGHINC4INCw0LLRgtC+0YDRgdGC0LLQviDQuNC3INC+0LTQvdC+0LPQviDRgdC+0L7QsdGJ0LXQvdC40Y8g0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjAKK21zZ2lkICJTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0iCittc2dzdHIgItCf0YDQvtGB0YLQsNGPINC/0YDQvtCz0YDQsNC80LzQsCBVTklYINC00LvRjyDRgNCw0LfQsdC+0YDQsCDRhNCw0LnQu9CwIG1ib3giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICLQntCx0YrQtdC00LjQvdC10L3QuNC1INC+0LTQvdC+0Lkg0LjQu9C4INC90LXRgdC60L7Qu9GM0LrQuNGFINC40YHRgtC+0YDQuNC5INGA0LDQt9GA0LDQsdC+0YLQutC4INCy0LzQtdGB0YLQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTIyCittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgItCf0L7QuNGB0Log0L/QvtC00YXQvtC00Y/RidC40YUg0L7QsdGJ0LjRhSDQv9GA0LXQtNC60L7QsiDQtNC70Y8g0LLQvtC30LzQvtC20L3QvtCz0L4g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMworbXNnaWQgIlJ1biBhIHRocmVlLXdheSBmaWxlIG1lcmdlIgorbXNnc3RyICLQl9Cw0L/Rg9GB0Log0YLRgNGR0YXRhdC+0LTQvtCy0L7Qs9C+INGB0LvQuNGP0L3QuNGPINGE0LDQudC70L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAi0JfQsNC/0YPRgdC6INGB0LvQuNGP0L3QuNGPINC00LvRjyDRhNCw0LnQu9C+0LIsINC60L7RgtC+0YDRi9C1INGC0YDQtdCx0YPRjtGCINGB0LvQuNGP0L3QuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3QsNGPINC/0YDQvtCz0YDQsNC80LzQsC3Qv9C+0LzQvtGJ0L3QuNC6INC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDRgdC+0LLQvNC10YHRgtC90L4g0YEgZ2l0LW1lcmdlLWluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAi0JfQsNC/0YPRgdC6INC40L3RgdGC0YDRg9C80LXQvdGC0L7QsiDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0L7QsiDRgdC70LjRj9C90LjRjyIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgtGA0ZHRhdGF0L7QtNC+0LLQvtCz0L4g0YHQu9C40Y/QvdC40LUg0LHQtdC3INC30LDRgtGA0LDQs9C40LLQsNC90LjRjyDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgItCX0LDQv9C40YHRjCDQuCDQv9GA0L7QstC10YDQutCwINGE0LDQudC70L7QsiBtdWx0aS1wYWNrLWluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjkKK21zZ2lkICJDcmVhdGVzIGEgdGFnIG9iamVjdCIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDQvtCx0YrQtdC60YLQvtCyINC80LXRgtC+0LoiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICLQn9C+0YHRgtGA0L7QtdC90LjQtSDQvtCx0YrQtdC60YLQsCDQtNC10YDQtdCy0LAg0LjQtyDRgtC10LrRgdGC0LAg0YTQvtGA0LzQsNGC0LAgbHMtdHJlZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICLQn9C10YDQtdC80LXRidC10L3QuNC1INC40LvQuCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1INGE0LDQudC70LAsINC60LDRgtCw0LvQvtCz0LAg0LjQu9C4INGB0LjQvNCy0L7Qu9GM0L3QvtC5INGB0YHRi9C70LrQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTMyCittc2dpZCAiRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cyIKK21zZ3N0ciAi0J/QvtC40YHQuiDRgdC40LzQstC+0LvRjNC90YvRhSDQuNC80ZHQvSDQtNC70Y8g0YPQutCw0LfQsNC90L3Ri9GFINGA0LXQtNCw0LrRhtC40LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAi0JTQvtCx0LDQstC70LXQvdC40LUg0LjQu9C4INC/0YDQvtGB0LzQvtGC0YAg0LfQsNC80LXRgtC+0Log0L7QsdGK0LXQutGC0LAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNAorbXNnaWQgIkltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzIgorbXNnc3RyICLQmNC80L/QvtGA0YIg0Lgg0L7RgtC/0YDQsNCy0LrQsCDQsiDRgNC10L/QvtC30LjRgtC+0YDQuNC4IFBlcmZvcmNlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICLQodC+0LfQtNCw0L3QuNC1INGD0L/QsNC60L7QstCw0L3QvdC+0LPQviDQsNGA0YXQuNCy0LAg0L7QsdGK0LXQutGC0L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTM2Cittc2dpZCAiRmluZCByZWR1bmRhbnQgcGFjayBmaWxlcyIKK21zZ3N0ciAi0J/QvtC40YHQuiDQuNC30LHRi9GC0L7Rh9C90YvRhSDRhNCw0LnQu9C+0LIg0L/QsNC60LXRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNworbXNnaWQgIlBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2VzcyIKK21zZ3N0ciAi0KPQv9Cw0LrQvtCy0LrQsCDRg9C60LDQt9Cw0YLQtdC70LXQuSDQvdCwINCy0LXRgtC60Lgg0Lgg0LzQtdGC0L7QuiDQtNC70Y8g0Y3RhNGE0LXQutGC0LjQstC90L7Qs9C+INC00L7RgdGC0YPQv9CwINC6INGA0LXQv9C+0LfQuNGC0L7RgNC40Y4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOAorbXNnaWQgIlJvdXRpbmVzIHRvIGhlbHAgcGFyc2luZyByZW1vdGUgcmVwb3NpdG9yeSBhY2Nlc3MgcGFyYW1ldGVycyIKK21zZ3N0ciAi0J/QvtC00L/RgNC+0LPRgNCw0LzQvNGLINC00LvRjyDQv9C+0LzQvtGJ0Lgg0YDQsNC30LHQvtGA0LAg0L/QsNGA0LDQvNC10YLRgNC+0LIg0LTQvtGB0YLRg9C/0LAg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzkKK21zZ2lkICJDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaCIKK21zZ3N0ciAi0JLRi9GH0LjRgdC70LXQvdC40LUg0YPQvdC40LrQsNC70YzQvdC+0LPQviDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwINC00LvRjyDQv9Cw0YLRh9CwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDAKK21zZ2lkICJQcnVuZSBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgItCe0YfQuNGB0YLQutCwINCy0YHQtdGFINC90LXQtNC+0YHRgtC40LbQuNC80YvRhSDQvtCx0YrQtdC60YLQvtCyINC40Lcg0LHQsNC30Ysg0LTQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9GFINC+0LHRitC10LrRgtC+0LIsINC60L7RgtC+0YDRi9C1INGD0LbQtSDRgdC+0LTQtdGA0LbQsNGC0YHRjyDQsiDRhNCw0LnQu9Cw0YUg0L/QsNC60LXRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAi0JjQt9Cy0LvQtdGH0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INC4INC+0LHRitC10LTQuNC90LXQvdC40LUg0YEg0LTRgNGD0LPQuNC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCDQuNC70Lgg0LvQvtC60LDQu9GM0L3QvtC5INCy0LXRgtC60L7QuSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSDQstC90LXRiNC90LjRhSDRgdGB0YvQu9C+0Log0Lgg0YHQstGP0LfQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NAorbXNnaWQgIkFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LXQvdC40LUg0YPQv9C+0YDRj9C00L7Rh9C10L3QvdC+0LPQviDRgdC/0LjRgdC60LAg0L/QsNGC0YfQtdC5INC90LDQtCDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC+0LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NQorbXNnaWQgIkNvbXBhcmUgdHdvIGNvbW1pdCByYW5nZXMgKGUuZy4gdHdvIHZlcnNpb25zIG9mIGEgYnJhbmNoKSIKK21zZ3N0ciAi0KHRgNCw0LLQvdC10L3QuNC1INC00LLRg9GFINC00LjQsNC/0LDQt9C+0L3QvtCyINC60L7QvNC80LjRgtC+0LIgKNC90LDQv9GA0LjQvNC10YAg0LTQstGD0YUg0LLQtdGA0YHQuNC5INCy0LXRgtC60LgpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDYKK21zZ2lkICJSZWFkcyB0cmVlIGluZm9ybWF0aW9uIGludG8gdGhlIGluZGV4IgorbXNnc3RyICLQp9GC0LXQvdC40LUg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LTQtdGA0LXQstC1INCyINC40L3QtNC10LrRgSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICLQn9C+0LLRgtC+0YDQvdC+0LUg0L/RgNC40LzQtdC90LXQvdC40LUg0LrQvtC80LzQuNGC0L7QsiDQvdCw0LQg0LLQtdGA0YXRg9GI0LrQvtC5INC00YDRg9Cz0L7QuSDQstC10YLQutC4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKK21zZ2lkICJSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgItCf0L7Qu9GD0YfQtdC90LjQtSDRgtC+0LPQviwg0YfRgtC+INCx0YvQu9C+INC+0YLQv9GA0LDQstC70LXQvdC+INCyINGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgItCj0L/RgNCw0LLQu9C10L3QuNC1INC40L3RhNC+0YDQvNCw0YbQuNC10Lkg0LbRg9GA0L3QsNC70LAg0YHRgdGL0LvQvtC6IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICLQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdCw0LHQvtGA0L7QvCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MQorbXNnaWQgIlBhY2sgdW5wYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkiCittc2dzdHIgItCj0L/QsNC60L7QstC60LAg0L3QtdGD0L/QsNC60L7QstCw0L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiDQsiDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTIKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cyIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSwg0LLRi9Cy0L7QtCDRgdC/0LjRgdC60LAsINGD0LTQsNC70LXQvdC40LUg0YHRgdGL0LvQvtC6INC00LvRjyDQt9Cw0LzQtdC90Ysg0L7QsdGK0LXQutGC0L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTUzCittc2dpZCAiR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMiCittc2dzdHIgItCT0LXQvdC10YDQsNGG0LjRjyDRgdCy0L7QtNC60Lgg0L/RgNC10LTRgdGC0L7Rj9GJ0LjRhSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NAorbXNnaWQgIlJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMiCittc2dzdHIgItCf0L7QstGC0L7RgNC90L7QtSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtSDQt9Cw0L/QuNGB0LDQvdC90YvRhSDRgNCw0LfRgNC10YjQtdC90LjQuSDQutC+0L3RhNC70LjQutGC0L7QsiDQv9GA0Lgg0YHQu9C40Y/QvdC40Y/RhSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU1Cittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgItCh0LHRgNC+0YEg0YLQtdC60YPRidC10LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8gSEVBRCDQvdCwINGD0LrQsNC30LDQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgItCe0LHRgNCw0YnQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgdC/0LjRgdC60LAg0L7QsdGK0LXQutGC0L7QsiDQutC+0LzQvNC40YLQsCDQsiDQvtCx0YDQsNGC0L3QvtC8INGF0YDQvtC90L7Qu9C+0LPQuNGH0LXRgdC60L7QvCDQv9C+0YDRj9C00LrQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTU4Cittc2dpZCAiUGljayBvdXQgYW5kIG1hc3NhZ2UgcGFyYW1ldGVycyIKK21zZ3N0ciAi0KDQsNC30LHQvtGAINC4INC+0LHRgNCw0LHQvtGC0LrQsCDQv9Cw0YDQsNC80LXRgtGA0L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTU5Cittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0YTQsNC50LvQvtCyINC40Lcg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwINC4INC40L3QtNC10LrRgdCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJTZW5kIGEgY29sbGVjdGlvbiBvZiBwYXRjaGVzIGFzIGVtYWlscyIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDQutC+0LvQu9C10LrRhtC40Lgg0L/QsNGC0YfQtdC5INC90LAg0Y3Qu9C10LrRgtGA0L7QvdC90YPRjiDQv9C+0YfRgtGDIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjEKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICLQntGC0L/RgNCw0LLQutCwINC+0LHRitC10LrRgtC+0LIg0LIg0LTRgNGD0LPQvtC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0YEg0L/QvtC80L7RidGM0Y4g0L/RgNC+0YLQvtC60L7Qu9CwIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcyIKK21zZ3N0ciAi0J7Qs9GA0LDQvdC40YfQtdC90L3QsNGPINC+0LHQvtC70L7Rh9C60LAg0LLRhdC+0LTQsCDQsiDRgdC40YHRgtC10LzRgyDQtNC70Y8g0LTQvtGB0YLRg9C/0LAgR2l0INGH0LXRgNC10LcgU1NIIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjMKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAi0J7QsdC+0LHRidC10L3QuNC1INCy0YvQstC+0LTQsCDCq2dpdCBsb2fCuyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY0Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgItCS0YvQstC+0LQg0YDQsNC30LvQuNGH0L3Ri9GFINGC0LjQv9C+0LIg0L7QsdGK0LXQutGC0L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDQstC10YLQvtC6INC4INC40YUg0LrQvtC80LzQuNGC0L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBwYWNrZWQgYXJjaGl2ZSBpbmRleCIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDQuNC90LTQtdC60YHQsCDRg9C/0LDQutC+0LLQsNC90L3QvtCz0L4g0LDRgNGF0LjQstCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLQktGL0LLQvtC0INGB0YHRi9C70L7QuiDQsiDQu9C+0LrQsNC70YzQvdC+0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzIgorbXNnc3RyICLQmtC+0LQg0L3QsNGB0YLRgNC+0LnQutC4INC40L3RgtC10YDQvdCw0YbQuNC+0L3QsNC70LjQt9Cw0YbQuNC4INC00LvRjyDRgdGG0LXQvdCw0YDQuNC10LIg0L7QsdC+0LvQvtGH0LrQuCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2OQorbXNnaWQgIkNvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUiCittc2dzdHIgItCe0LHRidC40Lkg0LrQvtC0INC90LDRgdGC0YDQvtC50LrQuCDQtNC70Y8g0YHRhtC10L3QsNGA0LjQtdCyINC+0LHQvtC70L7Rh9C60LggR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzAKK21zZ2lkICJTdGFzaCB0aGUgY2hhbmdlcyBpbiBhIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGF3YXkiCittc2dzdHIgItCh0L/RgNGP0YLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINC40LfQvNC10L3RkdC90L3QvtC8INGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QuNC1INGB0L7QtNC10YDQttC40LzQvtCz0L4g0YTQsNC50LvQvtCyINCyINC40L3QtNC10LrRgSIKKworIzogY29tbWFuZC1saXN0Lmg6MTcyCittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgdC+0YHRgtC+0Y/QvdC40Y8g0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzMKK21zZ2lkICJSZW1vdmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQvdC10L3Rg9C20L3Ri9GFINC/0YDQvtCx0LXQu9C+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NAorbXNnaWQgIkluaXRpYWxpemUsIHVwZGF0ZSBvciBpbnNwZWN0IHN1Ym1vZHVsZXMiCittc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPLCDQvtCx0L3QvtCy0LvQtdC90LjQtSDQuNC70Lgg0L/RgNC+0YHQvNC+0YLRgCDQv9C+0LTQvNC+0LTRg9C70LXQuSIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICLQlNCy0YPRhdGB0YLQvtGA0L7QvdC90LjQtSDQvtC/0LXRgNCw0YbQuNC4INC80LXQttC00YMg0YDQtdC/0L7Qt9C40YLQvtGA0LjRj9C80LggU3VidmVyc2lvbiDQuCBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NgorbXNnaWQgIlJlYWQsIG1vZGlmeSBhbmQgZGVsZXRlIHN5bWJvbGljIHJlZnMiCittc2dzdHIgItCn0YLQtdC90LjQtSwg0LjQt9C80LXQvdC10L3QuNC1INC4INGD0LTQsNC70LXQvdC40LUg0YHQuNC80LLQvtC70LjRh9C10YHQutC40YUg0YHRgdGL0LvQvtC6IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzcKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSwg0LLRi9Cy0L7QtCDRgdC/0LjRgdC60LAsINGD0LTQsNC70LXQvdC40LUg0LjQu9C4INC/0YDQvtCy0LXRgNC60LAg0LzQtdGC0LrQuCwg0L/QvtC00L/QuNGB0LDQvdC90L7QuSDRgSDQv9C+0LzQvtGJ0YzRjiBHUEciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3OAorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICLQodC+0LfQtNCw0L3QuNC1INCy0YDQtdC80LXQvdC90L7Qs9C+INGE0LDQudC70LAg0YEg0YHQvtC00LXRgNC20LjQvNGL0Lwg0LTQstC+0LjRh9C90L7Qs9C+INC+0LHRitC10LrRgtCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgItCg0LDRgdC/0LDQutC+0LLQutCwINC+0LHRitC10LrRgtC+0LIg0LjQtyDRg9C/0LDQutC+0LLQsNC90L3QvtCz0L4g0LDRgNGF0LjQstCwIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODAKK21zZ2lkICJSZWdpc3RlciBmaWxlIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINGB0L7QtNC10YDQttC40LzQvtCz0L4g0YTQsNC50LvQsCDQuNC3INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQsiDQuNC90LTQtdC60YEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIlVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseSIKK21zZ3N0ciAi0JHQtdC30L7Qv9Cw0YHQvdC+0LUg0L7QsdC90L7QstC70LXQvdC40LUg0LjQvNC10L3QuCDQvtCx0YrQtdC60YLQsCDRhdGA0LDQvdGP0YnQtdCz0L7RgdGPINCyINGB0YHRi9C70LrQtSIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVXBkYXRlIGF1eGlsaWFyeSBpbmZvIGZpbGUgdG8gaGVscCBkdW1iIHNlcnZlcnMiCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1INGE0LDQudC70LAg0YHQviDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40LXQuSDQtNC70Y8g0LPQu9GD0L/Ri9GFINGB0LXRgNCy0LXRgNC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MworbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICLQntGC0L/RgNCw0LLQutCwINCw0YDRhdC40LLQsCDQvtCx0YDQsNGC0L3QviDQsiBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg0Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICLQntGC0L/RgNCw0LLQutCwINGD0L/QsNC60L7QstCw0L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiDQvtCx0YDQsNGC0L3QviDQsiBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg1Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICLQktGL0LLQvtC0INC70L7Qs9C40YfQtdGB0LrQvtC5INC/0LXRgNC10LzQtdC90L3QvtC5IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg2Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgY29tbWl0cyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQv9C+0LTQv9C40YHQuCBHUEcg0LrQvtC80LzQuNGC0L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINGE0LDQudC70L7QsiDRg9C/0LDQutC+0LLQsNC90L3Ri9GFINCw0YDRhdC40LLQvtCyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQv9C+0LTQv9C40YHQuCBHUEcg0LzQtdGC0L7QuiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg5Cittc2dpZCAiR2l0IHdlYiBpbnRlcmZhY2UgKHdlYiBmcm9udGVuZCB0byBHaXQgcmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAi0JLQtdCxINC40L3RgtC10YDRhNC10LnRgSBHaXQgKNCy0LXQsS3QuNC90YLQtdGA0YTQtdC50YEg0LTQu9GPIEdpdCDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTAKK21zZ2lkICJTaG93IGxvZ3Mgd2l0aCBkaWZmZXJlbmNlIGVhY2ggY29tbWl0IGludHJvZHVjZXMiCittc2dzdHIgItCS0YvQstC+0LQg0LbRg9GA0L3QsNC70LAg0YEg0LjQt9C80LXQvdC10L3QuNGP0LzQuCwg0LrQvtGC0L7RgNGL0LUg0LLQstC+0LTQuNC7INC60LDQttC00YvQuSDQuNC3INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MQorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICLQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdC10YHQutC+0LvRjNC60LjQvNC4INGA0LDQsdC+0YfQuNC80Lgg0LrQsNGC0LDQu9C+0LPQsNC80LgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MgorbXNnaWQgIkNyZWF0ZSBhIHRyZWUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0L7QsdGK0LXQutGC0LAg0LTQtdGA0LXQstCwINC40Lcg0YLQtdC60YPRidC10LPQviDQuNC90LTQtdC60YHQsCIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAi0J7Qv9GA0LXQtNC10LvQtdC90LjQtSDQsNGC0YDQuNCx0YPRgtC+0LIg0LTQu9GPINC/0YPRgtC10Lkg0YTQsNC50LvQvtCyINC40LvQuCDQutCw0YLQsNC70L7Qs9C+0LIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIkdpdCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGFuZCBjb252ZW50aW9ucyIKK21zZ3N0ciAi0JjQvdGC0LXRgNGE0LXQudGBINC60L7QvNC80LDQvdC00L3QvtC5INGB0YLRgNC+0LrQuCBHaXQg0Lgg0YHQvtCz0LvQsNGI0LXQvdC40Y8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NQorbXNnaWQgIkEgR2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMiCittc2dzdHIgItCj0YfQtdCx0L3QuNC6INC/0L4g0Y/QtNGA0YMgR2l0INC00LvRjyDRgNCw0LfRgNCw0LHQvtGC0YfQuNC60L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiR2l0IGZvciBDVlMgdXNlcnMiCittc2dzdHIgIkdpdCDQtNC70Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkgQ1ZTIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTcKK21zZ2lkICJUd2Vha2luZyBkaWZmIG91dHB1dCIKK21zZ3N0ciAi0J/QvtC00YHRgtGA0L7QudC60LAg0LLRi9Cy0L7QtNCwINGB0L/QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OAorbXNnaWQgIkEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzIGZvciBFdmVyeWRheSBHaXQiCittc2dzdHIgItCf0L7Qu9C10LfQvdGL0Lkg0LzQuNC90LjQvNGD0Lwg0LrQvtC80LDQvdC0INC00LvRjyDQutCw0LbQtNC+0LTQvdC10LLQvdC+0LPQviDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5OQorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICLQk9C70L7RgdGB0LDRgNC40LkgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDAKK21zZ2lkICJIb29rcyB1c2VkIGJ5IEdpdCIKK21zZ3N0ciAi0J/QtdGA0LXRhdCy0LDRgtGH0LjQutC4INC40YHQv9C+0LvRjNC30YPQtdC80YvQtSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMQorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgItCj0LrQsNC30LDQvdC40LUg0YHQv9C10YbQuNCw0LvRjNC90L4g0LjQs9C90L7RgNC40YDRg9C10LzRi9GFINGE0LDQudC70L7QsiIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiRGVmaW5pbmcgc3VibW9kdWxlIHByb3BlcnRpZXMiCittc2dzdHIgItCe0L/RgNC10LTQtdC70LXQvdC40LUg0YHQstC+0LnRgdGC0LIg0L/QvtC00LzQvtC00YPQu9C10LkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMworbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICLQn9GA0L7RgdGC0YDQsNC90YHRgtCy0LAg0LjQvNGR0L0gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDQKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSBMYXlvdXQiCittc2dzdHIgItCh0L7QtNC10YDQttC40LzQvtC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDUKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgItCj0LrQsNC30LDQvdC40LUg0YDQtdC00LDQutGG0LjQuSDQuCDQtNC40LDQv9Cw0LfQvtC90L7QsiDQtNC70Y8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDYKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICLQntCx0YPRh9Cw0Y7RidC10LUg0LLQstC10LTQtdC90LjQtSDQsiBHaXQ6INGH0LDRgdGC0Ywg0LLRgtC+0YDQsNGPIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDcKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgItCe0LHRg9GH0LDRjtGJ0LXQtSDQstCy0LXQtNC10L3QuNC1INCyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA4Cittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICLQntCx0LfQvtGAINGA0LXQutC+0LzQtdC90LTRg9C10LzRi9GFINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC5INCy0YvQv9C+0LvQvdGP0LXQvNGL0YUg0LTQtdC50YHRgtCy0LjQuSDRgSBHaXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAi0JLQsNC8INC90YPQttC90L4g0L3QsNGH0LDRgtGMINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IGJpc2VjdCBzdGFydMK7IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUsINGH0YLQvtCx0Ysg0Y8g0YHQtNC10LvQsNC7INGN0YLQviBbWSAtINC00LAvbiAtINC90LXRgl0/ICIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgItCf0LvQvtGF0L7QuSDQstCy0L7QtCDQvdC+0LzQtdGA0LAg0YDQtdC00LDQutGG0LjQuDogJGFyZyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRiaXNlY3RlZF9oZWFkIgorbXNnc3RyICLQn9C70L7RhdC+0Lkg0LLQstC+0LQg0L3QvtC80LXRgNCwINGA0LXQtNCw0LrRhtC40Lg6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAi0J/Qu9C+0YXQvtC5INCy0LLQvtC0INC90L7QvNC10YDQsCDRgNC10LTQsNC60YbQuNC4OiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjEzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIsKrZ2l0IGJpc2VjdCAkVEVSTV9CQUTCuyDQvNC+0LbQtdGCINC/0YDQuNC90LjQvNCw0YLRjCDRgtC+0LvRjNC60L4g0L7QtNC40L0g0LDRgNCz0YPQvNC10L3Rgi4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjA5Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAi0J3QtSDQv9C10YDQtdC00LDQvSDRhNCw0LnQuyDQttGD0YDQvdCw0LvQsCIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMICRmaWxlINC00LvRjyDQv9C+0LLRgtC+0YDQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjMyCittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyDQstGLINC+INGH0LXQvD8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQxCittc2dpZCAiYmlzZWN0IHJ1biBmYWlsZWQ6IG5vIGNvbW1hbmQgcHJvdmlkZWQuIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40Lgg0LTQstC+0LjRh9C90L7Qs9C+INC/0L7QuNGB0LrQsDog0L3QtSDQv9C10YDQtdC00LDQvdCwINC60L7QvNCw0L3QtNCwLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgItC30LDQv9GD0YHQutCw0Y4gJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC00LLQvtC40YfQvdGL0Lkg0L/QvtC40YHQujpcbtC60L7QtCDQt9Cw0LLQtdGA0YjQtdC90LjRjyAkcmVzINC+0YIgwqskY29tbWFuZMK7INC+0LrQsNC30LDQu9GB0Y8gPCAwINC40LvQuCA+PSAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgImJpc2VjdCBydW4g0LHQvtC70YzRiNC1INC90LUg0LzQvtC20LXRgiDQv9GA0L7QtNC+0LvQttCw0YLRjCIKKworIzogZ2l0LWJpc2VjdC5zaDoyODUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQtNCy0L7QuNGH0L3Ri9C5INC/0L7QuNGB0Lo6XG7Cq2Jpc2VjdF9zdGF0ZSAkc3RhdGXCuyDQt9Cw0LLQtdGA0YjQuNC70YHRjyDRgSDQutC+0LTQvtC8INC+0YjQuNCx0LrQuCAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiYmlzZWN0IHJ1biDQstGL0L/QvtC70L3QtdC9INGD0YHQv9C10YjQvdC+IgorCisjOiBnaXQtYmlzZWN0LnNoOjMwMAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0L3QtSDQsiDQv9GA0L7RhtC10YHRgdC1INCx0LjQvdCw0YDQvdC+0LPQviDQv9C+0LjRgdC60LAuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICLQntGI0LjQsdC60LA6INCS0LDRiNC4INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YPQutCw0LfQsNC90L3Ri9GFINGE0LDQudC70LDRhSDQsdGD0LTRg9GCINC/0LXRgNC10LfQsNC/0LjRgdCw0L3RiyDQv9GA0Lgg0YHQu9C40Y/QvdC40LgiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0YHQu9C40YLRjCDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgItCU0L7Qu9C20L3QviDQsdGL0YLRjCBvY3RvcHVzINC90LUg0L/QvtC00YXQvtC00LjRgi4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0L7QsdGJ0LjQuSDQutC+0LzQvNC40YIg0YEgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICLQo9C20LUg0L7QsdC90L7QstC70LXQvdC+INCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuCDRgSAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAi0J/QtdGA0LXQvNC+0YLQutCwINCy0L/QtdGA0LXQtCDQtNC+OiAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjk3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICLQn9C+0L/Ri9GC0LrQsCDQv9GA0L7RgdGC0L7Qs9C+INGB0LvQuNGP0L3QuNGPINGBICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgItCf0YDQvtGB0YLQvtC1INGB0LvQuNGP0L3QuNC1INC90LUg0YPQtNCw0LvQvtGB0YwsINC/0L7Qv9GL0YLQutCwINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRgdC70LjRj9C90LjRjy4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjIwCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INC40L3QtNC10LrRgSAo0L3QtSDQtNC+0LvQttC90L4g0YHQu9GD0YfQsNGC0YzRgdGPKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyNzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMICRyZWZfc3Rhc2gg0YEg0L/QvtC80L7RidGM0Y4gJHdfY29tbWl0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyMworIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgItC+0YjQuNCx0LrQsDog0L3QtdC40LfQstC10YHRgtC90YvQuSDQv9Cw0YDQsNC80LXRgtGAINC00LvRjyDCq3N0YXNoIHB1c2jCuzogJG9wdGlvbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICLQoNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQuCDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdC00LXQutGB0LAg0YHQvtGF0YDQsNC90LXQvdGLICRzdGFzaF9tc2ciCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTM1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90LDRjyDQvtC/0YbQuNGPOiAkb3B0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAi0J/QtdGA0LXQtNCw0L3QviDRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+INGA0LXQtNCw0LrRhtC40Lk6ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L7QuSDRgdGB0YvQu9C60L7QuSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIsKrJGFyZ3PCuyDQvdC1INC/0L7RhdC+0LbQtSDQvdCwINC60L7QvNC80LjRgiDRgdC+INGB0L/RgNGP0YLQsNC90L3Ri9C80Lgg0LjQt9C80LXQvdC10L3QuNGP0LzQuCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICLCqyRhcmdzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGB0YHRi9C70LrQvtC5INC90LAg0YHQv9GA0Y/RgtCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxNworbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYyMQorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC/0YDQuNC80LXQvdC40YLRjCDRgdC/0YDRj9GC0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LLQviDQstGA0LXQvNGPINCy0YvQv9C+0LvQvdC10L3QuNGPINGB0LvQuNGP0L3QuNGPIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYyOQorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgItCa0L7QvdGE0LvQuNC60YLRiyDQsiDQuNC90LTQtdC60YHQtS4g0J/QvtC/0YDQvtCx0YPQudGC0LUg0LHQtdC3IC0taW5kZXguIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYzMQorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINC00LXRgNC10LLQviDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NDAKK21zZ2lkICJDb3VsZCBub3QgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSBzdGFzaCBlbnRyeSIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLINC40Lcg0YHQv9GA0Y/RgtCw0L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY2NQorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRg9Cx0YDQsNGC0Ywg0LjQtyDQuNC90LTQtdC60YHQsCDQuNC30LzQtdC90LXQvdC90YvQtSDRhNCw0LnQu9GLIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwMworIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAi0J7RgtCx0YDQvtGI0LXQvdC+ICR7UkVWfSAoJHMpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiDQndC1INGD0LTQsNC70L7RgdGMINC+0YLQsdGA0L7RgdC40YLRjCDQt9Cw0L/QuNGB0Ywg0LjQtyDRgdC/0YDRj9GC0LDQvdC90YvRhSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzkxCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIo0KfRgtC+0LHRiyDQstC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0LjRhSwg0L3QsNCx0LXRgNC40YLQtSDCq2dpdCBzdGFzaCBhcHBsecK7KSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDAKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0J7RgtC90L7RgdC40YLQtdC70YzQvdGL0Lkg0L/Rg9GC0Ywg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INC90LDRhdC+0LTRj9GB0Ywg0L3QsCDQstC10YDRiNC40L3QtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICJVUkwg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjzogwqskcmVwb8K7INC00L7Qu9C20LXQvSDQsdGL0YLRjCDQsNCx0YHQvtC70Y7RgtC90YvQvCDQuNC70Lgg0L3QsNGH0LjQvdCw0YLRjNGB0Y8g0YEgLi98Li4vIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIyOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIsKrJHNtX3BhdGjCuyDRg9C20LUg0YHQvtC00LXRgNC20LjRgtGB0Y8g0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCBhbmQgaXMgbm90IGEgc3VibW9kdWxlIgorbXNnc3RyICLCqyRzbV9wYXRowrsg0YPQttC1INGB0L7QtNC10YDQttC40YLRgdGPINCyINC40L3QtNC10LrRgdC1INC4INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQv9C+0LTQvNC+0LTRg9C70LXQvCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgItCh0LvQtdC00YPRjtGJ0LjQtSDQv9GD0YLQuCDQuNCz0L3QvtGA0LjRgNGD0Y7RgtGB0Y8g0L7QtNC90LjQvCDQuNC3INCy0LDRiNC40YUg0YTQsNC50LvQvtCyIC5naXRpZ25vcmU6XG4kc21fcGF0aFxu0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIC1mLCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQtdCz0L4g0LTQvtCx0LDQstC40YLRjC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0JTQvtCx0LDQstC70Y/RjiDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQuNC3IMKrJHNtX3BhdGjCuyDQsiDQuNC90LTQtdC60YEiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAiwqskc21fcGF0aMK7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQuCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC10LwgZ2l0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyBnaXQg0LTQu9GPIMKrJHNtX25hbWXCuyDQvdCw0LnQtNC10L0g0LvQvtC60LDQu9GM0L3QviDQvdCwINCy0L3QtdGI0L3QuNGFINGA0LXQv9C+0LfQuNGC0L7RgNC40Y/RhToiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tXG4iCisiICAkcmVhbHJlcG9cbiIKKyJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCByZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgb3B0aW9uLiIKK21zZ3N0ciAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0L/QvtCy0YLQvtGA0L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LvQvtC60LDQu9GM0L3Ri9C5INC60LDRgtCw0LvQvtCzIGdpdCDQstC80LXRgdGC0L4g0L/QvtCy0YLQvtGA0L3QvtCz0L4g0LrQu9C+0L3QuNGA0L7QstCw0L3QuNGPINC40LdcbiAgJHJlYWxyZXBvXG7RgtC+INC40YHQv9C+0LvRjNC30YPQudGC0LUg0L/QsNGA0LDQvNC10YLRgCDCqy0tZm9yY2XCuy4g0JXRgdC70Lgg0LbQtSDQu9C+0LrQsNC70YzQvdGL0Lkg0LrQsNGC0LDQu9C+0LMgZ2l0INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQvdGD0LbQvdGL0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8INC40LvQuCDQtdGB0LvQuCDQstGLINC90LUg0YPQstC10YDQtdC90YssINGH0YLQviDRjdGC0L4g0LfQvdCw0YfQuNGCLCDRgtC+INGD0LrQsNC20LjRgtC1INC00YDRg9Cz0L7QtSDQuNC80Y8g0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQv9Cw0YDQsNC80LXRgtGA0LAgwqstLW5hbWXCuy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjg2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICLQktC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNC1INC70L7QutCw0LvRjNC90L7Qs9C+INC60LDRgtCw0LvQvtCz0LAgZ2l0INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8gwqskc21fbmFtZcK7LiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINGB0L7RgdGC0L7Rj9C90LjQtSDRgyDQv9C+0LTQvNC+0LTRg9C70Y8gwqskc21fcGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAi0KHQsdC+0Lkg0LTQvtCx0LDQstC70LXQvdC40Y8g0L/QvtC00LzQvtC00YPQu9GPIMKrJHNtX3BhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0YLRjCDQv9C+0LTQvNC+0LTRg9C70Ywgwqskc21fcGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INGC0LXQutGD0YnRg9GOINGA0LXQtNCw0LrRhtC40Y4g0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0LjQt9Cy0LvQtdGH0LXQvdC40LUg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDQv9C+INC/0YPRgtC4IMKrJHNtX3BhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1ODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAiCisiJyRzbV9wYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INGC0LXQutGD0YnRg9GOINGA0LXQtNCw0LrRhtC40Y4gJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRzbV9wYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxMgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L0g0L/QviDQv9GD0YLQuCDQv9C+0LTQvNC+0LTRg9C70Y8gwqskZGlzcGxheXBhdGjCuywg0L3QviDQvdC1INGB0L7QtNC10YDQttC40YIgJHNoYTEuINCh0LHQvtC5INC/0YDQuCDQv9GA0Y/QvNC+0Lwg0L/QvtC70YPRh9C10L3QuNC4INC60L7QvNC80LjRgtCwLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0YHQvtGB0YLQvtGP0L3QuNC1IMKrJHNoYTHCuyDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPINC/0L4g0L/Rg9GC0LggwqskZGlzcGxheXBhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70Ywg0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7OiDQt9Cw0LHRgNCw0L3QviDRgdC+0YHRgtC+0Y/QvdC40LUgwqskc2hhMcK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LzQtdGB0YLQuNGC0Ywgwqskc2hhMcK7INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70Ywg0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7OiDQv9C10YDQtdC80LXRidC10L0g0L3QsNC0IMKrJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDRgdC70LjRj9C90LjQtSDRgSDCqyRzaGExwrsg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRjCDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrs6INGB0LvQuNGC0L4g0YEgwqskc2hhMcK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQodCx0L7QuSDQstGL0L/QvtC70L3QtdC90LjRjyDCqyRjb21tYW5kICRzaGExwrsg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GMINC/0L4g0L/Rg9GC0LggwqskZGlzcGxheXBhdGjCuzogwqskY29tbWFuZCAkc2hhMcK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0YDQtdC60YPRgNGB0LjQstC90L4g0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODMwCittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAi0J7Qv9GG0LjRjiAtLWNhY2hlZCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSDQvtC/0YbQuNC10LkgLS1maWxlcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90YvQuSDRgNC10LbQuNC8ICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgINCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6ICRkaXNwbGF5X25hbWUg0L3QtSDRgdC+0LTQtdGA0LbQuNGCINC60L7QvNC80LjRgiAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAg0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTogJGRpc3BsYXlfbmFtZSDQvdC1INGB0L7QtNC10YDQttC40YIg0LrQvtC80LzQuNGCICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiICDQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiAkZGlzcGxheV9uYW1lINC90LUg0YHQvtC00LXRgNC20LjRgiDQutC+0LzQvNC40YLRiyAkc2hhMV9zcmMg0LggJHNoYTFfZHN0IgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgItCU0LvRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4LCDRgdC80L7RgtGA0LjRgtC1IGdpdC0ke2NtZH0oMSkuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICLQn9C10YDQtdC80LXRidC10L3QuNC1ICgkbmV3X2NvdW50LyR0b3RhbCkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxNTIKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nXG4iCisicywgc3F1YXNoIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXRcbiIKKyJmLCBmaXh1cCA8Y29tbWl0PiA9IGxpa2UgXCJzcXVhc2hcIiwgYnV0IGRpc2NhcmQgdGhpcyBjb21taXQncyBsb2cgbWVzc2FnZVxuIgorIngsIGV4ZWMgPGNvbW1pdD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLlxuIgorbXNnc3RyICJcbtCa0L7QvNCw0L3QtNGLOlxucCwgcGljayA80LrQvtC80LzQuNGCPiA9INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQutC+0LzQvNC40YJcbnIsIHJld29yZCA80LrQvtC80LzQuNGCPiA9INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQutC+0LzQvNC40YIsINC90L4g0LjQt9C80LXQvdC40YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LBcbmUsIGVkaXQgPNC60L7QvNC80LjRgj4gPSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LrQvtC80LzQuNGCLCDQvdC+INC+0YHRgtCw0L3QvtCy0LjRgtGM0YHRjyDQtNC70Y8g0LjRgdC/0YDQsNCy0LvQtdC90LjRj1xucywgc3F1YXNoIDzQutC+0LzQvNC40YI+ID0g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC60L7QvNC80LjRgiwg0L3QviDQvtCx0YrQtdC00LjQvdC40YLRjCDRgSDQv9GA0LXQtNGL0LTRg9GJ0LjQvCDQutC+0LzQvNC40YLQvtC8XG5mLCBmaXh1cCA80LrQvtC80LzQuNGCPiA9INC60LDQuiDCq3NxdWFzaMK7LCDQvdC+INC/0YDQvtC/0YPRgdGC0LjRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsFxueCwgZXhlYyA80LrQvtC80LDQvdC00LA+ID0g0LLRi9C/0L7Qu9C90LjRgtGMINC60L7QvNCw0L3QtNGDICjQvtGB0YLQsNGC0L7QuiDRgdGC0YDQvtC60LgpINGBINC/0L7QvNC+0YnRjNGOINC60L7QvNCw0L3QtNC90L7QuSDQvtCx0L7Qu9C+0YfQutC4XG5kLCBkcm9wIDzQutC+0LzQvNC40YI+ID0g0YPQtNCw0LvQuNGC0Ywg0LrQvtC80LzQuNGCXG5sLCBsYWJlbCA80LzQtdGC0LrQsD4gPSDQtNCw0YLRjCDQuNC80Y8g0YLQtdC60YPRidC10LzRgyBIRUFEXG50LCByZXNldCA80LzQtdGC0LrQsD4gPSDRgdCx0YDQvtGB0LjRgtGMIEhFQUQg0Log0YPQutCw0LfQsNC90L3QvtC5INC80LXRgtC60LVcbm0sIG1lcmdlIFstQyA80LrQvtC80LzQuNGCPiB8IC1jIDzQutC+0LzQvNC40YI+XSA80LzQtdGC0LrQsD4gWyMgPNGB0YLRgNC+0LrQsD5dXG4uINGB0L7Qt9C00LDRgtGMINGB0LvQuNGP0L3QuNC1INC40YHQv9C+0LvRjNC30YPRjyDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0L7RgNC40LPQuNC90LDQu9GM0L3QvtCz0L5cbi4g0YHQu9C40Y/QvdC40Y8gKNC40LvQuCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YPQutCw0LfQsNC90L3Rg9GOINGB0YLRgNC+0LrRgywg0LXRgdC70Lgg0L7RgNC40LPQuNC90LDQu9GM0L3QvtC1XG4uINGB0LvQuNGP0L3QuNC1INC90LUg0YPQutCw0LfQsNC90L4pLiDQmNGB0L/QvtC70YzQt9GD0LnRgtC1IC1jIDzQutC+0LzQvNC40YI+INGH0YLQvtCx0Ysg0LjQt9C80LXQvdC40YLRjFxuLiDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAuXG5cbtCt0YLQuCDRgdGC0YDQvtC60Lgg0LzQvtC20L3QviDQv9C10YDQtdC80LXRidCw0YLRjDsg0L7QvdC4INCx0YPQtNGD0YIg0LLRi9C/0L7Qu9C90LXQvdGLINGB0LLQtdGA0YXRgyDQstC90LjQty5cbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICLQotC10L/QtdGA0Ywg0LLRiyDQvNC+0LbQtdGC0LUg0LjRgdC/0YDQsNCy0LjRgtGMINC60L7QvNC80LjRgiDRgSDQv9C+0LzQvtGJ0YzRjlxuXG5cdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuXG7QmtCw0Log0YLQvtC70YzQutC+INCy0Ysg0LHRg9C00LXRgtC1INC00L7QstC+0LvRjNC90Ysg0YDQtdC30YPQu9GM0YLQsNGC0L7QvCwg0LfQsNC/0YPRgdGC0LjRgtC1XG5cblx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkc2hhMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIKK21zZ3N0ciAiJHNoYTE6INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutC+0LzQvNC40YLQvtC8LCDQutC+0YLQvtGA0YvQuSDQvNC+0LbQvdC+INCy0LfRj9GC0YwiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LjQvNGPINC60L7QvNC80LjRgtCwOiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjMwOQorbXNnaWQgIkNhbm5vdCB3cml0ZSBjdXJyZW50IGNvbW1pdCdzIHJlcGxhY2VtZW50IHNoYTEiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQt9Cw0LzQtdC90YMgc2hhMSDRgtC10LrRg9GJ0LXQs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzYwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgItCf0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQg0LTQviAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC80L7RgtCw0YLRjCDQstC/0LXRgNC10LQg0LTQviAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjM3MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LzQtdGB0YLQuNGC0YwgSEVBRCDQvdCwICRmaXJzdF9wYXJlbnQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINGD0L/Qu9C+0YLQvdC40YLRjCDRgdC70LjRj9C90LjQtTogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozOTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0Lgg0L/QvtCy0YLQvtGA0LXQvdC40Lgg0YHQu9C40Y/QvdC40Y8gJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwaWNrICRzaGExIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0LfRj9GC0YwgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMke259OiIKK21zZ3N0ciAi0K3RgtC+INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQvdC+0LzQtdGAICMke259OiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMke259IHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgItCh0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQvdC+0LzQtdGAICMke259INCx0YPQtNC10YIg0L/RgNC+0L/Rg9GJ0LXQvdC+OiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyOAorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICLQrdGC0L4g0L7QsdGK0LXQtNC40L3QtdC90LjQtSAkY291bnQg0LrQvtC80LzQuNGC0LAiCittc2dzdHJbMV0gItCt0YLQviDQvtCx0YrQtdC00LjQvdC10L3QuNC1ICRjb3VudCDQutC+0LzQvNC40YLQvtCyIgorbXNnc3RyWzJdICLQrdGC0L4g0L7QsdGK0LXQtNC40L3QtdC90LjQtSAkY291bnQg0LrQvtC80LzQuNGC0L7QsiIKK21zZ3N0clszXSAi0K3RgtC+INC+0LHRitC10LTQuNC90LXQvdC40LUgJGNvdW50INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0YwgJGZpeHVwX21zZyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0MAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorbXNnc3RyICLQrdGC0L4g0L7QsdGK0LXQtNC40L3QtdC90LjQtSAyINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0ODEgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUyNAorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUyNworIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQuNC80LXQvdC40YLRjCAkc2hhMeKApiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSBiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40YHQv9GA0LDQstC40YLRjCDQutC+0LzQvNC40YIg0L/QvtGB0LvQtSDRg9GB0L/QtdGI0L3QvtCz0L4g0L/QtdGA0LXRhdC+0LTQsCDQvdCwICRzaGEx4oCmICRyZXN0XG7QrdGC0L4g0L/RgNC+0LjQt9C+0YjQu9C+LCDRgdC60L7RgNC10LUg0LLRgdC10LPQviwg0LjQty3Qt9CwINC/0YPRgdGC0L7Qs9C+INGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCDQuNC70Lgg0LjQty3Qt9CwINC/0LXRgNC10YXQstCw0YLRh9C40LrQsCDQv9C10YDQtdC0INC60L7QvNC80LjRgtC+0LwuINCV0YHQu9C4INC20LUg0Y3RgtC+INC/0YDQvtC40LfQvtGI0LvQviDQuNC3LdC30LAg0L/QtdGA0LXRhdCy0LDRgtGH0LjQutCwINC/0LXRgNC10LQg0LrQvtC80LzQuNGC0L7QvCwg0YLQviDQstCw0Lwg0L3Rg9C20L3QviDRgNC10YjQuNGC0Ywg0YEg0L3QuNC8INC/0YDQvtCx0LvQtdC80YMg0Lgg0L/QvtCy0YLQvtGA0LjRgtGMINC/0L7Qv9GL0YLQutGDINGB0L3QvtCy0LAuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAi0J7RgdGC0LDQvdC+0LLQu9C10L3QviDQvdCwICRzaGExX2FiYnJlduKApiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLQndC10LvRjNC30Y8g0YHQtNC10LvQsNGC0Ywgwqskc3F1YXNoX3N0eWxlwrsg0LHQtdC3INGD0LrQsNC30LDQvdC40Y8g0L/RgNC10LTRi9C00YPRidC10LPQviDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyOAorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAi0JLRi9C/0L7Qu9C90LXQvdC40LU6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gZmFpbGVkOiAkcmVzdCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Yw6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjM4Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgItC4INCx0YvQu9C4INGB0LTQtdC70LDQvdGLINC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90LTQtdC60YHQtSDQuC/QuNC70Lgg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY0MAorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgItCS0Ysg0LzQvtC20LXRgtC1INC40YHQv9GA0LDQstC40YLRjCDQvtGI0LjQsdC60YMsINCwINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtGMXG5cblx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjLiBUUkFOU0xBVE9SUzogYWZ0ZXIgdGhlc2UgbGluZXMgaXMgYSBjb21tYW5kIHRvIGJlIGlzc3VlZCBieSB0aGUgdXNlcgorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY1MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICRyZXN0XG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAi0KPRgdC/0LXRiNC90L7QtSDQstGL0L/QvtC70L3QtdC90LjQtTogJHJlc3RcbtC90L4g0L7RgdGC0LDQu9C40YHRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdC00LXQutGB0LUg0Lgv0LjQu9C4INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LVcbtCh0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INCy0LDRiNC4INC40LfQvNC10L3QtdC90LjRjywg0LAg0LfQsNGC0LXQvCDQstGL0L/QvtC70L3QuNGC0LVcblxuXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgItCd0LXQvtC/0L7Qt9C90LDQvdC90LDRjyDQutC+0LzQsNC90LTQsDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NjUKK21zZ2lkICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAg0LjRgdC/0YDQsNCy0YzRgtC1INGN0YLQviDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCByZWJhc2UgLS1lZGl0LXRvZG/Cuy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICLQo9GB0L/QtdGI0L3QviDQv9C10YDQtdC80LXRidGR0L0g0Lgg0L7QsdC90L7QstC70ZHQvSAkaGVhZF9uYW1lLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NworbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCBDSEVSUllfUElDS19IRUFEIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuXG4iCisiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmVcbiIKKyJzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICLQoyDQstCw0YEg0LjQvNC10Y7RgtGB0Y8g0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1Llxu0JXRgdC70Lgg0Y3RgtC4INC40LfQvNC10L3QtdC90LjRjyDQtNC+0LvQttC90Ysg0LHRi9GC0Ywg0L7QsdGK0LXQtNC10L3QtdC90Ysg0YEg0L/RgNC10LTRi9C00YPRidC40Lwg0LrQvtC80LzQuNGC0L7QvCwg0YLQviDQt9Cw0L/Rg9GB0YLQuNGC0LU6XG5cbiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG5cbtCV0YHQu9C4INC20LUg0L7QvdC4INC00L7Qu9C20L3RiyDQsdGL0YLRjCDQv9C+0LzQtdGJ0LXQvdGLINCyINC90L7QstGL0Lkg0LrQvtC80LzQuNGCLCDRgtC+INC30LDQv9GD0YHRgtC40YLQtTpcblxuICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG5cbtCSINC70Y7QsdC+0Lwg0YHQu9GD0YfQsNC1LCDQv9C+0YHQu9C1INGC0L7Qs9C+INC60LDQuiDQstGLINC30LDQutC+0L3Rh9C40YLQtSwg0L/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QtdGA0LXQvNC10YnQtdC90LjQtSDQvNC+0LbQvdC+INCy0YvQv9C+0LvQvdC40LI6XG5cbiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NzkKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCDQv9GA0Lgg0L/QvtC40YHQutC1INCw0LLRgtC+0YDQsCDQtNC70Y8g0LjRgdC/0YDQsNCy0LvQtdC90LjRjyDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc4NAorbXNnaWQgIiIKKyJZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiBQbGVhc2UgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICLQoyDQstCw0YEg0LjQvNC10Y7RgtGB0Y8g0L3QtdC30LDQutC+0LzQvNC40YfQtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1LiDQodC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgiwg0LAg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuyDRgdC90L7QstCwLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc4OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzkzCittc2dpZCAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC60L7QvNC80LjRgtC40YLRjCDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgyNCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTEwCittc2dpZCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDRgNC10LTQsNC60YLQvtGAIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC50YLQuCDQvdCwINCy0LXRgNGB0LjRjiAkc3dpdGNoX3RvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODUyCittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgItCd0LXRgiDRg9C60LDQt9Cw0YLQtdC70Y8gSEVBRD8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INC60LDRgtCw0LvQvtCzICRzdGF0ZV9kaXIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NTYKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LzQtdGC0LjRgtGMINC60LDQuiDQuNC90YLQtdGA0LDQutGC0LjQstC90YvQuSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAi0J/QtdGA0LXQvNC10YnQtdC90LjQtSAkc2hvcnRyZXZpc2lvbnMg0L3QsNC0ICRzaG9ydG9udG8gKCR0b2RvY291bnQg0LrQvtC80LDQvdC00LApIgorbXNnc3RyWzFdICLQn9C10YDQtdC80LXRidC10L3QuNC1ICRzaG9ydHJldmlzaW9ucyDQvdCw0LQgJHNob3J0b250byAoJHRvZG9jb3VudCDQutC+0LzQsNC90LTRiykiCittc2dzdHJbMl0gItCf0LXRgNC10LzQtdGJ0LXQvdC40LUgJHNob3J0cmV2aXNpb25zINC90LDQtCAkc2hvcnRvbnRvICgkdG9kb2NvdW50INC60L7QvNCw0L3QtCkiCittc2dzdHJbM10gItCf0LXRgNC10LzQtdGJ0LXQvdC40LUgJHNob3J0cmV2aXNpb25zINC90LDQtCAkc2hvcnRvbnRvICgkdG9kb2NvdW50INC60L7QvNCw0L3QtCkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0NworbXNnaWQgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINC/0LXRgNC10LfQsNC/0LjRgdCw0L3QvdGL0LUg0LrQvtC80LzQuNGC0YsiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtTogJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgY2hkaXIg0LIgJGNkdXAsINCy0LXRgNGI0LjQvdGDINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIwMCBnaXQtc2gtc2V0dXAuc2g6MjA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LA6ICRwcm9ncmFtX25hbWUg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvdC1INC40LzQtdGPINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsC4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0L/QtdGA0LXQvNC10YnQtdC90LjQtSDQutC+0LzQvNC40YLQvtCyOiDQoyDQstCw0YEg0LXRgdGC0Ywg0L3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI0Cittc2dpZCAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQv9C10YDQtdC30LDQv9C40YHRjCDQstC10YLQvtC6OiDQoyDQstCw0YEg0LXRgdGC0Ywg0L3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0YEg0L/QtdGA0LXQvNC10YnQtdC90LjQtdC8OiDQoyDQstCw0YEg0LXRgdGC0Ywg0L3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMICRhY3Rpb246INCjINCy0LDRgSDQtdGB0YLRjCDQvdC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDMKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQv9C10YDQtdC80LXRidC10L3QuNC1INC60L7QvNC80LjRgtC+0LI6INCSINCy0LDRiNC10Lwg0LjQvdC00LXQutGB0LUg0LXRgdGC0Ywg0L3QtdC30LDQutC+0LzQvNC40YfQtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDYKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGBINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvDog0JIg0LLQsNGI0LXQvCDQuNC90LTQtdC60YHQtSDQtdGB0YLRjCDQvdC10LfQsNC60L7QvNC80LjRh9C10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMICRhY3Rpb246INCSINCy0LDRiNC10Lwg0LjQvdC00LXQutGB0LUg0LXRgdGC0Ywg0L3QtdC30LDQutC+0LzQvNC40YfQtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgItCaINGC0L7QvNGDINC20LUsINCyINCy0LDRiNC10Lwg0LjQvdC00LXQutGB0LUg0LXRgdGC0Ywg0L3QtdC30LDQutC+0LzQvNC40YfQtdC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzMKK21zZ2lkICJZb3UgbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICLQktCw0Lwg0L3Rg9C20L3QviDQt9Cw0L/Rg9GB0LrQsNGC0Ywg0Y3RgtGDINC60L7QvNCw0L3QtNGDINC90LDRhdC+0LTRj9GB0Ywg0L3QsCDQstC10YDRiNC40L3QtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LDQsdGB0L7Qu9GO0YLQvdGL0Lkg0L/Rg9GC0Ywg0Log0LrQsNGC0LDQu9C+0LPRgyBnaXQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxOTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTJzICUxMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTk3Cittc2dpZCAic3RhZ2VkIgorbXNnc3RyICLQsiDQuNC90LTQtdC60YHQtSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxOTcKK21zZ2lkICJ1bnN0YWdlZCIKK21zZ3N0ciAi0L3QtSDQsiDQuNC90LTQtdC60YHQtSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNzgKK21zZ2lkICJiaW5hcnkiCittc2dzdHIgItC00LLQvtC40YfQvdGL0LkiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE2Cittc2dpZCAibm90aGluZyIKK21zZ3N0ciAi0L3QuNGH0LXQs9C+IgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMxMworbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAi0L3QtdGCINC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICLQtNC+0LHQsNCy0LvQtdC9ICVkINC/0YPRgtGMXG4iCittc2dzdHJbMV0gItC00L7QsdCw0LLQu9C10L3QviAlZCDQv9GD0YLQuFxuIgorbXNnc3RyWzJdICLQtNC+0LHQsNCy0LvQtdC90L4gJWQg0L/Rg9GC0LXQuVxuIgorbXNnc3RyWzNdICLQtNC+0LHQsNCy0LvQtdC90L4gJWQg0L/Rg9GC0LhcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi0L7QsdC90L7QstC70ZHQvSAlZCDQv9GD0YLRjFxuIgorbXNnc3RyWzFdICLQvtCx0L3QvtCy0LvQtdC90L4gJWQg0L/Rg9GC0LhcbiIKK21zZ3N0clsyXSAi0L7QsdC90L7QstC70LXQvdC+ICVkINC/0YPRgtC10LlcbiIKK21zZ3N0clszXSAi0L7QsdC90L7QstC70LXQvdC+ICVkINC/0YPRgtC4XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi0L7QsdGA0LDRidC10L3RiyDQuNC30LzQtdC90LXQvdC40Y8gJWQg0L/Rg9GC0LhcbiIKK21zZ3N0clsxXSAi0L7QsdGA0LDRidC10L3RiyDQuNC30LzQtdC90LXQvdC40Y8gJWQg0L/Rg9GC0LXQuVxuIgorbXNnc3RyWzJdICLQvtCx0YDQsNGJ0LXQvdGLINC40LfQvNC10L3QtdC90LjRjyAlZCDQv9GD0YLQtdC5XG4iCittc2dzdHJbM10gItC+0LHRgNCw0YnQtdC90Ysg0LjQt9C80LXQvdC10L3QuNGPICVkINC/0YPRgtC10LlcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidG91Y2hlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInRvdWNoZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi0YLRgNC+0L3Rg9GCICVkINC/0YPRgtGMXG4iCittc2dzdHJbMV0gItGC0YDQvtC90YPRgtGLICVkINC/0YPRgtC4XG4iCittc2dzdHJbMl0gItGC0YDQvtC90YPRgtGLICVkINC/0YPRgtC10LlcbiIKK21zZ3N0clszXSAi0YLRgNC+0L3Rg9GC0YsgJWQg0L/Rg9GC0LhcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjcKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgItCe0LHQvdC+0LLQuNGC0YwiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM5Cittc2dpZCAiUmV2ZXJ0IgorbXNnc3RyICLQntCx0YDQsNGC0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAi0L/RgNC40LzQtdGH0LDQvdC40LU6ICVzINGC0LXQv9C10YDRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LkuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjczCittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LkiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc5Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICLQndC10YIg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7Qsi5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDMzCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLiIKK21zZ3N0ciAi0JXRgdC70Lgg0L/QsNGC0Ycg0L/RgNC40LzQtdC90Y/QtdGC0YHRjyDQsdC10Lcg0L7RiNC40LHQvtC6LCDRgtC+INC40LfQvNC10L3RkdC90L3Ri9C5INCx0LvQvtC6INCx0YPQtNC10YIg0YHRgNCw0LfRgyDQv9C+0LzQtdGH0LXQvSDQtNC70Y8g0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90LjRjy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTAzNgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICLQldGB0LvQuCDQv9Cw0YLRhyDQv9GA0LjQvNC10L3Rj9C10YLRgdGPINCx0LXQtyDQvtGI0LjQsdC+0LosINGC0L4g0LjQt9C80LXQvdGR0L3QvdGL0Lkg0LHQu9C+0Log0LHRg9C00LXRgiDRgdGA0LDQt9GDINC/0L7QvNC10YfQtdC9INC00LvRjyDQv9GA0Y/RgtCw0L3RjNGPLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDM5Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciB1bnN0YWdpbmcuIgorbXNnc3RyICLQldGB0LvQuCDQv9Cw0YLRhyDQv9GA0LjQvNC10L3Rj9C10YLRgdGPINCx0LXQtyDQvtGI0LjQsdC+0LosINGC0L4g0LjQt9C80LXQvdGR0L3QvdGL0Lkg0LHQu9C+0Log0LHRg9C00LXRgiDRgdGA0LDQt9GDINC/0L7QvNC10YfQtdC9INC00LvRjyDRg9Cx0LjRgNCw0L3QuNGPINC40Lcg0LjQvdC00LXQutGB0LAuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNDIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDUxCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBhcHBseWluZy4iCittc2dzdHIgItCV0YHQu9C4INC/0LDRgtGHINC/0YDQuNC80LXQvdGP0LXRgtGB0Y8g0LHQtdC3INC+0YjQuNCx0L7Quiwg0YLQviDQuNC30LzQtdC90ZHQvdC90YvQuSDQsdC70L7QuiDQsdGD0LTQtdGCINGB0YDQsNC30YMg0L/QvtC80LXRh9C10L0g0LTQu9GPINC/0YDQuNC80LXQvdC10L3QuNGPLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDQ1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA0OAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgZGlzY2FyZGluZy4iCittc2dzdHIgItCV0YHQu9C4INC/0LDRgtGHINC/0YDQuNC80LXQvdGP0LXRgtGB0Y8g0LHQtdC3INC+0YjQuNCx0L7Quiwg0YLQviDQuNC30LzQtdC90ZHQvdC90YvQuSDQsdC70L7QuiDQsdGD0LTQtdGCINGB0YDQsNC30YMg0L/QvtC80LXRh9C10L0g0LTQu9GPINC+0YLQvNC10L3RiyDQuNC30LzQtdC90LXQvdC40LkuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwODUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGE0LDQudC7INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LHQu9C+0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LTQu9GPINC30LDQv9C40YHQuDogJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA4NgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICLQoNGD0YfQvdC+0Lkg0YDQtdC20LjQvCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5IOKAlCDRgdC80L7RgtGA0LjRgtC1INC90LjQttC1INC00LvRjyDQvdC10LHQvtC70YzRiNC+0LPQviDRgNGD0LrQvtCy0L7QtNGB0YLQstCwLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwOTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIi0tLVxu0KfRgtC+0LHRiyDRg9C00LDQu9C40YLRjCDCqyVzwrsg0YHRgtGA0L7QutC4LCDRgdC00LXQu9Cw0LnRgtC1INC40YUgJyAnINGB0YLRgNC+0LrQsNC80LggKNC60L7QvdGC0LXQutGB0YIpLlxu0KfRgtC+0LHRiyDRg9C00LDQu9C40YLRjCDCqyVzwrsg0YHRgtGA0L7QutC4LCDRg9C00LDQu9C40YLQtSDQuNGFLlxu0KHRgtGA0L7QutC4LCDQvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEgJXMg0LHRg9C00YPRgiDRg9C00LDQu9C10L3Riy5cbiIKKworIy4gVFJBTlNMQVRPUlM6ICdpdCcgcmVmZXJzIHRvIHRoZSBwYXRjaCBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIG1lc3NhZ2VzLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTAwCittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICLQldGB0LvQuCDQv9Cw0YLRhyDQvdC1INC/0YDQuNC80LXQvdGP0LXRgtGB0Y8g0LHQtdC3INC+0YjQuNCx0L7Quiwg0LLQsNC8INCx0YPQtNC10YIg0LTQsNC90LBcbtCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0LjQt9C80LXQvdC40YLRjCDQtdCz0L4g0YHQvdC+0LLQsC4g0JXRgdC70Lgg0LLRgdC1INGB0YLRgNC+0LrQuCDQsdC70L7QutCwXG7QuNC30LzQtdC90LXQvdC40Lkg0YPQtNCw0LvQtdC90YssINGC0L4g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtSDQsdGD0LTQtdGCINC+0YLQvNC10L3QtdC90L5cbtC4INCx0LvQvtC6INC+0YHRgtCw0L3QtdGC0YHRjyDQsdC10Lcg0LjQt9C80LXQvdC10L3QuNC5LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGE0LDQudC7INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LHQu9C+0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LTQu9GPINGH0YLQtdC90LjRjzogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjEzCittc2dpZCAiIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8iCisiICIKK21zZ3N0ciAi0JjQt9C80LXQvdGR0L3QvdGL0Lkg0LLQsNC80Lgg0LHQu9C+0Log0L3QtSDQv9GA0LjQvNC10L3Rj9C10YLRgdGPLiDQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgdC90L7QstCwICjQvtGC0LLQtdGCIMKrecK7INC+0LfQvdCw0YfQsNC10YIgwqvQvdC10YLCuyEpIFt5L25dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIyMgorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAieSAtINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuVxubiAtINC90LUg0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0Ywg0Y3RgtC+0YIg0LHQu9C+0Log0LjQt9C80LXQvdC10L3QuNC5XG5xIC0g0LLRi9GF0L7QtDsg0L3QtSDQuNC90LTQtdC60YHQuNGA0L7QstCw0YLRjCDRjdGC0L7RgiDQuCDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60LhcbmEgLSDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0YLRjCDRjdGC0L7RgiDQuCDQstGB0LUg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQsdC70L7QutC4INGE0LDQudC70LBcbmQgLSDQvdC1INC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINGN0YLQvtGCINC4INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuCDRhNCw0LnQu9CwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMjgKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgInkgLSDRgdC/0YDRj9GC0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsdC70L7QutCwXG5xIC0g0LLRi9GF0L7QtDsg0L3QtSDQv9GA0Y/RgtCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQuCDQv9C+0YHQu9C10LTRg9GO0YnQuNGFINCx0LvQvtC60L7QslxuYSAtINGB0L/RgNGP0YLQsNGC0Ywg0Y3RgtC+0YIg0Lgg0LLRgdC1INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuCDRhNCw0LnQu9CwXG5kIC0g0L3QtSDQv9GA0Y/RgtCw0YLRjCDRjdGC0L7RgiDQuCDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60Lgg0YTQsNC50LvQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjM0Cittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAieSAtINGD0LHRgNCw0YLRjCDQuNC3INC40L3QtNC10LrRgdCwINGN0YLQvtGCINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuVxubiAtINC90LUg0YPQsdC40YDQsNGC0Ywg0LjQtyDQuNC90LTQtdC60YHQsCDRjdGC0L7RgiDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40LlcbnEgLSDQstGL0YXQvtC0OyDQvdC1INGD0LHQuNGA0LDRgtGMINC40Lcg0LjQvdC00LXQutGB0LAg0Y3RgtC+0YIg0Lgg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQsdC70L7QutC4XG5hIC0g0YPQsdGA0LDRgtGMINC40Lcg0LjQvdC00LXQutGB0LAg0Y3RgtC+0YIg0Lgg0LLRgdC1INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuCDRhNCw0LnQu9CwXG5kIC0g0L3QtSDRg9Cx0LjRgNCw0YLRjCDQuNC3INC40L3QtNC10LrRgdCwINGN0YLQvtGCINC4INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuCDRhNCw0LnQu9CwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDAKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgInkgLSDQv9GA0LjQvNC10L3QuNGC0Ywg0LHQu9C+0Log0LjQt9C80LXQvdC10L3QuNC5INC6INC40L3QtNC10LrRgdGDXG5uIC0g0L3QtSDQv9GA0LjQvNC10L3Rj9GC0Ywg0Y3RgtC+0YIg0LHQu9C+0Log0LjQt9C80LXQvdC10L3QuNC5INC6INC40L3QtNC10LrRgdGDXG5xIC0g0LLRi9GF0L7QtDsg0L3QtSDQv9GA0LjQvNC10L3Rj9GC0Ywg0Y3RgtC+0YIg0Lgg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQsdC70L7QutC4XG5hIC0g0L/RgNC40LzQtdC90LjRgtGMINGN0YLQvtGCINCx0LvQvtC6INC4INCy0YHQtSDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60Lgg0YTQsNC50LvQsFxuZCAtINC90LUg0L/RgNC40LzQtdC90Y/RgtGMINGN0YLQvtGCINC4INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuCDRhNCw0LnQu9CwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDYKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAieSAtINC+0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0LHQu9C+0LrQsCDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1XG5uIC0g0L3QtSDQvtGC0LzQtdC90Y/RgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INCx0LvQvtC60LAg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtVxucSAtINCy0YvRhdC+0LQ7INC90LUg0L7RgtC80LXQvdGP0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQsdC70L7QutCwINC4INCy0YHQtdGFINC/0L7RgdC70LXQtNGD0Y7RidC40YVcbmEgLSDQvtGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INC4INCy0YHQtdGFINC/0L7RgdC70LXQtNGD0Y7RidC40YUg0LHQu9C+0LrQvtCyINGE0LDQudC70LBcbmQgLSDQvdC1INC+0YLQvNC10L3Rj9GC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0Lgg0LLRgdC10YUg0L/QvtGB0LvQtdC00YPRjtGJ0LjRhSDQsdC70L7QutC+0LIg0YTQsNC50LvQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjUyCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAieSAtINC+0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0LHQu9C+0LrQsCDQsiDQuNC90LTQtdC60YHQtSDQuCDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1XG5uIC0g0L3QtSDQvtGC0LzQtdC90Y/RgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INCx0LvQvtC60LAg0LIg0LjQvdC00LXQutGB0LUg0Lgg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtVxucSAtINCy0YvRhdC+0LQ7INC90LUg0L7RgtC80LXQvdGP0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQsdC70L7QutCwINC4INCy0YHQtdGFINC/0L7RgdC70LXQtNGD0Y7RidC40YVcbmEgLSDQvtGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INC4INCy0YHQtdGFINC/0L7RgdC70LXQtNGD0Y7RidC40YUg0LHQu9C+0LrQvtCyINGE0LDQudC70LBcbmQgLSDQvdC1INC+0YLQvNC10L3Rj9GC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGN0YLQvtCz0L4g0Lgg0LLRgdC10YUg0L/QvtGB0LvQtdC00YPRjtGJ0LjRhSDQsdC70L7QutC+0LIg0YTQsNC50LvQsCIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU4Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgInkgLSDQv9GA0LjQvNC10L3QuNGC0Ywg0LHQu9C+0Log0LjQt9C80LXQvdC10L3QuNC5INC6INC40L3QtNC10LrRgdGDINC4INGA0LDQsdC+0YfQtdC80YMg0LrQsNGC0LDQu9C+0LPRg1xubiAtINC90LUg0L/RgNC40LzQtdC90Y/RgtGMINGN0YLQvtGCINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuSDQuiDQuNC90LTQtdC60YHRgyDQuCDRgNCw0LHQvtGH0LXQvNGDINC60LDRgtCw0LvQvtCz0YNcbnEgLSDQstGL0YXQvtC0OyDQvdC1INC/0YDQuNC80LXQvdGP0YLRjCDRjdGC0L7RgiDQuCDQv9C+0YHQu9C10LTRg9GO0YnQuNC1INCx0LvQvtC60LhcbmEgLSDQv9GA0LjQvNC10L3QuNGC0Ywg0Y3RgtC+0YIg0LHQu9C+0Log0Lgg0LLRgdC1INC/0L7RgdC70LXQtNGD0Y7RidC40LUg0LHQu9C+0LrQuCDRhNCw0LnQu9CwXG5kIC0g0L3QtSDQv9GA0LjQvNC10L3Rj9GC0Ywg0Y3RgtC+0YIg0Lgg0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQsdC70L7QutC4INGE0LDQudC70LAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3MworbXNnaWQgIiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiZyAtINCy0YvQsdGA0LDRgtGMINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINC60L7RgtC+0YDRi9C5INC90YPQttC90L4g0L/QtdGA0LXQudGC0Lhcbi8gLSDQv9C+0LjRgdC6INCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5INGBINC/0L7QvNC+0YnRjNGOINGA0LXQs9GD0LvRj9GA0L3QvtCz0L4g0LLRi9GA0LDQttC10L3QuNGPXG5qIC0g0L3QtSDQv9GA0LjQvdC40LzQsNGC0Ywg0YDQtdGI0LXQvdC40LUg0L/QviDRjdGC0L7QvNGDINCx0LvQvtC60YMsINC/0LXRgNC10LnRgtC4INC90LAg0YHQu9C10LTRg9GO0YnQuNC5INCx0LXQtyDRgNC10YjQtdC90LjRj1xuSiAtINC90LUg0L/RgNC40L3QuNC80LDRgtGMINGA0LXRiNC10L3QuNC1INC/0L4g0Y3RgtC+0LzRgyDQsdC70L7QutGDLCDQv9C10YDQtdC50YLQuCDQvdCwINGB0LvQtdC00YPRjtGJ0LjQuVxuayAtINC90LUg0L/RgNC40L3QuNC80LDRgtGMINGA0LXRiNC10L3QuNC1INC/0L4g0Y3RgtC+0LzRgyDQsdC70L7QutGDLCDQv9C10YDQtdC50YLQuCDQvdCwINC/0YDQtdC00YvQtNGD0YnQuNC5INCx0LXQtyDRgNC10YjQtdC90LjRj1xuSyAtINC90LUg0L/RgNC40L3QuNC80LDRgtGMINGA0LXRiNC10L3QuNC1INC/0L4g0Y3RgtC+0LzRgyDQsdC70L7QutGDLCDQv9C10YDQtdC50YLQuCDQvdCwINC/0YDQtdC00YvQtNGD0YnQuNC5XG5zIC0g0YDQsNC30LTQtdC70LjRgtGMINGC0LXQutGD0YnQuNC5INCx0LvQvtC6INC90LAg0LHQu9C+0LrQuCDQvNC10L3RjNGI0LXQs9C+INGA0LDQt9C80LXRgNCwXG5lIC0g0LLRgNGD0YfQvdGD0Y4g0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGC0LXQutGD0YnQuNC5INCx0LvQvtC6XG4/IC0g0LLRi9Cy0LXRgdGC0Lgg0YHQv9GA0LDQstC60YNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzA0Cittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghXG4iCittc2dzdHIgItCS0YvQsdGA0LDQvdC90YvQtSDQsdC70L7QutC4INC90LUg0L/RgNC40LzQtdC90Y/RjtGC0YHRjyDQsdC10Lcg0L7RiNC40LHQvtC6INC6INC40L3QtNC10LrRgdGDIVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMDUKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAi0JLRgdC1INGA0LDQstC90L4g0L/RgNC40LzQtdC90LjRgtGMINC40YUg0Log0YDQsNCx0L7Rh9C10LzRgyDQutCw0YLQsNC70L7Qs9GDPyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzA4Cittc2dpZCAiTm90aGluZyB3YXMgYXBwbGllZC5cbiIKK21zZ3N0ciAi0J3QuNGH0LXQs9C+INC90LUg0L/RgNC40LzQtdC90LXQvdC+LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgItC40LPQvdC+0YDQuNGA0YPRjiDQvdC1INGB0LvQuNGC0L7QtTogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzI4Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAi0KLQvtC70YzQutC+INC40LfQvNC10L3QtdC90LjRjyDQtNCy0L7QuNGH0L3Ri9GFINGE0LDQudC70L7Qsi5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzMwCittc2dpZCAiTm8gY2hhbmdlcy5cbiIKK21zZ3N0ciAi0J3QtdGCINC40LfQvNC10L3QtdC90LjQuS5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzM4Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSDQv9Cw0YLRh9CwIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzOTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMINC40LfQvNC10L3QtdC90LjQtSDRgNC10LbQuNC80LAg0LTQvtGB0YLRg9C/0LAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM5MQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0Ywg0YPQtNCw0LvQtdC90LjQtSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzkyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0Ywg0Y3RgtC+0YIg0LHQu9C+0Log0LjQt9C80LXQvdC10L3QuNC5IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzOTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCh0L/RgNGP0YLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNC1INGA0LXQttC40LzQsCDQtNC+0YHRgtGD0L/QsCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzk2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQodC/0YDRj9GC0LDRgtGMINGD0LTQsNC70LXQvdC40LUg0YTQsNC50LvQsCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KHQv9GA0Y/RgtCw0YLRjCDRjdGC0L7RgiDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40LkgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQwMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGA0LXQttC40LzQsCDQtNC+0YHRgtGD0L/QsCDQuNC3INC40L3QtNC10LrRgdCwIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MDEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0KPQsdGA0LDRgtGMINGD0LTQsNC70LXQvdC40LUg0LjQtyDQuNC90LTQtdC60YHQsCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDAyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQo9Cx0YDQsNGC0Ywg0LjQtyDQuNC90LTQtdC60YHQsCDRjdGC0L7RgiDQsdC70L7QuiDQuNC30LzQtdC90LjQuSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDA1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNC1INGA0LXQttC40LzQsCDQtNC+0YHRgtGD0L/QsCDQuiDQuNC90LTQtdC60YHRgyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDA2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQn9GA0LjQvNC10L3QuNGC0Ywg0YPQtNCw0LvQtdC90LjQtSDQuiDQuNC90LTQtdC60YHRgyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDA3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMINGN0YLQvtGCINCx0LvQvtC6INC6INC40L3QtNC10LrRgdGDIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgNC10LbQuNC80LAg0LTQvtGB0YLRg9C/0LAg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J7RgtC80LXQvdC40YLRjCDRg9C00LDQu9C10L3QuNC1INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INCx0LvQvtC60LAg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDE1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCe0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGA0LXQttC40LzQsCDQtNC+0YHRgtGD0L/QsCDQsiDQuNC90LTQtdC60YHQtSDQuCDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MTYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBkZWxldGlvbiBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J7RgtC80LXQvdC40YLRjCDRg9C00LDQu9C10L3QuNC1INCyINC40L3QtNC10LrRgdC1INC4INGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQxNworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J7RgtC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0Y3RgtC+0LPQviDQsdC70L7QutCwINCyINC40L3QtNC10LrRgdC1INC4INGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0YDQtdC20LjQvNCwINC00L7RgdGC0YPQv9CwINC6INC40L3QtNC10LrRgdGDINC4INGA0LDQsdC+0YfQtdC80YMg0LrQsNGC0LDQu9C+0LPRgyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDIxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMINGD0LTQsNC70LXQvdC40LUg0Log0LjQvdC00LXQutGB0YMg0Lgg0YDQsNCx0L7Rh9C10LzRgyDQutCw0YLQsNC70L7Qs9GDIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRjdGC0L7Qs9C+INCx0LvQvtC60LAg0Log0LjQvdC00LXQutGB0YMg0Lgg0YDQsNCx0L7Rh9C10LzRgyDQutCw0YLQsNC70L7Qs9GDIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1MjIKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTI5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgItC90LAg0LrQsNC60L7QuSDQsdC70L7QuiDQv9C10YDQtdC50YLQuCAo0L3QsNC20LzQuNGC0LUgPNCy0LLQvtC0PiDRh9GC0L7QsdGLINGD0LLQuNC00LXRgtGMINC10YnQtSk/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTMxCittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICLQvdCwINC60LDQutC+0Lkg0LHQu9C+0Log0L/QtdGA0LXQudGC0Lg/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgItCd0LXQstC10YDQvdGL0Lkg0L3QvtC80LXRgDogwqslc8K7XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU0NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICLQn9GA0L7RgdGC0LjRgtC1LCDQvdC+INGC0L7Qu9GM0LrQviAlZCDQsdC70L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtGB0YLRg9C/0LXQvS5cbiIKK21zZ3N0clsxXSAi0J/RgNC+0YHRgtC40YLQtSwg0L3QviDRgtC+0LvRjNC60L4gJWQg0LHQu9C+0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtGB0YLRg9C/0L3Qvi5cbiIKK21zZ3N0clsyXSAi0J/RgNC+0YHRgtC40YLQtSwg0L3QviDRgtC+0LvRjNC60L4gJWQg0LHQu9C+0LrQvtCyINC40LfQvNC10L3QtdC90LjQuSDQtNC+0YHRgtGD0L/QvdC+LlxuIgorbXNnc3RyWzNdICLQn9GA0L7RgdGC0LjRgtC1LCDQvdC+INGC0L7Qu9GM0LrQviAlZCDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuSDQtNC+0YHRgtGD0L/QvdC+LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzEKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBzZWFyY2hcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzUKK21zZ2lkICJzZWFyY2ggZm9yIHJlZ2V4PyAiCittc2dzdHIgItC40YHQutCw0YLRjCDRgSDQv9C+0LzQvtGJ0YzRjiDRgNC10LPRg9C70Y/RgNC90L7Qs9C+INCy0YvRgNCw0LbQtdC90LjRjz8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1ODgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgItCg0LXQs9GD0LvRj9GA0L3QvtC1INCy0YvRgNCw0LbQtdC90LjQtSDQtNC70Y8g0L/QvtC40YHQutCwINCyINC90LXQstC10YDQvdC+0Lwg0YTQvtGA0LzQsNGC0LUgJXM6ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5OAorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICLQndC1INC90LDQudC00LXQvdGLINCx0LvQvtC60LgsINC60L7RgtC+0YDRi9C1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGCINGD0LrQsNC30LDQvdC90L7QvNGDINGI0LDQsdC70L7QvdGDXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYxMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzIKK21zZ2lkICJObyBwcmV2aW91cyBodW5rXG4iCittc2dzdHIgItCd0LXRgiDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+INCx0LvQvtC60LBcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYzOAorbXNnaWQgIk5vIG5leHQgaHVua1xuIgorbXNnc3RyICLQndC1INGB0LvQtdC00YPRjtGJ0LXQs9C+INCx0LvQvtC60LBcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjQ0Cittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmtcbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rLlxuIgorbXNnaWRfcGx1cmFsICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIgorbXNnc3RyWzBdICLQoNCw0LfQsdC40YLQviDQvdCwICVkINCx0LvQvtC6INC40LfQvNC10L3QtdC90LjQuS5cbiIKK21zZ3N0clsxXSAi0KDQsNC30LHQuNGC0L4g0L3QsCAlZCDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuS5cbiIKK21zZ3N0clsyXSAi0KDQsNC30LHQuNGC0L4g0L3QsCAlZCDQsdC70L7QutC+0LIg0LjQt9C80LXQvdC10L3QuNC5LlxuIgorbXNnc3RyWzNdICLQoNCw0LfQsdC40YLQviDQvdCwICVkINCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5LlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NjAKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA2Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgItCf0YDQvtGB0LzQvtGC0YDQtdGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGRvIG5vdCB0cmFuc2xhdGUgdGhlIGNvbW1hbmQgbmFtZXMKKyMuICdzdGF0dXMnLCAndXBkYXRlJywgJ3JldmVydCcsIGV0Yy4KKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTcyNQorbXNnaWQgIiIKKyJzdGF0dXMgICAgICAgIC0gc2hvdyBwYXRocyB3aXRoIGNoYW5nZXNcbiIKKyJ1cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzXG4iCisicmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uXG4iCisicGF0Y2ggICAgICAgICAtIHBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseVxuIgorImRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKK21zZ3N0ciAic3RhdHVzICAgICAgICAtINC/0L7QutCw0LfQsNGC0Ywg0L/Rg9GC0Lgg0YEg0LjQt9C80LXQvdC10L3QuNGP0LzQuFxudXBkYXRlICAgICAgICAtINC00L7QsdCw0LLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQuNC90LTQtdC60YFcbnJldmVydCAgICAgICAgLSDQstC10YDQvdGD0YLRjCDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0Lkg0L3QsNCx0L7RgCDQuNC30LzQtdC90LXQvdC40Lkg0LogSEVBRCDQstC10YDRgdC40LhcbnBhdGNoICAgICAgICAgLSDQstGL0LHRgNCw0YLRjCDQuCDQstGL0LHQvtGA0L7Rh9C90L4g0L7QsdC90L7QstC40YLRjCDQsdC70L7QutC4XG5kaWZmICAgICAgICAgIC0g0L/RgNC+0YHQvNC+0YLRgNC10YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LzQtdC20LTRgyBIRUFEINC4INC40L3QtNC10LrRgdC+0LxcbmFkZCB1bnRyYWNrZWQgLSDQtNC+0LHQsNCy0LjRgtGMINGB0L7QtNC10YDQttC40LzQvtC1INC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDRhNCw0LnQu9C+0LIg0LIg0LjQvdC00LXQutGBXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc0MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NDcKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc1MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTcKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc2MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjcKK21zZ2lkICJtaXNzaW5nIC0tIgorbXNnc3RyICLQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIC0tIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5rbm93biAtLXBhdGNoIG1vZGU6ICVzIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3Ri9C5INGA0LXQttC40Lwg0LTQu9GPIC0tcGF0Y2g6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C5INCw0YDQs9GD0LzQtdC90YIgJXMsINC+0LbQuNC00LDQtdGC0YHRjyAtLSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgItC70L7QutCw0LvRjNC90YvQuSDRh9Cw0YHQvtCy0L7QuSDQv9C+0Y/RgSDQvtGC0LvQuNGH0LDQtdGC0YHRjyDQvtGCIEdNVCDQvdCwINC90LUg0LzQuNC90YPRgtC90YvQuSDQuNC90YLQtdGA0LLQsNC7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQ1IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUxCittc2dpZCAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iCittc2dzdHIgItC70L7QutCw0LvRjNC90YvQuSDRgdC00LLQuNCzINCy0YDQtdC80LXQvdC4INCx0L7Qu9GM0YjQtSDQuNC70Lgg0YDQsNCy0LXQvSAyNCDRh9Cw0YHQsFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIxOSBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyNQorbXNnaWQgInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIKK21zZ3N0ciAi0YDQtdC00LDQutGC0L7RgCDQsdGL0Lsg0LfQsNCy0LXRgNGI0LXQvSDRgSDQvtGI0LjQsdC60L7QuSwg0L7RgtC80LXQvdGP0Y4g0LLRgdGRIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMwMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMnIGNvbnRhaW5zIGFuIGludGVybWVkaWF0ZSB2ZXJzaW9uIG9mIHRoZSBlbWFpbCB5b3Ugd2VyZSBjb21wb3NpbmcuXG4iCittc2dzdHIgIsKrJXPCuyDRgdC+0LTQtdGA0LbQuNGCINC/0YDQvtC80LXQttGD0YLQvtGH0L3Rg9GOINCy0LXRgNGB0LjRjiDQv9C40YHRjNC80LAsINC60L7RgtC+0YDQvtC1INCy0Ysg0LPQvtGC0L7QstC40YLQtS5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIsKrJXMuZmluYWzCuyDRgdC+0LTQtdGA0LbQuNGCINC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdC+0LUg0L/QuNGB0YzQvNC+LlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMyNgorbXNnaWQgIi0tZHVtcC1hbGlhc2VzIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG9wdGlvbnNcbiIKK21zZ3N0ciAiLS1kdW1wLWFsaWFzZXMg0L3QtSDRgdC+0LLQvNC10YHRgtC40LzQviDRgSDQtNGA0YPQs9C40LzQuCDQvtC/0YbQuNGP0LzQuFxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjM5NSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY1NgorbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgItCd0LXQu9GM0LfRjyDQt9Cw0L/Rg9GB0LrQsNGC0YwgZ2l0IGZvcm1hdC1wYXRjaCDQstC90LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRj1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjM5OAorbXNnaWQgIiIKKyJgYmF0Y2gtc2l6ZWAgYW5kIGByZWxvZ2luYCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciAodmlhIGNvbW1hbmQtbGluZSBvciAiCisiY29uZmlndXJhdGlvbiBvcHRpb24pXG4iCittc2dzdHIgIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQvdC+0LUg0L/QvtC70LUgLS1zdXBwcmVzcy1jYzogwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTAxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90YvQuSDQv9Cw0YDQsNC80LXRgtGAIC0tY29uZmlybTogwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTI5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INGB0L7QutGA0LDRidC10L3QuNC1INC00LvRjyBzZW5kbWFpbCDRgSDQutCw0LLRi9GH0LrQsNC80Lgg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUzMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDCqzppbmNsdWRlOsK7INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjzogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogYC9maWxlYCBvciBgfHBpcGVgIHJlZGlyZWN0aW9uIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INC/0LXRgNC10L3QsNC/0YDQsNCy0LvQtdC90LjQtSDCqy9maWxlwrsg0LjQu9C4IMKrfHBpcGXCuyDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y86ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INGB0YLRgNC+0LrQsCBzZW5kbWFpbCDQvdC1INGA0LDRgdC/0L7Qt9C90LDQvdCwOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjYyMgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiRmlsZSAnJXMnIGV4aXN0cyBidXQgaXQgY291bGQgYWxzbyBiZSB0aGUgcmFuZ2Ugb2YgY29tbWl0c1xuIgorInRvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uXG4iCisiXG4iCisiICAgICogU2F5aW5nIFwiLi8lc1wiIGlmIHlvdSBtZWFuIGEgZmlsZTsgb3JcbiIKKyIgICAgKiBHaXZpbmcgLS1mb3JtYXQtcGF0Y2ggb3B0aW9uIGlmIHlvdSBtZWFuIGEgcmFuZ2UuXG4iCittc2dzdHIgItCk0LDQudC7IMKrJXPCuyDRgdGD0YnQtdGB0YLQstGD0LXRgiwg0L3QviDRjdGC0L4g0YLQsNC60LbQtSDQvNC+0LbQtdGCINCx0YvRgtGMINC4XG7QtNC40LDQv9Cw0LfQvtC90L7QvCDQutC+0LzQvNC40YLQvtCyINC00LvRjyDQutC+0YLQvtGA0YvRhSDQvdGD0LbQvdC+INGB0LTQtdC70LDRgtGMINC/0LDRgtGH0LguIFxu0KPRgdGC0YDQsNC90LjRgtC1INC90LXQvtC00L3QvtC30L3QsNGH0L3QvtGB0YLRjOKAplxuXG4gICAgKiDQo9C60LDQt9Cw0LIgXCIuLyVzXCIg0LXRgdC70Lgg0LLRiyDQuNC80LXQtdGC0LUg0LIg0LLQuNC00YMg0LjQvNGPINGE0LDQudC70LA7INC40LvQuFxuICAgICog0J/QtdGA0LXQtNCw0LIg0L7Qv9GG0LjRjiAtLWZvcm1hdC1wYXRjaCDQtdGB0LvQuCDQstGLINC40LzQtdC10YLQtSDQsiDQstC40LTRgyDQtNC40LDQv9Cw0LfQvtC9INC60L7QvNC80LjRgtC+0LIuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjQzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgb3BlbmRpciAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjY3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJmYXRhbDogJXM6ICVzXG4iCisid2FybmluZzogbm8gcGF0Y2hlcyB3ZXJlIHNlbnRcbiIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LA6ICVzOiAlc1xu0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTog0L/QsNGC0YfQuCDQvdC1INCx0YvQu9C4INC+0YLQv9GA0LDQstC70LXQvdGLXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6Njc4Cittc2dpZCAiIgorIlxuIgorIk5vIHBhdGNoIGZpbGVzIHNwZWNpZmllZCFcbiIKKyJcbiIKK21zZ3N0ciAiXG7QpNCw0LnQuyDRgSDQv9Cw0YLRh9C10Lwg0L3QtSDRg9C60LDQt9Cw0L0hXG5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2OTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAi0J3QtdGCINGB0YLRgNC+0LrQuCDRgSDRgtC10LzQvtC5INCyICVzPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MDEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINC00LvRjyDQt9Cw0L/QuNGB0LggJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcxMgorbXNnaWQgIiIKKyJMaW5lcyBiZWdpbm5pbmcgaW4gXCJHSVQ6XCIgd2lsbCBiZSByZW1vdmVkLlxuIgorIkNvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzXG4iCisiZm9yIHRoZSBwYXRjaCB5b3UgYXJlIHdyaXRpbmcuXG4iCisiXG4iCisiQ2xlYXIgdGhlIGJvZHkgY29udGVudCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzZW5kIGEgc3VtbWFyeS5cbiIKK21zZ3N0ciAi0KHRgtGA0L7QutC4LCDQvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEgwqtHSVQ6wrsg0LHRg9C00YPRgiDRg9C00LDQu9C10L3Riy5cbtCS0L7Qt9C80L7QttC90L4g0LHRg9C00LXRgiDQv9C+0LvQtdC30L3QviDQstC60LvRjtGH0LjRgtGMINGB0YLQsNGC0LjRgdGC0LjQutGDINC00L7QsdCw0LLQu9C10L3QuNC5XG7QuCDRg9C00LDQu9C10L3QuNC5INC40LvQuCDRgtCw0LHQu9C40YbRgyDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC6INGB0L7Qt9C00LDQstCw0LXQvNC+0LzRgyDQv9Cw0YLRh9GDLlxuXG7QntGH0LjRgdGC0LjRgtC1INGB0L7QtNC10YDQttC40LzQvtC1LCDQtdGB0LvQuCDQstGLINC90LUg0YXQvtGC0LjRgtC1INC+0YLQv9GA0LDQstC70Y/RgtGMINC/0LjRgdGM0LzQviDRgdC+INGB0LLQvtC00LrQvtC5INC40LfQvNC10L3QtdC90LjQuS5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMICVzOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXMuZmluYWw6ICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMICVzLmZpbmFsOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3OTYKK21zZ2lkICJTdW1tYXJ5IGVtYWlsIGlzIGVtcHR5LCBza2lwcGluZyBpdFxuIgorbXNnc3RyICLQn9C40YHRjNC80L4g0YHQviDRgdCy0L7QtNC60L7QuSDQuNC30LzQtdC90LXQvdC40Lkg0L/Rg9GB0YLQvtC1LCDQv9C+0L/Rg9GB0LrQsNGOINC10LPQvlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgzMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgPCVzPiBbeS9OXT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg4NgorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSA4Yml0LCBidXQgZG8gbm90IGRlY2xhcmUgYSBDb250ZW50LVRyYW5zZmVyLSIKKyJFbmNvZGluZy5cbiIKK21zZ3N0ciAi0KHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70YsgOCDQsdC40YLQvdGL0LUsINC90L4g0L3QtSDRgdC+0LTQtdGA0LbQsNGCIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODkxCittc2dpZCAiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIKK21zZ3N0ciAi0JrQsNC60YPRjiA4INCx0LjRgtC90YPRjiDQutC+0LTQuNGA0L7QstC60YMg0L3Rg9C20L3QviDRg9C60LDQt9Cw0YLRjCBbVVRGLThdPyAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODk5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJSZWZ1c2luZyB0byBzZW5kIGJlY2F1c2UgdGhlIHBhdGNoXG4iCisiXHQlc1xuIgorImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiBQYXNzIC0tZm9yY2UgaWYgeW91IHJlYWxseSB3YW50IHRvIHNlbmQuXG4iCittc2dzdHIgItCe0YLQutCw0LfRi9Cy0LDRjtGB0Ywg0L7RgtC/0YDQsNCy0LjRgtGMLCDRgi7Qui4g0L/QsNGC0Ydcblx0JXNcbtGB0L7QtNC10YDQttC40YIg0YjQsNCx0LvQvtC90L3Ri9C5INC30LDQs9C+0LvQvtCy0L7QuiDCqyoqKiBTVUJKRUNUIEhFUkUgKioqwrsuINCj0LrQsNC20LjRgtC1INC/0LDRgNCw0LzQtdGC0YAgLS1mb3JjZSwg0LXRgdC70Lgg0LLRiyAg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INC+0YLQv9GA0LDQstC40YLRjCDQtdCz0L4uXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTE4Cittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAi0JrQvtC80YMg0LTQvtC70LbQvdGLINCx0YvRgtGMINC+0YLQv9GA0LDQstC70LXQvdGLINC/0LjRgdGM0LzQsCAo0LXRgdC70Lgg0L3Rg9C20L3Qvik/IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkzNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsDog0YHQvtC60YDQsNGJ0LXQvdC40LUgwqslc8K7INGA0LDRgdC60YDRi9Cy0LDQtdGC0YHRjyDRgdCw0LzQviDQsiDRgdC10LHRj1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk0OAorbXNnaWQgIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiCittc2dzdHIgIk1lc3NhZ2UtSUQg0LrQvtGC0L7RgNGL0Lkg0L3Rg9C20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LIg0L/QvtC70LUgSW4tUmVwbHktVG8g0LTQu9GPINC/0LXRgNCy0L7Qs9C+INC/0LjRgdGM0LzQsCAo0LXRgdC70Lgg0L3Rg9C20L3Qvik/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDA2IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAxNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJlcnJvcjogdW5hYmxlIHRvIGV4dHJhY3QgYSB2YWxpZCBhZGRyZXNzIGZyb206ICVzXG4iCittc2dzdHIgItC+0YjQuNCx0LrQsDog0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0LTQtdC70LjRgtGMINC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lkg0LDQtNGA0LXRgSDQuNC3OiAlc1xuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3FdIFtkXSBbZV0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAxOAorbXNnaWQgIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIKK21zZ3N0ciAi0KfRgtC+INC90YPQttC90L4g0YHQtNC10LvQsNGC0Ywg0YEg0Y3RgtC40Lwg0LDQtNGA0LXRgdC+0Lw/IChbcV0gLSDQstGL0YXQvtC0fFtkXSAtINC+0YLQsdGA0L7RgdC40YLRjHxbZV0gLSDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCk6ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzM1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkNBIHBhdGggXCIlc1wiIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQv9GD0YLRjCBDQSDCqyVzwrsg0L3QtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDE4Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiICAgINCh0L/QuNGB0L7QuiBDYyAo0L/QvtC70YPRh9Cw0YLQtdC70LXQuSDQutC+0L/QuNC4INC/0LjRgdGM0LzQsCkg0LHRi9C7INGA0LDRgdGI0LjRgNC10L0g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQvNC4XG4gICAg0LDQtNGA0LXRgdCw0LzQuCwg0L3QsNC50LTQtdC90L3Ri9C80Lgg0LIg0YHQvtC+0LHRidC10L3QuNC4INC60L7QvNC80LjRgtCwINC/0LDRgtGH0LAuINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOXG4gICAgc2VuZC1lbWFpbCDQv9C10YDQtdGB0L/RgNCw0YjQuNCy0LDQtdGCINC/0LXRgNC10LQg0L7RgtC/0YDQsNCy0LrQvtC5LCDQutC+0LPQtNCwINC+0L3QsCDQv9GA0L7QuNGB0YXQvtC00LjRgi5cbiAgINCt0YLQviDQv9C+0LLQtdC00LXQvdC40LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQuNC30LzQtdC90LXQvdC+INC/0LDRgNCw0LzQtdGC0YDQvtC8INGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4XG4gICAgc2VuZGVtYWlsLmNvbmZpcm0uXG5cbiAgICDQlNC70Y8g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHNlbmQtZW1haWwgLS1oZWxwwrsuXG4gICAg0KfRgtC+0LHRiyDQvtGB0YLQsNCy0LjRgtGMINGC0LXQutGD0YnQtdC1INC/0L7QstC10LTQtdC90LjQtSwg0L3QviDRgdC60YDRi9GC0Ywg0Y3RgtC+INGB0L7QvtCx0YnQtdC90LjQtSxcbiAgICDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG/Cuy5cblxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDMzCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICLQntGC0L/RgNCw0LLQuNGC0Ywg0Y3RgtC+INC/0LjRgdGM0LzQvj8gKFt5XSAtINC00LB8W25dIC0g0L3QtdGCfFtlXSAtINC40LfQvNC10L3QuNGC0Yx8W3FdIC0g0LLRi9GF0L7QtHxbYV0gLSDQstGB0LUpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTQzNgorbXNnaWQgIlNlbmQgdGhpcyBlbWFpbCByZXBseSByZXF1aXJlZCIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDRjdGC0L7Qs9C+INC+0YLQstC10YLQsCDQvdCwINC/0LjRgdGM0LzQviDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdCwIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjQKK21zZ2lkICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorbXNnc3RyICLQotGA0LXQsdGD0LXQvNGL0LkgU01UUCDRgdC10YDQstC10YAg0L3QtSDQsdGL0Lsg0L/RgNCw0LLQuNC70YzQvdC+INC+0LHRitGP0LLQu9C10L0uIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICLQodC10YDQstC10YAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIgU1RBUlRUTFMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MTYgZ2l0LXNlbmQtZW1haWwucGVybDoxNTIwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNUQVJUVExTIGZhaWxlZCEgJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCBTVEFSVFRMUyEgJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUyOQorbXNnaWQgIlVuYWJsZSB0byBpbml0aWFsaXplIFNNVFAgcHJvcGVybHkuIENoZWNrIGNvbmZpZyBhbmQgdXNlIC0tc210cC1kZWJ1Zy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0YwgU01UUC4g0J/RgNC+0LLQtdGA0YzRgtC1INCy0LDRiNC4INC90LDRgdGC0YDQvtC50LrQuCDQuCDQv9C+0L/RgNC+0LHRg9C50YLQtSDQt9Cw0L/Rg9GB0YLQuNGC0Ywg0LIg0L/QsNGA0LDQvNC10YLRgNC+0LwgLS1zbXRwLWRlYnVnLiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQ3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBzZW5kICVzXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC/0YDQsNCy0LjRgtGMICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICLQmNC80LjRgtCw0YbQuNGPINC+0YLQv9GA0LDQstC60LggJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTUwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LvQtdC90L4gJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTUyCittc2dpZCAiRHJ5LU9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAi0JjQvNC40YLQsNGG0LjRjyBPSy4g0JbRg9GA0L3QsNC7INGB0L7QtNC10YDQttC40YI6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU1MgorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT0suINCW0YPRgNC90LDQuyDRgdC+0LTQtdGA0LbQuNGCOlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NjQKK21zZ2lkICJSZXN1bHQ6ICIKK21zZ3N0ciAi0KDQtdC30YPQu9GM0YLQsNGCOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU2NworbXNnaWQgIlJlc3VsdDogT0tcbiIKK21zZ3N0ciAi0KDQtdC30YPQu9GM0YLQsNGCOiBPS1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1ODUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGE0LDQudC7ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MzIgZ2l0LXNlbmQtZW1haWwucGVybDoxNjUyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSDQlNC+0LHQsNCy0LvQtdC90LjQtSBjYzogJXMg0YHQviDRgdGC0YDQvtC60Lggwqslc8K7XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTYzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkg0JTQvtCx0LDQstC70LXQvdC40LUgdG86ICVzINGB0L4g0YHRgtGA0L7QutC4IMKrJXPCu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2OTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG5vbi1tYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihub24tbWJveCkg0JTQvtCx0LDQstC70LXQvdC40LUgY2M6ICVzINGB0L4g0YHRgtGA0L7QutC4IMKrJXPCu1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3MjYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKGJvZHkpINCU0L7QsdCw0LLQu9C10L3QuNC1IGNjOiAlcyDRgdC+INGB0YLRgNC+0LrQuCDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODM3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSDQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDCqyVzwrsiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIEFkZGluZyAlczogJXMgZnJvbTogJyVzJ1xuIgorbXNnc3RyICIoJXMpINCU0L7QsdCw0LLQu9C10L3QuNC1ICVzOiAlcyDQuNC3OiDCqyVzwrtcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODQ4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiKCVzKSDQvdC1INGD0LTQsNC70L7RgdGMINC30LDQutGA0YvRgtGMINC/0L7RgtC+0Log0Logwqslc8K7IgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzgKK21zZ2lkICJjYW5ub3Qgc2VuZCBtZXNzYWdlIGFzIDdiaXQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC/0YDQsNCy0LjRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQsiA3INCx0LjRgtC90L7QuSDQutC+0LTQuNGA0L7QstC60LUiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg4NgorbXNnaWQgImludmFsaWQgdHJhbnNmZXIgZW5jb2RpbmciCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80LDRjyDQutC+0LTQuNGA0L7QstC60LAg0L/QtdGA0LXQtNCw0YfQuCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTI3IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk3OSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5ODkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0YwgJXM6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkzMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIgorbXNnc3RyICIlczog0L/QsNGC0Ycg0YHQvtC00LXRgNC20LjRgiDRgdGC0YDQvtC60YMg0LTQu9C40L3QvdC10LUg0YfQtdC8IDk5OCDRgdC40LzQstC+0LvQvtCyIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NDcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgItCf0YDQvtC/0YPRgdC60LDRjiAlcyDRgSDQvtC60L7QvdGH0LDQvdC40LXQvCDRgNC10LfQtdGA0LLQvdC+0Lkg0LrQvtC/0LjQuCDCqyVzwrsuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCAiW3l8Tl0iIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTUxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBzZW5kICVzPyBbeXxOXTogIgorbXNnc3RyICLQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtGC0L/RgNCw0LLQuNGC0YwgJXM/IFt5IC0g0LTQsHxOIC0g0L3QtdGCXTogIgpkaWZmIC0tZ2l0IGEvcG8vc3YucG8gYi9wby9zdi5wbwppbmRleCAxYjRhZDgzLi5iYzA3MjQ4IDEwMDY0NAotLS0gYS9wby9zdi5wbworKysgYi9wby9zdi5wbwpAQCAtMSwxNiArMSwxNCBAQAotIyBTd2VkaXNoIHRyYW5zbGF0aW9uIG9mIGdpdC1ndWkuCi0jIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFNoYXduIFBlYXJjZSwgZXQgYWwuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCi0jCi0jIE1pa2FlbCBNYWdudXNzb24gPG1pa2FjaHVAZ21haWwuY29tPiwgMjAwOC4KLSMgUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+LCAyMDA3LTIwMDgsIDIwMTUuCisjIFN3ZWRpc2ggdHJhbnNsYXRpb25zIGZvciBHaXQuCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPiwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwgMjAyMC4KICMKIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IHN2XG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTAzLTI3IDEwOjE1KzAxMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTAzLTI3IDEwOjI0KzAxMDBcbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdCAyLjI1LjBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxOS0xMi0zMCAwODo0OCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMC0wMS0wNCAxOTo1MSswMTAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT5cbiIKICJMYW5ndWFnZS1UZWFtOiBTd2VkaXNoIDx0cC1zdkBsaXN0b3IudHAtc3Yuc2U+XG4iCiAiTGFuZ3VhZ2U6IHN2XG4iCkBAIC0xOCwyNzE5ICsxNiwyNTUxNiBAQAogIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgogIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKICJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKLSJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS42XG4iCisiWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuN1xuIgogCi0jOiBnaXQtZ3VpLnNoOjg2MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgotbXNnc3RyICJPZ2lsdGlndCB0ZWNrZW5zbml0dCBhbmdpdmV0IGkgJXM6IgorIzogYWRkLWludGVyYWN0aXZlLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiVmFkw6UgKCVzKT8iCiAKLSM6IGdpdC1ndWkuc2g6OTE1Ci1tc2dpZCAiTWFpbiBGb250IgotbXNnc3RyICJIdXZ1ZHRlY2tlbnNuaXR0IgorIzogYWRkLWludGVyYWN0aXZlLmM6NTAwIGFkZC1pbnRlcmFjdGl2ZS5jOjgwMSBzZXF1ZW5jZXIuYzozMjE2CisjOiBzZXF1ZW5jZXIuYzozNjU2IGJ1aWx0aW4vcmViYXNlLmM6ODcxIGJ1aWx0aW4vcmViYXNlLmM6MTY0MworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE5IGJ1aWx0aW4vcmViYXNlLmM6MjA2MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIGluZGV4ZXQiCiAKLSM6IGdpdC1ndWkuc2g6OTE2Ci1tc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCi1tc2dzdHIgIkRpZmYva29uc29sdGVja2Vuc25pdHQiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNjkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk0Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICJiaW7DpHIiCiAKLSM6IGdpdC1ndWkuc2g6OTMxIGdpdC1ndWkuc2g6OTQ1IGdpdC1ndWkuc2g6OTU4IGdpdC1ndWkuc2g6MTA0OAotIzogZ2l0LWd1aS5zaDoxMDY3IGdpdC1ndWkuc2g6MzEyNQotbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgotbXNnc3RyICJnaXQtZ3VpOiDDtmRlc2RpZ2VydCBmZWwiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNzgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzMyCittc2dpZCAibm90aGluZyIKK21zZ3N0ciAiaW5nZW50aW5nIgogCi0jOiBnaXQtZ3VpLnNoOjkzMgotbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKLW1zZ3N0ciAiSGl0dGFyIGludGUgZ2l0IGkgUEFUSC4iCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTQKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzI5Cittc2dpZCAidW5jaGFuZ2VkIgorbXNnc3RyICJvw6RuZHJhZCIKIAotIzogZ2l0LWd1aS5zaDo5NTkKLW1zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKLW1zZ3N0ciAiS2FuIGludGUgdG9sa2EgdmVyc2lvbnNzdHLDpG5nIGZyw6VuIEdpdDoiCi0KLSM6IGdpdC1ndWkuc2g6OTg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgotIlxuIgotIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCi0iXG4iCi0iJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgotIlxuIgotIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCi1tc2dzdHIgIiIKLSJLYW4gaW50ZSBhdmfDtnJhIEdpdHMgdmVyc2lvbi5cbiIKLSJcbiIKLSIlcyBzw6RnZXIgYXR0IGRlc3MgdmVyc2lvbiDDpHIgXCIlc1wiLlxuIgotIlxuIgotIiVzIGtyw6R2ZXIgbWluc3QgR2l0IDEuNS4wIGVsbGVyIHNlbmFyZS5cbiIKLSJcbiIKLSJBbnRhIGF0dCBcIiVzXCIgw6RyIHZlcnNpb24gMS41LjA/XG4iCi0KLSM6IGdpdC1ndWkuc2g6MTI4MQotbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKLW1zZ3N0ciAiR2l0LWthdGFsb2dlbiBoaXR0YWRlcyBpbnRlOiIKLQotIzogZ2l0LWd1aS5zaDoxMzE1Ci1tc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKLW1zZ3N0ciAiS2FuIGludGUgZ8OlIHRpbGwgYsO2cmphbiBww6UgYXJiZXRza2F0YWxvZ2VuOiIKLQotIzogZ2l0LWd1aS5zaDoxMzIzCi1tc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgotbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSBuYWtldCBhcmtpdjoiCi0KLSM6IGdpdC1ndWkuc2g6MTMzMQotbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgotbXNnc3RyICJJbmdlbiBhcmJldHNrYXRhbG9nIgotCi0jOiBnaXQtZ3VpLnNoOjE1MDMgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICJVcHBkYXRlcmFyIGZpbHN0YXR1cy4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNTYzCi1tc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKLW1zZ3N0ciAiU8O2a2VyIGVmdGVyIMOkbmRyYWRlIGZpbGVyLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE2MzkKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICIiCi0iQW5yb3BhciBrcm9rZW4gZsO2ciBmw7ZyYmVyZWRlbHNlIGF2IGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKHByZXBhcmUtY29tbWl0LSIKLSJtc2cpLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE2NTYKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgotbXNnc3RyICIiCi0iSW5jaGVja25pbmdlbiBhdnZpc2FkZXMgYXYga3Jva2VuIGbDtnIgZsO2cmJlcmVkZWxzZSBhdiBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlICIKLSIocHJlcGFyZS1jb21taXQtbXNnKS4iCi0KLSM6IGdpdC1ndWkuc2g6MTgxNCBsaWIvYnJvd3Nlci50Y2w6MjUyCi1tc2dpZCAiUmVhZHkuIgotbXNnc3RyICJLbGFyLiIKLQotIzogZ2l0LWd1aS5zaDoxOTc4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIkRpc3BsYXkgbGltaXQgKGd1aS5tYXhmaWxlc2Rpc3BsYXllZCA9ICVzKSByZWFjaGVkLCBub3Qgc2hvd2luZyBhbGwgJXMgZmlsZXMuIgotbXNnc3RyICIiCi0iVmlzbmluZ3NncsOkbnMgKGd1aS5tYXhmaWxlc2Rpc3BsYXllZCA9ICVzKSBuw6VkZCwgdmlzYXJlIGludGUgc2FtdGxpZ2EgJXMgIgotImZpbGVyLiIKLQotIzogZ2l0LWd1aS5zaDoyMTAxCi1tc2dpZCAiVW5tb2RpZmllZCIKLW1zZ3N0ciAiT2bDtnLDpG5kcmFkZSIKLQotIzogZ2l0LWd1aS5zaDoyMTAzCi1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIkbDtnLDpG5kcmFkZSwgZWoga8O2YWRlIgotCi0jOiBnaXQtZ3VpLnNoOjIxMDQgZ2l0LWd1aS5zaDoyMTE2Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjIxMDUgZ2l0LWd1aS5zaDoyMTE3Ci1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkRlbGFyIGvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjIxMDYgZ2l0LWd1aS5zaDoyMTE4Ci1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCi1tc2dzdHIgIkvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nLCBzYWtuYWRlIgotCi0jOiBnaXQtZ3VpLnNoOjIxMDgKLW1zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiRmlsdHlwIMOkbmRyYWQsIGVqIGvDtmFkZSIKLQotIzogZ2l0LWd1aS5zaDoyMTA5IGdpdC1ndWkuc2g6MjExMAotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBvbGQgdHlwZSBzdGFnZWQgZm9yIGNvbW1pdCIKLW1zZ3N0ciAiRmlsdHlwIMOkbmRyYWQsIGdhbW1hbCB0eXAga8O2YWRlIGbDtnIgaW5jaGVja25pbmciCi0KLSM6IGdpdC1ndWkuc2g6MjExMQotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCi1tc2dzdHIgIkZpbHR5cCDDpG5kcmFkLCBrw7ZhZGUiCi0KLSM6IGdpdC1ndWkuc2g6MjExMgotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBtb2RpZmljYXRpb24gbm90IHN0YWdlZCIKLW1zZ3N0ciAiRmlsdHlwc8OkbmRyaW5nYXIga8O2YWRlLCBpbm5laMOlbGxzw6RuZHJpbmdhciBlaiBrw7ZhZGUiCi0KLSM6IGdpdC1ndWkuc2g6MjExMwotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBmaWxlIG1pc3NpbmciCi1tc2dzdHIgIkZpbHR5cHPDpG5kcmluZ2FyIGvDtmFkZSwgZmlsIHNha25hcyIKLQotIzogZ2l0LWd1aS5zaDoyMTE1Ci1tc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgotbXNnc3RyICJFaiBzcMOlcmFkZSwgZWoga8O2YWRlIgotCi0jOiBnaXQtZ3VpLnNoOjIxMjAKLW1zZ2lkICJNaXNzaW5nIgotbXNnc3RyICJTYWtuYWRlIgotCi0jOiBnaXQtZ3VpLnNoOjIxMjEKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCi1tc2dzdHIgIkvDtmFkZSBmw7ZyIGJvcnR0YWduaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjIxMjIKLW1zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCi1tc2dzdHIgIkvDtmFkZSBmw7ZyIGJvcnR0YWduaW5nLCBmb3J0ZmFyYW5kZSBuw6RydmFyYW5kZSIKLQotIzogZ2l0LWd1aS5zaDoyMTI0IGdpdC1ndWkuc2g6MjEyNSBnaXQtZ3VpLnNoOjIxMjYgZ2l0LWd1aS5zaDoyMTI3Ci0jOiBnaXQtZ3VpLnNoOjIxMjggZ2l0LWd1aS5zaDoyMTI5Ci1tc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKLW1zZ3N0ciAiS3LDpHZlciBrb25mbGlrdGhhbnRlcmluZyBlZnRlciBzYW1tYW5zbGFnbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyMTY0Ci1tc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiU3RhcnRhciBnaXRrLi4uIHbDpG50YS4uLiIKLQotIzogZ2l0LWd1aS5zaDoyMTc2Ci1tc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCi1tc2dzdHIgIkhpdHRhZGUgaW50ZSBnaXRrIGkgUEFUSC4iCi0KLSM6IGdpdC1ndWkuc2g6MjIzNQotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgotbXNnc3RyICJIaXR0YWRlIGludGUgZ2l0IGd1aSBpIFBBVEguIgotCi0jOiBnaXQtZ3VpLnNoOjI2NTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MQotbXNnaWQgIlJlcG9zaXRvcnkiCi1tc2dzdHIgIkFya2l2IgotCi0jOiBnaXQtZ3VpLnNoOjI2NTUKLW1zZ2lkICJFZGl0IgotbXNnc3RyICJSZWRpZ2VyYSIKLQotIzogZ2l0LWd1aS5zaDoyNjU3IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjcKLW1zZ2lkICJCcmFuY2giCi1tc2dzdHIgIkdyZW4iCi0KLSM6IGdpdC1ndWkuc2g6MjY2MCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU0Ci1tc2dpZCAiQ29tbWl0QEBub3VuIgotbXNnc3RyICJJbmNoZWNrbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyNjYzIGxpYi9tZXJnZS50Y2w6MTIzIGxpYi9tZXJnZS50Y2w6MTUyIGxpYi9tZXJnZS50Y2w6MTcwCi1tc2dpZCAiTWVyZ2UiCi1tc2dzdHIgIlNsw6UgaWhvcCIKLQotIzogZ2l0LWd1aS5zaDoyNjY0IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjMKLW1zZ2lkICJSZW1vdGUiCi1tc2dzdHIgIkZqw6RycmFya2l2IgotCi0jOiBnaXQtZ3VpLnNoOjI2NjcKLW1zZ2lkICJUb29scyIKLW1zZ3N0ciAiVmVya3R5ZyIKLQotIzogZ2l0LWd1aS5zaDoyNjc2Ci1tc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCi1tc2dzdHIgIlV0Zm9yc2thIGFyYmV0c2tvcGlhIgotCi0jOiBnaXQtZ3VpLnNoOjI2ODIKLW1zZ2lkICJHaXQgQmFzaCIKLW1zZ3N0ciAiR2l0IEJhc2giCi0KLSM6IGdpdC1ndWkuc2g6MjY5MgotbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgotbXNnc3RyICJCbMOkZGRyYSBpIGdyZW5lbnMgZmlsZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjY5NgotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCi1tc2dzdHIgIkJsw6RkZHJhIGZpbGVyIHDDpSBncmVuLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3MDEKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICJWaXN1YWxpc2VyYSBncmVuZW5zIGhpc3RvcmlrIgotCi0jOiBnaXQtZ3VpLnNoOjI3MDUKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgotbXNnc3RyICJWaXN1YWxpc2VyYSBhbGxhIGdyZW5hcnMgaGlzdG9yaWsiCi0KLSM6IGdpdC1ndWkuc2g6MjcxMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICJCbMOkZGRyYSBpIGZpbGVyIGbDtnIgJXMiCi0KLSM6IGdpdC1ndWkuc2g6MjcxNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCi1tc2dzdHIgIlZpc3VhbGlzZXJhIGhpc3RvcmlrIGbDtnIgJXMiCi0KLSM6IGdpdC1ndWkuc2g6MjcxOSBsaWIvZGF0YWJhc2UudGNsOjQwIGxpYi9kYXRhYmFzZS50Y2w6NjYKLW1zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgotbXNnc3RyICJEYXRhYmFzc3RhdGlzdGlrIgotCi0jOiBnaXQtZ3VpLnNoOjI3MjIgbGliL2RhdGFiYXNlLnRjbDozMwotbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgotbXNnc3RyICJLb21wcmltZXJhIGRhdGFiYXMiCi0KLSM6IGdpdC1ndWkuc2g6MjcyNQotbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKLW1zZ3N0ciAiVmVyaWZpZXJhIGRhdGFiYXMiCi0KLSM6IGdpdC1ndWkuc2g6MjczMiBnaXQtZ3VpLnNoOjI3MzYgZ2l0LWd1aS5zaDoyNzQwIGxpYi9zaG9ydGN1dC50Y2w6OAotIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAiU2thcGEgc2tyaXZib3Jkc2lrb24iCi0KLSM6IGdpdC1ndWkuc2g6Mjc0OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjIwMQotbXNnaWQgIlF1aXQiCi1tc2dzdHIgIkF2c2x1dGEiCi0KLSM6IGdpdC1ndWkuc2g6Mjc1NgotbXNnaWQgIlVuZG8iCi1tc2dzdHIgIsOFbmdyYSIKLQotIzogZ2l0LWd1aS5zaDoyNzU5Ci1tc2dpZCAiUmVkbyIKLW1zZ3N0ciAiR8O2ciBvbSIKLQotIzogZ2l0LWd1aS5zaDoyNzYzIGdpdC1ndWkuc2g6MzM2OAotbXNnaWQgIkN1dCIKLW1zZ3N0ciAiS2xpcHAgdXQiCi0KLSM6IGdpdC1ndWkuc2g6Mjc2NiBnaXQtZ3VpLnNoOjMzNzEgZ2l0LWd1aS5zaDozNDQ1IGdpdC1ndWkuc2g6MzUzMAotIzogbGliL2NvbnNvbGUudGNsOjY5Ci1tc2dpZCAiQ29weSIKLW1zZ3N0ciAiS29waWVyYSIKLQotIzogZ2l0LWd1aS5zaDoyNzY5IGdpdC1ndWkuc2g6MzM3NAotbXNnaWQgIlBhc3RlIgotbXNnc3RyICJLbGlzdHJhIGluIgotCi0jOiBnaXQtZ3VpLnNoOjI3NzIgZ2l0LWd1aS5zaDozMzc3IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzkKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyOAotbXNnaWQgIkRlbGV0ZSIKLW1zZ3N0ciAiVGEgYm9ydCIKLQotIzogZ2l0LWd1aS5zaDoyNzc2IGdpdC1ndWkuc2g6MzM4MSBnaXQtZ3VpLnNoOjM1MzQgbGliL2NvbnNvbGUudGNsOjcxCi1tc2dpZCAiU2VsZWN0IEFsbCIKLW1zZ3N0ciAiTWFya2VyYSBhbGxhIgotCi0jOiBnaXQtZ3VpLnNoOjI3ODUKLW1zZ2lkICJDcmVhdGUuLi4iCi1tc2dzdHIgIlNrYXBhLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3OTEKLW1zZ2lkICJDaGVja291dC4uLiIKLW1zZ3N0ciAiQ2hlY2thIHV0Li4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3OTcKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIkJ5dCBuYW1uLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI4MDIKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIlRhIGJvcnQuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjgwNwotbXNnaWQgIlJlc2V0Li4uIgotbXNnc3RyICLDhXRlcnN0w6RsbC4uLiIKLQotIzogZ2l0LWd1aS5zaDoyODE3Ci1tc2dpZCAiRG9uZSIKLW1zZ3N0ciAiRsOkcmRpZyIKLQotIzogZ2l0LWd1aS5zaDoyODE5Ci1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICJDaGVja2EgaW4iCi0KLSM6IGdpdC1ndWkuc2g6MjgyOCBnaXQtZ3VpLnNoOjMzMDkKLW1zZ2lkICJOZXcgQ29tbWl0IgotbXNnc3RyICJOeSBpbmNoZWNrbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyODM2IGdpdC1ndWkuc2g6MzMxNgotbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgotbXNnc3RyICJMw6RnZyB0aWxsIGbDtnJlZ8OlZW5kZSBpbmNoZWNrbmluZyIKLQotIzogZ2l0LWd1aS5zaDoyODQ2IGdpdC1ndWkuc2g6MzI3MCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEwMQotbXNnaWQgIlJlc2NhbiIKLW1zZ3N0ciAiU8O2ayBww6Ugbnl0dCIKLQotIzogZ2l0LWd1aS5zaDoyODUyCi1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICJLw7ZhIGbDtnIgaW5jaGVja25pbmciCi0KLSM6IGdpdC1ndWkuc2g6Mjg1OAotbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgotbXNnc3RyICJLw7ZhIMOkbmRyYWRlIGZpbGVyIGbDtnIgaW5jaGVja25pbmciCi0KLSM6IGdpdC1ndWkuc2g6Mjg2NAotbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCi1tc2dzdHIgIlRhIGJvcnQgZnLDpW4gaW5jaGVja25pbmdza8O2IgotCi0jOiBnaXQtZ3VpLnNoOjI4NzAgbGliL2luZGV4LnRjbDo0NDIKLW1zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGwgw6RuZHJpbmdhciIKLQotIzogZ2l0LWd1aS5zaDoyODc4IGdpdC1ndWkuc2g6MzU4MSBnaXQtZ3VpLnNoOjM2MTIKLW1zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKLW1zZ3N0ciAiVmlzYSBtaW5kcmUgc2FtbWFuaGFuZyIKLQotIzogZ2l0LWd1aS5zaDoyODgyIGdpdC1ndWkuc2g6MzU4NSBnaXQtZ3VpLnNoOjM2MTYKLW1zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKLW1zZ3N0ciAiVmlzYSBtZXIgc2FtbWFuaGFuZyIKLQotIzogZ2l0LWd1aS5zaDoyODg5IGdpdC1ndWkuc2g6MzI4MyBnaXQtZ3VpLnNoOjMzOTIKLW1zZ2lkICJTaWduIE9mZiIKLW1zZ3N0ciAiU2tyaXYgdW5kZXIiCi0KLSM6IGdpdC1ndWkuc2g6MjkwNQotbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgotbXNnc3RyICJMb2thbCBzYW1tYW5zbGFnbmluZy4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTEwCi1tc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCi1tc2dzdHIgIkF2YnJ5dCBzYW1tYW5zbGFnbmluZy4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTIyIGdpdC1ndWkuc2g6Mjk1MAotbXNnaWQgIkFkZC4uLiIKLW1zZ3N0ciAiTMOkZ2cgdGlsbC4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTI2Ci1tc2dpZCAiUHVzaC4uLiIKLW1zZ3N0ciAiU8OkbmQuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjkzMAotbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCi1tc2dzdHIgIlRhIGJvcnQgZ3Jlbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTQwIGdpdC1ndWkuc2g6MzU2MwotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIkFsdGVybmF0aXYuLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mjk1MQotbXNnaWQgIlJlbW92ZS4uLiIKLW1zZ3N0ciAiVGEgYm9ydC4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTYwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJIasOkbHAiCi0KLSM6IGdpdC1ndWkuc2g6Mjk2NCBnaXQtZ3VpLnNoOjI5NjggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OCBsaWIvYWJvdXQudGNsOjE0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvdXQgJXMiCi1tc2dzdHIgIk9tICVzIgotCi0jOiBnaXQtZ3VpLnNoOjI5OTIKLW1zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKLW1zZ3N0ciAiV2ViYmRva3VtZW50YXRpb24iCi0KLSM6IGdpdC1ndWkuc2g6Mjk5NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjEKLW1zZ2lkICJTaG93IFNTSCBLZXkiCi1tc2dzdHIgIlZpc2EgU1NILW55Y2tlbCIKLQotIzogZ2l0LWd1aS5zaDozMDE0IGdpdC1ndWkuc2g6MzE0NgotbXNnaWQgIlVzYWdlIgotbXNnc3RyICJBbnbDpG5kbmluZyIKLQotIzogZ2l0LWd1aS5zaDozMDk1IGxpYi9ibGFtZS50Y2w6NTczCi1tc2dpZCAiRXJyb3IiCi1tc2dzdHIgIkZlbCIKLQotIzogZ2l0LWd1aS5zaDozMTI2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCi1tc2dzdHIgIiIKLSLDtmRlc2RpZ2VydDoga3VuZGUgaW50ZSB0YSBzdGF0dXMgcMOlIHPDtmt2w6RnZW4gJXM6IEZpbCBlbGxlciBrYXRhbG9nIHNha25hcyIKLQotIzogZ2l0LWd1aS5zaDozMTU5Ci1tc2dpZCAiQ3VycmVudCBCcmFuY2g6IgotbXNnc3RyICJBa3R1ZWxsIGdyZW46IgotCi0jOiBnaXQtZ3VpLnNoOjMxODUKLW1zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgotbXNnc3RyICJLw7ZhZGUgw6RuZHJpbmdhciAoa29tbWVyIGF0dCBjaGVja2FzIGluKSIKLQotIzogZ2l0LWd1aS5zaDozMjA1Ci1tc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKLW1zZ3N0ciAiT2vDtmFkZSDDpG5kcmluZ2FyIgotCi0jOiBnaXQtZ3VpLnNoOjMyNzYKLW1zZ2lkICJTdGFnZSBDaGFuZ2VkIgotbXNnc3RyICJLw7ZhIMOkbmRyYWRlIgotCi0jOiBnaXQtZ3VpLnNoOjMyOTUgbGliL3RyYW5zcG9ydC50Y2w6MTM3IGxpYi90cmFuc3BvcnQudGNsOjIyOQotbXNnaWQgIlB1c2giCi1tc2dzdHIgIlPDpG5kIgotCi0jOiBnaXQtZ3VpLnNoOjMzMzAKLW1zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiSW5sZWRhbmRlIGluY2hlY2tuaW5nc21lZGRlbGFuZGU6IgotCi0jOiBnaXQtZ3VpLnNoOjMzMzEKLW1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiVXTDtmthdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKLQotIzogZ2l0LWd1aS5zaDozMzMyCi1tc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiVXTDtmthdCBpbmxlZGFuZGUgaW5jaGVja25pbmdzbWVkZGVsYW5kZToiCi0KLSM6IGdpdC1ndWkuc2g6MzMzMwotbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJVdMO2a2F0IGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBzYW1tYW5zbGFnbmluZzoiCi0KLSM6IGdpdC1ndWkuc2g6MzMzNAotbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZSBmw7ZyIHNhbW1hbnNsYWduaW5nOiIKLQotIzogZ2l0LWd1aS5zaDozMzM1Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJJbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKLQotIzogZ2l0LWd1aS5zaDozMzg0IGdpdC1ndWkuc2g6MzUzOCBsaWIvY29uc29sZS50Y2w6NzMKLW1zZ2lkICJDb3B5IEFsbCIKLW1zZ3N0ciAiS29waWVyYSBhbGxhIgotCi0jOiBnaXQtZ3VpLnNoOjM0MDggbGliL2JsYW1lLnRjbDoxMDUKLW1zZ2lkICJGaWxlOiIKLW1zZ3N0ciAiRmlsOiIKLQotIzogZ2l0LWd1aS5zaDozNTI2Ci1tc2dpZCAiUmVmcmVzaCIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY0MworbXNnaWQgIlVwZGF0ZSIKIG1zZ3N0ciAiVXBwZGF0ZXJhIgogCi0jOiBnaXQtZ3VpLnNoOjM1NDcKLW1zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCi1tc2dzdHIgIk1pbnNrYSB0ZWNrZW5zbml0dHNzdG9ybGVrIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjY4IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBrw7ZhIFwiJXNcIiIKIAotIzogZ2l0LWd1aS5zaDozNTUxCi1tc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICLDlmthIHRlY2tlbnNuaXR0c3N0b3JsZWsiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzQgYWRkLWludGVyYWN0aXZlLmM6ODYzIHNlcXVlbmNlci5jOjM0MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk1Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBpbmRleGV0IgogCi0jOiBnaXQtZ3VpLnNoOjM1NTkgbGliL2JsYW1lLnRjbDoyOTQKLW1zZ2lkICJFbmNvZGluZyIKLW1zZ3N0ciAiVGVja2Vua29kbmluZyIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAidXBwZGF0ZXJhZGUgJWQgc8O2a3bDpGdcbiIKK21zZ3N0clsxXSAidXBwZGF0ZXJhZGUgJWQgc8O2a3bDpGdhclxuIgogCi0jOiBnaXQtZ3VpLnNoOjM1NzAKLW1zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCi1tc2dzdHIgIkFudsOkbmQvw6V0ZXJzdMOkbGwgZGVsIgorIzogYWRkLWludGVyYWN0aXZlLmM6Njk1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIgorbXNnc3RyICJvYnNlcnZlcmE6ICVzIHNww6VyYXMgaW50ZSBsw6RuZ3JlLlxuIgogCi0jOiBnaXQtZ3VpLnNoOjM1NzUKLW1zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCi1tc2dzdHIgIkFudsOkbmQvw6V0ZXJzdMOkbGwgcmFkIgorIzogYWRkLWludGVyYWN0aXZlLmM6NzAwIGFwcGx5LmM6NDEwOCBidWlsdGluL2NoZWNrb3V0LmM6MjgxCisjOiBidWlsdGluL3Jlc2V0LmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIm1ha2VfY2FjaGVfZW50cnkgbWlzc2x5Y2thZGVzIGbDtnIgc8O2a3bDpGdlbiBcIiVzXCIiCiAKLSM6IGdpdC1ndWkuc2g6MzU5NAotbXNnaWQgIlJ1biBNZXJnZSBUb29sIgotbXNnc3RyICJTdGFydGEgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nIgotCi0jOiBnaXQtZ3VpLnNoOjM1OTkKLW1zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCi1tc2dzdHIgIkFudsOkbmQgdmVyc2lvbmVuIGZyw6VuIGZqw6RycmFya2l2ZXQiCi0KLSM6IGdpdC1ndWkuc2g6MzYwMwotbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgotbXNnc3RyICJBbnbDpG5kIGxva2FsYSB2ZXJzaW9uZW4iCi0KLSM6IGdpdC1ndWkuc2g6MzYwNwotbXNnaWQgIlJldmVydCBUbyBCYXNlIgotbXNnc3RyICLDhXRlcnN0w6RsbCB0aWxsIGJhc3ZlcnNpb25lbiIKLQotIzogZ2l0LWd1aS5zaDozNjI1Ci1tc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEgw6RuZHJpbmdhcm5hIGkgdW5kZXJtb2R1bGVuIgotCi0jOiBnaXQtZ3VpLnNoOjM2MjkKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJWaXN1YWxpc2VyYSBncmVuZW5zIGhpc3RvcmlrIGkgdW5kZXJtb2R1bGVuIgotCi0jOiBnaXQtZ3VpLnNoOjM2MzMKLW1zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCi1tc2dzdHIgIlZpc3VhbGlzZXJhIGFsbGEgZ3JlbmFycyBoaXN0b3JpayBpIHVuZGVybW9kdWxlbiIKLQotIzogZ2l0LWd1aS5zaDozNjM4Ci1tc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJTdGFydGEgZ2l0IGd1aSBpIHVuZGVybW9kdWxlbiIKLQotIzogZ2l0LWd1aS5zaDozNjczCi1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICJUYSBib3J0IGRlbCB1ciBpbmNoZWNrbmluZ3Nrw7YiCi0KLSM6IGdpdC1ndWkuc2g6MzY3NQotbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCi1tc2dzdHIgIlRhIGJvcnQgcmFkZXIgdXIgaW5jaGVja25pbmdza8O2IgotCi0jOiBnaXQtZ3VpLnNoOjM2NzcKLW1zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCi1tc2dzdHIgIlRhIGJvcnQgcmFkIHVyIGluY2hlY2tuaW5nc2vDtiIKLQotIzogZ2l0LWd1aS5zaDozNjgwCi1tc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgotbXNnc3RyICJTdMOkbGwgZGVsIGkgaW5jaGVja25pbmdza8O2IgotCi0jOiBnaXQtZ3VpLnNoOjM2ODIKLW1zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgotbXNnc3RyICJTdMOkbGwgcmFkZXIgaSBpbmNoZWNrbmluZ3Nrw7YiCi0KLSM6IGdpdC1ndWkuc2g6MzY4NAotbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKLW1zZ3N0ciAiU3TDpGxsIHJhZCBpIGluY2hlY2tuaW5nc2vDtiIKLQotIzogZ2l0LWd1aS5zaDozNzA5Ci1tc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgotbXNnc3RyICJJbml0aWVyYXIuLi4iCi0KLSM6IGdpdC1ndWkuc2g6Mzg1MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCi0iXG4iCi0iVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHByb2JhYmx5XG4iCi0iZ29pbmcgdG8gYmUgaWdub3JlZCBieSBhbnkgR2l0IHN1YnByb2Nlc3MgcnVuXG4iCi0iYnkgJXM6XG4iCi0iXG4iCi1tc2dzdHIgIiIKLSJEZXQgZmlubnMgbcO2amxpZ2EgcHJvYmxlbSBtZWQgbWlsasO2dmFyaWFibGVyLlxuIgotIlxuIgotIkbDtmxqYW5kZSBtaWxqw7Z2YXJpYWJsZXIga29tbWVyIHRyb2xpZ2VuIGF0dFxuIgotImlnbm9yZXJhcyBhdiBhbGxhIEdpdC11bmRlcnByb2Nlc3NlciBzb20ga8O2cnNcbiIKLSJhdiAlczpcbiIKLSJcbiIKLQotIzogZ2l0LWd1aS5zaDozODgxCi1tc2dpZCAiIgotIlxuIgotIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKLSJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCi1tc2dzdHIgIiIKLSJcbiIKLSJEZXR0YSBiZXJvciBww6UgZXR0IGvDpG50IHByb2JsZW0gbWVkXG4iCi0iVGNsLWJpbsOkcmVuIHNvbSBmw7ZsamVyIG1lZCBDeWd3aW4uIgotCi0jOiBnaXQtZ3VpLnNoOjM4ODYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iXG4iCi0iXG4iCi0iQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgotImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgotInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCi0ifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCi1tc2dzdHIgIiIKLSJcbiIKLSJcbiIKLSJEdSBrYW4gZXJzw6R0dGEgJXNcbiIKLSJtZWQgYXR0IGzDpGdnYSBpbiB2w6RyZGVuIGbDtnIgaW5zdMOkbGxuaW5nYXJuYVxuIgotInVzZXIubmFtZSBvY2ggdXNlci5lbWFpbCBpIGRpbiBwZXJzb25saWdhXG4iCi0ifi8uZ2l0Y29uZmlnLWZpbC5cbiIKLQotIzogbGliL2xpbmUudGNsOjE3Ci1tc2dpZCAiR290byBMaW5lOiIKLW1zZ3N0ciAiR8OlIHRpbGwgcmFkOiIKLQotIzogbGliL2xpbmUudGNsOjIzCi1tc2dpZCAiR28iCi1tc2dzdHIgIkfDpSIKLQotIzogbGliL2NvbnNvbGUudGNsOjU5Ci1tc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAiQXJiZXRhci4uLiB2w6RudGEuLi4iCi0KLSM6IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvc3Noa2V5LnRjbDo1NQotIzogbGliL2RhdGFiYXNlLnRjbDozMAotbXNnaWQgIkNsb3NlIgotbXNnc3RyICJTdMOkbmciCi0KLSM6IGxpYi9jb25zb2xlLnRjbDoxODYKLW1zZ2lkICJTdWNjZXNzIgotbXNnc3RyICJMeWNrYWRlcyIKLQotIzogbGliL2NvbnNvbGUudGNsOjIwMAotbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKLW1zZ3N0ciAiRmVsOiBLb21tYW5kbyBtaXNzbHlja2FkZXMiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgotbXNnc3RyICJIw6RtdGFyICVzIGZyw6VuICVzIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKLW1zZ3N0ciAiw7ZkZXNkaWdlcnQ6IEt1bmRlIGludGUgc2zDpSB1cHAgJXMiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgotbXNnc3RyICJHcmVuZW4gXCIlc1wiIGZpbm5zIGludGUuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCi1tc2dzdHIgIkt1bmRlIGludGUga29uZmlndXJlcmEgZsO2cmVua2xhZCBnaXQtcHVsbCBmw7ZyICclcycuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTAyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJHcmVuZW4gXCIlc1wiIGZpbm5zIHJlZGFuLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCi0iXG4iCi0iSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKLSJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKLW1zZ3N0ciAiIgotIkdyZW5lbiBcIiVzXCIgZmlubnMgcmVkYW4uXG4iCi0iXG4iCi0iRGVuIGthbiBpbnRlIHNuYWJic3BvbGFzIHRpbGwgJXMuXG4iCi0iRW4gc2FtbWFuc2xhZ25pbmcga3LDpHZzLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJTYW1tYW5zbGFnbmluZ3NzdHJhdGVnaW4gXCIlc1wiIHN0w7ZkcyBpbnRlLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCB1cHBkYXRlcmEgXCIlc1wiLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKLW1zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCi1tc2dzdHIgIkvDtm9tcsOlZGV0IChpbmRleCkgw6RyIHJlZGFuIGzDpXN0LiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKLW1zZ2lkICIiCi0iTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCi0iXG4iCi0iQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKLSJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKLW1zZ3N0ciAiIgotIkRldCBzZW5hc3RlIGlubMOkc3RhIHRpbGxzdMOlbmRldCBtb3RzdmFyYXIgaW50ZSB0aWxsc3TDpW5kZXQgaSBhcmtpdmV0LlxuIgotIlxuIgotIkV0dCBhbm5hdCBHaXQtcHJvZ3JhbSBoYXIgw6RuZHJhdCBhcmtpdmV0IHNlZGFuIHNlbmFzdGUgYXZzw7ZrbmluZ2VuLiBEdSBtw6VzdGUgIgotInV0ZsO2cmEgZW4gbnkgc8O2a25pbmcgaW5uYW4gZGVuIGFrdHVlbGxhIGdyZW5lbiBrYW4gw6RuZHJhcy5cbiIKLSJcbiIKLSJTw7ZrbmluZ2VuIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgotbXNnc3RyICJVcHBkYXRlcmFyIGFyYmV0c2thdGFsb2dlbiB0aWxsIFwiJXNcIi4uLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKLW1zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKLW1zZ3N0ciAiZmlsZXIgdXRjaGVja2FkZSIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgotbXNnc3RyICJBdmJyeXRlciB1dGNoZWNrbmluZyBhdiBcIiVzXCIgKHNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBrcsOkdnMpLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAiU2FtbWFuc2xhZ25pbmcgcMOlIGZpbG5pdsOlIGtyw6R2cy4iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCi1tc2dzdHIgIlN0YW5uYXIgcMOlIGdyZW5lbiBcIiVzXCIuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgotbXNnaWQgIiIKLSJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKLSJcbiIKLSJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKLSJDaGVja291dCcuIgotbXNnc3RyICIiCi0iRHUgw6RyIGludGUgbMOkbmdyZSBww6UgZW4gbG9rYWwgZ3Jlbi5cbiIKLSJcbiIKLSJPbSBkdSB2aWxsZSB2YXJhIHDDpSBlbiBncmVuIHNrYXBhciBkdSBlbiBudSwgYmFzZXJhZCBww6UgXCJEZW5uYSBmcsOlbmtvcHBsYWRlICIKLSJ1dGNoZWNrbmluZ1wiLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDMgbGliL2NoZWNrb3V0X29wLnRjbDo1MDcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKLW1zZ3N0ciAiQ2hlY2thZGUgdXQgXCIlc1wiLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgotbXNnc3RyICIiCi0iT20gZHUgw6V0ZXJzdMOkbGxlciBcIiVzXCIgdGlsbCBcIiVzXCIgZ8OlciBmw7ZsamFuZGUgaW5jaGVja25pbmdhciBmw7ZybG9yYWRlOiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKLW1zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgotbXNnc3RyICJEZXQga2Fuc2tlIGludGUgw6RyIHPDpSBlbmtlbHQgYXR0IMOldGVyc2thcGEgZsO2cmxvcmFkZSBpbmNoZWNrbmluZ2FyLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAnJXMnPyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGxhIFwiJXNcIj8iCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY2IGxpYi90b29sc19kbGcudGNsOjMzNgotbXNnaWQgIlZpc3VhbGl6ZSIKLW1zZ3N0ciAiVmlzdWFsaXNlcmEiCi0KLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTcxIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NQotbXNnaWQgIlJlc2V0IgorIzogYWRkLWludGVyYWN0aXZlLmM6NzMwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjU1Cittc2dpZCAiUmV2ZXJ0IgogbXNnc3RyICLDhXRlcnN0w6RsbCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL3RyYW5zcG9ydC50Y2w6MTQxIGxpYi9yZW1vdGVfYWRkLnRjbDozNAotIzogbGliL2Jyb3dzZXIudGNsOjI5MiBsaWIvbWVyZ2UudGNsOjE3NCBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMAotIzogbGliL2Nob29zZV9mb250LnRjbDo0NSBsaWIvb3B0aW9uLnRjbDoxMjcgbGliL3Rvb2xzX2RsZy50Y2w6NDEKLSM6IGxpYi90b29sc19kbGcudGNsOjIwMiBsaWIvdG9vbHNfZGxnLnRjbDozNDUgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMyCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQzIGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNwotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM0Ci1tc2dpZCAiQ2FuY2VsIgotbXNnc3RyICJBdmJyeXQiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NDYKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgSEVBRF57dHJlZX0iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3ODQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAiw6V0ZXJzdMOkbGxkZSAlZCBzw7ZrdsOkZ1xuIgorbXNnc3RyWzFdICLDpXRlcnN0w6RsbGRlICVkIHPDtmt2w6RnYXJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODM1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVudHJhY2tlZCBmaWxlcy5cbiIKK21zZ3N0ciAiSW5nYSBvc3DDpXJhZGUgZmlsZXIuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjgzOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY4OQorbXNnaWQgIkFkZCB1bnRyYWNrZWQiCittc2dzdHIgIkzDpGdnIHRpbGwgb3Nww6VyYWQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJsYWRlIHRpbGwgJWQgc8O2a3bDpGdcbiIKK21zZ3N0clsxXSAibGFkZSB0aWxsICVkIHPDtmt2w6RnYXJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIGVqIHNhbW1hbnNsYWdlbjogJXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkwOCBhZGQtcGF0Y2guYzoxMzMxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICJFbmRhc3QgYmluw6RyYSBmaWxlciDDpG5kcmFkZS5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTEwIGFkZC1wYXRjaC5jOjEzMjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIkluZ2Egw6RuZHJpbmdhci5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAiVXBwZGF0ZXJhIHBhdGNoIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIkdyYW5za2EgZGlmZiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTgxCittc2dpZCAic2hvdyBwYXRocyB3aXRoIGNoYW5nZXMiCittc2dzdHIgInZpc2Egc8O2a3bDpGdhciBtZWQgw6RuZHJpbmdhciIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTgzCittc2dpZCAiYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICJsw6RnZyBhcmJldHNrYXRhbG9nZW5zIHRpbGxzdMOlbmQgdGlsbCBrw7ZhZGUgw6RuZHJpbmdhciIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg1Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgIsOldGVyc3TDpGxsIGvDtmFkZSDDpG5kcmluZ2FyIHRpbGxiYWthIHRpbGwgSEVBRC12ZXJzaW9uZW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4NworbXNnaWQgInBpY2sgaHVua3MgYW5kIHVwZGF0ZSBzZWxlY3RpdmVseSIKK21zZ3N0ciAidsOkbGogc3R5Y2tlbiBvY2ggdXBwZGF0ZXJhIHNlbGVrdGl2dCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg5Cittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInZpc2Egc2tpbGxuYWQgbWVsbGFuIEhFQUQgb2NoIGluZGV4IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTEKK21zZ2lkICJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgImzDpGdnIGlubmVow6VsbCBpIG9zcMOlcmFkZSBmaWxlciB0aWxsIGvDtmFkZSDDpG5kcmluZ2FyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTkgYWRkLWludGVyYWN0aXZlLmM6MTA0OAorbXNnaWQgIlByb21wdCBoZWxwOiIKK21zZ3N0ciAiS29tbWFuZG9yYWRzaGrDpGxwOiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMQorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICJtYXJrZXJhIGVuIHBvc3QiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDMKK21zZ2lkICJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIKK21zZ3N0ciAibWFya2VyYSBpbnRlcnZhbGwgYXYgcG9zdGVyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA1Cittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAibWFya2VyYSBmbGVyYSBpbnRlcnZhbGwiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDcgYWRkLWludGVyYWN0aXZlLmM6MTA1MgorbXNnaWQgInNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgiCittc2dzdHIgIm1hcmtlcmEgcG9zdCBiYXNlcmFkIHDDpSB1bmlrdCBwcmVmaXgiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDkKK21zZ2lkICJ1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMiCittc2dzdHIgImF2bWFya2VyYSBhbmdpdm5hIHBvc3RlciIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAxMQorbXNnaWQgImNob29zZSBhbGwgaXRlbXMiCittc2dzdHIgInbDpGxqIGFsbGEgcG9zdGVyIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEzCittc2dpZCAiKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIgorbXNnc3RyICIodG9tdCkgYXZzbHV0YSBtYXJrZXJpbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTAKK21zZ2lkICJzZWxlY3QgYSBudW1iZXJlZCBpdGVtIgorbXNnc3RyICJtYXJrZXJhIGVuIG51bXJlcmFkIHBvc3QiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTQKK21zZ2lkICIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIodG9tdCkgbWFya2VyYSBpbmdlbnRpbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjIgYnVpbHRpbi9jbGVhbi5jOjgyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NTEKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIqKiogS29tbWFuZG9uICoqKiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA2MyBidWlsdGluL2NsZWFuLmM6ODIzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg0OAorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICJWYWQgbnUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJzdGFnZWQiCittc2dzdHIgImvDtmFkIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgImVqIGvDtmFkIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGFwcGx5LmM6NDk2NSBhcHBseS5jOjQ5NjggYnVpbHRpbi9hbS5jOjIxOTcKKyM6IGJ1aWx0aW4vYW0uYzoyMjAwIGJ1aWx0aW4vY2xvbmUuYzoxMjMgYnVpbHRpbi9mZXRjaC5jOjE0NAorIzogYnVpbHRpbi9tZXJnZS5jOjI3MyBidWlsdGluL3B1bGwuYzoyMDkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwOQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNzkgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjExOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInBhdGgiCittc2dzdHIgInPDtmt2w6RnIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTIyCittc2dpZCAiY291bGQgbm90IHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImt1bmRlIGludGUgdXBwZGF0ZXJhIGluZGV4ZXQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMzYgYnVpbHRpbi9jbGVhbi5jOjc4NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnllLlxuIgorbXNnc3RyICJIZWogZMOlLlxuIgorCisjOiBhZGQtcGF0Y2guYzoxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiS8O2YSDDpG5kcmF0IGzDpGdlIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxNgorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiS8O2YSBib3J0dGFnbmluZyBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICJLw7ZhIHN0eWNrZXQgW3ksbixhLHEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIHN0eWNrZWh1dnVkZXQgXCIlLipzXCIiCisKKyM6IGFkZC1wYXRjaC5jOjEzMCBhZGQtcGF0Y2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGbDpHJnYXQgc3R5Y2tlaHV2dWQgXCIlLipzXCIiCisKKyM6IGFkZC1wYXRjaC5jOjE3NgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBkaWZmIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGRpZmYiCisKKyM6IGFkZC1wYXRjaC5jOjE5NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZsOkcmdhZCBkaWZmIgorCisjOiBhZGQtcGF0Y2guYzo1MDgKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCi0iXG4iCi0iVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKLSJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKLSJcbiIKLSJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKIG1zZ3N0ciAiIgotIkt1bmRlIGludGUgc3TDpGxsYSBpbiBha3R1ZWxsIGdyZW4uXG4iCi0iXG4iCi0iQXJiZXRza2F0YWxvZ2VuIGhhciBiYXJhIHbDpHhsYXRzIGRlbHZpcy4gVmkgdXBwZGF0ZXJhZGUgZmlsZXJuYSB1dGFuICIKLSJwcm9ibGVtLCBtZW4ga3VuZGUgaW50ZSB1cHBkYXRlcmEgZW4gaW50ZXJuIGZpbCBpIEdpdC5cbiIKLSJcbiIKLSJEZXR0YSBza3VsbGUgaW50ZSBoYSBow6RudC4gJXMga29tbWVyIG51IHN0w6RuZ2FzIG9jaCBnZSB1cHAuIgorImbDtnJ2w6RudGFkZSBzYW1tYW5oYW5nc3JhZCAlZCBpXG4iCisiJS4qcyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6NiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiZmV0Y2ggJXMiCi1tc2dzdHIgImjDpG10YSAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCi1tc2dzdHIgIkjDpG10YXIgbnlhIMOkbmRyaW5nYXIgZnLDpW4gJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicmVtb3RlIHBydW5lICVzIgotbXNnc3RyICJmasOkcnJib3J0dGFnbmluZyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKLW1zZ3N0ciAiVGFyIGJvcnQgc3DDpXJhbmRlIGdyZW5hciBzb20gdGFnaXRzIGJvcnQgZnLDpW4gJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjI1Ci1tc2dpZCAiZmV0Y2ggYWxsIHJlbW90ZXMiCi1tc2dzdHIgImjDpG10YSBhbGxhIGZqw6RycmFya2l2IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gYWxsIHJlbW90ZXMiCi1tc2dzdHIgIkjDpG10YXIgbnlhIMOkbmRyaW5nYXIgZnLDpW4gYWxsYSBmasOkcnJhcmtpdiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NDAKLW1zZ2lkICJyZW1vdGUgcHJ1bmUgYWxsIHJlbW90ZXMiCi1tc2dzdHIgInJlbnNhIGFsbGEgZmrDpHJyYXJraXYiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjQxCi1tc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gYWxsIHJlbW90ZXMiCi1tc2dzdHIgIlJlbnNhciBzcMOlcmFuZGUgZ3JlbmFyIHNvbSB0YWdpdHMgYm9ydCwgZnLDpW4gYWxsYSBmasOkcnJhcmtpdiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6NTQgbGliL3RyYW5zcG9ydC50Y2w6OTIgbGliL3RyYW5zcG9ydC50Y2w6MTEwCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAicHVzaCAlcyIKLW1zZ3N0ciAic8OkbmQgJXMiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgotbXNnc3RyICJTw6RuZGVyIMOkbmRyaW5nYXIgdGlsbCAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6OTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCi1tc2dzdHIgIlNwZWdsYXIgdGlsbCAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKLW1zZ3N0ciAiU8OkbmRlciAlcyAlcyB0aWxsICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzIKLW1zZ2lkICJQdXNoIEJyYW5jaGVzIgotbXNnc3RyICJTw6RuZCBncmVuYXIiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE0NwotbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKLW1zZ3N0ciAiS8OkbGxncmVuYXIiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjE2MgotbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkRlc3RpbmF0aW9uc2Fya2l2IgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MQotbXNnaWQgIlJlbW90ZToiCi1tc2dzdHIgIkZqw6RycmFya2l2OiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MTg3IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NzIKLW1zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgotbXNnc3RyICJHb2R0eWNrbGlnIHBsYXRzOiIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjA1Ci1tc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKLW1zZ3N0ciAiw5Z2ZXJmw7ZyaW5nc2FsdGVybmF0aXYiCi0KLSM6IGxpYi90cmFuc3BvcnQudGNsOjIwNwotbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgotbXNnc3RyICJUdmluZ2Egw7Z2ZXJza3Jpdm5pbmcgYXYgYmVmaW50bGlnIGdyZW4gKGthbiBrYXN0YSBib3J0IMOkbmRyaW5nYXIpIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyMTEKLW1zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKLW1zZ3N0ciAiQW52w6RuZCB0dW50IHBha2V0IChmw7ZyIGzDpW5nc2FtbWEgbsOkdHZlcmtzYW5zbHV0bmluZ2FyKSIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjE1Ci1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICJUYSBtZWQgdGFnZ2FyIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjAKLW1zZ2lkICJBZGQgUmVtb3RlIgotbXNnc3RyICJMw6RnZyB0aWxsIGZqw6RycmFya2l2IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjUKLW1zZ2lkICJBZGQgTmV3IFJlbW90ZSIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCBueXR0IGZqw6RycmFya2l2IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzAgbGliL3Rvb2xzX2RsZy50Y2w6MzcKLW1zZ2lkICJBZGQiCi1tc2dzdHIgIkzDpGdnIHRpbGwiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozOQotbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgotbXNnc3RyICJEZXRhbGplciBmw7ZyIGZqw6RycmFya2l2IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NDEgbGliL3Rvb2xzX2RsZy50Y2w6NTEgbGliL2JyYW5jaF9jcmVhdGUudGNsOjQ0Ci1tc2dpZCAiTmFtZToiCi1tc2dzdHIgIk5hbW46IgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKLW1zZ2lkICJMb2NhdGlvbjoiCi1tc2dzdHIgIlBsYXRzOiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjYwCi1tc2dpZCAiRnVydGhlciBBY3Rpb24iCi1tc2dzdHIgIll0dGVybGlnYXJlIMOldGfDpHJkIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKLW1zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKLW1zZ3N0ciAiSMOkbXRhIG9tZWRlbGJhcnQiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2OQotbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCi1tc2dzdHIgIkluaXRpZXJhIGZqw6RycmFya2l2IG9jaCBzw6RuZCB0aWxsIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKLW1zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgotbXNnc3RyICJHw7ZyIGluZ2VudCBtZXIgbnUiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDAKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgotbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgZmrDpHJyYXJraXZldC4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKLW1zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBzb20gbmFtbiBww6UgZmrDpHJyYXJraXZldC4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgotbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGZqw6RycmFya2l2ZXQgXCIlc1wiIHDDpSBwbGF0c2VuIFwiJXNcIi4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGZXRjaGluZyB0aGUgJXMiCi1tc2dzdHIgIkjDpG10YXIgJXMiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgotbXNnc3RyICJWZXQgaW50ZSBodXIgYXJraXZldCBww6UgcGxhdHNlbiBcIiVzXCIgc2thbGwgaW5pdGllcmFzLiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCi1tc2dzdHIgIktvbmZpZ3VyZXJhciAlcyAocMOlICVzKSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjE3Ci1tc2dpZCAiU3RhcnRpbmcuLi4iCi1tc2dzdHIgIlN0YXJ0YXIuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNwotbXNnaWQgIkZpbGUgQnJvd3NlciIKLW1zZ3N0ciAiRmlsYmzDpGRkcmFyZSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjEzMiBsaWIvYnJvd3Nlci50Y2w6MTQ5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAiTMOkc2VyICVzLi4uIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTkzCi1tc2dpZCAiW1VwIFRvIFBhcmVudF0iCi1tc2dzdHIgIltVcHAgdGlsbCBmw7Zyw6RsZGVyXSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI3NSBsaWIvYnJvd3Nlci50Y2w6MjgyCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAiQmzDpGRkcmEgZmlsZXIgcMOlIGdyZW5lbiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMgotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTgKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3NAotbXNnaWQgIkJyb3dzZSIKLW1zZ3N0ciAiQmzDpGRkcmEiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyOTcgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzUgbGliL3Rvb2xzX2RsZy50Y2w6MzIxCi1tc2dpZCAiUmV2aXNpb24iCi1tc2dzdHIgIlJldmlzaW9uIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzCisjOiBhZGQtcGF0Y2guYzo1MjMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCiBtc2dzdHIgIiIKLSJLYW4gaW50ZSBzbMOlIGlob3AgdmlkIHV0w7ZrbmluZy5cbiIKLSJcbiIKLSJEdSBtw6VzdGUgZ8O2cmEgZsOkcmRpZyB1dMO2a25pbmdlbiBhdiBpbmNoZWNrbmluZ2VuIGlubmFuIGR1IHDDpWLDtnJqYXIgbsOlZ29uICIKLSJzbGFncyBzYW1tYW5zbGFnbmluZy5cbiIKKyJzdHlja2VuIMO2dmVybGFwcGFyIGludGU6XG4iCisiJS4qc1xuIgorIlx0YXZzbHV0YXMgaW50ZSBtZWQ6XG4iCisiJS4qcyIKIAotIzogbGliL21lcmdlLnRjbDoyNworIzogYWRkLXBhdGNoLmM6Nzk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICJNYW51ZWxsdCBzdHlja2VyZWRpZ2VyaW5nc2zDpGdlIC0tIHNlIG5lZGVyc3QgZsO2ciBzbmFiYmd1aWRlLlxuIgorCisjOiBhZGQtcGF0Y2guYzo4MDMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCi0iXG4iCi0iVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCisiLS0tXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVjIHdpbGwgYmUgcmVtb3ZlZC5cbiIKIG1zZ3N0ciAiIgotIkRldCBzZW5hc3RlIGlubMOkc3RhIHRpbGxzdMOlbmRldCBtb3RzdmFyYXIgaW50ZSB0aWxsc3TDpW5kZXQgaSBhcmtpdmV0LlxuIgotIlxuIgotIkV0dCBhbm5hdCBHaXQtcHJvZ3JhbSBoYXIgw6RuZHJhdCBhcmtpdmV0IHNlZGFuIHNlbmFzdGUgYXZzw7ZrbmluZ2VuLiBEdSBtw6VzdGUgIgotInV0ZsO2cmEgZW4gbnkgc8O2a25pbmcgaW5uYW4gZHUga2FuIHV0ZsO2cmEgZW4gc2FtbWFuc2xhZ25pbmcuXG4iCi0iXG4iCi0iU8O2a25pbmdlbiBrb21tZXIgYXR0IHN0YXJ0YXMgYXV0b21hdGlza3QgbnUuXG4iCisiLS0tXG4iCisiVGEgYm9ydCBcIiVjXCIgcmFkZXIgZ2Vub20gYXR0IGfDtnJhIGRlbSBcIiBcIi1yYWRlciAoc2FtbWFuaGFuZykuXG4iCisiVGEgYm9ydCBcIiVjXCIgcmFkZXIgZ2Vub20gYXR0IHJhZGVyYSBkZW0uXG4iCisiUmFkZXIgc29tIGLDtnJqYXIgbWVkICVjIGtvbW1lciBhdHQgdGFzIGJvcnQuXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjgxMAogbXNnaWQgIiIKLSJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy5cbiIKLSJcbiIKLSJZb3UgbXVzdCByZXNvbHZlIHRoZW0sIHN0YWdlIHRoZSBmaWxlLCBhbmQgY29tbWl0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50ICIKLSJtZXJnZS4gIE9ubHkgdGhlbiBjYW4geW91IGJlZ2luIGFub3RoZXIgbWVyZ2UuXG4iCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuXG4iCiBtc2dzdHIgIiIKLSJEdSDDpHIgbWl0dCBpIGVuIHNhbW1hbnNsYWduaW5nIG1lZCBrb25mbGlrdGVyLlxuIgotIlxuIgotIkZpbGVuICVzIGhhciBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdGVyLlxuIgotIlxuIgotIkR1IG3DpXN0ZSBsw7ZzYSBkZW0sIGvDtmEgZmlsZW4gb2NoIGNoZWNrYSBpbiBmw7ZyIGF0dCBmdWxsYm9yZGEgZGVuIGFrdHVlbGxhICIKLSJzYW1tYW5zbGFnbmluZ2VuLiBOw6RyIGR1IGdqb3J0IGRldCBrYW4gZHUgcMOlYsO2cmphIGVuIG55IHNhbW1hbnNsYWduaW5nLlxuIgorIk9tIHBhdGNoZW4ga2FuIGFwcGxpY2VyYXMgcmVudCBrb21tZXIgZGV0IHJlZGlnZXJhZGUgc3R5Y2tldCBhdHRcbiIKKyJrw7ZhcyBvbWVkZWxiYXJ0LlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0CisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBhZGQtcGF0Y2guYzo4MTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKKyJJZiBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5LCB5b3Ugd2lsbCBiZSBnaXZlbiBhbiBvcHBvcnR1bml0eSB0b1xuIgorImVkaXQgYWdhaW4uICBJZiBhbGwgbGluZXMgb2YgdGhlIGh1bmsgYXJlIHJlbW92ZWQsIHRoZW4gdGhlIGVkaXQgaXNcbiIKKyJhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC5cbiIKIG1zZ3N0ciAiIgotIkR1IMOkciBtaXR0IGkgZW4gw6RuZHJpbmcuXG4iCi0iXG4iCi0iRmlsZW4gJXMgaGFyIMOkbmRyaW5nYXIuXG4iCi0iXG4iCi0iRHUgYsO2ciBmdWxsYm9yZGEgZGVuIGFrdHVlbGxhIGluY2hlY2tuaW5nZW4gaW5uYW4gZHUgcMOlYsO2cmphciBlbiAiCi0ic2FtbWFuc2xhZ25pbmcuIE9tIGR1IGfDtnIgZGV0IGJsaXIgZGV0IGVua2xhcmUgYXR0IGF2YnJ5dGEgZW4gbWlzc2x5Y2thZCAiCi0ic2FtbWFuc2xhZ25pbmcsIG9tIGRldCBza3VsbGUgdmFyYSBuw7ZkdsOkbmRpZ3QuXG4iCisiT20gcGF0Y2hlbiBpbnRlIGthbiBhcHBsaWNlcmFzIHJlbnQga29tbWVyIGR1IGbDpSBlbiBtw7ZqbGlnaGV0IGF0dFxuIgorInJlZGlnZXJhIGRlbiBpZ2VuLiBPbSBhbGxhIHJhZGVyIGkgZXR0IHN0eWNrZSB0YXMgYm9ydCBhdmJyeXRzXG4iCisicmVkaWdlcmluZ2VuIG9jaCBzdHlja2V0IGzDpG1uYXMgb2bDtnLDpG5kcmF0LlxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjEwOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIG9mICVzIgotbXNnc3RyICIlcyBhdiAlcyIKKyM6IGFkZC1wYXRjaC5jOjg1MQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBzdHlja2VodXZ1ZCIKIAotIzogbGliL21lcmdlLnRjbDoxMjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKLW1zZ3N0ciAiU2zDpXIgaWhvcCAlcyBvY2ggJXMuLi4iCisjOiBhZGQtcGF0Y2guYzo4OTUgYWRkLXBhdGNoLmM6MTI5NAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiXCJnaXQgYXBwbHkgLS1jYWNoZWRcIiBtaXNzbHlja2FkZXMiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTMzCi1tc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCi1tc2dzdHIgIlNhbW1hbnNsYWduaW5nZW4gYXZzbHV0YWRlcyBmcmFtZ8OlbmdzcmlrdC4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTM1Ci1tc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCi1tc2dzdHIgIlNhbW1hbnNsYWduaW5nZW4gbWlzc2x5Y2thZGVzLiBEdSBtw6VzdGUgbMO2c2Ega29uZmxpa3Rlcm5hLiIKLQotIzogbGliL21lcmdlLnRjbDoxNjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJNZXJnZSBJbnRvICVzIgotbXNnc3RyICJTbMOlIGlob3AgaSAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxNzkKLW1zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKLW1zZ3N0ciAiUmV2aXNpb25lciBhdHQgc2zDpSBpaG9wIgotCi0jOiBsaWIvbWVyZ2UudGNsOjIxNAorIy4gVFJBTlNMQVRPUlM6IGRvIG5vdCB0cmFuc2xhdGUgW3kvbl0KKyMuIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgdGhhdCBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyMuCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIy4gQ29uc2lkZXIgdHJhbnNsYXRpbmcgKHNheWluZyAibm8iIGRpc2NhcmRzISkgYXMKKyMuIChzYXlpbmcgIm4iIGZvciAibm8iIGRpc2NhcmRzISkgaWYgdGhlIHRyYW5zbGF0aW9uCisjLiBvZiB0aGUgd29yZCAibm8iIGRvZXMgbm90IHN0YXJ0IHdpdGggbi4KKyM6IGFkZC1wYXRjaC5jOjk1MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyMzkKIG1zZ2lkICIiCi0iQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKIG1zZ3N0ciAiIgotIkthbiBpbnRlIGF2YnJ5dGEgdmlkIHV0w7ZrbmluZy5cbiIKLSJcbiIKLSJEdSBtw6VzdGUgZ8O2cmEgZGlnIGbDpHJkaWcgbWVkIGF0dCB1dMO2a2EgaW5jaGVja25pbmdlbi5cbiIKKyJEaXR0IHJlZGlnZXJhZGUgc3R5Y2tlIGthbiBpbnRlIGFwcGxpY2VyYXMuIFJlZGlnZXJhIGlnZW4gKFwibmVqXCIga2FzdGFyISkgIgorIlt5L25dPyAiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjI0CisjOiBhZGQtcGF0Y2guYzoxMDA5CiBtc2dpZCAiIgotIkFib3J0IG1lcmdlP1xuIgotIlxuIgotIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBhbmQgYWxsIHRoZSByZW1haW5pbmcgaHVua3NcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBub3IgYW55IG9mIHRoZSByZW1haW5pbmcgaHVua3NcbiIKIG1zZ3N0ciAiIgotIkF2YnJ5dCBzYW1tYW5zbGFnbmluZz9cbiIKLSJcbiIKLSJPbSBkdSBhdmJyeXRlciBzYW1tYW5zbGFnbmluZ2VuIGtvbW1lciAqQUxMQSogZWogaW5jaGVja2FkZSDDpG5kcmluZ2FyIGF0dCBnw6UgIgotImbDtnJsb3JhZGUuXG4iCi0iXG4iCi0iR8OlIHZpZGFyZSBtZWQgYXR0IGF2YnJ5dGEgZGVuIGFrdHVlbGxhIHNhbW1hbnNsYWduaW5nZW4/IgorInkgLSBrw7ZhIHN0eWNrZXRcbiIKKyJuIC0ga8O2YSBpbnRlIHN0eWNrZXRcbiIKKyJxIC0gYXZzbHV0YTsga8O2YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZVxuIgorImEgLSBrw7ZhIGRldHRhIG9jaCBhbGxhIGbDtmxqYW5kZSBzdHlja2VuXG4iCisiZCAtIGvDtmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBzdHlja2VuIHNvbSBmw7ZsamVyXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjMwCisjOiBhZGQtcGF0Y2guYzoxMDE2CiBtc2dpZCAiIgotIlJlc2V0IGNoYW5nZXM/XG4iCi0iXG4iCi0iUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgotIlxuIgotIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgogbXNnc3RyICIiCi0iw4V0ZXJzdMOkbGwgw6RuZHJpbmdhcj9cbiIKLSJcbiIKLSJPbSBkdSDDpXRlcnN0w6RsbGVyIMOkbmRyaW5nYXJuYSBrb21tZXIgKkFMTEEqIGVqIGluY2hlY2thZGUgw6RuZHJpbmdhciBhdHQgZ8OlICIKLSJmw7ZybG9yYWRlLlxuIgotIlxuIgotIkfDpSB2aWRhcmUgbWVkIGF0dCDDpXRlcnN0w6RsbGEgZGUgYWt0dWVsbGEgw6RuZHJpbmdhcm5hPyIKKyJqIC0gbMOkbW5hIHN0eWNrZXQgb2Jlc3TDpG10LCBzZSBuw6RzdGEgb2Jlc3TDpG1kYSBzdHlja2VcbiIKKyJKIC0gbMOkbW5hIHN0eWNrZXQgb2Jlc3TDpG10LCBzZSBuw6RzdGEgc3R5Y2tlXG4iCisiayAtIGzDpG1uYSBzdHlja2V0IG9iZXN0w6RtdCwgc2UgZsO2cmVnw6VlbmRlIG9iZXN0w6RtZGEgc3R5Y2tlXG4iCisiSyAtIGzDpG1uYSBzdHlja2V0IG9iZXN0w6RtdCwgc2UgZsO2cmVnw6VlbmRlIHN0eWNrZVxuIgorImcgLSB2w6RsaiBldHQgc3R5Y2tlIGF0dCBnw6UgdGlsbFxuIgorIi8gLSBzw7ZrIGVmdGVyIHN0eWNrZSBzb20gbW90c3ZhcmFyIGFuZ2l2ZXQgcmVndWxqw6RydCB1dHRyeWNrXG4iCisicyAtIGRlbGEgYWt0dWVsbHQgc3R5Y2tlIGkgbWluZHJlIHN0eWNrZW5zXG4iCisiZSAtIHJlZGlnZXJhIGFrdHVlbGx0IHN0eWNrZSBtYW51ZWxsdFxuIgorIj8gLSB2aXNhIGhqw6RscFxuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI0MQotbXNnaWQgIkFib3J0aW5nIgotbXNnc3RyICJBdmJyeXRlciIKKyM6IGFkZC1wYXRjaC5jOjExMzcgYWRkLXBhdGNoLmM6MTE0NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIkluZ2V0IGbDtnJlZ8OlZW5kZSBzdHlja2UiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjQxCi1tc2dpZCAiZmlsZXMgcmVzZXQiCi1tc2dzdHIgImZpbGVyIMOldGVyc3TDpGxsZGEiCisjOiBhZGQtcGF0Y2guYzoxMTQyIGFkZC1wYXRjaC5jOjExNTIKK21zZ2lkICJObyBuZXh0IGh1bmsiCittc2dzdHIgIkluZ2V0IGbDtmxqYW5kZSBzdHlja2UiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjY5Ci1tc2dpZCAiQWJvcnQgZmFpbGVkLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIGF2YnJ5dGEuIgorIzogYWRkLXBhdGNoLmM6MTE1OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIkluZ2EgYW5kcmEgc3R5Y2tlbiBhdHQgZ8OlIHRpbGwiCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjcxCi1tc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgotbXNnc3RyICJBdmJyeXRuaW5nIGZ1bGxib3JkYWQuIFJlZG8uIgorIzogYWRkLXBhdGNoLmM6MTE2OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzcKK21zZ2lkICJnbyB0byB3aGljaCBodW5rICg8cmV0PiB0byBzZWUgbW9yZSk/ICIKK21zZ3N0ciAiZ8OlIHRpbGwgdmlsa2V0IHN0eWNrZSAoPHJldD4gZsO2ciBhdHQgc2UgZmxlcik/ICIKIAotIzogbGliL3Rvb2xzLnRjbDo3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKLW1zZ3N0ciAiRsO2ciBhdHQgc3RhcnRhICVzIG3DpXN0ZSBkdSB2w6RsamEgZW4gZmlsLiIKKyM6IGFkZC1wYXRjaC5jOjExNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICJnw6UgdGlsbCB2aWxrZXQgc3R5Y2tlPyAiCiAKLSM6IGxpYi90b29scy50Y2w6OTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICUxJHMgb24gZmlsZSBcIiUyJHNcIj8iCi1tc2dzdHIgIsOEciBkdSBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIHN0YXJ0YSAlMSRzIG1lZCBmaWxlbiBcIiUyJHNcIj8iCisjOiBhZGQtcGF0Y2guYzoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnIgorbXNnc3RyICJPZ2lsdGlndCBzaWZmZXJ2w6RyZGU6IFwiJXNcIiIKIAotIzogbGliL3Rvb2xzLnRjbDo5NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgotbXNnc3RyICLDhHIgZHUgc8Oka2VyIHDDpSBhdHQgZHUgdmlsbCBzdGFydGEgJXM/IgorIzogYWRkLXBhdGNoLmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS4iCittc2dpZF9wbHVyYWwgIlNvcnJ5LCBvbmx5ICVkIGh1bmtzIGF2YWlsYWJsZS4iCittc2dzdHJbMF0gIkJla2xhZ2FyLCBkZXQgZmlubnMgYmFyYSAlZCBzdHlja2UuIgorbXNnc3RyWzFdICJCZWtsYWdhciwgZGV0IGZpbm5zIGJhcmEgJWQgc3R5Y2tlbi4iCiAKLSM6IGxpYi90b29scy50Y2w6MTE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbDogJXMiCi1tc2dzdHIgIlZlcmt0eWc6ICVzIgorIzogYWRkLXBhdGNoLmM6MTE5NQorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAiSW5nYSBhbmRyYSBzdHlja2VuIGF0dCBzw7ZrYSBlZnRlciIKIAotIzogbGliL3Rvb2xzLnRjbDoxMTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nOiAlcyIKLW1zZ3N0ciAiRXhla3ZlcmFyOiAlcyIKKyM6IGFkZC1wYXRjaC5jOjEyMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjIzCittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICJzw7ZrIGVmdGVyIHJlZ3VsasOkcnQgdXR0cnljaz8gIgogCi0jOiBsaWIvdG9vbHMudGNsOjE1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCi1tc2dzdHIgIlZlcmt0eWdldCBhdnNsdXRhZGVzIGZyYW1nw6VuZ3NyaWt0OiAlcyIKKyM6IGFkZC1wYXRjaC5jOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIgorbXNnc3RyICJGZWxha3RpZ3QgZm9ybWF0IHDDpSByZWd1bGrDpHJ0IHPDtmt1dHRyeWNrICVzOiAlcyIKIAotIzogbGliL3Rvb2xzLnRjbDoxNTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGZhaWxlZDogJXMiCi1tc2dzdHIgIlZlcmt0eWdldCBtaXNzbHlja2FkZXM6ICVzIgorIzogYWRkLXBhdGNoLmM6MTIzMworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAiSW5nYSBzdHlja2VuIG1vdHN2YXJhciBnaXZldCBtw7Zuc3RlciIKIAotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTYgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjEKLW1zZ2lkICJDaGVja291dCBCcmFuY2giCi1tc2dzdHIgIkNoZWNrYSB1dCBncmVuIgorIzogYWRkLXBhdGNoLmM6MTI0MAorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rIgorbXNnc3RyICJCZWtsYWdhciwga2FuIGludGUgZGVsYSBzdHlja2V0IgogCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNgotbXNnaWQgIkNoZWNrb3V0IgotbXNnc3RyICJDaGVja2EgdXQiCisjOiBhZGQtcGF0Y2guYzoxMjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwbGl0IGludG8gJWQgaHVua3MuIgorbXNnc3RyICJEZWxhIGkgJWQgc3R5Y2tlbi4iCiAKLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9vcHRpb24udGNsOjMxMCBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkKLW1zZ2lkICJPcHRpb25zIgotbXNnc3RyICJBbHRlcm5hdGl2IgorIzogYWRkLXBhdGNoLmM6MTI0OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgIkJla2xhZ2FyLCBrYW4gaW50ZSByZWRpZ2VyYSBzdHlja2V0IgogCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0MiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKLW1zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIkjDpG10YSBzcMOlcmFuZGUgZ3JlbiIKKyM6IGFkdmljZS5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICIlc2hpbnQ6ICUuKnMlc1xuIgorbXNnc3RyICIlc3RpcHM6ICUuKnMlc1xuIgogCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NwotbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiS29wcGxhIGJvcnQgZnLDpW4gbG9rYWwgZ3JlbiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Ci1tc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGxwcm9ncmFtbWV0IHN0w7ZkcyBpbnRlIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKLW1zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKLW1zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGwgw6RyIGVqIHRpbGxnw6RuZ2xpZyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Ci1tc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgotbXNnc3RyICJPZ2lsdGlnIGluc3TDpGxsbmluZyBmw7ZyIHN0YXZuaW5nc2tvbnRyb2xsIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCi1tc2dzdHIgIsOFdGVyc3TDpGxsZXIgb3JkbGlzdGFuIHRpbGwgJXMuIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLW1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbCBtaXNzbHlja2FkZXMgdHlzdCB2aWQgc3RhcnQiCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbHByb2dyYW1tZXQga8Okbm5zIGludGUgaWdlbiIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICJJbmdhIGbDtnJzbGFnIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Ci1tc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJPdsOkbnRhdCBmaWxzbHV0IGZyw6VuIHN0YXZuaW5nc2tvbnRyb2xsIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCi1tc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCi1tc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xsIG1pc3NseWNrYWRlcyIKLQotIzogbGliL3N0YXR1c19iYXIudGNsOjg3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKLW1zZ3N0ciAiJXMuLi4gJSppIGF2ICUqaSAlcyAoJTNpJSUpIgotCi0jOiBsaWIvZGlmZi50Y2w6NzcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iJXMgaGFzIG5vIGNoYW5nZXMuXG4iCi0iXG4iCi0iVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgotInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCi0iXG4iCi0iQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCi0idGhlIHNhbWUgc3RhdGUuIgorIzogYWR2aWNlLmM6MTY0Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgogbXNnc3RyICIiCi0iSGl0dGFkZSBpbmdhIHNraWxsbmFkZXIuXG4iCi0iXG4iCi0iJXMgaW5uZWjDpWxsZXIgaW5nYSDDpG5kcmluZ2FyLlxuIgotIlxuIgotIk1vZGlmaWVyaW5nc2RhdHVtIGbDtnIgZmlsZW4gdXBwZGF0ZXJhZGVzIGF2IGV0dCBhbm5hdCBwcm9ncmFtLCBtZW4gIgotImlubmVow6VsbGV0IGkgZmlsZW4gaGFyIGludGUgw6RuZHJhdHMuXG4iCi0iXG4iCi0iRW4gc8O2a25pbmcga29tbWVyIGF1dG9tYXRpc2t0IGF0dCBzdGFydGFzIGbDtnIgYXR0IGhpdHRhIGFuZHJhIGZpbGVyIHNvbSBrYW4gIgotInZhcmEgaSBzYW1tYSB0aWxsc3TDpW5kLiIKKyJEdSBrYW4gaW50ZSB1dGbDtnJhIGVuIGNoZXJyeS1waWNrIGVmdGVyc29tIGR1IGhhciBmaWxlciBzb20gaW50ZSBzbGFnaXRzICIKKyJzYW1tYW4uIgogCi0jOiBsaWIvZGlmZi50Y2w6MTE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgotbXNnc3RyICJMw6RzZXIgZGlmZmVyZW5zIGbDtnIgJXMuLi4iCi0KLSM6IGxpYi9kaWZmLnRjbDoxNDAKLW1zZ2lkICIiCi0iTE9DQUw6IGRlbGV0ZWRcbiIKLSJSRU1PVEU6XG4iCisjOiBhZHZpY2UuYzoxNjYKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKIG1zZ3N0ciAiIgotIkxPS0FMOiBib3J0dGFnZW5cbiIKLSJGSsOEUlI6XG4iCisiRHUga2FuIGludGUgdXRmw7ZyYSBlbiBpbmNoZWNrbmluZyBlZnRlcnNvbSBkdSBoYXIgZmlsZXIgc29tIGludGUgc2xhZ2l0cyAiCisic2FtbWFuLiIKIAotIzogbGliL2RpZmYudGNsOjE0NQotbXNnaWQgIiIKLSJSRU1PVEU6IGRlbGV0ZWRcbiIKLSJMT0NBTDpcbiIKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgogbXNnc3RyICIiCi0iRkrDhFJSOiBib3J0dGFnZW5cbiIKLSJMT0tBTDpcbiIKKyJEdSBrYW4gaW50ZSB1dGbDtnJhIGVuIHNhbW1hbnNsYWduaW5nIGVmdGVyc29tIGR1IGhhciBmaWxlciBzb20gaW50ZSBzbGFnaXRzICIKKyJzYW1tYW4uIgogCi0jOiBsaWIvZGlmZi50Y2w6MTUyCi1tc2dpZCAiTE9DQUw6XG4iCi1tc2dzdHIgIkxPS0FMOlxuIgotCi0jOiBsaWIvZGlmZi50Y2w6MTU1Ci1tc2dpZCAiUkVNT1RFOlxuIgotbXNnc3RyICJGSsOEUlI6XG4iCi0KLSM6IGxpYi9kaWZmLnRjbDoyMTcgbGliL2RpZmYudGNsOjM1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgotbXNnc3RyICJLYW4gaW50ZSB2aXNhICVzIgotCi0jOiBsaWIvZGlmZi50Y2w6MjE4Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKLW1zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBmaWw6IgotCi0jOiBsaWIvZGlmZi50Y2w6MjI1Ci1tc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgotbXNnc3RyICJHaXRhcmtpdiAodW5kZXJwcm9qZWt0KSIKLQotIzogbGliL2RpZmYudGNsOjIzNwotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAiKiBCaW7DpHJmaWwgKHZpc2FyIGludGUgaW5uZWjDpWxsZXQpLiIKLQotIzogbGliL2RpZmYudGNsOjI0MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgotIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorIzogYWR2aWNlLmM6MTcwCittc2dpZCAiUHVsbGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCiBtc2dzdHIgIiIKLSIqIERlbiBvc3DDpXJhZGUgZmlsZW4gw6RyICVkIGJ5dGUuXG4iCi0iKiBWaXNhciBlbmRhc3QgaW5sZWRhbmRlICVkIGJ5dGUuXG4iCisiRHUga2FuIGludGUgdXRmw7ZyYSBlbiBcInB1bGxcIiBlZnRlcnNvbSBkdSBoYXIgZmlsZXIgc29tIGludGUgc2xhZ2l0cyBzYW1tYW4uIgogCi0jOiBsaWIvZGlmZi50Y2w6MjQ4Ci0jLCB0Y2wtZm9ybWF0CisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiRHUga2FuIGludGUgdXRmw7ZyYSBlbiBcInJldmVydFwiIGVmdGVyc29tIGR1IGhhciBmaWxlciBzb20gaW50ZSBzbGFnaXRzICIKKyJzYW1tYW4uIgorCisjOiBhZHZpY2UuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvICVzIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiRHUga2FuIGludGUgdXRmw7ZyYSBlbiBcIiVzXCIgZWZ0ZXJzb20gZHUgaGFyIGZpbGVyIHNvbSBpbnRlIHNsYWdpdHMgc2FtbWFuLiIKKworIzogYWR2aWNlLmM6MTgyCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIlLDpHR0YSBkZW0gaSBkaW4gYXJiZXRza2F0YWxvZyBvY2ggYW52w6RuZCBzZWRhbiBcImdpdCBhZGQvcm0gPGZpbD5cIlxuIgorInNvbSBsw6RtcGxpZ3QgZsO2ciBhdHQgYW5nZSBsw7ZzbmluZyBvY2ggY2hlY2thIGluLiIKKworIzogYWR2aWNlLmM6MTkwCittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIGFuIHVucmVzb2x2ZWQgY29uZmxpY3QuIgorbXNnc3RyICJBdnNsdXRhciBww6UgZ3J1bmQgYXYgb2zDtnN0IGtvbmZsaWtndC4iCisKKyM6IGFkdmljZS5jOjE5NSBidWlsdGluL21lcmdlLmM6MTMzMgorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiRHUgaGFyIGludGUgYXZzbHV0YXQgc2FtbWFuc2xhZ25pbmdlbiAoTUVSR0VfSEVBRCBmaW5ucykuIgorCisjOiBhZHZpY2UuYzoxOTcKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIgorbXNnc3RyICJDaGVja2EgaW4gZGluYSDDpG5kcmluZ2FyIGlubmFuIGR1IHV0ZsO2ciBzYW1tYW5zbGFnbmluZ2VuLiIKKworIzogYWR2aWNlLmM6MTk4Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICJBdnNsdXRhciBww6UgZ3J1bmQgYXYgb2Z1bGxib3JkYWQgc2FtbWFuc2xhZ25pbmcuIgorCisjOiBhZHZpY2UuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgorIlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCisiT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byAiCisiZmFsc2VcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk9ic2VydmVyYTogY2hlY2thciB1dCBcIiVzXCIuXG4iCisiXG4iCisiRHUgaGFyIG51IGV0dCBcImZyw6Vua29wcGxhdCBIRUFEXCIuIER1IGthbiBzZSBkaWcgb21rcmluZywgZXhwZXJpbWVudGVyYVxuIgorIm1lZCDDpG5kcmluZ2FyIG9jaCBjaGVja2EgaW4gZGVtLCBvY2ggZHUga2FuIGthc3RhIGluY2hlY2tuaW5nYXIgZHUgZ8O2clxuIgorImkgZGV0IGjDpHIgbMOkZ2V0IHV0YW4gYXR0IGRldCBww6V2ZXJrYXIgZ3JlbmFyIGdlbm9tIGF0dCB2w6R4bGEgdGlsbGJha2FcbiIKKyJ0aWxsIGVuIGdyZW4uXG4iCisiXG4iCisiT20gZHUgdmlsbCBza2FwYSBlbiBueSBncmVuIGbDtnIgYXR0IGJlaMOlbGxhIMOkbmRyaW5nYXJuYSBkdSBza2FwYXIsIGthblxuIgorImR1IGfDtnJhIGRldCAobnUgZWxsZXIgc2VuYXJlKSBnZW5vbSBhdHQgYW52w6RuZGEgc3dpdGNoLWtvbW1hbmRvdCBtZWQgLWMuXG4iCisiRXhlbXBlbDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5hbW4tcMOlLW55LWdyZW4+XG4iCisiXG4iCisiRWxsZXIgZ8O2ciBkZW4gaMOkciDDpG5kcmluZ2VuIG9nam9yZCBtZWQ6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJTdMOkbmcgYXYgZGVuIGjDpHIgaGrDpGxwdGV4dGVuIGdlbm9tIGF0dCBzw6R0dGEga29uZmlndXJhdGlvbnN2YXJpYWJlbG5cbiIKKyJhZHZpY2UuZGV0YWNoZWRIZWFkIHRpbGwgZmFsc2VcbiIKKyJcbiIKKworIzogYWxpYXMuYzo1MAorbXNnaWQgImNtZGxpbmUgZW5kcyB3aXRoIFxcIgorbXNnc3RyICJrb21tYW5kb3JhZCBhdnNsdXRhcyBtZWQgXFwiCisKKyM6IGFsaWFzLmM6NTEKK21zZ2lkICJ1bmNsb3NlZCBxdW90ZSIKK21zZ3N0ciAiY2l0YXQgZWogc3TDpG5ndCIKKworIzogYXBwbHkuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib2vDpG50IGFsdGVybmF0aXYgZsO2ciB3aGl0ZXNwYWNlOiBcIiVzXCIiCisKKyM6IGFwcGx5LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJva8OkbnQgYWx0ZXJuYXRpdiBmw7ZyIGlnbm9yZS13aGl0ZXNwYWNlOiBcIiVzXCIiCisKKyM6IGFwcGx5LmM6MTM1Cittc2dpZCAiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tcmVqZWN0IG9jaCAtLTN3YXkga2FuIGludGUgYW52w6RuZGFzIHNhbXRpZGlndC4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIG9jaCAtLTN3YXkga2FuIGludGUgYW52w6RuZGFzIHNhbXRpZGlndC4iCisKKyM6IGFwcGx5LmM6MTQwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkgdXRhbmbDtnIgYXJraXYiCisKKyM6IGFwcGx5LmM6MTUxCittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCB1dGFuZsO2ciBhcmtpdiIKKworIzogYXBwbHkuYzoxNTQKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQgdXRhbmbDtnIgYXJraXYiCisKKyM6IGFwcGx5LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIkthbiBpbnRlIGbDtnJiZXJlZGEgcmVndWxqw6RydCB1dHRyeWNrIGbDtnIgdGlkc3N0w6RtcGVsbiAlcyIKKworIzogYXBwbHkuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIHJldHVybmVyYWRlICVkIGbDtnIgaW5kYXRhOiAlcyIKKworIzogYXBwbHkuYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAia2FuIGludGUgaGl0dGEgZmlsbmFtbiBpIHBhdGNoZW4gcMOlIHJhZCAlZCIKKworIzogYXBwbHkuYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGTDpWxpZyBnaXQtZGlmZiAtIGbDtnJ2w6RudGFkZSAvZGV2L251bGwsIGZpY2sgJXMgcMOlIHJhZCAlZCIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZMOlbGlnIGdpdC1kaWZmIC0gbW90c8OkZ2FuZGUgbnl0dCBmaWxuYW1uIHDDpSByYWQgJWQiCisKKyM6IGFwcGx5LmM6OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGTDpWxpZyBnaXQtZGlmZiAtIG1vdHPDpGdhbmRlIGdhbW1hbHQgZmlsbmFtbiBww6UgcmFkICVkIgorCisjOiBhcHBseS5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGTDpWxpZyBnaXQtZGlmZiAtIGbDtnJ2w6RudGFkZSAvZGV2L251bGwgcMOlIHJhZCAlZCIKKworIzogYXBwbHkuYzo5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIG9uIGxpbmUgJWQ6ICVzIgorbXNnc3RyICJvZ2lsdGlndCBsw6RnZSBww6UgcmFkICVkOiAlcyIKKworIzogYXBwbHkuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgImluY29uc2lzdGVudCBoZWFkZXIgbGluZXMgJWQgYW5kICVkIgorbXNnc3RyICJodXZ1ZGV0IMOkciBpbmtvbnNla3ZlbnQgbWVsbGFuIHJhZCAlZCBvY2ggJWQiCisKKyM6IGFwcGx5LmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisiZ2l0LWRpZmYtaHV2dWRldCBzYWtuYXIgZmlsbmFtbnNpbmZvcm1hdGlvbiBuw6RyICVkIGxlZGFuZGUgc8O2a3bDpGdza29tcG9uZW50XG4iCisidGFzIGJvcnQgKHJhZCAlZCkiCittc2dzdHJbMV0gIiIKKyJnaXQtZGlmZi1odXZ1ZGV0IHNha25hciBmaWxuYW1uc2luZm9ybWF0aW9uIG7DpHIgJWQgbGVkYW5kZSAiCisic8O2a3bDpGdza29tcG9uZW50ZXJcbiIKKyJ0YXMgYm9ydCAocmFkICVkKSIKKworIzogYXBwbHkuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSAlZCkiCittc2dzdHIgImdpdC1kaWZmLWh1dnVkZXQgc2FrbmFyIGZpbG5hbW5zaW5mb3JtYXRpb24gKHJhZCAlZCkiCisKKyM6IGFwcGx5LmM6MTQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY291bnQ6IGbDtnJ2w6RudGFkZSByYWQ6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJwYXRjaC1mcmFnbWVudCB1dGFuIGh1dnVkIHDDpSByYWQgJWQ6ICUuKnMiCisKKyM6IGFwcGx5LmM6MTc1MworbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJueSBmaWwgYmVyb3IgcMOlIGdhbW1hbHQgaW5uZWjDpWxsIgorCisjOiBhcHBseS5jOjE3NTUKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJib3J0dGFnZW4gZmlsIGhhciBmb3J0ZmFyYW5kZSBpbm5laMOlbGwiCisKKyM6IGFwcGx5LmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInRyYXNpZyBwYXRjaCBww6UgcmFkICVkIgorCisjOiBhcHBseS5jOjE4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIm55YSBmaWxlbiAlcyBiZXJvciBww6UgZ2FtbWFsdCBpbm5laMOlbGwiCisKKyM6IGFwcGx5LmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJib3J0dGFnbmEgZmlsZW4gJXMgaGFyIGZvcnRmYXJhbmRlIGlubmVow6VsbCIKKworIzogYXBwbHkuYzoxODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIHZhcm5pbmc6IGZpbGVuICVzIGJsaXIgdG9tIG1lbiBoYXIgaW50ZSB0YWdpdHMgYm9ydCIKKworIzogYXBwbHkuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgInRyYXNpZyBiaW7DpHJwYXRjaCBww6UgcmFkICVkOiAlLipzIgorCisjOiBhcHBseS5jOjIwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJiaW7DpHJwYXRjaGVuIHDDpSByYWQgJWQga8Okbm5zIGludGUgaWdlbiIKKworIzogYXBwbHkuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIG1lZCBiYXJhIHNrcsOkcCBww6UgcmFkICVkIgorCisjOiBhcHBseS5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBzeW1ib2xpc2thIGzDpG5rZW4gJXMiCisKKyM6IGFwcGx5LmM6MjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBlbGxlciBsw6RzYSAlcyIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiZmVsYWt0aWcgaW5sZWRuaW5nIHDDpSByYWQ6IFwiJWNcIiIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiU3R5Y2tlICVkIGx5Y2thZGVzIHDDpSAlZCAob2Zmc2V0ICVkIHJhZCkuIgorbXNnc3RyWzFdICJTdHlja2UgJWQgbHlja2FkZXMgcMOlICVkIChvZmZzZXQgJWQgcmFkZXIpLiIKKworIzogYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIlNhbW1hbmhhbmcgcmVkdWNlcmF0IHRpbGwgKCVsZC8lbGQpIGbDtnIgYXR0IHRpbGzDpG1wYSBmcmFnbWVudCB2aWQgJWQiCisKKyM6IGFwcGx5LmM6MzA3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisidmlkIHPDtmtuaW5nIGVmdGVyOlxuIgorIiUuKnMiCisKKyM6IGFwcGx5LmM6MzA5NworIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICJzYWtuYXIgYmluw6RyYSBwYXRjaGRhdGEgZsO2ciBcIiVzXCIiCisKKyM6IGFwcGx5LmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiIgorImthbiBpbnRlIGFwcGxpY2VyYSBlbiBiaW7DpHJwYXRjaCBiYWtsw6RuZ2VzIHV0YW4gZGVuIG9tdsOkbmRhIHBhdGNoZW4gZsO2ciBcIiVzIgorIlwiIgorCisjOiBhcHBseS5jOjMxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaCB0byAnJXMnIHdpdGhvdXQgZnVsbCBpbmRleCBsaW5lIgorbXNnc3RyICIiCisia2FuIGludGUgYXBwbGljZXJhIGJpbsOkcnBhdGNoIHDDpSBcIiVzXCIgdXRhbiBkZW4gZnVsbHN0w6RuZGlnYSBpbmRleHJhZGVuIgorCisjOiBhcHBseS5jOjMxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICIiCisicGF0Y2hlbiBhcHBsaWNlcmFzIHDDpSBcIiVzXCIgKCVzKSwgc29tIGludGUgbW90c3ZhcmFyIGRldCBudXZhcmFuZGUgIgorImlubmVow6VsbGV0LiIKKworIzogYXBwbHkuYzozMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAicGF0Y2hlbiBhcHBsaWNlcmFzIHDDpSBlbiB0b20gXCIlc1wiLCBtZW4gZGVuIMOkciBpbnRlIHRvbSIKKworIzogYXBwbHkuYzozMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJuw7ZkdsOkbmRpZyBlZnRlcmJpbGQgJXMgZsO2ciBcIiVzXCIga2FuIGludGUgbMOkc2FzIgorCisjOiBhcHBseS5jOjMyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgImJpbsOkcnBhdGNoZW4ga2FuIGludGUgdGlsbMOkbXBhcyBww6UgXCIlc1wiIgorCisjOiBhcHBseS5jOjMyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgImJpbsOkcnBhdGNoZW4gcMOlIFwiJXNcIiBnZXIgZmVsYWt0aWd0IHJlc3VsdGF0IChmw7ZydsOkbnRhZGUgJXMsIGZpY2sgJXMpIgorCisjOiBhcHBseS5jOjMyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgInBhdGNoIG1pc3NseWNrYWRlczogJXM6JWxkIgorCisjOiBhcHBseS5jOjMzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJrYW4gaW50ZSBjaGVja2EgdXQgJXMiCisKKyM6IGFwcGx5LmM6MzQwMyBhcHBseS5jOjM0MTQgYXBwbHkuYzozNDYwIG1pZHguYzo2MSBzZXR1cC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhICVzIgorCisjOiBhcHBseS5jOjM0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibMOkc2VyIGZyw6VuIFwiJXNcIiBzb20gw6RyIHDDpSBhbmRyYSBzaWRhbiBhdiBlbiBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGFwcGx5LmM6MzQ0MCBhcHBseS5jOjM2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgInPDtmt2w6RnZW4gJXMgaGFyIMOkbmRyYXQgbmFtbi90YWdpdHMgYm9ydCIKKworIzogYXBwbHkuYzozNTI2IGFwcGx5LmM6MzY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBmaW5ucyBpbnRlIGkgaW5kZXhldCIKKworIzogYXBwbHkuYzozNTM1IGFwcGx5LmM6MzcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiBtb3RzdmFyYXIgaW50ZSBpbmRleGV0IgorCisjOiBhcHBseS5jOjM1NzAKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisiYXJraXZldCBzYWtuYXIgb2JqZWt0IHNvbSBiZWjDtnZzIGbDtnIgYXR0IGZhbGxhIHRpbGxiYWthIHDDpSAzLSIKKyJ2w6Rnc3NhbW1hbnNsYWduaW5nLiIKKworIzogYXBwbHkuYzozNTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiRmFsbGVyIHRpbGxiYWthIHDDpSB0cmV2w6Rnc3NhbW1hbnNsYWduaW5nLi4uXG4iCisKKyM6IGFwcGx5LmM6MzU4OSBhcHBseS5jOjM1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBha3R1ZWxsdCBpbm5laMOlbGwgaSBcIiVzXCIiCisKKyM6IGFwcGx5LmM6MzYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgZmFsbGEgdGlsbGJha2EgcMOlIHRyZXbDpGdzc2FtbWFuc2xhZ25pbmcuLi5cbiIKKworIzogYXBwbHkuYzozNjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyB3aXRoIGNvbmZsaWN0cy5cbiIKK21zZ3N0ciAiQXBwbGljZXJhZGUgcGF0Y2hlbiBww6UgXCIlc1wiIG1lZCBrb25mbGlrdGVyLlxuIgorCisjOiBhcHBseS5jOjM2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iCittc2dzdHIgIlRpbGzDpG1wYWRlIHBhdGNoZW4gcMOlICBcIiVzXCIgcmVudC5cbiIKKworIzogYXBwbHkuYzozNjUwCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAicGF0Y2ggZsO2ciBib3J0dGFnbmluZyBsw6RtbmFyIGt2YXIgZmlsaW5uZWjDpWxsIgorCisjOiBhcHBseS5jOjM3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiBmZWwgdHlwIgorCisjOiBhcHBseS5jOjM3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcyBoYXIgdHlwZW4gJW8sIGbDtnJ2w6RudGFkZSAlbyIKKworIzogYXBwbHkuYzozODc2IGFwcGx5LmM6Mzg3OCByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICJvZ2lsdGlnIHPDtmt2w6RnIFwiJXNcIiIKKworIzogYXBwbHkuYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGZpbm5zIHJlZGFuIGkgaW5kZXhldCIKKworIzogYXBwbHkuYzozOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IGZpbm5zIHJlZGFuIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBhcHBseS5jOjM5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICJueXR0IGzDpGdlICglbykgZsO2ciAlcyBtb3RzdmFyYXIgaW50ZSBnYW1tYWx0IGzDpGdlICglbykiCisKKyM6IGFwcGx5LmM6Mzk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIm55dHQgbMOkZ2UgKCVvKSBmw7ZyICVzIG1vdHN2YXJhciBpbnRlIGdhbW1hbHQgbMOkZ2UgKCVvKSBmw7ZyICVzIgorCisjOiBhcHBseS5jOjM5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImRlbiBiZXLDtnJkYSBmaWxlbiBcIiVzXCIgw6RyIHDDpSBhbmRyYSBzaWRhbiBhdiBlbiBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGFwcGx5LmM6Mzk4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiBwYXRjaGVuIGthbiBpbnRlIHRpbGzDpG1wYXMiCisKKyM6IGFwcGx5LmM6NDAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAiS29udHJvbGxlcmFyIHBhdGNoZW4gJXMuLi4iCisKKyM6IGFwcGx5LmM6NDA5MworIywgYy1mb3JtYXQKK21zZ2lkICJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJzaGExLWluZm9ybWF0aW9uZW4gc2FrbmFzIGVsbGVyIMOkciBvYW52w6RuZGJhciBmw7ZyIHVuZGVybW9kdWxlbiAlcyIKKworIzogYXBwbHkuYzo0MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAibnl0dCBsw6RnZSBmw7ZyICVzLCBzb20gaW50ZSBmaW5ucyBpIG51dmFyYW5kZSBIRUFEIgorCisjOiBhcHBseS5jOjQxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgInNoYTEtaW5mb3JtYXRpb25lbiBzYWtuYXMgZWxsZXIgw6RyIG9hbnbDpG5kYmFyICglcykuIgorCisjOiBhcHBseS5jOjQxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFkZCAlcyB0byB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImt1bmRlIGludGUgbMOkZ2dhIHRpbGwgJXMgdGlsbCB0ZW1wb3LDpHJ0IGluZGV4IgorCisjOiBhcHBseS5jOjQxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgdGVtcG9yw6RydCBpbmRleCB0aWxsICVzIgorCisjOiBhcHBseS5jOjQyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0ICVzIGZyw6VuIGluZGV4ZXQiCisKKyM6IGFwcGx5LmM6NDI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgInRyYXNpZyBwYXRjaCBmw7ZyIHVuZGVybW9kdWxlbiAlcyIKKworIzogYXBwbHkuYzo0MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBzdGF0dXMgcMOlIG55bGlnZW4gc2thcGFkZSBmaWxlbiBcIiVzXCIiCisKKyM6IGFwcGx5LmM6NDMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgc8Oka2VyaGV0c21pbm5lIGbDtnIgbnlsaWdlbiBza2FwYWRlIGZpbGVuICVzIgorCisjOiBhcHBseS5jOjQzMTQgYXBwbHkuYzo0NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJrYW4gaW50ZSBsw6RnZ2EgdGlsbCBjYWNoZXBvc3QgZsO2ciAlcyIKKworIzogYXBwbHkuYzo0MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2tyaXZhIHRpbGwgXCIlc1wiIgorCisjOiBhcHBseS5jOjQzNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgInN0w6RuZ2VyIGZpbGVuIFwiJXNcIiIKKworIzogYXBwbHkuYzo0NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIGZpbGVuIFwiJXNcIiBsw6RnZSAlbyIKKworIzogYXBwbHkuYzo0NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIlRpbGzDpG1wYWRlIHBhdGNoZW4gJXMgcmVudC4iCisKKyM6IGFwcGx5LmM6NDUzNworbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICJpbnRlcm50IGZlbCIKKworIzogYXBwbHkuYzo0NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiVGlsbMOkbXBhZGUgcGF0Y2hlbiAlJXMgbWVkICVkIHJlZnVzZXJhZC4uLiIKK21zZ3N0clsxXSAiVGlsbMOkbXBhZGUgcGF0Y2hlbiAlJXMgbWVkICVkIHJlZnVzZXJhZGUuLi4iCisKKyM6IGFwcGx5LmM6NDU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgInRydW5rZXJhciAucmVqLWZpbG5hbW5ldCB0aWxsICUuKnMucmVqIgorCisjOiBhcHBseS5jOjQ1NTkgYnVpbHRpbi9mZXRjaC5jOjkwMSBidWlsdGluL2ZldGNoLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hICVzIgorCisjOiBhcHBseS5jOjQ1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiU3R5Y2tlICVkIHRpbGzDpG1wYWRlcyByZW50LiIKKworIzogYXBwbHkuYzo0NTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiUmVmdXNlcmFyIHN0eWNrZSAlZC4iCisKKyM6IGFwcGx5LmM6NDY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkIHBhdGNoICclcycuIgorbXNnc3RyICJJZ25vcmVyYXIgcGF0Y2ggXCIlc1wiLiIKKworIzogYXBwbHkuYzo0NzA0Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJpbmRhdGEga8Okbm5zIGludGUgaWdlbiIKKworIzogYXBwbHkuYzo0NzI0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgaW5kZXhmaWxlbiIKKworIzogYXBwbHkuYzo0ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJzogJXMiCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSBwYXRjaGVuIFwiJXNcIjogJXMiCisKKyM6IGFwcGx5LmM6NDkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICJ1bmRlcnRyeWNrdGUgJWQgZmVsIGkgYmxhbmtzdGVnIgorbXNnc3RyWzFdICJ1bmRlcnRyeWNrdGUgJWQgZmVsIGkgYmxhbmtzdGVnIgorCisjOiBhcHBseS5jOjQ5MTQgYXBwbHkuYzo0OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIHJhZCBsw6RnZ2VyIHRpbGwgZmVsIGkgYmxhbmtzdGVnLiIKK21zZ3N0clsxXSAiJWQgcmFkZXIgbMOkZ2dlciB0aWxsIGZlbCBpIGJsYW5rc3RlZy4iCisKKyM6IGFwcGx5LmM6NDkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCByYWQgYXBwbGljZXJhZGUgZWZ0ZXIgYXR0IGhhIHLDpHR0YXQgZmVsIGkgYmxhbmtzdGVnLiIKK21zZ3N0clsxXSAiJWQgcmFkZXIgYXBwbGljZXJhZGUgZWZ0ZXIgYXR0IGhhIHLDpHR0YXQgZmVsIGkgYmxhbmtzdGVnLiIKKworIzogYXBwbHkuYzo0OTM4IGJ1aWx0aW4vYWRkLmM6NTc5IGJ1aWx0aW4vbXYuYzozMDEgYnVpbHRpbi9ybS5jOjM5MAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgbnkgaW5kZXhmaWwiCisKKyM6IGFwcGx5LmM6NDk2NgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgInRpbGzDpG1wYSBpbnRlIMOkbmRyaW5nYXIgc29tIG1vdHN2YXJhciBnaXZlbiBzw7ZrdsOkZyIKKworIzogYXBwbHkuYzo0OTY5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAidGlsbMOkbXBhIMOkbmRyaW5nYXIgc29tIG1vdHN2YXJhciBnaXZlbiBzw7ZrdsOkZyIKKworIzogYXBwbHkuYzo0OTcxIGJ1aWx0aW4vYW0uYzoyMjA2Cittc2dpZCAibnVtIgorbXNnc3RyICJhbnRhbCIKKworIzogYXBwbHkuYzo0OTcyCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgInRhIGJvcnQgPGFudGFsPiBpbmxlZGFuZGUgc25lZHN0cmVjayBmcsOlbiB0cmFkaXRpb25lbGxhIGRpZmYtc8O2a3bDpGdhciIKKworIzogYXBwbHkuYzo0OTc1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JlcmEgdGlsbMOkZ2cgZ2pvcmRhIGF2IHBhdGNoZW4iCisKKyM6IGFwcGx5LmM6NDk3NworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiaXN0w6RsbGV0IGbDtnIgYXR0IHRpbGzDpG1wYSBwYXRjaGVuLCBza3JpdiB1dCBkaWZmc3RhdCBmw7ZyIGluZGF0YSIKKworIzogYXBwbHkuYzo0OTgxCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAidmlzYSBhbnRhbCB0aWxsYWdkYSBvY2ggYm9ydHRhZ25hIHJhZGVyIGRlY2ltYWx0IgorCisjOiBhcHBseS5jOjQ5ODMKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJpc3TDpGxsZXQgZsO2ciBhdHQgdGlsbMOkbXBhIHBhdGNoZW4sIHNrcml2IHV0IGVuIHN1bW1lcmluZyBhdiBpbmRhdGEiCisKKyM6IGFwcGx5LmM6NDk4NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgImlzdMOkbGxldCBmw7ZyIGF0dCB0aWxsw6RtcGEgcGF0Y2hlbiwgc2Ugb20gcGF0Y2hlbiBrYW4gdGlsbMOkbXBhcyIKKworIzogYXBwbHkuYzo0OTg3Cittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJzZSB0aWxsIGF0dCBwYXRjaGVuIGthbiB0aWxsw6RtcGFzIHDDpSBha3R1ZWxsdCBpbmRleCIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICJtYXJrZXJhIG55YSBmaWxlciBtZWQgXCJnaXQgYWRkIC0taW50ZW50LXRvLWFkZFwiIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAidGlsbMOkbXBhIGVuIHBhdGNoIHV0YW4gYXR0IHLDtnJhIGFyYmV0c2thdGFsb2dlbiIKKworIzogYXBwbHkuYzo0OTkzCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiZ29kdGEgZW4gcGF0Y2ggc29tIHLDtnIgZmlsZXIgdXRhbmbDtnIgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBhcHBseS5jOjQ5OTYKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAidGlsbMOkbXBhIG9ja3PDpSBwYXRjaGVuIChhbnbDpG5kIG1lZCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJmw7Zyc8O2ayBlbiB0cmV2w6Rnc3NhbW1hbnNsYWduaW5nIG9tIHBhdGNoZW4gaW50ZSBrYW4gdGlsbMOkbXBhcyIKKworIzogYXBwbHkuYzo1MDAwCittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgImJ5Z2cgZXR0IHRlbXBvcsOkcnQgaW5kZXggYmFzZXJhdCBww6UgaW5ieWdnZCBpbmRleGluZm9ybWF0aW9uIgorCisjOiBhcHBseS5jOjUwMDMgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgInPDtmt2w6RnYXIgYXZkZWxhcyBtZWQgTlVMLXRlY2tlbiIKKworIzogYXBwbHkuYzo1MDA1Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICJzZSB0aWxsIGF0dCDDpXRtaW5zdG9uZSA8bj4gcmFkZXIgc2FtbWFuaGFuZyDDpHIgbGlrYSIKKworIzogYXBwbHkuYzo1MDA2IGJ1aWx0aW4vYW0uYzoyMTg1IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTAgYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLDpXRnw6RyZCIKKworIzogYXBwbHkuYzo1MDA3Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgImRldGVrdGVyYSBueWEgZWxsZXIgw6RuZHJhZGUgcmFkZXIgc29tIGhhciBmZWwgaSBibGFua3RlY2tlbiIKKworIzogYXBwbHkuYzo1MDEwIGFwcGx5LmM6NTAxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgImlnbm9yZXJhIMOkbmRyaW5nYXIgaSBibGFua3RlY2tlbiBmw7ZyIHNhbW1hbmhhbmciCisKKyM6IGFwcGx5LmM6NTAxNgorbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICJ0aWxsw6RtcGEgcGF0Y2hlbiBiYWtsw6RuZ2VzIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAiZsO2cnbDpG50YSBpbnRlIG1pbnN0IGVuIHJhZCBzYW1tYW5oYW5nIgorCisjOiBhcHBseS5jOjUwMjAKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAibMOkbW5hIHJlZnVzZXJhZGUgc3R5Y2tlbiBpIG1vdHN2YXJhbmRlICoucmVqLWZpbGVyIgorCisjOiBhcHBseS5jOjUwMjIKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAidGlsbMOldCDDtnZlcmxhcHBhbmRlIHN0eWNrZW4iCisKKyM6IGFwcGx5LmM6NTAyMyBidWlsdGluL2FkZC5jOjMwOSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTUgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTggYnVpbHRpbi9mc2NrLmM6Nzc0CisjOiBidWlsdGluL2xvZy5jOjIxNjYgYnVpbHRpbi9tdi5jOjEyMyBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgInZhciBwcmF0c2FtIgorCisjOiBhcHBseS5jOjUwMjUKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAidG9sZXJlcmEgZmVsYWt0aWd0IGRldGVrdGVyYWRlIHNha25hZGUgbnlyYWRzdGVja2VuIHZpZCBmaWxzbHV0IgorCisjOiBhcHBseS5jOjUwMjgKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgImxpdGUgaW50ZSBww6UgYW50YWxldCBsaW5qZXIgaSBzdHlja2VodXZ1ZGVuIgorCisjOiBhcHBseS5jOjUwMzAgYnVpbHRpbi9hbS5jOjIxOTQKK21zZ2lkICJyb290IgorbXNnc3RyICJyb3QiCisKKyM6IGFwcGx5LmM6NTAzMQorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgImzDpGdnIHRpbGwgPHJvdD4gaSBhbGxhIGZpbG5hbW4iCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs8ZmxhZ2dvcj5dIDx0csOkZC1pZ3Q+IFs8c8O2a3bDpGc+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxhcmtpdj4gWy0tZXhlYyA8a21kPl0gWzxmbGFnZ29yPl0gPHRyw6RkLWlndD4gIgorIls8c8O2a3bDpGc+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE3Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGFya2l2PiBbLS1leGVjIDxrbWQ+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozNzIgYnVpbHRpbi9hZGQuYzoxODAgYnVpbHRpbi9hZGQuYzo1NTUgYnVpbHRpbi9ybS5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJzw7ZrdsOkZ3NhbmdpdmVsc2VuIFwiJXNcIiBtb3RzdmFyYWRlIGludGUgbsOlZ3JhIGZpbGVyIgorCisjOiBhcmNoaXZlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmOiAlLipzIgorbXNnc3RyICJpbmdlbiBzw6VkYW4gcmVmZXJlbnM6ICUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICJvYmpla3RuYW1uZXQgw6RyIGludGUgZ2lsdGlndDogJXMiCisKKyM6IGFyY2hpdmUuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdHJlZSBvYmplY3Q6ICVzIgorbXNnc3RyICJpbnRlIGV0dCB0csOkZG9iamVrdDogJXMiCisKKyM6IGFyY2hpdmUuYzo0MjYKK21zZ2lkICJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIKK21zZ3N0ciAiYWt0dWVsbCBhcmJldHNrYXRhbG9nIMOkciBpbnRlIHNww6VyYWQiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJmbXQiCittc2dzdHIgImZtdCIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICJhcmtpdmZvcm1hdCIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgInByZWZpeCIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgImzDpGdnIHRpbGwgcHJlZml4IHRpbGwgdmFyamUgc8O2a3bDpGcgaSBhcmtpdmV0IgorCisjOiBhcmNoaXZlLmM6NDYwIGJ1aWx0aW4vYmxhbWUuYzo4NjEgYnVpbHRpbi9ibGFtZS5jOjg2NSBidWlsdGluL2JsYW1lLmM6ODY2CisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE3IGJ1aWx0aW4vY29uZmlnLmM6MTI5IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYyCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OCBidWlsdGluL2dyZXAuYzo4OTkKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUgYnVpbHRpbi9scy1maWxlcy5jOjU2MCBidWlsdGluL2xzLWZpbGVzLmM6NTYzCisjOiBidWlsdGluL25vdGVzLmM6NDEyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxOTAKK21zZ2lkICJmaWxlIgorbXNnc3RyICJmaWwiCisKKyM6IGFyY2hpdmUuYzo0NjEgYnVpbHRpbi9hcmNoaXZlLmM6OTAKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgInNrcml2IGFya2l2ZXQgdGlsbCBmaWxlbiIKKworIzogYXJjaGl2ZS5jOjQ2MworbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImzDpHMgLmdpdGF0dHJpYnV0ZXMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICJyYXBwb3J0ZXJhIGFya2l2ZXJhZGUgZmlsZXIgcMOlIHN0YW5kYXJkIGZlbCIKKworIzogYXJjaGl2ZS5jOjQ2NQorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgImVuZGFzdCBzcGFyYSIKKworIzogYXJjaGl2ZS5jOjQ2NgorbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAia29tcHJpbWVyYSBzbmFiYmFyZSIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAia29tcHJpbWVyYSBiw6R0dHJlIgorCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICJ2aXNhIHVuZGVyc3TDtmRkYSBhcmtpdmZvcm1hdCIKKworIzogYXJjaGl2ZS5jOjQ3OSBidWlsdGluL2FyY2hpdmUuYzo5MSBidWlsdGluL2Nsb25lLmM6MTEzIGJ1aWx0aW4vY2xvbmUuYzoxMTYKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzkxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg0Cittc2dpZCAicmVwbyIKK21zZ3N0ciAiYXJraXYiCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAiaMOkbXRhIGFya2l2ZXQgZnLDpW4gZmrDpHJyYXJraXZldCA8YXJraXY+IgorCisjOiBhcmNoaXZlLmM6NDgxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJrb21tYW5kbyIKKworIzogYXJjaGl2ZS5jOjQ4MiBidWlsdGluL2FyY2hpdmUuYzo5NAorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAic8O2a3bDpGcgdGlsbCBrb21tYW5kb3QgZ2l0LXVwbG9hZC1hcmNoaXZlIHDDpSBmasOkcnJlbiIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICJPdsOkbnRhZCBmbGFnZ2EgLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAiRmxhZ2dhbiAtLWV4ZWMga2FuIGVuZGFzdCBhbnbDpG5kYXMgdGlsbHNhbW1hbnMgbWVkIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIk92w6RudGFkIGZsYWdnYSAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIk9rw6RudCBhcmtpdmZvcm1hdCBcIiVzXCIiCisKKyM6IGFyY2hpdmUuYzo1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXJndW1lbnQgbm90IHN1cHBvcnRlZCBmb3IgZm9ybWF0ICclcyc6IC0lZCIKK21zZ3N0ciAiQXJndW1lbnRldCBzdMO2ZCBpbnRlIGbDtnIgZm9ybWF0ZXQgXCIlc1wiOiAtJWQiCisKKyM6IGFyY2hpdmUtdGFyLmM6MTI1IGFyY2hpdmUtemlwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIKK21zZ3N0ciAia2FuIGludGUgc3Ryw7ZtbWEgYmxvYjplbiAlcyIKKworIzogYXJjaGl2ZS10YXIuYzoyNjYgYXJjaGl2ZS16aXAuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIKK21zZ3N0ciAiZmlsZW5zIGzDpGdlIHN0w7ZkcyBlajogMCVvIChTSEExOiAlcykiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjkzIGFyY2hpdmUtemlwLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSAlcyIKKworIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBmaWx0cmV0IFwiJXNcIiIKKworIzogYXJjaGl2ZS10YXIuYzo0NjgKK21zZ2lkICJ1bmFibGUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciIKK21zZ3N0ciAia2FuIGludGUgb21kaXJpZ2VyYSBoYW5kdGFnIgorCisjOiBhcmNoaXZlLXRhci5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAiZmlsdHJldCBcIiVzXCIgcmFwcG9ydGVyYWRlIGZlbCIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICJzw7ZrdsOkZ2VuIMOkciBpbnRlIGdpbHRpZyBVVEYtODogJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICJzw7ZrdsOkZ2VuIGbDtnIgbMOlbmcgKCVkIHRlY2tlbiwgU0hBMTogJXMpOiAlcyIKKworIzogYXJjaGl2ZS16aXAuYzo0NzkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJmZWwgaSBkZWZsYXRlICglZCkiCisKKyM6IGFyY2hpdmUtemlwLmM6NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWVzdGFtcCB0b28gbGFyZ2UgZm9yIHRoaXMgc3lzdGVtOiAlPFBSSXVNQVg+IgorbXNnc3RyICJ0aWRzc3TDpG1wZWxuIGbDtnIgc3RvciBmw7ZyIGRldHRhIHN5c3RlbTogJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLSpzIMOkciBpbnRlIGV0dCBnaWx0aWd0IG5hbW4gcMOlIGF0dHJpYnV0IgorCisjOiBhdHRyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIG5vdCBhbGxvd2VkOiAlczolZCIKK21zZ3N0ciAiJXMgaW50ZSB0aWxsw6V0ZXQ6ICVzOiVkIgorCisjOiBhdHRyLmM6NDA5Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisiTmVnYXRpdmEgbcO2bnN0ZXIgaWdub3JlcmFzIGkgZ2l0LWF0dHJpYnV0XG4iCisiQW52w6RuZCAnXFwhJyBmw7ZyIGF0dCBpbmxlZGEgbWVkIGV0dCB1dHJvcHN0ZWNrZW4uIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IGNpdGVyYXQgaW5uZWjDpWxsIGkgZmlsZW4gXCIlc1wiOiAlcyIKKworIzogYmlzZWN0LmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGNhbm5vdCBiaXNlY3QgbW9yZSFcbiIKK21zZ3N0ciAiRGV0IGZpbm5zIGludGUgbWVyIGF0dCBnw7ZyYSBcImJpc2VjdFwiIHDDpSFcbiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICJOYW1uZXQgcMOlIGluY2hlY2tuaW5nZW4gw6RyIGludGUgZ2lsdGlndDogJXMiCisKKyM6IGJpc2VjdC5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiU2FtbWFuc2xhZ25pbmdzYmFzZW4gJXMgw6RyIHRyYXNpZy5cbiIKKyJEZXQgYmV0eWRlciBhdHQgZmVsZXQgaGFyIHLDpHR0YXRzIG1lbGxhbiAlcyBvY2ggWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJTYW1tYW5zbGFnbmluZ3NiYXNlbiAlcyDDpHIgbnkuXG4iCisiRWdlbnNrYXBlbiBoYXIgw6RuZHJhdHMgbWVsbGFuICVzIG9jaCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJTYW1tYW5zbGFnbmluZ3NiYXNlbiAlcyDDpHIgJXMuXG4iCisiRGV0IGJldHlkZXIgYXR0IGRlbiBmw7Zyc3RhIFwiJXNcIiBpbmNoZWNrbmluZ2VuIMOkciBtZWxsYW4gJXMgb2NoIFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCittc2dzdHIgIiIKKyJOw6VncmEgJXMtcmV2aXNpb25lciDDpHIgaW50ZSBmw7Zyw6RsZHJhciB0aWxsICVzLXJldmlzaW9uZW4uXG4iCisiZ2l0IGJpc2VjdCBrYW4gaW50ZSBmdW5nZXJhIGtvcnJla3QgaSBkZXR0YSBmYWxsLlxuIgorIkthbnNrZSBkdSBza3JldiBmZWwgJXMtIG9jaCAlcy1yZXZpc2lvbmVyP1xuIgorCisjOiBiaXNlY3QuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gbXVzdCBiZSBza2lwcGVkLlxuIgorIlNvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCAlcyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgJXMuXG4iCisiV2UgY29udGludWUgYW55d2F5LiIKK21zZ3N0ciAiIgorInNhbW1hbnNsYWduaW5nc2Jhc2VuIG1lbGxhbiAlcyBvY2ggWyVzXSBtw6VzdGUgaG9wcGFzIMO2dmVyLlxuIgorIlZpIGthbiBpbnRlIHZhcmEgc8Oka3JhIHDDpSBhdHQgZGVuIGbDtnJzdGEgJXMgaW5jaGVja25pbmdlbiDDpHIgbWVsbGFuICVzIG9jaCAiCisiJXMuXG4iCisiVmkgZm9ydHPDpHR0ZXIgw6RuZMOlLiIKKworIzogYmlzZWN0LmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgIkJpc2VjdDogZW4gc2FtbWFuc2xhZ25pbmdzYmFzIG3DpXN0ZSB0ZXN0YXNcbiIKKworIzogYmlzZWN0LmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIgorbXNnc3RyICJlbiAlcy1yZXZpc2lvbiBiZWjDtnZzIgorCisjOiBiaXNlY3QuYzo4ODQgYnVpbHRpbi9ub3Rlcy5jOjE3NyBidWlsdGluL3RhZy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBmaWxlbiBcIiVzXCIiCisKKyM6IGJpc2VjdC5jOjkyOCBidWlsdGluL21lcmdlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBmaWxlbiBcIiVzXCIiCisKKyM6IGJpc2VjdC5jOjk1OAorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgYmlzZWN0LXJlZmVyZW5zZXIiCisKKyM6IGJpc2VjdC5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgdmFyIGLDpWRlICVzIG9jaCAlc1xuIgorCisjOiBiaXNlY3QuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKyJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iCittc2dzdHIgIiIKKyJJbmdlbiB0ZXN0YmFyIGluY2hlY2tuaW5nIGhpdHRhZGVzLlxuIgorIkthbnNrZSBkdSBzdGFydGFkZSBtZWQgZmVsYWt0aWdhIHPDtmt2w6Rnc3BhcmFtZXRyYXI/XG4iCisKKyM6IGJpc2VjdC5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJvdWdobHkgJWQgc3RlcCkiCittc2dpZF9wbHVyYWwgIihyb3VnaGx5ICVkIHN0ZXBzKSIKK21zZ3N0clswXSAiKHVuZ2Vmw6RyICVkIHN0ZWcpIgorbXNnc3RyWzFdICIodW5nZWbDpHIgJWQgc3RlZykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJCaXNlY3Q6ICVkIHJldmlzaW9uIGt2YXIgYXR0IHRlc3RhIGVmdGVyIGRlbm5hICVzXG4iCittc2dzdHJbMV0gIkJpc2VjdDogJWQgcmV2aXNpb25lciBrdmFyIGF0dCB0ZXN0YSBlZnRlciBkZW5uYSAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIG9jaCAtLXJldmVyc2UgZnVuZ2VyYXIgaW50ZSBzw6UgYnJhIHRpbGxzYW1tYW5zLiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICJrYW4gaW50ZSBhbnbDpG5kYSAtLWNvbnRlbnRzIG1lZCBuYW1uIHDDpSBzbHV0Z2lsdGlndCBpbmNoZWNrbmluZ3NvYmpla3QiCisKKyM6IGJsYW1lLmM6MjczNQorbXNnaWQgIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIKK21zZ3N0ciAiIgorIi0tcmV2ZXJzZSBvY2ggLS1maXJzdC1wYXJlbnQgdGlsbHNhbW1hbnMga3LDpHZlciBhdHQgZHUgYW5nZXIgc2VuYXN0ZSAiCisiaW5jaGVja25pbmdlbiIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQxIHNlcXVlbmNlci5jOjIwOTMKKyM6IHNlcXVlbmNlci5jOjQ0NjAgYnVpbHRpbi9jb21taXQuYzoxMDQwIGJ1aWx0aW4vbG9nLmM6Mzg4IGJ1aWx0aW4vbG9nLmM6OTkxCisjOiBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNSBidWlsdGluL21lcmdlLmM6NDExCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQzCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSByZXZpc2lvbnN0cmF2ZXJzZXJpbmciCisKKyM6IGJsYW1lLmM6Mjc2MgorbXNnaWQgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCittc2dzdHIgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdGlsbHNhbW1hbnMga3LDpHZlciBldHQgaW50ZXJ2YWxsIHDDpSBmw7Zyc3RhLWbDtnLDpGxkZXItIgorImtlZGphbiIKKworIzogYmxhbWUuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIKK21zZ3N0ciAic8O2a3bDpGdlbiAlcyBpICVzIGZpbm5zIGludGUiCisKKyM6IGJsYW1lLmM6Mjc4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBvYmpla3RldCAlcyBmw7ZyIHPDtmt2w6RnZW4gJXMiCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKICJcbiIKLSIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKLSIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKIG1zZ3N0ciAiIgogIlxuIgotIiogRGVuIG9zcMOlcmFkZSBmaWxlbiBrbGlwcHRlcyBow6RyIGF2ICVzLlxuIgotIiogRsO2ciBhdHQgc2UgaGVsYSBmaWxlbiwgYW52w6RuZCBldHQgZXh0ZXJudCByZWRpZ2VyaW5nc3Byb2dyYW0uXG4iCisiTsOkciBkdSBoYXIgcsOkdHRhdCBmZWxvcnNha2VuIGthbiBkdSBmw7Zyc8O2a2EgcsOkdHRhXG4iCisiZmrDpHJyc3DDpXJuaW5nc2luZm9ybWF0aW9uZW4gZ2Vub20gYXR0IHV0ZsO2cmFcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgogCi0jOiBsaWIvZGlmZi50Y2w6MzU2IGxpYi9ibGFtZS50Y2w6MTEyOAotbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCi1tc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBkaWZmZXJlbnM6IgorIzogYnJhbmNoLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJTdMOkbGxlciBpbnRlIGluIGdyZW5lbiAlcyBzb20gc2luIGVnZW4gdXBwc3Ryw7Ztc2dyZW4uIgogCi0jOiBsaWIvZGlmZi50Y2w6NTc4Ci1tc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCBkZW4gdmFsZGEgZGVsZW4gZnLDpW4ga8O2bi4iCi0KLSM6IGxpYi9kaWZmLnRjbDo1ODUKLW1zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCi1tc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgZGVuIHZhbGRhIGRlbGVuIHRpbGwga8O2bi4iCi0KLSM6IGxpYi9kaWZmLnRjbDo2NjQKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGRlbiB2YWxkYSByYWRlbiBmcsOlbiBrw7ZuLiIKLQotIzogbGliL2RpZmYudGNsOjY3MgotbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCBkZW4gdmFsZGEgcmFkZW4gdGlsbCBrw7ZuLiIKLQotIzogbGliL3JlbW90ZS50Y2w6MjAwCi1tc2dpZCAiUHVzaCB0byIKLW1zZ3N0ciAiU8OkbmQgdGlsbCIKLQotIzogbGliL3JlbW90ZS50Y2w6MjE4Ci1tc2dpZCAiUmVtb3ZlIFJlbW90ZSIKLW1zZ3N0ciAiVGEgYm9ydCBmasOkcnJhcmtpdiIKLQotIzogbGliL3JlbW90ZS50Y2w6MjIzCi1tc2dpZCAiUHJ1bmUgZnJvbSIKLW1zZ3N0ciAiVGEgYm9ydCBmcsOlbiIKLQotIzogbGliL3JlbW90ZS50Y2w6MjI4Ci1tc2dpZCAiRmV0Y2ggZnJvbSIKLW1zZ3N0ciAiSMOkbXRhIGZyw6VuIgotCi0jOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCi1tc2dpZCAiU2VsZWN0IgotbXNnc3RyICJWw6RsaiIKLQotIzogbGliL2Nob29zZV9mb250LnRjbDo1NQotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICJUZWNrZW5zbml0dHNmYW1pbGoiCi0KLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKLW1zZ2lkICJGb250IFNpemUiCi1tc2dzdHIgIlN0b3JsZWsiCi0KLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKLW1zZ2lkICJGb250IEV4YW1wbGUiCi1tc2dzdHIgIkV4ZW1wZWwiCi0KLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTA1Ci1tc2dpZCAiIgotIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgotIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCiBtc2dzdHIgIiIKLSJEZXR0YSDDpHIgZW4gZXhlbXBlbHRleHQuXG4iCi0iT20gZHUgdHlja2VyIG9tIGRlbiBow6RyIHRleHRlbiBrYW4gZGVuIHZhcmEgZGl0dCB0ZWNrZW5zbml0dC4iCisiR3JlbmVuICVzIHN0w6RsbGRlcyBpbiBhdHQgc3DDpXJhIGZqw6RycmdyZW5lbiBcIiVzXCIgZnLDpW4gXCIlc1wiIGdlbm9tICIKKyJvbWJhc2VyaW5nLiIKIAotIzogbGliL29wdGlvbi50Y2w6MTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJEZW4gZ2xvYmFsYSB0ZWNrZW5rb2RuaW5nZW4gXCIlc1wiIMOkciBvZ2lsdGlnIgorIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICJHcmVuZW4gJXMgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZmrDpHJyZ3JlbmVuIFwiJXNcIiBmcsOlbiBcIiVzXCIuIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJBcmtpdmV0cyB0ZWNrZW5rb2RuaW5nIFwiJXNcIiDDpHIgb2dpbHRpZyIKLQotIzogbGliL29wdGlvbi50Y2w6MTE5Ci1tc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGwgc3RhbmRhcmR2w6RyZGVuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxMjMKLW1zZ2lkICJTYXZlIgotbXNnc3RyICJTcGFyYSIKLQotIzogbGliL29wdGlvbi50Y2w6MTMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiQXJraXZldCAlcyIKLQotIzogbGliL29wdGlvbi50Y2w6MTM0Ci1tc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKLW1zZ3N0ciAiR2xvYmFsdCAoYWxsYSBhcmtpdikiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0MAotbXNnaWQgIlVzZXIgTmFtZSIKLW1zZ3N0ciAiQW52w6RuZGFybmFtbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQxCi1tc2dpZCAiRW1haWwgQWRkcmVzcyIKLW1zZ3N0ciAiRS1wb3N0YWRyZXNzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDMKLW1zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKLW1zZ3N0ciAiU3VtbWVyYSBzYW1tYW5zbGFnbmluZ3NpbmNoZWNrbmluZ2FyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDQKLW1zZ2lkICJNZXJnZSBWZXJib3NpdHkiCi1tc2dzdHIgIlByYXRzYW1oZXQgZsO2ciBzYW1tYW5zbGFnbmluZ2FyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNDUKLW1zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgotbXNnc3RyICJWaXNhIGRpZmZzdGF0aXN0aWsgZWZ0ZXIgc2FtbWFuc2xhZ25pbmciCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NgotbXNnaWQgIlVzZSBNZXJnZSBUb29sIgotbXNnc3RyICJBbnbDpG5kIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZyIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ4Ci1tc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKLW1zZ3N0ciAiTGl0YSBww6UgZmlsw6RuZHJpbmdzdGlkc3N0w6RtcGxhciIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ5Ci1tc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgotbXNnc3RyICJTdMOkZGEgc3DDpXJhZGUgZ3JlbmFyIHZpZCBow6RtdG5pbmciCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgotbXNnc3RyICJNYXRjaGEgc3DDpXJhZGUgZ3JlbmFyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTEKLW1zZ2lkICJVc2UgVGV4dGNvbnYgRm9yIERpZmZzIGFuZCBCbGFtZXMiCi1tc2dzdHIgIkFudsOkbmQgVGV4dGNvbnYgZsO2ciBkaWZmIG9jaCBrbGFuZHJpbmciCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MgotbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgotbXNnc3RyICJLbGFuZHJhIGtvcGllcmluZyBiYXJhIGkgw6RuZHJhZGUgZmlsZXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MwotbXNnaWQgIk1heGltdW0gTGVuZ3RoIG9mIFJlY2VudCBSZXBvc2l0b3JpZXMgTGlzdCIKLW1zZ3N0ciAiTWF4IGzDpG5nZCBmw7ZyIGxpc3RhIMO2dmVyIHRpZGlnYXJlIGFya2l2IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTQKLW1zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKLW1zZ3N0ciAiTWluc3RhIGFudGFsIHRlY2tlbiBhdHQga2xhbmRyYSBrb3BpZXJpbmcgZsO2ciIKLQotIzogbGliL29wdGlvbi50Y2w6MTU1Ci1tc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCi1tc2dzdHIgIkhpc3RvcmlrcmFkaWUgZsO2ciBrbGFuZHJpbmcgKGRhZ2FyKSIKLQotIzogbGliL29wdGlvbi50Y2w6MTU2Ci1tc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKLW1zZ3N0ciAiQW50YWwgcmFkZXIgc2FtbWFuaGFuZyBpIGRpZmZlcmVuc2VyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTcKLW1zZ2lkICJBZGRpdGlvbmFsIERpZmYgUGFyYW1ldGVycyIKLW1zZ3N0ciAiWXR0ZXJsaWdhcmUgZGlmZi1wYXJhbWV0cmFyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTgKLW1zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgotbXNnc3RyICJUZXh0YnJlZGQgZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTkKLW1zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCi1tc2dzdHIgIk1hbGwgZsO2ciBuYW1uIHDDpSBueWEgZ3JlbmFyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjAKLW1zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCi1tc2dzdHIgIlN0YW5kYXJkdGVja2Vua29kbmluZyBmw7ZyIGZpbGlubmVow6VsbCIKLQotIzogbGliL29wdGlvbi50Y2w6MTYxCi1tc2dpZCAiV2FybiBiZWZvcmUgY29tbWl0dGluZyB0byBhIGRldGFjaGVkIGhlYWQiCi1tc2dzdHIgIlZhcm5hIGbDtnIgaW5jaGVja25pbmcgcMOlIGZyw6Vua29wcGxhdCBodXZ1ZCIKLQotIzogbGliL29wdGlvbi50Y2w6MTYyCi1tc2dpZCAiU3RhZ2luZyBvZiB1bnRyYWNrZWQgZmlsZXMiCi1tc2dzdHIgIkvDtmEgb3Nww6VyYWRlIGZpbGVyIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjMKLW1zZ2lkICJTaG93IHVudHJhY2tlZCBmaWxlcyIKLW1zZ3N0ciAiVmlzYSBvc3DDpXJhZGUgZmlsZXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2NAotbXNnaWQgIlRhYiBzcGFjaW5nIgotbXNnc3RyICJCbGFua3N0ZWcgZsO2ciB0YWJ1bGF0b3J0ZWNrZW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjIxMAotbXNnaWQgIkNoYW5nZSIKLW1zZ3N0ciAiw4RuZHJhIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyNTQKLW1zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKLW1zZ3N0ciAiU3Rhdm5pbmdzb3JkbGlzdGE6IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyODQKLW1zZ2lkICJDaGFuZ2UgRm9udCIKLW1zZ3N0ciAiQnl0IHRlY2tlbnNuaXR0IgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDaG9vc2UgJXMiCi1tc2dzdHIgIlbDpGxqICVzIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyOTQKLW1zZ2lkICJwdC4iCi1tc2dzdHIgInAuIgotCi0jOiBsaWIvb3B0aW9uLnRjbDozMDgKLW1zZ2lkICJQcmVmZXJlbmNlcyIKLW1zZ3N0ciAiSW5zdMOkbGxuaW5nYXIiCi0KLSM6IGxpYi9vcHRpb24udGNsOjM0NQotbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCi1tc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IGhlbHQgc3BhcmEgYWx0ZXJuYXRpdjoiCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjgKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgotbXNnc3RyICJUdmluZ2EgbMO2c25pbmcgYXR0IGFudsOkbmRhIGJhc3ZlcnNpb25lbj8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjkKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKLW1zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBkZW4gYWt0dWVsbGEgZ3JlbmVuPyIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTAKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgotbXNnc3RyICJUdmluZ2EgbMO2c25pbmcgYXR0IGFudsOkbmRhIGRlbiBhbmRyYSBncmVuZW4/IgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgotIlxuIgotIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCi0iXG4iCi0iVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKKyM6IGJyYW5jaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJyBieSByZWJhc2luZy4iCiBtc2dzdHIgIiIKLSJPYnNlcnZlcmEgYXR0IGRpZmZlbiBlbmRhc3QgdmlzYXIgZGUgw6RuZHJpbmdhciBzb20gc3TDpXIgaSBrb25mbGlrdC5cbiIKLSJcbiIKLSIlcyBrb21tZXIgYXR0IHNrcml2YXMgw7Z2ZXIuXG4iCi0iXG4iCi0iRHUgbcOlc3RlIHN0YXJ0YSBvbSBzYW1tYW5zbGFnbmluZ2VuIGbDtnIgYXR0IGfDtnJhIGRlbiBow6RyIG9wZXJhdGlvbmVuIG9nam9yZC4iCisiR3JlbmVuIFwiJXNcIiBzdMOkbGxkZXMgaW4gYXR0IHNww6VyYSBkZW4gbG9rYWxhIGdyZW5lbiBcIiVzXCIgIGdlbm9tICIKKyJvbWJhc2VyaW5nLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6NDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKLW1zZ3N0ciAiRmlsZW4gJXMgdmVya2FyIGlubmVow6VsbGEgb2zDtnN0YSBrb25mbGlrdGVyLiBWaWxsIGR1IGvDtmEgw6RuZMOlPyIKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJy4iCittc2dzdHIgIkdyZW5lbiBcIiVzXCIgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZGVuIGxva2FsYSBncmVuZW4gXCIlc1wiLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6NjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCi1tc2dzdHIgIkzDpGdnZXIgdGlsbCBsw7ZzbmluZyBmw7ZyICVzIgorIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiR3JlbmVuIFwiJXNcIiBzdMOkbGxkZXMgaW4gYXR0IHNww6VyYSBmasOkcnJlZmVyZW5zZW4gXCIlc1wiIGdlbm9tIG9tYmFzZXJpbmcuIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCi1tc2dzdHIgIkthbiBpbnRlIGzDtnNhIGJvcnR0YWduaW5ncy0gZWxsZXIgbMOkbmtrb25mbGlrdGVyIG1lZCBldHQgdmVya3R5ZyIKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnLiIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBzdMOkbGxkZXMgaW4gYXR0IHNww6VyYSBmasOkcnJlZmVyZW5zZW4gXCIlc1wiLiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Ci1tc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKLW1zZ3N0ciAiS29uZmxpa3RmaWwgZXhpc3RlcmFyIGludGUiCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkdyZW5lbiBcIiVzXCIgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZGVuIGxva2FsYSByZWZlcmVuc2VuIFwiJXNcIiBnZW5vbSAiCisib21iYXNlcmluZy4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI0NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgotbXNnc3RyICJJbnRlIGV0dCBncmFmaXNrdCB2ZXJrdHlnIGbDtnIgc2FtbWFuc2xhZ25pbmc6ICVzIgorIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIkdyZW5lbiBcIiVzXCIgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZGVuIGxva2FsYSByZWZlcmVuc2VuIFwiJXNcIi4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjI3NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKLW1zZ3N0ciAiVmVya3R5Z2V0IFwiJXNcIiBmw7ZyIHNhbW1hbnNsYWduaW5nIHN0w7ZkcyBpbnRlIgorIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJLYW4gaW50ZSBza3JpdmEgaW5zdMOkbGxuaW5nYXIgZsO2ciB1cHBzdHLDtm1zZ3JlbiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzEwCi1tc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCi1tc2dzdHIgIlZlcmt0eWdldCBmw7ZyIHNhbW1hbnNsYWduaW5nIGvDtnJzIHJlZGFuLiBWaWxsIGR1IGF2c2x1dGEgZGV0PyIKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICJTcMOlcmFyIGludGU6IHR2ZXR5ZGlnIGluZm9ybWF0aW9uIGbDtnIgcmVmZXJlbnNlbiAlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzMwCi0jLCB0Y2wtZm9ybWF0CisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIlwiJXNcIiDDpHIgaW50ZSBldHQgZ2lsdGlndCBncmVubmFtbi4iCisKKyM6IGJyYW5jaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiRGV0IGZpbm5zIHJlZGFuIGVuIGdyZW4gc29tIGhldGVyIFwiJXNcIi4iCisKKyM6IGJyYW5jaC5jOjIxMworbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2FuIGludGUgdHZpbmdhIHVwcGRhdGVyaW5nIGF2IGFrdHVlbGwgZ3Jlbi4iCisKKyM6IGJyYW5jaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAiS2FuIGludGUgc3TDpGxsYSBpbiBzcMOlcm5pbmc7IHN0YXJ0cHVua3RlbiBcIiVzXCIgw6RyIGludGUgZW4gZ3Jlbi4iCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJkZW4gZWZ0ZXJmcsOlZ2FkZSB1cHBzdHLDtm1zZ3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlIgorCisjOiBicmFuY2guYzoyMzcKIG1zZ2lkICIiCi0iRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIk9tIGR1IGhhciB0w6Rua3QgYmFzZXJhIGRpdHQgYXJiZXRlIHDDpSBlbiB1cHBzdHLDtm1zZ3JlblxuIgorInNvbSByZWRhbiBmaW5ucyBww6UgZmrDpHJyZW4ga2FuIGR1IGJlaMO2dmEga8O2cmEgXCJnaXQgZmV0Y2hcIlxuIgorImbDtnIgYXR0IGjDpG10YSBkZW4uXG4iCisiXG4iCisiT20gZHUgaGFyIHTDpG5rdCBzw6RuZGEgaW4gZW4gbnkgbG9rYWwgZ3JlbiBzb20gc2thbGxcbiIKKyJzcMOlcmEgZGVzcyBmasOkcnJtb3RzdmFyaWdoZXQga2FuIGR1IGFudsOkbmRhIFwiZ2l0IHB1c2ggLXVcIlxuIgorImbDtnIgYXR0IHN0w6RsbGEgaW4gdXBwc3Ryw7Ztc2tvbmZpZ3VyYXRpb25lbiBuw6RyIGR1IHPDpG5kZXIgaW4uIgorCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJPYmpla3RuYW1uZXQgw6RyIGludGUgZ2lsdGlndDogXCIlc1wiLiIKKworIzogYnJhbmNoLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIk9iamVrdG5hbW5ldCDDpHIgdHZldHlkaWd0OiBcIiVzXCIuIgorCisjOiBicmFuY2guYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAiQXZncmVuaW5nc3B1bmt0ZW4gw6RyIGludGUgZ2lsdGlnOiBcIiVzXCIuIgorCisjOiBicmFuY2guYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIlwiJXNcIiDDpHIgcmVkYW4gdXRjaGVja2FkIHDDpSBcIiVzXCIiCisKKyM6IGJyYW5jaC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAiSEVBRCBpIGFyYmV0c2thdGFsb2dlbiAlcyBoYXIgaW50ZSB1cHBkYXRlcmF0cyIKKworIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyBzZXIgaW50ZSB1dCBzb20gZW4gdjItYnVuZGxlLWZpbCIKKworIzogYnVuZGxlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICJva8OkbnQgaHV2dWQ6ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMzQ0IHNlcXVlbmNlci5jOjMxMDgKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIFwiJXNcIiIKKworIzogYnVuZGxlLmM6MTQzCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIkFya2l2ZXQgc2FrbmFyIGRlc3NhIG7DtmR2w6RuZGlnYSBpbmNoZWNrbmluZ2FyOiIKKworIzogYnVuZGxlLmM6MTQ2Cittc2dpZCAibmVlZCBhIHJlcG9zaXRvcnkgdG8gdmVyaWZ5IGEgYnVuZGxlIgorbXNnc3RyICJiZWjDtnZlciBldHQgYXJraXYgZsO2ciBhdHQgdmVyaWZpZXJhIGV0dCBwYWtldCAoYnVuZGxlKS4iCisKKyM6IGJ1bmRsZS5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiUGFrZXRldCAoYnVuZGxlbikgaW5uZWjDpWxsZXIgZGVubmEgcmVmZXJlbnM6IgorbXNnc3RyWzFdICJQYWtldGV0IChidW5kbGVuKSBpbm5laMOlbGxlciBkZXNzYSAlZCByZWZlcmVuc2VyOiIKKworIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIlBha2V0ZXQgKGJ1bmRsZW4pIGJlc2tyaXZlciBlbiBrb21wbGV0dCBoaXN0b3Jpay4iCisKKyM6IGJ1bmRsZS5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiUGFrZXRldCAoYnVuZGxlbikga3LDpHZlciBkZW5uYSByZWZlcmVuczoiCittc2dzdHJbMV0gIlBha2V0ZXQgKGJ1bmRsZW4pIGtyw6R2ZXIgZGVzc2EgJWQgcmVmZXJlbnNlcjoiCisKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgImthbiBpbnRlIGR1cGxpY2VyYSBwYWtldGhhbmR0YWciCisKKyM6IGJ1bmRsZS5jOjI4MAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIkt1bmRlIGludGUgc3RhcnRhIHBhY2stb2JqZWN0cyIKKworIzogYnVuZGxlLmM6MjkxCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgInBhY2stb2JqZWN0cyBtaXNzbHlja2FkZXMiCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IGRvZyIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJyZWZlcmVuc2VuIFwiJXNcIiBleGtsdWRlcmFzIGF2IGFyZ3VtZW50ZW4gdGlsbCByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6NDYxIGJ1aWx0aW4vbG9nLmM6MjAzIGJ1aWx0aW4vbG9nLmM6MTgxNCBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIm9rw6RudCBhcmd1bWVudDogJXMiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICJWw6RncmFyIHNrYXBhIGV0dCB0b210IHBha2V0IChidW5kbGUpLiIKKworIzogYnVuZGxlLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgXCIlc1wiIgorCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgImluZGV4LXBhY2sgZG9nIgorCisjOiBjb2xvci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICJmZWxha3RpZ3QgZsOkcmd2w6RyZGU6ICUuKnMiCisKKyM6IGNvbW1pdC5jOjUxIHNlcXVlbmNlci5jOjI4MTEgYnVpbHRpbi9hbS5jOjM1NCBidWlsdGluL2FtLmM6Mzk4CisjOiBidWlsdGluL2FtLmM6MTM2NiBidWlsdGluL2FtLmM6MjAwOSBidWlsdGluL3JlcGxhY2UuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthICVzIgorCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyDDpHIgaW50ZSBlbiBpbmNoZWNrbmluZyEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorIlN0w7ZkIGbDtnIgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGF2csOlZHMgZnLDpW4gb2NoXG4iCisia29tbWVyIHRhcyBib3J0IGkgZW4gZnJhbXRpZGEgdmVyc2lvbiBhdiBHaXQuXG4iCisiXG4iCisiQW52w6RuZCBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJmw7ZyIGF0dCBvbXZhbmRsYSBncmFmdHMgdGlsbCBlcnPDpHR0bmluZ3NyZWZlcmVuc2VyLlxuIgorIlxuIgorIlNsw6UgYXYgZGV0dGEgbWVkZGVsYW5kZSBnZW5vbSBhdHQgc2tyaXZhXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCisKKyM6IGNvbW1pdC5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorIkluY2hlY2tuaW5nZW4gJXMgaGFyIGVuIG9iZXRyb2RkIEdQRy1zaWduYXR1ciBzb20gcMOlc3TDpXMgdmFyYSBnam9yZCBhdiAlcy4iCisKKyM6IGNvbW1pdC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyJJbmNoZWNrbmluZ2VuICVzIGhhciBlbiBmZWxha3RpZyBHUEctc2lnbmF0dXIgc29tIHDDpXN0w6VzIHZhcmEgZ2pvcmQgYXYgJXMuIgorCisjOiBjb21taXQuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIkluY2hlY2tuaW5nICVzIGhhciBpbnRlIG7DpWdvbiBHUEctc2lnbmF0dXIuIgorCisjOiBjb21taXQuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiSW5jaGVja25pbmdlbiAlcyBoYXIgZW4ga29ycmVrdCBHUEctc2lnbmF0dXIgYXYgJXNcbiIKKworIzogY29tbWl0LmM6MTQxNQorbXNnaWQgIiIKKyJXYXJuaW5nOiBjb21taXQgbWVzc2FnZSBkaWQgbm90IGNvbmZvcm0gdG8gVVRGLTguXG4iCisiWW91IG1heSB3YW50IHRvIGFtZW5kIGl0IGFmdGVyIGZpeGluZyB0aGUgbWVzc2FnZSwgb3Igc2V0IHRoZSBjb25maWdcbiIKKyJ2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHRoZSBlbmNvZGluZyB5b3VyIHByb2plY3QgdXNlcy5cbiIKK21zZ3N0ciAiIgorIlZhcm5pbmc6IGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IMOkciBpbnRlIGtvcnJla3QgVVRGLTguXG4iCisiVXBwZGF0ZXJhIGRldCBlZnRlciBhdHQgaGEgcsOkdHRhdCBtZWRkZWxhbmRldCwgZWxsZXIgw6RuZHJhIHZhcmlhYmVsblxuIgorImkxOG4uY29tbWl0ZW5jb2RpbmcgdGlsbCBkZW4gdGVja2Vua29kbmluZyBzb20gYW52w6RuZHMgaSBkaXR0IHByb2pla3QuXG4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmZpbGVuICVzIMOkciBmw7ZyIGxpdGVuIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHNpZ25hdHVyZSAlWCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgJVgiCittc2dzdHIgImluY2hlY2tuaW5nc2dyYWZlbnMgc2lnbmF0dXIgJVggc3TDpG1tZXIgaW50ZSBtZWQgc2lnbmF0dXJlbiAlWCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgImluY2hlY2tuaW5nc2dyYWZlbnMgdmVyc2lvbiAlWCBzdMOkbW1lciBpbnRlIG1lZCB2ZXJzaW9uZW4gJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgImluY2hlY2tuaW5nc2dyYWZlbnMgaGFzaHZlcnNpb24gJVggc3TDpG1tZXIgaW50ZSBtZWQgdmVyc2lvbmVuICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMzIKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIiIKKyJpbmNoZWNrbmluZ3NncmFmZW4gc2FrbmFyIHBvc3QgaSBzdHlja2V1cHBzbGFnbmluZ3N0YWJlbGw7IGZpbGVuIGthbiB2YXJhICIKKyJvZnVsbHN0w6RuZGlnIgorCisjOiBjb21taXQtZ3JhcGguYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGltcHJvcGVyIGNodW5rIG9mZnNldCAlMDh4JTA4eCIKK21zZ3N0ciAiZmVsYWt0aWd0IG9mZnNldCBmw7ZyIHN0eWNrZSAlMDh4JTA4eCBpIGluY2hlY2tuaW5nc2dyYWZmaWxlbiIKKworIzogY29tbWl0LWdyYXBoLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgImluY2hlY2tuaW5nc2dyYWZlbnMgc3R5Y2tlLWlkICUwOHggZsO2cmVrb21tZXIgZmxlcmEgZ8OlbmdlciIKKworIzogY29tbWl0LWdyYXBoLmM6MzUwCittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBubyBiYXNlIGdyYXBocyBjaHVuayIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmVuIGhhciBpbmdhIGJhcy1ncmFmLXN0eWNrZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM2MAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaGFpbiBkb2VzIG5vdCBtYXRjaCIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmVucyBrZWRqYSBzdMOkbW1lciBpbnRlIgorCisjOiBjb21taXQtZ3JhcGguYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICJvZ2lsdGlnIGluY2hlY2tpbmdzZ3JhZmtlZGphOiByYWQgXCIlc1wiIMOkciBpbnRlIGV0dCBoYXNoLXbDpHJkZSIKKworIzogY29tbWl0LWdyYXBoLmM6NDMzCittc2dpZCAidW5hYmxlIHRvIGZpbmQgYWxsIGNvbW1pdC1ncmFwaCBmaWxlcyIKK21zZ3N0ciAia2FuIGludGUgaGl0dGEgYWxsYSBpbmNoZWNraW5nc2dyYWZmaWxlciIKKworIzogY29tbWl0LWdyYXBoLmM6NTY0IGNvbW1pdC1ncmFwaC5jOjYyNAorbXNnaWQgImludmFsaWQgY29tbWl0IHBvc2l0aW9uLiBjb21taXQtZ3JhcGggaXMgbGlrZWx5IGNvcnJ1cHQiCittc2dzdHIgIm9naWx0aWcgaW5jaGVja25pbmdzcG9zaXRpb24uIGluY2hlY2tuaW5nc2dyYWZlbiDDpHIgdHJvbGlndHZpcyB0cmFzaWciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgImt1bmRlIGludGUgaGl0dGEgaW5jaGVja25pbmdlbiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6ODU4IGJ1aWx0aW4vYW0uYzoxMjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgaW5jaGVja25pbmdlbiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBow6RtdGEgdHlwIGbDtnIgb2JqZWt0ZXQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNDkKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJMw6RzZXIgaW4ga8OkbmRhIGluY2hlY2tuaW5nYXIgaSBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDY2Cittc2dpZCAiRXhwYW5kaW5nIHJlYWNoYWJsZSBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiRXhwYW5kZXJhciBuw6ViYXJhIGluY2hlY2tuaW5nYXIgaSBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDg1Cittc2dpZCAiQ2xlYXJpbmcgY29tbWl0IG1hcmtzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiUmVuc2FyIGluY2hlY2tuaW5nc23DpHJrZW4gaSBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTA0Cittc2dpZCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiCittc2dzdHIgIkJlcsOka25hciBnZW5lcmF0aW9uc3bDpHJkZW4gZsO2ciBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICJTw7ZrZXIgaW5jaGVja25pbmdhciBmw7ZyIGluY2hlY2tpbmdzZ3JhZiBpICVkIHBha2V0IgorbXNnc3RyWzFdICJTw7ZrZXIgaW5jaGVja25pbmdhciBmw7ZyIGluY2hlY2tpbmdzZ3JhZiBpICVkIHBha2V0IgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGFkZGluZyBwYWNrICVzIgorbXNnc3RyICJmZWwgdmlkIHRpbGzDpGdnIGF2IHBha2V0ZXQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgImZlbCB2aWQgw7ZwcG5pbmcgYXYgaW5kZXhldCBmw7ZyICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gIlPDtmtlciBpbmNoZWNrbmluZ2FyIGbDtnIgaW5jaGVja2luZ3NncmFmIGZyw6VuICVkIHJlZmVyZW5zIgorbXNnc3RyWzFdICJTw7ZrZXIgaW5jaGVja25pbmdhciBmw7ZyIGluY2hlY2tpbmdzZ3JhZiBmcsOlbiAlZCByZWZlcmVuc2VyIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG9iamVjdCBpZDogJXMiCittc2dzdHIgIm9naWx0aWd0IGluY2hlY2tuaW5ncy1vYmpla3QtaWQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNTUKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiU8O2a2VyIGluY2hlY2tuaW5nYXIgZsO2ciBpbmNoZWNraW5nc2dyYWYgaSBwYWNrYWRlIG9iamVrdCIKKworIzogY29tbWl0LWdyYXBoLmM6MTI3MAorbXNnaWQgIkNvdW50aW5nIGRpc3RpbmN0IGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICJSw6RrbmFyIG9saWthIGluY2hlY2tuaW5nYXIgaSBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAwCittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIlPDtmtlciB5dHRlcmxpZ2FyZSBrYW50ZXIgaSBpbmNoZWNraW5nc2dyYWYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDYKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIGtvcnJla3QgYW50YWwgYmFzLWdyYWYtaWQ6biIKKworIzogY29tbWl0LWdyYXBoLmM6MTM3OSBtaWR4LmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBpbmxlZGFuZGUga2F0YWxvZ2VyIGbDtnIgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzOTEgYnVpbHRpbi9pbmRleC1wYWNrLmM6MzA2IGJ1aWx0aW4vcmVwYWNrLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBcIiVzXCIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3MiCittc2dpZF9wbHVyYWwgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzZXMiCittc2dzdHJbMF0gIlNrcml2ZXIgdXQgaW5jaGVja25pbmdzZ3JhZiBpICVkIHBhc3MiCittc2dzdHJbMV0gIlNrcml2ZXIgdXQgaW5jaGVja25pbmdzZ3JhZiBpICVkIHBhc3MiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE0OTIKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBjb21taXQtZ3JhcGggY2hhaW4gZmlsZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgaW5jaGVja25pbmdzZ3JhZmtlZGplZmlsZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MDQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgYnl0YSBuYW1uIHDDpSBiYXMtaW5jaGVja2luZ3NncmFmZmlsZW4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MjQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBieXRhIG5hbW4gcMOlIHRlbXBvcsOkciBpbmNoZWNrbmluZ3NncmFmZmlsIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjM1Cittc2dpZCAiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiCittc2dzdHIgIlPDtmtlciBzYW1tYW5zbGFnbmEgaW5jaGVja25pbmdhciIKKworIzogY29tbWl0LWdyYXBoLmM6MTY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGR1cGxpY2F0ZSBjb21taXQgaWQgJXMiCittc2dzdHIgIm92w6RudGF0IGR1cGxpY2VyYXQgaW5jaGVja25pbmdzLWlkICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjcwCittc2dpZCAiTWVyZ2luZyBjb21taXQtZ3JhcGgiCittc2dzdHIgIlNsw6VyIGlob3AgaW5jaGVja25pbmdzZ3JhZiIKKworIzogY29tbWl0LWdyYXBoLmM6MTg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIKK21zZ3N0ciAiZm9ybWF0ZXQgcMOlIGluY2hlY2tuaW5nc2dyYWZlbiBrYW4gaW50ZSB2aXNhICVkIGluY2hlY2tuaW5nYXIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NzEKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIHRvIHdyaXRlIGdyYXBoIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBpbmNoZWNrbmluZ2FyIGbDtnIgYXR0IHNrcml2YSBncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYxCittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisiZmlsZW4gbWVkIGluY2hlY2tuaW5nc2dyYWYgaGFyIGZlbGFrdGlnIGNoZWNrc3VtbWEgb2NoIMOkciB0cm9saWd0dmlzIHRyYXNpZyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzIGluY29ycmVjdCBPSUQgb3JkZXI6ICVzIHRoZW4gJXMiCittc2dzdHIgImluY2hlY2tuaW5nc2dyYWZlbiBoYXIgZmVsYWt0aWcgT0lELW9yZG5pbmc6ICVzIHPDpSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4MSBjb21taXQtZ3JhcGguYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICIiCisiaW5jaGVja25pbmdzZ3JhZmVuIGhhciBmZWxha3RpZyB1dGJyZWRuaW5nc3bDpHJkZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBjb21taXQtZ3JhcGgiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgaW5jaGVja25pbmcgJXMgZnLDpW4gaW5jaGVja25pbmdzZ3JhZiIKKworIzogY29tbWl0LWdyYXBoLmM6MjAwNgorbXNnaWQgIlZlcmlmeWluZyBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAiQmVrcsOkZnRhciBpbmNoZWNrbmluZ2FyIGkgaW5jaGVja25pbmdzZ3JhZmVuIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBvYmplY3QgZGF0YWJhc2UgZm9yIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorIm1pc3NseWNrYWRlcyB0b2xrYSBpbmNoZWNrbmluZyAlcyBmcsOlbiBvYmpla3RkYXRhYmFzZW4gZsO2ciBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgdHJlZSBPSUQgZm9yIGNvbW1pdCAlcyBpbiBjb21taXQtZ3JhcGggaXMgJXMgIT0gJXMiCittc2dzdHIgInJvdC10csOkZGV0cyBPSUQgZsO2ciBpbmNoZWNrbmluZ2VuICVzIGkgaW5jaGVja25pbmdzZ3JhZmVuIMOkciAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyBpcyB0b28gbG9uZyIKK21zZ3N0ciAiaW5jaGVja25pbmdzZ3JhZmVucyBmw7Zyw6RsZHJhbGlzdGEgZsO2ciBpbmNoZWNrbmluZ2VuICVzIMOkciBmw7ZyIGzDpW5nIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICJpbmNoZWNrbmluZ3NncmFmZW5zIGbDtnLDpGxkZXIgZsO2ciAlcyDDpHIgJXMgIT0gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgdGVybWluYXRlcyBlYXJseSIKK21zZ3N0ciAiIgorImluY2hlY2tuaW5nc2dyYWZlbnMgZsO2csOkbGRyYWxpc3RhIGbDtnIgaW5jaGVja25pbmdlbiAlcyBhdnNsdXRhcyBmw7ZyIHRpZGlndCIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBnZW5lcmF0aW9uIG51bWJlciB6ZXJvIGZvciBjb21taXQgJXMsIGJ1dCBub24temVybyBlbHNld2hlcmUiCittc2dzdHIgIiIKKyJpbmNoZWNrbmluZ3NncmFmZW4gaGFyIGdlbmVyYXRpb25zbnVtbWVyIG5vbGwgZsO2ciBpbmNoZWNrbmluZ2VuICVzLCBtZW4gaWNrZS0iCisibm9sbCBww6UgYW5uYW4gcGxhdHMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisiaW5jaGVja25pbmdzZ3JhZmVuIGhhciBnZW5lcmF0aW9uc251bW1lciBza2lsdCBmcsOlbiBub2xsIGbDtnIgaW5jaGVja25pbmdlbiAiCisiJXMsIG1lbiBub2xsIHDDpSBhbm5hbiBwbGF0cyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICJpbmNoZWNrbmluZ3NncmFmZW5zIGdlbmVyYXRpb24gZsO2ciBpbmNoZWNrbmluZ2VuICVzIMOkciAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgZGF0ZSBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCittc2dzdHIgIiIKKyJpbmNoZWNrbmluZ3NkYXR1bWV0IGbDtnIgaW5jaGVja25pbmdlbiAlcyBpIGluY2hlY2tuaW5nc2dyYWZlbiDDpHIgJTxQUkl1TUFYPiAhIgorIj0gJTxQUkl1TUFYPiIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtaW5uZXQgc2x1dCIKKworIzogY29uZmlnLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyJcdCVzXG4iCisiZnJvbVxuIgorIlx0JXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iCittc2dzdHIgIiIKKyLDtnZlcnNrcmVkIG1heGltYWx0IGlua2x1ZGVyaW5nc2RqdXAgKCVkKSBuw6RyXG4iCisiXHQlc1xuIgorImlua2x1ZGVyYWRlcyBmcsOlblxuIgorIlx0JXNcbiIKKyJEZXQga2FuIGJlcm8gcMOlIGNpcmt1bMOkcmEgaW5rbHVkZXJpbmdhci4iCisKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGV4cGFuZGVyYSBpbmtsdWRlcmluZ3Nzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGNvbmZpZy5jOjE1MQorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAicmVsYXRpdmEga29uZmlndXJlcmluZ3NpbmtsdWRlcmluZ2FyIG3DpXN0ZSBrb21tYSBmcsOlbiBmaWxlciIKKworIzogY29uZmlnLmM6MTk3Cittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGUgY29uZGl0aW9uYWxzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJyZWxhdGl2YSBrb25maWd1cmVyaW5nc2lua2x1ZGVyaW5nc3ZpbGxrb3IgbcOlc3RlIGtvbW1hIGZyw6VuIGZpbGVyIgorCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAibnlja2VsbiBpbm5laMOlbGxlciBpbnRlIGV0dCBzdHlja2U6ICVzIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgIm55Y2tlbG4gaW5uZWjDpWxsZXIgaW50ZSB2YXJpYWJlbG5hbW46ICVzIgorCisjOiBjb25maWcuYzo0MDYgc2VxdWVuY2VyLmM6MjUzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleTogJXMiCittc2dzdHIgImZlbGFrdGlnIG55Y2tlbDogJXMiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICJvZ2lsdGlnIG55Y2tlbCAobnlyYWRzdGVja2VuKTogJXMiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgImZhbHNrIGtvbmZpZ3VyZXJpbmdzcGFyYW1ldGVyOiAlcyIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IGZvcm1hdCBpICVzIgorCisjOiBjb25maWcuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGJsb2IgJXMiCittc2dzdHIgImZlbGFrdGlnIGtvbmZpZ3VyYXRpb25zZmlsIHJhZCAlZCBpIGJsb2I6ZW4gJXMiCisKKyM6IGNvbmZpZy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAiZmVsYWt0aWcga29uZmlndXJhdGlvbnNmaWwgcmFkICVkIGkgZmlsZW4gJXMiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImZlbGFrdGlnIGtvbmZpZ3VyYXRpb25zZmlsIHJhZCAlZCBpIHN0YW5kYXJkIGluIgorCisjOiBjb25maWcuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICJmZWxha3RpZyBrb25maWd1cmF0aW9uc2ZpbCByYWQgJWQgaSB1bmRlcm1vZHVscy1ibG9iOmVuICVzIgorCisjOiBjb25maWcuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGNvbW1hbmQgbGluZSAlcyIKK21zZ3N0ciAiZmVsYWt0aWcga29uZmlndXJhdGlvbnNmaWwgcmFkICVkIGkga29tbWFuZG9yYWRlbiAlcyIKKworIzogY29uZmlnLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcga29uZmlndXJhdGlvbnNmaWwgcmFkICVkIGkgJXMiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAidXRhbmbDtnIgaW50ZXJ2YWxsZXQiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgImludmFsaWQgdW5pdCIKK21zZ3N0ciAib2dpbHRpZyBlbmhldCIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCI6ICVzIgorCisjOiBjb25maWcuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgIiIKKyJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIiBpIGJsb2I6ZW4gJXM6ICVzIgorCisjOiBjb25maWcuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCIgaSBmaWxlbiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6ICVzIgorbXNnc3RyICIiCisiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCIgaSBzdGFuZGFyZCBpbjogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICIiCisiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCIgaSB1bmRlcm1vZHVsLWJsb2I6IgorImVuICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6ICVzIgorbXNnc3RyICIiCisiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCIgaSBrb21tYW5kb3JhZGVuICIKKyIlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICJmZWxha3RpZ3QgbnVtZXJpc2t0IGtvbmZpZ3VyYXRpb25zdsOkcmRlIFwiJXNcIiBmw7ZyIFwiJXNcIiBpICVzOiAlcyIKKworIzogY29uZmlnLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgZXhwYW5kZXJhIGFudsOkbmRhcmthdGFsb2cgaTogXCIlc1wiIgorCisjOiBjb25maWcuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJcIiVzXCIgZsO2ciBcIiVzXCIgw6RyIGludGUgZW4gZ2lsdGlnIHRpZHNzdMOkbXBlbCIKKworIzogY29uZmlnLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiCittc2dzdHIgImbDtnJrb3J0bmluZ3Nsw6RuZ2QgdXRhbmbDtnIgaW50ZXJ2YWxsZXQ6ICVkIgorCisjOiBjb25maWcuYzoxMjIyIGNvbmZpZy5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgImZlbGFrdGlndCB6bGliLWtvbXByaW1lcmluZ3NncmFkICVkIgorCisjOiBjb25maWcuYzoxMzI1Cittc2dpZCAiY29yZS5jb21tZW50Q2hhciBzaG91bGQgb25seSBiZSBvbmUgY2hhcmFjdGVyIgorbXNnc3RyICJjb3JlLmNvbW1lbnRDaGFyIGthbiBiYXJhIHZhcmEgZXR0IHRlY2tlbiIKKworIzogY29uZmlnLmM6MTM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgImZlbGFrdGlndCBsw6RnZSBmw7ZyIHNrYXBhbmRlIGF2IG9iamVrdDogJXMiCisKKyM6IGNvbmZpZy5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAiZmVsZm9ybWF0IHbDpHJkZSBmw7ZyICVzIgorCisjOiBjb25maWcuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJmZWxmb3JtYXQgdsOkcmRlIGbDtnIgJXM6ICVzIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAibcOlc3RlIHZhcmEgZW4gYXYgbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gZWxsZXIgY3VycmVudCIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgImZlbGFrdGlnIHBha2V0a29tcHJpbWVyaW5nc2dyYWQgJWQiCisKKyM6IGNvbmZpZy5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Ega29uZmlndXJlcmluZ3MtYmxvYm9iamVrdGV0IFwiJXNcIiIKKworIzogY29uZmlnLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGJsb2IiCittc2dzdHIgInJlZmVyZW5zZW4gXCIlc1wiIHBla2FyIGludGUgcMOlIGVuIGJsb2IiCisKKyM6IGNvbmZpZy5jOjE2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgY29uZmlnIGJsb2IgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgc2zDpSB1cHAga29uZmlndXJlcmluZ3MtYmxvYmVuIFwiJXNcIiIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgJXMiCisKKyM6IGNvbmZpZy5jOjE3NDUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAia2FuIGludGUgdG9sa2Ega29tbWFuZG9yYWRza29uZmlndXJhdGlvbiIKKworIzogY29uZmlnLmM6MjA5NgorbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAib2vDpG50IGZlbCB1cHBzdG9kIHZpZCBsw6RzbmluZyBhdiBrb25maWd1cmF0aW9uc2ZpbGVybmEiCisKKyM6IGNvbmZpZy5jOjIyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiRmVsYWt0aWd0ICVzOiBcIiVzXCIiCisKKyM6IGNvbmZpZy5jOjIzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICJ2w6RyZGV0IFwiJWRcIiBmw7ZyIHNwbGl0SW5kZXgubWF4UGVyY2VudGFnZSBib3JkZSB2YXJhIG1lbGxhbiAwIG9jaCAxMDAiCisKKyM6IGNvbmZpZy5jOjIzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIHbDpHJkZXQgXCIlc1wiIGZyw6VuIGtvbW1hbmRvcmFkc2tvbmZpZ3VyYXRpb24iCisKKyM6IGNvbmZpZy5jOjIzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICJmZWxha3RpZyBrb25maWd1cmF0aW9uc3ZhcmlhYmVsIFwiJXNcIiBpIGZpbGVuIFwiJXNcIiBww6UgcmFkICVkIgorCisjOiBjb25maWcuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lICclcyciCittc2dzdHIgImZlbGFrdGlndCBzZWt0aW9uc25hbW4gXCIlc1wiIgorCisjOiBjb25maWcuYzoyNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIGhhciBmbGVyYSB2w6RyZGVuIgorCisjOiBjb25maWcuYzoyNTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJrYW4gaW50ZSBza3JpdmEgbnlhIGtvbmZpZ3VyYXRpb25zZmlsZW4gXCIlc1wiIgorCisjOiBjb25maWcuYzoyNzUzIGNvbmZpZy5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOlc2Ega29uZmlndXJhdGlvbnNmaWxlbiAlcyIKKworIzogY29uZmlnLmM6Mjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICLDtnBwbmFyICVzIgorCisjOiBjb25maWcuYzoyNzk5IGJ1aWx0aW4vY29uZmlnLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0dGVybjogJXMiCittc2dzdHIgIm9naWx0aWd0IG3Dtm5zdGVyOiAlcyIKKworIzogY29uZmlnLmM6MjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJvZ2lsdGlnIGtvbmZpZ3VyYXRpb25zZmlsOiBcIiVzXCIiCisKKyM6IGNvbmZpZy5jOjI4MzcgY29uZmlnLmM6MzA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmc3RhdCBvbiAlcyBmYWlsZWQiCittc2dzdHIgImZzdGF0IG1pc3NseWNrYWRlcyBww6UgJXMiCisKKyM6IGNvbmZpZy5jOjI4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB1dGbDtnJhIG1tYXAgcMOlIFwiJXNcIiIKKworIzogY29uZmlnLmM6Mjg1NyBjb25maWcuYzozMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAiY2htb2QgbWlzc2x5Y2thZGVzIHDDpSAlcyIKKworIzogY29uZmlnLmM6Mjk0MiBjb25maWcuYzozMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEga29uZmlndXJhdGlvbnNmaWxlbiAlcyIKKworIzogY29uZmlnLmM6Mjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbGxhIGluIFwiJXNcIiB0aWxsIFwiJXNcIiIKKworIzogY29uZmlnLmM6Mjk3OCBidWlsdGluL3JlbW90ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0YSBib3J0IGluc3TDpGxsbmluZyBmw7ZyIFwiJXNcIiIKKworIzogY29uZmlnLmM6MzA2OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlY3Rpb24gbmFtZTogJXMiCittc2dzdHIgImZlbGFrdGlndCBuYW1uIHDDpSBzdHlja2U6ICVzIgorCisjOiBjb25maWcuYzozMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgdmFsdWUgZm9yICclcyciCittc2dzdHIgInbDpHJkZSBzYWtuYXMgZsO2ciBcIiVzXCIiCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgImZqw6RycmVuIGxhZGUgcMOlIHZpZCBpbmxlZGFuZGUga29udGFrdCIKKworIzogY29ubmVjdC5jOjYzCittc2dpZCAiIgorIkNvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuXG4iCisiXG4iCisiUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBhY2Nlc3MgcmlnaHRzXG4iCisiYW5kIHRoZSByZXBvc2l0b3J5IGV4aXN0cy4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIGzDpHNhIGZyw6VuIGZqw6RycmFya2l2LlxuIgorIlxuIgorIlNlIHRpbGwgYXR0IGR1IGhhciBrb3JyZWt0IMOldGtvbXN0YmVow7ZyaWdoZXRcbiIKKyJvY2ggYXR0IGFya2l2ZXQgZXhpc3RlcmFyLiIKKworIzogY29ubmVjdC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgJyVzJyIKK21zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIGludGUgXCIlc1wiIgorCisjOiBjb25uZWN0LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgZmVhdHVyZSAnJXMnIgorbXNnc3RyICJzZXJ2ZXJuIHN0w7ZkZXIgaW50ZSBmdW5rdGlvbmVuIFwiJXNcIiIKKworIzogY29ubmVjdC5jOjExNAorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiZsO2cnbDpG50YWRlIFwiZmx1c2hcIiBlZnRlciBmw7ZybcOlZ29yIgorCisjOiBjb25uZWN0LmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGNhcGFiaWxpdGllcyBhZnRlciBmaXJzdCBsaW5lICclcyciCittc2dzdHIgImlnbm9yZXJhciBmw7ZybcOlZ29yIGVmdGVyIGbDtnJzdGEgcmFkZW4gXCIlc1wiIgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICJwcm90b2tvbGxmZWw6IGbDtnJ2w6RudGFkZSBpbnRlIGNhcGFiaWxpdGllc157fSIKKworIzogY29ubmVjdC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhbGxvdyBzaGEtMSwgZ290ICclcyciCittc2dzdHIgInByb3Rva29sbGZlbDogZsO2cnbDpG50YWRlIFwic2hhbGxvdyBzaGEtMVwiIGZpY2sgXCIlc1wiIgorCisjOiBjb25uZWN0LmM6Mjc1Cittc2dpZCAicmVwb3NpdG9yeSBvbiB0aGUgb3RoZXIgZW5kIGNhbm5vdCBiZSBzaGFsbG93IgorbXNnc3RyICJhcmtpdmV0IHDDpSBhbmRyYSBzaWRhbiBrYW4gaW50ZSB2YXJhIGdydW50IgorCisjOiBjb25uZWN0LmM6MzEzCittc2dpZCAiaW52YWxpZCBwYWNrZXQiCittc2dzdHIgIm9naWx0aWd0IHBha2V0IgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgInByb3Rva29sbGZlbDogZsO2cnbDpG50YWRlIGludGUgXCIlc1wiIgorCisjOiBjb25uZWN0LmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbHMtcmVmcyByZXNwb25zZTogJXMiCittc2dzdHIgIm9naWx0aWd0IHN2YXIgcMOlIGxzLXJlZnM6ICVzIgorCisjOiBjb25uZWN0LmM6NDQ1Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgcmVmIGxpc3RpbmciCittc2dzdHIgIm92w6RudGFkIFwiZmx1c2hcIiBlZnRlciByZWYtbGlzdGFuIgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAicHJvdG9rb2xsZXQgXCIlc1wiIHN0w7ZkcyBpbnRlIgorCisjOiBjb25uZWN0LmM6NTk1Cittc2dpZCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0IgorbXNnc3RyICJrdW5kZSBpbnRlIHPDpHR0YSBTT19LRUVQQUxJVkUgcMOlIHV0dGFnZXQiCisKKyM6IGNvbm5lY3QuYzo2MzUgY29ubmVjdC5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29raW5nIHVwICVzIC4uLiAiCittc2dzdHIgIlNsw6VyIHVwcCAlcy4uLiIKKworIzogY29ubmVjdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAocG9ydCAlcykgKCVzKSIKK21zZ3N0ciAia2FuIGludGUgc2zDpSB1cHAgJXMgKHBvcnQgJXMpICglcykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkxvb2tpbmcgdXAgJXMgLi4uICIKKyM6IGNvbm5lY3QuYzo2NDMgY29ubmVjdC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZS5cbiIKKyJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorbXNnc3RyICIiCisia2xhcnQuXG4iCisiQW5zbHV0ZXIgdGlsbCAlcyAocG9ydCAlcykuLi4iCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJGZWwgdmlkIGjDpG10bmluZyBhdiB2ZXJzaW9uZXI6XG4iCisia3VuZGUgaW50ZSBhbnNsdXRhIHRpbGwgJXM6XG4iCiAiJXMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM1MAotIywgdGNsLWZvcm1hdAorIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKKyM6IGNvbm5lY3QuYzo2NzEgY29ubmVjdC5jOjc0OAorbXNnaWQgImRvbmUuIgorbXNnc3RyICJrbGFydC4iCisKKyM6IGNvbm5lY3QuYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIKK21zZ3N0ciAia3VuZGUgaW50ZSBzbMOlIHVwcCAlcyAoJXMpIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAib2vDpG5kIHBvcnQgJXMiCisKKyM6IGNvbm5lY3QuYzo4NDUgY29ubmVjdC5jOjExNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBob3N0bmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgImtvbnN0aWd0IHbDpHJkbmFtbiBcIiVzXCIgYmxvY2tlcmF0IgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgImtvbnN0aWcgcG9ydCBcIiVzXCIgYmxvY2tlcmFkIgorCisjOiBjb25uZWN0LmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGFydCBwcm94eSAlcyIKK21zZ3N0ciAia2FuIGludGUgc3RhcnRhIG1lbGxhbnNlcnZlciAocHJveHkpICVzIgorCisjOiBjb25uZWN0LmM6OTI4Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQ7IHNlZSAnZ2l0IGhlbHAgcHVsbCcgZm9yIHZhbGlkIHVybCBzeW50YXgiCittc2dzdHIgImluZ2VuIHPDtmt2w6RnIGFuZ2F2czsgc2UgXCJnaXQgaGVscCBwdWxsXCIgZsO2ciBnaWx0aWcgVVJMLXN5bnRheCIKKworIzogY29ubmVjdC5jOjExMjMKK21zZ2lkICJzc2ggdmFyaWFudCAnc2ltcGxlJyBkb2VzIG5vdCBzdXBwb3J0IC00IgorbXNnc3RyICJzc2gtdmFyaWFudGVuIFwic2ltcGxlXCIgc3TDtmRlciBpbnRlIC00IgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgInNzaC12YXJpYW50ZW4gXCJzaW1wbGVcIiBzdMO2ZGVyIGludGUgLTYiCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgInNzaC12YXJpYW50ZW4gXCJzaW1wbGVcIiBzdMO2ZGVyIGludGUgdmFsIGF2IHBvcnQiCisKKyM6IGNvbm5lY3QuYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcGF0aG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICJrb25zdGlndCBzw7ZrdsOkZ3NuYW1uIFwiJXNcIiBibG9ja2VyYXQiCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgImt1bmRlIGludGUgZ3JlbmEgKGZvcmspIgorCisjIFZhZ3VlIG9yaWdpbmFsLCBub3QgbmV0d29ya2luZy1yZWxhdGVkLCBidXQgcmF0aGVyIHJlbGF0ZWQgdG8gdGhlIGFjdHVhbAorIyBvYmplY3RzIGluIHRoZSBkYXRhYmFzZS4KKyM6IGNvbm5lY3RlZC5jOjg5IGJ1aWx0aW4vZnNjay5jOjIwOCBidWlsdGluL3BydW5lLmM6NDMKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIktvbnRyb2xsZXJhciBrb25uZWt0aXZpdGV0IgorCisjOiBjb25uZWN0ZWQuYzoxMDEKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJLdW5kZSBpbnRlIGvDtnJhIFwiZ2l0IHJldi1saXN0XCIiCisKKyM6IGNvbm5lY3RlZC5jOjEyMQorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgdGlsbCByZXYtbGlzdCIKKworIzogY29ubmVjdGVkLmM6MTI4Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgImt1bmRlIGludGUgc3TDpG5nYSByZXYtbGlzdDpzIHN0YW5kYXJkIGluIgorCisjOiBjb252ZXJ0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgY3JsZl9hY3Rpb24gJWQiCittc2dzdHIgImZlbGFrdGlnIGNybGZfYWN0aW9uICVkIgorCisjOiBjb252ZXJ0LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgIkNSTEYgc2t1bGxlIGVyc8OkdHRhcyBhdiBMRiBpICVzIgorCisjOiBjb252ZXJ0LmM6MjA5CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCi0iXG4iCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJDUkxGIGtvbW1lciBhdHQgZXJzw6R0dGFzIGF2IExGIGkgJXMuXG4iCisiRmlsZW4ga29tbWVyIGF0dCBoYSBzaW5hIHVyc3BydW5nbGlnYSByYWRicnl0bmluZ2FyIGkgZGluIGFyYmV0c2thdGFsb2ciCisKKyM6IGNvbnZlcnQuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAiTEYgc2t1bGxlIGVyc8OkdHRhcyBhdiBDUkxGIGkgJXMiCisKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiTEYga29tbWVyIGF0dCBlcnPDpHR0YXMgYXYgQ1JMRiBpICVzLlxuIgorIkZpbGVuIGtvbW1lciBhdHQgaGEgc2luYSB1cnNwcnVuZ2xpZ2EgcmFkYnJ5dG5pbmdhciBpIGRpbiBhcmJldHNrYXRhbG9nIgorCisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiQk9NIMOkciBmw7ZyYmp1ZGV0IGkgXCIlc1wiIG9tIGtvZGF0IHNvbSAlcyIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIkZpbGVuIFwiJXNcIiBpbm5laMOlbGxlciBieXRlIG9yZGVyIG1hcmsgKEJPTSkuIEFudsOkbmQgVVRGLSUuKnMgc29tICIKKyJ0ZWNrZW5rb2RuaW5nIGkgYXJiZXRza2F0YWxvZ2VuLiIKKworIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00ga3LDpHZzIG9tIFwiJXNcIiBrb2RhcyBzb20gJXMiCisKKyM6IGNvbnZlcnQuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICclcycgaXMgbWlzc2luZyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXNCRSBvciBVVEYtIgorIiVzTEUgKGRlcGVuZGluZyBvbiB0aGUgYnl0ZSBvcmRlcikgYXMgd29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIkZpbGVuIFwiJXNcIiBzYWtuYXIgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBBbnbDpG5kIFVURi0lc0JFIGVsbGVyIFVURi0lc0xFICIKKyIoYmVyb2VuZGUgcMOlIGJ5dGVvcmRuaW5nKSBzb20gdGVja2Vua29kbmluZyBpIGFyYmV0c2thdGFsb2dlbi4iCisKKyM6IGNvbnZlcnQuYzo0MTkgY29udmVydC5jOjQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZW5jb2RlICclcycgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIG9ta29kYSBcIiVzXCIgZnLDpW4gJXMgdGlsbCAlcyIKKworIzogY29udmVydC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICIiCisib21rb2RuaW5nIGF2IFwiJXNcIiBmcsOlbiAlcyB0aWxsICVzIG9jaCB0aWxsYmFrYSBnZXIgaW50ZSBzYW1tYSByZXN1bHRhdCIKKworIzogY29udmVydC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayB0byBydW4gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgImthbiBpbnRlIGdyZW5hIChmb3JrKSBmw7ZyIGF0dCBrw7ZyYSBleHRlcm50IGZpbHRlciBcIiVzXCIiCisKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNraWNrYSBpbmRhdGEgdGlsbCBleHRlcm50IGZpbHRlciBcIiVzXCIiCisKKyM6IGNvbnZlcnQuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkICVkIgorbXNnc3RyICJleHRlcm50IGZpbHRlciBcIiVzXCIgbWlzc2x5Y2thZGVzICVkIgorCisjOiBjb252ZXJ0LmM6NzMwIGNvbnZlcnQuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibMOkc25pbmcgZnLDpW4gZXh0ZXJudCBmaWx0ZXIgXCIlc1wiIG1pc3NseWNrYWRlcyIKKworIzogY29udmVydC5jOjczNiBjb252ZXJ0LmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZXh0ZXJudCBmaWx0ZXIgXCIlc1wiIG1pc3NseWNrYWRlcyIKKworIzogY29udmVydC5jOjgzOQorbXNnaWQgInVuZXhwZWN0ZWQgZmlsdGVyIHR5cGUiCittc2dzdHIgIm92w6RudGFkIGZpbHRlcnR5cCIKKworIzogY29udmVydC5jOjg1MAorbXNnaWQgInBhdGggbmFtZSB0b28gbG9uZyBmb3IgZXh0ZXJuYWwgZmlsdGVyIgorbXNnc3RyICJzw7ZrdsOkZ2VuIGbDtnIgbMOlbmcgZsO2ciBleHRlcm50IGZpbHRlciIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAiIgorImV4dGVybnQgZmlsdGVyIFwiJXNcIiDDpHIgaW50ZSBsw6RuZ3JlIHRpbGxnw6RuZ2xpZ3QgdHJvdHMgYXR0IGFsbGEgc8O2a3bDpGdhciAiCisiaW50ZSBoYXIgZmlsdHJlcmF0cyIKKworIzogY29udmVydC5jOjEyMjMKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICJ0cnVlL2ZhbHNlIMOkciBpbnRlIGdpbHRpZyB0ZWNrZW5rb2RuaW5nIGbDtnIgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBjb252ZXJ0LmM6MTQxMSBjb252ZXJ0LmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4gZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICIlczogXCJjbGVhblwiLWZpbHRyZXQgXCIlc1wiIG1pc3NseWNrYWRlcyIKKworIzogY29udmVydC5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIlczogXCJzbXVkZ2VcIi1maWx0cmV0IFwiJXNcIiBtaXNzbHlja2FkZXMiCisKKyM6IGRhdGUuYzoxMzgKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJpIGZyYW10aWRlbiIKKworIzogZGF0ZS5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gc2VrdW5kIHNlZGFuIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IHNla3VuZGVyIHNlZGFuIgorCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBtaW51dCBzZWRhbiIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBtaW51dGVyIHNlZGFuIgorCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IHRpbW1lIHNlZGFuIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IHRpbW1hciBzZWRhbiIKKworIzogZGF0ZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gZGF5cyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gZGFnIHNlZGFuIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IGRhZ2FyIHNlZGFuIgorCisjOiBkYXRlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gd2Vla3MgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IHZlY2thIHNlZGFuIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IHZlY2tvciBzZWRhbiIKKworIzogZGF0ZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IG3DpW5hZCBzZWRhbiIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiBtw6VuYWRlciBzZWRhbiIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gw6VyIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IMOlciIKKworIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlcywgJTxQUkl1TUFYPiBtw6VuYWQgc2VkYW4iCittc2dzdHJbMV0gIiVzLCAlPFBSSXVNQVg+IG3DpW5hZGVyIHNlZGFuIgorCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gw6VyIHNlZGFuIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IMOlciBzZWRhbiIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAiU3ByaWRlciDDti1tYXJrZXJpbmdhciIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdHJlZSBvYmplY3QgJXMiCittc2dzdHIgImZlbGFrdGlndCB0csOkZG9iamVrdGV0ICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgImt1bmRlIGludGUgaMOkbXRhIMO2LXJlZ2V4IGbDtnIgXCIlc1wiOiAlcyIKKworIzogZGVsdGEtaXNsYW5kcy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpc2xhbmQgcmVnZXggZnJvbSBjb25maWcgaGFzIHRvbyBtYW55IGNhcHR1cmUgZ3JvdXBzIChtYXg9JWQpIgorbXNnc3RyICLDti1yZWdleCBmcsOlbiBrb25maWd1cmF0aW9uIGhhciBmw7ZyIG3DpW5nYSBmw6VuZ3N0Z3J1cHBlciAobWF4PSVkKSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAiTWFya2VyYWRlICVkIMO2YXIsIGtsYXIuXG4iCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egb3JkZXJmaWxlbiBcIiVzXCIiCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjU0MworbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJVdGbDtnIgb27Dtmpha3RpZyBuYW1uYnl0ZXNkZXRla3RlcmluZyIKKworIzogZGlmZi1uby1pbmRleC5jOjIzOAorbXNnaWQgImdpdCBkaWZmIC0tbm8taW5kZXggWzxvcHRpb25zPl0gPHBhdGg+IDxwYXRoPiIKK21zZ3N0ciAiZ2l0IGRpZmYgLS1uby1pbmRleCBbPGZsYWdnb3I+XSA8c8O2a3bDpGc+IDxzw7ZrdsOkZz4iCisKKyM6IGRpZmYtbm8taW5kZXguYzoyNjMKK21zZ2lkICIiCisiTm90IGEgZ2l0IHJlcG9zaXRvcnkuIFVzZSAtLW5vLWluZGV4IHRvIGNvbXBhcmUgdHdvIHBhdGhzIG91dHNpZGUgYSB3b3JraW5nICIKKyJ0cmVlIgorbXNnc3RyICIiCisiSW50ZSBldHQgZ2l0LWFya2l2LiBBbnbDpG5kIC0tbm8taW5kZXggZsO2ciBhdHQgasOkbWbDtnJhIHR2w6Ugc8O2a3bDpGdhciB1dGFuZsO2ciAiCisiZW4gYXJiZXRza2F0YWxvZy4iCisKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIgIE1pc3NseWNrYWRlcyB0b2xrYSBkaXJzdGF0LWF2c2vDpHJuaW5nc3Byb2NlbnRhbmRlbCBcIiVzXCJcbiIKKworIzogZGlmZi5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIE9rw6RuZCBkaXJzdGF0LXBhcmFtZXRlciBcIiVzXCJcbiIKKworIzogZGlmZi5jOjI5NgorbXNnaWQgIiIKKyJjb2xvciBtb3ZlZCBzZXR0aW5nIG11c3QgYmUgb25lIG9mICdubycsICdkZWZhdWx0JywgJ2Jsb2NrcycsICd6ZWJyYScsICIKKyInZGltbWVkLXplYnJhJywgJ3BsYWluJyIKK21zZ3N0ciAiIgorImbDpHJnaW5zdMOkbGxuaW5nZW4gZsO2ciBmbHl0dGFkZSBibG9jayBtw6VzdGUgdmFyYSBlbiBhdiBcIm5vXCIsIFwiZGVmYXVsdFwiLCAiCisiXCJibG9ja3NcIiwgXCJ6ZWJyYVwiLCBcImRpbW1lZF96ZWJyYVwiLCBcInBsYWluXCIiCisKKyM6IGRpZmYuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnLCBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUtc3BhY2UtY2hhbmdlJywgIgorIidpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKK21zZ3N0ciAiIgorIm9rw6RudCBsw6RnZSBcIiVzXCIgZsO2ciBjb2xvci1tb3ZlZC13cywgbcO2amxpZ2EgdsOkcmRlbiDDpHIgXCJpZ25vcmUtc3BhY2UtY2hhbmdlIgorIlwiLCBcImlnbm9yZS1zcGFjZS1hdC1lb2xcIiwgXCJpZ25vcmUtYWxsLXNwYWNlXCIsIFwiYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIgorIlwiIgorCisjOiBkaWZmLmM6MzMyCittc2dpZCAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgIgorIndoaXRlc3BhY2UgbW9kZXMiCittc2dzdHIgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGthbiBpbnRlIGtvbWJpbmVyYXMgbWVkIGFuZHJhICIKKyJibGFua3N0ZWdzbMOkZ2VuIgorCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICJPa8OkbnQgdsOkcmRlIGbDtnIga29uZmlndXJhdGlvbnN2YXJpYWJlbG4gXCJkaWZmLnN1Ym1vZHVsZVwiOiBcIiVzXCIiCisKKyM6IGRpZmYuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCiAiJXMiCiBtc2dzdHIgIiIKLSJLdW5kZSBpbnRlIHN0YXJ0YSB2ZXJrdHlnIGbDtnIgc2FtbWFuc2xhZ25pbmc6XG4iCi0iXG4iCisiSGl0dGFkZSBmZWwgaSBrb25maWd1cmF0aW9uc3ZhcmlhYmVsbiBcImRpZmYuZGlyc3RhdFwiOlxuIgogIiVzIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNTQKLW1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCi1tc2dzdHIgIkvDtnIgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nLi4uIgorIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAiZXh0ZXJuIGRpZmYgZG9nLCBzdGFubmFyIHZpZCAlcyIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MzgyIGxpYi9tZXJnZXRvb2wudGNsOjM5MAotbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKLW1zZ3N0ciAiVmVya3R5Z2V0IGbDtnIgc2FtbWFuc2xhZ25pbmcgbWlzc2x5Y2thZGVzLiIKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtY2hlY2sgb2NoIC1zIMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKLW1zZ2lkICJBZGQgVG9vbCIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCB2ZXJrdHlnIgorIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLUcsIC1TIG9jaCAtLWZpbmQtb2JqZWN0IMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKLW1zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKLW1zZ3N0ciAiTMOkZ2cgdGlsbCBueXR0IHZlcmt0eWdza29tbWFuZG8iCisjOiBkaWZmLmM6NDYyOAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyBrcsOkdmVyIGV4YWt0IGVuIHPDtmt2w6Rnc2FuZ2l2ZWxzZSIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQKLW1zZ2lkICJBZGQgZ2xvYmFsbHkiCi1tc2dzdHIgIkzDpGdnIHRpbGwgZ2xvYmFsdCIKKyM6IGRpZmYuYzo0Njc2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1zdGF0IHZhbHVlOiAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgdsOkcmRlIGbDtnIgLS1zdGF0OiAlcyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6NDYKLW1zZ2lkICJUb29sIERldGFpbHMiCi1tc2dzdHIgIkRldGFsamVyIGbDtnIgdmVya3R5ZyIKKyM6IGRpZmYuYzo0NjgxIGRpZmYuYzo0Njg2IGRpZmYuYzo0NjkxIGRpZmYuYzo0Njk2IGRpZmYuYzo1MjA5CisjOiBwYXJzZS1vcHRpb25zLmM6MTk5IHBhcnNlLW9wdGlvbnMuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiJXMgZsO2cnbDpG50YXIgZXR0IG51bWVyaXNrdCB2w6RyZGUiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjQ5Ci1tc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCi1tc2dzdHIgIkFudsOkbmQgXCIvXCItYXZkZWxhcmUgZsO2ciBhdHQgc2thcGEgZXR0IHVuZGVybWVueXRyw6RkOiIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NjAKLW1zZ2lkICJDb21tYW5kOiIKLW1zZ3N0ciAiS29tbWFuZG86IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3MQotbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCi1tc2dzdHIgIlZpc2EgZGlhbG9nIGlubmFuIHByb2dyYW1tZXQgc3RhcnRhcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6NzcKLW1zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKLW1zZ3N0ciAiQmUgYW52w6RuZGFyZW4gdsOkbGphIGVuIHZlcnNpb24gKHPDpHR0ZXIgJFJFVklTSU9OKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6ODIKLW1zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKLW1zZ3N0ciAiQmUgYW52w6RuZGFyZW4gb20geXR0ZXJsaWdhcmUgcGFyYW1ldHJhciAoc8OkdHRlciAkQVJHUykiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjg5Ci1tc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgotbXNnc3RyICJWaXNhIGludGUga29tbWFuZG90cyB1dGRhdGFmw7Zuc3RlciIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6OTQKLW1zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgotbXNnc3RyICJLw7ZyIGVuZGFzdCBvbSBlbiBkaWZmIGhhciBtYXJrZXJhdHMgKCRGSUxFTkFNRSDDpHIgaW50ZSB0b210KSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTE4Ci1tc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKLW1zZ3N0ciAiQW5nZSBldHQgbmFtbiBmw7ZyIHZlcmt0eWdldC4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjEyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIlZlcmt0eWdldCBcIiVzXCIgZmlubnMgcmVkYW4uIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxNDgKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo0NzEzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgogIiVzIgogbXNnc3RyICIiCi0iS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCB2ZXJrdHlnZXQ6XG4iCisiTWlzc2x5Y2thZGVzIHRvbGthIGFyZ3VtZW50IHRpbGwgZmxhZ2dhbiAtLWRpcnN0YXQvLVg7XG4iCiAiJXMiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE4NwotbXNnaWQgIlJlbW92ZSBUb29sIgotbXNnc3RyICJUYSBib3J0IHZlcmt0eWciCisjOiBkaWZmLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNoYW5nZSBjbGFzcyAnJWMnIGluIC0tZGlmZi1maWx0ZXI9JXMiCittc2dzdHIgIm9rw6RuZCDDpG5kcmluZ3NrbGFzcyBcIiVjXCIgaSAtLWRpZmYtZmlsdGVyPSVzIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTMKLW1zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKLW1zZ3N0ciAiVGEgYm9ydCB2ZXJrdHlnc2tvbW1hbmRvbiIKKyM6IGRpZmYuYzo0ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgIm9rw6RudCB2w6RyZGUgZWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjE5OAotbXNnaWQgIlJlbW92ZSIKLW1zZ3N0ciAiVGEgYm9ydCIKKyM6IGRpZmYuYzo0ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2zDpSB1cHAgXCIlc1wiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKLW1zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgotbXNnc3RyICIoQmzDpXR0IGFuZ2VyIHZlcmt0eWcgbG9rYWxhIGbDtnIgYXJraXZldCkiCisjOiBkaWZmLmM6NDg4NiBkaWZmLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIDxuPi88bT4gZm9ybSIKK21zZ3N0ciAiJXMgZsO2cnbDpG50YXIgZm9ybWVuIDxuPi88bT4iCiAKLSM6IGxpYi90b29sc19kbGcudGNsOjI5MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKLW1zZ3N0ciAiS8O2ciBrb21tYW5kb3Q6ICVzIgorIzogZGlmZi5jOjQ5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIGNoYXJhY3RlciwgZ290ICclcyciCittc2dzdHIgIiVzIGbDtnJ2w6RudGFyIGV0dCB0ZWNrZW4sIGZpY2sgXCIlc1wiIgogCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKLW1zZ2lkICJBcmd1bWVudHMiCi1tc2dzdHIgIkFyZ3VtZW50IgorIzogZGlmZi5jOjQ5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0tY29sb3ItbW92ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYXJndW1lbnQgdGlsbCAtLWNvbG9yLW1vdmVkOiAlcyIKIAotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQxCi1tc2dpZCAiT0siCi1tc2dzdHIgIk9LIgorIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAib2dpbHRpZ3QgbMOkZ2UgJXNcIiBpIC0tY29sb3ItbW92ZWQtd3MiCiAKLSM6IGxpYi9zZWFyY2gudGNsOjQ4Ci1tc2dpZCAiRmluZDoiCi1tc2dzdHIgIlPDtms6IgotCi0jOiBsaWIvc2VhcmNoLnRjbDo1MAotbXNnaWQgIk5leHQiCi1tc2dzdHIgIk7DpHN0YSIKLQotIzogbGliL3NlYXJjaC50Y2w6NTEKLW1zZ2lkICJQcmV2IgotbXNnc3RyICJGw7ZyZWciCi0KLSM6IGxpYi9zZWFyY2gudGNsOjUyCi1tc2dpZCAiUmVnRXhwIgotbXNnc3RyICJSZWcudXR0ci4iCi0KLSM6IGxpYi9zZWFyY2gudGNsOjU0Ci1tc2dpZCAiQ2FzZSIKLW1zZ3N0ciAiU2tpZnRsw6RnZSIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMwotbXNnaWQgIlJlbmFtZSBCcmFuY2giCi1tc2dzdHIgIkJ5dCBuYW1uIHDDpSBncmVuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjgKLW1zZ2lkICJSZW5hbWUiCi1tc2dzdHIgIkJ5dCBuYW1uIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzgKLW1zZ2lkICJCcmFuY2g6IgotbXNnc3RyICJHcmVuOiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjQ2Ci1tc2dpZCAiTmV3IE5hbWU6IgotbXNnc3RyICJOeXR0IG5hbW46IgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODEKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCi1tc2dzdHIgIlbDpGxqIGVuIGdyZW4gYXR0IGJ5dGEgbmFtbiBww6UuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1NAotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciBncmVuZW4uIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKLW1zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBzb20gbmFtbiBww6UgZ3JlbmVuLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEyMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCi1tc2dzdHIgIkt1bmRlIGludGUgYnl0YSBuYW1uIHDDpSBcIiVzXCIuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKLW1zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgotbXNnc3RyICJUYSBib3J0IGdyZW4gZnLDpW4gZmrDpHJyYXJraXYiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDgKLW1zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCi1tc2dzdHIgIkZyw6VuIGFya2l2IgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg4Ci1tc2dpZCAiQnJhbmNoZXMiCi1tc2dzdHIgIkdyZW5hciIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTAKLW1zZ2lkICJEZWxldGUgT25seSBJZiIKLW1zZ3N0ciAiVGEgZW5kYXN0IGJvcnQgb20iCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEyCi1tc2dpZCAiTWVyZ2VkIEludG86IgotbXNnc3RyICJTYW1tYW5zbGFnZW4gaToiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTIwIGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MwotbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKLW1zZ3N0ciAiQWxsdGlkICh1dGbDtnIgaW50ZSBzYW1tYW5zbGFnbmluZ3N0ZXN0KSIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKLW1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCi1tc2dzdHIgIkVuIGdyZW4ga3LDpHZzIGbDtnIgXCJTYW1tYW5zbGFnZW4gaVwiLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo0OTg0CiBtc2dpZCAiIgotIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgotIlxuIgotIiAtICVzIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCiBtc2dzdHIgIiIKLSJGw7ZsamFuZGUgZ3JlbmFyIGhhciBpbnRlIGhlbHQgc2xhZ2l0cyBzYW1tYW4gaSAlczpcbiIKLSJcbiIKLSIgLSAlcyIKKyJmbGFnZ2FuIGRpZmYtYWxnb3JpdGhtIGdvZHRhclwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBvY2ggIgorIlwiaGlzdG9ncmFtXCIiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTkwCi0jLCB0Y2wtZm9ybWF0CisjOiBkaWZmLmM6NTAyMCBkaWZmLmM6NTA0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHRvICVzIgorbXNnc3RyICJvZ2lsdGlndCBhcmd1bWVudCBmw7ZyICVzIgorCisjOiBkaWZmLmM6NTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRvbGthIGFyZ3VtZW50IHRpbGwgZmxhZ2dhbiAtLXN1Ym1vZHVsZTogXCIlc1wiIgorCisjOiBkaWZmLmM6NTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYXJndW1lbnQgLS13b3JkLWRpZmY6ICVzIgorCisjOiBkaWZmLmM6NTI1NworbXNnaWQgIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIgorbXNnc3RyICJGb3JtYXRmbGFnZ29yIGbDtnIgZGlmZi11dGRhdGEiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgInNrYXBhciBwYXRjaCIKKworIzogZGlmZi5jOjUyNjIgYnVpbHRpbi9sb2cuYzoxNzMKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAidW5kZXJ0cnljayBkaWZmLXV0ZGF0YSIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICJza2FwYSBkaWZmYXIgbWVkIDxuPiByYWRlciBzYW1tYW5oYW5nIgorCisjOiBkaWZmLmM6NTI3MworbXNnaWQgImdlbmVyYXRlIHRoZSBkaWZmIGluIHJhdyBmb3JtYXQiCittc2dzdHIgImdlbmVyZXJhIGRpZmYgaSByw6Vmb3JtYXQiCisKKyM6IGRpZmYuYzo1Mjc2Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAic3lub255bSB0aWxsIFwiLXAgLS1yYXdcIiIKKworIzogZGlmZi5jOjUyODAKK21zZ2lkICJzeW5vbnltIGZvciAnLXAgLS1zdGF0JyIKK21zZ3N0ciAic3lub255bSB0aWxsIFwiLXAgLS1zdGF0XCIiCisKKyM6IGRpZmYuYzo1Mjg0Cittc2dpZCAibWFjaGluZSBmcmllbmRseSAtLXN0YXQiCittc2dzdHIgIm1hc2tpbmzDpHNiYXIgLS1zdGF0IgorCisjOiBkaWZmLmM6NTI4NworbXNnaWQgIm91dHB1dCBvbmx5IHRoZSBsYXN0IGxpbmUgb2YgLS1zdGF0IgorbXNnc3RyICJza3JpdiBiYXJhIHV0IGRlbiBzaXN0YSByYWRlbiBmw7ZyIC0tc3RhdCIKKworIzogZGlmZi5jOjUyODkgZGlmZi5jOjUyOTcKK21zZ2lkICI8cGFyYW0xLHBhcmFtMj4uLi4iCittc2dzdHIgIjxwYXJhbTEscGFyYW0yPi4uLiIKKworIzogZGlmZi5jOjUyOTAKIG1zZ2lkICIiCi0iT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCi0ibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCisib3V0cHV0IHRoZSBkaXN0cmlidXRpb24gb2YgcmVsYXRpdmUgYW1vdW50IG9mIGNoYW5nZXMgZm9yIGVhY2ggc3ViLWRpcmVjdG9yeSIKIG1zZ3N0ciAiIgotIkVuIGVsbGVyIGZsZXJhIGF2IHNhbW1hbnNsYWduaW5nc3Rlc3Rlcm5hIG1pc3NseWNrYWRlcyBlZnRlcnNvbSBkdSBpbnRlIGhhciAiCi0iaMOkbXRhdCBkZSBuw7ZkdsOkbmRpZ2EgaW5jaGVja25pbmdhcm5hLiBGw7Zyc8O2ayBow6RtdGEgZnLDpW4gJXMgZsO2cnN0LiIKKyJza3JpdiB1dCBkaXN0cmlidXRpb25lbiBhdiByZWxhdGl2YSBtw6RuZ2RlciDDpG5kcmluZ2FyIGbDtnIgdmFyamUgdW5kZXJrYXRhbG9nIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwOAotbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKLW1zZ3N0ciAiVsOkbGogZW4gZWxsZXIgZmxlcmEgZ3JlbmFyIGF0dCB0YSBib3J0LiIKKyM6IGRpZmYuYzo1Mjk0Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCittc2dzdHIgInN5bm9ueW0gZsO2ciAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSIKIAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTggbGliL2JyYW5jaF9kZWxldGUudGNsOjExNQorIzogZGlmZi5jOjUyOTgKK21zZ2lkICJzeW5vbnltIGZvciAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMi4uLiIKK21zZ3N0ciAic3lub255bSBmw7ZyIC0tZGlyc3RhdD1maWxlcixwYXJhbTEscGFyYW0yLi4uIgorCisjOiBkaWZmLmM6NTMwMgorbXNnaWQgIndhcm4gaWYgY2hhbmdlcyBpbnRyb2R1Y2UgY29uZmxpY3QgbWFya2VycyBvciB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAidmFybmEgb20gw6RuZHJpbmdhciBpbnRyb2R1Y2VyYXIga29uZmxpa3RtYXJrw7ZyZXIgZWxsZXIgYmxhbmtzdGVnc2ZlbCIKKworIzogZGlmZi5jOjUzMDUKK21zZ2lkICJjb25kZW5zZWQgc3VtbWFyeSBzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzIgorbXNnc3RyICJrb3J0ZmF0dGFkIHN1bW1lcmluZyBzw6Vzb20gc2thcGFkZSwgbmFtbmJ5dGVuIG9jaCDDpG5kcmFkZSBsw6RnZW4iCisKKyM6IGRpZmYuYzo1MzA4Cittc2dpZCAic2hvdyBvbmx5IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgInZpc2EgZW5kYXN0IG5hbW5lbiBww6Ugw6RuZHJhZGUgZmlsZXIiCisKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgbmFtbiBvY2ggc3RhdHVzIGbDtnIgw6RuZHJhZGUgZmlsZXIiCisKKyM6IGRpZmYuYzo1MzEzCittc2dpZCAiPHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV0iCittc2dzdHIgIjxicmVkZD5bLDxuYW1uLWJyZWRkPlssPGFudGFsPl1dIgorCisjOiBkaWZmLmM6NTMxNAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IgorbXNnc3RyICJza2FwYSBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICI8YnJlZGQ+IgorCisjOiBkaWZmLmM6NTMxNworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJlcmEgZW4gZGlmZnN0YXQgbWVkIGdpdmVuIGJyZWRkIgorCisjOiBkaWZmLmM6NTMyMAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBuYW1lIHdpZHRoIgorbXNnc3RyICJnZW5lcmVyYSBlbiBkaWZmc3RhdCBtZWQgZ2l2ZW4gbmFtbmJyZWRkIgorCisjOiBkaWZmLmM6NTMyMworbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggYSBnaXZlbiBncmFwaCB3aWR0aCIKK21zZ3N0ciAiZ2VuZXJlcmEgZW4gZGlmZnN0YXQgbWVkIGdpdmVuIGdyYWZicmVkZCIKKworIzogZGlmZi5jOjUzMjUKK21zZ2lkICI8Y291bnQ+IgorbXNnc3RyICI8YW50YWw+IgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAiZ2VuZXJlcmEgZGlmZnN0YXQgbWVkIGJlZ3LDpG5zYWRlIHJhZGVyIgorCisjOiBkaWZmLmM6NTMyOQorbXNnaWQgImdlbmVyYXRlIGNvbXBhY3Qgc3VtbWFyeSBpbiBkaWZmc3RhdCIKK21zZ3N0ciAic2thcGEga29tcGFrdCDDtnZlcnNpa3QgaSBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMzIKK21zZ2lkICJvdXRwdXQgYSBiaW5hcnkgZGlmZiB0aGF0IGNhbiBiZSBhcHBsaWVkIgorbXNnc3RyICJza2FwYSBlbiBiaW7DpHJkaWZmIHNvbSBrYW4gYXBwbGljZXJhcyIKKworIzogZGlmZi5jOjUzMzUKK21zZ2lkICJzaG93IGZ1bGwgcHJlLSBhbmQgcG9zdC1pbWFnZSBvYmplY3QgbmFtZXMgb24gdGhlIFwiaW5kZXhcIiBsaW5lcyIKK21zZ3N0ciAiIgorInZpc2EgZnVsbHN0w6RuZGlnYSBvYmpla3RuYW1uIGkgXCJpbmRleFwiLXJhZGVyIGbDtnIgbMOkZ2V0IGLDpWRlIGbDtnJlIG9jaCBlZnRlciIKKworIzogZGlmZi5jOjUzMzcKK21zZ2lkICJzaG93IGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAidmlzYSBmw6RyZ2FkIGRpZmYiCisKKyM6IGRpZmYuYzo1MzM4Cittc2dpZCAiPGtpbmQ+IgorbXNnc3RyICI8dHlwPiIKKworIzogZGlmZi5jOjUzMzkKIG1zZ2lkICIiCi0iUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKLSJcbiIKLSJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKKyJoaWdobGlnaHQgd2hpdGVzcGFjZSBlcnJvcnMgaW4gdGhlICdjb250ZXh0JywgJ29sZCcgb3IgJ25ldycgbGluZXMgaW4gdGhlICIKKyJkaWZmIgogbXNnc3RyICIiCi0iRGV0IGthbiB2YXJhIHN2w6VydCBhdHQgw6V0ZXJzdMOkbGxhIGJvcnR0YWduYSBncmVuYXIuXG4iCi0iXG4iCi0iVGEgYm9ydCBkZSB2YWxkYSBncmVuYXJuYT8iCisibGp1c21hcmtlcmEgYmxhbmtzdGVnc2ZlbCBpIFwiY29udGV4dFwiIChzYW1tYW5oYW5nKSwgXCJvbGRcIiAoZ2FtbGEpIGVsbGVyICIKKyJcIm5ld1wiIChueWEpIHJhZGVyIGkgZGlmZmVuIgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCi1tc2dzdHIgIlRhciBib3J0IGdyZW5hciBmcsOlbiAlcyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDAKLW1zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKLW1zZ3N0ciAiSW5nZXQgYXJraXYgbWFya2VyYXQuIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjMwNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNjYW5uaW5nICVzLi4uIgotbXNnc3RyICJTw7ZrZXIgJXMuLi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzMKLW1zZ2lkICJHaXQgR3VpIgotbXNnc3RyICJHaXQgR3VpIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEyCi1tc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgotbXNnc3RyICJTa2FwYSBueXR0IGFya2l2IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4Ci1tc2dpZCAiTmV3Li4uIgotbXNnc3RyICJOeXR0Li4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NgotbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIktsb25hIGJlZmludGxpZ3QgYXJraXYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE2Ci1tc2dpZCAiQ2xvbmUuLi4iCi1tc2dzdHIgIktsb25hLi4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjQKLW1zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIsOWcHBuYSBiZWZpbnRsaWd0IGFya2l2IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyOQotbXNnaWQgIk9wZW4uLi4iCi1tc2dzdHIgIsOWcHBuYS4uLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNDIKLW1zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgotbXNnc3RyICJTZW5hc3RlIGFya2l2ZW4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQ4Ci1tc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCi1tc2dzdHIgIsOWcHBuYSB0aWRpZ2FyZSBhcmtpdjoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIzCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMzMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkt1bmRlIGludGUgc2thcGEgYXJraXZldCAlczoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDA3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMwotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiU2thcGEiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDE3Ci1tc2dpZCAiRGlyZWN0b3J5OiIKLW1zZ3N0ciAiS2F0YWxvZzoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTczCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwOTgKLW1zZ2lkICJHaXQgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiR2l0YXJraXYiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiS2F0YWxvZ2VuICVzIGZpbm5zIHJlZGFuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiRmlsZW4gJXMgZmlubnMgcmVkYW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MQotbXNnaWQgIkNsb25lIgotbXNnc3RyICJLbG9uYSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDQKLW1zZ2lkICJTb3VyY2UgTG9jYXRpb246IgotbXNnc3RyICJQbGF0cyBmw7ZyIGvDpGxsa29kOiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTMKLW1zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKLW1zZ3N0ciAiTcOlbGthdGFsb2c6IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMwotbXNnaWQgIkNsb25lIFR5cGU6IgotbXNnc3RyICJUeXAgYXYga2xvbjoiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTI4Ci1tc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgotbXNnc3RyICJTdGFuZGFyZCAoc25hYmIsIHNlbWlyZWR1bmRhbnQsIGjDpXJkYSBsw6Rua2FyKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzMKLW1zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCi1tc2dzdHIgIkZ1bGwga29waWEgKGzDpW5nc2FtbWFyZSwgcmVkdW5kYW50IHPDpGtlcmhldHNrb3BpYSkiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTM4Ci1tc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCi1tc2dzdHIgIkRlbGFkIChzbmFiYmFzdCwgcmVrb21tZW5kZXJhcyBlaiwgaW5nZW4gc8Oka2VyaGV0c2tvcGlhKSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDUKLW1zZ2lkICJSZWN1cnNpdmVseSBjbG9uZSBzdWJtb2R1bGVzIHRvbyIKLW1zZ3N0ciAiS2xvbmEgw6R2ZW4gcmVrdXJzaXZ0IHVuZGVybW9kdWxlciIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjYKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzcyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODQyCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTEyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgotbXNnc3RyICJJbnRlIGV0dCBHaXRhcmtpdjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE1Ci1tc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgotbXNnc3RyICJTdGFuZGFyZCDDpHIgZW5kYXN0IHRpbGxnw6RuZ2xpZ3QgZsO2ciBsb2thbGEgYXJraXYuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxOQotbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIkRlbGF0IMOkciBlbmRhc3QgdGlsbGfDpG5nbGlndCBmw7ZyIGxva2FsYSBhcmtpdi4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgotbXNnc3RyICJQbGF0c2VuICVzIGZpbm5zIHJlZGFuLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTEKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBrb25maWd1cmVyYSB1cnNwcnVuZyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjMKLW1zZ2lkICJDb3VudGluZyBvYmplY3RzIgotbXNnc3RyICJSw6RrbmFyIG9iamVrdCIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjQKLW1zZ2lkICJidWNrZXRzIgotbXNnc3RyICJoaW5rYXIiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njg4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgotbXNnc3RyICJLdW5kZSBpbnRlIGtvcGllcmEgb2JqZWt0L2luZm8vYWx0ZXJuYXRpdjogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKLW1zZ3N0ciAiSW5nZW50aW5nIGF0dCBrbG9uYSBmcsOlbiAlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQwCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk1MgotbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKLW1zZ3N0ciAiR3JlbmVuIFwibWFzdGVyXCIgaGFyIGludGUgaW5pdGllcmF0cy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzM5Ci1tc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKLW1zZ3N0ciAiSMOlcmRhIGzDpG5rYXIgw6RyIGludGUgdGlsbGfDpG5nbGlnYS4gRmFsbGVyIHRpbGxiYWthIHDDpSBrb3BpZXJpbmcuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKLW1zZ3N0ciAiS2xvbmFyIGZyw6VuICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4MgotbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiS29waWVyYXIgb2JqZWt0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4MwotbXNnaWQgIktpQiIKLW1zZ3N0ciAiS2lCIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCi1tc2dzdHIgIkt1bmRlIGludGUga29waWVyYSBvYmpla3Q6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxNwotbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKLW1zZ3N0ciAiTMOkbmthciBvYmpla3QiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE4Ci1tc2dpZCAib2JqZWN0cyIKLW1zZ3N0ciAib2JqZWt0IgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgotbXNnc3RyICJLdW5kZSBpbnRlIGjDpXJkbMOkbmthIG9iamVrdDogJXMiCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODgxCi1tc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgZ3JlbmFyIG9jaCBvYmpla3QuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTIKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIHRhZ2dhci4gU2Uga29uc29sdXRkYXRhIGbDtnIgZGV0YWxqZXIuIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNgotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIkt1bmRlIGludGUgYXZnw7ZyYSBIRUFELiBTZSBrb25zb2x1dGRhdGEgZsO2ciBkZXRhbGplci4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCi1tc2dzdHIgIkt1bmRlIGludGUgc3TDpGRhIHVwcCAlcyIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzEKLW1zZ2lkICJDbG9uZSBmYWlsZWQuIgotbXNnc3RyICJLbG9uaW5nIG1pc3NseWNrYWRlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Ci1tc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgotbXNnc3RyICJIw6RtdGFkZSBpbmdlbiBzdGFuZGFyZGdyZW4uIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIHVwcCAlcyB0aWxsIG7DpWdvbiBpbmNoZWNrbmluZy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYxCi1tc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCi1tc2dzdHIgIlNrYXBhciBhcmJldHNrYXRhbG9nIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MiBsaWIvaW5kZXgudGNsOjcwIGxpYi9pbmRleC50Y2w6MTM2Ci0jOiBsaWIvaW5kZXgudGNsOjIwNwotbXNnaWQgImZpbGVzIgotbXNnc3RyICJmaWxlciIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODEKLW1zZ2lkICJDYW5ub3QgY2xvbmUgc3VibW9kdWxlcy4iCi1tc2dzdHIgIkthbiBpbnRlIGtsb25hIHVuZGVybW9kdWxlci4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTkwCi1tc2dpZCAiQ2xvbmluZyBzdWJtb2R1bGVzIgotbXNnc3RyICJLbG9uYXIgdW5kZXJtb2R1bGVyIgotCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTUKLW1zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKLW1zZ3N0ciAiSW5sZWRhbmRlIGZpbHV0Y2hlY2tuaW5nIG1pc3NseWNrYWRlcy4iCi0KLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OQotbXNnaWQgIk9wZW4iCi1tc2dzdHIgIsOWcHBuYSIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY5Ci1tc2dpZCAiUmVwb3NpdG9yeToiCi1tc2dzdHIgIkFya2l2OiIKLQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTE4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIGFya2l2ZXQgJXM6IgotCi0jOiBsaWIvYWJvdXQudGNsOjI2Ci1tc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgotbXNnc3RyICJnaXQtZ3VpIC0gZXR0IGdyYWZpc2t0IGFudsOkbmRhcmdyw6Ruc3NuaXR0IGbDtnIgR2l0LiIKLQotIzogbGliL2JsYW1lLnRjbDo3MwotbXNnaWQgIkZpbGUgVmlld2VyIgotbXNnc3RyICJGaWx2aXNhcmUiCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzkKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICJJbmNoZWNrbmluZzoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MjgwCi1tc2dpZCAiQ29weSBDb21taXQiCi1tc2dzdHIgIktvcGllcmEgaW5jaGVja25pbmciCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjg0Ci1tc2dpZCAiRmluZCBUZXh0Li4uIgotbXNnc3RyICJTw7ZrIHRleHQuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjg4Ci1tc2dpZCAiR290byBMaW5lLi4uIgotbXNnc3RyICJHw6UgdGlsbCByYWQuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjk3Ci1tc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKLW1zZ3N0ciAiR8O2ciBmdWxsIGtvcGllcmluZ3NpZ2Vua8Okbm5pbmciCi0KLSM6IGxpYi9ibGFtZS50Y2w6MzAxCi1tc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCi1tc2dzdHIgIlZpc2EgaGlzdG9yaWtzYW1tYW5oYW5nIgotCi0jOiBsaWIvYmxhbWUudGNsOjMwNAotbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCi1tc2dzdHIgIktsYW5kcmEgZsO2csOkbGRyYWluY2hlY2tuaW5nIgotCi0jOiBsaWIvYmxhbWUudGNsOjQ2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlYWRpbmcgJXMuLi4iCi1tc2dzdHIgIkzDpHNlciAlcy4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo1OTQKLW1zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKLW1zZ3N0ciAiTMOkc2VyIGFubm90ZXJpbmdhciBmw7ZyIGtvcGllcmluZy9mbHl0dG5pbmcuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NjE0Ci1tc2dpZCAibGluZXMgYW5ub3RhdGVkIgotbXNnc3RyICJyYWRlciBhbm5vdGVyYWRlIgotCi0jOiBsaWIvYmxhbWUudGNsOjgwNgotbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIkzDpHNlciBpbiBhbm5vdGVyaW5nIGF2IG9yaWdpbmFscGxhY2VyaW5nLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjgwOQotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICJBbm5vdGVyaW5nIGZ1bGxib3JkYWQuIgotCi0jOiBsaWIvYmxhbWUudGNsOjgzOQotbXNnaWQgIkJ1c3kiCi1tc2dzdHIgIlVwcHRhZ2VuIgotCi0jOiBsaWIvYmxhbWUudGNsOjg0MAotbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgotbXNnc3RyICJBbm5vdGVyaW5nc3Byb2Nlc3Mga8O2cnMgcmVkYW4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjg3OQotbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCi1tc2dzdHIgIkvDtnIgZ3J1bmRsaWcga29waWVyaW5nc2lnZW5rw6RubmluZy4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo5NDcKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgIkzDpHNlciBpbiBhbm5vdGVyaW5nLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjEwMDAKLW1zZ2lkICJBdXRob3I6IgotbXNnc3RyICJGw7ZyZmF0dGFyZToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAwNAotbXNnaWQgIkNvbW1pdHRlcjoiCi1tc2dzdHIgIkluY2hlY2thcmU6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEwMDkKLW1zZ2lkICJPcmlnaW5hbCBGaWxlOiIKLW1zZ3N0ciAiVXJzcHJ1bmdsaWcgZmlsOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDU3Ci1tc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgotbXNnc3RyICJIaXR0YXIgaW50ZSBpbmNoZWNrbmluZyBmw7ZyIEhFQUQ6IgotCi0jOiBsaWIvYmxhbWUudGNsOjExMTIKLW1zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKLW1zZ3N0ciAiSGl0dGFyIGludGUgZsO2csOkbGRyYWluY2hlY2tuaW5nOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMTI3Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgotbXNnc3RyICJLYW4gaW50ZSB2aXNhIGbDtnLDpGxkZXIiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI2OQotbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgotbXNnc3RyICJVcnNwcnVuZ2xpZ2VuIGF2OiIKLQotIzogbGliL2JsYW1lLnRjbDoxMjc1Ci1tc2dpZCAiSW4gRmlsZToiCi1tc2dzdHIgIkkgZmlsZW46IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyODAKLW1zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCi1tc2dzdHIgIktvcGllcmFkIGVsbGVyIGZseXR0YWQgaGl0IGF2OiIKLQotIzogbGliL3NzaGtleS50Y2w6MzEKLW1zZ2lkICJObyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiSW5nYSBueWNrbGFyIGhpdHRhZGVzLiIKLQotIzogbGliL3NzaGtleS50Y2w6MzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgotbXNnc3RyICJIaXR0YWRlIMO2cHBlbiBueWNrZWwgaTogJXMiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjQwCi1tc2dpZCAiR2VuZXJhdGUgS2V5IgotbXNnc3RyICJTa2FwYSBueWNrZWwiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjU4Ci1tc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCi1tc2dzdHIgIktvcGllcmEgdGlsbCBVcmtsaXBwIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo3MgotbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgotbXNnc3RyICJEaW4gw7ZwcG5hIE9wZW5TU0gtbnlja2VsIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo4MAotbXNnaWQgIkdlbmVyYXRpbmcuLi4iCi1tc2dzdHIgIlNrYXBhci4uLiIKLQotIzogbGliL3NzaGtleS50Y2w6ODYKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo1MzQyCiBtc2dpZCAiIgotIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgotIlxuIgotIiVzIgorImRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycyBpbiAtLXJhdyBvciAiCisiLS1udW1zdGF0IgogbXNnc3RyICIiCi0iS3VuZGUgaW50ZSBzdGFydGEgc3NoLWtleWdlbjpcbiIKLSJcbiIKLSIlcyIKKyJza3JpdiBpbnRlIG9tIHPDtmt2w6Rnc25hbW4gb2NoIGFudsOkbmQgTlVMLXRlY2tlbiBzb20gZsOkbHRzZXBhcmVyYXJlIGkgLS1yYXcgIgorImVsbGVyIC0tbnVtc3RhdCIKIAotIzogbGliL3NzaGtleS50Y2w6MTEzCi1tc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBza2FwYS4iCisjOiBkaWZmLmM6NTM0NSBkaWZmLmM6NTM0OCBkaWZmLmM6NTM1MSBkaWZmLmM6NTQ1NworbXNnaWQgIjxwcmVmaXg+IgorbXNnc3RyICI8cHJlZml4PiIKIAotIzogbGliL3NzaGtleS50Y2w6MTIwCi1tc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiTHlja2FkZXMgc2thcGEgbnlja2VsbiwgbWVuIGhpdHRhciBpbnRlIG7DpWdvbiBueWNrZWwuIgorIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICJ2aXNhIGdpdmV0IGvDpGxscHJlZml4IGlzdMOkbGxldCBmw7ZyIFwiYS9cIiIKIAotIzogbGliL3NzaGtleS50Y2w6MTIzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgotbXNnc3RyICJEaW4gbnlja2VsIGZpbm5zIGk6ICVzIgorIzogZGlmZi5jOjUzNDkKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBwcmVmaXggaW5zdGVhZCBvZiBcImIvXCIiCittc2dzdHIgInZpc2EgZ2l2ZXQgbcOlbHByZWZpeCBpc3TDpGxsZXQgZsO2ciBcImIvXCIiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMwotbXNnaWQgIkNyZWF0ZSBCcmFuY2giCi1tc2dzdHIgIlNrYXBhIGdyZW4iCisjOiBkaWZmLmM6NTM1MgorbXNnaWQgInByZXBlbmQgYW4gYWRkaXRpb25hbCBwcmVmaXggdG8gZXZlcnkgbGluZSBvZiBvdXRwdXQiCittc2dzdHIgImzDpGdnIHRpbGwgeXR0ZXJsaWdhcmUgcHJlZml4IHDDpSBhbGxhIHJhZGVyIGkgdXRkYXRhIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjgKLW1zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKLW1zZ3N0ciAiU2thcGEgbnkgZ3JlbiIKKyM6IGRpZmYuYzo1MzU1Cittc2dpZCAiZG8gbm90IHNob3cgYW55IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcmVmaXgiCittc2dzdHIgInZpc2EgaW50ZSBrw6RsbC0gZWxsZXIgbcOlbHByZWZpeCIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQyCi1tc2dpZCAiQnJhbmNoIE5hbWUiCi1tc2dzdHIgIk5hbW4gcMOlIGdyZW4iCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgInZpc2Egc2FtbW5oYW5nIG1lbGxhbiBkaWZmLXN0eWNrZW4gdXBwIHRpbGwgYW5naXZldCBhbnRhbCByYWRlciIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU3Ci1tc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCi1tc2dzdHIgIkFudsOkbmQgbmFtbiBww6Ugc3DDpXJhZCBncmVuIgorIzogZGlmZi5jOjUzNjIgZGlmZi5jOjUzNjcgZGlmZi5jOjUzNzIKK21zZ2lkICI8Y2hhcj4iCittc2dzdHIgIjx0ZWNrZW4+IgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKLW1zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKLW1zZ3N0ciAiSW5sZWRhbmRlIHJldmlzaW9uIgorIzogZGlmZi5jOjUzNjMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbnN0ZWFkIG9mICcrJyIKK21zZ3N0ciAiYW5nZSB0ZWNrZW4gZsO2ciBhdHQgYW5nZSBueSByYWQgaXN0w6RsbGV0IGbDtnIgXCIrXCIiCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgotbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgotbXNnc3RyICJVcHBkYXRlcmEgYmVmaW50bGlnIGdyZW46IgorIzogZGlmZi5jOjUzNjgKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYW4gb2xkIGxpbmUgaW5zdGVhZCBvZiAnLSciCittc2dzdHIgImFuZ2UgdGVja2VuIGbDtnIgYXR0IGFuZ2UgZ2FtbWFsIHJhZCBpc3TDpGxsZXQgZsO2ciBcIi1cIiIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Ci1tc2dpZCAiTm8iCi1tc2dzdHIgIk5laiIKKyM6IGRpZmYuYzo1MzczCittc2dpZCAic3BlY2lmeSB0aGUgY2hhcmFjdGVyIHRvIGluZGljYXRlIGEgY29udGV4dCBpbnN0ZWFkIG9mICcgJyIKK21zZ3N0ciAiYW5nZSB0ZWNrZW4gZsO2ciBhdHQgYW5nZSBzYW1tYW5oYW5nIGlzdMOkbGxldCBmw7ZyIFwiIFwiIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKLW1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKLW1zZ3N0ciAiRW5kYXN0IHNuYWJic3BvbG5pbmciCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIkRpZmYtbmFtbmJ5dGVzZmxhZ2dvciIKIAotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Ci1tc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCi1tc2dzdHIgIkNoZWNrYSB1dCBuw6RyIHNrYXBhZCIKKyM6IGRpZmYuYzo1Mzc3Cittc2dpZCAiPG4+Wy88bT5dIgorbXNnc3RyICI8bj5bLzxtPl0iCiAKLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzIKLW1zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKLW1zZ3N0ciAiVsOkbGogZW4gZ3JlbiBhdHQgc3DDpXJhLiIKKyM6IGRpZmYuYzo1Mzc4Cittc2dpZCAiYnJlYWsgY29tcGxldGUgcmV3cml0ZSBjaGFuZ2VzIGludG8gcGFpcnMgb2YgZGVsZXRlIGFuZCBjcmVhdGUiCittc2dzdHIgImRlbGEgdXBwIGtvbXBsZXR0YSBvbXNrcml2bmluZ2FyIHRpbGwgdGEgYm9ydCBvY2ggc2thcGEtcGFyIgogCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgotbXNnc3RyICJEZW4gc3DDpXJhZGUgZ3JlbmVuICVzIMOkciBpbnRlIGVuIGdyZW4gaSBmasOkcnJhcmtpdmV0LiIKKyM6IGRpZmYuYzo1MzgyCittc2dpZCAiZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgImRldGVrdGVyYSBuYW1uw6RuZHJpbmdhciIKIAotIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCi1tc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKLW1zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGdlbnbDpGc6IgorIzogZGlmZi5jOjUzODYKK21zZ2lkICJvbWl0IHRoZSBwcmVpbWFnZSBmb3IgZGVsZXRlcyIKK21zZ3N0ciAidGEgYm9ydCBmw7ZyLXZlcnNpb24gZsO2ciBib3J0dGFnbmluZ2FyIgogCi0jOiBsaWIvc2hvcnRjdXQudGNsOjEzNwotbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKLW1zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGlrb246IgorIzogZGlmZi5jOjUzODkKK21zZ2lkICJkZXRlY3QgY29waWVzIgorbXNnc3RyICJkZXRla3RlcmEga29waW9yIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKLW1zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgotbXNnc3RyICJEZW5uYSBmcsOlbmtvcHBsYWRlIHV0Y2hlY2tuaW5nIgorIzogZGlmZi5jOjUzOTMKK21zZ2lkICJ1c2UgdW5tb2RpZmllZCBmaWxlcyBhcyBzb3VyY2UgdG8gZmluZCBjb3BpZXMiCittc2dzdHIgImFudsOkbmQgb2bDtnLDpG5kcmFkZSBzb20ga8OkbGxhIGbDtnIgYXR0IGhpdHRhIGtvcGlvciIKIAotIzogbGliL2Nob29zZV9yZXYudGNsOjYwCi1tc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCi1tc2dzdHIgIlJldmlzaW9uc3V0dHJ5Y2s6IgorIzogZGlmZi5jOjUzOTUKK21zZ2lkICJkaXNhYmxlIHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgImluYWt0aXZlcmEgZGV0ZWt0ZXJpbmcgYXYgbmFtbmJ5dGVuIgogCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzIKLW1zZ2lkICJMb2NhbCBCcmFuY2giCi1tc2dzdHIgIkxva2FsIGdyZW4iCisjOiBkaWZmLmM6NTM5OAorbXNnaWQgInVzZSBlbXB0eSBibG9icyBhcyByZW5hbWUgc291cmNlIgorbXNnc3RyICJhbnbDpG5kIHRvbW1hIGJsb2I6YXIgc29tIG5hbW7DpG5kcmluZ3Nrw6RsbGEiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NwotbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKLW1zZ3N0ciAiU3DDpXJhbmRlIGdyZW4iCisjOiBkaWZmLmM6NTQwMAorbXNnaWQgImNvbnRpbnVlIGxpc3RpbmcgdGhlIGhpc3Rvcnkgb2YgYSBmaWxlIGJleW9uZCByZW5hbWVzIgorbXNnc3RyICJmb3J0c8OkdHQgbGlzdGEgaGlzdG9yaWtlbiBmw7ZyIGVuIGZpbCBib3J0b20gbmFtbsOkbmRyaW5nYXIiCiAKLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4MiBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ0Ci1tc2dpZCAiVGFnIgotbXNnc3RyICJUYWdnIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzIxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCi1tc2dzdHIgIk9naWx0aWcgcmV2aXNpb246ICVzIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQyCi1tc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgotbXNnc3RyICJJbmdlbiByZXZpc2lvbiB2YWxkLiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjM1MAotbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgotbXNnc3RyICJSZXZpc2lvbnN1dHRyeWNrZXQgw6RyIHRvbXQuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTM3Ci1tc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAiVXBwZGF0ZXJhZCIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjU2NQotbXNnaWQgIlVSTCIKLW1zZ3N0ciAiV2ViYmFkcmVzcyIKLQotIzogbGliL2NvbW1pdC50Y2w6OQorIzogZGlmZi5jOjU0MDMKIG1zZ2lkICIiCi0iVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKLSJcbiIKLSJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgotInRvIGFtZW5kLlxuIgorInByZXZlbnQgcmVuYW1lL2NvcHkgZGV0ZWN0aW9uIGlmIHRoZSBudW1iZXIgb2YgcmVuYW1lL2NvcHkgdGFyZ2V0cyBleGNlZWRzICIKKyJnaXZlbiBsaW1pdCIKIG1zZ3N0ciAiIgotIkRldCBmaW5ucyBpbmdlbnRpbmcgYXR0IHV0w7ZrYS5cbiIKLSJcbiIKLSJEdSBow6VsbGVyIHDDpSBhdHQgc2thcGEgZGVuIGlubGVkYW5kZSBpbmNoZWNrbmluZ2VuLiBEZXQgZmlubnMgaW5nZW4gdGlkaWdhcmUgIgotImluY2hlY2tuaW5nIGF0dCB1dMO2a2EuXG4iCisiZsO2cmhpbmRyYSBuYW1uYnl0ZS9rb3BpZS1kZXRla3RlcmluZyBvbSBhbnRhbGV0IG5hbW5ieXRlbi9rb3Bpb3Igw7Z2ZXJza3JpdmVyICIKKyJnaXZlbiBncsOkbnMiCiAKLSM6IGxpYi9jb21taXQudGNsOjE4CisjOiBkaWZmLmM6NTQwNQorbXNnaWQgIkRpZmYgYWxnb3JpdGhtIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBkaWZmLWFsZ29yaXRtIgorCisjOiBkaWZmLmM6NTQwNworbXNnaWQgInByb2R1Y2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYiCittc2dzdHIgInNrYXBhIG1pbnN0YSBtw7ZqbGlnYSBkaWZmIgorCisjOiBkaWZmLmM6NTQxMAorbXNnaWQgImlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gY29tcGFyaW5nIGxpbmVzIgorbXNnc3RyICJpZ25vcmVyYSBibGFua3RlY2tlbiB2aWQgcmFkasOkbWbDtnJlbHNlIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICJpZ25vcmVyYSDDpG5kcmluZ2FyIGkgYW50YWwgYmxhbmt0ZWNrZW4gdmlkIHJhZGrDpG1mw7ZyZWxzZSIKKworIzogZGlmZi5jOjU0MTYKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTCIKK21zZ3N0ciAiaWdub3JlcmEgYmxhbmt0ZWNrZW4gdmlkIHJhZHNsdXQiCisKKyM6IGRpZmYuYzo1NDE5Cittc2dpZCAiaWdub3JlIGNhcnJpZXItcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSIKK21zZ3N0ciAiaWdub3JlcmEgQ1ItdGVja2VuIHZpZCByYWRzbHV0IgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgImlnbm9yZXJhIMOkbmRyaW5nYXIgaSByYWRlciBzb20gw6RyIGhlbHQgYmxhbmthIgorCisjOiBkaWZmLmM6NTQyNQorbXNnaWQgImhldXJpc3RpYyB0byBzaGlmdCBkaWZmIGh1bmsgYm91bmRhcmllcyBmb3IgZWFzeSByZWFkaW5nIgorbXNnc3RyICJoZXVyaXN0aWsgZsO2ciBhdHQgZmx5dHRhIGRpZmYtZ3LDpG5zZXIgZsO2ciBsw6R0dGFyZSBsw6RzbmluZyIKKworIzogZGlmZi5jOjU0MjgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgInNrYXBhIGRpZmZhciBtZWQgYWxnb3JpdG1lbiBcInBhdGllbmNlIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJza2FwYSBkaWZmYXIgbWVkIGFsZ29yaXRtZW4gXCJoaXN0b2dyYW0gZGlmZlwiIgorCisjOiBkaWZmLmM6NTQzNAorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICI8YWxnb3JpdG0+IgorCisjOiBkaWZmLmM6NTQzNQorbXNnaWQgImNob29zZSBhIGRpZmYgYWxnb3JpdGhtIgorbXNnc3RyICJ2w6RsaiBlbiBkaWZmLWFsZ29yaXRtIgorCisjOiBkaWZmLmM6NTQzNworbXNnaWQgIjx0ZXh0PiIKK21zZ3N0ciAiPHRleHQ+IgorCisjOiBkaWZmLmM6NTQzOAorbXNnaWQgImdlbmVyYXRlIGRpZmYgdXNpbmcgdGhlIFwiYW5jaG9yZWQgZGlmZlwiIGFsZ29yaXRobSIKK21zZ3N0ciAic2thcGEgZGlmZmFyIG1lZCBhbGdvcml0bWVuIFwiYW5jaG9yZWQgZGlmZlwiIgorCisjOiBkaWZmLmM6NTQ0MCBkaWZmLmM6NTQ0OSBkaWZmLmM6NTQ1MgorbXNnaWQgIjxtb2RlPiIKK21zZ3N0ciAiPGzDpGdlPiIKKworIzogZGlmZi5jOjU0NDEKK21zZ2lkICJzaG93IHdvcmQgZGlmZiwgdXNpbmcgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3JkcyIKK21zZ3N0ciAidmlzYSBvcmRkaWZmLCBkw6RyIDxsw6RnZT4gYXZncsOkbnNhciDDpG5kcmFkZSBvcmQiCisKKyM6IGRpZmYuYzo1NDQzIGRpZmYuYzo1NDQ2IGRpZmYuYzo1NDkxCittc2dpZCAiPHJlZ2V4PiIKK21zZ3N0ciAiPHJlZ3V0dHI+IgorCisjOiBkaWZmLmM6NTQ0NAorbXNnaWQgInVzZSA8cmVnZXg+IHRvIGRlY2lkZSB3aGF0IGEgd29yZCBpcyIKK21zZ3N0ciAiYW52w6RuZCA8cmVndXR0cj4gZsO2ciBhdHQgYmVzdMOkbW1hIHZhZCBzb20gw6RyIGV0dCBvcmQiCisKKyM6IGRpZmYuYzo1NDQ3Cittc2dpZCAiZXF1aXZhbGVudCB0byAtLXdvcmQtZGlmZj1jb2xvciAtLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+IgorbXNnc3RyICJtb3RzdmFyYXIgLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ3V0dHI+IgorCisjOiBkaWZmLmM6NTQ1MAorbXNnaWQgIm1vdmVkIGxpbmVzIG9mIGNvZGUgYXJlIGNvbG9yZWQgZGlmZmVyZW50bHkiCittc2dzdHIgImZseXR0YWRlIGtvZHJhZGVyIGbDpHJnYXMgcMOlIGFubmF0IHPDpHR0IgorCisjOiBkaWZmLmM6NTQ1MworbXNnaWQgImhvdyB3aGl0ZSBzcGFjZXMgYXJlIGlnbm9yZWQgaW4gLS1jb2xvci1tb3ZlZCIKK21zZ3N0ciAiaHVyIGJsYW5rdGVja2VuIGlnbm9yZXJhcyBpIC0tY29sb3ItbW92ZWQiCisKKyM6IGRpZmYuYzo1NDU2Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICJBbmRyYSBkaWZmLWZsYWdnb3IiCisKKyM6IGRpZmYuYzo1NDU4Cittc2dpZCAid2hlbiBydW4gZnJvbSBzdWJkaXIsIGV4Y2x1ZGUgY2hhbmdlcyBvdXRzaWRlIGFuZCBzaG93IHJlbGF0aXZlIHBhdGhzIgorbXNnc3RyICIiCisidmlkIHN0YXJ0IGZyw6VuIHVuZGVya2F0YWxvZywgdXRlc2x1dCDDpG5kcmluZ2FyIHV0YW5mw7ZyIG9jaCB2aXNhIHJlbGF0aXZhICIKKyJzw7ZrdsOkZ2FyIgorCisjOiBkaWZmLmM6NTQ2MgorbXNnaWQgInRyZWF0IGFsbCBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICJoYW50ZXJhIGFsbGEgZmlsZXIgc29tIHRleHQiCisKKyM6IGRpZmYuYzo1NDY0Cittc2dpZCAic3dhcCB0d28gaW5wdXRzLCByZXZlcnNlIHRoZSBkaWZmIgorbXNnc3RyICJ2w6R4bGEgdHbDpSBpbmRhdGFmaWxlciwgdsOkbmQgZGlmZmVuIgorCisjOiBkaWZmLmM6NTQ2NgorbXNnaWQgImV4aXQgd2l0aCAxIGlmIHRoZXJlIHdlcmUgZGlmZmVyZW5jZXMsIDAgb3RoZXJ3aXNlIgorbXNnc3RyICJhdnNsdXRhIG1lZCAxIHZpZCDDpG5kcmluZ2FyLCBhbm5hcnMgMCIKKworIzogZGlmZi5jOjU0NjgKK21zZ2lkICJkaXNhYmxlIGFsbCBvdXRwdXQgb2YgdGhlIHByb2dyYW0iCittc2dzdHIgInNsw6UgYXYgYWxsYSB1dGRhdGEgZnLDpW4gcHJvZ3JhbW1ldCIKKworIzogZGlmZi5jOjU0NzAKK21zZ2lkICJhbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZCIKK21zZ3N0ciAidGlsbMOldCBrw7ZyYSBlbiBleHRlcm4gZGlmZi1oasOkbHBhcmUiCisKKyM6IGRpZmYuYzo1NDcyCittc2dpZCAicnVuIGV4dGVybmFsIHRleHQgY29udmVyc2lvbiBmaWx0ZXJzIHdoZW4gY29tcGFyaW5nIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAia8O2ciBleHRlcm50IHRleHRrb252ZXJ0ZXJpbmdzZmlsZXIgbsOkciBiaW7DpHJmaWxlciBqw6RtZsO2cnMiCisKKyM6IGRpZmYuYzo1NDc0Cittc2dpZCAiPHdoZW4+IgorbXNnc3RyICI8bsOkcj4iCisKKyM6IGRpZmYuYzo1NDc1Cittc2dpZCAiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBpbiB0aGUgZGlmZiBnZW5lcmF0aW9uIgorbXNnc3RyICJpZ25vcmVyYSDDpG5kcmluZ2FyIGkgdW5kZXJtb2R1bGVyIG7DpHIgZGlmZmVuIHNrYXBhcyIKKworIzogZGlmZi5jOjU0NzgKK21zZ2lkICI8Zm9ybWF0PiIKK21zZ3N0ciAiPGZvcm1hdD4iCisKKyM6IGRpZmYuYzo1NDc5Cittc2dpZCAic3BlY2lmeSBob3cgZGlmZmVyZW5jZXMgaW4gc3VibW9kdWxlcyBhcmUgc2hvd24iCittc2dzdHIgImFuZ2UgaHVyIMOkbmRyaW5nYXIgaSB1bmRlcm1vZHVsZXIgdmlzYXMiCisKKyM6IGRpZmYuYzo1NDgzCittc2dpZCAiaGlkZSAnZ2l0IGFkZCAtTicgZW50cmllcyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiZMO2bGogXCJnaXQgYWRkIC1OXCItcG9zdGVyIGZyw6VuIGluZGV4ZXQiCisKKyM6IGRpZmYuYzo1NDg2Cittc2dpZCAidHJlYXQgJ2dpdCBhZGQgLU4nIGVudHJpZXMgYXMgcmVhbCBpbiB0aGUgaW5kZXgiCittc2dzdHIgInRvbGthIFwiZ2l0IGFkZCAtTlwiLXBvc3RlciBzb20gw6RrdGEgaSBpbmRleGV0IgorCisjOiBkaWZmLmM6NTQ4OAorbXNnaWQgIjxzdHJpbmc+IgorbXNnc3RyICI8c3Ryw6RuZz4iCisKKyM6IGRpZmYuYzo1NDg5CiBtc2dpZCAiIgotIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgotIlxuIgotIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCi0iY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKLSJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgotbXNnc3RyICIiCi0iS2FuIGludGUgdXTDtmthIHZpZCBzYW1tYW5zbGFnbmluZy5cbiIKLSJcbiIKLSJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gc2FtbWFuc2xhZ25pbmcgc29tIGludGUgw6RyIGZ1bGxib3JkYWQuIER1IGthbiBpbnRlICIKLSJ1dMO2a2EgdGlkaWdhcmUgaW5jaGVja25pbmdhciBvbSBkdSBpbnRlIGbDtnJzdCBhdmJyeXRlciBkZW4gcMOlZ8OlZW5kZSAiCi0ic2FtbWFuc2xhZ25pbmdlbi5cbiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInN0cmluZyIKK21zZ3N0ciAic2UgZWZ0ZXIgw6RuZHJpbmdhciBzb20gw6RuZHJhciBhbnRhbGV0IGbDtnJla29tc3RlciBhdiBhbmdpdmVuIHN0csOkbmciCiAKLSM6IGxpYi9jb21taXQudGNsOjQ4Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgotbXNnc3RyICJGZWwgdmlkIGlubMOkc25pbmcgYXYgaW5jaGVja25pbmdzZGF0YSBmw7ZyIHV0w7ZrbmluZzoiCi0KLSM6IGxpYi9jb21taXQudGNsOjc1Ci1tc2dpZCAiVW5hYmxlIHRvIG9idGFpbiB5b3VyIGlkZW50aXR5OiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgZGluIGlkZW50aXRldDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjgwCi1tc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKLW1zZ3N0ciAiRmVsYWt0aWcgR0lUX0NPTU1JVFRFUl9JREVOVDoiCi0KLSM6IGxpYi9jb21taXQudGNsOjEyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgotbXNnc3RyICJ2YXJuaW5nOiBUY2wgc3TDtmRlciBpbnRlIHRlY2tlbmtvZG5pbmdlbiBcIiVzXCIuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoxNDkKKyM6IGRpZmYuYzo1NDkyCiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJsb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNoYW5nZSB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBzcGVjaWZpZWQgIgorInJlZ2V4IgogbXNnc3RyICIiCi0iRGV0IHNlbmFzdGUgaW5sw6RzdGEgdGlsbHN0w6VuZGV0IG1vdHN2YXJhciBpbnRlIHRpbGxzdMOlbmRldCBpIGFya2l2ZXQuXG4iCi0iXG4iCi0iRXR0IGFubmF0IEdpdC1wcm9ncmFtIGhhciDDpG5kcmF0IGFya2l2ZXQgc2VkYW4gc2VuYXN0ZSBhdnPDtmtuaW5nZW4uIER1IG3DpXN0ZSAiCi0idXRmw7ZyYSBlbiBueSBzw7ZrbmluZyBpbm5hbiBkdSBrYW4gZ8O2cmEgZW4gbnkgaW5jaGVja25pbmcuXG4iCi0iXG4iCi0iU8O2a25pbmdlbiBrb21tZXIgYXR0IHN0YXJ0YXMgYXV0b21hdGlza3QgbnUuXG4iCisic2UgZWZ0ZXIgw6RuZHJpbmdhciBzb20gw6RuZHJhciBhbnRhbGV0IGbDtnJla29tc3RlciBhdiBhbmdpdmV0IHJlZ3VsasOkcnQgIgorInV0dHJ5Y2siCiAKLSM6IGxpYi9jb21taXQudGNsOjE3MwotIywgdGNsLWZvcm1hdAorIzogZGlmZi5jOjU0OTUKK21zZ2lkICJzaG93IGFsbCBjaGFuZ2VzIGluIHRoZSBjaGFuZ2VzZXQgd2l0aCAtUyBvciAtRyIKK21zZ3N0ciAidmlzYSBhbGxhIMOkbmRyaW5nYXIgaSDDpG5kcmluZ3N1cHBzw6R0dG5pbmdlbiBtZWQgLVMgZWxsZXIgLUciCisKKyM6IGRpZmYuYzo1NDk4Cittc2dpZCAidHJlYXQgPHN0cmluZz4gaW4gLVMgYXMgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9uIgorbXNnc3RyICJ0b2xrYSA8c3Ryw6RuZz4gaSAtUyBzb20gdXTDtmthZGUgUE9TSVgtcmVndWxqw6RyYSB1dHRyeWNrIgorCisjOiBkaWZmLmM6NTUwMQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJzdHlyIG9yZG5pbmdlbiBpIHZpbGtlbiBmaWxlciB2aXNhcyBpIHV0ZGF0YSIKKworIzogZGlmZi5jOjU1MDIKK21zZ2lkICI8b2JqZWN0LWlkPiIKK21zZ3N0ciAiPG9iamVrdC1pZD4iCisKKyM6IGRpZmYuYzo1NTAzCiBtc2dpZCAiIgotIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCi0iYmVmb3JlIGNvbW1pdHRpbmcuXG4iCi1tc2dzdHIgIiIKLSJPc2FtbWFuc2xhZ25hIGZpbGVyIGthbiBpbnRlIGNoZWNrYXMgaW4uXG4iCi0iXG4iCi0iRmlsZW4gJXMgaGFyIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIuIER1IG3DpXN0ZSBsw7ZzYSBkZW0gb2NoIGvDtmEgZmlsZW4gIgotImlubmFuIGR1IGNoZWNrYXIgaW4gZGVuLlxuIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisib2JqZWN0IgorbXNnc3RyICJzZSBlZnRlciDDpG5kcmluZ2FyIHNvbSDDpG5kcmFyIGFudGFsZXQgZsO2cmVrb21zdGVyIGF2IGFuZ2l2ZXQgb2JqZWt0IgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODEKLSMsIHRjbC1mb3JtYXQKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAidsOkbGogZmlsdGVyIGVmdGVyIGRpZmYtdHlwIgorCisjOiBkaWZmLmM6NTUwOAorbXNnaWQgIjxmaWxlPiIKK21zZ3N0ciAiPGZpbD4iCisKKyM6IGRpZmYuYzo1NTA5Cittc2dpZCAiT3V0cHV0IHRvIGEgc3BlY2lmaWMgZmlsZSIKK21zZ3N0ciAiU2tyaXYgdXRkYXRhIHRpbGwgZW4gc3BlY2lmaWsgZmlsIgorCisjOiBkaWZmLmM6NjE2NAorbXNnaWQgImluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiB3YXMgc2tpcHBlZCBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisib27Dtmpha3RpZyBuYW1uYnl0ZXNkZXRla3RlcmluZyB1dGbDtnJkZXMgaW50ZSBww6UgZ3J1bmQgYXYgZsO2ciBtw6VuZ2EgZmlsZXIuIgorCisjOiBkaWZmLmM6NjE2NworbXNnaWQgIm9ubHkgZm91bmQgY29waWVzIGZyb20gbW9kaWZpZWQgcGF0aHMgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiaGl0dGFkZSBiYXJhIGtvcGlvciBmcsOlbiDDpG5kcmFkZSBzw7ZrdsOkZ2FyIHDDpSBncnVuZCBhdiBmw7ZyIG3DpW5nYSBmaWxlci4iCisKKyM6IGRpZmYuYzo2MTcwCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCi0iXG4iCi0iRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKKyJ5b3UgbWF5IHdhbnQgdG8gc2V0IHlvdXIgJXMgdmFyaWFibGUgdG8gYXQgbGVhc3QgJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiIKIG1zZ3N0ciAiIgotIk9rw6RuZCBmaWxzdGF0dXMgJXMgdXBwdMOkY2t0LlxuIgotIlxuIgotIkZpbGVuICVzIGthbiBpbnRlIGNoZWNrYXMgaW4gYXYgcHJvZ3JhbW1ldC5cbiIKKyJkdSBrYW4gc8OkdHRhIHZhcmlhYmVsbiAlcyB0aWxsIMOldG1pbnN0b25lICVkIG9jaCBmw7Zyc8O2a2Ega29tbWFuZG90IHDDpSBueXR0LiIKIAotIzogbGliL2NvbW1pdC50Y2w6MTg5CisjOiBkaXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAic8O2a3bDpGdzYW5naXZlbHNlbiBcIiVzXCIgbW90c3ZhcmFkZSBpbnRlIG7DpWdyYSBhdiBnaXQga8OkbmRhIGZpbGVyIgorCisjOiBkaXIuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHBhdHRlcm46ICclcyciCittc2dzdHIgIm9rw6RudCBtw7Zuc3RlcjogJXMiCisKKyM6IGRpci5jOjY4MiBkaXIuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm46ICclcyciCittc2dzdHIgIm9rw6RudCBuZWdhdGl2dCBtw7Zuc3RlcjogJXMiCisKKyM6IGRpci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBoYXZlIGlzc3VlczogcGF0dGVybiAnJXMnIGlzIHJlcGVhdGVkIgorbXNnc3RyICIiCisiZGluIFwic3BhcnNlLWNoZWNrb3V0XCItZmlsIGthbiBoYSBwcm9ibGVtOiBtw7Zuc3RyZXQgXCIlc1wiIGbDtnJla29tbWVyIGZsZXJhICIKKyJnw6VuZ2VyIgorCisjOiBkaXIuYzo3MjQKK21zZ2lkICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorbXNnc3RyICJpbmFrdGl2ZXJhciBrb25tw7Zuc3Rlcm1hdGNobmluZyIKKworIzogZGlyLmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdXNlICVzIGFzIGFuIGV4Y2x1ZGUgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgYW52w6RuZGEgJXMgc29tIGV4a2x1ZGVyaW5nc2ZpbCIKKworIzogZGlyLmM6MjA3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEga2F0YWxvZ2VuIFwiJXNcIiIKKworIzogZGlyLmM6MjQxNQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICJtaXNzbHlja2FkZXMgaMOkbXRhIGvDpHJuYW5zIG5hbW4gb2NoIGluZm9ybWF0aW9uIgorCisjOiBkaXIuYzoyNTM5Cittc2dpZCAidW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtIG9yIGxvY2F0aW9uIgorbXNnc3RyICJvc3DDpXJhZCBjYWNoZSDDpHIgaW5ha3RpdmVyYWQgcMOlIHN5c3RlbWV0IGVsbGVyIHBsYXRzZW4iCisKKyM6IGRpci5jOjMzNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IGluIHJlcG8gJXMiCittc2dzdHIgImluZGV4ZmlsZW4gdHJhc2lnIGkgYXJraXZldCAlcyIKKworIzogZGlyLmM6MzM4OCBkaXIuYzozMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGthdGFsb2dlciBmw7ZyICVzIgorCisjOiBkaXIuYzozNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgImt1bmRlIGludGUgbWlncmVyYSBnaXQta2F0YWxvZyBmcsOlbiBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IGVkaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgInRpcHM6IFbDpG50YXIgcMOlIGF0dCB0ZXh0cmVkaWdlcmluZ3Nwcm9ncmFtbWV0IHNrYWxsIHN0w6RuZ2EgZmlsZW4uLi4lYyIKKworIzogZW50cnkuYzoxNzgKK21zZ2lkICJGaWx0ZXJpbmcgY29udGVudCIKK21zZ3N0ciAiRmlsdHJlcmFyIGlubmVow6VsbCIKKworIzogZW50cnkuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIHN0YXR1cyBww6UgZmlsZW4gXCIlc1wiIgorCisjOiBlbnZpcm9ubWVudC5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2l0IG5hbWVzcGFjZSBwYXRoIFwiJXNcIiIKK21zZ3N0ciAiZmVsYWt0aWcgZ2l0LW5hbW5yeW1kc3PDtmt2w6RnIFwiJXNcIiIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgImt1bmRlIGludGUgc3TDpGxsYSBpbiBHSVRfRElSIHRpbGwgXCIlc1wiIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZmxhZ2dvciBmw7ZyIGF0dCBrw7ZyYSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjE1MAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBmw7ZydsOkbnRhZGUgZ3J1bmQgbGlzdGEiCisKKyM6IGZldGNoLXBhY2suYzoxNTMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogZsO2cnbDpG50YWRlIGV0dCBmbHVzaC1wYWtldCBlZnRlciBncnVuZCBsaXN0YSIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBmw7ZydsOkbnRhZGUgQUNLL05BSywgZmljayBmbHVzaC1wYWtldCIKKworIzogZmV0Y2gtcGFjay5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBmw7ZydsOkbnRhZGUgQUNLL05BSywgZmljayBcIiVzXCIiCisKKyM6IGZldGNoLXBhY2suYzoxOTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSB0aWxsIGZqw6RycmVuIgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIGtyw6R2ZXIgXCJtdWx0aV9hY2tfZGV0YWlsZWRcIiIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIm9naWx0aWcgXCJzaGFsbG93XCItcmFkOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2MiBmZXRjaC1wYWNrLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAib2dpbHRpZyBcInVuc2hhbGxvd1wiLXJhZDogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjQgZmV0Y2gtcGFjay5jOjEzNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IG5vdCBmb3VuZDogJXMiCittc2dzdHIgIm9iamVrdGV0IGhpdHRhZGVzIGludGU6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY3IGZldGNoLXBhY2suYzoxMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluIG9iamVjdDogJXMiCittc2dzdHIgImZlbCBpIG9iamVrdDogJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjkgZmV0Y2gtcGFjay5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2hhbGxvdyBmb3VuZDogJXMiCittc2dzdHIgImluZ2VuIFwic2hhbGxvd1wiIGhpdHRhZGVzOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MiBmZXRjaC1wYWNrLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICJmw7ZydsOkbnRhZGUgc2hhbGxvdy91bnNoYWxsb3csIGZpY2sgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICJmaWNrICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICJvZ2lsdGlnIGluY2hlY2tuaW5nICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDYyCittc2dpZCAiZ2l2aW5nIHVwIgorbXNnc3RyICJnZXIgdXBwIgorCisjOiBmZXRjaC1wYWNrLmM6NDc1IHByb2dyZXNzLmM6MzIzCittc2dpZCAiZG9uZSIKK21zZ3N0ciAia2xhcnQiCisKKyM6IGZldGNoLXBhY2suYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICglZCkgJXMiCittc2dzdHIgImZpY2sgJXMgKCVkKSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICJNYXJrZXJhciAlcyBzb20ga29tcGxldHQiCisKKyM6IGZldGNoLXBhY2suYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxyZWFkeSBoYXZlICVzICglcykiCittc2dzdHIgImhhciByZWRhbiAlcyAoJXMpIgorCisjOiBmZXRjaC1wYWNrLmM6ODE4Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImZldGNoLXBhdGNoOiBrdW5kZSBpbnRlIGdyZW5hIGF2IHNpZGJhbmRzbXVsdGlwbGV4YXJlIgorCisjOiBmZXRjaC1wYWNrLmM6ODI2Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIKK21zZ3N0ciAicHJvdG9rb2xsZmVsOiBmZWxha3RpZ3QgcGFja2h1dnVkIgorCisjOiBmZXRjaC1wYWNrLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiAlcyIKK21zZ3N0ciAiZmV0Y2gtcGF0Y2g6IGt1bmRlIGludGUgZ3JlbmEgYXYgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyBtaXNzbHlja2FkZXMiCisKKyM6IGZldGNoLXBhY2suYzo5MTgKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZWwgaSBzaWRiYW5kcy1hdm11bHRpcGxleGFyZSIKKworIzogZmV0Y2gtcGFjay5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbiBpcyAlLipzIgorbXNnc3RyICJTZXJ2ZXJ2ZXJzaW9uZW4gw6RyICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5NzAgZmV0Y2gtcGFjay5jOjk3NiBmZXRjaC1wYWNrLmM6OTc5IGZldGNoLXBhY2suYzo5ODUKKyM6IGZldGNoLXBhY2suYzo5ODkgZmV0Y2gtcGFjay5jOjk5MyBmZXRjaC1wYWNrLmM6OTk3IGZldGNoLXBhY2suYzoxMDAxCisjOiBmZXRjaC1wYWNrLmM6MTAwNSBmZXRjaC1wYWNrLmM6MTAwOSBmZXRjaC1wYWNrLmM6MTAxMyBmZXRjaC1wYWNrLmM6MTAxNworIzogZmV0Y2gtcGFjay5jOjEwMjMgZmV0Y2gtcGFjay5jOjEwMjkgZmV0Y2gtcGFjay5jOjEwMzQgZmV0Y2gtcGFjay5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzICVzIgorbXNnc3RyICJTZXJ2ZXJuIHN0w7ZkZXIgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIlNlcnZlcm4gc3TDtmRlciBpbnRlIGtsaWVudGVyIG1lZCBncnVuZGEgYXJraXYiCisKKyM6IGZldGNoLXBhY2suYzoxMDMyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LXNpbmNlIgorbXNnc3RyICJTZXJ2ZXJuIHN0w7ZkZXIgaW50ZSAtLXNoYWxsb3ctc2luY2UiCisKKyM6IGZldGNoLXBhY2suYzoxMDM3Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LWV4Y2x1ZGUiCittc2dzdHIgIlNlcnZlcm4gc3TDtmRlciBpbnRlIC0tc2hhbGxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICJTZXJ2ZXJuIHN0w7ZkZXIgaW50ZSAtLWRlZXBlbiIKKworIzogZmV0Y2gtcGFjay5jOjEwNTgKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAiaW5nYSBnZW1lbnNhbW1hIGluY2hlY2tuaW5nYXIiCisKKyM6IGZldGNoLXBhY2suYzoxMDcwIGZldGNoLXBhY2suYzoxNTM2Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iCittc2dzdHIgImdpdCBmZXRjaC1wYXRjaDogaMOkbXRuaW5nIG1pc3NseWNrYWRlcy4iCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIGludGUgZ3J1bmRhIGbDtnJmcsOlZ25pbmdhciIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICJTZXJ2ZXJuIHN0w7ZkZXIgZmlsdGVyIgorCisjOiBmZXRjaC1wYWNrLmM6MTIzOQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXF1ZXN0IHRvIHJlbW90ZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgYW5yb3AgdGlsbCBmasOkcnJlbiIKKworIzogZmV0Y2gtcGFjay5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyBzZWN0aW9uIGhlYWRlciAnJXMnIgorbXNnc3RyICJmZWwgdmlkIGzDpHNuaW5nIGF2IHN0eWNrZWh1dnVkZXQgXCIlc1wiIgorCisjOiBmZXRjaC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAnJXMnLCByZWNlaXZlZCAnJXMnIgorbXNnc3RyICJmw7ZydsOkbnRhZGUgXCIlc1wiLCB0b2cgZW1vdCBcIiVzXCIiCisKKyM6IGZldGNoLXBhY2suYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgYWNrbm93bGVkZ21lbnQgbGluZTogJyVzJyIKK21zZ3N0ciAiZsO2cnbDpG50YWRlIGJla3LDpGZ0ZWxzZXJhZDogXCIlc1wiIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGFja3M6ICVkIgorbXNnc3RyICJmZWwgdmlkIGhhbnRlcmluZyBhdiBiZWtyw6RmdGVsc2VyOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjEzMTgKK21zZ2lkICJleHBlY3RlZCBwYWNrZmlsZSB0byBiZSBzZW50IGFmdGVyICdyZWFkeSciCittc2dzdHIgInbDpG50YWRlIGF0dCBwYWtldGZpbCBza3VsbGUgc8OkbmRhcyBlZnRlciBcInJlYWR5XCIiCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICIiCisidsOkbnRhZGUgaW50ZSBhdHQgbsOlZ3JhIHl0dGVybGlnYXJlIHNla3Rpb25lciBza3VsbGUgc8OkbmRhcyBlZnRlciBcInJlYWR5XCIiCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAiZmVsIHZpZCBoYW50ZXJpbmcgYXYgZ3J1bmQgKFwic2hhbGxvd1wiKSBpbmZvOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgImbDtnJ2w6RudGFkZSB3YW50ZWQtcmVmLCBmaWNrICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIHdhbnRlZC1yZWY6ICclcyciCittc2dzdHIgIm92w6RudGFkIHdhbnRlZC1yZWY6IFwiJXNcIiIKKworIzogZmV0Y2gtcGFjay5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyB3YW50ZWQgcmVmczogJWQiCittc2dzdHIgImZlbCB2aWQgaGFudGVyaW5nIGF2IMO2bnNrYWRlIHJlZmVyZW5zZXI6ICVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICJpbmdldCBtb3RzdmFyYW5kZSBmasOkcnJodXZ1ZCIKKworIzogZmV0Y2gtcGFjay5jOjE3ODUgYnVpbHRpbi9jbG9uZS5jOjY4OAorbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICJmasOkcnJlbiBzw6RuZGUgaW50ZSBhbGxhIG7DtmR2w6RuZGlnYSBvYmpla3QiCisKKyM6IGZldGNoLXBhY2suYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAiaW5nZW4gc8OlZGFuIGZqw6RycmVmZXJlbnM6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MTgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCAlcyIKK21zZ3N0ciAiU2VydmVybiB0aWxsw6V0ZXIgaW50ZSBmw7ZyZnLDpWdhbiBvbSBlaiB0aWxsa8Okbm5hZ2l2ZXQgb2JqZWt0ICVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjIzCittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSB0ZW1wb3LDpHJhIGZpbCIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrcml2YSBmcmlzdMOlZW5kZSBzaWduYXR1ciB0aWxsIFwiJXNcIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjM5MAorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIG1pc3NseWNrYWRlcyBzaWduZXJhIGRhdGEiCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAiaWdub3JlcmEgZmVsYWt0aWcgZsOkcmcgXCIlLipzXCIgaSBsb2cuZ3JhcGhDb2xvcnMiCisKKyM6IGdyZXAuYzo2NjgKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKKyJnaXZlbiBwYXR0ZXJuIGNvbnRhaW5zIE5VTEwgYnl0ZSAodmlhIC1mIDxmaWxlPikuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgIgorIndpdGggLVAgdW5kZXIgUENSRSB2MiIKIG1zZ3N0ciAiIgotIkluZ2Egw6RuZHJpbmdhciBhdHQgY2hlY2thIGluLlxuIgotIlxuIgotIkR1IG3DpXN0ZSBrw7ZhIMOldG1pbnN0b25lIGVuIGZpbCBpbm5hbiBkdSBrYW4gY2hlY2thIGluLlxuIgorImFuZ2l2ZXQgbcO2bnN0ZXIgaW5uZWjDpWxsZXIgTlVMTC1ieXRlICh2aWEgLWYgPGZpbD4pLiBEZXR0YSBzdMO2ZHMgZW5kYXN0IG1lZCAtIgorIlAgdW5kZXIgUENSRSB2MiIKIAotIzogbGliL2NvbW1pdC50Y2w6MjA0CisjOiBncmVwLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiXCIlc1wiIGt1bmRlIGludGUgbMOkc2EgJXMiCisKKyM6IGdyZXAuYzoyMTQxIHNldHVwLmM6MTY1IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIHN0YXR1cyBww6UgXCIlc1wiIgorCisjOiBncmVwLmM6MjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICJcIiVzXCI6IGtvcnQgbMOkc25pbmciCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJzdGFydGEgYXJiZXRza2F0YWxvZyAoc2Ugb2Nrc8OlOiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICJqb2JiYSBtZWQgYWt0dWVsbCBmw7Zyw6RuZHJpbmcgKHNlIG9ja3PDpTogZ2l0IGhlbHAgZXZlcnlkYXkpIgorCisjOiBoZWxwLmM6MjUKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgInV0Zm9yc2thIGhpc3RvcmlrZW4gb2NoIHRpbGxzdMOlbmRldCAoc2Ugb2Nrc8OlOiBnaXQgaGVscCByZXZpc2lvbnMpIgorCisjOiBoZWxwLmM6MjYKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICJ1dMO2a2EsIG1hcmtlcmEgb2NoIGp1c3RlcmEgZGluIGdlbWVuc2FtbWEgaGlzdG9yaWsiCisKKyM6IGhlbHAuYzoyNworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAic2FtYXJiZXRhIChzZSBvY2tzw6U6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJIdXZ1ZHNha2xpZ2EgcG9yc2xpbnNrb21tYW5kb24iCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAiVGlsbMOkZ2dza29tbWFuZG9uIC8gbWFuaXB1bGVyYXJlIgorCisjOiBoZWxwLmM6MzMKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICJUaWxsw6RnZ3Nrb21tYW5kb24gLyBmcsOlZ2FyZSIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIkludGVyYWt0aW9uIG1lZCBhbmRyYSIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJMw6Vnbml2w6Vrb21tYW5kb24gLyBtYW5pdXB1bGVyYXJlIgorCisjOiBoZWxwLmM6MzYKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICJMw6Vnbml2w6Vrb21tYW5kb24gLyBmcsOlZ2FyZSIKKworIzogaGVscC5jOjM3Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gU3luY2luZyBSZXBvc2l0b3JpZXMiCittc2dzdHIgIkzDpWduaXbDpWtvbW1hbmRvbiAvIHN5bmthIGFya2l2IgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICJMw6Vnbml2w6Vrb21tYW5kb24gLyBpbnRlcm5hIGhqw6RscGFyZSIKKworIzogaGVscC5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgImdpdC1rb21tYW5kb24gdGlsbGfDpG5nbGlnYSBpIFwiJXNcIiIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiZ2l0LWtvbW1hbmRvbiBmcsOlbiBhbmRyYSBwbGF0c2VyIGkgZGluICRQQVRIIgorCisjOiBoZWxwLmM6MzE0Cittc2dpZCAiVGhlc2UgYXJlIGNvbW1vbiBHaXQgY29tbWFuZHMgdXNlZCBpbiB2YXJpb3VzIHNpdHVhdGlvbnM6IgorbXNnc3RyICJEZXNzYSB2YW5saWdhIEdpdC1rb21tYW5kb24gYW52w6RuZHMgaSBvbGlrYSBzaXR1YXRpb25lcjoiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAib2vDpG5kIGtvbW1hbmRvbGlzdHR5cCBcIiVzXCIiCisKKyM6IGhlbHAuYzo0MDMKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAiRGUgdmFubGlnYSBHaXQtdsOkZ2xlZG5pbmdhcm5hIMOkcjoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIlNlIFwiZ2l0IGhlbHAgPGtvbW1hbmRvPlwiIGbDtnIgYXR0IGzDpHNhIG9tIGV0dCBzcGVjaWZpa3QgdW5kZXJrb21tYW5kbyIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICJFeHRlcm5hIGtvbW1hbmRvbiIKKworIzogaGVscC5jOjUzMgorbXNnaWQgIkNvbW1hbmQgYWxpYXNlcyIKK21zZ3N0ciAiS29tbWFkb2FsaWFzIgorCisjOiBoZWxwLmM6NTk2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCi0iXG4iCi0iQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKLSJcbiIKLSItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCi0iLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKLSItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCiBtc2dzdHIgIiIKLSJBbmdlIGV0dCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLlxuIgotIlxuIgotIkV0dCBicmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBoYXIgZsO2bGphbmRlIGZvcm1hdDpcbiIKLSJcbiIKLSItIEbDtnJzdGEgcmFkZW46IEJlc2tyaXYgaSBlbiBtZW5pbmcgdmFkIGR1IGdqb3JkZS5cbiIKLSItIEFuZHJhIHJhZGVuOiBUb21cbiIKLSItIEbDtmxqYW5kZSByYWRlcjogQmVza3JpdiB2YXJmw7ZyIGRldCBow6RyIMOkciBlbiBicmEgw6RuZHJpbmcuXG4iCisiXCIlc1wiIHZlcmthciB2YXJhIGV0dCBnaXQta29tbWFuZG8sIG1lbiB2aSBrYW4gaW50ZVxuIgorImvDtnJhIGRldC4gS2Fuc2tlIGdpdC0lcyDDpHIgdHJhc2lndD8iCiAKLSM6IGxpYi9jb21taXQudGNsOjIzNQotbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgotbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyZSBpbmNoZWNrbmluZyAocHJlLWNvbW1pdCkuLi4iCisjOiBoZWxwLmM6NjU1Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIk9qIGTDpS4gRGl0dCBzeXN0ZW0gcmFwcG9ydGVyYXIgaW5nYSBHaXQta29tbWFuZG9uIGFsbHMuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyNTAKLW1zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKLW1zZ3N0ciAiSW5jaGVja25pbmdlbiBhdnZpc2FkZXMgYXYga3Jva2VuIGbDtnJlIGluY2hlY2tuaW5nIChwcmUtY29tbWl0KS4iCisjOiBoZWxwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIlZBUk5JTkc6IER1IGFucm9wYWRlIGV0dCBHaXQta29tbWFuZG8gdmlkIG5hbW4gXCIlc1wiLCBzb20gaW50ZSBmaW5ucy4iCiAKLSM6IGxpYi9jb21taXQudGNsOjI2OQorIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJGb3J0c8OkdHRlciB1bmRlciBmw7ZydXRzw6R0dG5pbmdlbiBhdHQgZHUgbWVuYWRlIFwiJXNcIi4iCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAiIgorIkZvcnRzw6R0dGVyIG9tICUwLjFmIHNla3VuZGVyLCB1bmRlciBmw7ZydXRzw6R0dG5pbmdlbiBhdHQgZHUgbWVuYWRlIFwiJXNcIi4iCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiBcIiVzXCIgw6RyIGludGUgZXR0IGdpdC1rb21tYW5kby4gU2UgXCJnaXQgLS1oZWxwXCIuIgorCisjOiBoZWxwLmM6Njk5CiBtc2dpZCAiIgotIllvdSBhcmUgYWJvdXQgdG8gY29tbWl0IG9uIGEgZGV0YWNoZWQgaGVhZC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyAiCi0idGhpbmcgdG8gZG8gYmVjYXVzZSBpZiB5b3Ugc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoIHlvdSB3aWxsIGxvc2UgeW91ciAiCi0iY2hhbmdlcyBhbmQgaXQgY2FuIGJlIGRpZmZpY3VsdCB0byByZXRyaWV2ZSB0aGVtIGxhdGVyIGZyb20gdGhlIHJlZmxvZy4gWW91ICIKLSJzaG91bGQgcHJvYmFibHkgY2FuY2VsIHRoaXMgY29tbWl0IGFuZCBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIGNvbnRpbnVlLlxuIgotIiBcbiIKLSIgRG8geW91IHJlYWxseSB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIENvbW1pdD8iCi1tc2dzdHIgIiIKLSJEdSDDpHIgcMOlIHbDpGcgYXR0IGNoZWNrYSBpbiBww6UgZXR0IGZyw6Vua29wcGxhdCBodXZ1ZC4gRGV0IGthbiBwb3RlbnRpZWxsdCAiCi0idmFyYSBmYXJsaWd0LCBlZnRlcnNvbSBkdSBrb21tZXIgZsO2cmxvcmEgZGluYSDDpG5kcmluZ2FyIG9tIGR1IHbDpHhsYXIgdGlsbCBlbiAiCi0iYW5uYW4gZ3JlbiBvY2ggZGV0IGthbiB2YXJhIHN2w6VydCBhdHQgaMOkbXRhIGRlbSBzZW5hcmUgZnLDpW4gcmVmLWxvZ2dlbi4gRHUgIgotImLDtnIgdHJvbGlnZW4gYXZicnl0YSBpbmNoZWNrbmluZ2VuIG9jaCBza2FwYSBlbiBueSBncmVuIGbDtnIgYXR0IGZvcnRzw6R0dGEuXG4iCi0iIFxuIgotIiBWaWxsIGR1IHZlcmtsaWdlbiBmb3J0c8OkdHRhIGNoZWNrYSBpbj8iCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kIGlzIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kcyBhcmUiCittc2dzdHJbMF0gIiIKKyJcbiIKKyJNZXN0IGxpa3Qga29tbWFuZG8gw6RyIgorbXNnc3RyWzFdICIiCisiXG4iCisiTWVzdCBsaWthIGtvbW1hbmRvbiDDpHIiCiAKLSM6IGxpYi9jb21taXQudGNsOjI5MAotbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKGNvbW1pdC1tc2cpLi4uIgorIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPGZsYWdnb3I+XSIKIAotIzogbGliL2NvbW1pdC50Y2w6MzA1Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgIkluY2hlY2tuaW5nIGF2dmlzYWQgYXYga3Jva2VuIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAoY29tbWl0LW1zZykuIgorIzogaGVscC5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCiAKLSM6IGxpYi9jb21taXQudGNsOjMxOAotbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKLW1zZ3N0ciAiQ2hlY2thciBpbiDDpG5kcmluZ2FyLi4uIgotCi0jOiBsaWIvY29tbWl0LnRjbDozMzQKLW1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCi1tc2dzdHIgIndyaXRlLXRyZWUgbWlzc2x5Y2thZGVzOiIKLQotIzogbGliL2NvbW1pdC50Y2w6MzM1IGxpYi9jb21taXQudGNsOjM3OSBsaWIvY29tbWl0LnRjbDo0MDAKLW1zZ2lkICJDb21taXQgZmFpbGVkLiIKLW1zZ3N0ciAiSW5jaGVja25pbmdlbiBtaXNzbHlja2FkZXMuIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgotbXNnc3RyICJJbmNoZWNrbmluZ2VuICVzIHZlcmthciB2YXJhIHRyYXNpZyIKLQotIzogbGliL2NvbW1pdC50Y2w6MzU3CisjOiBoZWxwLmM6Nzg3CiBtc2dpZCAiIgotIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgogIlxuIgotIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCiAiXG4iCi0iQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgotbXNnc3RyICIiCi0iSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKICJcbiIKLSJJbmdhIGZpbGVyIMOkbmRyYWRlcyBhdiBpbmNoZWNrbmluZ2VuIG9jaCBkZXQgdmFyIGludGUgZW4gc2FtbWFuc2xhZ25pbmcuXG4iCisiTWVuYWRlIGR1IGRldHRhPyIKK21zZ3N0clsxXSAiIgogIlxuIgotIkVuIHPDtmtuaW5nIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKKyJNZW5hZGUgZHUgZXR0IGF2IGRlc3NhPyIKIAotIzogbGliL2NvbW1pdC50Y2w6MzY0Ci1tc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgotbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbi4iCi0KLSM6IGxpYi9jb21taXQudGNsOjM3OAotbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCi1tc2dzdHIgImNvbW1pdC10cmVlIG1pc3NseWNrYWRlczoiCi0KLSM6IGxpYi9jb21taXQudGNsOjM5OQotbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKLW1zZ3N0ciAidXBkYXRlLXJlZiBtaXNzbHlja2FkZXM6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo0OTIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCi1tc2dzdHIgIlNrYXBhZGUgaW5jaGVja25pbmdlbiAlczogJXMiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgotbXNnaWQgIkRlbGV0ZSBCcmFuY2giCi1tc2dzdHIgIlRhIGJvcnQgZ3JlbiIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIxCi1tc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiVGEgYm9ydCBsb2thbCBncmVuIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKLW1zZ2lkICJMb2NhbCBCcmFuY2hlcyIKLW1zZ3N0ciAiTG9rYWxhIGdyZW5hciIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUxCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCi1tc2dzdHIgIlRhIGJhcmEgYm9ydCBvbSBzYW1tYW5zbGFnZW4gbWVkIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgotbXNnc3RyICJGw7ZsamFuZGUgZ3JlbmFyIMOkciBpbnRlIHRpbGwgZnVsbG8gc2FtbWFuc2xhZ25hIG1lZCAlczoiCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKLSMsIHRjbC1mb3JtYXQKKyM6IGlkZW50LmM6MzQ5CiBtc2dpZCAiIgotIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCi0iJXMiCisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50J3MgZGVmYXVsdCBpZGVudGl0eS5cbiIKKyJPbWl0IC0tZ2xvYmFsIHRvIHNldCB0aGUgaWRlbnRpdHkgb25seSBpbiB0aGlzIHJlcG9zaXRvcnkuXG4iCisiXG4iCiBtc2dzdHIgIiIKLSJLdW5kZSBpbnRlIHRhIGJvcnQgZ3JlbmFyOlxuIgotIiVzIgorIlxuIgorIioqKiBWw6RubGlnZW4gYmVyw6R0dGEgdmVtIGR1IMOkci5cbiIKKyJcbiIKKyJLw7ZyXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJkdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIkRpdHQgTmFtblwiXG4iCisiXG4iCisiZsO2ciBhdHQgc3TDpGxsYSBpbiBkaXR0IGtvbnRvcyBzdGFuZGFyZGlkZW50aXRldC5cbiIKKyJLw7ZyIHV0YW4gLS1nbG9iYWwgZsO2ciBhdHQgZW5kYXN0IMOkbmRyYSBpIGFrdHVlbGx0IGFya2l2LlxuIgorIlxuIgogCi0jOiBsaWIvaW5kZXgudGNsOjYKLW1zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCi1tc2dzdHIgIkt1bmRlIGludGUgbMOlc2EgdXBwIGluZGV4ZXQuIgorIzogaWRlbnQuYzozNzkKK21zZ2lkICJubyBlbWFpbCB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICJpbmdlbiBlLXBvc3QgYW5nYXZzIG9jaCBhdXRvZGV0ZWt0ZXJpbmcgw6RyIGluYWt0aXZlcmFkIgogCi0jOiBsaWIvaW5kZXgudGNsOjE3Ci1tc2dpZCAiSW5kZXggRXJyb3IiCi1tc2dzdHIgIkluZGV4ZmVsIgorIzogaWRlbnQuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAia3VuZGUgaW50ZSBhdXRvZGV0ZWt0ZXJhIGUtcG9zdGFkcmVzcyAoZmljayBcIiVzXCIpIgogCi0jOiBsaWIvaW5kZXgudGNsOjE5CisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAiaW5nZXQgbmFtbiBhbmdhdnMgb2NoIGF1dG9kZXRla3RlcmluZyDDpHIgaW5ha3RpdmVyYWQiCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgImt1bmRlIGludGUgYXV0b2RldGVrdGVyYSBuYW1uIChmaWNrIFwiJXNcIikiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAidG9tdCBpZGVudC1uYW1uIChmw7ZyIDwlcz4pIGVqIHRpbGzDpXRldCIKKworIzogaWRlbnQuYzo0MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZSBjb25zaXN0cyBvbmx5IG9mIGRpc2FsbG93ZWQgY2hhcmFjdGVyczogJXMiCittc2dzdHIgIm5hbW5ldCBiZXN0w6VyIGVuYmFydCBhdiBlaiB0aWxsw6V0bmEgdGVja2VuOiAlcyIKKworIzogaWRlbnQuYzo0MzYgYnVpbHRpbi9jb21taXQuYzo2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgImZlbGFrdGlndCBkYXR1bWZvcm1hdDogJXMiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIHRyZWUgbW9kZSwgYnV0IGlzIG5vdCBhIHRyZWUiCittc2dzdHIgInBvc3RlbiBcIiVzXCIgaSB0csOkZGV0ICVzIGhhciB0csOkZC1sw6RnZSwgbWVuIMOkciBpbnRlIGV0dCB0csOkZCIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAicG9zdGVuIFwiJXNcIiBpIHRyw6RkZXQgJXMgaGFyIGJsb2ItbMOkZ2UsIG1lbiDDpHIgaW50ZSBlbiBibG9iIgorCisjOiBsaXN0LW9iamVjdHMuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgcm9vdCB0cmVlIGZvciBjb21taXQgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgaW4gcm90LXRyw6RkZXQgZsO2ciBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLmM6NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3Mgc3BhcnNlIGJsb2IgaW4gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBuw6UgZ2xlcyBibG9iIHDDpSBcIiVzXCIiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBnbGVzIGZpbHRlcmRhdGEgaSAlcyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NTgKK21zZ2lkICJleHBlY3RlZCAndHJlZTo8ZGVwdGg+JyIKK21zZ3N0ciAiZsO2cnbDpG50YWRlIFwidHJlZTo8ZGp1cD5cIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAic3BhcnNlOnPDtmt2w6RnLWZpbHRlciBzdMO2ZHMgaW50ZSBsw6RuZ3JlIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciCittc2dzdHIgImZlbGFrdGlnIGZpbHRlcnNwZWNpZmlrYXRpb246IFwiJXNcIiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorbXNnc3RyICJtw6VzdGUgYW52w6RuZGEgc3BlY2lhbHNla3ZlbnMgaSBkZWxmaWx0ZXItc3BlYzogXCIlY1wiIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgImbDtnJ2w6RudGFkZSBuw6Vnb250aW5nIGVmdGVyIGNvbWJpbmU6IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoyMjYKK21zZ2lkICJtdWx0aXBsZSBmaWx0ZXItc3BlY3MgY2Fubm90IGJlIGNvbWJpbmVkIgorbXNnc3RyICJmbGVyYSBmaWx0ZXJzcGVjaWZpa2F0aW9uZXIga2FuIGludGUga29tYmluZXJhcyIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgotInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgogbXNnc3RyICIiCi0iTWlzc2x5Y2thZGVzIG1lZCBhdHQgdXBwZGF0ZXJhIEdpdGluZGV4ZXQuIEVuIG9tc8O2a25pbmcga29tbWVyIGF0dCBzdGFydGFzICIKLSJhdXRvbWF0aXNrdCBmw7ZyIGF0dCBzeW5rcm9uaXNlcmEgb20gZ2l0LWd1aS4iCisiS3VuZGUgaW50ZSBza2FwYSBcIiVzLmxvY2tcIjogJXMuXG4iCisiXG4iCisiRGV0IHZlcmthciBzb20gZW4gYW5uYW4gZ2l0LXByb2Nlc3Mga8O2ciBpIGRldCBow6RyIGFya2l2ZXQsIHQuZXguXG4iCisiZXR0IHRleHRyZWRpZ2VyaW5nc3Byb2dyYW0gc3RhcnRhdCBhdiBcImdpdCBjb21taXRcIi4gU2UgdGlsbCBhdHRcbiIKKyJhbGxhIHByb2Nlc3NlciBhdnNsdXRhdHMgb2NoIGbDtnJzw7ZrIHNlZGFuIGlnZW4uIE9tIGRldCBmb3J0ZmFyYW5kZVxuIgorIm1pc3NseWNrYXMga2Fuc2tlIGVuIGdpdC1wcm9jZXNzIGhhciBrcmFzY2hhdCBpIGRldCBow6RyIGFya2l2ZXRcbiIKKyJ0aWRpZ2FyZTpcbiIKKyJ0YSBib3J0IGZpbGVuIG1hbnVlbGx0IGbDtnIgYXR0IGZvcnRzw6R0dGEuIgogCi0jOiBsaWIvaW5kZXgudGNsOjMwCi1tc2dpZCAiQ29udGludWUiCi1tc2dzdHIgIkZvcnRzw6R0dCIKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza2FwYSBcIiVzLmxvY2tcIjogJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzMKLW1zZ2lkICJVbmxvY2sgSW5kZXgiCi1tc2dzdHIgIkzDpXMgdXBwIGluZGV4IgorIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhIGNhY2hlbiIKIAotIzogbGliL2luZGV4LnRjbDoyOTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCi1tc2dzdHIgIlRhciBib3J0ICVzIGbDtnIgaW5jaGVja25pbmdza8O2biIKKyM6IG1lcmdlLmM6MTA3IHJlcmVyZS5jOjcyMCBidWlsdGluL2FtLmM6MTg3NCBidWlsdGluL2FtLmM6MTkwOAorIzogYnVpbHRpbi9jaGVja291dC5jOjUzOSBidWlsdGluL2NoZWNrb3V0LmM6Nzk4IGJ1aWx0aW4vY2xvbmUuYzo4MDkKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNjQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIG55IGluZGV4ZmlsIgogCi0jOiBsaWIvaW5kZXgudGNsOjMzNwotbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCi1tc2dzdHIgIlJlZG8gYXR0IGNoZWNrYSBpbi4iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjcKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAiKGZlbGFrdGlnIGluY2hlY2tuaW5nKVxuIgogCi0jOiBsaWIvaW5kZXgudGNsOjM1MAotIywgdGNsLWZvcm1hdAorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorImFkZF9jYWhjZWluZm8gbWlzc2x5Y2thZGVzIGbDtnIgc8O2a3bDpGdlbiBcIiVzXCI7IGF2c2x1dGFyIHNhbW1hbnNsYWduaW5nZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgdG8gcmVmcmVzaCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgIiIKKyJhZGRfY2FjaGVpbmZvIG1pc3NseWNrYWRlcyB1cHBkYXRlcmEgZsO2ciBzw7ZrdsOkZ2VuIFwiJXNcIjsgYXZzbHV0YXIgIgorInNhbW1hbnNsYWduaW5nZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIHPDtmt2w6RnZW4gXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICJUYXIgYm9ydCAlcyBmw7ZyIGF0dCBnw7ZyYSBwbGF0cyBmw7ZyIHVuZGVya2F0YWxvZ1xuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MTAgbWVyZ2UtcmVjdXJzaXZlLmM6OTI5Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiBrYW5za2UgZW4gSy9GLWtvbmZsaWt0PyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAidsOkZ3JhciBmw7ZybG9yYSBvc3DDpXJhZCBmaWwgdmlkIFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTYwIGJ1aWx0aW4vY2F0LWZpbGUuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egb2JqZWt0ZXQgJXM6IFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgImJsb2IgZsO2cnbDpG50YWRlcyBmw7ZyICVzIFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyc6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIFwiJXNcIjogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBzeW1ib2xpc2thIGzDpG5rZW4gXCIlc1wiOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAwNgorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICJ2ZXQgaW50ZSBodXIgJTA2byAlcyBcIiVzXCIgc2thbGwgaGFudGVyYXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHNsw6UgaWhvcCB1bmRlcm1vZHVsZW4gJXMgKGVqIHV0Y2hlY2thZCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIk1pc3NseWNrYWRlcyBzbMOlIGlob3AgdW5kZXJtb2R1bGVuICVzIChpbmNoZWNrbmluZ2FyIHNha25hcykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBkb24ndCBmb2xsb3cgbWVyZ2UtYmFzZSkiCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgc2zDpSBpaG9wIHVuZGVybW9kdWxlbiAlcyAoaW5jaGVja25pbmdhciBmw7ZsamVyIGludGUgIgorInNhbW1hbnNsYWduaW5nc2Jhc2VuKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyMSBtZXJnZS1yZWN1cnNpdmUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICJTbmFiYnNwb2xhciB1bmRlcm1vZHVsZW4gJXMgdGlsbCBmw7ZsamFuZGUgaW5jaGVja25pbmc6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI0IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiU25hYmJzcG9sYXIgdW5kZXJtb2R1bGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgc2zDpSBpaG9wIHVuZGVybW9kdWxlbiAlcyAoc2FtbWFuc2xhZ25pbmcgZWZ0ZXIgaW5jaGVja25pbmdhciAiCisiaGl0dGFkZXMgaW50ZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIk1pc3NseWNrYWRlcyBzbMOlIGlob3AgdW5kZXJtb2R1bGVuICVzIChlaiBzbmFiYnNwb2xuaW5nKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2NAorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAiSGl0dGFkZSBlbiBtw7ZqbGlnIGzDtnNuaW5nIGF2IHNhbW1hbnNsYWduaW5nIGbDtnIgdW5kZXJtb2R1bGVuOlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggZm9yIGV4YW1wbGVcbiIKKyJieSB1c2luZzpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIndoaWNoIHdpbGwgYWNjZXB0IHRoaXMgc3VnZ2VzdGlvbi5cbiIKK21zZ3N0ciAiIgorIk9tIGRldHRhIMOkciByaWt0aWd0IGzDpGdnZXIgZHUgYmFyYSB0aWxsIGRldCBpIGluZGV4ZXQsIHRpbGxcbiIKKyJleGVtcGVsIHPDpSBow6RyOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisidmlsa2V0IGdvZHRhciBsw7ZzbmluZ2VuLlxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG11bHRpcGxlIG1lcmdlcyBmb3VuZCkiCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgc2zDpSBpaG9wIHVuZGVybW9kdWxlbiAlcyAoZmxlcmEgc2FtbWFuc2xhZ25pbmdhciBoaXR0YWRlcykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDkKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGV4ZWt2ZXJhIGludGVybiBzYW1tYW5zbGFnbmluZyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsICVzIHRpbGwgZGF0YWJhc2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiU2zDpXIgaWhvcCAlcyBhdXRvbWF0aXNrdCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgd3JpdGluZyB0byAlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiRmVsOiBWw6RncmFyIGbDtnJsb3JhIG9zcMOlcmFkIGZpbCB2aWQgJXM7IHNrcml2ZXIgdGlsbCAlcyBpc3TDpGxsZXQuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMvcmFkZXJhKTogJXMgcmFkZXJhZCBpICVzIG9jaCAlcyBpICVzLiBWZXJzaW9uZW4gJXMgYXYgJXMgbMOkbW5hZCAiCisiaSB0csOkZGV0LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKCVzL3JhZGVyYSk6ICVzIHJhZGVyYWQgaSAlcyBvY2ggJXMgdGlsbCAlcyBpICVzLiBWZXJzaW9uZW4gJXMgYXYgIgorIiVzIGzDpG1uYWQgaSB0csOkZGV0LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKCVzL3JhZGVyYSk6ICVzIHJhZGVyYWQgaSAlcyBvY2ggJXMgaSAlcy4gVmVyc2lvbmVuICVzIGF2ICVzIGzDpG1uYWQgIgorImkgdHLDpGRldCB2aWQgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMvcmFkZXJhKTogJXMgcmFkZXJhZCBpICVzIG9jaCAlcyB0aWxsICVzIGkgJXMuIFZlcnNpb25lbiAlcyBhdiAiCisiJXMgbMOkbW5hZCBpIHRyw6RkZXQgdmlkICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUzNAorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAibmFtbmJ5dGUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJuYW1uYnl0dCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYxNCBtZXJnZS1yZWN1cnNpdmUuYzoyNTMwIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICJWw6RncmFyIGbDtnJsb3JhIGxvcnRpZyBmaWwgdmlkIFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzLCBldmVuIHRob3VnaCBpdCdzIGluIHRoZSB3YXkuIgorbXNnc3RyICJWw6RncmFyIGbDtnJsb3JhIG9zcMOlcmFkIGZpbCB2aWQgJXMsIHRyb3RzIGF0dCBkZW4gw6RyIGkgdsOkZ2VuLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIKK21zZ3N0ciAiS09ORkxJS1QgKG5hbW5ieXRlL3RpbGzDpGdnKTogTmFtbmJ5dGUgJXMtPiVzIGkgJXMuIExhZGUgdGlsbCAlcyBpICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyDDpHIgZW4ga2F0YWxvZyBpICVzIGzDpGdnZXIgdGlsbCBzb20gJXMgaXN0w6RsbGV0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJWw6RncmFyIGbDtnJsb3JhIG9zcMOlcmFkIGZpbCB2aWQgJXM7IGzDpGdnZXIgdGlsbCBzb20gJXMgaXN0w6RsbGV0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAobmFtbmJ5dGUvbmFtbmJ5dGUpOiBOYW1uYnl0ZSBcIiVzXCItPlwiJXNcIiBww6UgZ3JlbmVuIFwiJXNcIiAiCisibmFtbmJ5dGUgXCIlc1wiLT5cIiVzXCIgaSBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc0MgorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChsw6RtbmFkIG9sw7ZzdCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKG5hbW5ieXRlL25hbW5ieXRlKTogTmFtbmJ5dGUgJXMtPiVzIGkgJXMuIE5hbW5ieXRlICVzLT4lcyBpICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChuYW1uw6RuZHJhZCBkZWxhZCBrYXRhbG9nKTogT3PDpGtlciBww6UgdmFyICVzIHNrYWxsIHBsYWNlcmFzIGTDpSAiCisia2F0YWxvZ2VuICVzIGJ5dHRlIG5hbW4gdGlsbCBmbGVyYSBhbmRyYSBrYXRhbG9nZXIsIHV0YW4gYXR0IG7DpWdvbiAiCisiZGVzdGluYXRpb24gZmljayBlbiBtYWpvcml0ZXQgYXYgZmlsZXJuYS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogRXhpc3RpbmcgZmlsZS9kaXIgYXQgJXMgaW4gdGhlIHdheSBvZiAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZShzKSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcgcGF0aChzKSB0aGVyZTogJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKGltcGxpY2l0IG7DpG1uw6RuZHJhZCBrYXQpOiBCZWZpbnRsaWcgZmlsL2thdCB2aWQgJXMgw6RyIGkgdsOkZ2VuIGbDtnIgIgorImltcGxpY2l0IG5hbW7DpG5kcmFkKGUpIGthdGFsb2coZXIpIHNvbSBsw6RnZ2VyIGRpdCBmw7ZsamFuZGUgc8O2a3bDpGcoYXIpOiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogQ2Fubm90IG1hcCBtb3JlIHRoYW4gb25lIHBhdGggdG8gJXM7ICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyB0cmllZCB0byBwdXQgdGhlc2UgcGF0aHMgdGhlcmU6ICVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKGltcGxpY2l0IG5hbW7DpG5kcmFkIGthdCk6IEthbiBpbnRlIGtvcHBsYSBtZXIgw6RuIGVuIHPDtmt2w6RnIHRpbGwgIgorIiVzOyBpbXBsaWNpdGEga2F0YWxvZ25hbW7DpG5kcmluZ2FyIGbDtnJzw7ZrdGUgbMOkZ2dhIGbDtmxqYW5kZSBzw7ZrdsOkZ2FyIGTDpHI6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAobmFtbmJ5dGUvbmFtbmJ5dGUpOiBOYW1uYnl0dCBrYXRhbG9nICVzLT4lcyBpICVzLiBOYW1uYnl0dCBrYXRhbG9nICIKKyIlcy0+JXMgaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjQ5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgJXMgLT4gJXMgcmVuYW1lIHRvICVzLCBiZWNhdXNlICVzIGl0c2VsZiB3YXMgIgorInJlbmFtZWQuIgorbXNnc3RyICIiCisiVkFSTklORzogVW5kdmlrZXIgYXR0IGFwcGxpY2VyYSBuYW1uw6RuZHJpbmcgJXMgLT4gJXMgcMOlICVzLCBkw6UgJXMgc2rDpGx2IGhhciAiCisiYnl0dCBuYW1uLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIG9iamVrdGV0ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICJvYmpla3RldCAlcyDDpHIgaW50ZSBlbiBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICLDpG5kcmEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAiw6RuZHJhZCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5OAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgImlubmVow6VsbCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEwMgorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgInRpbGzDpGdnL3RpbGzDpGdnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAiSG9wcGFkZSDDtnZlciAlcyAoc2FtbWFuc2xhZ2VuIHNhbW1hIHNvbSBiZWZpbnRsaWcpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ3IGdpdC1zdWJtb2R1bGUuc2g6OTkzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJ1bmRlcm1vZHVsIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJLT05GTElLVCAoJXMpOiBTYW1tYW5zbGFnbmluZ3Nrb25mbGlrdCBpICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgc29tICVzIGlzdMOkbGxldCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyJVcHBkYXRlcmFkIHPDtmt2w6RnOiAlcyBsYWRlIHRpbGwgJXMgaW51dGkgZW4ga2F0YWxvZyBzb20gYnl0dGUgbmFtbiBpICVzOyAiCisiZmx5dHRhciBkZW4gdGlsbCAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChmaWxlIGxvY2F0aW9uKTogJXMgYWRkZWQgaW4gJXMgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgIgorImluICVzLCBzdWdnZXN0aW5nIGl0IHNob3VsZCBwZXJoYXBzIGJlIG1vdmVkIHRvICVzLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChmaWxwbGFjZXJpbmcpOiAlcyBsYWRlIHRpbGwgJXMgaW51dGkgZW4ga2F0YWxvZyBzb20gYnl0dGUgbmFtbiBpICIKKyIlcywgZsO2cmVzbMOlciBhdHQgZGVuIGLDtnIgZmx5dHRhcyB0aWxsJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICIKKyIlczsgbW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIlVwcGRhdGVyYWQgc8O2a3bDpGc6ICVzIGJ5dHRlIG5hbW4gdGlsbCAlcyBpICVzLCBpbnV0aSBlbiBrYXRhbG9nIHNvbSBieXR0ZSAiCisibmFtbiBpICVzOyBmbHl0dGFyIGRlbiB0aWxsICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisiS09ORkxJS1QgKGZpbHBsYWNlcmluZyk6ICVzIGJ5dHRlIG5hbW4gdGlsbCAlcyBpICVzLCBpbnV0aSBlbiBrYXRhbG9nIHNvbSAiCisiYnl0dGUgbmFtbiBpICVzOyBmbHl0dGFyIGRlbiB0aWxsICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiVGFyIGJvcnQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MDgKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiZmlsL2thdGFsb2ciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MTMKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAia2F0YWxvZy9maWwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMpOiBEZXQgZmlubnMgZW4ga2F0YWxvZyBtZWQgbmFtbmV0ICVzIGkgJXMuIEzDpGdnZXIgdGlsbCAlcyBzb20gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MjkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiQWRkaW5nICVzIgogbXNnc3RyICJMw6RnZ2VyIHRpbGwgJXMiCiAKLSM6IGxpYi9pbmRleC50Y2w6MzgwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3RhZ2UgJWQgdW50cmFja2VkIGZpbGVzPyIKLW1zZ3N0ciAiS8O2YSAlZCBvc3DDpXJhZGUgZmlsZXI/IgorIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJLT05GTElLVCAodGlsbMOkZ2cvdGlsbMOkZ2cpOiBTYW1tYW5zbGFnbmluZ3Nrb25mbGlrdCBpICVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjQyOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgotbXNnc3RyICLDhXRlcnN0w6RsbCDDpG5kcmluZ2FybmEgaSBmaWxlbiAlcz8iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDgyCittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlISIKK21zZ3N0ciAiUmVkYW4gw6Agam91ciEiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgotbXNnc3RyICLDhXRlcnN0w6RsbCDDpG5kcmluZ2FybmEgaSBkZXNzYSAlaSBmaWxlcj8iCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmcgYXYgdHLDpGRlbiAlcyBvY2ggJXMgbWlzc2x5Y2thZGVzIgogCi0jOiBsaWIvaW5kZXgudGNsOjQzOAotbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKLW1zZ3N0ciAiIgotIkFsbGEgb2vDtmFkZSDDpG5kcmluZ2FyIGtvbW1lciBwZXJtYW5lbnQgZ8OlIGbDtnJsb3JhZGUgdmlkIMOldGVyc3TDpGxsbmluZ2VuLiIKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1OTUKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiU2zDpXIgaWhvcDoiCiAKLSM6IGxpYi9pbmRleC50Y2w6NDQxCi1tc2dpZCAiRG8gTm90aGluZyIKLW1zZ3N0ciAiR8O2ciBpbmdlbnRpbmciCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICJoaXR0YWRlICV1IGdlbWVuc2FtIGbDtnJmYWRlcjoiCittc2dzdHJbMV0gImhpdHRhZGUgJXUgZ2VtZW5zYW1tYSBmw7ZyZsOkZGVyOiIKIAotIzogbGliL2luZGV4LnRjbDo0NTkKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgIsOFdGVyc3TDpGxsZXIgdmFsZGEgZmlsZXIiCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU4Cittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJzYW1tYW5zbGFnbmluZ2VuIHJldHVybmVyYWRlIGluZ2VuIGluY2hlY2tuaW5nIgogCi0jOiBsaWIvaW5kZXgudGNsOjQ2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmVydGluZyAlcyIKLW1zZ3N0ciAiw4V0ZXJzdMOkbGxlciAlcyIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NDMKLW1zZ2lkICJEZWZhdWx0IgotbXNnc3RyICJTdGFuZGFyZCIKLQotIzogbGliL2VuY29kaW5nLnRjbDo0NDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTeXN0ZW0gKCVzKSIKLW1zZ3N0ciAiU3lzdGVtZXRzICglcykiCi0KLSM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Ci1tc2dpZCAiT3RoZXIiCi1tc2dzdHIgIkFubmFuIgotCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICJPZ2lsdGlndCBkYXR1bSBmcsOlbiBHaXQ6ICVzIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQyCi1tc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCi1tc2dzdHIgIkFudGFsIGzDtnNhIG9iamVrdCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0MwotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgotbXNnc3RyICJEaXNrdXRyeW1tZSBhbnbDpG50IGF2IGzDtnNhIG9iamVrdCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NAotbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKLW1zZ3N0ciAiQW50YWwgcGFja2FkZSBvYmpla3QiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKLW1zZ2lkICJOdW1iZXIgb2YgcGFja3MiCi1tc2dzdHIgIkFudGFsIHBha2V0IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ2Ci1tc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgotbXNnc3RyICJEaXNrdXRyeW1tZSBhbnbDpG50IGF2IHBhY2thZGUgb2JqZWt0IgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ3Ci1tc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKLW1zZ3N0ciAiUGFja2FkZSBvYmpla3Qgc29tIHbDpG50YXIgcMOlIHN0w6RkbmluZyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OAotbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCi1tc2dzdHIgIlNrcsOkcGZpbGVyIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjcyCi1tc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKLW1zZ3N0ciAiS29tcHJpbWVyYXIgb2JqZWt0ZGF0YWJhc2VuIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjgzCi1tc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCi1tc2dzdHIgIlZlcmlmaWVyYXIgb2JqZWt0ZGF0YWJhc2VuIG1lZCBmc2NrLW9iamVjdHMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0CisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzE3CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCi0iXG4iCi0iVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCi0idGhlIGRhdGFiYXNlLlxuIgotIlxuIgotIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiAgJXMiCiBtc2dzdHIgIiIKLSJBcmtpdmV0IGhhciBmw7ZyIG7DpHJ2YXJhbmRlIG9ta3JpbmcgJWkgbMO2c2Egb2JqZWt0LlxuIgorIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgYXYgZsO2bGphbmRlIGZpbGVyIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2ICIKKyJzYW1tYW5zbGFnbmluZzpcbiIKKyIgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0b2xrYSBvYmpla3RldCBcIiVzXCIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4MzIgYnVpbHRpbi9tZXJnZS5jOjY5NCBidWlsdGluL21lcmdlLmM6ODc0Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgaW5kZXhldC4iCisKKyM6IG1pZHguYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4ZmlsZW4gJXMgw6RyIGbDtnIgbGl0ZW4iCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleHNpZ25hdHVyZW4gMHglMDh4IHN0w6RtbWVyIGludGUgbWVkIHNpZ25hdHVyZW4gMHglMDh4IgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4dmVyc2lvbmVuICVkIHN0w7ZkcyBpbnRlIgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJoYXNoLXZlcnNpb25lbiAldSBzdMOkbW1lciBpbnRlIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgImZlbGFrdGlndCBvZmZzZXQgZsO2ciBzdHlja2UgKGbDtnIgc3RvcnQpIgorCisjOiBtaWR4LmM6MTMyCittc2dpZCAidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiYXZzbHV0YW5kZSBtdWx0aS1wYWNrLWluZGV4LXN0eWNrZS1pZCBmw7ZyZWtvbW1lciB0aWRpZ2FyZSDDpG4gZsO2cnbDpG50YXQiCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHNha25hciBrcsOkdmQgcGFrZXRuYW1uLXN0eWNrZSIKKworIzogbWlkeC5jOjE0NworbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHNha25hciBrcsOkdnQgT0lELXV0YnJlZG5pbmdzc3R5Y2tlIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIm11bHRpLXBhY2staW5kZXggc2FrbmFyIGtyw6R2dCBPSUQtdXBwc2xhZ25pZ25zc3R5Y2tlIgorCisjOiBtaWR4LmM6MTUxCittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHNha25hciBrcsOkdnQgb2JqZWt0LW9mZnNldHN0eWNrZSIKKworIzogbWlkeC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4LXBha2V0bmFtbiBpIGZlbCBvcmRuaW5nOiBcIiVzXCIgZsO2cmUgXCIlc1wiIgorCisjOiBtaWR4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLWludC1pZDogJXUgKCV1IHRvdGFsIHBhY2tzKSIKK21zZ3N0ciAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgcGFrZXQgdG90YWx0KSIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBza3JpdmVyIDY0LWJpdGFycyBvZmZzZXQsIG1lbiBvZmZfdCDDpHIgZsO2ciBsaXRlbiIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgImZlbCBuw6RyIHBha2V0ZmlsZXIgZnLDpW4gbXVsdGktcGFjay1pbmRleCBza3VsbGUgZsO2cmJlcmVkYXMiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgcGFrZXRmaWxlbiBcIiVzXCIiCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIHBha2V0aW5kZXhldCBcIiVzXCIiCisKKyM6IG1pZHguYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIm1pc3NseWNrYWRlcyBoaXR0YSBvYmpla3QgJWQgaSBwYWtldGZpbGVuIgorCisjOiBtaWR4LmM6ODQyCittc2dpZCAiQWRkaW5nIHBhY2tmaWxlcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgcGFrZXRmaWxlciB0aWxsIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiCittc2dzdHIgInPDpWcgaW50ZSBwYWtldGZpbGVuICVzIHNvbSBza3VsbGUga2FzdGFzIgorCisjOiBtaWR4LmM6OTczCittc2dpZCAiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiU2tyaXZlciBzdHlja2VuIHRpbGwgbXVsdGktcGFjay1pbmRleCIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBzdMOkZGEgbXVsdGktcGFjay1pbmRleCBww6UgJXMiCisKKyM6IG1pZHguYzoxMTA4Cittc2dpZCAiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIlNlciBlZnRlciByZWZlcmVyYWRlIHBhY2tmaWxlciIKKworIzogbWlkeC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKK21zZ3N0ciAiIgorIm9pZC11dGJyZWRuaW5nIGkgZmVsIG9yZG5pbmc6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorCisjOiBtaWR4LmM6MTEyOAorbXNnaWQgIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiQmVrcsOkZnRhciBPSUQtb3JkbmluZyBpIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICJvaWQtdXBwc2xhZ25pbmcgaSBmZWwgb3JkbmluZzogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIlNvcnRlcmFyIG9iamVrdCBlZnRlciBwYWNrZmlsIgorCisjOiBtaWR4LmM6MTE2NAorbXNnaWQgIlZlcmlmeWluZyBvYmplY3Qgb2Zmc2V0cyIKK21zZ3N0ciAiQmVrcsOkZnRhciBvZmZzZXQgZsO2ciBvYmpla3QiCisKKyM6IG1pZHguYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhIHBha2V0cG9zdCBmw7ZyIG9pZFslZF0gPSAlcyIKKworIzogbWlkeC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjay1pbmRleCBmb3IgcGFja2ZpbGUgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBsw6RzYSBwYWtldGluZGV4IGbDtnIgcGFrZXRmaWwgJXMiCisKKyM6IG1pZHguYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IGZvciBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCittc2dzdHIgImZlbGFrdGlndCBvYmpla3Qtb2Zmc2V0IGbDtnIgb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorCisjOiBtaWR4LmM6MTIyMAorbXNnaWQgIkNvdW50aW5nIHJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiUsOka25hciByZWZlcmVyYWRlIG9iamVrdCIKKworIzogbWlkeC5jOjEyMzAKK21zZ2lkICJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICJTZXIgZWZ0ZXIgb2NoIHRhciBib3J0IG9yZWZlcmVyYWRlIHBhY2tmaWxlciIKKworIzogbWlkeC5jOjEzODgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBwYWNrLW9iamVjdHMiCisKKyM6IG1pZHguYzoxNDA3Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMiCittc2dzdHIgImt1bmRlIGludGUgYXZzbHV0YSBwYWNrLW9iamVjdHMiCisKKyM6IG5hbWUtaGFzaC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfZGlyIHRocmVhZDogJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBsYXp5X2Rpci10csOlZDogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgbGF6eV9uYW1lLXRyw6VkOiAlcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdXRmw7ZyYSBqb2luIHDDpSBsYXp5X25hbWUtdHLDpWQ6ICVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKyJEdSBoYXIgaW50ZSBhdnNsdXRhdCBmw7ZyZWfDpWVuZGUgYW50ZWNrbmluZ3Mtc2FtbWFuc2xhZ25pbmcgKCVzIGZpbm5zKS5cbiIKKyJBbnbDpG5kIFwiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0XCIgZWxsZXIgXCJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydFwiIGbDtnIgIgorImF0dCBjaGVja2EgaW4gZWxsZXIgYXZicnl0YSBmw7ZyZWfDpWVuZGUgc2FtbWFuc2xhZ25pbmcgaW5uYW4gZHUgcMOlYsO2cmphciBlbiAiCisibnkgYW50ZWNrbmluZ3Mtc2FtbWFuc2xhZ25pbmcuIgorCisjOiBub3Rlcy1tZXJnZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgKCVzIGV4aXN0cykuIgorbXNnc3RyICJEdSBoYXIgaW50ZSBhdnNsdXRhdCBhbnRlY2tuaW5ncy1zYW1tYW5zbGFnbmluZ2VuICglcyBmaW5ucykuIgorCisjOiBub3Rlcy11dGlscy5jOjQ2Cittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICJLYW4gaW50ZSBjaGVja2EgaW4gb2luaXRpZXJhdC9vcmVmZXJlcmF0IGFudGVja25pbmdzdHLDpGQiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBmw7ZyIG5vdGVzLnJld3JpdGVNb2RlOiAnJXMnIgorCisjOiBub3Rlcy11dGlscy5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiVsOkZ3JhciBza3JpdmEgw7Z2ZXIgYW50ZWNrbmluZ2FyIGkgJXMgKHV0YW5mw7ZyIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJGZWxha3RpZ3QgdsOkcmRlIHDDpSAlczogXCIlc1wiIgorCisjOiBvYmplY3QuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIKK21zZ3N0ciAib2dpbHRpZyBvYmpla3R0eXAgXCIlc1wiIgorCisjOiBvYmplY3QuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICJvYmpla3RldCAlcyDDpHIgZW4gJXMsIGludGUgZW4gJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAib2JqZWt0ZXQgJXMgaGFyIG9rw6RuZCB0eXAtaWQgJWQiCisKKyM6IG9iamVjdC5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBvYmpla3RldDogJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAiaGFzaHbDpHJkZSBzdMOkbW1lciBpbnRlIMO2dmVyZW5zICVzIgorCisjOiBwYWNrZmlsZS5jOjY0MQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJvZmZzZXQgZsO2cmUgc2x1dGV0IGF2IHBhY2tmaWxlbiAodHJhc2lnIC5pZHg/KSIKKworIzogcGFja2ZpbGUuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAib2Zmc2V0IGbDtnJlIHNsdXRldCBhdiBwYWNraW5kZXggZsO2ciAlcyAodHJhc2lndCBpbmRleD8pIgorCisjOiBwYWNrZmlsZS5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICJvZmZzZXQgYm9ydG9uIHNsdXRldCBhdiBwYWNraW5kZXggZsO2ciAlcyAodHJ1bmtlcmF0IGluZGV4PykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIlcyBiZWjDtnZlciBldHQgdsOkcmRlIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIMOkciBpbmtvbXBhdGliZWwgbWVkICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIKK21zZ3N0ciAiJXM6IGlua29tcGF0aWJlbHQgbWVkIG7DpWdvdCBhbm5hdCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIlcyB0YXIgaW5nZXQgdsOkcmRlIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXNuJ3QgYXZhaWxhYmxlIgorbXNnc3RyICIlcyDDpHIgaW50ZSB0aWxsZ8OkbmdsaWd0IgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiJXMgZsO2cnbDpG50YXIgZXR0IGlja2UtbmVnYXRpdnQgaGVsdGFsc3bDpHJkZSwgbWVkIHZhbGZyaXR0IGsvbS9nLXN1ZmZpeCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgInR2ZXR5ZGlnIGZsYWdnYTogJXMgKGthbiB2YXJhIC0tJXMlcyBlbGxlciAtLSVzJXMpIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDIzIHBhcnNlLW9wdGlvbnMuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzID8pIgorbXNnc3RyICJtZW5hZGUgZHUgXCItLSVzXCIgKG1lZCB0dsOlIGJpbmRlc3RyZWNrPykiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb24gYCVzJyIKK21zZ3N0ciAib2vDpG5kIGZsYWdnYSBcIiVzXCIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAib2vDpG5kIGZsYWdnYSBcIiVjXCIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBub24tYXNjaWkgb3B0aW9uIGluIHN0cmluZzogYCVzJyIKK21zZ3N0ciAib2vDpG5kIGlja2UtYXNjaWktZmxhZ2dhIGkgc3Ryw6RuZ2VuOiBcIiVzXCIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4ODgKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgImFudsOkbmRuaW5nOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgICAgIGVsbGVyOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk1NQorbXNnaWQgIi1OVU0iCittc2dzdHIgIi1UQUwiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgb2YgLS0lcyIKK21zZ3N0ciAiYWxpYXMgZsO2ciAtLSVzIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImZsYWdnYW4gXCIlc1wiIGFudGFyIGV0dCBudW1lcmlza3QgdsOkcmRlIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGV4cGlyYXRpb24gZGF0ZSAnJXMnIgorbXNnc3RyICJ0cmFzaWd0IHV0bMO2cHNkYXR1bTogXCIlc1wiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIgorbXNnc3RyICIiCisiZmxhZ2dhbiBcIiVzXCIgYW50YXIgXCJhbHdheXNcIiAoYWxsdGlkKSwgXCJhdXRvXCIgZWxsZXIgXCJuZXZlclwiIChhbGRyaWcpIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgImZlbGZvcm1hdCBvYmpla3RuYW1uIFwiJXNcIiIKKworIzogcGF0aC5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiS3VuZGUgaW50ZSBnw7ZyYSAlcyBza3JpdmJhciBmw7ZyIGdydXBwZW4iCisKKyM6IHBhdGhzcGVjLmM6MTMwCittc2dpZCAiRXNjYXBlIGNoYXJhY3RlciAnXFwnIG5vdCBhbGxvd2VkIGFzIGxhc3QgY2hhcmFjdGVyIGluIGF0dHIgdmFsdWUiCittc2dzdHIgIlNwZWNpYWx0ZWNrbmV0IFwiXFxcIiB0aWxsw6V0cyBpbnRlIHNvbSBzaXN0YSB0ZWNrZW4gaSBhdHRyaWJ1dHbDpHJkZSIKKworIzogcGF0aHNwZWMuYzoxNDgKK21zZ2lkICJPbmx5IG9uZSAnYXR0cjonIHNwZWNpZmljYXRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIkVuZGFzdCBlbiBcImF0dHI6XCItYW5naXZlbHNlIHRpbGzDpXRlbi4iCisKKyM6IHBhdGhzcGVjLmM6MTUxCittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICJhdHRyLWFuZ2l2ZWxzZSBrYW4gaW50ZSB2YXJhIHRvbSIKKworIzogcGF0aHNwZWMuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhdHRyaWJ1dGUgbmFtZSAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgYXR0cmlidXRuYW1uICVzIgorCisjOiBwYXRoc3BlYy5jOjI1OQorbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKyJkZSBnbG9iYWxhIHPDtmt2w6Rnc2luc3TDpGxsbmluZ2FybmEgXCJnbG9iXCIgb2NoIFwibm9nbG9iXCIgw6RyIGlua29tcGF0aWJsYSIKKworIzogcGF0aHNwZWMuYzoyNjYKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisiZGVuIGdsb2JhbGEgc8O2a3bDpGdzaW5zdMOkbGxuaW5nZW4gXCJsaXRlcmFsXCIgw6RyIGlua29tcGF0aWJlbCBtZWQgYWxsYSBhbmRyYSAiCisiZ2xvYmFsYSBzw7ZrdsOkZ3NpbnN0w6RsbG5pbmdhciIKKworIzogcGF0aHNwZWMuYzozMDYKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgIm9naWx0aWcgcGFyYW1ldGVyIGbDtnIgc8O2a3bDpGdzdXR0cnlja2V0IGbDtnIgXCJwcmVmaXhcIiIKKworIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAiRmVsYWt0aWd0IHPDtmt2w6Rnc3V0dHJ5Y2sgXCIlLipzXCIgaSBcIiVzXCIiCisKKyM6IHBhdGhzcGVjLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAiXCIpXCIgc2FrbmFzIGkgc2x1dGV0IGF2IHPDtmt2w6Rnc3V0dHJ5Y2tldCBmw7ZyIFwiJXNcIiIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIkVqIGltcGxlbWVudGVyYXQgc8O2a3bDpGdzdXR0cnlja21hZ2kgXCIlY1wiIGkgXCIlc1wiIgorCisjOiBwYXRoc3BlYy5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6IFwibGl0ZXJhbFwiIG9jaCBcImdsb2JcIiDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiBcIiVzXCIgw6RyIHV0YW5mw7ZyIGFya2l2ZXQiCisKKyM6IHBhdGhzcGVjLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiXCIlc1wiIChtaW5uZXNzdMO2ZDogXCIlY1wiKSIKKworIzogcGF0aHNwZWMuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIKK21zZ3N0ciAiJXM6IHPDtmt2w6Rnc3V0dHJ5Y2tldCBoYW50ZXJhcyBpbnRlIGF2IGRldCBow6RyIGtvbW1hbmRvdDogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAic8O2a3bDpGdzYW5naXZlbHNlbiBcIiVzXCIgw6RyIHDDpSBhbmRyYSBzaWRhbiBhdiBlbiBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IHBhdGhzcGVjLmM6NjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImxpbmUgaXMgYmFkbHkgcXVvdGVkOiAlcyIKK21zZ3N0ciAibGluamVuIGVyIGZlbGFrdGlndCBjaXRlcmFkOiAlcyIKKworIzogcGt0LWxpbmUuYzo5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImthbiBpbnRlIHNrcml2YSBmbHVzaC1wYWtldCIKKworIzogcGt0LWxpbmUuYzo5OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBkZWxpbSBwYWNrZXQiCittc2dzdHIgImthbiBpbnRlIHNrcml2YSBkZWxpbS1wYWtldCIKKworIzogcGt0LWxpbmUuYzoxMDYKK21zZ2lkICJmbHVzaCBwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICJmZWwgdmlkIHNrcml2bmluZyBhdiBcImZsdXNoXCItcGFrZXQiCisKKyM6IHBrdC1saW5lLmM6MTQ2IHBrdC1saW5lLmM6MjMyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGltcG9zc2libHkgbG9uZyBsaW5lIgorbXNnc3RyICJwcm90b2tvbGxmZWw6IG9tw7ZqbGlndCBsw6VuZyByYWQiCisKKyM6IHBrdC1saW5lLmM6MTYyIHBrdC1saW5lLmM6MTY0Cittc2dpZCAicGFja2V0IHdyaXRlIHdpdGggZm9ybWF0IGZhaWxlZCIKK21zZ3N0ciAicGFrZXRza3Jpdm5pbmcgbWVkIGZvcm1hdCBtaXNzbHlja2FkZXMiCisKKyM6IHBrdC1saW5lLmM6MTk2Cittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCAtIGRhdGEgZXhjZWVkcyBtYXggcGFja2V0IHNpemUiCittc2dzdHIgInBha2V0c2tyaXZuaW5nIG1pc3NseWNrYWRlcyAtIGRhdGEgw7Z2ZXJza3JpZGVyIG1heGltYWwgcGFrZXRzdG9ybGVrIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgInBha2V0c2tyaXZuaW5nIG1pc3NseWNrYWRlcyIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICJsw6RzZmVsIgorCisjOiBwa3QtbGluZS5jOjMwMworbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5IgorbXNnc3RyICJmasOkcnJlbiBsYWRlIHDDpSBvdsOkbnRhdCIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgInByb3Rva29sbGZlbDogZmVsYWt0aWcgcmFkbMOkbmdkc3RlY2tlbjogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAicHJvdG9rb2xsZmVsOiBmZWxha3RpZyByYWRsw6RuZ2Q6ICVkIgorCisjOiBwa3QtbGluZS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJmasOkcnJmZWw6ICVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAiVXBwZGF0ZXJhciBpbmRleGV0IgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIHRyw6VkYWQgbHN0YXQ6ICVzIgorCisjOiBwcmV0dHkuYzo5ODEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGZvcm1hdCBmw7ZyIC0tcHJldHR5IgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiRmrDpHJyIHV0YW4gVVJMIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9taXNvciByZW1vdGUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICJrb250cmFrdHNmasOkcnIga2FuIGludGUgYsO2cmphIG1lZCBcIi9cIjogJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdGFydGEgXCJsb2dcIiIKKworIzogcmFuZ2UtZGlmZi5jOjc3Cittc2dpZCAiY291bGQgbm90IHJlYWQgYGxvZ2Agb3V0cHV0IgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIHV0ZGF0YSBmcsOlbiBcImxvZ1wiIgorCisjOiByYW5nZS1kaWZmLmM6OTYgc2VxdWVuY2VyLmM6NTE2MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgaW5jaGVja25pbmdlbiBcIiVzXCIiCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGdpdC1odXZ1ZGV0IFwiJS4qc1wiIgorCisjOiByYW5nZS1kaWZmLmM6Mjg1Cittc2dpZCAiZmFpbGVkIHRvIGdlbmVyYXRlIGRpZmYiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBkaWZmIgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBsb2dnZW4gZsO2ciBcIiVzXCIiCisKKyM6IHJlYWQtY2FjaGUuYzo2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgYWRkIGZpbGUgYWxpYXMgJyVzJyAoJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCkiCittc2dzdHIgImzDpGdnZXIgaW50ZSB0aWxsIGZpbGFsaWFzIFwiJXNcIiAoXCIlc1wiIGZpbm5zIHJlZGFuIGkgaW5kZXhldCkiCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgdG9tIGJsb2IgaSBvYmpla3RkYXRhYmFzZW4iCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlczoga2FuIGJhcmEgbMOkZ2dhIHRpbGwgdmFubGlnYSBmaWxlciwgc3ltYm9saXNrYSBsw6Rua2FyIG9jaCBnaXQta2F0YWxvZ2VyIgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiXCIlc1wiIGhhciBpbnRlIG7DpWdvbiB1dGNoZWNrYWQgaW5jaGVja25pbmciCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgaW5kZXhlcmEgZmlsZW4gXCIlc1wiIgorCisjOiByZWFkLWNhY2hlLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgJyVzJyB0byBpbmRleCIKK21zZ3N0ciAia2FuIGludGUgbMOkZ2dhIHRpbGwgXCIlc1wiIHRpbGwgaW5kZXhldCIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBzdGF0dXMgcMOlIFwiJXNcIiIKKworIzogcmVhZC1jYWNoZS5jOjEzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiXCIlc1wiIGZpbm5zIGLDpWRlIHNvbSBlbiBmaWwgb2NoIGVuIGthdGFsb2ciCisKKyM6IHJlYWQtY2FjaGUuYzoxNTMxCittc2dpZCAiUmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiVXBwZGF0ZXJhIGluZGV4ZXQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJpbmRleC52ZXJzaW9uIHNhdHQsIG1lbiB2w6RyZGV0IMOkciBvZ2lsdGlndC5cbiIKKyJBbnbDpG5kZXIgdmVyc2lvbiAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzYXR0LCBtZW4gdsOkcmRldCDDpHIgb2dpbHRpZ3QuXG4iCisiQW52w6RuZGVyIHZlcnNpb24gJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICJmZWxha3RpZyBzaWduYXR1ciAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICJmZWxha3RpZyBpbmRleHZlcnNpb24gJWQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI0Cittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgImZlbGFrdGlnIHNoYTEtc2lnbmF0dXIgZsO2ciBpbmRleGZpbCIKKworIzogcmVhZC1jYWNoZS5jOjE3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgImluZGV4IGFudsOkbmRlciBmaWx0aWxsw6RnZ2V0ICUuNHMsIHZpbGtldCB2aSBpbnRlIGbDtnJzdMOlciIKKworIzogcmVhZC1jYWNoZS5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJS40cyBleHRlbnNpb24iCittc2dzdHIgImlnbm9yZXJhciBmaWx0aWxsw6RnZ2V0ICUuNHMiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAib2vDpG50IGZvcm1hdCAweCUwOHggcMOlIGluZGV4cG9zdCIKKworIzogcmVhZC1jYWNoZS5jOjE4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAiZmVsZm9ybWF0IG5hbW5mw6RsdCBpIGluZGV4ZXQsIG7DpHJhIHPDtmt2w6RnZW4gXCIlc1wiIgorCisjOiByZWFkLWNhY2hlLmM6MTg2NgorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4IgorbXNnc3RyICJvc29ydGVyYWRlIGvDtnBvc3RlciBpIGluZGV4IgorCisjOiByZWFkLWNhY2hlLmM6MTg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBzdGFnZSBlbnRyaWVzIGZvciBtZXJnZWQgZmlsZSAnJXMnIgorbXNnc3RyICJmbGVyYSBrw7Zwb3N0ZXIgZsO2ciBkZW4gc2FtbWFuc2xhZ25hIGZpbGVuIFwiJXNcIiIKKworIzogcmVhZC1jYWNoZS5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgZm9yICclcyciCittc2dzdHIgIm9zb3J0ZXJhZGUga8O2cG9zdGVyIGbDtnIgXCIlc1wiIgorCisjOiByZWFkLWNhY2hlLmM6MTk3OCByZWFkLWNhY2hlLmM6MjI2NiByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IGJ1aWx0aW4vYWRkLmM6NDk5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc4IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NTQgYnVpbHRpbi9jbGVhbi5jOjk2NyBidWlsdGluL2NvbW1pdC5jOjM2NworIzogYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDk5IGJ1aWx0aW4vbXYuYzoxNDUKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDYgYnVpbHRpbi9ybS5jOjI3MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJpbmRleGZpbGVuIHRyYXNpZyIKKworIzogcmVhZC1jYWNoZS5jOjIxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBpbiBjYWNoZV9lbnRyaWVzLXRyw6VkZW46ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB1dGbDtnJhIGpvaW4gcMOlIGNhY2hlX2VudHJpZXMtdHLDpWRlbjogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIgorbXNnc3RyICIlczogw7ZwcG5pbmcgYXYgaW5kZXhmaWxlbiBtaXNzbHlja2FkZXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiJXM6IGthbiBpbnRlIHRhIHN0YXJ0dXMgcMOlIGRldCDDtnBwbmEgaW5kZXhldCIKKworIzogcmVhZC1jYWNoZS5jOjIxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIgorbXNnc3RyICIlczogaW5kZXhmaWxlbiBtaW5kcmUgw6RuIGbDtnJ2w6RudGF0IgorCisjOiByZWFkLWNhY2hlLmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIlczoga2FuIGludGUga29wcGxhIGluZGV4ZmlsZW4iCisKKyM6IHJlYWQtY2FjaGUuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgbG9hZF9pbmRleF9leHRlbnNpb25zLXRyw6VkZW46ICVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB1dGbDtnJhIGpvaW4gcMOlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucy10csOlZGVuOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgImt1bmRlIGludGUgdXBwZGF0ZXJhIGRlbGF0IGluZGV4IFwiJXNcIiIKKworIzogcmVhZC1jYWNoZS5jOjIzMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGluZGV4LCBleHBlY3QgJXMgaW4gJXMsIGdvdCAlcyIKK21zZ3N0ciAidHJhc2lndCBpbmRleCwgZsO2cnbDpG50YWRlICVzIGkgJXMsIGZpY2sgJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMDIxIHN0cmJ1Zi5jOjExNDUgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbmdhIFwiJXNcIiIKKworIzogcmVhZC1jYWNoZS5jOjMxMjQgc2VxdWVuY2VyLmM6MjQyOSBzZXF1ZW5jZXIuYzo0MDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgdGEgc3RhdHVzIHDDpSBcIiVzXCIiCisKKyM6IHJlYWQtY2FjaGUuYzozMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBnaXQta2F0YWxvZzogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCBsw6Rua2VuOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAia2FuIGludGUgcsOkdHRhIGJlaMO2cmlnaGV0c2JpdGFyIHDDpSBcIiVzXCIiCisKKyM6IHJlYWQtY2FjaGUuYzozMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgZHJvcCB0byBzdGFnZSAjMCIKK21zZ3N0ciAiJXM6IGthbiBpbnRlIMOldGVyZ8OlIHRpbGwga8O2IDAiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ1bnJlY29nbml6ZWQgc2V0dGluZyAlcyBmb3Igb3B0aW9uIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCittc2dzdHIgIiIKKyJva8OkbmQgaW5zdMOkbGxuaW5nICVzIGbDtnIgZmxhZ2dhbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JlcmFyLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzUKK21zZ2lkICIiCiAiXG4iCi0iRsO2ciBhdHQgYmliZWjDpWxsYSBvcHRpbWFsIHByZXN0YW5kYSByZWtvbW1lbmRlcmFzIGRldCDDpSBkZXQgYmVzdMOkbWRhc3RlIGF0dCAiCi0iZHUga29tcHJpbWVyYXIgZGF0YWJhc2VuLlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21tYW5kPiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJiLCBicmVhayA9IHN0b3AgaGVyZSAoY29udGludWUgcmViYXNlIGxhdGVyIHdpdGggJ2dpdCByZWJhc2UgLS1jb250aW51ZScpXG4iCisiZCwgZHJvcCA8Y29tbWl0PiA9IHJlbW92ZSBjb21taXRcbiIKKyJsLCBsYWJlbCA8bGFiZWw+ID0gbGFiZWwgY3VycmVudCBIRUFEIHdpdGggYSBuYW1lXG4iCisidCwgcmVzZXQgPGxhYmVsPiA9IHJlc2V0IEhFQUQgdG8gYSBsYWJlbFxuIgorIm0sIG1lcmdlIFstQyA8Y29tbWl0PiB8IC1jIDxjb21taXQ+XSA8bGFiZWw+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIGNyZWF0ZSBhIG1lcmdlIGNvbW1pdCB1c2luZyB0aGUgb3JpZ2luYWwgbWVyZ2UgY29tbWl0J3NcbiIKKyIuICAgICAgIG1lc3NhZ2UgKG9yIHRoZSBvbmVsaW5lLCBpZiBubyBvcmlnaW5hbCBtZXJnZSBjb21taXQgd2FzXG4iCisiLiAgICAgICBzcGVjaWZpZWQpLiBVc2UgLWMgPGNvbW1pdD4gdG8gcmV3b3JkIHRoZSBjb21taXQgbWVzc2FnZS5cbiIKICJcbiIKLSJLb21wcmltZXJhIGRhdGFiYXNlbiBudT8iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIktvbW1hbmRvbjpcbiIKKyJwLCBwaWNrIDxpbmNoZWNrbmluZz4gPSBhbnbDpG5kIGluY2hlY2tuaW5nXG4iCisiciwgcmV3b3JkIDxpbmNoZWNrbmluZz4gPSBhbnbDpG5kIGluY2hlY2tuaW5nLCBtZW4gcmVkaWdlcmEgIgorImluY2hlY2tuaW5nc21lZGRlbGFuZGV0XG4iCisiZSwgZWRpdCA8aW5jaGVja25pbmc+ID0gYW52w6RuZCBpbmNoZWNrbmluZywgbWVuIHN0YW5uYSBmw7ZyIHRpbGzDpGdnXG4iCisicywgc3F1YXNoIDxpbmNoZWNrbmluZz4gPSBhbnbDpG5kIGluY2hlY2tuaW5nLCBtZW4gaW5mb2dhIGkgZsO2cmVnw6VlbmRlICIKKyJpbmNoZWNrbmluZ1xuIgorImYsIGZpeHVwIDxpbmNoZWNrbmluZz4gPSBzb20gXCJzcXVhc2hcIiwgbWVuIGbDtnJrYXN0YSAiCisiaW5jaGVja25pbmdzbWVkZGVsYW5kZXRcbiIKKyJ4LCBleGVjIDxrb21tYW5kbz4gPSBrw7ZyIGtvbW1hbmRvIChyZXN0ZW4gYXYgcmFkZW4pIGkgc2thbGV0XG4iCisiYiwgYnJlYWsgPSBzdG9wcGEgaMOkciAoZm9ydHPDpHR0IG9tYmFzZXJpbmdlbiBzZW5hcmUgbWVkIFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiKVxuIgorImQsIGRyb3AgPGluY2hlY2tuaW5nPiA9IHRhIGJvcnQgaW5jaGVja25pbmdcbiIKKyJsLCBsYWJlbCA8ZXRpa2V0dD4gPSBnZSBha3R1ZWxsdCBIRUFEIGV0dCBuYW1uXG4iCisidCwgcmVzZXQgPGV0aWtldHQ+ID0gw6V0ZXJzdMOkbGwgSEVBRCB0aWxsIGVuIGV0aWtldHRcbiIKKyJtLCBtZXJnZSBbLUMgPGluY2hlY2tuaW5nPiB8IC1jIDxpbmNoZWNrbmluZz5dIDxldGlrZXR0PiBbIyA8ZW5yYWRzPl1cbiIKKyIuICAgICAgIHNrYXBhIGVuIHNhbW1hbnNsYWduaW5nIG1lZCB1cnNwcnVuZ2xpZ3QgbWVkZGVsYW5kZSAoZWxsZXJcbiIKKyIuICAgICAgIGVucmFkcywgb20gaW5nZXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBhbmdhdnMpLiBBbnbDpG5kXG4iCisiLiAgICAgICAtdiA8aW5jaGVja25pbmc+IGbDtnIgYXR0IHNrcml2YSBvbSBtZWRkZWxhbmRldC5cbiIKKyJcbiIKKyJEdSBrYW4gYnl0YSBvcmRuaW5nIHDDpSByYWRlcm5hOyBkZSB1dGbDtnJzIHVwcGlmcsOlbiBvY2ggbmVkLlxuIgogCi0jOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE2Ci1tc2dpZCAiZXJyb3IiCi1tc2dzdHIgImZlbCIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmRzKSIKK21zZ3N0clswXSAiT21iYXNlcmEgJXMgcMOlICVzICglZCBrb21tYW5kbykiCittc2dzdHJbMV0gIk9tYmFzZXJhICVzIHDDpSAlcyAoJWQga29tbWFuZG9uKSIKIAotIzogbGliL2Vycm9yLnRjbDozNgotbXNnaWQgIndhcm5pbmciCi1tc2dzdHIgInZhcm5pbmciCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUYSBpbnRlIGJvcnQgcmFkZXIuIEFudsOkbmQgXCJkcm9wXCIgZsO2ciBhdHQgc3BlY2lmaWt0IGbDtnJrYXN0YSBlbiAiCisiaW5jaGVja25pbmcuXG4iCiAKLSM6IGxpYi9lcnJvci50Y2w6OTYKLW1zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgotbXNnc3RyICJEdSBtw6VzdGUgcsOkdHRhIHRpbGwgZmVsZW4gb3ZhbiBpbm5hbiBkdSBjaGVja2FyIGluLiIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbSBkdSB0YXIgYm9ydCBlbiByYWQgS09NTUVSIERFTiBJTkNIRUNLTklOR0VOIEFUVCBGw5ZSTE9SQVMuXG4iCiAKLSN+IG1zZ2lkICJEaXNwbGF5aW5nIG9ubHkgJXMgb2YgJXMgZmlsZXMuIgotI34gbXNnc3RyICJWaXNhciBlbmRhc3QgJXMgYXYgJXMgZmlsZXIuIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3MQorbXNnaWQgIiIKKyJcbiIKKyJZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS5cbiIKKyJUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkR1IHJlZGlnZXJhciBcInRvZG9cIi1maWxlbiBmw7ZyIGVuIHDDpWfDpWVuZGUgaW50ZXJha3RpdiBvbWJhc2VyaW5nLlxuIgorIkbDtnIgYXR0IGZvcnPDpHR0YSBvbWJhc2VyYSBlZnRlciByZWRpZ2VyaW5nZW4sIGvDtnI6XG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgogCi0jfiBtc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCi0jfiBtc2dzdHIgIlNraWxqIHDDpSBWRVJTQUxFUi9nZW1lbmVyIgorIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiT21iYXNlcmluZ2VuIGtvbW1lciBkb2NrIGF0dCBhdmJyeXRhcyBvbSBkdSB0YXIgYm9ydCBhbGx0aW5nLlxuIgorIlxuIgogCi0jfiBtc2dpZCAiQ2Fubm90IHVzZSBmdW5ueSAuZ2l0IGRpcmVjdG9yeToiCi0jfiBtc2dzdHIgIkthbiBpbnRlIGFudsOkbmRhIHVuZGVybGlnIC5naXQta2F0YWxvZzoiCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIk9ic2VydmVyYSBhdHQgdG9tbWEgaW5jaGVja25pbmdhciDDpHIgdXRrb21tZW50ZXJhZGUiCiAKLSN+IG1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKLSN+IG1zZ3N0ciAiSW5zdMOkbGxuaW5nYXIuLi4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMDUgcmVyZXJlLmM6NDg1IHJlcmVyZS5jOjY5MiBzZXF1ZW5jZXIuYzozNTM2CisjOiBzZXF1ZW5jZXIuYzozNTYyIHNlcXVlbmNlci5jOjUyNjMgYnVpbHRpbi9mc2NrLmM6MzQ2IGJ1aWx0aW4vcmViYXNlLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBcIiVzXCIiCiAKLSN+IG1zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKLSN+IG1zZ3N0ciAiQWxsdGlkICh1dGbDtnIgaW50ZSBzYW1tYW5zbGFnbmluZ3N0ZXN0KS4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBrb3BpZXJhIFwiJXNcIiB0aWxsIFwiJXNcIi4iCiAKLSN+IG1zZ2lkICJVUkw6IgotI34gbXNnc3RyICJXZWJiYWRyZXNzOiIKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuXG4iCisiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iCittc2dzdHIgIiIKKyJWYXJuaW5nOiB2aXNzYSBpbmNoZWNrbmluZ2FyIGthbiBhdiBtaXNzdGFnIGhhIHRhcHBhdHMuXG4iCisiVGFwcGFkZSBpbmNoZWNrbmluZ2FyIChueWFzdGUgZsO2cnN0KTpcbiIKIAotI34gbXNnaWQgIkRlbGV0ZSBSZW1vdGUgQnJhbmNoIgotI34gbXNnc3RyICJUYSBib3J0IGZqw6RycmdyZW4iCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisiRsO2ciBhdHQgdW5kdmlrYSBkZXQgaMOkciBtZWRkZWxhbmRldCBrYW4gZHUgYW52w6RuZGEgXCJkcm9wXCIgZsO2ciBhdHQgIgorImV4cGxpY2l0XG4iCisia2FzdGEgZW4gaW5jaGVja25pbmcuXG4iCisiXG4iCisiQW52w6RuZCBcImdpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2tcIiBmw7ZyIGF0dCDDpG5kcmEgIgorInZhcm5pbmdzbml2w6VuLlxuIgorIk3DtmpsaWdhIGJldHRlbmRlbiDDpHI6IFwiaWdub3JlXCIgKGlnbm9yZXJhKSwgXCJ3YXJuXCIgKHZhcm5hKSwgXCJlcnJvciIKKyJcIiAoZmVsKS5cbiIKKyJcbiIKKworIzogcmVmcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIlwiJXNcIiBwZWthciBpbnRlIHDDpSBldHQgZ2lsdGlndCBvYmpla3QhIgorCisjOiByZWZzLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGRhbmdsaW5nIHN5bXJlZiAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIGRpbmdsYW5kZSBzeW1ib2xpc2sgcmVmZXJlbnMgJXMiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIHRyYXNpZyByZWZlcmVucyAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgc2tyaXZuaW5nOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIHJlZmVyZW5zZW4gXCIlc1wiIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJyZWZlcmVuc2VuIFwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogcmVmcy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIHdyaXRpbmcgJyVzJyIKK21zZ3N0ciAib3bDpG50YXQgb2JqZWt0LWlkIHZpZCBza3Jpdm5pbmcgXCIlc1wiIgorCisjOiByZWZzLmM6ODMzIHNlcXVlbmNlci5jOjQwNSBzZXF1ZW5jZXIuYzoyNzkzIHNlcXVlbmNlci5jOjI5OTcKKyM6IHNlcXVlbmNlci5jOjMwMTEgc2VxdWVuY2VyLmM6MzI2OSBzZXF1ZW5jZXIuYzo1MTc5IHN0cmJ1Zi5jOjExNDIKKyM6IHdyYXBwZXIuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIHRpbGwgXCIlc1wiIgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNDAgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBcIiVzXCIgZsO2ciBza3Jpdm5pbmciCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICJvdsOkbnRhdCBvYmpla3QtaWQgdmlkIGJvcnR0YWduaW5nIFwiJXNcIiIKKworIzogcmVmcy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyBoYXMgZ2FwIGFmdGVyICVzIgorbXNnc3RyICJsb2dnZW4gZsO2ciByZWZlcmVuc2VuICVzIGhhciBsdWNrYSBlZnRlciAlcyIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICJsb2dnZW4gZsO2ciByZWZlcmVuc2VuICVzIHNsdXRhZGUgb3bDpG50YXQgcMOlICVzIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICJsb2dnZW4gZsO2ciAlcyDDpHIgdG9tIgorCisjOiByZWZzLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJyVzJyIKK21zZ3N0ciAidsOkZ3JhciB1cHBkYXRlcmEgcmVmZXJlbnMgbWVkIHRyYXNpZ3QgbmFtbiBcIiVzXCIiCisKKyM6IHJlZnMuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgInVwZGF0ZV9yZWYgbWlzc2x5Y2thZGVzIGbDtnIgcmVmZXJlbnNlbiBcIiVzXCI6ICVzIgorCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAiZmxlcmEgdXBwZGF0ZXJpbmdhciBmw7ZyIHJlZmVyZW5zZW4gXCIlc1wiIHRpbGzDpXRzIGludGUiCisKKyM6IHJlZnMuYzoyMDU1Cittc2dpZCAicmVmIHVwZGF0ZXMgZm9yYmlkZGVuIGluc2lkZSBxdWFyYW50aW5lIGVudmlyb25tZW50IgorbXNnc3RyICJyZWZlcmVuc3VwcGRhdGVyaW5nYXIgZsO2cmJqdWRuYSBpIGthcmFudMOkbm1pbGrDtiIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiXCIlc1wiIGZpbm5zOyBrYW4gaW50ZSBza2FwYSBcIiVzXCIiCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAia2FuIGludGUgaGFudGVyYSBcIiVzXCIgb2NoIFwiJXNcIiBzYW10aWRpZ3QiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCByZWZlcmVuc2VuICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjQ4IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTQxCisjOiByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCByZWZlcmVuc2VuICVzOiAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI1MSByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIGJvcnQgcmVmZXJlbnNlcjogJXMiCisKKyM6IHJlZnNwZWMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZzcGVjICclcyciCittc2dzdHIgImZlbGFrdGlnIHJlZmVyZW5zc3BlY2lmaWthdGlvbjogXCIlc1wiIgorCisjOiByZWYtZmlsdGVyLmM6NDIgd3Qtc3RhdHVzLmM6MTkzOAorbXNnaWQgImdvbmUiCittc2dzdHIgImbDtnJzdnVubmVuIgorCisjOiByZWYtZmlsdGVyLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQiCittc2dzdHIgImbDtnJlICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICJiYWtvbSAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWQiCittc2dzdHIgImbDtnJlICVkLCBiYWtvbSAlZCIKKworIzogcmVmLWZpbHRlci5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorbXNnc3RyICJmw7ZydsOkbnRhdCBmb3JtYXQ6ICUlKGNvbG9yOjxjb2xvcj4pIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICJva8OkbmQgZsOkcmc6ICUlKGNvbG9yOiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICJIZWx0YWxzdsOkcmRlIGbDtnJ2w6RudGFkZXMgcmVmbmFtZTpsc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOnJzdHJpcD0lcyIKK21zZ3N0ciAiSGVsdGFsc3bDpHJkZSBmw7ZydsOkbnRhZGVzIHJlZm5hbWU6cnN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJSglcykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUoJXMpLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkgdGFyIGludGUgYXJndW1lbnQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdHNpemUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAib2vDpG50ICUlKG9iamVjdHNpemUpLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpIHRhciBpbnRlIGFyZ3VtZW50IgorCisjOiByZWYtZmlsdGVyLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShib2R5KSB0YXIgaW50ZSBhcmd1bWVudCIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkgdGFyIGludGUgYXJndW1lbnQiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUodHJhaWxlcnMpLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAicG9zaXRpdnQgdsOkcmRlIGbDtnJ2w6RudGF0IGNvbnRlbnRzOmxpbmVzPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUoY29udGVudHMpLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBvYmplY3RuYW1lOnNob3J0PSVzIgorbXNnc3RyICJwb3NpdGl2dCB2w6RyZGUgZsO2cnbDpG50YXQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKKworIzogcmVmLWZpbHRlci5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0bmFtZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUob2JqZWN0bmFtZSktYXJndW1lbnQ6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAiZsO2cnbDpG50YXQgZm9ybWF0OiAlJShhbGlnbjo8YnJlZGQ+LDxwb3NpdGlvbj4pIgorCisjOiByZWYtZmlsdGVyLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAib2vDpG5kIHBvc2l0aW9uOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAib2vDpG5kIGJyZWRkOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShhbGlnbikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgJSUoYWxpZ24pLWFyZ3VtZW50OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAicG9zaXRpdiBicmVkZCBmw7ZydsOkbnRhZCBtZWQgYXRvbWVuICUlKGFsaWduKSIKKworIzogcmVmLWZpbHRlci5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAib2vDpG50ICUlKGlmKS1hcmd1bWVudDogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgImZlbGZvcm1hdCBmw6RsdG5hbW46ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICJva8OkbnQgZsOkbHRuYW1uOiAlLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICIiCisiaW50ZSBldHQgZ2l0LWFya2l2LCBtZW4gZsOkbHRldCBcIiUuKnNcIiBrcsOkdmVyIHRpbGxnw6VuZyB0aWxsIG9iamVrdGRhdGEiCisKKyM6IHJlZi1maWx0ZXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShpZikgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJmb3JtYXQ6IGF0b21lbiAlJShpZikgYW52w6RuZCB1dGFuIGVuICUlKHRoZW4pLWF0b20iCisKKyM6IHJlZi1maWx0ZXIuYzo3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZW4gJSUodGhlbikgYW52w6RuZCB1dGFuIGVuICUlKGlmKS1hdG9tIgorCisjOiByZWYtZmlsdGVyLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICJmb3JtYXQ6IGF0b21lbiAlJSh0aGVuKSBhbnbDpG5kIG1lciDDpG4gZW4gZ8OlbmciCisKKyM6IHJlZi1maWx0ZXIuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgYWZ0ZXIgJSUoZWxzZSkiCittc2dzdHIgImZvcm1hdDogYXRvbWVuICUlKHRoZW4pIGFudsOkbmQgZWZ0ZXIgJSUoZWxzZSkiCisKKyM6IHJlZi1maWx0ZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhbiAlJShpZikgYXRvbSIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZW4gJSUoZWxzZSkgYW52w6RuZCB1dGFuIGVuICUlKGlmKS1hdG9tIgorCisjOiByZWYtZmlsdGVyLmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYSAlJSh0aGVuKSBhdG9tIgorbXNnc3RyICJmb3JtYXQ6IGF0b21lbiAlJShlbHNlKSBhbnbDpG5kIHV0YW4gZW4gJSUodGhlbiktYXRvbSIKKworIzogcmVmLWZpbHRlci5jOjgxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZW4gJSUoZWxzZSkgYW52w6RuZCBtZXIgw6RuIGVuIGfDpW5nIgorCisjOiByZWYtZmlsdGVyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iCittc2dzdHIgImZvcm1hdDogYXRvbWVuICUlKGVuZCkgYW52w6RuZCB1dGFuIG1vdHN2YXJhbmRlIGF0b20iCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgImZlbGZvcm1hZCBmb3JtYXRzdHLDpG5nICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nICVzIgorbXNnc3RyICJpbmdlbiBncmVuLCBvbWJhc2VyYXIgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgZGV0YWNoZWQgSEVBRCAlcyIKK21zZ3N0ciAiaW5nZW4gZ3Jlbiwgb21iYXNlcmFyIGZyw6Vua29wcGxhdCBIRUFEICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzIgorbXNnc3RyICJpbmdlbiBncmVuLCBcImJpc2VjdFwiIHN0YXJ0YWQgcMOlICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTUwNAorbXNnaWQgIm5vIGJyYW5jaCIKK21zZ3N0ciAiaW5nZW4gZ3JlbiIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICJvYmpla3RldCAlcyBzYWtuYXMgZsO2ciAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICJwYXJzZV9vYmplY3RfYnVmZmVyIG1pc3NseWNrYWRlcyBww6UgJXMgZsO2ciAlcyIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJmZWxmb3JtYXQgb2JqZWt0IHZpZCBcIiVzXCIiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHJlZiB3aXRoIGJyb2tlbiBuYW1lICVzIgorbXNnc3RyICJpZ25vcmVyYXIgcmVmZXJlbnMgbWVkIHRyYXNpZ3QgbmFtbiAlcyIKKworIzogcmVmLWZpbHRlci5jOjIzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAiZm9ybWF0OiBhdG9tZW4gJSUoZW5kKSBzYWtuYXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICJmbGFnZ2FuIFwiJXNcIiDDpHIgaW5rb21wYXRpYmVsIG1lZCAtLW1lcmdlZCIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgImZsYWdnYW4gXCIlc1wiIMOkciBpbmtvbXBhdGliZWwgbWVkIC0tbm8tbWVyZ2VkIgorCisjOiByZWYtZmlsdGVyLmM6MjUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgImZlbGZvcm1hdCBvYmpla3RuYW1uICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICJmbGFnZ2FuIFwiJXNcIiBtw6VzdGUgcGVrYSBww6UgZW4gaW5jaGVja25pbmciCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICJrb25maWd1cmVyYWQga29ydGZvcm0gZsO2ciBmasOkcnIga2FuIGludGUgYsO2cmphIG1lZCBcIi9cIjogJXMiCisKKyM6IHJlbW90ZS5jOjQxMworbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAibWVyIMOkbiBlbiByZWNlaXZlcGFjayBhbmdhdnMsIGFudsOkbmRlciBkZW4gZsO2cnN0YSIKKworIzogcmVtb3RlLmM6NDIxCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIm1lciDDpG4gZW4gdXBsb2FkcGFjayBhbmdhdnMsIGFudsOkbmRlciBkZW4gZsO2cnN0YSIKKworIzogcmVtb3RlLmM6NjExCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiS2FuIGludGUgaMOkbXRhIGLDpWRlICVzIG9jaCAlcyB0aWxsICVzIgorCisjOiByZW1vdGUuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgc3DDpXJhciB2YW5saWd0dmlzICVzLCBpbnRlICVzIgorCisjOiByZW1vdGUuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyBzcMOlcmFyIGLDpWRlICVzIG9jaCAlcyIKKworIzogcmVtb3RlLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSAnJXMnIG9mIHBhdHRlcm4gaGFkIG5vICcqJyIKK21zZ3N0ciAibnlja2VsbiBcIiVzXCIgaSBtw7Zuc3RyZXQgaW5uZWjDpWxsZXIgaW5nZW4gXCIqXCIiCisKKyM6IHJlbW90ZS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAidsOkcmRldCBcIiVzXCIgaSBtw7Zuc3RyZXQgaW5uZWjDpWxsZXIgaW5nZW4gXCIqXCIiCisKKyM6IHJlbW90ZS5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICJrw6RsbC1yZWZlcmVuc3NwZWNpZmlrYXRpb25lbiAlcyBtb3RzdmFyYXIgaW5nZW4iCisKKyM6IHJlbW90ZS5jOjEwMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICJrw6RsbC1yZWZlcmVuc3NwZWNpZmlrYXRpb25lbiAlcyBtb3RzdmFyYXIgbWVyIMOkbiBlbiIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorIk3DpWxldCBkdSBhbmdhdiDDpHIgaW50ZSBldHQga29tcGxldHQgcmVmZXJlbnNhbW4gKGR2cy4sXG4iCisic3RhcnRhciBtZWQgXCJyZWZzL1wiKS4gVmkgZsO2cnPDtmt0ZSBnaXNzYSB2YWQgZHUgbWVuYWRlIGdlbm9tIGF0dDpcbiIKKyJcbiIKKyItIFNlIGVmdGVyIGVuIHJlZmVyZW5zIHNvbSBtb3RzdmFyYXIgXCIlc1wiIHDDpSBmasOkcnJzaWRhbi5cbiIKKyItIFNlIG9tIDxrw6RsbGFuPiBzb20gc8OkbmRzIChcIiVzXCIpXG4iCisiICDDpHIgZW4gcmVmZXJlbnMgaSBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBPbSBzw6UgbMOkZ2dlciB2aSB0aWxsXG4iCisiICBtb3RzdmFyYW5kZSByZWZzL3toZWFkcyx0YWdzfS8tcHJlZml4IHDDpSBmasOkcnJzaWRhbi5cbiIKKyJcbiIKKyJJbmdldCBhdiBkZW0gZnVuZ2VyYWRlLCBzw6UgdmkgZ2F2IHVwcC4gQW5nZSBmdWxsc3TDpG5kaWcgcmVmZXJlbnMuIgorCisjOiByZW1vdGUuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKyI8S8OkbGxhPi1kZWxlbiBhdiByZWYuc3BlYy1lbiDDpHIgZXR0IGluY2hlY2tuaW5nc29iamVrdC5cbiIKKyJWYXIgZGV0IG1lbmluZ2VuIGF0dCBza2FwYSBlbiBueSBncmVuIGdlbm9tIGF0dCBzw6RuZGFcbiIKKyJ0aWxsIFwiJXM6cmVmcy9oZWFkcy8lc1wiPyIKKworIzogcmVtb3RlLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyI8S8OkbGxhPi1kZWxlbiBhdiByZWYuc3BlYy1lbiDDpHIgZXR0IHRhZ2dvYmpla3QuXG4iCisiVmFyIGRldCBtZW5pbmdlbiBhdHQgc2thcGEgZW4gbnkgdGFnZyBnZW5vbSBhdHQgc8OkbmRhXG4iCisidGlsbCBcIiVzOnJlZnMvdGFncy8lc1wiPyIKKworIzogcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIjxLw6RsbGE+LWRlbGVuIGF2IHJlZi5zcGVjLWVuIMOkciBldHQgdHLDpGRvYmpla3QuXG4iCisiVmFyIGRldCBtZW5pbmdlbiBhdHQgdGFnZ2EgZXR0IG55dHQgdHLDpGQgZ2Vub20gYXR0IHPDpG5kYVxuIgorInRpbGwgXCIlczpyZWZzL3RhZ3MvJXNcIj8iCisKKyM6IHJlbW90ZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyI8S8OkbGxhPi1kZWxlbiBhdiByZWYuc3BlYy1lbiDDpHIgZXR0IGJsb2JvYmpla3QuXG4iCisiVmFyIGRldCBtZW5pbmdlbiBhdHQgdGFnZ2EgZW4gbnkgYmxvYiBnZW5vbSBhdHQgc8OkbmRhXG4iCisidGlsbCBcIiVzOnJlZnMvdGFncy8lc1wiPyIKKworIzogcmVtb3RlLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYnJhbmNoIgorbXNnc3RyICIlcyBrYW4gaW50ZSBzbMOlcyB1cHAgdGlsbCBlbiBncmVuIgorCisjOiByZW1vdGUuYzoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWxldGUgJyVzJzogcmVtb3RlIHJlZiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAia2FuIGludGUgdGEgYm9ydCBcIiVzXCI6IGZqw6RycmVmZXJlbnNlbiBmaW5ucyBpbnRlIgorCisjOiByZW1vdGUuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiZmrDpHJyLXJlZmVyZW5zc3BlY2lmaWthdGlvbmVuIFwiJXNcIiBtb3RzdmFyYXIgbWVyIMOkbiBlbiIKKworIzogcmVtb3RlLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgImZqw6Ryci1yZWZlcmVuc2VuIFwiJXNcIiBow6RtdGFyIGZyw6VuIG1lciDDpG4gZW4ga8OkbGxhIgorCisjOiByZW1vdGUuYzoxNjI3IHJlbW90ZS5jOjE3MjgKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIHBla2FyIGludGUgcMOlIGVuIGdyZW4iCisKKyM6IHJlbW90ZS5jOjE2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIm9rw6RuZCBncmVuOiBcIiVzXCIiCisKKyM6IHJlbW90ZS5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgImluZ2VuIHN0YW5kYXJkdXBwc3Ryw7ZtIGFuZ2l2ZW4gZsO2ciBncmVuZW4gXCIlc1wiIgorCisjOiByZW1vdGUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJ1cHBzdHLDtm1zZ3JlbmVuIFwiJXNcIiDDpHIgaW50ZSBsYWdyYWQgc29tIGVuIGZqw6RycnNww6VyYW5kZSBncmVuIgorCisjOiByZW1vdGUuYzoxNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJwdXNoLW3DpWxldCBcIiVzXCIgcMOlIGZqw6RycmVuIFwiJXNcIiBoYXIgaW5nZW4gbG9rYWx0IHNww6VyYW5kZSBncmVuIgorCisjOiByZW1vdGUuYzoxNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgImdyZW5lbiBcIiVzXCIgaGFyIGluZ2VuIGZqw6RyciBmw7ZyIFwicHVzaFwiIgorCisjOiByZW1vdGUuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAiXCJwdXNoXCItcmVmZXJlbnNzcGVjaWZpa2F0aW9uIGbDtnIgXCIlc1wiIGlubmVow6VsbGVyIGludGUgXCIlc1wiIgorCisjOiByZW1vdGUuYzoxNjk1Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICJcInB1c2hcIiBoYXIgaW5nZXQgbcOlbCAocHVzaC5kZWZhdWx0IMOkciBcImluZ2VudGluZ1wiKSIKKworIzogcmVtb3RlLmM6MTcxNworbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIlwiZW5rZWwgcHVzaFwiIG1vdHN2YXJhciBmbGVyYSBvbGlrYSBtw6VsIgorCisjOiByZW1vdGUuYzoxODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBmasOkcnItcmVmZXJlbnNlbiAlcyIKKworIzogcmVtb3RlLmM6MTg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiogSWdub3JlcmFyIG3DpHJrbGlnIHJlZmVyZW5zIFwiJXNcIiBsb2thbHQiCisKKyM6IHJlbW90ZS5jOjIwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJEaW4gZ3JlbiDDpHIgYmFzZXJhZCBww6UgXCIlc1wiLCBtZW4gZGVuIGhhciBmw7Zyc3Z1bm5pdCB1cHBzdHLDtm1zLlxuIgorCisjOiByZW1vdGUuYzoyMDIzCittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBmw7ZyIGF0dCByw6R0dGEpXG4iCisKKyM6IHJlbW90ZS5jOjIwMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIkRpbiBncmVuIMOkciDDoCBqb3VyIG1lZCBcIiVzXCIuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgIkRpbiBncmVuIG9jaCBcIiVzXCIgcGVrYXIgcMOlIG9saWthIGluY2hlY2tuaW5nYXIuXG4iCisKKyM6IHJlbW90ZS5jOjIwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICAoYW52w6RuZCBcIiVzXCIgZsO2ciBkZXRhbGplcilcbiIKKworIzogcmVtb3RlLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJEaW4gZ3JlbiBsaWdnZXIgZsO2cmUgXCIlc1wiIG1lZCAlZCBpbmNoZWNrbmluZy5cbiIKK21zZ3N0clsxXSAiRGluIGdyZW4gbGlnZ2VyIGbDtnJlIFwiJXNcIiBtZWQgJWQgaW5jaGVja25pbmdhci5cbiIKKworIzogcmVtb3RlLmM6MjA0MworbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcHVzaFwiIGbDtnIgYXR0IHB1YmxpY2VyYSBkaW5hIGxva2FsYSBpbmNoZWNrbmluZ2FyKVxuIgorCisjOiByZW1vdGUuYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJEaW4gZ3JlbiBsaWdnZXIgZWZ0ZXIgXCIlc1wiIG1lZCAlZCBpbmNoZWNrbmluZywgb2NoIGthbiBzbmFiYnNwb2xhcy5cbiIKK21zZ3N0clsxXSAiIgorIkRpbiBncmVuIGxpZ2dlciBlZnRlciBcIiVzXCIgbWVkICVkIGluY2hlY2tuaW5nYXIsIG9jaCBrYW4gc25hYmJzcG9sYXMuXG4iCisKKyM6IHJlbW90ZS5jOjIwNTQKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBwdWxsXCIgZsO2ciBhdHQgdXBwZGF0ZXJhIGRpbiBsb2thbGEgZ3JlbilcbiIKKworIzogcmVtb3RlLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyJEaW4gZ3JlbiBvY2ggXCIlc1wiIGhhciBkaXZlcmdlcmF0LFxuIgorIm9jaCBoYXIgJWQgcmVzcGVrdGl2ZSAlZCBvbGlrYSBpbmNoZWNrbmluZy5cbiIKK21zZ3N0clsxXSAiIgorIkRpbiBncmVuIG9jaCBcIiVzXCIgaGFyIGRpdmVyZ2VyYXQsXG4iCisib2NoIGhhciAlZCByZXNwZWt0aXZlICVkIG9saWthIGluY2hlY2tuaW5nYXIuXG4iCisKKyM6IHJlbW90ZS5jOjIwNjcKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcHVsbFwiIGbDtnIgYXR0IHNsw6UgaWhvcCBmasOkcnJncmVuZW4gbWVkIGRpbiBlZ2VuKVxuIgorCisjOiByZW1vdGUuYzoyMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0b2xrYSBmw7ZydsOkbnRhdCBvYmpla3RuYW1uIFwiJXNcIiIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgImZlbGFrdGlnIGVyc8OkdHRuaW5nc3JlZmVyZW5zbmFtbjogJXMiCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHJlcGxhY2UgcmVmOiAlcyIKK21zZ3N0ciAiZHVwbGljZXJhdCBlcnPDpHR0bmluZ3NyZWZlcmVuc25hbW46ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiZXJzw6R0dG5pbmdzZGp1cGV0IGbDtnIgaMO2Z3QgZsO2ciBvYmpla3RldCAlcyIKKworIzogcmVyZXJlLmM6MjE3IHJlcmVyZS5jOjIyNiByZXJlcmUuYzoyMjkKK21zZ2lkICJjb3JydXB0IE1FUkdFX1JSIgorbXNnc3RyICJ0cmFzaWcgTUVSR0VfUlIiCisKKyM6IHJlcmVyZS5jOjI2NCByZXJlcmUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVyZXJlIHJlY29yZCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgcmVyZXJlLXBvc3QiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAiZmVsIHZpZCBza3Jpdm5pbmcgYXYgXCIlc1wiICglcykiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNwb2xhIFwiJXNcIiIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2Ega29uZmxpa3Qtc3R5Y2tldCBpIFwiJXNcIiIKKworIzogcmVyZXJlLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICclcyciCittc2dzdHIgIlwidXRpbWUoKVwiIG1pc3NseWNrYWRlcyBww6UgXCIlc1wiIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrcml2YSBcIiVzXCIiCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAiS8O2YWRlIFwiJXNcIiBtZWQgc3BhcmFkIGzDtnNuaW5nLiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICJTcGFyYWRlIGzDtnNuaW5nIGbDtnIgXCIlc1wiLiIKKworIzogcmVyZXJlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIkzDtnN0ZSBcIiVzXCIgbWVkIHRpZGlnYXJlIGzDtnNuaW5nLiIKKworIzogcmVyZXJlLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgc3RyYXkgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgYm9ydCBsw7ZzIGzDpG5rIFwiJXNcIiIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJTcGFyYWRlIGbDtnJoYW5kc2JpbGQgZsO2ciBcIiVzXCIiCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDY3IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBrYXRhbG9nZW4gXCIlc1wiIgorCisjOiByZXJlcmUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgY29uZmxpY3RlZCBzdGF0ZSBpbiAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIHRpbGxzdMOlbmQgZsO2ciBzYW1tYW5zbGFnbmluZ3Nwcm9ibGVtIGkgXCIlc1wiIgorCisjOiByZXJlcmUuYzoxMDY4IHJlcmVyZS5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVtZW1iZXJlZCByZXNvbHV0aW9uIGZvciAnJXMnIgorbXNnc3RyICJpbmdldCBzcGFyYXQgc2FtbWFuc2xhZ25pbmdzcmVzdWx0YXQgZsO2ciBcIiVzXCIiCisKKyM6IHJlcmVyZS5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IGzDpG5rZW4gXCIlc1wiIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIlVwcGRhdGVyYWRlIGbDtnJoYW5kc2JpbGQgZsO2ciBcIiVzXCIiCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiR2zDtm1kZSBsw7ZzbmluZyBmw7ZyIFwiJXNcIlxuIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICJrYW4gaW50ZSB1cHBkYXRlcmEga2F0YWxvZ2VuIHJyLWNhY2hlIgorCisjOiByZXZpc2lvbi5jOjI0OTcKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoIGFwcGVhcnMgdG8gYmUgYnJva2VuIgorbXNnc3RyICJkaW4gbnV2YXJhbmRlIGdyZW4gdmVya2FyIHZhcmEgdHJhc2lnIgorCisjOiByZXZpc2lvbi5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJkaW4gbnV2YXJhbmRlIGdyZW4gXCIlc1wiIGlubmVow6VsbGVyIMOkbm51IGludGUgbsOlZ3JhIGluY2hlY2tuaW5nYXIiCisKKyM6IHJldmlzaW9uLmM6MjcwOAorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDDpHIgaW5rb21wYXRpYmVsdCBtZWQgLS1iaXNlY3QiCisKKyM6IHJldmlzaW9uLmM6MjcxMgorbXNnaWQgIi1MIGRvZXMgbm90IHlldCBzdXBwb3J0IGRpZmYgZm9ybWF0cyBiZXNpZGVzIC1wIGFuZCAtcyIKK21zZ3N0ciAiLUwgc3TDtmRlciDDpG5udSBpbnRlIGFuZHJhIGRpZmYtZm9ybWF0IMOkbiAtcCBvY2ggLXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYyCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgYXN5bmtyb24gdHLDpWQ6ICVzIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKyJLcm9rZW4gXCIlc1wiIGlnbm9yZXJhZGVzIGVmdGVyc29tIGRlbiBpbnRlIMOkciBtYXJrZXJhZCBzb20ga8O2cmJhci5cbiIKKyJEdSBrYW4gaW5ha3RpdmVyYSB2YXJuaW5nZW4gbWVkIFwiZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VcIi4iCisKKyM6IHNlbmQtcGFjay5jOjE0NAorbXNnaWQgInVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0IHdoaWxlIHJlYWRpbmcgcmVtb3RlIHVucGFjayBzdGF0dXMiCittc2dzdHIgIm92w6RudGF0IGZsdXNoLXBha2V0IHZpZCBsw6RzbmluZyBhdiBmasOkcnJ1cHBhY2tuaW5nc3N0YXR1cyIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZmrDpHJydXBwYWNrbmluZ3NzdGF0dXM6ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICJmasOkcnJ1cHBhY2tuaW5nIG1pc3NseWNrYWRlczogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdW5kZXJ0ZWNrbmEgcHVzaC1jZXJ0aWZpa2F0ZXQiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAibW90dGFnYXJzaWRhbiBzdMO2ZGVyIGludGUgcHVzaCBtZWQgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorInPDpG5kZXIgaW50ZSBwdXNoLWNlcnRpZmlrYXQgZWZ0ZXJzb20gbW90dGFnYXJzaWRhbiBpbnRlIHN0bGRlciBwdXNoIG1lZCAtLSIKKyJzaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQzNworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAibW90dGFnYXJzaWRhbiBzdMO2ZGVyIGludGUgcHVzaCBtZWQgLS1hdG9taWMiCisKKyM6IHNlbmQtcGFjay5jOjQ0MgorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICJtb3R0YWdhcnNpZGFuIHN0w7ZkZXIgaW50ZSBwdXNoLWZsYWdnb3IiCisKKyM6IHNlcXVlbmNlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICJmZWxha3RpZ3QgaW5jaGVja25pbmdzbWVkZGVsYW5kZXN0w6RkbmluZ3Nsw6RnZSBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlICclcyciCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjMxMyBidWlsdGluL3JlYmFzZS5jOjc4MSBidWlsdGluL3JlYmFzZS5jOjE3MDYgYnVpbHRpbi9ybS5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjMyMworbXNnaWQgInJldmVydCIKK21zZ3N0ciAicmV2ZXJ0IgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgInJlYmFzZSAtaSIKK21zZ3N0ciAicmViYXNlIC1pIgorCisjOiBzZXF1ZW5jZXIuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICJva8OkbmQgZnVua3Rpb246ICVkIgorCisjOiBzZXF1ZW5jZXIuYzozODcKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorImVmdGVyIGF0dCBoYSBsw7ZzdCBrb25mbGlrdGVybmEsIG1hcmtlcmEgZGUgcsOkdHRhZGUgc8O2a3bDpGdhcm5hXG4iCisibWVkIFwiZ2l0IGFkZCA8c8O2a3bDpGdhcj5cIiBlbGxlciBcImdpdCBybSA8c8O2a3bDpGdhcj5cIiIKKworIzogc2VxdWVuY2VyLmM6MzkwCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyJlZnRlciBhdHQgaGEgbMO2c3Qga29uZmxpa3Rlcm5hLCBtYXJrZXJhIGRlIHLDpHR0YWRlIHPDtmt2w6RnYXJuYVxuIgorIm1lZCBcImdpdCBhZGQgPHPDtmt2w6RnYXI+XCIgZWxsZXIgXCJnaXQgcm0gPHPDtmt2w6RnYXI+XCJcbiIKKyJvY2ggY2hlY2thIGluIHJlc3VsdGF0ZXQgbWVkIFwiZ2l0IGNvbW1pdFwiIgorCisjOiBzZXF1ZW5jZXIuYzo0MDMgc2VxdWVuY2VyLmM6Mjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpXNhIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBlb2wgdG8gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgcmFkc2x1dCB0aWxsIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6NDE1IHNlcXVlbmNlci5jOjI3OTggc2VxdWVuY2VyLmM6Mjk5OSBzZXF1ZW5jZXIuYzozMDEzCisjOiBzZXF1ZW5jZXIuYzozMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgZsOkcmRpZ3N0w6RsbGEgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzggc2VxdWVuY2VyLmM6MTcwNyBzZXF1ZW5jZXIuYzoyODE4IHNlcXVlbmNlci5jOjMyNTkKKyM6IHNlcXVlbmNlci5jOjMzNjggYnVpbHRpbi9hbS5jOjI0NCBidWlsdGluL2NvbW1pdC5jOjc4MyBidWlsdGluL21lcmdlLmM6MTExNworIzogYnVpbHRpbi9yZWJhc2UuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICJkaW5hIGxva2FsYSDDpG5kcmluZ2FyIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2ICVzLiIKKworIzogc2VxdWVuY2VyLmM6NDY4Cittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICJjaGVja2EgaW4gZGluYSDDpG5kcmluZ2FyIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIGbDtnIgYXR0IGZvcnRzw6R0dGEuIgorCisjOiBzZXF1ZW5jZXIuYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiJXM6IHNuYWJic3BvbGEiCisKKyM6IHNlcXVlbmNlci5jOjUzOSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IHN0w6RkbmluZ3Nsw6RnZSAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIsICJjaGVycnktcGljayIgb3IKKyMuICJyZWJhc2UgLWkiLgorIy4KKyM6IHNlcXVlbmNlci5jOjYzMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogS3VuZGUgaW50ZSBza3JpdmEgbnkgaW5kZXhmaWwiCisKKyM6IHNlcXVlbmNlci5jOjY1MAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZSIKK21zZ3N0ciAia2FuIGludGUgdXBwZGF0ZXJhIGNhY2hldHLDpGQiCisKKyM6IHNlcXVlbmNlci5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIGJlc3TDpG1tYSBIRUFEOnMgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciCittc2dzdHIgImluZ2VuIG55Y2tlbCBpICBcIiUuKnNcIiIKKworIzogc2VxdWVuY2VyLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZXF1b3RlIHZhbHVlIG9mICclcyciCittc2dzdHIgImthbiBpbnRlIHRhIGJvcnQgY2l0ZXJpbmcgYXYgdsOkcmRldCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjc5MiB3cmFwcGVyLmM6MTkwIHdyYXBwZXIuYzozNjAgYnVpbHRpbi9hbS5jOjcwNQorIzogYnVpbHRpbi9hbS5jOjc5NyBidWlsdGluL21lcmdlLmM6MTExNCBidWlsdGluL3JlYmFzZS5jOjEwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgbMOkc25pbmciCisKKyM6IHNlcXVlbmNlci5jOjgwMgorbXNnaWQgIidHSVRfQVVUSE9SX05BTUUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIlwiR0lUX0FVVEhPUl9OQU1FXCIgaGFyIHJlZGFuIGFuZ2l2aXRzIgorCisjOiBzZXF1ZW5jZXIuYzo4MDcKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAiXCJHSVRfQVVUSE9SX0VNQUlMXCIgaGFyIHJlZGFuIGFuZ2l2aXRzIgorCisjOiBzZXF1ZW5jZXIuYzo4MTIKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICJcIkdJVF9BVVRIT1JfREFURVwiIGhhciByZWRhbiBhbmdpdml0cyIKKworIzogc2VxdWVuY2VyLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAib2vDpG5kIHZhcmlhYmVsIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6ODIxCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9OQU1FJyIKK21zZ3N0ciAiXCJHSVRfQVVUSE9SX05BTUVcIiBzYWtuYXMiCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIgorbXNnc3RyICJcIkdJVF9BVVRIT1JfRU1BSUxcIiBzYWtuYXMiCisKKyM6IHNlcXVlbmNlci5jOjgyNQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgIlwiR0lUX0FVVEhPUl9EQVRFXCIgc2FrbmFzIgorCisjOiBzZXF1ZW5jZXIuYzo5MDIgc2VxdWVuY2VyLmM6MTQyNworbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorbXNnc3RyICJmZWxha3RpZyBpZGVudC1yYWQiCisKKyM6IHNlcXVlbmNlci5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiZHUgaGFyIGvDtmFkZSDDpG5kcmluZ2FyIGkgZGluIGFyYmV0c2thdGFsb2cuXG4iCisiT20gw6RuZHJpbmdhcm5hIHNrYWxsIGzDpGdnYXMgaW4gaSBmw7ZyZWfDpWVuZGUgaW5jaGVja25pbmcsIGvDtnI6XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyJPbSBkZSBza2FsbCBjaGVja2FzIGluIGkgZW4gZWdlbiBpbmNoZWNrbmluZywga8O2cjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJPYXZzZXR0IHZpbGtldCwgbsOkciBkdSDDpHIgZsOkcmRpZyBmb3J0c8OkdHRlciBkdSBtZWQ6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MTIxOAorbXNnaWQgIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIgorbXNnc3RyICJrcm9rZW4gXCJwcmVwYXJlLWNvbW1pdC1tc2dcIiBtaXNzbHlja2FkZXMiCisKKyM6IHNlcXVlbmNlci5jOjEyMjQKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJEaXR0IG5hbW4gb2NoIGUtcG9zdGFkcmVzcyBrb25maWd1cmVyYWRlcyBhdXRvbWF0aXNrdCBiYXNlcmF0IHDDpVxuIgorImRpdHQgYW52w6RuZGFyLWlkIG9jaCB2w6RyZG5hbW4uIEtvbnRyb2xsZXJhIGF0dCBkZSDDpHIgcmlrdGlnYS4gRHVcbiIKKyJrYW4gZsO2cmhpbmRyYSBkZXQgaMOkciBtZWRkZWxhbmRldCBnZW5vbSBhdHQgc3TDpGxsYSBkZW0gZXhwbGljaXQuXG4iCisiS8O2ciBmw7ZsamFuZGUga29tbWFuZG9uIG9jaCBmw7ZsaiBpbnN0cnVrdGlvbmVybmEgaSB0ZXh0cmVkaWdlcmFyZW5cbiIKKyJmw7ZyIGF0dCByZWRpZ2VyYSBkaW4ga29uZmlndXJhdGlvbnNmaWw6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHLDpHR0YSBpZGVudGl0ZXRlbiBzb20gYW52w6RuZGVzIGbDtnIgZGVuIGjDpHJcbiIKKyJpbmNoZWNrbmluZ2VuIG1lZDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMzcKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJEaXR0IG5hbW4gb2NoIGUtcG9zdGFkcmVzcyBrb25maWd1cmVyYWRlcyBhdXRvbWF0aXNrdCBiYXNlcmF0IHDDpVxuIgorImRpdHQgYW52w6RuZGFyLWlkIG9jaCB2w6RyZG5hbW4uIEtvbnRyb2xsZXJhIGF0dCBkZSDDpHIgcmlrdGlnYS4gRHVcbiIKKyJrYW4gZsO2cmhpbmRyYSBkZXQgaMOkciBtZWRkZWxhbmRldCBnZW5vbSBhdHQgc3TDpGxsYSBkZW0gZXhwbGljaXQ6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiRGl0dCBuYW1uXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIGR1QGV4YW1wbGUuY29tXG4iCisiXG4iCisiTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHLDpHR0YSBpZGVudGl0ZXRlbiBzb20gYW52w6RuZGVzIGbDtnIgZGVuIGjDpHJcbiIKKyJpbmNoZWNrbmluZ2VuIG1lZDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyNzkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIHNsw6UgdXBwIGVuIHByZWNpcyBza2FwYWQgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjEyODEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZW4gcHJlY2lzIHNrYXBhZCBpbmNoZWNrbmluZyIKKworIzogc2VxdWVuY2VyLmM6MTMyNworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIGJlc3TDpG1tYSBIRUFEIGVmdGVyIGF0dCBoYSBza2FwYXQgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjEzMjkKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJmcsOlbmtvcHBsYWQgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTMzMworbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKHJvdGluY2hlY2tuaW5nKSIKKworIzogc2VxdWVuY2VyLmM6MTM1NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJIRUFEICVzIMOkciBpbnRlIGVuIGluY2hlY2tuaW5nISIKKworIzogc2VxdWVuY2VyLmM6MTM2MCBzZXF1ZW5jZXIuYzoxNDU4IGJ1aWx0aW4vY29tbWl0LmM6MTU2OQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBIRUFEOnMgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjE0MTEgc2VxdWVuY2VyLmM6MjA1NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGluY2hlY2tuaW5nZW5zIGbDtnJmYXR0YXJlIgorCisjOiBzZXF1ZW5jZXIuYzoxNDMxCittc2dpZCAiY29ycnVwdGVkIGF1dGhvciB3aXRob3V0IGRhdGUgaW5mb3JtYXRpb24iCittc2dzdHIgInRyYXNpZyBmw7ZyZmF0dGFyZSB1dGFuIGRhdHVtaW5mb3JtYXRpb24iCisKKyM6IHNlcXVlbmNlci5jOjE0NDcgYnVpbHRpbi9hbS5jOjE1NjEgYnVpbHRpbi9tZXJnZS5jOjY4NAorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgImdpdCB3cml0ZS10cmVlIG1pc3NseWNrYWRlcyBza3JpdmEgZXR0IHRyw6RkIgorCisjOiBzZXF1ZW5jZXIuYzoxNDgwIHNlcXVlbmNlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZnLDpW4gXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzoxNTE2IGJ1aWx0aW4vYW0uYzoxNTgzIGJ1aWx0aW4vY29tbWl0LmM6MTY2OCBidWlsdGluL21lcmdlLmM6ODgzCisjOiBidWlsdGluL21lcmdlLmM6OTA4Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIGluY2hlY2tuaW5nc29iamVrdCIKKworIzogc2VxdWVuY2VyLmM6MTU3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGluY2hlY2tuaW5nZW4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZsO2csOkbGRyYWluY2hlY2tuaW5nZW4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE2NTYgc2VxdWVuY2VyLmM6MTc2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICJva8OkbnQga29tbWFuZG86ICVkIgorCisjOiBzZXF1ZW5jZXIuYzoxNzE0IHNlcXVlbmNlci5jOjE3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIgorbXNnc3RyICJEZXQgaMOkciDDpHIgZW4ga29tYmluYXRpb24gYXYgJWQgaW5jaGVja25pbmdhci4iCisKKyM6IHNlcXVlbmNlci5jOjE3MjQKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAiYmVow7Z2ZXIgZW4gSEVBRC1pbmNoZWNrbmluZyBhdHQgcsOkdHRhIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI2IHNlcXVlbmNlci5jOjMzMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgSEVBRDpzIGluY2hlY2tuaW5nc21lZGRlbGFuZGUiCisKKyM6IHNlcXVlbmNlci5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgImthbiBpbnRlIHNrcml2YSBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjE3NDEgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NgorbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgIkRldCBow6RyIMOkciAxOmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciAlcyIKKworIzogc2VxdWVuY2VyLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJWQ6IgorbXNnc3RyICJEZXQgaMOkciDDpHIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NtZWRkZWxhbmRlICVkIGtvbW1lciBob3BwYXMgw7Z2ZXI6IgorCisjOiBzZXF1ZW5jZXIuYzoxODUwCittc2dpZCAieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiZGluIGluZGV4ZmlsIGhhciBpbnRlIHNsYWdpdHMgaWhvcC4iCisKKyM6IHNlcXVlbmNlci5jOjE4NTcKK21zZ2lkICJjYW5ub3QgZml4dXAgcm9vdCBjb21taXQiCittc2dzdHIgImthbiBpbnRlIGfDtnJhIFwiZml4dXBcIiBww6Ugcm90aW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjE4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJpbmNoZWNrbmluZyAlcyDDpHIgZW4gc2FtbWFuc2xhZ25pbmcsIG1lbiBmbGFnZ2FuIC1tIGFuZ2F2cyBpbnRlLiIKKworIzogc2VxdWVuY2VyLmM6MTg4NCBzZXF1ZW5jZXIuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiaW5jaGVja25pbmcgJXMgaGFyIGludGUgZsO2csOkbGRlciAlZCIKKworIzogc2VxdWVuY2VyLmM6MTg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAia2FuIGludGUgaMOkbXRhIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlIGEgInRvZG8iIGNvbW1hbmQgbGlrZQorIy4gInJldmVydCIgb3IgInBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMS4KKyM6IHNlcXVlbmNlci5jOjE5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczoga2FuIGludGUgdG9sa2EgZsO2csOkbGRyYWluY2hlY2tuaW5nZW4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgImt1bmRlIGludGUgYnl0YSBuYW1uIHDDpSBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDpW5ncmEgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRpbGzDpG1wYSAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBtaXNzbHlja2FkZXMgbMOkc2EgaW5kZXhldCIKKworIzogc2VxdWVuY2VyLmM6MjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGluZGV4ZXQiCisKKyM6IHNlcXVlbmNlci5jOjIxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiJXMgdGFyIGludGUgYXJndW1lbnQ6IFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6MjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgImFyZ3VtZW50IHNha25hcyBmw7ZyICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgXCIlLipzXCIiCisKKyM6IHNlcXVlbmNlci5jOjIyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJvZ2lsdGlnIHJhZCAlZDogJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJyVzJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIFwiJXNcIiB1dGFuIGVuIGbDtnJlZ8OlZW5kZSBpbmNoZWNrbmluZyIKKworIzogc2VxdWVuY2VyLmM6MjM0OCBidWlsdGluL3JlYmFzZS5jOjE3MiBidWlsdGluL3JlYmFzZS5jOjE5NworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjMgYnVpbHRpbi9yZWJhc2UuYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgXCIlc1wiLiIKKworIzogc2VxdWVuY2VyLmM6MjM4NAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiYXZicnl0ZXIgcMOlZ8OlZW5kZSBcImNoZXJyeS1waWNrXCIiCisKKyM6IHNlcXVlbmNlci5jOjIzOTEKK21zZ2lkICJjYW5jZWxsaW5nIGEgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJhdmJyeXRlciBww6Vnw6VlbmRlIFwicmV2ZXJ0XCIiCisKKyM6IHNlcXVlbmNlci5jOjI0MzUKK21zZ2lkICJwbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAicsOkdHRhIGRldCBtZWQgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICJvYW52w6RuZGJhcnQgbWFudXM6IFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6MjQ0MgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiaW5nYSBpbmNoZWNrbmluZ2FyIGzDpHN0ZXMuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDUzCittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJjaGVycnktcGlja1wiIHVuZGVyIGVuIFwicmV2ZXJ0XCIuIgorCisjOiBzZXF1ZW5jZXIuYzoyNDU1Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJyZXZlcnRcIiB1bmRlciBlbiBcImNoZXJyeS1waWNrXCIuIgorCisjOiBzZXF1ZW5jZXIuYzoyNTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IHbDpHJkZSBmw7ZyICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjYzMAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICJvYW52w6RuZGJhciBzcXVhc2gtb250byIKKworIzogc2VxdWVuY2VyLmM6MjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAidHJhc2lndCBtYW51czogXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzM2IHNlcXVlbmNlci5jOjQ0NjMKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAiZGVuIGFuZ2l2bmEgdXBwc8OkdHRuaW5nZW4gaW5jaGVja25pbmdhciDDpHIgdG9tIgorCisjOiBzZXF1ZW5jZXIuYzoyNzUyCittc2dpZCAicmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImVuIFwicmV2ZXJ0XCIgcMOlZ8OlciByZWRhbiIKKworIzogc2VxdWVuY2VyLmM6Mjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJ0ZXN0YSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI3NTcKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJlbiBcImNoZXJyeS1waWNrXCIgcMOlZ8OlciByZWRhbiIKKworIzogc2VxdWVuY2VyLmM6Mjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgInRlc3RhIFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIFwic2VxdWVuY2VyXCIta2F0YWxvZ2VuIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6Mjc4OAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIEhFQUQiCittc2dzdHIgImt1bmRlIGludGUgbMOlc2EgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjg0OCBzZXF1ZW5jZXIuYzo0MjA5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJpbmdlbiBcImNoZXJyeS1waWNrXCIgZWxsZXIgXCJyZXZlcnRcIiBww6Vnw6VyIgorCisjOiBzZXF1ZW5jZXIuYzoyODUwIHNlcXVlbmNlci5jOjI4NjEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICJrYW4gaW50ZSBiZXN0w6RtbWEgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjg1MiBzZXF1ZW5jZXIuYzoyODk2Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgImthbiBpbnRlIGF2YnJ5dGEgZnLDpW4gZW4gZ3JlbiBzb20gw6RubnUgaW50ZSDDpHIgZsO2ZGQiCisKKyM6IHNlcXVlbmNlci5jOjI4ODIgYnVpbHRpbi9ncmVwLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIFwiJXNcIjogJXMiCisKKyM6IHNlcXVlbmNlci5jOjI4ODUKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJvdsOkbnRhdCBmaWxzbHV0IgorCisjOiBzZXF1ZW5jZXIuYzoyODkxCisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAic3BhcmFkIEhFQUQtZmlsIGZyw6VuIGbDtnJlIFwiY2hlcnJ5LXBpY2tcIiwgXCIlc1wiLCDDpHIgdHJhc2lnIgorCisjOiBzZXF1ZW5jZXIuYzoyOTAyCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICIiCisiRHUgdmVya2FyIGhhIGZseXR0YXQgSEVBRC5cbiIKKyJTcG9sYXIgaW50ZSB0aWxsYmFrYSwga29udHJvbGxlcmEgSEVBRCEiCisKKyM6IHNlcXVlbmNlci5jOjI5NDMKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgImluZ2VuIFwicmV2ZXJzXCIgcMOlZ8OlciIKKworIzogc2VxdWVuY2VyLmM6Mjk1MQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICJpbmdlbiBcImNoZXJyeS1waWNrXCIgcMOlZ8OlciIKKworIzogc2VxdWVuY2VyLmM6Mjk2MQorbXNnaWQgImZhaWxlZCB0byBza2lwIHRoZSBjb21taXQiCittc2dzdHIgImt1bmRlIGludGUgaG9wcGEgw7Z2ZXIgaW5jaGVja25pbmdlbiIKKworIzogc2VxdWVuY2VyLmM6Mjk2OAorbXNnaWQgInRoZXJlIGlzIG5vdGhpbmcgdG8gc2tpcCIKK21zZ3N0ciAiaW5nZW50aW5nIGF0dCBob3BwYSDDtnZlciIKKworIzogc2VxdWVuY2VyLmM6Mjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorImhhciBkdSByZWRhbiBjaGVja2F0IGluP1xuIgorInRlc3RhIFwiZ2l0ICVzIC0tY29udGludWVcIiIKKworIzogc2VxdWVuY2VyLmM6MzA5NSBzZXF1ZW5jZXIuYzo0MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgJXMiCittc2dzdHIgImt1bmRlIGludGUgdXBwZGF0ZXJhICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMTM0IHNlcXVlbmNlci5jOjQxMDEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2FuIGludGUga29waWVyYSBpbiBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjMxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJEdSBrYW4gdXTDtmthIGluY2hlY2tuaW5nZW4gbnUsIG1lZFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiTsOkciBkdSDDpHIgbsO2amQgbWVkIGRpbmEgw6RuZHJpbmdhciBrw7ZyIGR1XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0aWxsw6RtcGEgJXMuLi4gJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIGlob3AgJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzE5MCBzZXF1ZW5jZXIuYzozMTk0IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGtvcGllcmEgaW4gXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzozMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJrw7ZybmluZ2VuIG1pc3NseWNrYWRlczogJXNcbiIKKyIlc0R1IGthbiByw6R0dGEgcHJvYmxlbWV0IG9jaCBzZWRhbiBrw7ZyYVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMjcKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICJvY2ggZ2pvcmRlIMOkbmRyaW5nYXIgdGlsbCBpbmRleGV0IG9jaC9lbGxlciBhcmJldHNrYXRhbG9nZW5cbiIKKworIzogc2VxdWVuY2VyLmM6MzIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJrw7ZybmluZ2VuIGx5Y2thZGVzOiAlc1xuIgorIm1lbiBsw6RtbmFkZSBrdmFyIMOkbmRyaW5nYXIgaSBpbmRleGV0IG9jaC9lbGxlciBhcmJldHNrYXRhbG9nZW5cbiIKKyJDaGVja2EgaW4gZWxsZXIgdXRmw7ZyIFwic3Rhc2hcIiBww6Ugw6RuZHJpbmdhcm5hIG9jaCBrw7ZyIHNlZGFuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGxhYmVsIG5hbWU6ICclLipzJyIKK21zZ3N0ciAib2dpbHRpZ3QgZXRpa2V0dG5hbW46IFwiJS4qc1wiIgorCisjOiBzZXF1ZW5jZXIuYzozMzQ4Cittc2dpZCAid3JpdGluZyBmYWtlIHJvb3QgY29tbWl0IgorbXNnc3RyICJza3JpdmVyIGZlamthZCByb3RpbmNoZWNrbmluZyIKKworIzogc2VxdWVuY2VyLmM6MzM1MworbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgInNrcml2ZXIgc3F1YXNoLW9udG8iCisKKyM6IHNlcXVlbmNlci5jOjMzOTEgYnVpbHRpbi9yZWJhc2UuYzo4NzYgYnVpbHRpbi9yZWJhc2UuYzo4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBoaXR0YSB0csOkZGV0IGbDtnIgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzozNDM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgImt1bmRlIGludGUgdXBwbMO2c2EgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzozNDY3Cittc2dpZCAiY2Fubm90IG1lcmdlIHdpdGhvdXQgYSBjdXJyZW50IHJldmlzaW9uIgorbXNnc3RyICJrYW4gaW50ZSBzbMOlIGlob3AgdXRhbiBlbiBha3R1ZWxsIGluY2hlY2tuaW5nIgorCisjOiBzZXF1ZW5jZXIuYzozNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJS4qcyciCittc2dzdHIgImthbiBpbnRlIHRvbGthIFwiJS4qc1wiIgorCisjOiBzZXF1ZW5jZXIuYzozNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gbWVyZ2U6ICclLipzJyIKK21zZ3N0ciAiaW5nZXQgYXR0IHNsw6Ugc2FtbWFuOiBcIiUuKnNcIiIKKworIzogc2VxdWVuY2VyLmM6MzUxMAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgIlwib2N0b3B1c1wiLXNhbW1hbnNsYWduaW5nIGthbiBpbnRlIGvDtnJhcyBvdmFucMOlIGVuIFtueSByb3RdIgorCisjOiBzZXF1ZW5jZXIuYzozNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgY29tbWl0IG1lc3NhZ2Ugb2YgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzozNjg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGVucyBmw7Zyc8O2a2Egc2zDpSBpaG9wIFwiJS4qc1wiIgorCisjOiBzZXF1ZW5jZXIuYzozNzA0Cittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmc6IEt1bmRlIGludGUgc2tyaXZhIG55IGluZGV4ZmlsIgorCisjOiBzZXF1ZW5jZXIuYzozNzczIGJ1aWx0aW4vcmViYXNlLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICJUaWxsw6RtcGFkZSBhdXRvc3Rhc2guXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJrYW4gaW50ZSBzcGFyYSAlcyIKKworIzogc2VxdWVuY2VyLmM6Mzc4OCBidWlsdGluL3JlYmFzZS5jOjc0OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiVGlsbMOkbXBuaW5nIGF2IGF1dG9zdGFzaCBnYXYga29uZmxpa3Rlci5cbiIKKyJEaW5hIMOkbmRyaW5nYXIgw6RyIHPDpGtyYSBpIHN0YXNoZW4uXG4iCisiRHUga2FuIG7DpHIgc29tIGhlbHN0IGFudsOkbmRhIFwiZ2l0IHN0YXNoIHBvcFwiIGVsbGVyIFwiZ2l0IHN0YXNoIGRyb3BcIi5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImt1bmRlIGludGUgY2hlY2thIHV0ICVzIgorCisjOiBzZXF1ZW5jZXIuYzozODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSB2YWxpZCBPSUQiCittc2dzdHIgIiVzOiBpbnRlIGV0dCBnaWx0aWd0IE9JRCIKKworIzogc2VxdWVuY2VyLmM6Mzg2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzc5Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICJrdW5kZSBpbnRlIGtvcHBsYSBmcsOlbiBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICJTdG9wcGFkZSBww6UgSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAiU3RvcHBhZGUgcMOlICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIGvDtnJhIHRvZG8ta29tbWFuZG90XG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJEZXQgaGFyIGxhZ3RzIHRpbGxiYWthIGkga8O2bjsgRsO2ciBhdHQgcmVkaWdlcmEga29tbWFuZG90IGlubmFuIGR1XG4iCisiZm9ydHPDpHR0ZXIsIHJlZGlnZXJhIGbDtnJzdCBhdHRnw7ZyYS1saXN0YW46XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjM5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlcy4uLiAgJS4qc1xuIgorbXNnc3RyICJTdG9wcGFkZSBww6UgJXMuLi4gJS4qc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAib2vDpG50IGtvbW1hbmRvICVkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTA5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6NDExNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBcIm9udG9cIiIKKworIzogc2VxdWVuY2VyLmM6NDEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlIEhFQUQgdG8gJXMiCittc2dzdHIgImt1bmRlIGludGUgdXBwZGF0ZXJhIEhFQUQgdGlsbCAlcyIKKworIzogc2VxdWVuY2VyLmM6NDIyMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJrYW4gaW50ZSBvbWJhc2VyYTogRHUgaGFyIG9rw7ZhZGUgw6RuZHJpbmdhci4iCisKKyM6IHNlcXVlbmNlci5jOjQyMzAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAia2FuIGludGUgbMOkZ2dhIHRpbGwgaW5jaGVja25pbmcgc29tIGludGUgZmlubnMiCisKKyM6IHNlcXVlbmNlci5jOjQyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICJvZ2lsdGlnIGZpbDogXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgIm9naWx0aWd0IGlubmVow6VsbDogXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzo0MjM3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisiRHUgaGFyIMOkbmRyaW5nYXIgaSBhcmJldHNrYXRhbG9nZW4gc29tIGludGUgY2hlY2thdHMgaW4uIENoZWNrYSBpbiBkZW1cbiIKKyJmw7Zyc3Qgb2NoIGvDtnIgc2VkYW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBpZ2VuLiIKKworIzogc2VxdWVuY2VyLmM6NDI3MyBzZXF1ZW5jZXIuYzo0MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBmaWxlOiAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBmaWw6IFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6NDMyNworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAia3VuZGUgaW50ZSB0YSBib3J0IENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjQzMzQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBjaGVja2EgaW4ga8O2YWRlIMOkbmRyaW5nYXIuIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlczoga2FuIGludGUgZ8O2cmEgXCJjaGVycnktcGlja1wiIHDDpSB0eXBlbiBcIiVzXCIiCisKKyM6IHNlcXVlbmNlci5jOjQ0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGJhZCByZXZpc2lvbiIKK21zZ3N0ciAiJXM6IGZlbGFrdGlnIHJldmlzaW9uIgorCisjOiBzZXF1ZW5jZXIuYzo0NDc5Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJrYW4gaW50ZSDDpW5ncmEgc29tIGbDtnJzdGEgaW5jaGVja25pbmciCisKKyM6IHNlcXVlbmNlci5jOjQ5NTIKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB0OiBmbGFnZ29yIHNvbSBpbnRlIHN0w7ZkcyIKKworIzogc2VxdWVuY2VyLmM6NDk1NQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogZmVsIG7DpHIgcmV2aXNpb25lciBza3VsbGUgZsO2cmJlcmVkYXMiCisKKyM6IHNlcXVlbmNlci5jOjUxMTMKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJyBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS0iCisiY29udGludWUnLlxuIgorIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLlxuIgorbXNnc3RyICIiCisiRHUga2FuIHLDpHR0YSBkZXR0YSBtZWQgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgZsO2bGp0IGF2IFwiZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZVwiLlxuIgorIkF2YnJ5dCBvbWJhc2VyaW5nZW4gbWVkIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIuXG4iCisKKyM6IHNlcXVlbmNlci5jOjUyMjYgc2VxdWVuY2VyLmM6NTI0MworbXNnaWQgIm5vdGhpbmcgdG8gZG8iCittc2dzdHIgImluZ2V0IGF0dCBnw7ZyYSIKKworIzogc2VxdWVuY2VyLmM6NTI1NworbXNnaWQgImNvdWxkIG5vdCBza2lwIHVubmVjZXNzYXJ5IHBpY2sgY29tbWFuZHMiCittc2dzdHIgImt1bmRlIGludGUgaG9wcGEgw7Z2ZXIgb27DtmRpZ2EgXCJwaWNrXCIta29tbWFuZG9uIgorCisjOiBzZXF1ZW5jZXIuYzo1MzUxCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAic2tyaXB0ZXQgaGFyIHJlZGFuIG9tb3JkbmF0cy4iCisKKyM6IHNldHVwLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICJcIiVzXCIgw6RyIHV0YW5mw7ZyIGFya2l2ZXQiCisKKyM6IHNldHVwLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVzOiBzw7ZrdsOkZ2VuIGZpbm5zIGludGUgaSBhcmJldHNrYXRhbG9nZW4uXG4iCisiQW52w6RuZCBcImdpdCA8a29tbWFuZG8+IC0tIDxzw7ZrdsOkZz4uLlwiIGbDtnIgYXR0IGFuZ2Ugc8O2a3bDpGdhciBzb20gaW50ZSBmaW5ucyAiCisibG9rYWx0LiIKKworIzogc2V0dXAuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisidHZldHlkaWd0IGFyZ3VtZW50IFwiJXNcIjogb2vDpG5kIHJldmlzaW9uIGVsbGVyIHPDtmt2w6RnIGludGUgaSAiCisiYXJiZXRza2F0YWxvZ2VuLlxuIgorIkFudsOkbmQgXCItLVwiIGbDtnIgYXR0IHNraWxqYSBzw7ZrdsOkZ2FyIGZyw6VuIHJldmlzaW9uZXIsIHPDpSBow6RyOlxuIgorIlwiZ2l0IDxrb21tYW5kbz4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsPi4uLl1cIiIKKworIzogc2V0dXAuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAiZmxhZ2dhbiBcIiVzXCIgbcOlc3RlIGFuZ2VzIGbDtnJlIGFyZ3VtZW50IHNvbSBpbnRlIMOkciBmbGFnZ29yIgorCisjOiBzZXR1cC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisidHZldHlkaWd0IGFyZ3VtZW50IFwiJXNcIjogYsOlZGUgcmV2aXNpb24gb2NoIGZpbG5hbW5cbiIKKyJBbnbDpG5kIFwiLS1cIiBmw7ZyIGF0dCBza2lsamEgc8O2a3bDpGdhciBmcsOlbiByZXZpc2lvbmVyLCBzw6UgaMOkcjpcbiIKKyJcImdpdCA8a29tbWFuZG8+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbD4uLi5dXCIiCisKKyM6IHNldHVwLmM6MzkxCittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgImthbiBpbnRlIHNrYXBhIGFyYmV0c2thdGFsb2cgbWVkIGZlbGFrdGlnIGtvbmZpZ3VyYXRpb24iCisKKyM6IHNldHVwLmM6Mzk1Cittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgImZ1bmt0aW9uZW4gbcOlc3RlIGvDtnJhcyBpIGVuIGFyYmV0c2thdGFsb2ciCisKKyM6IHNldHVwLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJGw7ZydsOkbnRhZGUgZ2l0LWFya2l2dmVyc2lvbiA8PSAlZCwgaGl0dGFkZSAlZCIKKworIzogc2V0dXAuYzo1NDkKK21zZ2lkICJ1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9ucyBmb3VuZDoiCittc2dzdHIgIm9rw6RuZGEgYXJraXZ1dMO2a25pbmdhciBoaXR0YWRlczoiCisKKyM6IHNldHVwLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAiZmVsIHZpZCDDtnBwbmluZyBhdiBcIiVzXCIiCisKKyM6IHNldHVwLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBsYXJnZSB0byBiZSBhIC5naXQgZmlsZTogJyVzJyIKK21zZ3N0ciAiZsO2ciBzdG9yIGbDtnIgYXR0IHZhcmEgZW4gLmdpdC1maWw6IFwiJXNcIiIKKworIzogc2V0dXAuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcmVhZGluZyAlcyIKK21zZ3N0ciAiZmVsIHZpZCBsw6RzbmluZyBhdiAlcyIKKworIzogc2V0dXAuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiCittc2dzdHIgIm9naWx0aWd0IGdpdGZpbGZvcm1hdDogJXMiCisKKyM6IHNldHVwLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgImluZ2VuIHPDtmt2w6RnIGkgZ2l0ZmlsOiAlcyIKKworIzogc2V0dXAuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICJpbnRlIGV0dCBnaXQtYXJraXY6ICVzIgorCisjOiBzZXR1cC5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICInJCVzJyB0b28gYmlnIgorbXNnc3RyICJcIiQlc1wiIGbDtnIgc3RvciIKKworIzogc2V0dXAuYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgImludGUgZXR0IGdpdC1hcmtpdjogXCIlc1wiIgorCisjOiBzZXR1cC5jOjcyMCBzZXR1cC5jOjcyMiBzZXR1cC5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAia2FuIGludGUgYnl0YSBrYXRhbG9nIChjaGRpcikgdGlsbCBcIiVzXCIiCisKKyM6IHNldHVwLmM6NzI1IHNldHVwLmM6NzgxIHNldHVwLmM6NzkxIHNldHVwLmM6ODMwIHNldHVwLmM6ODM4Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgImthbiBpbnRlIGfDpSB0aWxsYmFrYSB0aWxsIGFyYmV0c2thdGFsb2dlbiAoY3dkKSIKKworIzogc2V0dXAuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgc3RhdHVzIHDDpSBcIiUqc3MlcyVzXCIiCisKKyM6IHNldHVwLmM6MTA5MAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkthbiBpbnRlIGzDpHNhIGFrdHVlbGwgYXJiZXRza2F0YWxvZyIKKworIzogc2V0dXAuYzoxMDk5IHNldHVwLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgImthbiBpbnRlIGJ5dGEgdGlsbCBcIiVzXCIiCisKKyM6IHNldHVwLmM6MTExMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIKK21zZ3N0ciAiaW50ZSBldHQgZ2l0LWFya2l2IChlbGxlciBuw6Vnb24gYXYgZsO2csOkbGRyYWthdGFsb2dlcm5hKTogJXMiCisKKyM6IHNldHVwLmM6MTExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyJpbnRlIGV0dCBnaXQtYXJraXYgKGVsbGVyIG7DpWdvbiBhdiBmw7Zyw6RsZHJha2F0YWxvZ2VybmEgdXBwIHRpbGwgIgorIm1vbnRlcmluZ3NwdW5rdGVuICVzKVxuIgorIlN0b3BwYXIgdmlkIGZpbHN5c3RlbXNncsOkbnMgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gw6RyIGludGUgc2F0dCkuIgorCisjOiBzZXR1cC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgKDAlLjNvKS5cbiIKKyJUaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iCittc2dzdHIgIiIKKyJwcm9ibGVtIG1lZCBmaWxsw6RnZXMtdsOkcmRldCBpIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAoMCUuM28pLlxuIgorIsOEZ2FyZW4gYXYgZmlsZXJuYSBtw6VzdGUgYWxsdGlkIGhhIGzDpHMtIG9jaCBza3JpdmJlaMO2cmlnaGV0LiIKKworIzogc2V0dXAuYzoxMjcxCittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIMO2cHBuYSAvZGV2L251bGwgZWxsZXIgXCJkdXBcIiIKKworIzogc2V0dXAuYzoxMjg2Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgIlwiZm9ya1wiIG1pc3NseWNrYWRlcyIKKworIzogc2V0dXAuYzoxMjkxCittc2dpZCAic2V0c2lkIGZhaWxlZCIKK21zZ3N0ciAiXCJzZXRzaWRcIiBtaXNzbHlja2FkZXMiCisKKyM6IHNoYTEtZmlsZS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyBjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorbXNnc3RyICJvYmpla3RrYXRhbG9nZW4gJXMgZmlubnMgaW50ZTsgc2UgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBub3JtYWxpc2VyYSBzdXBwbGVyYW5kZSBvYmpla3Rzw7ZrdsOkZzogJXMiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiVzOiBpZ25vcmVyYXIgc3VwcGxlcmFuZGUgb2JqZWt0bGFnZXIsIGbDtnIgZGp1cCBuw6RzdGxpbmciCisKKyM6IHNoYTEtZmlsZS5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbm9ybWFsaXplIG9iamVjdCBkaXJlY3Rvcnk6ICVzIgorbXNnc3RyICJrYW4gaW50ZSBub3JtYWxpc2VyYSBvYmpla3RrYXRhbG9nZW46ICVzIgorCisjOiBzaGExLWZpbGUuYzo2MjUKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJmZG9wZW5cIiBww6Ugc3VwcGxlYW50bMOlc2ZpbCIKKworIzogc2hhMS1maWxlLmM6NjQzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBcImFsdGVybmF0ZXNcIi1maWxlbiIKKworIzogc2hhMS1maWxlLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICJrYW4gaW50ZSBmbHl0dGEgbnkgXCJhbHRlcm5hdGVzXCItZmlsIHDDpSBwbGF0cyIKKworIzogc2hhMS1maWxlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgZmlubnMgaW50ZSIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICJyZWZlcmVuc2Fya2l2ZXQgXCIlc1wiIHNvbSBlbiBsw6Rua2FkIHV0Y2hlY2tuaW5nIHN0w7ZkcyBpbnRlIMOkbm51LiIKKworIzogc2hhMS1maWxlLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgInJlZmVyZW5zYXJraXZldCBcIiVzXCIgw6RyIGludGUgZXR0IGxva2FsdCBhcmtpdi4iCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgInJlZmVyZW5zYXJraXZldCBcIiVzXCIgw6RyIGdydW50IgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJyZWZlcmVuc2Fya2l2ZXQgXCIlc1wiIMOkciB5bXBhdCIKKworIzogc2hhMS1maWxlLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgcmFkIHZpZCB0b2xrbmluZyBhdiBzdXBwbGVyYW5kZSByZWZlcmVuc2VyOiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAiZsO2cnPDtmsgYXR0IHV0ZsO2cmEgXCJtbWFwXCIgcMOlICU8UFJJdU1BWD4gw7Z2ZXIgZ3LDpG5zZW4gJTxQUkl1TUFYPiIKKworIzogc2hhMS1maWxlLmM6OTY0Cittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIm1tYXAgbWlzc2x5Y2thZGVzIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICJvYmpla3RmaWxlbiAlcyDDpHIgdG9tIgorCisjOiBzaGExLWZpbGUuYzoxMjUyIHNoYTEtZmlsZS5jOjIzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAidHJhc2lndCBsw7ZzdCBvYmpla3QgXCIlc1wiIgorCisjOiBzaGExLWZpbGUuYzoxMjU0IHNoYTEtZmlsZS5jOjIzOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2FyYmFnZSBhdCBlbmQgb2YgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgInNrcsOkcCBpIHNsdXRldCBhdiBsw7ZzdCBvYmpla3QgXCIlc1wiIgorCisjOiBzaGExLWZpbGUuYzoxMjk2Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAiZmVsYWt0aWcgb2JqZWt0dHlwIgorCisjOiBzaGExLWZpbGUuYzoxMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgImthbiBpbnRlIHBhY2thIHVwcCAlcy1odXZ1ZCBtZWQgLS1hbGxvdy11bmtub3duLXR5cGUiCisKKyM6IHNoYTEtZmlsZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgImthbiBpbnRlIHBhY2thIHVwcCAlcy1odXZ1ZGV0IgorCisjOiBzaGExLWZpbGUuYzoxMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAia2FuIGludGUgdG9sa2EgJXMtaHV2dWQgbWVkIC0tYWxsb3ctdW5rbm93bi10eXBlIgorCisjOiBzaGExLWZpbGUuYzoxMzkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIiCittc2dzdHIgImthbiBpbnRlIHRvbGthICVzLWh1dnVkIgorCisjOiBzaGExLWZpbGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGzDpHNhIG9iamVrdGV0ICVzIgorCisjOiBzaGExLWZpbGUuYzoxNTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiCittc2dzdHIgImVyc8OkdHRuaW5nZW4gJXMgaGl0dGFkZXMgaW50ZSBmw7ZyICVzIgorCisjOiBzaGExLWZpbGUuYzoxNTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICJsw7ZzdCBvYmpla3QgJXMgKGxhZ3JhdCBpICVzKSDDpHIgdHJhc2lndCIKKworIzogc2hhMS1maWxlLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgInBhY2thdCBvYmpla3QgJXMgKGxhZ3JhdCBpICVzKSDDpHIgdHJhc2lndCIKKworIzogc2hhMS1maWxlLmM6MTY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZmlsZW4gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgImthbiBpbnRlIHPDpHR0YSBiZWjDtnJpZ2hldGVuIHRpbGwgXCIlc1wiIgorCisjOiBzaGExLWZpbGUuYzoxNzEzCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAiZmVsIHZpZCBza3Jpdm5pbmcgYXYgZmlsIgorCisjOiBzaGExLWZpbGUuYzoxNzMyCittc2dpZCAiZXJyb3Igd2hlbiBjbG9zaW5nIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICJmZWwgdmlkIHN0w6RuZ25pbmcgYXYgZmlsIGbDtnIgbMO2c3Qgb2JqZWt0IgorCisjOiBzaGExLWZpbGUuYzoxNzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKyJvdGlsbHLDpGNrbGlnIGJlaMO2cmlnaGV0IGbDtnIgYXR0IGzDpGdnYSB0aWxsIG9iamVrdCB0aWxsIGFya2l2ZGF0YWJhc2VuICVzIgorCisjOiBzaGExLWZpbGUuYzoxNzk5Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgdGVtcG9yw6RyIGZpbCIKKworIzogc2hhMS1maWxlLmM6MTgyMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZmlsIGbDtnIgbMO2c3Qgb2JqZWt0IgorCisjOiBzaGExLWZpbGUuYzoxODI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIKK21zZ3N0ciAia2FuIGludGUgdXRmw7ZyYSBcImRlZmxhdGVcIiBww6Ugbnl0dCBvYmpla3QgJXMgKCVkKSIKKworIzogc2hhMS1maWxlLmM6MTgzMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAiXCJkZWZsYXRlZW5kXCIgcMOlIG9iamVrdGV0ICVzIG1pc3NseWNrYWRlcyAoJWQpIgorCisjOiBzaGExLWZpbGUuYzoxODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgImbDtnJ2aXJyYWQgYXYgaW5zdGFiaWwgb2JqZWt0a8OkbGxkYXRhIGbDtnIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgIlwidXRpbWUoKVwiIG1pc3NseWNrYWRlcyBww6UgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egb2JqZWt0IGbDtnIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE5NjIKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAidHJhc2lrIGluY2hlY2tuaW5nIgorCisjOiBzaGExLWZpbGUuYzoxOTcwCittc2dpZCAiY29ycnVwdCB0YWciCittc2dzdHIgInRyYXNpZyB0YWdnIgorCisjOiBzaGExLWZpbGUuYzoyMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZXJyb3Igd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgImzDpHNmZWwgdmlkIGluZGV4ZXJpbmcgYXYgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgcmVhZCB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiZsO2ciBsaXRlIGzDpHN0ZXMgdmlkIGluZGV4ZXJpbmcgYXYgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIxNDUgc2hhMS1maWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICIlczogbWlzc2x5Y2thZGVzIGzDpGdnYSBpbiBpIGRhdGFiYXNlbiIKKworIzogc2hhMS1maWxlLmM6MjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICIlczogZmlsdHlwZW4gc3TDtmRzIGVqIgorCisjOiBzaGExLWZpbGUuYzoyMTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIKK21zZ3N0ciAiJXMgw6RyIGludGUgZXR0IGdpbHRpZ3Qgb2JqZWt0IgorCisjOiBzaGExLWZpbGUuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyDDpHIgaW50ZSBldHQgZ2lsdGlndCBcIiVzXCItb2JqZWt0IgorCisjOiBzaGExLWZpbGUuYzoyMjEzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDAzIHNoYTEtZmlsZS5jOjI0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAiaGFzaCBzdMOkbW1lciBpbnRlIGbDtnIgJXMgKGbDtnJ2w6RudGFkZSAlcykiCisKKyM6IHNoYTEtZmlsZS5jOjI0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJXMiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJtbWFwXCIgZsO2ciAlcyIKKworIzogc2hhMS1maWxlLmM6MjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAia2FuIGludGUgcGFja2EgdXBwIGh1dnVkIGbDtnIgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAia2FuIGludGUgdG9sa2EgaHV2dWQgZsO2ciAlcyIKKworIzogc2hhMS1maWxlLmM6MjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGNvbnRlbnRzIG9mICVzIgorbXNnc3RyICJrYW4gaW50ZSB0b2xrYSBpbm5laMOlbGwgaSAlcyIKKworIzogc2hhMS1uYW1lLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJrb3J0IFNIQTEgJXMgw6RyIHR2ZXR5ZGlnIgorCisjOiBzaGExLW5hbWUuYzo0OTgKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICJLYW5kaWRhdGVybmEgw6RyOiIKKworIzogc2hhMS1uYW1lLmM6Nzk3Cittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBza2FwYXIgbm9ybWFsdCBhbGRyaWcgcmVmZXJlbnNlciBzb20gc2x1dGFyIG1lZCA0MCBoZXhhZGVjaW1hbGFcbiIKKyJ0ZWNrZW4sIGTDpSBkZXR0YSBpZ25vcmVyYXMgbsOkciBkdSBhbmdlciA0MC1oZXggZW5iYXJ0LiBEZXNzYVxuIgorInJlZmVyZW5zZXIga2FuIHNrYXBhcyBhdiBtaXNzdGFnLiBUaWxsIGV4ZW1wZWwsIGbDtnJcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisiZMOkciBcIiRiclwiIHDDpSBuw6Vnb3Qgc8OkdHQgYmxpdml0IHRvbXQgb2NoIGVuIDQwLWhleC1yZWZlcmVucyBza2FwYXRzLlxuIgorIlVuZGVyc8O2ayByZWZlcmVuc2VybmEgb2NoIHRhIGthbnNrZSBib3J0IGRlbS4gU3TDpG5nIGF2IG1lZGRlbGFuZGV0XG4iCisiZ2Vub20gYXR0IGvDtnJhIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldSwlMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUsJTIuMnUgR2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZQorIzogc3RyYnVmLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQiIKK21zZ3N0ciAiJXUsJTIuMnUgTWlCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCL3MiCittc2dzdHIgIiV1LCUyLjJ1IE1pQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIiCittc2dzdHIgIiV1LCUyLjJ1IEtpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQi9zIgorbXNnc3RyICIldSwlMi4ydSBLaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUgYnl0ZSIKK21zZ3N0clsxXSAiJXUgYnl0ZXMiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUvcyIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMvcyIKK21zZ3N0clswXSAiJXUgYnl0ZS9zIgorbXNnc3RyWzFdICIldSBieXRlcy9zIgorCisjOiBzdHJidWYuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgcmVkaWdlcmEgXCIlc1wiIgorCisjOiBzdWJtb2R1bGUuYzoxMTQgc3VibW9kdWxlLmM6MTQzCittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyJLYW4gaW50ZSDDpG5kcmEgLmdpdG1vZHVsZXMtZmlsIHNvbSBpbnRlIHNsYWdpdHMgaWhvcCwgbMO2cyAiCisic2FtbWFuc2xhZ25pbmdza29uZmxpa3RlciBmw7Zyc3QiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJIaXR0YWRlIGludGUgbsOlZ29uIHNla3Rpb24gaSAuZ2l0bW9kdWxlcyBkw6RyIHPDtmt2w6RnPSVzIgorCisjOiBzdWJtb2R1bGUuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCAuZ2l0bW9kdWxlcy1wb3N0ZW4gZsO2ciAlcyIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGvDtmEgdXBwZGF0ZXJhZCAuZ2l0bW9kdWxlcyIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJpIGVqIHV0Y2hlY2thZCB1bmRlcm1vZHVsIFwiJXNcIiIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiU8O2a3bDpGdzYW5naXZlbHNlbiBcIiVzXCIgw6RyIGkgdW5kZXJtb2R1bGVuIFwiJS4qc1wiIgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgInVuZGVybW9kdWxwb3N0ZW4gXCIlc1wiICglcykgw6RyIGVuICVzLCBpbnRlIGVuIGluY2hlY2tuaW5nIgorCisjOiBzdWJtb2R1bGUuYzoxMTQ3IGJ1aWx0aW4vYnJhbmNoLmM6NjgwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDE2Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBzbMOlIHVwcCBIRUFEIHNvbSBnaWx0aWcgcmVmZXJlbnMuIgorCisjOiBzdWJtb2R1bGUuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3Mgc3VibW9kdWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUga29tbWEgw6V0IHVuZGVybW9kdWxlbiBcIiVzXCIiCisKKyM6IHN1Ym1vZHVsZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICJcIiVzXCIga8Okbm5zIGludGUgaWdlbiBzb20gZXR0IGdpdC1hcmtpdiIKKworIzogc3VibW9kdWxlLmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBcImdpdCBzdGF0dXNcIiBpIHVuZGVybW9kdWxlbiBcIiVzXCIiCisKKyM6IHN1Ym1vZHVsZS5jOjE4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUga8O2cmEgXCJnaXQgc3RhdHVzXCIgaSB1bmRlcm1vZHVsZW4gXCIlc1wiIgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCBpbnN0w6RsbG5pbmdlbiBjb3JlLndvcmt0cmVlIGkgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogc3VibW9kdWxlLmM6MTkwNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgInVuZGVybW9kdWxlbiBcIiVzXCIgaGFyIGV0dCBzbXV0c2lndCBpbmRleCIKKworIzogc3VibW9kdWxlLmM6MTk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgIlVuZGVybW9kdWxlciBcIiVzXCIga3VuZGUgaW50ZSB1cHBkYXRlcmFzLiIKKworIzogc3VibW9kdWxlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzIGluc2lkZSBnaXQgZGlyICclLipzJyIKK21zZ3N0ciAidW5kZXJtb2R1bC1naXRrYXRhbG9nZW4gXCIlc1wiIMOkciBpbnV0aSBnaXRrYXRhbG9nZW4gXCIlLipzXCIiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZsO2ciB1bmRlcm1vZHVsZW4gXCIlc1wiLCBzb20gaGFyIG1lciDDpG4gZW4gYXJiZXRza2F0YWxvZywgIgorInN0w7ZkcyBlaiIKKworIzogc3VibW9kdWxlLmM6MjA2MCBzdWJtb2R1bGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgbmFtZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2zDpSB1cHAgbmFtbmV0IGbDtnIgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogc3VibW9kdWxlLmM6MjA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBtb3ZlICclcycgaW50byBhbiBleGlzdGluZyBnaXQgZGlyIgorbXNnc3RyICJ2w6RncmFyIGZseXR0YSBcIiVzXCIgdGlsbCBlbiBiZWZpbnRsaWcgZ2l0a2F0YWxvZyIKKworIzogc3VibW9kdWxlLmM6MjA3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICIiCisiTWlncmVyYXIgZ2l0LWthdGFsb2dlbiBmw7ZyIFwiJXMlc1wiIGZyw6VuXG4iCisiXCIlc1wiIHRpbGxcbiIKKyJcIiVzXCJcbiIKKworIzogc3VibW9kdWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHJla3Vyc2VyYSBpbiBpIHVuZGVybW9kdWxlbiBcIiVzXCIiCisKKyM6IHN1Ym1vZHVsZS5jOjIxOTgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgImt1bmRlIGludGUgc3RhcnRhIGxzLWZpbGVzIGkgLi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIgorbXNnc3RyICJscy10cmVlIHJldHVybmVyYWRlIGVuIG92w6RudGFkIHJldHVya29kICVkIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIgorbXNnc3RyICJpZ25vcmVyYXIgbWlzc3TDpG5rdCB1bmRlcm1vZHVsbmFtbjogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzozMDMKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZXMgbm90IGFsbG93ZWQgZm9yIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCittc2dzdHIgIm5lZ2F0aXZhIHbDpHJkZW4gw6RyIGludGUgdGlsbMOldG5hIGbDtnIgc3VibW9kdWxlLmZldGNoam9icyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAnJXMnIHdoaWNoIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb246ICVzIgorbXNnc3RyICJpZ25vcmVyYXIgXCIlc1wiIHNvbSBrYW4gdG9sa2FzIHNvbSBlbiBrb21tYW5kb3JhZHNmbGFnZ2E6ICVzIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICJvZ2lsdGlndCB2w6RyZGUgZsO2ciAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHVwcGRhdGVyYSAuZ2l0bW9kdWxlcy1wb3N0ZW4gJXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyB1dGbDtnJhIFwidHJhaWxlclwiLWtvbW1hbmRvdCBcIiVzXCIiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJva8OkbnQgdsOkcmRlIFwiJXNcIiBmw7ZyIG55Y2tlbG4gXCIlc1wiIgorCisjOiB0cmFpbGVyLmM6NTM5IHRyYWlsZXIuYzo1NDQgYnVpbHRpbi9yZW1vdGUuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAibWVyIMOkbiBlbiAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJ0b20gc2zDpHByYWRzc3ltYm9sIGkgc2zDpHByYWRlbiBcIiUuKnNcIiIKKworIzogdHJhaWxlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgaW5kYXRhZmlsZW4gXCIlc1wiIgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0YSBzdGF0dXMgcMOlICVzIgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiZmlsZW4gJXMgw6RyIGludGUgZW4gbm9ybWFsIGZpbCIKKworIzogdHJhaWxlci5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIKK21zZ3N0ciAiZmlsZW4gJXMgw6RyIGludGUgc2tyaXZiYXIgYXYgYW52w6RuZGFyZW4iCisKKyM6IHRyYWlsZXIuYzoxMDI3Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIHRlbXBvcsOkciBmaWwiCisKKyM6IHRyYWlsZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUgdG8gJXMiCittc2dzdHIgImt1bmRlIGludGUgYnl0YSBuYW1uIHDDpSB0ZW1wb3LDpHIgZmlsIHRpbGwgJXMiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAiU2t1bGxlIHPDpHR0YSB1cHBzdHLDtm1zIGbDtnIgXCIlc1wiIHRpbGwgXCIlc1wiIGZyw6VuIFwiJXNcIlxuIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgcGFrZXRldCAoYnVuZGxlbikgXCIlc1wiIgorCisjOiB0cmFuc3BvcnQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0OiBpbnZhbGlkIGRlcHRoIG9wdGlvbiAnJXMnIgorbXNnc3RyICJ0cmFuc3BvcnQ6IG9naWx0aWcgZmxhZ2dhIGbDtnIgZGVwdGg6IFwiJXNcIiIKKworIzogdHJhbnNwb3J0LmM6MjY2Cittc2dpZCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscyIKK21zZ3N0ciAic2UgcHJvdG9jb2wudmVyc2lvbiBpIFwiZ2l0IGhlbHAgY29uZmlnXCIgZsO2ciBtZXIgaW5mb3JtYXRpb24iCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICJzZXJ2ZXJmbGFnZ29yIGtyw6R2ZXIgcHJvdG9rb2xsdmVyc2lvbiAyIGVsbGVyIHNlbmFyZSIKKworIzogdHJhbnNwb3J0LmM6NjMyCittc2dpZCAiY291bGQgbm90IHBhcnNlIHRyYW5zcG9ydC5jb2xvci4qIGNvbmZpZyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBpbnN0w6RsbG5pbmdlbiBmw7ZyIHRyYW5zcG9ydC5jb2xvci4qIgorCisjOiB0cmFuc3BvcnQuYzo3MDUKK21zZ2lkICJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICJzdMO2ZCBmw7ZyIHByb3Rva29sbCB2MiDDpG5udSBlaiBpbXBsZW1lbnRlcmF0IgorCisjOiB0cmFuc3BvcnQuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICJva8OkbnQgdsOkcmRlIGbDtnIgaW5zdMOkbGxuaW5nZW4gXCIlc1wiOiAlcyIKKworIzogdHJhbnNwb3J0LmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydCAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ0cmFuc3BvcnRlbiBcIiVzXCIgdGlsbMOldHMgaW50ZSIKKworIzogdHJhbnNwb3J0LmM6OTQ5Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAiZ2l0LW92ZXItcnN5bmMgc3TDtmRzIGludGUgbMOkbmdyZSIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgdW5kZXJtb2R1bHPDtmt2w6RnYXIgaW5uZWjDpWxsZXIgw6RuZHJpbmdhciBzb21cbiIKKyJpbnRlIGthbiBoaXR0YXMgYXYgZmrDpHJyYXJuYTpcbiIKKworIzogdHJhbnNwb3J0LmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGxlYXNlIHRyeVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisib3IgY2QgdG8gdGhlIHBhdGggYW5kIHVzZVxuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyJ0byBwdXNoIHRoZW0gdG8gYSByZW1vdGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUZXN0YVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisiZWxsZXIgY2QgdGlsbCBzw7ZrdsOkZ2VuIG9jaCBhbnbDpG5kXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorImbDtnIgYXR0IHPDpG5kYSBkZW0gdGlsbCBmasOkcnJlbi5cbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTA1NgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAiQXZicnl0ZXIuIgorCisjOiB0cmFuc3BvcnQuYzoxMjAxCittc2dpZCAiZmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHPDpG5kYSBhbGxhIG7DtmR2w6RuZGlnYSB1bmRlcm1vZHVsZXIiCisKKyM6IHRyYW5zcG9ydC5jOjEzNDUgdHJhbnNwb3J0LWhlbHBlci5jOjY1NgorbXNnaWQgIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICJmdW5rdGlvbmVuIHN0w7ZkcyBpbnRlIGF2IHByb3Rva29sbGV0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEgdHJhbnNwb3J0LWhlbHBlci5jOjkwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAia29tcGxldHQgc2tyaXZuaW5nIHRpbGwgZmrDpHJyaGrDpGxwYXJlIG1pc3NseWNrYWRlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBoaXR0YSBmasOkcnJoasOkbHBhcmUgZsO2ciBcIiVzXCIiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNjAgdHJhbnNwb3J0LWhlbHBlci5jOjU3MAorbXNnaWQgImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIgorbXNnc3RyICJrdW5kZSBpbnRlIGR1cGxpY2VyYSB1dGRhdGEtZmlsaGFuZHRhZyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorIm9rw6RuZCBrcsOkdmQgZsO2cm3DpWdhIChjYXBhYmlsaXR5KSAlczsgZmrDpHJyaGrDpGxwYXJlbiBiZWjDtnZlciBhbnRhZ2xpZ2VuIGVuICIKKyJueWFyZSB2ZXJzaW9uIGF2IEdpdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxNworbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAiIgorImZqw6Rycmhqw6RscGFyZW4gYmVow7Z2ZXIgaW1wbGVtZW50ZXJhIGbDtnJtw6VnYSBmw7ZyIHJlZmVyZW5zc3BlY2lmaWthdGlvbmVyICIKKyIocmVmc3BlYykiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiJXMgc2FkZSBvdsOkbnRhdDogXCIlc1wiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIlcyBsw6VzdGUgb2Nrc8OlICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkyCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICJrdW5kZSBpbnRlIGvDtnJhIGZhc3QtaW1wb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTE1Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAiZmVsIG7DpHIgZmFzdC1pbXBvcnQga8O2cmRlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU0NCB0cmFuc3BvcnQtaGVscGVyLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgcmVmZXJlbnNlbiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICJva8OkbnQgc3ZhciBww6UgYW5zbHVudG5pbmc6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjExCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgInByb3Rrb2xsZXQgc3TDtmRlciBpbnRlIGF0dCBzw6R0dGEgc8O2a3bDpGcgdGlsbCBmasOkcnJ0asOkbnN0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEzCittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICJmZWxha3RpZyBzw7ZrdsOkZyB0aWxsIGZqw6RycnRqw6Ruc3QiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY29ubmVjdCB0byBzdWJzZXJ2aWNlICVzIgorbXNnc3RyICJrYW4gaW50ZSBhbnNsdXRhIHRpbGwgdW5kZXJ0asOkbnN0ZW4gJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgImbDtnJ2w6RudGFkZSBvay9lcnJvciwgaGrDpGxwcHJvZ3JhbW1ldCBzdmFyYWRlIFwiJXNcIiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgImhqw6RscGFyZW4gcmV0dXJuZXJhZGUgb3bDpG50YWQgc3RhdHVzICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iCittc2dzdHIgImhqw6RscGFyZW4gJXMgc3TDtmRlciBpbnRlIGRyeS1ydW4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCittc2dzdHIgImhqw6RscGFyZW4gJXMgc3TDtmRlciBpbnRlIC0tc2lnbmVkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICJoasOkbHBhcmVuICVzIHN0w7ZkZXIgaW50ZSAtLXNpZ25lZD1pZi1hc2tlZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIKK21zZ3N0ciAiaGrDpGxwYXJlbiAlcyBzdMO2ZGVyIGludGUgLS1hdG9taWMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ3B1c2gtb3B0aW9uJyIKK21zZ3N0ciAiaGrDpGxwYXJlbiAlcyBzdMO2ZGVyIGludGUgXCJwdXNoLW9wdGlvblwiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY0Cittc2dpZCAicmVtb3RlLWhlbHBlciBkb2Vzbid0IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiCittc2dzdHIgImZqw6Rycmhqw6RscGFyZW4gc3TDtmRlciBpbnRlIHB1c2g7IHJlZmVyZW5zc3BlY2lmaWthdGlvbiBrcsOkdnMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAiaGrDpGxwYXJlbiAlcyBzdMO2ZGVyIGludGUgXCJmb3JjZVwiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAia3VuZGUgaW50ZSBrw7ZyYSBmYXN0LWV4cG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjEKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICJmZWwgdmlkIGvDtnJuaW5nIGF2IGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKyJJbmdhIGdlbWVuc2FtbWEgcmVmZXJlbnNlciBvY2ggaW5nYSBhbmdhdnM7IGfDtnIgaW5nZXQuXG4iCisiRHUga2Fuc2tlIGJvcmRlIGFuZ2UgZW4gZ3JlbiBzw6Vzb20gXCJtYXN0ZXJcIi5cbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAiZmVsZm9ybWF0IHN2YXIgaSByZWZlcmVuc2xpc3RhbjogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQoJXMpIGZhaWxlZCIKK21zZ3N0ciAibMOkcyglcykgbWlzc2x5Y2thZGVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0ZSglcykgZmFpbGVkIgorbXNnc3RyICJza3JpdiglcykgbWlzc2x5Y2thZGVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICIlcy10csOlZGVuIG1pc3NseWNrYWRlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIKK21zZ3N0ciAiJXMtdHLDpWRlbiBtaXNzbHlja2FkZXMgYW5zbHV0YTogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzcwIHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIKK21zZ3N0ciAia2FuIGludGUgc3RhcnRhIHRyw6VkIGbDtnIga29waWVyaW5nIGF2IGRhdGE6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICJwcm9jZXNzZW4gJXMgbWlzc2x5Y2thZGVzIHbDpG50YSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgInByb2Nlc3NlbiAlcyBtaXNzbHlja2FkZXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDMzIHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQyCittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIHRyw6VkIGbDtnIga29waWVyaW5nIGF2IGRhdGEiCisKKyM6IHRyZWUtd2Fsay5jOjMzCittc2dpZCAidG9vLXNob3J0IHRyZWUgb2JqZWN0IgorbXNnc3RyICJ0csOkZG9iamVrdCBmw7ZyIGtvcnQiCisKKyM6IHRyZWUtd2Fsay5jOjM5Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAiZmVsZm9ybWF0IGzDpGdlIGkgdHLDpGRwb3N0IgorCisjOiB0cmVlLXdhbGsuYzo0MworbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgInRvbXQgZmlsbmFtbiBpIHRyw6RkcG9zdCIKKworIzogdHJlZS13YWxrLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSBjb250YWlucyBiYWNrc2xhc2g6ICclcyciCittc2dzdHIgImZpbG5hbW5ldCBpIHRyw6RkZXQgaW5uZWjDpWxsZXIgb212w6RudCBzbmVkc3RyZWNrOiBcIiVzXCIiCisKKyM6IHRyZWUtd2Fsay5jOjEyNAorbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgInRyw6RkZmlsIGbDtnIga29ydCIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgYXYgZsO2bGphbmRlIGZpbGVyIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2IHV0Y2hlY2tuaW5nOlxuIgorIiUlc0NoZWNrYSBpbiBkaW5hIMOkbmRyaW5nYXIgZWxsZXIgYW52w6RuZCBcInN0YXNoXCIgaW5uYW4gZHUgYnl0ZXIgZ3Jlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRGluYSBsb2thbGEgw6RuZHJpbmdhciBhdiBmw7ZsamFuZGUgZmlsZXIgc2t1bGxlIHNrcml2YXMgw7Z2ZXIgYXYgdXRjaGVja25pbmc6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJEaW5hIGxva2FsYSDDpG5kcmluZ2FyIGF2IGbDtmxqYW5kZSBmaWxlciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisic2FtbWFuc2xhZ25pbmc6XG4iCisiJSVzQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBpbm5hbiBkdSBieXRlciBncmVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJEaW5hIGxva2FsYSDDpG5kcmluZ2FyIGF2IGbDtmxqYW5kZSBmaWxlciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisic2FtbWFuc2xhZ25pbmc6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJEaW5hIGxva2FsYSDDpG5kcmluZ2FyIGF2IGbDtmxqYW5kZSBmaWxlciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiBcIiVzXCI6XG4iCisiJSVzQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBpbm5hbiBkdSBcIiVzXCIuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkRpbmEgbG9rYWxhIMOkbmRyaW5nYXIgYXYgZsO2bGphbmRlIGZpbGVyIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2IFwiJXNcIjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVtOlxuIgorIiVzIgorbXNnc3RyICIiCisiVXBwZGF0ZXJpbmcgYXYgZsO2bGphbmRlIGthdGFsb2dlciBnw7ZyIGF0dCBvc3DDpXJhZGUgZmlsZXIgZ8OlciBmw7ZybG9yYWRlIGkgIgorImRlbTpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSB0YXMgYm9ydCBhdiB1dGNoZWNrbmluZ2VuOlxuIgorIiUlc0ZseXR0YSBlbGxlciB0YSBib3J0IGRlbSBpbm5hbiBkdSBieXRlciBncmVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSB0YXMgYm9ydCBhdiB1dGNoZWNrbmluZ2VuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBvc3DDpXJhZGUgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4gc2t1bGxlIHRhcyBib3J0IGF2ICIKKyJzYW1tYW5zbGFnbmluZ2VuOlxuIgorIiUlc0ZseXR0YSBlbGxlciB0YSBib3J0IGRlbSBpbm5hbiBkdSBzbMOlciBzYW1tYW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBvc3DDpXJhZGUgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4gc2t1bGxlIHRhcyBib3J0IGF2ICIKKyJzYW1tYW5zbGFnbmluZ2VuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBvc3DDpXJhZGUgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4gc2t1bGxlIHRhcyBib3J0IGF2IFwiJXNcIjpcbiIKKyIlJXNGbHl0dGEgZWxsZXIgdGEgYm9ydCBkZW0gaW5uYW4gZHUgXCIlc1wiLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSB0YXMgYm9ydCBhdiBcIiVzXCI6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiRsO2bGphbmRlIG9zcMOlcmFkZSBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisidXRjaGVja25pbmdlbjpcbiIKKyIlJXNGbHl0dGEgZWxsZXIgdGEgYm9ydCBkZW0gaW5uYW4gZHUgYnl0ZXIgZ3Jlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2ICIKKyJ1dGNoZWNrbmluZ2VuOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgb3Nww6VyYWRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSBza3JpdmFzIMO2dmVyIGF2ICIKKyJzYW1tYW5zbGFnbmluZ2VuOlxuIgorIiUlc0ZseXR0YSBlbGxlciB0YSBib3J0IGRlbSBpbm5hbiBkdSBieXRlciBncmVuLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisiRsO2bGphbmRlIG9zcMOlcmFkZSBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisic2FtbWFuc2xhZ25pbmdlbjpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiRsO2bGphbmRlIG9zcMOlcmFkZSBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiBcIiVzXCI6XG4iCisiJSVzRmx5dHRhIGVsbGVyIHRhIGJvcnQgZGVtIGlubmFuIGR1IFwiJXNcIi4iCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBvc3DDpXJhZGUgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4gc2t1bGxlIHNrcml2YXMgw7Z2ZXIgYXYgXCIlc1wiOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICJQb3N0ZW4gXCIlc1wiIMO2dmVybGFwcGFyIFwiJXNcIi4gS2FuIGludGUgYmluZGEuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiS2FuIGludGUgdXBwZGF0ZXJhIGdsZXMgdXRjaGVja25pbmc6IGbDtmxqYW5kZSBwb3N0ZXIgw6RyIGludGUgw6Agam91cjpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkbDtmxqYW5kZSBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiB1cHBkYXRlcmluZyBhdiBnbGVzICIKKyJ1dGNoZWNrbmluZzpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiRsO2bGphbmRlIGZpbGVyIGkgYXJiZXRza2F0YWxvZ2VuIHNrdWxsZSB0YXMgYm9ydCBhdiB1cHBkYXRlcmluZyBhdiBnbGVzICIKKyJ1dGNoZWNrbmluZzpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkthbiBpbnRlIHVwcGRhdGVyYSB1bmRlcm1vZHVsOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAiQXZicnl0ZXJcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MzE3Cittc2dpZCAiVXBkYXRpbmcgZmlsZXMiCittc2dzdHIgIlVwcGRhdGVyYXIgZmlsZXIiCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorImbDtmxqYW5kZSBzw7ZrdsOkZ2FyIGhhciBrb2xsaWRlcmF0ICh0LmV4LiBza2lmdGzDpGdlc2vDpG5zbGlnYVxuIgorInPDtmt2w6RnYXIgcMOlIGV0dCBva8OkbnNsaWd0IGZpbHN5c3RlbSkgb2NoIGVuZGFzdCBlbiBmcsOlbiBzYW1tYVxuIgorImtvbGxpc2lvbnNncnVwcCBmaW5ucyBpIGFyYmV0c2thdGFsb2dlbjpcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0MQorbXNnaWQgIlVwZGF0aW5nIGluZGV4IGZsYWdzIgorbXNnc3RyICJVcHBkYXRlcmFyIGluZGV4ZmxhZ2dvciIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAib2dpbHRpZyBVUkwtc2NoZW1hbmFtbiBlbGxlciBzYWtuYXQgXCI6Ly9cIi1zdWZmaXgiCisKKyM6IHVybG1hdGNoLmM6MTg3IHVybG1hdGNoLmM6MzQ2IHVybG1hdGNoLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAib2dpbHRpZyAlWFgtdGVja2Vuc2VrdmVucyIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAidsOkcmQgc2FrbmFzIG9jaCBzY2hlbWF0IMOkciBpbnRlIFwiZmlsZTpcIiIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJlbiBcImZpbGU6XCItVVJMIGthbiBpbnRlIGlubmVow6VsbGEgcG9ydG51bW1lciIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJvZ2lsdGlnYSB0ZWNrZW4gaSB2w6RyZG5hbW5ldCIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJmZWxha3RpZ3QgcG9ydG51bW1lciIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICJmZWxha3RpZ3QgXCIuLlwiLXPDtmt2w6Rnc3NlZ21lbnQiCisKKyM6IHdvcmt0cmVlLmM6MjU4IGJ1aWx0aW4vYW0uYzoyMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBsw6RzYSBcIiVzXCIiCisKKyM6IHdvcmt0cmVlLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAiXCIlc1wiIGkgaHV2dWRhcmJldHNrYXRhbG9nZW4gw6RyIGludGUgYXJraXZrYXRhbG9nZW4iCisKKyM6IHdvcmt0cmVlLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiZmlsZW4gXCIlc1wiIGlubmVow6VsbGVyIGludGUgYWJzb2x1dCBzw7ZrdsOkZyB0aWxsIGFyYmV0c2thdGFsb2dlbiIKKworIzogd29ya3RyZWUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiXCIlc1wiIGZpbm5zIGludGUiCisKKyM6IHdvcmt0cmVlLmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgLmdpdCBmaWxlLCBlcnJvciBjb2RlICVkIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gLmdpdC1maWwsIGZlbGtvZCAlZCIKKworIzogd29ya3RyZWUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIlwiJXNcIiBwZWthciBpbnRlIHRpbGxiYWthIHRpbGwgXCIlc1wiIgorCisjOiB3cmFwcGVyLmM6MTg2IHdyYXBwZXIuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgbMOkc25pbmcgb2NoIHNrcml2bmluZyIKKworIzogd3JhcHBlci5jOjM4NyB3cmFwcGVyLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAia2FuIGludGUga29tbWEgw6V0IFwiJXNcIiIKKworIzogd3JhcHBlci5jOjU5NgorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAia2FuIGludGUgaMOkbXRhIGFrdHVlbGwgYXJiZXRza2F0YWxvZyIKKworIzogd3Qtc3RhdHVzLmM6MTU4Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICJFaiBzYW1tYW5zbGFnbmEgc8O2a3bDpGdhcjoiCisKKyM6IHd0LXN0YXR1cy5jOjE4NyB3dC1zdGF0dXMuYzoyMTkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWw+Li4uXCIgZsO2ciBhdHQgdGEgYm9ydCBmcsOlbiBrw7YpIgorCisjOiB3dC1zdGF0dXMuYzoxOTAgd3Qtc3RhdHVzLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWw+Li4uXCIgZsO2ciBhdHQgdGEgYm9ydCBmcsOlbiAiCisia8O2KSIKKworIzogd3Qtc3RhdHVzLmM6MTkzIHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBybSAtLWNhY2hlZCA8ZmlsPi4uLlwiIGbDtnIgYXR0IHRhIGJvcnQgZnLDpW4ga8O2KSIKKworIzogd3Qtc3RhdHVzLmM6MTk3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IGFkZCA8ZmlsPi4uLlwiIGbDtnIgYXR0IGFuZ2UgbMO2c25pbmcpIgorCisjOiB3dC1zdGF0dXMuYzoxOTkgd3Qtc3RhdHVzLmM6MjAzCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IGFkZC9ybSA8ZmlsPi4uLlwiIHNvbSBsw6RtcGxpZ3QgZsO2ciBhdHQgYW5nZSBsw7ZzbmluZykiCisKKyM6IHd0LXN0YXR1cy5jOjIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJtIDxmaWw+Li4uXCIgZsO2ciBhdHQgYW5nZSBsw7ZzbmluZykiCisKKyM6IHd0LXN0YXR1cy5jOjIxMSB3dC1zdGF0dXMuYzoxMDc0Cittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLDhG5kcmluZ2FyIGF0dCBjaGVja2EgaW46IgorCisjOiB3dC1zdGF0dXMuYzoyMzQgd3Qtc3RhdHVzLmM6MTA4MworbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiw4RuZHJpbmdhciBlaiBpIGluY2hlY2tuaW5nc2vDtm46IgorCisjOiB3dC1zdGF0dXMuYzoyMzgKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgYWRkIDxmaWw+Li4uXCIgZsO2ciBhdHQgdXBwZGF0ZXJhIHZhZCBzb20gc2thbGwgY2hlY2thcyBpbikiCisKKyM6IHd0LXN0YXR1cy5jOjI0MAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCBhZGQvcm0gPGZpbD4uLi5cIiBmw7ZyIGF0dCB1cHBkYXRlcmEgdmFkIHNvbSBza2FsbCBjaGVja2FzIGluKSIKKworIzogd3Qtc3RhdHVzLmM6MjQxCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKyIgIChhbnbDpG5kIFwiZ2l0IHJlc3RvcmUgPGZpbD4uLi5cIiBmw7ZyIGF0dCBmw7Zya2FzdGEgw6RuZHJpbmdhciBpICIKKyJhcmJldHNrYXRhbG9nZW4pIgorCisjOiB3dC1zdGF0dXMuYzoyNDMKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKyIgIChjaGVja2EgaW4gZWxsZXIgZsO2cmthc3RhIG9zcMOlcmF0IGVsbGVyIMOkbmRyYXQgaW5uZWjDpWxsIGkgdW5kZXJtb2R1bGVyKSIKKworIzogd3Qtc3RhdHVzLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCAlcyA8ZmlsPi4uLlwiIGbDtnIgYXR0IHRhIG1lZCBpIGRldCBzb20gc2thbGwgY2hlY2thcyBpbikiCisKKyM6IHd0LXN0YXR1cy5jOjI2OAorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgImJvcnR0YWdldCBhdiBiw6RnZ2U6IgorCisjOiB3dC1zdGF0dXMuYzoyNzAKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgInRpbGxhZ3QgYXYgb3NzOiIKKworIzogd3Qtc3RhdHVzLmM6MjcyCittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAiYm9ydHRhZ2V0IGF2IGRlbToiCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJ0aWxsYWd0IGF2IGRlbToiCisKKyM6IHd0LXN0YXR1cy5jOjI3NgorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICJib3J0dGFnZXQgYXYgb3NzOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc4Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgInRpbGxhZ3QgYXYgYsOkZ2dlOiIKKworIzogd3Qtc3RhdHVzLmM6MjgwCittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgIsOkbmRyYXQgYXYgYsOkZ2dlOiIKKworIzogd3Qtc3RhdHVzLmM6MjkwCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJueSBmaWw6IgorCisjOiB3dC1zdGF0dXMuYzoyOTIKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICJrb3BpZXJhZDoiCisKKyM6IHd0LXN0YXR1cy5jOjI5NAorbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICJib3J0dGFnZW46IgorCisjOiB3dC1zdGF0dXMuYzoyOTYKK21zZ2lkICJtb2RpZmllZDoiCittc2dzdHIgIsOkbmRyYWQ6IgorCisjOiB3dC1zdGF0dXMuYzoyOTgKK21zZ2lkICJyZW5hbWVkOiIKK21zZ3N0ciAibmFtbmJ5dHQ6IgorCisjOiB3dC1zdGF0dXMuYzozMDAKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAidHlwYnl0ZToiCisKKyM6IHd0LXN0YXR1cy5jOjMwMgorbXNnaWQgInVua25vd246IgorbXNnc3RyICJva8OkbmQ6IgorCisjOiB3dC1zdGF0dXMuYzozMDQKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIm9zYW1tYW5zbGFnZW46IgorCisjOiB3dC1zdGF0dXMuYzozODQKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJueWEgaW5jaGVja25pbmdhciwgIgorCisjOiB3dC1zdGF0dXMuYzozODYKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIsOkbmRyYXQgaW5uZWjDpWxsLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM4OAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgIm9zcMOlcmF0IGlubmVow6VsbCwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAiU3Rhc2hlbiBpbm5laMOlbGxlciBqdXN0IG51ICVkIHBvc3QiCittc2dzdHJbMV0gIlN0YXNoZW4gaW5uZWjDpWxsZXIganVzdCBudSAlZCBwb3N0ZXIiCisKKyM6IHd0LXN0YXR1cy5jOjkzOAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJVbmRlcm1vZHVsZXIgw6RuZHJhZGUgbWVuIGludGUgdXBwZGF0ZXJhZGU6IgorCisjOiB3dC1zdGF0dXMuYzo5NDAKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJVbmRlcm1vZHVsZXJzIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbjoiCisKKyM6IHd0LXN0YXR1cy5jOjEwMjIKK21zZ2lkICIiCisiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuIgorbXNnc3RyICIiCisiUmFkZW4gb3ZhbiBmw6VyIGludGUgw6RuZHJhcyBlbGxlciB0YXMgYm9ydC5cbiIKKyJBbGx0IHVuZGVyIGRlbiBrb21tZXIgdGFzIGJvcnQuIgorCisjOiB3dC1zdGF0dXMuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjb21wdXRlIHRoZSBicmFuY2ggYWhlYWQvYmVoaW5kIHZhbHVlcy5cbiIKKyJZb3UgY2FuIHVzZSAnLS1uby1haGVhZC1iZWhpbmQnIHRvIGF2b2lkIHRoaXMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEZXQgdG9nICUuMmYgc2VrdW5kZXIgYXR0IHLDpGtuYSBmw7ZyZS9iYWtvbS12w6RyZGVuLlxuIgorIkR1IGthbiBhbnbDpG5kYSBcIi0tbm8tYWhlYWQtYmVoaW5kXCIgZsO2ciB1bmR2aWthIGRldHRhLlxuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ0Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJEdSBoYXIgZWogc2FtbWFuc2xhZ25hIHPDtmt2w6RnYXIuIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAocsOkdHRhIGtvbmZsaWt0ZXIgb2NoIGvDtnIgXCJnaXQgY29tbWl0XCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiB0byBhYm9ydCB0aGUgbWVyZ2UpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IG1lcmdlIC0tYWJvcnRcIiBmw7ZyIGF0dCBhdmJyeXRhIHNhbW1hbnNsYWduaW5nZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTUzCittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAiQWxsYSBrb25mbGlrdGVyIGhhciByw6R0dGF0cyBtZW4gZHUgw6RyIGZvcnRmYXJhbmRlIGkgZW4gc2FtbWFuc2xhZ25pbmcuIgorCisjOiB3dC1zdGF0dXMuYzoxMTU2Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBjb21taXRcIiBmw7ZyIGF0dCBzbHV0ZsO2cmEgc2FtbWFuc2xhZ25pbmdlbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNjUKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIkR1IMOkciBpIG1pdHRlbiBhdiBlbiBrw7ZybmluZyBhdiBcImdpdCBhbVwiLiIKKworIzogd3Qtc3RhdHVzLmM6MTE2OAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiQWt0dWVsbCBwYXRjaCDDpHIgdG9tLiIKKworIzogd3Qtc3RhdHVzLmM6MTE3MgorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDpHR0YSBrb25mbGlrdGVyIG9jaCBrw7ZyIHNlZGFuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExNzQKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBhbSAtLXNraXBcIiBmw7ZyIGF0dCBob3BwYSDDtnZlciBwYXRjaGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTE3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBhbSAtLWFib3J0XCIgZsO2ciBhdHQgw6V0ZXJzdMOkbGxhIHVyc3BydW5nc2dyZW5lbikiCisKKyM6IHd0LXN0YXR1cy5jOjEzMDkKK21zZ2lkICJnaXQtcmViYXNlLXRvZG8gaXMgbWlzc2luZy4iCittc2dzdHIgImdpdC1yZWJhc2UtdG9kbyBzYWtuYXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMzExCittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIkluZ2Ega29tbWFuZG9uIHV0ZsO2cmRhLiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICJTaXN0YSBrb21tYW5kb3QgdXRmw7ZydCAoJWQga29tbWFuZG8gdXRmw7ZydCk6IgorbXNnc3RyWzFdICJTaXN0YSBrb21tYW5kb3QgdXRmw7ZydCAoJWQga29tbWFuZG9uIHV0ZsO2cnQpOiIKKworIzogd3Qtc3RhdHVzLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAoc2UgZmxlciBpIGZpbGVuICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTMzMAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIkluZ2Ega29tbWFuZG9uIMOldGVyc3TDpXIuIgorCisjOiB3dC1zdGF0dXMuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIk7DpHN0YSBrb21tYW5kbyBhdHQgdXRmw7ZyYSAoJWQga29tbWFuZG8gw6V0ZXJzdMOlcik6IgorbXNnc3RyWzFdICJGw7ZsamFuZGUga29tbWFuZG9uIGF0dCB1dGbDtnJhICglZCBrb21tYW5kb24gw6V0ZXJzdMOlcik6IgorCisjOiB3dC1zdGF0dXMuYzoxMzQxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIGbDtnIgYXR0IHZpc2Egb2NoIHJlZGlnZXJhKSIKKworIzogd3Qtc3RhdHVzLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgYXR0IG9tYmFzZXJhIGdyZW5lbiBcIiVzXCIgb3ZhbnDDpSBcIiVzXCIuIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBtZWQgZW4gb21iYXNlcmluZy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAocsOkdHRhIGtvbmZsaWt0ZXIgb2NoIGvDtnIgc2VkYW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzMKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcmViYXNlIC0tc2tpcFwiIGbDtnIgYXR0IGhvcHBhIMO2dmVyIHBhdGNoZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMzc1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgZsO2ciBhdHQgY2hlY2thIHV0IHVyc3BydW5nc2dyZW5lbikiCisKKyM6IHd0LXN0YXR1cy5jOjEzODIKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFsbGEga29uZmxpa3RlciByw6R0dGFkZToga8O2ciBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTM4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiRHUgaMOlbGxlciBww6UgYXR0IGRlbGEgdXBwIGVuIGluY2hlY2tuaW5nIG1lZGFuIGR1IG9tYmFzZXJhciBncmVuZW4gXCIlc1wiICIKKyJvdmFucMOlIFwiJXNcIi4iCisKKyM6IHd0LXN0YXR1cy5jOjEzOTEKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgYXR0IGRlbGEgdXBwIGVuIGluY2hlY2tuaW5nIGkgZW4gb21iYXNlcmluZy4iCisKKyM6IHd0LXN0YXR1cy5jOjEzOTQKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoU8OlIGZvcnQgZGluIGFyYmV0c2thdGFsb2cgw6RyIHJlbiwga8O2ciBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiRHUgaMOlbGxlciBww6UgYXR0IHJlZGlnZXJhIGVuIGluY2hlY2tuaW5nIG1lZGFuIGR1IG9tYmFzZXJhciBncmVuZW4gXCIlc1wiICIKKyJvdmFucMOlIFwiJXNcIi4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MDMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIGF0dCByZWRpZ2VyYSBlbiBpbmNoZWNrbmluZyB1bmRlciBlbiBvbWJhc2VyaW5nLiIKKworIzogd3Qtc3RhdHVzLmM6MTQwNgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiIKKyIgIChhbnbDpG5kIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgZsO2ciBhdHQgbMOkZ2dhIHRpbGwgcMOlIGFrdHVlbGwgaW5jaGVja25pbmcpIgorCisjOiB3dC1zdGF0dXMuYzoxNDA4Cittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgbsOkciBkdSDDpHIgbsO2amQgbWVkIGRpbmEgw6RuZHJpbmdhcikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MTkKK21zZ2lkICJDaGVycnktcGljayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICJDaGVycnktcGljayBww6Vnw6VyLiIKKworIzogd3Qtc3RhdHVzLmM6MTQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBtZWQgZW4gXCJjaGVycnktcGlja1wiIGF2IGluY2hlY2tuaW5nZW4gJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxNDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDpHR0YSBrb25mbGlrdGVyIG9jaCBrw7ZyIHNlZGFuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzIKK21zZ2lkICIgIChydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIKK21zZ3N0ciAiICAoa8O2ciBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgZsO2ciBhdHQgZm9ydHPDpHR0YSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzUKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYWxsYSBrb25mbGlrdGVyIHLDpHR0YWRlOiBrw7ZyIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzcKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiBmw7ZyIGF0dCBob3BwYSDDtnZlciBwYXRjaGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgZsO2ciBhdHQgYXZicnl0YSBcImNoZXJyeS1waWNrXCItIgorIm9wZXJhdGlvbmVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0OQorbXNnaWQgIlJldmVydCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICLDhW5ncmluZyBww6Vnw6VyLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgbWVkIGF0dCDDpW5ncmEgaW5jaGVja25pbmdlbiAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NTgKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDpHR0YSBrb25mbGlrdGVyIG9jaCBrw7ZyIHNlZGFuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxNDYxCittc2dpZCAiICAocnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgdG8gY29udGludWUpIgorbXNnc3RyICIgIChrw7ZyIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIgZsO2ciBhdHQgZm9ydHPDpHR0YSkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFsbGEga29uZmxpa3RlciByw6R0dGFkZToga8O2ciBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCByZXZlcnQgLS1za2lwXCIgZsO2ciBhdHQgaG9wcGEgw7Z2ZXIgcGF0Y2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE0NjgKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgZsO2ciBhdHQgYXZicnl0YSDDpW5ncmFuZGV0KSIKKworIzogd3Qtc3RhdHVzLmM6MTQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIG1lZCBlbiBcImJpc2VjdFwiLCBzdGFydGFkIGZyw6VuIGdyZW5lbiBcIiVzXCIuIgorCisjOiB3dC1zdGF0dXMuYzoxNDgyCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgbWVkIGVuIFwiYmlzZWN0XCIuIgorCisjOiB3dC1zdGF0dXMuYzoxNDg1Cittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCBiaXNlY3QgcmVzZXRcIiBmw7ZyIGF0dCBrb21tYSB0aWxsYmFrYSB0aWxsIHVyc3BydW5nc2dyZW5lbikiCisKKyM6IHd0LXN0YXR1cy5jOjE2OTQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICJQw6UgZ3JlbmVuICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgImludGVyYWt0aXYgb21iYXNlcmluZyBww6Vnw6VyOyBvdmFucMOlICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIm9tYmFzZXJpbmcgcMOlZ8Olcjsgb3ZhbnDDpSAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MTMKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJJbnRlIHDDpSBuw6Vnb24gZ3JlbiBmw7ZyIG7DpHJ2YXJhbmRlLiIKKworIzogd3Qtc3RhdHVzLmM6MTczMAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJGw7Zyc3RhIGluY2hlY2tuaW5nIgorCisjOiB3dC1zdGF0dXMuYzoxNzMxCittc2dpZCAiTm8gY29tbWl0cyB5ZXQiCittc2dzdHIgIkluZ2EgaW5jaGVja25pbmdhciDDpG5udSIKKworIzogd3Qtc3RhdHVzLmM6MTc0NQorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiT3Nww6VyYWRlIGZpbGVyIgorCisjOiB3dC1zdGF0dXMuYzoxNzQ3Cittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiSWdub3JlcmFkZSBmaWxlciIKKworIzogd3Qtc3RhdHVzLmM6MTc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiRGV0IHRvZyAlLjJmIHNla3VuZGVyIGF0dCByw6RrbmEgdXBwIG9zcMOlcmFkZSBmaWxlci4gXCJzdGF0dXMgLXVub1wiXG4iCisia2FuIGfDpSBzbmFiYmFyZSwgbWVuIGR1IG3DpXN0ZSB2YXJhIGbDtnJzaWt0aWcgc8OlIGR1IGludGUgZ2zDtm1tZXJcbiIKKyJsw6RnZ2EgdGlsbCBueWEgZmlsZXIgc2rDpGx2IChzZSBcImdpdCBoZWxwIHN0YXR1c1wiKS4iCisKKyMgJXMgw6RyIG7DpHN0YSBzdHLDpG5nIGVsbGVyIHRvbS4KKyM6IHd0LXN0YXR1cy5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiT3Nww6VyYWRlIGZpbGVyIHZpc2FzIGVqJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTkKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKGFudsOkbmQgZmxhZ2dhbiAtdSBmw7ZyIGF0dCB2aXNhIG9zcMOlcmFkZSBmaWxlcikiCisKKyM6IHd0LXN0YXR1cy5jOjE3NjUKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJpbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbiAoYW52w6RuZCBcImdpdCBhZGRcIiBvY2gvZWxsZXIgXCJnaXQgY29tbWl0IC1hIgorIlwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgImluZ2Egw6RuZHJpbmdhciBhdHQgY2hlY2thIGluXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorImluZ2V0IGvDtmF0IGbDtnIgaW5jaGVja25pbmcsIG1lbiBvc3DDpXJhZGUgZmlsZXIgZmlubnMgKHNww6VyYSBtZWQgXCJnaXQgYWRkIgorIlwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICJpbmdldCBrw7ZhdCBmw7ZyIGluY2hlY2tuaW5nLCBtZW4gb3Nww6VyYWRlIGZpbGVyIGZpbm5zXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgImluZ2V0IGF0dCBjaGVja2EgaW4gKHNrYXBhL2tvcGllcmEgZmlsZXIgb2NoIHNww6VyYSBtZWQgXCJnaXQgYWRkXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODUgd3Qtc3RhdHVzLmM6MTc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICJpbmdldCBhdHQgY2hlY2thIGluXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiaW5nZXQgYXR0IGNoZWNrYSBpbiAoYW52w6RuZCAtdSBmw7ZyIGF0dCB2aXNhIG9zcMOlcmFkZSBmaWxlcilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgImluZ2V0IGF0dCBjaGVja2EgaW4sIGFyYmV0c2thdGFsb2dlbiByZW5cbiIKKworIzogd3Qtc3RhdHVzLmM6MTkwNQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IG9uICIKK21zZ3N0ciAiSW5nYSBpbmNoZWNrbmluZ2FyIMOkbm51IHDDpSAiCisKKyM6IHd0LXN0YXR1cy5jOjE5MDkKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEIChpbmdlbiBncmVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAib2xpa2EiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDIgd3Qtc3RhdHVzLmM6MTk1MAorbXNnaWQgImJlaGluZCAiCittc2dzdHIgImVmdGVyICIKKworIzogd3Qtc3RhdHVzLmM6MTk0NSB3dC1zdGF0dXMuYzoxOTQ4Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJmw7ZyZSAiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiCisjOiB3dC1zdGF0dXMuYzoyNDcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgImthbiBpbnRlICVzOiBEdSBoYXIgb2vDtmFkZSDDpG5kcmluZ2FyLiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3NgorbXNnaWQgImFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiZGVzc3V0b20gaW5uZWjDpWxsZXIgZGl0IGluZGV4IMOkbmRyaW5nYXIgc29tIGludGUgaGFyIGNoZWNrYXRzIGluLiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgImthbiBpbnRlICVzOiBEaXR0IGluZGV4IGlubmVow6VsbGVyIMOkbmRyaW5nYXIgc29tIGludGUgY2hlY2thdHMgaW4uIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IGzDpG5rZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FkZC5jOjI2Cittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgWzxmbGFnZ29yPl0gWy0tXSA8c8O2a3bDpGc+Li4uIgorCisjOiBidWlsdGluL2FkZC5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgImRpZmYtc3RhdHVzICVjIGbDtnJ2w6RudGFkZXMgaW50ZSIKKworIzogYnVpbHRpbi9hZGQuYzo5MiBidWlsdGluL2NvbW1pdC5jOjI4OAorbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBmaWxlciIKKworIzogYnVpbHRpbi9hZGQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAidGEgYm9ydCBcIiVzXCJcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzcKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiT2vDtmFkZSDDpG5kcmluZ2FyIGVmdGVyIGF0dCBoYSB1cHBkYXRlcmF0IGluZGV4ZXQ6IgorCisjOiBidWlsdGluL2FkZC5jOjI1MiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RzYSBpbmRleGV0IgorCisjOiBidWlsdGluL2FkZC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgc2tyaXZuaW5nLiIKKworIzogYnVpbHRpbi9hZGQuYzoyNjcKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIkt1bmRlIGludGUgc2tyaXZhIHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjI3MAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICJyZWRpZ2VyaW5nIGF2IHBhdGNoIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9hZGQuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBzdGF0dXMgcMOlIFwiJXNcIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNzUKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIlRvbSBwYXRjaC4gQXZicnl0ZXIuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0aWxsw6RtcGEgXCIlc1wiIgorCisjOiBidWlsdGluL2FkZC5jOjI4OAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiRsO2bGphbmRlIHPDtmt2w6RnYXIgaWdub3JlcmFzIGF2IGVuIGF2IGRpbmEgLmdpdGlnbm9yZS1maWxlcjpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozMDggYnVpbHRpbi9jbGVhbi5jOjkxMCBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjIzIGJ1aWx0aW4vcHVzaC5jOjU0OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ0IGJ1aWx0aW4vcm0uYzoyNDEgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICJ0ZXN0a8O2cm5pbmciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzExCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAicGxvY2thIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2FkZC5jOjMxMiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MiBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgInbDpGxqIHN0eWNrZW4gaW50ZXJha3RpdnQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEzCittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICJyZWRpZ2VyYSBha3R1ZWxsIGRpZmYgb2NoIGFwcGxpY2VyYSIKKworIzogYnVpbHRpbi9hZGQuYzozMTQKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgInRpbGzDpXQgbMOkZ2dhIHRpbGwgYW5uYXJzIGlnbm9yZXJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE1Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgInVwcGRhdGVyYSBzcMOlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9hZGQuYzozMTYKK21zZ2lkICJyZW5vcm1hbGl6ZSBFT0wgb2YgdHJhY2tlZCBmaWxlcyAoaW1wbGllcyAtdSkiCittc2dzdHIgIsOldGVybm9ybWFsaXNlcmEgcmFkc2x1dCBpIHNww6VyYWRlIGZpbGVyIChpbXBsaWNlcmFyIC11KSIKKworIzogYnVpbHRpbi9hZGQuYzozMTcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInJlZ2lzdHJlcmEgZW5kYXN0IGF0dCBzw7ZrdsOkZ2VuIGtvbW1lciBsw6RnZ2FzIHRpbGwgc2VuYXJlIgorCisjOiBidWlsdGluL2FkZC5jOjMxOAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCDDpG5kcmluZ2FyIGZyw6VuIGFsbGEgc3DDpXJhZGUgb2NoIG9zcMOlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9hZGQuYzozMjEKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiaWdub3JlcmEgc8O2a3bDpGdhciBib3J0dGFnbmEgaSBhcmJldHNrYXRhbG9nZW4gKHNhbW1hIHNvbSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIzCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJsw6RnZyBpbnRlIHRpbGwsIHVwcGRhdGVyYSBlbmRhc3QgaW5kZXhldCIKKworIzogYnVpbHRpbi9hZGQuYzozMjQKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICJob3BwYSBiYXJhIMO2dmVyIGZpbGVyIHNvbSBpbnRlIGthbiBsw6RnZ2FzIHRpbGwgcMOlIGdydW5kIGF2IGZlbCIKKworIzogYnVpbHRpbi9hZGQuYzozMjUKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgInNlIG9tIC0gw6R2ZW4gc2FrbmFkZSAtIGZpbGVyIGlnbm9yZXJhcyBpIHRlc3Rrw7ZybmluZyIKKworIzogYnVpbHRpbi9hZGQuYzozMjcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgIsO2dmVyc3R5ciBleGVrdmVyaW5nc2JpdGVuIGbDtnIgYW5naXZuYSBmaWxlciIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgInZhcm5hIG7DpHIgZXR0IGluYnlnZ3QgYXJraXYgbMOkZ2dzIHRpbGwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UndmUgYWRkZWQgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBpbnNpZGUgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuXG4iCisiQ2xvbmVzIG9mIHRoZSBvdXRlciByZXBvc2l0b3J5IHdpbGwgbm90IGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mXG4iCisidGhlIGVtYmVkZGVkIHJlcG9zaXRvcnkgYW5kIHdpbGwgbm90IGtub3cgaG93IHRvIG9idGFpbiBpdC5cbiIKKyJJZiB5b3UgbWVhbnQgdG8gYWRkIGEgc3VibW9kdWxlLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIklmIHlvdSBhZGRlZCB0aGlzIHBhdGggYnkgbWlzdGFrZSwgeW91IGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiIKKyJpbmRleCB3aXRoOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2VlIFwiZ2l0IGhlbHAgc3VibW9kdWxlXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisiRHUgaGFyIGxhZ3QgdGlsbCBldHQgYW5uYXQgZ2l0LWFya2l2IGludXRpIGFrdHVlbGx0IGFya2l2LlxuIgorIktsb25lciBhdiBkZXQgeXR0cmUgYXJraXZldCBrb21tZXIgaW50ZSBpbm5laMOlbGxhIGlubmVow6VsbGV0IGZyw6VuXG4iCisiZGV0IGluYsOkZGRhZGUgYXJraXZldCBlbGxlciB2ZXRhIGh1ciBtYW4gZsOlciB0YWcgcMOlIGRldC5cbiIKKyJPbSBkdSB0w6Rua3RlIGzDpGdnYSB0aWxsIGVuIHVuZGVybW9kdWwsIHNrcmV2OlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJPbSBkdSBsYWRlIHRpbGwgc8O2a3bDpGdlbiBhdiBtaXNzdGFnIHRhciBkdSBib3J0IGRlbiBmcsOlbiBpbmRleGV0XG4iCisibWVkOlxuIgorIlxuIgorIlx0Z2l0IHJtIC0tY2FjaGVkICVzXG4iCisiXG4iCisiU2UgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmw7ZyIHl0dGVybGlnYXJlIGluZm9ybWF0aW9uLiIKKworIzogYnVpbHRpbi9hZGQuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAibMOkZ2dlciB0aWxsIGluYsOkZGRhdCBnaXQtYXJraXY6ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJBbnbDpG5kIC1mIG9tIGR1IHZlcmtsaWdlbiB2aWxsIGzDpGdnYSB0aWxsIGRlbS5cbiIKKworIzogYnVpbHRpbi9hZGQuYzo0MDAKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkZ2dhIHRpbGwgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDI4IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDDpHIgaW5rb21wYXRpYmVsdCBtZWQgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjQzNAorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgw6RyIGlua29tcGF0aWJlbHQgbWVkIC0tZWRpdCIKKworIzogYnVpbHRpbi9hZGQuYzo0NDYKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEgb2NoIC11IMOkciDDtm1zZXNpZGlndCBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ5Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiRmxhZ2dhbiAtLWlnbm9yZS1taXNzaW5nIGthbiBlbmRhc3QgYW52w6RuZGFzIHRpbGxzYW1tYW5zIG1lZCAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAiLS1jaG1vZC1wYXJhbWV0ZXJuIFwiJXNcIiBtw6VzdGUgYW50aW5nZW4gdmFyYSAteCBlbGxlciAreCIKKworIzogYnVpbHRpbi9hZGQuYzo0NzEgYnVpbHRpbi9jaGVja291dC5jOjE2NDggYnVpbHRpbi9jb21taXQuYzozNTQKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjcKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIMOkciBpbmtvbXBhdGliZWx0IG1lZCBzw7ZrdsOkZ3NhbmdpdmVsc2VzcGFyYW1ldHJhciIKKworIzogYnVpbHRpbi9hZGQuYzo0NzggYnVpbHRpbi9jaGVja291dC5jOjE2NjAgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIGtyw6R2ZXIgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJJbmdldCBhbmdpdmV0LCBpbmdldCB0aWxsYWd0LlxuIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiS2Fuc2tlIG1lbmFkZSBkdSBhdHQgc2tyaXZhIFwiZ2l0IGFkZCAuXCI/XG4iCisKKyM6IGJ1aWx0aW4vYW0uYzozNDcKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBmw7ZyZmF0dGFyc2tyaXB0IgorCisjOiBidWlsdGluL2FtLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIlwiJXNcIiB0b2dzIGJvcnQgYXYga3Jva2VuIGFwcGx5cGF0Y2gtbXNnIgorCisjOiBidWlsdGluL2FtLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiRmVsYWt0aWcgaW5kYXRhcmFkOiBcIiVzXCIuIgorCisjOiBidWlsdGluL2FtLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJNaXNzbHlja2FkZXMga29waWVyYSBhbnRlY2tuaW5nYXIgZnLDpW4gXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjOiBidWlsdGluL2FtLmM6NTM3Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJcImZzZWVrXCIgbWlzc2x5Y2thZGVzIgorCisjOiBidWlsdGluL2FtLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIHBhdGNoZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FtLmM6NzkwCittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIkVuZGFzdCBlbiBTdEdJVC1wYXRjaHNlcmllIGthbiB0aWxsw6RtcGFzIMOldCBnw6VuZ2VuIgorCisjOiBidWlsdGluL2FtLmM6ODM4Cittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIm9naWx0aWcgdGlkc3N0w6RtcGVsIgorCisjOiBidWlsdGluL2FtLmM6ODQzIGJ1aWx0aW4vYW0uYzo4NTUKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAib2dpbHRpZyBcIkRhdGVcIi1yYWQiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTAKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAib2dpbHRpZyB0aWRzem9ucy1vZmZzZXQiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDMKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBkZXRla3RlcmEgcGF0Y2hmb3JtYXQuIgorCisjOiBidWlsdGluL2FtLmM6OTQ4IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIGthdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTMKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBkZWxhIHBhdGNoYXIuIgorCisjOiBidWlsdGluL2FtLmM6MTA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiTsOkciBkdSBoYXIgbMO2c3QgcHJvYmxlbWV0LCBrw7ZyIFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICJPbSBkdSBoZWxscmUgdmlsbCBob3BwYSDDtnZlciBwYXRjaGVuLCBrw7ZyIFwiJXMgLS1za2lwXCIgaSBzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIkbDtnIgYXR0IMOldGVyZ8OlIHRpbGwgdXJzcHJ1bmdsaWcgZ3JlbiBvY2ggc2x1dGEgcGF0Y2hhLCBrw7ZyIFwiJXMgLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjExNjkKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAiIgorIlBhdGNoIHPDpG5kIG1lZCBmb3JtYXQ9Zmxvd2VkOyBibGFua3N0ZWcgcMOlIHNsdXQgYXYgcmFkZXIga2FuIGhhIHRhcHBhdHMuIgorCisjOiBidWlsdGluL2FtLmM6MTE5NworbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiUGF0Y2hlbiDDpHIgdG9tLiIKKworIzogYnVpbHRpbi9hbS5jOjEyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhdXRob3IgbGluZSBpbiBjb21taXQgJXMiCittc2dzdHIgInNha25hZCBcImF1dGhvclwiLXJhZCBpIGluY2hlY2tuaW5nZW4gJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJS4qcyIKK21zZ3N0ciAib2dpbHRpZyBpZGVudC1yYWQ6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg0Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkFya2l2ZXQgc2FrbmFyIG9iamVrdCBzb20gYmVow7Z2cyBmw7ZyIGF0dCBmYWxsYSB0aWxsYmFrYSBww6UgMy0iCisidsOkZ3NzYW1tYW5zbGFnbmluZy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiQW52w6RuZGVyIGluZGV4aW5mbyBmw7ZyIGF0dCDDpXRlcnNrYXBhIGV0dCBiYXN0csOkZC4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MDUKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiSGFyIGR1IGhhbmRyZWRpZ2VyYXQgZGluIHBhdGNoP1xuIgorIkRlbiBrYW4gaW50ZSB0aWxsw6RtcGFzIHDDpSBibG9iYmFyIHNvbSBhbnRlY2tuYXRzIGkgZGVzcyBpbmRleC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTExCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICIiCisiRmFsbGVyIHRpbGxiYWthIHDDpSBhdHQgcGF0Y2hhIGdydW5kdmVyc2lvbmVuIG9jaCB0cmV2w6Rnc3NhbW1hbnNsYWduaW5nLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTUzNworbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBzbMOlIGlob3Agw6RuZHJpbmdhcm5hLiIKKworIzogYnVpbHRpbi9hbS5jOjE1NjkKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJ0aWxsw6RtcGFyIHDDpSBlbiB0b20gaGlzdG9yaWsiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE2IGJ1aWx0aW4vYW0uYzoxNjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAia2FuIGludGUgw6V0ZXJ1cHB0YTogJXMgZmlubnMgaW50ZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjM4Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJJbmNoZWNrbmluZ3Nrcm9wcGVuIMOkcjoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIlRpbGzDpG1wYT8gWT1qYS9OPW5lai9FPXJlZGlnZXJhL1Y9dmlzYSBwYXRjaC9BPWdvZHRhIGFsbGE6ICIKKworIzogYnVpbHRpbi9hbS5jOjE2OTUgYnVpbHRpbi9jb21taXQuYzozOTQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIGluZGV4ZmlsIgorCisjOiBidWlsdGluL2FtLmM6MTY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIlNtdXRzaWd0IGluZGV4OiBrYW4gaW50ZSB0aWxsw6RtcGEgcGF0Y2hhciAoc211dHNpZ2E6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE3MzkgYnVpbHRpbi9hbS5jOjE4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIlRpbGzDpG1wYXI6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzU2Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgLS0gUGF0Y2hlbiBoYXIgcmVkYW4gdGlsbMOkbXBhdHMuIgorCisjOiBidWlsdGluL2FtLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiUGF0Y2ggbWlzc2x5Y2thZGVzIHDDpSAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc2NgorbXNnaWQgIlVzZSAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyB0byBzZWUgdGhlIGZhaWxlZCBwYXRjaCIKK21zZ3N0ciAiIgorIkFudsOkbmQgXCJnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2hcIiBmw7ZyIGF0dCBzZSBwYXRjaGVuIHNvbSBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODEwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiSW5nYSDDpG5kcmluZ2FyIC0gZ2zDtm1kZSBkdSBhdHQgYW52w6RuZGEgXCJnaXQgYWRkXCI/XG4iCisiT20gZGV0IGludGUgw6RyIG7DpWdvdCBrdmFyIGF0dCBrw7ZhIGthbiBkZXQgaMOkbmRhIGF0dCBuw6Vnb3QgYW5uYXQgcmVkYW5cbiIKKyJpbnRyb2R1Y2VyYXQgc2FtbWEgw6RuZHJpbmdhcjsga2Fuc2tlIGR1IGLDtnIgaG9wcGEgw7Z2ZXIgcGF0Y2hlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxODE3Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiWW91IHNob3VsZCAnZ2l0IGFkZCcgZWFjaCBmaWxlIHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzIHRvIG1hcmsgdGhlbSBhcyAiCisic3VjaC5cbiIKKyJZb3UgbWlnaHQgcnVuIGBnaXQgcm1gIG9uIGEgZmlsZSB0byBhY2NlcHQgXCJkZWxldGVkIGJ5IHRoZW1cIiBmb3IgaXQuIgorbXNnc3RyICIiCisiRHUgaGFyIGZvcnRmYXJhbmRlIGVqIHNhbW1hbnNsYWduYSBzw7ZrdsOkZ2FyIGkgaW5kZXhldC5cbiIKKyJEdSBiw7ZyIGvDtnJhIFwiZ2l0IGFkZFwiIHDDpSBmaWxlciBtZWQgbMO2c3RhIGtvbmZsaWt0ZXIgZsO2ciBhdHQgYW5nZSBkZW0gc29tICIKKyJsw7ZzdGEuXG4iCisiRHUga2FuIGvDtnJhIFwiZ2l0IHJtXCIgZsO2ciBhdHQgZ29kdGEgXCJib3J0dGFnZW4gYXYgZGVtXCIgZsO2ciBkZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTkyNCBidWlsdGluL2FtLmM6MTkyOCBidWlsdGluL2FtLmM6MTk0MCBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIkthbiBpbnRlIHRvbGthIG9iamVrdGV0IFwiJXNcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTc2Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJtaXNzbHlja2FkZXMgc3TDpGRhIHVwcCBpbmRleGV0IgorCisjOiBidWlsdGluL2FtLmM6MjAyMAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiRHUgdmVya2FyIGhhIGZseXR0YXQgSEVBRCBzZWRhbiBcImFtXCIgc2lzdCBtaXNzbHlja2FkZXMuXG4iCisiw4V0ZXJzdMOkbGxlciBpbnRlIHRpbGwgT1JJR19IRUFEIgorCisjOiBidWlsdGluL2FtLmM6MjExNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIkZlbGFrdGlndCB2w6RyZGUgZsO2ciAtLXBhdGNoLWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTUzCittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBbPGZsYWdnb3I+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorCisjOiBidWlsdGluL2FtLmM6MjE1NAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICJnaXQgYW0gWzxmbGFnZ29yPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKKworIzogYnVpbHRpbi9hbS5jOjIxNjAKK21zZ2lkICJydW4gaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAia8O2ciBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9hbS5jOjIxNjIKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAiaGlzdG9yaXNrIGZsYWdnYSAtLSBuby1vcCIKKworIzogYnVpbHRpbi9hbS5jOjIxNjQKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAidGlsbMOldCBmYWxsYSB0aWxsYmFrYSBww6UgdHJldsOkZ3NzYW1tYW5zbGFnbmluZyBvbSBuw7ZkdsOkbmRpZ3QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY1IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU4CisjOiBidWlsdGluL3JlcGFjay5jOjMwNCBidWlsdGluL3N0YXNoLmM6ODExCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgInZhciB0eXN0IgorCisjOiBidWlsdGluL2FtLmM6MjE2NworbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImzDpGdnIHRpbGwgXCJTaWduZWQtb2ZmLWJ5XCItcmFkIGkgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcwCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgImtvZGEgb20gdGlsbCB1dGY4IChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcyCittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAic8OkbmQgZmxhZ2dhbiAtayB0aWxsIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzQKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJzw6RuZCBmbGFnZ2FuIC1iIHRpbGwgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInPDpG5kIGZsYWdnYW4gLW0gdGlsbCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc4Cittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAic8OkbmQgZmxhZ2dhbiAtLWtlZXAtY3IgdGlsbCBnaXQtbWFpbHNwbGl0IGbDtnIgbWJveC1mb3JtYXRldCIKKworIzogYnVpbHRpbi9hbS5jOjIxODEKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAic8OkbmQgaW50ZSBmbGFnZ2FuIC0ta2VlcC1jciB0aWxsIGdpdC1tYWlsc3BsaXQgb2Jlcm9lbmRlIGF2IGFtLmtlZXBjciIKKworIzogYnVpbHRpbi9hbS5jOjIxODQKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgInRhIGJvcnQgYWxsdGluZyBmw7ZyZSBlbiBzYXhsaW5qZSIKKworIzogYnVpbHRpbi9hbS5jOjIxODYgYnVpbHRpbi9hbS5jOjIxODkgYnVpbHRpbi9hbS5jOjIxOTIgYnVpbHRpbi9hbS5jOjIxOTUKKyM6IGJ1aWx0aW4vYW0uYzoyMTk4IGJ1aWx0aW4vYW0uYzoyMjAxIGJ1aWx0aW4vYW0uYzoyMjA0IGJ1aWx0aW4vYW0uYzoyMjA3CisjOiBidWlsdGluL2FtLmM6MjIxMworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgInPDpG5kIGRldCBnZW5vbSBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjAzIGJ1aWx0aW4vY29tbWl0LmM6MTM4NiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NiBidWlsdGluL2dyZXAuYzo4ODMgYnVpbHRpbi9tZXJnZS5jOjI0OQorIzogYnVpbHRpbi9wdWxsLmM6MTYwIGJ1aWx0aW4vcHVsbC5jOjIxOSBidWlsdGluL3JlYmFzZS5jOjE0NjkKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE1IGJ1aWx0aW4vcmVwYWNrLmM6MzE5IGJ1aWx0aW4vcmVwYWNrLmM6MzIxCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUwIGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzIgYnVpbHRpbi90YWcuYzo0MDMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTQgcGFyc2Utb3B0aW9ucy5oOjE3NSBwYXJzZS1vcHRpb25zLmg6MzE2Cittc2dpZCAibiIKK21zZ3N0ciAibiIKKworIzogYnVpbHRpbi9hbS5jOjIyMDkgYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1IGJ1aWx0aW4vdGFnLmM6NDM3IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICJmb3JtYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjEwCittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICJmb3JtYXQgZsO2ciBwYXRjaChhcikiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLDtnZlcnN0eXIgZmVsbWVkZGVsYW5kZW4gbsOkciBwYXRjaGZlbCB1cHBzdMOlciIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICJmb3J0c8OkdHQgYXBwbGljZXJhIHBhdGNoYXIgZWZ0ZXIgYXR0IGhhIGzDtnN0IGVuIGtvbmZsaWt0IgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICJzeW5vbnltZXIgdGlsbCAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImhvcHBhIMO2dmVyIGRlbiBha3R1ZWxsYSBncmVuZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI3Cittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgb3JpZ2luYWxncmVuZW4gb2NoIGF2YnJ5dCBwYXRjaG5pbmdlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAiYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbiBidXQga2VlcCBIRUFEIHdoZXJlIGl0IGlzLiIKK21zZ3N0ciAiYXZicnl0IHBhdGNobmluZ2VuIG1lbiBiZWjDpWxsIEhFQUQgZMOkciBkZXQgw6RyLiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkLiIKK21zZ3N0ciAidmlzYSBwYXRjaGVuIHNvbSB0aWxsw6RtcGFzLiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzcKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgImxqdWcgb20gaW5jaGVja25pbmdzZGF0dW0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM5Cittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAiYW52w6RuZCBudXZhcmFuZGUgdGlkc3N0w6RtcGVsIGbDtnIgZsO2cmZhdHRhcmRhdHVtIgorCisjOiBidWlsdGluL2FtLmM6MjI0MSBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIwIGJ1aWx0aW4vY29tbWl0LmM6MTUwNworIzogYnVpbHRpbi9tZXJnZS5jOjI4NiBidWlsdGluL3B1bGwuYzoxOTQgYnVpbHRpbi9yZWJhc2UuYzo1MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMyBidWlsdGluL3JldmVydC5jOjExNyBidWlsdGluL3RhZy5jOjQxOAorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAibnlja2VsLWlkIgorCisjOiBidWlsdGluL2FtLmM6MjI0MiBidWlsdGluL3JlYmFzZS5jOjUxMCBidWlsdGluL3JlYmFzZS5jOjE1MTQKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICJHUEctc2lnbmVyYSBpbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL2FtLmM6MjI0NQorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIoYW52w6RuZHMgaW50ZXJudCBhdiBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIyNjMKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJGbGFnZ2FuIC1iLy0tYmluYXJ5IGhhciB2YXJpdCB1dGFuIGZ1bmt0aW9uIGzDpG5nZSwgb2NoXG4iCisia29tbWVyIHRhcyBib3J0LiBWaSBiZXIgZGlnIGF0dCBpbnRlIGFudsOkbmRhIGRlbiBsw6RuZ3JlLiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzAKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIm1pc3NseWNrYWRlcyBsw6RzYSBpbmRleGV0IgorCisjOiBidWlsdGluL2FtLmM6MjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgInRpZGlnYXJlIHJlYmFzZS1rYXRhbG9nICVzIGZpbm5zIGZvcnRmYXJhbmRlLCBtZW4gbWJveCBhbmdhdnMuIgorCisjOiBidWlsdGluL2FtLmM6MjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIkt2YXJibGl2ZW4ga2F0YWxvZyAlcyBoaXR0YWRlcy5cbiIKKyJBbnbDpG5kIFwiZ2l0IGFtIC0tYWJvcnRcIiBmw7ZyIGF0dCB0YSBib3J0IGRlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE1Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiTMO2c25pbmdzb3BlcmF0aW9uIHDDpWfDpXIgaW50ZSwgdmkgw6V0ZXJ1cHB0YXIgaW50ZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgImludGVyYWt0aXZ0IGzDpGdlIGtyw6R2ZXIgcGF0Y2hhciBww6Uga29tbWFuZG9yYWRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxmbGFnZ29yPl0gWzxwYXRjaD4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGFya2l2ZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgImt1bmRlIGludGUgb21kaXJpZ2VyYSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IEZqw6RyciB1dGFuIFVSTCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgYXJjaGl2ZTogZsO2cnbDpG50YWRlIEFDSy9OQUssIGZpY2sgZmx1c2gtcGFrZXQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBwcm90b2tvbGxmZWwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBmw7ZydsOkbnRhZGUgZW4gdMO2bW5pbmcgKGZsdXNoKSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDx0ZXJtLWbDtnItZmVsPiA8dGVybS1mw7ZyLXLDpHR0PiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI0Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNQorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxpbmNoZWNrbmluZz5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHRpbGxzdMOlbmQ+IDxyZXZpc2lvbj4gPHRlcm0tIgorImbDtnItcsOkdHQ+IDx0ZXJtLWbDtnItZmVsPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI3Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxrb21tYWRubz4gPHRlcm0tZsO2ci1yw6R0dD4gIgorIjx0ZXJtLWbDtnItZmVsPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGdvb2RfdGVybT4gPGJhZF90ZXJtPiBbPHRlcm0+XSIKK21zZ3N0ciAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1uZXh0LWNoZWNrIDx0ZXJtLWbDtnItcsOkdHQ+IDx0ZXJtLWbDtnItZmVsPiA8ZXRlcm0+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0LWJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGZlbD4gWzxyw6R0dD4uLi5dXSBbLS1dIFs8c8O2a3bDpGdhcj4uLi5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gZ2lsdGlnIHRlcm0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnJXMnIGFzIGEgdGVybSIKK21zZ3N0ciAia2FuIGludGUgYW52w6RuZGEgZGV0IGluYnlnZ2RhIGtvbW1hbmRvdCBcIiVzXCIgc29tIHRlcm0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgImthbiBpbnRlIMOkbmRyYSBiZXR5ZGVsc2VuIGF2IHRlcm1lbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgInRlcm1lcm5hIG3DpXN0ZSB2YXJhIG9saWthIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBmaWxlbiBCSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuXG4iCittc2dzdHIgIlZpIHV0ZsO2ciBpbmdlbiBiaXNlY3QgZsO2ciB0aWxsZsOkbGxldC5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGVuIGdpbHRpZyBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICclcycuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBjaGVja2EgdXQgb3JpZ2luYWwtSEVBRCBcIiVzXCIuIEbDtnJzw7ZrIFwiZ2l0IGJpc2VjdCByZXNldCAiCisiPGluY2hlY2tuaW5nPlwiLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IGFyZ3VtZW50IHRpbGwgYmlzZWN0X3dyaXRlOiAlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBnZXQgdGhlIG9pZCBvZiB0aGUgcmV2ICclcyciCittc2dzdHIgImthbiBpbnRlIGzDpHNhIG9pZCBmw7ZyIHJlZmVyZW5zZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IG9wZW4gdGhlIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICVzLyVzIGJpc2VjdCIKK21zZ3N0ciAiT2dpbHRpZ3Qga29tbWFuZG86IGR1IHV0ZsO2ciBqdXN0IG51IGVuIFwiYmlzZWN0XCIgbWVkICVzLyVzLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJEdSBtw6VzdGUgYW5nZSDDpXRtaW5zdG9uZSBlbiAlcyBvY2ggZW4gJXMgdmVyc2lvbi5cbiIKKyIoRHUga2FuIGFudsOkbmRhIFwiZ2l0IGJpc2VjdCAlc1wiIG9jaCBcImdpdCBiaXNlY3QgJXNcIiBmw7ZyIGRldHRhLikiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJXMgYW5kICVzIHJldmlzaW9uLlxuIgorIllvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAlc1wiIGFuZCBcImdpdCBiaXNlY3QgJXNcIiBmb3IgdGhhdC4iCittc2dzdHIgIiIKKyJEdSBtw6VzdGUgc3RhcnRhIG1lZCBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJEdSBtw6VzdGUgc2VkYW4gYW5nZSDDpXRtaW5zdG9uZSBlbiAlcyBvY2ggZW4gJXMgdmVyc2lvbi5cbiIKKyIoRHUga2FuIGFudsOkbmRhIFwiZ2l0IGJpc2VjdCAlc1wiIG9jaCBcImdpdCBiaXNlY3QgJXNcIiBmw7ZyIGRldHRhLikiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAidXRmw7ZyIGJpc2VjdCBtZWQgZW5kYXN0IGVuICVzIGluY2hlY2tuaW5nIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzMwCittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIsOEciBkdSBzw6RrZXIgW1k9amEvTj1uZWpdPyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzcKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICJpbmdhIHRlcm1lciBhbmdpdm5hIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGN1cnJlbnQgdGVybXMgYXJlICVzIGZvciB0aGUgb2xkIHN0YXRlXG4iCisiYW5kICVzIGZvciB0aGUgbmV3IHN0YXRlLlxuIgorbXNnc3RyICIiCisiQWt0dWVsbGEgdGVybWVyIMOkciAlcyBmw7ZyIGRldCBnYW1sYSB0aWxsc3TDpW5kZXRcbiIKKyJvY2ggJXMgZsO2ciBkZXQgbnlhIHRpbGxzdMOlbmRldC5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW52YWxpZCBhcmd1bWVudCAlcyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLlxuIgorIlN1cHBvcnRlZCBvcHRpb25zIGFyZTogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBhbmQgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKK21zZ3N0ciAiIgorIm9naWx0aWd0IGFyZ3VtZW50ICVzIGbDtnIgXCJnaXQgYmlzZWN0IHRlcm1zXCIuXG4iCisiRmxhZ2dvciBzb20gc3TDtmRzIMOkcjogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCBvY2ggLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICJva8OkbmQgZmxhZ2dhOiAlcyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICJcIiVzXCIgdmVya2FyIGludGUgdmFyYSBlbiBnaWx0aWcgcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTIKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgImZlbGFrdGlndCBIRUFEIC0gSmFnIGJlaMO2dmVyIGV0dCBIRUFEIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNraW5nIG91dCAnJXMnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHN0YXJ0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJtaXNzbHlja2FkZXMgY2hlY2thIHV0IFwiJXNcIi4gRsO2cnPDtmsgXCJnaXQgYmlzZWN0IHJlc2V0IDxnaWx0aWdfZ3Jlbj5cIi4iCisKKyMgY29naXRvLXJlbGF0ZXJhdAorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU0OAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgImvDtnIgaW50ZSBcImJpc2VjdFwiIHDDpSB0csOkZCBkw6RyIFwiY2ctc2Vla1wiIGFudsOkbnRzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUxCittc2dpZCAiYmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiZmVsYWt0aWd0IEhFQUQgLSBrb25zdGlnIHN5bWJvbGlzayByZWZlcmVucyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZjogJyVzJyIKK21zZ3N0ciAib2dpbHRpZyByZWZlcmVuczogXCIlc1wiIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMxCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAidXRmw7ZyICdnaXQgYmlzZWN0IG5leHQnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICJza3JpdiB0ZXJtZXJuYSBpIC5naXQvQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJzdMOkZGFyIHVwcCBiaXNlY3QtdGlsbHN0w6VuZCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICJrb250cm9sbGVyYSBmw7ZyIGbDtnJ2w6RudGFkZSB2ZXJzaW9uZXIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzkKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLDpXRlcnN0w6RsbCBiaXNlY3QtdGlsbHN0w6VuZCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgInNrcml2ZXIgYmlzZWN0LXRpbGxzdMOlbmRldCBpIEJJU0VDVF9MT0ciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDMKK21zZ2lkICJjaGVjayBhbmQgc2V0IHRlcm1zIGluIGEgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJ2aXNhIG9jaCBhbmdlIHRlcm1lciBmw7ZyIGJpc2VjdC10aWxsc3TDpW5kIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAic2UgZWZ0ZXIgb20gdGVybWVyIGbDtnIgcsOkdHQgb2NoIGZlbCBmaW5ucyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICJza3JpdiB1dCB0ZXJtZXIgZsO2ciBiaXNlY3QiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDkKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgInDDpWLDtnJqYSBiaXNlY3Qta8O2cm5pbmdlbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgInVwcGRhdGVyYSBCSVNFQ1RfSEVBRCBpc3TDpGxsZXQgZsO2ciBhdHQgY2hlY2thIHV0IGFrdHVlbGwgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTMKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAiaW5nZW4gbG9nZyBmw7ZyIEJJU0VDVF9XUklURSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MAorbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyBrcsOkdmVyIHR2w6UgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzQKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHRhciBpbmdhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjgxCittc2dpZCAiLS1iaXNlY3QtcmVzZXQgcmVxdWlyZXMgZWl0aGVyIG5vIGFyZ3VtZW50IG9yIGEgY29tbWl0IgorbXNnc3RyICItLWJpc2VjdC1yZXNldCBrcsOkdmVyIGFudGluZ2VuIGluZ2V0IGFyZ3VtZW50IGVsbGVyIGVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg1Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIGtyw6R2ZXIgYW50aW5nZW4gNCBlbGxlciA1IGFyZ3VtZW50IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjkxCittc2dpZCAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWNoZWNrLWFuZC1zZXQtdGVybXMga3LDpHZlciB0cmUgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTcKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LW5leHQtY2hlY2sga3LDpHZlciAyIGVsbGVyIDMgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDMKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIGtyw6R2ZXIgbm9sbCBlbGxlciBldHQgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8ZmxhZ2dvcj5dIFs8cmV2LWZsYWdnb3I+XSBbPHJldj5dIFstLV0gPGZpbD4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI8cmV2LWZsYWdnb3I+IGRva3VtZW50ZXJhcyBpIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RpbmcgYSBjb2xvcjogJXMiCittc2dzdHIgImbDtnJ2w6RudGFkZSBlbiBmw6RyZzogJXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MTYKK21zZ2lkICJtdXN0IGVuZCB3aXRoIGEgY29sb3IiCittc2dzdHIgIm3DpXN0ZSBzbHV0YSBtZWQgZW4gZsOkcmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciAnJXMnIGluIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCittc2dzdHIgImZlbGFrdGlnIGbDpHJnIFwiJXNcIiBpIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAib2dpbHRpZ3QgdsOkcmRlIGbDtnIgYmxhbWUuY29sb3JpbmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICJrYW4gaW50ZSBoaXR0YSByZXZpc2lvbiAlcyBhdHQgaWdub3JlcmEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDQKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICJWaXNhIGtsYW5kcmluZ3Nwb3N0ZXIgbsOkciB2aSBoaXR0YXIgZGVtLCBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlZpc2EgYmxhbmsgU0hBLTEgZsO2ciBncsOkbnNpbmNoZWNrbmluZ2FyIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ2Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJCZWhhbmRsYSBpbnRlIHJvdGluY2hlY2tuaW5nYXIgc29tIGdyw6Ruc2VyIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ3Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiVmlzYSBzdGF0aXN0aWsgw7Z2ZXIgYXJiZXRza29zdG5hZCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OAorbXNnaWQgIkZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiVHZpbmdhIGbDtnJsb3Bwc3JhcHBvcnRlcmluZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0OQorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICJWaXNhIHV0ZGF0YXBvw6RuZyBmw7ZyIGtsYW5kcmluZ3Nwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTAKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiVmlzYSBvcmlnaW5hbGZpbG5hbW4gKFN0YW5kYXJkOiBhdXRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MQorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVmlzYSB1cnNwcnVuZ2xpZ3QgcmFkbnVtbWVyIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUyCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiVmlzYSBpIGV0dCBmb3JtYXQgYXZzZXR0IGbDtnIgbWFza2lua29uc3VtdGlvbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiVmlzYSBwb3JzbGluc2Zvcm1hdCBtZWQgcGVyLXJhZC1pbmNoZWNrbmluZ3NpbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NAorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkFudsOkbmQgc2FtbWEgdXRkYXRhbMOkZ2Ugc29tIGdpdC1hbm5vdGF0ZSAoU3RhbmRhcmQ6IGF2KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NQorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVmlzYSByw6UgdGlkc3N0w6RtcGVsIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU2Cittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJWaXNhIGzDpW5nIGluY2hlY2tuaW5ncy1TSEExIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVW5kZXJ0cnljayBmw7ZyZmF0dGFybmFtbiBvY2ggdGlkc3N0w6RtcGVsIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU4Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJWaXNhIGbDtnJmYXR0YXJlbnMgZS1wb3N0IGlzdMOkbGxldCBmw7ZyIG5hbW4gKFN0YW5kYXJkOiBhdikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTkKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiSWdub3JlcmEgw6RuZHJpbmdhciBpIGJsYW5rc3RlZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MCBidWlsdGluL2xvZy5jOjE3MDIKK21zZ2lkICJyZXYiCittc2dzdHIgInJldiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MAorbXNnaWQgIklnbm9yZSA8cmV2PiB3aGVuIGJsYW1pbmciCittc2dzdHIgImlnbm9yZXJhIDxyZXY+IHZpZCBrbGFuZHJlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgImlnbm9yZXJhIHJldmlzaW9uZXIgZnLDpW4gPGZpbD4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjIKK21zZ2lkICJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IgorbXNnc3RyICJmw6RyZ2zDpGdnIHJlZHVuZGFudCBtZXRhZGF0YSBmcsOlbiB0aWRpZ2FyZSByYWRlciBhbm5vcmx1bmRhIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYzCittc2dpZCAiY29sb3IgbGluZXMgYnkgYWdlIgorbXNnc3RyICJmw6RyZ2zDpGdnIHJhZGVyIGVmdGVyIMOlbGRlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiU2zDtnNhIGV4dHJhIGN5a2xlciBtZWQgYXR0IGhpdHRhIGLDpHR0cmUgdHLDpGZmIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY1Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICJBbnbDpG5kIHJldmlzaW9uZXIgZnLDpW4gPGZpbD4gaXN0w6RsbGV0IGbDtnIgYXR0IGFucm9wYSBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjYKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICJBbnbDpG5kIDxmaWw+cyBpbm5laMOlbGwgc29tIHNsdXRnaWx0aWcgYmlsZCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NyBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAic2NvcmUiCittc2dzdHIgInBvw6RuZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NworbXNnaWQgIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIkhpdHRhIGtvcGllcmFkZSByYWRlciBpbnV0aSBvY2ggbWVsbGFuIGZpbGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY4Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiSGl0dGEgZmx5dHRhZGUgcmFkZXIgaW51dGkgb2NoIG1lbGxhbiBmaWxlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIkJlaGFuZGxhIGVuZGFzdCByYWRpbnRlcnZhbGxldCBuLG0sIG1lZCBiw7ZyamFuIHDDpSAxIgorCisjOiBidWlsdGluL2JsYW1lLmM6OTIxCittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiLS1wcm9ncmVzcyBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0taW5jcmVtZW50YWwgZWxsZXIgcG9yc2xpbnNmb3JtYXQiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTcyCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiNCDDpXIsIDExIG3DpW5hZGVyIHNlZGFuIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAiZmlsZW4gJXMgaGFyIGJhcmEgJWx1IHJhZCIKK21zZ3N0clsxXSAiZmlsZW4gJXMgaGFyIGJhcmEgJWx1IHJhZGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIktsYW5kcmEgcmFkZXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjkKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxmbGFnZ29yPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8ZmxhZ2dvcj5dIFstbF0gWy1mXSA8Z3Jlbm5hbW4+IFs8c3RhcnRwdW5rdD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8ZmxhZ2dvcj5dIFstcl0gKC1kIHwgLUQpIDxncmVubmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxmbGFnZ29yPl0gKC1tIHwgLU0pIFs8Z2FtbWFsX2dyZW4+XSA8bnlfZ3Jlbj4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzMKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtYyB8IC1DKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxmbGFnZ29yPl0gKC1jIHwgLUMpIFs8Z2FtbWFsX2dyZW4+XSA8bnlfZ3Jlbj4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8ZmxhZ2dvcj5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGZsYWdnb3I+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisidGFyIGJvcnQgZ3JlbmVuIFwiJXNcIiBzb20gaGFyIHNsYWdpdHMgaWhvcCBtZWRcbiIKKyIgICAgICAgICBcIiVzXCIsIG1lbiDDpG5udSBpbnRlIHNsYWdpdHMgaWhvcCBtZWQgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorInRhciBpbnRlIGJvcnQgZ3JlbmVuIFwiJXNcIiBzb20gaW50ZSBoYXIgc2xhZ2l0cyBpaG9wIG1lZFxuIgorIiAgICAgICAgIFwiJXNcIiwgdHJvdHMgYXR0IGRlbiBoYXIgc2xhZ2l0cyBpaG9wIG1lZCBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIGluY2hlY2tuaW5nc29iamVrdCBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiR3JlbmVuIFwiJXNcIiBoYXIgaW50ZSBzbGFnaXRzIHNhbW1hbiBpIHNpbiBoZWxoZXQuXG4iCisiT20gZHUgw6RyIHPDpGtlciBww6UgYXR0IGR1IHZpbGwgdGEgYm9ydCBkZW4sIGvDtnIgXCJnaXQgYnJhbmNoIC1EICVzXCIuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIk1pc3NseWNrYWRlcyB1cHBkYXRlcmEga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJrYW4gaW50ZSBhbmdlIC1hIG1lZCAtZCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSB1cHAgaW5jaGVja25pbmdzb2JqZWt0IGbDtnIgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IGdyZW5lbiBcIiVzXCIgc29tIMOkciB1dGNoZWNrYWQgcMOlIFwiJXNcIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImZqw6RycnNww6VyYW5kZSBncmVuZW4gXCIlc1wiIGhpdHRhZGVzIGludGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJncmVuZW4gXCIlc1wiIGhpdHRhZGVzIGludGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkZlbCB2aWQgYm9ydHRhZ25pbmcgYXYgZmrDpHJyc3DDpXJhbmRlIGdyZW5lbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJGZWwgdmlkIGJvcnR0YWduaW5nIGF2IGdyZW5lbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiVG9nIGJvcnQgZmrDpHJyc3DDpXJhbmRlIGdyZW5lbiAlcyAodmFyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIlRvZyBib3J0IGdyZW5lbiAlcyAodmFyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICJrYW4gaW50ZSB0b2xrYSBmb3JtYXRzdHLDpG5nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImt1bmRlIGludGUgc2zDpSB1cHAgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAoJXMpIHBvaW50cyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvIgorbXNnc3RyICJIRUFEICglcykgcGVrYXIgdXRlbmbDtnIgcmVmcy9oZWFkcy8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICJHcmVuZW4gJXMgb21iYXNlcmFzIHDDpSAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICJHcmVuZW4gJXMgw6RyIGkgZW4gXCJiaXNlY3RcIiBww6UgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICJrdW5kZSBpbnRlIGtvcGllcmEgYWt0dWVsbCBncmVuIG7DpHIgZHUgaW50ZSBiZWZpbm5lciBkaWcgcMOlIG7DpWdvbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKyJrdW5kZSBpbnRlIGJ5dGEgbmFtbiBww6UgYWt0dWVsbCBncmVuIG7DpHIgZHUgaW50ZSBiZWZpbm5lciBkaWcgcMOlIG7DpWdvbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIkZlbGFrdGlndCBuYW1uIHDDpSBncmVuOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIk1pc3NseWNrYWRlcyBieXRhIG5hbW4gcMOlIGdyZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ0Cittc2dpZCAiQnJhbmNoIGNvcHkgZmFpbGVkIgorbXNnc3RyICJNaXNzbHlja2FkZXMga29waWVyYSBncmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICJTa2FwYWRlIGtvcGlhIGF2IGZlbGFrdGlndCBuYW1uZ2l2ZW4gZ3JlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJCeXR0ZSBib3J0IG5hbW4gcMOlIGVuIGZlbGFrdGlndCBuYW1uZ2l2ZW4gZ3JlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIkdyZW5lbiBuYW1uYnl0dCB0aWxsICVzLCBtZW4gSEVBRCBoYXIgaW50ZSB1cHBkYXRlcmF0cyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJHcmVuZW4gbmFtbmJ5dHQsIG1lbiBtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGtvbmZpZ3VyYXRpb25zZmlsZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkdyZW5lbiBrb3BpZXJhZGVzLCBtZW4gbWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBrb25maWd1cmF0aW9uc2ZpbGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisiUmVkaWdlcmEgYmVza3Jpdm5pbmdlbiBmw7ZyIGdyZW5lblxuIgorIiAgJXNcbiIKKyJSYWRlciBzb20gaW5sZWRzIG1lZCBcIiVjXCIgaWdub3JlcmFzLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiQWxsbcOkbm5hIGZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgInZpc2EgaGFzaCBvY2ggw6RyZW5kZXJhZCwgYW5nZSB0dsOlIGfDpW5nZXIgZsO2ciB1cHBzdHLDtm1zZ3JlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjEKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICJ1bmRlcnRyeWNrIGluZm9ybWF0aW9uc21lZGRlbGFuZGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJzdMOkbGwgaW4gc3DDpXJuaW5nc2zDpGdlIChzZSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAiYW52w6RuZCBlaiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MDUKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAidXBwc3Ryw7ZtcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIsOkbmRyYSB1cHBzdHLDtm1zaW5mb3JtYXRpb25lbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjcKK21zZ2lkICJ1bnNldCB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAidGEgYm9ydCB1cHBzdHLDtm1zaW5mb3JtYXRpb25lbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjgKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgImFudsOkbmQgZsOkcmdhZCB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiYXJiZXRhIHDDpSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInZpc2EgZW5kYXN0IGdyZW5hciBzb20gaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCBncmVuYXIgc29tIGludGUgaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJTcGVjaWZpa2EgZ2l0LWJyYW5jaC3DpXRnw6RyZGVyOiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAidmlzYSBiw6VkZSBmasOkcnJzcMOlcmFuZGUgb2NoIGxva2FsYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgInRhIGJvcnQgaGVsdCBzYW1tYW5zbGFnZW4gZ3JlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDEKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICJ0YSBib3J0IGdyZW4gKMOkdmVuIG9tIGludGUgaGVsdCBzYW1tYW5zbGFnZW4pIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJmbHl0dGEvdGEgYm9ydCBlbiBncmVuIG9jaCBkZXNzIHJlZmxvZ2ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiZmx5dHRhL3RhIGJvcnQgZW4gZ3Jlbiwgw6R2ZW4gb20gbcOlbGV0IGZpbm5zIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImtvcGllcmEgZW4gZ3JlbiBvY2ggZGVzcyByZWZsb2dnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NQorbXNnaWQgImNvcHkgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAia29waWVyYSBlbiBncmVuLCDDpHZlbiBvbSBtw6VsZXQgZmlubnMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgImxpc3RhIG5hbW4gcMOlIGdyZW5hciIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgInZpc2EgbmFtbiBww6UgYWt0dWVsbCBncmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OAorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJza2FwYSBncmVuZW5zIHJlZmxvZ2ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgInJlZGlnZXJhIGJlc2tyaXZuaW5nIGbDtnIgZ3JlbmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgInR2aW5nYSBza2FwYW5kZSwgZmx5dHQvbmFtbsOkbmRyaW5nLCBib3J0dGFnYW5kZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAidmlzYSBlbmRhc3Qgc2FtbWFuc2xhZ25hIGdyZW5hciIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgInZpc2EgZW5kYXN0IGVqIHNhbW1hbnNsYWduYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJ2aXNhIGdyZW5hciBpIHNwYWx0ZXIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICJvYmpla3QiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCBncmVuYXIgZsO2ciBvYmpla3RldCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjAgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQ0MAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAic29ydGVyaW5nIG9jaCBmaWx0cmVyaW5nIHNraWxqZXIgZ2VtZW5lciBvY2ggVkVSU0FMRVIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiZm9ybWF0IGF0dCBhbnbDpG5kYSBmw7ZyIHV0ZGF0YSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2ODQgYnVpbHRpbi9jbG9uZS5jOjc4NAorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEIGhpdHRhZGVzIGludGUgdW5kZXIgcmVmcy9oZWFkcyEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA4Cittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBvY2ggLS12ZXJib3NlIMOkciBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzIzIGJ1aWx0aW4vYnJhbmNoLmM6Nzc3IGJ1aWx0aW4vYnJhbmNoLmM6Nzg2Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgImdyZW5uYW1uIGtyw6R2cyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJLYW4gaW50ZSBiZXNrcml2YSBmcsOlbmtvcHBsYWQgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTgKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAia2FuIGludGUgcmVkaWdlcmEgYmVza3Jpdm5pbmcgZsO2ciBtZXIgw6RuIGVuIGdyZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICJJbmdhIGluY2hlY2tuaW5nYXIgcMOlIGdyZW5lbiBcIiVzXCIgw6RubnUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIkluZ2VuIGdyZW4gdmlkIG5hbW5ldCBcIiVzXCIuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIGNvcHkgb3BlcmF0aW9uIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBncmVuYXIgZsO2ciBrb3BpZXJpbmciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgImbDtnIgbcOlbmdhIGZsYWdnb3IgZsO2ciBuYW1uYnl0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTcKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZmxhZ2dvciBmw7ZyIGF0dCBieXRhIHVwcHN0csO2bSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSBzw6R0dGEgdXBwc3Ryw7ZtIGbDtnIgSEVBRCB0aWxsICVzIG7DpHIgZGV0IGludGUgcGVrYXIgbW90IG7DpWdvbiBncmVuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAib2vDpG5kIGdyZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZ3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZmxhZ2dvciBmw7ZyIGF0dCB0YSBib3J0IHVwcHN0csO2bSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSB0YSBib3J0IHVwcHN0csO2bSBmw7ZyIEhFQUQgbsOkciBkZXQgaW50ZSBwZWthciBtb3QgbsOlZ29uIGdyZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIkdyZW5lbiBcIiVzXCIgaGFyIGluZ2VuIHVwcHN0csO2bXNpbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICIiCisiVGhlIC1hLCBhbmQgLXIsIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCB0YWtlIGEgYnJhbmNoIG5hbWUuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHVzZTogLWF8LXIgLS1saXN0IDxwYXR0ZXJuPj8iCittc2dzdHIgIiIKKyJGbGFnZ29ybmEgLWEgb2NoIC1yIHDDpSBcImdpdCBicmFuY2hcIiB0YXIgaW50ZSBldHQgbmFtbiBww6UgZ3Jlbi5cbiIKKyJNZW5hZGUgZHUgYXR0IGFudsOkbmRhOiAtYXwtciAtLWxpc3QgPG3Dtm5zdGVyPj8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAiIgorInRoZSAnLS1zZXQtdXBzdHJlYW0nIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlICctLXRyYWNrJyBvciAiCisiJy0tc2V0LXVwc3RyZWFtLXRvJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIkZsYWdnYW4gLS1zZXQtdXBzdHJlYW0gcmVrb21tZW5kZXJhcyBlaiBvY2gga29tbWVyIHRhcyBib3J0LiBBbnbDpG5kIC0tdHJhY2sgIgorImVsbGVyIC0tc2V0LXVwc3RyZWFtLXRvIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworbXNnaWQgImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IgorbXNnc3RyICJnaXQgYnVuZGxlIGNyZWF0ZSBbPGZsYWdnb3I+XSA8ZmlsPiA8Z2l0LXJldi1saXN0LWZsYWdnb3I+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE2IGJ1aWx0aW4vYnVuZGxlLmM6MjgKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBidW5kbGUgdmVyaWZ5IFs8ZmxhZ2dvcj5dIDxmaWw+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE3IGJ1aWx0aW4vYnVuZGxlLmM6MzMKK21zZ2lkICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbD4gWzxyZWZuYW1uPi4uLl0iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTggYnVpbHRpbi9idW5kbGUuYzozOAorbXNnaWQgImdpdCBidW5kbGUgdW5idW5kbGUgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWw+IFs8cmVmbmFtbj4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIyOAorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJ2aXNhIGludGUgZsO2cmxvcHBzaW5kaWthdG9yIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgInZpc2EgZsO2cmxvcHBzaW5kaWthdG9yIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICJ2aXNhIGbDtnJsb3Bwc2luZGlrYXRvciB1bmRlciBvYmpla3Rza3Jpdm5pbmdzZmFzZW4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM1Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJzb20gLS1hbGwtcHJvZ3Jlc3MgbsOkciBmw7ZybG9wcHNpbmRpa2F0b3JuIHZpc2FzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjkzCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiQmVow7Z2ZXIgZXR0IGFya2l2IGbDtnIgYXR0IHNrYXBhIGV0dCBwYWtldCAoYnVuZGxlKS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgInZpc2EgaW50ZSBwYWtldGRldGFsamVyIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIMOkciBva2VqXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJCZWjDtnZlciBldHQgYXJraXYgZsO2ciBhdHQgcGFja2EgdXBwIGV0dCBwYWtldCAoYnVuZGxlKS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTYwOQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgInZhciBwcmF0c2FtOyBtw6VzdGUgc2tyaXZhcyBmw7ZyZSBldHQgdW5kZXJrb21tYW5kbyIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIk9rw6RudCB1bmRlcmtvbW1hbmRvOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwZT4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTxwYXRoPl0gPG9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLWUgfCAtIgorInAgfCA8dHlwPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHPDtmt2w6RnPl0gPG9iamVrdD4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgImVuZGFzdCBlbiBidW50ZmxhZ2dhIGthbiBhbmdlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPHR5cD4ga2FuIHZhcmEgZW4gYXY6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM2Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAidmlzYSBvYmpla3R0eXAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzcKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJ2aXNhIG9iamVrdHN0b3JsZWsiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgImF2c2x1dGEgbWVkIG5vbGwgbsOkciBkZXQgaW50ZSB1cHBzdMOldHQgbsOlZ290IGZlbCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJ2aXNhIG9iamVrdGV0cyBpbm5laMOlbGwgc255Z2d0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImbDtnIgYmxvYi1vYmpla3QsIGvDtnIgZmlsdGVyIHDDpSBvYmpla3RldHMgaW5uZWjDpWxsIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZsO2ciBibG9iLW9iamVrdCwga8O2ciBmaWxnZXIgcMOlIG9iamVrdGV0cyBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDo5OTIKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ2Cittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgImFudsOkbmQgc3BlY2lmaWsgc8O2a3bDpGcgZsO2ciAtLXRleHRjb252Ly0tZmlsdGVycyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OAorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAibMOldGVyIC1zIG9jaCAtdCBhdHQgZnVuZ2VyYSBtZWQgdHJhc2lnYS9zw7ZuZGVyc2tyaXZuYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgImJ1ZmZyYSB1dGRhdGEgZnLDpW4gLS1iYXRjaCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1MQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAidmlzYSBpbmZvcm1hdGlvbiBvY2ggaW5uZWjDpWxsIGbDtnIgb2JqZWt0IHNvbSBsaXN0YXMgcMOlIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJ2aXNhIGluZm9ybWF0aW9uIGbDtnIgb2JqZWt0IHNvbSBsaXN0YXMgcMOlIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisiZsO2bGogc3ltYm9saXNrYSBsw6Rua2FyIGkgdHLDpGRldCAoYW52w6RuZCBtZWQgLS1iYXRjaCBlbGxlciAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgInZpc2EgYWxsYSBvYmpla3QgbWVkIC0tYmF0Y2ggZWxsZXIgLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MworbXNnaWQgImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIKK21zZ3N0ciAib3JkbmEgaW50ZSAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTMKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8c8O2a3bDpGc+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxNAorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxCittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICJ2aXNhIGFsbGEgYXR0cmlidXQgc29tIHNhdHRzIHDDpSBmaWxlbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjIKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiYW52w6RuZCAuZ2l0YXR0cmlidXRlcyBlbmRhc3QgZnLDpW4gaW5kZXhldCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNSBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAyCittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgZmlsbmFtbiBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjUgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNworbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJhdnNsdXRhIGluLSBvY2ggdXRkYXRhcG9zdGVyIG1lZCBOVUwtdGVja2VuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM1IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDYKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgInVuZGVydHJ5Y2sgZsO2cmxvcHBzcmFwcG9ydGVyaW5nIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI5Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgInZpc2EgaW5kYXRhc8O2a3bDpGdhciBzb20gaW50ZSB0csOkZmZhcyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzozMQorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICJpZ25vcmVyYSBpbmRleCB2aWQga29udHJvbGwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYwCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAia2FuIGludGUgYW5nZSBzw7ZrdsOkZ3NuYW1uIG1lZCAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiBrYW4gZW5kYXN0IGFudsOkbmRhcyB0aWxsc2FtbWFucyBtZWQgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjUKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAiaW5nZW4gc8O2a3bDpGcgYW5nYXZzIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OQorbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IGthbiBlbmRhc3QgYW52w6RuZGFzIG1lZCBldHQgZW5rZWx0IHPDtmt2w6Rnc25hbW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcxCittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhIGLDpWRlIC0tcXVpZXQgb2NoIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzQKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyDDpHIgZW5kYXN0IGdpbHRpZyBtZWQgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo5Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPGZsYWdnb3I+XSA8a29udGFrdD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgw6R2ZW4ga29udGFrdGVyIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2Ega29udGFrdDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ4Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICJpbmdhIGtvbnRha3RlciBhbmdhdnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMzEKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8ZmxhZ2dvcj5dIFstLV0gWzxmaWw+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE0OAorbXNnaWQgInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIgorbXNnc3RyICJldGFwcCBtw6VzdGUgdmFyYSBtZWxsYW4gMSBvY2ggMyBlbGxlciBcImFsbFwiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgImNoZWNrYSB1dCBhbGxhIGZpbGVyIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAidHZpbmdhIMO2dmVyc2tyaXZuaW5nIGF2IGJlZmludGxpZ2EgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICJpbmdlbiB2YXJuaW5nIGbDtnIgZXhpc3RlcmFuZGUgZmlsZXIgb2NoIGZpbGVyIGVqIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAiY2hlY2thIGludGUgdXQgbnlhIGZpbGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgInVwcGRhdGVyYSBzdGF0LWluZm9ybWF0aW9uIGkgaW5kZXhmaWxlbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibMOkcyBsaXN0YW4gw7Z2ZXIgc8O2a3bDpGdhciBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAic2tyaXYgaW5uZWjDpWxsIHRpbGwgdGVtcG9yw6RyYSBmaWxlciIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OCBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzkKK21zZ2lkICJzdHJpbmciCittc2dzdHIgInN0csOkbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICJuw6RyIGZpbGVyIHNrYXBhcywgbMOkZ2cgdGlsbCA8c3Ryw6RuZz4gZsO2cnN0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgImtvcGllcmEgdXQgZmlsZXIgZnLDpW4gbmFtbmdpdmVuIGV0YXBwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPGZsYWdnb3I+XSA8Z3Jlbj4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8ZmxhZ2dvcj5dIFs8Z3Jlbj5dIC0tIDxmaWw+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzcKK21zZ2lkICJnaXQgc3dpdGNoIFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0iCittc2dzdHIgImdpdCBzd2l0Y2ggWzxmbGFnZ29yPl0gWzxncmVuPl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MgorbXNnaWQgImdpdCByZXN0b3JlIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08YnJhbmNoPl0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcmVzdG9yZSBbPGZsYWdnb3I+XSBbLS1zb3VyY2U9PGdyZW4+XSA8ZmlsPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NSBidWlsdGluL2NoZWNrb3V0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBoYXIgaW50ZSB2w6VyIHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBoYXIgaW50ZSBkZXJhcyB2ZXJzaW9uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgInPDtmt2w6RnZW4gXCIlc1wiIGlubmVow6VsbGVyIGludGUgYWxsYSBuw7ZkdsOkbmRpZ2EgdmVyc2lvbmVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaW5uZWjDpWxsZXIgaW50ZSBuw7ZkdsOkbmRpZ2EgdmVyc2lvbmVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICJzw7ZrdsOkZyBcIiVzXCI6IGthbiBpbnRlIHNsw6UgaWhvcCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCBzYW1tYW5zbGFnbmluZ3NyZXN1bHRhdCBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gIsOFdGVyc2thcGFkZSAlZCBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdCIKK21zZ3N0clsxXSAiw4V0ZXJza2FwYWRlICVkIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAiVXBwZGF0ZXJhZGUgJWQgc8O2a3bDpGcgZnLDpW4gJXMiCittc2dzdHJbMV0gIlVwcGRhdGVyYWRlICVkIHPDtmt2w6RnYXIgZnLDpW4gJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICJVcHBkYXRlcmFkZSAlZCBzw7ZrdsOkZyBmcsOlbiBpbmRleGV0IgorbXNnc3RyWzFdICJVcHBkYXRlcmFkZSAlZCBzw7ZrdsOkZ2FyIGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTIgYnVpbHRpbi9jaGVja291dC5jOjQxNSBidWlsdGluL2NoZWNrb3V0LmM6NDE4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyB2aWQgdXBwZGF0ZXJpbmcgYXYgc8O2a3bDpGdhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICJLYW4gaW50ZSB1cHBkYXRlcmEgc8O2a3bDpGdhciBvY2ggdsOkeGxhIHRpbGwgZ3JlbmVuIFwiJXNcIiBzYW10aWRpZ3QuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIKK21zZ3N0ciAidmFya2VuIFwiJXNcIiBlbGxlciBcIiVzXCIgaGFyIGFuZ2l2aXRzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSB1c2VkIHdoZW4gJyVzJyBpcyBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICJcIiVzXCIgbcOlc3RlIGFudsOkbmRhcyBuw6RyIFwiJXNcIiBpbnRlIGFuZ2VzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIlwiJXNcIiBlbGxlciBcIiVzXCIga2FuIGludGUgYW52w6RuZGFzIG1lZCAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjUwOSBidWlsdGluL2NoZWNrb3V0LmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaGFyIGludGUgc2xhZ2l0cyBpaG9wIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgyIGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6ODIKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiZHUgbcOlc3RlIGzDtnNhIGRpdHQgYmVmaW50bGlnYSBpbmRleCBmw7Zyc3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJrYW4gaW50ZSBmb3J0c8OkdHRhIG1lZCBrw7ZhZGUgw6RuZHJpbmdhciBpIGbDtmxqYW5kZSBmaWxlcjpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiS2FuIGludGUgc2thcGEgcmVmZXJlbnNsb2dnIGbDtnIgXCIlc1wiOiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODc3Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQgw6RyIG51IHDDpSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4MSBidWlsdGluL2Nsb25lLmM6NzE2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJrYW4gaW50ZSB1cHBkYXRlcmEgSEVBRCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLDhXRlcnN0w6RsbCBncmVuIFwiJXNcIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJSZWRhbiBww6UgXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlbDpHhsYWRlIHRpbGwgb2NoIG5vbGxzdMOkbGxkZSBncmVuZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQgYnVpbHRpbi9jaGVja291dC5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiVsOkeGxhZGUgdGlsbCBlbiBueSBncmVuIFwiJXNcIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlbDpHhsYWRlIHRpbGwgZ3JlbmVuIFwiJXNcIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gb2NoICVkIHRpbGwuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJWYXJuaW5nOiBkdSBsw6RtbmFyICVkIGluY2hlY2tuaW5nIGJha29tIGRpZyBzb20gaW50ZSDDpHIgYW5zbHV0ZW4gdGlsbFxuIgorIm7DpWdvbiBhdiBkaW5hIGdyZW5hcjpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisiVmFybmluZzogZHUgbMOkbW5hciAlZCBpbmNoZWNrbmluZ2FyIGJha29tIGRpZyBzb20gaW50ZSDDpHIgYW5zbHV0YSB0aWxsXG4iCisibsOlZ29uIGF2IGRpbmEgZ3JlbmFyOlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisiT20gZHUgdmlsbCBiZWjDpWxsYSBkZW4gZ2Vub20gYXR0IHNrYXBhIGVuIG55IGdyZW4gw6RyIG51IGVuIGJyYSB0aWRwdW5rdFxuIgorImF0dCBnw7ZyYSBzw6UsIG1lZDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bnl0dF9ncmVubmFtbj4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIk9tIGR1IHZpbGwgYmVow6VsbGEgZGVtIGdlbm9tIGF0dCBza2FwYSBlbiBueSBncmVuIMOkciBudSBlbiBicmEgdGlkcHVua3RcbiIKKyJhdHQgZ8O2cmEgc8OlLCBtZWQ6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG55dHRfZ3Jlbm5hbW4+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiaW50ZXJudCBmZWwgdmlkIGdlbm9tZ8OlbmcgYXYgcmV2aXNpb25lciAocmV2aXNpb24gd2FsaykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDExCittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIlRpZGlnYXJlIHBvc2l0aW9uIGbDtnIgSEVBRCB2YXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg2Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiRHUgw6RyIHDDpSBlbiBncmVuIHNvbSDDpG5udSBpbnRlIMOkciBmw7ZkZCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNzgKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgImVuZGFzdCBlbiByZWZlcmVucyBmw7ZydsOkbnRhZGVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAiZW5kYXN0IGVuIHJlZmVyZW5zIGbDtnJ2w6RudGFkZXMsICVkIGdhdnMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb3VsZCBiZSBib3RoIGEgbG9jYWwgZmlsZSBhbmQgYSB0cmFja2luZyBicmFuY2guXG4iCisiUGxlYXNlIHVzZSAtLSAoYW5kIG9wdGlvbmFsbHkgLS1uby1ndWVzcykgdG8gZGlzYW1iaWd1YXRlIgorbXNnc3RyICIiCisiXCIlc1wiIGthbiB2YXJhIGLDpWRlIGVuIGxva2FsIGZpbCBvY2ggZW4gc3DDpXJhbmRlIGdyZW4uXG4iCisiQW52w6RuZCAtLSAob2NoIG3DtmpsaWdlbiAtLW5vLWd1ZXNzKSBmw7ZyIGF0dCBnw7ZyYSBvdHZldHlkaWciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjQ1IGJ1aWx0aW4vd29ya3RyZWUuYzoyOTAgYnVpbHRpbi93b3JrdHJlZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgImZlbGFrdGlnIHJlZmVyZW5zOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTggYnVpbHRpbi9jaGVja291dC5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJyZWZlcmVuc2VuIMOkciBpbnRlIGV0dCB0csOkZDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgdGFnICclcyciCittc2dzdHIgImbDtnJ2w6RudGFkZSBncmVuLCBmaWNrIHRhZ2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgcmVtb3RlIGJyYW5jaCAnJXMnIgorbXNnc3RyICJmw7ZydsOkbnRhZGUgZ3JlbiwgZmljayBmasOkcnJncmVuZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwOCBidWlsdGluL2NoZWNrb3V0LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciCittc2dzdHIgImbDtnJ2w6RudGFkZSBncmVuLCBmaWNrIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAiZsO2cnbDpG50YWRlIGdyZW4sIGZpY2sgaW5jaGVja25pbmdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzI3Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJrYW4gaW50ZSB2w6R4bGEgZ3JlbiB2aWQgc2FtbWFuc2xhZ25pbmdcbiIKKyLDlnZlcnbDpGcgXCJnaXQgbWVyZ2UgLS1xdWl0XCIgZWxsZXIgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzMQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJrYW4gaW50ZSB2w6R4bGEgZ3JlbiBtaXR0IGkgZW4gXCJhbVwiLWvDtnJuaW5nXG4iCisiw5Z2ZXJ2w6RnIFwiZ2l0IGFtIC0tcXVpdFwiIGVsbGVyIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzUKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisia2FuIGludGUgdsOkeGxhIGdyZW4gdmlkIG9tYmFzZXJpbmdcbiIKKyLDlnZlcnbDpGcgXCJnaXQgcmViYXNlIC0tcXVpdFwiIGVsbGVyIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzkKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJDb25zaWRlciBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJrYW4gaW50ZSB2w6R4bGEgZ3JlbiBpIGVuIFwiY2hlcnJ5LXBpY2tcIlxuIgorIsOWdmVydsOkZyBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBlbGxlciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQzCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyJrYW4gaW50ZSB2w6R4bGEgZ3JlbiBpIGVuIFwicmV2ZXJ0XCJcbiIKKyLDlnZlcnbDpGcgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIGVsbGVyIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDcKK21zZ2lkICJ5b3UgYXJlIHN3aXRjaGluZyBicmFuY2ggd2hpbGUgYmlzZWN0aW5nIgorbXNnc3RyICJkw6UgdsOkeGxhciBncmVuYXIgbWVkYW4gZHUgZ8O2ciBlbiBcImJpc2VjdFwiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJzw7ZrdsOkZ2FyIGthbiBpbnRlIGFudsOkbmRhcyB2aWQgYnl0ZSBhdiBncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NyBidWlsdGluL2NoZWNrb3V0LmM6MTM2MSBidWlsdGluL2NoZWNrb3V0LmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJcIiVzXCIga2FuIGludGUgYW52w6RuZGFzIHZpZCBieXRlIGF2IGdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY5IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzcyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzc1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MCBidWlsdGluL2NoZWNrb3V0LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgXCIlc1wiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSB0YSA8c3RhcnRwdW5rdD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJLYW4gaW50ZSB2w6R4bGEgZ3JlbiB0aWxsIGlja2UtaW5jaGVja25pbmdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzk3Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICJzYWtuYXIgZ3Jlbi0gZWxsZXIgaW5jaGVja2luZ3Nhcmd1bWVudCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MzkgYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTIKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEzIGJ1aWx0aW4vZmV0Y2guYzoxNjcgYnVpbHRpbi9tZXJnZS5jOjI4NQorIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjcgYnVpbHRpbi9wdWxsLmM6MTM4IGJ1aWx0aW4vcHVzaC5jOjU2MworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzQKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgInR2aW5nYSBmw7ZybG9wcHNyYXBwb3J0ZXJpbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQwCittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgInV0ZsO2ciBlbiAzLXbDpGdzc2FtbWFuc2xhZ25pbmcgZsO2ciBkZW4gbnlhIGdyZW5lbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDEgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAic3RpbCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDIKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICJrb25mbGlrdHN0aWwgKG1lcmdlIGVsbGVyIGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTQgYnVpbHRpbi93b3JrdHJlZS5jOjUwMworbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAia29wcGxhIGZyw6VuIEhFQUQgdmlkIG5hbW5naXZlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTUKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAic8OkdHQgdXBwc3Ryw7Ztc2luZm9ybWF0aW9uIGbDtnIgbnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAidHZpbmdhIHV0Y2hlY2tuaW5nIChrYXN0YSBib3J0IGxva2FsYSDDpG5kcmluZ2FyKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJueS1ncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1OQorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAibnkgZ3JlbiB1dGFuIGbDtnLDpGxkZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYxIGJ1aWx0aW4vbWVyZ2UuYzoyODgKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgInVwcGRhdGVyYSBpZ25vcmVyYWRlIGZpbGVyIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDY0Cittc2dpZCAiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIgorbXNnc3RyICIiCisia29udHJvbGxlcmEgaW50ZSBvbSBlbiBhbm5hbiBhcmJldHNrYXRhbG9nIGjDpWxsZXIgZGVuIGFuZ2l2bmEgcmVmZXJlbnNlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzcKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImNoZWNrYSB1dCB2w6VyIHZlcnNpb24gZsO2ciBlaiBzYW1tYW5zbGFnbmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgwCittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgImNoZWNrYSB1dCBkZXJhcyB2ZXJzaW9uIGbDtnIgZWogc2FtbWFuc2xhZ25hIGZpbGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAiYmVncsOkbnNhIGludGUgc8O2a3bDpGdhciB0aWxsIGVuZGFzdCBnbGVzYSBwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTM3Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgb2NoIC0tb3JwaGFuIMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NDAKK21zZ2lkICItcCBhbmQgLS1vdmVybGF5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1wIG9jaCAtLW92ZXJsYXkgw6RyIMO2bXNlc2lkaWd0IHV0ZXNsdXRhbmRlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU3NworbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBiZWjDtnZlciBldHQgbmFtbiBww6UgZW4gZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1ODIKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgImdyZW5uYW1uIHNha25hczsgZsO2cnPDtmsgbWVkIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB1cHBsw7ZzYSAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MzEKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiZmVsYWt0aWcgc8O2a3bDpGdzYW5naXZlbHNlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCBhbmQgYSBicmFuY2ggJyVzJyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGl0IgorbXNnc3RyICIiCisiXCIlc1wiIMOkciBpbnRlIGVuIGluY2hlY2tuaW5nIG9jaCBncmVuZW4gXCIlc1wiIGthbiBpbnRlIHNrYXBhcyBmcsOlbiBkZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCB0YXIgaW50ZSBlbiBzw7ZrdsOkZyBzb20gYXJndW1lbnQgXCIlc1wiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1MQorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDDpHIgaW5rb21wYXRpYmVsdCBtZWQgLS1kZXRhY2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU0IGJ1aWx0aW4vcmVzZXQuYzozMjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDDpHIgaW5rb21wYXRpYmVsdCBtZWQgLS1wYXRjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NjUKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBvY2ggLS1tZXJnZSDDpHIgaW5rb21wYXRpYmxhIG7DpHJcbiIKKyJkdSBjaGVja2FyIHV0IGZyw6VuIGluZGV4ZXQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY3MAorbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICJkdSBtw6VzdGUgYW5nZSBrYXRhbG9nKGVyKSBhdHQgw6V0ZXJzdMOkbGxhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJXZSBmb3VuZCAlZCByZW1vdGVzIHdpdGggYSByZWZlcmVuY2UgdGhhdCBtYXRjaGVkLiBTbyB3ZSBmZWxsIGJhY2tcbiIKKyJvbiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgYXJndW1lbnQgYXMgYSBwYXRoLCBidXQgZmFpbGVkIHRoZXJlIHRvbyFcbiIKKyJcbiIKKyJJZiB5b3UgbWVhbnQgdG8gY2hlY2sgb3V0IGEgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBvbiwgZS5nLiAnb3JpZ2luJyxcbiIKKyJ5b3UgY2FuIGRvIHNvIGJ5IGZ1bGx5IHF1YWxpZnlpbmcgdGhlIG5hbWUgd2l0aCB0aGUgLS10cmFjayBvcHRpb246XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyJJZiB5b3UnZCBsaWtlIHRvIGFsd2F5cyBoYXZlIGNoZWNrb3V0cyBvZiBhbiBhbWJpZ3VvdXMgPG5hbWU+IHByZWZlclxuIgorIm9uZSByZW1vdGUsIGUuZy4gdGhlICdvcmlnaW4nIHJlbW90ZSwgY29uc2lkZXIgc2V0dGluZ1xuIgorImNoZWNrb3V0LmRlZmF1bHRSZW1vdGU9b3JpZ2luIGluIHlvdXIgY29uZmlnLiIKK21zZ3N0ciAiIgorIlwiJXNcIiBtb3RzdmFyYXIgbWVyIMOkbiBlbiBzcMOlcmFkIGZqw6RycmdyZW4uXG4iCisiVmkgaGl0dGFkZSAlZCBmasOkcnJhciBtZWQgZW4gbW90c3ZhcmFuZGUgcmVmZXJlbnMuIFPDpSB2aSBmw7Zyw7Zzw7ZrdGVcbiIKKyJpc3TDpGxsZXQgdG9sa2EgYXJndW1lbnRldCBzb20gZW4gc8O2a3bDpGcsIG1lbiBtaXNzbHlja2FkZXMgb2Nrc8OlIGTDpHIhXG4iCisiXG4iCisiT20gZHUgbWVuYWRlIGNoZWNrYSB1dCBlbiBzcMOlcmFkIGZqw6RycmdyZW4gcMOlIHQuZXggXCJvcmlnaW5cIiwga2FuIGR1XG4iCisiZ8O2cmEgZGV0IGdlbm9tIGF0dCBhbmdlIGhlbGEgbmFtbmV0IG1lZCBmbGFnZ2FuIC0tdHJhY2s6XG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtbj5cbiIKKyJcbiIKKyJPbSBkdSBhbGx0aWQgdmlsbCBhdHQgdXRjaGVja25pbmdhciBtZWQgdHZldHlkaWdhIDxuYW1uPiBza2FsbFxuIgorImbDtnJlZHJhIGVuIGZqw6RyciwgdC5leCBmasOkcnJlbiBcIm9yaWdpblwiIGthbiBkdSBzdMOkbGxhIGluXG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gaSBkaW4ga29uZmlndXJhdGlvbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NyBidWlsdGluL2Nsb25lLmM6MTIxIGJ1aWx0aW4vcmVtb3RlLmM6MTY5CisjOiBidWlsdGluL3JlbW90ZS5jOjE3MSBidWlsdGluL3dvcmt0cmVlLmM6NDk5IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDEKK21zZ2lkICJicmFuY2giCittc2dzdHIgImdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgInNrYXBhIG9jaCBjaGVja2EgdXQgZW4gbnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICJza2FwYS9ub2xsc3TDpGxsIG9jaCBjaGVja2EgdXQgZW4gZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJza2FwYSByZWZsb2dnIGbDtnIgbnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyAoZGVmYXVsdCkiCittc2dzdHIgImbDtnJ1dHNww6UgXCJnaXQgY2hlY2tvdXQgPGdyZW4tc2FrbmFzPlwiIChmw7ZydmFsKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MjEKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIChkZWZhdWx0KSIKK21zZ3N0ciAiYW52w6RuZCDDtnZlcmzDpGdnc2zDpGdlIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY2Cittc2dpZCAiY3JlYXRlIGFuZCBzd2l0Y2ggdG8gYSBuZXcgYnJhbmNoIgorbXNnc3RyICJza2FwYSBvY2ggdsOkeGxhIHRpbGwgZW4gbnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjgKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaCIKK21zZ3N0ciAic2thcGEvbm9sbHN0w6RsbCBvY2ggdsOkeGxhIHRpbGwgZW4gZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgImbDtnJ1dHNww6UgXCJnaXQgY2hlY2tvdXQgPGdyZW4tc2FrbmFzPlwiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3MgorbXNnaWQgInRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAia2FzdGEgYm9ydCBsb2thbGEgw6RuZHJpbmdhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDQKK21zZ2lkICJ3aGljaCB0cmVlLWlzaCB0byBjaGVja291dCBmcm9tIgorbXNnc3RyICJ2aWxrZW4gdHLDpGQtaWd0IGF0dCBjaGVja2EgdXQgZnLDpW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA2Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgIsOldGVyc3TDpGxsIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA4Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgYXJiZXRza2F0YWxvZ2VuIChmw7ZydmFsKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTAKK21zZ2lkICJpZ25vcmUgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiaWdub3JlcmEgZWogc2FtbWFuc2xhZ25hIHBvc3RlciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTEKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIgorbXNnc3RyICJhbnbDpG5kIMO2dmVybMOkZ2dzbMOkZ2UiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8bcO2bnN0ZXI+XSBbLXggfCAtWF0gWy0tXSAiCisiPHPDtmt2w6RnYXI+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiVGFyIGJvcnQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJTa3VsbGUgdGEgYm9ydCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJIb3BwYXIgw7Z2ZXIgYXJraXZldCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIlNrdWxsZSBob3BwYSDDtnZlciBhcmtpdmV0ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIHN0YXR1cyAoXCJsc3RhdFwiKSBww6UgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyJLb21tYW5kb2hqw6RscDpcbiIKKyIxICAgICAgICAgIC0gbWFya2VyYSBlbiBudW1yZXJhZCBwb3N0XG4iCisiZm9vICAgICAgICAtIG1hcmtlcmEgcG9zdCBiYXNlcmFkIHDDpSB1bmlrdCBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKHRvbXQpIG1hcmtlcmEgaW5nZW50aW5nXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgIiIKKyJLb21tYW5kb2hqw6RscDpcbiIKKyIxICAgICAgICAgIC0gbWFya2VyYSBlbiBlbnNhbSBwb3N0XG4iCisiMy01ICAgICAgICAtIG1hcmtlcmEgZXR0IGludGVydmFsbCBtZWQgcG9zdGVyXG4iCisiMi0zLDYtOSAgICAtIG1hcmtlcmEgZmxlcmEgaW50ZXJ2YWxsXG4iCisiZm9vICAgICAgICAtIG1hcmtlcmEgcG9zdCBiYXNlcmFkIHDDpSB1bmlrdCBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gYXZtYXJrZXJhIHNwZWNpZmlrYSBwb3N0ZXJcbiIKKyIqICAgICAgICAgIC0gdsOkbGogYWxsYSBwb3N0ZXJcbiIKKyIgICAgICAgICAgIC0gKHRvbXQpIGF2c2x1dGEgbWFya2VyaW5nXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAiVmFkw6UgKCVzKT9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIkFuZ2UgaWdub3JlcmluZ3Ntw7Zuc3Rlcj4+IgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICJWQVJOSU5HOiBIaXR0YXIgaW50ZSBwb3N0ZXIgc29tIG1vdHN2YXJhcjogJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICJWw6RsaiBwb3N0ZXIgYXR0IHRhIGJvcnQiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiVGEgYm9ydCAlcyBbWT1qYSAvIE49bmVqXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6Nzk1Cittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gYsO2cmphIHN0w6RkYVxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSB1dGVzbHV0IHBvc3RlciBmcsOlbiBib3J0dGFnbmluZ1xuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBtYXJrZXJhIHBvc3RlciBzb20gc2thIHRhcyBib3J0IG1lZCBzaWZmcm9yXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGJla3LDpGZ0YSB2YXJqZSBib3J0dGFnbmluZyAoc29tIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc2x1dGEgc3TDpGRhXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIGRlbm5hIHNrw6RybVxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoasOkbHAgZsO2ciBrb21tYW5kb3ZhbCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzMQorbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIlNrdWxsZSB0YSBib3J0IGbDtmxqYW5kZSBwb3N0OiIKK21zZ3N0clsxXSAiU2t1bGxlIHRhIGJvcnQgZsO2bGphbmRlIHBvc3RlcjoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiSW5nYSBmbGVyIGZpbGVyIGF0dCBzdMOkZGEsIGF2c2x1dGFyLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwOQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJza3JpdiBpbnRlIHV0IG5hbW4gcMOlIGJvcnR0YWduYSBmaWxlciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICJ0dmluZ2EiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAic3TDpGRhIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE0Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJ0YSBib3J0IGhlbGEga2F0YWxvZ2VyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDggYnVpbHRpbi9kZXNjcmliZS5jOjU1MAorIzogYnVpbHRpbi9ncmVwLmM6OTAxIGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjQgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIm3Dtm5zdGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgImzDpGdnIHRpbGwgPG3Dtm5zdGVyPiB0aWxsIGlnbm9yZXJpbmdzcmVnbGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE3Cittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAidGEgw6R2ZW4gYm9ydCBpZ25vcmVyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAidGEgZW5kYXN0IGJvcnQgaWdub3JlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzNworbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLXggb2NoIC1YIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2F0dCB0aWxsIHRydWUsIG1lbiB2YXJrZW4gLWksIC1uIGVsbGVyIC1mIGFuZ2F2czsgdsOkZ3JhciAiCisic3TDpGRhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQ0Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgaGFyIHN0YW5kYXJkdsOkcmRldCB0cnVlIG9jaCB2YXJrZW4gLWksIC1uIGVsbGVyIC1mICIKKyJhbmdhdnM7IHbDpGdyYXIgc3TDpGRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8ZmxhZ2dvcj5dIFstLV0gPGFya2l2PiBbPGthdD5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAic2thcGEgaW50ZSBuw6Vnb24gdXRjaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJza2FwYSBldHQgbmFrZXQgKFwiYmFyZVwiKSBhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgInNrYXBhIGV0dCBzcGVnZWxhcmtpdiAoaW1wbGljZXJhciBcImJhcmVcIikiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiZsO2ciBhdHQga2xvbmEgZnLDpW4gZXR0IGxva2FsdCBhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMgorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICJza2FwYSBpbnRlIGxva2FsYSBow6VyZGEgbMOkbmthciwga29waWVyYSBhbGx0aWQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAic2thcGEgc29tIGV0dCBkZWxhdCBhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICJzw7ZrdsOkZ3NhbmdpdmVsc2UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJpbml0aWVyYSB1bmRlcm1vZHVsZXIgaSBrbG9uZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBjbG9uZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgImFudGFsIHVuZGVybW9kdWxlciBzb20ga2xvbmFzIHBhcmFsbGVsbHQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJtYWxsa2F0YWxvZyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMiBidWlsdGluL2luaXQtZGIuYzo0ODcKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJrYXRhbG9nIGF0dCBhbnbDpG5kYSBtYWxsYXIgZnLDpW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQgYnVpbHRpbi9jbG9uZS5jOjExNiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODUKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAicmVmZXJlbnNhcmtpdiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODcKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICJhbnbDpG5kIC0tcmVmZXJlbmNlIGVuZGFzdCB1bmRlciBrbG9uaW5nZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTkgYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL21lcmdlLWZpbGUuYzo0NgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk0IGJ1aWx0aW4vcmVwYWNrLmM6MzI3Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibmFtbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAiYW52w6RuZCA8bmFtbj4gaXN0w6RsbGV0IGbDtnIgXCJvcmlnaW5cIiBmw7ZyIGF0dCBzcMOlcmEgdXBwc3Ryw7ZtcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgImNoZWNrYSB1dCA8Z3Jlbj4gaXN0w6RsbGV0IGbDtnIgZmrDpHJyZW5zIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICJzw7ZrdsOkZyB0aWxsIGdpdC11cGxvYWQtcGFjayBww6UgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjUgYnVpbHRpbi9mZXRjaC5jOjE2OCBidWlsdGluL2dyZXAuYzo4NDAKKyM6IGJ1aWx0aW4vcHVsbC5jOjIyNworbXNnaWQgImRlcHRoIgorbXNnc3RyICJkanVwIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI2Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJza2FwYSBlbiBncnVuZCBrbG9uIHDDpSBkZXR0YSBkanVwIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgzCittc2dpZCAidGltZSIKK21zZ3N0ciAidGlkIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgInNrYXBhIGVuIGdydW5kIGtsb24gZnLDpW4gZW4gYW5naXZlbiB0aWRwdW5rdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NQorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICJyZXZpc2lvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAiZsO2cmRqdXBhIGhpc3RvcmlrIGbDtnIgZ3J1bmQga2xvbiwgZXhrbHVkZXJhIHJldmlzaW9uZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgImtsb25hIGVuZGFzdCBlbiBncmVuLCBIRUFEIGVsbGVyIC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2xvbmUgYW55IHRhZ3MsIGFuZCBtYWtlIGxhdGVyIGZldGNoZXMgbm90IHRvIGZvbGxvdyB0aGVtIgorbXNnc3RyICJrbG9uYSBpbmdhIHRhZ2dhciBvY2ggZ8O2ciBhdHQgc2VuYXJlIGjDpG10bmluZ2FyIGludGUgZsO2bGplciBkZW0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzYKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaGFsbG93IgorbXNnc3RyICJrbG9uYWRlIHVuZGVybW9kdWxlciBrb21tZXIgdmFyYSBncnVuZGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzcgYnVpbHRpbi9pbml0LWRiLmM6NDk1Cittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICJnaXRrYXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzggYnVpbHRpbi9pbml0LWRiLmM6NDk2Cittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAic2VwYXJlcmEgZ2l0a2F0YWxvZ2VuIGZyw6VuIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAibnlja2VsPXbDpHJkZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAic3TDpGxsIGluIGtvbmZpZ3VyYXRpb24gaSBkZXQgbnlhIGFya2l2ZXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJzZXJ2ZXItc3BlY2lmaWMiCittc2dzdHIgInNlcnZlcnNwZWNpZmlrIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAib3B0aW9uIHRvIHRyYW5zbWl0IgorbXNnc3RyICIiCisiaW5nZXQgYXR0IGNoZWNrYSBpblxuIgorImZsYWdnYSBhdHQgc8OkbmRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQzIGJ1aWx0aW4vZmV0Y2guYzoxOTEgYnVpbHRpbi9wdWxsLmM6MjQwCisjOiBidWlsdGluL3B1c2guYzo1NzQKK21zZ2lkICJ1c2UgSVB2NCBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAiYW52w6RuZCBlbmRhc3QgSVB2NC1hZHJlc3NlciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjI0MworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgImFudsOkbmQgZW5kYXN0IElQdjYtYWRyZXNzZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCB1c2UgdGhlaXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAia2xvbmFkZSB1bmRlcm1vZHVsZXIga29tbWVyIGFudsOkbmRhIHNpbiBmasOkcnJzcMOlcm5pbmdzZ3JlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE1MQorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IGZpbGUgdG8gaW5jbHVkZSBvbmx5IGZpbGVzIGF0IHJvb3QiCittc2dzdHIgImluaXRpZXJhIHNwYXJzZS1jaGVja291dC1maWxlbiB0aWxsIGF0dCBiYXJhIGlua2x1ZGVyYSBmaWxlciBpIHJvdGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjg3Cittc2dpZCAiIgorIk5vIGRpcmVjdG9yeSBuYW1lIGNvdWxkIGJlIGd1ZXNzZWQuXG4iCisiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgZ2lzc2Ega2F0YWxvZ25hbW4uXG4iCisiQW5nZSBlbiBrYXRhbG9nIHDDpSBrb21tYW5kb3JhZGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImluZm86IENvdWxkIG5vdCBhZGQgYWx0ZXJuYXRlIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJpbmZvOiBLYW4gaW50ZSBza2FwYSBzdXBwbGVhbnQgZsO2ciBcIiVzXCI6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGZpbm5zIG9jaCDDpHIgaW5nZW4ga2F0YWxvZyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhcnQgaXRlcmF0b3Igb3ZlciAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc3RhcnRhIGl0ZXJhdG9yIMO2dmVyIFwiJXNcIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIGzDpG5rZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGtvcGllcmEgZmlsZW4gdGlsbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgaXRlcmVyYSDDtnZlciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAia2xhcnQuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MDgKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisiS2xvbmVuIGx5Y2thZGVzLCBtZW4gdXRjaGVja25pbmdlbiBtaXNzbHlja2FkZXMuXG4iCisiRHUga2FuIGluc3Bla3RlcmEgZGV0IHNvbSBjaGVja2FkZXMgdXQgbWVkIFwiZ2l0IHN0YXR1c1wiXG4iCisib2NoIGbDtnJzw7ZrYSBtZWQgXCJnaXQgcmVzdG9yZSAtc291cmNlPUhFQUQgOi9cIlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJLdW5kZSBpbnRlIGhpdHRhIGZqw6RycmdyZW5lbiAlcyBmw7ZyIGF0dCBrbG9uYS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSAlcyIKK21zZ3N0ciAia2FuIGludGUgdXBwZGF0ZXJhICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUyCittc2dpZCAiZmFpbGVkIHRvIGluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJtaXNzbHlja2FkZXMgaW5pdGllcmEgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzc1Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisiSEVBRCBob3MgZmrDpHJyZW4gcGVrYXIgcMOlIGVuIG9iZWZpbnRsaWcgcmVmZXJlbnMsIGthbiBpbnRlIGNoZWNrYSB1dC5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgImt1bmRlIGludGUgY2hlY2thIHV0IGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg1NgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBwYXJhbWV0cmFyIHRpbGwga29uZmlndXJhdGlvbnNmaWxlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxOQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgImthbiBpbnRlIHBhY2thIG9tIGbDtnIgYXR0IHN0w6RkYSB1cHAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjEKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCB0ZW1wb3LDpHIgXCJhbHRlcm5hdGVzXCItZmlsIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU5IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk0OAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIkbDtnIgbcOlbmdhIGFyZ3VtZW50LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2MworbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiRHUgbcOlc3RlIGFuZ2UgZXR0IGFya2l2IGF0dCBrbG9uYS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJmbGFnZ29ybmEgLS1iYXJlIG9jaCAtLW9yaWdpbiAlcyDDpHIgaW5rb21wYXRpYmxhLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3OQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJmbGFnZ29ybmEgLS1iYXJlIG9jaCAtLXNlcGFyYXRlLWdpdC1kaXIgw6RyIGlua29tcGF0aWJsYS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJhcmtpdmV0IFwiJXNcIiBmaW5ucyBpbnRlIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTk4IGJ1aWx0aW4vZmV0Y2guYzoxNzg3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiZGp1cGV0ICVzIMOkciBpbnRlIGV0dCBwb3NpdGl2dCB0YWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgImRlc3RpbmF0aW9uc3PDtmt2w6RnZW4gXCIlc1wiIGZpbm5zIHJlZGFuIG9jaCDDpHIgaW50ZSBlbiB0b20ga2F0YWxvZy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiYXJiZXRzdHLDpGRldCBcIiVzXCIgZmlubnMgcmVkYW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzMyBidWlsdGluL2Nsb25lLmM6MTA1NCBidWlsdGluL2RpZmZ0b29sLmM6MjcxCisjOiBidWlsdGluL2xvZy5jOjE4NjYgYnVpbHRpbi93b3JrdHJlZS5jOjMwMiBidWlsdGluL3dvcmt0cmVlLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGlubGVkYW5kZSBrYXRhbG9nZXIgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGFyYmV0c2thdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJLbG9uYXIgdGlsbCBldHQgbmFrZXQgYXJraXYgXCIlc1wiLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIktsb25hciB0aWxsIFwiJXNcIi4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA4NAorbXNnaWQgIiIKKyJjbG9uZSAtLXJlY3Vyc2l2ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGJvdGggLS1yZWZlcmVuY2UgYW5kIC0tcmVmZXJlbmNlLWlmLSIKKyJhYmxlIgorbXNnc3RyICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgw6RyIGludGUga29tcGF0aWJlbCBtZWQgLS1yZWZlcmVuY2Ugb2NoIC0tcmVmZXJlbmNlLWlmLWFibGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQ4Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZGVwdGggaWdub3JlcmFzIGkgbG9rYWxhIGtsb25pbmdhcjsgYW52w6RuZCBmaWxlOi8vIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUwCittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LXNpbmNlIGlnbm9yZXJhcyBpIGxva2FsYSBrbG9uaW5nYXI7IGFudsOkbmQgZmlsZTovLyBpc3TDpGxsZXQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MgorbXNnaWQgIi0tc2hhbGxvdy1leGNsdWRlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tc2hhbGxvdy1leGNsdWRlIGlnbm9yZXJhcyBpIGxva2FsYSBrbG9uaW5nYXI7IGFudsOkbmQgZmlsZTovLyBpc3TDpGxsZXQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1maWx0ZXIgaWdub3JlcmFzIGkgbG9rYWxhIGtsb25pbmdhcjsgYW52w6RuZCBmaWxlOi8vIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTU3Cittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAia8OkbGxhcmtpdmV0IMOkciBncnVudCwgaWdub3JlcmFyIC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTYyCittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICItLWxvY2FsIGlnbm9yZXJhcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMzcgYnVpbHRpbi9jbG9uZS5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIkZqw6RycmdyZW5lbiAlcyBoaXR0YWRlcyBpbnRlIGkgdXBwc3Ryw7Ztc2Fya2l2ZXQgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQ4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiRHUgdmVya2FyIGhhIGtsb25hdCBldHQgdG9tdCBhcmtpdi4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJzbMOlIHVwcCBrb25maWd1cmF0aW9uc3ZhcmlhYmxlciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOCBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAidXRzZWVuZGUgYXR0IGFudsOkbmRhIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAiTWF4aW1hbCBicmVkZCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIlNwYWx0ZnlsbG5hZCBpIHbDpG5zdGVya2FudGVuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIlNwYWx0ZnlsbG5hZCBpIGjDtmdlcmthbnRlbiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMworbXNnaWQgIlBhZGRpbmcgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIgorbXNnc3RyICJTcGFsdGZ5bGxuYWQgbWVsbGFuIHNwYWx0ZXIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZCBtw6VzdGUgdmFyYSBmw7Zyc3RhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPGbDtnLDpGxkcmVyPikuLi5dIFstU1s8bnlja2VsaWQ+XV0gWygtbSAiCisiPG1lZGRlbGFuZGU+KS4uLl0gWygtRiA8ZmlsPikuLi5dIDx0csOkZD4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcGFyZW50ICVzIGlnbm9yZWQiCittc2dzdHIgImR1cGxpY2VyYWQgZsO2csOkbGRlciAlcyBpZ25vcmVyYWRlcyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjU2IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzYgYnVpbHRpbi9sb2cuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm9iamVrdG5hbW5ldCDDpHIgaW50ZSBnaWx0aWd0OiAlcyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBtaXNzbHlja2FkZXMgw7ZwcG5hIFwiJXNcIiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBtaXNzbHlja2FkZXMgbMOkc2EgXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBtaXNzbHlja2FkZXMgc3TDpG5nYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTEKK21zZ2lkICJwYXJlbnQiCittc2dzdHIgImbDtnLDpGxkZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICJpZCBww6UgZXR0IGbDtnLDpGxkZXJpbmNoZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNDk2IGJ1aWx0aW4vbWVyZ2UuYzoyNzAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ2OQorIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE1IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NgorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE4Cittc2dpZCAicmVhZCBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsw6RzIGluY2hlY2tuaW5nc2xvZ2dtZWRkZWxhbmRlIGZyw6VuIGZpbCIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMSBidWlsdGluL2NvbW1pdC5jOjE1MDggYnVpbHRpbi9tZXJnZS5jOjI4NworIzogYnVpbHRpbi9wdWxsLmM6MTk1IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE4Cittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICJHUEctc2lnbmVyYSBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzMworbXNnaWQgIm11c3QgZ2l2ZSBleGFjdGx5IG9uZSB0cmVlIgorbXNnc3RyICJtw6VzdGUgYW5nZSBleGFrdCBldHQgdHLDpGQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxNDAKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byByZWFkIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWU6IG1pc3NseWNrYWRlcyBsw6RzYSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MQorbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs8ZmxhZ2dvcj5dIFstLV0gPHPDtmt2w6RnPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs8ZmxhZ2dvcj5dIFstLV0gPHPDtmt2w6RnPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MQorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorIkR1IGJhZCBvbSBhdHQgdXTDtmthIGRlbiBzZW5hc3RlIGluY2hlY2tuaW5nZW4sIG1lbiBvbSBkdSBnw7ZyIGRldFxuIgorImJsaXIgZGVuIHRvbS4gRHUga2FuIGvDtnJhIGtvbW1hbmRvdCBww6Ugbnl0dCBtZWQgLS1hbGxvdy1lbXB0eSwgZWxsZXJcbiIKKyJzw6Uga2FuIGR1IHRhIGJvcnQgaW5jaGVja25pbmdlbiBoZWx0IG1lZCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU2Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgIiIKKyJEZW4gdGlkaWdhcmUgXCJjaGVycnktcGlja1wiOmVuIMOkciBudSB0b20sIGthbnNrZSBww6UgZ3J1bmQgYXYgZW4gbMO2c3RcbiIKKyJrb25mbGlrdC4gT20gZHUgdmlsbCBjaGVja2EgaW4gZGVuIMOkbmTDpSBhbnbDpG5kZXIgZHU6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJBbnbDpG5kIGFubmFycyBcImdpdCBjaGVycnktcGljayAtLXNraXBcIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2Cittc2dpZCAiIgorImFuZCB0aGVuIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyJ0byByZXN1bWUgY2hlcnJ5LXBpY2tpbmcgdGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorbXNnc3RyICIiCisib2NoIHNlZGFuOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVxuIgorIlxuIgorImbDtnIgYXR0IGZvcnRzw6R0dGEgXCJjaGVycnktcGlja1wiIG1lZCByZXN0ZXJhbmRlIGluY2hlY2tuaW5nYXIuXG4iCisiT20gZHUgdmlsbCBob3BwYSDDtnZlciBkZW4gaMOkciBpbmNoZWNrbmluZ2VuLCBhbnbDpG5kOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJtaXNzbHlja2FkZXMgcGFja2EgdXBwIEhFQUQ6cyB0csOkZG9iamVrdCIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTEKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIG1lZCAtYSBnZXIgaW5nZW4gbWVuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NAorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiRHUgbcOlc3RlIGFuZ2Ugc8O2a3bDpGdhciB0aWxsc2FtbWFucyBtZWQgLS1pbmNsdWRlLy0tb25seS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc2Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgdGVtcG9yw6RyIGluZGV4ZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4MgorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImludGVyYWt0aXYgdGlsbMOkZ2duaW5nIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAia2FuIGludGUgdXBwZGF0ZXJhIHRlbXBvcsOkcnQgaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzk4Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgIk1pc3NseWNrYWRlcyB1cHBkYXRlcmEgaHV2dWQtY2FjaGV0csOkZGV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyMyBidWlsdGluL2NvbW1pdC5jOjQ0NiBidWlsdGluL2NvbW1pdC5jOjQ5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZmlsZW4gbmV3X2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAia2FuIGludGUgdXRmw7ZyYSBlbiBkZWx2aXMgaW5jaGVja25pbmcgdW5kZXIgZW4gc2FtbWFuc2xhZ25pbmcuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NworbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAia2FuIGludGUgdXRmw7ZyYSBlbiBkZWx2aXMgaW5jaGVja25pbmcgdW5kZXIgZW4gY2hlcnJ5LXBpY2suIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4NQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgaW5kZXhldCIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIHRlbXBvcsOkciBpbmRleGZpbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAiaW5jaGVja25pbmdlbiBcIiVzXCIgc2FrbmFyIGbDtnJmYXR0YXJodXZ1ZCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiaW5jaGVja25pbmdlbiBcIiVzXCIgaGFyIGZlbGZvcm1hdGVyYXQgZsO2cmZhdHRhcmh1dnVkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyMworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgImZlbGZvcm1hZCBcIi0tYXV0aG9yXCItZmxhZ2dhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY3NgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSB2w6RsamEgZXR0IGtvbW1lbnRhcnN0ZWNrZW4gc29tIGludGUgYW52w6RudHNcbiIKKyJpIGRldCBiZWZpbnRsaWdhIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxNCBidWlsdGluL2NvbW1pdC5jOjc0NyBidWlsdGluL2NvbW1pdC5jOjEwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgImt1bmRlIGludGUgc2zDpSB1cHAgaW5jaGVja25pbmdlbiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjYgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIobMOkc2VyIGxvZ2dtZWRkZWxhbmRlIGZyw6VuIHN0YW5kYXJkIGluKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyOAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIGxvZ2cgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgbG9nZ2ZpbGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjMgYnVpbHRpbi9jb21taXQuYzo3NzkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzcwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIE1FUkdFX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MzAKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBpbmNoZWNrbmluZ3NtYWxsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEZXQgdmVya2FyIHNvbSBkdSBjaGVja2FyIGluIGVuIHNhbW1hbnNsYWduaW5nLlxuIgorIk9tIGRldCBpbnRlIHN0w6RtbWVyIHRhciBkdSBib3J0IGZpbGVuXG4iCisiXHQlc1xuIgorIm9jaCBmw7Zyc8O2a2VyIGlnZW4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRldCB2ZXJrYXIgc29tIGR1IGNoZWNrYXIgaW4gZW4gY2hlcnJ5LXBpY2suXG4iCisiT20gZGV0IGludGUgc3TDpG1tZXIgdGFyIGR1IGJvcnQgZmlsZW5cbiIKKyJcdCVzXG4iCisib2NoIGbDtnJzw7ZrZXIgaWdlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkFuZ2UgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQgZsO2ciBkaW5hIMOkbmRyaW5nYXIuIFJhZGVyIHNvbSBpbmxlZHNcbiIKKyJtZWQgXCIlY1wiIGtvbW1lciBpZ25vcmVyYXMsIG9jaCBldHQgdG9tdCBtZWRkZWxhbmRlIGF2YnJ5dGVyICIKKyJpbmNoZWNrbmluZ2VuLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkFuZ2UgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQgZsO2ciBkaW5hIMOkbmRyaW5nYXIuIFJhZGVyIHNvbSBpbmxlZHNcbiIKKyJtZWQgXCIlY1wiIGtvbW1lciBiZWjDpWxsYXM7IGR1IGthbiBzasOkbHYgdGEgYm9ydCBkZW0gb20gZHUgdmlsbC5cbiIKKyJFdHQgdG9tdCBtZWRkZWxhbmRlIGF2YnJ5dGVyIGluY2hlY2tuaW5nZW4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNGw7ZyZmF0dGFyZTogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXR1bTogICAgICAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0luY2hlY2thcmU6ICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkyNQorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJLYW4gaW50ZSBsw6RzYSBpbmRleGV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5MgorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJGZWwgdmlkIGJ5Z2dhbmRlIGF2IHRyw6RkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDYgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJBbmdlIG1lZGRlbGFuZGV0IGVuIGF2IGZsYWdnb3JuYSAtbSBlbGxlciAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yICclcycgw6RyIGludGUgJ05hbW4gPGVwb3N0Picgb2NoIG1hdGNoYXIgaW5nZW4gYmVmaW50bGlnIGbDtnJmYXR0YXJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpZ25vcmVkIG1vZGUgJyVzJyIKK21zZ3N0ciAiT2dpbHRpZ3QgaWdub3JlcmF0IGzDpGdlIFwiJXNcIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDgyIGJ1aWx0aW4vY29tbWl0LmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIk9naWx0aWd0IGzDpGdlIGbDtnIgb3Nww6VyYWRlIGZpbGVyOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyMgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIG9jaCAteiDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSBiw6VkZSAtLXJlc2V0LWF1dGhvciBvY2ggLS1hdXRob3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3NQorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICJEdSBoYXIgaW5nZXQgYXR0IHV0w7ZrYS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3OAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkR1IMOkciBpIG1pdHRlbiBhdiBlbiBzYW1tYW5zbGFnbmluZyAtLSBrYW4gaW50ZSB1dMO2a2EuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gY2hlcnJ5LXBpY2sgLS0ga2FuIGludGUgdXTDtmthLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiRmxhZ2dvcm5hIC0tc3F1YXNoIG9jaCAtLWZpeHVwIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MworbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICJFbmRhc3QgZW4gYXYgLWMvLUMvLUYvLS1maXh1cCBrYW4gYW52w6RuZGFzLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAiRmxhZ2dhbiAtbSBrYW4gaW50ZSBrb21iaW5lcmFzIG1lZCAtYy8tQy8tRi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwMworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIGthbiBlbmRhc3QgYW52w6RuZGFzIG1lZCAtQywgLWMgZWxsZXIgLS1hbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyMAorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiIgorIkVuZGFzdCBlbiBhdiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBrYW4gYW52w6RuZGFzLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzICclcyAuLi4nIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAic8O2a3bDpGdhcm5hIFwiJXMgLi4uXCIgbWVkIC1hIGdlciBpbmdlbiBtZW5pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NyBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgInZpc2Ega29uY2lzIHN0YXR1cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU5IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJ2aXNhIGluZm9ybWF0aW9uIG9tIGdyZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MQorbXNnaWQgInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iCittc2dzdHIgInZpc2EgaW5mb3JtYXRpb24gb20gc3Rhc2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MyBidWlsdGluL2NvbW1pdC5jOjE1MjMKK21zZ2lkICJjb21wdXRlIGZ1bGwgYWhlYWQvYmVoaW5kIHZhbHVlcyIKK21zZ3N0ciAiYmVyw6RrbmEgZnVsbHN0w6RuZGlnYSBmw7ZyZS0vZWZ0ZXItdsOkcmRlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2lvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1IGJ1aWx0aW4vY29tbWl0LmM6MTUyNSBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NTAKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAibWFza2lubMOkc2JhciB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2OCBidWlsdGluL2NvbW1pdC5jOjE1MjcKK21zZ2lkICJzaG93IHN0YXR1cyBpbiBsb25nIGZvcm1hdCAoZGVmYXVsdCkiCittc2dzdHIgInZpc2Egc3RhdHVzIGkgbMOlbmd0IGZvcm1hdCAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzEgYnVpbHRpbi9jb21taXQuYzoxNTMwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgInRlcm1pbmVyYSBwb3N0ZXIgbWVkIE5VTCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzczIGJ1aWx0aW4vY29tbWl0LmM6MTM3NyBidWlsdGluL2NvbW1pdC5jOjE1MzMKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUzIGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU2CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1OSBidWlsdGluL3JlYmFzZS5jOjE1MjUgcGFyc2Utb3B0aW9ucy5oOjMzNgorbXNnaWQgIm1vZGUiCittc2dzdHIgImzDpGdlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzQgYnVpbHRpbi9jb21taXQuYzoxNTMzCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICJ2aXNhIG9zcMOlcmFkZSBmaWxlciwgdmFsZnJpYSBsw6RnZW46IGFsbCwgbm9ybWFsLCBuby4gKFN0YW5kYXJkOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzgKK21zZ2lkICIiCisic2hvdyBpZ25vcmVkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gKERlZmF1bHQ6ICIKKyJ0cmFkaXRpb25hbCkiCittc2dzdHIgIiIKKyJ2aXNhIGlnbm9yZXJhZGUgZmlsZXIsIHZhbGZyaWEgbMOkZ2VuOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vIChTdGFuZGFyZDogIgorInRyYWRpdGlvbmFsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJuw6RyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODEKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmVyYSDDpG5kcmluZ2FyIGkgdW5kZXJtb2R1bGVyLCB2YWxmcml0dCBuw6RyOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgzCittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAidmlzYSBvc3DDpXJhZGUgZmlsZXIgaSBzcGFsdGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODQKK21zZ2lkICJkbyBub3QgZGV0ZWN0IHJlbmFtZXMiCittc2dzdHIgImRldGVrdGVyYSBpbnRlIG5hbW7DpG5kcmluZ2FyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAiZGV0ZWt0ZXJhIG5hbW7DpG5kcmluZ2FyLCBtw7ZqbGlnZW4gc8OkdHQgbGlraGV0c2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDYKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICJLb21iaW5hdGlvbmVuIGF2IGFyZ3VtZW50IGbDtnIgaWdub3JlcmFkZSBvY2ggb3Nww6VyYWRlIGZpbGVyIHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg5Cittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAidW5kZXJ0cnljayBzYW1tYW5mYXR0bmluZyBlZnRlciBmcmFtZ8OlbmdzcmlrIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTAKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgInZpc2EgZGlmZiBpIG1hbGxlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTIKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJBbHRlcm5hdGl2IGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkzIGJ1aWx0aW4vbWVyZ2UuYzoyNzQgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsw6RzIG1lZGRlbGFuZGUgZnLDpW4gZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJhdXRob3IiCittc2dzdHIgImbDtnJmYXR0YXJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAiw7Z2ZXJzdHlyIGbDtnJmYXR0YXJlIGbDtnIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1IGJ1aWx0aW4vZ2MuYzo1MzgKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXR1bSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICLDtnZlcnN0eXIgZGF0dW0gZsO2ciBpbmNoZWNrbmluZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcgYnVpbHRpbi9jb21taXQuYzoxNDk4IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OQorIzogYnVpbHRpbi9jb21taXQuYzoxNTAwIHBhcnNlLW9wdGlvbnMuaDozMjggcmVmLWZpbHRlci5oOjkyCittc2dpZCAiY29tbWl0IgorbXNnc3RyICJpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3Cittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIsOldGVyYW52w6RuZCBvY2ggcmVkaWdlcmEgbWVkZGVsYW5kZSBmcsOlbiBhbmdpdmVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTgKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIG1lZGRlbGFuZGUgZnLDpW4gYW5naXZlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImFudsOkbmQgYXV0b3NxdWFzaC1mb3JtYXRlcmF0IG1lZGRlbGFuZGUgZsO2ciBhdHQgZml4YSBhbmdpdmVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImFudsOkbmQgYXV0b3NxdWFzaC1mb3JtYXRlcmF0IG1lZGRlbGFuZGUgZsO2ciBhdHQgc2zDpSBpaG9wIG1lZCBhbmdpdmVuICIKKyJpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiamFnIMOkciBudSBmw7ZyZmF0dGFyZSBhdiBpbmNoZWNrbmluZ2VuIChhbnbDpG5kcyBtZWQgLUMvLWMvLS1hbWVuZCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMiBidWlsdGluL2xvZy5jOjE2MzQgYnVpbHRpbi9tZXJnZS5jOjI4OQorIzogYnVpbHRpbi9wdWxsLmM6MTY0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICJsw6RnZyB0aWxsIFNpZ25lZC1vZmYtYnk6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDMKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgImFudsOkbmQgYW5naXZlbiBtYWxsZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDQKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAidHZpbmdhIHJlZGlnZXJpbmcgYXYgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwNgorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJpbmtsdWRlcmEgc3RhdHVzIGkgbWFsbGVuIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMQorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJBbHRlcm5hdGl2IGbDtnIgaW5jaGVja25pbmdlbnMgaW5uZWjDpWxsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTIKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImNoZWNrYSBpbiBhbGxhIMOkbmRyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTMKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgImzDpGdnIHRpbGwgYW5naXZuYSBmaWxlciB0aWxsIGluZGV4ZXQgZsO2ciBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE0Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgImzDpGdnIHRpbGwgZmlsZXIgaW50ZXJha3RpdnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgImzDpGdnIHRpbGwgw6RuZHJpbmdhciBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICJjaGVja2EgZW5kYXN0IGluIGFuZ2l2bmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJmw7ZyYmlnw6UgcHJlLWNvbW1pdC0gb2NoIGNvbW1pdC1tc2cta3Jva2FyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJ2aXNhIHZhZCBzb20gc2t1bGxlIGNoZWNrYXMgaW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMQorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBmw7ZyZWfDpWVuZGUgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiZsO2cmJpZ8OlIHBvc3QtcmV3cml0ZS1rcm9rIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzkKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJvayBhdHQgcmVnaXN0cmVyYSBlbiB0b20gw6RuZHJpbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0MQorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIm9rIGF0dCByZWdpc3RyZXJhIGVuIMOkbmRyaW5nIG1lZCB0b210IG1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICJUcmFzaWcgTUVSR0VfSEVBRC1maWwgKCVzKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIxCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBNRVJHRV9NT0RFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIGluY2hlY2tuaW5nc21lZGRlbGFuZGU6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQXZicnl0ZXIgcMOlIGdydW5kIGF2IHRvbXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQXZicnl0ZXIgaW5jaGVja25pbmc7IG1lZGRlbGFuZGV0IGludGUgcmVkaWdlcmF0LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2ODYKK21zZ2lkICIiCisicmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgOi9cIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorImFya2l2ZXQgaGFyIHVwcGRhdGVyYXRzLCBtZW4ga3VuZGUgaW50ZSBza3JpdmEgZmlsZW5cbiIKKyJuZXdfaW5kZXguIEtvbnRyb2xsZXJhIGF0dCBkaXNrZW4gaW50ZSDDpHIgZnVsbCBvY2hcbiIKKyJhdHQga3ZvdGVuIGludGUgaGFyIMO2dmVyc2tyaWRpdHMsIG9jaCBrw7ZyIHNlZGFuXG4iCisiXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIGbDtnIgYXR0IMOldGVyc3TDpGxsYS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxNworbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1zaGFsbG93XSBbLS1bbm8tXXByb2dyZXNzXSIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamthdD5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmprYXQ+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPGRlbG5pbmdzLWZsYWdnb3I+IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAzCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4NyBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAia2F0IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA0CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4OAorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAiT2JqZWt0a2F0YWxvZ2VuIGTDpHIgZ3JhZmVuIHNrYWxsIGxhZ3JhcyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MQorbXNnaWQgImlmIHRoZSBjb21taXQtZ3JhcGggaXMgc3BsaXQsIG9ubHkgdmVyaWZ5IHRoZSB0aXAgZmlsZSIKK21zZ3N0ciAib20gaW5jaGVja25pZ25zZ3JhZmVuIMOkciBkZWxhZCwga29udHJvbGxlcmEgYmFyYSBzcGV0c2ZpbGVuIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjczIHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBpbmNoZWNrbmluZ3NncmFmZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgInN0YXJ0YSB0cmF2ZXJzZXJpbmcgdmlkIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDgKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgInPDtmsgcGFrZXRpbmRleCBsaXN0YWRlIHDDpSBzdGFuZGFyZCBpbiBlZnRlciBpbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgImLDtnJqYSBnw6UgZ2Vub20gaW5jaGVja25pbmdhciBsaXN0YWRlIHDDpSBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTIKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJ0YSBtZWQgYWxsYSBpbmNoZWNrbmluZ2FyIHJlZGFuIGkgZmlsZW4gY29tbWl0LWdyYXBoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExNQorbXNnaWQgImFsbG93IHdyaXRpbmcgYW4gaW5jcmVtZW50YWwgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgInRpbGzDpXQgc2tyaXZhIGVuIGlua3JlbWVudGVsbCBpbmNoZWNrbmluZ3NncmFmZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExNyBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyMQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBub24tYmFzZSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIiIKKyJtYXhpbWFsdCBhbnRhbCBpbmNoZWNrbmluZ2FyIGkgZW4gZGVsYWQgaW5jaGVja2luZ3NncmFmIHNvbSBpbnRlIMOkciBiYWQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE5Cittc2dpZCAibWF4aW11bSByYXRpbyBiZXR3ZWVuIHR3byBsZXZlbHMgb2YgYSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIm1heGltYWx0IGbDtnJow6VsbGFuZGUgbWVsbGFuIHR2w6Ugbml2w6VlciBhdiBlbiBkZWxhZCBpbmNoZWNrbmluZ3NncmFmIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNworbXNnaWQgInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICJhbnbDpG5kIHNvbSBtZXN0IGVuIGF2IC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdCBvY2ggLS1zdGRpbi1wYWNrcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTAzIGJ1aWx0aW4vZW52LS1oZWxwZXIuYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAib2vDpG50IGFyZ3VtZW50IGbDtnIgLS10eXBlLCAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMTUKK21zZ2lkICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIKK21zZ3N0ciAiZW5kYXN0IGVuIHR5cCDDpXQgZ8OlbmdlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjQKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiS29uZmlndXJhdGlvbnNmaWxlbnMgcGxhdHMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBnbG9iYWwga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBzeXN0ZW1ldHMga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgImFudsOkbmQgYXJraXZldHMga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBhcmJldHNrYXRhbG9nZW5zIGtvbmZpZ3VyYXRpb25zZmlsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBhbmdpdmVuIGtvbmZpZ3VyYXRpb25zZmlsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgImJsb2ItaWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAibMOkcyBrb25maWd1cmF0aW9uIGZyw6VuIGdpdmV0IGJsb2Itb2JqZWt0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiw4V0Z8OkcmQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImjDpG10YSB2w6RyZGU6IG5hbW4gW3bDpHJkZS1yZWd1dHRyXSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImjDpG10YSBhbGxhIHbDpHJkZW46IG55Y2tlbCBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJow6RtdGEgdsOkcmRlbiBmw7ZyIHJlZ3V0dHI6IG5hbW4tcmVndXR0ciBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgImjDpG10YSB2w6RyZGUgc3BlY2lmaWt0IFVSTDplbjogc2VrdGlvblsudmFyXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgImVyc8OkdHQgYWxsYSBtb3RzdmFyYW5kZSB2YXJpYWJsZXI6IG5hbW4gdsOkcmRlIFt2w6RyZGUtcmVndXR0cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM3Cittc2dpZCAiYWRkIGEgbmV3IHZhcmlhYmxlOiBuYW1lIHZhbHVlIgorbXNnc3RyICJsw6RnZyB0aWxsIGVuIG55IHZhcmlhYmVsOiBuYW1uIHbDpHJkZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJ0YSBib3J0IGVuIHZhcmlhYmVsOiBuYW1uIFt2w6RyZGUtcmVndXR0cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInRhIGJvcnQgYWxsYSB0csOkZmZhcjogbmFtbiBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MAorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAiYnl0IG5hbW4gcMOlIHNla3Rpb246IGdhbW1hbHQtbmFtbiBueXR0LW5hbW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQxCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAidGEgYm9ydCBlbiBzZWt0aW9uOiBuYW1uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJ2aXNhIGFsbGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIsO2cHBuYSB0ZXh0cmVkaWdlcmluZ3Nwcm9ncmFtIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJoaXR0YSBkZW4gaW5zdMOkbGxkYSBmw6RyZ2VuOiBzbG90IFtkZWZhdWx0XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDUKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAiaGl0dGEgZsOkcmdpbnN0w6RsbG5pbmdlbjogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NyBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgInbDpHJkZXQgaGFyIGdpdml0cyBkZW5uYSB0eXAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJ2w6RyZGV0IMOkciBcInRydWVcIiBlbGxlciBcImZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgInbDpHJkZXQgw6RyIGV0dCBkZWNpbWFsdCB0YWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUwCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJ2w6RyZGV0IMOkciAtLWJvb2wgZWxsZXIgLS1pbnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIKK21zZ3N0ciAidsOkcmRldCDDpHIgZW4gc8O2a3bDpGcgKGZpbC0gZWxsZXIga2F0YWxvZ25hbW4pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MgorbXNnaWQgInZhbHVlIGlzIGFuIGV4cGlyeSBkYXRlIgorbXNnc3RyICJ2w6RyZGV0IMOkciBldHQgdXRnw6VuZ3NkYXR1bSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiQW5kcmEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU0Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5lcmEgdsOkcmRlbiBtZWQgTlVMLWJ5dGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICJ2aXNhIGVuZGFzdCB2YXJpYWJlbG5hbW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJyZXNwZWt0ZXJhIGlua2x1ZGVyaW5nc2RpcmVrdGl2IHZpZCB1cHBzbGFnIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NworbXNnaWQgInNob3cgb3JpZ2luIG9mIGNvbmZpZyAoZmlsZSwgc3RhbmRhcmQgaW5wdXQsIGJsb2IsIGNvbW1hbmQgbGluZSkiCittc2dzdHIgInZpc2Ega29uZmlndXJhdGlvbnNrw6RsbGEgKGZpbCwgc3RhbmRhcmQgaW4sIGJsb2IsIGtvbW1hbmRvcmFkKSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTggYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQwCittc2dpZCAidmFsdWUiCittc2dzdHIgInbDpHJkZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTgKK21zZ2lkICJ3aXRoIC0tZ2V0LCB1c2UgZGVmYXVsdCB2YWx1ZSB3aGVuIG1pc3NpbmcgZW50cnkiCittc2dzdHIgIm1lZCAtLWdldCwgYW52w6RuZCBzdGFuZGFyZHbDpHJkZSB2aWQgc2FrbmFkIHBvc3QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSAlZCIKK21zZ3N0ciAiZmVsIGFudGFsIGFyZ3VtZW50LCBza3VsbGUgdmFyYSAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlIGZyb20gJWQgdG8gJWQiCittc2dzdHIgImZlbCBhbnRhbCBhcmd1bWVudCwgc2t1bGxlIHZhcmEgZnLDpW4gJWQgdGlsbCAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgImZlbGFrdGlndCBueWNrZWxtw7Zuc3RlcjogJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmb3JtYXQgZGVmYXVsdCBjb25maWcgdmFsdWU6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgZm9ybWF0ZXJhIHN0YW5kYXJka29uZmlndXJhdGlvbnN2w6RyZGU6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdG9sa2EgZsOkcmdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQzCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgImthbiBpbnRlIHRvbGthIHN0YW5kYXJkZsOkcmd2w6RyZGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk2IGJ1aWx0aW4vY29uZmlnLmM6NzQyCittc2dpZCAibm90IGluIGEgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiaW50ZSBpIGVuIGdpdC1rYXRhbG9nIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5OQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAic2tyaXZhIHRpbGwgc3RhbmRhcmQgaW4gc3TDtmRzIGludGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTAyCittc2dpZCAid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAic2tyaXZhIGtvbmZpZ3VyYXRpb25zLWJsb2JiYXIgc3TDtmRzIGludGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIERldHRhIMOkciBHaXRzIGFudsOkbmRhcnNwZWNpZmlrYSBrb25maWd1cmF0aW9uc2ZpbFxuIgorIlt1c2VyXVxuIgorIiMgSnVzdGVyYSBvY2ggdGEgYm9ydCBrb21tZW50ZXJpbmdzbcOkcmtldCBmcsOlbiBmw7ZsamFuZGUgcmFkZXI6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxMQorbXNnaWQgIm9ubHkgb25lIGNvbmZpZyBmaWxlIGF0IGEgdGltZSIKK21zZ3N0ciAiZW5kYXN0IGVuIGtvbmZpZ3VyYXRpb25zZmlsIMOldCBnw6VuZ2VuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxNgorbXNnaWQgIi0tbG9jYWwgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1sb2NhbCBrYW4gYmFyYSBhbnbDpG5kYXMgaW51dGkgZXR0IGdpdC1hcmtpdiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTkKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1ibG9iIGthbiBiYXJhIGFudsOkbmRhcyBpbnV0aSBldHQgZ2l0LWFya2l2IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzOAorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiRIT01FIGludGUgc2F0dCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NTgKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisiLS13b3JrdHJlZSBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIGZsZXJhIGFyYmV0c2thdGFsb2dlciBvbSBpbnRlXG4iCisia29uZmlndXJhdGlvbnN1dMO2a25pZ25lbiB3b3JrdHJlZUNvbmZpZyBoYXIgYWt0aXZlcmF0cy4gTMOkc2Egc3R5Y2tldFxuIgorIlwiS09ORklHVVJBVElPTlNGSUxcIiBpIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmw7ZyIGRldGFsamVyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4OAorbXNnaWQgIi0tZ2V0LWNvbG9yIGFuZCB2YXJpYWJsZSB0eXBlIGFyZSBpbmNvaGVyZW50IgorbXNnc3RyICItLWdldC1jb2xvciBvY2ggdmFyaWFiZWx0eXAgc3TDpG1tZXIgaW50ZSDDtnZlcmVucyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OTMKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICJlbmRhc3QgZW4gw6V0Z8OkcmQgw6V0IGfDpW5nZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IGfDpGxsZXIgYmFyYSBmw7ZyIC0tbGlzdCBlbGxlciAtLWdldC1yZWdleHAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzEyCittc2dpZCAiIgorIi0tc2hvdy1vcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgYW5kIC0tIgorImxpc3QiCittc2dzdHIgIiIKKyItLXNob3ctb3JpZ2luIGfDpGxsZXIgYmFyYSBmw7ZyIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCBvY2ggLS1saXN0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxOAorbXNnaWQgIi0tZGVmYXVsdCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQiCittc2dzdHIgIi0tZGVmYXVsdCBnw6RsbGVyIGJhcmEgZsO2ciAtLWdldCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUga29uZmlndXJhdGlvbnNmaWwgXCIlc1wiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczNAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgImZlbCB2aWQgaGFudGVyaW5nIGF2IGtvbmZpZ3VyYXRpb25zZmlsKGVyKSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgInJlZGlnZXJpbmcgYXYgc3RhbmRhcmQgaW4gc3TDtmRzIGVqIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAicmVkaWdlcmluZyBhdiBibG9iYmFyIHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIGtvbmZpZ3VyYXRpb25zZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG92ZXJ3cml0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBhIHNpbmdsZSB2YWx1ZVxuIgorIiAgICAgICBVc2UgYSByZWdleHAsIC0tYWRkIG9yIC0tcmVwbGFjZS1hbGwgdG8gY2hhbmdlICVzLiIKK21zZ3N0ciAiIgorImthbiBpbnRlIHNrcml2YSDDtnZlciBmbGVyYSB2w6RyZGVuIG1lZCBldHQgZW5zYW10IHbDpHJkZVxuIgorIiAgICAgICBBbnbDpG5kIGVuIHJlZ2V4cCwgLS1hZGQgZWxsZXIgLS1yZXBsYWNlLWFsbCBmw7ZyIGF0dCDDpG5kcmEgJXMuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjg0NyBidWlsdGluL2NvbmZpZy5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHNlY3Rpb246ICVzIgorbXNnc3RyICJpbmdlbiBzw6VkYW4gc2VrdGlvbjogJXMiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjkwCittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKK21zZ3N0ciAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6MTAwCittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICJza3JpdiBzdG9ybGVrYXIgaSBtw6Rubmlza29sw6RzYmFydCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8ZmxhZ2dvcj5dIFs8aW5jaGVja25pbmctaWd0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxmbGFnZ29yPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiaGVhZCIKK21zZ3N0ciAiaHV2dWQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICJsw6R0dHZpa3RpZyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICJhbm5vdGVyYWQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJkZW4gYW5ub3RlcmFkZSB0YWdnZW4gJXMgaW50ZSB0aWxsZ8OkbmdsaWciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAiZGVuIGFubm90ZXJhZGUgdGFnZ2VuICVzIGhhciBpbmdldCBpbmLDpGRkYXQgbmFtbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJ0YWdnZW4gXCIlc1wiIMOkciBpIHZlcmtsaWdoZXRlbiBcIiVzXCIgaMOkciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgImluZ2VuIHRhZ2cgbW90c3ZhcmFyIFwiJXNcIiBleGFrdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIgorbXNnc3RyICIiCisiSW5nZW4gZXhha3QgdHLDpGZmIG1vdCByZWZlcmVuc2VyIGVsbGVyIHRhZ2dhciwgc8O2a2VyIGbDtnIgYXR0IGJlc2tyaXZhXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgImF2c2x1dGFkZSBzw7ZrbmluZyBww6UgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIkluZ2EgYW5ub3RlcmFkZSB0YWdnYXIga2FuIGJlc2tyaXZhIFwiJXNcIi5cbiIKKyJEZXQgZmlubnMgZG9jayBvYW5ub3RlcmFkZSB0YWdnYXI6IHRlc3RhIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIkluZ2EgdGFnZ2FyIGthbiBiZXNrcml2YSBcIiVzXCIuXG4iCisiVGVzdGEgLS1hbHdheXMsIGVsbGVyIHNrYXBhIG7DpWdyYSB0YWdnYXIuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICJ0cmF2ZXJzZXJhZGUgJWx1IGluY2hlY2tuaW5nYXJcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyJtZXIgw6RuICVpIHRhZ2dhciBoaXR0YWRlczsgbGlzdGFyIGRlICVpIHNlbmFzdGVcbiIKKyJnYXYgdXBwIHPDtmtuaW5nZW4gdmlkICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiYmVza3JpdmEgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiT2JqZWt0bmFtbmV0IMOkciBpbnRlIGdpbHRpZ3Q6ICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzIMOkciB2YXJrZW4gaW5jaGVja25pbmcgZWxsZXIgYmxvYiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNworbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgImhpdHRhIHRhZ2dlbiBzb20ga29tbWVyIGVmdGVyIGluY2hlY2tuaW5nZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzgKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJmZWxzw7ZrIHPDtmtzdHJhdGVnaW4gcMOlIHN0YW5kYXJkIGZlbCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOQorbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICJhbnbDpG5kIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJhbnbDpG5kIGFsbGEgdGFnZ2FyLCDDpHZlbiBvYW5ub3RlcmFkZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MQorbXNnaWQgImFsd2F5cyB1c2UgbG9uZyBmb3JtYXQiCittc2dzdHIgImFudsOkbmQgYWxsdGlkIGzDpW5ndCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDIKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgImbDtmxqIGVuZGFzdCBmw7Zyc3RhIGbDtnLDpGxkZXJuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ1Cittc2dpZCAib25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyIKK21zZ3N0ciAic2tyaXYgZW5kYXN0IHV0IGV4YWt0YSB0csOkZmZhciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NworbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIsO2dmVydsOkZyBkZSA8bj4gbnlhc3RlIHRhZ2dhcm5hIChzdGFuZGFyZDogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ5Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiw7Z2ZXJ2w6RnIGVuZGFzdCB0YWdnYXIgc29tIG1vdHN2YXJhciA8bcO2bnN0ZXI+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLDtnZlcnbDpGcgaW50ZSB0YWdnYXIgc29tIG1vdHN2YXJhciA8bcO2bnN0ZXI+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzIGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzMKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgInZpc2EgZsO2cmtvcnRhZGUgaW5jaGVja25pbmdzb2JqZWt0IHNvbSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NCBidWlsdGluL2Rlc2NyaWJlLmM6NTU3Cittc2dpZCAibWFyayIKK21zZ3N0ciAibcOkcmtlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICJsw6RnZyB0aWxsIDxtw6Rya2U+IHDDpSBsb3J0aWd0IGFyYmV0c3Ryw6RkIChzdGFuZGFyZDogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTgKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGJyb2tlbiB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWJyb2tlblwiKSIKK21zZ3N0ciAibMOkZ2cgdGlsbCA8bcOkcmtlPiBww6UgdHJhc2lndCBhcmJldHN0csOkZCAoc3RhbmRhcmQ6IFwiLWJyb2tlblwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3NgorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcgw6RyIGlua29tcGF0aWJlbCBtZWQgLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYwNQorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJJbmdhIG5hbW4gaGl0dGFkZXMsIGthbiBpbnRlIGJlc2tyaXZhIG7DpWdvdC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTYKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSDDpHIgaW5rb21wYXRpYmVsdCBtZWQgXCJjb21taXQtaXNoXCItdsOkcmRlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1OAorbXNnaWQgIi0tYnJva2VuIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1icm9rZW4gw6RyIGlua29tcGF0aWJlbHQgbWVkIFwiY29tbWl0LWlzaFwiLXbDpHJkZW4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICJcIiVzXCI6IGludGUgZW4gbm9ybWFsIGZpbCBlbGxlciBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9naWx0aWcgZmxhZ2dhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIkludGUgZXR0IGdpdC1hcmtpdiIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvYmpla3RldCBcIiVzXCIgc29tIGFuZ2F2cyDDpHIgZmVsYWt0aWd0LiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIm1lciDDpG4gdHbDpSBibG9iYmFyIGFuZ2F2czogXCIlc1wiIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiZWogaGFudGVyYXQgb2JqZWt0IFwiJXNcIiBhbmdhdnMuIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAKK21zZ2lkICJnaXQgZGlmZnRvb2wgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgZGlmZnRvb2wgWzxmbGFnZ29yPl0gWzxpbmNoZWNrbmluZz4gWzxpbmNoZWNrbmluZz5dXSBbLS1dIFs8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQ6ICVkIgorbXNnc3RyICJtaXNzbHlja2FkZXM6ICVkIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egc3ltYm9saXNrYSBsw6Rua2VuICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZmlsZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBzeW1ib2xpc2sgbMOkbmstZmlsICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyBmb3Igc3ltbGluayAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBvYmpla3RldCAlcyBmw7ZyIHN5bWJvbGlza2EgbMOkbmtlbiAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjQxMworbXNnaWQgIiIKKyJjb21iaW5lZCBkaWZmIGZvcm1hdHMoJy1jJyBhbmQgJy0tY2MnKSBhcmUgbm90IHN1cHBvcnRlZCBpblxuIgorImRpcmVjdG9yeSBkaWZmIG1vZGUoJy1kJyBhbmQgJy0tZGlyLWRpZmYnKS4iCittc2dzdHIgIiIKKyJrb21iaW5lcmFkZSBkaWZmLWZvcm1hdCAoXCItY1wiIG9jaCBcIi0tY2NcIikgc3TDtmRzIGludGUgaVxuIgorImthdGFsb2dkaWZmbMOkZ2UgKFwiLWRcIiBvY2ggXCItLWRpci1kaWZmXCIpLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJib3RoIGZpbGVzIG1vZGlmaWVkOiAnJXMnIGFuZCAnJXMnLiIKK21zZ3N0ciAiYsOkZ2dlIGZpbGVybmEgw6RuZHJhZGU6IFwiJXNcIiBvY2ggXCIlc1wiLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjYzNgorbXNnaWQgIndvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuIgorbXNnc3RyICJmaWxlbiBpIGFyYmV0c2thdGFsb2dlbiBsw6RtbmFkZXMga3Zhci4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcG9yYXJ5IGZpbGVzIGV4aXN0IGluICclcycuIgorbXNnc3RyICJ0ZW1wb3LDpHJhIGZpbGVyIGZpbm5zIGkgXCIlc1wiLiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0OAorbXNnaWQgInlvdSBtYXkgd2FudCB0byBjbGVhbnVwIG9yIHJlY292ZXIgdGhlc2UuIgorbXNnc3RyICJkdSBrYW5za2UgdmlsbCBzdMOkZGEgZWxsZXIgcsOkZGRhIGRlbS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTcKK21zZ2lkICJ1c2UgYGRpZmYuZ3VpdG9vbGAgaW5zdGVhZCBvZiBgZGlmZi50b29sYCIKK21zZ3N0ciAiYW52w6RuZCBcImRpZmYuZ3VpdG9vbFwiIGlzdMOkbGxldCBmw7ZyIFwiZGlmZi50b29sXCIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAidXRmw7ZyIGRpZmYgZsO2ciBoZWxhIGthdGFsb2dlbiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwMQorbXNnaWQgImRvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbCIKK21zZ3N0ciAiZnLDpWdhIGludGUgdmlkIHN0YXJ0IGF2IGRpZmYtdmVya3R5ZyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNgorbXNnaWQgInVzZSBzeW1saW5rcyBpbiBkaXItZGlmZiBtb2RlIgorbXNnc3RyICJhbnbDpG5kIHN5bWJvbGlza2EgbMOkbmthciBpIGthdGFsb2dkaWZmbMOkZ2UiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDcKK21zZ2lkICJ0b29sIgorbXNnc3RyICJ2ZXJrdHlnIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA4Cittc2dpZCAidXNlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sIgorbXNnc3RyICJhbnbDpG5kIGFuZ2l2ZXQgZGlmZi12ZXJrdHlnIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICJ2aXNhIGVuIGxpc3RhIMO2dmVyIGRpZmYtdmVya3R5ZyBzb20ga2FuIGFudsOkbmRhcyBtZWQgXCItLXRvb2xcIiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMworbXNnaWQgIiIKKyJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uIC0gemVybyBleGl0ICIKKyJjb2RlIgorbXNnc3RyICIiCisibMOldCBcImdpdC1kaWZmdG9vbFwiIGF2YnJ5dGEgbsOkciBldHQgYW5yb3BhdCBkaWZmLXZlcmt0eWcgZ2VyIHJldHVydsOkcmRlICIKKyJza2lsdCBmcsOlbiBub2xsIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICJhbmdlIGVnZXQga29tbWFuZG8gZsO2ciBhdHQgdmlzYSBkaWZmYXIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTcKK21zZ2lkICJwYXNzZWQgdG8gYGRpZmZgIgorbXNnc3RyICJzw6RuZGVzIHRpbGwgXCJkaWZmXCIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICJkaWZmdG9vbCBrcsOkdmVyIGVuIGFyYmV0c2thdGFsb2cgZWxsZXIgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczOQorbXNnaWQgIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1kaXItZGlmZiDDpHIgaW5rb21wYXRpYmVsdCBtZWQgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc0MgorbXNnaWQgIi0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZ3VpLCAtLXRvb2wgb2NoIC0tZXh0Y21kIMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1MAorbXNnaWQgIm5vIDx0b29sPiBnaXZlbiBmb3IgLS10b29sPTx0b29sPiIKK21zZ3N0ciAiaW5nZXQgPHZlcmt0eWc+IGFuZ2F2cyBmw7ZyIC0tdG9vbD08dmVya3R5Zz4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTcKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgImluZ2V0IDxrb21tYW5kbz4gYW5nYXZzIGbDtnIgLS1leHRjbWQ9PGtvbW1hbmRvPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8ZmxhZ2dvcj4gPG1pbGrDtnZhcmlhYmVsPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgInR5cCIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQxCittc2dpZCAiZGVmYXVsdCBmb3IgZ2l0X2Vudl8qKC4uLikgdG8gZmFsbCBiYWNrIG9uIgorbXNnc3RyICJzdGFuZGFyZCBmw7ZyIGdpdF9lbnZfKiguLi4pIGF0dCBmYWxsYSB0aWxsYmFrYSBww6UiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKK21zZ3N0ciAidmFyIHR5c3QsIGFudsOkbmQgYmFyYSBnaXRfZW52XyooKSBzb20gcmVzdWx0YXR2w6RyZGUiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKK21zZ3N0ciAiIgorImZsYWdnYW4gXCItLWRlZmF1bHRcIiBmw7ZydsOkbnRhciBldHQgc2FubmluZ3N2w6RyZGUgbWVkIFwiLS10eXBlPWJvb2xcIiwgaW50ZSAiCisiXCIlc1wiIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgorbXNnc3RyICIiCisiZmxhZ2dhbiBcIi0tZGVmYXVsdFwiIGbDtnJ2w6RudGFyIGV0dCB0ZWNrZW5sw7ZzdCBsw6VuZ3QgdsOkcmRlIG1lZCBcIi0tdHlwZT11bG9uZyIKKyJcIiwgaW50ZSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyOQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3QtZmxhZ2dvcl0iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo4NTIKK21zZ2lkICJFcnJvcjogQ2Fubm90IGV4cG9ydCBuZXN0ZWQgdGFncyB1bmxlc3MgLS1tYXJrLXRhZ3MgaXMgc3BlY2lmaWVkLiIKK21zZ3N0ciAiRmVsOiBLYW4gaW50ZSBleHBvcnRlcmEgbsOkc3RsYWRlIHRhZ2dhciBzw6V2aWRhIGludGUgLS1tYXJrLXRhZ3MgYW5nZXMuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgInZpc2EgZsO2cmxvcHAgZWZ0ZXIgPG4+IG9iamVrdCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgInbDpGxqIGhhbnRlcmluZyBhdiBzaWduZXJhZGUgdGFnZ2FyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NworbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgInbDpGxqIGhhbnRlcmluZyBhdiB0YWdnYXIgc29tIGhhciB0YWdnZmlsdHJlcmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCittc2dzdHIgInbDpGxqIGhhbnRlcmluZyBhdiBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlbiBpIGFsdGVybmF0aXYgdGVja2Vua29kbmluZyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjMKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiRHVtcGEgbcOkcmtlbiB0aWxsIGZpbGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2NQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAiSW1wb3J0ZXJhIG3DpHJrZW4gZnLDpW4gZmlsZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY5Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiSW1wb3J0ZXJhIG3DpHJrZW4gZnLDpW4gZmlsZW4sIG9tIGRlbiBmaW5ucyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAiRmVqa2EgdGFnZ2FyZSBuw6RyIHRhZ2dlbiBzYWtuYXIgZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTczCittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIlNrcml2IHV0IGhlbGEgdHLDpGRldCBmw7ZyIHZhcmplIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJBbnbDpG5kIGRvbmUtZnVua3Rpb25lbiBmw7ZyIGF0dCBhdnNsdXRhIHN0csO2bW1lbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzYKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIkhvcHBhIMO2dmVyIHNrcml2bmluZyBhdiBibG9iLWRhdGEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc3IGJ1aWx0aW4vbG9nLmM6MTcwNQorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgInJlZmVyZW5zc3BlY2lmaWthdGlvbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzgKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIkFwcGxpY2VyYSByZWZlcmVuc3NwZWNpZmlrYXRpb24gcMOlIGV4cG9ydGVyYWRlIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc5Cittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAiYW5vbnltaXNlcmEgdXRkYXRhIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKK21zZ3N0ciAiUmVmZXJlcmEgZsO2csOkbGRyYXIgc29tIGludGUgZmlubnMgaSBmYXN0LWV4cG9ydC1zdHLDtm0gbWVkIG9iamVrdC1pZCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAiVmlzYSB1cnNwcnVuZ2xpZ2Egb2JqZWt0LWlkIGbDtnIgYmxvYmJhci9pbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4NQorbXNnaWQgIkxhYmVsIHRhZ3Mgd2l0aCBtYXJrIGlkcyIKK21zZ3N0ciAiTcOkcmsgdGFnZ2FyIG1lZCBtw6Rya2UtaWQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICJLYW4gaW50ZSBhbmdlIGLDpWRlIC0taW1wb3J0LW1hcmtzIG9jaCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8ZmxhZ2dvcj5dIFs8YXJraXY+IFs8cmVmc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPGZsYWdnb3I+XSA8Z3J1cHA+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxmbGFnZ29yPl0gWyg8YXJraXY+IHwgPGdydXBwPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzcKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiZmV0Y2gucGFyYWxsZWwga2FuIGludGUgdmFyYSBuZWdhdGl2dCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOSBidWlsdGluL3B1bGwuYzoyMDQKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICJow6RtdGEgZnLDpW4gYWxsYSBmasOkcnJhciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyNDgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICJzdMOkbGwgaW4gdXBwc3Ryw7ZtIGbDtnIgZ2l0IHB1bGwvZmV0Y2giCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMgYnVpbHRpbi9wdWxsLmM6MjA3Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJsw6RnZyB0aWxsIGkgLmdpdC9GRVRDSF9IRUFEIGlzdMOkbGxldCBmw7ZyIGF0dCBza3JpdmEgw7Z2ZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MjEwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICJzw7ZrdsOkZyB0aWxsIHVwbG9hZCBwYWNrIHDDpSBmasOkcnJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0NgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCByZWZlcmVuY2UiCittc2dzdHIgInR2aW5nYSDDtnZlcnNrcml2bmluZyBhdiBsb2thbCByZWZlcmVucyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAiaMOkbXRhIGZyw6VuIGZsZXJhIGZqw6RycmFyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUwIGJ1aWx0aW4vcHVsbC5jOjIxNAorbXNnaWQgImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgImjDpG10YSBhbGxhIHRhZ2dhciBvY2ggYXNzb2NpZXJhZGUgb2JqZWt0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJow6RtdGEgaW50ZSBhbGxhIHRhZ2dhciAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgImFudGFsIHVuZGVybW9kdWxlciBzb20gaMOkbXRhcyBwYXJhbGxlbGx0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjIxNworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICJyZW5zYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIGVqIGzDpG5ncmUgcMOlIGZqw6RycmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiIgorInJlbnNhIGxva2FsYSB0YWdnYXIgaW50ZSBsw6RuZ3JlIHDDpSBmasOkcnJlbiBvY2ggc2tyaXYgw7Z2ZXIgw6RuZHJhZGUgdGFnZ2FyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU5IGJ1aWx0aW4vZmV0Y2guYzoxODIgYnVpbHRpbi9wdWxsLmM6MTQxCittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJvbi1kZW1hbmQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjAKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJzdHlyIHJla3Vyc2l2IGjDpG10bmluZyBhdiB1bmRlcm1vZHVsZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjI1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgImJlaMOlbGwgaMOkbXRhZGUgcGFrZXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAidGlsbMOldCB1cHBkYXRlcmluZyBhdiBIRUFELXJlZmVyZW5zIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjI4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAiZsO2cmRqdXBhIGhpc3RvcmlrIGbDtnIgZ3J1bmQga2xvbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICJmw7ZyZGp1cGEgaGlzdG9yaWsgZsO2ciBncnVuZCBrbG9uIGJhc2VyYWQgcMOlIHRpZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NyBidWlsdGluL3B1bGwuYzoyMzEKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAia29udmVydGVyYSB0aWxsIGtvbXBsZXR0IGFya2l2IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBpIGLDtnJqYW4gYXYgdW5kZXJtb2R1bGVucyBzw7ZrdsOkZ3N1dGRhdGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKyJzdGFuZGFyZCBmw7ZyIHJla3Vyc2l2IGjDpG10bmluZyBhdiB1bmRlcm1vZHVsZXIgKGzDpGdyZSBwcmlvcml0ZXQgw6RuICIKKyJrb25maWd1cmF0aW9uc2ZpbGVyKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4NyBidWlsdGluL3B1bGwuYzoyMzQKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgInRhciBlbW90IHJlZmVyZW5zZXIgc29tIHVwcGRhdGVyYXIgLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg4IGJ1aWx0aW4vcHVsbC5jOjIzNgorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAicmVmZXJlbnNrYXJ0YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMzcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAiYW5nZSByZWZlcmVuc2thcnRhIGbDtnIgXCJmZXRjaFwiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgInJhcHBvcnRlcmEgYXR0IHZpIGJhcmEgaGFyIG9iamVrdCBuw6ViYXJhIGZyw6VuIGRldHRhIG9iamVrdGV0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk5Cittc2dpZCAicnVuICdnYyAtLWF1dG8nIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJrw7ZyIFwiZ2MgLS1hdXRvXCIgZWZ0ZXIgaMOkbXRuaW5nIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjI0NgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAic2UgZWZ0ZXIgdHZpbmdhZGUgdXBwZGF0ZXJpbmdhciBpIGFsbGEgdXBwZGF0ZXJhZGUgZ3JlbmFyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAic2tyaXYgaW5jaGVja2luZ3NncmFmZW4gZWZ0ZXIgaMOkbXRuaW5nIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgZmrDpHJyLXJlZmVyZW5zZW4gSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICJrb25maWd1cmF0aW9uZW4gZsO2ciBmZXRjaC5vdXRwdXQgaW5uZWjDpWxsZXIgb2dpbHRpZ3QgdsOkcmRlICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIm9iamVrdGV0ICVzIGhpdHRhZGVzIGludGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTUKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIlvDoGpvdXJdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyZWZ1c2VyYWRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY5Cittc2dpZCAiY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2giCittc2dzdHIgImthbiBpbnRlIGjDpG10YSBpIGFrdHVlbGwgZ3JlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW3VwcGRhdGVyYWQgdGFnZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODAgYnVpbHRpbi9mZXRjaC5jOjgxNyBidWlsdGluL2ZldGNoLmM6ODM5CisjOiBidWlsdGluL2ZldGNoLmM6ODUxCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgImt1bmRlIGludGUgdXBwZGF0ZXJhIGxva2FsIHJlZiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NAorbXNnaWQgIndvdWxkIGNsb2JiZXIgZXhpc3RpbmcgdGFnIgorbXNnc3RyICJza3VsbGUgc2tyaXZhIMO2dmVyIGJlZmludGxpZyB0YWdnIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbbnkgdGFnZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltueSBncmVuXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW255IHJlZl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJ0dmluZ2FkIHVwcGRhdGVyaW5nIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAibm9uLWZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiZWogc25hYmJzcG9sYWQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NzcKK21zZ2lkICIiCisiRmV0Y2ggbm9ybWFsbHkgaW5kaWNhdGVzIHdoaWNoIGJyYW5jaGVzIGhhZCBhIGZvcmNlZCB1cGRhdGUsXG4iCisiYnV0IHRoYXQgY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIFRvIHJlLWVuYWJsZSwgdXNlICctLXNob3ctZm9yY2VkLXVwZGF0ZXMnXG4iCisiZmxhZyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZScuIgorbXNnc3RyICIiCisiRmV0Y2ggdmlzYXIgbm9ybWFsdCB2aWxrYSBncmVuYXIgc29tIHR2w6VuZ3N1cHBkYXRlcmF0cywgbWVuIHRlc3RldCBoYXIgIgorInNsYWdpdHNcbiIKKyJhdi4gRsO2ciBhdHQgc2zDpSBww6UgaWdlbiwgYW52w6RuZCBmbGFnZ2FuIFwiLS1zaG93LWZvcmNlZC11cGRhdGVzXCIgZWxsZXIga8O2clxuIgorIlwiZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlXCIuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBjaGVjayBmb3JjZWQgdXBkYXRlcy4gWW91IGNhbiB1c2VcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBvciBydW4gJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgIgorImZhbHNlJ1xuIgorIiB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorbXNnc3RyICIiCisiRGV0IHRvZyAlLjJmIHNla3VuZGVyIGF0dCBzZSBlZnRlciB0dsOlbmdzdXBwZGF0ZXJpbmdhci4gRHUga2FuIGFudsOkbmRhXG4iCisiXCItLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXNcIiBlbGxlciBrw7ZyYSBcImdpdCBjb25maWcgZmV0Y2guIgorInNob3dGb3JjZWRVcGRhdGVzXG4iCisiZmFsc2VcIiBmw7ZyIGF0dCB1bmR2aWthIHRlc3RldC5cbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIHPDpG5kZSBpbnRlIGFsbGEgbsO2ZHbDpG5kaWdhIG9iamVrdFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgImF2dmlzYSAlcyBkw6UgZ3J1bmRhIHLDtnR0ZXIgaW50ZSBrYW4gdXBwZGF0ZXJhcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMTcgYnVpbHRpbi9mZXRjaC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIkZyw6VuICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorInZpc3NhIGxva2FsYSByZWZlcmVuc2VyIGt1bmRlIGludGUgdXBwZGF0ZXJhczsgdGVzdGEgYXR0IGvDtnJhXG4iCisiIFwiZ2l0IHJlbW90ZSBwcnVuZSAlc1wiIGbDtnIgYXR0IHRhIGJvcnQgZ2FtbGEgZ3JlbmFyIHNvbSBzdMOlciBpIGtvbmZsaWt0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMga29tbWVyIGJsaSBkaW5nbGFuZGUpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBoYXIgYmxpdml0IGRpbmdsYW5kZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbYm9ydHRhZ2VuXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTkgYnVpbHRpbi9yZW1vdGUuYzoxMDM1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIoaW5nZW4pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIlbDpGdyYXIgaMOkbXRhIHRpbGwgYWt0dWVsbCBncmVuICVzIGkgZXR0IGlja2UtbmFrZXQgYXJraXYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIkZsYWdnYW4gXCIlc1wiIG9jaCB2w6RyZGV0IFwiJXNcIiDDpHIgaW50ZSBnaWx0aWd0IGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiRmxhZ2dhbiBcIiVzXCIgaWdub3JlcmFzIGbDtnIgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MTIKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgImZsZXJhIGdyZW5hciB1cHB0w6Rja3RlcywgaW5rb21wYXRpYmVsdCBtZWQgLS1zZXQtdXBzdHJlYW0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI3Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgInN0w6RsbGVyIGludGUgaW4gdXBwc3Ryw7Ztc2dyZW4gZsO2ciBlbiBmasOkcnJzcMOlcmFuZGUgZ3JlbiBww6UgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI5Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHRhZyIKK21zZ3N0ciAic3TDpGxsZXIgaW50ZSBpbiB1cHBzdHLDtm0gZsO2ciBlbiBmasOkcnJ0YWciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMxCittc2dpZCAidW5rbm93biBicmFuY2ggdHlwZSIKK21zZ3N0ciAib2vDpG5kIGdyZW50eXAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMzCittc2dpZCAiIgorIm5vIHNvdXJjZSBicmFuY2ggZm91bmQuXG4iCisieW91IG5lZWQgdG8gc3BlY2lmeSBleGFjdGx5IG9uZSBicmFuY2ggd2l0aCB0aGUgLS1zZXQtdXBzdHJlYW0gb3B0aW9uLiIKK21zZ3N0ciAiIgorImhpdHRhZGUgaW5nZW4ga8OkbGxncmVuLlxuIgorImR1IG3DpXN0ZSBhbmdlIGV4YWt0IGVuIGdyZW4gbWVkIGZsYWdnYW4gLS1zZXQtdXBzdHJlYW0uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU1OSBidWlsdGluL2ZldGNoLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICJIw6RtdGFyICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY5IGJ1aWx0aW4vZmV0Y2guYzoxNjI0IGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmZXRjaCAnJXMnIChleGl0IGNvZGU6ICVkKVxuIgorbXNnc3RyICJrdW5kZSBpbnRlIGjDpG10YSBcIiVzXCIgKGZlbGtvZDogJWQpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjg0Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJbmdldCBmasOkcnJhcmtpdiBhbmdhdnMuIEFuZ2UgYW50aW5nZW4gZW4gVVJMIGVsbGVyIG5hbW5ldCBww6UgZXR0XG4iCisiZmrDpHJyYXJraXYgc29tIG55YSBpbmNoZWNrbmluZ2FyIHNrYWxsIGjDpG10YXMgZnLDpW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcyMQorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIkR1IG3DpXN0ZSBhbmdlIG5hbW5ldCBww6UgZW4gdGFnZy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcxCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTmVnYXRpdmEgZGp1cCBzdMO2ZHMgaW50ZSBpIC0tZGVlcGVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3MworbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZGVlcGVuIG9jaCAtLWRlcHRoIMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzgKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1kZXB0aCBvY2ggLS11bnNoYWxsb3cga2FuIGludGUgYW52w6RuZGFzIHNhbXRpZGlndCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODAKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS11bnNoYWxsb3cga2FuIGludGUgYW52w6RuZGFzIHDDpSBldHQga29tcGxldHQgYXJraXYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzk2Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIHRhciBpbnRlIG5hbW5ldCBww6UgZXR0IGFya2l2IHNvbSBhcmd1bWVudCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3OTgKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIGthbiBpbnRlIGFuZ2VzIG1lZCByZWZlcmVuc3NwZWNpZmlrYXRpb25lciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiRmrDpHJyZW4gZWxsZXIgZmrDpHJyZ3J1cHBlbiBmaW5ucyBpbnRlOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MTQKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIkthbiBpbnRlIGjDpG10YSBmcsOlbiBncnVwcCBvY2ggYW5nZSByZWZlcmVuc3NwZWNpZmlrYXRpb25lciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MzIKK21zZ2lkICIiCisiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyJwYXJ0aWFsY2xvbmUiCittc2dzdHIgIiIKKyItLWZpbHRlciBrYW4gZW5kYXN0IGFudsOkbmRhcyBtZWQgZmrDpHJyZW4ga29uZmlndXJlcmFkIGkgZXh0ZW5zaW9ucy4iCisicGFydGlhbGNsb25lIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxOAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZWRkZWxhbmRlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbD5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgImZ5bGwgaSBsb2dnZW4gbWVkIHNvbSBtZXN0IDxuPiBwb3N0ZXIgZnLDpW4gc2hvcnRsb2ciCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgImFsaWFzIGbDtnIgLS1sb2cgKGF2csOlZHMpIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODAKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJ0ZXh0IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgImlubGVkIG1lZGRlbGFuZGUgbWVkIDx0ZXh0PiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgyCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgImZpbCBhdHQgbMOkc2EgZnLDpW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs8ZmxhZ2dvcj5dIFs8bcO2bnN0ZXI+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVrdD5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEyCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxpbmNoZWNrbmluZz5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKyJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8aW5jaGVja25pbmc+XV0gWy0tbm8tY29udGFpbnMgWzxpbmNoZWNrbmluZz5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICJjaXRlcmEgcGxhdHNow6VsbGFyZSBwYXNzYW5kZSBmw7ZyIHNrYWwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgImNpdGVyYSBwbGF0c2jDpWxsYXJlIHBhc3NhbmRlIGbDtnIgcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICJjaXRlcmEgcGxhdHNow6VsbGFyZSBwYXNzYW5kZSBmw7ZyIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICJjaXRlcmEgcGxhdHNow6VsbGFyZSBwYXNzYW5kZSBmw7ZyIFRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCA8bj4gdHLDpGZmYWRlIHJlZnMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzkgYnVpbHRpbi90YWcuYzo0MzkKK21zZ2lkICJyZXNwZWN0IGZvcm1hdCBjb2xvcnMiCittc2dzdHIgImFudsOkbmQgZm9ybWF0ZsOkcmdlciIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgcmVmZXJlbnNlciBzb20gcGVrYXIgcMOlIG9iamVrdGV0IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ0Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgcmVmZXJlbnNlciBzb20gc2xhZ2l0cyBzYW1tYW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgcmVmZXJlbnNlciBzb20gZWogc2xhZ2l0cyBzYW1tYW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJ2aXNhIGVuZGFzdCByZWZlcmVuc2VyIHNvbSBpbm5laMOlbGxlciBpbmNoZWNrbmluZ2VuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgcmVmZXJlbnNlciBzb20gaW50ZSBpbm5laMOlbGxlciBpbmNoZWNrbmluZ2VuIgorCisjOiBidWlsdGluL2ZzY2suYzo2OCBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9mc2NrLmM6MTQ4Cittc2dpZCAidW5rbm93biIKK21zZ3N0ciAib2vDpG5kIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiBlcnJvciBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMDAgYnVpbHRpbi9mc2NrLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluICVzICVzOiAlcyIKK21zZ3N0ciAiZmVsIGkgJXMgJXM6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiB3YXJuaW5nIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nIGluICVzICVzOiAlcyIKK21zZ3N0ciAidmFybmluZyBpICVzICVzOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTQzIGJ1aWx0aW4vZnNjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gbGluayBmcm9tICU3cyAlcyIKK21zZ3N0ciAidHJhc2lnIGzDpG5rIGZyw6VuICU3cyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTU1Cittc2dpZCAid3Jvbmcgb2JqZWN0IHR5cGUgaW4gbGluayIKK21zZ3N0ciAiZmVsIG9iamVrdHR5cCBpIGzDpG5rIgorCisjOiBidWlsdGluL2ZzY2suYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCisiICAgICAgICAgICAgICB0byAlN3MgJXMiCittc2dzdHIgIiIKKyJ0cmFzaWcgbMOkbmsgZnLDpW4gJTdzICVzXG4iCisiICAgICAgICAgICAgdGlsbCAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nICVzICVzIgorbXNnc3RyICJzYWtuYXQgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlYWNoYWJsZSAlcyAlcyIKK21zZ3N0ciAib27DpWJhcnQgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJkYW5nbGluZyAlcyAlcyIKK21zZ3N0ciAiaMOkbmdhbmRlICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMzkKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxvc3QtZm91bmQiCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBhdnNsdXRhIFwiJXNcIiIKKworIzogYnVpbHRpbi9mc2NrLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIgorbXNnc3RyICJLb250cm9sbGVyYXIgJXMiCisKKyMgVmFndWUgb3JpZ2luYWwsIG5vdCBuZXR3b3JraW5nLXJlbGF0ZWQsIGJ1dCByYXRoZXIgcmVsYXRlZCB0byB0aGUgYWN0dWFsCisjIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlLgorIzogYnVpbHRpbi9mc2NrLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSAoJWQgb2JqZWN0cykiCittc2dzdHIgIktvbnRyb2xsZXJhciBrb25uZWt0aXZpdGV0ICglZCBvYmpla3QpIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgJXMiCittc2dzdHIgIktvbnRyb2xsZXJhciAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI5Cittc2dpZCAiYnJva2VuIGxpbmtzIgorbXNnc3RyICJ0cmFzaWdhIGzDpG5rYXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJyb290ICVzIgorbXNnc3RyICJyb3RlbiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIgorbXNnc3RyICJ0YWdnYWQgJXMgJXMgKCVzKSBpICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciCittc2dzdHIgIiVzOiBvYmpla3QgdHJhc2lndCBlbGxlciBzYWtuYXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiVzOiBvZ2lsdGlnIHJlZmxvZy1wb3N0ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lcyIKK21zZ3N0ciAiS29udHJvbGxlcmFyIHJlZmxvZyAlcy0+JXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgJXMiCittc2dzdHIgIiVzOiBvZ2lsdGlnIHNoYTEtcGVrYXJlICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJXM6IGludGUgZW4gaW5jaGVja25pbmchIgorCisjOiBidWlsdGluL2ZzY2suYzo2MDkKK21zZ2lkICJub3RpY2U6IE5vIGRlZmF1bHQgcmVmZXJlbmNlcyIKK21zZ3N0ciAib2JzOiBJbmdhIGbDtnJ2YWxkYSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3Npbmc6ICVzIgorbXNnc3RyICIlczogb2JqZWt0ZXQgdHJhc2lndCBlbGxlciBzYWtuYXM6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiJXM6IG9iamVrdGV0IGt1bmRlIGludGUgdG9sa2FzOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaGExIGZpbGU6ICVzIgorbXNnc3RyICJvZ2lsdGlnIHNoYTEtZmlsOiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAiS29udHJvbGxlcmFyIG9iamVrdGthdGFsb2ciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAiS29udHJvbGxlcmFyIG9iamVrdGthdGFsb2dlciIKKworIzogYnVpbHRpbi9mc2NrLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIktvbnRyb2xsZXJhciAlcy1sw6RuayIKKworIzogYnVpbHRpbi9mc2NrLmM6Njk1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICJvZ2lsdGlndCAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyB0byBzb21ldGhpbmcgc3RyYW5nZSAoJXMpIgorbXNnc3RyICIlcyBwZWthciBww6UgbsOlZ290IGtvbnN0aWd0ICglcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZGV0YWNoZWQgSEVBRCBwb2ludHMgYXQgbm90aGluZyIKK21zZ3N0ciAiJXM6IGZyw6Vua29wcGxhdCBIRUFEIHBla2FyIHDDpSBpbmdlbnRpbmciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgIm9iczogJXMgcGVrYXIgcMOlIGVuIG9mw7ZkZCBncmVuICglcykiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyNAorbXNnaWQgIkNoZWNraW5nIGNhY2hlIHRyZWUiCittc2dzdHIgIktvbnRyb2xsZXJhciBjYWNoZXRyw6RkIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIiVzOiBvZ2lsdGlnIHNoYTEtcGVrYXJlIGkgY2FjaGV0csOkZCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzM4Cittc2dpZCAibm9uLXRyZWUgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiaWNrZS10csOkZCBpIGNhY2hldHLDpGQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8ZmxhZ2dvcj5dIFs8b2JqZWt0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NQorbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAidmlzYSBvbsOlYmFyYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAidmlzYSBkaW5nbGFuZGUgb2JqZWt0IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAicmFwcG9ydGVyYSB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICJyYXBwb3J0ZXJhIHJvdG5vZGVyIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzkKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiZ8O2ciBpbmRleG9qZWt0IHRpbGwgaHV2dWRub2RlciIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJnw7ZyIHJlZmxvZ2dhciB0aWxsIGh1dnVkbm9kZXIgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgxCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgInRhIMOkdmVuIGjDpG5zeW4gdGlsbCBwYWtldCBvY2ggc3VwcGxlcmFuZGUgb2JqZWt0IgorCisjIFZhZ3VlIG9yaWdpbmFsLCBub3QgbmV0d29ya2luZy1yZWxhdGVkLCBidXQgcmF0aGVyIHJlbGF0ZWQgdG8gdGhlIGFjdHVhbAorIyBvYmplY3RzIGluIHRoZSBkYXRhYmFzZS4KKyM6IGJ1aWx0aW4vZnNjay5jOjc4MgorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICJrb250cm9sbGVyYSBlbmRhc3Qga29ubmVrdGl2aXRldCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgzCittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJha3RpdmVyYSBzdHJpa3RhcmUga29udHJvbGwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICJza3JpdiBkaW5nbGFuZGUgb2JqZWt0IGkgLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODYgYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgInZpc2EgZsO2cmxvcHAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NworbXNnaWQgInNob3cgdmVyYm9zZSBuYW1lcyBmb3IgcmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInZpc2Egb3JkcmlrYSBuYW1uIGbDtnIgbsOlYmFyYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg0NiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICJLb250cm9sbGVyYXIgb2JqZWt0IgorCisjOiBidWlsdGluL2ZzY2suYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBtaXNzaW5nIgorbXNnc3RyICIlczogb2JqZWt0IHNha25hcyIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAib2dpbHRpZyBwYXJhbWV0ZXI6IGbDtnJ2w6RudGFkZSBzaGExLCBmaWNrIFwiJXNcIiIKKworIzogYnVpbHRpbi9nYy5jOjM1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZnN0YXQgJXM6ICVzIgorbXNnc3RyICJNaXNzbHlja2FkZXMgdGEgc3RhdHVzIChmc3RhdCkgcMOlICVzOiAlcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdG9sa2EgXCIlc1wiIHbDpHJkZSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgc3RhdHVzIHDDpSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODQgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIFwiJXNcIiIKKworIzogYnVpbHRpbi9nYy5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGxhc3QgZ2MgcnVuIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcuIFBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisiYW5kIHJlbW92ZSAlcy5cbiIKKyJBdXRvbWF0aWMgY2xlYW51cCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgdW50aWwgdGhlIGZpbGUgaXMgcmVtb3ZlZC5cbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIlNlbmFzdGUga8O2cm5pbmdlbiBhdiBnaXQgZ2MgcmFwcG9ydGVyYWRlIGbDtmxqYW5kZS4gRml4YSBncnVuZHByb2JsZW1ldFxuIgorIm9jaCB0YSBib3J0ICVzLlxuIgorIkF1dG9tYXRpc2sgc3TDpGRuaW5nIGtvbW1lciBpbnRlIHV0ZsO2cmFzIGbDtnJyw6RuIGZpbGVuIHRhcyBib3J0LlxuIgorIlxuIgorIiVzIgorCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgInJlbnNhIGVqIHJlZmVyZXJhZGUgb2JqZWt0IgorCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJ2YXIgbWVyIGdydW5kbGlnICjDtmthciBrw7ZydGlkZW4pIgorCisjOiBidWlsdGluL2djLmM6NTQyCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAiYWt0aXZlcmEgYXV0by1nYy1sw6RnZSIKKworIzogYnVpbHRpbi9nYy5jOjU0NQorbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICJ0dmluZ2EgZ2Mta8O2cm5pbmcgw6R2ZW4gb20gZW4gYW5uYW4gZ2Mga2Fuc2tlIGvDtnJzIgorCisjOiBidWlsdGluL2djLmM6NTQ4Cittc2dpZCAicmVwYWNrIGFsbCBvdGhlciBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayIKK21zZ3N0ciAicGFja2Egb20gYWxsYSBwYWtldCBmw7ZydXRvbSBkZXQgc3TDtnJzdGEgcGFrZXRldCIKKworIzogYnVpbHRpbi9nYy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgZ2MubG9nZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIHbDpHJkZXQgJXMgZsO2ciBnYy5sb2dleHBpcnkiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSB2w6RyZGV0ICVzIGbDtnIgcHJ1bmUgZXhwaXJ5IgorCisjOiBidWlsdGluL2djLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICJQYWNrYXIgYXJraXZldCBhdXRvbWF0aXNrdCBpIGJha2dydW5kZW4gZsO2ciBvcHRpbWFsIHByZXN0YW5kYS5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIlBhY2thciBhcmtpdmV0IGF1dG9tYXRpc2t0IGbDtnIgb3B0aW1hbCBwcmVzdGFuZGEuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiU2UgXCJnaXQgaGVscCBnY1wiIGbDtnIgbWFudWVsbCBodXNow6VsbG5pbmcuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyJnYyBrw7ZycyByZWRhbiBww6UgbWFza2luZW4gXCIlc1wiIHBpZCAlPFBSSXVNQVg+IChhbnbDpG5kIC0tZm9yY2Ugb20gc8OlIGludGUgIgorIsOkciBmYWxsZXQpIgorCisjOiBidWlsdGluL2djLmM6Njk0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisiRGV0IGZpbm5zIGbDtnIgbcOlbmdhIG9uw6ViYXJhIGzDtnNhIG9iamVrdDsga8O2ciBcImdpdCBwcnVuZVwiIGbDtnIgYXR0IHRhIGJvcnQgIgorImRlbS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI5Cittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPGZsYWdnb3I+XSBbLWVdIDxtw7Zuc3Rlcj4gWzxyZXY+Li4uXSBbWy0tXSA8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcDogbWlzc2x5Y2thZGVzIHNrYXBhIHRyw6VkLiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkgZm9yICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYW50YWwgdHLDpWRhciBhbmdpdmV0ICglZCkgZsO2ciAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNCBidWlsdGluL2luZGV4LXBhY2suYzoxNzI3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAidHLDpWRzdMO2ZCBzYWtuYXMsIGlnbm9yZXJhciAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDY3IGJ1aWx0aW4vZ3JlcC5jOjU5MiBidWlsdGluL2dyZXAuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIHRyw6RkICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIFwiZ3JlcFwiIGZyw6VuIG9iamVrdCBhdiB0eXBlbiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImZsYWdnYW4gXCIlY1wiIGFudGFyIGV0dCBudW1lcmlza3QgdsOkcmRlIgorCisjOiBidWlsdGluL2dyZXAuYzo4MTUKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICJzw7ZrIGkgaW5kZXhldCBpc3TDpGxsZXQgZsO2ciBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE3Cittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgInPDtmsgaSBpbm5laMOlbGwgc29tIGludGUgaGFudGVyYXMgYXYgZ2l0IgorCisjOiBidWlsdGluL2dyZXAuYzo4MTkKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgInPDtmsgaSBiw6VkZSBzcMOlcmFkZSBvY2ggb3Nww6VyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjEKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImlnbm9yZXJhIGZpbGVyIGFuZ2l2bmEgaSBcIi5naXRpZ25vcmVcIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIzCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICJzw7ZrIHZhcmplIHVuZGVybW9kdWwgcmVrdXJzaXZ0IgorCisjOiBidWlsdGluL2dyZXAuYzo4MjYKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzYSByYWRlciBzb20gaW50ZSB0csOkZmZhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI4Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAic2tpZnRsw6RnZXNva8OkbnNsaWcgc8O2a25pbmciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzMAorbXNnaWQgIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIgorbXNnc3RyICJtYXRjaGEgZW5kYXN0IG3Dtm5zdGVyIHZpZCBvcmRncsOkbnNlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODMyCittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgYXMgdGV4dCIKK21zZ3N0ciAiaGFudGVyYSBiaW7DpHJmaWxlciBzb20gdGV4dCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM0Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJ0csOkZmZhIGludGUgbcO2bnN0ZXIgaSBiaW7DpHJmaWxlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM3Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICJoYW50ZXJhIGJpbsOkcmZpbGVyIG1lZCB0ZXh0Y29udi1maWx0ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzOQorbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgInPDtmsgaSB1bmRlcmthdGFsb2dlciAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDEKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImfDpSBzb20gbWVzdCBuZWQgPGRqdXA+IG5pdsOlZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJhbnbDpG5kIHV0w7ZrYWRlIFBPU0lYLXJlZ3VsasOkcmEgdXR0cnljayIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQ4Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJhbnbDpG5kIGdydW5kbMOkZ2dhbmRlIFBPU0lYLXJlZ3VsasOkcmEgdXR0cnljayAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTEKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAidG9sa2EgbcO2bnN0ZXIgc29tIGZpeGVyYWRlIHN0csOkbmdhciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU0Cittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJhbnbDpG5kIFBlcmxrb21wYXRpYmxhIHJlZ3VsasOkcmEgdXR0cnljayIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU3Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgInZpc2EgcmFkbnVtbWVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTgKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgInZpc2Ega29sdW1ubnVtbWVyIGbDtnIgZsO2cnN0YSB0csOkZmYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OQorbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJ2aXNhIGludGUgZmlsbmFtbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYwCittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgInZpc2EgZmlsbmFtbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAidmlzYSBmaWxuYW1uIHJlbGF0aXZhIHRpbGwgdG9wcGthdGFsb2dlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBmaWxuYW1uIGlzdMOkbGxldCBmw7ZyIHRyw6RmZmFkZSByYWRlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgInN5bm9ueW0gZsO2ciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBuYW1uIHDDpSBmaWxlciB1dGFuIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJza3JpdiBOVUwgZWZ0ZXIgZmlsbmFtbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdHLDpGZmYWRlIGRlbGFyIGF2IHJhZGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzYKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJ2aXNhIGFudGFsIHRyw6RmZmFyIGlzdMOkbGxldCBmw7ZyIHRyw6RmZmFkZSByYWRlciIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc3Cittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgImxqdXNtYXJrZXJhIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzkKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAic2tyaXYgdG9tbWEgcmFkZXIgbWVsbGFuIHRyw6RmZmFyIGZyw6VuIG9saWthIGZpbGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODEKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICJ2aXNhIGZpbG5hbW4gZW5kYXN0IGVuIGfDpW5nIG92YW5mw7ZyIHRyw6RmZmFyIGZyw6VuIHNhbW1hIGZpbCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgInZpc2EgPG4+IHJhZGVyIHNhbW1hbmhhbmcgZsO2cmUgb2NoIGVmdGVyIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJ2aXNhIDxuPiByYWRlciBzYW1tYW5oYW5nIGbDtnJlIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgInZpc2EgPG4+IHJhZGVyIHNhbW1hbmhhbmcgZWZ0ZXIgdHLDpGZmYXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MQorbXNnaWQgInVzZSA8bj4gd29ya2VyIHRocmVhZHMiCittc2dzdHIgImFudsOkbmQgPG4+IGpvYmJ0csOlZGFyIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJnZW52w6RnIGbDtnIgLUMgTlVNIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTUKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJ2aXNhIGVuIHJhZCBtZWQgZnVua3Rpb25zbmFtbmV0IGbDtnJlIHRyw6RmZmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTcKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAidmlzYSBkZW4gb21rcmluZ2xpZ2dhbmRlIGZ1bmt0aW9uZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICJsw6RzIG3Dtm5zdGVyIGZyw6VuIGZpbCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAyCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJ0csOkZmZhIDxtw7Zuc3Rlcj4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgImtvbWJpbmVyYSBtw7Zuc3RlciBzb20gYW5nZXMgbWVkIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo5MTYKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiYW5nZSB0csOkZmYgbWVkIHNsdXRzdGF0dXNrb2QgdXRhbiB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgInZpc2EgZW5kYXN0IHRyw6RmZmFyIGZyw6VuIGZpbGVyIHNvbSB0csOkZmZhciBhbGxhIG3Dtm5zdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjAKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAidmlzYSBhbmFseXN0csOkZCBmw7ZyIGdyZXAtdXR0cnljayIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAicGFnZXIiCittc2dzdHIgImJsw6RkZHJhcmUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyNAorbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICJ2aXNhIHRyw6RmZmFkZSBmaWxlciBpIGZpbGJsw6RkZHJhcmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjgKK21zZ2lkICJhbGxvdyBjYWxsaW5nIG9mIGdyZXAoMSkgKGlnbm9yZWQgYnkgdGhpcyBidWlsZCkiCittc2dzdHIgInRpbGzDpXQgYW5yb3BhIGdyZXAoMSkgKGlnbm9yZXJhcyBhdiBkZXR0YSBieWdnZSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk5MgorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4iCittc2dzdHIgImluZ2V0IG3Dtm5zdGVyIGFuZ2F2cyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyOAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICItLW5vLWluZGV4IG9jaCAtLXVudHJhY2tlZCBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIHJldmlzaW9uZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgcmV2aXNpb246ICVzIgorbXNnc3RyICJrYW4gaW50ZSBzbMOlIHVwcCByZXZpc2lvbjogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNjcKK21zZ2lkICJpbnZhbGlkIG9wdGlvbiBjb21iaW5hdGlvbiwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJvZ2lsdGlnIGtvbWJpbmF0aW9uIGF2IGZsYWdnb3IsIGlnbm9yZXJhciAtLXRocmVhZHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjEwNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDAwCittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiCittc2dzdHIgInRyw6Vkc3TDtmQgc2FrbmFzLCBpZ25vcmVyYXIgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDczIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgImZlbGFrdGlndCBhbnRhbCB0csOlZGFyIGFuZ2l2ZXQgKCVkKSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA5NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIGZ1bmdlcmFyIGVuZGFzdCBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTExOQorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgImZsYWdnYW4gc3TDtmRzIGludGUgbWVkIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI1Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWNhY2hlZCBvY2ggLS11bnRyYWNrZWQga2FuIGludGUgYW52w6RuZGFzIG1lZCAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTMxCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMiCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGthbiBpbnRlIGFudsOkbmRhcyBmw7ZyIHNww6VyYXQgaW5uZWjDpWxsIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTM5Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICJiw6VkZSAtLWNhY2hlZCBvY2ggdHLDpGQgYW5nYXZzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXA+XSBbLXddIFstLXBhdGg9PGZpbD4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSBbLS1dICIKKyI8ZmlsPi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJvYmpla3R0eXAiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJza3JpdiBvYmpla3RldCB0aWxsIG9iamVrdGRhdGFiYXNlbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICJsw6RzIG9iamVrdGV0IGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgInNwYXJhIGZpbGVuIHNvbSBkZW4gw6RyIHV0YW4gZmlsZXIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDQKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICIiCisiaGFzaGEgc2x1bXBtw6Rzc2lndCBza3LDpHAgZsO2ciBhdHQgc2thcGEga29ycnVwdGEgb2JqZWt0IGbDtnIgZmVsc8O2a25pbmcgYXYgR2l0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgImhhbnRlcmEgZmlsZW4gc29tIG9tIGRlbiBrb20gZnLDpW4gc8O2a3bDpGdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICJ2aXNhIGFsbGEgdGlsbGfDpG5nbGlnYSBrb21tYW5kb24iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgInV0ZXNsdXQgdsOkZ2xlZG5pbmdhciIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgImxpc3RhIGFudsOkbmRiYXJhIHbDpGdsZWRuaW5nYXIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ5Cittc2dpZCAicHJpbnQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMiCittc2dzdHIgInZpc2EgbmFtbiBww6UgYWxsYSBrb25maWd1cmF0aW9uc3ZhcmlhYmxlciIKKworIzogYnVpbHRpbi9oZWxwLmM6NTEKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJ2aXNhIG1hbnVhbHNpZGEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgInZpc2EgbWFudWFsIGkgd2ViYmzDpHNhcmUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU0Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgInZpc2EgaW5mby1zaWRhIgorCisjOiBidWlsdGluL2hlbHAuYzo1NgorbXNnaWQgInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24iCittc2dzdHIgInZpc2Ega29tbWFuZG9iZXNrcml2bmluZyIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8a29tbWFuZG8+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgIm9rw6RudCBoasOkbHBmb3JtYXQ6IFwiJXNcIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHN0YXJ0YSBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0b2xrYSBlbWFjc2NsaWVudC12ZXJzaW9uLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgImVtYWNzY2xpZW50IHZlcnNpb24gXCIlZFwiIGbDtnIgZ2FtbWFsICg8IDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjE0MyBidWlsdGluL2hlbHAuYzoxNjUgYnVpbHRpbi9oZWxwLmM6MTc1IGJ1aWx0aW4vaGVscC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICJleGVjIG1pc3NseWNrYWRlcyBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisiXCIlc1wiOiBzw7ZrdsOkZyBmw7ZyIG1hbi12aXNhcmUgc29tIGVqIHN0w7Zkcy5cbiIKKyJBbnbDpG5kIFwibWFuLjx2ZXJrdHlnPi5jbWRcIiBpc3TDpGxsZXQuIgorCisjOiBidWlsdGluL2hlbHAuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiXCIlc1wiOiBrb21tYW5kbyBmw7ZyIG1hbi12aXNhcmUgc29tIHN0w7Zkcy5cbiIKKyJBbnbDpG5kIFwibWFuLjx2ZXJrdHlnPi5wYXRoXCIgaXN0w6RsbGV0LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIlwiJXNcIjogb2vDpG5kIG1hbi12aXNhcmUuIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImluZ2VuIG1hbi12aXNhcmUgaGFudGVyYWRlIGbDtnJmcsOlZ2FuIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJpbmdlbiBpbmZvLXZpc2FyZSBoYW50ZXJhZGUgZsO2cmZyw6VnYW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICJcIiVzXCIgw6RyIGV0dCBhbGlhcyBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgYWxpYXMuJXMtc3Ryw6RuZzogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3NyBidWlsdGluL2hlbHAuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgImFudsOkbmRuaW5nOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiXCJnaXQgaGVscCBjb25maWdcIiBmw7ZyIG1lciBpbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICJvYmpla3R0eXAgc3TDpG1tZXIgaW50ZSDDtnZlcmVucyB2aWQgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIgorbXNnc3RyICJlbW90dG9nIGludGUgZGV0IGbDtnJ2w6RudGFkZSBvYmpla3RldCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIm9iamVrdGV0ICVzOiBmw7ZydsOkbnRhZCB0eXAgJXMsIHPDpWcgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAia2FuIGludGUgZnlsbGEgJWQgYnl0ZSIKK21zZ3N0clsxXSAia2FuIGludGUgZnlsbGEgJWQgYnl0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY4Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJ0aWRpZ3QgZmlsc2x1dCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiaW5kYXRhbMOkc2ZlbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgImFudsOkbmRlIGZsZXIgYnl0ZSDDpG4gdGlsbGfDpG5nbGlndCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NjA0Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAicGFrZXQgZsO2ciBzdG9ydCBmw7ZyIG51dmFyYW5kZSBkZWZpbml0aW9uIGF2IG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJwYWtldCDDpHIgc3TDtnJyZSDDpG4gdGlsbMOldGVuIG1heGltYWwgc3RvcmxlayIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSBwYWtldGZpbGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgInBha2V0c2lnbmF0dXIgc3TDpG1tZXIgaW50ZSDDtnZlcmVucyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgInBha2V0dmVyc2lvbiAlPFBSSXUzMj4gc3TDtmRzIGVqIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJTxQUkl1TUFYPjogJXMiCittc2dzdHIgInBha2V0ZXQgaGFyIGZlbGFrdGlndCBvYmpla3QgdmlkIGluZGV4ICU8UFJJdU1BWD46ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiaW5mbGF0ZSByZXR1cm5lcmFkZSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAiaW5kZXh2w6RyZGVzcGlsbCBmw7ZyIGRlbHRhYmFzb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjMKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgImRlbHRhYmFzaW5kZXggdXRhbmbDtnIgZ3LDpG5zZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJva8OkbmQgb2JqZWt0dHlwICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjIKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIFwicHJlYWRcIiBww6UgcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJTxQUkl1TUFYPiBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gImbDtnIgdGlkaWd0IHNsdXQgcMOlIHBha2V0ZmlsZW4sICU8UFJJdU1BWD4gYnl0ZSBzYWtuYXMiCittc2dzdHJbMV0gImbDtnIgdGlkaWd0IHNsdXQgcMOlIHBha2V0ZmlsZW4sICU8UFJJdU1BWD4gYnl0ZSBzYWtuYXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJhbGx2YXJsaWcgaW5mbGF0ZS1pbmtvbnNla3ZlbnMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNSBidWlsdGluL2luZGV4LXBhY2suYzo3NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzY0CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDMgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAiU0hBMS1LT0xMSVNJT04gVVBQVMOEQ0tUIFZJRCAlcyAhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNTcKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0IGluZm8gJXMiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIGluZm9ybWF0aW9uIG9tIGJlZmludGxpZ3Qgb2JqZWt0ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBiZWZpbnRsaWd0IG9iamVrdCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIm9naWx0aWd0IGJsb2Itb2JqZWt0ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ1Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrZWQgb2JqZWN0IgorbXNnc3RyICJmc2NrLWZlbCBpIHBhY2thdCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiSW50ZSBhbGxhIGJhcm5vYmpla3QgZsO2ciAlcyBrYW4gbsOlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTE5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk1MAorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRpbGzDpG1wYSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJUYXIgZW1vdCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJTa2FwYXIgaW5kZXggZsO2ciBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTIKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgInBha2V0ZXQgw6RyIHRyYXNpZ3QgKFNIQTEgc3TDpG1tZXIgaW50ZSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTcKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJmc3RhdFwiIHDDpSBwYWtldGZpbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAicGFrZXQgaGFyIHNrcsOkcCBpIHNsdXRldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3MgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgImbDtnJ2aXJyYWQgYm9ydG9tIHZhbnZldHQgaSBwYXJzZV9wYWNrX29iamVjdHMoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NQorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIkFuYWx5c2VyYXIgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSB0csOlZDogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDYKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJmw7ZydmlycmFkIGJvcnRvbSB2YW52ZXR0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAic2x1dGbDtnJkZXMgbWVkICVkIGxva2FsdCBvYmpla3QiCittc2dzdHJbMV0gInNsdXRmw7ZyZGVzIG1lZCAlZCBsb2thbGEgb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJPdsOkbnRhZCBzdmFuc2NoZWNrc3VtbWEgZsO2ciAlcyAodHJhc2lnIGRpc2s/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAicGFrZXRldCBoYXIgJWQgb2FuYWx5c2VyYXQgZGVsdGEiCittc2dzdHJbMV0gInBha2V0ZXQgaGFyICVkIG9hbmFseXNlcmFkZSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAia3VuZGUgaW50ZSB1dGbDtnJhIFwiZGVmbGF0ZVwiIHDDpSB0aWxsYWd0IG9iamVrdCAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICJsb2thbHQgb2JqZWt0ICVzIMOkciB0cmFzaWd0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJwYWtldGZpbG5hbW5ldCBcIiVzXCIgc2x1dGFyIGludGUgbWVkIFwiLnBhY2tcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUgJXMgZmlsZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBza3JpdmEgJXMtZmlsIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgImthbiBpbnRlIHN0w6RuZ2Egc2tyaXZlbiAlcy1maWwgXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgImZlbCB2aWQgc3TDpG5nbmluZyBhdiBwYWtldGZpbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3MworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgImthbiBpbnRlIHNwYXJhIHBha2V0ZmlsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDgxCittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgImthbiBpbnRlIHNwYXJhIGluZGV4ZmlsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJmZWxha3RpZyBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkthbiBpbnRlIMO2cHBuYSBiZWZpbnRsaWcgcGFrZXRmaWwgXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkthbiBpbnRlIMO2cHBuYSBiZWZpbnRsaWcgcGFrZXQtaWR4LWZpbCBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY0MworIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICJpY2tlLWRlbHRhOiAlZCBvYmpla3QiCittc2dzdHJbMV0gImlja2UtZGVsdGE6ICVkIG9iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJrZWRqZWzDpG5nZCA9ICVkOiAlbHUgb2JqZWt0IgorbXNnc3RyWzFdICJrZWRqZWzDpG5nZCA9ICVkOiAlbHUgb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjg5Cittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIkthbiBpbnRlIGfDpSB0aWxsYmFrYSB0aWxsIGFyYmV0c2thdGFsb2dlbiAoY3dkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzQxCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICJmZWxha3RpZyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc3NworbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc3OQorbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1zdGRpbiBrcsOkdmVyIGV0dCBnaXQtYXJraXYiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODUKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IGFuZ2F2cyB1dGFuIHBha2V0ZmlsbmFtbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgzMyBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTgxCittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgImZzY2stZmVsIGkgcGFja2F0IG9iamVrdCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgc3RhdHVzIHDDpSBtYWxsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEga2F0YWxvZ2VuIChvcGVuZGlyKSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBsw6RuayAocmVhZGxpbmspIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBza2FwYSBzeW1ib2xpc2sgbMOkbmsgXCIlc1wiIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBrb3BpZXJhIFwiJXNcIiB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgImlnbm9yZXJhciBtYWxsZW4gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICJtYWxsYXJuYSBoaXR0YWRlcyBpbnRlIGkgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgZnJvbSAnJXMnOiAlcyIKK21zZ3N0ciAia29waWVyYWRlIGludGUgbWFsbGFyIGZyw6VuIFwiJXNcIjogJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAia2FuIGludGUgaGFudGVyYSBmaWx0eXAgJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAia2FuIGludGUgZmx5dHRhICVzIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIGZpbm5zIHJlZGFuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJPbWluaXRpZXJhZGUgYmVmaW50bGlndCBkZWxhdCBHaXQtYXJraXYgaSAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiT21pbml0aWVyYWRlIGJlZmludGxpZ3QgR2l0LWFya2l2IGkgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiSW5pdGllcmFkZSB0b210IGRlbGF0IEdpdC1hcmtpdiBpICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiSW5pdGllcmFkZSB0b210IEdpdC1hcmtpdiBpICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDY4Cittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTxtYWxsa2F0YWxvZz5dIFstLSIKKyJzaGFyZWRbPTxiZWjDtnJpZ2hldGVyPl1dIFs8a2F0YWxvZz5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAiYmVow7ZyaWdoZXRlciIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkyCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICJhbmdlIGF0dCBnaXQtYXJraXZldCBza2FsbCBkZWxhcyBibGFuZCBmbGVyYSBhbnbDpG5kYXJlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjkgYnVpbHRpbi9pbml0LWRiLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAia2FuIGludGUgc2thcGEga2F0YWxvZ2VuIChta2RpcikgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgImthbiBpbnRlIGJ5dGEga2F0YWxvZyAoY2hkaXIpIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKGVsbGVyIC0td29yay10cmVlPTxrYXRhbG9nPikgaW50ZSB0aWxsw6V0ZXQgdXRhbiBhdHQgYW5nZSAlcyAoZWxsZXIgLS1naXQtIgorImRpcj08a2F0YWxvZz4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiS2FuIGludGUga29tbWEgw6V0IGFyYmV0c2thdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTYKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjxzeW1ib2w+Wyg9fDopPHbDpHJkZT5dKS4uLl0gWzxmaWw+Li4uXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NQorbXNnaWQgImVkaXQgZmlsZXMgaW4gcGxhY2UiCittc2dzdHIgInJlZGlnZXJhIGZpbGVyIHDDpSBwbGF0cyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NgorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgInRhIGJvcnQgdG9tbWEgc2zDpHByYWRlciIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OQorbXNnaWQgIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIKK21zZ3N0ciAidmFyIG55YSBzbMOkcHJhZGVyIHNrYWxsIHBsYWNlcmFzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJhdHQgZ8O2cmEgb20gc2zDpHByYWRlciByZWRhbiBmaW5ucyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDMKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBpcyBtaXNzaW5nIgorbXNnc3RyICJhdHQgZ8O2cmEgb20gc2zDpHByYWRlciBzYWtuYXMiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA1Cittc2dpZCAib3V0cHV0IG9ubHkgdGhlIHRyYWlsZXJzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBzbMOkcHJhZGVyIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNgorbXNnaWQgImRvIG5vdCBhcHBseSBjb25maWcgcnVsZXMiCittc2dzdHIgImFudsOkbmQgaW50ZSByZWdsZXIgZnLDpW4ga29uZmlndXJhdGlvbmVuIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNworbXNnaWQgImpvaW4gd2hpdGVzcGFjZS1jb250aW51ZWQgdmFsdWVzIgorbXNnc3RyICJzbMOlIGlob3AgdsOkcmRlbiBhdmRlbGFkZSBtZWQgYmxhbmtzdGVnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgInbDpGxqIHRvbGtuaW5nc2FsdGVybmF0aXYiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgInRvbGthIGludGUgLS0tIHNwZWNpZWxsdCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTEKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICJzbMOkcHJhZCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTIKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAic2zDpHByYWQoZXIpIGF0dCBsw6RnZ2EgdGlsbCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMjMKK21zZ2lkICItLXRyYWlsZXIgd2l0aCAtLW9ubHktaW5wdXQgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS10cmFpbGVyIG1lZCAtLW9ubHktaW5wdXQgZ2VyIGluZ2VuIG1lbmluZyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzMKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICJpbmdlbiBpbmRhdGFmaWwgYW5naXZlbiBmw7ZyIHJlZGlnZXJpbmcgcMOlIHBsYXRzIgorCisjOiBidWlsdGluL2xvZy5jOjU2Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPGZsYWdnb3I+XSBbPHZlcnNpb25zaW50ZXJ2YWxsPl0gW1stLV0gPHPDtmt2w6RnPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxmbGFnZ29yPl0gPG9iamVrdD4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJvZ2lsdGlnIGZsYWdnYSBmw7ZyIC0tZGVjb3JhdGU6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE3NAorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICJ2aXNhIGvDpGxsa29kIgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICJBbnbDpG5kIGUtcG9zdG1hcHBuaW5nc2ZpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzcKK21zZ2lkICJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgImRla29yZXJhIGVuZGFzdCByZWZlcmVuc2VyIHNvbSBtb3RzdmFyYXIgPG3Dtm5zdGVyPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNzkKK21zZ2lkICJkbyBub3QgZGVjb3JhdGUgcmVmcyB0aGF0IG1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiZGVrb3JlcmEgaW50ZSByZWZlcmVuc2VyIHNvbSBtb3RzdmFyYXIgPG3Dtm5zdGVyPiIKKworIzogYnVpbHRpbi9sb2cuYzoxODAKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJkZWtvcmVyaW5nc2ZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIkJlaGFuZGxhIHJhZGludGVydmFsbGV0IG4sbSBpIGZpbGVuLCBtZWQgYsO2cmphbiBww6UgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJTbHV0dXRkYXRhOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiBmZWxha3RpZyBmaWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTUwIGJ1aWx0aW4vbG9nLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBvYmpla3RldCAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAib2vDpG5kIHR5cDogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGNvdmVyIGZyb20gZGVzY3JpcHRpb24gbW9kZSIKK21zZ3N0ciAiJXM6IG9naWx0aWd0IG9tc2xhZyBmcsOlbiBiZXNrcml2bmluZ3Nsw6RnZSIKKworIzogYnVpbHRpbi9sb2cuYzo4MjEKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyB1dGFuIHbDpHJkZSIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIm5hbW5ldCBww6UgdXRkYXRha2F0YWxvZ2VuIMOkciBmw7ZyIGzDpW5ndCIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hIHBhdGNoZmlsZW4gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTY5Cittc2dpZCAibmVlZCBleGFjdGx5IG9uZSByYW5nZSIKK21zZ3N0ciAiYmVow7Z2ZXIgcHJlY2lzIGV0dCBpbnRlcnZhbGwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTc5Cittc2dpZCAibm90IGEgcmFuZ2UiCittc2dzdHIgImludGUgZXR0IGludGVydmFsbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTQzCittc2dpZCAiY292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAib21zbGFnc2JyZXZldCBiZWjDtnZlciBlLXBvc3Rmb3JtYXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBmaWwgZsO2ciBvbXNsYWdzYnJldiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgInRva2lndCBpbi1yZXBseS10bzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPGZsYWdnb3I+XSBbPHNlZGFuPiB8IDxyZXZpc2lvbnNpbnRlcnZhbGw+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEzCittc2dpZCAidHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgInR2w6UgdXRkYXRha2F0YWxvZ2VyPyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDI0IGJ1aWx0aW4vbG9nLmM6MjE5NyBidWlsdGluL2xvZy5jOjIxOTkgYnVpbHRpbi9sb2cuYzoyMjExCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJva8OkbmQgaW5jaGVja25pbmcgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzNCBidWlsdGluL3JlcGxhY2UuYzo1OCBidWlsdGluL3JlcGxhY2UuYzoyMDcKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2zDpSB1cHAgXCIlc1wiIHNvbSBlbiBnaWx0aWcgcmVmZXJlbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQzOQorbXNnaWQgImNvdWxkIG5vdCBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImt1bmRlIGludGUgaGl0dGEgZXhha3Qgc2FtbWFuc2xhZ25pbmdzYmFzIgorCisjOiBidWlsdGluL2xvZy5jOjE0NDMKK21zZ2lkICIiCisiZmFpbGVkIHRvIGdldCB1cHN0cmVhbSwgaWYgeW91IHdhbnQgdG8gcmVjb3JkIGJhc2UgY29tbWl0IGF1dG9tYXRpY2FsbHksXG4iCisicGxlYXNlIHVzZSBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIHRvIHRyYWNrIGEgcmVtb3RlIGJyYW5jaC5cbiIKKyJPciB5b3UgY291bGQgc3BlY2lmeSBiYXNlIGNvbW1pdCBieSAtLWJhc2U9PGJhc2UtY29tbWl0LWlkPiBtYW51YWxseSIKK21zZ3N0ciAiIgorImt1bmRlIGludGUgaMOkbXRhIHVwcHN0csO2bSwgb20gZHUgdmlsbCBsYWdyYSBiYXNpbmNoZWNrbmluZ2VuIGF1dG9tYXRpc2t0LFxuIgorImFudsOkbmQgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBmw7ZyIGF0dCBzcMOlcmEgZW4gZmrDpHJyZ3Jlbi5cbiIKKyJFbGxlciBzw6Uga2FuIGR1IGFuZ2UgYmFzaW5jaGVja25pbmcgbWVkIC0tYmFzZT08YmFzLWluY2hlY2tuaW5ncy1pZD4gbWFudWVsbHQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ2MworbXNnaWQgImZhaWxlZCB0byBmaW5kIGV4YWN0IG1lcmdlIGJhc2UiCittc2dzdHIgImt1bmRlIGludGUgaGl0dGEgZXhha3Qgc2FtbWFuc2xhZ25pbmdzYmFzIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImJhc2luY2hlY2tuaW5nZW4gYsO2ciB2YXJhIGbDtnJmYWRlciB0aWxsIHJldmlzaW9uc2xpc3RhbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgImJhc2luY2hlY2tuaW5nZW4gYsO2ciBpbnRlIHZhcmEgaSByZXZpc2lvbnNsaXN0YW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUzMQorbXNnaWQgImNhbm5vdCBnZXQgcGF0Y2ggaWQiCittc2dzdHIgImthbiBpbnRlIGjDpG10YSBwYXRjaC1pZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZmFpbGVkIHRvIGluZmVyIHJhbmdlLWRpZmYgcmFuZ2VzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgcsOka25hIHV0IGludGVydmFsbCByYW5nZS1kaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjE2MjkKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJhbnbDpG5kIFtQQVRDSCBuL21dIMOkdmVuIGbDtnIgZW4gZW5zYW0gcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzMgorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICJhbnbDpG5kIFtQQVRDSF0gw6R2ZW4gZsO2ciBmbGVyYSBwYXRjaGFyIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzYKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAic2tyaXYgcGF0Y2hhcm5hIHDDpSBzdGFuZGFyZCB1dCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjM4Cittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgImdlbmVyZXJhIGV0dCBmw7ZsamVicmV2IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDAKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgImFudsOkbmQgZW5rZWwgbnVtbWVyc2VrdmVucyBmw7ZyIHV0ZGF0YWZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MQorbXNnaWQgInNmeCIKK21zZ3N0ciAic2Z4IgorCisjOiBidWlsdGluL2xvZy5jOjE2NDIKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAiYW52w6RuZCA8c2Z4PiBpc3TDpGxsZXQgZsO2ciBcIi5wYXRjaFwiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDQKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJiw7ZyamEgbnVtcmVyYSBwYXRjaGFyIHDDpSA8bj4gaXN0w6RsbGV0IGbDtnIgMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICJtYXJrZXJhIHNlcmllbiBzb20gTjp0ZSBmw7Zyc8O2ayIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4Cittc2dpZCAiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiQW52w6RuZCAgW1JGQyBQQVRDSF0gaXN0w6RsbGV0IGbDtnIgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICJjb3Zlci1mcm9tLWRlc2NyaXB0aW9uLWzDpGdlIgorCisjOiBidWlsdGluL2xvZy5jOjE2NTIKK21zZ2lkICJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIgorbXNnc3RyICJza2FwYSBkZWxhciBhdiBvbXNsYWdzYnJldmV0IGJhc2VyYXQgcMOlIGdyZW5iZXNrcml2ZWxzZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NAorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAiQW52w6RuZCBbPHByZWZpeD5dIGlzdMOkbGxldCBmw7ZyIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAic3BhcmEgZmlsZXJuYSBpIDxrYXRhbG9nPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYwCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgInRhIGludGUgYm9ydCBlbGxlciBsw6RnZyB0aWxsIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgInNrcml2IGludGUgYmluw6RyYSBkaWZmYXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NQorbXNnaWQgIm91dHB1dCBhbGwtemVybyBoYXNoIGluIEZyb20gaGVhZGVyIgorbXNnc3RyICJhbnbDpG5kIGhhc2h2w6RyZGUgbWVkIG5vbGxvciBpIEZyb20taHV2dWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2NworbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAidGEgaW50ZSBtZWQgcGF0Y2hhciBzb20gbW90c3ZhcmFyIGVuIHVwcHN0csO2bXNpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY5Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICJ2aXNhIHBhdGNoZm9ybWF0IGlzdMOkbGxldCBmw7ZyIHN0YW5kYXJkIChwYXRjaCArIHN0YXQpIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzEKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIkUtcG9zdCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcyCittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJodXZ1ZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjczCittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAibMOkZ2cgdGlsbCBlLXBvc3RodXZ1ZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImVtYWlsIgorbXNnc3RyICJlcG9zdCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjc0Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgImzDpGdnIHRpbGwgbW90dGFnYXJodXZ1ZCAoXCJUbzpcIikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NgorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICJsw6RnZyB0aWxsIGtvcGllaHV2dWQgKFwiQ2M6XCIpIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAiaWRlbnQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3OQorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgInPDpHR0IEZyw6VuLWFkcmVzcyB0aWxsIDxpZGVudD4gKGVsbGVyIGluY2hlY2thcmUgb20gaWRlbnQgc2FrbmFzKSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgxCittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAibWVkZGVsYW5kZS1pZCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgyCittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICJnw7ZyIGRldCBmw7Zyc3RhIGJyZXZldCBldHQgc3ZhciB0aWxsIDxtZWRkZWxhbmRlLWlkPiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgzIGJ1aWx0aW4vbG9nLmM6MTY4NgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICJncsOkbnMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgImJpZm9nYSBwYXRjaGVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODcKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJnw7ZyIHBhdGNoZW4gZXR0IGlubGluZS1vYmpla3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5MQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICJha3RpdmVyYSBicmV2dHLDpWRuaW5nLCB0eXBlcjogc2hhbGxvdywgZGVlcCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjkzCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJzaWduYXR1ciIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk0Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICJsw6RnZyB0aWxsIHNpZ25hdHVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTUKK21zZ2lkICJiYXNlLWNvbW1pdCIKK21zZ3N0ciAiYmFzaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgImzDpGdnIHRpbGwgZsO2cmhhbmRza3LDpHZkIHRyw6RkaW5mbyBpIHBhdGNoc2VyaWVuIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgImzDpGdnIHRpbGwgc2lnbmF0dXIgZnLDpW4gZmlsIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTkKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICJ2aXNhIGludGUgZmlsbmFtbiBmw7ZyIHBhdGNoYXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTcwMQorbXNnaWQgInNob3cgcHJvZ3Jlc3Mgd2hpbGUgZ2VuZXJhdGluZyBwYXRjaGVzIgorbXNnc3RyICJ2aXNhIGbDtnJsb3Bwc2luZGlrYXRvciBtZWRhbiBwYXRjaGFyIHNrYXBhcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAzCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAidmlzYSDDpG5kcmluZ2FyIG1vdCA8cmV2PiBpIG9tc2xhZ3NicmV2IGVsbGVyIGVuc2FtIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDYKK21zZ2lkICJzaG93IGNoYW5nZXMgYWdhaW5zdCA8cmVmc3BlYz4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAidmlzYSDDpG5kcmluZ2FyIG1vdCA8cmVmc3BlYz4gaSBvbXNsYWdzYnJldiBlbGxlciBlbnNhbSBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA4Cittc2dpZCAicGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAicHJvY2VudCBzb20gc2thcGVsc2UgdsOkZ3MgbWVkIgorCisjOiBidWlsdGluL2xvZy5jOjE3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAib2dpbHRpZyBpZGVudC1yYWQ6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE4MDcKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLW4gb2NoIC1rIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgb2NoIC1rIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgxNworbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhIC0tbmFtZS1vbmx5IgorCisjOiBidWlsdGluL2xvZy5jOjE4MTkKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhIC0tbmFtZS1zdGF0dXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgyMQorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAia2FuIGludGUgYW52w6RuZGEgLS1jaGVjayIKKworIzogYnVpbHRpbi9sb2cuYzoxODU0Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgInN0YW5kYXJkIHV0LCBlbGxlciBrYXRhbG9nLCB2aWxrZW4gc2thbGwgZGV0IHZhcmE/IgorCisjOiBidWlsdGluL2xvZy5jOjE5NTgKK21zZ2lkICItLWludGVyZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0taW50ZXJkaWZmIGtyw6R2ZXIgLS1jb3Zlci1sZXR0ZXIgZWxsZXIgZW5zYW0gcGF0Y2giCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MgorbXNnaWQgIkludGVyZGlmZjoiCittc2dzdHIgIkludGVyZGlmZjoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcmRpZmYgYWdhaW5zdCB2JWQ6IgorbXNnc3RyICJJbnRlcmRpZmYgbW90IHYlZDoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2OQorbXNnaWQgIi0tY3JlYXRpb24tZmFjdG9yIHJlcXVpcmVzIC0tcmFuZ2UtZGlmZiIKK21zZ3N0ciAiLS1jcmVhdGlvbi1mYWN0b3Iga3LDpHZlciAtLXJhbmdlLWRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk3MworbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0tcmFuZ2UtZGlmZiBrcsOkdmVyIC0tY292ZXItbGV0dGVyIGVsbGVyIGVuc2FtIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODEKK21zZ2lkICJSYW5nZS1kaWZmOiIKK21zZ3N0ciAiSW50ZXJ2YWxsLWRpZmY6IgorCisjOiBidWlsdGluL2xvZy5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmFuZ2UtZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIkludGVydmFsbC1kaWZmIG1vdCB2JWQ6IgorCisjOiBidWlsdGluL2xvZy5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBzaWduYXR1cmZpbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAiU2thcGFyIHBhdGNoYXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjA3MworbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgdXRkYXRhZmlsZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjEzMgorbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzx1cHBzdHLDtm0+IFs8aHV2dWQ+IFs8Z3LDpG5zPl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBlbiBzcMOlcmFkIGZqw6RycmdyZW4sIGFuZ2UgPHVwcHN0csO2bT4gbWFudWVsbHQuXG4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NzAKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPGZsYWdnb3I+XSBbPGZpbD4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTI2Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiaWRlbnRpZmllcmEgZmlsc3RhdHVzIG1lZCB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjgKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAiYW52w6RuZCBzbcOlIGJva3N0w6R2ZXIgZsO2ciBcImFudGEgb2bDtnLDpG5kcmFkZVwiLWZpbGVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAiYW52w6RuZCBzbcOlIGJva3N0w6R2ZXIgZsO2ciBcImZzbW9uaXRvciBjbGVhblwiLWZpbGVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMyCittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgInZpc2EgY2FjaGFkZSBmaWxlciBpIHV0ZGF0YSAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM0Cittc2dpZCAic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc2EgYm9ydHRhZ25hIGZpbGVyIGkgdXRkYXRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM2Cittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXNhIG1vZGlmaWVyYWRlIGZpbGVyIGkgdXRkYXRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM4Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXNhIGFuZHJhIGZpbGVyIGkgdXRkYXRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQwCittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc2EgaWdub3JlcmFkZSBmaWxlciBpIHV0ZGF0YSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MworbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXNhIGvDtmF0IGlubmVow6VsbHMgb2JqZWt0bmFtbiBpIHV0ZGF0YSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0NQorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgInZpc2EgZmlsZXIgaSBmaWxzeXN0ZW1ldCBzb20gYmVow7Z2ZXIgdGFzIGJvcnQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDcKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgInZpc2EgZW5kYXN0IG5hbW4gZsO2ciBcImFuZHJhXCIga2F0YWxvZ2VyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ5Cittc2dpZCAic2hvdyBsaW5lIGVuZGluZ3Mgb2YgZmlsZXMiCittc2dzdHIgInZpc2EgcmFkc2x1dCBpIGZpbGVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTUxCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAidmlzYSBpbnRlIHRvbW1hIGthdGFsb2dlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBlaiBzYW1tYW5zbGFnbmEgZmlsZXIgaSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAidmlzYSBcInJlc29sdmUtdW5kb1wiLWluZm9ybWF0aW9uIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU4Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJob3BwYSDDtnZlciBmaWxlciBzb20gbW90c3ZhcmFyIG3Dtm5zdGVyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTYxCittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiZXhrbHVkZXJhIG3Dtm5zdGVyIHNvbSBsw6RzZXMgZnLDpW4gPGZpbD4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjQKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAibMOkcyB5dHRlcmxpZ2FyZSBwZXIta2F0YWxvZy1leGtsdWRlcmluZ3Ntw7Zuc3RlciBmcsOlbiA8ZmlsPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgImzDpGdnIHRpbGwgZ2l0OnMgc3RhbmRhcmRleGtsdWRlcmluZ2FyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTcwCittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgImfDtnIgdXRkYXRhIHJlbGF0aXYgdGlsbCBwcm9qZWt0ZXRzIHRvcHBrYXRhbG9nIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTczCittc2dpZCAicmVjdXJzZSB0aHJvdWdoIHN1Ym1vZHVsZXMiCittc2dzdHIgInJla3Vyc2VyYSBuZXIgaSB1bmRlcm1vZHVsZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgIm9tIGVuIDxmaWw+IGludGUgw6RyIGluZGV4ZXQsIGJldHJha3RhIGRldCBzb20gZXR0IGZlbCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3NgorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICJ0csOkZC1pZ3QiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzcKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICJsw6V0c2FzIGF0dCBzw7ZrdsOkZ2FyIGJvcnR0YWduYSBzZWRhbiA8dHLDpGQtaWd0PiBmb3J0ZmFyYW5kZSBmaW5ucyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3OQorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgInZpc2EgZmVsc8O2a25pbmdzdXRkYXRhIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjkKK21zZ2lkICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gWy0tcmVmc10gWy0tdXBsb2FkLXBhY2s9PGV4ZWM+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8YXJraXY+IFs8cmVmZXJlbnNlcj4uLi5dXSIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo1OQorbXNnaWQgImRvIG5vdCBwcmludCByZW1vdGUgVVJMIgorbXNnc3RyICJ2aXNhIGludGUgZmrDpHJyLVVSTCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MCBidWlsdGluL2xzLXJlbW90ZS5jOjYyIGJ1aWx0aW4vcmViYXNlLmM6MTUxOAorbXNnaWQgImV4ZWMiCittc2dzdHIgImV4ZWMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAic8O2a3bDpGcgdGlsbCBnaXQtdXBsb2FkLXBhY2sgcMOlIGZqw6RycmVuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY1Cittc2dpZCAibGltaXQgdG8gdGFncyIKK21zZ3N0ciAiYmVncsOkbnNhIHRpbGwgdGFnZ2FyIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgImJlZ3LDpG5zYSB0aWxsIGh1dnVkZW4iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAidmlzYSBpbnRlIGF2c2thbGFkZSB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjkKK21zZ2lkICJ0YWtlIHVybC48YmFzZT4uaW5zdGVhZE9mIGludG8gYWNjb3VudCIKK21zZ3N0ciAidGEgaMOkbnN5biB0aWxsIHVybC48YmFzPi5pbnN0ZWFkT2YiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzIKK21zZ2lkICJleGl0IHdpdGggZXhpdCBjb2RlIDIgaWYgbm8gbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQiCittc2dzdHIgImF2c2x1dGEgbWVkIGZlbGtvZCAyIG9tIG1vdHN2YXJhbmRlIHJlZmVyZW5zZXIgaW50ZSBoaXR0YXMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzUKK21zZ2lkICJzaG93IHVuZGVybHlpbmcgcmVmIGluIGFkZGl0aW9uIHRvIHRoZSBvYmplY3QgcG9pbnRlZCBieSBpdCIKK21zZ3N0ciAidmlzYSB1bmRlcmxpZ2dhbmRlIHJlZmVyZW5zIG9jaCBvYmpla3RldCBkZXQgcGVrYXIgcMOlIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzozMAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs8ZmxhZ2dvcj5dIDx0csOkZC1pZ3Q+IFs8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI4Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0csOkZCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMwCittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICJyZWt1cnNlcmEgbmVyIGkgdW5kZXJ0csOkZCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAidmlzYSB0csOkZCBtZWRhbiByZWt1cnNlcmluZyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAidGVybWluZXJhIHBvc3RlciBtZWQgTlVMLWJ5dGUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNgorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgImlua2x1ZGVyYSBvYmpla3RzdG9ybGVrIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgZmlsbmFtbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQzCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAiYW52w6RuZCBmdWxsc3TDpG5kaWdhIHPDtmt2w6Rnc25hbW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAidmlzYSBoZWxhIHRyw6RkZXQ7IGludGUgYmFyYSBha3R1ZWxsIGthdGFsb2cgKGltcGxpY2VyYXIgLS1mdWxsLW5hbWUpIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICJ0b20gbWJveDogXCIlc1wiIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8ZmxhZ2dvcj5dIFs8aW5jaGVja25pbmc+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU2Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTcKK21zZ2lkICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgImZsYWdnYW4gXCJtXCIgYmVow7Z2ZXIgZXR0IHbDpHJkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJmbGFnZ2FuIFwiJXNcIiBiZWjDtnZlciBldHQgdsOkcmRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luIFwiJXNcIi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJUaWxsZ8OkbmdsaWdhIHN0cmF0ZWdpZXIgw6RyOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiVGlsbGfDpG5nbGlnYSBza3LDpGRkYXJzeWRkYSBzdHJhdGVnaWVyIMOkcjoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDQgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAidmlzYSBpbnRlIGVuIGRpZmZzdGF0IG7DpHIgc2FtbWFuc2xhZ25pbmdlbiDDpHIgZsOkcmRpZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI0NyBidWlsdGluL3B1bGwuYzoxNTUKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgInZpc2EgZW4gZGlmZnN0YXQgbsOkciBzYW1tYW5zbGFnbmluZ2VuIMOkciBmw6RyZGlnIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjE1OAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihzeW5vbnltIHRpbGwgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MCBidWlsdGluL3B1bGwuYzoxNjEKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJsw6RnZyB0aWxsIChzb20gbWVzdCA8bj4pIHBvc3RlciBmcsOlbiBzaG9ydGxvZyB0aWxsIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IgorCisjOiBidWlsdGluL21lcmdlLmM6MjUzIGJ1aWx0aW4vcHVsbC5jOjE2NworbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJza2FwYSBlbiBlbnNhbSBpbmNoZWNrbmluZyBpc3TDpGxsZXQgZsO2ciBlbiBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NSBidWlsdGluL3B1bGwuYzoxNzAKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgInV0ZsO2ciBlbiBpbmNoZWNrbmluZyBvbSBzYW1tYW5zbGFnbmluZ2VuIGx5Y2thZGVzIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTcgYnVpbHRpbi9wdWxsLmM6MTczCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJyZWRpZ2VyYSBtZWRkZWxhbmRlIGlubmFuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU5Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAidGlsbMOldCBzbmFiYnNwb2xuaW5nIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjEgYnVpbHRpbi9wdWxsLmM6MTgwCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYXZicnl0IG9tIHNuYWJic3BvbG5pbmcgaW50ZSDDpHIgbcO2amxpZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NSBidWlsdGluL3B1bGwuYzoxODMKK21zZ2lkICJ2ZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCittc2dzdHIgImJla3LDpGZ0YSBhdHQgZGVuIG5hbW5naXZuYSBpbmNoZWNrbmluZ2VuIGhhciBlbiBnaWx0aWcgR1BHLXNpZ25hdHVyIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY2IGJ1aWx0aW4vbm90ZXMuYzo3ODcgYnVpbHRpbi9wdWxsLmM6MTg3CisjOiBidWlsdGluL3JlYmFzZS5jOjUxMiBidWlsdGluL3JlYmFzZS5jOjE1MzEgYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAic3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjcgYnVpbHRpbi9wdWxsLmM6MTg4Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICJzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSBhdHQgYW52w6RuZGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjggYnVpbHRpbi9wdWxsLmM6MTkxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJhbHRlcm5hdGl2PXbDpHJkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL3B1bGwuYzoxOTIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJhbHRlcm5hdGl2IGbDtnIgdmFsZCBzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3MQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAiaW5jaGVja25pbmdzbWVkZGVsYW5kZSBmw7ZyIChpY2tlIHNuYWJic3BvbGFuZGUpIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc4Cittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImF2YnJ5dCBkZW4gcMOlZ8OlZW5kZSBzYW1tYW5zbGFnbmluZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgwCittc2dpZCAiLS1hYm9ydCBidXQgbGVhdmUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSBhbG9uZSIKK21zZ3N0ciAiLS1hYm9ydCBtZW4gbMOkbW5hIGluZGV4IG9jaCBhcmJldHNrYXRhbG9nIGVuc2FtbWEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODIKK21zZ2lkICJjb250aW51ZSB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiZm9ydHPDpHR0IGRlbiBww6Vnw6VlbmRlIHNhbW1hbnNsYWduaW5nZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODQgYnVpbHRpbi9wdWxsLmM6MTk5Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJ0aWxsw6V0IHNhbW1hbnNsYWduaW5nIGF2IG9yZWxhdGVyYWRlIGhpc3RvcmllciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI5MAorbXNnaWQgImJ5cGFzcyBwcmUtbWVyZ2UtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICJmw7ZyYmlnw6UgcHJlLW1lcmdlLWNvbW1pdC0gb2NoIGNvbW1pdC1tc2cta3Jva2FyIgorCisjOiBidWlsdGluL21lcmdlLmM6MzA3Cittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgImt1bmRlIGvDtnJhIHN0YXNoLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxMgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAic3Rhc2ggbWlzc2x5Y2thZGVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgImludGUgZXR0IGdpbHRpZ3Qgb2JqZWt0OiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMzOSBidWlsdGluL21lcmdlLmM6MzU2Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAicmVhZC10cmVlIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKGluZ2V0IGF0dCBwbGF0dGEgdGlsbCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJUaWxscGxhdHRuaW5nc2luY2hlY2tuaW5nIC0tIHVwcGRhdGVyYXIgaW50ZSBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJJbmdldCBzYW1tYW5zbGFnbmluZ3NtZWRkZWxhbmRlIC0tIHVwcGRhdGVyYXIgaW50ZSBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiXCIlc1wiIHZlcmthciBpbnRlIHBla2EgcMOlIGVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL21lcmdlLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIkZlbGFrdGlnIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMtc3Ryw6RuZzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDUKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJIYW50ZXJhciBpbnRlIG7DpWdvdCBhbm5hdCDDpG4gZW4gc2FtbWFuc2xhZ25pbmcgYXYgdHbDpSBodXZ1ZGVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJGZWxha3RpZyBmbGFnZ2EgZsO2ciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2EgZnLDpW4gXCIlc1wiIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkNoZWNrYXIgaW50ZSBpbiBzYW1tYW5zbGFnbmluZ2VuOyBhbnbDpG5kIFwiZ2l0IGNvbW1pdFwiIGbDtnIgYXR0IHNsdXRmw7ZyYSAiCisiZGVuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODAxCittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFuZ2UgZXR0IGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBhdHQgZsO2cmtsYXJhIHZhcmbDtnIgc2FtbWFuc2xhZ25pbmdlblxuIgorIsOkciBuw7ZkdsOkbmRpZywgc3BlY2llbGx0IG9tIGRlbiBzbMOlciBpbiBlbiB1cHBkYXRlcmFkIHVwcHN0csO2bSBpIGVuXG4iCisidGVtYWdyZW4uXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDYKK21zZ2lkICJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICJFdHQgdG9tdCBtZWRkZWxhbmRlIGF2YnJ5dGVyIGluY2hlY2tuaW5nZW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJSYWRlciBzb20gaW5sZWRzIG1lZCBcIiVjXCIga29tbWVyIGlnbm9yZXJhcywgb2NoIGV0dCB0b210IG1lZGRlbGFuZGVcbiIKKyJhdmJyeXRlciBpbmNoZWNrbmluZ2VuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODYyCittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICJUb210IGluY2hlY2tuaW5nc21lZGRlbGFuZGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiVW5kZXJiYXJ0LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIHNsw6UgaWhvcCBhdXRvbWF0aXNrdDsgZml4YSBrb25mbGlrdGVyIG9jaCBjaGVja2EgaW4gcmVzdWx0YXRldC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3NworbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiSW50ZSBww6UgbsOlZ29uIGdyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTc5Cittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJJbmdlbiBmasOkcnIgZsO2ciBha3R1ZWxsIGdyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgxCittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJJbmdlbiBzdGFuZGFyZHVwcHN0csO2bSBhbmdpdmVuIGbDtnIgYWt0dWVsbCBncmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJJbmdlbiBmasOkcnJzcMOlcmFuZGUgZ3JlbiBmw7ZyICVzIGZyw6VuICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgdmFsdWUgJyVzJyBpbiBlbnZpcm9ubWVudCAnJXMnIgorbXNnc3RyICJGZWxha3RpZ3QgdsOkcmRlIFwiJXNcIiBpIG1pbGrDtnZhcmlhYmVsbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIGluICVzOiAlcyIKK21zZ3N0ciAiaW50ZSBuw6Vnb3Qgdmkga2FuIHNsw6UgaWhvcCBtZWQgJXM6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4MAorbXNnaWQgIm5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICJpbnRlIG7DpWdvdCB2aSBrYW4gc2zDpSBpaG9wIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4MworbXNnaWQgIi0tYWJvcnQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYWJvcnQgdGFyIGluZ2EgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjg3Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJJbmdlbiBzYW1tYW5zbGFnbmluZyBhdHQgYXZicnl0YSAoTUVSR0VfSEVBRCBzYWtuYXMpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTYKK21zZ2lkICItLXF1aXQgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tcXVpdCB0YXIgaW5nYSBhcmd1bWVudCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDkKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIHRhciBpbmdhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL21lcmdlLmM6MTMxMworbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIGluIHByb2dyZXNzIChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiSW5nZW4gc2FtbWFuc2xhZ25pbmcgcMOlZ8OlciAoTUVSR0VfSEVBRCBzYWtuYXMpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMjkKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiRHUgaGFyIGludGUgYXZzbHV0YXQgc2FtbWFuc2xhZ25pbmdlbiAoTUVSR0VfSEVBRCBmaW5ucykuXG4iCisiQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBpbm5hbiBkdSBzbMOlciBpaG9wLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiRHUgaGFyIGludGUgYXZzbHV0YXQgZGluIFwiY2hlcnJ5LXBpY2tcIiAoQ0hFUlJZX1BJQ0tfSEVBRCBmaW5ucykuXG4iCisiQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBpbm5hbiBkdSBzbMOlciBpaG9wLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzkKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIkR1IGhhciBpbnRlIGF2c2x1dGF0IGRpbiBcImNoZXJyeS1waWNrXCIgKENIRVJSWV9QSUNLX0hFQUQgZmlubnMpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiRHUga2FuIGludGUga29tYmluZXJhIC0tc3F1YXNoIG1lZCAtLW5vLWZmLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTUKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iCittc2dzdHIgIkR1IGthbiBpbnRlIGtvbWJpbmVyYSAtLXNxdWFzaCBtZWQgLS1jb21taXQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3MQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICJJbmdlbiBpbmNoZWNrbmluZyBhbmdpdmVuIG9jaCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSDDpHIgZWogc2F0dC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzg4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIlN0w7ZkZXIgaW50ZSBlbiB0aWxscGxhdHRuaW5nc2luY2hlY2tuaW5nIHDDpSBldHQgdG9tdCBodXZ1ZCDDpG5udSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTAKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiSWNrZS1zbmFiYnNwb2xhZCBpbmNoZWNrbmluZyBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIGV0dCB0b210IGh1dnVkIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyAtIGludGUgbsOlZ290IHZpIGthbiBzbMOlIGlob3AiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk3Cittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiS2FuIGVuZGFzdCBzbMOlIGlob3AgZW4gZW5kYSBpbmNoZWNrbmluZyBpIGV0dCB0b210IGh1dnVkIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ3NgorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgInbDpGdyYXIgc2zDpSBzYW1tYW4gb3JlbGF0ZXJhZCBoaXN0b3JpayIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODUKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICJSZWRhbiDDoCBqb3VyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMuLiVzXG4iCittc2dzdHIgIlVwcGRhdGVyYXIgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICJGw7Zyc8O2a2VyIHJpa3RpZ3QgZW5rZWwgc2FtbWFuc2xhZ25pbmcgaSBpbmRleGV0Li4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5lai5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NjkKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIFllZWFoISIKK21zZ3N0ciAiUmVkYW4gw6Agam91ci4gVG9wcGVuISIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzUKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIkthbiBpbnRlIHNuYWJic3BvbGEsIGF2YnJ5dGVyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTggYnVpbHRpbi9tZXJnZS5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIsOFdGVyc3BvbGFyIHRyw6RkZXQgdGlsbCBvcsO2cnQuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIkbDtnJzw7ZrZXIgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luICVzLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJJbmdlbiBzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSBoYW50ZXJhZGUgc2FtbWFuc2xhZ25pbmdlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIlNhbW1hbnNsYWduaW5nIG1lZCBzdHJhdGVnaW4gJXMgbWlzc2x5Y2thZGVzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiQW52w6RuZGVyICVzIGbDtnIgYXR0IGbDtnJiZXJlZGEgbMO2c25pbmcgZsO2ciBoYW5kLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTY3NworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiQXV0b21hdGlzayBzYW1tYW5zbGFnbmluZyBseWNrYWRlczsgc3RvcHBhciBmw7ZyZSBpbmNoZWNrbmluZyBzb20gw7Zuc2thdFxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxpbmNoZWNrbmluZz4gPGluY2hlY2tuaW5nPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxpbmNoZWNrbmluZz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8aW5jaGVja25pbmc+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGluY2hlY2tuaW5nPiA8aW5jaGVja25pbmc+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxpbmNoZWNrbmluZz5dIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTMKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgInNrcml2IHV0IGFsbGEgZ2VtZW5zYW1tYSBhbmbDpGRlciIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU1Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICJoaXR0YSBhbmZhZGVyIGbDtnIgZW5rZWwgbi12w6Rnc3NhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTcKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAidmlzYSByZXZpc2lvbmVyIHNvbSBpbnRlIGthbiBuw6VzIGZyw6VuIGFuZHJhIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTkKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgIsOkciBkZW4gZsO2cnN0YSBhbmZhZGVyIHRpbGwgZGVuIGFuZHJhPyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTYxCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgInNlIHZhciA8aW5jaGVja25pbmc+IGdyZW5hZGVzIGF2IGZyw6VuIHJlZmVyZW5zbG9nZ2VuIGZyw6VuIDxyZWY+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo5Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs8YWx0ZXJuYXRpdj5dIFstTCA8bmFtbjE+IFstTCA8b3JpZz4gWy1MIDxuYW1uMj5dXV0gPGZpbDE+ICIKKyI8b3JpZ2ZpbD4gPGZpbDI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgInPDpG5kIHJlc3VsdGF0IHRpbGwgc3RhbmRhcmQgdXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM2Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgImFudsOkbmQgZGlmZjMtYmFzZXJhZCBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgImbDtnIga29uZmxpa3RlciwgYW52w6RuZCB2w6VyIHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgImbDtnIga29uZmxpa3RlciwgYW52w6RuZCBkZXJhcyB2ZXJzaW9uIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgImbDtnIga29uZmxpa3RlciwgYW52w6RuZCBlbiBmw7ZyZW5hZCB2ZXJzaW9uIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICJmw7ZyIGtvbmZsaWt0ZXIsIGFudsOkbmQgZGVubmEgbWFya8O2cnN0b3JsZWsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICJ2YXJuYSBpbnRlIG9tIGtvbmZsaWt0ZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ3Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICJzw6R0dCBldGlrZXR0ZXIgZsO2ciBmaWwxL29yaWdmaWwvZmlsMiIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiAlcyIKK21zZ3N0ciAib2vDpG5kIGZsYWdnYSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgdG9sa2Egb2JqZWt0ZXQgXCIlc1wiIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2UuIElnbm9yaW5nICVzLiIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgYmFzZXMuIElnbm9yaW5nICVzLiIKK21zZ3N0clswXSAia2FuIGludGUgaGFudGVyYSBtZXIgw6RuICVkIGJhcy4gSWdub3JlcmFyICVzLiIKK21zZ3N0clsxXSAia2FuIGludGUgaGFudGVyYSBtZXIgw6RuICVkIGJhc2VyLiBJZ25vcmVyYXIgJXMuIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjY1Cittc2dpZCAibm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiaGFudGVyYXIgaW50ZSBuw6Vnb3QgYW5uYXQgw6RuIGVuIHNhbW1hbnNsYWduaW5nIGF2IHR2w6UgaHV2dWRlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBiZXN0w6RtbWEgcmVmZXJlbnNlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIlNsw6VyIGlob3AgJXMgbWVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjYKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICJpbmRhdGEgw6RyIE5VTC10ZXJtaW5lcmFkIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAidGlsbMOldCBzYWtuYWRlIG9iamVrdCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTYKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgInRpbGzDpXQgc2thcGEgbWVyIMOkbiBldHQgdHLDpGQiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjkKK21zZ2lkICIiCisiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtIgorInNpemU9PHNpemU+KSIKK21zZ3N0ciAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8ZmxhZ2dvcj5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzdG9ybGVrPikiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI2Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIKK21zZ3N0ciAib2JqZWt0a2F0YWxvZyBtZWQgdXBwc8OkdHRuaW5nIGF2IHBhciBtZWQgcGFrZXRmaWxlciBvY2ggcGFjay1pbmRleCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjkKK21zZ2lkICIiCisiZHVyaW5nIHJlcGFjaywgY29sbGVjdCBwYWNrLWZpbGVzIG9mIHNtYWxsZXIgc2l6ZSBpbnRvIGEgYmF0Y2ggdGhhdCBpcyAiCisibGFyZ2VyIHRoYW4gdGhpcyBzaXplIgorbXNnc3RyICIiCisidmlkIG9tcGFja25pbmcsIHNhbWxhIG1pbmRyZSBwYWtldGZpbGVyIGkgZW4gYnVudCBzb20gw6RyIHN0w7ZycmUgw6RuIGRlbm5hICIKKyJzdG9ybGVrdCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NTAgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo2NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICJmbGFnZ2FuIC0tYmF0Y2gtc2l6ZSBhbnbDpG5kcyBiYXJhIGkgdW5kZXJrb21tYW5kb3QgXCJyZXBhY2tcIiIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJva8OkbnQgdW5kZXJrb21tYW5kbzogJXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOAorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzxmbGFnZ29yPl0gPGvDpGxsYT4uLi4gPG3DpWw+IgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICJLYXRhbG9nZW4gJXMgw6RyIGkgaW5kZXhldCBvY2ggaW50ZSBlbiB1bmRlcm1vZHVsPyIKKworIzogYnVpbHRpbi9tdi5jOjg1Cittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJLw7ZhIGRpbmEgw6RuZHJpbmdhciBpIC5naXRtb2R1bGVzIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIGbDtnIgYXR0IGZvcnRzw6R0dGEiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyDDpHIgaSBpbmRleGV0IgorCisjOiBidWlsdGluL212LmM6MTI1Cittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJ0dmluZ2EgZmx5dHRhL8OkbmRyYSBuYW1uIMOkdmVuIG9tIG3DpWxldCBmaW5ucyIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJob3BwYSDDtnZlciBmZWwgdmlkIGZseXR0L25hbW7DpG5kcmluZyIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiZGVzdGluYXRpb25lbiBcIiVzXCIgw6RyIGluZ2VuIGthdGFsb2ciCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICJLb250cm9sbGVyYXIgbmFtbmJ5dGUgYXYgXCIlc1wiIHRpbGwgXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICJmZWxha3RpZyBrw6RsbGEiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODcKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJrYW4gaW50ZSBmbHl0dGEga2F0YWxvZyB0aWxsIHNpZyBzasOkbHYiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTAKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSBmbHl0dGEga2F0YWxvZyDDtnZlciBmaWwiCisKKyM6IGJ1aWx0aW4vbXYuYzoxOTkKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJrw6RsbGthdGFsb2dlbiDDpHIgdG9tIgorCisjOiBidWlsdGluL212LmM6MjI0Cittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAiaW50ZSB2ZXJzaW9uc2hhbnRlcmFkIgorCisjOiBidWlsdGluL212LmM6MjI3Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICJkZXN0aW5hdGlvbmVuIGZpbm5zIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgInNrcml2ZXIgw7Z2ZXIgXCIlc1wiIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIMO2dmVyIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJmbGVyYSBrw6RsbG9yIGbDtnIgc2FtbWEgbcOlbCIKKworIzogYnVpbHRpbi9tdi5jOjI0MworbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZGVzdGluYXRpb25za2F0YWxvZ2VuIGZpbm5zIGludGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCBrw6RsbGE9JXMsIG3DpWw9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiQnl0ZXIgbmFtbiBww6UgJXMgdGlsbCAlc1xuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzE2IGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgYnl0YSBuYW1uIHDDpSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDMKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPGZsYWdnb3I+XSA8aW5jaGVja25pbmc+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA0Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxmbGFnZ29yPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8ZmxhZ2dvcj5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjIKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgInNrcml2IGVuZGFzdCBuYW1uIChpbmdlbiBTSEEtMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjMKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgImFudsOkbmQgZW5kYXN0IHRhZ2dhciBmw7ZyIGF0dCBuYW1uZ2UgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NQorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJhbnbDpG5kIGVuZGFzdCByZWZlcmVuc2VyIHNvbSBtb3RzdmFyYXIgPG3Dtm5zdGVyPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NworbXNnaWQgImlnbm9yZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiaWdub3JlcmEgcmVmZXJlbnNlciBzb20gbW90c3ZhcmFyIDxtw7Zuc3Rlcj4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjkKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICJsaXN0YSBhbGxhIGluY2hlY2tuaW5nYXIgc29tIGthbiBuw6VzIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MAorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibMOkcyBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3MQorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAidGlsbMOldCBhdHQgc2tyaXZhIFwib2RlZmluaWVyYWRlXCIgbmFtbiAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDc3Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgImF2cmVmZXJlcmEgdGFnZ2FyIGkgaW5kYXRhIChhbnbDpG5kcyBpbnRlcm50KSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gW2xpc3QgWzxvYmpla3Q+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bWVkZD4gfCAtRiAiCisiPGZpbD4gfCAoLWMgfCAtQykgPG9iamVrdD5dIFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBjb3B5IFstZl0gPGZyw6VuLW9iamVrdD4gPHRpbGwtb2JqZWt0PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1lZGQ+IHwgLUYgIgorIjxmaWw+IHwgKC1jIHwgLUMpIDxvYmpla3Q+XSBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBzaG93IFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVnaT5dICIKKyI8YW50ZWNrbmluZ3NyZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gcmVtb3ZlIFs8b2JqZWt0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbl0gWy12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBwcnVuZSBbLW5dIFstdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0Cittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xpc3QgWzxvYmpla3Q+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OQorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPGZsYWdnb3I+XSBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NTQKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgY29weSBbPGZsYWdnb3I+XSA8ZnLDpW4tb2JqZWt0PiA8dGlsbC1vYmpla3Q+IgorCisjOiBidWlsdGluL25vdGVzLmM6NTUKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyw6VuLW9iamVrdD4gPHRpbGwtb2JqZWt0Pl0uLi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MAorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPGZsYWdnb3I+XSBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjUKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzUKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPGZsYWdnb3I+XSA8YW50ZWNrbmluZ3NyZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzYKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc3Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODIKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5MgorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3Cittc2dpZCAiV3JpdGUvZWRpdCB0aGUgbm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgb2JqZWN0OiIKK21zZ3N0ciAiU2tyaXYvcmVkaWdlcmEgYW50ZWNrbmluZ2FyIGbDtnIgZsO2bGphbmRlIG9iamVrdDoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImt1bmRlIGludGUgc3RhcnRhIFwic2hvd1wiIGbDtnIgb2JqZWt0ZXQgXCIlc1wiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSB1dGRhdGEgZnLDpW4gXCJzaG93XCIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGF2c2x1dGEgXCJzaG93XCIgZsO2ciBvYmpla3RldCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTcKK21zZ2lkICJwbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgImFuZ2UgaW5uZWjDpWxsIGbDtnIgYW50ZWNrbmluZ2VuIG1lZCBhbnRpbmdlbiAtbSBlbGxlciAtRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgYW50ZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgImFudGVja25pbmdlbnMgaW5uZWjDpWxsIGhhciBsw6RtbmF0cyBrdmFyIGkgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNDIgYnVpbHRpbi90YWcuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBlbGxlciBsw6RzYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjMgYnVpbHRpbi9ub3Rlcy5jOjMxMyBidWlsdGluL25vdGVzLmM6MzE1CisjOiBidWlsdGluL25vdGVzLmM6MzgzIGJ1aWx0aW4vbm90ZXMuYzo0MzggYnVpbHRpbi9ub3Rlcy5jOjUyNgorIzogYnVpbHRpbi9ub3Rlcy5jOjUzMSBidWlsdGluL25vdGVzLmM6NjEwIGJ1aWx0aW4vbm90ZXMuYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgImt1bmRlIGludGUgc2zDpSB1cHAgXCIlc1wiIHNvbSBlbiBnaWx0aWcgcmVmZXJlbnMuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBvYmpla3RldCBcIiVzXCIuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgYW50ZWNrbmluZ3NkYXRhIGZyw6VuIGlja2UtYmxvYi1vYmpla3RldCBcIiVzXCIuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiZmVsYWt0aWcgaW5kYXRhcmFkOiBcIiVzXCIuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMga29waWVyYSBhbnRlY2tuaW5nYXIgZnLDpW4gXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGZpcnN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBnaXQKKyMuIG5vdGVzIGNvbW1hbmQ6ICdhZGQnLCAnbWVyZ2UnLCAncmVtb3ZlJywgZXRjLgorIy4KKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gJXMgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJ2w6RncmFyIHV0ZsO2cmEgXCIlc1wiIHDDpSBhbnRlY2tuaW5nYXIgaSAlcyAodXRhbmbDtnIgcmVmcy9ub3Rlcy8pIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzc2IGJ1aWx0aW4vbm90ZXMuYzo0MzEgYnVpbHRpbi9ub3Rlcy5jOjUwOQorIzogYnVpbHRpbi9ub3Rlcy5jOjUyMSBidWlsdGluL25vdGVzLmM6NTk4IGJ1aWx0aW4vbm90ZXMuYzo2NjUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4MTUgYnVpbHRpbi9ub3Rlcy5jOjk2MyBidWlsdGluL25vdGVzLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgcGFyYW1ldHJhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM4OSBidWlsdGluL25vdGVzLmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgImluZ2EgYW50ZWNrbmluZ2FyIGhpdHRhZGVzIGbDtnIgb2JqZWt0ZXQgJXMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEwIGJ1aWx0aW4vbm90ZXMuYzo1NzYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICJhbnRlY2tuaW5nc2lubmVow6VsbCBzb20gc3Ryw6RuZyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMyBidWlsdGluL25vdGVzLmM6NTc5Cittc2dpZCAibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiCittc2dzdHIgImFudGVja25pbmdzaW5uZWjDpWxsIGkgZW4gZmlsIgorCisjOiBidWlsdGluL25vdGVzLmM6NDE2IGJ1aWx0aW4vbm90ZXMuYzo1ODIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIsOldGVyYW52w6RuZCBvY2ggcmVkaWdlcmEgYW5naXZldCBhbnRlY2tuaW5nc29iamVrdCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxOSBidWlsdGluL25vdGVzLmM6NTg1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLDpXRlcmFudsOkbmQgYW5naXZldCBhbnRlY2tuaW5nc29iamVrdCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQyMiBidWlsdGluL25vdGVzLmM6NTg4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICJ0aWxsw6V0IGxhZ3JhIHRvbSBhbnRlY2tuaW5nIgorCisjOiBidWlsdGluL25vdGVzLmM6NDIzIGJ1aWx0aW4vbm90ZXMuYzo0OTYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICJlcnPDpHR0IGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiS2FuIGludGUgbMOkZ2dhIHRpbGwgYW50ZWNrbmluZ2FyLiBIaXR0YWRlIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIGbDtnIgIgorIm9iamVrdGV0ICVzLiBBbnbDpG5kIFwiLWZcIiBmw7ZyIGF0dCBza3JpdmEgw7Z2ZXIgYmVmaW50bGlnYSBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NjMgYnVpbHRpbi9ub3Rlcy5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlNrcml2ZXIgw7Z2ZXIgYmVmaW50bGlnYSBhbnRlY2tuaW5nYXIgZsO2ciBvYmpla3RldCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc1IGJ1aWx0aW4vbm90ZXMuYzo2MzcgYnVpbHRpbi9ub3Rlcy5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiVGFyIGJvcnQgYW50ZWNrbmluZyBmw7ZyIG9iamVrdGV0ICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTcKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibMOkcyBvYmpla3QgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTkKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAibMOkcyBvbXNrcml2bmluZ3NpbnN0w6RsbG5pbmcgZsO2ciA8a29tbWFuZG8+IChpbXBsaWNlcmFyIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE3Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJmw7ZyIGbDpSBwYXJhbWV0cmFyIgorCisjOiBidWlsdGluL25vdGVzLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGtvcGllcmEgYW50ZWNrbmluZ2FyLiBIaXR0YWRlIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIGbDtnIgb2JqZWt0ZXQgIgorIiVzLiBBbnbDpG5kIFwiLWZcIiBmw7ZyIGF0dCBza3JpdmEgw7Z2ZXIgYmVmaW50bGlnYSBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgImFudGVja25pbmdhciBww6Uga8OkbGxvYmpla3RldCAlcyBzYWtuYXMuIEthbiBpbnRlIGtvcGllcmEuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJGbGFnZ29ybmEgLW0vLUYvLWMvLUMgcmVrb21tZW5kZXJhcyBpbnRlIGbDtnIgdW5kZXJrb21tYW5kb3QgXCJlZGl0XCIuXG4iCisiQW52w6RuZCBcImdpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUNcIiBpc3TDpGxsZXQuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2OTgKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCByZWZlcmVuc2VuIE5PVEVTX01FUkdFX1BBUlRJQUwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MDAKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IHJlZmVyZW5zZW4gTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzAyCittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQgYXJiZXRza2F0YWxvZ2VuIGbDtnIgXCJnaXQgbm90ZXMgbWVyZ2VcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyMgorbXNnaWQgImZhaWxlZCB0byByZWFkIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgcmVmZXJlbmNlcyBOT1RFU19NRVJHRV9QQVJUSUFMIgorCisjOiBidWlsdGluL25vdGVzLmM6NzI0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgImt1bmRlIGludGUgaGl0dGEgaW5jaGVja25pbmcgZnLDpW4gTk9URVNfTUVSR0VfUEFSVElBTC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgaW5jaGVja25pbmcgZnLDpW4gTk9URVNfTUVSR0VfUEFSVElBTC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MzkKK21zZ2lkICJmYWlsZWQgdG8gcmVzb2x2ZSBOT1RFU19NRVJHRV9SRUYiCittc2dzdHIgIm1pc3NseWNrYWRlcyBiZXN0w6RtbWEgTk9URVNfTUVSR0VfUkVGIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQyCittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplIG5vdGVzIG1lcmdlIgorbXNnc3RyICJtaXNzbHlja2FkZXMgZsOkcmRpZ3N0w6RsbGEgc2FtbWFuc2xhZ25pbmcgYXYgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kgJXMiCittc2dzdHIgIm9rw6RuZCBzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSBmw7ZyIGFudGVja25pbmdhcjogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3ODQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIkFsbG3DpG5uYSBmbGFnZ29yIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiRmxhZ2dvciBmw7ZyIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzg4Cittc2dpZCAiIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKK21zZ3N0ciAiIgorImzDpHMga29uZmxpa3RlciBpIGFudGVja25pbmdhciBtZWQgYW5naXZlbiBzdHJhdGVnaSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIkNoZWNrYXIgaW4gZWogc2FtbWFuc2xhZ25hIGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5MgorbXNnaWQgImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIiIKKyJmw6RyZGlnc3TDpGxsIHNhbW1hbnNsYWduaW5nIGF2IGFudGVja25pbmdhciBnZW5vbSBhdHQgY2hlY2thIGluIGVqICIKKyJzYW1tYW5zbGFnbmEgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzk0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiQXZicnl0IGzDtnNuaW5nIGF2IHNhbW1hbnNsYWduaW5nIGF2IGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJhdmJyeXQgc2FtbWFuc2xhZ25pbmcgYXYgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6ODA3Cittc2dpZCAiY2Fubm90IG1peCAtLWNvbW1pdCwgLS1hYm9ydCBvciAtcy8tLXN0cmF0ZWd5IgorbXNnc3RyICJrYW4gaW50ZSBibGFuZGEgLS1jb21taXQsIC0tYWJvcnQgZWxsZXIgLXMvLS1zdHJhdGVneSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgxMgorbXNnaWQgIm11c3Qgc3BlY2lmeSBhIG5vdGVzIHJlZiB0byBtZXJnZSIKK21zZ3N0ciAibcOlc3RlIGFuZ2UgZW4gYW50ZWNrbmluZ3MtcmVmZXJlbnMgYXR0IHNsw6UgaWhvcCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIgorbXNnc3RyICJva8OkbmQgLXMvLS1zdHJhdGVneTogJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgInNhbW1hbnNsYWduaW5nIGF2IGFudGVja25pbmdhciB0aWxsICVzIMOkciByZWRhbiBpZ8OlbmdzYXR0IHDDpSAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RvcmUgbGluayB0byBjdXJyZW50IG5vdGVzIHJlZiAoJXMpIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbGFncmEgbMOkbmsgdGlsbCBha3R1ZWxsIGFudGVja25pbmdzcmVmZXJlbnMgKCVzKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZC4gRml4IGNvbmZsaWN0cyBpbiAlcyBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAiCisiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcsIG9yIGFib3J0IHRoZSBtZXJnZSB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS0iCisiYWJvcnQnLlxuIgorbXNnc3RyICIiCisiQXV0b21hdGlzayBzYW1tYW5zbGFnbmluZyBhdiBhbnRlY2tuaW5nYXIgbWlzc2x5Y2thZGVzLiBSw6R0dGEga29uZmxpa3RlciBpICIKKyIlcyBvY2ggY2hlY2thIGluIHJlc3VsdGF0ZXQgbWVkIFwiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0XCIsIGVsbGVyIGF2YnJ5dCAiCisic2FtbWFuc2xhZ25pbmdlbiBtZWQgXCJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydFwiLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk3IGJ1aWx0aW4vdGFnLmM6NTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIFwiJXNcIiBzb20gZW4gZ2lsdGlnIHJlZmVyZW5zLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiT2JqZWt0ZXQgJXMgaGFyIGluZ2VuIGFudGVja25pbmdcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxMgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiZsO2cnPDtmsgYXR0IHRhIGJvcnQgaWNrZS1leGlzdGVyYW5kZSBhbnRlY2tuaW5nYXIgw6RyIGludGUgZXR0IGZlbCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjkxNQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsw6RzIG9iamVrdG5hbW4gZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTQgYnVpbHRpbi9wcnVuZS5jOjEzMCBidWlsdGluL3dvcmt0cmVlLmM6MTY0Cittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICJ0YSBpbnRlIGJvcnQsIGJhcmEgdmlzYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgbm90ZXMiCittc2dzdHIgInJhcHBvcnRlcmEgYm9ydHRhZ25hIGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAiYW50ZWNrbmluZ2FyLXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OQorbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICJhbnbDpG5kIGFudGVja25pbmdhciBmcsOlbiA8YW50ZWNrbmluZ3NyZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAzNCBidWlsdGluL3N0YXNoLmM6MTYwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJva8OkbnQgdW5kZXJrb21tYW5kbzogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTIKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxmbGFnZ29yPi4uLl0gWzwgPHJlZmxpc3RhPiB8IDwgPG9iamVrdGxpc3RhPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTMKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxmbGFnZ29yPi4uLl0gPGJhc25hbW4+IFs8IDxyZWZsaXN0YT4gfCA8IDxvYmpla3RsaXN0YT5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICJmZWxha3RpZyBDUkMgZsO2ciBwYWNrYXQgb2JqZWt0ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJ0cmFzaWd0IHBhY2thdCBvYmpla3QgZsO2ciAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjdXJzaXZlIGRlbHRhIGRldGVjdGVkIGZvciBvYmplY3QgJXMiCittc2dzdHIgInJla3Vyc2l2dCBkZWx0YSB1cHB0w6Rja3RlcyBmw7ZyIG9iamVrdGV0ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAib3JkbmFkZSAldSBvYmpla3QsIGbDtnJ2w6RudGFkZSAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIGlzIGludmFsaWQ6ICVzIgorbXNnc3RyICJwYWNrZmlsIMOkciBvZ2lsdGlnOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcGFja2ZpbGUgZm9yIHJldXNlOiAlcyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hIHBhY2tmaWwgZsO2ciDDpXRlcmFudsOkbmRuaW5nOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MDIKK21zZ2lkICJ1bmFibGUgdG8gc2VlayBpbiByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgImthbiBpbnRlIHPDtmthIGkgw6V0ZXJhbnbDpG5kIHBhY2tmaWwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODEzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIGZyw6VuIMOldGVyYW52w6RuZCBwYWNrZmlsIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjg0MQorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgcGFja3MgYXJlIHNwbGl0IGR1ZSB0byBwYWNrLnBhY2tTaXplTGltaXQiCittc2dzdHIgIiIKKyJpbmFrdGl2ZXJhciBza3Jpdm5pbmcgYXYgYml0a2FydGEsIHBha2V0IGRlbGFzIHDDpSBncnVuZCBhdiBwYWNrLnBhY2tTaXplTGltaXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODU0Cittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICJTa3JpdmVyIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MTcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIHN0YXR1cyBww6UgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb3RlICU8UFJJdTMyPiBvYmplY3RzIHdoaWxlIGV4cGVjdGluZyAlPFBSSXUzMj4iCittc2dzdHIgInNrcmV2ICU8UFJJdTMyPiBvYmpla3QgbWVkYW4gJTxQUkl1MzI+IGbDtnJ2w6RudGFkZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTE2NAorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICJpbmFrdGl2ZXJhciBza3Jpdm5pbmcgYXYgYml0a2FydGEgZMOlIG7DpWdyYSBvYmpla3QgaW50ZSBwYWNrYXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIKK21zZ3N0ciAiZGVsdGFiYXNvZmZzZXQgdXRhbmbDtnIgZ3LDpG5zZW4gaSBwYWNrIGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTYwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICJkZWx0YWJhc29mZnNldCB1dGFuZsO2ciBncsOkbnN2w6RyZGVuIGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTg3MAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIlLDpGtuYXIgb2JqZWt0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBzaXplIG9mICVzIgorbXNnc3RyICJrYW4gaW50ZSBow6RtdGEgc3RvcmxlayBww6UgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBvYmpla3RodXZ1ZCBmw7ZyICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTAxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJvYmpla3RldCAlcyBrdW5kZSBpbnRlIGzDpHNhcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIm9iamVrdGV0ICVzIGhhciBpbmtvbnNpc3RlbnQgb2JqZWt0bMOkbmdkICglPFBSSXVNQVg+IG1vdCAlPFBSSXVNQVg+KSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTI1Cittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiaWNrZS1vcHRpbWFsdCBwYWNrIC0gbWlubmV0IHNsdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICJEZWx0YWtvbXByaW1lcmluZyBhbnbDpG5kZXIgdXBwIHRpbGwgJWQgdHLDpWRhciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICJrYW4gaW50ZSBwYWNrYSBvYmpla3QgbsOlYmFyYSBmcsOlbiB0YWdnZW4gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIktvbXByaW1lcmFyIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY1Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICJkZWx0YXLDpGtuYXJlbiDDpHIgaW5rb25zZWt2ZW50IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4cGVjdGVkIGVkZ2Ugb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyJmw7ZydsOkbnRhZGUga2FudC1vYmpla3QtaWQsIGZpY2sgc2tyw6RwOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorImbDtnJ2w6RudGFkZSBvYmpla3QtaWQsIGZpY2sgc2tyw6RwOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODQ2Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICJvZ2lsdGlndCB2w6RyZGUgZsO2ciAtLW1pc3NpbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMTMKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgcGFrZXRmaWxlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCBhdCAlcyBjb3VsZCBub3QgYmUgZXhhbWluZWQiCittc2dzdHIgImzDtnNhIG9iamVrdCBww6UgJXMga3VuZGUgaW50ZSB1bmRlcsO2a2FzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMjEKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICJrYW4gaW50ZSB0dmluZ2EgbMO2c2Egb2JqZWt0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmV2ICclcyciCittc2dzdHIgImludGUgZW4gcmVmZXJlbnMgXCIlc1wiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uICclcyciCittc2dzdHIgImZlbGFrdGlnIHJldmlzaW9uIFwiJXNcIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQxCittc2dpZCAidW5hYmxlIHRvIGFkZCByZWNlbnQgb2JqZWN0cyIKK21zZ3N0ciAia2FuIGludGUgbMOkZ2dhIHRpbGwgbnlhIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgImluZGV4dmVyc2lvbmVuICVzIHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgImZlbGFrdGlnIGluZGV4dmVyc2lvbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNgorbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM3Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAic2tyaXYgcGFrZXRpbmRleGZpbGVuIGkgYW5naXZlbiBpbmRleGZvcm1hdHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIm1heGltYWwgc3RvcmxlayBww6UgdmFyamUgdXRkYXRhcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiaWdub3JlcmEgbMOlbmFkZSBvYmpla3QgZnLDpW4gc3VwcGxlcmFuZGUgb2JqZWt0bGFnZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NAorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiaWdub3JlcmEgcGFja2FkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImJlZ3LDpG5zYSBwYWtldGbDtm5zdGVyIGVmdGVyIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ4Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiYmVncsOkbnNhIHBha2V0ZsO2bnN0ZXIgZWZ0ZXIgbWlubmUgZsO2cnV0b20gb2JqZWt0Z3LDpG5zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTAKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAibWF4aW1hbCBsw6RuZ2QgcMOlIGRlbHRha2VkamEgdGlsbMOldGVuIGkgc2x1dGxpZ3QgcGFrZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1MgorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIGJlZmludGxpZ2EgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NAorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgIsOldGVyYW52w6RuZCBiZWZpbnRsaWdhIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU2Cittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJhbnbDpG5kIE9GU19ERUxUQS1vYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1OAorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgImFudsOkbmQgdHLDpWRhciB2aWQgc8O2a25pbmcgZWZ0ZXIgYsOkc3RhIGRlbHRhdHLDpGZmYXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MAorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgImbDtnJzw7ZrIGludGUgc2thcGEgdG9tIHBha2V0dXRkYXRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjIKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsw6RzIHJldmlzaW9uc2FyZ3VtZW50IGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjQKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiYmVncsOkbnNhIG9iamVrdCB0aWxsIGRlbSBzb20gw6RubnUgaW50ZSBwYWNrYXRzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAiaW5rbHVkZXJhIG9iamVrdCBzb20ga2FuIG7DpXMgZnLDpW4gbsOlZ29uIHJlZmVyZW5zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzAKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgImlua2x1ZGVyYSBvYmpla3Qgc29tIHJlZmVyZXJhcyBmcsOlbiByZWZlcmVuc2xvZ2dwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgImlua2x1ZGVyYSBvYmpla3Qgc29tIHJlZmVyZXJhcyBmcsOlbiBpbmRleGV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzYKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgInNrcml2IHBha2V0IHDDpSBzdGFuZGFyZCB1dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc4Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICJpbmtsdWRlcmEgdGFnZ29iamVrdCBzb20gcmVmZXJlcmFyIG9iamVrdCBzb20gc2thbGwgcGFja2FzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImJlaMOlbGwgb27DpWJhcmEgb2JqZWt0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODIKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInBhY2thIGzDtnNhIG9uw6ViYXJhIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg0Cittc2dpZCAidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iCittc2dzdHIgInBhY2thIHVwcCBvbsOlYmFyYSBvYmpla3QgbnlhcmUgw6RuIDx0aWQ+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODcKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICJhbnbDpG5kIGdsZXMtbsOlYmFyaGV0c2FsZ29yaXRtZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJza2FwYSB0dW5uYSBwYWtldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkxCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgInNrYXBhIHBhY2tmaWxlciBsw6RtcGFkZSBmw7ZyIGdydW5kYSBow6RtdG5pbmdhciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkzCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiaWdub3JlcmEgcGFrZXQgc29tIGhhciB0aWxsaMO2cmFuZGUgLmtlZXAtZmlsIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTUKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICJpZ25vcmVyYSBkZXR0YSBwYWtldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk3Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAia29tcHJpbWVyaW5nc2dyYWQgZsO2ciBwYWtldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk5Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgImfDtm0gaW50ZSBpbmNoZWNrbmluZ2FyIG1lZCB5bXBuaW5nYXIgKFwiZ3JhZnRzXCIpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDEKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgImFudsOkbmQgYml0a2FydGluZGV4IG9tIHRpbGxnw6RuZ2xpZ3QgZsO2ciBhdHQgcsOka25hIG9iamVrdCBzbmFiYmFyZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAzCittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAiYW52w6RuZCBiaXRrYXJ0aW5kZXggdGlsbHNhbW1hbnMgbWVkIHBhY2tpbmRleGV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDcKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIKK21zZ3N0ciAic2tyaXYgYml0a2FydGluZGV4IG9tIG3DtmpsaWd0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTEKK21zZ2lkICJoYW5kbGluZyBmb3IgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJoYW50ZXJpbmcgYXYgc2FrbmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNAorbXNnaWQgImRvIG5vdCBwYWNrIG9iamVjdHMgaW4gcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICJwYWNrYSBpbnRlIG9iamVrdCBpIGtvbnRyYWt0c3BhY2tmaWxlciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzE2Cittc2dpZCAicmVzcGVjdCBpc2xhbmRzIGR1cmluZyBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAicmVzcGVrdGVyYSDDtmFyIHVuZGVyIGRlbHRha29tcHJpbWVyaW5nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgImRlbHRha2VkamVkanVwZXQgJWQgw6RyIGbDtnIgZGp1cHQsIHDDpXR2aW5nYXIgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAicGFjay5kZWx0YUNhY2hlTGltaXQgw6RyIGbDtnIgaMO2Z3QsIHDDpXR2aW5nYXIgJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNAorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICIiCisiLS1tYXgtcGFjay1zaXplIGthbiBpbnRlIGFudsOkbmRhcyBmw7ZyIGF0dCBieWdnYSBldHQgcGFrZXQgc29tIHNrYWxsIMO2dmVyZsO2cmFzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDYKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAibWluc3RhIHBhY2tzdG9ybGVrIMOkciAxIE1pQiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICItLXRoaW4ga2FuIGludGUgYW52w6RuZGFzIGbDtnIgYXR0IGJ5Z2dhIGV0dCBpbmRleGVyYmFydCBwYWtldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDE0Cittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgb2NoIC11bnBhY2stdW5yZWFjaGFibGUga2FuIGludGUgYW52w6RuZGFzIHNhbXRpZGlndCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIwCittc2dpZCAiY2Fubm90IHVzZSAtLWZpbHRlciB3aXRob3V0IC0tc3Rkb3V0IgorbXNnc3RyICJrYW4gaW50ZSBhbnbDpG5kYSAtLWZpbHRlciB1dGFuIC0tc3Rkb3V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0ODEKK21zZ2lkICJFbnVtZXJhdGluZyBvYmplY3RzIgorbXNnc3RyICJSw6RrbmFyIHVwcCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzUxMQorIywgYy1mb3JtYXQKK21zZ2lkICJUb3RhbCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPiksIHJldXNlZCAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPikiCittc2dzdHIgIiIKKyJUb3RhbHQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCDDpXRlcmFudsOkbmRlICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo4Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAicGFja2EgYWxsdCIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNworbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICJ0YSBib3J0IGzDtnNhIHJlZmVyZW5zZXIgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiVGFyIGJvcnQgZHVwbGljZXJhZGUgb2JqZWt0IgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpZD5dIFstLV0gWzxodXZ1ZD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTMxCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICJyYXBwb3J0ZXJhIGJvcnR0YWduYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAibMOldCB0aWQgZ8OlIHV0IGbDtnIgb2JqZWt0IMOkbGRyZSDDpG4gPHRpZD4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAiYmVncsOkbnNhIHZhbmRyaW5nIGF2IG9iamVrdCB1dGFuZsO2ciBrb250cmFrdHNwYWNrZmlsZXIuIgorCisjOiBidWlsdGluL3BydW5lLmM6MTUwCittc2dpZCAiY2Fubm90IHBydW5lIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJrYW4gaW50ZSByZW5zYSBpIGV0dCBcInByZWNpb3VzLW9iamVrdFwiLWFya2l2IgorCisjOiBidWlsdGluL3B1bGwuYzo2NiBidWlsdGluL3B1bGwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIkZlbGFrdGlndCB2w6RyZGUgZsO2ciAlczogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4Cittc2dpZCAiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdWxsIFs8ZmxhZ2dvcj5dIFs8YXJraXY+IFs8cmVmc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQyCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgInN0eXJuaW5nIGbDtnIgcmVrdXJzaXYgaMOkbXRuaW5nIGF2IHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIkFsdGVybmF0aXYgZ8OkbGxhbmRlIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDkKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgImlubGVtbWEgw6RuZHJpbmdhciBnZW5vbSBvbWJhc2VyaW5nIGkgc3TDpGxsZXQgZsO2ciBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6NDY3IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI2Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIgorbXNnc3RyICJ0aWxsw6V0IHNuYWJic3BvbG5pbmciCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE4NgorbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIgcmViYXNlIgorbXNnc3RyICJ1dGbDtnIgYXV0b21hdGlza3Qgc3Rhc2gvc3Rhc2ggcG9wIGbDtnJlIG9jaCBlZnRlciBvbWJhc2VyaW5nIgorCisjOiBidWlsdGluL3B1bGwuYzoyMDIKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIkFsdGVybmF0aXYgZ8OkbGxhbmRlIGjDpG10bmluZ2FyIgorCisjOiBidWlsdGluL3B1bGwuYzoyMTIKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJ0dmluZ2Egw7Z2ZXJza3Jpdm5pbmcgYXYgbG9rYWwgZ3JlbiIKKworIzogYnVpbHRpbi9wdWxsLmM6MjIwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICJhbnRhbCB1bmRlcm1vZHVsZXIgc29tIGjDpG10YXMgcGFyYWxsZWxsdCIKKworIzogYnVpbHRpbi9wdWxsLmM6MzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJGZWxha3RpZ3QgdsOkcmRlIGbDtnIgcHVsbC5mZjogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNworbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJEZXQgZmlubnMgaW5nZW4ga2FuZGlkYXQgZsO2ciBvbWJhc2VyaW5nIGJsYW5kIHJlZmVyZW5zZXJuYSBkdSBwcmVjaXMgaGFyICIKKyJow6RtdGF0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJEZXQgZmlubnMgaW5nZW4ga2FuZGlkYXQgZsO2ciBzYW1tYW5zbGFnbmluZyBibGFuZCByZWZlcmVuc2VybmEgZHUgcHJlY2lzIGhhciAiCisiaMOkbXRhdC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MAorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyJEZXQgYmV0eWRlciB2YW5saWd0dmlzIGF0dCBkdSBhbnbDpG50IGVuIGpva2VydGVja2VuLXJlZnNwZWMgc29tIGludGVcbiIKKyJtb3RzdmFyYWRlIG7DpWdvdCBpIGZqw6RycsOkbmRlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiRHUgYmFkIG9tIGF0dCBow6RtdGEgZnLDpW4gZmrDpHJyZW4gXCIlc1wiLCBtZW4gYW5nYXYgaW50ZSBuw6Vnb25cbiIKKyJncmVuLiBFZnRlcnNvbSBkZXQgaW50ZSDDpHIgZGVuIGZqw6RyciBzb20gw6RyIGtvbmZpZ3VyZXJhZCBzb21cbiIKKyJzdGFuZGFyZCBmw7ZyIGFrdHVlbGwgZ3JlbiBtw6VzdGUgZHUgYW5nZSBlbiBncmVuIHDDpSBrb21tYW5kb3JhZGVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ4IGJ1aWx0aW4vcmViYXNlLmM6MTM3NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjczCittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAiRHUgw6RyIGludGUgcMOlIG7DpWdvbiBncmVuIGbDtnIgbsOkcnZhcmFuZGUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTAgYnVpbHRpbi9wdWxsLmM6NDY1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzkKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuIgorbXNnc3RyICJBbmdlIHZpbGtlbiBncmVuIGR1IHZpbGwgb21iYXNlcmEgbW90LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcHVsbC5jOjQ2NyBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICJBbmdlIHZpbGtlbiBncmVuIGR1IHZpbGwgc2zDpSBzYW1tYW4gbWVkLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUzIGJ1aWx0aW4vcHVsbC5jOjQ2OAorbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlNlIGdpdC1wdWxsKDEpIGbDtnIgZGV0YWxqZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTUgYnVpbHRpbi9wdWxsLmM6NDYxIGJ1aWx0aW4vcHVsbC5jOjQ3MAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgxIGdpdC1wYXJzZS1yZW1vdGUuc2g6NjQKK21zZ2lkICI8cmVtb3RlPiIKK21zZ3N0ciAiPGZqw6Rycj4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NzAgYnVpbHRpbi9wdWxsLmM6NDc1CisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjY1Cittc2dpZCAiPGJyYW5jaD4iCittc2dzdHIgIjxncmVuPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYzIGJ1aWx0aW4vcmViYXNlLmM6MTM3MyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIkRldCBmaW5ucyBpbmdlbiBzcMOlcm5pbmdzaW5mb3JtYXRpb24gZsO2ciBha3R1ZWxsIGdyZW4uIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzIgZ2l0LXBhcnNlLXJlbW90ZS5zaDo5NQorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDoiCittc2dzdHIgIk9tIGR1IHZpbGwgYW5nZSBzcMOlcm5pbmdzaW5mb3JtYXRpb24gZsO2ciBncmVuZW4ga2FuIGR1IGfDtnJhIGRldCBtZWQ6IgorCisjOiBidWlsdGluL3B1bGwuYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJEaW5hIGluc3TDpGxsbmluZ2FyIGFuZ2VyIHNhbW1hbnNsYWduaW5nIG1lZCByZWZlcmVuc2VuIFwiJXNcIlxuIgorImZyw6VuIGZqw6RycmVuLCBtZW4gbsOlZ29uIHPDpWRhbiByZWZlcmVucyB0b2dzIGludGUgZW1vdC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBrb21tYSDDpXQgaW5jaGVja25pbmdlbiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODY3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICJpZ25vcmVyYSAtLXZlcmlmeS1zaWduYXR1cmVzIGbDtnIgb21iYXNlcmluZyIKKworIzogYnVpbHRpbi9wdWxsLmM6OTIyCittc2dpZCAiLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gaXMgb25seSB2YWxpZCB3aXRoIC0tcmViYXNlLiIKK21zZ3N0ciAiLS1bbm8tXWF1dG9zdGFzaCDDpHIgZW5kYXN0IGdpbHRpZyBtZWQgLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICJVcHBkYXRlcmFyIGVuIG9mw7ZkZCBncmVuIG1lZCDDpG5kcmluZ2FyIHNvbSBsYWd0cyB0aWxsIGkgaW5kZXhldC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgInB1bGwgbWVkIG9tYmFzZXJpbmciCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgImNoZWNrYSBpbiBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBww6UgZGVtLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorImZldGNoIHVwcGRhdGVyYWRlIGh1dnVkZXQgZsO2ciBha3R1ZWxsIGdyZW4uXG4iCisic25hYmJzcG9sYXIgZGluIGFyYmV0c2thdGFsb2cgZnLDpW5cbiIKKyJpbmNoZWNrbmluZ2VuICVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIHNuYWJic3BvbGEgZGluIGFyYmV0c2thdGFsb2cuXG4iCisiTsOkciBkdSDDpHIgc8Oka2VyIHDDpSBhdHQgZHUgaGFyIHNwYXJhdCBhbGx0IHbDpHJkZWZ1bGx0IGkgdXRkYXRhIGZyw6VuXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorImvDtnIgZHVcbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJmw7ZyIGF0dCDDpXRlcmfDpS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk4MQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICJLYW4gaW50ZSBzbMOlIGlob3AgZmxlcmEgZ3JlbmFyIGkgZXR0IHRvbXQgaHV2dWQuIgorCisjOiBidWlsdGluL3B1bGwuYzo5ODUKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICJLYW4gaW50ZSBvbWJhc2VyYSBvdmFucMOlIGZsZXJhIGdyZW5hci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk5MgorbXNnaWQgImNhbm5vdCByZWJhc2Ugd2l0aCBsb2NhbGx5IHJlY29yZGVkIHN1Ym1vZHVsZSBtb2RpZmljYXRpb25zIgorbXNnc3RyICJrYW4gaW50ZSBvbWJhc2VyYSBtZWQgbG9rYWx0IGxhZ3JhZGUgw6RuZHJpbmdhciBpIHVuZGVybW9mdWwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs8ZmxhZ2dvcj5dIFs8YXJraXY+IFs8cmVmc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTEyCittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJ0YWdnZsO2cmtvcnRuaW5nIHV0YW4gPHRhZ2c+IgorCisjOiBidWlsdGluL3B1c2guYzoxMjIKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgZ29kdGFyIGVuZGFzdCBlbmtsYSBtw6VscmVmZXJlbnNuYW1uIgorCisjOiBidWlsdGluL3B1c2guYzoxNjgKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiRsO2ciBhdHQgdsOkbGphIGV0dCBhdiBhbHRlcm5hdGl2ZW4gcGVybWFuZW50LCBzZSBwdXNoLmRlZmF1bHQgaSBcImdpdCBoZWxwICIKKyJjb25maWdcIi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQURcbiIKKyIlcyIKK21zZ3N0ciAiIgorIlVwcHN0csO2bXNncmVuZW4gZsO2ciBkaW4gbnV2YXJhbmRlIGdyZW4gc3TDpG1tZXIgaW50ZSDDtnZlcmVuc1xuIgorIm1lZCBuYW1uZXQgcMOlIGRpbiBha3R1ZWxsYSBncmVuLiBGw7ZyIGF0dCBzw6RuZGEgdGlsbCB1cHBzdHLDtm1zZ3JlbmVuXG4iCisiaSBmasOkcnJhcmtpdmV0IGFudsOkbmRlciBkdVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiRsO2ciBhdHQgc8OkbmRhIHRpbGwgZ3JlbmVuIG1lZCBzYW1tYSBuYW1uIGkgZmrDpHJyYXJraXZldCBhbnbDpG5kZXIgZHVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRFxuIgorIiVzIgorCisjOiBidWlsdGluL3B1c2guYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisiRHUgw6RyIGludGUgcMOlIG7DpWdvbiBncmVuIGbDtnIgbsOkcnZhcmFuZGUuXG4iCisiRsO2ciBhdHQgc8OkbmRhIGluIGhpc3RvcmlrZW4gc29tIGxlZGVyIHRpbGwgZGVuIGFrdHVlbGxhIChmcsOlbmtvcHBsYXRcbiIKKyJIRUFEKSBzaXR1YXRpb25lbiBhbnbDpG5kZXIgZHVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtbi1ww6UtZmrDpHJyZ3Jlbj5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisiRGVuIGFrdHVlbGxhIGdyZW5lbiAlcyBoYXIgaW5nZW4gdXBwc3Ryw7Ztc2dyZW4uXG4iCisiRsO2ciBhdHQgc8OkbmRhIGFrdHVlbGwgZ3JlbiBvY2ggYW5nZSBmasOkcnJhcmtpdiBzb20gdXBwc3Ryw7ZtIGFudsOkbmRlciBkdVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIkRlbiBha3R1ZWxsYSBncmVuZW4gJXMgaGFyIGZsZXJhIHVwcHN0csO2bXNncmVuYXIsIHbDpGdyYXIgc8OkbmRhLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKyJEdSBzw6RuZGVyIHRpbGwgZmrDpHJyZW4gXCIlc1wiLCBzb20gaW50ZSDDpHIgdXBwc3Ryw7ZtcyBmw7ZyIGRlblxuIgorImFrdHVlbGxhIGdyZW5lbiBcIiVzXCIsIHV0YW4gYXR0IHRhbGEgb20gZsO2ciBtaWcgdmFkIHNvbVxuIgorInNrYWxsIHPDpG5kYXMgZsO2ciBhdHQgdXBwZGF0ZXJhIGZqw6RycmdyZW5lbi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiRHUgYW5nYXYgaW5nYSByZWZlcmVuc3NwZWNpZmlrYXRpb25lciBhdHQgc8OkbmRhLCBvY2ggcHVzaC5kZWZhdWx0IMOkciAiCisiXCJub3RoaW5nXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoyNzcKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJVcHBkYXRlcmluZ2FyIGF2dmlzYWRlcyBkw6Ugw6RuZGVuIHDDpSBkaW4gYmVmaW50bGlnYSBncmVuIMOkciBiYWtvbVxuIgorImRlc3MgZmrDpHJybW90c3ZhcmlnaGV0LiBJbnRlZ3JlcmEgZmrDpHJyw6RuZHJpbmdhcm5hICh0LmV4XG4iCisiXCJnaXQgcHVsbCAuLi4uXCIpIGlubmFuIGR1IHPDpG5kZXIgaWdlbi5cbiIKKyJTZSBhdnNuaXR0ZXQgXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZFwiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgzCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiVXBwZGF0ZXJpbmdhciBhdnZpc2FkZXMgZMOlIMOkbmRlbiBww6UgZW4gZ3JlbiBzb20gc8OkbmRzIGluIMOkciBiYWtvbSBkZXNzXG4iCisiZmrDpHJybW90c3ZhcmlnaGV0LiBDaGVja2EgdXQgZ3JlbmVuIG9jaCBpbnRlZ3JlcmEgZmrDpHJyw6RuZHJpbmdhcm5hICh0LmV4LlxuIgorIlwiZ2l0IHB1bGwgLi4uXCIpIGlubmFuIGR1IHPDpG5kZXIgaWdlbi5cbiIKKyJTZSBhdnNuaXR0ZXQgXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZFwiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg5Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlVwcGRhdGVyaW5nYXIgYXZ2aXNhZGVzIGTDpSBmasOkcnJlbiBpbm5laMOlbGxlciDDpG5kcmluZ2FyIHNvbSBkdSBpbnRlXG4iCisiaGFyIGxva2FsdC4gRGV0IGJlcm9yIG9mdGFzdCBww6UgYXR0IGV0dCBhbm5hdCBhcmtpdiBoYXIgc8OkbnQgaW4gc2FtbWFcbiIKKyJyZWZlcmVuc2VyLiBEZXQga2FuIHZhcmEgZW4gaWTDqSBhdHQgZsO2cnN0IGludGVncmVyYSBmasOkcnLDpG5kcmluZ2FybmFcbiIKKyIodC5leC4gXCJnaXQgcHVsbCAuLi5cIikgaW5uYW4gZHUgc8OkbmRlciBpZ2VuLlxuIgorIlNlIGF2c25pdHRldCBcIk5vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc1wiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk2Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiVXBwZGF0ZXJpbmdhcm5hIGF2dmlzYWRlcyBlZnRlcnNvbSB0YWdnZW4gcmVkYW4gZmlubnMgcMOlIGZqw6RycmVuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJEdSBrYW4gaW50ZSB1cHBkYXRlcmEgZW4gZmrDpHJyLXJlZmVyZW5zIHNvbSBwZWthciBww6UgZXR0IG9iamVrdCBzb21cbiIKKyJpbnRlIMOkciBlbiBpbmNoZWNrbmluZywgZWxsZXIgdXBwZGF0ZXJhIGVuIGZqw6Ryci1yZWZlcmVucyBzw6UgYXR0IGRlblxuIgorInBla2FyIHDDpSBuw6Vnb3Qgc29tIGludGUgw6RyIGVuIGluY2hlY2tuaW5nLCB1dGFuIGF0dCBhbnbDpG5kYSBmbGFnZ2FuXG4iCisiXCItLWZvcmNlXCIuXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlPDpG5kZXIgdGlsbCAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBzw6RuZGEgdmlzc2EgcmVmZXJlbnNlciB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQyCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAiYXJraXYiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MyBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgInPDpG5kIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJzcGVnbGEgYWxsYSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAidGEgYm9ydCByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgInPDpG5kIHRhZ2dhciAoa2FuIGludGUgYW52w6RuZGFzIG1lZCAtLWFsbCBlbGxlciAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgInR2aW5nYSB1cHBkYXRlcmluZ2FyIgorCisjOiBidWlsdGluL3B1c2guYzo1NTIgYnVpbHRpbi9zZW5kLXBhY2suYzoxODEKK21zZ2lkICI8cmVmbmFtZT46PGV4cGVjdD4iCittc2dzdHIgIjxyZWZuYW1uPjo8ZsO2cnbDpG50YT4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MyBidWlsdGluL3NlbmQtcGFjay5jOjE4MgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICJrcsOkdiBhdHQgcmVmOnMgdGlkaWdhcmUgdsOkcmRlIMOkciBkZXR0YSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJzdHlyIHJla3Vyc2l2IGluc8OkbmRuaW5nIGF2IHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAiYW52w6RuZCB0dW5uYSBwYWtldCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU5IGJ1aWx0aW4vcHVzaC5jOjU2MCBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjIKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAicHJvZ3JhbSBmw7ZyIGF0dCB0YSBlbW90IHBha2V0IgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAic3TDpGxsIGluIHVwcHN0csO2bSBmw7ZyIGdpdCBwdWxsL3N0YXR1cyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY0Cittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgInRhIGJvcnQgbG9rYWx0IGJvcnR0YWduYSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NjYKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiZsO2cmJpZ8OlIHByZS1wdXNoLWtyb2siCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAic8OkbmQgaW4gc2FrbmFkZSBtZW4gcmVsZXZhbnRhIHRhZ2dhciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTcwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgIkdQRy1zaWduZXJhIGluc8OkbmRuaW5nZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MiBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJiZWfDpHIgYXRvbWlza2EgdHJhbnNha3Rpb25lciBww6UgZmrDpHJyc2lkYW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MAorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDDpHIgaW5rb21wYXRpYmVsIG1lZCAtLWFsbCwgLS1taXJyb3Igb2NoIC0tdGFncyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTkyCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIGthbiBpbnRlIGFudsOkbmRhcyB1dGFuIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJmZWxha3RpZ3QgYXJraXYgXCIlc1wiIgorCisjOiBidWlsdGluL3B1c2guYzo2MTMKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorIkluZ2VuIGRlc3RpbmF0aW9uIGhhciBhbmdpdml0cy5cbiIKKyJBbmdlIGFudGluZ2VuIFVSTDplbiBww6Uga29tbWFuZG9yYWRlbiBlbGxlciBzdMOkbGwgaW4gZXR0IHVwcHN0csO2bXNhcmtpdiBtZWRcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbW4+IDx1cmw+XG4iCisiXG4iCisib2NoIHPDpG5kIHNlZGFuIG1lZCBoasOkbHAgYXYgZmrDpHJybmFtbmV0XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1uPlxuIgorCisjOiBidWlsdGluL3B1c2guYzo2MjgKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIG9jaCAtLXRhZ3Mgw6RyIGlua29tcGF0aWJsYSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjMwCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1hbGwga2FuIGludGUga29tYmluZXJhcyBtZWQgcmVmZXJlbnNzcGVjaWZpa2F0aW9uZXIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzNAorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3Igb2NoIC0tdGFncyDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL3B1c2guYzo2MzYKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLW1pcnJvciBrYW4gaW50ZSBrb21iaW5lcmFzIG1lZCByZWZlcmVuc3NwZWNpZmlrYXRpb25lciIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM5Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIG9jaCAtLW1pcnJvciDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL3B1c2guYzo2NDMKK21zZ2lkICJwdXNoIG9wdGlvbnMgbXVzdCBub3QgaGF2ZSBuZXcgbGluZSBjaGFyYWN0ZXJzIgorbXNnc3RyICJwdXNoLWZsYWdnb3Iga2FuIGludGUgaW5uZWjDpWxsYSByYWRicnl0bmluZyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6OAorbXNnaWQgImdpdCByYW5nZS1kaWZmIFs8b3B0aW9ucz5dIDxvbGQtYmFzZT4uLjxvbGQtdGlwPiA8bmV3LWJhc2U+Li48bmV3LXRpcD4iCittc2dzdHIgIiIKKyJnaXQgcmFuZ2UtZGlmZiBbPGZsYWdnb3I+XSA8Z2FtbWFsLWJhcz4uLjxnYW1tYWwtw6RuZGE+IDxueS1iYXM+Li48bnktw6RuZGE+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo5Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPGZsYWdnb3I+XSA8Z2FtbWFsLWJhcz4uLjxueS3DpG5kYT4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjEwCittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPGJhc2U+IDxvbGQtdGlwPiA8bmV3LXRpcD4iCittc2dzdHIgImdpdCByYW5nZS1kaWZmIFs8ZmxhZ2dvcj5dIDxiYXM+IDxnYW1tYWwtw6RuZGE+IDxueS3DpG5kYT4iCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjIyCittc2dpZCAiUGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIKK21zZ3N0ciAiUHJvY2VudCBzb20gc2thcGVsc2UgdsOkZ3MgbWVkIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNAorbXNnaWQgInVzZSBzaW1wbGUgZGlmZiBjb2xvcnMiCittc2dzdHIgImFudsOkbmQgZW5rbGEgZGlmZi1mw6RyZ2VyIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorbXNnaWQgIm5vdGVzIgorbXNnc3RyICJhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAic8OkbmRzIHRpbGwgXCJnaXQgbG9nXCIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICIuLiBzYWtuYXMgaSBpbnRlcnZhbGw6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NjQKK21zZ2lkICJzaW5nbGUgYXJnIGZvcm1hdCBtdXN0IGJlIHN5bW1ldHJpYyByYW5nZSIKK21zZ3N0ciAiZW5zYW10IGFyZ3VtZW50IG3DpXN0ZSB2YXJhIHN5bW1ldHJpc2t0IGludGVydmFsbCIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NzkKK21zZ2lkICJuZWVkIHR3byBjb21taXQgcmFuZ2VzIgorbXNnc3RyICJiZWjDtnZlciB0dsOlIGluY2hlY2tuaW5nc2ludGVydmFsbCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzo0MQorbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsPl0gKC0tZW1wdHkgfCA8dHLDpGQtaWd0MT4gWzx0csOkZC1pZ3QyPiBbPHRyw6RkLWlndDM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgInNrcml2IHJlc3VsdGVyYW5kZSBpbmRleCB0aWxsIDxmaWw+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICJ0w7ZtIGJhcmEgaW5kZXhldCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjkKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJTYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICJ1dGbDtnIgZW4gc2FtbWFuc2xhZ25pbmcgaSB0aWxsw6RnZyB0aWxsIGVuIGzDpHNuaW5nIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAiMy12w6Rnc3NhbW1hbnNsYWduaW5nIG9tIHNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBlaiBrcsOkdnMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiMy12w6Rnc3NhbW1hbnNsYWduaW5nIG7DpHIgZGV0IGZpbm5zIHRpbGzDpGdnIG9jaCBib3J0dGFnbmluZ2FyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgInNvbSAtbSwgbWVuIGthc3RhIGJvcnQgZWogc2FtbWFuc2xhZ25hIHBvc3RlciIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzgKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjx1bmRlcmthdGFsb2c+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAibMOkcyBpbiB0csOkZGV0IGkgaW5kZXhldCB1bmRlciA8dW5kZXJrYXRhbG9nPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQyCittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAidXBwZGF0ZXJhIGFyYmV0c2thdGFsb2dlbiBtZWQgcmVzdWx0YXRldCBmcsOlbiBzYW1tYW5zbGFnbmluZ2VuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0NQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAidGlsbMOldCBleHBsaWNpdCBpZ25vcmVyYWRlIGZpbGVyIGF0dCBza3JpdmFzIMO2dmVyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0OAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAia29udHJvbGxlcmEgaW50ZSBhcmJldHNrYXRhbG9nZW4gZWZ0ZXIgc2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ5Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJ1cHBkYXRlcmEgaW50ZSBpbmRleGV0IGVsbGVyIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgImhvcHBhIMO2dmVyIGF0dCBhcHBsaWNlcmEgZmlsdGVyIGbDtnIgZ2xlcyB1dGNoZWNrbmluZyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgImZlbHPDtmsgdW5wYWNrLXRyZWVzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1NworbXNnaWQgInN1cHByZXNzIGZlZWRiYWNrIG1lc3NhZ2VzIgorbXNnc3RyICJ1bmRlcnRyeWNrIMOldGVya29wcGxpbmdzbWVkZGVsYW5kZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4Cittc2dpZCAiWW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIkR1IG3DpXN0ZSBsw7ZzYSBkaXR0IGJlZmludGxpZ2EgaW5kZXggZsO2cnN0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMyCittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBzdHJlYW0+IFs8YnJhbmNoPl1dIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSBbLWldIFtmbGFnZ29yXSBbLS1leGVjIDxrbWQ+XSBbLS1vbnRvIDxueWJhcz4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBwc3Ryw7ZtPiBbPGdyZW4+XV0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW2ZsYWdnb3JdIFstLWV4ZWMgPGttZD5dIFstLW9udG8gPG55YmFzPl0gLS1yb290IFs8Z3Jlbj5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2Cittc2dpZCAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorbXNnc3RyICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc3IGJ1aWx0aW4vcmViYXNlLmM6MjAxIGJ1aWx0aW4vcmViYXNlLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIHRvZG8gbGlzdDogJyVzJyIKK21zZ3N0ciAib2FudsOkbmRiYXIgdG9kby1saXN0YTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2IGJ1aWx0aW4vcmViYXNlLmM6MjEyIGJ1aWx0aW4vcmViYXNlLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgXCIlc1wiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyNzEKK21zZ2lkICJubyBIRUFEPyIKK21zZ3N0ciAiaW5nZXQgSEVBRD8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIHRlbXBvcsOkciAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMDQKK21zZ2lkICJjb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBtYXJrZXJhIHNvbSBpbnRlcmFrdGl2IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgYXR0Z8O2cmEtbGlzdGEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDAyCittc2dpZCAiYSBiYXNlIGNvbW1pdCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggLS11cHN0cmVhbSBvciAtLW9udG8iCittc2dzdHIgImVuIGJhc2luY2hlY2tuaW5nIG3DpXN0ZSBhbmdlcyBtZWQgLS11cHN0cmVhbSBlbGxlciAtLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2OQorbXNnaWQgImtlZXAgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiYmVow6VsbCB0b21tYSBpbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3MSBidWlsdGluL3JldmVydC5jOjEyOAorbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAidGlsbMOldCBpbmNoZWNrbmluZ2FyIG1lZCB0b210IG1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcyCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgIm9tYmFzZXJhIHNhbW1hbnNsYWduaW5nYXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc0Cittc2dpZCAia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiCittc2dzdHIgImJlaMOlbGwgdXJzcHJ1bmdsaWdhIGbDtnJncmVuaW5nc3B1bmt0ZXIgZsO2ciBrdXNpbmVyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NgorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgImZseXR0YSBpbmNoZWNrbmluZ2FyIHNvbSBpbmxlZHMgbWVkIHNxdWFzaCEvZml4dXAhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NworbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAic2lnbmVyYSBpbmNoZWNrbmluZ2FyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3OSBidWlsdGluL3JlYmFzZS5jOjE0NTUKK21zZ2lkICJkaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICJ2aXMgZGlmZnN0YXQgZsO2ciB2YWQgc29tIMOkbmRyYXRzIHVwcHN0csO2bXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgxCittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICJmb3J0c8OkdHQgb21iYXNlcmluZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODMKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAiaG9wcGEgw7Z2ZXIgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg0Cittc2dpZCAiZWRpdCB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJyZWRpZ2VyYSBhdHRnw7ZyYS1saXN0YW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg2Cittc2dpZCAic2hvdyB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAidmlzYSBudXZhcmFuZGUgcGF0Y2giCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDg5Cittc2dpZCAic2hvcnRlbiBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgImbDtnJrb3J0YSBpbmNoZWNrbmluZ3MtaWQgaSB0b2RvLWxpc3RhbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTEKK21zZ2lkICJleHBhbmQgY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJ1dMO2a2EgaW5jaGVja25pbmdzLWlkIGkgdG9kby1saXN0YW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkzCittc2dpZCAiY2hlY2sgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAia29udHJvbGxlcmEgdG9kby1saXN0YW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk1Cittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAib3JkbmEgb20gZml4dXAtL3NxdWFzaC1yYWRlciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgImzDpGdnIGluIGV4ZWMta29tbWFuZG9uIGkgdG9kby1saXN0YW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk4Cittc2dpZCAib250byIKK21zZ3N0ciAib3ZhbnDDpSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAicmVzdHJpY3QtcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgImJlZ3LDpG5zYSByZXZpc2lvbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInRyeWNrIGlob3Agb3ZhbnDDpSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDYKK21zZ2lkICJ0aGUgdXBzdHJlYW0gY29tbWl0IgorbXNnc3RyICJ1cHBzdHLDtm1zaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgImhlYWQtbmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgIm5hbW4gcMOlIGh1dnVkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMworbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE0Cittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAic3RyYXRlZ3ktb3B0cyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTUKK21zZ2lkICJzdHJhdGVneSBvcHRpb25zIgorbXNnc3RyICJzdHJhdGVnaWZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE2Cittc2dpZCAic3dpdGNoLXRvIgorbXNnc3RyICJzd2l0Y2gtdG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE3Cittc2dpZCAidGhlIGJyYW5jaCBvciBjb21taXQgdG8gY2hlY2tvdXQiCittc2dzdHIgImdyZW4gZWxsZXIgaW5jaGVja2luZyBhdHQgY2hlY2thIHV0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIm9udG8tbmFtZSIKK21zZ3N0ciAib250by1uYW1lIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxOAorbXNnaWQgIm9udG8gbmFtZSIKK21zZ3N0ciAicMOlLW5hbW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAiY21kIgorbXNnc3RyICJrbWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICJrb21tYW5kbyBhdHQga8O2cmEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyIGJ1aWx0aW4vcmViYXNlLmM6MTU0MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICJrw7ZyIGF1dG9tYXRpc2t0IGFsbGEgXCJleGVjXCIgc29tIG1pc3NseWNrYXMgcMOlIG55dHQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQwCittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXIgaW5nZW4gZWZmZWt0IHV0YW4gLS1yZWJhc2UtbWVyZ2VzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU1NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhbiBpbnRlcmFjdGl2ZSByZWJhc2UiCittc2dzdHIgIiVzIGtyw6R2ZXIgZW4gaW50ZXJha3RpdiBvbWJhc2VyaW5nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBow6RtdGEgXCJvbnRvXCI6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcmlnLWhlYWQ6ICclcyciCittc2dzdHIgIm9naWx0aWd0IG9yaWctaGVhZDogXCIlc1wiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBpbnZhbGlkIGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlOiAnJXMnIgorbXNnc3RyICJpZ25vcmVyYSBvZ2lsdGlndCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogXCIlc1wiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJLYW4gaW50ZSBzcGFyYSAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NDkKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgImt1bmRlIGludGUgYmVzdMOkbW1hIEhFQUQtcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MQorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorbXNnc3RyICIiCisiTMO2cyBhbGxhIGtvbmZsaWt0ZXIgbWFudWVsbHQsIG3DpHJrIGRlbSBzb20gbMO2c3RhIG1lZFxuIgorIlwiZ2l0IGFkZC9ybSA8ZmlsZXJfaV9rb25mbGlrdD5cIiwga8O2ciBzZWRhbiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIkR1IGthbiBob3BwYSDDtnZlciBpbmNoZWNrbmluZ2VuIGlzdMOkbGxldDoga8O2ciBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiRsO2ciBhdHQgYXZicnl0YSBvY2ggw6V0ZXJnw6UgdGlsbCBkw6RyIGR1IHZhciBmw7ZyZSBvbWJhc2VyaW5nZW4sIGvDtnIgXCJnaXQgIgorInJlYmFzZSAtLWFib3J0XCIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorImdpdCBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBwcmVwYXJpbmcgdGhlIHBhdGNoZXMgdG8gcmVwbGF5XG4iCisidGhlc2UgcmV2aXNpb25zOlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIkFzIGEgcmVzdWx0LCBnaXQgY2Fubm90IHJlYmFzZSB0aGVtLiIKK21zZ3N0ciAiIgorIlxuIgorImdpdCB1cHB0w6Rja3RlIGV0dCBmZWwgbsOkciBkZXQgc2t1bGxlIGbDtnJiZXJlZGEgcGF0Y2hhciBmw7ZyIGF0dFxuIgorIsOldGVyc2thcGEgZGVzc2EgcmV2aXNpb25lcjpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJEw6RyZsO2ciBrYW4gaW50ZSBnaXQgb21iYXNlcmEgZGVzc2EuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisiQW5nZSB2aWxrZW4gZ3JlbiBkdSB2aWxsIG9tYmFzZXJhIG1vdC5cbiIKKyJTZSBnaXQtcmViYXNlKDEpIGbDtnIgZGV0YWxqZXIuXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgJzxncmVuPidcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiT20gZHUgdmlsbCBhbmdlIHNww6VybmluZ3NpbmZvcm1hdGlvbiBmw7ZyIGdyZW5lbiBrYW4gZHUgZ8O2cmEgZGV0IG1lZDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88Z3Jlbj4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDEzCittc2dpZCAiZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIKK21zZ3N0ciAiZXhlYy1rb21tYW5kb24ga2FuIGludGUgaW5uZWjDpWxsYSBueXJhZHN0ZWNrZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxNworbXNnaWQgImVtcHR5IGV4ZWMgY29tbWFuZCIKK21zZ3N0ciAidG9tdCBleGVjLWtvbW1hbmRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDYKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAib21iYXNlcmEgbW90IGdpdmVuIGdyZW5lbiBpc3TDpGxsZXQgZsO2ciB1cHBzdHLDtm0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0OAorbXNnaWQgInVzZSB0aGUgbWVyZ2UtYmFzZSBvZiB1cHN0cmVhbSBhbmQgYnJhbmNoIGFzIHRoZSBjdXJyZW50IGJhc2UiCittc2dzdHIgImFudsOkbmQgc2FtbWFuc2xhZ25pbmdzYmFzZW4gbWVsbGFuIHVwcHN0csO2bXMgb2NoIGdyZW4gc29tIGFrdHVlbGwgYmFzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTAKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICJ0aWxsw6V0IHByZS1yZWJhc2Uta3JvayBhdHQga8O2cmEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MgorbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAidmFyIHR5c3QuIGltcGxpY2VyYXIgLS1uby1zdGF0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTgKK21zZ2lkICJkbyBub3Qgc2hvdyBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgInZpc2EgaW50ZSBlbiBkaWZmc3RhdCBmw7ZyIHZhZCBzb20gw6RuZHJhdHMgdXBwc3Ryw7ZtcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDYxCittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIKK21zZ3N0ciAibMOkZ2cgXCJTaWduZWQtb2ZmLWJ5OlwiLXJhZCB0aWxsIHZhcmplIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjQKK21zZ2lkICJtYWtlIGNvbW1pdHRlciBkYXRlIG1hdGNoIGF1dGhvciBkYXRlIgorbXNnc3RyICJzw6R0dCBpbmNoZWNrbmluZ3NkYXR1bSB0aWxsIGbDtnJmYXR0YXJkYXR1bSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY2Cittc2dpZCAiaWdub3JlIGF1dGhvciBkYXRlIGFuZCB1c2UgY3VycmVudCBkYXRlIgorbXNnc3RyICJpZ25vcmVyYSBmw7ZyZmF0dGFyZGF0dW0gb2NoIGFudsOkbmQgbnV2YXJhbmRlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjgKK21zZ2lkICJzeW5vbnltIG9mIC0tcmVzZXQtYXV0aG9yLWRhdGUiCittc2dzdHIgInN5bm9ueW0gZsO2ciAtLXJlc2V0LWF1dGhvci1kYXRlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzAgYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICJzw6RuZHMgdGlsbCBcImdpdCBhcHBseVwiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzIKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIgorbXNnc3RyICJpZ25vcmVyYSDDpG5kcmluZ2FyIGkgYmxhbmtzdGVnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzYgYnVpbHRpbi9yZWJhc2UuYzoxNDc5Cittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICJ1dGbDtnIgY2hlcnJ5LXBpY2sgcMOlIGFsbGEgaW5jaGVja25pbmdhciwgw6R2ZW4gb20gb8OkbmRyYWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICJmb3J0c8OkdHQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NAorbXNnaWQgInNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUiCittc2dzdHIgImhvcHBhIMO2dmVyIG51dmFyYW5kZSBwYXRjaCBvY2ggZm9ydHPDpHR0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODYKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgImF2YnJ5dCBvY2ggY2hlY2thIHV0IHVyc3BydW5nc2dyZW5lbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg5Cittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAiYXZicnl0IG1lbiBiZWjDpWxsIEhFQUQgZMOkciBkZXQgw6RyIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAicmVkaWdlcmEgYXR0Z8O2cmEtbGlzdGFuIHVuZGVyIGludGVyYWt0aXYgb21iYXNlcmluZy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgInZpc2EgcGF0Y2hlbiBzb20gdGlsbMOkbXBhcyBlbGxlciBzbMOlcyBzYW1tYW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5NgorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICJhbnbDpG5kIHNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpZXIgZsO2ciBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTAwCittc2dpZCAibGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxpc3Qgb2YgY29tbWl0cyB0byByZWJhc2UiCittc2dzdHIgImzDpXQgYW52w6RuZGFyZW4gcmVkaWdlcmEgbGlzdGFuIMO2dmVyIGluY2hlY2tuaW5nYXIgYXR0IG9tYmFzZXJhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDQKK21zZ2lkICIoREVQUkVDQVRFRCkgdHJ5IHRvIHJlY3JlYXRlIG1lcmdlcyBpbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZW0iCittc2dzdHIgIiIKKyIoQVZSw4VEUykgZsO2cnPDtmsgw6V0ZXJza2FwYSBzYW1tYW5zbGFnbmluZ2FyIGlzdMOkbGxldCBmw7ZyIGF0dCBpZ25vcmVyYSBkZW0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwOQorbXNnaWQgInByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZSIKK21zZ3N0ciAiYmVow6VsbCB0b21tYSBpbmNoZWNrbmluZ2FyIHVuZGVyIG9tYmFzZXJpbmciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxMQorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkiCittc2dzdHIgImZseXR0YSBpbmNoZWNrbmluZ2FyIHNvbSBiw7ZyamFyIG1lZCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE3Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciIKK21zZ3N0ciAidXRmw7ZyIGF1dG9tYXRpc2t0IHN0YXNoL3N0YXNoIHBvcCBmw7ZyZSBvY2ggZWZ0ZXIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxOQorbXNnaWQgImFkZCBleGVjIGxpbmVzIGFmdGVyIGVhY2ggY29tbWl0IG9mIHRoZSBlZGl0YWJsZSBsaXN0IgorbXNnc3RyICJsw6RnZyB0aWxsIGV4ZWMtcmFkZXIgZWZ0ZXIgdmFyamUgaW5jaGVja25pbmcgaSBkZW4gcmVkaWdlcmJhcmEgbGlzdGFuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgInRpbGzDpXQgb21iYXNlcmluZyBhdiBpbmNoZWNrbmluZ2FyIG1lZCB0b210IG1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyNgorbXNnaWQgInRyeSB0byByZWJhc2UgbWVyZ2VzIGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlbSIKK21zZ3N0ciAiZsO2cnPDtmsgb21iYXNlcmEgc2FtbWFuc2xhZ25pbmdhciBpc3TDpGxsZXQgZsO2ciBhdHQgaWdub3JlcmEgZGVtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjkKK21zZ2lkICJ1c2UgJ21lcmdlLWJhc2UgLS1mb3JrLXBvaW50JyB0byByZWZpbmUgdXBzdHJlYW0iCittc2dzdHIgImFudsOkbmQgXCJtZXJnZS1iYXNlIC0tZm9yay1wb2ludFwiIGbDtnIgYXR0IGbDtnJmaW5hIHVwcHN0csO2bSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMxCittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiYW52w6RuZCBhbmdpdmVuIHNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzMgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgImFsdGVybmF0aXYiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNAorbXNnaWQgInBhc3MgdGhlIGFyZ3VtZW50IHRocm91Z2ggdG8gdGhlIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJzw6RuZCBmbGFnZ2FuIHRpbGwgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzcKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICJvbWJhc2VyYSBhbGxhIG7DpWJhcmEgaW5jaGVja25pbmdhciB1cHAgdGlsbCByb3Rlbi9yw7Z0dGVybmEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisic3TDtmRldCBmw7ZyIHJlYmFzZS51c2VCdWlsdGluIGhhciB0YWdpdHMgYm9ydCFcbiIKKyJTZSBwb3N0ZW4gZsO2ciBkZXQgaSBcImdpdCBoZWxwIGNvbmZpZ1wiIGbDtnIgZGV0YWxqZXIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjAKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiRGV0IHZlcmthciBzb20gZW4gXCJnaXQgYW1cIiBrw7Zycy4gS2FuIGludGUgb21iYXNlcmEuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDEKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBhdnLDpWRzIGZyw6VuLiBBbnbDpG5kIC0tcmViYXNlLW1lcmdlcyBpc3TDpGxsZXQuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDYKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgImthbiBpbnRlIGtvbWJpbmVyYSBcIi0ta2VlcC1iYXNlXCIgbWVkIFwiLS1vbnRvXCIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwOAorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAia2FuIGludGUga29tYmluZXJhIFwiLS1rZWVwLWJhc2VcIiBtZWQgXCItLXJvb3RcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiSW5nZW4gb21iYXNlcmluZyBww6Vnw6VyPyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjE2Cittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICLDhXRnw6RyZGVuIC0tZWRpdC10b2RvIGthbiBlbmRhc3QgYW52w6RuZGFzIHVuZGVyIGludGVyYWt0aXYgb21iYXNlcmluZy4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYzOQorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIkthbiBpbnRlIGzDpHNhIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY1MQorbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIkR1IG3DpXN0ZSByZWRpZ2VyYSBhbGxhIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIgb2NoXG4iCisiZMOkcmVmdGVyIG1hcmtlcmEgZGVtIHNvbSBsw7ZzdGEgbWVkIGdpdCBhZGQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTY3MAorbXNnaWQgImNvdWxkIG5vdCBkaXNjYXJkIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgImt1bmRlIGludGUga2FzdGEgw6RuZHJpbmdhciBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJXMiCittc2dzdHIgImt1bmRlIGludGUgZmx5dHRhIHRpbGxiYWthIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJXMgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCVzXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JXNcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLlxuIgorbXNnc3RyICIiCisiRGV0IHZlcmthciBzb20ga2F0YWxvZ2VuICVzIHJlZGFuIGV4aXN0ZXJhciwgb2NoXG4iCisiamFnIHVuZHJhciBvbSBkdSByZWRhbiDDpHIgbWl0dCBpIGVuIGFubmFuIG9tYmFzZXJpbmcuIE9tIHPDpSDDpHJcbiIKKyJmYWxsZXQsIGbDtnJzw7ZrXG4iCisiXHQlc1xuIgorIk9tIHPDpSBpbnRlIMOkciBmYWxsZXQsIGvDtnJcbiIKKyJcdCVzXG4iCisib2NoIGvDtnIgcHJvZ3JhbW1ldCBpZ2VuLiBKYWcgYXZzbHV0YXIgaWZhbGwgZHUgZm9ydGZhcmFuZGUgaGFyXG4iCisibsOlZ290IGF2IHbDpHJkZSBkw6RyLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NTcKK21zZ2lkICJzd2l0Y2ggYEMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImZsYWdnYW4gXCJDXCIgZsO2cnbDpG50YXIgZXR0IG51bWVyaXNrdCB2w6RyZGUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG1vZGU6ICVzIgorbXNnc3RyICJPa8OkbnQgbMOkZ2U6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MjAKK21zZ2lkICItLXN0cmF0ZWd5IHJlcXVpcmVzIC0tbWVyZ2Ugb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1zdHJhdGVneSBrcsOkdmVyIC0tbWVyZ2UgZWxsZXIgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODYwCittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMga3LDpHZlciAtLWV4ZWMgZWxsZXIgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODcyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorbXNnc3RyICIiCisia2FuIGludGUga29tYmluZXJhIGFtLWZsYWdnb3IgbWVkIHZhcmtlbiBpbnRlcmFrdGl2LSBlbGxlciAiCisic2FtbWFuc2xhZ25pbmdzZmxhZ2dvciIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODkxCittc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlYmFzZS1tZXJnZXMnIgorbXNnc3RyICJrYW4gaW50ZSBrb21iaW5lcmEgXCItLXByZXNlcnZlLW1lcmdlc1wiIG1lZCBcIi0tcmViYXNlLW1lcmdlc1wiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTUKK21zZ2lkICIiCisiZXJyb3I6IGNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjJyIKK21zZ3N0ciAiIgorImZlbDoga2FuIGludGUga29tYmluZXJhIFwiLS1wcmVzZXJ2ZS1tZXJnZXNcIiBtZWQgXCItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMiCisiXCIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgImZlbGFrdGlnIHVwcHN0csO2bSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkyNQorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHJvb3QgY29tbWl0IgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIG55IHJvdGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbmVlZCBleGFjdGx5IG9uZSBtZXJnZSBiYXNlIHdpdGggYnJhbmNoIgorbXNnc3RyICJcIiVzXCI6IGJlaMO2dmVyIHByZWNpcyBlbiBzYW1tYW5zbGFnbmluZ3NiYXMgbWVkIGdyZW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIlwiJXNcIjogYmVow7Z2ZXIgcHJlY2lzIGVuIHNhbW1hbnNsYWduaW5nc2JhcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIlBla2FyIGludGUgcMOlIGVuIGdpbHRpZyBpbmNoZWNrbmluZzogXCIlc1wiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICLDtmRlc2RpZ2VydDogaW5nZW4gc8OlZGFuIGdyZW4vaW5jaGVja25pbmc6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTk1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZWY6ICVzIgorbXNnc3RyICJJbmdlbiBzw6VkYW4gcmVmZXJlbnM6ICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMDYKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHRvIGEgcmV2aXNpb24iCittc2dzdHIgIkt1bmRlIGludGUgYmVzdMOkbW1hIEhFQUQ6cyBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ0Cittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAiS2FuIGludGUgdXRmw7ZyYSBcImF1dG9zdGFzaFwiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAiT3bDpG50YXQgc3ZhciBmcsOlbiBzdGFzaDogXCIlc1wiIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEga2F0YWxvZyBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAlc1xuIgorbXNnc3RyICJTa2FwYWRlIGF1dG9zdGFzaDogJXNcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU5Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAia3VuZGUgaW50ZSB1dGbDtnJhIFwicmVzZXQgLS1oYXJkXCIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA2OAorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIkNoZWNrYSBpbiBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBww6UgZGVtLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzd2l0Y2ggdG8gJXMiCittc2dzdHIgImt1bmRlIGludGUgdsOkeGxhIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQgw6RyIMOgIGpvdXIuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAiQWt0dWVsbCBncmVuICVzIMOkciDDoCBqb3VyLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjkKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFEIMOkciDDoCBqb3VyLCBvbWJhc2VyaW5nIGZyYW10dmluZ2FkLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIkFrdHVlbGwgZ3JlbiAlcyDDpHIgw6Agam91ciwgb21iYXNlcmluZyBmcmFtdHZpbmdhZC5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIktyb2tlbiBwcmUtcmViYXNlIHbDpGdyYWRlIG9tYmFzZXJpbmdlbi4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIHRvICVzOlxuIgorbXNnc3RyICLDhG5kcmluZ2FyIHRpbGwgJXM6XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJXMgdG8gJXM6XG4iCittc2dzdHIgIsOEbmRyaW5nYXIgZnLDpW4gJXMgdGlsbCAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLlxuIgorbXNnc3RyICIiCisiRsO2cnN0LCBzcG9sYXIgdGlsbGJha2EgaHV2dWRldCBmw7ZyIGF0dCBzcGVsYSBhdiBkaXR0IGFyYmV0ZSBvdmFucMOlIGRldC4uLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODMKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIkt1bmRlIGludGUga29wcGxhIGZyw6VuIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAiU25hYmJzcG9sYWRlICVzIHRpbGwgJXMuXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzIKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWthdGFsb2c+IgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjgzMAorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnRcbiIKKyJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2hcbiIKKyJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisiXG4iCisiWW91IGNhbiBzZXQgdGhlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKyJpdHMgY3VycmVudCBicmFuY2g7IGhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3VcbiIKKyJhcnJhbmdlZCB0byB1cGRhdGUgaXRzIHdvcmsgdHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZVxuIgorIm90aGVyIHdheS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHNldFxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIk5vcm1hbHQgdGlsbMOldHMgaW50ZSB1cHBkYXRlcmluZyBhdiBha3R1ZWxsIGdyZW4gaSBldHQgaWNrZS1uYWtldFxuIgorImFya2l2LCBkw6UgaW5kZXggb2NoIGFyYmV0c2thdGFsb2cgaW50ZSBrb21tZXIgc3TDpG1tYSBtZWQgZGV0IGR1XG4iCisic8OkbmRlIG9jaCBcImdpdCByZXNldCAtLWhhcmRcIiBrcsOkdnMgZsO2ciBhdHQgZsOlIGFyYmV0c2thdGFsb2dlbiBvY2hcbiIKKyJIRUFEIGF0dCBzdMOkbW1hIMO2dmVyZW5zLlxuIgorIlxuIgorIkR1IGthbiBzdMOkbGxhIGluIHZhcmlhYmVsbiBcInJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2hcIiB0aWxsXG4iCisiXCJpZ25vcmVcIiBlbGxlciBcIndhcm5cIiBpIGZqw6RycmFya2l2ZXQgZsO2ciBhdHQgdGlsbMOldGEgc8OkbmRuaW5nIHRpbGxcbiIKKyJkZXNzIGFrdHVlbGxhIGdyZW47IGRldHRhIHJla29tbWVuZGVyYXMgZG9jayBpbnRlIHPDpXZpZGEgZHUgaW50ZVxuIgorInNldHQgdGlsbCBhdHQgZGVzcyBhcmJldHNrYXRhbG9nIHVwcGRhdGVyYXMgdGlsbCBkZXQgdHUgc8OkbmRlIGluXG4iCisicMOlIGFubmF0IHPDpHR0LlxuIgorIlxuIgorIkbDtnIgYXR0IHVuZHZpa2EgZGV0dGEgbWVkZGVsYW5kZSBvY2ggZm9ydGZhcmFuZGUgYmVow6VsbGEgZGV0XG4iCisibm9ybWFsYSBiZXRlZW5kZXQsIHPDpHR0IFwicmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaFwiIHRpbGwgXCJyZWZ1c2VcIi4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODUwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJOb3JtYWx0IHRpbGzDpXRzIGludGUgcmFkZXJpbmcgYXYgYWt0dWVsbCBncmVuLCBlZnRlcnNvbSBuw6RzdGFcbiIKKyJcImdpdCBjbG9uZVwiIGludGUga29tbWVyIGlubmViw6RyYSBhdHQgbsOlZ3JhIGZpbGVyIGNoZWNrYXMgdXQsXG4iCisidmlsa2V0IMOkciBmw7ZydmlycmFuZGUuXG4iCisiXG4iCisiRHUga2FuIHN0w6RsbGEgaW4gdmFyaWFiZWxuIFwicmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudFwiIHRpbGxcbiIKKyJcIndhcm5cIiBlbGxlciBcImlnbm9yZVwiIGkgZmrDpHJyYXJraXZldCBmw7ZyIGF0dCB0aWxsw6V0YSBib3J0dGFnbmluZ1xuIgorImF2IGFrdHVlbGwgZ3JlbiwgbWVkIGVsbGVyIHV0YW4gdmFybmluZ3NtZWRkZWxhbmRlLlxuIgorIlxuIgorIkbDtnIgYXR0IHVuZHZpa2EgZGV0dGEgbWVkZGVsYW5kZSBrYW4gZHUgc8OkdHRhIGRldCB0aWxsIFwicmVmdXNlXCIuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MzYKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAidHlzdCIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzoxOTUwCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIGRpcmVjdG9yeS4iCittc2dzdHIgIkR1IG3DpXN0ZSBhbmdlIGVuIGthdGFsb2cuIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjE3Cittc2dpZCAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpZD5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGlkPl0gWy0tcmV3cml0ZV0gIgorIlstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZlcmVuc2VyPi4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyMgorbXNnaWQgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZmVyZW5zZXI+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgImdpdCByZWZsb2cgZXhpc3RzIDxyZWZlcmVucz4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTY3IGJ1aWx0aW4vcmVmbG9nLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gZ2lsdGlnIHRpZHNzdMOkbXBlbCIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIKK21zZ3N0ciAiTWFya2VyYXIgbsOlYmFyYSBvYmpla3QuLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiJXMgcGVrYXIgaW5nZW5zdGFucyEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk1Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgImluZ2VuIHJlZmVyZW5zbG9nZyBhdHQgdGEgYm9ydCBhbmdhdnMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJlZmxvZzogJXMiCittc2dzdHIgImludGUgZW4gcmVmZXJlbnNsb2dnOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICJpbmdlbiByZWZlcmVuc2xvZ2cgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmIGZvcm1hdDogJXMiCittc2dzdHIgImZlbGFrdGlndCByZWZlcmVuc2Zvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzY0Cittc2dpZCAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGdyZW4+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1uPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOCBidWlsdGluL3JlbW90ZS5jOjM4Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDxnYW1tYWw+IDxueT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzo0MworbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbW4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1uPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGdyZW4+KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMQorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1uPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMgorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncnVwcD4gfCA8ZmrDpHJyPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbW4+IDxncmVuPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNSBidWlsdGluL3JlbW90ZS5jOjc0Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1uPiA8bnl1cmw+IFs8Z2FtbWFsdXJsPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtbj4gPG55dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOCBidWlsdGluL3JlbW90ZS5jOjgxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1uPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzxmbGFnZ29yPl0gPG5hbW4+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUzCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtbj4gPGdyZW4+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtbj4gPGdyZW4+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs8ZmxhZ2dvcj5dIDxuYW1uPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs8ZmxhZ2dvcj5dIDxuYW1uPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPGZsYWdnb3I+XSBbPGdydXBwPiB8IDxmasOkcnI+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiVXBwZGF0ZXJhciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Igw6RyIGZhcmxpZyBvY2ggZsO2csOlbGRyYWQ7IGFudsOkbmRcbiIKKyJcdCAtLW1pcnJvcj1mZXRjaCBlbGxlciAtLW1pcnJvcj1wdXNoIGlzdMOkbGxldCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgYXJndW1lbnQgdGlsbCBtaXJyb3I6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgImjDpG10YSBmasOkcnJncmVuYXJuYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICJpbXBvcnRlcmEgYWxsYSB0YWdnYXIgb2NoIGFzc29jaWVyYWRlIG9iamVrdCB2aWQgaMOkbXRuaW5nIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAiZWxsZXIgaMOkbXRhIGludGUgbsOlZ3JhIHRhZ2dhciBhbGxzICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgImdyZW4oYXIpIGF0dCBzcMOlcmEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAiaHV2dWRncmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICJzdMOkbGwgaW4gYXJraXYgc29tIHNwZWdlbCBhdHQgc8OkbmRhIGVsbGVyIHRhIGVtb3QgZnLDpW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiYXR0IGFuZ2UgZW4gbWFzdGVyLWdyZW4gZ2VyIGluZ2VuIG1lbmluZyBtZWQgLS1taXJyb3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiYXR0IGFuZ2UgZ3JlbmFyIGF0dCBzcMOlcmEgZ2VyIG1lbmluZyBiYXJhIG1lZCBow6RtdG5pbmdzc3BlZ2xhciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTQgYnVpbHRpbi9yZW1vdGUuYzo2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiZmrDpHJyYXJraXZldCAlcyBmaW5ucyByZWRhbi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk4IGJ1aWx0aW4vcmVtb3RlLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIlwiJXNcIiDDpHIgaW50ZSBldHQgZ2lsdGlndCBuYW1uIHDDpSBmasOkcnJhcmtpdiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIG1hc3RlciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBtYXBwbmluZyBmw7ZyIHJlZmVyZW5zc3BlY2lmaWthdGlvbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDMgYnVpbHRpbi9yZW1vdGUuYzo0NTEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIobWF0Y2hhbmRlKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NTUKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKHRhIGJvcnQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYyOSBidWlsdGluL3JlbW90ZS5jOjc2NCBidWlsdGluL3JlbW90ZS5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJyVzJyIKK21zZ3N0ciAiSW5nZW4gc8OlZGFuIGZqw6RycjogXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBieXRhIG5hbW4gcMOlIGtvbmZpZ3VyYXRpb25zc2VrdGlvbmVuIFwiJXNcIiB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiVXBwZGF0ZXJhciBpbnRlIGlja2Utc3RhbmRhcmQgaMOkbXRuaW5nc3JlZmVyZW5zc3BlY2lmaWthdGlvblxuIgorIlx0JXNcbiIKKyJcdFVwcGRhdGVyYSBrb25maWd1cmF0aW9uZW4gbWFudWVsbHQgb20gbsO2ZHbDpG5kaWd0LiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODAxCittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJPYnNlcnZlcmE6IEVuIGdyZW4gdXRhbmbDtnIgaGllcmFya2luIHJlZnMvcmVtb3Rlcy8gdG9ncyBpbnRlIGJvcnQ7XG4iCisiZsO2ciBhdHQgdGEgYm9ydCBkZW4sIGFudsOkbmQ6IgorbXNnc3RyWzFdICIiCisiT2JzZXJ2ZXJhOiBOw6VncmEgZ3JlbmFyIHV0YW5mw7ZyIGhpZXJhcmtpbiByZWZzL3JlbW90ZXMvIHRvZ3MgaW50ZSBib3J0O1xuIgorImbDtnIgYXR0IHRhIGJvcnQgZGVtLCBhbnbDpG5kOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHRhIGJvcnQga29uZmlndXJhdGlvbnNzZWt0aW9uZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBueSAobsOkc3RhIGjDpG10bmluZyBzcGFyYXIgaSByZW1vdGVzLyVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MTkKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIHNww6VyYWQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBmw7ZybGVnYWQgKGFudsOkbmQgXCJnaXQgcmVtb3RlIHBydW5lXCIgZsO2ciBhdHQgdGEgYm9ydCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIzCittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJvZ2lsdGlnIGJyYW5jaC4lcy5tZXJnZTsga2FuIGludGUgb21iYXNlcmEgw7Z2ZXIgPiAxIGdyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAib21iYXNlcmFzIGludGVyYWt0aXZ0IHDDpSBmasOkcnJlbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgIm9tYmFzZXJhcyBpbnRlcmFrdGl2dCAobWVkIHNhbW1hbnNsYWduaW5nYXIpIHDDpSBmasOkcnJlbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAib21iYXNlcmFzIHDDpSBmasOkcnJlbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIHNhbW1hbnNsw6VzIG1lZCBmasOkcnJlbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJzYW1tYW5zbMOlcyBtZWQgZmrDpHJyZW4gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAgb2NoIG1lZCBmasOkcnJlbiAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgInNrYXBhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICJkZWxldGUiCittc2dzdHIgInRhIGJvcnQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzOAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIsOgam91ciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQxCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAia2FuIHNuYWJic3BvbGFzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibG9rYWwgZsO2csOlbGRyYWQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyB0dmluZ2FyIHRpbGwgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgc8OkbmRlciB0aWxsICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgdHZpbmdhciB0aWxsICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBzw6RuZGVyIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOQorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICJmcsOlZ2EgaW50ZSBmasOkcnJhciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIGZqw6RyciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICBIw6RtdC1VUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTggYnVpbHRpbi9yZW1vdGUuYzoxMTc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMworbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoaW5nZW4gVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgU8OkbmQtVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc2IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OCBidWlsdGluL3JlbW90ZS5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgSEVBRC1ncmVuOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc2Cittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiKGludGUgZsO2cmZyw6VnYWQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzgKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIihva8OkbmQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiICBIRUFELWdyZW4gKEhFQUQgcMOlIGZqw6RyciDDpHIgdHZldHlkaWcsIGthbiB2YXJhIGVuIGF2IGbDtmxqYW5kZSk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIEZqw6RycmdyZW46JXMiCittc2dzdHJbMV0gIiAgRmrDpHJyZ3JlbmFyOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTcgYnVpbHRpbi9yZW1vdGUuYzoxMjIzCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKHN0YXR1cyBpbnRlIGbDtnJmcsOlZ2FkKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA2Cittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgTG9rYWwgZ3JlbiBrb25maWd1cmVyYWQgZsO2ciBcImdpdCBwdWxsXCI6IgorbXNnc3RyWzFdICIgIExva2FsYSBncmVuYXIga29uZmlndXJlcmFkZSBmw7ZyIFwiZ2l0IHB1bGxcIjoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNAorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgTG9rYWxhIHJlZmVyZW5zZXIgc3BlZ2xhcyBhdiBcImdpdCBwdXNoXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBMb2thbCByZWZlcmVucyBrb25maWd1cmVyYWQgZsO2ciBcImdpdCBwdXNoXCIlczoiCittc2dzdHJbMV0gIiAgTG9rYWxhIHJlZmVyZW5zZXIga29uZmlndXJlcmFkZSBmw7ZyIFwiZ2l0IHB1c2hcIiVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQxCittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJzw6R0dCByZWZzL3JlbW90ZXMvPG5hbW4+L0hFQUQgZW5saWd0IGZqw6RycmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDMKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICJ0YSBib3J0IHJlZnMvcmVtb3Rlcy88bmFtbj4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU4Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiS2FuIGludGUgYmVzdMOkbW1hIEhFQUQgcMOlIGZqw6RycmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjAKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiRmxlcmEgSEVBRC1ncmVuYXIgcMOlIGZqw6RycmVuLiBWw6RsaiBlbiBleHBsaWNpdCBtZWQ6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiSW50ZSBlbiBnaWx0aWcgcmVmZXJlbnM6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0w6RsbGEgaW4gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMga29tbWVyIGJsaSBkaW5nbGFuZGUhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgaGFyIGJsaXZpdCBkaW5nbGFuZGUhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiUmVuc2FyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFtza3VsbGUgcmVuc2FdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFtyZW5zYWRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzQKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJyZW5zYSBmasOkcnJhciBlZnRlciBow6RtdG5pbmciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNyBidWlsdGluL3JlbW90ZS5jOjE0OTEgYnVpbHRpbi9yZW1vdGUuYzoxNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIkluZ2VuIHPDpWRhbiBmasOkcnIgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTMKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJsw6RnZyB0aWxsIGdyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImluZ2VuIGZqw6RyciBhbmdhdnMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3NworbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICJmcsOlZ2Egc8OkbmQtVVJMOmVyIGlzdMOkbGxldCBmw7ZyIGjDpG10YS1VUkw6ZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3OQorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAicmV0dXJuZXJhIGFsbGEgVVJMOmVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIKK21zZ3N0ciAiaW5nZW4gVVJMOmVyIGFuZ2l2bmEgZsO2ciBmasOkcnJlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMworbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJtYW5pcHVsZXJhIFVSTDphciBmw7ZyIHPDpG5kbmluZyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM1Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJ0YSBib3J0IFVSTDphciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ0Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSBnZXIgaW5nZW4gbWVuaW5nIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJGZWxha3RpZyBnYW1tYWx0IFVSTC1tw7Zuc3RlcjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIkluZ2VuIHPDpWRhbiBVUkwgaGl0dGFkZXM6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTMKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIktvbW1lciBpbnRlIHRhIGJvcnQgYWxsYSBpY2tlLXPDpG5kLVVSTDplciIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjgKK21zZ2lkICIiCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAiIgorIklua3JlbWVudGVsbGEgb21wYWNrbmluZ2FyIMOkciBpbnRlIGtvbXBhdGlibGEgbWVkIGJpdG1hcHAtaW5kZXguXG4iCisiQW52w6RuZCAtLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBlbGxlciBpbmFrdGl2ZXJhIGluc3TDpGxsbmluZ2VuXG4iCisicGFjay53cml0ZWJpdG1hcHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdGFydGEgcGFjay1vYmplY3RzIGbDtnIgYXR0IHBhY2thIG9tIGtvbnRyYWt0c29iamVrdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMzAgYnVpbHRpbi9yZXBhY2suYzo0MTYKK21zZ2lkICJyZXBhY2s6IEV4cGVjdGluZyBmdWxsIGhleCBvYmplY3QgSUQgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iCittc2dzdHIgIiIKKyJyZXBhY2s6IEbDtnJ2w6RudGFyIGtvbXBsZXR0YSBoZXgtb2JqZWt0LWlkLXJhZGVyIGVuZGFzdCBmcsOlbiBwYWNrLW9iamVjdHMuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI1NAorbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICJrdW5kZSBpbnRlIGF2c2x1dGEgcGFjay1vYmplY3RzIGbDtnIgYXR0IHBhY2thIG9tIGtvbnRyYWt0c29iamVrdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAicGFja2EgYWxsdCBpIGV0dCBlbmRhIHBha2V0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NAorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgInNhbW1hIHNvbSAtYSwgb2NoIGfDtnIgb27DpWJhcmEgb2JqZWt0IGzDtnNhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NworbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAidGEgYm9ydCDDtnZlcmZsw7ZkaWdhIHBha2V0LCBvY2gga8O2ciBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5OQorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJzw6RuZCAtLW5vLXJldXNlLWRlbHRhIHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInPDpG5kIC0tbm8tcmV1c2Utb2JqZWN0IHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDMKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgImvDtnIgaW50ZSBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJzw6RuZCAtLWxvY2FsIHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDgKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgInNrcml2IGJpdGthcnRpbmRleCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKK21zZ2lkICJwYXNzIC0tZGVsdGEtaXNsYW5kcyB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJzw6RuZCAtLWRlbHRhLWlzbGFuZHMgdGlsbCBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMQorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJjaXJrYWRhdHVtIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMgorbXNnaWQgIndpdGggLUEsIGRvIG5vdCBsb29zZW4gb2JqZWN0cyBvbGRlciB0aGFuIHRoaXMiCittc2dzdHIgIm1lZCAtQSwgbMO2cyBpbnRlIHVwcCBvYmpla3Qgw6RsZHJlIMOkbiBkZXR0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTQKK21zZ2lkICJ3aXRoIC1hLCByZXBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibWVkIC1hLCBwYWNrYSBvbSBvbsOlYmFyYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE2Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJzdG9ybGVrIHDDpSBmw7Zuc3RlciBhbnbDpG50IGbDtnIgZGVsdGFrb21wcmltZXJpbmciCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJ5dGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgInNhbW1hIHNvbSBvdmFuLCBtZW4gYmVncsOkbnNhIG1pbm5lc3N0b3JsZWtlbiBpc3TDpGxsZXQgZsO2ciBwb3N0YW50YWwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzIwCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJiZWdyw6Ruc2EgbWF4aW1hbHQgZGVsdGFkanVwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyMgorbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyIKK21zZ3N0ciAiYmVncsOkbnNhciBtYXhpbWFsdCBhbnRhbCB0csOlZGFyIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJtYXhpbWFsIHN0b3JsZWsgcMOlIHZhcmplIHBha2V0ZmlsIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMyNgorbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICJwYWNrYSBvbSBvYmpla3QgaSBwYWtldCBtw6Rya3RhIG1lZCAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjgKK21zZ2lkICJkbyBub3QgcmVwYWNrIHRoaXMgcGFjayIKK21zZ3N0ciAicGFja2EgaW50ZSBvbSBkZXR0YSBwYWtldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMzgKK21zZ2lkICJjYW5ub3QgZGVsZXRlIHBhY2tzIGluIGEgcHJlY2lvdXMtb2JqZWN0cyByZXBvIgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IHBha2V0IGkgZXR0IFwicHJlY2lvdXMtb2JqZWN0c1wiLWFya2l2IgorCisjOiBidWlsdGluL3JlcGFjay5jOjM0MgorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLUEgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIG9jaCAtQSBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyNQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICJJbmdldCBueXR0IGF0dCBwYWNrYS4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyJWQVJOSU5HOiBOYW1uZW4gcMOlIG7DpWdyYSBwYWtldCBoYXIgYnl0dHMgZ2Vub20gYXR0XG4iCisiVkFSTklORzogbMOkZ2dhIHRpbGwgb2xkLSBmw7ZyZSBuYW1uZW4sIGbDtnIgYXR0IGJ5dGFcbiIKKyJWQVJOSU5HOiBkZW0gbW90IGRlbiBueWEgdmVyc2lvbmVuIGF2IGZpbGVuLiBNZW5cbiIKKyJWQVJOSU5HOiBvcGVyYXRpb25lbiBtaXNzbHlja2FkZXMsIG9jaCBmw7Zyc8O2a2V0IGF0dFxuIgorIlZBUk5JTkc6IGJ5dGEgdGlsbGJha2EgdGlsbCBkZXQgdXJzcHJ1bmdsaWdhXG4iCisiVkFSTklORzogbmFtbmV0IG1pc3NseWNrYWRlcyBvY2tzw6UuXG4iCisiVkFSTklORzogQnl0IG5hbW4gcMOlIGRlbSBpICVzIG1hbnVlbGx0OlxuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9iamVrdD4gPGVyc8OkdHRuaW5nPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVrdD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8aW5jaGVja25pbmc+IFs8ZsO2csOkbGRlcj4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxvYmpla3Q+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxtw7Zuc3Rlcj5dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgcmVwbGFjZSBmb3JtYXQgJyVzJ1xuIgorInZhbGlkIGZvcm1hdHMgYXJlICdzaG9ydCcsICdtZWRpdW0nIGFuZCAnbG9uZyciCittc2dzdHIgIiIKKyJvZ2lsdGlndCBlcnPDpHR0bmluZ3Nmb3JtYXQgXCIlc1wiXG4iCisiZ2lsdGlnYSBmb3JtYXQgw6RyIFwic2hvcnRcIiwgXCJtZWRpdW1cIiBvY2ggXCJsb25nXCIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiZXJzw6R0dG5pbmdzcmVmZXJlbnNlbiBcIiVzXCIgaGl0dGFkZXMgaW50ZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVwbGFjZSByZWYgJyVzJyIKK21zZ3N0ciAiVG9nIGJvcnQgZXJzw6R0dG5pbmdzcmVmZXJlbnNlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgcmVmZXJlbnNuYW1uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZSByZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiZXJzw6R0dG5pbmdzcmVmZXJlbnNlbiBcIiVzXCIgZmlubnMgcmVkYW4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIk9iamVrdCBtw6VzdGUgdmFyYSBhdiBzYW1tYSB0eXAuXG4iCisiXCIlc1wiIHBla2FyIHDDpSBldHQgZXJzYXR0IG9iamVrdCBtZWQgdHlwZW4gXCIlc1wiXG4iCisibWVkYW4gXCIlc1wiIHBla2FyIHDDpSBldHQgZXJzw6R0dG5pbmdzb2JqZWt0IGF2IHR5cGVuIFwiJXNcIi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hICVzIGbDtnIgc2tyaXZuaW5nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNDIKK21zZ2lkICJjYXQtZmlsZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJjYXQtZmlsZSByYXBwb3J0ZXJhZGUgbWlzc2x5Y2thbmRlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSAlcyBmw7ZyIGzDpHNuaW5nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzIKK21zZ2lkICJ1bmFibGUgdG8gc3Bhd24gbWt0cmVlIgorbXNnc3RyICJrYW4gaW50ZSBzdGFydGEgbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNzYKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgZnLDpW4gbWt0cmVlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAibWt0cmVlIHJhcHBvcnRlcmFkZSBtaXNzbHlja2FuZGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4OQorbXNnaWQgIm1rdHJlZSBkaWQgbm90IHJldHVybiBhbiBvYmplY3QgbmFtZSIKK21zZ3N0ciAibWt0cmVlIHJldHVybmVyYWRlIGludGUgZXR0IG9iamVrdG5hbW4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZnN0YXQgJXMiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJmc3RhdFwiIHDDpSAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzAzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG9iamVjdCB0byBkYXRhYmFzZSIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIG9iamVrdGV0IHRpbGwgZGF0YWJhc2VuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyMworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJvYmpla3RuYW1uZXQgw6RyIGludGUgZ2lsdGlndDogXCIlc1wiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIG9iamVrdHR5cCBmw7ZyICVzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNDIKK21zZ2lkICJlZGl0aW5nIG9iamVjdCBmaWxlIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHJlZGlnZXJhIG9iamVrdGZpbGVuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibnl0dCBvYmpla3Qgw6RyIHNhbW1hIHNvbSBkZXQgZ2FtbGE6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSAlcyBzb20gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgImZlbGFrdGlnIHNhbW1hbnNsYWduaW5nc3RhZ2cgaSBpbmNoZWNrbmluZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiZmVsZm9ybWFkIHNhbW1hbnNsYWduaW5nc3RhZ2cgaSBpbmNoZWNrbmluZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyJkZW4gdXJzcHJ1bmdsaWdhIGluY2hlY2tuaW5nZW4gXCIlc1wiIGlubmVow6VsbGVyIHNhbW1hbnNsYWduaW5nc3RhZ2dlbiBcIiVzIgorIlwiIHNvbSBoYXIgZsO2cmthc3RhdHM7IGFudsOkbmQgLS1lZGl0IGlzdMOkbGxldCBmw7ZyIC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZSIKK21zZ3N0ciAiZGVuIHVyc3BydW5nbGlnYSBpbmNoZWNrbmluZ2VuIFwiJXNcIiBoYXIgZW4gZ3BnLXNpZ25hdHVyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjkKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAic2lnbmF0dXJlbiBrb21tZXIgYXR0IHRhcyBib3J0IGkgZXJzw6R0dG5pbmdzaW5jaGVja25pbmdlbiEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZXJzw6R0dG5pbmdzaW5jaGVja25pbmcgZsO2cjogXCIlc1wiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JhZnQgZm9yICclcycgdW5uZWNlc3NhcnkiCittc2dzdHIgInltcG5pbmcgZsO2ciBcIiVzXCIgYmVow7Z2cyBpbnRlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibnkgaW5jaGVja25pbmcgw6RyIHNhbW1hIHNvbSBkZW4gZ2FtbGE6IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSBrb252ZXJ0ZXJhIGbDtmxqYW5kZSB5bXBuaW5nKGFyKTpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ3Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgInZpc2EgZXJzw6R0dG5pbmdzcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAidGEgYm9ydCBlcnPDpHR0bmluZ3NyZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAicmVkaWdlcmEgYmVmaW50bGlndCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MAorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIsOkbmRyYSBlbiBpbmNoZWNrbmluZ3MgZsO2csOkbGRyYXIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAia29udmVydGVyYSBiZWZpbnRsaWcgeW1wbmluZ3NmaWwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MgorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgImVyc8OkdHQgcmVmZXJlbnNlbiBvbSBkZW4gZmlubnMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NAorbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAiYW52w6RuZCBpbnRlIHNueWdnIHZpc25pbmcgYXYgaW5uZWjDpWxsIGbDtnIgLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgImFudsOkbmQgZGV0dGEgZm9ybWF0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjgKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICItLWZvcm1hdCBrYW4gaW50ZSBhbnbDpG5kYXMgdXRhbmbDtnIgbGlzdG5pbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NgorbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIi1mIGthbiBlbmRhc3QgYW52w6RuZGFzIHZpZCBza3Jpdm5pbmcgYXYgZXJzw6R0dG5pbmciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4MAorbXNnaWQgIi0tcmF3IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcmF3IGthbiBiYXJhIGFudsOkbmRhcyBtZWQgLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODYKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1kIGJlaMO2dmVyIG1pbnN0IGV0dCBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkyCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgImZlbCBhbnRhbCBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk4Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIHRhciBleGFrdCBldHQgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNAorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWcgdGFyIG1pbnN0IGV0dCBhcmd1bWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjEwCittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIi0tY29udmVydC1ncmFmdC1maWxlIHRhciBpbmdhIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTYKK21zZ2lkICJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIgorbXNnc3RyICJlbmRhc3QgZXR0IG3Dtm5zdGVyIGthbiBhbmdlcyBtZWQgLWwiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTMKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgInJlZ2lzdHJlcmEgcmVuYSBsw7ZzbmluZ2FyIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICJcImdpdCByZXJlcmUgZm9yZ2V0XCIgdXRhbiBzw7ZrdsOkZ2FyIMOkciBmw7Zyw6VsZHJhdCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBkaWZmIGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGluY2hlY2tuaW5nPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImdpdCByZXNldCBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCByZXNldCBbLXFdIFs8dHLDpGQtaWd0Pl0gWy0tXSA8c8O2a3bDpGdhcj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyZWUtaXNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy1xXSBbLS1wYXRoc3BlYy1mcm9tLWZpbGUgWy0tcGF0aHNwZWMtZmlsZS1udWxdXSBbPHRyw6RkLWlndD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzUKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs8dHLDpGQtaWd0Pl0gWy0tXSBbPHPDtmt2w6RnYXI+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgImJsYW5kYWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgIm1qdWsiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImhhcmQiCittc2dzdHIgImjDpXJkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgImJlaMOlbGwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJEdSBoYXIgaW50ZSBlbiBnaWx0aWcgSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4NAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgdHLDpGRldCBmw7ZyIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgdHLDpGRldCBmw7ZyICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCDDpHIgbnUgcMOlICVzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIkthbiBpbnRlIHV0ZsO2cmEgZW4gJXMgw6V0ZXJzdMOkbGxuaW5nIG1pdHQgaSBlbiBzYW1tYW5zbGFnbmluZy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTQgYnVpbHRpbi9zdGFzaC5jOjUxOSBidWlsdGluL3N0YXNoLmM6NTk0CisjOiBidWlsdGluL3N0YXNoLmM6NjE4Cittc2dpZCAiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIKK21zZ3N0ciAidmFyIHR5c3QsIHJhcHBvcnRlcmEgZW5kYXN0IGZlbCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICLDpXRlcnN0w6RsbCBIRUFEIG9jaCBpbmRleCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgZW5kYXN0IEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTkgYnVpbHRpbi9yZXNldC5jOjMwMQorbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIsOldGVyc3TDpGxsIEhFQUQsIGluZGV4IG9jaCBhcmJldHNrYXRhbG9nIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAzCittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLDpXRlcnN0w6RsbCBIRUFEIG1lbiBiZWjDpWxsIGxva2FsYSDDpG5kcmluZ2FyIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInJlZ2lzdHJlcmEgZW5kYXN0IGF0dCBib3J0dGFnbmEgc8O2a3bDpGdhciBrb21tZXIgbMOkZ2dhcyB0aWxsIHNlbmFyZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIFwiJXNcIiBzb20gZW4gZ2lsdGlnIHJldmlzaW9uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSB1cHAgXCIlc1wiIHNvbSBldHQgZ2lsdGlndCB0csOkZC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggw6RyIGlua29tcGF0aWJlbCBtZWQgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgcmVrb21tZW5kZXJhcyBpbnRlIG1lZCBzw7ZrdsOkZ2FyOyBhbnbDpG5kIFwiZ2l0IHJlc2V0IC0tIDxzw7ZrdsOkZ2FyPlwiLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIkthbiBpbnRlIGfDtnJhICVzIMOldGVyc3TDpGxsbmluZyBtZWQgc8O2a3bDpGdhci4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzIMOldGVyc3TDpGxsbmluZyB0aWxsw6V0cyBpbnRlIGkgZXR0IG5ha2V0IGFya2l2IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIGthbiBlbmRhc3QgYW52w6RuZGFzIG1lZCAtLW1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIk9rw7ZhZGUgw6RuZHJpbmdhciBlZnRlciDDpXRlcnN0w6RsbG5pbmc6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEZXQgdG9nICUuMmYgc2VrdW5kZXIgYXR0IHLDpGtuYSB1cHAgb2vDtmFkZSDDpG5kcmluZ2FyIGVmdGVyIMOldGVyc3TDpGxsbmluZy5cbiIKKyJEdSBrYW4gYW52w6RuZGEgXCItLXF1aWV0XCIgZsO2ciBhdHQgZsO2cmhpbmRyYSBkZXR0YS4gU3TDpGxsICIKKyJrb25maWd1cmF0aW9uc3ZhcmlhYmVsblxuIgorInJlc2V0LnF1aWV0IHRpbGwgdHJ1ZSBmw7ZyIGF0dCBnw7ZyYSBkZXR0YSB0aWxsIGbDtnJ2YWwuXG4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIkt1bmRlIGludGUgw6V0ZXJzdMOkbGxhIGluZGV4ZmlsZW4gdGlsbCB2ZXJzaW9uZW4gXCIlc1wiLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQyOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIkt1bmRlIGludGUgc2tyaXZhIG55IGluZGV4ZmlsLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQxMQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgImthbiBpbnRlIGtvbWJpbmVyYSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBvY2ggLS1taXNzaW5nIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDcyCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgIm9iamVrdGZpbHRyZXJpbmcga3LDpHZlciAtLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjIKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IHN0w7ZkZXIgaW50ZSB2aXNuaW5nIGF2IGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyNQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tdXNlLWJpdG1hcC1pbmRleCB3aXRoIG9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgImthbiBpbnRlIGtvbWJpbmVyYSAtLXVzZS1iaXRtYXAtaW5kZXggbWVkIG9iamVrdGZpbHRyZXJpbmciCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDA4Cittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmd1bWVudD4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxMworbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiYmVow6VsbCBcIi0tXCIgc8OkbnQgc29tIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxNQorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAic2x1dGEgdG9sa2EgZWZ0ZXIgZsO2cnN0YSBhcmd1bWVudCBzb20gaW50ZSDDpHIgZmxhZ2dhIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgInV0ZGF0YSBmYXN0IGkgbMOlbmcgZm9ybSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1NTEKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxmbGFnZ29yPl0gLS0gWzxhcmd1bWVudD4uLi5dXG4iCisiICAgICBlbGxlcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJndW1lbnQ+Li4uXVxuIgorIiAgICAgZWxsZXI6IGdpdCByZXYtcGFyc2UgWzxmbGFnZ29yPl0gWzxhcmd1bWVudD4uLi5dXG4iCisiXG4iCisiS8O2ciBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGbDtnIgbWVyIGluZm9ybWF0aW9uIG9tIGRlbiBmw7Zyc3RhICIKKyJ2YXJpYW50ZW4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzxmbGFnZ29yPl0gPGluY2hlY2tuaW5nLWlndD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjUKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8dW5kZXJrb21tYW5kbz4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxmbGFnZ29yPl0gPGluY2hlY2tuaW5nLWlndD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHVuZGVya29tbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8iCittc2dzdHIgImZsYWdnYW4gXCIlc1wiIGFudGFyIGV0dCBudW1lcmlza3QgdsOkcmRlIHN0w7ZycmUgw6RuIG5vbGwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiAlcyBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMgorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImF2c2x1dGEgcmV2ZXJ0LSBlbGxlciBjaGVycnktcGljay1zZWt2ZW5zIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMworbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIsOldGVydXBwdGEgcmV2ZXJ0LSBlbGxlciBjaGVycnktcGljay1zZWt2ZW5zIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImF2YnJ5dCByZXZlcnQtIGVsbGVyIGNoZXJyeS1waWNrLXNla3ZlbnMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAic2tpcCBjdXJyZW50IGNvbW1pdCBhbmQgY29udGludWUiCittc2dzdHIgImhvcHBhIMO2dmVyIG51dmFyYW5kZSBpbmNoZWNrbmluZyBvY2ggZm9ydHPDpHR0IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICJjaGVja2EgaW50ZSBpbiBhdXRvbWF0aXNrdCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAicmVkaWdlcmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAibnVtbWVyLXDDpS1mw7Zyw6RsZGVyIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInNlbGVjdCBtYWlubGluZSBwYXJlbnQiCittc2dzdHIgInbDpGxqIGbDtnLDpGxkZXIgZsO2ciBodXZ1ZGxpbmplIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTYKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJhbHRlcm5hdGl2IGbDtnIgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJsw6RnZyB0aWxsIGluY2hlY2tuaW5nc25hbW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImJlaMOlbGwgaW5jaGVja25pbmdhciBzb20gYsO2cmphciBzb20gdG9tbWEiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImJlaMOlbGwgcmVkdW5kYW50YSwgdG9tbWEgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJcInJldmVydFwiIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNDUKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIlwiY2hlcnJ5LXBpY2tcIiBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs8ZmxhZ2dvcj5dIFstLV0gPGZpbD4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImbDtmxqYW5kZSBmaWwgaGFyIGvDtmF0IGlubmVow6VsbCBzb20gc2tpbGplciBzaWcgYsOlZGUgZnLDpW4gZmlsZW4gb2NoIEhFQUQ6IgorbXNnc3RyWzFdICIiCisiZsO2bGphbmRlIGZpbGVyIGhhciBrw7ZhdCBpbm5laMOlbGwgc29tIHNraWxqZXIgc2lnIGLDpWRlIGZyw6VuIGZpbGVuIG9jaCBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIxMgorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKGFudsOkbmQgLWYgZsO2ciBhdHQgdHZpbmdhIGJvcnR0YWduaW5nKSIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gImbDtmxqYW5kZSBmaWwgaGFyIMOkbmRyaW5nYXIga8O2YWRlIGkgaW5kZXhldDoiCittc2dzdHJbMV0gImbDtmxqYW5kZSBmaWxlciBoYXIgw6RuZHJpbmdhciBrw7ZhZGUgaSBpbmRleGV0OiIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIoYW52w6RuZCAtLWNhY2hlZCBmw7ZyIGF0dCBiZWjDpWxsYSBmaWxlbiBlbGxlciAtZiBmw7ZyIGF0dCB0dmluZ2EgYm9ydHRhZ25pbmcpIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJmw7ZsamFuZGUgZmlsIGhhciBsb2thbGEgw6RuZHJpbmdhcjoiCittc2dzdHJbMV0gImbDtmxqYW5kZSBmaWxlciBoYXIgbG9rYWxhIMOkbmRyaW5nYXI6IgorCisjOiBidWlsdGluL3JtLmM6MjQyCittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibGlzdGEgaW50ZSBib3J0dGFnbmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDMKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAidGEgYmFyYSBib3J0IGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiw7Z2ZXJzdHlyIMOgam91ci10ZXN0ZXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDUKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAidGlsbMOldCByZWt1cnNpdiBib3J0dGFnbmluZyIKKworIzogYnVpbHRpbi9ybS5jOjI0NworbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJhdnNsdXRhIG1lZCBub2xsc3RhdHVzIMOkdmVuIG9tIGluZ2V0IHRyw6RmZmFkZXMiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODkKK21zZ2lkICJwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorImzDtmEgZGluYSDDpG5kcmluZ2FyIGkgLmdpdG1vZHVsZXMgZWxsZXIgYW52w6RuZCBcInN0YXNoXCIgZsO2ciBhdHQgZm9ydHPDpHR0YSIKKworIzogYnVpbHRpbi9ybS5jOjMwNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICJ0YXIgaW50ZSBib3J0IFwiJXNcIiByZWt1cnNpdnQgdXRhbiAtciIKKworIzogYnVpbHRpbi9ybS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybToga2FuIGludGUgdGEgYm9ydCAlcyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoyMAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8dsOkcmQ+Ol08a2F0YWxvZz4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIG9jaCBleHBsaWNpdCBhbmdpdmVuIDxyZWY+IMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZS4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgImZqw6Rycm5hbW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgImFudsOkbmQgdGlsbHN0w6VuZHNsw7ZzdCBSUEMtcHJvdG9rb2xsIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsw6RzIHJlZmVyZW5zZXIgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAidmlzYSBzdGF0dXMgZnLDpW4gZmrDpHJyaGrDpGxwYXJlIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTQKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPGZsYWdnb3I+XSBbPHZlcnNpb25zaW50ZXJ2YWxsPl0gW1stLV0gPHPDtmt2w6RnPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjQKK21zZ2lkICJHcm91cCBieSBjb21taXR0ZXIgcmF0aGVyIHRoYW4gYXV0aG9yIgorbXNnc3RyICJHcnVwcGVyYSBlZnRlciBpbmNoZWNrYXJlIGlzdMOkbGxldCBmw7ZyIGbDtnJmYXR0YXJlIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJzb3J0ZXJhIHV0ZGF0YSBlbmxpZ3QgYW50YWwgaW5jaGVja25pbmdhciBwZXIgZsO2cmZhdHRhcmUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiVW5kZXJ0cnljayBiZXNrcml2bmluZ2FyLCB2aXNhIGJhcmEgYW50YWwgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIlZpc2EgZS1wb3N0YWRyZXNzIGbDtnIgdmFyamUgZsO2cmZhdHRhcmUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzEKK21zZ2lkICI8dz5bLDxpMT5bLDxpMj5dXSIKK21zZ3N0ciAiPHc+Wyw8aTE+Wyw8aTI+XV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNzIKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIlJhZGJyeXQgdXRkYXRhIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZmxhZ2dvciBnaXZuYSB1dGFuZsO2ciBhcmtpdmV0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTxuw6RyPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8bcO2bnN0ZXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxNworbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzPl1dIFstLWxpc3RdIFs8cmVmPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gImlnbm9yZXJhciAlczsga2FuIGludGUgaGFudGVyYSBtZXIgw6RuICVkIHJlZmVyZW5zIgorbXNnc3RyWzFdICJpZ25vcmVyYXIgJXM7IGthbiBpbnRlIGhhbnRlcmEgbWVyIMOkbiAlZCByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIKK21zZ3N0ciAiaW5nYSBtb3RzdmFyYW5kZSByZWZlcmVuc2VyIG1lZCAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAidmlzYSBmasOkcnJzcMOlcmFuZGUgb2NoIGxva2FsYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAidmlzYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiZsOkcmdhIFwiKiErLVwiIGVubGlndCBncmVuZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAidmlzYSA8bj4geXR0ZXJsaWdhcmUgaW5jaGVja25pbmdhciBlZnRlciBnZW1lbnNhbSBhbmZhZGVyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUzCittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICJzeW5vbnltIHRpbGwgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJ1bmRlcnR5Y2sgbmFtbnN0csOkbmdhciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NgorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJpbmtsdWRlcmEgYWt0dWVsbCBncmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU4Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICJuYW1uZ2UgaW5jaGVja25pbmdhciBtZWQgZGVyYXMgb2JqZWt0bmFtbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgInZpc2EgbcO2amxpZ2Egc2FtbWFuc2xhZ25pbmdzYmFzZXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJ2aXNhIHJlZmVyZW5zZXIgc29tIGludGUga2FuIG7DpXMgZnLDpW4gbsOlZ29uIGFubmFuIHJlZmVyZW5zIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJ2aXNhIGluY2hlY2tuaW5nYXIgaSB0b3BvbG9naXNrIG9yZG5pbmciCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgaW5jaGVja25pbmdhciBpbnRlIHDDpSBkZW4gZsO2cnN0YSBncmVuZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjkKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgInZpc2Egc2FtbWFuc2xhZ25pbmdhciBzb20gZW5kYXN0IGthbiBuw6VzIGZyw6VuIGVuIHNwZXRzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICJzb3J0ZXJhIHRvcG9sb2dpc2t0LCBiZWjDpWxsIGRhdHVtb3JkbmluZyBuw6RyIG3DtmpsaWd0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxiYXM+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICJ2aXNhIDxuPiBueWFzdGUgcmVmbG9nZ3Bvc3RlciBtZWQgYsO2cmphbiBww6UgYmFzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzExCittc2dpZCAiIgorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIgorbXNnc3RyICIiCisiLS1yZWZsb2cgw6RyIGlua29tcGF0aWJlbCBtZWQgLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBlbGxlciAtLW1lcmdlLSIKKyJiYXNlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM1Cittc2dpZCAibm8gYnJhbmNoZXMgZ2l2ZW4sIGFuZCBIRUFEIGlzIG5vdCB2YWxpZCIKK21zZ3N0ciAiaW5nYSBncmVuYXIgYW5nYXZzLCBvY2ggSEVBRCDDpHIgaW50ZSBnaWx0aWd0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzM4Cittc2dpZCAiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS1yZWZsb2cgYmVow7Z2ZXIgZXR0IG5hbW4gcMOlIGVuIGdyZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAibWF4aW1hbHQgJWQgcG9zdGVyIGthbiB2aXNhcyBzYW10aWRpZ3QuIgorbXNnc3RyWzFdICJtYXhpbWFsdCAlZCBwb3N0ZXIga2FuIHZpc2FzIHNhbXRpZGlndC4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWYgJXMiCittc2dzdHIgImluZ2VuIHPDpWRhbiByZWZlcmVucyAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAia2FuIGludGUgaGFudGVyYSBtZXIgw6RuICVkIHJldmlzaW9uLiIKK21zZ3N0clsxXSAia2FuIGludGUgaGFudGVyYSBtZXIgw6RuICVkIHJldmlzaW9uZXIuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGVuIGdpbHRpZyByZWZlcmVucy4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgImhpdHRhciBpbnRlIGluY2hlY2tuaW5nICVzICglcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMgorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPG3Dtm5zdGVyPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxtw7Zuc3Rlcj5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYyCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIChrYW4ga29tYmluZXJhcyBtZWQgaHV2dWRlbikiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjMKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBodXZ1ZGVuIChrYW4ga29tYmluZXJhcyBtZWQgdGFnZ2FyKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgInN0cmlrdGFyZSByZWZlcmVuc2tvbnRyb2xsLCBrcsOkdmVyIGV4YWt0IHJlZmVyZW5zc8O2a3bDpGciCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjcgYnVpbHRpbi9zaG93LXJlZi5jOjE2OQorbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAidmlzYSBIRUFELXJlZnJlbnMsIMOkdmVuIG7DpHIgZGVuIHNrdWxsZSBmaWx0cmVyYXMgdXQiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiYXZyZWZlcmVyYSB0YWdnYXIgdGlsbCBvYmpla3QtaWQiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgInZpc2EgU0hBMS1oYXNoIGVuZGFzdCBtZWQgPG4+IHNpZmZyb3IiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAidmlzYSBpbnRlIHJlc3VsdGF0IHDDpSBzdGFuZGFyZCB1dCAoYW52w6RuZGJhcnQgbWVkIC0tdmVyaWZ5KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgInZpc2EgcmVmZXJlbnNlciBmcsOlbiBzdGFuZGFyZCBpbiBzb20gaW50ZSBmaW5ucyBpIGxva2FsdCBhcmtpdiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMAorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8ZGlzYWJsZSkgPG9wdGlvbnM+IgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGRpc2FibGUpIDxmbGFnZ29yPiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo2MQorbXNnaWQgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiCittc2dzdHIgIiIKKyJhcmJldHNrYXRhbG9nZW4gw6RyIGludGUgZ2xlc3QgKHNwYXJzZS1jaGVja291dC1maWxlbiBrYW5za2UgaW50ZSBmaW5ucykiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjIwCittc2dpZCAiZmFpbGVkIHRvIHNldCBleHRlbnNpb25zLndvcmt0cmVlQ29uZmlnIHNldHRpbmciCittc2dzdHIgIm1pc3NseWNrYWRlcyDDpG5kcmEgaW5zdMOkbGxuaW5nZW4gZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMzcKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgaW5pdCBbLS1jb25lXSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNTYKK21zZ2lkICJpbml0aWFsaXplIHRoZSBzcGFyc2UtY2hlY2tvdXQgaW4gY29uZSBtb2RlIgorbXNnc3RyICJpbml0aWVyYSBzcGFyc2UtY2hlY2tvdXQgaSBrb25sw6RnZSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyNjIKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiaW5pdGllcmEgc3BhcnNlLWNoZWNrb3V0IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIFwiJXNcIiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNjEKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCAoLS1zdGRpbiB8IDxwYXR0ZXJucz4pIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCAoLS1zdGRpbiB8IDxtw7Zuc3Rlcj4pIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM3OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAibMOkcyBtw7Zuc3RlciBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozODQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICJzdMOkbGwgaW4gZmlsdGVyIGbDtnIgZ2xlcyB1dGNoZWNrbmluZyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NDcKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAiaW5ha3RpdmVyYSBnbGVzIHV0Y2hlY2tuaW5nIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQ1OQorbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImZlbCB2aWQgdXBwZGF0ZXJpbmcgYXYgYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozNworbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIzIGJ1aWx0aW4vc3Rhc2guYzo0MgorbXNnaWQgImdpdCBzdGFzaCBzaG93IFs8b3B0aW9ucz5dIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIHNob3cgWzxmbGFnZ29yPl0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ3Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI1Cittc2dpZCAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI2IGJ1aWx0aW4vc3Rhc2guYzo2MgorbXNnaWQgImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGJyYW5jaCA8Z3Jlbm5hbW4+IFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI3IGJ1aWx0aW4vc3Rhc2guYzo2NworbXNnaWQgImdpdCBzdGFzaCBjbGVhciIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjggYnVpbHRpbi9zdGFzaC5jOjc3Cittc2dpZCAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxwYXRoc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBbcHVzaCBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1tfC0tbWVzc2FnZSA8bWVkZGVsYW5kZT5dXG4iCisiICAgICAgICAgIFstLV0gWzxzw7ZrdsOkZz4uLi5dXSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjMxIGJ1aWx0aW4vc3Rhc2guYzo4NAorbXNnaWQgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggc2F2ZSBbLXB8LS1wYXRjaF0gWy1rfC0tW25vLV1rZWVwLWluZGV4XSBbLXF8LS1xdWlldF1cbiIKKyIgICAgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZWRkZWxhbmRlPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MgorbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NworbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzIKK21zZ2lkICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lZGRlbGFuZGU+XSBbLXF8LS1xdWlldF0gPGluY2hlY2tuaW5nPiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gXCJzdGFzaFwiLWxpa25hbmRlIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiCittc2dzdHIgIkbDtnIgbcOlbmdhIHJldmlzaW9uZXIgYW5naXZuYTolcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICJJbmdhIFwic3Rhc2hcIi1wb3N0ZXIgaGl0dGFkZXMuIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJXMgw6RyIGludGUgZW4gZ2lsdGlndCByZWZlcmVucyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyNCBnaXQtbGVnYWN5LXN0YXNoLnNoOjc1Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICJcImdpdCBzdGFzaCBjbGVhclwiIG1lZCBwYXJhbWV0cmFyIGhhciBpbnRlIGltcGxlbWVudGVyYXRzIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDAzCittc2dpZCAiY2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJrYW4gaW50ZSB0aWxsw6RtcGEgZW4gXCJzdGFzaFwiIG1pdHQgaSBlbiBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBkaWZmICVzXiEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIxCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJrb25mbGlrdGVyIGkgaW5kZXhldC4gVGVzdGEgdXRhbiAtLWluZGV4LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyNworbXNnaWQgImNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgImt1bmRlIGludGUgc3BhcmEgaW5kZXh0csOkZCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNgorbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICJrdW5kZSBpbnRlIMOldGVyc3TDpGxsYSBvc3DDpXJhZGUgZmlsZXIgZnLDpW4gc3Rhc2gtcG9zdCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgIlNsw6VyIGlob3AgJXMgbWVkICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYwIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJJbmRleGV0IGhhciBpbnRlIHRhZ2l0cyB1cHAgdXIgXCJzdGFzaFwiOmVuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIxIGJ1aWx0aW4vc3Rhc2guYzo2MjAKK21zZ2lkICJhdHRlbXB0IHRvIHJlY3JlYXRlIHRoZSBpbmRleCIKK21zZ3N0ciAiZsO2cnPDtmsgw6V0ZXJza2FwYSBpbmRleGV0IgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJXMgKCVzKSIKK21zZ3N0ciAiS2FzdGFkZSAlcyAoJXMpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXM6IEt1bmRlIGludGUga2FzdGEgXCJzdGFzaFwiLXBvc3QiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIlwiJXNcIiDDpHIgaW50ZSBlbiBcInN0YXNoXCItcmVmZXJlbnMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiU3Rhc2gtcG9zdGVuIGJlaMOlbGxzIGlmYWxsIGR1IGJlaMO2dmVyIGRlbiBpZ2VuLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjY1NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjcxMworbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiSW5nZXQgZ3Jlbm5hbW4gYW5nYXZzIgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk1IGJ1aWx0aW4vc3Rhc2guYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICJLYW4gaW50ZSB1cHBkYXRlcmEgJXMgbWVkICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6ODEzIGJ1aWx0aW4vc3Rhc2guYzoxNDcwIGJ1aWx0aW4vc3Rhc2guYzoxNTA2Cittc2dpZCAic3Rhc2ggbWVzc2FnZSIKK21zZ3N0ciAiXCJzdGFzaFwiLW1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MjMKK21zZ2lkICJcImdpdCBzdGFzaCBzdG9yZVwiIHJlcXVpcmVzIG9uZSA8Y29tbWl0PiBhcmd1bWVudCIKK21zZ3N0ciAiXCJnaXQgc3Rhc2ggc3RvcmVcIiBrcsOkdmVyIGV0dCA8aW5jaGVja25pbmc+LWFyZ3VtZW50IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIkluZ2Egw6RuZHJpbmdhciB2YWxkYSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNTAKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAiRHUgaGFyIGludGUgZGVuIGbDtnJzdGEgaW5jaGVja25pbmdlbiDDpG5udSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgYWt0dWVsbHQgdGlsbHN0w6VuZCBmw7ZyIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTgxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgb3Nww6VyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE5MiBidWlsdGluL3N0YXNoLmM6MTIwMSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMQorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgYWt0dWVsbHQgdGlsbHN0w6VuZCBmw7ZyIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyMjkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMzQKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2FuIGludGUgcmVnaXN0cmVyYSB0aWxsc3TDpW5kIGbDtnIgYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyNzggZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSAtLXBhdGNoIG9jaCAtLWluY2x1ZGUtdW50cmFja2VkIGVsbGVyIC0tYWxsIHNhbXRpZGlndCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTQKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICJHbMO2bWRlIGR1IGFudsOkbmRhIFwiZ2l0IGFkZFwiPyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNDYKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIkluZ2EgbG9rYWxhIMOkbmRyaW5nYXIgYXR0IHNwYXJhIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1MQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJLYW4gaW50ZSBpbml0aWVyYSBcInN0YXNoXCIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzMxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MzU1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJLYW4gaW50ZSBzcGFyYSBha3R1ZWxsIHN0YXR1cyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICJTcGFyYWRlIGFyYmV0c2thdGFsb2dlbiBvY2ggaW5kZXhzdGF0dXMgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDI2IGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IMOkbmRyaW5nYXIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYxIGJ1aWx0aW4vc3Rhc2guYzoxNDk3Cittc2dpZCAia2VlcCBpbmRleCIKK21zZ3N0ciAiYmVow6VsbCBpbmRleGV0IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2MyBidWlsdGluL3N0YXNoLmM6MTQ5OQorbXNnaWQgInN0YXNoIGluIHBhdGNoIG1vZGUiCittc2dzdHIgIlwic3Rhc2hcIiBpIFwicGF0Y2hcIi1sw6RnZSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjQgYnVpbHRpbi9zdGFzaC5jOjE1MDAKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICJ0eXN0IGzDpGdlIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NiBidWlsdGluL3N0YXNoLmM6MTUwMgorbXNnaWQgImluY2x1ZGUgdW50cmFja2VkIGZpbGVzIGluIHN0YXNoIgorbXNnc3RyICJ0YSBtZWQgb3Nww6VyYWRlIGZpbGVyIGkgXCJzdGFzaFwiIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2OCBidWlsdGluL3N0YXNoLmM6MTUwNAorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICJ0YSBtZWQgaWdub3JlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgImt1bmRlIGludGUga8O2cmEgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICJob3BwYSDDtnZlciBvY2ggdGEgYm9ydCBhbGxhIHJhZGVyIHNvbSBpbmxlZHMgbWVkIGtvbW1lbnRhcnN0ZWNrZW4iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICJsw6RnZyBpbiBrb21tZW50YXJzdGVja2VuIG9jaCBibGFua3N0ZWcgZsO2cnN0IHDDpSB2YXJqZSByYWQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIkbDtnJ2w6RudGFkZSBmdWxsdCByZWZlcmVuc25hbW4sIGZpY2sgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFyIGluZ2EgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0IGVuIGtvbXBvbmVudCBmcsOlbiB1cmw6ZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgwCittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAiYWx0ZXJuYXRpdmEgYW5rYXJlIGbDtnIgcmVsYXRpdmEgc8O2a3bDpGdhciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHPDtmt2w6RnPl0gWzxzw7ZrdsOkZz4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2MzAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJIaXR0YWRlIGluZ2VuIHVybCBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJXNcIiBpIC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICclcydcbiIKK21zZ3N0ciAiR8OlciBpbiBpIFwiJXNcIlxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorInJ1bl9jb21tYW5kIHJldHVybmVyYWRlIGlja2Utbm9sbHN0YXR1cyBmw7ZyICVzXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorInJ1bl9jb21tYW5kIHJldHVybmVyYWRlIGlja2Utbm9sbHN0YXR1cyB2aWQgcmVrdXJzZXJpbmcgaW4gaSBuw6RzdGxhZGUgIgorInVuZGVybW9kdWxlciBmw7ZyICVzXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICJEw7ZsaiB1dGRhdGEgZnLDpW4gZsO2ciB2YXJqZSB1bmRlcm1vZHVsc2tvbW1hbmRvIHNvbSBzdGFydGFzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDUzCittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICJSZWt1cnNlcmEgaW4gaSBuw6RzdGxhZGUgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTcyCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA8Y29tbWFuZD4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gWzxrb21tYW5kbz5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAiIgorImt1bmRlIGludGUgc2zDpSB1cHAga29uZmlndXJhdGlvbmVuIFwiJXNcIi4gQW50YXIgYXR0IGFya2l2ZXQgw6RyIHNpbiBlZ2V0ICIKKyJvZmZpY2llbGxhIHVwcHN0csO2bS4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHJlZ2lzdHJlcmEgdXJsIGbDtnIgdW5kZXJtb2R1bHPDtmt2w6RnIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICJVbmRlcm1vZHVsZW4gXCIlc1wiICglcykgcmVnaXN0cmVyYWQgZsO2ciBzw7ZrdsOkZ2VuIFwiJXNcIlxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJ2YXJuaW5nOiBrb21tYW5kb3VwcGRhdGVyaW5nc2zDpGdlIGbDtnJlc2xvZ3MgZsO2ciB1bmRlcm1vZHVsZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgcmVnaXN0cmVyYSB1cHBkYXRlcmluZ3Nsw6RnZSBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiRMO2bGogdXRkYXRhIGZyw6VuIGluaXRpZXJpbmcgYXYgdW5kZXJtb2R1bCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPGZsYWdnb3I+XSBbPHPDtmt2w6RnPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3ODcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJoaXR0YWRlIGluZ2VuIHVuZGVybW9kdWxtYXBwbmluZyBpIC5naXRtb2R1bGVzIGbDtnIgc8O2a3bDpGdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBiZXN0w6RtbWEgSEVBRDpzIGluY2hlY2tuaW5nIGkgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg1NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgcmVrdXJzZXJhIGluIGkgdW5kZXJtb2R1bGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE4OQorbXNnaWQgIlN1cHByZXNzIHN1Ym1vZHVsZSBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJIaW5kcmEgc3RhdHVzdXRza3JpZnQgZsO2ciB1bmRlcm1vZHVsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc5Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIiIKKyJWaXNhIGluY2hlY2tuaW5nIGZyw6VuIGluZGV4ZXQgaXN0w6RsbGV0IGbDtnIgZGVuIHNvbSBsYWdyYXRzIGkgdW5kZXJtb2R1bGVucyAiCisiSEVBRCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAicmVrdXJzZXJhIGluIGkgbsOkc3RsYWRlIHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4NQorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aXRldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkwOQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHPDtmt2w6RnPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAiU3lua3JvbmlzZXJhciB1bmRlcm1vZHVsLXVybCBmw7ZyIFwiJXNcIlxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyByZWdpc3RyZXJhIHVybCBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgaMOkbXRhIHN0YW5kYXJkZmrDpHJyIGbDtnIgdW5kZXJtb2R1bHPDtmt2w6RnIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGZqw6RyciBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDUxCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IG9mIHN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCIKK21zZ3N0ciAiRMO2bGogdXRkYXRhIGZyw6VuIHN5bmtyb25pZXJpbmcgYXYgdW5kZXJtb2R1bC11cmwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDU4Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8c8O2a3bDpGc+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJVbmRlcm1vZHVsc2FyYmV0c2thdGFsb2dlbiBcIiVzXCIgaW5uZWjDpWxsZXIgZW4gLmdpdC1rYXRhbG9nIChhbnbDpG5kIFwicm0gLXJmIgorIlwiIG9tIGR1IHZlcmtsaWdlbiB2aWxsIHRhIGJvcnQgZGVuIG9jaCBhbGwgZGVzcyBoaXN0b3JpaykiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gZGlzY2FyZCAiCisidGhlbSIKK21zZ3N0ciAiIgorIlVuZGVybW9kdWxlbnMgYXJiZXRza2F0YWxvZyBcIiVzXCIgaGFyIGxva2FsYSDDpG5kcmluZ2FyOyBcIi1mXCIga2FzdGFyIGJvcnQgIgorImRlbSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICJSZW5zYWRlIGthdGFsb2dlbiBcIiVzXCJcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IHVuZGVybW9kdWxlbnMgYXJiZXRza2F0YWxvZyBcIiVzXCJcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIHRvbSB1bmRlcm1vZHVsc2thdGFsb2cgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAiVW5kZXJtb2R1bGVuIFwiJXNcIiAoJXMpIHJlZ2lzdHJlcmFkIGbDtnIgc8O2a3bDpGdlbiBcIiVzXCJcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTAKK21zZ2lkICJSZW1vdmUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZXMgZXZlbiBpZiB0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiIgorIlRhIGJvcnQgdW5kZXJtb2R1bGVycyBhcmJldHNrYXRhbG9nZXIgw6R2ZW4gb20gZGUgaW5uZWjDpWxsZXIgbG9rYWxhIMOkbmRyaW5nYXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiQXZyZWdpc3RyZXJhIGFsbGEgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5NgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHPDtmt2w6RnPi4uLl1dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTIxMAorbXNnaWQgIlVzZSAnLS1hbGwnIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIkFudsOkbmQgXCItLWFsbFwiIG9tIGR1IHZlcmtsaWdlbiB2aWxsIGF2aW5pdGllcmEgYWxsYSB1bmRlcm1vZHVsZXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjc1Cittc2dpZCAiIgorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorbXNnc3RyICIiCisiRW4gc3VwcGxlYW50IGJlcsOka25hZCBmcsOlbiDDtnZlcnByb2pla3RldHMgc3VwcGxlYW50IMOkciBvZ2lsdGlnLlxuIgorIkbDtnIgYXR0IGkgc8OlIGZhbGwgbMOldGEgR2l0IGtsb25hIHV0YW4gZXR0IHN1cHBsZWFudCwgc8OkdHRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0aWxsIFwiaW5mb1wiIGVsbGVyLCBsaWt2w6RyZGlndCwga2xvbmFcbiIKKyJtZWQgXCItLXJlZmVyZW5jZS1pZi1hYmxlXCIgaXN0w6RsbGV0IGbDtnIgXCItLXJlZmVyZW5jZVwiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlICclcycgY2Fubm90IGFkZCBhbHRlcm5hdGU6ICVzIgorbXNnc3RyICJ1bmRlcm1vZHVsZW4gXCIlc1wiIGthbiBpbnRlIGzDpGdnYSB0aWxsIHN1cHBsZWFudDogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJWw6RyZGV0IFwiJXNcIiBpIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGbDtnJzdMOlcyBpbnRlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIlbDpHJkZXQgXCIlc1wiIGkgc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGbDtnJzdMOlcyBpbnRlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MworbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICJ2YXIgZGVuIG55YSB1bmRlcm1vZHVsZW4gc2thbGwga2xvbmFzIHRpbGwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg2Cittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAibmFtbiBww6UgZGVuIG55YSB1bmRlcm1vZHVsZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg5Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAiVVJMIGF0dCBrbG9uYSB1bmRlcm1vZHVsZW4gZnLDpW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk3Cittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICJkanVwIGbDtnIgZ3J1bmRhIGtsb25lciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTcKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJ0dmluZ2Ega2xvbmluZ3Nmw7ZybG9wcCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTkKK21zZ2lkICJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIKK21zZ3N0ciAiZsO2cmhpbmRyYSBrbG9uaW5nIHRpbGwgaWNrZS10b20ga2F0YWxvZyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDcKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxzw7ZrdsOkZz5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxhcmt2aT5dIFstLW5hbWUgPG5hbW4+XSBbLS1kZXB0aCA8ZGp1cD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8c8O2a3bDpGc+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBjcmVhdGUvdXNlICclcycgaW4gYW5vdGhlciBzdWJtb2R1bGUncyBnaXQgZGlyIgorbXNnc3RyICJ2w6RncmFyIHNrYXBhL2FudsOkbmRhIFwiJXNcIiBpIGVuIGFubmFuIHVuZGVybW9kdWxzIGdpdGthdGFsb2ciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGtsb25hIFwiJXNcIiB0aWxsIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAia2F0YWxvZ2VuIGludGUgdG9tOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBmw6UgdGFnIGkgdW5kZXJtb2R1bGthdGFsb2cgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiT2dpbHRpZ3QgdXBwZGF0ZXJpbmdzbMOkZ2UgXCIlc1wiIGbDtnIgdW5kZXJtb2R1bHPDtmt2w6RnIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGNvbmZpZ3VyZWQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIiIKKyJPZ2lsdGlndCB1cHBkYXRlcmluZ3Nsw6RnZSBcIiVzXCIga29uZmlndXJlcmF0IGbDtnIgdW5kZXJtb2R1bHPDtmt2w6RnIFwiJXNcIiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIlVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJXNcIiBoYXIgaW50ZSBpbml0aWVyYXRzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5OAorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICJLYW5za2UgbWVuYWRlIGR1IGF0dCBhbnbDpG5kYSBcInVwZGF0ZSAtLWluaXRcIj8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiSG9wcGFyIMO2dmVyIGVqIHNhbW1hbnNsYWdlbiB1bmRlcm1vZHVsICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTY1NworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiSG9wcGFyIMO2dmVyIHVuZGVybW9kdWxlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiCittc2dzdHIgIk1pc3NseWNrYWRlcyBrbG9uYSBcIiVzXCIuIE55dHQgZsO2cnPDtmsgcGxhbmxhZ3QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICJNaXNzbHlja2FkZXMga2xvbmEgXCIlc1wiIGbDtnIgYW5kcmEgZ8OlbmdlbiwgYXZicnl0ZXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIwCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInPDtmt2w6RnIGludXRpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzkKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAic8O2a3bDpGcgaW51dGkgYXJiZXRza2F0YWxvZ2VuLCBnZW5vbSBuw6RzdGxhZGUgdW5kZXJtb2R1bGdyw6Ruc2VyIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MworbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IGVsbGVyIG5vbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg5Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICJTa2FwYSBlbiBncnVuZCBrbG9uIHRydW5rZXJhZCB0aWxsIGFuZ2l2ZXQgYW50YWwgcmV2aXNpb25lciIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTIKK21zZ2lkICJwYXJhbGxlbCBqb2JzIgorbXNnc3RyICJwYXJhbGxlbGxhIGpvYmIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk0Cittc2dpZCAid2hldGhlciB0aGUgaW5pdGlhbCBjbG9uZSBzaG91bGQgZm9sbG93IHRoZSBzaGFsbG93IHJlY29tbWVuZGF0aW9uIgorbXNnc3RyICJvbSBkZW4gZsO2cnN0YSBrbG9uZW4gc2thbGwgZsO2bGphIHJla29tbWVuZGF0aW9uIGbDtnIgZ3J1bmQga2xvbmluZyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTUKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICJza3JpdiBpbnRlIGtsb25mw7ZybG9wcCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08c8O2a3bDpGc+XSBbPHPDtmt2w6RnPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE3Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICJmZWxha3RpZ3QgdsOkcmRlIGbDtnIgcGFyYW1ldGVybiB1cGRhdGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICIiCisiVW5kZXJtb2R1bGVucyAoJXMpIGdyZW4gaW5zdMOkbGxkIHDDpSBhdHQgw6RydmEgZ3JlbiBmcsOlbiBodXZ1ZHByb2pla3RldCwgbWVuICIKKyJodXZ1ZHByb2pla3RldCDDpHIgaW50ZSBww6UgbsOlZ29uIGdyZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgZsOlIHRhZyBpIGFya2l2aGFuZHRhZyBmw7ZyIHVuZGVybW9kdWxlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIxCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgInJla3Vyc2VyYSBuZXIgaSB1bmRlcm1vZHVsZXIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTI3Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlyIFs8ZmxhZ2dvcj5dIFs8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODMKK21zZ2lkICJjaGVjayBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICJzZSBvbSBkZXQgw6RyIHPDpGtlcnQgYXR0IHNrcml2YSB0aWxsIC5naXRtb2R1bGVzLWZpbGVuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE4NgorbXNnaWQgInVuc2V0IHRoZSBjb25maWcgaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgInRhIGJvcnQga29uZmlndXJhdGlvbmVuIGZyw6VuIC5naXRtb2R1bGVzLWZpbGVuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtbj4gWzx2w6RyZGU+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbW4+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyIGdpdC1zdWJtb2R1bGUuc2g6MTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAic2UgdGlsbCBhdHQgLmdpdG1vZHVsZXMgZmlubnMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjYyIGdpdC5jOjQzMyBnaXQuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyBzdMO2ZGVyIGludGUgLS1zdXBlci1wcmVmaXgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGV0dCBnaWx0aWd0IHVuZGVya29tbWFuZG8gdGlsbCBzdWJtb2R1bGUtLWhlbHBlciIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPGZsYWdnb3I+XSA8bmFtbj4gWzxyZWY+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1uPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKyJ1bmRlcnRyeWNrIGZlbG1lZGRlbGFuZGVuIGbDtnIgaWNrZS1zeW1ib2xpc2thIChmcsOlbmtvcHBsYWRlKSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAidGEgYm9ydCBzeW1ib2xpc2sgcmVmZXJlbnMiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgImbDtnJrb3J0YSByZWYtdXRkYXRhIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAic2vDpGwiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgInNrw6RsIHRpbGwgdXBwZGF0ZXJpbmdlbiIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPG55Y2tlbC1pZD5dIFstZl0gWy1tIDxtZWRkPiB8IC1GIDxmaWw+XVxuIgorIlx0XHQ8dGFnZ25hbW4+IFs8aHV2dWQ+XSIKKworIzogYnVpbHRpbi90YWcuYzoyNworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDx0YWdnbmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjgKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tbm8tY29udGFpbnMgPGNvbW1pdD5dIFstLSIKKyJwb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFstLWZvcm1hdD08Zm9ybWF0Pl0gWy0tW25vLV1tZXJnZWQgWzxjb21taXQ+XV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstbls8YW50YWw+XV0gWy0tY29udGFpbnMgPGluY2hlY2tuaW5nPl0gWy0tbm8tY29udGFpbnMgIgorIjxpbmNoZWNrbmluZz5dIFstLXBvaW50cy1hdCA8b2JqZWt0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGluY2hlY2tuaW5nPl1dIFs8bcO2bnN0ZXI+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnZ25hbW4+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgInRhZ2dlbiBcIiVzXCIgaGl0dGFkZXMgaW50ZS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiVG9nIGJvcnQgdGFnZyBcIiVzXCIgKHZhciAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2tyaXYgZXR0IG1lZGRlbGFuZGUgZsO2ciB0YWdnZW46XG4iCisiICAlc1xuIgorIlJhZGVyIHNvbSBpbmxlZHMgbWVkIFwiJWNcIiBpZ25vcmVyYXMuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTa3JpdiBldHQgbWVkZGVsYW5kZSBmw7ZyIHRhZ2dlbjpcbiIKKyIgICVzXG4iCisiUmFkZXIgc29tIGlubGVkcyBtZWQgXCIlY1wiIGtvbW1lciBiZWjDpWxsYXM7IGR1IGthbiBzasOkbHYgdGEgYm9ydCBkZW0gb21cbiIKKyJkdSB2aWxsLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjE5OAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgImt1bmRlIGludGUgc2lnbmVyYSB0YWdnZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjAwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSB0YWdnLWZpbGVuIgorCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisiRHUgaGFyIHNrYXBhdCBlbiBuw6RzdGxhZCB0YWdnLiBPYmpla3RldCBzb20gcmVmZXJlcmFzIGF2IGRpbiBueWEgdGFnZyDDpHJcbiIKKyJyZWRhbiBlbiB0YWdnLiBPbSBkdSBza3VsbGUgdGFnZ2Egb2JqZWt0ZXQgZGVuIHBla2FyIHDDpSwgYW52w6RuZDpcbiIKKyJcbiIKKyJcdGdpdCB0YWcgLWYgJXMgJXNee30iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMyCittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAiZmVsYWt0aWcgb2JqZWt0dHlwLiIKKworIzogYnVpbHRpbi90YWcuYzoyODQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgImluZ2V0IHRhZ2dtZWRkZWxhbmRlPyIKKworIzogYnVpbHRpbi90YWcuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiVGFnZ21lZGRlbGFuZGV0IGhhciBsw6RtbmF0cyBpICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDAyCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgImxpc3RhIHRhZ2duYW1uIgorCisjOiBidWlsdGluL3RhZy5jOjQwNAorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICJ2aXNhIDxuPiByYWRlciBmcsOlbiB2YXJqZSB0YWdnbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi90YWcuYzo0MDYKK21zZ2lkICJkZWxldGUgdGFncyIKK21zZ3N0ciAidGEgYm9ydCB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA3Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgInZlcmlmaWVyYSB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA5Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBhdHQgc2thcGEgdGFnZ2FyIgorCisjOiBidWlsdGluL3RhZy5jOjQxMQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiYW5ub3RlcmFkIHRhZ2csIGJlaMO2dmVyIG1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgInRhZ2dtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL3RhZy5jOjQxNQorbXNnaWQgImZvcmNlIGVkaXQgb2YgdGFnIG1lc3NhZ2UiCittc2dzdHIgInR2aW5nYSByZWRpZ2VyaW5nIGF2IGluY2hlY2tuaW5nc21lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE2Cittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAiYW5ub3RlcmFkIG9jaCBHUEctc2lnbmVyYWQgdGFnZyIKKworIzogYnVpbHRpbi90YWcuYzo0MTkKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJhbnbDpG5kIGFubmFuIG55Y2tlbCBmw7ZyIGF0dCBzaWduZXJhIHRhZ2dlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MjAKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICJlcnPDpHR0IHRhZ2dlbiBvbSBkZW4gZmlubnMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIxIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OQorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAic2thcGEgZW4gcmVmbG9nIgorCisjOiBidWlsdGluL3RhZy5jOjQyMworbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBsaXN0bmluZyBhdiB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI0Cittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJsaXN0YSB0YWdnYXIgaSBzcGFsdGVyIgorCisjOiBidWlsdGluL3RhZy5jOjQyNSBidWlsdGluL3RhZy5jOjQyNworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIHNvbSBpbm5laMOlbGxlciBpbmNoZWNrbmluZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQyNiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIHNvbSBpbnRlIGlubmVow6VsbGVyIGluY2hlY2tuaW5nZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIHNvbSBzbGFnaXRzIHNhbW1hbiIKKworIzogYnVpbHRpbi90YWcuYzo0MzAKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIHNvbSBlaiBzbGFnaXRzIHNhbW1hbiIKKworIzogYnVpbHRpbi90YWcuYzo0MzQKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIGbDtnIgb2JqZWt0ZXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIG9jaCAtbiDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJGbGFnZ2FuIC1uIMOkciBlbmRhc3QgdGlsbMOldGVuIGkgbGlzdGzDpGdlIgorCisjOiBidWlsdGluL3RhZy5jOjUwNgorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkZsYWdnYW4gLS1jb250YWlucyDDpHIgZW5kYXN0IHRpbGzDpXRlbiBpIGxpc3Rsw6RnZSIKKworIzogYnVpbHRpbi90YWcuYzo1MDgKK21zZ2lkICItLW5vLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJGbGFnZ2FuIC0tbm8tY29udGFpbnMgw6RyIGVuZGFzdCB0aWxsw6V0ZW4gaSBsaXN0bMOkZ2UiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkZsYWdnYW4gLS1wb2ludHMtYXQgw6RyIGVuZGFzdCB0aWxsw6V0ZW4gaSBsaXN0bMOkZ2UiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEyCittc2dpZCAiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgIkZsYWdnb3JuYSAtLW1lcmdlZCBvY2ggLS1uby1tZXJnZWQgw6RyIGVuZGFzdCB0aWxsw6V0bmEgaSBsaXN0bMOkZ2UiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJlbmRhc3QgZW4gYXYgZmxhZ2dvcm5hIC1GIGVsbGVyIC1tIHRpbGzDpXRzLiIKKworIzogYnVpbHRpbi90YWcuYzo1NDIKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgImbDtnIgbcOlbmdhIHBhcmFtZXRyYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgdGFnZ25hbW4uIgorCisjOiBidWlsdGluL3RhZy5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAidGFnZ2VuIFwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJVcHBkYXRlcmFkIHRhZ2cgXCIlc1wiICh2YXIgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDEKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUGFja2FyIHVwcCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBrYXRhbG9nZW4gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIGZpbGVuICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IGZpbGVuICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExNSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQga2F0YWxvZ2VuICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICJUZXN0YXIgbXRpbWUgaSBcIiVzXCIgIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE1NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICJzdGF0LWluZm9ybWF0aW9uZW4gZsO2ciBlbiBrYXRhbG9nIMOkbmRyYXMgaW50ZSBuw6RyIG55YSBmaWxlciBsw6RnZ3MgdGlsbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisic3RhdC1pbmZvcm1hdGlvbmVuIGbDtnIgZW4ga2F0YWxvZyDDpG5kcmFzIGludGUgbsOkciBueWEga2F0YWxvZ2VyIGzDpGdncyB0aWxsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4MAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgInN0YXQtaW5mb3JtYXRpb25lbiBmw7ZyIGVuIGthdGFsb2cgw6RuZHJhcyBuw6RyIGZpbGVyIHVwcGRhdGVyYXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTkxCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorInN0YXQtaW5mb3JtYXRpb25lbiBmw7ZyIGVuIGthdGFsb2cgw6RuZHJhcyBuw6RyIGZpbGVyIGzDpGdncyB0aWxsIGkgZW4gIgorInVuZGVya2F0YWxvZyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgInN0YXQtaW5mb3JtYXRpb25lbiBmw7ZyIGVuIGthdGFsb2cgw6RuZHJhcyBpbnRlIG7DpHIgZW4gZmlsIHRhcyBib3J0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIxNQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICJzdGF0LWluZm9ybWF0aW9uZW4gZsO2ciBlbiBrYXRhbG9nIMOkbmRyYXMgaW50ZSBuw6RyIGVuIGthdGFsb2cgdGFzIGJvcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIyCittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTkxCittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8ZmxhZ2dvcj5dIFstLV0gWzxmaWw+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzQKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgImZvcnRzw6R0dCB1cHBkYXRlcmEgw6R2ZW4gbsOkciBpbmRleCBpbnRlIMOkciDDoGpvdXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlZnJlc2g6IGlnbm9yZXJhIHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODAKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAiaWdub3JlcmEgaW50ZSBueWEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgyCittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgImzDpXQgZmlsZXIgZXJzw6R0dGEga2F0YWxvZ2VyIG9jaCBvbXbDpG50IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImzDpGdnIG3DpHJrZSB0aWxsIGZpbGVyIHNvbSBzYWtuYXMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgInVwcGRhdGVyYSDDpHZlbiBvbSBpbmRleGV0IGlubmVow6VsbGVyIGVqIHNhbW1hbnNsYWduYSBwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg5Cittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJ1cHBkYXRlcmEgc3RhdHVzaW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJzb20gLS1yZWZyZXNoLCBtZW4gaWdub3JlcmEgYXNzdW1lLXVuY2hhbmdlZC1pbnN0w6RsbG5pbmciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk3Cittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPGzDpGdlPiw8b2JqZWt0Piw8c8O2a3bDpGc+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBhbmdpdmVuIHBvc3QgaSBpbmRleGV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDgKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgIm1hcmtlcmEgZmlsZXIgc29tIFwiw6RuZHJhcyBpbnRlXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAicmVuc2EgXCJhc3N1bWUtdW5jaGFuZ2VkXCItYml0ZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNAorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIm1hcmtlcmEgZmlsZXIgc29tIFwiZW5kYXN0IGluZGV4XCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxNworbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICJ0w7ZtIFwic2tpcC13b3JrdHJlZVwiLWJpdGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjAKK21zZ2lkICJkbyBub3QgdG91Y2ggaW5kZXgtb25seSBlbnRyaWVzIgorbXNnc3RyICJyw7ZyIGludGUgXCJlbmRhc3QgaW5kZXhcIi1wb3N0ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJsw6RnZyBlbmRhc3QgdGlsbCBpbmRleGV0OyBsw6RnZyBpbnRlIHRpbGwgaW5uZWjDpWxsZXQgaSBvYmpla3RkYXRhYmFzZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNAorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgInRhIGJvcnQgbmFtbmdpdm5hIHPDtmt2w6RnYXIgw6R2ZW4gb20gZGUgZmlubnMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyNgorbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAibWVkIC0tc3RkaW46IGluZGF0YXJhZGVyIHRlcm1pbmVyYXMgbWVkIG51bGwtYnl0ZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDI4Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibMOkcyBsaXN0YSDDtnZlciBzw7ZrdsOkZ2FyIGF0dCB1cHBkYXRlcmEgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAzMgorbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICJsw6RnZyBwb3N0ZXIgZnLDpW4gc3RhbmRhcmQgaW4gdGlsbCBpbmRleGV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzYKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIsOldGVyZnlsbCBldGFwcCAyIG9jaCAzIGZyw6VuIGFuZ2l2bmEgc8O2a3bDpGdhciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgInVwcGRhdGVyYSBlbmRhc3QgcG9zdGVyIHNvbSBza2lsamVyIHNpZyBmcsOlbiBIRUFEIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJpZ25vcmVyYSBmaWxlciBzb20gc2FrbmFzIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDcKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgInJhcHBvcnRlcmEgw6V0Z8OkcmRlciBww6Ugc3RhbmRhcmQgdXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0OQorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIoZsO2ciBwb3JzbGluKSBnbMO2bSBzcGFyYWRlIG9sw7ZzdGEga29uZmxpa3RlciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgInNrcml2IGluZGV4IGkgZGV0dGEgZm9ybWF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTUKK21zZ2lkICJlbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiYWt0aXZlcmEgZWxsZXIgaW5ha3RpdmVyYSBkZWxhdCBpbmRleCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU3Cittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJha3RpdmVyYS9pbmFrdGl2ZXJhIG9zcMOlcmFkIGNhY2hlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAidGVzdGEgb20gZmlsc3lzdGVtZXQgc3TDtmRlciBvc3DDpXJhZCBjYWNoZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDYxCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImFrdGl2ZXJhIG9zcMOlcmFkIGNhY2hlIHV0YW4gYXR0IHRlc3RhIGZpbHN5c3RlbWV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjMKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGluZGV4IGV2ZW4gaWYgaXMgbm90IGZsYWdnZWQgYXMgY2hhbmdlZCIKK21zZ3N0ciAic2tyaXYgdXQgaW5kZXhldCDDpHZlbiBvbSBkZXQgaW50ZSBhbmdpdml0cyBzb20gw6RuZHJhdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIKK21zZ3N0ciAiYWt0aXZlcmEgZWxsZXIgaW5ha3RpdmVyYSBmaWxzeXN0ZW1zw7Z2ZXJ2YWtuaW5nIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIGZzbW9uaXRvciB2YWxpZCIKK21zZ3N0ciAibWFya2VyYSBmaWxlciBzb20gXCJmc21vbml0b3IgdmFsaWRcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDcwCittc2dpZCAiY2xlYXIgZnNtb25pdG9yIHZhbGlkIGJpdCIKK21zZ3N0ciAidMO2bSBcImZzbW9uaXRvciB2YWxpZFwiLWJpdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IMOkciBzYXR0IHRpbGwgZmFsc2U7IHRhIGJvcnQgZWxsZXIgw6RuZHJhIGRldCBvbSBkdSB2ZXJrbGlnZW4gIgorInZpbGwgYWt0aXZlcmEgZGVsYXQgaW5kZXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE4MgorbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZGlzYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCDDpHIgc2F0dCB0aWxsIHRydWU7IHRhIGJvcnQgZWxsZXIgw6RuZHJhIGRldCBvbSBkdSB2ZXJrbGlnZW4gIgorInZpbGwgaW5ha3RpdmVyYSBkZWxhdCBpbmRleCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk0Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDDpHIgc2F0dCB0aWxsIHRydWU7IHRhIGJvcnQgZWxsZXIgw6RuZHJhIGRldCBvbSBkdSAiCisidmVya2xpZ2VuIHZpbGwgaW5ha3RpdmVyYSBkZW4gb3Nww6VyYWRlIGNhY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk4Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJPc3DDpXJhZCBjYWNoZSDDpHIgaW5ha3RpdmVyYWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgw6RyIHNhdHQgdGlsbCBmYWxzZTsgdGEgYm9ydCBlbGxlciDDpG5kcmEgZGV0IG9tIGR1ICIKKyJ2ZXJrbGlnZW4gdmlsbCBha3RpdmVyYSBkZW4gb3Nww6VyYWRlIGNhY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJPc3DDpXJhZCBjYWNoZSDDpHIgYWt0aXZlcmFkIGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICJjb3JlLmZzbW9uaXRvciBpbnRlIHNhdHQ7IHPDpHR0IG9tIGR1IHZlcmtsaWdlbiB2aWxsIGFrdGl2ZXJhIGZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjIyCittc2dpZCAiZnNtb25pdG9yIGVuYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciBha3RpdmVyYXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciDDpHIgc2F0dDsgdGEgYm9ydCBvbSBkdSB2ZXJrbGlnZW4gdmlsbCBpbmFrdGl2ZXJhIGZzbW9uaXRvciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjI5Cittc2dpZCAiZnNtb25pdG9yIGRpc2FibGVkIgorbXNnc3RyICJmc21vbml0b3IgaW5ha3RpdmVyYXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPGZsYWdnb3I+XSAtZCA8cmVmbmFtbj4gWzxnYW1tYWx0dsOkcmRlPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxmbGFnZ29yPl0gICAgPHJlZm5hbW4+IDxnYW1tYWx0dsOkcmRlPiBbPG55dHR2w6RyZGU+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTIKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8ZmxhZ2dvcj5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY0Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgInRhIGJvcnQgcmVmZXJlbnNlbiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgInVwcGRhdGVyYSA8cmVmbmFtbj4gaW50ZSBkZXQgZGVuIHBla2FyIHDDpSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAic3RhbmRhcmQgaW4gaGFyIE5VTC10ZXJtaW5lcmFkZSBhcmd1bWVudCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgdXBwZGF0ZXJpbmdhciBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE1Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAidXBwZGF0ZXJhIGluZm9ybWF0aW9uc2ZpbGVybmEgZnLDpW4gZ3J1bmRlbiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjExCittc2dpZCAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxkaXI+IgorbXNnc3RyICJnaXQgdXBsb2FkLXBhY2sgWzxmbGFnZ29yPl0gPGthdGFsb2c+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICJhdnNsdXRhIG9tZWRlbGJhcnQgZWZ0ZXIgZsO2cnN0YSBhbnJvcC9zdmFyLXV0dsOkeGxpbmciCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyNQorbXNnaWQgImV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCIKK21zZ3N0ciAiYXZzbHV0YSBvbWVkZWxiYXJ0IGVmdGVyIGlubGVkYW5kZSBrdW5nw7ZyZWxzZSBhdiByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgInRlc3RhIGludGUgPGthdGFsb2c+Ly5naXQvIG9tIDxrYXRhbG9nPiBpbnRlIMOkciBlbiBHaXQta2F0YWxvZyIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgImF2YnJ5dCDDtnZlcmbDtnJpbmdlbiBlZnRlciA8bj4gc2VrdW5kZXJzIGluYWt0aXZpdGV0IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxOQorbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGluY2hlY2tuaW5nPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NjgKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgInZpc2EgaW5uZWjDpWxsIGbDtnIgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY5IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM3Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICJ2aXNhIHLDpWEgZ3BnLXN0YXR1c2RhdGEiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFrZXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJwcmF0c2FtIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAidmlzYSBlbmRhc3Qgc3RhdGlzdGlrIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PGZvcm1hdF0gPHRhZ2c+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAidmlzYSBpbm5laMOlbGwgZsO2ciB0YWciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8Y29tbWl0LWlzaD5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8ZmxhZ2dvcj5dIDxzw7ZrdsOkZz4gWzxpbmNoZWNrbmluZy1pZ3Q+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE4Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsaXN0IFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsb2NrIFs8ZmxhZ2dvcj5dIDxzw7ZrdsOkZz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMAorbXNnaWQgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIG1vdmUgPGFyYmV0c2thdGFsb2c+IDxueS1zw7ZrdsOkZz4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8b3B0aW9ucz5dIDx3b3JrdHJlZT4iCittc2dzdHIgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxmbGFnZ29yPl0gPGFyYmV0c2thdGFsb2c+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA8c8O2a3bDpGc+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IFwiJXNcIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogbm90IGEgdmFsaWQgZGlyZWN0b3J5IgorbXNnc3RyICJUYXIgYm9ydCB3b3JrdHJlZXMvJXM6IGludGUgZW4gZ2lsdGlnIGthdGFsb2ciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJUYXIgYm9ydCB3b3JrdHJlZXMvJXM6IGdpdGRpci1maWxlbiBleGlzdGVyYXIgaW50ZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIlRhciBib3J0IHdvcmt0cmVlcy8lczoga2FuIGludGUgbMOkc2EgZ2l0ZGlyLWZpbGVuICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlJlbW92aW5nIHdvcmt0cmVlcy8lczogc2hvcnQgcmVhZCAoZXhwZWN0ZWQgJTxQUkl1TUFYPiBieXRlcywgcmVhZCAiCisiJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKyJUYXIgYm9ydCB3b3JrdHJlZXMvJXM6IGtvcnQgbMOkc25pbmcgKGbDtnJ2w6RudGFkZSAlPFBSSXVNQVg+IGJ5dGUsIGzDpHN0ZSAiCisiJTxQUkl1TUFYPikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJUYXIgYm9ydCB3b3JrdHJlZXMvJXM6IGZlbGFrdGlnIGdpdGRpci1maWwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICJUYXIgYm9ydCB3b3JrdHJlZXMvJXM6IGdpdGRpci1maWxlbiBwZWthciBww6UgZW4gaWNrZWV4aXN0ZXJhbmRlIHBsYXRzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJyYXBwb3J0ZXJhIGJvcnR0YWduYSBhcmJldHNrYXRhbG9nZXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjcKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAibMOldCB0aWQgZ8OlIHV0IGbDtnIgYXJiZXRza2F0YWxvZ2VyIMOkbGRyZSDDpG4gPHRpZD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiXCIlc1wiIGZpbm5zIHJlZGFuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZS1hZGQgd29ya3RyZWUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RnZ2EgaW4gYXJiZXRza2F0YWxvZ2VuIFwiJXNcIiBpZ2VuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyJcIiVzXCIgw6RyIGVuIHNha25hZCBtZW4gbMOlc3QgYXJiZXRza2F0YWxvZztcbiIKKyJhbnbDpG5kIFwiYWRkIC1mIC1mXCIgZsO2ciBhdHQgw7Z2ZXJzdHlyYSwgZWxsZXIgXCJ1bmxvY2tcIiBvY2ggXCJwcnVuZVwiIGVsbGVyICIKKyJcInJlbW92ZVwiIGbDtnIgYXR0IHJlbnNhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgYWxyZWFkeSByZWdpc3RlcmVkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mJyB0byBvdmVycmlkZSwgb3IgJ3BydW5lJyBvciAncmVtb3ZlJyB0byBjbGVhciIKK21zZ3N0ciAiIgorIlwiJXNcIiDDpHIgZW4gc2FrbmFkIG1lbiByZWRhbiByZWdpc3RyZXJhZCBhcmJldHNrYXRhbG9nO1xuIgorImFudsOkbmQgXCJhZGQgLWZcIiBmw7ZyIGF0dCDDtnZlcnN0eXJhLCBlbGxlciBcInBydW5lXCIgZWxsZXIgXCJyZW1vdmVcIiBmw7ZyICIKKyJhdHQgcmVuc2EiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBrYXRhbG9nZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM5IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChuZXcgYnJhbmNoICclcycpIgorbXNnc3RyICJGw7ZyYmVyZWRlciBhcmJldHNrYXRhbG9nIChueSBncmVuIFwiJXNcIikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChyZXNldHRpbmcgYnJhbmNoICclcyc7IHdhcyBhdCAlcykiCittc2dzdHIgIkbDtnJiZXJlZGVyIGFyYmV0c2thdGFsb2cgKMOldGVyc3TDpGxsZXIgZ3JlbiBcIiVzXCI7IHZhciBww6UgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICJGw7ZyYmVyZWRlciBhcmJldHNrYXRhbG9nIChjaGVja2FyIHV0IFwiJXNcIikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAiRsO2cmJlcmVkZXIgYXJiZXRza2F0YWxvZyAoZnLDpW5rb3BwbGF0IEhFQUQgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICIiCisiY2hlY2thIHV0IDxncmVuPiDDpHZlbiBvbSBkZW4gcmVkYW4gw6RyIHV0Y2hlY2thZCBpIGVuIGFubmFuIGFyYmV0c2thdGFsb2ciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDAKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJza2FwYSBlbiBueSBncmVuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAyCittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICJza2FwYSBlbGxlciDDpXRlcnN0w6RsbCBlbiBncmVuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA0Cittc2dpZCAicG9wdWxhdGUgdGhlIG5ldyB3b3JraW5nIHRyZWUiCittc2dzdHIgImJlZm9sa2EgZGVuIG55YSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDUKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAibMOldCBhcmJldHNrYXRhbG9nZW4gZsO2cmJsaSBsw6VzdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwOAorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiCittc2dzdHIgInN0w6RsbCBpbiBzcMOlcm5pbmdzbMOkZ2UgKHNlIGdpdC1icmFuY2goMSkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTExCittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImbDtnJzw7ZrIG1hdGNoYSBuYW1uIHDDpSBueSBncmVuIG1vdCBlbiBmasOkcnJzcMOlcmFuZGUgZ3JlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUxOQorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBvY2ggLS1kZXRhY2ggw6RyIMO2bXNlc2lkaWd0IHV0ZXNsdXRhbmRlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgwCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIi0tW25vLV10cmFjayBrYW4gZW5kYXN0IGFudsOkbmRhcyBuw6RyIG55IGdyYW4gc2thcGFzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjgwCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICJvcnNhayB0aWxsIGzDpXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIgYnVpbHRpbi93b3JrdHJlZS5jOjcyNSBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZW4gYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5NCBidWlsdGluL3dvcmt0cmVlLmM6NzI3Cittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIkh1dnVkYXJiZXRza2F0YWxvZ2VuIGthbiBpbnRlIGzDpXNhcyBlbGxlciBsw6VzYXMgdXBwIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQsIHJlYXNvbjogJXMiCittc2dzdHIgIlwiJXNcIiDDpHIgcmVkYW4gbMOlc3QsIG9yc2FrOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkIgorbXNnc3RyICJcIiVzXCIgw6RyIHJlZGFuIGzDpXN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGzDpXN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzcwCittc2dpZCAid29ya2luZyB0cmVlcyBjb250YWluaW5nIHN1Ym1vZHVsZXMgY2Fubm90IGJlIG1vdmVkIG9yIHJlbW92ZWQiCittc2dzdHIgImFyYmV0c2thdGFsb2dlciBtZWQgdW5kZXJtb2R1bGVyIGthbiBpbnRlIGZseXR0YXMgZWxsZXIgdGFzIGJvcnQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzgKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICJ0dmluZ2EgZmx5dHRuaW5nIMOkdmVuIG9tIGFyYmV0c2thdGFsb2dlbiDDpHIgc211dHNpZyBlbGxlciBsw6VzdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwMSBidWlsdGluL3dvcmt0cmVlLmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYSBtYWluIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGVuIGh1dnVkYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsaXN0YSB1dCBtw6VsbmFtbiBmcsOlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFyZ2V0ICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIm3DpWxldCBcIiVzXCIgZmlubnMgcmVkYW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJrYW4gaW50ZSBmbHl0dGEgZW4gbMOlc3QgYXJiZXRza2F0YWxvZywgb3JzYWsgdGlsbCBsw6VzOiAlc1xuIgorImFudsOkbmQgXCJtb3ZlIC1mIC1mXCIgZsO2ciBhdHQgw7Z2ZXJzdHlyYSwgZWxsZXIgbMOlcyB1cHAgZsO2cnN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIyCittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImthbiBpbnRlIGZseXR0YSBlbiBsw6VzdCBhcmJldHNrYXRhbG9nO1xuIgorImFudsOkbmQgXCJtb3ZlIC1mIC1mXCIgZsO2ciBhdHQgw7Z2ZXJzdHlyYSwgZWxsZXIgbMOlcyB1cHAgZsO2cnN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJrb250cm9sbCBtaXNzbHlja2FkZXMsIGthbiBpbnRlIGZseXR0YSBhcmJldHNrYXRhbG9nOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBmbHl0dGEgXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBrw7ZyYSBcImdpdCBzdGF0dXNcIiBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKyJcIiVzXCIgaW5uZWjDpWxsZXIgw6RuZHJhZGUgZWxsZXIgb3Nww6VyYWRlIGZpbGVyLCBhbnbDpG5kIC0tZm9yY2UgZsO2ciBhdHQgdGEgIgorImJvcnQgZGV0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcycsIGNvZGUgJWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyBrw7ZyYSBcImdpdCBzdGF0dXNcIiBww6UgXCIlc1wiLCBrb2QgJWQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MTAKK21zZ2lkICJmb3JjZSByZW1vdmFsIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICJ0dmluZ2EgdGEgYm9ydCDDpHZlbiBvbSBhcmJldHNrYXRhbG9nZW4gw6RyIHNtdXRzaWcgZWxsZXIgbMOlc3QiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ3JlbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisia2FuIGludGUgdGEgYm9ydCBlbiBsw6VzdCBhcmJldHNrYXRhbG9nLCBvcnNhayB0aWxsIGzDpXNldDogJXNcbiIKKyJhbnbDpG5kIFwicmVtb3ZlIC1mIC1mXCIgZsO2ciBhdHQgw7Z2ZXJzdHlyYSwgZWxsZXIgbMOlcyB1cHAgZsO2cnN0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM1Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJrYW4gaW50ZSB0YSBib3J0IGVuIGzDpXN0IGFyYmV0c2thdGFsb2c7XG4iCisiYW52w6RuZCBcInJlbW92ZSAtZiAtZlwiIGbDtnIgYXR0IMO2dmVyc3R5cmEsIGVsbGVyIGzDpXMgdXBwIGbDtnJzdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJrb250cm9sbCBtaXNzbHlja2FkZXMsIGthbiBpbnRlIHRhIGJvcnQgYXJiZXRza2F0YWxvZzogJXMiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPHByZWZpeD4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAidmlzYSB0csOkZG9iamVrdCBmw7ZyIHVuZGVya2F0YWxvZ2VuIDxwcmVmaXg+IgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgImVuZGFzdCBhbnbDpG5kYmFydCB2aWQgZmVsc8O2a25pbmciCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAnbWFyaycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJGw7ZydsOkbnRhZGUgXCJtYXJrXCIta29tbWFuZG8sIGZpY2sgJXMiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAndG8nIGNvbW1hbmQsIGdvdCAlcyIKK21zZ3N0ciAiRsO2cnbDpG50YWRlIFwidG9cIi1rb21tYW5kbywgZmljayAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIKK21zZ3N0ciAiZnVua3Rpb25lbiBcIiVzXCIgZsO2cmJqdWRlbiBpIGluZGF0YSB1dGFuIC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKK21zZ3N0ciAiIgorIkJlaMO2cmlnaGV0ZW4gcMOlIGRpbiB1dHRhZ3Mta2F0YWxvZyAoc29ja2V0KSDDpHIgZsO2ciBsw7ZzOyBhbmRyYVxuIgorImFudsOkbmRhcmUga2FuIGzDpHNhIGRpbmEgY2FjaGFkZSBpbmxvZ2duaW5nc3VwcGdpZnRlci4gRHUgYsO2ciBrw7ZyYTpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI3MgorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgInNrcml2IGZlbHPDtmtuaW5nc21lZGRlbGFuZGVuIHDDpSBzdGFuZGFyZCBmZWwiCisKKyM6IHQvaGVscGVyL3Rlc3QtcmVhY2guYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIG5vdCBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICJpbmNoZWNrbmluZyAlcyDDpHIgaW50ZSBtw6Rya3QgbsOlYmFyIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTYyCittc2dpZCAidG9vIG1hbnkgY29tbWl0cyBtYXJrZWQgcmVhY2hhYmxlIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBpbmNoZWNrbmluZ2FyIG1hcmtlcmFkZSBuw6ViYXJhIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6NworbXNnaWQgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAidGVzdC10b29sIHNlcnZlLXYyIFs8ZmxhZ2dvcj5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiYXZzbHV0YSBvbWVkZWxiYXJ0IGVmdGVyIGt1bmfDtnJlbHNlIGF2IGthcGFiaWxpdGV0ZXIiCisKKyM6IGdpdC5jOjI3Cittc2dpZCAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHBhdGg+XSBbLWMgPG5hbWU+PTx2YWx1ZT5dXG4iCisiICAgICAgICAgICBbLS1leGVjLXBhdGhbPTxwYXRoPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tcGF0aF1cbiIKKyIgICAgICAgICAgIFstcCB8IC0tcGFnaW5hdGUgfCAtUCB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tIgorImJhcmVdXG4iCisiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKyIgICAgICAgICAgIDxjb21tYW5kPiBbPGFyZ3M+XSIKK21zZ3N0ciAiIgorImdpdCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBbLUMgPHPDtmt2w6RnPl0gWy1jIDxuYW1uPj08dsOkcmRlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHPDtmt2w6RnPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tIgorInBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgfCAtLW5vLXBhZ2VyXSBbLS1uby1yZXBsYWNlLW9iamVjdHNdIFstLSIKKyJiYXJlXVxuIgorIiAgICAgICAgICAgWy0tZ2l0LWRpcj08c8O2a3bDpGc+XSBbLS13b3JrLXRyZWU9PHPDtmt2w6RnPl0gWy0tbmFtZXNwYWNlPTxuYW1uPl1cbiIKKyIgICAgICAgICAgIDxrb21tYW5kbz4gWzxmbGFnZ29yPl0iCisKKyM6IGdpdC5jOjM0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC5cbiIKKyJTZWUgJ2dpdCBoZWxwIGdpdCcgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBzeXN0ZW0uIgorbXNnc3RyICIiCisiXCJnaXQgaGVscCAtYVwiIG9jaCBcImdpdCBoZWxwIC1nXCIgdmlzYXIgdGlsbGfDpG5nbGlnYSB1bmRlcmtvbW1hbmRvbiBvY2hcbiIKKyJuw6VncmEga29uY2VwdHbDpGdsZWRuaW5nYXIuIFNlIFwiZ2l0IGhlbHAgPGtvbW1hbmRvPlwiIGVsbGVyIFwiZ2l0IGhlbHBcbiIKKyI8a29uY2VwdD5cIiBmw7ZyIGF0dCBsw6RzYSBtZXIgb20gc3BlY2lmaWthIHVuZGVya29tbWFuZG9uIG9jaCBrb25jZXB0LlxuIgorIlNlZSBcImdpdCBoZWxwIGdpdFwiIGbDtnIgZW4gw7Z2ZXJzaWt0IMO2dmVyIHN5c3RlbWV0LiIKKworIzogZ2l0LmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS1naXQtZGlyXG4iCittc2dzdHIgImluZ2VuIGthdGFsb2cgYW5nYXZzIGbDtnIgLS1naXQtZGlyXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgImluZ2VuIG5hbW5yeW1kIGFuZ2F2cyBmw7ZyIC0tbmFtZXNwYWNlXG4iCisKKyM6IGdpdC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlXG4iCittc2dzdHIgImluZ2VuIGthdGFsb2cgYW5nYXZzIGbDtnIgLS13b3JrLXRyZWVcbiIKKworIzogZ2l0LmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByZWZpeCBnaXZlbiBmb3IgLS1zdXBlci1wcmVmaXhcbiIKK21zZ3N0ciAiaW5nZXQgcHJlZml4IGFuZ2F2cyBmw7ZyIC0tc3VwZXItcHJlZml4XG4iCisKKyM6IGdpdC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICItYyBleHBlY3RzIGEgY29uZmlndXJhdGlvbiBzdHJpbmdcbiIKK21zZ3N0ciAiLWMgZsO2cnbDpG50YXIgZW4ga29uZmlndXJhdGlvbnNzdHLDpG5nXG4iCisKKyM6IGdpdC5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgImluZ2VuIGthdGFsb2cgYW5nYXZzIGbDtnIgLUNcbiIKKworIzogZ2l0LmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAlc1xuIgorbXNnc3RyICJva8OkbmQgZmxhZ2dhOiAlc1xuIgorCisjOiBnaXQuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZXhwYW5kaW5nIGFsaWFzICclcyc6ICclcyciCittc2dzdHIgInZpZCBleHBhbmRlcmluZyBhdiBhbGlhc2V0IFwiJXNcIjogXCIlc1wiIgorCisjOiBnaXQuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFsaWFzICclcycgY2hhbmdlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4iCisiWW91IGNhbiB1c2UgJyFnaXQnIGluIHRoZSBhbGlhcyB0byBkbyB0aGlzIgorbXNnc3RyICIiCisiYWxpYXNldCBcIiVzXCIgw6RuZHJhciBtaWxqw7Z2YXJpYWJsZXIuXG4iCisiRHUga2FuIGFudsOkbmRhIFwiIWdpdFwiIGkgYWxpYXNldCBmw7ZyIGF0dCBnw7ZyYSBkZXQiCisKKyM6IGdpdC5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBhbGlhcyBmb3IgJXMiCittc2dzdHIgInRvbXQgYWxpYXMgZsO2ciAlcyIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgInJla3Vyc2l2dCBhbGlhczogJXMiCisKKyM6IGdpdC5jOjQ1OQorbXNnaWQgIndyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJza3JpdmZlbCBww6Ugc3RhbmRhcmQgdXQiCisKKyM6IGdpdC5jOjQ2MQorbXNnaWQgInVua25vd24gd3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIm9rw6RudCBza3JpdmZlbCBww6Ugc3RhbmRhcmQgdXQiCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgInN0w6RuZyBtaXNzbHlja2FkZXMgcMOlIHN0YW5kYXJkIHV0IgorCisjOiBnaXQuYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWxpYXMgbG9vcCBkZXRlY3RlZDogZXhwYW5zaW9uIG9mICclcycgZG9lcyBub3QgdGVybWluYXRlOiVzIgorbXNnc3RyICJhbGlhcy1zbGluZ2EgZGV0ZWt0ZXJhZGVzOiBleHBhbnNpb25lbiBhdiBcIiVzXCIgYXZzbHV0YXMgYWxkcmlnOiVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgImthbiBpbnRlIGhhbnRlcmEgJXMgc29tIGluYnlnZ2QiCisKKyM6IGdpdC5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidXNhZ2U6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJhbnbDpG5kbmluZzogJXNcbiIKKyJcbiIKKworIzogZ2l0LmM6ODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGFuc2lvbiBvZiBhbGlhcyAnJXMnIGZhaWxlZDsgJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZFxuIgorbXNnc3RyICIiCisiZXhwYW5kZXJpbmcgYXYgYWxpYXMgXCIlc1wiIG1pc3NseWNrYWRlczsgXCIlc1wiIMOkciBpbnRlIGV0dCBnaXQta29tbWFuZG9cbiIKKworIzogZ2l0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gY29tbWFuZCAnJXMnOiAlc1xuIgorbXNnc3RyICJtaXNzbHlja2FkZXMga8O2cmEga29tbWFuZG90IFwiJXNcIjogJXNcbiIKKworIzogaHR0cC5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZSBmb3IgaHR0cC5wb3N0YnVmZmVyOyBkZWZhdWx0aW5nIHRvICVkIgorbXNnc3RyICJodHRwLnBvc3RidWZmZXIgaGFyIG5lZ2F0aXZ0IHbDpHJkZTsgYW52w6RuZGVyIGbDtnJ2YWxldCAlZCIKKworIzogaHR0cC5jOjM5OQorbXNnaWQgIkRlbGVnYXRpb24gY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMjIuMCIKK21zZ3N0ciAiRGVsZWdlcmFkIHN0eXJuaW5nIHN0w7ZkcyBpbnRlIGF2IGNVUkwgPCA3LjIyLjAiCisKKyM6IGh0dHAuYzo0MDgKK21zZ2lkICJQdWJsaWMga2V5IHBpbm5pbmcgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjQ0LjAiCittc2dzdHIgIkZhc3Ruw6VsbmluZyBhdiDDtnBwZW4gbnlja2VsIHN0w7ZkcyBpbnRlIGF2IGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiQ1VSTFNTTE9QVF9OT19SRVZPS0Ugc3TDtmRzIGludGUgYXYgY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjk0OQorbXNnaWQgIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIKK21zZ3N0ciAiUHJ0b2tvbGxiZWdyw6Ruc25pbmdhciBzdMO2ZHMgaW50ZSBhdiBjVVJMIDwgNy4xOS40IgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiU1NMLWJha8OkbmRhbiBcIiVzXCIgc3TDtmRzIGludGUuIERlc3NhIFNTTC1iYWvDpG5kb3Igc3TDtmRzOiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiS2FuIGludGUgc8OkdHRhIFNTTC1iYWvDpG5kYSB0aWxsIFwiJXNcIjogY1VSTCBieWdnZGVzIHV0YW4gU1NMLWJha8OkbmRvciIKKworIzogaHR0cC5jOjEwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBhbHJlYWR5IHNldCIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzw6R0dGEgU1NMLWJha8OkbmRhIHRpbGwgXCIlc1wiOiByZWRhbiB2YWx0IgorCisjOiBodHRwLmM6MTk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAiIgorImthbiBpbnRlIHVwcGRhdGVyYSB1cmxiYXMgZnLDpW4gb21kaXJpZ2VyaW46XG4iCisiICAgICAgICBiYWQgb206ICVzXG4iCisiICBvbWRpcmlnZXJpbmc6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHF1b3RpbmcgaW4gcHVzaC1vcHRpb24gdmFsdWU6ICclcyciCittc2dzdHIgImZlbGFrdGlnIGNpdGVyaW5nIHDDpSB2w6RyZGUgZsO2ciBwdXNoLW9wdGlvbjogXCIlc1wiIgorCisjOiByZW1vdGUtY3VybC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iCittc2dzdHIgIiVzaW5mby9yZWZzIGludGUgZ2lsdGlnOiDDpHIgZGV0dGEgZXR0IGdpdC1hcmtpdj8iCisKKyM6IHJlbW90ZS1jdXJsLmM6MzY0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGV4cGVjdGVkIHNlcnZpY2UsIGdvdCBmbHVzaCBwYWNrZXQiCittc2dzdHIgIm9naWx0aWd0IHN2YXIgZnLDpW4gc2VydmVybjsgZsO2cnbDpG50YWRlIHRqw6Ruc3QsIGZpY2sgZmx1c2gtcGFrZXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VydmVyIHJlc3BvbnNlOyBnb3QgJyVzJyIKK21zZ3N0ciAib2dpbHRpZ3Qgc3ZhciBmcsOlbiBzZXJ2ZXJuOyBmaWNrIFwiJXNcIiIKKworIzogcmVtb3RlLWN1cmwuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAiYXJraXZldCBcIiVzXCIgaGl0dGFkZXMgaW50ZSIKKworIzogcmVtb3RlLWN1cmwuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0aGVudGljYXRpb24gZmFpbGVkIGZvciAnJXMnIgorbXNnc3RyICJBdXRlbnRpc2VyaW5nIG1pc3NseWNrYWRlcyBcIiVzXCIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgImthbiBpbnRlIGtvbW1hIMOldCBcIiVzXCI6ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAib21kaXJpZ2VyYXIgdGlsbCAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo1OTMKK21zZ2lkICJzaG91bGRuJ3QgaGF2ZSBFT0Ygd2hlbiBub3QgZ2VudGxlIG9uIEVPRiIKK21zZ3N0ciAiYm9yZGUgaW50ZSBoYSBFT0YgbsOkciBpbnRlIGbDtnJzaWt0aWcgcMOlIEVPRiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgImt1bmRlIGludGUgc3BvbGEgdGlsbGJha2EgcnBjLXBvc3RkYXRhIC0gZsO2cnPDtmsgw7ZrYSBodHRwLnBvc3RCdWZmZXIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICJSUEMgbWlzc2x5Y2thZGVzOyAlcyIKKworIzogcmVtb3RlLWN1cmwuYzo3NzMKK21zZ2lkICJjYW5ub3QgaGFuZGxlIHB1c2hlcyB0aGlzIGJpZyIKK21zZ3N0ciAia2FuIGludGUgaGFudGVyYSBzw6Ugc3RvcmEgc8OkbmRuaW5nYXIiCisKKyM6IHJlbW90ZS1jdXJsLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBkZWZsYXRlIHJlcXVlc3Q7IHpsaWIgZGVmbGF0ZSBlcnJvciAlZCIKK21zZ3N0ciAia2FuIGludGUgcGFja2EgdXBwIGFucm9wOyB6bGliLWRlZmxhdGUtZmVsICVkIgorCisjOiByZW1vdGUtY3VybC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAia2FuIGludGUgcGFja2EgdXBwIGFucm9wOyB6bGliLXNsdXRmZWwgJWQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAyMworbXNnaWQgImR1bWIgaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNhcGFiaWxpdGllcyIKK21zZ3N0ciAiZHVtIGh0dHAtdHJhbnNwb3J0IHN0w7ZkZXIgaW50ZSBncnVuZGEgYXJraXYiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAzNworbXNnaWQgImZldGNoIGZhaWxlZC4iCittc2dzdHIgIm1vdHRhZ25pbmcgbWlzc2x5Y2thZGVzLiIKKworIzogcmVtb3RlLWN1cmwuYzoxMDg1Cittc2dpZCAiY2Fubm90IGZldGNoIGJ5IHNoYTEgb3ZlciBzbWFydCBodHRwIgorbXNnc3RyICJrYW4gaW50ZSBow6RtdGEgbWVkIHNoYTEgw7Z2ZXIgc21hcnQgaHR0cCIKKworIzogcmVtb3RlLWN1cmwuYzoxMTI5IHJlbW90ZS1jdXJsLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhL3JlZiwgZ290ICclcyciCittc2dzdHIgInByb3Rva29sbGZlbDogZsO2cnbDpG50YWRlIHNoYS9yZWYsIGZpY2sgXCIlc1wiIgorCisjOiByZW1vdGUtY3VybC5jOjExNDcgcmVtb3RlLWN1cmwuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImh0dHAtdHJhbnNwb3J0ZW4gc3TDtmRlciBpbnRlICVzIgorCisjOiByZW1vdGUtY3VybC5jOjExODMKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiZ2l0LWh0dHAtcHVzaCBtaXNzbHlja2FkZXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2NworbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgInJlbW90ZS1jdXJsOiBhbnbDpG5kbmluZzogZ2l0IHJlbW90ZS1jdXJsIDxmasOkcnI+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybDogZmVsIHZpZCBsw6RzbmluZyBhdiBrb21tYW5kb3N0csO2bSBmcsOlbiBnaXQiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQwNgorbXNnaWQgInJlbW90ZS1jdXJsOiBmZXRjaCBhdHRlbXB0ZWQgd2l0aG91dCBhIGxvY2FsIHJlcG8iCittc2dzdHIgInJlbW90ZS1jdXJsOiBmw7Zyc8O2a3RlIHRhIGVtb3QgdXRhbiBsb2thbHQgYXJraXYiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtY3VybDogdW5rbm93biBjb21tYW5kICclcycgZnJvbSBnaXQiCittc2dzdHIgInJlbW90ZS1jdXJsOiBva8OkbnQga29tbWFuZG8gXCIlc1wiIGZyw6VuIGdpdCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODUKK21zZ2lkICJhcmdzIgorbXNnc3RyICJhcmd1bWVudCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICJvYmpla3RmaWx0cmVyaW5nIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTgzCittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgImdpbHRpZy10aWxsIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICJpbmdlbiBmdW5rdGlvbiAoYmFrw6V0a29tcGF0aWJpbGl0ZXQpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzA5Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJ2YXIgbWVyIHByYXRzYW0iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTEKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICJ2YXIgbWVyIHR5c3QiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTcKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAiYW52w6RuZCA8bj4gc2lmZnJvciBmw7ZyIGF0dCB2aXNhIFNIQS0xOm9yIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAiaHVyIGJsYW5rc3RlZyBvY2ggI2tvbW1lbnRhcmVyIHNrYWxsIHRhcyBib3J0IGZyw6VuIG1lZGRlbGFuZGUiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzcKK21zZ2lkICJyZWFkIHBhdGhzcGVjIGZyb20gZmlsZSIKK21zZ3N0ciAibMOkcyBzw7ZrdsOkZ3NhbmdpdmVsc2UgZnLDpW4gZmlsIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJtZWQgLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHPDtmt2w6Rnc2FuZ2l2ZWxzZXIgYXZkZWxhcyBtZWQgTlVMLXRlY2tlbiIKKworIzogcmVmLWZpbHRlci5oOjEwMQorbXNnaWQgImtleSIKK21zZ3N0ciAibnlja2VsIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICJmw6RsdG5hbW4gYXR0IHNvcnRlcmEgcMOlIgorCisjOiByZXJlcmUuaDo0NAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAidXBwZGF0ZXJhIGluZGV4ZXQgbWVkIMOldGVyYW52w6RuZCBrb25mbGlrdGzDtnNuaW5nIG9tIG3DtmpsaWd0IgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGZyw6Vua29wcGxhZCB2aWQgIgorCisjOiB3dC1zdGF0dXMuaDo2OAorbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIkhFQUQgZnLDpW5rb3BwbGFkIGZyw6VuICIKKworIzogY29tbWFuZC1saXN0Lmg6NTAKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpGdnIGZpbGlubmVow6VsbCB0aWxsIGluZGV4ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAiVGlsbMOkbXBhIGVuIHNlcmllIHBhdGNoYXIgZnLDpW4gZW4gYnJldmzDpWRhIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIktvbW1lbnRlcmEgZmlscmFkZXIgbWVkIGluY2hlY2tuaW5nc2luZm9ybWF0aW9uIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiVGlsbMOkbXBhIGVuIHBhdGNoIHDDpSBmaWxlciBvY2gvZWxsZXIgaW5kZXhldCIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJJbXBvcnRlcmEgZXR0IEdOVSBBcmNoLWFya2l2IHRpbGwgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo1NQorbXNnaWQgIkNyZWF0ZSBhbiBhcmNoaXZlIG9mIGZpbGVzIGZyb20gYSBuYW1lZCB0cmVlIgorbXNnc3RyICJTa2FwYSBldHQgYXJraXYgw7Z2ZXIgZmlsZXIgZnLDpW4gZXR0IG5hbW5naXZldCB0csOkZCIKKworIzogY29tbWFuZC1saXN0Lmg6NTYKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJBbnbDpG5kIGJpbsOkcnPDtmtuaW5nIGbDtnIgYXR0IGhpdHRhIMOkbmRyaW5nZW4gc29tIGludHJvZHVjZXJhZGUgZXR0IGZlbCIKKworIzogY29tbWFuZC1saXN0Lmg6NTcKK21zZ2lkICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiCittc2dzdHIgIlZpc2EgdmVyc2lvbiBvY2ggZsO2cmZhdHRhcmUgc29tIHNpc3QgbW9kaWZpZXJhZGUgdmFyamUgcmFkIGkgZW4gZmlsIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJWaXNhLCBza2FwYSBlbGxlciB0YSBib3J0IGdyZW5hciIKKworIzogY29tbWFuZC1saXN0Lmg6NTkKK21zZ2lkICJNb3ZlIG9iamVjdHMgYW5kIHJlZnMgYnkgYXJjaGl2ZSIKK21zZ3N0ciAiRmx5dHRhIG9iamVrdCBvY2ggcmVmZXJlbnNlciBlZnRlciBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICIiCisiVmlzYSBpbm5laMOlbGxlciBlbGxlciB0eXAtIG9jaCBzdG9ybGVrc2luZm9ybWF0aW9uIGbDtnIgb2JqZWt0IGkgYXJraXZldCIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgIlZpc2EgaW5mb3JtYXRpb24gZnLDpW4gZ2l0YXR0cmlidXRlcyIKKworIzogY29tbWFuZC1saXN0Lmg6NjIKK21zZ2lkICJEZWJ1ZyBnaXRpZ25vcmUgLyBleGNsdWRlIGZpbGVzIgorbXNnc3RyICJGZWxzw7ZrIGdpdGlnbm9yZSAvIGV4a2x1ZGVyaW5ncy1maWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6NjMKK21zZ2lkICJTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzIgorbXNnc3RyICJWaXNhIGthbm9uaXNrYSBuYW1uIG9jaCBlLXBvc3RhZHJlc3NlciBmw7ZyIGtvbnRha3RlciIKKworIzogY29tbWFuZC1saXN0Lmg6NjQKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIkJ5dCB0aWxsIGVuIG55IGdyZW4gZWxsZXIgw6V0ZXJzdMOkbGwgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY1Cittc2dpZCAiQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJLb3BpZXJhIGZpbGVyIGZyw6VuIGluZGV4ZXQgdGlsbCBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY2Cittc2dpZCAiRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQiCittc2dzdHIgIlNlIHRpbGwgYXR0IHJlZmVyZW5zZW4gw6RyIHbDpGxmb3JtYWQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY3Cittc2dpZCAiRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtIgorbXNnc3RyICJIaXR0YSBpbmNoZWNrbmluZ2FyIHNvbSDDpG5udSBpbnRlIGFwcGxpY2VyYXRzIHVwcHN0csO2bXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkFwcGxpY2VyYSDDpG5kcmluZ2FybmEgaW50cm9kdWNlcmFkZSBhdiBiZWZpbnRsaWdhIGluY2hlY2tuaW5nYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY5Cittc2dpZCAiR3JhcGhpY2FsIGFsdGVybmF0aXZlIHRvIGdpdC1jb21taXQiCittc2dzdHIgIkdyYWZpc2t0IGFsdGVybmF0aXYgdGlsbCBnaXQtY29tbWl0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3MAorbXNnaWQgIlJlbW92ZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJUYSBib3J0IG9zcMOlcmFkZSBmaWxlciBmcsOlbiBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjcxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJLbG9uYSBldHQgYXJraXYgdGlsbCBlbiBueSBrYXRhbG9nIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MgorbXNnaWQgIkRpc3BsYXkgZGF0YSBpbiBjb2x1bW5zIgorbXNnc3RyICJWaXNhIGRhdGEgaSBrb2x1bW5lciIKKworIzogY29tbWFuZC1saXN0Lmg6NzMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUHJvdG9rb2xsZsO2ciDDpG5kcmluZ2FyIGkgYXJraXZldCIKKworIzogY29tbWFuZC1saXN0Lmg6NzQKK21zZ2lkICJXcml0ZSBhbmQgdmVyaWZ5IEdpdCBjb21taXQtZ3JhcGggZmlsZXMiCittc2dzdHIgIlNrcml2IG9jaCB2ZXJpZmllcmEgR2l0LWluY2hlY2tuaW5nc2dyYWZmaWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiU2thcGEgZXR0IG55dHQgaW5jaGVja25pbmdzb2JqZWt0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NgorbXNnaWQgIkdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMiCittc2dzdHIgIkzDpHMgb2NoIHNrcml2IGFsdGVybmF0aXYgZsO2ciBhcmtpdiBlbGxlciBnbG9iYWx0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3NworbXNnaWQgIkNvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uIgorbXNnc3RyICJSw6RrbmEgYW50YWwgb3BhY2thZGUgb2JqZWt0IG9jaCBtw6RuZ2QgZGlza3V0cnltbWUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc4Cittc2dpZCAiUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMiCittc2dzdHIgIkjDpG10YSBvY2ggc3BhcmEgYW52w6RuZGFycmVmZXJlbnNlciIKKworIzogY29tbWFuZC1saXN0Lmg6NzkKK21zZ2lkICJIZWxwZXIgdG8gdGVtcG9yYXJpbHkgc3RvcmUgcGFzc3dvcmRzIGluIG1lbW9yeSIKK21zZ3N0ciAiSGrDpGxwcHJvZ3JhbSBmw7ZyIGF0dCB0aWxsZsOkbGxpZ3QgbGFncmEgbMO2c2Vub3JkIGkgbWlubmV0IgorCisjOiBjb21tYW5kLWxpc3QuaDo4MAorbXNnaWQgIkhlbHBlciB0byBzdG9yZSBjcmVkZW50aWFscyBvbiBkaXNrIgorbXNnc3RyICJIasOkbHBwcm9ncmFtIGbDtnIgYXR0IGxhZ3JhIGFudsOkbmRhcnJlZmVyZW5zZXIgcMOlIGRpc2siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgxCittc2dpZCAiRXhwb3J0IGEgc2luZ2xlIGNvbW1pdCB0byBhIENWUyBjaGVja291dCIKK21zZ3N0ciAiRXhwb3J0ZXJhIGVuIGVua2VsIGluY2hlY2tuaW5nIGkgZW4gQ1ZTLXV0Y2hlY2tuaW5nIgorCisjOiBjb21tYW5kLWxpc3QuaDo4MgorbXNnaWQgIlNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlIgorbXNnc3RyICJSw6RkZGEgZGluYSBkYXRhIHV0IHVyIGFuZHJhIFNDTSBmb2xrIMOkbHNrYXIgYXR0IGhhdGEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgzCittc2dpZCAiQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQiCittc2dzdHIgIkVuIENWUy1zZXJ2ZXJlbXVsYXRvciBmw7ZyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJFbiByaWt0aWd0IGVua2VsIHNlcnZlciBmw7ZyIEdpdC1hcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiR2UgZXR0IG9iamVrdCBhbnbDpG5kYXJsw6RzYmFyYSBuYW1uIGJhc2VyYWRlIHDDpSBlbiB0aWxsZ8OkbmdsaWcgcmVmZXJlbnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg2Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiVmlzYSDDpG5kcmluZ2FyIG1lbGxhbiBpbmNoZWNrbmluZ2FyLCBtZWQgYXJiZXRza2F0YWxvZ2VuLCBvc3YiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg3Cittc2dpZCAiQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IgorbXNnc3RyICJKw6RtZsO2ciBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiBvY2ggaW5kZXhldCIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJKw6RtZsO2ciBlbiB0csOkZCBtZWQgYXJiZXRza2F0YWxvZ2VuIGVsbGVyIGluZGV4ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjg5Cittc2dpZCAiQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgYmxvYnMgZm91bmQgdmlhIHR3byB0cmVlIG9iamVjdHMiCittc2dzdHIgIlZpc2FyIGlubmVow6VsbCBvY2ggbMOkZ2UgZsO2ciBibG9iYmFyIHNvbSBoaXR0YXRzIHZpYSB0dsOlIHRyw6Rkb2JqZWt0IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiVmlzYSDDpG5kcmluZ2FyIG1lZCB2YW5saWdhIGRpZmYtdmVya3R5ZyIKKworIzogY29tbWFuZC1saXN0Lmg6OTEKK21zZ2lkICJHaXQgZGF0YSBleHBvcnRlciIKK21zZ3N0ciAiRXhwb3J0ZXJhcmUgZsO2ciBHaXQtZGF0YSIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAiQmFrw6RuZGEgZsO2ciBzbmFiYmEgR2l0LWRhdGFpbXBvcnRlcmFyZSIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJIw6RtdGEgb2JqZWt0IG9jaCByZWZlcmVuc2VyIGZyw6VuIGFubmF0IGFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJUYSBlbW90IHNha25hZGUgb2JqZWt0IGZyw6VuIGFubmF0IGFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDo5NQorbXNnaWQgIlJld3JpdGUgYnJhbmNoZXMiCittc2dzdHIgIlNrcml2IG9tIGdyZW5hciIKKworIzogY29tbWFuZC1saXN0Lmg6OTYKK21zZ2lkICJQcm9kdWNlIGEgbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIlNrYXBhIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBlbiBzYW1tYW5zbGFnbmluZyIKKworIzogY29tbWFuZC1saXN0Lmg6OTcKK21zZ2lkICJPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYiCittc2dzdHIgIlZpc2EgaW5mb3JtYXRpb24gZsO2ciB2YXJqZSByZWZlcmVucyIKKworIzogY29tbWFuZC1saXN0Lmg6OTgKK21zZ2lkICJQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uIgorbXNnc3RyICJGw7ZyYmVyZWQgcGF0Y2hhciBmw7ZyIGluc8OkbmRuaW5nIHZpYSBlLXBvc3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk5Cittc2dpZCAiVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlIgorbXNnc3RyICJCZWtyw6RmdGFyIGtvbm5la3Rpdml0ZXQgb2NoIHZhbGlkaXRldCBmw7ZyIG9iamVrdGV0IGkgZGF0YWJhc2VuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDAKK21zZ2lkICJDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiU3TDpGRhIG9uw7ZkaWdhIGZpbGVyIG9jaCBvcHRpbWVyYSBkZXQgbG9rYWxhIGFya2l2ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMQorbXNnaWQgIkV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC1hcmNoaXZlIgorbXNnc3RyICJIw6RtdGEgaW5jaGVja25pbmdzLWlkIGZyw6VuIGV0dCBhcmtpdiBza2FwYXQgbWVkIGdpdC1hcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIlZpc2EgcmFkZXIgc29tIG1vdHN2YXJhciBtw7Zuc3RlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTAzCittc2dpZCAiQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdCIKK21zZ3N0ciAiRXR0IHBvcnRhYmVsdCBncmFmaXNrdCBncsOkbnNzbml0dCBmw7ZyIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA0Cittc2dpZCAiQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUiCittc2dzdHIgIkJlcsOka25hIG9iamVrdC1pZCBvY2ggbcO2amxpZ2VuIHNrYXBhIGVuIGJsb2IgZnLDpW4gZW4gZmlsIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDUKK21zZ2lkICJEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgR2l0IgorbXNnc3RyICJWaXNhIGhqw6RscGluZm9ybWF0aW9uIG9tIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA2Cittc2dpZCAiU2VydmVyIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgR2l0IG92ZXIgSFRUUCIKK21zZ3N0ciAiU2VydmVyc2lkZWltcGxlbWVudGF0aW9uIGF2IEdpdCDDtnZlciBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDcKK21zZ2lkICJEb3dubG9hZCBmcm9tIGEgcmVtb3RlIEdpdCByZXBvc2l0b3J5IHZpYSBIVFRQIgorbXNnc3RyICJIw6RtdGEgb2JqZWt0IG9jaCByZWZlcmVuc2VyIGZyw6VuIGFubmF0IEdpdC1hcmtpdiDDtnZlciBIVFRQIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDgKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIlPDpG5kIG9iamVrdCDDtnZlciBIVFRQL0RBViB0aWxsIGV0dCBhbm5hdCBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICJTw6RuZCBlbiBzYW1saW5nIHBhdGNoYXIgZnLDpW4gc3RkaW4gdGlsbCBlbiBJTUFQLW1hcHAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIlNLYXBhIHBhY2staW5kZXhmaWxlciBmw7ZyIGV0dCBiZWZpbnRsaWd0IHBhY2thdCBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIlNrYXBhIHRvbXQgR2l0LWFya2l2IGVsbGVyIG9taW5pdGllcmEgZXR0IGJlZmludGxpZ3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMgorbXNnaWQgIkluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViIgorbXNnc3RyICJPbWVkZWxiYXJ0IGJsw6RkZHJhIGkgZGluIGFyYmV0c2thdGFsb2cgbWVkIGdpdHdlYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTEzCittc2dpZCAiQWRkIG9yIHBhcnNlIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gaW4gY29tbWl0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisiTMOkZ2cgdGlsbCBlbGxlciB0b2xrYSBzdHJ1a3R1cmVyYWQgaW5mb3JtYXRpb24gaSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgIkJsw6RkZHJhcmVuIGbDtnIgR2l0LWFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJWaXNhIGluY2hlY2tuaW5nc2xvZ2dhciIKKworIzogY29tbWFuZC1saXN0Lmg6MTE2Cittc2dpZCAiU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIlZpc2EgaW5mb3JtYXRpb24gb20gZmlsZXIgaSBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNworbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5IgorbXNnc3RyICJMaXN0YSByZWZlcmVuc2VyIGkgZXR0IGZqw6RycmFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTgKK21zZ2lkICJMaXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0IgorbXNnc3RyICJWaXNhIGlubmVow6VsbGV0IGkgZXR0IHRyw6Rkb2JqZWt0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTkKK21zZ2lkICJFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlIgorbXNnc3RyICJIw6RtdGEgcGF0Y2ggb2NoIMOkZ2Fyc2thcCBmcsOlbiBldHQgZW5rZWx0IGUtcG9zdG1lZGRlbGFuZGUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiRW5rZWx0IHByb2dyYW0gZsO2ciBhdHQgZGVsYSBlbiBVTklYIG1ib3giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJTbMOlIGlob3AgdHbDpSBlbGxlciBmbGVyYSB1dHZlY2tsaW5nc2hpc3RvcmllciIKKworIzogY29tbWFuZC1saXN0Lmg6MTIyCittc2dpZCAiRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UiCittc2dzdHIgIkhpdHRhIGVuIHPDpSBicmEgYW5mYWRlciBzb20gbcO2amxpZ3QgZsO2ciBzYW1tYW5zbGFnbmluZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTIzCittc2dpZCAiUnVuIGEgdGhyZWUtd2F5IGZpbGUgbWVyZ2UiCittc2dzdHIgIkvDtnIgZW4gdHJldsOkZ3MtZmlsc2FtbWFuc2xhZ25pbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNAorbXNnaWQgIlJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmciCittc2dzdHIgIkvDtnIgZW4gc2FtbWFuc2xhZ25pbmcgZsO2ciBmaWxlciBzb20gYmVow7Z2ZXIgZGV0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjUKK21zZ2lkICJUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggZ2l0LW1lcmdlLWluZGV4IgorbXNnc3RyICJGw7ZydmFsdCBoasOkbHBwcm9ncmFtIGF0dCBhbnbDpG5kYSB0aWxsc2FtbWFucyBtZWQgZ2l0LW1lcmdlLWluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjYKK21zZ2lkICJSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyIKK21zZ3N0ciAiS8O2ciB2ZXJrdHlnIGbDtnIgbMO2c25pbmcgYXYgc2FtbWFuc2xhZ25pbmdza29uZmxpa3RlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiVmlzYSB0cmV2w6Rnc3NhbW1hbnNsYWduaW5nIHV0YW4gYXR0IHLDtnJhIGluZGV4ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOAorbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnc3RyICJTa3JpdiBvY2ggdmVyaWZpZXJhIG11bHRpLXBhY2staW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyOQorbXNnaWQgIkNyZWF0ZXMgYSB0YWcgb2JqZWN0IgorbXNnc3RyICJTa2FwYXIgZXR0IHRhZ2dvYmpla3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMAorbXNnaWQgIkJ1aWxkIGEgdHJlZS1vYmplY3QgZnJvbSBscy10cmVlIGZvcm1hdHRlZCB0ZXh0IgorbXNnc3RyICJCeWdnIGV0dCB0csOkZG9iamVrdCBmcsOlbiBscy10cmVlLWZvcm1hdGVyYWQgdGV4dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTMxCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJGbHl0dGEgZWxsZXIgYnl0IG5hbW4gcMOlIGVuIGZpbCwga2F0YWxvZyBlbGxlciBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMgorbXNnaWQgIkZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMiCittc2dzdHIgIkhpdHRhIHN5bWJvbGlza2EgbmFtbiBmw7ZyIGdpdm5hIHJlZmVyZW5zZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzMworbXNnaWQgIkFkZCBvciBpbnNwZWN0IG9iamVjdCBub3RlcyIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBlbGxlciBpbnNwZWt0ZXJhIG9iamVrdGFudGVja25pbmdhciIKKworIzogY29tbWFuZC1saXN0Lmg6MTM0Cittc2dpZCAiSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMiCittc2dzdHIgIkltcG9ydGVyYSBmcsOlbiBlbGxlciBzw6RuZCB0aWxsIFBlcmZvcmNlLWFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzUKK21zZ2lkICJDcmVhdGUgYSBwYWNrZWQgYXJjaGl2ZSBvZiBvYmplY3RzIgorbXNnc3RyICJTa2FwYSBldHQgcGFja2F0IGFya2l2IG1lZCBvYmpla3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNgorbXNnaWQgIkZpbmQgcmVkdW5kYW50IHBhY2sgZmlsZXMiCittc2dzdHIgIkhpdHRhIHJlZHVuZGFudGEgcGFjay1maWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTM3Cittc2dpZCAiUGFjayBoZWFkcyBhbmQgdGFncyBmb3IgZWZmaWNpZW50IHJlcG9zaXRvcnkgYWNjZXNzIgorbXNnc3RyICJQYWNrYSBodXZ1ZGVuIG9jaCB0YWdnYXIgZsO2ciBlZmZla3RpdiBhcmtpdsOldGtvbXN0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIiIKKyJSdXRpbmVyIGbDtnIgYXR0IGfDtnJhIGRldCBsw6R0dGFyZSBhdHQgdG9sa2Egw6V0a29tc3RwYXJhbWV0cmFyIGbDtnIgZmrDpHJyYXJraXYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzOQorbXNnaWQgIkNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoIgorbXNnc3RyICJCZXLDpGtuYSB1bmlrIElEIGbDtnIgZW4gcGF0Y2giCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MAorbXNnaWQgIlBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiVGEgYm9ydCBhbGxhIG9uw6ViYXJhIG9iamVrdCBmcsOlbiBvYmpla3RkYXRhYmFzZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MQorbXNnaWQgIlJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcyIKK21zZ3N0ciAiVGEgYm9ydCBleHRyYW9iamVrdCBzb20gcmVkYW4gZmlubnMgaSBwYWNrLWZpbGVybmEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MgorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiSMOkbXRhIGZyw6VuIG9jaCBpbnRlZ3JlcmEgbWVkIGFubmF0IGFya2l2IGVsbGVyIGVuIGxva2FsIGdyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0MworbXNnaWQgIlVwZGF0ZSByZW1vdGUgcmVmcyBhbG9uZyB3aXRoIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiVXBwZGF0ZXJhIGZqw6Ryci1yZWZlcmVuc2VyIG9jaCB0aWxsaMO2cmFuZGUgb2JqZWt0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDQKK21zZ2lkICJBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIlRpbGzDpG1wYXIgZW4gcXVpbHQtcGF0Y2h1cHBzw6R0dG5pbmcgcMOlIGFrdGl2IGdyZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NQorbXNnaWQgIkNvbXBhcmUgdHdvIGNvbW1pdCByYW5nZXMgKGUuZy4gdHdvIHZlcnNpb25zIG9mIGEgYnJhbmNoKSIKK21zZ3N0ciAiSsOkbWbDtnIgdHbDpSBpbmNoZWNrbmluZ3NpbnRlcnZhbGwgKGR2cy4gdHbDpSB2ZXJzaW9uZXIgYXYgZW4gZ3JlbikiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0NgorbXNnaWQgIlJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpHNlciB0csOkZGluZm9ybWF0aW9uIGluIGkgaW5kZXhldCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ3Cittc2dpZCAiUmVhcHBseSBjb21taXRzIG9uIHRvcCBvZiBhbm90aGVyIGJhc2UgdGlwIgorbXNnc3RyICJBcHBsaWNlcmEgaW5jaGVja25pbmdhciBww6Ugbnl0dCBvdmFucMOlIGVuIGFubmFuIGJhc3RvcHAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OAorbXNnaWQgIlJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVGEgZW1vdCBkZXQgc29tIHPDpG5kcyB0aWxsIGFya2l2ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIkhhbnRlcmEgcmVmZXJlbnNsb2dnLWluZm9ybWF0aW9uIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTAKK21zZ2lkICJNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJIYW50ZXJhIHVwcHPDpHR0bmluZ2VuIHNww6VyYWRlIGFya2l2IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICJQYWNrYSBvcGFja2FkZSBvYmpla3QgaSBldHQgYXJraXYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MgorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIHJlZnMgdG8gcmVwbGFjZSBvYmplY3RzIgorbXNnc3RyICJTa2FwYSwgdmlzYSwgdGEgYm9ydCByZWZlcmVuc2VyIGbDtnIgYXR0IGVyc8OkdHRhIG9iamVrdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTUzCittc2dpZCAiR2VuZXJhdGVzIGEgc3VtbWFyeSBvZiBwZW5kaW5nIGNoYW5nZXMiCittc2dzdHIgIlNrYXBhciBlbiBzYW1tYW5mYXR0bmluZyBhdiB2w6RudGFuZGUgw6RuZHJpbmdhciIKKworIzogY29tbWFuZC1saXN0Lmg6MTU0Cittc2dpZCAiUmV1c2UgcmVjb3JkZWQgcmVzb2x1dGlvbiBvZiBjb25mbGljdGVkIG1lcmdlcyIKK21zZ3N0ciAiw4V0ZXJhbnbDpG5kIHNwYXJhZCBsw7ZzbmluZyBhdiBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdGVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTUKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgYWt0dWVsbCBIRUFEIHRpbGwgYW5naXZldCB0aWxsc3TDpW5kIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTYKK21zZ2lkICJSZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgZmlsZXIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIsOFdGVyc3TDpGxsIG7DpWdyYSBiZWZpbnRsaWdhIGluY2hlY2tuaW5nYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiVmlzYSBpbmNoZWNrbmluZ3NvYmpla3QgaSBvbXbDpG5kIGtyb25vbG9naXNrIG9yZG5pbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OQorbXNnaWQgIlBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMiCittc2dzdHIgIlBsb2NrYSB1dCBvY2ggbWFzc2VyYSBwYXJhbWV0cmFyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjAKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiVGEgYm9ydCBmaWxlciBmcsOlbiBhcmJldHNrYXRhbG9nZW4gb2NoIGZyw6VuIGluZGV4ZXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MQorbXNnaWQgIlNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzIgorbXNnc3RyICJTw6RuZCBlbiB1cHBzw6R0dG5pbmcgcGF0Y2hhciBzb20gZS1wb3N0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjIKK21zZ2lkICJQdXNoIG9iamVjdHMgb3ZlciBHaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJTw6RuZCBvYmpla3Qgw7Z2ZXIgR2l0LXByb3Rva29sbGV0IHRpbGwgYW5uYXQgYXJraXYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIkJlZ3LDpG5zYXQgaW5sb2dnbmluZ3Nza2FsIGbDtnIgU1NILcOldGtvbXN0IHRpbGwgYmFyYSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NAorbXNnaWQgIlN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0IgorbXNnc3RyICJTdW1tZXJhIFwiZ2l0IGxvZ1wiLXV0ZGF0YSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIlZpc2Egb2xpa2Egc29ydGVycyBvYmpla3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NgorbXNnaWQgIlNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMiCittc2dzdHIgIlZpc2EgZ3JlbmFyIG9jaCBkZXJhcyBpbmNoZWNrbmluZ2FyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4IgorbXNnc3RyICJTa2FwYSBwYWNrYXQgYXJraXZpbmRleCIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVmlzYSByZWZlcmVuc2VyIGkgZXR0IGxva2FsdCBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzIgorbXNnc3RyICJHaXQ6cyBpMThuLXN0YXJ0a29kIGbDtnIgc2thbHNrcmlwdCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiR2VtZW5zYW0gc2tyaXB0c3RhcnRrb2QgZsO2ciBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJJbml0aWVyYSBvY2ggbW9kaWZpZXJhIHNwYXJzZS1jaGVja291dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTcyCittc2dpZCAiU3Rhc2ggdGhlIGNoYW5nZXMgaW4gYSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhd2F5IgorbXNnc3RyICJTcGFyYSB1bmRhbiDDpG5kcmluZ2FyIGkgZW4gbG9ydGlnIGFyYmV0c2thdGFsb2ciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MworbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBzdGFnaW5nIGFyZWEiCittc2dzdHIgIkzDpGdnIGZpbGlubmVow6VsbGV0IHRpbGwgaW5kZXhldCIKKworIzogY29tbWFuZC1saXN0Lmg6MTc0Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiVmlzYSBzdGF0dXMgZsO2ciBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NQorbXNnaWQgIlJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIgorbXNnc3RyICJUYSBib3J0IG9uw7ZkaWdhIGJsYW5rc3RlZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc2Cittc2dpZCAiSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcyIKK21zZ3N0ciAiSW5pdGllcmEsIHVwcGRhdGVyYSBlbGxlciBpbnNwZWt0ZXJhIHVuZGVybW9kdWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICJEdWJiZWxyaWt0YWQgdmVya2FuIG1lbGxhbiBldHQgU3VidmVyc2lvbi1hcmtpdiBvY2ggR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIkJ5dCBncmVuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICJMw6RzLCBtb2RpZmllcmEgZWxsZXIgdGEgYm9ydCBzeW1ib2xpc2sgcmVmZXJlbnMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MAorbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICJTa2FwYSwgdmlzYSwgdGEgYm9ydCBlbGxlciB2ZXJpZmllcmEgR1BHLXNpZ25lcmF0IHRhZ2dvYmpla3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICJTa2FwYXIgdGVtcG9yw6RyYSBmaWxlciBtZWQgaW5uZWjDpWxsZXQgZnLDpW4gZW4gYmxvYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgyCittc2dpZCAiVW5wYWNrIG9iamVjdHMgZnJvbSBhIHBhY2tlZCBhcmNoaXZlIgorbXNnc3RyICJQYWNrYSB1cHAgb2JqZWt0IGZyw6VuIGV0dCBwYWthdCBhcmtpdiIKKworIzogY29tbWFuZC1saXN0Lmg6MTgzCittc2dpZCAiUmVnaXN0ZXIgZmlsZSBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiUmVnaXN0cmVyYSBmaWxpbm5laMOlbGxldCBmcsOlbiBhcmJldHNrYXRhbG9nZW4gaSBpbmRleGV0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODQKK21zZ2lkICJVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkiCittc2dzdHIgIlVwcGRhdGVyYSBvYmpla3RuYW1uZXQgaSBlbiByZWZlcmVucyBww6UgZXR0IHPDpGtlcnQgc8OkdHQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NQorbXNnaWQgIlVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzIgorbXNnc3RyICJVcHBkYXRlcmEgdGlsbMOkZ2dzaW5mb2ZpbCBmw7ZyIGF0dCBoasOkbHBhIGR1bW1hIHNlcnZyYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NgorbXNnaWQgIlNlbmQgYXJjaGl2ZSBiYWNrIHRvIGdpdC1hcmNoaXZlIgorbXNnc3RyICJTw6RuZCBhcmtpdmV0IHRpbGxiYWthIHRpbGwgZ2l0LWFyY2hpdmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NworbXNnaWQgIlNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjayIKK21zZ3N0ciAiU8OkbmQgcGFja2FkZSBvYmpla3QgdGlsbGJha2EgdGlsbCBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJWaXNhIGVuIGxvZ2lzayBHaXQtdmFyaWFiZWwiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4OQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIGNvbW1pdHMiCittc2dzdHIgIktvbnRyb2xsZXJhIEdQRy1zaWduYXR1cmVyIGbDtnIgaW5jaGVja25pbmdhciIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICJCZWtyw6RmdGEgcGFja2FkZSBHaXQtYXJraXZmaWxlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTkxCittc2dpZCAiQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFncyIKK21zZ3N0ciAiS29udHJvbGxlcmEgR1BHLXNpZ25hdHVyZXIgaSB0YWdnYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MgorbXNnaWQgIkdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykiCittc2dzdHIgIkdpdC13ZWJiZ3LDpG5zc25pdHQgKHdlYmJmcmFtw6RuZGEgZsO2ciBHaXQtYXJraXYpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTMKK21zZ2lkICJTaG93IGxvZ3Mgd2l0aCBkaWZmZXJlbmNlIGVhY2ggY29tbWl0IGludHJvZHVjZXMiCittc2dzdHIgIlZpc2EgbG9nZ2FyIG1lZCBkaWZmZXJlbnNlciB2YXJqZSBpbmNoZWNrbmluZyBpbnRyb2R1Y2VyYXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJIYW50ZXJhIHl0dGVybGlnYXJlIGFyYmV0c2thdGFsb2dlciIKKworIzogY29tbWFuZC1saXN0Lmg6MTk1Cittc2dpZCAiQ3JlYXRlIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiU2thcGEgZXR0IHRyw6Rkb2JqZWt0IGZyw6VuIGFrdHVlbGx0IGluZGV4IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTYKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICJEZWZpbmllcmFyIGF0dHJpYnV0IHBlciBzw7ZrdsOkZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk3Cittc2dpZCAiR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zIgorbXNnc3RyICJHaXRzIGtvbW1hbmRvcmFkc2dyw6Ruc3NuaXR0IG9jaCAta29udmVudGlvbmVyIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTgKK21zZ2lkICJBIEdpdCBjb3JlIHR1dG9yaWFsIGZvciBkZXZlbG9wZXJzIgorbXNnc3RyICJHcnVuZGzDpGdnYW5kZSBHaXQtaGFuZGxlZG5pbmcgZsO2ciB1dHZlY2tsYXJlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiR2l0IGbDtnIgQ1ZTLWFudsOkbmRhcmUiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMAorbXNnaWQgIlR3ZWFraW5nIGRpZmYgb3V0cHV0IgorbXNnc3RyICJKdXN0cmVhIGRpZmYtdXRkYXRhIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDEKK21zZ2lkICJBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0IgorbXNnc3RyICJFdHQgYW52w6RuZGJhcnQgbWluc3RhIHVwcHPDpHR0bmluZyBrb21tYW5kb24gZsO2ciB2YXJkYWdzLUdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjAyCittc2dpZCAiQSBHaXQgR2xvc3NhcnkiCittc2dzdHIgIkVuIEdpdC1vcmRsaXN0YSIKKworIzogY29tbWFuZC1saXN0Lmg6MjAzCittc2dpZCAiSG9va3MgdXNlZCBieSBHaXQiCittc2dzdHIgIktyb2thciBzb20gYW52w6RuZHMgYXYgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDQKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICJBbmdlIGF2c2lrdGxpZ2VuIG9zcMOlcmFkZSBmaWxlciBhdHQgaWdub3JlcmEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICJBbmdlIGVnZW5za2FwZXIgZsO2ciB1bmRlcm1vZHVsZXIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNgorbXNnaWQgIkdpdCBuYW1lc3BhY2VzIgorbXNnc3RyICJHaXQtbmFtbnJ5bWRlciIKKworIzogY29tbWFuZC1saXN0Lmg6MjA3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgTGF5b3V0IgorbXNnc3RyICJHaXRzIGFya2l2bGF5b3V0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDgKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIkFuZ2UgdmVyc2lvbmVyIG9jaCBpbnRlcnZhbGwgaSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwOQorbXNnaWQgIk1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyIgorbXNnc3RyICJNb250ZXJhciBldHQgYXJraXYgaW51dGkgZXR0IGFubmF0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTAKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQ6IHBhcnQgdHdvIgorbXNnc3RyICJJbnRyb2R1a3Rpb24gdGlsbCBHaXQ6IGRlbCB0dsOlIgorCisjOiBjb21tYW5kLWxpc3QuaDoyMTEKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQiCittc2dzdHIgIkludHJvZHVrdGlvbiB0aWxsIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjEyCittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICLDlnZlcnNpa3Qgw7Z2ZXIgcmVrb21tZW5kZXJhZGUgYXJiZXRzZmzDtmRlbiBtZWQgR2l0IgorCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIkR1IG3DpXN0ZSBzdGFydGEgbWVkIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NjAKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIlZpbGwgZHUgYXR0IGphZyBza2EgZ8O2cmEgZGV0IMOldCBkaWcgW1k9amEvTj1uZWpdPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJGZWxha3RpZyByZXYtaW5kYXRhOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGJpc2VjdGVkX2hlYWQiCittc2dzdHIgIkZlbGFrdGlnIHJldi1pbmRhdGE6ICRiaXNlY3RlZF9oZWFkIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiRmVsYWt0aWcgcmV2LWluZGF0YTogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICJcImdpdCBiaXNlY3QgJFRFUk1fQkFEXCIga2FuIGJhcmEgdGEgZXR0IGFyZ3VtZW50LiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJJbmdlbiBsb2dnZmlsIGFuZ2l2ZW4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSAkZmlsZSBmw7ZyIHVwcHNwZWxuaW5nIgorCisjOiBnaXQtYmlzZWN0LnNoOjIzMgorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gdmFkIG1lbmFyIGR1PyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgImJpc2VjdC1rw7ZybmluZyBtaXNzbHlja2FkZXM6IGluZ2V0IGtvbW1hbmRvIGdhdnMuIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NgorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAia8O2ciAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorIlwiYmlzZWN0XCIta8O2cm5pbmdlbiBtaXNzbHlja2FkZXM6XG4iCisiZmVsa29kICRyZXMgZnLDpW4gXCIkY29tbWFuZFwiIMOkciA8IDAgZWxsZXIgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3OQorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJcImJpc2VjdFwiLWvDtnJuaW5nZW4ga2FuIGludGUgZm9ydHPDpHR0YSBsw6RuZ3JlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJcImJpc2VjdFwiLWvDtnJuaW5nZW4gbWlzc2x5Y2thZGVzOlxuIgorIlwiYmlzZWN0X3N0YXRlICRzdGF0ZVwiIGF2c2x1dGFkZXMgbWVkIGZlbGtvZGVuICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkyCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICJcImJpc2VjdFwiLWvDtnJuaW5nZW4gbHlja2FkZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzAwCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJWaSB1dGbDtnIgaW5nZW4gYmlzZWN0IGbDtnIgdGlsbGbDpGxsZXQuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiRmVsOiBEaW5hIGxva2FsYSDDpG5kcmluZ2FyIGF2IGbDtmxqYW5kZSBmaWxlciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiAiCisic2FtbWFuc2xhZ25pbmciCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkF1dG9tYXRpc2sgc2FtbWFuc2xhZ25pbmcgbWlzc2x5Y2thZGVzLiIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6NjIKK21zZ2lkICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIG9jdG9wdXMuIgorbXNnc3RyICJCb3JkZSBpbnRlIGFudsOkbmRhIG9jdG9wdXMuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBnZW1lbnNhbSBpbmNoZWNrbmluZyBtZWQgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICJSZWRhbiDDoCBqb3VyIG1lZCAkcHJldHR5X25hbWUiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiU25hYmJzcG9sYXIgdGlsbDogJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiRsO2cnPDtmsgZW5rZWwgc2FtbWFuc2xhZ25pbmcgbWVkICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgIkVua2VsIHNhbW1hbnNsYWduaW5nIG1pc3NseWNrYWRlcywgZsO2cnPDtmtlciBhdXRvbWF0aXNrIHNhbW1hbnNsYWduaW5nLiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCB0ZW1wb3LDpHJ0IGluZGV4IChrYW4gaW50ZSBpbnRyw6RmZmEpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICJLYW4gaW50ZSB1cHBkYXRlcmEgJHJlZl9zdGFzaCBtZWQgJHdfY29tbWl0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjMyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggcHVzaCc6ICRvcHRpb24iCittc2dzdHIgImZlbDogb2vDpG5kIGZsYWdnYSBmw7ZyIFwic3Rhc2ggcHVzaFwiOiAkb3B0aW9uIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICRzdGFzaF9tc2ciCittc2dzdHIgIlNwYXJhZGUgYXJiZXRza2F0YWxvZ2VuIG9jaCBpbmRleHN0YXR1cyAkc3Rhc2hfbXNnIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjUzNgorIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgIm9rw6RuZCBmbGFnZ2E6ICRvcHQiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTU2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJGw7ZyIG3DpW5nYSByZXZpc2lvbmVyIGFuZ2l2bmE6ICRSRVYiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSDDpHIgaW50ZSBlbiBnaWx0aWcgcmVmZXJlbnMiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICJcIiRhcmdzXCIgw6RyIGludGUgZW4gXCJzdGFzaFwiLWxpa25hbmRlIGluY2hlY2tuaW5nIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIlwiJGFyZ3NcIiDDpHIgaW50ZSBlbiBcInN0YXNoXCItcmVmZXJlbnMiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjE4Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImthbiBpbnRlIHVwcGRhdGVyYSBpbmRleGV0IgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYyMgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiS2FuIGludGUgdGlsbMOkbXBhIGVuIFwic3Rhc2hcIiBtaXR0IGkgZW4gc2FtbWFuc2xhZ25pbmciCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMwCittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiS29uZmxpa3RlciBpIGluZGV4ZXQuIFRlc3RhIHV0YW4gLS1pbmRleC4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjMyCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzcGFyYSBpbmRleHRyw6RkIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY0MQorbXNnaWQgIkNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIGVudHJ5IgorbXNnc3RyICJLdW5kZSBpbnRlIMOldGVyc3TDpGxsYSBvc3DDpXJhZGUgZmlsZXIgZnLDpW4gc3Rhc2gtcG9zdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2NjYKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCDDpG5kcmFkZSBmaWxlciB1ciBrw7ZuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiS2FzdGFkZSAke1JFVn0gKCRzKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogS3VuZGUgaW50ZSBrYXN0YSBcInN0YXNoXCItcG9zdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihGw7ZyIGF0dCDDpXRlcnN0w6RsbGEgZGVtLCBza3JpdiBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMDIKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiUmVsYXRpdiBzw7ZrdsOkZyBrYW4gZW5kYXN0IGFudsOkbmRhcyBmcsOlbiBhcmJldHNrYXRhbG9nZW5zIHRvcHBuaXbDpSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgImFya2l2LVVSTDogXCIkcmVwb1wiIG3DpXN0ZSB2YXJhIGFic29sdXQgZWxsZXIgYsO2cmphIG1lZCAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiXCIkc21fcGF0aFwiIGZpbm5zIHJlZGFuIGkgaW5kZXhldCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IGFuZCBpcyBub3QgYSBzdWJtb2R1bGUiCittc2dzdHIgIlwiJHNtX3BhdGhcIiBmaW5ucyByZWRhbiBpIGluZGV4ZXQgb2NoIMOkciBpbnRlIGVuIHVuZGVybW9kdWwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIlwiJHNtX3BhdGhcIiBoYXIgaW50ZSBuw6Vnb24gdXRjaGVja2FkIGluY2hlY2tuaW5nIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgc8O2a3bDpGdhciBpZ25vcmVyYXMgYXYgZW4gYXYgZGluYSAuZ2l0aWdub3JlLWZpbGVyOlxuIgorIiRzbV9wYXRoXG4iCisiQW52w6RuZCAtZiBvbSBkdSB2ZXJrbGlnZW4gdmlsbCBsw6RnZ2EgdGlsbCBkZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpGdnZXIgdGlsbCBiZWZpbnRsaWd0IGFya2l2IGkgXCIkc21fcGF0aFwiIGkgaW5kZXhldCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICJcIiRzbV9wYXRoXCIgZmlubnMgcmVkYW4gb2NoIMOkciBpbnRlIGV0dCBnaWx0aWd0IGdpdC1hcmtpdiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiRW4gZ2l0LWthdGFsb2cgZsO2ciBcIiRzbV9uYW1lXCIgaGl0dGFkZXMgbG9rYWx0IG1lZCBmasOkcnIoYXIpOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb21cbiIKKyIgICRyZWFscmVwb1xuIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0ICIKKyJyZXBvXG4iCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyJPbSBkdSB2aWxsIMOldGVyYW52w6RuZGEgZGVuIGxva2FsYSBnaXQta2F0YWxvZ2VuIGluc3TDpGxsZXQgZsO2ciBhdHQga2xvbmEgcMOlICIKKyJueXR0IGZyw6VuXG4iCisiICAkcmVhbHJlcG9cbiIKKyJrYW4gZHUgYW52w6RuZGEgZmxhZ2dhbiBcIi0tZm9yY2VcIi4gT20gZGVuIGxva2FsYSBnaXQta2F0YWxvZ2VuIGludGUgw6RyICIKKyJrb3JyZWt0XG4iCisiYXJraXYgZWxsZXIgb20gZHUgw6RyIG9zw6RrZXIgcMOlIHZhZCBkZXQgaMOkciBiZXR5ZGVyLCB2w6RsaiBldHQgYW5uYXQgbmFtbiBtZWRcbiIKKyJmbGFnZ2FuIFwiLS1uYW1lXCIuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiQWt0aXZlcmFyIGxva2FsIGdpdC1rYXRhbG9nIGbDtnIgdW5kZXJtb2R1bGVuIFwiJHNtX25hbWVcIiBww6Ugbnl0dC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkthbiBpbnRlIGNoZWNrYSB1dCB1bmRlcm1vZHVsZW4gXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGzDpGdnYSB0aWxsIHVuZGVybW9kdWxlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIk1pc3NseWNrYWRlcyByZWdpc3RyZXJhIHVuZGVybW9kdWxlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBoaXR0YSBha3R1ZWxsIHJldmlzaW9uIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgaSB1bmRlcm1vZHVsc8O2a3bDpGcgXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgJHtyZW1vdGVfbmFtZX0vJHticmFuY2h9IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICIKKyInJHNtX3BhdGgnIgorbXNnc3RyICIiCisiS2FuIGludGUgaGl0dGEgYWt0dWVsbCByZXZpc2lvbiBmw7ZyICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSBpICIKKyJ1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjEzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGjDpG10YSBpIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiRkaXNwbGF5cGF0aFwiOyBmw7Zyc8O2a3RlIGjDpG10YSAkc2hhMSAiCisiZGlyZWt0OiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyJIw6RtdGFkZSBpIHVuZGVybW9kdWxzc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiLCBtZW4gZGVuIGlubmVow7ZsbCBpbnRlICRzaGExLiAiCisiRGlyZWt0IGjDpG10bmluZyBhdiBpbmNoZWNrbmluZ2VuIG1pc3NseWNrYWRlcy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS2FuIGludGUgY2hlY2thIHV0IFwiJHNoYTFcIiBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJGRpc3BsYXlwYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiVW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIjogY2hlY2thZGUgdXQgXCIkc2hhMVwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBvbWJhc2VyYSBcIiRzaGExXCIgaSB1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzMgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiOiBvbWJhc2VyYWRlIGluIGkgXCIkc2hhMVwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkthbiBpbnRlIHNsw6UgaWhvcCBcIiRzaGExXCIgaSB1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzOAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiOiBzYW1tYW5zbGFnZW4gaSBcIiRzaGExXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMga8O2cmEgXCIkY29tbWFuZCAkc2hhMVwiIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiOiBcIiRjb21tYW5kICRzaGExXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgcmVrdXJzZXJhIGluIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4ODYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICJGbGFnZ2FuIC0tY2FjaGVkIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgZmxhZ2dhbiAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkzOAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJvdsOkbnRhdCBsw6RnZSAkbW9kX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICBWYXJuaW5nOiAkZGlzcGxheV9uYW1lIGlubmVow6VsbGVyIGludGUgaW5jaGVja25pbmdlbiAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTYxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAgVmFybmluZzogJGRpc3BsYXlfbmFtZSBpbm5laMOlbGxlciBpbnRlIGluY2hlY2tuaW5nZW4gJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk2NAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICBWYXJuaW5nOiAkZGlzcGxheV9uYW1lIGlubmVow6VsbGVyIGludGUgaW5jaGVja25pbmdhcm5hICRzaGExX3NyYyBvY2ggIgorIiRzaGExX2RzdCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJTZSBnaXQtJHtjbWR9KDEpIGbDtnIgZGV0YWxqZXIuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTA5Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICJUaWxsw6RtcGFkZSBhdXRvc3Rhc2guIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIkthbiBpbnRlIHNwYXJhICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICJPbWJhc2VyYXIgKCRuZXdfY291bnQvJHRvdGFsKSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIwNworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLb21tYW5kb246XG4iCisicCwgcGljayA8aW5jaGVja25pbmc+ID0gYW52w6RuZCBpbmNoZWNrbmluZ1xuIgorInIsIHJld29yZCA8aW5jaGVja25pbmc+ID0gYW52w6RuZCBpbmNoZWNrbmluZywgbWVuIHJlZGlnZXJhICIKKyJpbmNoZWNrbmluZ3NtZWRkZWxhbmRldFxuIgorImUsIGVkaXQgPGluY2hlY2tuaW5nPiA9IGFudsOkbmQgaW5jaGVja25pbmcsIG1lbiBzdGFubmEgZsO2ciB0aWxsw6RnZ1xuIgorInMsIHNxdWFzaCA8aW5jaGVja25pbmc+ID0gYW52w6RuZCBpbmNoZWNrbmluZywgbWVuIGluZm9nYSBpIGbDtnJlZ8OlZW5kZSAiCisiaW5jaGVja25pbmdcbiIKKyJmLCBmaXh1cCA8aW5jaGVja25pbmc+ID0gc29tIFwic3F1YXNoXCIsIG1lbiBmw7Zya2FzdGEgIgorImluY2hlY2tuaW5nc21lZGRlbGFuZGV0XG4iCisieCwgZXhlYyA8aW5jaGVja25pbmc+ID0ga8O2ciBrb21tYW5kbyAocmVzdGVuIGF2IHJhZGVuKSBpIHNrYWxldFxuIgorImQsIGRyb3AgPGluY2hlY2tuaW5nPiA9IHRhIGJvcnQgaW5jaGVja25pbmdcbiIKKyJsLCBsYWJlbCA8ZXRpa2V0dD4gPSBnZSBha3R1ZWxsdCBIRUFEIGV0dCBuYW1uXG4iCisidCwgcmVzZXQgPGV0aWtldHQ+ID0gw6V0ZXJzdMOkbGwgSEVBRCB0aWxsIGVuIGV0aWtldHRcbiIKKyJtLCBtZXJnZSBbLUMgPGluY2hlY2tuaW5nPiB8IC1jIDxpbmNoZWNrbmluZz5dIDxldGlrZXR0PiBbIyA8ZW5yYWRzPl1cbiIKKyIuICAgICAgIHNrYXBhIGVuIHNhbW1hbnNsYWduaW5nIG1lZCB1cnNwcnVuZ2xpZ3QgbWVkZGVsYW5kZSAoZWxsZXJcbiIKKyIuICAgICAgIGVucmFkcywgb20gaW5nZXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBhbmdhdnMpLiBBbnbDpG5kXG4iCisiLiAgICAgICAtdiA8aW5jaGVja25pbmc+IGbDtnIgYXR0IHNrcml2YSBvbSBtZWRkZWxhbmRldC5cbiIKKyJcbiIKKyJEdSBrYW4gYnl0YSBvcmRuaW5nIHDDpSByYWRlcm5hOyBkZSB1dGbDtnJzIHVwcGlmcsOlbiBvY2ggbmVkLlxuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJEdSBrYW4gdXTDtmthIGluY2hlY2tuaW5nZW4gbnUsIG1lZFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiTsOkciBkdSDDpHIgbsO2amQgbWVkIGRpbmEgw6RuZHJpbmdhciBrw7ZyIGR1XG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMTogaW50ZSBlbiBpbmNoZWNrbmluZyBzb20ga2FuIHbDpGxqYXMiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICJGZWxha3RpZ3QgaW5jaGVja25pbmdzbmFtbjogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICJLYW4gaW50ZSBza3JpdmEgZXJzw6R0dG5pbmdzLXNoYTEgZsO2ciBha3R1ZWxsIGluY2hlY2tuaW5nIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIlNuYWJic3BvbGFkZSB0aWxsICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJLYW4gaW50ZSBzbmFiYnNwb2xhIHRpbGwgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gJGZpcnN0X3BhcmVudCIKK21zZ3N0ciAiS2FuIGludGUgZmx5dHRhIEhFQUQgdGlsbCAkZmlyc3RfcGFyZW50IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCittc2dzdHIgIlbDpGdyYXIgdXRmw7ZyYSBcInNxdWFzaFwiIHDDpSBlbiBzYW1tYW5zbGFnbmluZzogJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIkZlbCBuw6RyIHNhbW1hbnNsYWduaW5nZW4gJHNoYTEgc2t1bGxlIGfDtnJhcyBvbSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIkt1bmRlIGludGUgdsOkbGphICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgIkRldCBow6RyIMOkciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlICR7bn06IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZSAke259IGtvbW1lciBob3BwYXMgw7Z2ZXI6IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIkRldCBow6RyIMOkciBlbiBrb21iaW5hdGlvbiBhdiAkY291bnQgaW5jaGVja25pbmcuIgorbXNnc3RyWzFdICJEZXQgaMOkciDDpHIgZW4ga29tYmluYXRpb24gYXYgJGNvdW50IGluY2hlY2tuaW5nYXIuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAiRGV0IGjDpHIgw6RyIGVuIGtvbWJpbmF0aW9uIGF2IDIgaW5jaGVja25pbmdhci4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1MzYgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU3OQorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjU4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICRzaGExLi4uICRyZXN0IgorbXNnc3RyICJLdW5kZSBpbnRlIHRpbGzDpG1wYSAkc2hhMS4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgdXTDtmthIGluY2hlY2tuaW5nIGVmdGVyIGF0dCBoYSBseWNrYXRzIHbDpGxqYSAkc2hhMS4uLiAkcmVzdFxuIgorIkRldCDDpHIgYW50YWdsaWdlbiBww6UgZ3J1bmQgYXYgZXR0IHRvbXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZSwgZWxsZXIgYXR0XG4iCisicHJlLWNvbW1pdC1rcm9rZW4gbWlzc2x5Y2thZGVzLiBPbSBwcmUtY29tbWl0LWtyb2tlbiBtaXNzbHlja2FkZXMga2Fuc2tlXG4iCisiZHUgbcOlc3RlIGzDtnNhIHByb2JsZW1ldCBpbm5hbiBkdSBrYW4gc2tyaXZhIG9tIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIlN0b3BwYWRlIHDDpSAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiS2FuIGludGUgdXRmw7ZyYSBcIiRzcXVhc2hfc3R5bGVcIiB1dGFuIGVuIGbDtnJlZ8OlZW5kZSBpbmNoZWNrbmluZyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAiS8O2cjogJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICJLw7ZybmluZyBtaXNzbHlja2FkZXM6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIm9jaCBnam9yZGUgw6RuZHJpbmdhciB0aWxsIGluZGV4ZXQgb2NoL2VsbGVyIGFyYmV0c2thdGFsb2dlbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5NQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJEdSBrYW4gcsOkdHRhIHByb2JsZW1ldCBvY2ggc2VkYW4ga8O2cmFcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJLw7ZybmluZ2VuIGx5Y2thZGVzOiAkcmVzdFxuIgorIm1lbiBsw6RtbmFkZSBrdmFyIMOkbmRyaW5nYXIgaSBpbmRleGV0IG9jaC9lbGxlciBhcmJldHNrYXRhbG9nZW5cbiIKKyJDaGVja2EgaW4gZWxsZXIgdXRmw7ZyIFwic3Rhc2hcIiBww6Ugw6RuZHJpbmdhcm5hIG9jaCBrw7ZyIHNlZGFuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIk9rw6RudCBrb21tYW5kbzogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MjAKK21zZ2lkICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAiUsOkdHRhIGRldCBtZWQgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIuIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCAkaGVhZF9uYW1lLiIKK21zZ3N0ciAiTHlja2FkZXMgb21iYXNlcmEgb2NoIHVwcGRhdGVyYSAkaGVhZF9uYW1lLiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJEdSBoYXIga8O2YWRlIMOkbmRyaW5nYXIgaSBkaW4gYXJiZXRza2F0YWxvZy5cbiIKKyJPbSBkZXQgw6RyIG1lbmluZ2VuIGF0dCDDpG5kcmluZ2FybmFcbiIKKyJza2FsbCBsw6RnZ2FzIGluIGkgZsO2cmVnw6VlbmRlIGluY2hlY2tuaW5nLCBrw7ZyOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT20gZGUgc2thbGwgY2hlY2thcyBpbiBpIGVuIGVnZW4gaW5jaGVja25pbmcsIGvDtnI6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiT2F2c2V0dCB2aWxrZXQsIG7DpHIgZHUgw6RyIGbDpHJkaWcgZm9ydHPDpHR0ZXIgZHUgbWVkOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiRmVsIHZpZCBmw7Zyc8O2ayBhdHQgaGl0dGEgZsO2cmZhdHRhcmlkZW50aXRldCBmw7ZyIGF0dCB1dMO2a2EgaW5jaGVja25pbmciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzkKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIkR1IGhhciDDpG5kcmluZ2FyIGkgYXJiZXRza2F0YWxvZ2VuIHNvbSBpbnRlIGNoZWNrYXRzIGluLiBDaGVja2EgaW4gZGVtXG4iCisiZsO2cnN0IG9jaCBrw7ZyIHNlZGFuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgaWdlbi4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLdW5kZSBpbnRlIGNoZWNrYSBpbiBrw7ZhZGUgw6RuZHJpbmdhci4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzdGFydGEgdGV4dHJlZGlnZXJhcmUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjaGVja291dCAkc3dpdGNoX3RvIgorbXNnc3RyICJLdW5kZSBpbnRlIGNoZWNrYSB1dCAkc3dpdGNoX3RvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA3Cittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIkluZ2V0IEhFQUQ/IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIHRlbXBvcsOkciAkc3RhdGVfZGlyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTExCittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIkt1bmRlIGludGUgbWFya2VyYSBzb20gaW50ZXJha3RpdiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0MworIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAiT21iYXNlcmEgJHNob3J0cmV2aXNpb25zIHDDpSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGluY2hlY2tuaW5nKSIKK21zZ3N0clsxXSAiT21iYXNlcmEgJHNob3J0cmV2aXNpb25zIHDDpSAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGluY2hlY2tuaW5nYXIpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTk3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDAyCittc2dpZCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiCittc2dzdHIgIkt1bmRlIGludGUgaW5pdGllcmEgb21za3Jpdm5hIGluY2hlY2tuaW5nYXIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDo4OSBnaXQtc2gtc2V0dXAuc2g6OTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVzYWdlOiAkZGFzaGxlc3MgJFVTQUdFIgorbXNnc3RyICJhbnbDpG5kOiAkZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJLdW5kZSBpbnRlIGJ5dGEga2F0YWxvZyB0aWxsICRjZHVwLCB0b3Bwbml2w6VuIHDDpSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMDAgZ2l0LXNoLXNldHVwLnNoOjIwNworIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6ICRwcm9ncmFtX25hbWUgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIsO2ZGVzZGlnZXRydDogJHByb2dyYW1fbmFtZSBrYW4gaW50ZSBhbnbDpG5kYXMgdXRhbiBhcmJldHNrYXRhbG9nLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLYW4gaW50ZSBvbWJhc2VyYTogRHUgaGFyIG9rw7ZhZGUgw6RuZHJpbmdhci4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkthbiBpbnRlIHNrcml2YSBvbSBncmVuYXI6IER1IGhhciBva8O2YWRlIMOkbmRyaW5nYXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgbWVkIG9tYmFzZXJpbmc6IER1IGhhciBva8O2YWRlIMOkbmRyaW5nYXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkthbiBpbnRlICRhY3Rpb246IER1IGhhciBva8O2YWRlIMOkbmRyaW5nYXIuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQzCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIkthbiBpbnRlIG9tYmFzZXJhOiBEaXR0IGluZGV4IGlubmVow6VsbGVyIMOkbmRyaW5nYXIgc29tIGludGUgY2hlY2thdHMgaW4uIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLYW4gaW50ZSBow6RtdGEgbWVkIG9tYmFzZXJpbmc6IERpdHQgaW5kZXggaW5uZWjDpWxsZXIgb2luY2hlY2thZGUgw6RuZHJpbmdhci4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2FuIGludGUgJGFjdGlvbjogRGl0dCBpbmRleCBpbm5laMOlbGxlciDDpG5kcmluZ2FyIHNvbSBpbnRlIGNoZWNrYXRzIGluLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI1MworbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiRGVzc3V0b20gaW5uZWjDpWxsZXIgZGl0IGluZGV4IMOkbmRyaW5nYXIgc29tIGludGUgaGFyIGNoZWNrYXRzIGluLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjM3MworbXNnaWQgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCittc2dzdHIgIkR1IG3DpXN0ZSBrw7ZyYSBrb21tYW5kb3QgZnLDpW4gYXJiZXRza2F0YWxvZ2VucyB0b3Bwbml2w6UuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIkt1bmRlIGludGUgYmVzdMOkbW1hIGFic29sdXQgc8O2a3bDpGcgdGlsbCBnaXQta2F0YWxvZ2VuIgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTEycyAlMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ0b3VjaGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidG91Y2hlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICJyw7ZyZGUgJWQgc8O2a3bDpGdcbiIKK21zZ3N0clsxXSAicsO2cmRlICVkIHPDtmt2w6RnYXJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDUzCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLiIKK21zZ3N0ciAiIgorIk9tIHBhdGNoZW4ga2FuIGFwcGxpY2VyYXMgcmVudCBrb21tZXIgZGV0IHJlZGlnZXJhZGUgc3R5Y2tldCBhdHRcbiIKKyJrw7ZhcyBvbWVkZWxiYXJ0LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU2Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFzaGluZy4iCittc2dzdHIgIiIKKyJPbSBwYXRjaGVuIGthbiBhcHBsaWNlcmFzIHJlbnQga29tbWVyIGRldCByZWRpZ2VyYWRlIHN0eWNrZXQgYXR0XG4iCisibMOkZ2dhcyB0aWxsIGkgXCJzdGFzaFwiIG9tZWRlbGJhcnQuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIiIKKyJPbSBwYXRjaGVuIGthbiBhcHBsaWNlcmFzIHJlbnQga29tbWVyIGRldCByZWRpZ2VyYWRlIHN0eWNrZXQgYXR0XG4iCisidGFzIGJvcnQgZnLDpW4ga8O2biBvbWVkZWxiYXJ0LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3MQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc3Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBhcHBseWluZy4iCittc2dzdHIgIiIKKyJPbSBwYXRjaGVuIGthbiBhcHBsaWNlcmFzIHJlbnQga29tbWVyIGRldCByZWRpZ2VyYWRlIHN0eWNrZXQgYXR0XG4iCisibWFya2VyYXMgZsO2ciBhcHBsaWNlcmluZyBvbWVkZWxiYXJ0LiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAiIgorIk9tIHBhdGNoZW4ga2FuIGFwcGxpY2VyYXMgcmVudCBrb21tZXIgZGV0IHJlZGlnZXJhZGUgc3R5Y2tldCBhdHRcbiIKKyJtYXJrZXJhcyBmw7ZyIGthc3RhIG9tZWRlbGJhcnQuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIHN0eWNrZXJlZGlnZXJpbmdzZmlsIGbDtnIgc2tyaXZuaW5nOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisiVGEgYm9ydCBcIiVzXCIgcmFkZXIgZ2Vub20gYXR0IGfDtnJhIGRlbSBcIiBcIi1yYWRlciAoc2FtbWFuaGFuZykuXG4iCisiVGEgYm9ydCBcIiVzXCIgcmFkZXIgZ2Vub20gYXR0IHJhZGVyYSBkZW0uXG4iCisiUmFkZXIgc29tIGLDtnJqYXIgbWVkICVzIGtvbW1lciBhdHQgdGFzIGJvcnQuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyDDtnBwbmEgc3R5Y2tlc3JlZGlnZXJpbmdzZmlsIGbDtnIgbMOkc25pbmc6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDgKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0ga8O2YSBzdHlja2V0XG4iCisibiAtIGvDtmEgaW50ZSBzdHlja2V0XG4iCisicSAtIGF2c2x1dGE7IGvDtmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGVcbiIKKyJhIC0ga8O2YSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIGvDtmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGUgaSBmaWxlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU0Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIFwic3Rhc2hcIjphIHN0eWNrZXRcbiIKKyJuIC0gXCJzdGFzaFwiOmEgaW50ZSBzdHlja2V0XG4iCisicSAtIGF2c2x1dGE7IFwic3Rhc2hcIjphIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisiYSAtIFwic3Rhc2hcIjphIHN0eWNrZXQgb2NoIGFsbGEgZsO2bGphbmRlIGkgZmlsZW5cbiIKKyJkIC0gXCJzdGFzaFwiOmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGUgaSBmaWxlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSB0YSBib3J0IHN0eWNrZXQgZnLDpW4ga8O2blxuIgorIm4gLSB0YSBpbnRlIGJvcnQgc3R5Y2tldCBmcsOlbiBrw7ZuXG4iCisicSAtIGF2c2x1dGE7IHRhIGludGUgYm9ydCBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGUgZnLDpW4ga8O2blxuIgorImEgLSB0YSBib3J0IHN0eWNrZXQgb2NoIGFsbGEgZsO2bGphbmRlIGkgZmlsZW4gZnLDpW4ga8O2blxuIgorImQgLSB0YSBpbnRlIGJvcnQgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW4gZnLDpW4ga8O2biIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjY2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIGFwcGxpY2VyYSBzdHlja2V0IHDDpSBpbmRleGV0XG4iCisibiAtIGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgcMOlIGluZGV4ZXRcbiIKKyJxIC0gYXZzbHV0YTsgYXBwbGljZXJhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisiYSAtIGFwcGxpY2VyYSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBpIGZpbGVuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjkwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gZsO2cmthc3RhIHN0eWNrZXQgZnLDpW4gYXJiZXRza2F0YWxvZ2VuXG4iCisibiAtIGbDtnJrYXN0YSBpbnRlIHN0eWNrZXQgZnLDpW4gYXJiZXRza2F0YWxvZ2VuXG4iCisicSAtIGF2c2x1dGE7IGbDtnJrYXN0YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZVxuIgorImEgLSBmw7Zya2FzdGEgc3R5Y2tldCBvY2ggYWxsYSBmw7ZsamFuZGUgaSBmaWxlblxuIgorImQgLSBmw7Zya2FzdGEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGUgaSBmaWxlbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjc4Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBmw7Zya2FzdGEgc3R5Y2tldCBmcsOlbiBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW5cbiIKKyJuIC0gZsO2cmthc3RhIGludGUgc3R5Y2tldCBmcsOlbiBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW5cbiIKKyJxIC0gYXZzbHV0YTsgZsO2cmthc3RhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlXG4iCisiYSAtIGbDtnJrYXN0YSBzdHlja2V0IG9jaCBhbGxhIGbDtmxqYW5kZSBpIGZpbGVuXG4iCisiZCAtIGbDtnJrYXN0YSBpbnRlIHN0eWNrZXQgZWxsZXIgbsOlZ290IGF2IGRlIGbDtmxqYW5kZSBpIGZpbGVuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyODQKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaWNlcmEgc3R5Y2tldCBww6UgaW5kZXhldCBvY2ggYXJiZXRza2F0YWxvZ2VuXG4iCisibiAtIGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgcMOlIGluZGV4ZXQgb2NoIGFyYmV0c2thdGFsb2dlblxuIgorInEgLSBhdnNsdXRhOyBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGVcbiIKKyJhIC0gYXBwbGljZXJhIHN0eWNrZXQgb2NoIGFsbGEgZsO2bGphbmRlIGkgZmlsZW5cbiIKKyJkIC0gYXBwbGljZXJhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBhcHBsaWNlcmEgc3R5Y2tldCBww6UgYXJiZXRza2F0YWxvZ2VuXG4iCisibiAtIGFwcGxpY2VyYSBpbnRlIHN0eWNrZXQgcMOlIGFyYmV0c2thdGFsb2dlblxuIgorInEgLSBhdnNsdXRhOyBhcHBsaWNlcmEgaW50ZSBzdHlja2V0IGVsbGVyIG7DpWdvdCBhdiBkZSBmw7ZsamFuZGVcbiIKKyJhIC0gYXBwbGljZXJhIHN0eWNrZXQgb2NoIGFsbGEgZsO2bGphbmRlIGkgZmlsZW5cbiIKKyJkIC0gYXBwbGljZXJhIGludGUgc3R5Y2tldCBlbGxlciBuw6Vnb3QgYXYgZGUgZsO2bGphbmRlIGkgZmlsZW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMxMQorbXNnaWQgIiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImcgLSB2w6RsaiBldHQgc3R5Y2tlIGF0dCBnw6UgdGlsbFxuIgorIi8gLSBzw7ZrIGVmdGVyIHN0eWNrZSBzb20gbW90c3ZhcmFyIGFuZ2l2ZXQgcmVndWxqw6RydCB1dHRyeWNrXG4iCisiaiAtIGzDpG1uYSBzdHlja2V0IG9iZXN0w6RtdCwgc2UgbsOkc3RhIG9iZXN0w6RtZGEgc3R5Y2tlXG4iCisiSiAtIGzDpG1uYSBzdHlja2V0IG9iZXN0w6RtdCwgc2UgbsOkc3RhIHN0eWNrZVxuIgorImsgLSBsw6RtbmEgc3R5Y2tldCBvYmVzdMOkbXQsIHNlIGbDtnJlZ8OlZW5kZSBvYmVzdMOkbWRhIHN0eWNrZVxuIgorIksgLSBsw6RtbmEgc3R5Y2tldCBvYmVzdMOkbXQsIHNlIGbDtnJlZ8OlZW5kZSBzdHlja2VcbiIKKyJzIC0gZGVsYSBha3R1ZWxsdCBzdHlja2UgaSBtaW5kcmUgc3R5Y2tlbnNcbiIKKyJlIC0gcmVkaWdlcmEgYWt0dWVsbHQgc3R5Y2tlIG1hbnVlbGx0XG4iCisiPyAtIHZpc2EgaGrDpGxwXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MgorbXNnaWQgIlRoZSBzZWxlY3RlZCBodW5rcyBkbyBub3QgYXBwbHkgdG8gdGhlIGluZGV4IVxuIgorbXNnc3RyICJNYXJrZXJhZGUgc3R5Y2tlbiBrYW4gaW50ZSBhcHBsaWNlcmFzIHDDpSBpbmRleGV0IVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDMKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAiQXBwbGljZXJhIGRlbSBww6UgYXJiZXRza2F0YWxvZ2VuIHRyb3RzIGRldD8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDYKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICJJbmdlbnRpbmcgYXBwbGljZXJhZGVzLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgImlnbm9yZXJhciBlaiBzYW1tYW5zbGFnZW46ICVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS8O2YSDDpG5kcmF0IGzDpGdlIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkvDtmEgYm9ydHRhZ25pbmcgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkvDtmEgc3R5Y2tldCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJTdGFzaDphIMOkbmRyYXQgbMOkZ2UgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU3Rhc2g6YSBib3J0dGFnbmluZyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiU3Rhc2g6YSBzdHlja2V0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiVGEgYm9ydCDDpG5kcmF0IGzDpGdlIGZyw6VuIGvDtm4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJUYSBib3J0IGJvcnR0YWduaW5nIGZyw6VuIGvDtm4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiVGEgYm9ydCBzdHlja2V0IGZyw6VuIGvDtm4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljZXJhIMOkbmRyYXQgbMOkZ2UgcMOlIGluZGV4ZXQgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljZXJhIGJvcnR0YWduaW5nIHDDpSBpbmRleGV0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNlcmEgc3R5Y2tldCBww6UgaW5kZXhldCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkthc3RhIMOkbmRyYXQgbMOkZ2UgZnLDpW4gYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2FzdGEgYm9ydHRhZ25pbmcgZnLDpW4gYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkthc3RhIHN0eWNrZXQgZnLDpW4gYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBtb2RlIGNoYW5nZSBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2FzdGEgw6RuZHJhdCBsw6RnZSBmcsOlbiBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJLYXN0YSBib3J0dGFnbmluZyBmcsOlbiBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiS2FzdGEgc3R5Y2tldCBmcsOlbiBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2VyYSDDpG5kcmF0IGzDpGdlIHDDpSBpbmRleGV0IG9jaCBhcmJldHNrYXRhbG9nZW4gW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2VyYSBib3J0dGFnbmluZyBww6UgaW5kZXhldCBvY2ggYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiQXBwbGljZXJhIHN0eWNrZXQgcMOlIGluZGV4ZXQgb2NoIGFyYmV0c2thdGFsb2dlbiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNlcmEgw6RuZHJhdCBsw6RnZSBww6UgYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkFwcGxpY2VyYSBib3J0dGFnbmluZyBww6UgYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJBcHBsaWNlcmEgc3R5Y2tldCBww6UgYXJiZXRza2F0YWxvZ2VuIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE1NzAKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iCittc2dzdHIgIkluZ2EgYW5kcmEgc3R5Y2tlbiBhdHQgZ8OlIHRpbGxcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTg4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyOiAnJXMnXG4iCittc2dzdHIgIk9naWx0aWd0IHNpZmZlcnbDpHJkZTogXCIlc1wiXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICJCZWtsYWdhciwgZGV0IGZpbm5zIGJhcmEgJWQgc3R5Y2tlLlxuIgorbXNnc3RyWzFdICJCZWtsYWdhciwgZGV0IGZpbm5zIGJhcmEgJWQgc3R5Y2tlbi5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgIkluZ2EgYW5kcmEgc3R5Y2tlbiBhdHQgc8O2a2EgZWZ0ZXJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjM2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnc3RyICJGZWxha3RpZ3QgZm9ybWF0IHDDpSByZWd1bGrDpHJ0IHPDtmt1dHRyeWNrICVzOiAlc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NDYKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIKK21zZ3N0ciAiSW5nYSBzdHlja2VuIG1vdHN2YXJhciBnaXZldCBtw7Zuc3RlclxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2NTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjgwCittc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnc3RyICJJbmdldCBmw7ZyZWfDpWVuZGUgc3R5Y2tlXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODYKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAiSW5nZXQgZsO2bGphbmRlIHN0eWNrZVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTIKK21zZ2lkICJTb3JyeSwgY2Fubm90IHNwbGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICJCZWtsYWdhciwga2FuIGludGUgZGVsYSBzdHlja2V0XG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCittc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dzdHJbMF0gIkRlbGEgaSAlZCBzdHlja2UuXG4iCittc2dzdHJbMV0gIkRlbGEgaSAlZCBzdHlja2VuLlxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3MDgKK21zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIkJla2xhZ2FyLCBrYW4gaW50ZSByZWRpZ2VyYSBzdHlja2V0XG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2UgZG8gbm90IHRyYW5zbGF0ZSB0aGUgY29tbWFuZCBuYW1lcworIy4gJ3N0YXR1cycsICd1cGRhdGUnLCAncmV2ZXJ0JywgZXRjLgorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzczCittc2dpZCAiIgorInN0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlc1xuIgorInVwZGF0ZSAgICAgICAgLSBhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXNcbiIKKyJyZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb25cbiIKKyJwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5XG4iCisiZGlmZiAgICAgICAgICAtIHZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4XG4iCisiYWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgIgorImNoYW5nZXNcbiIKK21zZ3N0ciAiIgorInN0YXR1cyAgICAgICAgLSB2aXNhIHPDtmt2w6RnYXIgbWVkIMOkbmRyaW5nYXJcbiIKKyJ1cGRhdGUgICAgICAgIC0gbMOkZ2cgYXJiZXRza2F0YWxvZ2VucyB0aWxsc3TDpW5kIHRpbGwga8O2YWRlIMOkbmRyaW5nYXJcbiIKKyJyZXZlcnQgICAgICAgIC0gw6V0ZXJzdMOkbGwga8O2YWRlIMOkbmRyaW5nYXIgdGlsbCBIRUFELXZlcnNpb25lblxuIgorInBhdGNoICAgICAgICAgLSB2w6RsaiBvY2ggdXBwZGF0ZXJhIHZhbGRhIHN0eWNrZW5cbiIKKyJkaWZmICAgICAgICAgIC0gdmlzYSBkaWZmIG1lbGxhbiBIRUFEIG9jaCBpbmRleFxuIgorImFkZCB1bnRyYWNrZWQgLSBsw6RnZyB0aWxsIGlubmVow6VsbCBpIG9zcMOlcmFkZSBmaWxlciB0aWxsIGvDtmFkZSDDpG5kcmluZ2FyXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjUKK21zZ2lkICJtaXNzaW5nIC0tIgorbXNnc3RyICJzYWtuYWQgLS0iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgIm9rw6RudCBsw6RnZSBmw7ZyIC0tcGF0Y2g6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAiZmVsYWt0aWd0IGFyZ3VtZW50ICVzLCBmw7ZydsOkbnRhciAtLSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMzgKK21zZ2lkICJsb2NhbCB6b25lIGRpZmZlcnMgZnJvbSBHTVQgYnkgYSBub24tbWludXRlIGludGVydmFsXG4iCittc2dzdHIgImxva2FsIHpvbiBza2lsamVyIHNpZyBmcsOlbiBHTVQgbWVkIGRlbGFyIGF2IG1pbnV0ZXJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDUgZ2l0LXNlbmQtZW1haWwucGVybDoxNTEKK21zZ2lkICJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIKK21zZ3N0ciAibG9rYWwgdGlkc3pvbmbDtnJza2p1dG5pbmcgc3TDtnJyZSDDpG4gZWxsZXIgbGlrYSBtZWQgMjQgdGltbWFyXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MjIzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MjI5Cittc2dpZCAidGhlIGVkaXRvciBleGl0ZWQgdW5jbGVhbmx5LCBhYm9ydGluZyBldmVyeXRoaW5nIgorbXNnc3RyICJ0ZXh0cmVkaWdlcmluZ3Nwcm9ncmFtbWV0IGF2c2x1dGFkZXMgbWVkIGZlbCwgYXZicnl0ZXIgYWxsdGluZyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiIKK21zZ3N0ciAiIgorIlwiJXNcIiBpbm5laMOlbGxlciBlbiBtZWxsYW5saWdnYW5kZSB2ZXJzaW9uIGF2IGUtcG9zdGJyZXZldCBkdSBza3Jldi5cbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDozMTUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJyVzLmZpbmFsJyBjb250YWlucyB0aGUgY29tcG9zZWQgZW1haWwuXG4iCittc2dzdHIgIlwiJXMuZmluYWxcIiBpbm5laMOlbGxlciBkZXQgc2tyaXZuYSBicmV2ZXQuXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDA4Cittc2dpZCAiLS1kdW1wLWFsaWFzZXMgaW5jb21wYXRpYmxlIHdpdGggb3RoZXIgb3B0aW9uc1xuIgorbXNnc3RyICItLWR1bXAtYWxpYXMgw6RyIGlua29tcGF0aWJlbHQgbWVkIGFuZHJhIGZsYWdnb3JcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODEgZ2l0LXNlbmQtZW1haWwucGVybDo2ODMKK21zZ2lkICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorbXNnc3RyICJLYW4gaW50ZSBrw7ZyYSBnaXQgZm9ybWF0LXBhdGNoIGZyw6VuIHV0YW5mw7ZyIGFya2l2ZXRcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0ODQKK21zZ2lkICIiCisiYGJhdGNoLXNpemVgIGFuZCBgcmVsb2dpbmAgbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgKHZpYSBjb21tYW5kLWxpbmUgb3IgIgorImNvbmZpZ3VyYXRpb24gb3B0aW9uKVxuIgorbXNnc3RyICIiCisiXCJiYXRjaC1zaXplXCIgb2NoIFwicmVsb2dpblwiIG3DpXN0ZSBhbmdlcyB0aWxsc2FtbWFucyAodmlhIGtvbW1hbmRvcmFkICIKKyJlbGxlciBrb25maWd1cmF0aW9uc2ZsYWdnYSlcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0OTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5rbm93biAtLXN1cHByZXNzLWNjIGZpZWxkOiAnJXMnXG4iCittc2dzdHIgIk9rw6RudCBmw6RsdCBpIC0tc3VwcHJlc3MtY2M6IFwiJXNcIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjUyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJXMnXG4iCittc2dzdHIgIk9rw6RuZCBpbnN0w6RsbG5pbmcgaSAtLWNvbmZpcm06IFwiJXNcIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1NgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJ2YXJuaW5nOiBzZW5kbWFpbC1hbGlhcyBtZWQgY2l0YXRpb25zdGVja2VuIHN0w7ZkcyBpbnRlLiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICJ2YXJuaW5nOiBcIjppbmNsdWRlOlwiIHN0w7ZkcyBpbnRlOiAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAidmFybmluZzogb21kaXJpZ2VyaW5nIHRpbCBcIi9maWxcIiBlbGxlciBcInxyw7ZyXCIgc3TDtmRzIGludGU6ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICVzXG4iCittc2dzdHIgInZhcm5pbmc6IHNlbmRtYWlsLXJhZGVuIGvDpG5ucyBpbnRlIGlnZW46ICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjQ5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzXG4iCisidG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi5cbiIKKyJcbiIKKyIgICAgKiBTYXlpbmcgXCIuLyVzXCIgaWYgeW91IG1lYW4gYSBmaWxlOyBvclxuIgorIiAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS5cbiIKK21zZ3N0ciAiIgorIkZpbGVuIFwiJXNcIiBmaW5ucyBtZW4ga2FuIG9ja3PDpSB2YXJhIGV0dCBpbmNoZWNrbmluZ3NpbnRlcnZhbGxcbiIKKyJhdHQgc2thcGEgcGF0Y2hhciBmw7ZyLiBHw7ZyIG90dmV0eWRpZ3QgZ2Vub20gYXR0Li4uXG4iCisiXG4iCisiICAgICogU8OkZ2EgXCIuLyVzXCIgb20gZHUgbWVuYXIgZW4gZmlsOyBlbGxlclxuIgorIiAgICAqIEFuZ2UgZmxhZ2dhbiAtLWZvcm1hdC1wYXRjaCBvbSBkdSBtZW5hciBldHQgaW50ZXJ2YWxsLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY3MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbmRpciAlczogJXMiCittc2dzdHIgIk1pc3NseWNrYWRlcyB1dGbDtnJhIG9wZW5kaXIgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjY5NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiZmF0YWw6ICVzOiAlc1xuIgorIndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iCittc2dzdHIgIiIKKyLDtmRlc2RpZ2VydDogJXM6ICVzXG4iCisidmFybmluZzogaW5nYSBwYXRjaGFyIGhhciBzw6RudHNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MDUKK21zZ2lkICIiCisiXG4iCisiTm8gcGF0Y2ggZmlsZXMgc3BlY2lmaWVkIVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiSW5nYSBwYXRjaGZpbGVyIGFuZ2F2cyFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAiSW5nZW4gw6RyZW5kZXJhZCBpICVzPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBmw7ZyIHNrcml2bmluZyAlczogJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzM5Cittc2dpZCAiIgorIkxpbmVzIGJlZ2lubmluZyBpbiBcIkdJVDpcIiB3aWxsIGJlIHJlbW92ZWQuXG4iCisiQ29uc2lkZXIgaW5jbHVkaW5nIGFuIG92ZXJhbGwgZGlmZnN0YXQgb3IgdGFibGUgb2YgY29udGVudHNcbiIKKyJmb3IgdGhlIHBhdGNoIHlvdSBhcmUgd3JpdGluZy5cbiIKKyJcbiIKKyJDbGVhciB0aGUgYm9keSBjb250ZW50IGlmIHlvdSBkb24ndCB3aXNoIHRvIHNlbmQgYSBzdW1tYXJ5LlxuIgorbXNnc3RyICIiCisiUmFkZXIgc29tIGLDtnJqYXIgbWVkIFwiR0lUOlwiIGtvbW1lciB0YXMgYm9ydC5cbiIKKyLDlnZlcnbDpGcgYXR0IHRhIG1lZCBlbiDDtnZlcmdyaXBhbmRlIGRpZmZzdGF0dXMgZWxsZXJcbiIKKyJpbm5laMOlbGxzZsO2cnRlY2tuaW5nIGbDtnIgcGF0Y2hlbiBkdSBza3JpdmVyLlxuIgorIlxuIgorIlJlbnNhIGJyZXZrcm9wcGVuIG9tIGR1IGludGUgdmlsbCBzw6RuZGEgbsOlZ29uIHNhbW1hbmZhdHRuaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlczogJXMiCittc2dzdHIgIk1pc3NseWNrYWRlcyDDtnBwbmEgJXM6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjc4MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlcy5maW5hbDogJXMiCittc2dzdHIgIk1pc3NseWNrYWRlcyDDtnBwbmEgJXMuZmluYWw6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgyMworbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIlNhbW1hbmZhdHRhbmRlIGJyZXYgdG9tdCwgaG9wcGFyIMO2dmVyXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCBbeS9OXSBhcyBpcy4KKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6ODU4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1c2UgPCVzPiBbeS9OXT8gIgorbXNnc3RyICLDhHIgZHUgc8Oka2VyIHDDpSBhdHQgZHUgdmlsbCBhbnbDpG5kYSA8JXM+IFtZPWphLCBOPW5lal0/ICIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5MTMKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgOGJpdCwgYnV0IGRvIG5vdCBkZWNsYXJlIGEgQ29udGVudC1UcmFuc2Zlci0iCisiRW5jb2RpbmcuXG4iCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgZmlsZXIgw6RyIMOldHRhYml0YXJzLCBtZW4gYW5nZXIgaW50ZSBlbiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIlZpbGtlbiDDpXR0YWJpdGFyc3RlY2tlbmtvZG5pbmcgc2thbGwgamFnIGFuZ2UgW1VURi04XT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIlbDpGdyYXIgc8OkbmRhIGVmdGVyc29tIHBhdGNoZW5cbiIKKyJcdCVzXG4iCisiaGFyIG1hbGzDpHJlbmRldCBcIioqKiBTVUJKRUNUIEhFUkUgKioqXCIuIEFudsOkbmQgLS1mb3JjZSBvbSBkdSB2ZXJrbGlnZW4gIgorInZpbGwgc8OkbmRhLlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk0NQorbXNnaWQgIlRvIHdob20gc2hvdWxkIHRoZSBlbWFpbHMgYmUgc2VudCAoaWYgYW55b25lKT8iCittc2dzdHIgIlRpbGwgdmVtIHNrYWxsIGJyZXZlbiBzw6RuZGFzIChvbSBuw6Vnb24pPyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NjMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGFsaWFzICclcycgZXhwYW5kcyB0byBpdHNlbGZcbiIKK21zZ3N0ciAiw7ZkZXNkaWdlcnQ6IGFsaWFzZXQgXCIlc1wiIGV4cGFuZGVyYXIgdGlsbCBzaWcgc2rDpGx2XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTc1Cittc2dpZCAiTWVzc2FnZS1JRCB0byBiZSB1c2VkIGFzIEluLVJlcGx5LVRvIGZvciB0aGUgZmlyc3QgZW1haWwgKGlmIGFueSk/ICIKK21zZ3N0ciAiIgorIk1lc3NhZ2UtSUQgYXR0IGFudsOkbmRhIHNvbSBJbi1SZXBseS1UbyBmw7ZyIGRldCBmw7Zyc3RhIGJyZXZldCAob20gbsOlZ290KT8gIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwMzMgZ2l0LXNlbmQtZW1haWwucGVybDoxMDQxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJXNcbiIKK21zZ3N0ciAiZmVsOiBrdW5kZSBpbnRlIGbDpSBmcmFtIGVuIGdpbHRpZyBhZHJlc3MgZnLDpW46ICVzXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDQ1Cittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICJWYWQgdmlsbCBkdSBnw7ZyYSBtZWQgYWRyZXNzZW4/IChxPWF2c2x1dGEsIGQ9a2FzdGEsIGU9cmVkaWdlcmEpOiAiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTM2MgorIywgcGVybC1mb3JtYXQKK21zZ2lkICJDQSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiQ0Etc8O2a3bDpGdlbiBcIiVzXCIgZmlubnMgaW50ZSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDQ1Cittc2dpZCAiIgorIiAgICBUaGUgQ2MgbGlzdCBhYm92ZSBoYXMgYmVlbiBleHBhbmRlZCBieSBhZGRpdGlvbmFsXG4iCisiICAgIGFkZHJlc3NlcyBmb3VuZCBpbiB0aGUgcGF0Y2ggY29tbWl0IG1lc3NhZ2UuIEJ5IGRlZmF1bHRcbiIKKyIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIgorIiAgICBUaGlzIGJlaGF2aW9yIGlzIGNvbnRyb2xsZWQgYnkgdGhlIHNlbmRlbWFpbC5jb25maXJtXG4iCisiICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cbiIKKyJcbiIKKyIgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHJ1biAnZ2l0IHNlbmQtZW1haWwgLS1oZWxwJy5cbiIKKyIgICAgVG8gcmV0YWluIHRoZSBjdXJyZW50IGJlaGF2aW9yLCBidXQgc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsXG4iCisiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiAgICBLb3BpZWxpc3RhbiBvdmFuIGhhciB1dMO2a2F0cyBhdiB5dHRlcmxpZ2FyZSBhZHJlc3NlclxuIgorIiAgICBmdW5uYSBpIHBhdGNoZW5zIGluY2hlY2tuaW5nc21lZGRlbGFuZGUuIFNlbmQtZW1haWxcbiIKKyIgICAgZnLDpWdhciBzb20gc3RhbmRhcmQgaW5uYW4gc8OkbmRuaW5nIG7DpHIgZGV0dGEgc2tlci5cbiIKKyIgICAgQmV0ZWVuZGV0IHN0eXJzIGF2IGtvbmZpZ3VyYXRpb25zaW5zdMOkbGxuaW5nZW5cbiIKKyIgICAgc2VuZGVtYWlsLmNvbmZpcm1cbiIKKyJcbiIKKyIgICAgRsO2ciB5dHRlcmxpZ2FyZSBpbmZvcm1hdGlvbiwga8O2ciBcImdpdCBzZW5kLWVtYWlsIC0taGVscFwiLlxuIgorIiAgICBGw7ZyIGF0dCBiZWjDpWxsYSBudXZhcmFuZGUgYmV0ZWVuZGUsIG1lbiBkw7ZsamEgZGV0dGFcbiIKKyIgICAgbWVkZGVsYW5kZSwga8O2ciBcImdpdCBjb25maWcgLS1nbG9iYWwgc2VuZGVtYWlsLmNvbmZpcm0gYXV0b1wiLlxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYwCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICJTw6RuZGEgYnJldmV0PyAoeT1qYSwgbj1uZWosIGU9cmVkaWdlcmEsIHE9YXZzbHV0YSwgYT1hbGxhKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjMKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIlN2YXIga3LDpHZzIHDDpSBmcsOlZ2FuIFwiU8OkbmRhIGJyZXZldD9cIiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkxCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAiTsO2ZHbDpG5kaWcgU01UUC1zZXJ2ZXIgaGFyIGludGUgYW5naXZpdHMga29ycmVrdC4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTUzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTVEFSVFRMUyEgJXMiCittc2dzdHIgIlNlcnZlcm4gc3TDtmRlciBpbnRlIFNNQVJUVExTISAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICJTVEFSVFRMUyBtaXNzbHlja2FkZXMhICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NTYKK21zZ2lkICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTTVRQIHByb3Blcmx5LiBDaGVjayBjb25maWcgYW5kIHVzZSAtLXNtdHAtZGVidWcuIgorbXNnc3RyICIiCisiS2FuIGludGUgaW5pdGllcmEgU01UUCBrb3JyZWt0LiBLb250cm9sbGVyYSBpbnN0w6RsbG5pbmdhcm5hIG9jaCBhbnbDpG5kIC0tIgorInNtdHAtZGVidWcuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHNlbmQgJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHPDpG5kYSAlc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRHJ5LVNlbnQgJXNcbiIKK21zZ3N0ciAiVGVzdC1Tw6RuZGUgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAiU8OkbmRlICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIkRyeS1PSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIlRlc3QtT0suIExvZ2dlbiBzw6RnZXI6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIk9LLiBMb2cgc2F5czpcbiIKK21zZ3N0ciAiT0suIExvZ2dlbiBzw6RnZXI6XG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5MQorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICJSZXN1bHRhdDogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1OTQKK21zZ2lkICJSZXN1bHQ6IE9LXG4iCittc2dzdHIgIlJlc3VsdGF0OiBPS1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2MTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBmaWxlICVzIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgZmlsZW4gJXMiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY1OSBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NzkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIEzDpGdnZXIgdGlsbCBjYzogJXMgZnLDpW4gcmFkZW4gXCIlc1wiXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTY2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIobWJveCkgTMOkZ2dlciB0aWxsIHRvOiAlcyBmcsOlbiByYWRlbiBcIiVzXCJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNzE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIgorbXNnc3RyICIoaWNrZS1tYm94KSBMw6RnZ2VyIHRpbGwgY2M6ICVzIGZyw6VuIHJhZGVuIFwiJXNcIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKGtyb3BwKSBMw6RnZ2VyIHRpbGwgY2M6ICVzIGZyw6VuIHJhZGVuIFwiJXNcIlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NjQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBDb3VsZCBub3QgZXhlY3V0ZSAnJXMnIgorbXNnc3RyICIoJXMpIEt1bmRlIGludGUga8O2cmEgXCIlc1wiIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE4NzEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKCVzKSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIKK21zZ3N0ciAiKCVzKSBMw6RnZ2VyIHRpbGwgJXM6ICVzIGZyw6VuOiBcIiVzXCJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODc1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyVzJyIKK21zZ3N0ciAiKCVzKSBtaXNzbHlja2FkZXMgc3TDpG5nYSByw7ZyZXQgdGlsbCBcIiVzXCIiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAia2FuIGludGUgc8OkbmRhIGJyZXYgc29tIHNqdWJpdGFycyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTEzCittc2dpZCAiaW52YWxpZCB0cmFuc2ZlciBlbmNvZGluZyIKK21zZ3N0ciAib2dpbHRpZyDDtnZlcmbDtnJpbmdza29uZG5pbmciCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NCBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMDYgZ2l0LXNlbmQtZW1haWwucGVybDoyMDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSAlczogJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBjb250YWlucyBhIGxpbmUgbG9uZ2VyIHRoYW4gOTk4IGNoYXJhY3RlcnMiCittc2dzdHIgIiVzOiBwYXRjaGVuIGlubmVow6VsbGVyIGVuIHJhZCBsw6RuZ3JlIMOkbiA5OTggdGVja2VuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgJXMgd2l0aCBiYWNrdXAgc3VmZml4ICclcycuXG4iCittc2dzdHIgIiIKKyJIb3BwYXIgw7Z2ZXIgJXMgbWVkIGZpbG5hbW5zdGlsbMOkZ2dldCBcIiVzXCIgc29tIGFudsOkbmRzIGbDtnIgIgorInPDpGtlcmhldHNrb3Bpb3IuXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBwbGVhc2Uga2VlcCAiW3l8Tl0iIGFzIGlzLgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBzZW5kICVzPyBbeXxOXTogIgorbXNnc3RyICJWaWxsIGR1IHZlcmtsaWdlbiBzw6RuZGEgJXM/IFt5PWphLCBuPW5lal06ICIKKworI34gbXNnaWQgInVuYWJsZSB0byBnZXQgdHJlZSBmb3IgJXMiCisjfiBtc2dzdHIgImt1bmRlIGludGUgaMOkbXRhIHRyw6RkZXQgcMOlICVzIgorCisjfiBtc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIKKyN+IG1zZ3N0ciAiQW52w6RuZCBlbiBleHBlcmltZW50ZWxsIGFsZ29yaXRtIGbDtnIgYXR0IGbDtnJiw6R0dHJhIGRpZmZhciIKKworI34gbXNnaWQgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggWy0tb2JqZWN0LWRpciA8b2Jqa2F0Pl0iCisKKyN+IG1zZ2lkICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iCisjfiBtc2dzdHIgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmprYXQ+XSIKKworI34gbXNnaWQgInVua25vd24gY29yZS51bnRyYWNrZWRDYWNoZSB2YWx1ZSAnJXMnOyB1c2luZyAna2VlcCcgZGVmYXVsdCB2YWx1ZSIKKyN+IG1zZ3N0ciAiIgorI34gIm9rw6RudCB2w6RyZGUgXCIlc1wiIGbDtnIgY29yZS51bnRyYWNrZWRDYWNoZTsgYW52w6RuZGVyIHN0YW5kYXJkdsOkcmRldCBcImtlZXAiCisjfiAiXCIiCisKKyN+IG1zZ2lkICJjYW5ub3QgY2hhbmdlIHBhcnRpYWwgY2xvbmUgcHJvbWlzb3IgcmVtb3RlIgorI34gbXNnc3RyICJrYW4gaW50ZSDDpG5kcmEga29udHJha3RzZmrDpHJyIGbDtnIgZGVsdmlzIGtsb25pbmciCisKKyN+IG1zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKKyN+IG1zZ3N0ciAiZmVsIHZpZCBieWdnYW5kZSBhdiB0csOkZCIKKworI34gbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQgJyVzJyBpbiAnJXMnIgorI34gbXNnc3RyICJvZ2lsdGlndCBkYXR1bWZvcm1hdCBcIiVzXCIgaSBcIiVzXCIiCisKKyN+IG1zZ2lkICJ3cml0aW5nIHJvb3QgY29tbWl0IgorI34gbXNnc3RyICJza3JpdmVyIHJvdGluY2hlY2tuaW5nIgorCisjfiBtc2dpZCAic3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlcyBtYXkgYmUgbG9zdDogJXMiCisjfiBtc2dzdHIgImvDtmFkZSDDpG5kcmluZ2FyIGkgZsO2bGphbmRlIGZpbGVyIGthbiBnw6UgZsO2cmxvcmFkZTogJXMiCiAKICN+IG1zZ2lkICIiCi0jfiAiVW5hYmxlIHRvIHN0YXJ0IGdpdGs6XG4iCi0jfiAiXG4iCi0jfiAiJXMgZG9lcyBub3QgZXhpc3QiCisjfiAiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyN+ICJwYXJ0aWFsQ2xvbmUiCiAjfiBtc2dzdHIgIiIKLSN+ICJLYW4gaW50ZSBzdGFydGEgZ2l0azpcbiIKKyN+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+IG1zZ2lkICIlczsgd2lsbCBvdmVyd3JpdGUhIgorI34gbXNnc3RyICIlczsga29tbWVyIHNrcml2YSDDtnZlciEiCmRpZmYgLS1naXQgYS9wby92aS5wbyBiL3BvL3ZpLnBvCmluZGV4IGQ5NTZiNTkuLmI4OTFmM2IgMTAwNjQ0Ci0tLSBhL3BvL3ZpLnBvCisrKyBiL3BvL3ZpLnBvCkBAIC0xLDE0ICsxLDE1IEBACi0jIFZpZXRuYW1lc2UgdHJhbnNsYXRpb24gZm9yIEdJVC1HVUkKLSMgQuG6o24gZOG7i2NoIFRp4bq/bmcgVmnhu4d0IGTDoG5oIGNobyBnw7NpIEdpdC1ndWkuCisjIFZpZXRuYW1lc2UgdHJhbnNsYXRpb24gZm9yIEdJVC1DT1JFLgorIyBC4bqjbiBk4buLY2ggdGnhur9uZyBWaeG7h3QgZMOgbmggY2hvIEdJVC1DT1JFLgogIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWNvcmUgcGFja2FnZS4KLSMgRmlyc3QgdHJhbnNsYXRlZCBieSBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiwgMjAxNC4KKyMgTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eSA8cGNsb3Vkc0BnbWFpbC5jb20+LCAyMDEyLgorIyBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiwgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwgMjAyMC4KICMKIG1zZ2lkICIiCiBtc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWkgMC4xOS4wXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE0LTA2LTI2IDEzOjQyKzA3MDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA2LTI3IDA3OjQ4KzA3MDBcbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdCB2Mi4yNS4wXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTktMTItMzAgMDg6NDgrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMjAtMDEtMDMgMTQ6MDgrMDcwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuQGdtYWlsLmNvbT5cbiIKICJMYW5ndWFnZS1UZWFtOiBWaWV0bmFtZXNlIDx0cmFuc2xhdGlvbi10ZWFtLXZpQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKICJMYW5ndWFnZTogdmlcbiIKQEAgLTE2LDI2NzUgKzE3LDI1NjkyIEBACiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCi0iWC1Qb2VkaXQtTGFuZ3VhZ2U6IFZpZXRuYW1lc2VcbiIKLSJYLVBvZWRpdC1Db3VudHJ5OiBWSUVUIE5BTVxuIgotIlgtUG9lZGl0LVNvdXJjZUNoYXJzZXQ6IHV0Zi04XG4iCi0iWC1Qb2VkaXQtQmFzZXBhdGg6IC4uL1xuIgorIlgtTGFuZ3VhZ2UtVGVhbS1XZWJzaXRlOiA8aHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvdGVhbS92aS5odG1sPlxuIgorIlgtUG9lZGl0LVNvdXJjZUNoYXJzZXQ6IFVURi04XG4iCisiWC1Qb2VkaXQtQmFzZXBhdGg6IC4uXG4iCisiWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuN1xuIgogCi0jOiBnaXQtZ3VpLnNoOjg1OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgotbXNnc3RyICJQaMO0bmcgY2jhu68ga2jDtG5nIGjhu6NwIGzhu4cgxJHGsOG7o2MgxJHhurdjIHThuqMgdHJvbmcgJXM6IgorIzogYWRkLWludGVyYWN0aXZlLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiSOG6oyAoJXMpPyIKIAotIzogZ2l0LWd1aS5zaDo5MTIKLW1zZ2lkICJNYWluIEZvbnQiCi1tc2dzdHIgIlBow7RuZyBjaOG7ryBjaMOtbmgiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1MDAgYWRkLWludGVyYWN0aXZlLmM6ODAxIHNlcXVlbmNlci5jOjMyMTYKKyM6IHNlcXVlbmNlci5jOjM2NTYgYnVpbHRpbi9yZWJhc2UuYzo4NzEgYnVpbHRpbi9yZWJhc2UuYzoxNjQzCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMTkgYnVpbHRpbi9yZWJhc2UuYzoyMDYzCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgYuG6o25nIG3hu6VjIGzhu6VjIgogCi0jOiBnaXQtZ3VpLnNoOjkxMwotbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgotbXNnc3RyICJQaMO0bmcgY2jhu68gY2hvIELhuqNuZyDEkWnhu4F1IGtoaeG7g24gaGF5IERpZmYiCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1NTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNjkKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjk0Cittc2dpZCAiYmluYXJ5IgorbXNnc3RyICJuaOG7iyBwaMOibiIKIAotIzogZ2l0LWd1aS5zaDo5MjggZ2l0LWd1aS5zaDo5NDIgZ2l0LWd1aS5zaDo5NTUgZ2l0LWd1aS5zaDoxMDQ1Ci0jOiBnaXQtZ3VpLnNoOjEwNjQgZ2l0LWd1aS5zaDozMTE5Ci1tc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCi1tc2dzdHIgImdpdC1ndWk6IGzhu5dpIG5naGnDqm0gdHLhu41uZyIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjYxMyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI3OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMzIKK21zZ2lkICJub3RoaW5nIgorbXNnc3RyICJraMO0bmcgY8OzIGfDrCIKIAotIzogZ2l0LWd1aS5zaDo5MjkKLW1zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCi1tc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBnaXQgdHJvbmcgYmnhur9uIFBBVEguIgorIzogYWRkLWludGVyYWN0aXZlLmM6NjE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAia2jDtG5nIHRoYXkgxJHhu5VpIgogCi0jOiBnaXQtZ3VpLnNoOjk1NgotbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgotbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY2h14buXaSBwaGnDqm4gYuG6o24gR2l0OiIKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY0MworbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IgogCi0jOiBnaXQtZ3VpLnNoOjk4MQotIywgdGNsLWZvcm1hdAorIzogYWRkLWludGVyYWN0aXZlLmM6NjY4IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRxrBhIOKAnCVz4oCdIGzDqm4gYuG7hyBwaMOzbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3NCBhZGQtaW50ZXJhY3RpdmUuYzo4NjMgc2VxdWVuY2VyLmM6MzQwOQorIzogYnVpbHRpbi9yZWJhc2UuYzo4OTUKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MjgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInVwZGF0ZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ1cGRhdGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIsSRw6MgY+G6rXAgbmjhuq10ICVkIMSRxrDhu51uZyBk4bqrblxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2OTUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NzgKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIm5vdGU6ICVzIGlzIHVudHJhY2tlZCBub3cuXG4iCittc2dzdHIgImNow7ogw706ICVzIGdp4budIMSRw6MgYuG7jyB0aGVvIGTDtWkuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcwMCBhcHBseS5jOjQxMDggYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJtYWtlX2NhY2hlX2VudHJ5IGfhurdwIGzhu5dpIMSR4buRaSB24bubaSDEkcaw4budbmcgZOG6q24g4oCcJXPigJ0iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjczMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAiSG/DoG4gbmd1ecOqbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzQ2Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIEhFQURee3RyZWV9IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIEhFQURee3RyZWV9IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3ODQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAixJHDoyBob8OgbiBuZ3V5w6puICVkIMSRxrDhu51uZyBk4bqrblxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdW50cmFja2VkIGZpbGVzLlxuIgorbXNnc3RyICJLaMO0bmcgY8OzIHThuq1wIHRpbiBuw6BvIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aS5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODM5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njg5Cittc2dpZCAiQWRkIHVudHJhY2tlZCIKK21zZ3N0ciAiVGjDqm0gY8OhYyBjw6FpIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODY2IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJhZGRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgImFkZGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIsSRw6MgdGjDqm0gJWQgxJHGsOG7nW5nIGThuqtuXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXMiCittc2dzdHIgImLhu48gcXVhIG5o4buvbmcgdGjhu6kgY2jGsGEgaMOyYSB0cuG7mW46ICVzIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MDggYWRkLXBhdGNoLmM6MTMzMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIKK21zZ3N0ciAiQ2jhu4kgY8OzIGPDoWMgdOG6rXAgdGluIG5o4buLIHBow6JuIGzDoCB0aGF5IMSR4buVaS5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTEwIGFkZC1wYXRjaC5jOjEzMjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIktow7RuZyBjw7MgdGhheSDEkeG7lWkgbsOgby5cbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM3NgorbXNnaWQgIlBhdGNoIHVwZGF0ZSIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IG1p4bq/bmcgdsOhIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5NTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzU0Cittc2dpZCAiUmV2aWV3IGRpZmYiCittc2dzdHIgIlhlbSB4w6l0IGzhuqFpIGRpZmYiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MQorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgxJHGsOG7nW5nIGThuqtuIHbhu5tpIGPDoWMgdGhheSDEkeG7lWkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MworbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAiIgorInRow6ptIHRy4bqhbmcgdGjDoWkgY8OieSBsw6BtIHZp4buHYyB2w6BvIHThuq1wIGjhu6NwIGPDoWMgdGhheSDEkeG7lWkgxJHDoyDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgIgorInBow7NuZyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg1Cittc2dpZCAicmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb24iCittc2dzdHIgIiIKKyJob8OgbiBuZ3V5w6puIGzhuqFpIHThuq1wIGjhu6NwIGPDoWMgdGhheSDEkeG7lWkgxJHDoyDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nIHRy4bufIGzhuqFpIHBoacOqbiAiCisiYuG6o24gSEVBRCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg3Cittc2dpZCAicGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5IgorbXNnc3RyICJjaOG7jW4gY8OhYyDigJxraMO6Y+KAnSB2w6AgY+G6rXAgbmjhuq10IGPDsyB0dXnhu4NuIGNo4buNbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg5Cittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgInhlbSBraMOhYyBiaeG7h3QgZ2nhu69hIEhFQUQgdsOgIG3hu6VjIGzhu6VjIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5OTEKK21zZ2lkICJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiCittc2dzdHIgIiIKKyJ0aMOqbSBu4buZaSBkdW5nIGPhu6dhIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSB2w6BvIHThuq1wIGjhu6NwIGPDoWMgdGhheSDEkeG7lWkgxJHDoyAiCisixJHGsOG7o2MgxJHGsGEgbMOqbiBi4buHIHBow7NuZyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTk5IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNDgKK21zZ2lkICJQcm9tcHQgaGVscDoiCittc2dzdHIgIlRy4bujIGdpw7pwIHbhu4Egbmjhuq9jOiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwMQorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICJjaOG7jW4gbeG7mXQgbeG7pWMgxJHGoW4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDMKK21zZ2lkICJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIKK21zZ3N0ciAiY2jhu41uIG3hu5l0IHbDuW5nIGPDoWMgbeG7pWMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDUKK21zZ2lkICJzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzIgorbXNnc3RyICJjaOG7jW4gbmhp4buBdSB2w7luZyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNyBhZGQtaW50ZXJhY3RpdmUuYzoxMDUyCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAiY2jhu41uIG3hu6VjIGThu7FhIHRyw6puIHRp4buBbiB04buRIGR1eSBuaOG6pXQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDkKK21zZ2lkICJ1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMiCittc2dzdHIgImLhu48gY2jhu41uIGPDoWMgbeG7pWMgxJHDoyBjaG8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTEKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICJjaOG7jW4gdOG6pXQgY+G6oyBjw6FjIG3hu6VjIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDEzCittc2dpZCAiKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIgorbXNnc3RyICIoxJHhu4MgdHLhu5FuZykgaG/DoG4gdOG6pXQgY2jhu41uIGzhu7FhIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDUwCittc2dpZCAic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIKK21zZ3N0ciAidMO5eSBjaOG7jW4gbeG7pWMgYuG6sW5nIHPhu5EiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTQKK21zZ2lkICIoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIoxJHhu4MgdHLhu5FuZykga2jDtG5nIGNo4buNbiBnw6wiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNjIgYnVpbHRpbi9jbGVhbi5jOjgyMiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4NTEKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIqKiogTOG7h25oICoqKiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA2MyBidWlsdGluL2NsZWFuLmM6ODIzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg0OAorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICJHaeG7nSB0aMOsIHNhbyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAixJHDoyDEkcawYSBsw6puIGLhu4cgcGjDs25nIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgImNoxrBhIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMTUgYXBwbHkuYzo0OTY1IGFwcGx5LmM6NDk2OCBidWlsdGluL2FtLmM6MjE5NworIzogYnVpbHRpbi9hbS5jOjIyMDAgYnVpbHRpbi9jbG9uZS5jOjEyMyBidWlsdGluL2ZldGNoLmM6MTQ0CisjOiBidWlsdGluL21lcmdlLmM6MjczIGJ1aWx0aW4vcHVsbC5jOjIwOSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDA5CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM3OSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzgKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTE5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAicGF0aCIKK21zZ3N0ciAixJHGsOG7nW5nLWThuqtuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTIyCittc2dpZCAiY291bGQgbm90IHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgbOG6oWkgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAiVOG6oW0gYmnhu4d0LlxuIgorCisjOiBhZGQtcGF0Y2guYzoxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAiVGhheSDEkeG7lWkgY2jhur8gxJHhu5kgYuG7hyBwaMOzbmcgW3ksbixhLHEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICJYw7NhIGto4buPaSBi4buHIHBow7NuZyBbeSxuLGEscSxkJXMsP10/ICIKKworIzogYWRkLXBhdGNoLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICLEkMawYSBsw6puIGLhu4cgcGjDs25nIGtow7pjIG7DoHkgW3ksbixhLHEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIHBo4bqnbiDEkeG6p3UgY+G7p2Ega2jDumMg4oCcJS4qc+KAnSIKKworIzogYWRkLXBhdGNoLmM6MTMwIGFkZC1wYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgcGjhuqduIMSR4bqndSBraMO6YyDEkcOjIHTDtCBtw6B1IOKAnCUuKnPigJ0iCisKKyM6IGFkZC1wYXRjaC5jOjE3NgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBkaWZmIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIGtow6FjIGJp4buHdCIKKworIzogYWRkLXBhdGNoLmM6MTk0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbG9yZWQgZGlmZiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGtow6FjIGJp4buHdCDEkcaw4bujYyB0w7QgbcOgdSIKKworIzogYWRkLXBhdGNoLmM6NTA4CisjLCBjLWZvcm1hdAorI3wgbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKIG1zZ2lkICIiCi0iR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCi0iXG4iCi0iJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKLSJcbiIKLSIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCi0iXG4iCi0iQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKIG1zZ3N0ciAiIgotIktow7RuZyB0aOG7gyBuaOG6rW4gcmEgcGhpw6puIGLhuqNuIGPhu6dhIEdpdC5cbiIKLSJcbiIKLSIlcyBuw7NpIMSRw6J5IGzDoCBwaGnDqm4gYuG6o24gJyVzJy5cbiIKLSJcbiIKLSIlcyB5w6p1IGPhuqd1IEdpdCBwaGnDqm4gYuG6o24gdOG7qyAxLjUuMCBoYXkgbeG7m2kgaMahbi5cbiIKLSJcbiIKLSJD4buNaSAnJXMnIGPDsyBwaGnDqm4gYuG6o24gbMOgIDEuNS4wP1xuIgorImPhuqduIGTDsm5nIG7hu5lpIGR1bmcgIyVkIHRyb25nXG4iCisiJS4qcyIKIAotIzogZ2l0LWd1aS5zaDoxMjc4Ci1tc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgotbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgdGjGsCBt4bulYyBnaXQ6IgotCi0jOiBnaXQtZ3VpLnNoOjEzMTIKLW1zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgotbXNnc3RyICJLaMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gxJHhur9uIMSR4buJbmggY+G7p2EgdGjGsCBt4bulYyBsw6BtIHZp4buHYzoiCi0KLSM6IGdpdC1ndWkuc2g6MTMyMAotbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIGTDuW5nIGtobyB0cuG6p246IgotCi0jOiBnaXQtZ3VpLnNoOjEzMjgKLW1zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAiS2jDtG5nIGPDsyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgotCi0jOiBnaXQtZ3VpLnNoOjE1MDAgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKLW1zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgotbXNnc3RyICJD4bqtcCBuaOG6rXQgbOG6oWkgdHLhuqFuZyB0aMOhaSB04bqtcCB0aW4uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MTU2MAotbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCi1tc2dzdHIgIsSQYW5nIHF1w6l0IMSRxKlhIHTDrG0gdOG6rXAgdGluIHRoYXkgxJHhu5VpLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjE2MzYKLW1zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgotbXNnc3RyICLEkGFuZyBn4buNaSBtw7NjIHByZXBhcmUtY29tbWl0LW1zZy4uLiIKLQotIzogZ2l0LWd1aS5zaDoxNjUzCi1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKLW1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBi4buLIGNo4buRaSB04burIGRvIG3Ds2MgcHJlcGFyZS1jb21taXQtbXNnLiIKLQotIzogZ2l0LWd1aS5zaDoxODExIGxpYi9icm93c2VyLnRjbDoyNTIKLW1zZ2lkICJSZWFkeS4iCi1tc2dzdHIgIlPhurVuIHPDoG5nLiIKLQotIzogZ2l0LWd1aS5zaDoxOTY5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKLW1zZ3N0ciAiQ2jhu4kgaGnhu4NuIHRo4buLICVzIHRyb25nIHPhu5EgJXMgdOG6rXAgdGluLiIKLQotIzogZ2l0LWd1aS5zaDoyMDk1Ci1tc2dpZCAiVW5tb2RpZmllZCIKLW1zZ3N0ciAiS2jDtG5nIHRoYXkgxJHhu5VpIGfDrCIKLQotIzogZ2l0LWd1aS5zaDoyMDk3Ci1tc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIsSQw6Mgc+G7rWEgbmjGsG5nIGNoxrBhIMSRw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjIwOTggZ2l0LWd1aS5zaDoyMTEwCi1tc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIsSQw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjIwOTkgZ2l0LWd1aS5zaDoyMTExCi1tc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCi1tc2dzdHIgIkPDoWMgcGjhuqduIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbyIKLQotIzogZ2l0LWd1aS5zaDoyMTAwIGdpdC1ndWkuc2g6MjExMgotbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgotbXNnc3RyICLEkMOjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbywgdGhp4bq/dSIKLQotIzogZ2l0LWd1aS5zaDoyMTAyCi1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCi1tc2dzdHIgIsSQw6MgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4gbmjGsG5nIGNoxrBhIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBj4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjIxMDMgZ2l0LWd1aS5zaDoyMTA0Ci1tc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG9sZCB0eXBlIHN0YWdlZCBmb3IgY29tbWl0IgotbXNnc3RyICLEkMOjIMSR4buVaSBraeG7g3UgdOG6rXAgdGluLCBraeG7g3UgY8WpIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MjEwNQotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCi1tc2dzdHIgIsSQw6MgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4sIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MjEwNgotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBtb2RpZmljYXRpb24gbm90IHN0YWdlZCIKLW1zZ3N0ciAiIgotIlRoYXkgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4gxJHDoyDEkcaw4bujYyDEkcOhbmggZOG6pXUgY+G6p24gY2h1eeG7g24gZ2lhbywgbmjGsG5nIGPDoWMgdGhheSDEkeG7lWkgIgotInRow6wgY2jGsGEiCi0KLSM6IGdpdC1ndWkuc2g6MjEwNwotbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBmaWxlIG1pc3NpbmciCi1tc2dzdHIgIiIKLSJUaGF5IMSR4buVaSBraeG7g3UgdOG6rXAgdGluIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8sIHThuq1wIHRpbiBi4buLIHRoaeG6v3UiCi0KLSM6IGdpdC1ndWkuc2g6MjEwOQotbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKLW1zZ3N0ciAiQ2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpLCBjaMawYSDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MjExNAotbXNnaWQgIk1pc3NpbmciCi1tc2dzdHIgIlRoaeG6v3UiCi0KLSM6IGdpdC1ndWkuc2g6MjExNQotbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKLW1zZ3N0ciAixJDDoyDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGfhu6EgYuG7jyIKLQotIzogZ2l0LWd1aS5zaDoyMTE2Ci1tc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgotbXNnc3RyICLEkMOjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gZ+G7oSBi4buPLCBuaMawbmcgduG6q24gaGnhu4duIGRp4buHbiIKLQotIzogZ2l0LWd1aS5zaDoyMTE4IGdpdC1ndWkuc2g6MjExOSBnaXQtZ3VpLnNoOjIxMjAgZ2l0LWd1aS5zaDoyMTIxCi0jOiBnaXQtZ3VpLnNoOjIxMjIgZ2l0LWd1aS5zaDoyMTIzCi1tc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKLW1zZ3N0ciAiQ8OhYyB5w6p1IGPhuqd1IHBow6JuIGdp4bqjaSBow7JhIHRy4buZbiIKLQotIzogZ2l0LWd1aS5zaDoyMTU4Ci1tc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAixJBhbmcga2jhu59pIMSR4buZbmcgZ2l0ay4uLiB2dWkgbMOybmcgY2jhu50uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjE3MAotbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgZ2l0ayB0cm9uZyBQQVRIIgotCi0jOiBnaXQtZ3VpLnNoOjIyMjkKLW1zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGdpdCBndWkgdHJvbmcgUEFUSCIKLQotIzogZ2l0LWd1aS5zaDoyNjQ4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDAKLW1zZ2lkICJSZXBvc2l0b3J5IgotbXNnc3RyICJLaG8iCi0KLSM6IGdpdC1ndWkuc2g6MjY0OQotbXNnaWQgIkVkaXQiCi1tc2dzdHIgIkNo4buJbmggc+G7rWEiCi0KLSM6IGdpdC1ndWkuc2g6MjY1MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Ci1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJOaMOhbmgiCi0KLSM6IGdpdC1ndWkuc2g6MjY1NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU0Ci1tc2dpZCAiQ29tbWl0QEBub3VuIgotbXNnc3RyICJDaHV54buDbiBnaWFvQEBub3VuIgotCi0jOiBnaXQtZ3VpLnNoOjI2NTcgbGliL21lcmdlLnRjbDoxMjMgbGliL21lcmdlLnRjbDoxNTIgbGliL21lcmdlLnRjbDoxNzAKLW1zZ2lkICJNZXJnZSIKLW1zZ3N0ciAiVHLhu5luIgotCi0jOiBnaXQtZ3VpLnNoOjI2NTggbGliL2Nob29zZV9yZXYudGNsOjU2MwotbXNnaWQgIlJlbW90ZSIKLW1zZ3N0ciAiTcOheSBjaOG7pyIKLQotIzogZ2l0LWd1aS5zaDoyNjYxCi1tc2dpZCAiVG9vbHMiCi1tc2dzdHIgIkPDtG5nIGPhu6UiCi0KLSM6IGdpdC1ndWkuc2g6MjY3MAotbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgotbXNnc3RyICJRdcOpdCBkw7IgdGjGsCBt4bulYyBsw6BtIHZp4buHYyIKLQotIzogZ2l0LWd1aS5zaDoyNjc2Ci1tc2dpZCAiR2l0IEJhc2giCi1tc2dzdHIgIkdpdCBCYXNoIgotCi0jOiBnaXQtZ3VpLnNoOjI2ODYKLW1zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKLW1zZ3N0ciAiRHV54buHdCBjw6FjIFThuq1wIHRpbiDhu58gbmjDoW5oIGhp4buHbiBuYXkiCi0KLSM6IGdpdC1ndWkuc2g6MjY5MAotbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCi1tc2dzdHIgIkR1eeG7h3QgY8OhYyB04bqtcCB0aW4gbmjDoW5oLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI2OTUKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgotbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhu7FjIHF1YW4gbOG7i2NoIHPhu60gbmjDoW5oIGhp4buHbiBuYXkiCi0KLSM6IGdpdC1ndWkuc2g6MjY5OQotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCi1tc2dzdHIgIkhp4buDbiB0aOG7iyB0cuG7sWMgcXVhbiBs4buLY2ggc+G7rSBt4buNaSBuaMOhbmgiCi0KLSM6IGdpdC1ndWkuc2g6MjcwNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgotbXNnc3RyICJEdXnhu4d0IHThuq1wIHRpbiBj4bunYSAlcy4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzA4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKLW1zZ3N0ciAiRHV54buHdCBs4buLY2ggc+G7rSBj4bunYSAlcyB0cuG7sWMgcXVhbiIKLQotIzogZ2l0LWd1aS5zaDoyNzEzIGxpYi9kYXRhYmFzZS50Y2w6NDAgbGliL2RhdGFiYXNlLnRjbDo2NgotbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCi1tc2dzdHIgIlRo4buRbmcga8OqIGPGoSBz4bufIGThu68gbGnhu4d1IgotCi0jOiBnaXQtZ3VpLnNoOjI3MTYgbGliL2RhdGFiYXNlLnRjbDozMwotbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgotbXNnc3RyICJOw6luIGPGoSBz4bufIGThu68gbGnhu4d1IgotCi0jOiBnaXQtZ3VpLnNoOjI3MTkKLW1zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCi1tc2dzdHIgIlRo4bqpbSB0cmEgY8ahIHPhu58gZOG7ryBsaeG7h3UiCi0KLSM6IGdpdC1ndWkuc2g6MjcyNiBnaXQtZ3VpLnNoOjI3MzAgZ2l0LWd1aS5zaDoyNzM0IGxpYi9zaG9ydGN1dC50Y2w6OAotIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCi1tc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKLW1zZ3N0ciAiVOG6oW8gbOG7kWkgdOG6r3Qg4bufIG3DoG4gaMOsbmggbuG7gW4iCi0KLSM6IGdpdC1ndWkuc2g6Mjc0MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjIwMAotbXNnaWQgIlF1aXQiCi1tc2dzdHIgIlRob8OhdCIKLQotIzogZ2l0LWd1aS5zaDoyNzUwCi1tc2dpZCAiVW5kbyIKLW1zZ3N0ciAiSOG7p3kgbOG7h25oIHbhu6thIHLhu5NpIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTMKLW1zZ2lkICJSZWRvIgotbXNnc3RyICJMw6BtIGzhuqFpIgotCi0jOiBnaXQtZ3VpLnNoOjI3NTcgZ2l0LWd1aS5zaDozMzYyCi1tc2dpZCAiQ3V0IgotbXNnc3RyICJD4bqvdCIKLQotIzogZ2l0LWd1aS5zaDoyNzYwIGdpdC1ndWkuc2g6MzM2NSBnaXQtZ3VpLnNoOjM0MzkgZ2l0LWd1aS5zaDozNTI0Ci0jOiBsaWIvY29uc29sZS50Y2w6NjkKLW1zZ2lkICJDb3B5IgotbXNnc3RyICJDaMOpcCIKLQotIzogZ2l0LWd1aS5zaDoyNzYzIGdpdC1ndWkuc2g6MzM2OAotbXNnaWQgIlBhc3RlIgotbXNnc3RyICJEw6FuIgotCi0jOiBnaXQtZ3VpLnNoOjI3NjYgZ2l0LWd1aS5zaDozMzcxIGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyOAotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOQotbXNnaWQgIkRlbGV0ZSIKLW1zZ3N0ciAiWMOzYSBi4buPIgotCi0jOiBnaXQtZ3VpLnNoOjI3NzAgZ2l0LWd1aS5zaDozMzc1IGdpdC1ndWkuc2g6MzUyOCBsaWIvY29uc29sZS50Y2w6NzEKLW1zZ2lkICJTZWxlY3QgQWxsIgotbXNnc3RyICJDaOG7jW4gdOG6pXQgY+G6oyIKLQotIzogZ2l0LWd1aS5zaDoyNzc5Ci1tc2dpZCAiQ3JlYXRlLi4uIgotbXNnc3RyICJU4bqhby4uLiIKLQotIzogZ2l0LWd1aS5zaDoyNzg1Ci1tc2dpZCAiQ2hlY2tvdXQuLi4iCi1tc2dzdHIgIkzhuqV5IHJhLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3OTEKLW1zZ2lkICJSZW5hbWUuLi4iCi1tc2dzdHIgIsSQ4buVaSB0w6puLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI3OTYKLW1zZ2lkICJEZWxldGUuLi4iCi1tc2dzdHIgIljDs2EuLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjgwMQotbXNnaWQgIlJlc2V0Li4uIgotbXNnc3RyICLEkOG6t3QgbOG6oWkuLiIKLQotIzogZ2l0LWd1aS5zaDoyODExCi1tc2dpZCAiRG9uZSIKLW1zZ3N0ciAiWG9uZyIKLQotIzogZ2l0LWd1aS5zaDoyODEzCi1tc2dpZCAiQ29tbWl0QEB2ZXJiIgotbXNnc3RyICJDaHV54buDbiBnaWFvQEB2ZXJiIgotCi0jOiBnaXQtZ3VpLnNoOjI4MjIgZ2l0LWd1aS5zaDozMzAzCi1tc2dpZCAiTmV3IENvbW1pdCIKLW1zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBt4bubaSIKLQotIzogZ2l0LWd1aS5zaDoyODMwIGdpdC1ndWkuc2g6MzMxMAotbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgotbXNnc3RyICJUdSBi4buVIGzhuqduIGNodXnhu4NuIGdpYW8gY3Xhu5FpIgotCi0jOiBnaXQtZ3VpLnNoOjI4NDAgZ2l0LWd1aS5zaDozMjY0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTAxCi1tc2dpZCAiUmVzY2FuIgotbXNnc3RyICJRdcOpdCBs4bqhaSIKLQotIzogZ2l0LWd1aS5zaDoyODQ2Ci1tc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgotbXNnc3RyICLEkMawYSBsw6puIGLhu4cgcGjDs25nIMSR4buDIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6Mjg1MgotbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgotbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gxJHDoyB0aGF5IMSR4buVaSBj4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjI4NTgKLW1zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgotbXNnc3RyICLEkMawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcgxJHhu4Mga2jDtG5nIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6Mjg2NCBsaWIvaW5kZXgudGNsOjQ0MgotbXNnaWQgIlJldmVydCBDaGFuZ2VzIgotbXNnc3RyICJIb8OgbiBuZ3V5w6puIGPDoWMgdGhheSDEkeG7lWkiCi0KLSM6IGdpdC1ndWkuc2g6Mjg3MiBnaXQtZ3VpLnNoOjM1NzUgZ2l0LWd1aS5zaDozNjA2Ci1tc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCi1tc2dzdHIgIkhp4buHbiDDrXQgbuG7mWkgZHVuZyBoxqFuIgotCi0jOiBnaXQtZ3VpLnNoOjI4NzYgZ2l0LWd1aS5zaDozNTc5IGdpdC1ndWkuc2g6MzYxMAotbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgotbXNnc3RyICJIaeG7h24gY2hpIHRp4bq/dCBoxqFuIgotCi0jOiBnaXQtZ3VpLnNoOjI4ODMgZ2l0LWd1aS5zaDozMjc3IGdpdC1ndWkuc2g6MzM4NgotbXNnaWQgIlNpZ24gT2ZmIgotbXNnc3RyICJLw70gdMOqbiIKLQotIzogZ2l0LWd1aS5zaDoyODk5Ci1tc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCi1tc2dzdHIgIlRy4buZbiBu4buZaSBi4buZLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5MDQKLW1zZ2lkICJBYm9ydCBNZXJnZS4uLiIKLW1zZ3N0ciAiSOG7p3kgYuG7jyBow7JhIHRy4buZbi4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTE2IGdpdC1ndWkuc2g6Mjk0NAotbXNnaWQgIkFkZC4uLiIKLW1zZ3N0ciAiVGjDqm0uLi4iCi0KLSM6IGdpdC1ndWkuc2g6MjkyMAotbXNnaWQgIlB1c2guLi4iCi1tc2dzdHIgIsSQ4bqpeSBsw6puLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5MjQKLW1zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgotbXNnc3RyICJYb8OhIG5ow6FuaC4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTM0IGdpdC1ndWkuc2g6MzU1NwotbXNnaWQgIk9wdGlvbnMuLi4iCi1tc2dzdHIgIlTDuXkgY2jhu41uLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjI5NDUKLW1zZ2lkICJSZW1vdmUuLi4iCi1tc2dzdHIgIkfhu6EgYuG7jy4uLiIKLQotIzogZ2l0LWd1aS5zaDoyOTU0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQKLW1zZ2lkICJIZWxwIgotbXNnc3RyICJUcuG7oyBnacO6cCIKLQotIzogZ2l0LWd1aS5zaDoyOTU4IGdpdC1ndWkuc2g6Mjk2MiBsaWIvYWJvdXQudGNsOjE0Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBYm91dCAlcyIKLW1zZ3N0ciAiR2nhu5tpIHRoaeG7h3UgduG7gSAlcyIKLQotIzogZ2l0LWd1aS5zaDoyOTg2Ci1tc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCi1tc2dzdHIgIsSQ4buNYyB0w6BpIGxp4buHdSB0cuG7sWMgdHV54bq/biIKLQotIzogZ2l0LWd1aS5zaDoyOTg5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MAotbXNnaWQgIlNob3cgU1NIIEtleSIKLW1zZ3N0ciAiSGnhu4duIGtob8OhIFNTSCIKLQotIzogZ2l0LWd1aS5zaDozMDA4IGdpdC1ndWkuc2g6MzE0MAotbXNnaWQgIlVzYWdlIgotbXNnc3RyICJDw6FjaCBkw7luZyIKLQotIzogZ2l0LWd1aS5zaDozMDg5IGxpYi9ibGFtZS50Y2w6NTczCi1tc2dpZCAiRXJyb3IiCi1tc2dzdHIgIkzhu5dpIgotCi0jOiBnaXQtZ3VpLnNoOjMxMjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLW1zZ3N0ciAiIgotImzhu5dpIG5naGnDqm0gdHLhu41uZzoga2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gduG7gSDEkcaw4budbmcgZOG6q24gJXM6IEtow7RuZyBjw7MgdOG6rXAgdGluICIKLSJob+G6t2MgdGjGsCBt4bulYyBuaMawIHbhuq15IgotCi0jOiBnaXQtZ3VpLnNoOjMxNTMKLW1zZ2lkICJDdXJyZW50IEJyYW5jaDoiCi1tc2dzdHIgIk5ow6FuaCBoaeG7h24gaMOgbmg6IgotCi0jOiBnaXQtZ3VpLnNoOjMxNzkKLW1zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgotbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB0aGF5IMSR4buVaSAoU+G6vSBjaHV54buDbiBnaWFvKSIKLQotIzogZ2l0LWd1aS5zaDozMTk5Ci1tc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKLW1zZ3N0ciAiQuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSIKLQotIzogZ2l0LWd1aS5zaDozMjcwCi1tc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKLW1zZ3N0ciAixJDhurd0IGzDqm4gYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSIKLQotIzogZ2l0LWd1aS5zaDozMjg5IGxpYi90cmFuc3BvcnQudGNsOjEzNyBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKLW1zZ2lkICJQdXNoIgotbXNnc3RyICLEkOG6qXkgbMOqbiIKLQotIzogZ2l0LWd1aS5zaDozMzI0Ci1tc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIlBo4bqnbiBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyBraOG7n2kgdOG6oW86IgotCi0jOiBnaXQtZ3VpLnNoOjMzMjUKLW1zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiUGjhuqduIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHR1IGLhu5U6IgotCi0jOiBnaXQtZ3VpLnNoOjMzMjYKLW1zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJQaOG6p24gY2jDuiBnaeG6o2kgY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdHUgYuG7lSBs4bqnbiBraOG7n2kgdOG6oW86IgotCi0jOiBnaXQtZ3VpLnNoOjMzMjcKLW1zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiUGjhuqduIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHR1IGLhu5UgbOG6p24gaMOyYSB0cuG7mW4iCi0KLSM6IGdpdC1ndWkuc2g6MzMyOAotbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiR2hpIGNow7ogY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbjoiCi0KLSM6IGdpdC1ndWkuc2g6MzMyOQotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiQ2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbzoiCi0KLSM6IGdpdC1ndWkuc2g6MzM3OCBnaXQtZ3VpLnNoOjM1MzIgbGliL2NvbnNvbGUudGNsOjczCi1tc2dpZCAiQ29weSBBbGwiCi1tc2dzdHIgIkNow6lwIHThuqV0IGPhuqMiCi0KLSM6IGdpdC1ndWkuc2g6MzQwMiBsaWIvYmxhbWUudGNsOjEwNQotbXNnaWQgIkZpbGU6IgotbXNnc3RyICJU4bqtcCB0aW46IgotCi0jOiBnaXQtZ3VpLnNoOjM1MjAKLW1zZ2lkICJSZWZyZXNoIgotbXNnc3RyICJMw6BtIHTGsMahaSBs4bqhaSIKLQotIzogZ2l0LWd1aS5zaDozNTQxCi1tc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgotbXNnc3RyICJHaeG6o20ga8OtY2ggY+G7oSBwaMO0bmciCi0KLSM6IGdpdC1ndWkuc2g6MzU0NQotbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKLW1zZ3N0ciAiVMSDbmcga8OtY2ggY+G7oSBwaMO0bmciCi0KLSM6IGdpdC1ndWkuc2g6MzU1MyBsaWIvYmxhbWUudGNsOjI5NAotbXNnaWQgIkVuY29kaW5nIgotbXNnc3RyICJC4bqjbmcgbcOjIgotCi0jOiBnaXQtZ3VpLnNoOjM1NjQKLW1zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCi1tc2dzdHIgIsOBcCBk4bulbmcgaGF5IMSR4bqjbyBuZ8aw4bujYyBj4bqjIGto4buRaSIKLQotIzogZ2l0LWd1aS5zaDozNTY5Ci1tc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgotbXNnc3RyICLDgXAgZOG7pW5nIGhheSDEkeG6o28gbmfGsOG7o2MgZMOybmciCi0KLSM6IGdpdC1ndWkuc2g6MzU4OAotbXNnaWQgIlJ1biBNZXJnZSBUb29sIgotbXNnc3RyICJDaOG6oXkgY8O0bmcgY+G7pSBow7JhIHRy4buZbiIKLQotIzogZ2l0LWd1aS5zaDozNTkzCi1tc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgotbXNnc3RyICJEw7luZyBwaGnDqm4gYuG6o24g4bufIG3DoXkgY2jhu6ciCi0KLSM6IGdpdC1ndWkuc2g6MzU5NwotbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgotbXNnc3RyICJEw7luZyBwaGnDqm4gYuG6o24g4bufIG3DoXkgbuG7mWkgYuG7mSIKLQotIzogZ2l0LWd1aS5zaDozNjAxCi1tc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCi1tc2dzdHIgIlRy4bufIGzhuqFpIGPGoSBi4bqjbiIKLQotIzogZ2l0LWd1aS5zaDozNjE5Ci1tc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4buxYyBxdWFuIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgbcO0LcSRdW4gY29uIgotCi0jOiBnaXQtZ3VpLnNoOjM2MjMKLW1zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgotbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhu7FjIHF1YW4gbOG7i2NoIHPhu60gbmjDoW5oIGhp4buHbiB04bqhaSB0cm9uZyBtw7QtxJF1biBjb24iCi0KLSM6IGdpdC1ndWkuc2g6MzYyNwotbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4buxYyBxdWFuIGzhu4tjaCBz4butIG3hu41pIG5ow6FuaCB0cm9uZyBtw7QtxJF1biBjb24iCi0KLSM6IGdpdC1ndWkuc2g6MzYzMgotbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKLW1zZ3N0ciAiS2jhu59pIGNo4bqheSBnaXQgZ3VpIHRyb25nIG3DtC3EkXVuLWNvbiIKLQotIzogZ2l0LWd1aS5zaDozNjY3Ci1tc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgotbXNnc3RyICJC4buPIMSRw6FuaCBk4bqldSDEkW/huqFuIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MzY2OQotbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCi1tc2dzdHIgIkLhu48gxJHDoW5oIGThuqV1IGPDoWMgZMOybmcgY+G6p24gY2h1eeG7g24gZ2lhbyIKLQotIzogZ2l0LWd1aS5zaDozNjcxCi1tc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgotbXNnc3RyICJC4buPIMSRw6FuaCBk4bqldSBkw7JuZyBj4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXQtZ3VpLnNoOjM2NzQKLW1zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCi1tc2dzdHIgIsSQw6FuaCBk4bqldSDEkW/huqFuIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MzY3NgotbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCi1tc2dzdHIgIsSQw6FuaCBk4bqldSBjw6FjIGTDsm5nIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MzY3OAotbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKLW1zZ3N0ciAixJDDoW5oIGThuqV1IGTDsm5nIGPhuqduIGNodXnhu4NuIGdpYW8iCi0KLSM6IGdpdC1ndWkuc2g6MzcwMwotbXNnaWQgIkluaXRpYWxpemluZy4uLiIKLW1zZ3N0ciAixJBhbmcga2jhu59pIHThuqFvLi4uIgotCi0jOiBnaXQtZ3VpLnNoOjM4NDYKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjUyMworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgotIlxuIgotIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgotImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgotImJ5ICVzOlxuIgotIlxuIgorImh1bmtzIGRvIG5vdCBvdmVybGFwOlxuIgorIiUuKnNcbiIKKyJcdGRvZXMgbm90IGVuZCB3aXRoOlxuIgorIiUuKnMiCiBtc2dzdHIgIiIKLSJH4bqnbiBuaMawIGNo4bqvYyBjaOG6r24gbMOgIG3DtGkgdHLGsOG7nW5nIHThu5NuIHThuqFpLlxuIgotIlxuIgotIkPDoWMgYmnhur9uIG3DtGkgdHLGsOG7nW5nIHNhdSDEkcOieSBjw7MgbOG6vSBz4bq9IGLhu4sgYuG7jyBxdWEgYuG7n2kgY8OhYyB0aeG6v24gdHLDrG5oIGNvbiBnaXRcbiIKLSJjaOG6oXkgYuG7n2kgJXM6XG4iCi0iXG4iCisiY8OhYyBraOG7kWkga2jDtG5nIGNo4buTbmcgxJHDqCBsw6puIG5oYXU6XG4iCisiJS4qc1xuIgorIlx0a2jDtG5nIMSRxrDhu6NjIGvhur90IHRow7pjIGLhurFuZzpcbiIKKyIlLipzIgogCi0jOiBnaXQtZ3VpLnNoOjM4NzUKKyM6IGFkZC1wYXRjaC5jOjc5OSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTIKK21zZ2lkICJNYW51YWwgaHVuayBlZGl0IG1vZGUgLS0gc2VlIGJvdHRvbSBmb3IgYSBxdWljayBndWlkZS5cbiIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgc+G7rWEga2jDumMgYuG6sW5nIHRheSAtLSB4ZW0g4bufIMSRw6F5IMSR4buDIGPDsyBoxrDhu5tuZyBk4bqrbiBz4butIGThu6VuZyBuaGFuaC5cbiIKKworIzogYWRkLXBhdGNoLmM6ODAzCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJcbiIKLSJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCi0iVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVjJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlYyB3aWxsIGJlIHJlbW92ZWQuXG4iCiBtc2dzdHIgIiIKLSJcbiIKLSJDw6FpIG7DoHkgY8OzIG5ndXnDqm4gbmjDom4gYuG7n2kgbeG7mXQgbOG7l2kgcGjDoXQgcmEgdOG7q1xuIgotIlRjbCBwaMOibiBwaOG7kWkgYuG7n2kgQ3lnd2luLiIKKyItLS1cbiIKKyLEkOG7gyBn4buhIGLhu48g4oCcJWPigJ0gZMOybmcsIGzDoG0gY2jDum5nIHRow6BuaCBuaOG7r25nIGTDsm5nICcgJyAobuG7mWkgZHVuZykuXG4iCisixJDhu4MgZ8O1IGLhu48g4oCcJWPigJ0gZMOybmcsIHjDs2EgY2jDum5nIMSRaS5cbiIKKyJOaOG7r25nIGTDsm5nIGLhuq90IMSR4bqndSBi4bqxbmcgJWMgc+G6vSBi4buLIGxv4bqhaSBi4buPLlxuIgogCi0jOiBnaXQtZ3VpLnNoOjM4ODAKLSMsIHRjbC1mb3JtYXQKKyM6IGFkZC1wYXRjaC5jOjgxMAogbXNnaWQgIiIKLSJcbiIKLSJcbiIKLSJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCi0iaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCi0idXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKLSJ+Ly5naXRjb25maWcgZmlsZS5cbiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy5cbiIKIG1zZ3N0ciAiIgotIlxuIgotIlxuIgotIlRoYXkgdGjhur8gdOG7kXQgY2hvICVzXG4iCi0ibMOgIHRoYXkgdGjhur8gY8OhYyBnacOhIHRy4buLIGPDoGkgxJHhurd0IGNobyB1c2VyLm5hbWUgdsOgXG4iCi0idXNlci5lbWFpbCB0aMOgbmggdOG6rXAgdGluIGPDoSBuaMOibiBj4bunYSBi4bqhblxuIgotIn4vLmdpdGNvbmZpZy5cbiIKKyJO4bq/dSBtaeG6v25nIHbDoSDEkcaw4bujYyDDoXAgZOG7pW5nIHPhuqFjaCBz4bq9LCBraMO6YyDEkcOjIHPhu61hIHPhur0gbmdheSBs4bqtcCB04bupY1xuIgorIsSRxrDhu6NjIMSRw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBsw6puIGLhu4cgcGjDs25nLlxuIgogCi0jOiBsaWIvYWJvdXQudGNsOjI2Ci1tc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgotbXNnc3RyICJnaXQtZ3VpIC0gY8O0bmcgY+G7pSDEkeG7kyBo4buNYSBkw6BuaCBjaG8gR2l0LiIKLQotIzogbGliL2JsYW1lLnRjbDo3MwotbXNnaWQgIkZpbGUgVmlld2VyIgotbXNnc3RyICJC4buZIFhlbSBU4bqtcCBUaW4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NzkKLW1zZ2lkICJDb21taXQ6IgotbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvOiIKLQotIzogbGliL2JsYW1lLnRjbDoyODAKLW1zZ2lkICJDb3B5IENvbW1pdCIKLW1zZ3N0ciAiQ2jDqXAgbOG6p24gY2h1eeG7g24gZ2lhbyIKLQotIzogbGliL2JsYW1lLnRjbDoyODQKLW1zZ2lkICJGaW5kIFRleHQuLi4iCi1tc2dzdHIgIlTDrG0gY2jhu68uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6Mjg4Ci1tc2dpZCAiR290byBMaW5lLi4uIgotbXNnc3RyICJOaOG6o3kgxJHhur9uIGTDsm5nLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjI5NwotbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCi1tc2dzdHIgIlRo4buxYyBoaeG7h24gZMOyIHTDrG0gY2jDqXAgdG/DoG4gYuG7mSIKLQotIzogbGliL2JsYW1lLnRjbDozMDEKLW1zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKLW1zZ3N0ciAiSGnhu4NuIHRo4buLIG7hu5lpIGR1bmcgY+G7p2EgbOG7i2NoIHPhu60iCi0KLSM6IGxpYi9ibGFtZS50Y2w6MzA0Ci1tc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKLW1zZ3N0ciAiWGVtIGPDtG5nIHRy4bqhbmcgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyBjaGEgbeG6uSIKLQotIzogbGliL2JsYW1lLnRjbDo0NjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZWFkaW5nICVzLi4uIgotbXNnc3RyICLEkGFuZyDEkeG7jWMgJXMuLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NTk0Ci1tc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCi1tc2dzdHIgIsSQYW5nIHThuqNpIHBo4bqnbiBjaMO6IGdp4bqjaSB0aGVvIGTDtWkgY2jDqXAvY2h1eeG7g24uLi4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6NjE0Ci1tc2dpZCAibGluZXMgYW5ub3RhdGVkIgotbXNnc3RyICJkw7JuZyBjaMO6IGdp4bqjaSIKLQotIzogbGliL2JsYW1lLnRjbDo4MDYKLW1zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgotbXNnc3RyICLEkGFuZyB04bqjaSBjw6FjIGNow7ogZ2nhuqNpIHbhu4sgdHLDrSBuZ3V5w6puIGfhu5FjLi4uIgotCi0jOiBsaWIvYmxhbWUudGNsOjgwOQotbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgotbXNnc3RyICJDaMO6IGdp4bqjaSBob8OgbiB04bqldC4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODM5Ci1tc2dpZCAiQnVzeSIKLW1zZ3N0ciAiQuG6rW4iCi0KLSM6IGxpYi9ibGFtZS50Y2w6ODQwCi1tc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCi1tc2dzdHIgIlRp4bq/biB0csOsbmggY2jDuiBnaeG6o2kgxJFhbmcgZGnhu4VuIHJhLiIKLQotIzogbGliL2JsYW1lLnRjbDo4NzkKLW1zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgotbXNnc3RyICLEkGFuZyBjaOG6oXkgZMOyIHTDrG0gc2FvIGNow6lwIHRvw6BuIGRp4buHbi4uLiIKLQotIzogbGliL2JsYW1lLnRjbDo5NDcKLW1zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCi1tc2dzdHIgIsSQYW5nIHThuqNpIHBo4bqnbiBjaMO6IGdp4bqjaS4uLiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDAwCi1tc2dpZCAiQXV0aG9yOiIKLW1zZ3N0ciAiVMOhYyBnaeG6ozoiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTAwNAotbXNnaWQgIkNvbW1pdHRlcjoiCi1tc2dzdHIgIk5nxrDhu51pIGNodXnhu4NuIGdpYW86IgotCi0jOiBsaWIvYmxhbWUudGNsOjEwMDkKLW1zZ2lkICJPcmlnaW5hbCBGaWxlOiIKLW1zZ3N0ciAiVOG6rXAgdGluIGfhu5FjOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMDU3Ci1tc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgotbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgSEVBRCBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvOiIKLQotIzogbGliL2JsYW1lLnRjbDoxMTEyCi1tc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCi1tc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBs4bqnbiBjaHV54buDbiBnaWFvIG3hurk6IgotCi0jOiBsaWIvYmxhbWUudGNsOjExMjcKLW1zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBoaeG7g24gdGjhu4sgY2hhIG3hurkiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTEyOCBsaWIvZGlmZi50Y2w6MzQxCi1tc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqNpIGRpZmY6IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyNjkKLW1zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKLW1zZ3N0ciAiTmd1ecOqbiBn4buRYyBi4bufaToiCi0KLSM6IGxpYi9ibGFtZS50Y2w6MTI3NQotbXNnaWQgIkluIEZpbGU6IgotbXNnc3RyICJUcm9uZyB04bqtcCB0aW46IgotCi0jOiBsaWIvYmxhbWUudGNsOjEyODAKLW1zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCi1tc2dzdHIgIsSQw6MgY2jDqXAgaG/hurdjIERpIGNodXnhu4NuIMSR4bq/biDEkcOieSBi4bufaToiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE2IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIxCi1tc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgotbXNnc3RyICJM4bqleSByYSBuaMOhbmgiCi0KLSM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI2Ci1tc2dpZCAiQ2hlY2tvdXQiCi1tc2dzdHIgIkzhuqV5IHJhIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMCBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzcKLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI5MgotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0NSBsaWIvbWVyZ2UudGNsOjE3NAotIzogbGliL29wdGlvbi50Y2w6MTI3IGxpYi9yZW1vdGVfYWRkLnRjbDozNCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQzCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo0MSBsaWIvdG9vbHNfZGxnLnRjbDoyMDIgbGliL3Rvb2xzX2RsZy50Y2w6MzQ1Ci0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNDEKLW1zZ2lkICJDYW5jZWwiCi1tc2dzdHIgIlRow7RpIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNSBsaWIvYnJvd3Nlci50Y2w6Mjk3IGxpYi90b29sc19kbGcudGNsOjMyMQotbXNnaWQgIlJldmlzaW9uIgotbXNnc3RyICLEkGnhu4NtIHPhu61hIMSR4buVaSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjMwOQotbXNnaWQgIk9wdGlvbnMiCi1tc2dzdHIgIlTDuXkgY2jhu41uIgotCi0jOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0MiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKLW1zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCi1tc2dzdHIgIkzhuqV5IHbhu4EgbmjDoW5oIMSRxrDhu6NjIHRoZW8gZMO1aSIKLQotIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDcKLW1zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCi1tc2dzdHIgIlTDoWNoIHLhu51pIHThu6sgTmjDoW5oIG7hu5lpIGLhu5kiCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMwotbXNnaWQgIkNyZWF0ZSBCcmFuY2giCi1tc2dzdHIgIlThuqFvIG5ow6FuaCIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI4Ci1tc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCi1tc2dzdHIgIlThuqFvIG5ow6FuaCBt4bubaSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCi1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICJU4bqhbyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQyCi1tc2dpZCAiQnJhbmNoIE5hbWUiCi1tc2dzdHIgIlTDqm4gbmjDoW5oIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDQgbGliL3JlbW90ZV9hZGQudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjUxCi1tc2dpZCAiTmFtZToiCi1tc2dzdHIgIlTDqm46IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTcKLW1zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKLW1zZ3N0ciAiS2jhu5twIHbhu5tpIHTDqm4gbmjDoW5oIMSRxrDhu6NjIHRoZW8gZMO1aSIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Ci1tc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCi1tc2dzdHIgIsSQaeG7g20gxJHhuqd1IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKLW1zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKLW1zZ3N0ciAiQ+G6rXAgbmjhuq10IG5ow6FuaCBz4bq1biBjw7M6IgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKLW1zZ2lkICJObyIKLW1zZ3N0ciAiS2jDtG5nIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKLW1zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKLW1zZ3N0ciAiQ2jhu4kgZmFzdC1mb3J3YXJkIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKLW1zZ2lkICJSZXNldCIKLW1zZ3N0ciAixJDhurd0IGzhuqFpIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTcKLW1zZ2lkICJDaGVja291dCBBZnRlciBDcmVhdGlvbiIKLW1zZ3N0ciAiTOG6pXkgcmEgc2F1IGtoaSB04bqhbyIKLQotIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMgotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgotbXNnc3RyICJWdWkgbMOybmcgY2jhu41uIG5ow6FuaCB0aGVvIGTDtWkuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgotbXNnc3RyICJOaMOhbmggdGhlbyBkw7VpICVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IG5ow6FuaCB0csOqbiBraG8gY2jhu6lhIG3DoXkgY2jhu6cuIgotCi0jOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTU0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5MgotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCi1tc2dzdHIgIkjDo3kgY3VuZyBj4bqlcCB0w6puIG5ow6FuaC4iCi0KLSM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjUgbGliL2JyYW5jaF9yZW5hbWUudGNsOjExMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgotbXNnc3RyICInJXMnIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHTDqm4gbmjDoW5oIMSRxrDhu6NjIGNo4bqlcCBuaOG6rW4uIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTYKLW1zZ2lkICJEZWxldGUgQnJhbmNoIgotbXNnc3RyICJYb8OhIG5ow6FuaCIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIxCi1tc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKLW1zZ3N0ciAiWMOzYSBuaMOhbmggbuG7mWkgYuG7mSIKLQotIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM5Ci1tc2dpZCAiTG9jYWwgQnJhbmNoZXMiCi1tc2dzdHIgIk5ow6FuaCBu4buZaSBi4buZIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTEKLW1zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKLW1zZ3N0ciAiQ2jhu4kgeMOzYSBu4bq/dSDEkcOjIGjDsmEgdHLhu5luIHbDoG8iCi0KLSM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEyMAotbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKLW1zZ3N0ciAiTHXDtG4gKEtow7RuZyB0aOG7sWMgaGnhu4duIGtp4buDbSB0cmEgaMOyYSB0cuG7mW4pIgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgotbXNnc3RyICJDw6FjIG5ow6FuaCBzYXUgxJHDonkga2jDtG5nIMSRxrDhu6NjIGjDsmEgdHLhu5luIGhvw6BuIHRvw6BuIHbDoG8gJXM6IgotCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE4CisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBhZGQtcGF0Y2guYzo4MTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2CiBtc2dpZCAiIgotIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCi0iXG4iCi0iRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCiBtc2dzdHIgIiIKLSJLaMO0aSBwaOG7pWMgY8OhYyBuaMOhbmggxJHDoyBi4buLIHjDs2EgbMOgIHZp4buHYyBraMOzIGtoxINuLlxuIgotIlxuIgotIljDs2EgbmjDoW5oIMSRw6MgY2jhu41uIGNo4bupPyIKKyJO4bq/dSBtaeG6v25nIHbDoSBraMO0bmcgxJHGsOG7o2Mgw6FwIGThu6VuZyBz4bqhY2ggc+G6vSwgYuG6oW4gc+G6vSBjw7MgbeG7mXQgY8ahIGjhu5lpXG4iCisixJHhu4Mgc+G7rWEgbOG6p24gbuG7r2EuIE7hur91IG3hu41pIGTDsm5nIGPhu6dhIGtow7pjIGLhu4sgeMOzYSBi4buPLCB0aOG6vyB0aMOsIG5o4buvbmdcbiIKKyJz4butYSBk4buVaSBz4bq9IGLhu4sgbG/huqFpIGLhu48sIHbDoCBraMO6YyB24bqrbiBnaeG7ryBuZ3V5w6puLlxuIgogCi0jOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCi0jLCB0Y2wtZm9ybWF0CisjOiBhZGQtcGF0Y2guYzo4NTEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgcGjhuqduIMSR4bqndSBraMO6YyIKKworIzogYWRkLXBhdGNoLmM6ODk1IGFkZC1wYXRjaC5jOjEyOTQKK21zZ2lkICInZ2l0IGFwcGx5IC0tY2FjaGVkJyBmYWlsZWQiCittc2dzdHIgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGfhurdwIGzhu5dpIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6OTUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQogbXNnaWQgIiIKLSJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgotIiVzIgorIllvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gKHNheWluZyBcIm5vXCIgZGlzY2FyZHMhKSBbeS9uXT8gIgogbXNnc3RyICIiCi0iR+G6t3AgbOG7l2kga2hpIHjDs2EgY8OhYyBuaMOhbmg6XG4iCisiSHVuayDEkcOjIHPhu61hIGPhu6dhIGLhuqFuIGtow7RuZyDEkcaw4bujYyDDoXAgZOG7pW5nLiBT4butYSBs4bqhaSBs4bqnbiBu4buvYSAobsOzaSBcIm5cIiDEkeG7gyBsb+G6oWkgIgorImLhu48hKSBbeS9uXT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMDA5Cittc2dpZCAiIgorInkgLSBzdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3RhZ2UgdGhpcyBhbmQgYWxsIHRoZSByZW1haW5pbmcgaHVua3NcbiIKKyJkIC0gZG8gbm90IHN0YWdlIHRoaXMgaHVuayBub3IgYW55IG9mIHRoZSByZW1haW5pbmcgaHVua3NcbiIKK21zZ3N0ciAiIgorInkgLSDEkcawYSBsw6puIGLhu4cgcGjDs25nIGtow7pjIG7DoHlcbiIKKyJuIC0gxJHhu6tuZyDEkcawYSBsw6puIGLhu4cgcGjDs25nIGtow7pjIG7DoHlcbiIKKyJxIC0gdGhvw6F0OyDEkeG7q25nIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgY8OybiBs4bqhaSBzYXUgbsOgeVxuIgorImQgLSDEkeG7q25nIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKworIzogYWRkLXBhdGNoLmM6MTAxNgorbXNnaWQgIiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImogLSDEkeG7gyBs4bqhaSBraMO6YyBuw6B5IGzDoCBjaMawYSBxdXnhur90IMSR4buLbmgsIHhlbSBraMO6YyBjaMawYSBxdXnhur90IMSR4buLbmgga+G6vyB0aeG6v3BcbiIKKyJKIC0gxJHhu4MgbOG6oWkga2jDumMgbsOgeSBsw6AgY2jGsGEgcXV54bq/dCDEkeG7i25oLCB4ZW0ga2jDumMga+G6vyB0aeG6v3BcbiIKKyJrIC0gxJHhu4MgbOG6oWkga2jDumMgbsOgeSBsw6AgY2jGsGEgcXV54bq/dCDEkeG7i25oLCB4ZW0ga2jDumMgY2jGsGEgcXV54bq/dCDEkeG7i25oIGvhur8gdHLGsOG7m2NcbiIKKyJLIC0gxJHhu4MgbOG6oWkga2jDumMgbsOgeSBsw6AgY2jGsGEgcXV54bq/dCDEkeG7i25oLCB4ZW0ga2jDumMga+G6vyB0csaw4bubY1xuIgorImcgLSBjaOG7jW4gbeG7mXQga2jDumMgbXXhu5FuIHThu5tpXG4iCisiLyAtIHTDrG0gbeG7mXQga2jDumMga2jhu5twIHbhu5tpIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSDEkcawYSByYVxuIgorInMgLSBjaGlhIGtow7pjIGhp4buHbiB04bqhaSB0aMOgbmggY8OhYyBraMO6YyBuaOG7jyBoxqFuXG4iCisiZSAtIHPhu61hIGLhurFuZyB0YXkga2jDumMgaGnhu4duIGjDoG5oXG4iCisiPyAtIGhp4buDbiB0aOG7iyB0cuG7oyBnacO6cFxuIgorCisjOiBhZGQtcGF0Y2guYzoxMTM3IGFkZC1wYXRjaC5jOjExNDcKK21zZ2lkICJObyBwcmV2aW91cyBodW5rIgorbXNnc3RyICJLaMO0bmcgY8OzIGtow7pjIGvhur8gdHLGsOG7m2MiCisKKyM6IGFkZC1wYXRjaC5jOjExNDIgYWRkLXBhdGNoLmM6MTE1MgorbXNnaWQgIk5vIG5leHQgaHVuayIKK21zZ3N0ciAiS2jDtG5nIGPDsyBraMO6YyBr4bq/IHRp4bq/cCIKKworIzogYWRkLXBhdGNoLmM6MTE1OAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG8iCittc2dzdHIgIktow7RuZyBjw7JuIGtow7pjIG7DoG8gxJHhu4MgbcOgIG5o4bqjeSDEkeG6v24iCisKKyM6IGFkZC1wYXRjaC5jOjExNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc3Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgIm5o4bqjeSDEkeG6v24ga2jDumMgbsOgbyAoPHJldD4gxJHhu4MgeGVtIHRow6ptKT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTcwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3OQorbXNnaWQgImdvIHRvIHdoaWNoIGh1bms/ICIKK21zZ3N0ciAibmjhuqN5IMSR4bq/biBraMO6YyBuw6BvPyAiCisKKyM6IGFkZC1wYXRjaC5jOjExODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcyciCittc2dzdHIgIlPhu5Ega2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBhZGQtcGF0Y2guYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAiUuG6pXQgdGnhur9jLCBjaOG7iSBjw7Mgc+G6tW4gJWQga2jDumMuIgorCisjOiBhZGQtcGF0Y2guYzoxMTk1Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIgorbXNnc3RyICJLaMO0bmcgY8OybiBraMO6YyBuw6BvIMSR4buDIG3DoCB0w6xtIGtp4bq/bSIKKworIzogYWRkLXBhdGNoLmM6MTIwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MjMKK21zZ2lkICJzZWFyY2ggZm9yIHJlZ2V4PyAiCittc2dzdHIgInTDrG0ga2nhur9tIGNobyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXk/ICIKKworIzogYWRkLXBhdGNoLmM6MTIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgc2VhcmNoIHJlZ2V4cCAlczogJXMiCittc2dzdHIgIsSQ4buLbmggZOG6oW5nIHTDrG0ga2nhur9tIGPhu6dhIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSBraMO0bmcgxJHDum5nICVzOiAlcyIKKworIzogYWRkLXBhdGNoLmM6MTIzMworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAiS2jDtG5nIHRo4bqleSBraMO6YyBuw6BvIGto4bubcCBt4bqrdSDEkcOjIGNobyIKKworIzogYWRkLXBhdGNoLmM6MTI0MAorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rIgorbXNnc3RyICJS4bqldCB0aeG6v2MsIGtow7RuZyB0aOG7gyBjaGlhIG5o4buPIGtow7pjIG7DoHkiCisKKyM6IGFkZC1wYXRjaC5jOjEyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIkNoaSBuaOG7jyB0aMOgbmggJWQga2jDumMuIgorCisjOiBhZGQtcGF0Y2guYzoxMjQ4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIKK21zZ3N0ciAiUuG6pXQgdGnhur9jLCBraMO0bmcgdGjhu4Mgc+G7rWEga2jDumMgbsOgeSIKKworIzogYWR2aWNlLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaGludDogJS4qcyVzXG4iCittc2dzdHIgIiVzZ+G7o2kgw706ICUuKnMlc1xuIgorCisjOiBhZHZpY2UuYzoxNjQKK21zZ2lkICJDaGVycnktcGlja2luZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKyJDaGVycnktcGlja2luZyBsw6Aga2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gYuG7n2kgdsOsIGLhuqFuIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyAiCisiaMOyYSB0cuG7mW4uIgorCisjOiBhZHZpY2UuYzoxNjYKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIkNvbW1pdCBsw6Aga2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gYuG7n2kgdsOsIGLhuqFuIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiTWVyZ2UgbMOgIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIGLhu59pIHbDrCBi4bqhbiBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4uIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIlB1bGwgbMOgIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIGLhu59pIHbDrCBi4bqhbiBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4uIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisiUmV2ZXJ0IGzDoCBraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBi4bufaSB2w6wgYuG6oW4gY8OzIG5o4buvbmcgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luLiIKKworIzogYWR2aWNlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIlZp4buHYyBuw6B5IGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHbhu5tpICVzIGLhu59pIHbDrCBi4bqhbiBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgIgorImjDsmEgdHLhu5luLiIKKworIzogYWR2aWNlLmM6MTgyCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIlPhu61hIGNow7puZyB0cm9uZyBjw6J5IGzDoG0gdmnhu4djLCB2w6Agc2F1IMSRw7MgZMO5bmcgbOG7h25oIOKAnGdpdCBhZGQvcm0gPHThuq1wLXRpbj7igJ1cbiIKKyJkw6BuaCByacOqbmcgY2hvIHZp4buHYyDEkcOhbmggZOG6pXUgY+G6p24gZ2nhuqNpIHF1eeG6v3QgdsOgIHThuqFvIGzhuqduIGNodXnhu4NuIGdpYW8uIgorCisjOiBhZHZpY2UuYzoxOTAKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIlRob8OhdCByYSBi4bufaSB2w6wgeHVuZyDEkeG7mXQga2jDtG5nIHRo4buDIGdp4bqjaSBxdXnhur90LiIKKworIzogYWR2aWNlLmM6MTk1IGJ1aWx0aW4vbWVyZ2UuYzoxMzMyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJC4bqhbiBjaMawYSBr4bq/dCB0aMO6YyB2aeG7h2MgaMOyYSB0cuG7mW4gKE1FUkdFX0hFQUQgduG6q24gdOG7k24gdOG6oWkpLiIKKworIzogYWR2aWNlLmM6MTk3Cittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAiVnVpIGzDsm5nIGNodXnhu4NuIGdpYW8gY8OhYyB0aGF5IMSR4buVaSB0csaw4bubYyBraGkgaMOyYSB0cuG7mW4uIgorCisjOiBhZHZpY2UuYzoxOTgKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIlRob8OhdCByYSBi4bufaSB2w6wgdmnhu4djIGjDsmEgdHLhu5luIGtow7RuZyBob8OgbiB04bqldC4iCisKKyM6IGFkdmljZS5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogc3dpdGNoaW5nIHRvICclcycuXG4iCisiXG4iCisiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisiY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpc1xuIgorInN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKyJkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZTpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgPG5ldy1icmFuY2gtbmFtZT5cbiIKKyJcbiIKKyJPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJUdXJuIG9mZiB0aGlzIGFkdmljZSBieSBzZXR0aW5nIGNvbmZpZyB2YXJpYWJsZSBhZHZpY2UuZGV0YWNoZWRIZWFkIHRvICIKKyJmYWxzZVxuIgorIlxuIgorbXNnc3RyICIiCisiQ2jDuiDDvTogxJFhbmcgY2h1eeG7g24gc2FuZyDigJwlc+KAnS5cbiIKKyJcbiIKKyJC4bqhbiDEkWFuZyDhu58gdMOsbmggdHLhuqFuZyDigJxkZXRhY2hlZCBIRUFE4oCdLiBC4bqhbiBjw7MgdGjhu4MgeGVtIHF1YSwgdOG6oW8gY8OhYyB0aGF5XG4iCisixJHhu5VpIHRo4butIG5naGnhu4dtIHbDoCBjaHV54buDbiBnaWFvIGNow7puZywgYuG6oW4gY8OzIHRo4buDIGxv4bqhaSBi4buPIGLhuqV0IGvhu7MgbOG6p24gY2h1eeG7g25cbiIKKyJnaWFvIG7DoG8gdHJvbmcgdMOsbmggdHLhuqFuZyBuw6B5IG3DoCBraMO0bmcgY+G6p24gxJHhu6VuZyBjaOG6oW0gxJHhur9uIGLhuqV0IGvhu7MgbmjDoW5oIG7DoG9cbiIKKyJi4bqxbmcgY8OhY2ggY2h1eeG7g24gdHLhu58gbOG6oWkgbeG7mXQgbmjDoW5oLlxuIgorIlxuIgorIk7hur91IGLhuqFuIG114buRbiB04bqhbyBt4buZdCBuaMOhbmggbeG7m2kgxJHhu4MgZ2nhu68gbOG6oWkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGLhuqFuIHThuqFvLFxuIgorImLhuqFuIGPDsyB0aOG7gyBsw6BtIHRo4bq/IChuZ2F5IGLDonkgZ2nhu50gaGF5IHNhdSBuw6B5KSBi4bqxbmcgY8OhY2ggZMO5bmcgdMO5eSBjaOG7jW5cbiIKKyJkw7JuZyBs4buHbmggLWIuIFbDrSBk4bulOlxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1jIDx0w6puLW5ow6FuaC1t4bubaT5cbiIKKyJcbiIKKyJIb8OgbiBs4bqhaSB0aGFvIHTDoWMgbsOgeSBi4bqxbmc6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1cbiIKKyJcbiIKKyJU4bqvdCBoxrDhu5tuZyBk4bqrbiBuw6B5IGLhurFuZyBjw6FjaCDEkeG6t3QgYmnhur9uIGFkdmljZS5kZXRhY2hlZEhlYWQgdGjDoG5oIGZhbHNlXG4iCisiXG4iCisKKyM6IGFsaWFzLmM6NTAKK21zZ2lkICJjbWRsaW5lIGVuZHMgd2l0aCBcXCIKK21zZ3N0ciAiY21kbGluZSBr4bq/dCB0aMO6YyB24bubaSBcXCIKKworIzogYWxpYXMuYzo1MQorbXNnaWQgInVuY2xvc2VkIHF1b3RlIgorbXNnc3RyICJjaMawYSBjw7MgZOG6pXUgbmjDoXkgxJHDs25nIgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIHTDuXkgY2jhu41uIHbhu4Ega2hv4bqjbmcgdHLhuq9uZyDigJwlc+KAnSIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgImtow7RuZyBuaOG6rW4gcmEgdMO5eSBjaOG7jW4gYuG7jyBxdWEga2hv4bqjbmcgdHLhuq9uZyDigJwlc+KAnSIKKworIzogYXBwbHkuYzoxMzUKK21zZ2lkICItLXJlamVjdCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1yZWplY3QgdsOgIC0tM3dheSBraMO0bmcgdGjhu4MgZMO5bmcgY8O5bmcgbmhhdS4iCisKKyM6IGFwcGx5LmM6MTM3Cittc2dpZCAiLS1jYWNoZWQgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iCittc2dzdHIgIi0tY2FjaGVkIHbDoCAtLTN3YXkga2jDtG5nIHRo4buDIGTDuW5nIGPDuW5nIG5oYXUuIgorCisjOiBhcHBseS5jOjE0MAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IOG7nyBuZ2/DoGkgbeG7mXQga2hvIGNo4bupYSIKKworIzogYXBwbHkuYzoxNTEKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IOG7nyBuZ2/DoGkgbeG7mXQga2hvIGNo4bupYSIKKworIzogYXBwbHkuYzoxNTQKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQg4bufIG5nb8OgaSBt4buZdCBraG8gY2jhu6lhIgorCisjOiBhcHBseS5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGNodeG6qW4gYuG7iyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdWkgZOG6pXUgduG6v3QgdGjhu51pIGdpYW4gKHRpbWVzdGFtcCByZWdleHApICIKICIlcyIKIAotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMwotbXNnaWQgIlJlbmFtZSBCcmFuY2giCi1tc2dzdHIgIsSQ4buVaSB0w6puIG5ow6FuaCIKKyM6IGFwcGx5LmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAidGhpIGjDoG5oIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSB0cuG6oyB24buBICVkIGNobyDEkeG6p3UgdsOgbzogJXMiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyOAotbXNnaWQgIlJlbmFtZSIKLW1zZ3N0ciAixJDhu5VpIHTDqm4iCisjOiBhcHBseS5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgdMOqbiB04bqtcCB0aW4gdHJvbmcgbWnhur9uZyB2w6EgdOG6oWkgZMOybmcgJWQiCiAKLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOAotbXNnaWQgIkJyYW5jaDoiCi1tc2dzdHIgIk5ow6FuaDoiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo0NgotbXNnaWQgIk5ldyBOYW1lOiIKLW1zZ3N0ciAiVMOqbiBt4bubaToiCi0KLSM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4MQotbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKLW1zZ3N0ciAiSMOjeSBjaOG7jW4gbmjDoW5oIGPhuqduIMSR4buVaSB0w6puLiIKLQotIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTmjDoW5oICclcycgxJHDoyBjw7MgcuG7k2kuIgotCi0jOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTIzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buVaSB0w6puICclcycuIgotCi0jOiBsaWIvYnJvd3Nlci50Y2w6MTcKLW1zZ2lkICJTdGFydGluZy4uLiIKLW1zZ3N0ciAixJBhbmcga2jhu59pIMSR4buZbmcuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyNwotbXNnaWQgIkZpbGUgQnJvd3NlciIKLW1zZ3N0ciAiQuG7mSBkdXnhu4d0IHThuq1wIHRpbiIKLQotIzogbGliL2Jyb3dzZXIudGNsOjEzMiBsaWIvYnJvd3Nlci50Y2w6MTQ5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTG9hZGluZyAlcy4uLiIKLW1zZ3N0ciAixJBhbmcgdOG6o2kgJXMuLi4iCi0KLSM6IGxpYi9icm93c2VyLnRjbDoxOTMKLW1zZ2lkICJbVXAgVG8gUGFyZW50XSIKLW1zZ3N0ciAiW1Thu5tpIGNoYSBt4bq5XSIKLQotIzogbGliL2Jyb3dzZXIudGNsOjI3NSBsaWIvYnJvd3Nlci50Y2w6MjgyCi1tc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKLW1zZ3N0ciAiRHV54buHdCBjw6FjIHThuq1wIHRpbiBuaMOhbmgiCi0KLSM6IGxpYi9icm93c2VyLnRjbDoyODggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MDYKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjkKLW1zZ2lkICJCcm93c2UiCi1tc2dzdHIgIlTDrG0gZHV54buHdCIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCi1tc2dzdHIgIsSQYW5nIGzhuqV5IHbhu4EgJXMgdOG7qyAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCi1tc2dzdHIgImfhurdwIGzhu5dpIG5naGnDqm0gdHLhu41uZzogS2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSAlcyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzAKLSM6IGxpYi9zc2hrZXkudGNsOjU1Ci1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIsSQw7NuZyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCi1tc2dzdHIgIkNoxrBhIGPDsyBuaMOhbmggJyVzJyIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY+G6pXUgaMOsbmggZ2l0LXB1bGwgxJHGoW4gZ2nhuqNuIGTDoG5oIGNobyAnJXMnLiIKLQotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCi0iXG4iCi0iSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKLSJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKKyM6IGFwcGx5LmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKIG1zZ3N0ciAiIgotIk5ow6FuaCAnJXMnIMSRw6Mgc+G6tW4gY8OzLlxuIgotIlxuIgotIktow7RuZyB0aOG7gyBmYXN0LWZvcndhcmQgdGjDoG5oICVzLlxuIgotIkLhuqFuIGPhuqduIHBo4bqjaSBow7JhIHRy4buZbi4iCisiZ2l0IGFwcGx5OiBnaXQtZGlmZiBzYWkgLSBj4bqnbiAvZGV2L251bGwsIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2MgJXMgdHLDqm4gZMOybmcgJWQiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiS2jDtG5nIGjhu5cgdHLhu6MgY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luICclcycuIgorIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgc2FpIC0gdMOqbiB04bqtcCB0aW4gbeG7m2kga2jDtG5nIG5o4bqldCBxdcOhbiB0csOqbiBkw7JuZyAlZCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY+G6rXAgbmjhuq10ICclcycuIgorIzogYXBwbHkuYzo5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgc2FpIC0gdMOqbiB04bqtcCB0aW4gY8WpIGtow7RuZyBuaOG6pXQgcXXDoW4gdHLDqm4gZMOybmcgJWQiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Ci1tc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgotbXNnc3RyICJWw7luZyBi4buHIHBow7NuZyAoY2jhu4kgbeG7pWMpIMSRw6MgYuG7iyBraMOzYSBy4buTaS4iCisjOiBhcHBseS5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIHNhaSAtIGPhuqduIOKAnC9kZXYvbnVsbOKAnSB0csOqbiBkw7JuZyAlZCIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKKyM6IGFwcGx5LmM6OTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBvbiBsaW5lICVkOiAlcyIKK21zZ3N0ciAiY2jhur8gxJHhu5kga2jDtG5nIGjhu6NwIGzhu4cgdHLDqm4gZMOybmcgJWQ6ICVzIgorCisjOiBhcHBseS5jOjEyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5jb25zaXN0ZW50IGhlYWRlciBsaW5lcyAlZCBhbmQgJWQiCittc2dzdHIgInBo4bqnbiDEkeG6p3UgbcOidSB0aHXhuqtuIGTDsm5nICVkIHbDoCAlZCIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgotbXNnc3RyICIiCi0iVHLhuqFuZyB0aMOhaSBxdcOpdCBraMO0bmcga2jhu5twIHbhu5tpIHRy4bqhbmcgdGjDoWkga2hvLlxuIgotIlxuIgotIkPDsyBHaXQga2jDoWMgxJHDoyBz4butYSBraG8gbsOgeSBr4buDIHThu6sgbOG6p24gcXXDqXQgY3Xhu5FpLiBD4bqnbiBxdcOpdCBs4bqhaSB0csaw4bubYyBraGkgdGjhu7FjICIKLSJoaeG7h24gdmnhu4djIGNodXnhu4NuIG5ow6FuaC5cbiIKLSJcbiIKLSJT4bq9IHRo4buxYyBoaeG7h24gdmnhu4djIHF1w6l0IGzhuqFpIG5nYXkgYsOieSBnaeG7nWkuXG4iCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisicGjhuqduIMSR4bqndSBkaWZmIGNobyBnaXQgIHRoaeG6v3UgdGjDtG5nIHRpbiB0w6puIHThuq1wIHRpbiBraGkgZ+G7oSBi4buPIMSRaSAlZCB0cm9uZyAiCisidGjDoG5oIHBo4bqnbiBk4bqrbiDEkeG6p3UgdMOqbiBj4bunYSDEkcaw4budbmcgZOG6q24gKGTDsm5nICVkKSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgotbXNnc3RyICJD4bqtcCBuaOG6rXQgdGjGsCBt4bulYyBsw6BtIHZp4buHYyB0aMOgbmggJyVzJy4uLiIKKyM6IGFwcGx5LmM6MTM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gKGxpbmUgJWQpIgorbXNnc3RyICJwaOG6p24gxJHhuqd1IGRpZmYgY2hvIGdpdCB0aGnhur91IHRow7RuZyB0aW4gdMOqbiB04bqtcCB0aW4gKGTDsm5nICVkKSIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKLW1zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKLW1zZ3N0ciAiY8OhYyB04bqtcCB0aW4gY+G6p24gbOG6pXkgcmEiCisjOiBhcHBseS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJjaGkgdGnhur90OiBkw7JuZyBraMO0bmcgY+G6p246ICUuKnMiCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKLW1zZ3N0ciAiSOG7p3kgYuG7jyBs4bqleSByYSAnJXMnIChj4bqnbiBow7JhIHRy4buZbiBt4bupYyB04bqtcCB0aW4pLiIKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJtaeG6v25nIHbDoSBwaMOibiBt4bqjbmggbcOgIGtow7RuZyBjw7MgcGjhuqduIMSR4bqndSB04bqhaSBkw7JuZyAlZDogJS4qcyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKLW1zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKLW1zZ3N0ciAiQ+G6p24gbeG7qWMgaMOyYSB0cuG7mW4gdOG6rXAgdGluLiIKKyM6IGFwcGx5LmM6MTc1MworbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJ04bqtcCB0aW4gbeG7m2kgcGjhu6UgdGh14buZYyB2w6BvIG7hu5lpIGR1bmcgY8WpIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgotbXNnc3RyICLEkGFuZyDhu58gdHLDqm4gbmjDoW5oICclcycuIgorIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAidOG6rXAgdGluIMSRw6MgeMOzYSB24bqrbiBjw7JuIG7hu5lpIGR1bmciCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCisjOiBhcHBseS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJtaeG6v25nIHbDoSBo4buPbmcgdOG6oWkgZMOybmcgJWQiCisKKyM6IGFwcGx5LmM6MTgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAidOG6rXAgdGluIG3hu5tpICVzIHBo4bulIHRodeG7mWMgdsOgbyBu4buZaSBkdW5nIGPFqSIKKworIzogYXBwbHkuYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgInThuq1wIHRpbiDEkcOjIHjDs2EgJXMgduG6q24gY8OybiBu4buZaSBkdW5nIgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogY+G6o25oIGLDoW86IHThuq1wIHRpbiAlcyB0cuG7nyBuw6puIHRy4buRbmcgcuG7l25nIG5oxrBuZyBraMO0bmcgYuG7iyB4w7NhIgorCisjOiBhcHBseS5jOjE5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAibWnhur9uZyB2w6EgxJHhu4tuaCBk4bqhbmcgbmjhu4sgcGjDom4gc2FpIGjhu49uZyB04bqhaSBkw7JuZyAlZDogJS4qcyIKKworIzogYXBwbHkuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibWnhur9uZyB2w6EgxJHhu4tuaCBk4bqhbmcgbmjhu4sgcGjDom4ga2jDtG5nIMSRxrDhu6NjIG5o4bqtbiByYSB04bqhaSBkw7JuZyAlZCIKKworIzogYXBwbHkuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgInbDoSBjaOG7iSB24bubaSDigJxyw6Fj4oCdIHThuqFpIGTDsm5nICVkIgorCisjOiBhcHBseS5jOjIyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBsacOqbiBr4bq/dCBt4buBbSAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIGhheSDEkeG7jWMgJXMiCisKKyM6IGFwcGx5LmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgInNhaSBraOG7n2kgxJHhuqd1IGTDsm5nOiDigJwlY+KAnSIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiS2jhu5FpIGThu68gbGnhu4d1ICMlZCB0aMOgbmggY8O0bmcgdOG6oWkgJWQgKG9mZnNldCAlZCBkw7JuZykuIgorCisjOiBhcHBseS5jOjMwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiTuG7mWkgZHVuZyBi4buLIGdp4bqjbSB4deG7kW5nIGPDsm4gKCVsZC8lbGQpIMSR4buDIMOhcCBk4bulbmcgbeG6o25oIGThu68gbGnhu4d1IHThuqFpICVkIgorCisjOiBhcHBseS5jOjMwNzUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgotIlxuIgotIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgotIkNoZWNrb3V0Jy4iCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgogbXNnc3RyICIiCi0iQuG6oW4gaGnhu4duIGtow7RuZyBjw7JuIOG7nyBuaMOhbmggbuG7mWkgYuG7mS5cbiIKLSJcbiIKLSJO4bq/dSBi4bqhbiBtdeG7kW4gdHLDqm4gbeG7mXQgbmjDoW5oLCBow6N5IHThuqFvIG3hu5l0IGPDoWkgdOG7qyAnxJDDonkgbMOgIGzhuqV5IHJhIHTDoWNoIHLhu51pJy4iCisidHJvbmcga2hpIMSRYW5nIHTDrG0ga2nhur9tIGNobzpcbiIKKyIlLipzIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgotbXNnc3RyICLEkMOjIGzhuqV5IHJhICclcycuIgorIzogYXBwbHkuYzozMDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgInRoaeG6v3UgZOG7ryBsaeG7h3UgY+G7p2EgbWnhur9uZyB2w6EgxJHhu4tuaCBk4bqhbmcgbmjhu4sgcGjDom4gY2hvIOKAnCVz4oCdIgogCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCi1tc2dzdHIgIsSQ4bq3dCBs4bqhaSAnJXMnIHRow6BuaCAnJXMnIHPhur0gbMOgbSBt4bqldCBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gc2F1IMSRw6J5OiIKKyM6IGFwcGx5LmM6MzEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmV2ZXJzZS1hcHBseSBhIGJpbmFyeSBwYXRjaCB3aXRob3V0IHRoZSByZXZlcnNlIGh1bmsgdG8gJyVzJyIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyByZXZlcnNlLWFwcGx5IG3hu5l0IG1p4bq/bmcgdsOhIG5o4buLIHBow6JuIG3DoCBraMO0bmcgxJHhuqNvIG5nxrDhu6NjIGtow7pjIHRow6BuaCAiCisi4oCcJXPigJ0iCiAKLSM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Ci1tc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKLW1zZ3N0ciAiTOG6pXkgbOG6oWkgbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgbeG6pXQgbMOgIGtow7RuZyBk4buFLiIKKyM6IGFwcGx5LmM6MzE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYXBwbHkgYmluYXJ5IHBhdGNoIHRvICclcycgd2l0aG91dCBmdWxsIGluZGV4IGxpbmUiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4Mgw6FwIGThu6VuZyBtaeG6v25nIHbDoSBuaOG7iyBwaMOibiB0aMOgbmgg4oCcJXPigJ0gbcOgIGtow7RuZyBjw7MgZMOybmcgY2jhu4kgbeG7pWMgxJHhuqd5ICIKKyLEkeG7pyIKIAotIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAnJXMnPyIKLW1zZ3N0ciAixJDhurd0IGzhuqFpICclcyc/IgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NiBsaWIvdG9vbHNfZGxnLnRjbDozMzYKLW1zZ2lkICJWaXN1YWxpemUiCi1tc2dzdHIgIlRy4buxYyBxdWFuIgotCi0jOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQotIywgdGNsLWZvcm1hdAorIzogYXBwbHkuYzozMTYyCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgotIlxuIgotIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCi0ieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCi0iXG4iCi0iVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCisidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBjb250ZW50cy4iCiBtc2dzdHIgIiIKLSJH4bq3cCBs4buXaSBraGkgxJHhurd0IG5ow6FuaCBoaeG7h24gaMOgbmguXG4iCi0iXG4iCi0iVGjGsCBt4bulYyBsw6BtIHZp4buHYyBjaOG7iSBjaHV54buDbiBraMO0bmcgaG/DoG4gdG/DoG4uICBDaMO6bmcgdMO0aSBj4bqtcCBuaOG6rXQgdGjDoG5oIGPDtG5nICIKLSJjw6FjIHThuq1wIHRpbiBj4bunYSBi4bqhbiwgbmjGsG5nIGzhuqFpIGfhurdwIGzhu5dpIGtoaSBj4bqtcCBuaOG6rXQgbeG7mXQgdOG6rXAgdGluIGPhu6dhIEdpdC5cbiIKLSJcbiIKLSLEkGnhu4F1IG7DoHkgxJHDoW5nIGzhur0ga2jDtG5nIHRo4buDIHjhuqN5IHJhLiAgJXMgZ2nhu50gc+G6vSDEkcOzbmcgbOG6oWkgdsOgIMSR4bqndSBow6BuZy4iCisibWnhur9uZyB2w6Egw6FwIGThu6VuZyBjaG8g4oCcJXPigJ0gKCVzKSwgY8OhaSBtw6Aga2jDtG5nIGto4bubcCB24bubaSBjw6FjIG7hu5lpIGR1bmcgaGnhu4duIHThuqFpLiIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo0MQotbXNnaWQgIlNlbGVjdCIKLW1zZ3N0ciAiQ2jhu41uIgorIzogYXBwbHkuYzozMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBwYXRjaCBhcHBsaWVzIHRvIGFuIGVtcHR5ICclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIKK21zZ3N0ciAibWnhur9uZyB2w6Egw6FwIGThu6VuZyBjaG8gbeG7mXQg4oCcJXPigJ0gdHLhu5FuZyBy4buXbmcgbmjGsG5nIG7DsyBs4bqhaSBraMO0bmcgdHLhu5FuZyIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDo1NQotbXNnaWQgIkZvbnQgRmFtaWx5IgotbXNnc3RyICJI4buNIHBow7RuZyBjaOG7ryIKKyM6IGFwcGx5LmM6MzE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgbmVjZXNzYXJ5IHBvc3RpbWFnZSAlcyBmb3IgJyVzJyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBwb3N0aW1hZ2UgJXMgY+G6p24gdGhp4bq/dCBjaG8g4oCcJXPigJ0iCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKLW1zZ2lkICJGb250IFNpemUiCi1tc2dzdHIgIkPhu6EgcGjDtG5nIGNo4buvIgorIzogYXBwbHkuYzozMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJtaeG6v25nIHbDoSDEkeG7i25oIGThuqFuZyBuaOG7iyBwaMOibiBraMO0bmcgxJHGsOG7o2Mgw6FwIGThu6VuZyBjaG8g4oCcJXPigJ0iCiAKLSM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKLW1zZ2lkICJGb250IEV4YW1wbGUiCi1tc2dzdHIgIlBow7RuZyBjaOG7ryB2w60gZOG7pSIKKyM6IGFwcGx5LmM6MzIwNworIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorInbDoSBuaOG7iyBwaMOibiBjaG8g4oCcJXPigJ0gdOG6oW8gcmEga+G6v3QgcXXhuqMga2jDtG5nIGNow61uaCB4w6FjIChtb25nIGNo4budICVzLCBs4bqhaSBuaOG6rW4gIgorIiVzKSIKIAotIzogbGliL2Nob29zZV9mb250LnRjbDoxMDUKKyM6IGFwcGx5LmM6MzIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHbDoTogJXM6JWxkIgorCisjOiBhcHBseS5jOjMzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgcmEgJXMiCisKKyM6IGFwcGx5LmM6MzQwMyBhcHBseS5jOjM0MTQgYXBwbHkuYzozNDYwIG1pZHguYzo2MSBzZXR1cC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyAlcyIKKworIzogYXBwbHkuYzozNDExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIsSR4buNYyB04burIOKAnCVz4oCdIHbGsOG7o3QgcmEgbmdvw6BpIGxpw6puIGvhur90IG3hu4FtIgorCisjOiBhcHBseS5jOjM0NDAgYXBwbHkuYzozNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gJXMgxJHDoyBi4buLIHjDs2EgaG/hurdjIMSR4buVaSB0w6puIgorCisjOiBhcHBseS5jOjM1MjYgYXBwbHkuYzozNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGtow7RuZyB04buTbiB04bqhaSB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGFwcGx5LmM6MzUzNSBhcHBseS5jOjM3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIlczoga2jDtG5nIGto4bubcCB0cm9uZyBt4bulYyBs4bulYyIKKworIzogYXBwbHkuYzozNTcwCittc2dpZCAicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAia2hvIHRoaeG6v3UgxJHhu5FpIHTGsOG7o25nIGJsb2IgY+G6p24gdGhp4bq/dCDEkeG7gyB0cuG7nyB24buBIHRyw6puIOKAnDMtd2F5IG1lcmdl4oCdLiIKKworIzogYXBwbHkuYzozNTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAixJBhbmcgdHLhu58gbOG6oWkgaMOyYSB0cuG7mW4g4oCcMy3Ekcaw4budbmfigJ3igKZcbiIKKworIzogYXBwbHkuYzozNTg5IGFwcGx5LmM6MzU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIG7hu5lpIGR1bmcgaGnhu4duIGjDoG5oIGPhu6dhIOKAnCVz4oCdIgorCisjOiBhcHBseS5jOjM2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZhbGwgYmFjayBvbiB0aHJlZS13YXkgbWVyZ2UuLi5cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHF1YXkgdHLhu58gbOG6oWkgxJHhu4MgaMOyYSB0cuG7mW4ga2nhu4N1IOKAnHRocmVlLXdheeKAneKAplxuIgorCisjOiBhcHBseS5jOjM2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICLEkMOjIMOhcCBk4bulbmcgbWnhur9uZyB2w6EgJXMgduG7m2kgY8OhYyB4dW5nIMSR4buZdC5cbiIKKworIzogYXBwbHkuYzozNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLEkMOjIMOhcCBk4bulbmcgbWnhur9uZyB2w6EgJXMgbeG7mXQgY8OhY2ggc+G6oWNoIHPhur0uXG4iCisKKyM6IGFwcGx5LmM6MzY1MAorbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgImxv4bqhaSBi4buPIG1p4bq/bmcgdsOhIMSR4buDIGzhuqFpIG7hu5lpIGR1bmcgdOG6rXAgdGluIgorCisjOiBhcHBseS5jOjM3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiBzYWkga2nhu4N1IgorCisjOiBhcHBseS5jOjM3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcyBjw7Mga2nhu4N1ICVvLCBj4bqnbiAlbyIKKworIzogYXBwbHkuYzozODc2IGFwcGx5LmM6Mzg3OCByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24ga2jDtG5nIGjhu6NwIGzhu4cg4oCcJXPigJ0iCisKKyM6IGFwcGx5LmM6MzkzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiDEkcOjIGPDsyB04burIHRyxrDhu5tjIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYXBwbHkuYzozOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IMSRw6Mgc+G6tW4gY8OzIHRyb25nIHRoxrAgbeG7pWMgxJFhbmcgbMOgbSB2aeG7h2MiCisKKyM6IGFwcGx5LmM6Mzk1NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgImNo4bq/IMSR4buZIG3hu5tpICglbykgY+G7p2EgJXMga2jDtG5nIGto4bubcCB24bubaSBjaOG6vyDEkeG7mSBjxakgKCVvKSIKKworIzogYXBwbHkuYzozOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiY2jhur8gxJHhu5kgbeG7m2kgKCVvKSBj4bunYSAlcyBraMO0bmcga2jhu5twIHbhu5tpIGNo4bq/IMSR4buZIGPFqSAoJW8pIGPhu6dhICVzIgorCisjOiBhcHBseS5jOjM5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgInThuq1wIHRpbiBjaOG7i3UgdMOhYyDEkeG7mW5nIOKAnCVz4oCdIHbGsOG7o3QgcmEgbmdvw6BpIGxpw6puIGvhur90IG3hu4FtIgorCisjOiBhcHBseS5jOjM5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogbWnhur9uZyB2w6Ega2jDtG5nIMSRxrDhu6NjIMOhcCBk4bulbmciCisKKyM6IGFwcGx5LmM6NDAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBtaeG6v25nIHbDoSAlc+KApiIKKworIzogYXBwbHkuYzo0MDkzCisjLCBjLWZvcm1hdAorbXNnaWQgInNoYTEgaW5mb3JtYXRpb24gaXMgbGFja2luZyBvciB1c2VsZXNzIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgInRow7RuZyB0aW4gc2hhMSB0aGnhur91IGhv4bq3YyBraMO0bmcgZMO5bmcgxJHGsOG7o2MgY2hvIG3DtC3EkXVuICVzIgorCisjOiBhcHBseS5jOjQxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgaW4gY3VycmVudCBIRUFEIgorbXNnc3RyICJ0aGF5IMSR4buVaSBjaOG6vyDEkeG7mSBjaG8gJXMsIGPDoWkgbcOgIGtow7RuZyBwaOG6o2kgbMOgIEhFQUQgaGnhu4duIHThuqFpIgorCisjOiBhcHBseS5jOjQxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgInRow7RuZyB0aW4gc2hhMSBjw7JuIHRoaeG6v3UgaGF5IGtow7RuZyBkw7luZyDEkcaw4bujYyglcykuIgorCisjOiBhcHBseS5jOjQxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFkZCAlcyB0byB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyB0aMOqbSAlcyB2w6BvIGNo4buJIG3hu6VjIHThuqFtIHRo4budaSIKKworIzogYXBwbHkuYzo0MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggdG8gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgbeG7pWMgbOG7pWMgdOG6oW0gdsOgbyAlcyIKKworIzogYXBwbHkuYzo0MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGfhu6EgYuG7jyAlcyB04burIG3hu6VjIGzhu6VjIgorCisjOiBhcHBseS5jOjQyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJtaeG6v25nIHbDoSBzYWkgaOG7j25nIGNobyBtw7QtxJF1bi1jb24gJXMiCisKKyM6IGFwcGx5LmM6NDMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRo4buRbmcga8OqIHbhu4EgdOG6rXAgdGluICVzIG3hu5tpIGjGoW4gxJHDoyDEkcaw4bujYyB04bqhbyIKKworIzogYXBwbHkuYzo0MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8g4oCca2hvIGzGsHUgxJHhurFuZyBzYXXigJ0gY2hvIHThuq1wIHRpbiDEkcaw4bujYyB04bqhbyBt4bubaSBoxqFuICVzIgorCisjOiBhcHBseS5jOjQzMTQgYXBwbHkuYzo0NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDqm0gbeG7pWMgbmjhu5sgxJHhu4dtIGNobyAlcyIKKworIzogYXBwbHkuYzo0MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgZ2hpIHbDoG8g4oCcJXPigJ0iCisKKyM6IGFwcGx5LmM6NDM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAixJFhbmcgxJHDs25nIHThuq1wIHRpbiDigJwlc+KAnSIKKworIzogYXBwbHkuYzo0NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB2w6BvIHThuq1wIHRpbiDigJwlc+KAnSBjaOG6vyDEkeG7mSAlbyIKKworIzogYXBwbHkuYzo0NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIsSQw6Mgw6FwIGThu6VuZyBtaeG6v25nIHbDoSAlcyBt4buZdCBjw6FjaCBz4bqhY2ggc+G6vS4iCisKKyM6IGFwcGx5LmM6NDUzNworbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICJs4buXaSBu4buZaSBi4buZIgorCisjOiBhcHBseS5jOjQ1NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICLEkGFuZyDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhICUlcyB24bubaSAlZCBs4bqnbiB04burIGNo4buRaeKApiIKKworIzogYXBwbHkuYzo0NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAixJFhbmcgY+G6r3Qgbmfhuq9uIHTDqm4gdOG6rXAgdGluIC5yZWogdGjDoG5oICUuKnMucmVqIgorCisjOiBhcHBseS5jOjQ1NTkgYnVpbHRpbi9mZXRjaC5jOjkwMSBidWlsdGluL2ZldGNoLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlcyIKK21zZ3N0ciAia2jDtG5nIG3hu58gxJHGsOG7o2Mg4oCcJXPigJ0iCisKKyM6IGFwcGx5LmM6NDU3MworIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJLaOG7kWkgbmjhu5sgIyVkIMSRxrDhu6NjIMOhcCBk4bulbmcgZ+G7jW4gZ8OgbmcuIgorCisjOiBhcHBseS5jOjQ1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICLEkG/huqFuIGThu68gbGnhu4d1ICMlZCBi4buLIHThu6sgY2jhu5FpLiIKKworIzogYXBwbHkuYzo0Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIkLhu48gcXVhIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnS4iCisKKyM6IGFwcGx5LmM6NDcwNAorbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAia2jDtG5nIHRo4burYSBuaOG6rW4gxJHhuqd1IHbDoG8iCisKKyM6IGFwcGx5LmM6NDcyNAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBhcHBseS5jOjQ4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gbWnhur9uZyB2w6Eg4oCcJXPigJ06ICVzIgorCisjOiBhcHBseS5jOjQ5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAixJHDoyBjaOG6pW0gZOG7qXQgJWQgbOG7l2kga2hv4bqjbmcgdHLhuq9uZyIKKworIzogYXBwbHkuYzo0OTE0IGFwcGx5LmM6NDkyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBkw7JuZyB0aMOqbSBraG/huqNuZyB0cuG6r25nIGzhu5dpLiIKKworIzogYXBwbHkuYzo0OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhcHBsaWVkIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIGTDsm5nIMSRxrDhu6NjIMOhcCBk4bulbmcgc2F1IGtoaSBz4butYSBjw6FjIGzhu5dpIGtob+G6o25nIHRy4bqvbmcuIgorCisjOiBhcHBseS5jOjQ5MzggYnVpbHRpbi9hZGQuYzo1NzkgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6MzkwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSIKKworIzogYXBwbHkuYzo0OTY2Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAia2jDtG5nIMOhcCBk4bulbmcgY8OhYyB0aGF5IMSR4buVaSBraOG7m3AgduG7m2kgxJHGsOG7nW5nIGThuqtuIMSRw6MgY2hvIgorCisjOiBhcHBseS5jOjQ5NjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLDoXAgZOG7pW5nIGPDoWMgdGhheSDEkeG7lWkga2jhu5twIHbhu5tpIMSRxrDhu51uZyBk4bqrbiDEkcOjIGNobyIKKworIzogYXBwbHkuYzo0OTcxIGJ1aWx0aW4vYW0uYzoyMjA2Cittc2dpZCAibnVtIgorbXNnc3RyICJz4buRIgorCisjOiBhcHBseS5jOjQ5NzIKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAiZ+G7oSBi4buPIDxz4buRPiBk4bqldSBn4bqhY2ggY2jDqW8gZOG6q24gxJHhuqd1IHThu6sgxJHGsOG7nW5nIGThuqtuIGRpZmYgY+G7lSDEkWnhu4NuIgorCisjOiBhcHBseS5jOjQ5NzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJs4budIMSRaSBwaOG6p24gYuG7lSB4dW5nIMSRxrDhu6NjIHThuqFvIHJhIGLhu59pIG1p4bq/bmcgdsOhIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIiIKKyJ0aGF5IHbDrCDDoXAgZOG7pW5nIG3hu5l0IG1p4bq/bmcgdsOhLCBr4bq/dCB4deG6pXQga+G6v3QgcXXhuqMgdOG7qyBs4buHbmggZGlmZnN0YXQgY2hvIMSR4bqndSByYSIKKworIzogYXBwbHkuYzo0OTgxCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyBz4buRIGzGsOG7o25nIGPDoWMgZMOybmcgxJHGsOG7o2MgdGjDqm0gdsOgbyB2w6AgeMOzYSDEkWkgdGhlbyBrw70gaGnhu4d1IHRo4bqtcCBwaMOibiIKKworIzogYXBwbHkuYzo0OTgzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAidGhheSB2w6wgw6FwIGThu6VuZyBt4buZdCBtaeG6v25nIHbDoSwga+G6v3QgeHXhuqV0IGvhur90IHF14bqjIGNobyDEkeG6p3UgdsOgbyIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAidGhheSB2w6wgw6FwIGThu6VuZyBtaeG6v25nIHbDoSwgaMOjeSB4ZW0geGVtIG1p4bq/bmcgdsOhIGPDsyB0aMOtY2ggaOG7o3Aga2jDtG5nIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgImjDo3kgY2jhuq9jIGNo4bqvbiBsw6AgbWnhur9uZyB2w6EgdGjDrWNoIGjhu6NwIHbhu5tpIGLhuqNuZyBt4bulYyBs4bulYyBoaeG7h24gaMOgbmgiCisKKyM6IGFwcGx5LmM6NDk4OQorbXNnaWQgIm1hcmsgbmV3IGZpbGVzIHdpdGggYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCIKK21zZ3N0ciAixJHDoW5oIGThuqV1IGPDoWMgdOG6rXAgdGluIG3hu5tpIHbhu5tpIOKAnGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRk4oCdIgorCisjOiBhcHBseS5jOjQ5OTEKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiw6FwIGThu6VuZyBt4buZdCBtaeG6v25nIHbDoSBtw6Aga2jDtG5nIMSR4buZbmcgY2jhuqFtIMSR4bq/biBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBhcHBseS5jOjQ5OTMKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICJjaOG6pXAgbmjhuq1uIG3hu5l0IG1p4bq/bmcgdsOhIG3DoCBraMO0bmcgxJHhu5luZyBjaOG6oW0gxJHhur9uIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGFwcGx5LmM6NDk5NgorbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICIiCisixJHhu5NuZyB0aOG7nWkgw6FwIGThu6VuZyBtaeG6v25nIHbDoSAoZMO5bmcgduG7m2kgdMO5eSBjaOG7jW4gLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYXBwbHkuYzo0OTk4Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAidGjhu60gaMOyYSB0cuG7mW4ga2nhu4N1IHRocmVlLXdheSBu4bq/dSB2aeG7h2MgdsOhIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIMSRxrDhu6NjIgorCisjOiBhcHBseS5jOjUwMDAKK21zZ2lkICJidWlsZCBhIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiBlbWJlZGRlZCBpbmRleCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorInjDonkgZOG7sW5nIGLhuqNuZyBt4bulYyBs4bulYyB04bqhbSB0aOG7nWkgdHLDqm4gY8ahIHPhu58gdGjDtG5nIHRpbiBi4bqjbmcgbeG7pWMgbOG7pWMgxJHGsOG7o2MgbmjDum5nIgorCisjOiBhcHBseS5jOjUwMDMgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MyBidWlsdGluL2xzLWZpbGVzLmM6NTI0Cittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImPDoWMgxJHGsOG7nW5nIGThuqtuIGLhu4sgbmfEg24gY8OhY2ggYuG7n2kga8O9IHThu7EgTlVMTCIKKworIzogYXBwbHkuYzo1MDA1Cittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLEkeG6o20gYuG6o28gcuG6sW5nIGPDsyDDrXQgbmjhuqV0IDxuPiBkw7JuZyBu4buZaSBkdW5nIGto4bubcCIKKworIzogYXBwbHkuYzo1MDA2IGJ1aWx0aW4vYW0uYzoyMTg1IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTgKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAwIGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTAgYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAiYWN0aW9uIgorbXNnc3RyICJow6BuaCDEkeG7mW5nIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAidMOsbSB0aOG6pXkgbeG7mXQgZMOybmcgbeG7m2kgaG/hurdjIGLhu4sgc+G7rWEgxJHhu5VpIG3DoCBuw7MgY8OzIGzhu5dpIGRvIGtob+G6o25nIHRy4bqvbmciCisKKyM6IGFwcGx5LmM6NTAxMCBhcHBseS5jOjUwMTMKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJs4budIMSRaSBz4buxIHRoYXkgxJHhu5VpIGRvIGtob+G6o25nIHRy4bqvbmcgZ8OieSByYSBraGkgcXXDqXQgbuG7mWkgZHVuZyIKKworIzogYXBwbHkuYzo1MDE2Cittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgIsOhcCBk4bulbmcgbWnhur9uZyB2w6EgdGhlbyBjaGnhu4F1IG5nxrDhu6NjIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAixJHhu6tuZyBoeSB24buNbmcgY8OzIMOtdCBuaOG6pXQgbeG7mXQgZMOybmcgbuG7mWkgZHVuZyIKKworIzogYXBwbHkuYzo1MDIwCittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgIsSR4buDIGzhuqFpIGto4buRaSBk4buvIGxp4buHdSBi4buLIHThu6sgY2jhu5FpIHRyb25nIGPDoWMgdOG6rXAgdGluICoucmVqIHTGsMahbmcg4bupbmciCisKKyM6IGFwcGx5LmM6NTAyMgorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICJjaG8gcGjDqXAgY2jhu5NuZyBraOG7kWkgbmjhu5siCisKKyM6IGFwcGx5LmM6NTAyMyBidWlsdGluL2FkZC5jOjMwOSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTUgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6OTggYnVpbHRpbi9mc2NrLmM6Nzc0CisjOiBidWlsdGluL2xvZy5jOjIxNjYgYnVpbHRpbi9tdi5jOjEyMyBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgImNoaSB0aeG6v3QiCisKKyM6IGFwcGx5LmM6NTAyNQorbXNnaWQgInRvbGVyYXRlIGluY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgbmV3LWxpbmUgYXQgdGhlIGVuZCBvZiBmaWxlIgorbXNnc3RyICIiCisixJHDoyBkw7IgdMOsbSB0aOG6pXkgZHVuZyBzYWkga2jDtG5nIGNow61uaCB4w6FjIHRoaeG6v3UgZMOybmcgbeG7m2kgdOG6oWkgY3Xhu5FpIHThuq1wIHRpbiIKKworIzogYXBwbHkuYzo1MDI4Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJraMO0bmcgdGluIHPhu5EgbMaw4bujbmcgZMOybmcgdHJvbmcgcGjhuqduIMSR4bqndSBraOG7kWkgZOG7ryBsaeG7h3UiCisKKyM6IGFwcGx5LmM6NTAzMCBidWlsdGluL2FtLmM6MjE5NAorbXNnaWQgInJvb3QiCittc2dzdHIgImfhu5FjIgorCisjOiBhcHBseS5jOjUwMzEKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICJ0cmVvIHRow6ptIDxyb290PiB2w6BvIHThuqV0IGPhuqMgY8OhYyB0w6puIHThuq1wIHRpbiIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzxjw6FjIHTDuXkgY2jhu41uPl0gPHRyZWUtaXNoPiBbPC/Ekcaw4budbmcvZOG6q24+4oCmXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgogbXNnaWQgIiIKLSJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKLSJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgogbXNnc3RyICIiCi0ixJDDonkgbMOgIGNo4buvIG3huqt1LlxuIgotIk7hur91IGLhuqFuIHRow61jaCBjaOG7ryBuaMawIHRo4bq/IG7DoHkgdGjDrCBjaOG7jW4gcGjDtG5nIGNo4buvIG7DoHkuIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxraG8+IFstLWV4ZWMgPGzhu4duaD5dIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDx0cmVlLWlzaD4gWzwvIgorIsSRxrDhu51uZy9k4bqrbj7igKZdIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyCi1tc2dpZCAiR2l0IEd1aSIKLW1zZ3N0ciAiR2l0IEd1aSIKKyM6IGFyY2hpdmUuYzoxNworbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxraG8+IFstLWV4ZWMgPGzhu4duaD5dIC0tbGlzdCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5NgotbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiVOG6oW8ga2hvIG3hu5tpIgorIzogYXJjaGl2ZS5jOjM3MiBidWlsdGluL2FkZC5jOjE4MCBidWlsdGluL2FkZC5jOjU1NSBidWlsdGluL3JtLmM6Mjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgIsSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSBraMO0bmcga2jhu5twIHbhu5tpIGLhuqV0IGvhu7MgdOG6rXAgdGluIG7DoG8iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcKLW1zZ2lkICJOZXcuLi4iCi1tc2dzdHIgIk3hu5tpLi4uIgorIzogYXJjaGl2ZS5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZjogJS4qcyIKK21zZ3N0ciAia2jDtG5nIGPDsyB0aGFtIGNoaeG6v3UgbsOgbyBuaMawIHRo4bq/OiAlLipzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4MAotbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCi1tc2dzdHIgIk5ow6JuIGLhuqNuIG3hu5l0IGtobyBz4bq1biBjw7MiCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6AgdMOqbiDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hzog4oCcJXPigJ0iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE1Ci1tc2dpZCAiQ2xvbmUuLi4iCi1tc2dzdHIgIk5ow6JuIGLhuqNuLi4uIgorIzogYXJjaGl2ZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB0cmVlIG9iamVjdDogJXMiCittc2dzdHIgImtow7RuZyBwaOG6o2kgbMOgIMSR4buRaSB0xrDhu6NuZyBjw6J5OiDigJwlc+KAnSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE5Ci1tc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgotbXNnc3RyICJN4bufIG3hu5l0IGtobyDEkcOjIGPDsy4iCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgInRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgaGnhu4duIGjDoG5oIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjgKLW1zZ2lkICJPcGVuLi4uIgotbXNnc3RyICJN4bufLi4uIgorIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAixJHhu4tuaF9k4bqhbmciCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQxCi1tc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKLW1zZ3N0ciAiQ8OhYyBraG8gbeG7m2kgZMO5bmciCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIGzGsHUgdHLhu68iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQ3Ci1tc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCi1tc2dzdHIgIk3hu58ga2hvIG3hu5tpIGTDuW5nOiIKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9sb2cuYzoxNjUzCittc2dpZCAicHJlZml4IgorbXNnc3RyICJ0aeG7gW5fdOG7kSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjIKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqFvIGtobyAlczoiCisjOiBhcmNoaXZlLmM6NDU5Cittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAibuG7kWkgdGjDqm0gdGnhu4FuIHThu5EgdsOgbyB04burbmcgxJHGsOG7nW5nIGThuqtuIHThuq1wIHRpbiB0cm9uZyBraG8gbMawdSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MDEKLW1zZ2lkICJEaXJlY3Rvcnk6IgotbXNnc3RyICJUaMawIG3hu6VjOiIKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMjkgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg5OQorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCittc2dzdHIgInThuq1wX3RpbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTIKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1MwotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgotbXNnc3RyICJLaG8gR2l0IgorIzogYXJjaGl2ZS5jOjQ2MSBidWlsdGluL2FyY2hpdmUuYzo5MAorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiZ2hpIGtobyBsxrB1IHbDoG8gdOG6rXAgdGluIG7DoHkiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiVGjGsCBt4bulYyAlcyDEkcOjIHPhurVuIGPDsy4iCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAixJHhu41jIC5naXRhdHRyaWJ1dGVzIHRyb25nIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIlThuq1wIHRpbiAlcyDEkcOjIGPDsyBz4bq1bi4iCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIHThuq1wIHRpbiDEkcaw4bujYyBsxrB1IHRy4buvIHbDoG8gc3RkZXJyICjEkeG6p3UgcmEgbOG7l2kgdGnDqnUgY2h14bqpbikiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc1Ci1tc2dpZCAiQ2xvbmUiCi1tc2dzdHIgIk5ow6JuIGLhuqNuIgorIzogYXJjaGl2ZS5jOjQ2NQorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgImNo4buJIGzGsHUgKGtow7RuZyBuw6luKSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODgKLW1zZ2lkICJTb3VyY2UgTG9jYXRpb246IgotbXNnc3RyICJW4buLIHRyw60gbmd14buTbjoiCisjOiBhcmNoaXZlLmM6NDY2Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJuw6luIG5oYW5oIGjGoW4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3Ci1tc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCi1tc2dzdHIgIlRoxrAgbeG7pWMgxJHDrWNoOiIKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgIm7DqW4gbmjhu48gaMahbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDcKLW1zZ2lkICJDbG9uZSBUeXBlOiIKLW1zZ3N0ciAiS2nhu4N1IG5ow6JuIGLhuqNuOiIKKyM6IGFyY2hpdmUuYzo0NzcKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgImxp4buHdCBrw6ogY8OhYyBraeG7g3UgbsOpbiDEkcaw4bujYyBo4buXIHRy4bujIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxMgotbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKLW1zZ3N0ciAiVGnDqnUgY2h14bqpbiAoTmhhbmgsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorIzogYXJjaGl2ZS5jOjQ3OSBidWlsdGluL2FyY2hpdmUuYzo5MSBidWlsdGluL2Nsb25lLmM6MTEzIGJ1aWx0aW4vY2xvbmUuYzoxMTYKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzkxIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg0Cittc2dpZCAicmVwbyIKK21zZ3N0ciAia2hvIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNwotbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKLW1zZ3N0ciAiU2FvIGNow6lwIHRvw6BuIGLhu5kgKENo4bqtbSBoxqFuLCBSZWR1bmRhbnQgQmFja3VwKSIKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAibmjhuq1uIGtobyBuw6luIHThu6sga2hvIGNo4bupYSA8a2hvPiB0csOqbiBtw6F5IGNo4bunIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMgotbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgotbXNnc3RyICJDaGlhIHPhursgKE5oYW5oIG5o4bqldCwgS2jDtG5nIG7Dqm4gZMO5bmcsIE5vIEJhY2t1cCkiCisjOiBhcmNoaXZlLmM6NDgxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzIGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0OTgKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJs4buHbmgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjA1Ci0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgyMQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKLW1zZ3N0ciAiS2jDtG5nIHBo4bqjaSBsw6Aga2hvIGdpdDogJXMiCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gxJHhur9uIGzhu4duaCBnaXQtdXBsb2FkLXBhY2sgdHLDqm4gbcOheSBjaOG7pyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTQKLW1zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCi1tc2dzdHIgIlRpw6p1IGNodeG6qW4gY2jhu4kgc+G6tW4gc8OgbmcgduG7m2kga2hvIG7hu5lpIGLhu5kuIgorIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICJH4bq3cCB0w7l5IGNo4buNbiBraMO0bmcgY+G6p24gLS1yZW1vdGUiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk4Ci1tc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKLW1zZ3N0ciAiJ0NoaWEgc+G6uycgY2jhu4kgc+G6tW4gc8OgbmcgduG7m2kga2hvIG7hu5lpIGLhu5kuIgorIzogYXJjaGl2ZS5jOjQ5MQorbXNnaWQgIk9wdGlvbiAtLWV4ZWMgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tcmVtb3RlIgorbXNnc3RyICJUw7l5IGNo4buNbiAtLWV4ZWMgY2jhu4kgY8OzIHRo4buDIMSRxrDhu6NjIGTDuW5nIGPDuW5nIHbhu5tpIC0tcmVtb3RlIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKLW1zZ3N0ciAiTWnhu4FuIMSR4buLYSBwaMawxqFuZyAlcyDEkcOjIHPhurVuIGPDsy4iCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIkfhurdwIHTDuXkgY2jhu41uIGtow7RuZyBj4bqnbiAtLW91dHB1dCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzAKLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGPhuqV1IGjDrG5oIGLhuqNuIGfhu5FjIgorIzogYXJjaGl2ZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIktow7RuZyBoaeG7g3UgxJHhu4tuaCBk4bqhbmcg4oCcJXPigJ0iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQyCi1tc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKLW1zZ3N0ciAixJBhbmcgxJHhur9tIHPhu5EgxJHhu5FpIHTGsOG7o25nIgorIzogYXJjaGl2ZS5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICJUaGFtIHPhu5Ega2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgY2hvIMSR4buLbmggZOG6oW5nIOKAnCVz4oCdOiAtJWQiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQzCi1tc2dpZCAiYnVja2V0cyIKLW1zZ3N0ciAieMO0IgorIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4Mgc3RyZWFtIGJsb2Ig4oCcJXPigJ0iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgotbXNnc3RyICJLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgImNo4bq/IMSR4buZIHThuq1wIHRpbiBs4bulYyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7ozogMCVvIChTSEExOiAlcykiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKLW1zZ3N0ciAiS2jDtG5nIGPDsyBnw6wgxJHhu4MgbmjDom4gYuG6o24gdOG7qyAlcyIKKyM6IGFyY2hpdmUtdGFyLmM6MjkzIGFyY2hpdmUtemlwLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwNSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxOQotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzEKLW1zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCi1tc2dzdHIgIk5ow6FuaCAnbWFzdGVyJyBjaMawYSDEkcaw4bujYyBraOG7n2kgdOG6oW8uIgorIzogYXJjaGl2ZS10YXIuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICclcycgZmlsdGVyIgorbXNnc3RyICJraMO0bmcgdGjhu4MgYuG6r3QgxJHhuqd1IGLhu5kgbOG7jWMg4oCcJXPigJ0iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE4Ci1tc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKLW1zZ3N0ciAiTGnDqm4ga+G6v3QgY+G7qW5nIGtow7RuZyBz4bq1biBzw6BuZy4gVHLhu58gbOG6oWkgY2jhur8gxJHhu5kgc2FvIGNow6lwLiIKKyM6IGFyY2hpdmUtdGFyLmM6NDY4Cittc2dpZCAidW5hYmxlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaHV54buDbiBoxrDhu5tuZyBtw7QgdOG6oyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDbG9uaW5nIGZyb20gJXMiCi1tc2dzdHIgIsSQYW5nIG5ow6JuIGLhuqNuIHThu6sgJXMiCisjOiBhcmNoaXZlLXRhci5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAiYuG7mSBs4buNYyDigJwlc+KAnSDEkcOjIGLDoW8gY8OhbyBs4buXaSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjEKLW1zZ2lkICJDb3B5aW5nIG9iamVjdHMiCi1tc2dzdHIgIsSQYW5nIGNow6lwIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24ga2jDtG5nIGjhu6NwIGzhu4cgVVRGLTg6ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MgotbXNnaWQgIktpQiIKLW1zZ3N0ciAiS2lCIgorIzogYXJjaGl2ZS16aXAuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCB0b28gbG9uZyAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiBxdcOhIGTDoGkgKCVkIGvDvSB04buxLCBTSEExOiAlcyk6ICVzIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBjaMOpcCDEkeG7kWkgdMaw4bujbmc6ICVzIgorIzogYXJjaGl2ZS16aXAuYzo0NzkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJs4buXaSBnaeG6o2kgbsOpbiAoJWQpIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NgotbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKLW1zZ3N0ciAixJBhbmcgbGnDqm4ga+G6v3QgY8OhYyDEkeG7kWkgdMaw4bujbmciCisjOiBhcmNoaXZlLXppcC5jOjYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAiZOG6pXUgduG6v3QgdGjhu51pIGdpYW4gbMOgIHF1w6EgbOG7m24gY2hvIGjhu4cgdGjhu5FuZyBuw6B5OiAlPFBSSXVNQVg+IgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NwotbXNnaWQgIm9iamVjdHMiCisjOiBhdHRyLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWUiCittc2dzdHIgIiUuKnMga2jDtG5nIHBo4bqjaSB0w6puIHRodeG7mWMgdMOtbmggaOG7o3AgbOG7hyIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIiVzIGtow7RuZyDEkcaw4bujYyBwaMOpcDogJXM6JWQiCisKKyM6IGF0dHIuYzo0MDkKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyJDw6FjIG3huqt1IGThuqFuZyBwaOG7pyDEkeG7i25oIGLhu4sgY+G6pW0gZMO5bmcgY2hvIGPDoWMgdGh14buZYyB0w61uaCBj4bunYSBnaXRcbiIKKyJEw7luZyDigJxcXCHigJ0gY2hvIGPDoWMgY2h14buXaSB2xINuIGLhuqNuIGPDsyBk4bqldSBjaOG6pW0gdGhhbiBk4bqrbiDEkeG6p3UuIgorCisjOiBiaXNlY3QuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkbHkgcXVvdGVkIGNvbnRlbnQgaW4gZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiTuG7mWkgZHVuZyDEkcaw4bujYyB0csOtY2ggZOG6q24gc2FpIHRyb25nIHThuq1wIHRpbiDigJwlc+KAnTogJXMiCisKKyM6IGJpc2VjdC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iCittc2dzdHIgIkNow7puZyB0w7RpIGtow7RuZyBiaXNlY3QgdGjDqm0gbuG7r2EhXG4iCisKKyM6IGJpc2VjdC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSB0w6puIMSR4buRaSB0xrDhu6NuZyBjb21taXQgJXMgaOG7o3AgbOG7hyIKKworIzogYmlzZWN0LmM6NzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBiYWQuXG4iCisiVGhpcyBtZWFucyB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyJIw7JhIHRy4buZbiB0csOqbiAlcyBsw6Agc2FpLlxuIgorIsSQaeG7gXUgxJHDsyBjw7MgbmdoxKlhIGzDoCBs4buXaSDEkcOjIMSRxrDhu6NjIHPhu61hIGNo4buvYSBnaeG7r2EgJXMgdsOgIFslc10uXG4iCisKKyM6IGJpc2VjdC5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorIlRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiSMOyYSB0cuG7mW4gdHLDqm4gJXMgbMOgIG3hu5tpLlxuIgorIkfhuqduIG5oxrAgY2jhuq9jIGNo4bqvbiBsw6AgY8OzIHRoYXkgxJHhu5VpIGdp4buvYSAlcyB2w6AgWyVzXS5cbiIKKworIzogYmlzZWN0LmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyAlcy5cbiIKKyJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisiSMOyYSB0cuG7mW4gdHLDqm4gJXMgbMOgICVzLlxuIgorIsSQaeG7gXUgxJHDsyBjw7MgbmdoxKlhIGzDoCBs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIMSR4bqndSB0acOqbiBsw6AgZ2nhu69hICVzIHbDoCBbJXNdLlxuIgorCisjOiBiaXNlY3QuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorIk1heWJlIHlvdSBtaXN0b29rICVzIGFuZCAlcyByZXZzP1xuIgorbXNnc3RyICIiCisiTeG7mXQgc+G7kSDEkWnhu4NtIHjDqXQgZHV54buHdCAlcyBraMO0bmcgcGjhuqNpIHThu5UgdGnDqm4gY+G7p2EgxJFp4buDbSB4w6l0IGR1eeG7h3QgJXMuXG4iCisiZ2l0IGJpc2VjdCBraMO0bmcgdGjhu4MgbMOgbSB2aeG7h2MgxJHDum5nIMSR4bqvbiB0cm9uZyB0csaw4budbmcgaOG7o3AgbsOgeS5cbiIKKyJMaeG7h3UgY8OzIHBo4bqjaSBi4bqhbiBuaOG6p20gbOG6q24gY8OhYyDEkWnhu4NtICVzIHbDoCAlcyBraMO0bmc/XG4iCisKKyM6IGJpc2VjdC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisiaMOyYSB0cuG7mW4gdHLDqm4gY8ahIHPhu58gZ2nhu69hICVzIHbDoCBbJXNdIHBo4bqjaSBi4buLIGLhu48gcXVhLlxuIgorIkRvIHbhuq15IGNow7puZyB0w7RpIGtow7RuZyB0aOG7gyBjaOG6r2MgbOG6p24gY2h1eeG7g24gZ2lhbyDEkeG6p3UgdGnDqm4gJXMgbMOgIGdp4buvYSAlcyB2w6AgIgorIiVzLlxuIgorIkNow7puZyB0w7RpIHbhuqtuIGPhu6kgdGnhur9wIHThu6VjLiIKKworIzogYmlzZWN0LmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgIkJpc2VjdGluZzogbuG7gW4gaMOyYSB0cuG7mW4gY+G6p24gcGjhuqNpIMSRxrDhu6NjIGtp4buDbSB0cmFcbiIKKworIzogYmlzZWN0LmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIgorbXNnc3RyICJj4bqnbiBt4buZdCDEkWnhu4NtIHjDqXQgZHV54buHdCAlcyIKKworIzogYmlzZWN0LmM6ODg0IGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IGJpc2VjdC5jOjkyOCBidWlsdGluL21lcmdlLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IGJpc2VjdC5jOjk1OAorbXNnaWQgInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIgorbXNnc3RyICJ2aeG7h2MgxJHhu41jIHRoYW0gY2hp4bq/dSBiaXNlY3QgZ+G6t3AgbOG7l2kiCisKKyM6IGJpc2VjdC5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB3YXMgYm90aCAlcyBhbmQgJXNcbiIKK21zZ3N0ciAiJXMgbMOgIGPhuqMgJXMgdsOgICVzXG4iCisKKyM6IGJpc2VjdC5jOjk4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSBs4bqnbiBjaHV54buDbiBnaWFvIGtp4buDbSB0cmEgxJHGsOG7o2MgbsOgby5cbiIKKyJDw7MgbOG6vSBi4bqhbiBi4bqvdCDEkeG6p3UgduG7m2kgY8OhYyB0aGFtIHPhu5EgxJHGsOG7nW5nIGThuqtuIHNhaT9cbiIKKworIzogYmlzZWN0LmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICIocm91Z2hseSAlZCBzdGVwKSIKK21zZ2lkX3BsdXJhbCAiKHJvdWdobHkgJWQgc3RlcHMpIgorbXNnc3RyWzBdICIoxrDhu5tjIGNo4burbmcgJWQgYsaw4bubYykiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICJCaXNlY3Rpbmc6IGPDsm4gJWQgxJFp4buDbSB4w6l0IGR1eeG7h3QgxJHhu4Mga2nhu4NtIHNhdSAlcyBuw6B5XG4iCisKKyM6IGJsYW1lLmM6MjcwMAorbXNnaWQgIi0tY29udGVudHMgYW5kIC0tcmV2ZXJzZSBkbyBub3QgYmxlbmQgd2VsbC4iCittc2dzdHIgInTDuXkgY2jhu41uLS1jb250ZW50cyB2w6AgLS1yZXZlcnNlIGtow7RuZyDEkcaw4bujYyB0cuG7mW4gdsOgbyBuaGF1LiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZMO5bmcgLS1jb250ZW50cyB24bubaSB0w6puIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIGN14buRaSBjw7luZyIKKworIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICIiCisiY8O5bmcgc+G7rSBk4bulbmcgLS1yZXZlcnNlIHbDoCAtLWZpcnN0LXBhcmVudCBj4bqnbiBjaOG7iSDEkeG7i25oIGzhuqduIGNodXnhu4NuIGdpYW8gY3Xhu5FpIgorCisjOiBibGFtZS5jOjI3NDQgYnVuZGxlLmM6MTY3IHJlZi1maWx0ZXIuYzoyMjAzIHJlbW90ZS5jOjE5NDEgc2VxdWVuY2VyLmM6MjA5MworIzogc2VxdWVuY2VyLmM6NDQ2MCBidWlsdGluL2NvbW1pdC5jOjEwNDAgYnVpbHRpbi9sb2cuYzozODggYnVpbHRpbi9sb2cuYzo5OTEKKyM6IGJ1aWx0aW4vbG9nLmM6MTUyMCBidWlsdGluL2xvZy5jOjE5MjUgYnVpbHRpbi9sb2cuYzoyMjE1IGJ1aWx0aW4vbWVyZ2UuYzo0MTEKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzEyOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxNDMKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxOTIKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAiY8OgaSDEkeG6t3Qgdmnhu4djIGRpIGNodXnhu4NuIHF1YSBjw6FjIMSRaeG7g20geMOpdCBkdXnhu4d0IGfhurdwIGzhu5dpIgorCisjOiBibGFtZS5jOjI3NjIKK21zZ2lkICIiCisiLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHRvZ2V0aGVyIHJlcXVpcmUgcmFuZ2UgYWxvbmcgZmlyc3QtcGFyZW50IGNoYWluIgorbXNnc3RyICIiCisiY8O5bmcgc+G7rSBk4bulbmcgLS1yZXZlcnNlIC0tZmlyc3QtcGFyZW50IHnDqnUgY+G6p3UgdsO5bmcgY8O5bmcgduG7m2kgY2h14buXaSBjaGEtbeG6uS3EkeG6p3UtIgorInRpw6puIgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICJraMO0bmcgY8OzIMSRxrDhu51uZyBk4bqrbiAlcyB0cm9uZyDigJwlc+KAnSIKKworIzogYmxhbWUuYzoyNzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgYmxvYiAlcyBjaG8gxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKK21zZ3N0ciAiIgorIlxuIgorIlNhdSBraGkgc+G7rWEgbmd1ecOqbiBuaMOibiBs4buXaSBi4bqhbiBjw7MgbOG6uyBj4bqnbiB0aOG7rSBz4butYVxuIgorInRow7RuZyB0aW4gdGhlbyBkw7VpIG3DoXkgY2jhu6cgYuG6sW5nIGPDoWNoIGfhu41pIGzhu4duaFxuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIi4iCisKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAiQ2jGsGEgY8OgaSDEkeG6t3QgbmjDoW5oICVzIG5oxrAgbMOgIHRoxrDhu6NuZyBuZ3Xhu5NuIGPhu6dhIG7Dsy4iCisKKyM6IGJyYW5jaC5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICclcycgZnJvbSAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIk5ow6FuaCDigJwlc+KAnSBjw6BpIMSR4bq3dCDEkeG7gyB0aGVvIGTDtWkgbmjDoW5oIG3DoXkgY2jhu6cg4oCcJXPigJ0gdOG7qyDigJwlc+KAnSBi4bqxbmcgY8OhY2ggcmViYXNlLiIKKworIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICJOaMOhbmgg4oCcJXPigJ0gY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIG5ow6FuaCBtw6F5IGNo4bunIOKAnCVz4oCdIHThu6sg4oCcJXPigJ0uIgorCisjOiBicmFuY2guYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICJOaMOhbmgg4oCcJXPigJ0gY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIG5ow6FuaCBu4buZaSBi4buZIOKAnCVz4oCdIGLhurFuZyBjw6FjaCByZWJhc2UuIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycuIgorbXNnc3RyICJOaMOhbmgg4oCcJXPigJ0gY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIG5ow6FuaCBu4buZaSBi4buZIOKAnCVz4oCdLiIKKworIzogYnJhbmNoLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTmjDoW5oIOKAnCVz4oCdIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSB0aGFtIGNoaeG6v3UgbcOheSBjaOG7pyDigJwlc+KAnSBi4bqxbmcgY8OhY2ggcmViYXNlLiIKKworIzogYnJhbmNoLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICclcycuIgorbXNnc3RyICJOaMOhbmgg4oCcJXPigJ0gY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIHRoYW0gY2hp4bq/dSBtw6F5IGNo4bunIOKAnCVz4oCdLiIKKworIzogYnJhbmNoLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJOaMOhbmgg4oCcJXPigJ0gY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIHRoYW0gY2hp4bq/dSBu4buZaSBi4buZIOKAnCVz4oCdIGLhurFuZyBjw6FjaCByZWJhc2UuIgorCisjOiBicmFuY2guYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnLiIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSB0aGFtIGNoaeG6v3UgbuG7mWkgYuG7mSDigJwlc+KAnS4iCisKKyM6IGJyYW5jaC5jOjExOQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSB1cHN0cmVhbSBicmFuY2ggY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBj4bqldSBow6xuaCBuaMOhbmggdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICJLaMO0bmcgdGhlbyBkw7VpOiB0aMO0bmcgdGluIGNoxrBhIHLDtSByw6BuZyBjaG8gdGhhbSBjaGnhur91ICVzIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHTDqm4gbmjDoW5oIGjhu6NwIGzhu4cuIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIsSQw6MgY8OzIG5ow6FuaCBtYW5nIHTDqm4g4oCcJXPigJ0uIgorCisjOiBicmFuY2guYzoyMTMKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIktow7RuZyB0aOG7gyDDqXAgYnXhu5ljIGPhuq1wIG5o4bqtdCBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGPDoGkgxJHhurd0IHRow7RuZyB0aW4gdGhlbyBkw7VpOyDEkWnhu4NtIGLhuq90IMSR4bqndSDigJwlc+KAnSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCAiCisibmjDoW5oLiIKKworIzogYnJhbmNoLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIm5ow6FuaCB0aMaw4bujbmcgbmd14buTbiDEkcOjIHnDqnUgY+G6p3Ug4oCcJXPigJ0ga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiBicmFuY2guYzoyMzcKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIiIKKyJcbiIKKyJO4bq/dSBi4bqhbiBjw7Mgw70gxJHhu4tuaCDigJxj4bqjaSB04buV4oCdIGPDtG5nIHZp4buHYyBj4bunYSBi4bqhbiB0csOqbiBuaMOhbmggdGjGsOG7o25nIG5ndeG7k25cbiIKKyIodXBzdHJlYW0pIGPDoWkgbcOgIMSRw6Mgc+G6tW4gY8OzIHRyw6puIG3DoXkgY2jhu6csIGLhuqFuIGPhuqduIGNo4bqheVxuIgorImzhu4duaCBcImdpdCBmZXRjaFwiIMSR4buDIGzhuqV5IG7DsyB24buBLlxuIgorIlxuIgorIk7hur91IGLhuqFuIGPDsyDDvSDEkeG7i25oIMSR4bqpeSBsw6puIGzDqm4gbeG7mXQgbmjDoW5oIG7hu5lpIGLhu5kgbeG7m2kgY8OhaSBtw6BcbiIKKyJz4bq9IHRoZW8gZMO1aSBi4bqjbiDEkeG7kWkgY2hp4bq/dSBtw6F5IGNo4bunIGPhu6dhIG7DsywgYuG6oW4gY+G6p24gZMO5bmcgbOG7h25oXG4iCisiXCJnaXQgcHVzaCAtdVwiIMSR4buDIMSR4bq3dCBj4bqldSBow6xuaCB0aMaw4bujbmcgbmd14buTbiBi4bqhbiBtdeG7kW4gcHVzaC4iCisKKyM6IGJyYW5jaC5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIktow7RuZyBwaOG6o2kgdMOqbiDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hzog4oCcJXPigJ0uIgorCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiVMOqbiDEkeG7kWkgdMaw4bujbmcgY2jGsGEgcsO1IHLDoG5nOiDigJwlc+KAnS4iCisKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICJOaMOhbmgga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdLiIKKworIzogYnJhbmNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICLigJwlc+KAnSDEkcOjIMSRxrDhu6NjIGzhuqV5IHJhIHThuqFpIOKAnCVz4oCdIHLhu5NpIgorCisjOiBicmFuY2guYzozODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBvZiB3b3JraW5nIHRyZWUgJXMgaXMgbm90IHVwZGF0ZWQiCittc2dzdHIgIkhFQUQgY+G7p2EgY8OieSBsw6BtIHZp4buHYyAlcyBjaMawYSDEkcaw4bujYyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1bmRsZS5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBnaeG7kW5nIG5oxrAgdOG6rXAgdGluIHYyIGJ1bmRsZSAoxJHhu4tuaCBk4bqhbmcgZHVtcCBj4bunYSBnaXQpIgorCisjOiBidW5kbGUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgInBo4bqnbiDEkeG6p3Uga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMzQ0IHNlcXVlbmNlci5jOjMxMDgKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiS2hvIGNo4bupYSB0aGnhur91IG5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyB0acOqbiBxdXnhur90IG7DoHk6IgorCisjOiBidW5kbGUuYzoxNDYKK21zZ2lkICJuZWVkIGEgcmVwb3NpdG9yeSB0byB2ZXJpZnkgYSBidW5kbGUiCittc2dzdHIgImPhuqduIG3hu5l0IGtobyBjaOG7qWEgxJHhu4MgdGjhuqltIHRyYSBt4buZdCBidW5kbGUiCisKKyM6IGJ1bmRsZS5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiQsOzIGThu68gbGnhu4d1IGNo4bupYSAlZCB0aGFtIGNoaeG6v3U6IgorCisjOiBidW5kbGUuYzoyMDQKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiTOG7h25oIGJ1bmRsZSBnaGkgbOG6oWkgdG/DoG4gYuG7mSBs4buLY2ggc+G7rS4iCisKKyM6IGJ1bmRsZS5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiTOG7h25oIGJ1bmRsZSB5w6p1IGPhuqd1ICVkIHRoYW0gY2hp4bq/dSBuw6B5OiIKKworIzogYnVuZGxlLmM6MjczCittc2dpZCAidW5hYmxlIHRvIGR1cCBidW5kbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG5ow6JuIMSRw7RpIGLhu5kgbcO0IHThuqMgYnVuZGxlIgorCisjOiBidW5kbGUuYzoyODAKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICJLaMO0bmcgdGjhu4Mgc+G6o24gc2luaCDEkeG7kWkgdMaw4bujbmcgZ8OzaSIKKworIzogYnVuZGxlLmM6MjkxCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBnw7NpIMSRw6MgY2jhur90IgorCisjOiBidW5kbGUuYzozMzMKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCDEkcOjIGNo4bq/dCIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJ0aC5jaGnhur91IOKAnCVz4oCdIGLhu4sgbG/huqFpIHRy4burIGLhu59pIGPDoWMgdMO5eSBjaOG7jW4gcmV2LWxpc3QiCisKKyM6IGJ1bmRsZS5jOjQ2MSBidWlsdGluL2xvZy5jOjIwMyBidWlsdGluL2xvZy5jOjE4MTQgYnVpbHRpbi9zaG9ydGxvZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLEkeG7kWkgc+G7kSBraMO0bmcgxJHGsOG7o2MgdGjhu6thIG5o4bqtbjogJXMiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICJU4burIGNo4buRaSB04bqhbyBt4buZdCBiw7MgZOG7ryBsaeG7h3UgdHLhu5FuZyBy4buXbmcuIgorCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8g4oCcJXPigJ0iCisKKyM6IGJ1bmRsZS5jOjUwNAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAibeG7pWMgbOG7pWMgZ8OzaSDEkcOjIGNo4bq/dCIKKworIzogY29sb3IuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAiZ2nDoSB0cuG7iyBtw6B1IGtow7RuZyBo4bujcCBs4buHOiAlLipzIgorCisjOiBjb21taXQuYzo1MSBzZXF1ZW5jZXIuYzoyODExIGJ1aWx0aW4vYW0uYzozNTQgYnVpbHRpbi9hbS5jOjM5OAorIzogYnVpbHRpbi9hbS5jOjEzNjYgYnVpbHRpbi9hbS5jOjIwMDkgYnVpbHRpbi9yZXBsYWNlLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCAlcyIKKworIzogY29tbWl0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorIlZp4buHYyBo4buXIHRy4bujIGNobyA8R0lUX0RJUj4vaW5mby9ncmFmdHMgxJHDoyBs4bqhYyBo4bqtdVxuIgorInbDoCBz4bq9IGLhu4sgeMOzYSBi4buPIOG7nyBwaGnDqm4gYuG6o24gR2l0IHTGsMahbmcgbGFpLlxuIgorIlxuIgorIlZ1aSBsw7JuZyBkw7luZyBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyLEkeG7gyBjaHV54buDbiDEkeG7lWkgY8OhYyBncmFmdCB0aMOgbmggY8OhYyB0aGFtIGNoaeG6v3UgdGhheSB0aOG6vy5cbiIKKyJcbiIKKyJU4bqvdCBs4budaSBuaOG6r24gbsOgeSBi4bqxbmcgY8OhY2ggY2jhuqF5XG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCisKKyM6IGNvbW1pdC5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorIkzhuqduIGNodXnhu4NuIGdpYW8gJXMgY8OzIG3hu5l0IGNo4buvIGvDvSBHUEcga2jDtG5nIMSRw6FuZyB0aW4sIMSRxrDhu6NjIGNobyBsw6AgYuG7n2kgJXMuIgorCisjOiBjb21taXQuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvICVzIGPDsyBt4buZdCBjaOG7ryBrw70gR1BHIHNhaSwgxJHGsOG7o2MgY2hvIGzDoCBi4bufaSAlcy4iCisKKyM6IGNvbW1pdC5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyAlcyBraMO0bmcgY8OzIGNo4buvIGvDvSBHUEcuIgorCisjOiBjb21taXQuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyAlcyBjw7MgbeG7mXQgY2jhu68ga8O9IEdQRyB04buRdCBi4bufaSAlc1xuIgorCisjOiBjb21taXQuYzoxNDE1Cittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisiQ+G6o25oIGLDoW86IGdoaSBjaMO6IGNobyBs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyBo4bujcCBjaHXhuqluIFVURi04LlxuIgorIkLhuqFuIGPDsyBs4bq9IG114buRbiB0dSBi4buVIG7DsyBzYXUga2hpIHPhu61hIGzhu51pIGNow7ogdGjDrWNoLCBob+G6t2MgbMOgIMSR4bq3dCBiaeG6v25cbiIKKyJj4bqldSBow6xuaCBpMThuLmNvbW1pdGVuY29kaW5nIHRow6BuaCBi4bqjbmcgbcOjIG3DoCBk4buxIMOhbiBj4bunYSBi4bqhbiBtdeG7kW4gZMO5bmcuXG4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAidOG6rXAgdGluIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBxdcOhIG5o4buPIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHNpZ25hdHVyZSAlWCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgJVgiCittc2dzdHIgImNo4buvIGvDvSDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gJVgga2jDtG5nIGto4bubcCBjaOG7ryBrw70gJVgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICJwaGnDqm4gYuG6o24gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvICVYIGtow7RuZyBraOG7m3AgcGhpw6puIGLhuqNuICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICJwaGnDqm4gYuG6o24gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvICVYIGtow7RuZyBraOG7m3AgcGhpw6puIGLhuqNuICVYIgorCisjOiBjb21taXQtZ3JhcGguYzoyMzIKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIiIKKyJi4bqjbmcgdMOsbSBraeG6v20gbeG6o25oIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjw7JuIHRoaeG6v3U7IHThuq1wIHRpbiBjw7MgdGjhu4Mgc+G6vSAiCisia2jDtG5nIGhvw6BuIHRoaeG7h24iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IgorbXNnc3RyICJiw7kgbeG6o25oIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBraMO0bmcgxJHDum5nIGNo4buXICUwOHglMDh4IgorCisjOiBjb21taXQtZ3JhcGguYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGlkICUwOHggYXBwZWFycyBtdWx0aXBsZSB0aW1lcyIKK21zZ3N0ciAibcOjIG3huqNuaCDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gJTA4eCB4deG6pXQgaGnhu4duIG5oaeG7gXUgbOG6p24iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM1MAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgbm8gYmFzZSBncmFwaHMgY2h1bmsiCittc2dzdHIgIsSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjw7Mga2jDtG5nIGPDsyBt4bqjbmggY8OhYyDEkeG7kyBo4buNYSBjxqEgc+G7nyIKKworIzogY29tbWl0LWdyYXBoLmM6MzYwCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJtw7NjIHjDrWNoIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBraMO0bmcga2jhu5twIgorCisjOiBjb21taXQtZ3JhcGguYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW46IGxpbmUgJyVzJyBub3QgYSBoYXNoIgorbXNnc3RyICIiCisibcOzYyB4w61jaCDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8ga2jDtG5nIGjhu6NwIGzhu4c6IGTDsm5nICclcycga2jDtG5nIHBo4bqjaSBsw6AgIgorIm3hu5l0IG3DoyBixINtIgorCisjOiBjb21taXQtZ3JhcGguYzo0MzMKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgdOG6pXQgY+G6oyBjw6FjIHThuq1wIHRpbiDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU2NCBjb21taXQtZ3JhcGguYzo2MjQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisiduG7iyB0csOtIGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIGjhu6NwIGzhu4cuIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjw7MgduG6uyBuaMawIMSRw6MgIgorImLhu4sgaOG7j25nIgorCisjOiBjb21taXQtZ3JhcGguYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgbOG6p24gY2h1eeG7g24gZ2lhbyAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6ODU4IGJ1aWx0aW4vYW0uYzoxMjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIgorCisjOiBjb21taXQtZ3JhcGguYzoxMDE3IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHR5cGUgb2Ygb2JqZWN0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkga2nhu4N1IGPhu6dhIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSIKKworIzogY29tbWl0LWdyYXBoLmM6MTA0OQorbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIsSQYW5nIHThuqNpIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBjaMawYSBiaeG6v3QgdHJvbmcgxJHhu5MgdGjhu4sgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA2NgorbXNnaWQgIkV4cGFuZGluZyByZWFjaGFibGUgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIiIKKyJN4bufIHLhu5luZyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gY8OzIHRo4buDIHRp4bq/cCBj4bqtbiDEkcaw4bujYyB0cm9uZyB0cm9uZyDEkeG7kyB0aOG7iyBs4bqnbiAiCisiY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA4NQorbXNnaWQgIkNsZWFyaW5nIGNvbW1pdCBtYXJrcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIsSQYW5nIGThu41uIGThurlwIGPDoWMgxJHDoW5oIGThuqV1IGzhuqduIGNodXnhu4NuIGdpYW8gdHJvbmcgxJHhu5MgdGjhu4sgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTEwNAorbXNnaWQgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIgorbXNnc3RyICLEkGFuZyB0w61uaCB0b8OhbiBz4buRIHThuqFvIMSR4buTIHRo4buLIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBpbiAlZCBwYWNrcyIKK21zZ3N0clswXSAiIgorIsSQYW5nIHTDrG0gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGNobyDEkeG7kyB0aOG7iyBs4bqnbiBjaHV54buDbiBnaWFvIHRyb25nICVkIGfDs2kiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIHRow6ptIGfDs2kgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBt4bufIG3hu6VjIGzhu6VjIGNobyDigJwlc+KAnSIKKworIzogY29tbWl0LWdyYXBoLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWZzIgorbXNnc3RyWzBdICIiCisixJBhbmcgdMOsbSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gY2hvIMSR4buTIHRo4buLIGzhuqduIGNodXnhu4NuIGdpYW8gdOG7qyAlZCB0aGFtIGNoaeG6v3UiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAibcOjIHPhu5EgxJHhu5FpIHTGsOG7o25nIGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjU1Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggYW1vbmcgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIiIKKyLEkGFuZyB0w6xtIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBjaG8gxJHhu5MgdGjhu4sgbOG6p24gY2h1eeG7g24gZ2lhbyB0cm9uZyBz4buRIGPDoWMgxJHhu5FpICIKKyJ0xrDhu6NuZyDEkcOjIMSRw7NuZyBnw7NpIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjcwCittc2dpZCAiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIsSQYW5nIMSR4bq/bSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8ga2jDoWMgbmhhdSB0cm9uZyDEkeG7kyB0aOG7iyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAwCittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIsSQYW5nIHTDrG0gY8OhYyBj4bqhbmggbeG7nyB04buZbmcgdHJvbmcgxJHhu5MgdGjhu4sgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTM0NgorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb3JyZWN0IG51bWJlciBvZiBiYXNlIGdyYXBoIGlkcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGdoaSBz4buRIMSRw7puZyBj4bunYSBtw6MgxJHhu5MgaOG7jWEgY8ahIHPhu58iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNzkgbWlkeC5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBjw6FjIHRoxrAgbeG7pWMgZOG6q24gxJHhuqd1IGPhu6dhIOKAnCVz4oCdIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzkxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyDigJwlc+KAnSIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAixJBhbmcgZ2hpIHJhIMSR4buTIHRo4buLIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyB0cm9uZyBs4bqnbiAlZCIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5MgorbXNnaWQgInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gbeG6r3QgeMOtY2ggxJHhu5MgdGjhu4sgY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MTUwNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buVaSB0w6puIHThuq1wIHRpbiDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MjQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIHRlbXBvcmFyeSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buVaSB0w6puIHThuq1wIHRpbiDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gdOG6oW0gdGjhu51pIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjM1Cittc2dpZCAiU2Nhbm5pbmcgbWVyZ2VkIGNvbW1pdHMiCittc2dzdHIgIsSQYW5nIHF1w6l0IGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIGjDsmEgdHLhu5luIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZHVwbGljYXRlIGNvbW1pdCBpZCAlcyIKK21zZ3N0ciAiZ+G6t3AgbcOjIHPhu5EgdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyBi4buLIHRyw7luZyBs4bq3cCDigJwlc+KAnSIKKworIzogY29tbWl0LWdyYXBoLmM6MTY3MAorbXNnaWQgIk1lcmdpbmcgY29tbWl0LWdyYXBoIgorbXNnc3RyICLEkGFuZyBow7JhIHRy4buZbiDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIGNvbW1pdCBncmFwaCBmb3JtYXQgY2Fubm90IHdyaXRlICVkIGNvbW1pdHMiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIMSR4buTIGjhu41hIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgdGjhu4MgZ2hpICVkIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE4NzEKK21zZ2lkICJ0b28gbWFueSBjb21taXRzIHRvIHdyaXRlIGdyYXBoIgorbXNnc3RyICJjw7MgcXXDoSBuaGnhu4F1IGzhuqduIGNodXnhu4NuIGdpYW8gxJHhu4MgZ2hpIMSR4buTIHRo4buLIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYxCittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICIiCisidOG6rXAgdGluIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjw7MgdOG7lW5nIGtp4buDbSBraMO0bmcgxJHDum5nIHbDoCBjw7MgduG6uyBuaMawIGzDoCAiCisixJHDoyBo4buPbmciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgT0lEIG9yZGVyOiAlcyB0aGVuICVzIgorbXNnc3RyICLEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY8OzIHRo4bupIHThu7EgT0lEIGtow7RuZyDEkcO6bmc6ICVzIHNhdSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4MSBjb21taXQtZ3JhcGguYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICIiCisixJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGPDsyBnacOhIHRy4buLIGZhbm91dCBraMO0bmcgxJHDum5nOiBmYW5vdXRbJWRdID0gJXUgIT0gIgorIiV1IgorCisjOiBjb21taXQtZ3JhcGguYzoxOTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBjb21taXQtZ3JhcGgiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCBs4bqnbiBjaHV54buDbiBnaWFvIHThu6sgJXMgxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDA2Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLEkGFuZyB0aOG6qW0gdHJhIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyB0cm9uZyDEkeG7kyB0aOG7iyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBjb21taXQgJXMgZnJvbSBvYmplY3QgZGF0YWJhc2UgZm9yIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAiIgorImfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCBs4bqnbiBjaHV54buDbiBnaWFvICVzIHThu6sgY8ahIHPhu58gZOG7ryBsaeG7h3UgxJHhu5FpIHTGsOG7o25nIGNobyDEkeG7kyAiCisidGjhu4sgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJyb290IHRyZWUgT0lEIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICVzICE9ICVzIgorbXNnc3RyICIiCisiT0lEIGPDonkgZ+G7kWMgY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gJXMgdHJvbmcgxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGzDoCAlcyAhPSAiCisiJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgaXMgdG9vIGxvbmciCittc2dzdHIgIiIKKyJkYW5oIHPDoWNoIGNoYSBt4bq5IMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyAlcyBsw6AgcXXDoSBkw6BpIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yICVzIGlzICVzICE9ICVzIgorbXNnc3RyICJjaGEgbeG6uSDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY2hvICVzIGzDoCAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICIiCisiZGFuaCBzw6FjaCBjaGEgbeG6uSDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gJXMgYuG7iyBjaOG6pW0gIgorImThu6l0IHF1w6Egc+G7m20iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisixJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGPDsyBjb24gc+G7kSBraMO0bmcgbOG6p24gdOG6oW8gY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gJXMsICIKKyJuaMawbmcga2jDtG5nIHBo4bqjaSBz4buRIGtow7RuZyDhu58gY2jhu5cga2jDoWMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgbm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGNvbW1pdCAlcywgYnV0IHplcm8gZWxzZXdoZXJlIgorbXNnc3RyICIiCisixJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGPDsyBjb24gc+G7kSBraMO0bmcgcGjhuqNpIGtow7RuZyBs4bqnbiB04bqhbyBjaG8gbOG6p24gY2h1eeG7g24gIgorImdpYW8gJXMsIG5oxrBuZyBz4buRIGtow7RuZyDhu58gY2jhu5cga2jDoWMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAidOG6oW8gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGNobyBs4bqnbiBjaHV54buDbiBnaWFvICVzIGzDoCAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgZGF0ZSBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCittc2dzdHIgIiIKKyJuZ8OgeSBjaHV54buDbiBnaWFvIGNobyBs4bqnbiBjaHV54buDbiBnaWFvICVzIHRyb25nIMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyBsw6AgIgorIiU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJo4bq/dCBi4buZIG5o4bubIgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorInbGsOG7o3QgcXXDoSDEkeG7mSBzw6J1IGJhbyBn4buTbSB04buRaSDEkWEgKCVkKSB0cm9uZyBraGkgYmFvIGfhu5NtXG4iCisiXHQlc1xuIgorInThu6tcbiIKKyJcdCVzXG4iCisiTmd1ecOqbiBuaMOibiBjw7MgdGjhu4MgbMOgIGfhu5NtIHF14bqpbiB2w7JuZy4iCisKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga2hhaSB0cmnhu4NuIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJjw6FjIGJhbyBn4buTbSBj4bqldSBow6xuaCBsacOqbiBxdWFuIHBo4bqjaSDEkeG6v24gdOG7qyBjw6FjIHThuq1wIHRpbiIKKworIzogY29uZmlnLmM6MTk3Cittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGUgY29uZGl0aW9uYWxzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICJjw6FjIMSRaeG7gXUga2nhu4duIGJhbyBn4buTbSBj4bqldSBow6xuaCBsacOqbiBxdWFuIHBo4bqjaSDEkeG6v24gdOG7qyBjw6FjIHThuq1wIHRpbiIKKworIzogY29uZmlnLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIGEgc2VjdGlvbjogJXMiCittc2dzdHIgImtow7NhIGtow7RuZyBjaOG7qWEgbeG7mXQgcGjhuqduOiAlcyIKKworIzogY29uZmlnLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIHZhcmlhYmxlIG5hbWU6ICVzIgorbXNnc3RyICJraMOzYSBraMO0bmcgY2jhu6lhIGLhuqV0IGvhu7MgbeG7mXQgdMOqbiBiaeG6v24gbsOgbzogJXMiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAia2jDs2Ega2jDtG5nIMSRw7puZzogJXMiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICJraMOzYSBraMO0bmcgaOG7o3AgbOG7hyAoZMOybmcgbeG7m2kpOiAlcyIKKworIzogY29uZmlnLmM6NDQ4IGNvbmZpZy5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIKK21zZ3N0ciAidGhhbSBz4buRIGPhuqV1IGjDrG5oIGtow7RuZyBjw7MgdGjhu7FjOiAlcyIKKworIzogY29uZmlnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGZvcm1hdCBpbiAlcyIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmcga2jDtG5nIGPDsyB0aOG7sWMgdHJvbmcgJXMiCisKKyM6IGNvbmZpZy5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAidOG6rXAgdGluIGPhuqV1IGjDrG5oIHNhaSB04bqhaSBkw7JuZyAlZCB0cm9uZyBibG9iICVzIgorCisjOiBjb25maWcuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIGZpbGUgJXMiCittc2dzdHIgImPhuqV1IGjDrG5oIHNhaSB04bqhaSBkw7JuZyAlZCB0cm9uZyB04bqtcCB0aW4gJXMiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImPhuqV1IGjDrG5oIHNhaSB04bqhaSBkw7JuZyAlZCB0cm9uZyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBjb25maWcuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluIHN1Ym1vZHVsZS1ibG9iICVzIgorbXNnc3RyICJj4bqldSBow6xuaCBzYWkgdOG6oWkgZMOybmcgJWQgdHJvbmcgYmxvYi1tw7QtxJF1bi1jb24gJXMiCisKKyM6IGNvbmZpZy5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICJj4bqldSBow6xuaCBzYWkgdOG6oWkgZMOybmcgJWQgdHJvbmcgZMOybmcgbOG7h25oICVzIgorCisjOiBjb25maWcuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnc3RyICJj4bqldSBow6xuaCBzYWkgdOG6oWkgZMOybmcgJWQgdHJvbmcgJXMiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAibuG6sW0gbmdvw6BpIHBo4bqhbSB2aSIKKworIzogY29uZmlnLmM6OTc4Cittc2dpZCAiaW52YWxpZCB1bml0IgorbXNnc3RyICLEkcahbiB24buLIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBjb25maWcuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ06ICVzIgorCisjOiBjb25maWcuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gYmxvYiAlczogJXMiCittc2dzdHIgInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyBibG9iICVzOiAlcyIKKworIzogY29uZmlnLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIKK21zZ3N0ciAic2FpIGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgY+G7p2EgY+G6pXUgaMOsbmgg4oCcJXPigJ0gY2hvIOKAnCVz4oCdIHRyb25nIHThuq1wIHRpbiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6ICVzIgorbXNnc3RyICIiCisic2FpIGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgY+G7p2EgY+G6pXUgaMOsbmgg4oCcJXPigJ0gY2hvIOKAnCVz4oCdIHRyb25nIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW46ICVzIgorCisjOiBjb25maWcuYzoxMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIHN1Ym1vZHVsZS1ibG9iICVzOiAlcyIKK21zZ3N0ciAiIgorInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyBzdWJtb2R1bGUtYmxvYiAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gY29tbWFuZCBsaW5lICVzOiAlcyIKK21zZ3N0ciAic2FpIGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgY+G7p2EgY+G6pXUgaMOsbmgg4oCcJXPigJ0gY2hvIOKAnCVz4oCdIHRyb25nIGTDsm5nIGzhu4duaCAlczogJXMiCisKKyM6IGNvbmZpZy5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgJXM6ICVzIgorCisjOiBjb25maWcuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIG3hu58gcuG7mW5nIHRoxrAgbeG7pWMgbmfGsOG7nWkgZMO5bmcgdHJvbmc6IOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLigJwlc+KAnSBkw6BuaCBjaG8g4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgZOG6pXUgduG6v3QgdGjhu51pIGdpYW4gaOG7o3AgbOG7hyIKKworIzogY29uZmlnLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiCittc2dzdHIgImNoaeG7gXUgZMOgaSBhYmJyZXYgbuG6sW0gbmdvw6BpIHBo4bqhbSB2aTogJWQiCisKKyM6IGNvbmZpZy5jOjEyMjIgY29uZmlnLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibeG7qWMgbsOpbiB6bGliICVkIGzDoCBzYWkiCisKKyM6IGNvbmZpZy5jOjEzMjUKK21zZ2lkICJjb3JlLmNvbW1lbnRDaGFyIHNob3VsZCBvbmx5IGJlIG9uZSBjaGFyYWN0ZXIiCittc2dzdHIgImNvcmUuY29tbWVudENoYXIgY2jhu4kgxJHGsOG7o2MgY8OzIG3hu5l0IGvDvSB04buxIgorCisjOiBjb25maWcuYzoxMzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAiY2jhur8gxJHhu5kga2jDtG5nIGjhu6NwIGzhu4cgxJHhu5FpIHbhu5tpIHZp4buHYyB04bqhbyDEkeG7kWkgdMaw4bujbmc6ICVzIgorCisjOiBjb25maWcuYzoxNDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgImdpw6EgdHLhu4sgY2hvICVzIHNhaSBk4bqhbmciCisKKyM6IGNvbmZpZy5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgImdpw6EgdHLhu4sgY2hvICVzIHNhaSBk4bqhbmc6ICVzIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAicGjhuqNpIGzDoCBt4buZdCB0cm9uZyBz4buRIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsIHVwc3RyZWFtIGhheSBjdXJyZW50IgorCisjOiBjb25maWcuYzoxNTE4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAibeG7qWMgbsOpbiBnw7NpICVkIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBjb25maWcuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIGNvbmZpZyBibG9iIG9iamVjdCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6o2kgxJHhu5FpIHTGsOG7o25nIGJsb2IgY+G6pXUgaMOsbmgg4oCcJXPigJ0iCisKKyM6IGNvbmZpZy5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIgorbXNnc3RyICJ0aGFtIGNoaeG6v3Ug4oCcJXPigJ0ga2jDtG5nIGNo4buJIMSR4bq/biBt4buZdCBibG9iIG7DoG8gY+G6oyIKKworIzogY29uZmlnLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIMSRaeG7g20geMOpdCBkdXnhu4d0IOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIGPDuiBwaMOhcCAlcyIKKworIzogY29uZmlnLmM6MTc0NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY+G6pXUgaMOsbmggZMOybmcgbOG7h25oIgorCisjOiBjb25maWcuYzoyMDk2Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICLEkcOjIGPDsyBs4buXaSBjaMawYSBiaeG6v3QgeOG6o3kgcmEgdHJvbmcga2hpIMSR4buNYyBjw6FjIHThuq1wIHRpbiBj4bqldSBow6xuaCIKKworIzogY29uZmlnLmM6MjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIlcyBraMO0bmcgaOG7o3AgbOG7hzog4oCcJXPigJ0iCisKKyM6IGNvbmZpZy5jOjIzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIHZhbHVlICclZCcgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwIgorbXNnc3RyICJnacOhIHRy4buLIHNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSDigJwlZOKAnSBwaOG6o2kgbuG6sW0gZ2nhu69hIDAgdsOgIDEwMCIKKworIzogY29uZmlnLmM6MjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCDigJwlc+KAnSB04burIGPhuqV1IGjDrG5oIGTDsm5nIGzhu4duaCIKKworIzogY29uZmlnLmM6MjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgInNhaSBiaeG6v24gY+G6pXUgaMOsbmgg4oCcJXPigJ0gdHJvbmcgdOG6rXAgdGluIOKAnCVz4oCdIHThuqFpIGTDsm5nICVkIgorCisjOiBjb25maWcuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lICclcyciCittc2dzdHIgInTDqm4gY+G7p2EgcGjhuqduIGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoyNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIGPDsyDEkWEgZ2nDoSB0cuG7iyIKKworIzogY29uZmlnLmM6MjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGdoaSB04bqtcCB0aW4gY+G6pXUgaMOsbmgg4oCcJXPigJ0iCisKKyM6IGNvbmZpZy5jOjI3NTMgY29uZmlnLmM6MzA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGtow7NhIHThuq1wIHRpbiBj4bqldSBow6xuaCAlcyIKKworIzogY29uZmlnLmM6Mjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICLEkWFuZyBt4bufIOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoyNzk5IGJ1aWx0aW4vY29uZmlnLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0dGVybjogJXMiCittc2dzdHIgIm3huqt1IGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogY29uZmlnLmM6MjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICJ04bqtcCB0aW4gY+G6pXUgaMOsbmgg4oCcJXPigJ0ga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGNvbmZpZy5jOjI4MzcgY29uZmlnLmM6MzA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmc3RhdCBvbiAlcyBmYWlsZWQiCittc2dzdHIgImZzdGF0IHRyw6puICVzIGfhurdwIGzhu5dpIgorCisjOiBjb25maWcuYzoyODQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBtbWFwIOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoyODU3IGNvbmZpZy5jOjMwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICJjaG1vZCB0csOqbiAlcyBn4bq3cCBs4buXaSIKKworIzogY29uZmlnLmM6Mjk0MiBjb25maWcuYzozMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gY+G6pXUgaMOsbmgg4oCcJXPigJ0iCisKKyM6IGNvbmZpZy5jOjI5NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCAnJXMnIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG6t3Qg4oCcJXPigJ0gdGjDoG5oIOKAnCVz4oCdIgorCisjOiBjb25maWcuYzoyOTc4IGJ1aWx0aW4vcmVtb3RlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDtGkgxJHhurd0IOKAnCVz4oCdIgorCisjOiBjb25maWcuYzozMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIKK21zZ3N0ciAidMOqbiBj4bunYSBwaOG6p24ga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBjb25maWcuYzozMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgdmFsdWUgZm9yICclcyciCittc2dzdHIgInRoaeG6v3UgZ2nDoSB0cuG7iyBjaG8gY2hvIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICJtw6F5IGNo4bunIGLhu4sgdHJlbyB0csOqbiBs4bqnbiB0aeG6v3AgeMO6YyDEkeG6p3UgdGnDqm4iCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIMSR4buNYyB04burIGtobyB0csOqbiBt4bqhbmcuXG4iCisiXG4iCisiVnVpIGzDsm5nIGNo4bqvYyBjaOG6r24gbMOgIGLhuqFuIGPDsyDEkeG7pyB0aOG6qW0gcXV54buBbiB0cnV5IGPhuq1wXG4iCisidsOgIGtobyBjaOG7qWEgxJHDoyBz4bq1biBjw7MuIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICJtw6F5IGNo4bunIGtow7RuZyBo4buXIHRy4bujIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciBkb2Vzbid0IHN1cHBvcnQgZmVhdHVyZSAnJXMnIgorbXNnc3RyICJtw6F5IGNo4bunIGtow7RuZyBo4buXIHRy4bujIHTDrW5oIG7Eg25nIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6MTE0Cittc2dpZCAiZXhwZWN0ZWQgZmx1c2ggYWZ0ZXIgY2FwYWJpbGl0aWVzIgorbXNnc3RyICJj4bqnbiDEkeG6qXkgZOG7ryBsaeG7h3UgbMOqbiDEkcSpYSBzYXUgY8OhYyBjYXBhYmlsaXRpZXMiCisKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAiYuG7jyBxdWEgY2FwYWJpbGl0aWVzIHNhdSBkw7JuZyDEkeG6p3UgdGnDqm4g4oCcJXPigJ0iCisKKyM6IGNvbm5lY3QuYzoyNTIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBjYXBhYmlsaXRpZXNee30iCittc2dzdHIgImzhu5dpIGdpYW8gdGjhu6ljOiBraMO0bmcgY+G6p24gY2FwYWJpbGl0aWVzXnt9IgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAibOG7l2kgZ2lhbyB0aOG7qWM6IGPhuqduIHNoYS0xIHNoYWxsb3csIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2Mg4oCcJXPigJ0iCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgImtobyDEkcOjIOG7nyDEkWnhu4NtIGN14buRaSBraG/DoWMgbsOqbiBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc2hhbGxvdyIKKworIzogY29ubmVjdC5jOjMxMworbXNnaWQgImludmFsaWQgcGFja2V0IgorbXNnc3RyICJnw7NpIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBjb25uZWN0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkICclcyciCittc2dzdHIgImzhu5dpIGdpYW8gdGjhu6ljOiBraMO0bmcgY+G6p24g4oCcJXPigJ0iCisKKyM6IGNvbm5lY3QuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBscy1yZWZzIHJlc3BvbnNlOiAlcyIKK21zZ3N0ciAidHLhuqMgduG7gSBj4bunYSBscy1yZWZzIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogY29ubmVjdC5jOjQ0NQorbXNnaWQgImV4cGVjdGVkIGZsdXNoIGFmdGVyIHJlZiBsaXN0aW5nIgorbXNnc3RyICJj4bqnbiDEkeG6qXkgZOG7ryBsaeG7h3UgbMOqbiDEkcSpYSBzYXUga2hpIGxp4buHdCBrw6ogdGhhbSBjaGnhur91IgorCisjOiBjb25uZWN0LmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sICclcycgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiZ2lhbyB0aOG7qWMg4oCcJXPigJ0gY2jGsGEgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogY29ubmVjdC5jOjU5NQorbXNnaWQgInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4bq3dCBTT19LRUVQQUxJVkUgdHLDqm4g4buVIGPhuq9tIgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICLEkGFuZyB0w6xtIGtp4bq/bSAlcyDigKYgIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICJraMO0bmcgdMOsbSDEkcaw4bujYyAlcyAoY+G7lW5nICVzKSAoJXMpIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJMb29raW5nIHVwICVzIC4uLiAiCisjOiBjb25uZWN0LmM6NjQzIGNvbm5lY3QuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmUuXG4iCisiQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIKK21zZ3N0ciAiIgorInhvbmcuXG4iCisixJBhbmcga+G6v3QgbuG7kWkgxJHhur9uICVzIChj4buVbmcgJXMpIOKApiAiCisKKyM6IGNvbm5lY3QuYzo2NjUgY29ubmVjdC5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4Mga+G6v3QgbuG7kWkgxJHhur9uICVzOlxuIgorIiVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhpcyBpcyB0aGUgZW5kIG9mICJDb25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIgorIzogY29ubmVjdC5jOjY3MSBjb25uZWN0LmM6NzQ4Cittc2dpZCAiZG9uZS4iCittc2dzdHIgImhvw6BuIHThuqV0LiIKKworIzogY29ubmVjdC5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgJXMgKCVzKSIKKworIzogY29ubmVjdC5jOjcwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHBvcnQgJXMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgY+G7lW5nICVzIgorCisjOiBjb25uZWN0LmM6ODQ1IGNvbm5lY3QuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgaG9zdG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICLEkcOjIGtow7NhIHTDqm4gbcOheSBs4bqhIOKAnCVz4oCdIgorCisjOiBjb25uZWN0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcG9ydCAnJXMnIGJsb2NrZWQiCittc2dzdHIgIsSRw6Mga2jDs2EgY+G7lW5nIGzhuqEg4oCcJXPigJ0iCisKKyM6IGNvbm5lY3QuYzo4NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXJ0IHByb3h5ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSDhu6d5IG5oaeG7h20g4oCcJXPigJ0iCisKKyM6IGNvbm5lY3QuYzo5MjgKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZDsgc2VlICdnaXQgaGVscCBwdWxsJyBmb3IgdmFsaWQgdXJsIHN5bnRheCIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgxJHhu4tuaCDEkcaw4budbmcgZOG6q247IHhlbSdnaXQgaGVscCBwdWxs4oCdIMSR4buDIGJp4bq/dCBjw7ogcGjDoXAgdXJsIGjhu6NwIGzhu4ciCisKKyM6IGNvbm5lY3QuYzoxMTIzCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNCIKK21zZ3N0ciAic3NoIGJp4bq/biB0aOG7gyDigJxzaW1wbGXigJ0ga2jDtG5nIGjhu5cgdHLhu6MgLTQiCisKKyM6IGNvbm5lY3QuYzoxMTM1Cittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCAtNiIKK21zZ3N0ciAic3NoIGJp4bq/biB0aOG7gyDigJxzaW1wbGXigJ0ga2jDtG5nIGjhu5cgdHLhu6MgLTYiCisKKyM6IGNvbm5lY3QuYzoxMTUyCittc2dpZCAic3NoIHZhcmlhbnQgJ3NpbXBsZScgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHBvcnQiCittc2dzdHIgInNzaCBiaeG6v24gdGjhu4Mg4oCcc2ltcGxl4oCdIGtow7RuZyBo4buXIHRy4bujIMSR4bq3dCBj4buVbmciCisKKyM6IGNvbm5lY3QuYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgcGF0aG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICLEkcOjIGtow7NhIHTDqm4gxJHGsOG7nW5nIGThuqtuIGzhuqEg4oCcJXPigJ0iCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgImtow7RuZyB0aOG7gyBy4bq9IG5ow6FuaCB0aeG6v24gdHLDrG5oIGNvbiIKKworIzogY29ubmVjdGVkLmM6ODkgYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBr4bq/dCBu4buRaSIKKworIzogY29ubmVjdGVkLmM6MTAxCittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGNo4bqheSDigJxnaXQgcmV2LWxpc3TigJ0iCisKKyM6IGNvbm5lY3RlZC5jOjEyMQorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGdoaSB2w6BvIHJldi1saXN0IgorCisjOiBjb25uZWN0ZWQuYzoxMjgKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSRw7NuZyDEkeG6p3UgdsOgbyBjaHXhuqluIHN0ZGluIGPhu6dhIHJldi1saXN0IgorCisjOiBjb252ZXJ0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgY3JsZl9hY3Rpb24gJWQiCittc2dzdHIgImNybGZfYWN0aW9uICVkIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBjb252ZXJ0LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgIkNSTEYgbsOqbiDEkcaw4bujYyB0aGF5IGLhurFuZyBMRiB0cm9uZyAlcyIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJDUkxGIHPhur0gYuG7iyB0aGF5IHRo4bq/IGLhurFuZyBMRiB0cm9uZyAlcy5cbiIKKyJU4bqtcCB0aW4gc+G6vSBjw7Mga2nhu4N1IHh14buRbmcgZMOybmcgbmjGsCBi4bqjbiBn4buRYyB0cm9uZyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIGPhu6dhIGLhuqFuIgorCisjOiBjb252ZXJ0LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMiCittc2dzdHIgIkxGIG7Dqm4gdGhheSBi4bqxbmcgQ1JMRiB0cm9uZyAlcyIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJMRiBz4bq9IGLhu4sgdGhheSB0aOG6vyBi4bqxbmcgQ1JMRiB0cm9uZyAlcy5cbiIKKyJU4bqtcCB0aW4gc+G6vSBjw7Mga2nhu4N1IHh14buRbmcgZMOybmcgbmjGsCBi4bqjbiBn4buRYyB0cm9uZyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIGPhu6dhIGLhuqFuIgorCisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAiQk9NIGLhu4sgY+G6pW0gdHJvbmcg4oCcJXPigJ0gbuG6v3UgxJHGsOG7o2MgbcOjIGjDs2EgbMOgICVzIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lLipzIGFzICIKKyJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisiVOG6rXAgdGluIOKAnCVz4oCdIGPDsyBjaOG7qWEga8O9IGhp4buHdSB0aOG7qSB04buxIGJ5dGUgKEJPTSkuIFZ1aSBsw7JuZyBkw7luZyBVVEYtJS4qcyBuaMawICIKKyJsw6AgYuG6o25nIG3DoyBjw6J5IGzDoG0gdmnhu4djLiIKKworIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICJCT00gbMOgIGLhuq90IGJ14buZYyB0cm9uZyDigJwlc+KAnSBu4bq/dSDEkcaw4bujYyBtw6MgaMOzYSBsw6AgJXMiCisKKyM6IGNvbnZlcnQuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlICclcycgaXMgbWlzc2luZyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJXNCRSBvciBVVEYtIgorIiVzTEUgKGRlcGVuZGluZyBvbiB0aGUgYnl0ZSBvcmRlcikgYXMgd29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAiIgorIlThuq1wIHRpbiDigJwlc+KAnSBjw7JuIHRoaeG6v3Uga8O9IGhp4buHdSB0aOG7qSB04buxIGJ5dGUgKEJPTSkuIFZ1aSBsw7JuZyBkw7luZyBVVEYtJXNCRSBoYXkgIgorIlVURi0lc0xFIChjw7JuIHBo4bulYyB0aHXhu5ljIHbDoG8gdGjhu6kgdOG7sSBieXRlKSBuaMawIGzDoCBi4bqjbmcgbcOjIGPDonkgbMOgbSB2aeG7h2MuIgorCisjOiBjb252ZXJ0LmM6NDE5IGNvbnZlcnQuYzo0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGVuY29kZSAnJXMnIGZyb20gJXMgdG8gJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBtw6MgaMOzYSDigJwlc+KAnSAgdOG7qyDigJwlc+KAnSBzYW5nIOKAnCVz4oCdIgorCisjOiBjb252ZXJ0LmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVuY29kaW5nICclcycgZnJvbSAlcyB0byAlcyBhbmQgYmFjayBpcyBub3QgdGhlIHNhbWUiCittc2dzdHIgIm3DoyBow7NhIOKAnCVz4oCdIHThu6sgJXMgdGjDoG5oICVzIHbDoCBuZ8aw4bujYyB0cuG7nyBs4bqhaSBraMO0bmcgcGjhuqNpIGzDoCBjw7luZyIKKworIzogY29udmVydC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayB0byBydW4gZXh0ZXJuYWwgZmlsdGVyICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBy4bq9IG5ow6FuaCB0aeG6v24gdHLDrG5oIMSR4buDIGNo4bqheSBi4buZIGzhu41jIGLDqm4gbmdvw6BpIOKAnCVz4oCdIgorCisjOiBjb252ZXJ0LmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmZWVkIHRoZSBpbnB1dCB0byBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGPhuqVwIMSR4bqndSB2w6BvIGNobyBi4buZIGzhu41jIGLDqm4gbmdvw6BpIOKAnCVz4oCdIgorCisjOiBjb252ZXJ0LmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCAlZCIKK21zZ3N0ciAiY2jhuqF5IGLhu5kgbOG7jWMgYsOqbiBuZ2/DoGkg4oCcJXPigJ0gZ+G6t3AgbOG7l2kgJWQiCisKKyM6IGNvbnZlcnQuYzo3MzAgY29udmVydC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICLEkeG7jWMgdOG7qyBi4buZIGzhu41jIGLDqm4gbmdvw6BpIOKAnCVz4oCdIGfhurdwIGzhu5dpIgorCisjOiBjb252ZXJ0LmM6NzM2IGNvbnZlcnQuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgY2jhuqF5IGLhu5kgbOG7jWMgYsOqbiBuZ2/DoGkg4oCcJXPigJ0iCisKKyM6IGNvbnZlcnQuYzo4MzkKK21zZ2lkICJ1bmV4cGVjdGVkIGZpbHRlciB0eXBlIgorbXNnc3RyICJn4bq3cCBraeG7g3UgYuG7mSBs4buNYyB0aOG7q2EiCisKKyM6IGNvbnZlcnQuYzo4NTAKK21zZ2lkICJwYXRoIG5hbWUgdG9vIGxvbmcgZm9yIGV4dGVybmFsIGZpbHRlciIKK21zZ3N0ciAidMOqbiDEkcaw4budbmcgZOG6q24gcXXDoSBkw6BpIGNobyBi4buZIGzhu41jIGLDqm4gbmdvw6BpIgorCisjOiBjb252ZXJ0LmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHRlcm5hbCBmaWx0ZXIgJyVzJyBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUgYWx0aG91Z2ggbm90IGFsbCBwYXRocyBoYXZlICIKKyJiZWVuIGZpbHRlcmVkIgorbXNnc3RyICIiCisiYuG7mSBs4buNYyBiw6puIG5nb8OgaSDigJwlc+KAnSBraMO0bmcgc+G6tW4gc8OgbmcgbuG7r2EgbeG6t2MgZMO5IGtow7RuZyBwaOG6o2kgdOG6pXQgY+G6oyBjw6FjIMSRxrDhu51uZyAiCisiZOG6q24gxJHDoyDEkcaw4bujYyBs4buNYyIKKworIzogY29udmVydC5jOjEyMjMKK21zZ2lkICJ0cnVlL2ZhbHNlIGFyZSBubyB2YWxpZCB3b3JraW5nLXRyZWUtZW5jb2RpbmdzIgorbXNnc3RyICJ0cnVlL2ZhbHNlIGzDoCBraMO0bmcgcGjhuqNpIGLhuqNuZy1tw6MtY8OieS1sw6BtLXZp4buHYyBo4bujcCBs4buHIgorCisjOiBjb252ZXJ0LmM6MTQxMSBjb252ZXJ0LmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4gZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICIlczogZ+G6t3AgbOG7l2kga2hpIHjDs2EgYuG7mSBs4buNYyDigJwlc+KAnSIKKworIzogY29udmVydC5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIlczogc211ZGdlIGLhu5kgbOG7jWMgJXMgZ+G6t3AgbOG7l2kiCisKKyM6IGRhdGUuYzoxMzgKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICLhu58gdGjhu51pIHTGsMahbmcgbGFpIgorCisjOiBkYXRlLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBnacOieSB0csaw4bubYyIKKworIzogZGF0ZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gbWludXRlcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gcGjDunQgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBob3VycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gZ2nhu50gdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IG5nw6B5IHRyxrDhu5tjIgorCisjOiBkYXRlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gd2Vla3MgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IHR14bqnbiB0csaw4bubYyIKKworIzogZGF0ZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IHRow6FuZyB0csaw4bubYyIKKworIzogZGF0ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIiCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4geWVhcnMiCittc2dzdHJbMF0gIiU8UFJJdU1BWD4gbsSDbSIKKworIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICU8UFJJdU1BWD4gbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlcywgJTxQUkl1TUFYPiB0aMOhbmcgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxOTcgZGF0ZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiBuxINtIHRyxrDhu5tjIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjcyCittc2dpZCAiUHJvcGFnYXRpbmcgaXNsYW5kIG1hcmtzIgorbXNnc3RyICLEkGFuZyBsYW4gdHJ1eeG7gW4gY8OhYyDEkcOhbmggZOG6pXUgaXNsYW5kIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB0cmVlIG9iamVjdCAlcyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGPDonkgc2FpIOKAnCVz4oCdIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqjaSBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkgaXNsYW5kIGNobyDigJwlc+KAnTogJXMiCisKKyM6IGRlbHRhLWlzbGFuZHMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaXNsYW5kIHJlZ2V4IGZyb20gY29uZmlnIGhhcyB0b28gbWFueSBjYXB0dXJlIGdyb3VwcyAobWF4PSVkKSIKK21zZ3N0ciAiIgorImJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSBpc2xhbmQgdOG7qyBj4bqldSBow6xuaCBjw7MgcXXDoSBuaGnhu4F1IG5ow7NtIGNo4bulcCAodOG7kWkgxJFhPSVkKSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAixJDDoyDEkcOhbmggZOG6pXUgJWQgaXNsYW5kLCB4b25nLlxuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu41jIHThuq1wLXRpbi10aOG7qS104buxIOKAnCVz4oCdIgorCisjOiBkaWZmY29yZS1yZW5hbWUuYzo1NDMKK21zZ2lkICJQZXJmb3JtaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAixJBhbmcgdGjhu7FjIGhp4buHbiBkw7IgdMOsbSDEkeG7lWkgdMOqbiBraMO0bmcgY2jDrW5oIHjDoWMiCisKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgImdpdCBkaWZmIC0tbm8taW5kZXggWzxjw6FjIHTDuXkgY2jhu41uPl0gPC/Ekcaw4budbmcvZOG6q24+IDwvxJHGsOG7nW5nL2ThuqtuPiIKKworIzogZGlmZi1uby1pbmRleC5jOjI2MworbXNnaWQgIiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgIgorInRyZWUiCittc2dzdHIgIiIKKyJLaMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIGdpdC4gRMO5bmcgLS1uby1pbmRleCDEkeG7gyBzbyBzw6FuaCBoYWkgxJHGsOG7nW5nIGThuqtuIGLDqm4gIgorIm5nb8OgaSBt4buZdCBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBkaWZmLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiICBH4bq3cCBs4buXaSBraGkgcGjDom4gdMOtY2ggZGlyc3RhdCBj4bqvdCBi4buPIHBo4bqnbiB0csSDbSDigJwlc+KAnVxuIgorCisjOiBkaWZmLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiAgS2jDtG5nIGhp4buDdSDEkeG7kWkgc+G7kSBkaXJzdGF0IOKAnCVz4oCdXG4iCisKKyM6IGRpZmYuYzoyOTYKK21zZ2lkICIiCisiY29sb3IgbW92ZWQgc2V0dGluZyBtdXN0IGJlIG9uZSBvZiAnbm8nLCAnZGVmYXVsdCcsICdibG9ja3MnLCAnemVicmEnLCAiCisiJ2RpbW1lZC16ZWJyYScsICdwbGFpbiciCittc2dzdHIgIiIKKyJjw6BpIMSR4bq3dCBtw6B1IMSRw6MgZGkgY2h1eeG7g24gcGjhuqNpIGzDoCBt4buZdCB0cm9uZyDigJxub+KAnSwg4oCcZGVmYXVsdOKAnSwg4oCcYmxvY2tz4oCdLCAiCisi4oCcemVicmHigJ0sIOKAnGRpbW1lZF96ZWJyYeKAnSwg4oCccGxhaW7igJ0iCisKKyM6IGRpZmYuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnLCBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUtc3BhY2UtY2hhbmdlJywgIgorIidpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKK21zZ3N0ciAiIgorImtow7RuZyBoaeG7g3UgY2jhur8gxJHhu5kgY29sb3ItbW92ZWQtd3Mg4oCcJXPigJ0sIGPDoWMgZ2nDoSB0cuG7iyBjw7MgdGjhu4MgbMOgIOKAnGlnbm9yZS1zcGFjZS0iCisiY2hhbmdl4oCdLCDigJxpZ25vcmUtc3BhY2UtYXQtZW9s4oCdLCDigJxpZ25vcmUtYWxsLXNwYWNl4oCdLCDigJxhbGxvdy1pbmRlbnRhdGlvbi0iCisiY2hhbmdl4oCdIgorCisjOiBkaWZmLmM6MzMyCittc2dpZCAiIgorImNvbG9yLW1vdmVkLXdzOiBhbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2UgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgIgorIndoaXRlc3BhY2UgbW9kZXMiCittc2dzdHIgIiIKKyJjb2xvci1tb3ZlZC13czogYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlIGtow7RuZyB0aOG7gyB04buVIGjhu6NwIGPDuW5nIHbhu5tpIGPDoWMgY2jhur8gIgorIsSR4buZIGtob+G6o25nIHRy4bqvbmcga2jDoWMiCisKKyM6IGRpZmYuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIktow7RuZyBoaeG7g3UgZ2nDoSB0cuG7iyBjaG8gYmnhur9uIGPhuqV1IGjDrG5oIOKAnGRpZmYuc3VibW9kdWxl4oCdOiDigJwlc+KAnSIKKworIzogZGlmZi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIlTDrG0gdGjhuqV5IGPDoWMgbOG7l2kgdHJvbmcgYmnhur9uIGPhuqV1IGjDrG5oIOKAnGRpZmYuZGlyc3RhdOKAnTpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAicGjhuqduIG3hu4FtIGRpZmYg4bufIGLDqm4gbmdvw6BpIMSRw6MgY2jhur90LCBk4burbmcgdOG6oWkgJXMiCisKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIHbDoCAtcyBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1IgorCisjOiBkaWZmLmM6NDU1MAorbXNnaWQgIi1HLCAtUyBhbmQgLS1maW5kLW9iamVjdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIC1HLCAtUywgdsOgIC0tZmluZC1vYmplY3QgbG/huqFpIHThu6sgbOG6q24gbmhhdSIKKworIzogZGlmZi5jOjQ2MjgKK21zZ2lkICItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIKK21zZ3N0ciAiLS1mb2xsb3cgY+G6p24gY2jDrW5oIHjDoWMgbeG7mXQgxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIgorCisjOiBkaWZmLmM6NDY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tc3RhdCB2YWx1ZTogJXMiCittc2dzdHIgImdpw6EgdHLhu4sgLS1zdGF0IGtow7RuZyBo4bujcCBs4buHOiDigJwlc+KAnSIKKworIzogZGlmZi5jOjQ2ODEgZGlmZi5jOjQ2ODYgZGlmZi5jOjQ2OTEgZGlmZi5jOjQ2OTYgZGlmZi5jOjUyMDkKKyM6IHBhcnNlLW9wdGlvbnMuYzoxOTkgcGFyc2Utb3B0aW9ucy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlc+KAnSBj4bqnbiBt4buZdCBnacOhIHRy4buLIGLhurFuZyBz4buRIgorCisjOiBkaWZmLmM6NDcxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIMSR4buRaSBz4buRIHTDuXkgY2jhu41uIC0tZGlyc3RhdC8tWDpcbiIKKyIlcyIKKworIzogZGlmZi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGzhu5twIHRoYXkgxJHhu5VpIOKAnCVj4oCdIHRyb25nIC0tZGlmZi1maWx0ZXI9JXMiCisKKyM6IGRpZmYuYzo0ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgZ2nDoSB0cuG7iyBzYXUgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCisKKyM6IGRpZmYuYzo0ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kg4oCcJXPigJ0iCisKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIlcyBj4bqnbiBk4bqhbmcgPG4+LzxtPiIKKworIzogZGlmZi5jOjQ5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhwZWN0cyBhIGNoYXJhY3RlciwgZ290ICclcyciCittc2dzdHIgIiVzIGPhuqduIG3hu5l0IGvDvSB04buxLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIOKAnCVz4oCdIgorCisjOiBkaWZmLmM6NDkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS1jb2xvci1tb3ZlZCBhcmd1bWVudDogJXMiCittc2dzdHIgIsSR4buRaSBz4buRIC0tY29sb3ItbW92ZWQgc2FpOiAlcyIKKworIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAiY2jhur8gxJHhu5kg4oCcJXPigJ0ga2jDtG5nIGjhu6NwIGzhu4cgdHJvbmcgLS1jb2xvci1tb3ZlZC13cyIKKworIzogZGlmZi5jOjQ5ODQKK21zZ2lkICIiCisib3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgXCJteWVyc1wiLCBcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCAiCisiXCJoaXN0b2dyYW1cIiIKK21zZ3N0ciAiIgorInTDuXkgY2jhu41uICBkaWZmLWFsZ29yaXRobSBjaOG6pXAgbmjhuq1uIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiB2w6AgIgorIlwiaGlzdG9ncmFtXCIiCisKKyM6IGRpZmYuYzo1MDIwIGRpZmYuYzo1MDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgdG8gJXMiCittc2dzdHIgInRoYW0gc+G7kSBjaG8gJXMga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGRpZmYuYzo1MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgcGjDom4gdMOtY2ggxJHhu5FpIHPhu5EgdMO5eSBjaOG7jW4gLS1zdWJtb2R1bGU6IOKAnCVz4oCdIgorCisjOiBkaWZmLmM6NTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgLS13b3JkLWRpZmYgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLEkeG7kWkgc+G7kSAtLXdvcmQtZGlmZiBzYWk6ICVzIgorCisjOiBkaWZmLmM6NTI1NworbXNnaWQgIkRpZmYgb3V0cHV0IGZvcm1hdCBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIMSR4buLbmggZOG6oW5nIGtoaSB4deG6pXQgY8OhYyBraMOhYyBiaeG7h3QiCisKKyM6IGRpZmYuYzo1MjU5IGRpZmYuYzo1MjY1Cittc2dpZCAiZ2VuZXJhdGUgcGF0Y2giCittc2dzdHIgInThuqFvIG1p4bq/bmcgdsOhIgorCisjOiBkaWZmLmM6NTI2MiBidWlsdGluL2xvZy5jOjE3MworbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJjaOG6t24gbeG7jWkga+G6v3QgeHXhuqV0IHThu6sgZGlmZiIKKworIzogZGlmZi5jOjUyNjcgZGlmZi5jOjUzODEgZGlmZi5jOjUzODgKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZGlmZi5jOjUyNjggZGlmZi5jOjUyNzEKK21zZ2lkICJnZW5lcmF0ZSBkaWZmcyB3aXRoIDxuPiBsaW5lcyBjb250ZXh0IgorbXNnc3RyICJ04bqhbyBraMOhYyBiaeG7h3QgduG7m2kgPG4+IGTDsm5nIG5n4buvIGPhuqNuaCIKKworIzogZGlmZi5jOjUyNzMKK21zZ2lkICJnZW5lcmF0ZSB0aGUgZGlmZiBpbiByYXcgZm9ybWF0IgorbXNnc3RyICJ04bqhbyBraMOhYyBiaeG7h3Qg4bufIMSR4buLbmggZOG6oW5nIHRow7QiCisKKyM6IGRpZmYuYzo1Mjc2Cittc2dpZCAic3lub255bSBmb3IgJy1wIC0tcmF3JyIKK21zZ3N0ciAixJHhu5NuZyBuZ2jEqWEgduG7m2kg4oCcLXAgLS1yYXfigJ0iCisKKyM6IGRpZmYuYzo1MjgwCittc2dpZCAic3lub255bSBmb3IgJy1wIC0tc3RhdCciCittc2dzdHIgIsSR4buTbmcgbmdoxKlhIHbhu5tpIOKAnC1wIC0tc3RhdOKAnSIKKworIzogZGlmZi5jOjUyODQKK21zZ2lkICJtYWNoaW5lIGZyaWVuZGx5IC0tc3RhdCIKK21zZ3N0ciAiLS1zdGF0IHRodeG6rW4gdGnhu4duIGNobyBtw6F5IMSR4buNYyIKKworIzogZGlmZi5jOjUyODcKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIC0tc3RhdCIKK21zZ3N0ciAiY2jhu4kgeHXhuqV0IG5o4buvbmcgZMOybmcgY3Xhu5FpIGPhu6dhIC0tc3RhdCIKKworIzogZGlmZi5jOjUyODkgZGlmZi5jOjUyOTcKK21zZ2lkICI8cGFyYW0xLHBhcmFtMj4uLi4iCittc2dzdHIgIjx0aGFtX3Phu5FfMSx0aGFtX3Phu5FfMj7igKYiCisKKyM6IGRpZmYuYzo1MjkwCittc2dpZCAiIgorIm91dHB1dCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbGF0aXZlIGFtb3VudCBvZiBjaGFuZ2VzIGZvciBlYWNoIHN1Yi1kaXJlY3RvcnkiCittc2dzdHIgIsSR4bqndSByYSBwaMOibiBwaOG7kWkgY+G7p2Egc+G7kSBsxrDhu6NuZyB0aGF5IMSR4buVaSB0xrDGoW5nIMSR4buRaSBjaG8gbeG7l2kgdGjGsCBt4bulYyBjb24iCisKKyM6IGRpZmYuYzo1Mjk0Cittc2dpZCAic3lub255bSBmb3IgLS1kaXJzdGF0PWN1bXVsYXRpdmUiCittc2dzdHIgIsSR4buTbmcgbmdoxKlhIHbhu5tpIC0tZGlyc3RhdD1jdW11bGF0aXZlIgorCisjOiBkaWZmLmM6NTI5OAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZGlyc3RhdD1maWxlcyxwYXJhbTEscGFyYW0yLi4uIgorbXNnc3RyICLEkeG7k25nIG5naMSpYSB24bubaSAtLWRpcnN0YXQ9ZmlsZXMscGFyYW0xLHBhcmFtMuKApiIKKworIzogZGlmZi5jOjUzMDIKK21zZ2lkICJ3YXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIGNvbmZsaWN0IG1hcmtlcnMgb3Igd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKyJj4bqjbmggYsOhbyBu4bq/dSBjw6FjIHRoYXkgxJHhu5VpIMSRxrBhIHJhIGPDoWMgYuG7mSB04bqhbyB4dW5nIMSR4buZdCBoYXkgbOG7l2kga2hv4bqjbmcgdHLhuq9uZyIKKworIzogZGlmZi5jOjUzMDUKK21zZ2lkICJjb25kZW5zZWQgc3VtbWFyeSBzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzIgorbXNnc3RyICJ04buVbmcgaOG7o3AgZOG6oW5nIHjDumMgdMOtY2ggbmjGsCBsw6AgdOG6oW8sIMSR4buVaSB0w6puIHbDoCBjw6FjIHRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIgorCisjOiBkaWZmLmM6NTMwOAorbXNnaWQgInNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgdMOqbiBj4bunYSBjw6FjIHThuq1wIHRpbiDEkeG7lWkiCisKKyM6IGRpZmYuYzo1MzExCittc2dpZCAic2hvdyBvbmx5IG5hbWVzIGFuZCBzdGF0dXMgb2YgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIHTDqm4gdOG6rXAgdGluIHbDoCB0w6xuaCB0cuG6oW5nIGPhu6dhIGPDoWMgdOG6rXAgdGluIGLhu4sgdGhheSDEkeG7lWkiCisKKyM6IGRpZmYuYzo1MzEzCittc2dpZCAiPHdpZHRoPlssPG5hbWUtd2lkdGg+Wyw8Y291bnQ+XV0iCittc2dzdHIgIjxy4buZbmc+Wyw8bmFtZS13aWR0aD5bLDxz4buRLWzGsOG7o25nPl1dIgorCisjOiBkaWZmLmM6NTMxNAorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IgorbXNnc3RyICJ04bqhbyBkaWZmc3RhdCIKKworIzogZGlmZi5jOjUzMTYgZGlmZi5jOjUzMTkgZGlmZi5jOjUzMjIKK21zZ2lkICI8d2lkdGg+IgorbXNnc3RyICI8cuG7mW5nPiIKKworIzogZGlmZi5jOjUzMTcKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gd2lkdGgiCittc2dzdHIgInThuqFvIGRpZmZzdGF0IHbhu5tpIMSR4buZIHLhu5luZyDEkcOjIGNobyIKKworIzogZGlmZi5jOjUzMjAKK21zZ2lkICJnZW5lcmF0ZSBkaWZmc3RhdCB3aXRoIGEgZ2l2ZW4gbmFtZSB3aWR0aCIKK21zZ3N0ciAidOG6oW8gZGlmZnN0YXQgduG7m2kgdMOqbiDEkeG7mSBy4buZbmcgxJHDoyBjaG8iCisKKyM6IGRpZmYuYzo1MzIzCittc2dpZCAiZ2VuZXJhdGUgZGlmZnN0YXQgd2l0aCBhIGdpdmVuIGdyYXBoIHdpZHRoIgorbXNnc3RyICJ04bqhbyBkaWZmc3RhdCB24bubaSDEkeG7mSBy4buZbmcgxJHhu5MgdGjhu4sgxJHDoyBjaG8iCisKKyM6IGRpZmYuYzo1MzI1Cittc2dpZCAiPGNvdW50PiIKK21zZ3N0ciAiPHPhu5FfbMaw4bujbmc+IgorCisjOiBkaWZmLmM6NTMyNgorbXNnaWQgImdlbmVyYXRlIGRpZmZzdGF0IHdpdGggbGltaXRlZCBsaW5lcyIKK21zZ3N0ciAidOG6oW8gZGlmZnN0YXQgduG7m2kgY8OhYyBkw7JuZyBi4buLIGdp4bubaSBo4bqhbiIKKworIzogZGlmZi5jOjUzMjkKK21zZ2lkICJnZW5lcmF0ZSBjb21wYWN0IHN1bW1hcnkgaW4gZGlmZnN0YXQiCittc2dzdHIgInThuqFvIHThu5VuZyBo4bujcCB4w7pjIHTDrWNoIHRyb25nIGRpZmZzdGF0IgorCisjOiBkaWZmLmM6NTMzMgorbXNnaWQgIm91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQgY2FuIGJlIGFwcGxpZWQiCittc2dzdHIgInh14bqldCByYSBt4buZdCBraMOhYyBiaeG7h3QgZOG6oW5nIG5o4buLIHBow6JuIGPDoWkgbcOgIGPDsyB0aOG7gyDEkcaw4bujYyDDoXAgZOG7pW5nIgorCisjOiBkaWZmLmM6NTMzNQorbXNnaWQgInNob3cgZnVsbCBwcmUtIGFuZCBwb3N0LWltYWdlIG9iamVjdCBuYW1lcyBvbiB0aGUgXCJpbmRleFwiIGxpbmVzIgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIMSR4bqneSDEkeG7pyBjw6FjIHTDqm4gxJHhu5FpIHTGsOG7o25nIHByZS0gdsOgIHBvc3QtaW1hZ2UgdHLDqm4gY8OhYyBkw7JuZyBcIm3hu6VjIGzhu6VjIgorIlwiIgorCisjOiBkaWZmLmM6NTMzNworbXNnaWQgInNob3cgY29sb3JlZCBkaWZmIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGhheSDEkeG7lWkgxJHGsOG7o2MgdMO0IG3DoHUiCisKKyM6IGRpZmYuYzo1MzM4Cittc2dpZCAiPGtpbmQ+IgorbXNnc3RyICI8a2nhu4N1PiIKKworIzogZGlmZi5jOjUzMzkKK21zZ2lkICIiCisiaGlnaGxpZ2h0IHdoaXRlc3BhY2UgZXJyb3JzIGluIHRoZSAnY29udGV4dCcsICdvbGQnIG9yICduZXcnIGxpbmVzIGluIHRoZSAiCisiZGlmZiIKK21zZ3N0ciAiIgorInTDtCBzYW5nIGPDoWMgbOG7l2kgduG7gSBraG/huqNuZyB0cuG6r25nIHRyb25nIGPDoWMgZMOybmcg4oCcY29udGV4dOKAnSwg4oCcb2xk4oCdIHbDoCDigJxuZXfigJ0gIgorInRyb25nIGtow6FjIGJp4buHdCIKKworIzogZGlmZi5jOjUzNDIKK21zZ2lkICIiCisiZG8gbm90IG11bmdlIHBhdGhuYW1lcyBhbmQgdXNlIE5VTHMgYXMgb3V0cHV0IGZpZWxkIHRlcm1pbmF0b3JzIGluIC0tcmF3IG9yICIKKyItLW51bXN0YXQiCittc2dzdHIgIiIKKyJraMO0bmcgbXVuZ2UgdMOqbiDEkcaw4budbmcgZOG6q24gdsOgIHPhu60gZOG7pW5nIE5VTCBsw6BtIGLhu5kgcGjDom4gdMOhY2ggdHLGsOG7nW5nIMSR4bqndSByYSAiCisidHJvbmcgLS1yYXcgaGF5IC0tbnVtc3RhdCIKKworIzogZGlmZi5jOjUzNDUgZGlmZi5jOjUzNDggZGlmZi5jOjUzNTEgZGlmZi5jOjU0NTcKK21zZ2lkICI8cHJlZml4PiIKK21zZ3N0ciAiPHRp4buBbl904buRPiIKKworIzogZGlmZi5jOjUzNDYKK21zZ2lkICJzaG93IHRoZSBnaXZlbiBzb3VyY2UgcHJlZml4IGluc3RlYWQgb2YgXCJhL1wiIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGnhu4FuIHThu5Egbmd14buTbiDEkcOjIGNobyB0aGF5IGNobyBcImEvXCIiCisKKyM6IGRpZmYuYzo1MzQ5Cittc2dpZCAic2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgXCJiL1wiIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGnhu4FuIHThu5EgxJHDrWNoIMSRw6MgY2hvIHRoYXkgY2hvIFwiYi9cIiIKKworIzogZGlmZi5jOjUzNTIKK21zZ2lkICJwcmVwZW5kIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIGV2ZXJ5IGxpbmUgb2Ygb3V0cHV0IgorbXNnc3RyICJ0cmVvIHbDoG8gdHLGsOG7m2MgbeG7mXQgdGnhu4FuIHThu5EgYuG7lSBzdW5nIGNobyBt4buXaSBkw7JuZyBr4bq/dCB4deG6pXQiCisKKyM6IGRpZmYuYzo1MzU1Cittc2dpZCAiZG8gbm90IHNob3cgYW55IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcmVmaXgiCittc2dzdHIgIsSR4burbmcgaGnhu4NuIHRo4buLIGLhuqV0IGvhu7MgdGnhu4FuIHThu5Egbmd14buTbiBoYXkgxJHDrWNoIgorCisjOiBkaWZmLmM6NTM1OAorbXNnaWQgInNob3cgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMiCittc2dzdHIgIiIKKyJoaeG7g24gdGjhu4sgbmfhu68gY+G6o25oIGdp4buvYSBjw6FjIGtow7pjIGtow6FjIGJp4buHdCBraGkgxJHhuqF0IMSR4bq/biBz4buRIGzGsOG7o25nIGTDsm5nIMSRw6MgY2jhu4kgIgorIsSR4buLbmgiCisKKyM6IGRpZmYuYzo1MzYyIGRpZmYuYzo1MzY3IGRpZmYuYzo1MzcyCittc2dpZCAiPGNoYXI+IgorbXNnc3RyICI8a8O9X3Thu7E+IgorCisjOiBkaWZmLmM6NTM2MworbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluc3RlYWQgb2YgJysnIgorbXNnc3RyICJjaOG7iSDEkeG7i25oIG3hu5l0IGvDvSB04buxIMSR4buDIGJp4buDdSB0aOG7iyBt4buZdCBkw7JuZyDEkcaw4bujYyB0aMOqbSBt4bubaSB0aGF5IGNobyDigJwr4oCdIgorCisjOiBkaWZmLmM6NTM2OAorbXNnaWQgInNwZWNpZnkgdGhlIGNoYXJhY3RlciB0byBpbmRpY2F0ZSBhbiBvbGQgbGluZSBpbnN0ZWFkIG9mICctJyIKK21zZ3N0ciAiY2jhu4kgxJHhu4tuaCBt4buZdCBrw70gdOG7sSDEkeG7gyBiaeG7g3UgdGjhu4sgbeG7mXQgZMOybmcgxJHDoyBjxakgdGhheSBjaG8g4oCcLeKAnSIKKworIzogZGlmZi5jOjUzNzMKK21zZ2lkICJzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgdG8gaW5kaWNhdGUgYSBjb250ZXh0IGluc3RlYWQgb2YgJyAnIgorbXNnc3RyICJjaOG7iSDEkeG7i25oIG3hu5l0IGvDvSB04buxIMSR4buDIGJp4buDdSB0aOG7iyBt4buZdCBuZ+G7ryBj4bqjbmggdGhheSBjaG8g4oCc4oCdIgorCisjOiBkaWZmLmM6NTM3NgorbXNnaWQgIkRpZmYgcmVuYW1lIG9wdGlvbnMiCittc2dzdHIgIlTDuXkgY2jhu41uIGtow6FjIGJp4buHdCDEkeG7lWkgdMOqbiIKKworIzogZGlmZi5jOjUzNzcKK21zZ2lkICI8bj5bLzxtPl0iCittc2dzdHIgIjxuPlsvPG0+XSIKKworIzogZGlmZi5jOjUzNzgKK21zZ2lkICJicmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZSIKK21zZ3N0ciAibmfhuq90IGPDoWMgdGhheSDEkeG7lWkgZ2hpIGzhuqFpIGhvw6BuIHRoaeG7h24gdGjDoG5oIGPhurdwIGPhu6dhIHjDs2EgdsOgIHThuqFvIgorCisjOiBkaWZmLmM6NTM4MgorbXNnaWQgImRldGVjdCByZW5hbWVzIgorbXNnc3RyICJkw7IgdMOsbSBjw6FjIHTDqm4gdGhheSDEkeG7lWkiCisKKyM6IGRpZmYuYzo1Mzg2Cittc2dpZCAib21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMiCittc2dzdHIgImLhu48gcXVhIHByZWltYWdlICh0aeG7gW4g4bqjbmg/PykgY2hvIGPDoWMgdmnhu4djIHjDs2EiCisKKyM6IGRpZmYuYzo1Mzg5Cittc2dpZCAiZGV0ZWN0IGNvcGllcyIKK21zZ3N0ciAiZMOyIGLhuqNuIHNhbyIKKworIzogZGlmZi5jOjUzOTMKK21zZ2lkICJ1c2UgdW5tb2RpZmllZCBmaWxlcyBhcyBzb3VyY2UgdG8gZmluZCBjb3BpZXMiCittc2dzdHIgImTDuW5nIGPDoWMgdOG6rXAgdGluIGtow7RuZyBi4buLIGNo4buJbmggc+G7rWEgbmjGsCBsw6Agbmd14buTbiDEkeG7gyB0w6xtIGPDoWMgYuG6o24gc2FvIgorCisjOiBkaWZmLmM6NTM5NQorbXNnaWQgImRpc2FibGUgcmVuYW1lIGRldGVjdGlvbiIKK21zZ3N0ciAidOG6r3QgZMOyIHTDrG0gxJHhu5VpIHTDqm4iCisKKyM6IGRpZmYuYzo1Mzk4Cittc2dpZCAidXNlIGVtcHR5IGJsb2JzIGFzIHJlbmFtZSBzb3VyY2UiCittc2dzdHIgImR1bmcgY8OhYyBibG9iIHRy4buRbmcgcuG7kW5nIG5oxrAgbMOgIG5ndeG7k24gxJHhu5VpIHTDqm4iCisKKyM6IGRpZmYuYzo1NDAwCittc2dpZCAiY29udGludWUgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBhIGZpbGUgYmV5b25kIHJlbmFtZXMiCittc2dzdHIgInRp4bq/cCB04bulYyBsaeG7h3Qga8OqIGzhu4tjaCBz4butIGPhu6dhIG3hu5l0IHThuq1wIHRpbiBuZ2/DoGkgxJHhu5VpIHTDqm4iCisKKyM6IGRpZmYuYzo1NDAzCittc2dpZCAiIgorInByZXZlbnQgcmVuYW1lL2NvcHkgZGV0ZWN0aW9uIGlmIHRoZSBudW1iZXIgb2YgcmVuYW1lL2NvcHkgdGFyZ2V0cyBleGNlZWRzICIKKyJnaXZlbiBsaW1pdCIKK21zZ3N0ciAiIgorIm5nxINuIGPhuqNuIGTDsiB0w6xtIMSR4buVaSB0w6puL2LhuqNuIHNhbyBu4bq/dSBz4buRIGzGsOG7o25nIGPhu6dhIMSRw61jaCDEkeG7lWkgdMOqbi9i4bqjbiBzYW8gdsaw4bujdCAiCisicXXDoSBnaeG7m2kgaOG6oW4gxJHGsGEgcmEiCisKKyM6IGRpZmYuYzo1NDA1Cittc2dpZCAiRGlmZiBhbGdvcml0aG0gb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gdGh14bqtdCB0b8OhbiBraMOhYyBiaeG7h3QiCisKKyM6IGRpZmYuYzo1NDA3Cittc2dpZCAicHJvZHVjZSB0aGUgc21hbGxlc3QgcG9zc2libGUgZGlmZiIKK21zZ3N0ciAic+G6o24gc2luaCBraMOhYyBiaeG7h3Qgw610IG5o4bqldCBjw7MgdGjhu4MiCisKKyM6IGRpZmYuYzo1NDEwCittc2dpZCAiaWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgbGluZXMiCittc2dzdHIgImzhu50gxJFpIHPhu7EgdGhheSDEkeG7lWkgZG8ga2hv4bqjbmcgdHLhuq9uZyBnw6J5IHJhIGtoaSBzbyBzw6FuaCBjw6FjIGTDsm5nIgorCisjOiBkaWZmLmM6NTQxMworbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlIgorbXNnc3RyICJs4budIMSRaSBz4buxIHRoYXkgxJHhu5VpIGRvIHPhu5EgbMaw4bujbmcga2hv4bqjbmcgdHLhuq9uZyBnw6J5IHJhIgorCisjOiBkaWZmLmM6NTQxNgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgYXQgRU9MIgorbXNnc3RyICJs4budIMSRaSBz4buxIHRoYXkgxJHhu5VpIGRvIGtob+G6o25nIHRy4bqvbmcgZ8OieSByYSBraGkg4bufIGN14buRaSBkw7JuZyBFT0wiCisKKyM6IGRpZmYuYzo1NDE5Cittc2dpZCAiaWdub3JlIGNhcnJpZXItcmV0dXJuIGF0IHRoZSBlbmQgb2YgbGluZSIKK21zZ3N0ciAiYuG7jyBxdWEga8O9IHThu7EgduG7gSDEkeG6p3UgZMOybmcgdOG6oWkgY3Xhu5FpIGTDsm5nIgorCisjOiBkaWZmLmM6NTQyMgorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHdob3NlIGxpbmVzIGFyZSBhbGwgYmxhbmsiCittc2dzdHIgImLhu48gcXVhIGPDoWMgdGhheSDEkeG7lWkgY2hvIHRvw6BuIGLhu5kgY8OhYyBkw7JuZyBsw6AgdHLhu5FuZyIKKworIzogZGlmZi5jOjU0MjUKK21zZ2lkICJoZXVyaXN0aWMgdG8gc2hpZnQgZGlmZiBodW5rIGJvdW5kYXJpZXMgZm9yIGVhc3kgcmVhZGluZyIKK21zZ3N0ciAiaGV1cmlzdGljIMSR4buDIGThu4tjaCBo4bqhbiBiacOqbiBj4bunYSBraOG7kWkga2jDoWMgYmnhu4d0IGNobyBk4buFIMSR4buNYyIKKworIzogZGlmZi5jOjU0MjgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcInBhdGllbmNlIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgInThuqFvIGtow6FjIGJp4buHdCBz4butIGR1bmcgdGh14bqtdCB0b8OhbiBcInBhdGllbmNlIGRpZmZcIiIKKworIzogZGlmZi5jOjU0MzIKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImhpc3RvZ3JhbSBkaWZmXCIgYWxnb3JpdGhtIgorbXNnc3RyICJ04bqhbyBraMOhYyBiaeG7h3Qgc+G7rSBkdW5nIHRodeG6rXQgdG/DoW4gXCJoaXN0b2dyYW0gZGlmZlwiIgorCisjOiBkaWZmLmM6NTQzNAorbXNnaWQgIjxhbGdvcml0aG0+IgorbXNnc3RyICI8dGh14bqtdCB0b8Ohbj4iCisKKyM6IGRpZmYuYzo1NDM1Cittc2dpZCAiY2hvb3NlIGEgZGlmZiBhbGdvcml0aG0iCittc2dzdHIgImNo4buNbiBt4buZdCB0aHXhuq10IHRvw6FuIGtow6FjIGJp4buHdCIKKworIzogZGlmZi5jOjU0MzcKK21zZ2lkICI8dGV4dD4iCittc2dzdHIgIjx2xINuIGLhuqNuPiIKKworIzogZGlmZi5jOjU0MzgKK21zZ2lkICJnZW5lcmF0ZSBkaWZmIHVzaW5nIHRoZSBcImFuY2hvcmVkIGRpZmZcIiBhbGdvcml0aG0iCittc2dzdHIgInThuqFvIGtow6FjIGJp4buHdCBz4butIGR1bmcgdGh14bqtdCB0b8OhbiBcImFuY2hvcmVkIGRpZmZcIiIKKworIzogZGlmZi5jOjU0NDAgZGlmZi5jOjU0NDkgZGlmZi5jOjU0NTIKK21zZ2lkICI8bW9kZT4iCittc2dzdHIgIjxjaOG6vyDEkeG7mT4iCisKKyM6IGRpZmYuYzo1NDQxCittc2dpZCAic2hvdyB3b3JkIGRpZmYsIHVzaW5nIDxtb2RlPiB0byBkZWxpbWl0IGNoYW5nZWQgd29yZHMiCittc2dzdHIgIiIKKyJoaeG7g24gdGjhu4sga2jDoWMgYmnhu4d0IHThu6ssIHPhu60gZHVuZyA8Y2jhur8gxJHhu5k+IMSR4buDIGLhu48gZ2nhu5tpIGjhuqFuIGPDoWMgdOG7qyBi4buLIHRoYXkgxJHhu5VpIgorCisjOiBkaWZmLmM6NTQ0MyBkaWZmLmM6NTQ0NiBkaWZmLmM6NTQ5MQorbXNnaWQgIjxyZWdleD4iCittc2dzdHIgIjxyZWdleD4iCisKKyM6IGRpZmYuYzo1NDQ0Cittc2dpZCAidXNlIDxyZWdleD4gdG8gZGVjaWRlIHdoYXQgYSB3b3JkIGlzIgorbXNnc3RyICJkw7luZyA8cmVnZXg+IMSR4buDIHF1eeG6v3QgxJHhu4tuaCB04burIGzDoCBjw6FpIGfDrCIKKworIzogZGlmZi5jOjU0NDcKK21zZ2lkICJlcXVpdmFsZW50IHRvIC0td29yZC1kaWZmPWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PTxyZWdleD4iCittc2dzdHIgInTGsMahbmcgxJHGsMahbmcgduG7m2kgLS13b3JkLWRpZmY9Y29sb3IgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PiIKKworIzogZGlmZi5jOjU0NTAKK21zZ2lkICJtb3ZlZCBsaW5lcyBvZiBjb2RlIGFyZSBjb2xvcmVkIGRpZmZlcmVudGx5IgorbXNnc3RyICJjw6FjIGTDsm5nIGRpIGNodXnhu4NuIGPhu6dhIG3DoyBtw6AgxJHGsOG7o2MgdMO0IG3DoHUga2jDoWMgbmhhdSIKKworIzogZGlmZi5jOjU0NTMKK21zZ2lkICJob3cgd2hpdGUgc3BhY2VzIGFyZSBpZ25vcmVkIGluIC0tY29sb3ItbW92ZWQiCittc2dzdHIgImLhu48gcXVhIGtob+G6o25nIHRy4bqvbmcgbmjGsCB0aOG6vyBuw6BvIHRyb25nIC0tY29sb3ItbW92ZWQiCisKKyM6IGRpZmYuYzo1NDU2Cittc2dpZCAiT3RoZXIgZGlmZiBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIGtow6FjIGJp4buHdCBraMOhYyIKKworIzogZGlmZi5jOjU0NTgKK21zZ2lkICJ3aGVuIHJ1biBmcm9tIHN1YmRpciwgZXhjbHVkZSBjaGFuZ2VzIG91dHNpZGUgYW5kIHNob3cgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIiIKKyJraGkgY2jhuqF5IHThu6sgdGjGsCBt4bulYyBjb24sIHRo4buxIHRoaSBjw6FjIHRoYXkgxJHhu5VpIGLDqm4gbmdvw6BpIHbDoCBoaeG7g24gdGjhu4sgY8OhYyAiCisixJHGsOG7nW5nIGThuqtuIGxpw6puIHF1YW4iCisKKyM6IGRpZmYuYzo1NDYyCittc2dpZCAidHJlYXQgYWxsIGZpbGVzIGFzIHRleHQiCittc2dzdHIgImNvaSBt4buNaSB04bqtcCB0aW4gbMOgIGThuqFuZyB2xINuIGLhuqNuIHRoxrDhu51uZyIKKworIzogZGlmZi5jOjU0NjQKK21zZ2lkICJzd2FwIHR3byBpbnB1dHMsIHJldmVyc2UgdGhlIGRpZmYiCittc2dzdHIgInRyw6FvIMSR4buVaSBoYWkgxJHhuqd1IHbDoG8sIMSR4bqjbyBuZ8aw4bujYyBraMOhYyBiaeG7h3QiCisKKyM6IGRpZmYuYzo1NDY2Cittc2dpZCAiZXhpdCB3aXRoIDEgaWYgdGhlcmUgd2VyZSBkaWZmZXJlbmNlcywgMCBvdGhlcndpc2UiCittc2dzdHIgInRob8OhdCB24bubaSBtw6MgMSBu4bq/dSBraMO0bmcgY8OzIGtow6FjIGJp4buHdCBnw6wsIDAgbuG6v3UgbmfGsOG7o2MgbOG6oWkiCisKKyM6IGRpZmYuYzo1NDY4Cittc2dpZCAiZGlzYWJsZSBhbGwgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIgorbXNnc3RyICJ04bqvdCBt4buNaSBr4bq/dCB4deG6pXQgY+G7p2EgY2jGsMahbmcgdHLDrG5oIgorCisjOiBkaWZmLmM6NTQ3MAorbXNnaWQgImFsbG93IGFuIGV4dGVybmFsIGRpZmYgaGVscGVyIHRvIGJlIGV4ZWN1dGVkIgorbXNnc3RyICJjaG8gcGjDqXAgbeG7mSBi4buZIGjhu5cgdHLhu6MgeHXhuqV0IGtow6FjIGJp4buHdCDhu58gYsOqbiBuZ2/DoGkgxJHGsOG7o2MgcGjDqXAgdGjhu7FjIHRoaSIKKworIzogZGlmZi5jOjU0NzIKK21zZ2lkICJydW4gZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzIgorbXNnc3RyICIiCisiY2jhuqF5IGPDoWMgYuG7mSBs4buNYyB2xINuIGLhuqNuIHRow7RuZyB0aMaw4budbmcgYsOqbiBuZ2/DoGkga2hpIHNvIHPDoW5oIGPDoWMgdOG6rXAgdGluIG5o4buLICIKKyJwaMOibiIKKworIzogZGlmZi5jOjU0NzQKK21zZ2lkICI8d2hlbj4iCittc2dzdHIgIjxraGk+IgorCisjOiBkaWZmLmM6NTQ3NQorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgaW4gdGhlIGRpZmYgZ2VuZXJhdGlvbiIKK21zZ3N0ciAiYuG7jyBxdWEgY8OhYyB0aGF5IMSR4buVaSB0cm9uZyBtw7QtxJF1bi1jb24gdHJvbmcga2hpIHThuqFvIGtow6FjIGJp4buHdCIKKworIzogZGlmZi5jOjU0NzgKK21zZ2lkICI8Zm9ybWF0PiIKK21zZ3N0ciAiPMSR4buLbmggZOG6oW5nPiIKKworIzogZGlmZi5jOjU0NzkKK21zZ2lkICJzcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93biIKK21zZ3N0ciAiY2hpIMSR4buLbmgga2jDoWMgYmnhu4d0IGJhbyBuaGnDqnUgdHJvbmcgY8OhYyBtw7QgxJF1biBjb24gxJHGsOG7o2MgaGnhu4NuIHRo4buLIgorCisjOiBkaWZmLmM6NTQ4MworbXNnaWQgImhpZGUgJ2dpdCBhZGQgLU4nIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIuG6qW4gY8OhYyBt4bulYyDigJxnaXQgYWRkIC1O4oCdIHThu6sgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBkaWZmLmM6NTQ4NgorbXNnaWQgInRyZWF0ICdnaXQgYWRkIC1OJyBlbnRyaWVzIGFzIHJlYWwgaW4gdGhlIGluZGV4IgorbXNnc3RyICJjb2kgY8OhYyBt4bulYyDigJxnaXQgYWRkIC1O4oCdIG5oxrAgbMOgIGPDsyB0aOG6rXQgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBkaWZmLmM6NTQ4OAorbXNnaWQgIjxzdHJpbmc+IgorbXNnc3RyICI8Y2h14buXaT4iCisKKyM6IGRpZmYuYzo1NDg5Cittc2dpZCAiIgorImxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY2hhbmdlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCAiCisic3RyaW5nIgorbXNnc3RyICIiCisidMOsbSBjw6FjIGtow6FjIGJp4buHdCBjw6FpIG3DoCB0aGF5IMSR4buVaSBz4buRIGzGsOG7o25nIHjhuqN5IHJhIGPhu6dhIGPDoWMgcGjDoXQgc2luaCBj4bunYSAiCisiY2h14buXaSDEkcaw4bujYyBjaOG7iSByYSIKKworIzogZGlmZi5jOjU0OTIKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJyZWdleCIKK21zZ3N0ciAiIgorInTDrG0gY8OhYyBraMOhYyBiaeG7h3QgY8OhaSBtw6AgdGhheSDEkeG7lWkgc+G7kSBsxrDhu6NuZyB44bqjeSByYSBj4bunYSBjw6FjIHBow6F0IHNpbmggY+G7p2EgYmnhu4N1ICIKKyJ0aOG7qWMgY2jDrW5oIHF1eSDEkcaw4bujYyBjaOG7iSByYSIKKworIzogZGlmZi5jOjU0OTUKK21zZ2lkICJzaG93IGFsbCBjaGFuZ2VzIGluIHRoZSBjaGFuZ2VzZXQgd2l0aCAtUyBvciAtRyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHThuqV0IGPhuqMgY8OhYyB0aGF5IMSR4buVaSB0cm9uZyBt4buZdCBi4buZIGPDoWMgdGhheSDEkeG7lWkgduG7m2kgLVMgaGF5IC1HIgorCisjOiBkaWZmLmM6NTQ5OAorbXNnaWQgInRyZWF0IDxzdHJpbmc+IGluIC1TIGFzIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiIKK21zZ3N0ciAiY29pIDxjaHXhu5dpPiB0cm9uZyAtUyBuaMawIGzDoCBiaeG7g3UgdGjhu6ljIGNow61uaCBxdWkgUE9TSVggY8OzIG3hu58gcuG7mW5nIgorCisjOiBkaWZmLmM6NTUwMQorbXNnaWQgImNvbnRyb2wgdGhlIG9yZGVyIGluIHdoaWNoIGZpbGVzIGFwcGVhciBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLEkWnhu4F1IGtoaeG7g24gdGjhu6kgdOG7sSB4dcOhdCBoaeG7h24gY8OhYyB04bqtcCB0aW4gdHJvbmcga+G6v3QgeHXhuqV0IgorCisjOiBkaWZmLmM6NTUwMgorbXNnaWQgIjxvYmplY3QtaWQ+IgorbXNnc3RyICI8bcOjLXPhu5EtxJHhu5FpLXTGsOG7o25nPiIKKworIzogZGlmZi5jOjU1MDMKK21zZ2lkICIiCisibG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB0aGUgc3BlY2lmaWVkICIKKyJvYmplY3QiCittc2dzdHIgIiIKKyJ0w6xtIGPDoWMga2jDoWMgYmnhu4d0IGPDoWkgbcOgIHRoYXkgxJHhu5VpIHPhu5EgbMaw4bujbmcgeOG6o3kgcmEgY+G7p2EgY8OhYyBwaMOhdCBzaW5oIGPhu6dhIMSR4buRaSAiCisidMaw4bujbmcgxJHGsOG7o2MgY2jhu4kgcmEiCisKKyM6IGRpZmYuYzo1NTA1Cittc2dpZCAiWyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dIgorbXNnc3RyICJbKEF8Q3xEfE18UnxUfFV8WHxCKeKAplsqXV0iCisKKyM6IGRpZmYuYzo1NTA2Cittc2dpZCAic2VsZWN0IGZpbGVzIGJ5IGRpZmYgdHlwZSIKK21zZ3N0ciAiY2jhu41uIGPDoWMgdOG6rXAgdGluIHRoZW8ga2nhu4N1IGtow6FjIGJp4buHdCIKKworIzogZGlmZi5jOjU1MDgKK21zZ2lkICI8ZmlsZT4iCittc2dzdHIgIjx04bqtcF90aW4+IgorCisjOiBkaWZmLmM6NTUwOQorbXNnaWQgIk91dHB1dCB0byBhIHNwZWNpZmljIGZpbGUiCittc2dzdHIgIlh14bqldCByYSBt4buZdCB04bqtcCB0aW4gY+G7pSB0aOG7gyIKKworIzogZGlmZi5jOjYxNjQKK21zZ2lkICJpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24gd2FzIHNraXBwZWQgZHVlIHRvIHRvbyBtYW55IGZpbGVzLiIKK21zZ3N0ciAiIgorIm5o4bqtbiB0aOG6pXkgxJHhu5VpIHTDqm4ga2jDtG5nIGNow61uaCB4w6FjIMSRw6MgYuG7iyBi4buPIHF1YSBi4bufaSBjw7MgcXXDoSBuaGnhu4F1IHThuq1wIHRpbi4iCisKKyM6IGRpZmYuYzo2MTY3Cittc2dpZCAib25seSBmb3VuZCBjb3BpZXMgZnJvbSBtb2RpZmllZCBwYXRocyBkdWUgdG8gdG9vIG1hbnkgZmlsZXMuIgorbXNnc3RyICIiCisiY2jhu4kgdMOsbSB0aOG6pXkgY8OhYyBi4bqjbiBzYW8gdOG7qyDEkcaw4budbmcgZOG6q24gxJHDoyBz4butYSDEkeG7lWkgYuG7n2kgdsOsIGPDsyBxdcOhIG5oaeG7gXUgdOG6rXAgdGluLiIKKworIzogZGlmZi5jOjYxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInlvdSBtYXkgd2FudCB0byBzZXQgeW91ciAlcyB2YXJpYWJsZSB0byBhdCBsZWFzdCAlZCBhbmQgcmV0cnkgdGhlIGNvbW1hbmQuIgorbXNnc3RyICIiCisiYuG6oW4gY8OzIGzhur0gbXXhu5FuIMSR4bq3dCBiaeG6v24gJXMgY+G7p2EgYuG6oW4gdGjDoG5oIMOtdCBuaOG6pXQgbMOgICVkIHbDoCB0aOG7rSBs4bqhaSBs4buHbmggbOG6p24gIgorIm7hu69hLiIKKworIzogZGlyLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQiCittc2dzdHIgIsSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSBraMO0bmcga2jhu5twIHbhu5tpIGLhuqV0IGvhu7MgdOG6rXAgdGluIG7DoG8gbcOgIGdpdCBiaeG6v3QiCisKKyM6IGRpci5jOjY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcGF0dGVybjogJyVzJyIKK21zZ3N0ciAibeG6q3Uga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46IOKAnCVz4oCdIgorCisjOiBkaXIuYzo2ODIgZGlyLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICJt4bqrdSDDom0ga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46IOKAnCVz4oCdIgorCisjOiBkaXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAidOG6rXAgdGluIHNwYXJzZS1jaGVja291dCBj4bunYSBi4bqhbiBjw7MgbOG6vSBn4bq3cCBs4buXaTogbeG6q3UgJyVzJyDEkcOjIGLhu4sgbOG6t3AgbOG6oWkiCisKKyM6IGRpci5jOjcyNAorbXNnaWQgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCittc2dzdHIgInbDtCBoaeG7h3Uga2jhu5twIG3huqt1IG7Ds24iCisKKyM6IGRpci5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBkw7luZyAlcyBuaMawIGzDoCBt4buZdCB04bqtcCB0aW4gbG/huqFpIHRy4burIgorCisjOiBkaXIuYzoyMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyB0aMawIG3hu6VjIOKAnCVz4oCdIgorCisjOiBkaXIuYzoyNDE1Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBs4bqleSB0w6puIHbDoCB0aMO0bmcgdGluIGPhu6dhIG5ow6JuIgorCisjOiBkaXIuYzoyNTM5Cittc2dpZCAidW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtIG9yIGxvY2F0aW9uIgorbXNnc3RyICJi4buZIG5o4bubIHThuqFtIGtow7RuZyB0aGVvIHbhur90IGLhu4sgdOG6r3QgdHLDqm4gaOG7hyB0aOG7kW5nIGhheSB24buLIHRyw60gbsOgeSIKKworIzogZGlyLmM6MzM0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAidOG6rXAgdGluIGdoaSBi4bqjbmcgbeG7pWMgbOG7pWMgYuG7iyBo4buPbmcgdHJvbmcga2hvICVzIgorCisjOiBkaXIuYzozMzg4IGRpci5jOjMzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB0aMawIG3hu6VjIGNobyAlcyIKKworIzogZGlyLmM6MzQyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbWlncmF0ZSBnaXQgZGlyZWN0b3J5IGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZGkgY8awIHRoxrAgbeG7pWMgZ2l0IHThu6sg4oCcJXPigJ0gc2FuZyDigJwlc+KAnSIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAiZ+G7o2kgw706IENo4budIHRyw6xuaCBiacOqbiBzb+G6oW4gY+G7p2EgYuG6oW4gxJHDs25nIHThuq1wIHRpbuKApiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICJO4buZaSBkdW5nIGzhu41jIgorCisjOiBlbnRyeS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aOG7kW5nIGvDqiB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24ga2jDtG5nIGdpYW4gdMOqbiBnaXQgXCIlc1wiIHNhaSIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG6t3QgR0lUX0RJUiB0aMOgbmgg4oCcJXPigJ0iCisKKyM6IGV4ZWMtY21kLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIgorbXNnc3RyICJxdcOhIG5oaeG7gXUgdGhhbSBz4buRIMSR4buDIGNo4bqheSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjE1MAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBj4bqnbiBkYW5oIHPDoWNoIHNoYWxsb3ciCisKKyM6IGZldGNoLXBhY2suYzoxNTMKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgYSBmbHVzaCBwYWNrZXQgYWZ0ZXIgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogY+G6p24gbeG7mXQgZ8OzaSDEkeG6qXkgc2F1IGRhbmggc8OhY2ggc2hhbGxvdyIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBj4bqnbiBBQ0svTkFLLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIG3hu5l0IGfDs2kgZmx1c2giCisKKyM6IGZldGNoLXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogY+G6p24gQUNLL05BSywgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyDigJwlc+KAnSIKKworIzogZmV0Y2gtcGFjay5jOjE5NQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0byByZW1vdGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgbMOqbiBtw6F5IHBo4bulYyB24bulIgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIGPhuqduIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgImTDsm5nIHNoYWxsb3cga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICJkw7JuZyB1bnNoYWxsb3cga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgxJHhu5FpIHTGsOG7o25nOiAlcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICJs4buXaSB0cm9uZyDEkeG7kWkgdMaw4bujbmc6ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY5IGZldGNoLXBhY2suYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNoYWxsb3cgZm91bmQ6ICVzIgorbXNnc3RyICJraMO0bmcgdMOsbSBzaGFsbG93IG7DoG86ICVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzcyIGZldGNoLXBhY2suYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiCittc2dzdHIgImPhuqduIHNoYWxsb3cvdW5zaGFsbG93LCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAibmjhuq1uICVzICVkIC0gJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gJXMga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgImNo4buLdSB0aHVhIgorCisjOiBmZXRjaC1wYWNrLmM6NDc1IHByb2dyZXNzLmM6MzIzCittc2dpZCAiZG9uZSIKK21zZ3N0ciAieG9uZyIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAibmjhuq1uICVzICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAixJDDoW5oIGThuqV1ICVzIGzDoCDEkcOjIGhvw6BuIHRow6BuaCIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAixJHDoyBz4bq1biBjw7MgJXMgKCVzKSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNrOiBraMO0bmcgdGjhu4MgcuG6vSBuaMOhbmggc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgImzhu5dpIGdpYW8gdGjhu6ljOiBwaOG6p24gxJHhuqd1IGfDs2kgYuG7iyBzYWkiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNrOiBraMO0bmcgdGjhu4MgcuG6vSBuaMOhbmggJXMiCisKKyM6IGZldGNoLXBhY2suYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyBn4bq3cCBs4buXaSIKKworIzogZmV0Y2gtcGFjay5jOjkxOAorbXNnaWQgImVycm9yIGluIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiCittc2dzdHIgImPDsyBs4buXaSB0cm9uZyBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIlBoacOqbiBi4bqjbiBtw6F5IGNo4bunIGzDoCAlLipzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcwIGZldGNoLXBhY2suYzo5NzYgZmV0Y2gtcGFjay5jOjk3OSBmZXRjaC1wYWNrLmM6OTg1CisjOiBmZXRjaC1wYWNrLmM6OTg5IGZldGNoLXBhY2suYzo5OTMgZmV0Y2gtcGFjay5jOjk5NyBmZXRjaC1wYWNrLmM6MTAwMQorIzogZmV0Y2gtcGFjay5jOjEwMDUgZmV0Y2gtcGFjay5jOjEwMDkgZmV0Y2gtcGFjay5jOjEwMTMgZmV0Y2gtcGFjay5jOjEwMTcKKyM6IGZldGNoLXBhY2suYzoxMDIzIGZldGNoLXBhY2suYzoxMDI5IGZldGNoLXBhY2suYzoxMDM0IGZldGNoLXBhY2suYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyAlcyIKK21zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIgorbXNnc3RyICJNw6F5IGNo4bunIGtow7RuZyBo4buXIHRy4bujIG3DoXkga2jDoWNoIHNoYWxsb3ciCisKKyM6IGZldGNoLXBhY2suYzoxMDMyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LXNpbmNlIgorbXNnc3RyICJNw6F5IGNo4bunIGtow7RuZyBo4buXIHRy4bujIC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyAtLXNoYWxsb3ctZXhjbHVkZSIKKworIzogZmV0Y2gtcGFjay5jOjEwNDEKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRlZXBlbiIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyAtLWRlZXBlbiIKKworIzogZmV0Y2gtcGFjay5jOjEwNTgKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAia2jDtG5nIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIGNodW5nIG7DoG8iCisKKyM6IGZldGNoLXBhY2suYzoxMDcwIGZldGNoLXBhY2suYzoxNTM2Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iCittc2dzdHIgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBn4bq3cCBs4buXaS4iCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgaOG7lyB0cuG7oyB5w6p1IGPhuqd1IHNoYWxsb3ciCisKKyM6IGZldGNoLXBhY2suYzoxMjE2Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzIGZpbHRlciIKK21zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujIGLhu5kgbOG7jWMiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIGPDoWMgecOqdSBj4bqndSBsw6puIG3DoXkgcGjhu6VjIHbhu6UiCisKKyM6IGZldGNoLXBhY2suYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBwaOG6p24gxJHhuqd1IGPhu6dhIMSRb+G6oW4gJXMiCisKKyM6IGZldGNoLXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkICclcycsIHJlY2VpdmVkICclcyciCittc2dzdHIgImPhuqduIOKAnCVz4oCdLCBuaMawbmcgbOG6oWkgbmjhuq1uIOKAnCVz4oCdIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgImfhurdwIGTDsm5nIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiDigJwlc+KAnSIKKworIzogZmV0Y2gtcGFjay5jOjEzMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBhY2tzOiAlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjhu60gbMO9IHTDrW4gaGnhu4d1IHRy4bqjIGzhu51pOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjEzMTgKK21zZ2lkICJleHBlY3RlZCBwYWNrZmlsZSB0byBiZSBzZW50IGFmdGVyICdyZWFkeSciCittc2dzdHIgImPhuqduIHThuq1wIHRpbiBnw7NpIMSR4buDIGfhu61pIHNhdSDigJxyZWFkeeKAnSIKKworIzogZmV0Y2gtcGFjay5jOjEzMjAKK21zZ2lkICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vICdyZWFkeSciCittc2dzdHIgImtow7RuZyBj4bqnbiB0aMOqbSBwaOG6p24gbsOgbyDEkeG7gyBn4butaSBzYXUg4oCccmVhZHnigJ0iCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAibOG7l2kgeOG7rSBsw70gdGjDtG5nIHRpbiBzaGFsbG93OiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgd2FudGVkLXJlZiwgZ290ICclcyciCittc2dzdHIgImPhuqduIHdhbnRlZC1yZWYsIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2Mg4oCcJXPigJ0iCisKKyM6IGZldGNoLXBhY2suYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgd2FudGVkLXJlZjogJyVzJyIKK21zZ3N0ciAia2jDtG5nIGPhuqduIHdhbnRlZC1yZWY6IOKAnCVz4oCdIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHdhbnRlZCByZWZzOiAlZCIKK21zZ3N0ciAibOG7l2kga2hpIHjhu60gbMO9IHdhbnRlZCByZWZzOiAlZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAia2jDtG5nIGto4bubcCBwaOG6p24gxJHhuqd1IG3DoXkgY2jhu6ciCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODgKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAibcOheSBjaOG7pyDEkcOjIGtow7RuZyBn4butaSB04bqldCBj4bqjIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIHRoaeG6v3QiCisKKyM6IGZldGNoLXBhY2suYzoxODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIKK21zZ3N0ciAia2jDtG5nIGPDsyBtw6F5IGNo4bunIHRoYW0gY2hp4bq/dSBuw6BvIG5oxrAgJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisiTcOheSBwaOG7pWMgduG7pSBraMO0bmcgY2hvIHBow6lwIHnDqnUgY+G6p3UgY2hvIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgxJHGsOG7o2MgYsOhbyB0csaw4bubYyAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyMworbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB04bqtcCB0aW4gdOG6oW0gdGjhu51pIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgZ2hpIGNo4buvIGvDvSDEkcOtbmgga8OobSB2w6BvIOKAnCVz4oCdIgorCisjOiBncGctaW50ZXJmYWNlLmM6MzkwCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgZ+G6t3AgbOG7l2kga2hpIGvDvSBk4buvIGxp4buHdSIKKworIzogZ3JhcGguYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmUgaW52YWxpZCBjb2xvciAnJS4qcycgaW4gbG9nLmdyYXBoQ29sb3JzIgorbXNnc3RyICJi4buPIHF1YSBtw6B1IGtow7RuZyBo4bujcCBs4buHIOKAnCUuKnPigJ0gdHJvbmcgbG9nLmdyYXBoQ29sb3JzIgorCisjOiBncmVwLmM6NjY4Cittc2dpZCAiIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgorbXNnc3RyICIiCisibeG6q3UgxJHDoyBjaG8gY8OzIGNo4bupYSBOVUxMIGJ5dGUgKHF1YSAtZiA8ZmlsZT4pLiDEkGnhu4F1IG7DoHkgY2jhu4kgxJHGsOG7o2MgaOG7lyB0cuG7oyB24bubaSAtIgorIlAgZMaw4bubaSBQQ1JFIHYyIgorCisjOiBncmVwLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAi4oCcJXPigJ06IGtow7RuZyB0aOG7gyDEkeG7jWMgJXMiCisKKyM6IGdyZXAuYzoyMTQxIHNldHVwLmM6MTY1IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IHRo4buRbmcga8OqIHbhu4Eg4oCcJXPigJ0iCisKKyM6IGdyZXAuYzoyMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIuKAnCVz4oCdOiDEkeG7jWMgbmfhuq9uIgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAiYuG6r3QgxJHhuqd1IG3hu5l0IHbDuW5nIGzDoG0gdmnhu4djICh4ZW0gdGjDqm06IGdpdCBoZWxwIHR1dG9yaWFsKSIKKworIzogaGVscC5jOjI0Cittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgImzDoG0gdmnhu4djIHRyw6puIHRoYXkgxJHhu5VpIGhp4buHbiB04bqhaSAoeGVtIHRow6ptOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGhlbHAuYzoyNQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAieGVtIHjDqXQgbOG7i2NoIHPhu60gdMOsbmggdHLhuqFuZyAoeGVtIHRow6ptOiBnaXQgaGVscCByZXZpc2lvbnMpIgorCisjOiBoZWxwLmM6MjYKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICJ0aMOqbSwgZ2hpIGThuqV1IHbDoCBjaOG7iW5oIGzhu4tjaCBz4butIGNodW5nIGPhu6dhIGLhuqFuIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgImzDoG0gdmnhu4djIG5ow7NtICh4ZW0gdGjDqm06IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICJDw6FjIGzhu4duaCBQb3JjZWxhaW4gY2jDrW5oIgorCisjOiBoZWxwLmM6MzIKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIkzhu4duaC90aGFvIHTDoWMgdGjhu6kgY+G6pXAiCisKKyM6IGhlbHAuYzozMworbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkzhu4duaC9i4buZIGjhu49pIHRo4bupIGPhuqVwIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAiVMawxqFuZyB0w6FjIHbhu5tpIG5o4buvbmcgY8OhaSBraMOhYyIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICJM4buHbmgvdGhhbyB0w6FjIOG7nyBt4bupYyB0aOG6pXAiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIkzhu4duaC9i4buZIGjhu49pIOG7nyBt4bupYyB0aOG6pXAiCisKKyM6IGhlbHAuYzozNworbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNpbmcgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJM4buHbmgvxJDhu5NuZyBi4buZIGtobyDhu58gbeG7qWMgdGjhuqVwIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICJM4buHbmgvSOG7lyB0cuG7oyBu4buZaSB04bqhaSDhu58gbeG7qWMgdGjhuqVwIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY8OhYyBs4buHbmggZ2l0IHPhurVuIGPDsyB0cm9uZyB0aMawIG3hu6VjIOKAnCVz4oCdOiIKKworIzogaGVscC5jOjMwNQorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiY8OhYyBs4buHbmggZ2l0IHPhurVuIGPDsyB04burIG3hu5l0IG7GoWkga2jDoWMgdHJvbmcgJFBBVEggY+G7p2EgYuG6oW4iCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkPDsyBjw6FjIGzhu4duaCBHaXQgY2h1bmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgY8OhYyB0w6xuaCBodeG7kW5nIGtow6FjIG5oYXU6IgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIGxp4buHdCBrw6ogbOG7h25oIGtp4buDdSDigJwlc+KAnSIKKworIzogaGVscC5jOjQwMworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6IgorbXNnc3RyICJDw6FjIGNo4buJIGThuqtuIGNodW5nIHbhu4EgR2l0IGzDoDoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIlhlbSDigJxnaXQgaGVscCA8bOG7h25oPuKAnSDEkeG7gyDEkeG7jWMgY8OhYyDEkeG6t2MgdOG6oyBj4bunYSBs4buHbmggY29uIgorCisjOiBoZWxwLmM6NTE3Cittc2dpZCAiRXh0ZXJuYWwgY29tbWFuZHMiCittc2dzdHIgIkPDoWMgbOG7h25oIGLDqm4gbmdvw6BpIgorCisjOiBoZWxwLmM6NTMyCittc2dpZCAiQ29tbWFuZCBhbGlhc2VzIgorbXNnc3RyICJDw6FjIGLDrSBkYW5oIGzhu4duaCIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyLigJwlc+KAnSB0csO0bmcgbmjGsCBsw6AgbeG7mXQgbOG7h25oIGdpdCwgbmjGsG5nIGNow7puZyB0w7RpIGtow7RuZ1xuIgorInRo4buDIHRo4buxYyB0aGkgbsOzLiBDw7MgbOG6vSBsw6AgbOG7h25oIGdpdC0lcyDEkcOjIGLhu4sgaOG7j25nPyIKKworIzogaGVscC5jOjY1NQorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICLhu5BpIGNow6AuIEjhu4cgdGjhu5FuZyBj4bunYSBi4bqhbiBiw6FvIHLhurFuZyBjaOG6s25nIGPDsyBs4buHbmggR2l0IG7DoG8gY+G6oy4iCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiQ+G6ok5IIELDgU86IELhuqFuIMSRw6MgZ+G7jWkgbOG7h25oIEdpdCBjw7MgdMOqbiDigJwlc+KAnSwgbcOgIG7DsyBs4bqhaSBraMO0bmcgY8OzIHPhurVuLiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJUaeG6v3AgdOG7pWMgdsOgIGNvaSBy4bqxbmcgw70gYuG6oW4gbMOgIOKAnCVz4oCdLiIKKworIzogaGVscC5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIGluICUwLjFmIHNlY29uZHMsIGFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICJUaeG6v3AgdOG7pWMgdHJvbmcgJTAuMWYgZ2nDonksdsOgIGNvaSBy4bqxbmcgw70gYuG6oW4gbMOgIOKAnCVz4oCdLiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6IOKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhu4duaCBj4bunYSBnaXQuIFhlbSDigJxnaXQgLS1oZWxw4oCdLiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIk5o4buvbmcgbOG7h25oIGdp4buRbmcgbmjhuqV0IGzDoCIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogaGVscC5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyJDw7MgcGjhuqNpIMO9IGLhuqFuIGzDoCBt4buZdCB0cm9uZyBz4buRIG5o4buvbmcgY8OhaSBuw6B5IGtow7RuZz8iCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIFZ1aSBsw7JuZyBjaG8gYmnhur90IGLhuqFuIGzDoCBhaS5cbiIKKyJcbiIKKyJDaOG6oXlcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcImLhuqFuQHbDrV9k4bulLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIlTDqm4gQ+G7p2EgQuG6oW5cIlxuIgorIlxuIgorIsSR4buDIMSR4bq3dCDEkeG7i25oIGRhbmggbeG6t2MgxJHhu4tuaCBjaG8gdMOgaSBraG/huqNuIGPhu6dhIGLhuqFuLlxuIgorIkLhu48gdMO5eSBjaOG7jW4gLS1nbG9iYWwgbuG6v3UgY2jhu4kgxJHhu4tuaCBkYW5oIHJpw6puZyBjaG8ga2hvIG7DoHkuXG4iCisiXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAia2jDtG5nIMSRxrBhIHJhIMSR4buLYSBjaOG7iSB0aMawIMSRaeG7h24gdOG7rSB2w6AgYXV0by1kZXRlY3Rpb24gYuG7iyB04bqvdCIKKworIzogaWRlbnQuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThu7EgZMOyIHTDrG0gxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIChuaOG6rW4g4oCcJXPigJ0pIgorCisjOiBpZGVudC5jOjQwMQorbXNnaWQgIm5vIG5hbWUgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgcmEgdMOqbiB2w6AgdOG7sS3EkeG7mW5nLWTDsi10w6xtIGLhu4sgdOG6r3QiCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgImtow7RuZyB0aOG7gyBkw7ItdMOsbS104buxIMSR4buZbmcgdMOqbiAoxJHDoyBuaOG6rW4g4oCcJXPigJ0pIgorCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgImtow7RuZyBjaG8gcGjDqXAgdMOqbiDEkeG7i25oIGRhbmggbMOgIHLhu5duZyAoY2hvIDwlcz4pIgorCisjOiBpZGVudC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAidMOqbiBjaOG7iSDEkcaw4bujYyBwaMOpcCBiYW8gZ+G7k20gY8OhYyBrw70gdOG7sSBzYXU6ICVzIgorCisjOiBpZGVudC5jOjQzNiBidWlsdGluL2NvbW1pdC5jOjYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAibmfDoHkgdGjDoW5nIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAibeG7pWMg4oCcJXPigJ0gdHJvbmcgY8OieSAlcyBjw7MgbsO6dCBjw6J5LCBuaMawbmcga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgY8OieSIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAibeG7pWMg4oCcJXPigJ0gdHJvbmcgY8OieSAlcyBjw7MgbsO6dCBibG9iLCBuaMawbmcga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgYmxvYiIKKworIzogbGlzdC1vYmplY3RzLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb2FkIHJvb3QgdHJlZSBmb3IgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6o2kgY8OieSBn4buRYyBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB0cnV5IGPhuq1wIGPDoWMgYmxvYiBy4bqjaSByw6FjIHRyb25nICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGThu68gbGnhu4d1IGLhu5kgbOG7jWMgcuG6o2kgcsOhYyB0cm9uZyAlcyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NTgKK21zZ2lkICJleHBlY3RlZCAndHJlZTo8ZGVwdGg+JyIKK21zZ3N0ciAiY+G6p24g4oCcdHJlZTo8ZGVwdGg+4oCdIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo3MworbXNnaWQgInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIgorbXNnc3RyICJ2aeG7h2MgaOG7lyB0cuG7oyBi4buZIGzhu41jIHNwYXJzZTrEkcaw4budbmcvZOG6q24gxJHDoyBi4buLIGLhu48iCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAixJHhurdjIHThuqMgYuG7mSBs4buNYyBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorbXNnc3RyICJwaOG6o2kgdGhvw6F0IGNoYXIgdHJvbmcgc3ViLWZpbHRlci1zcGVjOiAnJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgIm1vbmcgxJHhu6NpIG3hu5l0IGPDoWkgZ8OsIMSRw7Mgc2F1IGtoaSBr4bq/dCBo4bujcDoiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgImtow7RuZyB0aOG7gyB04buVIGjhu6NwIG5oaeG7gXUgxJHhurdjIHThuqMga2nhu4N1IGzhu41jIgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHThuqFvIOKAnCVzLmxvY2vigJ06ICVzLlxuIgorIlxuIgorIlRp4bq/biB0csOsbmggZ2l0IGtow6FjIGPDsyBs4bq9IMSRYW5nIGNo4bqheSDhu58ga2hvIG7DoHksIHbDrSBk4bulXG4iCisibeG7mXQgdHLDrG5oIHNv4bqhbiB0aOG6o28gxJHGsOG7o2MgbeG7nyBi4bufaSDigJxnaXQgY29tbWl04oCdLiBWdWkgbMOybmcgY2jhuq9jIGNo4bqvblxuIgorInLhurFuZyBt4buNaSB0aeG6v24gdHLDrG5oIMSRw6MgY2jhuqVtIGThu6l0IHbDoCBzYXUgxJHDsyB0aOG7rSBs4bqhaS4gTuG6v3UgduG6q24gbOG7l2ksXG4iCisibeG7mXQgdGnhur9uIHRyw6xuaCBnaXQgY8OzIGzhur0gxJHDoyDEkeG7lSB24buhIGtoaSB0aOG7sWMgaGnhu4duIOG7nyBraG8gbsOgeSB0csaw4bubYyDEkcOzOlxuIgorImfDtSBi4buPIHThuq1wIHRpbiBt4buZdCBjw6FjaCB0aOG7pyBjw7RuZyDEkeG7gyB0aeG6v3AgdOG7pWMuIgorCisjOiBsb2NrZmlsZS5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyDigJwlcy5sb2Nr4oCdOiAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBi4buZIG5o4bubIMSR4buHbSIKKworIzogbWVyZ2UuYzoxMDcgcmVyZXJlLmM6NzIwIGJ1aWx0aW4vYW0uYzoxODc0IGJ1aWx0aW4vYW0uYzoxOTA4CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTM5IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTggYnVpbHRpbi9jbG9uZS5jOjgwOQorIzogYnVpbHRpbi9zdGFzaC5jOjI2NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NworbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoY29tbWl0IHNhaSlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkaW5mb19jYWNoZSBn4bq3cCBs4buXaSDEkeG7kWkgduG7m2kgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdOyB2aeG7h2MgaMOyYSB0cuG7mW4gYuG7iyBiw6NpIGLhu48uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgdG8gcmVmcmVzaCBmb3IgcGF0aCAnJXMnOyBtZXJnZSBhYm9ydGluZy4iCittc2dzdHIgIiIKKyJhZGRpbmZvX2NhY2hlIGfhurdwIGzhu5dpIGtoaSBsw6BtIG3hu5tpIMSR4buRaSB24bubaSDEkcaw4budbmcgZOG6q24g4oCcJXPigJ07IHZp4buHYyBow7JhIHRy4buZbiBi4buLICIKKyJiw6NpIGLhu48uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHThuqFvIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiR+G7oSBi4buPICVzIMSR4buDIHThuqFvIGNo4buXIChyb29tKSBjaG8gdGjGsCBt4bulYyBjb25cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTEwIG1lcmdlLXJlY3Vyc2l2ZS5jOjkyOQorbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogY8OzIGzhur0gbMOgIG3hu5l0IHh1bmcgxJHhu5l0IEQvRj8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgInThu6sgY2jhu5FpIMSRw7NuZyB04bqtcCB0aW4ga2jDtG5nIMSRxrDhu6NjIHRoZW8gZMO1aSB04bqhaSDigJwlc+KAnSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTYwIGJ1aWx0aW4vY2F0LWZpbGUuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgJXMg4oCcJXPigJ0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk2NQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICJtb25nIMSR4bujaSDEkeG7kWkgdMaw4bujbmcgYmxvYiBjaG8gJXMg4oCcJXPigJ0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIG3hu58g4oCcJXPigJ06ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8gbGnDqm4ga+G6v3QgbeG7gW0gKHN5bWxpbmspIOKAnCVz4oCdOiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAwNgorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IHBo4bqjaSBsw6BtIGfDrCB24bubaSAlMDZvICVzIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBow7JhIHRy4buZbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0gKGtow7RuZyBs4bqleSByYSDEkcaw4bujYykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBow7JhIHRy4buZbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0gKGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIGhp4buHbiBkaeG7h24pIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UpIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kga2hpIGjDsmEgdHLhu5luIG3DtC3EkXVuLWNvbiDigJwlc+KAnSAobOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgdGhlbyBzYXUgbuG7gW4taMOyYS0iCisidHLhu5luKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyMSBtZXJnZS1yZWN1cnNpdmUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICJDaHV54buDbi10aeG6v3AtbmhhbmggbcO0LcSRdW4tY29uIOKAnCVz4oCdIMSR4bq/biBs4bqnbiBjaHV54buDbiBnaWFvIHNhdSDEkcOieToiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjQgbWVyZ2UtcmVjdXJzaXZlLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIgorbXNnc3RyICJDaHV54buDbi10aeG6v3AtbmhhbmggbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgaMOyYSB0cuG7mW4gbcO0LcSRdW4tY29uIOKAnCVz4oCdIChraMO0bmcgdMOsbSB0aOG6pXkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvICIKKyJ0aGVvIHNhdSBow7JhIHRy4buZbikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBow7JhIHRy4buZbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0gKGtow7RuZyBjaHV54buDbiB0aeG6v3AgbmhhbmggxJHGsOG7o2MpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY0Cittc2dpZCAiRm91bmQgYSBwb3NzaWJsZSBtZXJnZSByZXNvbHV0aW9uIGZvciB0aGUgc3VibW9kdWxlOlxuIgorbXNnc3RyICJUw6xtIHRo4bqleSBt4buZdCBnaeG6o2kgcGjDoXAgaMOyYSB0cuG7mW4gY8OzIHRo4buDIGNobyBtw7QtxJF1bi1jb246XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisiTuG6v3UgxJHDonkgbMOgIMSRw7puZyDEkcahbiBnaeG6o24gdGjDqm0gbsOzIHbDoG8gbeG7pWMgbOG7pWMgdsOtIGThu6VcbiIKKyJi4bqxbmcgY8OhY2ggZMO5bmc6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJjw6FpIG3DoCBz4bq9IGNo4bqlcCBuaOG6rW4gZ+G7o2kgw70gbsOgeS5cbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgaMOyYSB0cuG7mW4gbcO0LcSRdW4tY29uIOKAnCVz4oCdICh0aOG6pXkgbmhp4buBdSBow7JhIHRy4buZbiDEkWEgdHLDuW5nKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM0OQorbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdGjhu7FjIGhp4buHbiB0cuG7mW4gbuG7mWkgYuG7mSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjDqm0gJXMgdsOgbyBjxqEgc+G7nyBk4buvIGxp4buHdSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgIlThu7EtxJHhu5luZy1ow7JhLXRy4buZbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgd3JpdGluZyB0byAlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIkzhu5dpOiB04burIGNo4buRaSDEkcOzbmcgdOG6rXAgdGluIGtow7RuZyDEkcaw4bujYyB0aGVvIGTDtWkgdOG6oWkg4oCcJXPigJ07IHRoYXkgdsOgbyDEkcOzIGdoaSB2w6BvICIKKyIlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICglcy94w7NhKTogJXMgYuG7iyB4w7NhIHRyb25nICVzIHbDoCAlcyB0cm9uZyAlcy4gUGhpw6puIGLhuqNuICVzIGPhu6dhICVzICIKKyJjw7JuIGzhuqFpIHRyb25nIGPDonkgKHRyZWUpLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUuIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKCVzL3jDs2EpOiAlcyBi4buLIHjDs2EgdHJvbmcgJXMgdsOgICVzIMSR4bq/biAlcyB0cm9uZyAlcy4gUGhpw6puIGLhuqNuICVzICIKKyJj4bunYSAlcyBjw7JuIGzhuqFpIHRyb25nIGPDonkgKHRyZWUpLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKCVzL3jDs2EpOiAlcyBi4buLIHjDs2EgdHJvbmcgJXMgdsOgICVzIHRyb25nICVzLiBQaGnDqm4gYuG6o24gJXMgY+G7p2EgJXMgIgorImPDsm4gbOG6oWkgdHJvbmcgY8OieSAodHJlZSkgdOG6oWkgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoJXMveMOzYSk6ICVzIGLhu4sgeMOzYSB0cm9uZyAlcyB2w6AgJXMgxJHhur9uICVzIHRyb25nICVzLiBQaGnDqm4gYuG6o24gJXMgIgorImPhu6dhICVzIGPDsm4gbOG6oWkgdHJvbmcgY8OieSAodHJlZSkgdOG6oWkgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTM0Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICLEkeG7lWkgdMOqbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUzNAorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgIsSRw6MgxJHhu5VpIHTDqm4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTQgbWVyZ2UtcmVjdXJzaXZlLmM6MjUzMCBtZXJnZS1yZWN1cnNpdmUuYzozMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAiVOG7qyBjaOG7kWkgxJHDs25nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIHThuqFpIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXMsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gdGhlIHdheS4iCittc2dzdHIgIiIKKyJU4burIGNo4buRaSDEkcOzbmcgdOG6rXAgdGluIGtow7RuZyDEkcaw4bujYyB0aGVvIGTDtWkgdOG6oWkg4oCcJXPigJ0sIG5nYXkgY+G6oyBraGkgbsOzIOG7nyB0csOqbiAiCisixJHGsOG7nW5nLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICBBZGRlZCAlcyBpbiAlcyIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICjEkeG7lWktdMOqbi90aMOqbSk6IMSQ4buVaSB0w6puICVzLT4lcyB0cm9uZyAlcy4gJXMgxJHGsOG7o2MgdGjDqm0gdHJvbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIGzDoCBt4buZdCB0aMawIG3hu6VjIHRyb25nICVzIHRoYXkgdsOgbyDEkcOzIHRow6ptIHbDoG8gbmjGsCBsw6AgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKyJU4burIGNo4buRaSDEkcOzbmcgdOG6rXAgdGluIGtow7RuZyDEkcaw4bujYyB0aGVvIGTDtWkgdOG6oWkg4oCcJXPigJ07IHRoYXkgdsOgbyDEkcOzIMSRYW5nIHRow6ptICIKKyJ0aMOgbmggJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICjEkeG7lWktdMOqbi/EkeG7lWktdMOqbik6IMSQ4buVaSB0w6puIFwiJXNcIi0+XCIlc1wiIHRyb25nIG5ow6FuaCBcIiVzXCIgxJHhu5VpICIKKyJ0w6puIFwiJXNcIi0+XCIlc1wiIHRyb25nIFwiJXNcIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzQyCittc2dpZCAiIChsZWZ0IHVucmVzb2x2ZWQpIgorbXNnc3RyICIgKGPhuqduIGdp4bqjaSBxdXnhur90KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoxJHhu5VpLXTDqm4vxJHhu5VpLXTDqm4pOiDEkOG7lWkgdMOqbiAlcy0+JXMgdHJvbmcgJXMuIMSQ4buVaSB0w6puICVzLT4lcyB0cm9uZyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGRpcmVjdG9yeSByZW5hbWUgc3BsaXQpOiBVbmNsZWFyIHdoZXJlIHRvIHBsYWNlICVzIGJlY2F1c2UgIgorImRpcmVjdG9yeSAlcyB3YXMgcmVuYW1lZCB0byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2l0aCBubyBkZXN0aW5hdGlvbiAiCisiZ2V0dGluZyBhIG1ham9yaXR5IG9mIHRoZSBmaWxlcy4iCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVDogKHRoxrAgbeG7pWMgxJHhu5VpIHTDqm4gY2hpYSB0w6FjaCk6IEtow7RuZyByw7UgcsOgbmcgxJHhu4MgxJHhurd0IMSR4buLYSDEkWnhu4NtICVzIGLhu59pICIKKyJ2w6wgdGjGsCBt4bulYyAlcyDEkcOjIGLhu4sgxJHhu5VpIHTDqm4gdGjDoG5oIG5oaeG7gXUgdGjGsCBt4bulYyBraMOhYywgduG7m2kga2jDtG5nIMSRw61jaCDEkeG6v24gIgorIm5o4bqtbiBt4buZdCBwaOG6p24gbmhp4buBdSBj4bunYSBjw6FjIHThuq1wIHRpbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogRXhpc3RpbmcgZmlsZS9kaXIgYXQgJXMgaW4gdGhlIHdheSBvZiAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZShzKSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcgcGF0aChzKSB0aGVyZTogJXMuIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQ6IChuZ+G6p20gxJHhu5VpIHTDqm4gdGjGsCBt4bulYyk6IFThuq1wIHRpbi90aMawIG3hu6VjIMSRw6Mgc+G6tW4gY8OzIHThuqFpICVzIHRoZW8gY8OhY2ggIgorImPhu6dhIGPDoWMgxJHhu5VpIHTDqm4gdGjGsCBt4bulYyBuZ+G6p20gxJHhurd0IChjw6FjKSDEkcaw4budbmcgZOG6q24gc2F1IOG7nyDEkcOieTogJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUOiAobmfhuqdtIMSR4buVaSB0w6puIHRoxrAgbeG7pWMpOiBLaMO0bmcgdGjhu4Mgw6FuaCB44bqhIG3hu5l0IMSRxrDhu51uZyBk4bqrbiB0aMOgbmggJXM7ICIKKyJjw6FjIMSR4buVaSB0w6puIHRoxrAgbeG7pWMgbmfhuqdtIGPhu5EgxJHhurd0IGPDoWMgxJHGsOG7nW5nIGThuqtuIOG7nyDEkcOieTogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIGRpcmVjdG9yeSAlcy0+JXMgaW4gJXMuIFJlbmFtZSBkaXJlY3RvcnkgJXMtIgorIj4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICjEkeG7lWktdMOqbi/EkeG7lWktdMOqbik6IMSQ4buVaSB0w6puIHRoxrAgbeG7pWMgJXMtPiVzIHRyb25nICVzLiDEkOG7lWkgdMOqbiB0aMawIG3hu6VjICIKKyIlcy0+JXMgdHJvbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAiIgorIkPhuqJOSCBCw4FPOiB0csOhbmggw6FwIGThu6VuZyAlcyAtPiAlcyDEkeG7lWkgdGjDqm4gdGjDoG5oICVzLCBi4bufaSB2w6wgYuG6o24gdGjDom4gJXMgY8WpbmcgIgorImLhu4sgxJHhu5VpIHTDqm4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICJz4butYSDEkeG7lWkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAixJHDoyBz4butYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA5OAorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIm7hu5lpIGR1bmciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMDIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICJ0aMOqbS90aMOqbSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIsSQw6MgYuG7jyBxdWEgJXMgKMSRw6MgY8OzIHPhurVuIGzhuqduIGjDsmEgdHLhu5luIG7DoHkpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ3IGdpdC1zdWJtb2R1bGUuc2g6OTkzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJtw7QtxJF1bi1jb24iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIlhVTkcgxJDhu5hUICglcyk6IFh1bmcgxJHhu5l0IGjDsmEgdHLhu5luIHRyb25nICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJUaGF5IHbDoG8gxJHDsyB0aMOqbSB2w6BvICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIsSQxrDhu51uZyBk4bqrbiDEkcOjIMSRxrDhu6NjIGPhuq1wIG5o4bqtdDogJXMgxJHGsOG7o2MgdGjDqm0gdsOgbyB0cm9uZyAlcyBiw6puIHRyb25nIG3hu5l0IHRoxrAgbeG7pWMgIgorIsSRw6MgxJHGsOG7o2MgxJHhu5VpIHTDqm4gdHJvbmcgJXM7IGRpIGNodXnhu4NuIG7DsyDEkeG6v24gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkICIKKyJpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoduG7iyB0csOtIHThu4dwKTogJXMgxJHGsOG7o2MgdGjDqm0gdsOgbyB0cm9uZyAlcyB0cm9uZyBt4buZdCB0aMawIG3hu6VjIMSRw6MgxJHGsOG7o2MgIgorIsSR4buVaSB0w6puIHRow6BuaCAlcywgxJFvw6FuIGzDoCBuw7MgbsOqbiDEkcaw4bujYyBkaSBjaHV54buDbiDEkeG6v24gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICIKKyIlczsgbW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAiIgorIsSQxrDhu51uZyBk4bqrbiDEkcOjIMSRxrDhu6NjIGPhuq1wIG5o4bqtdDogJXMgxJHGsOG7o2MgxJHhu5VpIHTDqm4gdGjDoG5oICVzIHRyb25nICVzLCBiw6puIHRyb25nIG3hu5l0ICIKKyJ0aMawIG3hu6VjIMSRw6MgxJHGsOG7o2MgxJHhu5VpIHTDqm4gdHJvbmcgJXM7IGRpIGNodXnhu4NuIG7DsyDEkeG6v24gJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0ICIKKyJ3YXMgcmVuYW1lZCBpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoduG7iyB0csOtIHThu4dwKTogJXMgxJHGsOG7o2MgxJHhu5VpIHTDqm4gdGjDoG5oICVzIHRyb25nICVzLCBiw6puIHRyb25nIG3hu5l0IHRoxrAgIgorIm3hu6VjIMSRw6MgxJHGsOG7o2MgxJHhu5VpIHTDqm4gdGjDoG5oICVzLCDEkW/DoW4gbMOgIG7DsyBuw6puIMSRxrDhu6NjIGRpIGNodXnhu4NuIMSR4bq/biAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIsSQYW5nIHjDs2EgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MDgKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAidOG6rXAtdGluL3RoxrAtbeG7pWMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MTMKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAidGjGsC1t4bulYy904bqtcC10aW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoJXMpOiDhu54gxJHDonkga2jDtG5nIGPDsyB0aMawIG3hu6VjIG7DoG8gY8OzIHTDqm4gJXMgdHJvbmcgJXMuIFRow6ptICVzIG5oxrAgbMOgICIKKyIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIlRow6ptIFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoYWRkL2FkZCk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJYVU5HIMSQ4buYVCAodGjDqm0vdGjDqm0pOiBYdW5nIMSR4buZdCBow7JhIHRy4buZbiB0cm9uZyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ4MgorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSEiCittc2dzdHIgIsSQw6MgY+G6rXAgbmjhuq10IHLhu5NpISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgImjDsmEgdHLhu5luIGPDoWMgY8OieSAlcyB2w6AgJXMgZ+G6t3AgbOG7l2kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1OTUKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAixJBhbmcgdHLhu5luOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAidMOsbSB0aOG6pXkgJXUgdOG7lSB0acOqbiBjaHVuZzoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NTgKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgImjDsmEgdHLhu5luIGtow7RuZyB0cuG6oyB24buBIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgbyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzcxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiICAlcyIKK21zZ3N0ciAiIgorIkPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSBj4bunYSBi4bqhbiB24bubaSBjw6FjIHThuq1wIHRpbiBzYXUgxJHDonkgc+G6vSBi4buLIGdoaSDEkcOoIGLhu59pIGzhu4duaCAiCisiaMOyYSB0cuG7mW46XG4iCisiICAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiB0w61jaCDEkeG7kWkgdMaw4bujbmcg4oCcJXPigJ0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4MzIgYnVpbHRpbi9tZXJnZS5jOjY5NCBidWlsdGluL21lcmdlLmM6ODc0Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBi4bqjbmcgbeG7pWMgbOG7pWMuIgorCisjOiBtaWR4LmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAidOG6rXAgdGluIMSR4buTIHRo4buLIG11bHRpLXBhY2staW5kZXggJXMgcXXDoSBuaOG7jyIKKworIzogbWlkeC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc2lnbmF0dXJlIDB4JTA4eCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICJjaOG7ryBrw70gbXVsdGktcGFjay1pbmRleCAweCUwOHgga2jDtG5nIGto4bubcCBjaOG7ryBrw70gMHglMDh4IgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIHBoacOqbiBi4bqjbiAlZCBj4bunYSBtdWx0aS1wYWNrLWluZGV4IgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICJwaGnDqm4gYuG6o24gYsSDbSDigJwldeKAnSBraMO0bmcga2jhu5twIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgImtob+G6o25nIGLDuSDEkW/huqFuIGtow7RuZyBo4bujcCBs4buHIChxdcOhIGzhu5tuKSIKKworIzogbWlkeC5jOjEzMgorbXNnaWQgInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIm3DoyBt4bqjbmgga+G6v3QgdGjDumMgbXVsdGktcGFjay1pbmRleCB4deG6pXQgaGnhu4duIHPhu5ttIGjGoW4gYsOsbmggdGjGsOG7nW5nIgorCisjOiBtaWR4LmM6MTQ1Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIHBhY2stbmFtZSBjaHVuayIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCB0aGnhur91IG3huqNuaCBwYWNrLW5hbWUgY+G6p24gdGhp4bq/dCIKKworIzogbWlkeC5jOjE0NworbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHRoaeG6v3UgbeG6o25oIE9JRCBmYW5vdXQgY+G6p24gdGhp4bq/dCIKKworIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgbG9va3VwIGNodW5rIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IHRoaeG6v3UgbeG6o25oIE9JRCBsb29rdXAgY+G6p24gdGhp4bq/dCIKKworIzogbWlkeC5jOjE1MQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBvYmplY3Qgb2Zmc2V0cyBjaHVuayIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCB0aGnhur91IG3huqNuaCBjw6FjIGtob+G6o25nIGLDuSDEkeG7kWkgdMaw4bujbmcgY+G6p24gdGhp4bq/dCIKKworIzogbWlkeC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIgorbXNnc3RyICJjw6FjIHTDqm4gZ8OzaSBtdWx0aS1wYWNrLWluZGV4IGtow7RuZyDEkcO6bmcgdGjhu6kgdOG7sTog4oCcJXPigJ0gdHLGsOG7m2Mg4oCcJXPigJ0iCisKKyM6IG1pZHguYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgdG90YWwgcGFja3MpIgorbXNnc3RyICJwYWNrLWludC1pZCBzYWk6ICV1ICgldSBjw6FjIGfDs2kgdOG7lW5nKSIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCBsxrB1IHRy4buvIG3hu5l0IGtob+G6o25nIGLDuSA2NC1iw610LCBuaMawbmcgb2ZmX3QgbMOgIHF1w6Egbmjhu48iCisKKyM6IG1pZHguYzoyODgKK21zZ2lkICJlcnJvciBwcmVwYXJpbmcgcGFja2ZpbGUgZnJvbSBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICJs4buXaSBjaHXhuqluIGLhu4sgdOG6rXAgdGluIGfDs2kgdOG7qyBtdWx0aS1wYWNrLWluZGV4IgorCisjOiBtaWR4LmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhZGQgcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHRow6ptIHThuq1wIHRpbiBnw7NpIOKAnCVz4oCdIgorCisjOiBtaWR4LmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBhY2staW5kZXggJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIG3hu58gcGFjay1pbmRleCDigJwlc+KAnSIKKworIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHBow6JuIGLhu5UgxJHhu5FpIHTGsOG7o25nIOKAnCVk4oCdIHRyb25nIHThuq1wIHRpbiBnw7NpIgorCisjOiBtaWR4LmM6ODQyCittc2dpZCAiQWRkaW5nIHBhY2tmaWxlcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLEkGFuZyB0aMOqbSB04bqtcCB0aW4gZ8OzaSB04burIG11bHRpLXBhY2staW5kZXgiCisKKyM6IG1pZHguYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiCittc2dzdHIgIsSRw6Mga2jDtG5nIHRo4bqleSB04bqtcCB0aW4gZ8OzaSAlcyDEkeG7gyBtw6AgeMOzYSIKKworIzogbWlkeC5jOjk3MworbXNnaWQgIldyaXRpbmcgY2h1bmtzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIsSQYW5nIGdoaSBjw6FjIGtow7pjIHbDoG8gbXVsdGktcGFjay1pbmRleCIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB4w7NhIG11bHRpLXBhY2staW5kZXggdOG6oWkgJXMiCisKKyM6IG1pZHguYzoxMTA4Cittc2dpZCAiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIsSQYW5nIGtow7NhIGNobyBjw6FjIGfDs2kgYuG7iyB0aGFtIGNoaeG6v3UiCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCittc2dzdHIgImZhbm91dCBjxakgc2FpIHRo4bupIHThu7E6IGZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorCisjOiBtaWR4LmM6MTEyOAorbXNnaWQgIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAiVGjhuqltIHRyYSB0aOG7qSB04buxIE9JRCB0cm9uZyBtdWx0aS1wYWNrLWluZGV4IgorCisjOiBtaWR4LmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJvaWQgbG9va3VwIG91dCBvZiBvcmRlcjogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKK21zZ3N0ciAibG9va3VwIGPFqSBzYWkgdGjhu6kgdOG7sTogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIsSQYW5nIHPhuq9wIHjhur9wIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRoZW8gdOG6rXAgdGluIGfDs2kiCisKKyM6IG1pZHguYzoxMTY0Cittc2dpZCAiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIgorbXNnc3RyICLEkGFuZyB0aOG6qW0gdHJhIGPDoWMga2hv4bqjbmcgYsO5IMSR4buRaSB0xrDhu6NuZyIKKworIzogbWlkeC5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgcGFjayBlbnRyeSBmb3Igb2lkWyVkXSA9ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6o2kgbeG7pWMgZ8OzaSBjaG8gb2lkWyVkXSA9ICVzIgorCisjOiBtaWR4LmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBwYWNrLWluZGV4IGZvciBwYWNrZmlsZSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHThuqNpIHBhY2staW5kZXggY2hvIHThuq1wIHRpbiBnw7NpICVzIgorCisjOiBtaWR4LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCBmb3Igb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorbXNnc3RyICIiCisia2hv4bqjbmcgYsO5IMSR4buRaSB0xrDhu6NuZyBraMO0bmcgxJHDum5nIGNobyBvaWRbJWRdID0gJXM6ICU8UFJJeDY0PiAhPSAlPFBSSXg2ND4iCisKKyM6IG1pZHguYzoxMjIwCittc2dpZCAiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICLEkGFuZyDEkeG6v20gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgdGhhbSBjaGnhur91IgorCisjOiBtaWR4LmM6MTIzMAorbXNnaWQgIkZpbmRpbmcgYW5kIGRlbGV0aW5nIHVucmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIsSQYW5nIHTDrG0gdsOgIHjDs2EgY8OhYyBnw7NpIGtow7RuZyDEkcaw4bujYyB0aGFtIGNoaeG6v3UiCisKKyM6IG1pZHguYzoxMzg4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSBjw6FjIMSR4buRaSB0xrDhu6NuZyBnw7NpIgorCisjOiBtaWR4LmM6MTQwNworbXNnaWQgImNvdWxkIG5vdCBmaW5pc2ggcGFjay1vYmplY3RzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgaG/DoG4gdGhp4buHbiBjw6FjIMSR4buRaSB0xrDhu6NuZyBnw7NpIgorCisjOiBuYW1lLWhhc2guYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X2RpciB0aHJlYWQ6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdHV54bq/biBsYXp5X2RpcjogJXMiCisKKyM6IG5hbWUtaGFzaC5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdHV54bq/biBsYXp5X25hbWU6ICVzIgorCisjOiBuYW1lLWhhc2guYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbGF6eV9uYW1lIHRocmVhZDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaWEgbmjhuq1wIHR1eeG6v24gbGF6eV9uYW1lOiAlcyIKKworIzogbm90ZXMtbWVyZ2UuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBwcmV2aW91cyBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIHVzZSAnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0JyBvciAnZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQnIHRvICIKKyJjb21taXQvYWJvcnQgdGhlIHByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgbm90ZXMgbWVyZ2UuIgorbXNnc3RyICIiCisiQuG6oW4gxJHDoyBjaMawYSBob8OgbiB04bqldCBow7JhIHRy4buZbiBnaGkgY2jDuiB0csaw4bubYyDEkcOieSAoJXMgduG6q24gY8OybikuXG4iCisiVnVpIGzDsm5nIGTDuW5nIOKAnGdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdOKAnSBoYXkg4oCcZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnTigJ0gxJHhu4MgIgorImNodXnhu4NuIGdpYW8gaGF5IGLDo2kgYuG7jyBs4bqnbiBow7JhIHRy4buZbiB0csaw4bubYyDEkcOieSB2w6AgYuG6r3QgxJHhuqd1IG3hu5l0IGjDsmEgdHLhu5luIGdoaSAiCisiY2jDuiBt4bubaS4iCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIkLhuqFuIGNoxrBhIGvhur90IHRow7pjIHZp4buHYyBow7JhIHRy4buZbiBnaGkgY2jDuiAoJXMgduG6q24gdOG7k24gdOG6oWkpLiIKKworIzogbm90ZXMtdXRpbHMuYzo0NgorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaHV54buDbiBnaWFvIGPDonkgZ2hpIGNow7ogY2jGsGEgxJHGsOG7o2Mga2jhu59pIHThuqFvIGhv4bq3YyBraMO0bmcgxJHGsOG7o2MgdGhhbSAiCisiY2hp4bq/dSIKKworIzogbm90ZXMtdXRpbHMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICJHacOhIHRy4buLIG5vdGVzLnJld3JpdGVNb2RlIHNhaTog4oCcJXPigJ0iCisKKyM6IG5vdGVzLXV0aWxzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJU4burIGNo4buRaSBnaGkgxJHDqCBnaGkgY2jDuiB0cm9uZyAlcyAobuG6sW0gbmdvw6BpIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZgorIy4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzCisjLiBpdHMgdmFsdWUuCisjLgorIzogbm90ZXMtdXRpbHMuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJHacOhIHRy4buLICVzIHNhaTog4oCcJXPigJ0iCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIFwiJXNcIiBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogb2JqZWN0LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBhICVzLCBub3QgYSAlcyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nICVzIGzDoCBt4buZdCAlcywga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgJXMiCisKKyM6IG9iamVjdC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaGFzIHVua25vd24gdHlwZSBpZCAlZCIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nICVzIGPDsyBtw6Mga2nhu4N1ICVkIGNoxrBhIGJp4bq/dCIKKworIzogb2JqZWN0LmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggxJHhu5FpIHTGsOG7o25nOiDigJwlc+KAnSIKKworIzogb2JqZWN0LmM6MjY2IG9iamVjdC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIG1pc21hdGNoICVzIgorbXNnc3RyICJtw6MgYsSDbSBraMO0bmcga2jhu5twICVzIgorCisjOiBwYWNrZmlsZS5jOjY0MQorbXNnaWQgIm9mZnNldCBiZWZvcmUgZW5kIG9mIHBhY2tmaWxlIChicm9rZW4gLmlkeD8pIgorbXNnc3RyICJ24buLIHRyw60gdMawxqFuZyDEkeG7kWkgdHLGsOG7m2MgxJFp4buDbSBr4bq/dCB0aMO6YyBj4bunYSB04bqtcCB0aW4gZ8OzaSAoLmlkeCBo4buPbmcgw6A/KSIKKworIzogcGFja2ZpbGUuYzoxODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9mZnNldCBiZWZvcmUgc3RhcnQgb2YgcGFjayBpbmRleCBmb3IgJXMgKGNvcnJ1cHQgaW5kZXg/KSIKK21zZ3N0ciAiduG7iyB0csOtIHTGsMahbmcgxJHhu5FpIG7hurFtIHRyxrDhu5tjIGNo4buJIG3hu6VjIGfDs2kgY2hvICVzICht4bulYyBs4bulYyBi4buLIGjhu49uZyDDoD8pIgorCisjOiBwYWNrZmlsZS5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICIiCisiduG7iyB0csOtIHTGsMahbmcgxJHhu5FpIHbGsOG7o3QgcXXDoSBjdeG7kWkgY+G7p2EgY2jhu4kgbeG7pWMgZ8OzaSBjaG8gJXMgKG3hu6VjIGzhu6VjIGLhu4sgY+G6r3QgY+G7pXQgw6A/KSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIuKAnCVz4oCdIHnDqnUgY+G6p3UgbeG7mXQgZ2nDoSB0cuG7iyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGluY29tcGF0aWJsZSB3aXRoICVzIgorbXNnc3RyICIlcyBsw6AgeHVuZyBraOG6r2MgduG7m2kgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICIlcyA6IHh1bmcga2jhuq9jIHbhu5tpIGPDoWMgY8OhaSBraMOhYyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIlcyBrIG5o4bqtbiBnacOhIHRy4buLIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXNuJ3QgYXZhaWxhYmxlIgorbXNnc3RyICIlcyBraMO0bmcgc+G6tW4gY8OzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiJXMgY+G6p24gbeG7mXQgZ2nDoSB0cuG7iyBk4bqhbmcgc+G7kSBraMO0bmcgw6JtIHbhu5tpIG3hu5l0IGjhuq11IHThu5EgdMO5eSBjaOG7jW4gay9tL2ciCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICJ0w7l5IGNo4buNbiBjaMawYSByw7UgcmFuZzogJXMgKG7Dqm4gbMOgIC0tJXMlcyBoYXkgLS0lcyVzKSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMyBwYXJzZS1vcHRpb25zLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIKK21zZ3N0ciAiY8OzIHBo4bqjaSDDvSBi4bqhbiBsw6Ag4oCcLS0lc+KAnCAoduG7m2kgaGFpIGThuqV1IGfhuqFjaCBuZ2FuZz8pIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgImtow7RuZyBoaeG7g3UgdMO5eSBjaOG7jW4g4oCcJXPigJ0iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBzd2l0Y2ggYCVjJyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiDigJwlY+KAnSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IHTDuXkgY2jhu41uIG5vbi1hc2NpaSB0cm9uZyBjaHXhu5dpOiDigJwlc+KAnSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg4OAorbXNnaWQgIi4uLiIKK21zZ3N0ciAi4oCmIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAiY8OhY2ggZMO5bmc6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24uCisjLgorIzogcGFyc2Utb3B0aW9ucy5jOjkxMworIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgICAgaG/hurdjOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk1NQorbXNnaWQgIi1OVU0iCittc2dzdHIgIi1T4buQIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgImLDrSBkYW5oIGPhu6dhIC0tJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzoyMCBwYXJzZS1vcHRpb25zLWNiLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAidMO5eSBjaOG7jW4g4oCcJXPigJ0gY+G6p24gbeG7mXQgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAibmfDoHkgdGjDoW5nIGjhur90IGjhuqFuIGThu4sgaMOsbmgg4oCcJXPigJ0iCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgInTDuXkgY2jhu41uIOKAnCVz4oCdIGPhuqduIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBob+G6t2MgXCJuZXZlclwiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgInTDqm4gxJHhu5FpIHTGsOG7o25nIGThu4sgaMOsbmgg4oCcJXPigJ0iCisKKyM6IHBhdGguYzo5MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIktow7RuZyB0aOG7gyBsw6BtICVzIMSRxrDhu6NjIGdoaSBi4bufaSBuaMOzbSIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAiIgorIkvDvSB04buxIHRob8OhdCBjaHXhu5dpIOKAnFxc4oCdIGtow7RuZyDEkcaw4bujYyBwaMOpcCBsw6Aga8O9IHThu7EgY3Xhu5FpIHRyb25nIGdpw6EgdHLhu4sgdGh14buZYyB0w61uaCIKKworIzogcGF0aHNwZWMuYzoxNDgKK21zZ2lkICJPbmx5IG9uZSAnYXR0cjonIHNwZWNpZmljYXRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIkNo4buJIGPDsyBt4buZdCDEkeG6t2MgdOG6oyDigJxhdHRyOuKAnSBsw6AgxJHGsOG7o2MgcGjDqXAuIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAixJHhurdjIHThuqMgYXR0ciBwaOG6o2kga2jDtG5nIMSRxrDhu6NjIMSR4buDIHRy4buRbmciCisKKyM6IHBhdGhzcGVjLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgInTDqm4gdGh14buZYyB0w61uaCBraMO0bmcgaOG7o3AgbOG7hyAlcyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisiY8OhYyBjw6BpIMSR4bq3dCDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24g4oCcZ2xvYuKAnSB2w6Ag4oCcbm9nbG9i4oCdIHRvw6BuIGPhu6VjIGzDoCB4dW5nIGto4bqvYyBuaGF1IgorCisjOiBwYXRoc3BlYy5jOjI2NgorbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIiIKKyJjw6BpIMSR4bq3dCDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24g4oCcbGl0ZXJhbOKAnSB0b8OgbiBj4bulYyBsw6AgeHVuZyBraOG6r2MgduG7m2kgY8OhYyBjw6BpIMSR4bq3dCDEkeG6t2MgIgorInThuqMgxJHGsOG7nW5nIGThuqtuIHRvw6BuIGPhu6VjIGtow6FjIgorCisjOiBwYXRoc3BlYy5jOjMwNgorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAidGhhbSBz4buRIGtow7RuZyBo4bujcCBs4buHIGNobyDigJx0aeG7gW4gdOG7keKAnSBtw6B1IG5oaeG7h20gxJHhurdjIHThuqMgxJHGsOG7nW5nIMSR4bqrbiIKKworIzogcGF0aHNwZWMuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBwYXRoc3BlYyBtYWdpYyAnJS4qcycgaW4gJyVzJyIKK21zZ3N0ciAiU+G7kSBtw6B1IG5oaeG7h20gxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIGtow7RuZyBo4bujcCBs4buHIOKAnCUuKnPigJ0gdHJvbmcg4oCcJXPigJ0iCisKKyM6IHBhdGhzcGVjLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAiVGhp4bq/dSDigJwp4oCdIHThuqFpIGN14buRaSBj4bunYSBz4buRIG3DoHUgbmhp4buHbSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gdHJvbmcg4oCcJXPigJ0iCisKKyM6IHBhdGhzcGVjLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICJDaMawYSB2aeG6v3QgbcOjIGNobyBz4buRIG3DoHUgbmhp4buHbSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24g4oCcJWPigJ0gdHJvbmcg4oCcJXPigJ0iCisKKyM6IHBhdGhzcGVjLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczog4oCcbGl0ZXJhbOKAnSB2w6Ag4oCcZ2xvYuKAnSB4dW5nIGto4bqvYyBuaGF1IgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiDigJwlc+KAnSBuZ2/DoGkgbeG7mXQga2hvIGNo4bupYSIKKworIzogcGF0aHNwZWMuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyAobW5lbW9uaWM6ICclYycpIgorbXNnc3RyICLigJwlc+KAnSAobW5lbW9uaWM6IOKAnCVj4oCdKSIKKworIzogcGF0aHNwZWMuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIKK21zZ3N0ciAiJXM6IHPhu5EgbeG6p3Ugbmhp4buHbSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gY2jGsGEgxJHGsOG7o2MgaOG7lyB0cuG7oyBi4bufaSBs4buHbmggbsOgeTogJXMiCisKKyM6IHBhdGhzcGVjLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAixJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIHbGsOG7o3QgcmEgbmdvw6BpIGxpw6puIGvhur90IG3hu4FtIgorCisjOiBwYXRoc3BlYy5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIGlzIGJhZGx5IHF1b3RlZDogJXMiCittc2dzdHIgImTDsm5nIMSRxrDhu6NjIHRyw61jaCBk4bqrbiBzYWk6ICVzIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4bqpeSBk4buvIGxp4buHdSBj4bunYSBnw7NpIGzDqm4gxJHEqWEiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIGfDs2kgZGVsaW0iCisKKyM6IHBrdC1saW5lLmM6MTA2Cittc2dpZCAiZmx1c2ggcGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGdoaSB2w6BvIHThuq1wIHRpbiBnw7NpIGzDumMgxJHhuql5IGThu68gbGnhu4d1IGzDqm4gYuG7mSBuaOG7myIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgImzhu5dpIGdpYW8gdGjhu6ljOiBraMO0bmcgdGjhu4MgbMOgbSDEkcaw4bujYyBkw7JuZyBkw6BpIgorCisjOiBwa3QtbGluZS5jOjE2MiBwa3QtbGluZS5jOjE2NAorbXNnaWQgInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgZ8OzaSBjw7MgxJHhu4tuaCBk4bqhbmciCisKKyM6IHBrdC1saW5lLmM6MTk2Cittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCAtIGRhdGEgZXhjZWVkcyBtYXggcGFja2V0IHNpemUiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgZ8OzaSAtIGThu68gbGnhu4d1IHbGsOG7o3QgcXXDoSBj4buhIHbDs2kgdOG7kWkgxJFhIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgZ8OzaSIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICJs4buXaSDEkeG7jWMiCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgIm3DoXkgY2jhu6cgYuG7iyB0cmVvIGLhuqV0IG5n4budIgorCisjOiBwa3QtbGluZS5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoIGNoYXJhY3RlcjogJS40cyIKK21zZ3N0ciAibOG7l2kgZ2lhbyB0aOG7qWM6IGvDvSB04buxIGNoaeG7gXUgZMOgaSBkw7JuZyBi4buLIHNhaTogJS40cyIKKworIzogcGt0LWxpbmUuYzozNDEgcGt0LWxpbmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIKK21zZ3N0ciAibOG7l2kgZ2lhbyB0aOG7qWM6IGNoaeG7gXUgZMOgaSBkw7JuZyBi4buLIHNhaSAlZCIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAibOG7l2kgbcOheSBjaOG7pzogJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICJMw6BtIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogcHJlbG9hZC1pbmRleC5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZGVkIGxzdGF0OiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHR1eeG6v24gdHLDrG5oIGxzdGF0OiAlcyIKKworIzogcHJldHR5LmM6OTgxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIMSR4buLbmggZOG6oW5nIC0tcHJldHR5IgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiTcOheSBjaOG7pyBraMO0bmcgY8OzIMSR4buLYSBjaOG7iSBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgInTDqm4gbcOheSBjaOG7pyBo4bupYSBo4bq5biBraMO0bmcgdGjhu4MgYuG6r3QgxJHhuqd1IGLhurFuZyAnLyc6ICVzIgorCisjOiByYW5nZS1kaWZmLmM6NzUKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgYGxvZ2AiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4Eg4oCcbG9n4oCcIgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMga+G6v3QgeHXhuqV0IOKAnGxvZ+KAnSIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogcmFuZ2UtZGlmZi5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgcGjhuqduIMSR4bqndSBnaXQg4oCcJS4qc+KAnSIKKworIzogcmFuZ2UtZGlmZi5jOjI4NQorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8ga2jDoWMgYmnhu4d0IgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIG5o4bqtdCBrw70gY2hvIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICIiCisic+G6vSBraMO0bmcgdGjDqm0gY8OhYyBiw60gZGFuaCDigJwlc+KAnSAo4oCcJXPigJ0gxJHDoyBjw7MgdOG7qyB0csaw4bubYyB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMpIgorCisjOiByZWFkLWNhY2hlLmM6Njk2Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBt4buZdCBibG9iIHLhu5duZyB0cm9uZyBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmciCisKKyM6IHJlYWQtY2FjaGUuYzo3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKyIlczogY2jhu4kgY8OzIHRo4buDIHRow6ptIHThuq1wIHRpbiB0aMO0bmcgdGjGsOG7nW5nLCBsacOqbiBr4bq/dCBt4buBbSBob+G6t2MgZ2l0LWRpcmVjdG9yaWVzIgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIGPDsyBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gxJHGsOG7o2MgbOG6pXkgcmEiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw6FuaCBt4bulYyBs4bulYyB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDqm0gJXMgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IHJlYWQtY2FjaGUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRo4buRbmcga8OqIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBjw7MgduG6uyBraMO0bmcgcGjhuqNpIGzDoCB04bqtcCB0aW4gdsOgIGPFqW5nIGNo4bqzbmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIgorCisjOiByZWFkLWNhY2hlLmM6MTUzMQorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIkzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogcmVhZC1jYWNoZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gxJHGsOG7o2MgxJHhurd0LCBuaMawbmcgZ2nDoSB0cuG7iyBj4bunYSBuw7MgbOG6oWkga2jDtG5nIGjhu6NwIGzhu4cuXG4iCisiRMO5bmcgcGhpw6puIGLhuqNuICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIMSRxrDhu6NjIMSR4bq3dCwgbmjGsG5nIGdpw6EgdHLhu4sgY+G7p2EgbsOzIGzhuqFpIGtow7RuZyBo4bujcCBs4buHLlxuIgorIkTDuW5nIHBoacOqbiBi4bqjbiAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgImNo4buvIGvDvSBzYWkgMHglMDh4IgorCisjOiByZWFkLWNhY2hlLmM6MTcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAlZCIKK21zZ3N0ciAicGhpw6puIGLhuqNuIG3hu6VjIGzhu6VjIHNhaSAlZCIKKworIzogcmVhZC1jYWNoZS5jOjE3MjQKK21zZ2lkICJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIKK21zZ3N0ciAiY2jhu68ga8O9IGThuqFuZyBzaGExIGNobyB04bqtcCB0aW4gbeG7pWMgbOG7pWMga2jDtG5nIMSRw7puZyIKKworIzogcmVhZC1jYWNoZS5jOjE3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgIm3hu6VjIGzhu6VjIGTDuW5nIHBo4bqnbiBt4bufIHLhu5luZyAlLjRzLCBjw6FpIG3DoCBjaMO6bmcgdMO0aSBraMO0bmcgaGnhu4N1IMSRxrDhu6NjIgorCisjOiByZWFkLWNhY2hlLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIKK21zZ3N0ciAixJFhbmcgbOG7nSDEkWkgcGjhuqduIG3hu58gcuG7mW5nICUuNHMiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSDEkeG7i25oIGThuqFuZyBt4bulYyBs4bulYyAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBuYW1lIGZpZWxkIGluIHRoZSBpbmRleCwgbmVhciBwYXRoICclcyciCittc2dzdHIgInRyxrDhu51uZyB0w6puIHNhaSBz4bqhbmcgdHJvbmcgbeG7pWMgbOG7pWMsIGfhuqduIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSIKKworIzogcmVhZC1jYWNoZS5jOjE4NjYKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBpbiBpbmRleCIKK21zZ3N0ciAiY8OhYyBt4bulYyB0aW4gc3RhZ2Uga2jDtG5nIMSRw7puZyB0aOG7qSB04buxIHRyb25nIG3hu6VjIGzhu6VjIgorCisjOiByZWFkLWNhY2hlLmM6MTg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBzdGFnZSBlbnRyaWVzIGZvciBtZXJnZWQgZmlsZSAnJXMnIgorbXNnc3RyICJuaGnhu4F1IG3hu6VjIHN0YWdlIGNobyB04bqtcCB0aW4gaMOyYSB0cuG7mW4g4oCcJXPigJ0iCisKKyM6IHJlYWQtY2FjaGUuYzoxODcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICJjw6FjIG3hu6VjIHRpbiBzdGFnZSBraMO0bmcgxJHDum5nIHRo4bupIHThu7EgY2hvIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6MTk3OCByZWFkLWNhY2hlLmM6MjI2NiByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IGJ1aWx0aW4vYWRkLmM6NDk5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc4IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NTQgYnVpbHRpbi9jbGVhbi5jOjk2NyBidWlsdGluL2NvbW1pdC5jOjM2NworIzogYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDk5IGJ1aWx0aW4vbXYuYzoxNDUKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDYgYnVpbHRpbi9ybS5jOjI3MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJ04bqtcCB0aW4gZ2hpIGLhuqNuZyBt4bulYyBs4bulYyBi4buLIGjhu49uZyIKKworIzogcmVhZC1jYWNoZS5jOjIxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHR1eeG6v24gbG9hZF9jYWNoZV9lbnRyaWVzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGpvaW4gbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaWEgbmjhuq1wIHR1eeG6v24gbG9hZF9jYWNoZV9lbnRyaWVzOiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVzOiBt4bufIHThuq1wIHRpbiBt4bulYyBs4bulYyBn4bq3cCBs4buXaSIKKworIzogcmVhZC1jYWNoZS5jOjIxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4IgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIGzhuqV5IHRo4buRbmcga8OqIGLhuqNuZyBt4bulYyBs4bulYyDEkcOjIG3hu58iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiJXM6IHThuq1wIHRpbiBt4bulYyBs4bulYyBuaOG7jyBoxqFuIG1vbmcgxJHhu6NpIgorCisjOiByZWFkLWNhY2hlLmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIMOhbmggeOG6oSB04bqtcCB0aW4gbeG7pWMgbOG7pWMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB0dXnhur9uIGxvYWRfaW5kZXhfZXh0ZW5zaW9uczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2lhIG5o4bqtcCB0dXnhur9uIGxvYWRfaW5kZXhfZXh0ZW5zaW9uczogJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmcmVzaGVuIHNoYXJlZCBpbmRleCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbMOgbSB0xrDGoWkgbeG7m2kgbeG7pWMgbOG7pWMgxJHDoyBjaGlhIHPhursg4oCcJXPigJ0iCisKKyM6IHJlYWQtY2FjaGUuYzoyMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIm3hu6VjIGzhu6VjIGLhu4sgaOG7j25nLCBj4bqnbiAlcyB0cm9uZyAlcywgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMwMjEgc3RyYnVmLmM6MTE0NSB3cmFwcGVyLmM6NjIyIGJ1aWx0aW4vbWVyZ2UuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHDs25nIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6MzEyNCBzZXF1ZW5jZXIuYzoyNDI5IHNlcXVlbmNlci5jOjQwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSDigJwlc+KAnSIKKworIzogcmVhZC1jYWNoZS5jOjMxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIHRoxrAgbeG7pWMgZ2l0OiAlcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVubGluazogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBi4buPIGxpw6puIGvhur90ICh1bmxpbmspOiDigJwlc+KAnSIKKworIzogcmVhZC1jYWNoZS5jOjMxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHPhu61hIGPDoWMgYsOtdCBwaMOibiBxdXnhu4FuIHRyw6puIOKAnCVz4oCdIgorCisjOiByZWFkLWNhY2hlLmM6MzMyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiCittc2dzdHIgIiVzOiBraMO0bmcgdGjhu4MgeMOzYSBi4buPIHN0YWdlICMwIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorbXNnc3RyICIiCisia2jDtG5nIG5o4bqtbiByYSBjw6BpIMSR4bq3dCAlcyBjaG8gdMO5eSBjaOG7jW4gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIE7Dqm4gYuG7jyBxdWEuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzozNQorbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWFuZD4gPSBydW4gY29tbWFuZCAodGhlIHJlc3Qgb2YgdGhlIGxpbmUpIHVzaW5nIHNoZWxsXG4iCisiYiwgYnJlYWsgPSBzdG9wIGhlcmUgKGNvbnRpbnVlIHJlYmFzZSBsYXRlciB3aXRoICdnaXQgcmViYXNlIC0tY29udGludWUnKVxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkPDoWMgbOG7h25oOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSBkw7luZyBs4bqnbiBjaHV54buDbiBnaWFvXG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gZMO5bmcgbOG6p24gY2h1eeG7g24gZ2lhbywgbmjGsG5nIHPhu61hIGzhuqFpIHBo4bqnbiBjaMO6IHRow61jaFxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSBkw7luZyBs4bqnbiBjaHV54buDbiBnaWFvLCBuaMawbmcgZOG7q25nIGzhuqFpIMSR4buDIHR1IGLhu5UgKGFtZW5kKVxuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IGTDuW5nIGzhuqduIGNodXnhu4NuIGdpYW8sIG5oxrBuZyBtZWxkIHbDoG8gbOG6p24gY2h1eeG7g24gZ2lhbyBr4bq/ICIKKyJ0csaw4bubY1xuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gZ2nhu5FuZyBuaMawIFwic3F1YXNoXCIsIG5oxrBuZyBsb+G6oWkgYuG7jyBjaMO6IHRow61jaCBuaOG6rXQga8O9ICIKKyJj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHlcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gY2jhuqF5IGzhu4duaCAocGjhuqduIGPDsm4gbOG6oWkgY+G7p2EgZMOybmcpIGTDuW5nIGjhu4cgduG7j1xuIgorImIsIGJyZWFrID0gZOG7q25nIHThuqFpIMSRw6J5ICh0aeG6v3AgdOG7pWMgY+G6o2kgdOG7lSBzYXUgbsOgeSBi4bqxbmcg4oCcZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZeKAnSlcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0geMOzYSBs4bqnbiBjaHV54buDbiBnaWFvXG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IMSRw6FuaCBuaMOjbiBIRUFEIGhp4buHbiB04bqhaSBi4bqxbmcgbeG7mXQgdMOqblxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSDEkeG6t3QgbOG6oWkgSEVBRCB0aMOgbmggbeG7mXQgbmjDo25cbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPG5ow6NuPiBbIyA8beG7mXRfZMOybmc+XVxuIgorIi4gICAgICAgdOG6oW8gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbiBz4butIGThu6VuZyBjaMO6IHRow61jaCBj4bunYSBs4bqnbiBjaHV54buDblxuIgorIi4gICAgICAgZ2lhbyBow7JhIHRy4buZbiBn4buRYyAoaG/hurdjIG3hu5l0X2TDsm5nLCBu4bq/dSBraMO0bmcgY2jhu4kgxJHhu4tuaCBs4bqnbiBjaHV54buDbiBnaWFvICIKKyJow7JhXG4iCisiLiAgICAgICB0cuG7mW4gZ+G7kWMpLiBEw7luZyAtYyA8Y29tbWl0PiDEkeG7gyByZXdvcmQgY2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g24gIgorImdpYW8uXG4iCisiXG4iCisiTmjhu69uZyBkw7JuZyBuw6B5IGPDsyB0aOG7gyDEkeG6o28gbmfGsOG7o2MgdGjhu6kgdOG7sTsgY2jDum5nIGNo4bqheSB04burIHRyw6puIMSR4buJbmggeHXhu5FuZyBkxrDhu5tpICIKKyLEkcOheS5cbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJD4bqjaSB04buVICVzIHbDoG8gJXMgKCVkIGzhu4duaCApIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLEkOG7q25nIHjDs2EgYuG6pXQga+G7syBkw7JuZyBuw6BvLiBEw7luZyDigJxkcm9w4oCdIG3hu5l0IGPDoWNoIHLDtSByw6BuZyDEkeG7gyB4w7NhIGLhu48gbeG7mXQgbOG6p24gIgorImNodXnhu4NuIGdpYW8uXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJO4bq/dSBi4bqhbiB4w7NhIGLhu48gbeG7mXQgZMOybmcg4bufIMSRw6J5IHRow6wgTOG6pk4gQ0hVWeG7gk4gR0lBTyDEkMOTIFPhurwgTeG6pFQuXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJC4bqhbiDEkWFuZyBz4butYSB04bqtcCB0aW4gdG9kbyBj4bunYSBt4buZdCBs4bqnbiBj4bqjaSB04buVIHTGsMahbmcgdMOhYyDEkWFuZyB0aOG7sWMgaGnhu4duLlxuIgorIsSQ4buDIHRp4bq/cCB04bulYyBj4bqjaSB04buVIHNhdSBraGkgc+G7rWEsIGNo4bqheTpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDgKK21zZ2lkICIiCisiXG4iCisiSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlR1eSBuaGnDqm4sIG7hur91IGLhuqFuIHjDs2EgYuG7jyBt4buNaSB0aOG7qSwgdmnhu4djIGPhuqNpIHThu5Ugc+G6vSBi4buLIGLDo2kgYuG7jy5cbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6ODUgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk1NQorbXNnaWQgIk5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IgorbXNnc3RyICJDaMO6IMO9IHLhurFuZyBs4bqnbiBjaHV54buDbiBnaWFvIHRy4buRbmcgcuG7l25nIGzDoCBnaGkgY2jDuiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA1IHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzUzNgorIzogc2VxdWVuY2VyLmM6MzU2MiBzZXF1ZW5jZXIuYzo1MjYzIGJ1aWx0aW4vZnNjay5jOjM0NiBidWlsdGluL3JlYmFzZS5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSDigJwlc+KAnSIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJy4iCittc2dzdHIgImtow7RuZyB0aOG7gyBjaMOpcCDigJwlc+KAnSBzYW5nIOKAnCVz4oCdLiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorIkPhuqNuaCBiw6FvOiBt4buZdCBz4buRIGzhuqduIGNodXnhu4NuIGdpYW8gY8OzIGzhur0gxJHDoyBi4buLIHjDs2EgbeG7mXQgY8OhY2ggdMOsbmggY+G7nS5cbiIKKyJDw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyB4w7NhICh04burIG3hu5tpIMSR4bq/biBjxakpOlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisixJDhu4MgdHLDoW5oIHRow7RuZyBiw6FvIG7DoHksIGTDuW5nIFwiZHJvcFwiIG3hu5l0IGPDoWNoIHLDtSByw6BuZyDEkeG7gyB4w7NhIGLhu48gbeG7mXQgbOG6p24gIgorImNodXnhu4NuIGdpYW8uXG4iCisiXG4iCisiRMO5bmcg4oCcZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVja+KAnSDEkeG7gyB0aGF5IMSR4buVaSBt4bupYyDEkeG7mSBj4bunYSBj4bqjbmggIgorImLDoW8uXG4iCisiQ8Ohbmgg4bupbmcgeOG7rSBjw7MgdGjhu4MgbMOgOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorCisjOiByZWZzLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIGNo4buJIMSR4bq/biBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIGjhu6NwIGzhu4cgbsOgbyBj4bqjISIKKworIzogcmVmcy5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgIsSRYW5nIGzhu50gxJFpIHRoYW0gY2hp4bq/dSBt4buBbSB0aOG7q2EgJXMiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAixJFhbmcgbOG7nSDEkWkgdGhhbSBjaGnhur91IGjhu49uZyAlcyIKKworIzogcmVmcy5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58g4oCcJXPigJ0gxJHhu4MgZ2hpOiAlcyIKKworIzogcmVmcy5jOjgxNCByZWZzLmM6ODY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHRoYW0gY2hp4bq/dSDigJwlc+KAnSIKKworIzogcmVmcy5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAidGhhbSBjaGnhur91IOKAnCVz4oCdIMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgcuG7k2kiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgImtow7RuZyBj4bqnbiBJRCDEkeG7kWkgdMaw4bujbmcga2hpIGdoaSDigJwlc+KAnSIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6Mjc5MyBzZXF1ZW5jZXIuYzoyOTk3CisjOiBzZXF1ZW5jZXIuYzozMDExIHNlcXVlbmNlci5jOjMyNjkgc2VxdWVuY2VyLmM6NTE3OSBzdHJidWYuYzoxMTQyCisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHbDoG8g4oCcJXPigJ0iCisKKyM6IHJlZnMuYzo4NjAgc3RyYnVmLmM6MTE0MCB3cmFwcGVyLmM6MTg4IHdyYXBwZXIuYzozNTggYnVpbHRpbi9hbS5jOjcxNAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIGdoaSIKKworIzogcmVmcy5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIGRlbGV0aW5nICclcyciCittc2dzdHIgImfhurdwIElEIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgY+G6p24ga2hpIHjDs2Eg4oCcJXPigJ0iCisKKyM6IHJlZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgaGFzIGdhcCBhZnRlciAlcyIKK21zZ3N0ciAibmjhuq10IGvDvSBjaG8gdGhhbSBjaGnhur91ICVzIGPDsyBraG/huqNuZyB0cuG7kW5nIHNhdSAlcyIKKworIzogcmVmcy5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzIgorbXNnc3RyICJuaOG6rXQga8O9IGNobyB0aGFtIGNoaeG6v3UgJXMga+G6v3QgdGjDumMgYuG6pXQgbmfhu50gdHLDqm4gJXMiCisKKyM6IHJlZnMuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJXMgaXMgZW1wdHkiCittc2dzdHIgIm5o4bqtdCBrw70gY2hvICVzIHRy4buRbmcgcuG7l25nIgorCisjOiByZWZzLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJyVzJyIKK21zZ3N0ciAidOG7qyBjaOG7kWkgY+G6rXAgbmjhuq10IHRoYW0gY2hp4bq/dSB24bubaSB0w6puIHNhaSDigJwlc+KAnSIKKworIzogcmVmcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBkYXRlX3JlZiBmYWlsZWQgZm9yIHJlZiAnJXMnOiAlcyIKK21zZ3N0ciAidXBkYXRlX3JlZiBi4buLIGzhu5dpIGNobyByZWYg4oCcJXPigJ06ICVzIgorCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAia2jDtG5nIGNobyBwaMOpcCDEkWEgY+G6rXAgbmjhuq10IGNobyB0aGFtIGNoaeG6v3Ug4oCcJXPigJ0iCisKKyM6IHJlZnMuYzoyMDU1Cittc2dpZCAicmVmIHVwZGF0ZXMgZm9yYmlkZGVuIGluc2lkZSBxdWFyYW50aW5lIGVudmlyb25tZW50IgorbXNnc3RyICJj4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IGLhu4sgY+G6pW0gdHJvbmcgbcO0aSB0csaw4budbmcga2nhu4NtIHRyYSIKKworIzogcmVmcy5jOjIxNTEgcmVmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi4oCcJXPigJ0gc+G6tW4gY8OzOyBraMO0bmcgdGjhu4MgdOG6oW8g4oCcJXPigJ0iCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjhu60gbMO9IOKAnCVz4oCdIHbDoCDigJwlc+KAnSBjw7luZyBt4buZdCBsw7pjIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ+G7oSBi4buPIHRoYW0gY2hp4bq/dTogJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDggcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjDs2EgYuG7jyB0aGFtIGNoaeG6v3UgJXM6ICVzIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjUxIHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB4w7NhIGLhu48gdGhhbSBjaGnhur91OiAlcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAicmVmc3BlYyBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogcmVmLWZpbHRlci5jOjQyIHd0LXN0YXR1cy5jOjE5MzgKK21zZ2lkICJnb25lIgorbXNnc3RyICLEkcOjIHJhIMSRaSIKKworIzogcmVmLWZpbHRlci5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkIgorbXNnc3RyICJwaMOtYSB0csaw4bubYyAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJlaGluZCAlZCIKK21zZ3N0ciAixJHhurFuZyBzYXUgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICJ0csaw4bubYyAlZCwgc2F1ICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgImPhuqduIMSR4buLbmggZOG6oW5nOiAlJShjb2xvcjo8Y29sb3I+KSIKKworIzogcmVmLWZpbHRlci5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgY29sb3I6ICUlKGNvbG9yOiVzKSIKK21zZ3N0ciAia2jDtG5nIG5o4bqtbiByYSBtw6B1OiAlJShtw6B1OiVzKSIKKworIzogcmVmLWZpbHRlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6bHN0cmlwPSVzIgorbXNnc3RyICJHacOhIHRy4buLIG5ndXnDqm4gY+G6p24gdMOqbiB0aGFtIGNoaeG6v3U6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgIkdpw6EgdHLhu4sgbmd1ecOqbiBj4bqnbiB0w6puIHRoYW0gY2hp4bq/dTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIsSR4buRaSBz4buRIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uICUlKCVzKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUob2JqZWN0dHlwZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKG9iamVjdHR5cGUpIGtow7RuZyBuaOG6rW4gY8OhYyDEkeG7kWkgc+G7kSIKKworIzogcmVmLWZpbHRlci5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJ0aGFtIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4gJSUob2JqZWN0bmFtZSk6ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGRlbHRhYmFzZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGRlbHRhYmFzZSkga2jDtG5nIG5o4bqtbiBjw6FjIMSR4buRaSBz4buRIgorCisjOiByZWYtZmlsdGVyLmM6MjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKGJvZHkpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShib2R5KSBraMO0bmcgbmjhuq1uIGPDoWMgxJHhu5FpIHPhu5EiCisKKyM6IHJlZi1maWx0ZXIuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoc3ViamVjdCkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKHN1YmplY3QpIGtow7RuZyBuaOG6rW4gY8OhYyDEkeG7kWkgc+G7kSIKKworIzogcmVmLWZpbHRlci5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duICUlKHRyYWlsZXJzKSBhcmd1bWVudDogJXMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgdGhhbSBz4buRICUlKHRyYWlsZXJzKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgY29udGVudHM6bGluZXM9JXMiCittc2dzdHIgImPhuqduIG7hu5lpIGR1bmcgbWFuZyBnacOhIHRy4buLIGTGsMahbmc6bGluZXM9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGNvbnRlbnRzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIsSR4buRaSBz4buRIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uICUlKGNvbnRlbnRzKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAiY+G6p24gbuG7mWkgZHVuZyBtYW5nIGdpw6EgdHLhu4sgZMawxqFuZzpzaG90PSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgIsSR4buRaSBz4buRIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uICUlKG9iamVjdG5hbWUpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgImPhuqduIMSR4buLbmggZOG6oW5nOiAlJShhbGlnbjo8d2lkdGg+LDxwb3NpdGlvbj4pIgorCisjOiByZWYtZmlsdGVyLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAiduG7iyB0csOtIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAiY2hp4buBdSBy4buZbmcga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46JXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGFsaWduKSBhcmd1bWVudDogJXMiCittc2dzdHIgIsSR4buRaSBz4buRIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uICUlKGFsaWduKTogJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgd2lkdGggZXhwZWN0ZWQgd2l0aCB0aGUgJSUoYWxpZ24pIGF0b20iCittc2dzdHIgImPhuqduIGdpw6EgdHLhu4sgxJHhu5kgcuG7mW5nIGTGsMahbmcgduG7m2kgbmd1ecOqbiB04butICUlKGFsaWduKSIKKworIzogcmVmLWZpbHRlci5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoaWYpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAixJHhu5FpIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4gJSUoaWYpOiAlcyIKKworIzogcmVmLWZpbHRlci5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAidMOqbiB0csaw4budbmcgZOG7iyBow6xuaDogJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgdMOqbiB0csaw4budbmc6ICUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5LCBidXQgdGhlIGZpZWxkICclLipzJyByZXF1aXJlcyBhY2Nlc3MgdG8gb2JqZWN0IGRhdGEiCittc2dzdHIgIiIKKyJraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBraG8gZ2l0LCBuaMawbmcgdHLGsOG7nW5nIOKAnCUuKnPigJ0gecOqdSBj4bqndSB0cnV5IGPhuq1wIHbDoG8gZOG7ryBsaeG7h3UgIgorIsSR4buRaSB0xrDhu6NuZyIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIsSR4buLbmggZOG6oW5nOiBuZ3V5w6puIHThu60gJSUoaWYpIMSRxrDhu6NjIGTDuW5nIG3DoCBraMO0bmcgY8OzIG5ndXnDqm4gdOG7rSAlJSh0aGVuKSIKKworIzogcmVmLWZpbHRlci5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLEkeG7i25oIGThuqFuZzogbmd1ecOqbiB04butICUlKHRoZW4pIMSRxrDhu6NjIGTDuW5nIG3DoCBraMO0bmcgY8OzIG5ndXnDqm4gdOG7rSAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIsSR4buLbmggZOG6oW5nOiBuZ3V5w6puIHThu60gJSUodGhlbikgxJHGsOG7o2MgZMO5bmcgbmhp4buBdSBoxqFuIG3hu5l0IGzhuqduIgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIGFmdGVyICUlKGVsc2UpIgorbXNnc3RyICLEkeG7i25oIGThuqFuZzogbmd1ecOqbiB04butICUlKHRoZW4pIMSRxrDhu6NjIGTDuW5nIHNhdSAlJShlbHNlKSIKKworIzogcmVmLWZpbHRlci5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLEkeG7i25oIGThuqFuZzogbmd1ecOqbiB04butICUlKGVsc2UpIMSRxrDhu6NjIGTDuW5nIG3DoCBraMO0bmcgY8OzIG5ndXnDqm4gdOG7rSAlJShpZikiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIsSR4buLbmggZOG6oW5nOiBuZ3V5w6puIHThu60gJSUoZWxzZSkgxJHGsOG7o2MgZMO5bmcgbcOgIGtow7RuZyBjw7Mgbmd1ecOqbiB04butICUlKHRoZW4pIgorCisjOiByZWYtZmlsdGVyLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICLEkeG7i25oIGThuqFuZzogbmd1ecOqbiB04butICUlKGVsc2UpIMSRxrDhu6NjIGTDuW5nIG5oaeG7gXUgaMahbiBt4buZdCBs4bqnbiIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICLEkeG7i25oIGThuqFuZzogbmd1ecOqbiB04butICUlKGVuZCkgxJHGsOG7o2MgZMO5bmcgbcOgIGtow7RuZyBjw7Mgbmd1ecOqbiB04butIHTGsMahbmcg4bupbmciCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgImNodeG7l2kgxJHhu4tuaCBk4bqhbmcgZOG7iyBow6xuaCAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAia2jDtG5nIG5ow6FuaCwgxJFhbmcgY+G6o2kgdOG7lSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICJraMO0bmcgbmjDoW5oLCDEkWFuZyBj4bqjaSB04buVIEhFQUQgJXMgxJHDoyB0w6FjaCBy4budaSIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAia2jDtG5nIG5ow6FuaCwgZGkgY2h1eeG7g24gbuG7rWEgYsaw4bubYyDEkcaw4bujYyBi4bqvdCDEkeG6p3UgdOG6oWkgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNTA0Cittc2dpZCAibm8gYnJhbmNoIgorbXNnc3RyICJraMO0bmcgbmjDoW5oIgorCisjOiByZWYtZmlsdGVyLmM6MTU0MCByZWYtZmlsdGVyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgInRoaeG6v3UgxJHhu5FpIHTGsOG7o25nICVzIGNobyAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICJwYXJzZV9vYmplY3RfYnVmZmVyIGfhurdwIGzhu5dpIHRyw6puICVzIGNobyAlcyIKKworIzogcmVmLWZpbHRlci5jOjIwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgZOG7iyBow6xuaCB04bqhaSDigJwlc+KAnSIKKworIzogcmVmLWZpbHRlci5jOjIwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiCittc2dzdHIgIsSRYW5nIGzhu50gxJFpIHRoYW0gY2hp4bq/dSB24bubaSB0w6puIGjhu49uZyAlcyIKKworIzogcmVmLWZpbHRlci5jOjIzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmc6IHRoaeG6v3Ugbmd1ecOqbiB04butICUlKGVuZCkiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlc+KAnSBsw6AgeHVuZyBraOG6r2MgduG7m2kgdMO5eSBjaOG7jW4gLS1tZXJnZWQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbm8tbWVyZ2VkIgorbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlc+KAnSBsw6AgeHVuZyBraOG6r2MgduG7m2kgdMO5eSBjaOG7jW4gLS1uby1tZXJnZWQiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAidMOqbiDEkeG7kWkgdMaw4bujbmcgZOG7iyBow6xuaCAlcyIKKworIzogcmVmLWZpbHRlci5jOjI1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAidMO5eSBjaOG7jW4g4oCcJXPigJ0gcGjhuqNpIGNo4buJIMSR4bq/biBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiByZW1vdGUuYzozNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlnIHJlbW90ZSBzaG9ydGhhbmQgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAiY+G6pXUgaMOsbmggdmnhur90IHThuq90IG3DoXkgY2jhu6cga2jDtG5nIHRo4buDIGLhuq90IMSR4bqndSBi4bqxbmcg4oCcL+KAnTogJXMiCisKKyM6IHJlbW90ZS5jOjQxMworbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAixJHDoyDEkcawYSByYSBuaGnhu4F1IGjGoW4gbeG7mXQgZ8OzaSBuaOG6rW4gduG7gSwgxJFhbmcgc+G7rSBk4bulbmcgY8OhaSDEkeG6p3UgdGnDqm4iCisKKyM6IHJlbW90ZS5jOjQyMQorbXNnaWQgIm1vcmUgdGhhbiBvbmUgdXBsb2FkcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IgorbXNnc3RyICLEkcOjIMSRxrBhIHJhIG5oaeG7gXUgaMahbiBt4buZdCBnw7NpIHThuqNpIGzDqm4sIMSRYW5nIHPhu60gZOG7pW5nIGPDoWkgxJHhuqd1IHRpw6puIgorCisjOiByZW1vdGUuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgduG7gSBj4bqjICVzIHbDoCAlcyBjaG8gJXMiCisKKyM6IHJlbW90ZS5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIlcyB0aMaw4budbmcgdGhlbyBkw7VpICVzLCBraMO0bmcgcGjhuqNpICVzIgorCisjOiByZW1vdGUuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyB0aGVvIGTDtWkgY+G6oyAlcyB2w6AgJXMiCisKKyM6IHJlbW90ZS5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgJyVzJyBvZiBwYXR0ZXJuIGhhZCBubyAnKiciCittc2dzdHIgImtow7NhIOKAnCVz4oCdIGPhu6dhIG3huqt1IGsgY8OzIOKAnCrigJ0iCisKKyM6IHJlbW90ZS5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICJ2YWx1ZSAnJXMnIG9mIHBhdHRlcm4gaGFzIG5vICcqJyIKK21zZ3N0ciAiZ2nDoSB0cuG7iyDigJwlc+KAnSBj4bunYSBt4bqrdSBrIGPDsyDigJwq4oCdIgorCisjOiByZW1vdGUuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueSIKK21zZ3N0ciAicmVmc3BlYyAlcyBuZ3Xhu5NuIGtow7RuZyBraOG7m3AgYuG6pXQga+G7syBjw6FpIGfDrCIKKworIzogcmVtb3RlLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgInJlZnNwZWMgJXMgbmd14buTbiBraOG7m3Agbmhp4buBdSBoxqFuIG3hu5l0IgorCisjLiBUUkFOU0xBVE9SUzogIm1hdGNoZXMgJyVzJyUiIGlzIHRoZSA8ZHN0PiBwYXJ0IG9mICJnaXQgcHVzaAorIy4gPHJlbW90ZT4gPHNyYz46PGRzdD4iIHB1c2gsIGFuZCAiYmVpbmcgcHVzaGVkICgnJXMnKSIgaXMKKyMuIHRoZSA8c3JjPi4KKyMuCisjOiByZW1vdGUuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZGVzdGluYXRpb24geW91IHByb3ZpZGVkIGlzIG5vdCBhIGZ1bGwgcmVmbmFtZSAoaS5lLixcbiIKKyJzdGFydGluZyB3aXRoIFwicmVmcy9cIikuIFdlIHRyaWVkIHRvIGd1ZXNzIHdoYXQgeW91IG1lYW50IGJ5OlxuIgorIlxuIgorIi0gTG9va2luZyBmb3IgYSByZWYgdGhhdCBtYXRjaGVzICclcycgb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIi0gQ2hlY2tpbmcgaWYgdGhlIDxzcmM+IGJlaW5nIHB1c2hlZCAoJyVzJylcbiIKKyIgIGlzIGEgcmVmIGluIFwicmVmcy97aGVhZHMsdGFnc30vXCIuIElmIHNvIHdlIGFkZCBhIGNvcnJlc3BvbmRpbmdcbiIKKyIgIHJlZnMve2hlYWRzLHRhZ3N9LyBwcmVmaXggb24gdGhlIHJlbW90ZSBzaWRlLlxuIgorIlxuIgorIk5laXRoZXIgd29ya2VkLCBzbyB3ZSBnYXZlIHVwLiBZb3UgbXVzdCBmdWxseSBxdWFsaWZ5IHRoZSByZWYuIgorbXNnc3RyICIiCisixJDDrWNoIGLhuqFuIMSRw6MgY3VuZyBj4bqlcCBraMO0bmcgcGjhuqNpIHTDqm4gdGhhbSBjaGnhur91IMSR4bqneSDEkeG7pyAodOG7qWMgbMOgXG4iCisiYuG6r3QgxJHhuqd1IGLhurFuZyBcInJlZnMvXCIpLiBDaMO6bmcgdMO0aSDEkcOjIGPhu5Egc3V5IGx14bqtbiBy4bqxbmcgw70gY+G7p2EgYuG6oW4gbMOgOlxuIgorIlxuIgorIi0gVMOsbSBraeG6v20gbeG7mXQgdGhhbSBjaGnhur91IG3DoCBuw7Mga2jhu5twIOKAnCVz4oCdIGLDqm4gcGjDrWEgbcOheSBjaOG7py5cbiIKKyItIEtp4buDbSB0cmEgeGVtIDxzcmM+IMSRxrDhu6NjIMSR4bqpeSBsw6puICjigJwlc+KAnSlcbiIKKyIgIGzDoCBt4buZdCB0aGFtIGNoaeG6v3UgdHJvbmcgXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gTuG6v3UgdGjhur8gY2jDum5nIHTDtGkgdGjDqm0gbeG7mXQgIgorInRp4buBbiB04buRXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gdMawxqFuZyDhu6luZyBiw6puIHBow61hIG3DoXkgY2jhu6cuXG4iCisiXG4iCisiTuG6v3UgY+G6oyBoYWkgbMOgIGtow7RuZyB0aOG7gywgdGjDrCBjaMO6bmcgdMO0aSBjxaluZyBjaOG7i3UgdGh1YS4gQuG6oW4gcGjhuqNpIGTDuW5nIHRoYW0gIgorImNoaeG6v3UgZOG6oW5nIMSR4bqneSDEkeG7py4iCisKKyM6IHJlbW90ZS5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgY29tbWl0IG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnPyIKK21zZ3N0ciAiIgorIlBo4bqnbiA8c3JjPiBj4bunYSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gbMOgIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBs4bqnbiBjaHV54buDbiBnaWFvLlxuIgorIkPDsyBwaOG6o2kgw70gYuG6oW4gbMOgIG3hu5l0IHThuqFvIG3hu5l0IG5ow6FuaCBt4bubaSBi4bqxbmcgY8OhY2ggxJHhuql5IGzDqm5cbiIKKyLigJwlczpyZWZzL2hlYWRzLyVz4oCdPyIKKworIzogcmVtb3RlLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyJQaOG6p24gPHNyYz4gY+G7p2EgxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIGzDoCBt4buZdCDEkeG7kWkgdMaw4bujbmcgdGjhursuXG4iCisiQ8OzIHBo4bqjaSDDvSBi4bqhbiBsw6AgbeG7mXQgdOG6oW8gbeG7mXQgdGjhursgbeG7m2kgYuG6sW5nIGPDoWNoIMSR4bqpeSBsw6puXG4iCisi4oCcJXM6cmVmcy90YWdzLyVz4oCdPyIKKworIzogcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIlBo4bqnbiA8c3JjPiBj4bunYSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gbMOgIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBjw6J5LlxuIgorIkPDsyBwaOG6o2kgw70gYuG6oW4gbMOgIG3hu5l0IHThuqFvIG3hu5l0IGPDonkgbeG7m2kgYuG6sW5nIGPDoWNoIMSR4bqpeSBsw6puXG4iCisi4oCcJXM6cmVmcy90YWdzLyVz4oCdPyIKKworIzogcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBibG9iIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IGJsb2IgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIlBo4bqnbiA8c3JjPiBj4bunYSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gbMOgIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBibG9iLlxuIgorIkPDsyBwaOG6o2kgw70gYuG6oW4gbMOgIG3hu5l0IHThuqFvIG3hu5l0IGJsb2IgbeG7m2kgYuG6sW5nIGPDoWNoIMSR4bqpeSBsw6puXG4iCisi4oCcJXM6cmVmcy90YWdzLyVz4oCdPyIKKworIzogcmVtb3RlLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYnJhbmNoIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgcGjDom4gZ2nhuqNpIHRow6BuaCBuaMOhbmgiCisKKyM6IHJlbW90ZS5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgeMOzYSDigJwlc+KAnTogdGhhbSBjaGnhur91IHRyw6puIG3DoXkgY2jhu6cga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiByZW1vdGUuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAiZHN0IHJlZnNwZWMgJXMga2jhu5twIG5oaeG7gXUgaMahbiBt4buZdCIKKworIzogcmVtb3RlLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgImRzdCByZWYgJXMgbmjhuq1uIHThu6sgaMahbiBt4buZdCBuZ3Xhu5NuIgorCisjOiByZW1vdGUuYzoxNjI3IHJlbW90ZS5jOjE3MjgKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIGtow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbmjDoW5oIG7DoG8gY+G6oyIKKworIzogcmVtb3RlLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAia2jDtG5nIGPDsyBuaMOhbmggbsOgbyBuaMawIHRo4bq/OiDigJwlc+KAnSIKKworIzogcmVtb3RlLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAia2jDtG5nIGPDsyB0aMaw4bujbmcgbmd14buTbiDEkcaw4bujYyBj4bqldSBow6xuaCBjaG8gbmjDoW5oIOKAnCVz4oCdIgorCisjOiByZW1vdGUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisibmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyBsxrB1IGzhuqFpIG5oxrAgbMOgIG3hu5l0IG5ow6FuaCB0aGVvIGTDtWkgbcOheSBjaOG7pyIKKworIzogcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAixJHhuql5IGzDqm4gxJHDrWNoIOKAnCVz4oCdIHRyw6puIG3DoXkgY2jhu6cg4oCcJXPigJ0ga2jDtG5nIGPDsyBuaMOhbmggdGhlbyBkw7VpIG7hu5lpIGLhu5kiCisKKyM6IHJlbW90ZS5jOjE2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAibmjDoW5oIOKAnCVz4oCdIGtow7RuZyBjw7MgbcOheSBjaOG7pyDEkeG7gyDEkeG6qXkgbMOqbiIKKworIzogcmVtb3RlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIsSR4bqpeSByZWZzcGVjcyBjaG8g4oCcJXPigJ0ga2jDtG5nIGJhbyBn4buTbSDigJwlc+KAnSIKKworIzogcmVtb3RlLmM6MTY5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAixJHhuql5IGzDqm4gbcOgIGtow7RuZyBjw7MgxJHDrWNoIChwdXNoLmRlZmF1bHQgbMOgIOKAnG5vdGhpbmfigJ0pIgorCisjOiByZW1vdGUuYzoxNzE3Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSDEkeG6qXkg4oCcxJHGoW4gZ2nhuqNu4oCdIMSR4bq/biBt4buZdCDEkcOtY2ggxJHGoW4iCisKKyM6IHJlbW90ZS5jOjE4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgdGhhbSBjaGnhur91IG3DoXkgY2jhu6cgJXMiCisKKyM6IHJlbW90ZS5jOjE4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiBJZ25vcmluZyBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IgorbXNnc3RyICIqIMSQYW5nIGLhu48gcXVhIHRoYW0gY2hp4bq/dSB0aMO6IHbhu4sgbuG7mWkgYuG7mSDigJwlc+KAnSIKKworIzogcmVtb3RlLmM6MjAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiYXNlZCBvbiAnJXMnLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuXG4iCittc2dzdHIgIiIKKyJOaMOhbmggY+G7p2EgYuG6oW4gZOG7sWEgdHLDqm4gY8ahIHPhu58gbMOgIOKAnCVz4oCdLCBuaMawbmcgdHLDqm4gdGjGsOG7o25nIG5ndeG7k24ga2jDtG5nIGPDsm4uXG4iCisKKyM6IHJlbW90ZS5jOjIwMjMKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAgKGTDuW5nIFwiIGdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIMSR4buDIHPhu61hKVxuIgorCisjOiByZW1vdGUuYzoyMDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICJOaMOhbmggY+G7p2EgYuG6oW4gxJHDoyBj4bqtcCBuaOG6rXQgduG7m2kg4oCcJXPigJ0uXG4iCisKKyM6IHJlbW90ZS5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggYW5kICclcycgcmVmZXIgdG8gZGlmZmVyZW50IGNvbW1pdHMuXG4iCittc2dzdHIgIk5ow6FuaCBj4bunYSBi4bqhbiB2w6Ag4oCcJXPigJ0gdGhhbSBjaGnhur91IMSR4bq/biBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8ga2jDoWMgbmhhdS5cbiIKKworIzogcmVtb3RlLmM6MjAzMworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCIlc1wiIGZvciBkZXRhaWxzKVxuIgorbXNnc3RyICIgIChkw7luZyBcIiVzXCIgxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QpXG4iCisKKyM6IHJlbW90ZS5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAiTmjDoW5oIGPhu6dhIGLhuqFuIMSR4bupbmcgdHLGsOG7m2Mg4oCcJXPigJ0gJWQgbOG6p24gY2h1eeG7g24gZ2lhby5cbiIKKworIzogcmVtb3RlLmM6MjA0MworbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IHB1c2hcIiDEkeG7gyB4deG6pXQgYuG6o24gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4pXG4iCisKKyM6IHJlbW90ZS5jOjIwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorIk5ow6FuaCBj4bunYSBi4bqhbiDEkeG7qW5nIMSR4bqxbmcgc2F1IOKAnCVz4oCdICVkIGzhuqduIGNodXnhu4NuIGdpYW8sIHbDoCBjw7MgdGjhu4MgxJHGsOG7o2MgY2h1eeG7g24tIgorInRp4bq/cC1uaGFuaC5cbiIKKworIzogcmVtb3RlLmM6MjA1NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBwdWxsXCIgxJHhu4MgY+G6rXAgbmjhuq10IG5ow6FuaCBu4buZaSBi4buZIGPhu6dhIGLhuqFuKVxuIgorCisjOiByZW1vdGUuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorIk5ow6FuaCBj4bunYSBi4bqhbiB2w6Ag4oCcJXPigJ0gYuG7iyBwaMOibiBr4buzLFxuIgorInbDoCBjw7MgJWQgdsOgICVkIGzhuqduIGNodXnhu4NuIGdpYW8ga2jDoWMgbmhhdSBjaG8gdOG7q25nIGPDoWksXG4iCisidMawxqFuZyDhu6luZyB24bubaSBt4buXaSBs4bqnbi5cbiIKKworIzogcmVtb3RlLmM6MjA2NworbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IHB1bGxcIiDEkeG7gyBow7JhIHRy4buZbiBuaMOhbmggdHLDqm4gbcOheSBjaOG7pyB2w6BvIHRyb25nIG5ow6FuaCBj4bunYSAiCisiYuG6oW4pXG4iCisKKyM6IHJlbW90ZS5jOjIyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHBhcnNlIGV4cGVjdGVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCB0w6puIMSR4buRaSB0xrDhu6NuZyBtb25nIG114buRbiDigJwlc+KAnSIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgInTDqm4gdGhhbSBjaGnhur91IHRoYXkgdGjhur8gYuG7iyBzYWk6ICVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSByZXBsYWNlIHJlZjogJXMiCittc2dzdHIgInRoYW0gY2hp4bq/dSB0aGF5IHRo4bq/IGLhu4sgdHLDuW5nOiAlcyIKKworIzogcmVwbGFjZS1vYmplY3QuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiCittc2dzdHIgIsSR4buZIHPDonUgdGhheSB0aOG6vyBxdcOhIGNhbyBjaG8gxJHhu5FpIHTGsOG7o25nICVzIgorCisjOiByZXJlcmUuYzoyMTcgcmVyZXJlLmM6MjI2IHJlcmVyZS5jOjIyOQorbXNnaWQgImNvcnJ1cHQgTUVSR0VfUlIiCittc2dzdHIgIk1FUkdFX1JSIHNhaSBo4buPbmciCisKKyM6IHJlcmVyZS5jOjI2NCByZXJlcmUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVyZXJlIHJlY29yZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSBi4bqjbiBnaGkgcmVyZXJlIgorCisjOiByZXJlcmUuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlcmUgd2VyZSBlcnJvcnMgd2hpbGUgd3JpdGluZyAnJXMnICglcykiCittc2dzdHIgImfhurdwIGzhu5dpIMSR4buNYyBraGkgxJFhbmcgZ2hpIOKAnCVz4oCdICglcykiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4bqpeSBk4buvIGxp4buHdSDigJwlc+KAnSBsw6puIMSRxKlhIgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDoWMgbeG6o25oIHh1bmcgxJHhu5l0IHRyb25nIOKAnCVz4oCdIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgdXRpbWUoKSB0csOqbiDigJwlc+KAnSIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkWFuZyBnaGkg4oCcJXPigJ0iCisKKyM6IHJlcmVyZS5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLiIKK21zZ3N0ciAixJDDoyB04bqhbSBj4bqldCDigJwlc+KAnSBz4butIGThu6VuZyBjw6FjaCBwaMOibiBnaeG6o2kga+G6vyB0csaw4bubYy4iCisKKyM6IHJlcmVyZS5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCByZXNvbHV0aW9uIGZvciAnJXMnLiIKK21zZ3N0ciAiQ8OhY2ggZ2nhuqNpIHF1eeG6v3QgxJHDoyBnaGkgbOG6oWkgY2hvIOKAnCVz4oCdLiIKKworIzogcmVyZXJlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIsSQw6MgcGjDom4gZ2nhuqNpIGdp4bqjaSDigJwlc+KAnSBz4butIGThu6VuZyBjw6FjaCBnaeG6o2kgcXV54bq/dCBr4bq/IHRyxrDhu5tjLiIKKworIzogcmVyZXJlLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgc3RyYXkgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHVubGluayBzdHJheSDigJwlc+KAnSIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICJQcmVpbWFnZSDEkcOjIMSRxrDhu6NjIGdoaSBs4bqhaSBjaG8g4oCcJXPigJ0iCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDY3IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHRoxrAgbeG7pWMg4oCcJXPigJ0iCisKKyM6IHJlcmVyZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBjaOG6oXkgY+G6rXAgbmjhuq10IHRy4bqhbmcgdGjDoWkgYuG7iyB4dW5nIMSR4buZdCB0cm9uZyDigJwlc+KAnSIKKworIzogcmVyZXJlLmM6MTA2OCByZXJlcmUuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJyVzJyIKK21zZ3N0ciAixJHhu6tuZyBuaMOzIGPDoWMgZ2nhuqNpIHF1eeG6v3QgY2hvIOKAnCVz4oCdIgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHVubGluayDigJwlc+KAnSIKKworIzogcmVyZXJlLmM6MTA4NworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICLEkMOjIGPhuq1wIG5o4bqtdCBwcmVpbWFnZSBjaG8g4oCcJXPigJ0iCisKKyM6IHJlcmVyZS5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRm9yZ290IHJlc29sdXRpb24gZm9yICclcydcbiIKK21zZ3N0ciAiUXXDqm4gcGjDom4gZ2nhuqNpIGNobyDigJwlc+KAnVxuIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyB0aMawIG3hu6VjIHJyLWNhY2hlIgorCisjOiByZXZpc2lvbi5jOjI0OTcKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoIGFwcGVhcnMgdG8gYmUgYnJva2VuIgorbXNnc3RyICJuaMOhbmggaGnhu4duIHThuqFpIGPhu6dhIGLhuqFuIGPDsyB24bq7IG5oxrAgYuG7iyBo4buPbmciCisKKyM6IHJldmlzaW9uLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgIm5ow6FuaCBoaeG7h24gdOG6oWkgY+G7p2EgYuG6oW4g4oCcJXPigJ0ga2jDtG5nIGPDsyBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gY+G6oyIKKworIzogcmV2aXNpb24uYzoyNzA4Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IHh1bmcga2jhuq9jIHbhu5tpIC0tYmlzZWN0IgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIi1MIHbhuqtuIGNoxrBhIGjhu5cgdHLhu6MgxJHhu4tuaCBk4bqhbmcga2jDoWMgYmnhu4d0IG7DoG8gbmdvw6BpIC1wIHbDoCAtcyIKKworIzogcnVuLWNvbW1hbmQuYzo3NjIKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBt4bufIOKAnC9kZXYvbnVsbOKAnSIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHR1eeG6v24gYXN5bmM6ICVzIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKyJNw7NjIOKAnCVz4oCdIGLhu4sgYuG7jyBxdWEgYuG7n2kgdsOsIG7DsyBraMO0bmcgdGjhu4MgxJHhurd0IGzDoCB0aOG7sWMgdGhpIMSRxrDhu6NjLlxuIgorIkLhuqFuIGPDsyB0aOG7gyB04bqvdCBj4bqjbmggYsOhbyBuw6B5IGLhurFuZyDigJxnaXQgY29uZmlnIGFkdmljZS5pZ25vcmVkSG9vayBmYWxzZeKAnC4iCisKKyM6IHNlbmQtcGFjay5jOjE0NAorbXNnaWQgInVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0IHdoaWxlIHJlYWRpbmcgcmVtb3RlIHVucGFjayBzdGF0dXMiCittc2dzdHIgIiIKKyJn4bq3cCBnw7NpIGZsdXNoIGtow7RuZyBj4bqnbiB0cm9uZyBraGkgxJHhu41jIHTDrG5oIHRy4bqhbmcgZ2nhuqNpIG7DqW4gZ8OzaSB0csOqbiBtw6F5IGNo4bunIgorCisjOiBzZW5kLXBhY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHJlbW90ZSB1bnBhY2sgc3RhdHVzOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIHTDrG5oIHRy4bqhbmcgdW5wYWNrIG3DoXkgY2jhu6c6ICVzIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICJtw6F5IGNo4bunIGfhurdwIGzhu5dpIHVucGFjazogJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkga8O9IGNo4bupbmcgdGjhu7FjIMSR4bqpeSIKKworIzogc2VuZC1wYWNrLmM6NDIzCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICJr4bq/dCB0aMO6YyBuaOG6rW4ga2jDtG5nIGjhu5cgdHLhu6MgxJHhuql5IC0tc2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MjUKK21zZ2lkICIiCisibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS0iCisic2lnbmVkIHB1c2giCittc2dzdHIgIiIKKyLEkeG7q25nIGfhu61pIGdp4bqleSBjaOG7qW5nIG5o4bqtbiDEkeG6qXkgdHLGsOG7m2Mga2hpIGvhur90IHRow7pjIG5o4bqtbiBraMO0bmcgaOG7lyB0cuG7oyDEkeG6qXkgLS0iCisic2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MzcKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgImvhur90IHRow7pjIG5o4bqtbiBraMO0bmcgaOG7lyB0cuG7oyDEkeG6qXkgLS1hdG9taWMiCisKKyM6IHNlbmQtcGFjay5jOjQ0MgorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICJr4bq/dCB0aMO6YyBuaOG6rW4ga2jDtG5nIGjhu5cgdHLhu6MgY8OhYyB0w7l5IGNo4buNbiBj4bunYSBs4buHbmggcHVzaCIKKworIzogc2VxdWVuY2VyLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG1lc3NhZ2UgY2xlYW51cCBtb2RlICclcyciCittc2dzdHIgImNo4bq/IMSR4buZIGThu41uIGThurlwIGdoaSBjaMO6IGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjDs2EgYuG7jyDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MzEzIGJ1aWx0aW4vcmViYXNlLmM6NzgxIGJ1aWx0aW4vcmViYXNlLmM6MTcwNiBidWlsdGluL3JtLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGfhu6EgYuG7jyDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MzIzCittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJob8OgbiBuZ3V5w6puIgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgInJlYmFzZSAtaSIKK21zZ3N0ciAicmViYXNlIC1pIgorCisjOiBzZXF1ZW5jZXIuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBhY3Rpb246ICVkIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIHRoYW8gdMOhYzogJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4NworbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisic2F1IGtoaSBnaeG6o2kgcXV54bq/dCBjw6FjIHh1bmcgxJHhu5l0LCDEkcOhbmggZOG6pXUgxJHGsOG7nW5nIGThuqtuIMSRw6Mgc+G7rWFcbiIKKyJ24bubaSBs4buHbmgg4oCcZ2l0IGFkZCA8L2PDoWMvxJHGsOG7nW5nL2ThuqtuPuKAnSBob+G6t2Mg4oCcZ2l0IHJtIDwvY8OhYy/Ekcaw4budbmcvZOG6q24+4oCdIgorCisjOiBzZXF1ZW5jZXIuYzozOTAKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorInNhdSBraGkgZ2nhuqNpIHF1eeG6v3QgY8OhYyB4dW5nIMSR4buZdCwgxJHDoW5oIGThuqV1IMSRxrDhu51uZyBk4bqrbiDEkcOjIHPhu61hXG4iCisiduG7m2kgbOG7h25oIOKAnGdpdCBhZGQgPC9jw6FjL8SRxrDhu51uZy9k4bqrbj7igJ0gaG/hurdjIOKAnGdpdCBybSA8L2PDoWMvxJHGsOG7nW5nL2ThuqtuPuKAnVxuIgorInbDoCBjaHV54buDbiBnaWFvIGvhur90IHF14bqjIGLhurFuZyBs4buHbmgg4oCcZ2l0IGNvbW1pdOKAnSIKKworIzogc2VxdWVuY2VyLmM6NDAzIHNlcXVlbmNlci5jOjI5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGtow7NhIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIGVvbCB2w6BvIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo0MTUgc2VxdWVuY2VyLmM6Mjc5OCBzZXF1ZW5jZXIuYzoyOTk5IHNlcXVlbmNlci5jOjMwMTMKKyM6IHNlcXVlbmNlci5jOjMyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBob8OgbiB0aMOgbmgg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjQzOCBzZXF1ZW5jZXIuYzoxNzA3IHNlcXVlbmNlci5jOjI4MTggc2VxdWVuY2VyLmM6MzI1OQorIzogc2VxdWVuY2VyLmM6MzM2OCBidWlsdGluL2FtLmM6MjQ0IGJ1aWx0aW4vY29tbWl0LmM6NzgzIGJ1aWx0aW4vbWVyZ2UuYzoxMTE3CisjOiBidWlsdGluL3JlYmFzZS5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIKK21zZ3N0ciAiY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIGPhu6dhIGLhuqFuIGPDsyB0aOG7gyBi4buLIGdoaSDEkcOoIGLhu59pIGzhu4duaCAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjQ2OAorbXNnaWQgImNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiY2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpIGPhu6dhIGLhuqFuIGhheSB04bqhbSBj4bqldCAoc3Rhc2gpIGNow7puZyDEkeG7gyB44butIGzDvS4iCisKKyM6IHNlcXVlbmNlci5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFzdC1mb3J3YXJkIgorbXNnc3RyICIlczogY2h1eeG7g24tdGnhur9wLW5oYW5oIgorCisjOiBzZXF1ZW5jZXIuYzo1MzkgYnVpbHRpbi90YWcuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIkNo4bq/IMSR4buZIGThu41uIGThurlwIGtow7RuZyBo4bujcCBs4buHICVzIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorIy4gInJlYmFzZSAtaSIuCisjLgorIzogc2VxdWVuY2VyLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBLaMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSIKKworIzogc2VxdWVuY2VyLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IGPDonkgYuG7mSBuaOG7myDEkeG7h20iCisKKyM6IHNlcXVlbmNlci5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIGzhuqduIGNodXnhu4NuIGdpYW8gSEVBRCIKKworIzogc2VxdWVuY2VyLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAia2jDtG5nIGPDsyBraMOzYSBoaeG7h24gZGnhu4duIHRyb25nIOKAnCUuKnPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVxdW90ZSB2YWx1ZSBvZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2nhuqNpIHRyw61jaCBk4bqrbiBnacOhIHRy4buLIGPhu6dhIOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo3OTIgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MDUKKyM6IGJ1aWx0aW4vYW0uYzo3OTcgYnVpbHRpbi9tZXJnZS5jOjExMTQgYnVpbHRpbi9yZWJhc2UuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIMSR4buNYyIKKworIzogc2VxdWVuY2VyLmM6ODAyCittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAi4oCcR0lUX0FVVEhPUl9OQU1F4oCdIMSRw6Mgc+G6tW4gxJHGsGEgcmEgcuG7k2kiCisKKyM6IHNlcXVlbmNlci5jOjgwNworbXNnaWQgIidHSVRfQVVUSE9SX0VNQUlMJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICLigJxHSVRfQVVUSE9SX0VNQUlM4oCdIMSRw6Mgc+G6tW4gxJHGsGEgcmEgcuG7k2kiCisKKyM6IHNlcXVlbmNlci5jOjgxMgorbXNnaWQgIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iCittc2dzdHIgIuKAnEdJVF9BVVRIT1JfREFUReKAnSDEkcOjIHPhurVuIMSRxrBhIHJhIHLhu5NpIgorCisjOiBzZXF1ZW5jZXIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGJp4bq/biDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6ODIxCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9OQU1FJyIKK21zZ3N0ciAidGhp4bq/dSDigJxHSVRfQVVUSE9SX05BTUXigJ0iCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIgorbXNnc3RyICJ0aGnhur91IOKAnEdJVF9BVVRIT1JfRU1BSUzigJ0iCisKKyM6IHNlcXVlbmNlci5jOjgyNQorbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciCittc2dzdHIgInRoaeG6v3Ug4oCcR0lUX0FVVEhPUl9EQVRF4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo5MDIgc2VxdWVuY2VyLmM6MTQyNworbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorbXNnc3RyICJ0aOG7pXQgxJHhuqd1IGTDsm5nIGThu4sgaMOsbmgiCisKKyM6IHNlcXVlbmNlci5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiYuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgc28gduG7m2kgdHJvbmcgYuG7hyBwaMOzbmcgdHJvbmcgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBj4bunYSBi4bqhbi5cbiIKKyJO4bq/dSBjw6FjIHRoYXkgxJHhu5VpIG7DoHkgbMOgIG114buRbiBzcXVhc2ggdsOgbyBs4bqnbiBjaHV54buDbiBnaWFvIGvhur8gdHLGsOG7m2MsIGNo4bqheTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk7hur91IGNow7puZyBjw7Mgw70gbMOgIMSRaSDEkeG6v24gbOG6p24gY2h1eeG7g24gZ2lhbyBt4bubaSwgdGjDrCBjaOG6oXk6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiVHJvbmcgY+G6oyBoYWkgdHLGsOG7nW5nIGjhu6NwLCBt4buZdCBraGkgYuG6oW4gbMOgbSB4b25nLCB0aeG6v3AgdOG7pWMgYuG6sW5nOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyMTgKK21zZ2lkICIncHJlcGFyZS1jb21taXQtbXNnJyBob29rIGZhaWxlZCIKK21zZ3N0ciAibcOzYyDigJxwcmVwYXJlLWNvbW1pdC1tc2figJ0gYuG7iyBs4buXaSIKKworIzogc2VxdWVuY2VyLmM6MTIyNAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIlTDqm4gdsOgIMSR4buLYSBjaOG7iSB0aMawIMSRaeG7h24gdOG7rSBj4bunYSBi4bqhbiDEkcaw4bujYyBj4bqldSBow6xuaCBt4buZdCBjw6FjaCB04buxIMSR4buZbmcgdHLDqm4gY8ahICIKKyJz4bufXG4iCisidMOgaSBraG/huqNuIHbDoCDEkeG7i2EgY2jhu4kgbcOheSBjaOG7pyBj4bunYSBi4bqhbi4gWGluIGjDo3kga2nhu4NtIHRyYSB4ZW0gY2jDum5nIGPDsyBjaMOtbmggIgorInjDoWMga2jDtG5nLlxuIgorIkLhuqFuIGPDsyB0aOG7gyBjaOG6t24gbmjhu69uZyB0aMO0bmcgYsOhbyBraeG7g3UgbsOgeSBi4bqxbmcgY8OhY2ggY8OgaSDEkeG6t3QgY8OhYyB0aMO0bmcgdGluICIKKyJ0csOqblxuIgorIm3hu5l0IGPDoWNoIHLDtSByw6BuZy4gQ2jhuqF5IGzhu4duaCBzYXUgxJHDonkgbMOgIHRoZW8gY8OhYyBoxrDhu5tuZyBk4bqrbiB0cm9uZyBi4buZIHNv4bqhbiAiCisidGjhuqNvXG4iCisixJHhu4MgY2jhu4luaCBz4butYSB04bqtcCB0aW4gY+G6pXUgaMOsbmggY+G7p2EgbcOsbmg6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiU2F1IGtoaSB0aOG7sWMgaGnhu4duIHhvbmcsIGLhuqFuIGPDsyB0aOG7gyBz4butYSBjaOG7r2EgxJHhu4tuaCBkYW5oIMSRxrDhu6NjIHPhu60gZOG7pW5nIGNob1xuIgorImzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB24bubaSBs4buHbmg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjM3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVMOqbiB2w6AgxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIGPhu6dhIGLhuqFuIMSRxrDhu6NjIGPhuqV1IGjDrG5oIG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZyB0csOqbiBjxqEgIgorInPhu59cbiIKKyJ0w6BpIGtob+G6o24gdsOgIMSR4buLYSBjaOG7iSBtw6F5IGNo4bunIGPhu6dhIGLhuqFuLiBYaW4gaMOjeSBraeG7g20gdHJhIHhlbSBjaMO6bmcgY8OzIGNow61uaCAiCisieMOhYyBraMO0bmcuXG4iCisiQuG6oW4gY8OzIHRo4buDIGNo4bq3biBuaOG7r25nIHRow7RuZyBiw6FvIGtp4buDdSBuw6B5IGLhurFuZyBjw6FjaCBjw6BpIMSR4bq3dCBjw6FjIHRow7RuZyB0aW4gIgorInRyw6puIG3hu5l0IGPDoWNoIHLDtSByw6BuZzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJUw6puIGPhu6dhIGLhuqFuXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIlNhdSBraGkgdGjhu7FjIGhp4buHbiB4b25nLCBi4bqhbiBjw7MgdGjhu4Mgc+G7rWEgY2jhu69hIMSR4buLbmggZGFuaCDEkcaw4bujYyBz4butIGThu6VuZyBjaG8gbOG6p24gIgorImNodXnhu4NuIGdpYW8gbsOgeSB24bubaSBs4buHbmg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjc5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGzhuqduIGNodXnhu4NuIGdpYW8gbeG7m2kgaMahbiDEkcOjIMSRxrDhu6NjIHThuqFvIgorCisjOiBzZXF1ZW5jZXIuYzoxMjgxCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCBj4bunYSDEkeG7kWkgdMaw4bujbmcgY2h1eeG7g24gZ2lhbyBt4bubaSBoxqFuIMSRw6MgxJHGsOG7o2MgdOG6oW8iCisKKyM6IHNlcXVlbmNlci5jOjEzMjcKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIGFmdGVyIGNyZWF0aW5nIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSBIRUFEIHNhdSBraGkgdOG6oW8gbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogc2VxdWVuY2VyLmM6MTMyOQorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIsSRw6MgcuG7nWkga2jhu49pIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEzMzMKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIChyb290LWNvbW1pdCkiCisKKyM6IHNlcXVlbmNlci5jOjEzNTQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjEzNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICJIRUFEICVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8hIgorCisjOiBzZXF1ZW5jZXIuYzoxMzYwIHNlcXVlbmNlci5jOjE0NTggYnVpbHRpbi9jb21taXQuYzoxNTY5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY29tbWl0IChs4bqnbiBjaHV54buDbiBnaWFvKSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNDExIHNlcXVlbmNlci5jOjIwNTUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIHTDoWMgZ2nhuqMgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogc2VxdWVuY2VyLmM6MTQzMQorbXNnaWQgImNvcnJ1cHRlZCBhdXRob3Igd2l0aG91dCBkYXRlIGluZm9ybWF0aW9uIgorbXNnc3RyICJ0w6FjIGdp4bqjIHNhaSBo4buPbmcga2jDtG5nIGPDsyB0aMO0bmcgdGluIG7DoHkgdGjDoW5nIgorCisjOiBzZXF1ZW5jZXIuYzoxNDQ3IGJ1aWx0aW4vYW0uYzoxNTYxIGJ1aWx0aW4vbWVyZ2UuYzo2ODQKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJs4buHbmggZ2l0IHdyaXRlLXRyZWUgZ+G6t3AgbOG7l2kga2hpIGdoaSBt4buZdCBjw6J5IgorCisjOiBzZXF1ZW5jZXIuYzoxNDgwIHNlcXVlbmNlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHBo4bqnbiBjaMO6IHRow61jaCAobWVzc2FnZSkgdOG7qyDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MTUxNiBidWlsdGluL2FtLmM6MTU4MyBidWlsdGluL2NvbW1pdC5jOjE2NjggYnVpbHRpbi9tZXJnZS5jOjg4MworIzogYnVpbHRpbi9tZXJnZS5jOjkwOAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgZ2hpIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIgorCisjOiBzZXF1ZW5jZXIuYzoxNTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBs4bqnbiBjaHV54buDbiBnaWFvICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyBjaGEgbeG6uSDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MTY1NiBzZXF1ZW5jZXIuYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZDogJWQiCittc2dzdHIgImtow7RuZyBoaeG7g3UgY8OidSBs4buHbmggJWQiCisKKyM6IHNlcXVlbmNlci5jOjE3MTQgc2VxdWVuY2VyLmM6MTczOQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIsSQw6J5IGzDoCB04buVIGjhu6NwIGPhu6dhICVkIGzhuqduIGNodXnhu4NuIGdpYW8uIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI0Cittc2dpZCAibmVlZCBhIEhFQUQgdG8gZml4dXAiCittc2dzdHIgImPhuqduIG3hu5l0IEhFQUQgxJHhu4Mgc+G7rWEiCisKKyM6IHNlcXVlbmNlci5jOjE3MjYgc2VxdWVuY2VyLmM6MzMwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTcyOAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBwaOG6p24gY2jDuiB0aMOtY2ggKG1lc3NhZ2UpIGPhu6dhIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjE3NDEgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NgorbXNnaWQgIlRoaXMgaXMgdGhlIDFzdCBjb21taXQgbWVzc2FnZToiCittc2dzdHIgIsSQw6J5IGzDoCBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSBuaOG6pXQ6IgorCisjOiBzZXF1ZW5jZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHBo4bqnbiBjaMO6IHRow61jaCAobWVzc2FnZSkgY+G7p2EgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupICMlZDoiCisKKyM6IHNlcXVlbmNlci5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICJDaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAjJWQgc+G6vSBi4buLIGLhu48gcXVhOiIKKworIzogc2VxdWVuY2VyLmM6MTg1MAorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgInThuq1wIHRpbiBsxrB1IG3hu6VjIGzhu6VjIGPhu6dhIGLhuqFuIGtow7RuZyDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IHNlcXVlbmNlci5jOjE4NTcKK21zZ2lkICJjYW5ub3QgZml4dXAgcm9vdCBjb21taXQiCittc2dzdHIgImtow7RuZyB0aOG7gyBz4butYSBjaOG7r2EgbOG6p24gY2h1eeG7g24gZ2lhbyBn4buRYyIKKworIzogc2VxdWVuY2VyLmM6MTg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gJXMgbMOgIG3hu5l0IGzhuqduIGjDsmEgdHLhu5luIG5oxrBuZyBraMO0bmcgxJHGsGEgcmEgdMO5eSBjaOG7jW4gLW0uIgorCisjOiBzZXF1ZW5jZXIuYzoxODg0IHNlcXVlbmNlci5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvICVzIGtow7RuZyBjw7MgY2hhIG3hurkgJWQiCisKKyM6IHNlcXVlbmNlci5jOjE4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSBnaGkgY2jDuiBs4bqnbiBjaHV54buDbiBnaWFvIGNobyAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlIGEgInRvZG8iIGNvbW1hbmQgbGlrZQorIy4gInJldmVydCIgb3IgInBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMS4KKyM6IHNlcXVlbmNlci5jOjE5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGzhuqduIGNodXnhu4NuIGdpYW8gbeG6uSBj4bunYSAlcyIKKworIzogc2VxdWVuY2VyLmM6MTk4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buVaSB0w6puIOKAnCVz4oCdIHRow6BuaCDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgaG/DoG4gbmd1ecOqbiAlc+KApiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhICVz4oCmICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGfhurdwIGzhu5dpIMSR4buNYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IHNlcXVlbmNlci5jOjIxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogZ+G6t3AgbOG7l2kga2hpIGzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogc2VxdWVuY2VyLmM6MjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzOiAnJXMnIgorbXNnc3RyICIlcyBraMO0bmcgbmjhuq1uIGPDoWMgxJHhu5FpIHPhu5E6IOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzoyMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnRzIGZvciAlcyIKK21zZ3N0ciAidGhp4bq/dSDEkeG7kWkgc+G7kSBjaG8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclLipzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCDigJwlLipz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzoyMjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZMOybmcga2jDtG5nIGjhu6NwIGzhu4cgJWQ6ICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIOKAnCVz4oCdIHRo4buDIG3DoCBraMO0bmcgY8OzIGzhuqduIGNodXnhu4NuIGdpYW8ga+G6vyB0csaw4bubYyIKKworIzogc2VxdWVuY2VyLmM6MjM0OCBidWlsdGluL3JlYmFzZS5jOjE3MiBidWlsdGluL3JlYmFzZS5jOjE5NworIzogYnVpbHRpbi9yZWJhc2UuYzoyMjMgYnVpbHRpbi9yZWJhc2UuYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJy4iCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMg4oCcJXPigJ0uIgorCisjOiBzZXF1ZW5jZXIuYzoyMzg0Cittc2dpZCAiY2FuY2VsbGluZyBhIGNoZXJyeSBwaWNraW5nIGluIHByb2dyZXNzIgorbXNnc3RyICLEkWFuZyBo4buneSBi4buPIHRoYW8gdMOhYyBjaGVycnkgcGljayDEkWFuZyB0aOG7sWMgaGnhu4duIgorCisjOiBzZXF1ZW5jZXIuYzoyMzkxCittc2dpZCAiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAixJFhbmcgaOG7p3kgYuG7jyBjw6FjIHRoYW8gdMOhYyBob8OgbiBuZ3V5w6puIMSRYW5nIHRo4buxYyBoaeG7h24iCisKKyM6IHNlcXVlbmNlci5jOjI0MzUKK21zZ2lkICJwbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAidnVpIGzDsm5nIHPhu61hIGzhu5dpIG7DoHkgYuG6sW5nIGPDoWNoIGTDuW5nIOKAnGdpdCByZWJhc2UgLS1lZGl0LXRvZG/igJ0uIgorCisjOiBzZXF1ZW5jZXIuYzoyNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICJi4bqjbmcgY2jhu4kgdGjhu4sga2jDtG5nIHRo4buDIGTDuW5nIMSRxrDhu6NjOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjQ0MgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAia2jDtG5nIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gxJHGsOG7o2MgcGjDom4gdMOtY2guIgorCisjOiBzZXF1ZW5jZXIuYzoyNDUzCittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgImtow7RuZyB0aOG7gyBjaGVycnktcGljayB0cm9uZyBraGkgaG/DoG4gbmd1ecOqbi4iCisKKyM6IHNlcXVlbmNlci5jOjI0NTUKK21zZ2lkICJjYW5ub3QgcmV2ZXJ0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gdmnhu4djIGhvw6BuIG5ndXnDqm4gdHJvbmcga2hpIMSRYW5nIGNoZXJyeS1waWNrLiIKKworIzogc2VxdWVuY2VyLmM6MjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgImdpw6EgdHLhu4sgY2hvICVzIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjYzMAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICJzcXVhc2gtb250byBraMO0bmcgZMO5bmcgxJHGsOG7o2MiCisKKyM6IHNlcXVlbmNlci5jOjI2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgImLhuqNuZyB0w7l5IGNo4buNbiBk4buLIGjDrG5oOiDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MjczNiBzZXF1ZW5jZXIuYzo0NDYzCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gdHLhu5FuZyBy4buXbmcgxJHhurd0IGzDoCBo4bujcCBxdXkgY8OhY2giCisKKyM6IHNlcXVlbmNlci5jOjI3NTIKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiY8OzIHRoYW8gdMOhYyBob8OgbiBuZ3V5w6puIMSRYW5nIMSRxrDhu6NjIHRo4buxYyBoaeG7h24iCisKKyM6IHNlcXVlbmNlci5jOjI3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAiaMOjeSB0aOG7rSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI3NTcKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJjw7MgdGhhbyB0w6FjIOKAnGNoZXJyeS1waWNr4oCdIMSRYW5nIMSRxrDhu6NjIHRo4buxYyBoaeG7h24iCisKKyM6IHNlcXVlbmNlci5jOjI3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICJow6N5IHRo4butIFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzoyNzczCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyB44bq/cCBkw6N5IOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzoyNzg4Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGtow7NhIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI4NDggc2VxdWVuY2VyLmM6NDIwOQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAia2jDtG5nIGNoZXJyeS1waWNrIGhheSBob8OgbiBuZ3V5w6puIHRyb25nIHRp4bq/biB0csOsbmgiCisKKyM6IHNlcXVlbmNlci5jOjI4NTAgc2VxdWVuY2VyLmM6Mjg2MQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjg1MiBzZXF1ZW5jZXIuYzoyODk2Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgImtow7RuZyB0aOG7gyBo4buneSBi4buPIHThu6sgbeG7mXQgbmjDoW5oIG3DoCBuw7MgY8OybiBjaMawYSDEkcaw4bujYyB04bqhbyByYSIKKworIzogc2VxdWVuY2VyLmM6Mjg4MiBidWlsdGluL2dyZXAuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAia2jDtG5nIG3hu58gxJHGsOG7o2Mg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMg4oCcJXPigJ06ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyODg1Cittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiZ+G6t3Aga+G6v3QgdGjDumMgdOG6rXAgdGluIMSR4buZdCB4deG6pXQiCisKKyM6IHNlcXVlbmNlci5jOjI4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICJ04bqtcCB0aW4gSEVBRCDigJxwcmUtY2hlcnJ5LXBpY2vigJ0gxJHDoyBsxrB1IOKAnCVz4oCdIGLhu4sgaOG7j25nIgorCisjOiBzZXF1ZW5jZXIuYzoyOTAyCittc2dpZCAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiBOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIgorbXNnc3RyICIiCisiQuG6oW4gY8OzIGzhur0gxJHDoyBjw7MgSEVBRCDEkcOjIGLhu4sgZGkgY2h1eeG7g24gxJFpLCBLaMO0bmcgdGjhu4MgdHVhLCBraeG7g20gdHJhIEhFQUQgY+G7p2EgIgorImLhuqFuISIKKworIzogc2VxdWVuY2VyLmM6Mjk0MworbXNnaWQgIm5vIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAia2jDtG5nIGPDsyB0aeG6v24gdHLDrG5oIGhvw6BuIG5ndXnDqm4gbsOgbyIKKworIzogc2VxdWVuY2VyLmM6Mjk1MQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICJraMO0bmcgY8OzIGNoZXJyeS1waWNrIMSRYW5nIMSRxrDhu6NjIHRo4buxYyBoaeG7h24iCisKKyM6IHNlcXVlbmNlci5jOjI5NjEKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgYuG7jyBxdWEgxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8iCisKKyM6IHNlcXVlbmNlci5jOjI5NjgKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgIuG7nyDEkcOieSBraMO0bmcgY8OzIGfDrCDEkeG7gyBtw6AgYuG7jyBxdWEgY+G6oyIKKworIzogc2VxdWVuY2VyLmM6Mjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorImLhuqFuIMSRw6Mgc+G6tW4gc8OgbmcgY2h1eeG7g24gZ2lhbyBjaMawYT9cbiIKKyJ0aOG7rSBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCisKKyM6IHNlcXVlbmNlci5jOjMwOTUgc2VxdWVuY2VyLmM6NDEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10ICVzIgorCisjOiBzZXF1ZW5jZXIuYzozMTM0IHNlcXVlbmNlci5jOjQxMDEKK21zZ2lkICJjYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjMxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2jDqXAg4oCcJXPigJ0gc2FuZyDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MzE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIkLhuqFuIGPDsyB0aOG7gyB0dSBi4buVIGzhuqduIGNodXnhu4NuIGdpYW8gbmdheSBiw6J5IGdp4budIGLhurFuZzpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk3hu5l0IGtoaSDEkcOjIGjDoGkgbMOybmcgduG7m2kgbmjhu69uZyB0aGF5IMSR4buVaSBj4bunYSBtw6xuaCwgdGjDrCBjaOG6oXk6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMOhcCBk4bulbmcgJXPigKYgJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWVyZ2UgJS4qcyIKK21zZ3N0ciAiS2jDtG5nIGjDsmEgdHLhu5luICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMxOTAgc2VxdWVuY2VyLmM6MzE5NCBidWlsdGluL2RpZmZ0b29sLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNow6lwIOKAnCVz4oCdIHNhbmcg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjMyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBmYWlsZWQ6ICVzXG4iCisiJXNZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorInRo4buxYyB0aGkgZ+G6t3AgbOG7l2k6ICVzXG4iCisiJXNC4bqhbiBjw7MgdGjhu4Mgc+G7rWEgY8OhYyB0cuG7pWMgdHLhurdjLCB2w6Agc2F1IMSRw7MgY2jhuqF5IGzhu4duaFxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMjcKK21zZ2lkICJhbmQgbWFkZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorbXNnc3RyICJ2w6AgdOG6oW8gY8OhYyB0aGF5IMSR4buVaSBi4bqjbmcgbeG7pWMgbOG7pWMgdsOgL2hheSBjw6J5IGzDoG0gdmnhu4djXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG4iCisiYnV0IGxlZnQgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKKyJDb21taXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzLCBhbmQgdGhlbiBydW5cbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorbXNnc3RyICIiCisidGjhu7FjIHRoaSB0aMOgbmggY8O0bmc6ICVzXG4iCisibmjGsG5nIGPDsm4gY8OhYyB0aGF5IMSR4buVaSB0cm9uZyBt4bulYyBs4bulYyB2w6AvaG/hurdjIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJDaHV54buDbiBnaWFvIGhheSB04bqhbSBj4bqldCBjw6FjIHRoYXkgxJHhu5VpIG7DoHkgxJFpLCBy4buTaSBjaOG6oXlcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICJ0w6puIG5ow6NuIGThu4sgaMOsbmg6IOKAnCUuKnPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjMzNDgKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgImdoaSBs4bqnbiBjaHV54buDbiBnaWFvIGfhu5FjIGdp4bqjIgorCisjOiBzZXF1ZW5jZXIuYzozMzUzCittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAixJFhbmcgZ2hpIHNxdWFzaC1vbnRvIgorCisjOiBzZXF1ZW5jZXIuYzozMzkxIGJ1aWx0aW4vcmViYXNlLmM6ODc2IGJ1aWx0aW4vcmViYXNlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB0w6xtIGPDonkgY+G7p2EgJXMiCisKKyM6IHNlcXVlbmNlci5jOjM0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MzQ2NworbXNnaWQgImNhbm5vdCBtZXJnZSB3aXRob3V0IGEgY3VycmVudCByZXZpc2lvbiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGjDsmEgdHLhu5luIG3DoCBraMO0bmcgY8OzIG3hu5l0IMSRaeG7g20geMOpdCBkdXnhu4d0IGhp4buHbiB04bqhaSIKKworIzogc2VxdWVuY2VyLmM6MzQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2gg4oCcJS4qc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MzQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgImNo4bqzbmcgY8OzIGfDrCDEkeG7gyBow7JhIHRy4buZbjog4oCcJS4qc+KAnSIKKworIzogc2VxdWVuY2VyLmM6MzUxMAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgImjDsmEgdHLhu5luIG9jdG9wdXMga2jDtG5nIHRo4buDIMSRxrDhu6NjIHRo4buxYyB0aGkgdHLDqm4gxJHhu4luaCBj4bunYSBt4buZdCBbbmV3IHJvb3RdIgorCisjOiBzZXF1ZW5jZXIuYzozNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgY29tbWl0IG1lc3NhZ2Ugb2YgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IGNow7ogdGjDrWNoIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gY+G7p2Eg4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjM2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV2ZW4gYXR0ZW1wdCB0byBtZXJnZSAnJS4qcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBuZ2F5IGPhuqMga2hpIHRo4butIGjDsmEgdHLhu5luIOKAnCUuKnPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjM3MDQKK21zZ2lkICJtZXJnZTogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJtZXJnZTogS2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kiCisKKyM6IHNlcXVlbmNlci5jOjM3NzMgYnVpbHRpbi9yZWJhc2UuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guXG4iCittc2dzdHIgIsSQw6Mgw6FwIGThu6VuZyBhdXRvc3Rhc2guXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu60gbMawdSDigJwlc+KAnSIKKworIzogc2VxdWVuY2VyLmM6Mzc4OCBidWlsdGluL3JlYmFzZS5jOjc0OSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiw4FwIGThu6VuZyBhdXRvc3Rhc2ggY8OzIGhp4buHdSBxdeG6oyB0cm9uZyBjw6FjIHh1bmcgxJHhu5l0LlxuIgorIkPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4gYW4gdG/DoG4gdHJvbmcgc3Rhc2ggKHThuqFtIGPhuqV0IMSRaSkuXG4iCisiQuG6oW4gY8OzIHRo4buDIGNo4bqheSBs4buHbmggXCJnaXQgc3Rhc2ggcG9wXCIgaGF5IFwiZ2l0IHN0YXNoIGRyb3BcIiBi4bqldCBr4buzIGzDumMgIgorIm7DoG8uXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgcmEgJXMiCisKKyM6IHNlcXVlbmNlci5jOjM4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgT0lEIGjhu6NwIGzhu4ciCisKKyM6IHNlcXVlbmNlci5jOjM4NjggZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDoWNoIHLhu51pIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjM4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIkThu6tuZyBs4bqhaSDhu58gSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAiROG7q25nIGzhuqFpIOG7nyAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzozODkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZXhlY3V0ZSB0aGUgdG9kbyBjb21tYW5kXG4iCisiXG4iCisiICAgICUuKnNcbiIKKyJJdCBoYXMgYmVlbiByZXNjaGVkdWxlZDsgVG8gZWRpdCB0aGUgY29tbWFuZCBiZWZvcmUgY29udGludWluZywgcGxlYXNlXG4iCisiZWRpdCB0aGUgdG9kbyBsaXN0IGZpcnN0OlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHRo4buxYyB0aGkgbOG7h25oIHRvZG9cbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIk7DsyDEkcOjIMSRxrDhu6NjIGzDqm4gbOG7i2NoIGzhuqFpOiDEkOG7gyBz4butYSBs4buHbmggdHLGsOG7m2Mga2hpIHRp4bq/cCB04bulYywgdnVpIGzDsm5nXG4iCisic+G7rWEgZGFuaCBzw6FjaCB0b2RvIHRyxrDhu5tjOlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozOTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAiROG7q25nIGzhuqFpIOG7nyAlc+KApiAgJS4qc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBjw6J1IGzhu4duaCAlZCIKKworIzogc2VxdWVuY2VyLmM6NDEwOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBvcmlnLWhlYWQiCisKKyM6IHNlcXVlbmNlci5jOjQxMTQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnb250byciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMg4oCcb250b+KAnS4iCisKKyM6IHNlcXVlbmNlci5jOjQxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IEhFQUQgdGjDoG5oICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MjIxCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqjaSB04buVOiBC4bqhbiBjw7MgY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nLiIKKworIzogc2VxdWVuY2VyLmM6NDIzMAorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgdHUgYuG7jyBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyB04buTbiB04bqhaSIKKworIzogc2VxdWVuY2VyLmM6NDIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbGU6ICclcyciCittc2dzdHIgInThuq1wIHRpbiBraMO0bmcgaOG7o3AgbOG7hzog4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjQyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb250ZW50czogJyVzJyIKK21zZ3N0ciAibuG7mWkgZHVuZyBraMO0bmcgaOG7o3AgbOG7hzog4oCcJXPigJ0iCisKKyM6IHNlcXVlbmNlci5jOjQyMzcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJC4bqhbiBjw7MgY8OhYyB0aGF5IMSR4buVaSBjaMawYSBjaHV54buDbiBnaWFvIHRyb25nIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MuIFZ1aSBsw7JuZ1xuIgorImNodXnhu4NuIGdpYW8gY2jDum5nIHRyxrDhu5tjIHbDoCBzYXUgxJHDsyBjaOG6oXkgbOG7h25oIOKAnGdpdCByZWJhc2UgLS1jb250aW51ZeKAnSBs4bqnbiBu4buvYS4iCisKKyM6IHNlcXVlbmNlci5jOjQyNzMgc2VxdWVuY2VyLmM6NDMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW46IOKAnCVz4oCdIgorCisjOiBzZXF1ZW5jZXIuYzo0MzI3Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeMOzYSBi4buPIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjQzMzQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNodXnhu4NuIGdpYW8gY8OhYyB0aGF5IMSR4buVaSDEkcOjIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcuIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIGNoZXJyeS1waWNrIG3hu5l0ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiDEkWnhu4NtIHjDqXQgZHV54buHdCBzYWkiCisKKyM6IHNlcXVlbmNlci5jOjQ0NzkKK21zZ2lkICJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgImtow7RuZyB0aOG7gyBob8OgbiBuZ3V5w6puIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8ga2jhu59pIHThuqFvIgorCisjOiBzZXF1ZW5jZXIuYzo0OTUyCittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdDogY8OhYyB0w7l5IGNo4buNbiDEkcaw4bujYyBraMO0bmcgeOG7rSBsw70iCisKKyM6IHNlcXVlbmNlci5jOjQ5NTUKK21zZ2lkICJtYWtlX3NjcmlwdDogZXJyb3IgcHJlcGFyaW5nIHJldmlzaW9ucyIKK21zZ3N0ciAibWFrZV9zY3JpcHQ6IGzhu5dpIGNodeG6qW4gYuG7iyDEkWnhu4NtIGhp4buHdSBjaOG7iW5oIgorCisjOiBzZXF1ZW5jZXIuYzo1MTEzCittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIkLhuqFuIGPDsyB0aOG7gyBz4butYSBuw7MgYuG6sW5nIOKAnGdpdCByZWJhc2UgLS1lZGl0LXRvZG/igJ0gdsOgIHNhdSDEkcOzIGNo4bqheSDigJxnaXQgcmViYXNlIC0tIgorImNvbnRpbnVl4oCdLlxuIgorIkhv4bq3YyBsw6AgYuG6oW4gY8OzIHRo4buDIGLDo2kgYuG7jyB2aeG7h2MgY+G6o2kgdOG7lSBi4bqxbmcg4oCcZ2l0IHJlYmFzZSAtLWFib3J04oCdLlxuIgorCisjOiBzZXF1ZW5jZXIuYzo1MjI2IHNlcXVlbmNlci5jOjUyNDMKK21zZ2lkICJub3RoaW5nIHRvIGRvIgorbXNnc3RyICJraMO0bmcgY8OzIGfDrCDEkeG7gyBsw6BtIgorCisjOiBzZXF1ZW5jZXIuYzo1MjU3Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGLhu48gcXVhIGPDoWMgbOG7h25oIGPhuq15IChwaWNrKSBraMO0bmcgY+G6p24gdGhp4bq/dCIKKworIzogc2VxdWVuY2VyLmM6NTM1MQorbXNnaWQgInRoZSBzY3JpcHQgd2FzIGFscmVhZHkgcmVhcnJhbmdlZC4iCittc2dzdHIgInbEg24gbOG7h25oIMSRw6Mgc+G6tW4gxJHGsOG7o2Mgc+G6r3AgxJHhurd0IHLhu5NpLiIKKworIzogc2V0dXAuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIuKAnCVz4oCdIOG7nyBuZ2/DoGkgbeG7mXQga2hvIGNo4bupYSIKKworIzogc2V0dXAuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisiJXM6IGtow7RuZyBjw7MgxJHGsOG7nW5nIGThuqtuIG7DoG8gbmjGsCB0aOG6vyDhu58gdHJvbmcgY8OieSBsw6BtIHZp4buHYy5cbiIKKyJEw7luZyDigJxnaXQgPGzhu4duaD4gLS0gPMSRxrDhu51uZy9k4bqrbj7igKbigJ0gxJHhu4MgY2jhu4kgxJHhu4tuaCDEkcaw4budbmcgZOG6q24gbcOgIG7DsyBraMO0bmcgdOG7k24gdOG6oWkgIgorIm3hu5l0IGPDoWNoIG7hu5lpIGLhu5kuIgorCisjOiBzZXR1cC5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyJ0aGFtIHPhu5EgY2jGsGEgcsO1IHLDoG5nIOKAnCVz4oCdOiBjaMawYSBiaeG6v3QgxJFp4buDbSB4ZW0geMOpdCBoYXkgxJHGsOG7nW5nIGThuqtuIGtow7RuZyB0cm9uZyAiCisiY8OieSBsw6BtIHZp4buHYy5cbiIKKyJEw7luZyDigJwtLeKAnSDEkeG7gyBuZ8SDbiBjw6FjaCBjw6FjIMSRxrDhu51uZyBk4bqrbiBraOG7j2kgxJFp4buDbSB4ZW0geMOpdCwgbmjGsCB0aOG6vyBuw6B5OlxuIgorIuKAnGdpdCA8bOG7h25oPiBbPMSRaeG7g20geGVtIHjDqXQ+4oCmXSAtLSBbPHThuq1wIHRpbj7igKZd4oCdIgorCisjOiBzZXR1cC5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJyVzJyBtdXN0IGNvbWUgYmVmb3JlIG5vbi1vcHRpb24gYXJndW1lbnRzIgorbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlc+KAnSBwaOG6o2kgdHLGsOG7m2MgY8OhYyDEkeG7kWkgc+G7kSDEkeG6p3UgdGnDqm4ga2jDtG5nIGPDsyB0w7l5IGNo4buNbiIKKworIzogc2V0dXAuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorInRoYW0gc+G7kSBjaMawYSByw7UgcsOgbmcg4oCcJXPigJ06IGPhuqMgxJFp4buDbSB4ZW0geMOpdCB2w6AgdMOqbiB04bqtcCB0aW4uXG4iCisiRMO5bmcg4oCcLS3igJ0gxJHhu4MgbmfEg24gY8OhY2ggY8OhYyDEkcaw4budbmcgZOG6q24ga2jhu49pIMSRaeG7g20geGVtIHjDqXQsIG5oxrAgdGjhur8gbsOgeTpcbiIKKyLigJxnaXQgPGzhu4duaD4gWzzEkWnhu4NtIHhlbSB4w6l0PuKApl0gLS0gWzx04bqtcCB0aW4+4oCmXeKAnSIKKworIzogc2V0dXAuYzozOTEKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHVwIHdvcmsgdHJlZSB1c2luZyBpbnZhbGlkIGNvbmZpZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGPDoGkgxJHhurd0IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2Mgc+G7rSBk4bulbmcgY+G6pXUgaMOsbmgga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IHNldHVwLmM6Mzk1Cittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgInRoYW8gdMOhYyBuw6B5IHBo4bqjaSDEkcaw4bujYyB0aOG7sWMgaGnhu4duIHRyb25nIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MiCisKKyM6IHNldHVwLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIgorbXNnc3RyICJD4bqnbiBwaGnDqm4gYuG6o24ga2hvIGdpdCA8PSAlZCwgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyAlZCIKKworIzogc2V0dXAuYzo1NDkKK21zZ2lkICJ1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9ucyBmb3VuZDoiCittc2dzdHIgInTDrG0gdGjhuqV5IHBo4bqnbiBt4bufIHLhu5luZyBraG8gY2jGsGEgYmnhur90OiIKKworIzogc2V0dXAuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbeG7nyDigJwlc+KAnSIKKworIzogc2V0dXAuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGxhcmdlIHRvIGJlIGEgLmdpdCBmaWxlOiAnJXMnIgorbXNnc3RyICJ04bqtcCB0aW4gLmdpdCBsw6AgcXXDoSBs4bubbjog4oCcJXPigJ0iCisKKyM6IHNldHVwLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7jWMgJXMiCisKKyM6IHNldHVwLmM6NTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLEkeG7i25oIGThuqFuZyB04bqtcCB0aW4gZ2l0IGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogc2V0dXAuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIKK21zZ3N0ciAia2jDtG5nIGPDsyDEkcaw4budbmcgZOG6q24gdHJvbmcgdOG6rXAgdGluIGdpdDogJXMiCisKKyM6IHNldHVwLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6Aga2hvIGdpdDogJXMiCisKKyM6IHNldHVwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIuKAnCQlc+KAnSBxdcOhIGzhu5tuIgorCisjOiBzZXR1cC5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6Aga2hvIGdpdDog4oCcJXPigJ0iCisKKyM6IHNldHVwLmM6NzIwIHNldHVwLmM6NzIyIHNldHVwLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2hkaXIgKGNodXnhu4NuIMSR4buVaSB0aMawIG3hu6VjKSBzYW5nIOKAnCVz4oCdIgorCisjOiBzZXR1cC5jOjcyNSBzZXR1cC5jOjc4MSBzZXR1cC5jOjc5MSBzZXR1cC5jOjgzMCBzZXR1cC5jOjgzOAorbXNnaWQgImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcXVheSBs4bqhaSBjd2QiCisKKyM6IHNldHVwLmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclKnMlcyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IHRo4buRbmcga8OqIHbhu4Eg4oCcJSpzJXMlc+KAnSIKKworIzogc2V0dXAuYzoxMDkwCittc2dpZCAiVW5hYmxlIHRvIHJlYWQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIGhp4buHbiBow6BuaCIKKworIzogc2V0dXAuYzoxMDk5IHNldHVwLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBjaHV54buDbiBzYW5nIOKAnCVz4oCdIgorCisjOiBzZXR1cC5jOjExMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiCittc2dzdHIgImtow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQgKGhv4bq3YyBi4bqldCBr4buzIHRoxrAgbeG7pWMgY2hhIG3hurkgbsOgbyk6ICVzIgorCisjOiBzZXR1cC5jOjExMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICIiCisia2jDtG5nIHBo4bqjaSBsw6Aga2hvIGdpdCAoaGF5IGLhuqV0IGvhu7MgY2hhIG3hurkgbsOgbyDEkeG6v24gdOG6rW4gxJFp4buDbSBn4bqvbiBr4bq/dCAlcylcbiIKKyJE4burbmcgdOG6oWkgYmnDqm4gY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBjaMawYSAiCisixJHhurd0KS4iCisKKyM6IHNldHVwLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorImfhurdwIHbhuqVuIMSR4buBIHbhu5tpIGdpw6EgdHLhu4sgY2jhur8gxJHhu5kgdOG6rXAgdGluIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSAoMCUuM28pLlxuIgorIm5nxrDhu51pIHPhu58gaOG7r3UgdOG6rXAgdGluIHBo4bqjaSBsdcO0biBjw7MgcXV54buBbiDEkeG7jWMgdsOgIGdoaS4iCisKKyM6IHNldHVwLmM6MTI3MQorbXNnaWQgIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBt4bufIOKAnC9kZXYvbnVsbOKAnSBoYXkgZHVwIgorCisjOiBzZXR1cC5jOjEyODYKK21zZ2lkICJmb3JrIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHLhur0gbmjDoW5oIHRp4bq/biB0csOsbmgiCisKKyM6IHNldHVwLmM6MTI5MQorbXNnaWQgInNldHNpZCBmYWlsZWQiCittc2dzdHIgInNldHNpZCBn4bq3cCBs4buXaSIKKworIzogc2hhMS1maWxlLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3Q7IGNoZWNrIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCittc2dzdHIgIiIKKyJ0aMawIG3hu6VjIMSR4buRaSB0xrDhu6NuZyAlcyBraMO0bmcgdOG7k24gdOG6oWk7IGtp4buDbSB0cmEgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRoxrDhu51uZyBow7NhIMSRxrDhu51uZyBk4bqrbiDEkeG7kWkgdMaw4bujbmcgdGhheSB0aOG6vzog4oCcJXPigJ0iCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiVzOiDEkWFuZyBi4buPIHF1YSBraG8gxJHhu5FpIHTGsOG7o25nIHRoYXkgdGjhur8sIGzhu5NuZyBuaGF1IHF1w6Egc8OidSIKKworIzogc2hhMS1maWxlLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgb2JqZWN0IGRpcmVjdG9yeTogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaHXhuqluIGjDs2EgdGjGsCBt4bulYyDEkeG7kWkgdMaw4bujbmc6IOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzo2MjUKK21zZ2lkICJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBmZG9wZW4gdOG6rXAgdGluIGtow7NhIHRoYXkgdGjhur8iCisKKyM6IHNoYTEtZmlsZS5jOjY0MworbXNnaWQgInVuYWJsZSB0byByZWFkIGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB04bqtcCB0aW4gdGhheSB0aOG6vyIKKworIzogc2hhMS1maWxlLmM6NjUwCittc2dpZCAidW5hYmxlIHRvIG1vdmUgbmV3IGFsdGVybmF0ZXMgZmlsZSBpbnRvIHBsYWNlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gdOG6rXAgdGluIHRoYXkgdGjhur8gdsOgbyBjaOG7lyIKKworIzogc2hhMS1maWxlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIGtow7RuZyB04buTbiB04bqhaSIKKworIzogc2hhMS1maWxlLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgYXMgYSBsaW5rZWQgY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIgorbXNnc3RyICJraG8gdGhhbSBjaGnhur91IOKAnCVz4oCdIG5oxrAgbMOgIGzhuqV5IHJhIGxpw6puIGvhur90IHbhuqtuIGNoxrBhIMSRxrDhu6NjIGjhu5cgdHLhu6MuIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAia2hvIHRoYW0gY2hp4bq/dSDigJwlc+KAnSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBraG8gbuG7mWkgYuG7mS4iCisKKyM6IHNoYTEtZmlsZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgImtobyB0aGFtIGNoaeG6v3Ug4oCcJXPigJ0gbMOgIG7DtG5nIgorCisjOiBzaGExLWZpbGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJraG8gdGhhbSBjaGnhur91IOKAnCVz4oCdIGLhu4sgY+G6pXkgZ2jDqXAiCisKKyM6IHNoYTEtZmlsZS5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgd2hpbGUgcGFyc2luZyBhbHRlcm5hdGUgcmVmczogJXMiCittc2dzdHIgImTDsm5nIGtow7RuZyBo4bujcCBs4buHIHRyb25nIGtoaSBwaMOibiB0w61jaCBjw6FjIHRoYW0gY2hp4bq/dSB0aGF5IHRo4bq/OiAlcyIKKworIzogc2hhMS1maWxlLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgImF0dGVtcHRpbmcgdG8gbW1hcCAlPFBSSXVNQVg+IG92ZXIgbGltaXQgJTxQUkl1TUFYPiIKK21zZ3N0ciAixJFhbmcgY+G7kSDEkeG7gyBtbWFwICU8UFJJdU1BWD4gdsaw4bujdCBxdcOhIGdp4bubaSBo4bqhbiAlPFBSSXVNQVg+IgorCisjOiBzaGExLWZpbGUuYzo5NjQKK21zZ2lkICJtbWFwIGZhaWxlZCIKK21zZ3N0ciAibW1hcCBn4bq3cCBs4buXaSIKKworIzogc2hhMS1maWxlLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgZmlsZSAlcyBpcyBlbXB0eSIKK21zZ3N0ciAidOG6rXAgdGluIMSR4buRaSB0xrDhu6NuZyAlcyB0cuG7kW5nIHLhu5duZyIKKworIzogc2hhMS1maWxlLmM6MTI1MiBzaGExLWZpbGUuYzoyMzkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgbG9vc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBt4bqldCBo4buPbmcg4oCcJXPigJ0iCisKKyM6IHNoYTEtZmlsZS5jOjEyNTQgc2hhMS1maWxlLmM6MjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnYXJiYWdlIGF0IGVuZCBvZiBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgcsOhYyB04bqhaSBjdeG7kWkgY+G7p2EgxJHhu5FpIHTGsOG7o25nIGLhu4sgbeG6pXQg4oCcJXPigJ0iCisKKyM6IHNoYTEtZmlsZS5jOjEyOTYKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBzaGExLWZpbGUuYzoxMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaeG6o2kgbsOpbiBwaOG6p24gxJHhuqd1IGfDs2kgJXMgduG7m2kgLS1hbGxvdy11bmtub3duLXR5cGUiCisKKyM6IHNoYTEtZmlsZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaeG6o2kgZ8OzaSBwaOG6p24gxJHhuqd1ICVzIgorCisjOiBzaGExLWZpbGUuYzoxMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIHBo4bqnbiDEkeG6p3UgZ8OzaSAlcyB24bubaSAtLWFsbG93LXVua25vd24tdHlwZSIKKworIzogc2hhMS1maWxlLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggcGjhuqduIMSR4bqndSBj4bunYSDigJwlc+KAnSIKKworIzogc2hhMS1maWxlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7jWMgxJHhu5FpIHTGsOG7o25nIOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzoxNTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiCittc2dzdHIgImMlcyB0aGF5IHRo4bq/IGtow7RuZyDEkcaw4bujYyB0w6xtIHRo4bqleSBjaG8gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyBt4bqldCAlcyAoxJHGsOG7o2MgbMawdSB0cm9uZyAlcykgYuG7iyBo4buPbmciCisKKyM6IHNoYTEtZmlsZS5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2VkIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgxJHDoyDEkcOzbmcgZ8OzaSAlcyAoxJHGsOG7o2MgbMawdSB0cm9uZyAlcykgYuG7iyBo4buPbmciCisKKyM6IHNoYTEtZmlsZS5jOjE2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluICVzIgorCisjOiBzaGExLWZpbGUuYzoxNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhurd0IHF1eeG7gW4gdGjDoG5oIOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzoxNzEzCittc2dpZCAiZmlsZSB3cml0ZSBlcnJvciIKK21zZ3N0ciAibOG7l2kgZ2hpIHThuq1wIHRpbiIKKworIzogc2hhMS1maWxlLmM6MTczMgorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgdHJvbmcga2hpIMSRw7NuZyB04bqtcCB0aW4gxJHhu5FpIHTGsOG7o25nIgorCisjOiBzaGExLWZpbGUuYzoxNzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIiIKKyJraMO0bmcgxJHhu6cgdGjhuqltIHF1eeG7gW4gxJHhu4MgdGjDqm0gbeG7mXQgxJHhu5FpIHTGsOG7o25nIHbDoG8gY8ahIHPhu58gZOG7ryBsaeG7h3Uga2hvIGNo4bupYSAlcyIKKworIzogc2hhMS1maWxlLmM6MTc5OQorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB04bqtcCB0aW4gdOG6oW0gdGjhu51pIgorCisjOiBzaGExLWZpbGUuYzoxODIzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiDEkeG7kWkgdMaw4bujbmcgxJHDoyBt4bqldCIKKworIzogc2hhMS1maWxlLmM6MTgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgImtow7RuZyB0aOG7gyB44bqjIG7DqW4gxJHhu5FpIHTGsOG7o25nIG3hu5tpICVzICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiCittc2dzdHIgImRlZmxhdGVFbmQgdHLDqm4gxJHhu5FpIHTGsOG7o25nICVzIGfhurdwIGzhu5dpICglZCkiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIKK21zZ3N0ciAiY2jGsGEgcsO1IHLDoG5nIGJhb3dpciBk4buvIGxp4buHdSBuZ3Xhu5NuIMSR4buRaSB0xrDhu6NuZyBraMO0bmcg4buVbiDEkeG7i25oIGNobyAlcyIKKworIzogc2hhMS1maWxlLmM6MTg0NyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgdXRpbWUoKSB0csOqbiDigJwlc+KAnSIKKworIzogc2hhMS1maWxlLmM6MTkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIMSR4buRaSB0xrDhu6NuZyBjaG8gJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE5NjIKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyBzYWkgaOG7j25nIgorCisjOiBzaGExLWZpbGUuYzoxOTcwCittc2dpZCAiY29ycnVwdCB0YWciCittc2dzdHIgInRo4bq7IHNhaSBo4buPbmciCisKKyM6IHNoYTEtZmlsZS5jOjIwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgxJHhu41jIGtoaSDEkcOhbmggbeG7pWMgbOG7pWMgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjIwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgcmVhZCB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAia2jDtG5nIMSR4buNYyBuZ+G6r24ga2hpIMSRw6FuaCBt4bulYyBs4bulYyAlcyIKKworIzogc2hhMS1maWxlLmM6MjE0NSBzaGExLWZpbGUuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiCittc2dzdHIgIiVzOiBn4bq3cCBs4buXaSBraGkgdGjDqm0gdsOgbyBjxqEgc+G7nyBk4buvIGxp4buHdSIKKworIzogc2hhMS1maWxlLmM6MjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICIlczoga2nhu4N1IHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogc2hhMS1maWxlLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBo4bujcCBs4buHIgorCisjOiBzaGExLWZpbGUuYzoyMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCDEkeG7kWkgdMaw4bujbmcg4oCcJXPigJ0gaOG7o3AgbOG7hyIKKworIzogc2hhMS1maWxlLmM6MjIxMyBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDAzIHNoYTEtZmlsZS5jOjI0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAibcOjIGLEg20ga2jDtG5nIGto4bubcCBjaG8gJXMgKGPhuqduICVzKSIKKworIzogc2hhMS1maWxlLmM6MjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG1tYXAgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaeG6o2kgZ8OzaSBwaOG6p24gxJHhuqd1IGPhu6dhIOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzoyNDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBoZWFkZXIgb2YgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBwaOG6p24gxJHhuqd1IGPhu6dhIOKAnCVz4oCdIgorCisjOiBzaGExLWZpbGUuYzoyNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaeG6o2kgZ8OzaSBu4buZaSBkdW5nIGPhu6dhIOKAnCVz4oCdIgorCisjOiBzaGExLW5hbWUuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgInTDs20gbMaw4bujYyBTSEExICVzIGNoxrBhIHLDtSByw6BuZyIKKworIzogc2hhMS1uYW1lLmM6NDk4Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAiQ8OhYyDhu6luZyBj4butIGzDoDoiCisKKyM6IHNoYTEtbmFtZS5jOjc5NworbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJHaXQgdGjGsOG7nW5nIGtow7RuZyBiYW8gZ2nhu50gdOG6oW8gdGhhbSBjaGnhur91IG3DoCBuw7Mga+G6v3QgdGjDumMgduG7m2kgNDAga8O9IHThu7EgaGV4XG4iCisiYuG7n2kgdsOsIG7DsyBz4bq9IGLhu4sgYuG7jyBxdWEga2hpIGLhuqFuIGNo4buJIMSR4buLbmggNDAtaGV4LiBOaOG7r25nIHRoYW0gY2hp4bq/dSBuw6B5XG4iCisiY8OzIGzhur0gxJHGsOG7o2MgdOG6oW8gcmEgYuG7n2kgbeG7mXQgc2FpIHPDs3QgbsOgbyDEkcOzLiBWw60gZOG7pSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisiduG7m2kgXCIkYnJcIiBraMO0bmcgaGnhu4N1IGzDvSBkbyB2w6wgc2FvIHRy4buRbmcgcuG7l25nIHbDoCBt4buZdCB0aGFtIGNoaeG6v3UgNDAtaGV4IMSRxrDhu6NjICIKKyJ04bqhbyByYS5cbiIKKyJYaW4gaMOjeSBraeG7g20gdHJhIG5o4buvbmcgdGhhbSBjaGnhur91IG7DoHkgdsOgIGPDsyB0aOG7gyB4w7NhIGNow7puZyDEkWkuIFThuq90IGzhu51pIG5o4bqvbiAiCisibsOgeVxuIgorImLhurFuZyBjw6FjaCBjaOG6oXkgbOG7h25oIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlCisjOiBzdHJidWYuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCIgorbXNnc3RyICIldS4lMi4ydSBHaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCL2dpw6J5IgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIiCittc2dzdHIgIiV1LiUyLjJ1IE1pQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQi9zIgorbXNnc3RyICIldS4lMi4ydSBNaUIvZ2nDonkiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpQi9nacOieSIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUKKyM6IHN0cmJ1Zi5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlIgorbXNnaWRfcGx1cmFsICIldSBieXRlcyIKK21zZ3N0clswXSAiJXUgYnl0ZSIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZS9zIgorbXNnaWRfcGx1cmFsICIldSBieXRlcy9zIgorbXNnc3RyWzBdICIldSBieXRlL2dpw6J5IgorCisjOiBzdHJidWYuYzoxMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBlZGl0ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBz4butYSDigJwlc+KAnSIKKworIzogc3VibW9kdWxlLmM6MTE0IHN1Ym1vZHVsZS5jOjE0MworbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHRoYXkgxJHhu5VpIC5naXRtb2R1bGVzIGNoxrBhIGjDsmEgdHLhu5luLCBow6N5IGdp4bqjaSBxdXnhur90IHh1bmcgxJHhu5l0IHRy4buZbiAiCisidHLGsOG7m2MiCisKKyM6IHN1Ym1vZHVsZS5jOjExOCBzdWJtb2R1bGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgcGjhuqduIHRyb25nIC5naXRtb2R1bGVzIG7GoWkgbcOgIMSRxrDhu51uZ19k4bqrbj0lcyIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ+G7oSBi4buPIG3hu6VjIC5naXRtb2R1bGVzIGTDoG5oIGNobyAlcyIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHThu5UgY2jhu6ljIC5naXRtb2R1bGVzIMSRw6MgY+G6rXAgbmjhuq10IgorCisjOiBzdWJtb2R1bGUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciCittc2dzdHIgInRyb25nIG3DtC3EkXVuLWNvbiBraMO0bmcgY8OzIGfDrCDigJwlc+KAnSIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAixJDhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIHRow6wg4bufIHRyb25nIG3DtC3EkXVuLWNvbiDigJwlLipz4oCdIgorCisjOiBzdWJtb2R1bGUuYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiCittc2dzdHIgIiIKKyJt4bulYyB0aW4gbcO0LcSRdW4tY29uIOKAnCVz4oCdICglcykgbMOgIG3hu5l0ICVzLCBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBzdWJtb2R1bGUuYzoxMTQ3IGJ1aWx0aW4vYnJhbmNoLmM6NjgwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDE2Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBwaMOibiBnaeG6o2kgSEVBRCBuaMawIGzDoCBt4buZdCB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hy4iCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRydXkgY+G6rXAgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBzdWJtb2R1bGUuYzoxNjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAia2jDtG5nIG5o4bqtbiByYSDigJwlc+KAnSBsw6AgbeG7mXQga2hvIGdpdCIKKworIzogc3VibW9kdWxlLmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjhu5FuZyBrw6og4oCcZ2l0IHN0YXR1c+KAnSB0cm9uZyBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IHN1Ym1vZHVsZS5jOjE4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cycgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBjaOG6oXkg4oCcZ2l0IHN0YXR1c+KAnSB0cm9uZyBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IHN1Ym1vZHVsZS5jOjE4MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVuc2V0IGNvcmUud29ya3RyZWUgc2V0dGluZyBpbiBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4bq3dCBjb3JlLndvcmt0cmVlIHRyb25nIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworIzogc3VibW9kdWxlLmM6MTkwNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgIm3DtC3EkXVuLWNvbiDigJwlc+KAnSBjw7MgbeG7pWMgbOG7pWMgY8OybiBi4bqpbiIKKworIzogc3VibW9kdWxlLmM6MTk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgIk3DtC3EkXVuLWNvbiDigJwlc+KAnSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgY+G6rXAgbmjhuq10LiIKKworIzogc3VibW9kdWxlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzIGluc2lkZSBnaXQgZGlyICclLipzJyIKK21zZ3N0ciAidGjGsCBt4bulYyBnaXQgbcO0IMSRdW4gY29uICclcycgbMOgIGLDqm4gdHJvbmcgZ2l0IERJUiAnJS4qcyciCisKKyM6IHN1Ym1vZHVsZS5jOjIwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJlbG9jYXRlX2dpdGRpciBmb3Igc3VibW9kdWxlICclcycgd2l0aCBtb3JlIHRoYW4gb25lIHdvcmt0cmVlIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKyJyZWxvY2F0ZV9naXRkaXIgY2hvIG3DtC3EkXVuLWNvbiDigJwlc+KAnSB24bubaSBuaGnhu4F1IGjGoW4gbeG7mXQgY8OieSBsw6BtIHZp4buHYyBsw6AgY2jGsGEgIgorIsSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNjAgc3VibW9kdWxlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSBraeG6v20gdMOqbiBjaG8gbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBzdWJtb2R1bGUuYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgInThu6sgY2jhu5FpIGRpIGNodXnhu4NuICcgJXMgJyB2w6BvIHRyb25nIG3hu5l0IHRoxrAgbeG7pWMgZ2l0IHPhurVuIGPDsyIKKworIzogc3VibW9kdWxlLmM6MjA3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiIKKyInJXMnIHRvXG4iCisiJyVzJ1xuIgorbXNnc3RyICIiCisiRGkgY8awIHRoxrAgbeG7pWMgZ2l0IGPhu6dhIOKAnCVzJXPigJ0gdOG7q1xuIgorIuKAnCVz4oCdIHNhbmdcbiIKKyLigJwlc+KAnVxuIgorCisjOiBzdWJtb2R1bGUuYzoyMTU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWN1cnNlIGludG8gc3VibW9kdWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7hyBxdXkgdsOgbyB0cm9uZyBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IHN1Ym1vZHVsZS5jOjIxOTgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4EgbHMtZmlsZXMgdHJvbmcgLi4iCisKKyM6IHN1Ym1vZHVsZS5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIgorbXNnc3RyICJscy10cmVlIHRy4bqjIHbhu4EgbcOjIGtow7RuZyBuaMawIG1vbmcgxJHhu6NpICVkIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIgorbXNnc3RyICLEkWFuZyBs4budIMSRaSB0w6puIG3DtC3EkXVuLWNvbiBt4bqtcCBt4budOiAlcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjMwMworbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAia2jDtG5nIGNobyBwaMOpcCBnacOhIHRy4buLIMOibSDhu58gc3VibW9kdWxlLmZldGNoSm9icyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAnJXMnIHdoaWNoIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbW1hbmQtbGluZSBvcHRpb246ICVzIgorbXNnc3RyICIiCisixJFhbmcgYuG7jyBxdWEg4oCcJXPigJ0gY8OhaSBtw6AgY8OzIHRo4buDIMSRxrDhu6NjIHBoacOqbiBk4buLY2ggbmjGsCBsw6AgbeG7mXQgdMO5eSBjaOG7jW4gZMOybmcgIgorImzhu4duaDogJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgImdpw6EgdHLhu4sgY2hvICVzIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgbeG7pWMgLmdpdG1vZHVsZXMgJXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgImNo4bqheSBs4buHbmgga8OpbyB0aGVvIOKAnCVz4oCdIGfhurdwIGzhu5dpIgorCisjOiB0cmFpbGVyLmM6NDg1IHRyYWlsZXIuYzo0OTAgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NTQ5IHRyYWlsZXIuYzo1NTMKKyM6IHRyYWlsZXIuYzo1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBnacOhIHRy4buLIOKAnCVz4oCdIGNobyBraMOzYSDigJwlc+KAnSIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIm5oaeG7gXUgaMahbiBt4buZdCAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJ0aOG6uyB0aOG7q2EgdHLhu5FuZyBy4buXbmcgdHJvbmcgcGjhuqduIHRo4burYSDigJwlLipz4oCdIgorCisjOiB0cmFpbGVyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIMSR4buNYyDEkcaw4bujYyB04bqtcCB0aW4gxJHhuqd1IHbDoG8g4oCcJXPigJ0iCisKKyM6IHRyYWlsZXIuYzo3NTMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSAlcyIKKworIzogdHJhaWxlci5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUiCittc2dzdHIgIlwiJXNcIiBraMO0bmcgcGjhuqNpIGzDoCB04bqtcCB0aW4gYsOsbmggdGjGsOG7nW5nIgorCisjOiB0cmFpbGVyLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICJ04bqtcCB0aW4gJXMgbmfGsOG7nWkgZMO5bmcga2jDtG5nIHRo4buDIGdoaSDEkcaw4bujYyIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHThuq1wIHRpbiB04bqhbSB0aOG7nWkiCisKKyM6IHRyYWlsZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUgdG8gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7lWkgdMOqbiB04bqtcCB0aW4gdOG6oW0gdGjhu51pIHRow6BuaCAlcyIKKworIzogdHJhbnNwb3J0LmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhurd0IHRoxrDhu6NuZyBuZ3Xhu5NuIGPhu6dhIOKAnCVz4oCdIHRow6BuaCDigJwlc+KAnSBj4bunYSDigJwlc+KAnVxuIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgYsOzIOKAnCVz4oCdIgorCisjOiB0cmFuc3BvcnQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0OiBpbnZhbGlkIGRlcHRoIG9wdGlvbiAnJXMnIgorbXNnc3RyICJ24bqtbiBjaHV54buDbjogdMO5eSBjaOG7jW4gxJHhu5kgc8OidSDigJwlc+KAnSBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogdHJhbnNwb3J0LmM6MjY2Cittc2dpZCAic2VlIHByb3RvY29sLnZlcnNpb24gaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscyIKK21zZ3N0ciAieGVtIHByb3RvY29sLnZlcnNpb24gdHJvbmcg4oCcZ2l0IGhlbHAgY29uZmln4oCdIMSR4buDIGPDsyB0aMOqbSB0aMO0bmcgdGluIgorCisjOiB0cmFuc3BvcnQuYzoyNjcKK21zZ2lkICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIKK21zZ3N0ciAiY8OhYyB0w7l5IGNo4buNbiBtw6F5IGNo4bunIHnDqnUgY+G6p3UgZ2lhbyB0aOG7qWMgcGhpw6puIGLhuqNuIDIgaG/hurdjIG3hu5tpIGjGoW4iCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgY+G6pXUgaMOsbmggdHJhbnNwb3J0LmNvbG9yLioiCisKKyM6IHRyYW5zcG9ydC5jOjcwNQorbXNnaWQgInN1cHBvcnQgZm9yIHByb3RvY29sIHYyIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgInZp4buHYyBo4buXIHRy4bujIGdpYW8gdGjhu6ljIHYyIGNoxrBhIMSRxrDhu6NjIHRo4buxYyBoaeG7h24iCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgZ2nDoSB0cuG7iyBjaG8gY2hvIGPhuqV1IGjDrG5oIOKAnCVz4oCdOiAlcyIKKworIzogdHJhbnNwb3J0LmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydCAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICJraMO0bmcgY2hvIHBow6lwIHBoxrDGoW5nIHRo4bupYyB24bqtbiBjaHV54buDbiDigJwlc+KAnSIKKworIzogdHJhbnNwb3J0LmM6OTQ5Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAiZ2l0LW92ZXItcnN5bmMga2jDtG5nIGPDsm4gxJHGsOG7o2MgaOG7lyB0cuG7oyBu4buvYSIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIiIKKyJDw6FjIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24gc2F1IMSRw6J5IGPDsyBjaOG7qWEgY8OhYyB0aGF5IMSR4buVaSBjw6FpIG3DoFxuIgorImPDsyB0aOG7gyDEkcaw4bujYyB0w6xtIHRo4bqleSB0csOqbiBt4buNaSBtw6F5IHBo4bulYyB24bulOlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQbGVhc2UgdHJ5XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkjDo3kgdGjhu61cbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorImhv4bq3YyBjZCDEkeG6v24gxJHGsOG7nW5nIGThuqtuIHbDoCBkw7luZ1xuIgorIlxuIgorIlx0Z2l0IHB1c2hcbiIKKyJcbiIKKyLEkeG7gyDEkeG6qXkgY2jDum5nIGzDqm4gbcOheSBwaOG7pWMgduG7pS5cbiIKKyJcbiIKKworIzogdHJhbnNwb3J0LmM6MTA1NgorbXNnaWQgIkFib3J0aW5nLiIKK21zZ3N0ciAiQsOjaSBi4buPLiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4bqpeSBk4buvIGxp4buHdSBj4bunYSB04bqldCBj4bqjIGPDoWMgbcO0LcSRdW4tY29uIGPhuqduIHRoaeG6v3QiCisKKyM6IHRyYW5zcG9ydC5jOjEzNDUgdHJhbnNwb3J0LWhlbHBlci5jOjY1NgorbXNnaWQgIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICJ0aGFvIHTDoWMga2jDtG5nIMSRxrDhu6NjIGdpYSB0aOG7qWMgaOG7lyB0cuG7oyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgImdoaSDEkeG6p3kgxJHhu6cgbMOqbiBi4buZIGjhu5cgdHLhu6MgbcOheSBjaOG7pyBn4bq3cCBs4buXaSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgYuG7mSBo4buXIHRy4bujIG3DoXkgY2jhu6cgY2hvIOKAnCVz4oCdIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTYwIHRyYW5zcG9ydC1oZWxwZXIuYzo1NzAKK21zZ2lkICJjYW4ndCBkdXAgaGVscGVyIG91dHB1dCBmZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG5ow6JuIMSRw7RpIGZkIGThuqd1IHJhIGLhu5kgaOG7lyB0cuG7oyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAiIgorImtow7RuZyBoaeG7g3UgY2FwYWJpbGl0eSBi4bqvdCBideG7mWMgJXM7IGLhu5kgaOG7lyB0cuG7oyBtw6F5IGNo4bunIG7DoHkgZ+G6p24gbmjGsCBjaOG6r2MgY2jhuq9uICIKKyJsw6AgY+G6p24gcGhpw6puIGLhuqNuIEdpdCBt4bubaSBoxqFuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICJi4buZIGjhu5cgdHLhu6MgbcOheSBjaOG7pyBuw6B5IGPhuqduIHBo4bqjaSB0aOG7sWMgdGhpIGNhcGFiaWxpdHkgxJHhurdjIHThuqMgdGhhbSBjaGnhur91IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Mjg0IHRyYW5zcG9ydC1oZWxwZXIuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciCittc2dzdHIgIiVzIHNhaWQgYuG6pXQgbmfhu506IOKAnCVz4oCdIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsc28gbG9ja2VkICVzIgorbXNnc3RyICIlcyBjxaluZyBraMOzYSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQ5MgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWltcG9ydCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNo4bqheSBmYXN0LWltcG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjUxNQorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1pbXBvcnQiCittc2dzdHIgImfhurdwIGzhu5dpIHRyb25nIGtoaSBjaOG6oXkgZmFzdC1pbXBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1NDQgdHJhbnNwb3J0LWhlbHBlci5jOjExMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHRoYW0gY2hp4bq/dSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IMSRw6FwIOG7qW5nIMSR4buDIGvhur90IG7hu5FpOiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxMQorbXNnaWQgInNldHRpbmcgcmVtb3RlIHNlcnZpY2UgcGF0aCBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICJnaWFvIHRo4bupYyBuw6B5IGtow7RuZyBo4buXIHRy4bujIGPDoGkgxJHhurd0IMSRxrDhu51uZyBk4bqrbiBk4buLY2ggduG7pSBtw6F5IGNo4bunIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEzCittc2dpZCAiaW52YWxpZCByZW1vdGUgc2VydmljZSBwYXRoIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gZOG7i2NoIHbhu6UgbcOheSBjaOG7pyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjb25uZWN0IHRvIHN1YnNlcnZpY2UgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBr4bq/dCBu4buRaSDEkeG6v24gZOG7i2NoIHbhu6UgcGjhu6UgJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciCittc2dzdHIgImPhuqduIG9rL2Vycm9yLCBuaMawbmcgYuG7mSBo4buXIHRy4bujIGzhuqFpIG7Ds2kg4oCcJXPigJ0iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICJi4buZIGjhu5cgdHLhu6MgYsOhbyBjw6FvIHLhurFuZyBraMO0bmcgY+G6p24gdMOsbmggdHLhuqFuZyBj4bunYSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIgorbXNnc3RyICJoZWxwZXIgJXMga2jDtG5nIGjhu5cgdHLhu6MgZHJ5LXJ1biIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCIKK21zZ3N0ciAiaGVscGVyICVzIGtow7RuZyBo4buXIHRy4bujIC0tc2lnbmVkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICJoZWxwZXIgJXMga2jDtG5nIGjhu5cgdHLhu6MgLS1zaWduZWQ9aWYtYXNrZWQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMiCittc2dzdHIgImhlbHBlciAlcyBraMO0bmcgaOG7lyB0cuG7oyAtLWF0b21pYyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAncHVzaC1vcHRpb24nIgorbXNnc3RyICJoZWxwZXIgJXMga2jDtG5nIGjhu5cgdHLhu6Mg4oCccHVzaC1vcHRpb27igJ0iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjQKK21zZ2lkICJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIKK21zZ3N0ciAicmVtb3RlLWhlbHBlciBraMO0bmcgaOG7lyB0cuG7oyBwdXNoOyBj4bqnbiDEkeG6t2MgdOG6oyB0aGFtIGNoaeG6v3UiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAiaGVscGVyICVzIGtow7RuZyBo4buXIHRy4bujIOKAnGZvcmNl4oCdIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNo4bqheSBmYXN0LWV4cG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjEKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICJn4bq3cCBs4buXaSB0cm9uZyBraGkgY2jhuqF5IGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgY8OzIGPDoWMgdGhhbSBjaGnhur91IHRyb25nIHBo4bqnbiBjaHVuZyB2w6AgY2jGsGEgY2jhu4kgxJHhu4tuaDsgbsOqbiBraMO0bmcgbMOgbSBnw6wgIgorImPhuqMuXG4iCisiVHV5IG5oacOqbiBi4bqhbiBuw6puIGNo4buJIMSR4buLbmggbeG7mXQgbmjDoW5oIG5oxrAg4oCcbWFzdGVy4oCdIGNo4bqzbmcgaOG6oW4uXG4iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCByZXNwb25zZSBpbiByZWYgbGlzdDogJXMiCittc2dzdHIgIsSRw6FwIOG7qW5nIHNhaSBk4bqhbmcgdHJvbmcgZGFuaCBzw6FjaCB0aGFtIGNoaeG6v3U6ICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkKCVzKSBmYWlsZWQiCittc2dzdHIgInJlYWQoJXMpIGfhurdwIGzhu5dpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cml0ZSglcykgZmFpbGVkIgorbXNnc3RyICJ3cml0ZSglcykgZ+G6t3AgbOG7l2kiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgInR1eeG6v24gdHLDrG5oICVzIGfhurdwIGzhu5dpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIHRvIGpvaW46ICVzIgorbXNnc3RyICJ0dXnhur9uIHRyw6xuaCAlcyBn4bq3cCBs4buXaSBraGkgZ2lhIG5o4bqtcDogJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzcwIHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGto4bufaSBjaOG6oXkgdHV54bq/biB0csOsbmggxJHhu4Mgc2FvIGNow6lwIGThu68gbGnhu4d1OiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQgdG8gd2FpdCIKK21zZ3N0ciAieOG7rSBsw70gJXMgZ+G6t3AgbOG7l2kga2hpIMSR4bujaSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgInjhu60gbMO9ICVzIGfhurdwIGzhu5dpIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQzMyB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0MgorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSB0dXnhur9uIHRyw6xuaCBjaG8gdmnhu4djIGNow6lwIGThu68gbGnhu4d1IgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGPDonkgcXXDoSBuZ+G6r24iCisKKyM6IHRyZWUtd2Fsay5jOjM5Cittc2dpZCAibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAiY2jhur8gxJHhu5kgZOG7iyBow6xuaCB0cm9uZyDEkeG7gSBt4bulYyBjw6J5IgorCisjOiB0cmVlLXdhbGsuYzo0MworbXNnaWQgImVtcHR5IGZpbGVuYW1lIGluIHRyZWUgZW50cnkiCittc2dzdHIgInTDqm4gdOG6rXAgdGluIHRy4buRbmcgcuG7l25nIHRyb25nIG3hu6VjIHRpbiBjw6J5IgorCisjOiB0cmVlLXdhbGsuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IGNvbnRhaW5zIGJhY2tzbGFzaDogJyVzJyIKK21zZ3N0ciAidMOqbiB04bqtcCB0aW4gdHJvbmcgbeG7pWMgdGluIGPDonkgY8OzIGNo4bupYSBrw70gdOG7sSBn4bqhY2ggbmfGsOG7o2M6ICclcyciCisKKyM6IHRyZWUtd2Fsay5jOjEyNAorbXNnaWQgInRvby1zaG9ydCB0cmVlIGZpbGUiCittc2dzdHIgInThuq1wIHRpbiBjw6J5IHF1w6Egbmfhuq9uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiQ8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIGPhu6dhIGLhuqFuIHbhu5tpIGPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyJjaGVja291dDpcbiIKKyIlJXNWdWkgbMOybmcgY2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpIGhheSB04bqhbSBj4bqldCBjaMO6bmcgxJFpIHRyxrDhu5tjIGtoaSBi4bqhbiAiCisiY2h1eeG7g24gbmjDoW5oLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gduG7m2kgY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorImNoZWNrb3V0OlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQ8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIGPhu6dhIGLhuqFuIHbhu5tpIGPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyJow7JhIHRy4buZbjpcbiIKKyIlJXNWdWkgbMOybmcgY2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpIGhheSB04bqhbSBj4bqldCBjaMO6bmcgxJFpIHRyxrDhu5tjIGtoaSBi4bqhbiBow7JhICIKKyJ0cuG7mW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSBj4bunYSBi4bqhbiB24bubaSBjw6FjIHThuq1wIHRpbiBzYXUgxJHDonkgc+G6vSBi4buLIGdoaSDEkcOoIGLhu59pIGzhu4duaCAiCisiaMOyYSB0cuG7mW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyJDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gduG7m2kgY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorIiVzOlxuIgorIiUlc1Z1aSBsw7JuZyBjaHV54buDbiBnaWFvIGPDoWMgdGhheSDEkeG7lWkgaGF5IHThuqFtIGPhuqV0IGNow7puZyDEkWkgdHLGsOG7m2Mga2hpIGLhuqFuICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gduG7m2kgY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorIiVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyJWaeG7h2MgY+G6rXAgbmjhuq10IGPDoWMgdGjGsCBt4bulYyBzYXUgxJHDonkgY8OzIHRo4buDIGzDoG0gbeG6pXQgY8OhYyB04bqtcCB0aW4gY2jGsGEgdGhlbyBkw7VpICIKKyJ0cm9uZyBuw7M6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBn4buhIGLhu48gYuG7n2kgbOG7h25oICIKKyJjaGVja291dDpcbiIKKyIlJXNWdWkgbMOybmcgZGkgY2h1eeG7g24gaGF5IGfhu6EgYuG7jyBjaMO6bmcgdHLGsOG7m2Mga2hpIGLhuqFuIGNodXnhu4NuIG5ow6FuaC4iCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBn4buhIGLhu48gYuG7n2kgbOG7h25oICIKKyJjaGVja291dDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyJDw6FjIHThuq1wIHRpbiBjw6J5IGzDoG0gdmnhu4djIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBzYXUgxJHDonkgc+G6vSBi4buLIGfhu6EgYuG7jyBi4bufaSBs4buHbmggaMOyYSAiCisidHLhu5luOlxuIgorIiUlc1Z1aSBsw7JuZyBkaSBjaHV54buDbiBoYXkgZ+G7oSBi4buPIGNow7puZyB0csaw4bubYyBraGkgYuG6oW4gaMOyYSB0cuG7mW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHNhdSDEkcOieSBz4bq9IGLhu4sgZ+G7oSBi4buPIGLhu59pIGzhu4duaCBow7JhICIKKyJ0cuG7mW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBn4buhIGLhu48gYuG7n2kgJXM6XG4iCisiJSVzVnVpIGzDsm5nIGRpIGNodXnhu4NuIGhheSBn4buhIGLhu48gY2jDum5nIHRyxrDhu5tjIGtoaSBi4bqhbiAlcy4iCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBn4buhIGLhu48gYuG7n2kgJXM6XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAiCisiY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorImNoZWNrb3V0OlxuIgorIiUlc1Z1aSBsw7JuZyBkaSBjaHV54buDbiBoYXkgZ+G7oSBi4buPIGNow7puZyB0csaw4bubYyBraGkgYuG6oW4gY2h1eeG7g24gbmjDoW5oLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyJjaGVja291dDpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorImjDsmEgdHLhu5luOlxuIgorIiUlc1Z1aSBsw7JuZyBkaSBjaHV54buDbiBoYXkgZ+G7oSBi4buPIGNow7puZyB0csaw4bubYyBraGkgYuG6oW4gaMOyYSB0cuG7mW4uIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyJDw6FjIHThuq1wIHRpbiBjw6J5IGzDoG0gdmnhu4djIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBzYXUgxJHDonkgc+G6vSBi4buLIGdoaSDEkcOoIGLhu59pIGzhu4duaCAiCisiaMOyYSB0cuG7mW46XG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHNhdSDEkcOieSBz4bq9IGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oICIKKyIlczpcbiIKKyIlJXNWdWkgbMOybmcgZGkgY2h1eeG7g24gaGF5IGfhu6EgYuG7jyBjaMO6bmcgdHLGsOG7m2Mga2hpIGLhuqFuICVzLiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggIgorIiVzOlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICJN4bulYyDigJwlc+KAnSDEkcOoIGzDqm4g4oCcJXPigJ0uIEtow7RuZyB0aOG7gyBideG7mWMuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCBjaGVja291dCBy4bqjaSByw6FjOiBjw6FjIG3hu6VjIHRpbiBzYXUgxJHDonkgY2jGsGEgY+G6rXAgbmjhuq10OlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisiQ8OhYyB04bqtcCB0aW4gY8OieSBsw6BtIHZp4buHYyBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgc2F1IMSRw6J5IHPhur0gYuG7iyBnaGkgxJHDqCBi4bufaSBj4bqtcCAiCisibmjhuq10IGNoZWNrb3V0IHLhuqNpIHLDoWM6XG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MgY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIHNhdSDEkcOieSBz4bq9IGLhu4sgeMOzYSBi4buPIGLhu59pIGPhuq1wICIKKyJuaOG6rXQgY2hlY2tvdXQgcuG6o2kgcsOhYzpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgbcO0LcSRdW4tY29uOlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAiQsOjaSBi4buPXG4iCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICLEkGFuZyBj4bqtcCBuaOG6rXQgY8OhYyB04bqtcCB0aW4iCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorImPDoWMgxJHGsOG7nW5nIGThuqtuIHNhdSDEkcOieSBjw7MgeHVuZyDEkeG7mXQodmQ6IGPDoWMgxJHGsOG7nW5nIGThuqtuIHBow6JuIGJp4buHdFxuIgorIkhPQS90aMaw4budbmcgdHLDqm4gbeG7mXQgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgcGjDom4gYmnhu4d0IEhPQS90aMaw4budbmcpXG4iCisidsOgIGNo4buJIG3hu5l0IHThu6sgY8O5bmcgbeG7mXQgbmjDs20geHVuZyDEkeG7mXQgbMOgIHRyb25nIGPDonkgbMOgbSB2aeG7h2MgaGnhu4duIHThuqFpOlxuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQxCittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIsSQYW5nIGPhuq1wIG5o4bqtdCBjw6FjIGPhu50gbeG7pWMgbOG7pWMiCisKKyM6IHVybG1hdGNoLmM6MTYzCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgInTDqm4gbMaw4bujYyDEkeG7kyBVUkwga2jDtG5nIGjhu6NwIGzhu4csIGhv4bq3YyB0aGnhur91IGjhuq11IHThu5Eg4oCcOi8v4oCdIgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInRob8OhdCBjaHXhu5dpICVYWCBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAidGhp4bq/dSBtw6F5IGNo4bunIHbDoCBsxrDhu6NjIMSR4buTIHRow6wga2jDtG5nIHBo4bqjaSBsw6AgZ2lhbyB0aOG7qWMg4oCcZmlsZTrigJ0iCisKKyM6IHVybG1hdGNoLmM6MjMyCittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAibeG7mXQgVVJMIGtp4buDdSDigJxmaWxlOuKAnSBraMO0bmcgxJHGsOG7o2MgY2jhu6lhIGPhu5VuZyIKKworIzogdXJsbWF0Y2guYzoyNDcKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJjw7MgY8OhYyBrw70gdOG7sSBraMO0bmcgaOG7o3AgbOG7hyB0cm9uZyB0w6puIG3DoXkiCisKKyM6IHVybG1hdGNoLmM6MjkyIHVybG1hdGNoLmM6MzAzCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAidMOqbiBj4buVbmcga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAixJFv4bqhbiDEkcaw4budbmcgZOG6q24g4oCcLi7igJ0ga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IHdvcmt0cmVlLmM6MjU4IGJ1aWx0aW4vYW0uYzoyMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7jWMg4oCcJXPigJ0iCisKKyM6IHdvcmt0cmVlLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAi4oCcJXPigJ0gdOG6oWkgY8OieSBsw6BtIHZp4buHYyBjaMOsbmgga2jDtG5nIHBo4bqjaSBsw6AgdGjGsCBt4bulYyBraG8iCisKKyM6IHdvcmt0cmVlLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorInThuq1wIHRpbiDigJwlc+KAnSBraMO0bmcgY2jhu6lhIMSRxrDhu51uZyBk4bqrbiB0dXnhu4d0IMSR4buRaSDEkeG6v24gduG7iyB0csOtIGPDonkgbMOgbSB2aeG7h2MgaGnhu4duIgorCisjOiB3b3JrdHJlZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJcIiVzXCIga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiB3b3JrdHJlZS5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgdOG6rXAgdGluIC5naXQsIG3DoyBs4buXaSAlZCIKKworIzogd29ya3RyZWUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBjaOG7iSBuZ8aw4bujYyDEkeG6v24g4oCcJXPigJ0iCisKKyM6IHdyYXBwZXIuYzoxODYgd3JhcHBlci5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyDigJwlc+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+4oCmIgorCisjOiBidWlsdGluL2FkZC5jOjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInRy4bqhbmcgdGjDoWkgbOG7h25oIGRpZmYga2jDtG5nIG5oxrAgbW9uZyDEkeG7o2kgJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTIgYnVpbHRpbi9jb21taXQuYzoyODgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImPhuq1wIG5o4bqtdCB04bqtcCB0aW4gZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgImfhu6EgYuG7jyDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL2FkZC5jOjE3NworbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICIiCisixJDGsGEgcmEga2jhu49pIGLhu4cgcGjDs25nIGPDoWMgdGhheSDEkeG7lWkgc2F1IGtoaSBsw6BtIHTGsMahaSBt4bubaSBs4bqhaSBi4bqjbmcgbeG7pWMgbOG7pWM6IgorCisjOiBidWlsdGluL2FkZC5jOjI1MiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSDEkeG7gyBnaGkuIgorCisjOiBidWlsdGluL2FkZC5jOjI2NworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSByYSBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9hZGQuYzoyNzAKK21zZ2lkICJlZGl0aW5nIHBhdGNoIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHPhu61hIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2FkZC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2FkZC5jOjI3NQorbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiTWnhur9uZyB2w6EgdHLhu5FuZyBy4buXbmcuIE7Dqm4gYuG7jyBxdWEuIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMOhcCBk4bulbmcgbWnhur9uZyB2w6Eg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg4Cittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisiQ8OhYyDEkcaw4budbmcgZOG6q24gdGhlbyBzYXUgxJHDonkgc+G6vSBi4buLIGzhu50gxJFpIGLhu59pIG3hu5l0IHRyb25nIGPDoWMgdOG6rXAgdGluIC5naXRpZ25vcmUgIgorImPhu6dhIGLhuqFuOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjMwOCBidWlsdGluL2NsZWFuLmM6OTEwIGJ1aWx0aW4vZmV0Y2guYzoxNjMgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMjMgYnVpbHRpbi9wdXNoLmM6NTQ4CisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDQgYnVpbHRpbi9ybS5jOjI0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgImNo4bqheSB0aOG7rSIKKworIzogYnVpbHRpbi9hZGQuYzozMTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICJz4butYSBi4bqxbmcgY8OhY2ggdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2FkZC5jOjMxMiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MiBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgImNo4buNbiDigJxodW5rc+KAnSB0aGVvIGtp4buDdSB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEzCittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICJz4butYSBkaWZmIGhp4buHbiBuYXkgdsOgIMOhcCBk4bulbmcgbsOzIgorCisjOiBidWlsdGluL2FkZC5jOjMxNAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiY2hvIHBow6lwIHRow6ptIGPDoWMgdOG6rXAgdGluIGLhu4sgYuG7jyBxdWEga2jDoWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE1Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgImPhuq1wIG5o4bqtdCBjw6FjIHThuq1wIHRpbiDEkcaw4bujYyB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE2Cittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICJ0aMaw4budbmcgaMOzYSBs4bqhaSBFT0wgY+G7p2EgY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgdGhlbyBkw7VpICjDvSBsw6AgLXUpIgorCisjOiBidWlsdGluL2FkZC5jOjMxNworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiY2jhu4kgZ2hpIGzhuqFpIHPhu7Egdmnhu4djIG3DoCDEkcaw4budbmcgZOG6q24gc+G6vSDEkcaw4bujYyB0aMOqbSB2w6BvIHNhdSIKKworIzogYnVpbHRpbi9hZGQuYzozMTgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKyJ0aMOqbSBjw6FjIHRoYXkgxJHhu5VpIHThu6sgdOG6pXQgY+G6oyBjw6FjIHThuq1wIHRpbiBjw7MgY8WpbmcgbmjGsCBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIGThuqV1ICIKKyJ24bq/dCIKKworIzogYnVpbHRpbi9hZGQuYzozMjEKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiIgorImzhu50gxJFpIGPDoWMgxJHGsOG7nW5nIGThuqtuIGLhu4sgZ+G7oSBi4buPIHRyb25nIGPDonkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyAoZ2nhu5FuZyB24bubaSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIzCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjDqm0sIGNo4buJIGzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hZGQuYzozMjQKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICJjaGllIGLhu48gcXVhIG5o4buvbmcgdOG6rXAgdGluIG3DoCBuw7Mga2jDtG5nIHRo4buDIMSRxrDhu6NjIHRow6ptIHbDoG8gYuG7n2kgdsOsIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorImtp4buDbSB0cmEgeGVtIC0gdGjhuq1tIGNow60gdGhp4bq/dSAtIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIHRyb25nIHF1w6EgdHLDrG5oIGNo4bqheSB0aOG7rSIKKworIzogYnVpbHRpbi9hZGQuYzozMjcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgImdoaSDEkcOoIGzDqm4gYsOtdCB0aGkgaMOgbmggY+G7p2EgY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgbGnhu4d0IGvDqiIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgImPhuqNuaCBiw6FvIGtoaSB0aMOqbSBt4buZdCBraG8gbmjDum5nIgorCisjOiBidWlsdGluL2FkZC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91J3ZlIGFkZGVkIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgaW5zaWRlIHlvdXIgY3VycmVudCByZXBvc2l0b3J5LlxuIgorIkNsb25lcyBvZiB0aGUgb3V0ZXIgcmVwb3NpdG9yeSB3aWxsIG5vdCBjb250YWluIHRoZSBjb250ZW50cyBvZlxuIgorInRoZSBlbWJlZGRlZCByZXBvc2l0b3J5IGFuZCB3aWxsIG5vdCBrbm93IGhvdyB0byBvYnRhaW4gaXQuXG4iCisiSWYgeW91IG1lYW50IHRvIGFkZCBhIHN1Ym1vZHVsZSwgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJJZiB5b3UgYWRkZWQgdGhpcyBwYXRoIGJ5IG1pc3Rha2UsIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlXG4iCisiaW5kZXggd2l0aDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIkLhuqFuIHbhu6thIHRow6ptIG3hu5l0IGtobyBnaXQgdsOgbyBiw6puIHRyb25nIGtobyBoaeG7h24gdOG6oWkgY+G7p2EgYuG6oW4uXG4iCisiQ8OhYyBi4bqjbiBzYW8gY+G7p2Ega2hvIG5nb8OgaSBz4bq9IGtow7RuZyBjaOG7qWEgY8OhYyBu4buZaSBkdW5nIGPhu6dhXG4iCisia2hvIG5ow7puZyB2w6Agc+G6vSBraMO0bmcgYmnhur90IGzDoG0gdGjhur8gbsOgbyDEkeG7gyBs4bqleSBuw7MuXG4iCisiTuG6v3Ugw70gYuG6oW4gbMOgIHRow6ptIG3hu5l0IG3DtC3EkXVuLWNvbiwgaMOjeSBjaOG6oXk6XG4iCisiXG4iCisiXHRnaXQgc3VibW9kdWxlIGFkZCA8dXJsPiAlc1xuIgorIlxuIgorIk7hur91IGLhuqFuIMSRw6MgdGjDqm0gbWnhur9uZyB2w6EgbsOgeSBjaOG7iSBsw6Agc2FpIHPDs3QsIGLhuqFuIGPDsyB0aOG7gyB4w7NhIGLhu49cbiIKKyJuw7Mga2jhu49pIG3hu6VjIGzhu6VjIGLhurFuZzpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlhlbSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LiIKKworIzogYnVpbHRpbi9hZGQuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5nIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAidGjDqm0gY+G6p24gbeG7mXQga2hvIGdpdCBuaMO6bmc6ICVzIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJT4butIGThu6VuZyB0w7l5IGNo4buNbiAtZiBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gdGjDqm0gY2jDum5nIHbDoG8uXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDAwCittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAidGjDqm0gdOG6rXAgdGluIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FkZC5jOjQyOCBidWlsdGluL2NvbW1pdC5jOjM0OAorI3wgbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgeHVuZyBraOG6r2MgduG7m2kgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjQzNAorI3wgbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgeHVuZyBraOG6r2MgduG7m2kgLS1lZGl0IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSB2w6AgLXUgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9hZGQuYzo0NDkKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICJUw7l5IGNo4buNbiAtLWlnbm9yZS1taXNzaW5nIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBkw7luZyBjw7luZyB24bubaSAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tY2htb2QgcGFyYW0gJyVzJyBtdXN0IGJlIGVpdGhlciAteCBvciAreCIKK21zZ3N0ciAiLS1jaG1vZCB0aGFtIHPhu5Eg4oCcJXPigJ0gcGjhuqNpIGhv4bq3YyBsw6AgLXggaGF5ICt4IgorCisjOiBidWlsdGluL2FkZC5jOjQ3MSBidWlsdGluL2NoZWNrb3V0LmM6MTY0OCBidWlsdGluL2NvbW1pdC5jOjM1NAorIzogYnVpbHRpbi9yZXNldC5jOjMyNworI3wgbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHh1bmcga2jhuq9jIHbhu5tpIGPDoWMgdGhhbSBz4buRIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiIKKworIzogYnVpbHRpbi9hZGQuYzo0NzggYnVpbHRpbi9jaGVja291dC5jOjE2NjAgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIGPhuqduIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBnw6wgxJHGsOG7o2MgY2jhu4kgcmEsIGtow7RuZyBjw7MgZ8OsIMSRxrDhu6NjIHRow6ptIHbDoG8uXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICJDw7MgbOG6vSDDvSBi4bqhbiBsw6Ag4oCcZ2l0IGFkZCAu4oCdIHBo4bqjaSBraMO0bmc/XG4iCisKKyM6IGJ1aWx0aW4vYW0uYzozNDcKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCB2xINuIGzhu4duaCB0w6FjIGdp4bqjIgorCisjOiBidWlsdGluL2FtLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIuKAnCVz4oCdIGLhu4sgeMOzYSBi4bufaSBtw7NjIGFwcGx5cGF0Y2gtbXNnIgorCisjOiBidWlsdGluL2FtLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiRMOybmcgxJHhuqd1IHbDoG8gZOG7iyBow6xuaDog4oCcJXPigJ0uIgorCisjOiBidWlsdGluL2FtLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgc2FvIGNow6lwIGdoaSBjaMO6IChub3RlKSB04burIOKAnCVz4oCdIHThu5tpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2FtLmM6NTM3Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJmc2VlayBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9hbS5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiBwaMOhcCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9hbS5jOjc5MAorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJDaOG7iSBjw7MgbeG7mXQgc8OqLXJpIG1p4bq/bmcgdsOhIFN0R0lUIMSRxrDhu6NjIMOhcCBk4bulbmcgbeG7mXQgbMO6YyIKKworIzogYnVpbHRpbi9hbS5jOjgzOAorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJk4bqldSB0aOG7nWkgZ2lhbiBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9hbS5jOjg0MyBidWlsdGluL2FtLmM6ODU1Cittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgImTDsm5nIE5nw6B5IHRow6FuZyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9hbS5jOjg1MAorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICLEkeG7mSBs4buHY2ggbcO6aSBnaeG7nSBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9hbS5jOjk0MworbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiRMOyIHTDrG0gxJHhu4tuaCBk4bqhbmcgbWnhur9uZyB2w6EgZ+G6t3AgbOG7l2kuIgorCisjOiBidWlsdGluL2FtLmM6OTQ4IGJ1aWx0aW4vY2xvbmUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAidOG6oW8gdGjGsCBt4bulYyBcIiVzXCIgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTMKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBjaGlhIG5o4buPIGPDoWMgbWnhur9uZyB2w6EuIgorCisjOiBidWlsdGluL2FtLmM6MTA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiS2hpIGLhuqFuIMSRw6MgcGjDom4gZ2nhuqNpIHhvbmcgdHLhu6VjIHRy4bq3YyBuw6B5LCBow6N5IGNo4bqheSBcIiVzIC0tY29udGludWVcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIk7hur91IGLhuqFuIG114buRbiBi4buPIHF1YSBtaeG6v25nIHbDoSBuw6B5LCBow6N5IGNo4bqheSBs4buHbmggXCIlcyAtLXNraXBcIiDEkeG7gyB0aGF5IHRo4bq/LiIKKworIzogYnVpbHRpbi9hbS5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICLEkOG7gyBwaOG7pWMgaOG7k2kgbOG6oWkgbmjDoW5oIGfhu5FjIHbDoCBk4burbmcgdsOhLCBow6N5IGNo4bqheSBcIiVzIC0tYWJvcnRcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTY5Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIiIKKyJNaeG6v25nIHbDoSDEkcaw4bujYyBn4butaSB24bubaSBmb3JtYXQ9Zmxvd2VkOyBraG/huqNuZyB0cuG7kW5nIOG7nyBjdeG7kWkgY+G7p2EgY8OhYyBkw7JuZyBjw7MgdGjhu4MgIgorImLhu4sgbeG6pXQuIgorCisjOiBidWlsdGluL2FtLmM6MTE5NworbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiTWnhur9uZyB2w6EgdHLhu5FuZyBy4buXbmcuIgorCisjOiBidWlsdGluL2FtLmM6MTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAidGhp4bq/dSBkw7JuZyB0w6FjIGdp4bqjIHRyb25nIGzhuqduIGNodXnhu4NuIGdpYSAlcyIKKworIzogYnVpbHRpbi9hbS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICJkw7JuZyB0aOG7pXQgbOG7gSBraMO0bmcgaOG7o3AgbOG7hzogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICJLaG8gdGhp4bq/dSDEkeG7kWkgdMaw4bujbmcgYmxvYiBj4bqnbiB0aGnhur90IMSR4buDIHRy4bufIHbhu4EgdHLDqm4g4oCcMy13YXkgbWVyZ2XigJ0uIgorCisjOiBidWlsdGluL2FtLmM6MTQ4NgorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIiIKKyJT4butIGThu6VuZyB0aMO0bmcgdGluIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyDEkeG7gyBj4bqldSB0csO6YyBs4bqhaSBt4buZdCBjw6J5ICh0cmVlKSBjxqEgc+G7n+KApiIKKworIzogYnVpbHRpbi9hbS5jOjE1MDUKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiQuG6oW4gxJHDoyBz4butYSBtaeG6v25nIHbDoSBj4bunYSBtw6xuaCBi4bqxbmcgY8OhY2ggdGjhu6cgY8O0bmcgw6A/XG4iCisiTsOzIGtow7RuZyB0aOG7gyDDoXAgZOG7pW5nIGPDoWMgYmxvYiDEkcOjIMSRxrDhu6NjIGdoaSBs4bqhaSB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMgY+G7p2EgbsOzLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTEKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIsSQYW5nIHRy4bufIGzhuqFpIMSR4buDIHbDoSBjxqEgc+G7nyB2w6Ag4oCcaMOyYSB0cuG7mW4gMy3Ekcaw4budbmfigJ3igKYiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTM3Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRy4buZbiB2w6BvIGPDoWMgdGhheSDEkeG7lWkuIgorCisjOiBidWlsdGluL2FtLmM6MTU2OQorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgIsOhcCBk4bulbmcgdsOgbyBt4buZdCBs4buLY2ggc+G7rSB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9hbS5jOjE2MTYgYnVpbHRpbi9hbS5jOjE2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjhu6VjIGjhu5NpOiAlcyBraMO0bmcgdOG7k24gdOG6oWkuIgorCisjOiBidWlsdGluL2FtLmM6MTYzOAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiVGjDom4gY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyBsw6A6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICIiCisiw4FwIGThu6VuZz8gxJHhu5NuZyDDvSBbeV0va2jDtFtuXWcvY2jhu4luaCBz4butYSBbZV0vaGnhu4NuIHRo4buLIG1p4bq/bmcgW3Zdw6EvY2jhuqVwIG5o4bqtbiB04bqldCAiCisiY+G6oyBbYV06ICIKKworIzogYnVpbHRpbi9hbS5jOjE2OTUgYnVpbHRpbi9jb21taXQuYzozOTQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hbS5jOjE2OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICJC4bqjbmcgbeG7pWMgbOG7pWMgYuG6qW46IGtow7RuZyB0aOG7gyDDoXAgZOG7pW5nIGPDoWMgbWnhur9uZyB2w6EgKGLhuqluOiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzM5IGJ1aWx0aW4vYW0uYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICLDgXAgZOG7pW5nOiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc1NgorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiS2jDtG5nIHRoYXkgxJHhu5VpIGfDrCBj4bqjIC0tIE1p4bq/bmcgdsOhIMSRw6MgxJHGsOG7o2Mgw6FwIGThu6VuZyBy4buTaS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdsOhIHThuqFpICVzICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY2Cittc2dpZCAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2gnIHRvIHNlZSB0aGUgZmFpbGVkIHBhdGNoIgorbXNnc3RyICJEw7luZyDigJxnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2jigJ0gxJHhu4MgeGVtIG1p4bq/bmcgdsOhIGLhu4sgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODEwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIC0gYuG6oW4gxJHDoyBxdcOqbiBz4butIGThu6VuZyBs4buHbmgg4oCcZ2l0IGFkZOKAnSDDoD9cbiIKKyJO4bq/dSDhu58gxJHDonkga2jDtG5nIGPDsyBnw6wgY8OybiBs4bqhaSBzdGFnZSwgdMOsbmggY+G7nSBsw6AgY8OzIG3hu5l0IHPhu5EgdGjhu6kga2jDoWNcbiIKKyLEkcOjIHPhurVuIMSRxrDhu6NjIMSRxrBhIHbDoG8gduG7m2kgY8O5bmcgbuG7mWkgZHVuZyB0aGF5IMSR4buVaTsgYuG6oW4gY8OzIGzhur0gbXXhu5FuIGLhu48gcXVhIG1p4bq/bmcgIgorInbDoSBuw6B5LiIKKworIzogYnVpbHRpbi9hbS5jOjE4MTcKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyJC4bqhbiB24bqrbiBjw7Mgbmjhu69uZyDEkcaw4budbmcgZOG6q24gY2jGsGEgaMOyYSB0cuG7mW4gdHJvbmcgY2jhu4kgbeG7pWMgY+G7p2EgYuG6oW4uXG4iCisiQuG6oW4gbsOqbiDigJxnaXQgYWRk4oCdIHThu6tuZyB04bqtcCB0aW4gduG7m2kgY8OhYyB4dW5nIMSR4buZdCDEkcOjIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IMSR4buDIMSRw6FuaCAiCisiZOG6pXUgY2jDum5nIGzDoCB0aOG6vy5cbiIKKyJC4bqhbiBjw7MgbOG6vSBtdeG7kW4gY2jhuqF5IOKAnGdpdCBybeKAnCB0csOqbiBt4buZdCB04bqtcCB0aW4gxJHhu4MgY2jhuqVwIG5o4bqtbiBcIsSRxrDhu6NjIHjDs2EgYuG7n2kgaOG7jSIKKyJcIiBjaG8gbsOzLiIKKworIzogYnVpbHRpbi9hbS5jOjE5MjQgYnVpbHRpbi9hbS5jOjE5MjggYnVpbHRpbi9hbS5jOjE5NDAgYnVpbHRpbi9yZXNldC5jOjM0NgorIzogYnVpbHRpbi9yZXNldC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggxJHhu5FpIHTGsOG7o25nIOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9hbS5jOjE5NzYKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBk4buNbiBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDIwCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJC4bqhbiBjw7MgbOG6vSDEkcOjIGPDsyBIRUFEIMSRw6MgYuG7iyBkaSBjaHV54buDbiDEkWkga+G7gyB04burIGzhuqduIOKAnGFt4oCdIHRo4bqldCBi4bqhaSBjdeG7kWkgY8O5bmcuXG4iCisiS2jDtG5nIHRo4buDIGNodXnhu4NuIHThu5tpIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJHacOhIHRy4buLIGtow7RuZyBo4bujcCBs4buHIGNobyAtLXBhdGNoLWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTUzCittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbKDxtYm94Pnw8TWFpbGRpcj4p4oCmXSIKKworIzogYnVpbHRpbi9hbS5jOjIxNTQKK21zZ2lkICJnaXQgYW0gWzxvcHRpb25zPl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFs8Y8OhYyB0w7l5IGNo4buNbj5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImNo4bqheSBraeG7g3UgdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2FtLmM6MjE2MgorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJ0w7l5IGNo4buNbiBs4buLY2ggc+G7rSAtLSBraMO0bmctdG/DoW4tdOG7rSIKKworIzogYnVpbHRpbi9hbS5jOjIxNjQKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAiY2hvIHBow6lwIHF1YXkgdHLhu58gbOG6oWkgxJHhu4MgaMOyYSB0cuG7mW4ga2nhu4N1IOKAnDN3YXnigJ0gbuG6v3UgY+G6p24iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY1IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU4CisjOiBidWlsdGluL3JlcGFjay5jOjMwNCBidWlsdGluL3N0YXNoLmM6ODExCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgImltIGzhurduZyIKKworIzogYnVpbHRpbi9hbS5jOjIxNjcKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJ0aMOqbSBkw7JuZyBTaWduZWQtb2ZmLWJ5IGNobyBnaGkgY2jDuiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2FtLmM6MjE3MAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICJjaHV54buDbiBtw6MgdGjDoG5oIHV0ZjggKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImNodXnhu4NuIGPhu50gLWsgY2hvIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIxNzQKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJjaHV54buDbiBj4budIC1iIGNobyBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc2Cittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiY2h1eeG7g24gY+G7nSAtbSBjaG8gZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjE3OAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgImNodXnhu4NuIGPhu50gLS1rZWVwLWNyIGNobyBnaXQtbWFpbHNwbGl0IHbhu5tpIMSR4buLbmggZOG6oW5nIG1ib3giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTgxCittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIiIKKyLEkeG7q25nIGNodXnhu4NuIGPhu50gLS1rZWVwLWNyIGNobyBnaXQtbWFpbHNwbGl0IGtow7RuZyBwaOG7pSB0aHXhu5ljIHbDoG8gYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjE4NAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAiY+G6r3QgbeG7jWkgdGjhu6kgdHLGsOG7m2MgZMOybmcgc2Npc3NvcnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTg2IGJ1aWx0aW4vYW0uYzoyMTg5IGJ1aWx0aW4vYW0uYzoyMTkyIGJ1aWx0aW4vYW0uYzoyMTk1CisjOiBidWlsdGluL2FtLmM6MjE5OCBidWlsdGluL2FtLmM6MjIwMSBidWlsdGluL2FtLmM6MjIwNCBidWlsdGluL2FtLmM6MjIwNworIzogYnVpbHRpbi9hbS5jOjIyMTMKK21zZ2lkICJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IgorbXNnc3RyICJjaHV54buDbiBuw7MgcXVhIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyMDMgYnVpbHRpbi9jb21taXQuYzoxMzg2IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc2IGJ1aWx0aW4vZ3JlcC5jOjg4MyBidWlsdGluL21lcmdlLmM6MjQ5CisjOiBidWlsdGluL3B1bGwuYzoxNjAgYnVpbHRpbi9wdWxsLmM6MjE5IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjIwOSBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIgorCisjOiBidWlsdGluL2FtLmM6MjIxMAorbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmcgKGPDoWMpIG1p4bq/bmcgdsOhIHRoZW8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLEkcOoIGzDqm4gY8OhYyBs4budaSBuaOG6r24gbOG7l2kga2hpIHjhuqN5IHJhIGzhu5dpIHbDoSBuZ2hpw6ptIHRy4buNbmciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE4Cittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAidGnhur9wIHThu6VjIMOhcCBk4bulbmcgY8OhYyBtaeG6v25nIHbDoSBzYXUga2hpIGdp4bqjaSBxdXnhur90IHh1bmcgxJHhu5l0IgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICLEkeG7k25nIG5naMSpYSB24bubaSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjIyNAorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImLhu48gcXVhIG1p4bq/bmcgdsOhIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjcKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICJwaOG7pWMgaOG7k2kgbOG6oWkgbmjDoW5oIGfhu5FjIHbDoCBsb+G6oWkgYuG7jyB0aGFvIHTDoWMgdsOhLiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICJi4buPIHF1YSB0aGFvIHTDoWMgdsOhIG5oxrBuZyB24bqrbiBnaeG7ryBIRUFEIGNo4buJIMSR4bq/biBuw7MuIgorCisjOiBidWlsdGluL2FtLmM6MjIzMworbXNnaWQgInNob3cgdGhlIHBhdGNoIGJlaW5nIGFwcGxpZWQuIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbWnhur9uZyB2w6EgxJHDoyDEkcaw4bujYyDDoXAgZOG7pW5nIHLhu5NpLiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzcKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIm7Ds2kgZOG7kWkgduG7gSBuZ8OgeSBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2FtLmM6MjIzOQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgImTDuW5nIGThuqV1IHRo4budaSBnaWFuIGhp4buHbiB04bqhaSBjaG8gbmfDoHkgdMOhYyBnaeG6oyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDEgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMCBidWlsdGluL2NvbW1pdC5jOjE1MDcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODYgYnVpbHRpbi9wdWxsLmM6MTk0IGJ1aWx0aW4vcmViYXNlLmM6NTA5CisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTMgYnVpbHRpbi9yZXZlcnQuYzoxMTcgYnVpbHRpbi90YWcuYzo0MTgKK21zZ2lkICJrZXktaWQiCittc2dzdHIgIm3Doy1z4buRLWtow7NhIgorCisjOiBidWlsdGluL2FtLmM6MjI0MiBidWlsdGluL3JlYmFzZS5jOjUxMCBidWlsdGluL3JlYmFzZS5jOjE1MTQKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICJDw6FjIGzhuqduIGNodXnhu4NuIGdpYW8ga8O9LUdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDUKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKGTDuW5nIG7hu5lpIGLhu5kgY2hvIGdpdC1yZWJhc2UpIgorCisjOiBidWlsdGluL2FtLmM6MjI2MworbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIlTDuXkgY2jhu41uIC1iLy0tYmluYXJ5IMSRw6Mga2jDtG5nIGTDuW5nIHThu6sgbMOidSBy4buTaSwgdsOgXG4iCisibsOzIHPhur0gxJHGsOG7o2MgYuG7jyDEkWkuIFhpbiDEkeG7q25nIHPhu60gZOG7pW5nIG7DsyB0aMOqbSBu4buvYS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcwCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJn4bq3cCBs4buXaSDEkeG7jWMgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2FtLmM6MjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgInRoxrAgbeG7pWMgcmViYXNlIHRyxrDhu5tjICVzIGtow7RuZyBz4bq1biBjw7MgbmjGsG5nIG1ib3ggbOG6oWkgxJHGsGEgcmEuIgorCisjOiBidWlsdGluL2FtLmM6MjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIlTDrG0gdGjhuqV5IHRoxrAgbeG7pWMgbOG6oWMgJXMuXG4iCisiRMO5bmcgXCJnaXQgYW0gLS1hYm9ydFwiIMSR4buDIGxv4bqhaSBi4buPIG7DsyDEkWkuIgorCisjOiBidWlsdGluL2FtLmM6MjMxNQorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIlRoYW8gdMOhYyBwaMOibiBnaeG6o2kga2jDtG5nIMSRxrDhu6NjIHRp4bq/biBow6BuaCwgY2jDum5nIHRhIGtow7RuZyBwaOG7pWMgaOG7k2kgbOG6oWkuIgorCisjOiBidWlsdGluL2FtLmM6MjMyNQorbXNnaWQgImludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgcGF0Y2hlcyBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICJjaOG6vyDEkeG7mSB0xrDGoW5nIHTDoWMgecOqdSBj4bqndSBjw7MgY8OhYyBtaeG6v25nIHbDoSB0csOqbiBkw7JuZyBsw6puaCIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxjw6FjIHTDuXkgY2jhu41uPl0gWzxtaeG6v25nLXbDoT7igKZdIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIGtobyAobMawdSB0cuG7rywgbsOpbikg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNodXnhu4NuIGjGsOG7m25nIGvhur90IHh14bqldCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTcOheSBjaOG7pyBraMO0bmcgY8OzIMSR4buLYSBjaOG7iSBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGPhuqduIEFDSy9OQUssIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2MgZ8OzaSBmbHVzaCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGzhu5dpIGdpYW8gdGjhu6ljIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogY+G6p24gbeG7mXQgZmx1c2ggKMSR4bqpeSBk4buvIGxp4buHdSBsw6puIMSRxKlhKSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjUKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8bOG6p25fY2h1eeG7g25fZ2lhbz5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxsw7pjX3NhaT4gIgorIjxsw7pjX8SRw7puZz4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNworbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGzDumNfc2FpPiAiCisiPGzDumNfxJHDum5nPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI4Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGdvb2RfdGVybT4gPGJhZF90ZXJtPiBbPHRlcm0+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LW5leHQtY2hlY2sgPGzDumNfc2FpPiA8bMO6Y1/EkcO6bmc+IFs8dGVybT5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1vbGQgfCAtLXRlcm0tYmFkIHwgLS0iCisidGVybS1uZXddIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzAKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfSIKKyI9PHRlcm0+XVstLW5vLWNoZWNrb3V0XSBbPHNhaT4gWzzEkcO6bmc+4oCmXV0gWy0tXSBbPC9jw6FjL8SRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgcGjhuqNpIG3hu5l0IHRo4budaSBo4bqhbiBo4bujcCBs4buHIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgdXNlIHRoZSBidWlsdGluIGNvbW1hbmQgJyVzJyBhcyBhIHRlcm0iCittc2dzdHIgImtow7RuZyB0aOG7gyBkw7luZyBs4buHbmggdMOtY2ggaOG7o3Ag4oCcJXPigJ0gbmjGsCBsw6AgbeG7mXQgdGjhu51pIGvhu7MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB0aGF5IMSR4buVaSBuZ2jEqWEgY+G7p2EgdGjhu51pIGvhu7Mg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMTEKK21zZ2lkICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiCittc2dzdHIgInZ1aSBsw7JuZyBkw7luZyBoYWkgdGjhu51pIGvhu7Mga2jDoWMgbmhhdSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExOAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRoZSBmaWxlIEJJU0VDVF9URVJNUyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gdOG6rXAgdGluIEJJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy5cbiIKK21zZ3N0ciAiQ2jDum5nIHTDtGkgxJFhbmcga2jDtG5nIGJpc2VjdC5cbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJXMnLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBs4bqleSByYSBIRUFEIG5ndXnDqm4gdGjhu6d5IGPhu6dhIOKAnCVz4oCdLiBIw6N5IHRo4butIOKAnGdpdCBiaXNlY3QgcmVzZXQgPGzhuqduLSIKKyJjaHV54buDbi1naWFvPuKAnS4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJXMiCittc2dzdHIgIsSQ4buRaSBz4buRIGJpc2VjdF93cml0ZSBzYWk6ICVzIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGdldCB0aGUgb2lkIG9mIHRoZSByZXYgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IG9pZCBj4bunYSDEkWnhu4NtIHjDqXQgZHV54buHdCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBvcGVuIHRoZSBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIHThuq1wIHRpbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIkzhu4duaCBraMO0bmcgaOG7o3AgbOG7hzogYuG6oW4gaGnhu4duIMSRYW5nIOG7nyBt4buZdCBiaXNlY3QgJXMvJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisiQuG6oW4gcGjhuqNpIGNo4buJIGNobyB0w7RpIMOtdCBuaOG6pXQgbeG7mXQgxJFp4buDbSAlcyB2w6AgbeG7mXQgJXMuXG4iCisiQuG6oW4gY8OzIHRo4buDIHPhu60gZOG7pW5nIFwiZ2l0IGJpc2VjdCAlc1wiIHbDoCBcImdpdCBiaXNlY3QgJXNcIiBjaG8gY8OhaSDEkcOzLiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAlcyBhbmQgJXMgcmV2aXNpb24uXG4iCisiWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICVzXCIgYW5kIFwiZ2l0IGJpc2VjdCAlc1wiIGZvciB0aGF0LiIKK21zZ3N0ciAiIgorIkLhuqFuIGPhuqduIGLhuq90IMSR4bqndSBi4bqxbmcgbOG7h25oIFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIkLhuqFuIHNhdSDEkcOzIGPhuqduIHBo4bqjaSBjaOG7iSBjaG8gdMO0aSDDrXQgbmjhuqV0IG3hu5l0IMSRaeG7g20geMOpdCBkdXnhu4d0ICVzIHbDoCBt4buZdCAlcy5cbiIKKyJC4bqhbiBjw7MgdGjhu4Mgc+G7rSBk4bulbmcgXCJnaXQgYmlzZWN0ICVzXCIgdsOgIFwiZ2l0IGJpc2VjdCAlc1wiIGNobyBjaMO6bmcuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgImNo4buJIHRo4buxYyBoaeG7h24gdmnhu4djIGJpc2VjdCB24bubaSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvICVzIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzMwCittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIkLhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIGNoxrBhIFtZL25dPyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzcKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICJjaMawYSDEkeG7i25oIG5naMSpYSB0aOG7nWkga+G7syBuw6BvIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGN1cnJlbnQgdGVybXMgYXJlICVzIGZvciB0aGUgb2xkIHN0YXRlXG4iCisiYW5kICVzIGZvciB0aGUgbmV3IHN0YXRlLlxuIgorbXNnc3RyICIiCisiQuG6oW4gaGnhu4duIHThuqFpIMSRYW5nIOG7nyB0aOG7nWkga+G7syAlcyBjaG8gdMOsbmggdHLhuqFuZyBjxalcbiIKKyJ2w6AgJXMgY2hvIHTDrG5oIHRy4bqhbmcgbeG7m2kuXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyJ0aGFtIHPhu5Ega2jDtG5nIGjhu6NwIGzhu4cgJXMgY2hvIOKAnGdpdCBiaXNlY3QgdGVybXPigJ0uXG4iCisiQ8OhYyB0w7l5IGNo4buNbiBo4buXIHRy4bujIGzDoDogLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCB2w6AgLS10ZXJtLWJhZHwtLXRlcm0tbmV3LiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnc3RyICJ0w7l5IGNo4buNbiBraMO0bmcgxJHGsOG7o2MgdGjhu6thIG5o4bqtbjog4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIGPDsyB24bq7IG5oxrAgbMOgIG3hu5l0IMSRaeG7g20geMOpdCBkdXnhu4d0IGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTIKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgInNhaSBIRUFEIC0gVMO0aSBj4bqnbiBt4buZdCBIRUFEIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNraW5nIG91dCAnJXMnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHN0YXJ0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgImzhuqV5IHJhIOKAnCVz4oCdIHJhIGfhurdwIGzhu5dpLiBIw6N5IHRo4butIFwiZ2l0IGJpc2VjdCByZXNldCA8bmjDoW5oX2jhu6NwX2zhu4c+XCIuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTQ4Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAic+G6vSBraMO0bmcgZGkgY2h1eeG7g24gbuG7rWEgYsaw4bubYyB0csOqbiBjw6J5IMSRxrDhu6NjIGNnLXNlZWsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NTEKK21zZ2lkICJiYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJzYWkgSEVBRCAtIHRoYW0gY2hp4bq/dSBt4buBbSBr4buzIGzhuqEiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWY6ICclcyciCittc2dzdHIgInJlZnNwZWMga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMxCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiDigJxnaXQgYmlzZWN0IG5leHTigJ0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzMKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgImdoaSB0aOG7nWkga+G7syB2w6BvIC5naXQvQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM1Cittc2dpZCAiY2xlYW51cCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJk4buNbiBk4bq5cCB0w6xuaCB0cuG6oW5nIGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzcKK21zZ2lkICJjaGVjayBmb3IgZXhwZWN0ZWQgcmV2cyIKK21zZ3N0ciAia2nhu4NtIHRyYSBjaG8gxJFp4buDbSB4ZW0geMOpdCBj4bqnbiBkw7luZyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIsSR4bq3dCBs4bqhaSB0cuG6oW5nIGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSBpbiBCSVNFQ1RfTE9HIgorbXNnc3RyICJnaGkgcmEgdMOsbmggdHLhuqFuZyBkaSBjaHV54buDbiBu4butYSBixrDhu5tjIHRyb25nIEJJU0VDVF9MT0ciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDMKK21zZ2lkICJjaGVjayBhbmQgc2V0IHRlcm1zIGluIGEgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICJraeG7g20gdHJhIHbDoCDEkeG6t3QgdGjhu51pIMSRaeG7g20gdHJvbmcgZGkgY2h1eeG7g24gbuG7rWEgYsaw4bubYyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NQorbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgImtp4buDbSB0cmEgeGVtIGPDoWMgdGjhu51pIMSRaeG7g20geOG6pXUvdOG7kXQgY8OzIHThu5NuIHThuqFpIGtow7RuZyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICJpbiByYSBjw6FjIHRo4budaSDEkWnhu4NtIGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDkKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgImLhuq90IMSR4bqndSBwaGnDqm4gZGkgY2h1eeG7g24gbuG7rWEgYsaw4bubYyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIiIKKyJj4bqtcCBuaOG6rXQgQklTRUNUX0hFQUQgdGhheSB2w6wgbOG6pXkgcmEgKGNoZWNraW5nIG91dCkgbOG6p24gY2h1eeG7g24gZ2lhbyBoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTMKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAia2jDtG5nIGPDsyBuaOG6rXQga8O9IGNobyBCSVNFQ1RfV1JJVEUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzAKK21zZ2lkICItLXdyaXRlLXRlcm1zIHJlcXVpcmVzIHR3byBhcmd1bWVudHMiCittc2dzdHIgIi0td3JpdGUtdGVybXMgY+G6p24gaGFpIHRoYW0gc+G7kSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NAorbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUga2jDtG5nIG5o4bqtbiDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4MQorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiIgorIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGtow7RuZyBuaOG6rW4gxJHhu5FpIHPhu5EgY8Wpbmcga2jDtG5nIG5o4bqtbiBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg1Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIGPhuqduIDQgaG/hurdjIDUgdGhhbSBz4buRIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjkxCittc2dpZCAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWNoZWNrLWFuZC1zZXQtdGVybXMgY+G6p24gMyB0aGFtIHPhu5EiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2OTcKK21zZ2lkICItLWJpc2VjdC1uZXh0LWNoZWNrIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LW5leHQtY2hlY2sgY+G6p24gMiBob+G6t2MgMyB0aGFtIHPhu5EiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDMKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIGPhuqduIDAgaG/hurdjIDEgdGhhbSBz4buRIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzEKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDx04bqtcC10aW4+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPHJldi1vcHRzPiDEkcaw4bujYyBtw7QgdOG6oyB0cm9uZyB0w6BpIGxp4buHdSBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICJj4bqnbiBt4buZdCBtw6B1OiAlcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQxNgorbXNnaWQgIm11c3QgZW5kIHdpdGggYSBjb2xvciIKK21zZ3N0ciAicGjhuqNpIGvhur90IHRow7pjIGLhurFuZyBt4buZdCBtw6B1IgorCisjOiBidWlsdGluL2JsYW1lLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICJtw6B1IGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdIHRyb25nIGNvbG9yLmJsYW1lLnJlcGVhdGVkTGluZXMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo3NDcKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciBibGFtZS5jb2xvcmluZyIKK21zZ3N0ciAibcOgdSBraMO0bmcgaOG7o3AgbOG7hyBjaG8gYmxhbWUuY29sb3JpbmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgcmV2aXNpb24gJXMgdG8gaWdub3JlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgxJFp4buDbSB4w6l0IGR1eeG7h3QgJXMgxJHhu4MgbcOgIGLhu48gcXVhIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ0Cittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGPDoWMgbeG7pWMg4oCcYmxhbWXigJ0gbmjGsCBsw6AgY2jDum5nIHRhIHRo4bqleSBjaMO6bmcsIHTEg25nIGThuqduIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ1Cittc2dpZCAiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIkhp4buDbiB0aOG7iyBTSEEtMSB0cuG6r25nIGNobyBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gYmnDqm4gZ2nhu5tpIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ2Cittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJLaMO0bmcgY29pIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBn4buRYyBsw6AgZ2nhu5tpIGjhuqFuIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ3Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRo4buRbmcga8OqIGPDtG5nIHPhu6ljIGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ4Cittc2dpZCAiRm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLDiXAgYnXhu5ljIGLDoW8gY8OhbyB0aeG6v24gdHJp4buDbiBjw7RuZyB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDkKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGvhur90IHh14bqldCDEkWnhu4NtIHPhu5EgY8OzIGPDoWMgbeG7pWMgdGluIOKAnGJsYW1l4oCdIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUwCittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiBn4buRYyAoTeG6t2MgxJHhu4tuaDogYXV0bykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkhp4buDbiB0aOG7iyBz4buRIGTDsm5nIGfhu5FjIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODUyCittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIOG7nyDEkeG7i25oIGThuqFuZyDEkcOjIHRoaeG6v3Qga+G6vyBjaG8gc+G7sSB0acOqdSBkw7luZyBi4bqxbmcgbcOheSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIMSR4buLbmggZOG6oW5nIOKAnHBvcmNlbGFpbuKAnSB24bubaSB0aMO0bmcgdGluIGNodXnhu4NuIGdpYW8gbeG7l2kgZMOybmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTQKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJEw7luZyBjw7luZyBjaOG6vyDEkeG7mSB4deG6pXQgcmEgduG7m2kgZ2l0LWFubm90YXRlIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU1Cittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJIaeG7g24gdGjhu4sgZOG6pXUgduG6v3QgdGjhu51pIGdpYW4gZOG6oW5nIHRow7QgKE3hurdjIMSR4buLbmg6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTYKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkhp4buDbiB0aOG7iyBTSEExIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gZOG6oW5nIGTDoGkgKE3hurdjIMSR4buLbmg6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTcKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJLaMO0bmcgaGnhu4NuIHRo4buLIHTDqm4gdMOhYyBnaeG6oyB2w6AgZOG6pXUgduG6v3QgdGjhu51pIGdpYW4gKE3hurdjIMSR4buLbmg6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTgKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0aMawIMSRaeG7h24gdOG7rSBj4bunYSB0w6FjIGdp4bqjIHRoYXkgdsOsIHTDqm4gKE3hurdjIMSR4buLbmg6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTkKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiQuG7jyBxdWEgY8OhYyBraMOhYyBiaeG7h3QgZG8ga2hv4bqjbmcgdHLhuq9uZyBnw6J5IHJhIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwIGJ1aWx0aW4vbG9nLmM6MTcwMgorbXNnaWQgInJldiIKK21zZ3N0ciAicmV2IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwCittc2dpZCAiSWdub3JlIDxyZXY+IHdoZW4gYmxhbWluZyIKK21zZ3N0ciAiQuG7jyBxdWEgPHJldj4ga2hpIGJsYW1lIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYxCittc2dpZCAiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiQuG7jyBxdWEgY8OhYyDEkWnhu4NtIHjDqXQgZHV54buHdCB04burIDx04bqtcCB0aW4+IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYyCittc2dpZCAiY29sb3IgcmVkdW5kYW50IG1ldGFkYXRhIGZyb20gcHJldmlvdXMgbGluZSBkaWZmZXJlbnRseSIKK21zZ3N0ciAic2nDqnUgZOG7ryBsaeG7h3UgZMawIHRo4burYSBtw6B1IHThu6sgZMOybmcgdHLGsOG7m2Mga2jDoWMgaOG6s24iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjMKK21zZ2lkICJjb2xvciBsaW5lcyBieSBhZ2UiCittc2dzdHIgImPDoWMgZMOybmcgbcOgdSB0aGVvIHR14buVaSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiVGnDqnUgdGjhu6UgdGjDqm0gbsSDbmcgdMOgaSBuZ3V5w6puIG3DoXkgbcOzYyDEkeG7gyB0w6xtIGtp4bq/bSB04buRdCBoxqFuIG7hu69hIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY1Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICIiCisiU+G7rSBk4bulbmcgxJFp4buDbSB4w6l0IGR1eeG7h3QgKHJldmlzaW9uKSB04burIDx04bqtcCB0aW4+IHRoYXkgdsOsIGfhu41pIOKAnGdpdC1yZXYtbGlzdOKAnSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIlPhu60gZOG7pW5nIG7hu5lpIGR1bmcgY+G7p2EgPHThuq1wIHRpbj4gbmjGsCBsw6Ag4bqjbmggY3Xhu5FpIGPDuW5nIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAixJFp4buDbSBz4buRIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY3Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiVMOsbSBjw6FjIGLhuqNuIHNhbyBjaMOpcCBkw7JuZyB0cm9uZyB2w6AgbmdhbmcgcXVhIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIlTDrG0gY8OhYyBkaSBjaHV54buDbiBkw7JuZyB0cm9uZyB2w6AgbmdhbmcgcXVhIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY5Cittc2dpZCAiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIljhu60gbMO9IGNo4buJIGTDsm5nIHbDuW5nIG4sbSwgdMOtbmggdOG7qyAxIgorCisjOiBidWlsdGluL2JsYW1lLmM6OTIxCittc2dpZCAiLS1wcm9ncmVzcyBjYW4ndCBiZSB1c2VkIHdpdGggLS1pbmNyZW1lbnRhbCBvciBwb3JjZWxhaW4gZm9ybWF0cyIKK21zZ3N0ciAiIgorIi0tcHJvZ3Jlc3Mga2jDtG5nIMSRxrDhu6NjIGTDuW5nIGPDuW5nIHbhu5tpIC0taW5jcmVtZW50YWwgaGF5IGPDoWMgxJHhu4tuaCBk4bqhbmcgcG9yY2VsYWluIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZQorIy4gbWF4aW11bSBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbgorIy4gImdpdCBibGFtZSIgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEKKyMuIG1vbnRocyBhZ28iLCB3aGljaCB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0CisjLiBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dAorIy4geW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yIGZld2VyIGRpc3BsYXkKKyMuIGNvbHVtbnMuCisjLgorIzogYnVpbHRpbi9ibGFtZS5jOjk3MgorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgIjQgbsSDbSwgMTEgdGjDoW5nIHRyxrDhu5tjIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAidOG6rXAgdGluICVzIGNo4buJIGPDsyAlbHUgZMOybmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMTI1Cittc2dpZCAiQmxhbWluZyBsaW5lcyIKK21zZ3N0ciAiQ8OhYyBkw7JuZyBibGFtZSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMwCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzxjw6FjIHTDuXkgY2jhu41uPl0gWy1sXSBbLWZdIDx0w6puLW5ow6FuaD4gWzzEkWnhu4NtLcSR4bqndT5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFstcl0gKC1kIHwgLUQpIDx0w6puLW5ow6FuaD4g4oCmIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMyCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8Y8OhYyB0w7l5IGNo4buNbj5dICgtbSB8IC1NKSBbPG5ow6FuaC1jxak+XSA8bmjDoW5oLW3hu5tpPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1jIHwgLUMpIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGPDoWMgdMO5eSBjaOG7jW4+XSAoLWMgfCAtQykgWzxuaMOhbmgtY8WpPl0gPG5ow6FuaC1t4bubaT4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisixJFhbmcgeMOzYSBuaMOhbmgg4oCcJXPigJ0gbcOgIG7DsyBs4bqhaSDEkcOjIMSRxrDhu6NjIGjDsmEgdHLhu5luIHbDoG9cbiIKKyIgICAgICAgICDigJwlc+KAnSwgbmjGsG5nIHbhuqtuIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIHbDoG8gSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorImtow7RuZyB4w7NhIG5ow6FuaCDigJwlc+KAnSBjw6FpIG3DoCBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvXG4iCisiICAgICAgICAg4oCcJXPigJ0sIGNobyBkw7kgbMOgIG7DsyDEkcOjIMSRxrDhu6NjIGjDsmEgdHLhu5luIHbDoG8gSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0ga2nhur9tIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiTmjDoW5oIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyB0cuG7mW4gbeG7mXQgY8OhY2ggxJHhuqd5IMSR4bunLlxuIgorIk7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiB4w7NhIG7DsywgdGjDrCBjaOG6oXkgbOG7h25oIOKAnGdpdCBicmFuY2ggLUQgJXPigJ0uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkPhuq1wIG5o4bqtdCB04bqtcCB0aW4gY+G6pXUgaMOsbmggZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZMO5bmcgdMO5eSBjaOG7jW4gLWEgduG7m2kgLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSBraeG6v20gxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8gY2hvIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgYnJhbmNoICclcycgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHjDs2EgbmjDoW5oIOKAnCVz4oCdIMSRw6MgxJHGsOG7o2MgbOG6pXkgcmEgdOG6oWkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgbmjDoW5oIHRoZW8gZMO1aSBtw6F5IGNo4bunIOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IG5ow6FuaCDigJwlc+KAnS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRYW5nIHjDs2EgbmjDoW5oIHRoZW8gZMO1aSBtw6F5IGNo4bunIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHjDs2EgYuG7jyBuaMOhbmgg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAixJDDoyB4w7NhIG5ow6FuaCB0aGVvIGTDtWkgbcOheSBjaOG7pyBcIiVzXCIgKHThu6tuZyBsw6AgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIMSRw6MgYuG7iyB4w7NhICh04burbmcgbMOgICVzKVxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjaHXhu5dpIMSR4buLbmggZOG6oW5nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2MAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCAoJXMpIHBvaW50cyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMvIgorbXNnc3RyICJIRUFEICglcykgY2jhu4kgYsOqbiBuZ2/DoGkgY+G7p2EgcmVmcy9oZWFkcy8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICJOaMOhbmggJXMgxJFhbmcgxJHGsOG7o2MgY+G6o2kgdOG7lSBs4bqhaSB04bqhaSAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICJOaMOhbmggJXMgxJFhbmcgxJHGsOG7o2MgZGkgY2h1eeG7g24gcGjDom4gxJHDtGkgKGJpc2VjdCkgdOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICJraMO0bmcgdGjhu4Mgc2FvIGNow6lwIG5ow6FuaCBoaeG7h24gaMOgbmggdHJvbmcga2hpIG7DsyBjaOG6s25nIOG7nyDEkcOidSBj4bqjLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buVaSB0w6puIG5ow6FuaCBoaeG7h24gaMOgbmggdHJvbmcga2hpIG7DsyBjaOG6s25nIOG7nyDEkcOidSBj4bqjLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiVMOqbiBuaMOhbmgga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0MgorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu5VpIHTDqm4gbmjDoW5oIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0NAorbXNnaWQgIkJyYW5jaCBjb3B5IGZhaWxlZCIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHNhbyBjaMOpcCBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYSBjb3B5IG9mIGEgbWlzbmFtZWQgYnJhbmNoICclcyciCittc2dzdHIgIsSQw6MgdOG6oW8gbeG7mXQgYuG6o24gc2FvIGPhu6dhIG5ow6FuaCBraHV54bq/dCBkYW5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAixJDDoyDEkeG7lWkgdMOqbiBuaMOhbmgga2h1eeG6v3QgZGFuaCDigJwlc+KAnSDEkWkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIk5ow6FuaCBi4buLIMSR4buVaSB0w6puIHRow6BuaCAlcywgbmjGsG5nIEhFQUQgbOG6oWkga2jDtG5nIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJOaMOhbmggYuG7iyDEkeG7lWkgdMOqbiwgbmjGsG5nIGPhuq1wIG5o4bqtdCB04bqtcCB0aW4gY+G6pXUgaMOsbmggZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIk5ow6FuaCDEkcOjIMSRxrDhu6NjIHNhbyBjaMOpcCwgbmjGsG5nIGPhuq1wIG5o4bqtdCB04bqtcCB0aW4gY+G6pXUgaMOsbmggZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iCittc2dzdHIgIiIKKyJWaeG6v3QgY8OhYyBnaGkgY2jDuiBjaG8gbmjDoW5oOlxuIgorIiAgJXNcbiIKKyJOaOG7r25nIGTDsm5nIMSRxrDhu6NjIGLhuq90IMSR4bqndSBi4bqxbmcg4oCcJWPigJ0gc+G6vSDEkcaw4bujYyBj4bqvdCBi4buPLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gY2h1bmciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIwCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgImhp4buDbiB0aOG7iyBtw6MgYsSDbSB2w6AgY2jhu6cgxJHhu4EsIMSRxrBhIHJhIGhhaSBs4bqnbiBjaG8gbmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgImtow7RuZyB4deG6pXQgY8OhYyB0aMO0bmcgdGluIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJjw6BpIMSR4bq3dCBjaOG6vyDEkeG7mSB0aGVvIGTDtWkgKHhlbSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAia2jDtG5nIGTDuW5nIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUwNQorbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICJ0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYKK21zZ2lkICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgInRoYXkgxJHhu5VpIHRow7RuZyB0aW4gdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3Cittc2dpZCAidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgImLhu48gxJHhurd0IHRow7RuZyB0aW4gdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJ0w7QgbcOgdSBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAidGhhbyB0w6FjIHRyw6puIG5ow6FuaCDigJxyZW1vdGUtdHJhY2tpbmfigJ0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vYnJhbmNoLmM6NjMzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIG5o4buvbmcgbmjDoW5oIG3DoCBuw7MgY2jhu6lhIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMyIGJ1aWx0aW4vYnJhbmNoLmM6NjM0Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIG5o4buvbmcgbmjDoW5oIG3DoCBuw7Mga2jDtG5nIGNo4bupYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzNworbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIkjDoG5oIMSR4buZbmcgZ2l0LWJyYW5jaDoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgImxp4buHdCBrw6ogY+G6oyBuaMOhbmgg4oCccmVtb3RlLXRyYWNraW5n4oCdIHbDoCBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MAorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJ4w7NhIG3hu5l0IHRvw6BuIGLhu5kgbmjDoW5oIMSRw6MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQxCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAieMOzYSBuaMOhbmggKGNobyBkw7kgbMOgIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAiZGkgY2h1eeG7g24gaGF5IMSR4buVaSB0w6puIG3hu5l0IG5ow6FuaCB2w6AgcmVmbG9nIGPhu6dhIG7DsyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJkaSBjaHV54buDbiBob+G6t2MgxJHhu5VpIHTDqm4gbeG7mXQgbmjDoW5oIG5nYXkgY+G6oyBraGkgxJHDrWNoIMSRw6MgY8OzIHPhurVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgInNhbyBjaMOpcCBt4buZdCBuaMOhbmggdsOgIHJlZmxvZyBj4bunYSBuw7MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJzYW8gY2jDqXAgbeG7mXQgbmjDoW5oIG5nYXkgY+G6oyBraGkgxJHDrWNoIMSRw6MgY8OzIHPhurVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICJsaeG7h3Qga8OqIGPDoWMgdMOqbiBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ3Cittc2dpZCAic2hvdyBjdXJyZW50IGJyYW5jaCBuYW1lIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbmjDoW5oIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAidOG6oW8gcmVmbG9nIGPhu6dhIG5ow6FuaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTAKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAic+G7rWEgbcO0IHThuqMgY2hvIG5ow6FuaCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICJideG7mWMgdOG6oW8sIGRpIGNodXnhu4NuL8SR4buVaSB0w6puLCB4w7NhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyBuaMOhbmggbcOgIG7DsyDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTMKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIG5ow6FuaCBtw6AgbsOzIGtow7RuZyDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTQKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgImxp4buHdCBrw6ogY8OhYyBuaMOhbmggdHJvbmcgY8OhYyBj4buZdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MiBidWlsdGluL25vdGVzLmM6NDE1CisjOiBidWlsdGluL25vdGVzLmM6NDE4IGJ1aWx0aW4vbm90ZXMuYzo1ODEgYnVpbHRpbi9ub3Rlcy5jOjU4NAorIzogYnVpbHRpbi90YWcuYzo0MzMKK21zZ2lkICJvYmplY3QiCiBtc2dzdHIgIsSR4buRaSB0xrDhu6NuZyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIGxpw6puIGvhur90IGPhu6luZyDEkeG7kWkgdMaw4bujbmc6ICVzIgorIzogYnVpbHRpbi9icmFuY2guYzo2NTgKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBjw6FjIG5ow6FuaCBj4bunYSDEkeG7kWkgdMaw4bujbmciCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODYwCi1tc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKLW1zZ3N0ciAiIgotIktow7RuZyB0aOG7gyBs4bqleSBjw6FjIG5ow6FuaCB2w6AgxJHhu5FpIHTGsOG7o25nLiBYZW0ga+G6v3QgeHXhuqV0IHThu6sgYuG6o25nIMSRaeG7gXUga2hp4buDbiDEkeG7gyBjw7MgIgotInRow6ptIHRow7RuZyB0aW4uIgorIzogYnVpbHRpbi9icmFuY2guYzo2NjAgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0OCBidWlsdGluL3RhZy5jOjQ0MAorbXNnaWQgInNvcnRpbmcgYW5kIGZpbHRlcmluZyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSIKK21zZ3N0ciAic+G6r3AgeOG6v3AgdsOgIGzhu41jIGzDoCBwaMOibiBiaeG7h3QgSE9BIHRoxrDhu51uZyIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NzEKLW1zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4MgbOG6pXkgduG7gSBjw6FjIHRo4bq7LiBIw6N5IHhlbSBr4bq/dCB4deG6pXQgdOG7qyBi4bqjbmcgxJFp4buBdSBraGnhu4NuIMSR4buDIGPDsyB0aMOqbSAiCi0idGjDtG5nIHRpbiBjaGkgdGnhur90LiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmcgc+G6vSBkw7luZyBjaG8gxJHhuqd1IHJhIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5NQotbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCi1tc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4MgZMOyIHTDrG0gSEVBRC4gSMOjeSB4ZW0ga+G6v3QgeHXhuqV0IHThu6sgYuG6o25nIMSRaeG7gXUga2hp4buDbiDEkeG7gyBjw7MgdGjDqm0gdGjDtG5nICIKLSJ0aW4gY2hpIHRp4bq/dC4iCisjOiBidWlsdGluL2JyYW5jaC5jOjY4NCBidWlsdGluL2Nsb25lLmM6Nzg0Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBIRUFEIOG7nyBkxrDhu5tpIHJlZnMvaGVhZHMhIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgZOG7jW4gc+G6oWNoICVzIgorIzogYnVpbHRpbi9icmFuY2guYzo3MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgInTDuXkgY2jhu41uIC0tY29sdW1uIHbDoCAtLXZlcmJvc2UgeHVuZyBraOG6r2MgbmhhdSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTAKLW1zZ2lkICJDbG9uZSBmYWlsZWQuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbmjDom4gYuG6o24uIgorIzogYnVpbHRpbi9icmFuY2guYzo3MjMgYnVpbHRpbi9icmFuY2guYzo3NzcgYnVpbHRpbi9icmFuY2guYzo3ODYKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiY+G6p24gY2jhu4kgcmEgdMOqbiBuaMOhbmgiCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3Ci1tc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgotbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgbmjDoW5oIG3hurdjIMSR4buLbmguIgorIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHGsGEgcmEgbcO0IHThuqMgSEVBRCDEkcOjIHTDoWNoIHLhu51pIgogCi0jOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSAlcyBuaMawIGzDoCBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvLiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU4Cittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgImtow7RuZyB0aOG7gyBz4butYSBtw7QgdOG6oyBjaG8gbmhp4buBdSBoxqFuIG3hu5l0IG5ow6FuaCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NDAKLW1zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKLW1zZ3N0ciAixJBhbmcgdOG6oW8gdGjGsCBt4bulYyBsw6BtIHZp4buHYyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICJW4bqrbiBjaMawYSBjaHV54buDbiBnaWFvIHRyw6puIG5ow6FuaCDigJwlc+KAnS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQxIGxpYi9pbmRleC50Y2w6NzAgbGliL2luZGV4LnRjbDoxMzYKLSM6IGxpYi9pbmRleC50Y2w6MjA3Ci1tc2dpZCAiZmlsZXMiCi1tc2dzdHIgInThuq1wIHRpbiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBuaMOhbmggbsOgbyBjw7MgdMOqbiDigJwlc+KAnS4iCiAKLSM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcwCi1tc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCi1tc2dzdHIgIkzhuqV5IHJhIHThuq1wIHRpbiBraOG7n2kgdOG6oW8gZ+G6t3AgbOG7l2kuIgorIzogYnVpbHRpbi9icmFuY2guYzo3ODMKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAicXXDoSBuaGnhu4F1IG5ow6FuaCBkw6BuaCBjaG8gdGhhbyB0w6FjIHNhbyBjaMOpcCIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE0Ci1tc2dpZCAiT3BlbiIKLW1zZ3N0ciAiTeG7nyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzkyCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgInF1w6Egbmhp4buBdSB0aGFtIHPhu5EgY2hvIHRoYW8gdMOhYyDEkeG7lWkgdMOqbiIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI0Ci1tc2dpZCAiUmVwb3NpdG9yeToiCi1tc2dzdHIgIktobzoiCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICJxdcOhIG5oaeG7gXUgdGhhbSBz4buRIMSR4buDIMSR4bq3dCB0aMaw4bujbmcgbmd14buTbiBt4bubaSIKIAotIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDczCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBt4bufIGtobyAlczoiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MgotbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCi1tc2dzdHIgIsSQw6J5IGzDoCB2aeG7h2MgbOG6pXkgcmEgYuG7iyB0w6FjaCBy4budaSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjYwCi1tc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCi1tc2dzdHIgIkJp4buDdSB0aOG7qWMgxJFp4buDbSB4w6l0OiIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjcyCi1tc2dpZCAiTG9jYWwgQnJhbmNoIgotbXNnc3RyICJOaMOhbmggbuG7mWkgYuG7mSIKLQotIzogbGliL2Nob29zZV9yZXYudGNsOjc3Ci1tc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgotbXNnc3RyICJOaMOhbmggVGhlbyBkw7VpIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODIgbGliL2Nob29zZV9yZXYudGNsOjU0NAotbXNnaWQgIlRhZyIKLW1zZ3N0ciAiVGjhursiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKLW1zZ3N0ciAixJBp4buDbSB4w6l0IGR1eeG7h3Qga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQyCi1tc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgotbXNnc3RyICJDaMawYSBjaOG7jW4gxJFp4buDbSB4w6l0IGR1eeG7h3QuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCi1tc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCi1tc2dzdHIgIkJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSBy4buXbmcuIgotCi0jOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTM3Ci1tc2dpZCAiVXBkYXRlZCIKLW1zZ3N0ciAixJDDoyBj4bqtcCBuaOG6rXQiCi0KLSM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjUKLW1zZ2lkICJVUkwiCi1tc2dzdHIgIlVSTCIKLQotIzogbGliL2NvbW1pdC50Y2w6OQorIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCi0iXG4iCi0iWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKLSJ0byBhbWVuZC5cbiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKIG1zZ3N0ciAiIgotIuG7niDEkcOieSBjaOG6s25nIGPDsyBnw6wgxJHhu4MgdHUgYuG7lSBj4bqjLlxuIgotIlxuIgotIkLhuqFuIMSRYW5nIHThuqFvIGzhuqduIGNodXnhu4NuIGdpYW8ga2jhu59pIHThuqFvLiDhu54gxJHDonkga2jDtG5nIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIHRyxrDhu5tjICIKLSJuw6BvIMSR4buDIG3DoCB0dSBi4buVLlxuIgorImtow7RuZyB0aOG7gyDEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24gY+G7p2EgSEVBRCB0aMOgbmggJXMga2hpIG3DoCBuw7MgY2jhurNuZyBjaOG7iSDEkeG6v24gbmjDoW5oICIKKyJuw6BvIGPhuqMuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxOAorIzogYnVpbHRpbi9icmFuY2guYzo4MDQgYnVpbHRpbi9icmFuY2guYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAia2jDtG5nIGPDsyBuaMOhbmggbsOgbyBuaMawIHRo4bq/IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiY2jGsGEgY8OzIG5ow6FuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgInF1w6Egbmhp4buBdSB0aGFtIHPhu5EgxJHhu4MgYuG7jyDEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI1Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGLhu48gxJHhurd0IHRoxrDhu6NuZyBuZ3Xhu5NuIGPhu6dhIEhFQUQga2jDtG5nIGNo4buJIMSR4bq/biBt4buZdCBuaMOhbmggbsOgbyBj4bqjLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJOaMOhbmgg4oCcJXPigJ0ga2jDtG5nIGPDsyB0aMO0bmcgdGluIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQogbXNnaWQgIiIKLSJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKLSJcbiIKLSJZb3UgYXJlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgIgotImNvbXBsZXRlZC4gIFlvdSBjYW5ub3QgYW1lbmQgdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZSAiCi0iY3VycmVudCBtZXJnZSBhY3Rpdml0eS5cbiIKKyJUaGUgLWEsIGFuZCAtciwgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IHRha2UgYSBicmFuY2ggbmFtZS5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdXNlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIKIG1zZ3N0ciAiIgotIktow7RuZyB0aOG7gyB0dSBi4buVIHRyb25nIGtoaSBow7JhIHRy4buZbi5cbiIKLSJcbiIKLSJC4bqhbiBoaeG7h24gxJFhbmcg4bufIGdp4buvYSBxdcOhIHRyw6xuaCBow7JhIHRyw7RuLCBtw6AgbsOzIGNoxrBhIGhvw6BuIHThuqV0LiBC4bqhbiBraMO0bmcgdGjhu4MgIgotInR1IGLhu5UgIGzhuqduIGNodXnhu4NuIGdpYW8gdGnhu4FuIG5oaeG7h20gdHLhu6sgcGhpIGLhuqFuIGLDo2kgYuG7jyBs4bqnbiBow7JhIHRy4buZbiBoaeG7h24gxJFhbmcgIgotImvDrWNoIGhv4bqhdC5cbiIKKyJIYWkgdMO5eSBjaOG7jW4gLWEgdsOgIC1yIMOhcCBk4bulbmcgY2hvIGzhu4duaCDigJxnaXQgYnJhbmNo4oCdIGtow7RuZyBuaOG6rW4gbeG7mXQgdMOqbiAiCisibmjDoW5oLlxuIgorIkPDsyBwaOG6o2kgw70gYuG6oW4gbMOgIGTDuW5nOiAtYXwtciAtLWxpc3QgPG3huqt1Pj8iCiAKLSM6IGxpYi9jb21taXQudGNsOjQ4Ci1tc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6o2kgZOG7ryBsaeG7h3UgY2h1eeG7g24gZ2lhbyBjaG8gbOG7h25oIHR1IGLhu5U6IgotCi0jOiBsaWIvY29tbWl0LnRjbDo3NQotbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSDEkcaw4bujYyDEkeG7i25oIGRhbmggY+G7p2EgYuG6oW46IgotCi0jOiBsaWIvY29tbWl0LnRjbDo4MAotbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCi1tc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQga2jDtG5nIGjhu6NwIGzhu4c6IgotCi0jOiBsaWIvY29tbWl0LnRjbDoxMjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKLW1zZ3N0ciAiY+G6o25oIGLDoW86IFRjbCBraMO0bmcgaOG7lyB0cuG7oyBi4bqjbmcgbcOjICclcycuIgotCi0jOiBsaWIvY29tbWl0LnRjbDoxNDkKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1CiBtc2dpZCAiIgotIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgotIlxuIgotIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCi0icmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKLSJcbiIKLSJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgIgorIictLXNldC11cHN0cmVhbS10bycgaW5zdGVhZC4iCiBtc2dzdHIgIiIKLSJUcuG6oW5nIHRow6FpIHF1w6l0IGtow7RuZyBraOG7m3AgduG7m2kgdHLhuqFuZyB0aMOhaSBraG8uXG4iCi0iXG4iCi0iQ8OzIEdpdCBraMOhYyDEkcOjIHPhu61hIGtobyBuw6B5IGvhu4MgdOG7qyBs4bqnbiBxdcOpdCBjdeG7kWkuIEPhuqduIHF1w6l0IGzhuqFpIHRyxrDhu5tjIGtoaSB0aOG7sWMgIgotImhp4buHbiB2aeG7h2MgY2h1eeG7g24gZ2lhbyBraMOhYy5cbiIKLSJcbiIKLSJT4bq9IHRo4buxYyBoaeG7h24gdmnhu4djIHF1w6l0IGzhuqFpIG5nYXkgYsOieSBnaeG7nWkuXG4iCisidMO5eSBjaOG7jW4gLS1zZXQtdXBzdHJlYW0gxJHDoyBraMO0bmcgY8OybiDEkcaw4bujYyBo4buXIHRy4bujIG7hu69hLiBWdWkgbMOybmcgZMO5bmcg4oCcLS0iCisidHJhY2vigJ0gaG/hurdjIOKAnC0tc2V0LXVwc3RyZWFtLXRv4oCdIMSR4buDIHRoYXkgdGjhur8uIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxNzMKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworI3wgbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxjw6FjIHTDuXkgY2jhu41uPl0gPHThuq1wX3Rpbj4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNiBidWlsdGluL2J1bmRsZS5jOjI4Cittc2dpZCAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IgorbXNnc3RyICJnaXQgYnVuZGxlIHZlcmlmeSBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8dOG6rXAtdGluPiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNyBidWlsdGluL2J1bmRsZS5jOjMzCittc2dpZCAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBsaXN0LWhlYWRzIDx04bqtcCB0aW4+IFs8dMOqbiB0aGFtIGNoaeG6v3U+Li4uXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOCBidWlsdGluL2J1bmRsZS5jOjM4Cittc2dpZCAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgdW5idW5kbGUgPHThuq1wIHRpbj4gWzx0w6puIHRoYW0gY2hp4bq/dT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIyOAorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIGLhu5kgxJFvIHRp4bq/biB0csOsbmgiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjMwCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGLhu5kgxJFvIHRp4bq/biB0csOsbmgiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjMyCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgImhp4buDbiB0aOG7iyBi4buZIMSRbyB0aeG6v24gdHJp4buDbiB0cm9uZyBzdeG7kXQgcGhhIGdoaSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM1Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJ0xrDGoW5nIHThu7EgLS1hbGwtcHJvZ3Jlc3Mga2hpIGLhu5kgxJFvIHRp4bq/biB0csOsbmggxJHGsOG7o2MgeHXhuqV0IGhp4buHbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo5MworbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIkPhuqduIG3hu5l0IGtobyBjaOG7qWEgxJHhu4MgY8OzIHRo4buDIHThuqFvIG3hu5l0IGJ1bmRsZS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0Cittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgY2hpIHRp4bq/dCBidW5kbGUgKGLDsykiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAi4oCcJXPigJ0gdOG7kXRcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjAKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIkPhuqduIG3hu5l0IGtobyBjaOG7qWEgxJHhu4MgY8OzIHRo4buDIGdp4bqjaSBuw6luIG3hu5l0IGJ1bmRsZS4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTYwOQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgImNoaSB0aeG6v3Q7IHBo4bqjaSDEkcaw4bujYyDEkeG6t3QgdHLGsOG7m2MgbeG7mXQgbOG7h25oLWNvbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIktow7RuZyBoaeG7g3UgY8OidSBs4buHbmggY29uOiAlcyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NQogbXNnaWQgIiIKLSJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgotIlxuIgotIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgotImJlZm9yZSBjb21taXR0aW5nLlxuIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKIG1zZ3N0ciAiIgotIkPDoWMgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luIGtow7RuZyB0aOG7gyDEkcaw4bujYyBjaHV54buDbiBnaWFvLlxuIgotIlxuIgotIlThuq1wIHRpbiAlcyBjw7MgeHVuZyDEkeG7mXQgaMOyYSB0cuG7mW4uIELhuqFuIHBo4bqjaSBnaeG6o2kgcXV54bq/dCBjaMO6bmcgdsOgIMSRxrBhIGzDqm4gYuG7hyAiCi0icGjDs25nIHRyxrDhu5tjIGtoaSBjaHV54buDbiBnaWFvLlxuIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDxraeG7g3U+IHwgLS10ZXh0Y29udikgfCAtLWZpbHRlcnMpIFstLXBhdGg9PMSRxrDhu51uZy9k4bqrbj5dIDzEkeG7kWlfdMaw4bujbmc+IgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODEKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKIG1zZ2lkICIiCi0iVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgotIlxuIgotIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgogbXNnc3RyICIiCi0iVMOsbSB0aOG6pXkgdHLhuqFuZyB0aMOhaSB04bqtcCB0aW0ga2jDtG5nIGhp4buDdSAlcy5cbiIKLSJcbiIKLSJU4bqtcCB0aW4gJXMga2jDtG5nIHRo4buDIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8gYuG7n2kgY2jGsMahbmcgdHLDrG5oIG7DoHkuXG4iCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgogCi0jOiBsaWIvY29tbWl0LnRjbDoxODkKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBiYXRjaCBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiY2jhu4kgbeG7mXQgdMO5eSBjaOG7jW4gYmF0Y2ggxJHGsOG7o2MgY2jhu4kgcmEiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzUKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjxraeG7g3U+IGzDoCBt4buZdCB0cm9uZyBz4buROiBibG9iLCB0cmVlLCBjb21taXQgaG/hurdjIHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgImhp4buDbiB0aOG7iyBraeG7g3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM3Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGvDrWNoIHRoxrDhu5tjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAidGhvw6F0IHbhu5tpIDAga2hpIGtow7RuZyBjw7MgbOG7l2kiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDAKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiaW4gbuG7mWkgZHVuZyDEkeG7kWkgdMaw4bujbmcgZOG6oW5nIGThu4UgxJHhu41jIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQyCittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInbhu5tpIMSR4buRaSB0xrDhu6NuZyBibG9iLCBjaOG6oXkgbOG7h25oIHRleHRjb252IHRyw6puIG7hu5lpIGR1bmcgY+G7p2EgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiduG7m2kgxJHhu5FpIHTGsOG7o25nIGJsb2IsIGNo4bqheSBs4buHbmggZmlsdGVycyB0csOqbiBu4buZaSBkdW5nIGPhu6dhIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0NSBnaXQtc3VibW9kdWxlLnNoOjk5MgorbXNnaWQgImJsb2IiCittc2dzdHIgImJsb2IiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAiZMO5bmcgbeG7mXQgxJHGsOG7nW5nIGThuqtuIHLDtSByw6BuZyBjaG8gLS10ZXh0Y29udi8tLWZpbHRlcnMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDgKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgImNobyBwaMOpcCAtcyB2w6AgLXQgxJHhu4MgbMOgbSB2aeG7h2MgduG7m2kgY8OhYyDEkeG7kWkgdMaw4bujbmcgc2FpL2jhu49uZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OQorbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAixJHhu4dtIGvhur90IHh14bqldCAtLWJhdGNoIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjUxCittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIHRow7RuZyB0aW4gdsOgIG7hu5lpIGR1bmcgY+G7p2EgY8OhYyDEkeG7kWkgdMaw4bujbmcgbOG6pXkgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB0aMO0bmcgdGluIHbhu4EgxJHhu5FpIHTGsOG7o25nIGZlZCAgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICJ0aGVvIGxpw6puIGvhur90IG3hu4FtIHRyb25nLWPDonkgKMSRxrDhu6NjIGTDuW5nIHbhu5tpIC0tYmF0Y2ggaGF5IC0tYmF0Y2gtY2hlY2spIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYxCittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG3hu41pIMSR4buRaSB0xrDhu6NuZyB24bubaSAtLWJhdGNoIGhheSAtLWJhdGNoLWNoZWNrIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjYzCittc2dpZCAiZG8gbm90IG9yZGVyIC0tYmF0Y2gtYWxsLW9iamVjdHMgb3V0cHV0IgorbXNnc3RyICLEkeG7q25nIHPhuq9wIHjhur9wIMSR4bqndSByYSAtLWJhdGNoLWFsbC1vYmplY3RzIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+4oCmXSBbLS1dIHTDqm4txJHGsOG7nW5nLWThuqtu4oCmIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxNAorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPuKApl0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxCittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICJiw6FvIGPDoW8gdOG6pXQgY+G6oyBjw6FjIHRodeG7mWMgdMOtbmggxJHhurd0IHRyw6puIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjIKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiY2jhu4kgZMO5bmcgLmdpdGF0dHJpYnV0ZXMgdOG7qyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjUgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICLEkeG7jWMgdMOqbiB04bqtcCB0aW4gdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImNo4bqlbSBk4bupdCBjw6FjIGLhuqNuIGdoaSB2w6BvIHbDoCByYSBi4bqxbmcga8O9IHThu7EgTlVMTCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMSBidWlsdGluL2NoZWNrb3V0LmM6MTQzNSBidWlsdGluL2djLmM6NTM3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA2Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJjaOG6t24gY8OhYyBiw6FvIGPDoW8gdGnhur9uIHRyw6xuaCBob+G6oXQgxJHhu5luZyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbmjhu69uZyDEkcaw4budbmcgZOG6q24gxJHhuqd1IHbDoG8ga2jDtG5nIGto4bubcCB24bubaSBt4bqrdSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzozMQorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICJi4buPIHF1YSBt4bulYyBs4bulYyBraGkga2nhu4NtIHRyYSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjAKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2jhu4kgxJHhu4tuaCBjw6FjIHTDqm4gxJHGsOG7nW5nIGThuqtuIHbhu5tpIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYzCittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IGNo4buJIGjhu6NwIGzDvSB24bubaSAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICJjaMawYSBjaOG7iSByYSDEkcaw4budbmcgZOG6q24iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY5Cittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIi0tcXVpZXQgY2jhu4kgaOG7o3AgbOG7hyB24bubaSB0w6puIMSRxrDhu51uZyBk4bqrbiDEkcahbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzEKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGTDuW5nIGPhuqMgaGFpIHTDuXkgY2jhu41uIC0tcXVpZXQgdsOgIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzQKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICJ0w7l5LWNo4buNbiAtLW5vbi1tYXRjaGluZyBjaOG7iSBo4bujcCBs4buHIGtoaSBkw7luZyB24bubaSAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjkKK21zZ2lkICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCittc2dzdHIgImdpdCBjaGVjay1tYWlsbWFwIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDxkYW5oLWLhuqE+4oCmIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxNAorbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLEkeG7k25nIHRo4budaSDEkeG7jWMgY8OhYyBkYW5oIGLhuqEgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBkYW5oIGLhuqE6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgcmEgZGFuaCBi4bqhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLS1dIFs8dOG6rXAtdGluPuKApl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAic3RhZ2UgbsOqbiBnaeG7r2EgMSB2w6AgMyBoYXkgYWxsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgImzhuqV5IHJhIHRvw6BuIGLhu5kgY8OhYyB04bqtcCB0aW4gdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY1Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICLDqXAgYnXhu5ljIGdoaSDEkcOoIGzDqm4gdOG6rXAgdGluIMSRw6Mgc+G6tW4gY8OzIHThu6sgdHLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjcKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisia2jDtG5nIGPhuqNuaCBiw6FvIGNobyBuaOG7r25nIHThuq1wIHRpbiB04buTbiB04bqhaSB2w6Aga2jDtG5nIGPDsyB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjkKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgImtow7RuZyBjaGVja291dCBjw6FjIHThuq1wIHRpbiBt4bubaSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3MQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICJj4bqtcCBuaOG6rXQgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB0cm9uZyB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzUKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIsSR4buNYyBkYW5oIHPDoWNoIMSRxrDhu51uZyBk4bqrbiB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgImdoaSBu4buZaSBkdW5nIHbDoG8gdOG6rXAgdGluIHThuqFtIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc4IGJ1aWx0aW4vY29sdW1uLmM6MzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg1IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg4CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MgorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY3OQorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAiY2h14buXaSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OQorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgImtoaSB04bqhbyBjw6FjIHThuq1wIHRpbiwgbuG7kWkgdGjDqm0gPGNodeG7l2k+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTgxCittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgInNhbyBjaMOpcCByYSBjw6FjIHThuq1wIHRpbiB04burIGLhu4cgcGjDs25nIGPDsyB0w6puIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8bmjDoW5oPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMyCittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxjw6FjIHTDuXkgY2jhu41uPl0gWzxuaMOhbmg+XSAtLSA8dOG6rXAtdGluPuKApiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8bmjDoW5oPl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MgorbXNnaWQgImdpdCByZXN0b3JlIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08YnJhbmNoPl0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcmVzdG9yZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLS1zb3VyY2U9PG5ow6FuaD5dIDx04bqtcCB0aW4+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSBraMO0bmcgY8OzIGPDoWMgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyB0YSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NyBidWlsdGluL2NoZWNrb3V0LmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSBraMO0bmcgY8OzIGPDoWMgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIGPDsyB04bqldCBj4bqjIGPDoWMgcGhpw6puIGLhuqNuIGPhuqduIHRoaeG6v3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIGPDsyBjw6FjIHBoacOqbiBi4bqjbiBj4bqnbiB0aGnhur90IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ06IGtow7RuZyB0aOG7gyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRow6ptIGvhur90IHF14bqjIGjDsmEgdHLhu5luIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gIsSQw6MgdOG6oW8gbOG6oWkgJWQgeHVuZyDEkeG7mXQgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAixJDDoyBj4bqtcCBuaOG6rXQgxJHGsOG7nW5nIGThuqtuICVkIHThu6sgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICLEkMOjIGPhuq1wIG5o4bqtdCDEkcaw4budbmcgZOG6q24gJWQgdOG7qyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQxMiBidWlsdGluL2NoZWNrb3V0LmM6NDE1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICJraMO0bmcgxJHGsOG7o2MgZMO5bmcg4oCcJXPigJ0gduG7m2kgY8OhYyDEkcaw4budbmcgZOG6q24gY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDI1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICJraMO0bmcgxJHGsOG7o2MgZMO5bmcg4oCcJXPigJ0gduG7m2kgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCBjw6FjIMSRxrDhu51uZyBk4bqrbiB2w6AgY2h1eeG7g24gxJHhur9uIG5ow6FuaCDigJwlc+KAnSBjw7luZyBt4buZdCBsw7pjLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgImtow7RuZyBjaOG7iSDEkeG7i25oICclcycga2jDtG5nICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgInBo4bqjaSBjw7Mg4oCcJXPigJ0ga2hpIGtow7RuZyBjaOG7iSDEkeG7i25oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQ1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBvciAnJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycgaGF5ICclcycga2jDtG5nIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgyIGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6ODIKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiYuG6oW4gY+G6p24gcGjhuqNpIGdp4bqjaSBxdXnhur90IGLhuqNuZyBt4bulYyBs4bulYyBoaeG7h24gdOG6oWkgY+G7p2EgYuG6oW4gdHLGsOG7m2MgxJHDoyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczMgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCi0iXG4iCi0iWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKKyJjYW5ub3QgY29udGludWUgd2l0aCBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIgorIiVzIgogbXNnc3RyICIiCi0iS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIGPhuqduIGNodXnhu4NuIGdpYW8uXG4iCi0iXG4iCi0iQuG6oW4gcGjhuqNpIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcgw610IG5o4bqldCBsw6AgbeG7mXQgdOG6rXAgdGluIHRyxrDhu5tjIGtoaSBjw7MgdGjhu4MgY2h1eeG7g24gIgotImdpYW8uXG4iCisia2jDtG5nIHRo4buDIHRp4bq/cCB04bulYyB24bubaSBjw6FjIHRoYXkgxJHhu5VpIMSRw6MgxJHGsOG7o2MgxJHGsGEgbMOqbiBi4buHIHBow7NuZyB0cm9uZyBjw6FjIGTDsm5nICIKKyJzYXU6XG4iCisiJXMiCiAKLSM6IGxpYi9jb21taXQudGNsOjIwNAorIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gcmVmbG9nIGNobyDigJwlc+KAnTogJXNcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg3NworbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEIGhp4buHbiBnaeG7nSB04bqhaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4MSBidWlsdGluL2Nsb25lLmM6NzE2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBIRUFEIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAixJDhurd0IGzhuqFpIG5ow6FuaCDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICLEkMOjIHPhurVuIHPDoG5nIHRyw6puIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIsSQw6MgY2h1eeG7g24gdOG7m2kgdsOgIMSR4bq3dCBs4bqhaSBuaMOhbmgg4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NCBidWlsdGluL2NoZWNrb3V0LmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLEkMOjIGNodXnhu4NuIMSR4bq/biBuaMOhbmggbeG7m2kg4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLEkMOjIGNodXnhu4NuIMSR4bq/biBuaMOhbmgg4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk0NworIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIg4oCmIHbDoCBuaGnhu4F1IGjGoW4gJWQuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgogIlxuIgotIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgogIlxuIgotIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKLSItIFNlY29uZCBsaW5lOiBCbGFua1xuIgotIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKLW1zZ3N0ciAiIgotIkjDo3kgY3VuZyBj4bqlcCBs4budaSBjaMO6IGdp4bqjaSBjaG8gbOG6p24gY2h1eeG7g24gZ2lhby5cbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiQ+G6o25oIGLDoW86IGLhuqFuIMSRw6MgcuG7nWkgYuG7jyAlZCBs4bqnbiBjaHV54buDbiBnaWFvIGzhuqFpIMSR4bqxbmcgc2F1LCBraMO0bmcgxJHGsOG7o2Mga+G6v3QgbuG7kWkgIgorIsSR4bq/blxuIgorImLhuqV0IGvhu7MgbmjDoW5oIG7DoG8gY+G7p2EgYuG6oW46XG4iCiAiXG4iCi0iTOG7nWkgY2jDuiBnaeG6o2kgdOG7kXQgbmjhuqV0IG7Dqm4gY8OzIMSR4buLbmggZOG6oW5nIHNhdTpcbiIKLSJcbiIKLSItIETDsm5nIMSR4bqndSB0acOqbjogTcO0IHThuqMgbmjhu69uZyBnw6wgYuG6oW4gxJHDoyBsw6BtLlxuIgotIi0gRMOybmcgdGjhu6kgaGFpOiDEkOG7gyB0cuG7kW5nXG4iCi0iLSBDw6FjIGTDsm5nIGPDsm4gbOG6oWk6IE3DtCB04bqjIHhlbSB2w6wgc2FvIG5o4buvbmcgdGhheSDEkeG7lWkgbsOgeSBsw6AgY+G6p24gdGhp4bq/dC5cbiIKKyIlc1xuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyMzUKLW1zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKLW1zZ3N0ciAixJBhbmcgZ+G7jWkgbcOzYyAoaG9vaykgcHJlLWNvbW1pdC4uLiIKLQotIzogbGliL2NvbW1pdC50Y2w6MjUwCi1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCi1tc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyBraMaw4bubYyB04burIGRvIG3Ds2MgcHJlLWNvbW1pdC4iCi0KLSM6IGxpYi9jb21taXQudGNsOjI2OQorIzogYnVpbHRpbi9jaGVja291dC5jOjk3MgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBhYm91dCB0byBjb21taXQgb24gYSBkZXRhY2hlZCBoZWFkLiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICIKLSJ0aGluZyB0byBkbyBiZWNhdXNlIGlmIHlvdSBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2ggeW91IHdpbGwgbG9zZSB5b3VyICIKLSJjaGFuZ2VzIGFuZCBpdCBjYW4gYmUgZGlmZmljdWx0IHRvIHJldHJpZXZlIHRoZW0gbGF0ZXIgZnJvbSB0aGUgcmVmbG9nLiBZb3UgIgotInNob3VsZCBwcm9iYWJseSBjYW5jZWwgdGhpcyBjb21taXQgYW5kIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gY29udGludWUuXG4iCi0iIFxuIgotIiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcHJvY2VlZCB3aXRoIHlvdXIgQ29tbWl0PyIKLW1zZ3N0ciAiIgotIkLhuqFuIHRo4buxYyBoaeG7h24gY2h1eeG7g24gZ2lhbyDhu58gY2jhu5cgxJHDoyB0w6FjaCBy4budaSBraOG7j2kgY8OhYyDEkeG6p3UuIMSQaeG7gXUgbsOgeSBsw6Agbmd1eSAiCi0iaGnhu4NtIGLhu59pIG7hur91IGLhuqFuIGNodXnhu4NuIHNhbmcgbmjDoW5oIGtow6FjIHRow6wgYuG6oW4gc+G6vSBt4bqldCBuaOG7r25nIHRoYXkgxJHhu5VpIG7DoHkgdsOgICIKLSJ2aeG7h2MgbOG6pXkgbOG6oWkgY2jDum5nIHThu6sgcmVmbG9nIGPFqW5nIGtow7Mga2jEg24uIELhuqFuIGfhuqduIG5oxrAgY2jhuq9jIGNo4bqvbiBsw6AgbsOqbiBo4buneSAiCi0iYuG7jyBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkgdsOgIHThuqFvIG3hu5l0IG5ow6FuaCBt4bubaSB0csaw4bubYyBraGkgdGnhur9wIHThu6VjLlxuIgotIiBcbiIKLSIgQuG6oW4gY8OzIHRo4buxYyBz4buxIG114buRbiB0aeG6v3AgdOG7pWMgY2h1eeG7g24gZ2lhbz8iCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyJO4bq/dSBi4bqhbiBtdeG7kW4gZ2nhu68gKGNow7puZykgbsOzIGLhurFuZyBjw6FjaCB04bqhbyByYSBt4buZdCBuaMOhbmggbeG7m2ksIMSRw6J5IGPDsyBs4bq9IGzDoFxuIgorIm3hu5l0IHRo4budaSDEkWnhu4NtIHRow61jaCBo4bujcCDEkeG7gyBsw6BtIHRo4bq/IGLhurFuZyBs4buHbmg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPHTDqm5fbmjDoW5oX23hu5tpPiAlc1xuIgorIlxuIgogCi0jOiBsaWIvY29tbWl0LnRjbDoyOTAKLW1zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKLW1zZ3N0ciAixJBhbmcgZ+G7jWkgbcOzYyBjb21taXQtbXNnLi4uIgorIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDcKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJs4buXaSBu4buZaSBi4buZIHRyb25nIGtoaSBkaSBjaHV54buDbiBxdWEgY8OhYyDEkWnhu4NtIHjDqXQgZHV54buHdCIKIAotIzogbGliL2NvbW1pdC50Y2w6MzA1Ci1tc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCi1tc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyBraMaw4bubYyB04burIGRvIG3Ds2MgY29tbWl0LW1zZy4iCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICJW4buLIHRyw60gdHLGsOG7m2Mga2lhIGPhu6dhIEhFQUQgbMOgIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMTgKLW1zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCi1tc2dzdHIgIkNodXnhu4NuIGdpYW8gY8OhYyB0aGF5IMSR4buVaS4uLiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg2Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiQuG6oW4gdOG6oWkgbmjDoW5oIG3DoCBuw7MgY2jGsGEgaOG7gSDEkcaw4bujYyBzaW5oIHJhIgogCi0jOiBsaWIvY29tbWl0LnRjbDozMzQKLW1zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCi1tc2dzdHIgImfhurdwIGzhu5dpIGtoaSB3cml0ZS10cmVlOiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTc4Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkIgorbXNnc3RyICJjaOG7iSBj4bqnbiBt4buZdCB0aGFtIGNoaeG6v3UiCiAKLSM6IGxpYi9jb21taXQudGNsOjMzNSBsaWIvY29tbWl0LnRjbDozNzkgbGliL2NvbW1pdC50Y2w6NDAwCi1tc2dpZCAiQ29tbWl0IGZhaWxlZC4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBjaHV54buDbiBnaWFvLiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICJjaOG7iSBj4bqnbiBt4buZdCB0aGFtIGNoaeG6v3UsIG5oxrBuZyBs4bqhaSDEkcawYSByYSAlZC4iCiAKLSM6IGxpYi9jb21taXQudGNsOjM1MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCi1tc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gJXMgY8OzIHbhursgxJHDoyBoxrAgaOG7j25nIgotCi0jOiBsaWIvY29tbWl0LnRjbDozNTcKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjMyCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKLSJcbiIKLSJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCiBtc2dzdHIgIiIKLSJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHhu4MgY2h1eeG7g24gZ2lhby5cbiIKLSJcbiIKLSJLaMO0bmcgY8OzIHThuq1wIHRpbiBuw6BvIMSRxrDhu6NjIHPhu61hIGLhu59pIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB2w6AgbsOzIGtow7RuZyBwaOG6o2kgbMOgICIKLSJs4bqnbiBjaHV54buDbiBnaWFvIGjDsmEgdHLhu5luLlxuIgotIlxuIgotIlPhur0gdGjhu7FjIGhp4buHbiB2aeG7h2MgcXXDqXQgbOG6oWkgbmdheSBiw6J5IGdp4budLlxuIgorIuKAnCVz4oCdIGtow7RuZyB0aOG7gyBsw6AgY+G6oyB04bqtcCB0aW4gbuG7mWkgYuG7mSB2w6AgbeG7mXQgbmjDoW5oIHRoZW8gZMO1aS5cbiIKKyJWdWkgbG9uZyBkw7luZyAtLSAodsOgIHTDuXkgY2jhu41uIHRow6ptIC0tbm8tZ3Vlc3MpIMSR4buDIHRyw6FuaCBs4bqrbiBs4buZbiIKIAotIzogbGliL2NvbW1pdC50Y2w6MzY0Ci1tc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgotbXNnc3RyICJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHhu4MgY2h1eeG7g24gZ2lhby4iCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NSBidWlsdGluL3dvcmt0cmVlLmM6MjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICJ0aGFtIGNoaeG6v3Uga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgogCi0jOiBsaWIvY29tbWl0LnRjbDozNzgKLW1zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgotbXNnc3RyICJjb21taXQtdHJlZSBn4bq3cCBs4buXaToiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1OCBidWlsdGluL2NoZWNrb3V0LmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgInRoYW0gY2hp4bq/dSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBjw6J5OiVzIgogCi0jOiBsaWIvY29tbWl0LnRjbDozOTkKLW1zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCi1tc2dzdHIgImPhuq1wIG5o4bqtdCB0aGFtIGNoaeG6v3UgdGjhuqV0IGLhuqFpOiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgdGFnICclcyciCittc2dzdHIgImPhuqduIG3hu5l0IG5ow6FuaCwgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyB0aOG6uyDigJwlc+KAnSIKIAotIzogbGliL2NvbW1pdC50Y2w6NDkyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgotbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgdOG6oW8gJXM6ICVzIgorIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgImPhuqduIG3hu5l0IG5ow6FuaCwgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyBuaMOhbmggbcOheSBwaOG7pWMgduG7pSDigJwlc+KAnSIKIAotIzogbGliL2NvbnNvbGUudGNsOjU5Ci1tc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKLW1zZ3N0ciAixJBhbmcgY2jhuqF5Li4gdnVpIGzDsm5nIMSR4bujaS4uLiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgJyVzJyIKK21zZ3N0ciAiY+G6p24gbeG7mXQgbmjDoW5oLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIOKAnCVz4oCdIgogCi0jOiBsaWIvY29uc29sZS50Y2w6MTg2Ci1tc2dpZCAiU3VjY2VzcyIKLW1zZ3N0ciAiVGjDoG5oIGPDtG5nIgorIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAiY+G6p24gbeG7mXQgbmjDoW5oLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIOKAnCVz4oCdIgogCi0jOiBsaWIvY29uc29sZS50Y2w6MjAwCi1tc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgotbXNnc3RyICJM4buXaTogQ8OidSBs4buHbmggZ+G6t3AgbOG7l2kiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDIKLW1zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKLW1zZ3N0ciAiU+G7kSBsxrDhu6NuZyDEkeG7kWkgdMaw4bujbmcgYuG7iyBt4bqldCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0MwotbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgotbXNnc3RyICJEdW5nIGzGsOG7o25nIMSRxKlhIMSRxrDhu6NjIGTDuW5nIGLhu59pIGPDoWMgxJHhu5FpIHTGsOG7o25nIGLhu4sgbeG6pXQiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKLW1zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIlPhu5EgbMaw4bujbmcgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIMSRw7NuZyBnw7NpIgotCi0jOiBsaWIvZGF0YWJhc2UudGNsOjQ1Ci1tc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgotbXNnc3RyICJT4buRIGzGsOG7o25nIGfDs2kiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKLW1zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCi1tc2dzdHIgIkR1bmcgbMaw4bujbmcgxJHEqWEgxJHGsOG7o2MgZMO5bmcgYuG7n2kgY8OhYyDEkeG7kWkgdMaw4bujbmcgZ8OzaSIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0NwotbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCi1tc2dzdHIgIkPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kgY2jhu50geMOpbiBi4bubdCIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo0OAotbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCi1tc2dzdHIgIkPDoWMgdOG6rXAgdGluIHLDoWMiCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKLW1zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgotbXNnc3RyICJOw6luIGPGoSBz4bufIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyIKLQotIzogbGliL2RhdGFiYXNlLnRjbDo4MwotbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgotbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIGPGoSBz4bufIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyBi4bqxbmcgbOG7h25oIGZzY2siCi0KLSM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMyNwogbXNnaWQgIiIKLSJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCi0iXG4iCi0iVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCi0idGhlIGRhdGFiYXNlLlxuIgotIlxuIgotIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCiBtc2dzdHIgIiIKLSJIaeG7h24ga2hvIG7DoHkgbeG6pXQgxrDhu5tjIGNo4burbmcga2hv4bqjbmcgJWkgxJHhu5FpIHTGsOG7o25nLlxuIgotIlxuIgotIsSQ4buDIHThu5FpIMawdSBow7NhIGhp4buHdSBzdeG6pXQsIGtodXnhur9uIG5naOG7iyBi4bqhbiBuw6puIG7DqW4gY8ahIHPhu58gZOG7ryBsaeG7h3UgY+G7p2EgbcOsbmggIgotImzhuqFpLlxuIgotIlxuIgotIk7DqW4gY8ahIHPhu58gZOG7ryBsaeG7h3UgY2jhu6k/IgorImtow7RuZyB0aOG7gyBjaHV54buDbiBuaMOhbmggdHJvbmcga2hpIMSRYW5nIGjDsmEgdHLhu5luXG4iCisiQ8OibiBuaOG6r2MgZHVuZyBcImdpdCBtZXJnZSAtLXF1aXRcIiBob+G6t2MgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgogCi0jOiBsaWIvZGF0ZS50Y2w6MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgotbXNnc3RyICJOZ8OgeSB0aMOhbmcga2jDtG5nIGjhu6NwIGzhu4cgdOG7qyBHaXQ6ICVzIgotCi0jOiBsaWIvZGlmZi50Y2w6NjQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzMxCiBtc2dpZCAiIgotIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgotIlxuIgotIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgotIlxuIgotIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKLSJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgotIlxuIgotIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgotInRoZSBzYW1lIHN0YXRlLiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCiBtc2dzdHIgIiIKLSJLaMO0bmcgdMOsbSB0aOG6pXkga2jDoWMgYmnhu4d0IGfDrC5cbiIKLSJcbiIKLSIlcyBraMO0bmcgdGhheSDEkeG7lWkuXG4iCi0iXG4iCi0iVGjhu51pIGdpYW4gc+G7rWEgxJHhu5VpIGPhu6dhIHThuq1wIHRpbiBuw6B5IMSRxrDhu6NjIGPhuq1wIG5o4bqtdCBi4bufaSDhu6luZyBk4bulbmcga2jDoWMsIG5oxrBuZyBu4buZaSAiCi0iZHVuZyBiw6puIHRyb25nIHThuq1wIHRpbiB0aMOsIGtow7RuZyB0aGF5IMSR4buVaS5cbiIKLSJcbiIKLSJT4bq9IHRo4buxYyBoaeG7h24gcXXDqXQgbOG6oWkgbeG7mXQgY8OhY2ggdOG7sSDEkeG7mW5nIMSR4buDIHTDrG0gY8OhYyB04bqtcCB0aW4ga2jDoWMgY8OhaSBtw6AgY8OzIHRo4buDICIKLSJjw7MgY8O5bmcgdMOsbmggdHLhuqFuZy4iCisia2jDtG5nIHRo4buDIGNodXnhu4NuIG5oYW5oIOG7nyBnaeG7r2EgbeG7mXQgcGhpw6puIGFtXG4iCisiQ8OibiBuaOG6r2MgZMO5bmcgXCJnaXQgYW0gLS1xdWl0XCIgaG/hurdjIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKIAotIzogbGliL2RpZmYudGNsOjEwNAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKLW1zZ3N0ciAixJBhbmcgdOG6o2kgZGlmZiBj4bunYSAlcy4uLiIKLQotIzogbGliL2RpZmYudGNsOjEyNQorIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzUKIG1zZ2lkICIiCi0iTE9DQUw6IGRlbGV0ZWRcbiIKLSJSRU1PVEU6XG4iCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgogbXNnc3RyICIiCi0iTuG7mElC4buYOiDEkcOjIHhvw6FcbiIKLSJNw4FZQ0jhu6Y6XG4iCisia2jDtG5nIHRo4buDIGNodXnhu4NuIG5ow6FuaCB0cm9uZyBraGkgY+G6o2kgdOG7lVxuIgorIkPDom4gbmjhuq9jIGTDuW5nIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBoYXkgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgogCi0jOiBsaWIvZGlmZi50Y2w6MTMwCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzOQogbXNnaWQgIiIKLSJSRU1PVEU6IGRlbGV0ZWRcbiIKLSJMT0NBTDpcbiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSBjaGVycnktcGlja2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKIG1zZ3N0ciAiIgotIk3DgVlDSOG7pjogxJHDoyB4b8OhXG4iCi0iTuG7mElC4buYOlxuIgorImtow7RuZyB0aOG7gyBjaHV54buDbiBuaMOhbmggdHJvbmcga2hpICBjaGVycnktcGlja2luZ1xuIgorIkPDom4gbmjhuq9jIGTDuW5nIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIGhheSBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCiAKLSM6IGxpYi9kaWZmLnRjbDoxMzcKLW1zZ2lkICJMT0NBTDpcbiIKLW1zZ3N0ciAiTuG7mEktQuG7mDpcbiIKLQotIzogbGliL2RpZmYudGNsOjE0MAotbXNnaWQgIlJFTU9URTpcbiIKLW1zZ3N0ciAiTcOBWS1DSOG7pjpcbiIKLQotIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzQwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBoaeG7g24gdGjhu4sgJXMiCi0KLSM6IGxpYi9kaWZmLnRjbDoyMDMKLW1zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgotbXNnc3RyICJM4buXaSBraGkgdOG6o2kgdOG6rXAgdGluOiIKLQotIzogbGliL2RpZmYudGNsOjIxMAotbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKLW1zZ3N0ciAiS2hvIEdpdCAoZOG7sSDDoW4gY29uKSIKLQotIzogbGliL2RpZmYudGNsOjIyMgotbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKLW1zZ3N0ciAiKiBU4bqtcCB0aW4gbmjhu4sgcGjDom4gKGtow7RuZyBoaeG7g24gdGjhu4sgbuG7mWkgZHVuZykuIgotCi0jOiBsaWIvZGlmZi50Y2w6MjI3Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0MwogbXNnaWQgIiIKLSIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgotIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIHJldmVydGluZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJldmVydCAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCiBtc2dzdHIgIiIKLSIqIFThuq1wIHRpbiBjaMawYSB0aGVvIGTDtWkgbMOgICVkIGJ5dGUuXG4iCi0iKiBDaOG7iSBoaeG7g24gdGjhu4sgJWQgYnl0ZSDEkeG6p3UgLlxuIgorImtow7RuZyB0aOG7gyBjaHV54buDbiBuaMOhbmggdHJvbmcga2hpIGhvw6BuIG5ndXnDqm5cbiIKKyJDw6JuIG5o4bqvYyBkw7luZyBcImdpdCByZXZlcnQgLS1xdWl0XCIgaG/hurdjIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKIAotIzogbGliL2RpZmYudGNsOjIzMwotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDcKK21zZ2lkICJ5b3UgYXJlIHN3aXRjaGluZyBicmFuY2ggd2hpbGUgYmlzZWN0aW5nIgorbXNnc3RyICIiCisiYuG6oW4gaGnhu4duIHThuqFpIMSRYW5nIHRo4buxYyBoaeG7h24gdmnhu4djIGNodXnhu4NuIG5ow6FuaCB0cm9uZyBraGkgxJFhbmcgZGkgY2h1eeG7g24gbuG7rWEgIgorImLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU0Cittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgImPDoWMgxJHGsOG7nW5nIGThuqtuIGtow7RuZyB0aOG7gyBkw7luZyBjw7luZyB24bubaSBjw6FjIG5ow6FuaCBjaHV54buDbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTcgYnVpbHRpbi9jaGVja291dC5jOjEzNjEgYnVpbHRpbi9jaGVja291dC5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpIGPDoWMgbmjDoW5oIGNodXnhu4NuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OSBidWlsdGluL2NoZWNrb3V0LmM6MTM3MiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjEzODAgYnVpbHRpbi9jaGVja291dC5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyB0aOG7gyDEkcaw4bujYyBkw7luZyB24bubaSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgdGjhu4Mgbmjhuq1uIDzEkWnhu4NtLcSR4bqndT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2h1eeG7g24gbmjDoW5oIMSR4bq/biBt4buZdCB0aOG7qSBraMO0bmcgcGjhuqNpIGzDoCBs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5NworbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIKK21zZ3N0ciAidGhp4bq/dSB0aGFtIHPhu5EgbMOgIG5ow6FuaCBob+G6t2MgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0MzkgYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTIKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEzIGJ1aWx0aW4vZmV0Y2guYzoxNjcgYnVpbHRpbi9tZXJnZS5jOjI4NQorIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjcgYnVpbHRpbi9wdWxsLmM6MTM4IGJ1aWx0aW4vcHVzaC5jOjU2MworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzQKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIsOpcCBideG7mWMgYsOhbyBjw6FvIHRp4bq/biB0cmnhu4NuIGPDtG5nIHZp4buHYyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDAKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiBow7JhIHRy4buZbiBraeG7g3UgMy13YXkgduG7m2kgbmjDoW5oIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MSBidWlsdGluL2xvZy5jOjE2OTAgcGFyc2Utb3B0aW9ucy5oOjMyMgorbXNnaWQgInN0eWxlIgorbXNnc3RyICJraeG7g3UiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQyCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAieHVuZyDEkeG7mXQga2nhu4N1IChow7JhIHRy4buZbiBob+G6t2MgZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NCBidWlsdGluL3dvcmt0cmVlLmM6NTAzCittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJy4budaSBi4buPIEhFQUQgdOG6oWkgbOG6p24gY2h1eeG7g24gZ2lhbyB0aGVvIHTDqm4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU1Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIsSR4bq3dCB0aMO0bmcgdGluIHRoxrDhu6NuZyBuZ3Xhu5NuIGNobyBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgIsOpcCBideG7mWMgbOG6pXkgcmEgKGLhu48gxJFpIG5o4buvbmcgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU5Cittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAibmjDoW5oLW3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1OQorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAibmjDoW5oIGtow7RuZyBjaGEgbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYxIGJ1aWx0aW4vbWVyZ2UuYzoyODgKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgImPhuq1wIG5o4bqtdCBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjQKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgImtow7RuZyBraeG7g20gdHJhIG7hur91IGPDonkgbMOgbSB2aeG7h2Mga2jDoWMgxJFhbmcgZ2nhu68gdGhhbSBjaGnhur91IMSRw6MgY2hvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3NworbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorImzhuqV5IHJhIChjaGVja291dCkgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyB0YSBjaG8gY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgwCittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKyJs4bqleSByYSAoY2hlY2tvdXQpIHBoacOqbiBi4bqjbiBj4bunYSBjaMO6bmcgaOG7jSBjaG8gY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJraMO0bmcgZ2nhu5tpIGjhuqFuIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiB0aMOgbmggY2jhu4kgY8OhYyBt4bulYyBy4bqjaSByw6FjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUzNworbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiAtYiwgLUIgdsOgIC0tb3JwaGFuIGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTQwCittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItcCB2w6AgLS1vdmVybGF5IGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTc3Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIGPhuqduIHTDqm4gbeG7mXQgbmjDoW5oIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU4MgorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAidGhp4bq/dSB0w6puIG5ow6FuaDsgaMOjeSB0aOG7rSAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjMxCittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkcOjIGNobyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQgYW5kIGEgYnJhbmNoICclcycgY2Fubm90IGJlIGNyZWF0ZWQgZnJvbSBpdCIKK21zZ3N0ciAiIgorIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gdsOgIG3hu5l0IG5ow6FuaCclc+KAnSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgdOG6oW8gIgorInThu6sgxJHDsyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGtow7RuZyBuaOG6rW4gbeG7mXQgxJHhu5FpIHPhu5EgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1MQorI3wgbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSB4dW5nIGto4bqvYyB24bubaSAtLWRldGFjaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2NTQgYnVpbHRpbi9yZXNldC5jOjMyNAorI3wgbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tcGF0Y2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHh1bmcga2jhuq9jIHbhu5tpIC0tcGF0Y2giCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1Cittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgdsOgIC0tbWVyZ2UgbMOgIHh1bmcga2jhuq9jIHbhu5tpIG5oYXUga2hpXG4iCisiY2hlY2tvdXQgYuG6o25nIG3hu6VjIGzhu6VjIChpbmRleCkuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY3MAorbXNnaWQgInlvdSBtdXN0IHNwZWNpZnkgcGF0aChzKSB0byByZXN0b3JlIgorbXNnc3RyICJi4bqhbiBwaOG6o2kgY2jhu4kgxJHhu4tuaCBjw6FjIHRoxrAgbeG7pWMgbXXhu5FuIGjhu5NpIHBo4bulYyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIHJlbW90ZSB0cmFja2luZyBicmFuY2guXG4iCisiV2UgZm91bmQgJWQgcmVtb3RlcyB3aXRoIGEgcmVmZXJlbmNlIHRoYXQgbWF0Y2hlZC4gU28gd2UgZmVsbCBiYWNrXG4iCisib24gdHJ5aW5nIHRvIHJlc29sdmUgdGhlIGFyZ3VtZW50IGFzIGEgcGF0aCwgYnV0IGZhaWxlZCB0aGVyZSB0b28hXG4iCisiXG4iCisiSWYgeW91IG1lYW50IHRvIGNoZWNrIG91dCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggb24sIGUuZy4gJ29yaWdpbicsXG4iCisieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5hbWU+XG4iCisiXG4iCisiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKyJvbmUgcmVtb3RlLCBlLmcuIHRoZSAnb3JpZ2luJyByZW1vdGUsIGNvbnNpZGVyIHNldHRpbmdcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iCittc2dzdHIgIiIKKyLigJwlc+KAnSBraOG7m3AgaMahbiBt4buZdCBuaMOhbmggbcOheSBjaOG7pyDEkcaw4bujYyB0aGVvIGTDtWkuXG4iCisiQ2jDum5nIHTDtGkgdMOsbSB0aOG6pXkgJWQgbcOheSBjaOG7pyB24bubaSBt4buZdCB0aGFtIGNoaeG6v3Uga2jhu5twLiBEbyDEkcOzIGNow7puZyB0w7RpIGPhu5EgIgorIsSR4buDXG4iCisicGjDom4gZ2nhuqNpIHRoYW0gc+G7kSBuaMawIGzDoCBt4buZdCDEkcaw4budbmcgZOG6q24sIG5oxrBuZyBjxaluZyBn4bq3cCBs4buXaSFcbiIKKyJcbiIKKyJO4bq/dSDDvSBi4bqhbiBsw6AgbOG6pXkgcmEgbmjDoW5oIG3DoXkgY2jhu6cgxJHGsOG7o2MgdGhlbyBkw7VpLCB2w60gZOG7pSDigJxvcmlnaW7igJ0sXG4iCisiYuG6oW4gY8OzIHRo4buDIGzDoG0gbmjGsCB24bqteSBi4bqxbmcgY8OhY2ggY2jhu4kgxJHhu4tuaCDEkeG6p3kgxJHhu6cgdMOqbiB24bubaSB0w7l5IGNo4buNbiAtLXRyYWNrOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPHTDqm4+XG4iCisiXG4iCisiTuG6v3UgYuG6oW4gbXXhu5FuIGx1w7RuIGzhuqV5IHJhIHThu6sgbeG7mXQgPHTDqm4+IG3hu5l0IG7DoXkgY2jhu6cgxrBhIHRow61jaFxuIgorImNoxrBhIHLDtSByw6BuZywgdsOtIGThu6UgbcOheSBjaOG7pyDigJxvcmlnaW7igJ0sIGPDom4gbmjhuq9jIGPDoGkgxJHhurd0XG4iCisiY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1vcmlnaW4gdHJvbmcgY+G6pXUgaMOsbmggY+G7p2EgYuG6oW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNCBidWlsdGluL2NoZWNrb3V0LmM6MTcxNiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NQorIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjcgYnVpbHRpbi9jbG9uZS5jOjEyMSBidWlsdGluL3JlbW90ZS5jOjE2OQorIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEgYnVpbHRpbi93b3JrdHJlZS5jOjQ5OSBidWlsdGluL3dvcmt0cmVlLmM6NTAxCittc2dpZCAiYnJhbmNoIgorbXNnc3RyICJuaMOhbmgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgInThuqFvIHbDoCBjaGVja291dCBt4buZdCBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAidOG6oW8vxJHhurd0X2zhuqFpIHbDoCBjaGVja291dCBt4buZdCBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE4Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAidOG6oW8gcmVmbG9nIGNobyBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIwCittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICLEkW/DoW4gdGjhu6kgaGFpICdnaXQgY2hlY2tvdXQgPGtow7RuZy1uaMOhbmgtbsOgby1uaMawLXbhuq15PicgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcyMQorbXNnaWQgInVzZSBvdmVybGF5IG1vZGUgKGRlZmF1bHQpIgorbXNnc3RyICJkw7luZyBjaOG6vyDEkeG7mSBjaGUgcGjhu6cgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc2NgorbXNnaWQgImNyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAidOG6oW8gdsOgIGNodXnhu4NuIMSR4bq/biBt4buZdCBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY4Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2giCittc2dzdHIgInThuqFvL8SR4bq3dF9s4bqhaSB2w6AgY2h1eeG7g24gxJHhur9uIG3hu5l0IG5ow6FuaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgImfhu6NpIMO9IHRo4bupIGhhaSBcImdpdCBjaGVja291dCA8a2jDtG5nLW5ow6FuaC1uw6BvLW5oxrAtduG6rXk+XCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcyCittc2dpZCAidGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zIgorbXNnc3RyICJ24bupdCBi4buPIGPDoWMgc+G7rWEgxJHhu5VpIMSR4buLYSBwaMawxqFuZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MDQKK21zZ2lkICJ3aGljaCB0cmVlLWlzaCB0byBjaGVja291dCBmcm9tIgorbXNnc3RyICJs4bqleSByYSB04burIHRyZWUtaXNoIG7DoG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA2Cittc2dpZCAicmVzdG9yZSB0aGUgaW5kZXgiCittc2dzdHIgInBo4bulYyBo4buTaSBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA4Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAicGjhu6VjIGjhu5NpIGPDonkgbMOgbSB2aeG7h2MgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMAorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJi4buPIHF1YSBuaOG7r25nIHRo4bupIGNoxrBhIGjDsmEgdHLhu5luOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE4MTEKK21zZ2lkICJ1c2Ugb3ZlcmxheSBtb2RlIgorbXNnc3RyICJkw7luZyBjaOG6vyDEkeG7mSBjaGUgcGjhu6ciCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOAorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8beG6q3U+XSBbLXggfCAtWF0gWy0tXSA8L2PDoWMvxJHGsOG7nW5nLyIKKyJk4bqrbj7igKYiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICLEkGFuZyBn4buhIGLhu48gJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJDw7MgdGjhu4MgZ+G7oSBi4buPICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIsSQYW5nIGLhu48gcXVhIGtobyBjaOG7qWEgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJOw6puIGLhu48gcXVhIGtobyBjaOG7qWEgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBn4buhIGLhu48gJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbHN0YXQgJXNcbiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogxJHhuqd5IMSR4bunIGPhu6dhICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisiVHLhu6MgZ2nDunAgduG7gSBuaOG6r2M6XG4iCisiMSAgICAgICAgICAtIGNo4buNbiBt4buZdCBt4bulYyDEkcaw4bujYyDEkcOhbmggc+G7kVxuIgorImZvbyAgICAgICAgLSBjaOG7jW4gbeG7pWMgdHLDqm4gY8ahIHPhu58gdGnhu4FuIHThu5EgZHV5IG5o4bqldFxuIgorIiAgICAgICAgICAgLSAoxJHhu4MgdHLhu5FuZykga2jDtG5nIGNo4buNbiBnw6wgY+G6o1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzA1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZ1xuIgorbXNnc3RyICIiCisiVHLhu6MgZ2nDunAgduG7gSBuaOG6r2M6XG4iCisiMSAgICAgICAgICAtIGNo4buNbiBt4buZdCBt4bulYyDEkcahblxuIgorIjMtNSAgICAgICAgLSBjaOG7jW4gbeG7mXQgdsO5bmdcbiIKKyIyLTMsNi05ICAgIC0gY2jhu41uIG5oaeG7gXUgdsO5bmdcbiIKKyJmb28gICAgICAgIC0gY2jhu41uIG3hu6VjIGThu7FhIHRyw6puIHRp4buBbiB04buRIGR1eSBuaOG6pXRcbiIKKyIt4oCmICAgICAgICAgLSBraMO0bmcgY2jhu41uIGPDoWMgbeG7pWMgxJHDoyBjaOG7iSByYVxuIgorIiogICAgICAgICAgLSBjaOG7jW4gdOG6pXRcbiIKKyIgICAgICAgICAgIC0gKMSR4buDIHRy4buRbmcpIGvhur90IHRow7pjIHZp4buHYyBjaOG7jW5cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICJI4bqjICglcyk/XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICJN4bqrdSDEkeG7gyBs4buNYyBjw6FjIHThuq1wIHRpbiDEkeG6p3UgdsOgbyBj4bqnbiBs4budIMSRaT4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiQ+G6ok5IIELDgU86IEtow7RuZyB0w6xtIHRo4bqleSBjw6FjIG3hu6VjIMSRxrDhu6NjIGto4bubcCBi4bufaTogJXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MjEKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICJDaOG7jW4gbeG7pWMgbXXhu5FuIHjDs2EiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiWMOzYSBi4buPIOKAnCVz4oCdIFt5L05dPyAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBi4bqvdCDEkeG6p3UgZOG7jW4gZOG6uXBcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gbG/huqFpIHRy4burIGPDoWMgbeG7pWMga2jhu49pIHZp4buHYyB4w7NhXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIGNo4buNbiBjw6FjIG3hu6VjIGPhuqduIHjDs2EgYuG6sW5nIHPhu5FcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0geMOhYyBuaOG6rW4gdHLGsOG7m2MgbeG7l2kgbOG6p24geMOzYSAoZ2nhu5FuZyBuaMawIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gZOG7q25nIHZp4buHYyBk4buNbiBk4bq5cCBs4bqhaVxuIgorImhlbHAgICAgICAgICAgICAgICAgLSBoaeG7g24gdGjhu4sgY2jDrW5oIHRy4bujIGdpw7pwIG7DoHlcbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gdHLhu6MgZ2nDunAgZMOgbmggY2hvIGNo4buNbiBi4bqxbmcgY8OhY2ggbmjhuq9jIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiQ8OzIG114buRbiBn4buhIGLhu48gKGPDoWMpIG3hu6VjIHNhdSDEkcOieSBraMO0bmc6IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIktow7RuZyBjw7JuIHThuq1wLXRpbiBuw6BvIMSR4buDIGThu41uIGThurlwLCDEkWFuZyB0aG/DoXQgcmEuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA5Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgdMOqbiBj4bunYSBjw6FjIHThuq1wIHRpbiDEkcOjIGfhu6EgYuG7jyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICLDqXAgYnXhu5ljIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTEyCittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgImThu41uIGLhurFuZyBraeG7g3UgdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE0Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJn4buhIGLhu48gdG/DoG4gYuG7mSB0aMawIG3hu6VjIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE1IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDggYnVpbHRpbi9kZXNjcmliZS5jOjU1MAorIzogYnVpbHRpbi9ncmVwLmM6OTAxIGJ1aWx0aW4vbG9nLmM6MTc3IGJ1aWx0aW4vbG9nLmM6MTc5CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU3IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjQgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NgorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIm3huqt1IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgInRow6ptIDxt4bqrdT4gdsOgbyB0cm9uZyBxdWkgdOG6r2MgYuG7jyBxdWEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICLEkeG7k25nIHRo4budaSBn4buhIGLhu48gY+G6oyBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE5Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiY2jhu4kgZ+G7oSBi4buPIG5o4buvbmcgdOG6rXAgdGluIGLhu4sgYuG7jyBxdWEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IHbDoCAtWCBraMO0bmcgdGjhu4MgZMO5bmcgY8O5bmcgbmhhdSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDEkcaw4bujYyDEkeG6t3QgdGjDoG5oIHRydWUgdsOgIGtow7RuZyDEkcawYSByYSB0w7l5IGNo4buNbiAtaSwgLW4gbcOgICIKKyJjxaluZyBraMO0bmcgLWY7IHThu6sgY2jhu5FpIGzhu4duaCBk4buNbiBk4bq5cCAoY2xlYW4pIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTQ0Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgbeG6t2MgxJHhu4tuaCDEkcaw4bujYyDEkeG6t3QgbMOgIHRydWUgdsOgIGtow7RuZyDEkcawYSByYSB0w7l5IGNo4buNbiAtaSwgLW4gIgorIm3DoCBjxaluZyBraMO0bmcgLWY7IHThu6sgY2jhu5FpIGzhu4duaCBk4buNbiBk4bq5cCAoY2xlYW4pIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDUKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFstLV0gPGtobz4gWzx0Lm3hu6VjPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJraMO0bmcgdOG6oW8gbeG7mXQgY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJ04bqhbyBraG8gdGh14bqnbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgInThuqFvIGtobyBi4bqjbiBzYW8gKMO9IGzDoCBraG8gdGh14bqnbikiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAixJHhu4MgbmjDom4gYuG6o24gdOG7qyBraG8gbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMgorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICJraMO0bmcgc+G7rSBk4bulbmcgbGnDqm4ga+G6v3QgY+G7qW5nIG7hu5lpIGLhu5ksIGx1w7RuIHNhbyBjaMOpcCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJjw6BpIMSR4bq3dCDEkcOieSBsw6Aga2hvIGNoaWEgc+G6uyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNworbXNnaWQgInBhdGhzcGVjIgorbXNnc3RyICLEkeG6t2MtdOG6oy3Ekcaw4budbmctZOG6q24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJraOG7n2kgdOG6oW8gbcO0LcSRdW4tY29uIHRyb25nIGLhuqNuIHNhbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExMAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGNsb25lZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAic+G7kSBsxrDhu6NuZyBtw7QtxJF1bi1jb24gxJHGsOG7o2MgbmjDom4gYuG6o24gxJHhu5NuZyB0aOG7nWkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJ0aMawLW3hu6VjLW3huqt1IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEyIGJ1aWx0aW4vaW5pdC1kYi5jOjQ4NworbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgInRoxrAgbeG7pWMgbcOgIHThuqFpIMSRw7MgY8OhYyBt4bqrdSBz4bq9IMSRxrDhu6NjIGTDuW5nIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg1Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgImtobyB0aGFtIGNoaeG6v3UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTQKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg3Cittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAiY2jhu4kgZMO5bmcgLS1yZWZlcmVuY2Uga2hpIG5ow6JuIGLhuqNuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NCBidWlsdGluL3JlcGFjay5jOjMyNworbXNnaWQgIm5hbWUiCittc2dzdHIgInTDqm4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjAKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgImTDuW5nIDx0w6puPiB0aGF5IGNobyDigJxvcmlnaW7igJ0gxJHhu4MgdGhlbyBkw7VpIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIyCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAibOG6pXkgcmEgPG5ow6FuaD4gdGhheSBjaG8gSEVBRCBj4bunYSBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI0Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIMSR4bq/biBnaXQtdXBsb2FkLXBhY2sgdHLDqm4gbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjg0MAorIzogYnVpbHRpbi9wdWxsLmM6MjI3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIsSR4buZLXPDonUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjYKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiCittc2dzdHIgInThuqFvIGLhuqNuIHNhbyBraMO0bmcgxJHhuqd5IMSR4bunIGNobyBt4bupYyBzw6J1IMSRw6MgY2hvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgzCittc2dpZCAidGltZSIKK21zZ3N0ciAidGjhu51pLWdpYW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjgKK21zZ2lkICJjcmVhdGUgYSBzaGFsbG93IGNsb25lIHNpbmNlIGEgc3BlY2lmaWMgdGltZSIKK21zZ3N0ciAidOG6oW8gYuG6o24gc2FvIGtow7RuZyDEkeG6p3kgxJHhu6cgdOG7qyB0aOG7nWkgxJFp4buDbSDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NQorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICLEkWnhu4NtIHjDqXQgZHV54buHdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMCBidWlsdGluL2ZldGNoLmM6MTczCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSwgZXhjbHVkaW5nIHJldiIKK21zZ3N0ciAibMOgbSBzw6J1IGjGoW4gbOG7i2NoIHPhu60gY+G7p2EgYuG6o24gc2FvIHNoYWxsb3csIGLhurFuZyDEkWnhu4NtIHjDqXQgZHV54buHdCBsb+G6oWkgdHLhu6siCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzIKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgImNo4buJIG5ow6JuIGLhuqNuIG3hu5l0IG5ow6FuaCwgSEVBRCBob+G6t2MgLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzQKK21zZ2lkICJkb24ndCBjbG9uZSBhbnkgdGFncywgYW5kIG1ha2UgbGF0ZXIgZmV0Y2hlcyBub3QgdG8gZm9sbG93IHRoZW0iCittc2dzdHIgIiIKKyLEkeG7qW5nIGPDsyBuaMOibiBi4bqjbiBi4bqldCBr4buzIG5ow6FuaCBuw6BvLCB2w6AgbMOgbSBjaG8gbmjhu69uZyBs4bqnbiBs4bqleSB24buBIHNhdSBraMO0bmcgIgorInRoZW8gY2jDum5nIG7hu69hIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTM2Cittc2dpZCAiYW55IGNsb25lZCBzdWJtb2R1bGVzIHdpbGwgYmUgc2hhbGxvdyIKK21zZ3N0ciAibeG7jWkgbcO0LcSRdW4tY29uIG5ow6JuIGLhuqNuIHPhur0gbMOgIHNoYWxsb3cgKG7DtG5nKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNyBidWlsdGluL2luaXQtZGIuYzo0OTUKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgImdpdGRpciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJraMO0bmcgZMO5bmcgY2h1bmcgdGjGsCBt4bulYyBkw6BuaCByacOqbmcgY2hvIGdpdCB2w6AgdGjGsCBt4bulYyBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOQorbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAia2jDs2E9Z2nDoV90cuG7iyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAixJHhurd0IGPhuqV1IGjDrG5oIGLDqm4gdHJvbmcgbeG7mXQga2hvIGNo4bupYSBt4bubaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInNlcnZlci1zcGVjaWZpYyIKK21zZ3N0ciAixJHhurdjLXThuqMtbcOheS1waOG7pWMtduG7pSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MiBidWlsdGluL2ZldGNoLmM6MTkwIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzYKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3MyBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgIm9wdGlvbiB0byB0cmFuc21pdCIKK21zZ3N0ciAidMO5eSBjaOG7jW4gxJHhu4MgY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjI0MAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgImNo4buJIGTDuW5nIMSR4buLYSBjaOG7iSBJUHY0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQ1IGJ1aWx0aW4vZmV0Y2guYzoxOTMgYnVpbHRpbi9wdWxsLmM6MjQzCisjOiBidWlsdGluL3B1c2guYzo1NzYKK21zZ2lkICJ1c2UgSVB2NiBhZGRyZXNzZXMgb25seSIKK21zZ3N0ciAiY2jhu4kgZMO5bmcgxJHhu4thIGNo4buJIElQdjYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDkKK21zZ2lkICJhbnkgY2xvbmVkIHN1Ym1vZHVsZXMgd2lsbCB1c2UgdGhlaXIgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibeG7jWkgbcO0LcSRdW4tY29uIG5ow6JuIGLhuqNuIHPhur0gZHVuZyBuaMOhbmggdGhlbyBkw7VpIG3DoXkgY2jhu6cgY+G7p2EgY2jDum5nIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTUxCittc2dpZCAiaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQgZmlsZSB0byBpbmNsdWRlIG9ubHkgZmlsZXMgYXQgcm9vdCIKK21zZ3N0ciAia2jhu59pIHThuqFvIHThuq1wIHRpbiBzcGFyc2UtY2hlY2tvdXQgxJHhu4MgYmFvIGfhu5NtIGNo4buJIGPDoWMgdOG6rXAgdGluIOG7nyBn4buRYyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI4NworbXNnaWQgIiIKKyJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorIlBsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKyJLaMO0bmcgxJFvw6FuIMSRxrDhu6NjIHRoxrAgbeG7pWMgdMOqbiBsw6AgZ8OsLlxuIgorIlZ1aSBsw7JuZyBjaOG7iSDEkeG7i25oIHTDqm4gbeG7mXQgdGjGsCBt4bulYyB0csOqbiBkw7JuZyBs4buHbmgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbzogQ291bGQgbm90IGFkZCBhbHRlcm5hdGUgZm9yICclcyc6ICVzXG4iCittc2dzdHIgInRow7RuZyB0aW46IGtow7RuZyB0aOG7gyB0aMOqbSB0aGF5IHRo4bq/IGNobyDigJwlc+KAnTogJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgY8OzIHThu5NuIHThuqFpIG5oxrBuZyBs4bqhaSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGFydCBpdGVyYXRvciBvdmVyICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBi4bqvdCDEkeG6p3UgbOG6t3AgcXVhIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8gxJHGsOG7o2MgbGnDqm4ga+G6v3QgbeG7gW0gJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgc2FvIGNow6lwIHThuq1wIHRpbiB2w6Ag4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbOG6t3AgcXVhIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImhvw6BuIHThuqV0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTA4Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgd2l0aCAnZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6LydcbiIKK21zZ3N0ciAiIgorIlZp4buHYyBuaMOibiBi4bqjbiB0aMOgbmggY8O0bmcsIG5oxrBuZyBjaGVja291dCBn4bq3cCBs4buXaS5cbiIKKyJC4bqhbiBraeG7g20gdHJhIGvhu7kgeGVtIGPDoWkgZ8OsIMSRxrDhu6NjIGzhuqV5IHJhIGLhurFuZyBs4buHbmgg4oCcZ2l0IHN0YXR1c+KAnVxuIgorInbDoCB0aOG7rSBs4bqleSByYSB24bubaSBs4buHbmggJ2dpdCByZXN0b3JlIC0tc291cmNlPUhFQUQgOi8nXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggbcOheSBjaOG7pyAlcyDEkeG7gyBuaMOibiBi4bqjbiAoY2xvbmUpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10ICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUyCittc2dpZCAiZmFpbGVkIHRvIGluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkga2jhu59pIHThuqFvIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAicmVmZXJzIEhFQUQgbcOheSBjaOG7pyAgY2jhu4kgxJHhur9uIHJlZiBraMO0bmcgdOG7k24gdOG6oWksIGtow7RuZyB0aOG7gyBs4bqleSByYS5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwNgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSByYSAoY2hlY2tvdXQpIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NTYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcGFyYW1ldGVycyB0byBjb25maWcgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSBjw6FjIHRoYW0gc+G7kSB2w6BvIHThuq1wIHRpbiBj4bqldSBow6xuaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxOQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkcOzbmcgZ8OzaSDEkeG7gyBk4buNbiBk4bq5cCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyMQorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGLhu48gbGnDqm4ga+G6v3QgdOG6rXAgdGluIHRoYXkgdGjhur8gdOG6oW0gdGjhu51pIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTU5IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk0OAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIkPDsyBxdcOhIG5oaeG7gXUgxJHhu5FpIHPhu5EuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTYzCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJC4bqhbiBwaOG6o2kgY2jhu4kgxJHhu4tuaCBt4buZdCBraG8gxJHhu4MgbcOgIG5ow6JuIGLhuqNuIChjbG9uZSkuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLS1iYXJlIHbDoCAtLW9yaWdpbiAlcyB4dW5nIGto4bqvYyBuaGF1LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3OQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtLWJhcmUgdsOgIC0tc2VwYXJhdGUtZ2l0LWRpciB4dW5nIGto4bqvYyBuaGF1LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImtobyBjaOG7qWEg4oCcJXPigJ0gY2jGsGEgdOG7k24gdOG6oWkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OTggYnVpbHRpbi9mZXRjaC5jOjE3ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLEkeG7mSBzw6J1ICVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHPhu5Egbmd1ecOqbiBkxrDGoW5nIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gxJHDrWNoIOKAnCVz4oCdIMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgdsOgIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHRoxrAgbeG7pWMgcuG7l25nLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJjw6J5IGzDoG0gdmnhu4djIOKAnCVz4oCdIMSRw6Mgc+G6tW4gdOG7k24gdOG6oWkgcuG7k2kuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAzMyBidWlsdGluL2Nsb25lLmM6MTA1NCBidWlsdGluL2RpZmZ0b29sLmM6MjcxCisjOiBidWlsdGluL2xvZy5jOjE4NjYgYnVpbHRpbi93b3JrdHJlZS5jOjMwMiBidWlsdGluL3dvcmt0cmVlLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gY8OhYyB0aMawIG3hu6VjIGThuqtuIMSR4bqndSBj4bunYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBjw6J5IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgZGlyIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAixJBhbmcgbmjDom4gYuG6o24gdGjDoG5oIGtobyBjaOG7qWEgYmFyZSDigJwlc+KAneKAplxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICLEkGFuZyBuaMOibiBi4bqjbiB0aMOgbmgg4oCcJXPigJ3igKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwODQKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiIgorIm5ow6JuIGLhuqNuIC0tcmVjdXJzaXZlIGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSBj4bqjIGhhaSAtLXJlZmVyZW5jZSB2w6AgLS1yZWZlcmVuY2UtIgorImlmLWFibGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTQ4Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZGVwdGggYuG7iyBs4budIMSRaSBraGkgbmjDom4gYuG6o24gbuG7mWkgYuG7mTsgaMOjeSBz4butIGThu6VuZyBmaWxlOi8vIMSR4buDIHRoYXkgdGjhur8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1MAorbXNnaWQgIi0tc2hhbGxvdy1zaW5jZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLXNoYWxsb3ctc2luY2UgYuG7iyBs4budIMSRaSBraGkgbmjDom4gYuG6o24gbuG7mWkgYuG7mTsgaMOjeSBz4butIGThu6VuZyBmaWxlOi8vIMSR4buDIHRoYXkgIgorInRo4bq/LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTIKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLXNoYWxsb3ctZXhjbHVkZSBi4buLIGzhu50gxJFpIGtoaSBuaMOibiBi4bqjbiBu4buZaSBi4buZOyBow6N5IHPhu60gZOG7pW5nIGZpbGU6Ly8gxJHhu4MgdGhheSAiCisidGjhur8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE1NAorbXNnaWQgIi0tZmlsdGVyIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tZmlsdGVyIGLhu4sgbOG7nSDEkWkga2hpIG5ow6JuIGLhuqNuIG7hu5lpIGLhu5k7IGjDo3kgc+G7rSBk4bulbmcgZmlsZTovLyDEkeG7gyB0aGF5IHRo4bq/LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTcKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICJraG8gbmd14buTbiBsw6AgbsO0bmcsIG7Dqm4gYuG7jyBxdWEgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjIKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgYuG7iyBs4budIMSRaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMzcgYnVpbHRpbi9jbG9uZS5jOjEyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIk5ow6FuaCBtw6F5IGNo4bunICVzIGtow7RuZyB0w6xtIHRo4bqleSB0cm9uZyB0aMaw4bujbmcgbmd14buTbiAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNDgKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJC4bqhbiBow6xuaCBuaMawIGzDoCDEkcOjIG5ow6JuIGLhuqNuIG3hu5l0IGtobyB0cuG7kW5nIHLhu5duZy4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MTAKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8Y8OhYyB0w7l5IGNo4buNbj5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICJ0w6xtIGtp4bq/bSBiaeG6v24gY+G6pXUgaMOsbmgiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgImLhu5EgY+G7pWMgxJHhu4MgZMO5bmciCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICLEkOG7mSBy4buZbmcgdOG7kWkgxJFhIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiQ2jDqG4gdGjDqm0ga2hv4bqjbmcgdHLhu5FuZyB2w6BvIGLDqm4gdHLDoWkiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAiQ2jDqG4gdGjDqm0ga2hv4bqjbmcgdHLhuq9uZyB2w6BvIGLDqm4gcGjhuqNpIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMzCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIkNow6huIHRow6ptIGtob+G6o25nIHRy4bqvbmcgZ2nhu69hIGPDoWMgY+G7mXQiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZCBwaOG6o2kgbMOgIMSR4buRaSBz4buRIMSR4bqndSB0acOqbiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjE4Cittc2dpZCAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxwYXJlbnQ+KS4uLl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxtZXNzYWdlPikuLi5dIFsoLUYgIgorIjxmaWxlPikuLi5dIDx0cmVlPiIKK21zZ3N0ciAiIgorImdpdCBjb21taXQtdHJlZSBbKC1wIDxjaGE+KeKApl0gWy1TWzxrZXlpZD5dXSBbKC1tIDxnaGkgY2jDuj4p4oCmXSBbKC1GIDx04bqtcCB0aW4+KSIKKyLigKZdIDxjw6J5PiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIKK21zZ3N0ciAiY2hhIG3hurkgYuG7iyB0csO5bmcgbOG6t3AgJXMgxJHDoyBi4buLIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6NTYgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEzNiBidWlsdGluL2xvZy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6AgdMOqbiDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjkzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBn4bq3cCBs4buXaSBraGkgbeG7nyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBn4bq3cCBs4buXaSBraGkgxJHhu41jIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBn4bq3cCBs4buXaSBraGkgxJHDs25nIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICJjaGEtbeG6uSIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExMgorbXNnaWQgImlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QiCittc2dzdHIgIm3DoyBz4buRIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIGNoYSBt4bq5IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTE0IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NiBidWlsdGluL21lcmdlLmM6MjcwCisjOiBidWlsdGluL25vdGVzLmM6NDA5IGJ1aWx0aW4vbm90ZXMuYzo1NzUgYnVpbHRpbi9zdGFzaC5jOjE0NjkKKyM6IGJ1aWx0aW4vdGFnLmM6NDEyCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAiY2jDuiB0aMOtY2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNDk2Cittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImNow7ogdGjDrWNoIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTgKK21zZ2lkICJyZWFkIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIsSR4buNYyBjaMO6IHRow61jaCBuaOG6rXQga8O9IGzhuqduIGNodXnhu4NuIGdpYW8gdOG7qyB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjEgYnVpbHRpbi9jb21taXQuYzoxNTA4IGJ1aWx0aW4vbWVyZ2UuYzoyODcKKyM6IGJ1aWx0aW4vcHVsbC5jOjE5NSBidWlsdGluL3JldmVydC5jOjExOAorbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAiS8O9IGzhuqduIGNodXnhu4NuIGdpYW8gZMO5bmcgR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTMzCittc2dpZCAibXVzdCBnaXZlIGV4YWN0bHkgb25lIHRyZWUiCittc2dzdHIgInBo4bqjaSDEkcawYSByYSBjaMOtbmggeMOhYyBt4buZdCBjw6J5IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTQwCittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCIKK21zZ3N0ciAiZ2l0IGNvbW1pdC10cmVlOiBn4bq3cCBs4buXaSBraGkgxJHhu41jIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQxCittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxjw6FjIHTDuXkgY2jhu41uPl0gWy0tXSA8cGF0aHNwZWM+4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ2Cittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzxjw6FjIHTDuXkgY2jhu41uPl0gWy0tXSA8cGF0aHNwZWM+4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUxCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiQuG6oW4gxJHDoyB5w6p1IGPhuqd1IGFtZW5kICjigJx0dSBi4buV4oCdKSBwaOG6p24gbOG7m24gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGfhuqduIMSRw6J5LCBuaMawbmcgIgorImzDoG0gbmjGsCB0aOG6v1xuIgorImPDsyB0aOG7gyBsw6BtIGNobyBuw7MgdHLhu58gbsOqbiB0cuG7kW5nIHLhu5duZy4gQuG6oW4gY8OzIHRo4buDIGzhurdwIGzhuqFpIGzhu4duaCBj4bunYSBtw6xuaCBi4bqxbmcgIgorIi0tYWxsb3ctZW1wdHksXG4iCisiaG/hurdjIGzDoCBi4bqhbiBn4buhIGLhu48gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIG3hu5l0IGPDoWNoIGhvw6BuIHRvw6BuIGLhurFuZyBs4buHbmg6XG4iCisiXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NgorbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiTOG6p24gY2hlcnJ5LXBpY2sgdHLGsOG7m2MgaGnhu4duIG5heSB0cuG7kW5nIHLhu5duZywgY8OzIGzhur0gbMOgIGLhu59pIHbDrCBz4buxIHBow6JuIGdp4bqjaSB4dW5nICIKKyLEkeG7mXQuXG4iCisiTuG6v3UgYuG6oW4gduG6q24gbXXhu5FuIGNodXnhu4NuIGdpYW8gbsOzIGNobyBkw7kgdGjhur8gbsOgbyDEkWkgbuG7r2EsIGjDo3kgZMO5bmc6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzCittc2dpZCAiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgY2hlcnJ5LXBpY2sgLS1za2lwJ1xuIgorbXNnc3RyICJO4bq/dSBraMO0bmcgxJHGsOG7o2MgdGjDrCBkw7luZyBs4buHbmggXCJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXCJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NgorbXNnaWQgIiIKKyJhbmQgdGhlbiB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXG4iCisiXG4iCisidG8gcmVzdW1lIGNoZXJyeS1waWNraW5nIHRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjaGVycnktcGljayAtLXNraXBcbiIKKyJcbiIKK21zZ3N0ciAiIgorInbDoCBzYXUgxJHDsyBkw7luZzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcbiIKKyJcbiIKKyLEkeG7gyBs4bqhaSB0aeG6v3AgdOG7pWMgY2hlcnJ5LXBpY2tpbmcgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGPDsm4gbOG6oWkuXG4iCisiTuG6v3UgYuG6oW4gbXXhu5FuIGLhu48gcXVhIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB0aMOsIGTDuW5nOlxuIgorIlxuIgorIiAgICBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzE1Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdGjDoW8gZOG7oSBIRUFEIMSR4buRaSB0xrDhu6NuZyBjw6J5IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorI3wgbXNnaWQgInBhdGhzICclcyAuLi4nIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHbhu5tpIC1hIGzDoCBraMO0bmcgY8OzIMO9IG5naMSpYSBnw6wiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICJLaMO0bmcgxJHGsOG7nW5nIGThuqtuIHbhu5tpIGPDoWMgdMO5eSBjaOG7jW4gLS1pbmNsdWRlLy0tb25seSBraMO0bmcgaOG7o3AgbMO9LiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGLhuqNuZyBt4bulYyBs4bulYyB04bqhbSB0aOG7nWkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzgyCittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHRow6ptIGLhurFuZyBjw6FjaCB0xrDGoW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5NgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IGLhuqNuZyBt4bulYyBs4bulYyB04bqhbSB0aOG7nWkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzk4Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBj4bqtcCBuaOG6rXQgY8OieSBi4buZIG5o4bubIMSR4buHbSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MjMgYnVpbHRpbi9jb21taXQuYzo0NDYgYnVpbHRpbi9jb21taXQuYzo0OTIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpIChuZXdfaW5kZXgpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NQorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHZp4buHYyBjaHV54buDbiBnaWFvIGPhu6VjIGLhu5kgdHJvbmcga2hpIMSRYW5nIMSRxrDhu6NjIGjDsmEgdHLhu5luLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzcKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiB2aeG7h2MgY2h1eeG7g24gZ2lhbyBi4buZIHBo4bqtbiB0cm9uZyBraGkgxJFhbmcgY2hlcnJ5LXBpY2suIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ4NQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIMSR4buNYyDEkcaw4bujYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyB04bqhbSB0aOG7nWkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8g4oCcJXPigJ0gdGhp4bq/dSBwaOG6p24gdMOhYyBnaeG6oyDhu58gxJHhuqd1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIGPDsyBwaOG6p24gdMOhYyBnaeG6oyDhu58gxJHhuqd1IGThu4sgZOG6oW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyMworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIsSR4buRaSBz4buRIGNobyAtLWF1dGhvciBi4buLIGThu4sgaMOsbmgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njc2Cittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgY2jhu41uIG3hu5l0IGvDvSB04buxIGdoaSBjaMO6IGPDoWkgbcOgIGtow7RuZyDEkcaw4bujYyBkw7luZ1xuIgorInRyb25nIHBo4bqnbiBnaGkgY2jDuiBoaeG7h24gdOG6oWkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE0IGJ1aWx0aW4vY29tbWl0LmM6NzQ3IGJ1aWx0aW4vY29tbWl0LmM6MTA5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0ga2nhur9tIGNvbW1pdCAobOG6p24gY2h1eeG7g24gZ2lhbykgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI2IGJ1aWx0aW4vc2hvcnRsb2cuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAiKMSRYW5nIMSR4buNYyB0aMO0bmcgxJFp4buHcCBuaOG6rXQga8O9IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbilcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBuaOG6rXQga8O9IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIMSR4buNYyDEkcaw4bujYyB04buHcCBuaOG6rXQga8O9IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc2MyBidWlsdGluL2NvbW1pdC5jOjc3OQorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgbeG6q3UgY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDkKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgotIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgotIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKIG1zZ3N0ciAiIgogIlxuIgotIiogVOG6rXAgdGluIGNoxrBhIHRoZW8gZMO1aSDEkcaw4bujYyBj4bqvdCB04bqhaSDEkcOieSBi4bufaSAlcy5cbiIKLSIqIMSQ4buDIHhlbSB0b8OgbiBi4buZIHThuq1wIHRpbiwgaMOjeSBkw7luZyDhu6luZyBk4bulbmcgYmnDqm4gc2/huqFuIGLDqm4gbmdvw6BpLlxuIgorIk7DsyB0csO0bmcgZ2nhu5FuZyB24bubaSB2aeG7h2MgYuG6oW4gxJFhbmcgY2h1eeG7g24gZ2lhbyBt4buZdCBs4bqnbiBow7JhIHRy4buZbi5cbiIKKyJO4bq/dSBraMO0bmcgcGjhuqNpIHbhuq15LCB4aW4gaMOjeSBn4buhIGLhu48gdOG6rXAgdGluXG4iCisiXHQlc1xuIgorInbDoCB0aOG7rSBs4bqhaS5cbiIKIAotIzogbGliL2RpZmYudGNsOjU2MAotbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcga2jhu5FpIMSRw6MgY2jhu41uIgorIzogYnVpbHRpbi9jb21taXQuYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiTsOzIHRyw7RuZyBnaeG7kW5nIHbhu5tpIHZp4buHYyBi4bqhbiDEkWFuZyBjaHV54buDbiBnaWFvIG3hu5l0IGzhuqduIGNoZXJyeS1waWNrLlxuIgorIk7hur91IGtow7RuZyBwaOG6o2kgduG6rXksIHhpbiBow6N5IGfhu6EgYuG7jyB04bqtcCB0aW5cbiIKKyJcdCVzXG4iCisidsOgIHRo4butIGzhuqFpLlxuIgogCi0jOiBsaWIvZGlmZi50Y2w6NTY3Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraOG7kWkgxJHDoyBjaOG7jW4iCisjOiBidWlsdGluL2NvbW1pdC5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSMOjeSBuaOG6rXAgdsOgbyBjw6FjIHRow7RuZyB0aW4gxJHhu4MgZ2nhuqNpIHRow61jaCBjw6FjIHRoYXkgxJHhu5VpIGPhu6dhIGLhuqFuLiBOaOG7r25nIGTDsm5nICIKKyLEkcaw4bujY1xuIgorImLhuq90IMSR4bqndSBi4bqxbmcg4oCcJWPigJ0gc+G6vSDEkcaw4bujYyBi4buPIHF1YSwgbuG6v3UgcGjhuqduIGNow7ogdGjDrWNoIHLhu5duZyBz4bq9IGjhu6d5IGLhu48gbOG6p24gIgorImNodXnhu4NuIGdpYW8uXG4iCiAKLSM6IGxpYi9kaWZmLnRjbDo2NDYKLW1zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGLhu48gcmEga2jhu49pIGLhu4cgcGjDs25nIGTDsm5nIMSRw6MgY2jhu41uIgorIzogYnVpbHRpbi9jb21taXQuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJIw6N5IG5o4bqtcCB2w6BvIGPDoWMgdGjDtG5nIHRpbiDEkeG7gyBnaeG6o2kgdGjDrWNoIGPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4uIE5o4buvbmcgZMOybmcgIgorIsSRxrDhu6NjXG4iCisiYuG6r3QgxJHhuqd1IGLhurFuZyDigJwlY+KAnSBz4bq9IMSRxrDhu6NjIGLhu48gcXVhOyBi4bqhbiBjw7MgdGjhu4MgeMOzYSBjaMO6bmcgxJFpIG7hur91IG114buRbiB0aOG6vy5cbiIKKyJQaOG6p24gY2jDuiB0aMOtY2ggbsOgeSBu4bq/dSB0cuG7kW5nIHLhu5duZyBz4bq9IGjhu6d5IGLhu48gbOG6p24gY2h1eeG7g24gZ2lhby5cbiIKIAotIzogbGliL2RpZmYudGNsOjY1NAotbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcgZMOybmcgxJHDoyBjaOG7jW4iCisjOiBidWlsdGluL2NvbW1pdC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzVMOhYyBnaeG6ozogICAgICAgICAgICUuKnMgPCUuKnM+IgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ0MwotbXNnaWQgIkRlZmF1bHQiCi1tc2dzdHIgIk3hurdjIMSR4buLbmgiCisjOiBidWlsdGluL2NvbW1pdC5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVzTmfDoHkgdGjDoW5nOiAgICAgICAgJXMiCiAKLSM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU3lzdGVtICglcykiCi1tc2dzdHIgIkjhu4cgdGjhu5FuZyAoJXMpIgorIzogYnVpbHRpbi9jb21taXQuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNDb21taXR0ZXI6ICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc05nxrDhu51pIGNodXnhu4NuIGdpYW86ICUuKnMgPCUuKnM+IgogCi0jOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQorIzogYnVpbHRpbi9jb21taXQuYzo5MjUKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiS2jDtG5nIMSR4buNYyDEkcaw4bujYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTkyCittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB4w6J5IGThu7FuZyBjw6J5IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDYgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJYaW4gaMOjeSBjdW5nIGPhuqVwIGzhu51pIGNow7ogZ2nhuqNpIGhv4bq3YyBsw6AgZMO5bmcgdMO5eSBjaOG7jW4gLW0gaG/hurdjIGzDoCAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yIOKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIOKAnEjhu40gdsOgIHTDqm4gPHRoxrAgxJFp4buHbiB04butbD7igJ0gdsOgIGtow7RuZyBraOG7m3AgYuG6pXQga+G7syAiCisidMOhYyBnaeG6oyBuw6BvIHPhurVuIGPDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaWdub3JlZCBtb2RlICclcyciCittc2dzdHIgIkNo4bq/IMSR4buZIGLhu48gcXVhIGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODIgYnVpbHRpbi9jb21taXQuYzoxMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgY2hvIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTIyCittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJoYWkgdMO5eSBjaOG7jW4gLWxvbmcgdsOgIC16IGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSBuaGF1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJT4butIGThu6VuZyBj4bqjIGhhaSB0w7l5IGNo4buNbiAtLXJlc2V0LWF1dGhvciB2w6AgLS1hdXRob3Iga2jDtG5nIGjhu6NwIGzDvSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIktow7RuZyBjw7MgZ8OsIMSR4buDIG3DoCDigJx0dSBi4buV4oCdIGPhuqMuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisiQuG6oW4gxJFhbmcg4bufIGdp4buvYSBj4bunYSBxdcOhIHRyw6xuaCBow7JhIHRy4buZbiAtLSBraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiB2aeG7h2Mg4oCcdHUgYuG7leKAnS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIiIKKyJC4bqhbiDEkWFuZyDhu58gZ2nhu69hIGPhu6dhIHF1w6EgdHLDrG5oIGNoZXJyeS1waWNrIC0tIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHZp4buHYyDigJx0dSAiCisiYuG7leKAnS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE4MworbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gLS1zcXVhc2ggdsOgIC0tZml4dXAga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIGPDuW5nIHbhu5tpIG5oYXUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MworbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICJDaOG7iSDEkcaw4bujYyBkw7luZyBt4buZdCB0cm9uZyBz4buRIHTDuXkgY2jhu41uIHRyb25nIHPhu5EgLWMvLUMvLUYvLS1maXh1cC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iCittc2dzdHIgIlTDuXkgY2jhu41uIC1tIGtow7RuZyB0aOG7gyDEkcaw4bujYyB04buVIGjhu6NwIGPDuW5nIHbhu5tpIC1jLy1DLy1GLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjAzCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorIi0tcmVzZXQtYXV0aG9yIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtQywgLWMgaGF5IC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjAKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJDaOG7iSBt4buZdCB0cm9uZyBjw6FjIHTDuXkgY2jhu41uIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIMSRxrDhu6NjICIKKyJz4butIGThu6VuZy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgImPDoWMgxJHGsOG7nW5nIGThuqtuIOKAnCVzIOKApuKAnSB24bubaSB0w7l5IGNo4buNbiAtYSBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTcgYnVpbHRpbi9jb21taXQuYzoxNTE5Cittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJoaeG7g24gdGjhu4sgdHLhuqFuZyB0aMOhaSDhu58gZOG6oW5nIHPDumMgdMOtY2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1OSBidWlsdGluL2NvbW1pdC5jOjE1MjEKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRow7RuZyB0aW4gbmjDoW5oIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjEKK21zZ2lkICJzaG93IHN0YXNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGjDtG5nIHRpbiB24buBIHThuqFtIGPhuqV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjMgYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgInTDrW5oIMSR4bqneSDEkeG7pyBnacOhIHRy4buLIHRyxrDhu5tjL3NhdSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1Cittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAicGhpw6puIGLhuqNuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjUgYnVpbHRpbi9jb21taXQuYzoxNTI1IGJ1aWx0aW4vcHVzaC5jOjU0OQorIzogYnVpbHRpbi93b3JrdHJlZS5jOjY1MAorbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJr4bq/dCB4deG6pXQgZOG6oW5nIG3DoXktY8OzLXRo4buDLcSR4buNYyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4IGJ1aWx0aW4vY29tbWl0LmM6MTUyNworbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRy4bqhbmcgdGjDoWkg4bufIMSR4buLbmggZOG6oW5nIGTDoGkgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzEgYnVpbHRpbi9jb21taXQuYzoxNTMwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgImNo4bqlbSBk4bupdCBjw6FjIG3hu6VjIGLhurFuZyBOVUwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjEzNzcgYnVpbHRpbi9jb21taXQuYzoxNTMzCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTI1IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICJjaOG6vyDEkeG7mSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc0IGJ1aWx0aW4vY29tbWl0LmM6MTUzMworbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgIGThuqV1IHbhur90LCBjw6FjIGNo4bq/IMSR4buZIHTDuXkgY2jhu41uOiAgYWxsLCAiCisibm9ybWFsLCBuby4gKE3hurdjIMSR4buLbmg6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3OAorbXNnaWQgIiIKKyJzaG93IGlnbm9yZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsIG5vLiAoRGVmYXVsdDogIgorInRyYWRpdGlvbmFsKSIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhLCBjw6FjIGNo4bq/IMSR4buZIHTDuXkgY2jhu41uOiB0cmFkaXRpb25hbCwgbWF0Y2hpbmcsICIKKyJuby4gKE3hurdjIMSR4buLbmg6IHRyYWRpdGlvbmFsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJraGkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MQorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImLhu48gcXVhIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgbcO0LcSRdW4tY29uLCB0w7l5IGNo4buNbiBraGk6IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihN4bq3YyDEkeG7i25oOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODMKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJoaeG7g24gdGjhu4sgZGFuaCBzw6FjaCBjw6FjIHThuq1wLXRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgdHJvbmcgY8OhYyBj4buZdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg0Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICJraMO0bmcgZMOyIHTDrG0gY8OhYyB0w6puIHRoYXkgxJHhu5VpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAiZMOyIGPDoWMgdMOqbiB0aGF5IMSR4buVaSwgdMO5eSDDvSDEkeG6t3QgbeG7pWMgbOG7pWMgdMawxqFuZyB04buxIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDYKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICIiCisiS2jDtG5nIGjhu5cgdHLhu6EgdOG7lSBo4bujcCBjw6FjIHRoYW0gc+G7kSBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIHbDoCBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODkKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIHThu5VuZyBr4bq/dCBzYXUga2hpIGNodXnhu4NuIGdpYW8gdGjDoG5oIGPDtG5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTAKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImhp4buDbiB0aOG7iyBz4buxIGtow6FjIGJp4buHdCB0cm9uZyBt4bqrdSB0aW4gbmjhuq9uIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MgorbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gZ2hpIGNow7ogY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTMgYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3RhZy5jOjQxNAorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIsSR4buNYyBjaMO6IHRow61jaCB04burIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJ0w6FjIGdp4bqjIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAiZ2hpIMSRw6ggdMOhYyBnaeG6oyBjaG8gY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgIm5nw6B5IHRow6FuZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICJnaGkgxJHDqCBuZ8OgeSB0aMOhbmcgY2hvIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NyBidWlsdGluL2NvbW1pdC5jOjE0OTggYnVpbHRpbi9jb21taXQuYzoxNDk5CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgImzhuqduX2NodXnhu4NuX2dpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NworbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJkw7luZyBs4bqhaSBjw6FjIGdoaSBjaMO6IHThu6sgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIGNobyBuaMawbmcgY8OzIGNobyBz4butYSBjaOG7r2EiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OAorbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJkw7luZyBs4bqhaSBjw6FjIGdoaSBjaMO6IHThu6sgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImTDuW5nIGdoaSBjaMO6IGPDsyDEkeG7i25oIGThuqFuZyBhdXRvc3F1YXNoIMSR4buDIHPhu61hIGNo4buvYSBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgY2jhu4kgcmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisiZMO5bmcgbOG7nWkgbmjhuq9uIGPDsyDEkeG7i25oIGThuqFuZyB04buxIMSR4buZbmcgbsOpbiDEkeG7gyBuw6luIGzhuqFpIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIGNo4buJICIKKyJyYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAxCittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAiIgorImzhuqduIGNodXnhu4NuIGdpYW8gbmjhuq1uIHTDtGkgbMOgIHTDoWMgZ2nhuqMgKMSRxrDhu6NjIGTDuW5nIHbhu5tpIHTDuXkgY2jhu41uIC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDIgYnVpbHRpbi9sb2cuYzoxNjM0IGJ1aWx0aW4vbWVyZ2UuYzoyODkKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NCBidWlsdGluL3JldmVydC5jOjExMAorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAiKG7Dqm4gZMO5bmcpIHRow6ptIGTDsm5nIFNpZ25lZC1vZmYtYnk6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDMKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgInPhu60gZOG7pW5nIHThuq1wIHRpbiBt4bqrdSDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgIsOpcCBideG7mWMgc+G7rWEgbOG6p24gY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiYmFvIGfhu5NtIGPDoWMgdHLhuqFuZyB0aMOhaSB0cm9uZyBt4bqrdSBnaGkgY2jDuiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IG7hu5lpIGR1bmcgZ2hpIGNow7ogY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTIKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgImNodXnhu4NuIGdpYW8gdOG6pXQgY+G6oyBjw6FjIHThuq1wIHRpbiBjw7MgdGhheSDEkeG7lWkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMworbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAidGjDqm0gY8OhYyB04bqtcCB0aW4gxJHDoyBjaOG7iSByYSB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyDEkeG7gyBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTQKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAidGjDqm0gY8OhYyB04bqtcC10aW4gYuG6sW5nIHTGsMahbmcgdMOhYyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE1Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAidGjDqm0gY8OhYyB0aGF5IMSR4buVaSBi4bqxbmcgdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTYKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgImNo4buJIGNodXnhu4NuIGdpYW8gY8OhYyB04bqtcCB0aW4gxJHDoyBjaOG7iSByYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3Cittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MiCittc2dzdHIgInbDsm5nIHF1YSBtw7NjIChob29rKSBwcmUtY29tbWl0IHbDoCBjb21taXQtbXNnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJoaeG7g24gdGjhu4sgeGVtIGPDoWkgZ8OsIGPDsyB0aOG7gyDEkcaw4bujYyBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzEKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIuKAnHR1IGLhu5XigJ0gKGFtZW5kKSBs4bqnbiBjb21taXQgdHLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAidsOybmcgcXVhIG3Ds2MgKGhvb2spIHBvc3QtcmV3cml0ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTM5Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAib2sgxJHhu4MgZ2hpIGzhuqFpIG3hu5l0IHRoYXkgxJHhu5VpIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NDEKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICJvayDEkeG7gyBnaGkgY8OhYyB0aGF5IMSR4buVaSB24bubaSBs4budaSBuaOG6r24gdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICJU4bqtcCB0aW4gTUVSR0VfSEVBRCBzYWkgaOG7j25nICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBwaOG6p24gY2jDuiB0aMOtY2ggKG1lc3NhZ2UpIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW86ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQsOjaSBi4buPIHZp4buHYyBjaHV54buDbiBnaWFvIGLhu59pIHbDrCBwaOG6p24gY2jDuiB0aMOtY2ggY+G7p2EgbsOzIHRy4buRbmcgcuG7l25nLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisixJBhbmcgYuG7jyBxdWEgdmnhu4djIGNodXnhu4NuIGdpYW87IGLhuqFuIMSRw6Mga2jDtG5nIGJpw6puIHNv4bqhbiBwaOG6p24gY2jDuiB0aMOtY2ggIgorIihtZXNzYWdlKS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjg2Cittc2dpZCAiIgorInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJraG8gY2jhu6lhIMSRw6MgxJHGsOG7o2MgY+G6rXAgbmjhuq10LCBuaMawbmcga2jDtG5nIHRo4buDIGdoaSB2w6BvXG4iCisidOG6rXAgdGluIG5ld19pbmRleCAoYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpKS4gSMOjeSBraeG7g20gdHJhIHhlbSDEkcSpYVxuIgorImPDsyBi4buLIMSR4bqneSBxdcOhIGhheSBxdW90YSAoaOG6oW4gbmdo4bqhY2ggxJHEqWEgY+G7qW5nKSBi4buLIHbGsOG7o3QgcXXDoSxcbiIKKyJ2w6Agc2F1IMSRw7MgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIMSR4buDIGto4bqvYyBwaOG7pWMuIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTcKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDwvdGjGsC9t4bulYy/EkeG7kWkvdMaw4bujbmc+XSBbLS1zaGFsbG93XSBbLS0iCisiW25vLV1wcm9ncmVzc10iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMgorbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLWFwcGVuZHwtLXNwbGl0XSBbLS0iCisicmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8c3BsaXQgb3B0aW9ucz4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPC90aMawL23hu6VjL8SR4buRaS90xrDhu6NuZz5dIFstLWFwcGVuZHwtLSIKKyJzcGxpdF0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8Y8OhYyAiCisidMO5eSBjaOG7jW4gY2hpYSB0w6FjaD4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDggYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDMKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg3IGJ1aWx0aW4vZmV0Y2guYzoxNzkgYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAiZGlyIgorbXNnc3RyICJ0beG7pWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDQKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg4Cittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICJUaMawIG3hu6VjIMSR4buRaSB0xrDhu6NuZyDEkeG7gyBsxrB1IMSR4buTIHRo4buLIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICIiCisibuG6v3UgxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi1naWFvIGLhu4sgY2hpYSBj4bqvdCwgdGjDrCBjaOG7iSB0aOG6qW0gdHJhIHThuq1wIHRpbiDEkeG7iW5oIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjczIHQvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbW1pdC1ncmFwaCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyDEkeG7kyB0aOG7iyBjaHV54buDbiBnaWFvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgImLhuq90IMSR4bqndSBkaSBjaHV54buDbiB04bqhaSBt4buNaSB0aGFtIGNoaeG6v3UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA4Cittc2dpZCAic2NhbiBwYWNrLWluZGV4ZXMgbGlzdGVkIGJ5IHN0ZGluIGZvciBjb21taXRzIgorbXNnc3RyICIiCisicXXDqXQgZMOzIGPDoWMgbeG7pWMgbOG7pWMgZ8OzaSDEkcaw4bujYyBsaeG7h3Qga8OqIGLhu59pIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4gY2hvIGPDoWMgbOG6p24gIgorImNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEwCittc2dpZCAic3RhcnQgd2FsayBhdCBjb21taXRzIGxpc3RlZCBieSBzdGRpbiIKK21zZ3N0ciAiIgorImLhuq90IMSR4bqndSBkaSBjaHV54buDbiB04bqhaSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gxJHGsOG7o2MgbGnhu4d0IGvDqiBi4bufaSDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMgorbXNnaWQgImluY2x1ZGUgYWxsIGNvbW1pdHMgYWxyZWFkeSBpbiB0aGUgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIiIKKyJiYW8gZ+G7k20gbeG7jWkgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIHPhurVuIGPDsyB0cm9uZ8aw4budaSB04bqtcCB0aW4gxJHhu5MtdGjhu4stY8OhYy1s4bqnbi1jaHV54buDbi0iCisiZ2lhbyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTUKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICJjaG8gcGjDqXAgZ2hpIG3hu5l0IHThuq1wIHRpbiDEkeG7kyBo4buNYSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gbOG7m24gbMOqbiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTcgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMjEKK21zZ2lkICJtYXhpbXVtIG51bWJlciBvZiBjb21taXRzIGluIGEgbm9uLWJhc2Ugc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICIiCisic+G7kSBsxrDhu6NuZyB04buRaSDEkWEgY+G7p2EgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHRyb25nIG3hu5l0IMSR4buTLXRo4buLLWPDoWMtbOG6p24tY2h1eeG7g24tZ2lhbyAiCisiY2hpYSBj4bqvdCBraMO0bmctY8ahLXPhu58iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE5Cittc2dpZCAibWF4aW11bSByYXRpbyBiZXR3ZWVuIHR3byBsZXZlbHMgb2YgYSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgInThu7cgbOG7hyB04buRaSDEkWEgZ2nhu69hIGhhaSBt4bupYyBj4bunYSBt4buZdCDEkeG7ky10aOG7iy1jw6FjLWzhuqduLWNodXnhu4NuLWdpYW8gY2hpYSBj4bqvdCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMzcKK21zZ2lkICJ1c2UgYXQgbW9zdCBvbmUgb2YgLS1yZWFjaGFibGUsIC0tc3RkaW4tY29tbWl0cywgb3IgLS1zdGRpbi1wYWNrcyIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBz4butIGThu6VuZyBoxqFuIG3hu5l0IC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIGhheSAtLXN0ZGluLXBhY2tzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExCittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDMgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICLEkeG7kWkgc+G7kSBraMO0bmcgxJHGsOG7o2MgdGjhu6thIG5o4bqtbiAtLXR5cGUsICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNQorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICJjaOG7iSBt4buZdCBraeG7g3UgbeG7mXQgbOG6p24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI0Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIlbhu4sgdHLDrSB04bqtcCB0aW4gY+G6pXUgaMOsbmgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiZMO5bmcgdOG6rXAgdGluIGPhuqV1IGjDrG5oIHRvw6BuIGPhu6VjIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgInPhu60gZOG7pW5nIHThuq1wIHRpbiBj4bqldSBow6xuaCBo4buHIHRo4buRbmciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI3Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgImTDuW5nIHThuq1wIHRpbiBj4bqldSBow6xuaCBj4bunYSBraG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAiZMO5bmcgdOG6rXAgdGluIGPhuqV1IGjDrG5oIHBlci13b3JrdHJlZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgInPhu60gZOG7pW5nIHThuq1wIHRpbiBj4bqldSBow6xuaCDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICJibG9iLWlkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgIsSR4buNYyBj4bqldSBow6xuaCB04burIMSR4buRaSB0xrDhu6NuZyBibG9iIMSRw6MgY2hvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiSMOgbmggxJHhu5luZyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzIKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAibOG6pXkgZ2nDoS10cuG7izogdMOqbiBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMworbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAibOG6pXkgdOG6pXQgY+G6oyBnacOhLXRy4buLOiBraMOzYSBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJs4bqleSBnacOhIHRy4buLIGNobyByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzUKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICJs4bqleSDEkeG6t2MgdOG6oyBnacOhIHRy4buLIGNobyBVUkw6IHBo4bqnblsuYmnhur9uXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgInRoYXkgdGjhur8gdOG6pXQgY+G6oyBjw6FjIGJp4bq/biBraOG7m3AgbeG6q3U6IHTDqm4gZ2nDoS10cuG7iyBbdmFsdWVfcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAidGjDqm0gYmnhur9uIG3hu5tpOiB0w6puIGdpw6EtdHLhu4siCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiZ+G7oSBi4buPIGJp4bq/bjogdMOqbiBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJn4buhIGLhu48gbeG7jWkgY8OhaSBraOG7m3A6IHTDqm4gW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDAKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIsSR4buVaSB0w6puIHBo4bqnbjogdMOqbi1jxakgdMOqbi1t4bubaSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICJn4buhIGLhu48gcGjhuqduOiB0w6puIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJsaeG7h3Qga8OqIHThuqV0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MworbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICJt4bufIG3hu5l0IHRyw6xuaCBiacOqbiBzb+G6oW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ0Cittc2dpZCAiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogc2xvdCBbZGVmYXVsdF0iCittc2dzdHIgInTDrG0gY+G6pXUgaMOsbmggbcOgdSBz4bqvYzogc2xvdCBbbeG6t2MgxJHhu4tuaF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ1Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgInTDrG0gY8OhYyBjw6BpIMSR4bq3dCB24buBIG3DoHUgc+G6r2M6IHNsb3QgW3N0ZG91dC1sw6AtdHR5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDYKK21zZ2lkICJUeXBlIgorbXNnc3RyICJLaeG7g3UiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ3IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzozOAorbXNnaWQgInZhbHVlIGlzIGdpdmVuIHRoaXMgdHlwZSIKK21zZ3N0ciAiZ2nDoSB0cuG7iyDEkcaw4bujYyDEkcawYSBraeG7g3UgbsOgeSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDgKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgImdpw6EgdHLhu4sgbMOgIFwidHJ1ZVwiIGhv4bq3YyBcImZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ5Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgImdpw6EgdHLhu4sg4bufIGThuqFuZyBz4buRIHRo4bqtcCBwaMOibiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTAKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgImdpw6EgdHLhu4sgbMOgIC0tYm9vbCBob+G6t2MgLS1pbnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUxCittc2dpZCAidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIKK21zZ3N0ciAiZ2nDoSB0cuG7iyBsw6AgxJHGsOG7nW5nIGThuqtuICh0w6puIHThuq1wIHRpbiBoYXkgdGjGsCBt4bulYykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUyCittc2dpZCAidmFsdWUgaXMgYW4gZXhwaXJ5IGRhdGUiCittc2dzdHIgImdpw6EgdHLhu4sgbMOgIG3hu5l0IG5nw6B5IGjhur90IGjhuqFuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MwogbXNnaWQgIk90aGVyIgogbXNnc3RyICJLaMOhYyIKIAotIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNgotbXNnaWQgImVycm9yIgotbXNnc3RyICJs4buXaSIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU0Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJjaOG6pW0gZOG7qXQgZ2nDoSB0cuG7iyB24bubaSBieXRlIE5VTCIKIAotIzogbGliL2Vycm9yLnRjbDozNgotbXNnaWQgIndhcm5pbmciCi1tc2dzdHIgImPhuqNuaCBiw6FvIgorIzogYnVpbHRpbi9jb25maWcuYzoxNTUKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBjw6FjIHTDqm4gYmnhur9uIgogCi0jOiBsaWIvZXJyb3IudGNsOjk2Ci1tc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKLW1zZ3N0ciAiQuG6oW4gcGjhuqNpIHPhu61hIGPDoWMgbOG7l2kgdHLDqm4gdHLGsOG7m2Mga2hpIGNodXnhu4NuIGdpYW8uIgorIzogYnVpbHRpbi9jb25maWcuYzoxNTYKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgInTDtG4gdHLhu41uZyBr4buDIGPDoCBjw6FjIGjGsOG7m25nIHRyb25nIHTDrG0ga2nhur9tIgogCi0jOiBsaWIvaW5kZXgudGNsOjYKLW1zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyBi4buPIGtow7NhIGLhuqNuZyBt4bulYyBs4bulYyIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyBuZ3V5w6puIGfhu5FjIGPhu6dhIGPhuqV1IGjDrG5oICh04bqtcCB0aW4sIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4sIGJsb2IsIGTDsm5nICIKKyJs4buHbmgpIgogCi0jOiBsaWIvaW5kZXgudGNsOjE3Ci1tc2dpZCAiSW5kZXggRXJyb3IiCi1tc2dzdHIgIkzhu5dpIG3hu6VjIGzhu6VjIgorIzogYnVpbHRpbi9jb25maWcuYzoxNTggYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQwCittc2dpZCAidmFsdWUiCittc2dzdHIgImdpw6EgdHLhu4siCiAKLSM6IGxpYi9pbmRleC50Y2w6MTkKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICJ24bubaSAtLWdldCwgZMO5bmcgZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oIGtoaSB0aGnhur91IG3hu6VjIHRpbiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIgorbXNnc3RyICJzYWkgc+G7kSBsxrDhu6NuZyB0aGFtIHPhu5EsIHBo4bqjaSBsw6AgJWQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSBmcm9tICVkIHRvICVkIgorbXNnc3RyICJzYWkgc+G7kSBsxrDhu6NuZyB0aGFtIHPhu5EsIHBo4bqjaSB04burICVkIMSR4bq/biAlZCIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIm3huqt1IGtow7NhIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7i25oIGThuqFuZyBnacOhIHRy4buLIGPhuqV1IGjDrG5oIG3hurdjIMSR4buLbmg6ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIG3DoHUg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQzCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBnacOhIHRy4buLIG3DoHUgbeG6t2MgxJHhu4tuaCIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTYgYnVpbHRpbi9jb25maWcuYzo3NDIKK21zZ2lkICJub3QgaW4gYSBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICJraMO0bmcgdHJvbmcgdGjGsCBt4bulYyBnaXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDk5Cittc2dpZCAid3JpdGluZyB0byBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJ2aeG7h2MgZ2hpIHJhIMSR4bqndSByYSB0acOqdSBjaHXhuqluIGzDoCBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MDIKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJraMO0bmcgaOG7lyB0cuG7oyBnaGkgY+G6pXUgaMOsbmggY8OhYyBibG9iIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCi0icmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCiBtc2dzdHIgIiIKLSJD4bqtcCBuaOG6rXQgbeG7pWMgbOG7pWMgY2hvIEdpdCBn4bq3cCBs4buXaS4gVmnhu4djIHF1w6l0IGzhuqFpIHPhur0gdOG7sSDEkeG7mW5nIMSRxrDhu6NjIGto4bufaSBjaOG6oXkgxJHhu4MgIgotIsSR4buTbmcgaMOzYSBs4bqhaSB24bubaSBnaXQtZ3VpLiIKKyIjIMSQw6J5IGzDoCB04bqtcCB0aW4gY+G6pXUgaMOsbmggY2hvIHThu6tuZyBuZ8aw4budaSBkw7luZyBHaXQuXG4iCisiW3VzZXJdXG4iCisiIyBWdWkgbMOybmcgc+G7rWEgbOG6oWkgY2hvIHRow61jaCBo4bujcCB2w6AgYuG7jyBk4bqldSBnaGkgY2jDuiBjw6FjIGTDsm5nIHNhdTpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCiAKLSM6IGxpYi9pbmRleC50Y2w6MzAKLW1zZ2lkICJDb250aW51ZSIKLW1zZ3N0ciAiVGnhur9wIHThu6VjIgorIzogYnVpbHRpbi9jb25maWcuYzo2MTEKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgImNo4buJIG3hu5l0IHThuq1wIHRpbiBj4bqldSBow6xuaCBt4buZdCBs4bqnbiIKIAotIzogbGliL2luZGV4LnRjbDozMwotbXNnaWQgIlVubG9jayBJbmRleCIKLW1zZ3N0ciAiQuG7jyBraMOzYSBt4bulYyBs4bulYyIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjE2Cittc2dpZCAiLS1sb2NhbCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWxvY2FsIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBkw7luZyBiw6puIHRyb25nIG3hu5l0IGtobyBnaXQiCiAKLSM6IGxpYi9pbmRleC50Y2w6Mjk4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgotbXNnc3RyICJC4buPICVzIHJhIGto4buPaSB2aeG7h2MgY2h1eeG7g24gZ2lhbyIKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjE5Cittc2dpZCAiLS1ibG9iIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tYmxvYiBjaOG7iSBjw7MgdGjhu4MgxJHGsOG7o2MgZMO5bmcgYsOqbiB0cm9uZyBt4buZdCBraG8gZ2l0IgogCi0jOiBsaWIvaW5kZXgudGNsOjMzNwotbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCi1tc2dzdHIgIsSQw6MgY2h1eeG7g24gZ2lhbyBy4buTaS4iCisjOiBidWlsdGluL2NvbmZpZy5jOjYzOAorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIkNoxrBhIMSR4bq3dCBiaeG6v24gbcO0aSB0csaw4budbmcgSE9NRSIKIAotIzogbGliL2luZGV4LnRjbDozNTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBZGRpbmcgJXMiCi1tc2dzdHIgIsSQYW5nIHRow6ptICVzIgotCi0jOiBsaWIvaW5kZXgudGNsOjM4MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlN0YWdlICVkIHVudHJhY2tlZCBmaWxlcz8iCi1tc2dzdHIgIsSQxrBhICVkIHThuq1wIHRpbiBjaMawYSB0aGVvIGTDtWkgbMOqbiBi4buHIHBow7NuZyDEkeG7gyBjaHV54buDbiBnaWFvPyIKLQotIzogbGliL2luZGV4LnRjbDo0MjgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKLW1zZ3N0ciAiSG/DoG4gbmd1ecOqbiBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIHThuq1wIHRpbiAlcz8iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgotbXNnc3RyICJIb8OgbiBuZ3V5w6puIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgJWkgdOG6rXAgdGluPyIKLQotIzogbGliL2luZGV4LnRjbDo0MzgKLW1zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCi1tc2dzdHIgIiIKLSJN4buNaSB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nIHPhur0gbeG6pXQgdsSpbmggdmnhu4VuIGRvIGzhu4duaCByZXZlcnQuIgotCi0jOiBsaWIvaW5kZXgudGNsOjQ0MQotbXNnaWQgIkRvIE5vdGhpbmciCi1tc2dzdHIgIktow7RuZyBsw6BtIGfDrCIKLQotIzogbGliL2luZGV4LnRjbDo0NTkKLW1zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCi1tc2dzdHIgIsSQYW5nIGhvw6BuIG5ndXnDqm4gY8OhYyB04bqtcCB0aW4gxJHDoyBjaOG7jW4iCi0KLSM6IGxpYi9pbmRleC50Y2w6NDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nICVzIgotbXNnc3RyICLEkGFuZyBob8OgbiBuZ3V5w6puICVzIgotCi0jOiBsaWIvbGluZS50Y2w6MTcKLW1zZ2lkICJHb3RvIExpbmU6IgotbXNnc3RyICJOaOG6o3kgxJHhur9uIGTDsm5nOiIKLQotIzogbGliL2xpbmUudGNsOjIzCi1tc2dpZCAiR28iCi1tc2dzdHIgIk5o4bqjeSIKLQotIzogbGliL21lcmdlLnRjbDoxMworIzogYnVpbHRpbi9jb25maWcuYzo2NTgKIG1zZ2lkICIiCi0iQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgotIlxuIgotIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgogbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIGjDsmEgdHLhu5luIHRyb25nIGtoaSB0dSBi4buVLlxuIgotIlxuIgotIkLhuqFuIHBo4bqjaSBob8OgbiB04bqldCB2aeG7h2MgdHUgYuG7lSBs4bqnbiBjaHV54buDbiBnaWFvIHRyxrDhu5tjIGtoaSBi4bqvdCDEkeG6p3UgYuG6pXQga+G7syBraeG7g3UgIgotImjDsmEgdHLhu5luIG7DoG8uXG4iCisiLS13b3JrdHJlZSBraMO0bmcgdGjhu4MgZMO5bmcgduG7m2kgbmhp4buBdSBjw6J5IGzDoG0gdmnhu4djIHRy4burIGtoaSBj4bqldSBow6xuaCBt4bufIHLhu5luZ1xuIgorIndvcmt0cmVlQ29uZmlnIMSRxrDhu6NjIGLhuq10LiBWdWkgbMOybmcgxJHhu41jIHBo4bqnbiBcIkNPTkZJR1VSQVRJT04gRklMRVwiXG4iCisidHJvbmcgXCJnaXQgaGVscCB3b3JrdHJlZVwiIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90IgogCi0jOiBsaWIvbWVyZ2UudGNsOjI3CisjOiBidWlsdGluL2NvbmZpZy5jOjY4OAorbXNnaWQgIi0tZ2V0LWNvbG9yIGFuZCB2YXJpYWJsZSB0eXBlIGFyZSBpbmNvaGVyZW50IgorbXNnc3RyICItLWdldC1jb2xvciB2w6Aga2nhu4N1IGJp4bq/biBsw6Aga2jDtG5nIG3huqFjaCBs4bqhYyIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OTMKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICJjaOG7iSBt4buZdCB0aGFvIHTDoWMgbeG7l2kgbOG6p24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IGNo4buJIMSRxrDhu6NjIMOhcCBk4bulbmcgY2hvIC0tbGlzdCBob+G6t2MgLS1nZXQtcmVnZXhwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxMgogbXNnaWQgIiIKLSJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKLSJcbiIKLSJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgotInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgotIlxuIgotIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorIi0tc2hvdy1vcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgYW5kIC0tIgorImxpc3QiCiBtc2dzdHIgIiIKLSJUcuG6oW5nIHRow6FpIHF1w6l0IGtow7RuZyBraOG7m3AgduG7m2kgdHLhuqFuZyB0aMOhaSBraG8uXG4iCi0iXG4iCi0iQ8OzIEdpdCBraMOhYyDEkcOjIHPhu61hIGtobyBuw6B5IGvhu4MgdOG7qyBs4bqnbiBxdcOpdCBjdeG7kWkuIEPhuqduIHF1w6l0IGzhuqFpIHRyxrDhu5tjIGtoaSB0aOG7sWMgIgotImhp4buHbiB2aeG7h2MgaMOyYSB0cuG7mW4uXG4iCi0iXG4iCi0iU+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyBxdcOpdCBs4bqhaSBuZ2F5IGLDonkgZ2nhu51pLlxuIgorIi0tc2hvdy1vcmlnaW4gY2jhu4kgxJHGsOG7o2Mgw6FwIGThu6VuZyBjaG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBob+G6t2MgLS0iCisibGlzdCIKIAotIzogbGliL21lcmdlLnRjbDo0NQotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jb25maWcuYzo3MTgKK21zZ2lkICItLWRlZmF1bHQgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0IgorbXNnc3RyICItLWRlZmF1bHQgY2jhu4kgxJHGsOG7o2Mgw6FwIGThu6VuZyBjaG8gLS1nZXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdOG6rXAgdGluIGPhuqV1IGjDrG5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczNAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgY29uZmlnIGZpbGUocykiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB44butIGzDvSBjw6FjIHThuq1wIHRpbiBj4bqldSBow6xuaCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NDQKK21zZ2lkICJlZGl0aW5nIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgInPhu61hIGNo4buvYSDEkeG6p3UgcmEgdGnDqnUgY2h14bqpbiBsw6Aga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQ2Cittc2dpZCAiZWRpdGluZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJ2aeG7h2Mgc+G7rWEgY2jhu69hIGPDoWMgYmxvYiBsw6Aga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIGPhuqV1IGjDrG5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKLSJcbiIKLSJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCi0iXG4iCi0iWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCi0ibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKyIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iCiBtc2dzdHIgIiIKLSJC4bqhbiDEkWFuZyDhu58gZ2nhu69hIHZp4buHYyB0aGF5IMSR4buVaS5cbiIKLSJcbiIKLSJU4bqtcCB0aW4gJXMgxJHDoyBi4buLIHPhu61hIMSR4buVaS5cbiIKLSJcbiIKLSJC4bqhbiBuw6puIGhvw6BuIHRoaeG7h24gbOG6p24gY2h1eeG7g24gZ2lhbyBoaeG7h24gbmF5IHRyxrDhu5tjIGtoaSBow7JhIHRy4buZbi4gQ2jhu4kgY8OzIHRo4bq/ICIKLSJi4bqhbiBt4bubaSBjw7MgdGjhu4MgYuG6r3QgxJHhuqd1IGjDsmEgdHLhu5luIGPDoWkgLlxuIgorImtow7RuZyB0aOG7gyBnaGkgxJHDqCBuaGnhu4F1IGdpw6EgdHLhu4sgduG7m2kgbeG7mXQgZ2nDoSB0cuG7iyDEkcahblxuIgorIiAgICAgIETDuW5nIG3hu5l0IGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSwgLS1hZGQgaGF5IC0tcmVwbGFjZS1hbGwgxJHhu4MgdGhheSDEkeG7lWkgJXMuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NvbmZpZy5jOjg0NyBidWlsdGluL2NvbmZpZy5jOjg1OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHNlY3Rpb246ICVzIgorbXNnc3RyICJraMO0bmcgY8OzIMSRb+G6oW46ICVzIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGvDrWNoIGPhu6EgdGhlbyDEkeG7i25oIGThuqFuZyBkw6BuaCBjaG8gbmfGsOG7nWkgxJHhu41jIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjYKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8Y29tbWl0LWlzaD4qIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImhlYWQiCittc2dzdHIgInBow61hIHRyxrDhu5tjIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJsaWdodHdlaWdodCIKK21zZ3N0ciAiaOG6oW5nIG5o4bq5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJhbm5vdGF0ZWQiCittc2dzdHIgImPDsyBkaeG7hW4gZ2nhuqNpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAidGjhursgxJHDoyDEkcaw4bujYyBnaGkgY2jDuiAlcyBraMO0bmcgc+G6tW4gxJHhu4MgZMO5bmciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAidGjhursgxJHGsOG7o2MgY2jDuiBnaeG6o2kgJXMga2jDtG5nIGPDsyB0w6puIG5ow7puZyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICJ0aOG6uyDigJwlc+KAnSDEkcOjIHRo4buxYyBz4buxIOG7nyDEkcOieSDigJwlc+KAnSBy4buTaSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgImtow7RuZyBjw7MgdGjhursgbsOgbyBraOG7m3AgY2jDrW5oIHjDoWMgduG7m2kg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aGFtIGNoaeG6v3UgaGF5IHRo4bq7IGto4bubcCDEkcO6bmcsIMSRYW5nIHTDrG0ga2nhur9tIG3DtCB04bqjXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgInZp4buHYyB0w6xtIGtp4bq/bSDEkcOjIGvhur90IHRow7pjIHThuqFpICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKLSJcbiIKLSJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgotIlxuIgotIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgotIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgogbXNnc3RyICIiCi0iQuG6oW4gxJFhbmcg4bufIGdp4buvYSB2aeG7h2MgdGhheSDEkeG7lWkuXG4iCi0iXG4iCi0iVOG6rXAgdGluICVzIMSRw6MgYuG7iyBz4butYSDEkeG7lWkuXG4iCi0iXG4iCi0iQuG6oW4gbsOqbiBob8OgbiB0aGnhu4duIGzhuqduIGNodXnhu4NuIGdpYW8gaGnhu4duIG5heSB0csaw4bubYyBraGkgaMOyYSB0cuG7mW4uICBMw6BtIG5oxrAgduG6rXkgIgotImdpw7pwIGLhuqFuIGPDsyB0aOG7gyBsb+G6oWkgYuG7jyB2aeG7h2MgbOG7l2kgdHJvbmcgaMOyYSB0cuG7mW4uXG4iCisiS2jDtG5nIGPDsyB0aOG6uyDEkcaw4bujYyBjaMO6IGdp4bqjaSBuw6BvIMSRxrDhu6NjIG3DtCB04bqjIGzDoCDigJwlc+KAnS5cbiIKKyJUdXkgbmhpw6puLCDhu58gxJHDonkgY8OzIG5o4buvbmcgdGjhursga2jDtG5nIMSRxrDhu6NjIGNow7ogZ2nhuqNpOiBow6N5IHRo4butIC0tdGFncy4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MTA4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgb2YgJXMiCi1tc2dzdHIgIiVzIHRyw6puICVzIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEyMgotIywgdGNsLWZvcm1hdAotbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgotbXNnc3RyICLEkGFuZyBow7JhIHRy4buZbiAlcyB2w6AgJXMuLi4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTMzCi1tc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCi1tc2dzdHIgIkjDsmEgdHLhu5luIMSRw6MgdGjhu7FjIGhp4buHbiB0aMOgbmggY8O0bmcuIgotCi0jOiBsaWIvbWVyZ2UudGNsOjEzNQotbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgotbXNnc3RyICJIw7JhIHRy4buZbiBn4bq3cCBs4buXaS4gQ+G6p24gZ2nhuqNpIHF1eeG6v3QgY8OhYyB4dW5nIMSR4buZdCB0csaw4bubYy4iCi0KLSM6IGxpYi9tZXJnZS50Y2w6MTYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWVyZ2UgSW50byAlcyIKLW1zZ3N0ciAiSMOyYSB0cuG7mW4gdsOgbyAlcyIKLQotIzogbGliL21lcmdlLnRjbDoxNzkKLW1zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKLW1zZ3N0ciAixJBp4buDbSBj4bqnbiBow7JhIHRy4buZbiIKLQotIzogbGliL21lcmdlLnRjbDoyMTQKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKLSJcbiIKLSJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgogbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIGjhu6d5IGLhu48gdHJvbmcga2hpIMSRYW5nIHR1IGLhu5UuXG4iCi0iXG4iCi0iQuG6oW4gY+G6p24gcGjhuqNpIGhvw6BuIHThuqV0IHZp4buHYyB0dSBi4buVIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeS5cbiIKKyJLaMO0bmcgY8OzIHRo4bq7IGPDsyB0aOG7gyBtw7QgdOG6oyDigJwlc+KAnS5cbiIKKyJIw6N5IHRo4butIC0tYWx3YXlzLCBob+G6t2MgdOG6oW8gbeG7mXQgc+G7kSB0aOG6uy4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjI0CisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLEkcOjIHh1ecOqbiAlbHUgcXVhIGzhuqduIGNodXnhu4NuIGdpYW9cbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0NAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQWJvcnQgbWVyZ2U/XG4iCi0iXG4iCi0iQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCiBtc2dzdHIgIiIKLSJCw6NpIGLhu48gaMOyYSB0cuG7mW4/XG4iCi0iXG4iCi0iQsOjaSBi4buPIGjDsmEgdHLhu5luIGhp4buHbiBuYXkgc+G6vSBsw6BtICpU4bqkVCBD4bqiKiBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8gIgotImLhu4sgbeG6pXQuXG4iCi0iXG4iCi0iVGnhur9wIHThu6VjIGLDo2kgYuG7jyB2aeG7h2MgaMOyYSB0cuG7mW4gaGnhu4duIHThuqFpPyIKKyJ0w6xtIHRo4bqleSBuaGnhu4F1IGjGoW4gJWkgdGjhurs7IMSRw6MgbGnhu4d0IGvDqiAlaSBjw6FpIGfhuqduXG4iCisixJHDonkgbmjhuqV0IGLhu48gxJFpIHTDrG0ga2nhur9tIHThuqFpICVzXG4iCiAKLSM6IGxpYi9tZXJnZS50Y2w6MjMwCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgIm3DtCB04bqjICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIktow7RuZyBwaOG6o2kgdMOqbiDEkeG7kWkgdMaw4bujbmcgJXMgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUyMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBuZWl0aGVyIGEgY29tbWl0IG5vciBibG9iIgorbXNnc3RyICIlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4bqnbiBjb21taXQgY8Wpbmcga2jDtG5nIHBo4bqjaSBibG9iIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM3Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAidMOsbSBjw6FjIHRo4bq7IG3DoCBuw7MgxJHhur9uIHRyxrDhu5tjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzgKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJjaGnhur9uIGzGsOG7o2MgdMOsbSBraeG6v20gZ+G7oSBs4buXaSB0csOqbiDEkeG6p3UgcmEgbOG7l2kgY2h14bqpbiBzdGRlcnIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MzkKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAiZMO5bmcgcmVmIGLhuqV0IGvhu7MiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDAKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAiZMO5bmcgdGjhursgYuG6pXQga+G7sywgY+G6oyBraGkg4oCcdW5hbm5vdGF0ZWTigJ0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDEKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICJsdcO0biBkw7luZyDEkeG7i25oIGThuqFuZyBkw6BpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQyCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICJjaOG7iSB0aGVvIGNoYSBt4bq5IMSR4bqndSB0acOqbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgImNo4buJIHh14bqldCBuaOG7r25nIGfDrCBraOG7m3AgY2jDrW5oIHjDoWMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDcKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICJjb2kgbmjGsCA8bj4gdGjhursgZ+G6p24gxJHDonkgbmjhuqV0ICht4bq3YyDEkeG7i25oOiAxMCkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDkKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJjaOG7iSBjw6JuIG5o4bqvYyDEkeG6v24gbmjhu69uZyB0aOG6uyBraOG7m3AgduG7m2kgPG3huqt1PiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAia2jDtG5nIGNvaSBy4bqxbmcgY8OhYyB0aOG6uyBraOG7m3AgduG7m2kgPG3huqt1PiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MyBidWlsdGluL25hbWUtcmV2LmM6NDczCittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICJoaeG7g24gdGjhu4sgxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8gduG6r24gdOG6r3QgbmjGsCBsw6AgZmFsbGJhY2siCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTQgYnVpbHRpbi9kZXNjcmliZS5jOjU1NworbXNnaWQgIm1hcmsiCittc2dzdHIgImThuqV1IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICJ0aMOqbSA8ZOG6pXU+IHRyw6puIGPDonkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBi4bqpbiAobeG6t2MgxJHhu4tuaCBcIi1kaXJ0eVwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OAorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICJ0aMOqbSA8ZOG6pXU+IHRyw6puIGPDonkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBi4buLIGjhu49uZyAobeG6t2MgxJHhu4tuaCBcIi1icm9rZW5cIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NzYKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIGzDoCB4dW5nIGto4bqvYyB24bubaSB0w7l5IGNo4buNbiAtLWFiYnJldj0wIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjA1Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBjw6FjIHTDqm4sIGtow7RuZyB0aOG7gyBtw7QgdOG6oyBnw6wgY+G6oy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2NTYKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSBsw6AgeHVuZyBraOG6r2MgduG7m2kgY8OhYyB0w7l5IGNo4buNbiBjb21taXQtaXNoIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU4Cittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiBsw6AgeHVuZyBraOG6r2MgduG7m2kgY29tbWl0LWlzaGVzIgorCisjOiBidWlsdGluL2RpZmYuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAi4oCcJXPigJ06IGtow7RuZyBwaOG6o2kgdOG6rXAgdGluIGLDrG5oIHRoxrDhu51uZyBoYXkgbGnDqm4ga+G6v3QgbeG7gW0iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgInTDuXkgY2jhu41uIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzUwCittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIMSRw6MgY2hvIOKAnCVz4oCdIGtow7RuZyBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIsSRw6MgY2hvIG5oaeG7gXUgaMahbiBoYWkgxJHhu5FpIHTGsOG7o25nIGJsb2I6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAixJHDoyBjaG8gxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aOG7gyBu4bqvbSBnaeG7ryDigJwlc+KAnS4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMAorbXNnaWQgImdpdCBkaWZmdG9vbCBbPG9wdGlvbnM+XSBbPGNvbW1pdD4gWzxjb21taXQ+XV0gWy0tXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBkaWZmdG9vbCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPGzhuqduX2NodXnhu4NuX2dpYW8+IFs8bOG6p25fY2h1eeG7g25fZ2lhbz5dXSBbLS1dIDwvIgorIsSRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgImfhurdwIGzhu5dpOiAlZCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIGxpw6puIGvhur90IG3hu4FtICVzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgZmlsZSAlcyIKK21zZ3N0ciAia2jDtG5nIMSR4buNYyDEkcaw4bujYyB04bqtcCB0aW4gbGnDqm4ga+G6v3QgbeG7gW0gJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIGZvciBzeW1saW5rICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIMSR4buRaSB0xrDhu6NuZyAlcyBjaG8gbGnDqm4ga+G6v3QgbeG7gW0gJXMiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo0MTMKIG1zZ2lkICIiCi0iUmVzZXQgY2hhbmdlcz9cbiIKLSJcbiIKLSJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCi0iXG4iCi0iQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCisiY29tYmluZWQgZGlmZiBmb3JtYXRzKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW5cbiIKKyJkaXJlY3RvcnkgZGlmZiBtb2RlKCctZCcgYW5kICctLWRpci1kaWZmJykuIgogbXNnc3RyICIiCi0ixJDhurd0IGzhuqFpIG3hu41pIHRoYXkgxJHhu5VpP1xuIgotIlxuIgotIlZp4buHYyDEkeG6t3QgbOG6oWkgY8OhYyB0aGF5IMSR4buVaSBz4bq9IGzDoG0gKk3hu4xJKiB0aGF5IMSR4buVaSBjaMawYSBjaHV54buDbiBnaWFvIGJp4bq/biBt4bqldC5cbiIKLSJcbiIKLSJW4bqrbiB0aeG6v3AgdOG7pWMgxJHhurd0IGzhuqFpIGPDoWMgdGhheSDEkeG7lWkgaGnhu4duIHThuqFpPyIKKyJjw6FjIMSR4buLbmggZOG6oW5nIGRpZmYgdOG7lSBo4bujcCjigJwtY+KAnSB2w6Ag4oCcLS1jY+KAnSkgY2jGsGEgxJHGsOG7o2MgaOG7lyB0cuG7oyB0cm9uZ1xuIgorImNo4bq/IMSR4buZIGRpZmYgdGjGsCBt4bulYyjigJwtZOKAnSB2w6Ag4oCcLS1kaXItZGlmZuKAnSkuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI0MQotbXNnaWQgIkFib3J0aW5nIgotbXNnc3RyICJCw6NpIGLhu48iCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImJvdGggZmlsZXMgbW9kaWZpZWQ6ICclcycgYW5kICclcycuIgorbXNnc3RyICJj4bqjIGhhaSB04bqtcCB0aW4gxJHDoyBi4buLIHPhu61hOiDigJwlc+KAnSB2w6Ag4oCcJXPigJ0uIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI0MQotbXNnaWQgImZpbGVzIHJlc2V0IgotbXNnc3RyICLEkeG6t3QgbOG6oWkgY8OhYyB04bqtcCB0aW4iCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjM2Cittc2dpZCAid29ya2luZyB0cmVlIGZpbGUgaGFzIGJlZW4gbGVmdC4iCittc2dzdHIgImPDonkgbMOgbSB2aeG7h2Mg4bufIGLDqm4gdHLDoWkuIgogCi0jOiBsaWIvbWVyZ2UudGNsOjI2OQotbXNnaWQgIkFib3J0IGZhaWxlZC4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBiw6NpIGLhu48uIgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyVzJy4iCittc2dzdHIgImPDoWMgdOG6rXAgdGluIHThuqFtIMSRw6Mgc+G6tW4gY8OzIHRyb25nIOKAnCVz4oCdLiIKIAotIzogbGliL21lcmdlLnRjbDoyNzEKLW1zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCi1tc2dzdHIgIsSQw6MgYsOjaSBi4buPIHhvbmcuICBT4bq1biBzw6BuZy4iCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ4Cittc2dpZCAieW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS4iCittc2dzdHIgImLhuqFuIGPDsyBs4bq9IG114buRbiBk4buNbiBk4bq5cCBoYXkgcGjhu6VjIGjhu5NpIOG7nyDEkcOieS4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjgKLW1zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgotbXNnc3RyICJCdeG7mWMgcGjDom4gZ2nhuqNpIHRow6BuaCBuaMOhbmggY8ahIHPhu58/IgorIzogYnVpbHRpbi9kaWZmdG9vbC5jOjY5NworbXNnaWQgInVzZSBgZGlmZi5ndWl0b29sYCBpbnN0ZWFkIG9mIGBkaWZmLnRvb2xgIgorbXNnc3RyICJkw7luZyDigJxkaWZmLmd1aXRvb2zigJwgdGhheSB2w6wgZMO5bmcg4oCcZGlmZi50b29s4oCcIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDo5Ci1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCi1tc2dzdHIgIkJ14buZYyBwaMOibiBnaeG6o2kgdGjDoG5oIG5ow6FuaCBuw6B5PyIKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiBt4buZdCBkaWZmIHRvw6BuIHRoxrAgbeG7pWMiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCi1tc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKLW1zZ3N0ciAiQnXhu5ljIHBow6JuIGdp4bqjaSB0aMOgbmggbmjDoW5oIGtow6FjPyIKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDEKK21zZ2lkICJkbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wiCittc2dzdHIgIsSR4burbmcgbmjhuq9jIGtoaSBraOG7n2kgY2jhuqF5IGPDtG5nIGPhu6UgZGlmZiIKIAotIzogbGliL21lcmdldG9vbC50Y2w6MTQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDYKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAiZMO5bmcgbGnDqm4ga+G6v3QgbeG7gW0gdHJvbmcgZGlmZi10aMawLW3hu6VjIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzA3Cittc2dpZCAidG9vbCIKK21zZ3N0ciAiY8O0bmcgY+G7pSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOAorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAiZMO5bmcgY8O0bmcgY+G7pSBkaWZmIMSRw6MgY2hvIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICJpbiByYSBkYW5oIHPDoWNoIGPDoWMgY8O0bmcgY+G7pSBkaWYgY8OhaSBtw6AgY8OzIHRo4bq7IGTDuW5nIHbhu5tpIOKAnC0tdG9vbOKAnCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxMwogbXNnaWQgIiIKLSJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgotIlxuIgotIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCi0iXG4iCi0iVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKKyJtYWtlICdnaXQtZGlmZnRvb2wnIGV4aXQgd2hlbiBhbiBpbnZva2VkIGRpZmYgdG9vbCByZXR1cm5zIGEgbm9uIC0gemVybyBleGl0ICIKKyJjb2RlIgogbXNnc3RyICIiCi0iQ2jDuiDDvSBsw6AgZGlmZiBjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyB0aGF5IMSR4buVaSB4dW5nIMSR4buZdC5cbiIKLSJcbiIKLSIlcyBz4bq9IGLhu4sgZ2hpIMSRw6guXG4iCi0iXG4iCi0iVGhhbyB0w6FjIG7DoHkgY2jhu4kgY8OzIHRo4buDIGLhu48gZOG7nyBi4bqxbmcgY8OhY2gga2jhu59pIMSR4buZbmcgbOG6oWkgdmnhu4djIGjDsmEgdHLhu5luLiIKKyJsw6BtIGNobyDigJxnaXQtZGlmZnRvb2zigJ0gdGhvw6F0IGtoaSBn4buNaSBjw7RuZyBj4bulIGRpZmYgdHLhuqMgduG7gSBtw6Mga2jDtG5nIHBo4bqjaSBz4buRICIKKyJraMO0bmciCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE2Cittc2dpZCAic3BlY2lmeSBhIGN1c3RvbSBjb21tYW5kIGZvciB2aWV3aW5nIGRpZmZzIgorbXNnc3RyICJjaOG7iSDEkeG7i25oIG3hu5l0IGzhu4duaCB0w7l5IMO9IMSR4buDIHhlbSBkaWZmIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzE3Cittc2dpZCAicGFzc2VkIHRvIGBkaWZmYCIKK21zZ3N0ciAiY2h1eeG7g24gY2hvIOKAnGRpZmbigJ0iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICJkaWZmdG9vbCBj4bqnbiBjw6J5IGzDoG0gdmnhu4djIGhv4bq3YyAtLW5vLWluZGV4IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzM5Cittc2dpZCAiLS1kaXItZGlmZiBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWRpci1kaWZmIHh1bmcga2jhuq9jIHbhu5tpIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDIKK21zZ2lkICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWd1aSwgLS10b29sIHbDoCAtLWV4dGNtZCBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzUwCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICJjaMawYSDEkcawYSByYSA8Y8O0bmdfY+G7pT4gY2hvIC0tdG9vbD08Y8O0bmdfY+G7pT4iCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NTcKK21zZ2lkICJubyA8Y21kPiBnaXZlbiBmb3IgLS1leHRjbWQ9PGNtZD4iCittc2dzdHIgImNoxrBhIMSRxrBhIHJhIDxs4buHbmg+IGNobyAtLWV4dGNtZD08bOG7h25oPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8Y8OhYyB0w7l5IGNo4buNbj4gPGVudi12YXI+IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6MzcgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAidHlwZSIKK21zZ3N0ciAia2nhu4N1IgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NDEKK21zZ2lkICJkZWZhdWx0IGZvciBnaXRfZW52XyooLi4uKSB0byBmYWxsIGJhY2sgb24iCittc2dzdHIgIm3hurdjIMSR4buLbmggY2hvIGdpdF9lbnZfKiguLi4pIMSR4buDIHF1YXkgduG7gSIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQzCittc2dpZCAiYmUgcXVpZXQgb25seSB1c2UgZ2l0X2Vudl8qKCkgdmFsdWUgYXMgZXhpdCBjb2RlIgorbXNnc3RyICJpbSBs4bq3bmcgY2jhu4kga2hpIGR1bmcgZ2nDoSB0cuG7iyBnaXRfZW52XyooKSBsw6BtIG3DoyB0aG/DoXQiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYC0tZGVmYXVsdCcgZXhwZWN0cyBhIGJvb2xlYW4gdmFsdWUgd2l0aCBgLS10eXBlPWJvb2xgLCBub3QgYCVzYCIKIG1zZ3N0ciAiIgotIlThuq1wIHRpbiAlcyBjw7MgduG6uyBjaMawYSDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCB4dW5nIMSR4buZdCwgduG6q24gxJHDoW5oIGThuqV1IGzDoCBj4bqnbiBjaHV54buDbiAiCi0iZ2lhbz8iCisidMO5eSBjaOG7jW4gYC0tZGVmYXVsdCcgY+G6p24gbeG7mXQgZ2nDoSB0cuG7iyBsb2dpYyB24bubaSBgLS10eXBlPWJvb2xgLCBraMO0bmcgcGjhuqNpIGAlc2AiCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgotbXNnc3RyICLEkGFuZyBwaMOibiBnaeG6o2kgY2hvICVzIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKLW1zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgeHVuZyDEkeG7mXQgeMOzYSBoYXkgbGnDqm4ga+G6v3QgZMO5bmcgbeG7mXQgY8O0bmcgY+G7pSIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Ci1tc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKLW1zZ3N0ciAiVOG6rXAgdGluIHh1bmcgxJHhu5l0IGtow7RuZyB04buTbiB04bqhaSIKLQotIzogbGliL21lcmdldG9vbC50Y2w6MjQ2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTm90IGEgR1VJIG1lcmdlIHRvb2w6ICclcyciCi1tc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGPDtG5nIGPhu6UgaMOyYSB0cuG7mW4gR1VJOiAnJXMnIgotCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDoyNzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCi1tc2dzdHIgIktow7RuZyBo4buXIHRy4bujIGPDtG5nIGPhu6UgdHLhu5luICclcyciCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMxMAotbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgotbXNnc3RyICJDw7RuZyBj4bulIGjDsmEgdHLhu5luIMSRYW5nIGNo4bqheSBy4buTaSwgY2jhuqVtIGThu6l0IG7Dsz8iCi0KLSM6IGxpYi9tZXJnZXRvb2wudGNsOjMzMAotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjc3CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgotIiVzIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgogbXNnc3RyICIiCi0iR+G6t3AgbOG7l2kga2hpIHRydXkgbOG6oWkgcGhpw6puIGLhuqNuOlxuIgotIiVzIgorInTDuXkgY2jhu41uIGAtLWRlZmF1bHQnIGPhuqduIG3hu5l0IGdpw6EgdHLhu4sgc+G7kSBuZ3V5w6puIGTDoGkga2jDtG5nIGThuqV1IHbhu5tpIGAtLSIKKyJ0eXBlPXVsb25nYCwga2jDtG5nIHBo4bqjaSBgJXNgIgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgotIlxuIgotIiVzIgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI5Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjg1MgorbXNnaWQgIkVycm9yOiBDYW5ub3QgZXhwb3J0IG5lc3RlZCB0YWdzIHVubGVzcyAtLW1hcmstdGFncyBpcyBzcGVjaWZpZWQuIgorbXNnc3RyICJM4buXaToga2jDtG5nIHRo4buDIHh14bqldCB0aOG6uyBs4buTbmcgbmhhdSB0cuG7qyBraGkgLS1tYXJrLXRhZ3MgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaC4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRp4bq/biB0cmnhu4NuIHNhdSA8bj4gxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAiY2jhu41uIMSRaeG7gXUga2hp4buDbiBj4bunYSB0aOG6uyDEkcOjIGvDvSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTcKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICJjaOG7jW4gc+G7sSB44butIGzDvSBj4bunYSBjw6FjIHRo4bq7LCBjw6FpIG3DoCDEkcOhbmggdGjhursgY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgbOG7jWMgcmEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYwCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIGNvbW1pdCBtZXNzYWdlcyBpbiBhbiBhbHRlcm5hdGUgZW5jb2RpbmciCiBtc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSBjw7RuZyBj4bulIGjDsmEgdHLhu5luOlxuIgotIlxuIgotIiVzIgorImNo4buNbiBi4buZIHjhu60gbMO9IGNobyBjw6FjIGdoaSBjaMO6IGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gdGhlbyBt4buZdCBi4buZIG3DoyB0aGF5IHRo4bq/IgogCi0jOiBsaWIvbWVyZ2V0b29sLnRjbDozNTQKLW1zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCi1tc2dzdHIgIsSQYW5nIGNo4bqheSBjw7RuZyBj4bulIHRy4buZbi4uLiIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIsSQ4buVIGPDoWMgxJHDoW5oIGThuqV1IG7DoHkgdsOgbyB04bqtcC10aW4iCiAKLSM6IGxpYi9tZXJnZXRvb2wudGNsOjM4MiBsaWIvbWVyZ2V0b29sLnRjbDozOTAKLW1zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCi1tc2dzdHIgIkPDtG5nIGPhu6UgdHLhu5luIGfhurdwIGzhu5dpLiIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY1Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICJOaOG6rXAgdsOgbyDEkcOhbmggZOG6pXUgdOG7qyB04bqtcCB0aW4gbsOgeSIKIAotIzogbGliL29wdGlvbi50Y2w6MTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgotbXNnc3RyICJC4bqjbmcgbcOjIHRvw6BuIGPhu6VjIGtow7RuZyBo4bujcCBs4buHICclcyciCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2OQorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSBpZiBpdCBleGlzdHMiCittc2dzdHIgIk5o4bqtcCB2w6BvIMSRw6FuaCBk4bqldSB04burIHThuq1wIHRpbiBz4bq1biBjw7MiCiAKLSM6IGxpYi9vcHRpb24udGNsOjE5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCi1tc2dzdHIgIkLhuqNuZyBtw6Mga2hvIGNo4bupYSBraMO0bmcgaOG7o3AgbOG7hyAnJXMnIgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzEKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAiTMOgbSBnaeG6oyBt4buZdCBjw6FpIHRo4bq7IGtoaSB0aOG6uyBi4buLIHRoaeG6v3UgbeG7mXQgY8OhaSIKIAotIzogbGliL29wdGlvbi50Y2w6MTE5Ci1tc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKLW1zZ3N0ciAiUGjhu6VjIGjhu5NpIHRow6BuaCBt4bq3YyDEkeG7i25oIgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzMKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiWHXhuqV0IHJhIHRvw6BuIGLhu5kgY8OieSBjaG8gbeG7l2kgbOG6p24gY2h1eeG7g24gZ2lhbyIKIAotIzogbGliL29wdGlvbi50Y2w6MTIzCi1tc2dpZCAiU2F2ZSIKLW1zZ3N0ciAiR2hpIGzhuqFpIgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzUKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiU+G7rSBk4bulbmcgdMOtbmggbsSDbmcgZG9uZSDEkeG7gyBjaOG6pW0gZOG7qXQgbHXhu5NuZyBk4buvIGxp4buHdSIKIAotIzogbGliL29wdGlvbi50Y2w6MTMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJXMgUmVwb3NpdG9yeSIKLW1zZ3N0ciAiJXMga2hvIgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzYKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIkLhu48gcXVhIGvhur90IHh14bqldCBj4bunYSBk4buvIGxp4buHdSBibG9iIgogCi0jOiBsaWIvb3B0aW9uLnRjbDoxMzQKLW1zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgotbXNnc3RyICJUb8OgbiBj4bulYyAoTeG7jWkga2hvKSIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc3IGJ1aWx0aW4vbG9nLmM6MTcwNQorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgInJlZnNwZWMiCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0MAotbXNnaWQgIlVzZXIgTmFtZSIKLW1zZ3N0ciAiVMOqbiBuZ8aw4budaSBkw7luZyIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc4Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICLDgXAgZOG7pW5nIHJlZnNwZWMgY2hvIHJlZnMgxJHDoyB4deG6pXQiCiAKLSM6IGxpYi9vcHRpb24udGNsOjE0MQotbXNnaWQgIkVtYWlsIEFkZHJlc3MiCi1tc2dzdHIgIsSQ4buLYSBjaOG7iSB0aMawIMSRaeG7h24gdOG7rSIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc5Cittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAia+G6v3QgeHXhuqV0IGFub255bWl6ZSIKIAotIzogbGliL29wdGlvbi50Y2w6MTQzCi1tc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCi1tc2dzdHIgIlThu5VuZyBo4bujcCB24buBIGjDsmEgdHLhu5luIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ0Ci1tc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgotbXNnc3RyICJDaGkgdGnhur90IHZp4buHYyBow7JhIHRy4buZbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ1Ci1tc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKLW1zZ3N0ciAiSGnhu4NuIHRo4buLIHRo4buRbmcga8OqIGtow6FjIGJp4buHdCBzYXUgaMOyYSB0cuG7mW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0NgotbXNnaWQgIlVzZSBNZXJnZSBUb29sIgotbXNnc3RyICJEw7luZyBDw7RuZyBj4bulIHRy4buZbiIKLQotIzogbGliL29wdGlvbi50Y2w6MTQ4Ci1tc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKLW1zZ3N0ciAiVGluIGThuqV1IHbhur90IHRo4budaSBnaWFuIHPhu61hIMSR4buVaSB04bqtcCB0aW4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjE0OQotbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKLW1zZ3N0ciAiWMOpbiBjw6FjIG5ow6FuaCB0aGVvIGTDtWkgdHJvbmcga2hpIGzhuqV5IHbhu4EiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1MAotbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgotbXNnc3RyICJLaOG7m3AgbmjDoW5oIHRoZW8gZMO1aSIKLQotIzogbGliL29wdGlvbi50Y2w6MTUxCi1tc2dpZCAiVXNlIFRleHRjb252IEZvciBEaWZmcyBhbmQgQmxhbWVzIgotbXNnc3RyICJEw7luZyBUZXh0Y29udiBDaG8gRGlmZnMgdsOgIEJsYW1lcyIKLQotIzogbGliL29wdGlvbi50Y2w6MTUyCi1tc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCi1tc2dzdHIgIkNo4buJIGNow6lwIGJsYW1lIHRyw6puIGPDoWMgdOG6rXAgdGluIHRoYXkgxJHhu5VpIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTMKLW1zZ2lkICJNYXhpbXVtIExlbmd0aCBvZiBSZWNlbnQgUmVwb3NpdG9yaWVzIExpc3QiCi1tc2dzdHIgIlPhu5EgbMaw4bujbmcga2hvIG3hu5tpIGTDuW5nIHThu5FpIMSRYSDEkcaw4bujYyBsxrB1IHRy4buvIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTQKLW1zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKLW1zZ3N0ciAiQ2jhu68gdOG7kWkgdGhp4buDdSDEkeG7gyBibGFtZSBjaMOpcCB2w6BvIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNTUKLW1zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKLW1zZ3N0ciAiQsOhbiBrw61uaCBuZ+G7ryBj4bqjbmggbOG7i2NoIHPhu60gYmxhbWUgKG5nw6B5KSIKLQotIzogbGliL29wdGlvbi50Y2w6MTU2Ci1tc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKLW1zZ3N0ciAiU+G7kSBkw7JuZyBu4buZaSBkdW5nIERpZmYiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1NwotbXNnaWQgIkFkZGl0aW9uYWwgRGlmZiBQYXJhbWV0ZXJzIgotbXNnc3RyICLEkOG7kWkgc+G7kSBi4buVIHh1bmcgY2hvIERpZmYiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE1OAotbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCi1tc2dzdHIgIkNoaeG7gXUgcuG7mW5nIGPhu6dhIHBo4bqnbiBjaMO6IHRow61jaCIKLQotIzogbGliL29wdGlvbi50Y2w6MTU5Ci1tc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgotbXNnc3RyICJN4bqrdSB0w6puIG5ow6FuaCBt4bubaSIKLQotIzogbGliL29wdGlvbi50Y2w6MTYwCi1tc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgotbXNnc3RyICJC4bqjbmcgbcOjIGTDoG5oIGNobyBu4buZaSBkdW5nIHThuq1wIHRpbiBt4bq3YyDEkeG7i25oIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjEKLW1zZ2lkICJXYXJuIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGV0YWNoZWQgaGVhZCIKLW1zZ3N0ciAiQ+G6o25oIGLDoW8gdHLGsOG7m2Mga2hpIGNodXnhu4NuIGdpYW8gbeG7mXQgxJHhuqd1IGLhu4sgdMOhY2ggcuG7nWkiCi0KLSM6IGxpYi9vcHRpb24udGNsOjE2MgotbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgotbXNnc3RyICLEkMOhbmggZOG6pXUgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIGzDoCBj4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoxNjMKLW1zZ2lkICJTaG93IHVudHJhY2tlZCBmaWxlcyIKLW1zZ3N0ciAiSGnhu4duIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSIKLQotIzogbGliL29wdGlvbi50Y2w6MjA5Ci1tc2dpZCAiQ2hhbmdlIgotbXNnc3RyICJUaGF5IMSR4buVaSIKLQotIzogbGliL29wdGlvbi50Y2w6MjUzCi1tc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCi1tc2dzdHIgIlThu6sgxJFp4buDbiBjaMOtbmggdOG6ozoiCi0KLSM6IGxpYi9vcHRpb24udGNsOjI4MwotbXNnaWQgIkNoYW5nZSBGb250IgotbXNnc3RyICLEkOG7lWkgcGjDtG5nIGNo4buvIgotCi0jOiBsaWIvb3B0aW9uLnRjbDoyODcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDaG9vc2UgJXMiCi1tc2dzdHIgIkNo4buNbiAlcyIKLQotIzogbGliL29wdGlvbi50Y2w6MjkzCi1tc2dpZCAicHQuIgotbXNnc3RyICJwdC4iCi0KLSM6IGxpYi9vcHRpb24udGNsOjMwNwotbXNnaWQgIlByZWZlcmVuY2VzIgotbXNnc3RyICJDw6EgbmjDom4gaMOzYSIKLQotIzogbGliL29wdGlvbi50Y2w6MzQ0Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGhvw6BuIHThuqV0IGdoaSBs4bqhaSBjw6FjIHTDuXkgY2jhu41uOiIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjIwCi1tc2dpZCAiQWRkIFJlbW90ZSIKLW1zZ3N0ciAiVGjDqm0gbcOheSBjaOG7pyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjI1Ci1tc2dpZCAiQWRkIE5ldyBSZW1vdGUiCi1tc2dzdHIgIlRow6ptIG3DoXkgY2jhu6cgbeG7m2kiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDozMCBsaWIvdG9vbHNfZGxnLnRjbDozNwotbXNnaWQgIkFkZCIKLW1zZ3N0ciAiVGjDqm0gdsOgbyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjM5Ci1tc2dpZCAiUmVtb3RlIERldGFpbHMiCi1tc2dzdHIgIkNoaSB0aeG6v3QgduG7gSBtw6F5IGNo4bunIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKLW1zZ2lkICJMb2NhdGlvbjoiCi1tc2dzdHIgIlbhu4sgdHLDrToiCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MAotbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgotbXNnc3RyICJIw6BuaCDEkeG7mW5nIHRow6ptIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKLW1zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKLW1zZ3N0ciAiTOG6pXkgduG7gSBuZ2F5IGzhuq1wIHThu6ljIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjkKLW1zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgotbXNnc3RyICJLaOG7n2kgdOG6oW8gS2hvIG3DoXkgY2jhu6cgdsOgIMSR4bqpeSBk4buvIGxp4buHdSBsw6puIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKLW1zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgotbXNnc3RyICJLaMO0bmcgbMOgbSBnw6wgY+G6oyIKLQotIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMAotbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIkjDo3kgY3VuZyBj4bqlcCB0w6puIG3DoXkgY2jhu6cuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTEzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCi1tc2dzdHIgIiclcycga2jDtG5nIHBo4bqjaSBsw6AgdMOqbiBtw6F5IGNo4bunIMSRxrDhu6NjIGNo4bqlcCBuaOG6rW4uIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRow6ptIG3DoXkgY2jhu6cgJyVzJyBj4bunYSB24buLIHRyw60gJyVzJy4iCi0KLSM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzIgbGliL3RyYW5zcG9ydC50Y2w6NgotIywgdGNsLWZvcm1hdAotbXNnaWQgImZldGNoICVzIgotbXNnc3RyICJs4bqleSB24buBICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgotbXNnc3RyICLEkGFuZyBs4bqleSB24buBICVzIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKLW1zZ3N0ciAiS2jDtG5nIGhp4buDdSBsw6BtIHRo4bq/IG7DoG8gxJHhu4Mga2jhu59pIHThuqFvIGtobyBjaOG7qWEgdOG6oWkgduG7iyB0csOtICclcycuIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyIGxpYi90cmFuc3BvcnQudGNsOjU0IGxpYi90cmFuc3BvcnQudGNsOjkyCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJwdXNoICVzIgotbXNnc3RyICLEkeG6qXkgJXMgbMOqbiBtw6F5IGNo4bunIgotCi0jOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKLW1zZ3N0ciAiQ8OgaSDEkeG6t3QgJyVzJyAodOG6oWkgJXMpIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKLW1zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgotbXNnc3RyICJYw7NhIG5ow6FuaCB0csOqbiBtw6F5IGNo4bunIgotCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ4Ci1tc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgotbXNnc3RyICJU4burIEtobyIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MSBsaWIvdHJhbnNwb3J0LnRjbDoxNjUKLW1zZ2lkICJSZW1vdGU6IgotbXNnc3RyICJNw6F5IGNo4bunOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo3MiBsaWIvdHJhbnNwb3J0LnRjbDoxODcKLW1zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgotbXNnc3RyICLEkOG7i2EgxJFp4buDbSB0w7l5IMO9OiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4OAotbXNnaWQgIkJyYW5jaGVzIgotbXNnc3RyICJOaMOhbmgiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEwCi1tc2dpZCAiRGVsZXRlIE9ubHkgSWYiCi1tc2dzdHIgIkNo4buJIHhvw6EgTuG6v3UiCi0KLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEyCi1tc2dpZCAiTWVyZ2VkIEludG86IgotbXNnc3RyICLEkMOjIHRy4buZbiB2w6BvOiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKLW1zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCi1tc2dzdHIgIkPhuqduIG3hu5l0IG5ow6FuaCBjaG8gJ0jDsmEgdHLhu5luIHbDoG8nLiIKLQotIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCi0iXG4iCi0iIC0gJXMiCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE4MQorbXNnaWQgIlJlZmVyZW5jZSBwYXJlbnRzIHdoaWNoIGFyZSBub3QgaW4gZmFzdC1leHBvcnQgc3RyZWFtIGJ5IG9iamVjdCBpZCIKIG1zZ3N0ciAiIgotIkPDoWMgbmjDoW5oIHNhdSDEkcOieSBraMO0bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4gaG/DoG4gdG/DoG4gdsOgbyAlczpcbiIKLSJcbiIKLSIgLSAlcyIKKyJDw6FjIGNoYSBt4bq5IHRoYW0gY2hp4bq/dSBjw6FpIG3DoCBrIHRyb25nIGx14buTbmcgZOG7ryBsaeG7h3UgZmFzdC1leHBvcnQgYuG7n2kgbcOjIGlkIMSR4buRaSAiCisidMaw4bujbmciCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTkwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIgotIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgotIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgotbXNnc3RyICIiCi0iTeG7mXQgaGF5IG5oaeG7gXUgaMahbiBraeG7g20gdHJhIGjDsmEgdHLhu5luIGtow7RuZyDEkeG6oXQgYuG7n2kgdsOsIGLhuqFuIMSRw6Mga2jDtG5nIGzhuqV5IHbhu4EgIgotIm5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBj4bqnbiB0aGnhur90LiBIw6N5IGzhuqV5IHbhu4EgdOG7qyAlcyB0csaw4bubYyDEkcOjLiIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgzCittc2dpZCAiU2hvdyBvcmlnaW5hbCBvYmplY3QgaWRzIG9mIGJsb2JzL2NvbW1pdHMiCittc2dzdHIgIkhp4buDbiB0aOG7iyBjw6FjIG3DoyBpZCBuZ3V5w6puIGfhu5FjIGPhu6dhIGJsb2JzL2NvbW1pdHMiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Ci1tc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgotbXNnc3RyICJYaW4gaMOjeSBjaOG7jW4gbeG7mXQgaGF5IG5oaeG7gXUgbmjDoW5oIGPhuqduIHjDs2EuIgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODUKK21zZ2lkICJMYWJlbCB0YWdzIHdpdGggbWFyayBpZHMiCittc2dzdHIgIkfhuq9uIG5ow6NuIHRo4bq7IElEIGThuqV1IgogCi0jOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCi1tc2dzdHIgIsSQYW5nIHhvw6EgY8OhYyBuaMOhbmggdOG7qyAlcyIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2h1eeG7g24gcXVhIGPhuqMgaGFpIC0taW1wb3J0LW1hcmtzIHbDoCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMiCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzAwCi1tc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCi1tc2dzdHIgIkNoxrBhIGNo4buNbiBraG8uIgorIzogYnVpbHRpbi9mZXRjaC5jOjM0Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxjw6FjIHTDuXkgY2jhu41uPl0gWzxraG8tY2jhu6lhPiBbPHJlZnNwZWM+4oCmXV0iCiAKLSM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzA1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCi1tc2dzdHIgIsSQYW5nIHF1w6l0OiAlcy4uLiIKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxjw6FjIHTDuXkgY2jhu41uPl0gWzxuaMOzbT4iCiAKLSM6IGxpYi9yZW1vdGUudGNsOjIwMAotbXNnaWQgIlB1c2ggdG8iCi1tc2dzdHIgIsSQ4bqpeSBsw6puIgorIzogYnVpbHRpbi9mZXRjaC5jOjM2Cittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFsoPGtobz4gfCA8bmjDs20+KeKApl0iCiAKLSM6IGxpYi9yZW1vdGUudGNsOjIxOAotbXNnaWQgIlJlbW92ZSBSZW1vdGUiCi1tc2dzdHIgIkfhu6EgYuG7jyBNw6F5IGNo4bunIgorIzogYnVpbHRpbi9mZXRjaC5jOjM3Cittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzxjw6FjIHTDuXkgY2jhu41uPl0iCiAKLSM6IGxpYi9yZW1vdGUudGNsOjIyMwotbXNnaWQgIlBydW5lIGZyb20iCi1tc2dzdHIgIljDqW4gdOG7qyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYKK21zZ2lkICJmZXRjaC5wYXJhbGxlbCBjYW5ub3QgYmUgbmVnYXRpdmUiCittc2dzdHIgImZldGNoLnBhcmFsbGVsIGtow7RuZyB0aOG7gyDDom0iCiAKLSM6IGxpYi9yZW1vdGUudGNsOjIyOAotbXNnaWQgIkZldGNoIGZyb20iCi1tc2dzdHIgIkzhuqV5IHbhu4EgdOG7qyIKLQotIzogbGliL3NlYXJjaC50Y2w6NDgKLW1zZ2lkICJGaW5kOiIKLW1zZ3N0ciAiVMOsbToiCi0KLSM6IGxpYi9zZWFyY2gudGNsOjUwCi1tc2dpZCAiTmV4dCIKLW1zZ3N0ciAiVGnhur9wIgotCi0jOiBsaWIvc2VhcmNoLnRjbDo1MQotbXNnaWQgIlByZXYiCi1tc2dzdHIgIlRyxrDhu5tjIgotCi0jOiBsaWIvc2VhcmNoLnRjbDo1MgotbXNnaWQgIlJlZ0V4cCIKLW1zZ3N0ciAiQlRDUSIKLQotIzogbGliL3NlYXJjaC50Y2w6NTQKLW1zZ2lkICJDYXNlIgotbXNnc3RyICJIb2EiCi0KLSM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgotbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbOG7kWkgdOG6r3Q6IgotCi0jOiBsaWIvc2hvcnRjdXQudGNsOjEzNwotbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBiaeG7g3UgdMaw4bujbmc6IgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKLW1zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJLaMO0bmcgaOG7lyB0cuG7oyBraeG7g20gdHJhIGNow61uaCB04bqjIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKLW1zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKLW1zZ3N0ciAiS2nhu4NtIHRyYSBjaMOtbmggdOG6oyBraMO0bmcgc+G6tW4gc8OgbmciCi0KLSM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAotbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKLW1zZ3N0ciAiQ+G6pXUgaMOsbmggYuG7mSBzb8OhdCBjaMOtbmggdOG6oyBraMO0bmcgaOG7o3AgbOG7hyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgotbXNnc3RyICLEkGFuZyBob8OgbiBuZ3V5w6puIHThu6sgxJFp4buDbiB0aMOgbmggJXMuIgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLW1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICJQaOG6p24ga2nhu4NtIHRyYSBjaMOtbmggdOG6oyDEkcOjIGfhurdwIGzhu5dpIGtoaSBraOG7n2kgxJHhu5luZyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCi1tc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIktow7RuZyBjaOG6pXAgbmjhuq1uIGLhu5kga2nhu4NtIHRyYSBjaMOtbmggdOG6oyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgotbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgotbXNnc3RyICJLaMO0bmcgY8OzIGfhu6NpIMO9IgotCi0jOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Ci1tc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJH4bq3cCBr4bq/dCB0aMO6YyBi4bqldCBuZ+G7nSB04burIGLhu5kga2nhu4NtIHRyYSBjaMOtbmggdOG6oyIKLQotIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgotbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgotbXNnc3RyICJLaeG7g20gdHJhIGNow61uaCB04bqjIGtow7RuZyB0aMOgbmggY8O0bmciCi0KLSM6IGxpYi9zc2hrZXkudGNsOjMxCi1tc2dpZCAiTm8ga2V5cyBmb3VuZC4iCi1tc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBraMOzYSBuw6BvLiIKLQotIzogbGliL3NzaGtleS50Y2w6MzQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgotbXNnc3RyICJUw6xtIHRo4bqleSBraG/DoSBjw7RuZyBraGFpIHRyb25nOiAlcyIKLQotIzogbGliL3NzaGtleS50Y2w6NDAKLW1zZ2lkICJHZW5lcmF0ZSBLZXkiCi1tc2dzdHIgIlThuqFvIGtob8OhIgotCi0jOiBsaWIvc3Noa2V5LnRjbDo1OAotbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgotbXNnc3RyICJDaMOpcCB2w6BvIGNsaXBib2FyZCIKLQotIzogbGliL3NzaGtleS50Y2w6NzIKLW1zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKLW1zZ3N0ciAiS2jDs2EgY8O0bmcgT3BlblNTSCBj4bunYSBi4bqhbiIKLQotIzogbGliL3NzaGtleS50Y2w6ODAKLW1zZ2lkICJHZW5lcmF0aW5nLi4uIgotbXNnc3RyICLEkGFuZyB04bqhby4uLiIKLQotIzogbGliL3NzaGtleS50Y2w6ODYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIiCi0iQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCi0iXG4iCi0iJXMiCi1tc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4MgY2jhuqF5IHNzaC1rZXlnZW46XG4iCi0iXG4iCi0iJXMiCi0KLSM6IGxpYi9zc2hrZXkudGNsOjExMwotbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKLW1zZ3N0ciAiVmnhu4djIHThuqFvIGtob8OhIMSRw6MgdGjhuqV0IGLhuqFpLiIKLQotIzogbGliL3NzaGtleS50Y2w6MTIwCi1tc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKLW1zZ3N0ciAiVmnhu4djIHThuqFvIHRow6BuaCBjw7RuZyBuaMawbmcgbOG6oWkga2jDtG5nIHTDrG0gdGjhuqV5IGtow7NhLiIKLQotIzogbGliL3NzaGtleS50Y2w6MTIzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgotbXNnc3RyICJLaMOzYSBj4bunYSBi4bqhbiB0cm9uZzogJXMiCi0KLSM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCi1tc2dzdHIgIiVzIC4uLiAlKmkgdHJvbmcgJSppICVzICglM2klJSkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjIyCi1tc2dpZCAiQWRkIFRvb2wiCi1tc2dzdHIgIlRow6ptIGPDtG5nIGPhu6UiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjI4Ci1tc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCi1tc2dzdHIgIlRow6ptIGzhu4duaCBjw7RuZyBj4bulIG3hu5tpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDozNAotbXNnaWQgIkFkZCBnbG9iYWxseSIKLW1zZ3N0ciAiVGjDqm0gdG/DoG4gY+G7pWMiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ2Ci1tc2dpZCAiVG9vbCBEZXRhaWxzIgotbXNnc3RyICJDaGkgdGnhur90IGPDtG5nIGPhu6UiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjQ5Ci1tc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCi1tc2dzdHIgIkTDuW5nIGThuqV1IG5nxINuIGPDoWNoICcvJyDEkeG7gyB04bqhbyBjw6J5IHRyw6xuaCDEkcahbiBjb246IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo2MAotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICJM4buHbmg6IgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDo3MQotbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCi1tc2dzdHIgIkhp4buDbiB0aOG7iyBo4buZcCB0aG/huqFpIHRyxrDhu5tjIGtoaSBjaOG6oXkiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjc3Ci1tc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCi1tc2dzdHIgIkjhu49pIG5nxrDhu51pIGTDuW5nIGNo4buNbiDEkWnhu4NtIHhlbSB4w6l0ICjEkeG6t3QgYmnhur9uICRSRVZJU0lPTikiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjgyCi1tc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCi1tc2dzdHIgIkjhu49pIG5nxrDhu51pIGTDuW5nIGPDoWMgxJHhu5FpIHPhu5EgYuG7lSB4dW5nIHRow6ptICjEkeG6t3QgYmnhur9uICRBUkdTKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6ODkKLW1zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCi1tc2dzdHIgIktow7RuZyBoaeG7g24gdGjhu4sgY+G7rWEgc+G7lSBr4bq/dCB4deG6pXQgY8OidSBs4buHbmgiCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjk0Ci1tc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKLW1zZ3N0ciAiQ2jhu4kgY2jhuqF5IG7hur91IGRpZmYgxJHGsOG7o2MgY2jhu41uIChiaeG6v24gJEZJTEVOQU1FIGtow7RuZyBy4buXbmcpIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxMTgKLW1zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgotbXNnc3RyICJIw6N5IGN1bmcgY+G6pXAgdMOqbiBjaG8gY8O0bmcgY+G7pS4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjEyNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCi1tc2dzdHIgIkPDtG5nIGPhu6UgJyVzJyDEkcOjIHPhurVuIGPDsy4iCi0KLSM6IGxpYi90b29sc19kbGcudGNsOjE0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIiIKLSJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCi0iJXMiCi1tc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4MgdGjDqm0gY8O0bmcgY+G7pTpcbiIKLSIlcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MTg3Ci1tc2dpZCAiUmVtb3ZlIFRvb2wiCi1tc2dzdHIgIkfhu6EgYuG7jyBjw7RuZyBj4bulIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTMKLW1zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKLW1zZ3N0ciAiR+G7oSBi4buPIGPDtG5nIGPhu6UgbOG7h25oIgotCi0jOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTgKLW1zZ2lkICJSZW1vdmUiCi1tc2dzdHIgIkfhu6EgYuG7jyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjMxCi1tc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKLW1zZ3N0ciAiKEPDoWMgY8O0bmcgY+G7pSBjaOG7iSB0aOG7iyBraG8tbuG7mWktYuG7mSB4YW5oKSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MjkyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgotbXNnc3RyICJDaOG6oXkgbOG7h25oOiAlcyIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzA2Ci1tc2dpZCAiQXJndW1lbnRzIgotbXNnc3RyICLEkOG7kWkgc+G7kSIKLQotIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQxCi1tc2dpZCAiT0siCi1tc2dzdHIgIsSQ4buTbmcgw70iCi0KLSM6IGxpYi90b29scy50Y2w6NzUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCi1tc2dzdHIgIkNo4bqheSAlcyB5w6p1IGPhuqd1IGPhuqduIHBo4bqjaSBjaOG7jW4gbeG7mXQgdOG6rXAgdGluLiIKLQotIzogbGliL3Rvb2xzLnRjbDo5MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJTEkcyBvbiBmaWxlIFwiJTIkc1wiPyIKLW1zZ3N0ciAiQuG6oW4gY8OzIGNo4bqvYyBsw6AgbXXhu5FuIGNo4bqheSAlMSRzIHRyw6puIHThuq1wIHRpbiBcIiUyJHNcIiBraMO0bmc/IgotCi0jOiBsaWIvdG9vbHMudGNsOjk1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCi1tc2dzdHIgIkLhuqFuIGPDsyBjaOG6r2MgbMOgIG114buRbiBjaOG6oXkgJXMga2jDtG5nPyIKLQotIzogbGliL3Rvb2xzLnRjbDoxMTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sOiAlcyIKLW1zZ3N0ciAiQ8O0bmcgY+G7pTogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTE3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUnVubmluZzogJXMiCi1tc2dzdHIgIsSQYW5nIGNo4bqheTogJXMiCi0KLSM6IGxpYi90b29scy50Y2w6MTU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKLW1zZ3N0ciAiQ8O0bmcgY+G7pSDEkcaw4bujYyBiacOqbiBk4buLY2ggdGjDoG5oIGPDtG5nOiAlcyIKLQotIzogbGliL3Rvb2xzLnRjbDoxNTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUb29sIGZhaWxlZDogJXMiCi1tc2dzdHIgIkPDtG5nIGPhu6UgZ+G6t3AgbOG7l2k6ICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKLW1zZ3N0ciAiTOG6pXkgY8OhYyB0aGF5IMSR4buVaSBt4bubaSB04burICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAotIywgdGNsLWZvcm1hdAotbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKLW1zZ3N0ciAieMOpbiBi4bubdCB0csOqbiBtw6F5IGNo4bunICVzIgotCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgotbXNnc3RyICJYw6luIGLhu5t0IGPDoWMgbmjDoW5oIHRoZW8gZMO1aSBi4buLIHjDs2EgdOG7qyAlcyIKLQotIzogbGliL3RyYW5zcG9ydC50Y2w6MjUKLW1zZ2lkICJmZXRjaCBhbGwgcmVtb3RlcyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMzkgYnVpbHRpbi9wdWxsLmM6MjA0Cittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKIG1zZ3N0ciAibOG6pXkgduG7gSB04burIHThuqV0IGPhuqMgY8OhYyBtw6F5IGNo4bunIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgotbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gYWxsIHJlbW90ZXMiCi1tc2dzdHIgIsSQYW5nIGzhuqV5IGPDoWMgdGhheSDEkeG7lWkgbeG7m2kgdOG7qyBt4buNaSBtw6F5IGNo4bunIgorIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyNDgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICLEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24gY2hvIGdpdCBwdWxsL2ZldGNoIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo0MAotbXNnaWQgInJlbW90ZSBwcnVuZSBhbGwgcmVtb3RlcyIKLW1zZ3N0ciAieMOpbiBi4bubdCBt4buNaSBtw6F5IGNo4bunIgorIzogYnVpbHRpbi9mZXRjaC5jOjE0MyBidWlsdGluL3B1bGwuYzoyMDcKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgIm7hu5FpIHRow6ptIHbDoG8gLmdpdC9GRVRDSF9IRUFEIHRoYXkgdsOsIGdoaSDEkcOoIGzDqm4gbsOzIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDo0MQotbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tIGFsbCByZW1vdGVzIgotbXNnc3RyICJYw6luIHThu4lhIGPDoWMgbmjDoW5oIMSRw6MgdGhlbyBkw7VpIGLhu4sgeMOzYSB04burIG3hu41pIG3DoXkgY2jhu6ciCisjOiBidWlsdGluL2ZldGNoLmM6MTQ1IGJ1aWx0aW4vcHVsbC5jOjIxMAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIMSR4bq/biBnw7NpIHThuqNpIGzDqm4gdHLDqm4gbcOheSBjaOG7pyBjdeG7kWkiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgotbXNnc3RyICLEkGFuZyDEkeG6qXkgY8OhYyBuaMOhbmggbMOqbiAlcyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICLDqXAgYnXhu5ljIGdoaSDEkcOoIGzDqm4gdGhhbSBjaGnhur91IG7hu5lpIGLhu5kiCiAKLSM6IGxpYi90cmFuc3BvcnQudGNsOjkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiTWlycm9yaW5nIHRvICVzIgotbXNnc3RyICJC4bqjbiBzYW8gxJHhur9uICVzIgorIzogYnVpbHRpbi9mZXRjaC5jOjE0OAorbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAibOG6pXkgdOG7qyBuaGnhu4F1IG3DoXkgY2jhu6cgY8O5bmcgbMO6YyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTExCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKLW1zZ3N0ciAixJBhbmcgKMSR4bqpeSkgJXMgJXMgbMOqbiAlcyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTAgYnVpbHRpbi9wdWxsLmM6MjE0Cittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAibOG6pXkgdOG6pXQgY+G6oyBjw6FjIHRo4bq7IGPDuW5nIHbhu5tpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGxpw6puIHF1YW4gxJHhur9uIG7DsyIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MTMyCi1tc2dpZCAiUHVzaCBCcmFuY2hlcyIKLW1zZ3N0ciAixJDhuql5IGzDqm4gY8OhYyBuaMOhbmgiCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJraMO0bmcgbOG6pXkgdOG6pXQgY+G6oyBjw6FjIHRo4bq7ICgtLW5vLXRhZ3MpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNDcKLW1zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCi1tc2dzdHIgIk5ow6FuaCBuZ3Xhu5NuIgorIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgInPhu5EgbMaw4bujbmcgbcO0LcSRdW4tY29uIMSRxrDhu6NjIGzhuqV5IMSR4buTbmcgdGjhu51pIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjIKLW1zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgotbXNnc3RyICJLaG8gY2jhu6lhIMSRw61jaCIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTYgYnVpbHRpbi9wdWxsLmM6MjE3Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgIiIKKyJj4bqvdCBj4buldCAocHJ1bmUpIGPDoWMgbmjDoW5oIOKAnHJlbW90ZS10cmFja2luZ+KAnSBraMO0bmcgY8OybiB04buTbiB04bqhaSB0csOqbiBtw6F5IGNo4bunICIKKyJu4buvYSIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjA1Ci1tc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKLW1zZ3N0ciAiVMO5eSBjaOG7jW4gdHJ1eeG7gW4iCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAiY+G6r3QgeMOpbSBjw6FjIHRo4bq7IG7hu5lpIGLhu5kga2jDtG5nIGPDsm4g4bufIG3DoXkgY2jhu6cgdsOgIHjDs2EgY8OhYyB0aOG6uyDEkcOjIHRoYXkgxJHhu5VpIgogCi0jOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDcKLW1zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKLW1zZ3N0ciAiw4lwIGJ14buZYyBnaGkgxJHDqCBuaMOhbmggc+G6tW4gY8OzIChjw7MgdGjhu4Mgc+G6vSBsb+G6oWkgYuG7jyBjw6FjIHRoYXkgxJHhu5VpKSIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9mZXRjaC5jOjE4MiBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgImtoaS1j4bqnbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjExCi1tc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCi1tc2dzdHIgIkTDuW5nIGfDs2kgbeG7j25nIChkw6BuaCBjaG8ga+G6v3QgbuG7kWkgbeG6oW5nIGNo4bqtbSkiCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAixJFp4buBdSBraGnhu4NuIHZp4buHYyBs4bqleSB24buBIMSR4buHIHF1eSB0cm9uZyBjw6FjIG3DtC3EkXVuLWNvbiIKIAotIzogbGliL3RyYW5zcG9ydC50Y2w6MjE1Ci1tc2dpZCAiSW5jbHVkZSB0YWdzIgotbXNnc3RyICJCYW8gZ+G7k20gY8OhYyB0aOG6uyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjQgYnVpbHRpbi9wdWxsLmM6MjI1Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgImdp4buvIGzhuqFpIGfDs2kgxJHDoyB04bqjaSB24buBIgogCi0jfiBtc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCi0jfiBtc2dzdHIgIkPDsyBwaMOibiBiaeG7h3QgSE9BL3RoxrDhu51uZyIKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAiY2hvIHBow6lwIGPhuq1wIG5o4bqtdCB0aC5jaGnhur91IEhFQUQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjkgYnVpbHRpbi9mZXRjaC5jOjE3NSBidWlsdGluL3B1bGwuYzoyMjgKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICJsw6BtIHPDonUgaMahbiBs4buLY2ggc+G7rSBj4bunYSBi4bqjbiBzYW8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzEKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IHJlcG9zaXRvcnkgYmFzZWQgb24gdGltZSIKK21zZ3N0ciAibMOgbSBzw6J1IGjGoW4gbOG7i2NoIHPhu60gY+G7p2Ega2hvIGLhuqNuIHNhbyBzaGFsbG93IGThu7FhIHRyw6puIHRo4budaSBnaWFuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3IGJ1aWx0aW4vcHVsbC5jOjIzMQorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICJjaHV54buDbiDEkeG7lWkgaG/DoG4gdG/DoG4gc2FuZyBraG8gZ2l0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAic2/huqFuIHPhurVuIGPDoWkgbsOgeSBjaG8ga+G6v3QgeHXhuqV0IMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMKK21zZ2lkICIiCisiZGVmYXVsdCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKGxvd2VyIHByaW9yaXR5IHRoYW4gY29uZmlnICIKKyJmaWxlcykiCittc2dzdHIgIiIKKyJt4bq3YyDEkeG7i25oIGNobyB2aeG7h2MgbOG6pXkgxJHhu4cgcXV5IGPDoWMgbcO0LcSRdW4tY29uIChjw7MgbeG7qWMgxrB1IHRpw6puIHRo4bqlcCBoxqFuIGPDoWMgdOG6rXAgIgorInRpbiBj4bqldSBow6xuaCBjb25maWcpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg3IGJ1aWx0aW4vcHVsbC5jOjIzNAorbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAiY2jhuqVwIG5o4bqtbiB0aGFtIGNoaeG6v3UgY+G6rXAgbmjhuq10IC5naXQvc2hhbGxvdyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMzYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgInJlZm1hcCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMzcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAiY2jhu4kgcmEgcmVmbWFwIGPhuqduIGzhuqV5IHbhu4EiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTYKK21zZ2lkICJyZXBvcnQgdGhhdCB3ZSBoYXZlIG9ubHkgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGlzIG9iamVjdCIKK21zZ3N0ciAiIgorImLDoW8gY8OhbyBy4bqxbmcgY2jDum5nIHRhIGNo4buJIGPDsyBjw6FjIMSR4buRaSB0xrDhu6NuZyB0aeG6v3AgY+G6rW4gxJHGsOG7o2MgdOG7qyDEkeG7kWkgdMaw4bujbmcgbsOgeSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiY2jhuqF5ICdnYyAtLWF1dG8nIHNhdSBraGkgbOG6pXkgduG7gSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMSBidWlsdGluL3B1bGwuYzoyNDYKK21zZ2lkICJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiCittc2dzdHIgImtp4buDbSBjaG8gY8OhYy1j4bqtcC1uaOG6rXQtYuG6r3QtYnXhu5ljIHRyw6puIG3hu41pIG5ow6FuaCDEkcOjIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMworbXNnaWQgIndyaXRlIHRoZSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgImdoaSByYSDEkeG7kyB0aOG7iyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gc2F1IGtoaSBs4bqleSB24buBIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBtw6F5IGNo4bunIGNobyB0aGFtIGNoaeG6v3UgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICJwaOG6p24gY+G6pXUgaMOsbmggZmV0Y2gub3V0cHV0IGPDsyBjaOG7qWEgZ2nDoS10cuG7iyBraMO0bmcgaOG7o3AgbOG7hyAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1MQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgxJHhu5FpIHTGsOG7o25nICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzU1Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbxJHDoyBj4bqtcCBuaOG6rXRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzY4IGJ1aWx0aW4vZmV0Y2guYzo3ODQgYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltC4buLIHThu6sgY2jhu5FpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc2OQorbXNnaWQgImNhbid0IGZldGNoIGluIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZmV0Y2ggKGzhuqV5KSB24buBIG5ow6FuaCBoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIltj4bqtcCBuaOG6rXQgdGjhurtdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzgwIGJ1aWx0aW4vZmV0Y2guYzo4MTcgYnVpbHRpbi9mZXRjaC5jOjgzOQorIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IHRoYW0gY2hp4bq/dSBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg0Cittc2dpZCAid291bGQgY2xvYmJlciBleGlzdGluZyB0YWciCittc2dzdHIgIm7Dqm4geMOzYSBjaOG7k25nIGPDoWMgdGjhursgY8OzIHPhurVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA2Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbdGjhursgbeG7m2ldIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODA5Cittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJbbmjDoW5oIG3hu5tpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMgorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW3JlZiAodGhhbSBjaGnhur91KSBt4bubaV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJjxrDhu6FuZyBi4bupYyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTYKK21zZ2lkICJub24tZmFzdC1mb3J3YXJkIgorbXNnc3RyICJraMO0bmctcGjhuqNpLWNodXnhu4NuLXRp4bq/cC1uaGFuaCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg3NworbXNnaWQgIiIKKyJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCittc2dzdHIgIiIKKyJWaeG7h2MgbOG6pXkgduG7gSB0aMaw4budbmcgY2jhu4kgcmEgY8OhYyBuaMOhbmggYnXhu5ljIHBo4bqjaSBj4bqtcCBuaOG6rXQsXG4iCisibmjGsG5nIGzhu7FhIGNo4buNbiBi4buLIHThuq90LiDEkOG7gyBrw61jaCBob+G6oXQgbOG6oWksIHPhu60gZOG7pW5nIGPhu51cbiIKKyInLS1zaG93LWZvcmNlZC11cGRhdGVzJyBob+G6t2MgY2jhuqF5ICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIHRydWUnLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gY2hlY2sgZm9yY2VkIHVwZGF0ZXMuIFlvdSBjYW4gdXNlXG4iCisiJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcycgb3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzICIKKyJmYWxzZSdcbiIKKyIgdG8gYXZvaWQgdGhpcyBjaGVjay5cbiIKK21zZ3N0ciAiIgorIlZp4buHYyBuw6B5IGPhuqduICUuMmYgZ2nDonkgxJHhu4Mga2nhu4NtIHRyYSBjw6FjIGPhuq1wIG5o4bqtdCDDqXAgYnXhu5ljLiBC4bqhbiBjw7MgdGjhu4MgZMO5bmdcbiIKKyInLS1uby1zaG93LWZvcmNlZC11cGRhdGVzJyBob+G6t2MgY2jhuqF5ICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzICIKKyJmYWxzZSdcbiIKKyLEkeG7gyB0csOhbmgga2nhu4NtIHRyYSBuw6B5LlxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiJXMgxJHDoyBraMO0bmcgZ+G7rWkgdOG6pXQgY+G6oyBjw6FjIMSR4buRaSB0xrDhu6NuZyBj4bqnbiB0aGnhur90XG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAidOG7qyBjaOG7kWkgJXMgYuG7n2kgdsOsIGPDoWMgZ+G7kWMgbsO0bmcgdGjDrCBraMO0bmcgxJHGsOG7o2MgcGjDqXAgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAxNyBidWlsdGluL2ZldGNoLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiVOG7qyAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyJt4buZdCBz4buRIHRoYW0gY2hp4bq/dSBu4buZaSBi4buZIGtow7RuZyB0aOG7gyDEkcaw4bujYyBj4bqtcCBuaOG6rXQ7IGjDo3kgdGjhu60gY2jhuqF5XG4iCisiIOKAnGdpdCByZW1vdGUgcHJ1bmUgJXPigJ0gxJHhu4MgYuG7jyDEkWkgbmjhu69uZyBuaMOhbmggY8WpLCBoYXkgYuG7iyB4dW5nIMSR4buZdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHPhur0gdHLhu58gdGjDoG5oIGtow7RuZyDEkeG6p3UgKGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9KSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIMSRw6MgdHLhu58gdGjDoG5oIGtow7RuZyDEkeG6p3UgKGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9KSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbxJHDoyB4w7NhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTkgYnVpbHRpbi9yZW1vdGUuYzoxMDM1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIoa2jDtG5nKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiVOG7qyBjaOG7kWkgdmnhu4djIGzhuqV5IHbDoG8gdHJvbmcgbmjDoW5oIGhp4buHbiB04bqhaSAlcyBj4bunYSBt4buZdCBraG8gY2jhu6lhIGtow7RuZyBwaOG6o2kga2hvICIKKyJ0cuG6p24gKGJhcmUpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICJUw7l5IGNo4buNbiBcIiVzXCIgY8OzIGdpw6EgdHLhu4sgXCIlc1wiIGzDoCBraMO0bmcgaOG7o3AgbOG7hyBjaG8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gXCIlc1wiIGLhu4sgYuG7jyBxdWEgduG7m2kgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MTIKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgInBow6F0IGhp4buHbiBuaGnhu4F1IG5ow6FuaCwga2jDtG5nIHTGsMahbmcgdGjDrWNoIHbhu5tpIC0tc2V0LXVwc3RyZWFtIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyNworbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJraMO0bmcgY8OgaSDEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24gY2hvIG3hu5l0IG5ow6FuaCDEkcaw4bujYyB0aGVvIGTDtWkgdHLDqm4gbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjkKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgdGFnIgorbXNnc3RyICJraMO0bmcgY8OgaSDEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24gY2hvIG3hu5l0IHRo4bq7IG5ow6FuaCB0csOqbiBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzMQorbXNnaWQgInVua25vd24gYnJhbmNoIHR5cGUiCittc2dzdHIgImtow7RuZyBoaeG7g3Uga2nhu4N1IG5ow6FuaCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzMKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisia2jDtG5nIHTDrG0gdGjhuqV5IG5ow6FuaCBuZ3Xhu5NuLlxuIgorImLhuqFuIGPhuqduIHBo4bqjaSBjaOG7iSDEkeG7i25oIGNow61uaCB4w6FjIG3hu5l0IG5ow6FuaCB24bubaSB0w7l5IGNo4buNbiAtLXNldC11cHN0cmVhbS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTU5IGJ1aWx0aW4vZmV0Y2guYzoxNjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIsSQYW5nIGzhuqV5IOKAnCVz4oCdIHbhu4FcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NjkgYnVpbHRpbi9mZXRjaC5jOjE2MjQgYnVpbHRpbi9yZW1vdGUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXnigJwlc+KAnSB24buBIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IOKAnCVz4oCdIChtw6MgdGhvw6F0OiAlZClcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2ODQKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkNoxrBhIGNo4buJIHJhIGtobyBjaOG7qWEgbcOheSBjaOG7py4gIFhpbiBow6N5IGNo4buJIMSR4buLbmggaG/hurdjIGzDoCBVUkwgaG/hurdjXG4iCisidMOqbiBtw6F5IGNo4bunIHThu6sgY8OhaSBtw6Agbmjhu69uZyDEkWnhu4NtIHjDqXQgZHV54buHdCBt4bubaSBjw7MgdGjhu4MgxJHGsOG7o2MgZmV0Y2ggKGzhuqV5IHbhu4EpLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MjEKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICJC4bqhbiBwaOG6o2kgxJHhu4tuaCByw7UgdMOqbiB0aOG6uy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcxCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTeG7qWMgc8OidSBsw6Agc+G7kSDDom0gdHJvbmcgLS1kZWVwZW4gbMOgIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3MworbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4tLWRlZXBlbiB2w6AgLS1kZXB0aCBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3OAorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtLWRlcHRoIHbDoCAtLXVuc2hhbGxvdyBraMO0bmcgdGjhu4Mgc+G7rSBk4bulbmcgY8O5bmcgduG7m2kgbmhhdSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3ODAKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS11bnNoYWxsb3cgdHLDqm4ga2hvIGhvw6BuIGNo4buJbmggbMOgIGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzk2Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImzhu4duaCBs4bqleSB24buBIFwiZmV0Y2ggLS1hbGxcIiBraMO0bmcgbOG6pXkgxJHhu5FpIHPhu5Ega2hvIGNo4bupYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3OTgKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImzhu4duaCBs4bqleSB24buBIFwiZmV0Y2ggLS1hbGxcIiBraMO0bmcgaOG7o3AgbMO9IHbhu5tpIHJlZnNwZWNzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJLaMO0bmcgY8OzIG5ow7NtIG3DoXkgY2jhu6cgaGF5IG3DoXkgY2jhu6cgbmjGsCB0aOG6vzogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODE0Cittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJWaeG7h2MgbOG6pXkgduG7gSBj4bqjIG3hu5l0IG5ow7NtIHbDoCBjaOG7iSDEkeG7i25oIHJlZnNwZWNzIGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMyCittc2dpZCAiIgorIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcmVtb3RlIGNvbmZpZ3VyZWQgaW4gZXh0ZW5zaW9ucy4iCisicGFydGlhbGNsb25lIgorbXNnc3RyICIiCisiLS1maWx0ZXIgY2jhu4kgY8OzIHRo4buDIMSRxrDhu6NjIGTDuW5nIHbhu5tpIG3DoXkgY2jhu6cgxJHGsOG7o2MgY+G6pXUgaMOsbmggYuG6sW5nIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8Y2jDul90aMOtY2g+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8dOG6rXAtIgorInRpbj5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgImfhuq9uIG5o4bqtdCBrw70gduG7m2kgw610IG5o4bqldCA8bj4gbeG7pWMgdOG7qyBs4buHbmgg4oCcc2hvcnRsb2figJ0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgImFsaWFzIGZvciAtLWxvZyAoZGVwcmVjYXRlZCkiCittc2dzdHIgImLDrSBkYW5oIGNobyAtLWxvZyAoa2jDtG5nIMSRxrDhu6NjIGTDuW5nKSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgwCittc2dpZCAidGV4dCIKK21zZ3N0ciAidsSDbiBi4bqjbiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgxCittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICJkw7luZyA8dsSDbiBi4bqjbiB0aMaw4budbmc+IMSR4buDIGLhuq90IMSR4bqndSBnaGkgY2jDuiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgyCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgInThuq1wIHRpbiDEkeG7gyDEkeG7jWMgZOG7ryBsaeG7h3UgdOG7qyDEkcOzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPG3huqt1Pl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDzEkeG7kWkgdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMgorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPGNvbW1pdD5dXSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8bOG6p24tY2h1eeG7g24tZ2lhbz5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgIiIKKyJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8bOG6p24tY2h1eeG7g24tZ2lhbz5dXSBbLS1uby1jb250YWlucyBbPGzhuqduLSIKKyJjaHV54buDbi1naWFvPl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgInRyw61jaCBk4bqrbiDEkeG7gyBwaMO5IGjhu6NwIGNobyBo4buHIHbhu48gKHNoZWxsKSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAidHLDrWNoIGThuqtuIMSR4buDIHBow7kgaOG7o3AgY2hvIHBlcmwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzIKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAidHLDrWNoIGThuqtuIMSR4buDIHBow7kgaOG7o3AgY2hvIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICJ0csOtY2ggZOG6q24gxJHhu4MgcGjDuSBo4bujcCBjaG8gVGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgImhp4buDbiB0aOG7iyBjaOG7iSA8bj4gdGhhbSBjaGnhur91IGto4bubcCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAiY8OhYyBtw6B1IMSR4buLbmggZOG6oW5nIGzGsHUgdMOibSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0MgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIGPDoWMgdGhhbSBjaGnhur91IG3DoCBuw7MgY2jhu4kgxJHhur9uIMSR4buRaSB0xrDhu6NuZyDEkcOjIGNobyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRoYW0gY2hp4bq/dSBtw6AgbsOzIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ1Cittc2dpZCAicHJpbnQgb25seSByZWZzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRoYW0gY2hp4bq/dSBtw6AgbsOzIGtow7RuZyDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NgorbXNnaWQgInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRoYW0gY2hp4bq/dSBtw6AgbsOzIGNo4bupYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIG5o4buvbmcgdGhhbSBjaGnhur91IG3DoCBuw7Mga2jDtG5nIGNo4bupYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2ZzY2suYzo2OCBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9mc2NrLmM6MTQ4Cittc2dpZCAidW5rbm93biIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gZXJyb3IgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTAwIGJ1aWx0aW4vZnNjay5jOjEyMAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiAlcyAlczogJXMiCittc2dzdHIgImzhu5dpIHRyb25nICVzICVzOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZyBpbiAlcyAlczogJXMiCittc2dzdHIgImPDsyBj4bqjbmggYsOhbyB0cm9uZyAlcyAlczogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE0MyBidWlsdGluL2ZzY2suYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiCittc2dzdHIgImxpw6puIGvhur90IGfDo3kgdOG7qyAlN3MgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE1NQorbXNnaWQgIndyb25nIG9iamVjdCB0eXBlIGluIGxpbmsiCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcgc2FpIHRyb25nIGxpw6puIGvhur90IgorCisjOiBidWlsdGluL2ZzY2suYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCisiICAgICAgICAgICAgICB0byAlN3MgJXMiCittc2dzdHIgIiIKKyJsacOqbiBr4bq/dCBnw6N5IHThu6sgJTdzICVzIFxuIgorIiAgICAgICAgICAgICAgdOG7m2kgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAidGhp4bq/dSAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVhY2hhYmxlICVzICVzIgorbXNnc3RyICJraMO0bmcgdGnhur9wIGPhuq1uIMSRxrDhu6NjICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGFuZ2xpbmcgJXMgJXMiCittc2dzdHIgImRhbmdsaW5nICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMzkKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxvc3QtZm91bmQiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBsb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgaG/DoG4gdGjDoG5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2ZzY2suYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMiCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkgKCVkIG9iamVjdHMpIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIGvhur90IG7hu5FpICglZCDEkeG7kWkgdMaw4bujbmcpIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgJXMiCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAiY8OhYyBsacOqbiBr4bq/dCBi4buLIGfhuqt5IgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAiZ+G7kWMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWdnZWQgJXMgJXMgKCVzKSBpbiAlcyIKK21zZ3N0ciAixJHDoyDEkcOhbmggdGjhursgJXMgJXMgKCVzKSB0cm9uZyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIgorbXNnc3RyICIlczogxJHhu5FpIHTGsOG7o25nIHRoaeG6v3UgaGF5IGjhu49uZyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHJlZmxvZyBlbnRyeSAlcyIKK21zZ3N0ciAiJXM6IG3hu6VjIHJlZmxvZyBraMO0bmcgaOG7o3AgbOG7hyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlZmxvZyAlcy0+JXMiCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgdmnhu4djIMSR4buVaSB0w6puIGPhu6dhIOKAnCVz4oCdIHRow6BuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9mc2NrLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciAlcyIKK21zZ3N0ciAiJXM6IGNvbiB0cuG7jyBzaGExIGtow7RuZyBo4bujcCBs4buHICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJXM6IGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYwOQorbXNnaWQgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzIgorbXNnc3RyICJj4bqjbmggYsOhbzogS2jDtG5nIGPDsyBjw6FjIHRoYW0gY2hp4bq/dSBt4bq3YyDEkeG7i25oIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3Npbmc6ICVzIgorbXNnc3RyICIlczogdGhp4bq/dSDEkeG7kWkgdMaw4bujbmcgaG/hurdjIGjhu49uZzogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICVzIgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPDuiDEkeG7kWkgdMaw4bujbmc6ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNoYTEgZmlsZTogJXMiCittc2dzdHIgInThuq1wIHRpbiBzaGExIHNhaTogJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3MgorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcnkiCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgdGjGsCBt4bulYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3NQorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBjw6FjIHRoxrAgbeG7pWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMgbGluayIKK21zZ3N0ciAixJBhbmcgbOG6pXkgbGnDqm4ga+G6v3QgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5NSBidWlsdGluL2luZGV4LXBhY2suYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiJXMga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIKK21zZ3N0ciAiJXMgY2jhu4kgxJHhur9uIHRo4bupIGfDrCDEkcOzIHhhIGzhuqEgKCVzKSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkZXRhY2hlZCBIRUFEIHBvaW50cyBhdCBub3RoaW5nIgorbXNnc3RyICIlczogSEVBRCDEkcOjIHTDoWNoIHLhu51pIGtow7RuZyBjaOG7iSB2w6BvIMSRw6J1IGPhuqMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcxMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RpY2U6ICVzIHBvaW50cyB0byBhbiB1bmJvcm4gYnJhbmNoICglcykiCittc2dzdHIgImNow7ogw706ICVzIGNo4buJIMSR4bq/biBt4buZdCBuaMOhbmggY2jGsGEgc2luaCAoJXMpIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjQKK21zZ2lkICJDaGVja2luZyBjYWNoZSB0cmVlIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIGPDonkgbmjhu5sgdOG6oW0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIKK21zZ3N0ciAiJXM6IGNvbiB0cuG7jyBzaGExIGtow7RuZyBo4bujcCBs4buHIHRyb25nIGNhY2hlLXRyZWUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIm5vbi10cmVlIHRyb25nIGNhY2hlLXRyZWUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc2OQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8xJHhu5FpLXTGsOG7o25nPuKApl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NQorbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NgorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9IgorCisjOiBidWlsdGluL2ZzY2suYzo3NzcKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiYsOhbyBjw6FvIGPDoWMgdGjhursiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICJiw6FvIGPDoW8gbm9kZSBn4buRYyIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc5Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgInThuqFvIOKAnGluZGV4IG9iamVjdHMgaGVhZCBub2Rlc+KAnSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJ04bqhbyDigJxyZWZsb2dzIGhlYWQgbm9kZXPigJ0gKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODEKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAiY8WpbmcgY8OibiBuaOG6r2MgxJHhur9uIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kgdsOgIHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MgorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICJjaOG7iSBraeG7g20gdHJhIGvhur90IG7hu5FpIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODMKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgImNobyBwaMOpcCBraeG7g20gdHJhIGjhuqFuIGNo4bq/IGjGoW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NQorbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICJnaGkgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70gdHJvbmcgLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODYgYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgImhp4buDbiB0aOG7iyBxdcOhIHRyw6xuaCIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg3Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHTDqm4gY2hpIHRp4bq/dCBjaG8gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHhu41jIMSRxrDhu6NjIgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9mc2NrLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgbWlzc2luZyIKK21zZ3N0ciAiJXM6IHRoaeG6v3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2ZzY2suYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICJ0aGFtIHPhu5Ega2jDtG5nIGjhu6NwIGzhu4c6IGPhuqduIHNoYTEsIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2Mg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vZ2MuYzozNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs8Y8OhYyB0w7l5IGNo4buNbj5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSB04bqtcCB0aW4gJXM6ICVzIgorCisjOiBidWlsdGluL2djLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAnJXMnIHZhbHVlICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCDigJwlc+KAnSBnacOhIHRy4buLIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2djLmM6NDc1IGJ1aWx0aW4vaW5pdC1kYi5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4Eg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODQgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiTOG6p24gY2jhuqF5IGdjIGN14buRaSDEkcOjIGLDoW8gY8OhbyBjw6FjIHbhuqVuIMSR4buBIHNhdSDEkcOieS4gVnVpIGzDsm5nIHPhu61hIG5ndXnDqm4gbmjDom5cbiIKKyJ04bqtbiBn4buRYyB2w6AgeMOzYSBi4buPICVzLlxuIgorIlZp4buHYyB04buxIMSR4buZbmcgZOG7jW4gZOG6uXAgc+G6vSBraMO0bmcgdGjhu7FjIHRoaSBjaG8gxJHhur9uIGtoaSB04bqtcCB0aW4gxJHGsOG7o2MgeMOzYSBi4buPLlxuIgorIlxuIgorIiVzIgorCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgInjDs2EgYuG7jyBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgxJHGsOG7o2MgdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL2djLmM6NTQxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJj4bqpbiB0aOG6rW4gaMahbiBu4buvYSAodMSDbmcgdGjhu51pIGdpYW4gY2jhuqF5KSIKKworIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgImLhuq10IGNo4bq/IMSR4buZIGF1dG8tZ2MiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiYnXhu5ljIGdjIGNo4bqheSBuZ2F5IGPhuqMga2hpIGPDsyB0aeG6v24gdHLDrG5oIGdjIGtow6FjIMSRYW5nIGNo4bqheSIKKworIzogYnVpbHRpbi9nYy5jOjU0OAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgIsSRw7NuZyBnw7NpIGzhuqFpIHThuqV0IGPhuqMgY8OhYyBnw7NpIGtow6FjIG5nb+G6oWkgdHLhu6sgZ8OzaSBs4bubbiBuaOG6pXQiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGdjLmxvZ2V4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIGdpw6EgdHLhu4sgZ2MubG9nZXhwaXJ5ICVzIgorCisjOiBidWlsdGluL2djLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBwcnVuZSBleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCBnacOhIHRy4buLIHBydW5lICVzIgorCisjOiBidWlsdGluL2djLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisiVOG7sSDEkeG7mW5nIMSRw7NuZyBnw7NpIGtobyBjaOG7qWEgdHLDqm4gbuG7gW4gaOG7hyB0aOG7kW5nIMSR4buDIHThu5FpIMawdSBow7NhIGhp4buHdSBzdeG6pXQgbMOgbSAiCisidmnhu4djLlxuIgorCisjOiBidWlsdGluL2djLmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiVOG7sSDEkeG7mW5nIMSRw7NuZyBnw7NpIGtobyBjaOG7qWEgxJHhu4MgdOG7kWkgxrB1IGjDs2EgaGnhu4d1IHN14bqldCBsw6BtIHZp4buHYy5cbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICJYZW0gXCJnaXQgaGVscCBnY1wiIMSR4buDIGPDsyBoxrDhu5tuZyBk4bqrbiBj4bulIHRo4buDIHbhu4EgY8OhY2ggZOG7jW4gZOG6uXAga2hvIGdpdC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2MgaXMgYWxyZWFkeSBydW5uaW5nIG9uIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2UgaWYgbm90KSIKK21zZ3N0ciAiIgorImdjIMSRYW5nIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gdHLDqm4gbcOheSDigJwlc+KAnSBwaWQgJTxQUkl1TUFYPiAoZMO5bmcgLS1mb3JjZSBu4bq/dSBraMO0bmcgIgorInBo4bqjaSB0aOG6vykiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2OTQKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyJDw7MgcXXDoSBuaGnhu4F1IMSR4buRaSB0xrDhu6NuZyB04buxIGRvIGtow7RuZyDEkcaw4bujYyBkw7luZyDEkeG6v247IGjDo3kgY2jhuqF5IGzhu4duaCDigJxnaXQgcHJ1bmXigJ0gIgorIsSR4buDIHjDs2EgYuG7jyBjaMO6bmcgxJFpLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjkKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFstZV0gPG3huqt1PiBbPHJldj7igKZdIFtbLS1dIDwvxJHGsOG7nW5nL2ThuqtuPuKApl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IGfhurdwIGzhu5dpIHThuqFvIHR1eeG6v24gKHRocmVhZCk6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSBmb3IgJXMiCittc2dzdHIgInPhu5EgdHV54bq/biDEkcOjIGNobyBraMO0bmcgaOG7o3AgbOG7hyAoJWQpIGNobyAlcyIKKworIy4gVFJBTlNMQVRPUlM6ICVzIGlzIHRoZSBjb25maWd1cmF0aW9uCisjLiB2YXJpYWJsZSBmb3IgdHdlYWtpbmcgdGhyZWFkcywgY3VycmVudGx5CisjLiBncmVwLnRocmVhZHMKKyMuCisjOiBidWlsdGluL2dyZXAuYzoyODcgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNCBidWlsdGluL2luZGV4LXBhY2suYzoxNzI3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAia2jDtG5nIGjhu5cgdHLhu6MgxJFhIHR1eeG6v24sIGLhu48gcXVhICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0NjcgYnVpbHRpbi9ncmVwLmM6NTkyIGJ1aWx0aW4vZ3JlcC5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgY8OieSAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbOG7h25oIGdyZXAgKGzhu41jIHTDrG0pIHThu6sgxJHhu5FpIHTGsOG7o25nIHRodeG7mWMga2nhu4N1ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiY2h1eeG7g24gxJHhur9uIOKAnCVj4oCdIGPhuqduIG3hu5l0IGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgInTDrG0gdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIHRoYXkgdsOsIHRyb25nIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNworbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICJ0w6xtIHRyb25nIG7hu5lpIGR1bmcga2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70gYuG7n2kgZ2l0IgorCisjOiBidWlsdGluL2dyZXAuYzo4MTkKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgInTDrG0ga2nhur9tIGPDoWMgdOG6rXAgdGluIMSRxrDhu6NjIHbDoCBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgZOG6pXUgduG6v3QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyMQorbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAiY8OhYyB04bqtcCB0aW4gYuG7iyBi4buPIHF1YSDEkcaw4bujYyBjaOG7iSDEkeG7i25oIHRow7RuZyBxdWEg4oCcLmdpdGlnbm9yZeKAnSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODIzCittc2dpZCAicmVjdXJzaXZlbHkgc2VhcmNoIGluIGVhY2ggc3VibW9kdWxlIgorbXNnc3RyICJ0w6xtIGtp4bq/bSDEkeG7hyBxdXkgdHJvbmcgdOG7q25nIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBuaOG7r25nIGTDsm5nIGtow7RuZyBraOG7m3AgduG7m2kgbeG6q3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgyOAorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgInBow6JuIGJp4buHdCBIT0EvdGjGsOG7nW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAiY2jhu4kga2jhu5twIG3huqt1IHThuqFpIMSRxrDhu51uZyByYW5oIGdp4bubaSB04burIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzIKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICJ44butIGzDvSB04bqtcCB0aW4gbmjhu4sgcGjDom4gbmjGsCBsw6AgZOG6oW5nIHbEg24gYuG6o24gdGjGsOG7nW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzQKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgImtow7RuZyBraOG7m3AgbeG6q3UgdHJvbmcgY8OhYyB04bqtcCB0aW4gbmjhu4sgcGjDom4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAieOG7rSBsw70gdOG6rXAgdGluIG5o4buLIHBow6JuIHbhu5tpIGPDoWMgYuG7mSBs4buNYyDigJx0ZXh0Y29uduKAnSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODM5Cittc2dpZCAic2VhcmNoIGluIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0KSIKK21zZ3N0ciAidMOsbSBraeG6v20gdHJvbmcgdGjGsCBt4bulYyBjb24gKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDEKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImjhuqEgeHXhu5FuZyDDrXQgbmjhuqV0IGzDoCBt4bupYyA8c8OidT4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJkw7luZyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdWkgUE9TSVggY8OzIG3hu58gcuG7mW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiCittc2dzdHIgInPhu60gZOG7pW5nIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSBraeG7g3UgUE9TSVggKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTEKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAiZGnhu4VuIGThu4tjaCBjw6FjIG3huqt1IG5oxrAgbMOgIGNodeG7l2kgY+G7kSDEkeG7i25oIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTQKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgInPhu60gZOG7pW5nIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSB0xrDGoW5nIHRow61jaCBQZXJsIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHPhu5EgY+G7p2EgZMOybmciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1OAorbXNnaWQgInNob3cgY29sdW1uIG51bWJlciBvZiBmaXJzdCBtYXRjaCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHPhu5EgY+G7mXQgY+G7p2Ega2jhu5twIHbhu5tpIG3huqt1IMSR4bqndSB0acOqbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgdMOqbiB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB0w6puIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHTDqm4gdOG6rXAgdGluIHTGsMahbmcgxJHhu5FpIHbhu5tpIHRoxrAgbeG7pWMgxJHhu4luaCAodG9wKSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY0Cittc2dpZCAic2hvdyBvbmx5IGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgdMOqbiB04bqtcCB0aW4gdGhheSB2w6wgbmjhu69uZyBkw7JuZyBraOG7m3AgduG7m2kgbeG6q3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NgorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICLEkeG7k25nIG5naMSpYSB24bubaSAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY5Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgdMOqbiBjaG8gbmjhu69uZyB04bqtcCB0aW4ga2jDtG5nIGto4bubcCB24bubaSBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODcxCittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAidGjDqm0gTlVMIHbDoG8gc2F1IHTDqm4gdOG6rXAgdGluIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzQKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hpbmcgcGFydHMgb2YgYSBsaW5lIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyBwaOG6p24ga2jhu5twIHbhu5tpIG3huqt1IGPhu6dhIG3hu5l0IGTDsm5nIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzYKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgc+G7kSBsxrDhu6NuZyBraOG7m3AgdGhheSB2w6wgbmjhu69uZyBkw7JuZyBraOG7m3AgduG7m2kgbeG6q3UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICJ0w7Qgc8OhbmcgcGjhuqduIGto4bubcCBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc5Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkw7JuZyB0cuG7kW5nIGdp4buvYSBjw6FjIGzhuqduIGto4bubcCB04burIGPDoWMgdOG6rXAgdGluIGtow6FjIGJp4buHdCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODgxCittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorImhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiBt4buZdCBs4bqnbiBwaMOtYSB0csOqbiBjw6FjIGzhuqduIGto4bubcCB04burIGPDuW5nIG3hu5l0IHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyA8bj4gZMOybmcgbuG7mWkgZHVuZyBwaMOtYSB0csaw4bubYyB2w6Agc2F1IGPDoWMgbOG6p24ga2jhu5twIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgPG4+IGTDsm5nIG7hu5lpIGR1bmcgdHLGsOG7m2Mga2jhu5twIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyA8bj4gZMOybmcgbuG7mWkgZHVuZyBzYXUga2jhu5twIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTEKK21zZ2lkICJ1c2UgPG4+IHdvcmtlciB0aHJlYWRzIgorbXNnc3RyICJkw7luZyA8bj4gdHV54bq/biB0csOsbmggbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgImThuqFuZyB2aeG6v3QgdOG6r3QgY+G7p2EgLUMgU+G7kCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk1Cittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGTDsm5nIHbDs2kgdMOqbiBow6BtIHRyxrDhu5tjIGPDoWMgbOG6p24ga2jhu5twIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTcKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGjDoG0gYmFvIHF1YW5oIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDAKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAixJHhu41jIG3huqt1IHThu6sgdOG6rXAtdGluIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDIKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIm1hdGNoIDxt4bqrdT4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgInThu5UgaOG7o3AgbeG6q3UgxJHGsOG7o2MgY2jhu4kgcmEgduG7m2kgdMO5eSBjaOG7jW4gLWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLEkcawYSByYSBn4bujaSDDvSB24bubaSB0cuG6oW5nIHRow6FpIHRob8OhdCBtw6Aga2jDtG5nIGPDsyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIGPDoWkga2jhu5twIHThu6sgdOG6rXAgdGluIG3DoCBuw7Mga2jhu5twIHRvw6BuIGLhu5kgY8OhYyBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6J5IHBow6JuIHTDrWNoIGPDuiBwaMOhcCBjaG8gYmnhu4N1IHRo4bupYyDigJxncmVw4oCdICh0w6xtIGtp4bq/bSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyNAorbXNnaWQgInBhZ2VyIgorbXNnc3RyICJkw6BuIHRyYW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo5MjQKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIGto4bubcCB0cm9uZyB0cmFuZyBnaeG6pXkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkyOAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiY2hvIHBow6lwIGfhu41pIGdyZXAoMSkgKGLhu4sgYuG7jyBxdWEgYuG7n2kgbOG6p24gZOG7i2NoIG7DoHkpIgorCisjOiBidWlsdGluL2dyZXAuYzo5OTIKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuIgorbXNnc3RyICJjaMawYSBjaOG7iSByYSBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAyOAorbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzIgorbXNnc3RyICItLW5vLWluZGV4IGhheSAtLXVudHJhY2tlZCBraMO0bmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcgY8O5bmcgduG7m2kgcmV2cyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgxJFp4buDbSB4w6l0IGR1eeG7h3Q6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3Cittc2dpZCAiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAidOG7lSBo4bujcCB0w7l5IGNo4buNbiBraMO0bmcgaOG7o3AgbOG7hywgYuG7jyBxdWEgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwMAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIgorbXNnc3RyICJraMO0bmcgaOG7lyB0cuG7oyDEkWEgdHV54bq/biwgYuG7jyBxdWEgLS10aHJlYWRzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDczIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzEgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgInPhu5EgdHV54bq/biBjaOG7iSByYSBraMO0bmcgaOG7o3AgbOG7hyAoJWQpIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDk2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgY2jhu4kgbMOgbSB2aeG7h2MgdHLDqm4gY8OieS1sw6BtLXZp4buHYyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTExOQorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgInTDuXkgY2jhu41uIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHbhu5tpIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMTI1Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4IgorbXNnc3RyICItLWNhY2hlZCBoYXkgLS11bnRyYWNrZWQga2jDtG5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpIC0tbm8taW5kZXgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzEKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIGNobyBu4buZaSBkdW5nIGzGsHUgZOG6pXUgduG6v3QiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzkKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4iCittc2dzdHIgImPhuqMgaGFpIC0tY2FjaGVkIHbDoCBjw6FjIGPDonkgcGjhuqNpIMSRxrDhu6NjIGNo4buJIHJhIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDxraeG7g3U+XSBbLXddIFstLXBhdGg9PHThuq1wLXRpbj4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8dOG6rXAtdGluPuKApiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiZ2hpIMSR4buRaSB0xrDhu6NuZyB2w6BvIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICLEkeG7jWMgxJHhu5FpIHTGsOG7o25nIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiBzdGRpbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJsxrB1IGPDoWMgdOG6rXAgdGluIG3DoCBuw7Mga2jDtG5nIGPDsyBjw6FjIGLhu5kgbOG7jWMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDQKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICJjaOG7iSBj4bqnbiBixINtIHLDoWMgbmfhuqt1IG5oacOqbiDEkeG7gyB04bqhbyBt4buZdCDEkeG7kWkgdMaw4bujbmcgaOG7j25nIMSR4buDIG3DoCBn4buhIGzhu5dpIEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICJ44butIGzDvSB04bqtcCB0aW4gbmjGsCBsw6AgbsOzIMSRYW5nIOG7nyB0aMawIG3hu6VjIG7DoHkiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGRhbmggc8OhY2ggY8OhYyBjw6J1IGzhu4duaCBuZ8aw4budaSBkw7luZyBjw7MgdGjhu4Mgc+G7rSBk4bulbmciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ3Cittc2dpZCAiZXhjbHVkZSBndWlkZXMiCittc2dzdHIgImjGsOG7m25nIGThuqtuIGxv4bqhaSB0cuG7qyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDgKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkYW5oIHPDoWNoIGPDoWMgaMaw4bubbmcgZOG6q24gaOG7r3UgZOG7pW5nIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICJpbiByYSB04bqldCBj4bqjIGPDoWMgdMOqbiBiaeG6v24gY+G6pXUgaMOsbmgiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRyYW5nIG1hbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGjGsOG7m25nIGThuqtuIHPhu60gZOG7pW5nIHRyb25nIHRyw6xuaCBkdXnhu4d0IHdlYiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTQKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAiaGnhu4duIHRyYW5nIGluZm8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG3DtCB04bqjIGzhu4duaCIKKworIzogYnVpbHRpbi9oZWxwLmM6NjEKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8bOG7h25oPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIMSR4buLbmggZOG6oW5nIHRy4bujIGdpw7pwIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkga2jhu59pIGNo4bqheSBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHBow6JuIHTDrWNoIHBoacOqbiBi4bqjbiBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJwaGnDqm4gYuG6o24gY+G7p2EgZW1hY3NjbGllbnQg4oCcJWTigJ0gcXXDoSBjxakgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTQzIGJ1aWx0aW4vaGVscC5jOjE2NSBidWlsdGluL2hlbHAuYzoxNzUgYnVpbHRpbi9oZWxwLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB0aOG7sWMgdGhpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLigJwlc+KAnTogxJHGsOG7nW5nIGThuqtuIGtow7RuZyBo4buXIHRy4bujIGLhu5kgdHLDrG5oIGNoaeG6v3UgbWFuLlxuIgorIkjDo3kgY8OibiBuaOG6r2MgxJHhur9uIHZp4buHYyBz4butIGThu6VuZyDigJxtYW4uPHRvb2w+LmNtZOKAnSDEkeG7gyB0aGF5IHRo4bq/LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIuKAnCVz4oCdOiBjbWQgKGzhu4duaCkgaOG7lyB0cuG7oyBi4buZIHRyw6xuaCBjaGnhur91IG1hbi5cbiIKKyJIw6N5IGPDom4gbmjhuq9jIMSR4bq/biB2aeG7h2Mgc+G7rSBk4bulbmcg4oCcbWFuLjx0b29sPi5wYXRo4oCdIMSR4buDIHRoYXkgdGjhur8uIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAi4oCcJXPigJ06IGtow7RuZyByw7UgY2jGsMahbmcgdHLDrG5oIHhlbSBtYW4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImtow7RuZyBjw7MgdHLDrG5oIHhlbSB0cuG7oyBnacO6cCBk4bqhbmcgbWFucGFnZSB0aeG6v3AgaOG7o3AgduG7m2kgecOqdSBj4bqndSIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc1Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAia2jDtG5nIGPDsyB0csOsbmggeGVtIHRy4bujIGdpw7pwIGThuqFuZyBpbmZvIHRp4bq/cCBo4bujcCB24bubaSB5w6p1IGPhuqd1IgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQgYnVpbHRpbi9oZWxwLmM6NDQ1IGdpdC5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFsaWFzZWQgdG8gJyVzJyIKK21zZ3N0ciAi4oCcJXPigJ0gxJHGsOG7o2MgxJHhurd0IGLDrSBkYW5oIHRow6BuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiY2h14buXaSBhbGlhcy4lcyBzYWk6ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICJjw6FjaCBkw7luZzogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDkxCittc2dpZCAiJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgaW5mb3JtYXRpb24iCittc2dzdHIgIkNo4bqheSBs4buHbmgg4oCcZ2l0IGhlbHAgY29uZmln4oCdIMSR4buDIGPDsyB0aMOqbSB0aMO0bmcgdGluIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcga2jDtG5nIGto4bubcCB04bqhaSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB24buBIMSR4buRaSB0xrDhu6NuZyBj4bqnbiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyAlczogY+G6p24ga2nhu4N1ICVzIG5oxrBuZyBs4bqhaSBuaOG6rW4gxJHGsOG7o2MgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAia2jDtG5nIHRo4buDIMSRaeG7gW4gdGjDqm0gdsOgbyAlZCBieXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgImfhurdwIGvhur90IHRow7pjIHThuq1wIHRpbiBFT0YgcXXDoSBz4bubbSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAibOG7l2kgxJHhu41jIOG7nyDEkeG6p3UgdsOgbyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjgxCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInPhu60gZOG7pW5nIG5oaeG7gXUgaMahbiBz4buRIGzGsOG7o25nIGJ5dGUgbcOgIG7DsyBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4OCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjYwNAorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgImfDs2kgcXXDoSBs4bubbiBzbyB24bubaSDEkeG7i25oIG5naMSpYSBoaeG7h24gdOG6oWkgY+G7p2Ega2nhu4N1IG9mZl90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICJnw7NpIMSRw6Mgdsaw4bujdCBxdcOhIGPhu6EgdOG7kWkgxJFhIMSRxrDhu6NjIHBow6lwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gcGFja2ZpbGUg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMyNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJjaOG7ryBrw70gY2hvIGfDs2kga2jDtG5nIGto4bubcCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIHBoacOqbiBi4bqjbiBnw7NpICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICU8UFJJdU1BWD46ICVzIgorbXNnc3RyICJnw7NpIGPDsyDEkeG7kWkgdMaw4bujbmcgc2FpIHThuqFpIGtob+G6o25nIGLDuSAlPFBSSXVNQVg+OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgInjhuqMgbsOpbiB0cuG6oyB24buBICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MTUKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJ0csOgbiBnacOhIHRy4buLIGtob+G6o25nIGLDuSBjaG8gxJHhu5FpIHTGsOG7o25nIGRlbHRhIGPGoSBz4bufIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjMKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgImtob+G6o25nIGLDuSBjxqEgc+G7nyBjaG8gZGVsdGEgbuG6sW0gbmdvw6BpIHBo4bqhbSB2aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgImtow7RuZyBoaeG7g3Uga2nhu4N1IMSR4buRaSB0xrDhu6NuZyAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTYyCittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNo4bqheSBow6BtIHByZWFkIGNobyB04bqtcCB0aW4gZ8OzaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAidOG6rXAgdGluIGfDs2kgYuG7iyBr4bq/dCB0aMO6YyBz4bubbSwgdGhp4bq/dSAlPFBSSXVNQVg+IGJ5dGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJz4buxIG3DonUgdGh14bqrbiB44bqjIG7DqW4gbmdoacOqbSB0cuG7jW5nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc2NAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODAzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIlPhu7AgVkEgQ0jhuqBNIFNIQTEgxJDDgyBY4bqiWSBSQSBW4buaSSAlcyEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1NworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgaW5mbyAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyB0aMO0bmcgdGluIMSR4buRaSB0xrDhu6NuZyBz4bq1biBjw7MgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgxJHhu5FpIHTGsOG7o25nIMSRw6MgdOG7k24gdOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgYmxvYiBraMO0bmcgaOG7o3AgbOG7hyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NQorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFja2VkIG9iamVjdCIKK21zZ3N0ciAibOG7l2kgZnNjayB0cm9uZyDEkeG7kWkgdMaw4bujbmcgxJHDs25nIGfDs2kiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSB04bqldCBj4bqjIGPDoWMgxJHhu5FpIHTGsOG7o25nIGNvbiBj4bunYSAlcyBsw6AgY8OzIHRo4buDIHbhu5tpIHThu5tpIMSRxrDhu6NjIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTkgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUwCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgw6FwIGThu6VuZyBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLEkGFuZyBuaOG6rW4gduG7gSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkPDoWMgxJHhu5FpIHTGsOG7o25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MgorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiZ8OzaSBi4buLIHNhaSBo4buPbmcgKFNIQTEga2jDtG5nIGto4bubcCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTcKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHBhY2tmaWxlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTYwCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJwYWNrIGPDsyBwaOG6p24gdGjhu6thIOG7nyBjdeG7kWkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNzIKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJs4buZbiB44buZbiBoxqFuIGPhuqMgxJFpw6puIHLhu5Mga2hpIGNo4bqheSBow6BtIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk1Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAixJBhbmcgcGjDom4gZ2nhuqNpIGPDoWMgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHR1eeG6v246ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ2Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAibOG7mW4geOG7mW4gaMahbiBj4bqjIMSRacOqbiBy4buTIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0clswXSAixJHhuqd5IMSR4bunIHbhu5tpICVkIMSR4buRaSB0xrDhu6NuZyBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJH4bq3cCB04buVbmcga2nhu4NtIHRyYSB0YWlsIGtow7RuZyBj4bqnbiBjaG8gJXMgKMSRxKlhIGjhu49uZz8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJnw7NpIGPDsyAlZCBkZWx0YSBjaMawYSDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHjhuqMgbsOpbiDEkeG7kWkgdMaw4bujbmcgbuG7kWkgdGjDqm0gKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIG7hu5lpIGLhu5kgJXMgYuG7iyBo4buPbmciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgInTDqm4gdOG6rXAgdGluIHThuq1wIHRpbiBnw7NpIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyBr4bq/dCB0aMO6YyBi4bqxbmcgxJF1w7RpIOKAnC5wYWNr4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgJXMgdOG6rXAgdGluIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw7NuZyB04bqtcCB0aW4gxJHGsOG7o2MgZ2hpICVzIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgImfhurdwIGzhu5dpIHRyb25nIGtoaSDEkcOzbmcgdOG6rXAgdGluIGfDs2kiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbMawdSB04bqtcCB0aW4gZ8OzaSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4MQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbMawdSB0cuG7ryB04bqtcCB0aW4gZ2hpIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJzYWkgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gZ8OzaSDEkcOjIHPhurVuIGPDsyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gaWR4IGPhu6dhIGfDs2kgY2hvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gImtow7RuZyBkZWx0YTogJWQgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gImNoaeG7gXUgZMOgaSB4w61jaCA9ICVkOiAlbHUgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjg5Cittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIktow7RuZyB0aOG7gyBxdWF5IGzhuqFpIGN3ZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzQxCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICIlcyBzYWkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzcKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiBraMO0bmcgdGjhu4MgxJHGsOG7o2MgZMO5bmcgbcOgIGtow7RuZyBjw7MgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc3OQorbXNnaWQgIi0tc3RkaW4gcmVxdWlyZXMgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1zdGRpbiBj4bqnbiBt4buZdCBraG8gZ2l0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg1Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICJkw7luZyB0w7l5IGNo4buNbiAtLXZlcmlmeSBtw6Aga2jDtG5nIMSRxrBhIHJhIHTDqm4gcGFja2ZpbGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE4MzMgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjU4MQorbXNnaWQgImZzY2sgZXJyb3IgaW4gcGFjayBvYmplY3RzIgorbXNnc3RyICJs4buXaSBmc2NrIHRyb25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4EgbeG6q3Ug4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBvcGVuZGlyKCkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcmVhZGxpbmsg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGxpw6puIGvhur90IG3hu4FtIChzeW1saW5rKSDigJwlc+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+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgIFstcSB8IC0tcXVpZXRdIFstLWV4aXQtY29kZV0gWy0tZ2V0LXVybF1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLS1zeW1yZWZdIFs8a2hvPiBbPGPDoWMgdGhhbSBjaGnhur91PuKApl1dIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjU5Cittc2dpZCAiZG8gbm90IHByaW50IHJlbW90ZSBVUkwiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgVVJMIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjAgYnVpbHRpbi9scy1yZW1vdGUuYzo2MiBidWlsdGluL3JlYmFzZS5jOjE1MTgKK21zZ2lkICJleGVjIgorbXNnc3RyICJ0aOG7sWMgdGhpIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjYxIGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjMKK21zZ2lkICJwYXRoIG9mIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIGhvc3QiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiBj4bunYSBnaXQtdXBsb2FkLXBhY2sgdHLDqm4gbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2NQorbXNnaWQgImxpbWl0IHRvIHRhZ3MiCittc2dzdHIgImdp4bubaSBo4bqhbiB04bubaSBjw6FjIHRo4bq7IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY2Cittc2dpZCAibGltaXQgdG8gaGVhZHMiCittc2dzdHIgImdp4bubaSBo4bqhbiBjaG8gY8OhYyDEkeG6p3UiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjcKK21zZ2lkICJkbyBub3Qgc2hvdyBwZWVsZWQgdGFncyIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB0aOG6uyBi4buLIHBlZWwgKGfhu410IGLhu48pIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY5Cittc2dpZCAidGFrZSB1cmwuPGJhc2U+Lmluc3RlYWRPZiBpbnRvIGFjY291bnQiCittc2dzdHIgImzhuqV5IHVybC48YmFzZT4uaW5zdGVhZE9mIHbDoG8gdHJvbmcgdMOgaSBraG/huqNuIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICJ0aG/DoXQgduG7m2kgbcOjIGzDoCAyIG7hur91IGtow7RuZyB0w6xtIHRo4bqleSB0aGFtIGNoaeG6v3UgbsOgbyBraOG7m3AiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NzUKK21zZ2lkICJzaG93IHVuZGVybHlpbmcgcmVmIGluIGFkZGl0aW9uIHRvIHRoZSBvYmplY3QgcG9pbnRlZCBieSBpdCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRoYW0gY2hp4bq/dSBu4bqxbSBkxrDhu5tpIMSR4buDIHRow6ptIHbDoG8gxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIGNo4buJIGLhu59pIG7DsyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8dHJlZS1pc2g+IFs8L8SRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjgKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBjw6FjIHRyZWUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMAorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAixJHhu4cgcXV5IHbDoG8gY8OhYyB0aMawIG3hu6VjIGNvbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDonkga2hpIMSR4buHIHF1eSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiY2jhuqVtIGThu6l0IG3hu6VjIHRpbiB24bubaSBieXRlIE5VTCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiZ+G7k20gY+G6oyBrw61jaCB0aMaw4bubYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOCBidWlsdGluL2xzLXRyZWUuYzoxNDAKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJjaOG7iSBsaeG7h3Qga8OqIHTDqm4gdOG6rXAgdGluIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICJkw7luZyB0w6puIMSRxrDhu51uZyBk4bqrbiDEkeG6p3kgxJHhu6ciCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6J5IG3hu6VjIHRpbjsga2jDtG5nIGNo4buJIHRoxrAgbeG7pWMgaGnhu4duIGjDoG5oIChuZ+G7pSDDvSAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWFpbHNwbGl0LmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IG1ib3g6ICclcyciCittc2dzdHIgIm1ib3ggdHLhu5FuZyBy4buXbmc6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL21lcmdlLmM6NTUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8Y29tbWl0PuKApl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NgorbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjU3Cittc2dpZCAiZ2l0IG1lcmdlIC0tY29udGludWUiCittc2dzdHIgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE4Cittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJzd2l0Y2gg4oCcbeKAnSB5w6p1IGPhuqd1IG3hu5l0IGdpw6EgdHLhu4siCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAidMO5eSBjaOG7jW4g4oCcJXPigJ0gecOqdSBj4bqndSBt4buZdCBnacOhIHRy4buLIgorCisjOiBidWlsdGluL21lcmdlLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4g4oCcJXPigJ0uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiQ8OhYyBjaGnhur9uIGzGsOG7o2Mgc+G6tW4gc8OgbmcgbMOgOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiQ8OhYyBjaGnhur9uIGzGsOG7o2MgdMO5eSBjaOG7iW5oIHPhurVuIHPDoG5nIGzDoDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDQgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB0aOG7kW5nIGvDqiBraMOhYyBiaeG7h3QgdOG6oWkgY3Xhu5FpIGPhu6dhIGzhuqduIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ3IGJ1aWx0aW4vcHVsbC5jOjE1NQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRo4buRbmcga8OqIGtow6FjIGJp4buHdCB04bqhaSBjdeG7kWkgY+G7p2EgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDggYnVpbHRpbi9wdWxsLmM6MTU4Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKMSR4buTbmcgbmdoxKlhIHbhu5tpIC0tc3RhdCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTAgYnVpbHRpbi9wdWxsLmM6MTYxCittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJ0aMOqbSAow610IG5o4bqldCA8bj4pIG3hu6VjIHThu6sgc2hvcnRsb2cgY2hvIGdoaSBjaMO6IGNodXnhu4NuIGdpYW8gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTMgYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgInThuqFvIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gxJHGsG9uIHRoYXkgdsOsIHRo4buxYyBoaeG7h24gdmnhu4djIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU1IGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiBjaHV54buDbiBnaWFvIG7hur91IGjDsmEgdHLhu5luIHRow6BuaCBjw7RuZyAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTcgYnVpbHRpbi9wdWxsLmM6MTczCittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJz4butYSBjaMO6IHRow61jaCB0csaw4bubYyBraGkgY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgImNobyBwaMOpcCBjaHV54buDbi10aeG6v3AtbmhhbmggKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYxIGJ1aWx0aW4vcHVsbC5jOjE4MAorbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgImLhu48gcXVhIG7hur91IGNodXnhu4NuLXRp4bq/cC1uaGFuaCBraMO0bmcgdGjhu4MgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjUgYnVpbHRpbi9wdWxsLmM6MTgzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJ0aOG6qW0gdHJhIHhlbSBs4bqnbiBjaHV54buDbiBnaWFvIGPDsyB0w6puIMSRw7MgY8OzIGNo4buvIGvDvSBHUEcgaOG7o3AgbOG7hyBoYXkga2jDtG5nIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY2IGJ1aWx0aW4vbm90ZXMuYzo3ODcgYnVpbHRpbi9wdWxsLmM6MTg3CisjOiBidWlsdGluL3JlYmFzZS5jOjUxMiBidWlsdGluL3JlYmFzZS5jOjE1MzEgYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY3IGJ1aWx0aW4vcHVsbC5jOjE4OAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIHPhur0gZMO5bmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjggYnVpbHRpbi9wdWxsLmM6MTkxCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJ0w7l5X2No4buNbj1nacOhX3Ry4buLIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vcHVsbC5jOjE5MgorbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInTDuXkgY2jhu41uIGNobyBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4gxJHDoyBjaOG7jW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzEKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIiIKKyJow7JhIHRy4buZbiBnaGkgY2jDuiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIChkw6BuaCBjaG8gaMOyYSB0cuG7mW4ga2jDtG5nLWNodXnhu4NuLXRp4bq/cC0iCisibmhhbmgpIgorCisjOiBidWlsdGluL21lcmdlLmM6Mjc4Cittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImLDo2kgYuG7jyBxdcOhIHRyw6xuaCBow7JhIHRy4buZbiBoaeG7h24gdOG6oWkgxJFhbmcgdGjhu7FjIGhp4buHbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MAorbXNnaWQgIi0tYWJvcnQgYnV0IGxlYXZlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgYWxvbmUiCittc2dzdHIgIi0tYWJvcnQgbmjGsG5nIMSR4buDIGzhuqFpIGLhuqNuZyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MgorbXNnaWQgImNvbnRpbnVlIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICJ0aeG6v3AgdOG7pWMgcXXDoSB0csOsbmggaMOyYSB0cuG7mW4gaGnhu4duIHThuqFpIMSRYW5nIHRo4buxYyBoaeG7h24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODQgYnVpbHRpbi9wdWxsLmM6MTk5Cittc2dpZCAiYWxsb3cgbWVyZ2luZyB1bnJlbGF0ZWQgaGlzdG9yaWVzIgorbXNnc3RyICJjaG8gcGjDqXAgaMOyYSB0cuG7mW4gbOG7i2NoIHPhu60ga2jDtG5nIGxpw6puIHF1YW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyOTAKK21zZ2lkICJieXBhc3MgcHJlLW1lcmdlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAidsOybmcgcXVhIG3Ds2MgKGhvb2spIHByZS1tZXJnZS1jb21taXQgdsOgIGNvbW1pdC1tc2ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDcKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNo4bqheSBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTIKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgImzhu4duaCB04bqhbSBj4bqldCBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIGzDoCBt4buZdCDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMzkgYnVpbHRpbi9tZXJnZS5jOjM1NgorbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKGtow7RuZyBjw7MgZ8OsIMSR4buDIHNxdWFzaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJTcXVhc2ggY29tbWl0IC0tIGtow7RuZyBj4bqtcCBuaOG6rXQgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBs4budaSBjaMO6IHRow61jaCBow7JhIHRy4buZbiAtLSBuw6puIGtow7RuZyBj4bqtcCBuaOG6rXQgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6BvIGPhuqMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiQ2h14buXaSBicmFuY2guJXMubWVyZ2VvcHRpb25zIHNhaTogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MDUKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJLaMO0bmcgY+G6p20gbuG6r20gZ8OsIG5nb8OgaSBoYWkgaGVhZCBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiBjaG8gbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgdOG7qyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJW4bqrbiBjaMawYSBow7JhIHRy4buZbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW87IHPhu60gZOG7pW5nIGzhu4duaCDigJxnaXQgY29tbWl04oCdIMSR4buDIGhvw6BuIHThuqV0ICIKKyJ2aeG7h2MgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDEKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorbXNnc3RyICIiCisiSMOjeSBuaOG6rXAgdsOgbyBjw6FjIHRow7RuZyB0aW4gxJHhu4MgZ2nhuqNpIHRow61jaCB04bqhaSBzYW8gc+G7sSBow7JhIHRy4buZbiBuw6B5IGzDoCBj4bqnbiAiCisidGhp4bq/dCxcbiIKKyLEkeG6t2MgYmnhu4d0IGzDoCBraGkgbsOzIGjDsmEgdHLhu5luIHRoxrDhu6NuZyBuZ3Xhu5NuIMSRw6MgY+G6rXAgbmjhuq10IHbDoG8gdHJvbmcgbeG7mXQgbmjDoW5oICIKKyJ0b3BpYy5cbiIKKyJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNgorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIk7hur91IHBo4bqnbiBjaMO6IHRow61jaCBy4buXbmcgc+G6vSBo4buneSBi4buPIGzhuqduIGNodXnhu4NuIGdpYW8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJOaOG7r25nIGTDsm5nIMSRxrDhu6NjIGLhuq90IMSR4bqndSBi4bqxbmcg4oCcJWPigJ0gc+G6vSDEkcaw4bujYyBi4buPIHF1YSwgdsOgIG7hur91IHBo4bqnbiBjaMO6XG4iCisidGjDrWNoIHLhu5duZyBz4bq9IGjhu6d5IGLhu48gbOG6p24gY2h1eeG7g24gZ2lhby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2MgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiQ2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY29tbWl0IChjaHV54buDbiBnaWFvKSBi4buLIHRy4buRbmcgcuG7l25nLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIlR1eeG7h3QgduG7nWkuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIlZp4buHYyB04buxIMSR4buZbmcgaMOyYSB0cuG7mW4gZ+G6t3AgbOG7l2k7IGjDo3kgc+G7rWEgY8OhYyB4dW5nIMSR4buZdCBzYXUgxJHDsyBjaHV54buDbiBnaWFvIGvhur90ICIKKyJxdeG6oy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3NworbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3OQorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBtw6F5IGNo4bunIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4MQorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aMaw4bujbmcgbmd14buTbiBt4bq3YyDEkeG7i25oIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJLaMO0bmcgbmjDoW5oIG3huqFuZyB0aGVvIGTDtWkgY2hvICVzIHThu6sgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIkdpw6EgdHLhu4sgc2FpIOKAnCVz4oCdIHRyb25nIGJp4bq/biBtw7RpIHRyxrDhu51uZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aOG7qSBnw6wgxJHDsyBtw6AgY2jDum5nIHTDtGkgY8OzIHRo4buDIGjDsmEgdHLhu5luIHRyb25nICVzOiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExODAKK21zZ2lkICJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBsw6AgdGjhu6kgZ8OsIMSRw7MgbcOgIGNow7puZyB0w7RpIGPDsyB0aOG7gyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODMKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IGtow7RuZyBuaOG6rW4gY8OhYyDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODcKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIiIKKyLhu54gxJHDonkga2jDtG5nIGPDsyBs4bqnbiBow7JhIHRy4buZbiBuw6BvIMSRxrDhu6NjIGjhu6d5IGLhu48gZ2nhu69hIGNo4burbmcgY+G6oyAodGhp4bq/dSBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk2Cittc2dpZCAiLS1xdWl0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLXF1aXQga2jDtG5nIG5o4bqtbiBjw6FjIMSR4buRaSBz4buRIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMwOQorbXNnaWQgIi0tY29udGludWUgZXhwZWN0cyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tY29udGludWUga2jDtG5nIG5o4bqtbiDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuG7niDEkcOieSBraMO0bmcgY8OzIGzhuqduIGjDsmEgdHLhu5luIG7DoG8gxJFhbmcgxJHGsOG7o2MgeOG7rSBsw70gY+G6oyAodGhp4bq/dSBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzI5Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkLhuqFuIGNoxrBhIGvhur90IHRow7pjIHZp4buHYyBow7JhIHRy4buZbiAoTUVSR0VfSEVBRCB24bqrbiB04buTbiB04bqhaSkuXG4iCisiSMOjeSBjaHV54buDbiBnaWFvIGPDoWMgdGhheSDEkeG7lWkgdHLGsOG7m2Mga2hpIGLhuqFuIGPDsyB0aOG7gyBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM2Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIkLhuqFuIGNoxrBhIGvhur90IHRow7pjIHZp4buHYyBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCB24bqrbiB04buTbiB04bqhaSkuXG4iCisiSMOjeSBjaHV54buDbiBnaWFvIGPDoWMgdGhheSDEkeG7lWkgdHLGsOG7m2Mga2hpIGLhuqFuIGPDsyB0aOG7gyBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICJC4bqhbiBjaMawYSBr4bq/dCB0aMO6YyB2aeG7h2MgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgduG6q24gdOG7k24gdOG6oWkpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiQuG6oW4ga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIC0tc3F1YXNoIHbhu5tpIC0tbm8tZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM1NQorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tY29tbWl0LiIKK21zZ3N0ciAiQuG6oW4ga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIC0tc3F1YXNoIHbhu5tpIC0tY29tbWl0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNzEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiS2jDtG5nIGNo4buJIHJhIGzhuqduIGNodXnhu4NuIGdpYW8gdsOgIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIGNoxrBhIMSRxrDhu6NjIMSR4bq3dC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzg4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIlNxdWFzaCBjb21taXQgdsOgbyBt4buZdCBoZWFkIHRy4buRbmcgcuG7l25nIHbhuqtuIGNoxrBhIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKyJDaHV54buDbiBnaWFvIGtow7RuZy1jaHV54buDbi10aeG6v3Atbmhhbmgga2jDtG5nIGjhu6NwIGzDvSDhu58gdHJvbmcgbeG7mXQgaGVhZCB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBraMO0bmcgcGjhuqNpIGzDoCB0aOG7qSBnw6wgxJHDsyBtw6AgY2jDum5nIHTDtGkgY8OzIHRo4buDIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM5NworbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgaMOyYSB0cuG7mW4gbeG7mXQgY8OhY2ggxJHDum5nIMSR4bqvbiBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHbDoG8gbeG7mXQgaGVhZCBy4buXbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDc2Cittc2dpZCAicmVmdXNpbmcgdG8gbWVyZ2UgdW5yZWxhdGVkIGhpc3RvcmllcyIKK21zZ3N0ciAidOG7qyBjaOG7kWkgaMOyYSB0cuG7mW4gbOG7i2NoIHPhu60ga2jDtG5nIGxpw6puIHF1YW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDg1Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiIKK21zZ3N0ciAixJDDoyBj4bqtcCBuaOG6rXQgcuG7k2kuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAixJBhbmcgY+G6rXAgbmjhuq10ICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUzNworIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAixJBhbmcgdGjhu60gaMOyYSB0cuG7mW4ga2nhu4N1IOKAnHRyaXZpYWwgaW4taW5kZXjigJ3igKZcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiS2jDtG5nLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU2OQorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZS4gWWVlYWghIgorbXNnc3RyICLEkMOjIGPhuq1wIG5o4bqtdCBy4buTaS4gWWVlYWghIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU3NQorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiVGjhu7FjIGhp4buHbiBs4buHbmggY2h1eeG7g24tdGnhur9wLW5oYW5oIGzDoCBraMO0bmcgdGjhu4MgxJHGsOG7o2MsIMSRYW5nIGLhu48gcXVhLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTggYnVpbHRpbi9tZXJnZS5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIsSQYW5nIHR1YSBs4bqhaSBjw6J5IHRow6BuaCB0aOG7nWkgeGEgeMawYeKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAixJBhbmcgdGjhu60gY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luICVz4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJLaMO0bmcgY8OzIGNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiBuw6BvIMSRxrDhu6NjIG7huq9tIGdp4buvIChoYW5kbGUpIHPhu7EgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJIw7JhIHRy4buZbiB24bubaSBjaGnhur9uIGzGsOG7o2MgJXMgZ+G6t3AgbOG7l2kuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJT4butIGThu6VuZyAlcyDEkeG7gyBjaHXhuqluIGLhu4sgZ2nhuqNpIHF1eeG6v3QgYuG6sW5nIHRheS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkjDsmEgdHLhu5luIHThu7EgxJHhu5luZyDEkcOjIHRy4bufIG7Dqm4gdOG7kXQ7IGLhu4sgZOG7q25nIHRyxrDhu5tjIGtoaSB2aeG7h2MgY2h1eeG7g24gZ2lhbyDEkcaw4bujYyB5w6p1ICIKKyJj4bqndVxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxs4bqnbl9jaHV54buDbl9naWFvPiA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM0Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM1Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8bOG6p25fY2h1eeG7g25fZ2lhbz4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+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+G7sSBxdeG6o24gbMO9IG3DoyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL212LmM6MjI3Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICLEkcOtY2ggxJHDoyB04buTbiB04bqhaSBz4bq1biBy4buTaSIKKworIzogYnVpbHRpbi9tdi5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICLEkWFuZyBnaGkgxJHDqCBsw6puIOKAnCVz4oCdIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSDEkcOoIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJuaGnhu4F1IG5ndeG7k24gY2hvIGPDuW5nIG3hu5l0IMSRw61jaCIKKworIzogYnVpbHRpbi9tdi5jOjI0MworbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAidGjGsCBt4bulYyDEkcOtY2gga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiBidWlsdGluL212LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywgbmd14buTbj0lcywgxJHDrWNoPSVzIgorCisjOiBidWlsdGluL212LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIsSQ4buVaSB0w6puICVzIHRow6BuaCAlc1xuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzE2IGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu5VpIHTDqm4g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDMKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8Y29tbWl0PuKApiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwNAorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8Y8OhYyB0w7l5IGNo4buNbj5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPGPDoWMgdMO5eSBjaOG7jW4+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDYyCittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgdMOqbiAoa2jDtG5nIFNIQS0xKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2MworbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAiY2jhu4kgZMO5bmcgY8OhYyB0aOG6uyDEkeG7gyDEkeG6t3QgdMOqbiBjaG8gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY1Cittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgImNo4buJIHPhu60gZOG7pW5nIGPDoWMgdGhhbSBjaGnhur91IGto4bubcCB24bubaSA8beG6q3U+IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJi4buPIHF1YSBjw6FjIHRoYW0gY2hp4bq/dSBraOG7m3AgduG7m2kgPG3huqt1PiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2OQorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIiIKKyJsaeG7h3Qga8OqIHThuqV0IGPhuqMgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGPDsyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MgdOG7qyB04bqldCBj4bqjIGPDoWMgdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDcwCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLEkeG7jWMgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDcxCittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJjaG8gcGjDqXAgaW4gY8OhYyB0w6puIOKAnGNoxrBhIMSR4buLbmggbmdoxKlh4oCdICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ3NworbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICJiw6NpIGLhu48gdGhhbSBjaGnhur91IGPDoWMgdGjhursgdHJvbmcgxJHhuqd1IHbDoG8gKGTDuW5nIG7hu5lpIGLhu5kpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+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+G7oSBi4buPLCBjaOG7iSBoaeG7g24gdGjhu4siCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NTUKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG5vdGVzIgorbXNnc3RyICJiw6FvIGPDoW8gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHDoyBwcnVuZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk5OAorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAibm90ZXMtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6OTk5Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgImTDuW5nIOKAnG5vdGVz4oCdIHThu6sgPG5vdGVzLXJlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgY8OidSBs4buHbmggY29uOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo1MgorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbY8OhYyB0w7l5IGNo4buNbuKApl0gWzwgPGRhbmgtc8OhY2gtdGhhbS1jaGnhur91PiB8IDwgIgorIjxkYW5oLXPDoWNoLcSR4buRaS10xrDhu6NuZz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFtjw6FjIHTDuXkgY2jhu41u4oCmXSA8YmFzZS1uYW1lPiBbPCA8ZGFuaC1zw6FjaC1yZWY+IHwgPCA8ZGFuaC0iCisic8OhY2gtxJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiCittc2dzdHIgIkNSQyBj4bunYSDEkeG7kWkgdMaw4bujbmcgZ8OzaSBzYWkgduG7m2kgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyDEkcOjIMSRw7NuZyBnw7NpIHNhaSBo4buPbmcgY2hvICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAiZMOyIHRo4bqleSBkZWx0YSDEkeG7hyBxdXkgY2hvIMSR4buRaSB0xrDhu6NuZyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3JkZXJlZCAldSBvYmplY3RzLCBleHBlY3RlZCAlPFBSSXUzMj4iCittc2dzdHIgIsSRw6Mgc+G6r3AgeOG6v3AgJXUgxJHhu5FpIHTGsOG7o25nLCBj4bqnbiAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIGlzIGludmFsaWQ6ICVzIgorbXNnc3RyICJ04bqtcCB0aW4gZ8OzaSBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIHThuq1wIHRpbiBnw7NpIMSR4buDIGTDuW5nIGzhuqFpOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MDIKK21zZ2lkICJ1bmFibGUgdG8gc2VlayBpbiByZXVzZWQgcGFja2ZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBkaSBjaHV54buDbiB24buLIHRyw60gxJHhu41jIHRyb25nIHThuq1wIHRpbiBnw7NpIGTDuW5nIGzhuqFpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgxMworbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHThu6sgdOG6rXAgdGluIGfDs2kgZMO5bmcgbOG6oWkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODQxCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAidOG6r3QgZ2hpIGJpdG1hcCwgY8OhYyBnw7NpIGLhu4sgY2hpYSBuaOG7jyBi4bufaSB2w6wgcGFjay5wYWNrU2l6ZUxpbWl0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjg1NAorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgZ2hpIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkxNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICLEkcOjIGdoaSAlPFBSSXUzMj4gxJHhu5FpIHTGsOG7o25nIHRyb25nIGtoaSBj4bqnbiAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTE2NAorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICJ04bqvdCBnaGkgYml0bWFwLCBuaMawIHbhuq15IG3hu5l0IHPhu5EgxJHhu5FpIHTGsOG7o25nIHPhur0ga2jDtG5nIMSRxrDhu6NjIMSRw7NuZyBnw7NpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgImtob+G6o25nIGLDuSBjxqEgc+G7nyBjaG8gZGVsdGEgYuG7iyB0csOgbiB0cm9uZyBnw7NpIGNobyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgImtob+G6o25nIGLDuSBjxqEgc+G7nyBjaG8gZGVsdGEgbuG6sW0gbmdvw6BpIHBo4bqhbSBjaG8gJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTg3MAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIMSR4bq/bSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IGvDrWNoIGPhu6EgY+G7p2EgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIHBo4bqnbiDEkeG6p3UgxJHhu5FpIHTGsOG7o25nIGPhu6dhIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTAxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIMSR4buRaSB0xrDhu6NuZyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIiIKKyLEkeG7kWkgdMaw4bujbmcgJXMga2jDtG5nIG5o4bqldCBxdcOhbiB24buBIGNoaeG7gXUgZMOgaSDEkeG7kWkgdMaw4bujbmcgKCU8UFJJdU1BWD4gc28gduG7m2kgIgorIiU8UFJJdU1BWD4pIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMjUKK21zZ2lkICJzdWJvcHRpbWFsIHBhY2sgLSBvdXQgb2YgbWVtb3J5IgorbXNnc3RyICJzdWJvcHRpbWFsIHBhY2sgLSBo4bq/dCBi4buZIG5o4bubIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcyIKK21zZ3N0ciAiTsOpbiBkZWx0YSBkw7luZyB04bubaSAlZCB0dXnhur9uIHRyw6xuaCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYWNrIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGFnICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHDs25nIGfDs2kgY8OhYyDEkeG7kWkgdMaw4bujbmcgdGnhur9wIGPhuq1uIMSRxrDhu6NjIHThu6sgdGjhursg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIG7DqW4gY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2NQorbXNnaWQgImluY29uc2lzdGVuY3kgd2l0aCBkZWx0YSBjb3VudCIKK21zZ3N0ciAibcOidSB0aHXhuqtuIHbhu5tpIHPhu5EgbMaw4bujbmcgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgZWRnZSBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorImPhuqduIElEIMSR4buRaSB0xrDhu6NuZyBj4bqhbmgsIG5o4bqtbiDEkcaw4bujYyByw6FjOlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorImPhuqduIElEIMSR4buRaSB0xrDhu6NuZywgbmjhuq1uIMSRxrDhu6NjIHLDoWM6XG4iCisiICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4NDYKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAtLW1pc3NpbmciCittc2dzdHIgImdpw6EgdHLhu4sgY2hvIC0tbWlzc2luZyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTA1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAxMworbXNnaWQgImNhbm5vdCBvcGVuIHBhY2sgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIG3hu6VjIGzhu6VjIGPhu6dhIGfDs2kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgbeG6pXQgdOG6oWkgJXMga2jDtG5nIHRo4buDIMSRw6Mga2nhu4NtIHRyYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMDIxCittc2dpZCAidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGJ14buZYyBt4bqldCDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZXYgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHBo4bqjaSBt4buZdCByZXYg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAixJFp4buDbSB4ZW0geMOpdCBzYWkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MQorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgImtow7RuZyB0aOG7gyB0aMOqbSBjw6FjIMSR4buRaSB0xrDhu6NuZyBt4bubaSBkw7luZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgInBoacOqbiBi4bqjbiBt4bulYyBs4bulYyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgInBoacOqbiBi4bqjbiBt4bulYyBs4bulYyBzYWkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNgorbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI8cGhpw6puIGLhuqNuPlssb2Zmc2V0XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM3Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAiZ2hpIHThuq1wIHRpbiBi4bqjbmcgbeG7pWMgbOG7pWMgZ8OzaSAocGFjaykg4bufIHBoacOqbiBi4bqjbiDEkeG7i25oIGThuqFuZyBpZHggxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgImtjw61oIHRoxrDhu5tjIHThu5FpIMSRYSBjaG8gdOG6rXAgdGluIGfDs2kgxJHGsOG7o2MgdOG6oW8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiYuG7jyBxdWEgY8OhYyDEkeG7kWkgdMaw4bujbmcgdmF5IG3GsOG7o24gdOG7qyBraG8gxJHhu5FpIHTGsOG7o25nIHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NAorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiYuG7jyBxdWEgY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHDs25nIGfDs2kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImdp4bubaSBo4bqhbiBj4butYSBz4buVIMSRw7NuZyBnw7NpIHRoZW8gxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDgKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICJnaeG7m2kgaOG6oW4gY+G7rWEgc+G7lSDEkcOzbmcgZ8OzaSB0aGVvIGLhu5kgbmjhu5sgY+G7mW5nIHRow6ptIHbhu5tpIGdp4bubaSBo4bqhbiDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1MAorbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICLEkeG7mSBkw6BpIHThu5FpIMSRYSBj4bunYSBjaHXhu5dpIG3Ds2MgeMOtY2gg4oCcZGVsdGHigJ0gxJHGsOG7o2MgcGjDqXAgdHJvbmcgZ8OzaSBr4bq/dCBxdeG6oyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUyCittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICJkw7luZyBs4bqhaSBjw6FjIGRlbHRhIHPhurVuIGPDsyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU0Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAiZMO5bmcgbOG6oWkgY8OhYyDEkeG7kWkgdMaw4bujbmcgc+G6tW4gY8OzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTYKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgImTDuW5nIGPDoWMgxJHhu5FpIHTGsOG7o25nIE9GU19ERUxUQSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU4Cittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAic+G7rSBk4bulbmcgY8OhYyB0dXnhur9uIHRyw6xuaCBraGkgdMOsbSBraeG6v20gY2hvIGPDoWMgbeG6q3Uga2jhu5twIGRlbHRhIHThu5F0IG5o4bqldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYwCittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGvhur90IHh14bqldCBnw7NpIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjIKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLEkeG7jWMgdGhhbSBz4buRIOKAnHJldmlzaW9u4oCdIHThu6sgdGhp4bq/dCBi4buLIG5o4bqtcCBjaHXhuqluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjQKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiZ2nhu5tpIGjhuqFuIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRow6BuaCBuaOG7r25nIGPDoWkgbcOgIGNow7puZyB24bqrbiBjaMawYSDEkcaw4bujYyDEkcOzbmcgZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIMSR4buRaSB0xrDhu6NuZyBjw7MgdGjhu4MgxJHhu41jIMSRxrDhu6NjIHThu6sgYuG6pXQga+G7syB0aGFtIGNoaeG6v3UgbsOgbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgdGhhbSBjaGnhur91IGLhu59pIGPDoWMgbeG7pWMgcmVmbG9nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzMKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgdGhhbSBjaGnhur91IGLhu59pIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzYKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgInh14bqldCBnw7NpIHJhIMSR4bqndSByYSB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzgKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIMSR4buRaSB0xrDhu6NuZyB0aGFtIGNoaeG6v3UgxJHhur9uIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIMSRw7NuZyBnw7NpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImdp4buvIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MgorbXNnaWQgInBhY2sgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAicGFjayBt4bqldCBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODQKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiIgorInjhuqMgbsOpbiAoZ+G7oSBraOG7j2kgZ8OzaSkgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIHRo4buDIMSR4buNYyDEkcaw4bujYyBt4bubaSBoxqFuIDx0aOG7nWktZ2lhbj4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NworbXNnaWQgInVzZSB0aGUgc3BhcnNlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0iCittc2dzdHIgInPhu60gZOG7pW5nIHRodeG6rXQgdG/DoW4g4oCcc3BhcnNlIHJlYWNoYWJpbGl0eeKAnSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg5Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgInThuqFvIGfDs2kgbmjhurkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICJ04bqhbyBnw7NpIMSR4buDIHBow7kgaOG7o3AgY2hvIGzhuqV5IHbhu4EgbsO0bmcgKHNoYWxsb3cpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTMKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICJi4buPIHF1YSBjw6FjIGfDs2kgbcOgIG7DsyBjw7MgdOG6rXAgdGluIC5rZWVwIMSRaSBrw6htIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTUKK21zZ2lkICJpZ25vcmUgdGhpcyBwYWNrIgorbXNnc3RyICJi4buPIHF1YSBnw7NpIG7DoHkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NworbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIm3hu6ljIG7DqW4gZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk5Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgImtow7RuZyDhuqluIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBi4bufaSDigJxncmFmdHPigJ0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwMQorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiZMO5bmcgbeG7pWMgbOG7pWMgw6FuaCB44bqhIG7hur91IGPDsyB0aOG7gyDEkcaw4bujYyDEkeG7gyBuw6JuZyBjYW8gdOG7kWMgxJHhu5kgxJHhur9tIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAzCittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAiZ2hpIG3hu5l0IG3hu6VjIGzhu6VjIMOhbmggeOG6oSBjw7luZyB24bubaSBt4bulYyBs4bulYyBnw7NpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDcKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiZ2hpIG3hu6VjIGzhu6VjIMOhbmggeOG6oSBu4bq/dSDEkcaw4bujYyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzExCittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAieOG7rSBsw70gY2hvIHRoaeG6v3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTQKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw7NuZyBnw7NpIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRyb25nIGPDoWMgdOG6rXAgdGluIGfDs2kgaOG7qWEgaOG6uW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNgorbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgInTDtG4gdHLhu41uZyBpc2xhbmQgdHJvbmcgc3Xhu5F0IHF1w6EgdHLDrG5oIG7DqW4g4oCcZGVsdGHigJ0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBjaGFpbiBkZXB0aCAlZCBpcyB0b28gZGVlcCwgZm9yY2luZyAlZCIKK21zZ3N0ciAibeG7qWMgc2F1IHjDrWNoIGRlbHRhICVkIGzDoCBxdcOhIHPDonUsIGJ14buZYyBkw7luZyAlZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2suZGVsdGFDYWNoZUxpbWl0IGlzIHRvbyBoaWdoLCBmb3JjaW5nICVkIgorbXNnc3RyICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBsw6AgcXXDoSBjYW8sIMOpcCBkw7luZyAlZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA0Cittc2dpZCAiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIiCittc2dzdHIgIiIKKyItLW1heC1wYWNrLXNpemUga2jDtG5nIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHjDonkgZOG7sW5nIG3hu5l0IGfDs2kgxJHhu4MgduG6rW4gY2h1eeG7g24iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNgorbXNnaWQgIm1pbmltdW0gcGFjayBzaXplIGxpbWl0IGlzIDEgTWlCIgorbXNnc3RyICJnaeG7m2kgaOG6oW4ga8OtY2ggdGjGsOG7m2MgdOG7kWkgdGhp4buDdSBj4bunYSBnw7NpIGzDoCAxIE1pQiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICItLXRoaW4ga2jDtG5nIHRo4buDIMSRxrDhu6NjIGTDuW5nIMSR4buDIHjDonkgZOG7sW5nIGfDs2kgxJHDoW5oIG3hu6VjIGzhu6VjIMSRxrDhu6NjIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSB2w6AgLS11bnBhY2stdW5yZWFjaGFibGUgeHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDIwCittc2dpZCAiY2Fubm90IHVzZSAtLWZpbHRlciB3aXRob3V0IC0tc3Rkb3V0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgZMO5bmcgdMO5eSBjaOG7jW4gLS1maWx0ZXIgbcOgIGtow7RuZyBjw7MgLS1zdGRvdXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ4MQorbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIsSQw6FuaCBz4buRIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG90YWwgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCByZXVzZWQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pIgorbXNnc3RyICJU4buVbmcgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCBkw7luZyBs4bqhaSAlPFBSSXUzMj4gKGRlbHRhICU8UFJJdTMyPikiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzxjw6FjIHTDuXkgY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgIsSRw7NuZyBnw7NpIG3hu41pIHRo4bupIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgInBydW5lIChj4bqvdCBj4buldCkgbmjhu69uZyB0aGFtIGNoaeG6v3UgYuG7iyBt4bqldCAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6OQorbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQyCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIGfhu6EgY8OhYyDEkeG7kWkgdMaw4bujbmcgdHLDuW5nIGzhurdwIgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRo4budaS1naWFuPl0gWy0tXSBbPGhlYWQ+4oCmXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzMQorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiYsOhbyBjw6FvIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRw6MgcHJ1bmUiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiY8OhYyDEkeG7kWkgdMaw4bujbmcgaOG6v3QgaOG6oW4gY8WpIGjGoW4ga2hv4bqjbmcgPHRo4budaSBnaWFuPiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNgorbXNnaWQgImxpbWl0IHRyYXZlcnNhbCB0byBvYmplY3RzIG91dHNpZGUgcHJvbWlzb3IgcGFja2ZpbGVzIgorbXNnc3RyICJnaeG7m2kgaOG6oW4gZ2lhbyDEkeG6v24gY8OhYyDEkeG7kWkgdMaw4bujbmcgbuG6sW0gbmdvw6BpIGPDoWMgdOG6rXAgdGluIGfDs2kgaOG7qWEgaOG6uW4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgImtow7RuZyB0aOG7gyB04buJYSBi4bubdCB0cm9uZyBt4buZdCBraG8gxJHhu5FpX3TGsOG7o25nX3bEqV/EkeG6oWkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY2IGJ1aWx0aW4vcHVsbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiR2nDoSB0cuG7iyBraMO0bmcgaOG7o3AgbOG7hyAlczogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4Cittc2dpZCAiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdWxsIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8a2hvLWNo4bupYT4gWzxyZWZzcGVjPuKApl1dIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDIKK21zZ2lkICJjb250cm9sIGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAixJFp4buBdSBraGnhu4NuIHZp4buHYyBs4bqleSB24buBIMSR4buHIHF1eSBj4bunYSBjw6FjIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gbGnDqm4gcXVhbiDEkeG6v24gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0OQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiY8OhYyB0aGF5IMSR4buVaSBo4bujcCBuaOG6pXQgYuG6sW5nIGPhuqNpIHThu5UgdGhheSB2w6wgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NyBidWlsdGluL3JlYmFzZS5jOjQ2NyBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiY2hvIHBow6lwIGNodXnhu4NuLXRp4bq/cC1uaGFuaCIKKworIzogYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgInThu7EgxJHhu5luZyBzdGFzaC9zdGFzaCBwb3AgdMaw4bubYyB2w6Agc2F1IHR1IGLhu5UgKHJlYmFzZSkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIwMgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiBsacOqbiBxdWFuIMSR4bq/biBs4buHbmggbOG6pXkgduG7gSIKKworIzogYnVpbHRpbi9wdWxsLmM6MjEyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiw6lwIGJ14buZYyBnaGkgxJHDqCBsw6puIG5ow6FuaCBu4buZaSBi4buZIgorCisjOiBidWlsdGluL3B1bGwuYzoyMjAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgInPhu5EgbMaw4bujbmcgbcO0LcSRdW4tY29uIMSRxrDhu6NjIMSR4bqpeSBsw6puIMSR4buTbmcgdGjhu51pIgorCisjOiBidWlsdGluL3B1bGwuYzozMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIkdpw6EgdHLhu4sga2jDtG5nIGjhu6NwIGzhu4cgY2hvIHB1bGwuZmY6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzcKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICIiCisi4bueIMSRw6J5IGtow7RuZyBjw7Mg4bupbmcgY+G7rSBuw6BvIMSR4buDIGPhuqNpIHThu5UgbOG6oWkgdHJvbmcgc+G7kSBjw6FjIHRoYW0gY2hp4bq/dSBtw6AgYuG6oW4gduG7q2EgIgorImzhuqV5IHbhu4EuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzkKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIuG7niDEkcOieSBraMO0bmcgY8OzIOG7qW5nIGPhu60gbsOgbyDEkeG7gyBow7JhIHRy4buZbiB0cm9uZyBz4buRIGPDoWMgdGhhbSBjaGnhur91IG3DoCBi4bqhbiB24burYSBs4bqleSAiCisiduG7gS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MAorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyLEkOG6oWkgdGjhu4MgxJFp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgIGLhuqFuIMSRw6MgY3VuZyBj4bqlcCDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24gZOG6oW5nIGTDuW5nIGvDvSAiCisidOG7sVxuIgorIsSR4bqhaSBkaeG7h24gbcOgIG7DsyBs4bqhaSBraMO0bmcga2jhu5twIHRyw6puIMSRaeG7g20gY3Xhu5FpIG3DoXkgcGjhu6VjIHbhu6UuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorIkLhuqFuIHnDqnUgY+G6p3UgcHVsbCB04burIG3DoXkgZOG7i2NoIHbhu6Ug4oCcJXPigJ0sIG5oxrBuZyBs4bqhaSBjaMawYSBjaOG7iSDEkeG7i25oXG4iCisibmjDoW5oIG7DoG8uIELhu59pIHbDrCDEkcOieSBraMO0bmcgcGjhuqNpIGzDoCBtw6F5IGThu4tjaCB24bulIMSRxrDhu6NjIGPhuqV1IGjDrG5oXG4iCisidGhlbyBt4bq3YyDEkeG7i25oIGNobyBuaMOhbmggaGnhu4duIHThuqFpIGPhu6dhIGLhuqFuLCBi4bqhbiBwaOG6o2kgY2jhu4kgxJHhu4tuaFxuIgorIm3hu5l0IG5ow6FuaCB0csOqbiBkw7JuZyBs4buHbmguIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDggYnVpbHRpbi9yZWJhc2UuYzoxMzc1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICJIaeG7h24gdOG6oWkgYuG6oW4gY2jhurNuZyDhu58gbmjDoW5oIG7DoG8gY+G6oy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlZ1aSBsw7JuZyBjaOG7iSDEkeG7i25oIG5ow6FuaCBuw6BvIGLhuqFuIG114buRbiBj4bqjaSB04buVIGzhuqFpLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcHVsbC5jOjQ2NyBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICJWdWkgbMOybmcgY2jhu4kgxJHhu4tuaCBuaMOhbmggbsOgbyBi4bqhbiBtdeG7kW4gaMOyYSB0cuG7mW4gdsOgby4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MyBidWlsdGluL3B1bGwuYzo0NjgKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJYZW0gZ2l0LXB1bGwoMSkgxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTUgYnVpbHRpbi9wdWxsLmM6NDYxIGJ1aWx0aW4vcHVsbC5jOjQ3MAorIzogYnVpbHRpbi9yZWJhc2UuYzoxMzgxIGdpdC1wYXJzZS1yZW1vdGUuc2g6NjQKK21zZ2lkICI8cmVtb3RlPiIKK21zZ3N0ciAiPG3DoXkgY2jhu6c+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NTUgYnVpbHRpbi9wdWxsLmM6NDcwIGJ1aWx0aW4vcHVsbC5jOjQ3NQorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI8bmjDoW5oPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYzIGJ1aWx0aW4vcmViYXNlLmM6MTM3MyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuG7niDEkcOieSBraMO0bmcgY8OzIHRow7RuZyB0aW4gdGhlbyBkw7VpIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDcyIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICIiCisiTuG6v3UgYuG6oW4gbXXhu5FuIHRoZW8gZMO1aSB0aMO0bmcgdGluIGNobyBuaMOhbmggbsOgeSBi4bqhbiBjw7MgdGjhu4MgdGjhu7FjIGhp4buHbiBi4bqxbmcgbOG7h25oOiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorbXNnc3RyICIiCisiQ8OhYyDEkeG6t2MgdOG6oyBj4bqldSBow6xuaCBj4bunYSBi4bqhbiDEkeG7gyBow7JhIHRy4buZbiB24bubaSB0aGFtIGNoaeG6v3Ug4oCcJXPigJ1cbiIKKyJ04burIG3DoXkgZOG7i2NoIHbhu6UsIG5oxrBuZyBraMO0bmcgY8OzIG5ow6FuaCBuw6BvIG5oxrAgdGjhur8gxJHGsOG7o2MgbOG6pXkgduG7gS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIGNvbW1pdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRydXkgY+G6rXAgbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9wdWxsLmM6ODY3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICJi4buPIHF1YSAtLXZlcmlmeS1zaWduYXR1cmVzIGtoaSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgInTDuXkgY2jhu41uIC0tW25vLV1hdXRvc3Rhc2ggY2jhu4kgaOG7o3AgbOG7hyBraGkgZMO5bmcgduG7m2kgLS1yZWJhc2UuIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICIiCisixJBhbmcgY+G6rXAgbmjhuq10IG3hu5l0IG5ow6FuaCBjaMawYSDEkcaw4bujYyBzaW5oIHJhIHbhu5tpIGPDoWMgdGhheSDEkeG7lWkgxJHGsOG7o2MgdGjDqm0gdsOgbyAiCisiYuG6o25nIG3hu6VjIGzhu6VjLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTM0Cittc2dpZCAicHVsbCB3aXRoIHJlYmFzZSIKK21zZ3N0ciAicHVsbCB24bubaSByZWJhc2UiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgInhpbiBow6N5IGNodXnhu4NuIGdpYW8gaG/hurdjIHThuqFtIGPhuqV0IChzdGFzaCkgY2jDum5nLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorImZldGNoIMSRw6MgY+G6rXAgbmjhuq10IGhlYWQgbmjDoW5oIGhp4buHbiB04bqhaS5cbiIKKyLEkWFuZyBjaHV54buDbi10aeG6v3AtbmhhbmggY8OieSBsw6BtIHZp4buHYyBj4bunYSBi4bqhbiB04burXG4iCisibOG6p24gY2h1eeG7g24gZ2lhb3QgJXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGNodXnhu4NuIHRp4bq/cCBuaGFuaCBjw6J5IGzDoG0gdmnhu4djIGPhu6dhIGLhuqFuLlxuIgorIlNhdSBraGkgY2jhuq9jIGNo4bqvbiBy4bqxbmcgbcOsbmggxJHDoyBnaGkgbOG6oWkgbeG7jWkgdGjhu6lcbiIKKyJxdcO9IGLDoXUgdOG7qyBr4bq/dCB4deG6pXQgY+G7p2EgbOG7h25oXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorImNo4bqheVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorIsSR4buDIGtow7RpIHBo4bulYyBs4bqhaS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk4MQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgaMOyYSB0cuG7mW4gbmhp4buBdSBuaMOhbmggdsOgbyB0cm9uZyBt4buZdCBoZWFkIHRy4buRbmcgcuG7l25nLiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTg1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbOG7h25oIHJlYmFzZSAoY+G6o2kgdOG7lSkgdHLDqm4gbmhp4buBdSBuaMOhbmguIgorCisjOiBidWlsdGluL3B1bGwuYzo5OTIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBj4bqjaSB04buVIHbhu5tpIGPDoWMgdGhheSDEkeG7lWkgbcO0LcSRdW4tY29uIMSRxrDhu6NjIGdoaSBs4bqhaSBt4buZdCBjw6FjaCBj4bulYyBi4buZIgorCisjOiBidWlsdGluL3B1c2guYzoxOQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPGPDoWMgdMO5eSBjaOG7jW4+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+XSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozNgorbXNnaWQgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKK21zZ3N0ciAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHwgLS1hYm9ydCB8IC0tc2tpcCB8IC0tZWRpdC10b2RvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3NyBidWlsdGluL3JlYmFzZS5jOjIwMSBidWlsdGluL3JlYmFzZS5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSB0b2RvIGxpc3Q6ICclcyciCittc2dzdHIgImRhbmggc8OhY2ggY+G6p24gbMOgbSBraMO0bmcgZMO5bmcgxJHGsOG7o2M6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NiBidWlsdGluL3JlYmFzZS5jOjIxMiBidWlsdGluL3JlYmFzZS5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkg4oCcJXPigJ0uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI3MQorbXNnaWQgIm5vIEhFQUQ/IgorbXNnc3RyICJraMO0bmcgSEVBRD8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gJXMgdOG6oW0gdGjhu51pIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMwNAorbXNnaWQgImNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHDoW5oIGThuqV1IGzDoCB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYyCittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIHRvZG8gbGlzdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGRhbmggc8OhY2ggY+G6p24gbMOgbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0MDIKK21zZ2lkICJhIGJhc2UgY29tbWl0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCAtLXVwc3RyZWFtIG9yIC0tb250byIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyBjxqEgc+G7jyBwaOG6o2kgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaCB24bubaSAtLXVwc3RyZWFtIGhv4bq3YyAtLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ2OQorbXNnaWQgImtlZXAgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiZ2nhu68gbOG6oWkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHLhu5duZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzEgYnVpbHRpbi9yZXZlcnQuYzoxMjgKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImNo4bqlcCBuaOG6rW4gY2h1eeG7g24gZ2lhbyBtw6Aga2jDtG5nIGdoaSBjaMO6IGfDrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzIKK21zZ2lkICJyZWJhc2UgbWVyZ2UgY29tbWl0cyIKK21zZ3N0ciAiY+G6o2kgdOG7lSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc0Cittc2dpZCAia2VlcCBvcmlnaW5hbCBicmFuY2ggcG9pbnRzIG9mIGNvdXNpbnMiCittc2dzdHIgImdp4buvIGPDoWMgxJFp4buDbSBuaMOhbmggbmd1ecOqbiBi4bqjbiBj4bunYSBjw6FjIGFuaCBlbSBo4buNIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NgorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgImRpIGNodXnhu4NuIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBi4bqvdCDEkeG6p3UgYuG6sW5nIHNxdWFzaCEvZml4dXAhIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NworbXNnaWQgInNpZ24gY29tbWl0cyIKK21zZ3N0ciAia8O9IGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzkgYnVpbHRpbi9yZWJhc2UuYzoxNDU1Cittc2dpZCAiZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG3hu5l0IGRpZmZzdGF0IGPhu6dhIG5o4buvbmcgdGhheSDEkeG7lWkgdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDgxCittc2dpZCAiY29udGludWUgcmViYXNlIgorbXNnc3RyICJ0aeG6v3AgdOG7pWMgY+G6o2kgdOG7lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODMKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAiYuG7jyBxdWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODQKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QiCittc2dzdHIgInPhu61hIGRhbmggc8OhY2ggY+G6p24gbMOgbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODYKK21zZ2lkICJzaG93IHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbWnhur9uZyB2w6EgaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4OQorbXNnaWQgInNob3J0ZW4gY29tbWl0IGlkcyBpbiB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJyw7p0IG5n4bqvbiBtw6MgY2h1eeG7g24gZ2lhbyB0cm9uZyBkYW5oIHPDoWNoIGPhuqduIGzDoG0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDkxCittc2dpZCAiZXhwYW5kIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAia2hhaSB0cmnhu4NuIG3DoyBjaHV54buDbiBnaWFvIHRyb25nIGRhbmggc8OhY2ggY+G6p24gbMOgbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTMKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICJraeG7g20gdHJhIGRhbmggc8OhY2ggY+G6p24gbMOgbSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTUKK21zZ2lkICJyZWFycmFuZ2UgZml4dXAvc3F1YXNoIGxpbmVzIgorbXNnc3RyICJz4bqvcCB44bq/cCBs4bqhaSBjw6FjIGTDsm5nIGZpeHVwL3NxdWFzaCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTcKK21zZ2lkICJpbnNlcnQgZXhlYyBjb21tYW5kcyBpbiB0b2RvIGxpc3QiCittc2dzdHIgImNow6huIGPDoWMgbOG7h25oIHRo4buxYyB0aGkgdHJvbmcgZGFuaCBzw6FjaCBj4bqnbiBsw6BtIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5OAorbXNnaWQgIm9udG8iCittc2dzdHIgImzDqm4gdHLDqm4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QtcmV2aXNpb24iCittc2dzdHIgIsSRaeG7g20teMOpdC1kdXnhu4d0LWjhuqFuLWNo4bq/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwMQorbXNnaWQgInJlc3RyaWN0IHJldmlzaW9uIgorbXNnc3RyICLEkWnhu4NtIHjDqXQgZHV54buHdCBo4bqhbiBjaOG6vyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLWzDqm4tdHLDqm4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInNxdWFzaCBsw6puIHRyw6puIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA4Cittc2dpZCAiaGVhZC1uYW1lIgorbXNnc3RyICJ0w6puLcSR4bqndSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgInTDqm4gxJHhuqd1IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMworbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIGPhuqNpIHThu5UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE0Cittc2dpZCAic3RyYXRlZ3ktb3B0cyIKK21zZ3N0ciAidMO5eS1jaOG7jW4tY2hp4bq/bi1sxrDhu6NjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNQorbXNnaWQgInN0cmF0ZWd5IG9wdGlvbnMiCittc2dzdHIgImPDoWMgdMO5eSBjaOG7jW4gY2hp4bq/biBsxrDhu6NjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNgorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAiY2h1eeG7g24txJHhur9uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNworbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICJuaMOhbmggaGF5IGzhuqduIGNodXnhu4NuIGdpYW8gbOG6p24gbOG6pXkgcmEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4Cittc2dpZCAib250by1uYW1lIgorbXNnc3RyICJvbnRvLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJ0w6puIGzDqm4gdHLDqm4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAiY21kIgorbXNnc3RyICJs4buHbmgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICJs4buHbmggbXXhu5FuIGNo4bqheSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MjIgYnVpbHRpbi9yZWJhc2UuYzoxNTQwCittc2dpZCAiYXV0b21hdGljYWxseSByZS1zY2hlZHVsZSBhbnkgYGV4ZWNgIHRoYXQgZmFpbHMiCittc2dzdHIgImzhuq1wIGzhu4tjaCBs4bqhaSBt4buZdCBjw6FjaCB04buxIMSR4buZbmcgYuG6pXQga+G7syDigJxleGVj4oCcIGLhu4sgbOG7l2kiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTQwCittc2dpZCAiLS1bbm8tXXJlYmFzZS1jb3VzaW5zIGhhcyBubyBlZmZlY3Qgd2l0aG91dCAtLXJlYmFzZS1tZXJnZXMiCittc2dzdHIgIi0tW25vLV1yZWJhc2UtY291c2lucyBraMO0bmcgY8OzIHTDoWMgZOG7pW5nIGtoaSBraMO0bmcgY8OzIC0tcmViYXNlLW1lcmdlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICIlcyBj4bqnbiBt4buZdCBj4bqjaSB04buVIGtp4buDdSB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgJ29udG8nOiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhurd0IGzhuqV5IOKAnG9udG/igJ06IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yaWctaGVhZDogJyVzJyIKK21zZ3N0ciAib3JpZy1oZWFkIGtow7RuZyBo4bujcCBs4buHOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgaW52YWxpZCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTogJyVzJyIKK21zZ3N0ciAixJFhbmcgYuG7jyBxdWEgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBsxrB1IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjg0OQorbXNnaWQgImNvdWxkIG5vdCBkZXRlcm1pbmUgSEVBRCByZXZpc2lvbiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGTDsiB0w6xtIMSRaeG7g20geMOpdCBkdXnhu4d0IEhFQUQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6OTcyIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MQorbXNnaWQgIiIKKyJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHksIG1hcmsgdGhlbSBhcyByZXNvbHZlZCB3aXRoXG4iCisiXCJnaXQgYWRkL3JtIDxjb25mbGljdGVkX2ZpbGVzPlwiLCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIllvdSBjYW4gaW5zdGVhZCBza2lwIHRoaXMgY29tbWl0OiBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIlRvIGFib3J0IGFuZCBnZXQgYmFjayB0byB0aGUgc3RhdGUgYmVmb3JlIFwiZ2l0IHJlYmFzZVwiLCBydW4gXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorbXNnc3RyICIiCisiR2nhuqNpIHF1eeG6v3QgduG6pW4gxJHhu4EgbsOgeSB0aOG7pyBjw7RuZywgaMOjeSDEkWFuaCBk4bqldSBjaMO6bmcgxJHDoyDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCBi4bqxbmdcbiIKKyJow6N5IGNo4bqheSBs4buHbmggXCJnaXQgYWRkL3JtIDxjw6FjX3Thuq1wX3Rpbl94dW5nX8SR4buZdD5cIiwgc2F1IMSRw7MgY2jhuqF5IFwiZ2l0ICIKKyJyZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIkLhuqFuIGPDsyB0aOG7gyBi4buPIHF1YSBtaeG6v25nIHbDoSwgY2jhuqF5IFwiZ2l0IHJlYmFzZSAtLXNraXBcIi5cbiIKKyLEkOG7gyBiw6NpIGLhu48gdsOgIHF1YXkgdHLhu58gbOG6oWkgdHLhuqFuZyB0aMOhaSB0csaw4bubYyBcImdpdCByZWJhc2VcIiwgY2jhuqF5IFwiZ2l0IHJlYmFzZSAiCisiLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheVxuIgorInRoZXNlIHJldmlzaW9uczpcbiIKKyJcbiIKKyIgICAgJXNcbiIKKyJcbiIKKyJBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4iCittc2dzdHIgIiIKKyJcbiIKKyJnaXQgY2jhuqFtIHRyw6FuIG3hu5l0IGzhu5dpIHRyb25nIGtoaSDEkWFuZyBjaHXhuqluIGLhu4sgY8OhYyBtaeG6v25nIHbDoSDEkeG7gyBkaeG7hW4gbOG6oWlcbiIKKyJuaOG7r25nIMSRaeG7g20geMOpdCBkdXnhu4d0IG7DoHk6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiS+G6v3QgcXXhuqMgbMOgIGdpdCBraMO0bmcgdGjhu4MgY+G6o2kgdOG7lSBs4bqhaSBjaMO6bmcuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisiVnVpIGzDsm5nIGNo4buJIMSR4buLbmggbmjDoW5oIG7DoG8gYuG6oW4gbXXhu5FuIGPhuqNpIHThu5UgZOG7sWEgdsOgby5cbiIKKyJYZW0gZ2l0LXJlYmFzZSgxKSDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC5cbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSDigJw8bmjDoW5oPuKAnVxuIgorIlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJO4bq/dSBi4bqhbiBtdeG7kW4gdGhlbyBkw7VpIHRow7RuZyB0aW4gY2hvIG5ow6FuaCBuw6B5IGLhuqFuIGPDsyB0aOG7gyB0aOG7sWMgaGnhu4duIGLhurFuZyAiCisibOG7h25oOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxuaMOhbmg+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxMworbXNnaWQgImV4ZWMgY29tbWFuZHMgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgImPDoWMgbOG7h25oIHRo4buxYyB0aGkga2jDtG5nIHRo4buDIGNo4bupYSBjw6FjIGvDvSB04buxIGTDsm5nIG3hu5tpIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgImzhu4duaCB0aOG7sWMgdGhpIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NDYKK21zZ2lkICJyZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbSIKK21zZ3N0ciAiY+G6o2kgdOG7lSB2w6BvIG5ow6FuaCDEkcOjIGNobyB0aGF5IGNobyB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ4Cittc2dpZCAidXNlIHRoZSBtZXJnZS1iYXNlIG9mIHVwc3RyZWFtIGFuZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQgYmFzZSIKK21zZ3N0ciAiIgorInPhu60gZOG7pW5nIGPDoWMgY8ahIHPhu58gaMOyYSB0cuG7mW4gY+G7p2EgdGjGsOG7o25nIG5ndeG7k24gdsOgIG5ow6FuaCBuaMawIGzDoCBjxqEgc+G7nyBoaeG7h24gdOG6oWkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MAorbXNnaWQgImFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4iCittc2dzdHIgImNobyBwaMOpcCBtw7NjIChob29rKSBwcmUtcmViYXNlIMSRxrDhu6NjIGNo4bqheSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDUyCittc2dpZCAiYmUgcXVpZXQuIGltcGxpZXMgLS1uby1zdGF0IgorbXNnc3RyICJow6N5IGltIGzhurduZy4gw70gbMOgIC0tbm8tc3RhdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDU4Cittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICLEkeG7q25nIGhp4buDbiB0aOG7iyBkaWZmc3RhdCBj4bunYSBuaOG7r25nIHRoYXkgxJHhu5VpIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjEKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5OiBsaW5lIHRvIGVhY2ggY29tbWl0IgorbXNnc3RyICJ0aMOqbSBkw7JuZyBTaWduZWQtb2ZmLWJ5OiBjaG8gdOG7q25nIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NAorbXNnaWQgIm1ha2UgY29tbWl0dGVyIGRhdGUgbWF0Y2ggYXV0aG9yIGRhdGUiCittc2dzdHIgImzDoG0gbmfDoHkgdGjDoW5nIGNodXnhu4NuIGdpYW8ga2jhu5twIHbhu5tpIG5nw6B5IGPhu6dhIHTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NgorbXNnaWQgImlnbm9yZSBhdXRob3IgZGF0ZSBhbmQgdXNlIGN1cnJlbnQgZGF0ZSIKK21zZ3N0ciAiYuG7jyBxdWEgbmfDoHkgdMOhYyBnaeG6oyB2w6Agc+G7rSBk4bulbmcgbmfDoHkgdGjDoW5nIGhp4buHbiB04bqhaSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY4Cittc2dpZCAic3lub255bSBvZiAtLXJlc2V0LWF1dGhvci1kYXRlIgorbXNnc3RyICLEkeG7k25nIG5naMSpYSB24bubaSAtLXJlc2V0LWF1dGhvci1kYXRlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzAgYnVpbHRpbi9yZWJhc2UuYzoxNDc0Cittc2dpZCAicGFzc2VkIHRvICdnaXQgYXBwbHknIgorbXNnc3RyICJjaHV54buDbiBjaG8g4oCcZ2l0IGFwcGx54oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzIKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIgorbXNnc3RyICJs4budIMSRaSBz4buxIHRoYXkgxJHhu5VpIGRvIGtob+G6o25nIHRy4bqvbmcgZ8OieSByYSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDc2IGJ1aWx0aW4vcmViYXNlLmM6MTQ3OQorbXNnaWQgImNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZCIKK21zZ3N0ciAiIgorImNoZXJyeS1waWNrIHThuqV0IGPhuqMgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvLCBuZ2F5IGPhuqMga2hpIGtow7RuZyBjw7MgdGhheSDEkeG7lWkgZ8OsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODEKK21zZ2lkICJjb250aW51ZSIKK21zZ3N0ciAidGnhur9wIHThu6VjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODQKK21zZ2lkICJza2lwIGN1cnJlbnQgcGF0Y2ggYW5kIGNvbnRpbnVlIgorbXNnc3RyICJi4buPIHF1YSBtaeG6v25nIHbDoSBoaeG7h24gaMOgbmggdsOgIHRp4bq/cCB04bulYyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg2Cittc2dpZCAiYWJvcnQgYW5kIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIgorbXNnc3RyICJiw6NpIGLhu48gdsOgIGzhuqV5IHJhIG5ow6FuaCBuZ3V5w6puIHRo4buneSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg5Cittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAiYsOjaSBi4buPIG5oxrBuZyB24bqrbiB24bqrbiBnaeG7ryBIRUFEIGNo4buJIMSR4bq/biBuw7MiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCBkdXJpbmcgYW4gaW50ZXJhY3RpdmUgcmViYXNlIgorbXNnc3RyICJz4butYSBkYW5oIHPDoWNoIGPhuqduIGzDoG0gdHJvbmcgcXXDoSB0csOsbmgg4oCccmViYXNl4oCdIChj4bqjaSB04buVKSB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5MworbXNnaWQgInNob3cgdGhlIHBhdGNoIGZpbGUgYmVpbmcgYXBwbGllZCBvciBtZXJnZWQiCittc2dzdHIgImhp4buDbiB0aOG7iyBtaeG6v25nIHbDoSDEkcOjIMSRxrDhu6NjIMOhcCBk4bulbmcgaGF5IGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTYKK21zZ2lkICJ1c2UgbWVyZ2luZyBzdHJhdGVnaWVzIHRvIHJlYmFzZSIKK21zZ3N0ciAiZMO5bmcgY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIMSR4buDIGPhuqNpIHThu5UiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwMAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICLEkeG7gyBuZ8aw4budaSBkw7luZyBz4butYSBkYW5oIHPDoWNoIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBtdeG7kW4gY+G6o2kgdOG7lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTA0Cittc2dpZCAiKERFUFJFQ0FURUQpIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtIgorbXNnc3RyICIoxJDDgyBM4bqgQyBI4bqsVSkgaGF5IHRo4butIHThuqFvIGzhuqFpIGPDoWMgaMOyYSB0cuG7mW4gdGhheSB2w6wgYuG7jyBxdWEgY2jDum5nIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDkKK21zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCittc2dzdHIgIm5nxINuIGPhuqVtIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyB0cuG7kW5nIHLhu5duZyB0cm9uZyBzdeG7kXQgcXXDoSB0csOsbmggY+G6o2kgdOG7lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTExCittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAiZGkgY2h1eeG7g24gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIG3DoCBi4bqvdCDEkeG6p3UgYuG6sW5nIHNxdWFzaCEvZml4dXAhIGTGsOG7m2kgLWkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNworbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgInThu7EgxJHhu5luZyBzdGFzaC9zdGFzaCBwb3AgdHLGsOG7m2MgdsOgIHNhdSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE5Cittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgInRow6ptIGPDoWMgZMOybmcgdGjhu7FjIHRoaSBzYXUgdOG7q25nIGzhuqduIGNodXnhu4NuIGdpYW8gY+G7p2EgZGFuaCBzw6FjaCBz4butYSDEkcaw4bujYyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTIzCittc2dpZCAiYWxsb3cgcmViYXNpbmcgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICJjaOG6pXAgbmjhuq1uIGPhuqNpIHThu5UgY8OhYyBjaHV54buDbiBnaWFvIG3DoCBraMO0bmcgZ2hpIGNow7ogZ8OsIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjYKK21zZ2lkICJ0cnkgdG8gcmViYXNlIG1lcmdlcyBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZW0iCittc2dzdHIgImPhu5EgdGjhu60gY+G6o2kgdOG7lSBjw6FjIGjDsmEgdHLhu5luIHRoYXkgdsOsIGLhu48gcXVhIGNow7puZyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI5Cittc2dpZCAidXNlICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcgdG8gcmVmaW5lIHVwc3RyZWFtIgorbXNnc3RyICJkw7luZyDigJxtZXJnZS1iYXNlIC0tZm9yay1wb2ludOKAnSDEkeG7gyDEkeG7i25oIG5naMSpYSBs4bqhaSB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTMxCittc2dpZCAidXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiZMO5bmcgY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIMSRw6MgY2hvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzMgYnVpbHRpbi9yZXZlcnQuYzoxMTUKK21zZ2lkICJvcHRpb24iCittc2dzdHIgInTDuXkgY2jhu41uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiY2h1eeG7g24gdGhhbyBz4buRIMSR4bq/biBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzNworbXNnaWQgInJlYmFzZSBhbGwgcmVhY2hhYmxlIGNvbW1pdHMgdXAgdG8gdGhlIHJvb3QocykiCittc2dzdHIgImPhuqNpIHThu5UgdOG6pXQgY8OhYyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gY2hvIMSR4bq/biByb290IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NTQKK21zZ2lkICIiCisidGhlIHJlYmFzZS51c2VCdWlsdGluIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCFcbiIKKyJTZWUgaXRzIGVudHJ5IGluICdnaXQgaGVscCBjb25maWcnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorInZp4buHYyBo4buXIHRy4bujIHJlYmFzZS51c2VCdWlsdGluIMSRw6MgYuG7iyB4w7NhIVxuIgorIlhlbSBt4bulYyB0aW4gY+G7p2EgbsOzIHRyb25nIOKAnCBnaXQgaGVscCBjb25maWfigJ0gxJHhu4MgYmnhur90IGNoaSB0aeG6v3QuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1NjAKK21zZ2lkICJJdCBsb29rcyBsaWtlICdnaXQgYW0nIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiIgorIkjDrG5oIG5oxrAgxJFhbmcgdHJvbmcgcXXDoSB0csOsbmggdGjhu7FjIGhp4buHbiBs4buHbmgg4oCcZ2l0LWFt4oCdLiBLaMO0bmcgdGjhu4MgcmViYXNlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjAxCittc2dpZCAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgaXMgZGVwcmVjYXRlZC4gVXNlIC0tcmViYXNlLW1lcmdlcyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgxJHDoyBs4bqhYyBo4bqtdS4gSMOjeSBkw7luZyAtLXJlYmFzZS1tZXJnZXMgxJHhu4MgdGhheSAiCisidGjhur8uIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDYKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgImtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCDigJwtLWtlZXAtYmFzZeKAnSB24bubaSDigJwtLW9udG/igJ0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwOAorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGvhur90IGjhu6NwIOKAnC0ta2VlcC1iYXNl4oCdIHbhu5tpIOKAnC0tcm9vdOKAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aeG6v24gdHLDrG5oIHJlYmFzZSBuw6BvIHBo4bqjaSBraMO0bmc/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MTYKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyJIw6BuaCDEkeG7mW5nIOKAnC0tZWRpdC10b2Rv4oCdIGNo4buJIGPDsyB0aOG7gyBkw7luZyB0cm9uZyBxdcOhIHRyw6xuaCDigJxyZWJhc2XigJ0gKHPhu61hIGzhu4tjaCAiCisic+G7rSkgdMawxqFuZyB0w6FjLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjM5Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTEKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJC4bqhbiBwaOG6o2kgc+G7rWEgdOG6pXQgY+G6oyBjw6FjIGzhuqduIGjDsmEgdHLhu5luIHh1bmcgxJHhu5l0IHbDoCBzYXVcbiIKKyLEkcOzIMSRw6FuaCBk4bqldSBjaMO6bmcgbMOgIGPhuqduIHjhu60gbMO9IHPhu60gZOG7pW5nIGzhu4duaCBnaXQgYWRkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NzAKK21zZ2lkICJjb3VsZCBub3QgZGlzY2FyZCB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbG/huqFpIGLhu48gY8OhYyB0aGF5IMSR4buVaSBjw6J5LWzDoG0tdmnhu4djIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHF1YXkgdHLhu58gbOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTczNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJXMgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCVzXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JXNcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLlxuIgorbXNnc3RyICIiCisiSMOsbmggbmjGsCBsw6Ag4bufIMSRw6J5IHPhurVuIGPDsyBt4buZdCB0aMawIG3hu6VjICVzLCB2w6BcbiIKKyJUw7RpIHThu7EgaOG7j2kgY8OzIHBo4bqjaSBi4bqhbiDEkWFuZyDhu58gZ2nhu69hIG3hu5l0IGzhu4duaCByZWJhc2Uga2jDoWMuIE7hur91IMSRw7puZyBsw6BcbiIKKyJuaMawIHbhuq15LCB4aW4gaMOjeSB0aOG7rVxuIgorIlx0JXNcbiIKKyJO4bq/dSBraMO0bmcgcGjhuqNpIHRo4bq/LCBow6N5IHRo4butXG4iCisiXHQlc1xuIgorInbDoCBjaOG6oXkgVMOUSSBs4bqnbiBu4buvYS4gVMOUSSBk4burbmcgbOG6oWkgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGLhuqFuIHbhuqtuXG4iCisiY8OzIG3hu5l0IHPhu5EgdGjhu6kgcXXDvSBnacOhIOG7nyDEkcOieS5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzU3Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJ0w7l5IGNo4buNbiDigJwlY+KAnSBj4bqnbiBt4buZdCBnacOhIHRy4buLIGLhurFuZyBz4buRIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBtb2RlOiAlcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSBjaOG6vyDEkeG7mTogJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTgyMAorbXNnaWQgIi0tc3RyYXRlZ3kgcmVxdWlyZXMgLS1tZXJnZSBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXN0cmF0ZWd5IGPhuqduIC0tbWVyZ2UgaGF5IC0taW50ZXJhY3RpdmUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg2MAorbXNnaWQgIi0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyByZXF1aXJlcyAtLWV4ZWMgb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIGPhuqduIC0tZXhlYyBoYXkgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODcyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHThu5UgaOG7o3AgY8OhYyB0w7l5IGNo4buNbiBhbSB24bubaSBjw6FjIHTDuXkgY2jhu41uIHTGsMahbmcgdMOhYyBoYXkgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5MQorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLXByZXNlcnZlLW1lcmdlcycgd2l0aCAnLS1yZWJhc2UtbWVyZ2VzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGvhur90IGjhu6NwIOKAnC0tcHJlc2VydmUtbWVyZ2Vz4oCdIHbhu5tpIOKAnC0tcmViYXNlLW1lcmdlc+KAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODk1Cittc2dpZCAiIgorImVycm9yOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyciCittc2dzdHIgImtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCDigJwtLXByZXNlcnZlLW1lcmdlc+KAnSB24bubaSDigJwtLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWPigJ0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICclcyciCittc2dzdHIgInRoxrDhu6NuZyBuZ3Xhu5NuIGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MjUKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIG5ldyByb290IGNvbW1pdCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIGzhuqduIGNodXnhu4NuIGdpYW8gZ+G7kWMgbeG7m2kiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2Ugd2l0aCBicmFuY2giCittc2dzdHIgIuKAnCVz4oCdOiBj4bqnbiBjaMOtbmggeMOhYyBt4buZdCBjxqEgc+G7nyBow7JhIHRy4buZbiB24bubaSBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIuKAnCVz4oCdOiBj4bqnbiBjaMOtbmggeMOhYyBt4buZdCBjxqEgc+G7nyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIktow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAibmdoacOqbSB0cuG7jW5nOiBraMO0bmcgY8OzIG5ow6FuaC9s4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIG5oxrAgdGjhur8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk5NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVmOiAlcyIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aGFtIGNoaeG6v3UgbsOgbyBuaMawIHRo4bq/OiAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDA2Cittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCB0byBhIHJldmlzaW9uIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIGzhuqduIGNodXnhu4NuIGdpYW8gSEVBRCDEkeG6v24gbeG7mXQgxJFp4buDbSB4w6l0IGR1eeG7h3QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0NAorbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIktow7RuZyB0aOG7gyBhdXRvc3Rhc2giCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA0NworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHN0YXNoIHJlc3BvbnNlOiAnJXMnIgorbXNnc3RyICJH4bq3cCDEkcOhcCDhu6luZyBzdGFzaCBraMO0bmcgY+G6p246IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyB0aMawIG3hu6VjIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAlc1xuIgorbXNnc3RyICLEkMOjIHThuqFvIGF1dG9zdGFzaDogJXNcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU5Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHJlc2V0IC0taGFyZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDY4Cittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiWGluIGjDo3kgY2h1eeG7g24gZ2lhbyBob+G6t2MgdOG6oW0gY+G6pXQgKHN0YXNoKSBjaMO6bmcuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2h1eeG7g24gxJHhur9uICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTkKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJIRUFEIMSRw6MgY+G6rXAgbmjhuq10LiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIk5ow6FuaCBoaeG7h24gdOG6oWkgJXMgxJHDoyDEkcaw4bujYyBj4bqtcCBuaOG6rXQgcuG7k2kuXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEyOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIkhFQUQgaGnhu4duIMSRw6MgxJHGsOG7o2MgY+G6rXAgbmjhuq10IHLhu5NpLCBi4buLIMOpcCBideG7mWMgcmViYXNlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIk5ow6FuaCBoaeG7h24gdOG6oWkgJXMgxJHDoyDEkcaw4bujYyBj4bqtcCBuaOG6rXQgcuG7k2ksIGzhu4duaCByZWJhc2Ugw6lwIGJ14buZYy5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIk3Ds2MgKGhvb2spIHByZS1yZWJhc2UgdOG7qyBjaOG7kWkgcmViYXNlLiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgIlRoYXkgxJHhu5VpIHRow6BuaCAlczpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAiVGhheSDEkeG7lWkgdOG7qyAlcyB0aMOgbmggJXM6XG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi5cbiIKK21zZ3N0ciAiIgorIlRyxrDhu5tjIHRpw6puLCBkaSBjaHV54buDbiBoZWFkIMSR4buDIHhlbSBs4bqhaSBjw6FjIGPDtG5nIHZp4buHYyB0csOqbiDEkeG7iW5oIGPhu6dhIG7Ds+KAplxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODMKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6FjaCBy4budaSBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJXMgdG8gJXMuXG4iCittc2dzdHIgIkNodXnhu4NuLXRp4bq/cC1uaGFuaCAlcyDEkeG6v24gJXMuXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzIKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA8dGjGsC1t4bulYy1naXQ+IgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjgzMAorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2ggaW4gYSBub24tYmFyZSByZXBvc2l0b3J5XG4iCisiaXMgZGVuaWVkLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgaW5kZXggYW5kIHdvcmsgdHJlZSBpbmNvbnNpc3RlbnRcbiIKKyJ3aXRoIHdoYXQgeW91IHB1c2hlZCwgYW5kIHdpbGwgcmVxdWlyZSAnZ2l0IHJlc2V0IC0taGFyZCcgdG8gbWF0Y2hcbiIKKyJ0aGUgd29yayB0cmVlIHRvIEhFQUQuXG4iCisiXG4iCisiWW91IGNhbiBzZXQgdGhlICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlXG4iCisidG8gJ2lnbm9yZScgb3IgJ3dhcm4nIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBwdXNoaW5nIGludG9cbiIKKyJpdHMgY3VycmVudCBicmFuY2g7IGhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3VcbiIKKyJhcnJhbmdlZCB0byB1cGRhdGUgaXRzIHdvcmsgdHJlZSB0byBtYXRjaCB3aGF0IHlvdSBwdXNoZWQgaW4gc29tZVxuIgorIm90aGVyIHdheS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHNldFxuIgorIidyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvICdyZWZ1c2UnLiIKK21zZ3N0ciAiIgorIlRoZW8gbeG6t2MgxJHhu4tuaCwgdmnhu4djIGPhuq1wIG5o4bqtdCBuaMOhbmggaGnhu4duIHThuqFpIHRyb25nIG3hu5l0IGtobyBraMO0bmctdGh14bqnblxuIgorImLhu4sgdOG7qyBjaOG7kWksIGLhu59pIHbDrCBuw7Mgc+G6vSBsw6BtIGNobyBjaOG7iSBt4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyBtw6J1IHRodeG6q24gduG7m2lcbiIKKyJjw6FpIG3DoCBi4bqhbiDEkeG6qXkgbMOqbiwgdsOgIHPhur0gecOqdSBj4bqndSBs4buHbmgg4oCcZ2l0IHJlc2V0IC0taGFyZOKAnSDEkeG7gyBtw6AgbMOgbVxuIgorImNobyBjw6J5IGzDoG0gdmnhu4djIGto4bubcCB24bubaSBIRUFELlxuIgorIlxuIgorIkLhuqFuIGPDsyB0aOG7gyDEkeG6t3QgYmnhur9uIGPhuqV1IGjDrG5oIOKAnHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2jigJ0gdGjDoG5oXG4iCisi4oCcaWdub3Jl4oCdIGhheSDigJx3YXJu4oCdIHRyb25nIGtobyBtw6F5IGNo4bunIMSR4buDIGNobyBwaMOpcCDEkeG6qXkgbMOqbiBuaMOhbmhcbiIKKyJoaeG7h24gdOG6oWkgY+G7p2EgbsOzOyB0dXkgbmhpw6puLCBraMO0bmcgbsOqbiBsw6BtIG5oxrAgdGjhur8gdHLhu6sgcGhpIGLhuqFuXG4iCisic+G6r3AgxJHhurd0IMSR4buDIGPhuq1wIG5o4bqtdCBjw6J5IGzDoG0gdmnhu4djIGPhu6dhIG7DsyB0xrDGoW5nIOG7qW5nIHbhu5tpIGPDoWkgbcOgIGLhuqFuIMSR4bqpeVxuIgorImzDqm4gdGhlbyBjw6FjaCBuw6BvIMSRw7MuXG4iCisiXG4iCisixJDhu4MgY2jhuqVtIGThu6l0IGzhu51pIG5o4bqvbiBuw6B5IHbDoCB24bqrbiBnaeG7ryBjw6FjaCDhu6luZyB44butIG3hurdjIMSR4buLbmgsIGjDo3kgxJHhurd0XG4iCisiYmnhur9uIGPhuqV1IGjDrG5oIOKAnHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2jigJ0gdGjDoG5oIOKAnHJlZnVzZeKAnS4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODUwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyJUaGVvIG3hurdjIMSR4buLbmgsIHZp4buHYyBj4bqtcCB4w7NhIG5ow6FuaCBoaeG7h24gdOG6oWkgYuG7iyB04burIGNo4buRaSwgYuG7n2kgdsOsXG4iCisibOG7h25oIOKAnGdpdCBjbG9uZeKAnSB0aeG6v3AgdGhlbyBz4bq9IGtow7RuZyBjw7MgdMOhYyBk4bulbmcgdHJvbmcgdmnhu4djIGzhuqV5XG4iCisicmEgYuG6pXQga+G7syB04bqtcCB0aW4gbsOgbywgZOG6q24gxJHhur9uIGjhu5duIGxv4bqhblxuIgorIlxuIgorIkLhuqFuIGPDsyB0aOG7gyDEkeG6t3QgYmnhur9uIGPhuqV1IGjDrG5oIOKAnHJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnTigJ0gdGjDoG5oXG4iCisi4oCcd2FybuKAnSBoYXkg4oCcaWdub3Jl4oCdIHRyb25nIGtobyBtw6F5IGNo4bunIMSR4buDIGNobyBwaMOpcCDEkeG6qXkgeMOzYSBuaMOhbmhcbiIKKyJoaeG7h24gdOG6oWkgY+G7p2EgbsOzIGPDsyBob+G6t2Mga2jDtG5nIGPhuqNuaCBiw6FvLlxuIgorIlxuIgorIsSQ4buDIGNo4bqlbSBk4bupdCBs4budaSBuaOG6r24gbsOgeSwgYuG6oW4gaMOjeSDEkeG6t3QgbsOzIHRow6BuaCDigJxyZWZ1c2XigJ0uIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MzYKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAiaW0gbOG6t25nIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiQuG6oW4gcGjhuqNpIGNo4buJIMSR4buLbmggdGjGsCBt4bulYy4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8Y8OhYyB0aGFtIGNoaeG6v3U+4oCmIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjIyCittc2dpZCAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8Y8OhYyB0aGFtIGNoaeG6v3U+4oCmIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgImdpdCByZWZsb2cgZXhpc3RzIDx0aGFtX2NoaeG6v3U+IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2NyBidWlsdGluL3JlZmxvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgZOG6pXUgdGjhu51pIGdpYW4gaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIKK21zZ3N0ciAixJDDoW5oIGThuqV1IGPDoWMgxJHhu5FpIHTGsOG7o25nIHRp4bq/cCBj4bqtbiDEkcaw4bujY+KApiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIG5vd2hlcmUhIgorbXNnc3RyICIlcyBjaOG6s25nIGNo4buJIMSR4bq/biDEkcOidSBj4bqjISIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2OTUKK21zZ2lkICJubyByZWZsb2cgc3BlY2lmaWVkIHRvIGRlbGV0ZSIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgcmEgcmVmbG9nIMSR4buDIHjDs2EiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJlZmxvZzogJXMiCittc2dzdHIgImtow7RuZyBwaOG6o2kgbeG7mXQgcmVmbG9nOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcmVmbG9nIGZvciAnJXMnIgorbXNnc3RyICJraMO0bmcgcmVmbG9nIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmcgdGhhbSBjaGnhur91IGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8bmjDoW5oPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3N8LS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPHTDqm4+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW5hbWUgPHTDqm4tY8WpPiA8dMOqbi1t4bubaT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkgYnVpbHRpbi9yZW1vdGUuYzo0MworbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDx0w6puPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPG5ow6FuaD4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyCittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDx0w6puPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPG5ow7NtPiB8IDxtw6F5LWNo4bunPinigKZdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPHTDqm4+IDxuaMOhbmg+4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI1IGJ1aWx0aW4vcmVtb3RlLmM6NzQKK21zZ2lkICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDx0w6puPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPHTDqm4+IDx1cmwtbeG7m2k+IFs8dXJsLWPFqT5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI3IGJ1aWx0aW4vcmVtb3RlLmM6ODAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPHTDqm4+IDx1cmwtbeG7m2k+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPHTDqm4+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzCittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8dMOqbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDx0w6puPiA8bmjDoW5oPuKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPHTDqm4+IDxuaMOhbmg+4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs8Y8OhYyB0w7l5IGNo4buNbj5dIDx0w6puPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDx0w6puPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPG5ow7NtPiB8IDxtw6F5LWNo4bunPl3igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIsSQYW5nIGPhuq1wIG5o4bqtdCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Igbmd1eSBoaeG7g20gdsOgIGtow7RuZyBkw7luZyBu4buvYTsgeGluIGjDo3lcbiIKKyJcdCBz4butIGThu6VuZyB0w7l5IGNo4buNbiAtLW1pcnJvcj1mZXRjaCBob+G6t2MgLS1taXJyb3I9cHVzaCDEkeG7gyB0aGF5IHRo4bq/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgImtow7RuZyBoaeG7g3UgdGhhbSBz4buRIG3DoXkgYuG6o24gc2FvIChtaXJyb3IpOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICJs4bqleSB24buBIGPDoWMgbmjDoW5oIHThu6sgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICJuaOG6rXAgdsOgbyB04bqldCBj4bqjIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRo4bq7IHbDoCB0aMOgbmggcGjhuqduIGxpw6puIHF1YW4ga2hpIGzhuqV5IHbhu4EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY4Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICJob+G6t2Mga2jDtG5nIGzhuqV5IHbhu4EgYuG6pXQga+G7syB0aOG6uyBuw6BvICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgImPDoWMgbmjDoW5oIMSR4buDIHRoZW8gZMO1aSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJuaMOhbmggbWFzdGVyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICLEkeG6t3QgbcOheSBjaOG7pyAocmVtb3RlKSBuaMawIGzDoCBt4buZdCBtw6F5IGLhuqNuIHNhbyDEkeG7gyBwdXNoIGhheSBmZXRjaCB04burIMSRw7MiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAixJFhbmcgY2jhu4kgxJHhu4tuaCBt4buZdCBuaMOhbmggbWFzdGVyIGtow7RuZyBo4bujcCBsw70gduG7m2kgdMO5eSBjaOG7jW4gLS1taXJyb3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiY2jhu4kgxJHhu4tuaCBuaOG7r25nIG5ow6FuaCDEkeG7gyB0aGVvIGTDtWkgY2jhu4kgaOG7o3AgbMO9IHbhu5tpIGPDoWMg4oCcZmV0Y2ggbWlycm9y4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NCBidWlsdGluL3JlbW90ZS5jOjYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJtw6F5IGNo4bunICVzIMSRw6MgdOG7k24gdOG6oWkgcuG7k2kuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OCBidWlsdGluL3JlbW90ZS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgcGjhuqNpIHTDqm4gbcOheSBjaOG7pyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBjw6BpIMSR4bq3dCBuaMOhbmggbWFzdGVyIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IMOhbmggeOG6oSAobWFwKSBmZXRjaCBjaG8gxJHhurdjIHThuqMgdGhhbSBjaGnhur91ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MyBidWlsdGluL3JlbW90ZS5jOjQ1MQorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihraOG7m3ApIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ1NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIoeMOzYSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjI5IGJ1aWx0aW4vcmVtb3RlLmM6NzY0IGJ1aWx0aW4vcmVtb3RlLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgbsOgbyBuaMawIHbhuq15OiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7lWkgdMOqbiBwaOG6p24gY+G7p2EgY+G6pXUgaMOsbmggdOG7qyDigJwlc+KAnSB0aMOgbmgg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIktow7RuZyBj4bqtcCBuaOG6rXQg4oCcbm9uLWRlZmF1bHQgZmV0Y2ggcmVzcGVj4oCdXG4iCisiXHQlc1xuIgorIlx0WGluIGjDo3kgY+G6rXAgbmjhuq10IHBo4bqnbiBj4bqldSBow6xuaCBt4buZdCBjw6FjaCB0aOG7pyBjw7RuZyBu4bq/dSB0aOG6pXkgY+G6p24gdGhp4bq/dC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDEKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIkNow7ogw706IE3hu5l0IHPhu5EgbmjDoW5oIG7hurFtIG5nb8OgaSBo4buHIHRo4buRbmcgcmVmcy9yZW1vdGVzLyDEkcOjIGtow7RuZyDEkcaw4bujYyBn4buhIGLhu48gIgorIsSRaTtcbiIKKyLEkeG7gyB4w7NhIMSRaSwgc+G7rSBk4bulbmc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gcGjhuqduIGPhuqV1IGjDrG5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBt4bubaSAobOG6p24gbOG6pXkgduG7gSB0aeG6v3AgdGhlbyBz4bq9IGzGsHUgdHJvbmcgcmVtb3Rlcy8lcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE5Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDEkcaw4bujYyB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBjxakgcsOtY2ggKGTDuW5nIOKAnGdpdCByZW1vdGUgcHJ1bmXigJ0gxJHhu4MgZ+G7oSBi4buPKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjMKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgImJyYW5jaC4lcy5tZXJnZSBraMO0bmcgaOG7o3AgbOG7hzsga2jDtG5nIHRo4buDIGPhuqNpIHThu5UgduG7gSBwaMOtYSA+IDEgbmjDoW5oIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgInRo4buxYyBoaeG7h24gcmViYXNlIG3hu5l0IGPDoWNoIHTGsMahbmcgdMOhYyB0csOqbiBtw6F5IGNo4bunICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorInRo4buxYyBoaeG7h24gY+G6o2kgdOG7lSAoduG7m2kgY8OhYyBow7JhIHRy4buZbikgbeG7mXQgY8OhY2ggdMawxqFuZyB0w6FjIGzDqm4gdHLDqm4gbcOheSBjaOG7pyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiByZWJhc2UgdHLDqm4gbcOheSBjaOG7pyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIGjDsmEgdHLhu5luIHbhu5tpIG3DoXkgY2jhu6cgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiaMOyYSB0cuG7mW4gduG7m2kgbcOheSBjaOG7pyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS0qcyAgICBhbmQgd2l0aCByZW1vdGUgJXNcbiIKK21zZ3N0ciAiJS0qcyAgICB2w6AgduG7m2kgbcOheSBjaOG7pyAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgInThuqFvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICJkZWxldGUiCittc2dzdHIgInjDs2EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzOAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIsSRw6MgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJjw7MtdGjhu4MtY2h1eeG7g24tdGnhur9wLW5oYW5oIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAiZOG7ryBsaeG7h3UgbuG7mWkgYuG7mSDEkcOjIGPFqSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIMOpcCBideG7mWMgdGjDoG5oICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIMSR4bqpeSBsw6puIHRow6BuaCAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIMOpcCBideG7mWMgdGjDoG5oICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDEkeG6qXkgbMOqbiB0aMOgbmggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOQorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICJraMO0bmcgdHJ1eSB24bqlbiBjw6FjIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiBtw6F5IGNo4bunICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCDEkeG7gyBs4bqleSB24buBOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU4IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NCBidWlsdGluL3JlbW90ZS5jOjEzMTMKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKGtow7RuZyBjw7MgVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIMSR4buDIMSR4bqpeSBsw6puOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc2IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OCBidWlsdGluL3JlbW90ZS5jOjExODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgTmjDoW5oIEhFQUQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKK21zZ2lkICIobm90IHF1ZXJpZWQpIgorbXNnc3RyICIoa2jDtG5nIHnDqnUgY+G6p3UpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzgKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIihraMO0bmcgaGnhu4N1KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiAgbmjDoW5oIEhFQUQgKEhFQUQgbcOheSBjaOG7pyBjaMawYSByw7UgcsOgbmcsIGPDsyBs4bq9IGzDoCBt4buZdCB0cm9uZyBz4buRIHNhdSk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIE5o4buvbmcgbmjDoW5oIHRyw6puIG3DoXkgY2jhu6c6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NyBidWlsdGluL3JlbW90ZS5jOjEyMjMKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAodHLhuqFuZyB0aMOhaSBraMO0bmcgxJHGsOG7o2MgecOqdSBj4bqndSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwNgorbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgIE5o4buvbmcgbmjDoW5oIG7hu5lpIGLhu5kgxJHDoyDEkcaw4bujYyBj4bqldSBow6xuaCBjaG8gbOG7h25oIOKAnGdpdCBwdWxs4oCdOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE0Cittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICByZWZzIG7hu5lpIGLhu5kgc+G6vSDEkcaw4bujYyBwaOG6o24gY2hp4bq/dSBi4bufaSBs4buHbmgg4oCcZ2l0IHB1c2jigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBOaOG7r25nIHRoYW0gY2hp4bq/dSBu4buZaSBi4buZIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGNobyBs4buHbmgg4oCcZ2l0IHB1c2jigJ0lczoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0MQorbXNnaWQgInNldCByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQgYWNjb3JkaW5nIHRvIHJlbW90ZSIKK21zZ3N0ciAixJHhurd0IHJlZnMvcmVtb3Rlcy88dMOqbj4vSEVBRCBjaG8gcGjDuSBo4bujcCB24bubaSBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDMKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICJ4w7NhIHJlZnMvcmVtb3Rlcy88dMOqbj4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU4Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHjDoWMgxJHhu4tuaCDEkcaw4bujYyBIRUFEIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI2MAorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICJOaGnhu4F1IG5ow6FuaCBIRUFEIG3DoXkgY2jhu6cuIEjDo3kgY2jhu41uIHLDtSByw6BuZyBt4buZdDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgeMOzYSBi4buPICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSBsw6AgdGhhbSBjaGnhur91IGjhu6NwIGzhu4c6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY8OgaSDEkeG6t3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgc+G6vSB0cuG7nyB0aMOgbmgga2jDtG5nIMSR4bqndSAoa2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70pISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIMSRw6MgdHLhu58gdGjDoG5oIGtow7RuZyDEkeG6p3UgKGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9KSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLEkGFuZyB4w6luIGLhu5t0ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFtuw6puIHjDqW4gYuG7m3RdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFvEkcOjIGLhu4sgeMOpbl0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NAorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgImPhuq90IG3DoXkgY2jhu6cgc2F1IGtoaSBs4bqleSB24buBIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzcgYnVpbHRpbi9yZW1vdGUuYzoxNDkxIGJ1aWx0aW4vcmVtb3RlLmM6MTU1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgbsOgbyBjw7MgdMOqbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDUzCittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAidGjDqm0gbmjDoW5oIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjAKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJjaMawYSBjaOG7iSByYSBtw6F5IGNo4bunIG7DoG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3NworbXNnaWQgInF1ZXJ5IHB1c2ggVVJMcyByYXRoZXIgdGhhbiBmZXRjaCBVUkxzIgorbXNnc3RyICJ0cnV5IHbhuqVuIMSR4bqpeSBVUkwgdGhheSB2w6wgbOG6pXkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3OQorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAidHLhuqMgduG7gSBt4buNaSBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUwNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICJraMO0bmcgY8OzIFVSTCBuw6BvIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGNobyBuaMOhbmgg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMworbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICLEkeG6qXkgY8OhYyDigJxVUkzigJ0gYuG6sW5nIHRheSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM1Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAidGjDqm0gVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzcKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAieMOzYSBVUkxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDQKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkIC0tZGVsZXRlIGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIktp4buDdSBt4bqrdSBVUkwgY8WpIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IFVSTCBuaMawIHbhuq15OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkzCittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICJT4bq9IGtow7RuZyB4w7NhIG5o4buvbmcgxJHhu4thIGNo4buJIFVSTCBraMO0bmctcHVzaCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzxjw6FjIHTDuXkgY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjgKK21zZ2lkICIiCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAiIgorIkdpYSB0xINuZyByZXBhY2sgbMOgIGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSBjaOG7iSBt4bulYyBiaXRtYXAuIETDuW5nXG4iCisiLS1uby13cml0ZS1iaXRtYXAtaW5kZXggaGF5IHThuq90IGPhuqV1IGjDrG5oIHBhY2sud3JpdGViaXRtYXBzLiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxOTEKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgcGFjay1vYmplY3RzIHRvIHJlcGFjayBwcm9taXNvciBvYmplY3RzIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogcGFjay1vYmplY3RzIMSR4buDIG3DoCDEkcOzbmcgZ8OzaSBs4bqhaSBjw6FjIMSR4buRaSAiCisidMaw4bujbmcgaOG7qWEgaOG6uW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMwIGJ1aWx0aW4vcmVwYWNrLmM6NDE2Cittc2dpZCAicmVwYWNrOiBFeHBlY3RpbmcgZnVsbCBoZXggb2JqZWN0IElEIGxpbmVzIG9ubHkgZnJvbSBwYWNrLW9iamVjdHMuIgorbXNnc3RyICIiCisicmVwYWNrOiDEkGFuZyBjaOG7iSBj4bqnbiBjw6FjIGTDsm5nIElEIMSR4buRaSB0xrDhu6NuZyBk4bqhbmcgdGjhuq1wIGzhu6VjIHBow6JuIMSR4bqneSBk4bunIHThu6sgcGFjay0iCisib2JqZWN0cy4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgImtow7RuZyB0aOG7gyBob8OgbiB04bqldCBwYWNrLW9iamVjdHMgxJHhu4MgxJHDs25nIGfDs2kgY8OhYyDEkeG7kWkgdMaw4bujbmcgaOG7qWEgaOG6uW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjkyCittc2dpZCAicGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2siCittc2dzdHIgIsSRw7NuZyBnw7NpIG3hu41pIHRo4bupIHRyb25nIG3hu5l0IGfDs2kgxJHGoW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk0Cittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiZ2nhu5FuZyB24bubaSAtYSwgdsOgIGNo4buJbmggc+G7rWEgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSR4buNYyDEkcaw4bujYyB0aGnhur91IHPDs3QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk3Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICJ4w7NhIGLhu48gY8OhYyBnw7NpIGTGsCB0aOG7q2EsIHbDoCBjaOG6oXkgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTkKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiY2h1eeG7g24gLS1uby1yZXVzZS1kZWx0YSBjaG8gZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDEKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgImNodXnhu4NuIC0tbm8tcmV1c2Utb2JqZWN0IGNobyBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwMworbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAia2jDtG5nIGNo4bqheSBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwNgorbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJjaHV54buDbiAtLWxvY2FsIGNobyBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMwOAorbXNnaWQgIndyaXRlIGJpdG1hcCBpbmRleCIKK21zZ3N0ciAiZ2hpIG3hu6VjIGzhu6VjIMOhbmggeOG6oSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKK21zZ2lkICJwYXNzIC0tZGVsdGEtaXNsYW5kcyB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJjaHV54buDbiAtLWRlbHRhLWlzbGFuZHMgY2hvIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzExCittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgIm5nw6B5IMaw4bubYyB0w61uaCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTIKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICJ24bubaSAtQSwgY8OhYyDEkeG7kWkgdMaw4bujbmcgY8WpIGjGoW4ga2hv4bqjbmcgdGjhu51pIGdpYW4gbsOgeSB0aMOsIGtow7RuZyBi4buLIG3huqV0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNAorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJ24bubaSAtYSwgxJHDs25nIGfDs2kgbOG6oWkgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIHRo4buDIMSR4buNYyDEkcaw4bujYyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTYKK21zZ2lkICJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgImvDrWNoIHRoxrDhu5tjIGPhu61hIHPhu5UgxJHGsOG7o2MgZMO5bmcgY2hvIG7DqW4g4oCcZGVsdGHigJ0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE3IGJ1aWx0aW4vcmVwYWNrLmM6MzIzCittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJ5dGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgImdp4buRbmcgbmjGsCB0csOqbiwgbmjGsG5nIGdp4bubaSBo4bqhbiBrw61jaCB0aMaw4bubYyBi4buZIG5o4bubIGhheSB2w6wgc+G7kSBsxrDhu6NuZyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgImdp4bubaSBo4bqhbiDEkeG7mSBzw6J1IHThu5FpIMSRYSBj4bunYSDigJxkZWx0YeKAnSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgImdp4bubaSBo4bqhbiBz4buRIGzGsOG7o25nIHThu5FpIMSRYSB0dXnhur9uIHRyw6xuaCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAia8OtY2ggdGjGsOG7m2MgdOG7kWkgxJFhIGNobyB04burbmcgdOG6rXAgdGluIGfDs2kiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI2Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgIsSRw7NuZyBnw7NpIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRyb25nIGPDoWMgZ8OzaSDEkcOjIMSRw6FuaCBk4bqldSBi4bqxbmcgLmtlZXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzI4Cittc2dpZCAiZG8gbm90IHJlcGFjayB0aGlzIHBhY2siCittc2dzdHIgIsSR4burbmcgxJHDs25nIGfDs2kgbOG6oWkgZ8OzaSBuw6B5IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMzOAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgImtow7RuZyB0aOG7gyB4w7NhIGPDoWMgZ8OzaSB0cm9uZyBt4buZdCBraG8gxJHhu5FpX3TGsOG7o25nX3bEqV/EkeG6oWkiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzQyCittc2dpZCAiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtQSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWtlZXAtdW5yZWFjaGFibGUgdsOgIC1BIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDI1Cittc2dpZCAiTm90aGluZyBuZXcgdG8gcGFjay4iCittc2dzdHIgIktow7RuZyBjw7MgZ8OsIG3hu5tpIMSR4buDIG3DoCDEkcOzbmcgZ8OzaS4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyJD4bqiTkggQsOBTzogTeG7mXQgc+G7kSBnw7NpIMSRYW5nIGTDuW5nIHbhu6thIMSRxrDhu6NjIMSR4buVaSB0w6puIGLhurFuZyBjw6FjaFxuIgorIkPhuqJOSCBCw4FPOiDEkcOhbmggdGnhu4FuIHThu5Egb2xkLSB2w6BvIHTDqm4gY+G7p2EgY2jDum5nLCBt4bulYyDEkcOtY2ggbMOgXG4iCisiQ+G6ok5IIELDgU86IHRoYXkgY2jDum5nIGLhurFuZyBwaGnDqm4gYuG6o24gbeG7m2kgY+G7p2EgdOG6rXBcbiIKKyJD4bqiTkggQsOBTzogdGluLiBOaMawbmcgdGhhbyB0w6FjIGzhuqFpIGfhurdwIGzhu5dpLCB2w6AgbuG7l1xuIgorIkPhuqJOSCBCw4FPOiBs4buxYyDEkeG7gyDEkeG7lWkgbmfGsOG7o2MgbOG6oWkgdMOqbiBjaMO6bmcgY2hvIMSRw7puZyB24bubaSB0w6puXG4iCisiQ+G6ok5IIELDgU86IG5ndXnDqm4gZ+G7kWMgY+G7p2EgbsOzIGPFqW5nIGfhurdwIGzhu5dpLlxuIgorIkPhuqJOSCBCw4FPOiBWdWkgbMOybmcgxJHhu5VpIHTDqm4gY2jDum5nIHRyb25nICVzIGLhurFuZyB0YXk6XG4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGfhu6EgYuG7jyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPMSR4buRaS10xrDhu6NuZz4gPHRoYXktdGjhur8+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8xJHhu5FpIHTGsOG7o25nPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxs4bqnbl9jaHV54buDbl9naWFvPiBbPGNoYV9t4bq5PuKApl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI1Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjYKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPMSR4buRaSB0xrDhu6NuZz7igKYiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PMSR4buLbmhfZOG6oW5nPl0gWy1sIFs8beG6q3U+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisixJHhu4tuaCBk4bqhbmcgdGhheSB0aOG6vyBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnVxuIgorIsSR4buLbmggZOG6oW5nIGjhu6NwIGzhu4cgbMOgIOKAnHNob3J04oCdLCDigJxtZWRpdW3igJ0gdsOgIOKAnGxvbmfigJ0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IHRoYW0gY2hp4bq/dSB0aGF5IHRo4bq/IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZXBsYWNlIHJlZiAnJXMnIgorbXNnc3RyICLEkMOjIHjDs2EgdGhhbSBjaGnhur91IHRoYXkgdGjhur8g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZiBuYW1lIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgcGjhuqNpIHTDqm4gdGhhbSBjaGnhur91IGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJ0aGFtIGNoaeG6v3UgdGhheSB0aOG6vyDigJwlc+KAnSDEkcOjIHThu5NuIHThuqFpIHLhu5NpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLlxuIgorIiclcycgcG9pbnRzIHRvIGEgcmVwbGFjZWQgb2JqZWN0IG9mIHR5cGUgJyVzJ1xuIgorIndoaWxlICclcycgcG9pbnRzIHRvIGEgcmVwbGFjZW1lbnQgb2JqZWN0IG9mIHR5cGUgJyVzJy4iCittc2dzdHIgIiIKKyJDw6FjIMSR4buRaSB0xrDhu6NuZyBwaOG6o2kgY8O5bmcga2nhu4N1LlxuIgorIuKAnCVz4oCdIGNo4buJIMSR4bq/biDEkeG7kWkgdMaw4bujbmcgdGhheSB0aOG6vyBj4bunYSBraeG7g3Ug4oCcJXPigJ1cbiIKKyJ0cm9uZyBraGkg4oCcJXPigJ0gY2jhu4kgxJHhur9uIMSR4buRaSB0xrDhu6NuZyB0aGFtIGNoaeG6v3UgY+G7p2Ega2nhu4N1IOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSDEkeG7gyBnaGkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0MgorbXNnaWQgImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiCittc2dzdHIgImNhdC1maWxlIMSRw6MgYsOhbyBjw6FvIGfhurdwIGzhu5dpIG5naGnDqm0gdHLhu41uZyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSDEkeG7gyDEkeG7jWMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI3MgorbXNnaWQgInVuYWJsZSB0byBzcGF3biBta3RyZWUiCittc2dzdHIgImtow7RuZyB0aOG7gyBzaW5oIHRp4bq/biB0csOsbmggY29uIG1rdHJlZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjc2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdOG7qyBta3RyZWUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI4NQorbXNnaWQgIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIgorbXNnc3RyICJta3RyZWUgxJHDoyBiw6FvIGPDoW8gZ+G6t3AgbOG7l2kgbmdoacOqbSB0cuG7jW5nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODkKK21zZ2lkICJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiCittc2dzdHIgIm1rdHJlZSDEkcOjIGtow7RuZyB0cuG6oyB24buBIG3hu5l0IHTDqm4gxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZzdGF0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZnN0YXQgJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMwMworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBvYmplY3QgdG8gZGF0YWJhc2UiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgxJHhu5FpIHTGsOG7o25nIHbDoG8gY8ahIHPhu58gZOG7ryBsaeG7h3UiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyMiBidWlsdGluL3JlcGxhY2UuYzozNzggYnVpbHRpbi9yZXBsYWNlLmM6NDIzCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgImtow7RuZyBwaOG6o2kgbMOgIHTDqm4gxJHhu5FpIHTGsOG7o25nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSBraeG7g3UgxJHhu5FpIHTGsOG7o25nIGNobyAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzQyCittc2dpZCAiZWRpdGluZyBvYmplY3QgZmlsZSBmYWlsZWQiCittc2dzdHIgInZp4buHYyBz4butYSB04bqtcCB0aW4gxJHhu5FpIHTGsOG7o25nIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIG3hu5tpIGzDoCBnaeG7kW5nIHbhu5tpIGPDoWkgY8WpOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyBhcyBhIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoICVzIG5oxrAgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgInRo4bq7IGjDsmEgdHLhu5luIHNhaSB0cm9uZyBs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJ0aOG6uyBow7JhIHRy4buZbiBraMO0bmcgxJHDum5nIGThuqFuZyDhu58gbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIiIKKyJs4bqnbiBjaHV54buDbiBnaWFvIGfhu5FjIOKAnCVz4oCdIGPDsyBjaOG7qWEgdGjhursgaMOyYSB0cuG7mW4g4oCcJXPigJ0gY8OhaSBtw6AgYuG7iyBsb+G6oWkgYuG7jzsgZMO5bmcgIgorInTDuXkgY2jhu41uIC0tZWRpdCB0aGF5IGNobyAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gZ+G7kWMg4oCcJXPigJ0gY8OzIGNo4buvIGvDvSBHUEciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ2OQorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICJjaOG7ryBrw70gc+G6vSDEkcaw4bujYyBi4buPIMSRaSB0cm9uZyBs4bqnbiBjaHV54buDbiBnaWFvIHRoYXkgdGjhur8hIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgbOG6p24gY2h1eeG7g24gZ2lhbyB0aGF5IHRo4bq/IGNobzog4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJncmFmdCBmb3IgJyVzJyB1bm5lY2Vzc2FyeSIKK21zZ3N0ciAiZ3JhZnQgY2hvIOKAnCVz4oCdIGtow7RuZyBj4bqnbiB0aGnhur90IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyBt4bubaSBsw6AgZ2nhu5FuZyB24bubaSBjw6FpIGPFqTog4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGNvbnZlcnQgdGhlIGZvbGxvd2luZyBncmFmdChzKTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBjaHV54buDbiDEkeG7lWkgY8OhYyBncmFmdCBzYXUgxJHDonk6XG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0NworbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICJsaeG7h3Qga8OqIGPDoWMgcmVmcyB0aGF5IHRo4bq/IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDgKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICJ4w7NhIHRoYW0gY2hp4bq/dSB0aGF5IHRo4bq/IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAic+G7rWEgxJHhu5FpIHTGsOG7o25nIHPhurVuIGPDsyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIKK21zZ3N0ciAidGhheSDEkeG7lWkgY2hhIG3hurkgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUxCittc2dpZCAiY29udmVydCBleGlzdGluZyBncmFmdCBmaWxlIgorbXNnc3RyICJjaHV54buDbiDEkeG7lWkgY8OhYyB04bqtcCB0aW4gZ3JhZnQgc+G6tW4gY8OzIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTIKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICJ0aGF5IHRo4bq/IHRoYW0gY2hp4bq/dSBu4bq/dSBuw7MgxJHDoyBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NAorbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAixJHhu6tuZyBpbiDEkeG6uXAgY8OhYyBu4buZaSBkdW5nIGNobyAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NQorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiZMO5bmcgxJHhu4tuaCBk4bqhbmcgbsOgeSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTY4Cittc2dpZCAiLS1mb3JtYXQgY2Fubm90IGJlIHVzZWQgd2hlbiBub3QgbGlzdGluZyIKK21zZ3N0ciAiLS1mb3JtYXQga2jDtG5nIHRo4buDIMSRxrDhu6NjIGTDuW5nIGtoaSBraMO0bmcgbGnhu4d0IGvDqiBnw6wiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NgorbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIi1mIGNo4buJIGjhu6NwIGzDvSBraGkgZ2hpIG3hu5l0IGPDoWkgdGhheSB0aOG6vyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTgwCittc2dpZCAiLS1yYXcgb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tZWRpdCIKK21zZ3N0ciAiLS1yYXcgY2jhu4kgaOG7o3AgbMO9IHbhu5tpIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTg2Cittc2dpZCAiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZCBj4bqnbiDDrXQgbmjhuqV0IG3hu5l0IHRoYW0gc+G7kSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkyCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgInPhu5EgxJHhu5FpIHPhu5Ega2jDtG5nIMSRw7puZyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk4Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIGPhuqduIGNow61uaCBjw6FjIGzDoCBt4buZdCDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA0Cittc2dpZCAiLWcgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItcSBj4bqnbiDDrXQgbmjhuqV0IG3hu5l0IHRoYW0gc+G7kSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjEwCittc2dpZCAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUgdGFrZXMgbm8gYXJndW1lbnQiCittc2dzdHIgIi0tY29udmVydC1ncmFmdC1maWxlIGtow7RuZyBuaOG6rW4gxJHhu5FpIHPhu5EiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNgorbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgImNo4buJIG3hu5l0IG3huqt1IMSRxrDhu6NjIGNo4buJIHJhIHbhu5tpIHTDuXkgY2jhu41uIC1sIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiIgorImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDzEkcaw4budbmcgZOG6q24+4oCmIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo2MAorbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICJz4buVIGdoaSBk4buNbiBz4bqhY2ggY8OhYyBwaMOibiBnaeG6o2kgdHJvbmcgYuG6o24gbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NzkKK21zZ2lkICInZ2l0IHJlcmVyZSBmb3JnZXQnIHdpdGhvdXQgcGF0aHMgaXMgZGVwcmVjYXRlZCIKK21zZ3N0ciAi4oCcZ2l0IHJlcmVyZSBmb3JnZXTigJ0gbcOgIGtow7RuZyBjw7MgY8OhYyDEkcaw4budbmcgZOG6q24gbMOgIMSRw6MgbOG6oWMgaOG6rXUiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8ga2jDoWMgYmnhu4d0IGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyCittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCisjfCBtc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLiIKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8xJHhurdjL3ThuqMvxJHGsOG7nW5nL2ThuqtuPi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1CisjfCBtc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzzEkeG6t2MvdOG6oy/Ekcaw4budbmcvZOG6q24+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgInBoYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgIm3hu4FtIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJoYXJkIgorbXNnc3RyICJj4bupbmciCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICJow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAia2VlcCIKK21zZ3N0ciAiZ2nhu68gbOG6oWkiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJC4bqhbiBraMO0bmcgY8OzIEhFQUQgbsOgbyBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHTDrG0gY8OieSBj4bunYSBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdMOsbSBjw6J5IGPhu6dhICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCBoaeG7h24gZ2nhu50gdOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbeG7mXQgJXMgcmVzZXQg4bufIGdp4buvYSBj4bunYSBxdcOhIHRyw6xuaCBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTQgYnVpbHRpbi9zdGFzaC5jOjUxOSBidWlsdGluL3N0YXNoLmM6NTk0CisjOiBidWlsdGluL3N0YXNoLmM6NjE4Cittc2dpZCAiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIKK21zZ3N0ciAibMOgbSB2aeG7h2Mg4bufIGNo4bq/IMSR4buZIGltIGzhurduZywgY2jhu4kgaGnhu4NuIHRo4buLIGtoaSBjw7MgbOG7l2kiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTYKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAixJHhurd0IGzhuqFpIChyZXNldCkgSEVBRCB2w6AgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk3Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICJjaOG7iSDEkeG6t3QgbOG6oWkgKHJlc2V0KSBIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk5IGJ1aWx0aW4vcmVzZXQuYzozMDEKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICLEkeG6t3QgbOG6oWkgSEVBRCwgYuG6o25nIG3hu6VjIGzhu6VjIHbDoCBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAzCittc2dpZCAicmVzZXQgSEVBRCBidXQga2VlcCBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLEkeG6t3QgbOG6oWkgSEVBRCBuaMawbmcgZ2nhu68gbOG6oWkgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgImNo4buJIGdoaSBs4bqhaSBuaOG7r25nIMSRxrDhu51uZyBk4bqrbiB0aOG7sWMgc+G7sSBz4bq9IMSRxrDhu6NjIHRow6ptIHbDoG8gc2F1IG7DoHkiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHBow6JuIGdp4bqjaSDigJwlc+KAnSBuaMawIGzDoCDEkWnhu4NtIHjDqXQgZHV54buHdCBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBwaMOibiBnaeG6o2kg4oCcJXPigJ0gbmjGsCBsw6AgbeG7mXQgY8OieSAodHJlZSkgaOG7o3AgbOG7hy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggeHVuZyBraOG6r2MgduG7m2kgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgduG7m2kgY8OhYyDEkcaw4budbmcgZOG6q24ga2jDtG5nIGPDsm4gZMO5bmcgbuG7r2E7IGjDo3kgdGhheSB0aOG6vyBi4bqxbmcgbOG7h25oIOKAnGdpdCAiCisicmVzZXQgLS0gPC9jw6FjL8SRxrDhu51uZy9k4bqrbj7igJ0uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbOG7h25oICVzIHJlc2V0IHbhu5tpIGPDoWMgxJHGsOG7nW5nIGThuqtuLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMgcmVzZXQga2jDtG5nIMSRxrDhu6NjIHBow6lwIHRyw6puIGtobyB0aHXhuqduIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzkxCittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OIGNo4buJIMSRxrDhu6NjIGTDuW5nIGtoaSBjw7MgLS1taXhlZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxMgorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICJOaOG7r25nIHRoYXkgxJHhu5VpIMSRxrDhu6NjIMSRxrBhIHJhIGto4buPaSBi4buHIHBow7NuZyBzYXUga2hpIHJlc2V0OiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQuICBZb3UgY2FuXG4iCisidXNlICctLXF1aWV0JyB0byBhdm9pZCB0aGlzLiAgU2V0IHRoZSBjb25maWcgc2V0dGluZyByZXNldC5xdWlldCB0byB0cnVlXG4iCisidG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0LlxuIgorbXNnc3RyICIiCisiXG4iCisiQ+G6p24gJS4yZiBnacOieSDEkeG7gyBraeG7g20gxJHhur9tIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsGEgbMOqbiBi4buHIHBow7NuZyBzYXUga2hpIMSR4bq3dCAiCisibOG6oWkuXG4iCisiQuG6oW4gY8OzIHRo4buDIHPhu60gZOG7pW5nIMSR4buDIHRyw6FuaCB2aeG7h2MgbsOgeS4gxJDhurd0IHJlc2V0LnF1aWV0IHRow6BuaCB0cnVlIHRyb25nXG4iCisiY8OgaSDEkeG6t3QgY29uZmlnIG7hur91IGLhuqFuIG114buRbiB0aOG7sWMgaGnhu4duIG7DsyBuaMawIGzDoCBt4bq3YyDEkeG7i25oLlxuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhurd0IGzhuqFpIChyZXNldCkgYuG6o25nIG3hu6VjIGzhu6VjIHRow6BuaCDEkWnhu4NtIHjDqXQgZHV54buHdCDigJwlc+KAnS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaS4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo0MTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBhbmQgLS1taXNzaW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG7lSBo4bujcCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyB2w6AgLS1taXNzaW5nIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDcyCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgImzhu41jIMSR4buRaSB0xrDhu6NuZyB5w6p1IGPhuqd1IC0tb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyMgorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAicmV2LWxpc3Qga2jDtG5nIGjhu5cgdHLhu6MgaGnhu4NuIHRo4buLIGPDoWMgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjUKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLXVzZS1iaXRtYXAtaW5kZXggd2l0aCBvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG7lSBo4bujcCAtLXVzZS1iaXRtYXAtaW5kZXggduG7m2kgbOG7jWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8Y8OhYyB0w7l5IGNo4buNbj5dIC0tIFs8Y8OhYyB0aGFtIHPhu5E+4oCmXSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgImdp4buvIGzhuqFpIOKAnC0t4oCdIGNodXnhu4NuIHNhbmcgbMOgbSB0aGFtIHPhu5EiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE1Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICJk4burbmcgcGjDom4gdMOtY2ggc2F1IMSR4buRaSBz4buRIMSR4bqndSB0acOqbiBraMO0bmcgY8OzIHTDuXkgY2jhu41uIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQxOAorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgImvhur90IHh14bqldCB0cm9uZyDEkeG7i25oIGThuqFuZyBn4bqteSBkw6BpIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjU1MQorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPGPDoWMgdMO5eSBjaOG7jW4+XSAtLSBbPGPDoWMgxJHhu5FpIHPhu5E+4oCmXVxuIgorIiAgIGhv4bq3YzogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8xJEuc+G7kT7igKZdXG4iCisiICAgaG/hurdjOiBnaXQgcmV2LXBhcnNlIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8xJEuc+G7kT7igKZdXG4iCisiXG4iCisiQ2jhuqF5IGzhu4duaCBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIMSR4buDIGPDsyB0aMOqbSB0aMO0bmcgdGluIHbhu4EgY8OhY2ggZMO5bmcuIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzxjw6FjIHTDuXkgY2jhu41uPl0gPGNvbW1pdC1pc2g+4oCmIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPGzhu4duaC1jb24+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs8Y8OhYyB0w7l5IGNo4buNbj5dIDxjb21taXQtaXNoPuKApiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayA8bOG7h25oLWNvbj4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyIKK21zZ3N0ciAidMO5eSBjaOG7jW4g4oCcJXPigJ0gY+G6p24gbeG7mXQgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBs4bubbiBoxqFuIGtow7RuZyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJr4bq/dCB0aMO6YyBjaGVycnktcGljayBoYXkgaG/DoG4gbmd1ecOqbiBsacOqbiB0aeG6v3AgbmhhdSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDMKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJwaOG7pWMgaOG7k2kgbOG6oWkgY2hlcnJ5LXBpY2sgaGF5IGhvw6BuIG5ndXnDqm4gbGnDqm4gdGnhur9wIG5oYXUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAia2jDtG5nIGNoZXJyeS1waWNrIGhheSBob8OgbiBuZ3V5w6puIGxpw6puIHRp4bq/cCBuaGF1IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgInNraXAgY3VycmVudCBjb21taXQgYW5kIGNvbnRpbnVlIgorbXNnc3RyICJi4buPIHF1YSBs4bqnbiBjaHV54buDbiBnaWFvIGhp4buHbiB04bqhaSB2w6AgdGnhur9wIHThu6VjIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICLEkeG7q25nIGNodXnhu4NuIGdpYW8gbeG7mXQgY8OhY2ggdOG7sSDEkeG7mW5nIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJz4butYSBs4bqhaSBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICJz4buRLWNoYS1t4bq5IgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInNlbGVjdCBtYWlubGluZSBwYXJlbnQiCittc2dzdHIgImNo4buNbiBjaGEgbeG6uSBsdeG7k25nIGNow61uaCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNgorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInTDuXkgY2jhu41uIGNobyBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI1Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICJu4buRaSB0aMOqbSB0w6puIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI3Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImPhuqVtIGto4bufaSB04bqhbyBs4bqnbiBjaHV54buDbiBnaWFvIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJnaeG7ryBs4bqhaSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gZMawIHRo4burYSwgcuG7l25nIgorCisjOiBidWlsdGluL3JldmVydC5jOjIzMgorbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgImhvw6BuIG5ndXnDqm4gZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQ1Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICJjaGVycnktcGljayBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9ybS5jOjE5Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcm0gWzxjw6FjIHTDuXkgY2jhu41uPl0gWy0tXSA8dOG6rXAtdGluPuKApiIKKworIzogYnVpbHRpbi9ybS5jOjIwNworbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnc3RyWzBdICIiCisiY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IGPDsyBraMOhYyBiaeG7h3QgbuG7mWkgZHVuZyDEkcOjIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmdcbiIKKyJ04burIGPhuqMgdOG6rXAgdGluIHbDoCBj4bqjIEhFQUQ6IgorCisjOiBidWlsdGluL3JtLmM6MjEyCittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIoZMO5bmcgLWYgxJHhu4MgYnXhu5ljIGfhu6EgYuG7jykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICJjw6FjIHThuq1wIHRpbiBzYXUgxJHDonkgY8OzIHRoYXkgxJHhu5VpIHRy4bqhbmcgdGjDoWkgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjOiIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIoZMO5bmcgdMO5eSBjaOG7jW4gLS1jYWNoZWQgxJHhu4MgZ2nhu68gdOG6rXAgdGluLCBob+G6t2MgLWYgxJHhu4Mgw6lwIGJ14buZYyBn4buhIGLhu48pIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJuaOG7r25nIHThuq1wIHRpbiBzYXUgxJHDonkgY8OzIG5o4buvbmcgdGhheSDEkeG7lWkgbuG7mWkgYuG7mToiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDIKK21zZ2lkICJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIgorbXNnc3RyICJraMO0bmcgbGnhu4d0IGvDqiBjw6FjIHThuq1wIHRpbiDEkcOjIGfhu6EgYuG7jyIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJjaOG7iSBn4buhIGLhu48gdOG7qyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9ybS5jOjI0NAorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICJnaGkgxJHDqCBsw6puIGtp4buDbSB0cmEgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgImNobyBwaMOpcCBn4buhIGLhu48gxJHhu4cgcXVpIgorCisjOiBidWlsdGluL3JtLmM6MjQ3Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgInRob8OhdCByYSB24bubaSB0cuG6oW5nIHRow6FpIGtow6FjIGtow7RuZyB0aOG6rW0gY2jDrSBu4bq/dSBraMO0bmcgY8OzIGfDrCBraOG7m3AiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODkKK21zZ2lkICJwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorImjDo3kgxJHGsGEgY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbiB2w6BvIC5naXRtb2R1bGVzIGhheSB04bqhbSBj4bqldCBjaMO6bmcgxJFpIMSR4buDIHjhu60gbMO9IgorCisjOiBidWlsdGluL3JtLmM6MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgImtow7RuZyB0aOG7gyBn4buhIGLhu48g4oCcJXPigJ0gbeG7mXQgY8OhY2ggxJHhu4cgcXVpIG3DoCBraMO0bmcgY8OzIHTDuXkgY2jhu41uIC1yIgorCisjOiBidWlsdGluL3JtLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBraMO0bmcgdGjhu4MgZ+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+G6v3QgcXXhuqMgcmEgxJHhuqd1IHJhIGNodeG6qW4gKHN0ZG91dCkgKGNo4buJIGjhu691IGThu6VuZyB24bubaSAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIGPDoWMgdGhhbSBjaGnhur91IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiAoc3RkaW4pIGPDoWkgbcOgIGtow7RuZyDhu58ga2hvIG7hu5lpICIKKyJi4buZIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIwCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSA8b3B0aW9ucz4iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8ZGlzYWJsZSkgPGPDoWMtdMO5eS1jaOG7jW4+IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjYxCittc2dpZCAidGhpcyB3b3JrdHJlZSBpcyBub3Qgc3BhcnNlIChzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgbm90IGV4aXN0KSIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgY8OieSBsw6BtIHZp4buHYyBuw6B5ICh04bqtcCB0aW4gc3BhcnNlLWNoZWNrb3V0IGPDsyBs4bq9ICIKKyJraMO0bmcgdOG7k24gdOG6oWkpIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIyMAorbXNnaWQgImZhaWxlZCB0byBzZXQgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBzZXR0aW5nIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhurd0IGPDoGkgxJHhurd0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWciCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjM3Cittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjU2Cittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAia2jhu59pIHThuqFvIHNwYXJzZS1jaGVja291dCB0cm9uZyBjaOG6vyDEkeG7mSBuw7NuIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI2MgorI3wgbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAia2jhu59pIHThuqFvIHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIG3hu58g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MzYxCisjfCBtc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0ICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0ICgtLXN0ZGluIHwgPGPDoWMgbeG6q3U+KSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNzgKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gc3RhbmRhcmQgaW4iCittc2dzdHIgIsSR4buNYyBjw6FjIG3huqt1IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozODQKK21zZ2lkICJzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIgorbXNnc3RyICLEkeG6t3QgY8OhYyBt4bqrdSBzcGFyc2UtY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NDQ3Cittc2dpZCAiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgInThuq90IHNwYXJzZS1jaGVja291dCIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NTkKK21zZ2lkICJlcnJvciB3aGlsZSByZWZyZXNoaW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu41jIGzhuqFpIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMiBidWlsdGluL3N0YXNoLmM6MzcKK21zZ2lkICJnaXQgc3Rhc2ggbGlzdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGxpc3QgWzxjw6FjIHTDuXkgY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMyBidWlsdGluL3N0YXNoLmM6NDIKK21zZ2lkICJnaXQgc3Rhc2ggc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBzaG93IFs8Y8OhYyB0w7l5IGNo4buNbj5dIDxzdGFzaD4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNCBidWlsdGluL3N0YXNoLmM6NDcKK21zZ2lkICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjUKK21zZ2lkICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjYgYnVpbHRpbi9zdGFzaC5jOjYyCittc2dpZCAiZ2l0IHN0YXNoIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggYnJhbmNoIDx0w6puLW5ow6FuaD4gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjcgYnVpbHRpbi9zdGFzaC5jOjY3Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyOCBidWlsdGluL3N0YXNoLmM6NzcKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxs4budaSBuaOG6r24+XVxuIgorIiAgICAgICAgICBbLS1dIFs8xJHhurdjL3ThuqMvxJHGsOG7nW5nL2ThuqtuPuKApl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MzEgYnVpbHRpbi9zdGFzaC5jOjg0Cittc2dpZCAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPGdoaSBjaMO6Pl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MgorbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NworbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzIKK21zZ2lkICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPGdoaSBjaMO6Pl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIGzhuqduIGNodXnhu4NuIGdpYW8ga2nhu4N1LXN0YXNoIChj4bqldCDEkWkpIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6JXMiCittc2dzdHIgIkNo4buJIHJhIHF1w6Egbmhp4buBdSDEkWnhu4NtIHjDqXQgZHV54buHdDogJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NDkKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IGPDoWMgbeG7pWMgdOG6oW0gY+G6pXQgKHN0YXNoKSBuw6BvLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbeG7mXQgdGhhbSBjaGnhur91IGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjQgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBjbGVhciB24bubaSBjw6FjIHRoYW0gc+G7kSBsw6AgY2jGsGEgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiAoa2jDtG5nIG5o4bqtbiDEkeG7kWkgc+G7kSkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDMKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgImtow7RuZyB0aOG7gyDDoXAgZOG7pW5nIG3hu5l0IHN0YXNoIOG7nyBnaeG7r2EgY+G7p2EgcXXDoSB0csOsbmggaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdlbmVyYXRlIGRpZmYgJXNeIS4iCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBkaWZmICVzXiEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIxCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJ4dW5nIMSR4buZdCB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMuIEjDo3kgdGjhu60gbcOgIGtow7RuZyBkw7luZyB0w7l5IGNo4buNbiAtLWluZGV4LiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyNworbXNnaWQgImNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgbOG6oWkgY8OieSBjaOG7iSBt4bulYyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNgorbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjhu6VjIGjhu5NpIGPDoWMgdOG6rXAgdGluIGNoxrBhIHRoZW8gZMO1aSB04burIG3hu6VjIGPhuqV0IMSRaSAoc3Rhc2gpIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgd2l0aCAlcyIKK21zZ3N0ciAixJBhbmcgaMOyYSB0cuG7mW4gJXMgduG7m2kgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODEKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgIkLhuqNuZyBt4bulYyBs4bulYyDEkcOjIGtow7RuZyDEkcaw4bujYyBi4buPIHN0YXNoLiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMSBidWlsdGluL3N0YXNoLmM6NjIwCittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgImfhurdwIGzhu5dpIMSR4buNYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAlcyAoJXMpIgorbXNnc3RyICLEkMOjIHjDs2EgJXMgKCVzKSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiVzOiBLaMO0bmcgdGjhu4MgeMOzYSBi4buPIG3hu6VjIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICLigJ0lc+KAnSBraMO0bmcgcGjhuqNpIHRoYW0gY2hp4bq/dSDEkeG6v24gc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2OTUKK21zZ2lkICJUaGUgc3Rhc2ggZW50cnkgaXMga2VwdCBpbiBjYXNlIHlvdSBuZWVkIGl0IGFnYWluLiIKK21zZ3N0ciAiQ8OhYyBt4bulYyB04bqhbSBj4bqldCAoc3Rhc2gpIMSRxrDhu6NjIGdp4buvIHRyb25nIHRyxrDhu51uZyBo4bujcCBi4bqhbiBs4bqhaSBj4bqnbiBuw7MuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjU1IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzEzCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJDaMawYSBjaOG7iSByYSB0w6puIGPhu6dhIG5ow6FuaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc5NSBidWlsdGluL3N0YXNoLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCAlcyB24bubaSAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxMyBidWlsdGluL3N0YXNoLmM6MTQ3MCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgInBo4bqnbiBjaMO6IHRow61jaCBjaG8gc3Rhc2giCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MjMKK21zZ2lkICJcImdpdCBzdGFzaCBzdG9yZVwiIHJlcXVpcmVzIG9uZSA8Y29tbWl0PiBhcmd1bWVudCIKK21zZ3N0ciAiXCJnaXQgc3Rhc2ggc3RvcmVcIiBj4bqnbiBt4buZdCDEkeG7kWkgc+G7kSA8bOG6p24gY2h1eeG7g24gZ2lhbz4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMDQ1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE4Cittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiQ2jGsGEgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHGsOG7o2MgY2jhu41uIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJC4bqhbiBjaMawYSBjw7JuIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIGto4bufaSB04bqhbyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNzIgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNjUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSB0cuG6oW5nIHRow6FpIGLhuqNuZyBt4bulYyBs4bulYyBoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTgxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSBjw6FjIHThuq1wIHRpbiBjaMawYSB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTkyIGJ1aWx0aW4vc3Rhc2guYzoxMjAxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIHRy4bqhbmcgdGjDoWkgY8OieS1sw6BtLXZp4buHYyBoaeG7h24gaMOgbmgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjI5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbOG6oWkgdHLhuqFuZyB0aMOhaSBjw6J5IGzDoG0gdmnhu4djIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyNzggZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZMO5bmcgLS1wYXRjaCB2w6AgLS1pbmNsdWRlLXVudHJhY2tlZCBoYXkgLS1hbGwgY8O5bmcgbeG7mXQgbMO6YyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyOTQKK21zZ2lkICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/IgorbXNnc3RyICJDw7MgbOG6vSBi4bqhbiDEkcOjIHF1w6puIOKAnGdpdCBhZGQg4oCdIHBo4bqjaSBraMO0bmc/IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMwOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM0NgorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBu4buZaSBi4buZIG7DoG8gxJHGsOG7o2MgZ2hpIGzhuqFpIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMxNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1MQorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJLaMO0bmcgdGjhu4Mga2jhu59pIHThuqFvIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzMSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSB0cuG6oW5nIHRow6FpIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICLEkMOjIGdoaSBs4bqhaSB0aMawIG3hu6VjIGzDoG0gdmnhu4djIHbDoCB0cuG6oW5nIHRow6FpIG3hu6VjIGzhu6VjICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQyNiBnaXQtbGVnYWN5LXN0YXNoLnNoOjM4NQorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGfhu6EgYuG7jyBjw6FjIHRoYXkgxJHhu5VpIGPDonktbMOgbS12aeG7h2MiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYxIGJ1aWx0aW4vc3Rhc2guYzoxNDk3Cittc2dpZCAia2VlcCBpbmRleCIKK21zZ3N0ciAiZ2nhu68gbmd1ecOqbiBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYzIGJ1aWx0aW4vc3Rhc2guYzoxNDk5Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAiY+G6pXQgxJFpIOG7nyBjaOG6vyDEkeG7mSBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjQgYnVpbHRpbi9zdGFzaC5jOjE1MDAKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICJjaOG6vyDEkeG7mSBpbSBs4bq3bmciCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY2IGJ1aWx0aW4vc3Rhc2guYzoxNTAyCittc2dpZCAiaW5jbHVkZSB1bnRyYWNrZWQgZmlsZXMgaW4gc3Rhc2giCittc2dzdHIgImJhbyBn4buTbSBjw6FjIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIHRyb25nIHN0YXNoIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2OCBidWlsdGluL3N0YXNoLmM6MTUwNAorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyB04bqtcCB0aW4gYuG7iyBi4buPIHF1YSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4ZWMgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB0aOG7sWMgdGhpICVzIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOAorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTkKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzozNworbXNnaWQgInNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciIKK21zZ3N0ciAiZ2nhu68gdsOgIHjDs2EgYuG7jyBt4buNaSBkw7JuZyBi4bqvdCDEkeG6p3UgYuG6sW5nIGvDvSB04buxIGdoaSBjaMO6IgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzo0MAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAidHJlbyB0csaw4bubYyBrw70gdOG7sSBnaGkgY2jDuiB2w6Aga8O9IHThu7Ega2hv4bqjbmcgdHLhuq9uZyBjaG8gdOG7q25nIGTDsm5nIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIgorbXNnc3RyICJD4bqnbiB0w6puIHRoYW0gY2hp4bq/dSBk4bqhbmcgxJHhuqd5IMSR4bunLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjICVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjQKK21zZ2lkICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSB0YWtlcyBubyBhcmd1bWVudHMiCittc2dzdHIgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIGtow7RuZyBuaOG6rW4gdGhhbSBz4buRIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGPhuq90IGLhu48gbeG7mXQgdGjDoG5oIHBo4bqnbiByYSBraOG7j2kg4oCcJXPigJ0gdXJsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgwCittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAixJFp4buDbSBuZW8gdGhheSB0aOG6vyBjaG8gY8OhYyDEkcaw4budbmcgZOG6q24gdMawxqFuZyDEkeG7kWkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTwvxJHGsOG7nW5nL2ThuqtuPl0gWzwvxJHGsOG7nW5nL2ThuqtuPuKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSB1cmwgY2hvIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0gdHJvbmcgLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICLEkGFuZyB2w6BvIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyBmb3IgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQgdHLhuqMgduG7gSB0cuG6oW5nIHRow6FpIGtow6FjIGtow7RuZyBjaG8gJXNcbiIKKyIuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgd2hpbGUgcmVjdXJzaW5nIGluIHRoZSBuZXN0ZWQgIgorInN1Ym1vZHVsZXMgb2YgJXNcbiIKKyIuIgorbXNnc3RyICIiCisicnVuX2NvbW1hbmQgdHLhuqMgduG7gSB0cuG6oW5nIHRow6FpIGtow6FjIGtow7RuZyB0cm9uZyBraGkgxJHhu4cgcXV5IHRyb25nIGPDoWMgbcO0LcSRdW4tIgorImNvbiBs4buTbmcgbmhhdSBj4bunYSAlc1xuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjUKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2YgZW50ZXJpbmcgZWFjaCBzdWJtb2R1bGUgY29tbWFuZCIKK21zZ3N0ciAiQ2jhurduIGvhur90IHh14bqldCBj4bunYSB04burbmcgbOG7h25oIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MworbXNnaWQgIlJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAixJDhu4cgcXV5IHbDoG8gdHJvbmcgY8OhYyBtw7QtxJF1bi1jb24gbOG7k25nIG5oYXUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NzIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSAgPGzhu4duaD4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBsb29rIHVwIGNvbmZpZ3VyYXRpb24gJyVzJy4gQXNzdW1pbmcgdGhpcyByZXBvc2l0b3J5IGlzIGl0cyBvd24gIgorImF1dGhvcml0YXRpdmUgdXBzdHJlYW0uIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGPhuqV1IGjDrG5oIOKAnCVz4oCdLiBDb2kgcuG6sW5nIMSRw6J5IGzDoCBraG8gdGjGsOG7o25nIG5ndeG7k24gY8OzIHF1eeG7gW4gIgorInPhu58gaOG7r3UgY2jDrW5oIG7Dsy4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRxINuZyBrw70gdXJsIGNobyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIk3DtC3EkXVuLWNvbiDigJwlc+KAnSAoJXMpIMSRxrDhu6NjIMSRxINuZyBrw70gY2hvIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICJj4bqjbmggYsOhbzogY2jhur8gxJHhu5kgbOG7h25oIGPhuq1wIG5o4bqtdCDEkcaw4bujYyBn4bujaSDDvSBjaG8gbcO0LcSRdW4tY29uIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHEg25nIGvDvSBjaOG6vyDEkeG7mSBj4bqtcCBuaOG6rXQgY2hvIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTAKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgZm9yIGluaXRpYWxpemluZyBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiQ2jhurduIGvhur90IHh14bqldCBjaG8ga2jhu59pIHThuqFvIG3hu5l0IG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbPC/Ekcaw4budbmcvZOG6q24+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjc4NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKyJraMO0bmcgdMOsbSB0aOG6pXkgw6FuaCB44bqhIChtYXBwaW5nKSBtw7QtxJF1bi1jb24gdHJvbmcgLmdpdG1vZHVsZXMgY2hvIMSRxrDhu51uZyBk4bqrbiAiCisi4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCByZWYgaW5zaWRlIHRoZSBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSB0aGFtIGNoaeG6v3UgSEVBRCBiw6puIHRyb25nIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg1NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHhu4cgcXV5IHbDoG8gdHJvbmcgbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTg5Cittc2dpZCAiU3VwcHJlc3Mgc3VibW9kdWxlIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIkNo4bq3biBrw6l0IHh14bqldCB0w6xuaCB0cuG6oW5nIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OQorbXNnaWQgIiIKKyJVc2UgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaW5zdGVhZCBvZiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3VibW9kdWxlICIKKyJIRUFEIgorbXNnc3RyICIiCisiRMO5bmcgbOG6p24gY2h1eeG7g24gZ2lhbyBsxrB1IHRyb25nIG3hu6VjIGzhu6VjIHRoYXkgY2hvIGPDoWkgxJHGsOG7o2MgbMawdSB0cm9uZyBIRUFEIG3DtC0iCisixJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODAKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIsSR4buHIHF1eSB2w6BvIHRyb25nIG3DtC3EkXVuLWNvbiBs4buTbmcgbmhhdSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4NQorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlIHN0YXR1cyBbLS1xdWlldF0gWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFs8L8SRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTA5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA8L8SRxrDhu51uZy9k4bqrbj4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIlVybCBtw7QtxJF1bi1jb24gxJHhu5NuZyBi4buZIGjDs2EgY2hvIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSRxINuZyBrw70gdXJsIGNobyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IG3DoXkgY2jhu6cgbeG6t2MgxJHhu4tuaCBjaG8gbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBj4bqtcCBuaOG6rXQgY2hvIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICJDaOG6t24ga+G6v3QgeHXhuqV0IGNobyDEkeG7k25nIGLhu5kgdXJsIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzwvxJHGsOG7nW5nL2ThuqtuPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICclcycgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSAodXNlICdybSAtcmYnIGlmIHlvdSAiCisicmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisiQ8OieSBsw6BtIHZp4buHYyBtw7QtxJF1bi1jb24g4oCcJXPigJ0gY8OzIGNo4bupYSB0aMawIG3hu6VjIC5naXQgKGTDuW5nIOKAnHJtIC1yZuKAnSBu4bq/dSBi4bqhbiAiCisidGjhu7FjIHPhu7EgbXXhu5FuIGfhu6EgYuG7jyBuw7MgY8O5bmcgduG7m2kgdG/DoG4gYuG7mSBs4buLY2ggc+G7rSBj4bunYSBjaMO6bmcpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgIgorInRoZW0iCittc2dzdHIgIiIKKyJDw6J5IGzDoG0gdmnhu4djIG3DtC3EkXVuLWNvbiDigJwlc+KAnSBjaOG7qWEgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZOyBow6N5IGTDuW5nIOKAnC1m4oCdIMSR4buDIGxv4bqhaSAiCisiYuG7jyBjaMO6bmcgxJFpIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmVkIGRpcmVjdG9yeSAnJXMnXG4iCittc2dzdHIgIsSQw6MgeMOzYSB0aMawIG3hu6VjIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gY8OieSBsw6BtIHZp4buHYyBtw7QtxJF1bi1jb24g4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyBtw7QtxJF1bi1jb24gcuG7l25nIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJXMnXG4iCittc2dzdHIgIk3DtC3EkXVuLWNvbiDigJwlc+KAnSAoJXMpIMSRxrDhu6NjIMSRxINuZyBrw70gY2hvIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5MAorbXNnaWQgIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYyBj4bunYSBtw7QtxJF1bi1jb24gbmdheSBj4bqjIGtoaSBuw7MgY8OzIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiQuG7jyDEkcSDbmcga8O9IHThuqV0IGPhuqMgY8OhYyB0cm9uZyBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTk2Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dICBbPC/Ekcaw4budbmcvZOG6q24+4oCmXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiRMO5bmcg4oCcLS1hbGzigJ0gbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIGjhu6d5IGto4bufaSB04bqhbyBt4buNaSBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjc1Cittc2dpZCAiIgorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorbXNnc3RyICIiCisiTeG7mXQgY8OhaSB0aGF5IHRo4bq/IMSRxrDhu6NjIHTDrW5oIHRvw6FuIHThu6sgbeG7mXQgdGhheSB0aOG6vyBj4bunYSBzacOqdSBk4buxIMOhbiBsw6Aga2jDtG5nIGjhu6NwICIKKyJs4buHLlxuIgorIsSQ4buDIGNobyBHaXQgdGjhu7FjIGhp4buHbiBuaMOibiBi4bqjbiBtw6Aga2jDtG5nIGPDsyBjw6FpIHRoYXkgdGjhur8gbmjGsCB0cm9uZyB0csaw4budbmcgaOG7o3AgIgorIm7DoHksIMSR4bq3dFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRow6BuaCAnaW5mbycgaG/hurdjLCB0xrDGoW5nIMSRxrDGoW5nLCBuaMOibiBi4bqjbiAiCisiYuG6sW5nXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIHRoYXkgdsOsIGTDuW5nICctLXJlZmVyZW5jZScuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgIm3DtC3EkXVuLWNvbiDigJwlc+KAnSBraMO0bmcgdGjhu4MgdGjDqm0gdGhheSB0aOG6vzogJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJHacOhIHRy4buLIOKAnCVz4oCdIGNobyBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBraMO0bmcgxJHGsOG7o2MgdGjhu6thIG5o4bqtbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsdWUgJyVzJyBmb3Igc3VibW9kdWxlLmFsdGVybmF0ZUxvY2F0aW9uIGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJHacOhIHRy4buLIOKAnCVz4oCdIGNobyBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24ga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgzCittc2dpZCAid2hlcmUgdGhlIG5ldyBzdWJtb2R1bGUgd2lsbCBiZSBjbG9uZWQgdG8iCittc2dzdHIgIm5ow6JuIGLhuqNuIG3DtC3EkXVuLWNvbiBt4bubaSB2w6BvIGNo4buXIG7DoG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg2Cittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAidMOqbiBj4bunYSBtw7QtxJF1bi1jb24gbeG7m2kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg5Cittc2dpZCAidXJsIHdoZXJlIHRvIGNsb25lIHRoZSBzdWJtb2R1bGUgZnJvbSIKK21zZ3N0ciAidXJsIG7GoWkgbcOgIG5ow6JuIGLhuqNuIG3DtC3EkXVuLWNvbiB04burIMSRw7MiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk3Cittc2dpZCAiZGVwdGggZm9yIHNoYWxsb3cgY2xvbmVzIgorbXNnc3RyICJjaGnhu4F1IHPDonUgbOG7i2NoIHPhu60ga2hpIHThuqFvIGLhuqNuIHNhbyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTcKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLDqXAgYnXhu5ljIHRp4bq/biB0csOsbmggbmjDom4gYuG6o24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk5Cittc2dpZCAiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiCittc2dzdHIgImzDoG0gxJHhuqd5IMSR4bunIGThu68gbGnhu4d1IGNobyBi4bqjbiBzYW8gdsOgbyB0cm9uZyBt4buZdCB0aMawIG3hu6VjIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwNworbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTxwYXRoPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSAiCisiPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tZGVwdGggPGRlcHRoPl0gLS11cmwgPHVybD4gLS1wYXRoIDxwYXRoPiIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PC/Ekcaw4budbmcvZOG6q24+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8a2hvPl0gWy0tbmFtZSA8dMOqbj5dIFstLWRlcHRoIDxzw6J1Pl0gWy0tdXJsIDx1cmw+XSBbPC/Ekcaw4budbmcvZOG6q24+4oCmXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAidOG7qyBjaOG7kWkgdOG6oW8vZMO5bmcgJyVzJyB0cm9uZyBt4buZdCB0aMawIG3hu6VjIGdpdCBj4bunYSBtw7QgxJF1biBjb24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAidmnhu4djIHNhbyDigJwlc+KAnSB2w6BvIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0gZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSBub3QgZW1wdHk6ICclcyciCittc2dzdHIgInRoxrAgbeG7pWMga2jDtG5nIHRy4buRbmc6ICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRoxrAgbeG7pWMgbcO0LcSRdW4tY29uIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICJDaOG6vyDEkeG7mSBj4bqtcCBuaOG6rXQg4oCcJXPigJ0ga2jDtG5nIGjhu6NwIGzhu4cgY2hvIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICIiCisiQ2jhur8gxJHhu5kgY+G6rXAgbmjhuq10IOKAnCVz4oCdIGtow7RuZyBo4bujcCBs4buHIMSRxrDhu6NjIGPhuqV1IGjDrG5oIGNobyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAixJDGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwlc+KAnSBjaMawYSDEkcaw4bujYyBraOG7n2kgdOG6oW8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNTk4Cittc2dpZCAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIkPDsyBs4bq9IGLhuqFuIGzDoCBi4bqhbiBtdeG7kW4gZMO5bmcgXCJ1cGRhdGUgLS1pbml0XCIgcGjhuqNpIGtow7RuZz8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiQuG7jyBxdWEgY8OhYyBtw7QtxJF1bi1jb24gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4gJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICJC4buPIHF1YSBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnLiBSZXRyeSBzY2hlZHVsZWQiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBuaMOibiBi4bqjbiDigJwlc+KAnS4gVGjhu60gbOG6oWkgbOG7i2NoIHRyw6xuaCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycgYSBzZWNvbmQgdGltZSwgYWJvcnRpbmciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBuaMOibiBi4bqjbiDigJwlc+KAnSBs4bqnbiB0aOG7qSBoYWkgbsOqbiBiw6NpIGLhu48iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIwCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkeG6v24gY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzkKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIMSR4bq/biBjw6J5IGzDoG0gdmnhu4djLCBjaMOpbyBiacOqbiBnaeG7m2kgbcO0LcSRdW4tY29uIGzhu5NuZyBuaGF1IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MworbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IGhv4bq3YyBraMO0bmcgbMOgbSBnw6wgY+G6oyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODkKK21zZ2lkICJDcmVhdGUgYSBzaGFsbG93IGNsb25lIHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMiCittc2dzdHIgIiIKKyJU4bqhbyBt4buZdCBi4bqjbiBzYW8gbsO0bmcgxJHGsOG7o2MgY+G6r3Qgbmfhuq9uIHRow6BuaCBz4buRIGzGsOG7o25nIMSRaeG7g20geMOpdCBkdXnhu4d0IMSRw6MgY2hvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5MgorbXNnaWQgInBhcmFsbGVsIGpvYnMiCittc2dzdHIgImPDtG5nIHZp4buHYyDEkeG7k25nIHRo4budaSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTQKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgIm5ow6JuIGLhuqNuIGzhuqduIMSR4bqndSBjw7MgbsOqbiB0aGVvIGtodXnhur9uIG5naOG7iyBsw6AgbsO0bmcgaGF5IGtow7RuZyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTUKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLEkeG7q25nIGluIHRp4bq/biB0csOsbmggbmjDom4gYuG6o24iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA0Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciB1cGRhdGUtY2xvbmUgWy0tcHJlZml4PTwvxJHGsOG7nW5nL2ThuqtuPl0gWzwvxJHGsOG7nW5nL2ThuqtuPuKApl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE3Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICJnacOhIHRy4buLIGNobyAgdGhhbSBz4buRIGPhuq1wIG5o4bqtdCBi4buLIHNhaSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSAoJXMpIGJyYW5jaCBjb25maWd1cmVkIHRvIGluaGVyaXQgYnJhbmNoIGZyb20gc3VwZXJwcm9qZWN0LCBidXQgIgorInRoZSBzdXBlcnByb2plY3QgaXMgbm90IG9uIGFueSBicmFuY2giCittc2dzdHIgIiIKKyJOaMOhbmggbcO0LcSRdW4tY29uICglcykgxJHGsOG7o2MgY+G6pXUgaMOsbmgga+G6vyB0aOG7q2EgbmjDoW5oIHThu6sgc2nDqnUgZOG7sSDDoW4sIG5oxrBuZyBzacOqdSAiCisiZOG7sSDDoW4gbOG6oWkga2jDtG5nIHRyw6puIGLhuqV0IGvhu7MgbmjDoW5oIG7DoG8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aOG6uyBxdeG6o24ga2hvIGNobyBtw7QtxJF1bi1jb24g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIxCittc2dpZCAicmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMiCittc2dzdHIgIsSR4buHIHF1eSB2w6BvIHRyb25nIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjcKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXJzIFs8b3B0aW9ucz5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgYWJzb3JiLWdpdC1kaXJzIFs8Y8OhYyB0w7l5IGNo4buNbj5dIFs8L8SRxrDhu51uZy9k4bqrbj7igKZdIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE4MworbXNnaWQgImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgImNo4buNbiBu4bq/dSBuw7MgbMOgIGFuIHRvw6BuIMSR4buDIGdoaSB2w6BvIHThuq1wIHRpbiAuZ2l0bW9kdWxlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODYKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICJi4buPIMSR4bq3dCBj4bqldSBow6xuaCB0cm9uZyB04bqtcCB0aW4gLmdpdG1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkxCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA8bmFtZT4gWzx2YWx1ZT5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDx0w6puPiBbPGdpw6EgdHLhu4s+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPHTDqm4+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS1jaGVjay13cml0ZWFibGUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjEyIGdpdC1zdWJtb2R1bGUuc2g6MTczCisjLCBzaC1mb3JtYXQKK21zZ2lkICJwbGVhc2UgbWFrZSBzdXJlIHRoYXQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiaMOjeSDEkeG6o20gYuG6o28gcuG6sW5nIHThuq1wIHRpbiAuZ2l0bW9kdWxlcyBjw7MgdHJvbmcgY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyNjIgZ2l0LmM6NDMzIGdpdC5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2Vzbid0IHN1cHBvcnQgLS1zdXBlci1wcmVmaXgiCittc2dzdHIgIiVzIGtow7RuZyBo4buXIHRy4bujIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIGzhu4duaCBjb24gc3VibW9kdWxlLS1oZWxwZXIgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8dMOqbj4gWzx0LmNoaeG6v3U+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo5Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDx0w6puPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgImNo4bq3biBjw6FjIHRow7RuZyB0aW4gbOG7l2kgY2hvIGPDoWMgdGhhbSBjaGnhur91IOKAnGtow7RuZy1t4buBbeKAnSAoYuG7iyB0w6FjaCByYSkiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICJ4w7NhIHRoYW0gY2hp4bq/dSBt4buBbSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAibMOgbSBuZ+G6r24ga+G6v3QgeHXhuqV0IHJlZiAodGhhbSBjaGnhur91KSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24iCittc2dzdHIgImzDvSBkbyIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAibMO9IGRvIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi90YWcuYzoyNQorbXNnaWQgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+XVxuIgorIlx0XHQ8dGFnbmFtZT4gWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+IHwgLUYgPHThuq1wLXRpbj5dXG4iCisiXHRcdDx0w6puLXRo4bq7PiBbPGhlYWQ+XSIKKworIzogYnVpbHRpbi90YWcuYzoyNworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDx0w6puLXRo4bq7PuKApiIKKworIzogYnVpbHRpbi90YWcuYzoyOAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1uby1jb250YWlucyA8Y29tbWl0Pl0gWy0tIgorInBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxz4buRPl1dIFstLWNvbnRhaW5zIDxs4bqnbl9jaHV54buDbl9naWFvPl0gWy0tbm8tY29udGFpbnMgIgorIjxs4bqnbl9jaHV54buDbl9naWFvPl0gWy0tcG9pbnRzLWF0IDzEkeG7kWktdMaw4bujbmc+XVxuIgorIlx0XHRbLS1mb3JtYXQ9PMSR4buLbmhfZOG6oW5nPl0gWy0tW25vLV1tZXJnZWQgWzxs4bqnbl9jaHV54buDbl9naWFvPl1dIFs8beG6q3U+4oCmXSIKKworIzogYnVpbHRpbi90YWcuYzozMAorbXNnaWQgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgWy0tZm9ybWF0PTzEkeG7i25oX2ThuqFuZz5dICA8dMOqbi10aOG6uz7igKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IHTDrG0gdGjhuqV5IHRo4bq7IOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi90YWcuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJUaOG6uyDEkcOjIGLhu4sgeMOzYSDigJwlc+KAnSAodOG7q25nIGzDoCAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiVmnhur90IGPDoWMgZ2hpIGNow7ogY2hvIHRo4bq7OlxuIgorIiAgJXNcbiIKKyJOaOG7r25nIGTDsm5nIMSRxrDhu6NjIGLhuq90IMSR4bqndSBi4bqxbmcg4oCcJWPigJ0gc+G6vSDEkcaw4bujYyBi4buPIHF1YS5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlZp4bq/dCBjw6FjIGdoaSBjaMO6IGNobyB0aOG6uzpcbiIKKyIgICVzXG4iCisiTmjhu69uZyBkw7JuZyDEkcaw4bujYyBi4bqvdCDEkeG6p3UgYuG6sW5nIOKAnCVj4oCdIHPhur0gxJHGsOG7o2MgZ2nhu68gbOG6oWk7IGLhuqFuIGPDsyB0aOG7gyB4w7NhIGNow7puZyDEkWkgIgorIm7hur91IG114buRbi5cbiIKKworIzogYnVpbHRpbi90YWcuYzoxOTgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga8O9IHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjIwMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB2w6BvIHThuq1wIHRpbiBsxrB1IHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgY3JlYXRlZCBhIG5lc3RlZCB0YWcuIFRoZSBvYmplY3QgcmVmZXJyZWQgdG8gYnkgeW91ciBuZXcgdGFnIGlzXG4iCisiYWxyZWFkeSBhIHRhZy4gSWYgeW91IG1lYW50IHRvIHRhZyB0aGUgb2JqZWN0IHRoYXQgaXQgcG9pbnRzIHRvLCB1c2U6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorbXNnc3RyICIiCisiQuG6oW4gxJHDoyB04bqhbyBt4buZdCB0aOG6uyBs4buTbmcgbmhhdS4gxJDhu5FpIHTGsOG7o25nIMSRxrDhu6NjIGNo4buJIMSR4bq/biB0aOG6uyBt4bubaSBj4bunYSBi4bqhbiBsw6BcbiIKKyLEkcOjIGzDoCBt4buZdCB0aOG6uy4gTuG6v3Ugw70gYuG6oW4gbMOgIGfhuq9uIHRo4bq7IMSR4buRaSB0xrDhu6NuZyBtw6AgbsOzIHRy4buPIMSR4bq/biwgc+G7rSBk4bulbmc6XG4iCisiXG4iCisiXHRnaXQgdGFnIC1mICVzICVzXnt9IgorCisjOiBidWlsdGluL3RhZy5jOjIzMgorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcgc2FpLiIKKworIzogYnVpbHRpbi90YWcuYzoyODQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgImtow7RuZyBjw7MgY2jDuiB0aMOtY2ggZ8OsIGNobyBjaG8gdGjhursgw6A/IgorCisjOiBidWlsdGluL3RhZy5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICJO4buZaSBkdW5nIGdoaSBjaMO6IGPDsm4gbOG6oWkgJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MDIKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAiY2jhu4kgbGnhu4d0IGvDqiB0w6puIGPDoWMgdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDA0Cittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgImhp4buDbiB0aOG7iyA8bj4gZMOybmcgY2hvIG3hu5dpIGdoaSBjaMO6IgorCisjOiBidWlsdGluL3RhZy5jOjQwNgorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJ4w7NhIHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjQwNworbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJ0aOG6qW0gdHJhIHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjQwOQorbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICJUw7l5IGNo4buNbiB04bqhbyB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzo0MTEKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgIsSR4buDIGNow7ogZ2nhuqNpIGNobyB0aOG6uywgY+G6p24gbeG7mXQgbOG7nWkgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDEzCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgInBo4bqnbiBjaMO6IHRow61jaCBjaG8gdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE1Cittc2dpZCAiZm9yY2UgZWRpdCBvZiB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiw6lwIGJ14buZYyBz4butYSB0aOG6uyBs4bqnbiBjb21taXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDE2Cittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAidGjhursgY2jDuiBnaeG6o2kgdsOgIGvDvSBraeG7g3UgR1BHIgorCisjOiBidWlsdGluL3RhZy5jOjQxOQorbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgImTDuW5nIGtow6FvIGtow6FjIMSR4buDIGvDvSB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzo0MjAKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICJ0aGF5IHRo4bq/IG7hur91IHRo4bq7IMSRw7MgxJHDoyBjw7MgdHLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDIxIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OQorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAidOG6oW8gbeG7mXQgcmVmbG9nIgorCisjOiBidWlsdGluL3RhZy5jOjQyMworbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gbGnhu4d0IGvDqiB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzo0MjQKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkYW5oIHPDoWNoIHRo4bq7IHRyb25nIGPDoWMgY+G7mXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1IGJ1aWx0aW4vdGFnLmM6NDI3Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyBuaMOhbmggbcOgIG7DsyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi90YWcuYzo0MjYgYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRo4bq7IG3DoCBuw7Mga2jDtG5nIGNo4bupYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL3RhZy5jOjQyOQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRo4bq7IG3DoCBuw7MgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDMwCittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgYXJlIG5vdCBtZXJnZWQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRo4bq7IG3DoCBuw7Mga2jDtG5nIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3RhZy5jOjQzNAorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyB0aOG6uyBj4bunYSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDgyCittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIHbDoCAtbiB4dW5nIGto4bqvYyBuaGF1IgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtbiBjaOG7iSBjaG8gcGjDqXAgZMO5bmcgdHJvbmcgY2jhur8gxJHhu5kgbGnhu4d0IGvDqiIKKworIzogYnVpbHRpbi90YWcuYzo1MDYKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtLWNvbnRhaW5zIGNo4buJIGNobyBwaMOpcCBkw7luZyB0cm9uZyBjaOG6vyDEkeG7mSBsaeG7h3Qga8OqIgorCisjOiBidWlsdGluL3RhZy5jOjUwOAorbXNnaWQgIi0tbm8tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgInTDuXkgY2jhu41uIC0tbm8tY29udGFpbnMgY2jhu4kgY2hvIHBow6lwIGTDuW5nIHRyb25nIGNo4bq/IMSR4buZIGxp4buHdCBrw6oiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiBsaXN0IG1vZGUiCittc2dzdHIgInTDuXkgY2jhu41uIC0tcG9pbnRzLWF0IGNo4buJIGNobyBwaMOpcCBkw7luZyB0cm9uZyBjaOG6vyDEkeG7mSBsaeG7h3Qga8OqIgorCisjOiBidWlsdGluL3RhZy5jOjUxMgorbXNnaWQgIi0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zIGFyZSBvbmx5IGFsbG93ZWQgaW4gbGlzdCBtb2RlIgorbXNnc3RyICIiCisidMO5eSBjaOG7jW4gLS1tZXJnZWQgdsOgIC0tbm8tbWVyZ2VkIGNo4buJIGNobyBwaMOpcCBkw7luZyB0cm9uZyBjaOG6vyDEkeG7mSBsaeG7h3Qga8OqIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiY2jhu4kgY8OzIG3hu5l0IHTDuXkgY2jhu41uIC1GIGhv4bq3YyAtbSBsw6AgxJHGsOG7o2MgcGjDqXAuIgorCisjOiBidWlsdGluL3RhZy5jOjU0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAicXXDoSBuaGnhu4F1IMSR4buRaSBz4buRIgorCisjOiBidWlsdGluL3RhZy5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSB0aOG6uyBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi90YWcuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgInRo4bq7IOKAnCVz4oCdIMSRw6MgdOG7k24gdOG6oWkgcuG7k2kiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAixJDDoyBj4bqtcCBuaOG6rXQgdGjhursg4oCcJXPigJ0gKHRyxrDhu5tjIGzDoCAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMQorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICLEkGFuZyBnaeG6o2kgbsOpbiBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAidOG6oW8gdGjGsCBt4bulYyBcIiVzXCIgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHThuqFvIHThuq1wIHRpbiAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSB04bqtcCB0aW4gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE1IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSB0aMawIG3hu6VjICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nIG10aW1lIGluICclcycgIgorbXNnc3RyICLEkGFuZyBraeG7g20gdGjhu60gbXRpbWUgdHJvbmcg4oCcJXPigJ0gIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE1NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICJ0aMO0bmcgdGluIHRo4buRbmcga8OqIHRoxrAgbeG7pWMga2jDtG5nIHRoYXkgxJHhu5VpIHNhdSBraGkgdGjDqm0gdOG6rXAgdGluIG3hu5tpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgInRow7RuZyB0aW4gdGjhu5FuZyBrw6ogdGjGsCBt4bulYyBraMO0bmcgdGhheSDEkeG7lWkgc2F1IGtoaSB0aMOqbSB0aMawIG3hu6VjIG3hu5tpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4MAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgInRow7RuZyB0aW4gdGjhu5FuZyBrw6ogdGjGsCBt4bulYyB0aGF5IMSR4buVaSBzYXUga2hpIGPhuq1wIG5o4bqtdCB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTkxCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorInRow7RuZyB0aW4gdGjhu5FuZyBrw6ogdGjGsCBt4bulYyB0aGF5IMSR4buVaSBzYXUga2hpIHRow6ptIHThuq1wIHRpbiBt4bubaSB2w6BvIHRyb25nIHRoxrAgIgorIm3hu6VjIGNvbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgInRow7RuZyB0aW4gdGjhu5FuZyBrw6ogdGjGsCBt4bulYyBraMO0bmcgdGhheSDEkeG7lWkgc2F1IGtoaSB4w7NhIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMTUKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAidGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB0aMawIG3hu6VjIGtow7RuZyB0aGF5IMSR4buVaSBzYXUga2hpIHjDs2EgdGjGsCBt4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMjIKK21zZ2lkICIgT0siCittc2dzdHIgIiDEkOG7k25nIMO9IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU5MQorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1pbmRleCBbPGPDoWMgdMO5eSBjaOG7jW4+XSBbLS1dIFs8dOG6rXAtdGluPuKApl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc0Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICJ0aeG6v3AgdOG7pWMgbMOgbSBt4bubaSBuZ2F5IGPhuqMga2hpIGLhuqNuZyBt4bulYyBs4bulYyBj4bqnbiDEkcaw4bujYyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlZnJlc2g6IGzhu50gxJFpIG3DtC3EkXVuLWNvbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODAKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAia2jDtG5nIGLhu48gcXVhIGPDoWMgdOG6rXAgdGluIG3hu5tpIHThuqFvIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MgorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICLEkeG7gyBjw6FjIHThuq1wIHRpbiB0aGF5IHRo4bq/IGPDoWMgdGjGsCBt4bulYyB2w6Ag4oCcdmljZS12ZXJzYeKAnSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODQKK21zZ2lkICJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJ0aMO0bmcgYsOhbyBjw6FjIHThuq1wLXRpbiB0aGnhur91IHRyb25nIHRoxrAtbeG7pWMgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg2Cittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIiIKKyJsw6BtIHTGsMahaSBt4bubaSB0aOG6rW0gY2jDrSBraGkgYuG6o25nIG3hu6VjIGzhu6VjIGNo4bupYSBjw6FjIG3hu6VjIHRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODkKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgImzhuqV5IGzhuqFpIHRow7RuZyB0aW4gdGjhu5FuZyBrw6oiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkzCittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJnaeG7kW5nIC0tcmVmcmVzaCwgbmjGsG5nIGLhu48gcXVhIGPDoWMgY8OgaSDEkeG6t3Qg4oCcYXNzdW1lLXVuY2hhbmdlZOKAnSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTcKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI8Y2jhur9fxJHhu5k+LDzEkeG7kWlfdMaw4bujbmc+LDzEkcaw4budbmdfZOG6q24+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAidGjDqm0gY8OhYyB04bqtcCB0aW4gxJHDoyBjaOG7iSByYSB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA4Cittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICLEkcOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gbMOgIFwia2jDtG5nIHRoYXkgxJHhu5VpXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxMQorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAieMOzYSBiw610IGFzc3VtZWQtdW5jaGFuZ2VkIChnaeG6oyDEkeG7i25oIGzDoCBraMO0bmcgdGhheSDEkeG7lWkpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMTQKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICLEkcOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gbMOgIOKAnGNo4buJLcSR4buNY+KAnSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDE3Cittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgInjDs2EgYsOtdCBza2lwLXdvcmt0cmVlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjAKK21zZ2lkICJkbyBub3QgdG91Y2ggaW5kZXgtb25seSBlbnRyaWVzIgorbXNnc3RyICLEkeG7q25nIMSR4buZbmcgdsOgbyBjw6FjIG3hu6VjIGluZGV4LW9ubHkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyMgorbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisiY2jhu4kgdGjDqm0gdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWM7IGtow7RuZyB0aMOqbSBu4buZaSBkdW5nIHbDoG8gY8ahIHPhu58gZOG7ryBsaeG7h3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjQKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICIiCisiZ+G7oSBi4buPIGPDoWMgxJHGsOG7nW5nIGThuqtuIMSRxrDhu6NjIMSR4bq3dCB0w6puIHRo4bqtbSBjaMOtIGPhuqMga2hpIG7DsyBoaeG7h24gZGnhu4duIHRyb25nIHRoxrAgbeG7pWMgIgorImzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMjYKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgInbhu5tpIHTDuXkgY2jhu41uIC0tc3RkaW46IGPDoWMgZMOybmcgxJHhuqd1IHbDoG8gxJHGsOG7o2MgY2jhuqVtIGThu6l0IGLhu59pIGvDvSB04buxIG51bGwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAyOAorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIsSR4buNYyBkYW5oIHPDoWNoIMSRxrDhu51uZyBk4bqrbiBj4bqnbiBj4bqtcCBuaOG6rXQgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMzIKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBjw6FjIG3hu6VjIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDM2Cittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICJwaOG7pWMgaOG7k2kgY8OhYyB0cuG6oW5nIHRow6FpICMyIHbDoCAjMyBjaG8gY8OhYyDEkcaw4budbmcgZOG6q24gxJHGsOG7o2MgbGnhu4d0IGvDqiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQwCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgImNo4buJIGPhuq1wIG5o4bqtdCBjw6FjIG3hu6VjIHRpbiBtw6AgbsOzIGtow6FjIGJp4buHdCBzbyB24bubaSBIRUFEIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJi4buPIHF1YSBjw6FjIHThuq1wLXRpbiB0aGnhur91IHRyb25nIHRoxrAtbeG7pWMgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA0NworbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiYsOhbyBjw6FvIGPDoWMgdGhhbyB0w6FjIHJhIHRoaeG6v3QgYuG7iyB4deG6pXQgY2h14bqpbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDQ5Cittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihjaG8g4oCccG9yY2VsYWluc+KAnSkgcXXDqm4gY8OhYyB4dW5nIMSR4buZdCBjaMawYSDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCDEkcOjIGdoaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDUzCittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgImdoaSBt4bulYyBs4bulYyDhu58gxJHhu4tuaCBk4bqhbmcgbsOgeSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDU1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgImLhuq10L3Thuq90IGNoaWEgY+G6r3QgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTcKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgImLhuq10L3Thuq90IGLhu5kgxJHhu4dtIGtow7RuZyB0aGVvIHbhur90IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNTkKK21zZ2lkICJ0ZXN0IGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAia2nhu4NtIHRyYSB4ZW0gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjw7MgaOG7lyB0cuG7oyDEkeG7h20ga2jDtG5nIHRoZW8gZMO1aSBoYXkga2jDtG5nIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNjEKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiYuG6rXQgYuG7mSDEkeG7h20ga2jDtG5nIHRoZW8gduG6v3QgbcOgIGtow7RuZyBraeG7g20gdHJhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2MworbXNnaWQgIndyaXRlIG91dCB0aGUgaW5kZXggZXZlbiBpZiBpcyBub3QgZmxhZ2dlZCBhcyBjaGFuZ2VkIgorbXNnc3RyICJnaGkgcmEgbeG7pWMgbOG7pWMgbmdheSBj4bqjIGtoaSBraMO0bmcgxJHGsOG7o2MgxJHDoW5oIGPhu50gbMOgIGPDsyB0aGF5IMSR4buVaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY1Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgZmlsZSBzeXN0ZW0gbW9uaXRvciIKK21zZ3N0ciAiYuG6rXQvdOG6r3QgdGhlbyBkw7VpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTA2NworbXNnaWQgIm1hcmsgZmlsZXMgYXMgZnNtb25pdG9yIHZhbGlkIgorbXNnc3RyICLEkcOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gbMOgIGjhu6NwIGzhu4cgZnNtb25pdG9yIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICJ4w7NhIGLDrXQgaOG7o3AgbOG7hyBmc21vbml0b3IiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE3MworbXNnaWQgIiIKKyJjb3JlLnNwbGl0SW5kZXggaXMgc2V0IHRvIGZhbHNlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImVuYWJsZSBzcGxpdCBpbmRleCIKK21zZ3N0ciAiIgorImNvcmUuc3BsaXRJbmRleCDEkcaw4bujYyDEkeG6t3QgbMOgIHNhaTsgeMOzYSBi4buPIGhheSB0aGF5IMSR4buVaSBuw7MsIG7hur91IGLhuqFuIHRo4buxYyBz4buxICIKKyJtdeG7kW4gYuG6rXQgY2hpYSB0w6FjaCBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTgyCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50IHRvICIKKyJkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisiY29yZS5zcGxpdEluZGV4IMSRxrDhu6NjIMSR4bq3dCBsw6AgxJHDum5nOyB4w7NhIGLhu48gaGF5IHRoYXkgxJHhu5VpIG7DsywgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgIgorIm114buRbiB04bqvdCBjaGlhIHTDoWNoIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExOTQKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gdHJ1ZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBkaXNhYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIMSRxrDhu6NjIMSR4bq3dCBsw6AgxJHDum5nOyB4w7NhIGLhu48gaGF5IHRoYXkgxJHhu5VpIG7DsywgbuG6v3UgYuG6oW4gdGjhu7FjICIKKyJz4buxIG114buRbiB04bqvdCBi4buZIMSR4buHbSBjaMawYSB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5OAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiTmjhu5sgxJHhu4dtIGtow7RuZyB0aGVvIHbhur90IGLhu4sgdOG6r3QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIwNgorbXNnaWQgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIGlzIHNldCB0byBmYWxzZTsgcmVtb3ZlIG9yIGNoYW5nZSBpdCwgaWYgeW91IHJlYWxseSB3YW50ICIKKyJ0byBlbmFibGUgdGhlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgxJHGsOG7o2MgxJHhurd0IGzDoCBzYWk7IHjDs2EgYuG7jyBoYXkgdGhheSDEkeG7lWkgbsOzLCBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSAiCisibXXhu5FuIGLhuq10IGLhu5kgxJHhu4dtIGNoxrBhIHRoZW8gZMO1aSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBlbmFibGVkIGZvciAnJXMnIgorbXNnc3RyICJOaOG7myDEkeG7h20ga2jDtG5nIHRoZW8gduG6v3QgxJHGsOG7o2MgYuG6rXQgY2hvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICIiCisiY29yZS5mc21vbml0b3IgY2jGsGEgxJHGsOG7o2MgxJHhurd0OyDEkeG6t3QgbsOzIG7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiBi4bqtdCB0aGVvIGTDtWkgaOG7hyAiCisidGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyMgorbXNnaWQgImZzbW9uaXRvciBlbmFibGVkIgorbXNnc3RyICJmc21vbml0b3IgxJHGsOG7o2MgYuG6rXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgIiIKKyJjb3JlLmZzbW9uaXRvciDEkcOjIMSRxrDhu6NjIMSR4bq3dDsgYuG7jyDEkeG6t3QgbsOzIG7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiBi4bqtdCB0aGVvIGTDtWkgaOG7hyAiCisidGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyOQorbXNnaWQgImZzbW9uaXRvciBkaXNhYmxlZCIKK21zZ3N0ciAiZnNtb25pdG9yIGLhu4sgdOG6r3QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPGPDoWMgdMO5eSBjaOG7jW4+XSAtZCA8cmVmbmFtZT4gWzxiaeG6v24tY8WpPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxjw6FjIHTDuXkgY2jhu41uPl0gICAgPHJlZm5hbWU+IDxiaeG6v24tbeG7m2k+IFs8Ymnhur9uLWPFqT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxjw6FjIHTDuXkgY2jhu41uPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjQKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAieMOzYSB0aGFtIGNoaeG6v3UiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICJj4bqtcCBuaOG6rXQgPHTDqm4tdGhhbS1jaGnhur91PiBraMO0bmcgcGjhuqNpIGPDoWkgbsOzIGNo4buJIHThu5tpIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICLEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIGPDsyBjw6FjIMSR4buRaSBz4buRIMSRxrDhu6NjIGNo4bqlbSBk4bupdCBi4bufaSBOVUwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIgorbXNnc3RyICLEkeG7jWMgY+G6rXAgbmjhuq10IHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE1Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IGPDoWMgdOG6rXAgdGluIHRow7RuZyB0aW4gdOG7qyDEkWnhu4NtIHh14bqldCBwaMOhdCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjExCittc2dpZCAiZ2l0IHVwbG9hZC1wYWNrIFs8b3B0aW9ucz5dIDxkaXI+IgorbXNnc3RyICJnaXQgdXBsb2FkLXBhY2sgWzxjw6FjIHTDuXkgY2jhu41uPl0gPC/Ekcaw4budbmcvZOG6q24+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICJ0aG/DoXQgc2F1IGtoaSBt4buZdCB0cmFvIMSR4buVaSB5w6p1IGPhuqd1IGhheSB0cuG6oyBs4budaSDEkcahbiIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI1Cittc2dpZCAiZXhpdCBpbW1lZGlhdGVseSBhZnRlciBpbml0aWFsIHJlZiBhZHZlcnRpc2VtZW50IgorbXNnc3RyICJ0aG/DoXQgbmdheSBzYXUga2hpIGto4bufaSB04bqhbyBxdeG6o25nIGPDoW8gdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjcKK21zZ2lkICJkbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkiCittc2dzdHIgIsSR4burbmcgdGjhu60gPHRoxrBfbeG7pWM+Ly5naXQvIG7hur91IDx0aMawX23hu6VjPiBraMO0bmcgcGjhuqNpIGzDoCB0aMawIG3hu6VjIEdpdCIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI5Cittc2dpZCAiaW50ZXJydXB0IHRyYW5zZmVyIGFmdGVyIDxuPiBzZWNvbmRzIG9mIGluYWN0aXZpdHkiCittc2dzdHIgIm5n4bqvdCB0cnV54buBbiB0aMO0bmcgc2F1IDxuPiBnacOieSBraMO0bmcgaG/huqF0IMSR4buZbmciCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjE5Cittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjY4Cittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbuG7mWkgZHVuZyBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OSBidWlsdGluL3ZlcmlmeS10YWcuYzozNworbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiaW4ga+G6v3QgeHXhuqV0IHRy4bqhbmcgdGjDoWkgZ3BnIGThuqFuZyB0aMO0IgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTUKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPGfDs2k+4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjUKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJjaGkgdGnhur90IgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIHRo4buRbmcga8OqIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9PMSR4buLbmhfZOG6oW5nPl0gPHRo4bq7PuKApiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzYKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgImhp4buDbiB0aOG7iyBu4buZaSBkdW5nIGPhu6dhIHRo4bq7IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTcKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8L8SRxrDhu51uZy9k4bqrbj4gWzxjb21taXQtaXNoPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPGPDoWMgdMO5eSBjaOG7jW4+XSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE5Cittc2dpZCAiZ2l0IHdvcmt0cmVlIGxvY2sgWzxvcHRpb25zPl0gPHBhdGg+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgbG9jayBbPGPDoWMgdMO5eSBjaOG7jW4+XSA8L8SRxrDhu51uZy9k4bqrbj4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMAorbXNnaWQgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIG1vdmUgPHdvcmt0cmVlPiA8L8SRxrDhu51uZy9k4bqrbi9t4bubaT4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8Y8OhYyB0w7l5IGNo4buNbj5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjIKK21zZ2lkICJnaXQgd29ya3RyZWUgcmVtb3ZlIFs8b3B0aW9ucz5dIDx3b3JrdHJlZT4iCittc2dzdHIgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxjw6FjIHTDuXkgY2jhu41uPl0gPHdvcmt0cmVlPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzCittc2dpZCAiZ2l0IHdvcmt0cmVlIHVubG9jayA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSB1bmxvY2sgPC/Ekcaw4budbmcvZOG6q24+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjAgYnVpbHRpbi93b3JrdHJlZS5jOjg5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB4w7NhIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIkfhu6EgYuG7jyBjw6J5IGzDoG0gdmnhu4djLyVzOiBraMO0bmcgcGjhuqNpIGzDoCB0aMawIG3hu6VjIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYy8lczoga2jDtG5nIGPDsyB04bqtcCB0aW4gZ2l0ZGlyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTAgYnVpbHRpbi93b3JrdHJlZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiR+G7oSBi4buPIGPDonkgbMOgbSB2aeG7h2MvJXM6IGtow7RuZyB0aOG7gyDEkeG7jWMgdOG6rXAgdGluIGdpdGRpciAoJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHNob3J0IHJlYWQgKGV4cGVjdGVkICU8UFJJdU1BWD4gYnl0ZXMsIHJlYWQgIgorIiU8UFJJdU1BWD4pIgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYy8lczogxJHhu41jIG5n4bqvbiAoY+G6p24gJTxQUkl1TUFYPiBieXRlLCDEkeG7jWMgJTxQUkl1TUFYPikiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYy8lczogdOG6rXAgdGluIGdpdGRpciBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIkfhu6EgYuG7jyBjw6J5IGzDoG0gdmnhu4djLyVzOiB04bqtcCB0aW4gZ2l0ZGlyIGNo4buJIMSR4bq/biB24buLIHRyw60ga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY1Cittc2dpZCAicmVwb3J0IHBydW5lZCB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJiw6FvIGPDoW8gY8OhYyBjw6J5IGzDoG0gdmnhu4djIMSRw6MgcHJ1bmUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNjcKK21zZ2lkICJleHBpcmUgd29ya2luZyB0cmVlcyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiY8OhYyBjw6J5IGzDoG0gdmnhu4djIGjhur90IGjhuqFuIGPFqSBoxqFuIGtob+G6o25nIDx0aOG7nWkgZ2lhbj4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi4oCcJXPigJ0gxJHDoyBjw7MgdOG7qyB0csaw4bubYyBy4buTaSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmUtYWRkIHdvcmt0cmVlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB0aMOqbS1s4bqhaSBjw6J5IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGlzIGEgbWlzc2luZyBidXQgbG9ja2VkIHdvcmt0cmVlO1xuIgorInVzZSAnYWRkIC1mIC1mJyB0byBvdmVycmlkZSwgb3IgJ3VubG9jaycgYW5kICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyLigJwlc+KAnSBi4buLIG3huqV0IG5oxrBuZyBjw6J5IGzDoG0gdmnhu4djIGLhu4sga2jDs2E7XG4iCisiZMO5bmcg4oCcYWRkIC1mIC1m4oCdIMSR4buDIGdoaSDEkcOoLCBob+G6t2Mg4oCcdW5sb2Nr4oCdIHbDoCDigJxwcnVuZeKAnSBoYXkg4oCccmVtb3Zl4oCdIMSR4buDIHjDs2EiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaXMgYSBtaXNzaW5nIGJ1dCBhbHJlYWR5IHJlZ2lzdGVyZWQgd29ya3RyZWU7XG4iCisidXNlICdhZGQgLWYnIHRvIG92ZXJyaWRlLCBvciAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisi4oCcJXPigJ0gYuG7iyBt4bqldCBuaMawbmcgY8OieSBsw6BtIHZp4buHYyDEkcOjIMSRxrDhu6NjIMSRxINuZyBrw707XG4iCisiZMO5bmcg4oCcYWRkIC1m4oCdIMSR4buDIGdoaSDEkcOoLCBob+G6t2Mg4oCccHJ1bmXigJ0gaGF5IOKAnHJlbW92ZeKAnSDEkeG7gyB4w7NhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyB0aMawIG3hu6VjIGPhu6dhIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDM5IGJ1aWx0aW4vd29ya3RyZWUuYzo0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChuZXcgYnJhbmNoICclcycpIgorbXNnc3RyICLEkGFuZyBjaHXhuqluIGLhu4sgY8OieSBsw6BtIHZp4buHYyAobmjDoW5oIG3hu5tpIOKAnCVz4oCdKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKHJlc2V0dGluZyBicmFuY2ggJyVzJzsgd2FzIGF0ICVzKSIKK21zZ3N0ciAixJBhbmcgY2h14bqpbiBi4buLIGPDonkgbMOgbSB2aeG7h2MgKMSRYW5nIGPDoGkgxJHhurd0IG5ow6FuaCDigJwlc+KAnSwgdHLGsOG7m2MgxJHDonkgdOG6oWkgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoY2hlY2tpbmcgb3V0ICclcycpIgorbXNnc3RyICLEkGFuZyBjaHXhuqluIGLhu4sgY8OieSBsw6BtIHZp4buHYyAoxJFhbmcgbOG6pXkgcmEg4oCcJXPigJ0pIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAoZGV0YWNoZWQgSEVBRCAlcykiCittc2dzdHIgIsSQYW5nIGNodeG6qW4gYuG7iyBjw6J5IGzDoG0gdmnhu4djIChIRUFEIMSRw6MgdMOhY2ggcuG7nWkg4oCcJXPigJ0pIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICJs4bqleSByYSA8bmjDoW5oPiBuZ2F5IGPhuqMga2hpIG7DsyDEkcOjIMSRxrDhu6NjIGzhuqV5IHJhIOG7nyBjw6J5IGzDoG0gdmnhu4djIGtow6FjIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAwCittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAidOG6oW8gbmjDoW5oIG3hu5tpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTAyCittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICJ04bqhbyBoYXkgxJHhurd0IGzhuqFpIG3hu5l0IG5ow6FuaCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNAorbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICJkaSBjaHV54buDbiBjw6J5IGzDoG0gdmnhu4djIG3hu5tpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA1Cittc2dpZCAia2VlcCB0aGUgbmV3IHdvcmtpbmcgdHJlZSBsb2NrZWQiCittc2dzdHIgImdp4buvIGPDonkgbMOgbSB2aeG7h2MgbeG7m2kgYuG7iyBraMOzYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwOAorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LWJyYW5jaCgxKSkiCittc2dzdHIgImPDoGkgxJHhurd0IGNo4bq/IMSR4buZIHRoZW8gZMO1aSAoeGVtIGdpdC1icmFuY2goMSkpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTExCittc2dpZCAidHJ5IHRvIG1hdGNoIHRoZSBuZXcgYnJhbmNoIG5hbWUgd2l0aCBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgImPDsyBraOG7m3AgdMOqbiB0w6puIG5ow6FuaCBt4bubaSB24bubaSBt4buZdCBuaMOhbmggdGhlbyBkw7VpIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTkKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIC1iLCAtQiwgdsOgIC0tZGV0YWNoIGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1ODAKK21zZ2lkICItLVtuby1ddHJhY2sgY2FuIG9ubHkgYmUgdXNlZCBpZiBhIG5ldyBicmFuY2ggaXMgY3JlYXRlZCIKK21zZ3N0ciAiLS1bbm8tXXRyYWNrIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBkw7luZyBu4bq/dSBt4buZdCBuaMOhbmggbeG7m2kgxJHGsOG7o2MgdOG6oW8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2ODAKK21zZ2lkICJyZWFzb24gZm9yIGxvY2tpbmciCittc2dzdHIgImzDvSBkbyBraMOzYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5MiBidWlsdGluL3dvcmt0cmVlLmM6NzI1IGJ1aWx0aW4vd29ya3RyZWUuYzo3OTkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiVzIGtow7RuZyBwaOG6o2kgbMOgIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTQgYnVpbHRpbi93b3JrdHJlZS5jOjcyNworbXNnaWQgIlRoZSBtYWluIHdvcmtpbmcgdHJlZSBjYW5ub3QgYmUgbG9ja2VkIG9yIHVubG9ja2VkIgorbXNnc3RyICJDw6J5IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgY2jDrW5oIGtow7RuZyB0aOG7gyBraMOzYSBoYXkgYuG7jyBraMOzYSDEkcaw4bujYyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICLigJwlc+KAnSDEkcOjIMSRxrDhu6NjIGtow7NhIHLhu5NpLCBsw70gZG86ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIuKAnCVz4oCdIMSRw6MgxJHGsOG7o2Mga2jDs2EgcuG7k2kiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgbG9ja2VkIgorbXNnc3RyICLigJwlc+KAnSBjaMawYSBi4buLIGtow7NhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzcwCittc2dpZCAid29ya2luZyB0cmVlcyBjb250YWluaW5nIHN1Ym1vZHVsZXMgY2Fubm90IGJlIG1vdmVkIG9yIHJlbW92ZWQiCittc2dzdHIgImPDonkgbMOgbSB2aeG7h2MgY8OzIGNo4bupYSBtw7QtxJF1bi1jb24ga2jDtG5nIHRo4buDIGRpIGNodXnhu4NuIGhheSB4w7NhIGLhu48iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzgKK21zZ2lkICJmb3JjZSBtb3ZlIGV2ZW4gaWYgd29ya3RyZWUgaXMgZGlydHkgb3IgbG9ja2VkIgorbXNnc3RyICLDqXAgYnXhu5ljIG5nYXkgY+G6oyBraGkgY8OieSBsw6BtIHZp4buHYyDEkWFuZyBi4bqpbiBoYXkgYuG7iyBraMOzYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwMSBidWlsdGluL3dvcmt0cmVlLmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYSBtYWluIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi4oCcJXPigJ0gbMOgIGPDonkgbMOgbSB2aeG7h2MgY2jDrW5oIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmaWd1cmUgb3V0IGRlc3RpbmF0aW9uIG5hbWUgZnJvbSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDoWMgaOG7jWEgcmEgdMOqbiDEkcOtY2ggxJHhur9uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLEkcOtY2gg4oCcJXPigJ0gxJHDoyB04buTbiB04bqhaSBy4buTaSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlLCBsb2NrIHJlYXNvbjogJXNcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBkaSBjaHV54buDbiBt4buZdCBjw6J5LWzDoG0tdmnhu4djIGLhu4sga2jDs2EsIGtow7NhIHbDrDogJXNcbiIKKyJkw7luZyDigJxtb3ZlIC1mIC1m4oCdIMSR4buDIGdoaSDEkcOoIGhv4bq3YyBt4bufIGtow7NhIHRyxrDhu5tjIMSRw6MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjIKK21zZ2lkICIiCisiY2Fubm90IG1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAnbW92ZSAtZiAtZicgdG8gb3ZlcnJpZGUgb3IgdW5sb2NrIGZpcnN0IgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIGRpIGNodXnhu4NuIG3hu5l0IGPDonktbMOgbS12aeG7h2MgYuG7iyBraMOzYTtcbiIKKyJkw7luZyDigJxtb3ZlIC1mIC1m4oCdIMSR4buDIGdoaSDEkcOoIGhv4bq3YyBt4bufIGtow7NhIHRyxrDhu5tjIMSRw6MiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCBtb3ZlIHdvcmtpbmcgdHJlZTogJXMiCittc2dzdHIgInRo4bqpbSB0cmEgZ+G6t3AgbOG7l2ksIGtow7RuZyB0aOG7gyBkaSBjaHV54buDbiBt4buZdCBjw6J5LWzDoG0tdmnhu4djOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBjaHV54buDbiDigJwlc+KAnSBzYW5nIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBydW4gJ2dpdCBzdGF0dXMnIG9uICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBjaOG6oXkg4oCcZ2l0IHN0YXR1c+KAnSB2w6BvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY29udGFpbnMgbW9kaWZpZWQgb3IgdW50cmFja2VkIGZpbGVzLCB1c2UgLS1mb3JjZSB0byBkZWxldGUgaXQiCittc2dzdHIgIiIKKyLigJwlc+KAnSBjw7MgY2jhu6lhIGPDoWMgdOG6rXAgdGluIMSRw6MgYuG7iyBz4butYSBjaOG7r2EgaG/hurdjIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSwgaMOjeSBkw7luZyAtLSIKKyJmb3JjZSDEkeG7gyB4w7NhIG7DsyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgY2jhuqF5IOKAnGdpdCBzdGF0dXPigJ0gdHJvbmcg4oCcJXPigJ0sIG3DoyAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxMAorbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIsOpcCBideG7mWMgZGkgY2h1eeG7g24gdGjhuq1tIGNow60gY+G6oyBraGkgY8OieSBsw6BtIHZp4buHYyDEkWFuZyBi4bqpbiBoYXkgYuG7iyBraMOzYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgeMOzYSBi4buPIG3hu5l0IGPDonktbMOgbS12aeG7h2MgYuG7iyBraMOzYSwga2jDs2EgdsOsOiAlc1xuIgorImTDuW5nIOKAnHJlbW92ZSAtZiAtZuKAnSDEkeG7gyBnaGkgxJHDqCBob+G6t2MgbeG7nyBraMOzYSB0csaw4bubYyDEkcOjIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTM1Cittc2dpZCAiIgorImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlO1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgeMOzYSBi4buPIG3hu5l0IGPDonktbMOgbS12aeG7h2MgYuG7iyBraMOzYTtcbiIKKyJkw7luZyDigJxyZW1vdmUgLWYgLWbigJ0gxJHhu4MgZ2hpIMSRw6ggaG/hurdjIG3hu58ga2jDs2EgdHLGsOG7m2MgxJHDoyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ2YWxpZGF0aW9uIGZhaWxlZCwgY2Fubm90IHJlbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICJ0aOG6qW0gdHJhIGfhurdwIGzhu5dpLCBraMO0bmcgdGjhu4MgZ+G7oSBi4buPIG3hu5l0IGPDonktbMOgbS12aeG7h2M6ICVzIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxNQorbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHRp4buBbi104buRPi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPHRp4buBbiB04buRPi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI5Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJnaGkgxJHhu5FpIHTGsOG7o25nIGPDonkgKHRyZWUpIGNobyA8dGnhu4FuIHThu5E+IHRoxrAgbeG7pWMgY29uIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMQorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgImNo4buJIGjhu691IMOtY2gga2hpIGPhuqduIGfhu6EgbOG7l2kiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAnbWFyaycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICJD4bqnbiBs4buHbmggJ21hcmsnLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjICVzIgorCisjOiBmYXN0LWltcG9ydC5jOjMxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgJ3RvJyBjb21tYW5kLCBnb3QgJXMiCittc2dzdHIgIkPhuqduIGzhu4duaCAndG8nLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjICVzIgorCisjOiBmYXN0LWltcG9ydC5jOjMyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmVhdHVyZSAnJXMnIGZvcmJpZGRlbiBpbiBpbnB1dCB3aXRob3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIgorbXNnc3RyICIiCisidMOtbmggbsSDbmcgJyAlcyAnIGLhu4sgY+G6pW0gY2jhu4kgdHJvbmcgxJHhuqd1IHbDoG8gbcOgIGtow7RuZyBjw7MgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHBlcm1pc3Npb25zIG9uIHlvdXIgc29ja2V0IGRpcmVjdG9yeSBhcmUgdG9vIGxvb3NlOyBvdGhlclxuIgorInVzZXJzIG1heSBiZSBhYmxlIHRvIHJlYWQgeW91ciBjYWNoZWQgY3JlZGVudGlhbHMuIENvbnNpZGVyIHJ1bm5pbmc6XG4iCisiXG4iCisiXHRjaG1vZCAwNzAwICVzIgorbXNnc3RyICIiCisiUXV54buBbiBo4bqhbiB0csOqbiB0aMawIG3hu6VjIGfDs2kgbeG6oW5nIGPhu6dhIGLhuqFuIGtow7RuZyBjaMOtbmggeMOhYzsgbmfGsOG7nWkgZMO5bmdcbiIKKyJraMOhYyBjw7MgbOG6vSBjw7MgdGjhu4MgxJHhu41jIMSRxrDhu6NjIGNo4bupbmcgdGjGsCDEkcaw4bujYyBsxrB1IMSR4buHbSBj4bunYSBi4bqhbi4gQ8OibiBuaOG6r2MgY2jhuqF5OlxuIgorIlxuIgorIlx0Y2htb2QgMDcwMCAlcyIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjcyCittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiaW4gdGjDtG5nIHRpbiBn4buhIGzhu5dpIHJhIMSR4bqndSByYSBs4buXaSB0acOqdSBjaHXhuqluIgorCisjOiB0L2hlbHBlci90ZXN0LXJlYWNoLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyAlcyBjaMawYSDEkcaw4bujYyDEkcOhbmggZOG6pXUgbMOgIHRp4bq/cCBj4bqtbiDEkcaw4bujYyIKKworIzogdC9oZWxwZXIvdGVzdC1yZWFjaC5jOjE2MgorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgbWFya2VkIHJlYWNoYWJsZSIKK21zZ3N0ciAiY8OzIHF1w6Egbmhp4buBdSBs4bqnbiBjaHV54buDbiBnaWFvIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBsw6AgdGnhur9wIGPhuq1uIMSRxrDhu6NjIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6NworbXNnaWQgInRlc3QtdG9vbCBzZXJ2ZS12MiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAidGVzdC10b29sIHNlcnZlLXYyIFs8Y8OhYyB0w7l5IGNo4buNbj5dIgorCisjOiB0L2hlbHBlci90ZXN0LXNlcnZlLXYyLmM6MTkKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIKK21zZ3N0ciAidGhvw6F0IG5nYXkgc2F1IGtoaSBraOG7n2kgdOG6oW8gcXXhuqNuZyBjw6FvIGNhcGFiaWxpdGllcyIKKworIzogZ2l0LmM6MjcKK21zZ2lkICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8cGF0aD5dIFstYyA8bmFtZT49PHZhbHVlPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXVxuIgorIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC1QIHwgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PHBhdGg+XSBbLS13b3JrLXRyZWU9PHBhdGg+XSBbLS1uYW1lc3BhY2U9PG5hbWU+XVxuIgorIiAgICAgICAgICAgPGNvbW1hbmQ+IFs8YXJncz5dIgorbXNnc3RyICIiCisiZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdIFstQyA8L8SRxrDhu51uZy9k4bqrbi8+XSBbLWMgPHTDqm4+PTxnacOhIHRy4buLPl1cbiIKKyIgICAgICAgICAgIFstLWV4ZWMtcGF0aFs9PC/Ekcaw4budbmcvZOG6q24vPl1dIFstLWh0bWwtcGF0aF0gWy0tbWFuLXBhdGhdIFstLWluZm8tIgorInBhdGhdXG4iCisiICAgICAgICAgICBbLXAgfCAtLXBhZ2luYXRlIHwgLVAgLS1uby1wYWdlcl0gWy0tbm8tcmVwbGFjZS1vYmplY3RzXSBbLS0iCisiYmFyZV1cbiIKKyIgICAgICAgICAgIFstLWdpdC1kaXI9PC/Ekcaw4budbmcvZOG6q24vPl0gWy0td29yay10cmVlPTwvxJHGsOG7nW5nL2ThuqtuLz5dIFstLSIKKyJuYW1lc3BhY2U9PHTDqm4+XVxuIgorIiAgICAgICAgICAgPGzhu4duaD4gWzxjw6FjIHRoYW0gc+G7kT5dIgorCisjOiBnaXQuYzozNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuXG4iCisiU2VlICdnaXQgaGVscCBnaXQnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgc3lzdGVtLiIKK21zZ3N0ciAiIgorIuKAnGdpdCBoZWxwIC1h4oCdIHbDoCDigJxnaXQgaGVscCAtZ+KAnSBsaeG7h3Qga8OqIGPDoWMgY8OidSBs4buHbmggY29uIHPhurVuIGPDsyB2w6AgbeG7mXQgc+G7kVxuIgorImjGsOG7m25nIGThuqtuIHbhu4Ega2jDoWkgbmnhu4dtLiBYZW0g4oCcZ2l0IGhlbHAgPGzhu4duaD7igJ0gaGF5IOKAnGdpdCBoZWxwIDxraMOhaS1uaeG7h20+4oCdXG4iCisixJHhu4MgeGVtIGPDoWMgxJHhurdjIHThuqMgY2hvIGzhu4duaCBoYXkga2jDoWkgbmnhu4dtIGPhu6UgdGjhu4MuXG4iCisiWGVtICdnaXQgaGVscCBnaXQnIMSR4buDIGJp4bq/dCB04buVbmcgcXVhbiBj4bunYSBo4buHIHRo4buRbmcuIgorCisjOiBnaXQuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXJcbiIKK21zZ3N0ciAiY2jGsGEgY2jhu4kgcmEgdGjGsCBt4bulYyBjaG8gLS1naXQtZGlyXG4iCisKKyM6IGdpdC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBuYW1lc3BhY2UgZ2l2ZW4gZm9yIC0tbmFtZXNwYWNlXG4iCittc2dzdHIgImNoxrBhIMSRxrBhIHJhIGtow7RuZyBnaWFuIGzDoG0gdmnhu4djIGNobyAtLW5hbWVzcGFjZVxuIgorCisjOiBnaXQuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXdvcmstdHJlZVxuIgorbXNnc3RyICJjaMawYSDEkcawYSByYSBjw6J5IGzDoG0gdmnhu4djIGNobyAtLXdvcmstdHJlZVxuIgorCisjOiBnaXQuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJlZml4IGdpdmVuIGZvciAtLXN1cGVyLXByZWZpeFxuIgorbXNnc3RyICJjaMawYSDEkcawYSByYSB0aeG7gW4gdOG7kSBjaG8gLS1zdXBlci1wcmVmaXhcbiIKKworIzogZ2l0LmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIi1jIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIHN0cmluZ1xuIgorbXNnc3RyICItYyBj4bqnbiBt4buZdCBjaHXhu5dpIGPhuqV1IGjDrG5oXG4iCisKKyM6IGdpdC5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DXG4iCittc2dzdHIgImNoxrBhIMSRxrBhIHJhIHRoxrAgbeG7pWMgY2hvIC1DXG4iCisKKyM6IGdpdC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbjogJXNcbiIKKworIzogZ2l0LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIgorbXNnc3RyICJ0cm9uZyBraGkgdHJp4buDbiBraGFpIGLDrSBkYW5oIOKAnCVz4oCdOiDigJwlc+KAnSIKKworIzogZ2l0LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJhbGlhcyAnJXMnIGNoYW5nZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgorIllvdSBjYW4gdXNlICchZ2l0JyBpbiB0aGUgYWxpYXMgdG8gZG8gdGhpcyIKK21zZ3N0ciAiIgorImLDrSBkYW5oIOKAnCVz4oCdIHRoYXkgxJHhu5VpIGJp4bq/biBtw7RpIHRyxrDhu51uZy5cbiIKKyJC4bqhbiBjw7MgdGjhu4Mgc+G7rSBk4bulbmcg4oCcIWdpdOKAnSB0cm9uZyDEkeG6t3QgYsOtIGRhbmggxJHhu4MgbMOgbSB2aeG7h2MgbsOgeSIKKworIzogZ2l0LmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGFsaWFzIGZvciAlcyIKK21zZ3N0ciAibMOgbSB0cuG7kW5nIGLDrSBkYW5oIGNobyAlcyIKKworIzogZ2l0LmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBhbGlhczogJXMiCittc2dzdHIgIsSR4buHIHF1eSBjw6FjIGLDrSBkYW5oOiAlcyIKKworIzogZ2l0LmM6NDU5Cittc2dpZCAid3JpdGUgZmFpbHVyZSBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImzhu5dpIGdoaSBuZ2hpw6ptIHRyb25nIHRyw6puIMSR4bqndSByYSB0acOqdSBjaHXhuqluIgorCisjOiBnaXQuYzo0NjEKK21zZ2lkICJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJs4buXaSBuZ2hpw6ptIHRy4buNbmcgY2jGsGEgYmnhur90IGtoaSBnaGkgcmEgxJHhuqd1IHJhIHRpw6p1IGNodeG6qW4iCisKKyM6IGdpdC5jOjQ2MworbXNnaWQgImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkcOzbmcgxJHhuqd1IHJhIHRpw6p1IGNodeG6qW4iCisKKyM6IGdpdC5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YgJyVzJyBkb2VzIG5vdCB0ZXJtaW5hdGU6JXMiCittc2dzdHIgIiIKKyJkw7IgdMOsbSB0aOG6pXkgY8OhYyBiw60gZGFuaCBxdeG6qW4gdHLDsm46IGJp4buDdSB0aOG7qWMgY+G7p2Eg4oCcJXPigJ0ga2jDtG5nIGPDsyDEkWnhu4NtIGvhur90OiVzIgorCisjOiBnaXQuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iCittc2dzdHIgImtow7RuZyB0aOG7gyB44butIGzDvSAlcyBuaMawIGzDoCBt4buZdCBwaOG6p24gYuG7lSBzdW5nIgorCisjOiBnaXQuYzo4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVzYWdlOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiY8OhY2ggZMO5bmc6ICVzXG4iCisiXG4iCisKKyM6IGdpdC5jOjg3NgorIywgYy1mb3JtYXQKK21zZ2lkICJleHBhbnNpb24gb2YgYWxpYXMgJyVzJyBmYWlsZWQ7ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGtoYWkgdHJp4buDbiBiw60gZGFuaCDigJwlc+KAnTsg4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgbOG7h25oIGdpdFxuIgorCisjOiBnaXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBjaOG6oXkgbOG7h25oIOKAnCVz4oCdOiAlc1xuIgorCisjOiBodHRwLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5lZ2F0aXZlIHZhbHVlIGZvciBodHRwLnBvc3RidWZmZXI7IGRlZmF1bHRpbmcgdG8gJWQiCittc2dzdHIgImdpw6EgdHLhu4sgw6JtIGNobyBodHRwLnBvc3RidWZmZXI7IMSR4bq3dCB0aMOgbmggbeG6t2MgxJHhu4tuaCBsw6AgJWQiCisKKyM6IGh0dHAuYzozOTkKK21zZ2lkICJEZWxlZ2F0aW9uIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCB3aXRoIGNVUkwgPCA3LjIyLjAiCittc2dzdHIgIsSQaeG7gXUga2hp4buDbiBnaWFvIHF1eeG7gW4ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgduG7m2kgY1VSTCA8IDcuMjIuMCIKKworIzogaHR0cC5jOjQwOAorbXNnaWQgIlB1YmxpYyBrZXkgcGlubmluZyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiQ2jhu5F0IGtow7NhIGPDtG5nIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHbhu5tpIGNVUkwgPCA3LjQ0LjAiCisKKyM6IGh0dHAuYzo4NzYKK21zZ2lkICJDVVJMU1NMT1BUX05PX1JFVk9LRSBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuNDQuMCIKK21zZ3N0ciAiQ1VSTFNTTE9QVF9OT19SRVZPS0Uga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgduG7m2kgY1VSTCA8IDcuNDQuMCIKKworIzogaHR0cC5jOjk0OQorbXNnaWQgIlByb3RvY29sIHJlc3RyaWN0aW9ucyBub3Qgc3VwcG9ydGVkIHdpdGggY1VSTCA8IDcuMTkuNCIKK21zZ3N0ciAiQ8OhYyBo4bqhbiBjaOG6vyBnaWFvIHRo4bupYyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyB24bubaSBjVVJMIDwgNy4xOS40IgorCisjOiBodHRwLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBTU0wgYmFja2VuZCAnJXMnLiBTdXBwb3J0ZWQgU1NMIGJhY2tlbmRzOiIKK21zZ3N0ciAiIgorIktow7RuZyBo4buXIHRy4bujIOG7qW5nIGThu6VuZyBTU0wgY2jhuqF5IHBow61hIHNhdSDigJwlc+KAnS4gSOG7lyB0cuG7oyDhu6luZyBk4bulbmcgU1NMIGNo4bqheSBwaMOtYSAiCisic2F1OiIKKworIzogaHR0cC5jOjEwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBTU0wgYmFja2VuZCB0byAnJXMnOiBjVVJMIHdhcyBidWlsdCB3aXRob3V0IFNTTCBiYWNrZW5kcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyDEkeG6t3Qg4bupbmcgZOG7pW5nIGNo4bqheSBTU0wgcGjDrWEgc2F1IOKAnCVz4oCdOiBjVVJMIMSRxrDhu6NjIGJpw6puIGThu4tjaCBraMO0bmcgY8OzICIKKyJz4buxIGjhu5cgdHLhu6Mg4bupbmcgZOG7pW5nIGNo4bqheSBwaMOtYSBzYXUgU1NMIgorCisjOiBodHRwLmM6MTA5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0IFNTTCBiYWNrZW5kIHRvICclcyc6IGFscmVhZHkgc2V0IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhurd0IOG7qW5nIGThu6VuZyBjaOG6oXkgc2F1IFNTTCBjaG8g4oCcJXPigJ06IMSRw6MgxJHhurd0IHLhu5NpIgorCisjOiBodHRwLmM6MTk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5hYmxlIHRvIHVwZGF0ZSB1cmwgYmFzZSBmcm9tIHJlZGlyZWN0aW9uOlxuIgorIiAgYXNrZWQgZm9yOiAlc1xuIgorIiAgIHJlZGlyZWN0OiAlcyIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgZOG7sWEgdHLDqm4gY8ahIHPhu58gdXJsIHThu6sgY2h1eeG7g24gaMaw4bubbmc6XG4iCisiICAgICAgaOG7j2kgY2hvOiAlc1xuIgorIiBjaHV54buDbiBoxrDhu5tuZzogJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcXVvdGluZyBpbiBwdXNoLW9wdGlvbiB2YWx1ZTogJyVzJyIKK21zZ3N0ciAic2FpIHRyw61jaCBk4bqrbiB0cm9uZyBnacOhIHRy4buLIHB1c2gtb3B0aW9uIDrigJwlc+KAnSIKKworIzogcmVtb3RlLWN1cmwuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNpbmZvL3JlZnMgbm90IHZhbGlkOiBpcyB0aGlzIGEgZ2l0IHJlcG9zaXRvcnk/IgorbXNnc3RyICIlc2luZm8vcmVmcyBraMO0bmcgaOG7o3AgbOG7hzogxJHDonkgY8OzIHBo4bqjaSBsw6AgbeG7mXQga2hvIGdpdD8iCisKKyM6IHJlbW90ZS1jdXJsLmM6MzY0Cittc2dpZCAiaW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2U7IGV4cGVjdGVkIHNlcnZpY2UsIGdvdCBmbHVzaCBwYWNrZXQiCittc2dzdHIgIiIKKyLEkcOhcCDhu6luZyB04burIG3DoXkgcGjhu6VjIHbhu6Uga2jDtG5nIGjhu6NwIGzhu4c7IGPhuqduIGThu4tjaCB24bulLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIGfDs2kgIgorImZsdXNoIgorCisjOiByZW1vdGUtY3VybC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZ290ICclcyciCittc2dzdHIgInRy4bqjIHbhu4EgY+G7p2EgbcOheSBwaOG7pWMgduG7pSBraMO0bmcgaOG7o3AgbOG7hzsgbmjhuq1uIMSRxrDhu6NjICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgbm90IGZvdW5kIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkga2hvIOKAnCVz4oCdIgorCisjOiByZW1vdGUtY3VybC5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICclcyciCittc2dzdHIgIljDoWMgdGjhu7FjIGfhurdwIGzhu5dpIGNobyDigJwlc+KAnSIKKworIzogcmVtb3RlLWN1cmwuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRydXkgY+G6rXAg4oCcJXPigJ06ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWRpcmVjdGluZyB0byAlcyIKK21zZ3N0ciAiY2h1eeG7g24gaMaw4bubbmcgxJHhur9uICVzIgorCisjOiByZW1vdGUtY3VybC5jOjU5MworbXNnaWQgInNob3VsZG4ndCBoYXZlIEVPRiB3aGVuIG5vdCBnZW50bGUgb24gRU9GIgorbXNnc3RyICJraMO0bmcgbsOqbiBjw7MgRU9GIGtoaSBraMO0bmcgZ2VudGxlIHRyw6puIEVPRiIKKworIzogcmVtb3RlLWN1cmwuYzo2NzMKK21zZ2lkICJ1bmFibGUgdG8gcmV3aW5kIHJwYyBwb3N0IGRhdGEgLSB0cnkgaW5jcmVhc2luZyBodHRwLnBvc3RCdWZmZXIiCittc2dzdHIgImtow7RuZyB0aOG7gyB0dWEgbOG6oWkgZOG7ryBsaeG7h3UgcG9zdCBycGMgLSB0aOG7rSB0xINuZyBodHRwLnBvc3RCdWZmZXIiCisKKyM6IHJlbW90ZS1jdXJsLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJQQyBmYWlsZWQ7ICVzIgorbXNnc3RyICJSUEMgZ+G6t3AgbOG7l2k7ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjc3MworbXNnaWQgImNhbm5vdCBoYW5kbGUgcHVzaGVzIHRoaXMgYmlnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeOG7rSBsw70gxJHhuql5IGPDoWkgbOG7m24gbsOgeSIKKworIzogcmVtb3RlLWN1cmwuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBkZWZsYXRlIGVycm9yICVkIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2nhuqNpIG7DqW4gecOqdSBj4bqndTsgY8OzIGzhu5dpIGtoaSBnaeG6o2kgbsOpbiBj4bunYSB6bGliICVkIgorCisjOiByZW1vdGUtY3VybC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGVuZCBlcnJvciAlZCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdp4bqjaSBuw6luIHnDqnUgY+G6p3U7IGPDsyBs4buXaSDhu58gY3Xhu5FpICVkIgorCisjOiByZW1vdGUtY3VybC5jOjEwMjMKK21zZ2lkICJkdW1iIGh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjYXBhYmlsaXRpZXMiCittc2dzdHIgIsSR4buVIHbhuq1uIGNodXnhu4NuIGh0dHAga2jDtG5nIGjhu5cgdHLhu6Mga2jhuqMgbsSDbmcgbsO0bmciCisKKyM6IHJlbW90ZS1jdXJsLmM6MTAzNworbXNnaWQgImZldGNoIGZhaWxlZC4iCittc2dzdHIgImzhuqV5IHbhu4EgZ+G6t3AgbOG7l2kuIgorCisjOiByZW1vdGUtY3VybC5jOjEwODUKK21zZ2lkICJjYW5ub3QgZmV0Y2ggYnkgc2hhMSBvdmVyIHNtYXJ0IGh0dHAiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB24buBIGLhurFuZyBzaGExIHRow7RuZyBxdWEgc21hcnQgaHR0cCIKKworIzogcmVtb3RlLWN1cmwuYzoxMTI5IHJlbW90ZS1jdXJsLmM6MTEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgc2hhL3JlZiwgZ290ICclcyciCittc2dzdHIgImzhu5dpIGdpYW8gdGjhu6ljOiBj4bqnbiBzaGEvcmVmLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIOKAnCVz4oCdIgorCisjOiByZW1vdGUtY3VybC5jOjExNDcgcmVtb3RlLWN1cmwuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgInbhuq1uIGNodXnhu4NuIGh0dHAga2jDtG5nIGjhu5cgdHLhu6MgJXMiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTE4MworbXNnaWQgImdpdC1odHRwLXB1c2ggZmFpbGVkIgorbXNnc3RyICJnaXQtaHR0cC1wdXNoIGfhurdwIGzhu5dpIgorCisjOiByZW1vdGUtY3VybC5jOjEzNjcKK21zZ2lkICJyZW1vdGUtY3VybDogdXNhZ2U6IGdpdCByZW1vdGUtY3VybCA8cmVtb3RlPiBbPHVybD5dIgorbXNnc3RyICJyZW1vdGUtY3VybDogdXNhZ2U6IGdpdCByZW1vdGUtY3VybCA8bcOheSBjaOG7pz4gWzx1cmw+XSIKKworIzogcmVtb3RlLWN1cmwuYzoxMzk5Cittc2dpZCAicmVtb3RlLWN1cmw6IGVycm9yIHJlYWRpbmcgY29tbWFuZCBzdHJlYW0gZnJvbSBnaXQiCittc2dzdHIgInJlbW90ZS1jdXJsOiBn4bq3cCBs4buXaSBraGkgxJHhu41jIGx14buTbmcgZOG7ryBsaeG7h3UgbOG7h25oIHThu6sgZ2l0IgorCisjOiByZW1vdGUtY3VybC5jOjE0MDYKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICJyZW1vdGUtY3VybDogxJHDoyBj4buRIGfhuq9uZyBmZXRjaCBtw6Aga2jDtG5nIGPDsyBraG8gbuG7mWkgYuG7mSIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmw6IGtow7RuZyBoaeG7g3UgbOG7h25oIOKAnCVz4oCdIHThu6sgZ2l0IgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgImPDoWNfdGhhbV9z4buRIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgImzhu41jIMSR4buRaSB0xrDhu6NuZyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE4MworbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJuZ8OgeSBo4bq/dCBo4bqhbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE5NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAibm8tb3AgKHTGsMahbmcgdGjDrWNoIG5nxrDhu6NjKSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMwOQorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAiY2hpIHRp4bq/dCBoxqFuIG7hu69hIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzExCittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAiaW0gbOG6t25nIGjGoW4gbuG7r2EiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMTcKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAic+G7rSBk4bulbmcgPG4+IGNo4buvIHPhu5EgxJHhu4MgaGnhu4NuIHRo4buLIFNIQS0xcyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNgorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgImzDoG0gdGjhur8gbsOgbyDEkeG7gyBj4bqvdCBi4buPIGtob+G6o25nIHRy4bqvbmcgdsOgICNnaGljaMO6IHThu6sgbeG6qXUgdGluIG5o4bqvbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNworbXNnaWQgInJlYWQgcGF0aHNwZWMgZnJvbSBmaWxlIgorbXNnc3RyICLEkeG7jWMgxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIHThu6sgdOG6rXAgdGluIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MzM4Cittc2dpZCAiIgorIndpdGggLS1wYXRoc3BlYy1mcm9tLWZpbGUsIHBhdGhzcGVjIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisiduG7m2kgLS1wYXRoc3BlYy1mcm9tLWZpbGUsIGPDoWMgcGjhuqduIHThu60gxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIGLhu4sgbmfEg24gY8OhY2ggYuG7n2kga8O9ICIKKyJ04buxIE5VTEwiCisKKyM6IHJlZi1maWx0ZXIuaDoxMDEKK21zZ2lkICJrZXkiCittc2dzdHIgImtow7NhIgorCisjOiByZWYtZmlsdGVyLmg6MTAxCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICJ0w6puIHRyxrDhu51uZyBj4bqnbiBz4bqvcCB44bq/cCIKKworIzogcmVyZXJlLmg6NDQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgImPhuq1wIG5o4bqtdCBi4bqjbmcgbeG7pWMgbOG7pWMgduG7m2kgcGjDom4gZ2nhuqNpIHh1bmcgxJHhu5l0IGTDuW5nIGzhuqFpIG7hur91IMSRxrDhu6NjIgorCisjOiB3dC1zdGF0dXMuaDo2NworbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIMSRxrDhu6NjIHTDoWNoIHLhu51pIHThuqFpICIKKworIzogd3Qtc3RhdHVzLmg6NjgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIMSRxrDhu6NjIHTDoWNoIHLhu51pIHThu6sgIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MAorbXNnaWQgIkFkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiVGjDqm0gbuG7mWkgZHVuZyB04bqtcCB0aW4gdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjUxCittc2dpZCAiQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCIKK21zZ3N0ciAiw4FwIGThu6VuZyBt4buZdCBjaHXhu5dpIGPDoWMgbWnhur9uZyB2w6AgdOG7qyBt4buZdCBtYWlsYm94IgorCisjOiBjb21tYW5kLWxpc3QuaDo1MgorbXNnaWQgIkFubm90YXRlIGZpbGUgbGluZXMgd2l0aCBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIkPDoWMgZMOybmcgZGnhu4VuIGdp4bqjaSB04bqtcCB0aW4gduG7m2kgdGjDtG5nIHRpbiBjaHV54buDbiBnaWFvIgorCisjOiBjb21tYW5kLWxpc3QuaDo1MworbXNnaWQgIkFwcGx5IGEgcGF0Y2ggdG8gZmlsZXMgYW5kL29yIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorIsOBcCBk4bulbmcgbeG7mXQgbWnhur9uZyB2w6EgY2hvIGPDoWMgdOG6rXAgdGluIMSRw6MgY2jhu4kgcmEgdsOgL2hv4bq3YyB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogY29tbWFuZC1saXN0Lmg6NTQKK21zZ2lkICJJbXBvcnQgYSBHTlUgQXJjaCByZXBvc2l0b3J5IGludG8gR2l0IgorbXNnc3RyICJOaOG6rXAgbeG7mXQga2hvIEdOVSBBcmNoIHbDoG8gbeG7mXQga2hvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NTUKK21zZ2lkICJDcmVhdGUgYW4gYXJjaGl2ZSBvZiBmaWxlcyBmcm9tIGEgbmFtZWQgdHJlZSIKK21zZ3N0ciAiVOG6oW8gbeG7mXQga2hvIG7DqW4gY8OhYyB04bqtcCB0aW4gdOG7qyBjw6J5IGzDoG0gdmnhu4djIGPDsyB0w6puIgorCisjOiBjb21tYW5kLWxpc3QuaDo1NgorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgIlTDrG0ga2nhur9tIGThuqFuZyBuaOG7iyBwaMOibiDEkeG7gyB0w6xtIHJhIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgbyDEkcawYSByYSBs4buXaSIKKworIzogY29tbWFuZC1saXN0Lmg6NTcKK21zZ2lkICJTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUiCittc2dzdHIgIiIKKyJIaeG7g24gdGjhu4sgc+G7kSBoaeG7h3UgcGhpw6puIGLhuqNuIHbDoCB0w6FjIGdp4bqjIHPhu61hIMSR4buVaSBjdeG7kWkgY2hvIHThu6tuZyBkw7JuZyBj4bunYSBt4buZdCB04bqtcCAiCisidGluIgorCisjOiBjb21tYW5kLWxpc3QuaDo1OAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJMaeG7h3Qga8OqLCB04bqhbyBoYXkgbMOgIHjDs2EgY8OhYyBuaMOhbmgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjU5Cittc2dpZCAiTW92ZSBvYmplY3RzIGFuZCByZWZzIGJ5IGFyY2hpdmUiCittc2dzdHIgIkRpIGNodXnhu4NuIGPDoWMgxJHhu5FpIHTGsOG7o25nIHbDoCB0aGFtIGNoaeG6v3UgdGhlbyBraG8gbMawdSIKKworIzogY29tbWFuZC1saXN0Lmg6NjAKK21zZ2lkICJQcm92aWRlIGNvbnRlbnQgb3IgdHlwZSBhbmQgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzIgorbXNnc3RyICJDdW5nIGPhuqVwIG7hu5lpIGR1bmcgaG/hurdjIHRow7RuZyB0aW4gduG7gSBraeG7g3UgdsOgIGPhu6EgY2hvIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtobyIKKworIzogY29tbWFuZC1saXN0Lmg6NjEKK21zZ2lkICJEaXNwbGF5IGdpdGF0dHJpYnV0ZXMgaW5mb3JtYXRpb24iCittc2dzdHIgIkhp4buDbiB0aOG7iyB0aMO0bmcgdGluIGdpdGF0dHJpYnV0ZXMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjYyCittc2dpZCAiRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcyIKK21zZ3N0ciAiR+G7oSBs4buXaSBjw6FjIHThuq1wIHRpbiBnaXRpZ25vcmUgLyBleGNsdWRlIgorCisjOiBjb21tYW5kLWxpc3QuaDo2MworbXNnaWQgIlNob3cgY2Fub25pY2FsIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgY29udGFjdHMiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0w6puIHbDoCDEkeG7i2EgY2jhu4kgdGjGsCDEkWnhu4duIHThu60gY+G7p2EgY8OhYyBsacOqbiBo4buHIGThuqFuZyBjaHXhuqluIGjDs2EiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY0Cittc2dpZCAiU3dpdGNoIGJyYW5jaGVzIG9yIHJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJDaHV54buDbiBjw6FjIG5ow6FuaCBob+G6t2MgcGjhu6VjIGjhu5NpIGzhuqFpIGPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY1Cittc2dpZCAiQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJTYW8gY2jDqXAgY8OhYyB04bqtcCB0aW4gdOG7qyBt4bulYyBs4bulYyByYSBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBjb21tYW5kLWxpc3QuaDo2NgorbXNnaWQgIkVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBuYW1lIGlzIHdlbGwgZm9ybWVkIgorbXNnc3RyICLEkOG6o20gYuG6o28gcuG6sW5nIG3hu5l0IHTDqm4gdGhhbSBjaGnhur91IOG7nyBk4bqhbmcgdGjhu6ljIHThu5F0IgorCisjOiBjb21tYW5kLWxpc3QuaDo2NworbXNnaWQgIkZpbmQgY29tbWl0cyB5ZXQgdG8gYmUgYXBwbGllZCB0byB1cHN0cmVhbSIKK21zZ3N0ciAiVMOsbSBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gY8OybiBjaMawYSDEkcaw4bujYyDDoXAgZOG7pW5nIGzDqm4gdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjY4Cittc2dpZCAiQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIsOBcCBk4bulbmcgY8OhYyB0aGF5IMSR4buVaSDEkcaw4bujYyDEkcawYSByYSBi4bufaSBt4buZdCBz4buRIGzhuqduIGNodXnhu4NuIGdpYW8gc+G6tW4gY8OzIgorCisjOiBjb21tYW5kLWxpc3QuaDo2OQorbXNnaWQgIkdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0IgorbXNnc3RyICJUxrDGoW5nIHTDoWMgxJHhu5MgaOG7jWEgduG7m2kgZ2l0LWNvbW1pdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzAKK21zZ2lkICJSZW1vdmUgdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiR+G7oSBi4buPIGPDoWMgdOG6rXAgdGluIGtow7RuZyDEkcaw4bujYyB0aGVvIGTDtWkgdOG7qyBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBjb21tYW5kLWxpc3QuaDo3MQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiTmjDom4gYuG6o24gbeG7mXQga2hvIGNo4bupYSDEkeG6v24gbeG7mXQgdGjGsCBt4bulYyBt4bubaSIKKworIzogY29tbWFuZC1saXN0Lmg6NzIKK21zZ2lkICJEaXNwbGF5IGRhdGEgaW4gY29sdW1ucyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGThu68gbGnhu4d1IGThuqFuZyBjw6FjIGPhu5l0IgorCisjOiBjb21tYW5kLWxpc3QuaDo3MworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJHaGkgY8OhYyB0aGF5IMSR4buVaSB2w6BvIGtobyBjaOG7qWEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc0Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBHaXQgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICJHaGkgdsOgIHRo4bqpbSB0cmEgY8OhYyB04bqtcCB0aW4gxJHhu5MgaOG7jWEgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6NzUKK21zZ2lkICJDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAiVOG6oW8gbeG7mXQgxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc2Cittc2dpZCAiR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucyIKK21zZ3N0ciAiTOG6pXkgdsOgIMSR4bq3dCBraG8gaG/hurdjIGPDoWMgdMO5eSBjaOG7jW4gdG/DoG4gY+G7pWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjc3Cittc2dpZCAiQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24iCittc2dzdHIgIiIKKyLEkOG6v20gc+G7kSBsxrDhu6NuZyDEkeG7kWkgdMaw4bujbmcgY2jGsGEgxJHGsOG7o2MgxJHDs25nIGfDs2kgdsOgIG3hu6ljIHRpw6p1IGTDuW5nIMSRxKlhIGPhu6dhIGNow7puZyIKKworIzogY29tbWFuZC1saXN0Lmg6NzgKK21zZ2lkICJSZXRyaWV2ZSBhbmQgc3RvcmUgdXNlciBjcmVkZW50aWFscyIKK21zZ3N0ciAiTmjhuq1uIHbDoCBsxrB1IGNo4bupbmcgbmjhuq1uIGPhu6dhIG5nxrDhu51pIGTDuW5nIgorCisjOiBjb21tYW5kLWxpc3QuaDo3OQorbXNnaWQgIkhlbHBlciB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYXNzd29yZHMgaW4gbWVtb3J5IgorbXNnc3RyICJC4buZIGjhu5cgdHLhu6MgxJHhu4MgbMawdSBt4bqtdCBraOG6qXUgdOG6oW0gdGjhu51pIHRyb25nIGLhu5kgbmjhu5siCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgwCittc2dpZCAiSGVscGVyIHRvIHN0b3JlIGNyZWRlbnRpYWxzIG9uIGRpc2siCittc2dzdHIgIkLhu5kgaOG7lyB0cuG7oyDEkeG7gyBsxrB1IGNo4bupbmcgbmjhuq1uIHbDoG8gxJHEqWEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgxCittc2dpZCAiRXhwb3J0IGEgc2luZ2xlIGNvbW1pdCB0byBhIENWUyBjaGVja291dCIKK21zZ3N0ciAiWHXhuqV0IG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gdGjDoG5oIG3hu5l0IGzhuqduIGzhuqV5IHJhIENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6ODIKK21zZ2lkICJTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZSIKK21zZ3N0ciAiWGVtIHjDqXQgZ2nDoSB0cuG7iyBk4buvIGxp4buHdSBj4bunYSBi4bqhbiBraOG7j2kgbmfGsOG7nWkga2jDoWMgecOqdSBTQ00gxJHhu4MgZ2jDqXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjgzCittc2dpZCAiQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBHaXQiCittc2dzdHIgIk3hu5l0IGLhu5kgbcO0IHBo4buPbmcgbcOheSBk4buLY2ggduG7pSBDVlMgY2hvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODQKK21zZ2lkICJBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJN4buZdCBtw6F5IHBo4bulYyB24bulIHRo4buxYyBz4buxIMSRxqFuIGdp4bqjbiBkw6BuaCBjaG8ga2hvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6ODUKK21zZ2lkICJHaXZlIGFuIG9iamVjdCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgYmFzZWQgb24gYW4gYXZhaWxhYmxlIHJlZiIKK21zZ3N0ciAiIgorIsSQxrBhIHJhIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBk4buxYSB0csOqbiBt4buZdCB0w6puIOG7nyBk4bqhbmcgY29uIG5nxrDhu51pIMSR4buNYyDEkcaw4bujYyB0csOqbiBt4buZdCAiCisidGhhbSBjaGnhur91IHPhurVuIGPDsyIKKworIzogY29tbWFuZC1saXN0Lmg6ODYKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICIiCisiSGnhu4NuIHRo4buLIGPDoWMgdGhheSDEkeG7lWkgZ2nhu69hIG5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbywgZ2nhu69hIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gIgorInbDoCBjw6J5IGzDoG0gdmnhu4djLCB2LnYuLiIKKworIzogY29tbWFuZC1saXN0Lmg6ODcKK21zZ2lkICJDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgiCittc2dzdHIgIlNvIHPDoW5oIGPDoWMgdOG6rXAgdGluIHRyb25nIGPDonkgbMOgbSB2aeG7h2MgdsOgIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogY29tbWFuZC1saXN0Lmg6ODgKK21zZ2lkICJDb21wYXJlIGEgdHJlZSB0byB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4IgorbXNnc3RyICJTbyBzw6FuaCBjw6FjIGPDonkgdHJvbmcgY8OieSBsw6BtIHZp4buHYyBob+G6t2MgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBjb21tYW5kLWxpc3QuaDo4OQorbXNnaWQgIkNvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzIgorbXNnc3RyICIiCisiU28gc8OhbmggbuG7mWkgZHVuZyB2w6AgY2jhur8gxJHhu5kgY+G7p2EgY8OhYyBibG9iIHTDrG0gdGjhuqV5IHRow7RuZyBxdWEgaGFpIMSR4buRaSB0xrDhu6NuZyBjw6J5IgorCisjOiBjb21tYW5kLWxpc3QuaDo5MAorbXNnaWQgIlNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGPDoWMgdGhheSDEkeG7lWkgc+G7rSBk4bulbmcgY8OhYyBjw7RuZyBj4bulIGRpZmYgY2h1bmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjkxCittc2dpZCAiR2l0IGRhdGEgZXhwb3J0ZXIiCittc2dzdHIgIkLhu5kgeHXhuqV0IGThu68gbGnhu4d1IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6OTIKK21zZ2lkICJCYWNrZW5kIGZvciBmYXN0IEdpdCBkYXRhIGltcG9ydGVycyIKK21zZ3N0ciAi4buobmcgZOG7pW5nIGNo4bqheSBwaMOtYSBzYXUgY2hvIGLhu5kgbmjhuq1wIG5oYW5oIGThu68gbGnhu4d1IEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6OTMKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJU4bqjaSB24buBIGPDoWMgxJHhu5FpIHTGsOG7o25nIHbDoCB0aGFtIGNoaeG6v3UgdOG7qyBraG8gY2jhu6lhIGtow6FjIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NAorbXNnaWQgIlJlY2VpdmUgbWlzc2luZyBvYmplY3RzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJU4bqjaSB24buBIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPDsm4gdGhp4bq/dSB04burIGtobyBjaOG7qWEga2jDoWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk1Cittc2dpZCAiUmV3cml0ZSBicmFuY2hlcyIKK21zZ3N0ciAiTmjhu69uZyBuaMOhbmggZ2hpIGzhuqFpIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NgorbXNnaWQgIlByb2R1Y2UgYSBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiU+G6o24gc2luaCBt4buZdCBnaGkgY2jDuiBs4bqnbiBjaHV54buDbiBnaWFvIGjDsmEgdHLhu5luIgorCisjOiBjb21tYW5kLWxpc3QuaDo5NworbXNnaWQgIk91dHB1dCBpbmZvcm1hdGlvbiBvbiBlYWNoIHJlZiIKK21zZ3N0ciAiWHXhuqV0IHRow7RuZyB0aW4gY2hvIHThu6tuZyB0aGFtIGNoaeG6v3UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjk4Cittc2dpZCAiUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbiIKK21zZ3N0ciAiQ2h14bqpbiBi4buLIGPDoWMgbWnhur9uZyB2w6EgxJHhu4MgZ+G7rWkgcXVhIHRoxrAgxJFp4buHbiB04butIgorCisjOiBjb21tYW5kLWxpc3QuaDo5OQorbXNnaWQgIlZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZSIKK21zZ3N0ciAiIgorIlRo4bqpbSB0cmEgbOG6oWkgdMOtbmgga+G6v3QgbuG7kWkgdsOgIHTDrW5oIGhp4buHdSBs4buxYyBj4bqjdSBjw6FjIMSR4buRaSB0xrDhu6NuZyB0cm9uZyBjxqEgc+G7nyBk4buvICIKKyJsaeG7h3UiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwMAorbXNnaWQgIkNsZWFudXAgdW5uZWNlc3NhcnkgZmlsZXMgYW5kIG9wdGltaXplIHRoZSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJE4buNbiBk4bq5cCBjw6FjIHThuq1wIHRpbiBraMO0bmcgY+G6p24gdGhp4bq/dCB2w6AgdOG7kWkgxrB1IGtobyBu4buZaSBi4buZIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDEKK21zZ2lkICJFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtYXJjaGl2ZSIKK21zZ3N0ciAiIgorIlLDunQgdHLDrWNoIG3DoyBz4buRIGzhuqduIGNodXnhu4NuIGdpYW8gdOG7qyBt4buZdCBraG8gbsOpbiDEkcOjIMSRxrDhu6NjIHThuqFvIGLhu59pIGdpdC1hcmNoaXZlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDIKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkluIHJhIG5o4buvbmcgZMOybmcga2jhu5twIHbhu5tpIG3hu5l0IG3huqt1IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDMKK21zZ2lkICJBIHBvcnRhYmxlIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gR2l0IgorbXNnc3RyICJN4buZdCBnaWFvIGRp4buHbiDEkeG7kyBo4buNYSBraOG6oyBjaHV54buDbiBjaG8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMDQKK21zZ2lkICJDb21wdXRlIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiVMOtbmggdG/DoW4gSUQgxJHhu5FpIHTGsOG7o25nIHbDoCB0w7l5IGNo4buNbiBsw6AgdOG6oW8gbeG7mXQgYmxvYiB04burIG3hu5l0IHThuq1wIHRpbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTA1Cittc2dpZCAiRGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIGFib3V0IEdpdCIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRow7RuZyB0aW4gdHLhu6MgZ2nDunAgduG7gSBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwNgorbXNnaWQgIlNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAiCittc2dzdHIgIlRoaSBow6BuaCBwaMOtYSBtw6F5IGNo4bunIGPhu6dhIEdpdCBxdWEgSFRUUCIKKworIzogY29tbWFuZC1saXN0Lmg6MTA3Cittc2dpZCAiRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUCIKK21zZ3N0ciAiVOG6o2kgduG7gSB04burIG3hu5l0IGtobyBjaOG7qWEgR2l0IHRyw6puIG3huqFuZyB0aMO0bmcgcXVhIEhUVFAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEwOAorbXNnaWQgIlB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAixJDhuql5IGPDoWMgxJHhu5FpIHTGsOG7o25nIGzDqm4gdGjDtG5nIHF1YSBIVFRQL0RBViDEkeG6v24ga2hvIGNo4bupYSBraMOhYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTA5Cittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyIgorbXNnc3RyICIiCisiR+G7rWkgbeG7mXQgYuG7mSBzxrB1IHThuq1wIGPDoWMgbWnhur9uZyB2w6EgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIMSR4bq/biBt4buZdCB0aMawIG3hu6VjIElNQVAiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMAorbXNnaWQgIkJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIljDonkgZOG7sW5nIHThuq1wIHRpbiBt4bulYyBs4bulYyBnw7NpIGNobyBt4buZdCBraG8gbsOpbiDEkcOjIMSRw7NuZyBnw7NpIHPhurVuIGPDsyIKKworIzogY29tbWFuZC1saXN0Lmg6MTExCittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIlThuqFvIG3hu5l0IGtobyBnaXQgbeG7m2kgaGF5IGto4bufaSB04bqhbyBs4bqhaSBt4buZdCBraG8gxJHDoyB04buTbiB04bqhaSB04burIHRyxrDhu5tjIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTIKK21zZ2lkICJJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiIKK21zZ3N0ciAiRHV54buHdCBuZ2F5IGtobyBsw6BtIHZp4buHYyBj4bunYSBi4bqhbiB0cm9uZyBnaXR3ZWIiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExMworbXNnaWQgIkFkZCBvciBwYXJzZSBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGluIGNvbW1pdCBtZXNzYWdlcyIKK21zZ3N0ciAiVGjDqm0gaGF5IHBow6JuIHTDrWNoIHRow7RuZyB0aW4gY+G6pXUgdHLDumMgdHJvbmcgZ2hpIGNow7ogbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogY29tbWFuZC1saXN0Lmg6MTE0Cittc2dpZCAiVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIiCittc2dzdHIgIkLhu5kgZHV54buHbiBraG8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxMTUKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgbmjhuq10IGvDvSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExNgorbXNnaWQgIlNob3cgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJIaeG7g24gdGjhu4sgdGjDtG5nIHRpbiB24buBIGPDoWMgdOG6rXAgdGluIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTE3Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkiCittc2dzdHIgIkxp4buHdCBrw6ogY8OhYyB0aGFtIGNoaeG6v3UgdHJvbmcgbeG7mXQga2hvIGNo4bupYSB0csOqbiBt4bqhbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjExOAorbXNnaWQgIkxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QiCittc2dzdHIgIkxp4buHdCBrw6ogbuG7mWkgZHVuZyBj4bunYSDEkeG7kWkgdMaw4bujbmcgY8OieSIKKworIzogY29tbWFuZC1saXN0Lmg6MTE5Cittc2dpZCAiRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSIKK21zZ3N0ciAiVHLDrWNoIHh14bqldCBtaeG6v25nIHbDoCB2w6Agbmd14buTbiB0w6FjIGdp4bqjIHThu6sgbeG7mXQgdGjGsCDEkWnhu4duIHThu60gxJHGoW4iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMAorbXNnaWQgIlNpbXBsZSBVTklYIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbSIKK21zZ3N0ciAiQ2jGsMahbmcgdHLDrG5oIHBow6JuIHTDoWNoIFVOSVggbWJveCDEkcahbiBnaeG6o24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMQorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJI4bujcCBuaOG6pXQgaGFpIGhheSBuaGnhu4F1IGjGoW4gbOG7i2NoIHPhu60gY+G7p2EgY8OhYyBuaMOgIHBow6F0IHRyaeG7g24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyMgorbXNnaWQgIkZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlIgorbXNnc3RyICJUw6xtIGPDoWMgdOG7lSB0acOqbiBjaHVuZyB04buRdCBjw7MgdGjhu4MgxJHGsOG7o2MgY2hvIGjDsmEgdHLhu5luIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMjMKK21zZ2lkICJSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZSIKK21zZ3N0ciAiQ2jhuqF5IG3hu5l0IGjDsmEgdHLhu5luIHThuq1wIHRpbiDigJwzLcSRxrDhu51uZ+KAnSIKKworIzogY29tbWFuZC1saXN0Lmg6MTI0Cittc2dpZCAiUnVuIGEgbWVyZ2UgZm9yIGZpbGVzIG5lZWRpbmcgbWVyZ2luZyIKK21zZ3N0ciAiQ2jhuqF5IG3hu5l0IGjDsmEgdHLhu5luIGNobyBjw6FjIHThuq1wIHRpbiBj4bqnbiBow7JhIHRy4buZbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI1Cittc2dpZCAiVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleCIKK21zZ3N0ciAiTeG7mXQgY2jGsMahbmcgdHLDrG5oIGjhu5cgdHLhu6MgdGnDqnUgY2h14bqpbiBkw7luZyB24bubaSBnaXQtbWVyZ2UtaW5kZXgiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEyNgorbXNnaWQgIlJ1biBtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIHRvb2xzIHRvIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyICIiCisiQ2jhuqF5IGPDtG5nIGPhu6UgcGjDom4gZ2nhuqNpIHh1bmcgxJHhu5l0IGjDsmEgdHLhu5luIMSR4buDIG3DoCBnaeG6o2kgcXV54bq/dCBjw6FjIHh1bmcgxJHhu5l0IGjDsmEgIgorInRy4buZbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTI3Cittc2dpZCAiU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleCIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGjDsmEgdHLhu5luIGJhLcSRxrDhu51uZyBtw6Aga2jDtG5nIMSR4bulbmcgY2jhuqFtIMSR4bq/biBt4bulYyBs4bulYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTI4Cittc2dpZCAiV3JpdGUgYW5kIHZlcmlmeSBtdWx0aS1wYWNrLWluZGV4ZXMiCittc2dzdHIgIkdoaSB2w6AgdGjhuqltIHRyYSBjw6FjIG11bHRpLXBhY2staW5kZXhlcyIKKworIzogY29tbWFuZC1saXN0Lmg6MTI5Cittc2dpZCAiQ3JlYXRlcyBhIHRhZyBvYmplY3QiCittc2dzdHIgIlThuqFvIG3hu5l0IMSR4buRaSB0xrDhu6NuZyB0aOG6uyIKKworIzogY29tbWFuZC1saXN0Lmg6MTMwCittc2dpZCAiQnVpbGQgYSB0cmVlLW9iamVjdCBmcm9tIGxzLXRyZWUgZm9ybWF0dGVkIHRleHQiCittc2dzdHIgIljDonkgZOG7sW5nIG3hu5l0IHRyZWUtb2JqZWN0IHThu6sgdsSDbiBi4bqjbiDEkeG7i25oIGThuqFuZyBscy10cmVlIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzEKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIkRpIGNodXnhu4NuIGhheSDEkeG7lWkgdMOqbiBt4buZdCB04bqtcCB0aW4sIHRoxrAgbeG7pWMgaG/hurdjIGxpw6puIGvhur90IG3hu4FtIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzIKK21zZ2lkICJGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzIgorbXNnc3RyICJUw6xtIGPDoWMgdMOqbiBsacOqbiBr4bq/dCBt4buBbSBjaG8gxJFp4buDbSB4w6l0IMSRw6MgY2hvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzMKK21zZ2lkICJBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMiCittc2dzdHIgIlRow6ptIGhv4bq3YyDEkWnhu4F1IHRyYSDEkeG7kWkgdMaw4bujbmcgZ2hpIGNow7oiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjEzNAorbXNnaWQgIkltcG9ydCBmcm9tIGFuZCBzdWJtaXQgdG8gUGVyZm9yY2UgcmVwb3NpdG9yaWVzIgorbXNnc3RyICJOaOG6rXAgdsOgbyB04burIHbDoCBn4butaSDEkeG6v24gY8OhYyBraG8gY+G6p24gdGhp4bq/dCIKKworIzogY29tbWFuZC1saXN0Lmg6MTM1Cittc2dpZCAiQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiVOG6oW8gbeG7mXQga2hvIGzGsHUgxJHGsOG7o2MgxJHDs25nIGfDs2kgY2hvIGPDoWMgxJHhu5FpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzYKK21zZ2lkICJGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzIgorbXNnc3RyICJUw6xtIGPDoWMgdOG6rXAgdGluIGfDs2kgZMawIHRo4burYSIKKworIzogY29tbWFuZC1saXN0Lmg6MTM3Cittc2dpZCAiUGFjayBoZWFkcyBhbmQgdGFncyBmb3IgZWZmaWNpZW50IHJlcG9zaXRvcnkgYWNjZXNzIgorbXNnc3RyICLEkMOzbmcgZ8OzaSBjw6FjIHBo4bqnbiDEkeG6p3UgdsOgIHRo4bq7IMSR4buDIHRydXkgY+G6rXAga2hvIGhp4buHdSBxdeG6oyBoxqFuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxMzgKK21zZ2lkICJSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgcmVtb3RlIHJlcG9zaXRvcnkgYWNjZXNzIHBhcmFtZXRlcnMiCittc2dzdHIgIkPDoWMgdGjhu6cgdOG7pWMgxJHhu4MgZ2nDunAgcGjDom4gdMOtY2ggY8OhYyB0aGFtIHPhu5EgdHJ1eSBj4bqtcCBraG8gY2jhu6lhIHRyw6puIG3huqFuZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTM5Cittc2dpZCAiQ29tcHV0ZSB1bmlxdWUgSUQgZm9yIGEgcGF0Y2giCittc2dzdHIgIlTDrW5oIHRvw6FuIElEIGR1eSBuaOG6pXQgY2hvIG3hu5l0IG1p4bq/bmcgdsOhIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDAKK21zZ2lkICJQcnVuZSBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJYw6luIGLhu5t0IHThuqV0IGPDoWMgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIHRp4bq/cCBj4bqtbiDEkcaw4bujYyB04burIGPGoSBz4bufIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTQxCittc2dpZCAiUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzIgorbXNnc3RyICJYw7NhIGLhu48gY8OhYyDEkeG7kWkgdMaw4bujbmcgbeG7nyBy4buZbmcgY8OhaSBtw6AgxJHDoyBz4bq1biBjw7MgdHJvbmcgY8OhYyB04bqtcCB0aW4gZ8OzaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQyCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJM4bqleSB24buBIHbDoCBo4bujcCBuaOG6pXQgduG7m2kga2hvIGtow6FjIGhheSBt4buZdCBuaMOhbmggbuG7mWkgYuG7mSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQzCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJD4bqtcCBuaOG6rXQgdGguY2hp4bq/dSBtw6F5IGNo4bunIGPDuW5nIHbhu5tpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGxpw6puIHF1YW4gxJHhur9uIG7DsyIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ0Cittc2dpZCAiQXBwbGllcyBhIHF1aWx0IHBhdGNoc2V0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLhuqRwIGThu6VuZyBt4buZdCBi4buZIG1p4bq/bmcgdsOhIHF1aWx0IHbDoG8gdHJvbmcgbmjDoW5oIGhp4buHbiBow6BuaCIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ1Cittc2dpZCAiQ29tcGFyZSB0d28gY29tbWl0IHJhbmdlcyAoZS5nLiB0d28gdmVyc2lvbnMgb2YgYSBicmFuY2gpIgorbXNnc3RyICJTbyBzw6FuaCBoYWkgdsO5bmcgY2h1eeG7g24gZ2lhbyAodmQ6IGhhaSBwaGnDqm4gYuG6o24gY+G7p2EgbeG7mXQgbmjDoW5oKSIKKworIzogY29tbWFuZC1saXN0Lmg6MTQ2Cittc2dpZCAiUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleCIKK21zZ3N0ciAixJDhu41jIHRow7RuZyB0aW4gY8OieSB2w6BvIHRyb25nIG3hu6VjIGzhu6VjIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDcKK21zZ2lkICJSZWFwcGx5IGNvbW1pdHMgb24gdG9wIG9mIGFub3RoZXIgYmFzZSB0aXAiCittc2dzdHIgIlRodSBob+G6oWNoIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyB0csOqbiDEkeG7iW5oIGPhu6dhIMSR4bqndSBtw7p0IGPGoSBz4bufIGtow6FjIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNDgKK21zZ2lkICJSZWNlaXZlIHdoYXQgaXMgcHVzaGVkIGludG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIk5o4bqtbiBjw6FpIG3DoCDEkcaw4bujYyDEkeG6qXkgdsOgbyB0cm9uZyBraG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE0OQorbXNnaWQgIk1hbmFnZSByZWZsb2cgaW5mb3JtYXRpb24iCittc2dzdHIgIlF14bqjbiBsw70gdGjDtG5nIHRpbiByZWZsb2ciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MAorbXNnaWQgIk1hbmFnZSBzZXQgb2YgdHJhY2tlZCByZXBvc2l0b3JpZXMiCittc2dzdHIgIlF14bqjbiBsw70gdOG6rXAgaOG7o3AgY8OhYyBraG8gY2jhu6lhIMSRw6MgxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTEKK21zZ2lkICJQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5IgorbXNnc3RyICLEkMOzbmcgZ8OzaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBjaMawYSDEkcOzbmcgZ8OzaSDhu58gbeG7mXQga2hvIGNo4bupYSIKKworIzogY29tbWFuZC1saXN0Lmg6MTUyCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgcmVmcyB0byByZXBsYWNlIG9iamVjdHMiCittc2dzdHIgIlThuqFvLCBsaeG7h3Qga8OqLCB4w7NhIGPDoWMgdGhhbSBjaGnhur91IMSR4buDIHRoYXkgdGjhur8gY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1MworbXNnaWQgIkdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzIgorbXNnc3RyICJU4bqhbyByYSBt4buZdCB0w7NtIHThuq90IGPDoWMgdGhheSDEkeG7lWkgY8OybiB0cmVvIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTQKK21zZ2lkICJSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIgorbXNnc3RyICJEw7luZyBs4bqhaSBjw6FjIGdp4bqjaSBwaMOhcCDEkcOjIGdoaSBs4bqhaSBj4bunYSBjw6FjIGjDsmEgdHLhu5luIGLhu4sgeHVuZyDEkeG7mXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NQorbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLEkOG6t3QgbOG6oWkgSEVBRCBoaeG7h24gaMOgbmggdGjDoG5oIHRy4bqhbmcgdGjDoWkgxJHDoyBjaG8iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NgorbXNnaWQgIlJlc3RvcmUgd29ya2luZyB0cmVlIGZpbGVzIgorbXNnc3RyICJIb8OgbiBuZ3V5w6puIGPDoWMgdOG6rXAgdGluIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1NworbXNnaWQgIlJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMiCittc2dzdHIgIkhvw6BuIGzhuqFpIG3hu5l0IHPhu5EgbOG6p24gY2h1eeG7g24gZ2lhbyBz4bq1biBjw7MiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE1OAorbXNnaWQgIkxpc3RzIGNvbW1pdCBvYmplY3RzIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiTGnhu4d0IGvDqiBjw6FjIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIHRoZW8gdGjhu6kgdOG7sSB0w7Rww7QgxJHhuqNvIG5nxrDhu6NjIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNTkKK21zZ2lkICJQaWNrIG91dCBhbmQgbWFzc2FnZSBwYXJhbWV0ZXJzIgorbXNnc3RyICJD4bqteSByYSB2w6AgeOG7rSBsw70gY8OhYyB0aGFtIHPhu5EiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MAorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJH4buhIGLhu48gY8OhYyB04bqtcCB0aW4gdOG7qyBjw6J5IGzDoG0gdmnhu4djIHbDoCB04burIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTYxCittc2dpZCAiU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBhcyBlbWFpbHMiCittc2dzdHIgIkfhu61pIG3hu5l0IHThuq1wIGjhu6NwIGPhu6dhIGPDoWMgbWnhur9uZyB2w6Eg4bufIGThuqFuZyB0aMawIMSRaeG7h24gdOG7rSIKKworIzogY29tbWFuZC1saXN0Lmg6MTYyCittc2dpZCAiUHVzaCBvYmplY3RzIG92ZXIgR2l0IHByb3RvY29sIHRvIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAixJDhuql5IGPDoWMgxJHhu5FpIHTGsOG7o25nIGzDqm4gdGjDtG5nIHF1YSBnaWFvIHRo4bupYyBHaXQgxJHhur9uIGtobyBjaOG7qWEga2jDoWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2MworbXNnaWQgIlJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdpdC1vbmx5IFNTSCBhY2Nlc3MiCittc2dzdHIgIkjhu4cgduG7jyDEkcSDbmcgbmjhuq1wIGPDsyBo4bqhbiBjaOG6vyBjaG8gdHJ1eSBj4bqtcCBTU0ggY2jhu4ktR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjQKK21zZ2lkICJTdW1tYXJpemUgJ2dpdCBsb2cnIG91dHB1dCIKK21zZ3N0ciAiS+G6v3QgeHXhuqV0IOKAnGdpdCBsb2figJ0gZOG6oW5nIHTDs20gdOG6r3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE2NQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyBraeG7g3Uga2jDoWMgbmhhdSBj4bunYSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTY2Cittc2dpZCAiU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIG5o4buvbmcgbmjDoW5oIHbDoCBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gY+G7p2EgY2jDum5nIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNjcKK21zZ2lkICJTaG93IHBhY2tlZCBhcmNoaXZlIGluZGV4IgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyBtdWMgbOG7pWMga2hvIG7DqW4gxJHDoyDEkcOzbmcgZ8OzaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY4Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIGluIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTGnhu4d0IGvDqiBjw6FjIHRoYW0gY2hp4bq/dSB0cm9uZyBt4buZdCBraG8gbuG7mWkgYuG7mSIKKworIzogY29tbWFuZC1saXN0Lmg6MTY5Cittc2dpZCAiR2l0J3MgaTE4biBzZXR1cCBjb2RlIGZvciBzaGVsbCBzY3JpcHRzIgorbXNnc3RyICJOw6MgY8OgaSDEkeG6t3QgcXXhu5FjIHThur8gaMOzYSBj4bunYSBHaXQgY2hvIHbEg24gbOG7h25oIGjhu4cgduG7jyIKKworIzogY29tbWFuZC1saXN0Lmg6MTcwCittc2dpZCAiQ29tbW9uIEdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZSIKK21zZ3N0ciAiTcOjIGPDoGkgxJHhurd0IHbEg24gbOG7h25oIGjhu4cgduG7jyBHaXQgY2h1bmciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MQorbXNnaWQgIkluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICJLaOG7n2kgdOG6oW8gdsOgIHPhu61hIMSR4buVaSBzcGFyc2UtY2hlY2tvdXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3MgorbXNnaWQgIlN0YXNoIHRoZSBjaGFuZ2VzIGluIGEgZGlydHkgd29ya2luZyBkaXJlY3RvcnkgYXdheSIKK21zZ3N0ciAiVOG6oW0gY+G6pXQgxJFpIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgbeG7mXQgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBi4bqpbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTczCittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIKK21zZ3N0ciAiVGjDqm0gbuG7mWkgZHVuZyB04bqtcCB0aW4gdsOgbyB2w7luZyBi4buHIHBow7NuZyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc0Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4bqhbmcgdGjDoWkgY8OieSBsw6BtIHZp4buHYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTc1Cittc2dpZCAiUmVtb3ZlIHVubmVjZXNzYXJ5IHdoaXRlc3BhY2UiCittc2dzdHIgIljDs2EgYuG7jyBjw6FjIGtob+G6o25nIHRy4bqvbmcga2jDtG5nIGPhuqduIHRoaeG6v3QiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE3NgorbXNnaWQgIkluaXRpYWxpemUsIHVwZGF0ZSBvciBpbnNwZWN0IHN1Ym1vZHVsZXMiCittc2dzdHIgIkto4bufaSB04bqhbywgY+G6rXAgbmjhuq10IGhheSDEkWnhu4F1IHRyYSBjw6FjIG3DtC3EkXVuLWNvbiIKKworIzogY29tbWFuZC1saXN0Lmg6MTc3Cittc2dpZCAiQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBhbmQgR2l0IgorbXNnc3RyICJUaGFvIHTDoWMgaGFpIGjGsOG7m25nIGdp4buvIGhhaSBraG8gU3VidmVyc2lvbiB2w6AgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzgKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMiCittc2dzdHIgIkPDoWMgbmjDoW5oIGNodXnhu4NuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxNzkKK21zZ2lkICJSZWFkLCBtb2RpZnkgYW5kIGRlbGV0ZSBzeW1ib2xpYyByZWZzIgorbXNnc3RyICLEkOG7jWMsIHPhu61hIHbDoCB4w7NhIHRoYW0gY2hp4bq/dSBt4buBbSIKKworIzogY29tbWFuZC1saXN0Lmg6MTgwCittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIlThuqFvLCBsaeG7h3Qga8OqLCB4w7NhIGhheSB4w6FjIHRo4buxYyBt4buZdCDEkeG7kWkgdMaw4bujbmcgdGjhursgxJHGsOG7o2Mga8O9IGLhurFuZyBHUEciCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MQorbXNnaWQgIkNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzIgorbXNnc3RyICJU4bqhbyBt4buZdCB04bqtcCB0aW4gdOG6oW0gduG7m2kgbuG7mWkgZHVuZyBj4bunYSBibG9iIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODIKK21zZ2lkICJVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUiCittc2dzdHIgIkfhu6EgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jhu49pIG3hu5l0IGtobyBsxrB1IMSRw6MgxJHDs25nIGfDs2kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4MworbXNnaWQgIlJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgiCittc2dzdHIgIsSQxINuZyBrw70gbuG7mWkgZHVuZyB04bqtcCB0aW4gdOG7qyBjw6J5IGzDoG0gdmnhu4djIMSR4bq/biBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE4NAorbXNnaWQgIlVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseSIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IHTDqm4gxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIGzGsHUgdHJvbmcgbeG7mXQgdGhhbSBjaGnhur91IG3hu5l0IGPDoWNoIGFuIHRvw6BuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxODUKK21zZ2lkICJVcGRhdGUgYXV4aWxpYXJ5IGluZm8gZmlsZSB0byBoZWxwIGR1bWIgc2VydmVycyIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IHThuq1wIHRpbiB0aMO0bmcgdGluIHBo4bulIHRy4bujIMSR4buDIGdpw7pwIMSR4buhIGPDoWMgZOG7i2NoIHbhu6UgZHVtYiIKKworIzogY29tbWFuZC1saXN0Lmg6MTg2Cittc2dpZCAiU2VuZCBhcmNoaXZlIGJhY2sgdG8gZ2l0LWFyY2hpdmUiCittc2dzdHIgIkfhu61pIHRy4bufIGzhuqFpIGtobyBsxrB1IMSR4bq/biBnaXQtYXJjaGl2ZSIKKworIzogY29tbWFuZC1saXN0Lmg6MTg3Cittc2dpZCAiU2VuZCBvYmplY3RzIHBhY2tlZCBiYWNrIHRvIGdpdC1mZXRjaC1wYWNrIgorbXNnc3RyICJH4butaSB0cuG7nyBs4bqhaSBjw6FjIMSR4buRaSB0xrDhu6NuZyDEkcOjIMSRw7NuZyBnw7NpIGNobyBnaXQtZmV0Y2gtcGFjayIKKworIzogY29tbWFuZC1saXN0Lmg6MTg4Cittc2dpZCAiU2hvdyBhIEdpdCBsb2dpY2FsIHZhcmlhYmxlIgorbXNnc3RyICJIaeG7g24gdGjhu4sgbeG7mXQgYmnhur9uIEdpdCBsdeG6rW4gbMO9IgorCisjOiBjb21tYW5kLWxpc3QuaDoxODkKK21zZ2lkICJDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiBjb21taXRzIgorbXNnc3RyICJLaeG7g20gdHJhIGvDvSBs4bqnbiBjaHV54buDbiBnaWFvIGTDuW5nIEdQRyIKKworIzogY29tbWFuZC1saXN0Lmg6MTkwCittc2dpZCAiVmFsaWRhdGUgcGFja2VkIEdpdCBhcmNoaXZlIGZpbGVzIgorbXNnc3RyICJLaeG7g20gdHJhIGzhuqFpIGPDoWMgdOG6rXAgdGluIGtobyAobMawdSB0cuG7rywgbsOpbikgR2l0IMSRw6MgxJHGsOG7o2MgxJHDs25nIGfDs2kiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5MQorbXNnaWQgIkNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIHRhZ3MiCittc2dzdHIgIktp4buDbSB0cmEgY2jhu68ga8O9IEdQRyBj4bunYSBjw6FjIHRo4bq7IgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTIKK21zZ2lkICJHaXQgd2ViIGludGVyZmFjZSAod2ViIGZyb250ZW5kIHRvIEdpdCByZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHaWFvIGRp4buHbiBHaXQgdHLDqm4gbuG7gW4gd2ViICjhu6luZyBk4bulbmcgd2ViIGNo4bqheSB0csOqbiBraG8gR2l0KSIKKworIzogY29tbWFuZC1saXN0Lmg6MTkzCittc2dpZCAiU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyBuaOG6rXQga8O9IHbhu5tpIHThu6tuZyBs4bqnbiBjaHV54buDbiBnaWFvIGtow6FjIG5oYXUgxJHGsGEgcmEiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NAorbXNnaWQgIk1hbmFnZSBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIgorbXNnc3RyICJRdeG6o24gbMO9IG5oaeG7gXUgY8OieSBsw6BtIHZp4buHYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk1Cittc2dpZCAiQ3JlYXRlIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiVOG6oW8gbeG7mXQgxJHhu5FpIHTGsOG7o25nIGPDonkgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIHN0ZGluIGhp4buHbiB04bqhaSIKKworIzogY29tbWFuZC1saXN0Lmg6MTk2Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAixJDhu4tuaCBuZ2jEqWEgY8OhYyB0aHXhu5ljIHTDrW5oIGNobyBt4buXaSDEkcaw4budbmcgZOG6q24iCisKKyM6IGNvbW1hbmQtbGlzdC5oOjE5NworbXNnaWQgIkdpdCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGFuZCBjb252ZW50aW9ucyIKK21zZ3N0ciAiR2lhbyBkaeG7h24gZMOybmcgbOG7h25oIEdpdCB2w6AgcXV5IMaw4bubYyIKKworIzogY29tbWFuZC1saXN0Lmg6MTk4Cittc2dpZCAiQSBHaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycyIKK21zZ3N0ciAiSMaw4bubbmcgZOG6q24gR2l0IGPGoSBi4bqjbiBjaG8gbmjDoCBwaMOhdCB0cmnhu4NuIgorCisjOiBjb21tYW5kLWxpc3QuaDoxOTkKK21zZ2lkICJHaXQgZm9yIENWUyB1c2VycyIKK21zZ3N0ciAiR2l0IGTDoG5oIGNobyBuaOG7r25nIG5nxrDhu51pIGTDuW5nIENWUyIKKworIzogY29tbWFuZC1saXN0Lmg6MjAwCittc2dpZCAiVHdlYWtpbmcgZGlmZiBvdXRwdXQiCittc2dzdHIgIkNo4buJbmgga+G6v3QgeHXhuqV0IGRpZmYiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMQorbXNnaWQgIkEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzIGZvciBFdmVyeWRheSBHaXQiCittc2dzdHIgIk3hu5l0IHThuq1wIGjhu6NwIGzhu4duaCBo4buvdSBk4bulbmcgdOG7kWkgdGhp4buDdSDEkeG7gyBkw7luZyBHaXQgaMOgbmcgbmfDoHkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMgorbXNnaWQgIkEgR2l0IEdsb3NzYXJ5IgorbXNnc3RyICJUaHXhuq10IG5n4buvIGNodXnDqm4gbcO0biBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwMworbXNnaWQgIkhvb2tzIHVzZWQgYnkgR2l0IgorbXNnc3RyICJDw6FjIG3Ds2MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgYuG7n2kgR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDQKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICJDaOG7iSDEkeG7i25oIGPDoWMgdOG6rXAgdGluIGtow7RuZyBj4bqnbiB0aGVvIGTDtWkiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIwNQorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICLEkOG7i25oIG5naMSpYSB0aHXhu5ljIHTDrW5oIG3DtC3EkXVuLWNvbiIKKworIzogY29tbWFuZC1saXN0Lmg6MjA2Cittc2dpZCAiR2l0IG5hbWVzcGFjZXMiCittc2dzdHIgIktow7RuZyBnaWFuIHTDqm4gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDcKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSBMYXlvdXQiCittc2dzdHIgIkLhu5EgY+G7pWMga2hvIEdpdCIKKworIzogY29tbWFuZC1saXN0Lmg6MjA4Cittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICJDaOG7iSDEkeG7i25oIMSRaeG7g20geMOpdCBkdXnhu4d0IHbDoCB2w7luZyBjaG8gR2l0IgorCisjOiBjb21tYW5kLWxpc3QuaDoyMDkKK21zZ2lkICJNb3VudGluZyBvbmUgcmVwb3NpdG9yeSBpbnNpZGUgYW5vdGhlciIKK21zZ3N0ciAiR+G6r24gbeG7mXQga2hvIGNo4bupYSB2w6BvIHRyb25nIG3hu5l0IGPDoWkga2jDoWMiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdDogcGFydCB0d28iCittc2dzdHIgIkjGsOG7m25nIGThuqtuIGPDoWNoIGTDuW5nIEdpdDogcGjhuqduIGhhaSIKKworIzogY29tbWFuZC1saXN0Lmg6MjExCittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IgorbXNnc3RyICJIxrDhu5tuZyBk4bqrbiBjw6FjaCBkw7luZyBHaXQiCisKKyM6IGNvbW1hbmQtbGlzdC5oOjIxMgorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiVOG7lW5nIHF1YW4gduG7gSBsdeG7k25nIGPDtG5nIHZp4buHYyBraHV54bq/biBuZ2jhu4sgbsOqbiBkw7luZyB24bubaSBHaXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiQuG6oW4gY+G6p24ga2jhu59pIMSR4bqndSBi4bqxbmcgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo2MAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiQuG6oW4gY8OzIG114buRbiB0w7RpIHRo4buxYyBoaeG7h24gxJFp4buBdSBuw6B5IGNobyBi4bqhbiBraMO0bmcgW1kvbl0/ICIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIsSQ4bqndSB2w6BvIHJldiBzYWk6ICRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MTIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYmlzZWN0ZWRfaGVhZCIKK21zZ3N0ciAixJDhuqd1IHbDoG8gcmV2IHNhaTogJGJpc2VjdGVkX2hlYWQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICLEkOG6p3UgdsOgbyByZXYgc2FpOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjEzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIuKAnGdpdCBiaXNlY3QgJFRFUk1fQkFE4oCdIGPDsyB0aOG7gyBs4bqleSBjaOG7iSBt4buZdCDEkeG7kWkgc+G7kS4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjA5Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiQ2jGsGEgY2jhu4kgcmEgdOG6rXAgdGluIGdoaSBuaOG6rXQga8O9IgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyAkZmlsZSDEkeG7gyB0aGFvIGRp4buFbiBs4bqhaSIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IGLhuqFuIMSRYW5nIG7Ds2kgZ8OsIHRo4bq/PyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDEKK21zZ2lkICJiaXNlY3QgcnVuIGZhaWxlZDogbm8gY29tbWFuZCBwcm92aWRlZC4iCittc2dzdHIgImJpc2VjdCBjaOG6oXkgZ+G6t3AgbOG7l2k6IGtow7RuZyDEkcawYSByYSBs4buHbmguIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0NgorIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAixJFhbmcgY2jhuqF5IGzhu4duaCAkY29tbWFuZCIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorImNo4bqheSBiaXNlY3QgZ+G6t3AgbOG7l2k6XG4iCisibcOjIHRy4bqjIHbhu4EgJHJlcyB04burIGzhu4duaCDigJwkY29tbWFuZOKAnSBsw6AgPCAwIGhv4bq3YyA+PSAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgImJpc2VjdCBraMO0bmcgdGjhu4MgdGnhur9wIHThu6VjIHRow6ptIMSRxrDhu6NjIG7hu69hIgorCisjOiBnaXQtYmlzZWN0LnNoOjI4NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJjaOG6oXkgYmlzZWN0IGfhurdwIGzhu5dpOlxuIgorIuKAnWJpc2VjdF9zdGF0ZSAkc3RhdGXigJ0gxJHDoyB0aG/DoXQgcmEgduG7m2kgbcOjIGzhu5dpICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjkyCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICJiaXNlY3QgY2jhuqF5IHRow6BuaCBjw7RuZyIKKworIzogZ2l0LWJpc2VjdC5zaDozMDAKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCittc2dzdHIgIkNow7puZyB0w7RpIGtow7RuZyBiaXNlY3QuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo0NgorbXNnaWQgIiIKKyJFcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorIm1lcmdlIgorbXNnc3RyICIiCisiTOG7l2k6IEPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSBj4bunYSBi4bqhbiB24bubaSBjw6FjIHThuq1wIHRpbiBzYXUgxJHDonkgc+G6vSBi4buLIGdoaSDEkcOoIGLhu59pICIKKyJs4buHbmggaMOyYSB0cuG7mW4iCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjYxCittc2dpZCAiQXV0b21hdGVkIG1lcmdlIGRpZCBub3Qgd29yay4iCittc2dzdHIgIkjDsmEgdHLhu5luIG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZyBraMO0bmcgbMOgbSB2aeG7h2MuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo2MgorbXNnaWQgIlNob3VsZCBub3QgYmUgZG9pbmcgYW4gb2N0b3B1cy4iCittc2dzdHIgIktow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIG3hu5l0IG9jdG9wdXMuIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGzhuqduIGNodXnhu4NuIGdpYW8gY2h1bmcgduG7m2kgJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo3NworIywgc2gtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlIHdpdGggJHByZXR0eV9uYW1lIgorbXNnc3RyICLEkMOjIGPhuq1wIG5o4bqtdCB24bubaSAkcHJldHR5X25hbWUgcuG7k2kiCisKKyM6IGdpdC1tZXJnZS1vY3RvcHVzLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAiQ2h1eeG7g24tdGnhur9wLW5oYW5oIMSR4bq/bjogJHByZXR0eV9uYW1lIgorCisjOiBnaXQtbWVyZ2Utb2N0b3B1cy5zaDo5NworIywgc2gtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoICRwcmV0dHlfbmFtZSIKK21zZ3N0ciAixJBhbmcgdGjhu60gaMOyYSB0cuG7mW4gxJHGoW4gZ2nhuqNuIHbhu5tpICRwcmV0dHlfbmFtZSIKKworIzogZ2l0LW1lcmdlLW9jdG9wdXMuc2g6MTAyCittc2dpZCAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCittc2dzdHIgIkjDsmEgdHLhu5luIMSRxqFuIGdp4bqjbiBraMO0bmcgbMOgbSB2aeG7h2MsIHRo4butIGjDsmEgdHLhu5luIHThu7EgxJHhu5luZy4iCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gYuG6o25nIG3hu6VjIGzhu6VjIHThuqFtIHRo4budaSAoa2jDtG5nIHRo4buDIHjhuqN5IHJhKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyNzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCAkcmVmX3N0YXNoIHbhu5tpICR3X2NvbW1pdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHB1c2gnOiAkb3B0aW9uIgorbXNnc3RyICJs4buXaToga2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiBjaG8g4oCcc3Rhc2ggcHVzaOKAnTogJG9wdGlvbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAkc3Rhc2hfbXNnIgorbXNnc3RyICLEkMOjIGdoaSBs4bqhaSB0aMawIG3hu6VjIGzDoG0gdmnhu4djIHbDoCB0cuG6oW5nIHRow6FpIG3hu6VjIGzhu6VjICRzdGFzaF9tc2ciCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NTM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbjogJG9wdCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgIkNo4buJIHJhIHF1w6Egbmhp4buBdSDEkWnhu4NtIHjDqXQgZHV54buHdDogJFJFViIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIGtow7RuZyBwaOG6o2kgbMOgIHRoYW0gY2hp4bq/dSBo4bujcCBs4buHIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjU5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAi4oCcJGFyZ3PigJ0ga2jDtG5nIHBo4bqjaSBsw6AgbOG6p24gY2h1eeG7g24gZ2lhbyBraeG7g3Utc3Rhc2ggKGPhuqV0IMSRaSkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAi4oCdJGFyZ3PigJ0ga2jDtG5nIHBo4bqjaSB0aGFtIGNoaeG6v3UgxJHhur9uIHN0YXNoIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYxOAorbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgbMOgbSB0xrDGoWkgbeG7m2kgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjYyMgorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMOhcCBk4bulbmcgbeG7mXQgc3Rhc2gg4bufIGdp4buvYSBj4bunYSBxdcOhIHRyw6xuaCBow7JhIHRy4buZbiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzAKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICJYdW5nIMSR4buZdCB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMuIEjDo3kgdGjhu60gbcOgIGtow7RuZyBkw7luZyB0w7l5IGNo4buNbiAtLWluZGV4LiIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2MzIKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIGPDonkgY2jhu4kgbeG7pWMiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjQxCittc2dpZCAiQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2ggZW50cnkiCittc2dzdHIgIktow7RuZyB0aOG7gyBwaOG7pWMgaOG7k2kgY8OhYyB04bqtcCB0aW4gY2jGsGEgdGhlbyBkw7VpIHThu6sgbeG7pWMgY+G6pXQgxJFpIChzdGFzaCkiCisKKyM6IGdpdC1sZWdhY3ktc3Rhc2guc2g6NjY2Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBi4buPIHJhIGto4buPaSBi4buHIHBow7NuZyBjw6FjIHThuq1wIHRpbiDEkcOjIMSRxrDhu6NjIHPhu61hIGNo4buvYSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIsSQw6MgeMOzYSAke1JFVn0gKCRzKSIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogS2jDtG5nIHRo4buDIHjDs2EgYuG7jyBt4bulYyBzdGFzaCIKKworIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3OTIKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIijEkOG7gyBwaOG7pWMgaOG7k2kgbOG6oWkgY2jDum5nIGjDo3kgZ8O1IFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIwMgorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisixJDGsOG7nW5nIGThuqtuIHTGsMahbmcgxJHhu5FpIGNo4buJIGPDsyB0aOG7gyBkw7luZyB04burIHRoxrAgbeG7pWMg4bufIG3hu6ljIGNhbyBuaOG6pXQgY+G7p2EgY8OieSBsw6BtICIKKyJ2aeG7h2MiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjEyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICIiCisicmVwbyBVUkw6IOKAnCRyZXBv4oCdIHBo4bqjaSBsw6AgxJHGsOG7nW5nIGThuqtuIHR1eeG7h3QgxJHhu5FpIGhv4bq3YyBsw6AgYuG6r3QgxJHhuqd1IGLhurFuZyAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi4oCdJHNtX3BhdGjigJ0gdGjhu7FjIHPhu7EgxJHDoyB04buTbiB04bqhaSDhu58gYuG6o25nIG3hu6VjIGzhu6VjIHLhu5NpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorIuKAnSRzbV9wYXRo4oCdIHRo4buxYyBz4buxIMSRw6MgdOG7k24gdOG6oWkg4bufIGLhuqNuZyBt4bulYyBs4bulYyBy4buTaSB2w6Aga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbcO0LcSRdW4tIgorImNvbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAi4oCcJHNtX3BhdGjigJ0ga2jDtG5nIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gxJHGsOG7o2MgbOG6pXkgcmEiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQ3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAiIgorIkPDoWMgxJHGsOG7nW5nIGThuqtuIHRoZW8gc2F1IMSRw6J5IHPhur0gYuG7iyBs4budIMSRaSBi4bufaSBt4buZdCB0cm9uZyBjw6FjIHThuq1wIHRpbiAuZ2l0aWdub3JlICIKKyJj4bunYSBi4bqhbjpcbiIKKyIkc21fcGF0aFxuIgorIlPhu60gZOG7pW5nIC1mIG7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiB0aMOqbSBuw7MgdsOgby4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAixJBhbmcgdGjDqm0gcmVwbyBjw7Mgc+G6tW4gdOG6oWkg4oCcJHNtX3BhdGjigJ0gdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAi4oCdJHNtX3BhdGjigJ0gxJHDoyB04buTbiB04bqhaSB04burIHRyxrDhu5tjIHbDoCBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBraG8gZ2l0IGjhu6NwIGzhu4ciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKyJUaMawIG3hu6VjIGdpdCBjaG8g4oCcJHNtX25hbWXigJ0gxJHGsOG7o2MgdMOsbSB0aOG6pXkgbeG7mXQgY8OhY2ggY+G7pWMgYuG7mSB24bubaSBjw6FjIG3DoXkgY2jhu6c6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIk7hur91IGLhuqFuIG114buRbiBz4butIGThu6VuZyBs4bqhaSB0aMawIG3hu6VjIG7hu5lpIGLhu5kgbsOgeSB0aGF5IHbDrCBuaMOibiBi4bqjbiBs4bqhaSBs4bqnbiBu4buvYSB04burXG4iCisiICAkcmVhbHJlcG9cbiIKKyJkw7luZyB0w7l5IGNo4buNbiDigJwtLWZvcmNl4oCdLiBO4bq/dSB0aMawIG3hu6VjIGdpdCBu4buZaSBi4buZIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGtobyDEkcO6bmdcbiIKKyJob+G6t2MgbMOgIGLhuqFuIGtow7RuZyBjaOG6r2MgY2jhuq9uIMSRaeG7gXUgxJHDsyBuZ2jEqWEgbMOgIGfDrCB0aMOsIGNo4buNbiB0w6puIGtow6FjIHbhu5tpIHTDuXkgIgorImNo4buNbiDigJwtLW5hbWXigJ0uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4OAorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiIgorIlBo4bulYyBo4buTaSBz4buxIGhv4bqhdCDEkeG7mW5nIGPhu6dhIHRoxrAgbeG7pWMgZ2l0IG7hu5lpIGLhu5kgY2hvIG3DtC3EkXVuLWNvbiDigJwkc21fbmFtZeKAnS4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSByYSBtw7QtxJF1bi1jb24g4oCcJHNtX3BhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdGjDqm0gbcO0LcSRdW4tY29uIOKAnCRzbV9wYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHEg25nIGvDvSB24bubaSBo4buHIHRo4buRbmcgbcO0LcSRdW4tY29uIOKAnCRzbV9wYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSDEkWnhu4NtIHjDqXQgZHV54buHdCBoaeG7h24gaMOgbmggdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiAiCisi4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSB24buBIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHNtX3BhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgxJFp4buDbSB4w6l0IGR1eeG7h3QgaGnhu4duIGjDoG5oICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSB0cm9uZyAiCisixJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkc21fcGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc7IHRyeWluZyB0byBkaXJlY3RseSBmZXRjaCAiCisiJHNoYTE6IgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGzhuqV5IHbhu4EgdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ07IHRo4butIGzhuqV5IHbhu4EgdHLhu7FjICIKKyJ0aeG6v3AgJHNoYTE6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkZldGNoZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcsIGJ1dCBpdCBkaWQgbm90IGNvbnRhaW4gJHNoYTEuICIKKyJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorIsSQw6MgbOG6pXkgduG7gSB04burIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1biBjb24g4oCcJGRpc3BsYXlwYXRo4oCdLCBuaMawbmcgbsOzIGtow7RuZyBjaOG7qWEgJHNoYTEuICIKKyJM4bqleSB24buBIHRoZW8gxJHhu4tuaCBoxrDhu5tuZyBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIMSRw7MgZ+G6t3AgbOG7l2kuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSByYSDigJwkc2hhMeKAnSB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICLEkMaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnTogxJHDoyBjaGVja291dCDigJwkc2hhMeKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqNpIHThu5Ug4oCcJHNoYTHigJ0gdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdOiDEkcaw4bujYyByZWJhc2UgdsOgbyB0cm9uZyDigJwkc2hhMeKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGjDsmEgdHLhu5luIChtZXJnZSkg4oCcJHNoYTHigJ0gdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdOiDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvIOKAnCRzaGEx4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiVGjhu7FjIGhp4buHbiBraMO0bmcgdGjDoG5oIGPDtG5nIGzhu4duaCDigJwkY29tbWFuZCAkc2hhMeKAnSB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uICIKKyLigJwkZGlzcGxheXBhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAixJDGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ06IOKAnCRjb21tYW5kICRzaGEx4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buHIHF1eSB2w6BvIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg4NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIlTDuXkgY2jhu41uIC0tY2FjaGVkIGtow7RuZyB0aOG7gyBkw7luZyBjw7luZyB24bubaSB0w7l5IGNo4buNbiAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkzOAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJjaOG6vyDEkeG7mSBraMO0bmcgbmjGsCBtb25nIGNo4budICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIEPhuqNuaCBiw6FvOiAkZGlzcGxheV9uYW1lIGtow7RuZyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTYxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAgQ+G6o25oIGLDoW86ICRkaXNwbGF5X25hbWUga2jDtG5nIGNo4bupYSBs4bqnbiBjaHV54buDbiBnaWFvICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorIiAgQ+G6o25oIGLDoW86ICRkaXNwbGF5X25hbWUga2jDtG5nIGNo4bupYSBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gJHNoYTFfc3JjIHbDoCAiCisiJHNoYTFfZHN0IgorCisjOiBnaXQtcGFyc2UtcmVtb3RlLnNoOjg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlhlbSBnaXQtJHtjbWR9KDEpIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwOQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAixJDDoyDDoXAgZOG7pW5nIGF1dG9zdGFzaC4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzGsHUgJHN0YXNoX3NoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgIsSQYW5nIHJlYmFzZSAoJG5ld19jb3VudC8kdG90YWwpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkPDoWMgbOG7h25oOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSBkw7luZyBs4bqnbiBjaHV54buDbiBnaWFvXG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gZMO5bmcgbOG6p24gY2h1eeG7g24gZ2lhbywgbmjGsG5nIHPhu61hIGzhuqFpIHBo4bqnbiBjaMO6IHRow61jaFxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSBkw7luZyBs4bqnbiBjaHV54buDbiBnaWFvLCBuaMawbmcgZOG7q25nIGzhuqFpIMSR4buDIHR1IGLhu5UgKGFtZW5kKVxuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IGTDuW5nIGzhuqduIGNodXnhu4NuIGdpYW8sIG5oxrBuZyBtZWxkIHbDoG8gbOG6p24gY2h1eeG7g24gZ2lhbyBr4bq/ICIKKyJ0csaw4bubY1xuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gZ2nhu5FuZyBuaMawIFwic3F1YXNoXCIsIG5oxrBuZyBsb+G6oWkgYuG7jyBjaMO6IHRow61jaCBj4bunYSBs4bqnbiAiCisiY2h1eeG7g24gZ2lhbyBuw6B5XG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IGNo4bqheSBs4buHbmggKHBo4bqnbiBjw7JuIGzhuqFpIGPhu6dhIGTDsm5nKSBkw7luZyBo4buHIHbhu49cbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0geMOzYSBs4bqnbiBjaHV54buDbiBnaWFvXG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IMSRw6FuaCBuaMOjbiBIRUFEIGhp4buHbiB04bqhaSBi4bqxbmcgbeG7mXQgdMOqblxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSDEkeG6t3QgbOG6oWkgSEVBRCB0aMOgbmggbeG7mXQgbmjDo25cbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPG5ow6NuPiBbIyA8beG7mXRfZMOybmc+XVxuIgorIi4gICAgICAgdOG6oW8gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbiBz4butIGThu6VuZyBjaMO6IHRow61jaCBj4bunYSBs4bqnbiBjaHV54buDblxuIgorIi4gICAgICAgZ2lhbyBow7JhIHRy4buZbiBn4buRYyAoaG/hurdjIG3hu5l0X2TDsm5nLCBu4bq/dSBraMO0bmcgY2jhu4kgxJHhu4tuaCBs4bqnbiBjaHV54buDbiBnaWFvICIKKyJow7JhXG4iCisiLiAgICAgICB0cuG7mW4gZ+G7kWMpLiBEw7luZyAtYyA8Y29tbWl0PiDEkeG7gyByZXdvcmQgY2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g24gIgorImdpYW8uXG4iCisiXG4iCisiTmjhu69uZyBkw7JuZyBuw6B5IGPDsyB0aOG7gyDEkeG6o28gbmfGsOG7o2MgdGjhu6kgdOG7sTsgY2jDum5nIGNo4bqheSB04burIHRyw6puIMSR4buJbmggeHXhu5FuZyBkxrDhu5tpICIKKyLEkcOheS5cbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiQuG6oW4gY8OzIHRo4buDIHR1IGLhu5UgbOG6p24gY2h1eeG7g24gZ2lhbyBuZ2F5IGLDonkgZ2nhu50gYuG6sW5nOlxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiTeG7mXQga2hpIMSRw6MgaMOgaSBsw7JuZyB24bubaSBuaOG7r25nIHRoYXkgxJHhu5VpIGPhu6dhIG3DrG5oLCB0aMOsIGNo4bqheTpcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiRzaGExOiBraMO0bmcgcGjhuqNpIGzDoCBs4bqnbiBjaHV54buDbiBnaWFvIG3DoCBjw7MgdGjhu4MgbOG6pXkgcmEgxJHGsOG7o2MiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozMzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWl0IG5hbWU6ICRzaGExIgorbXNnc3RyICJUw6puIGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIGjhu6NwIGzhu4c6ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzY0Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSBzaGExIHRoYXkgdGjhur8gY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJDaHV54buDbi10aeG6v3AtbmhhbmggxJHhur9uICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2h1eeG7g24tdGnhur9wLW5oYW5oIMSR4bq/biAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gSEVBRCDEkeG6v24gJGZpcnN0X3BhcmVudCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gc3F1YXNoIGEgbWVyZ2U6ICRzaGExIgorbXNnc3RyICJU4burIGNo4buRaSBzcXVhc2ggbOG6p24gaMOyYSB0cuG7mW46ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWRvaW5nIG1lcmdlICRzaGExIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgaG/DoG4gbOG6oWkgYsaw4bubYyBow7JhIHRy4buZbiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSByYSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgIyR7bn06IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyR7bn0gd2lsbCBiZSBza2lwcGVkOiIKK21zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgIyR7bn0gc+G6vSBi4buLIGLhu48gcXVhOiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ4MworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXQuIgorbXNnaWRfcGx1cmFsICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdHMuIgorbXNnc3RyWzBdICLEkMOieSBsw6AgdOG7lSBo4bujcCBj4bunYSAkY291bnQgbOG6p24gY2h1eeG7g24gZ2lhby4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB3cml0ZSAkZml4dXBfbXNnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgJGZpeHVwX21zZyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5NQorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorbXNnc3RyICLEkMOieSBsw6AgdOG7lSBo4bujcCBj4bunYSAyIGzhuqduIGNodXnhu4NuIGdpYW8uIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTM2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NzkKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMOhcCBk4bulbmcgJHNoYTHigKYgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYW1lbmQgY29tbWl0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwaWNraW5nICRzaGExLi4uICRyZXN0XG4iCisiVGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gYW4gZW1wdHkgY29tbWl0IG1lc3NhZ2UsIG9yIHRoZSBwcmUtY29tbWl0IGhvb2tcbiIKKyJmYWlsZWQuIElmIHRoZSBwcmUtY29tbWl0IGhvb2sgZmFpbGVkLCB5b3UgbWF5IG5lZWQgdG8gcmVzb2x2ZSB0aGUgaXNzdWUgIgorImJlZm9yZVxuIgorInlvdSBhcmUgYWJsZSB0byByZXdvcmQgdGhlIGNvbW1pdC4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgdHUgYuG7lSBs4bqnbiBjaHV54buDbiBnaWFvIHNhdSBraGkgbOG6pXkgcmEgJHNoYTHigKYgJHJlc3QgdGjDoG5oIGPDtG5nXG4iCisiVmnhu4djIG7DoHkgY8OzIHRo4buDIGzDoCBkbyBt4buZdCBnaGkgY2jDuiBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyBsw6AgdHLhu5FuZyBy4buXbmcsIGhv4bq3YyAiCisibcOzYyBwcmUtY29tbWl0XG4iCisiZ+G6t3AgbOG7l2kuIE7hur91IGzDoCBtw7NjIHByZS1jb21taXQgYuG7iyBs4buXaSwgQuG6oW4gY8OzIGzhur0gY+G6p24gZ2nhuqNpIHF1eeG6v3QgdHLhu6VjIHRy4bq3YyAiCisibsOgeVxuIgorInRyxrDhu5tjIGtoaSBi4bqhbiBjw7MgdGjhu4MgbMOgbSB2aeG7h2MgbOG6oWkgduG7m2kgbOG6p24gY2h1eeG7g24gZ2lhby4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJHNoYTFfYWJicmV2Li4uICRyZXN0IgorbXNnc3RyICJC4buLIGThu6tuZyB04bqhaSAkc2hhMV9hYmJyZXbigKYgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiS2jDtG5nIOKAnCRzcXVhc2hfc3R5bGXigJ0gdGjhu4MgbcOgIGtow7RuZyBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyBr4bq/IHRyxrDhu5tjIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICJUaOG7sWMgdGhpOiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgIlRo4buxYyB0aGkgZ+G6t3AgbOG7l2k6ICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInbDoCB04bqhbyBjw6FjIHRoYXkgxJHhu5VpIGLhuqNuZyBt4bulYyBs4bulYyB2w6AvaGF5IGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisiQuG6oW4gY8OzIHRo4buDIHPhu61hIGPDoWMgdHLhu6VjIHRy4bq3YywgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmgg4oCcY+G6o2kgdOG7leKAnTpcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyJUaOG7sWMgdGhpIHRow6BuaCBjw7RuZzogJHJlc3RcbiIKKyJuaMawbmcgY8OybiBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIG3hu6VjIGzhu6VjIHbDoC9ob+G6t2MgY8OieSBsw6BtIHZp4buHY1xuIgorIkNodXnhu4NuIGdpYW8gaGF5IHThuqFtIGPhuqV0IGPDoWMgdGhheSDEkeG7lWkgbsOgeSDEkWksIHLhu5NpIGNo4bqheVxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorbXNnc3RyICJM4buHbmggY2jGsGEgYmnhur90OiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcyMAorbXNnaWQgIlBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICJWdWkgbMOybmcgc+G7rWEgbOG7l2kgbsOgeSBi4bqxbmcgY8OhY2ggZMO5bmcg4oCcZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb+KAnS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICJDw6BpIHThu5UgdsOgIGPhuq1wIG5o4bqtdCAkaGVhZF9uYW1lIG3hu5l0IGPDoWNoIHRow6BuaCBjw7RuZy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTIKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIktow7RuZyB0aOG7gyB4w7NhIGLhu48gQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIkLhuqFuIGPDsyBjw6FjIHRoYXkgxJHhu5VpIHNvIHbhu5tpIHRyb25nIGLhu4cgcGjDs25nIHRyb25nXG4iCisidGjGsCBt4bulYyBsw6BtIHZp4buHYyBj4bunYSBi4bqhbi4gTuG6v3UgY8OhYyB0aGF5IMSR4buVaSBuw6B5IGzDoCBtdeG7kW5cbiIKKyJzcXVhc2ggdsOgbyBs4bqnbiBjaHV54buDbiBnaWFvIGvhur8gdHLGsOG7m2MsIGNo4bqheTpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk7hur91IGNow7puZyBjw7Mgw70gbMOgIMSRaSDEkeG6v24gbOG6p24gY2h1eeG7g24gZ2lhbyBt4bubaSwgdGjDrCBjaOG6oXk6XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiVHJvbmcgY+G6oyBoYWkgdHLGsOG7nW5nIGjhu6NwLCBt4buZdCBraGkgYuG6oW4gbMOgbSB4b25nLCB0aeG6v3AgdOG7pWMgYuG6sW5nOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAiTOG7l2kga2hpIGPhu5EgdMOsbSDEkeG7i25oIGRhbmggY+G7p2EgdMOhYyBnaeG6oyDEkeG7gyB0dSBi4buVIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzkKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAiIgorIkLhuqFuIGPDsyBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIGNodXnhu4NuIGdpYW8gdHJvbmcgdGjGsCBt4bulYyBsw6BtIHZp4buHYy5cbiIKKyJWdWkgbMOybmcgY2h1eeG7g24gZ2lhbyBjaMO6bmcgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmgg4oCcZ2l0IHJlYmFzZSAtLWNvbnRpbnVl4oCdIGzhuqduICIKKyJu4buvYS4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpIMSRw6MgxJHGsGEgbMOqbiBi4buHIHBow7NuZy4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRo4buxYyB0aGkgdHLDrG5oIGJpw6puIHNv4bqhbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIktow7RuZyB0aOG7gyBjaGVja291dCAkc3dpdGNoX3RvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA3Cittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIktow7RuZyBIRUFEPyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJHN0YXRlX2RpciIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIHRoxrAgbeG7pWMgdOG6oW0gdGjhu51pICRzdGF0ZV9kaXIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MTEKK21zZ2lkICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSRw6FuaCBk4bqldSBsw6AgdMawxqFuZyB0w6FjIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kKSIKK21zZ2lkX3BsdXJhbCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZHMpIgorbXNnc3RyWzBdICJD4bqjaSB04buVICRzaG9ydHJldmlzaW9ucyB2w6BvICRzaG9ydG9udG8gKGPDoWMgbOG7h25oICR0b2RvY291bnQpIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTk3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDAyCittc2dpZCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiCittc2dzdHIgIktow7RuZyB0aOG7gyBraOG7n2kgdOG6oW8gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGdoaSBs4bqhaSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgImPDoWNoIGTDuW5nOiAkZGFzaGxlc3MgJFVTQUdFIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGNodXnhu4NuIHRoxrAgbeG7pWMgKGNoZGlyKSBzYW5nICRjZHVwLCB0aMawIG3hu6VjIOG7nyBt4bupYyBjYW8gbmjhuqV0IGPhu6dhIGPDonkgIgorImzDoG0gdmnhu4djIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjAwIGdpdC1zaC1zZXR1cC5zaDoyMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICIiCisibOG7l2kgbmdoacOqbSB0cuG7jW5nOiAkcHJvZ3JhbV9uYW1lIGtow7RuZyB0aOG7gyDEkcaw4bujYyBkw7luZyBuZ29hb2lmIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjIxCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIktow7RuZyB0aOG7gyBj4bqjaSB04buVOiBC4bqhbiBjw7MgY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nLiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNAorbXNnaWQgIkNhbm5vdCByZXdyaXRlIGJyYW5jaGVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBnaGkgbOG6oWkgY8OhYyBuaMOhbmg6IELhuqFuIGPDsyBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIMSRxrDhu6NjIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI3Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHB1bGwgduG7m2kgY+G6o2kgdOG7lTogQuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgxJHGsGEgbMOqbiBi4buHIHBow7NuZy4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDICRhY3Rpb246IELhuqFuIGPDsyBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIMSRxrDhu6NjIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQzCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBj4bqjaSB04buVOiBN4bulYyBs4bulYyBj4bunYSBi4bqhbiBjw7MgY2jhu6lhIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgY2h1eeG7g24gZ2lhby4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDYKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHB1bGwgduG7m2kgY+G6o2kgdOG7lTogQuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgY2h1eeG7g24gZ2lhby4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDICRhY3Rpb246IE3hu6VjIGzhu6VjIGPhu6dhIGLhuqFuIGPDsyBjaOG7qWEgY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyBjaHV54buDbiAiCisiZ2lhby4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNTMKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJUaMOqbSB2w6BvIMSRw7MsIGLhuqNuZyBt4bulYyBs4bulYyBj4bunYSBi4bqhbiBjw7MgY2jhu6lhIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgY2h1eeG7g24gZ2lhby4iCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzMKK21zZ2lkICJZb3UgbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICJC4bqhbiBj4bqnbiBjaOG6oXkgbOG7h25oIG7DoHkgdOG7qyB0aMawIG3hu6VjIOG7nyBt4bupYyBjYW8gbmjhuqV0IGPhu6dhIGPDonkgbMOgbSB2aeG7h2MuIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIktow7RuZyB0aOG7gyBkw7IgdMOsbSDEkcaw4budbmcgZOG6q24gdHV54buHdCDEkeG7kWkgY+G7p2EgdGjGsCBt4bulYyBnaXQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTJzICUxMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIiVkIMSRxrDhu51uZyBk4bqrbiDEkcOjIHRvdWNoIChjaOG6oW0pXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1MworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy4iCittc2dzdHIgIiIKKyJO4bq/dSBtaeG6v25nIHbDoSDEkcaw4bujYyDDoXAgZOG7pW5nIHPhuqFjaCBz4bq9LCBraMO6YyDEkcOjIHPhu61hIHPhur0gbmdheSBs4bqtcCB04bupY1xuIgorIsSRxrDhu6NjIMSRw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBsw6puIGLhu4cgcGjDs25nLiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDU2Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFzaGluZy4iCittc2dzdHIgIiIKKyJO4bq/dSBtaeG6v25nIHbDoSDEkcaw4bujYyDDoXAgZOG7pW5nIHPhuqFjaCBz4bq9LCBraMO6YyDEkcOjIHPhu61hIHPhur0gbmdheSBs4bqtcCB04bupY1xuIgorIsSRxrDhu6NjIMSRw6FuaCBk4bqldSDEkeG7gyB04bqhbSBj4bqldC4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAiIgorIk7hur91IG1p4bq/bmcgdsOhIMSRxrDhu6NjIMOhcCBk4bulbmcgc+G6oWNoIHPhur0sIGtow7pjIMSRw6Mgc+G7rWEgc+G6vSBuZ2F5IGzhuq1wIHThu6ljXG4iCisixJHGsOG7o2MgxJHDoW5oIGThuqV1IMSR4buDIGLhu48gY2h1eeG7g24gbMOqbiBi4buHIHBow7NuZy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzEKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NworbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgYXBwbHlpbmcuIgorbXNnc3RyICIiCisiTuG6v3UgbWnhur9uZyB2w6EgxJHGsOG7o2Mgw6FwIGThu6VuZyBz4bqhY2ggc+G6vSwga2jDumMgxJHDoyBz4butYSBz4bq9IG5nYXkgbOG6rXAgdOG7qWNcbiIKKyLEkcaw4bujYyDEkcOhbmggZOG6pXUgxJHhu4Mgw6FwIGThu6VuZy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3NAorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgZGlzY2FyZGluZy4iCittc2dzdHIgIiIKKyJO4bq/dSBtaeG6v25nIHbDoSDEkcaw4bujYyDDoXAgZOG7pW5nIHPhuqFjaCBz4bq9LCBraMO6YyDEkcOjIHPhu61hIHPhur0gbmdheSBs4bqtcCB04bupY1xuIgorIsSRxrDhu6NjIMSRw6FuaCBk4bqldSDEkeG7gyBsb+G6oWkgYuG7jy4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqtcCB0aW4gc+G7rWEga2jDumMgxJHhu4MgZ2hpOiAlcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisixJDhu4MgZ+G7oSBi4buPIGPDoWMgZMOybmcg4oCcJXPigJ0sIGzDoG0gY2jDum5nIHRow6BuaCBuaOG7r25nIGTDsm5nIOKAnCDigJwgKG7hu5lpIGR1bmcpLlxuIgorIsSQ4buDIHjDs2EgYuG7jyBkw7JuZyDigJwlc+KAnSwgeMOzYSBjaMO6bmcgxJFpLlxuIgorIk5o4buvbmcgZMOybmcgYuG6r3QgxJHhuqd1IGLhurFuZyAlcyBz4bq9IGLhu4sgbG/huqFpIGLhu48uXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBt4bufIHThuq1wIHRpbiBraMO6YyDEkeG7gyDEkeG7jWM6ICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDgKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5XG4iCisibiAtIMSR4burbmcgxJHGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5XG4iCisicSAtIHRob8OhdDsgxJHhu6tuZyDEkcawYSBsw6puIGLhu4cgcGjDs25nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBjw7JuIGzhuqFpXG4iCisiYSAtIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeSB2w6AgdOG6pXQgY+G6oyBjw6FjIGtow7pjIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorImQgLSDEkeG7q25nIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWkgdHJvbmcgdOG6rXAgIgorInRpbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU0Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIHThuqFtIGPhuqV0IGtow7pjIG7DoHlcbiIKKyJuIC0gxJHhu6tuZyB04bqhbSBj4bqldCBraMO6YyBuw6B5XG4iCisicSAtIHRob8OhdDsgxJHhu6tuZyB04bqhbSBj4bqldCBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSB04bqhbSBj4bqldCBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgdOG6oW0gY+G6pXQga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWkgdHJvbmcgdOG6rXAgdGluIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjAKK21zZ2lkICIiCisieSAtIHVuc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSB1bnN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIMSRxrBhIHJhIGto4buPaSBi4buHIHBow7NuZyBraMO6YyBuw6B5XG4iCisibiAtIMSR4burbmcgxJHGsGEgcmEga2jhu49pIGLhu4cgcGjDs25nIGtow7pjIG7DoHlcbiIKKyJxIC0gdGhvw6F0OyDEkeG7q25nIMSRxrBhIHJhIGto4buPaSBi4buHIHBow7NuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiAiCisibOG6oWlcbiIKKyJhIC0gxJHGsGEgcmEga2jhu49pIGLhu4cgcGjDs25nIGtow7pjIG7DoHkgdsOgIHThuqV0IGPhuqMgY8OhYyBraMO6YyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKyJkIC0gxJHhu6tuZyDEkcawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWkgdHJvbmcgIgorInThuq1wIHRpbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjY2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIMOhcCBk4bulbmcga2jDumMgbsOgeSB2w6BvIG3hu6VjIGzhu6VjXG4iCisibiAtIMSR4burbmcgw6FwIGThu6VuZyBraMO6YyBuw6B5IHbDoG8gbeG7pWMgbOG7pWNcbiIKKyJxIC0gdGhvw6F0OyDEkeG7q25nIMOhcCBk4bulbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gw6FwIGThu6VuZyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgw6FwIGThu6VuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjkwCittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0gbG/huqFpIGLhu48ga2jDumMgbsOgeSBraOG7j2kgY8OieSBsw6BtIHZp4buHY1xuIgorIm4gLSDEkeG7q25nIGxv4bqhaSBi4buPIGtow7pjIGto4buPaSBjw6J5IGzDoG0gdmnhu4djXG4iCisicSAtIHRob8OhdDsgxJHhu6tuZyBsb+G6oWkgYuG7jyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSBsb+G6oWkgYuG7jyBraMO6YyBuw6B5IHbDoCB04bqldCBj4bqjIGPDoWMga2jDumMgc2F1IG7DoHkgdHJvbmcgdOG6rXAgdGluXG4iCisiZCAtIMSR4burbmcgbG/huqFpIGLhu48ga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjc4Cittc2dpZCAiIgorInkgLSBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSBsb+G6oWkgYuG7jyBraMO6YyBuw6B5IGto4buPaSBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHY1xuIgorIm4gLSDEkeG7q25nIGxv4bqhaSBi4buPIGtow7pjIGto4buPaSBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHY1xuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgbG/huqFpIGLhu48ga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIGPDsm4gbOG6oWlcbiIKKyJhIC0gbG/huqFpIGLhu48ga2jDumMgbsOgeSB2w6AgdOG6pXQgY+G6oyBjw6FjIGtow7pjIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorImQgLSDEkeG7q25nIGxv4bqhaSBi4buPIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI4NAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIMOhcCBk4bulbmcga2jDumMgbsOgeSB2w6BvIG3hu6VjIGzhu6VjIHbDoCBjw6J5IGzDoG0gdmnhu4djXG4iCisibiAtIMSR4burbmcgw6FwIGThu6VuZyBraMO6YyB2w6BvIG3hu6VjIGzhu6VjIHbDoCBjw6J5IGzDoG0gdmnhu4djXG4iCisicSAtIHRob8OhdDsgxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBjw7JuIGzhuqFpXG4iCisiYSAtIMOhcCBk4bulbmcga2jDumMgbsOgeSB2w6AgdOG6pXQgY+G6oyBjw6FjIGtow7pjIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpblxuIgorImQgLSDEkeG7q25nIMOhcCBk4bulbmcga2jDumMgbsOgeSBjxaluZyBuaMawIGLhuqV0IGvhu7MgY8OhaSBuw6BvIHNhdSBuw6B5IHRyb25nIHThuq1wIHRpbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjk2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIMOhcCBk4bulbmcga2jDumMgbsOgeSB2w6BvIGPDonkgbMOgbSB2aeG7h2NcbiIKKyJuIC0gxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIHbDoG8gY8OieSBsw6BtIHZp4buHY1xuIgorInEgLSB0aG/DoXQ7IMSR4burbmcgw6FwIGThu6VuZyBraMO6YyBuw6B5IGPFqW5nIG5oxrAgYuG6pXQga+G7syBjw6FpIG7DoG8gY8OybiBs4bqhaVxuIgorImEgLSDDoXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgIHThuqV0IGPhuqMgY8OhYyBraMO6YyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW5cbiIKKyJkIC0gxJHhu6tuZyDDoXAgZOG7pW5nIGtow7pjIG7DoHkgY8WpbmcgbmjGsCBi4bqldCBr4buzIGPDoWkgbsOgbyBzYXUgbsOgeSB0cm9uZyB04bqtcCB0aW4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMxMQorbXNnaWQgIiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImcgLSBjaOG7jW4gbeG7mXQga2jDumMgbXXhu5FuIHThu5tpXG4iCisiLyAtIHTDrG0gbeG7mXQga2jDumMga2jhu5twIHbhu5tpIGJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSDEkcawYSByYVxuIgorImogLSDEkeG7gyBs4bqhaSBraMO6YyBuw6B5IGzDoCBjaMawYSBxdXnhur90IMSR4buLbmgsIHhlbSBraMO6YyBjaMawYSBxdXnhur90IMSR4buLbmgga+G6v1xuIgorIkogLSDEkeG7gyBs4bqhaSBraMO6YyBuw6B5IGzDoCBjaMawYSBxdXnhur90IMSR4buLbmgsIHhlbSBraMO6YyBr4bq/XG4iCisiayAtIMSR4buDIGzhuqFpIGtow7pjIG7DoHkgbMOgIGNoxrBhIHF1eeG6v3QgxJHhu4tuaCwgeGVtIGtow7pjIGNoxrBhIHF1eeG6v3QgxJHhu4tuaCBr4bq/IHRyxrDhu5tjXG4iCisiSyAtIMSR4buDIGzhuqFpIGtow7pjIG7DoHkgbMOgIGNoxrBhIHF1eeG6v3QgxJHhu4tuaCwgeGVtIGtow7pjIGvhur8gdHLGsOG7m2NcbiIKKyJzIC0gY2hpYSBraMO6YyBoaeG7h24gdOG6oWkgdGjDoG5oIGPDoWMga2jDumMgbmjhu48gaMahblxuIgorImUgLSBz4butYSBi4bqxbmcgdGF5IGtow7pjIGhp4buHbiBow6BuaFxuIgorIj8gLSBpbiB0cuG7oyBnacO6cFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDIKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIKK21zZ3N0ciAiQ8OhYyBraMO6YyDEkcOjIGNo4buNbiBraMO0bmcgxJHGsOG7o2Mgw6FwIGThu6VuZyB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQzCittc2dpZCAiQXBwbHkgdGhlbSB0byB0aGUgd29ya3RyZWUgYW55d2F5PyAiCittc2dzdHIgIlbhuqtuIMOhcCBk4bulbmcgY2jDum5nIGNobyBjw6J5IGzDoG0gdmnhu4djPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0NgorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgIsSQw6Mga2jDtG5nIMOhcCBk4bulbmcgZ8OsIGPhuqMuXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM1NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB1bm1lcmdlZDogJXNcbiIKK21zZ3N0ciAiYuG7jyBxdWEgbmjhu69uZyB0aOG7qSBjaMawYSBow7JhIHRy4buZbjogJXNcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJUaGF5IMSR4buVaSBjaOG6vyDEkeG7mSBi4buHIHBow7NuZyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJYw7NhIGto4buPaSBi4buHIHBow7NuZyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAixJDGsGEgbMOqbiBi4buHIHBow7NuZyBraMO6YyBuw6B5IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIlRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIHThuqFtIGPhuqV0IMSRaSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJYw7NhIHThuqFtIGPhuqV0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJU4bqhbSBj4bqldCBraMO6YyBuw6B5IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiVGhheSDEkeG7lWkgY2jhur8gxJHhu5kgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJYw7NhIGLhu48gdmnhu4djIGLhu48gcmEga2jhu49pIGLhu4cgcGjDs25nIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiVW5zdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkLhu48gcmEga2jhu49pIGLhu4cgcGjDs25nIGtow7pjIG7DoHkgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiw4FwIGThu6VuZyB0aGF5IMSR4buVaSBjaOG6vyDEkeG7mSBjaG8gbeG7pWMgbOG7pWMgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiw4FwIGThu6VuZyB2aeG7h2MgeMOzYSB2w6BvIG3hu6VjIGzhu6VjIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLDgW8gZOG7pW5nIGtow7pjIG7DoHkgdsOgbyBt4bulYyBs4bulYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkxv4bqhaSBi4buPIGPDoWMgdGhheSDEkeG7lWkgY2jhur8gxJHhu5kgdOG7qyBjw6J5IGzDoG0gdmnhu4djIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTG/huqFpIGLhu48gdmnhu4djIHjDs2Ega2jhu49pIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTG/huqFpIGLhu48ga2jDumMgbsOgeSBraOG7j2kgY8OieSBsw6BtIHZp4buHYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIkxv4bqhaSBi4buPIHRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIHThu6sgbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICJMb+G6oWkgYuG7jyB2aeG7h2MgeMOzYSBraOG7j2kgbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAiTG/huqFpIGLhu48ga2jDumMgbsOgeSBraOG7j2kgbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIsOBcCBk4bulbmcgdGhheSDEkeG7lWkgY2jhur8gxJHhu5kgY2hvIG3hu6VjIGzhu6VjIHbDoCBjw6J5IGzDoG0gdmnhu4djIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLDgXAgZOG7pW5nIHZp4buHYyB4w7NhIHbDoG8gbeG7pWMgbOG7pWMgdsOgIGPDonkgbMOgbSB2aeG7h2MgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLDgXAgZOG7pW5nIGtow7pjIG7DoHkgdsOgbyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/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/IFt5fE5dKGPDsy9LSMOUTkcpOiAiCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAidW5hYmxlIHRvIGdldCB0cmVlIGZvciAlcyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IGPDonkgY2hvICVzIgorCisjfiBtc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIKKyN+IG1zZ3N0ciAiRMO5bmcgbeG7mXQgcGjhu49uZyDEkW/DoW4gdGjhu60gbmdoaeG7h20gxJHhu4MgdMSDbmcgY8aw4budbmcgY8OhYyBkaWZmIgorCisjfiBtc2dpZCAiZ2l0IGNvbW1pdC1ncmFwaCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKKyN+IG1zZ3N0ciAiZ2l0IGNvbW1pdC1ncmFwaCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKKworI34gbXNnaWQgImdpdCBjb21taXQtZ3JhcGggcmVhZCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIKKyN+IG1zZ3N0ciAiZ2l0IGNvbW1pdC1ncmFwaCByZWFkIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInVua25vd24gY29yZS51bnRyYWNrZWRDYWNoZSB2YWx1ZSAnJXMnOyB1c2luZyAna2VlcCcgZGVmYXVsdCB2YWx1ZSIKKyN+IG1zZ3N0ciAiIgorI34gImtow7RuZyBoaeG7g3UgZ2nDoSB0cuG7iyBjb3JlLnVudHJhY2tlZENhY2hlIOKAnCVz4oCdOyBkw7luZyBnacOhIHRy4buLIG3hurdjIMSR4buLbmgg4oCca2VlcOKAnSIKKworI34gbXNnaWQgImNhbm5vdCBjaGFuZ2UgcGFydGlhbCBjbG9uZSBwcm9taXNvciByZW1vdGUiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyB0aGF5IMSR4buVaSBuaMOibiBi4bqjbiB04burbmcgcGjhuqduIG3DoXkgY2jhu6cgcHJvbWlzb3IiCisKKyN+IG1zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKKyN+IG1zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjDonkgZOG7sW5nIGPDonkiCisKKyMsIGMtZm9ybWF0CisjfiBtc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdCAnJXMnIGluICclcyciCisjfiBtc2dzdHIgIsSR4buLbmggZOG6oW5nIG5nw6B5IHRow6FuZyBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSB0cm9uZyDigJwlc+KAnSIKKworI34gbXNnaWQgIndyaXRpbmcgcm9vdCBjb21taXQiCisjfiBtc2dzdHIgImdoaSBjaHV54buDbiBnaWFvIGfhu5FjIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXMgbWF5IGJlIGxvc3Q6ICVzIgorI34gbXNnc3RyICIiCisjfiAiY8OhYyB0aGF5IMSR4buVaSDEkcOjIMSRxrBhIGzDqm4gYuG7hyBwaMOzbmcgdHJvbmcgY8OhYyB04bqtcCB0aW4gc2F1IMSRw6J5IGPDsyB0aOG7gyBi4buLIG3huqV0OiAiCisjfiAiJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiLS1maWx0ZXIgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgY29uZmlndXJlZCBpbiBleHRlbnNpb25zLiIKKyN+ICJwYXJ0aWFsQ2xvbmUiCisjfiBtc2dzdHIgIiIKKyN+ICItLWZpbHRlciBjaOG7iSBjw7MgdGjhu4MgxJHGsOG7o2MgZMO5bmcgduG7m2kgbcOheSBjaOG7pyDEkcaw4bujYyBj4bqldSBow6xuaCBi4bqxbmcgZXh0ZW5zaW9ucy4iCisjfiAicGFydGlhbENsb25lIgorCisjfiBtc2dpZCAidmVyaWZ5IGNvbW1pdC1tc2cgaG9vayIKKyN+IG1zZ3N0ciAidGjhuqltIHRyYSBtw7NjIChob29rKSBjb21taXQtbXNnIgorCisjfiBtc2dpZCAiY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneS1vcHRpb24nIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4Mga+G6v3QgaOG7o3Ag4oCcLS1yZWJhc2UtbWVyZ2Vz4oCdIHbhu5tpIOKAnC0tc3RyYXRlZ3ktb3B0aW9u4oCdIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgImludmFsaWQgc3BhcnNlIHZhbHVlICclcyciCisjfiBtc2dzdHIgImdpw6EgdHLhu4sgc3BhcnNlIGtow7RuZyBo4bujcCBs4buHIOKAnCVz4oCdIgorCisjfiBtc2dpZCAiIgorI34gIkZldGNoIG5vcm1hbGx5IGluZGljYXRlcyB3aGljaCBicmFuY2hlcyBoYWQgYSBmb3JjZWQgdXBkYXRlLCBidXQgdGhhdCAiCisjfiAiY2hlY2sgaGFzIGJlZW4gZGlzYWJsZWQuIgorI34gbXNnc3RyICIiCisjfiAiTOG6pXkgduG7gSBiw6xuaCB0aMaw4budbmcgY2hvIGJp4bq/dCBjw6FjIGPDoWMgbmjDoW5oIG7DoG8gYnXhu5ljIHBo4bqjaSBj4bqtcCBuaOG6rXQsIG5oxrBuZyAiCisjfiAidmnhu4djIGtp4buDbSB0cmEgxJHDoyBi4buLIHbDtCBoaeG7h3UgaMOzYS4iCisKKyN+IG1zZ2lkICIiCisjfiAib3IgcnVuICdnaXQgY29uZmlnIGZldGNoLnNob3dGb3JjZWRVcGRhdGVzIGZhbHNlJyB0byBhdm9pZCB0aGlzIGNoZWNrLlxuIgorI34gbXNnc3RyICIiCisjfiAiaG/hurdjIGNo4bqheSAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyBmYWxzZScgxJHhu4MgdHLDoW5oIGtp4buDbSB0cmEgIgorI34gIm7DoHkuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAibG9nLm1haWxtYXAgaXMgbm90IHNldDsgaXRzIGltcGxpY2l0IHZhbHVlIHdpbGwgY2hhbmdlIGluIGFuXG4iCisjfiAidXBjb21pbmcgcmVsZWFzZS4gVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHByZXNlcnZlIGN1cnJlbnRcbiIKKyN+ICJiZWhhdmlvdXIsIHNldCB0aGUgbG9nLm1haWxtYXAgY29uZmlndXJhdGlvbiB2YWx1ZSB0byBmYWxzZS5cbiIKKyN+ICJcbiIKKyN+ICJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvdXIgbm93LCBzZXQgdGhlXG4iCisjfiAibG9nLm1haWxtYXAgY29uZmlndXJhdGlvbiB2YWx1ZSB0byB0cnVlLlxuIgorI34gIlxuIgorI34gIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAnbG9nLm1haWxtYXAnIGZvciBmdXJ0aGVyICIKKyN+ICJpbmZvcm1hdGlvbi4iCisjfiBtc2dzdHIgIiIKKyN+ICJsb2cubWFpbG1hcCBraMO0bmcgxJHGsOG7o2MgxJHhurd0OyBnacOhIHRy4buLIG5n4bqnbSBj4bunYSBuw7Mgc+G6vSB0aGF5IMSR4buVaSB0cm9uZyBt4buZdFxuIgorI34gInBow6F0IGjDoG5oIHPhuq9wIHThu5tpLiDEkOG7gyBjaOG6pW0gZOG7qXQgdGjDtG5nIGLDoW8gbsOgeSB2w6AgZHV5IHRyw6wgaMOgbmggeOG7rVxuIgorI34gImhp4buHbiB04bqhaSwgxJHhurd0IGdpw6EgdHLhu4sgY+G6pXUgaMOsbmggbG9nLm1haWxtYXAgdGjDoG5oIGZhbHNlLlxuIgorI34gIlxuIgorI34gIsSQ4buDIGzDoG0gY2jhuqVtIGThu6l0IHRow7RuZyBiw6FvIG7DoHkgdsOgIMOhcCBjw6FjaCBow6BuaCB44butIG3hu5tpLCBow6N5IMSR4bq3dFxuIgorI34gImdpw6EgdHLhu4sgY+G6pXUgaMOsbmggbG9nLm1haWxtYXAgdHJ1ZS5cbiIKKyN+ICJcbiIKKyN+ICJYZW0gJ2dpdCBoZWxwIGNvbmZpZyAnIHbDoCB0w6xtIGtp4bq/bSAnIGxvZy5tYWlsbWFwICcgxJHhu4MgYmnhur90IHRow6ptIHRow7RuZyB0aW4uIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja19kZXRhaWxlZCIKKyN+IG1zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujIG11bHRpX2Fja19kZXRhaWxlZCIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBuby1kb25lIgorI34gbXNnc3RyICJNw6F5IGNo4bunIGjhu5cgdHLhu6Mgbm8tZG9uZSIKKworI34gbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2siCisjfiBtc2dzdHIgIk3DoXkgY2jhu6cgaOG7lyB0cuG7oyBtdWx0aV9hY2siCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kLTY0ayIKKyN+IG1zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujIHNpZGUtYmFuZC02NGsiCisKKyN+IG1zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kIgorI34gbXNnc3RyICJNw6F5IGNo4bunIGjhu5cgdHLhu6Mgc2lkZS1iYW5kIgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXRpcC1zaGExLWluLXdhbnQiCisjfiBtc2dzdHIgIk3DoXkgY2jhu6cgaOG7lyB0cuG7oyBhbGxvdy10aXAtc2hhMS1pbi13YW50IgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIGFsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQiCisjfiBtc2dzdHIgIk3DoXkgY2jhu6cgaOG7lyB0cuG7oyBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IgorCisjfiBtc2dpZCAiU2VydmVyIHN1cHBvcnRzIG9mcy1kZWx0YSIKKyN+IG1zZ3N0ciAiTcOheSBjaOG7pyBo4buXIHRy4bujIG9mcy1kZWx0YSIKKworI34gbXNnaWQgIihIRUFEIGRldGFjaGVkIGF0ICVzKSIKKyN+IG1zZ3N0ciAiKEhFQUQgxJHGsOG7o2MgdMOhY2ggcuG7nWkgdOG6oWkgJXMpIgorCisjfiBtc2dpZCAiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiCisjfiBtc2dzdHIgIihIRUFEIMSRxrDhu6NjIHTDoWNoIHLhu51pIHThu6sgJXMpIgorCisjfiBtc2dpZCAiQ2hlY2tpbmcgb3V0IGZpbGVzIgorI34gbXNnc3RyICLEkGFuZyBs4bqleSByYSBjw6FjIHThuq1wIHRpbiIKKworI34gbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKKyN+IG1zZ3N0ciAiIgorI34gImtow7RuZyB0aOG7gyDEkcaw4bujYyB0xrDGoW5nIHTDoWMgbcOgIGtow7RuZyBjw7Mgc3RkaW4ga+G6v3QgbuG7kWkgduG7m2kgbeG7mXQgdGhp4bq/dCBi4buLIGN14buRaS4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorI34gbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBICVzXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorI34gIlxuIgorI34gIiAgICBnaXQgcmVzZXRcbiIKKyN+ICJcbiIKKyN+ICJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorI34gInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIk7hur91IGLhuqFuIG114buRbiBi4buPIHF1YSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkgdGjDrCBkw7luZzpcbiIKKyN+ICJcbiIKKyN+ICIgICAgZ2l0IHJlc2V0XG4iCisjfiAiXG4iCisjfiAiVGjhur8gdGjDrCBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgc+G6vSBwaOG7pWMgaOG7k2kgbOG6oWkgdmnhu4djIGNoZXJyeS1waWNrXG4iCisjfiAibmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIGPDsm4gbOG6oWkuXG4iCisKKyN+IG1zZ2lkICJ1bnJlY29nbml6ZWQgdmVyYjogJXMiCisjfiBtc2dzdHIgInZlcmIga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46ICVzIgorCisjfiBtc2dpZCAiaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCisjfiBtc2dzdHIgInBoacOqbiBi4bqjbiBixINtIOKAnCVY4oCdIGtow7RuZyBjw7MgcGhpw6puIGLhuqNuIGto4bubcCAlWCIKKworI34gbXNnaWQgIm9wdGlvbiAnJXMnIHJlcXVpcmVzIGEgdmFsdWUiCisjfiBtc2dzdHIgInTDuXkgY2jhu41uIOKAnCVz4oCdIHnDqnUgY+G6p3UgbeG7mXQgZ2nDoSB0cuG7iyIKKworI34gbXNnaWQgImNvdWxkIG5vdCB0cmFuc2Zvcm0gdGhlIHRvZG8gbGlzdCIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGNodXnhu4NuIGThuqFuZyBkYW5oIHPDoWNoIGPhuqduIGzDoG0iCisKKyN+IG1zZ2lkICJkZWZhdWx0IgorI34gbXNnc3RyICJt4bq3YyDEkeG7i25oIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKKyN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIHRoxrAgbeG7pWMg4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJhbGxvdyByZXJlcmUgdG8gdXBkYXRlIGluZGV4IHdpdGggcmVzb2x2ZWQgY29uZmxpY3QiCisjfiBtc2dzdHIgIiIKKyN+ICJjaG8gcGjDqXAgcmVyZXJlIGPhuq1wIG5o4bqtdCBi4bqjbmcgbeG7pWMgbOG7pWMgduG7m2kgY8OhYyB4dW5nIMSR4buZdCDEkcOjIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IgorCisjfiBtc2dpZCAiY291bGQgbm90IG9wZW4gJXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBt4bufICVzIgorCisjfiBtc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgcXVheSB0cuG7nyBs4bqhaSAkaGVhZF9uYW1lIgorCisjfiBtc2dpZCAiIgorI34gIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICRzdGF0ZV9kaXJfYmFzZSBkaXJlY3RvcnksIGFuZFxuIgorI34gIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisjfiAiY2FzZSwgcGxlYXNlIHRyeVxuIgorI34gIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorI34gIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyN+ICJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisjfiAiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyN+ICJ2YWx1YWJsZSB0aGVyZS4iCisjfiBtc2dzdHIgIiIKKyN+ICJIw6xuaCBuaMawIGzDoCDhu58gxJHDonkgc+G6tW4gY8OzIG3hu5l0IHRoxrAgbeG7pWMgJHN0YXRlX2Rpcl9iYXNlLCB2w6BcbiIKKyN+ICJUw7RpIHThu7EgaOG7j2kgY8OzIHBo4bqjaSBi4bqhbiDEkWFuZyDhu58gZ2nhu69hIG3hu5l0IGzhu4duaCByZWJhc2Uga2jDoWMuIE7hur91IMSRw7puZyBsw6BcbiIKKyN+ICJuaMawIHbhuq15LCB4aW4gaMOjeSB0aOG7rVxuIgorI34gIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorI34gIk7hur91IGtow7RuZyBwaOG6o2kgdGjhur8sIGjDo3kgdGjhu61cbiIKKyN+ICJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisjfiAidsOgIGNo4bqheSBUw5RJIGzhuqduIG7hu69hLiBUw5RJICBk4burbmcgbOG6oWkgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGLhuqFuIHbhuqtuXG4iCisjfiAiY8OzIG3hu5l0IHPhu5EgdGjhu6kgcXXDvSBnacOhIOG7nyDEkcOieS4iCisKKyN+IG1zZ2lkICIiCisjfiAiZmF0YWw6IGNhbm5vdCBjb21iaW5lIGFtIG9wdGlvbnMgd2l0aCBlaXRoZXIgaW50ZXJhY3RpdmUgb3IgbWVyZ2Ugb3B0aW9ucyIKKyN+IG1zZ3N0ciAiIgorI34gImzhu5dpIG5naGnDqm0gdHLhu41uZzoga2jDtG5nIHRo4buDIHThu5UgaOG7o3AgY8OhYyB0w7l5IGNo4buNbiBhbSB24bubaSBjw6FjIHTDuXkgY2jhu41uIHTGsMahbmcgIgorI34gInTDoWMgaGF5IGjDsmEgdHLhu5luIgorCisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXNpZ25vZmYnIHdpdGggJy0tcHJlc2VydmUtbWVyZ2VzJyIKKyN+IG1zZ3N0ciAiIgorI34gImzhu5dpIG5naGnDqm0gdHLhu41uZzoga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIOKAnC0tc2lnbm9mZuKAnSB24bubaSDigJwtLXByZXNlcnZlLW1lcmdlc+KAnSIKKworI34gbXNnaWQgImZhdGFsOiBjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCisjfiBtc2dzdHIgIiIKKyN+ICJs4buXaSBuZ2hpw6ptIHRy4buNbmc6IGtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCDigJwtLXByZXNlcnZlLW1lcmdlc+KAnSB24bubaSDigJwtLXJlYmFzZS0iCisjfiAibWVyZ2Vz4oCdIgorCisjfiBtc2dpZCAiZmF0YWw6IGNhbm5vdCBjb21iaW5lICctLXJlYmFzZS1tZXJnZXMnIHdpdGggJy0tc3RyYXRlZ3ktb3B0aW9uJyIKKyN+IG1zZ3N0ciAiIgorI34gImzhu5dpIG5naGnDqm0gdHLhu41uZzoga2jDtG5nIHRo4buDIGvhur90IGjhu6NwIOKAnC0tcmViYXNlLW1lcmdlc+KAnSB24bubaSDigJwtLXN0cmF0ZWd5LSIKKyN+ICJvcHRpb27igJ0iCisKKyN+IG1zZ2lkICJmYXRhbDogY2Fubm90IGNvbWJpbmUgJy0tcmViYXNlLW1lcmdlcycgd2l0aCAnLS1zdHJhdGVneSciCisjfiBtc2dzdHIgIiIKKyN+ICJs4buXaSBuZ2hpw6ptIHRy4buNbmc6IGtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCDigJwtLXJlYmFzZS1tZXJnZXPigJ0gduG7m2kg4oCcLS1zdHJhdGVneeKAnSIKKworI34gbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJyR1cHN0cmVhbV9uYW1lJyIKKyN+IG1zZ3N0ciAidGjGsOG7o25nIG5ndeG7k24ga2jDtG5nIGjhu6NwIGzhu4cg4oCcJHVwc3RyZWFtX25hbWXigJ0iCisKKyN+IG1zZ2lkICIkb250b19uYW1lOiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBtZXJnZSBiYXNlcyIKKyN+IG1zZ3N0ciAiJG9udG9fbmFtZTog4bufIMSRw6J5IGPDsyBuaGnhu4F1IGjGoW4gbeG7mXQgbuG7gW4gbcOzbmcgaMOyYSB0cuG7mW4iCisKKyN+IG1zZ2lkICIkb250b19uYW1lOiB0aGVyZSBpcyBubyBtZXJnZSBiYXNlIgorI34gbXNnc3RyICIkb250b19uYW1lOiDhu58gxJHDonkga2jDtG5nIGPDsyBu4buBbiBtw7NuZyBow7JhIHRy4buZbiBuw6BvIgorCisjfiBtc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCisjfiBtc2dzdHIgIktow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgaOG7o3AgbOG7hzogJG9udG9fbmFtZSIKKworI34gbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyRicmFuY2hfbmFtZSciCisjfiBtc2dzdHIgIm5naGnDqm0gdHLhu41uZzoga2jDtG5nIGPDsyBuaMOhbmggbmjGsCB0aOG6vzog4oCcJGJyYW5jaF9uYW1l4oCdIgorCisjfiBtc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICRzdGFzaF9hYmJyZXYiCisjfiBtc2dzdHIgIsSQw6MgdOG6oW8gYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorCisjfiBtc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorI34gbXNnc3RyICJOaMOhbmggaGnhu4duIHThuqFpICRicmFuY2hfbmFtZSDEkcOjIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCBy4buTaS4iCisKKyN+IG1zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJOaMOhbmggaGnhu4duIHThuqFpICRicmFuY2hfbmFtZSDEkcOjIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCBy4buTaSwgbOG7h25oIHJlYmFzZSDDqXAgYnXhu5ljLiIKKworI34gbXNnaWQgIkNoYW5nZXMgdG8gJG9udG86IgorI34gbXNnc3RyICJUaGF5IMSR4buVaSB0aMOgbmggJG9udG86IgorCisjfiBtc2dpZCAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCisjfiBtc2dzdHIgIlRoYXkgxJHhu5VpIHThu6sgJG1iIHRow6BuaCAkb250bzoiCisKKyN+IG1zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCisjfiBtc2dzdHIgIkNodXnhu4NuLXRp4bq/cC1uaGFuaCAkYnJhbmNoX25hbWUgdGjDoG5oICRvbnRvX25hbWUuIgorCisjfiBtc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgorI34gbXNnc3RyICIiCisjfiAiVHLGsOG7m2MgdGnDqm4sIGRpIGNodXnhu4NuIGhlYWQgxJHhu4MgeGVtIGzhuqFpIGPDoWMgY8O0bmcgdmnhu4djIHRyw6puIMSR4buJbmggY+G7p2EgbsOz4oCmIgorCisjfiBtc2dpZCAiaWdub3JpbmcgdW5rbm93biBjb2xvci1tb3ZlZC13cyBtb2RlICclcyciCisjfiBtc2dzdHIgImLhu48gcXVhIGNo4bq/IMSR4buZIGNvbG9yLW1vdmVkLXdzIGNoxrBhIGJp4bq/dCDigJwlc+KAnSIKKworI34gbXNnaWQgIm9ubHkgJ3RyZWU6MCcgaXMgc3VwcG9ydGVkIgorI34gbXNnc3RyICJjaOG7iSDigJx0cmVlOjDigJ0gbMOgIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyN+IG1zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKKyN+IG1zZ3N0ciAixJBhbmcgxJHhu5VpIHTDqm4gJXMgdGjDoG5oICVzIHRoYXkgdsOsICVzIHRow6BuaCAlcyIKKworI34gbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCisjfiBtc2dzdHIgIlRow6ptIGjDsmEgdHLhu5luICVzIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgZXJyb3IiCisjfiBtc2dzdHIgIkzhu5dpIG7hu5lpIGLhu5kiCisKKyN+IG1zZ2lkICJtYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorI34gbXNnc3RyICIiCisjfiAibHXhu5NuZyBjaMOtbmggxJHDoyDEkcaw4bujYyBjaOG7iSByYSBuaMawbmcgbOG6p24gY2h1eeG7g24gZ2lhbyAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4bqnbiAiCisjfiAiaMOyYSB0cuG7mW4uIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdsOgbyB0w6puIHThuq1wIHRpbiBzaGExICVzIgorCisjfiBtc2dpZCAiY2Fubm90IHJlYWQgc2hhMV9maWxlIGZvciAlcyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBzaGExX2ZpbGUgY2hvICVzIgorCisjfiBtc2dpZCAiIgorI34gImVycm9yOiBjYW5ub3QgY29tYmluZSBpbnRlcmFjdGl2ZSBvcHRpb25zICgtLWludGVyYWN0aXZlLCAtLWV4ZWMsIC0tIgorI34gInJlYmFzZS1tZXJnZXMsIC0tcHJlc2VydmUtbWVyZ2VzLCAtLWtlZXAtZW1wdHksIC0tcm9vdCArIC0tb250bykgd2l0aCBhbSAiCisjfiAib3B0aW9ucyAoJXMpIgorI34gbXNnc3RyICIiCisjfiAibOG7l2k6IGtow7RuZyB0aOG7gyB04buVIGjhu6NwIGPDoWMgdMO5eSBjaOG7jW4gdMawxqFuZyB0w6FjICgtLWludGVyYWN0aXZlLCAtLWV4ZWMsIC0tIgorI34gInJlYmFzZS1tZXJnZXMsIC0tcHJlc2VydmUtbWVyZ2VzLCAtLWtlZXAtZW1wdHksIC0tcm9vdCArIC0tb250bykgduG7m2kgY8OhYyAiCisjfiAidMO5eSBjaOG7jW4gYW0gKCVzKSIKKworI34gbXNnaWQgIiIKKyN+ICJlcnJvcjogY2Fubm90IGNvbWJpbmUgbWVyZ2Ugb3B0aW9ucyAoLS1tZXJnZSwgLS1zdHJhdGVneSwgLS1zdHJhdGVneS0iCisjfiAib3B0aW9uKSB3aXRoIGFtIG9wdGlvbnMgKCVzKSIKKyN+IG1zZ3N0ciAiIgorI34gImzhu5dpOiBraMO0bmcgdGjhu4Mga+G6v3QgaOG7o3AgY8OhYyB0w7l5IGNo4buNbiBow7JhIHRy4buZbiAoLS1tZXJnZSwgLS1zdHJhdGVneSwgLS0iCisjfiAic3RyYXRlZ3ktb3B0aW9uKSB24bubaSBt4buZdCB0w7l5IGNo4buNbiBhbSAoJXMpIgorCisjfiBtc2dpZCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRhcmcnIgorI34gbXNnc3RyICJraMO0bmcgY8O0bmcgbmjhuq1uIHTDuXkgY2jhu41uOiDigJwkYXJn4oCdIgorCisjfiBtc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCisjfiBtc2dzdHIgIuKAnSRpbnZhbGlk4oCdIGtow7RuZyBwaOG6o2kgbMOgIGzhuqduIGNodXnhu4NuIGdpYW8gaOG7o3AgbOG7hyIKKworI34gbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIChsb29raW5nIGZvciAnJXMnKSIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIOKAnCVz4oCdICjEkWFuZyB0w6xtIGtp4bq/bSBjaG8g4oCcJXPigJ0pIgorCisjfiBtc2dpZCAiZGVwcmVjYXRlZCBzeW5vbnltIGZvciAtLWNyZWF0ZS1yZWZsb2ciCisjfiBtc2dzdHIgIsSR4buTbmcgbmdoxKlhIMSRw6MgbOG6oWMgaOG6rXUgY2hvIC0tY3JlYXRlLXJlZmxvZyIKKworI34gbXNnaWQgIkNhbid0IHN0YXQgJXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4Eg4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJhYm9ydCByZWJhc2UiCisjfiBtc2dzdHIgImLDo2kgYuG7jyB2aeG7h2MgY+G6o2kgdOG7lSIKKworI34gbXNnaWQgIm1ha2UgcmViYXNlIHNjcmlwdCIKKyN+IG1zZ3N0ciAidOG6oW8gdsSDbiBs4buHbmggcmViYXNlIgorCisjfiBtc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorI34gbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgbsOgbyBuaMawIHRo4bq/OiAlcyIKKworI34gbXNnaWQgImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGRpIGNodXnhu4NuIG3hu5l0IGPDonktbMOgbS12aeG7h2MgYuG7iyBraMOzYSIKKworI34gbXNnaWQgImNhbm5vdCByZW1vdmUgYSBsb2NrZWQgd29ya2luZyB0cmVlIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgZ+G7oSBi4buPIG3hu5l0IGPDonktbMOgbS12aeG7h2MgYuG7iyBraMOzYSIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJcdEhvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuXG4iCisjfiAiXG4iCisjfiAiXHQiCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJcdFR1eSBuaGnDqm4sIG7hur91IGLhuqFuIHjDs2EgYuG7jyBt4buNaSB0aOG7qSwgdmnhu4djIGPhuqNpIHThu5Ugc+G6vSBi4buLIGLDo2kgYuG7jy5cbiIKKyN+ICJcbiIKKyN+ICJcdCIKKworI34gbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJXMnIChsb29raW5nIGZvciAnJXMnIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2gg4oCcJXPigJ0gKHTDrG0ga2nhur9tIGNobyDigJwlc+KAnSIKKworI34gbXNnaWQgInB1c2h8ZmV0Y2giCisjfiBtc2dzdHIgInB1c2h8ZmV0Y2giCisKKyN+IG1zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IG1lcmdlIChkaXJ0eTogJXMpIgorI34gbXNnc3RyICJC4bqjbmcgbeG7pWMgbOG7pWMgYuG6qW46IGtow7RuZyB0aOG7gyBow7JhIHRy4buZbiAoYuG6qW46ICVzKSIKKworI34gbXNnaWQgIigrLy0peCIKKyN+IG1zZ3N0ciAiKCsvLSl4IgorCisjfiBtc2dpZCAiPGNvbW1hbmQ+IgorI34gbXNnc3RyICI8bOG7h25oPiIKKworI34gbXNnaWQgIndbLGkxWyxpMl1dIgorI34gbXNnc3RyICJ3WyxpMVssaTJdXSIKKworI34gbXNnaWQgIkVudGVyaW5nICckZGlzcGxheXBhdGgnIgorI34gbXNnc3RyICLEkGFuZyB2w6BvIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworI34gbXNnaWQgIlN0b3BwaW5nIGF0ICckZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKKyN+IG1zZ3N0ciAiROG7q25nIGzhuqFpIHThuqFpIOKAnCRkaXNwbGF5cGF0aOKAnTsgc2NyaXB0IHRy4bqjIHbhu4EgdHLhuqFuZyB0aMOhaSBraMOhYyBraMO0bmcuIgorCisjfiBtc2dpZCAiRXZlcnlkYXkgR2l0IFdpdGggMjAgQ29tbWFuZHMgT3IgU28iCisjfiBtc2dzdHIgIk3hu5dpIG5nw6B5IGjhu41jIDIwIGzhu4duaCBHaXQgaGF5IGjGoW4iCisKKyN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSDEkeG7gyBnaGkiCisKKyN+IG1zZ2lkICIiCisjfiAidW5leHBlY3RlZCAxc3QgbGluZSBvZiBzcXVhc2ggbWVzc2FnZTpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisjfiBtc2dzdHIgIiIKKyN+ICJraMO0bmcgY+G6p24gZMOybmcgdGjhu6kgbmjhuqV0IGPhu6dhIGdoaSBjaMO6IHNxdWFzaDpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisKKyN+IG1zZ2lkICIiCisjfiAiaW52YWxpZCAxc3QgbGluZSBvZiBzcXVhc2ggbWVzc2FnZTpcbiIKKyN+ICJcbiIKKyN+ICJcdCUuKnMiCisjfiBtc2dzdHIgIiIKKyN+ICJkw7JuZyB0aOG7qSBuaOG6pXQgY+G7p2EgZ2hpIGNow7ogc3F1YXNoIGtow7RuZyBo4bujcCBs4buHOlxuIgorI34gIlxuIgorI34gIlx0JS4qcyIKKworI34gbXNnaWQgIkJVRzogcmV0dXJuZWQgcGF0aCBzdHJpbmcgZG9lc24ndCBtYXRjaCBjd2Q/IgorI34gbXNnc3RyICJM4buWSTogdHLhuqMgduG7gSBjaHXhu5dpIMSRxrDhu51uZyBk4bqrbiBraMO0bmcga2jhu5twIGN3ZD8iCisKKyN+IG1zZ2lkICJFcnJvciBpbiBvYmplY3QiCisjfiBtc2dzdHIgIkzhu5dpIHRyb25nIMSR4buRaSB0xrDhu6NuZyIKKworI34gbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorI34gbXNnc3RyICJnaXQgZmV0Y2gtcGFjazogY+G6p24gQUNLL05BSywgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyBFT0YiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjIGV4cHJlc3Npb24gJyVzJyIKKyN+IG1zZ3N0ciAiYmnhu4N1IHRo4bupYyDEkeG6t2MgdOG6oyBi4buZIGzhu41jIOKAnCVz4oCdIGtow7RuZyBo4bujcCBs4buHIgorCisjfiBtc2dpZCAiVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOiAlcyIKKyN+IG1zZ3N0ciAiQuG6o24gc2FvIGNow6lwIGPhu6dhIG1p4bq/bmcgdsOhIG3DoCBuw7MgZ+G6t3AgbOG7l2kgdGjDrCDEkcaw4bujYyB0w6xtIHRo4bqleSB0cm9uZzogJXMiCisKKyN+IG1zZ2lkICJwYXRoc3BlYyBhbmQgLS1hbGwgYXJlIGluY29tcGF0aWJsZSIKKyN+IG1zZ3N0ciAixJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIHbDoCAtLWFsbCB4dW5nIGto4bqvYyBuaGF1IgorCisjfiBtc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJGRpc3BsYXlwYXRoJyIKKyN+IG1zZ3N0ciAiIgorI34gIk3DtC3EkXVuLWNvbiDigJwkbmFtZeKAnSAoJHVybCkgxJHGsOG7o2MgYuG7jyDEkcSDbmcga8O9IGNobyDEkcaw4budbmcgZOG6q24g4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjfiBtc2dpZCAiVG8vQ2MvQmNjIGZpZWxkcyBhcmUgbm90IGludGVycHJldGVkIHlldCwgdGhleSBoYXZlIGJlZW4gaWdub3JlZFxuIgorI34gbXNnc3RyICJDw6FjIHRyxrDhu51uZyBUby9DYy9CY2Mga2jDtG5nIMSRxrDhu6NjIHBoacOqbiBk4buLY2gsIGNow7puZyBi4buLIGLhu48gcXVhXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiZW1wdHkgc3RyaW5ncyBhcyBwYXRoc3BlY3Mgd2lsbCBiZSBtYWRlIGludmFsaWQgaW4gdXBjb21pbmcgcmVsZWFzZXMuICIKKyN+ICJwbGVhc2UgdXNlIC4gaW5zdGVhZCBpZiB5b3UgbWVhbnQgdG8gbWF0Y2ggYWxsIHBhdGhzIgorI34gbXNnc3RyICIiCisjfiAiY2h14buXaSBy4buXbmcgbMOgbSDEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24ga2jDtG5nIGjhu6NwIGzhu4cg4bufIGzhuqduIHBow6F0IGjDoG5oIGvhur8gdGnhur9wLiBWdWkgIgorI34gImzDsm5nIGTDuW5nIC4gxJHhu4MgdGhheSB0aOG6vyBu4bq/dSDDvSBi4bqhbiBsw6Aga2jhu5twIG3hu41pIMSRxrDhu51uZyBk4bqrbiIKKworI34gbXNnaWQgImNvdWxkIG5vdCB0cnVuY2F0ZSAnJXMnIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgY+G6r3QgY+G7pXQg4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgY2xvc2UgJXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyDEkcOzbmcgJXMiCisKKyN+IG1zZ2lkICJDb3BpZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorI34gbXNnc3RyICLEkMOjIGNow6lwIG5ow6FuaCBraHV54bq/dCBkYW5oIOKAnCVz4oCdIMSRaSIKKworI34gbXNnaWQgIml0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY3JlYXRlICdIRUFEJyBtYW51YWxseSIKKyN+IG1zZ3N0ciAia2jDtG5nIGjhu6NwIGzDvSBraGkgdOG6oW8g4oCcSEVBROKAnSB0aOG7pyBjw7RuZyIKKworI34gbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorI34gbXNnc3RyICJLaMO0bmcgYmnhur90IGzDoG0gY8OhY2ggbsOgbyDEkeG7gyBuaMOibiBi4bqjbiAoY2xvbmUpICVzIgorCisjfiBtc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKKyN+IG1zZ3N0ciAiS2jDtG5nIGJp4bq/dCBsw6BtIGPDoWNoIG7DoG8gxJHhu4MgbOG6pXkgduG7gSB04burICVzIgorCisjfiBtc2dpZCAiJyR0ZXJtJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorI34gbXNnc3RyICLigJwkdGVybeKAnSBraMO0bmcgcGjhuqNpIGzDoCB0aOG7nWkga+G7syBo4bujcCBs4buHIgorCisjfiBtc2dpZCAiIgorI34gImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisjfiAiICAgICAgIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorI34gbXNnc3RyICIiCisjfiAibOG7l2k6IGtow7RuZyBoaeG7g3UgdMO5eSBjaOG7jW4gY2hvIOKAnHN0YXNoIHNhdmXigJ06ICRvcHRpb25cbiIKKyN+ICIgICAgIMSQ4buDIGPDsyB0aOG7gyBkw7luZyBs4budaSBjaMO6IHRow61jaCBjw7MgY2jhu6lhIC0tIOG7nyDEkeG6p3UsXG4iCisjfiAiICAgICBkw7luZyBnaXQgc3Rhc2ggc2F2ZSAtLSBcIiRvcHRpb25cIiIKKworI34gbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKKyN+IG1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buHIHF1eSB2w6BvIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHNtX3BhdGjigJ0iCisKKyN+IG1zZ2lkICIlJSh0cmFpbGVycykgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCisjfiBtc2dzdHIgIiUlKHRyYWlsZXJzKSBraMO0bmcgbmjhuq1uIGPDoWMgxJHhu5FpIHPhu5EiCisKKyN+IG1zZ2lkICJzdWJtb2R1bGUgdXBkYXRlIHN0cmF0ZWd5IG5vdCBzdXBwb3J0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnIgorI34gbXNnc3RyICIiCisjfiAiY2hp4bq/biBsxrDhu6NjIGPhuq1wIG5o4bqtdCBtw7QtxJF1bi1jb24ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgY2hvIG3DtC3EkXVuLWNvbiDigJwlc+KAnSIKKworI34gbXNnaWQgImNoYW5nZSB1cHN0cmVhbSBpbmZvIgorI34gbXNnc3RyICJ0aGF5IMSR4buVaSB0aMO0bmcgdGluIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJO4bq/dSBi4bqhbiBtdeG7kW4g4oCcJXPigJ0gdGhlbyBkw7VpIOKAnCVz4oCdLCB0aOG7sWMgaGnhu4duIGzhu4duaCBzYXU6XG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJiYXNlbmFtZSIKKyN+IG1zZ3N0ciAidMOqbiBjxqEgc+G7nyIKKworI34gbXNnaWQgIiIKKyN+ICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisjfiAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyN+ICJUbyBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCByZWJhc2luZywgcnVuIFwiZ2l0IHJlYmFzZSAtLSIKKyN+ICJhYm9ydFwiLiIKKyN+IG1zZ3N0ciAiIgorI34gIktoaSBi4bqhbiBj4bqnbiBnaeG6o2kgcXV54bq/dCB24bqlbiDEkeG7gSBuw6B5IGjDo3kgY2jhuqF5IGzhu4duaCBcImdpdCByZWJhc2UgLS1jb250aW51ZSIKKyN+ICJcIi5cbiIKKyN+ICJO4bq/dSBi4bqhbiBjw7Mgw70gxJHhu4tuaCBi4buPIHF1YSBtaeG6v25nIHbDoSwgdGhheSB2w6BvIMSRw7MgYuG6oW4gY2jhuqF5IFwiZ2l0IHJlYmFzZSAtLSIKKyN+ICJza2lwXCIuXG4iCisjfiAixJDhu4MgcGjhu6VjIGjhu5NpIGzhuqFpIHRow6BuaCBuaMOhbmggbmd1ecOqbiB0aOG7p3kgdsOgIGThu6tuZyB2aeG7h2MgdsOhIGzhuqFpIHRow6wgY2jhuqF5ICIKKyN+ICJcImdpdCByZWJhc2UgLS1hYm9ydFwiLiIKKworI34gbXNnaWQgIiIKKyN+ICJXYXJuaW5nOiB0aGUgU0hBLTEgaXMgbWlzc2luZyBvciBpc24ndCBhIGNvbW1pdCBpbiB0aGUgZm9sbG93aW5nIGxpbmU6XG4iCisjfiAiIC0gJGxpbmUiCisjfiBtc2dzdHIgIiIKKyN+ICJD4bqjbmggYsOhbzogU0hBLTEgYuG7iyB0aGnhur91IGhv4bq3YyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHRyb25nICIKKyN+ICJkw7JuZyBzYXUgxJHDonk6XG4iCisjfiAiIC0gJGxpbmUiCisKKyN+IG1zZ2lkICIiCisjfiAiV2FybmluZzogdGhlIGNvbW1hbmQgaXNuJ3QgcmVjb2duaXplZCBpbiB0aGUgZm9sbG93aW5nIGxpbmU6XG4iCisjfiAiIC0gJGxpbmUiCisjfiBtc2dzdHIgIiIKKyN+ICJD4bqjbmggYsOhbzogbOG7h25oIGtow7RuZyBuaOG6rW4gcmEgdHJvbmcgZMOybmcgc2F1IMSRw6J5OlxuIgorI34gIiAtICRsaW5lIgorCisjfiBtc2dpZCAiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuIgorI34gbXNnc3RyICJIb+G6t2MgbMOgIGLhuqFuIGPDsyB0aOG7gyBiw6NpIGLhu48gbOG6p24gY+G6o2kgdOG7lSB24bubaSBs4buHbmgg4oCcZ2l0IHJlYmFzZSAtLWFib3J04oCdLiIKKworI34gbXNnaWQgIiUiCisjfiBtc2dpZF9wbHVyYWwgIiUiCisjfiBtc2dzdHJbMF0gIiUiCisKKyN+IG1zZ2lkICIlcywgJSIKKyN+IG1zZ2lkX3BsdXJhbCAiJXMsICUiCisjfiBtc2dzdHJbMF0gIiVzLCAlIgorCisjfiBtc2dpZCAiaW4gJTAuMWYgc2Vjb25kcyBhdXRvbWF0aWNhbGx5Li4uIgorI34gbXNnc3RyICJ0cm9uZyAlMC4xZiBnacOieSBt4buZdCBjw6FjaCB04buxIMSR4buZbmfigKYiCisKKyN+IG1zZ2lkICJkdXAyKCVkLCVkKSBmYWlsZWQiCisjfiBtc2dzdHIgImR1cDIoJWQsJWQpIGfhurdwIGzhu5dpIgorCisjfiBtc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorI34gbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvIGto4bufaSB04bqhbyB0csOqbiAiCisKKyN+IG1zZ2lkICJQYXRjaCBpcyBlbXB0eS4gV2FzIGl0IHNwbGl0IHdyb25nPyIKKyN+IG1zZ3N0ciAiTWnhur9uZyB2w6EgdHLhu5FuZyBy4buXbmcuIFF1w6EgdHLDrG5oIGNoaWEgbmjhu48gbWnhur9uZyB2w6EgY8OzIGzhu5dpPyIKKworI34gbXNnaWQgIiIKKyN+ICJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorI34gIkRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/IgorI34gbXNnc3RyICIiCisjfiAiQuG6oW4gduG6q24gY8OzIG5o4buvbmcgxJHGsOG7nW5nIGThuqtuIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyBj4bunYSAiCisjfiAibcOsbmguXG4iCisjfiAiQuG6oW4gxJHDoyBxdcOqbiBz4butIGThu6VuZyBs4buHbmgg4oCcZ2l0IGFkZOKAnSDDoD8iCisKKyN+IG1zZ2lkICIiCisjfiAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisjfiAiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCisjfiBtc2dzdHIgIiIKKyN+ICJLaMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IHbDoCBjaHV54buDbiB0aMOgbmggbmjDoW5oIOKAnCVz4oCdIGPDuW5nIGzDumNcbiIKKyN+ICJC4bqhbiDEkcOjIGPDsyDDvSDEkeG7i25oIGNoZWNrb3V0IOKAnCVz4oCdIGPDoWkgbcOgIGtow7RuZyB0aOG7gyDEkcaw4bujYyBwaMOibiBnaeG6o2kgbmjGsCBsw6AgbOG6p24gIgorI34gImNodXnhu4NuIGdpYW8/IgorCisjfiBtc2dpZCAiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgb3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKKyN+IG1zZ3N0ciAiIgorI34gIk5o4buvbmcgxJHGsOG7nW5nIGThuqtuIHLDtSByw6BuZyDEkcaw4bujYyBjaOG7iSByYSBraMO0bmcgY8OzIHTDuXkgY2jhu41uIC1pIGPFqW5nIGtow7RuZyAtbzsgIgorI34gImNvaSBsw6AgLS1vbmx5IG5o4buvbmcgxJHGsOG7nW5nIGThuqtuIgorCisjfiBtc2dpZCAiZGVmYXVsdCBtb2RlIGZvciByZWN1cnNpb24iCisjfiBtc2dzdHIgImNo4bq/IMSR4buZIG3hurdjIMSR4buLbmggY2hvIMSR4buHIHF1aSIKKworI34gbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN1YmNvbW1hbmQiCisjfiBtc2dzdHIgImzhu4duaCBjb24gc3VibW9kdWxlLS1oZWxwZXIgcGjhuqNpIMSRxrDhu6NjIGfhu41pIHbhu5tpIG3hu5l0IGzhu4duaCBjb24iCisKKyN+IG1zZ2lkICJ0YWc6IHRhZ2dpbmcgIgorI34gbXNnc3RyICJ0aOG6uzogxJFhbmcgxJHDoW5oIHRo4bq7IgorCisjfiBtc2dpZCAiY29tbWl0IG9iamVjdCIKKyN+IG1zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyN+IG1zZ2lkICJ0cmVlIG9iamVjdCIKKyN+IG1zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGPDonkiCisKKyN+IG1zZ2lkICJibG9iIG9iamVjdCIKKyN+IG1zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGJsb2IiCisKKyN+IG1zZ2lkICIiCisjfiAiVGhlcmUgaXMgbm90aGluZyB0byBleGNsdWRlIGZyb20gYnkgOihleGNsdWRlKSBwYXR0ZXJucy5cbiIKKyN+ICJQZXJoYXBzIHlvdSBmb3Jnb3QgdG8gYWRkIGVpdGhlciAnOi8nIG9yICcuJyA/IgorI34gbXNnc3RyICIiCisjfiAi4bueIMSRw6J5IGtow7RuZyBjw7MgZ8OsIGLhu4sgbG/huqFpIHRy4burIGLhu59pOiBjw6FjIG3huqt1IChsb+G6oWkgdHLhu6spLlxuIgorI34gIkPDsyBs4bq9IGLhuqFuIMSRw6MgcXXDqm4gdGjDqm0gaG/hurdjIGzDoCDigJw6L+KAnSBob+G6t2MgbMOgIOKAnC7igJ0/IgorCisjfiBtc2dpZCAidW5yZWNvZ25pemVkIGZvcm1hdDogJSUoJXMpIgorI34gbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIMSR4buLbmggZOG6oW5nOiAlJSglcykiCisKKyN+IG1zZ2lkICI6c3RyaXA9IHJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlciBhcmd1bWVudCIKKyN+IG1zZ3N0ciAiOnN0cmlwPSBj4bqnbiBt4buZdCDEkeG7kWkgc+G7kSBuZ3V5w6puIGTGsMahbmciCisKKyN+IG1zZ2lkICJyZWYgJyVzJyBkb2VzIG5vdCBoYXZlICVsZCBjb21wb25lbnRzIHRvIDpzdHJpcCIKKyN+IG1zZ3N0ciAidGhhbSBjaGnhur91IOKAnCVz4oCdIGtow7RuZyBjw7MgJWxkIHRow6BuaCBwaOG6p24gxJHhu4MgbcOgIDpzdHJpcCIKKworI34gbXNnaWQgIlslczogZ29uZV0iCisjfiBtc2dzdHIgIlslczogxJHDoyByYSDEkWldIgorCisjfiBtc2dpZCAiWyVzXSIKKyN+IG1zZ3N0ciAiWyVzXSIKKworI34gbXNnaWQgIlslczogYmVoaW5kICVkXSIKKyN+IG1zZ3N0ciAiWyVzOiDEkeG7qW5nIHNhdSAlZF0iCisKKyN+IG1zZ2lkICJbJXM6IGFoZWFkICVkXSIKKyN+IG1zZ3N0ciAiWyVzOiBwaMOtYSB0csaw4bubYyAlZF0iCisKKyN+IG1zZ2lkICJbJXM6IGFoZWFkICVkLCBiZWhpbmQgJWRdIgorI34gbXNnc3RyICJbJXM6IHRyxrDhu5tjICVkLCBzYXUgJWRdIgorCisjfiBtc2dpZCAiICoqKiogaW52YWxpZCByZWYgKioqKiIKKyN+IG1zZ3N0ciAiICoqKiogdGhhbSBjaGnhur91IGtow7RuZyBo4bujcCBs4buHICoqKioiCisKKyN+IG1zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKKyN+IG1zZ3N0ciAidGjGsCBt4bulYyDEkeG7kWkgdMaw4bujbmcgZMOgaSBt4buZdCBjw6FjaCDEkWnDqm4gcuG7kyAlLipzIgorCisjfiBtc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIDxtc2c+IEhFQUQgPGNvbW1pdD4iCisjfiBtc2dzdHIgImdpdCBtZXJnZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8dGluLW5o4bqvbj4gSEVBRCA8Y29tbWl0PiIKKworI34gbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorI34gbXNnc3RyICJ0w6puIHRo4bq7IHF1w6EgZMOgaTogJS4qc+KApiIKKworI34gbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCisjfiBtc2dzdHIgInBo4bqnbiDEkeG6p3UgdGjhursgcXXDoSBs4bubbi4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyN+ICJtYXJrZWQgZm9yIGRpc2NhcmRpbmciCisjfiBtc2dzdHIgIiIKKyN+ICJO4bq/dSBtaeG6v25nIHbDoSDEkcaw4bujYyDDoXAgZOG7pW5nIHPhuqFjaCBz4bq9LCBodW5rIMSRw6Mgc+G7rWEgc+G6vSBuZ2F5IGzhuq1wIHThu6ljXG4iCisjfiAixJHGsOG7o2MgxJHDoW5oIGThuqV1IMSR4buDIGxv4bqhaSBi4buPIgorCisjfiBtc2dpZCAiVXNlIGFuIGV4cGVyaW1lbnRhbCBibGFuay1saW5lLWJhc2VkIGhldXJpc3RpYyB0byBpbXByb3ZlIGRpZmZzIgorI34gbXNnc3RyICIiCisjfiAiRMO5bmcgbeG7mXQgcGjhu49uZyDEkW/DoW4gZOG7sWEgdHLDqm4gZMOybmcgdHLhuq9uZyB0aOG7rSBuZ2hp4buHbSDEkeG7gyB0xINuZyBjxrDhu51uZyBjw6FjIGRpZmYiCisKKyN+IG1zZ2lkICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIgorI34gbXNnc3RyICJHaeG7j2nigKYgIOKAnHR1IGLhu5XigJ0gY8OhaSBjdeG7kWkgduG7m2kgYuG6o25nIG3hu6VjIGzhu6VjIGLhuqluLiIKKworI34gbXNnaWQgIiIKKyN+ICJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZSAob3Igb25lIG9mIGl0cyBuZXN0ZWQgc3VibW9kdWxlcylcbiIKKyN+ICJ1c2VzIGEgLmdpdCBkaXJlY3Rvcnk6IgorI34gbXNnaWRfcGx1cmFsICIiCisjfiAidGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzIChvciBvbmUgb2YgdGhlaXIgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisjfiAidXNlIGEgLmdpdCBkaXJlY3Rvcnk6IgorI34gbXNnc3RyWzBdICIiCisjfiAiY8OhYyBtw7QtxJF1bi1jb24gc2F1IMSRw6J5IChoYXkgbeG7mXQgdHJvbmcgc+G7kSBtw7QtxJF1bi1jb24gYsOqbiB0cm9uZyBj4bunYSBuw7MpXG4iCisjfiAiZMO5bmcgbeG7mXQgdGjGsCBt4bulYyAuZ2l0OiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgIgorI34gImhpc3RvcnkpIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiKGTDuW5nIC9cInJtIC1yZi9cIiBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gZ+G7oSBi4buPIG7DsyBjw7luZyB24bubaSB04bqldCBj4bqjIGzhu4tjaCBz4butICIKKyN+ICJj4bunYSBjaMO6bmcpIgorCisjfiBtc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorI34gbXNnc3RyICJM4buXaSBiYW8gYuG7jWMgJXMuIgorCisjfiBtc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZXJyeS1waWNrLiIKKyN+IG1zZ3N0ciAiQ8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIGPhu6dhIGLhuqFuIGPDsyB0aOG7gyBi4buLIGdoaSDEkcOoIGLhu59pIGzhu4duaCBjaGVycnktcGljay4iCisKKyN+IG1zZ2lkICJDYW5ub3QgcmV2ZXJ0IGR1cmluZyBhbm90aGVyIHJldmVydC4iCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyBob8OgbiBuZ3V5w6puIHRyb25nIGtoaSBjw7MgaG/DoG4gbmd1ecOqbiBraMOhYy4iCisKKyN+IG1zZ2lkICJDYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGFub3RoZXIgY2hlcnJ5LXBpY2suIgorI34gbXNnc3RyICIiCisjfiAiS2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gdmnhu4djIGNoZXJyeS1waWNrIHRyb25nIGtoaSBraGkgxJFhbmcgY2hlcnJ5LXBpY2sga2jDoWMuIgorCisjfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyBt4bufICVzIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGZvcm1hdCAlcy4iCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7i25oIGThuqFuZyDigJwlc+KAnS4iCisKKyN+IG1zZ2lkICIlczogJXMiCisjfiBtc2dzdHIgIiVzOiAlcyIKKworI34gbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorI34gbXNnc3RyICJC4bqhbiBj4bqnbiDEkeG6t3QgdGjDtG5nIHRpbiB24buBIG5nxrDhu51pIGNodXnhu4NuIGdpYW8gbcOjIG5ndeG7k24gdHLGsOG7m2MgxJHDoyIKKworI34gbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnTogxJHGoW4gduG7iyBzYWkiCisKKyN+IG1zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgYmxvYiAlczogxJHGoW4gduG7iyBzYWkiCisKKyN+IG1zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiBpbnZhbGlkIHVuaXQiCisjfiBtc2dzdHIgIiIKKyN+ICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgdOG6rXAgdGluICVzOiDEkcahbiB24buLICIKKyN+ICJzYWkiCisKKyN+IG1zZ2lkICIiCisjfiAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3RhbmRhcmQgaW5wdXQ6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluOiAiCisjfiAixJHGoW4gduG7iyBraMO0bmcgaOG7o3AgbOG7hyIKKworI34gbXNnaWQgIiIKKyN+ICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdWJtb2R1bGUtYmxvYiAlczogaW52YWxpZCB1bml0IgorI34gbXNnc3RyICIiCisjfiAic2FpIGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EgY+G7p2EgY+G6pXUgaMOsbmgg4oCcJXPigJ0gY2hvIOKAnCVz4oCdIHRyb25nIHN1Ym1vZHVsZS1ibG9iICVzOiAiCisjfiAixJHGoW4gduG7iyBraMO0bmcgaOG7o3AgbOG7hyIKKworI34gbXNnaWQgIiIKKyN+ICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBjb21tYW5kIGxpbmUgJXM6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyBkw7JuZyBs4buHbmggJXM6IMSRxqFuIHbhu4sgIgorI34gImtow7RuZyBo4bujcCBs4buHIgorCisjfiBtc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6IGludmFsaWQgdW5pdCIKKyN+IG1zZ3N0ciAiIgorI34gInNhaSBnacOhIHRy4buLIGLhurFuZyBz4buRIGPhu6dhIGPhuqV1IGjDrG5oIOKAnCVz4oCdIGNobyDigJwlc+KAnSB0cm9uZyAlczogxJHGoW4gduG7iyBraMO0bmcgaOG7o3AgIgorI34gImzhu4ciCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAybmQgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgMjoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAzcmQgY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgMzoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA0dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgNDoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA1dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgNToiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA2dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgNjoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA3dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgNzoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA4dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgODoiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSA5dGggY29tbWl0IG1lc3NhZ2U6IgorI34gbXNnc3RyICLEkMOieSBsw6AgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgOToiCisKKyN+IG1zZ2lkICJUaGlzIGlzIHRoZSAxMHRoIGNvbW1pdCBtZXNzYWdlOiIKKyN+IG1zZ3N0ciAixJDDonkgbMOgIGNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDEwOiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlICR7bn10aCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIsSQw6J5IGzDoCBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAke259OiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlICR7bn1zdCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIsSQw6J5IGzDoCBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAke259OiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlICR7bn1uZCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIsSQw6J5IGzDoCBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAke259OiIKKworI34gbXNnaWQgIlRoaXMgaXMgdGhlICR7bn1yZCBjb21taXQgbWVzc2FnZToiCisjfiBtc2dzdHIgIsSQw6J5IGzDoCBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAke259OiIKKworI34gbXNnaWQgIlRoZSAxc3QgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgbmjhuqV0IHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgMm5kIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDIgc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSAzcmQgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgMyBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiVGhlIDR0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJDaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSA0IHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgNXRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDUgc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSA2dGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgNiBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiVGhlIDd0aCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJDaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSA3IHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgOHRoIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupIDggc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSA5dGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgOSBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiVGhlIDEwdGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgMTAgc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSAke259dGggY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgJHtufSBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiVGhlICR7bn1zdCBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHNraXBwZWQ6IgorI34gbXNnc3RyICJDaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyB0aOG7qSAke259IHPhur0gYuG7iyBi4buPIHF1YToiCisKKyN+IG1zZ2lkICJUaGUgJHtufW5kIGNvbW1pdCBtZXNzYWdlIHdpbGwgYmUgc2tpcHBlZDoiCisjfiBtc2dzdHIgIkNow7ogdGjDrWNoIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHRo4bupICR7bn0gc+G6vSBi4buLIGLhu48gcXVhOiIKKworI34gbXNnaWQgIlRoZSAke259cmQgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKyN+IG1zZ3N0ciAiQ2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdGjhu6kgJHtufSBz4bq9IGLhu4sgYuG7jyBxdWE6IgorCisjfiBtc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgY2jhuqF5IGdwZy4iCisKKyN+IG1zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCisjfiBtc2dzdHIgImdwZyDEkcOjIGtow7RuZyBjaOG6pXAgbmjhuq1uIGThu68gbGnhu4d1IgorCisjfiBtc2dpZCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgaW4gdGhlIHRyZWUiCisjfiBtc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgdHJvbmcgY8OieSAodHJlZSkiCisKKyN+IG1zZ2lkICJGYXRhbCBtZXJnZSBmYWlsdXJlLCBzaG91bGRuJ3QgaGFwcGVuLiIKKyN+IG1zZ3N0ciAiVmnhu4djIGjDsmEgdHLhu5luIGjhu49uZyBuZ2hpw6ptIHRy4buNbmcsIGtow7RuZyBuw6puIMSR4buDIHjhuqN5IHJhLiIKKworI34gbXNnaWQgIlVucHJvY2Vzc2VkIHBhdGg/Pz8gJXMiCisjfiBtc2dzdHIgIsSQxrDhu51uZyBk4bqrbiBjaMawYSDEkcaw4bujYyB44butIGzDvT8/PyAlcyIKKworI34gbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKKyN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDICVzIHRyb25nIGtoaSAlcyIKKworI34gbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKKyN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDIGNoZXJyeS1waWNrIHbDoG8gbeG7mXQgxJHhuqd1IChoZWFkKSB0cuG7kW5nIHLhu5duZyIKKworI34gbXNnaWQgImNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyAlcyDEkeG7gyBnaGkiCisKKyN+IG1zZ2lkICJidWc6IHVuaGFuZGxlZCB1bm1lcmdlZCBzdGF0dXMgJXgiCisjfiBtc2dzdHIgImzhu5dpOiBraMO0bmcgdGjhu4MgdGnhur9wIG5o4bqtbiB0cuG6oW5nIHRow6FpIGNoxrBhIGjDsmEgdHLhu5luICV4IgorCisjfiBtc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCisjfiBtc2dzdHIgImzhu5dpOiBraMO0bmcgdGjhu4MgdGnhur9wIG5o4bqtbiB0cuG6oW5nIHRow6FpIGzhu4duaCBkaWZmICVjIgorCisjfiBtc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZSIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSBt4bqrdSBtw7QgdOG6oyBuaMOhbmgiCisKKyN+IG1zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCisjfiBtc2dzdHIgInThuq1wIHRpbiBnaGkgYuG6o25nIG3hu6VjIGzhu6VjIGLhu4sgaOG7j25nIgorCisjfiBtc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKKyN+IG1zZ3N0ciAicuG7nWkgYuG7jyBIRUFEIHThuqFpIGzhuqduIGNodXnhu4NuIGdpYW8gZGFuaCBuZ2jEqWEiCisKKyN+IG1zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gIgorI34gbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIGvhur90IG7hu5Fp4oCmICIKKworI34gbXNnaWQgIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIKKyN+IG1zZ3N0ciAiICAoa2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCB0aGFtIGNoaeG6v3UgbuG7mWkgYuG7mSkiCisKKyN+IG1zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorI34gbXNnc3RyICJLaOG7n2kgdOG6oW8gbOG6oWkgxJHDoyBz4bq1biBjw7MgcuG7k2kiCisKKyN+IG1zZ2lkICJJbml0aWFsaXplZCBlbXB0eSIKKyN+IG1zZ3N0ciAiS2jhu59pIHThuqFvIHRy4buRbmcgcuG7l25nIgorCisjfiBtc2dpZCAiIHNoYXJlZCIKKyN+IG1zZ3N0ciAiIMSRw6MgY2hpYSBz4bq7IgorCisjfiBtc2dpZCAiVmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorI34gbXNnc3RyICIiCisjfiAiVGjhuqltIHRyYSB4ZW0gbOG6p24gY2h1eeG7g24gZ2lhbyBjw7MgdMOqbiDEkcOzIGPDsyBjaOG7ryBrw70gR1BHIGjhu6NwIGzhu4cgaGF5IGtow7RuZyIKKworI34gbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKKyN+IG1zZ3N0ciAixJBhbmcgZ2hpIFNRVUFTSF9NU0ciCisKKyN+IG1zZ2lkICJGaW5pc2hpbmcgU1FVQVNIX01TRyIKKyN+IG1zZ3N0ciAiSG/DoG4gdGjDoG5oIFNRVUFTSF9NU0ciCisKKyN+IG1zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCisjfiBtc2dzdHIgIiAgIHbDoCB24bubaSBtw6F5IGNo4bunIgorCisjfiBtc2dpZCAicmVtb3ZpbmcgJyVzJyBmYWlsZWQiCisjfiBtc2dzdHIgImfhurdwIGzhu5dpIGtoaSB4w7NhIGLhu48g4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCisjfiBtc2dzdHIgIkjDo3kgZ+G7jWkgbOG7h25obCDigJxiaXNlY3Rfc3RhdGXigJ0gduG7m2kgw610IG5o4bqldCBt4buZdCDEkeG7kWkgc+G7kS4iCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiAiCisjfiAiZnJvbSIKKyN+IG1zZ3N0ciAiTuG6v3UgYuG6oW4gbXXhu5FuIGTDuW5nIGzhuqFpIHRoxrAgbeG7pWMgZ2l0IG7hu5lpIGLhu5kgbsOgeSB0aGF5IHbDrCBuaMOibiBi4bqjbiB04burIG7DsyIKKworI34gbXNnaWQgIiIKKyN+ICJ1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIElmIHRoZSBsb2NhbCBnaXQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgY29ycmVjdCAiCisjfiAicmVwbyIKKyN+IG1zZ3N0ciAiIgorI34gImTDuW5nIHTDuXkgY2jhu41uIOKAnC0tZm9yY2XigJ0uIE7hur91IHRoxrAgbeG7pWMgZ2l0IG7hu5lpIGLhu5kga2jDtG5nIHBo4bqjaSBsw6AgcmVwbyAoa2hvKSAiCisjfiAixJHDum5nIgorCisjfiBtc2dpZCAiIgorI34gIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyN+ICJvcHRpb24uIgorI34gbXNnc3RyICIiCisjfiAiaGF5IGLhuqFuIGtow7RuZyBjaOG6r2MgY2jhuq9uIMSRaeG7gXUgxJHDsyBjw7MgbmdoxKlhIGfDrCBjaOG7jW4gdMOqbiBraMOhYyB24bubaSB0w7l5IGNo4buNbiDigJwtLSIKKyN+ICJuYW1l4oCdLiIKKworI34gbXNnaWQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSIKKyN+IG1zZ3N0ciAiQ8OieSBsw6BtIHZp4buHYyBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdIGPDsyBjaOG7qWEgdGjGsCBt4bulYyAuZ2l0IgorCisjfiBtc2dpZCAiIgorI34gIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyAiCisjfiAiaGlzdG9yeSkiCisjfiBtc2dzdHIgIiIKKyN+ICIoZMO5bmcg4oCccm0gLXJm4oCdIG7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiBn4buhIGLhu48gbsOzIGPDuW5nIHbhu5tpIHThuqV0IGPhuqMgbOG7i2NoIHPhu60gY+G7p2EgIgorI34gImNow7puZykiCisKKyN+IG1zZ2lkICInJXMnOiAlcyIKKyN+IG1zZ3N0ciAi4oCcJXPigJ06ICVzIgorCisjfiBtc2dpZCAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKKyN+IG1zZ3N0ciAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKKworI34gbXNnaWQgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCisjfiBtc2dzdHIgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCisKKyN+IG1zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXNcbiIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gJXM6ICVzXG4iCisKKyN+IG1zZ2lkICJQbGVhc2UsIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCisjfiBtc2dzdHIgIiIKKyN+ICJWdWkgbMOybmcgxJHGsGEgY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbiB2w6BvIOKAnC5naXRtb2R1bGVz4oCdIGhheSB04bqhbSBj4bqldCBjaMO6bmcgxJFpICIKKyN+ICLEkeG7gyB44butIGzDvSIKKworI34gbXNnaWQgImZhaWxlZCB0byByZW1vdmU6ICVzIgorI34gbXNnc3RyICJn4bq3cCBs4buXaSBraGkgZ+G7oSBi4buPOiAlcyIKKworI34gbXNnaWQgIiIKKyN+ICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyN+ICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKKyN+IG1zZ3N0ciAiIgorI34gIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdIGNoxrBhIMSRxrDhu6NjIGto4bufaSB04bqhby5cbiIKKyN+ICJDw7MgbOG6vSBi4bqhbiBtdeG7kW4gc+G7rSBk4bulbmcgbOG7h25oIOKAnHVwZGF0ZSAtLWluaXTigJ0/IgorCisjfiBtc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKKyN+IG1zZ3N0ciAiIgorI34gIkNodXnhu4NuIHRp4bq/cCBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gbuG7mWkgYuG7mSB04bubaSBoZWFkIHRoxrDhu6NuZyBuZ3Xhu5NuIMSRw6MgY+G6rXAgbmjhuq10IgorCisjfiBtc2dpZCAiaW1wcm9wZXIgZm9ybWF0IGVudGVyZWQgYWxpZ246JXMiCisjfiBtc2dzdHIgIsSR4buLbmggZOG6oW5nIGtow7RuZyDEkcO6bmcgY2jhu5cgY8SDbiBjaOG7iW5oOiVzIgorCisjfiBtc2dpZCAiIgorI34gInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGhhcyBjaGFuZ2VkIGluXG4iCisjfiAiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisjfiAiYW5kIG1haW50YWluIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvciwgdXNlOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyN+ICJcbiIKKyN+ICJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBub3csIHVzZTpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorI34gIlxuIgorI34gIldoZW4gcHVzaC5kZWZhdWx0IGlzIHNldCB0byAnbWF0Y2hpbmcnLCBnaXQgd2lsbCBwdXNoIGxvY2FsIGJyYW5jaGVzXG4iCisjfiAidG8gdGhlIHJlbW90ZSBicmFuY2hlcyB0aGF0IGFscmVhZHkgZXhpc3Qgd2l0aCB0aGUgc2FtZSBuYW1lLlxuIgorI34gIlxuIgorI34gIlNpbmNlIEdpdCAyLjAsIEdpdCBkZWZhdWx0cyB0byB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgJ3NpbXBsZSdcbiIKKyN+ICJiZWhhdmlvciwgd2hpY2ggb25seSBwdXNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4iCisjfiAicmVtb3RlIGJyYW5jaCB0aGF0ICdnaXQgcHVsbCcgdXNlcyB0byB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLlxuIgorI34gIlxuIgorI34gIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAncHVzaC5kZWZhdWx0JyBmb3IgZnVydGhlciAiCisjfiAiaW5mb3JtYXRpb24uXG4iCisjfiAiKHRoZSAnc2ltcGxlJyBtb2RlIHdhcyBpbnRyb2R1Y2VkIGluIEdpdCAxLjcuMTEuIFVzZSB0aGUgc2ltaWxhciBtb2RlXG4iCisjfiAiJ2N1cnJlbnQnIGluc3RlYWQgb2YgJ3NpbXBsZScgaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0KSIKKyN+IG1zZ3N0ciAiIgorI34gImJp4bq/biBwdXNoLmRlZmF1bHQgY2jGsGEgxJHGsOG7o2MgxJHhurd0OyBnacOhIHRy4buLIG5n4bqnbSDEkeG7i25oIGPhu6dhIG7Ds1xuIgorI34gIsSRw6MgxJHGsOG7o2MgdGhheSDEkeG7lWkgdHJvbmcgR2l0IDIuMCB04burIOKAnG1hdGNoaW5n4oCdIHRow6BuaCDigJxzaW1wbGXigJ0uXG4iCisjfiAixJDhu4Mga2jDtG5nIGhp4buDbiB0aOG7iyBuaOG6r2Mgbmjhu58gbsOgeSB2w6AgZHV5IHRyw6wgY8OhY2ggeOG7rSBsw70gY8WpLCBow6N5IGNo4bqheSBs4buHbmg6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorI34gIlxuIgorI34gIsSQ4buDIGtow7RuZyBoaeG7g24gdGjhu4sgbmjhuq9jIG5o4bufIG7DoHkgdsOgIMOhcCBk4bulbmcgY8OhY2gg4bupbmcgeOG7rSBt4bubaSwgaMOjeSBjaOG6oXkgIgorI34gImzhu4duaDpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorI34gIlxuIgorI34gIktoaSBwdXNoLmRlZmF1bHQgxJHGsOG7o2MgxJHhurd0IHRow6BuaCDigJxtYXRjaGluZ+KAnSwgZ2l0IHPhur0gxJHhuql5IGPDoWMgbmjDoW5oIG7hu5lpIGLhu5lcbiIKKyN+ICJsw6puIGPDoWMgbmjDoW5oIHRyw6puIG3DoXkgY2jhu6csIGPDoWkgbcOgIMSRw6Mgc+G6tW4gY8OzIHbDoCBjw7luZyB0w6puLlxuIgorI34gIlxuIgorI34gIlRyb25nIDIuMCwgR2l0IHPhur0gbeG6t2MgxJHhu4tuaCBkdXkgdHLDrCBjw6FjIOG7qW5nIHjhu60g4oCcc2ltcGxl4oCdLFxuIgorI34gImPDoWkgbsOgeSBjaOG7iSDEkeG6qXkgbmjhu69uZyBuaMOhbmggaGnhu4duIGjDoG5oIGzDqm4gY8OhYyBuaMOhbmggdMawxqFuZyDhu6luZ1xuIgorI34gInRyw6puIG3DoXkgY2jhu6cgY8OhaSBtw6AgbOG7h25oIOKAnGdpdCBwdWxs4oCdIGTDuW5nIMSR4buDIGPhuq1wIG5o4bqtdCBuaMOhbmggaGnhu4duIHThuqFpLlxuIgorI34gIlxuIgorI34gIlhlbSDigJxnaXQgaGVscCBjb25maWfigJ0gdsOgIHTDrG0gxJHhur9uIOKAnHB1c2guZGVmYXVsdOKAnSDEkeG7gyBjw7MgdGjDqm0gdGjDtG5nIHRpbi5cbiIKKyN+ICIoY2jhur8gxJHhu5kg4oCcc2ltcGxl4oCdIMSRxrDhu6NjIGLhuq90IMSR4bqndSBz4butIGThu6VuZyB04burIEdpdCAxLjcuMTEuIFPhu60gZOG7pW5nIGNo4bq/IMSR4buZIHTGsMahbmcgIgorI34gInThu7FcbiIKKyN+ICLigJxjdXJyZW504oCdIHRoYXkgdsOsIOKAnHNpbXBsZeKAnSBu4bq/dSBi4bqhbiB0aOG7iW5oIHRob+G6o25nIHBo4bqjaSBz4butIGThu6VuZyBi4bqjbiBHaXQgY8WpKSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyIKKyN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDIG7hu5FpIHRow6ptIOKAnCVz4oCdIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCisjfiBtc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBuZ8aw4budaSBkw7luZyBoaeG7h24gdOG6oWkgdHJvbmcgdOG6rXAgdGluIHBhc3N3ZDogJXMiCisKKyN+IG1zZ2lkICJubyBzdWNoIHVzZXIiCisjfiBtc2dzdHIgImtow7RuZyBjw7MgbmfGsOG7nWkgZMO5bmcgbmjGsCB24bqteSIKKworI34gbXNnaWQgIlRlc3RpbmcgIgorI34gbXNnc3RyICLEkGFuZyB0aOG7rSIKKworI34gbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorI34gbXNnc3RyICJuaMOhbmgg4oCcJXPigJ0ga2jDtG5nIGNo4buJIMSR4bq/biBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gY+G6oyIKKworI34gbXNnaWQgInByaW50IG9ubHkgbWVyZ2VkIGJyYW5jaGVzIgorI34gbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyBuaMOhbmggxJHDoyBow7JhIHRy4buZbiIKKworI34gbXNnaWQgIi0tZGlzc29jaWF0ZSBnaXZlbiwgYnV0IHRoZXJlIGlzIG5vIC0tcmVmZXJlbmNlIgorI34gbXNnc3RyICLEkcOjIMSRxrBhIHJhIC0tZGlzc29jaWF0ZSwgbmjGsG5nIOG7nyDEkcOieSBs4bqhaSBraMO0bmcgY8OzIC0tcmVmZXJlbmNlIgorCisjfiBtc2dpZCAic2hvdyB1c2FnZSIKKyN+IG1zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWNoIGTDuW5nIgorCisjfiBtc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBuYW1lICVzIgorI34gbXNnc3RyICJ0w6puIG3huqt1IGTDoGkgbeG7mXQgY8OhY2ggxJFpw6puIHLhu5MgJXMiCisKKyN+IG1zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCisjfiBtc2dzdHIgImxpw6puIGvhur90IG3hu4FtIGTDoGkgbeG7mXQgY8OhY2ggxJFpw6puIHLhu5MgJXMiCisKKyN+IG1zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIHBhdGggJXMiCisjfiBtc2dzdHIgIsSRxrDhu51uZyBk4bqrbiBt4bqrdSDigJwlc+KAnSBkw6BpIG3hu5l0IGPDoWNoIMSRacOqbiBy4buTIgorCisjfiBtc2dpZCAidW5zdXBwb3J0ZWQgc29ydCBzcGVjaWZpY2F0aW9uICclcyciCisjfiBtc2dzdHIgImtow7RuZyBo4buXIHRy4bujIMSR4bq3YyB04bqjIHPhuq9wIHjhur9wIOKAnCVz4oCdIgorCisjfiBtc2dpZCAidW5zdXBwb3J0ZWQgc29ydCBzcGVjaWZpY2F0aW9uICclcycgaW4gdmFyaWFibGUgJyVzJyIKKyN+IG1zZ3N0ciAia2jDtG5nIGjhu5cgdHLhu6MgxJHhurdjIHThuqMgc+G6r3AgeOG6v3Ag4oCcJXPigJ0gdHJvbmcgYmnhur9uIOKAnCVz4oCdIgorCisjfiBtc2dpZCAic3dpdGNoICdwb2ludHMtYXQnIHJlcXVpcmVzIGFuIG9iamVjdCIKKyN+IG1zZ3N0ciAiY2h1eeG7g24gxJHhur9uIOKAnHBvaW50cy1hdOKAnSB5w6p1IGPhuqduIG3hu5l0IMSR4buRaSB0xrDhu6NuZyIKKworI34gbXNnaWQgIi0tc29ydCBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKKyN+IG1zZ3N0ciAiLS1zb3J0IHbDoCAtbiB4dW5nIGto4bqvYyBuaGF1IgorCisjfiBtc2dpZCAiR2l0ZGlyICckYScgaXMgcGFydCBvZiB0aGUgc3VibW9kdWxlIHBhdGggJyRiJyBvciB2aWNlIHZlcnNhIgorI34gbXNnc3RyICIiCisjfiAiR2l0ZGlyIOKAnCRh4oCdIGzDoCBi4buZIHBo4bqtbiBj4bunYSDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRi4oCdIGhv4bq3YyBcInZpY2UgdmVyc2FcIiIKKworI34gbXNnaWQgImZhbHNlfHRydWV8cHJlc2VydmUiCisjfiBtc2dzdHIgImZhbHNlfHRydWV8cHJlc2VydmUiCisKKyN+IG1zZ2lkICJCVUc6IHJlb3BlbiBhIGxvY2tmaWxlIHRoYXQgaXMgc3RpbGwgb3BlbiIKKyN+IG1zZ3N0ciAiTOG7lkk6IG3hu58gbOG6oWkgdOG6rXAgdGluIGtow7NhIG3DoCBuw7MgbOG6oWkgxJFhbmcgxJHGsOG7o2MgbeG7nyIKKworI34gbXNnaWQgIkJVRzogcmVvcGVuIGEgbG9ja2ZpbGUgdGhhdCBoYXMgYmVlbiBjb21taXR0ZWQiCisjfiBtc2dzdHIgIkzhu5ZJOiBt4bufIGzhuqFpIHThuq1wIHRpbiBraMOzYSBtw6AgbsOzIMSRw6MgxJHGsOG7o2MgY2h1eeG7g24gZ2lhbyIKKworI34gbXNnaWQgIm9wdGlvbiAlcyBkb2VzIG5vdCBhY2NlcHQgbmVnYXRpdmUgZm9ybSIKKyN+IG1zZ3N0ciAidMO5eSBjaOG7jW4gJXMga2jDtG5nIGNo4bqlcCBuaOG6rW4gZOG6oW5nIHRo4bupYyDDom0iCisKKyN+IG1zZ2lkICItYiBhbmQgLUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKyN+IG1zZ3N0ciAiLWIgdsOgIC1CIGxv4bqhaSB04burIGzhuqtuIG5oYXUuIgorCisjfiBtc2dpZCAiUGF0Y2ggZm9ybWF0ICRwYXRjaF9mb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4iCisjfiBtc2dzdHIgIsSQ4buLbmggZOG6oW5nIG1p4bq/bmcgdsOhICRwYXRjaF9mb3JtYXQga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MuIgorCisjfiBtc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCisjfiBtc2dzdHIgIlhpbiBow6N5IHLDtSByw6BuZy4gLS1za2lwIGhheSAtLWFib3J0PyIKKworI34gbXNnaWQgIiIKKyN+ICJQYXRjaCBpcyBlbXB0eS4gIFdhcyBpdCBzcGxpdCB3cm9uZz9cbiIKKyN+ICJJZiB5b3Ugd291bGQgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgaW5zdGVhZCBydW4gXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyN+ICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKKyN+IG1zZ3N0ciAiIgorI34gIk1p4bq/bmcgdsOhIHRy4buRbmcgcuG7l25nLiAgTsOzIMSRw6MgYuG7iyBjaGlhIGPhuq90IHNhaSBwaOG6o2kga2jDtG5nP1xuIgorI34gIk7hur91IGLhuqFuIHRow61jaCBi4buPIHF1YSBtaeG6v25nIHbDoSBuw6B5LCBow6N5IGNo4bqheSBs4buHbmggc2F1IMSR4buDIHRoYXkgdGjhur8gIgorI34gIlwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisjfiAixJDhu4MgcGjhu6VjIGjhu5NpIGzhuqFpIG5ow6FuaCBuZ3V5w6puIHRo4buneSB2w6AgZOG7q25nIHbDoSBs4bqhaSBow6N5IGNo4bqheSBs4buHbmggXCIkY21kbGluZSAiCisjfiAiLS1hYm9ydFwiLiIKKworI34gbXNnaWQgIlBhdGNoIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy4iCisjfiBtc2dzdHIgIk1p4bq/bmcgdsOhIGtow7RuZyBjw7MgxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIGjhu6NwIGzhu4cuIgorCisjfiBtc2dpZCAiQXBwbHlpbmc6ICRGSVJTVExJTkUiCisjfiBtc2dzdHIgIsSQYW5nIMOhcCBk4bulbmcgKG1p4bq/bmcgdsOhKTogJEZJUlNUTElORSIKKworI34gbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAkbXNnbnVtICRGSVJTVExJTkUiCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB2w6EgdOG6oWkgJG1zZ251bSAkRklSU1RMSU5FIgorCisjfiBtc2dpZCAiIgorI34gIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuXG4iCisjfiAiUGxlYXNlLCBmaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorI34gImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCisjfiBtc2dzdHIgIiIKKyN+ICJQdWxsIGzDoCBraMO0bmcgdGjhu4MgxJHGsOG7o2MgYuG7n2kgdsOsIGLhuqFuIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbi5cbiIKKyN+ICJYaW4gaMOjeSBz4butYSBjaOG7r2EgY2jDum5nIHRyxrDhu5tjLCB2w6Agc2F1IMSRw7Mgc+G7rSBk4bulbmcgbOG7h25oIOKAnGdpdCBhZGQvcm0gPHThuq1wLSIKKyN+ICJ0aW4+4oCdXG4iCisjfiAixJHhu4MgcGjDqiBjaHXhuqluIHZp4buHYyDEkcOhbmggZOG6pXUgxJHDonkgY+G6p24gxJHGsOG7o2MgZ2nhuqNpIHF1eeG6v3QgdsOgIHThuqFvIG3hu5l0IGzhuqduIGNodXnhu4NuICIKKyN+ICJnaWFvLiIKKworI34gbXNnaWQgIm5vIGJyYW5jaCBzcGVjaWZpZWQiCisjfiBtc2dzdHIgImNoxrBhIGNo4buJIHJhIHTDqm4gY+G7p2EgbmjDoW5oIgorCisjfiBtc2dpZCAicHJ1bmUgLmdpdC93b3JrdHJlZXMiCisjfiBtc2dzdHIgInjDqW4gLmdpdC93b3JrdHJlZXMiCisKKyN+IG1zZ2lkICJUaGUgbW9zdCBjb21tb25seSB1c2VkIGdpdCBjb21tYW5kcyBhcmU6IgorI34gbXNnc3RyICJOaOG7r25nIGzhu4duaCBnaXQgaGF5IMSRxrDhu6NjIGTDuW5nIG5o4bqldCBsw6A6IgorCisjfiBtc2dpZCAiTm8gc3VjaCBicmFuY2g6ICclcyciCisjfiBtc2dzdHIgIktow7RuZyBjw7MgbmjDoW5oIG7DoG8gbmjGsCB0aOG6vzog4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGdpdCBsaW5rICVzIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgdOG6oW8gbGnDqm4ga+G6v3QgZ2l0IOKAnCVz4oCdIgorCisjfiBtc2dpZCAiSW52YWxpZCBnYy5wcnVuZWV4cGlyZTogJyVzJyIKKyN+IG1zZ3N0ciAiZ2MucHJ1bmVleHBpcmUga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjfiBtc2dpZCAiKGRldGFjaGVkIGZyb20gJXMpIgorI34gbXNnc3RyICIoxJHGsOG7o2MgdMOhY2ggcuG7nWkgdOG7qyAlcykiCisKKyN+IG1zZ2lkICJObyBleGlzdGluZyBhdXRob3IgZm91bmQgd2l0aCAnJXMnIgorI34gbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgdMOhYyBnaeG6oyBjw7Mgc+G6tW4gduG7m2kg4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJzZWFyY2ggYWxzbyBpbiBpZ25vcmVkIGZpbGVzIgorI34gbXNnc3RyICJ0w6xtIGPhuqMgdHJvbmcgY8OhYyB04bqtcCB0aW4gxJHDoyBi4buLIGzhu50gxJFpIgorCisjfiBtc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8PGJyYW5jaD4pIgorI34gbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDx0w6puPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPG5ow6FuaD4pIgorCisjfiBtc2dpZCAibm8gZmlsZXMgYWRkZWQiCisjfiBtc2dzdHIgImNoxrBhIGPDsyB04bqtcCB0aW4gbsOgbyDEkcaw4bujYyB0aMOqbSB2w6BvIgorCisjfiBtc2dpZCAic2xvdCIKKyN+IG1zZ3N0ciAia2hlIgorCisjfiBtc2dpZCAiY2hlY2siCisjfiBtc2dzdHIgImtp4buDbSB0cmEiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gbG9jayByZWYgZm9yIHVwZGF0ZSIKKyN+IG1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGtow7NhIHRoYW0gY2hp4bq/dSDEkeG7gyBj4bqtcCBuaOG6rXQiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcmVmIgorI34gbXNnc3RyICJH4bq3cCBs4buXaSBraGkgZ2hpIHRoYW0gY2hp4bq/dSIKKworI34gbXNnaWQgImNvbW1pdCBoYXMgZW1wdHkgbWVzc2FnZSIKKyN+IG1zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyBjw7MgZ2hpIGNow7ogdHLhu5FuZyBy4buXbmciCisKKyN+IG1zZ2lkICJjYW5ub3QgbG9jayBIRUFEIHJlZiIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGtow7NhIEhFQUQgcmVmICh0aGFtIGNoaeG6v3UpIgorCisjfiBtc2dpZCAiY2Fubm90IHVwZGF0ZSBIRUFEIHJlZiIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCByZWYgKHRoYW0gY2hp4bq/dSkgSEVBRCIKKworI34gbXNnaWQgIkZhaWxlZCB0byBjaGRpcjogJXMiCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIHbhu5tpIGzhu4duaCBjaGRpcjogJXMiCisKKyN+IG1zZ2lkICIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIKKyN+IG1zZ3N0ciAiJXM6IGtow7RuZyB0aOG7gyBraMOzYSByZWYgKHRoYW0gY2hp4bq/dSkiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gbG9jayBIRUFEIGR1cmluZyBmYXN0X2ZvcndhcmRfdG8iCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBraMOzYSBIRUFEIHRyb25nIHF1w6EgdHLDrG5oIGZhc3RfZm9yd2FyZF90byIKKworI34gbXNnaWQgImtleSBpZCIKKyN+IG1zZ3N0ciAiaWQgY+G7p2Ega2jDs2EiCisKKyN+IG1zZ2lkICJUcmFja2luZyBub3Qgc2V0IHVwOiBuYW1lIHRvbyBsb25nOiAlcyIKKyN+IG1zZ3N0ciAiVmnhu4djIHRoZW8gZMO1aSBjaMawYSDEkcaw4bujYyBjw6BpIMSR4bq3dDogdMOqbiBxdcOhIGTDoGk6ICVzIgorCisjfiBtc2dpZCAiYnVnIgorI34gbXNnc3RyICJs4buXaSIKKworI34gbXNnaWQgIiwgYmVoaW5kICIKKyN+IG1zZ3N0ciAiLCDEkeG6sW5nIHNhdSAiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgZmluZCAuZ2l0bW9kdWxlcyBpbiBpbmRleCIKKyN+IG1zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IC5naXRtb2R1bGVzIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworI34gbXNnaWQgInJlYWRpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCisjfiBtc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7jWMgY+G6rXAgbmjhuq10IC5naXRtb2R1bGVzIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHN0YXQgdXBkYXRlZCAuZ2l0bW9kdWxlcyIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRo4buRbmcga8OqIC5naXRtb2R1bGVzIMSRw6MgY+G6rXAgbmjhuq10IgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAuZ2l0bW9kdWxlcyBmcm9tIGluZGV4IgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgZ+G7oSBi4buPIC5naXRtb2R1bGVzIHThu6sgbeG7pWMgbOG7pWMiCisKKyN+IG1zZ2lkICJhZGRpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCisjfiBtc2dzdHIgImfhurdwIGzhu5dpIGtoaSB0aMOqbSAuZ2l0bW9kdWxlcyDEkcOjIGPhuq1wIG5o4bqtdCIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgYmVoYXZpb3Igb2YgJ2dpdCBhZGQgJXMgKG9yICVzKScgd2l0aCBubyBwYXRoIGFyZ3VtZW50IGZyb20gYVxuIgorI34gInN1YmRpcmVjdG9yeSBvZiB0aGUgdHJlZSB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgIgorI34gImFueW1vcmUuXG4iCisjfiAiVG8gYWRkIGNvbnRlbnQgZm9yIHRoZSB3aG9sZSB0cmVlLCBydW46XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIDovXG4iCisjfiAiICAob3IgZ2l0IGFkZCAlcyA6LylcbiIKKyN+ICJcbiIKKyN+ICJUbyByZXN0cmljdCB0aGUgY29tbWFuZCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnksIHJ1bjpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBhZGQgJXMgLlxuIgorI34gIiAgKG9yIGdpdCBhZGQgJXMgLilcbiIKKyN+ICJcbiIKKyN+ICJXaXRoIHRoZSBjdXJyZW50IEdpdCB2ZXJzaW9uLCB0aGUgY29tbWFuZCBpcyByZXN0cmljdGVkIHRvIHRoZSBjdXJyZW50ICIKKyN+ICJkaXJlY3RvcnkuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJDw6FjaCDhu6luZyB44butIGPhu6dhIGzhu4duaCDigJxnaXQgYWRkICVzIChoYXkgJXMp4oCdIGtoaSBraMO0bmcgY8OzIHRoYW0gc+G7kSDEkcaw4budbmcgZOG6q24gIgorI34gInThu6tcbiIKKyN+ICJ0aMawLW3hu6VjIGNvbiBj4bunYSBjw6J5IHPhur0gdGhheSDEkeG7lWkga+G7gyB04burIEdpdCAyLjAgdsOgIGtow7RuZyB0aOG7gyBz4butIGThu6VuZyBuaMawICIKKyN+ICJ0aOG6vyBu4buvYS5cbiIKKyN+ICLEkOG7gyB0aMOqbSBu4buZaSBkdW5nIGNobyB0b8OgbiBi4buZIGPDonksIGNo4bqheTpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBhZGQgJXMgOi9cbiIKKyN+ICIgIChob+G6t2MgZ2l0IGFkZCAlcyA6LylcbiIKKyN+ICJcbiIKKyN+ICLEkOG7gyBo4bqhbiBjaOG6vyBs4buHbmggY2hvIHRoxrAtbeG7pWMgaGnhu4duIHThuqFpLCBjaOG6oXk6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIC5cbiIKKyN+ICIgIChob+G6t2MgZ2l0IGFkZCAlcyAuKVxuIgorI34gIlxuIgorI34gIlbhu5tpIHBoacOqbiBi4bqjbiBoaeG7h24gdOG6oWkgY+G7p2EgR2l0LCBs4buHbmggYuG7iyBo4bqhbiBjaOG6vyBjaG8gdGjGsC1t4bulYyBoaeG7h24gdOG6oWkuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJhbiAnZ2l0IGFkZCcgd2l0aCBuZWl0aGVyICctQSAoLS1hbGwpJyBvciAnLS1pZ25vcmUtcmVtb3ZhbCcsXG4iCisjfiAid2hvc2UgYmVoYXZpb3VyIHdpbGwgY2hhbmdlIGluIEdpdCAyLjAgd2l0aCByZXNwZWN0IHRvIHBhdGhzIHlvdSAiCisjfiAicmVtb3ZlZC5cbiIKKyN+ICJQYXRocyBsaWtlICclcycgdGhhdCBhcmVcbiIKKyN+ICJyZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUgYXJlIGlnbm9yZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgR2l0LlxuIgorI34gIlxuIgorI34gIiogJ2dpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8cGF0aHNwZWM+Jywgd2hpY2ggaXMgdGhlIGN1cnJlbnQgZGVmYXVsdCxcbiIKKyN+ICIgIGlnbm9yZXMgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyN+ICJcbiIKKyN+ICIqICdnaXQgYWRkIC0tYWxsIDxwYXRoc3BlYz4nIHdpbGwgbGV0IHlvdSBhbHNvIHJlY29yZCB0aGUgcmVtb3ZhbHMuXG4iCisjfiAiXG4iCisjfiAiUnVuICdnaXQgc3RhdHVzJyB0byBjaGVjayB0aGUgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkLhuqFuIGNo4bqheSDigJxnaXQgYWRk4oCdIG3DoCBraMO0bmcgY8OzIOKAnC1BICgtLWFsbCnigJ0gY8Wpbmcga2jDtG5nIOKAnC0taWdub3JlLSIKKyN+ICJyZW1vdmFs4oCdLFxuIgorI34gImPDoWNoIOG7qW5nIHjhu60gY+G7p2EgbsOzIHPhur0gdGhheSDEkeG7lWkga+G7gyB04burIEdpdCAyLjA6IG7DsyBxdWFuIHTDom0gxJHhur9uIGPDoWMgxJHGsOG7nW5nICIKKyN+ICJk4bqrbiBtw6BcbiIKKyN+ICJi4bqhbiDEkcOjIGfhu6EgYuG7jy4gQ8OhYyDEkcaw4budbmcgZOG6q24gbmjGsCBsw6Ag4oCcJXPigJ0gY8OhaSBtw6BcbiIKKyN+ICJi4buLIGfhu6EgYuG7jyB04burIGPDonkgbMOgbSB2aeG7h2MgY+G7p2EgYuG6oW4gdGjDrCBi4buLIGLhu48gcXVhIHbhu5tpIHBoacOqbiBi4bqjbiBuw6B5IGPhu6dhICIKKyN+ICJHaXQuXG4iCisjfiAiXG4iCisjfiAiKiDigJxnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGhzcGVjPuKAnSwgY8OhaSBoaeG7h24gdOG6oWkgbMOgIG3hurdjIMSR4buLbmgsXG4iCisjfiAiICBi4buPIHF1YSBjw6FjIMSRxrDhu51uZyBk4bqrbiBi4bqhbiDEkcOjIGfhu6EgYuG7jyB04burIGPDonkgbMOgbSB2aeG7h2MgY+G7p2EgYuG6oW4uXG4iCisjfiAiXG4iCisjfiAiKiDigJxnaXQgYWRkIC0tYWxsIDxwYXRoc3BlYz7igJ0gc+G6vSDEkeG7k25nIHRo4budaSBnacO6cCBi4bqhbiBnaGkgbOG6oWkgdmnhu4djIGThu51pIMSRaS5cbiIKKyN+ICJcbiIKKyN+ICJDaOG6oXkg4oCcZ2l0IHN0YXR1c+KAnSDEkeG7gyBraeG7g20gdHJhIGPDoWMgxJHGsOG7nW5nIGThuqtuIGLhuqFuIMSRw6MgZ+G7oSBi4buPIHThu6sgY8OieSBsw6BtIHZp4buHYyAiCisjfiAiY+G7p2EgYuG6oW4uXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLiBZb3UgbWF5IGFsc29cbiIKKyN+ICJydW4gXCJnaXQgZ2NcIiBtYW51YWxseS4gU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlThu7EgxJHhu5luZyDEkcOzbmcgZ8OzaSBraG8gY2jhu6lhIMSR4buDIHThu5FpIMawdSBow7NhIGhp4buHdSBzdeG6pXQgbMOgbSB2aeG7h2MuXG4iCisjfiAiY2jhuqF5IGzhu4duaCBcImdpdCBnY1wiIG3hu5l0IGPDoWNoIHRo4bunIGPDtG5nLiBIw6N5IHhlbSBcImdpdCBoZWxwIGdjXCIgxJHhu4MgYmnhur90ICIKKyN+ICJ0aMOqbSBjaGkgdGnhur90LlxuIgorCisjfiBtc2dpZCAiIgorI34gIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyN+ICJjb3VudGVycGFydC4gSWYgeW91IGRpZCBub3QgaW50ZW5kIHRvIHB1c2ggdGhhdCBicmFuY2gsIHlvdSBtYXkgd2FudCB0b1xuIgorI34gInNwZWNpZnkgYnJhbmNoZXMgdG8gcHVzaCBvciBzZXQgdGhlICdwdXNoLmRlZmF1bHQnIGNvbmZpZ3VyYXRpb24gIgorI34gInZhcmlhYmxlXG4iCisjfiAidG8gJ3NpbXBsZScsICdjdXJyZW50JyBvciAndXBzdHJlYW0nIHRvIHB1c2ggb25seSB0aGUgY3VycmVudCBicmFuY2guIgorI34gbXNnc3RyICIiCisjfiAiVmnhu4djIGPhuq1wIG5o4bqtdCBi4buLIHThu6sgY2jhu5FpIGLhu59pIHbDrCDEkeG6p3UgbcO6dCBj4bunYSBuaMOhbmggxJHGsOG7o2MgcHVzaCBu4bqxbSDEkeG6sW5nIHNhdSAiCisjfiAiYuG7mVxuIgorI34gInBo4bqtbiB0xrDGoW5nIOG7qW5nIGPhu6dhIG3DoXkgY2jhu6cuIE7hur91IGLhuqFuIGtow7RuZyBjw7Mgw70gxJHhu4tuaCBwdXNoIG5ow6FuaCDEkcOzLCBi4bqhbiBjw7MgIgorI34gImzhur0gbXXhu5FuXG4iCisjfiAiY2jhu4kgxJHhu4tuaCBjw6FjIG5ow6FuaCDEkeG7gyBwdXNoIGhv4bq3dCBsw6AgxJHhurd0IG7hu5lpIGR1bmcgY2hvIGJp4bq/biBj4bqldSBow6xuaCDigJxwdXNoLiIKKyN+ICJkZWZhdWx04oCdXG4iCisjfiAidGjDoG5oIOKAnHNpbXBsZeKAnSwg4oCcY3VycmVudOKAnSBob+G6t2Mg4oCcdXBzdHJlYW3igJ0gxJHhu4MgY2jhu4kgcHVzaCBuaMOhbmggaGnhu4duIGjDoG5oIG3DoCAiCisjfiAidGjDtGkuIgorCisjfiBtc2dpZCAiY29waWVkOiAgICAgJXMgLT4gJXMiCisjfiBtc2dzdHIgIsSRw6Mgc2FvIGNow6lwOiAgICVzIC0+ICVzIgorCisjfiBtc2dpZCAiZGVsZXRlZDogICAgJXMiCisjfiBtc2dzdHIgIsSRw6MgeMOzYTogICAgICAgICVzIgorCisjfiBtc2dpZCAibW9kaWZpZWQ6ICAgJXMiCisjfiBtc2dzdHIgIsSRw6Mgc+G7rWEgxJHhu5VpOiAgICAlcyIKKworI34gbXNnaWQgInJlbmFtZWQ6ICAgICVzIC0+ICVzIgorI34gbXNnc3RyICLEkcOjIMSR4buVaSB0w6puOiAgICAlcyAtPiAlcyIKKworI34gbXNnaWQgInVubWVyZ2VkOiAgICVzIgorI34gbXNnc3RyICJjaMawYSBow7JhIHRy4buZbjogJXMiCisKKyN+IG1zZ2lkICJpbnB1dCBwYXRocyBhcmUgdGVybWluYXRlZCBieSBhIG51bGwgY2hhcmFjdGVyIgorI34gbXNnc3RyICJjw6FjIMSRxrDhu51uZyBk4bqrbiDEkcaw4bujYyAgbmfEg24gY8OhY2ggYuG7n2kga8O9IHThu7EgbnVsbCIKKworI34gbXNnaWQgIiIKKyN+ICJBYm9ydGluZy4gQ29uc2lkZXIgdXNpbmcgZWl0aGVyIHRoZSAtLWZvcmNlIG9yIC0taW5jbHVkZS11bnRyYWNrZWQgb3B0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gIkLDo2kgYuG7jy4gQ8OibiBuaOG6r2MgZMO5bmcgbeG7mXQgdHJvbmcgaGFpIHTDuXkgY2jhu41uIC0tZm9yY2UgdsOgIC0taW5jbHVkZS0iCisjfiAidW50cmFja2VkLiIKKworI34gbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiCisjfiBtc2dzdHIgIiAgKHPhu61hIGPDoWMgeHVuZyDEkeG7mXQgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmggXCJnaXQgYW0gLS1yZXNvbHZlZFwiKSIKKworI34gbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjb21taXRcIikiCisjfiBtc2dzdHIgIiAgKGtoaSB04bqldCBj4bqjIGPDoWMgeHVuZyDEkeG7mXQgxJHDoyBz4butYSB4b25nOiBjaOG6oXkgbOG7h25oIFwiZ2l0IGNvbW1pdFwiKSIKKworI34gbXNnaWQgIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIKKyN+IG1zZ3N0ciAixJHDoyBjaOG7iSByYSBuaGnhu4F1IGjGoW4gJWQgY8OieSAodHJlZSk6IOKAnCVz4oCdIgorCisjfiBtc2dpZCAiIgorI34gIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorI34gIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCisjfiBtc2dzdHIgIiIKKyN+ICLigJwlc+KAnSBjw7MgY8OhYyB0aGF5IMSR4buVaSDEkcaw4bujYyBsxrB1IHRy4bqhbmcgdGjDoWkgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjXG4iCisjfiAiKGTDuW5nIHTDuXkgY2jhu41uIC0tY2FjaGVkIMSR4buDIGdp4buvIHThuq1wIHRpbiwgaG/hurdjIC1mIMSR4buDIMOpcCBideG7mWMgZ+G7oSBi4buPKSIKKworI34gbXNnaWQgInNob3cgY29tbWl0cyB3aGVyZSBubyBwYXJlbnQgY29tZXMgYmVmb3JlIGl0cyBjaGlsZHJlbiIKKyN+IG1zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBuxqFpIG3DoCBjaGEgbeG6uSDEkeG6v24gdHLGsOG7m2MgY29uIGPhu6dhIG7DsyIKKworI34gbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlIgorI34gbXNnc3RyICJoaeG7g24gdGjhu4sgdGhhbSBjaGnhur91IGPhu6dhIEhFQUQiCisKKyN+IG1zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSB24buBIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHByZWZpeCRzbV9wYXRo4oCdIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJyIKKyN+IG1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buHIHF1eSB2w6BvIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHByZWZpeCRzbV9wYXRo4oCdIgorCisjfiBtc2dpZCAiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gICdzdGF0dXMgLXVubyciCisjfiBtc2dzdHIgIkPhuqduICUuMmYgZ2nDonkgxJHhu4MgxJHhur9tIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aS4gIOKAnHN0YXR1cyAtdW5v4oCdIgorCisjfiBtc2dpZCAibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZCIKKyN+IG1zZ3N0ciAiIgorI34gImPDsyB0aOG7gyBsw6BtIG7DsyBuaGFuaCBsw6puLCBuaMawbmcgYuG6oW4gcGjhuqNpIGPhuqluIHRy4buNbmcgxJHhu6tuZyBxdcOqbiB0aMOqbSBuw7MgdsOgbyIKKworI34gbXNnaWQgIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCisjfiBtc2dzdHIgInThuq1wIHRpbiBt4bubaSBj4bunYSBjaMOtbmggYuG6oW4gKHhlbSDigJxnaXQgaGVscCBzdGF0dXPigJ0uLiIKKworI34gbXNnaWQgImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtb3B0c10gWy0tXSBbPGNvbW1pdC1pZD4uLi4gXSIKKyN+IG1zZ3N0ciAiZ2l0IHNob3J0bG9nIFstbl0gWy1zXSBbLWVdIFstd10gW3Jldi1vcHRzXSBbLS1dIFs8Y29tbWl0LWlkPuKApiBdIgorCisjfiBtc2dpZCAidXNlIGFueSByZWYgaW4gLmdpdC9yZWZzIgorI34gbXNnc3RyICJz4butIGThu6VuZyBi4bqldCBr4buzIHJlZiBuw6BvIHRyb25nIC5naXQvcmVmcyIKKworI34gbXNnaWQgInVzZSBhbnkgdGFnIGluIC5naXQvcmVmcy90YWdzIgorI34gbXNnc3RyICJz4butIGThu6VuZyBi4bqldCBr4buzIHRo4bq7IG7DoG8gdHJvbmcgLmdpdC9yZWZzL3RhZ3MiCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorI34gbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHDs25nIMSRxrDhu51uZyDhu5FuZyBjaG8gbOG7h25oIOKAnHNob3figJ0gY2hvIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSIKKworI34gbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiCisjfiBtc2dzdHIgIkLhuqFuIGtow7RuZyBjw7MgSEVBRCBuw6BvIGjhu6NwIGzhu4ciCisKKyN+IG1zZ2lkICJvb3BzIgorI34gbXNnc3RyICLDtGk/IgorCisjfiBtc2dpZCAiTm90IHJlbW92aW5nICVzXG4iCisjfiBtc2dzdHIgIktow7RuZyB4w7NhICVzXG4iCisKKyN+IG1zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+XSkiCisjfiBtc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPHTDqm4+ICgtYSB8IC1kIHwgPG5ow6FuaD5dKSIKKworI34gbXNnaWQgIiAlZCBmaWxlIGNoYW5nZWQiCisjfiBtc2dpZF9wbHVyYWwgIiAlZCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyWzBdICIgJWQgdOG6rXAgdGluIHRoYXkgxJHhu5VpIgorCisjfiBtc2dpZCAiLCAlZCBpbnNlcnRpb24oKykiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgaW5zZXJ0aW9ucygrKSIKKyN+IG1zZ3N0clswXSAiLCAlZCB0aMOqbSgrKSIKKworI34gbXNnaWQgIiwgJWQgZGVsZXRpb24oLSkiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgZGVsZXRpb25zKC0pIgorI34gbXNnc3RyWzBdICIsICVkIHjDs2EoLSkiCisKKyN+IG1zZ2lkICIgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCisjfiBtc2dzdHIgIiAoZMO5bmcgXCJnaXQgYWRkXCIgxJHhu4MgdGhlbyBkw7VpIGThuqV1IHbhur90KSIKKworI34gbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLWIvLUIvLS1vcnBoYW4iCisjfiBtc2dzdHIgIi0tZGV0YWNoIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtYi8tQi8tLW9ycGhhbiIKKworI34gbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCisjfiBtc2dzdHIgIi0tZGV0YWNoIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtdCIKKworI34gbXNnaWQgIi0tb3JwaGFuIGFuZCAtYnwtQiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorI34gbXNnc3RyICJUw7l5IGNo4buNbiAtLW9ycGhhbiB2w6AgLWJ8LUIgbG/huqFpIHThu6sgbOG6q24gbmhhdSIKKworI34gbXNnaWQgIi0tb3JwaGFuIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCisjfiBtc2dzdHIgIi0tb3JwaGFuIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtdCIKKworI34gbXNnaWQgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgImdpdCBjaGVja291dDogaGFpIHTDuXkgY2jhu41uIC1mIHbDoCAtbSB4dW5nIGto4bqvYyBuaGF1IgorCisjfiBtc2dpZCAiIgorI34gImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLiIKKyN+IG1zZ3N0ciAiIgorI34gImdpdCBjaGVja291dDogdmnhu4djIGPhuq1wIG5o4bqtdCBjw6FjIMSRxrDhu51uZyBk4bqrbiBsw6AgeHVuZyBraOG6r2MgduG7m2kgdmnhu4djIGNodXnhu4NuICIKKyN+ICLEkeG7lWkgY8OhYyBuaMOhbmguIgorCisjfiBtc2dpZCAiZGlmZiBzZXR1cCBmYWlsZWQiCisjfiBtc2dzdHIgImPDoGkgxJHhurd0IGRpZmYgZ+G6t3AgbOG7l2kiCisKKyN+IG1zZ2lkICJtZXJnZS1yZWN1cnNpdmU6IGRpc2sgZnVsbD8iCisjfiBtc2dzdHIgIm1lcmdlLXJlY3Vyc2l2ZTogxJHEqWEgYuG7iyDEkeG6p3k/IgorCisjfiBtc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZGlmZl9zZXR1cF9kb25lIGfhurdwIGzhu5dpIgorCisjfiBtc2dpZCAiJXM6IGhhcyBiZWVuIGRlbGV0ZWQvcmVuYW1lZCIKKyN+IG1zZ3N0ciAiJXM6IMSRw6MgxJHGsOG7o2MgeMOzYS90aGF5LXTDqm4iCisKKyN+IG1zZ2lkICInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iCisjfiBtc2dzdHIgIuKAnSVz4oCdOiBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIHTDoGkgbGnhu4d1LiIKKworI34gbXNnaWQgIi0tIgorI34gbXNnc3RyICItLSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBleHRyYWN0IGVtYWlsIGZyb20gY29tbWl0dGVyIGlkZW50aXR5LiIKKyN+IG1zZ3N0ciAiIgorI34gIktow7RuZyB0aOG7gyByw7p0IHRyw61jaCDEkeG7i2EgY2jhu4kgdGjGsCDEkWnhu4duIHThu60gdOG7qyDEkeG7i25oIGRhbmggbmfGsOG7nWkgY2h1eeG7g24gZ2lhbyIKZGlmZiAtLWdpdCBhL3BvL3poX0NOLnBvIGIvcG8vemhfQ04ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkYTY2MgotLS0gL2Rldi9udWxsCisrKyBiL3BvL3poX0NOLnBvCkBAIC0wLDAgKzEsMjM4ODkgQEAKKyMgQ2hpbmVzZSB0cmFuc2xhdGlvbnMgZm9yIEdpdCBwYWNrYWdlCisjIEdpdCDova/ku7bljIXnmoTnroDkvZPkuK3mlofnv7vor5EuCisjIENvcHlyaWdodCAoQykgMjAxMiwyMDEzIEppYW5nIFhpbiA8d29ybGRoZWxsby5uZXQgQVQgZ21haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIENvbnRyaWJ1dG9yczoKKyMgICAtIEZhbmd5aSBaaG91IDxtZSBBVCBmYW5neWkuaW8+CisjICAgLSBKaWFuZyBYaW4gPHdvcmxkaGVsbG8ubmV0IEFUIGdtYWlsLmNvbT4KKyMgICAtIExpYW4gQ2hlbmcgPHJoeXRobS5tYWlsIEFUIGdtYWlsLmNvbT4KKyMgICAtIFJheSBDaGVuIDxvbGRzaGFycCBBVCBnbWFpbC5jb20+CisjICAgLSBSaWt1IDxsdS5yaWt1IEFUIGdtYWlsLmNvbT4KKyMgICAtIFRoeW5zb24gPGxhbnhpbmdjYW4gQVQgZ21haWwuY29tPgorIyAgIC0gd3MzMzg5IDx3aWxsc21pdGgzMzg5IEFUIGdtYWlsLmNvbT4KKyMgICAtIFdhbmcgU2hlbmcgPHdhbmdzaGVuZzIwMDhsb3ZlIEFUIDE2My5jb20+CisjICAgLSDkvp3kupEgPGxpbHlkandnIEFUIGdtYWlsLmNvbT4KKyMgICAtIFlpY2hhbyBZdSA8eXljMTk5MiBBVCBnbWFpbC5jb20+CisjICAgLSBaaHVhbmcgWWEgPHpodWFuZ3lhIEFUIG1lLmNvbT4KKyMKKyMgIEdpdCBnbG9zc2FyeSBmb3IgQ2hpbmVzZSB0cmFuc2xhdG9ycworIworIyAgIEVuZ2xpc2ggICAgICAgICAgICAgICAgICAgICAgICAgIHwgIENoaW5lc2UKKyMgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAzLXdheSBtZXJnZSAgICAgICAgICAgICAgICAgICAgICB8ICDkuInmlrnlkIjlubYKKyMgICBhYmJyZXZpYXRlICAgICAgICAgICAgICAgICAgICAgICB8ICDnroDlhpnvvIjnmoQgU0hBLTEg5YC877yJCisjICAgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZSAgICAgICAgfCAg5aSH55So5a+56LGh5bqTCisjICAgYW1lbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5L+u6KGlCisjICAgYW5jZXN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgfCAg56WW5YWI77yM56WW5YWI5o+Q5LqkCisjICAgYW5ub3RhdGVkIHRhZyAgICAgICAgICAgICAgICAgICAgfCAg6ZmE5rOo5qCH562+CisjICAgYmFyZSByZXBvc2l0b3J5ICAgICAgICAgICAgICAgICAgfCAg57qv5LuT5bqTCisjICAgYmlzZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5LqM5YiG5p+l5om+CisjICAgYmxvYiBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgfCAg5pWw5o2u5a+56LGhCisjICAgYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5YiG5pSvCisjICAgYnVuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5YyFCisjICAgYnlwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg57uV6L+HCisjICAgY2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg57Si5byV77yI55qE5Yir56ew77yJCisjICAgY2hhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI5o+Q5Lqk77yJ6ZO+CisjICAgY2hhbmdlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+Y5pu06ZuGCisjICAgY2hlY2tvdXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qOA5Ye6CisjICAgY2hlY2tzdW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qCh6aqM77yM5qCh6aqM5ZKMCisjICAgY2hlcnJ5LXBpY2tpbmcgICAgICAgICAgICAgICAgICAgfCAg5ouj6YCJCisjICAgY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5bmy5YeA77yI55qE5bel5L2c5Yy677yJCisjICAgY2xvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5YWL6ZqGCisjICAgY29tbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5o+Q5LqkCisjICAgY29tbWl0IG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgfCAg5o+Q5Lqk6K+05piOCisjICAgY29tbWl0IG9iamVjdCAgICAgICAgICAgICAgICAgICAgfCAg5o+Q5Lqk5a+56LGhCisjICAgY29tbWl0LWlzaCAoYWxzbyBjb21taXR0aXNoKSAgICAgfCAg5o+Q5Lqk5Y+3CisjICAgY29uZmxpY3QgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Yay56qBCisjICAgY29yZSBHaXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qC45b+DIEdpdCDlt6XlhbcKKyMgICBjb3ZlciBsZXR0ZXIgICAgICAgICAgICAgICAgICAgICB8ICDpmYTlh70KKyMgICBEQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmnInlkJHml6Dnjq/lm74KKyMgICBkYW5nbGluZyBvYmplY3QgICAgICAgICAgICAgICAgICB8ICDmgqznqbrlr7nosaEKKyMgICBkZXRhY2hlZCBIRUFEICAgICAgICAgICAgICAgICAgICB8ICDliIbnprvlpLTmjIfpkogKKyMgICBkaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICB8ICDnm67lvZUKKyMgICBkaXJ0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDohI/vvIjnmoTlt6XkvZzljLrvvIkKKyMgICBkdW1iIEhUVFAgcHJvdG9jb2wgICAgICAgICAgICAgICB8ICDlk5EgSFRUUCDljY/orq4KKyMgICBldmlsIG1lcmdlICAgICAgICAgICAgICAgICAgICAgICB8ICDlnY/lkIjlubbvvIjlkIjlubblvJXlhaXkuobniLbmj5DkuqTmsqHmnInnmoTkv67mlLnvvIkKKyMgICBmYXN0LWZvcndhcmQgICAgICAgICAgICAgICAgICAgICB8ICDlv6vov5sKKyMgICBmZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDojrflj5YKKyMgICBmaWxlIHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICB8ICDmlofku7bns7vnu58KKyMgICBmb3JrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmtL7nlJ8KKyMgICBHaXQgYXJjaGl2ZSAgICAgICAgICAgICAgICAgICAgICB8ICDku5PlupPvvIjlr7nkuo4gYXJjaCDnlKjmiLfvvIkKKyMgICBnaXRmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBnaXRmaWxl77yI5LuT5bqT6ZO+5o6l5paH5Lu277yJCisjICAgZ3JhZnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI5o+Q5Lqk77yJ56e75qSNCisjICAgaGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5ZOI5biM5YC8CisjICAgSEVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgSEVBRO+8iOWktOaMh+mSiO+8jOS6puWNs+W9k+WJjeWIhuaUr++8iQorIyAgIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWktOOAgeWIhuaUrworIyAgIGhlYWQgcmVmICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWIhuaUrworIyAgIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWktOS/oeaBrworIyAgIGhvb2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmSqeWtkAorIyAgIGh1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOihpeS4geeJh+autQorIyAgIGluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOe0ouW8lQorIyAgIGluZGV4IGVudHJ5ICAgICAgICAgICAgICAgICAgICAgIHwgIOe0ouW8leadoeebrgorIyAgIGxvb3NlIG9iamVjdCAgICAgICAgICAgICAgICAgICAgIHwgIOadvuaVo+WvueixoQorIyAgIGxvb3NlIHJlZnMgICAgICAgICAgICAgICAgICAgICAgIHwgIOadvuaVo+W8leeUqAorIyAgIG1hc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG1hc3Rlcu+8iOm7mOiupOWIhuaUr+WQje+8iQorIyAgIG1lcmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWQiOW5tgorIyAgIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWvueixoQorIyAgIG9iamVjdCBkYXRhYmFzZSAgICAgICAgICAgICAgICAgIHwgIOWvueixoeW6kworIyAgIG9iamVjdCBpZGVudGlmaWVyICAgICAgICAgICAgICAgIHwgIOWvueixoeagh+ivhuespgorIyAgIG9iamVjdCBuYW1lICAgICAgICAgICAgICAgICAgICAgIHwgIOWvueixoeWQjeensAorIyAgIG9iamVjdCB0eXBlICAgICAgICAgICAgICAgICAgICAgIHwgIOWvueixoeexu+WeiworIyAgIG9jdG9wdXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeroOmxvOW8j+WQiOW5tu+8iOS4pOWIhuaUr+S7peS4iueahOWQiOW5tu+8iQorIyAgIG9yaWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9yaWdpbu+8iOm7mOiupOeahOi/nOeoi+WQjeensO+8iQorIyAgIHBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWMhQorIyAgIHBhY2sgaW5kZXggICAgICAgICAgICAgICAgICAgICAgIHwgIOWMhee0ouW8lQorIyAgIHBhY2tmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWMheaWh+S7tgorIyAgIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeItuaPkOS6pAorIyAgIHBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOihpeS4gQorIyAgIHBhdGhzcGVjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOi3r+W+hOinhOagvAorIyAgIHBhdHRlcm4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaooeW8jworIyAgIHBpY2theGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaMluaOmAorIyAgIHBsdW1iaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeuoeS7tu+8iEdpdCDlupXlsYLmoLjlv4Plkb3ku6TnmoTliKvnp7DvvIkKKyMgICBwb3JjZWxhaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICDnk7fku7bvvIhHaXQg5LiK5bGC5bCB6KOF5ZG95Luk55qE5Yir56ew77yJCisjICAgcHJlY2lvdXMtb2JqZWN0cyByZXBvICAgICAgICAgICAgfCAg54+N5ZOB5LuT5bqTCisjICAgcHJ1bmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5riF6ZmkCisjICAgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5ouJ77yM5ouJ5Y+WCisjICAgcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5o6o77yM5o6o6YCBCisjICAgcmVhY2hhYmxlICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+v6L6+CisjICAgcmViYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+Y5Z+6CisjICAgcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55SoCisjICAgcmVmbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55So5pel5b+XCisjICAgcmVmc3BlYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55So6KeE5qC8CisjICAgcmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6L+c56iL77yM6L+c56iL5LuT5bqTCisjICAgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAgICAgICAgICAgfCAg6L+c56iL6Lef6Liq5YiG5pSvCisjICAgcmVwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6YeN5pS+CisjICAgcmVwbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5LuT5bqTCisjICAgcmVwb3NpdG9yeSAgICAgICAgICAgICAgICAgICAgICAgfCAg5LuT5bqTCisjICAgcmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI5Yay56qB77yJ6Kej5YazCisjICAgcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6L+Y5Y6fCisjICAgcmV2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgfCAg54mI5pysCisjICAgcmV3aW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Zue6YCACisjICAgU0NNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5rqQ5Luj56CB566h55CG77yI5bel5YW377yJCisjICAgU0hBLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU0hBLTHvvIjlronlhajlk4jluIznrpfms5Ux77yJCisjICAgc2hhbGxvdyByZXBvc2l0b3J5ICAgICAgICAgICAgICAgfCAg5rWF77yI5YWL6ZqG77yJ5LuT5bqTCisjICAgc2lnbmVkIHRhZyAgICAgICAgICAgICAgICAgICAgICAgfCAg562+5ZCN5qCH562+CisjICAgc21hcnQgSFRUUCBwcm90b2NvbCAgICAgICAgICAgICAgfCAg5pm66IO9IEhUVFAg5Y2P6K6uCisjICAgc3F1YXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y6L57ypCisjICAgc3RhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbi4g5pqC5a2Y5Yy677yI5Y2z57Si5byV77yJOyB2LiDmmoLlrZgKKyMgICBzdGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBuLiDotK7ol4/ljLo7IHYuIOi0ruiXjworIyAgIHN1Ym1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWtkOaooee7hAorIyAgIHN5bXJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOespuWPt+W8leeUqAorIyAgIHRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG4uIOagh+etvjsgdi4g5omT5qCH562+CisjICAgdGFnIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgfCAg5qCH562+5a+56LGhCisjICAgdGFnZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5omT5qCH562+6ICFCisjICAgdG9waWMgYnJhbmNoICAgICAgICAgICAgICAgICAgICAgfCAg5Li76aKY5YiG5pSvCisjICAgdHJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6Lef6LiqCisjICAgdHJhaWxlciAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5bC+6YOo572y5ZCNCisjICAgdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qCR77yI5bel5L2c5Yy65oiW5qCR5a+56LGh77yJCisjICAgdHJlZSBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgfCAg5qCR5a+56LGhCisjICAgdHJlZS1pc2ggKGFsc28gdHJlZWlzaCkgICAgICAgICAgfCAg5qCR5a+56LGh77yI5oiW5Y+v5Lul6Kej5p6Q5Li65LiA5qCR5a+56LGh77yJCisjICAgdW5tZXJnZWQgaW5kZXggICAgICAgICAgICAgICAgICAgfCAg5pyq5ZCI5bm257Si5byVCisjICAgdW5wYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6Kej5YyFCisjICAgdW5yZWFjaGFibGUgb2JqZWN0ICAgICAgICAgICAgICAgfCAg5LiN5Y+v6L6+5a+56LGhCisjICAgdW5zdGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+W5raI5pqC5a2YCisjICAgdXBzdHJlYW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAg5LiK5ri4CisjICAgdXBzdHJlYW0gYnJhbmNoICAgICAgICAgICAgICAgICAgfCAg5LiK5ri45YiG5pSvCisjICAgd29ya2luZyB0cmVlICAgICAgICAgICAgICAgICAgICAgfCAg5bel5L2c5Yy6CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxOS0xMi0zMCAwODo0OCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAyMC0wMS0xMiAxNzoxNiswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKaWFuZyBYaW4gPHdvcmxkaGVsbG8ubmV0QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHaXRIdWIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qaWFuZ3hpbi9naXQvPlxuIgorIkxhbmd1YWdlOiB6aF9DTlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/IgorbXNnc3RyICLll6/vvIglc++8ie+8nyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTAwIGFkZC1pbnRlcmFjdGl2ZS5jOjgwMSBzZXF1ZW5jZXIuYzozMjE2CisjOiBzZXF1ZW5jZXIuYzozNjU2IGJ1aWx0aW4vcmViYXNlLmM6ODcxIGJ1aWx0aW4vcmViYXNlLmM6MTY0MworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDE5IGJ1aWx0aW4vcmViYXNlLmM6MjA2MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICLkuI3og73or7vlj5bntKLlvJUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjU1NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI2OQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyOTQKK21zZ2lkICJiaW5hcnkiCittc2dzdHIgIuS6jOi/m+WItiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjEzIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Mjc4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMzMgorbXNnaWQgIm5vdGhpbmciCittc2dzdHIgIuaXoCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjE0IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzE0CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjMyOQorbXNnaWQgInVuY2hhbmdlZCIKK21zZ3N0ciAi5rKh5pyJ5L+u5pS5IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2NDMKK21zZ2lkICJVcGRhdGUiCittc2dzdHIgIuabtOaWsCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NjY4IGFkZC1pbnRlcmFjdGl2ZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhZ2UgJyVzJyIKK21zZ3N0ciAi5LiN6IO95pqC5a2YICclcyciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3NCBhZGQtaW50ZXJhY3RpdmUuYzo4NjMgc2VxdWVuY2VyLmM6MzQwOQorIzogYnVpbHRpbi9yZWJhc2UuYzo4OTUKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiCittc2dzdHIgIuS4jeiDveWGmeWFpee0ouW8lSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njc3IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjI4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJ1cGRhdGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidXBkYXRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICLmm7TmlrDkuoYgJWQg5Liq6Lev5b6EXG4iCittc2dzdHJbMV0gIuabtOaWsOS6hiAlZCDkuKrot6/lvoRcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6Njk1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6Njc4CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIgorbXNnc3RyICLor7TmmI7vvJolcyDnjrDlt7LmiJDkuLrmnKrot5/ouKrnmoTjgIJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzAwIGFwcGx5LmM6NDEwOCBidWlsdGluL2NoZWNrb3V0LmM6MjgxCisjOiBidWlsdGluL3Jlc2V0LmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIuWvuei3r+W+hCAnJXMnIOeahCBtYWtlX2NhY2hlX2VudHJ5IOaTjeS9nOWksei0pSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NzMwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjU1Cittc2dpZCAiUmV2ZXJ0IgorbXNnc3RyICLov5jljp8iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjc0NgorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBIRUFEXnt0cmVlfSIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIEhFQURee3RyZWV9IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3ODQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi6L+Y5Y6f5LqGICVkIOS4qui3r+W+hFxuIgorbXNnc3RyWzFdICLov5jljp/kuoYgJWQg5Liq6Lev5b6EXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjgzNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1bnRyYWNrZWQgZmlsZXMuXG4iCittc2dzdHIgIuayoeacieacqui3n+i4queahOaWh+S7tuOAglxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICLmt7vliqDmnKrot5/ouKrnmoQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICLlop7liqDkuoYgJWQg5Liq6Lev5b6EXG4iCittc2dzdHJbMV0gIuWinuWKoOS6hiAlZCDkuKrot6/lvoRcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAi5b+955Wl5pyq5ZCI5YWl55qE77yaJXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkwOCBhZGQtcGF0Y2guYzoxMzMxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICLlj6rmnInkuozov5vliLbmlofku7booqvkv67mlLnjgIJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTEwIGFkZC1wYXRjaC5jOjEzMjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIuayoeacieS/ruaUueOAglxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICLooaXkuIHmm7TmlrAiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk1MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTQKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAi5qOA6KeGIGRpZmYiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MQorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICLmmL7npLrlkKvlj5jmm7TnmoTot6/lvoQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MworbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAi5bCG5bel5L2c5Yy654q25oCB5re75Yqg5Yiw5pqC5a2Y5Yy65L+u5pS56ZuG5LitIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODUKK21zZ2lkICJyZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbiIKK21zZ3N0ciAi5bCG5pqC5a2Y55qE5L+u5pS56ZuG5oGi5aSN5Li6IEhFQUQg54mI5pysIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODcKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgIuaMkemAieaVsOaNruWdl+W5tuaciemAieaLqeWcsOabtOaWsCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg5Cittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIuaYvuekuiBIRUFEIOWSjOe0ouW8leeahOW3ruW8giIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTkxCittc2dpZCAiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICLlsIbmnKrot5/ouKrmlofku7bnmoTlhoXlrrnmt7vliqDliLDmmoLlrZjljLrkv67mlLnpm4bkuK0iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk5OSBhZGQtaW50ZXJhY3RpdmUuYzoxMDQ4Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICLluK7liqnvvJoiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDEKK21zZ2lkICJzZWxlY3QgYSBzaW5nbGUgaXRlbSIKK21zZ3N0ciAi6YCJ5oup5LiA5Liq5p2h55uuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDAzCittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgIumAieaLqeS4gOezu+WIl+adoeebriIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNQorbXNnaWQgInNlbGVjdCBtdWx0aXBsZSByYW5nZXMiCittc2dzdHIgIumAieaLqeWkmuS4quiMg+WbtCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNyBhZGQtaW50ZXJhY3RpdmUuYzoxMDUyCittc2dpZCAic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIKK21zZ3N0ciAi5Z+65LqO5ZSv5LiA5YmN57yA6YCJ5oup5p2h55uuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA5Cittc2dpZCAidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIgorbXNnc3RyICLlj43pgInmjIflrprnmoTmnaHnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTEKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICLpgInmi6nmiYDmnInmnaHnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTMKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIu+8iOepuu+8iee7k+adn+mAieaLqSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA1MAorbXNnaWQgInNlbGVjdCBhIG51bWJlcmVkIGl0ZW0iCittc2dzdHIgIumAieaLqeS4gOS4que8luWPt+adoeebriIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA1NAorbXNnaWQgIihlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIu+8iOepuu+8ieS4jemAieaLqeS7u+S9leWGheWuuSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA2MiBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiDlkb3ku6QgKioqIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDYzIGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODQ4Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIuivt+mAieaLqSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAi57yT5a2YIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgIuacque8k+WtmCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBhcHBseS5jOjQ5NjUgYXBwbHkuYzo0OTY4IGJ1aWx0aW4vYW0uYzoyMTk3CisjOiBidWlsdGluL2FtLmM6MjIwMCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzMgYnVpbHRpbi9wdWxsLmM6MjA5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICLot6/lvoQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMjIKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAi5LiN6IO95Yi35paw57Si5byVIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAi5YaN6KeB44CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICLmmoLlrZjmqKHlvI/lj5jmm7QgW3ksbixhLHEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICLmmoLlrZjliKDpmaTliqjkvZwgW3ksbixhLHEsZCVzLD9dPyAiCisKKyM6IGFkZC1wYXRjaC5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAi5pqC5a2Y6K+l5Z2XIFt5LG4sYSxxLGQlcyw/XT8gIgorCisjOiBhZGQtcGF0Y2guYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGh1bmsgaGVhZGVyICclLipzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5pWw5o2u5Z2X5aS05L+h5oGvICclLipzJyIKKworIzogYWRkLXBhdGNoLmM6MTMwIGFkZC1wYXRjaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgIuaXoOazleino+aekOW9qeiJsuaVsOaNruWdl+WktOS/oeaBryAnJS4qcyciCisKKyM6IGFkZC1wYXRjaC5jOjE3NgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBkaWZmIgorbXNnc3RyICLkuI3og73op6PmnpDlt67lvILkv6Hmga8iCisKKyM6IGFkZC1wYXRjaC5jOjE5NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb2xvcmVkIGRpZmYiCittc2dzdHIgIuS4jeiDveino+aekOW9qeiJsuW3ruW8guS/oeaBryIKKworIzogYWRkLXBhdGNoLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIumihOacn+S4iuS4i+aWh+ihjCAjJWQg5LqOXG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJodW5rcyBkbyBub3Qgb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiIKKyIlLipzIgorbXNnc3RyICIiCisi5Z2X5LiN6YeN5Y+g77yaXG4iCisiJS4qc1xuIgorIlx05LiN5piv57uT5bC+5LqO77yaXG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6Nzk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICLmiYvliqjlnZfnvJbovpHmqKHlvI8gLS0g5p+l55yL5bqV6YOo55qE5b+r6YCf5oyH5Y2X44CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVjIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIuimgeWIoOmZpCAnJWMnIOW8gOWni+eahOihjO+8jOS9v+WFtuaIkOS4uiAnICcg5byA5aeL55qE6KGM77yI5LiK5LiL5paH77yJ44CCXG4iCisi6KaB5Yig6ZmkICclYycg5byA5aeL55qE6KGM77yM5Yig6Zmk5a6D5Lus44CCXG4iCisi5LulICVjIOW8gOWni+eahOihjOWwhuiiq+WIoOmZpOOAglxuIgorCisjOiBhZGQtcGF0Y2guYzo4MTAKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuXG4iCittc2dzdHIgIuWmguaenOihpeS4geiDveW5suWHgOWcsOW6lOeUqO+8jOe8lui+keWdl+Wwhueri+WNs+agh+iusOS4uuaaguWtmOOAglxuIgorCisjLiBUUkFOU0xBVE9SUzogJ2l0JyByZWZlcnMgdG8gdGhlIHBhdGNoIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgbWVzc2FnZXMuCisjOiBhZGQtcGF0Y2guYzo4MTggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTI2Cittc2dpZCAiIgorIklmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuIGFuIG9wcG9ydHVuaXR5IHRvXG4iCisiZWRpdCBhZ2Fpbi4gIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwgdGhlbiB0aGUgZWRpdCBpc1xuIgorImFib3J0ZWQgYW5kIHRoZSBodW5rIGlzIGxlZnQgdW5jaGFuZ2VkLlxuIgorbXNnc3RyICIiCisi5aaC5p6c5LiN6IO95bmy5YeA5Zyw5bqU55So77yM5oKo5bCG5pyJ5py65Lya6YeN5paw57yW6L6R44CC5aaC5p6c6K+l5Z2X55qE5YWo6YOo5YaF5a655Yig6Zmk77yM5YiZXG4iCisi5q2k5qyh57yW6L6R6KKr57uI5q2i77yM6K+l5Z2X5LiN5Lya6KKr5L+u5pS544CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjg1MQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5pWw5o2u5Z2X5aS05L+h5oGvIgorCisjOiBhZGQtcGF0Y2guYzo4OTUgYWRkLXBhdGNoLmM6MTI5NAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAiJ2dpdCBhcHBseSAtLWNhY2hlZCcg5aSx6LSlIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6OTUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAi5oKo55qE57yW6L6R5Z2X5LiN6IO96KKr5bqU55So44CC6YeN5paw57yW6L6R77yI6YCJ5oupIFwibm9cIiDkuKLlvIPvvIHvvIkgW3kvbl0/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwOQorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgYW5kIGFsbCB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgbm9yIGFueSBvZiB0aGUgcmVtYWluaW5nIGh1bmtzXG4iCittc2dzdHIgIiIKKyJ5IC0g5pqC5a2Y6K+l5Z2XXG4iCisibiAtIOS4jeimgeaaguWtmOivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3mmoLlrZjor6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g5pqC5a2Y6K+l5Z2X5ZKM5omA5pyJ5Ymp5L2Z55qE5Z2XXG4iCisiZCAtIOS4jeaaguWtmOivpeWdl+WSjOS7u+S9leWJqeS9meeahOWdl1xuIgorCisjOiBhZGQtcGF0Y2guYzoxMDE2Cittc2dpZCAiIgorImogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCB1bmRlY2lkZWQgaHVua1xuIgorIkogLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgbmV4dCBodW5rXG4iCisiayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVua1xuIgorIksgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgaHVua1xuIgorImcgLSBzZWxlY3QgYSBodW5rIHRvIGdvIHRvXG4iCisiLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleFxuIgorInMgLSBzcGxpdCB0aGUgY3VycmVudCBodW5rIGludG8gc21hbGxlciBodW5rc1xuIgorImUgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmtcbiIKKyI/IC0gcHJpbnQgaGVscFxuIgorbXNnc3RyICIiCisiaiAtIOe7tOaMgeivpeWdl+acquWGs+eKtuaAge+8jOafpeeci+S4i+S4gOS4quacquWGs+Wdl1xuIgorIkogLSDnu7TmjIHor6XlnZfmnKrlhrPnirbmgIHvvIzmn6XnnIvkuIvkuIDkuKrlnZdcbiIKKyJrIC0g57u05oyB6K+l5Z2X5pyq5Yaz54q25oCB77yM5p+l55yL5LiK5LiA5Liq5pyq5Yaz5Z2XXG4iCisiSyAtIOe7tOaMgeivpeWdl+acquWGs+eKtuaAge+8jOafpeeci+S4iuS4gOS4quWdl1xuIgorImcgLSDpgInmi6not7PovazliLDkuIDkuKrlnZdcbiIKKyIvIC0g5p+l5om+5ZKM57uZ5a6a5q2j5YiZ6KGo6L6+5byP5Yy56YWN55qE5Z2XXG4iCisicyAtIOaLhuWIhuW9k+WJjeWdl+S4uuabtOWwj+eahOWdl1xuIgorImUgLSDmiYvliqjnvJbovpHlvZPliY3lnZdcbiIKKyI/IC0g5pi+56S65biu5YqpXG4iCisKKyM6IGFkZC1wYXRjaC5jOjExMzcgYWRkLXBhdGNoLmM6MTE0NworbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIuayoeacieWJjeS4gOS4quWdlyIKKworIzogYWRkLXBhdGNoLmM6MTE0MiBhZGQtcGF0Y2guYzoxMTUyCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICLmsqHmnInkuIvkuIDkuKrlnZciCisKKyM6IGFkZC1wYXRjaC5jOjExNTgKK21zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvIgorbXNnc3RyICLmsqHmnInlhbblroPlj6/kvpvot7PovaznmoTlnZciCisKKyM6IGFkZC1wYXRjaC5jOjExNjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc3Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuayAoPHJldD4gdG8gc2VlIG1vcmUpPyAiCittc2dzdHIgIui3s+i9rOWIsOWTquS4quWdl++8iDzlm57ovaY+IOafpeeci+abtOWkmu+8ie+8nyAiCisKKyM6IGFkZC1wYXRjaC5jOjExNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICLot7PovazliLDlk6rkuKrlnZfvvJ8iCisKKyM6IGFkZC1wYXRjaC5jOjExODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcyciCittc2dzdHIgIuaXoOaViOaVsOWtl++8miclcyciCisKKyM6IGFkZC1wYXRjaC5jOjExODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU29ycnksIG9ubHkgJWQgaHVuayBhdmFpbGFibGUuIgorbXNnaWRfcGx1cmFsICJTb3JyeSwgb25seSAlZCBodW5rcyBhdmFpbGFibGUuIgorbXNnc3RyWzBdICLlr7nkuI3otbfvvIzlj6rmnIkgJWQg5Liq5Y+v55So5Z2X44CCIgorbXNnc3RyWzFdICLlr7nkuI3otbfvvIzlj6rmnIkgJWQg5Liq5Y+v55So5Z2X44CCIgorCisjOiBhZGQtcGF0Y2guYzoxMTk1Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoIgorbXNnc3RyICLmsqHmnInlhbblroPlj6/kvpvmn6Xmib7nmoTlnZciCisKKyM6IGFkZC1wYXRjaC5jOjEyMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjIzCittc2dpZCAic2VhcmNoIGZvciByZWdleD8gIgorbXNnc3RyICLkvb/nlKjmraPliJnooajovr7lvI/mkJzntKLvvJ8iCisKKyM6IGFkZC1wYXRjaC5jOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzIgorbXNnc3RyICLplJnor6/nmoTmraPliJnooajovr7lvI8gJXPvvJolcyIKKworIzogYWRkLXBhdGNoLmM6MTIzMworbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiIKK21zZ3N0ciAi5rKh5pyJ5ZKM57uZ5a6a5qih5byP55u45Yy56YWN55qE5Z2XIgorCisjOiBhZGQtcGF0Y2guYzoxMjQwCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIuWvueS4jei1t++8jOS4jeiDveaLhuWIhui/meS4quWdlyIKKworIzogYWRkLXBhdGNoLmM6MTI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmtzLiIKK21zZ3N0ciAi5ouG5YiG5Li6ICVkIOWdl+OAgiIKKworIzogYWRkLXBhdGNoLmM6MTI0OAorbXNnaWQgIlNvcnJ5LCBjYW5ub3QgZWRpdCB0aGlzIGh1bmsiCittc2dzdHIgIuWvueS4jei1t++8jOS4jeiDvee8lui+kei/meS4quWdlyIKKworIzogYWR2aWNlLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzaGludDogJS4qcyVzXG4iCittc2dzdHIgIiVz5o+Q56S677yaJS4qcyVzXG4iCisKKyM6IGFkdmljZS5jOjE2NAorbXNnaWQgIkNoZXJyeS1waWNraW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi5peg5rOV5ouj6YCJ77yM5Zug5Li65oKo5pyJ5pyq5ZCI5bm255qE5paH5Lu244CCIgorCisjOiBhZHZpY2UuYzoxNjYKK21zZ2lkICJDb21taXR0aW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi5peg5rOV5o+Q5Lqk77yM5Zug5Li65oKo5pyJ5pyq5ZCI5bm255qE5paH5Lu244CCIgorCisjOiBhZHZpY2UuYzoxNjgKK21zZ2lkICJNZXJnaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi5peg5rOV5ZCI5bm277yM5Zug5Li65oKo5pyJ5pyq5ZCI5bm255qE5paH5Lu244CCIgorCisjOiBhZHZpY2UuYzoxNzAKK21zZ2lkICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi5peg5rOV5ouJ5Y+W77yM5Zug5Li65oKo5pyJ5pyq5ZCI5bm255qE5paH5Lu244CCIgorCisjOiBhZHZpY2UuYzoxNzIKK21zZ2lkICJSZXZlcnRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLml6Dms5Xlm57pgIDvvIzlm6DkuLrmgqjmnInmnKrlkIjlubbnmoTmlofku7bjgIIiCisKKyM6IGFkdmljZS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJJdCBpcyBub3QgcG9zc2libGUgdG8gJXMgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIuaXoOazlSAlc++8jOWboOS4uuaCqOacieacquWQiOW5tueahOaWh+S7tuOAgiIKKworIzogYWR2aWNlLmM6MTgyCittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorIuivt+WcqOW3peS9nOWMuuaUueato+aWh+S7tu+8jOeEtuWQjumFjOaDheS9v+eUqCAnZ2l0IGFkZC9ybSA85paH5Lu2Picg5ZG95Luk5qCH6K6wXG4iCisi6Kej5Yaz5pa55qGI5bm25o+Q5Lqk44CCIgorCisjOiBhZHZpY2UuYzoxOTAKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgYW4gdW5yZXNvbHZlZCBjb25mbGljdC4iCittc2dzdHIgIuWboOS4uuWtmOWcqOacquino+WGs+eahOWGsueqgeiAjOmAgOWHuuOAgiIKKworIzogYWR2aWNlLmM6MTk1IGJ1aWx0aW4vbWVyZ2UuYzoxMzMyCittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrnu5PmnZ/mgqjnmoTlkIjlubbvvIjlrZjlnKggTUVSR0VfSEVBRO+8ieOAgiIKKworIzogYWR2aWNlLmM6MTk3Cittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIKK21zZ3N0ciAi6K+35Zyo5ZCI5bm25YmN5YWI5o+Q5Lqk5oKo55qE5L+u5pS544CCIgorCisjOiBhZHZpY2UuYzoxOTgKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIuWboOS4uuWtmOWcqOacquWujOaIkOeahOWQiOW5tuiAjOmAgOWHuuOAgiIKKworIzogYWR2aWNlLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBzd2l0Y2hpbmcgdG8gJyVzJy5cbiIKKyJcbiIKKyJZb3UgYXJlIGluICdkZXRhY2hlZCBIRUFEJyBzdGF0ZS4gWW91IGNhbiBsb29rIGFyb3VuZCwgbWFrZSBleHBlcmltZW50YWxcbiIKKyJjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzXG4iCisic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHN3aXRjaGluZyBiYWNrIHRvIGEgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heVxuIgorImRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA8bmV3LWJyYW5jaC1uYW1lPlxuIgorIlxuIgorIk9yIHVuZG8gdGhpcyBvcGVyYXRpb24gd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLVxuIgorIlxuIgorIlR1cm4gb2ZmIHRoaXMgYWR2aWNlIGJ5IHNldHRpbmcgY29uZmlnIHZhcmlhYmxlIGFkdmljZS5kZXRhY2hlZEhlYWQgdG8gIgorImZhbHNlXG4iCisiXG4iCittc2dzdHIgIiIKKyLms6jmhI/vvJrmraPlnKjliIfmjaLliLAgJyVzJ+OAglxuIgorIlxuIgorIuaCqOato+WkhOS6juWIhuemu+WktOaMh+mSiOeKtuaAgeOAguaCqOWPr+S7peafpeeci+OAgeWBmuivlemqjOaAp+eahOS/ruaUueWPiuaPkOS6pO+8jOW5tuS4lOaCqOWPr+S7peWcqOWIh+aNolxuIgorIuWbnuS4gOS4quWIhuaUr+aXtu+8jOS4ouW8g+WcqOatpOeKtuaAgeS4i+aJgOWBmueahOaPkOS6pOiAjOS4jeWvueWIhuaUr+mAoOaIkOW9seWTjeOAglxuIgorIlxuIgorIuWmguaenOaCqOaDs+imgemAmui/h+WIm+W7uuWIhuaUr+adpeS/neeVmeWcqOatpOeKtuaAgeS4i+aJgOWBmueahOaPkOS6pO+8jOaCqOWPr+S7pemAmui/h+WcqCBzd2l0Y2gg5ZG95LukXG4iCisi5Lit5re75Yqg5Y+C5pWwIC1jIOadpeWunueOsO+8iOeOsOWcqOaIlueojeWQju+8ieOAguS+i+Wmgu+8mlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA85paw5YiG5pSv5ZCNPlxuIgorIlxuIgorIuaIluiAheaSpOmUgOatpOaTjeS9nO+8mlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisi6YCa6L+H5bCG6YWN572u5Y+Y6YePIGFkdmljZS5kZXRhY2hlZEhlYWQg6K6+572u5Li6IGZhbHNlIOadpeWFs+mXreatpOW7uuiurlxuIgorIlxuIgorCisjOiBhbGlhcy5jOjUwCittc2dpZCAiY21kbGluZSBlbmRzIHdpdGggXFwiCittc2dzdHIgIuWRveS7pOihjOS7pSBcXCDnu5PlsL4iCisKKyM6IGFsaWFzLmM6NTEKK21zZ2lkICJ1bmNsb3NlZCBxdW90ZSIKK21zZ3N0ciAi5pyq5YWz6Zet55qE5byV5Y+3IgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICLmnKrog73or4bliKvnmoTnqbrnmb3lrZfnrKbpgInpobkgJyVzJyIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIuacquiDveivhuWIq+eahOepuueZveWtl+espuW/veeVpemAiemhuSAnJXMnIgorCisjOiBhcHBseS5jOjEzNQorbXNnaWQgIi0tcmVqZWN0IGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLXJlamVjdCDlkowgLS0zd2F5IOS4jeiDveWQjOaXtuS9v+eUqOOAgiIKKworIzogYXBwbHkuYzoxMzcKK21zZ2lkICItLWNhY2hlZCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1jYWNoZWQg5ZKMIC0tM3dheSDkuI3og73lkIzml7bkvb/nlKjjgIIiCisKKyM6IGFwcGx5LmM6MTQwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkg5Zyo5LiA5Liq5LuT5bqT5LmL5aSWIgorCisjOiBhcHBseS5jOjE1MQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXgg5Zyo5LiA5Liq5LuT5bqT5LmL5aSWIgorCisjOiBhcHBseS5jOjE1NAorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCDlnKjkuIDkuKrku5PlupPkuYvlpJYiCisKKyM6IGFwcGx5LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIuaXoOazleWHhuWkh+aXtumXtOaIs+ato+WImeihqOi+vuW8jyAlcyIKKworIzogYXBwbHkuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIOi/lOWbniAlZO+8jOi+k+WFpeS4uu+8miVzIgorCisjOiBhcHBseS5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLkuI3og73lnKjooaXkuIHnmoTnrKwgJWQg6KGM5om+5Yiw5paH5Lu25ZCNIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumUmeivr+eahCBnaXQtZGlmZiAtIOW6lOS4uiAvZGV2L251bGzvvIzkvYblnKjnrKwgJTIkZCDooYzlvpfliLAgJTEkcyIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumUmeivr+eahCBnaXQtZGlmZiAtIOesrCAlZCDooYzkuIrmlrDmlofku7blkI3kuI3kuIDoh7QiCisKKyM6IGFwcGx5LmM6OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHnvvJrplJnor6/nmoQgZ2l0LWRpZmYgLSDnrKwgJWQg6KGM5LiK5pen5paH5Lu25ZCN5LiN5LiA6Ie0IgorCisjOiBhcHBseS5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHnvvJrplJnor6/nmoQgZ2l0LWRpZmYgLSDnrKwgJWQg6KGM5aSE5bqU5Li6IC9kZXYvbnVsbCIKKworIzogYXBwbHkuYzo5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIG9uIGxpbmUgJWQ6ICVzIgorbXNnc3RyICLnrKwgJWQg6KGM5YyF5ZCr5peg5pWI5paH5Lu25qih5byP77yaJXMiCisKKyM6IGFwcGx5LmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIKK21zZ3N0ciAi5LiN5LiA6Ie055qE5paH5Lu25aS077yMJWQg6KGM5ZKMICVkIOihjCIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIuW9k+enu+mZpCAlZCDkuKrliY3lr7zot6/lvoTlkI4gZ2l0IGRpZmYg5aS057y65LmP5paH5Lu25ZCN5L+h5oGv77yI56ysICVkIOihjO+8iSIKK21zZ3N0clsxXSAi5b2T56e76ZmkICVkIOS4quWJjeWvvOi3r+W+hOWQjiBnaXQgZGlmZiDlpLTnvLrkuY/mlofku7blkI3kv6Hmga/vvIjnrKwgJWQg6KGM77yJIgorCisjOiBhcHBseS5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lICVkKSIKK21zZ3N0ciAiZ2l0IGRpZmYg55qE5aS05L+h5oGv5Lit57y65LmP5paH5Lu25ZCN5L+h5oGv77yI56ysICVkIOihjO+8iSIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudO+8muaEj+WklueahOihjO+8miUuKnMiCisKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLnrKwgJWQg6KGM55qE6KGl5LiB54mH5q615rKh5pyJ5aS05L+h5oGv77yaJS4qcyIKKworIzogYXBwbHkuYzoxNzUzCittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIuaWsOaWh+S7tuS+nei1luaXp+WGheWuuSIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi5Yig6Zmk55qE5paH5Lu25LuN5pyJ5YaF5a65IgorCisjOiBhcHBseS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLooaXkuIHlnKjnrKwgJWQg6KGM5o2f5Z2PIgorCisjOiBhcHBseS5jOjE4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIuaWsOaWh+S7tiAlcyDkvp3otZbml6flhoXlrrkiCisKKyM6IGFwcGx5LmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICLliKDpmaTnmoTmlofku7YgJXMg5LuN5pyJ5YaF5a65IgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiog6K2m5ZGK77ya5paH5Lu2ICVzIOaIkOS4uuepuuaWh+S7tuS9huW5tuacquWIoOmZpCIKKworIzogYXBwbHkuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIuS6jOi/m+WItuihpeS4geWcqOesrCAlZCDooYzmjZ/lnY/vvJolLipzIgorCisjOiBhcHBseS5jOjIwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLmnKrog73or4bliKvnmoTkuozov5vliLbooaXkuIHkvY3kuo7nrKwgJWQg6KGMIgorCisjOiBhcHBseS5jOjIxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAi6KGl5LiB5paH5Lu255qE56ysICVkIOihjOWPquacieWeg+WcvuaVsOaNriIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIuaXoOazleivu+WPluespuWPt+mTvuaOpSAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gOaIluivu+WPliAlcyIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAi5peg5pWI55qE6KGM6aaW5a2X56ym77yaJyVjJyIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAi5Z2XICMlZCDmiJDlip/lupTnlKjkuo4gJWTvvIjlgY/np7sgJWQg6KGM77yJIgorbXNnc3RyWzFdICLlnZcgIyVkIOaIkOWKn+W6lOeUqOS6jiAlZO+8iOWBj+enuyAlZCDooYzvvIkiCisKKyM6IGFwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICLkuIrkuIvmloflh4/lsJHliLDvvIglbGQvJWxk77yJ5Lul5Zyo56ysICVkIOihjOW6lOeUqOihpeS4geeJh+autSIKKworIzogYXBwbHkuYzozMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyLlvZPmn6Xor6LvvJpcbiIKKyIlLipzIgorCisjOiBhcHBseS5jOjMwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAi57y65aSxICclcycg55qE5LqM6L+b5Yi26KGl5LiB5pWw5o2uIgorCisjOiBhcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgIuS4jeiDveWPjeWQkeW6lOeUqOS4gOS4que8uuWwkeWIsCAnJXMnIOeahOWPjeWQkeaVsOaNruWdl+eahOS6jOi/m+WItuihpeS4gSIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAi5LiN6IO95ZyoICclcycg5LiK5bqU55So5rKh5pyJ5a6M5pW057Si5byV6KGM55qE5LqM6L+b5Yi26KGl5LiBIgorCisjOiBhcHBseS5jOjMxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICLooaXkuIHlupTnlKjliLAgJyVzJ++8iCVz77yJ77yM5L2G5piv5ZKM5b2T5YmN5YaF5a655LiN5Yy56YWN44CCIgorCisjOiBhcHBseS5jOjMxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICLooaXkuIHlupTnlKjliLDnqbrmlofku7YgJyVzJ++8jOS9huWFtuW5tumdnuepuuaWh+S7tiIKKworIzogYXBwbHkuYzozMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICLml6Dms5Xor7vlj5YgJyUyJHMnIOW/hemcgOeahOebruagh+aWh+S7tiAlMSRzIgorCisjOiBhcHBseS5jOjMyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIuS6jOi/m+WItuihpeS4geacquW6lOeUqOWIsCAnJXMnIgorCisjOiBhcHBseS5jOjMyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIuWIsCAnJXMnIOeahOS6jOi/m+WItuihpeS4geS6p+eUn+S6huS4jeato+ehrueahOe7k+aenO+8iOW6lOS4uiAlc++8jOWNtOS4uiAlc++8iSIKKworIzogYXBwbHkuYzozMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICLmiZPooaXkuIHlpLHotKXvvJolczolbGQiCisKKyM6IGFwcGx5LmM6MzM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIuS4jeiDveajgOWHuiAlcyIKKworIzogYXBwbHkuYzozNDAzIGFwcGx5LmM6MzQxNCBhcHBseS5jOjM0NjAgbWlkeC5jOjYxIHNldHVwLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLml6Dms5Xor7vlj5YgJXMiCisKKyM6IGFwcGx5LmM6MzQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLor7vlj5bkvY3kuo7nrKblj7fpk77mjqXkuK3nmoQgJyVzJyIKKworIzogYXBwbHkuYzozNDQwIGFwcGx5LmM6MzY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAi6Lev5b6EICVzIOW3sue7j+iiq+mHjeWRveWQjS/liKDpmaQiCisKKyM6IGFwcGx5LmM6MzUyNiBhcHBseS5jOjM2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIlc++8muS4jeWtmOWcqOS6jue0ouW8leS4rSIKKworIzogYXBwbHkuYzozNTM1IGFwcGx5LmM6MzcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVz77ya5ZKM57Si5byV5LiN5Yy56YWNIgorCisjOiBhcHBseS5jOjM1NzAKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICLku5PlupPnvLrkuY/lv4XopoHnmoTmlbDmja7lr7nosaHku6Xov5vooYzkuInmlrnlkIjlubbjgIIiCisKKyM6IGFwcGx5LmM6MzU3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIuWbnuiQveWIsOS4ieaWueWQiOW5ti4uLlxuIgorCisjOiBhcHBseS5jOjM1ODkgYXBwbHkuYzozNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIuaXoOazleivu+WPliAnJXMnIOeahOW9k+WJjeWGheWuuSIKKworIzogYXBwbHkuYzozNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIuaXoOazleWbnuiQveWIsOS4ieaWueWQiOW5ti4uLlxuIgorCisjOiBhcHBseS5jOjM2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICLlupTnlKjooaXkuIHliLAgJyVzJyDlrZjlnKjlhrLnqoHjgIJcbiIKKworIzogYXBwbHkuYzozNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLmiJDlip/lupTnlKjooaXkuIHliLAgJyVzJ+OAglxuIgorCisjOiBhcHBseS5jOjM2NTAKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICLnp7vpmaTooaXkuIHku43nlZnkuIvkuobmlofku7blhoXlrrkiCisKKyM6IGFwcGx5LmM6MzcyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXPvvJrplJnor6/nsbvlnosiCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIOeahOexu+Wei+aYryAlb++8jOW6lOS4uiAlbyIKKworIzogYXBwbHkuYzozODc2IGFwcGx5LmM6Mzg3OCByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICLml6DmlYjot6/lvoQgJyVzJyIKKworIzogYXBwbHkuYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXPvvJrlt7Lnu4/lrZjlnKjkuo7ntKLlvJXkuK0iCisKKyM6IGFwcGx5LmM6MzkzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVz77ya5bey57uP5a2Y5Zyo5LqO5bel5L2c5Yy65LitIgorCisjOiBhcHBseS5jOjM5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICIlMiRzIOeahOaWsOaooeW8j++8iCUxJG/vvInlkozml6fmqKHlvI/vvIglMyRv77yJ5LiN5Yy56YWNIgorCisjOiBhcHBseS5jOjM5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICIlMiRzIOeahOaWsOaooeW8j++8iCUxJG/vvInlkowgJTQkcyDnmoTml6fmqKHlvI/vvIglMyRv77yJ5LiN5Yy56YWNIgorCisjOiBhcHBseS5jOjM5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIuWPl+W9seWTjeeahOaWh+S7tiAnJXMnIOS9jeS6juespuWPt+mTvuaOpeS4rSIKKworIzogYXBwbHkuYzozOTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXPvvJrooaXkuIHmnKrlupTnlKgiCisKKyM6IGFwcGx5LmM6NDAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l6KGl5LiBICVzLi4uIgorCisjOiBhcHBseS5jOjQwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5a2Q5qih57uEICVzIOeahCBzaGExIOS/oeaBr+e8uuWkseaIluaXoOaViCIKKworIzogYXBwbHkuYzo0MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAiJXMg55qE5qih5byP5Y+Y5pu077yM5L2G5a6D5LiN5Zyo5b2T5YmNIEhFQUQg5LitIgorCisjOiBhcHBseS5jOjQxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgInNoYTEg5L+h5oGv57y65aSx5oiW5peg5pWI77yIJXPvvInjgIIiCisKKyM6IGFwcGx5LmM6NDExMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi5LiN6IO95Zyo5Li05pe257Si5byV5Lit5re75YqgICVzIgorCisjOiBhcHBseS5jOjQxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAi5LiN6IO95oqK5Li05pe257Si5byV5YaZ5YWl5YiwICVzIgorCisjOiBhcHBseS5jOjQyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICLkuI3og73ku47ntKLlvJXkuK3np7vpmaQgJXMiCisKKyM6IGFwcGx5LmM6NDI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIuWtkOaooee7hCAlcyDmjZ/lnY/nmoTooaXkuIEiCisKKyM6IGFwcGx5LmM6NDMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95a+55paw5bu65paH5Lu2ICclcycg6LCD55SoIHN0YXQiCisKKyM6IGFwcGx5LmM6NDMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAi5LiN6IO95Li65paw5bu65paH5Lu2ICVzIOWIm+W7uuWQjuerr+WtmOWCqCIKKworIzogYXBwbHkuYzo0MzE0IGFwcGx5LmM6NDQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi5peg5rOV5Li6ICVzIOa3u+WKoOe8k+WtmOadoeebriIKKworIzogYXBwbHkuYzo0MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLlhpnlhaUgJyVzJyDlpLHotKUiCisKKyM6IGFwcGx5LmM6NDM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAi5YWz6Zet5paH5Lu2ICclcyciCisKKyM6IGFwcGx5LmM6NDQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIuS4jeiDveWGmeaWh+S7tiAnJXMnIOadg+mZkCAlbyIKKworIzogYXBwbHkuYzo0NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIuaIkOWKn+W6lOeUqOihpeS4gSAlc+OAgiIKKworIzogYXBwbHkuYzo0NTM3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIuWGhemDqOmUmeivryIKKworIzogYXBwbHkuYzo0NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAi5bqU55SoICUlcyDkuKrooaXkuIHvvIzlhbbkuK0gJWQg5Liq6KKr5ouS57udLi4uIgorbXNnc3RyWzFdICLlupTnlKggJSVzIOS4quihpeS4ge+8jOWFtuS4rSAlZCDkuKrooqvmi5Lnu50uLi4iCisKKyM6IGFwcGx5LmM6NDU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIuaIquefrSAucmVqIOaWh+S7tuWQjeS4uiAlLipzLnJlaiIKKworIzogYXBwbHkuYzo0NTU5IGJ1aWx0aW4vZmV0Y2guYzo5MDEgYnVpbHRpbi9mZXRjaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gCAlcyIKKworIzogYXBwbHkuYzo0NTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIuesrCAjJWQg5Liq54mH5q615oiQ5Yqf5bqU55So44CCIgorCisjOiBhcHBseS5jOjQ1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICLmi5Lnu53nrKwgIyVkIOS4queJh+auteOAgiIKKworIzogYXBwbHkuYzo0Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIueVpei/h+ihpeS4gSAnJXMn44CCIgorCisjOiBhcHBseS5jOjQ3MDQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgIuacquiDveivhuWIq+eahOi+k+WFpSIKKworIzogYXBwbHkuYzo0NzI0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAi5peg5rOV6K+75Y+W57Si5byV5paH5Lu2IgorCisjOiBhcHBseS5jOjQ4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAi5LiN6IO95omT5byA6KGl5LiBICclcyfvvJolcyIKKworIzogYXBwbHkuYzo0OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIuaKkeWItuS4i+S7jeaciSAlZCDkuKrnqbrnmb3lrZfnrKbor6/nlKgiCittc2dzdHJbMV0gIuaKkeWItuS4i+S7jeaciSAlZCDkuKrnqbrnmb3lrZfnrKbor6/nlKgiCisKKyM6IGFwcGx5LmM6NDkxNCBhcHBseS5jOjQ5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQg6KGM5paw5aKe5LqG56m655m95a2X56ym6K+v55So44CCIgorbXNnc3RyWzFdICIlZCDooYzmlrDlop7kuobnqbrnmb3lrZfnrKbor6/nlKjjgIIiCisKKyM6IGFwcGx5LmM6NDkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICLkv67lpI3nqbrnmb3plJnor6/lkI7vvIzlupTnlKjkuoYgJWQg6KGM44CCIgorbXNnc3RyWzFdICLkv67lpI3nqbrnmb3plJnor6/lkI7vvIzlupTnlKjkuoYgJWQg6KGM44CCIgorCisjOiBhcHBseS5jOjQ5MzggYnVpbHRpbi9hZGQuYzo1NzkgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6MzkwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnlhaXmlrDntKLlvJXmlofku7YiCisKKyM6IGFwcGx5LmM6NDk2NgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIuS4jeimgeW6lOeUqOS4jue7meWHuui3r+W+hOWQkeWMuemFjeeahOWPmOabtCIKKworIzogYXBwbHkuYzo0OTY5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi5bqU55So5LiO57uZ5Ye66Lev5b6E5ZCR5Yy56YWN55qE5Y+Y5pu0IgorCisjOiBhcHBseS5jOjQ5NzEgYnVpbHRpbi9hbS5jOjIyMDYKK21zZ2lkICJudW0iCittc2dzdHIgIuaVsOWtlyIKKworIzogYXBwbHkuYzo0OTcyCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIuS7juS8oOe7n+eahCBkaWZmIOi3r+W+hOS4reenu+mZpOaMh+WumuaVsOmHj+eahOWJjeWvvOaWnOe6vyIKKworIzogYXBwbHkuYzo0OTc1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAi5b+955Wl6KGl5LiB5Lit55qE5re75Yqg55qE5paH5Lu2IgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIuS4jeW6lOeUqOihpeS4ge+8jOiAjOaYr+aYvuekuui+k+WFpeeahOW3ruW8gue7n+iuoe+8iGRpZmZzdGF077yJIgorCisjOiBhcHBseS5jOjQ5ODEKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICLku6XljYHov5vliLbmlbDmmL7npLrmt7vliqDlkozliKDpmaTnmoTooYzmlbAiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIuS4jeW6lOeUqOihpeS4ge+8jOiAjOaYr+aYvuekuui+k+WFpeeahOamguimgSIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi5LiN5bqU55So6KGl5LiB77yM6ICM5piv5p+l55yL6KGl5LiB5piv5ZCm5Y+v5bqU55SoIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIuehruiupOihpeS4geWPr+S7peW6lOeUqOWIsOW9k+WJjee0ouW8lSIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICLkvb/nlKjlkb3ku6QgYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCDmoIforrDmlrDlop7mlofku7YiCisKKyM6IGFwcGx5LmM6NDk5MQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLlupTnlKjooaXkuIHogIzkuI3kv67mlLnlt6XkvZzljLoiCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgIuaOpeWPl+S/ruaUueW3peS9nOWMuuS5i+WkluaWh+S7tueahOihpeS4gSIKKworIzogYXBwbHkuYzo0OTk2Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgIui/mOW6lOeUqOatpOihpeS4ge+8iOS4jiAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2sg6YCJ6aG55ZCM5pe25L2/55So77yJIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICLlpoLmnpzkuIDkuKrooaXkuIHkuI3og73lupTnlKjliJnlsJ3or5XkuInmlrnlkIjlubYiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICLliJvlu7rkuIDkuKrkuLTml7bntKLlvJXln7rkuo7ltYzlhaXnmoTntKLlvJXkv6Hmga8iCisKKyM6IGFwcGx5LmM6NTAwMyBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczIGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjQKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi6Lev5b6E5LulIE5VTCDlrZfnrKbliIbpmpQiCisKKyM6IGFwcGx5LmM6NTAwNQorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAi56Gu5L+d6Iez5bCR5Yy56YWNIDxuPiDooYzkuIrkuIvmlociCisKKyM6IGFwcGx5LmM6NTAwNiBidWlsdGluL2FtLmM6MjE4NSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzEwIGJ1aWx0aW4vcmViYXNlLmM6MTQ3NAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAi5Yqo5L2cIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAi5qOA5p+l5paw5aKe5ZKM5L+u5pS555qE6KGM5Lit6Ze055qE56m655m95a2X56ym5rul55SoIgorCisjOiBhcHBseS5jOjUwMTAgYXBwbHkuYzo1MDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAi5p+l5om+5LiK5LiL5paH5pe25b+955Wl56m655m95a2X56ym55qE5Y+Y5pu0IgorCisjOiBhcHBseS5jOjUwMTYKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAi5Y+N5ZCR5bqU55So6KGl5LiBIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAi5peg6ZyA6Iez5bCR5LiA6KGM5LiK5LiL5paHIgorCisjOiBhcHBseS5jOjUwMjAKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAi5bCG5ouS57ud55qE6KGl5LiB54mH5q615L+d5a2Y5Zyo5a+55bqU55qEICoucmVqIOaWh+S7tuS4rSIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgIuWFgeiuuOmHjeWPoOeahOihpeS4geeJh+autSIKKworIzogYXBwbHkuYzo1MDIzIGJ1aWx0aW4vYWRkLmM6MzA5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NSBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5OCBidWlsdGluL2ZzY2suYzo3NzQKKyM6IGJ1aWx0aW4vbG9nLmM6MjE2NiBidWlsdGluL212LmM6MTIzIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAi5YaX6ZW/6L6T5Ye6IgorCisjOiBhcHBseS5jOjUwMjUKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi5YWB6K645LiN5q2j56Gu55qE5paH5Lu25pyr5bC+5o2i6KGM56ymIgorCisjOiBhcHBseS5jOjUwMjgKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIuS4jeS/oeS7u+ihpeS4geeJh+auteeahOWktOS/oeaBr+S4reeahOihjOWPtyIKKworIzogYXBwbHkuYzo1MDMwIGJ1aWx0aW4vYW0uYzoyMTk0Cittc2dpZCAicm9vdCIKK21zZ3N0ciAi5qC555uu5b2VIgorCisjOiBhcHBseS5jOjUwMzEKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICLkuLrmiYDmnInmlofku7blkI3liY3mt7vliqAgPOagueebruW9lT4iCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs86YCJ6aG5Pl0gPOagkeWvueixoT4gWzzot6/lvoQ+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzku5PlupM+IFstLWV4ZWMgPOWRveS7pD5dIFs86YCJ6aG5Pl0gPOagkeWvueixoT4gWzzot6/lvoQ+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE3Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPOS7k+W6kz4gWy0tZXhlYyA85ZG95LukPl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzcyIGJ1aWx0aW4vYWRkLmM6MTgwIGJ1aWx0aW4vYWRkLmM6NTU1IGJ1aWx0aW4vcm0uYzoyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg5pyq5Yy56YWN5Lu75L2V5paH5Lu2IgorCisjOiBhcmNoaXZlLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggcmVmOiAlLipzIgorbXNnc3RyICLml6DmraTlvJXnlKjvvJolLipzIgorCisjOiBhcmNoaXZlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5pyJ5pWI55qE5a+56LGh5ZCN77yaJXMiCisKKyM6IGFyY2hpdmUuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdHJlZSBvYmplY3Q6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmoJHlr7nosaHvvJolcyIKKworIzogYXJjaGl2ZS5jOjQyNgorbXNnaWQgImN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgdW50cmFja2VkIgorbXNnc3RyICLlvZPliY3lt6XkvZznm67lvZXmnKrooqvot5/ouKoiCisKKyM6IGFyY2hpdmUuYzo0NTcKK21zZ2lkICJmbXQiCittc2dzdHIgIuagvOW8jyIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICLlvZLmoaPmoLzlvI8iCisKKyM6IGFyY2hpdmUuYzo0NTggYnVpbHRpbi9sb2cuYzoxNjUzCittc2dpZCAicHJlZml4IgorbXNnc3RyICLliY3nvIAiCisKKyM6IGFyY2hpdmUuYzo0NTkKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICLkuLrlvZLmoaPkuK3mr4/kuKrot6/lvoTlkI3liqDkuIrliY3nvIAiCisKKyM6IGFyY2hpdmUuYzo0NjAgYnVpbHRpbi9ibGFtZS5jOjg2MSBidWlsdGluL2JsYW1lLmM6ODY1IGJ1aWx0aW4vYmxhbWUuYzo4NjYKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTcgYnVpbHRpbi9jb25maWcuYzoxMjkgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjIKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTY4IGJ1aWx0aW4vZ3JlcC5jOjg5OQorIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNSBidWlsdGluL2xzLWZpbGVzLmM6NTYwIGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworIzogcGFyc2Utb3B0aW9ucy5oOjE5MAorbXNnaWQgImZpbGUiCittc2dzdHIgIuaWh+S7tiIKKworIzogYXJjaGl2ZS5jOjQ2MSBidWlsdGluL2FyY2hpdmUuYzo5MAorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi5b2S5qGj5YaZ5YWl5q2k5paH5Lu2IgorCisjOiBhcmNoaXZlLmM6NDYzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi6K+75Y+W5bel5L2c5Yy65Lit55qEIC5naXRhdHRyaWJ1dGVzIgorCisjOiBhcmNoaXZlLmM6NDY0Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAi5Zyo5qCH5YeG6ZSZ6K+v5LiK5oql5ZGK5b2S5qGj5paH5Lu2IgorCisjOiBhcmNoaXZlLmM6NDY1Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAi5Y+q5a2Y5YKoIgorCisjOiBhcmNoaXZlLmM6NDY2Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICLljovnvKnpgJ/luqbmm7Tlv6siCisKKyM6IGFyY2hpdmUuYzo0NzQKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgIuWOi+e8qeaViOaenOabtOWlvSIKKworIzogYXJjaGl2ZS5jOjQ3NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAi5YiX5Ye65pSv5oyB55qE5b2S5qGj5qC85byPIgorCisjOiBhcmNoaXZlLmM6NDc5IGJ1aWx0aW4vYXJjaGl2ZS5jOjkxIGJ1aWx0aW4vY2xvbmUuYzoxMTMgYnVpbHRpbi9jbG9uZS5jOjExNgorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODQKK21zZ2lkICJyZXBvIgorbXNnc3RyICLku5PlupMiCisKKyM6IGFyY2hpdmUuYzo0ODAgYnVpbHRpbi9hcmNoaXZlLmM6OTIKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAi5LuO6L+c56iL5LuT5bqT77yIPOS7k+W6kz7vvInmj5Dlj5blvZLmoaPmlofku7YiCisKKyM6IGFyY2hpdmUuYzo0ODEgYnVpbHRpbi9hcmNoaXZlLmM6OTMgYnVpbHRpbi9kaWZmdG9vbC5jOjcxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgIuWRveS7pCIKKworIzogYXJjaGl2ZS5jOjQ4MiBidWlsdGluL2FyY2hpdmUuYzo5NAorbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAi6L+c56iLIGdpdC11cGxvYWQtYXJjaGl2ZSDlkb3ku6TnmoTot6/lvoQiCisKKyM6IGFyY2hpdmUuYzo0ODkKK21zZ2lkICJVbmV4cGVjdGVkIG9wdGlvbiAtLXJlbW90ZSIKK21zZ3N0ciAi5pyq55+l5Y+C5pWwIC0tcmVtb3RlIgorCisjOiBhcmNoaXZlLmM6NDkxCittc2dpZCAiT3B0aW9uIC0tZXhlYyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1yZW1vdGUiCittc2dzdHIgIumAiemhuSAtLWV4ZWMg5Y+q6IO95ZKMIC0tcmVtb3RlIOWQjOaXtuS9v+eUqCIKKworIzogYXJjaGl2ZS5jOjQ5MworbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0IgorbXNnc3RyICLmnKrnn6Xlj4LmlbAgLS1vdXRwdXQiCisKKyM6IGFyY2hpdmUuYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIgorbXNnc3RyICLmnKrnn6XlvZLmoaPmoLzlvI8gJyVzJyIKKworIzogYXJjaGl2ZS5jOjUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJBcmd1bWVudCBub3Qgc3VwcG9ydGVkIGZvciBmb3JtYXQgJyVzJzogLSVkIgorbXNnc3RyICLlj4LmlbDkuI3mlK/mjIHmraTmoLzlvI8gJyVzJ++8mi0lZCIKKworIzogYXJjaGl2ZS10YXIuYzoxMjUgYXJjaGl2ZS16aXAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmVhbSBibG9iICVzIgorbXNnc3RyICLkuI3og73miZPlvIDmlbDmja7lr7nosaEgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjY2IGFyY2hpdmUtemlwLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiCittc2dzdHIgIuS4jeaUr+aMgeeahOaWh+S7tuaooeW8j++8mjAlbyAoU0hBMTogJXMpIgorCisjOiBhcmNoaXZlLXRhci5jOjI5MyBhcmNoaXZlLXppcC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+WICVzIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJyVzJyBmaWx0ZXIiCittc2dzdHIgIuaXoOazleWQr+WKqCAnJXMnIOi/h+a7pOWZqCIKKworIzogYXJjaGl2ZS10YXIuYzo0NjgKK21zZ2lkICJ1bmFibGUgdG8gcmVkaXJlY3QgZGVzY3JpcHRvciIKK21zZ3N0ciAi5peg5rOV6YeN5a6a5ZCR5o+P6L+w56ymIgorCisjOiBhcmNoaXZlLXRhci5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIKK21zZ3N0ciAiJyVzJyDov4fmu6TlmajmiqXlkYrkuobplJnor68iCisKKyM6IGFyY2hpdmUtemlwLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggaXMgbm90IHZhbGlkIFVURi04OiAlcyIKK21zZ3N0ciAi6Lev5b6E5LiN5piv5pyJ5pWI55qEIFVURi0477yaJXMiCisKKyM6IGFyY2hpdmUtemlwLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIgorbXNnc3RyICLot6/lvoTlpKrplb/vvIglZCDlrZfnrKbvvIxTSEEx77yaJXPvvInvvJolcyIKKworIzogYXJjaGl2ZS16aXAuYzo0NzkgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICLljovnvKnplJnor68gKCVkKSIKKworIzogYXJjaGl2ZS16aXAuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZXN0YW1wIHRvbyBsYXJnZSBmb3IgdGhpcyBzeXN0ZW06ICU8UFJJdU1BWD4iCittc2dzdHIgIuWvueS6juacrOezu+e7n+aXtumXtOaIs+WkquWkp++8miU8UFJJdU1BWD4iCisKKyM6IGF0dHIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIKK21zZ3N0ciAiJS4qcyDkuI3mmK/kuIDkuKrmnInmlYjnmoTlsZ7mgKflkI0iCisKKyM6IGF0dHIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgbm90IGFsbG93ZWQ6ICVzOiVkIgorbXNnc3RyICLkuI3lhYHorrggJXPvvJolczolZCIKKworIzogYXR0ci5jOjQwOQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIui0n+WAvOaooeeJiOWcqCBnaXQgYXR0cmlidXRlcyDkuK3ooqvlv73nlaVcbiIKKyLlvZPlrZfnrKbkuLLnoa7lrp7opoHku6XmhJ/lj7nlj7flvIDlp4vml7bvvIzkvb/nlKggJ1xcISfjgIIiCisKKyM6IGJpc2VjdC5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWRseSBxdW90ZWQgY29udGVudCBpbiBmaWxlICclcyc6ICVzIgorbXNnc3RyICLmlofku7YgJyVzJyDljIXlkKvplJnor6/nmoTlvJXnlKjmoLzlvI/vvJolcyIKKworIzogYmlzZWN0LmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGNhbm5vdCBiaXNlY3QgbW9yZSFcbiIKK21zZ3N0ciAi5oiR5Lus5peg5rOV6L+b6KGM5pu05aSa55qE5LqM5YiG5p+l5om+77yBXG4iCisKKyM6IGJpc2VjdC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBjb21taXQgbmFtZSAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5pyJ5pWI55qE5o+Q5Lqk5ZCNICVzIgorCisjOiBiaXNlY3QuYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIGJhZC5cbiIKKyJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIuWQiOW5tuWfuue6vyAlcyDmmK/lnY/nmoTjgIJcbiIKKyLov5nmhI/lkbPnnYDku4vkuo4gJXMg5ZKMIFslc10g5LmL6Ze055qEIGJ1ZyDlt7Lnu4/ooqvkv67lpI3jgIJcbiIKKworIzogYmlzZWN0LmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbWVyZ2UgYmFzZSAlcyBpcyBuZXcuXG4iCisiVGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyLlkIjlubbln7rnur8gJXMg5piv5paw55qE44CCXG4iCisi5LuL5LqOICVzIOWSjCBbJXNdIOS5i+mXtOeahOWxnuaAp+W3sue7j+iiq+S/ruaUueOAglxuIgorCisjOiBiaXNlY3QuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorIlRoaXMgbWVhbnMgdGhlIGZpcnN0ICclcycgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kIFslc10uXG4iCittc2dzdHIgIiIKKyLlkIjlubbln7rnur8gJXMg5pivICVz44CCXG4iCisi6L+Z5oSP5ZGz552A56ys5LiA5LiqICclcycg5o+Q5Lqk5L2N5LqOICVzIOWSjCBbJXNdIOS5i+mXtOOAglxuIgorCisjOiBiaXNlY3QuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNvbWUgJXMgcmV2cyBhcmUgbm90IGFuY2VzdG9ycyBvZiB0aGUgJXMgcmV2LlxuIgorImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorIk1heWJlIHlvdSBtaXN0b29rICVzIGFuZCAlcyByZXZzP1xuIgorbXNnc3RyICIiCisi5LiA5LqbICVzIOeJiOacrOS4jeaYryAlcyDniYjmnKznmoTnpZblhYjjgIJcbiIKKyLov5nnp43mg4XlhrXkuIsgZ2l0IOS6jOWIhuafpeaJvuaXoOazleato+W4uOW3peS9nOOAglxuIgorIuaCqOWPr+iDveW8hOmUmeS6hiAlcyDlkowgJXMg54mI5pys77yfXG4iCisKKyM6IGJpc2VjdC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIG1lcmdlIGJhc2UgYmV0d2VlbiAlcyBhbmQgWyVzXSBtdXN0IGJlIHNraXBwZWQuXG4iCisiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyBiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKyJXZSBjb250aW51ZSBhbnl3YXkuIgorbXNnc3RyICIiCisi5LuL5LqOICVzIOWSjCBbJXNdIOeahOWQiOW5tuWfuue6v+S4gOWumuiiq+W/veeVpeS6huOAglxuIgorIuaJgOS7peaIkeS7rOaXoOazleehruiupOesrOS4gOS4qiAlcyDmj5DkuqTmmK/lkKbku4vkuo4gJXMg5ZKMICVzIOS5i+mXtOOAglxuIgorIuaIkeS7rOS7jeaXp+e7p+e7reOAgiIKKworIzogYmlzZWN0LmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkJpc2VjdGluZzogYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkXG4iCittc2dzdHIgIuS6jOWIhuafpeaJvuS4re+8muWQiOW5tuWfuue6v+W/hemhu+aYr+e7j+i/h+a1i+ivleeahFxuIgorCisjOiBiaXNlY3QuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSAlcyByZXZpc2lvbiBpcyBuZWVkZWQiCittc2dzdHIgIumcgOimgeS4gOS4qiAlcyDniYjmnKwiCisKKyM6IGJpc2VjdC5jOjg4NCBidWlsdGluL25vdGVzLmM6MTc3IGJ1aWx0aW4vdGFnLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7rmlofku7YgJyVzJyIKKworIzogYmlzZWN0LmM6OTI4IGJ1aWx0aW4vbWVyZ2UuYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5bmlofku7YgJyVzJyIKKworIzogYmlzZWN0LmM6OTU4Cittc2dpZCAicmVhZGluZyBiaXNlY3QgcmVmcyBmYWlsZWQiCittc2dzdHIgIuivu+WPluS6jOWIhuafpeaJvuW8leeUqOWksei0pSIKKworIzogYmlzZWN0LmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIgorbXNnc3RyICIlcyDlkIzml7bkuLogJXMg5ZKMICVzXG4iCisKKyM6IGJpc2VjdC5jOjk4NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGVzdGFibGUgY29tbWl0IGZvdW5kLlxuIgorIk1heWJlIHlvdSBzdGFydGVkIHdpdGggYmFkIHBhdGggcGFyYW1ldGVycz9cbiIKK21zZ3N0ciAiIgorIuayoeacieWPkeeOsOWPr+a1i+ivleeahOaPkOS6pOOAglxuIgorIuWPr+iDveaCqOWcqOi/kOihjOaXtuS9v+eUqOS6humUmeivr+eahOi3r+W+hOWPguaVsO+8n1xuIgorCisjOiBiaXNlY3QuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIihyb3VnaGx5ICVkIHN0ZXApIgorbXNnaWRfcGx1cmFsICIocm91Z2hseSAlZCBzdGVwcykiCittc2dzdHJbMF0gIu+8iOWkp+amgiAlZCDmraXvvIkiCittc2dzdHJbMV0gIu+8iOWkp+amgiAlZCDmraXvvIkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgbGFzdCAlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggIihyb3VnaGx5ICVkCisjLiBzdGVwcykiIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJpc2VjdC5jOjEwMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnaWRfcGx1cmFsICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAlc1xuIgorbXNnc3RyWzBdICLkuozliIbmn6Xmib7kuK3vvJrlnKjmraTkuYvlkI7vvIzov5jliakgJWQg5Liq54mI5pys5b6F5rWL6K+VICVzXG4iCittc2dzdHJbMV0gIuS6jOWIhuafpeaJvuS4re+8muWcqOatpOS5i+WQju+8jOi/mOWJqSAlZCDkuKrniYjmnKzlvoXmtYvor5UgJXNcbiIKKworIzogYmxhbWUuYzoyNzAwCittc2dpZCAiLS1jb250ZW50cyBhbmQgLS1yZXZlcnNlIGRvIG5vdCBibGVuZCB3ZWxsLiIKK21zZ3N0ciAiLS1jb250ZW50cyDlkowgLS1yZXZlcnNlIOS4jeiDvea3t+eUqOOAgiIKKworIzogYmxhbWUuYzoyNzE0Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbnRlbnRzIHdpdGggZmluYWwgY29tbWl0IG9iamVjdCBuYW1lIgorbXNnc3RyICLkuI3og73lsIYgLS1jb250ZW50cyDlkozmnIDnu4jnmoTmj5DkuqTlr7nosaHlkI3lhbHnlKgiCisKKyM6IGJsYW1lLmM6MjczNQorbXNnaWQgIi0tcmV2ZXJzZSBhbmQgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSBzcGVjaWZpZWQgbGF0ZXN0IGNvbW1pdCIKK21zZ3N0ciAiLS1yZXZlcnNlIOWSjCAtLWZpcnN0LXBhcmVudCDlhbHnlKjvvIzpnIDopoHmjIflrprmnIDmlrDnmoTmj5DkuqQiCisKKyM6IGJsYW1lLmM6Mjc0NCBidW5kbGUuYzoxNjcgcmVmLWZpbHRlci5jOjIyMDMgcmVtb3RlLmM6MTk0MSBzZXF1ZW5jZXIuYzoyMDkzCisjOiBzZXF1ZW5jZXIuYzo0NDYwIGJ1aWx0aW4vY29tbWl0LmM6MTA0MCBidWlsdGluL2xvZy5jOjM4OCBidWlsdGluL2xvZy5jOjk5MQorIzogYnVpbHRpbi9sb2cuYzoxNTIwIGJ1aWx0aW4vbG9nLmM6MTkyNSBidWlsdGluL2xvZy5jOjIyMTUgYnVpbHRpbi9tZXJnZS5jOjQxMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTI4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE5MgorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICLniYjmnKzpgY3ljoborr7nva7lpLHotKUiCisKKyM6IGJsYW1lLmM6Mjc2MgorbXNnaWQgIiIKKyItLXJldmVyc2UgLS1maXJzdC1wYXJlbnQgdG9nZXRoZXIgcmVxdWlyZSByYW5nZSBhbG9uZyBmaXJzdC1wYXJlbnQgY2hhaW4iCittc2dzdHIgIi0tcmV2ZXJzZSDlkowgLS1maXJzdC1wYXJlbnQg5YWx55So77yM6ZyA6KaB56ys5LiA56WW5YWI6ZO+5LiK55qE5o+Q5Lqk6IyD5Zu0IgorCisjOiBibGFtZS5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBwYXRoICVzIGluICVzIgorbXNnc3RyICLlnKggJTIkcyDkuK3ml6DmraTot6/lvoQgJTEkcyIKKworIzogYmxhbWUuYzoyNzg0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGJsb2IgJXMgZm9yIHBhdGggJXMiCittc2dzdHIgIuS4jeiDveS4uui3r+W+hCAlMiRzIOivu+WPluaVsOaNruWvueixoSAlMSRzIgorCisjOiBicmFuY2guYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQWZ0ZXIgZml4aW5nIHRoZSBlcnJvciBjYXVzZSB5b3UgbWF5IHRyeSB0byBmaXggdXBcbiIKKyJ0aGUgcmVtb3RlIHRyYWNraW5nIGluZm9ybWF0aW9uIGJ5IGludm9raW5nXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiLiIKK21zZ3N0ciAiIgorIlxuIgorIuWcqOS/ruWkjemUmeivr+WQju+8jOaCqOWPr+S7peWwneivleS/ruaUuei/nOeoi+i3n+i4quWIhuaUr++8jOmAmui/h+aJp+ihjOWRveS7pFxuIgorIlwiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcyVzJXNcIiDjgIIiCisKKyM6IGJyYW5jaC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAi5pyq6K6+572u5YiG5pSvICVzIOS9nOS4uuWug+iHquW3seeahOS4iua4uOOAgiIKKworIzogYnJhbmNoLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLliIbmlK8gJyUxJHMnIOiuvue9ruS4uuS9v+eUqOWPmOWfuuadpei3n+i4quadpeiHqiAnJTMkcycg55qE6L+c56iL5YiG5pSvICclMiRzJ+OAgiIKKworIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJyVzJyBmcm9tICclcycuIgorbXNnc3RyICLliIbmlK8gJyUxJHMnIOiuvue9ruS4uui3n+i4quadpeiHqiAnJTMkcycg55qE6L+c56iL5YiG5pSvICclMiRzJ+OAgiIKKworIzogYnJhbmNoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6K6+572u5Li65L2/55So5Y+Y5Z+65p2l6Lef6Liq5pys5Zyw5YiG5pSvICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJyVzJy4iCittc2dzdHIgIuWIhuaUryAnJXMnIOiuvue9ruS4uui3n+i4quacrOWcsOWIhuaUryAnJXMn44CCIgorCisjOiBicmFuY2guYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIuWIhuaUryAnJXMnIOiuvue9ruS4uuS9v+eUqOWPmOWfuuadpei3n+i4qui/nOeoi+W8leeUqCAnJXMn44CCIgorCisjOiBicmFuY2guYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJyVzJy4iCittc2dzdHIgIuWIhuaUryAnJXMnIOiuvue9ruS4uui3n+i4qui/nOeoi+W8leeUqCAnJXMn44CCIgorCisjOiBicmFuY2guYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6K6+572u5Li65L2/55So5Y+Y5Z+65p2l6Lef6Liq5pys5Zyw5byV55SoICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycuIgorbXNnc3RyICLliIbmlK8gJyVzJyDorr7nva7kuLrot5/ouKrmnKzlnLDlvJXnlKggJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MTE5Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLml6Dms5XlhpnlhaXkuIrmuLjliIbmlK/phY3nva4iCisKKyM6IGJyYW5jaC5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICLmnKrot5/ouKrvvJrlvJXnlKggJXMg5pyJ5q2n5LmJIgorCisjOiBicmFuY2guYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5YiG5pSv5ZCN56ew44CCIgorCisjOiBicmFuY2guYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIuS4gOS4quWIhuaUr+WQjSAnJXMnIOW3sue7j+WtmOWcqOOAgiIKKworIzogYnJhbmNoLmM6MjEzCittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLml6Dms5XlvLrliLbmm7TmlrDlvZPliY3liIbmlK/jgIIiCisKKyM6IGJyYW5jaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAi5peg5rOV6K6+572u6Lef6Liq5L+h5oGv77yb6LW35aeL54K5ICclcycg5LiN5piv5LiA5Liq5YiG5pSv44CCIgorCisjOiBicmFuY2guYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi6K+35rGC55qE5LiK5ri45YiG5pSvICclcycg5LiN5a2Y5ZyoIgorCisjOiBicmFuY2guYzoyMzcKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIiIKKyJcbiIKKyLlpoLmnpzmgqjmraPorqHliJLln7rkuo7ov5znqIvkuIDkuKrnjrDlrZjnmoTkuIrmuLjliIbmlK/lvIDlp4vkvaDnmoTlt6XkvZzvvIxcbiIKKyLmgqjlj6/og73pnIDopoHmiafooYwgXCJnaXQgZmV0Y2hcIiDmnaXojrflj5bliIbmlK/jgIJcbiIKKyJcbiIKKyLlpoLmnpzmgqjmraPorqHliJLmjqjpgIHkuIDkuKrog73kuI7lr7nlupTov5znqIvliIbmlK/lu7rnq4vot5/ouKrnmoTmlrDnmoTmnKzlnLDliIbmlK/vvIxcbiIKKyLmgqjlj6/og73pnIDopoHkvb/nlKggXCJnaXQgcHVzaCAtdVwiIOaOqOmAgeWIhuaUr+W5tumFjee9ruWSjOS4iua4uOeahOWFs+iBlOOAgiIKKworIzogYnJhbmNoLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5pyJ5pWI55qE5a+56LGh5ZCN77yaJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIuatp+S5ieeahOWvueixoeWQje+8miclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICLml6DmlYjnmoTliIbmlK/ngrnvvJonJXMn44CCIgorCisjOiBicmFuY2guYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIiclcycg5bey57uP5qOA5Ye65YiwICclcyciCisKKyM6IGJyYW5jaC5jOjM4NworIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIG9mIHdvcmtpbmcgdHJlZSAlcyBpcyBub3QgdXBkYXRlZCIKK21zZ3N0ciAi5bel5L2c5Yy6ICVzIOeahCBIRUFEIOaMh+WQkeayoeacieiiq+abtOaWsCIKKworIzogYnVuZGxlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyDkuI3lg4/mmK/kuIDkuKogdjIg54mI5pys55qE5YyF5paH5Lu2IgorCisjOiBidW5kbGUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgIuacquiDveivhuWIq+eahOWMheWktO+8miVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6OTAgcmVyZXJlLmM6NDgwIHJlcmVyZS5jOjY5MCBzZXF1ZW5jZXIuYzoyMzQ0IHNlcXVlbmNlci5jOjMxMDgKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODExCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIuS4jeiDveaJk+W8gCAnJXMnIgorCisjOiBidW5kbGUuYzoxNDMKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAi5LuT5bqT5Lit57y65bCR6L+Z5Lqb5b+F5aSH55qE5o+Q5Lqk77yaIgorCisjOiBidW5kbGUuYzoxNDYKK21zZ2lkICJuZWVkIGEgcmVwb3NpdG9yeSB0byB2ZXJpZnkgYSBidW5kbGUiCittc2dzdHIgIumcgOimgeS4gOS4quS7k+W6k+adpeagoemqjOS4gOS4quWMhSIKKworIzogYnVuZGxlLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLov5nkuKrljIXkuK3lkKvmnInov5nkuKrlvJXnlKjvvJoiCittc2dzdHJbMV0gIui/meS4quWMheS4reWQq+aciSAlZCDkuKrlvJXnlKjvvJoiCisKKyM6IGJ1bmRsZS5jOjIwNAorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICLov5nkuKrljIXorrDlvZXkuIDkuKrlrozmlbTljoblj7LjgIIiCisKKyM6IGJ1bmRsZS5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAi6L+Z5Liq5YyF6ZyA6KaB6L+Z5Liq5byV55So77yaIgorbXNnc3RyWzFdICLov5nkuKrljIXpnIDopoEgJWQg5Liq5byV55So77yaIgorCisjOiBidW5kbGUuYzoyNzMKK21zZ2lkICJ1bmFibGUgdG8gZHVwIGJ1bmRsZSBkZXNjcmlwdG9yIgorbXNnc3RyICLml6Dms5XlpI3liLYgYnVuZGxlIOaPj+i/sOespiIKKworIzogYnVuZGxlLmM6MjgwCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAi5LiN6IO955Sf5oiQIHBhY2stb2JqZWN0cyDov5vnqIsiCisKKyM6IGJ1bmRsZS5jOjI5MQorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJwYWNrLW9iamVjdHMg57uI5q2iIgorCisjOiBidW5kbGUuYzozMzMKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCDnu4jmraIiCisKKyM6IGJ1bmRsZS5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAi5byV55SoICclcycg6KKrIHJldi1saXN0IOmAiemhueaOkumZpCIKKworIzogYnVuZGxlLmM6NDYxIGJ1aWx0aW4vbG9nLmM6MjAzIGJ1aWx0aW4vbG9nLmM6MTgxNCBidWlsdGluL3Nob3J0bG9nLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveivhuWIq+eahOWPguaVsO+8miVzIgorCisjOiBidW5kbGUuYzo0NjkKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAi5LiN6IO95Yib5bu656m65YyF44CCIgorCisjOiBidW5kbGUuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7ogJyVzJyIKKworIzogYnVuZGxlLmM6NTA0Cittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICJpbmRleC1wYWNrIOe7iOatoiIKKworIzogY29sb3IuYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAi5peg5pWI55qE6aKc6Imy5YC877yaJS4qcyIKKworIzogY29tbWl0LmM6NTEgc2VxdWVuY2VyLmM6MjgxMSBidWlsdGluL2FtLmM6MzU0IGJ1aWx0aW4vYW0uYzozOTgKKyM6IGJ1aWx0aW4vYW0uYzoxMzY2IGJ1aWx0aW4vYW0uYzoyMDA5IGJ1aWx0aW4vcmVwbGFjZS5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIuS4jeiDveino+aekCAlcyIKKworIzogY29tbWl0LmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMg5LiN5piv5LiA5Liq5o+Q5Lqk77yBIgorCisjOiBjb21taXQuYzoxOTMKK21zZ2lkICIiCisiU3VwcG9ydCBmb3IgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIGlzIGRlcHJlY2F0ZWRcbiIKKyJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIEdpdCB2ZXJzaW9uLlxuIgorIlxuIgorIlBsZWFzZSB1c2UgXCJnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZVwiXG4iCisidG8gY29udmVydCB0aGUgZ3JhZnRzIGludG8gcmVwbGFjZSByZWZzLlxuIgorIlxuIgorIlR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nXG4iCisiXCJnaXQgY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlXCIiCittc2dzdHIgIiIKKyLlr7kgPEdJVF9ESVI+L2luZm8vZ3JhZnRzIOeahOaUr+aMgeW3suiiq+W8g+eUqO+8jOW5tuWwhuWcqFxuIgorIuacquadpeeahEdpdOeJiOacrOS4reiiq+enu+mZpOOAglxuIgorIlxuIgorIuivt+S9v+eUqCBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCIg5bCGXG4iCisiZ3JhZnRzIOi9rOaNouS4uuabv+aNouW8leeUqOOAglxuIgorIlxuIgorIuiuvue9riBcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIlxuIgorIuWPr+WFs+mXreacrOa2iOaBryIKKworIzogY29tbWl0LmM6MTE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICLmj5DkuqQgJXMg5pyJ5LiA5Liq6Z2e5Y+v5L+h55qE5aOw56ew5p2l6IeqICVzIOeahCBHUEcg562+5ZCN44CCIgorCisjOiBjb21taXQuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICLmj5DkuqQgJXMg5pyJ5LiA5Liq6ZSZ6K+v55qE5aOw56ew5p2l6IeqICVzIOeahCBHUEcg562+5ZCN44CCIgorCisjOiBjb21taXQuYzoxMTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIuaPkOS6pCAlcyDmsqHmnIkgR1BHIOetvuWQjeOAgiIKKworIzogY29tbWl0LmM6MTE2MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIuaPkOS6pCAlcyDmnInkuIDkuKrmnaXoh6ogJXMg55qE5aW955qEIEdQRyDnrb7lkI3jgIJcbiIKKworIzogY29tbWl0LmM6MTQxNQorbXNnaWQgIiIKKyJXYXJuaW5nOiBjb21taXQgbWVzc2FnZSBkaWQgbm90IGNvbmZvcm0gdG8gVVRGLTguXG4iCisiWW91IG1heSB3YW50IHRvIGFtZW5kIGl0IGFmdGVyIGZpeGluZyB0aGUgbWVzc2FnZSwgb3Igc2V0IHRoZSBjb25maWdcbiIKKyJ2YXJpYWJsZSBpMThuLmNvbW1pdGVuY29kaW5nIHRvIHRoZSBlbmNvZGluZyB5b3VyIHByb2plY3QgdXNlcy5cbiIKK21zZ3N0ciAiIgorIuitpuWRiu+8muaPkOS6pOivtOaYjuS4jeespuWQiCBVVEYtOCDlrZfnrKbnvJbnoIHjgIJcbiIKKyLmgqjlj6/ku6XpgJrov4fkv67ooaXmj5DkuqTmnaXmlLnmraPmj5DkuqTor7TmmI7vvIzmiJbogIXlsIbphY3nva7lj5jph48gaTE4bi5jb21taXRlbmNvZGluZ1xuIgorIuiuvue9ruS4uuaCqOmhueebruaJgOeUqOeahOWtl+espue8lueggeOAglxuIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAKK21zZ2lkICJjb21taXQtZ3JhcGggZmlsZSBpcyB0b28gc21hbGwiCittc2dzdHIgIuaPkOS6pOWbvuW9ouaWh+S7tuWkquWwjyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBzaWduYXR1cmUgJVggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlICVYIgorbXNnc3RyICLmj5DkuqTlm77lvaLnrb7lkI0gJVgg5ZKM562+5ZCNICVYIOS4jeWMuemFjSIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgIuaPkOS6pOWbvuW9oueJiOacrCAlWCDlkozniYjmnKwgJVgg5LiN5Yy56YWNIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhc2ggdmVyc2lvbiAlWCBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uICVYIgorbXNnc3RyICLmj5DkuqTlm77lvaLlk4jluIzniYjmnKwgJVgg5ZKM54mI5pysICVYIOS4jeWMuemFjSIKKworIzogY29tbWl0LWdyYXBoLmM6MjMyCittc2dpZCAiY29tbWl0LWdyYXBoIGNodW5rIGxvb2t1cCB0YWJsZSBlbnRyeSBtaXNzaW5nOyBmaWxlIG1heSBiZSBpbmNvbXBsZXRlIgorbXNnc3RyICLmj5DkuqTlm77lvaLlnZfmn6Xmib7ooajmnaHnm67kuKLlpLHvvIzmlofku7blj6/og73kuI3lrozmlbQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaW1wcm9wZXIgY2h1bmsgb2Zmc2V0ICUwOHglMDh4IgorbXNnc3RyICLmj5DkuqTlm77lvaLkuI3mraPnoa7nmoTlnZflgY/np7sgJTA4eCUwOHgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgaWQgJTA4eCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzIgorbXNnc3RyICLmj5DkuqTlm77lvaLlnZcgaWQgJTA4eCDlh7rnjrDkuoblpJrmrKEiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjM1MAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgbm8gYmFzZSBncmFwaHMgY2h1bmsiCittc2dzdHIgIuaPkOS6pOWbvuW9ouayoeacieWfuuehgOWbvuW9ouWdlyIKKworIzogY29tbWl0LWdyYXBoLmM6MzYwCittc2dpZCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICLmj5DkuqTlm77lvaLpk77kuI3ljLnphY0iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdC1ncmFwaCBjaGFpbjogbGluZSAnJXMnIG5vdCBhIGhhc2giCittc2dzdHIgIuaXoOaViOeahOaPkOS6pOWbvuW9oumTvu+8muihjCAnJXMnIOS4jeaYr+S4gOS4quWTiOW4jOWAvCIKKworIzogY29tbWl0LWdyYXBoLmM6NDMzCittc2dpZCAidW5hYmxlIHRvIGZpbmQgYWxsIGNvbW1pdC1ncmFwaCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV5om+5Yiw5omA5pyJ5o+Q5Lqk5Zu+5b2i5paH5Lu2IgorCisjOiBjb21taXQtZ3JhcGguYzo1NjQgY29tbWl0LWdyYXBoLmM6NjI0Cittc2dpZCAiaW52YWxpZCBjb21taXQgcG9zaXRpb24uIGNvbW1pdC1ncmFwaCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAi5peg5pWI55qE5o+Q5Lqk5L2N572u44CC5o+Q5Lqk5Zu+5b2i5Y+v6IO95bey5o2f5Z2PIgorCisjOiBjb21taXQtZ3JhcGguYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmQgY29tbWl0ICVzIgorbXNnc3RyICLml6Dms5Xmib7liLDmj5DkuqQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjg1OCBidWlsdGluL2FtLmM6MTI4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICLkuI3og73op6PmnpDmj5DkuqQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwMTcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgdHlwZSBvZiBvYmplY3QgJXMiCittc2dzdHIgIuaXoOazleiOt+W+l+WvueixoSAlcyDnsbvlnosiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNDkKK21zZ2lkICJMb2FkaW5nIGtub3duIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLmraPlnKjliqDovb3mj5DkuqTlm77kuK3nmoTlt7Lnn6Xmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwNjYKK21zZ2lkICJFeHBhbmRpbmcgcmVhY2hhYmxlIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLmraPlnKjmianlsZXmj5DkuqTlm77kuK3nmoTlj6/ovr7mj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEwODUKK21zZ2lkICJDbGVhcmluZyBjb21taXQgbWFya3MgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLmraPlnKjmuIXpmaTmj5DkuqTlm77kuK3nmoTmj5DkuqTmoIforrAiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExMDQKK21zZ2lkICJDb21wdXRpbmcgY29tbWl0IGdyYXBoIGdlbmVyYXRpb24gbnVtYmVycyIKK21zZ3N0ciAi5q2j5Zyo6K6h566X5o+Q5Lqk5Zu+5LiW5Luj5pWw5a2XIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2siCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGluICVkIHBhY2tzIgorbXNnc3RyWzBdICLmraPlnKggJWQg5Liq5YyF5Lit5p+l5om+5o+Q5Lqk5Zu+55qE5o+Q5LqkIgorbXNnc3RyWzFdICLmraPlnKggJWQg5Liq5YyF5Lit5p+l5om+5o+Q5Lqk5Zu+55qE5o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGFkZGluZyBwYWNrICVzIgorbXNnc3RyICLmt7vliqDljIUgJXMg5Ye66ZSZIgorCisjOiBjb21taXQtZ3JhcGguYzoxMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yICVzIgorbXNnc3RyICLkuLogJXMg5omT5byA57Si5byV5Ye66ZSZIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBmcm9tICVkIHJlZnMiCittc2dzdHJbMF0gIuato+WcqOS7jiAlZCDkuKrlvJXnlKjkuK3mn6Xmib7mj5DkuqTlm77nmoTmj5DkuqQiCittc2dzdHJbMV0gIuato+WcqOS7jiAlZCDkuKrlvJXnlKjkuK3mn6Xmib7mj5DkuqTlm77nmoTmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgb2JqZWN0IGlkOiAlcyIKK21zZ3N0ciAi5peg5pWI55qE5o+Q5Lqk5a+56LGhIElE77yaJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNTUKK21zZ2lkICJGaW5kaW5nIGNvbW1pdHMgZm9yIGNvbW1pdCBncmFwaCBhbW9uZyBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi5q2j5Zyo5omT5YyF5a+56LGh5Lit5p+l5om+5o+Q5Lqk5Zu+55qE5o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxMjcwCittc2dpZCAiQ291bnRpbmcgZGlzdGluY3QgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOiuoeeul+aPkOS6pOWbvuS4reS4jeWQjOeahOaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTMwMAorbXNnaWQgIkZpbmRpbmcgZXh0cmEgZWRnZXMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLmraPlnKjmn6Xmib7mj5DkuqTlm77kuK3pop3lpJbnmoTovrkiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzNDYKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29ycmVjdCBudW1iZXIgb2YgYmFzZSBncmFwaCBpZHMiCittc2dzdHIgIuaXoOazleWGmeWFpeato+ehruaVsOmHj+eahOWfuuehgOWbvuW9oiBJRCIKKworIzogY29tbWl0LWdyYXBoLmM6MTM3OSBtaWR4LmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAlcyIKK21zZ3N0ciAi5LiN6IO95Li6ICVzIOWIm+W7uuWFiOWvvOebruW9lSIKKworIzogY29tbWl0LWdyYXBoLmM6MTM5MSBidWlsdGluL2luZGV4LXBhY2suYzozMDYgYnVpbHRpbi9yZXBhY2suYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7ogJyVzJyIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzcyIKK21zZ2lkX3BsdXJhbCAiV3JpdGluZyBvdXQgY29tbWl0IGdyYXBoIGluICVkIHBhc3NlcyIKK21zZ3N0clswXSAi5q2j5Zyo55SoICVkIOatpeWGmeWHuuaPkOS6pOWbviIKK21zZ3N0clsxXSAi5q2j5Zyo55SoICVkIOatpeWGmeWHuuaPkOS6pOWbviIKKworIzogY29tbWl0LWdyYXBoLmM6MTQ5MgorbXNnaWQgInVuYWJsZSB0byBvcGVuIGNvbW1pdC1ncmFwaCBjaGFpbiBmaWxlIgorbXNnc3RyICLml6Dms5XmiZPlvIDmj5DkuqTlm77lvaLpk77mlofku7YiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE1MDQKK21zZ2lkICJmYWlsZWQgdG8gcmVuYW1lIGJhc2UgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIuaXoOazlemHjeWRveWQjeWfuuehgOaPkOS6pOWbvuW9ouaWh+S7tiIKKworIzogY29tbWl0LWdyYXBoLmM6MTUyNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgdGVtcG9yYXJ5IGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLml6Dms5Xph43lkb3lkI3kuLTml7bmj5DkuqTlm77lvaLmlofku7YiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2MzUKK21zZ2lkICJTY2FubmluZyBtZXJnZWQgY29tbWl0cyIKK21zZ3N0ciAi5q2j5Zyo5omr5o+P5ZCI5bm25o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZHVwbGljYXRlIGNvbW1pdCBpZCAlcyIKK21zZ3N0ciAi5oSP5aSW55qE6YeN5aSN5o+Q5LqkIElEICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxNjcwCittc2dpZCAiTWVyZ2luZyBjb21taXQtZ3JhcGgiCittc2dzdHIgIuato+WcqOWQiOW5tuaPkOS6pOWbvuW9oiIKKworIzogY29tbWl0LWdyYXBoLmM6MTg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgY29tbWl0IGdyYXBoIGZvcm1hdCBjYW5ub3Qgd3JpdGUgJWQgY29tbWl0cyIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5qC85byP5LiN6IO95YaZ5YWlICVkIOS4quaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTg3MQorbXNnaWQgInRvbyBtYW55IGNvbW1pdHMgdG8gd3JpdGUgZ3JhcGgiCittc2dzdHIgIuaPkOS6pOWkquWkmuS4jeiDveeUu+WbviIKKworIzogY29tbWl0LWdyYXBoLmM6MTk2MQorbXNnaWQgInRoZSBjb21taXQtZ3JhcGggZmlsZSBoYXMgaW5jb3JyZWN0IGNoZWNrc3VtIGFuZCBpcyBsaWtlbHkgY29ycnVwdCIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5paH5Lu255qE5qCh6aqM56CB6ZSZ6K+v77yM5Y+v6IO95bey57uP5o2f5Z2PIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IE9JRCBvcmRlcjogJXMgdGhlbiAlcyIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i55qE5a+56LGhIElEIOmhuuW6j+S4jeato+ehru+8miVzIOeEtuWQjiAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4MSBjb21taXQtZ3JhcGguYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZTogZmFub3V0WyVkXSA9ICV1ICE9ICV1IgorbXNnc3RyICLmj5DkuqTlm77lvaLmnInkuI3mraPnoa7nmoTmiYflh7rlgLzvvJpmYW5vdXRbJWRdID0gJXUgIT0gJXUiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi5peg5rOV5LuO5o+Q5Lqk5Zu+5b2i5Lit6Kej5p6Q5o+Q5LqkICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDA2Cittc2dpZCAiVmVyaWZ5aW5nIGNvbW1pdHMgaW4gY29tbWl0IGdyYXBoIgorbXNnc3RyICLmraPlnKjmoKHpqozmj5DkuqTlm77kuK3nmoTmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGNvbW1pdCAlcyBmcm9tIG9iamVjdCBkYXRhYmFzZSBmb3IgY29tbWl0LWdyYXBoIgorbXNnc3RyICLml6Dms5Xku47mj5DkuqTlm77lvaLnmoTlr7nosaHlupPkuK3op6PmnpDmj5DkuqQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlcyAhPSAlcyIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i5Lit55qE5o+Q5LqkICVzIOeahOagueagkeWvueixoSBJRCDmmK8gJXMgIT0gJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBsaXN0IGZvciBjb21taXQgJXMgaXMgdG9vIGxvbmciCittc2dzdHIgIuaPkOS6pCAlcyDnmoTmj5DkuqTlm77lvaLniLbmj5DkuqTliJfooajlpKrplb/kuoYiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHBhcmVudCBmb3IgJXMgaXMgJXMgIT0gJXMiCittc2dzdHIgIiVzIOeahOaPkOS6pOWbvuW9oueItuaPkOS6pOaYryAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjA1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyB0ZXJtaW5hdGVzIGVhcmx5IgorbXNnc3RyICLmj5DkuqQgJXMg55qE5o+Q5Lqk5Zu+5b2i54i25o+Q5Lqk5YiX6KGo6L+H5pep57uI5q2iIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIGdlbmVyYXRpb24gbnVtYmVyIHplcm8gZm9yIGNvbW1pdCAlcywgYnV0IG5vbi16ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i5Lit5o+Q5LqkICVzIOeahOS4luS7o+WPt+aYr+mbtu+8jOS9huWFtuWug+WcsOaWuemdnumbtiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY29tbWl0LWdyYXBoIGhhcyBub24temVybyBnZW5lcmF0aW9uIG51bWJlciBmb3IgY29tbWl0ICVzLCBidXQgemVybyBlbHNld2hlcmUiCittc2dzdHIgIuaPkOS6pOWbvuW9ouS4reaPkOS6pCAlcyDnmoTkuJbku6Plj7fpnZ7pm7bvvIzkvYblhbblroPlnLDmlrnmmK/pm7YiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGdlbmVyYXRpb24gZm9yIGNvbW1pdCAlcyBpcyAldSAhPSAldSIKK21zZ3N0ciAi5o+Q5Lqk5Zu+5b2i5Lit55qE5o+Q5LqkICVzIOeahOS4luS7o+WPt+aYryAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MjA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgZGF0ZSBmb3IgY29tbWl0ICVzIGluIGNvbW1pdC1ncmFwaCBpcyAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCittc2dzdHIgIuaPkOS6pOWbvuW9ouS4reaPkOS6pCAlcyDnmoTmj5DkuqTml6XmnJ/mmK8gJTxQUkl1TUFYPiAhPSAlPFBSSXVNQVg+IgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuWGheWtmOiAl+WwvSIKKworIzogY29uZmlnLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGNlZWRlZCBtYXhpbXVtIGluY2x1ZGUgZGVwdGggKCVkKSB3aGlsZSBpbmNsdWRpbmdcbiIKKyJcdCVzXG4iCisiZnJvbVxuIgorIlx0JXNcbiIKKyJUaGlzIG1pZ2h0IGJlIGR1ZSB0byBjaXJjdWxhciBpbmNsdWRlcy4iCittc2dzdHIgIiIKKyLotoXov4fkuobmnIDlpKfljIXlkKvmt7HluqbvvIglMSRk77yJ77yM5b2T5LuOXG4iCisiXHQlMyRzXG4iCisi5YyF5ZCrXG4iCisiXHQlMiRzXG4iCisi6L+Z5Y+v6IO95piv5Zug5Li65b6q546v5YyF5ZCr44CCIgorCisjOiBjb25maWcuYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIKK21zZ3N0ciAi5peg5rOV5omp5bGV5YyF5ZCr6Lev5b6EICclcyciCisKKyM6IGNvbmZpZy5jOjE1MQorbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlcyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAi55u45a+56Lev5b6E55qE6YWN572u5paH5Lu25byV55So5b+F6aG75p2l6Ieq5LqO5paH5Lu2IgorCisjOiBjb25maWcuYzoxOTcKK21zZ2lkICJyZWxhdGl2ZSBjb25maWcgaW5jbHVkZSBjb25kaXRpb25hbHMgbXVzdCBjb21lIGZyb20gZmlsZXMiCittc2dzdHIgIuebuOWvuei3r+W+hOeahOmFjee9ruaWh+S7tuadoeS7tuW8leeUqOW/hemhu+adpeiHquS6juaWh+S7tiIKKworIzogY29uZmlnLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSBkb2VzIG5vdCBjb250YWluIGEgc2VjdGlvbjogJXMiCittc2dzdHIgIumUruWQjeayoeacieWMheWQq+S4gOS4quWwj+iKguWQjeensO+8miVzIgorCisjOiBjb25maWcuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gdmFyaWFibGUgbmFtZTogJXMiCittc2dzdHIgIumUruWQjeayoeacieWMheWQq+WPmOmHj+WQje+8miVzIgorCisjOiBjb25maWcuYzo0MDYgc2VxdWVuY2VyLmM6MjUzMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleTogJXMiCittc2dzdHIgIuaXoOaViOmUruWQje+8miVzIgorCisjOiBjb25maWcuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgKG5ld2xpbmUpOiAlcyIKK21zZ3N0ciAi5peg5pWI6ZSu5ZCN77yI5pyJ5o2i6KGM56ym77yJ77yaJXMiCisKKyM6IGNvbmZpZy5jOjQ0OCBjb25maWcuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgY29uZmlnIHBhcmFtZXRlcjogJXMiCittc2dzdHIgIuS8qumFjee9ruWPguaVsO+8miVzIgorCisjOiBjb25maWcuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm9ndXMgZm9ybWF0IGluICVzIgorbXNnc3RyICIlcyDkuK3moLzlvI/plJnor68iCisKKyM6IGNvbmZpZy5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gYmxvYiAlcyIKK21zZ3N0ciAi5pWw5o2u5a+56LGhICUyJHMg5Lit6ZSZ6K+v55qE6YWN572u6KGMICUxJGQiCisKKyM6IGNvbmZpZy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gZmlsZSAlcyIKK21zZ3N0ciAi5paH5Lu2ICUyJHMg5Lit6ZSZ6K+v55qE6YWN572u6KGMICUxJGQiCisKKyM6IGNvbmZpZy5jOjgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuagh+WHhui+k+WFpeS4remUmeivr+eahOmFjee9ruihjCAlZCIKKworIzogY29uZmlnLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiBzdWJtb2R1bGUtYmxvYiAlcyIKK21zZ3N0ciAi5a2Q5qih57uE5pWw5o2u5a+56LGhICUyJHMg5Lit6ZSZ6K+v55qE6YWN572u6KGMICUxJGQiCisKKyM6IGNvbmZpZy5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGxpbmUgJWQgaW4gY29tbWFuZCBsaW5lICVzIgorbXNnc3RyICLlkb3ku6TooYwgJTIkcyDkuK3plJnor6/nmoTphY3nva7ooYwgJTEkZCIKKworIzogY29uZmlnLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAi5ZyoICUyJHMg5Lit6ZSZ6K+v55qE6YWN572u6KGMICUxJGQiCisKKyM6IGNvbmZpZy5jOjk3OAorbXNnaWQgIm91dCBvZiByYW5nZSIKK21zZ3N0ciAi6LaF5Ye66IyD5Zu0IgorCisjOiBjb25maWcuYzo5NzgKK21zZ2lkICJpbnZhbGlkIHVuaXQiCittc2dzdHIgIuaXoOaViOeahOWNleS9jSIKKworIzogY29uZmlnLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAi6YWN572u5Y+Y6YePICclMiRzJyDnmoTmlbDlrZflj5blgLwgJyUxJHMnIOiuvue9rumUmeivr++8miUzJHMiCisKKyM6IGNvbmZpZy5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBibG9iICVzOiAlcyIKK21zZ3N0ciAi5pWw5o2u5a+56LGhICUzJHMg5Lit6YWN572u5Y+Y6YePICclMiRzJyDplJnor6/nmoTlj5blgLwgJyUxJHMn77yaJTQkcyIKKworIzogY29uZmlnLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBmaWxlICVzOiAlcyIKK21zZ3N0ciAi5paH5Lu2ICUzJHMg5Lit6YWN572u5Y+Y6YePICclMiRzJyDplJnor6/nmoTlj5blgLwgJyUxJHMn77yaJTQkcyIKKworIzogY29uZmlnLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiBzdGFuZGFyZCBpbnB1dDogJXMiCittc2dzdHIgIuagh+WHhui+k+WFpeS4remFjee9ruWPmOmHjyAnJTIkcycg6ZSZ6K+v55qE5Y+W5YC8ICclMSRzJ++8miUzJHMiCisKKyM6IGNvbmZpZy5jOjEwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gc3VibW9kdWxlLWJsb2IgJXM6ICVzIgorbXNnc3RyICLlrZDmqKHnu4TmlbDmja4gJTMkcyDkuK3phY3nva7lj5jph48gJyUyJHMnIOmUmeivr+eahOWPluWAvCAnJTEkcyfvvJolNCRzIgorCisjOiBjb25maWcuYzoxMDEwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluIGNvbW1hbmQgbGluZSAlczogJXMiCittc2dzdHIgIuWRveS7pOihjCAlMyRzIOS4remFjee9ruWPmOmHjyAnJTIkcycg6ZSZ6K+v55qE5Y+W5YC8ICclMSRzJ++8miU0JHMiCisKKyM6IGNvbmZpZy5jOjEwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICLlnKggJTMkcyDkuK3phY3nva7lj5jph48gJyUyJHMnIOmUmeivr+eahOWPluWAvCAnJTEkcyfvvJolNCRzIgorCisjOiBjb25maWcuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgIuaXoOazleaJqeWxleeUqOaIt+ebruW9le+8miclcyciCisKKyM6IGNvbmZpZy5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclMiRzJyDnmoTlgLwgJyUxJHMnIOS4jeaYr+S4gOS4quacieaViOeahOaXtumXtOaIsyIKKworIzogY29uZmlnLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmJyZXYgbGVuZ3RoIG91dCBvZiByYW5nZTogJWQiCittc2dzdHIgIue8qeWGmemVv+W6pui2heWHuuiMg+WbtO+8miVkIgorCisjOiBjb25maWcuYzoxMjIyIGNvbmZpZy5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIumUmeivr+eahCB6bGliIOWOi+e8qee6p+WIqyAlZCIKKworIzogY29uZmlnLmM6MTMyNQorbXNnaWQgImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIKK21zZ3N0ciAiY29yZS5jb21tZW50Q2hhciDlupTor6XmmK/kuIDkuKrlrZfnrKYiCisKKyM6IGNvbmZpZy5jOjEzNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICLml6DmlYjnmoTlr7nosaHliJvlu7rmqKHlvI/vvJolcyIKKworIzogY29uZmlnLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgdmFsdWUgZm9yICVzIgorbXNnc3RyICIlcyDnmoTlj5blgLzmoLzlvI/plJnor68iCisKKyM6IGNvbmZpZy5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiVzIOeahOWPluWAvOagvOW8j+mUmeivr++8miVzIgorCisjOiBjb25maWcuYzoxNDU3Cittc2dpZCAibXVzdCBiZSBvbmUgb2Ygbm90aGluZywgbWF0Y2hpbmcsIHNpbXBsZSwgdXBzdHJlYW0gb3IgY3VycmVudCIKK21zZ3N0ciAi5b+F6aG75piv5YW25Lit5LmL5LiA77yabm90aGluZ+OAgW1hdGNoaW5n44CBc2ltcGxl44CBdXBzdHJlYW0g5oiWIGN1cnJlbnQiCisKKyM6IGNvbmZpZy5jOjE1MTggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICLplJnor6/nmoTmiZPljIXljovnvKnnuqfliKsgJWQiCisKKyM6IGNvbmZpZy5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciCittc2dzdHIgIuaXoOazleS7juaVsOaNruWvueixoSAnJXMnIOWKoOi9vemFjee9riIKKworIzogY29uZmlnLmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGJsb2IiCittc2dzdHIgIuW8leeUqCAnJXMnIOayoeacieaMh+WQkeS4gOS4quaVsOaNruWvueixoSIKKworIzogY29uZmlnLmM6MTY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpDphY3nva7lr7nosaEgJyVzJyIKKworIzogY29uZmlnLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJXMiCittc2dzdHIgIuino+aekCAlcyDlpLHotKUiCisKKyM6IGNvbmZpZy5jOjE3NDUKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5ZG95Luk6KGM5Lit55qE6YWN572uIgorCisjOiBjb25maWcuYzoyMDk2Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICLlnKjor7vlj5bphY3nva7mlofku7bml7bpgYfliLDmnKrnn6XplJnor68iCisKKyM6IGNvbmZpZy5jOjIyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAi5peg5pWIICVz77yaJyVzJyIKKworIzogY29uZmlnLmM6MjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJzcGxpdEluZGV4Lm1heFBlcmNlbnRDaGFuZ2UgdmFsdWUgJyVkJyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAiCittc2dzdHIgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSDnmoTlj5blgLwgJyVkJyDlupTor6Xku4vkuo4gMCDlkowgMTAwIOS5i+mXtCIKKworIzogY29uZmlnLmM6MjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIuaXoOazleino+aekOWRveS7pOihjOmFjee9ruS4reeahCAnJXMnIgorCisjOiBjb25maWcuYzoyMzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAi5Zyo5paH5Lu2ICclMiRzJyDnmoTnrKwgJTMkZCDooYzlj5HnjrDplJnor6/nmoTphY3nva7lj5jph48gJyUxJHMnIgorCisjOiBjb25maWcuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lICclcyciCittc2dzdHIgIuaXoOaViOeahOWwj+iKguWQjeensCAnJXMnIgorCisjOiBjb25maWcuYzoyNDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIOacieWkmuS4quWPluWAvCIKKworIzogY29uZmlnLmM6MjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAi5YaZ5YWl5paw55qE6YWN572u5paH5Lu2ICVzIOWksei0pSIKKworIzogY29uZmlnLmM6Mjc1MyBjb25maWcuYzozMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIgorbXNnc3RyICLkuI3og73plIHlrprphY3nva7mlofku7YgJXMiCisKKyM6IGNvbmZpZy5jOjI3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlbmluZyAlcyIKK21zZ3N0ciAi5omT5byAICVzIgorCisjOiBjb25maWcuYzoyNzk5IGJ1aWx0aW4vY29uZmlnLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0dGVybjogJXMiCittc2dzdHIgIuaXoOaViOaooeW8j++8miVzIgorCisjOiBjb25maWcuYzoyODI0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIuaXoOaViOeahOmFjee9ruaWh+S7tiAlcyIKKworIzogY29uZmlnLmM6MjgzNyBjb25maWcuYzozMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZzdGF0IG9uICVzIGZhaWxlZCIKK21zZ3N0ciAi5a+5ICVzIOiwg+eUqCBmc3RhdCDlpLHotKUiCisKKyM6IGNvbmZpZy5jOjI4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1tYXAgJyVzJyIKK21zZ3N0ciAi5LiN6IO9IG1tYXAgJyVzJyIKKworIzogY29uZmlnLmM6Mjg1NyBjb25maWcuYzozMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNobW9kIG9uICVzIGZhaWxlZCIKK21zZ3N0ciAi5a+5ICVzIOiwg+eUqCBjaG1vZCDlpLHotKUiCisKKyM6IGNvbmZpZy5jOjI5NDIgY29uZmlnLmM6MzE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIuS4jeiDveWGmeWFpemFjee9ruaWh+S7tiAlcyIKKworIzogY29uZmlnLmM6Mjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO96K6+572uICclcycg5Li6ICclcyciCisKKyM6IGNvbmZpZy5jOjI5NzggYnVpbHRpbi9yZW1vdGUuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHVuc2V0ICclcyciCittc2dzdHIgIuS4jeiDveWPlua2iOiuvue9riAnJXMnIgorCisjOiBjb25maWcuYzozMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIKK21zZ3N0ciAi5peg5pWI55qE5bCP6IqC5ZCN56ew77yaJXMiCisKKyM6IGNvbmZpZy5jOjMyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIKK21zZ3N0ciAiJXMg55qE5Y+W5YC857y65aSxIgorCisjOiBjb25uZWN0LmM6NjEKK21zZ2lkICJ0aGUgcmVtb3RlIGVuZCBodW5nIHVwIHVwb24gaW5pdGlhbCBjb250YWN0IgorbXNnc3RyICLov5znq6/lnKjliJ3lp4vov57mjqXml7bljbPmjILmlq0iCisKKyM6IGNvbm5lY3QuYzo2MworbXNnaWQgIiIKKyJDb3VsZCBub3QgcmVhZCBmcm9tIHJlbW90ZSByZXBvc2l0b3J5LlxuIgorIlxuIgorIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIgorbXNnc3RyICIiCisi5peg5rOV6K+75Y+W6L+c56iL5LuT5bqT44CCXG4iCisiXG4iCisi6K+356Gu6K6k5oKo5pyJ5q2j56Gu55qE6K6/6Zeu5p2D6ZmQ5bm25LiU5LuT5bqT5a2Y5Zyo44CCIgorCisjOiBjb25uZWN0LmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCAnJXMnIgorbXNnc3RyICLmnI3liqHlmajkuI3mlK/mjIEgJyVzJyIKKworIzogY29ubmVjdC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGZlYXR1cmUgJyVzJyIKK21zZ3N0ciAi5pyN5Yqh5Zmo5LiN5pSv5oyB54m55oCnICclcyciCisKKyM6IGNvbm5lY3QuYzoxMTQKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciBjYXBhYmlsaXRpZXMiCittc2dzdHIgIuWcqOiDveWKm+S5i+WQjuW6lOS4uuS4gOS4qiBmbHVzaCDljIUiCisKKyM6IGNvbm5lY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgY2FwYWJpbGl0aWVzIGFmdGVyIGZpcnN0IGxpbmUgJyVzJyIKK21zZ3N0ciAi5b+955Wl56ys5LiA6KGMICclcycg5LmL5ZCO55qE6IO95Yqb5a2X5q61IgorCisjOiBjb25uZWN0LmM6MjUyCittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgY2FwYWJpbGl0aWVzXnt9IgorbXNnc3RyICLljY/orq7plJnor6/vvJrmhI/lpJbnmoQgY2FwYWJpbGl0aWVzXnt9IgorCisjOiBjb25uZWN0LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGFsbG93IHNoYS0xLCBnb3QgJyVzJyIKK21zZ3N0ciAi5Y2P6K6u6ZSZ6K+v77ya6aKE5pyf5rWF5YWL6ZqGIHNoYS0x77yM5Y205b6X5YiwICclcyciCisKKyM6IGNvbm5lY3QuYzoyNzUKK21zZ2lkICJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciCittc2dzdHIgIuWPpuS4gOerr+eahOS7k+W6k+S4jeiDveaYr+a1heWFi+mahuS7k+W6kyIKKworIzogY29ubmVjdC5jOjMxMworbXNnaWQgImludmFsaWQgcGFja2V0IgorbXNnc3RyICLml6DmlYjmlbDmja7ljIUiCisKKyM6IGNvbm5lY3QuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgJyVzJyIKK21zZ3N0ciAi5Y2P6K6u6ZSZ6K+v77ya5oSP5aSW55qEICclcyciCisKKyM6IGNvbm5lY3QuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBscy1yZWZzIHJlc3BvbnNlOiAlcyIKK21zZ3N0ciAi5peg5pWI55qEIGxzLXJlZnMg5ZON5bqU77yaJXMiCisKKyM6IGNvbm5lY3QuYzo0NDUKK21zZ2lkICJleHBlY3RlZCBmbHVzaCBhZnRlciByZWYgbGlzdGluZyIKK21zZ3N0ciAi5Zyo5byV55So5YiX6KGo5LmL5ZCO5bqU6K+l5pyJ5LiA5LiqIGZsdXNoIOWMhSIKKworIzogY29ubmVjdC5jOjU0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aMgSAnJXMnIOWNj+iuriIKKworIzogY29ubmVjdC5jOjU5NQorbXNnaWQgInVuYWJsZSB0byBzZXQgU09fS0VFUEFMSVZFIG9uIHNvY2tldCIKK21zZ3N0ciAi5peg5rOV5Li6IHNvY2tldCDorr7nva4gU09fS0VFUEFMSVZFIgorCisjOiBjb25uZWN0LmM6NjM1IGNvbm5lY3QuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9va2luZyB1cCAlcyAuLi4gIgorbXNnc3RyICLmn6Xmib4gJXMgLi4uIgorCisjOiBjb25uZWN0LmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIgorbXNnc3RyICLml6Dms5Xmn6Xmib4gJXPvvIjnq6/lj6MgJXPvvInvvIglc++8iSIKKworIy4gVFJBTlNMQVRPUlM6IHRoaXMgaXMgdGhlIGVuZCBvZiAiTG9va2luZyB1cCAlcyAuLi4gIgorIzogY29ubmVjdC5jOjY0MyBjb25uZWN0LmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lLlxuIgorIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCittc2dzdHIgIiIKKyLlrozmiJDjgIJcbiIKKyLov57mjqXliLAgJXPvvIjnq6/lj6MgJXPvvIkuLi4gIgorCisjOiBjb25uZWN0LmM6NjY1IGNvbm5lY3QuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVuYWJsZSB0byBjb25uZWN0IHRvICVzOlxuIgorIiVzIgorbXNnc3RyICIiCisi5peg5rOV6L+e5o6l5YiwICVz77yaXG4iCisiJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGlzIGlzIHRoZSBlbmQgb2YgIkNvbm5lY3RpbmcgdG8gJXMgKHBvcnQgJXMpIC4uLiAiCisjOiBjb25uZWN0LmM6NjcxIGNvbm5lY3QuYzo3NDgKK21zZ2lkICJkb25lLiIKK21zZ3N0ciAi5a6M5oiQ44CCIgorCisjOiBjb25uZWN0LmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwICVzICglcykiCittc2dzdHIgIuaXoOazleafpeaJviAlc++8iCVz77yJIgorCisjOiBjb25uZWN0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcG9ydCAlcyIKK21zZ3N0ciAi5pyq55+l56uv5Y+jICVzIgorCisjOiBjb25uZWN0LmM6ODQ1IGNvbm5lY3QuYzoxMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0cmFuZ2UgaG9zdG5hbWUgJyVzJyBibG9ja2VkIgorbXNnc3RyICLlt7LpmLvmraLlpYfmgKrnmoTkuLvmnLrlkI0gJyVzJyIKKworIzogY29ubmVjdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBvcnQgJyVzJyBibG9ja2VkIgorbXNnc3RyICLlt7LpmLvmraLlpYfmgKrnmoTnq6/lj6Plj7cgJyVzJyIKKworIzogY29ubmVjdC5jOjg1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiCittc2dzdHIgIuS4jeiDveWQr+WKqOS7o+eQhiAlcyIKKworIzogY29ubmVjdC5jOjkyOAorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkOyBzZWUgJ2dpdCBoZWxwIHB1bGwnIGZvciB2YWxpZCB1cmwgc3ludGF4IgorbXNnc3RyICLmnKrmjIflrprot6/lvoTvvIzmiafooYwgJ2dpdCBoZWxwIHB1bGwnIOafpeeci+acieaViOeahCB1cmwg6K+t5rOVIgorCisjOiBjb25uZWN0LmM6MTEyMworbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTQiCittc2dzdHIgInNzaCDlj5jkvZMgJ3NpbXBsZScg5LiN5pSv5oyBIC00IgorCisjOiBjb25uZWN0LmM6MTEzNQorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgLTYiCittc2dzdHIgInNzaCDlj5jkvZMgJ3NpbXBsZScg5LiN5pSv5oyBIC02IgorCisjOiBjb25uZWN0LmM6MTE1MgorbXNnaWQgInNzaCB2YXJpYW50ICdzaW1wbGUnIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBwb3J0IgorbXNnc3RyICJzc2gg5Y+Y5L2TICdzaW1wbGUnIOS4jeaUr+aMgeiuvue9ruerr+WPoyIKKworIzogY29ubmVjdC5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RyYW5nZSBwYXRobmFtZSAnJXMnIGJsb2NrZWQiCittc2dzdHIgIuW3sumYu+atouWlh+aAqueahOi3r+W+hOWQjSAnJXMnIgorCisjOiBjb25uZWN0LmM6MTMxMQorbXNnaWQgInVuYWJsZSB0byBmb3JrIgorbXNnc3RyICLml6Dms5UgZm9yayIKKworIzogY29ubmVjdGVkLmM6ODkgYnVpbHRpbi9mc2NrLmM6MjA4IGJ1aWx0aW4vcHJ1bmUuYzo0MworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l6L+e6YCa5oCnIgorCisjOiBjb25uZWN0ZWQuYzoxMDEKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICLkuI3og73miafooYwgJ2dpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjEyMQorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdCIKK21zZ3N0ciAi5YaZ5YWlIHJldi1saXN0IOWksei0pSIKKworIzogY29ubmVjdGVkLmM6MTI4Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW4iCittc2dzdHIgIuWFs+mXrSByZXYtbGlzdCDnmoTmoIflh4bovpPlhaXlpLHotKUiCisKKyM6IGNvbnZlcnQuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBjcmxmX2FjdGlvbiAlZCIKK21zZ3N0ciAi6Z2e5rOV55qEIGNybGYg5Yqo5L2cICVkIgorCisjOiBjb252ZXJ0LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNSTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMiCittc2dzdHIgIiVzIOS4reeahCBDUkxGIOWwhuiiqyBMRiDmm7/mjaIiCisKKyM6IGNvbnZlcnQuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiJXMg5Lit55qEIENSTEYg5bCG6KKrIExGIOabv+aNouOAgjxcbiIKKyLlnKjlt6XkvZzljLrkuK3or6Xmlofku7bku43kv53mjIHljp/mnInnmoTmjaLooYznrKbjgIIiCisKKyM6IGNvbnZlcnQuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTEYgd291bGQgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcyIKK21zZ3N0ciAi5paH5Lu2ICVzIOS4reeahCBMRiDlsIbooqsgQ1JMRiDmm7/mjaIiCisKKyM6IGNvbnZlcnQuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgQ1JMRiBpbiAlcy5cbiIKKyJUaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiJXMg5Lit55qEIExGIOWwhuiiqyBDUkxGIOabv+aNouOAglxuIgorIuWcqOW3peS9nOWMuuS4reivpeaWh+S7tuS7jeS/neaMgeWOn+acieeahOaNouihjOespiIKKworIzogY29udmVydC5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcHJvaGliaXRlZCBpbiAnJXMnIGlmIGVuY29kZWQgYXMgJXMiCittc2dzdHIgIuWmguaenOS9v+eUqCAlMiRzIOe8luegge+8jOemgeatouWcqCAnJTEkcycg5Lit5L2/55SoIEJPTSIKKworIzogY29udmVydC5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAi5paH5Lu2ICclcycg5YyF5ZCr5LiA5Liq5a2X6IqC6aG65bqP5qCH6K6w77yIQk9N77yJ44CC6K+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+8miVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5OSBwYXJzZS1vcHRpb25zLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiVzIOacn+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+WwkSAlZCDlubblho3mrKHmiafooYzmraTlkb3ku6TjgIIiCisKKyM6IGRpci5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IgorbXNnc3RyICLot6/lvoTop4TmoLwgJyVzJyDmnKrljLnphY3ku7vkvZUgZ2l0IOW3suefpeaWh+S7tiIKKworIzogZGlyLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICLmnKror4bliKvnmoTmqKHlvI/vvJonJXMnIgorCisjOiBkaXIuYzo2ODIgZGlyLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICLmnKror4bliKvnmoTlj43lkJHmqKHlvI/vvJonJXMnIgorCisjOiBkaXIuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBzcGFyc2UtY2hlY2tvdXQgZmlsZSBtYXkgaGF2ZSBpc3N1ZXM6IHBhdHRlcm4gJyVzJyBpcyByZXBlYXRlZCIKK21zZ3N0ciAi5oKo55qEIHNwYXJzZS1jaGVja291dCDmlofku7blj6/og73mnInpl67popjvvJrph43lpI3nmoTmqKHlvI8gJyVzJyIKKworIzogZGlyLmM6NzI0Cittc2dpZCAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKK21zZ3N0ciAi56aB5q2iIGNvbmUg5qih5byP5Yy56YWNIgorCisjOiBkaXIuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIgorbXNnc3RyICLkuI3og73lsIYgJXMg55So5L2c5o6S6Zmk5paH5Lu2IgorCisjOiBkaXIuYzoyMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLkuI3og73miZPlvIDnm67lvZUgJyVzJyIKKworIzogZGlyLmM6MjQxNQorbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICLml6Dms5XojrflvpflhoXmoLjlkI3np7Dlkozkv6Hmga8iCisKKyM6IGRpci5jOjI1MzkKK21zZ2lkICJ1bnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0gb3IgbG9jYXRpb24iCittc2dzdHIgIue8k+WtmOacqui3n+i4quaWh+S7tuWcqOacrOezu+e7n+aIluS9jee9ruS4reiiq+emgeeUqCIKKworIzogZGlyLmM6MzM0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQgaW4gcmVwbyAlcyIKK21zZ3N0ciAi5LuT5bqTICVzIOS4reeahOe0ouW8leaWh+S7tuaNn+WdjyIKKworIzogZGlyLmM6MzM4OCBkaXIuYzozMzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yICVzIgorbXNnc3RyICLkuI3og73kuLogJXMg5Yib5bu655uu5b2VIgorCisjOiBkaXIuYzozNDIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBtaWdyYXRlIGdpdCBkaXJlY3RvcnkgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIuS4jeiDveS7jiAnJXMnIOi/geenuyBnaXQg55uu5b2V5YiwICclcyciCisKKyM6IGVkaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6IFdhaXRpbmcgZm9yIHlvdXIgZWRpdG9yIHRvIGNsb3NlIHRoZSBmaWxlLi4uJWMiCittc2dzdHIgIuaPkOekuu+8muetieW+heaCqOeahOe8lui+keWZqOWFs+mXreaWh+S7ti4uLiVjIgorCisjOiBlbnRyeS5jOjE3OAorbXNnaWQgIkZpbHRlcmluZyBjb250ZW50IgorbXNnc3RyICLov4fmu6TlhoXlrrkiCisKKyM6IGVudHJ5LmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0IGZpbGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95a+55paH5Lu2ICclcycg6LCD55SoIHN0YXQiCisKKyM6IGVudmlyb25tZW50LmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaXQgbmFtZXNwYWNlIHBhdGggXCIlc1wiIgorbXNnc3RyICLplJnor6/nmoQgZ2l0IOWQjeWtl+epuumXtOi3r+W+hCBcIiVzXCIiCisKKyM6IGVudmlyb25tZW50LmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgR0lUX0RJUiB0byAnJXMnIgorbXNnc3RyICLkuI3og73orr7nva4gR0lUX0RJUiDkuLogJyVzJyIKKworIzogZXhlYy1jbWQuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgYXJncyB0byBydW4gJXMiCittc2dzdHIgIuaJp+ihjCAlcyDnmoTlj4LmlbDlpKrlpJoiCisKKyM6IGZldGNoLXBhY2suYzoxNTAKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0IgorbXNnc3RyICJnaXQgZmV0Y2gtcGFja++8muW6lOS4uiBzaGFsbG93IOWIl+ihqCIKKworIzogZmV0Y2gtcGFjay5jOjE1MworbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBhIGZsdXNoIHBhY2tldCBhZnRlciBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNr77ya5Zyo5rWF5YWL6ZqG5YiX6KGo5LmL5ZCO5pyf5pyb5LiA5LiqIGZsdXNoIOWMhSIKKworIzogZmV0Y2gtcGFjay5jOjE2NAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBmZXRjaC1wYWNr77ya5pyf5pybIEFDSy9OQUvvvIzljbTlvpfliLAgZmx1c2gg5YyFIgorCisjOiBmZXRjaC1wYWNrLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgJyVzJyIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2vvvJrlupTkuLogQUNLL05BS++8jOWNtOW+l+WIsCAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTk1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRvIHJlbW90ZSIKK21zZ3N0ciAi5peg5rOV5YaZ5Yiw6L+c56iLIgorCisjOiBmZXRjaC1wYWNrLmM6MjU3Cittc2dpZCAiLS1zdGF0ZWxlc3MtcnBjIHJlcXVpcmVzIG11bHRpX2Fja19kZXRhaWxlZCIKK21zZ3N0ciAiLS1zdGF0ZWxlc3MtcnBjIOmcgOimgSBtdWx0aV9hY2tfZGV0YWlsZWQiCisKKyM6IGZldGNoLXBhY2suYzozNTYgZmV0Y2gtcGFjay5jOjEzNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICLml6DmlYjnmoQgc2hhbGxvdyDkv6Hmga/vvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM2MiBmZXRjaC1wYWNrLmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVuc2hhbGxvdyBsaW5lOiAlcyIKK21zZ3N0ciAi5peg5pWI55qEIHVuc2hhbGxvdyDkv6Hmga/vvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NCBmZXRjaC1wYWNrLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3Qgbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAi5a+56LGh5pyq5om+5Yiw77yaJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjcgZmV0Y2gtcGFjay5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gb2JqZWN0OiAlcyIKK21zZ3N0ciAi5a+56LGh5Lit5Ye66ZSZ77yaJXMiCisKKyM6IGZldGNoLXBhY2suYzozNjkgZmV0Y2gtcGFjay5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2hhbGxvdyBmb3VuZDogJXMiCittc2dzdHIgIuacquWPkeeOsCBzaGFsbG9377yaJXMiCisKKyM6IGZldGNoLXBhY2suYzozNzIgZmV0Y2gtcGFjay5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgc2hhbGxvdy91bnNoYWxsb3csIGdvdCAlcyIKK21zZ3N0ciAi5bqU5Li6IHNoYWxsb3cvdW5zaGFsbG9377yM5Y205b6X5YiwICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAlZCAlcyIKK21zZ3N0ciAi5b6X5YiwICVzICVkICVzIgorCisjOiBmZXRjaC1wYWNrLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0ICVzIgorbXNnc3RyICLml6DmlYjmj5DkuqQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0NjIKK21zZ2lkICJnaXZpbmcgdXAiCittc2dzdHIgIuaUvuW8gyIKKworIzogZmV0Y2gtcGFjay5jOjQ3NSBwcm9ncmVzcy5jOjMyMworbXNnaWQgImRvbmUiCittc2dzdHIgIuWujOaIkCIKKworIzogZmV0Y2gtcGFjay5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJnb3QgJXMgKCVkKSAlcyIKK21zZ3N0ciAi5b6X5YiwICVzICglZCkgJXMiCisKKyM6IGZldGNoLXBhY2suYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZSIKK21zZ3N0ciAi5qCH6K6wICVzIOS4uuWujOaIkCIKKworIzogZmV0Y2gtcGFjay5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJhbHJlYWR5IGhhdmUgJXMgKCVzKSIKK21zZ3N0ciAi5bey57uP5pyJICVz77yIJXPvvIkiCisKKyM6IGZldGNoLXBhY2suYzo4MTgKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAiZmV0Y2gtcGFja++8muaXoOazlea0vueUnyBzaWRlYmFuZCDlpJrot6/ovpPlh7oiCisKKyM6IGZldGNoLXBhY2suYzo4MjYKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIHBhY2sgaGVhZGVyIgorbXNnc3RyICLljY/orq7plJnor6/vvJrlnY/nmoTljIXlpLQiCisKKyM6IGZldGNoLXBhY2suYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIgorbXNnc3RyICJmZXRjaC1wYWNr77ya5peg5rOV5rS+55Sf6L+b56iLICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZhaWxlZCIKK21zZ3N0ciAiJXMg5aSx6LSlIgorCisjOiBmZXRjaC1wYWNrLmM6OTE4Cittc2dpZCAiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIKK21zZ3N0ciAic2lkZWJhbmQg5aSa6Lev6L6T5Ye65Ye66ZSZIgorCisjOiBmZXRjaC1wYWNrLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnMiCittc2dzdHIgIuacjeWKoeWZqOeJiOacrCAlLipzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcwIGZldGNoLXBhY2suYzo5NzYgZmV0Y2gtcGFjay5jOjk3OSBmZXRjaC1wYWNrLmM6OTg1CisjOiBmZXRjaC1wYWNrLmM6OTg5IGZldGNoLXBhY2suYzo5OTMgZmV0Y2gtcGFjay5jOjk5NyBmZXRjaC1wYWNrLmM6MTAwMQorIzogZmV0Y2gtcGFjay5jOjEwMDUgZmV0Y2gtcGFjay5jOjEwMDkgZmV0Y2gtcGFjay5jOjEwMTMgZmV0Y2gtcGFjay5jOjEwMTcKKyM6IGZldGNoLXBhY2suYzoxMDIzIGZldGNoLXBhY2suYzoxMDI5IGZldGNoLXBhY2suYzoxMDM0IGZldGNoLXBhY2suYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyAlcyIKK21zZ3N0ciAi5pyN5Yqh5Zmo5pSv5oyBICVzIgorCisjOiBmZXRjaC1wYWNrLmM6OTcyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIgorbXNnc3RyICLmnI3liqHlmajkuI3mlK/mjIEgc2hhbGxsb3cg5a6i5oi356uvIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzMgorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1zaW5jZSIKK21zZ3N0ciAi5pyN5Yqh5Zmo5LiN5pSv5oyBIC0tc2hhbGxvdy1zaW5jZSIKKworIzogZmV0Y2gtcGFjay5jOjEwMzcKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLXNoYWxsb3ctZXhjbHVkZSIKK21zZ3N0ciAi5pyN5Yqh5Zmo5LiN5pSv5oyBIC0tc2hhbGxvdy1leGNsdWRlIgorCisjOiBmZXRjaC1wYWNrLmM6MTA0MQorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIgorbXNnc3RyICLmnI3liqHlmajkuI3mlK/mjIEgLS1kZWVwZW4iCisKKyM6IGZldGNoLXBhY2suYzoxMDU4Cittc2dpZCAibm8gY29tbW9uIGNvbW1pdHMiCittc2dzdHIgIuayoeacieWFseWQjOeahOaPkOS6pCIKKworIzogZmV0Y2gtcGFjay5jOjEwNzAgZmV0Y2gtcGFjay5jOjE1MzYKK21zZ2lkICJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2vvvJrojrflj5blpLHotKXjgIIiCisKKyM6IGZldGNoLXBhY2suYzoxMjA5Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXF1ZXN0cyIKK21zZ3N0ciAi5pyN5Yqh5Zmo5LiN5pSv5oyBIHNoYWxsbG93IOivt+axgiIKKworIzogZmV0Y2gtcGFjay5jOjEyMTYKK21zZ2lkICJTZXJ2ZXIgc3VwcG9ydHMgZmlsdGVyIgorbXNnc3RyICLmnI3liqHlmajmlK/mjIEgZmlsdGVyIgorCisjOiBmZXRjaC1wYWNrLmM6MTIzOQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSByZXF1ZXN0IHRvIHJlbW90ZSIKK21zZ3N0ciAi5peg5rOV5bCG6K+35rGC5YaZ5Yiw6L+c56iLIgorCisjOiBmZXRjaC1wYWNrLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIHNlY3Rpb24gaGVhZGVyICclcyciCittc2dzdHIgIuivu+WPluiKguagh+mimCAnJXMnIOWHuumUmSIKKworIzogZmV0Y2gtcGFjay5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgJyVzJywgcmVjZWl2ZWQgJyVzJyIKK21zZ3N0ciAi6aKE5pyfICclcyfvvIzlvpfliLAgJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBhY2tub3dsZWRnbWVudCBsaW5lOiAnJXMnIgorbXNnc3RyICLmhI/lpJbnmoTnoa7orqTooYzvvJonJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGFja3M6ICVkIgorbXNnc3RyICLlpITnkIYgYWNrIOWHuumUme+8miVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTMxOAorbXNnaWQgImV4cGVjdGVkIHBhY2tmaWxlIHRvIGJlIHNlbnQgYWZ0ZXIgJ3JlYWR5JyIKK21zZ3N0ciAi6aKE5pyf5ZyoICdyZWFkeScg5LmL5ZCO5Y+R6YCBIHBhY2tmaWxlIgorCisjOiBmZXRjaC1wYWNrLmM6MTMyMAorbXNnaWQgImV4cGVjdGVkIG5vIG90aGVyIHNlY3Rpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgbm8gJ3JlYWR5JyIKK21zZ3N0ciAi5Zyo5rKh5pyJICdyZWFkeScg5LiN5bqU6K+l5Y+R6YCB5YW25a6D5bCP6IqCIgorCisjOiBmZXRjaC1wYWNrLmM6MTM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIHNoYWxsb3cgaW5mbzogJWQiCittc2dzdHIgIuWkhOeQhua1heWFi+mahuS/oeaBr+WHuumUme+8miVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCB3YW50ZWQtcmVmLCBnb3QgJyVzJyIKK21zZ3N0ciAi6aKE5pyfIHdhbnRlZC1yZWbvvIzlvpfliLAgJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCB3YW50ZWQtcmVmOiAnJXMnIgorbXNnc3RyICLmhI/lpJbnmoQgd2FudGVkLXJlZu+8miclcyciCisKKyM6IGZldGNoLXBhY2suYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgd2FudGVkIHJlZnM6ICVkIgorbXNnc3RyICLlpITnkIbopoHojrflj5bnmoTlvJXnlKjlh7rplJnvvJolZCIKKworIzogZmV0Y2gtcGFjay5jOjE3NjIKK21zZ2lkICJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIKK21zZ3N0ciAi5rKh5pyJ5Yy56YWN55qE6L+c56iL5YiG5pSvIgorCisjOiBmZXRjaC1wYWNrLmM6MTc4NSBidWlsdGluL2Nsb25lLmM6Njg4Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgIui/nOeoi+ayoeacieWPkemAgeaJgOacieW/hemcgOeahOWvueixoSIKKworIzogZmV0Y2gtcGFjay5jOjE4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZW1vdGUgcmVmICVzIgorbXNnc3RyICLmsqHmnInov5nmoLfnmoTov5znqIvlvJXnlKggJXMiCisKKyM6IGZldGNoLXBhY2suYzoxODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0ICVzIgorbXNnc3RyICLmnI3liqHlmajkuI3lhYHorrjor7fmsYLmnKrlhazlvIDnmoTlr7nosaEgJXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjMKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLkuI3og73liJvlu7rkuLTml7bmlofku7YiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciCittc2dzdHIgIuaXoOazleWwhuWIhuemu+W8j+etvuWQjeWGmeWFpSAnJXMnIgorCisjOiBncGctaW50ZXJmYWNlLmM6MzkwCittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcg5peg5rOV5Li65pWw5o2u562+5ZCNIgorCisjOiBncmFwaC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yZSBpbnZhbGlkIGNvbG9yICclLipzJyBpbiBsb2cuZ3JhcGhDb2xvcnMiCittc2dzdHIgIuW/veeVpSBsb2cuZ3JhcGhDb2xvcnMg5Lit5peg5pWI55qE6aKc6ImyICclLipzJyIKKworIzogZ3JlcC5jOjY2OAorbXNnaWQgIiIKKyJnaXZlbiBwYXR0ZXJuIGNvbnRhaW5zIE5VTEwgYnl0ZSAodmlhIC1mIDxmaWxlPikuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgIgorIndpdGggLVAgdW5kZXIgUENSRSB2MiIKK21zZ3N0ciAiIgorIue7meWumueahOaooeW8j+WMheWQqyBOVUxMIOWtl+espu+8iOmAmui/hyAtZiA85paH5Lu2PiDlj4LmlbDvvInjgILlj6rmnIkgUENSRSB2MiDkuIvnmoQgLVAg5pSv5oyB5q2kIgorIuWKn+iDvSIKKworIzogZ3JlcC5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiclcyfvvJrml6Dms5Xor7vlj5YgJXMiCisKKyM6IGdyZXAuYzoyMTQxIHNldHVwLmM6MTY1IGJ1aWx0aW4vY2xvbmUuYzo0MTEgYnVpbHRpbi9kaWZmLmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAi5a+5ICclcycg6LCD55SoIHN0YXQg5aSx6LSlIgorCisjOiBncmVwLmM6MjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkIgorbXNnc3RyICInJXMn77ya6K+75Y+W5LiN5a6M5pW0IgorCisjOiBoZWxwLmM6MjMKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAi5byA5aeL5LiA5Liq5bel5L2c5Yy677yI5Y+C6KeB77yaZ2l0IGhlbHAgdHV0b3JpYWzvvIkiCisKKyM6IGhlbHAuYzoyNAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICLlnKjlvZPliY3lj5jmm7TkuIrlt6XkvZzvvIjlj4Lop4HvvJpnaXQgaGVscCBldmVyeWRhee+8iSIKKworIzogaGVscC5jOjI1Cittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICLmo4Dmn6Xljoblj7LlkoznirbmgIHvvIjlj4Lop4HvvJpnaXQgaGVscCByZXZpc2lvbnPvvIkiCisKKyM6IGhlbHAuYzoyNgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgIuaJqeWxleOAgeagh+iusOWSjOiwg+agoeaCqOeahOWOhuWPsuiusOW9lSIKKworIzogaGVscC5jOjI3Cittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICLljY/lkIzvvIjlj4Lop4HvvJpnaXQgaGVscCB3b3JrZmxvd3PvvIkiCisKKyM6IGhlbHAuYzozMQorbXNnaWQgIk1haW4gUG9yY2VsYWluIENvbW1hbmRzIgorbXNnc3RyICLkuLvopoHnmoTkuIrlsYLlkb3ku6QiCisKKyM6IGhlbHAuYzozMgorbXNnaWQgIkFuY2lsbGFyeSBDb21tYW5kcyAvIE1hbmlwdWxhdG9ycyIKK21zZ3N0ciAi6L6F5Yqp5ZG95LukL+aTjeS9nOiAhSIKKworIzogaGVscC5jOjMzCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gSW50ZXJyb2dhdG9ycyIKK21zZ3N0ciAi6L6F5Yqp5ZG95LukL+ivoumXruiAhSIKKworIzogaGVscC5jOjM0Cittc2dpZCAiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiCittc2dzdHIgIuS4juWFtuWug+ezu+e7n+S6pOS6kiIKKworIzogaGVscC5jOjM1Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICLkvY7nuqflkb3ku6Qv5pON5L2c6ICFIgorCisjOiBoZWxwLmM6MzYKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICLkvY7nuqflkb3ku6Qv6K+i6Zeu6ICFIgorCisjOiBoZWxwLmM6MzcKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAi5L2O57qn5ZG95LukL+WQjOatpeS7k+W6kyIKKworIzogaGVscC5jOjM4Cittc2dpZCAiTG93LWxldmVsIENvbW1hbmRzIC8gSW50ZXJuYWwgSGVscGVycyIKK21zZ3N0ciAi5L2O57qn5ZG95LukL+WGhemDqOWKqeaJiyIKKworIzogaGVscC5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgIuWcqCAnJXMnIOS4i+WPr+eUqOeahCBnaXQg5ZG95LukIgorCisjOiBoZWxwLmM6MzA1Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICLlnKggJFBBVEgg6Lev5b6E5Lit55qE5YW25LuW5Zyw5pa55Y+v55So55qEIGdpdCDlkb3ku6QiCisKKyM6IGhlbHAuYzozMTQKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIui/meS6m+aYr+WQhOenjeWcuuWQiOW4uOingeeahCBHaXQg5ZG95Luk77yaIgorCisjOiBoZWxwLmM6MzYzIGdpdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGNvbW1hbmQgbGlzdGluZyB0eXBlICclcyciCittc2dzdHIgIuS4jeaUr+aMgeeahOWRveS7pOWIl+ihqOexu+WeiyAnJXMnIgorCisjOiBoZWxwLmM6NDAzCittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZToiCittc2dzdHIgIuacgOW4uOeUqOeahCBHaXQg5ZCR5a+85pyJ77yaIgorCisjOiBoZWxwLmM6NTEyCittc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIHRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIgorbXNnc3RyICLmiafooYzjgIAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyDmnaXmn6XnnIvnibnlrprlrZDlkb3ku6QiCisKKyM6IGhlbHAuYzo1MTcKK21zZ2lkICJFeHRlcm5hbCBjb21tYW5kcyIKK21zZ3N0ciAi5aSW6YOo5ZG95LukIgorCisjOiBoZWxwLmM6NTMyCittc2dpZCAiQ29tbWFuZCBhbGlhc2VzIgorbXNnc3RyICLlkb3ku6TliKvlkI0iCisKKyM6IGhlbHAuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiJyVzJyDlg4/mmK/kuIDkuKogZ2l0IOWRveS7pO+8jOS9huWNtOaXoOazlei/kOihjOOAglxuIgorIuWPr+iDveaYryBnaXQtJXMg5Y+X5o2f77yfIgorCisjOiBoZWxwLmM6NjU1Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIuWUieWRgO+8jOaCqOeahOezu+e7n+S4reacquWPkeeOsCBHaXQg5ZG95Luk44CCIgorCisjOiBoZWxwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIuitpuWRiu+8muaCqOi/kOihjOS6huS4gOS4quW5tuS4jeWtmOWcqOeahCBHaXQg5ZG95LukICclcyfjgIIiCisKKyM6IGhlbHAuYzo2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAi5YGH5a6a5L2g5oOz6KaB55qE5pivICclcycg5bm257un57ut44CCIgorCisjOiBoZWxwLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRpbnVpbmcgaW4gJTAuMWYgc2Vjb25kcywgYXNzdW1pbmcgdGhhdCB5b3UgbWVhbnQgJyVzJy4iCittc2dzdHIgIuWBh+WumuS9oOaDs+imgeeahOaYryAnJTIkcyfvvIzlnKggJTEkMC4xZiDnp5Lpkp/lkI7nu6fnu63jgIIiCisKKyM6IGhlbHAuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l077yaJyVzJyDkuI3mmK/kuIDkuKogZ2l0IOWRveS7pOOAguWPguingSAnZ2l0IC0taGVscCfjgIIiCisKKyM6IGhlbHAuYzo2OTkKK21zZ2lkICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kIGlzIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiVGhlIG1vc3Qgc2ltaWxhciBjb21tYW5kcyBhcmUiCittc2dzdHJbMF0gIiIKKyJcbiIKKyLmnIDnm7jkvLznmoTlkb3ku6TmmK8iCittc2dzdHJbMV0gIiIKKyJcbiIKKyLmnIDnm7jkvLznmoTlkb3ku6TmmK8iCisKKyM6IGhlbHAuYzo3MTQKK21zZ2lkICJnaXQgdmVyc2lvbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHZlcnNpb24gWzzpgInpobk+XSIKKworIzogaGVscC5jOjc4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXPvvJolcyAtICVzIgorCisjOiBoZWxwLmM6Nzg3Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisi5oKo5oyH55qE5piv6L+Z5Liq5LmI77yfIgorbXNnc3RyWzFdICIiCisiXG4iCisi5oKo5oyH55qE5piv6L+Z5YW25Lit55qE5p+Q5LiA5Liq5LmI77yfIgorCisjOiBpZGVudC5jOjM0OQorbXNnaWQgIiIKKyJcbiIKKyIqKiogUGxlYXNlIHRlbGwgbWUgd2hvIHlvdSBhcmUuXG4iCisiXG4iCisiUnVuXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJ5b3VAZXhhbXBsZS5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIlxuIgorInRvIHNldCB5b3VyIGFjY291bnQncyBkZWZhdWx0IGlkZW50aXR5LlxuIgorIk9taXQgLS1nbG9iYWwgdG8gc2V0IHRoZSBpZGVudGl0eSBvbmx5IGluIHRoaXMgcmVwb3NpdG9yeS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiDor7flkYror4nmiJHkvaDmmK/osIHjgIJcbiIKKyJcbiIKKyLov5DooYxcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisi5p2l6K6+572u5oKo6LSm5Y+355qE57y655yB6Lqr5Lu95qCH6K+G44CCXG4iCisi5aaC5p6c5LuF5Zyo5pys5LuT5bqT6K6+572u6Lqr5Lu95qCH6K+G77yM5YiZ55yB55WlIC0tZ2xvYmFsIOWPguaVsOOAglxuIgorCisjOiBpZGVudC5jOjM3OQorbXNnaWQgIm5vIGVtYWlsIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIuacquaPkOS+m+mCruS7tuWcsOWdgOS4lOiHquWKqOaOoua1i+iiq+emgeeUqCIKKworIzogaWRlbnQuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IGVtYWlsIGFkZHJlc3MgKGdvdCAnJXMnKSIKK21zZ3N0ciAi5peg5rOV6Ieq5Yqo5o6i5rWL6YKu5Lu25Zyw5Z2A77yI5b6X5YiwICclcyfvvIkiCisKKyM6IGlkZW50LmM6NDAxCittc2dpZCAibm8gbmFtZSB3YXMgZ2l2ZW4gYW5kIGF1dG8tZGV0ZWN0aW9uIGlzIGRpc2FibGVkIgorbXNnc3RyICLmnKrmj5Dkvpvlp5PlkI3kuJToh6rliqjmjqLmtYvooqvnpoHnlKgiCisKKyM6IGlkZW50LmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhdXRvLWRldGVjdCBuYW1lIChnb3QgJyVzJykiCittc2dzdHIgIuaXoOazleiHquWKqOaOoua1i+Wnk+WQje+8iOW+l+WIsCAnJXMn77yJIgorCisjOiBpZGVudC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBpZGVudCBuYW1lIChmb3IgPCVzPikgbm90IGFsbG93ZWQiCittc2dzdHIgIuS4jeWFgeiuuOepuueahOWnk+WQje+8iOWvueS6jiA8JXM+77yJIgorCisjOiBpZGVudC5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lIGNvbnNpc3RzIG9ubHkgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzOiAlcyIKK21zZ3N0ciAi5aeT5ZCN5Lit5LuF5YyF5ZCr56aB55So5a2X56ym77yaJXMiCisKKyM6IGlkZW50LmM6NDM2IGJ1aWx0aW4vY29tbWl0LmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLml6DmlYjnmoTml6XmnJ/moLzlvI/vvJolcyIKKworIzogbGlzdC1vYmplY3RzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgdHJlZSBtb2RlLCBidXQgaXMgbm90IGEgdHJlZSIKK21zZ3N0ciAi5qCRICUyJHMg5Lit55qE5p2h55uuICclMSRzJyDlhbfmnInmoJHnmoTlsZ7mgKfvvIzkvYbkuI3mmK/kuIDkuKrmoJHlr7nosaEiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJlbnRyeSAnJXMnIGluIHRyZWUgJXMgaGFzIGJsb2IgbW9kZSwgYnV0IGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIuagkSAlMiRzIOS4reeahOadoeebriAnJTEkcycg5YW35pyJ5pWw5o2u5a+56LGh55qE5bGe5oCn77yM5L2G5LiN5piv5LiA5Liq5pWw5o2u5a+56LGhIgorCisjOiBsaXN0LW9iamVjdHMuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvYWQgcm9vdCB0cmVlIGZvciBjb21taXQgJXMiCittc2dzdHIgIuaXoOazleS4uuaPkOS6pCAlcyDliqDovb3moLnmoJEiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBzcGFyc2UgYmxvYiBpbiAnJXMnIgorbXNnc3RyICLkuI3og73orr/pl64gJyVzJyDkuK3nmoTnqIDnlo/mlbDmja7lr7nosaEiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXIuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiAlcyIKK21zZ3N0ciAi5peg5rOV6Kej5p6QICVzIOS4reeahOeogOeWj+i/h+a7pOWZqOaVsOaNriIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NTgKK21zZ2lkICJleHBlY3RlZCAndHJlZTo8ZGVwdGg+JyIKK21zZ3N0ciAi5pyf5pybICd0cmVlOjzmt7HluqY+JyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6NzMKK21zZ2lkICJzcGFyc2U6cGF0aCBmaWx0ZXJzIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCIKK21zZ3N0ciAic3BhcnNlOnBhdGgg6L+H5ruk5Zmo5pSv5oyB5bey6KKr5Yig6ZmkIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGZpbHRlci1zcGVjICclcyciCittc2dzdHIgIuaXoOaViOeahOi/h+a7pOWZqOihqOi+vuW8jyAnJXMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVzdCBlc2NhcGUgY2hhciBpbiBzdWItZmlsdGVyLXNwZWM6ICclYyciCittc2dzdHIgIuW/hemhu+WvuSBzdWItZmlsdGVyLXNwZWMg5Lit55qE5a2X56ym6L+b6KGM6L2s5LmJ77yaJyVjJyIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MTQ0Cittc2dpZCAiZXhwZWN0ZWQgc29tZXRoaW5nIGFmdGVyIGNvbWJpbmU6IgorbXNnc3RyICLmnJ/mnJvlnKjnu4TlkIjlkI7mnInkuIDkupvkuJzopb/vvJoiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjIyNgorbXNnaWQgIm11bHRpcGxlIGZpbHRlci1zcGVjcyBjYW5ub3QgYmUgY29tYmluZWQiCittc2dzdHIgIuS4jeiDvea3t+eUqOWkmuenjei/h+a7pOinhOagvCIKKworIzogbG9ja2ZpbGUuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcy5cbiIKKyJcbiIKKyJBbm90aGVyIGdpdCBwcm9jZXNzIHNlZW1zIHRvIGJlIHJ1bm5pbmcgaW4gdGhpcyByZXBvc2l0b3J5LCBlLmcuXG4iCisiYW4gZWRpdG9yIG9wZW5lZCBieSAnZ2l0IGNvbW1pdCcuIFBsZWFzZSBtYWtlIHN1cmUgYWxsIHByb2Nlc3Nlc1xuIgorImFyZSB0ZXJtaW5hdGVkIHRoZW4gdHJ5IGFnYWluLiBJZiBpdCBzdGlsbCBmYWlscywgYSBnaXQgcHJvY2Vzc1xuIgorIm1heSBoYXZlIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXI6XG4iCisicmVtb3ZlIHRoZSBmaWxlIG1hbnVhbGx5IHRvIGNvbnRpbnVlLiIKK21zZ3N0ciAiIgorIuaXoOazleWIm+W7uiAnJXMubG9jayfvvJolc+OAglxuIgorIlxuIgorIuS8vOS5juWPpuWkluS4gOS4qiBnaXQg6L+b56iL5Zyo6L+Z5Liq5LuT5bqT5Lit6L+Q6KGM77yM5L6L5aaC77yaJ2dpdCBjb21taXQnIOWRveS7pOaJk1xuIgorIuW8gOS6huS4gOS4que8lui+keWZqOOAguivt+ehruiupOaJgOaciei/m+eoi+mDveW3sue7j+WFs+mXreeEtuWQjumHjeivleOAguWmguaenOS7jeeEtuaKpemUme+8jFxuIgorIuWPr+iDveS5i+WJjeacieS4gOS4qiBnaXQg6L+b56iL5Zyo6L+Z5Liq5LuT5bqT5Lit5byC5bi46YCA5Ye677yaXG4iCisi5omL5Yqo5Yig6Zmk6L+Z5Liq5paH5Lu25YaN57un57ut44CCIgorCisjOiBsb2NrZmlsZS5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uiAnJXMubG9jayfvvJolcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAi6K+75Y+W57yT5a2Y5aSx6LSlIgorCisjOiBtZXJnZS5jOjEwNyByZXJlcmUuYzo3MjAgYnVpbHRpbi9hbS5jOjE4NzQgYnVpbHRpbi9hbS5jOjE5MDgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MzkgYnVpbHRpbi9jaGVja291dC5jOjc5OCBidWlsdGluL2Nsb25lLmM6ODA5CisjOiBidWlsdGluL3N0YXNoLmM6MjY0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnmlrDnmoTntKLlvJXmlofku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM2NworbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICLvvIjlnY/mj5DkuqTvvIlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkX2NhY2hlaW5mbyDlr7not6/lvoQgJyVzJyDmiafooYzlpLHotKXvvIzlkIjlubbnu4jmraLjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRfY2FjaGVpbmZvIGZhaWxlZCB0byByZWZyZXNoIGZvciBwYXRoICclcyc7IG1lcmdlIGFib3J0aW5nLiIKK21zZ3N0ciAiYWRkX2NhY2hlaW5mbyDml6Dms5XliLfmlrDot6/lvoQgJyVzJ++8jOWQiOW5tue7iOatouOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgIuWIm+W7uui3r+W+hCAnJXMnJXMg5aSx6LSlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAi5Yig6ZmkICVzIOS7peS+v+S4uuWtkOebruW9leeVmeWHuuepuumXtFxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MTAgbWVyZ2UtcmVjdXJzaXZlLmM6OTI5Cittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAi77ya5Y+v6IO95piv5LiA5Liq55uu5b2VL+aWh+S7tuWGsueqge+8nyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAi5ouS57ud5Lii5byDICclcycg5Lit55qE5pyq6Lef6Liq5paH5Lu2IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjAgYnVpbHRpbi9jYXQtZmlsZS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5blr7nosaEgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgIiVzICclcycg5bqU5Li65pWw5o2u5a+56LGhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJzogJXMiCittc2dzdHIgIuaJk+W8gCAnJXMnIOWksei0pe+8miVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyc6ICVzIgorbXNnc3RyICLliJvlu7rnrKblj7fpk77mjqUgJyVzJyDlpLHotKXvvJolcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAwNgorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICLkuI3nn6XpgZPlpoLkvZXlpITnkIYgJTA2byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG5vdCBjaGVja2VkIG91dCkiCittc2dzdHIgIuaXoOazleWQiOW5tuWtkOaooee7hCAlcyDvvIjmsqHmnInmo4Dlh7rvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAoY29tbWl0cyBub3QgcHJlc2VudCkiCittc2dzdHIgIuaXoOazleWQiOW5tuWtkOaooee7hCAlc++8iOaPkOS6pOS4jeWtmOWcqO+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIGRvbid0IGZvbGxvdyBtZXJnZS1iYXNlKSIKK21zZ3N0ciAi5peg5rOV5ZCI5bm25a2Q5qih57uEICVzIO+8iOaPkOS6pOacqui3n+maj+WQiOW5tuWfuue6v++8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyMSBtZXJnZS1yZWN1cnNpdmUuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGluZyBzdWJtb2R1bGUgJXMgdG8gdGhlIGZvbGxvd2luZyBjb21taXQ6IgorbXNnc3RyICLlrZDmqKHnu4QgJXMg5b+r6L+b5Yiw5aaC5LiL5o+Q5Lqk77yaIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI0IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5b+r6L+b5a2Q5qih57uEICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG1lcmdlIGZvbGxvd2luZyBjb21taXRzIG5vdCBmb3VuZCkiCittc2dzdHIgIuaXoOazleWQiOW5tuWtkOaooee7hCAlcyDvvIjmsqHlj5HnjrDlkIjlubbot5/pmo/nmoTmj5DkuqTvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGZhc3QtZm9yd2FyZCkiCittc2dzdHIgIuaXoOazleWQiOW5tuWtkOaooee7hCAlc++8iOmdnuW/q+i/m++8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2NAorbXNnaWQgIkZvdW5kIGEgcG9zc2libGUgbWVyZ2UgcmVzb2x1dGlvbiBmb3IgdGhlIHN1Ym1vZHVsZTpcbiIKK21zZ3N0ciAi5om+5Yiw5a2Q5qih57uE55qE5LiA5Liq5Y+v6IO955qE5ZCI5bm25pa55qGI77yaXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHRoaXMgaXMgY29ycmVjdCBzaW1wbHkgYWRkIGl0IHRvIHRoZSBpbmRleCBmb3IgZXhhbXBsZVxuIgorImJ5IHVzaW5nOlxuIgorIlxuIgorIiAgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJXMgXCIlc1wiXG4iCisiXG4iCisid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIgorbXNnc3RyICIiCisi5aaC5p6c6L+Z5Liq5q2j56Gu77yM5bCG5YW25re75Yqg5Yiw57Si5byV77yM5L6L5aaC5L2/55So5ZG95Luk77yaXG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyLku6XmjqXlj5fmraTlu7rorq7jgIJcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChtdWx0aXBsZSBtZXJnZXMgZm91bmQpIgorbXNnc3RyICLml6Dms5XlkIjlubblrZDmqKHnu4QgJXMg77yI5Y+R546w5aSa5Liq5ZCI5bm277yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzQ5Cittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIuaXoOazleaJp+ihjOWGhemDqOWQiOW5tiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICLkuI3og73mt7vliqAgJXMg6Iez5a+56LGh5bqTIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAi6Ieq5Yqo5ZCI5bm2ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyB3cml0aW5nIHRvICVzIGluc3RlYWQuIgorbXNnc3RyICLplJnor6/vvJrmi5Lnu53kuKLlpLHmnKrot5/ouKrmlofku7YgJyVzJ++8jOiAjOaYr+WGmeWFpSAlc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisi5Yay56qB77yIJTEkcy/liKDpmaTvvInvvJolMiRzIOWcqCAlMyRzIOS4reiiq+WIoOmZpO+8jOWcqCAlNSRzIOS4reiiqyAlNCRz44CCJTckcyDnmoQgJTYkcyDniYgiCisi5pys6KKr5L+d55WZ44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZS4iCittc2dzdHIgIiIKKyLlhrLnqoHvvIglMSRzL+WIoOmZpO+8ie+8miUyJHMg5ZyoICUzJHMg5Lit6KKr5Yig6Zmk77yM5ZyoICU2JHMg5Lit55qEICU1JHMg6KKrICU0JHPjgIIlOCRzIOeahCAiCisiJTckcyDniYjmnKzooqvkv53nlZnjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIuWGsueqge+8iCUxJHMv5Yig6Zmk77yJ77yaJTIkcyDlnKggJTMkcyDkuK3ooqvliKDpmaTvvIzlnKggJTUkcyDkuK3ooqsgJTQkc+OAgiU3JHMg55qEICU2JHMg54mIIgorIuacrOS/neeVmeWcqCAlOCRzIOS4reOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIHRvICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzICIKKyJsZWZ0IGluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisi5Yay56qB77yIJTEkcy/liKDpmaTvvInvvJolMiRzIOWcqCAlMyRzIOS4reiiq+WIoOmZpO+8jOWcqCAlNiRzIOS4reeahCAlNSRzIOiiqyAlNCRz44CCJTgkcyDnmoQgIgorIiU3JHMg54mI5pys5L+d55WZ5ZyoICU5JHMg5Lit44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTM0Cittc2dpZCAicmVuYW1lIgorbXNnc3RyICLph43lkb3lkI0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLph43lkb3lkI0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MTQgbWVyZ2UtcmVjdXJzaXZlLmM6MjUzMCBtZXJnZS1yZWN1cnNpdmUuYzozMTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCAlcyIKK21zZ3N0ciAi5ouS57ud5Lii5aSx6ISP5paH5Lu2ICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlcywgZXZlbiB0aG91Z2ggaXQncyBpbiB0aGUgd2F5LiIKK21zZ3N0ciAi5ouS57ud5ZyoICclcycg5aSE5aSx5Y675pyq6Lef6Liq5paH5Lu277yM5Y2z5L2/5a6D5a2Y5Zyo5LqO6YeN5ZG95ZCN5Lit44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIEFkZGVkICVzIGluICVzIgorbXNnc3RyICLlhrLnqoHvvIjph43lkb3lkI0v5re75Yqg77yJ77ya5ZyoICUzJHMg5Lit6YeN5ZG95ZCNICUxJHMtPiUyJHPjgILlnKggJTUkcyDkuK3mt7vliqAgJTQkcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMg5pivICVzIOS4reeahOS4gOS4quebruW9leiAjOS7pSAlcyDkuLrlkI3ooqvmt7vliqAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAlczsgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIuaLkue7neS4ouWkseacqui3n+i4quaWh+S7tiAnJXMn77yM6ICM5piv5re75Yqg5Li6ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyLlhrLnqoHvvIjph43lkb3lkI0v6YeN5ZG95ZCN77yJ77ya5Zyo5YiG5pSvIFwiJTMkc1wiIOS4remHjeWRveWQjSBcIiUxJHNcIi0+XCIlMiRzXCLvvIzlnKjliIbmlK8gIgorIlwiJTYkc1wiIOS4remHjeWRveWQjSBcIiU0JHNcIi0+XCIlNSRzXCIlNyRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzQyCittc2dpZCAiIChsZWZ0IHVucmVzb2x2ZWQpIgorbXNnc3RyICLvvIjnlZnkuIvmnKrop6PlhrPvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisi5Yay56qB77yI6YeN5ZG95ZCNL+mHjeWRveWQje+8ie+8muWcqCAlMyRzIOS4remHjeWRveWQjSAlMSRzLT4lMiRz77yM5ZyoICU2JHMg5Lit6YeN5ZG95ZCNICU0JHMtPiIKKyIlNSRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCk6IFVuY2xlYXIgd2hlcmUgdG8gcGxhY2UgJXMgYmVjYXVzZSAiCisiZGlyZWN0b3J5ICVzIHdhcyByZW5hbWVkIHRvIG11bHRpcGxlIG90aGVyIGRpcmVjdG9yaWVzLCB3aXRoIG5vIGRlc3RpbmF0aW9uICIKKyJnZXR0aW5nIGEgbWFqb3JpdHkgb2YgdGhlIGZpbGVzLiIKK21zZ3N0ciAiIgorIuWGsueqge+8iOWIhuWJsueahOebruW9lemHjeWRveWQje+8ie+8muS4jea4healmiAlcyDlupTor6XmlL7lnKjlk6rph4zvvIzlm6DkuLrnm67lvZUgJXMg6KKr6YeN5ZG95ZCN5Yiw5aSa5LiqIgorIuWFtuWug+ebruW9le+8jOayoeacieebruW9leWMheWQq+Wkp+mDqOWIhuaWh+S7tuOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGltcGxpY2l0IGRpciByZW5hbWUpOiBFeGlzdGluZyBmaWxlL2RpciBhdCAlcyBpbiB0aGUgd2F5IG9mICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lKHMpIHB1dHRpbmcgdGhlIGZvbGxvd2luZyBwYXRoKHMpIHRoZXJlOiAlcy4iCittc2dzdHIgIiIKKyLlhrLnqoHvvIjpmpDlvI/nm67lvZXph43lkb3lkI3vvInvvJrlpITkuo7pmpDlvI/nm67lvZXph43lkb3lkI3nmoTnjrDlrZjmlofku7Yv55uu5b2VICVz77yM5bCG5Lul5LiL6Lev5b6E5pS+IgorIuWcqO+8miVz44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IENhbm5vdCBtYXAgbW9yZSB0aGFuIG9uZSBwYXRoIHRvICVzOyAiCisiaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMgdHJpZWQgdG8gcHV0IHRoZXNlIHBhdGhzIHRoZXJlOiAlcyIKK21zZ3N0ciAiIgorIuWGsueqge+8iOmakOW8j+ebruW9lemHjeWRveWQje+8ie+8muaXoOazleaYoOWwhOS4gOS4quS7peS4iui3r+W+hOWIsCAlc++8jOmakOW8j+ebruW9lemHjeWRveWQjeWwneivleWwhui/meS6m+i3ryIKKyLlvoTmlL7nva7kuo7mraTvvJolcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgZGlyZWN0b3J5ICVzLT4lcyBpbiAlcy4gUmVuYW1lIGRpcmVjdG9yeSAlcy0iCisiPiVzIGluICVzIgorbXNnc3RyICIiCisi5Yay56qB77yI6YeN5ZG95ZCNL+mHjeWRveWQje+8ie+8muWcqCAlMyRzIOS4remHjeWRveWQjeebruW9lSAlMSRzLT4lMiRz77yM5ZyoICU2JHMg5Lit6YeN5ZG95ZCN55uu5b2VICIKKyIlNCRzLT4lNSRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyAlcyAtPiAlcyByZW5hbWUgdG8gJXMsIGJlY2F1c2UgJXMgaXRzZWxmIHdhcyAiCisicmVuYW1lZC4iCittc2dzdHIgIuitpuWRiu+8mumBv+WFjeW6lOeUqCAlcyAtPiAlcyDnmoTph43lkb3lkI3liLAgJXPvvIzlm6DkuLogJXMg5pys6Lqr5bey6KKr6YeN5ZG95ZCN44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICLlr7nosaEgJXMg5LiN5piv5LiA5Liq5pWw5o2u5a+56LGhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDg2Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICLkv67mlLkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAi5L+u5pS5IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMDk4Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAi5YaF5a65IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTAyCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAi5re75YqgL+a3u+WKoCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIueVpei/hyAlc++8iOW3sue7j+WBmui/h+ebuOWQjOWQiOW5tu+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE0NyBnaXQtc3VibW9kdWxlLnNoOjk5MworbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAi5a2Q5qih57uEIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICLlhrLnqoHvvIglc++8ie+8muWQiOW5tuWGsueqgeS6jiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAi6ICM5piv5LulICVzIOS4uuWQjea3u+WKoCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAlczsgIgorIm1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyLot6/lvoTlt7Lmm7TmlrDvvJolcyDmt7vliqDliLAgJXPvvIzkvY3kuo7kuIDkuKrooqvph43lkb3lkI3liLAgJXMg55qE55uu5b2V5Lit77yM5bCG5YW256e75Yqo5YiwICVz44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkICIKKyJpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyLlhrLnqoHvvIjmlofku7bkvY3nva7vvInvvJolcyDmt7vliqDliLAgJXPvvIzkvY3kuo7kuIDkuKrooqvph43lkb3lkI3kuLogJXMg55qE55uu5b2V5Lit77yM5bu66K6u5bCG5YW256e75YqoIgorIuWIsCAlc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGF0aCB1cGRhdGVkOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCBpbiAiCisiJXM7IG1vdmluZyBpdCB0byAlcy4iCittc2dzdHIgIiIKKyLot6/lvoTlt7Lmm7TmlrDvvJolMSRzIOmHjeWRveWQjeS4uiAlMyRzIOS4reeahCAlMiRz77yM6ICM6K+l55uu5b2V6KKr6YeN5ZG95ZCN5YiwICU0JHMg5Lit77yM5bCG5YW256e7IgorIuWKqOWIsCAlNSRz44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoZmlsZSBsb2NhdGlvbik6ICVzIHJlbmFtZWQgdG8gJXMgaW4gJXMsIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0ICIKKyJ3YXMgcmVuYW1lZCBpbiAlcywgc3VnZ2VzdGluZyBpdCBzaG91bGQgcGVyaGFwcyBiZSBtb3ZlZCB0byAlcy4iCittc2dzdHIgIiIKKyLlhrLnqoHvvIjmlofku7bkvY3nva7vvInvvJolMSRzIOmHjeWRveWQjeS4uiAlMyRzIOS4reeahCAlMiRz77yM6ICM6K+l55uu5b2V6KKr6YeN5ZG95ZCN5YiwICU0JHMg5Lit77yMIgorIuW7uuiuruWwhuWFtuenu+WKqOWIsCAlNSRz44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICLliKDpmaQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MDgKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAi5paH5Lu2L+ebruW9lSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQxMworbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICLnm67lvZUv5paH5Lu2IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICLlhrLnqoHvvIglMSRz77yJ77ya5ZyoICUzJHMg5Lit5pyJ5LiA5Liq5ZCN5Li6ICUyJHMg55qE55uu5b2V44CC5LulICU1JHMg5Li65ZCN5re75YqgICU0JHMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICLmt7vliqAgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKGFkZC9hZGQpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAi5Yay56qB77yIYWRkL2FkZO+8ie+8muWQiOW5tuWGsueqgeS6jiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ4MgorbXNnaWQgIkFscmVhZHkgdXAgdG8gZGF0ZSEiCittc2dzdHIgIuW3sue7j+aYr+acgOaWsOeahO+8gSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgIuaXoOazleWQiOW5tuagkSAlcyDlkowgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM1OTUKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAi5ZCI5bm277yaIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICLlj5HnjrAgJXUg5Liq5YWx5ZCM56WW5YWI77yaIgorbXNnc3RyWzFdICLlj5HnjrAgJXUg5Liq5YWx5ZCM56WW5YWI77yaIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNjU4Cittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICLlkIjlubbmnKrov5Tlm57mj5DkuqQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiAgJXMiCittc2dzdHIgIiIKKyLmgqjlr7nkuIvliJfmlofku7bnmoTmnKzlnLDkv67mlLnlsIbooqvlkIjlubbmk43kvZzopobnm5bvvJpcbiIKKyIgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5a+56LGhICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM4MzIgYnVpbHRpbi9tZXJnZS5jOjY5NCBidWlsdGluL21lcmdlLmM6ODc0Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAi5LiN6IO95YaZ5YWl57Si5byV44CCIgorCisjOiBtaWR4LmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAi5aSa5YyF57Si5byV5paH5Lu2ICVzIOWkquWwjyIKKworIzogbWlkeC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc2lnbmF0dXJlIDB4JTA4eCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICLlpJrljIXntKLlvJXnrb7lkI0gMHglMDh4IOWSjOetvuWQjSAweCUwOHgg5LiN5Yy56YWNIgorCisjOiBtaWR4LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCB2ZXJzaW9uICVkIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICJtdWx0aS1wYWNrLWluZGV4IOeJiOacrCAlZCDkuI3og73ooqvor4bliKsiCisKKyM6IG1pZHguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJoYXNoIHZlcnNpb24gJXUgZG9lcyBub3QgbWF0Y2giCittc2dzdHIgIuaVo+WIl+eJiOacrCAldSDkuI3ljLnphY0iCisKKyM6IG1pZHguYzoxMDgKK21zZ2lkICJpbnZhbGlkIGNodW5rIG9mZnNldCAodG9vIGxhcmdlKSIKK21zZ3N0ciAi5peg5pWI55qE5Z2X5YGP56e777yI5aSq5aSn77yJIgorCisjOiBtaWR4LmM6MTMyCittc2dpZCAidGVybWluYXRpbmcgbXVsdGktcGFjay1pbmRleCBjaHVuayBpZCBhcHBlYXJzIGVhcmxpZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAi57uI5q2i5aSa5YyF57Si5byV5Z2XIGlkIOWHuueOsOaXtumXtOaXqeS6jumihOacnyIKKworIzogbWlkeC5jOjE0NQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBwYWNrLW5hbWUgY2h1bmsiCittc2dzdHIgIuWkmuWMhee0ouW8lee8uuWwkeW/hemcgOeahOWMheWQjeWdlyIKKworIzogbWlkeC5jOjE0NworbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgZmFub3V0IGNodW5rIgorbXNnc3RyICLlpJrljIXntKLlvJXnvLrlsJHlv4XpnIDnmoTlr7nosaEgSUQg5omH5Ye65Z2XIgorCisjOiBtaWR4LmM6MTQ5Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIE9JRCBsb29rdXAgY2h1bmsiCittc2dzdHIgIuWkmuWMhee0ouW8lee8uuWwkeW/hemcgOeahOWvueixoSBJRCDmn6Xor6LlnZciCisKKyM6IG1pZHguYzoxNTEKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IG9mZnNldHMgY2h1bmsiCittc2dzdHIgIuWkmuWMhee0ouW8lee8uuWwkeW/hemcgOeahOWvueixoeWBj+enu+WdlyIKKworIzogbWlkeC5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHBhY2sgbmFtZXMgb3V0IG9mIG9yZGVyOiAnJXMnIGJlZm9yZSAnJXMnIgorbXNnc3RyICLlpJrljIXntKLlvJXljIXlkI3ml6Dluo/vvJonJXMnIOWcqCAnJXMnIOS5i+WJjSIKKworIzogbWlkeC5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay1pbnQtaWQ6ICV1ICgldSB0b3RhbCBwYWNrcykiCittc2dzdHIgIumUmeeahCBwYWNrLWludC1pZO+8miV177yI5YWx5pyJICV1IOS4quWMhe+8iSIKKworIzogbWlkeC5jOjI2MAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggc3RvcmVzIGEgNjQtYml0IG9mZnNldCwgYnV0IG9mZl90IGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAi5aSa5YyF57Si5byV5a2Y5YKo5LiA5LiqNjTkvY3lgY/np7vvvIzkvYbmmK8gb2ZmX3Qg5aSq5bCPIgorCisjOiBtaWR4LmM6Mjg4Cittc2dpZCAiZXJyb3IgcHJlcGFyaW5nIHBhY2tmaWxlIGZyb20gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAi5LuO5aSa5YyF57Si5byV5YeG5aSHIHBhY2tmaWxlIOWHuumUmSIKKworIzogbWlkeC5jOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWRkIHBhY2tmaWxlICclcyciCittc2dzdHIgIua3u+WKoOWMheaWh+S7tiAnJXMnIOWksei0pSIKKworIzogbWlkeC5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwYWNrLWluZGV4ICclcyciCittc2dzdHIgIuaJk+W8gOWMhee0ouW8lSAnJXMnIOWksei0pSIKKworIzogbWlkeC5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9jYXRlIG9iamVjdCAlZCBpbiBwYWNrZmlsZSIKK21zZ3N0ciAi5Zyo5YyF5paH5Lu25Lit5a6a5L2N5a+56LGhICVkIOWksei0pSIKKworIzogbWlkeC5jOjg0MgorbXNnaWQgIkFkZGluZyBwYWNrZmlsZXMgdG8gbXVsdGktcGFjay1pbmRleCIKK21zZ3N0ciAi5re75Yqg5YyF5paH5Lu25Yiw5aSa5YyF57Si5byVIgorCisjOiBtaWR4LmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3Qgc2VlIHBhY2stZmlsZSAlcyB0byBkcm9wIgorbXNnc3RyICLmsqHmnInnnIvliLDopoHkuKLlvIPnmoTljIXmlofku7YgJXMiCisKKyM6IG1pZHguYzo5NzMKK21zZ2lkICJXcml0aW5nIGNodW5rcyB0byBtdWx0aS1wYWNrLWluZGV4IgorbXNnc3RyICLlhpnlhaXlnZfliLDlpJrljIXntKLlvJUiCisKKyM6IG1pZHguYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbGVhciBtdWx0aS1wYWNrLWluZGV4IGF0ICVzIgorbXNnc3RyICLmuIXnkIbkvY3kuo4gJXMg55qE5aSa5YyF57Si5byV5aSx6LSlIgorCisjOiBtaWR4LmM6MTEwOAorbXNnaWQgIkxvb2tpbmcgZm9yIHJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICLmraPlnKjmn6Xmib7lvJXnlKjnmoTljIXmlofku7YiCisKKyM6IG1pZHguYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvaWQgZmFub3V0IG91dCBvZiBvcmRlcjogZmFub3V0WyVkXSA9ICU8UFJJeDMyPiA+ICU8UFJJeDMyPiA9IGZhbm91dFslZF0iCittc2dzdHIgIuWvueixoSBJRCDmiYflh7rml6Dluo/vvJpmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKKworIzogbWlkeC5jOjExMjgKK21zZ2lkICJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIuagoemqjOWkmuWMhee0ouW8leS4reeahCBPSUQg6aG65bqPIgorCisjOiBtaWR4LmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJvaWQgbG9va3VwIG91dCBvZiBvcmRlcjogb2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKK21zZ3N0ciAi5a+56LGhIElEIOafpeivouaXoOW6j++8mm9pZFslZF0gPSAlcyA+PSAlcyA9IG9pZFslZF0iCisKKyM6IG1pZHguYzoxMTU3Cittc2dpZCAiU29ydGluZyBvYmplY3RzIGJ5IHBhY2tmaWxlIgorbXNnc3RyICLpgJrov4fljIXmlofku7bkuLrlr7nosaHmjpLluo8iCisKKyM6IG1pZHguYzoxMTY0Cittc2dpZCAiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIgorbXNnc3RyICLmoKHpqozlr7nosaHlgY/np7siCisKKyM6IG1pZHguYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAi5Li6IG9pZFslZF0gPSAlcyDliqDovb3ljIXmnaHnm67lpLHotKUiCisKKyM6IG1pZHguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICLkuLrljIXmlofku7YgJXMg5Yqg6L295YyF57Si5byV5aSx6LSlIgorCisjOiBtaWR4LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCBmb3Igb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorbXNnc3RyICJvaWRbJWRdID0gJXMg6ZSZ6K+v55qE5a+56LGh5YGP56e777yaJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKKworIzogbWlkeC5jOjEyMjAKK21zZ2lkICJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgIuato+WcqOWvueW8leeUqOWvueixoeiuoeaVsCIKKworIzogbWlkeC5jOjEyMzAKK21zZ2lkICJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICLmraPlnKjmn6Xmib7lkozliKDpmaTmnKrlvJXnlKjnmoTljIXmlofku7YiCisKKyM6IG1pZHguYzoxMzg4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIKK21zZ3N0ciAi5LiN6IO95byA5aeLIHBhY2stb2JqZWN0cyIKKworIzogbWlkeC5jOjE0MDcKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAi5LiN6IO957uT5p2fIHBhY2stb2JqZWN0cyIKKworIzogbmFtZS1oYXNoLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9kaXIgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6IGxhenlfZGlyIOe6v+eoi++8miVzIgorCisjOiBuYW1lLWhhc2guYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6IGxhenlfbmFtZSDnur/nqIvvvJolcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLkuI3og73liqDlhaUgbGFzeV9uYW1lIOe6v+eoi++8miVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKyLmgqjnmoTliY3kuIDmrKHms6jph4rlkIjlubblsJrmnKrnu5PmnZ/vvIjlrZjlnKggJXPvvInjgIJcbiIKKyLlnKjlvIDlp4vkuIDkuKrmlrDnmoTms6jph4rlkIjlubbkuYvliY3vvIzor7fkvb/nlKggJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcg5oiW6ICFICdnaXQgIgorIm5vdGVzIG1lcmdlIC0tYWJvcnQnIOadpeaPkOS6pC/nu4jmraLliY3kuIDmrKHlkIjlubbjgIIiCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIuaCqOWwmuacque7k+adn+azqOmHiuWQiOW5tu+8iOWtmOWcqCAlc++8ieOAgiIKKworIzogbm90ZXMtdXRpbHMuYzo0NgorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAi5LiN6IO95o+Q5Lqk5pyq5Yid5aeL5YyWL+acquW8leeUqOeahOazqOino+agkSIKKworIzogbm90ZXMtdXRpbHMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICLlnY/nmoQgbm90ZXMucmV3cml0ZU1vZGUg5YC877yaJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIuaLkue7neWQkSAlc++8iOWcqCByZWZzL25vdGVzLyDkuYvlpJbvvInlhpnlhaXms6jop6MiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi5Z2P55qEICVzIOWAvO+8miclcyciCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICLml6DmlYjnmoTlr7nosaHnsbvlnosgXCIlc1wiIgorCisjOiBvYmplY3QuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICLlr7nosaEgJXMg5piv5LiA5LiqICVz77yM5LiN5piv5LiA5LiqICVzIgorCisjOiBvYmplY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGhhcyB1bmtub3duIHR5cGUgaWQgJWQiCittc2dzdHIgIuWvueixoSAlcyDmnInmnKrnn6XnmoTnsbvlnosgaWQgJWQiCisKKyM6IG9iamVjdC5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5a+56LGh77yaJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAi5ZOI5biM5YC85LiOICVzIOS4jeWMuemFjSIKKworIzogcGFja2ZpbGUuYzo2NDEKK21zZ2lkICJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIKK21zZ3N0ciAi5YGP56e76YeP5Zyo5YyF5paH5Lu257uT5p2f5LmL5YmN77yI5o2f5Z2P55qEIC5pZHjvvJ/vvIkiCisKKyM6IHBhY2tmaWxlLmM6MTg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmVmb3JlIHN0YXJ0IG9mIHBhY2sgaW5kZXggZm9yICVzIChjb3JydXB0IGluZGV4PykiCittc2dzdHIgIuWBj+enu+mHj+WcqCAlcyDnmoTljIXntKLlvJXlvIDlp4vkuYvliY3vvIjmjZ/lnY/nmoTntKLlvJXvvJ/vvIkiCisKKyM6IHBhY2tmaWxlLmM6MTg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJvZmZzZXQgYmV5b25kIGVuZCBvZiBwYWNrIGluZGV4IGZvciAlcyAodHJ1bmNhdGVkIGluZGV4PykiCittc2dzdHIgIuWBj+enu+mHj+i2iui/h+S6hiAlcyDnmoTljIXntKLlvJXnmoTnu5PlsL7vvIjooqvmiKrmlq3nmoTntKLlvJXvvJ/vvIkiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozOAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIlcyDpnIDopoHkuIDkuKrlgLwiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAlcyIKK21zZ3N0ciAiJXMg5LiOICVzIOS4jeWFvOWuuSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIDogaW5jb21wYXRpYmxlIHdpdGggc29tZXRoaW5nIGVsc2UiCittc2dzdHIgIiVz77ya5ZKM5YW25a6D55qE5LiN5YW85a65IgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTIgcGFyc2Utb3B0aW9ucy5jOjk2IHBhcnNlLW9wdGlvbnMuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGFrZXMgbm8gdmFsdWUiCittc2dzdHIgIiVzIOS4jeWPluWAvCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzbid0IGF2YWlsYWJsZSIKK21zZ3N0ciAiJXMg5LiN5Y+v55SoIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB3aXRoIGFuIG9wdGlvbmFsIGsvbS9nIHN1ZmZpeCIKK21zZ3N0ciAiJXMg5pyf5pyb5LiA5Liq6Z2e6LSf5pW05pWw5ZKM5LiA5Liq5Y+v6YCJ55qEIGsvbS9nIOWQjue8gCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbWJpZ3VvdXMgb3B0aW9uOiAlcyAoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiCittc2dzdHIgIuacieatp+S5ieeahOmAiemhue+8miVz77yI5Y+v5Lul5pivIC0tJXMlcyDmiJYgLS0lcyVz77yJIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NDIzIHBhcnNlLW9wdGlvbnMuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIHlvdSBtZWFuIGAtLSVzYCAod2l0aCB0d28gZGFzaGVzID8pIgorbXNnc3RyICLkvaDnmoTmhI/mgJ3mmK8gYC0tJXNg77yI5pyJ5Lik5Liq55+t57q/77yf77yJIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uIGAlcyciCittc2dzdHIgIuacquefpemAiemhuSBgJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3dpdGNoIGAlYyciCittc2dzdHIgIuacquefpeW8gOWFsyBgJWMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciCittc2dzdHIgIuWtl+espuS4suS4reacquefpeeahOmdniBhc2NpaSDlrZfnrKbpgInpobnvvJpgJXMnIgorCisjOiBwYXJzZS1vcHRpb25zLmM6ODg4Cittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICLnlKjms5XvvJolcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uLgorIy4KKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgIOaIlu+8miVzIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IHBhcnNlLW9wdGlvbnMuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NTUKK21zZ2lkICItTlVNIgorbXNnc3RyICIt5pWw5a2XIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImFsaWFzIG9mIC0tJXMiCittc2dzdHIgIi0tJXMg55qE5Yir5ZCNIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MjAgcGFyc2Utb3B0aW9ucy1jYi5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIumAiemhuSBgJXMnIOacn+acm+S4gOS4quaVsOWtl+WAvCIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBleHBpcmF0aW9uIGRhdGUgJyVzJyIKK21zZ3N0ciAi5qC85byP6ZSZ6K+v55qE5Yiw5pyf5pe26Ze077yaJyVzJyIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIKK21zZ3N0ciAi6YCJ6aG5IGAlcycg5pyf5pybIFwiYWx3YXlzXCLjgIFcImF1dG9cIiDmiJYgXCJuZXZlclwiIgorCisjOiBwYXJzZS1vcHRpb25zLWNiLmM6MTMwIHBhcnNlLW9wdGlvbnMtY2IuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIuagvOW8j+mUmeivr+eahOWvueixoeWQjSAnJXMnIgorCisjOiBwYXRoLmM6OTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICLkuI3og73orr7nva4gJXMg5Li657uE5Y+v5YaZIgorCisjOiBwYXRoc3BlYy5jOjEzMAorbXNnaWQgIkVzY2FwZSBjaGFyYWN0ZXIgJ1xcJyBub3QgYWxsb3dlZCBhcyBsYXN0IGNoYXJhY3RlciBpbiBhdHRyIHZhbHVlIgorbXNnc3RyICLovazkuYnlrZfnrKYgJ1xcJyDkuI3og73kvZzkuLrlsZ7mgKflgLznmoTmnIDlkI7kuIDkuKrlrZfnrKYiCisKKyM6IHBhdGhzcGVjLmM6MTQ4Cittc2dpZCAiT25seSBvbmUgJ2F0dHI6JyBzcGVjaWZpY2F0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLlj6rlhYHorrjkuIDkuKogJ2F0dHI6JyDop4TmoLzjgIIiCisKKyM6IHBhdGhzcGVjLmM6MTUxCittc2dpZCAiYXR0ciBzcGVjIG11c3Qgbm90IGJlIGVtcHR5IgorbXNnc3RyICLlsZ7mgKfop4TmoLzkuI3og73kuLrnqboiCisKKyM6IHBhdGhzcGVjLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXR0cmlidXRlIG5hbWUgJXMiCittc2dzdHIgIuaXoOaViOeahOWxnuaAp+WQjSAlcyIKKworIzogcGF0aHNwZWMuYzoyNTkKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLlhajlsYDnmoQgJ2dsb2InIOWSjCAnbm9nbG9iJyDot6/lvoTop4TmoLzorr7nva7kuI3lhbzlrrkiCisKKyM6IHBhdGhzcGVjLmM6MjY2Cittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAi5YWo5bGA55qEICdsaXRlcmFsJyDot6/lvoTop4TmoLzorr7nva7lkozlhbblroPnmoTlhajlsYDot6/lvoTop4TmoLzorr7nva7kuI3lhbzlrrkiCisKKyM6IHBhdGhzcGVjLmM6MzA2Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICLot6/lvoTop4TmoLzljIXlkKvml6DmlYjnmoTnpZ7lpYfliY3nvIAiCisKKyM6IHBhdGhzcGVjLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIuWcqOi3r+W+hOinhOagvCAnJTMkcycg5Lit5peg5pWI55qE56We5aWH5YmN57yAICclMiQuKjEkcyciCisKKyM6IHBhdGhzcGVjLmM6MzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg55qE56We5aWH5YmN57yA57uT5bC+5bCR5LqG5LiA5LiqICcpJyIKKworIzogcGF0aHNwZWMuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIui3r+W+hOinhOagvCAnJTIkcycg5Lit5YyF5ZCr5pyq5a6e546w55qE56We5aWH5YmN57yAICclMSRjJyIKKworIzogcGF0aHNwZWMuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVz77yaJ2xpdGVyYWwnIOWSjCAnZ2xvYicg5LiN5YW85a65IgorCisjOiBwYXRoc3BlYy5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVz77yaJyVzJyDlnKjku5PlupPkuYvlpJYiCisKKyM6IHBhdGhzcGVjLmM6NTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgKG1uZW1vbmljOiAnJWMnKSIKK21zZ3N0ciAiJyVzJ++8iOWKqeiusOespu+8miclYyfvvIkiCisKKyM6IHBhdGhzcGVjLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVz77ya6Lev5b6E6KeE5qC856We5aWH5YmN57yA5LiN6KKr5q2k5ZG95Luk5pSv5oyB77yaJXMiCisKKyM6IHBhdGhzcGVjLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg5L2N5LqO56ym5Y+36ZO+5o6l5LitIgorCisjOiBwYXRoc3BlYy5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJsaW5lIGlzIGJhZGx5IHF1b3RlZDogJXMiCittc2dzdHIgIuihjOiiq+mUmeivr+WcsOW8leeUqO+8miVzIgorCisjOiBwa3QtbGluZS5jOjkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAi5peg5rOV5YaZIGZsdXNoIOWMhSIKKworIzogcGt0LWxpbmUuYzo5OQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBkZWxpbSBwYWNrZXQiCittc2dzdHIgIuaXoOazleWGmSBkZWxpbSDljIUiCisKKyM6IHBrdC1saW5lLmM6MTA2Cittc2dpZCAiZmx1c2ggcGFja2V0IHdyaXRlIGZhaWxlZCIKK21zZ3N0ciAiZmx1c2gg5YyF5YaZ6ZSZ6K+vIgorCisjOiBwa3QtbGluZS5jOjE0NiBwa3QtbGluZS5jOjIzMgorbXNnaWQgInByb3RvY29sIGVycm9yOiBpbXBvc3NpYmx5IGxvbmcgbGluZSIKK21zZ3N0ciAi5Y2P6K6u6ZSZ6K+v77ya5LiN5Y+v6IO955qE6ZW/6KGMIgorCisjOiBwa3QtbGluZS5jOjE2MiBwa3QtbGluZS5jOjE2NAorbXNnaWQgInBhY2tldCB3cml0ZSB3aXRoIGZvcm1hdCBmYWlsZWQiCittc2dzdHIgIuagvOW8j+WMluWMheWGmeWFpemUmeivryIKKworIzogcGt0LWxpbmUuYzoxOTYKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIC0gZGF0YSBleGNlZWRzIG1heCBwYWNrZXQgc2l6ZSIKK21zZ3N0ciAi5YaZ5pWw5o2u5YyF5aSx6LSl77ya5pWw5o2u6LaF6L+H5LqG5YyF55qE5pyA5aSn6ZW/5bqmIgorCisjOiBwa3QtbGluZS5jOjIwMyBwa3QtbGluZS5jOjIxMAorbXNnaWQgInBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgIuaVsOaNruWMheWGmeWFpeWksei0pSIKKworIzogcGt0LWxpbmUuYzoyOTUKK21zZ2lkICJyZWFkIGVycm9yIgorbXNnc3RyICLor7vlj5bplJnor68iCisKKyM6IHBrdC1saW5lLmM6MzAzCittc2dpZCAidGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiCittc2dzdHIgIui/nOerr+aEj+WkluaMguaWreS6hiIKKworIzogcGt0LWxpbmUuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCBjaGFyYWN0ZXI6ICUuNHMiCittc2dzdHIgIuWNj+iurumUmeivr++8mumUmeivr+eahOihjOmVv+W6puWtl+espuS4su+8miUuNHMiCisKKyM6IHBrdC1saW5lLmM6MzQxIHBrdC1saW5lLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggJWQiCittc2dzdHIgIuWNj+iurumUmeivr++8mumUmeivr+eahOihjOmVv+W6piAlZCIKKworIzogcGt0LWxpbmUuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAi6L+c56iL6ZSZ6K+v77yaJXMiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMTkKK21zZ2lkICJSZWZyZXNoaW5nIGluZGV4IgorbXNnc3RyICLmraPlnKjliLfmlrDntKLlvJUiCisKKyM6IHByZWxvYWQtaW5kZXguYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWRlZCBsc3RhdDogJXMiCittc2dzdHIgIuaXoOazleWIm+W7uue6v+eoiyBsc3RhdO+8miVzIgorCisjOiBwcmV0dHkuYzo5ODEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICLkuI3og73op6PmnpAgLS1wcmV0dHkg5qC85byPIgorCisjOiBwcm9taXNvci1yZW1vdGUuYzoyMworbXNnaWQgIlJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAi6L+c56iL5pyq6K6+572uIFVSTCIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIKK21zZ3N0ciAicHJvbWlzb3Ig6L+c56iL5ZCN56ew5LiN6IO95LulICcvJyDlvIDlp4vvvJolcyIKKworIzogcmFuZ2UtZGlmZi5jOjc1Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IGBsb2dgIgorbXNnc3RyICLkuI3og73lkK/liqggYGxvZ2AiCisKKyM6IHJhbmdlLWRpZmYuYzo3NworbXNnaWQgImNvdWxkIG5vdCByZWFkIGBsb2dgIG91dHB1dCIKK21zZ3N0ciAi5LiN6IO96K+75Y+WIGBsb2dgIOeahOi+k+WHuiIKKworIzogcmFuZ2UtZGlmZi5jOjk2IHNlcXVlbmNlci5jOjUxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpDmj5DkuqQgJyVzJyIKKworIzogcmFuZ2UtZGlmZi5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciCittc2dzdHIgIuaXoOazleino+aekCBnaXQg5aS0ICclLipzJyIKKworIzogcmFuZ2UtZGlmZi5jOjI4NQorbXNnaWQgImZhaWxlZCB0byBnZW5lcmF0ZSBkaWZmIgorbXNnc3RyICLnlJ/miJAgZGlmZiDlpLHotKUiCisKKyM6IHJhbmdlLWRpZmYuYzo1MTggcmFuZ2UtZGlmZi5jOjUyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbG9nIGZvciAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpAgJyVzJyDnmoTml6Xlv5ciCisKKyM6IHJlYWQtY2FjaGUuYzo2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgYWRkIGZpbGUgYWxpYXMgJyVzJyAoJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCkiCittc2dzdHIgIuWwhuS4jeS8mua3u+WKoOaWh+S7tuWIq+WQjSAnJXMn77yIJyVzJyDlt7Lnu4/lrZjlnKjkuo7ntKLlvJXkuK3vvIkiCisKKyM6IHJlYWQtY2FjaGUuYzo2OTYKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGFuIGVtcHR5IGJsb2IgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi5LiN6IO95Zyo5a+56LGh5pWw5o2u5bqT5Lit5Yib5bu656m655qE5pWw5o2u5a+56LGhIgorCisjOiByZWFkLWNhY2hlLmM6NzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIgorbXNnc3RyICIlc++8muWPquiDvea3u+WKoOW4uOinhOaWh+S7tuOAgeespuWPt+mTvuaOpeaIliBnaXQg55uu5b2VIgorCisjOiByZWFkLWNhY2hlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dCIKK21zZ3N0ciAiJyVzJyDmsqHmnInmo4Dlh7rkuIDkuKrmj5DkuqQiCisKKyM6IHJlYWQtY2FjaGUuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGluZGV4IGZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV57Si5byV5paH5Lu2ICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCAnJXMnIHRvIGluZGV4IgorbXNnc3RyICLml6Dms5XlnKjntKLlvJXkuK3mt7vliqAgJyVzJyIKKworIzogcmVhZC1jYWNoZS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLml6Dms5Xlr7kgJXMg5omn6KGMIHN0YXQiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiCittc2dzdHIgIiclcycg55yL6LW35p2l5pei5piv5paH5Lu25Y+I5piv55uu5b2VIgorCisjOiByZWFkLWNhY2hlLmM6MTUzMQorbXNnaWQgIlJlZnJlc2ggaW5kZXgiCittc2dzdHIgIuWIt+aWsOe0ouW8lSIKKworIzogcmVhZC1jYWNoZS5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIuiuvue9ruS6hiBpbmRleC52ZXJzaW9u77yM5L2G5piv5Y+W5YC85peg5pWI44CCXG4iCisi5L2/55So54mI5pysICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIuiuvue9ruS6hiBHSVRfSU5ERVhfVkVSU0lPTu+8jOS9huaYr+WPluWAvOaXoOaViOOAglxuIgorIuS9v+eUqOeJiOacrCAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHNpZ25hdHVyZSAweCUwOHgiCittc2dzdHIgIuWdj+eahOetvuWQjSAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICVkIgorbXNnc3RyICLlnY/nmoTntKLlvJXniYjmnKwgJWQiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzI0Cittc2dpZCAiYmFkIGluZGV4IGZpbGUgc2hhMSBzaWduYXR1cmUiCittc2dzdHIgIuWdj+eahOe0ouW8leaWh+S7tiBzaGExIOetvuWQjSIKKworIzogcmVhZC1jYWNoZS5jOjE3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5kZXggdXNlcyAlLjRzIGV4dGVuc2lvbiwgd2hpY2ggd2UgZG8gbm90IHVuZGVyc3RhbmQiCittc2dzdHIgIue0ouW8leS9v+eUqOS4jeiiq+aUr+aMgeeahCAlLjRzIOaJqeWxlSIKKworIyAJCisjOiByZWFkLWNhY2hlLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlLjRzIGV4dGVuc2lvbiIKK21zZ3N0ciAi5b+955WlICUuNHMg5omp5bGVIgorCisjOiByZWFkLWNhY2hlLmM6MTc5MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGluZGV4IGVudHJ5IGZvcm1hdCAweCUwOHgiCittc2dzdHIgIuacquefpeeahOe0ouW8leadoeebruagvOW8jyAweCUwOHgiCisKKyM6IHJlYWQtY2FjaGUuYzoxODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBuYW1lIGZpZWxkIGluIHRoZSBpbmRleCwgbmVhciBwYXRoICclcyciCittc2dzdHIgIue0ouW8leS4remdoOi/kei3r+W+hCAnJXMnIOaciemUmeivr+eahOWQjeensOWtl+autSIKKworIzogcmVhZC1jYWNoZS5jOjE4NjYKK21zZ2lkICJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBpbiBpbmRleCIKK21zZ3N0ciAi57Si5byV5Lit5pyJ5pyq5o6S5bqP55qE5pqC5a2Y5p2h55uuIgorCisjOiByZWFkLWNhY2hlLmM6MTg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSBzdGFnZSBlbnRyaWVzIGZvciBtZXJnZWQgZmlsZSAnJXMnIgorbXNnc3RyICLlkIjlubbmlofku7YgJyVzJyDmnInlpJrkuKrmmoLlrZjmnaHnm64iCisKKyM6IHJlYWQtY2FjaGUuYzoxODcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGZvciAnJXMnIgorbXNnc3RyICInJXMnIOeahOacquaOkuW6j+aaguWtmOadoeebriIKKworIzogcmVhZC1jYWNoZS5jOjE5NzggcmVhZC1jYWNoZS5jOjIyNjYgcmVyZXJlLmM6NTY1IHJlcmVyZS5jOjU5OSByZXJlcmUuYzoxMTExCisjOiBidWlsdGluL2FkZC5jOjQ5OSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3OCBidWlsdGluL2NoZWNrb3V0LmM6NDcwCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjU0IGJ1aWx0aW4vY2xlYW4uYzo5NjcgYnVpbHRpbi9jb21taXQuYzozNjcKKyM6IGJ1aWx0aW4vZGlmZi10cmVlLmM6MTIwIGJ1aWx0aW4vZ3JlcC5jOjQ5OSBidWlsdGluL212LmM6MTQ1CisjOiBidWlsdGluL3Jlc2V0LmM6MjQ2IGJ1aWx0aW4vcm0uYzoyNzEgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjMzMgorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAi57Si5byV5paH5Lu25o2f5Z2PIgorCisjOiByZWFkLWNhY2hlLmM6MjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICLml6Dms5XliJvlu7ogbG9hZF9jYWNoZV9lbnRyaWVzIOe6v+eoi++8miVzIgorCisjOiByZWFkLWNhY2hlLmM6MjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsb2FkX2NhY2hlX2VudHJpZXMgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5peg5rOV5Yqg5YWlIGxvYWRfY2FjaGVfZW50cmllcyDnur/nqIvvvJolcyIKKworIzogcmVhZC1jYWNoZS5jOjIxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGluZGV4IGZpbGUgb3BlbiBmYWlsZWQiCittc2dzdHIgIiVz77ya5omT5byA57Si5byV5paH5Lu25aSx6LSlIgorCisjOiByZWFkLWNhY2hlLmM6MjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHN0YXQgdGhlIG9wZW4gaW5kZXgiCittc2dzdHIgIiVz77ya5LiN6IO95a+55omT5byA55qE57Si5byV5omn6KGMIHN0YXQg5pON5L2cIgorCisjOiByZWFkLWNhY2hlLmM6MjE3MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIiVz77ya57Si5byV5paH5Lu25q+U6aKE5pyf55qE5bCPIgorCisjOiByZWFkLWNhY2hlLmM6MjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIgorbXNnc3RyICIlc++8muaXoOazleWvuee0ouW8leaWh+S7tuaJp+ihjCBtYXAg5pON5L2cIgorCisjOiByZWFkLWNhY2hlLmM6MjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICLml6Dms5XliJvlu7ogbG9hZF9pbmRleF9leHRlbnNpb25zIOe6v+eoi++8miVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gam9pbiBsb2FkX2luZGV4X2V4dGVuc2lvbnMgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5peg5rOV5Yqg5YWlIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyDnur/nqIvvvJolcyIKKworIzogcmVhZC1jYWNoZS5jOjIyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZyZXNoZW4gc2hhcmVkIGluZGV4ICclcyciCittc2dzdHIgIuaXoOazleWIt+aWsOWFseS6q+e0ouW8lSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gaW5kZXgsIGV4cGVjdCAlcyBpbiAlcywgZ290ICVzIgorbXNnc3RyICLmjZ/lnY/nmoTntKLlvJXvvIzmnJ/mnJvlnKggJTIkcyDkuK3nmoQgJTEkc++8jOW+l+WIsCAlMyRzIgorCisjOiByZWFkLWNhY2hlLmM6MzAyMSBzdHJidWYuYzoxMTQ1IHdyYXBwZXIuYzo2MjIgYnVpbHRpbi9tZXJnZS5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICclcyciCittc2dzdHIgIuS4jeiDveWFs+mXrSAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6MzEyNCBzZXF1ZW5jZXIuYzoyNDI5IHNlcXVlbmNlci5jOjQwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95a+5ICclcycg6LCD55SoIHN0YXQiCisKKyM6IHJlYWQtY2FjaGUuYzozMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIGdpdCBkaXI6ICVzIgorbXNnc3RyICLkuI3og73miZPlvIAgZ2l0IOebruW9le+8miVzIgorCisjOiByZWFkLWNhY2hlLmM6MzE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5saW5rOiAlcyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaXggcGVybWlzc2lvbiBiaXRzIG9uICclcyciCittc2dzdHIgIuS4jeiDveS/ruWkjSAnJXMnIOeahOadg+mZkOS9jSIKKworIzogcmVhZC1jYWNoZS5jOjMzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIgorbXNnc3RyICIlc++8muS4jeiDveiQveWIsOaaguWtmOWMuiAjMCIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVucmVjb2duaXplZCBzZXR0aW5nICVzIGZvciBvcHRpb24gcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2suIElnbm9yaW5nLiIKK21zZ3N0ciAi6YCJ6aG5IHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIOeahOWAvCAlcyDml6Dms5Xor4bliKvjgILlt7Llv73nlaXjgIIiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjM1Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+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/vvIzlsIbku47kuIroh7PkuIvmiafooYzjgIJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmViYXNlICVzIG9udG8gJXMgKCVkIGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZHMpIgorbXNnc3RyWzBdICLlj5jln7ogJXMg5YiwICVz77yIJWQg5Liq5o+Q5Lqk77yJIgorbXNnc3RyWzFdICLlj5jln7ogJXMg5YiwICVz77yIJWQg5Liq5o+Q5Lqk77yJIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjI4Cittc2dpZCAiIgorIlxuIgorIkRvIG5vdCByZW1vdmUgYW55IGxpbmUuIFVzZSAnZHJvcCcgZXhwbGljaXRseSB0byByZW1vdmUgYSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkuI3opoHliKDpmaTku7vmhI/kuIDooYzjgILkvb/nlKggJ2Ryb3AnIOaYvuW8j+WcsOWIoOmZpOS4gOS4quaPkOS6pOOAglxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjMyCittc2dpZCAiIgorIlxuIgorIklmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULlxuIgorbXNnc3RyICIiCisiXG4iCisi5aaC5p6c5oKo5Zyo6L+Z6YeM5Yig6Zmk5LiA6KGM77yM5a+55bqU55qE5o+Q5Lqk5bCG5Lya5Lii5aSx44CCXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzEKK21zZ2lkICIiCisiXG4iCisiWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuXG4iCisiVG8gY29udGludWUgcmViYXNlIGFmdGVyIGVkaXRpbmcsIHJ1bjpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLmgqjmraPlnKjkv67mlLnov5vooYzkuK3nmoTkuqTkupLlvI/lj5jln7rlvoXlip7liJfooajjgILoi6XopoHlnKjnvJbovpHnu5PmnZ/lkI7nu6fnu63lj5jln7rvvIxcbiIKKyLor7fmiafooYzvvJpcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDgKK21zZ2lkICIiCisiXG4iCisiSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIueEtuiAjO+8jOWmguaenOaCqOWIoOmZpOWFqOmDqOWGheWuue+8jOWPmOWfuuaTjeS9nOWwhuS8mue7iOatouOAglxuIgorIlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo4NSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTU1Cittc2dpZCAiTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQiCittc2dzdHIgIuazqOaEj+epuuaPkOS6pOW3suiiq+azqOmHiuaOiSIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA1IHJlcmVyZS5jOjQ4NSByZXJlcmUuYzo2OTIgc2VxdWVuY2VyLmM6MzUzNgorIzogc2VxdWVuY2VyLmM6MzU2MiBzZXF1ZW5jZXIuYzo1MjYzIGJ1aWx0aW4vZnNjay5jOjM0NiBidWlsdGluL3JlYmFzZS5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95YaZ5YWlICclcyciCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcycuIgorbXNnc3RyICLkuI3og73mi7fotJ0gJyVzJyDoh7MgJyVzJ+OAgiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS5cbiIKKyJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKTpcbiIKK21zZ3N0ciAiIgorIuitpuWRiu+8muS4gOS6m+aPkOS6pOWPr+iDveiiq+aEj+WkluS4ouW8g+OAglxuIgorIuS4ouW8g+eahOaPkOS6pO+8iOS7juaWsOWIsOaXp++8ie+8mlxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LlxuIgorIlxuIgorIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiAiCisid2FybmluZ3MuXG4iCisiVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLlxuIgorIlxuIgorbXNnc3RyICIiCisi5Li66YG/5YWN6L+Z5p2h5L+h5oGv77yM5L2/55SoIFwiZHJvcFwiIOaMh+S7pOaYvuW8j+WcsOWIoOmZpOS4gOS4quaPkOS6pOOAglxuIgorIlxuIgorIuS9v+eUqCAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycg5p2l5L+u5pS56K2m5ZGK57qn5Yir44CCXG4iCisi5Y+v6YCJ5YC85pyJ77yaaWdub3Jl44CBd2FybuOAgWVycm9y44CCXG4iCisiXG4iCisKKyM6IHJlZnMuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIgorbXNnc3RyICIlcyDmsqHmnInmjIflkJHkuIDkuKrmnInmlYjnmoTlr7nosaHvvIEiCisKKyM6IHJlZnMuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgZGFuZ2xpbmcgc3ltcmVmICVzIgorbXNnc3RyICLlv73nlaXmgqznqbrnrKblj7flvJXnlKggJXMiCisKKyM6IHJlZnMuYzo2NjkgcmVmLWZpbHRlci5jOjIwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIKK21zZ3N0ciAi5b+955Wl5o2f5Z2P55qE5byV55SoICVzIgorCisjOiByZWZzLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICLml6Dms5XkuLrlhpnlhaXmiZPlvIAgJyVzJ++8miVzIgorCisjOiByZWZzLmM6ODE0IHJlZnMuYzo4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgcmVmICclcyciCittc2dzdHIgIuaXoOazleivu+WPluW8leeUqCAnJXMnIgorCisjOiByZWZzLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLlvJXnlKggJyVzJyDlt7Lnu4/lrZjlnKgiCisKKyM6IHJlZnMuYzo4MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiB3cml0aW5nICclcyciCittc2dzdHIgIuWGmeWFpSAnJXMnIOaXtuaEj+WklueahOWvueixoSBJRCIKKworIzogcmVmcy5jOjgzMyBzZXF1ZW5jZXIuYzo0MDUgc2VxdWVuY2VyLmM6Mjc5MyBzZXF1ZW5jZXIuYzoyOTk3CisjOiBzZXF1ZW5jZXIuYzozMDExIHNlcXVlbmNlci5jOjMyNjkgc2VxdWVuY2VyLmM6NTE3OSBzdHJidWYuYzoxMTQyCisjOiB3cmFwcGVyLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLkuI3og73lhpnlhaUgJyVzJyIKKworIzogcmVmcy5jOjg2MCBzdHJidWYuYzoxMTQwIHdyYXBwZXIuYzoxODggd3JhcHBlci5jOjM1OCBidWlsdGluL2FtLmM6NzE0CisjOiBidWlsdGluL3JlYmFzZS5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAi5peg5rOV5omT5byAICclcycg6L+b6KGM5YaZ5YWlIgorCisjOiByZWZzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgb2JqZWN0IElEIHdoZW4gZGVsZXRpbmcgJyVzJyIKK21zZ3N0ciAi5Yig6ZmkICclcycg5pe25oSP5aSW55qE5a+56LGhIElEIgorCisjOiByZWZzLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMiCittc2dzdHIgIuW8leeUqCAlcyDnmoTml6Xlv5flnKggJXMg5LmL5ZCO5pyJ57y65Y+jIgorCisjOiByZWZzLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yIHJlZiAlcyB1bmV4cGVjdGVkbHkgZW5kZWQgb24gJXMiCittc2dzdHIgIuW8leeUqCAlcyDnmoTml6Xlv5fmhI/lpJbnu4jmraLkuo4gJXMgIgorCisjOiByZWZzLmM6MTA2MworIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZm9yICVzIGlzIGVtcHR5IgorbXNnc3RyICIlcyDnmoTml6Xlv5fkuLrnqboiCisKKyM6IHJlZnMuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIHVwZGF0ZSByZWYgd2l0aCBiYWQgbmFtZSAnJXMnIgorbXNnc3RyICLmi5Lnu53mm7TmlrDmnInplJnor6/lkI3np7AgJyVzJyDnmoTlvJXnlKgiCisKKyM6IHJlZnMuYzoxMjMxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwZGF0ZV9yZWYgZmFpbGVkIGZvciByZWYgJyVzJzogJXMiCittc2dzdHIgIuWvueW8leeUqCAnJXMnIOaJp+ihjCB1cGRhdGVfcmVmIOWksei0pe+8miVzIgorCisjOiByZWZzLmM6MjAyMworIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyVzJyBub3QgYWxsb3dlZCIKK21zZ3N0ciAi5LiN5YWB6K645a+55byV55SoICclcycg5aSa5qyh5pu05pawIgorCisjOiByZWZzLmM6MjA1NQorbXNnaWQgInJlZiB1cGRhdGVzIGZvcmJpZGRlbiBpbnNpZGUgcXVhcmFudGluZSBlbnZpcm9ubWVudCIKK21zZ3N0ciAi5Zyo6ZqU56a7546v5aKD5Lit56aB5q2i5pu05paw5byV55SoIgorCisjOiByZWZzLmM6MjE1MSByZWZzLmM6MjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIgorbXNnc3RyICInJXMnIOW3suWtmOWcqO+8jOaXoOazleWIm+W7uiAnJXMnIgorCisjOiByZWZzLmM6MjE1NyByZWZzLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcHJvY2VzcyAnJXMnIGFuZCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUiCittc2dzdHIgIuaXoOazleWQjOaXtuWkhOeQhiAnJXMnIOWSjCAnJXMnIgorCisjOiByZWZzL2ZpbGVzLWJhY2tlbmQuYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICLml6Dms5XliKDpmaTlvJXnlKggJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNDggcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NDEKKyM6IHJlZnMvcGFja2VkLWJhY2tlbmQuYzoxNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5byV55SoICVz77yaJXMiCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyNTEgcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5byV55So77yaJXMiCisKKyM6IHJlZnNwZWMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZzcGVjICclcyciCittc2dzdHIgIuaXoOaViOeahOW8leeUqOihqOi+vuW8j++8miclcyciCisKKyM6IHJlZi1maWx0ZXIuYzo0MiB3dC1zdGF0dXMuYzoxOTM4Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAi5Lii5aSxIgorCisjOiByZWYtZmlsdGVyLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQiCittc2dzdHIgIumihuWFiCAlZCIKKworIzogcmVmLWZpbHRlci5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJlaGluZCAlZCIKK21zZ3N0ciAi6JC95ZCOICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWhlYWQgJWQsIGJlaGluZCAlZCIKK21zZ3N0ciAi6aKG5YWIICVk77yM6JC95ZCOICVkIgorCisjOiByZWYtZmlsdGVyLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiCittc2dzdHIgIuacn+acm+eahOagvOW8j++8miUlKGNvbG9yOjzpopzoibI+KSIKKworIzogcmVmLWZpbHRlci5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgY29sb3I6ICUlKGNvbG9yOiVzKSIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE6aKc6Imy77yaJSUoY29sb3I6JXMpIgorCisjOiByZWYtZmlsdGVyLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpsc3RyaXA9JXMiCittc2dzdHIgIuacn+acm+aVtOaVsOWAvCByZWZuYW1lOmxzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIHJlZm5hbWU6cnN0cmlwPSVzIgorbXNnc3RyICLmnJ/mnJvmlbTmlbDlgLwgcmVmbmFtZTpyc3RyaXA9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKCVzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveivhuWIq+eahCAlJSglcykg5Y+C5pWw77yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUob2JqZWN0dHlwZSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKG9iamVjdHR5cGUpIOS4jeW4puWPguaVsCIKKworIzogcmVmLWZpbHRlci5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUob2JqZWN0c2l6ZSkgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoQgJSUob2JqZWN0c2l6ZSkg5Y+C5pWw77yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoZGVsdGFiYXNlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoZGVsdGFiYXNlKSDkuI3luKblj4LmlbAiCisKKyM6IHJlZi1maWx0ZXIuYzoyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJSUoYm9keSkgZG9lcyBub3QgdGFrZSBhcmd1bWVudHMiCittc2dzdHIgIiUlKGJvZHkpIOS4jeW4puWPguaVsCIKKworIzogcmVmLWZpbHRlci5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlJShzdWJqZWN0KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoc3ViamVjdCkg5LiN5bim5Y+C5pWwIgorCisjOiByZWYtZmlsdGVyLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gJSUodHJhaWxlcnMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq55+l55qEICUlKHRyYWlsZXJzKSDlj4LmlbDvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB2YWx1ZSBleHBlY3RlZCBjb250ZW50czpsaW5lcz0lcyIKK21zZ3N0ciAi5pyf5pyb5LiA5Liq5q2j5pWwIGNvbnRlbnRzOmxpbmVzPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShjb250ZW50cykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoQgJSUoY29udGVudHMpIOWPguaVsO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIG9iamVjdG5hbWU6c2hvcnQ9JXMiCittc2dzdHIgIuacn+acm+S4gOS4quato+aVsCBvYmplY3RuYW1lOnNob3J0PSVzIgorCisjOiByZWYtZmlsdGVyLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RuYW1lKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveivhuWIq+eahCAlJShvYmplY3RuYW1lKSDlj4LmlbDvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBmb3JtYXQ6ICUlKGFsaWduOjx3aWR0aD4sPHBvc2l0aW9uPikiCittc2dzdHIgIuacn+acm+eahOagvOW8j++8miUlKGFsaWduOjzlrr3luqY+LDzkvY3nva4+KSIKKworIzogcmVmLWZpbHRlci5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgcG9zaXRpb246JXMiCittc2dzdHIgIuacquiDveivhuWIq+eahOS9jee9ru+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6NDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aWR0aDolcyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qE5a695bqm77yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGFsaWduKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveivhuWIq+eahCAlJShhbGlnbikg5Y+C5pWw77yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgd2lkdGggZXhwZWN0ZWQgd2l0aCB0aGUgJSUoYWxpZ24pIGF0b20iCittc2dzdHIgIuWFg+e0oCAlJShhbGlnbikg6ZyA6KaB5LiA5Liq5q2j5pWw55qE5a695bqmIgorCisjOiByZWYtZmlsdGVyLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShpZikgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoQgJSUoaWYpIOWPguaVsO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6NTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICLmoLzlvI/plJnor6/nmoTlrZfmrrXlkI3vvJolLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmllbGQgbmFtZTogJS4qcyIKK21zZ3N0ciAi5pyq55+l55qE5a2X5q615ZCN77yaJS4qcyIKKworIzogcmVmLWZpbHRlci5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgZmllbGQgJyUuKnMnIHJlcXVpcmVzIGFjY2VzcyB0byBvYmplY3QgZGF0YSIKK21zZ3N0ciAi5LiN5piv5LiA5LiqIGdpdCDku5PlupPvvIzkvYbmmK/lrZfmrrUgJyUuKnMnIOmcgOimgeiuv+mXruWvueixoeaVsOaNriIKKworIzogcmVmLWZpbHRlci5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGlmKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIuagvOW8j++8muS9v+eUqOS6hiAlJShpZikg5YWD57Sg6ICM5rKh5pyJICUlKHRoZW4pIOWFg+e0oCIKKworIzogcmVmLWZpbHRlci5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLmoLzlvI/vvJrkvb/nlKjkuoYgJSUodGhlbikg5YWD57Sg6ICM5rKh5pyJICUlKGlmKSDlhYPntKAiCisKKyM6IHJlZi1maWx0ZXIuYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJSh0aGVuKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIuagvOW8j++8miUlKHRoZW4pIOWFg+e0oOeUqOS6huWkmuasoSIKKworIzogcmVmLWZpbHRlci5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBhZnRlciAlJShlbHNlKSIKK21zZ3N0ciAi5qC85byP77yaJSUodGhlbikg5YWD57Sg55So5Zyo5LqGICUlKGVsc2UpIOS5i+WQjiIKKworIzogcmVmLWZpbHRlci5jOjgwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGFuICUlKGlmKSBhdG9tIgorbXNnc3RyICLmoLzlvI/vvJrkvb/nlKjkuoYgJSUoZWxzZSkg5YWD57Sg6ICM5rKh5pyJICUlKGlmKSDlhYPntKAiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgd2l0aG91dCBhICUlKHRoZW4pIGF0b20iCittc2dzdHIgIuagvOW8j++8muS9v+eUqOS6hiAlJShlbHNlKSDlhYPntKDogIzmsqHmnIkgJSUodGhlbikg5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6ODEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIG1vcmUgdGhhbiBvbmNlIgorbXNnc3RyICLmoLzlvI/vvJolJShlbHNlKSDlhYPntKDnlKjkuoblpJrmrKEiCisKKyM6IHJlZi1maWx0ZXIuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gdXNlZCB3aXRob3V0IGNvcnJlc3BvbmRpbmcgYXRvbSIKK21zZ3N0ciAi5qC85byP77ya5L2/55So5LqGICUlKGVuZCkg5YWD57Sg5Y205rKh5pyJ5a6D55qE5a+55bqU5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBmb3JtYXQgc3RyaW5nICVzIgorbXNnc3RyICLplJnor6/nmoTmoLzlvI/ljJblrZfnrKbkuLIgJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgcmViYXNpbmcgJXMiCittc2dzdHIgIumdnuWIhuaUr++8jOato+WPmOWfuiAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyBkZXRhY2hlZCBIRUFEICVzIgorbXNnc3RyICLpnZ7liIbmlK/vvIzmraPlj5jln7rliIbnprvlpLTmjIfpkoggJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMiCittc2dzdHIgIumdnuWIhuaUr++8jOS6jOWIhuafpeaJvuW8gOWni+S6jiAlcyIKKworIzogcmVmLWZpbHRlci5jOjE1MDQKK21zZ2lkICJubyBicmFuY2giCittc2dzdHIgIumdnuWIhuaUryIKKworIzogcmVmLWZpbHRlci5jOjE1NDAgcmVmLWZpbHRlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIgorbXNnc3RyICLnvLrlpLEgJTIkcyDnmoTlr7nosaEgJTEkcyIKKworIzogcmVmLWZpbHRlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIgorbXNnc3RyICJwYXJzZV9vYmplY3RfYnVmZmVyIOWksei0peS6jiAlMiRzIOeahCAlMSRzIgorCisjOiByZWYtZmlsdGVyLmM6MjAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIuagvOW8j+mUmeivr+eahOWvueixoSAnJXMnIgorCisjOiByZWYtZmlsdGVyLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSAlcyIKK21zZ3N0ciAi5b+955Wl5bim5pyJ6ZSZ6K+v5ZCN56ewICVzIOeahOW8leeUqCIKKworIzogcmVmLWZpbHRlci5jOjIzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbmQpIGF0b20gbWlzc2luZyIKK21zZ3N0ciAi5qC85byP77ya57y65bCRICUlKGVuZCkg5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6MjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW1lcmdlZCIKK21zZ3N0ciAi6YCJ6aG5IGAlcycg5ZKMIC0tbWVyZ2VkIOS4jeWFvOWuuSIKKworIzogcmVmLWZpbHRlci5jOjI0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQiCittc2dzdHIgIumAiemhuSBgJXMnIOWSjCAtLW5vLW1lcmdlZCDkuI3lhbzlrrkiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi5qC85byP6ZSZ6K+v55qE5a+56LGh5ZCNICVzIgorCisjOiByZWYtZmlsdGVyLmM6MjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBtdXN0IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICLpgInpobkgYCVzJyDlv4XpobvmjIflkJHkuIDkuKrmj5DkuqQiCisKKyM6IHJlbW90ZS5jOjM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIgorbXNnc3RyICLphY3nva7nmoTov5znqIvnn63lkI3np7DkuI3og73ku6UgJy8nIOW8gOWni++8miVzIgorCisjOiByZW1vdGUuYzo0MTMKK21zZ2lkICJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIuaPkOS+m+S6huS4gOS4quS7peS4iueahCByZWNlaXZlcGFja++8jOS9v+eUqOesrOS4gOS4qiIKKworIzogcmVtb3RlLmM6NDIxCittc2dpZCAibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiCittc2dzdHIgIuaPkOS+m+S6huS4gOS4quS7peS4iueahCB1cGxvYWRwYWNr77yM5L2/55So56ys5LiA5LiqIgorCisjOiByZW1vdGUuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICLkuI3og73lkIzml7bojrflj5YgJXMg5ZKMICVzIOiHsyAlcyIKKworIzogcmVtb3RlLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVzdWFsbHkgdHJhY2tzICVzLCBub3QgJXMiCittc2dzdHIgIiVzIOmAmuW4uOi3n+i4qiAlc++8jOiAjOmdniAlcyIKKworIzogcmVtb3RlLmM6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIKK21zZ3N0ciAiJXMg5ZCM5pe26Lef6LiqICVzIOWSjCAlcyIKKworIzogcmVtb3RlLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgImtleSAnJXMnIG9mIHBhdHRlcm4gaGFkIG5vICcqJyIKK21zZ3N0ciAi5qih5byP55qE6ZSuICclcycg5rKh5pyJICcqJyIKKworIzogcmVtb3RlLmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbHVlICclcycgb2YgcGF0dGVybiBoYXMgbm8gJyonIgorbXNnc3RyICLmqKHlvI/nmoTlgLwgJyVzJyDmsqHmnIkgJyonIgorCisjOiByZW1vdGUuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueSIKK21zZ3N0ciAi5rqQ5byV55So6KGo6L6+5byPICVzIOayoeacieWMuemFjSIKKworIzogcmVtb3RlLmM6MTAwOAorIywgYy1mb3JtYXQKK21zZ2lkICJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUiCittc2dzdHIgIua6kOW8leeUqOihqOi+vuW8jyAlcyDljLnphY3otoXov4fkuIDkuKoiCisKKyMuIFRSQU5TTEFUT1JTOiAibWF0Y2hlcyAnJXMnJSIgaXMgdGhlIDxkc3Q+IHBhcnQgb2YgImdpdCBwdXNoCisjLiA8cmVtb3RlPiA8c3JjPjo8ZHN0PiIgcHVzaCwgYW5kICJiZWluZyBwdXNoZWQgKCclcycpIiBpcworIy4gdGhlIDxzcmM+LgorIy4KKyM6IHJlbW90ZS5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBkZXN0aW5hdGlvbiB5b3UgcHJvdmlkZWQgaXMgbm90IGEgZnVsbCByZWZuYW1lIChpLmUuLFxuIgorInN0YXJ0aW5nIHdpdGggXCJyZWZzL1wiKS4gV2UgdHJpZWQgdG8gZ3Vlc3Mgd2hhdCB5b3UgbWVhbnQgYnk6XG4iCisiXG4iCisiLSBMb29raW5nIGZvciBhIHJlZiB0aGF0IG1hdGNoZXMgJyVzJyBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiLSBDaGVja2luZyBpZiB0aGUgPHNyYz4gYmVpbmcgcHVzaGVkICgnJXMnKVxuIgorIiAgaXMgYSByZWYgaW4gXCJyZWZzL3toZWFkcyx0YWdzfS9cIi4gSWYgc28gd2UgYWRkIGEgY29ycmVzcG9uZGluZ1xuIgorIiAgcmVmcy97aGVhZHMsdGFnc30vIHByZWZpeCBvbiB0aGUgcmVtb3RlIHNpZGUuXG4iCisiXG4iCisiTmVpdGhlciB3b3JrZWQsIHNvIHdlIGdhdmUgdXAuIFlvdSBtdXN0IGZ1bGx5IHF1YWxpZnkgdGhlIHJlZi4iCittc2dzdHIgIiIKKyLmgqjmj5DkvpvnmoTnm67moIfkuI3mmK/kuIDkuKrlrozmlbTnmoTlvJXnlKjlkI3np7DvvIjljbPku6UgXCJyZWZzL1wiIOW8gOWktO+8ieOAguaIkeS7rFxuIgorIuivleedgOeMnOa1i+aCqOeahOaDs+azle+8mlxuIgorIlxuIgorIi0g5Zyo6L+c56uv5p+l6K+i5ZKMICclcycg5Yy56YWN55qE5byV55So44CCXG4iCisiLSDmo4Dmn6XopoHmjqjpgIHnmoQgPHNyYz7vvIgnJXMn77yJ5piv5LiN5piv5ZyoIFwicmVmcy97aGVhZHMsdGFnc30vXCIg5Lit55qEXG4iCisiICDlvJXnlKjjgILlpoLmnpzmmK/vvIzmiJHku6zkvJrlnKjlr7nlupTnmoTov5znq6/mt7vliqAgcmVmcy97aGVhZHMsdGFnc30vIOWJjee8gOOAglxuIgorIlxuIgorIumDveS4jeihjO+8jOaJgOS7peaIkeS7rOW3suaUvuW8g+OAguaCqOW/hemhu+e7meWHuuWujOaVtOeahOW8leeUqOOAgiIKKworIzogcmVtb3RlLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBjb21taXQgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy9oZWFkcy8lcyc/IgorbXNnc3RyICIiCisi5byV55So6KGo6L6+5byP55qEIDxzcmM+IOaYr+S4gOS4quaPkOS6pOWvueixoeOAguaCqOaYr+aDs+WIm+W7uuS4gOS4quaWsOeahOWIhuaUr+iAjOWQkVxuIgorIiclczpyZWZzL2hlYWRzLyVzJyDmjqjpgIHkuYjvvJ8iCisKKyM6IHJlbW90ZS5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgdGFnIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gY3JlYXRlIGEgbmV3IHRhZyBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisi5byV55So6KGo6L6+5byP55qEIDxzcmM+IOaYr+S4gOS4quagh+etvuWvueixoeOAguaCqOaYr+aDs+WIm+W7uuS4gOS4quaWsOeahOagh+etvuiAjOWQkVxuIgorIiclczpyZWZzL3RhZ3MvJXMnIOaOqOmAgeS5iO+8nyIKKworIzogcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0cmVlIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IHRyZWUgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIuW8leeUqOihqOi+vuW8j+eahCA8c3JjPiDmmK/kuIDkuKrmoJHlr7nosaHjgILmgqjmmK/mg7PkuLrov5nkuKrmoJHlr7nosaHliJvlu7rmoIfnrb7ogIzlkJFcbiIKKyInJXM6cmVmcy90YWdzLyVzJyDmjqjpgIHkuYjvvJ8iCisKKyM6IHJlbW90ZS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSA8c3JjPiBwYXJ0IG9mIHRoZSByZWZzcGVjIGlzIGEgYmxvYiBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIHRhZyBhIG5ldyBibG9iIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLlvJXnlKjooajovr7lvI/nmoQgPHNyYz4g5piv5LiA5Liq5pWw5o2u5a+56LGh44CC5oKo5piv5oOz5Li66L+Z5Liq5pWw5o2u5a+56LGh5Yib5bu65qCH562+6ICM5ZCRXG4iCisiJyVzOnJlZnMvdGFncy8lcycg5o6o6YCB5LmI77yfIgorCisjOiByZW1vdGUuYzoxMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGNhbm5vdCBiZSByZXNvbHZlZCB0byBicmFuY2giCittc2dzdHIgIiVzIOaXoOazleiiq+ino+aekOS4uuWIhuaUryIKKworIzogcmVtb3RlLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVsZXRlICclcyc6IHJlbW90ZSByZWYgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuaXoOazleWIoOmZpCAnJXMn77ya6L+c56iL5byV55So5LiN5a2Y5ZyoIgorCisjOiByZW1vdGUuYzoxMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAi55uu5qCH5byV55So6KGo6L6+5byPICVzIOWMuemFjei2hei/h+S4gOS4qiIKKworIzogcmVtb3RlLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMiCittc2dzdHIgIuebruagh+W8leeUqCAlcyDmjqXmlLbotoXov4fkuIDkuKrmupAiCisKKyM6IHJlbW90ZS5jOjE2MjcgcmVtb3RlLmM6MTcyOAorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUQg5rKh5pyJ5oyH5ZCR5LiA5Liq5YiG5pSvIgorCisjOiByZW1vdGUuYzoxNjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICLmsqHmnInmraTliIbmlK/vvJonJXMnIgorCisjOiByZW1vdGUuYzoxNjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICLlsJrmnKrnu5nliIbmlK8gJyVzJyDorr7nva7kuIrmuLgiCisKKyM6IHJlbW90ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIuS4iua4uOWIhuaUryAnJXMnIOayoeacieWtmOWCqOS4uuS4gOS4qui/nOeoi+i3n+i4quWIhuaUryIKKworIzogcmVtb3RlLmM6MTY2MAorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi5o6o6YCB55uu5qCHICclcycg6Iez6L+c56iLICclcycg5rKh5pyJ5pys5Zyw6Lef6Liq5YiG5pSvIgorCisjOiByZW1vdGUuYzoxNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgIuWIhuaUryAnJXMnIOayoeacieiuvue9ruimgeaOqOmAgeeahOi/nOeoi+acjeWKoeWZqCIKKworIzogcmVtb3RlLmM6MTY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIuWQkSAnJXMnIOaOqOmAgeW8leeUqOinhOagvOacquWMheWQqyAnJXMnIgorCisjOiByZW1vdGUuYzoxNjk1Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICLmjqjpgIHml6Dnm67moIfvvIhwdXNoLmRlZmF1bHQg5pivICdub3RoaW5nJ++8iSIKKworIzogcmVtb3RlLmM6MTcxNworbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIuaXoOazleino+aekCAnc2ltcGxlJyDmjqjpgIHoh7PkuIDkuKrljZXni6znmoTnm67moIciCisKKyM6IHJlbW90ZS5jOjE4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIgorbXNnc3RyICLml6Dms5Xmib7liLDov5znqIvlvJXnlKggJXMiCisKKyM6IHJlbW90ZS5jOjE4NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiBJZ25vcmluZyBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IgorbXNnc3RyICIqIOWcqOacrOWcsOW/veeVpeWPr+eskeeahOW8leeUqCAnJXMnIgorCisjOiByZW1vdGUuYzoyMDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAi5oKo55qE5YiG5pSv5Z+65LqOICclcyfvvIzkvYbmraTkuIrmuLjliIbmlK/lt7Lnu4/kuI3lrZjlnKjjgIJcbiIKKworIzogcmVtb3RlLmM6MjAyMworbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIOadpeS/ruWkje+8iVxuIgorCisjOiByZW1vdGUuYzoyMDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICLmgqjnmoTliIbmlK/kuI7kuIrmuLjliIbmlK8gJyVzJyDkuIDoh7TjgIJcbiIKKworIzogcmVtb3RlLmM6MjAzMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBhbmQgJyVzJyByZWZlciB0byBkaWZmZXJlbnQgY29tbWl0cy5cbiIKK21zZ3N0ciAi5oKo55qE5YiG5pSv5ZKMICclcycg5oyH5ZCR5LiN5ZCM55qE5o+Q5Lqk44CCXG4iCisKKyM6IHJlbW90ZS5jOjIwMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiJXNcIiBmb3IgZGV0YWlscylcbiIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCIlc1wiIOafpeeci+ivpuaDhe+8iVxuIgorCisjOiByZW1vdGUuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIuaCqOeahOWIhuaUr+mihuWFiCAnJXMnIOWFsSAlZCDkuKrmj5DkuqTjgIJcbiIKK21zZ3N0clsxXSAi5oKo55qE5YiG5pSv6aKG5YWIICclcycg5YWxICVkIOS4quaPkOS6pOOAglxuIgorCisjOiByZW1vdGUuYzoyMDQzCittc2dpZCAiICAodXNlIFwiZ2l0IHB1c2hcIiB0byBwdWJsaXNoIHlvdXIgbG9jYWwgY29tbWl0cylcbiIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcHVzaFwiIOadpeWPkeW4g+aCqOeahOacrOWcsOaPkOS6pO+8iVxuIgorCisjOiByZW1vdGUuYzoyMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIuaCqOeahOWIhuaUr+iQveWQjiAnJXMnIOWFsSAlZCDkuKrmj5DkuqTvvIzlubbkuJTlj6/ku6Xlv6vov5vjgIJcbiIKK21zZ3N0clsxXSAi5oKo55qE5YiG5pSv6JC95ZCOICclcycg5YWxICVkIOS4quaPkOS6pO+8jOW5tuS4lOWPr+S7peW/q+i/m+OAglxuIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHJlbW90ZS5jOjIwNTQKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcHVsbFwiIOadpeabtOaWsOaCqOeahOacrOWcsOWIhuaUr++8iVxuIgorCisjOiByZW1vdGUuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorIuaCqOeahOWIhuaUr+WSjCAnJXMnIOWHuueOsOS6huWBj+emu++8jFxuIgorIuW5tuS4lOWIhuWIq+aciSAlZCDlkowgJWQg5aSE5LiN5ZCM55qE5o+Q5Lqk44CCXG4iCittc2dzdHJbMV0gIiIKKyLmgqjnmoTliIbmlK/lkowgJyVzJyDlh7rnjrDkuoblgY/nprvvvIxcbiIKKyLlubbkuJTliIbliKvmnIkgJWQg5ZKMICVkIOWkhOS4jeWQjOeahOaPkOS6pOOAglxuIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHJlbW90ZS5jOjIwNjcKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHB1bGxcIiDmnaXlkIjlubbov5znqIvliIbmlK/vvIlcbiIKKworIzogcmVtb3RlLmM6MjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgZXhwZWN0ZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5pyf5pyb55qE5a+56LGh5ZCNICclcyciCisKKyM6IHJlcGxhY2Utb2JqZWN0LmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcGxhY2UgcmVmIG5hbWU6ICVzIgorbXNnc3RyICLplJnor6/nmoTmm7/mjaLlvJXnlKjlkI3np7DvvJolcyIKKworIzogcmVwbGFjZS1vYmplY3QuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgcmVwbGFjZSByZWY6ICVzIgorbXNnc3RyICLph43lpI3nmoTmm7/mjaLlvJXnlKjvvJolcyIKKworIzogcmVwbGFjZS1vYmplY3QuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIGRlcHRoIHRvbyBoaWdoIGZvciBvYmplY3QgJXMiCittc2dzdHIgIuWvueixoSAlcyDnmoTmm7/mjaLlsYLnuqflpKrmt7EiCisKKyM6IHJlcmVyZS5jOjIxNyByZXJlcmUuYzoyMjYgcmVyZXJlLmM6MjI5Cittc2dpZCAiY29ycnVwdCBNRVJHRV9SUiIKK21zZ3N0ciAi5o2f5Z2P55qEIE1FUkdFX1JSIgorCisjOiByZXJlcmUuYzoyNjQgcmVyZXJlLmM6MjY5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiCittc2dzdHIgIuaXoOazleWGmeWFpSByZXJlcmUg6K6w5b2VIgorCisjOiByZXJlcmUuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlcmUgd2VyZSBlcnJvcnMgd2hpbGUgd3JpdGluZyAnJXMnICglcykiCittc2dzdHIgIuWGmeWFpSAnJXMnICglcykg5pe25Ye66ZSZIgorCisjOiByZXJlcmUuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZsdXNoICclcyciCittc2dzdHIgIuWIt+aWsCAnJXMnIOWksei0pSIKKworIzogcmVyZXJlLmM6NTAzIHJlcmVyZS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciCittc2dzdHIgIuS4jeiDveino+aekCAnJXMnIOS4reeahOWGsueqgeWdlyIKKworIzogcmVyZXJlLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB1dGltZSgpIG9uICclcyciCittc2dzdHIgIuWcqCAnJXMnIOS4iuiwg+eUqCB1dGltZSgpIOWksei0pSIKKworIzogcmVyZXJlLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIuWGmeWFpSAnJXMnIOWksei0pSIKKworIzogcmVyZXJlLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0YWdlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICLkvb/nlKjkuYvliY3nmoTop6PlhrPmlrnmoYjmmoLlrZggJyVzJ+OAgiIKKworIzogcmVyZXJlLmM6NzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuIgorbXNnc3RyICLlt7LorrDlvZUgJyVzJyDnmoTop6PlhrPmlrnmoYjjgIIiCisKKyM6IHJlcmVyZS5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uIgorbXNnc3RyICLkvb/nlKjkuYvliY3nmoTop6PlhrPmlrnmoYjop6PlhrMgJyVzJ+OAgiIKKworIzogcmVyZXJlLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgc3RyYXkgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yig6ZmkIHN0cmF5ICclcyciCisKKyM6IHJlcmVyZS5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNvcmRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAi5Li6ICclcycg6K6w5b2VIHByZWltYWdlIgorCisjOiByZXJlcmUuYzo4ODEgc3VibW9kdWxlLmM6MjA2NyBidWlsdGluL2xvZy5jOjE4NzEKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDM2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uuebruW9lSAnJXMnIgorCisjOiByZXJlcmUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgY29uZmxpY3RlZCBzdGF0ZSBpbiAnJXMnIgorbXNnc3RyICLmm7TmlrAgJyVzJyDkuK3nmoTlhrLnqoHnirbmgIHlpLHotKUiCisKKyM6IHJlcmVyZS5jOjEwNjggcmVyZXJlLmM6MTA3NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZW1lbWJlcmVkIHJlc29sdXRpb24gZm9yICclcyciCittc2dzdHIgIuayoeacieS4uiAnJXMnIOiusOW/hueahOino+WGs+aWueahiCIKKworIzogcmVyZXJlLmM6MTA3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgdW5saW5rICclcyciCittc2dzdHIgIuS4jeiDveWIoOmZpCAnJXMnIgorCisjOiByZXJlcmUuYzoxMDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgcHJlaW1hZ2UgZm9yICclcyciCittc2dzdHIgIuW3suS4uiAnJXMnIOabtOaWsCBwcmVpbWFnZSIKKworIzogcmVyZXJlLmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGb3Jnb3QgcmVzb2x1dGlvbiBmb3IgJyVzJ1xuIgorbXNnc3RyICLlv5jorrAgJyVzJyDnmoTop6PlhrPmlrnmoYhcbiIKKworIzogcmVyZXJlLmM6MTE5OQorbXNnaWQgInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIKK21zZ3N0ciAi5LiN6IO95omT5byAIHJyLWNhY2hlIOebruW9lSIKKworIzogcmV2aXNpb24uYzoyNDk3Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAi5oKo55qE5b2T5YmN5YiG5pSv5aW95YOP6KKr5o2f5Z2PIgorCisjOiByZXZpc2lvbi5jOjI1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICLmgqjnmoTlvZPliY3liIbmlK8gJyVzJyDlsJrml6Dku7vkvZXmj5DkuqQiCisKKyM6IHJldmlzaW9uLmM6MjcwOAorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDkuI4gLS1iaXNlY3Qg5LiN5YW85a65IgorCisjOiByZXZpc2lvbi5jOjI3MTIKK21zZ2lkICItTCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBkaWZmIGZvcm1hdHMgYmVzaWRlcyAtcCBhbmQgLXMiCittc2dzdHIgIi1MIOWwmuS4jeaUr+aMgSAtcCDlkowgLXMg5LmL5aSW55qE5beu5byC5qC85byPIgorCisjOiBydW4tY29tbWFuZC5jOjc2MgorbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAi5LiN6IO95omT5byAIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgYXN5bmMgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6IGFzeW5jIOe6v+eoi++8miVzIgorCisjOiBydW4tY29tbWFuZC5jOjEzMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAnJXMnIGhvb2sgd2FzIGlnbm9yZWQgYmVjYXVzZSBpdCdzIG5vdCBzZXQgYXMgZXhlY3V0YWJsZS5cbiIKKyJZb3UgY2FuIGRpc2FibGUgdGhpcyB3YXJuaW5nIHdpdGggYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYC4iCittc2dzdHIgIiIKKyLlm6DkuLrmsqHmnInlsIbpkqnlrZAgJyVzJyDorr7nva7kuLrlj6/miafooYzvvIzpkqnlrZDooqvlv73nlaXjgILmgqjlj6/ku6XpgJrov4dcbiIKKyLphY3nva4gYGdpdCBjb25maWcgYWR2aWNlLmlnbm9yZWRIb29rIGZhbHNlYCDmnaXlhbPpl63ov5nmnaHorablkYrjgIIiCisKKyM6IHNlbmQtcGFjay5jOjE0NAorbXNnaWQgInVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0IHdoaWxlIHJlYWRpbmcgcmVtb3RlIHVucGFjayBzdGF0dXMiCittc2dzdHIgIuivu+WPlui/nOeoi+ino+WMheeKtuaAgeaXtuaUtuWIsOaEj+WklueahCBmbHVzaCDljIUiCisKKyM6IHNlbmQtcGFjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgcmVtb3RlIHVucGFjayBzdGF0dXM6ICVzIgorbXNnc3RyICLkuI3og73op6PmnpDov5znqIvop6PljIXnirbmgIHvvJolcyIKKworIzogc2VuZC1wYWNrLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSB1bnBhY2sgZmFpbGVkOiAlcyIKK21zZ3N0ciAi6L+c56iL6Kej5YyF5aSx6LSl77yaJXMiCisKKyM6IHNlbmQtcGFjay5jOjMwOQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICLkuLrmjqjpgIHor4Hkuabnrb7lkI3lpLHotKUiCisKKyM6IHNlbmQtcGFjay5jOjQyMworbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAi5o6l5pS256uv5LiN5pSv5oyB562+5ZCN5o6o6YCBIgorCisjOiBzZW5kLXBhY2suYzo0MjUKK21zZ2lkICIiCisibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS0iCisic2lnbmVkIHB1c2giCittc2dzdHIgIuacquWPkemAgeaOqOmAgeivgeS5pu+8jOWboOS4uuaOpeaUtuerr+S4jeaUr+aMgeetvuWQjeaOqOmAgSIKKworIzogc2VuZC1wYWNrLmM6NDM3Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICLmjqXmlLbnq6/kuI3mlK/mjIHljp/lrZDmjqjpgIEiCisKKyM6IHNlbmQtcGFjay5jOjQ0MgorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIgorbXNnc3RyICLmjqXmlLbnq6/kuI3mlK/mjIHmjqjpgIHpgInpobkiCisKKyM6IHNlcXVlbmNlci5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBtZXNzYWdlIGNsZWFudXAgbW9kZSAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTmj5DkuqTkv6Hmga/muIXnkIbmqKHlvI8gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Yig6ZmkICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMxMyBidWlsdGluL3JlYmFzZS5jOjc4MSBidWlsdGluL3JlYmFzZS5jOjE3MDYgYnVpbHRpbi9ybS5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlICclcyciCittc2dzdHIgIuaXoOazleWIoOmZpCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozMjMKK21zZ2lkICJyZXZlcnQiCittc2dzdHIgIui/mOWOnyIKKworIzogc2VxdWVuY2VyLmM6MzI1Cittc2dpZCAiY2hlcnJ5LXBpY2siCittc2dzdHIgIuaLo+mAiSIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAicmViYXNlIC1pIgorbXNnc3RyICJyZWJhc2UgLWkiCisKKyM6IHNlcXVlbmNlci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGFjdGlvbjogJWQiCittc2dzdHIgIuacquefpeWKqOS9nO+8miVkIgorCisjOiBzZXF1ZW5jZXIuYzozODcKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorIuWGsueqgeino+WGs+WujOavleWQju+8jOeUqCAnZ2l0IGFkZCA86Lev5b6EPicg5oiWICdnaXQgcm0gPOi3r+W+hD4nXG4iCisi5ZG95Luk5qCH6K6w5L+u5q2j5ZCO55qE5paH5Lu2IgorCisjOiBzZXF1ZW5jZXIuYzozOTAKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorIuWGsueqgeino+WGs+WujOavleWQju+8jOeUqCAnZ2l0IGFkZCA86Lev5b6EPicg5oiWICdnaXQgcm0gPOi3r+W+hD4nXG4iCisi5a+55L+u5q2j5ZCO55qE5paH5Lu25YGa5qCH6K6w77yM54S25ZCO55SoICdnaXQgY29tbWl0JyDmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjQwMyBzZXF1ZW5jZXIuYzoyOTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb2NrICclcyciCittc2dzdHIgIuS4jeiDvemUgeWumiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIgorbXNnc3RyICLkuI3og73lsIbmjaLooYznrKblhpnlhaUgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDE1IHNlcXVlbmNlci5jOjI3OTggc2VxdWVuY2VyLmM6Mjk5OSBzZXF1ZW5jZXIuYzozMDEzCisjOiBzZXF1ZW5jZXIuYzozMjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIgorbXNnc3RyICLml6Dms5XlrozmiJAgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDM4IHNlcXVlbmNlci5jOjE3MDcgc2VxdWVuY2VyLmM6MjgxOCBzZXF1ZW5jZXIuYzozMjU5CisjOiBzZXF1ZW5jZXIuYzozMzY4IGJ1aWx0aW4vYW0uYzoyNDQgYnVpbHRpbi9jb21taXQuYzo3ODMgYnVpbHRpbi9tZXJnZS5jOjExMTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIuS4jeiDveivu+WPliAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIKK21zZ3N0ciAi5oKo55qE5pys5Zyw5L+u5pS55bCG6KKrJXPopobnm5bjgIIiCisKKyM6IHNlcXVlbmNlci5jOjQ2OAorbXNnaWQgImNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAi5o+Q5Lqk5oKo55qE5L+u5pS55oiW6LSu6JeP5ZCO5YaN57un57ut44CCIgorCisjOiBzZXF1ZW5jZXIuYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiJXPvvJrlv6vov5siCisKKyM6IHNlcXVlbmNlci5jOjUzOSBidWlsdGluL3RhZy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAi5peg5pWI55qE5riF55CG5qih5byPICVzIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorIy4gInJlYmFzZSAtaSIuCisjLgorIzogc2VxdWVuY2VyLmM6NjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiVz77ya5peg5rOV5YaZ5YWl5paw57Si5byV5paH5Lu2IgorCisjOiBzZXF1ZW5jZXIuYzo2NTAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWUiCittc2dzdHIgIuS4jeiDveabtOaWsOe8k+WtmOagkSIKKworIzogc2VxdWVuY2VyLmM6NjY0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIOaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGtleSBwcmVzZW50IGluICclLipzJyIKK21zZ3N0ciAi5ZyoICclLipzJyDkuK3msqHmnIkga2V5IgorCisjOiBzZXF1ZW5jZXIuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Li6ICclcycg55qE5YC85Y675byV5Y+3IgorCisjOiBzZXF1ZW5jZXIuYzo3OTIgd3JhcHBlci5jOjE5MCB3cmFwcGVyLmM6MzYwIGJ1aWx0aW4vYW0uYzo3MDUKKyM6IGJ1aWx0aW4vYW0uYzo3OTcgYnVpbHRpbi9tZXJnZS5jOjExMTQgYnVpbHRpbi9yZWJhc2UuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIuaXoOazleaJk+W8gCAnJXMnIOi/m+ihjOivu+WPliIKKworIzogc2VxdWVuY2VyLmM6ODAyCittc2dpZCAiJ0dJVF9BVVRIT1JfTkFNRScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAi5bey57uP57uZ5Ye6ICdHSVRfQVVUSE9SX05BTUUnIgorCisjOiBzZXF1ZW5jZXIuYzo4MDcKK21zZ2lkICInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAi5bey57uP57uZ5Ye6ICdHSVRfQVVUSE9SX0VNQUlMJyIKKworIzogc2VxdWVuY2VyLmM6ODEyCittc2dpZCAiJ0dJVF9BVVRIT1JfREFURScgYWxyZWFkeSBnaXZlbiIKK21zZ3N0ciAi5bey57uP57uZ5Ye6ICdHSVRfQVVUSE9SX0RBVEUnIgorCisjOiBzZXF1ZW5jZXIuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICLmnKrnn6Xlj5jph48gJyVzJyIKKworIzogc2VxdWVuY2VyLmM6ODIxCittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9OQU1FJyIKK21zZ3N0ciAi57y65bCRICdHSVRfQVVUSE9SX05BTUUnIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0VNQUlMJyIKK21zZ3N0ciAi57y65bCRICdHSVRfQVVUSE9SX0VNQUlMJyIKKworIzogc2VxdWVuY2VyLmM6ODI1Cittc2dpZCAibWlzc2luZyAnR0lUX0FVVEhPUl9EQVRFJyIKK21zZ3N0ciAi57y65bCRICdHSVRfQVVUSE9SX0RBVEUnIgorCisjOiBzZXF1ZW5jZXIuYzo5MDIgc2VxdWVuY2VyLmM6MTQyNworbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorbXNnc3RyICLplJnor6/nmoTouqvku73kv6Hmga8iCisKKyM6IHNlcXVlbmNlci5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisi5oKo55qE5bel5L2c5Yy65Lit5a2Y5Zyo5bey5pqC5a2Y55qE5L+u5pS5XG4iCisi5aaC5p6c6L+Z5Lqb5L+u5pS56ZyA6KaB6KKr5bm25YWl5YmN5LiA5Liq5o+Q5Lqk77yM5omn6KGM77yaXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyLlpoLmnpzov5nkupvkv67mlLnopoHlvaLmiJDkuIDkuKrmlrDmj5DkuqTvvIzmiafooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyLml6Dorrrlk6rnp43mg4XlhrXvvIzlvZPmgqjlrozmiJDmj5DkuqTvvIznu6fnu63miafooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjE4Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgIidwcmVwYXJlLWNvbW1pdC1tc2cnIOmSqeWtkOWksei0pSIKKworIzogc2VxdWVuY2VyLmM6MTIyNAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIuaCqOeahOWnk+WQjeWSjOmCruS7tuWcsOWdgOWfuuS6jueZu+W9leWQjeWSjOS4u+acuuWQjei/m+ihjOS6huiHquWKqOiuvue9ruOAguivt+ajgOafpeWug+S7rOato+ehrlxuIgorIuS4juWQpuOAguaCqOWPr+S7peWvueWFtui/m+ihjOiuvue9ruS7peWFjeWGjeWHuueOsOacrOaPkOekuuS/oeaBr+OAgui/kOihjOWmguS4i+WRveS7pOWcqOe8lui+keWZqFxuIgorIuS4ree8lui+keaCqOeahOmFjee9ruaWh+S7tu+8mlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIuiuvue9ruWujOavleWQju+8jOaCqOWPr+S7peeUqOS4i+mdoueahOWRveS7pOadpeS/ruato+acrOasoeaPkOS6pOaJgOS9v+eUqOeahOeUqOaIt+i6q+S7ve+8mlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIzNworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIuaCqOeahOWnk+WQjeWSjOmCruS7tuWcsOWdgOWfuuS6jueZu+W9leWQjeWSjOS4u+acuuWQjei/m+ihjOS6huiHquWKqOiuvue9ruOAguivt+ajgOafpeWug+S7rOato+ehrlxuIgorIuS4juWQpuOAguaCqOWPr+S7peWvueWFtui/m+ihjOiuvue9ruS7peWFjeWGjeWHuueOsOacrOaPkOekuuS/oeaBr++8mlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyLorr7nva7lrozmr5XlkI7vvIzmgqjlj6/ku6XnlKjkuIvpnaLnmoTlkb3ku6TmnaXkv67mraPmnKzmrKHmj5DkuqTmiYDkvb/nlKjnmoTnlKjmiLfouqvku73vvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyNzkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLml6Dms5Xmib7liLDmlrDliJvlu7rnmoTmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjEyODEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIuS4jeiDveino+aekOaWsOWIm+W7uueahOaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MTMyNworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICLliJvlu7rmj5DkuqTlkI7vvIzkuI3og73op6PmnpAgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTMyOQorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIuWIhuemu+WktOaMh+mSiCIKKworIyAg6K+R6ICF77ya5Lit5paH5a2X56ym5Liy5ou85o6l77yM5Y+v5Yig6Zmk5YmN5a+856m65qC8CisjOiBzZXF1ZW5jZXIuYzoxMzMzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIu+8iOagueaPkOS6pO+8iSIKKworIzogc2VxdWVuY2VyLmM6MTM1NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIkhFQUQgJXMg5LiN5piv5LiA5Liq5o+Q5Lqk77yBIgorCisjOiBzZXF1ZW5jZXIuYzoxMzYwIHNlcXVlbmNlci5jOjE0NTggYnVpbHRpbi9jb21taXQuYzoxNTY5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCDmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjE0MTEgc2VxdWVuY2VyLmM6MjA1NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICLkuI3og73op6PmnpDmj5DkuqTkvZzogIUiCisKKyM6IHNlcXVlbmNlci5jOjE0MzEKK21zZ2lkICJjb3JydXB0ZWQgYXV0aG9yIHdpdGhvdXQgZGF0ZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5o2f5Z2P55qE5rKh5pyJ5pel5pyf55qE5L2c6ICF5L+h5oGvIgorCisjOiBzZXF1ZW5jZXIuYzoxNDQ3IGJ1aWx0aW4vYW0uYzoxNTYxIGJ1aWx0aW4vbWVyZ2UuYzo2ODQKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSDml6Dms5XlhpnlhaXmoJHlr7nosaEiCisKKyM6IHNlcXVlbmNlci5jOjE0ODAgc2VxdWVuY2VyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb21taXQgbWVzc2FnZSBmcm9tICclcyciCittc2dzdHIgIuS4jeiDveS7jiAnJXMnIOivu+WPluaPkOS6pOivtOaYjiIKKworIzogc2VxdWVuY2VyLmM6MTUxNiBidWlsdGluL2FtLmM6MTU4MyBidWlsdGluL2NvbW1pdC5jOjE2NjggYnVpbHRpbi9tZXJnZS5jOjg4MworIzogYnVpbHRpbi9tZXJnZS5jOjkwOAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICLlhpnmj5DkuqTlr7nosaHlpLHotKUiCisKKyM6IHNlcXVlbmNlci5jOjE1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5o+Q5LqkICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICLkuI3og73op6PmnpDniLbmj5DkuqQgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE2NTYgc2VxdWVuY2VyLmM6MTc2NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQ6ICVkIgorbXNnc3RyICLmnKrnn6Xlkb3ku6TvvJolZCIKKworIzogc2VxdWVuY2VyLmM6MTcxNCBzZXF1ZW5jZXIuYzoxNzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAlZCBjb21taXRzLiIKK21zZ3N0ciAi6L+Z5piv5LiA5LiqICVkIOS4quaPkOS6pOeahOe7hOWQiOOAgiIKKworIzogc2VxdWVuY2VyLmM6MTcyNAorbXNnaWQgIm5lZWQgYSBIRUFEIHRvIGZpeHVwIgorbXNnc3RyICLpnIDopoHkuIDkuKogSEVBRCDmnaXkv67lpI0iCisKKyM6IHNlcXVlbmNlci5jOjE3MjYgc2VxdWVuY2VyLmM6MzMwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQiCittc2dzdHIgIuS4jeiDveivu+WPliBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI4Cittc2dpZCAiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLkuI3og73or7vlj5YgSEVBRCDnmoTmj5DkuqTor7TmmI4iCisKKyM6IHNlcXVlbmNlci5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICclcyciCittc2dzdHIgIuS4jeiDveWGmSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNzQxIGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTYKK21zZ2lkICJUaGlzIGlzIHRoZSAxc3QgY29tbWl0IG1lc3NhZ2U6IgorbXNnc3RyICLov5nmmK/nrKzkuIDkuKrmj5DkuqTor7TmmI7vvJoiCisKKyM6IHNlcXVlbmNlci5jOjE3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiCittc2dzdHIgIuS4jeiDveivu+WPliAlcyDnmoTmj5DkuqTor7TmmI4iCisKKyM6IHNlcXVlbmNlci5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIKK21zZ3N0ciAi6L+Z5piv5o+Q5Lqk6K+05piOICMlZO+8miIKKworIzogc2VxdWVuY2VyLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29tbWl0IG1lc3NhZ2UgIyVkIHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIuaPkOS6pOivtOaYjiAjJWQg5bCG6KKr6Lez6L+H77yaIgorCisjOiBzZXF1ZW5jZXIuYzoxODUwCittc2dpZCAieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAi5oKo55qE57Si5byV5paH5Lu25pyq5a6M5oiQ5ZCI5bm244CCIgorCisjOiBzZXF1ZW5jZXIuYzoxODU3Cittc2dpZCAiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IgorbXNnc3RyICLkuI3og73kv67lpI3moLnmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjE4NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICLmj5DkuqQgJXMg5piv5LiA5Liq5ZCI5bm25o+Q5Lqk5L2G5pyq5o+Q5L6bIC1tIOmAiemhueOAgiIKKworIzogc2VxdWVuY2VyLmM6MTg4NCBzZXF1ZW5jZXIuYzoxODkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAi5o+Q5LqkICVzIOayoeacieesrCAlZCDkuKrniLbmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjE4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIuS4jeiDveW+l+WIsCAlcyDnmoTmj5DkuqTor7TmmI4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSBhICJ0b2RvIiBjb21tYW5kIGxpa2UKKyMuICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuCisjOiBzZXF1ZW5jZXIuYzoxOTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXPvvJrkuI3og73op6PmnpDniLbmj5DkuqQgJXMiCisKKyM6IHNlcXVlbmNlci5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciCittc2dzdHIgIuS4jeiDveWwhiAnJXMnIOmHjeWRveWQjeS4uiAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgIuS4jeiDvei/mOWOnyAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIuS4jeiDveW6lOeUqCAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVz77ya5peg5rOV6K+75Y+W57Si5byVIgorCisjOiBzZXF1ZW5jZXIuYzoyMTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXPvvJrml6Dms5XliLfmlrDntKLlvJUiCisKKyM6IHNlcXVlbmNlci5jOjIxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIKK21zZ3N0ciAiJXMg5LiN5o6l5Y+X5Y+C5pWw77yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50cyBmb3IgJXMiCittc2dzdHIgIue8uuWwkSAlcyDnmoTlj4LmlbAiCisKKyM6IHNlcXVlbmNlci5jOjIyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclLipzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6QICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MjI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIuaXoOaViOihjCAlZO+8miUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjIzMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi5rKh5pyJ54i25o+Q5Lqk55qE5oOF5Ya15LiL5LiN6IO9ICclcyciCisKKyM6IHNlcXVlbmNlci5jOjIzNDggYnVpbHRpbi9yZWJhc2UuYzoxNzIgYnVpbHRpbi9yZWJhc2UuYzoxOTcKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjIzIGJ1aWx0aW4vcmViYXNlLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcycuIgorbXNnc3RyICLkuI3og73or7vlj5YgJyVzJ+OAgiIKKworIzogc2VxdWVuY2VyLmM6MjM4NAorbXNnaWQgImNhbmNlbGxpbmcgYSBjaGVycnkgcGlja2luZyBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5q2j5Zyo5Y+W5raI5LiA5Liq6L+b6KGM5Lit55qE5ouj6YCJIgorCisjOiBzZXF1ZW5jZXIuYzoyMzkxCittc2dpZCAiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5q2j5Zyo5Y+W5raI5LiA5Liq6L+b6KGM5Lit55qE6L+Y5Y6fIgorCisjOiBzZXF1ZW5jZXIuYzoyNDM1Cittc2dpZCAicGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIuivt+eUqCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycg5p2l5L+u5pS544CCIgorCisjOiBzZXF1ZW5jZXIuYzoyNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAnJXMnIgorbXNnc3RyICLkuI3lj6/nlKjnmoTmjIfku6TmuIXljZXvvJonJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNDQyCittc2dpZCAibm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICLmsqHmnInop6PmnpDmj5DkuqTjgIIiCisKKyM6IHNlcXVlbmNlci5jOjI0NTMKK21zZ2lkICJjYW5ub3QgY2hlcnJ5LXBpY2sgZHVyaW5nIGEgcmV2ZXJ0LiIKK21zZ3N0ciAi5LiN6IO95Zyo5Zue6YCA5Lit5omn6KGM5ouj6YCJ44CCIgorCisjOiBzZXF1ZW5jZXIuYzoyNDU1Cittc2dpZCAiY2Fubm90IHJldmVydCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIuS4jeiDveWcqOaLo+mAieS4reaJp+ihjOWbnumAgOOAgiIKKworIzogc2VxdWVuY2VyLmM6MjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiVzIOeahOWAvOaXoOaViO+8miVzIgorCisjOiBzZXF1ZW5jZXIuYzoyNjMwCittc2dpZCAidW51c2FibGUgc3F1YXNoLW9udG8iCittc2dzdHIgIuS4jeWPr+eUqOeahCBzcXVhc2gtb250byIKKworIzogc2VxdWVuY2VyLmM6MjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJyVzJyIKK21zZ3N0ciAi5qC85byP6ZSZ6K+v55qE6YCJ6aG55riF5Y2V77yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjczNiBzZXF1ZW5jZXIuYzo0NDYzCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgIuaPkOS+m+S6huepuueahOaPkOS6pOmbhiIKKworIzogc2VxdWVuY2VyLmM6Mjc1MgorbXNnaWQgInJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLkuIDkuKrov5jljp/mk43kvZzlt7LlnKjov5vooYwiCisKKyM6IHNlcXVlbmNlci5jOjI3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKK21zZ3N0ciAi5bCd6K+VIFwiZ2l0IHJldmVydCAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6Mjc1NworbXNnaWQgImNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuaLo+mAieaTjeS9nOW3suWcqOi/m+ihjCIKKworIzogc2VxdWVuY2VyLmM6Mjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIuWwneivlSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIKKworIzogc2VxdWVuY2VyLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yib5bu65bqP5YiX55uu5b2VICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI3ODgKK21zZ2lkICJjb3VsZCBub3QgbG9jayBIRUFEIgorbXNnc3RyICLkuI3og73plIHlrpogSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjg0OCBzZXF1ZW5jZXIuYzo0MjA5Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICLmi6PpgInmiJbov5jljp/mk43kvZzlubbmnKrov5vooYwiCisKKyM6IHNlcXVlbmNlci5jOjI4NTAgc2VxdWVuY2VyLmM6Mjg2MQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzoyODUyIHNlcXVlbmNlci5jOjI4OTYKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAi5LiN6IO95LuO5bCa5pyq5bu656uL55qE5YiG5pSv57uI5q2iIgorCisjOiBzZXF1ZW5jZXIuYzoyODgyIGJ1aWx0aW4vZ3JlcC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICLkuI3og73miZPlvIAgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6Mjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnOiAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+WICclcyfvvJolcyIKKworIzogc2VxdWVuY2VyLmM6Mjg4NQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgIuaEj+WklueahOaWh+S7tue7k+adnyIKKworIzogc2VxdWVuY2VyLmM6Mjg5MQorIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgIuS/neWtmOaLo+mAieaPkOS6pOWJjeeahCBIRUFEIOaWh+S7tiAnJXMnIOaNn+WdjyIKKworIzogc2VxdWVuY2VyLmM6MjkwMgorbXNnaWQgIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRC4gTm90IHJld2luZGluZywgY2hlY2sgeW91ciBIRUFEISIKK21zZ3N0ciAi5oKo5aW95YOP56e75Yqo5LqGIEhFQUTjgILmnKrog73lm57pgIDvvIzmo4Dmn6XmgqjnmoQgSEVBRO+8gSIKKworIzogc2VxdWVuY2VyLmM6Mjk0MworbXNnaWQgIm5vIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5rKh5pyJ5q2j5Zyo6L+b6KGM55qE6L+Y5Y6fIgorCisjOiBzZXF1ZW5jZXIuYzoyOTUxCittc2dpZCAibm8gY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuayoeacieato+WcqOi/m+ihjOeahOaLo+mAiSIKKworIzogc2VxdWVuY2VyLmM6Mjk2MQorbXNnaWQgImZhaWxlZCB0byBza2lwIHRoZSBjb21taXQiCittc2dzdHIgIuaXoOazlei3s+i/h+i/meS4quaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6Mjk2OAorbXNnaWQgInRoZXJlIGlzIG5vdGhpbmcgdG8gc2tpcCIKK21zZ3N0ciAi5rKh5pyJ6KaB6Lez6L+H55qEIgorCisjOiBzZXF1ZW5jZXIuYzoyOTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJoYXZlIHlvdSBjb21taXR0ZWQgYWxyZWFkeT9cbiIKKyJ0cnkgXCJnaXQgJXMgLS1jb250aW51ZVwiIgorbXNnc3RyICIiCisi5oKo5bey57uP5o+Q5Lqk5LqG5LmI77yfXG4iCisi6K+V6K+VIFwiZ2l0ICVzIC0tY29udGludWVcIiIKKworIzogc2VxdWVuY2VyLmM6MzA5NSBzZXF1ZW5jZXIuYzo0MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCAlcyIKKworIzogc2VxdWVuY2VyLmM6MzEzNCBzZXF1ZW5jZXIuYzo0MTAxCittc2dpZCAiY2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAi5LiN6IO96K+75Y+WIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjMxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLml6Dms5Xmi7fotJ0gJyVzJyDoh7MgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbiBhbWVuZCB0aGUgY29tbWl0IG5vdywgd2l0aFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIuaCqOeOsOWcqOWPr+S7peS/ruihpei/meS4quaPkOS6pO+8jOS9v+eUqFxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisi5b2T5oKo5a+55Y+Y5pu05oSf5Yiw5ruh5oSP77yM5omn6KGMXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogc2VxdWVuY2VyLmM6MzE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJXMuLi4gJS4qcyIKK21zZ3N0ciAi5LiN6IO95bqU55SoICVzLi4uICUuKnMiCisKKyM6IHNlcXVlbmNlci5jOjMxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1lcmdlICUuKnMiCittc2dzdHIgIuS4jeiDveWQiOW5tiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMTkwIHNlcXVlbmNlci5jOjMxOTQgYnVpbHRpbi9kaWZmdG9vbC5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIuS4jeiDveaLt+i0nSAnJXMnIOiHsyAnJXMnIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHNlcXVlbmNlci5jOjMyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4ZWN1dGlvbiBmYWlsZWQ6ICVzXG4iCisiJXNZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuaJp+ihjOWksei0pe+8miVzXG4iCisiJXPmgqjlj6/ku6XmlLnmraPor6Xpl67popjvvIznhLblkI7ov5DooYxcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjI3Cittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWVcbiIKK21zZ3N0ciAi5bm25LiU5L+u5pS557Si5byV5ZKML+aIluW3peS9nOWMulxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gc3VjY2VlZGVkOiAlc1xuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuaJp+ihjOaIkOWKn++8miVzXG4iCisi5L2G5piv5Zyo57Si5byV5ZKML+aIluW3peS9nOWMuuS4reWtmOWcqOWPmOabtFxuIgorIuaPkOS6pOaIlui0ruiXj+S/ruaUue+8jOeEtuWQjui/kOihjFxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWxsZWdhbCBsYWJlbCBuYW1lOiAnJS4qcyciCittc2dzdHIgIumdnuazleeahOagh+etvuWQjeensO+8miclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzM0OAorbXNnaWQgIndyaXRpbmcgZmFrZSByb290IGNvbW1pdCIKK21zZ3N0ciAi5YaZ5Lyq5qC55o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzozMzUzCittc2dpZCAid3JpdGluZyBzcXVhc2gtb250byIKK21zZ3N0ciAi5YaZ5YWlIHNxdWFzaC1vbnRvIgorCisjOiBzZXF1ZW5jZXIuYzozMzkxIGJ1aWx0aW4vcmViYXNlLmM6ODc2IGJ1aWx0aW4vcmViYXNlLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMiCittc2dzdHIgIuaXoOazleaJvuWIsCAlcyDmjIflkJHnmoTmoJHjgIIiCisKKyM6IHNlcXVlbmNlci5jOjM0MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJyVzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6QICclcyciCisKKyM6IHNlcXVlbmNlci5jOjM0NjcKK21zZ2lkICJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iCittc2dzdHIgIuayoeacieW9k+WJjeeJiOacrOS4jeiDveWQiOW5tiIKKworIzogc2VxdWVuY2VyLmM6MzQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyUuKnMnIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gbWVyZ2U6ICclLipzJyIKK21zZ3N0ciAi5peg5Y+v55So5ZCI5bm277yaJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNTEwCittc2dpZCAib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gdG9wIG9mIGEgW25ldyByb290XSIKK21zZ3N0ciAi56ug6bG85ZCI5bm25LiN6IO95Zyo5LiA5Liq5paw55qE5qC55o+Q5Lqk5LiK5omn6KGMIgorCisjOiBzZXF1ZW5jZXIuYzozNTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgY29tbWl0IG1lc3NhZ2Ugb2YgJyVzJyIKK21zZ3N0ciAi5LiN6IO96I635Y+WICclcycg55qE5o+Q5Lqk6K+05piOIgorCisjOiBzZXF1ZW5jZXIuYzozNjg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBldmVuIGF0dGVtcHQgdG8gbWVyZ2UgJyUuKnMnIgorbXNnc3RyICLnlJroh7PkuI3og73lsJ3or5XlkIjlubYgJyUuKnMnIgorCisjOiBzZXF1ZW5jZXIuYzozNzA0Cittc2dpZCAibWVyZ2U6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi5ZCI5bm277ya5peg5rOV5YaZ5YWl5paw57Si5byV5paH5Lu2IgorCisjOiBzZXF1ZW5jZXIuYzozNzczIGJ1aWx0aW4vcmViYXNlLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLlxuIgorbXNnc3RyICLlt7LlupTnlKggYXV0b3N0YXNo44CCXG4iCisKKyM6IHNlcXVlbmNlci5jOjM3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0b3JlICVzIgorbXNnc3RyICLkuI3og73lrZjlgqggJXMiCisKKyM6IHNlcXVlbmNlci5jOjM3ODggYnVpbHRpbi9yZWJhc2UuYzo3NDkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIuW6lOeUqCBhdXRvc3Rhc2gg5a+86Ie05Yay56qB44CCXG4iCisi5oKo55qE5L+u5pS55a6J5YWo5Zyw5L+d5a2Y5Zyo6LSu6JeP5Yy65Lit44CCXG4iCisi5oKo5Y+v5Lul5Zyo5Lu75L2V5pe25YCZ6L+Q6KGMIFwiZ2l0IHN0YXNoIHBvcFwiIOaIliBcImdpdCBzdGFzaCBkcm9wXCLjgIJcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIuS4jeiDveajgOWHuiAlcyIKKworIzogc2VxdWVuY2VyLmM6Mzg2MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgdmFsaWQgT0lEIgorbXNnc3RyICIlc++8muS4jeaYr+S4gOS4quacieaViOeahOWvueixoSBJRCIKKworIzogc2VxdWVuY2VyLmM6Mzg2OCBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6Nzc5Cittc2dpZCAiY291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICLkuI3og73liIbnprvlpLTmjIfpkogiCisKKyM6IHNlcXVlbmNlci5jOjM4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCBIRUFEXG4iCittc2dzdHIgIuWBnOatouWcqCBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlc1xuIgorbXNnc3RyICLlgZzmraLlnKggJXNcbiIKKworIzogc2VxdWVuY2VyLmM6Mzg5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzXG4iCisiSXQgaGFzIGJlZW4gcmVzY2hlZHVsZWQ7IFRvIGVkaXQgdGhlIGNvbW1hbmQgYmVmb3JlIGNvbnRpbnVpbmcsIHBsZWFzZVxuIgorImVkaXQgdGhlIHRvZG8gbGlzdCBmaXJzdDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1xuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIuaXoOazleaJp+ihjOW+heWKnuWRveS7pFxuIgorIlxuIgorIiAgICAlLipzXG4iCisi5bey6KKr6YeN5paw5a6J5o6S77yM5Zyo57un57ut5LmL5YmN57yW6L6R5ZG95Luk77yM6K+35YWI57yW6L6R5b6F5Yqe5YiX6KGo77yaXG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjM5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAlcy4uLiAgJS4qc1xuIgorbXNnc3RyICLlgZzmraLlnKggJXMuLi4gJS4qc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0MDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY29tbWFuZCAlZCIKK21zZ3N0ciAi5pyq55+l5ZG95LukICVkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTA5Cittc2dpZCAiY291bGQgbm90IHJlYWQgb3JpZy1oZWFkIgorbXNnc3RyICLkuI3og73or7vlj5Ygb3JpZy1oZWFkIgorCisjOiBzZXF1ZW5jZXIuYzo0MTE0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJ29udG8nIgorbXNnc3RyICLkuI3og73or7vlj5YgJ29udG8nIgorCisjOiBzZXF1ZW5jZXIuYzo0MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB1cGRhdGUgSEVBRCB0byAlcyIKK21zZ3N0ciAi5LiN6IO95pu05pawIEhFQUQg5Li6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo0MjIxCittc2dpZCAiY2Fubm90IHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDveWPmOWfuu+8muaCqOacieacquaaguWtmOeahOWPmOabtOOAgiIKKworIzogc2VxdWVuY2VyLmM6NDIzMAorbXNnaWQgImNhbm5vdCBhbWVuZCBub24tZXhpc3RpbmcgY29tbWl0IgorbXNnc3RyICLkuI3og73kv67ooaXkuI3lrZjlnKjnmoTmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjQyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBmaWxlOiAnJXMnIgorbXNnc3RyICLml6DmlYjmlofku7bvvJonJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29udGVudHM6ICclcyciCittc2dzdHIgIuaXoOaViOWGheWuue+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjQyMzcKK21zZ2lkICIiCisiXG4iCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlLCBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyJcbiIKKyLmgqjnmoTlt6XkvZzljLrkuK3mnInmnKrmj5DkuqTnmoTlj5jmm7TjgILor7flhYjmj5DkuqTnhLblkI7lho3mrKHov5DooYwgJ2dpdCByZWJhc2UgLS1jb250aW51ZSfjgIIiCisKKyM6IHNlcXVlbmNlci5jOjQyNzMgc2VxdWVuY2VyLmM6NDMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZmlsZTogJyVzJyIKK21zZ3N0ciAi5LiN6IO95YaZ5YWl5paH5Lu277yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDMyNworbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAi5LiN6IO95Yig6ZmkIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IHNlcXVlbmNlci5jOjQzMzQKK21zZ2lkICJjb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO95o+Q5Lqk5pqC5a2Y55qE5L+u5pS544CCIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlc++8muS4jeiDveaLo+mAieS4gOS4qiVzIgorCisjOiBzZXF1ZW5jZXIuYzo0NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVz77ya6ZSZ6K+v55qE54mI5pysIgorCisjOiBzZXF1ZW5jZXIuYzo0NDc5Cittc2dpZCAiY2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICLkuI3og73kvZzkuLrliJ3lp4vmj5DkuqTlm57pgIAiCisKKyM6IHNlcXVlbmNlci5jOjQ5NTIKK21zZ2lkICJtYWtlX3NjcmlwdDogdW5oYW5kbGVkIG9wdGlvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB077ya5pyJ5pyq6IO95aSE55CG55qE6YCJ6aG5IgorCisjOiBzZXF1ZW5jZXIuYzo0OTU1Cittc2dpZCAibWFrZV9zY3JpcHQ6IGVycm9yIHByZXBhcmluZyByZXZpc2lvbnMiCittc2dzdHIgIm1ha2Vfc2NyaXB077ya5YeG5aSH54mI5pys5pe26ZSZ6K+vIgorCisjOiBzZXF1ZW5jZXIuYzo1MTEzCittc2dpZCAiIgorIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlJy5cbiIKKyJPciB5b3UgY2FuIGFib3J0IHRoZSByZWJhc2Ugd2l0aCAnZ2l0IHJlYmFzZSAtLWFib3J0Jy5cbiIKK21zZ3N0ciAiIgorIuaCqOWPr+S7peeUqCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycg5L+u5q2j77yM54S25ZCO5omn6KGMICdnaXQgcmViYXNlIC0tY29udGludWUn44CCXG4iCisi5oiW6ICF5oKo5Y+v5Lul55SoICdnaXQgcmViYXNlIC0tYWJvcnQnIOe7iOatouWPmOWfuuOAglxuIgorCisjOiBzZXF1ZW5jZXIuYzo1MjI2IHNlcXVlbmNlci5jOjUyNDMKK21zZ2lkICJub3RoaW5nIHRvIGRvIgorbXNnc3RyICLml6Dkuovlj6/lgZoiCisKKyM6IHNlcXVlbmNlci5jOjUyNTcKK21zZ2lkICJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorbXNnc3RyICLml6Dms5Xot7Pov4fkuI3lv4XopoHnmoTmi6PpgIkiCisKKyM6IHNlcXVlbmNlci5jOjUzNTEKK21zZ2lkICJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIgorbXNnc3RyICLohJrmnKzlt7Lnu4/ph43mlrDnvJbmjpLjgIIiCisKKyM6IHNldHVwLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICInJXMnIOWcqOS7k+W6k+S5i+WkliIKKworIzogc2V0dXAuYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIgorbXNnc3RyICIiCisiJXPvvJrlt6XkvZzljLrkuK3ml6DmraTot6/lvoTjgIJcbiIKKyLkvb/nlKjlkb3ku6QgJ2dpdCA85ZG95LukPiAtLSA86Lev5b6EPi4uLicg5p2l5oyH5a6a5pys5Zyw5LiN5a2Y5Zyo55qE6Lev5b6E44CCIgorCisjOiBzZXR1cC5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKyJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciCittc2dzdHIgIiIKKyLmnInmrafkuYnnmoTlj4LmlbAgJyVzJ++8muacquefpeeahOeJiOacrOaIlui3r+W+hOS4jeWtmOWcqOS6juW3peS9nOWMuuS4reOAglxuIgorIuS9v+eUqCAnLS0nIOadpeWIhumalOeJiOacrOWSjOi3r+W+hO+8jOS+i+Wmgu+8mlxuIgorIidnaXQgPOWRveS7pD4gWzzniYjmnKw+Li4uXSAtLSBbPOaWh+S7tj4uLi5dJyIKKworIzogc2V0dXAuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIKK21zZ3N0ciAi6YCJ6aG5ICclcycg5b+F6aG75Zyo5YW25LuW6Z2e6YCJ6aG55Y+C5pWw5LmL5YmNIgorCisjOiBzZXR1cC5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisi5pyJ5q2n5LmJ55qE5Y+C5pWwICclcyfvvJrlj6/lkIzml7bmmK/niYjmnKzlkozmlofku7ZcbiIKKyLkvb/nlKggJy0tJyDmnaXliIbpmpTniYjmnKzlkozot6/lvoTvvIzkvovlpoLvvJpcbiIKKyInZ2l0IDzlkb3ku6Q+IFs854mI5pysPi4uLl0gLS0gWzzmlofku7Y+Li4uXSciCisKKyM6IHNldHVwLmM6MzkxCittc2dpZCAidW5hYmxlIHRvIHNldCB1cCB3b3JrIHRyZWUgdXNpbmcgaW52YWxpZCBjb25maWciCittc2dzdHIgIuaXoOazleS9v+eUqOaXoOaViOmFjee9ruadpeWIm+W7uuW3peS9nOWMuiIKKworIzogc2V0dXAuYzozOTUKK21zZ2lkICJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKK21zZ3N0ciAi6K+l5pON5L2c5b+F6aG75Zyo5LiA5Liq5bel5L2c5Yy65Lit6L+Q6KGMIgorCisjOiBzZXR1cC5jOjU0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIKK21zZ3N0ciAi5pyf5pybIGdpdCDku5PlupPniYjmnKwgPD0gJWTvvIzljbTlvpfliLAgJWQiCisKKyM6IHNldHVwLmM6NTQ5Cittc2dpZCAidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IgorbXNnc3RyICLlj5HnjrDmnKrnn6XnmoTku5PlupPmianlsZXvvJoiCisKKyM6IHNldHVwLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIG9wZW5pbmcgJyVzJyIKK21zZ3N0ciAi5omT5byAICclcycg5Ye66ZSZIgorCisjOiBzZXR1cC5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbGFyZ2UgdG8gYmUgYSAuZ2l0IGZpbGU6ICclcyciCittc2dzdHIgIuaWh+S7tuWkquWkp++8jOaXoOazleS9nOS4uiAuZ2l0IOaWh+S7tu+8miclcyciCisKKyM6IHNldHVwLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgJXMiCittc2dzdHIgIuivu+WPliAlcyDlh7rplJkiCisKKyM6IHNldHVwLmM6NTc0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLml6DmlYjnmoQgZ2l0ZmlsZSDmoLzlvI/vvJolcyIKKworIzogc2V0dXAuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIKK21zZ3N0ciAi5ZyoIGdpdGZpbGUg5Lit5rKh5pyJ6Lev5b6E77yaJXMiCisKKyM6IHNldHVwLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5LiqIGdpdCDku5PlupPvvJolcyIKKworIzogc2V0dXAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyQlcycgdG9vIGJpZyIKK21zZ3N0ciAiJyQlcycg5aSq5aSnIgorCisjOiBzZXR1cC5jOjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIKK21zZ3N0ciAi5LiN5piv5LiA5LiqIGdpdCDku5PlupPvvJonJXMnIgorCisjOiBzZXR1cC5jOjcyMCBzZXR1cC5jOjcyMiBzZXR1cC5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95YiH5o2i55uu5b2V5YiwICclcyciCisKKyM6IHNldHVwLmM6NzI1IHNldHVwLmM6NzgxIHNldHVwLmM6NzkxIHNldHVwLmM6ODMwIHNldHVwLmM6ODM4Cittc2dpZCAiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIuaXoOazlei/lOWbnuW9k+WJjeW3peS9nOebruW9lSIKKworIzogc2V0dXAuYzo4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyUqcyVzJXMnIgorbXNnc3RyICLojrflj5YgJyUqcyVzJXMnIOeKtuaAge+8iHN0YXTvvInlpLHotKUiCisKKyM6IHNldHVwLmM6MTA5MAorbXNnaWQgIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeiDveivu+WPluW9k+WJjeW3peS9nOebruW9lSIKKworIzogc2V0dXAuYzoxMDk5IHNldHVwLmM6MTEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hhbmdlIHRvICclcyciCittc2dzdHIgIuS4jeiDveWIh+aNouWIsCAnJXMnIgorCisjOiBzZXR1cC5jOjExMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzKTogJXMiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBnaXQg5LuT5bqT77yI5oiW6ICF5Lu75L2V54i255uu5b2V77yJ77yaJXMiCisKKyM6IHNldHVwLmM6MTExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisiU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS4iCittc2dzdHIgIiIKKyLkuI3mmK/kuIDkuKogZ2l0IOS7k+W6k++8iOaIluiAheebtOiHs+aMgui9veeCuSAlcyDnmoTku7vkvZXniLbnm67lvZXvvIlcbiIKKyLlgZzmraLlnKjmlofku7bns7vnu5/ovrnnlYzvvIjmnKrorr7nva4gR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTe+8ieOAgiIKKworIzogc2V0dXAuYzoxMjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJwcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICgwJS4zbykuXG4iCisiVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIgorbXNnc3RyICIiCisi5Y+C5pWwIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSDnmoTmlofku7blsZ7mgKflgLzmnInpl67popjvvIgwJS4zb++8ieOAglxuIgorIuaWh+S7tuWxnuS4u+W/hemhu+Wni+e7iOaLpeacieivu+WGmeadg+mZkOOAgiIKKworIzogc2V0dXAuYzoxMjcxCittc2dpZCAib3BlbiAvZGV2L251bGwgb3IgZHVwIGZhaWxlZCIKK21zZ3N0ciAi5LiN6IO95omT5byA5oiW6ICF5aSN5Yi2IC9kZXYvbnVsbCIKKworIzogc2V0dXAuYzoxMjg2Cittc2dpZCAiZm9yayBmYWlsZWQiCittc2dzdHIgImZvcmsg5aSx6LSlIgorCisjOiBzZXR1cC5jOjEyOTEKK21zZ2lkICJzZXRzaWQgZmFpbGVkIgorbXNnc3RyICJzZXRzaWQg5aSx6LSlIgorCisjOiBzaGExLWZpbGUuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdDsgY2hlY2sgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKK21zZ3N0ciAi5a+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+S7tiAlcyDkuLrnqboiCisKKyM6IHNoYTEtZmlsZS5jOjEyNTIgc2hhMS1maWxlLmM6MjM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLmjZ/lnY/nmoTmnb7mlaPlr7nosaEgJyVzJyIKKworIzogc2hhMS1maWxlLmM6MTI1NCBzaGExLWZpbGUuYzoyMzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIgorbXNnc3RyICLmnb7mlaPlr7nosaEgJyVzJyDlkI7pnaLmnInlnoPlnL7mlbDmja4iCisKKyM6IHNoYTEtZmlsZS5jOjEyOTYKK21zZ2lkICJpbnZhbGlkIG9iamVjdCB0eXBlIgorbXNnc3RyICLml6DmlYjnmoTlr7nosaHnsbvlnosiCisKKyM6IHNoYTEtZmlsZS5jOjEzODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAi5peg5rOV55SoIC0tYWxsb3ctdW5rbm93bi10eXBlIOWPguaVsOino+W8gCAlcyDlpLTkv6Hmga8iCisKKyM6IHNoYTEtZmlsZS5jOjEzODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiCittc2dzdHIgIuaXoOazleino+W8gCAlcyDlpLTpg6giCisKKyM6IHNoYTEtZmlsZS5jOjEzODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciB3aXRoIC0tYWxsb3ctdW5rbm93bi10eXBlIgorbXNnc3RyICLml6Dms5XnlKggLS1hbGxvdy11bmtub3duLXR5cGUg5Y+C5pWw6Kej5p6QICVzIOWktOS/oeaBryIKKworIzogc2hhMS1maWxlLmM6MTM5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJXMgaGVhZGVyIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJXMg5aS06YOoIgorCisjOiBzaGExLWZpbGUuYzoxNTg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi6K+75Y+W5a+56LGhICVzIOWksei0pSIKKworIzogc2hhMS1maWxlLmM6MTU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIgorbXNnc3RyICLmib7kuI3liLAgJTIkcyDnmoTmm7/ku6MgJTEkcyIKKworIzogc2hhMS1maWxlLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAi5p2+5pWj5a+56LGhICVz77yI5L+d5a2Y5ZyoICVz77yJ5bey5o2f5Z2PIgorCisjOiBzaGExLWZpbGUuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIKK21zZ3N0ciAi5omT5YyF5a+56LGhICVz77yI5L+d5a2Y5ZyoICVz77yJ5bey5o2f5Z2PIgorCisjOiBzaGExLWZpbGUuYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICVzIgorbXNnc3RyICLml6Dms5Xlhpnmlofku7YgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE3MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBwZXJtaXNzaW9uIHRvICclcyciCittc2dzdHIgIuaXoOazleS4uiAnJXMnIOiuvue9ruadg+mZkCIKKworIzogc2hhMS1maWxlLmM6MTcxMworbXNnaWQgImZpbGUgd3JpdGUgZXJyb3IiCittc2dzdHIgIuaWh+S7tuWGmemUmeivryIKKworIzogc2hhMS1maWxlLmM6MTczMgorbXNnaWQgImVycm9yIHdoZW4gY2xvc2luZyBsb29zZSBvYmplY3QgZmlsZSIKK21zZ3N0ciAi5YWz6Zet5p2+5pWj5a+56LGh5paH5Lu25pe25Ye66ZSZIgorCisjOiBzaGExLWZpbGUuYzoxNzk3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXMiCittc2dzdHIgIuadg+mZkOS4jei2s++8jOaXoOazleWcqOS7k+W6k+WvueixoeW6kyAlcyDkuK3mt7vliqDlr7nosaEiCisKKyM6IHNoYTEtZmlsZS5jOjE3OTkKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLml6Dms5XliJvlu7rkuLTml7bmlofku7YiCisKKyM6IHNoYTEtZmlsZS5jOjE4MjMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIuS4jeiDveWGmeadvuaVo+WvueixoeaWh+S7tiIKKworIzogc2hhMS1maWxlLmM6MTgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBuZXcgb2JqZWN0ICVzICglZCkiCittc2dzdHIgIuS4jeiDveWOi+e8qeaWsOWvueixoSAlc++8iCVk77yJIgorCisjOiBzaGExLWZpbGUuYzoxODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGVFbmQgb24gb2JqZWN0ICVzIGZhaWxlZCAoJWQpIgorbXNnc3RyICLlnKjlr7nosaEgJXMg5LiK6LCD55SoIGRlZmxhdGVFbmQg5aSx6LSl77yIJWTvvIkiCisKKyM6IHNoYTEtZmlsZS5jOjE4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIKK21zZ3N0ciAi6KKrICVzIOeahOS4jeeos+WumuWvueixoea6kOaVsOaNruaQnueziua2guS6hiIKKworIzogc2hhMS1maWxlLmM6MTg0NyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdXRpbWUoKSBvbiAlcyIKK21zZ3N0ciAi5ZyoICVzIOS4iuiwg+eUqCB1dGltZSgpIOWksei0pSIKKworIzogc2hhMS1maWxlLmM6MTkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICLkuI3og73or7vlj5blr7nosaEgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjE5NjIKK21zZ2lkICJjb3JydXB0IGNvbW1pdCIKK21zZ3N0ciAi5o2f5Z2P55qE5o+Q5LqkIgorCisjOiBzaGExLWZpbGUuYzoxOTcwCittc2dpZCAiY29ycnVwdCB0YWciCittc2dzdHIgIuaNn+Wdj+eahOagh+etviIKKworIzogc2hhMS1maWxlLmM6MjA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIGVycm9yIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICLntKLlvJUgJXMg5pe26K+75Y+W6ZSZ6K+vIgorCisjOiBzaGExLWZpbGUuYzoyMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgInNob3J0IHJlYWQgd2hpbGUgaW5kZXhpbmcgJXMiCittc2dzdHIgIue0ouW8lSAlcyDml7bor7vlhaXkuI3lrozmlbQiCisKKyM6IHNoYTEtZmlsZS5jOjIxNDUgc2hhMS1maWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIgorbXNnc3RyICIlc++8muaPkuWFpeaVsOaNruW6k+Wksei0pSIKKworIzogc2hhMS1maWxlLmM6MjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIgorbXNnc3RyICIlc++8muS4jeaUr+aMgeeahOaWh+S7tuexu+WeiyIKKworIzogc2hhMS1maWxlLmM6MjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCBvYmplY3QiCittc2dzdHIgIiVzIOS4jeaYr+S4gOS4quacieaViOeahOWvueixoSIKKworIzogc2hhMS1maWxlLmM6MjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMg5LiN5piv5LiA5Liq5pyJ5pWI55qEICclcycg5a+56LGhIgorCisjOiBzaGExLWZpbGUuYzoyMjEzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAi5LiN6IO95omT5byAICVzIgorCisjOiBzaGExLWZpbGUuYzoyNDAzIHNoYTEtZmlsZS5jOjI0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIKK21zZ3N0ciAiJXMg55qE5ZOI5biM5YC85LiN5Yy56YWN77yI6aKE5pyfICVz77yJIgorCisjOiBzaGExLWZpbGUuYzoyNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtbWFwICVzIgorbXNnc3RyICLkuI3og70gbW1hcCAlcyIKKworIzogc2hhMS1maWxlLmM6MjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi5peg5rOV6Kej5Y6L57ypICVzIOeahOWktOmDqCIKKworIzogc2hhMS1maWxlLmM6MjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJXMg55qE5aS06YOoIgorCisjOiBzaGExLWZpbGUuYzoyNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgY29udGVudHMgb2YgJXMiCittc2dzdHIgIuaXoOazleino+WOi+e8qSAlcyDnmoTlhoXlrrkiCisKKyM6IHNoYTEtbmFtZS5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCBTSEExICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAi55+tIFNIQTEgJXMg5a2Y5Zyo5q2n5LmJIgorCisjOiBzaGExLW5hbWUuYzo0OTgKK21zZ2lkICJUaGUgY2FuZGlkYXRlcyBhcmU6IgorbXNnc3RyICLlgJnpgInogIXmnInvvJoiCisKKyM6IHNoYTEtbmFtZS5jOjc5NworbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJHaXQg6YCa5bi45LiN5Lya5Yib5bu65LiA5Liq5LulNDDkuKrljYHlha3ov5vliLblrZfnrKbnu5PlsL7nmoTlvJXnlKjvvIzlm6DkuLrlvZPmgqjlj6rmj5Dkvps0MFxuIgorIuS4quWNgeWFrei/m+WItuWtl+espuaXtuWwhuiiq+W/veeVpeOAgui/meS6m+W8leeUqOWPr+iDveiiq+mUmeivr+WcsOWIm+W7uuOAguS+i+Wmgu+8mlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyLlvZMgXCIkYnJcIiDmn5Dnp43ljp/lm6Dnqbrnmb3ml7bvvIzkuIDkuKo0MOS9jeWNgeWFrei/m+WItueahOW8leeUqOWwhuiiq+WIm+W7uuOAguivt+ajgOafpei/meS6m1xuIgorIuW8leeUqO+8jOWPr+iDvemcgOimgeWIoOmZpOWug+S7rOOAgui/kOihjCBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nXG4iCisiZmFsc2VcIiDlkb3ku6TlhbPpl63mnKzmtojmga/pgJrnn6XjgIIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBnaWJpYnl0ZQorIzogc3RyYnVmLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQiIKK21zZ3N0ciAiJXUuJTIuMnUgR2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgR2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEdpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggbWViaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIiCittc2dzdHIgIiV1LiUyLjJ1IE1pQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IE1pQi9zIgorbXNnc3RyICIldS4lMi4ydSBNaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlCisjOiBzdHJidWYuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCIgorbXNnc3RyICIldS4lMi4ydSBLaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBLaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBieXRlCisjOiBzdHJidWYuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiJXUgYnl0ZXMiCittc2dzdHJbMF0gIiV1IOWtl+iKgiIKK21zZ3N0clsxXSAiJXUg5a2X6IqCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBieXRlL3MiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzL3MiCittc2dzdHJbMF0gIiV1IOWtl+iKgi/np5IiCittc2dzdHJbMV0gIiV1IOWtl+iKgi/np5IiCisKKyM6IHN0cmJ1Zi5jOjExNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGVkaXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO957yW6L6RICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAi5peg5rOV5L+u5pS55pyq5ZCI5bm255qEIC5naXRtb2R1bGVz77yM5YWI6Kej5Yaz5ZCI5bm25Yay56qBIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAi5peg5rOV5ZyoIC5naXRtb2R1bGVzIOS4reaJvuWIsCBwYXRoPSVzIOeahOWwj+iKgiIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICLml6Dms5Xnp7vpmaQgJXMg55qEIC5naXRtb2R1bGVzIOadoeebriIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAi5bCG5pu05paw5ZCOIC5naXRtb2R1bGVzIOa3u+WKoOaaguWtmOWMuuWksei0pSIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLkvY3kuo7mnKrmo4Dlh7rnmoTlrZDmqKHnu4QgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg5Zyo5a2Q5qih57uEICclLipzJyDkuK0iCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAi5a2Q5qih57uE5p2h55uuICclcyfvvIglc++8ieaYr+S4gOS4qiAlc++8jOS4jeaYr+S4gOS4quaPkOS6pCIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjAxNgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLml6Dms5XlsIYgSEVBRCDop6PmnpDkuLrmnInmlYjlvJXnlKjjgIIiCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV6K6/6Zeu5a2Q5qih57uEICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLml6Dms5XlsIYgJyVzJyDor4bliKvkuLrkuIDkuKogZ2l0IOS7k+W6kyIKKworIzogc3VibW9kdWxlLmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4QgJyVzJyDkuK3lkK/liqggJ2dpdCBzdGF0dXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4QgJyVzJyDkuK3miafooYwgJ2dpdCBzdGF0dXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hCAnJXMnIOS4reWPlua2iCBjb3JlLndvcmt0cmVlIOeahOiuvue9riIKKworIzogc3VibW9kdWxlLmM6MTkwNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgIuWtkOaooee7hCAnJXMnIOS4reacieiEj+e0ouW8lSIKKworIzogc3VibW9kdWxlLmM6MTk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgIuWtkOaooee7hCAnJXMnIOaXoOazleiiq+abtOaWsOOAgiIKKworIzogc3VibW9kdWxlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzIGluc2lkZSBnaXQgZGlyICclLipzJyIKK21zZ3N0ciAi5a2Q5qih57uEIGdpdCDnm67lvZUgJyVzJyDkvY3kuo4gZ2l0IOebruW9lSAnJS4qcycg5LitIgorCisjOiBzdWJtb2R1bGUuYzoyMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mjIHlr7nmnInlpJrkuKrlt6XkvZzljLrnmoTlrZDmqKHnu4QgJyVzJyDmiafooYwgcmVsb2NhdGVfZ2l0ZGlyIgorCisjOiBzdWJtb2R1bGUuYzoyMDYwIHN1Ym1vZHVsZS5jOjIxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95p+l6K+i5a2Q5qih57uEICclcycg55qE5ZCN56ewIgorCisjOiBzdWJtb2R1bGUuYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgIuemgeatouenu+WKqCAnJXMnIOWIsOeOsOWtmCBnaXQg55uu5b2V5LitIgorCisjOiBzdWJtb2R1bGUuYzoyMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuIgorIiclcycgdG9cbiIKKyInJXMnXG4iCittc2dzdHIgIiIKKyLlsIYgJyVzJXMnIOeahCBnaXQg55uu5b2V5LuOXG4iCisiJyVzJyDov4Hnp7voh7NcbiIKKyInJXMnXG4iCisKKyM6IHN1Ym1vZHVsZS5jOjIxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV6YCS5b2S6L+b5a2Q5qih57uE6Lev5b6EICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjIxOTgKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iCittc2dzdHIgIuaXoOazleWcqCAuLiDkuK3lkK/liqggbHMtZmlsZXMiCisKKyM6IHN1Ym1vZHVsZS5jOjIyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIgorbXNnc3RyICJscy10cmVlIOi/lOWbnuacquefpei/lOWbnuWAvCAlZCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBzdXNwaWNpb3VzIHN1Ym1vZHVsZSBuYW1lOiAlcyIKK21zZ3N0ciAi5b+955Wl5Y+v55aR55qE5a2Q5qih57uE5ZCN56ew77yaJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzozMDMKK21zZ2lkICJuZWdhdGl2ZSB2YWx1ZXMgbm90IGFsbG93ZWQgZm9yIHN1Ym1vZHVsZS5mZXRjaGpvYnMiCittc2dzdHIgInN1Ym1vZHVsZS5mZXRjaGpvYnMg5LiN5YWB6K645Li66LSf5YC8IgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICclcycgd2hpY2ggbWF5IGJlIGludGVycHJldGVkIGFzIGEgY29tbWFuZC1saW5lIG9wdGlvbjogJXMiCittc2dzdHIgIuW/veeVpeWPr+iDveiiq+ino+aekOS4uuWRveS7pOihjOmAiemhueeahCAnJXMn77yaJXMiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXMiCittc2dzdHIgIiVzIOeahOWAvOaXoOaViCIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICLkuI3og73mm7TmlrAgLmdpdG1vZHVsZXMg5p2h55uuICVzIgorCisjOiB0cmFpbGVyLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgdHJhaWxlciBjb21tYW5kICclcycgZmFpbGVkIgorbXNnc3RyICLmiafooYwgdHJhaWxlciDlkb3ku6QgJyVzJyDlpLHotKUiCisKKyM6IHRyYWlsZXIuYzo0ODUgdHJhaWxlci5jOjQ5MCB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo1NDkgdHJhaWxlci5jOjU1MworIzogdHJhaWxlci5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICLplK4gJyUyJHMnIOeahOacquefpeWPluWAvCAnJTEkcyciCisKKyM6IHRyYWlsZXIuYzo1MzkgdHJhaWxlci5jOjU0NCBidWlsdGluL3JlbW90ZS5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICLlpJrkuo7kuIDkuKogJXMiCisKKyM6IHRyYWlsZXIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAi562+5ZCNICclLipzJyDnmoTplK7kuLrnqboiCisKKyM6IHRyYWlsZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5bovpPlhaXmlofku7YgJyVzJyIKKworIzogdHJhaWxlci5jOjc1MworbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIuS4jeiDveiHquagh+WHhui+k+WFpeivu+WPliIKKworIzogdHJhaWxlci5jOjEwMTEgd3JhcHBlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAi5LiN6IO95a+5ICVzIOiwg+eUqCBzdGF0IgorCisjOiB0cmFpbGVyLmM6MTAxMworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAi5paH5Lu2ICVzIOS4jeaYr+S4gOS4quato+inhOaWh+S7tiIKKworIzogdHJhaWxlci5jOjEwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBpcyBub3Qgd3JpdGFibGUgYnkgdXNlciIKK21zZ3N0ciAi5paH5Lu2ICVzIOeUqOaIt+S4jeWPr+WGmSIKKworIzogdHJhaWxlci5jOjEwMjcKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAi5LiN6IO95omT5byA5Li05pe25paH5Lu2IgorCisjOiB0cmFpbGVyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBmaWxlIHRvICVzIgorbXNnc3RyICLkuI3og73ph43lkb3lkI3kuLTml7bmlofku7bkuLogJXMiCisKKyM6IHRyYW5zcG9ydC5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBzZXQgdXBzdHJlYW0gb2YgJyVzJyB0byAnJXMnIG9mICclcydcbiIKK21zZ3N0ciAi5bCG6KaB6K6+572uICclMSRzJyDnmoTkuIrmuLjkuLogJyUzJHMnIOeahCAnJTIkcydcbiIKKworIzogdHJhbnNwb3J0LmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnIgorbXNnc3RyICLml6Dms5Xor7vlj5YgYnVuZGxlICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmFuc3BvcnQ6IGludmFsaWQgZGVwdGggb3B0aW9uICclcyciCittc2dzdHIgIuS8oOi+k++8muaXoOaViOeahOa3seW6pumAiemhuSAnJXMnIgorCisjOiB0cmFuc3BvcnQuYzoyNjYKK21zZ2lkICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiAnZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBkZXRhaWxzIgorbXNnc3RyICLmn6XnnIsgJ2dpdCBoZWxwIGNvbmZpZycg5Lit55qEIHByb3RvY29sLnZlcnNpb24g6I635Y+W5pu05aSa5L+h5oGvIgorCisjOiB0cmFuc3BvcnQuYzoyNjcKK21zZ2lkICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIKK21zZ3N0ciAi5pyN5Yqh56uv6YCJ6aG56ZyA6KaB54mI5pysIDIg5Y2P6K6u5oiW5pu06auYIgorCisjOiB0cmFuc3BvcnQuYzo2MzIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgdHJhbnNwb3J0LmNvbG9yLiogY29uZmlnIgorbXNnc3RyICLkuI3og73op6PmnpAgdHJhbnNwb3J0LmNvbG9yLiog6YWN572uIgorCisjOiB0cmFuc3BvcnQuYzo3MDUKK21zZ2lkICJzdXBwb3J0IGZvciBwcm90b2NvbCB2MiBub3QgaW1wbGVtZW50ZWQgeWV0IgorbXNnc3RyICLljY/orq4gdjIg55qE5pSv5oyB5bCa5pyq5a6e546wIgorCisjOiB0cmFuc3BvcnQuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICclcyc6ICVzIgorbXNnc3RyICLphY3nva4gJyVzJyDnmoTlj5blgLzmnKrnn6XvvJolcyIKKworIzogdHJhbnNwb3J0LmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydCAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICLkvKDovpMgJyVzJyDkuI3lhYHorrgiCisKKyM6IHRyYW5zcG9ydC5jOjk0OQorbXNnaWQgImdpdC1vdmVyLXJzeW5jIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiCittc2dzdHIgIuS4jeWGjeaUr+aMgSBnaXQtb3Zlci1yc3luYyIKKworIzogdHJhbnNwb3J0LmM6MTA0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iCittc2dzdHIgIuS4i+WIl+WtkOaooee7hOi3r+W+hOaJgOWMheWQq+eahOS/ruaUueWcqOS7u+S9lei/nOeoi+a6kOS4remDveaJvuS4jeWIsO+8mlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQbGVhc2UgdHJ5XG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIuivt+WwneivlVxuIgorIlxuIgorIlx0Z2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG4iCisiXG4iCisi5oiW6ICF6L+b5YWl5Yiw5a2Q55uu5b2V5omn6KGMXG4iCisiXG4iCisiXHRnaXQgcHVzaFxuIgorIlxuIgorIuS7peaOqOmAgeiHs+i/nOeoi+OAglxuIgorIlxuIgorCisjOiB0cmFuc3BvcnQuYzoxMDU2Cittc2dpZCAiQWJvcnRpbmcuIgorbXNnc3RyICLmraPlnKjnu4jmraLjgIIiCisKKyM6IHRyYW5zcG9ydC5jOjEyMDEKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBhbGwgbmVlZGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIuS4jeiDveaOqOmAgeWFqOmDqOmcgOimgeeahOWtkOaooee7hCIKKworIzogdHJhbnNwb3J0LmM6MTM0NSB0cmFuc3BvcnQtaGVscGVyLmM6NjU2Cittc2dpZCAib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIuWNj+iuruS4jeaUr+aMgeivpeaTjeS9nCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxIHRyYW5zcG9ydC1oZWxwZXIuYzo5MAorbXNnaWQgImZ1bGwgd3JpdGUgdG8gcmVtb3RlIGhlbHBlciBmYWlsZWQiCittc2dzdHIgIuWujOaVtOWGmeWFpei/nOeoi+WKqeaJi+Wksei0pSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIgorbXNnc3RyICLml6Dms5XkuLogJyVzJyDmib7liLDov5znqIvliqnmiYsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNjAgdHJhbnNwb3J0LWhlbHBlci5jOjU3MAorbXNnaWQgImNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIgorbXNnc3RyICLml6Dms5XlpI3liLbliqnmiYvovpPlh7rmlofku7blj6Xmn4QiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgJXM7IHRoaXMgcmVtb3RlIGhlbHBlciBwcm9iYWJseSBuZWVkcyBuZXdlciAiCisidmVyc2lvbiBvZiBHaXQiCittc2dzdHIgIuacquefpeeahOW8uuWItuiDveWKmyAlc++8jOivpei/nOeoi+WKqeaJi+WPr+iDvemcgOimgeaWsOeJiOacrOeahEdpdCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxNworbXNnaWQgInRoaXMgcmVtb3RlIGhlbHBlciBzaG91bGQgaW1wbGVtZW50IHJlZnNwZWMgY2FwYWJpbGl0eSIKK21zZ3N0ciAi6L+c56iL5Yqp5omL6ZyA6KaB5a6e546wIHJlZnNwZWMg6IO95YqbIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6Mjg0IHRyYW5zcG9ydC1oZWxwZXIuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciCittc2dzdHIgIiVzIOaEj+WkluWcsOivtO+8miclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxzbyBsb2NrZWQgJXMiCittc2dzdHIgIiVzIOS5n+mUgeWumuS6hiAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQ5MgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWltcG9ydCIKK21zZ3N0ciAi5LiN6IO95omn6KGMIGZhc3QtaW1wb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTE1Cittc2dpZCAiZXJyb3Igd2hpbGUgcnVubmluZyBmYXN0LWltcG9ydCIKK21zZ3N0ciAi5omn6KGMIGZhc3QtaW1wb3J0IOWHuumUmSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU0NCB0cmFuc3BvcnQtaGVscGVyLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIuaXoOazleivu+WPluW8leeUqCAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIgorbXNnc3RyICLov57mjqXml7bmnKrnn6XnmoTlk43lupTvvJolcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxMQorbXNnaWQgInNldHRpbmcgcmVtb3RlIHNlcnZpY2UgcGF0aCBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIgorbXNnc3RyICLljY/orq7kuI3mlK/mjIHorr7nva7ov5znqIvmnI3liqHot6/lvoQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo2MTMKK21zZ2lkICJpbnZhbGlkIHJlbW90ZSBzZXJ2aWNlIHBhdGgiCittc2dzdHIgIuaXoOaViOeahOi/nOeoi+acjeWKoei3r+W+hCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBjb25uZWN0IHRvIHN1YnNlcnZpY2UgJXMiCittc2dzdHIgIuS4jeiDvei/nuaOpeWIsOWtkOacjeWKoSAlcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBvay9lcnJvciwgaGVscGVyIHNhaWQgJyVzJyIKK21zZ3N0ciAi6aKE5pyfIG9rL2Vycm9y77yM5Yqp5omL6K+0ICclcyciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIgorbXNnc3RyICLliqnmiYvmiqXlkYogJXMg55qE5oSP5aSW54q25oCBIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IGRyeS1ydW4iCittc2dzdHIgIuWKqeaJiyAlcyDkuI3mlK/mjIEgZHJ5LXJ1biIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCIKK21zZ3N0ciAi5Yqp5omLICVzIOS4jeaUr+aMgSAtLXNpZ25lZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZD1pZi1hc2tlZCIKK21zZ3N0ciAi5Yqp5omLICVzIOS4jeaUr+aMgSAtLXNpZ25lZD1pZi1hc2tlZCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIKK21zZ3N0ciAi5Yqp5omLICVzIOS4jeaUr+aMgSAtLWF0b21pYyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAncHVzaC1vcHRpb24nIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5oyBICdwdXNoLW9wdGlvbiciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjQKK21zZ2lkICJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIKK21zZ3N0ciAicmVtb3RlLWhlcGVyIOS4jeaUr+aMgSBwdXNo77yM6ZyA6KaB5byV55So6KGo6L6+5byPIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6OTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdmb3JjZSciCittc2dzdHIgIuWKqeaJiyAlcyDkuI3mlK/mjIEgJ2ZvcmNlJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMTYKK21zZ2lkICJjb3VsZG4ndCBydW4gZmFzdC1leHBvcnQiCittc2dzdHIgIuaXoOazleaJp+ihjCBmYXN0LWV4cG9ydCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjEKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0IgorbXNnc3RyICLmiafooYwgZmFzdC1leHBvcnQg5pe25Ye66ZSZIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iCittc2dzdHIgIiIKKyLmsqHmnInlhbHlkIznmoTlvJXnlKjlubbkuJTkuZ/msqHmnInmjIflrprvvIzku4DkuYjkuZ/kuI3kvJrlgZrjgIJcbiIKKyLlj6/og73mgqjlupTor6XmjIflrprkuIDkuKrliIbmlK/lpoIgJ21hc3RlcifjgIJcbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIKK21zZ3N0ciAi5byV55So5YiX6KGo5Lit5qC85byP6ZSZ6K+v55qE5ZON5bqU77yaJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjcxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQoJXMpIGZhaWxlZCIKK21zZ3N0ciAi6K+75Y+W77yIJXPvvInlpLHotKUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIndyaXRlKCVzKSBmYWlsZWQiCittc2dzdHIgIuWGme+8iCVz77yJ5aSx6LSlIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0aHJlYWQgZmFpbGVkIgorbXNnc3RyICIlcyDnur/nqIvlpLHotKUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiCittc2dzdHIgIiVzIOe6v+eoi+etieW+heWksei0pe+8miVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTM3MCB0cmFuc3BvcnQtaGVscGVyLmM6MTM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiCittc2dzdHIgIuS4jeiDveWQr+WKqOe6v+eoi+adpeaLt+i0neaVsOaNru+8miVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBwcm9jZXNzIGZhaWxlZCB0byB3YWl0IgorbXNnc3RyICIlcyDov5vnqIvnrYnlvoXlpLHotKUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIgorbXNnc3RyICIlcyDov5vnqIvlpLHotKUiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDMzIHRyYW5zcG9ydC1oZWxwZXIuYzoxNDQyCittc2dpZCAiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiCittc2dzdHIgIuS4jeiDveWQr+WKqOe6v+eoi+adpeaLt+i0neaVsOaNriIKKworIzogdHJlZS13YWxrLmM6MzMKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBvYmplY3QiCittc2dzdHIgIuWkquefreeahOagkeWvueixoSIKKworIzogdHJlZS13YWxrLmM6MzkKK21zZ2lkICJtYWxmb3JtZWQgbW9kZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICLmoJHlr7nosaHkuK3nmoTmnaHnm67mqKHlvI/plJnor68iCisKKyM6IHRyZWUtd2Fsay5jOjQzCittc2dpZCAiZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIKK21zZ3N0ciAi5qCR5a+56LGh5p2h55uu5Lit56m655qE5paH5Lu25ZCNIgorCisjOiB0cmVlLXdhbGsuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IGNvbnRhaW5zIGJhY2tzbGFzaDogJyVzJyIKK21zZ3N0ciAi5qCR5p2h55uu5Lit55qE5paH5Lu25ZCN5YyF5ZCr5Y+N5pac5p2g77yaJyVzJyIKKworIzogdHJlZS13YWxrLmM6MTI0Cittc2dpZCAidG9vLXNob3J0IHRyZWUgZmlsZSIKK21zZ3N0ciAi5aSq55+t55qE5qCR5paH5Lu2IgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIgorbXNnc3RyICIiCisi5oKo5a+55LiL5YiX5paH5Lu255qE5pys5Zyw5L+u5pS55bCG6KKr5qOA5Ye65pON5L2c6KaG55uW77yaXG4iCisiJSVz6K+35Zyo5YiH5o2i5YiG5pSv5YmN5o+Q5Lqk5oiW6LSu6JeP5oKo55qE5L+u5pS544CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuaCqOWvueS4i+WIl+aWh+S7tueahOacrOWcsOS/ruaUueWwhuiiq+ajgOWHuuaTjeS9nOimhueblu+8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo5a+55LiL5YiX5paH5Lu255qE5pys5Zyw5L+u5pS55bCG6KKr5ZCI5bm25pON5L2c6KaG55uW77yaXG4iCisiJSVz6K+35Zyo5ZCI5bm25YmN5o+Q5Lqk5oiW6LSu6JeP5oKo55qE5L+u5pS544CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuaCqOWvueS4i+WIl+aWh+S7tueahOacrOWcsOS/ruaUueWwhuiiq+WQiOW5tuaTjeS9nOimhueblu+8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXNQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi5oKo5a+55LiL5YiX5paH5Lu255qE5pys5Zyw5L+u5pS55bCG6KKrICVzIOimhueblu+8mlxuIgorIiUlc+ivt+WcqCAlcyDkuYvliY3mj5DkuqTmiJbotK7ol4/mgqjnmoTkv67mlLnjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5oKo5a+55LiL5YiX5paH5Lu255qE5pys5Zyw5L+u5pS55bCG6KKrICVzIOimhueblu+8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4iCisiJXMiCittc2dzdHIgIiIKKyLmm7TmlrDlpoLkuIvnm67lvZXlsIbkvJrkuKLlpLHlhbbkuK3mnKrot5/ouKrnmoTmlofku7bvvJpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmnKrot5/ouKrnmoTmlofku7blsIbkvJrlm6DkuLrmo4Dlh7rmk43kvZzogIzooqvliKDpmaTvvJpcbiIKKyIlJXPor7flnKjliIfmjaLliIbmlK/kuYvliY3np7vliqjmiJbliKDpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5pyq6Lef6Liq55qE5paH5Lu25bCG5Lya5Zug5Li65qOA5Ye65pON5L2c6ICM6KKr5Yig6Zmk77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5pyq6Lef6Liq55qE5paH5Lu25bCG5Lya5Zug5Li65ZCI5bm25pON5L2c6ICM6KKr5Yig6Zmk77yaXG4iCisiJSVz6K+35Zyo5ZCI5bm25YmN56e75Yqo5oiW5Yig6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+acqui3n+i4queahOaWh+S7tuWwhuS8muWboOS4uuWQiOW5tuaTjeS9nOiAjOiiq+WIoOmZpO+8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSAlczpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+acqui3n+i4queahOaWh+S7tuWwhuS8muWboOS4uiAlcyDmk43kvZzogIzooqvliKDpmaTvvJpcbiIKKyIlJXPor7flnKggJXMg5YmN56e75Yqo5oiW5Yig6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+acqui3n+i4queahOaWh+S7tuWwhuS8muWboOS4uiAlcyDmk43kvZzogIzooqvliKDpmaTvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXNQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmnKrot5/ouKrnmoTmlofku7blsIbkvJrlm6DkuLrmo4Dlh7rmk43kvZzogIzooqvopobnm5bvvJpcbiIKKyIlJXPor7flnKjliIfmjaLliIbmlK/liY3np7vliqjmiJbliKDpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIKKyJjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmnKrot5/ouKrnmoTmlofku7blsIbkvJrlm6DkuLrmo4Dlh7rmk43kvZzogIzooqvopobnm5bvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5pyq6Lef6Liq55qE5paH5Lu25bCG5Lya5Zug5Li65ZCI5bm25pON5L2c6ICM6KKr6KaG55uW77yaXG4iCisiJSVz6K+35Zyo5ZCI5bm25YmN56e75Yqo5oiW5Yig6Zmk44CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmnKrot5/ouKrnmoTmlofku7blsIbkvJrlm6DkuLrlkIjlubbmk43kvZzogIzooqvopobnm5bvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5pyq6Lef6Liq55qE5paH5Lu25bCG5Lya5Zug5Li6ICVzIOaTjeS9nOiAjOiiq+imhueblu+8mlxuIgorIiUlc+ivt+WcqCAlcyDliY3np7vliqjmiJbliKDpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWMuuS4reS4i+WIl+acqui3n+i4queahOaWh+S7tuWwhuS8muWboOS4uiAlcyDmk43kvZzogIzooqvopobnm5bvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIKK21zZ3N0ciAi5p2h55uuICclcycg5ZKMICclcycg6YeN5Y+g44CC5peg5rOV5ZCI5bm244CCIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi5peg5rOV5pu05paw56iA55aP5qOA5Ye677ya5aaC5LiL5p2h55uu5LiN5piv5pyA5paw77yaXG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljLrkuK3kuIvliJfmlofku7blsIbooqvnqIDnlo/mo4Dlh7rmm7TmlrDmiYDopobnm5bvvJpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCAiCisidXBkYXRlOlxuIgorIiVzIgorbXNnc3RyICIiCisi5bel5L2c5Yy65Lit5LiL5YiX5paH5Lu25bCG6KKr56iA55aP5qOA5Ye65pu05paw5omA5Yig6Zmk77yaXG4iCisiJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzdWJtb2R1bGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLml6Dms5Xmm7TmlrDlrZDmqKHnu4TvvJpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nXG4iCittc2dzdHIgIuato+WcqOe7iOatolxuIgorCisjOiB1bnBhY2stdHJlZXMuYzozMTcKK21zZ2lkICJVcGRhdGluZyBmaWxlcyIKK21zZ3N0ciAi5q2j5Zyo5pu05paw5paH5Lu2IgorCisjOiB1bnBhY2stdHJlZXMuYzozNDkKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBwYXRocyBoYXZlIGNvbGxpZGVkIChlLmcuIGNhc2Utc2Vuc2l0aXZlIHBhdGhzXG4iCisib24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pIGFuZCBvbmx5IG9uZSBmcm9tIHRoZSBzYW1lXG4iCisiY29sbGlkaW5nIGdyb3VwIGlzIGluIHRoZSB3b3JraW5nIHRyZWU6XG4iCittc2dzdHIgIiIKKyLku6XkuIvot6/lvoTlj5HnlJ/norDmkp7vvIjlpoLvvJrlnKjkuI3ljLrliIblpKflsI/lhpnnmoTmlofku7bns7vnu5/kuIrnmoTljLrliIblpKflsI/lhpnnmoTot6/lvoTvvInvvIxcbiIKKyLlubbkuJTnorDmkp7nu4TkuK3lj6rmnInkuIDkuKrmlofku7blrZjlnKjlt6XkvZzljLrkuK3vvJpcbiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ0MQorbXNnaWQgIlVwZGF0aW5nIGluZGV4IGZsYWdzIgorbXNnc3RyICLmraPlnKjmm7TmlrDntKLlvJXmoIflv5ciCisKKyM6IHVybG1hdGNoLmM6MTYzCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgIuaXoOaViOeahCBVUkwg5pa55qGI5ZCN56ew5oiW5Lii5aSxICc6Ly8nIOWQjue8gCIKKworIzogdXJsbWF0Y2guYzoxODcgdXJsbWF0Y2guYzozNDYgdXJsbWF0Y2guYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICLml6DmlYjnmoQgJVhYIOi9rOS5ieW6j+WIlyIKKworIzogdXJsbWF0Y2guYzoyMTUKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAi57y65aSx5Li75py65ZCN5LiUIFVSTCDmlrnmoYjkuI3mmK8gJ2ZpbGU6JyIKKworIzogdXJsbWF0Y2guYzoyMzIKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICLkuIDkuKogJ2ZpbGU6JyBVUkwg5LiN5bqU6K+l5YyF5ZCr56uv5Y+j5Y+3IgorCisjOiB1cmxtYXRjaC5jOjI0NworbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgIuS4u+acuuWQjeS4reWMheWQq+aXoOaViOeahOWtl+espiIKKworIzogdXJsbWF0Y2guYzoyOTIgdXJsbWF0Y2guYzozMDMKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLml6DmlYjnmoTnq6/lj6Plj7ciCisKKyM6IHVybG1hdGNoLmM6MzcxCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAi5peg5pWI55qEICcuLicg6Lev5b6E54mH5q61IgorCisjOiB3b3JrdHJlZS5jOjI1OCBidWlsdGluL2FtLmM6MjA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICLor7vlj5YgJyVzJyDlpLHotKUiCisKKyM6IHdvcmt0cmVlLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIKK21zZ3N0ciAi5Zyo5Li75bel5L2c5Yy655qEICclcycg5LiN5piv5LuT5bqT55uu5b2VIgorCisjOiB3b3JrdHJlZS5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZpbGUgZG9lcyBub3QgY29udGFpbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUgbG9jYXRpb24iCittc2dzdHIgIuaWh+S7tiAnJXMnIOS4jeWMheWQq+W3peS9nOWMuueahOe7neWvuei3r+W+hCIKKworIzogd29ya3RyZWUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiJyVzJyDkuI3lrZjlnKgiCisKKyM6IHdvcmt0cmVlLmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgLmdpdCBmaWxlLCBlcnJvciBjb2RlICVkIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4qiAuZ2l0IOaWh+S7tu+8jOmUmeivr+eggSAlZCIKKworIzogd29ya3RyZWUuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCBiYWNrIHRvICclcyciCittc2dzdHIgIiclcycg5rKh5pyJ5oyH5Zue5YiwICclcyciCisKKyM6IHdyYXBwZXIuYzoxODYgd3JhcHBlci5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICLml6Dms5XmiZPlvIAgJyVzJyDov5vooYzor7vlhpkiCisKKyM6IHdyYXBwZXIuYzozODcgd3JhcHBlci5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgIuS4jeiDveiuv+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+hOinhOagvD4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAi5oSP5aSW55qE5beu5byC54q25oCBICVjIgorCisjOiBidWlsdGluL2FkZC5jOjkyIGJ1aWx0aW4vY29tbWl0LmM6Mjg4Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLmm7TmlrDmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgIuWIoOmZpCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTc3Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIuWIt+aWsOe0ouW8leS5i+WQjuWwmuacquiiq+aaguWtmOeahOWPmOabtO+8miIKKworIzogYnVpbHRpbi9hZGQuYzoyNTIgYnVpbHRpbi9yZXYtcGFyc2UuYzo4OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuS4jeiDveivu+WPlue0ouW8lSIKKworIzogYnVpbHRpbi9hZGQuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIuaXoOazleS4uuWGmeWFpeaJk+W8gCAnJXMn44CCIgorCisjOiBidWlsdGluL2FkZC5jOjI2NworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAi5LiN6IO955Sf5oiQ6KGl5LiBIgorCisjOiBidWlsdGluL2FkZC5jOjI3MAorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLnvJbovpHooaXkuIHlpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIuS4jeiDveWvuSAnJXMnIOiwg+eUqCBzdGF0IgorCisjOiBidWlsdGluL2FkZC5jOjI3NQorbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAi56m66KGl5LiB44CC5byC5bi457uI5q2i44CCIgorCisjOiBidWlsdGluL2FkZC5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bqU55SoICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg4Cittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICLkuIvliJfot6/lvoTmoLnmja7mgqjnmoTkuIDkuKogLmdpdGlnbm9yZSDmlofku7bogIzooqvlv73nlaXvvJpcbiIKKworIzogYnVpbHRpbi9hZGQuYzozMDggYnVpbHRpbi9jbGVhbi5jOjkxMCBidWlsdGluL2ZldGNoLmM6MTYzIGJ1aWx0aW4vbXYuYzoxMjQKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTYgYnVpbHRpbi9wdWxsLmM6MjIzIGJ1aWx0aW4vcHVzaC5jOjU0OAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMzQ0IGJ1aWx0aW4vcm0uYzoyNDEgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjUKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICLmvJTkuaAiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzExCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAi5Lqk5LqS5byP5ouj6YCJIgorCisjOiBidWlsdGluL2FkZC5jOjMxMiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MiBidWlsdGluL3Jlc2V0LmM6MzA3Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgIuS6pOS6kuW8j+aMkemAieaVsOaNruWdlyIKKworIzogYnVpbHRpbi9hZGQuYzozMTMKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgIue8lui+keW9k+WJjeW3ruW8guW5tuW6lOeUqCIKKworIzogYnVpbHRpbi9hZGQuYzozMTQKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIuWFgeiuuOa3u+WKoOW/veeVpeeahOaWh+S7tiIKKworIzogYnVpbHRpbi9hZGQuYzozMTUKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5pu05paw5bey6Lef6Liq55qE5paH5Lu2IgorCisjOiBidWlsdGluL2FkZC5jOjMxNgorbXNnaWQgInJlbm9ybWFsaXplIEVPTCBvZiB0cmFja2VkIGZpbGVzIChpbXBsaWVzIC11KSIKK21zZ3N0ciAi5a+55bey6Lef6Liq5paH5Lu277yI5pqX5ZCrIC1177yJ6YeN5paw5b2S5LiA5o2i6KGM56ymIgorCisjOiBidWlsdGluL2FkZC5jOjMxNworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAi5Y+q6K6w5b2V77yM6K+l6Lev5b6E56iN5ZCO5YaN5re75YqgIgorCisjOiBidWlsdGluL2FkZC5jOjMxOAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5re75Yqg5omA5pyJ5pS55Y+Y55qE5bey6Lef6Liq5paH5Lu25ZKM5pyq6Lef6Liq5paH5Lu2IgorCisjOiBidWlsdGluL2FkZC5jOjMyMQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICLlv73nlaXlt6XkvZzljLrkuK3np7vpmaTnmoTot6/lvoTvvIjlkowgLS1uby1hbGwg55u45ZCM77yJIgorCisjOiBidWlsdGluL2FkZC5jOjMyMworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAi5LiN5re75Yqg77yM5Y+q5Yi35paw57Si5byVIgorCisjOiBidWlsdGluL2FkZC5jOjMyNAorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgIui3s+i/h+WboOWHuumUmeS4jeiDvea3u+WKoOeahOaWh+S7tiIKKworIzogYnVpbHRpbi9hZGQuYzozMjUKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgIuajgOafpeWcqOa8lOS5oOaooeW8j+S4i+aWh+S7tu+8iOWNs+S9v+S4jeWtmOWcqO+8ieaYr+WQpuiiq+W/veeVpSIKKworIzogYnVpbHRpbi9hZGQuYzozMjcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDA0Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgIuimhuebluWIl+ihqOmHjOaWh+S7tueahOWPr+aJp+ihjOS9jSIKKworIzogYnVpbHRpbi9hZGQuYzozMjkKK21zZ2lkICJ3YXJuIHdoZW4gYWRkaW5nIGFuIGVtYmVkZGVkIHJlcG9zaXRvcnkiCittc2dzdHIgIuWIm+W7uuS4gOS4quW1jOWFpeW8j+S7k+W6k+aXtue7meS6iOitpuWRiiIKKworIzogYnVpbHRpbi9hZGQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSd2ZSBhZGRlZCBhbm90aGVyIGdpdCByZXBvc2l0b3J5IGluc2lkZSB5b3VyIGN1cnJlbnQgcmVwb3NpdG9yeS5cbiIKKyJDbG9uZXMgb2YgdGhlIG91dGVyIHJlcG9zaXRvcnkgd2lsbCBub3QgY29udGFpbiB0aGUgY29udGVudHMgb2ZcbiIKKyJ0aGUgZW1iZWRkZWQgcmVwb3NpdG9yeSBhbmQgd2lsbCBub3Qga25vdyBob3cgdG8gb2J0YWluIGl0LlxuIgorIklmIHlvdSBtZWFudCB0byBhZGQgYSBzdWJtb2R1bGUsIHVzZTpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisiSWYgeW91IGFkZGVkIHRoaXMgcGF0aCBieSBtaXN0YWtlLCB5b3UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZVxuIgorImluZGV4IHdpdGg6XG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyJTZWUgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKyLmgqjlnKjlvZPliY3ku5PlupPkuK3mt7vliqDkuoblj6bkuIDkuKpHaXTku5PlupPjgILlhYvpmoblpJblsYLnmoTku5PlupPlsIbkuI3ljIXlkKvltYzlhaXku5PlupPnmoRcbiIKKyLlhoXlrrnvvIzlubbkuJTkuI3nn6XpgZPor6XlpoLkvZXojrflj5blroPjgILlpoLmnpzmgqjopoHmt7vliqDkuIDkuKrlrZDmqKHnu4TvvIzkvb/nlKjvvJpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisi5aaC5p6c5oKo5LiN5bCP5b+D5re75Yqg5LqG6L+Z5Liq6Lev5b6E77yM5Y+v5Lul55So5LiL6Z2i55qE5ZG95Luk5bCG5YW25LuO57Si5byV5Lit5Yig6Zmk77yaXG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyLlj4Lop4EgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiDojrflj5bmm7TlpJrkv6Hmga/jgIIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIuato+WcqOa3u+WKoOW1jOWFpeW8jyBnaXQg5LuT5bqT77yaJXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIuS9v+eUqCAtZiDlj4LmlbDlpoLmnpzmgqjnoa7lrp7opoHmt7vliqDlroPku6zjgIJcbiIKKworIzogYnVpbHRpbi9hZGQuYzo0MDAKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLmt7vliqDmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDI4IGJ1aWx0aW4vY29tbWl0LmM6MzQ4Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDkuI4gLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9hZGQuYzo0MzQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIOS4jiAtLWVkaXQg5LiN5YW85a65IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSDlkowgLXUg6YCJ6aG55LqS5palIgorCisjOiBidWlsdGluL2FkZC5jOjQ0OQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIumAiemhuSAtLWlnbm9yZS1taXNzaW5nIOWPquiDveWSjCAtLWRyeS1ydW4g5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2FkZC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIuWPguaVsCAtLWNobW9kIOWPluWAvCAnJXMnIOW/hemhu+aYryAteCDmiJYgK3giCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDcxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ4IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3Cittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDkuI7ot6/lvoTooajovr7lvI/lj4LmlbDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDc4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjYwIGJ1aWx0aW4vY29tbWl0LmM6MzYwCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzCittc2dpZCAiLS1wYXRoc3BlYy1maWxlLW51bCByZXF1aXJlcyAtLXBhdGhzcGVjLWZyb20tZmlsZSIKK21zZ3N0ciAiLS1wYXRoc3BlYy1maWxlLW51bCDpnIDopoEgLS1wYXRoc3BlYy1mcm9tLWZpbGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICLmsqHmnInmjIflrprmlofku7bvvIzkuZ/msqHmnInmlofku7booqvmt7vliqDjgIJcbiIKKworIzogYnVpbHRpbi9hZGQuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIuS5n+iuuOaCqOaDs+imgeaJp+ihjCAnZ2l0IGFkZCAuJ++8n1xuIgorCisjOiBidWlsdGluL2FtLmM6MzQ3Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgIuS4jeiDveino+aekOS9nOiAheiEmuacrCIKKworIzogYnVpbHRpbi9hbS5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIOiiqyBhcHBseXBhdGNoLW1zZyDpkqnlrZDliKDpmaQiCisKKyM6IGJ1aWx0aW4vYW0uYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICLpnZ7ms5XnmoTovpPlhaXooYzvvJonJXMn44CCIgorCisjOiBidWlsdGluL2FtLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICLku44gJyVzJyDmi7fotJ3ms6jop6PliLAgJyVzJyDml7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MzcKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgImZzZWVrIOWksei0pSIKKworIzogYnVpbHRpbi9hbS5jOjcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q6KGl5LiBICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo3OTAKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAi5LiA5qyh5Y+q6IO95pyJ5LiA5LiqIFN0R0lUIOihpeS4gemYn+WIl+iiq+W6lOeUqCIKKworIzogYnVpbHRpbi9hbS5jOjgzOAorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLml6DmlYjnmoTml7bpl7TmiLMiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NDMgYnVpbHRpbi9hbS5jOjg1NQorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICLml6DmlYjnmoTml6XmnJ/ooYwiCisKKyM6IGJ1aWx0aW4vYW0uYzo4NTAKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAi5peg5pWI55qE5pe25Yy65YGP56e75YC8IgorCisjOiBidWlsdGluL2FtLmM6OTQzCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICLooaXkuIHmoLzlvI/mjqLmtYvlpLHotKXjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDggYnVpbHRpbi9jbG9uZS5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLliJvlu7rnm67lvZUgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NTMKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgIuaLhuWIhuihpeS4geWksei0peOAgiIKKworIzogYnVpbHRpbi9hbS5jOjEwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIuW9k+aCqOino+WGs+i/meS4gOmXrumimO+8jOaJp+ihjCBcIiVzIC0tY29udGludWVcIuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjEwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICLlpoLmnpzmgqjmg7PopoHot7Pov4fov5nkuIDooaXkuIHvvIzliJnmiafooYwgXCIlcyAtLXNraXBcIuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjEwODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICLoi6XopoHlpI3ljp/oh7Pljp/lp4vliIbmlK/lubblgZzmraLooaXkuIHmk43kvZzvvIzmiafooYwgXCIlcyAtLWFib3J0XCLjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTY5Cittc2dpZCAiUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQ7IHNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMgbWlnaHQgYmUgbG9zdC4iCittc2dzdHIgIuihpeS4geS9v+eUqCBmb3JtYXQ9Zmxvd2VkIOagvOW8j+WPkemAge+8jOihjOWwvueahOepuuagvOWPr+iDveS8muS4ouWkseOAgiIKKworIzogYnVpbHRpbi9hbS5jOjExOTcKK21zZ2lkICJQYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIuihpeS4geS4uuepuuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjEyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhdXRob3IgbGluZSBpbiBjb21taXQgJXMiCittc2dzdHIgIuWcqOaPkOS6pCAlcyDkuK3nvLrlpLHkvZzogIXooYwiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJS4qcyIKK21zZ3N0ciAi5peg5pWI55qE6Lqr5Lu95qCH6K+G77yaJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE0ODQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICLku5PlupPnvLrkuY/lv4XopoHnmoTmlbDmja7lr7nosaHku6Xov5vooYzkuInmlrnlkIjlubbjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDg2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAi5L2/55So57Si5byV5p2l6YeN5bu65LiA5Liq77yI5LiJ5pa55ZCI5bm255qE77yJ5Z+656GA55uu5b2V5qCRLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTUwNQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKyLmgqjmmK/lkKbmm77miYvliqjnvJbovpHov4fmgqjnmoTooaXkuIHvvJ9cbiIKKyLml6Dms5XlupTnlKjooaXkuIHliLDntKLlvJXkuK3nmoTmlbDmja7lr7nosaHkuIrjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTExCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICLlm57okL3liLDln7rnoYDniYjmnKzkuIrmiZPooaXkuIHlj4rov5vooYzkuInmlrnlkIjlubYuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTM3Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAi5peg5rOV5ZCI5bm25Y+Y5pu044CCIgorCisjOiBidWlsdGluL2FtLmM6MTU2OQorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgIuato+W6lOeUqOWIsOS4gOS4quepuuWOhuWPsuS4iiIKKworIzogYnVpbHRpbi9hbS5jOjE2MTYgYnVpbHRpbi9hbS5jOjE2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICLml6Dms5Xnu6fnu63vvJolcyDkuI3lrZjlnKjjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjM4Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICLmj5DkuqTlhoXlrrnkuLrvvJoiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWPpeWwvuepuuagvAorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9hbS5jOjE2NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAi5bqU55So77yf5pivW3ldL+WQpltuXS/nvJbovpFbZV0v5p+l55yL6KGl5LiBW3ZdL+W6lOeUqOaJgOaciVthXe+8miIKKworIzogYnVpbHRpbi9hbS5jOjE2OTUgYnVpbHRpbi9jb21taXQuYzozOTQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAi5peg5rOV5YaZ5YWl57Si5byV5paH5Lu2IgorCisjOiBidWlsdGluL2FtLmM6MTY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIuiEj+e0ouW8le+8muS4jeiDveW6lOeUqOihpeS4ge+8iOiEj+aWh+S7tu+8miVz77yJIgorCisjOiBidWlsdGluL2FtLmM6MTczOSBidWlsdGluL2FtLmM6MTgwNworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJS4qcyIKK21zZ3N0ciAi5bqU55So77yaJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NTYKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIuayoeacieWPmOabtCDigJTigJQg6KGl5LiB5bey57uP5bqU55So6L+H44CCIgorCisjOiBidWlsdGluL2FtLmM6MTc2MgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAi5omT6KGl5LiB5aSx6LSl5LqOICVzICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY2Cittc2dpZCAiVXNlICdnaXQgYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2gnIHRvIHNlZSB0aGUgZmFpbGVkIHBhdGNoIgorbXNnc3RyICLnlKggJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCcg5ZG95Luk5p+l55yL5aSx6LSl55qE6KGl5LiBIgorCisjOiBidWlsdGluL2FtLmM6MTgxMAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIuayoeacieWPmOabtCDigJTigJQg5oKo5piv5LiN5piv5b+Y5LqG5omn6KGMICdnaXQgYWRkJ++8n1xuIgorIuWmguaenOayoeacieS7gOS5iOimgea3u+WKoOWIsOaaguWtmOWMuueahO+8jOWImeW+iOWPr+iDveaYr+WFtuWug+aPkOS6pOW3sue7j+W8leWFpeS6huebuOWQjOeahOWPmOabtOOAglxuIgorIuaCqOS5n+iuuOaDs+imgei3s+i/h+i/meS4quihpeS4geOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE4MTcKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJZb3Ugc2hvdWxkICdnaXQgYWRkJyBlYWNoIGZpbGUgd2l0aCByZXNvbHZlZCBjb25mbGljdHMgdG8gbWFyayB0aGVtIGFzICIKKyJzdWNoLlxuIgorIllvdSBtaWdodCBydW4gYGdpdCBybWAgb24gYSBmaWxlIHRvIGFjY2VwdCBcImRlbGV0ZWQgYnkgdGhlbVwiIGZvciBpdC4iCittc2dzdHIgIiIKKyLlnKjmgqjnmoTntKLlvJXkuK3ku43lrZjlnKjmnKrlkIjlubbnmoTot6/lvoTjgIJcbiIKKyLmgqjlupTor6Xlr7nlt7Lnu4/lhrLnqoHop6PlhrPnmoTmr4/kuIDkuKrmlofku7bmiafooYwgJ2dpdCBhZGQnIOadpeagh+iusOW3sue7j+WujOaIkOOAgiBcbiIKKyLkvaDlj6/ku6Xlr7kgXCLnlLHku5bku6zliKDpmaRcIiDnmoTmlofku7bmiafooYwgYGdpdCBybWAg5ZG95Luk44CCIgorCisjOiBidWlsdGluL2FtLmM6MTkyNCBidWlsdGluL2FtLmM6MTkyOCBidWlsdGluL2FtLmM6MTk0MCBidWlsdGluL3Jlc2V0LmM6MzQ2CisjOiBidWlsdGluL3Jlc2V0LmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIuS4jeiDveino+aekOWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL2FtLmM6MTk3NgorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAi5riF56m657Si5byV5aSx6LSlIgorCisjOiBidWlsdGluL2FtLmM6MjAyMAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICLmgqjlpb3lg4/lnKjkuIrkuIDmrKEgJ2FtJyDlpLHotKXlkI7np7vliqjkuoYgSEVBROOAguacquWbnumAgOiHsyBPUklHX0hFQUQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAi5peg5pWI55qEIC0tcGF0Y2gtZm9ybWF0IOWAvO+8miVzIgorCisjOiBidWlsdGluL2FtLmM6MjE1MworbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gWzzpgInpobk+XSBbKDxtYm94PiB8IDxNYWlsZGlyPikuLi5dIgorCisjOiBidWlsdGluL2FtLmM6MjE1NAorbXNnaWQgImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICJnaXQgYW0gWzzpgInpobk+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjE2MAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLku6XkuqTkupLlvI/mlrnlvI/ov5DooYwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYyCittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgIuiAgeeahOWPguaVsCDigJTigJQg5peg5L2c55SoIgorCisjOiBidWlsdGluL2FtLmM6MjE2NAorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICLlpoLmnpzlv4XopoHvvIzlhYHorrjkvb/nlKjkuInmlrnlkIjlubbjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY1IGJ1aWx0aW4vaW5pdC1kYi5jOjQ5NCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU4CisjOiBidWlsdGluL3JlcGFjay5jOjMwNCBidWlsdGluL3N0YXNoLmM6ODExCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgIumdmem7mOaooeW8jyIKKworIzogYnVpbHRpbi9hbS5jOjIxNjcKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLlnKjmj5DkuqTor7TmmI7kuK3mt7vliqDkuIDkuKogU2lnbmVkLW9mZi1ieSDnrb7lkI0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTcwCittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgIuS9v+eUqCB1dGY4IOWtl+espumbhu+8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9hbS5jOjIxNzIKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLlkJEgZ2l0LW1haWxpbmZvIOS8oOmAkiAtayDlj4LmlbAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc0Cittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi5ZCRIGdpdC1tYWlsaW5mbyDkvKDpgJIgLWIg5Y+C5pWwIgorCisjOiBidWlsdGluL2FtLmM6MjE3NgorbXNnaWQgInBhc3MgLW0gZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIuWQkSBnaXQtbWFpbGluZm8g5Lyg6YCSIC1tIOWPguaVsCIKKworIzogYnVpbHRpbi9hbS5jOjIxNzgKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICLpkojlr7kgbWJveCDmoLzlvI/vvIzlkJEgZ2l0LW1haWxzcGxpdCDkvKDpgJIgLS1rZWVwLWNyIOWPguaVsCIKKworIzogYnVpbHRpbi9hbS5jOjIxODEKK21zZ2lkICJkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjciIKK21zZ3N0ciAi5LiN5ZCRIGdpdC1tYWlsc3BsaXQg5Lyg6YCSIC0ta2VlcC1jciDlj4LmlbDvvIzopobnm5YgYW0ua2VlcGNyIOeahOiuvue9riIKKworIzogYnVpbHRpbi9hbS5jOjIxODQKK21zZ2lkICJzdHJpcCBldmVyeXRoaW5nIGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUiCittc2dzdHIgIuS4ouW8g+ijgeWIh+e6v+WJjeeahOaJgOacieWGheWuuSIKKworIzogYnVpbHRpbi9hbS5jOjIxODYgYnVpbHRpbi9hbS5jOjIxODkgYnVpbHRpbi9hbS5jOjIxOTIgYnVpbHRpbi9hbS5jOjIxOTUKKyM6IGJ1aWx0aW4vYW0uYzoyMTk4IGJ1aWx0aW4vYW0uYzoyMjAxIGJ1aWx0aW4vYW0uYzoyMjA0IGJ1aWx0aW4vYW0uYzoyMjA3CisjOiBidWlsdGluL2FtLmM6MjIxMworbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgIuS8oOmAkue7mSBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjAzIGJ1aWx0aW4vY29tbWl0LmM6MTM4NiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NiBidWlsdGluL2dyZXAuYzo4ODMgYnVpbHRpbi9tZXJnZS5jOjI0OQorIzogYnVpbHRpbi9wdWxsLmM6MTYwIGJ1aWx0aW4vcHVsbC5jOjIxOSBidWlsdGluL3JlYmFzZS5jOjE0NjkKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE1IGJ1aWx0aW4vcmVwYWNrLmM6MzE5IGJ1aWx0aW4vcmVwYWNrLmM6MzIxCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjUwIGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzIgYnVpbHRpbi90YWcuYzo0MDMKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTQgcGFyc2Utb3B0aW9ucy5oOjE3NSBwYXJzZS1vcHRpb25zLmg6MzE2Cittc2dpZCAibiIKK21zZ3N0ciAibiIKKworIzogYnVpbHRpbi9hbS5jOjIyMDkgYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOAorIzogYnVpbHRpbi9yZXBsYWNlLmM6NTU1IGJ1aWx0aW4vdGFnLmM6NDM3IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICLmoLzlvI8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjEwCittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICLooaXkuIHnmoTmoLzlvI8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE2Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLmiZPooaXkuIHlpLHotKXml7bmmL7npLrnmoTplJnor6/kv6Hmga8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE4Cittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAi5Yay56qB6Kej5Yaz5ZCO57un57ut5bqU55So6KGl5LiBIgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICLlkowgLS1jb250aW51ZSDlkIzkuYkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI0Cittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAi6Lez6L+H5b2T5YmN6KGl5LiBIgorCisjOiBidWlsdGluL2FtLmM6MjIyNworbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgIuaBouWkjeWOn+Wni+WIhuaUr+W5tue7iOatouaJk+ihpeS4geaTjeS9nOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uIGJ1dCBrZWVwIEhFQUQgd2hlcmUgaXQgaXMuIgorbXNnc3RyICLnu4jmraLooaXkuIHmk43kvZzkvYbkv53mjIEgSEVBRCDkuI3lj5jjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMzCittc2dpZCAic2hvdyB0aGUgcGF0Y2ggYmVpbmcgYXBwbGllZC4iCittc2dzdHIgIuaYvuekuuato+WcqOW6lOeUqOeahOihpeS4geOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzcKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIuWwhuS9nOiAheaXpeacn+S9nOS4uuaPkOS6pOaXpeacnyIKKworIzogYnVpbHRpbi9hbS5jOjIyMzkKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICLnlKjlvZPliY3ml7bpl7TkvZzkuLrkvZzogIXml6XmnJ8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQxIGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMjAgYnVpbHRpbi9jb21taXQuYzoxNTA3CisjOiBidWlsdGluL21lcmdlLmM6Mjg2IGJ1aWx0aW4vcHVsbC5jOjE5NCBidWlsdGluL3JlYmFzZS5jOjUwOQorIzogYnVpbHRpbi9yZWJhc2UuYzoxNTEzIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE3IGJ1aWx0aW4vdGFnLmM6NDE4Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJrZXktaWQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQyIGJ1aWx0aW4vcmViYXNlLmM6NTEwIGJ1aWx0aW4vcmViYXNlLmM6MTUxNAorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgIuS9v+eUqCBHUEcg562+5ZCN5o+Q5LqkIgorCisjOiBidWlsdGluL2FtLmM6MjI0NQorbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICLvvIjlhoXpg6jkvb/nlKjvvIznlKjkuo4gZ2l0LXJlYmFzZe+8iSIKKworIzogYnVpbHRpbi9hbS5jOjIyNjMKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyLlj4LmlbAgLWIvLS1iaW5hcnkg5bey57uP5b6I6ZW/5pe26Ze05LiN5YGa5Lu75L2V5a6e6LSo5pON5L2c5LqG77yM5bm25LiU5bCG6KKr56e76Zmk44CCXG4iCisi6K+35LiN6KaB5YaN5L2/55So5a6D5LqG44CCIgorCisjOiBidWlsdGluL2FtLmM6MjI3MAorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi6K+75Y+W57Si5byV5aSx6LSlIgorCisjOiBidWlsdGluL2FtLmM6MjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgIuS5i+WJjeeahOWPmOWfuuebruW9lSAlcyDku43nhLblrZjlnKjvvIzkvYbljbTmj5DkvpvkuoYgbWJveOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKyLlj5HnjrDkuobplJnor6/nmoQgJXMg55uu5b2V44CCXG4iCisi5L2/55SoIFwiZ2l0IGFtIC0tYWJvcnRcIiDliKDpmaTlroPjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzE1Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAi6Kej5Yaz5pON5L2c5pyq6L+b6KGM77yM5oiR5Lus5LiN5Lya57un57ut44CCIgorCisjOiBidWlsdGluL2FtLmM6MjMyNQorbXNnaWQgImludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgcGF0Y2hlcyBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICLkuqTkupLlvI/mqKHlvI/pnIDopoHlkb3ku6TooYzkuIrmj5DkvpvooaXkuIEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4Cittc2dpZCAiZ2l0IGFwcGx5IFs8b3B0aW9ucz5dIFs8cGF0Y2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFs86YCJ6aG5Pl0gWzzooaXkuIE+Li4uXSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yib5bu65b2S5qGj5paH5Lu2ICclcyciCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAi5LiN6IO96YeN5a6a5ZCR6L6T5Ye6IgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZl77ya5pyq5o+Q5L6b6L+c56iLIFVSTCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IGEgZmx1c2ggcGFja2V0IgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8muacn+acm+aYryBBQ0svTkFL77yM5Y205b6X5YiwIGZsdXNoIOWMhSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZl77yaTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjUKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZl77ya5Y2P6K6u6ZSZ6K+vIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8muW6lOacieS4gOS4qiBmbHVzaCDljIUiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMgorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjMKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA8YmFkX3Rlcm0+IDxnb29kX3Rlcm0+IgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS13cml0ZS10ZXJtcyA85Z2PLeacr+ivrT4gPOWlvS3mnK/or60+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjQKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2xlYW4tc3RhdGUiCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1yZXNldCBbPOaPkOS6pD5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjYKK21zZ2lkICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPHN0YXRlPiA8cmV2aXNpb24+IDxnb29kX3Rlcm0+ICIKKyI8YmFkX3Rlcm0+IgorbXNnc3RyICIiCisiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXdyaXRlIFstLW5vLWxvZ10gPOeKtuaAgT4gPOeJiOacrD4gPOWlvS3mnK/or60+IDzlnY8t5pyv6K+tIgorIj4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNworbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA8Y29tbWFuZD4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtY2hlY2stYW5kLXNldC10ZXJtcyA85ZG95LukPiA85aW9Leacr+ivrT4gPOWdjy3mnK/or60+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjgKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA8Z29vZF90ZXJtPiA8YmFkX3Rlcm0+IFs8dGVybT5dIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtbmV4dC1jaGVjayA85aW9Leacr+ivrT4gPOWdjy3mnK/or60+IFs85pyv6K+tPl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyOQorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLW9sZCB8IC0tdGVybS1iYWQgfCAtLSIKKyJ0ZXJtLW5ld10iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMAorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9IgorIj08dGVybT5dWy0tbm8tY2hlY2tvdXRdIFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTzmnK/or60+IC0tdGVybS17bmV3LGJhZH0iCisiPTzmnK/or60+XVstLW5vLWNoZWNrb3V0XSBbPOWdjz4gWzzlpb0+Li4uXV0gWy0tXSBbPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0ZXJtIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4quacieaViOeahOacr+ivrSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHVzZSB0aGUgYnVpbHRpbiBjb21tYW5kICclcycgYXMgYSB0ZXJtIgorbXNnc3RyICLkuI3og73kvb/nlKjlhoXnva7lkb3ku6QgJyVzJyDkvZzkuLrmnK/or60iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB0ZXJtICclcyciCittc2dzdHIgIuS4jeiDveS/ruaUueacr+ivrSAnJXMnIOeahOWQq+S5iSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjExMQorbXNnaWQgInBsZWFzZSB1c2UgdHdvIGRpZmZlcmVudCB0ZXJtcyIKK21zZ3N0ciAi6K+35L2/55So5Lik5Liq5LiN5ZCM55qE5pyv6K+tIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTE4Cittc2dpZCAiY291bGQgbm90IG9wZW4gdGhlIGZpbGUgQklTRUNUX1RFUk1TIgorbXNnc3RyICLkuI3og73miZPlvIDmlofku7YgQklTRUNUX1RFUk1TIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLlxuIgorbXNnc3RyICLmiJHku6zmsqHmnInlnKjkuozliIbmn6Xmib7jgIJcbiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJXMnLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAi5LiN6IO95qOA5Ye65Y6f5aeLIEhFQUQgJyVzJ+OAguWwneivlSAnZ2l0IGJpc2VjdCByZXNldCA85o+Q5LqkPifjgIIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJXMiCittc2dzdHIgIuWdj+eahCBiaXNlY3Rfd3JpdGUg5Y+C5pWw77yaJXMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgZ2V0IHRoZSBvaWQgb2YgdGhlIHJldiAnJXMnIgorbXNnc3RyICLml6Dms5Xojrflj5bniYjmnKwgJyVzJyDnmoTlr7nosaEgSUQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3Qgb3BlbiB0aGUgZmlsZSAnJXMnIgorbXNnc3RyICLml6Dms5XmiZPlvIDmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAlcy8lcyBiaXNlY3QiCittc2dzdHIgIuaXoOaViOeahOWRveS7pO+8muaCqOW9k+WJjeato+WkhOS6juS4gOS4qiAlcy8lcyDkuozliIbmn6Xmib7kuK0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisi5oKo6ZyA6KaB57uZ5oiR6Iez5bCR5LiA5LiqICVzIOWSjOS4gOS4qiAlcyDniYjmnKzjgIJcbiIKKyLkuLrmraTmgqjlj6/ku6XnlKggXCJnaXQgYmlzZWN0ICVzXCIg5ZKMIFwiZ2l0IGJpc2VjdCAlc1wi44CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICVzIGFuZCAlcyByZXZpc2lvbi5cbiIKKyJZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJXNcIiBhbmQgXCJnaXQgYmlzZWN0ICVzXCIgZm9yIHRoYXQuIgorbXNnc3RyICIiCisi5oKo6ZyA6KaB5omn6KGMIFwiZ2l0IGJpc2VjdCBzdGFydFwiIOadpeW8gOWni+OAglxuIgorIueEtuWQjumcgOimgeaPkOS+m+aIkeiHs+WwkeS4gOS4qiAlcyDlkozkuIDkuKogJXMg54mI5pys44CCXG4iCisi5Li65q2k5oKo5Y+v5Lul55SoIFwiZ2l0IGJpc2VjdCAlc1wiIOWSjCBcImdpdCBiaXNlY3QgJXNcIiDlkb3ku6TjgIIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmlzZWN0aW5nIG9ubHkgd2l0aCBhICVzIGNvbW1pdCIKK21zZ3N0ciAi5Zyo5Y+q5pyJ5LiA5LiqICVzIOaPkOS6pOeahOaDheWGteS4i+S6jOWIhuafpeaJviIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5Y+l5bC+56m65qC8CisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzMwCittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIuaCqOehruiupOS5iFtZL25d77yfICIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM3NworbXNnaWQgIm5vIHRlcm1zIGRlZmluZWQiCittc2dzdHIgIuacquWumuS5ieacr+ivrSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjdXJyZW50IHRlcm1zIGFyZSAlcyBmb3IgdGhlIG9sZCBzdGF0ZVxuIgorImFuZCAlcyBmb3IgdGhlIG5ldyBzdGF0ZS5cbiIKK21zZ3N0ciAi5oKo5b2T5YmN6ZKI5a+55pen54q25oCB55qE5pyv6K+t5pivICVz77yM5a+55paw54q25oCB55qE5pyv6K+t5pivICVz44CCXG4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImludmFsaWQgYXJndW1lbnQgJXMgZm9yICdnaXQgYmlzZWN0IHRlcm1zJy5cbiIKKyJTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6IC0tdGVybS1nb29kfC0tdGVybS1vbGQgYW5kIC0tdGVybS1iYWR8LS10ZXJtLW5ldy4iCittc2dzdHIgIiIKKyLlkb3ku6QgJ2dpdCBiaXNlY3QgdGVybXMnIOeahOWPguaVsCAlcyDml6DmlYjjgIJcbiIKKyLmlK/mjIHnmoTpgInpobnmnInvvJotLXRlcm0tZ29vZHwtLXRlcm0tb2xkIOWSjCAtLXRlcm0tYmFkfC0tdGVybS1uZXfjgIIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIG9wdGlvbjogJyVzJyIKK21zZ3N0ciAi5pyq6K+G5Yir55qE6YCJ6aG577yaJyVzJyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICInJXMnIOeci+i1t+adpeS4jeaYr+S4gOS4quacieaViOeahOeJiOacrCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUxMgorbXNnaWQgImJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAi5Z2P55qEIEhFQUQgLSDmiJHpnIDopoHkuIDkuKogSEVBRCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICJjaGVja2luZyBvdXQgJyVzJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCBzdGFydCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICLmo4Dlh7ogJyVzJyDlpLHotKXjgILlsJ3or5UgJ2dpdCBiaXNlY3Qgc3RhcnQgPOacieaViOWIhuaUrz4n44CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTQ4Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAi5LiN5Lya5Zyo5YGa5LqGIGNnLXNlZWsg55qE5qCR5LiK5YGa5LqM5YiG5p+l5om+IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTUxCittc2dpZCAiYmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAi5Z2P55qEIEhFQUQgLSDlpYfmgKrnmoTnrKblj7flvJXnlKgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWY6ICclcyciCittc2dzdHIgIuaXoOaViOeahOW8leeUqO+8miclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzEKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICLmiafooYwgJ2dpdCBiaXNlY3QgbmV4dCciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzMKK21zZ2lkICJ3cml0ZSB0aGUgdGVybXMgdG8gLmdpdC9CSVNFQ1RfVEVSTVMiCittc2dzdHIgIuWwhuacr+ivreWGmeWFpSAuZ2l0L0JJU0VDVF9URVJNUyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNQorbXNnaWQgImNsZWFudXAgdGhlIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAi5riF6Zmk5LqM5YiG5p+l5om+54q25oCBIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjM3Cittc2dpZCAiY2hlY2sgZm9yIGV4cGVjdGVkIHJldnMiCittc2dzdHIgIuajgOafpemihOacn+eahOeJiOacrCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzOQorbXNnaWQgInJlc2V0IHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIua4hemZpOS6jOWIhuafpeaJvueKtuaAgSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MQorbXNnaWQgIndyaXRlIG91dCB0aGUgYmlzZWN0aW9uIHN0YXRlIGluIEJJU0VDVF9MT0ciCittc2dzdHIgIuWwhuS6jOWIhuafpeaJvueahOeKtuaAgeWGmeWFpSBCSVNFQ1RfTE9HIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQzCittc2dpZCAiY2hlY2sgYW5kIHNldCB0ZXJtcyBpbiBhIGJpc2VjdGlvbiBzdGF0ZSIKK21zZ3N0ciAi5Zyo5LiA5Liq5LqM5YiG5p+l5om+54q25oCB5Lit5qOA5p+l5ZKM6K6+572u5pyv6K+tIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ1Cittc2dpZCAiY2hlY2sgd2hldGhlciBiYWQgb3IgZ29vZCB0ZXJtcyBleGlzdCIKK21zZ3N0ciAi5qOA5p+l5Z2P55qE5oiW5aW955qE5pyv6K+t5piv5ZCm5a2Y5ZyoIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjQ3Cittc2dpZCAicHJpbnQgb3V0IHRoZSBiaXNlY3QgdGVybXMiCittc2dzdHIgIuaJk+WNsOS6jOWIhuafpeaJvuacr+ivrSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0OQorbXNnaWQgInN0YXJ0IHRoZSBiaXNlY3Qgc2Vzc2lvbiIKK21zZ3N0ciAi5ZCv5Yqo5LqM5YiG5p+l5om+6L+H56iLIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjUxCittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAi5pu05pawIEJJU0VDVF9IRUFEIOiAjOmdnuajgOWHuuW9k+WJjeaPkOS6pCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MworbXNnaWQgIm5vIGxvZyBmb3IgQklTRUNUX1dSSVRFIgorbXNnc3RyICJCSVNFQ1RfV1JJVEUg5peg5pel5b+XIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjcwCittc2dpZCAiLS13cml0ZS10ZXJtcyByZXF1aXJlcyB0d28gYXJndW1lbnRzIgorbXNnc3RyICItLXdyaXRlLXRlcm1zIOmcgOimgeS4pOS4quWPguaVsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3NAorbXNnaWQgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIHJlcXVpcmVzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtY2xlYW4tc3RhdGUg5LiN5bim5Y+C5pWwIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjgxCittc2dpZCAiLS1iaXNlY3QtcmVzZXQgcmVxdWlyZXMgZWl0aGVyIG5vIGFyZ3VtZW50IG9yIGEgY29tbWl0IgorbXNnc3RyICItLWJpc2VjdC1yZXNldCDml6DpnIDlj4LmlbDmiJbogIXpnIDopoHkuIDkuKrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2ODUKK21zZ2lkICItLWJpc2VjdC13cml0ZSByZXF1aXJlcyBlaXRoZXIgNCBvciA1IGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3Qtd3JpdGUg6ZyA6KaBIDQg5oiWIDUg5Liq5Y+C5pWwIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjkxCittc2dpZCAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIHJlcXVpcmVzIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWNoZWNrLWFuZC1zZXQtdGVybXMg6ZyA6KaBIDMg5Liq5Y+C5pWwIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njk3Cittc2dpZCAiLS1iaXNlY3QtbmV4dC1jaGVjayByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIgorbXNnc3RyICItLWJpc2VjdC1uZXh0LWNoZWNrIOmcgOimgSAyIOaIliAzIOS4quWPguaVsCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcwMworbXNnaWQgIi0tYmlzZWN0LXRlcm1zIHJlcXVpcmVzIDAgb3IgMSBhcmd1bWVudCIKK21zZ3N0ciAiLS1iaXNlY3QtdGVybXMg6ZyA6KaBIDAg5oiWIDEg5Liq5Y+C5pWwIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzEKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPOmAiemhuT5dIFs854mI5pys6YCJ6aG5Pl0gWzzniYjmnKw+XSBbLS1dIDzmlofku7Y+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzYKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPOeJiOacrOmAiemhuT4g55qE5paH5qGj6K6w5b2V5ZyoIGdpdC1yZXYtbGlzdCgxKSDkuK0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0aW5nIGEgY29sb3I6ICVzIgorbXNnc3RyICLmnJ/mnJvkuIDkuKrpopzoibLvvJolcyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjQxNgorbXNnaWQgIm11c3QgZW5kIHdpdGggYSBjb2xvciIKK21zZ3N0ciAi5b+F6aG75Lul5LiA5Liq6aKc6Imy57uT5bC+IgorCisjOiBidWlsdGluL2JsYW1lLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgJyVzJyBpbiBjb2xvci5ibGFtZS5yZXBlYXRlZExpbmVzIgorbXNnc3RyICLorr7nva4gY29sb3IuYmxhbWUucmVwZWF0ZWRMaW5lcyDkuK3nmoTml6DmlYjpopzoibIgJyVzJyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjc0NworbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIGJsYW1lLmNvbG9yaW5nIgorbXNnc3RyICLorr7nva4gYmxhbWUuY29sb3Jpbmcg5Lit55qE5peg5pWI5Y+W5YC8IgorCisjOiBidWlsdGluL2JsYW1lLmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIHJldmlzaW9uICVzIHRvIGlnbm9yZSIKK21zZ3N0ciAi5LiN6IO95om+5Yiw6KaB5b+955Wl55qE54mI5pysICVzIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ0Cittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAi5aKe6YeP5byP5Zyw5pi+56S65Y+R546w55qEIGJsYW1lIOadoeebriIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIui+ueeVjOaPkOS6pOaYvuekuuepuueahCBTSEEtMe+8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg0NgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi5LiN5oqK5qC55o+Q5Lqk5L2c5Li66L6555WM77yI6buY6K6k77ya5YWz6Zet77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ3Cittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAi5pi+56S65ZG95Luk5raI6ICX57uf6K6hIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODQ4Cittc2dpZCAiRm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLlvLrliLbov5vluqbmmL7npLoiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NDkKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAi5pi+56S65Yik5patIGJsYW1lIOadoeebruS9jeenu+eahOW+l+WIhuiviuaWreS/oeaBryIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MAorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICLmmL7npLrljp/lp4vmlofku7blkI3vvIjpu5jorqTvvJroh6rliqjvvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTEKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuaYvuekuuWOn+Wni+eahOihjOWPt++8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MgorbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIuaYvuekuuS4uuS4gOS4qumAguWQiOacuuWZqOivu+WPlueahOagvOW8jyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1MworbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5Li65q+P5LiA6KGM5pi+56S65py65Zmo6YCC55So55qE5o+Q5Lqk5L+h5oGvIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU0Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi5L2/55So5ZKMIGdpdC1hbm5vdGF0ZSDnm7jlkIznmoTovpPlh7rmqKHlvI/vvIjpu5jorqTvvJrlhbPpl63vvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTUKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuaYvuekuuWOn+Wni+aXtumXtOaIs++8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg1NgorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi5pi+56S66ZW/55qEIFNIQTEg5o+Q5Lqk5Y+377yI6buY6K6k77ya5YWz6Zet77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU3Cittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi6ZqQ6JeP5L2c6ICF5ZCN5a2X5ZKM5pe26Ze05oiz77yI6buY6K6k77ya5YWz6Zet77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODU4Cittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLmmL7npLrkvZzogIXnmoTpgq7nrrHogIzkuI3mmK/lkI3lrZfvvIjpu5jorqTvvJrlhbPpl63vvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NTkKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAi5b+955Wl56m655m95beu5byCIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwIGJ1aWx0aW4vbG9nLmM6MTcwMgorbXNnaWQgInJldiIKK21zZ3N0ciAi54mI5pysIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODYwCittc2dpZCAiSWdub3JlIDxyZXY+IHdoZW4gYmxhbWluZyIKK21zZ3N0ciAi5Zyo5omn6KGMIGJsYW1lIOaTjeS9nOaXtuW/veeVpSA854mI5pysPiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2MQorbXNnaWQgIklnbm9yZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4iCittc2dzdHIgIuW/veeVpeadpeiHqiA85paH5Lu2PiDkuK3nmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjIKK21zZ2lkICJjb2xvciByZWR1bmRhbnQgbWV0YWRhdGEgZnJvbSBwcmV2aW91cyBsaW5lIGRpZmZlcmVudGx5IgorbXNnc3RyICLkvb/nlKjpopzoibLpl7TpmpTovpPlh7rkuI7liY3kuIDooYzkuI3lkIznmoTph43lpI3lhYPkv6Hmga8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjMKK21zZ2lkICJjb2xvciBsaW5lcyBieSBhZ2UiCittc2dzdHIgIuS+neaNruaXtumXtOedgOiJsiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NAorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAi6Iqx6LS56aKd5aSW55qE5b6q546v5p2l5om+5Yiw5pu05aW955qE5Yy56YWNIgorCisjOiBidWlsdGluL2JsYW1lLmM6ODY1Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICLkvb/nlKjmnaXoh6ogPOaWh+S7tj4g55qE5L+u6K6i6ZuG6ICM5LiN5piv6LCD55SoIGdpdC1yZXYtbGlzdCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2NgorbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIuS9v+eUqCA85paH5Lu2PiDnmoTlhoXlrrnkvZzkuLrmnIDnu4jnmoTlm77niYciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcgYnVpbHRpbi9ibGFtZS5jOjg2OAorbXNnaWQgInNjb3JlIgorbXNnc3RyICLlvpfliIYiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjcKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICLmib7liLDmlofku7blhoXlj4rot6jmlofku7bnmoTooYzmi7fotJ0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjgKK21zZ2lkICJGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICLmib7liLDmlofku7blhoXlj4rot6jmlofku7bnmoTooYznp7vliqgiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo4NjkKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjg2OQorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICLlj6rlpITnkIbooYzojIPlm7TlnKggbiDlkowgbSDkuYvpl7TnmoTvvIzku44gMSDlvIDlp4siCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzo5MjEKK21zZ2lkICItLXByb2dyZXNzIGNhbid0IGJlIHVzZWQgd2l0aCAtLWluY3JlbWVudGFsIG9yIHBvcmNlbGFpbiBmb3JtYXRzIgorbXNnc3RyICItLXByb2dyZXNzIOS4jeiDveWSjCAtLWluY3JlbWVudGFsIOaIliAtLXBvcmNlbGFpbiDlkIzml7bkvb/nlKgiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlCisjLiBtYXhpbXVtIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluCisjLiAiZ2l0IGJsYW1lIiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMQorIy4gbW9udGhzIGFnbyIsIHdoaWNoIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QKKyMuIGFtb25nIHZhcmlvdXMgZm9ybXMgb2YgcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0CisjLiB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IgZmV3ZXIgZGlzcGxheQorIy4gY29sdW1ucy4KKyMuCisjOiBidWlsdGluL2JsYW1lLmM6OTcyCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiNCDlubQgMTEg5Liq5pyI5YmNIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lIgorbXNnaWRfcGx1cmFsICJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIKK21zZ3N0clswXSAi5paH5Lu2ICVzIOWPquaciSAlbHUg6KGMIgorbXNnc3RyWzFdICLmlofku7YgJXMg5Y+q5pyJICVsdSDooYwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoxMTI1Cittc2dpZCAiQmxhbWluZyBsaW5lcyIKK21zZ3N0ciAi6L+96Liq5Luj56CB6KGMIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI5Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YCJ6aG5Pl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzozMAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YCJ6aG5Pl0gWy1sXSBbLWZdIDzliIbmlK/lkI0+IFs86LW35aeL54K5Pl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzEKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgInpobk+XSBbLXJdICgtZCB8IC1EKSA85YiG5pSv5ZCNPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmAiemhuT5dICgtbSB8IC1NKSBbPOaXp+WIhuaUrz5dIDzmlrDliIbmlK8+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLWMgfCAtQykgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YCJ6aG5Pl0gKC1jIHwgLUMpIFs86ICB5YiG5pSvPl0gPOaWsOWIhuaUrz4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YCJ6aG5Pl0gWy1yIHwgLWFdIFstLXBvaW50cy1hdF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzUKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YCJ6aG5Pl0gWy1yIHwgLWFdIFstLWZvcm1hdF0iCisKKyMgIOivkeiAhe+8muS/neaMgeWOn+aNouihjOagvOW8j++8jOWcqOi+k+WHuuaXtiAlcyDnmoTmm7/ku6PlhoXlrrnkvJrorqnlrZfnrKbkuLLlj5jplb8KKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIuWwhuimgeWIoOmZpOeahOWIhuaUryAnJXMnIOW3sue7j+iiq+WQiOW5tuWIsFxuIgorIiAgICAgICAgICclcyfvvIzkvYbmnKrlkIjlubbliLAgSEVBROOAgiIKKworIyAg6K+R6ICF77ya5L+d5oyB5Y6f5o2i6KGM5qC85byP77yM5Zyo6L6T5Ye65pe2ICVzIOeahOabv+S7o+WGheWuueS8muiuqeWtl+espuS4suWPmOmVvworIzogYnVpbHRpbi9icmFuY2guYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisi5bm25pyq5Yig6Zmk5YiG5pSvICclcyfvvIwg6Jm954S25a6D5bey57uP5ZCI5bm25YiwIEhFQUTvvIxcbiIKKyIgICAgICAgICDnhLbogIzljbTlsJrmnKrooqvlkIjlubbliLDliIbmlK8gJyVzJyDjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAi5peg5rOV5p+l6K+iICclcycg5oyH5ZCR55qE5o+Q5Lqk5a+56LGhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyLliIbmlK8gJyVzJyDmsqHmnInlrozlhajlkIjlubbjgIJcbiIKKyLlpoLmnpzmgqjnoa7orqTopoHliKDpmaTlroPvvIzmiafooYwgJ2dpdCBicmFuY2ggLUQgJXMn44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4OQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIuabtOaWsOmFjee9ruaWh+S7tuWksei0pSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgIuS4jeiDveWwhiAtYSDlkowgLWQg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNgorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAi5peg5rOV5p+l6K+iIEhFQUQg5oyH5ZCR55qE5o+Q5Lqk5a+56LGhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIuaXoOazleWIoOmZpOajgOWHuuS6jiAnJTIkcycg55qE5YiG5pSvICclMSRzJ+OAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIuacquiDveaJvuWIsOi/nOeoi+i3n+i4quWIhuaUryAnJXMn44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLliIbmlK8gJyVzJyDmnKrlj5HnjrDjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk6L+c56iL6Lef6Liq5YiG5pSvICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLml6Dms5XliKDpmaTliIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLlt7LliKDpmaTov5znqIvot5/ouKrliIbmlK8gJXPvvIjmm77kuLogJXPvvInjgIJcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIuW3suWIoOmZpOWIhuaUryAlc++8iOabvuS4uiAlc++8ieOAglxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQyOSBidWlsdGluL3RhZy5jOjYxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCBzdHJpbmciCittc2dzdHIgIuS4jeiDveino+aekOagvOW8j+WMluWtl+espuS4siIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjAKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCDmj5DkuqQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgKCVzKSBwb2ludHMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyIKK21zZ3N0ciAiSEVBRCAoJXMpIOaMh+WQkSByZWZzL2hlYWRzLyDkuYvlpJYiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBpcyBiZWluZyByZWJhc2VkIGF0ICVzIgorbXNnc3RyICLliIbmlK8gJXMg5q2j6KKr5Y+Y5Z+65YiwICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgYmlzZWN0ZWQgYXQgJXMiCittc2dzdHIgIuWIhuaUryAlcyDmraPooqvkuozliIbmn6Xmib7kuo4gJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTAyCittc2dpZCAiY2Fubm90IGNvcHkgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICLml6Dms5Xmi7fotJ3lvZPliY3liIbmlK/lm6DkuLrkuI3lpITkuo7ku7vkvZXliIbmlK/kuIrjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIuaXoOazlemHjeWRveWQjeW9k+WJjeWIhuaUr+WboOS4uuS4jeWkhOS6juS7u+S9leWIhuaUr+S4iuOAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE5YiG5pSv5ZCN77yaJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDIKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAi5YiG5pSv6YeN5ZG95ZCN5aSx6LSlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0NAorbXNnaWQgIkJyYW5jaCBjb3B5IGZhaWxlZCIKK21zZ3N0ciAi5YiG5pSv5ou36LSd5aSx6LSlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGEgY29weSBvZiBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIgorbXNnc3RyICLlt7LkuLrplJnor6/lkb3lkI3nmoTliIbmlK8gJyVzJyDliJvlu7rkuobkuIDkuKrlia/mnKwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICLlt7LlsIbplJnor6/lkb3lkI3nmoTliIbmlK8gJyVzJyDph43lkb3lkI0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIuWIhuaUr+mHjeWRveWQjeS4uiAlc++8jOS9hiBIRUFEIOayoeacieabtOaWsO+8gSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjYKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIuWIhuaUr+iiq+mHjeWRveWQje+8jOS9huabtOaWsOmFjee9ruaWh+S7tuWksei0pSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NjgKK21zZ2lkICJCcmFuY2ggaXMgY29waWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAi5YiG5pSv5bey5ou36LSd77yM5L2G5pu05paw6YWN572u5paH5Lu25aSx6LSlIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoXG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIHN0cmlwcGVkLlxuIgorbXNnc3RyICIiCisi6K+357yW6L6R5YiG5pSv55qE5o+P6L+wXG4iCisiICAlc1xuIgorIuS7pSAnJWMnIOW8gOWktOeahOihjOWwhuiiq+i/h+a7pOOAglxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYxOAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAi6YCa55So6YCJ6aG5IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMAorbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICLmmL7npLrlk4jluIzlgLzlkozkuLvpopjvvIzoi6Xlj4LmlbDlh7rnjrDkuKTmrKHliJnmmL7npLrkuIrmuLjliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjIxCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAi5LiN5pi+56S65L+h5oGvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMgorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICLorr7nva7ot5/ouKrmqKHlvI/vvIjlj4Lop4EgZ2l0LXB1bGwoMSnvvIkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI0Cittc2dpZCAiZG8gbm90IHVzZSIKK21zZ3N0ciAi5LiN6KaB5L2/55SoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNiBidWlsdGluL3JlYmFzZS5jOjUwNQorbXNnaWQgInVwc3RyZWFtIgorbXNnc3RyICLkuIrmuLgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI2Cittc2dpZCAiY2hhbmdlIHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICLmlLnlj5jkuIrmuLjkv6Hmga8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI3Cittc2dpZCAidW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIuWPlua2iOS4iua4uOS/oeaBr+eahOiuvue9riIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjgKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgIuS9v+eUqOW9qeiJsui+k+WHuiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjkKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLkvZznlKjkuo7ov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjMxIGJ1aWx0aW4vYnJhbmNoLmM6NjMzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi5Y+q5omT5Y2w5YyF5ZCr6K+l5o+Q5Lqk55qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMiBidWlsdGluL2JyYW5jaC5jOjYzNAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBkb24ndCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquaJk+WNsOS4jeWMheWQq+ivpeaPkOS6pOeahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzcKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICLlhbfkvZPnmoQgZ2l0LWJyYW5jaCDliqjkvZzvvJoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIuWIl+WHuui/nOeoi+i3n+i4quWPiuacrOWcsOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDAKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAi5Yig6Zmk5a6M5YWo5ZCI5bm255qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MQorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgIuWIoOmZpOWIhuaUr++8iOWNs+S9v+ayoeacieWQiOW5tu+8iSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIKK21zZ3N0ciAi56e75YqoL+mHjeWRveWQjeS4gOS4quWIhuaUr++8jOS7peWPiuWug+eahOW8leeUqOaXpeW/lyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLnp7vliqgv6YeN5ZG95ZCN5LiA5Liq5YiG5pSv77yM5Y2z5L2/55uu5qCH5bey5a2Y5ZyoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NAorbXNnaWQgImNvcHkgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIuaLt+i0neS4gOS4quWIhuaUr+WSjOWug+eahOW8leeUqOaXpeW/lyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDUKK21zZ2lkICJjb3B5IGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIuaLt+i0neS4gOS4quWIhuaUr++8jOWNs+S9v+ebruagh+W3suWtmOWcqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDYKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAi5YiX5Ye65YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NworbXNnaWQgInNob3cgY3VycmVudCBicmFuY2ggbmFtZSIKK21zZ3N0ciAi5pi+56S65b2T5YmN5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0OAorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICLliJvlu7rliIbmlK/nmoTlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUwCittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgIuagh+iusOWIhuaUr+eahOaPj+i/sCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTEKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICLlvLrliLbliJvlu7rjgIHnp7vliqgv6YeN5ZG95ZCN44CB5Yig6ZmkIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLlj6rmiZPljbDlt7Lnu4/lkIjlubbnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUzCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICLlj6rmiZPljbDlsJrmnKrlkIjlubbnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0Cittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLku6XliJfnmoTmlrnlvI/mmL7npLrliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIgYnVpbHRpbi9ub3Rlcy5jOjQxNQorIzogYnVpbHRpbi9ub3Rlcy5jOjQxOCBidWlsdGluL25vdGVzLmM6NTgxIGJ1aWx0aW4vbm90ZXMuYzo1ODQKKyM6IGJ1aWx0aW4vdGFnLmM6NDMzCittc2dpZCAib2JqZWN0IgorbXNnc3RyICLlr7nosaEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU4Cittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLlj6rmiZPljbDmjIflkJHor6Xlr7nosaHnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYwIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDggYnVpbHRpbi90YWcuYzo0NDAKK21zZ2lkICJzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYXJlIGNhc2UgaW5zZW5zaXRpdmUiCittc2dzdHIgIuaOkuW6j+WSjOi/h+a7pOWxnuS6juWkp+Wwj+WGmeS4jeaVj+aEnyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NjEgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOCBidWlsdGluL3RhZy5jOjQzOAorIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICLovpPlh7rmoLzlvI8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Njg0IGJ1aWx0aW4vY2xvbmUuYzo3ODQKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCDmsqHmnInkvY3kuo4gL3JlZnMvaGVhZHMg5LmL5LiL77yBIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4g5ZKMIC0tdmVyYm9zZSDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzIzIGJ1aWx0aW4vYnJhbmNoLmM6Nzc3IGJ1aWx0aW4vYnJhbmNoLmM6Nzg2Cittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgIuW/hemhu+aPkOS+m+WIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTMKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICLkuI3og73lkJHliIbnprvlpLTmjIfpkojmj5Dkvpvmj4/ov7AiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU4Cittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgIuS4jeiDveS4uuS4gOS4quS7peS4iueahOWIhuaUr+e8lui+keaPj+i/sCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIuWIhuaUryAnJXMnIOWwmuaXoOaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICLmsqHmnInliIbmlK8gJyVzJ+OAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODMKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSBjb3B5IG9wZXJhdGlvbiIKK21zZ3N0ciAi5Li65ou36LSd5pON5L2c5o+Q5L6b5LqG5aSq5aSa55qE5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5MgorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICLkuLrph43lkb3lkI3mk43kvZzmj5DkvpvkuoblpKrlpJrnmoTlj4LmlbAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzk3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgIuS4uuiuvue9ruaWsOS4iua4uOaPkOS+m+S6huWkquWkmueahOWPguaVsCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICLml6Dms5Xorr7nva4gSEVBRCDnmoTkuIrmuLjkuLogJXPvvIzlm6DkuLogSEVBRCDmsqHmnInmjIflkJHku7vkvZXliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODA0IGJ1aWx0aW4vYnJhbmNoLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgIuayoeacieatpOWIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi5YiG5pSvICclcycg5LiN5a2Y5ZyoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAi5Li65Y+W5raI5LiK5ri46K6+572u5pON5L2c5o+Q5L6b5LqG5aSq5aSa55qE5Y+C5pWwIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNQorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIuaXoOazleWPlua2iCBIRUFEIOeahOS4iua4uOiuvue9ruWboOS4uuWug+ayoeacieaMh+WQkeS4gOS4quWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICLliIbmlK8gJyVzJyDmsqHmnInkuIrmuLjkv6Hmga8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiIgorIlRoZSAtYSwgYW5kIC1yLCBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgdGFrZSBhIGJyYW5jaCBuYW1lLlxuIgorIkRpZCB5b3UgbWVhbiB0byB1c2U6IC1hfC1yIC0tbGlzdCA8cGF0dGVybj4/IgorbXNnc3RyICIiCisiJ2dpdCBicmFuY2gnIOeahCAtYSDlkowgLXIg6YCJ6aG55LiN5bim5LiA5Liq5YiG5pSv5ZCN44CCXG4iCisi5oKo5piv5ZCm5oOz6KaB5L2/55So77yaLWF8LXIgLS1saXN0IDzmqKHlvI8+77yfIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NQorbXNnaWQgIiIKKyJ0aGUgJy0tc2V0LXVwc3RyZWFtJyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSAnLS10cmFjaycgb3IgIgorIictLXNldC11cHN0cmVhbS10bycgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLkuI3lho3mlK/mjIHpgInpobkgJy0tc2V0LXVwc3RyZWFtJ+OAguivt+S9v+eUqCAnLS10cmFjaycg5oiWICctLXNldC11cHN0cmVhbS10byfjgIIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworbXNnaWQgImdpdCBidW5kbGUgY3JlYXRlIFs8b3B0aW9ucz5dIDxmaWxlPiA8Z2l0LXJldi1saXN0IGFyZ3M+IgorbXNnc3RyICJnaXQgYnVuZGxlIGNyZWF0ZSBbPOmAiemhuT5dIDzmlofku7Y+IDxnaXQtcmV2LWxpc3Qg5Y+C5pWwPiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNiBidWlsdGluL2J1bmRsZS5jOjI4Cittc2dpZCAiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IgorbXNnc3RyICJnaXQgYnVuZGxlIHZlcmlmeSBbPOmAiemhuT5dIDzmlofku7Y+IgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE3IGJ1aWx0aW4vYnVuZGxlLmM6MzMKK21zZ2lkICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIgorbXNnc3RyICJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPOaWh+S7tj4gWzzlvJXnlKjlkI0+Li4uXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOCBidWlsdGluL2J1bmRsZS5jOjM4Cittc2dpZCAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgdW5idW5kbGUgPOaWh+S7tj4gWzzlvJXnlKjlkI0+Li4uXSIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMjgKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi5LiN5pi+56S66L+b5bqm6KGoIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIuaYvuekuui/m+W6puihqCIKKworIzogYnVpbHRpbi9idW5kbGUuYzo3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzIKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAi5Zyo5a+56LGh5YaZ5YWl6Zi25q615pi+56S66L+b5bqm6KGoIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjczIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAi5b2T6L+b5bqm6KGo5pi+56S65pe257G75Ly85LqOIC0tYWxsLXByb2dyZXNzIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjkzCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAi6ZyA6KaB5LiA5Liq5LuT5bqT5p2l5Yib5bu65YyF44CCIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjEwNAorbXNnaWQgImRvIG5vdCBzaG93IGJ1bmRsZSBkZXRhaWxzIgorbXNnc3RyICLkuI3mmL7npLogYnVuZGxlIOe7huiKgiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyDlj6/ku6VcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjAKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIumcgOimgeS4gOS4quS7k+W6k+adpeino+WMheOAgiIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxNjggYnVpbHRpbi9yZW1vdGUuYzoxNjA5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAi5YaX6ZW/6L6T5Ye677yb5b+F6aG7572u5LqO5a2Q5ZG95Luk5LmL5YmNIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE5MCBidWlsdGluL3JlbW90ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAi5pyq55+l5a2Q5ZG95Luk77yaJXMiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTUKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPHR5cGU+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD08cGF0aD5dIDxvYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwgPOexu+Weiz4gfCAtLXRleHRjb252IHwgLS1maWx0ZXJzKSBbLS1wYXRoPTzot6/lvoQ+XSA85a+56LGhPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjU5NgorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCittc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIFstLXRleHRjb252IHwgLS0iCisiZmlsdGVyc10iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MTcKK21zZ2lkICJvbmx5IG9uZSBiYXRjaCBvcHRpb24gbWF5IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAi5Y+q6IO95oyH5a6a5LiA5Liq5om55aSE55CG6YCJ6aG5IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjM1Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI857G75Z6LPiDlj6/ku6XmmK/lhbbkuK3kuYvkuIDvvJpibG9i44CBdHJlZeOAgWNvbW1pdOOAgXRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNgorbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIuaYvuekuuWvueixoeexu+WeiyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNworbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIuaYvuekuuWvueixoeWkp+WwjyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzOQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAi5b2T5rKh5pyJ6ZSZ6K+v5pe26YCA5Ye65bm26L+U5Zue6Zu2IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQwCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIue+juinguWcsOaJk+WNsOWvueixoeeahOWGheWuuSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MgorbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLlr7nkuo7mlbDmja7lr7nosaHvvIzlr7nlhbblhoXlrrnlgZrmlofmnKzovazmjaIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDQKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gZmlsdGVycyBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLlr7nkuo7mlbDmja7lr7nosaHvvIzlr7nlhbblhoXlrrnlgZrov4fmu6QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDUgZ2l0LXN1Ym1vZHVsZS5zaDo5OTIKK21zZ2lkICJibG9iIgorbXNnc3RyICLmlbDmja7lr7nosaEiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDYKK21zZ2lkICJ1c2UgYSBzcGVjaWZpYyBwYXRoIGZvciAtLXRleHRjb252Ly0tZmlsdGVycyIKK21zZ3N0ciAi5a+55LqOIC0tdGV4dGNvbnYvLS1maWx0ZXJzIOS9v+eUqOS4gOS4queJueWumueahOi3r+W+hCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0OAorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAi5YWB6K64IC1zIOWSjCAtdCDlr7nmjZ/lnY/nmoTlr7nosaHnlJ/mlYgiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDkKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgIue8k+WGsiAtLWJhdGNoIOeahOi+k+WHuiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1MQorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5pi+56S65LuO5qCH5YeG6L6T5YWl5o+Q5L6b55qE5a+56LGh55qE5L+h5oGv5ZKM5YaF5a65IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU1Cittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLmmL7npLrku47moIflh4bovpPlhaXmj5DkvpvnmoTlr7nosaHnmoTkv6Hmga8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTkKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIui3n+maj+agkeWGheespuWPt+mTvuaOpe+8iOWSjCAtLWJhdGNoIOaIliAtLWJhdGNoLWNoZWNrIOWFseeUqO+8iSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MQorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIuS9v+eUqCAtLWJhdGNoIOaIliAtLWJhdGNoLWNoZWNrIOWPguaVsOaYvuekuuaJgOacieWvueixoSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY2MworbXNnaWQgImRvIG5vdCBvcmRlciAtLWJhdGNoLWFsbC1vYmplY3RzIG91dHB1dCIKK21zZ3N0ciAi5LiN6KaB5a+5IC0tYmF0Y2gtYWxsLW9iamVjdHMg55qE6L6T5Ye65o6S5bqPIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMworbXNnaWQgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPOWxnuaApz4uLi5dIFstLV0gPOi3r+W+hOWQjT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE0Cittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPOWxnuaApz4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAi5oql5ZGK6K6+572u5Zyo5paH5Lu25LiK55qE5omA5pyJ5bGe5oCnIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMgorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLlj6rkvb/nlKjntKLlvJXkuK3nmoQgLmdpdGF0dHJpYnV0ZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjUgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwMgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICLku47moIflh4bovpPlhaXor7vlh7rmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjI1IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjcKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi6L6T5YWl5ZKM6L6T5Ye655qE6K6w5b2V5L2/55SoIE5VTCDlrZfnrKbnu4jnu5MiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjEgYnVpbHRpbi9jaGVja291dC5jOjE0MzUgYnVpbHRpbi9nYy5jOjUzNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNgorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi5LiN5pi+56S66L+b5bqm5oql5ZGKIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI5Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgIuaYvuekuuacquWMuemFjeeahOi+k+WFpei3r+W+hCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzozMQorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICLmo4Dmn6Xml7blv73nlaXntKLlvJUiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYwCittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAi5LiN6IO95ZCM5pe25oyH5a6a6Lev5b6E5Y+KIC0tc3RkaW4g5Y+C5pWwIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiDpnIDopoHlkowgLS1zdGRpbiDlj4LmlbDlhbHnlKjmiY3mnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+Wumui3r+W+hCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjkKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAi5Y+C5pWwIC0tcXVpZXQg5Y+q5Zyo5o+Q5L6b5LiA5Liq6Lev5b6E5ZCN5pe25pyJ5pWIIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICLkuI3og73lkIzml7bmj5DkvpsgLS1xdWlldCDlkowgLS12ZXJib3NlIOWPguaVsCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzQKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyDpgInpobnlj6rlnKjkvb/nlKggLS12ZXJib3NlIOaXtuacieaViCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OQorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzzpgInpobk+XSA86IGU57O75Zyw5Z2APi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTQKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi6L+Y5LuO5qCH5YeG6L6T5YWl6K+75Y+W6IGU57O75Zyw5Z2AIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgIuS4jeiDveino+aekOiBlOezu+WcsOWdgO+8miVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0OAorbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a6IGU57O75Zyw5Z2AIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTMxCittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPOmAiemhuT5dIFstLV0gWzzmlofku7Y+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE0OAorbXNnaWQgInN0YWdlIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDMgb3IgYWxsIgorbXNnc3RyICLntKLlvJXlgLzlupTor6Xlj5blgLwgMSDliLAgMyDmiJbogIUgYWxsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY0Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIuajgOWHuue0ouW8leWMuueahOaJgOacieaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAi5by65Yi26KaG55uW546w5pyJ55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY3Cittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAi5a2Y5Zyo5oiW5LiN5Zyo57Si5byV5Lit55qE5paH5Lu26YO95rKh5pyJ6K2m5ZGKIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTY5Cittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICLkuI3mo4Dlh7rmlrDmlofku7YiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzEKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAi5pu05paw57Si5byV5Lit5paH5Lu255qE54q25oCB5L+h5oGvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc1Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLku47moIflh4bovpPlhaXor7vlj5bot6/lvoTliJfooagiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzcKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgIuWwhuWGheWuueWGmeWFpeS4tOaXtuaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OCBidWlsdGluL2NvbHVtbi5jOjMxCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODIKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NzkKK21zZ2lkICJzdHJpbmciCittc2dzdHIgIuWtl+espuS4siIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3OQorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgIuWcqOWIm+W7uuaWh+S7tuaXtu+8jOWcqOWJjemdouWKoOS4iiA85a2X56ym5LiyPiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4MQorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICLku47mjIflrprmmoLlrZjljLrkuK3mi7flh7rmlofku7YiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMQorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs86YCJ6aG5Pl0gPOWIhuaUrz4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs86YCJ6aG5Pl0gWzzliIbmlK8+XSAtLSA85paH5Lu2Pi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3Cittc2dpZCAiZ2l0IHN3aXRjaCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgc3dpdGNoIFs86YCJ6aG5Pl0gWzzliIbmlK8+XSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyCittc2dpZCAiZ2l0IHJlc3RvcmUgWzxvcHRpb25zPl0gWy0tc291cmNlPTxicmFuY2g+XSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCByZXN0b3JlIFs86YCJ6aG5Pl0gWy0tc291cmNlPTzliIbmlK8+XSA85paH5Lu2Pi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NSBidWlsdGluL2NoZWNrb3V0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICLot6/lvoQgJyVzJyDmsqHmnInmiJHku6znmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcgYnVpbHRpbi9jaGVja291dC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLot6/lvoQgJyVzJyDmsqHmnInku5bku6znmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAi6Lev5b6EICclcycg5rKh5pyJ5YWo6YOo5b+F6ZyA55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAi6Lev5b6EICclcycg5rKh5pyJ5b+F6ZyA55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICJwYXRoICclcyfvvJrml6Dms5XlkIjlubYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIuaXoOazleS4uiAnJXMnIOa3u+WKoOWQiOW5tue7k+aenCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3QiCittc2dpZF9wbHVyYWwgIlJlY3JlYXRlZCAlZCBtZXJnZSBjb25mbGljdHMiCittc2dzdHJbMF0gIumHjeaWsOWIm+W7uuS6hiAlZCDkuKrlkIjlubblhrLnqoEiCittc2dzdHJbMV0gIumHjeaWsOWIm+W7uuS6hiAlZCDkuKrlkIjlubblhrLnqoEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gJXMiCittc2dpZF9wbHVyYWwgIlVwZGF0ZWQgJWQgcGF0aHMgZnJvbSAlcyIKK21zZ3N0clswXSAi5LuOICUyJHMg5pu05paw5LqGICUxJGQg5Liq6Lev5b6EIgorbXNnc3RyWzFdICLku44gJTIkcyDmm7TmlrDkuoYgJTEkZCDkuKrot6/lvoQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCAlZCBwYXRoIGZyb20gdGhlIGluZGV4IgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gdGhlIGluZGV4IgorbXNnc3RyWzBdICLku47ntKLlvJXljLrmm7TmlrDkuoYgJWQg5Liq6Lev5b6EIgorbXNnc3RyWzFdICLku47ntKLlvJXljLrmm7TmlrDkuoYgJWQg5Liq6Lev5b6EIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDEyIGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTUgYnVpbHRpbi9jaGVja291dC5jOjQxOAorIzogYnVpbHRpbi9jaGVja291dC5jOjQyMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiclcycg5LiN6IO95Zyo5pu05paw6Lev5b6E5pe25L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDI1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIOS4jeiDveWSjCAlcyDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICLkuI3og73lkIzml7bmm7TmlrDot6/lvoTlubbliIfmjaLliLDliIbmlK8nJXMn44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5laXRoZXIgJyVzJyBvciAnJXMnIGlzIHNwZWNpZmllZCIKK21zZ3N0ciAiJyVzJyDmiJYgJyVzJyDpg73msqHmnInmjIflrpoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBtdXN0IGJlIHVzZWQgd2hlbiAnJXMnIGlzIG5vdCBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+WumiAnJTIkcycg5pe277yM5b+F6aG75L2/55SoICclMSRzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ0NSBidWlsdGluL2NoZWNrb3V0LmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgb3IgJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIOaIliAnJXMnIOS4jeiDveWSjCAlcyDkuIDotbfkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MDkgYnVpbHRpbi9jaGVja291dC5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgIui3r+W+hCAnJXMnIOacquWQiOW5tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY4MiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjgyCittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIuaCqOmcgOimgeWFiOino+WGs+W9k+WJjee0ouW8leeahOWGsueqgSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IGNvbnRpbnVlIHdpdGggc3RhZ2VkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuS4jeiDvee7p+e7re+8jOS4i+WIl+aWh+S7tuacieaaguWtmOeahOS/ruaUue+8mlxuIgorIiVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICLkuI3og73lr7kgJyVzJyDmiafooYwgcmVmbG9nIOaTjeS9nO+8miVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NzcKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCDnm67liY3kvY3kuo4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODEgYnVpbHRpbi9jbG9uZS5jOjcxNgorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgSEVBRCIKK21zZ3N0ciAi5LiN6IO95pu05pawIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi6YeN572u5YiG5pSvICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAi5bey57uP5L2N5LqOICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi5YiH5o2i5bm26YeN572u5YiG5pSvICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NCBidWlsdGluL2NoZWNrb3V0LmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLliIfmjaLliLDkuIDkuKrmlrDliIbmlK8gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIuWIh+aNouWIsOWIhuaUryAnJXMnXG4iCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogYnVpbHRpbi9jaGVja291dC5jOjk0NworIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIgLi4uIOWPiuWFtuWugyAlZCDkuKrjgIJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIuitpuWRiu+8muaCqOato+S4ouS4iyAlZCDkuKrmj5DkuqTvvIzmnKrlkozku7vkvZXliIbmlK/lhbPogZTvvJpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisi6K2m5ZGK77ya5oKo5q2j5Lii5LiLICVkIOS4quaPkOS6pO+8jOacquWSjOS7u+S9leWIhuaUr+WFs+iBlO+8mlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisi5aaC5p6c5oKo5oOz6KaB6YCa6L+H5Yib5bu65paw5YiG5pSv5L+d5a2Y5a6D77yM6L+Z5Y+v6IO95piv5LiA5Liq5aW95pe25YCZ44CCXG4iCisi5aaC5LiL5pON5L2c77yaXG4iCisiXG4iCisiIGdpdCBicmFuY2ggPOaWsOWIhuaUr+WQjT4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIuWmguaenOaCqOaDs+imgemAmui/h+WIm+W7uuaWsOWIhuaUr+S/neWtmOWug+S7rO+8jOi/meWPr+iDveaYr+S4gOS4quWlveaXtuWAmeOAglxuIgorIuWmguS4i+aTjeS9nO+8mlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDzmlrDliIbmlK/lkI0+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAi5Zyo54mI5pys6YGN5Y6G5pe26YGH5Yiw5YaF6YOo6ZSZ6K+vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxMQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICLkuYvliY3nmoQgSEVBRCDkvY3nva7mmK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDUxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjg2Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAi5oKo5L2N5LqO5LiA5Liq5bCa5pyq5Yid5aeL5YyW55qE5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE3OAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCIKK21zZ3N0ciAi6aKE5pyf5Y+q5pyJ5LiA5Liq5byV55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAi5bqU5Y+q5pyJ5LiA5Liq5byV55So77yM5Y2057uZ5Ye65LqGICVkIOS4qiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgY291bGQgYmUgYm90aCBhIGxvY2FsIGZpbGUgYW5kIGEgdHJhY2tpbmcgYnJhbmNoLlxuIgorIlBsZWFzZSB1c2UgLS0gKGFuZCBvcHRpb25hbGx5IC0tbm8tZ3Vlc3MpIHRvIGRpc2FtYmlndWF0ZSIKK21zZ3N0ciAiIgorIiclcycg5pei5Y+v5Lul5piv5LiA5Liq5pys5Zyw5paH5Lu277yM5Lmf5Y+v5Lul5piv5LiA5Liq6Lef6Liq5YiG5pSv44CCXG4iCisi6K+35L2/55SoIC0t77yI5ZKM5Y+v6YCJ55qEIC0tbm8tZ3Vlc3PvvInmnaXmtojpmaTmrafkuYkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjQ1IGJ1aWx0aW4vd29ya3RyZWUuYzoyOTAgYnVpbHRpbi93b3JrdHJlZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIuaXoOaViOW8leeUqO+8miVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1OCBidWlsdGluL2NoZWNrb3V0LmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgIuW8leeUqOS4jeaYr+S4gOS4quagke+8miVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IHRhZyAnJXMnIgorbXNnc3RyICLmnJ/mnJvkuIDkuKrliIbmlK/vvIzlvpfliLDmoIfnrb4gJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCByZW1vdGUgYnJhbmNoICclcyciCittc2dzdHIgIuacn+acm+S4gOS4quWIhuaUr++8jOW+l+WIsOi/nOeoi+WIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMwOCBidWlsdGluL2NoZWNrb3V0LmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290ICclcyciCittc2dzdHIgIuacn+acm+S4gOS4quWIhuaUr++8jOW+l+WIsCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJhIGJyYW5jaCBpcyBleHBlY3RlZCwgZ290IGNvbW1pdCAnJXMnIgorbXNnc3RyICLmnJ/mnJvkuIDkuKrliIbmlK/vvIzlvpfliLDmj5DkuqQgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMjcKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgbWVyZ2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IG1lcmdlIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIuS4jeiDveWcqOWQiOW5tuaXtuWIh+aNouWIhuaUr1xuIgorIuiAg+iZkeS9v+eUqCBcImdpdCBtZXJnZSAtLXF1aXRcIiDmiJYgXCJnaXQgd29ya3RyZWUgYWRkXCLjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzMxCittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvblxuIgorIkNvbnNpZGVyIFwiZ2l0IGFtIC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIuS4jeiDveWcqOS4gOS4qiBhbSDkvJror53mnJ/pl7TliIfmjaLliIbmlK9cbiIKKyLogIPomZHkvb/nlKggXCJnaXQgYW0gLS1xdWl0XCIg5oiWIFwiZ2l0IHdvcmt0cmVlIGFkZFwi44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzNQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZWJhc2luZ1xuIgorIkNvbnNpZGVyIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLkuI3og73lnKjlj5jln7rml7bliIfmjaLliIbmlK9cbiIKKyLogIPomZHkvb/nlKggXCJnaXQgcmViYXNlIC0tcXVpdFwiIOaIliBcImdpdCB3b3JrdHJlZSBhZGRcIuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzkKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJDb25zaWRlciBcImdpdCBjaGVycnktcGljayAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLkuI3og73lnKjmi6PpgInml7bliIfmjaLliIbmlK9cbiIKKyLogIPomZHkvb/nlKggXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIg5oiWIFwiZ2l0IHdvcmt0cmVlIGFkZFwi44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0MworbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCB3aGlsZSByZXZlcnRpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZXZlcnQgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi5LiN6IO95Zyo6L+Y5Y6f5pe25YiH5o2i5YiG5pSvXG4iCisi6ICD6JmR5L2/55SoIFwiZ2l0IHJldmVydCAtLXF1aXRcIiDmiJYgXCJnaXQgd29ya3RyZWUgYWRkXCLjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQ3Cittc2dpZCAieW91IGFyZSBzd2l0Y2hpbmcgYnJhbmNoIHdoaWxlIGJpc2VjdGluZyIKK21zZ3N0ciAi5oKo5Zyo5omn6KGM5LqM5YiG5p+l5om+5pe25YiH5o2i5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLot6/lvoTkuI3og73lkozliIfmjaLliIbmlK/lkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzU3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycg5LiN6IO95ZKM5YiH5o2i5YiG5pSv5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM2OSBidWlsdGluL2NoZWNrb3V0LmM6MTM3MiBidWlsdGluL2NoZWNrb3V0LmM6MTM3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjEzODAgYnVpbHRpbi9jaGVja291dC5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycg5LiN6IO95ZKMICclcycg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCB0YWtlIDxzdGFydC1wb2ludD4iCittc2dzdHIgIiclcycg5LiN5bimIDzotbflp4vngrk+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95YiH5o2i5YiG5pSv5Yiw5LiA5Liq6Z2e5o+Q5LqkICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzk3Cittc2dpZCAibWlzc2luZyBicmFuY2ggb3IgY29tbWl0IGFyZ3VtZW50IgorbXNnc3RyICLnvLrlsJHliIbmlK/miJbmj5DkuqTlj4LmlbAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM5IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUyCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMyBidWlsdGluL2ZldGNoLmM6MTY3IGJ1aWx0aW4vbWVyZ2UuYzoyODUKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI3IGJ1aWx0aW4vcHVsbC5jOjEzOCBidWlsdGluL3B1c2guYzo1NjMKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc0Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLlvLrliLbmmL7npLrov5vluqbmiqXlkYoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQwCittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgIuWSjOaWsOeahOWIhuaUr+aJp+ihjOS4ieaWueWQiOW5tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDEgYnVpbHRpbi9sb2cuYzoxNjkwIHBhcnNlLW9wdGlvbnMuaDozMjIKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAi6aOO5qC8IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MgorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgIuWGsueqgei+k+WHuumjjuagvO+8iG1lcmdlIOaIliBkaWZmM++8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTQgYnVpbHRpbi93b3JrdHJlZS5jOjUwMworbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiSEVBRCDku47mjIflrprnmoTmj5DkuqTliIbnprsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU1Cittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIuS4uuaWsOeahOWIhuaUr+iuvue9ruS4iua4uOS/oeaBryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAi5by65Yi25qOA5Ye677yI5Lii5byD5pys5Zyw5L+u5pS577yJIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1OQorbXNnaWQgIm5ldy1icmFuY2giCittc2dzdHIgIuaWsOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIuaWsOeahOayoeacieeItuaPkOS6pOeahOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjEgYnVpbHRpbi9tZXJnZS5jOjI4OAorbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi5pu05paw5b+955Wl55qE5paH5Lu277yI6buY6K6k77yJIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ2NAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAi5LiN5qOA5p+l5oyH5a6a55qE5byV55So5piv5ZCm6KKr5YW25LuW5bel5L2c5Yy65omA5Y2g55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ3NworbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAi5a+55bCa5pyq5ZCI5bm255qE5paH5Lu25qOA5Ye65oiR5Lus55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4MAorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICLlr7nlsJrmnKrlkIjlubbnmoTmlofku7bmo4Dlh7rku5bku6znmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDg0Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICLlr7not6/lvoTkuI3lgZrnqIDnlo/mo4Dlh7rnmoTpmZDliLYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTM3Cittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYuOAgS1CIOWSjCAtLW9ycGhhbiDmmK/kupLmlqXnmoQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTQwCittc2dpZCAiLXAgYW5kIC0tb3ZlcmxheSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItcCDlkowgLS1vdmVybGF5IOS6kuaWpSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1NzcKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIi0tdHJhY2sg6ZyA6KaB5LiA5Liq5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU4MgorbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAi57y65bCR5YiG5pSv5ZCN77yM5bCd6K+VIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAi5peg5rOV6Kej5p6QICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzMQorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICLml6DmlYjnmoTot6/lvoTop4TmoLwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IGFuZCBhIGJyYW5jaCAnJXMnIGNhbm5vdCBiZSBjcmVhdGVkIGZyb20gaXQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5o+Q5Lqk77yM5LiN6IO95Z+65LqO5a6D5Yib5bu65YiG5pSvICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V077yaLS1kZXRhY2gg5LiN6IO95o6l5pS26Lev5b6E5Y+C5pWwICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjUxCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2giCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIOS4jiAtLWRldGFjaCDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjU0IGJ1aWx0aW4vcmVzZXQuYzozMjQKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDkuI4gLS1wYXRjaCDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjY1Cittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiZ2l0IGNoZWNrb3V077ya5Zyo5LuO57Si5byV5qOA5Ye65pe277yMLS1vdXJzLy0tdGhlaXJz44CBLS1mb3JjZSDlkowgLS1tZXJnZSDkuI3lhbzlrrnjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjcwCittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgIuaCqOW/hemhu+aMh+WumuS4gOS4quimgeaBouWkjeeahOi3r+W+hCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIHJlbW90ZSB0cmFja2luZyBicmFuY2guXG4iCisiV2UgZm91bmQgJWQgcmVtb3RlcyB3aXRoIGEgcmVmZXJlbmNlIHRoYXQgbWF0Y2hlZC4gU28gd2UgZmVsbCBiYWNrXG4iCisib24gdHJ5aW5nIHRvIHJlc29sdmUgdGhlIGFyZ3VtZW50IGFzIGEgcGF0aCwgYnV0IGZhaWxlZCB0aGVyZSB0b28hXG4iCisiXG4iCisiSWYgeW91IG1lYW50IHRvIGNoZWNrIG91dCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggb24sIGUuZy4gJ29yaWdpbicsXG4iCisieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5hbWU+XG4iCisiXG4iCisiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKyJvbmUgcmVtb3RlLCBlLmcuIHRoZSAnb3JpZ2luJyByZW1vdGUsIGNvbnNpZGVyIHNldHRpbmdcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iCittc2dzdHIgIiIKKyInJXMnIOWMuemFjeS6huS4gOS4quS7peS4iueahOi/nOeoi+i3n+i4quWIhuaUr+OAglxuIgorIuaIkeS7rOWPkeeOsCAlZCDkuKrov5znqIvku5PlupPlhbfmnInlkIzlkI3liIbmlK/jgILmiYDku6XmiJHku6zovazogIzlsJ3or5XlsIbov5nkuKrlj4LmlbDop6PmnpDkuLpcbiIKKyLot6/lvoTvvIzkvYbmmK/kuZ/lpLHotKXkuobvvIFcbiIKKyJcbiIKKyLlpoLmnpzmgqjmg7PopoHmo4Dlh7rkuIDkuKrov5znqIvot5/ouKrliIbmlK/vvIzkvovlpoLlnKjov5znqIvku5PlupMgJ29yaWdpbicg5LiK55qE77yM5oKo5Y+v5LulXG4iCisi5L2/55So5YiG5pSv5YWo5ZCN5ZKMIC0tdHJhY2sg6YCJ6aG577yaXG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyLlpoLmnpzmgqjmgLvmmK/llpzmrKLkvb/nlKjmqKHns4rnmoTnroDnn63liIbmlK/lkI0gPG5hbWU+77yM6ICM5LiN5Zac5qyi5aaCICdvcmlnaW4nIOeahOi/nOeoi1xuIgorIuS7k+W6k+WQje+8jOWPr+S7peWcqOmFjee9ruS4reiuvue9riBjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTQgYnVpbHRpbi9jaGVja291dC5jOjE3MTYgYnVpbHRpbi9jaGVja291dC5jOjE3NjUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY3IGJ1aWx0aW4vY2xvbmUuYzoxMjEgYnVpbHRpbi9yZW1vdGUuYzoxNjkKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTkgYnVpbHRpbi93b3JrdHJlZS5jOjUwMQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAi5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLliJvlu7rlubbmo4Dlh7rkuIDkuKrmlrDnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAi5Yib5bu6L+mHjee9ruW5tuajgOWHuuS4gOS4quWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLkuLrmlrDnmoTliIbmlK/liJvlu7rlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIwCittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICLkuozmrKHnjJzmtYsgJ2dpdCBjaGVja291dCA85peg5q2k5YiG5pSvPifvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIxCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSAoZGVmYXVsdCkiCittc2dzdHIgIuS9v+eUqOWPoOWKoOaooeW8j++8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjYKK21zZ2lkICJjcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2giCittc2dzdHIgIuWIm+W7uuW5tuWIh+aNouS4gOS4quaWsOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjgKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaCIKK21zZ3N0ciAi5Yib5bu6L+mHjee9ruW5tuWIh+aNouS4gOS4quWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIuS6jOasoeeMnOa1iyAnZ2l0IHN3aXRjaCA85peg5q2k5YiG5pSvPiciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcyCittc2dpZCAidGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zIgorbXNnc3RyICLkuKLlvIPmnKzlnLDkv67mlLkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA0Cittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAi6KaB5qOA5Ye65ZOq5LiA5Liq5qCRIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgwNgorbXNnaWQgInJlc3RvcmUgdGhlIGluZGV4IgorbXNnc3RyICLmgaLlpI3ntKLlvJUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA4Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAi5oGi5aSN5bel5L2c5Yy677yI6buY6K6k77yJIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMAorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLlv73nlaXmnKrlkIjlubbmnaHnm64iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODExCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSIKK21zZ3N0ciAi5L2/55So5Y+g5Yqg5qih5byPIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPOaooeW8jz5dIFsteCB8IC1YXSBbLS1dIDzot6/lvoQ+Li4uIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAi5q2j5Yig6ZmkICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAi5bCG5Yig6ZmkICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIuW/veeVpeS7k+W6kyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIuWwhuW/veeVpeS7k+W6kyAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAi5Yig6ZmkICVzIOWksei0pSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsc3RhdCAlc1xuIgorbXNnc3RyICLkuI3og73lr7kgJXMg6LCD55SoIGxzdGF0XG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZ1xuIgorbXNnc3RyICIiCisi5biu5Yqp77yaXG4iCisiMSAgICAgICAgICAtIOmAmui/h+e8luWPt+mAieaLqeS4gOS4qumAiemhuVxuIgorImZvbyAgICAgICAgLSDpgJrov4fllK/kuIDliY3nvIDpgInmi6nkuIDkuKrpgInpoblcbiIKKyIgICAgICAgICAgIC0g77yI56m677yJ5LuA5LmI5Lmf5LiN6YCJ5oupXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMDUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nXG4iCittc2dzdHIgIiIKKyLluK7liqnvvJpcbiIKKyIxICAgICAgICAgIC0g6YCJ5oup5LiA5Liq6YCJ6aG5XG4iCisiMy01ICAgICAgICAtIOmAieaLqeS4gOS4quiMg+WbtOWGheeahOaJgOaciemAiemhuVxuIgorIjItMyw2LTkgICAgLSDpgInmi6nlpJrkuKrojIPlm7TlhoXnmoTmiYDmnInpgInpoblcbiIKKyJmb28gICAgICAgIC0g6YCa6L+H5ZSv5LiA5YmN57yA6YCJ5oup5LiA5Liq6YCJ6aG5XG4iCisiLS4uLiAgICAgICAtIOWPjemAieeJueWumueahOmAiemhuVxuIgorIiogICAgICAgICAgLSDpgInmi6nmiYDmnInpgInpoblcbiIKKyIgICAgICAgICAgIC0g77yI56m677yJ57uT5p2f6YCJ5oupXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MjEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzAKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NTc1CisjLCBjLWZvcm1hdCwgcGVybC1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT9cbiIKK21zZ3N0ciAi5Zev77yIJXPvvInvvJ9cbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIui+k+WFpeaooeeJiOS7peaOkumZpOadoeebrj4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcwMAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAi6K2m5ZGK77ya5peg5rOV5om+5Yiw5ZKMICVzIOWMuemFjeeahOadoeebriIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcyMQorbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIumAieaLqeimgeWIoOmZpOeahOadoeebriIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6NzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICLliKDpmaQgJXMgW3kvTl3vvJ8iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OTUKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSDlvIDlp4vmuIXnkIZcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0g6YCa6L+H5qih54mI5o6S6Zmk6KaB5Yig6Zmk55qE5p2h55uuXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIOmAmui/h+aVsOWtl+mAieaLqeimgeWIoOmZpOeahOadoeebrlxuIgorImFzayBlYWNoICAgICAgICAgICAgLSDpkojlr7nliKDpmaTpgJDkuIDor6Lpl67vvIjlsLHlg48gXCJybSAtaVwi77yJXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIOWBnOatouWIoOmZpOW5tumAgOWHulxuIgorImhlbHAgICAgICAgICAgICAgICAgLSDmmL7npLrmnKzluK7liqlcbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0g5pi+56S65aaC5L2V5Zyo5o+Q56S656ym5LiL6YCJ5oup55qE5biu5YqpIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODMxCittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAi5bCG5Yig6Zmk5aaC5LiL5p2h55uu77yaIgorbXNnc3RyWzFdICLlsIbliKDpmaTlpoLkuIvmnaHnm67vvJoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAi5rKh5pyJ6KaB5riF55CG55qE5paH5Lu277yM6YCA5Ye644CCIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA5Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgIuS4jeaJk+WNsOWIoOmZpOaWh+S7tueahOWQjeensCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMQorbXNnaWQgImZvcmNlIgorbXNnc3RyICLlvLrliLYiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTIKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAi5Lqk5LqS5byP5riF6ZmkIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE0Cittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICLliKDpmaTmlbTkuKrnm67lvZUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTUgYnVpbHRpbi9kZXNjcmliZS5jOjU0OCBidWlsdGluL2Rlc2NyaWJlLmM6NTUwCisjOiBidWlsdGluL2dyZXAuYzo5MDEgYnVpbHRpbi9sb2cuYzoxNzcgYnVpbHRpbi9sb2cuYzoxNzkKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTcgYnVpbHRpbi9uYW1lLXJldi5jOjQ2NCBidWlsdGluL25hbWUtcmV2LmM6NDY2CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAi5qih5byPIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTE2Cittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgIua3u+WKoCA85qih5byPPiDliLDlv73nlaXop4TliJkiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTcKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICLkuZ/liKDpmaTlv73nlaXnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTkKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICLlj6rliKDpmaTlv73nlaXnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzcKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IOWSjCAtWCDkuI3og73lkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDEKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ug6K6+572u5Li6IHRydWUg5LiU5pyq5o+Q5L6bIC1p44CBLW4g5oiWIC1mIOmAiemhue+8jOaLkue7neaJp+ihjOa4heeQhuWKqOS9nCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0NAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIOm7mOiupOS4uiB0cnVlIOS4lOacquaPkOS+myAtaeOAgS1uIOaIliAtZiDpgInpobnvvIzmi5Lnu53miafooYzmuIXnkIbliqjkvZwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NQorbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzzpgInpobk+XSBbLS1dIDzku5PlupM+IFs86Lev5b6EPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICLkuI3liJvlu7rkuIDkuKrmo4Dlh7oiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLliJvlu7rkuIDkuKrnuq/ku5PlupMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICLliJvlu7rkuIDkuKrplZzlg4/ku5PlupPvvIjkuZ/mmK/nuq/ku5PlupPvvIkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5LuO5pys5Zyw5LuT5bqT5YWL6ZqGIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIuS4jeS9v+eUqOacrOWcsOehrOmTvuaOpe+8jOWni+e7iOWkjeWItiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICLorr7nva7kuLrlhbHkuqvku5PlupMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAi5Zyo5YWL6ZqG5pe25Yid5aeL5YyW5a2Q5qih57uEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgY2xvbmVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLlubblj5HlhYvpmobnmoTlrZDmqKHnu4TnmoTmlbDph48iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICLmqKHmnb/nm67lvZUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTIgYnVpbHRpbi9pbml0LWRiLmM6NDg3Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAi5qih5p2/55uu5b2V5bCG6KKr5L2/55SoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg1Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgIuWPguiAg+S7k+W6kyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODcKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICLku4XlnKjlhYvpmobml7blj4LogIMgLS1yZWZlcmVuY2Ug5oyH5ZCR55qE5pys5Zyw5LuT5bqTIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NCBidWlsdGluL3JlcGFjay5jOjMyNworbXNnaWQgIm5hbWUiCittc2dzdHIgIuWQjeensCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAi5L2/55SoIDzlkI3np7A+IOiAjOS4jeaYryAnb3JpZ2luJyDljrvot5/ouKrkuIrmuLgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjIKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICLmo4Dlh7ogPOWIhuaUrz4g6ICM5LiN5piv6L+c56iLIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICLov5znqIsgZ2l0LXVwbG9hZC1wYWNrIOi3r+W+hCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjg0MAorIzogYnVpbHRpbi9wdWxsLmM6MjI3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIua3seW6piIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAi5Yib5bu65LiA5Liq5oyH5a6a5rex5bqm55qE5rWF5YWL6ZqGIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgzCittc2dpZCAidGltZSIKK21zZ3N0ciAi5pe26Ze0IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgIuS7juS4gOS4queJueWumuaXtumXtOWIm+W7uuS4gOS4qua1heWFi+mahiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NQorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICLniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzAgYnVpbHRpbi9mZXRjaC5jOjE3MworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiCittc2dzdHIgIua3seWMlua1heWFi+mahueahOWOhuWPsu+8jOmZpOS6hueJueWumueJiOacrCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMgorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAi5Y+q5YWL6ZqG5LiA5Liq5YiG5pSv44CBSEVBRCDmiJYgLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzQKK21zZ2lkICJkb24ndCBjbG9uZSBhbnkgdGFncywgYW5kIG1ha2UgbGF0ZXIgZmV0Y2hlcyBub3QgdG8gZm9sbG93IHRoZW0iCittc2dzdHIgIuS4jeimgeWFi+mahuS7u+S9leagh+etvu+8jOW5tuS4lOWQjue7reiOt+WPluaTjeS9nOS5n+S4jeS4i+i9veWug+S7rCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgIuWtkOaooee7hOWwhuS7pea1heS4i+i9veaooeW8j+WFi+mahiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNyBidWlsdGluL2luaXQtZGIuYzo0OTUKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgImdpdOebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJnaXTnm67lvZXlkozlt6XkvZzljLrliIbnprsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgImtleT12YWx1ZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5Zyo5paw5LuT5bqT5Lit6K6+572u6YWN572u5L+h5oGvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAic2VydmVyLXNwZWNpZmljIgorbXNnc3RyICJzZXJ2ZXItc3BlY2lmaWMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgIuS8oOi+k+mAiemhuSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjI0MAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgIuWPquS9v+eUqCBJUHY0IOWcsOWdgCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjI0MworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgIuWPquS9v+eUqCBJUHY2IOWcsOWdgCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0OQorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLku7vkvZXlhYvpmobnmoTlrZDmqKHnu4TlsIbkvb/nlKjlroPku6znmoTov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNTEKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IgorbXNnc3RyICLliJ3lp4vljJbnqIDnlo/mo4Dlh7rmlofku7bvvIzlj6rljIXlkKvmoLnnm67lvZXmlofku7YiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyODcKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisi5peg5rOV54yc5Yiw55uu5b2V5ZCN44CCXG4iCisi6K+35Zyo5ZG95Luk6KGM5oyH5a6a5LiA5Liq55uu5b2VIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImluZm86IENvdWxkIG5vdCBhZGQgYWx0ZXJuYXRlIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJpbmZvOiDkuI3og73kuLogJyVzJyDmt7vliqDkuIDkuKrlpIfnlKjvvJolc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyDlrZjlnKjkuJTkuI3mmK/kuIDkuKrnm67lvZUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXJ0IGl0ZXJhdG9yIG92ZXIgJyVzJyIKK21zZ3N0ciAi5peg5rOV5ZyoICclcycg5LiK5ZCv5Yqo6L+t5Luj5ZmoIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICLliJvlu7rpk77mjqUgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICLmi7fotJ3mlofku7boh7MgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIgorbXNnc3RyICLml6Dms5XlnKggJyVzJyDkuIrov63ku6MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAi5a6M5oiQ44CCXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MDgKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisi5YWL6ZqG5oiQ5Yqf77yM5L2G5piv5qOA5Ye65aSx6LSl44CCXG4iCisi5oKo5Y+v5Lul6YCa6L+HICdnaXQgc3RhdHVzJyDmo4Dmn6Xlk6rkupvlt7Looqvmo4Dlh7rvvIznhLblkI7kvb/nlKjlkb3ku6RcbiIKKyInZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6Lycg6YeN6K+VXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIuS4jeiDveWPkeeOsOimgeWFi+mahueahOi/nOeoi+WIhuaUryAlc+OAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICLkuI3og73mm7TmlrAgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NTIKK21zZ2lkICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIuaXoOazleWIneWni+WMlueogOeWj+ajgOWHuiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAi6L+c56iLIEhFQUQg5oyH5ZCR5LiA5Liq5LiN5a2Y5Zyo55qE5byV55So77yM5peg5rOV5qOA5Ye644CCXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDYKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICLkuI3og73mo4Dlh7rlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NTYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcGFyYW1ldGVycyB0byBjb25maWcgZmlsZSIKK21zZ3N0ciAi5peg5rOV5bCG5Y+C5pWw5YaZ5YWl6YWN572u5paH5Lu2IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTE5Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAi5peg5rOV5omn6KGMIHJlcGFjayDmnaXmuIXnkIYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjEKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIuaXoOazleWIoOmZpOS4tOaXtueahCBhbHRlcm5hdGVzIOaWh+S7tiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1OSBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NDgKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICLlpKrlpJrlj4LmlbDjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjMKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIuaCqOW/hemhu+aMh+WumuS4gOS4quS7k+W6k+adpeWFi+mahuOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSDlkowgLS1vcmlnaW4gJXMg6YCJ6aG55LiN5YW85a6544CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc5Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSDlkowgLS1zZXBhcmF0ZS1naXQtZGlyIOmAiemhueS4jeWFvOWuueOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuS7k+W6kyAnJXMnIOS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5OCBidWlsdGluL2ZldGNoLmM6MTc4NworIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIua3seW6piAlcyDkuI3mmK/kuIDkuKrmraPmlbAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIuebruagh+i3r+W+hCAnJXMnIOW3sue7j+WtmOWcqO+8jOW5tuS4lOS4jeaYr+S4gOS4quepuuebruW9leOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLlt6XkvZzljLogJyVzJyDlt7Lnu4/lrZjlnKjjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDMzIGJ1aWx0aW4vY2xvbmUuYzoxMDU0IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6MzAyIGJ1aWx0aW4vd29ya3RyZWUuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIuS4jeiDveS4uiAnJXMnIOWIm+W7uuWFiOWvvOebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uuW3peS9nOWMuuebruW9lSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi5YWL6ZqG5Yiw57qv5LuT5bqTICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAi5q2j5YWL6ZqG5YiwICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwODQKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiY2xvbmUgLS1yZWN1cnNpdmUg5ZKMIC0tcmVmZXJlbmNlIOS7peWPiiAtLXJlZmVyZW5jZS1pZi1hYmxlIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNDgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCDlnKjmnKzlnLDlhYvpmobml7booqvlv73nlaXvvIzor7fmlLnnlKggZmlsZTovLyDljY/orq7jgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUwCittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LXNpbmNlIOWcqOacrOWcsOWFi+mahuaXtuiiq+W/veeVpe+8jOivt+aUueeUqCBmaWxlOi8vIOWNj+iuruOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTIKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tc2hhbGxvdy1leGNsdWRlIOWcqOacrOWcsOWFi+mahuaXtuiiq+W/veeVpe+8jOivt+aUueeUqCBmaWxlOi8vIOWNj+iuruOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZmlsdGVyIOWcqOacrOWcsOWFi+mahuaXtuiiq+W/veeVpe+8jOivt+aUueeUqCBmaWxlOi8vIOWNj+iuruOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTcKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICLmupDku5PlupPmmK/mtYXlhYvpmobvvIzlv73nlaUgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjIKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwg6KKr5b+955WlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIzNyBidWlsdGluL2Nsb25lLmM6MTI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAi6L+c56iL5YiG5pSvICVzIOWcqOS4iua4uCAlcyDmnKrlj5HnjrAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQ4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi5oKo5Ly85LmO5YWL6ZqG5LqG5LiA5Liq56m65LuT5bqT44CCIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjEwCittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLmn6Xmib7phY3nva7lj5jph48iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIuimgeS9v+eUqOeahOW4g+WxgCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIuacgOWkp+WuveW6piIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIuW3pui+ueahhueahOWhq+WFheepuumXtCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLlj7PovrnmoYbnmoTloavlhYXnqbrpl7QiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzMKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAi5Lik5YiX5LmL6Ze055qE5aGr5YWF56m66Ze0IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQg5b+F6aG75piv56ys5LiA5Liq5Y+C5pWwIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPOeItuaPkOS6pD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPOa2iOaBrz4pLi4uXSBbKC1GIDzmlofku7YiCisiPikuLi5dIDzmoJE+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICLlv73nlaXph43lpI3nmoTniLbmj5DkuqQgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaHlkI0gJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZe+8muaXoOazleaJk+W8gCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWXvvJrml6Dms5Xor7vlj5YgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZe+8muaXoOazleWFs+mXrSAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICLniLbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICLniLbmj5DkuqTlr7nosaEgSUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNDk2IGJ1aWx0aW4vbWVyZ2UuYzoyNzAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ2OQorIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLor7TmmI4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNDk2Cittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorbXNnaWQgInJlYWQgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi5LuO5paH5Lu25Lit6K+75Y+W5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUwOCBidWlsdGluL21lcmdlLmM6Mjg3CisjOiBidWlsdGluL3B1bGwuYzoxOTUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkdQRyDmj5DkuqTnrb7lkI0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzMKK21zZ2lkICJtdXN0IGdpdmUgZXhhY3RseSBvbmUgdHJlZSIKK21zZ3N0ciAi5b+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+S5ieOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNzYKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi5LiN6IO95Yib5bu65Li05pe257Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4MgorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgIuS6pOS6kuW8j+a3u+WKoOWksei0pSIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi5peg5rOV5pu05paw5Li05pe257Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5OAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICLkuI3og73mm7TmlrDmoJHnmoTkuLvnvJPlrZgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIzIGJ1aWx0aW4vY29tbWl0LmM6NDQ2IGJ1aWx0aW4vY29tbWl0LmM6NDkyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpkgbmV3X2luZGV4IOaWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzUKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIuWcqOWQiOW5tui/h+eoi+S4reS4jeiDveWBmumDqOWIhuaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzcKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgIuWcqOaLo+mAiei/h+eoi+S4reS4jeiDveWBmumDqOWIhuaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0ODUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIuaXoOazleivu+WPlue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzo1MDQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIuaXoOazleWGmeS4tOaXtue0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgbGFja3MgYXV0aG9yIGhlYWRlciIKK21zZ3N0ciAi5o+Q5LqkICclcycg57y65bCR5L2c6ICF5L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBoYXMgbWFsZm9ybWVkIGF1dGhvciBsaW5lIgorbXNnc3RyICLmj5DkuqQgJyVzJyDmnInmoLzlvI/plJnor6/nmoTkvZzogIXkv6Hmga8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIzCittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAi5qC85byP6ZSZ6K+v55qEIC0tYXV0aG9yIOWPguaVsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NzYKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5peg5rOV6YCJ5oup5LiA5Liq5pyq6KKr5b2T5YmN5o+Q5Lqk6K+05piO5L2/55So55qE5rOo6YeK5a2X56ymIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcxNCBidWlsdGluL2NvbW1pdC5jOjc0NyBidWlsdGluL2NvbW1pdC5jOjEwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveafpeivouaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjYgYnVpbHRpbi9zaG9ydGxvZy5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICLvvIjmraPku47moIflh4bovpPlhaXkuK3or7vlj5bml6Xlv5fkv6Hmga/vvIlcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5LiN6IO95LuO5qCH5YeG6L6T5YWl5Lit6K+75Y+W5pel5b+X5L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5bml6Xlv5fmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjMgYnVpbHRpbi9jb21taXQuYzo3NzkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICLkuI3og73or7vlj5YgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIuS4jeiDveivu+WPliBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODMwCittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAi5LiN6IO95YaZ5o+Q5Lqk5qih54mIIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkvLzkuY7mgqjmraPlnKjlgZrkuIDkuKrlkIjlubbmj5DkuqTjgILlpoLmnpzkuI3lr7nvvIzor7fliKDpmaTmlofku7ZcbiIKKyJcdCVzXG4iCisi54S25ZCO6YeN6K+V44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuS8vOS5juaCqOato+WcqOWBmuS4gOS4quaLo+mAieaPkOS6pOOAguWmguaenOS4jeWvue+8jOivt+WIoOmZpOaWh+S7tlxuIgorIlx0JXNcbiIKKyLnhLblkI7ph43or5XjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuivt+S4uuaCqOeahOWPmOabtOi+k+WFpeaPkOS6pOivtOaYjuOAguS7pSAnJWMnIOW8gOWni+eahOihjOWwhuiiq+W/veeVpe+8jOiAjOS4gOS4quepuueahOaPkOS6pFxuIgorIuivtOaYjuWwhuS8mue7iOatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuivt+S4uuaCqOeahOWPmOabtOi+k+WFpeaPkOS6pOivtOaYjuOAguS7pSAnJWMnIOW8gOWni+eahOihjOWwhuiiq+S/neeVme+8jOWmguaenOaCqOWOn+aEj1xuIgorIuS5n+WPr+S7peWIoOmZpOWug+S7rOOAguS4gOS4quepuueahOaPkOS6pOivtOaYjuWwhuS8mue7iOatouaPkOS6pOOAglxuIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPkvZzogIXvvJogICUuKnMgPCUuKnM+IgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXPml6XmnJ/vvJogICVzIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPmj5DkuqTogIXvvJolLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MjUKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi5peg5rOV6K+75Y+W57Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk5MgorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICLml6Dms5XliJvlu7rmoJHlr7nosaEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAwNiBidWlsdGluL3RhZy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIuivt+S9v+eUqCAtbSDmiJYgLUYg6YCJ6aG55o+Q5L6b5o+Q5Lqk6K+05piO44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIi0tYXV0aG9yICclcycg5LiN5pivICflp5PlkI0gPOmCrueusT4nIOagvOW8j++8jOS4lOacquiDveWcqOeOsOacieS9nOiAheS4reaJvuWIsOWMuemFjSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaWdub3JlZCBtb2RlICclcyciCittc2dzdHIgIuaXoOaViOeahOW/veeVpeaooeW8jyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwODIgYnVpbHRpbi9jb21taXQuYzoxMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE5pyq6L+96Liq5paH5Lu25Y+C5pWwICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyMgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIOWSjCAteiDpgInpobnkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NgorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuWQjOaXtuS9v+eUqCAtLXJlc2V0LWF1dGhvciDlkowgLS1hdXRob3Ig5rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzUKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAi5oKo5rKh5pyJ5Y+v5L+u6KGl55qE5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKrlkIjlubbov4fnqIvkuK0gLS0g5peg5rOV5L+u6KGl5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKrmi6PpgInov4fnqIvkuK0gLS0g5peg5rOV5L+u6KGl5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExODMKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLpgInpobkgLS1zcXVhc2gg5ZKMIC0tZml4dXAg5LiN6IO95ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTMKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAi5Y+q6IO955So5LiA5LiqIC1jLy1DLy1GLy0tZml4dXAg6YCJ6aG544CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTUKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYuIgorbXNnc3RyICLpgInpobkgLW0g5LiN6IO95ZKMIC1jLy1DLy1GIOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjAzCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3Ig5Y+q6IO95ZKMIC1D44CBLWMg5oiWIC0tYW1lbmQg5ZCM5pe25L2/55So44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjAKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIuWPquiDveeUqOS4gOS4qiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCDpgInpobnjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRocyAnJXMgLi4uJyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIui3r+W+hCAgJyVzIC4uLicg5ZKMIC1hIOmAiemhueWQjOaXtuS9v+eUqOayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU3IGJ1aWx0aW4vY29tbWl0LmM6MTUxOQorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAi5Lul566A5rSB55qE5qC85byP5pi+56S654q25oCBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTkgYnVpbHRpbi9jb21taXQuYzoxNTIxCittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIuaYvuekuuWIhuaUr+S/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYxCittc2dpZCAic2hvdyBzdGFzaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5pi+56S66LSu6JeP5Yy65L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjMgYnVpbHRpbi9jb21taXQuYzoxNTIzCittc2dpZCAiY29tcHV0ZSBmdWxsIGFoZWFkL2JlaGluZCB2YWx1ZXMiCittc2dzdHIgIuiuoeeul+WujOaVtOeahOmihuWFiC/okL3lkI7lgLwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NQorbXNnaWQgInZlcnNpb24iCittc2dzdHIgIueJiOacrCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY1IGJ1aWx0aW4vY29tbWl0LmM6MTUyNSBidWlsdGluL3B1c2guYzo1NDkKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2NTAKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAi5py65Zmo5Y+v6K+755qE6L6T5Ye6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjggYnVpbHRpbi9jb21taXQuYzoxNTI3Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICLku6Xplb/moLzlvI/mmL7npLrnirbmgIHvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MSBidWlsdGluL2NvbW1pdC5jOjE1MzAKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAi5p2h55uu5LulIE5VTCDlrZfnrKbnu5PlsL4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3MyBidWlsdGluL2NvbW1pdC5jOjEzNzcgYnVpbHRpbi9jb21taXQuYzoxNTMzCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1MyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE1NgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTkgYnVpbHRpbi9yZWJhc2UuYzoxNTI1IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJtb2RlIgorbXNnc3RyICLmqKHlvI8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM3NCBidWlsdGluL2NvbW1pdC5jOjE1MzMKK21zZ2lkICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIuaYvuekuuacqui3n+i4queahOaWh+S7tu+8jOKAnOaooeW8j+KAneeahOWPr+mAieWPguaVsO+8mmFsbOOAgW5vcm1hbOOAgW5v44CC77yI6buY6K6k77yaYWxs77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzgKK21zZ2lkICIiCisic2hvdyBpZ25vcmVkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogdHJhZGl0aW9uYWwsIG1hdGNoaW5nLCBuby4gKERlZmF1bHQ6ICIKKyJ0cmFkaXRpb25hbCkiCittc2dzdHIgIiIKKyLmmL7npLrlt7Llv73nlaXnmoTmlofku7bvvIzlj6/pgInmqKHlvI/vvJp0cmFkaXRpb25hbOOAgW1hdGNoaW5n44CBbm/jgILvvIjpu5jorqTvvJp0cmFkaXRpb25hbO+8iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICLkvZXml7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MQorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorIuW/veeVpeWtkOaooee7hOeahOabtOaUue+8jOKAnOS9leaXtuKAneeahOWPr+mAieWPguaVsO+8mmFsbOOAgWRpcnR544CBdW50cmFja2Vk44CC77yI6buY6K6k77yaYWxs77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODMKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLku6XliJfnmoTmlrnlvI/mmL7npLrmnKrot5/ouKrnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NAorbXNnaWQgImRvIG5vdCBkZXRlY3QgcmVuYW1lcyIKK21zZ3N0ciAi5LiN5qOA5rWL6YeN5ZG95ZCNIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzODYKK21zZ2lkICJkZXRlY3QgcmVuYW1lcywgb3B0aW9uYWxseSBzZXQgc2ltaWxhcml0eSBpbmRleCIKK21zZ3N0ciAi5qOA5rWL6YeN5ZG95ZCN77yM5Y+v5Lul6K6+572u57Si5byV55u45Ly85bqmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MDYKK21zZ2lkICJVbnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBpZ25vcmVkIGFuZCB1bnRyYWNrZWQtZmlsZXMgYXJndW1lbnRzIgorbXNnc3RyICLkuI3mlK/mjIHlt7Llv73nlaXlkozmnKrot5/ouKrmlofku7blj4LmlbDnmoTnu4TlkIgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4OQorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIuaPkOS6pOaIkOWKn+WQjuS4jeaYvuekuuamgui/sOS/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkwCittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLlnKjmj5DkuqTor7TmmI7mqKHmnb/ph4zmmL7npLrlt67lvIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5MgorbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIuaPkOS6pOivtOaYjumAiemhuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkzIGJ1aWx0aW4vbWVyZ2UuYzoyNzQgYnVpbHRpbi90YWcuYzo0MTQKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICLku47mlofku7bkuK3or7vlj5bmj5DkuqTor7TmmI4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAi5L2c6ICFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTQKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAi5o+Q5Lqk5pe26KaG55uW5L2c6ICFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUgYnVpbHRpbi9nYy5jOjUzOAorbXNnaWQgImRhdGUiCittc2dzdHIgIuaXpeacnyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk1Cittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICLmj5DkuqTml7bopobnm5bml6XmnJ8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NyBidWlsdGluL2NvbW1pdC5jOjE0OTggYnVpbHRpbi9jb21taXQuYzoxNDk5CisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAgcGFyc2Utb3B0aW9ucy5oOjMyOCByZWYtZmlsdGVyLmg6OTIKK21zZ2lkICJjb21taXQiCittc2dzdHIgIuaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3Cittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIumHjeeUqOW5tue8lui+keaMh+WumuaPkOS6pOeahOaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk4Cittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIumHjeeUqOaMh+WumuaPkOS6pOeahOaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk5Cittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi5L2/55SoIGF1dG9zcXVhc2gg5qC85byP55qE5o+Q5Lqk6K+05piO55So5Lul5L+u5q2j5oyH5a6a55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDAKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi5L2/55SoIGF1dG9zcXVhc2gg5qC85byP55qE5o+Q5Lqk6K+05piO55So5Lul5Y6L57yp6Iez5oyH5a6a55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDEKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICLnjrDlnKjlsIbor6Xmj5DkuqTnmoTkvZzogIXmlLnkuLrmiJHvvIjlkowgLUMvLWMvLS1hbWVuZCDlj4LmlbDlhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMiBidWlsdGluL2xvZy5jOjE2MzQgYnVpbHRpbi9tZXJnZS5jOjI4OQorIzogYnVpbHRpbi9wdWxsLmM6MTY0IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEwCittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICLmt7vliqAgU2lnbmVkLW9mZi1ieTog562+5ZCNIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDMKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgIuS9v+eUqOaMh+WumueahOaooeadv+aWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA0Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgIuW8uuWItue8lui+keaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTA2Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIuWcqOaPkOS6pOivtOaYjuaooeadv+mHjOWMheWQq+eKtuaAgeS/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTExCittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIuaPkOS6pOWGheWuuemAiemhuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTEyCittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLmj5DkuqTmiYDmnInmlLnliqjnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxMworbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAi5re75Yqg5oyH5a6a55qE5paH5Lu25Yiw57Si5byV5Yy6562J5b6F5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTQKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAi5Lqk5LqS5byP5re75Yqg5paH5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTUKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICLkuqTkupLlvI/mt7vliqDlj5jmm7QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNgorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAi5Y+q5o+Q5Lqk5oyH5a6a55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTcKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcyIKK21zZ3N0ciAi57uV6L+HIHByZS1jb21taXQg5ZKMIGNvbW1pdC1tc2cg6ZKp5a2QIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTgKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICLmmL7npLrlsIbopoHmj5DkuqTnmoTlhoXlrrkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMQorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi5L+u5pS55YWI5YmN55qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzIKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIue7lei/hyBwb3N0LXJld3JpdGUg6ZKp5a2QIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzkKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICLlhYHorrjkuIDkuKrnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU0MQorbXNnaWQgIm9rIHRvIHJlY29yZCBhIGNoYW5nZSB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgIuWFgeiuuOepuueahOaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIuaNn+Wdj+eahCBNRVJHRV9IRUFEIOaWh+S7tu+8iCVz77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICLkuI3og73or7vlj5YgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5o+Q5Lqk6K+05piO77yaJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0NworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICLnu4jmraLmj5DkuqTlm6DkuLrmj5DkuqTor7TmmI7kuLrnqbrjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAi57uI5q2i5o+Q5Lqk77yb5oKo5pyq5pu05pS55p2l6Ieq5qih54mI55qE5o+Q5Lqk6K+05piO44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY4NgorbXNnaWQgIiIKKyJyZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi5LuT5bqT5bey5pu05paw77yM5L2G5peg5rOV5YaZIG5ld19pbmRleCDmlofku7bjgILmo4Dmn6XmmK/lkKbno4Hnm5jlt7Lmu6HmiJZcbiIKKyLno4Hnm5jphY3pop3lt7LogJflsL3vvIznhLblkI7miafooYwgXCJnaXQgcmVzdG9yZSAtLXN0YWdlZCA6L1wiIOaBouWkjeOAgiIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMSBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE3Cittc2dpZCAiIgorImdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdIgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA85a+56LGh55uu5b2VPl0gWy0tc2hhbGxvd10gWy0tIgorIltuby1dcHJvZ3Jlc3NdIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MjIKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDzlr7nosaHnm67lvZU+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tIgorInJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ4IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTAzCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4NyBidWlsdGluL2ZldGNoLmM6MTc5IGJ1aWx0aW4vbG9nLmM6MTY1NworbXNnaWQgImRpciIKK21zZ3N0ciAi55uu5b2VIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjQ5IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA0CisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjE4OAorbXNnaWQgIlRoZSBvYmplY3QgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBncmFwaCIKK21zZ3N0ciAi5L+d5a2Y5Zu+5b2i55qE5a+56LGh55uu5b2VIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjUxCittc2dpZCAiaWYgdGhlIGNvbW1pdC1ncmFwaCBpcyBzcGxpdCwgb25seSB2ZXJpZnkgdGhlIHRpcCBmaWxlIgorbXNnc3RyICLlpoLmnpzmj5DkuqTlm77lvaLooqvmi4bliIbvvIzlj6rpqozor4HlpLTkuIDkuKrmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NzMgdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciCittc2dzdHIgIuaXoOazleaJk+W8gOaPkOS6pOWbvuW9oiAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwNgorbXNnaWQgInN0YXJ0IHdhbGsgYXQgYWxsIHJlZnMiCittc2dzdHIgIuW8gOWni+mBjeWOhuaJgOacieW8leeUqCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDgKK21zZ2lkICJzY2FuIHBhY2staW5kZXhlcyBsaXN0ZWQgYnkgc3RkaW4gZm9yIGNvbW1pdHMiCittc2dzdHIgIuS7juagh+WHhui+k+WFpeS4reeahOWMhee0ouW8leaWh+S7tuWIl+ihqOS4reaJq+aPj+aPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTAKK21zZ2lkICJzdGFydCB3YWxrIGF0IGNvbW1pdHMgbGlzdGVkIGJ5IHN0ZGluIgorbXNnc3RyICLku47moIflh4bovpPlhaXkuK3nmoTmj5DkuqTlvIDlp4vmiavmj48iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTEyCittc2dpZCAiaW5jbHVkZSBhbGwgY29tbWl0cyBhbHJlYWR5IGluIHRoZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAi5YyF5ZCrIGNvbW1pdC1ncmFwaCDmlofku7bkuK3lt7LmnInmiYDmnInmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE1Cittc2dpZCAiYWxsb3cgd3JpdGluZyBhbiBpbmNyZW1lbnRhbCBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAi5YWB6K645YaZ5LiA5Liq5aKe6YeP5o+Q5Lqk5Zu+5b2i5paH5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExNyBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEyMQorbXNnaWQgIm1heGltdW0gbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBub24tYmFzZSBzcGxpdCBjb21taXQtZ3JhcGgiCittc2dzdHIgIuWcqOmdnuWfuuacrOaLhuWIhuaPkOS6pOWbvuW9ouS4reeahOacgOWkp+aPkOS6pOaVsCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTkKK21zZ2lkICJtYXhpbXVtIHJhdGlvIGJldHdlZW4gdHdvIGxldmVscyBvZiBhIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi5LiA5Liq5ouG5YiG5o+Q5Lqk5Zu+5b2i55qE5Lik5Liq57qn5Yir5LmL6Ze055qE5pyA5aSn5q+U546HIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEzNworbXNnaWQgInVzZSBhdCBtb3N0IG9uZSBvZiAtLXJlYWNoYWJsZSwgLS1zdGRpbi1jb21taXRzLCBvciAtLXN0ZGluLXBhY2tzIgorbXNnc3RyICLkuI3og73lkIzml7bkvb/nlKggLS1yZWFjaGFibGXjgIEtLXN0ZGluLWNvbW1pdHMg5oiWIC0tc3RkaW4tcGFja3MiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTEKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTAzIGJ1aWx0aW4vZW52LS1oZWxwZXIuYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50LCAlcyIKK21zZ3N0ciAi5pyq6IO96K+G5Yir55qEIC0tdHlwZSDlj4LmlbDvvIwlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMTUKK21zZ2lkICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIKK21zZ3N0ciAi5LiA5qyh5Y+q6IO95LiA5Liq57G75Z6LIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNAorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICLphY3nva7mlofku7bkvY3nva4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So5YWo5bGA6YWN572u5paH5Lu2IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNgorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgIuS9v+eUqOezu+e7n+e6p+mFjee9ruaWh+S7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjcKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So5LuT5bqT57qn6YWN572u5paH5Lu2IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOAorbXNnaWQgInVzZSBwZXItd29ya3RyZWUgY29uZmlnIGZpbGUiCittc2dzdHIgIuS9v+eUqOW3peS9nOWMuue6p+WIq+eahOmFjee9ruaWh+S7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjkKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgIuS9v+eUqOaMh+WumueahOmFjee9ruaWh+S7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICLmlbDmja7lr7nosaEgSUQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMwCittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAi5LuO57uZ5a6a55qE5pWw5o2u5a+56LGh6K+75Y+W6YWN572uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMQorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAi5pON5L2cIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMgorbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLojrflj5blgLzvvJpuYW1lIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMzCittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLojrflvpfmiYDmnInnmoTlgLzvvJprZXkgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzQKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi5qC55o2u5q2j5YiZ6KGo6L6+5byP6I635b6X5YC877yabmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNQorbXNnaWQgImdldCB2YWx1ZSBzcGVjaWZpYyBmb3IgdGhlIFVSTDogc2VjdGlvblsudmFyXSBVUkwiCittc2dzdHIgIuiOt+W+lyBVUkwg5Y+W5YC877yac2VjdGlvblsudmFyXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM2Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgIuabv+aNouaJgOacieWMuemFjeeahOWPmOmHj++8mm5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzcKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgIua3u+WKoOS4gOS4quaWsOeahOWPmOmHj++8mm5hbWUgdmFsdWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM4Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi5Yig6Zmk5LiA5Liq5Y+Y6YeP77yabmFtZSBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzOQorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLliKDpmaTmiYDmnInljLnphY3pobnvvJpuYW1lIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQwCittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICLph43lkb3lkI3lsI/oioLvvJpvbGQtbmFtZSBuZXctbmFtZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDEKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICLliKDpmaTkuIDkuKrlsI/oioLvvJpuYW1lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MgorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICLliJflh7rmiYDmnIkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQzCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIuaJk+W8gOS4gOS4que8lui+keWZqCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAi6I635b6X6YWN572u55qE6aKc6Imy77ya6YWN572uIFvpu5jorqRdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NQorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICLojrflvpfpopzoibLorr7nva7vvJrphY3nva4gW3N0ZG91dC1pcy10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NgorbXNnaWQgIlR5cGUiCittc2dzdHIgIuexu+WeiyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDcgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM4Cittc2dpZCAidmFsdWUgaXMgZ2l2ZW4gdGhpcyB0eXBlIgorbXNnc3RyICLlj5blgLzkuLror6XnsbvlnosiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ4Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICLlgLzmmK8gXCJ0cnVlXCIg5oiWIFwiZmFsc2VcIiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDkKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAi5YC85piv5Y2B6L+b5Yi25pWwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAi5YC85pivIC0tYm9vbCBvciAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTEKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICLlgLzmmK/kuIDkuKrot6/lvoTvvIjmlofku7bmiJbnm67lvZXlkI3vvIkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUyCittc2dpZCAidmFsdWUgaXMgYW4gZXhwaXJ5IGRhdGUiCittc2dzdHIgIuWAvOaYr+S4gOS4quWIsOacn+aXpeacnyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTMKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAi5YW25a6DIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1NAorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi57uI5q2i5YC85pivIE5VTCDlrZfoioIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU1Cittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICLlj6rmmL7npLrlj5jph4/lkI0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU2Cittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICLmn6Xor6Lml7blj4LnhacgaW5jbHVkZSDmjIfku6TpgJLlvZLmn6Xmib4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU3Cittc2dpZCAic2hvdyBvcmlnaW4gb2YgY29uZmlnIChmaWxlLCBzdGFuZGFyZCBpbnB1dCwgYmxvYiwgY29tbWFuZCBsaW5lKSIKK21zZ3N0ciAi5pi+56S66YWN572u55qE5p2l5rqQ77yI5paH5Lu244CB5qCH5YeG6L6T5YWl44CB5pWw5o2u5a+56LGh77yM5oiW5ZG95Luk6KGM77yJIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OCBidWlsdGluL2Vudi0taGVscGVyLmM6NDAKK21zZ2lkICJ2YWx1ZSIKK21zZ3N0ciAi5Y+W5YC8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1OAorbXNnaWQgIndpdGggLS1nZXQsIHVzZSBkZWZhdWx0IHZhbHVlIHdoZW4gbWlzc2luZyBlbnRyeSIKK21zZ3N0ciAi5L2/55SoIC0tZ2V0IOWPguaVsO+8jOW9k+e8uuWwkeiuvue9ruaXtuS9v+eUqOm7mOiupOWAvCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgc2hvdWxkIGJlICVkIgorbXNnc3RyICLplJnor6/nmoTlj4LmlbDkuKrmlbDvvIzlupTor6XkuLogJWQg5LiqIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgZnJvbSAlZCB0byAlZCIKK21zZ3N0ciAi6ZSZ6K+v55qE5Y+C5pWw5Liq5pWw77yM5bqU6K+l5Li65LuOICVkIOS4quWIsCAlZCDkuKoiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5IHBhdHRlcm46ICVzIgorbXNnc3RyICLml6DmlYjplK7lkI3mqKHlvI/vvJolcyIKKworIzogYnVpbHRpbi9jb25maWcuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZvcm1hdCBkZWZhdWx0IGNvbmZpZyB2YWx1ZTogJXMiCittc2dzdHIgIuagvOW8j+WMlum7mOiupOmFjee9ruWAvOWksei0pe+8miVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcGFyc2UgY29sb3IgJyVzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q6aKc6ImyICclcyciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQzCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiCittc2dzdHIgIuaXoOazleino+aekOm7mOiupOminOiJsuWAvCIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTYgYnVpbHRpbi9jb25maWcuYzo3NDIKK21zZ2lkICJub3QgaW4gYSBnaXQgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3lnKggZ2l0IOS7k+W6k+S4rSIKKworIzogYnVpbHRpbi9jb25maWcuYzo0OTkKK21zZ2lkICJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aMgeWGmeWIsOagh+WHhui+k+WFpSIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MDIKK21zZ2lkICJ3cml0aW5nIGNvbmZpZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mjIHlhpnliLDphY3nva7mlbDmja7lr7nosaEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjExCittc2dpZCAib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lIgorbXNnc3RyICLkuIDmrKHlj6rog73mnInkuIDkuKrphY3nva7mlofku7YiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjE2Cittc2dpZCAiLS1sb2NhbCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWxvY2FsIOWPquiDveWcqOS4gOS4quS7k+W6k+WGheS9v+eUqCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTkKK21zZ2lkICItLWJsb2IgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1ibG9iIOWPquiDveWcqOS4gOS4quS7k+W6k+WGheS9v+eUqCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MzgKK21zZ2lkICIkSE9NRSBub3Qgc2V0IgorbXNnc3RyICIkSE9NRSDmnKrorr7nva4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjU4Cittc2dpZCAiIgorIi0td29ya3RyZWUgY2Fubm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB3b3JraW5nIHRyZWVzIHVubGVzcyB0aGUgY29uZmlnXG4iCisiZXh0ZW5zaW9uIHdvcmt0cmVlQ29uZmlnIGlzIGVuYWJsZWQuIFBsZWFzZSByZWFkIFwiQ09ORklHVVJBVElPTiBGSUxFXCJcbiIKKyJzZWN0aW9uIGluIFwiZ2l0IGhlbHAgd29ya3RyZWVcIiBmb3IgZGV0YWlscyIKK21zZ3N0ciAiIgorIuS4jeiDveWSjOWkmuS4quW3peS9nOWMuuS4gOi1t+S9v+eUqCAtLXdvcmt0cmVl77yM6Zmk6Z2e5ZCv55SoIHdvcmt0cmVlQ29uZmlnIOmFjee9ruaJqeWxleOAglxuIgorIuivpuaDheivt+mYheivu+KAnGdpdCBoZWxwIHdvcmt0cmVl4oCd55qE4oCcQ09ORklHVVJBVElPTiBGSUxF4oCd5bCP6IqCIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4OAorbXNnaWQgIi0tZ2V0LWNvbG9yIGFuZCB2YXJpYWJsZSB0eXBlIGFyZSBpbmNvaGVyZW50IgorbXNnc3RyICItLWdldC1jb2xvciDlkozlj5jph4/nsbvlnovkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkzCittc2dpZCAib25seSBvbmUgYWN0aW9uIGF0IGEgdGltZSIKK21zZ3N0ciAi5LiA5qyh5Y+q6IO95pyJ5LiA5Liq5Yqo5L2cIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwNgorbXNnaWQgIi0tbmFtZS1vbmx5IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWxpc3Qgb3IgLS1nZXQtcmVnZXhwIgorbXNnc3RyICItLW5hbWUtb25seSDku4XpgILnlKjkuo4gLS1saXN0IOaIliAtLWdldC1yZWdleHAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzEyCittc2dpZCAiIgorIi0tc2hvdy1vcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0LCAtLWdldC1hbGwsIC0tZ2V0LXJlZ2V4cCwgYW5kIC0tIgorImxpc3QiCittc2dzdHIgIi0tc2hvdy1vcmlnaW4g5LuF6YCC55So5LqOIC0tZ2V044CBLS1nZXQtYWxs44CBLS1nZXQtcmVnZXhwIOWSjCAtLWxpc3QiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzE4Cittc2dpZCAiLS1kZWZhdWx0IGlzIG9ubHkgYXBwbGljYWJsZSB0byAtLWdldCIKK21zZ3N0ciAiLS1kZWZhdWx0IOS7hemAgueUqOS6jiAtLWdldCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W6YWN572u5paH5Lu2ICclcyciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzM0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIKK21zZ3N0ciAi5aSE55CG6YWN572u5paH5Lu25Ye66ZSZIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NAorbXNnaWQgImVkaXRpbmcgc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5pSv5oyB57yW6L6R5qCH5YeG6L6T5YWlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0NgorbXNnaWQgImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5pSv5oyB57yW6L6R5pWw5o2u5a+56LGhIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAi5LiN6IO95Yib5bu66YWN572u5paH5Lu2ICVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IG92ZXJ3cml0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aCBhIHNpbmdsZSB2YWx1ZVxuIgorIiAgICAgICBVc2UgYSByZWdleHAsIC0tYWRkIG9yIC0tcmVwbGFjZS1hbGwgdG8gY2hhbmdlICVzLiIKK21zZ3N0ciAiIgorIuaXoOazleeUqOS4gOS4quWAvOimhuebluWkmuS4quWAvFxuIgorIiAgICAgICDkvb/nlKjkuIDkuKrmraPliJnooajovr7lvI/jgIEtLWFkZCDmiJYgLS1yZXBsYWNlLWFsbCDmnaXkv67mlLkgJXPjgIIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODQ3IGJ1aWx0aW4vY29uZmlnLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggc2VjdGlvbjogJXMiCittc2dzdHIgIuaXoOatpOWwj+iKgu+8miVzIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5MAorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjEwMAorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAi5Lul55So5oi35Y+v6K+755qE5qC85byP5pi+56S65aSn5bCPIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjYKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPOmAiemhuT5dIFs85o+Q5Lqk5Y+3Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzzpgInpobk+XSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjIKK21zZ2lkICJoZWFkIgorbXNnc3RyICLlpLQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImxpZ2h0d2VpZ2h0IgorbXNnc3RyICLovbvph4/nuqfnmoQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImFubm90YXRlZCIKK21zZ3N0ciAi6ZmE5rOo55qEIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAi6ZmE5rOo5qCH562+ICVzIOaXoOaViCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICLpmYTms6jmoIfnrb4gJXMg5rKh5pyJ5bWM5YWl5ZCN56ewIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgIuagh+etviAnJXMnIOeahOehruaYr+WcqCAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5qCH562+5YeG56Gu5Yy56YWNICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhhY3QgbWF0Y2ggb24gcmVmcyBvciB0YWdzLCBzZWFyY2hpbmcgdG8gZGVzY3JpYmVcbiIKK21zZ3N0ciAi5rKh5pyJ57K+56Gu5Yy56YWN5Yiw5byV55So5oiW5qCH562+77yM57un57ut5pCc57Si6L+b6KGM5o+P6L+wXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIuWujOaIkOaQnOe0oiAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisi5rKh5pyJ6ZmE5rOo5qCH562+6IO95o+P6L+wICclcyfjgIJcbiIKKyLnhLbogIzvvIzlrZjlnKjmnKrpmYTms6jmoIfnrb7vvJrlsJ3or5UgLS10YWdz44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyLmsqHmnInmoIfnrb7og73mj4/ov7AgJyVzJ+OAglxuIgorIuWwneivlSAtLWFsd2F5c++8jOaIluiAheWIm+W7uuS4gOS6m+agh+etvuOAgiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAi5bey6YGN5Y6GICVsdSDkuKrmj5DkuqRcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyLlj5HnjrDlpJrkuo4gJWkg5Liq5qCH562+77yM5YiX5Ye65pyA6L+R55qEICVpIOS4qlxuIgorIuWcqCAlcyDmlL7lvIPmkJzntKJcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJkZXNjcmliZSAlc1xuIgorbXNnc3RyICLmj4/ov7AgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5pyJ5pWI55qE5a+56LGh5ZCNICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5laXRoZXIgYSBjb21taXQgbm9yIGJsb2IiCittc2dzdHIgIiVzIOaXouS4jeaYr+aPkOS6pOS5n+S4jeaYr+aVsOaNruWvueixoSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzNworbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgIuWvu+aJvuivpeaPkOS6pOS5i+WQjueahOagh+etviIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOAorbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgIuWcqOagh+WHhumUmeivr+S4iuiwg+ivleaQnOe0ouetlueVpSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjUzOQorbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICLkvb/nlKjku7vmhI/lvJXnlKgiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDAKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAi5L2/55So5Lu75oSP5qCH562+77yM5Y2z5L2/5pyq6ZmE5bim5rOo6YeKIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQxCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAi5aeL57uI5L2/55So6ZW/5o+Q5Lqk5Y+35qC85byPIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQyCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICLlj6rot5/pmo/nrKzkuIDkuKrniLbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDUKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICLlj6rovpPlh7rnsr7noa7ljLnphY0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDcKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICLogIPomZHmnIDov5EgPG4+IOS4quagh+etvu+8iOm7mOiupO+8mjEw77yJIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTQ5Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi5Y+q6ICD6JmR5Yy56YWNIDzmqKHlvI8+IOeahOagh+etviIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MQorbXNnaWQgImRvIG5vdCBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi5LiN6ICD6JmR5Yy56YWNIDzmqKHlvI8+IOeahOagh+etviIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1MyBidWlsdGluL25hbWUtcmV2LmM6NDczCittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICLmmL7npLrnroDlhpnnmoTmj5DkuqTlj7fkvZzkuLrlkI7lpIciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTQgYnVpbHRpbi9kZXNjcmliZS5jOjU1NworbXNnaWQgIm1hcmsiCittc2dzdHIgIuagh+iusCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NQorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAi5a+55LqO6ISP5bel5L2c5Yy677yM6L+95YqgIDzmoIforrA+77yI6buY6K6k77yaXCItZGlydHlcIu+8iSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1OAorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gYnJva2VuIHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItYnJva2VuXCIpIgorbXNnc3RyICLlr7nkuo7mjZ/lnY/nmoTlt6XkvZzljLrvvIzov73liqAgPOagh+iusD7vvIjpu5jorqTvvJpcIi1icm9rZW5cIu+8iSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU3NgorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcg5LiOIC0tYWJicmV2PTAg5LiN5YW85a65IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjA1Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIuayoeacieWPkeeOsOWQjeensO+8jOaXoOazleaPj+i/sOS7u+S9leS4nOilv+OAgiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1NgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWRpcnR5IOS4juaPkOS6pOWPt+S4jeWFvOWuuSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjY1OAorbXNnaWQgIi0tYnJva2VuIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1icm9rZW4g5LiO5o+Q5Lqk5Y+35LiN5YW85a65IgorCisjOiBidWlsdGluL2RpZmYuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAiJyVzJ++8muS4jeaYr+S4gOS4quato+inhOaWh+S7tuaIluespuWPt+mTvuaOpSIKKworIzogYnVpbHRpbi9kaWZmLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAi5peg5pWI6YCJ6aG577yaJXMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM1MAorbXNnaWQgIk5vdCBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLkuI3mmK/kuIDkuKogZ2l0IOS7k+W6kyIKKworIzogYnVpbHRpbi9kaWZmLmM6Mzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLmj5Dkvpvkuobml6DmlYjlr7nosaEgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIuaPkOS+m+S6hui2hei/h+S4pOS4quaVsOaNruWvueixoe+8miclcyciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLml6Dms5XlpITnkIbnmoTlr7nosaEgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwCittc2dpZCAiZ2l0IGRpZmZ0b29sIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZGlmZnRvb2wgWzzpgInpobk+XSBbPOaPkOS6pD4gWzzmj5DkuqQ+XV0gWy0tXSBbPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZDogJWQiCittc2dzdHIgIuWksei0pe+8miVkIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIuaXoOazleivu+WPluespuWPt+mTvuaOpSAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBzeW1saW5rIGZpbGUgJXMiCittc2dzdHIgIuaXoOazleivu+WPluespuWPt+mTvuaOpeaWh+S7tiAlcyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMgZm9yIHN5bWxpbmsgJXMiCittc2dzdHIgIuaXoOazleivu+WPluespuWPt+mTvuaOpSAlMiRzIOaMh+WQkeeahOWvueixoSAlMSRzIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NDEzCittc2dpZCAiIgorImNvbWJpbmVkIGRpZmYgZm9ybWF0cygnLWMnIGFuZCAnLS1jYycpIGFyZSBub3Qgc3VwcG9ydGVkIGluXG4iCisiZGlyZWN0b3J5IGRpZmYgbW9kZSgnLWQnIGFuZCAnLS1kaXItZGlmZicpLiIKK21zZ3N0ciAiIgorIuS4jeaUr+aMgeWcqOebruW9leavlOi+g+aooeW8j++8iCctZCcg5ZKMICctLWRpci1kaWZmJ++8ieS4remHh+eUqOe7hOWQiOW3ruW8guagvOW8j++8iCctYycg5ZKMICctLSIKKyJjYyfvvInjgIIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYm90aCBmaWxlcyBtb2RpZmllZDogJyVzJyBhbmQgJyVzJy4iCittc2dzdHIgIuS4pOS4quaWh+S7tumDveiiq+S/ruaUue+8miclcycg5ZKMICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2MzYKK21zZ2lkICJ3b3JraW5nIHRyZWUgZmlsZSBoYXMgYmVlbiBsZWZ0LiIKK21zZ3N0ciAi5bel5L2c5Yy65paH5Lu26KKr55WZ5LqG5LiL5p2l44CCIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBvcmFyeSBmaWxlcyBleGlzdCBpbiAnJXMnLiIKK21zZ3N0ciAi5Li05pe25paH5Lu25a2Y5Zyo5LqOICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDgKK21zZ2lkICJ5b3UgbWF5IHdhbnQgdG8gY2xlYW51cCBvciByZWNvdmVyIHRoZXNlLiIKK21zZ3N0ciAi5oKo5Y+v6IO95oOz6KaB5riF55CG5oiW6ICF5oGi5aSN5a6D5Lus44CCIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6Njk3Cittc2dpZCAidXNlIGBkaWZmLmd1aXRvb2xgIGluc3RlYWQgb2YgYGRpZmYudG9vbGAiCittc2dzdHIgIuS9v+eUqCBgZGlmZi5ndWl0b29sYCDku6Pmm78gYGRpZmYudG9vbGAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo2OTkKK21zZ2lkICJwZXJmb3JtIGEgZnVsbC1kaXJlY3RvcnkgZGlmZiIKK21zZ3N0ciAi5omn6KGM5LiA5Liq5YWo55uu5b2V5beu5byC5q+U6L6DIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzAxCittc2dpZCAiZG8gbm90IHByb21wdCBiZWZvcmUgbGF1bmNoaW5nIGEgZGlmZiB0b29sIgorbXNnc3RyICLlkK/liqjlt67lvILmr5TovoPlt6XlhbfkuYvliY3kuI3mj5DnpLoiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MDYKK21zZ2lkICJ1c2Ugc3ltbGlua3MgaW4gZGlyLWRpZmYgbW9kZSIKK21zZ3N0ciAi5ZyoIGRpci1kaWZmIOaooeW8j+S4reS9v+eUqOespuWPt+mTvuaOpSIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwNworbXNnaWQgInRvb2wiCittc2dzdHIgIuW3peWFtyIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcwOAorbXNnaWQgInVzZSB0aGUgc3BlY2lmaWVkIGRpZmYgdG9vbCIKK21zZ3N0ciAi5L2/55So5oyH5a6a55qE5beu5byC5q+U6L6D5bel5YW3IgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEwCittc2dpZCAicHJpbnQgYSBsaXN0IG9mIGRpZmYgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgIgorbXNnc3RyICLmmL7npLrlj6/ku6XnlKjlnKggYC0tdG9vbGAg5Y+C5pWw5ZCO55qE5beu5byC5bel5YW35YiX6KGoIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzEzCittc2dpZCAiIgorIm1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuIGludm9rZWQgZGlmZiB0b29sIHJldHVybnMgYSBub24gLSB6ZXJvIGV4aXQgIgorImNvZGUiCittc2dzdHIgIuW9k+aJp+ihjCBkaWZmIOW3peWFt+i/lOWbnumdnumbtumAgOWHuueggeaXtu+8jOS9vyAnZ2l0LWRpZmZ0b29sJyDpgIDlh7oiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MTYKK21zZ2lkICJzcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMiCittc2dzdHIgIuaMh+WumuS4gOS4queUqOS6juafpeeci+W3ruW8gueahOiHquWumuS5ieWRveS7pCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjcxNworbXNnaWQgInBhc3NlZCB0byBgZGlmZmAiCittc2dzdHIgIuS8oOmAkue7mSBgZGlmZmAiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3MzIKK21zZ2lkICJkaWZmdG9vbCByZXF1aXJlcyB3b3JrdHJlZSBvciAtLW5vLWluZGV4IgorbXNnc3RyICJkaWZmdG9vbCDopoHmsYLlt6XkvZzljLrmiJbogIUgLS1uby1pbmRleCIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjczOQorbXNnaWQgIi0tZGlyLWRpZmYgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1pbmRleCIKK21zZ3N0ciAiLS1kaXItZGlmZiDlkowgLS1uby1pbmRleCDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vZGlmZnRvb2wuYzo3NDIKK21zZ2lkICItLWd1aSwgLS10b29sIGFuZCAtLWV4dGNtZCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItLWd1aeOAgS0tdG9vbCDlkowgLS1leHRjbWQg5LqS5palIgorCisjOiBidWlsdGluL2RpZmZ0b29sLmM6NzUwCittc2dpZCAibm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+IgorbXNnc3RyICLmsqHmnInkuLogLS10b29sPTzlt6Xlhbc+IOWPguaVsOaPkOS+myA85bel5YW3PiIKKworIzogYnVpbHRpbi9kaWZmdG9vbC5jOjc1NworbXNnaWQgIm5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPiIKK21zZ3N0ciAi5rKh5pyJ5Li6IC0tZXh0Y21kPTzlkb3ku6Q+IOWPguaVsOaPkOS+myA85ZG95LukPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYKK21zZ2lkICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA8b3B0aW9ucz4gPGVudi12YXI+IgorbXNnc3RyICJnaXQgZW52LS1oZWxwZXIgLS10eXBlPVtib29sfHVsb25nXSA86YCJ6aG5PiA8546v5aKD5Y+Y6YePPiIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjM3IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgInR5cGUiCittc2dzdHIgIuexu+WeiyIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjQxCittc2dpZCAiZGVmYXVsdCBmb3IgZ2l0X2Vudl8qKC4uLikgdG8gZmFsbCBiYWNrIG9uIgorbXNnc3RyICJnaXRfZW52XyooLi4uKSDnmoTpu5jorqTlgLwiCisKKyM6IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MworbXNnaWQgImJlIHF1aWV0IG9ubHkgdXNlIGdpdF9lbnZfKigpIHZhbHVlIGFzIGV4aXQgY29kZSIKK21zZ3N0ciAi5a6J6Z2Z5qih5byP77yM5Y+q5L2/55SoIGdpdF9lbnZfKigpIOeahOWAvOS9nOS4uumAgOWHuueggSIKKworIzogYnVpbHRpbi9lbnYtLWhlbHBlci5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB3aXRoIGAtLXR5cGU9Ym9vbGAsIG5vdCBgJXNgIgorbXNnc3RyICLpgInpobkgYC0tZGVmYXVsdCcg5ZKMIGB0eXBlPWJvb2xgIOacn+acm+S4gOS4quW4g+WwlOWAvO+8jOS4jeaYryBgJXNgIgorCisjOiBidWlsdGluL2Vudi0taGVscGVyLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9wdGlvbiBgLS1kZWZhdWx0JyBleHBlY3RzIGFuIHVuc2lnbmVkIGxvbmcgdmFsdWUgd2l0aCBgLS10eXBlPXVsb25nYCwgbm90IGAiCisiJXNgIgorbXNnc3RyICLpgInpobkgYC0tZGVmYXVsdCcg5ZKMIGB0eXBlPXVsb25nYCDmnJ/mnJvkuIDkuKrml6DnrKblj7fplb/mlbTlnovvvIzkuI3mmK8gYCVzYCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI5Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjg1MgorbXNnaWQgIkVycm9yOiBDYW5ub3QgZXhwb3J0IG5lc3RlZCB0YWdzIHVubGVzcyAtLW1hcmstdGFncyBpcyBzcGVjaWZpZWQuIgorbXNnc3RyICLplJnor6/vvJrpmaTpnZ7mjIflrpogLS1tYXJrLXRhZ3PvvIzlkKbliJnml6Dms5Xlr7zlh7rltYzlpZfmoIfnrb7jgIIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTUyCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAi5ZyoIDxuPiDkuKrlr7nosaHkuYvlkI7mmL7npLrov5vluqYiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU0Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICLpgInmi6nlpoLkvZXlpITnkIbnrb7lkI3moIfnrb4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU3Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAi6YCJ5oup5b2T5qCH562+5oyH5ZCR6KKr6L+H5ruk5a+56LGh5pe26K+l5qCH562+55qE5aSE55CG5pa55byPIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MAorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBjb21taXQgbWVzc2FnZXMgaW4gYW4gYWx0ZXJuYXRlIGVuY29kaW5nIgorbXNnc3RyICLpgInmi6nkvb/nlKjlpIfnlKjnvJbnoIHlpITnkIbmj5DkuqTor7TmmI4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTYzCittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIuaKiuagh+iusOWtmOWCqOWIsOi/meS4quaWh+S7tiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjUKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIuS7jui/meS4quaWh+S7tuWvvOWFpeagh+iusCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjkKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUgaWYgaXQgZXhpc3RzIgorbXNnc3RyICLku47or6Xmlofku7blr7zlhaXmoIforrDvvIjlpoLmnpzlrZjlnKjnmoTor53vvIkiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTcxCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIuW9k+agh+etvue8uuWwkeagh+iusOiAheWtl+auteaXtu+8jOWBh+ijheaPkOS+m+S4gOS4qiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzMKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAi5q+P5qyh5o+Q5Lqk6YO96L6T5Ye65pW05Liq5qCRIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE3NQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICLkvb/nlKggZG9uZSDlip/og73mnaXnu4jmraLmtYEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc2Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICLot7Pov4fmlbDmja7lr7nosaHnmoTovpPlh7oiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTc3IGJ1aWx0aW4vbG9nLmM6MTcwNQorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgIuW8leeUqOinhOagvCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzgKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIuWvueWvvOWHuueahOW8leeUqOW6lOeUqOW8leeUqOinhOagvCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNzkKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICLljL/lkI3ovpPlh7oiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTgxCittc2dpZCAiUmVmZXJlbmNlIHBhcmVudHMgd2hpY2ggYXJlIG5vdCBpbiBmYXN0LWV4cG9ydCBzdHJlYW0gYnkgb2JqZWN0IGlkIgorbXNnc3RyICLlvJXnlKjniLblr7nosaEgSUQg5LiN5ZyoIGZhc3QtZXhwb3J0IOa1geS4rSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODMKK21zZ2lkICJTaG93IG9yaWdpbmFsIG9iamVjdCBpZHMgb2YgYmxvYnMvY29tbWl0cyIKK21zZ3N0ciAi5pi+56S65pWw5o2u5a+56LGhL+aPkOS6pOeahOWOn+Wni+WvueixoSBJRCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExODUKK21zZ2lkICJMYWJlbCB0YWdzIHdpdGggbWFyayBpZHMiCittc2dzdHIgIuWvueW4puacieagh+iusCBJRCDnmoTmoIfnrb7lgZrmoIforrAiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMjIwCittc2dpZCAiQ2Fubm90IHBhc3MgYm90aCAtLWltcG9ydC1tYXJrcyBhbmQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorbXNnc3RyICLkuI3og73lkIzml7bkvKDpgJLlj4LmlbAgLS1pbXBvcnQtbWFya3Mg5ZKMIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM0Cittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzzpgInpobk+XSBbPOS7k+W6kz4gWzzlvJXnlKjop4TmoLw+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzzpgInpobk+XSA857uEPiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM2Cittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs86YCJ6aG5Pl0gWyg85LuT5bqTPiB8IDznu4Q+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYKK21zZ2lkICJmZXRjaC5wYXJhbGxlbCBjYW5ub3QgYmUgbmVnYXRpdmUiCittc2dzdHIgImZldGNoLnBhcmFsbGVsIOS4jeiDveS4uui0n+aVsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEzOSBidWlsdGluL3B1bGwuYzoyMDQKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICLku47miYDmnInnmoTov5znqIvmipPlj5YiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDEgYnVpbHRpbi9wdWxsLmM6MjQ4Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9mZXRjaCIKK21zZ3N0ciAi5Li6IGdpdCBwdWxsL2ZldGNoIOiuvue9ruS4iua4uCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MyBidWlsdGluL3B1bGwuYzoyMDcKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgIui/veWKoOWIsCAuZ2l0L0ZFVENIX0hFQUQg6ICM5LiN5piv6KaG55uW5a6DIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ1IGJ1aWx0aW4vcHVsbC5jOjIxMAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAi5LiK5Lyg5YyF5Yiw6L+c56iL55qE6Lev5b6EIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ2Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIHJlZmVyZW5jZSIKK21zZ3N0ciAi5by65Yi26KaG55uW5pys5Zyw5byV55SoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQ4Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICLku47lpJrkuKrov5znqIvmipPlj5YiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTAgYnVpbHRpbi9wdWxsLmM6MjE0Cittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAi5oqT5Y+W5omA5pyJ55qE5qCH562+5ZKM5YWz6IGU5a+56LGhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTUyCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICLkuI3mipPlj5bku7vkvZXmoIfnrb4oLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NAorbXNnaWQgIm51bWJlciBvZiBzdWJtb2R1bGVzIGZldGNoZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIuWtkOaooee7hOiOt+WPlueahOW5tuWPkeaVsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NiBidWlsdGluL3B1bGwuYzoyMTcKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAi5riF6Zmk6L+c56iL5bey57uP5LiN5a2Y5Zyo55qE5YiG5pSv55qE6Lef6Liq5YiG5pSvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4Cittc2dpZCAicHJ1bmUgbG9jYWwgdGFncyBubyBsb25nZXIgb24gcmVtb3RlIGFuZCBjbG9iYmVyIGNoYW5nZWQgdGFncyIKK21zZ3N0ciAi5riF6Zmk6L+c56iL5LiN5a2Y5Zyo55qE5pys5Zyw5qCH562+77yM5bm25LiU5pu/5o2i5Y+Y5pu05qCH562+IgorCisjICDor5HogIXvvJrlj6/pgInlgLzvvIzkuI3og73nv7vor5EKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTkgYnVpbHRpbi9mZXRjaC5jOjE4MiBidWlsdGluL3B1bGwuYzoxNDEKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgIm9uLWRlbWFuZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2MAorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIuaOp+WItuWtkOaooee7hOeahOmAkuW9kuaKk+WPliIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2NCBidWlsdGluL3B1bGwuYzoyMjUKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAi5L+d5oyB5LiL6L295YyFIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY2Cittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgIuWFgeiuuOabtOaWsCBIRUFEIOW8leeUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE2OSBidWlsdGluL2ZldGNoLmM6MTc1IGJ1aWx0aW4vcHVsbC5jOjIyOAorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgIua3seWMlua1heWFi+mahueahOWOhuWPsiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MQorbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aW1lIgorbXNnc3RyICLln7rkuo7ml7bpl7TmnaXmt7HljJbmtYXlhYvpmobnmoTljoblj7IiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcgYnVpbHRpbi9wdWxsLmM6MjMxCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgIui9rOaNouS4uuS4gOS4quWujOaVtOeahOS7k+W6kyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgIuWcqOWtkOaooee7hOi3r+W+hOi+k+WHuueahOWJjemdouWKoOS4iuatpOebruW9lSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MworbXNnaWQgIiIKKyJkZWZhdWx0IGZvciByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyAobG93ZXIgcHJpb3JpdHkgdGhhbiBjb25maWcgIgorImZpbGVzKSIKK21zZ3N0ciAi6YCS5b2S6I635Y+W5a2Q5qih57uE55qE57y655yB5YC877yI5q+U6YWN572u5paH5Lu25LyY5YWI57qn5L2O77yJIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTg3IGJ1aWx0aW4vcHVsbC5jOjIzNAorbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAi5o6l5Y+X5pu05pawIC5naXQvc2hhbGxvdyDnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODggYnVpbHRpbi9wdWxsLmM6MjM2Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICLlvJXnlKjmmKDlsIQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODkgYnVpbHRpbi9wdWxsLmM6MjM3Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgIuaMh+WumuiOt+WPluaTjeS9nOeahOW8leeUqOaYoOWwhCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5NgorbXNnaWQgInJlcG9ydCB0aGF0IHdlIGhhdmUgb25seSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoaXMgb2JqZWN0IgorbXNnc3RyICLmiqXlkYrmiJHku6zlj6rmi6XmnInku47or6Xlr7nosaHlvIDlp4vlj6/ovr7nmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOTkKK21zZ2lkICJydW4gJ2djIC0tYXV0bycgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIuiOt+WPluWQjuaJp+ihjCAnZ2MgLS1hdXRvJyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMSBidWlsdGluL3B1bGwuYzoyNDYKK21zZ2lkICJjaGVjayBmb3IgZm9yY2VkLXVwZGF0ZXMgb24gYWxsIHVwZGF0ZWQgYnJhbmNoZXMiCittc2dzdHIgIuWcqOaJgOacieabtOaWsOWIhuaUr+S4iuajgOafpeW8uuWItuabtOaWsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwMworbXNnaWQgIndyaXRlIHRoZSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIuaKk+WPluWQjuWGmeaPkOS6pOWbviIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMworbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICLml6Dms5Xlj5HnjrDov5znqIsgSEVBRCDlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29uZmlndXJhdGlvbiBmZXRjaC5vdXRwdXQgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAlcyIKK21zZ3N0ciAi6YWN572u5Y+Y6YePIGZldGNoLm91dHB1dCDljIXlkKvml6DmlYjlgLwgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAi5a+56LGhICVzIOacquWPkeeOsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc1NQorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW+acgOaWsF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjggYnVpbHRpbi9mZXRjaC5jOjc4NCBidWlsdGluL2ZldGNoLmM6ODU2Cittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW+W3suaLkue7nV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NjkKK21zZ2lkICJjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi5b2T5YmN5YiG5pSv5LiL5LiN6IO95omn6KGM6I635Y+W5pON5L2cIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJb5qCH562+5pu05pawXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4MCBidWlsdGluL2ZldGNoLmM6ODE3IGJ1aWx0aW4vZmV0Y2guYzo4MzkKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAi5LiN6IO95pu05paw5pys5Zyw5byV55SoIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg0Cittc2dpZCAid291bGQgY2xvYmJlciBleGlzdGluZyB0YWciCittc2dzdHIgIuS8muegtOWdj+eOsOacieeahOagh+etviIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgwNgorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW+aWsOagh+etvl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDkKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIlvmlrDliIbmlK9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODEyCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJb5paw5byV55SoXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgIuW8uuWItuabtOaWsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg1NgorbXNnaWQgIm5vbi1mYXN0LWZvcndhcmQiCittc2dzdHIgIumdnuW/q+i/myIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg3NworbXNnaWQgIiIKKyJGZXRjaCBub3JtYWxseSBpbmRpY2F0ZXMgd2hpY2ggYnJhbmNoZXMgaGFkIGEgZm9yY2VkIHVwZGF0ZSxcbiIKKyJidXQgdGhhdCBjaGVjayBoYXMgYmVlbiBkaXNhYmxlZC4gVG8gcmUtZW5hYmxlLCB1c2UgJy0tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyJmbGFnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyB0cnVlJy4iCittc2dzdHIgIiIKKyLojrflj5bmk43kvZzpgJrluLjmmL7npLrlk6rkupvliIbmlK/lj5HnlJ/kuoblvLrliLbmm7TmlrDvvIzkvYbor6Xmo4Dmn6Xlt7LooqvnpoHnlKjjgIJcbiIKKyLopoHph43mlrDlkK/nlKjvvIzor7fkvb/nlKggJy0tc2hvdy1mb3JjZWQtdXBkYXRlcycg6YCJ6aG55oiW6L+Q6KGMXG4iCisiJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgdHJ1ZSfjgIIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNoZWNrIGZvcmNlZCB1cGRhdGVzLiBZb3UgY2FuIHVzZVxuIgorIictLW5vLXNob3ctZm9yY2VkLXVwZGF0ZXMnIG9yIHJ1biAnZ2l0IGNvbmZpZyBmZXRjaC5zaG93Rm9yY2VkVXBkYXRlcyAiCisiZmFsc2UnXG4iCisiIHRvIGF2b2lkIHRoaXMgY2hlY2suXG4iCittc2dzdHIgIiIKKyLoirHkuoYgJS4yZiDnp5LmnaXmo4Dmn6XlvLrliLbmm7TmlrDjgILmgqjlj6/ku6Xkvb/nlKggJy0tbm8tc2hvdy1mb3JjZWQtdXBkYXRlcydcbiIKKyLmiJbov5DooYwgJ2dpdCBjb25maWcgZmV0Y2guc2hvd0ZvcmNlZFVwZGF0ZXMgZmFsc2UnIOS7pemBv+WFjeatpOmhueajgOafpeOAglxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiJXMg5pyq5Y+R6YCB5omA5pyJ5b+F6ZyA55qE5a+56LGhXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAi5ouS57udICVzIOWboOS4uua1heWFi+mahuS4jeWFgeiuuOiiq+abtOaWsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMTcgYnVpbHRpbi9mZXRjaC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIuadpeiHqiAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyLkuIDkupvmnKzlnLDlvJXnlKjkuI3og73ooqvmm7TmlrDvvJvlsJ3or5Xov5DooYxcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIOadpeWIoOmZpOaXp+eahOOAgeacieWGsueqgeeahOWIhuaUryIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBidWlsdGluL2ZldGNoLmM6MTEyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICDvvIglcyDlsIbmiJDkuLrmgqznqbrnirbmgIHvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogYnVpbHRpbi9mZXRjaC5jOjExMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICDvvIglcyDlt7LmiJDkuLrmgqznqbrnirbmgIHvvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJb5bey5Yig6ZmkXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTkgYnVpbHRpbi9yZW1vdGUuYzoxMDM1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICLvvIjml6DvvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5ouS57ud6I635Y+W5Yiw6Z2e57qv5LuT5bqT55qE5b2T5YmN5YiG5pSvICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICLpgInpobkgXCIlc1wiIOeahOWAvCBcIiVzXCIg5a+55LqOICVzIOaYr+aXoOaViOeahCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICLpgInpobkgXCIlc1wiIOS4uiAlcyDmiYDlv73nlaVcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MTIKK21zZ2lkICJtdWx0aXBsZSBicmFuY2hlcyBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dzdHIgIuajgOa1i+WIsOWkmuWIhuaUr++8jOWSjCAtLXNldC11cHN0cmVhbSDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI3Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIuayoeacieS4uuS4gOS4qui/nOeoi+i3n+i4quWIhuaUr+iuvue9ruS4iua4uCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MjkKK21zZ2lkICJub3Qgc2V0dGluZyB1cHN0cmVhbSBmb3IgYSByZW1vdGUgdGFnIgorbXNnc3RyICLmsqHmnInkuLrkuIDkuKrov5znqIvmoIfnrb7orr7nva7kuIrmuLgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDMxCittc2dpZCAidW5rbm93biBicmFuY2ggdHlwZSIKK21zZ3N0ciAi5pyq55+l55qE5YiG5pSv57G75Z6LIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzMworbXNnaWQgIiIKKyJubyBzb3VyY2UgYnJhbmNoIGZvdW5kLlxuIgorInlvdSBuZWVkIHRvIHNwZWNpZnkgZXhhY3RseSBvbmUgYnJhbmNoIHdpdGggdGhlIC0tc2V0LXVwc3RyZWFtIG9wdGlvbi4iCittc2dzdHIgIiIKKyLmnKrlj5HnjrDmupDliIbmlK/jgIJcbiIKKyLmgqjpnIDopoHkvb/nlKggLS1zZXQtdXBzdHJlYW0g6YCJ6aG55oyH5a6a5LiA5Liq5YiG5pSv44CCIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU1OSBidWlsdGluL2ZldGNoLmM6MTYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICLmraPlnKjojrflj5YgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NjkgYnVpbHRpbi9mZXRjaC5jOjE2MjQgYnVpbHRpbi9yZW1vdGUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICLkuI3og73ojrflj5YgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBmZXRjaCAnJXMnIChleGl0IGNvZGU6ICVkKVxuIgorbXNnc3RyICLml6Dms5Xojrflj5YgJyVzJ++8iOmAgOWHuuegge+8miVk77yJXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjg0Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIuacquaMh+Wumui/nOeoi+S7k+W6k+OAguivt+mAmui/h+S4gOS4qiBVUkwg5oiW6L+c56iL5LuT5bqT5ZCN5oyH5a6a77yM55So5Lul6I635Y+W5paw5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcyMQorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIuaCqOmcgOimgeaMh+WumuS4gOS4quagh+etvuWQjeensOOAgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzEKK21zZ2lkICJOZWdhdGl2ZSBkZXB0aCBpbiAtLWRlZXBlbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICItLWRlZXBlbiDkuI3mlK/mjIHotJ/mlbDmt7HluqYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzczCittc2dpZCAiLS1kZWVwZW4gYW5kIC0tZGVwdGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLS1kZWVwZW4g5ZKMIC0tZGVwdGgg5piv5LqS5pal55qEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3OAorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICItLWRlcHRoIOWSjCAtLXVuc2hhbGxvdyDkuI3og73lkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzgwCittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuWvueS6juS4gOS4quWujOaVtOeahOS7k+W6k++8jOWPguaVsCAtLXVuc2hhbGxvdyDmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzk2Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIOS4jeiDveW4puS4gOS4quS7k+W6k+WPguaVsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3OTgKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIOW4puW8leeUqOinhOagvOayoeacieS7u+S9leaEj+S5iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAi5rKh5pyJ6L+Z5qC355qE6L+c56iL5oiW6L+c56iL57uE77yaJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODE0Cittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLojrflj5bnu4TlubbmjIflrprlvJXnlKjop4TmoLzmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODMyCittc2dpZCAiIgorIi0tZmlsdGVyIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcmVtb3RlIGNvbmZpZ3VyZWQgaW4gZXh0ZW5zaW9ucy4iCisicGFydGlhbGNsb25lIgorbXNnc3RyICLlj6rlj6/ku6XlsIYgLS1maWx0ZXIg55So5LqO5ZyoIGV4dGVuc2lvbnMucGFydGlhbENsb25lIOS4remFjee9rueahOi/nOeoi+S7k+W6kyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTgKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDzor7TmmI4+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA85paH5Lu2Pl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NAorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAi5ZCR5o+Q5Lqk6K+05piO5Lit5pyA5aSa5aSN5Yi25oyH5a6a5p2h55uu77yI5ZCI5bm26ICM5p2l55qE5o+Q5Lqk77yJ55qE566A55+t6K+05piOIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICLlj4LmlbAgLS1sb2cg55qE5Yir5ZCN77yI5bey5byD55So77yJIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODAKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICLmlofmnKwiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MQorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAi5L2/55SoIDzmlofmnKw+IOS9nOS4uuaPkOS6pOivtOaYjueahOW8gOWniyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgyCittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgIuS7juaWh+S7tuS4reivu+WPliIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMAorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzzpgInpobk+XSBbPOaooeW8jz5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTIKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPOaPkOS6pD5dXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMworbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxjb21taXQ+XV0gWy0tbm8tY29udGFpbnMgWzxjb21taXQ+XV0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzzmj5DkuqQ+XV0gWy0tbm8tY29udGFpbnMgWzzmj5DkuqQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAi5byV55So5Y2g5L2N56ym6YCC55So5LqOIHNoZWxscyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAi5byV55So5Y2g5L2N56ym6YCC55So5LqOIHBlcmwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzIKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAi5byV55So5Y2g5L2N56ym6YCC55So5LqOIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICLlvJXnlKjljaDkvY3nrKbpgILnlKjkuo4gVGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM3Cittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIuWPquaYvuekuiA8bj4g5Liq5Yy56YWN55qE5byV55SoIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM5IGJ1aWx0aW4vdGFnLmM6NDM5Cittc2dpZCAicmVzcGVjdCBmb3JtYXQgY29sb3JzIgorbXNnc3RyICLpgbXnhafmoLzlvI/kuK3nmoTpopzoibLovpPlh7oiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDIKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggcG9pbnRzIGF0IHRoZSBnaXZlbiBvYmplY3QiCittc2dzdHIgIuWPquaJk+WNsOaMh+WQkee7meWumuWvueixoeeahOW8leeUqCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NAorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiCittc2dzdHIgIuWPquaJk+WNsOW3sue7j+WQiOW5tueahOW8leeUqCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo0NQorbXNnaWQgInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBub3QgbWVyZ2VkIgorbXNnc3RyICLlj6rmiZPljbDmsqHmnInlkIjlubbnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDYKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLlj6rmiZPljbDljIXlkKvor6Xmj5DkuqTnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDcKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgd2hpY2ggZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLlj6rmiZPljbDkuI3ljIXlkKvor6Xmj5DkuqTnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY4IGJ1aWx0aW4vZnNjay5jOjE0NyBidWlsdGluL2ZzY2suYzoxNDgKK21zZ2lkICJ1bmtub3duIgorbXNnc3RyICLmnKrnn6UiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4KKyM6IGJ1aWx0aW4vZnNjay5jOjEwMCBidWlsdGluL2ZzY2suYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgaW4gJXMgJXM6ICVzIgorbXNnc3RyICIlcyAlcyDplJnor6/vvJolcyIKKworIy4gVFJBTlNMQVRPUlM6IGUuZy4gd2FybmluZyBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZyBpbiAlcyAlczogJXMiCittc2dzdHIgIiVzICVzIOitpuWRiu+8miVzIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDMgYnVpbHRpbi9mc2NrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIgorbXNnc3RyICLmnaXoh6ogJTdzICVzIOeahOaNn+Wdj+eahOmTvuaOpSIKKworIzogYnVpbHRpbi9mc2NrLmM6MTU1Cittc2dpZCAid3Jvbmcgb2JqZWN0IHR5cGUgaW4gbGluayIKK21zZ3N0ciAi6ZO+5o6l5Lit6ZSZ6K+v55qE5a+56LGh57G75Z6LIgorCisjOiBidWlsdGluL2ZzY2suYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iCisiICAgICAgICAgICAgICB0byAlN3MgJXMiCittc2dzdHIgIiIKKyLmjZ/lnY/nmoTpk77mjqXmnaXoh6rkuo4gJTdzICVzXG4iCisiICAgICAgICAgICAgICDliLAgJTdzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyAlcyAlcyIKK21zZ3N0ciAi57y65aSxICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWFjaGFibGUgJXMgJXMiCittc2dzdHIgIuS4jeWPr+i+viAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgImRhbmdsaW5nICVzICVzIgorbXNnc3RyICLmgqznqbogJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMzOQorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIKK21zZ3N0ciAi5LiN6IO95Yib5bu6IGxvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoICclcyciCittc2dzdHIgIuS4jeiDveWujOaIkCAnJXMnIgorCisjOiBidWlsdGluL2ZzY2suYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgJXMiCittc2dzdHIgIuato+WcqOajgOafpSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSAoJWQgb2JqZWN0cykiCittc2dzdHIgIuato+WcqOajgOafpei/numAmuaAp++8iCVkIOS4quWvueixoe+8iSIKKworIzogYnVpbHRpbi9mc2NrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzICVzIgorbXNnc3RyICLmraPlnKjmo4Dmn6UgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyOQorbXNnaWQgImJyb2tlbiBsaW5rcyIKK21zZ3N0ciAi5o2f5Z2P55qE6ZO+5o6lIgorCisjOiBidWlsdGluL2ZzY2suYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicm9vdCAlcyIKK21zZ3N0ciAi5qC5ICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnZ2VkICVzICVzICglcykgaW4gJXMiCittc2dzdHIgIuagh+iusCAlcyAlcyAoJXMpIOS6jiAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIgorbXNnc3RyICIlc++8muWvueixoeaNn+Wdj+aIluS4ouWksSIKKworIzogYnVpbHRpbi9mc2NrLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHJlZmxvZyBlbnRyeSAlcyIKK21zZ3N0ciAiJXPvvJrml6DmlYjnmoTlvJXnlKjml6Xlv5fmnaHnm64gJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZWZsb2cgJXMtPiVzIgorbXNnc3RyICLmraPlnKjmo4Dmn6XlvJXnlKjml6Xlv5cgJXMtPiVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIgorbXNnc3RyICIlc++8muaXoOaViOeahCBzaGExIOaMh+mSiCAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBub3QgYSBjb21taXQiCittc2dzdHIgIiVz77ya5LiN5piv5LiA5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL2ZzY2suYzo2MDkKK21zZ2lkICJub3RpY2U6IE5vIGRlZmF1bHQgcmVmZXJlbmNlcyIKK21zZ3N0ciAi5rOo5oSP77ya5peg6buY6K6k5byV55SoIgorCisjOiBidWlsdGluL2ZzY2suYzo2MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3Npbmc6ICVzIgorbXNnc3RyICIlc++8muWvueixoeaNn+Wdj+aIluS4ouWkse+8miVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBjb3VsZCBub3QgYmUgcGFyc2VkOiAlcyIKK21zZ3N0ciAiJXPvvJrkuI3og73op6PmnpDlr7nosaHvvJolcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaGExIGZpbGU6ICVzIgorbXNnc3RyICLlnY/nmoQgc2hhMSDmlofku7bvvJolcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjcyCittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yeSIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l5a+56LGh55uu5b2VIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzUKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIuato+WcqOajgOafpeWvueixoeebruW9lSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIGxpbmsiCittc2dzdHIgIuato+WcqOajgOafpSAlcyDpk77mjqUiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5NSBidWlsdGluL2luZGV4LXBhY2suYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAi5peg5pWI55qEICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiCittc2dzdHIgIiVzIOaMh+WQkeWlh+aAqueahOS4nOilv++8iCVz77yJIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRldGFjaGVkIEhFQUQgcG9pbnRzIGF0IG5vdGhpbmciCittc2dzdHIgIiVz77ya5YiG56a75aS05oyH6ZKI55qE5oyH5ZCR5LiN5a2Y5ZyoIgorCisjOiBidWlsdGluL2ZzY2suYzo3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aWNlOiAlcyBwb2ludHMgdG8gYW4gdW5ib3JuIGJyYW5jaCAoJXMpIgorbXNnc3RyICLms6jmhI/vvJolcyDmjIflkJHkuIDkuKrlsJrmnKror57nlJ/nmoTliIbmlK/vvIglc++8iSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI0Cittc2dpZCAiQ2hlY2tpbmcgY2FjaGUgdHJlZSIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l57yT5a2Y5qCRIgorCisjOiBidWlsdGluL2ZzY2suYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyIGluIGNhY2hlLXRyZWUiCittc2dzdHIgIiVz77yaY2FjaGUtdHJlZSDkuK3ml6DmlYjnmoQgc2hhMSDmjIfpkogiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjczOAorbXNnaWQgIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiCittc2dzdHIgImNhY2hlLXRyZWUg5Lit6Z2e5qCR5a+56LGhIgorCisjOiBidWlsdGluL2ZzY2suYzo3NjkKK21zZ2lkICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbPOmAiemhuT5dIFs85a+56LGhPi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NQorbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi5pi+56S65LiN5Y+v6L6+55qE5a+56LGhIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzYKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgIuaYvuekuuaCrOepuueahOWvueixoSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc3Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgIuaKpeWRiuagh+etviIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc4Cittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgIuaKpeWRiuagueiKgueCuSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc5Cittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgIuWwhue0ouW8leS6puS9nOS4uuajgOafpeeahOWktOiKgueCuSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzgwCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICLlsIblvJXnlKjml6Xlv5fkvZzkuLrmo4Dmn6XnmoTlpLToioLngrnvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MQorbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICLkuZ/ogIPomZHljIXlkozlpIfnlKjlr7nosaEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MgorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICLku4Xmo4Dmn6Xov57pgJrmgKciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MworbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAi5ZCv55So5pu05Lil5qC855qE5qOA5p+lIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODUKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAi5bCG5oKs56m65a+56LGh5YaZ5YWlIC5naXQvbG9zdC1mb3VuZCDkuK0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4NiBidWlsdGluL3BydW5lLmM6MTMyCittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAi5pi+56S66L+b5bqmIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODcKK21zZ2lkICJzaG93IHZlcmJvc2UgbmFtZXMgZm9yIHJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLmmL7npLrlj6/ovr7lr7nosaHnmoTor6bnu4blkI3np7AiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg0NiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICLmraPlnKjmo4Dmn6Xlr7nosaEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IG1pc3NpbmciCittc2dzdHIgIiVz77ya5a+56LGh57y65aSxIgorCisjOiBidWlsdGluL2ZzY2suYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTlj4LmlbDvvJrmnJ/mnJsgc2hhMe+8jOW+l+WIsCAnJXMnIgorCisjOiBidWlsdGluL2djLmM6MzUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL2djLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZzdGF0ICVzOiAlcyIKK21zZ3N0ciAi5a+5ICVzIOiwg+eUqCBmc3RhdCDlpLHotKXvvJolcyIKKworIzogYnVpbHRpbi9nYy5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgJyVzJyB2YWx1ZSAnJXMnIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJyVzJyDlgLwgJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjQ3NSBidWlsdGluL2luaXQtZGIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLkuI3og73lr7kgJyVzJyDosIPnlKggc3RhdCIKKworIzogYnVpbHRpbi9nYy5jOjQ4NCBidWlsdGluL25vdGVzLmM6MjQwIGJ1aWx0aW4vdGFnLmM6NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgIuS4jeiDveivu+WPliAnJXMnIgorCisjOiBidWlsdGluL2djLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgbGFzdCBnYyBydW4gcmVwb3J0ZWQgdGhlIGZvbGxvd2luZy4gUGxlYXNlIGNvcnJlY3QgdGhlIHJvb3QgY2F1c2VcbiIKKyJhbmQgcmVtb3ZlICVzLlxuIgorIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCB1bnRpbCB0aGUgZmlsZSBpcyByZW1vdmVkLlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisi5pyA5ZCO5LiA5qyhIGdjIOaTjeS9nOaKpeWRiuWmguS4i+S/oeaBr+OAguivt+ajgOafpeWOn+WboOW5tuWIoOmZpCAlc+OAglxuIgorIuWcqOivpeaWh+S7tuiiq+WIoOmZpOS5i+WJje+8jOiHquWKqOa4heeQhuWwhuS4jeS8muaJp+ihjOOAglxuIgorIlxuIgorIiVzIgorCisjOiBidWlsdGluL2djLmM6NTM5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgIua4hemZpOacquW8leeUqOeahOWvueixoSIKKworIzogYnVpbHRpbi9nYy5jOjU0MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAi5pu05b275bqV77yI5aKe5Yqg6L+Q6KGM5pe26Ze077yJIgorCisjOiBidWlsdGluL2djLmM6NTQyCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAi5ZCv55So6Ieq5Yqo5Z6D5Zy+5Zue5pS25qih5byPIgorCisjOiBidWlsdGluL2djLmM6NTQ1Cittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgIuW8uuWItuaJp+ihjCBnYyDljbPkvb/lj6blpJbkuIDkuKogZ2Mg5q2j5Zyo5omn6KGMIgorCisjOiBidWlsdGluL2djLmM6NTQ4Cittc2dpZCAicmVwYWNrIGFsbCBvdGhlciBwYWNrcyBleGNlcHQgdGhlIGxhcmdlc3QgcGFjayIKK21zZ3N0ciAi6Zmk5LqG5pyA5aSn55qE5YyF5LmL5aSW77yM5a+55omA5pyJ5YW25a6D5YyF5paH5Lu26YeN5paw5omT5YyFIgorCisjOiBidWlsdGluL2djLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBnYy5sb2dleHBpcnkgdmFsdWUgJXMiCittc2dzdHIgIuino+aekCBnYy5sb2dleHBpcnkg55qE5YC8ICVzIOWksei0pSIKKworIzogYnVpbHRpbi9nYy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgcHJ1bmUgZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICLop6PmnpDmuIXpmaTmnJ/pmZDlgLwgJXMg5aSx6LSlIgorCisjOiBidWlsdGluL2djLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICLoh6rliqjlnKjlkI7lj7DmiafooYzku5PlupPmiZPljIXku6XmsYLmnIDkvbPmgKfog73jgIJcbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIuiHquWKqOaJk+WMheS7k+W6k+S7peaxguacgOS9s+aAp+iDveOAglxuIgorCisjOiBidWlsdGluL2djLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIuaJi+W3pee7tOaKpOWPguingSBcImdpdCBoZWxwIGdjXCLjgIJcbiIKKworIzogYnVpbHRpbi9nYy5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2MgaXMgYWxyZWFkeSBydW5uaW5nIG9uIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2UgaWYgbm90KSIKK21zZ3N0ciAiIgorIuW3sue7j+acieS4gOS4qiBnYyDmraPov5DooYzlnKjmnLrlmaggJyVzJyBwaWQgJTxQUkl1TUFYPu+8iOWmguaenOS4jeaYr++8jOS9v+eUqCAtLWZvcmNl77yJIgorCisjOiBidWlsdGluL2djLmM6Njk0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICLmnInlpKrlpJrkuI3lj6/ovr7nmoTmnb7mlaPlr7nosaHvvIzov5DooYwgJ2dpdCBwcnVuZScg5Yig6Zmk5a6D5Lus44CCIgorCisjOiBidWlsdGluL2dyZXAuYzoyOQorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzzpgInpobk+XSBbLWVdIDzmqKHlvI8+IFs854mI5pysPi4uLl0gW1stLV0gPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVw77ya5peg5rOV5Yib5bu657q/56iL77yaJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIKK21zZ3N0ciAi5Li6ICUyJHMg6K6+5a6a55qE57q/56iL5pWwICglMSRkKSDml6DmlYgiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorIy4gdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorIy4gZ3JlcC50aHJlYWRzCisjLgorIzogYnVpbHRpbi9ncmVwLmM6Mjg3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzQgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyNworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgIuayoeaciee6v+eoi+aUr+aMge+8jOW/veeVpSAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDY3IGJ1aWx0aW4vZ3JlcC5jOjU5MiBidWlsdGluL2dyZXAuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICLml6Dms5Xor7vlj5bmoJHvvIglc++8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIuaXoOazleaKk+WPluadpeiHquS6jiAlcyDnsbvlnovnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLlvIDlhbMgYCVjJyDmnJ/mnJvkuIDkuKrmlbDlrZflgLwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIuWcqOe0ouW8leWMuuaQnOe0ouiAjOS4jeaYr+WcqOW3peS9nOWMuiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE3Cittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgIuWcqOacquiiqyBnaXQg566h55CG55qE5YaF5a655Lit5p+l5om+IgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOQorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5Zyo6Lef6Liq5ZKM5pyq6Lef6Liq55qE5paH5Lu25Lit5pCc57SiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjEKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgIuW/veeVpSAnLmdpdGlnbm9yZScg5YyF5ZCr55qE5paH5Lu2IgorCisjOiBidWlsdGluL2dyZXAuYzo4MjMKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgIuWcqOavj+S4gOS4quWtkOaooee7hOS4remAkuW9kuaQnOe0oiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIuaYvuekuuacquWMuemFjeeahOihjCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI4Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAi5LiN5Yy65YiG5aSn5bCP5YaZ5Yy56YWNIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAi5Y+q5Zyo5Y2V6K+N6L6555WM5Yy56YWN5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzIKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLmiorkuozov5vliLbmlofku7blvZPlgZrmlofmnKzlpITnkIYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNAorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAi5LiN5Zyo5LqM6L+b5Yi25paH5Lu25Lit5Yy56YWN5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzcKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgIueUqCB0ZXh0Y29udiDov4fmu6TlmajlpITnkIbkuozov5vliLbmlofku7YiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzOQorbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgIuWcqOWtkOebruW9leS4reWvu+aJvu+8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQxCittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICLmnIDlpJrku6XmjIflrprnmoTmt7HluqblkJHkuIvlr7vmib4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICLkvb/nlKjmianlsZXnmoQgUE9TSVgg5q2j5YiZ6KGo6L6+5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiCittc2dzdHIgIuS9v+eUqOWfuuacrOeahCBQT1NJWCDmraPliJnooajovr7lvI/vvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICLmiormqKHlvI/op6PmnpDkuLrlm7rlrprnmoTlrZfnrKbkuLIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi5L2/55SoIFBlcmwg5YW85a6555qE5q2j5YiZ6KGo6L6+5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAi5pi+56S66KGM5Y+3IgorCisjOiBidWlsdGluL2dyZXAuYzo4NTgKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgIuaYvuekuuesrOS4gOS4quWMuemFjeeahOWIl+WPtyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIuS4jeaYvuekuuaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYwCittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIuaYvuekuuaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAi5pi+56S655u45a+55LqO6aG257qn55uu5b2V55qE5paH5Lu25ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjQKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIuWPquaYvuekuuaWh+S7tuWQjeiAjOS4jeaYvuekuuWMuemFjeeahOihjCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIuWSjCAtLWZpbGVzLXdpdGgtbWF0Y2hlcyDlkIzkuYkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2OQorbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAi5Y+q5pi+56S65pyq5Yy56YWN55qE5paH5Lu25ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICLlnKjmlofku7blkI3lkI7ovpPlh7ogTlVMIOWtl+espiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAi5Y+q5pi+56S66KGM5Lit55qE5Yy56YWN55qE6YOo5YiGIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzYKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLmmL7npLrmgLvljLnphY3ooYzmlbDvvIzogIzkuI3mmL7npLrljLnphY3nmoTooYwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICLpq5jkuq7mmL7npLrljLnphY3pobkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICLlnKjkuI3lkIzmlofku7bnmoTljLnphY3pobnkuYvpl7TmiZPljbDnqbrooYwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MQorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIuWPquWcqOWQjOS4gOaWh+S7tueahOWMuemFjemhueeahOS4iumdouaYvuekuuS4gOasoeaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIuaYvuekuuWMuemFjemhueWJjeWQjueahCA8bj4g6KGM5LiK5LiL5paHIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLmmL7npLrljLnphY3pobnliY0gPG4+IOihjOS4iuS4i+aWhyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg5Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLmmL7npLrljLnphY3pobnlkI4gPG4+IOihjOS4iuS4i+aWhyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkxCittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAi5L2/55SoIDxuPiDkuKrlt6XkvZznur/nqIsiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgIuW/q+aNt+mUriAtQyDmlbDlrZciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NQorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIuWcqOWMuemFjeeahOWJjemdouaYvuekuuS4gOihjOWHveaVsOWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgIuaYvuekuuaJgOWcqOWHveaVsOeahOWJjeWQjuWGheWuuSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAwCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgIuS7juaWh+S7tuivu+WPluaooeW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAyCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLljLnphY0gPOaooeW8jz4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgIue7hOWQiOeUqCAtZSDlj4LmlbDorr7lrprnmoTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLkuI3ovpPlh7rvvIzogIznlKjpgIDlh7rnoIHmoIfor4blkb3kuK3nirbmgIEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIuWPquaYvuekuuWMuemFjeaJgOacieaooeW8j+eahOaWh+S7tuS4reeahOWMuemFjSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgIuaYvuekuiBncmVwIOihqOi+vuW8j+eahOino+aekOagkSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAicGFnZXIiCittc2dzdHIgIuWIhumhtSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIuWIhumhteaYvuekuuWMuemFjeeahOaWh+S7tiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI4Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICLlhYHorrjosIPnlKggZ3JlcCgxKe+8iOacrOasoeaehOW7uuW/veeVpe+8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTkyCittc2dpZCAibm8gcGF0dGVybiBnaXZlbiIKK21zZ3N0ciAi5pyq5o+Q5L6b5Yy56YWN5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI4Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIi0tbm8taW5kZXgg5oiWIC0tdW50cmFja2VkIOS4jeiDveWSjOeJiOacrOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgIuS4jeiDveino+aekOeJiOacrO+8miVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3Cittc2dpZCAiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAi5peg5pWI55qE6YCJ6aG557uE5ZCI77yM5b+955WlIC0tdGhyZWFkcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDAKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAi5rKh5pyJ57q/56iL5pSv5oyB77yM5b+955WlIC0tdGhyZWFkcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3MyBidWlsdGluL2luZGV4LXBhY2suYzoxNTMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICLmjIflrprnmoTnur/nqIvmlbDml6DmlYjvvIglZO+8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA5NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIOS7heeUqOS6juW3peS9nOWMuiIKKworIzogYnVpbHRpbi9ncmVwLmM6MTExOQorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgIumAiemhueS4jeaUr+aMgeWSjCAtLXJlY3Vyc2Utc3VibW9kdWxlcyDlhbHnlKgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjUKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tY2FjaGVkIOaIliAtLXVudHJhY2tlZCDkuI3og73kuI4gLS1uby1pbmRleCDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzEKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQg5LiN6IO955So5LqO5bey6Lef6Liq5YaF5a65IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTM5Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICLlkIzml7bnu5nlh7rkuoYgLS1jYWNoZWQg5ZKM5qCR5a+56LGhIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDznsbvlnos+XSBbLXddIFstLXBhdGg9POaWh+S7tj4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA85paH5Lu2Pi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjg2Cittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICLlr7nosaHnsbvlnosiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLlsIblr7nosaHlhpnlhaXlr7nosaHmlbDmja7lupMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDEKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+W5a+56LGhIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTAzCittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgIuWOn+agt+WtmOWCqOaWh+S7tuS4jeS9v+eUqOi/h+a7pOWZqCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjEwNAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIuWFgeiuuOWvueS7u+aEj+maj+acuuWeg+WcvuaVsOaNruWBmuaVo+WIl+adpeWIm+W7uuaNn+Wdj+eahOWvueixoeS7peS+v+iwg+ivlSBHaXQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDUKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAi5aSE55CG5paH5Lu25bm25YGH6K6+5YW25p2l6Ieq5LqO5q2k6Lev5b6EIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgIuaJk+WNsOaJgOacieWPr+eUqOeahOWRveS7pCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDcKK21zZ2lkICJleGNsdWRlIGd1aWRlcyIKK21zZ3N0ciAi5o6S6Zmk5ZCR5a+8IgorCisjOiBidWlsdGluL2hlbHAuYzo0OAorbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAi5pi+56S65pyJ55So55qE5oyH5Y2X5YiX6KGoIgorCisjOiBidWlsdGluL2hlbHAuYzo0OQorbXNnaWQgInByaW50IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIgorbXNnc3RyICLmiZPljbDmiYDmnInphY3nva7lj5jph4/lkI3np7AiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUxCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAi5pi+56S6IG1hbiDmiYvlhowiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgIuWcqCB3ZWIg5rWP6KeI5Zmo5Lit5pi+56S65omL5YaMIgorCisjOiBidWlsdGluL2hlbHAuYzo1NAorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICLmmL7npLogaW5mbyDmiYvlhowiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU2Cittc2dpZCAicHJpbnQgY29tbWFuZCBkZXNjcmlwdGlvbiIKK21zZ3N0ciAi5omT5Y2w5ZG95Luk5o+P6L+wIgorCisjOiBidWlsdGluL2hlbHAuYzo2MQorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzzlkb3ku6Q+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgIuacquiDveivhuWIq+eahOW4ruWKqeagvOW8jyAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICLml6Dms5XlkK/liqggZW1hY3NjbGllbnTjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExNworbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAi5peg5rOV6Kej5p6QIGVtYWNzY2xpZW50IOeJiOacrOOAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgImVtYWNzY2xpZW50IOeJiOacrCAnJWQnIOWkquiAge+8iDwgMjLvvInjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjE0MyBidWlsdGluL2hlbHAuYzoxNjUgYnVpbHRpbi9oZWxwLmM6MTc1IGJ1aWx0aW4vaGVscC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnIgorbXNnc3RyICLmiafooYwgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyfvvJrkuI3mlK/mjIHnmoQgbWFuIOaJi+WGjOafpeeci+WZqOeahOi3r+W+hOOAglxuIgorIuivt+S9v+eUqCAnbWFuLjzlt6Xlhbc+LmNtZCfjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiDmlK/mjIHnmoQgbWFuIOaJi+WGjOafpeeci+WZqOWRveS7pOOAglxuIgorIuivt+S9v+eUqCAnbWFuLjzlt6Xlhbc+LnBhdGgn44CCIgorCisjOiBidWlsdGluL2hlbHAuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJ++8muacquefpeeahCBtYW4g5p+l55yL5Zmo44CCIgorCisjOiBidWlsdGluL2hlbHAuYzozNjcKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIuayoeaciSBtYW4g5p+l55yL5Zmo5aSE55CG5q2k6K+35rGCIgorCisjOiBidWlsdGluL2hlbHAuYzozNzUKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLmsqHmnIkgaW5mbyDmn6XnnIvlmajlpITnkIbmraTor7fmsYIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNCBidWlsdGluL2hlbHAuYzo0NDUgZ2l0LmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxpYXNlZCB0byAnJXMnIgorbXNnc3RyICInJXMnIOaYryAnJXMnIOeahOWIq+WQjSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ4IGdpdC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIKK21zZ3N0ciAi5Z2P55qEIGFsaWFzLiVzIOWtl+espuS4su+8miVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NzcgYnVpbHRpbi9oZWxwLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICLnlKjms5XvvJolcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0OTEKK21zZ2lkICInZ2l0IGhlbHAgY29uZmlnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiJ2dpdCBoZWxwIGNvbmZpZycg6I635Y+W5pu05aSa5L+h5oGvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIiVzIOeahOWvueixoeexu+Wei+S4jeWMuemFjSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIuacquiDveiOt+WPlumihOacn+eahOWvueixoSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIuWvueixoSAlc++8muW6lOS4uuexu+WeiyAlc++8jOWNtOaYryAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICLml6Dms5XloavlhYUgJWQg5a2X6IqCIgorbXNnc3RyWzFdICLml6Dms5XloavlhYUgJWQg5a2X6IqCIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIui/h+aXqeeahOaWh+S7tue7k+adn+espu+8iEVPRu+8iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAi6L6T5YWl5LiK55qE6K+76ZSZ6K+vIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODEKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAi55So5o6J5LqG6LaF6L+H5Y+v55So55qE5a2X6IqCIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo2MDQKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICLljIXlpKrlpKfotoXov4fkuoblvZPliY0gb2ZmX3Qg55qE5a6a5LmJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICLljIXotoXov4fkuobmnIDlpKflhYHorrjlgLwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLml6Dms5XmiZPlvIDljIXmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgIuWMheetvuWQjeS4jeWMuemFjSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aMgeWMheeJiOacrCAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAi5YyF5Lit5pyJ6ZSZ6K+v55qE5a+56LGh5L2N5LqO5YGP56e76YePICU8UFJJdU1BWD7vvJolcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgIuino+WOi+e8qei/lOWbniAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAi5YGP56e75YC86KaG55uW5LqGIGRlbHRhIOWfuuWHhuWvueixoSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJkZWx0YSDln7rlh4blgY/np7votornlYwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICLmnKrnn6Xlr7nosaHnsbvlnosgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MgorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIuaXoOazleivu+WPluWMheaWh+S7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAi5YyF5paH5Lu26L+H5pep57uT5p2f77yM57y65bCRICU8UFJJdU1BWD4g5a2X6IqCIgorbXNnc3RyWzFdICLljIXmlofku7bov4fml6nnu5PmnZ/vvIznvLrlsJEgJTxQUkl1TUFYPiDlrZfoioIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICLop6PljovnvKnkuKXph43nmoTkuI3kuIDoh7QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNSBidWlsdGluL2luZGV4LXBhY2suYzo3NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzY0CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDMgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAi5Y+R546wICVzIOWHuueOsCBTSEExIOWGsueqge+8gSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAi5LiN6IO96K+7ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0IGluZm8gJXMiCittc2dzdHIgIuS4jeiDveivu+WPlueOsOWtmOWvueixoeS/oeaBryAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W546w5a2Y5a+56LGhICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAi5peg5pWI55qE5pWw5o2u5a+56LGhICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ1Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrZWQgb2JqZWN0IgorbXNnc3RyICLlr7nmiZPljIXlr7nosaEgZnNjayDmo4Dmn6Xlh7rplJkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiJXMg55qE5omA5pyJ5a2Q5a+56LGh5bm26Z2e6YO95Y+v6L6+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTkgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUwCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICLlupTnlKggZGVsdGEg5aSx6LSlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgIuaOpeaUtuWvueixoeS4rSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIue0ouW8leWvueixoeS4rSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MgorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAi5YyF5Yay56qB77yIU0hBMSDkuI3ljLnphY3vvIkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTcKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIuS4jeiDveWvueWMheaWh+S7tuiwg+eUqCBmc3RhdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2MAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAi5YyF55qE57uT5bC+5pyJ5Z6D5Zy+5pWw5o2uIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTcyCittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAicGFyc2VfcGFja19vYmplY3RzKCkg5Lit6YGH5Yiw5LiN5Y+v55CG5Za755qE6Zeu6aKYIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk1Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAi5aSE55CGIGRlbHRhIOS4rSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLkuI3og73liJvlu7rnur/nqIvvvJolcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0NgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgIuS4jeWPr+eQhuWWuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3QiCittc2dpZF9wbHVyYWwgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHJbMF0gIuWujOaIkCAlZCDkuKrmnKzlnLDlr7nosaEiCittc2dzdHJbMV0gIuWujOaIkCAlZCDkuKrmnKzlnLDlr7nosaEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIuWvuSAlcyDnmoTlsL7pg6jmoKHpqozlh7rnjrDmhI/lpJbvvIjno4Hnm5jmjZ/lnY/vvJ/vvIkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gIuWMheaciSAlZCDkuKrmnKrop6PlhrPnmoQgZGVsdGEiCittc2dzdHJbMV0gIuWMheaciSAlZCDkuKrmnKrop6PlhrPnmoQgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIuS4jeiDveWOi+e8qemZhOWKoOWvueixoe+8iCVk77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzg4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICLmnKzlnLDlr7nosaEgJXMg5bey5o2f5Z2PIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDAyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICLljIXmlofku7blkI0gJyVzJyDmsqHmnInku6UgJy5wYWNrJyDnu5PlsL4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5YaZ5YWlICVzIOaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuICVzIGZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5YWz6Zet5bey5YaZ5YWl55qEICVzIOaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDU5Cittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgIuWFs+mXreWMheaWh+S7tuaXtuWHuumUmSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3MworbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgIuaXoOazleWtmOWCqOWMheaWh+S7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ4MQorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlrZjlgqjntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MjUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgIuWdj+eahCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIuaXoOazleaJk+W8gOeOsOWtmOWMheaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIuaXoOazleS4uiAlcyDmiZPlvIDljIXntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAi6Z2eIGRlbHRh77yaJWQg5Liq5a+56LGhIgorbXNnc3RyWzFdICLpnZ4gZGVsdGHvvJolZCDkuKrlr7nosaEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAi6ZO+6ZW/ID0gJWQ6ICVsdSDlr7nosaEiCittc2dzdHJbMV0gIumTvumVvyA9ICVkOiAlbHUg5a+56LGhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjg5Cittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIuaXoOazlei/lOWbnuW9k+WJjeW3peS9nOebruW9lSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTczOCBidWlsdGluL2luZGV4LXBhY2suYzoxNzQxCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzU3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICLplJnor6/pgInpobkgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzcKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiDkuI3og73lkowgLS1zdGRpbiDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3NzkKK21zZ2lkICItLXN0ZGluIHJlcXVpcmVzIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tc3RkaW4g6ZyA6KaB5LiA5LiqIGdpdCDku5PlupMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3ODUKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5IOayoeacieaPkOS+m+WMheaWh+S7tuWQjeWPguaVsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTgzMyBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NTgxCittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrIG9iamVjdHMiCittc2dzdHIgIuWcqOaJk+WMheWvueixoeS4rSBmc2NrIOajgOafpeWHuumUmSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95a+55qih54mIICclcycg6LCD55SoIHN0YXQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIuS4jeiDveaJk+W8gOebruW9lSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W6ZO+5o6lICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAi5LiN6IO96IeqICclcycg5YiwICclcycg5Yib5bu656ym5Y+36ZO+5o6lIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIuS4jeiDveaLt+i0nSAnJXMnIOiHsyAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAi5b+955Wl5qih54mIICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCBpbiAlcyIKK21zZ3N0ciAi5rKh5pyJ5ZyoICVzIOS4reaJvuWIsOaooeeJiCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBmcm9tICclcyc6ICVzIgorbXNnc3RyICLmsqHmnInku44gJyVzJyDlpI3liLbmqKHniYjvvJolcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICLkuI3og73lpITnkIYgJWQg57G75Z6L55qE5paH5Lu2IgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIuS4jeiDveenu+WKqCAlcyDoh7MgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NCBidWlsdGluL2luaXQtZGIuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIOW3sue7j+WtmOWcqCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3Rpbmcgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi6YeN5paw5Yid5aeL5YyW5bey5a2Y5Zyo55qE5YWx5LqrIEdpdCDku5PlupPkuo4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIumHjeaWsOWIneWni+WMluW3suWtmOWcqOeahCBHaXQg5LuT5bqT5LqOICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IHNoYXJlZCBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIuW3suWIneWni+WMluepuueahOWFseS6qyBHaXQg5LuT5bqT5LqOICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi5bey5Yid5aeL5YyW56m655qEIEdpdCDku5PlupPkuo4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0NjgKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9POaooeadv+ebruW9lT5dIFstLXNoYXJlZFs9POadg+mZkD5dXSAiCisiWzznm67lvZU+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkxCittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgIuadg+mZkCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDkyCittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICLmjIflrpogZ2l0IOS7k+W6k+aYr+WkmuS4queUqOaIt+S5i+mXtOWFseS6q+eahCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTI5IGJ1aWx0aW4vaW5pdC1kYi5jOjUzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uuebruW9lSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAi5LiN6IO95YiH5o2i55uu5b2V5YiwICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAi5LiN5YWB6K64ICVz77yI5oiWIC0td29yay10cmVlPTznm67lvZU+77yJ6ICM5rKh5pyJ5oyH5a6aICVz77yI5oiWIC0tZ2l0LWRpcj0855uu5b2VPu+8iSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIuS4jeiDveiuv+mXruW3peS9nOWMuiAnJXMnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE2Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0taW4tcGxhY2VdIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDzplK4+Wyg9fDopPOWAvCIKKyI+XSkuLi5dIFs85paH5Lu2Pi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTUKK21zZ2lkICJlZGl0IGZpbGVzIGluIHBsYWNlIgorbXNnc3RyICLlnKjljp/kvY3nvJbovpHmlofku7YiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTYKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICLliKDpmaTnqbrnmoTlsL7pg6jnvbLlkI0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6OTkKK21zZ2lkICJ3aGVyZSB0byBwbGFjZSB0aGUgbmV3IHRyYWlsZXIiCittc2dzdHIgIuWcqOWTqumHjOaUvue9ruaWsOeahOWwvumDqOe9suWQjSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDEKK21zZ2lkICJhY3Rpb24gaWYgdHJhaWxlciBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi5b2T5bC+6YOo572y5ZCN5bey57uP5a2Y5Zyo5pe25omA6YeH5Y+W55qE5Yqo5L2cIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMworbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGlzIG1pc3NpbmciCittc2dzdHIgIuW9k+WwvumDqOe9suWQjee8uuWkseaXtuaJgOmHh+WPlueahOWKqOS9nCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDUKK21zZ2lkICJvdXRwdXQgb25seSB0aGUgdHJhaWxlcnMiCittc2dzdHIgIuWPqui+k+WHuuWwvumDqOe9suWQjSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDYKK21zZ2lkICJkbyBub3QgYXBwbHkgY29uZmlnIHJ1bGVzIgorbXNnc3RyICLkuI3opoHlupTnlKjphY3nva7op4TliJkiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTA3Cittc2dpZCAiam9pbiB3aGl0ZXNwYWNlLWNvbnRpbnVlZCB2YWx1ZXMiCittc2dzdHIgIui/nuaOpeepuueZveaKmOihjOeahOWAvCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDgKK21zZ2lkICJzZXQgcGFyc2luZyBvcHRpb25zIgorbXNnc3RyICLorr7nva7op6PmnpDpgInpobkiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTEwCittc2dpZCAiZG8gbm90IHRyZWF0IC0tLSBzcGVjaWFsbHkiCittc2dzdHIgIuS4jeimgeWvuSAtLS0g54m55q6K5aSE55CGIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMQorbXNnaWQgInRyYWlsZXIiCittc2dzdHIgIuWwvumDqOe9suWQjSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTIKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAi6KaB5re75Yqg55qE5bC+6YOo572y5ZCNIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEyMworbXNnaWQgIi0tdHJhaWxlciB3aXRoIC0tb25seS1pbnB1dCBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXRyYWlsZXIg5ZKMIC0tb25seS1pbnB1dCDlkIzml7bkvb/nlKjmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTMzCittc2dpZCAibm8gaW5wdXQgZmlsZSBnaXZlbiBmb3IgaW4tcGxhY2UgZWRpdGluZyIKK21zZ3N0ciAi5rKh5pyJ57uZ5Ye66KaB5Y6f5L2N57yW6L6R55qE5paH5Lu2IgorCisjOiBidWlsdGluL2xvZy5jOjU2Cittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPOmAiemhuT5dIFs854mI5pys6IyD5Zu0Pl0gW1stLV0gPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL2xvZy5jOjU3Cittc2dpZCAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCBzaG93IFs86YCJ6aG5Pl0gPOWvueixoT4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICLml6DmlYjnmoQgLS1kZWNvcmF0ZSDpgInpobnvvJolcyIKKworIzogYnVpbHRpbi9sb2cuYzoxNzQKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAi5pi+56S65rqQIgorCisjOiBidWlsdGluL2xvZy5jOjE3NQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICLkvb/nlKjpgq7ku7bmmKDlsITmlofku7YiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc3Cittc2dpZCAib25seSBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLlj6rkv67ppbDkuI4gPOaooeW8jz4g5Yy56YWN55qE5byV55SoIgorCisjOiBidWlsdGluL2xvZy5jOjE3OQorbXNnaWQgImRvIG5vdCBkZWNvcmF0ZSByZWZzIHRoYXQgbWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLkuI3kv67ppbDlkowgPOaooeW8jz4g5Yy56YWN55qE5byV55SoIgorCisjOiBidWlsdGluL2xvZy5jOjE4MAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgIuS/rumlsOmAiemhuSIKKworIzogYnVpbHRpbi9sb2cuYzoxODMKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAi5aSE55CG5paH5Lu25Lit56ysIG4g5YiwIG0g5LmL6Ze055qE6KGM77yM5LuOIDEg5byA5aeLIgorCisjOiBidWlsdGluL2xvZy5jOjI4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIuacgOe7iOi+k+WHuu+8miVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6IOaNn+Wdj+eahOaWh+S7tiIKKworIzogYnVpbHRpbi9sb2cuYzo1NTAgYnVpbHRpbi9sb2cuYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICLkuI3og73or7vlj5blr7nosaEgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdHlwZTogJWQiCittc2dzdHIgIuacquefpeexu+Wei++8miVkIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCBjb3ZlciBmcm9tIGRlc2NyaXB0aW9uIG1vZGUiCittc2dzdHIgIiVz77ya5LuO5o+P6L+w55Sf5oiQ6ZmE5Ye955qE5qih5byP5peg5pWIIgorCisjOiBidWlsdGluL2xvZy5jOjgyMQorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIOayoeacieWAvCIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIui+k+WHuuebruW9leWQjeWkqumVvyIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAi5peg5rOV5omT5byA6KGl5LiB5paH5Lu2ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjk2OQorbXNnaWQgIm5lZWQgZXhhY3RseSBvbmUgcmFuZ2UiCittc2dzdHIgIuWPqumcgOimgeS4gOS4quiMg+WbtCIKKworIzogYnVpbHRpbi9sb2cuYzo5NzkKK21zZ2lkICJub3QgYSByYW5nZSIKK21zZ3N0ciAi5LiN5piv5LiA5Liq6IyD5Zu0IgorCisjOiBidWlsdGluL2xvZy5jOjExNDMKK21zZ2lkICJjb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICLpmYTlh73pnIDopoHpgq7ku7blnLDlnYDmoLzlvI8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE0OQorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgY292ZXItbGV0dGVyIGZpbGUiCittc2dzdHIgIuaXoOazleWIm+W7uumZhOWHveaWh+S7tiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgIuS4jeato+W4uOeahCBpbi1yZXBseS10b++8miVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzzpgInpobk+XSBbPOS7jj4gfCA854mI5pys6IyD5Zu0Pl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxMworbXNnaWQgInR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICLkuKTkuKrovpPlh7rnm67lvZXvvJ8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQyNCBidWlsdGluL2xvZy5jOjIxOTcgYnVpbHRpbi9sb2cuYzoyMTk5IGJ1aWx0aW4vbG9nLmM6MjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAi5pyq55+l5o+Q5LqkICVzIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzQgYnVpbHRpbi9yZXBsYWNlLmM6NTggYnVpbHRpbi9yZXBsYWNlLmM6MjA3CisjOiBidWlsdGluL3JlcGxhY2UuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZiIKK21zZ3N0ciAi5peg5rOV5bCGICclcycg6Kej5p6Q5Li65LiA5Liq5pyJ5pWI5byV55SoIgorCisjOiBidWlsdGluL2xvZy5jOjE0MzkKK21zZ2lkICJjb3VsZCBub3QgZmluZCBleGFjdCBtZXJnZSBiYXNlIgorbXNnc3RyICLkuI3og73mib7liLDlh4bnoa7nmoTlkIjlubbln7rnur8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ0MworbXNnaWQgIiIKKyJmYWlsZWQgdG8gZ2V0IHVwc3RyZWFtLCBpZiB5b3Ugd2FudCB0byByZWNvcmQgYmFzZSBjb21taXQgYXV0b21hdGljYWxseSxcbiIKKyJwbGVhc2UgdXNlIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gdG8gdHJhY2sgYSByZW1vdGUgYnJhbmNoLlxuIgorIk9yIHlvdSBjb3VsZCBzcGVjaWZ5IGJhc2UgY29tbWl0IGJ5IC0tYmFzZT08YmFzZS1jb21taXQtaWQ+IG1hbnVhbGx5IgorbXNnc3RyICIiCisi5peg5rOV5b6X5Yiw5LiK5ri45Zyw5Z2A77yM5aaC5p6c5L2g5oOz6Ieq5Yqo6K6w5b2V5Z+657q/5o+Q5Lqk77yM6K+35L2/55So5ZG95LukXG4iCisiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byDmnaXot5/ouKrkuIDkuKrov5znqIvliIbmlK/jgILmiJbogIXkvaDlj6/ku6XpgJrov4dcbiIKKyLlj4LmlbAgLS1iYXNlPTzln7rnur/mj5DkuqQ+IOaJi+WKqOaMh+WumuS4gOS4quWfuue6v+aPkOS6pCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDYzCittc2dpZCAiZmFpbGVkIHRvIGZpbmQgZXhhY3QgbWVyZ2UgYmFzZSIKK21zZ3N0ciAi5peg5rOV5om+5Yiw5YeG56Gu55qE5ZCI5bm25Z+657q/IgorCisjOiBidWlsdGluL2xvZy5jOjE0NzQKK21zZ2lkICJiYXNlIGNvbW1pdCBzaG91bGQgYmUgdGhlIGFuY2VzdG9yIG9mIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIuWfuue6v+aPkOS6pOW6lOivpeaYr+eJiOacrOWIl+ihqOeahOelluWFiCIKKworIzogYnVpbHRpbi9sb2cuYzoxNDc4Cittc2dpZCAiYmFzZSBjb21taXQgc2hvdWxkbid0IGJlIGluIHJldmlzaW9uIGxpc3QiCittc2dzdHIgIuWfuue6v+aPkOS6pOS4jeW6lOivpeWHuueOsOWcqOeJiOacrOWIl+ihqOS4rSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTMxCittc2dpZCAiY2Fubm90IGdldCBwYXRjaCBpZCIKK21zZ3N0ciAi5peg5rOV5b6X5Yiw6KGl5LiBIGlkIgorCisjOiBidWlsdGluL2xvZy5jOjE1ODMKK21zZ2lkICJmYWlsZWQgdG8gaW5mZXIgcmFuZ2UtZGlmZiByYW5nZXMiCittc2dzdHIgIuaXoOazleaOqOaWrSByYW5nZS1kaWZmIOiMg+WbtCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjI5Cittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAi5L2/55SoIFtQQVRDSCBuL21d77yM5Y2z5L2/5Y+q5pyJ5LiA5Liq6KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzIKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAi5L2/55SoIFtQQVRDSF3vvIzljbPkvb/mnInlpJrkuKrooaXkuIEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzNgorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICLmiZPljbDooaXkuIHliLDmoIflh4bovpPlh7oiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYzOAorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICLnlJ/miJDkuIDlsIHpmYTlh70iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MAorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAi5L2/55So566A5Y2V55qE5pWw5a2X5bqP5YiX5L2c5Li66L6T5Ye65paH5Lu25ZCNIgorCisjOiBidWlsdGluL2xvZy5jOjE2NDEKK21zZ2lkICJzZngiCittc2dzdHIgIuWQjue8gCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQyCittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgIuS9v+eUqCA85ZCO57yAPiDku6Pmm78gJy5wYXRjaCciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0NAorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgIuihpeS4geS7pSA8bj4g5byA5aeL57yW5Y+377yM6ICM5LiN5pivMSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ2Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICLmoIforrDooaXkuIHns7vliJfmmK/nrKzlh6DmrKHph43liLYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0OAorbXNnaWQgIlVzZSBbUkZDIFBBVENIXSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIuS9v+eUqCBbUkZDIFBBVENIXSDku6Pmm78gW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICLku47liIbmlK/mj4/ov7Dojrflj5bpmYTlh73nmoTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MgorbXNnaWQgImdlbmVyYXRlIHBhcnRzIG9mIGEgY292ZXIgbGV0dGVyIGJhc2VkIG9uIGEgYnJhbmNoJ3MgZGVzY3JpcHRpb24iCittc2dzdHIgIuWfuuS6juS4gOS4quWIhuaUr+aPj+i/sOeUn+aIkOmDqOWIhumZhOWHvSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU0Cittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICLkvb/nlKggWzzliY3nvIA+XSDku6Pmm78gW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICLmiornu5Pmnpzmlofku7blrZjlgqjlnKggPOebruW9lT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MAorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICLkuI3liKDpmaQv5re75YqgIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MworbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIuS4jei+k+WHuuS6jOi/m+WItuW3ruW8giIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY1Cittc2dpZCAib3V0cHV0IGFsbC16ZXJvIGhhc2ggaW4gRnJvbSBoZWFkZXIiCittc2dzdHIgIuWcqCBGcm9tIOWktOS/oeaBr+S4rei+k+WHuuWFqOS4uumbtueahOWTiOW4jOWAvCIKKworIzogYnVpbHRpbi9sb2cuYzoxNjY3Cittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICLkuI3ljIXlkKvlt7LlnKjkuIrmuLjmj5DkuqTkuK3nmoTooaXkuIEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2OQorbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAi5pi+56S657qv6KGl5LiB5qC85byP6ICM6Z2e6buY6K6k55qE77yI6KGl5LiBK+eKtuaAge+8iSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcxCittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICLpgq7ku7blj5HpgIEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAiaGVhZGVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzMKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICLmt7vliqDpgq7ku7blpLQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAi6YKu5Lu25Zyw5Z2AIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzQKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAi5re75Yqg5pS25Lu25Lq6IgorCisjOiBidWlsdGluL2xvZy5jOjE2NzYKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAi5re75Yqg5oqE6YCBIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzgKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAi5qCH6K+GIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzkKK21zZ2lkICJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIgorbXNnc3RyICLlsIYgRnJvbSDlnLDlnYDorr7nva7kuLogPOagh+ivhj7vvIjlpoLoi6XkuI3mj5DkvpvvvIzliJnnlKjmj5DkuqTogIUgSUQg5YGa5Li65Zyw5Z2A77yJIgorCisjOiBidWlsdGluL2xvZy5jOjE2ODEKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICLpgq7ku7bmoIfor4YiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4MgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAi5L2/56ys5LiA5bCB6YKu5Lu25L2c5Li65a+5IDzpgq7ku7bmoIfor4Y+IOeahOWbnuWkjSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjgzIGJ1aWx0aW4vbG9nLmM6MTY4NgorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICLovrnnlYwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY4NAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgIumZhOS7tuaWueW8j+a3u+WKoOihpeS4gSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjg3Cittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAi5YaF6IGU5pi+56S66KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTEKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAi5ZCv55So6YKu5Lu257q/57Si77yM6aOO5qC877ya5rWF77yM5rexIgorCisjOiBidWlsdGluL2xvZy5jOjE2OTMKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgIuetvuWQjSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk0Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICLmt7vliqDkuIDkuKrnrb7lkI0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NQorbXNnaWQgImJhc2UtY29tbWl0IgorbXNnc3RyICLln7rnur/mj5DkuqQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5NgorbXNnaWQgImFkZCBwcmVyZXF1aXNpdGUgdHJlZSBpbmZvIHRvIHRoZSBwYXRjaCBzZXJpZXMiCittc2dzdHIgIuS4uuihpeS4geWIl+ihqOa3u+WKoOWJjee9ruagkeS/oeaBryIKKworIzogYnVpbHRpbi9sb2cuYzoxNjk4Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICLku47mlofku7bmt7vliqDkuIDkuKrnrb7lkI0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY5OQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIuS4jeimgeaJk+WNsOihpeS4geaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAxCittc2dpZCAic2hvdyBwcm9ncmVzcyB3aGlsZSBnZW5lcmF0aW5nIHBhdGNoZXMiCittc2dzdHIgIuWcqOeUn+aIkOihpeS4geaXtuaYvuekuui/m+W6piIKKworIzogYnVpbHRpbi9sb2cuYzoxNzAzCittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJldj4gaW4gY292ZXIgbGV0dGVyIG9yIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAi5Zyo6ZmE5Ye95oiW5Y2V5Liq6KGl5LiB5Lit5pi+56S65ZKMIDxyZXY+IOeahOW3ruW8giIKKworIzogYnVpbHRpbi9sb2cuYzoxNzA2Cittc2dpZCAic2hvdyBjaGFuZ2VzIGFnYWluc3QgPHJlZnNwZWM+IGluIGNvdmVyIGxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIuWcqOmZhOWHveaIluWNleS4quihpeS4geS4reaYvuekuuWSjCA8cmVmc3BlYz4g55qE5beu5byCIgorCisjOiBidWlsdGluL2xvZy5jOjE3MDgKK21zZ2lkICJwZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICLliJvlu7rmnYPph43nmoTnmb7liIbmr5QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICLljIXlkKvml6DmlYjnmoTouqvku73moIfor4bvvJolcyIKKworIzogYnVpbHRpbi9sb2cuYzoxODA3Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1uIOWSjCAtayDkupLmlqUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwOQorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMgYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgvLS1yZmMg5ZKMIC1rIOS6kuaWpSIKKworIzogYnVpbHRpbi9sb2cuYzoxODE3Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkg5peg5oSP5LmJIgorCisjOiBidWlsdGluL2xvZy5jOjE4MTkKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMg5peg5oSP5LmJIgorCisjOiBidWlsdGluL2xvZy5jOjE4MjEKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sg5peg5oSP5LmJIgorCisjOiBidWlsdGluL2xvZy5jOjE4NTQKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAi5qCH5YeG6L6T5Ye65oiW55uu5b2V77yM5ZOq5LiA5Liq77yfIgorCisjOiBidWlsdGluL2xvZy5jOjE5NTgKK21zZ2lkICItLWludGVyZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0taW50ZXJkaWZmIOmcgOimgSAtLWNvdmVyLWxldHRlciDmiJbljZXkuIDooaXkuIEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk2MgorbXNnaWQgIkludGVyZGlmZjoiCittc2dzdHIgIueJiOacrOmXtOW3ruW8gu+8miIKKworIzogYnVpbHRpbi9sb2cuYzoxOTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVyZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIuWvuSB2JWQg55qE54mI5pys5beu5byC77yaIgorCisjOiBidWlsdGluL2xvZy5jOjE5NjkKK21zZ2lkICItLWNyZWF0aW9uLWZhY3RvciByZXF1aXJlcyAtLXJhbmdlLWRpZmYiCittc2dzdHIgIi0tY3JlYXRpb24tZmFjdG9yIOmcgOimgSAtLXJhbmdlLWRpZmYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTk3MworbXNnaWQgIi0tcmFuZ2UtZGlmZiByZXF1aXJlcyAtLWNvdmVyLWxldHRlciBvciBzaW5nbGUgcGF0Y2giCittc2dzdHIgIi0tcmFuZ2UtZGlmZiDpnIDopoEgLS1jb3Zlci1sZXR0ZXIg5oiW5Y2V5LiA6KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODEKK21zZ2lkICJSYW5nZS1kaWZmOiIKK21zZ3N0ciAi6IyD5Zu05beu5byC77yaIgorCisjOiBidWlsdGluL2xvZy5jOjE5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmFuZ2UtZGlmZiBhZ2FpbnN0IHYlZDoiCittc2dzdHIgIuWvuSB2JWQg55qE6IyD5Zu05beu5byC77yaIgorCisjOiBidWlsdGluL2xvZy5jOjE5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W562+5ZCN5paH5Lu2ICclcyciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjAyOQorbXNnaWQgIkdlbmVyYXRpbmcgcGF0Y2hlcyIKK21zZ3N0ciAi55Sf5oiQ6KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjIwNzMKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV5Yib5bu66L6T5Ye65paH5Lu2IgorCisjOiBidWlsdGluL2xvZy5jOjIxMzIKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs85LiK5ri4PiBbPOWktD4gWzzpmZDliLY+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICLkuI3og73mib7liLDot5/ouKrnmoTov5znqIvliIbmlK/vvIzor7fmiYvlt6XmjIflrpogPOS4iua4uD7jgIJcbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ3MAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFs86YCJ6aG5Pl0gWzzmlofku7Y+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyNgorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgIueUqOagh+etvuagh+ivhuaWh+S7tueahOeKtuaAgSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUyOAorbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICLkvb/nlKjlsI/lhpnlrZfmr43ooajnpLogJ+WBh+iuvuacquaUueWPmOeahCcg5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTMwCittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnZnNtb25pdG9yIGNsZWFuJyBmaWxlcyIKK21zZ3N0ciAi5L2/55So5bCP5YaZ5a2X5q+N6KGo56S6ICdmc21vbml0b3IgY2xlYW4nIOaWh+S7tiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjUzMgorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICLmmL7npLrnvJPlrZjnmoTmlofku7bvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzQKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi5pi+56S65bey5Yig6Zmk55qE5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTM2Cittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLmmL7npLrlt7Lkv67mlLnnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1MzgKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuaYvuekuuWFtuWug+aWh+S7tiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU0MAorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLmmL7npLrlv73nlaXnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDMKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi5pi+56S65pqC5a2Y5Yy65YaF5a6555qE5a+56LGh5ZCN56ewIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ1Cittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAi5pi+56S65paH5Lu257O757uf6ZyA6KaB5Yig6Zmk55qE5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTQ3Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICLlj6rmmL7npLrigJzlhbbku5bigJ3nm67lvZXnmoTlkI3np7AiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NDkKK21zZ2lkICJzaG93IGxpbmUgZW5kaW5ncyBvZiBmaWxlcyIKK21zZ3N0ciAi5pi+56S65paH5Lu25o2i6KGM56ym5qC85byPIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTUxCittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi5LiN5pi+56S656m655uu5b2VIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTU0Cittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLmmL7npLrmnKrlkIjlubbnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTYKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5pi+56S6IHJlc29sdmUtdW5kbyDkv6Hmga8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NTgKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgIuWMuemFjeaOkumZpOaWh+S7tueahOaooeW8jyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2MQorbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgIuS7jiA85paH5Lu2PiDkuK3or7vlj5bmjpLpmaTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjQKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAi5LuOIDzmlofku7Y+IOivu+WPlumineWklueahOavj+S4quebruW9leeahOaOkumZpOaooeW8jyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU2NgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgIua3u+WKoOagh+WHhueahCBnaXQg5o6S6ZmkIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTcwCittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIuaYvuekuuebuOWvueS6jumhtue6p+ebruW9leeahOaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3MworbXNnaWQgInJlY3Vyc2UgdGhyb3VnaCBzdWJtb2R1bGVzIgorbXNnc3RyICLlnKjlrZDmqKHnu4TkuK3pgJLlvZIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzUKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgIuWmguaenOS7u+S9lSA85paH5Lu2PiDpg73kuI3lnKjntKLlvJXljLrvvIzop4bkuLrplJnor68iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NzYKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAi5qCR5a+56LGhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NTc3Cittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAi5YGH6KOF6Ieq5LuOIDzmoJHlr7nosaE+IOS5i+WQjuWIoOmZpOeahOi3r+W+hOS7jeeEtuWtmOWcqCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjU3OQorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgIuaYvuekuuiwg+ivleaVsOaNriIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo5Cittc2dpZCAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPHJlcG9zaXRvcnk+IFs8cmVmcz4uLi5dXSIKK21zZ3N0ciAiIgorImdpdCBscy1yZW1vdGUgWy0taGVhZHNdIFstLXRhZ3NdIFstLXJlZnNdIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdXG4iCisiICAgICAgICAgICAgICAgICAgICAgWy0tc3ltcmVmXSBbPOS7k+W6kz4gWzzlvJXnlKg+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAi5LiN5omT5Y2w6L+c56iLIFVSTCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MCBidWlsdGluL2xzLXJlbW90ZS5jOjYyIGJ1aWx0aW4vcmViYXNlLmM6MTUxOAorbXNnaWQgImV4ZWMiCittc2dzdHIgImV4ZWMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAi6L+c56iL5Li75py65LiK55qEIGdpdC11cGxvYWQtcGFjayDot6/lvoQiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjUKK21zZ2lkICJsaW1pdCB0byB0YWdzIgorbXNnc3RyICLku4XpmZDkuo7moIfnrb4iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAi5LuF6ZmQ5LqO5YiG5pSvIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIuS4jeaYvuekuuW3suino+aekOeahOagh+etviIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICLlj4LogIMgdXJsLjxiYXNlPi5pbnN0ZWFkT2Yg6K6+572uIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICLoi6XmnKrmib7liLDljLnphY3nmoTlvJXnlKjliJnku6XpgIDlh7rnoIEy6YCA5Ye6IgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgIumZpOS6huaYvuekuuaMh+WQkeeahOWvueixoeWklu+8jOaYvuekuuaMh+WQkeeahOW8leeUqOWQjSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPOmAiemhuT5dIDzmoJHlr7nosaE+IFs86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAi5Y+q5pi+56S65qCRIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIumAkuW9kuWIsOWtkOagkSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAi5b2T6YCS5b2S5pe25pi+56S65qCRIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLmnaHnm67ku6UgTlVMIOWtl+espue7iOatoiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi5YyF5ous5a+56LGh5aSn5bCPIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAi5Y+q5YiX5Ye65paH5Lu25ZCNIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICLkvb/nlKjmlofku7bnmoTlhajot6/lvoQiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAi5YiX5Ye65pW05Liq5qCR77yb5LiN5LuF5LuF5b2T5YmN55uu5b2V77yI6ZqQ5ZCrIC0tZnVsbC1uYW1l77yJIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICLnqbrnmoQgbWJveO+8miclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzzpgInpobk+XSBbPOaPkOS6pD4uLi5dIgorCisjOiBidWlsdGluL21lcmdlLmM6NTYKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NworbXNnaWQgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorbXNnc3RyICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExOAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAi5byA5YWzIGBtJyDpnIDopoHkuIDkuKrlgLwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAi6YCJ6aG5IGAlcycg6ZyA6KaB5LiA5Liq5YC8IgorCisjOiBidWlsdGluL21lcmdlLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIuS4jeiDveaJvuWIsOWQiOW5tuetlueVpSAnJXMn44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi5Y+v55So55qE562W55Wl5pyJ77yaIgorCisjOiBidWlsdGluL21lcmdlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLlj6/nlKjnmoToh6rlrprkuYnnrZbnlaXmnInvvJoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDQgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi5Zyo5ZCI5bm255qE5pyA5ZCO5LiN5pi+56S65beu5byC57uf6K6hIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ3IGJ1aWx0aW4vcHVsbC5jOjE1NQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi5Zyo5ZCI5bm255qE5pyA5ZCO5pi+56S65beu5byC57uf6K6hIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjE1OAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIu+8iOWSjCAtLXN0YXQg5ZCM5LmJ77yJIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUwIGJ1aWx0aW4vcHVsbC5jOjE2MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5Zyo5ZCI5bm25o+Q5Lqk5L+h5oGv5Lit5re75Yqg77yI5pyA5aSaIDxuPiDmnaHvvInnsr7nroDmj5DkuqTorrDlvZUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTMgYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgIuWIm+W7uuS4gOS4quWNleeLrOeahOaPkOS6pOiAjOS4jeaYr+WBmuS4gOasoeWQiOW5tiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NSBidWlsdGluL3B1bGwuYzoxNzAKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgIuWmguaenOWQiOW5tuaIkOWKn++8jOaJp+ihjOS4gOasoeaPkOS6pO+8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NyBidWlsdGluL3B1bGwuYzoxNzMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgIuWcqOaPkOS6pOWJjee8lui+keaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgIuWFgeiuuOW/q+i/m++8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MSBidWlsdGluL3B1bGwuYzoxODAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICLlpoLmnpzkuI3og73lv6vov5vlsLHmlL7lvIPlkIjlubYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjUgYnVpbHRpbi9wdWxsLmM6MTgzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLpqozor4HmjIflrprnmoTmj5DkuqTmmK/lkKbljIXlkKvkuIDkuKrmnInmlYjnmoQgR1BHIOetvuWQjSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE4NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTIgYnVpbHRpbi9yZWJhc2UuYzoxNTMxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgIuetlueVpSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL3B1bGwuYzoxODgKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgIuimgeS9v+eUqOeahOWQiOW5tuetlueVpSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIm9wdGlvbj12YWx1ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL3B1bGwuYzoxOTIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLmiYDpgInnmoTlkIjlubbnrZbnlaXnmoTpgInpobkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzEKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIuWQiOW5tueahOaPkOS6pOivtOaYju+8iOmSiOWvuemdnuW/q+i/m+W8j+WQiOW5tu+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3OAorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLmlL7lvIPlvZPliY3mraPlnKjov5vooYznmoTlkIjlubYiCisKKyMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODAKK21zZ2lkICItLWFib3J0IGJ1dCBsZWF2ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIGFsb25lIgorbXNnc3RyICItLWFib3J077yM5L2G5piv5L+d55WZ57Si5byV5ZKM5bel5L2c5Yy6IgorCisjOiBidWlsdGluL21lcmdlLmM6MjgyCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIue7p+e7reW9k+WJjeato+WcqOi/m+ihjOeahOWQiOW5tiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NCBidWlsdGluL3B1bGwuYzoxOTkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIuWFgeiuuOWQiOW5tuS4jeebuOWFs+eahOWOhuWPsiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI5MAorbXNnaWQgImJ5cGFzcyBwcmUtbWVyZ2UtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICLnu5Xov4cgcHJlLW1lcmdlLWNvbW1pdCDlkowgY29tbWl0LW1zZyDpkqnlrZAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDcKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAi5LiN6IO96L+Q6KGM6LSu6JeP44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEyCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICLotK7ol4/lpLHotKUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5pyJ5pWI5a+56LGh77yaJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMzkgYnVpbHRpbi9tZXJnZS5jOjM1NgorbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgIuivu+WPluagkeWksei0pSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBidWlsdGluL21lcmdlLmM6Mzg2Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiDvvIjml6Dlj6/ljovnvKnvvIkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLljovnvKnmj5DkuqQgLS0g5pyq5pu05pawIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIuaXoOWQiOW5tuS/oeaBryAtLSDmnKrmm7TmlrAgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycg5rKh5pyJ5oyH5ZCR5LiA5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIuWdj+eahCBicmFuY2guJXMubWVyZ2VvcHRpb25zIOWtl+espuS4su+8miVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA1Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAi5pyq5aSE55CG5Lik5Liq5aS05ZCI5bm25LmL5aSW55qE5Lu75L2V5pON5L2c44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIm1lcmdlLXJlY3Vyc2l2ZSDnmoTmnKrnn6XpgInpobnvvJotWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAi5LiN6IO95YaZICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAi5LiN6IO95LuOICclcycg6K+75Y+WIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAi5pyq5o+Q5Lqk5ZCI5bm277yM5L2/55SoICdnaXQgY29tbWl0JyDlrozmiJDmraTmrKHlkIjlubbjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwMQorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyLor7fovpPlhaXkuIDkuKrmj5DkuqTkv6Hmga/ku6Xop6Pph4rmraTlkIjlubbnmoTlv4XopoHmgKfvvIzlsKTlhbbmmK/lsIbkuIDkuKrmm7TmlrDlkI7nmoTkuIrmuLjliIbmlK9cbiIKKyLlkIjlubbliLDkuLvpopjliIbmlK/jgIJcbiIKKyJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNgorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIuepuueahOaPkOS6pOivtOaYjuS8mue7iOatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICLku6UgJyVjJyDlvIDlp4vnmoTooYzlsIbooqvlv73nlaXvvIzogIznqbrnmoTmj5DkuqTor7TmmI7lsIbnu4jmraLmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2MgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAi56m65o+Q5Lqk5L+h5oGv44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAi5aSq5qOS5LqG44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAi6Ieq5Yqo5ZCI5bm25aSx6LSl77yM5L+u5q2j5Yay56qB54S25ZCO5o+Q5Lqk5L+u5q2j55qE57uT5p6c44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzcKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuayoeacieW9k+WJjeWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3OQorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSv5rKh5pyJ5a+55bqU55qE6L+c56iL5LuT5bqT44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgxCittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLlvZPliY3liIbmlK/msqHmnInlrprkuYnpu5jorqTnmoTkuIrmuLjliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAi5a+55LqOICVzIOayoeacieadpeiHqiAlcyDnmoTov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIueOr+WigyAnJTIkcycg5Lit5a2Y5Zyo5Z2P55qE5Y+W5YC8ICclMSRzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICLkuI3og73lnKggJXMg5Lit5ZCI5bm277yaJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgwCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIuS4jeiDveWQiOW5tiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODMKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IOS4jeW4puWPguaVsCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODcKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuayoeacieimgee7iOatoueahOWQiOW5tu+8iE1FUkdFX0hFQUQg5Lii5aSx77yJ44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NgorbXNnaWQgIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1xdWl0IOS4jeW4puWPguaVsCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDkKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIOS4jeW4puWPguaVsCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuayoeaciei/m+ihjOS4reeahOWQiOW5tu+8iE1FUkdFX0hFQUQg5Lii5aSx77yJ44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLmgqjlsJrmnKrnu5PmnZ/mgqjnmoTlkIjlubbvvIjlrZjlnKggTUVSR0VfSEVBRO+8ieOAglxuIgorIuivt+WcqOWQiOW5tuWJjeWFiOaPkOS6pOaCqOeahOS/ruaUueOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo5bCa5pyq57uT5p2f5oKo55qE5ouj6YCJ77yI5a2Y5ZyoIENIRVJSWV9QSUNLX0hFQUTvvInjgIJcbiIKKyLor7flnKjlkIjlubbliY3lhYjmj5DkuqTmgqjnmoTkv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrnu5PmnZ/mgqjnmoTmi6PpgInvvIjlrZjlnKggQ0hFUlJZX1BJQ0tfSEVBRO+8ieOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAi5oKo5LiN6IO95bCGIC0tc3F1YXNoIOWSjCAtLW5vLWZmIOe7hOWQiOS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTUKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iCittc2dzdHIgIuaCqOS4jeiDveWwhiAtLXNxdWFzaCDlkowgLS1jb21taXQg57uE5ZCI5L2/55So44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3MQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICLmnKrmjIflrprmj5DkuqTlubbkuJQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0g5pyq6K6+572u44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM4OAorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICLlsJrkuI3mlK/mjIHliLDnqbrliIbmlK/nmoTljovnvKnmj5DkuqQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIuWIsOepuuWIhuaUr+eahOmdnuW/q+i/m+W8j+aPkOS6pOayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSDkuI3og73ooqvlkIjlubYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk3Cittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAi5Y+q6IO95bCG5LiA5Liq5o+Q5Lqk5ZCI5bm25Yiw56m65YiG5pSv5LiKIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ3NgorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIuaLkue7neWQiOW5tuaXoOWFs+eahOWOhuWPsiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODUKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICLlt7Lnu4/mmK/mnIDmlrDnmoTjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICLmm7TmlrAgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICLlsJ3or5XpnZ7luLjlsI/nmoTntKLlvJXlhoXlkIjlubYuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAi5peg44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTY5Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIuW3sue7j+aYr+acgOaWsOeahOOAguiAtu+8gSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzUKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIuaXoOazleW/q+i/m++8jOe7iOatouOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTggYnVpbHRpbi9tZXJnZS5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIuWwhuagkeWbnua7muiHs+WOn+Wni+eKtuaAgS4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAi5bCd6K+V5ZCI5bm2562W55WlICVzLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLmsqHmnInlkIjlubbnrZbnlaXlpITnkIbmraTlkIjlubbjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIuS9v+eUqOetlueVpSAlcyDlkIjlubblpLHotKXjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIuS9v+eUqCAlcyDku6Xlh4blpIfmiYvlt6Xop6PlhrPjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAi6Ieq5Yqo5ZCI5bm26L+b5bGV6aG65Yip77yM5oyJ6KaB5rGC5Zyo5o+Q5Lqk5YmN5YGc5q2iXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21taXQ+IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPOaPkOS6pD4gPOaPkOS6pD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA85o+Q5LqkPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzQKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozNQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPOaPkOS6pD4gPOaPkOS6pD4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjM2Cittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA85byV55SoPiBbPOaPkOS6pD5dIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNTMKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgIui+k+WHuuaJgOacieWFseWQjOeahOelluWFiCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MTU1Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICLmn6Xmib7kuIDkuKrlpJrot6/lkIjlubbnmoTnpZblhYjmj5DkuqQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1NworbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICLmmL7npLrkuI3og73ooqvlhbbku5borr/pl67liLDnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjE1OQorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAi56ys5LiA5Liq5piv5YW25LuW55qE56WW5YWI5o+Q5Lqk5LmI77yfIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoxNjEKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAi5qC55o2uIDzlvJXnlKg+IOeahOW8leeUqOaXpeW/l+afpeaJviA85o+Q5LqkPiDnmoTmtL7nlJ/lpIQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjkKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzzpgInpobk+XSBbLUwgPOaWh+S7tjE+IFstTCA85Yid5aeLPiBbLUwgPOWQjeWtlzI+XV1dIDzmlofku7YxPiA85Yid5aeL5paHIgorIuS7tj4gPOaWh+S7tjI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIuWwhue7k+aenOWPkemAgeWIsOagh+WHhui+k+WHuiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzYKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAi5L2/55So5Z+65LqOIGRpZmYzIOeahOWQiOW5tiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIuWmguaenOWGsueqge+8jOS9v+eUqOaIkeS7rOeahOeJiOacrCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi5aaC5p6c5Yay56qB77yM5L2/55So5LuW5Lus55qE54mI5pysIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgIuWmguaenOWGsueqge+8jOS9v+eUqOiBlOWQiOeJiOacrCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAi5aaC5p6c5Yay56qB77yM5L2/55So5oyH5a6a6ZW/5bqm55qE5qCH6K6wIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAi5LiN6KaB6K2m5ZGK5Yay56qBIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NworbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAi5Li6IOaWh+S7tjEv5Yid5aeL5paH5Lu2L+aWh+S7tjIg6K6+572u5qCH562+IgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICLmnKrnn6XpgInpobkgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpDlr7nosaEgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gIuaXoOazleWkhOeQhiAlZCDmnaHku6XkuIrnmoTln7rnur/jgILlv73nlaUgJXPjgIIiCittc2dzdHJbMV0gIuaXoOazleWkhOeQhiAlZCDmnaHku6XkuIrnmoTln7rnur/jgILlv73nlaUgJXPjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjUKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLkuI3og73lpITnkIbkuKTkuKrlpLTlkIjlubbkuYvlpJbnmoTku7vkvZXmk43kvZzjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5byV55SoICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIuWQiOW5tiAlcyDlkowgJXNcbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NgorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0Cittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIui+k+WFpeS7pSBOVUwg5a2X56ym57uI5q2iIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi5YWB6K645Lii5aSx55qE5a+56LGhIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAi5YWB6K645Yib5bu65LiA5Liq5Lul5LiK55qE5qCRIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5Cittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgImdpdCBtdWx0aS1wYWNrLWluZGV4IFs86YCJ6aG5Pl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtc2l6ZT085aSn5bCPPikiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjI2Cittc2dpZCAib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIKK21zZ3N0ciAi5YyF5ZCr5oiQ5a+55YyF5paH5Lu25ZKM5YyF57Si5byV55qE5a+56LGh55uu5b2VIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyOQorbXNnaWQgIiIKKyJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzICIKKyJsYXJnZXIgdGhhbiB0aGlzIHNpemUiCittc2dzdHIgIuWcqCByZXBhY2sg5pyf6Ze077yM5bCG6L6D5bCP5bC65a+455qE5YyF5paH5Lu25pS26ZuG5Yiw5aSn5LqO5q2k5aSn5bCP55qE5om55qyh5LitIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICLlpKrlpJrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICItLWJhdGNoLXNpemUg6YCJ6aG55LuF55So5LqOICdyZXBhY2snIOWtkOWRveS7pCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLmnKror4bliKvnmoTlrZDlkb3ku6TvvJolcyIKKworIzogYnVpbHRpbi9tdi5jOjE4Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPOmAiemhuT5dIDzmupA+Li4uIDznm67moIc+IgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICLnm67lvZUgJXMg5Zyo57Si5byV5Lit5bm25LiU5LiN5piv5a2Q5qih57uE77yfIgorCisjOiBidWlsdGluL212LmM6ODUKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAi6K+35bCG5oKo55qE5L+u5pS55pqC5a2Y5YiwIC5naXRtb2R1bGVzIOS4reaIlui0ruiXj+WQjuWGjee7p+e7rSIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIOWcqOe0ouW8leS4rSIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi5by65Yi256e75YqoL+mHjeWRveS7pO+8jOWNs+S9v+ebruagh+WtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICLot7Pov4fnp7vliqgv6YeN5ZG95ZCN6ZSZ6K+vIgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICLnm67moIcgJyVzJyDkuI3mmK/kuIDkuKrnm67lvZUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICLmo4Dmn6UgJyVzJyDliLAgJyVzJyDnmoTph43lkb3lkI1cbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIuWdj+eahOa6kCIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIuS4jeiDveWwhuebruW9leenu+WKqOWIsOiHqui6qyIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIuS4jeiDveWwhuebruW9leenu+WKqOWIsOaWh+S7tiIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIua6kOebruW9leS4uuepuiIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIuS4jeWcqOeJiOacrOaOp+WItuS5i+S4iyIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAi55uu5qCH5bey5a2Y5ZyoIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIuimhuebliAnJXMnIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAi5LiN6IO96KaG55uWIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLlkIzkuIDnm67moIflhbfmnInlpJrkuKrmupAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuebruagh+ebruW9leS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXPvvIzmupA9JXPvvIznm67moIc9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAi6YeN5ZG95ZCNICVzIOiHsyAlc1xuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzE2IGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICLph43lkb3lkI0gJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDMKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPOmAiemhuT5dIDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA0Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgInpobk+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwNQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgInpobk+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDYyCittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICLlj6rmiZPljbDlkI3np7DvvIjml6AgU0hBLTHvvIkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjMKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgIuWPquS9v+eUqOagh+etvuadpeWRveWQjeaPkOS6pCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NQorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlj6rkvb/nlKjlkowgPOaooeW8jz4g55u45Yy56YWN55qE5byV55SoIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlv73nlaXlkowgPOaooeW8jz4g55u45Yy56YWN55qE5byV55SoIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY5Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAi5YiX5Ye65Y+v5Lul5LuO5omA5pyJ5byV55So6K6/6Zeu55qE5o+Q5LqkIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDcwCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLku47moIflh4bovpPlhaXor7vlj5YiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzEKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgIuWFgeiuuOaJk+WNsCBg5pyq5a6a5LmJYCDnmoTlkI3np7DvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzcKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAi5Y+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/nlKjms6jop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuacquefpeWtkOWRveS7pO+8miVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzzpgInpobk+Li4uXSBbPCA85byV55So5YiX6KGoPiB8IDwgPOWvueixoeWIl+ihqD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgWzzpgInpobk+Li4uXSA85YmN57yA5ZCN56ewPiBbPCA85byV55So5YiX6KGoPiB8IDwgPOWvueixoeWIl+ihqD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICIlcyDplJnnmoTljIXlr7nosaEgQ1JDIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICIlcyDmjZ/lnY/nmoTljIXlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICLlj5HnjrDlr7nosaEgJXMg6YCS5b2SIGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAi5o6S5bqP5LqGICV1IOS4quWvueixoe+8jOmihOacnyAlPFBSSXUzMj4g5LiqIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBpcyBpbnZhbGlkOiAlcyIKK21zZ3N0ciAi5peg5pWI55qE5YyF5paH5Lu277yaJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCittc2dzdHIgIuaXoOazleS4uumHjeeUqOaJk+W8gOWMheaWh+S7tu+8miVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgwMgorbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAi5peg5rOV5Zyo6YeN55So55qE5YyF5paH5Lu25Lit5p+l5om+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgxMworbXNnaWQgInVuYWJsZSB0byByZWFkIGZyb20gcmV1c2VkIHBhY2tmaWxlIgorbXNnc3RyICLml6Dms5Xor7vlj5bntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6ODQxCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBwYWNrcyBhcmUgc3BsaXQgZHVlIHRvIHBhY2sucGFja1NpemVMaW1pdCIKK21zZ3N0ciAi56aB55SoIGJpdG1hcCDlhpnlhaXvvIzlm6DkuLogcGFjay5wYWNrU2l6ZUxpbWl0IOiuvue9ruS9v+W+l+WMheiiq+WIh+WIhuS4uuWkmuS4qiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NTQKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIuWGmeWFpeWvueixoeS4rSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MTcgYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAi5a+5ICVzIOiwg+eUqCBzdGF0IOWksei0pSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvdGUgJTxQUkl1MzI+IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICU8UFJJdTMyPiIKK21zZ3N0ciAi5YaZ5YWlICU8UFJJdTMyPiDkuKrlr7nosaHogIzpooTmnJ8gJTxQUkl1MzI+IOS4qiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMTY0Cittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIuemgeeUqCBiaXRtYXAg5YaZ5YWl77yM5Zug5Li65LiA5Lqb5a+56LGh5bCG5LiN5Lya6KKr5omT5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgb3ZlcmZsb3cgaW4gcGFjayBmb3IgJXMiCittc2dzdHIgIiVzIOWOi+e8qeS4rSBkZWx0YSDln7rlh4blgY/np7votornlYwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTYwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIgorbXNnc3RyICIlcyDnmoQgZGVsdGEg5Z+65YeG5YGP56e76LaK55WMIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE4NzAKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLlr7nosaHorqHmlbDkuK0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IHNpemUgb2YgJXMiCittc2dzdHIgIuS4jeiDveW+l+WIsCAlcyDnmoTlpKflsI8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0IGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5a+56LGhICVzIOWktOS/oeaBryIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDg1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEwMQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTExCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBjYW5ub3QgYmUgcmVhZCIKK21zZ3N0ciAi5a+56LGhICVzIOaXoOazleivu+WPliIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDg4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPikiCittc2dzdHIgIuWvueixoSAlcyDkuI3kuIDoh7TnmoTlr7nosaHplb/luqbvvIglPFBSSXVNQVg+IHZzICU8UFJJdU1BWD7vvIkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjEyNQorbXNnaWQgInN1Ym9wdGltYWwgcGFjayAtIG91dCBvZiBtZW1vcnkiCittc2dzdHIgIuasoeS8mO+8iHN1Ym9wdGltYWzvvInmiZPljIUgLSDlhoXlrZjkuI3otrMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWx0YSBjb21wcmVzc2lvbiB1c2luZyB1cCB0byAlZCB0aHJlYWRzIgorbXNnc3RyICLkvb/nlKggJWQg5Liq57q/56iL6L+b6KGM5Y6L57ypIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhY2sgb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0YWcgJXMiCittc2dzdHIgIuaXoOazleS4uuagh+etviAlcyDljovnvKnlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuWOi+e8qeWvueixoeS4rSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY1Cittc2dpZCAiaW5jb25zaXN0ZW5jeSB3aXRoIGRlbHRhIGNvdW50IgorbXNnc3RyICLkuI3kuIDoh7TnmoTlt67lvILorqHmlbAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgZWRnZSBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorIumihOacn+i+ueeVjOWvueixoe+8iGVkZ2Ugb2JqZWN077yJSUTvvIzljbTlvpfliLDlnoPlnL7mlbDmja7vvJpcbiIKKyIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhwZWN0ZWQgb2JqZWN0IElELCBnb3QgZ2FyYmFnZTpcbiIKKyIgJXMiCittc2dzdHIgIiIKKyLpooTmnJ/lr7nosaEgSUTvvIzljbTlvpfliLDlnoPlnL7mlbDmja7vvJpcbiIKKyIgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjg0NgorbXNnaWQgImludmFsaWQgdmFsdWUgZm9yIC0tbWlzc2luZyIKK21zZ3N0ciAi6YCJ6aG5IC0tbWlzc2luZyDnmoTlgLzml6DmlYgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkwNSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMTMKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4IgorbXNnc3RyICLml6Dms5XmiZPlvIDljIXmlofku7bntKLlvJUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJsb29zZSBvYmplY3QgYXQgJXMgY291bGQgbm90IGJlIGV4YW1pbmVkIgorbXNnc3RyICLml6Dms5Xmo4Dmn6UgJXMg5aSE55qE5p2+5pWj5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMwMjEKK21zZ2lkICJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0IgorbXNnc3RyICLml6Dms5XlvLrliLbmnb7mlaPlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSByZXYgJyVzJyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq54mI5pysICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzExNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gJyVzJyIKK21zZ3N0ciAi5Z2P55qE54mI5pysICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzE0MQorbXNnaWQgInVuYWJsZSB0byBhZGQgcmVjZW50IG9iamVjdHMiCittc2dzdHIgIuaXoOazlea3u+WKoOacgOi/keeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIuS4jeaUr+aMgeeahOe0ouW8leeJiOacrCAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIuWdj+eahOe0ouW8leeJiOacrCAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzYKK21zZ2lkICI8dmVyc2lvbj5bLDxvZmZzZXQ+XSIKK21zZ3N0ciAiPOeJiOacrD5bLDzlgY/np7s+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM3Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAi55So5oyH5a6a55qEIGlkeCDmoLzlvI/niYjmnKzmnaXlhpnljIXntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0MAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIuavj+S4qui+k+WHuuWMheeahOacgOWkp+WwuuWvuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQyCittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICLlv73nlaXku47lpIfnlKjlr7nosaHlrZjlgqjph4zlgJ/nlKjlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NAorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi5b+955Wl5YyF5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDYKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICLpmZDliLbmiZPljIXnqpflj6PnmoTlr7nosaHmlbAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0OAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgIumZpOWvueixoeaVsOmHj+mZkOWItuWkluiuvue9ruaJk+WMheeql+WPo+eahOWGheWtmOmZkOWItiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUwCittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIuaJk+WMheWFgeiuuOeahCBkZWx0YSDpk77nmoTmnIDlpKfplb/luqYiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1MgorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAi6YeN55So5bey5a2Y5Zyo55qEIGRlbHRhcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjU0Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAi6YeN55So5bey5a2Y5Zyo55qE5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTYKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgIuS9v+eUqCBPRlNfREVMVEEg5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTgKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICLkvb/nlKjnur/nqIvmn6Xor6LmnIDkvbMgZGVsdGEg5Yy56YWNIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjAKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICLkuI3liJvlu7rnqbrnmoTljIXovpPlh7oiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WPlueJiOacrOWPt+WPguaVsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY0Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgIumZkOWItumCo+S6m+WwmuacquaJk+WMheeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjY3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIuWMheaLrOWPr+S7peS7juS7u+S9leW8leeUqOiuv+mXruWIsOeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjcwCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICLljIXmi6zooqvlvJXnlKjml6Xlv5flvJXnlKjliLDnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3MworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgIuWMheaLrOiiq+e0ouW8leW8leeUqOWIsOeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc2Cittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICLovpPlh7rljIXliLDmoIflh4bovpPlh7oiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI3OAorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAi5YyF5ous6YKj5Lqb5byV55So5LqG5b6F5omT5YyF5a+56LGh55qE5qCH562+5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODAKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIue7tOaMgeS4jeWPr+i+vueahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgyCittc2dpZCAicGFjayBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLmiZPljIXmnb7mlaPnmoTkuI3lj6/ovr7lr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NAorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLlsIbmr5Tnu5nlrpogPOaXtumXtD4g5paw55qE5peg5rOV6K6/6Zeu55qE5a+56LGh6Kej5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODcKK21zZ2lkICJ1c2UgdGhlIHNwYXJzZSByZWFjaGFiaWxpdHkgYWxnb3JpdGhtIgorbXNnc3RyICLkvb/nlKjnqIDnlo/lj6/ovr7mgKfnrpfms5UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICLliJvlu7rnsr7nroDljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICLliJvlu7rpgILlkIjmtYXlhYvpmobku5PlupPojrflj5bnmoTljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5MworbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgIuW/veeVpemFjeaciSAua2VlcCDmlofku7bnmoTljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NQorbXNnaWQgImlnbm9yZSB0aGlzIHBhY2siCittc2dzdHIgIuW/veeVpeivpSBwYWNrIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyOTcKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICLmiZPljIXljovnvKnnuqfliKsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5OQorbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICLmmL7npLrooqvnp7vmpI3pmpDol4/nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwMQorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5L2/55SoIGJpdG1hcCDntKLlvJXvvIjlpoLmnpzmnInnmoTor53vvInku6Xmj5Dpq5jlr7nosaHorqHmlbDml7bnmoTpgJ/luqYiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwMworbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgIuWcqOW7uueri+WMhee0ouW8leeahOWQjOaXtuWIm+W7uiBiaXRtYXAg57Si5byVIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMDcKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCBpZiBwb3NzaWJsZSIKK21zZ3N0ciAi5aaC5p6c5Y+v6IO977yM5YaZIGJpdG1hcCDntKLlvJUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxMQorbXNnaWQgImhhbmRsaW5nIGZvciBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIuWkhOeQhuS4ouWkseeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzE0Cittc2dpZCAiZG8gbm90IHBhY2sgb2JqZWN0cyBpbiBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIuS4jeimgeaJk+WMhSBwcm9taXNvciDljIXmlofku7bkuK3nmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMxNgorbXNnaWQgInJlc3BlY3QgaXNsYW5kcyBkdXJpbmcgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgIuWcqOWinumHj+WOi+e8qeaXtuWPguiAg+aVsOaNruWymyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGNoYWluIGRlcHRoICVkIGlzIHRvbyBkZWVwLCBmb3JjaW5nICVkIgorbXNnc3RyICLlop7ph4/pk77mt7HluqYgJWQg5aSq5rex5LqG77yM5by65Yi25Li6ICVkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjay5kZWx0YUNhY2hlTGltaXQgaXMgdG9vIGhpZ2gsIGZvcmNpbmcgJWQiCittc2dzdHIgIumFjee9riBwYWNrLmRlbHRhQ2FjaGVMaW1pdCDlpKrpq5jkuobvvIzlvLrliLbkuLogJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQwNAorbXNnaWQgIi0tbWF4LXBhY2stc2l6ZSBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBhY2sgZm9yIHRyYW5zZmVyIgorbXNnc3RyICLkuI3og73kvb/nlKggLS1tYXgtcGFjay1zaXplIOadpeaehOW7uuS8oOi+k+eUqOeahOWMheaWh+S7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA2Cittc2dpZCAibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiCittc2dzdHIgIuacgOWwj+eahOWMheaWh+S7tuWkp+Wwj+aYryAxIE1pQiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDExCittc2dpZCAiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrIgorbXNnc3RyICItLXRoaW4g5LiN6IO955So5LqO5Yib5bu65LiA5Liq5Y+v57Si5byV5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTQKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC0tdW5wYWNrLXVucmVhY2hhYmxlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSDlkowgLS11bnBhY2stdW5yZWFjaGFibGUg5LiN5YW85a65IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MjAKK21zZ2lkICJjYW5ub3QgdXNlIC0tZmlsdGVyIHdpdGhvdXQgLS1zdGRvdXQiCittc2dzdHIgIuS4jeiDveWcqOayoeaciSAtLXN0ZG91dCDnmoTmg4XlhrXkuIvkvb/nlKggLS1maWx0ZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQ4MQorbXNnaWQgIkVudW1lcmF0aW5nIG9iamVjdHMiCittc2dzdHIgIuaemuS4vuWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlRvdGFsICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSwgcmV1c2VkICU8UFJJdTMyPiAoZGVsdGEgJTxQUkl1MzI+KSIKK21zZ3N0ciAi5oC75YWxICU8UFJJdTMyPiDvvIjlt67lvIIgJTxQUkl1MzI+77yJ77yM5aSN55SoICU8UFJJdTMyPiDvvIjlt67lvIIgJTxQUkl1MzI+77yJIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjgKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTYKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmciCittc2dzdHIgIuaJk+WMheS4gOWIhyIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNworbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICLmuIXpmaTmnb7mlaPnmoTlvJXnlKjvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6OQorbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQyCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgIuato+WcqOWIoOmZpOmHjeWkjeWvueixoSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEyCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1wcm9ncmVzc10gWy0tZXhwaXJlIDzml7bpl7Q+XSBbLS1dIFs8aGVhZD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTMxCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICLmiqXlkYrmuIXpmaTnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi5L2/5pep5LqO57uZ5a6a5pe26Ze055qE5a+56LGh6L+H5pyfIgorCisjOiBidWlsdGluL3BydW5lLmM6MTM2Cittc2dpZCAibGltaXQgdHJhdmVyc2FsIHRvIG9iamVjdHMgb3V0c2lkZSBwcm9taXNvciBwYWNrZmlsZXMiCittc2dzdHIgIumZkOWItumBjeWOhiBwcm9taXNvciDljIXku6XlpJbnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxNTAKK21zZ2lkICJjYW5ub3QgcHJ1bmUgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIuS4jeiDveWcqOePjeWTgeS7k+W6k+S4reaJp+ihjOa4heeQhuaTjeS9nCIKKworIzogYnVpbHRpbi9wdWxsLmM6NjYgYnVpbHRpbi9wdWxsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIlcyDnmoTlgLzml6DmlYjvvJolcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgKK21zZ2lkICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzzpgInpobk+XSBbPOS7k+W6kz4gWzzlvJXnlKjop4TmoLw+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MgorbXNnaWQgImNvbnRyb2wgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLmjqfliLblrZDmqKHnu4TnmoTpgJLlvZLojrflj5YiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICLlkozlkIjlubbnm7jlhbPnmoTpgInpobkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0OQorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAi5L2/55So5Y+Y5Z+65pON5L2c5Y+W5Luj5ZCI5bm25pON5L2c5Lul5ZCI5YWl5L+u5pS5IgorCisjOiBidWlsdGluL3B1bGwuYzoxNzcgYnVpbHRpbi9yZWJhc2UuYzo0NjcgYnVpbHRpbi9yZXZlcnQuYzoxMjYKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgIuWFgeiuuOW/q+i/m+W8jyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiYXV0b21hdGljYWxseSBzdGFzaC9zdGFzaCBwb3AgYmVmb3JlIGFuZCBhZnRlciByZWJhc2UiCittc2dzdHIgIuWPmOWfuuaTjeS9nOWJjeWQjuaJp+ihjOiHquWKqOi0ruiXj+WSjOW8ueWHuui0ruiXjyIKKworIzogYnVpbHRpbi9wdWxsLmM6MjAyCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICLlkozojrflj5bnm7jlhbPnmoTlj4LmlbAiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjIxMgorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgIuW8uuWItuimhuebluacrOWcsOWIhuaUryIKKworIzogYnVpbHRpbi9wdWxsLmM6MjIwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgcHVsbGVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLlubblj5Hmi4nlj5bnmoTlrZDmqKHnu4TnmoTmlbDph48iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjMyMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciBwdWxsLmZmOiAlcyIKK21zZ3N0ciAicHVsbC5mZiDnmoTlj5blgLzml6DmlYjvvJolcyIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM3Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAi5Zyo5oKo5Yia5Yia6I635Y+W5Yiw55qE5byV55So5Lit5rKh5pyJ5Y+Y5Z+65pON5L2c55qE5YCZ6YCJ44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzkKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAi5Zyo5oKo5Yia5Yia6I635Y+W5Yiw55qE5byV55So5Lit5rKh5pyJ5ZCI5bm25pON5L2c55qE5YCZ6YCJ44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDAKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICLpgJrluLjov5nmhI/lkbPnnYDmgqjmj5DkvpvkuobkuIDkuKrpgJrphY3nrKblvJXnlKjop4TmoLzkvYbmnKrog73lkozov5znq6/ljLnphY3jgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisi5oKo6KaB5rGC5LuO6L+c56iLICclcycg5ouJ5Y+W77yM5L2G5piv5pyq5oyH5a6a5LiA5Liq5YiG5pSv44CC5Zug5Li66L+Z5LiN5piv5b2T5YmNXG4iCisi5YiG5pSv6buY6K6k55qE6L+c56iL5LuT5bqT77yM5oKo5b+F6aG75Zyo5ZG95Luk6KGM5Lit5oyH5a6a5LiA5Liq5YiG5pSv5ZCN44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDggYnVpbHRpbi9yZWJhc2UuYzoxMzc1IGdpdC1wYXJzZS1yZW1vdGUuc2g6NzMKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICLmgqjlvZPliY3kuI3lnKjkuIDkuKrliIbmlK/kuIrjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MCBidWlsdGluL3B1bGwuYzo0NjUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3OQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIuivt+aMh+WumuaCqOimgeWPmOWfuuWIsOWTquS4gOS4quWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcHVsbC5jOjQ2NyBnaXQtcGFyc2UtcmVtb3RlLnNoOjgyCittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICLor7fmjIflrprmgqjopoHlkIjlubblk6rkuIDkuKrliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MyBidWlsdGluL3B1bGwuYzo0NjgKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICLor6bop4EgZ2l0LXB1bGwoMSnjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1NSBidWlsdGluL3B1bGwuYzo0NjEgYnVpbHRpbi9wdWxsLmM6NDcwCisjOiBidWlsdGluL3JlYmFzZS5jOjEzODEgZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NAorbXNnaWQgIjxyZW1vdGU+IgorbXNnc3RyICI86L+c56iLPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDU1IGJ1aWx0aW4vcHVsbC5jOjQ3MCBidWlsdGluL3B1bGwuYzo0NzUKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6NjUKK21zZ2lkICI8YnJhbmNoPiIKK21zZ3N0ciAiPOWIhuaUrz4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MyBidWlsdGluL3JlYmFzZS5jOjEzNzMgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3NQorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLlvZPliY3liIbmlK/msqHmnInot5/ouKrkv6Hmga/jgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3MiBnaXQtcGFyc2UtcmVtb3RlLnNoOjk1Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOiIKK21zZ3N0ciAi5aaC5p6c5oKo5oOz6KaB5Li65q2k5YiG5pSv5Yib5bu66Lef6Liq5L+h5oGv77yM5oKo5Y+v5Lul5omn6KGM77yaIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLmgqjnmoTphY3nva7kuK3mjIflrpropoHlkIjlubbov5znqIvnmoTlvJXnlKggJyVzJ++8jFxuIgorIuS9huaYr+ayoeacieiOt+WPluWIsOi/meS4quW8leeUqOOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgY29tbWl0ICVzIgorbXNnc3RyICLml6Dms5Xorr/pl67mj5DkuqQgJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg2NworbXNnaWQgImlnbm9yaW5nIC0tdmVyaWZ5LXNpZ25hdHVyZXMgZm9yIHJlYmFzZSIKK21zZ3N0ciAi5Li65Y+Y5Z+65pON5L2c5b+955WlIC0tdmVyaWZ5LXNpZ25hdHVyZXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkyMgorbXNnaWQgIi0tW25vLV1hdXRvc3Rhc2ggb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXJlYmFzZS4iCittc2dzdHIgIi0tW25vLV1hdXRvc3Rhc2gg6YCJ6aG55Y+q5Zyo5L2/55SoIC0tcmViYXNlIOaXtuacieaViOOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTMwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAi5pu05paw5bCa5pyq6K+e55Sf55qE5YiG5pSv77yM5Y+Y5pu05re75Yqg6Iez57Si5byV44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzQKK21zZ2lkICJwdWxsIHdpdGggcmViYXNlIgorbXNnc3RyICLlj5jln7rlvI/mi4nlj5YiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNQorbXNnaWQgInBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIuivt+aPkOS6pOaIlui0ruiXj+Wug+S7rOOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorImZldGNoIOabtOaWsOS6huW9k+WJjeeahOWIhuaUr+OAguW/q+i/m+aCqOeahOW3peS9nOWMulxuIgorIuiHs+aPkOS6pCAlc+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIuaCqOW9k+WJjeeahOW3peS9nOWMuuaXoOazleaJp+ihjOW/q+i/m+aTjeS9nOOAglxuIgorIummluWFiOaJp+ihjOWmguS4i+WRveS7pO+8mlxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyLku6Xnoa7orqTmiYDmnInmnInnlKjnmoTmlbDmja7lnYflt7Lkv53lrZjjgILnhLblkI7miafooYzkuIvpnaLnmoTlkb3ku6RcbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyLmgaLlpI3kuYvliY3nmoTnirbmgIHjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk4MQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICLml6Dms5XlsIblpJrkuKrliIbmlK/lkIjlubbliLDnqbrliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjk4NQorbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIuaXoOazleWPmOWfuuWIsOWkmuS4quWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTkyCittc2dpZCAiY2Fubm90IHJlYmFzZSB3aXRoIGxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiCittc2dzdHIgIuacrOWcsOWtkOaooee7hOS4reacieS/ruaUue+8jOaXoOazleWPmOWfuiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTkKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzzpgInpobk+XSBbPOS7k+W6kz4gWzzlvJXnlKjop4TmoLw+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjExMgorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAi5qCH562+5ZCO6Z2i5pyq5o+Q5L6bIDzmoIfnrb4+IOWPguaVsCIKKworIzogYnVpbHRpbi9wdXNoLmM6MTIyCittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIi0tZGVsZXRlIOWPquaOpeWPl+eugOWNleeahOebruagh+W8leeUqOWQjSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTY4Cittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorIlxuIgorIuS4uuS6huawuOS5heWcsOmAieaLqeS7u+S4gOmAiemhue+8jOWPguingSAnZ2l0IGhlbHAgY29uZmlnJyDkuK3nmoQgcHVzaC5kZWZhdWx044CCIgorCisjOiBidWlsdGluL3B1c2guYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCittc2dzdHIgIiIKKyLmgqjlvZPliY3liIbmlK/nmoTkuIrmuLjliIbmlK/lkozmgqjlvZPliY3liIbmlK/lkI3kuI3ljLnphY3vvIzkuLrmjqjpgIHliLDov5znqIvnmoTkuIrmuLjliIbmlK/vvIxcbiIKKyLkvb/nlKhcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIuS4uuaOqOmAgeiHs+i/nOeoi+WQjOWQjeWIhuaUr++8jOS9v+eUqFxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyLmgqjlvZPliY3kuI3lnKjkuIDkuKrliIbmlK/kuIrjgIJcbiIKKyLnjrDlnKjkuLrmjqjpgIHlvZPliY3vvIjliIbnprvlpLTmjIfpkojvvInnmoTljoblj7LvvIzkvb/nlKhcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo86L+c56iL5YiG5pSv5ZCN5a2XPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyLlvZPliY3liIbmlK8gJXMg5rKh5pyJ5a+55bqU55qE5LiK5ri45YiG5pSv44CCXG4iCisi5Li65o6o6YCB5b2T5YmN5YiG5pSv5bm25bu656uL5LiO6L+c56iL5LiK5ri455qE6Lef6Liq77yM5L2/55SoXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSvICVzIOacieWkmuS4quS4iua4uOWIhuaUr++8jOaLkue7neaOqOmAgeOAgiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKyLmgqjmraPmjqjpgIHoh7Pov5znqIsgJyVzJ++8iOWFtuW5tumdnuW9k+WJjeWIhuaUryAnJXMnIOeahOS4iua4uO+8ie+8jFxuIgorIuiAjOayoeacieWRiuivieaIkeimgeaOqOmAgeS7gOS5iOOAgeabtOaWsOWTquS4qui/nOeoi+WIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjcwCittc2dpZCAiIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgIuaCqOayoeacieS4uuaOqOmAgeaMh+WumuS7u+S9leW8leeUqOinhOagvO+8jOW5tuS4lCBwdXNoLmRlZmF1bHQg5Li6IFwibm90aGluZ1wi44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyNzcKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLmm7TmlrDooqvmi5Lnu53vvIzlm6DkuLrmgqjlvZPliY3liIbmlK/nmoTmnIDmlrDmj5DkuqTokL3lkI7kuo7lhbblr7nlupTnmoTov5znqIvliIbmlK/jgIJcbiIKKyLlho3mrKHmjqjpgIHliY3vvIzlhYjkuI7ov5znqIvlj5jmm7TlkIjlubbvvIjlpoIgJ2dpdCBwdWxsIC4uLifvvInjgILor6bop4FcbiIKKyInZ2l0IHB1c2ggLS1oZWxwJyDkuK3nmoQgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycg5bCP6IqC44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyODMKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLmm7TmlrDooqvmi5Lnu53vvIzlm6DkuLrmjqjpgIHnmoTkuIDkuKrliIbmlK/nmoTmnIDmlrDmj5DkuqTokL3lkI7kuo7lhbblr7nlupTnmoTov5znqIvliIbmlK/jgIJcbiIKKyLmo4Dlh7ror6XliIbmlK/lubbmlbTlkIjov5znqIvlj5jmm7TvvIjlpoIgJ2dpdCBwdWxsIC4uLifvvInvvIznhLblkI7lho3mjqjpgIHjgILor6bop4FcbiIKKyInZ2l0IHB1c2ggLS1oZWxwJyDkuK3nmoQgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycg5bCP6IqC44CCIgorCisjOiBidWlsdGluL3B1c2guYzoyODkKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi5pu05paw6KKr5ouS57ud77yM5Zug5Li66L+c56iL5LuT5bqT5YyF5ZCr5oKo5pys5Zyw5bCa5LiN5a2Y5Zyo55qE5o+Q5Lqk44CC6L+Z6YCa5bi45piv5Zug5Li65Y+m5aSWXG4iCisi5LiA5Liq5LuT5bqT5bey5ZCR6K+l5byV55So6L+b6KGM5LqG5o6o6YCB44CC5YaN5qyh5o6o6YCB5YmN77yM5oKo5Y+v6IO96ZyA6KaB5YWI5pW05ZCI6L+c56iL5Y+Y5pu0XG4iCisi77yI5aaCICdnaXQgcHVsbCAuLi4n77yJ44CCXG4iCisi6K+m6KeBICdnaXQgcHVzaCAtLWhlbHAnIOS4reeahCAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDlsI/oioLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5NgorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIuabtOaWsOiiq+aLkue7ne+8jOWboOS4uuivpeagh+etvuWcqOi/nOeoi+W3sue7j+WtmOWcqOOAgiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyLlpoLmnpzkuI3kvb/nlKggJy0tZm9yY2UnIOWPguaVsO+8jOaCqOS4jeiDveabtOaWsOS4gOS4quaMh+WQkemdnuaPkOS6pOWvueixoeeahOi/nOeoi+W8leeUqO+8jFxuIgorIuS5n+S4jeiDveabtOaWsOi/nOeoi+W8leeUqOiuqeWFtuaMh+WQkeS4gOS4qumdnuaPkOS6pOWvueixoeOAglxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICLmjqjpgIHliLAgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICLmjqjpgIHkuIDkupvlvJXnlKjliLAgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgIuS7k+W6kyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAi5o6o6YCB5omA5pyJ5byV55SoIgorCisjOiBidWlsdGluL3B1c2guYzo1NDQgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgIumVnOWDj+aJgOacieW8leeUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgIuWIoOmZpOW8leeUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ3Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICLmjqjpgIHmoIfnrb7vvIjkuI3og73kvb/nlKggLS1hbGwgb3IgLS1taXJyb3LvvIkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE2NworbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgIuW8uuWItuabtOaWsCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUyIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgxCittc2dpZCAiPHJlZm5hbWU+OjxleHBlY3Q+IgorbXNnc3RyICI85byV55So5ZCNPjo85pyf5pyb5YC8PiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUzIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgyCittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgIuimgeaxguW8leeUqOaXp+eahOWPluWAvOS4uuiuvuWumuWAvCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLmjqfliLblrZDmqKHnu4TnmoTpgJLlvZLmjqjpgIEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OCBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgIuS9v+eUqOeyvueugOaJk+WMhSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU5IGJ1aWx0aW4vcHVzaC5jOjU2MCBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjIKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAi5o6l5pS25YyF56iL5bqPIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAi6K6+572uIGdpdCBwdWxsL3N0YXR1cyDnmoTkuIrmuLgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInBydW5lIGxvY2FsbHkgcmVtb3ZlZCByZWZzIgorbXNnc3RyICLmuIXpmaTmnKzlnLDliKDpmaTnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NgorbXNnaWQgImJ5cGFzcyBwcmUtcHVzaCBob29rIgorbXNnc3RyICLnu5Xov4cgcHJlLXB1c2gg6ZKp5a2QIgorCisjOiBidWlsdGluL3B1c2guYzo1NjcKK21zZ2lkICJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiCittc2dzdHIgIuaOqOmAgee8uuWkseS9huacieWFs+eahOagh+etviIKKworIzogYnVpbHRpbi9wdXNoLmM6NTcwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgIueUqCBHUEcg5Li65o6o6YCB562+5ZCNIgorCisjOiBidWlsdGluL3B1c2guYzo1NzIgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1ZXN0IGF0b21pYyB0cmFuc2FjdGlvbiBvbiByZW1vdGUgc2lkZSIKK21zZ3N0ciAi6ZyA6KaB6L+c56uv5pSv5oyB5Y6f5a2Q5LqL5YqhIgorCisjOiBidWlsdGluL3B1c2guYzo1OTAKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiLS1kZWxldGUg5LiOIC0tYWxs44CBLS1taXJyb3Ig5Y+KIC0tdGFncyDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU5MgorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICItLWRlbGV0ZSDmnKrmjqXku7vkvZXlvJXnlKjmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICLlnY/nmoTku5PlupMgJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6NjEzCittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyLmsqHmnInphY3nva7mjqjpgIHnm67moIfjgIJcbiIKKyLmiJbpgJrov4flkb3ku6TooYzmjIflrpogVVJM77yM5oiW55So5LiL6Z2i5ZG95Luk6YWN572u5LiA5Liq6L+c56iL5LuT5bqTXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDzlkI3np7A+IDzlnLDlnYA+XG4iCisiXG4iCisi54S25ZCO5L2/55So6K+l6L+c56iL5LuT5bqT5ZCN5omn6KGM5o6o6YCBXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDzlkI3np7A+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYyOAorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwg5ZKMIC0tdGFncyDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjYzMAorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIOS4jeiDveWSjOW8leeUqOinhOagvOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM0Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciDlkowgLS10YWdzIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjM2Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3Ig5LiN6IO95ZKM5byV55So6KeE5qC85ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL3B1c2guYzo2MzkKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwg5ZKMIC0tbWlycm9yIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9wdXNoLmM6NjQzCittc2dpZCAicHVzaCBvcHRpb25zIG11c3Qgbm90IGhhdmUgbmV3IGxpbmUgY2hhcmFjdGVycyIKK21zZ3N0ciAi5o6o6YCB6YCJ6aG55LiN6IO95pyJ5o2i6KGM56ymIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo4Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC1iYXNlPi4uPG9sZC10aXA+IDxuZXctYmFzZT4uLjxuZXctdGlwPiIKK21zZ3N0ciAiZ2l0IHJhbmdlLWRpZmYgWzzpgInpobk+XSA8b2xkLWJhc2U+Li48b2xkLXRpcD4gPG5ldy1iYXNlPi4uPG5ldy10aXA+IgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo5Cittc2dpZCAiZ2l0IHJhbmdlLWRpZmYgWzxvcHRpb25zPl0gPG9sZC10aXA+Li4uPG5ldy10aXA+IgorbXNnc3RyICJnaXQgcmFuZ2UtZGlmZiBbPOmAiemhuT5dIDxvbGQtdGlwPi4uLjxuZXctdGlwPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MTAKK21zZ2lkICJnaXQgcmFuZ2UtZGlmZiBbPG9wdGlvbnM+XSA8YmFzZT4gPG9sZC10aXA+IDxuZXctdGlwPiIKK21zZ3N0ciAiZ2l0IHJhbmdlLWRpZmYgWzzpgInpobk+XSA8YmFzZT4gPG9sZC10aXA+IDxuZXctdGlwPiIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6MjIKK21zZ2lkICJQZXJjZW50YWdlIGJ5IHdoaWNoIGNyZWF0aW9uIGlzIHdlaWdodGVkIgorbXNnc3RyICLliJvlu7rmnYPph43nmoTnmb7liIbmr5QiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI0Cittc2dpZCAidXNlIHNpbXBsZSBkaWZmIGNvbG9ycyIKK21zZ3N0ciAi5L2/55So566A5Y2V5beu5byC6aKc6ImyIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzoyNgorbXNnaWQgIm5vdGVzIgorbXNnc3RyICLms6jop6MiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2Cittc2dpZCAicGFzc2VkIHRvICdnaXQgbG9nJyIKK21zZ3N0ciAi5Lyg6YCS57uZICdnaXQgbG9nJyIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTAgYnVpbHRpbi9yYW5nZS1kaWZmLmM6NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gLi4gaW4gcmFuZ2U6ICclcyciCittc2dzdHIgIuayoeacieWcqOiMg+WbtOS4reS9v+eUqCAuLu+8miclcyciCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjY0Cittc2dpZCAic2luZ2xlIGFyZyBmb3JtYXQgbXVzdCBiZSBzeW1tZXRyaWMgcmFuZ2UiCittc2dzdHIgIuWNleS4quWPguaVsOagvOW8j+W/hemhu+aYr+WvueensOiMg+WbtO+8iOWNs+WMheWQqy4uLu+8iSIKKworIzogYnVpbHRpbi9yYW5nZS1kaWZmLmM6NzkKK21zZ2lkICJuZWVkIHR3byBjb21taXQgcmFuZ2VzIgorbXNnc3RyICLpnIDopoHkuKTkuKrmj5DkuqTojIPlm7QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6NDEKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD085YmN57yAPikgWy0iCisidSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9POaWh+S7tj5dICgtLWVtcHR5IHwgPOagkeWvueixoTE+IFs85qCR5a+56LGhMj4gWzzmoJHlr7nosaEzPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjQKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICLlsIbntKLlvJXnu5PmnpzlhpnlhaUgPOaWh+S7tj4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI3Cittc2dpZCAib25seSBlbXB0eSB0aGUgaW5kZXgiCittc2dzdHIgIuWPquaYr+a4heepuue0ouW8lSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjkKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICLlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAi6K+75Y+W5LmL5L2Z5YaN5omn6KGM5LiA5Liq5ZCI5bm2IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMworbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAi5aaC5p6c5rKh5pyJ5paH5Lu257qn5ZCI5bm26ZyA6KaB77yM5omn6KGM5LiJ5pa55ZCI5bm2IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgIuWtmOWcqOa3u+WKoOWSjOWIoOmZpOaXtu+8jOS5n+aJp+ihjOS4ieaWueWQiOW5tiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzcKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLnsbvkvLzkuo4gLW3vvIzkvYbkuKLlvIPmnKrlkIjlubbnmoTmnaHnm64iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM4Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI85a2Q55uu5b2VPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIuivu+WPluagkeWvueixoeWIsOe0ouW8leeahCA85a2Q55uu5b2VPi8g5LiLIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE0MgorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgIueUqOWQiOW5tueahOe7k+aenOabtOaWsOW3peS9nOWMuiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDQKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgImdpdGlnbm9yZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDUKK21zZ2lkICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iCittc2dzdHIgIuWFgeiuuOW/veeVpeaWh+S7tuS4reiuvuWumueahOaWh+S7tuWPr+S7peiiq+imhuebliIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDgKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgIuWQiOW5tuWQjuS4jeajgOafpeW3peS9nOWMuiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDkKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIuS4jeabtOaWsOe0ouW8leWMuuWSjOW3peS9nOWMuiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTEKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgIui3s+i/h+W6lOeUqOeogOeWj+ajgOWHuui/h+a7pOWZqCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNTMKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgIuiwg+ivlSB1bnBhY2stdHJlZXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTU3Cittc2dpZCAic3VwcHJlc3MgZmVlZGJhY2sgbWVzc2FnZXMiCittc2dzdHIgIuaKkeWItuWPjemmiOS/oeaBryIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxODgKK21zZ2lkICJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAi5oKo6ZyA6KaB5YWI6Kej5Yaz5b2T5YmN57Si5byV55qE5Yay56qBIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjMyCittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT4gfCAtLWtlZXAtYmFzZV0gIgorIls8dXBzdHJlYW0+IFs8YnJhbmNoPl1dIgorbXNnc3RyICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDzlkb3ku6Q+XSBbLS1vbnRvIDzmlrDln7rnur8+IHwgLS1rZWVwLWJhc2VdIFs8IgorIuS4iua4uD4gWzzliIbmlK8+XV0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gLS1yb290IFs8YnJhbmNoPl0iCittc2dzdHIgIiIKKyJnaXQgcmViYXNlIFstaV0gW+mAiemhuV0gWy0tZXhlYyA85ZG95LukPl0gWy0tb250byA85paw5Z+657q/Pl0gLS1yb290IFs85YiG5pSvPl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYKK21zZ2lkICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCittc2dzdHIgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzcgYnVpbHRpbi9yZWJhc2UuYzoyMDEgYnVpbHRpbi9yZWJhc2UuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIgorbXNnc3RyICLkuI3lj6/nlKjnmoTlvoXlip7liJfooajvvJonJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NiBidWlsdGluL3JlYmFzZS5jOjIxMiBidWlsdGluL3JlYmFzZS5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIuS4jeiDveWGmeWFpSAnJXMn44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI3MQorbXNnaWQgIm5vIEhFQUQ/IgorbXNnc3RyICLmsqHmnIkgSEVBRO+8nyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJXMiCittc2dzdHIgIuaXoOazleWIm+W7uuS4tOaXtueahCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMDQKK21zZ2lkICJjb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAi5peg5rOV5qCH6K6w5Li65Lqk5LqS5byPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgIuaXoOazleeUn+aIkOW+heWKnuWIl+ihqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0MDIKK21zZ2lkICJhIGJhc2UgY29tbWl0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCAtLXVwc3RyZWFtIG9yIC0tb250byIKK21zZ3N0ciAi5L2/55SoIC0tdXBzdHJlYW0g5oiWIC0tb250byDlv4Xpobvmj5DkvpvkuIDkuKrln7rnur/mj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDY5Cittc2dpZCAia2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLkv53mjIHnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLlhYHorrjmj5DkuqTor7TmmI7kuLrnqboiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcyCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgIuWvueWQiOW5tuaPkOS6pOWPmOWfuiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzQKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAi5L+d5oyB5YWE5byf5o+Q5Lqk55qE5Y6f5aeL5YiG5pSv54K5IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NgorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIuenu+WKqOS7pSBzcXVhc2ghL2ZpeHVwISDlvIDlpLTnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc3Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICLnrb7lkI3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc5IGJ1aWx0aW4vcmViYXNlLmM6MTQ1NQorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIuaYvuekuuS4iua4uOWPmOWMlueahOW3ruW8gue7n+iuoSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODEKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgIue7p+e7reWPmOWfuiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODMKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAi6Lez6L+H5o+Q5LqkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi5Y+Y5Z+65b6F5Yqe5YiX6KGoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NgorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIuaYvuekuuW9k+WJjeihpeS4gSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODkKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi57yp55+t5b6F5Yqe5YiX6KGo5Lit55qE5o+Q5Lqk5Y+3IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIuaJqeWxleW+heWKnuWIl+ihqOS4reeahOaPkOS6pOWPtyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTMKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLmo4Dmn6XlvoXlip7liJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk1Cittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAi6YeN5paw5o6S5YiXIGZpeHVwL3NxdWFzaCDooYwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICLlnKjlvoXlip7liJfooajkuK3mj5LlhaUgZXhlYyDmiafooYzlkb3ku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk4Cittc2dpZCAib250byIKK21zZ3N0ciAib250byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAicmVzdHJpY3QtcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgIumZkOWItueJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInNxdWFzaCBvbnRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgIuS4iua4uOaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgImhlYWQtbmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgImhlYWQg5ZCN56ewIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMworbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAi5Y+Y5Z+6562W55WlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgInN0cmF0ZWd5LW9wdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE1Cittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAi562W55Wl6YCJ6aG5IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNgorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAi5YiH5o2i5YiwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNworbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICLopoHmo4Dlh7rnmoTliIbmlK/miJbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4Cittc2dpZCAib250by1uYW1lIgorbXNnc3RyICJvbnRvLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJvbnRvIG5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAiY21kIgorbXNnc3RyICJjbWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICLopoHmiafooYznmoTlkb3ku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyIGJ1aWx0aW4vcmViYXNlLmM6MTU0MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICLoh6rliqjph43mlrDlronmjpLku7vkvZXlpLHotKXnmoQgYGV4ZWNgIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0MAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICLkuI3kvb/nlKggLS1yZWJhc2UtbWVyZ2Vz77yM5YiZIC0tW25vLV1yZWJhc2UtY291c2lucyDmsqHmnInmlYjmnpwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMg6ZyA6KaB5Lqk5LqS5byP5Y+Y5Z+6IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAi5peg5rOV6I635Y+WICdvbnRvJ++8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTljp/lp4sgaGVhZO+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCittc2dzdHIgIuW/veeVpeaXoOaViOeahCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0Ze+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIuS4jeiDveivu+WPliAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIuS4jeiDveWtmOWCqCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NDkKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgIuS4jeiDveehruWumiBIRUFEIOeJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo5NzIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxCittc2dpZCAiIgorIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCittc2dzdHIgIiIKKyLmiYvlt6Xop6PlhrPmiYDmnInlhrLnqoHvvIzmiafooYwgXCJnaXQgYWRkL3JtIDzlhrLnqoHnmoTmlofku7Y+XCIg5qCH6K6wXG4iCisi5Yay56qB5bey6Kej5Yaz77yM54S25ZCO5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLjgILmgqjkuZ/lj6/ku6XmiafooYxcbiIKKyJcImdpdCByZWJhc2UgLS1za2lwXCIg5ZG95Luk6Lez6L+H6L+Z5Liq5o+Q5Lqk44CC5aaC5p6c5oOz6KaB57uI5q2i5omn6KGM5bm25Zue5YiwXG4iCisiXCJnaXQgcmViYXNlXCIg5omn6KGM5LmL5YmN55qE54q25oCB77yM5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCLjgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisiXG4iCisi5Zyo5Li66YeN5pS+6L+Z5Lqb54mI5pys6ICM5YeG5aSH6KGl5LiB5pe277yMZ2l0IOmBh+WIsOS6huS4gOS4qumUmeivr++8mlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIuWboOatpCBnaXQg5peg5rOV5a+55YW25Y+Y5Z+644CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisi6K+35oyH5a6a5oKo6KaB5Y+Y5Z+65Yiw5ZOq5Liq5YiG5pSv44CCXG4iCisi6K+m6KeBIGdpdC1yZWJhc2UoMSnjgIJcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOaDs+imgeS4uuatpOWIhuaUr+WIm+W7uui3n+i4quS/oeaBr++8jOaCqOWPr+S7peaJp+ihjO+8mlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxMworbXNnaWQgImV4ZWMgY29tbWFuZHMgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgImV4ZWMg5ZG95Luk5LiN6IO95YyF5ZCr5o2i6KGM56ymIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgIuepuueahCBleGVjIOWRveS7pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ2Cittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgIuWPmOWfuuWIsOe7meWumueahOWIhuaUr+iAjOmdnuS4iua4uCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ4Cittc2dpZCAidXNlIHRoZSBtZXJnZS1iYXNlIG9mIHVwc3RyZWFtIGFuZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQgYmFzZSIKK21zZ3N0ciAi5L2/55So5LiK5ri45ZKM5YiG5pSv55qE5ZCI5bm25Z+657q/5YGa5Li65b2T5YmN5Z+657q/IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTAKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICLlhYHorrjmiafooYwgcHJlLXJlYmFzZSDpkqnlrZAiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MgorbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAi5a6J6Z2Z44CC5pqX56S6IC0tbm8tc3RhdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDU4Cittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICLkuI3mmL7npLrkuIrmuLjlj5jljJbnmoTlt67lvILnu5/orqEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2MQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiCittc2dzdHIgIuS4uuavj+S4gOS4quaPkOS6pOa3u+WKoOS4gOS4qiBTaWduZWQtb2ZmLWJ5OiDnrb7lkI0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NAorbXNnaWQgIm1ha2UgY29tbWl0dGVyIGRhdGUgbWF0Y2ggYXV0aG9yIGRhdGUiCittc2dzdHIgIuiuqeaPkOS6pOiAheaXpeacn+WMuemFjeS9nOiAheaXpeacnyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY2Cittc2dpZCAiaWdub3JlIGF1dGhvciBkYXRlIGFuZCB1c2UgY3VycmVudCBkYXRlIgorbXNnc3RyICLlv73nlaXkvZzogIXml6XmnJ/lubbkvb/nlKjlvZPliY3ml6XmnJ8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OAorbXNnaWQgInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3ItZGF0ZSDnmoTlkIzkuYnor40iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhcHBseSciCittc2dzdHIgIuS8oOmAkue7mSAnZ2l0IGFwcGx5JyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDcyCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSIKK21zZ3N0ciAi5b+955Wl56m655m95a2X56ym55qE5Y+Y5pu0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzYgYnVpbHRpbi9yZWJhc2UuYzoxNDc5Cittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICLmi6PpgInmiYDmnInmj5DkuqTvvIzljbPkvb/mnKrkv67mlLkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICLnu6fnu60iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NAorbXNnaWQgInNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUiCittc2dzdHIgIui3s+i/h+W9k+WJjeihpeS4geW5tue7p+e7rSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODYKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgIue7iOatouW5tuajgOWHuuWOn+acieWIhuaUryIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg5Cittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAi57uI5q2i5L2G5L+d5oyBIEhFQUQg5LiN5Y+YIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAi5Zyo5Lqk5LqS5byP5Y+Y5Z+65Lit57yW6L6R5b6F5Yqe5YiX6KGoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTMKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICLmmL7npLrmraPlnKjlupTnlKjmiJblkIjlubbnmoTooaXkuIHmlofku7YiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5NgorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICLkvb/nlKjlkIjlubbnrZbnlaXov5vooYzlj5jln7oiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwMAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICLorqnnlKjmiLfnvJbovpHopoHlj5jln7rnmoTmj5DkuqTliJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwNAorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAi77yI5bey5byD55So77yJ5bCd6K+V6YeN5bu65ZCI5bm25o+Q5Lqk6ICM6Z2e5b+955Wl5a6D5LusIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDkKK21zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCittc2dzdHIgIuWPmOWfuuaXtuS/neeVmeepuuaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTExCittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAi5ZyoIC1pIOS6pOS6kuaooeW8j+S4i++8jOenu+WKqOS7pSBzcXVhc2ghL2ZpeHVwISDlvIDlpLTnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNworbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgIuWcqOaTjeS9nOWJjeWQjuaJp+ihjOiHquWKqOi0ruiXj+WSjOW8ueWHuui0ruiXjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE5Cittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgIuWPr+e8lui+keWIl+ihqOeahOavj+S4gOS4quaPkOS6pOS4i+mdouWinuWKoOS4gOihjCBleGVjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgIuWFgeiuuOmSiOWvueepuuaPkOS6pOivtOaYjueahOaPkOS6pOWPmOWfuiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI2Cittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICLlsJ3or5Xlr7nlkIjlubbmj5DkuqTlj5jln7rogIzkuI3mmK/lv73nlaXlroPku6wiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyOQorbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAi5L2/55SoICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcg5p2l5LyY5YyW5LiK5ri4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzEKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLkvb/nlKjnu5nlrprnmoTlkIjlubbnrZbnlaUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi6YCJ6aG5IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5bCG5Y+C5pWw5Lyg6YCS57uZ5ZCI5bm2562W55WlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzcKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICLlsIbmiYDmnInlj6/ovr7nmoTmj5DkuqTlj5jln7rliLDmoLnmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi5a+5IHJlYmFzZS51c2VCdWlsdGluIOeahOaUr+aMgeW3suiiq+WIoOmZpO+8gVxuIgorIuivpuingSAnZ2l0IGhlbHAgY29uZmlnJyDkuK3nmoTmnaHnm67jgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICLnnIvotbfmnaUgJ2dpdC1hbScg5q2j5Zyo5omn6KGM5Lit44CC5peg5rOV5Y+Y5Z+644CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDEKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIOiiq+W8g+eUqOOAgueUqCAtLXJlYmFzZS1tZXJnZXMg5Luj5pu/44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDYKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgIuS4jeiDveWwhiAnLS1rZWVwLWJhc2UnIOWSjCAnLS1vbnRvJyDnu4TlkIjkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwOAorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAi5LiN6IO95bCGICctLWtlZXAtYmFzZScg5ZKMICctLXJvb3QnIOe7hOWQiOS9v+eUqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAi5rKh5pyJ5q2j5Zyo6L+b6KGM55qE5Y+Y5Z+677yfIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MTYKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIuWKqOS9nCAtLWVkaXQtdG9kbyDlj6rog73nlKjlnKjkuqTkupLlvI/lj5jln7rov4fnqIvkuK3jgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYzOQorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIuS4jeiDveivu+WPliBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTEKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyLmgqjlv4XpobvnvJbovpHmiYDmnInnmoTlkIjlubblhrLnqoHvvIznhLblkI7pgJrov4cgZ2l0IGFkZFxuIgorIuWRveS7pOWwhuWug+S7rOagh+iusOS4uuW3suino+WGsyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjcwCittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAi5peg5rOV5Lii5byD5bel5L2c5Yy65Y+Y5pu0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAi5peg5rOV56e75ZueICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICVzIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQlc1xuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCVzXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS5cbiIKK21zZ3N0ciAiIgorIuS8vOS5juW3suacieS4gOS4qiAlcyDnm67lvZXvvIzmiJHmgIDnlpHmgqjmraPlpITkuo7lj6blpJbkuIDkuKrlj5jln7rmk43kvZzov4fnqIvkuK3jgIJcbiIKKyLlpoLmnpzmmK/ov5nmoLfvvIzor7fmiafooYxcbiIKKyJcdCVzXG4iCisi5aaC5p6c5LiN5piv6L+Z5qC377yM6K+35omn6KGMXG4iCisiXHQlc1xuIgorIueEtuWQjuWGjemHjeaWsOaJp+ihjOOAgiDkuLrpgb/lhY3kuKLlpLHph43opoHmlbDmja7vvIzmiJHlt7Lnu4/lgZzmraLlvZPliY3mk43kvZzjgIJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzU3Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLlvIDlhbMgYEMnIOacn+acm+S4gOS4quaVsOWtl+WAvCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgIuacquefpeaooeW8j++8miVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MjAKK21zZ2lkICItLXN0cmF0ZWd5IHJlcXVpcmVzIC0tbWVyZ2Ugb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1zdHJhdGVneSDpnIDopoEgLS1tZXJnZSDmiJYgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODYwCittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMg6ZyA6KaBIC0tZXhlYyDmiJYgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODcyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorbXNnc3RyICLkuI3og73lsIYgYW0g6YCJ6aG55LiO5Lqk5LqS5oiW5ZCI5bm26YCJ6aG55ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgIuS4jeiDveWwhiAnLS1wcmVzZXJ2ZS1tZXJnZXMnIOWSjCAnLS1yZWJhc2UtbWVyZ2VzJyDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5NQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICIiCisi6ZSZ6K+v77ya5LiN6IO95bCGICctLXByZXNlcnZlLW1lcmdlcycg5ZKMICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE5LiK5ri4ICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTkyNQorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHJvb3QgY29tbWl0IgorbXNnc3RyICLkuI3og73liJvlu7rmlrDnmoTmoLnmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2Ugd2l0aCBicmFuY2giCittc2dzdHIgIiclcyfvvJrlj6rpnIDopoHkuI7liIbmlK/nmoTkuIDkuKrlkIjlubbln7rnur8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBuZWVkIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UiCittc2dzdHIgIiclcyfvvJrlj6rpnIDopoHkuIDkuKrlkIjlubbln7rnur8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdCAnJXMnIgorbXNnc3RyICLmsqHmnInmjIflkJHkuIDkuKrmnInmlYjnmoTmj5DkuqQgJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaC9jb21taXQgJyVzJyIKK21zZ3N0ciAi6Ie05ZG96ZSZ6K+v77ya5peg5q2k5YiG5pSvL+aPkOS6pCAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5OTUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlZjogJXMiCittc2dzdHIgIuayoeaciei/meagt+eahOW8leeUqO+8miVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMDYKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHRvIGEgcmV2aXNpb24iCittc2dzdHIgIuaXoOazleWwhiBIRUFEIOino+aekOS4uuS4gOS4queJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ0Cittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAi5peg5rOVIGF1dG9zdGFzaCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgc3Rhc2ggcmVzcG9uc2U6ICclcyciCittc2dzdHIgIuaEj+WklueahCBzdGFzaCDlk43lupTvvJonJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIuS4jeiDveS4uiAnJXMnIOWIm+W7uuebruW9lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAlc1xuIgorbXNnc3RyICLliJvlu7rkuoYgYXV0b3N0YXNo77yaJXNcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDU5Cittc2dpZCAiY291bGQgbm90IHJlc2V0IC0taGFyZCIKK21zZ3N0ciAi5peg5rOVIHJlc2V0IC0taGFyZCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMDY4Cittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAi6K+35o+Q5Lqk5oiW6LSu6JeP5L+u5pS544CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICclcyciCittc2dzdHIgIuaXoOazleino+aekCAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN3aXRjaCB0byAlcyIKK21zZ3N0ciAi5peg5rOV5YiH5o2i5YiwICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMTkKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJIRUFEIOaYr+acgOaWsOeahOOAgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUuXG4iCittc2dzdHIgIuW9k+WJjeWIhuaUryAlcyDmmK/mnIDmlrDnmoTjgIJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTI5Cittc2dpZCAiSEVBRCBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiSEVBRCDmmK/mnIDmlrDnmoTvvIzlvLrliLblj5jln7rjgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAlcyBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLlxuIgorbXNnc3RyICLlvZPliY3liIbmlK8gJXMg5piv5pyA5paw55qE77yM5by65Yi25Y+Y5Z+644CCXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEzOQorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJwcmUtcmViYXNlIOmSqeWtkOaLkue7neS6huWPmOWfuuaTjeS9nOOAgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgdG8gJXM6XG4iCittc2dzdHIgIuWIsCAlcyDnmoTlj5jmm7TvvJpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAlcyB0byAlczpcbiIKK21zZ3N0ciAi5LuOICVzIOWIsCAlcyDnmoTlj5jmm7TvvJpcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLlxuIgorbXNnc3RyICLpppblhYjvvIzlm57pgIDlpLTmjIfpkojku6Xkvr/lnKjlhbbkuIrph43mlL7mgqjnmoTlt6XkvZwuLi5cbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTgzCittc2dpZCAiQ291bGQgbm90IGRldGFjaCBIRUFEIgorbXNnc3RyICLml6Dms5XliIbnprvlpLTmjIfpkogiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAlcyB0byAlcy5cbiIKK21zZ3N0ciAi5b+r6L+bICVzIOWIsCAlc+OAglxuIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjMyCittc2dpZCAiZ2l0IHJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iCittc2dzdHIgImdpdCByZWNlaXZlLXBhY2sgPOS7k+W6k+ebruW9lT4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODMwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnlcbiIKKyJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudFxuIgorIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaFxuIgorInRoZSB3b3JrIHRyZWUgdG8gSEVBRC5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCB0aGUgJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVcbiIKKyJ0byAnaWdub3JlJyBvciAnd2FybicgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IHB1c2hpbmcgaW50b1xuIgorIml0cyBjdXJyZW50IGJyYW5jaDsgaG93ZXZlciwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQgdW5sZXNzIHlvdVxuIgorImFycmFuZ2VkIHRvIHVwZGF0ZSBpdHMgd29yayB0cmVlIHRvIG1hdGNoIHdoYXQgeW91IHB1c2hlZCBpbiBzb21lXG4iCisib3RoZXIgd2F5LlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0XG4iCisiJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisi6buY6K6k56aB5q2i5pu05paw6Z2e57qv5LuT5bqT55qE5b2T5YmN5YiG5pSv77yM5Zug5Li65oKo5o6o6YCB55qE5YaF5a655bCG5a+86Ie057Si5byV5ZKM5bel5L2c5Yy6XG4iCisi5LiN5LiA6Ie077yM5bm25LiU5bCG6ZyA6KaB5omn6KGMICdnaXQgcmVzZXQgLS1oYXJkJyDlsIblt6XkvZzljLrljLnphY3liLAgSEVBROOAglxuIgorIlxuIgorIuaCqOWPr+S7peWcqOi/nOeoi+S7k+W6k+S4reiuvue9riAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcg6YWN572u5Y+Y6YeP5Li6XG4iCisiJ2lnbm9yZScg5oiWICd3YXJuJyDku6XlhYHorrjmjqjpgIHliLDlvZPliY3liIbmlK/jgILnhLbogIzkuI3mjqjojZDov5nkuYjlgZrvvIzpmaTpnZ7mgqhcbiIKKyLnlKjmn5Dnp43mlrnlvI/lsIblhbblt6XkvZzljLrmm7TmlrDoh7PmgqjmjqjpgIHnmoTnirbmgIHjgIJcbiIKKyJcbiIKKyLoi6XopoHlsY/olL3mraTkv6Hmga/kuJTkv53mjIHpu5jorqTooYzkuLrvvIzorr7nva4gJ3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2gnXG4iCisi6YWN572u5Y+Y6YeP5Li6ICdyZWZ1c2Un44CCIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjg1MAorbXNnaWQgIiIKKyJCeSBkZWZhdWx0LCBkZWxldGluZyB0aGUgY3VycmVudCBicmFuY2ggaXMgZGVuaWVkLCBiZWNhdXNlIHRoZSBuZXh0XG4iCisiJ2dpdCBjbG9uZScgd29uJ3QgcmVzdWx0IGluIGFueSBmaWxlIGNoZWNrZWQgb3V0LCBjYXVzaW5nIGNvbmZ1c2lvbi5cbiIKKyJcbiIKKyJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0b1xuIgorIid3YXJuJyBvciAnaWdub3JlJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgZGVsZXRpbmcgdGhlXG4iCisiY3VycmVudCBicmFuY2gsIHdpdGggb3Igd2l0aG91dCBhIHdhcm5pbmcgbWVzc2FnZS5cbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSwgeW91IGNhbiBzZXQgaXQgdG8gJ3JlZnVzZScuIgorbXNnc3RyICIiCisi6buY6K6k56aB5q2i5Yig6Zmk5b2T5YmN5YiG5pSv77yM5Zug5Li65LiL5LiA5qyhICdnaXQgY2xvbmUnIOWwhuS4jeS8muajgOWHuuS7u+S9leaWh+S7tu+8jFxuIgorIuWvvOiHtOWbsOaDkeOAglxuIgorIlxuIgorIuaCqOWPr+S7peWcqOi/nOeoi+S7k+W6k+S4reiuvue9riAncmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCcg6YWN572u5Y+Y6YeP5Li6XG4iCisiJ3dhcm4n77yI5pi+56S66K2m5ZGK5L+h5oGv77yJ5oiWICdpZ25vcmUn77yI5b+955Wl6K2m5ZGK5L+h5oGv77yJ5Lul5YWB6K645Yig6Zmk5b2T5YmN5YiG5pSv44CCXG4iCisiXG4iCisi6Iul6KaB5bGP6JS95q2k5L+h5oGv77yM5oKo5Y+v5Lul6K6+572u5a6D5Li6ICdyZWZ1c2Un44CCIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5MzYKK21zZ2lkICJxdWlldCIKK21zZ3N0ciAi6Z2Z6buY5qih5byPIgorCisjOiBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NTAKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAi5oKo5b+F6aG75oyH5a6a5LiA5Liq55uu5b2V44CCIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjE3Cittc2dpZCAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLSIKKyJyZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9POaXtumXtD5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT085pe26Ze0Pl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gPOW8lSIKKyLnlKg+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjIyCittc2dpZCAiIgorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSAiCisiPHJlZnM+Li4uIgorbXNnc3RyICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIDzlvJUiCisi55SoPi4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzoyNQorbXNnaWQgImdpdCByZWZsb2cgZXhpc3RzIDxyZWY+IgorbXNnc3RyICJnaXQgcmVmbG9nIGV4aXN0cyA85byV55SoPiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NjcgYnVpbHRpbi9yZWZsb2cuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5pe26Ze05oizIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nIHJlYWNoYWJsZSBvYmplY3RzLi4uIgorbXNnc3RyICLmraPlnKjmoIforrDlj6/ovr7lr7nosaEuLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyBub3doZXJlISIKK21zZ3N0ciAiJXMg5oyH5ZCR5LiN5a2Y5Zyo77yBIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjY5NQorbXNnaWQgIm5vIHJlZmxvZyBzcGVjaWZpZWQgdG8gZGVsZXRlIgorbXNnc3RyICLmnKrmjIflrpropoHliKDpmaTnmoTlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJlZmxvZzogJXMiCittc2dzdHIgIuS4jeaYr+S4gOS4quW8leeUqOaXpeW/l++8miVzIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJubyByZWZsb2cgZm9yICclcyciCittc2dzdHIgIuayoeaciSAnJXMnIOeahOW8leeUqOaXpeW/lyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIKK21zZ3N0ciAi5peg5pWI55qE5byV55So5qC85byP77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzY0Cittc2dpZCAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKK21zZ3N0ciAiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPOWIhuaUrz5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPOWQjeensD4gPOWcsOWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTggYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA85pen5ZCN56ewPiA85paw5ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOSBidWlsdGluL3JlbW90ZS5jOjQzCittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMCBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA85ZCN56ewPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPOWIhuaUrz4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPOWQjeensD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPOWQjeensD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPOe7hD4gfCA86L+c56iLPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPOWQjeensD4gPOWIhuaUrz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjUgYnVpbHRpbi9yZW1vdGUuYzo3NAorbXNnaWQgImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPOWQjeensD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjYgYnVpbHRpbi9yZW1vdGUuYzo3OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDzlkI3np7A+IDzmlrDnmoTlnLDlnYA+IFs85pen55qE5Zyw5Z2APl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjcgYnVpbHRpbi9yZW1vdGUuYzo4MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA85ZCN56ewPiA85paw55qE5Zyw5Z2APiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOCBidWlsdGluL3JlbW90ZS5jOjgxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDzlkI3np7A+IDzlnLDlnYA+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzCittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbPOmAiemhuT5dIDzlkI3np7A+IDzlnLDlnYA+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjUzCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA85ZCN56ewPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPOWQjeensD4gPOWIhuaUrz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTkKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzzpgInpobk+XSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs86YCJ6aG5Pl0gPOWQjeensD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjkKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzzpgInpobk+XSBbPOe7hD4gfCA86L+c56iLPl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIuabtOaWsCAlcyDkuK0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIOmAiemhueWNsemZqeS4lOi/h+aXtu+8jOivt+S9v+eUqCAtLW1pcnJvcj1mZXRjaFxuIgorIlx0IOaIliAtLW1pcnJvcj1wdXNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquefpeeahOmVnOWDj+WPguaVsO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgIuaKk+WPlui/nOeoi+eahOWIhuaUryIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICLmipPlj5bml7blr7zlhaXmiYDmnInnmoTmoIfnrb7lkozlhbPogZTlr7nosaEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTY4Cittc2dpZCAib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIgorbXNnc3RyICLmiJbkuI3mipPlj5bku7vkvZXmoIfnrb7vvIgtLW5vLXRhZ3PvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAi6Lef6Liq55qE5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MQorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgIuS4u+e6v+WIhuaUryIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzMKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAi5oqK6L+c56iL6K6+572u5Li655So5Lul5o6o6YCB5oiW5oqT5Y+W55qE6ZWc5YOPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgIuaMh+WumuS4gOS4qiBtYXN0ZXIg5YiG5pSv5bm25L2/55SoIC0tbWlycm9yIOmAiemhueayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICLmjIflrpropoHot5/ouKrnmoTliIbmlK/lj6rlnKjkuI7ojrflj5bplZzlg4/lkIzml7bkvb/nlKjmiY3mnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjM2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIui/nOeoiyAlcyDlt7Lnu4/lrZjlnKjjgIIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTk4IGJ1aWx0aW4vcmVtb3RlLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE6L+c56iL5ZCN56ewIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIuaXoOazleiuvue9riBtYXN0ZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIuaXoOazleW+l+WIsOW8leeUqOinhOagvCAlcyDnmoTojrflj5bliJfooagiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDQzIGJ1aWx0aW4vcmVtb3RlLmM6NDUxCittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAi77yI5Yy56YWN77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ1NQorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICLvvIjliKDpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjI5IGJ1aWx0aW4vcmVtb3RlLmM6NzY0IGJ1aWx0aW4vcmVtb3RlLmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAnJXMnIgorbXNnc3RyICLmsqHmnInmraTov5znqIvku5PlupPvvJonJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO96YeN5ZG95ZCN6YWN572u5bCP6IqCICclcycg5YiwICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIuayoeacieabtOaWsOmdnum7mOiupOeahOiOt+WPluW8leeUqOinhOagvFxuIgorIlx0JXNcbiIKKyJcdOWmguaenOW/heimgeivt+aJi+WKqOabtOaWsOmFjee9ruOAgiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIuWIoOmZpCAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIuWIm+W7uiAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDEKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAi5rOo5oSP77yacmVmL3JlbW90ZXMg5bGC57qn5LmL5aSW55qE5LiA5Liq5YiG5pSv5pyq6KKr56e76Zmk44CC6KaB5Yig6Zmk5a6D77yM5L2/55So77yaIgorbXNnc3RyWzFdICLms6jmhI/vvJpyZWYvcmVtb3RlcyDlsYLnuqfkuYvlpJbnmoTkuIDkupvliIbmlK/mnKrooqvnp7vpmaTjgILopoHliKDpmaTlroPku6zvvIzkvb/nlKjvvJoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAi5LiN6IO956e76Zmk6YWN572u5bCP6IqCICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIOaWsOeahO+8iOS4i+S4gOasoeiOt+WPluWwhuWtmOWCqOS6jiByZW1vdGVzLyVz77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkxOQorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIg5bey6Lef6LiqIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMQorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIg6L+H5pe277yI5L2/55SoICdnaXQgcmVtb3RlIHBydW5lJyDmnaXnp7vpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIzCittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICLml6DmlYjnmoQgYnJhbmNoLiVzLm1lcmdl77yM5LiN6IO95Y+Y5Z+65Yiw5LiA5Liq5Lul5LiK55qE5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgb250byByZW1vdGUgJXMiCittc2dzdHIgIuS6pOS6kuW8j+WPmOWfuuWIsOi/nOeoiyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBpbnRlcmFjdGl2ZWx5ICh3aXRoIG1lcmdlcykgb250byByZW1vdGUgJXMiCittc2dzdHIgIuS6pOS6kuW8j+WPmOWfuu+8iOWQq+WQiOW5tuaPkOS6pO+8ieWIsOi/nOeoiyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi5Y+Y5Z+65Yiw6L+c56iLICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIg5LiO6L+c56iLICVzIOWQiOW5tiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICLkuI7ov5znqIsgJXMg5ZCI5bm2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlLSpzICAgIGFuZCB3aXRoIHJlbW90ZSAlc1xuIgorbXNnc3RyICIlLSpzICAgIOS7peWPiuWSjOi/nOeoiyAlc1xuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgIuWIm+W7uiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICLliKDpmaQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzOAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIuacgOaWsCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQxCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAi5Y+v5b+r6L+bIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAi5pys5Zyw5bey6L+H5pe2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg5by65Yi25o6o6YCB6IezICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIOaOqOmAgeiHsyAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIOW8uuWItuaOqOmAgeiHsyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg5o6o6YCB6IezICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjkKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAi5LiN5p+l6K+i6L+c56iLIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiog6L+c56iLICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIOiOt+WPluWcsOWdgO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTggYnVpbHRpbi9yZW1vdGUuYzoxMTc0IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMworbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIo5pegIFVSTCkiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gJzonIHNob3VsZCBhbGlnbgorIy4gd2l0aCB0aGUgb25lIGluICIgRmV0Y2ggVVJMOiAlcyIKKyMuIHRyYW5zbGF0aW9uLgorIy4KKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MiBidWlsdGluL3JlbW90ZS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIOaOqOmAgeWcsOWdgO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYgYnVpbHRpbi9yZW1vdGUuYzoxMTc4IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBIRUFEIOWIhuaUr++8miVzIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorbXNnaWQgIihub3QgcXVlcmllZCkiCittc2dzdHIgIu+8iOacquafpeivou+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4Cittc2dpZCAiKHVua25vd24pIgorbXNnc3RyICLvvIjmnKrnn6XvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIEhFQUQg5YiG5pSv77yI6L+c56iLIEhFQUQg5qih57OK77yM5Y+v6IO95piv5LiL5YiX5Lit55qE5LiA5Liq77yJ77yaXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIOi/nOeoi+WIhuaUr++8miVzIgorbXNnc3RyWzFdICIgIOi/nOeoi+WIhuaUr++8miVzIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5NyBidWlsdGluL3JlbW90ZS5jOjEyMjMKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIu+8iOeKtuaAgeacquafpeivou+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA2Cittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAg5Li6ICdnaXQgcHVsbCcg6YWN572u55qE5pys5Zyw5YiG5pSv77yaIgorbXNnc3RyWzFdICIgIOS4uiAnZ2l0IHB1bGwnIOmFjee9rueahOacrOWcsOWIhuaUr++8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE0Cittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICDmnKzlnLDlvJXnlKjlsIblnKggJ2dpdCBwdXNoJyDml7booqvplZzlg48iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICDkuLogJ2dpdCBwdXNoJyDphY3nva7nmoTmnKzlnLDlvJXnlKglc++8miIKK21zZ3N0clsxXSAiICDkuLogJ2dpdCBwdXNoJyDphY3nva7nmoTmnKzlnLDlvJXnlKglc++8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQxCittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLmoLnmja7ov5znqIvorr7nva4gcmVmcy9yZW1vdGVzLzzlkI3np7A+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI0MworbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIuWIoOmZpCByZWZzL3JlbW90ZXMvPOWQjeensD4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU4Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAi5peg5rOV56Gu5a6a6L+c56iLIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI2MAorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICLlpJrkuKrov5znqIsgSEVBRCDliIbmlK/jgILor7fmmI7noa7lnLDpgInmi6nkuIDkuKrnlKjlkb3ku6TvvJoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICLml6Dms5XliKDpmaQgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjlvJXnlKjvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAi5LiN6IO96K6+572uICVzIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMg5bCG5oiQ5Li65oKs56m654q25oCB77yBIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDlt7LmiJDkuLrmgqznqbrnirbmgIHvvIEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLkv67liaogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkzvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFvlsIbliKDpmaRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFvlt7LliKDpmaRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNzQKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLmipPlj5blkI7muIXpmaTov5znqIsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNyBidWlsdGluL3JlbW90ZS5jOjE0OTEgYnVpbHRpbi9yZW1vdGUuYzoxNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIuayoeacieatpOi/nOeoiyAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTMKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICLmt7vliqDliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+Wumui/nOeoiyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDc3Cittc2dpZCAicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiCittc2dzdHIgIuafpeivouaOqOmAgSBVUkwg5Zyw5Z2A77yM6ICM6Z2e6I635Y+WIFVSTCDlnLDlnYAiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3OQorbXNnaWQgInJldHVybiBhbGwgVVJMcyIKK21zZ3N0ciAi6L+U5Zue5omA5pyJIFVSTCDlnLDlnYAiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUwNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBVUkxzIGNvbmZpZ3VyZWQgZm9yIHJlbW90ZSAnJXMnIgorbXNnc3RyICLmsqHmnInnu5nov5znqIvku5PlupMgJyVzJyDorr7lrpogVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzMKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAi5pON5L2c5o6o6YCBIFVSTFMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNQorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgIua3u+WKoCBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNworbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICLliKDpmaQgVVJMUyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ0Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSDml6DmhI/kuYkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIuaXoOaViOeahOaXpyBVUkwg5Yy56YWN5qih54mI77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIuacquaJvuWIsOatpCBVUkzvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkzCittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICLlsIbkuI3kvJrliKDpmaTmiYDmnInpnZ7mjqjpgIEgVVJMIOWcsOWdgCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyMworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzzpgInpobk+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+56LGhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjIgYnVpbHRpbi9yZXBsYWNlLmM6Mzc4IGJ1aWx0aW4vcmVwbGFjZS5jOjQyMworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaHlkI3vvJonJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCBvYmplY3QgdHlwZSBmb3IgJXMiCittc2dzdHIgIuaXoOazleW+l+WIsCAlcyDnmoTlr7nosaHnsbvlnosiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM0MgorbXNnaWQgImVkaXRpbmcgb2JqZWN0IGZpbGUgZmFpbGVkIgorbXNnc3RyICLnvJbovpHlr7nosaHmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICLmlrDlr7nosaHlkozml6flr7nosaHnm7jlkIzvvJonJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIGFzIGEgY29tbWl0IgorbXNnc3RyICLml6Dms5XlsIYgJXMg6Kej5p6Q5Li65LiA5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLmj5DkuqQgJyVzJyDkuK3lkKvmnInmjZ/lnY/nmoTlkIjlubbmoIfnrb4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgIuaPkOS6pCAnJXMnIOS4reWQq+acieagvOW8j+mUmeivr+eahOWQiOW5tuagh+etviIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyB1c2UgLS1lZGl0ICIKKyJpbnN0ZWFkIG9mIC0tZ3JhZnQiCittc2dzdHIgIuWOn+Wni+aPkOS6pCAnJXMnIOWMheWQq+W3sue7j+S4ouW8g+eahOWQiOW5tuagh+etviAnJXMn77yM5L2/55SoIC0tZWRpdCDku6Pmm78gLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlIgorbXNnc3RyICLljp/lp4vmj5DkuqQgJyVzJyDkuK3mnInkuIDkuKogZ3BnIOetvuWQjSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDY5Cittc2dpZCAidGhlIHNpZ25hdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHJlcGxhY2VtZW50IGNvbW1pdCEiCittc2dzdHIgIuWcqOabv+aNoueahOaPkOS6pOS4reetvuWQjeWwhuiiq+enu+mZpO+8gSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICLkuI3og73kuLogJyVzJyDlhpnmm7/mjaLmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJncmFmdCBmb3IgJyVzJyB1bm5lY2Vzc2FyeSIKK21zZ3N0ciAi5a+5ICclcycg56e75qSN5rKh5pyJ5b+F6KaBIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGNvbW1pdCBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIG9uZTogJyVzJyIKK21zZ3N0ciAi5paw5o+Q5Lqk5ZKM5pen55qE5LiA5qC377yaJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgY29udmVydCB0aGUgZm9sbG93aW5nIGdyYWZ0KHMpOlxuIgorIiVzIgorbXNnc3RyICIiCisi5LiN6IO96L2s5o2i5LiL5YiX56e75qSN77yaXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0NworbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICLliJflh7rmm7/mjaLnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU0OAorbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgIuWIoOmZpOabv+aNoueahOW8leeUqCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ5Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgIue8lui+keeOsOWtmOeahOWvueixoSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUwCittc2dpZCAiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIKK21zZ3N0ciAi5L+u5pS55LiA5Liq5o+Q5Lqk55qE54i25o+Q5LqkIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTEKK21zZ2lkICJjb252ZXJ0IGV4aXN0aW5nIGdyYWZ0IGZpbGUiCittc2dzdHIgIui9rOaNoueOsOWtmOeahOenu+akjeaWh+S7tiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTUyCittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAi5aaC5p6c5a2Y5Zyo5YiZ5pu/5o2i5byV55SoIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTQKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIuS4jeimgeS4uiAtLWVkaXQg5pON5L2c576O6KeC5pi+56S65YaF5a65IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgIuS9v+eUqOatpOagvOW8jyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTY4Cittc2dpZCAiLS1mb3JtYXQgY2Fubm90IGJlIHVzZWQgd2hlbiBub3QgbGlzdGluZyIKK21zZ3N0ciAi5LiN5YiX5Ye65pe25LiN6IO95L2/55SoIC0tZm9ybWF0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NzYKK21zZ2lkICItZiBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gd3JpdGluZyBhIHJlcGxhY2VtZW50IgorbXNnc3RyICLlj6rmnInlhpnkuIDkuKrmm7/mjaLml7YgLWYg5omN5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODAKK21zZ2lkICItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IgorbXNnc3RyICItLXJhdyDlj6rmnInlkowgLS1lZGl0IOWFseeUqOaJjeacieaEj+S5iSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTg2Cittc2dpZCAiLWQgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZCDpnIDopoHoh7PlsJHkuIDkuKrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5MgorbXNnaWQgImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIgorbXNnc3RyICLplJnor6/nmoTlj4LmlbDkuKrmlbAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU5OAorbXNnaWQgIi1lIG5lZWRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZSDpnIDopoHkuJTku4XpnIDopoHkuIDkuKrlj4LmlbAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYwNAorbXNnaWQgIi1nIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIKK21zZ3N0ciAiLWcg6ZyA6KaB6Iez5bCR5LiA5Liq5Y+C5pWwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTAKK21zZ2lkICItLWNvbnZlcnQtZ3JhZnQtZmlsZSB0YWtlcyBubyBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb252ZXJ0LWdyYWZ0LWZpbGUg5LiN5bim5Y+C5pWwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo2MTYKK21zZ2lkICJvbmx5IG9uZSBwYXR0ZXJuIGNhbiBiZSBnaXZlbiB3aXRoIC1sIgorbXNnc3RyICLlj6rog73kuLogLWwg5o+Q5L6b5LiA5Liq5qih5byPIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEzCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPOi3r+W+hD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjYwCittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgIuWcqOe0ouW8leS4reazqOWGjOW5suWHgOeahOino+WGs+aWueahiCIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo3OQorbXNnaWQgIidnaXQgcmVyZXJlIGZvcmdldCcgd2l0aG91dCBwYXRocyBpcyBkZXByZWNhdGVkIgorbXNnc3RyICLmsqHmnInot6/lvoTnmoQgJ2dpdCByZXJlcmUgZm9yZ2V0JyDlt7Lnu4/ov4fml7YiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAnJXMnIgorbXNnc3RyICLml6Dms5XkuLogJyVzJyDnlJ/miJDlt67lvIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMgorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzzmj5DkuqQ+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiZ2l0IHJlc2V0IFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWzzmoJHlr7nosaE+XSBbLS1dIDzot6/lvoTooajovr7lvI8+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzx0cmVlLWlzaD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzzmoJHlr7nosaE+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRoc3BlYz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPOagkeWvueixoT5dIFstLV0gWzzot6/lvoTooajovr7lvI8+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAibWl4ZWQiCittc2dzdHIgIua3t+adgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAic29mdCIKK21zZ3N0ciAi6L2v5oCnIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJoYXJkIgorbXNnc3RyICLnoazmgKciCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1lcmdlIgorbXNnc3RyICLlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgImtlZXAiCittc2dzdHIgIuS/neaMgSIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIuaCqOayoeacieS4gOS4quacieaViOeahCBIRUFE44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICLml6Dms5Xmib7liLAgSEVBRCDmjIflkJHnmoTmoJHjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAi5peg5rOV5om+5YiwICVzIOaMh+WQkeeahOagkeOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCDnjrDlnKjkvY3kuo4gJXMiCisKKyMgIOivkeiAhe+8muaxieWtl+S5i+mXtOaXoOepuuagvO+8jOaVheWIoOmZpCVz5YmN5ZCO56m65qC8CisjOiBidWlsdGluL3Jlc2V0LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIuWcqOWQiOW5tui/h+eoi+S4reS4jeiDveWBmiVz6YeN572u5pON5L2c44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk0IGJ1aWx0aW4vc3Rhc2guYzo1MTkgYnVpbHRpbi9zdGFzaC5jOjU5NAorIzogYnVpbHRpbi9zdGFzaC5jOjYxOAorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgIuWuiemdmeaooeW8j++8jOWPquaKpeWRiumUmeivryIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NgorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICLph43nva4gSEVBRCDlkozntKLlvJUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTcKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgIuWPqumHjee9riBIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjk5IGJ1aWx0aW4vcmVzZXQuYzozMDEKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICLph43nva4gSEVBROOAgee0ouW8leWSjOW3peS9nOWMuiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMworbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAi6YeN572uIEhFQUQg5L2G5L+d5a2Y5pys5Zyw5Y+Y5pu0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA5Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIuWwhuWIoOmZpOeahOi3r+W+hOagh+iusOS4uueojeWQjua3u+WKoCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIgorbXNnc3RyICLml6Dms5XlsIYgJyVzJyDop6PmnpDkuLrkuIDkuKrmnInmlYjnmoTniYjmnKzjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICLml6Dms5XlsIYgJyVzJyDop6PmnpDkuLrkuIDkuKrmnInmlYjnmoTmoJHlr7nosaHjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjAKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2gg5LiOIC0te2hhcmTjgIFtaXhlZOOAgXNvZnR9IOmAiemhueS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1taXhlZCDluKbot6/lvoTlt7LlvIPnlKjvvIzogIzmmK/nlKggJ2dpdCByZXNldCAtLSA86Lev5b6EPifjgIIiCisKKyMgIOivkeiAhe+8muaxieWtl+S5i+mXtOaXoOepuuagvO+8jOaVheWIoOmZpCVz5YmN5ZCO56m65qC8CisjOiBidWlsdGluL3Jlc2V0LmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAi5LiN6IO95bim6Lev5b6E6L+b6KGMJXPph43nva7jgIIiCisKKyMgIOivkeiAhe+8muaxieWtl+S5i+mXtOaXoOepuuagvO+8jOaVheWIoOmZpCVz5YmN5ZCO56m65qC8CisjOiBidWlsdGluL3Jlc2V0LmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLkuI3og73lr7nnuq/ku5PlupPov5vooYwlc+mHjee9riIKKworIzogYnVpbHRpbi9yZXNldC5jOjM5MQorbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiDlj6rog73lkowgLS1taXhlZCDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MTIKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAi6YeN572u5ZCO5Y+W5raI5pqC5a2Y55qE5Y+Y5pu077yaIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldC4gIFlvdSBjYW5cbiIKKyJ1c2UgJy0tcXVpZXQnIHRvIGF2b2lkIHRoaXMuICBTZXQgdGhlIGNvbmZpZyBzZXR0aW5nIHJlc2V0LnF1aWV0IHRvIHRydWVcbiIKKyJ0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLph43nva7lkI7vvIzmnprkuL7mnKrmmoLlrZjlj5jmm7ToirHotLnkuoYgJS4yZiDnp5LjgIIg5oKo5Y+v5Lul5L2/55SoICctLXF1aWV0JyDpgb/lhY3mraTmg4XlhrXjgIJcbiIKKyLlsIbphY3nva7lj5jph48gcmVzZXQucXVpZXQg6K6+572u5Li6IHRydWUg5Y+v5L2/5YW25oiQ5Li66buY6K6k5YC844CCXG4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIuS4jeiDvemHjee9rue0ouW8leaWh+S7tuiHs+eJiOacrCAnJXMn44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDI5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAi5LiN6IO95YaZ5YWl5paw55qE57Si5byV5paH5Lu244CCIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDExCittc2dpZCAiY2Fubm90IGNvbWJpbmUgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgYW5kIC0tbWlzc2luZyIKK21zZ3N0ciAi5LiN6IO95ZCM5pe25L2/55SoIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIOWSjCAtLW1pc3Npbmcg6YCJ6aG5IgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NDcyCittc2dpZCAib2JqZWN0IGZpbHRlcmluZyByZXF1aXJlcyAtLW9iamVjdHMiCittc2dzdHIgIuWvueixoei/h+a7pOmcgOimgSAtLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjIKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IOS4jeaUr+aMgeaYvuekuuazqOinoyIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjUyNQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tdXNlLWJpdG1hcC1pbmRleCB3aXRoIG9iamVjdCBmaWx0ZXJpbmciCittc2dzdHIgIuS4jeiDveWwhiAtLXVzZS1iaXRtYXAtaW5kZXgg5ZKM5a+56LGh6L+H5ruk57uE5ZCI5L2/55SoIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQwOAorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs86YCJ6aG5Pl0gLS0gWzzlj4LmlbA+Li4uXSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTMKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgIuS/neaMgSBgLS1gIOS9nOS4uuS4gOS4quWPguaVsOS8oOmAkiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTUKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgIumBh+WIsOesrOS4gOS4qumdnumAiemhueWPguaVsOWQjuWBnOatouino+aekCIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MTgKK21zZ2lkICJvdXRwdXQgaW4gc3R1Y2sgbG9uZyBmb3JtIgorbXNnc3RyICLku6Xlm7rlrprplb/moLzlvI/ovpPlh7oiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTUxCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs86YCJ6aG5Pl0gLS0gWzzlj4LmlbA+Li4uXVxuIgorIiAgIOaIluiAhe+8mmdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPOWPguaVsD4uLi5dXG4iCisiICAg5oiW6ICF77yaZ2l0IHJldi1wYXJzZSBbPOmAiemhuT5dIFs85Y+C5pWwPi4uLl1cbiIKKyJcbiIKKyLliJ3mrKHkvb/nlKjml7bmiafooYwgXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiDmnaXojrflvpfmm7TlpJrkv6Hmga/jgIIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPOmAiemhuT5dIDzmj5DkuqTlj7c+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI1Cittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQgPOWtkOWRveS7pD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzAKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzzpgInpobk+XSA85o+Q5Lqk5Y+3Pi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzozMQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayA85a2Q5ZG95LukPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIgorbXNnc3RyICLpgInpobkgYCVzJyDmnJ/mnJvkuIDkuKrlpKfkuo7pm7bnmoTmlbDlrZciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVz77yaJXMg5LiN6IO95ZKMICVzIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDIKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLnu4jmraLlj43ovazmiJbmi6PpgInmk43kvZwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAzCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi57un57ut5Y+N6L2s5oiW5ouj6YCJ5pON5L2cIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIuWPlua2iOWPjei9rOaIluaLo+mAieaTjeS9nCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJza2lwIGN1cnJlbnQgY29tbWl0IGFuZCBjb250aW51ZSIKK21zZ3N0ciAi6Lez6L+H5b2T5YmN5o+Q5Lqk5bm257un57utIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICLkuI3opoHoh6rliqjmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIue8lui+keaPkOS6pOivtOaYjiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTEKK21zZ2lkICJwYXJlbnQtbnVtYmVyIgorbXNnc3RyICLniLbnvJblj7ciCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAic2VsZWN0IG1haW5saW5lIHBhcmVudCIKK21zZ3N0ciAi6YCJ5oup5Li75bmy54i25o+Q5Lqk57yW5Y+3IgorCisjOiBidWlsdGluL3JldmVydC5jOjExNAorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLlkIjlubbnrZbnlaUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTE2Cittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5ZCI5bm2562W55Wl55qE6YCJ6aG5IgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNQorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAi6L+95Yqg5o+Q5Lqk5ZCN56ewIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyNworbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICLkv53nlZnliJ3lp4vljJbnmoTnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTI5Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIuS/neaMgeWkmuS9meeahOOAgeepuueahOaPkOS6pCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzIKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICLov5jljp/lpLHotKUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjQ1Cittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICLmi6PpgInlpLHotKUiCisKKyM6IGJ1aWx0aW4vcm0uYzoxOQorbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs86YCJ6aG5Pl0gWy0tXSA85paH5Lu2Pi4uLiIKKworIzogYnVpbHRpbi9ybS5jOjIwNworbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlXG4iCisiZmlsZSBhbmQgdGhlIEhFQUQ6IgorbXNnc3RyWzBdICLlpoLkuIvmlofku7blhbbmmoLlrZjnmoTlhoXlrrnlkozlt6XkvZzljLrlj4ogSEVBRCDkuK3nmoTpg73kuI3kuIDmoLfvvJoiCittc2dzdHJbMV0gIuWmguS4i+aWh+S7tuWFtuaaguWtmOeahOWGheWuueWSjOW3peS9nOWMuuWPiiBIRUFEIOS4reeahOmDveS4jeS4gOagt++8miIKKworIzogYnVpbHRpbi9ybS5jOjIxMgorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisi77yI5L2/55SoIC1mIOW8uuWItuWIoOmZpO+8iSIKKworIzogYnVpbHRpbi9ybS5jOjIxNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gIuS4i+WIl+aWh+S7tue0ouW8leS4reacieWPmOabtCIKK21zZ3N0clsxXSAi5LiL5YiX5paH5Lu257Si5byV5Lit5pyJ5Y+Y5pu0IgorCisjOiBidWlsdGluL3JtLmM6MjIwIGJ1aWx0aW4vcm0uYzoyMjkKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIu+8iOS9v+eUqCAtLWNhY2hlZCDkv53nlZnmnKzlnLDmlofku7bvvIzmiJbnlKggLWYg5by65Yi25Yig6Zmk77yJIgorCisjOiBidWlsdGluL3JtLmM6MjI2Cittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICLlpoLkuIvmlofku7bmnInmnKzlnLDkv67mlLnvvJoiCittc2dzdHJbMV0gIuWmguS4i+aWh+S7tuacieacrOWcsOS/ruaUue+8miIKKworIzogYnVpbHRpbi9ybS5jOjI0MgorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIuS4jeWIl+WHuuWIoOmZpOeahOaWh+S7tiIKKworIzogYnVpbHRpbi9ybS5jOjI0MworbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLlj6rku47ntKLlvJXljLrliKDpmaQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDQKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAi5b+955Wl5paH5Lu25pu05paw54q25oCB5qOA5p+lIgorCisjOiBidWlsdGluL3JtLmM6MjQ1Cittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIuWFgeiuuOmAkuW9kuWIoOmZpCIKKworIzogYnVpbHRpbi9ybS5jOjI0NworbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICLljbPkvb/msqHmnInljLnphY3vvIzkuZ/ku6Xpm7bnirbmgIHpgIDlh7oiCisKKyM6IGJ1aWx0aW4vcm0uYzoyODkKK21zZ2lkICJwbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAi6K+35bCG5oKo55qE5L+u5pS55pqC5a2Y5YiwIC5naXRtb2R1bGVzIOS4reaIlui0ruiXj+WQjuWGjee7p+e7rSIKKworIzogYnVpbHRpbi9ybS5jOjMwNworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICLmnKrmj5DkvpsgLXIg6YCJ6aG55LiN5Lya6YCS5b2S5Yig6ZmkICclcyciCisKKyM6IGJ1aWx0aW4vcm0uYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm3vvJrkuI3og73liKDpmaQgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MjAKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPOS4u+acuj46XTznm67lvZU+IFs85byV55SoPi4uLl1cbiIKKyIgIC0tYWxsIOWSjOaYjuehrueahCA85byV55SoPiDkupLmlqXjgIIiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAicmVtb3RlIG5hbWUiCittc2dzdHIgIui/nOeoi+WQjeensCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzcKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAi5L2/55So5peg54q25oCB55qEIFJQQyDljY/orq4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc4Cittc2dpZCAicmVhZCByZWZzIGZyb20gc3RkaW4iCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WPluW8leeUqCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzkKK21zZ2lkICJwcmludCBzdGF0dXMgZnJvbSByZW1vdGUgaGVscGVyIgorbXNnc3RyICLmiZPljbDmnaXoh6rov5znqIsgaGVscGVyIOeahOeKtuaAgSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE0Cittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzzpgInpobk+XSBbPOeJiOacrOiMg+WbtD5dIFtbLS1dIDzot6/lvoQ+Li4uXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1Cittc2dpZCAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZyBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY0Cittc2dpZCAiR3JvdXAgYnkgY29tbWl0dGVyIHJhdGhlciB0aGFuIGF1dGhvciIKK21zZ3N0ciAi5oyJ54Wn5o+Q5Lqk6ICF5YiG57uE6ICM5LiN5piv5L2c6ICFIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY2Cittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICLmoLnmja7mr4/kuKrkvZzogIXnmoTmj5DkuqTmlbDph4/mjpLluo8iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjgKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAi6ZqQ6JeP5o+Q5Lqk6K+05piO77yM5Y+q5o+Q5L6b5o+Q5Lqk5pWw6YePIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcwCittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAi5pi+56S65q+P5Liq5L2c6ICF55qE55S15a2Q6YKu5Lu25Zyw5Z2AIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcxCittc2dpZCAiPHc+Wyw8aTE+Wyw8aTI+XV0iCittc2dzdHIgIjx3PlssPGkxPlssPGkyPl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjcyCittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICLmipjooYzovpPlh7oiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZ2l2ZW4gb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICLku5PlupPlpJbmiafooYzmj5DkvpvkuoblpKrlpJrnmoTlj4LmlbAiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9POS9leaXtj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDzniYjmnKw+IHwgPOmAmumFjeespj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjE3Cittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDzotbflp4vngrk+XV0gWy0tbGlzdF0gWzzlvJXnlKg+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmIgorbXNnaWRfcGx1cmFsICJpZ25vcmluZyAlczsgY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIKK21zZ3N0clswXSAi5b+955WlICVz77yM5peg5rOV5aSE55CGICVkIOS4quS7peS4iueahOW8leeUqCIKK21zZ3N0clsxXSAi5b+955WlICVz77yM5peg5rOV5aSE55CGICVkIOS4quS7peS4iueahOW8leeUqCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBtYXRjaGluZyByZWZzIHdpdGggJXMiCittc2dzdHIgIuayoeacieWSjCAlcyDljLnphY3nmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDUKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIuaYvuekuui/nOeoi+i3n+i4queahOWSjOacrOWcsOeahOWIhuaUryIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY0NworbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLmmL7npLrov5znqIvot5/ouKrnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDkKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICLnnYDoibIgJyohKy0nIOWIsOebuOW6lOeahOWIhuaUryIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MQorbXNnaWQgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIgorbXNnc3RyICLmmL7npLrlhbHlkIznpZblhYjlkI7nmoQgPG4+IOS4quaPkOS6pCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1MworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAi5ZKMIG1vcmU9LTEg5ZCM5LmJIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU0Cittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgIuS4jeaYvuekuuWtl+espuS4suWRveWQjSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NgorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLljIXmi6zlvZPliY3liIbmlK8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTgKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgIuS7peWvueixoeWQjeWtl+WRveWQjeaPkOS6pCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIuaYvuekuuWPr+iDveWQiOW5tueahOWfuue6vyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgIuaYvuekuuayoeacieS7u+S9leW8leeUqOeahOeahOW8leeUqCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAi5Lul5ouT5omR6aG65bqP5pi+56S65o+Q5LqkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgIuWPquaYvuekuuS4jeWcqOesrOS4gOS4quWIhuaUr+S4iueahOaPkOS6pCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2OQorbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAi5pi+56S65LuF5LiA5Liq5YiG5pSv5Y+v6K6/6Zeu55qE5ZCI5bm25o+Q5LqkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcxCittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICLmi5PmiZHmlrnlvI/mjpLluo/vvIzlubblsL3lj6/og73lnLDkv53mjIHml6XmnJ/pobrluo8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgIjxuPlssPGJhc2U+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICLmmL7npLrku47otbflp4vngrnlvIDlp4vnmoQgPG4+IOadoeacgOi/keeahOW8leeUqOaXpeW/l+iusOW9lSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjcxMQorbXNnaWQgIiIKKyItLXJlZmxvZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1yZW1vdGVzLCAtLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIKK21zZ3N0ciAiLS1yZWZsb2cg5ZKMIC0tYWxs44CBLS1yZW1vdGVz44CBLS1pbmRlcGVuZGVudCDmiJYgLS1tZXJnZS1iYXNlIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczNQorbXNnaWQgIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiCittc2dzdHIgIuacquaPkOS+m+WIhuaUr++8jOS4lCBIRUFEIOaXoOaViCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjczOAorbXNnaWQgIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiCittc2dzdHIgIumAiemhuSAtLXJlZmxvZyDpnIDopoHkuIDkuKrliIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSAlZCBlbnRyeSBjYW4gYmUgc2hvd24gYXQgb25lIHRpbWUuIgorbXNnaWRfcGx1cmFsICJvbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ3N0clswXSAi5LiA5qyh5Y+q6IO95pi+56S6ICVkIOS4quadoeebruOAgiIKK21zZ3N0clsxXSAi5LiA5qyh5Y+q6IO95pi+56S6ICVkIOS4quadoeebruOAgiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjc0NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlZiAlcyIKK21zZ3N0ciAi5peg5q2k5byV55SoICVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldi4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIgorbXNnc3RyWzBdICLkuI3og73lpITnkIYgJWQg5Liq5Lul5LiK55qE54mI5pys44CCIgorbXNnc3RyWzFdICLkuI3og73lpITnkIYgJWQg5Liq5Lul5LiK55qE54mI5pys44CCIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTlvJXnlKjjgIIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo4MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbmQgY29tbWl0ICVzICglcykiCittc2dzdHIgIuS4jeiDveaJvuWIsOaPkOS6pCAlc++8iCVz77yJIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTIKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzzmqKHlvI8+Li4uXSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEzCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9POaooeW8jz5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYyCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAi5Y+q5pi+56S65qCH562+77yI5Y+v5Lul5ZKM5aS05YWx55So77yJIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTYzCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAi5Y+q5pi+56S65aS077yI5Y+v5Lul5ZKM5qCH562+5YWx55So77yJIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY0Cittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAi5pu05Lil5qC855qE5byV55So5qOA5rWL77yM6ZyA6KaB57K+56Gu55qE5byV55So6Lev5b6EIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTY3IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNjkKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgIuaYvuekuiBIRUFEIOW8leeUqO+8jOWNs+S9v+iiq+i/h+a7pOaOiSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICLovazmjaLmoIfnrb7liLDlr7nosaEgSUQiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzMKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgIuWPquaYvuekuuS9v+eUqCA8bj4g5Liq5pWw5a2X55qEIFNIQTEg5ZOI5biMIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIuS4jeaJk+WNsOe7k+aenOWIsOagh+WHhui+k+WHuu+8iOS+i+WmguS4jiAtLXZlcmlmeSDlj4LmlbDlhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLmmL7npLrku47moIflh4bovpPlhaXkuK3or7vlhaXnmoTkuI3lnKjmnKzlnLDku5PlupPkuK3nmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjAKK21zZ2lkICJnaXQgc3BhcnNlLWNoZWNrb3V0IChpbml0fGxpc3R8c2V0fGRpc2FibGUpIDxvcHRpb25zPiIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSA86YCJ6aG5PiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo2MQorbXNnaWQgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiCittc2dzdHIgIuacrOW3peS9nOWMuuS4jeaYr+eogOeWj+aooeW8j++8iOeogOeWj+ajgOWHuuaWh+S7tuWPr+iDveS4jeWtmOWcqO+8iSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzoyMjAKK21zZ2lkICJmYWlsZWQgdG8gc2V0IGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgc2V0dGluZyIKK21zZ3N0ciAi5peg5rOV6K6+572uIGV4dGVuc2lvbnMud29ya3RyZWVDb25maWciCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjM3Cittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjU2Cittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAi5Yid5aeL5YyW56iA55aP5qOA5Ye65Li6IGNvbmUg5qih5byPIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI2MgorbXNnaWQgImluaXRpYWxpemUgc3BhcnNlLWNoZWNrb3V0IgorbXNnc3RyICLliJ3lp4vljJbnqIDnlo/mo4Dlh7oiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIuaXoOazleaJk+W8gCAnJXMnIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM2MQorbXNnaWQgImdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0ICgtLXN0ZGluIHwgPHBhdHRlcm5zPikiCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0ICgtLXN0ZGluIHwgPOaooeW8jz4pIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM3OAorbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBzdGFuZGFyZCBpbiIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+W5qih5byPIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjM4NAorbXNnaWQgInNldCBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgIuiuvue9rueogOeWj+ajgOWHuuaooeW8jyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NDcKK21zZ2lkICJkaXNhYmxlIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi56aB55So56iA55aP5qOA5Ye6IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjQ1OQorbXNnaWQgImVycm9yIHdoaWxlIHJlZnJlc2hpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuWIt+aWsOW3peS9nOebruW9leaXtuWHuumUmSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjIyIGJ1aWx0aW4vc3Rhc2guYzozNworbXNnaWQgImdpdCBzdGFzaCBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgc3Rhc2ggbGlzdCBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjMgYnVpbHRpbi9zdGFzaC5jOjQyCittc2dpZCAiZ2l0IHN0YXNoIHNob3cgWzxvcHRpb25zPl0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggc2hvdyBbPOmAiemhuT5dIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI0IGJ1aWx0aW4vc3Rhc2guYzo0NworbXNnaWQgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNQorbXNnaWQgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCAoIHBvcCB8IGFwcGx5ICkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNiBidWlsdGluL3N0YXNoLmM6NjIKK21zZ2lkICJnaXQgc3Rhc2ggYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBicmFuY2ggPOWIhuaUr+WQjT4gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjcgYnVpbHRpbi9zdGFzaC5jOjY3Cittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyOCBidWlsdGluL3N0YXNoLmM6NzcKK21zZ2lkICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl1cbiIKKyIgICAgICAgICAgWy0tXSBbPHBhdGhzcGVjPi4uLl1dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIFtwdXNoIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbLW18LS1tZXNzYWdlIDzmtojmga8+XVxuIgorIiAgICAgICAgICBbLS1dIFs86Lev5b6E6KeE5qC8Pi4uLl1dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MzEgYnVpbHRpbi9zdGFzaC5jOjg0Cittc2dpZCAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPG1lc3NhZ2U+XSIKK21zZ3N0ciAiIgorImdpdCBzdGFzaCBzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XVxuIgorIiAgICAgICAgICBbLXV8LS1pbmNsdWRlLXVudHJhY2tlZF0gWy1hfC0tYWxsXSBbPOa2iOaBrz5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTIKK21zZ2lkICJnaXQgc3Rhc2ggcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorbXNnc3RyICJnaXQgc3Rhc2ggcG9wIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTcKK21zZ2lkICJnaXQgc3Rhc2ggYXBwbHkgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjcyCittc2dpZCAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XSBbLXF8LS1xdWlldF0gPGNvbW1pdD4iCittc2dzdHIgImdpdCBzdGFzaCBzdG9yZSBbLW18LS1tZXNzYWdlIDzmtojmga8+XSBbLXF8LS1xdWlldF0gPOaPkOS6pD4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyDkuI3lg4/mmK/kuIDkuKrotK7ol4/mj5DkuqQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDolcyIKK21zZ3N0ciAi5oyH5a6a5LqG5aSq5aSa55qE54mI5pys77yaJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNjEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo1NDkKK21zZ2lkICJObyBzdGFzaCBlbnRyaWVzIGZvdW5kLiIKK21zZ3N0ciAi5pyq5Y+R546w6LSu6JeP5p2h55uu44CCIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJXMg5LiN5piv5LiA5Liq5pyJ5pWI55qE5byV55So5ZCNIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjI0IGdpdC1sZWdhY3ktc3Rhc2guc2g6NzUKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciDkuI3mlK/mjIHlj4LmlbAiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MDMKK21zZ2lkICJjYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIuaXoOazleWcqOWQiOW5tui/h+eoi+W6lOeUqOi0ruiXjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2VuZXJhdGUgZGlmZiAlc14hLiIKK21zZ3N0ciAi5peg5rOV55Sf5oiQ5beu5byCICVzXiEuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDIxCittc2dpZCAiY29uZmxpY3RzIGluIGluZGV4LlRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICLntKLlvJXkuK3mnInlhrLnqoHjgILlsJ3or5XkuI3nlKggLS1pbmRleOOAgiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQyNworbXNnaWQgImNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIuS4jeiDveS/neWtmOe0ouW8leagkSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQzNgorbXNnaWQgImNvdWxkIG5vdCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHN0YXNoIgorbXNnc3RyICLml6Dms5Xku47otK7ol4/mnaHnm67kuK3mgaLlpI3mnKrot5/ouKrmlofku7YiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzIgorbXNnc3RyICLmraPlnKjlkIjlubYgJXMg5ZKMICVzIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDYwIGdpdC1sZWdhY3ktc3Rhc2guc2g6NjgxCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICLntKLlvJXmnKrku47otK7ol4/kuK3mgaLlpI3jgIIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MjEgYnVpbHRpbi9zdGFzaC5jOjYyMAorbXNnaWQgImF0dGVtcHQgdG8gcmVjcmVhdGUgdGhlIGluZGV4IgorbXNnc3RyICLlsJ3or5Xph43lu7rntKLlvJUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAlcyAoJXMpIgorbXNnc3RyICLkuKLlvIPkuoYgJXPvvIglc++8iSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiVz77ya5peg5rOV5Lii5byD6LSu6JeP5p2h55uuIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4qui0ruiXj+W8leeUqCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjYzMiBnaXQtbGVnYWN5LXN0YXNoLnNoOjY5NQorbXNnaWQgIlRoZSBzdGFzaCBlbnRyeSBpcyBrZXB0IGluIGNhc2UgeW91IG5lZWQgaXQgYWdhaW4uIgorbXNnc3RyICLotK7ol4/mnaHnm67ooqvkv53nlZnku6XlpIfmgqjlho3mrKHpnIDopoHjgIIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2NTUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3MTMKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+WumuWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjc5NSBidWlsdGluL3N0YXNoLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJXMgd2l0aCAlcyIKK21zZ3N0ciAi5peg5rOV55SoICUyJHMg5pu05pawICUxJHMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MTMgYnVpbHRpbi9zdGFzaC5jOjE0NzAgYnVpbHRpbi9zdGFzaC5jOjE1MDYKK21zZ2lkICJzdGFzaCBtZXNzYWdlIgorbXNnc3RyICLotK7ol4/or7TmmI4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo4MjMKK21zZ2lkICJcImdpdCBzdGFzaCBzdG9yZVwiIHJlcXVpcmVzIG9uZSA8Y29tbWl0PiBhcmd1bWVudCIKK21zZ3N0ciAiXCJnaXQgc3Rhc2ggc3RvcmVcIiDpnIDopoHkuIDkuKogPOaPkOS6pD4g5Y+C5pWwIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTA0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxOAorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIuayoeaciemAieaLqeWPmOabtCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExNDUgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxNTAKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAi5oKo5bCa5pyq5bu656uL5Yid5aeL5o+Q5LqkIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE3MiBnaXQtbGVnYWN5LXN0YXNoLnNoOjE2NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICLml6Dms5Xkv53lrZjlvZPliY3ntKLlvJXnirbmgIEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTgxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTgwCittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV5L+d5a2Y5pyq6Lef6Liq5paH5Lu2IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE5MiBidWlsdGluL3N0YXNoLmM6MTIwMSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIwMQorIzogZ2l0LWxlZ2FjeS1zdGFzaC5zaDoyMTQKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAi5peg5rOV5L+d5a2Y5b2T5YmN5bel5L2c5Yy654q25oCBIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTIyOSBnaXQtbGVnYWN5LXN0YXNoLnNoOjIzNAorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICLkuI3og73orrDlvZXlt6XkvZzljLrnirbmgIEiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjc4IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzM4Cittc2dpZCAiQ2FuJ3QgdXNlIC0tcGF0Y2ggYW5kIC0taW5jbHVkZS11bnRyYWNrZWQgb3IgLS1hbGwgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAi5LiN6IO95ZCM5pe25L2/55So5Y+C5pWwIC0tcGF0Y2gg5ZKMIC0taW5jbHVkZS11bnRyYWNrZWQg5oiWIC0tYWxsIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTI5NAorbXNnaWQgIkRpZCB5b3UgZm9yZ2V0IHRvICdnaXQgYWRkJz8iCittc2dzdHIgIuaCqOaYr+WQpuW/mOS6huaJp+ihjCAnZ2l0IGFkZCfvvJ8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzA5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzQ2Cittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICLmsqHmnInopoHkv53lrZjnmoTmnKzlnLDkv67mlLkiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMzE2IGdpdC1sZWdhY3ktc3Rhc2guc2g6MzUxCittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIuaXoOazleWIneWni+WMlui0ruiXjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIuaXoOazleS/neWtmOW9k+WJjeeKtuaAgSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2F2ZWQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGluZGV4IHN0YXRlICVzIgorbXNnc3RyICLkv53lrZjlt6XkvZznm67lvZXlkozntKLlvJXnirbmgIEgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDI2IGdpdC1sZWdhY3ktc3Rhc2guc2g6Mzg1Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICLml6Dms5XliKDpmaTlt6XkvZzljLrlj5jmm7QiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYxIGJ1aWx0aW4vc3Rhc2guYzoxNDk3Cittc2dpZCAia2VlcCBpbmRleCIKK21zZ3N0ciAi5L+d5oyB57Si5byVIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2MyBidWlsdGluL3N0YXNoLmM6MTQ5OQorbXNnaWQgInN0YXNoIGluIHBhdGNoIG1vZGUiCittc2dzdHIgIuS7peihpeS4geaooeW8j+i0ruiXjyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjQgYnVpbHRpbi9zdGFzaC5jOjE1MDAKK21zZ2lkICJxdWlldCBtb2RlIgorbXNnc3RyICLpnZnpu5jmqKHlvI8iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDY2IGJ1aWx0aW4vc3Rhc2guYzoxNTAyCittc2dpZCAiaW5jbHVkZSB1bnRyYWNrZWQgZmlsZXMgaW4gc3Rhc2giCittc2dzdHIgIui0ruiXj+S4reWMheWQq+acqui3n+i4quaWh+S7tiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjggYnVpbHRpbi9zdGFzaC5jOjE1MDQKK21zZ2lkICJpbmNsdWRlIGlnbm9yZSBmaWxlcyIKK21zZ3N0ciAi5YyF5ZCr5b+955Wl55qE5paH5Lu2IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhlYyAlcyIKK21zZ3N0ciAi5LiN6IO95omn6KGMICVzIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOAorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIKKworIzogYnVpbHRpbi9zdHJpcHNwYWNlLmM6MTkKK21zZ2lkICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorbXNnc3RyICJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzozNworbXNnaWQgInNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciIKK21zZ3N0ciAi6Lez6L+H5ZKM56e76Zmk5omA5pyJ55qE5rOo6YeK6KGMIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzo0MAorbXNnaWQgInByZXBlbmQgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHNwYWNlIHRvIGVhY2ggbGluZSIKK21zZ3N0ciAi5Li65q+P5LiA6KGM55qE6KGM6aaW5re75Yqg5rOo6YeK56ym5ZKM56m65qC8IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0aW5nIGEgZnVsbCByZWYgbmFtZSwgZ290ICVzIgorbXNnc3RyICLmnJ/mnJvkuIDkuKrlrozmlbTnmoTlvJXnlKjlkI3np7DvvIzljbTlvpfliLAgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NAorbXNnaWQgInN1Ym1vZHVsZS0taGVscGVyIHByaW50LWRlZmF1bHQtcmVtb3RlIHRha2VzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUg5LiN5bim5Y+C5pWwIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyVzJyIKK21zZ3N0ciAi5peg5rOV5LuOIHVybCAnJXMnIOWJpeemu+S4gOS4que7hOS7tiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MAorbXNnaWQgImFsdGVybmF0aXZlIGFuY2hvciBmb3IgcmVsYXRpdmUgcGF0aHMiCittc2dzdHIgIuebuOWvuei3r+W+hOeahOabv+S7o+mUmuiusO+8iGFuY2hvcu+8iSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9POi3r+W+hD5dIFs86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NzIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjYzMAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICclcycgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIuWcqCAuZ2l0bW9kdWxlcyDkuK3mnKrmib7liLDlrZDmqKHnu4QgJyVzJyDnmoQgdXJsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICclcydcbiIKK21zZ3N0ciAi6L+b5YWlICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIGZvciAlc1xuIgorIi4iCittc2dzdHIgIiIKKyLlr7kgJXMg5omn6KGMIHJ1bl9jb21tYW5kIOi/lOWbnumdnumbtuWAvOOAglxuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInJ1bl9jb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cyB3aGlsZSByZWN1cnNpbmcgaW4gdGhlIG5lc3RlZCAiCisic3VibW9kdWxlcyBvZiAlc1xuIgorIi4iCittc2dzdHIgIiIKKyLlnKjpgJLlvZIgJXMg55qE5a2Q5qih57uE5omn6KGMIHJ1bl9jb21tYW5kIOaXtui/lOWbnumdnumbtuWAvOOAglxuIgorIi4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjUKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2YgZW50ZXJpbmcgZWFjaCBzdWJtb2R1bGUgY29tbWFuZCIKK21zZ3N0ciAi6Zi75q2i6L+b5YWl5q+P5LiA5Liq5a2Q5qih57uE5ZG95Luk55qE6L6T5Ye6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTY3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDUzCittc2dpZCAiUmVjdXJzZSBpbnRvIG5lc3RlZCBzdWJtb2R1bGVzIgorbXNnc3RyICLpgJLlvZLov5vlhaXltYzlpZflrZDmqKHnu4TkuK0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NzIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDxjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGZvcmVhY2ggWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWy0tXSA85ZG95LukPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IGxvb2sgdXAgY29uZmlndXJhdGlvbiAnJXMnLiBBc3N1bWluZyB0aGlzIHJlcG9zaXRvcnkgaXMgaXRzIG93biAiCisiYXV0aG9yaXRhdGl2ZSB1cHN0cmVhbS4iCittc2dzdHIgIuaXoOazleaJvuWIsOmFjee9riAnJXMn44CC5YGH5a6a6L+Z5Liq5LuT5bqT5piv5YW26Ieq6Lqr55qE5a6Y5pa55LiK5ri444CCIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIuaXoOazleS4uuWtkOaooee7hCAnJXMnIOazqOWGjCB1cmwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSByZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAi5a2Q5qih57uEICclcyfvvIglc++8ieW3suWvuei3r+W+hCAnJXMnIOazqOWGjFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGNvbW1hbmQgdXBkYXRlIG1vZGUgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyVzJ1xuIgorbXNnc3RyICLorablkYrvvJrlu7rorq7lrZDmqKHnu4QgJyVzJyDkvb/nlKjlkb3ku6Tmm7TmlrDmqKHlvI9cbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIuaXoOazleS4uuWtkOaooee7hCAnJXMnIOazqOWGjOabtOaWsOaooeW8jyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxMAorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBmb3IgaW5pdGlhbGl6aW5nIGEgc3VibW9kdWxlIgorbXNnc3RyICLpmLvmraLlrZDmqKHnu4TliJ3lp4vljJbnmoTovpPlh7oiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3MTUKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPG9wdGlvbnM+XSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGluaXQgWzzpgInpobk+XSBbPOi3r+W+hD5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Nzg3IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAi5ZyoIC5naXRtb2R1bGVzIOS4reayoeacieWPkeeOsOi3r+W+hCAnJXMnIOeahOWtkOaooee7hOaYoOWwhCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIHJlZiBpbnNpZGUgdGhlIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLml6Dms5Xop6PmnpDlrZDmqKHnu4QgJyVzJyDnmoQgSEVBRCDlvJXnlKgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NTQgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi6YCS5b2S5a2Q5qih57uEICclcycg5aSx6LSlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc4IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTg5Cittc2dpZCAiU3VwcHJlc3Mgc3VibW9kdWxlIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIumYu+atouWtkOaooee7hOeKtuaAgei+k+WHuiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg3OQorbXNnaWQgIiIKKyJVc2UgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaW5zdGVhZCBvZiB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3VibW9kdWxlICIKKyJIRUFEIgorbXNnc3RyICLkvb/nlKjlrZjlgqjlnKjntKLlvJXkuK3nmoTmj5DkuqTvvIzogIzpnZ7lrZjlgqjlnKjlrZDmqKHnu4QgSEVBRCDkuK3nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4ODAKK21zZ2lkICJyZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIumAkuW9kui/m+WFpeW1jOWll+WtkOaooee7hOS4rSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4NQorbXNnaWQgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUgc3RhdHVzIFstLXF1aWV0XSBbLS1jYWNoZWRdIFstLXJlY3Vyc2l2ZV0gWzzot6/lvoQ+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkwOQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPOi3r+W+hD4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJXMnXG4iCittc2dzdHIgIuS4uiAnJXMnIOWQjOatpeWtkOaooee7hCB1cmxcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLml6Dms5XkuLrlrZDmqKHnu4Tot6/lvoQgJyVzJyDms6jlhowgdXJsIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBnZXQgdGhlIGRlZmF1bHQgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5b6X5Yiw5a2Q5qih57uEICclcycg55qE6buY6K6k6L+c56iL5YWz6IGUIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIHJlbW90ZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIuaXoOazleS4uuWtkOaooee7hCAnJXMnIOabtOaWsOi/nOeoi+WFs+iBlCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTEKK21zZ2lkICJTdXBwcmVzcyBvdXRwdXQgb2Ygc3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIgorbXNnc3RyICLpmLvmraLlrZDmqKHnu4QgdXJsIOWQjOatpeeahOi+k+WHuiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTgKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHN5bmMgWy0tcXVpZXRdIFstLXJlY3Vyc2l2ZV0gWzzot6/lvoQ+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5ICh1c2UgJ3JtIC1yZicgaWYgeW91ICIKKyJyZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyLlrZDmqKHnu4Tlt6XkvZzljLogJyVzJyDljIXlkKvkuIDkuKogLmdpdCDnm67lvZXvvIjlpoLmnpzmgqjnoa7pnIDliKDpmaTlroPlj4rlhbblhajpg6jljoblj7LvvIzkvb/nlKggJ3JtICIKKyItcmYnIOWRveS7pO+8iSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byBkaXNjYXJkICIKKyJ0aGVtIgorbXNnc3RyICLlrZDmqKHnu4Tlt6XkvZzljLogJyVzJyDljIXlkKvmnKzlnLDkv67mlLnvvJvkvb/nlKggJy1mJyDkuKLlvIPlroPku6wiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICclcydcbiIKK21zZ3N0ciAi5bey5riF6Zmk55uu5b2VICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICclcydcbiIKK21zZ3N0ciAi5peg5rOV56e76Zmk5a2Q5qih57uE5bel5L2c5Yy6ICclcydcbiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLkuI3og73liJvlu7rnqbrnmoTlrZDmqKHnu4Tnm67lvZUgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJXMnICglcykgdW5yZWdpc3RlcmVkIGZvciBwYXRoICclcydcbiIKK21zZ3N0ciAi5a2Q5qih57uEICclcyfvvIglc++8ieacquWvuei3r+W+hCAnJXMnIOazqOWGjFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5MAorbXNnaWQgIlJlbW92ZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlcyBldmVuIGlmIHRoZXkgY29udGFpbiBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLliKDpmaTlrZDmqKHnu4Tlt6XkvZzljLrvvIzljbPkvb/ljIXlkKvmnKzlnLDkv67mlLkiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkxCittc2dpZCAiVW5yZWdpc3RlciBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAi5bCG5omA5pyJ5a2Q5qih57uE5Y+W5raI5rOo5YaMIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE5NgorbXNnaWQgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlIGRlaW5pdCBbLS1xdWlldF0gWy1mIHwgLS1mb3JjZV0gWy0tYWxsIHwgWy0tXSBbPOi3r+W+hD4uLi5dXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyMTAKK21zZ2lkICJVc2UgJy0tYWxsJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLlpoLmnpzmgqjnoa7lrp7mg7PopoHlr7nmiYDmnInlrZDmqKHnu4TmiafooYzlj5bmtojliJ3lp4vljJbvvIzor7fkvb/nlKggJy0tYWxsJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEyNzUKK21zZ2lkICIiCisiQW4gYWx0ZXJuYXRlIGNvbXB1dGVkIGZyb20gYSBzdXBlcnByb2plY3QncyBhbHRlcm5hdGUgaXMgaW52YWxpZC5cbiIKKyJUbyBhbGxvdyBHaXQgdG8gY2xvbmUgd2l0aG91dCBhbiBhbHRlcm5hdGUgaW4gc3VjaCBhIGNhc2UsIHNldFxuIgorInN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IHRvICdpbmZvJyBvciwgZXF1aXZhbGVudGx5LCBjbG9uZSB3aXRoXG4iCisiJy0tcmVmZXJlbmNlLWlmLWFibGUnIGluc3RlYWQgb2YgJy0tcmVmZXJlbmNlJy4iCittc2dzdHIgIiIKKyLku47kuIDkuKrniLbpobnnm67nmoTlpIfnlKjku5PlupPkuK3orqHnrpflh7rnmoTlpIfnlKjku5PlupPml6DmlYjjgIJcbiIKKyLmraTlnLrmma/kuIvvvIzorr7nva4gc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kg5Li6ICdpbmZvJ++8jOS7peWFgeiuuFxuIgorIkdpdCDkuI3kvb/nlKjlpIfnlKjku5PlupPlhYvpmobvvIzmiJbogIXnrYnmlYjlnLDkvb/nlKggJy0tcmVmZXJlbmNlLWlmLWFibGUnIOiAjOmdnlxuIgorIictLXJlZmVyZW5jZScg5p2l5YWL6ZqG44CCIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiCittc2dzdHIgIuWtkOaooee7hCAnJXMnIOS4jeiDvea3u+WKoOS7k+W6k+Wkh+mAie+8miVzIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAi5LiN6IO96K+G5YirIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IOeahOWPluWAvCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM2MAorIywgYy1mb3JtYXQKK21zZ2lkICJWYWx1ZSAnJXMnIGZvciBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYXRpb24gaXMgbm90IHJlY29nbml6ZWQiCittc2dzdHIgIuS4jeiDveivhuWIqyBzdWJtb2R1bGUuYWx0ZXJuYXRlTG9jYWlvbiDnmoTlj5blgLwgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODMKK21zZ2lkICJ3aGVyZSB0aGUgbmV3IHN1Ym1vZHVsZSB3aWxsIGJlIGNsb25lZCB0byIKK21zZ3N0ciAi5paw55qE5a2Q5qih57uE5bCG6KaB5YWL6ZqG55qE6Lev5b6EIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4NgorbXNnaWQgIm5hbWUgb2YgdGhlIG5ldyBzdWJtb2R1bGUiCittc2dzdHIgIuaWsOWtkOaooee7hOeahOWQjeensCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODkKK21zZ2lkICJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIgorbXNnc3RyICLlhYvpmoblrZDmqKHnu4TnmoQgdXJsIOWcsOWdgCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTcKK21zZ2lkICJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiCittc2dzdHIgIua1heWFi+mahueahOa3seW6piIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDAgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTcKK21zZ2lkICJmb3JjZSBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLlvLrliLbmmL7npLrlhYvpmobov5vluqYiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDAyIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODk5Cittc2dpZCAiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeWFgeiuuOWFi+mahuWIsOS4gOS4qumdnuepuuebruW9lSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDcKK21zZ2lkICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSBbLS1yZWZlcmVuY2UgIgorIjxyZXBvc2l0b3J5Pl0gWy0tbmFtZSA8bmFtZT5dIFstLWRlcHRoIDxkZXB0aD5dIC0tdXJsIDx1cmw+IC0tcGF0aCA8cGF0aD4iCittc2dzdHIgIiIKKyJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgWy0tcHJlZml4PTzot6/lvoQ+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlIDzku5PlupM+XSAiCisiWy0tbmFtZSA85ZCN5a2XPl0gWy0tZGVwdGggPOa3seW6pj5dIC0tdXJsIDx1cmw+IC0tcGF0aCA86Lev5b6EPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gY3JlYXRlL3VzZSAnJXMnIGluIGFub3RoZXIgc3VibW9kdWxlJ3MgZ2l0IGRpciIKK21zZ3N0ciAi5ouS57ud5Zyo5Y+m5LiA5Liq5a2Q5qih57uE55qEIGdpdCBkaXIg5Lit5Yib5bu6L+S9v+eUqCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiCittc2dzdHIgIuaXoOazleWFi+mahiAnJXMnIOWIsOWtkOaooee7hOi3r+W+hCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3Rvcnkgbm90IGVtcHR5OiAnJXMnIgorbXNnc3RyICLnm67lvZXpnZ7nqbrvvJonJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBkaXJlY3RvcnkgZm9yICclcyciCittc2dzdHIgIuaXoOazleW+l+WIsCAnJXMnIOeahOWtkOaooee7hOebruW9lSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1cGRhdGUgbW9kZSAnJXMnIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLlrZDmqKHnu4QgJyUyJHMnIOeahOabtOaWsOaooeW8jyAnJTEkcycg5peg5pWIIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgY29uZmlndXJlZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi5Li65a2Q5qih57uEICclMiRzJyDphY3nva7nmoTmm7TmlrDmqKHlvI8gJyUxJHMnIOaXoOaViCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyVzJyBub3QgaW5pdGlhbGl6ZWQiCittc2dzdHIgIuWtkOaooee7hCAnJXMnIOWwmuacquWIneWni+WMliIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE1OTgKK21zZ2lkICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAi5Lmf6K645oKo5oOz6KaB5omn6KGMICd1cGRhdGUgLS1pbml0J++8nyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgdW5tZXJnZWQgc3VibW9kdWxlICVzIgorbXNnc3RyICLnlaXov4fmnKrlkIjlubbnmoTlrZDmqKHnu4QgJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLnlaXov4flrZDmqKHnu4QgJyVzJyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNsb25lICclcycuIFJldHJ5IHNjaGVkdWxlZCIKK21zZ3N0ciAi5YWL6ZqGICclcycg5aSx6LSl44CC5oyJ6K6h5YiS6YeN6K+VIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJyBhIHNlY29uZCB0aW1lLCBhYm9ydGluZyIKK21zZ3N0ciAi56ys5LqM5qyh5bCd6K+V5YWL6ZqGICclcycg5aSx6LSl77yM6YCA5Ye6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMAorbXNnaWQgInBhdGggaW50byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLliLDlt6XkvZzljLrnmoTot6/lvoQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc5Cittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUsIGFjcm9zcyBuZXN0ZWQgc3VibW9kdWxlIGJvdW5kYXJpZXMiCittc2dzdHIgIuW3peS9nOWMuuS4reeahOi3r+W+hO+8jOmAkuW9kuW1jOWll+WtkOaooee7hCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODMKK21zZ2lkICJyZWJhc2UsIG1lcmdlLCBjaGVja291dCBvciBub25lIgorbXNnc3RyICJyZWJhc2XjgIFtZXJnZeOAgWNoZWNrb3V0IOaIliBub25lIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4OQorbXNnaWQgIkNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgdHJ1bmNhdGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJldmlzaW9ucyIKK21zZ3N0ciAi5Yib5bu65LiA5Liq5oyH5a6a5rex5bqm55qE5rWF5YWL6ZqGIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5MgorbXNnaWQgInBhcmFsbGVsIGpvYnMiCittc2dzdHIgIuW5tuWPkeS7u+WKoSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTQKK21zZ2lkICJ3aGV0aGVyIHRoZSBpbml0aWFsIGNsb25lIHNob3VsZCBmb2xsb3cgdGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24iCittc2dzdHIgIuWIneWni+WFi+mahuaYr+WQpuW6lOivpemBteWuiOaOqOiNkOeahOa1heWFi+mahumAiemhuSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTUKK21zZ2lkICJkb24ndCBwcmludCBjbG9uaW5nIHByb2dyZXNzIgorbXNnc3RyICLkuI3opoHovpPlh7rlhYvpmobov5vluqYiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTA0Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHVwZGF0ZS1jbG9uZSBbLS1wcmVmaXg9POi3r+W+hD5dIFs86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTE3Cittc2dpZCAiYmFkIHZhbHVlIGZvciB1cGRhdGUgcGFyYW1ldGVyIgorbXNnc3RyICJ1cGRhdGUg5Y+C5pWw5Y+W5YC86ZSZ6K+vIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlICglcykgYnJhbmNoIGNvbmZpZ3VyZWQgdG8gaW5oZXJpdCBicmFuY2ggZnJvbSBzdXBlcnByb2plY3QsIGJ1dCAiCisidGhlIHN1cGVycHJvamVjdCBpcyBub3Qgb24gYW55IGJyYW5jaCIKK21zZ3N0ciAi5a2Q5qih57uE77yIJXPvvInnmoTliIbmlK/phY3nva7kuLrnu6fmib/kuIrnuqfpobnnm67nmoTliIbmlK/vvIzkvYbmmK/kuIrnuqfpobnnm67kuI3lnKjku7vkvZXliIbmlK/kuIoiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgYSByZXBvc2l0b3J5IGhhbmRsZSBmb3Igc3VibW9kdWxlICclcyciCittc2dzdHIgIuaXoOazleiOt+W+l+WtkOaooee7hCAnJXMnIOeahOS7k+W6k+WPpeafhCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMjEKK21zZ2lkICJyZWN1cnNlIGludG8gc3VibW9kdWxlcyIKK21zZ3N0ciAi5Zyo5a2Q5qih57uE5Lit6YCS5b2SIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyNworbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzxvcHRpb25zPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBhYnNvcmItZ2l0LWRpcnMgWzzpgInpobk+XSBbPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE4MworbXNnaWQgImNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUiCittc2dzdHIgIuajgOafpeWGmeWFpSAuZ2l0bW9kdWxlcyDmlofku7bmmK/lkKblronlhagiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTg2Cittc2dpZCAidW5zZXQgdGhlIGNvbmZpZyBpbiB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAi5Y+W5raIIC5naXRtb2R1bGVzIOaWh+S7tuS4reeahOiuvue9riIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTEKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIDxuYW1lPiBbPHZhbHVlPl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPOWQjeensD4gWzzlgLw+XSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTIKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPG5hbWU+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgPOWQjeensD4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTkzCittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIyMTIgZ2l0LXN1Ym1vZHVsZS5zaDoxNzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgInBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBpbiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLor7fnoa7orqQgLmdpdG1vZHVsZXMg5paH5Lu25Zyo5bel5L2c5Yy66YeMIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2MiBnaXQuYzo0MzMgZ2l0LmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXNuJ3Qgc3VwcG9ydCAtLXN1cGVyLXByZWZpeCIKK21zZ3N0ciAiJXMg5LiN5pSv5oyBIC0tc3VwZXItcHJlZml4IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyIHN1YmNvbW1hbmQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qEIHN1Ym1vZHVsZS0taGVscGVyIOWtkOWRveS7pCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+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+5Li6ICVz77yJXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1MDEKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5bGV5byA5a+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+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA86Lev5b6EPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICLliKDpmaQgJyVzJyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAi5Yig6Zmk5bel5L2c5Yy6LyVz77ya5LiN5piv5LiA5Liq5pyJ5pWI55qE55uu5b2VIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi5Yig6ZmkIHdvcmt0cmVlcy8lc++8mmdpdGRpciDmlofku7bkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MCBidWlsdGluL3dvcmt0cmVlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICLliKDpmaQgd29ya3RyZWVzLyVz77ya5peg5rOV6K+75Y+WIGdpdGRpciDmlofku7YgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAi5Yig6Zmk5bel5L2c5qCRLyVz77ya6K+75Y+W6L+H55+t77yI5pyf5pybICU8UFJJdU1BWD4g5a2X6IqC77yM6K+75Y+WICU8UFJJdU1BWD7vvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICLliKDpmaQgd29ya3RyZWVzLyVz77ya5peg5pWI55qEIGdpdGRpciDmlofku7YiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICLliKDpmaQgd29ya3RyZWVzLyVz77yaZ2l0ZGlyIOaWh+S7tueahOaMh+WQkeS4jeWtmOWcqCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAi5oql5ZGK5riF6Zmk55qE5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIuWwhuaXqeS6jiA85pe26Ze0PiDnmoTlt6XkvZzljLrov4fmnJ8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyDlt7Lnu4/lrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICLml6Dms5Xlho3mrKHmt7vliqDlt6XkvZzljLogJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiJyVzJyDmmK/kuIDkuKrkuKLlpLHkvYbplIHlrprnmoTlt6XkvZzljLrvvIzkvb/nlKhcbiIKKyInYWRkIC1mIC1mJyDopobnm5bvvIzmiJYgJ3VubG9jaycg5ZKMICdwcnVuZScg5oiWICdyZW1vdmUnIOa4hemZpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGFscmVhZHkgcmVnaXN0ZXJlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZicgdG8gb3ZlcnJpZGUsIG9yICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyInJXMnIOaYr+S4gOS4quS4ouWkseS9huW3sue7j+azqOWGjOeahOW3peS9nOWMuu+8jOS9v+eUqFxuIgorIidhZGQgLWYnIOimhueblu+8jOaIliAncHJ1bmUnIOaIliAncmVtb3ZlJyDmuIXpmaQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yib5bu655uu5b2VICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzkgYnVpbHRpbi93b3JrdHJlZS5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIuWHhuWkh+W3peS9nOWMuu+8iOaWsOWIhuaUryAnJXMn77yJIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIgorbXNnc3RyICLlh4blpIflt6XkvZzljLrvvIjph43nva7liIbmlK8gJyVzJ++8jOS5i+WJjeS4uiAlc++8iSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGNoZWNraW5nIG91dCAnJXMnKSIKK21zZ3N0ciAi5YeG5aSH5bel5L2c5Yy677yI5qOA5Ye6ICclcyfvvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAi5YeG5aSH5bel5L2c5Yy677yI5YiG56a75aS05oyH6ZKIICVz77yJIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICLmo4Dlh7ogPOWIhuaUrz7vvIzljbPkvb/lt7Lnu4/ooqvmo4Dlh7rliLDlhbblroPlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDAKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLliJvlu7rkuIDkuKrmlrDliIbmlK8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDIKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgIuWIm+W7uuaIlumHjee9ruS4gOS4quWIhuaUryIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNAorbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICLnlJ/miJDmlrDnmoTlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDUKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAi6ZSB5a6a5paw5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA4Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAi6K6+572u6Lef6Liq5qih5byP77yI5Y+C6KeBIGdpdC1icmFuY2goMSnvvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTEKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi5bCd6K+V5Li65paw5YiG5pSv5ZCN5Yy56YWN5LiA5Liq6L+c56iL6Lef6Liq5YiG5pSvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTE5Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWLjgIEtQiDlkowgLS1kZXRhY2gg5piv5LqS5pal55qEIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgwCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIuWPquiDveWcqOWIm+W7uuaWsOWIhuaUr+aXtuS9v+eUqOmAiemhuSAtLVtuby1ddHJhY2sgIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjgwCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICLplIHlrprljp/lm6AiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIgYnVpbHRpbi93b3JrdHJlZS5jOjcyNSBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4quW3peS9nOWMuiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5NCBidWlsdGluL3dvcmt0cmVlLmM6NzI3Cittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIuS4u+W3peS9nOWMuuaXoOazleiiq+WKoOmUgeaIluino+mUgSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICInJXMnIOW3suiiq+mUgeWumu+8jOWOn+WboO+8miVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycg5bey6KKr6ZSB5a6aIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyDmnKrooqvplIHlrpoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzAKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAi5LiN6IO956e75Yqo5oiW5Yig6Zmk5YyF5ZCr5a2Q5qih57uE55qE5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzc4Cittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAi5by65Yi256e75Yqo77yM5Y2z5L2/5bel5L2c5Yy65piv6ISP55qE5oiW5bey6ZSB5a6aIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAxIGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIOaYr+S4gOS4quS4u+W3peS9nOWMuiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAi5peg5rOV5LuOICclcycg566X5Ye655uu5qCH5ZCN56ewIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLnm67moIcgJyVzJyDlt7LlrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLml6Dms5Xnp7vliqjkuIDkuKrplIHlrprnmoTlt6XkvZzljLrvvIzplIHlrprljp/lm6DvvJolc1xuIgorIuS9v+eUqCAnbW92ZSAtZiAtZicg6KaG55uW5oiW5YWI6Kej6ZSBIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIyCittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIuaXoOazleenu+WKqOS4gOS4qumUgeWumueahOW3peS9nOWMuu+8jFxuIgorIuS9v+eUqCAnbW92ZSAtZiAtZicg6KaG55uW5oiW5YWI6Kej6ZSBIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICLpqozor4HlpLHotKXvvIzml6Dms5Xnp7vliqjlt6XkvZzljLrvvJolcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIuenu+WKqCAnJXMnIOWIsCAnJXMnIOWksei0pSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICLlnKggJyVzJyDkuK3miafooYwgJ2dpdCBzdGF0dXMnIOWksei0pSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNvbnRhaW5zIG1vZGlmaWVkIG9yIHVudHJhY2tlZCBmaWxlcywgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICInJXMnIOWMheWQq+S/ruaUueaIluacqui3n+i4queahOaWh+S7tu+8jOS9v+eUqCAtLWZvcmNlIOWIoOmZpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICLlnKggJyVzJyDkuK3miafooYwgJ2dpdCBzdGF0dXMnIOWksei0pe+8jOmAgOWHuueggSAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxMAorbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIuW8uuWItuWIoOmZpO+8jOWNs+S9v+W3peS9nOWMuuaYr+iEj+eahOaIluW3sumUgeWumiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLml6Dms5XliKDpmaTkuIDkuKrplIHlrprnmoTlt6XkvZzljLrvvIzplIHlrprljp/lm6DvvJolc1xuIgorIuS9v+eUqCAncmVtb3ZlIC1mIC1mJyDopobnm5bmiJblhYjop6PplIEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzUKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIuaXoOazleWIoOmZpOS4gOS4qumUgeWumueahOW3peS9nOWMuu+8jFxuIgorIuS9v+eUqCAncmVtb3ZlIC1mIC1mJyDopobnm5bmiJblhYjop6PplIEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCByZW1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAi6aqM6K+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/mjIEgc2hhbGxsb3cg6IO95YqbIgorCisjOiByZW1vdGUtY3VybC5jOjEwMzcKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICLojrflj5blpLHotKXjgIIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTA4NQorbXNnaWQgImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIKK21zZ3N0ciAi5peg5rOV6YCa6L+H5pm66IO9IEhUVFAg6I635Y+WIHNoYTEiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEyOSByZW1vdGUtY3VybC5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICLljY/orq7plJnor6/vvJrmnJ/mnJsgc2hhL3JlZu+8jOWNtOW+l+WIsCAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjExNDcgcmVtb3RlLWN1cmwuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImh0dHAg5Lyg6L6T5Y2P6K6u5LiN5pSv5oyBICVzIgorCisjOiByZW1vdGUtY3VybC5jOjExODMKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiZ2l0LWh0dHAtcHVzaCDlpLHotKUiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2NworbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgInJlbW90ZS1jdXJs77ya55So5rOV77yaZ2l0IHJlbW90ZS1jdXJsIDzov5znqIs+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybO+8mumUmeivr+ivu+WPluadpeiHqiBnaXQg55qE5ZG95Luk5rWBIgorCisjOiByZW1vdGUtY3VybC5jOjE0MDYKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICJyZW1vdGUtY3VybO+8muWwneivleayoeacieacrOWcsOS7k+W6k+S4i+iOt+WPliIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmzvvJrmnKrnn6XnmoTmnaXoh6ogZ2l0IOeahOWRveS7pCAnJXMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgIuWPguaVsCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLlr7nosaHov4fmu6QiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxODMKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAi5Yiw5pyf5pe26Ze0IgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICLnqbrmk43kvZzvvIjlkJHlkI7lhbzlrrnvvIkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgIuabtOWKoOivpue7hiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgIuabtOWKoOWuiemdmSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICLnlKggPG4+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+W5raI5pqC5a2YIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAi5Lii5byD5LqGICR7UkVWfSAoJHMpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ977ya5peg5rOV5Lii5byD6LSu6JeP5p2h55uuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjc5MgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAi77yI5Li65oGi5aSN5pWw5o2u6L6T5YWlIFwiZ2l0IHN0YXNoIGFwcGx5XCLvvIkiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjAyCittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuWPquiDveWcqOW3peS9nOWMuueahOmhtue6p+ebruW9leS4reS9v+eUqOebuOWvuei3r+W+hCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIuS7k+W6kyBVUkzvvJonJHJlcG8nIOW/hemhu+aYr+e7neWvuei3r+W+hOaIluS7pSAuL3wuLi8g6LW35aeLIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcg5bey57uP5a2Y5Zyo5LqO57Si5byV5LitIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyDlt7Lnu4/lrZjlnKjkuo7ntKLlvJXkuK3kuJTkuI3mmK/kuIDkuKrlrZDmqKHnu4QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIickc21fcGF0aCcg5rKh5pyJ5qOA5Ye655qE5o+Q5LqkIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyLku6XkuIvot6/lvoTooqvmgqjnmoTkuIDkuKogLmdpdGlnbm9yZSDmlofku7bmiYDlv73nlaXvvJpcbiIKKyIkc21fcGF0aFxuIgorIuWmguaenOaCqOehruWunuaDs+a3u+WKoOWug++8jOS9v+eUqCAtZiDlj4LmlbDjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5re75Yqg5L2N5LqOICckc21fcGF0aCcg55qE546w5a2Y5LuT5bqT5Yiw57Si5byVIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcg5bey5a2Y5Zyo5LiU5LiN5piv5LiA5Liq5pyJ5pWI55qEIGdpdCDku5PlupMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIuacrOWcsOWPkeeOsCAnJHNtX25hbWUnIOeahOS4gOS4qiBnaXQg55uu5b2V77yM5LiO5YW25a+55bqU55qE6L+c56iL5LuT5bqT77yaIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOaDs+imgemHjeeUqOi/meS4quacrOWcsCBnaXQg55uu5b2V6ICM6Z2e6YeN5paw5YWL6ZqG6IeqXG4iCisiICAkcmVhbHJlcG9cbiIKKyLkvb/nlKggJy0tZm9yY2UnIOmAiemhueOAguWmguaenOacrOWcsCBnaXQg55uu5b2V5LiN5piv5q2j56Gu55qE5LuT5bqTXG4iCisi5oiW6ICF5oKo5LiN56Gu5a6a6L+Z6YeM55qE5ZCr5LmJ77yM5L2/55SoICctLW5hbWUnIOmAiemhuemAieaLqeWPpuWklueahOWQjeensOOAgiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIua/gOa0u+acrOWcsCBnaXQg55uu5b2V5Yiw5a2Q5qih57uEICckc21fbmFtZSfjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIuS4jeiDveajgOWHuuWtkOaooee7hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAi5peg5rOV5re75Yqg5a2Q5qih57uEICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIuaXoOazleazqOWGjOWtkOaooee7hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIOS4reaJvuWIsOW9k+WJjeeJiOacrCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4Tot6/lvoQgJyRzbV9wYXRoJyDkuK3ojrflj5YiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hOi3r+W+hCAnJHNtX3BhdGgnIOS4reaJvuWIsOW9k+WJjeeJiOacrCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjEzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIOS4reiOt+WPlu+8jOWwneivleebtOaOpeiOt+WPliAkc2hhMe+8miIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIiIKKyLojrflj5bkuoblrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCfvvIzkvYbmmK/lroPmsqHmnInljIXlkKsgJHNoYTHjgILnm7TmjqXojrflj5bor6Xmj5DkuqTlpLHotKXjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIOS4reajgOWHuiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYyNworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIuWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJ++8muajgOWHuiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCcg5Lit5Y+Y5Z+6ICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIuWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJ++8muWPmOWfuuiHsyAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIuaXoOazleWQiOW5tiAnJHNoYTEnIOWIsOWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJyDkuK0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIuWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJ++8muW3suWQiOW5tuWFpSAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLlnKjlrZDmqKHnu4QgJyRkaXNwbGF5cGF0aCcg5Lit5omn6KGMICckY29tbWFuZCAkc2hhMScg5aSx6LSlIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIuWtkOaooee7hCAnJGRpc3BsYXlwYXRoJ++8mickY29tbWFuZCAkc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njc1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLml6Dms5XpgJLlvZLov5vlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODg2Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAi6YCJ6aG5IC0tY2FjaGVkIOS4jeiDveWSjOmAiemhuSAtLWZpbGVzIOWQjOaXtuS9v+eUqCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAi5oSP5aSW55qE5qih5byPICRtb2RfZHN0IgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAg6K2m5ZGK77yaJGRpc3BsYXlfbmFtZSDmnKrljIXlkKvmj5DkuqQgJHNoYTFfc3JjIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTYxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiAg6K2m5ZGK77yaJGRpc3BsYXlfbmFtZSDmnKrljIXlkKvmj5DkuqQgJHNoYTFfZHN0IgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTY0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiAg6K2m5ZGK77yaJGRpc3BsYXlfbmFtZSDmnKrljIXlkKvmj5DkuqQgJHNoYTFfc3JjIOWSjCAkc2hhMV9kc3QiCisKKyM6IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi6K+m6KeBIGdpdC0ke2NtZH0oMSnjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDkKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIuW3suW6lOeUqCBhdXRvc3Rhc2jjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAi5LiN6IO95a2Y5YKoICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWJhc2luZyAoJG5ld19jb3VudC8kdG90YWwpIgorbXNnc3RyICLlj5jln7rkuK3vvIgkbmV3X2NvdW50LyR0b3RhbO+8iSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjIwNworbXNnaWQgIiIKKyJcbiIKKyJDb21tYW5kczpcbiIKKyJwLCBwaWNrIDxjb21taXQ+ID0gdXNlIGNvbW1pdFxuIgorInIsIHJld29yZCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBlZGl0IHRoZSBjb21taXQgbWVzc2FnZVxuIgorImUsIGVkaXQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmdcbiIKKyJzLCBzcXVhc2ggPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdFxuIgorImYsIGZpeHVwIDxjb21taXQ+ID0gbGlrZSBcInNxdWFzaFwiLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlXG4iCisieCwgZXhlYyA8Y29tbWl0PiA9IHJ1biBjb21tYW5kICh0aGUgcmVzdCBvZiB0aGUgbGluZSkgdXNpbmcgc2hlbGxcbiIKKyJkLCBkcm9wIDxjb21taXQ+ID0gcmVtb3ZlIGNvbW1pdFxuIgorImwsIGxhYmVsIDxsYWJlbD4gPSBsYWJlbCBjdXJyZW50IEhFQUQgd2l0aCBhIG5hbWVcbiIKKyJ0LCByZXNldCA8bGFiZWw+ID0gcmVzZXQgSEVBRCB0byBhIGxhYmVsXG4iCisibSwgbWVyZ2UgWy1DIDxjb21taXQ+IHwgLWMgPGNvbW1pdD5dIDxsYWJlbD4gWyMgPG9uZWxpbmU+XVxuIgorIi4gICAgICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IHVzaW5nIHRoZSBvcmlnaW5hbCBtZXJnZSBjb21taXQnc1xuIgorIi4gICAgICAgbWVzc2FnZSAob3IgdGhlIG9uZWxpbmUsIGlmIG5vIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCB3YXNcbiIKKyIuICAgICAgIHNwZWNpZmllZCkuIFVzZSAtYyA8Y29tbWl0PiB0byByZXdvcmQgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIlRoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLlkb3ku6Q6XG4iCisicCwgcGljayA85o+Q5LqkPiA9IOS9v+eUqOaPkOS6pFxuIgorInIsIHJld29yZCA85o+Q5LqkPiA9IOS9v+eUqOaPkOS6pO+8jOS9huS/ruaUueaPkOS6pOivtOaYjlxuIgorImUsIGVkaXQgPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqTvvIzkvYblgZzkuIvmnaXkv67ooaVcbiIKKyJzLCBzcXVhc2ggPOaPkOS6pD4gPSDkvb/nlKjmj5DkuqTvvIzkvYbono3lkIjliLDliY3kuIDkuKrmj5DkuqRcbiIKKyJmLCBmaXh1cCA85o+Q5LqkPiA9IOexu+S8vOS6jiBcInNxdWFzaFwi77yM5L2G5Lii5byD5o+Q5Lqk6K+05piO5pel5b+XXG4iCisieCwgZXhlYyA85ZG95LukPiA9IOS9v+eUqCBzaGVsbCDov5DooYzlkb3ku6TvvIjmraTooYzliankvZnpg6jliIbvvIlcbiIKKyJkLCBkcm9wIDzmj5DkuqQ+ID0g5Yig6Zmk5o+Q5LqkXG4iCisibCwgbGFiZWwgPOagh+etvj4gPSDkuLrlvZPliY0gSEVBRCDmiZPkuIrmoIfnrb5cbiIKKyJ0LCByZXNldCA85qCH562+PiA9IOmHjee9riBIRUFEIOWIsOivpeagh+etvlxuIgorIm0sIG1lcmdlIFstQyA85o+Q5LqkPiB8IC1jIDzmj5DkuqQ+XSA85qCH562+PiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICDliJvlu7rkuIDkuKrlkIjlubbmj5DkuqTvvIzlubbkvb/nlKjljp/lp4vnmoTlkIjlubbmj5DkuqTor7TmmI7vvIjlpoLmnpzmsqHmnInmjIflrppcbiIKKyIuICAgICAgIOWOn+Wni+aPkOS6pO+8jOS9v+eUqOazqOmHiumDqOWIhueahCBvbmVsaW5lIOS9nOS4uuaPkOS6pOivtOaYju+8ieOAguS9v+eUqFxuIgorIi4gICAgICAgLWMgPOaPkOS6pD4g5Y+v5Lul57yW6L6R5o+Q5Lqk6K+05piO44CCXG4iCisiXG4iCisi5Y+v5Lul5a+56L+Z5Lqb6KGM6YeN5paw5o6S5bqP77yM5bCG5LuO5LiK6Iez5LiL5omn6KGM44CCXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyNzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuIGFtZW5kIHRoZSBjb21taXQgbm93LCB3aXRoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzLCBydW5cbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorIuaCqOeOsOWcqOWPr+S7peS/ruihpei/meS4quaPkOS6pO+8jOS9v+eUqFxuIgorIlxuIgorIlx0Z2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisi5b2T5oKo5a+55Y+Y5pu05oSf5Yiw5ruh5oSP77yM5omn6KGMXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRzaGExOiBub3QgYSBjb21taXQgdGhhdCBjYW4gYmUgcGlja2VkIgorbXNnc3RyICIkc2hhMe+8muS4jeaYr+S4gOS4quWPr+S7peiiq+aLo+mAieeahOaPkOS6pCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjMzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjb21taXQgbmFtZTogJHNoYTEiCittc2dzdHIgIuaXoOaViOeahOaPkOS6pOWQje+8miRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzY0Cittc2dpZCAiQ2Fubm90IHdyaXRlIGN1cnJlbnQgY29tbWl0J3MgcmVwbGFjZW1lbnQgc2hhMSIKK21zZ3N0ciAi5LiN6IO95YaZ5YWl5b2T5YmN5o+Q5Lqk55qE5pu/5LujIHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZCB0byAkc2hhMSIKK21zZ3N0ciAi5b+r6L+b5YiwICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICLkuI3og73lv6vov5vliLAgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBtb3ZlIEhFQUQgdG8gJGZpcnN0X3BhcmVudCIKK21zZ3N0ciAi5LiN6IO956e75YqoIEhFQUQg5YiwICRmaXJzdF9wYXJlbnQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHNxdWFzaCBhIG1lcmdlOiAkc2hhMSIKK21zZ3N0ciAi5ouS57ud5Y6L57yp5LiA5Liq5ZCI5bm277yaJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCittc2dzdHIgIuaXoOazlemHjeWBmuWQiOW5tiAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ1OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBpY2sgJHNoYTEiCittc2dzdHIgIuS4jeiDveaLo+mAiSAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyR7bn06IgorbXNnc3RyICLov5nmmK/mj5DkuqTor7TmmI4gIyR7bn3vvJoiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoZSBjb21taXQgbWVzc2FnZSAjJHtufSB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLmj5DkuqTor7TmmI4gIyR7bn0g5bCG6KKr6Lez6L+H77yaIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJGNvdW50IGNvbW1pdC4iCittc2dpZF9wbHVyYWwgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCittc2dzdHJbMF0gIui/meaYr+S4gOS4qiAkY291bnQg5Liq5o+Q5Lqk55qE57uE5ZCI44CCIgorbXNnc3RyWzFdICLov5nmmK/kuIDkuKogJGNvdW50IOS4quaPkOS6pOeahOe7hOWQiOOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHdyaXRlICRmaXh1cF9tc2ciCittc2dzdHIgIuS4jeiDveWGmeWFpSAkZml4dXBfbXNnIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk1Cittc2dpZCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cy4iCittc2dzdHIgIui/meaYr+S4gOS4qiAyIOS4quaPkOS6pOeahOe7hOWQiOOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjUzNiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTc5CisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJHNoYTEuLi4gJHJlc3QiCittc2dzdHIgIuS4jeiDveW6lOeUqCAkc2hhMS4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3RcbiIKKyJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9va1xuIgorImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSAiCisiYmVmb3JlXG4iCisieW91IGFyZSBhYmxlIHRvIHJld29yZCB0aGUgY29tbWl0LiIKK21zZ3N0ciAiIgorIuS4jeiDveWcqOaIkOWKn+aLo+mAiSAkc2hhMS4uLiAkcmVzdCDkuYvlkI7kv67ooaXmj5DkuqRcbiIKKyLov5npgJrluLjmmK/lm6DkuLrnqbrnmoTmj5DkuqTor7TmmI7vvIzmiJbogIUgcHJlLWNvbW1pdCDpkqnlrZDmiafooYzlpLHotKXjgILlpoLmnpzmmK8gcHJlLWNvbW1pdFxuIgorIumSqeWtkOaJp+ihjOWksei0pe+8jOS9oOWPr+iDvemcgOimgeWcqOmHjeWGmeaPkOS6pOivtOaYjuWJjeino+WGs+i/meS4qumXrumimOOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjYyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBlZCBhdCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCittc2dzdHIgIuWBnOatouWcqCAkc2hhMV9hYmJyZXYuLi4gJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2NDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAnJHNxdWFzaF9zdHlsZScgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi5rKh5pyJ54i25o+Q5Lqk55qE5oOF5Ya15LiL5LiN6IO9ICckc3F1YXNoX3N0eWxlJyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY4MworIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW5nOiAkcmVzdCIKK21zZ3N0ciAi5omn6KGM77yaJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkV4ZWN1dGlvbiBmYWlsZWQ6ICRyZXN0IgorbXNnc3RyICLmiafooYzlpLHotKXvvJokcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLlubbkuJTkv67mlLnntKLlvJXlkowv5oiW5bel5L2c5Yy6IgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo2OTUKK21zZ2lkICIiCisiWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi5oKo5Y+v5Lul6Kej5Yaz6L+Z5Liq6Zeu6aKY77yM54S25ZCO6L+Q6KGMXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyMuIFRSQU5TTEFUT1JTOiBhZnRlciB0aGVzZSBsaW5lcyBpcyBhIGNvbW1hbmQgdG8gYmUgaXNzdWVkIGJ5IHRoZSB1c2VyCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3RcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi5omn6KGM5oiQ5Yqf77yaJHJlc3RcbiIKKyLkvYbmmK/lnKjntKLlvJXlkowv5oiW5bel5L2c5Yy65Lit5a2Y5Zyo5Y+Y5pu044CC5o+Q5Lqk5oiW6LSu6JeP5L+u5pS577yM54S25ZCO6L+Q6KGMXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWFuZDogJGNvbW1hbmQgJHNoYTEgJHJlc3QiCittc2dzdHIgIuacquefpeWRveS7pO+8miRjb21tYW5kICRzaGExICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NzIwCittc2dpZCAiUGxlYXNlIGZpeCB0aGlzIHVzaW5nICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4iCittc2dzdHIgIuimgeS/ruaUueivt+S9v+eUqOWRveS7pCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyfjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkICRoZWFkX25hbWUuIgorbXNnc3RyICLmiJDlip/lj5jln7rlubbmm7TmlrAgJGhlYWRfbmFtZeOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxMgorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRCIKK21zZ3N0ciAi5LiN6IO95Yig6ZmkIENIRVJSWV9QSUNLX0hFQUQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZVxuIgorInNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLmgqjlt7LmmoLlrZjkuoblt6XkvZzljLrnmoTkv67mlLnjgILlpoLmnpzov5nkupvkv67mlLnopoHljovnvKnliLDliY3kuIDkuKrmj5DkuqTvvIzmiafooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIuWmguaenOi/meS6m+WPmOabtOimgeW9ouaIkOS4gOS4quaWsOaPkOS6pO+8jOaJp+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIuaXoOiuuuWTquenjeaDheWGte+8jOW9k+aCqOWujOaIkOaPkOS6pO+8jOe7p+e7reaJp+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzQKK21zZ2lkICJFcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgYXV0aG9yIGlkZW50aXR5IHRvIGFtZW5kIGNvbW1pdCIKK21zZ3N0ciAi5Zyo5L+u6KGl5o+Q5Lqk5Lit5p+l5om+5L2c6ICF5L+h5oGv5pe26YGH5Yiw6ZSZ6K+vIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODM5Cittc2dpZCAiIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSBjb21taXQgdGhlbVxuIgorImZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCittc2dzdHIgIiIKKyLmgqjnmoTlt6XkvZzljLrkuK3mnInmnKrmj5DkuqTnmoTlj5jmm7TjgILor7flhYjmj5DkuqTnhLblkI7lho3mrKHov5DooYwgJ2dpdCByZWJhc2UgLS1jb250aW51ZSfjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg0OAorbXNnaWQgIkNvdWxkIG5vdCBjb21taXQgc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73mj5DkuqTmmoLlrZjnmoTkv67mlLnjgIIiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk2NQorbXNnaWQgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKK21zZ3N0ciAi5peg5rOV6L+Q6KGM57yW6L6R5ZmoIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY2hlY2tvdXQgJHN3aXRjaF90byIKK21zZ3N0ciAi5LiN6IO95qOA5Ye6ICRzd2l0Y2hfdG8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDcKK21zZ2lkICJObyBIRUFEPyIKK21zZ3N0ciAi5rKh5pyJIEhFQUTvvJ8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCittc2dzdHIgIuS4jeiDveWIm+W7uuS4tOaXtiAkc3RhdGVfZGlyIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTExCittc2dpZCAiQ291bGQgbm90IG1hcmsgYXMgaW50ZXJhY3RpdmUiCittc2dzdHIgIuS4jeiDveagh+iusOS4uuS6pOS6kuW8jyIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0MworIywgc2gtZm9ybWF0Cittc2dpZCAiUmViYXNlICRzaG9ydHJldmlzaW9ucyBvbnRvICRzaG9ydG9udG8gKCR0b2RvY291bnQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmRzKSIKK21zZ3N0clswXSAi5Y+Y5Z+6ICRzaG9ydHJldmlzaW9ucyDliLAgJHNob3J0b250b++8iCR0b2RvY291bnQg5Liq5o+Q5Lqk77yJIgorbXNnc3RyWzFdICLlj5jln7ogJHNob3J0cmV2aXNpb25zIOWIsCAkc2hvcnRvbnRv77yIJHRvZG9jb3VudCDkuKrmj5DkuqTvvIkiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5OTcgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwMDIKK21zZ2lkICJDb3VsZCBub3QgaW5pdCByZXdyaXR0ZW4gY29tbWl0cyIKK21zZ3N0ciAi5LiN6IO95a+56YeN5YaZ5o+Q5Lqk6L+b6KGM5Yid5aeL5YyWIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6ODkgZ2l0LXNoLXNldHVwLnNoOjk0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRSIKK21zZ3N0ciAi55So5rOV77yaJGRhc2hsZXNzICRVU0FHRSIKKworIzogZ2l0LXNoLXNldHVwLnNoOjE5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNoZGlyIHRvICRjZHVwLCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi5LiN6IO95YiH5o2i55uu5b2V5YiwICRjZHVw77yM5bel5L2c5Yy655qE6aG257qn55uu5b2VIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjAwIGdpdC1zaC1zZXR1cC5zaDoyMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiAkcHJvZ3JhbV9uYW1lIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICLoh7Tlkb3plJnor6/vvJokcHJvZ3JhbV9uYW1lIOS4jeiDveWcqOayoeacieW3peS9nOWMuueahOaDheWGteS4i+S9v+eUqCIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyMQorbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73lj5jln7rvvJrmgqjmnInmnKrmmoLlrZjnmoTlj5jmm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjQKK21zZ2lkICJDYW5ub3QgcmV3cml0ZSBicmFuY2hlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDvemHjeWGmeWIhuaUr++8muaCqOacieacquaaguWtmOeahOWPmOabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIyNworbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5peg5rOV6YCa6L+H5Y+Y5Z+65pa55byP5ouJ5Y+W77ya5oKo5pyJ5pyq5pqC5a2Y55qE5Y+Y5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJGFjdGlvbjogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDvSAkYWN0aW9u77ya5oKo5pyJ5pyq5pqC5a2Y55qE5Y+Y5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQzCittc2dpZCAiQ2Fubm90IHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO95Y+Y5Z+677ya5oKo55qE57Si5byV5Lit5YyF5ZCr5pyq5o+Q5Lqk55qE5Y+Y5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjQ2Cittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuaXoOazlemAmui/h+WPmOWfuuaWueW8j+aLieWPlu+8muaCqOeahOe0ouW8leS4reWMheWQq+acquaPkOS6pOeahOWPmOabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDvSAkYWN0aW9u77ya5oKo55qE57Si5byV5Lit5YyF5ZCr5pyq5o+Q5Lqk55qE5Y+Y5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjUzCittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLogIzkuJTmgqjnmoTntKLlvJXkuK3ljIXlkKvmnKrmj5DkuqTnmoTlj5jmm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzMKK21zZ2lkICJZb3UgbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuIgorbXNnc3RyICLmgqjpnIDopoHlnKjlt6XkvZzljLrnmoTpobbnuqfnm67lvZXkuK3ov5DooYzov5nkuKrlkb3ku6TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDozNzgKK21zZ2lkICJVbmFibGUgdG8gZGV0ZXJtaW5lIGFic29sdXRlIHBhdGggb2YgZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAi5LiN6IO956Gu5a6aIGdpdCDnm67lvZXnmoTnu53lr7not6/lvoQiCisKKyMuIFRSQU5TTEFUT1JTOiB5b3UgY2FuIGFkanVzdCB0aGlzIHRvIGFsaWduICJnaXQgYWRkIC1pIiBzdGF0dXMgbWVudQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJTEycyAlMTJzICVzIgorbXNnc3RyICIlMTJzICUxMnMgJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6NjM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInRvdWNoZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJ0b3VjaGVkICVkIHBhdGhzXG4iCittc2dzdHJbMF0gIuinpueisOS6hiAlZCDkuKrot6/lvoRcbiIKK21zZ3N0clsxXSAi6Kem56Kw5LqGICVkIOS4qui3r+W+hFxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTMKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnc3RyICLlpoLmnpzooaXkuIHog73lubLlh4DlnLDlupTnlKjvvIznvJbovpHlnZflsIbnq4vljbPmoIforrDkuLrmmoLlrZjjgIIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1NgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3Rhc2hpbmcuIgorbXNnc3RyICLlpoLmnpzooaXkuIHog73lubLlh4DlnLDlupTnlKjvvIznvJbovpHlnZflsIbnq4vljbPmoIforrDkuLrotK7ol4/jgIIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA1OQorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3IgdW5zdGFnaW5nLiIKK21zZ3N0ciAi5aaC5p6c6KGl5LiB6IO95bmy5YeA5Zyw5bqU55So77yM57yW6L6R5Z2X5bCG56uL5Y2z5qCH6K6w5Li65pyq5pqC5a2Y44CCIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjIgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDcxCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzcKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGFwcGx5aW5nLiIKK21zZ3N0ciAi5aaC5p6c6KGl5LiB6IO95bmy5YeA5Zyw5bqU55So77yM57yW6L6R5Z2X5bCG56uL5Y2z5qCH6K6w5Li65bqU55So44CCIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNjUgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY4CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNzQKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIGRpc2NhcmRpbmcuIgorbXNnc3RyICLlpoLmnpzooaXkuIHog73lubLlh4DlnLDlupTnlKjvvIznvJbovpHlnZflsIbnq4vljbPmoIforrDkuLrkuKLlvIPjgIIiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIuS4uuWGmeWFpeaJk+W8gOWdl+e8lui+keaWh+S7tuWksei0pe+8miVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorIi0tLVxuIgorIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBtYWtlIHRoZW0gJyAnIGxpbmVzIChjb250ZXh0KS5cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgZGVsZXRlIHRoZW0uXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iCittc2dzdHIgIiIKKyItLS1cbiIKKyLopoHliKDpmaQgJyVzJyDlvIDlp4vnmoTooYzvvIzkvb/lhbbmiJDkuLogJyAnIOW8gOWni+eahOihjO+8iOS4iuS4i+aWh++8ieOAglxuIgorIuimgeWIoOmZpCAnJXMnIOW8gOWni+eahOihjO+8jOWIoOmZpOWug+S7rOOAglxuIgorIuS7pSAlcyDlvIDlp4vnmoTooYzlsIbooqvliKDpmaTjgIJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W5Z2X57yW6L6R5paH5Lu277yaJXMiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI0OAorbXNnaWQgIiIKKyJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDmmoLlrZjor6XlnZdcbiIKKyJuIC0g5LiN6KaB5pqC5a2Y6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeaaguWtmOivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDmmoLlrZjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN5pqC5a2Y6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNTQKK21zZ2lkICIiCisieSAtIHN0YXNoIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFzaCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFzaCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g6LSu6JeP6K+l5Z2XXG4iCisibiAtIOS4jeimgei0ruiXj+ivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3otK7ol4/or6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g6LSu6JeP6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jei0ruiXj+ivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdlyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjYwCittc2dpZCAiIgorInkgLSB1bnN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJxIC0gcXVpdDsgZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gdW5zdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgdW5zdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDkuI3mmoLlrZjor6XlnZdcbiIKKyJuIC0g5LiN6KaB5LiN5pqC5a2Y6K+l5Z2XXG4iCisicSAtIOmAgOWHuuOAguS4jeimgeS4jeaaguWtmOivpeWdl+WPiuWQjumdoueahOWFqOmDqOWdl1xuIgorImEgLSDkuI3mmoLlrZjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJkIC0g5LiN6KaB5LiN5pqC5a2Y6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNjYKK21zZ2lkICIiCisieSAtIGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4XG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5Lit5bqU55So6K+l5Z2XXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leS4reW6lOeUqOivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3opoHlupTnlKjor6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g5bqU55So6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jeimgeW6lOeUqOivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdlyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjcyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5MAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOWcqOW3peS9nOWMuuS4reS4ouW8g+ivpeWdl1xuIgorIm4gLSDkuI3opoHlnKjlt6XkvZzljLrkuK3kuKLlvIPor6XlnZdcbiIKKyJxIC0g6YCA5Ye644CC5LiN6KaB5Lii5byD6K+l5Z2X5Y+K5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiYSAtIOS4ouW8g+ivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdl1xuIgorImQgLSDkuI3opoHkuKLlvIPor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZciCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3OAorbXNnaWQgIiIKKyJ5IC0gZGlzY2FyZCB0aGlzIGh1bmsgZnJvbSBpbmRleCBhbmQgd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGRpc2NhcmQgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5ZKM5bel5L2c5Yy65Lit5Lii5byD6K+l5Z2XXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leWSjOW3peS9nOWMuuS4reS4ouW8g+ivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3opoHkuKLlvIPor6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g5Lii5byD6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jeimgeS4ouW8g+ivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdlyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjg0Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBhcHBseSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5Zyo57Si5byV5ZKM5bel5L2c5Yy65Lit5bqU55So6K+l5Z2XXG4iCisibiAtIOS4jeimgeWcqOe0ouW8leWSjOW3peS9nOWMuuS4reW6lOeUqOivpeWdl1xuIgorInEgLSDpgIDlh7rjgILkuI3opoHlupTnlKjor6XlnZflj4rlkI7pnaLnmoTlhajpg6jlnZdcbiIKKyJhIC0g5bqU55So6K+l5Z2X5ZKM5pys5paH5Lu25Lit5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiZCAtIOS4jeimgeW6lOeUqOivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdlyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjk2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOWcqOW3peS9nOWMuuS4reW6lOeUqOivpeWdl1xuIgorIm4gLSDkuI3opoHlnKjlt6XkvZzljLrkuK3lupTnlKjor6XlnZdcbiIKKyJxIC0g6YCA5Ye644CC5LiN6KaB5bqU55So6K+l5Z2X5Y+K5ZCO6Z2i55qE5YWo6YOo5Z2XXG4iCisiYSAtIOW6lOeUqOivpeWdl+WSjOacrOaWh+S7tuS4reWQjumdoueahOWFqOmDqOWdl1xuIgorImQgLSDkuI3opoHlupTnlKjor6XlnZflkozmnKzmlofku7bkuK3lkI7pnaLnmoTlhajpg6jlnZciCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTMxMQorbXNnaWQgIiIKKyJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisiPyAtIHByaW50IGhlbHBcbiIKK21zZ3N0ciAiIgorImcgLSDpgInmi6not7PovazliLDkuIDkuKrlnZdcbiIKKyIvIC0g5p+l5om+5ZKM57uZ5a6a5q2j5YiZ6KGo6L6+5byP5Yy56YWN55qE5Z2XXG4iCisiaiAtIOe7tOaMgeivpeWdl+acquWGs+eKtuaAge+8jOafpeeci+S4i+S4gOS4quacquWGs+Wdl1xuIgorIkogLSDnu7TmjIHor6XlnZfmnKrlhrPnirbmgIHvvIzmn6XnnIvkuIvkuIDkuKrlnZdcbiIKKyJrIC0g57u05oyB6K+l5Z2X5pyq5Yaz54q25oCB77yM5p+l55yL5LiK5LiA5Liq5pyq5Yaz5Z2XXG4iCisiSyAtIOe7tOaMgeivpeWdl+acquWGs+eKtuaAge+8jOafpeeci+S4iuS4gOS4quWdl1xuIgorInMgLSDmi4bliIblvZPliY3lnZfkuLrmm7TlsI/nmoTlnZdcbiIKKyJlIC0g5omL5Yqo57yW6L6R5b2T5YmN5Z2XXG4iCisiPyAtIOaYvuekuuW4ruWKqVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDIKK21zZ2lkICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiIKK21zZ3N0ciAi6YCJ5Lit55qE5Z2X5LiN6IO95bqU55So5Yiw57Si5byV77yBXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0MworbXNnaWQgIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIgorbXNnc3RyICLml6DorrrlpoLkvZXpg73opoHlupTnlKjliLDlt6XkvZzljLrkuYjvvJ8iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM0NgorbXNnaWQgIk5vdGhpbmcgd2FzIGFwcGxpZWQuXG4iCittc2dzdHIgIuacquW6lOeUqOOAglxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdW5tZXJnZWQ6ICVzXG4iCittc2dzdHIgIuW/veeVpeacquWQiOWFpeeahO+8miVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQyOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5pqC5a2Y5qih5byP5Y+Y5pu0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjkKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuaaguWtmOWIoOmZpOWKqOS9nCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5pqC5a2Y6K+l5Z2XIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIui0ruiXj+aooeW8j+WPmOabtCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLotK7ol4/liKDpmaTliqjkvZwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIui0ruiXj+ivpeWdlyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWPlua2iOaaguWtmOaooeW8j+WPmOabtCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDM5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWPlua2iOaaguWtmOWIoOmZpOWKqOS9nCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlj5bmtojmmoLlrZjor6XlnZcgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5bCG5qih5byP5Y+Y5pu05bqU55So5Yiw57Si5byVIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgZGVsZXRpb24gdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuWIoOmZpOaTjeS9nOW6lOeUqOWIsOe0ouW8lSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5bCG6K+l5Z2X5bqU55So5Yiw57Si5byVIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDggZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5LuO5bel5L2c5Yy65Lit5Lii5byD5qih5byP5Y+Y5pu0IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5LuO5bel5L2c5Yy65Lit5Lii5byD5Yig6Zmk5Yqo5L2cIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuS7juW3peS9nOWMuuS4reS4ouW8g+ivpeWdlyBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgbW9kZSBjaGFuZ2UgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuS7jue0ouW8leWSjOW3peS9nOWMuuS4reS4ouW8g+aooeW8j+WPmOabtCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgZGVsZXRpb24gZnJvbSBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuS7jue0ouW8leWSjOW3peS9nOWMuuS4reS4ouW8g+WIoOmZpCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU1CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLku47ntKLlvJXlkozlt6XkvZzljLrkuK3kuKLlvIPor6XlnZcgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBtb2RlIGNoYW5nZSB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuaooeW8j+WPmOabtOW6lOeUqOWIsOe0ouW8leWSjOW3peS9nOWMuiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDU5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5bCG5Yig6Zmk5pON5L2c5bqU55So5Yiw57Si5byV5ZKM5bel5L2c5Yy6IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5bCG6K+l5Z2X5bqU55So5Yiw57Si5byV5ZKM5bel5L2c5Yy6IFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwhuaooeW8j+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+R6YCBICVz77yfW3l8Tl3vvJoiCmRpZmYgLS1naXQgYS9wby96aF9UVy5wbyBiL3BvL3poX1RXLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMGNkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9wby96aF9UVy5wbwpAQCAtMCwwICsxLDI0MDAwIEBACisjIENoaW5lc2UgKHRyYWRpdGlvbmFsKSB0cmFuc2xhdGlvbnMgZm9yIEdpdCBwYWNrYWdlCisjIEdpdCDlpZfoo53ou5/pq5TnmoTnuYHpq5TkuK3mlofnv7vora8uCisjIENvcHlyaWdodCAoQykgMjAxMiwyMDEzIEppYW5nIFhpbiA8d29ybGRoZWxsby5uZXQgQVQgZ21haWwuY29tPgorIyBDb3B5cmlnaHQgKEMpIDIwMTksMjAxOSBZaS1KeXVuIFBhbiA8cGFuOTM0MTJAZ21haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIENvbnRyaWJ1dG9ycyAoQ04pOgorIyAgIC0gRmFuZ3lpIFpob3UgPG1lIEFUIGZhbmd5aS5pbz4KKyMgICAtIEppYW5nIFhpbiA8d29ybGRoZWxsby5uZXQgQVQgZ21haWwuY29tPgorIyAgIC0gTGlhbiBDaGVuZyA8cmh5dGhtLm1haWwgQVQgZ21haWwuY29tPgorIyAgIC0gUmF5IENoZW4gPG9sZHNoYXJwIEFUIGdtYWlsLmNvbT4KKyMgICAtIFJpa3UgPGx1LnJpa3UgQVQgZ21haWwuY29tPgorIyAgIC0gVGh5bnNvbiA8bGFueGluZ2NhbiBBVCBnbWFpbC5jb20+CisjICAgLSB3czMzODkgPHdpbGxzbWl0aDMzODkgQVQgZ21haWwuY29tPgorIyAgIC0gV2FuZyBTaGVuZyA8d2FuZ3NoZW5nMjAwOGxvdmUgQVQgMTYzLmNvbT4KKyMgICAtIOS+neS6kSA8bGlseWRqd2cgQVQgZ21haWwuY29tPgorIyAgIC0gWWljaGFvIFl1IDx5eWMxOTkyIEFUIGdtYWlsLmNvbT4KKyMgICAtIFpodWFuZyBZYSA8emh1YW5neWEgQVQgbWUuY29tPgorIyBDb250cmlidXRvcnMgKFRXKToKKyMKKyMgIEdpdCBnbG9zc2FyeSBmb3IgQ2hpbmVzZSB0cmFuc2xhdG9ycworIworIyAgIEVuZ2xpc2ggICAgICAgICAgICAgICAgICAgICAgICAgIHwgIENoaW5lc2UKKyMgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAzLXdheSBtZXJnZSAgICAgICAgICAgICAgICAgICAgICB8ICDkuInmlrnlkIjkvbUKKyMgICBhYmJyZXZpYXRlICAgICAgICAgICAgICAgICAgICAgICB8ICDnsKHlr6vvvIjnmoQgU0hBLTEg5YC877yJCisjICAgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZSAgICAgICAgfCAg5YKZ55So54mp5Lu25bqrCisjICAgYW1lbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5L+u6KOcCisjICAgYW5jZXN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgfCAg56WW5YWI77yM56WW5YWI5o+Q5LqkCisjICAgYW5ub3RhdGVkIHRhZyAgICAgICAgICAgICAgICAgICAgfCAg6ZmE6Ki75qiZ57GkCisjICAgYmFyZSByZXBvc2l0b3J5ICAgICAgICAgICAgICAgICAgfCAg57SU54mI5pys5bqrCisjICAgYmlzZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5LqM5YiG5bCL5om+CisjICAgYmxvYiBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgfCAg6LOH5paZ54mp5Lu2CisjICAgYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5YiG5pSvCisjICAgYnVuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5YyFCisjICAgYnlwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg57me6YGOCisjICAgY2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg57Si5byV77yI55qE5Yil56ix77yJCisjICAgY2hhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI5o+Q5Lqk77yJ6Y+ICisjICAgY2hhbmdlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgfCAg6K6K5pu06ZuGCisjICAgY2hlY2tvdXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAg57C95Ye6CisjICAgY2hlY2tzdW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qCh6amX77yM5qCh6amX5ZKMCisjICAgY2hlcnJ5LXBpY2tpbmcgICAgICAgICAgICAgICAgICAgfCAg5o+A6YG4CisjICAgY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Lm+5reo77yI55qE5bel5L2c5Y2A77yJCisjICAgY2xvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6KSH6KO9CisjICAgY29tbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5o+Q5LqkCisjICAgY29tbWl0IG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgfCAg5o+Q5Lqk6Kqq5piOCisjICAgY29tbWl0IG9iamVjdCAgICAgICAgICAgICAgICAgICAgfCAg5o+Q5Lqk54mp5Lu2CisjICAgY29tbWl0LWlzaCAoYWxzbyBjb21taXR0aXNoKSAgICAgfCAg5o+Q5Lqk6JmfCisjICAgY29uZmxpY3QgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6KGd56qBCisjICAgY29yZSBHaXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qC45b+DIEdpdCDlt6XlhbcKKyMgICBjb3ZlciBsZXR0ZXIgICAgICAgICAgICAgICAgICAgICB8ICDpmYTlh70KKyMgICBEQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmnInlkJHnhKHnkrDlnJYKKyMgICBkYW5nbGluZyBvYmplY3QgICAgICAgICAgICAgICAgICB8ICDmh7jnqbrnianku7YKKyMgICBkZXRhY2hlZCBIRUFEICAgICAgICAgICAgICAgICAgICB8ICDliIbpm6LplovpoK3mjIfmqJkKKyMgICBkaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICB8ICDnm67pjIQKKyMgICBkaXJ0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDpq5LvvIjnmoTlt6XkvZzljYDvvIkKKyMgICBkdW1iIEhUVFAgcHJvdG9jb2wgICAgICAgICAgICAgICB8ICDllZ4gSFRUUCDljZTlrpoKKyMgICBldmlsIG1lcmdlICAgICAgICAgICAgICAgICAgICAgICB8ICDlo57lkIjkvbXvvIjlkIjkvbXlvJXlhaXkuobniLbmj5DkuqTmspLmnInnmoTkv67mlLnvvIkKKyMgICBmYXN0LWZvcndhcmQgICAgICAgICAgICAgICAgICAgICB8ICDlv6vovYkKKyMgICBmZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlj5blvpcKKyMgICBmaWxlIHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICB8ICDmqpTmoYjns7vntbEKKyMgICBmb3JrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDooY3nlJ8KKyMgICBHaXQgYXJjaGl2ZSAgICAgICAgICAgICAgICAgICAgICB8ICDniYjmnKzluqvvvIjlsI3mlrwgYXJjaCDkvb/nlKjogIXvvIkKKyMgICBnaXRmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBnaXRmaWxl77yI54mI5pys5bqr6YCj57WQ5qqU5qGI77yJCisjICAgZ3JhZnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI5o+Q5Lqk77yJ56e75qSNCisjICAgaGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6Zuc5rmK5YC8CisjICAgSEVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgSEVBRO+8iOmWi+mgreaMh+aome+8jOS6puWNs+ebruWJjeWIhuaUr++8iQorIyAgIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmgreOAgeWIhuaUrworIyAgIGhlYWQgcmVmICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWIhuaUrworIyAgIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaomemgreioiuaBrworIyAgIGhvb2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaOm+mJpAorIyAgIGh1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS/ruijnOaqlOeJh+autQorIyAgIGluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOe0ouW8lQorIyAgIGluZGV4IGVudHJ5ICAgICAgICAgICAgICAgICAgICAgIHwgIOe0ouW8leaineebrgorIyAgIGxvb3NlIG9iamVjdCAgICAgICAgICAgICAgICAgICAgIHwgIOmshuaVo+eJqeS7tgorIyAgIGxvb3NlIHJlZnMgICAgICAgICAgICAgICAgICAgICAgIHwgIOmshuaVo+W8leeUqAorIyAgIG1hc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG1hc3Rlcu+8iOmgkOioreWIhuaUr+WQje+8iQorIyAgIG1lcmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWQiOS9tQorIyAgIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeJqeS7tgorIyAgIG9iamVjdCBkYXRhYmFzZSAgICAgICAgICAgICAgICAgIHwgIOeJqeS7tuW6qworIyAgIG9iamVjdCBpZGVudGlmaWVyICAgICAgICAgICAgICAgIHwgIOeJqeS7tuitmOWIpeWFgworIyAgIG9iamVjdCBuYW1lICAgICAgICAgICAgICAgICAgICAgIHwgIOeJqeS7tuWQjeeosQorIyAgIG9iamVjdCB0eXBlICAgICAgICAgICAgICAgICAgICAgIHwgIOeJqeS7tumhnuWeiworIyAgIG9jdG9wdXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeroOmtmuW8j+WQiOS9te+8iOWFqeWIhuaUr+S7peS4iueahOWQiOS9te+8iQorIyAgIG9yaWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9yaWdpbu+8iOmgkOioreeahOmBoOerr+WQjeeose+8iQorIyAgIHBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWMhQorIyAgIHBhY2sgaW5kZXggICAgICAgICAgICAgICAgICAgICAgIHwgIOWMhee0ouW8lQorIyAgIHBhY2tmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWMheaqlOahiAorIyAgIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeItuaPkOS6pAorIyAgIHBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOS/ruijnOaqlAorIyAgIHBhdGhzcGVjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOi3r+W+keimj+agvAorIyAgIHBhdHRlcm4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaooeW8jworIyAgIHBpY2theGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaMluaOmAorIyAgIHBsdW1iaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeuoeS7tu+8iEdpdCDlupXlsaTmoLjlv4PmjIfku6TnmoTliKXnqLHvvIkKKyMgICBwb3JjZWxhaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICDnk7fku7bvvIhHaXQg5LiK5bGk5bCB6KOd5oyH5Luk55qE5Yil56ix77yJCisjICAgcHJlY2lvdXMtb2JqZWN0cyByZXBvICAgICAgICAgICAgfCAg54+N5ZOB54mI5pys5bqrCisjICAgcHJ1bmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5riF6ZmkCisjICAgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5ouJ77yM5ouJ5Y+WCisjICAgcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5o6o77yM5o6o6YCBCisjICAgcmVhY2hhYmxlICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+v5Lul5Y+W5b6XCisjICAgcmViYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6YeN5a6a5Z+65bqVCisjICAgcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55SoCisjICAgcmVmbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55So5pel6KqMCisjICAgcmVmc3BlYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55So6KaP5qC8CisjICAgcmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6YGg56uv77yM6YGg56uv54mI5pys5bqrCisjICAgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAgICAgICAgICAgfCAg6YGg56uv6L+96Lmk5YiG5pSvCisjICAgcmVwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6YeN5pS+CisjICAgcmVwbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg54mI5pys5bqrCisjICAgcmVwb3NpdG9yeSAgICAgICAgICAgICAgICAgICAgICAgfCAg54mI5pys5bqrCisjICAgcmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI6KGd56qB77yJ6Kej5rG6CisjICAgcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6YKE5Y6f5o+Q5LqkCisjICAgcmV2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgfCAg54mI5pysCisjICAgcmV3aW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6YKE5Y6fIChGdXp6eSkKKyMgICBTQ00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDljp/lp4vnorznrqHnkIbvvIjlt6XlhbfvvIkKKyMgICBTSEEtMSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTSEEtMe+8iOWuieWFqOmbnOa5iua8lOeul+azlTHvvIkKKyMgICBzaGFsbG93IHJlcG9zaXRvcnkgICAgICAgICAgICAgICB8ICDmt7rvvIjopIfoo73vvInniYjmnKzluqsKKyMgICBzaWduZWQgdGFnICAgICAgICAgICAgICAgICAgICAgICB8ICDnsL3lkI3mqJnnsaQKKyMgICBzbWFydCBIVFRQIHByb3RvY29sICAgICAgICAgICAgICB8ICDmmbrmhacgSFRUUCDljZTlrpoKKyMgICBzcXVhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlo5PnuK4KKyMgICBzdGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBuLiDmmqvlrZjljYDvvIjljbPntKLlvJXvvIk7IHYuIOaaq+WtmAorIyAgIHN0YXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG4uIOWEsuiXj+WNgDsgdi4g5YSy6JePCisjICAgc3VibW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAg5a2Q5qih57WECisjICAgc3ltcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg56ym6Jmf5byV55SoCisjICAgdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbi4g5qiZ57GkOyB2LiDmiZPmqJnnsaQKKyMgICB0YWcgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICB8ICDmqJnnsaTnianku7YKKyMgICB0YWdnZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmiZPmqJnnsaTogIUKKyMgICB0b3BpYyBicmFuY2ggICAgICAgICAgICAgICAgICAgICB8ICDkuLvpoYzliIbmlK8KKyMgICB0cmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDov73ouaQKKyMgICB0cmFpbGVyICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlsL7pg6jnvbLlkI0KKyMgICB0cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmqLnvvIjlt6XkvZzljYDmiJbmqLnni4Dnianku7bvvIkKKyMgICB0cmVlIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICB8ICDmqLnni4Dnianku7YKKyMgICB0cmVlLWlzaCAoYWxzbyB0cmVlaXNoKSAgICAgICAgICB8ICDmqLnni4Dnianku7bvvIjmiJblj6/ku6Xop6PmnpDngrrkuIDmqLnni4Dnianku7bvvIkKKyMgICB1bm1lcmdlZCBpbmRleCAgICAgICAgICAgICAgICAgICB8ICDmnKrlkIjkvbXntKLlvJUKKyMgICB1bnBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDop6PljIUKKyMgICB1bnJlYWNoYWJsZSBvYmplY3QgICAgICAgICAgICAgICB8ICDnhKHms5Xlj5blvpfnianku7YKKyMgICB1bnN0YWdlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDlj5bmtojmmqvlrZgKKyMgICB1cHN0cmVhbSAgICAgICAgICAgICAgICAgICAgICAgICB8ICDkuIrmuLgKKyMgICB1cHN0cmVhbSBicmFuY2ggICAgICAgICAgICAgICAgICB8ICDkuIrmuLjliIbmlK8KKyMgICB3b3JraW5nIHRyZWUgICAgICAgICAgICAgICAgICAgICB8ICDlt6XkvZzljYAKKyMKKyMgcGFuOTM0MTIgPHBhbjkzNDEyQGdtYWlsLmNvbT4sIDIwMTkuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxOS0xMi0zMCAwODo0OCswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxOS0xMi0zMSAyMTowNiswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBwYW45MzQxMiA8cGFuOTM0MTJAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENoaW5lc2UgPGNoaW5lc2UtbDEwbkBnb29nbGVncm91cHMuY29tPlxuIgorIkxhbmd1YWdlOiB6aF9DTlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtWmhDb252ZXJ0ZXI6IOe5geWMluWnrCBkaWN0LWY0YmM2MTdlLXI5MTAgQCAyMDE5LzExLzE2IDIwOjIzOjEyIHwiCisiIGh0dHBzOi8vemhjb252ZXJ0Lm9yZ1xuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxOS4xMi4wXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjM0NworIywgYy1mb3JtYXQKKyN8IG1zZ2lkICJIdWggKCVzKT9cbiIKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgIuWXr++8iCVz77yJ77yfIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo1MDAgYWRkLWludGVyYWN0aXZlLmM6ODAxIHNlcXVlbmNlci5jOjMyMTYKKyM6IHNlcXVlbmNlci5jOjM2NTYgYnVpbHRpbi9yZWJhc2UuYzo4NzEgYnVpbHRpbi9yZWJhc2UuYzoxNjQzCisjOiBidWlsdGluL3JlYmFzZS5jOjIwMTkgYnVpbHRpbi9yZWJhc2UuYzoyMDYzCittc2dpZCAiY291bGQgbm90IHJlYWQgaW5kZXgiCittc2dzdHIgIuS4jeiDveiugOWPlue0ouW8lSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6NTU1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjY5CisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjI5NAorbXNnaWQgImJpbmFyeSIKK21zZ3N0ciAi5LqM6YCy5L2NIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MTMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyNzgKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzMyCittc2dpZCAibm90aGluZyIKK21zZ3N0ciAi54ShIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDozMTQKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MzI5Cittc2dpZCAidW5jaGFuZ2VkIgorbXNnc3RyICLmspLmnInkv67mlLkiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY1MSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY0MworbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAi5pu05pawIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NjggYWRkLWludGVyYWN0aXZlLmM6ODU2CisjLCBjLWZvcm1hdAorI3wgbXNnaWQgImNvdWxkIG5vdCBzdGF0ICclcyciCittc2dpZCAiY291bGQgbm90IHN0YWdlICclcyciCittc2dzdHIgIuS4jeiDveaaq+WtmCAnJXMnIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo2NzQgYWRkLWludGVyYWN0aXZlLmM6ODYzIHNlcXVlbmNlci5jOjM0MDkKKyM6IGJ1aWx0aW4vcmViYXNlLmM6ODk1Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGluZGV4IgorbXNnc3RyICLkuI3og73lr6vlhaXntKLlvJUiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY3NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyOAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAidXBkYXRlZCAlZCBwYXRoXG4iCittc2dpZF9wbHVyYWwgInVwZGF0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi5pu05paw5LqGICVkIOWAi+i3r+W+kVxuIgorbXNnc3RyWzFdICLmm7TmlrDkuoYgJWQg5YCL6Lev5b6RXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjY5NSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY3OAorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAibm90ZTogJXMgaXMgdW50cmFja2VkIG5vdy5cbiIKK21zZ3N0ciAi6Kqq5piO77yaJXMg54++5bey5oiQ54K65pyq6L+96Lmk55qE44CCXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjcwMCBhcHBseS5jOjQxMDggYnVpbHRpbi9jaGVja291dC5jOjI4MQorIzogYnVpbHRpbi9yZXNldC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLlsI3ot6/lvpEgJyVzJyDnmoQgbWFrZV9jYWNoZV9lbnRyeSDli5XkvZzlpLHmlZciCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjczMCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY1NQorbXNnaWQgIlJldmVydCIKK21zZ3N0ciAi6YKE5Y6fIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3NDYKKyN8IG1zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCIKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEXnvmqLl9IgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo3ODQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2MzEKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgInJldmVydGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAicmV2ZXJ0ZWQgJWQgcGF0aHNcbiIKK21zZ3N0clswXSAi6YKE5Y6f5LqGICVkIOWAi+i3r+W+kVxuIgorbXNnc3RyWzFdICLpgoTljp/kuoYgJWQg5YCL6Lev5b6RXG4iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjgzNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyB1bnRyYWNrZWQgZmlsZXMuXG4iCittc2dzdHIgIuaykuacieacqui/vei5pOeahOaqlOahiOOAglxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo4MzkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo2ODkKK21zZ2lkICJBZGQgdW50cmFja2VkIgorbXNnc3RyICLmlrDlop7mnKrov73ouaTnmoQiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjg2NiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYyNQorIywgYy1mb3JtYXQsIHBlcmwtZm9ybWF0Cittc2dpZCAiYWRkZWQgJWQgcGF0aFxuIgorbXNnaWRfcGx1cmFsICJhZGRlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICLlop7liqDkuoYgJWQg5YCL6Lev5b6RXG4iCittc2dzdHJbMV0gIuWinuWKoOS6hiAlZCDlgIvot6/lvpFcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6ODk2CisjLCBjLWZvcm1hdAorI3wgbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlcyIKK21zZ3N0ciAi5b+955Wl5pyq5ZCI5L2177yaJXMiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjkwOCBhZGQtcGF0Y2guYzoxMzMxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkLlxuIgorbXNnc3RyICLlj6rmnInkuozpgLLkvY3mqpTmoYjooqvkv67mlLnjgIJcbiIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTEwIGFkZC1wYXRjaC5jOjEzMjkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNoYW5nZXMuXG4iCittc2dzdHIgIuaykuacieS/ruaUueOAglxuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5MTQgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzc2Cittc2dpZCAiUGF0Y2ggdXBkYXRlIgorbXNnc3RyICLkv67oo5zmqpTmm7TmlrAiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk1MyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NTQKK21zZ2lkICJSZXZpZXcgZGlmZiIKK21zZ3N0ciAi5qqi6KaWIGRpZmYiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MQorI3wgbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnaWQgInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIgorbXNnc3RyICLpoa/npLrmnInorormm7TnmoTot6/lvpEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk4MworbXNnaWQgImFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcyIKK21zZ3N0ciAi5Yqg5YWl5bel5L2c5Y2A54uA5oWL6Iez5pqr5a2Y5YiX6KGoIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODUKK21zZ2lkICJyZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvbiIKK21zZ3N0ciAi6YKE5Y6f5L+u5pS555qE5pqr5a2Y6ZuG6IezIEhFQUQg54mI5pysIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzo5ODcKKyN8IG1zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ2lkICJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiCittc2dzdHIgIuaMkemBuOWNgOWhiuS4pumBuOaTh+aAp+abtOaWsCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTg5CisjfCBtc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dpZCAidmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIuaqouimliBIRUFEIOWPiue0ouW8leS5i+mWk+eahOW3rueVsCIKKworIzogYWRkLWludGVyYWN0aXZlLmM6OTkxCittc2dpZCAiYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIgorbXNnc3RyICLliqDlhaXmnKrov73ouaTmqpTmoYjnmoTlhaflrrnoh7PmmqvlrZjliJfooagiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjk5OSBhZGQtaW50ZXJhY3RpdmUuYzoxMDQ4Cittc2dpZCAiUHJvbXB0IGhlbHA6IgorbXNnc3RyICLmj5DnpLroqqrmmI7vvJoiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDEKKyN8IG1zZ2lkICJzZWxlY3QgbWFpbmxpbmUgcGFyZW50IgorbXNnaWQgInNlbGVjdCBhIHNpbmdsZSBpdGVtIgorbXNnc3RyICLpgbjmk4fllq7kuIDpoIXnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDMKKyN8IG1zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dpZCAic2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMiCittc2dzdHIgIumBuOaTh+mgheebruevhOWcjSIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTAwNQorI3wgbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dpZCAic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIKK21zZ3N0ciAi6YG45pOH5aSa5YCL56+E5ZyNIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDA3IGFkZC1pbnRlcmFjdGl2ZS5jOjEwNTIKK21zZ2lkICJzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4IgorbXNnc3RyICLln7rmlrzllK/kuIDliY3ntrTpgbjmk4fpoIXnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMDkKKyN8IG1zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dpZCAidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIgorbXNnc3RyICLlj5bmtojpgbjmk4fmjIflrprpoIXnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTEKKyN8IG1zZ2lkICJjaG9vc2UgYSBkaWZmIGFsZ29yaXRobSIKK21zZ2lkICJjaG9vc2UgYWxsIGl0ZW1zIgorbXNnc3RyICLpgbjmk4fmiYDmnInpoIXnm64iCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjEwMTMKK21zZ2lkICIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIu+8iOepuu+8ieWujOaIkOmBuOWPliIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA1MAorI3wgbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dpZCAic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIKK21zZ3N0ciAi6YG45pOH57eo6Jmf6YGO55qE6aCF55uuIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDU0CisjfCBtc2dpZCAiZW1wdHkgZXhlYyBjb21tYW5kIgorbXNnaWQgIihlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIu+8iOepuu+8ieWFqOS4jemBuOWPliIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTA2MiBidWlsdGluL2NsZWFuLmM6ODIyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTg1MQorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiDmjIfku6QgKioqIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMDYzIGJ1aWx0aW4vY2xlYW4uYzo4MjMgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODQ4Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIuiri+mBuOaThyIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjIxMworbXNnaWQgInN0YWdlZCIKK21zZ3N0ciAi5b+r5Y+WIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTE1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEzCittc2dpZCAidW5zdGFnZWQiCittc2dzdHIgIuacquW/q+WPliIKKworIzogYWRkLWludGVyYWN0aXZlLmM6MTExNSBhcHBseS5jOjQ5NjUgYXBwbHkuYzo0OTY4IGJ1aWx0aW4vYW0uYzoyMTk3CisjOiBidWlsdGluL2FtLmM6MjIwMCBidWlsdGluL2Nsb25lLmM6MTIzIGJ1aWx0aW4vZmV0Y2guYzoxNDQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzMgYnVpbHRpbi9wdWxsLmM6MjA5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0MDkKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzc5IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgyCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg3OAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxMTkgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoyMTMKK21zZ2lkICJwYXRoIgorbXNnc3RyICLot6/lvpEiCisKKyM6IGFkZC1pbnRlcmFjdGl2ZS5jOjExMjIKKyN8IG1zZ2lkICJjb3VsZCBub3QgcmVhZCBpbmRleCIKK21zZ2lkICJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAi54Sh5rOV6YeN5paw5pW055CG57Si5byVIgorCisjOiBhZGQtaW50ZXJhY3RpdmUuYzoxMTM2IGJ1aWx0aW4vY2xlYW4uYzo3ODcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJ5ZS5cbiIKK21zZ3N0ciAi5YaN6KaL44CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjE1CisjLCBjLWZvcm1hdAorI3wgbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnaWQgIlN0YWdlIG1vZGUgY2hhbmdlIFt5LG4sYSxxLGQlcyw/XT8gIgorbXNnc3RyICLmmqvlrZjmqKHlvI/orormm7QgW3ksbixhLHEsZCVzLD9d77yfIgorCisjOiBhZGQtcGF0Y2guYzoxNgorIywgYy1mb3JtYXQKKyN8IG1zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ2lkICJTdGFnZSBkZWxldGlvbiBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAi5pqr5a2Y5Yiq6Zmk5YuV5L2cIFt5LG4sYSxxLGQlcyw/Xe+8nyIKKworIzogYWRkLXBhdGNoLmM6MTcKKyMsIGMtZm9ybWF0CisjfCBtc2dpZCAiU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnaWQgIlN0YWdlIHRoaXMgaHVuayBbeSxuLGEscSxkJXMsP10/ICIKK21zZ3N0ciAi5pqr5a2Y5q2k5Y2A5aGKIFt5LG4sYSxxLGQlcyw/Xe+8nyIKKworIzogYWRkLXBhdGNoLmM6MTExCisjLCBjLWZvcm1hdAorI3wgbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBnaXQgaGVhZGVyICclLipzJyIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgaHVuayBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICLnhKHms5Xop6PmnpDljYDloYrmqJnpoK0gJyUuKnMnIgorCisjOiBhZGQtcGF0Y2guYzoxMzAgYWRkLXBhdGNoLmM6MTM0CisjLCBjLWZvcm1hdAorI3wgbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBnaXQgaGVhZGVyICclLipzJyIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBodW5rIGhlYWRlciAnJS4qcyciCittc2dzdHIgIueEoeazleino+aekOS4iuiJsumBjueahOWNgOWhiuaomemgrSAnJS4qcyciCisKKyM6IGFkZC1wYXRjaC5jOjE3NgorI3wgbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgZGlmZiIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q5beu55WwIChkaWZmKSIKKworIzogYWRkLXBhdGNoLmM6MTk0CisjfCBtc2dpZCAiY291bGQgbm90IHBhcnNlIGNvbW1pdCAlcyIKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29sb3JlZCBkaWZmIgorbXNnc3RyICLnhKHms5Xop6PmnpDkuIroibLpgY7nmoTlt67nlbAgKGRpZmYpIgorCisjOiBhZGQtcGF0Y2guYzo1MDgKKyMsIGMtZm9ybWF0CisjfCBtc2dpZCAiYmFkIGNvbmZpZyBsaW5lICVkIGluICVzIgorbXNnaWQgIiIKKyJleHBlY3RlZCBjb250ZXh0IGxpbmUgIyVkIGluXG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIuaHieacieS4iuS4i+aWh+ihjCAjJWQg5pa8XG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6NTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJodW5rcyBkbyBub3Qgb3ZlcmxhcDpcbiIKKyIlLipzXG4iCisiXHRkb2VzIG5vdCBlbmQgd2l0aDpcbiIKKyIlLipzIgorbXNnc3RyICIiCisi5Y2A5aGK5pyq6YeN55aK77yaXG4iCisiJS4qc1xuIgorIlx05LiN5Lul5LiL6L+w57WQ5bC+77yaXG4iCisiJS4qcyIKKworIzogYWRkLXBhdGNoLmM6Nzk5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTExMgorbXNnaWQgIk1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlLlxuIgorbXNnc3RyICLmiYvli5XljYDloYrnt6jovK/mqKHlvI8gLS0g5qqi6KaW5bqV6YOo55qE5b+r6YCf5oyH5Y2X44CCXG4iCisKKyM6IGFkZC1wYXRjaC5jOjgwMworIywgYy1mb3JtYXQKKyN8IG1zZ2lkICIiCisjfCAiLS0tXG4iCisjfCAiVG8gcmVtb3ZlICclcycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorI3wgIlRvIHJlbW92ZSAnJXMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyN8ICJMaW5lcyBzdGFydGluZyB3aXRoICVzIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ2lkICIiCisiLS0tXG4iCisiVG8gcmVtb3ZlICclYycgbGluZXMsIG1ha2UgdGhlbSAnICcgbGluZXMgKGNvbnRleHQpLlxuIgorIlRvIHJlbW92ZSAnJWMnIGxpbmVzLCBkZWxldGUgdGhlbS5cbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICVjIHdpbGwgYmUgcmVtb3ZlZC5cbiIKK21zZ3N0ciAiIgorIi0tLVxuIgorIuimgeWIqumZpCAnJWMnIOmWi+Wni+eahOihjO+8jOS9v+WFtuaIkOeCuiAnICcg6ZaL5aeL55qE6KGM77yI5LiK5LiL5paH77yJ44CCXG4iCisi6KaB5Yiq6ZmkICclYycg6ZaL5aeL55qE6KGM77yM5Yiq6Zmk5a6D5YCR44CCXG4iCisi5LulICVjIOmWi+Wni+eahOihjOWwh+iiq+WIqumZpOOAglxuIgorCisjOiBhZGQtcGF0Y2guYzo4MTAKKyN8IG1zZ2lkICIiCisjfCAiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyN8ICJtYXJrZWQgZm9yIHN0YWdpbmcuIgorbXNnaWQgIiIKKyJJZiB0aGUgcGF0Y2ggYXBwbGllcyBjbGVhbmx5LCB0aGUgZWRpdGVkIGh1bmsgd2lsbCBpbW1lZGlhdGVseSBiZVxuIgorIm1hcmtlZCBmb3Igc3RhZ2luZy5cbiIKK21zZ3N0ciAi5aaC5p6c5L+u6KOc5qqU6IO95Lm+5reo5Zyw5aWX55So77yM57eo6Lyv5aGK5bCH56uL5Y2z5qiZ6KiY54K65pqr5a2Y44CCXG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnaXQnIHJlZmVycyB0byB0aGUgcGF0Y2ggbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBtZXNzYWdlcy4KKyM6IGFkZC1wYXRjaC5jOjgxOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMjYKK21zZ2lkICIiCisiSWYgaXQgZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgeW91IHdpbGwgYmUgZ2l2ZW4gYW4gb3Bwb3J0dW5pdHkgdG9cbiIKKyJlZGl0IGFnYWluLiAgSWYgYWxsIGxpbmVzIG9mIHRoZSBodW5rIGFyZSByZW1vdmVkLCB0aGVuIHRoZSBlZGl0IGlzXG4iCisiYWJvcnRlZCBhbmQgdGhlIGh1bmsgaXMgbGVmdCB1bmNoYW5nZWQuXG4iCittc2dzdHIgIiIKKyLlpoLmnpzkuI3og73kub7mt6jlnLDlpZfnlKjvvIzmgqjlsIfmnInmqZ/mnIPph43mlrDnt6jovK/jgILlpoLmnpzmraTljYDloYrnmoTlhajpg6jlhaflrrnliKrpmaTvvIzliYdcbiIKKyLmraTmrKHnt6jovK/ooqvntYLmraLvvIzmraTljYDloYrkuI3mnIPooqvkv67mlLnjgIJcbiIKKworIzogYWRkLXBhdGNoLmM6ODUxCisjfCBtc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBodW5rIGhlYWRlciIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q5Y2A5aGK5qiZ6aCtIgorCisjOiBhZGQtcGF0Y2guYzo4OTUgYWRkLXBhdGNoLmM6MTI5NAorbXNnaWQgIidnaXQgYXBwbHkgLS1jYWNoZWQnIGZhaWxlZCIKK21zZ3N0ciAi44CMZ2l0IGFwcGx5IC0tY2FjaGVk44CN5aSx5pWXIgorCisjLiBUUkFOU0xBVE9SUzogZG8gbm90IHRyYW5zbGF0ZSBbeS9uXQorIy4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCB0aGF0IGlucHV0IGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIy4KKyMuIFRSQU5TTEFUT1JTOiBkbyBub3QgdHJhbnNsYXRlIFt5L25dCisjLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IHRoYXQgaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLiBDb25zaWRlciB0cmFuc2xhdGluZyAoc2F5aW5nICJubyIgZGlzY2FyZHMhKSBhcworIy4gKHNheWluZyAibiIgZm9yICJubyIgZGlzY2FyZHMhKSBpZiB0aGUgdHJhbnNsYXRpb24KKyMuIG9mIHRoZSB3b3JkICJubyIgZG9lcyBub3Qgc3RhcnQgd2l0aCBuLgorIzogYWRkLXBhdGNoLmM6OTUyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTIzOQorbXNnaWQgIiIKKyJZb3VyIGVkaXRlZCBodW5rIGRvZXMgbm90IGFwcGx5LiBFZGl0IGFnYWluIChzYXlpbmcgXCJub1wiIGRpc2NhcmRzISkgW3kvbl0/ICIKK21zZ3N0ciAi5oKo55qE57eo6Lyv5aGK5LiN6IO96KKr5oeJ55So44CC6YeN5paw57eo6Lyv77yI6YG45pOHIFwibm9cIiDmjajmo4TvvIHvvIkgW3kvbl0/ICIKKworIzogYWRkLXBhdGNoLmM6MTAwOQorI3wgbXNnaWQgIiIKKyN8ICJ5IC0gc3RhZ2UgdGhpcyBodW5rXG4iCisjfCAibiAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmtcbiIKKyN8ICJxIC0gcXVpdDsgZG8gbm90IHN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisjfCAiYSAtIHN0YWdlIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisjfCAiZCAtIGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGFuZCBhbGwgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG5vciBhbnkgb2YgdGhlIHJlbWFpbmluZyBodW5rc1xuIgorbXNnc3RyICIiCisieSAtIOaaq+WtmOatpOWNgOWhilxuIgorIm4gLSDkuI3opoHmmqvlrZjmraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN5pqr5a2Y5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOaaq+WtmOmAmeWAi+WNgOWhiuWPiuaJgOacieWJqemkmOWNgOWhilxuIgorImQgLSDkuI3mmqvlrZjpgJnlgIvljYDloYrlj4rku7vkvZXlianppJjljYDloYpcbiIKKworIzogYWRkLXBhdGNoLmM6MTAxNgorI3wgbXNnaWQgIiIKKyN8ICJnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0b1xuIgorI3wgIi8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXhcbiIKKyN8ICJqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmtcbiIKKyN8ICJKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVua1xuIgorI3wgImsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmtcbiIKKyN8ICJLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmtcbiIKKyN8ICJzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3NcbiIKKyN8ICJlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rXG4iCisjfCAiPyAtIHByaW50IGhlbHBcbiIKK21zZ2lkICIiCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJqIC0g57at5oyB5q2k5Y2A5aGK5pyq5rG654uA5oWL77yM5qqi6KaW5LiL5LiA5YCL5pyq5rG65a6a5Y2A5aGKXG4iCisiSiAtIOe2reaMgeatpOWNgOWhiuacquaxuueLgOaFi++8jOaqouimluS4i+S4gOWAi+WNgOWhilxuIgorImsgLSDntq3mjIHmraTljYDloYrmnKrmsbrni4DmhYvvvIzmqqLoppbkuIrkuIDlgIvmnKrmsbrlrprljYDloYpcbiIKKyJLIC0g57at5oyB5q2k5Y2A5aGK5pyq5rG654uA5oWL77yM5qqi6KaW5LiK5LiA5YCL5Y2A5aGKXG4iCisiZyAtIOmBuOaTh+imgei3s+i9ieiHs+eahOWNgOWhilxuIgorIi8gLSDlsIvmib7nrKblkIjmj5DkvpvkuYvmraPopo/ooajnpLrlvI/nmoTljYDloYpcbiIKKyJzIC0g5YiG5Ymy55uu5YmN5Y2A5aGK54K65pu05bCP55qE5Y2A5aGKXG4iCisiZSAtIOaJi+WLlee3qOi8r+ebruWJjeWNgOWhilxuIgorIj8gLSDpoa/npLroqqrmmI5cbiIKKworIzogYWRkLXBhdGNoLmM6MTEzNyBhZGQtcGF0Y2guYzoxMTQ3CisjfCBtc2dpZCAiTm8gcHJldmlvdXMgaHVua1xuIgorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmsiCittc2dzdHIgIuaykuacieS4iuS4gOWAi+WNgOWhiiIKKworIzogYWRkLXBhdGNoLmM6MTE0MiBhZGQtcGF0Y2guYzoxMTUyCisjfCBtc2dpZCAiTm8gbmV4dCBodW5rXG4iCittc2dpZCAiTm8gbmV4dCBodW5rIgorbXNnc3RyICLmspLmnInkuIvkuIDlgIvljYDloYoiCisKKyM6IGFkZC1wYXRjaC5jOjExNTgKKyN8IG1zZ2lkICJObyBvdGhlciBodW5rcyB0byBnb3RvXG4iCittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gZ290byIKK21zZ3N0ciAi5rKS5pyJ5YW25a6D5Y+v5L6b6Lez6L2J55qE5Y2A5aGKIgorCisjOiBhZGQtcGF0Y2guYzoxMTY5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3NworbXNnaWQgImdvIHRvIHdoaWNoIGh1bmsgKDxyZXQ+IHRvIHNlZSBtb3JlKT8gIgorbXNnc3RyICLot7PovYnliLDlk6rlgIvljYDloYrvvIg8RW50ZXI+IOaqouimluabtOWkmu+8ie+8nyAiCisKKyM6IGFkZC1wYXRjaC5jOjExNzAgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNTc5Cittc2dpZCAiZ28gdG8gd2hpY2ggaHVuaz8gIgorbXNnc3RyICLot7PovYnliLDlk6rlgIvljYDloYrvvJ8iCisKKyM6IGFkZC1wYXRjaC5jOjExODEKKyMsIGMtZm9ybWF0CisjfCBtc2dpZCAiSW52YWxpZCBudW1iZXI6ICclcydcbiIKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJyIKK21zZ3N0ciAi54Sh5pWI5pW45a2X77yaJyVzJyIKKworIzogYWRkLXBhdGNoLmM6MTE4NgorIywgYy1mb3JtYXQKKyN8IG1zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKKyN8IG1zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnaWQgIlNvcnJ5LCBvbmx5ICVkIGh1bmsgYXZhaWxhYmxlLiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLiIKK21zZ3N0clswXSAi5bCN5LiN6LW377yM5Y+q5pyJICVkIOWAi+WPr+eUqOWNgOWhiuOAgiIKK21zZ3N0clsxXSAi5bCN5LiN6LW377yM5Y+q5pyJICVkIOWAi+WPr+eUqOWNgOWhiuOAgiIKKworIzogYWRkLXBhdGNoLmM6MTE5NQorI3wgbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaFxuIgorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIHNlYXJjaCIKK21zZ3N0ciAi5rKS5pyJ5YW25a6D5Y+v5L6b5bCL5om+55qE5Y2A5aGKIgorCisjOiBhZGQtcGF0Y2guYzoxMjAxIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTYyMworbXNnaWQgInNlYXJjaCBmb3IgcmVnZXg/ICIKK21zZ3N0ciAi5L2/55So5q2j6KaP6KGo56S65byP5pCc5bCL77yfIgorCisjOiBhZGQtcGF0Y2guYzoxMjE2CisjLCBjLWZvcm1hdAorI3wgbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlc1xuIgorbXNnaWQgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICVzOiAlcyIKK21zZ3N0ciAi6Yyv6Kqk55qE5q2j6KaP6KGo56S65byPICVz77yaJXMiCisKKyM6IGFkZC1wYXRjaC5jOjEyMzMKKyN8IG1zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiIKK21zZ2lkICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4iCittc2dzdHIgIuaykuacieWSjOaPkOS+m+aooeW8j+ebuOespuWQiOeahOWNgOWhiiIKKworIzogYWRkLXBhdGNoLmM6MTI0MAorI3wgbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dpZCAiU29ycnksIGNhbm5vdCBzcGxpdCB0aGlzIGh1bmsiCittc2dzdHIgIuWwjeS4jei1t++8jOS4jeiDveWIhuWJsumAmeWAi+WNgOWhiiIKKworIzogYWRkLXBhdGNoLmM6MTI0NAorIywgYy1mb3JtYXQKKyN8IG1zZ2lkICJTcGxpdCBpbnRvICVkIGh1bmsuXG4iCisjfCBtc2dpZF9wbHVyYWwgIlNwbGl0IGludG8gJWQgaHVua3MuXG4iCittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rcy4iCittc2dzdHIgIuWIhuWJsueCuiAlZCDloYrjgIIiCisKKyM6IGFkZC1wYXRjaC5jOjEyNDgKKyN8IG1zZ2lkICJTb3JyeSwgY2Fubm90IGVkaXQgdGhpcyBodW5rXG4iCittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVuayIKK21zZ3N0ciAi5bCN5LiN6LW377yM5LiN6IO957eo6Lyv6YCZ5YCL5Y2A5aGKIgorCisjOiBhZHZpY2UuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNoaW50OiAlLipzJXNcbiIKK21zZ3N0ciAiJXPmj5DnpLrvvJolLipzJXNcbiIKKworIzogYWR2aWNlLmM6MTY0Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLnhKHms5Xmj4DpgbjvvIzlm6DngrrmgqjmnInmnKrlkIjkvbXnmoTmqpTmoYjjgIIiCisKKyM6IGFkdmljZS5jOjE2NgorbXNnaWQgIkNvbW1pdHRpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLnhKHms5Xmj5DkuqTvvIzlm6DngrrmgqjmnInmnKrlkIjkvbXnmoTmqpTmoYjjgIIiCisKKyM6IGFkdmljZS5jOjE2OAorbXNnaWQgIk1lcmdpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLnhKHms5XlkIjkvbXvvIzlm6DngrrmgqjmnInmnKrlkIjkvbXnmoTmqpTmoYjjgIIiCisKKyM6IGFkdmljZS5jOjE3MAorbXNnaWQgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICLnhKHms5Xmi4nlj5bvvIzlm6DngrrmgqjmnInmnKrlkIjkvbXnmoTmqpTmoYjjgIIiCisKKyM6IGFkdmljZS5jOjE3MgorbXNnaWQgIlJldmVydGluZyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIueEoeazlemChOWOn+aPkOS6pO+8jOWboOeCuuaCqOacieacquWQiOS9teeahOaqlOahiOOAgiIKKworIzogYWR2aWNlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkl0IGlzIG5vdCBwb3NzaWJsZSB0byAlcyBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAi54Sh5rOVICVz77yM5Zug54K65oKo5pyJ5pyq5ZCI5L2155qE5qqU5qGI44CCIgorCisjOiBhZHZpY2UuYzoxODIKK21zZ2lkICIiCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICIiCisi6KuL5Zyo5bel5L2c5Y2A5pS55q2j5qqU5qGI77yM54S25b6M6YWM5oOF5L2/55SoICdnaXQgYWRkL3JtIDzmqpTmoYg+JyDmjIfku6TmqJnoqJhcbiIKKyLop6PmsbrmlrnmoYjkuKbmj5DkuqTjgIIiCisKKyM6IGFkdmljZS5jOjE5MAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIKK21zZ3N0ciAi5Zug54K65a2Y5Zyo5pyq6Kej5rG655qE6KGd56qB6ICM6Zui6ZaL44CCIgorCisjOiBhZHZpY2UuYzoxOTUgYnVpbHRpbi9tZXJnZS5jOjEzMzIKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIuaCqOWwmuacque1kOadn+aCqOeahOWQiOS9te+8iOWtmOWcqCBNRVJHRV9IRUFE77yJ44CCIgorCisjOiBhZHZpY2UuYzoxOTcKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIgorbXNnc3RyICLoq4vlnKjlkIjkvbXliY3lhYjmj5DkuqTmgqjnmoTkv67mlLnjgIIiCisKKyM6IGFkdmljZS5jOjE5OAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAi5Zug54K65a2Y5Zyo5pyq5a6M5oiQ55qE5ZCI5L216ICM6Zui6ZaL44CCIgorCisjOiBhZHZpY2UuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IHN3aXRjaGluZyB0byAnJXMnLlxuIgorIlxuIgorIllvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbFxuIgorImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKyJzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCB0byByZXRhaW4gY29tbWl0cyB5b3UgY3JlYXRlLCB5b3UgbWF5XG4iCisiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWMgd2l0aCB0aGUgc3dpdGNoIGNvbW1hbmQuIEV4YW1wbGU6XG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+XG4iCisiXG4iCisiT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisiVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byAiCisiZmFsc2VcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuazqOaEj++8muato+WcqOWIh+aPm+WIsCAnJXMn44CCXG4iCisiXG4iCisi5oKo5q2j6JmV5pa85YiG6Zui6ZaL6aCt5oyH5qiZ54uA5oWL44CC5oKo5Y+v5Lul5qqi6KaW44CB5YGa5a+m6amX5oCn55qE5L+u5pS55Y+K5o+Q5Lqk77yM5Lim5LiU5oKo5Y+v5Lul5Zyo5YiHIgorIuaPm1xuIgorIuWbnuS4gOWAi+WIhuaUr+aZgu+8jOaNqOajhOWcqOatpOeLgOaFi+S4i+aJgOWBmueahOaPkOS6pOiAjOS4jeWwjeWIhuaUr+mAoOaIkOW9semfv+OAglxuIgorIlxuIgorIuWmguaenOaCqOaDs+imgemAj+mBjuW7uueri+WIhuaUr+S+huS/neeVmeWcqOatpOeLgOaFi+S4i+aJgOWBmueahOaPkOS6pO+8jOaCqOWPr+S7pemAj+mBjuWcqCBzd2l0Y2gg5oyH5LukXG4iCisi5Lit5paw5aKe5Y+D5pW4IC1jIOS+huWvpuePvu+8iOePvuWcqOaIlueojeW+jO+8ieOAguS+i+Wmgu+8mlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtYyA85paw5YiG5pSv5ZCNPlxuIgorIlxuIgorIuaIluiAheW+qeWOn+atpOWLleS9nO+8mlxuIgorIlxuIgorIiAgZ2l0IHN3aXRjaCAtXG4iCisiXG4iCisi6YCP6YGO5bCH6Kit5a6a6K6K5pW4IGFkdmljZS5kZXRhY2hlZEhlYWQg6Kit5a6a54K6IGZhbHNlIOS+humXnOmWieatpOW7uuitsFxuIgorIlxuIgorCisjOiBhbGlhcy5jOjUwCittc2dpZCAiY21kbGluZSBlbmRzIHdpdGggXFwiCittc2dzdHIgIuaMh+S7pOWIl+S7pSBcXCDntZDlsL4iCisKKyM6IGFsaWFzLmM6NTEKK21zZ2lkICJ1bmNsb3NlZCBxdW90ZSIKK21zZ3N0ciAi5pyq6ZaJ5ZCI55qE5byV6JmfIgorCisjOiBhcHBseS5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICLmnKrog73orZjliKXnmoTnqbrnmb3lrZflhYPpgbjpoIUgJyVzJyIKKworIzogYXBwbHkuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIuacquiDveitmOWIpeeahOepuueZveWtl+WFg+W/veeVpemBuOmghSAnJXMnIgorCisjOiBhcHBseS5jOjEzNQorbXNnaWQgIi0tcmVqZWN0IGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIgorbXNnc3RyICItLXJlamVjdCDlkowgLS0zd2F5IOS4jeiDveWQjOaZguS9v+eUqOOAgiIKKworIzogYXBwbHkuYzoxMzcKK21zZ2lkICItLWNhY2hlZCBhbmQgLS0zd2F5IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIKK21zZ3N0ciAiLS1jYWNoZWQg5ZKMIC0tM3dheSDkuI3og73lkIzmmYLkvb/nlKjjgIIiCisKKyM6IGFwcGx5LmM6MTQwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkg5Zyo54mI5pys5bqr5LmL5aSWIgorCisjOiBhcHBseS5jOjE1MQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXgg5Zyo54mI5pys5bqr5LmL5aSWIgorCisjOiBhcHBseS5jOjE1NAorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCDlnKjniYjmnKzluqvkuYvlpJYiCisKKyM6IGFwcGx5LmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIueEoeazlea6luWCmeaZgumWk+aIs+ato+imj+ihqOekuuW8jyAlcyIKKworIzogYXBwbHkuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIOi/lOWbniAlZO+8jOi8uOWFpeeCuu+8miVzIgorCisjOiBhcHBseS5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLkuI3og73lnKjkv67oo5zmqpTnmoTnrKwgJWQg6KGM5om+5Yiw5qqU5qGI5ZCNIgorCisjOiBhcHBseS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumMr+iqpOeahCBnaXQtZGlmZiAtIOaHieeCuiAvZGV2L251bGzvvIzkvYblnKjnrKwgJTIkZCDooYzlvpfliLAgJTEkcyIKKworIzogYXBwbHkuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumMr+iqpOeahCBnaXQtZGlmZiAtIOesrCAlZCDooYzkuIrmlrDmqpTmoYjlkI3kuI3kuIDoh7QiCisKKyM6IGFwcGx5LmM6OTI5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHnvvJrpjK/oqqTnmoQgZ2l0LWRpZmYgLSDnrKwgJWQg6KGM5LiK6IiK5qqU5qGI5ZCN5LiN5LiA6Ie0IgorCisjOiBhcHBseS5jOjkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHnvvJrpjK/oqqTnmoQgZ2l0LWRpZmYgLSDnrKwgJWQg6KGM6JmV5oeJ54K6IC9kZXYvbnVsbCIKKworIzogYXBwbHkuYzo5NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIG9uIGxpbmUgJWQ6ICVzIgorbXNnc3RyICLnrKwgJWQg6KGM5YyF5ZCr54Sh5pWI5qqU5qGI5qih5byP77yaJXMiCisKKyM6IGFwcGx5LmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvbnNpc3RlbnQgaGVhZGVyIGxpbmVzICVkIGFuZCAlZCIKK21zZ3N0ciAi5LiN5LiA6Ie055qE5qqU5qGI6aCt77yMJWQg6KGM5ZKMICVkIOihjCIKKworIzogYXBwbHkuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIueVtuenu+mZpCAlZCDlgIvliY3lsI7ot6/lvpHlvowgZ2l0IGRpZmYg6aCt57y65LmP5qqU5qGI5ZCN6KiK5oGv77yI56ysICVkIOihjO+8iSIKK21zZ3N0clsxXSAi55W256e76ZmkICVkIOWAi+WJjeWwjui3r+W+keW+jCBnaXQgZGlmZiDpoK3nvLrkuY/mqpTmoYjlkI3oqIrmga/vvIjnrKwgJWQg6KGM77yJIgorCisjOiBhcHBseS5jOjEzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIChsaW5lICVkKSIKK21zZ3N0ciAiZ2l0IGRpZmYg55qE5qiZ6aCt6KiK5oGv5Lit57y65LmP5qqU5qGI5ZCN6KiK5oGv77yI56ysICVkIOihjO+8iSIKKworIzogYXBwbHkuYzoxNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudO+8muaEj+WklueahOihjO+8miUuKnMiCisKKyM6IGFwcGx5LmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLnrKwgJWQg6KGM55qE5L+u6KOc5qqU54mH5q615rKS5pyJ5qiZ6aCt6KiK5oGv77yaJS4qcyIKKworIzogYXBwbHkuYzoxNzUzCittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIuaWsOaqlOahiOS+neiztOiIiuWFp+WuuSIKKworIzogYXBwbHkuYzoxNzU1Cittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi5Yiq6Zmk55qE5qqU5qGI5LuN5pyJ5YWn5a65IgorCisjOiBhcHBseS5jOjE3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLkv67oo5zmqpTlnKjnrKwgJWQg6KGM55m854++5pCN5aOeIgorCisjOiBhcHBseS5jOjE4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIuaWsOaqlOahiCAlcyDkvp3os7ToiIrlhaflrrkiCisKKyM6IGFwcGx5LmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICLliKrpmaTnmoTmqpTmoYggJXMg5LuN5pyJ5YWn5a65IgorCisjOiBhcHBseS5jOjE4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiog6K2m5ZGK77ya5qqU5qGIICVzIOaIkOeCuuepuuaqlOahiOS9huS4puacquWIqumZpCIKKworIzogYXBwbHkuYzoxOTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIuS6jOmAsuS9jeS/ruijnOaqlOWcqOesrCAlZCDooYzmkI3lo57vvJolLipzIgorCisjOiBhcHBseS5jOjIwMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLmnKrog73orZjliKXnmoTkuozpgLLkvY3kv67oo5zmqpTkvY3mlrznrKwgJWQg6KGMIgorCisjOiBhcHBseS5jOjIxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAi5L+u6KOc5qqU5qGI55qE56ysICVkIOihjOWPquacieWeg+Wcvuizh+aWmSIKKworIzogYXBwbHkuYzoyMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIueEoeazleiugOWPluespuiZn+mAo+e1kCAlcyIKKworIzogYXBwbHkuYzoyMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIuS4jeiDvemWi+WVn+aIluiugOWPliAlcyIKKworIzogYXBwbHkuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAi54Sh5pWI55qE6KGM6aaW5a2X5YWD77yaJyVjJyIKKworIzogYXBwbHkuYzozMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAi5Y2A5aGKICMlZCDmiJDlip/lpZfnlKjmlrwgJWTvvIjkvY3np7sgJWQg6KGM77yJIgorbXNnc3RyWzFdICLljYDloYogIyVkIOaIkOWKn+Wll+eUqOaWvCAlZO+8iOS9jeenuyAlZCDooYzvvIkiCisKKyM6IGFwcGx5LmM6MzA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICLkuIrkuIvmlofmuJvlsJHliLDvvIglbGQvJWxk77yJ5Lul5Zyo56ysICVkIOihjOWll+eUqOS/ruijnOaqlOeJh+autSIKKworIzogYXBwbHkuYzozMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyLnlbbmn6XoqaLvvJpcbiIKKyIlLipzIgorCisjOiBhcHBseS5jOjMwOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAi57y65bCRICclcycg55qE5LqM6YCy5L2N5L+u6KOc5qqU6LOH5paZIgorCisjOiBhcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggd2l0aG91dCB0aGUgcmV2ZXJzZSBodW5rIHRvICclcyciCittc2dzdHIgIuS4jeiDveWPjeWQkeWll+eUqOS4gOWAi+e8uuWwkeWIsCAnJXMnIOeahOWPjeWQkeizh+aWmeWNgOWhiueahOS6jOmAsuS9jeS/ruijnOaqlCIKKworIzogYXBwbHkuYzozMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyB3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIKK21zZ3N0ciAi5LiN6IO95ZyoICclcycg5LiK5aWX55So5rKS5pyJ5a6M5pW057Si5byV6KGM55qE5LqM6YCy5L2N5L+u6KOc5qqUIgorCisjOiBhcHBseS5jOjMxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSBwYXRjaCBhcHBsaWVzIHRvICclcycgKCVzKSwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGVudHMuIgorbXNnc3RyICLkv67oo5zmqpTlpZfnlKjliLAgJyVzJ++8iCVz77yJ77yM5L2G5piv5ZKM55uu5YmN5YWn5a655LiN56ym5ZCI44CCIgorCisjOiBhcHBseS5jOjMxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgJyVzJyBidXQgaXQgaXMgbm90IGVtcHR5IgorbXNnc3RyICLkv67oo5zmqpTlpZfnlKjliLDnqbrmqpTmoYggJyVzJ++8jOS9huWFtuS4pumdnuepuuaqlOahiCIKKworIzogYXBwbHkuYzozMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAnJXMnIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICLnhKHms5XoroDlj5YgJyUyJHMnIOW/hemcgOeahOebruaomeaqlOahiCAlMSRzIgorCisjOiBhcHBseS5jOjMyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIuS6jOmAsuS9jeS/ruijnOaqlOacquWll+eUqOWIsCAnJXMnIgorCisjOiBhcHBseS5jOjMyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIuWIsCAnJXMnIOeahOS6jOmAsuS9jeS/ruijnOaqlOeUoueUn+S6huS4jeato+eiuueahOe1kOaenO+8iOaHieeCuiAlc++8jOWNu+eCuiAlc++8iSIKKworIzogYXBwbHkuYzozMjI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICLmiZPkv67oo5zmqpTlpLHmlZfvvJolczolbGQiCisKKyM6IGFwcGx5LmM6MzM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIuS4jeiDveewveWHuiAlcyIKKworIzogYXBwbHkuYzozNDAzIGFwcGx5LmM6MzQxNCBhcHBseS5jOjM0NjAgbWlkeC5jOjYxIHNldHVwLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLnhKHms5XoroDlj5YgJXMiCisKKyM6IGFwcGx5LmM6MzQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLoroDlj5bkvY3mlrznrKbomZ/pgKPntZDkuK3nmoQgJyVzJyIKKworIzogYXBwbHkuYzozNDQwIGFwcGx5LmM6MzY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAi6Lev5b6RICVzIOW3sue2k+iiq+mHjeaWsOWRveWQjS/liKrpmaQiCisKKyM6IGFwcGx5LmM6MzUyNiBhcHBseS5jOjM2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIlc++8muS4jeWtmOWcqOaWvOe0ouW8leS4rSIKKworIzogYXBwbHkuYzozNTM1IGFwcGx5LmM6MzcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVz77ya5ZKM57Si5byV5LiN56ym5ZCIIgorCisjOiBhcHBseS5jOjM1NzAKK21zZ2lkICJyZXBvc2l0b3J5IGxhY2tzIHRoZSBuZWNlc3NhcnkgYmxvYiB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICLniYjmnKzluqvnvLrkuY/lv4XopoHnmoTos4fmlpnnianku7bku6XpgLLooYzkuInmlrnlkIjkvbXjgIIiCisKKyM6IGFwcGx5LmM6MzU3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIuWbnuiQveWIsOS4ieaWueWQiOS9tS4uLlxuIgorCisjOiBhcHBseS5jOjM1ODkgYXBwbHkuYzozNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciCittc2dzdHIgIueEoeazleiugOWPliAnJXMnIOeahOebruWJjeWFp+WuuSIKKworIzogYXBwbHkuYzozNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmYWxsIGJhY2sgb24gdGhyZWUtd2F5IG1lcmdlLi4uXG4iCittc2dzdHIgIueEoeazleWbnuiQveWIsOS4ieaWueWQiOS9tS4uLlxuIgorCisjOiBhcHBseS5jOjM2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIHdpdGggY29uZmxpY3RzLlxuIgorbXNnc3RyICLlpZfnlKjkv67oo5zmqpTliLAgJyVzJyDlrZjlnKjooZ3nqoHjgIJcbiIKKworIzogYXBwbHkuYzozNjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggdG8gJyVzJyBjbGVhbmx5LlxuIgorbXNnc3RyICLmiJDlip/lpZfnlKjkv67oo5zmqpTliLAgJyVzJ+OAglxuIgorCisjOiBhcHBseS5jOjM2NTAKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICLnp7vpmaTkv67oo5zmqpTku43nlZnkuIvkuobmqpTmoYjlhaflrrkiCisKKyM6IGFwcGx5LmM6MzcyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXPvvJrpjK/oqqTpoZ7lnosiCisKKyM6IGFwcGx5LmM6MzcyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzIOeahOmhnuWei+aYryAlb++8jOaHieeCuiAlbyIKKworIzogYXBwbHkuYzozODc2IGFwcGx5LmM6Mzg3OCByZWFkLWNhY2hlLmM6ODMwIHJlYWQtY2FjaGUuYzo4NTYKKyM6IHJlYWQtY2FjaGUuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICLnhKHmlYjot6/lvpEgJyVzJyIKKworIzogYXBwbHkuYzozOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXPvvJrlt7LntpPlrZjlnKjmlrzntKLlvJXkuK0iCisKKyM6IGFwcGx5LmM6MzkzNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVz77ya5bey57aT5a2Y5Zyo5pa85bel5L2c5Y2A5LitIgorCisjOiBhcHBseS5jOjM5NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICIlMiRzIOeahOaWsOaooeW8j++8iCUxJG/vvInlkozoiIrmqKHlvI/vvIglMyRv77yJ5LiN56ym5ZCIIgorCisjOiBhcHBseS5jOjM5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICIlMiRzIOeahOaWsOaooeW8j++8iCUxJG/vvInlkowgJTQkcyDnmoToiIrmqKHlvI/vvIglMyRv77yJ5LiN56ym5ZCIIgorCisjOiBhcHBseS5jOjM5ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIuWPl+W9semfv+eahOaqlOahiCAnJXMnIOS9jeaWvOespuiZn+mAo+e1kOS4rSIKKworIzogYXBwbHkuYzozOTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXPvvJrkv67oo5zmqpTmnKrlpZfnlKgiCisKKyM6IGFwcGx5LmM6NDAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+l5L+u6KOc5qqUICVzLi4uIgorCisjOiBhcHBseS5jOjQwOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAi5a2Q5qih57WEICVzIOeahCBzaGExIOioiuaBr+e8uuWwkeaIlueEoeaViCIKKworIzogYXBwbHkuYzo0MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGUgY2hhbmdlIGZvciAlcywgd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgSEVBRCIKK21zZ3N0ciAiJXMg55qE5qih5byP6K6K5pu077yM5L2G5a6D5LiN5Zyo55uu5YmNIEhFQUQg5LitIgorCisjOiBhcHBseS5jOjQxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hhMSBpbmZvcm1hdGlvbiBpcyBsYWNraW5nIG9yIHVzZWxlc3MgKCVzKS4iCittc2dzdHIgInNoYTEg6KiK5oGv57y65bCR5oiW54Sh5pWI77yIJXPvvInjgIIiCisKKyM6IGFwcGx5LmM6NDExMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi5LiN6IO95Zyo5pqr5pmC57Si5byV5Lit5paw5aKeICVzIgorCisjOiBhcHBseS5jOjQxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRlbXBvcmFyeSBpbmRleCB0byAlcyIKK21zZ3N0ciAi5LiN6IO95oqK5pqr5pmC57Si5byV5a+r5YWl5YiwICVzIgorCisjOiBhcHBseS5jOjQyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICLkuI3og73lvp7ntKLlvJXkuK3np7vpmaQgJXMiCisKKyM6IGFwcGx5LmM6NDI5NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIuWtkOaooee1hCAlcyDmkI3lo57nmoTkv67oo5zmqpQiCisKKyM6IGFwcGx5LmM6NDMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bCN5bu656uL5qqU5qGIICclcycg5ZG85Y+rIHN0YXQiCisKKyM6IGFwcGx5LmM6NDMwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAi5LiN6IO954K65bu656uL5qqU5qGIICVzIOW7uueri+W+jOerr+WEsuWtmCIKKworIzogYXBwbHkuYzo0MzE0IGFwcGx5LmM6NDQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi54Sh5rOV54K6ICVzIOaWsOWinuW/q+WPluaineebriIKKworIzogYXBwbHkuYzo0MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLlr6vlhaUgJyVzJyDlpLHmlZciCisKKyM6IGFwcGx5LmM6NDM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAi6Zec6ZaJ5qqU5qGIICclcyciCisKKyM6IGFwcGx5LmM6NDQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIuS4jeiDveWvq+WFpeaqlOahiCAnJXMnIOasiumZkCAlbyIKKworIzogYXBwbHkuYzo0NTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIuaIkOWKn+Wll+eUqOS/ruijnOaqlCAlc+OAgiIKKworIzogYXBwbHkuYzo0NTM3Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIuWFp+mDqOmMr+iqpCIKKworIzogYXBwbHkuYzo0NTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAi5aWX55SoICUlcyDlgIvkv67oo5zmqpTvvIzlhbbkuK0gJWQg5YCL6KKr5ouS57WVLi4uIgorbXNnc3RyWzFdICLlpZfnlKggJSVzIOWAi+S/ruijnOaqlO+8jOWFtuS4rSAlZCDlgIvooqvmi5LntZUuLi4iCisKKyM6IGFwcGx5LmM6NDU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIuaIquefrSAucmVqIOaqlOahiOWQjeeCuiAlLipzLnJlaiIKKworIzogYXBwbHkuYzo0NTU5IGJ1aWx0aW4vZmV0Y2guYzo5MDEgYnVpbHRpbi9mZXRjaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXMiCittc2dzdHIgIuS4jeiDvemWi+WVnyAlcyIKKworIzogYXBwbHkuYzo0NTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIuesrCAjJWQg5YCL54mH5q615oiQ5Yqf5oeJ55So44CCIgorCisjOiBhcHBseS5jOjQ1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICLmi5LntZXnrKwgIyVkIOWAi+eJh+auteOAgiIKKworIzogYXBwbHkuYzo0Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgcGF0Y2ggJyVzJy4iCittc2dzdHIgIueVpemBjuS/ruijnOaqlCAnJXMn44CCIgorCisjOiBhcHBseS5jOjQ3MDQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgIuacquiDveitmOWIpeeahOi8uOWFpSIKKworIzogYXBwbHkuYzo0NzI0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W57Si5byV5qqU5qGIIgorCisjOiBhcHBseS5jOjQ4ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnOiAlcyIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWf5L+u6KOc5qqUICclcyfvvJolcyIKKworIzogYXBwbHkuYzo0OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIuaKkeWItuS4i+S7jeaciSAlZCDlgIvnqbrnmb3lrZflhYPoqqTnlKgiCittc2dzdHJbMV0gIuaKkeWItuS4i+S7jeaciSAlZCDlgIvnqbrnmb3lrZflhYPoqqTnlKgiCisKKyM6IGFwcGx5LmM6NDkxNCBhcHBseS5jOjQ5MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQg6KGM5paw5aKe5LqG56m655m95a2X5YWD6Kqk55So44CCIgorbXNnc3RyWzFdICIlZCDooYzmlrDlop7kuobnqbrnmb3lrZflhYPoqqTnlKjjgIIiCisKKyM6IGFwcGx5LmM6NDkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFwcGxpZWQgYWZ0ZXIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYXBwbGllZCBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICLkv67lvqnnqbrnmb3pjK/oqqTlvozvvIzmh4nnlKjkuoYgJWQg6KGM44CCIgorbXNnc3RyWzFdICLkv67lvqnnqbrnmb3pjK/oqqTlvozvvIzmh4nnlKjkuoYgJWQg6KGM44CCIgorCisjOiBhcHBseS5jOjQ5MzggYnVpbHRpbi9hZGQuYzo1NzkgYnVpbHRpbi9tdi5jOjMwMSBidWlsdGluL3JtLmM6MzkwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLnhKHms5Xlr6vlhaXmlrDntKLlvJXmqpTmoYgiCisKKyM6IGFwcGx5LmM6NDk2NgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIuS4jeimgeaHieeUqOiIh+e1puWHuui3r+W+keWQkeespuWQiOeahOiuiuabtCIKKworIzogYXBwbHkuYzo0OTY5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi5oeJ55So6IiH57Wm5Ye66Lev5b6R5ZCR56ym5ZCI55qE6K6K5pu0IgorCisjOiBhcHBseS5jOjQ5NzEgYnVpbHRpbi9hbS5jOjIyMDYKK21zZ2lkICJudW0iCittc2dzdHIgIuaVuOWtlyIKKworIzogYXBwbHkuYzo0OTcyCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIuW+nuWCs+e1seeahCBkaWZmIOi3r+W+keS4reenu+mZpOaMh+WumuaVuOmHj+eahOWJjeWwjuaWnOe3miIKKworIzogYXBwbHkuYzo0OTc1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAi5b+955Wl5L+u6KOc5qqU5Lit55qE5paw5aKe55qE5qqU5qGIIgorCisjOiBhcHBseS5jOjQ5NzcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIuS4jeWll+eUqOS/ruijnOaqlO+8jOiAjOaYr+mhr+ekuui8uOWFpeeahOW3rueVsOe1seioiO+8iGRpZmZzdGF077yJIgorCisjOiBhcHBseS5jOjQ5ODEKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICLku6XljYHpgLLkvY3mlbjpoa/npLrmlrDlop7lkozliKrpmaTnmoTooYzmlbgiCisKKyM6IGFwcGx5LmM6NDk4MworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIuS4jeWll+eUqOS/ruijnOaqlO+8jOiAjOaYr+mhr+ekuui8uOWFpeeahOamguimgSIKKworIzogYXBwbHkuYzo0OTg1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi5LiN5aWX55So5L+u6KOc5qqU77yM6ICM5piv5qqi6KaW5L+u6KOc5qqU5piv5ZCm5Y+v5oeJ55SoIgorCisjOiBhcHBseS5jOjQ5ODcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIueiuuiqjeS/ruijnOaqlOWPr+S7peWll+eUqOWIsOebruWJjee0ouW8lSIKKworIzogYXBwbHkuYzo0OTg5Cittc2dpZCAibWFyayBuZXcgZmlsZXMgd2l0aCBgZ2l0IGFkZCAtLWludGVudC10by1hZGRgIgorbXNnc3RyICLkvb/nlKjmjIfku6QgYGdpdCBhZGQgLS1pbnRlbnQtdG8tYWRkYCDmqJnoqJjmlrDlop7mqpTmoYgiCisKKyM6IGFwcGx5LmM6NDk5MQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLlpZfnlKjkv67oo5zmqpTogIzkuI3kv67mlLnlt6XkvZzljYAiCisKKyM6IGFwcGx5LmM6NDk5MworbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgIuaOpeWPl+S/ruaUueW3peS9nOWNgOS5i+WkluaqlOahiOeahOS/ruijnOaqlCIKKworIzogYXBwbHkuYzo0OTk2Cittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgIumChOWll+eUqOatpOS/ruijnOaqlO+8iOiIhyAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2sg6YG46aCF5ZCM5pmC5L2/55So77yJIgorCisjOiBhcHBseS5jOjQ5OTgKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICLlpoLmnpzkuIDlgIvkv67oo5zmqpTkuI3og73mh4nnlKjliYflmJfoqabkuInmlrnlkIjkvbUiCisKKyM6IGFwcGx5LmM6NTAwMAorbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICLlu7rnq4vkuIDlgIvmmqvmmYLntKLlvJXln7rmlrzltYzlhaXnmoTntKLlvJXoqIrmga8iCisKKyM6IGFwcGx5LmM6NTAwMyBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTczIGJ1aWx0aW4vbHMtZmlsZXMuYzo1MjQKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi6Lev5b6R5LulIE5VTCDlrZflhYPliIbpmpQiCisKKyM6IGFwcGx5LmM6NTAwNQorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAi56K65L+d6Iez5bCR56ym5ZCIIDxuPiDooYzkuIrkuIvmlociCisKKyM6IGFwcGx5LmM6NTAwNiBidWlsdGluL2FtLmM6MjE4NSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjk4CisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMCBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzEwIGJ1aWx0aW4vcmViYXNlLmM6MTQ3NAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAi5YuV5L2cIgorCisjOiBhcHBseS5jOjUwMDcKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAi5qqi5p+l5paw5aKe5ZKM5L+u5pS555qE6KGM5Lit6ZaT55qE56m655m95a2X5YWD5r+r55SoIgorCisjOiBhcHBseS5jOjUwMTAgYXBwbHkuYzo1MDEzCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAi5bCL5om+5LiK5LiL5paH5pmC5b+955Wl56m655m95a2X5YWD55qE6K6K5pu0IgorCisjOiBhcHBseS5jOjUwMTYKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAi5Y+N5ZCR5aWX55So5L+u6KOc5qqUIgorCisjOiBhcHBseS5jOjUwMTgKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAi54Sh6ZyA6Iez5bCR5LiA6KGM5LiK5LiL5paHIgorCisjOiBhcHBseS5jOjUwMjAKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAi5bCH5ouS57WV55qE5L+u6KOc5qqU54mH5q615YSy5a2Y5Zyo5bCN5oeJ55qEICoucmVqIOaqlOahiOS4rSIKKworIzogYXBwbHkuYzo1MDIyCittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgIuWFgeiosemHjeeWiueahOS/ruijnOaqlOeJh+autSIKKworIzogYXBwbHkuYzo1MDIzIGJ1aWx0aW4vYWRkLmM6MzA5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NSBidWlsdGluL2NvdW50LW9iamVjdHMuYzo5OCBidWlsdGluL2ZzY2suYzo3NzQKKyM6IGJ1aWx0aW4vbG9nLmM6MjE2NiBidWlsdGluL212LmM6MTIzIGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAi6Kmz57Sw6Ly45Ye6IgorCisjOiBhcHBseS5jOjUwMjUKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi5YWB6Kix5LiN5q2j56K655qE5qqU5qGI5pyr5bC+5o+b6KGM56ym6JmfIgorCisjOiBhcHBseS5jOjUwMjgKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIuS4jeS/oeS7u+S/ruijnOaqlOeJh+auteeahOaomemgreioiuaBr+S4reeahOihjOiZnyIKKworIzogYXBwbHkuYzo1MDMwIGJ1aWx0aW4vYW0uYzoyMTk0Cittc2dpZCAicm9vdCIKK21zZ3N0ciAi5qC555uu6YyEIgorCisjOiBhcHBseS5jOjUwMzEKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICLngrrmiYDmnInmqpTmoYjlkI3liY3mlrDlop4gPOagueebrumMhD4iCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs86YG46aCFPl0gPOaoueaIluaPkOS6pD4gWzzot6/lvpE+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNgorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPOeJiOacrOW6qz4gWy0tZXhlYyA85oyH5LukPl0gWzzpgbjpoIU+XSA85qi55oiW5o+Q5LqkPiBbPOi3r+W+kT4uLi5dIgorCisjOiBhcmNoaXZlLmM6MTcKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA854mI5pys5bqrPiBbLS1leGVjIDzmjIfku6Q+XSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzozNzIgYnVpbHRpbi9hZGQuYzoxODAgYnVpbHRpbi9hZGQuYzo1NTUgYnVpbHRpbi9ybS5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICLot6/lvpHopo/moLwgJyVzJyDmnKrnrKblkIjku7vkvZXmqpTmoYgiCisKKyM6IGFyY2hpdmUuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWY6ICUuKnMiCittc2dzdHIgIueEoeatpOW8leeUqO+8miUuKnMiCisKKyM6IGFyY2hpdmUuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7blkI3vvJolcyIKKworIzogYXJjaGl2ZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB0cmVlIG9iamVjdDogJXMiCittc2dzdHIgIuS4jeaYr+S4gOWAi+aoueeLgOeJqeS7tu+8miVzIgorCisjOiBhcmNoaXZlLmM6NDI2Cittc2dpZCAiY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1bnRyYWNrZWQiCittc2dzdHIgIuebruWJjeW3peS9nOebrumMhOacquiiq+i/vei5pCIKKworIzogYXJjaGl2ZS5jOjQ1NworbXNnaWQgImZtdCIKK21zZ3N0ciAi5qC85byPIgorCisjOiBhcmNoaXZlLmM6NDU3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIuatuOaqlOagvOW8jyIKKworIzogYXJjaGl2ZS5jOjQ1OCBidWlsdGluL2xvZy5jOjE2NTMKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgIuWJjee2tCIKKworIzogYXJjaGl2ZS5jOjQ1OQorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIueCuuatuOaqlOS4reavj+WAi+i3r+W+keWQjeWKoOS4iuWJjee2tCIKKworIzogYXJjaGl2ZS5jOjQ2MCBidWlsdGluL2JsYW1lLmM6ODYxIGJ1aWx0aW4vYmxhbWUuYzo4NjUgYnVpbHRpbi9ibGFtZS5jOjg2NgorIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExNyBidWlsdGluL2NvbmZpZy5jOjEyOSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTE2MgorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNjggYnVpbHRpbi9ncmVwLmM6ODk5CisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6MTA1IGJ1aWx0aW4vbHMtZmlsZXMuYzo1NjAgYnVpbHRpbi9scy1maWxlcy5jOjU2MworIzogYnVpbHRpbi9ub3Rlcy5jOjQxMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCisjOiBwYXJzZS1vcHRpb25zLmg6MTkwCittc2dpZCAiZmlsZSIKK21zZ3N0ciAi5qqU5qGIIgorCisjOiBhcmNoaXZlLmM6NDYxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwCittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLmrbjmqpTlr6vlhaXmraTmqpTmoYgiCisKKyM6IGFyY2hpdmUuYzo0NjMKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLoroDlj5blt6XkvZzljYDkuK3nmoQgLmdpdGF0dHJpYnV0ZXMiCisKKyM6IGFyY2hpdmUuYzo0NjQKK21zZ2lkICJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIgorbXNnc3RyICLlnKjmqJnmupbpjK/oqqTkuIrloLHlkYrmrbjmqpTmqpTmoYgiCisKKyM6IGFyY2hpdmUuYzo0NjUKK21zZ2lkICJzdG9yZSBvbmx5IgorbXNnc3RyICLlj6rlhLLlrZgiCisKKyM6IGFyY2hpdmUuYzo0NjYKK21zZ2lkICJjb21wcmVzcyBmYXN0ZXIiCittc2dzdHIgIuWjk+e4rumAn+W6puabtOW/qyIKKworIzogYXJjaGl2ZS5jOjQ3NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAi5aOT57iu5pWI5p6c5pu05aW9IgorCisjOiBhcmNoaXZlLmM6NDc3Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICLliJflh7rmlK/mj7TnmoTmrbjmqpTmoLzlvI8iCisKKyM6IGFyY2hpdmUuYzo0NzkgYnVpbHRpbi9hcmNoaXZlLmM6OTEgYnVpbHRpbi9jbG9uZS5jOjExMyBidWlsdGluL2Nsb25lLmM6MTE2CisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4NAorbXNnaWQgInJlcG8iCittc2dzdHIgIueJiOacrOW6qyIKKworIzogYXJjaGl2ZS5jOjQ4MCBidWlsdGluL2FyY2hpdmUuYzo5MgorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICLlvp7pgaDnq6/niYjmnKzluqvvvIg854mI5pys5bqrPu+8ieaTt+WPluatuOaqlOaqlOahiCIKKworIzogYXJjaGl2ZS5jOjQ4MSBidWlsdGluL2FyY2hpdmUuYzo5MyBidWlsdGluL2RpZmZ0b29sLmM6NzE1CisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAi5oyH5LukIgorCisjOiBhcmNoaXZlLmM6NDgyIGJ1aWx0aW4vYXJjaGl2ZS5jOjk0Cittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICLpgaDnq68gZ2l0LXVwbG9hZC1hcmNoaXZlIOaMh+S7pOeahOi3r+W+kSIKKworIzogYXJjaGl2ZS5jOjQ4OQorbXNnaWQgIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIgorbXNnc3RyICLmnKrnn6Xlj4PmlbggLS1yZW1vdGUiCisKKyM6IGFyY2hpdmUuYzo0OTEKK21zZ2lkICJPcHRpb24gLS1leGVjIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLXJlbW90ZSIKK21zZ3N0ciAi6YG46aCFIC0tZXhlYyDlj6rog73lkowgLS1yZW1vdGUg5ZCM5pmC5L2/55SoIgorCisjOiBhcmNoaXZlLmM6NDkzCittc2dpZCAiVW5leHBlY3RlZCBvcHRpb24gLS1vdXRwdXQiCittc2dzdHIgIuacquefpeWPg+aVuCAtLW91dHB1dCIKKworIzogYXJjaGl2ZS5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGFyY2hpdmUgZm9ybWF0ICclcyciCittc2dzdHIgIuacquefpeatuOaqlOagvOW8jyAnJXMnIgorCisjOiBhcmNoaXZlLmM6NTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQgZm9yIGZvcm1hdCAnJXMnOiAtJWQiCittc2dzdHIgIuWPg+aVuOS4jeaUr+aPtOatpOagvOW8jyAnJXMn77yaLSVkIgorCisjOiBhcmNoaXZlLXRhci5jOjEyNSBhcmNoaXZlLXppcC5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyZWFtIGJsb2IgJXMiCittc2dzdHIgIuS4jeiDvemWi+WVn+izh+aWmeeJqeS7tiAlcyIKKworIzogYXJjaGl2ZS10YXIuYzoyNjYgYXJjaGl2ZS16aXAuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIKK21zZ3N0ciAi5LiN5pSv5o+055qE5qqU5qGI5qih5byP77yaMCVvIChTSEExOiAlcykiCisKKyM6IGFyY2hpdmUtdGFyLmM6MjkzIGFyY2hpdmUtemlwLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzIgorbXNnc3RyICLkuI3og73oroDlj5YgJXMiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIKK21zZ3N0ciAi54Sh5rOV5ZWf5YuVICclcycg6YGO5r++5ZmoIgorCisjOiBhcmNoaXZlLXRhci5jOjQ2OAorbXNnaWQgInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIgorbXNnc3RyICLnhKHms5Xph43lrprlkJHmj4/ov7DnrKYiCisKKyM6IGFyY2hpdmUtdGFyLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsdGVyIHJlcG9ydGVkIGVycm9yIgorbXNnc3RyICInJXMnIOmBjua/vuWZqOWgseWRiuS6humMr+iqpCIKKworIzogYXJjaGl2ZS16aXAuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCBpcyBub3QgdmFsaWQgVVRGLTg6ICVzIgorbXNnc3RyICLot6/lvpHkuI3mmK/mnInmlYjnmoQgVVRGLTjvvJolcyIKKworIzogYXJjaGl2ZS16aXAuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCB0b28gbG9uZyAoJWQgY2hhcnMsIFNIQTE6ICVzKTogJXMiCittc2dzdHIgIui3r+W+keWkqumVt++8iCVkIOWtl+WFg++8jFNIQTHvvJolc++8ie+8miVzIgorCisjOiBhcmNoaXZlLXppcC5jOjQ3OSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgIuWjk+e4rumMr+iqpCAoJWQpIgorCisjOiBhcmNoaXZlLXppcC5jOjYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJTxQUkl1TUFYPiIKK21zZ3N0ciAi5bCN5pa85pys57O757Wx5pmC6ZaT5oiz5aSq5aSn77yaJTxQUkl1TUFYPiIKKworIzogYXR0ci5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIgorbXNnc3RyICIlLipzIOS4jeaYr+S4gOWAi+acieaViOeahOWxrOaAp+WQjSIKKworIzogYXR0ci5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBub3QgYWxsb3dlZDogJXM6JWQiCittc2dzdHIgIuS4jeWFgeiosSAlc++8miVzOiVkIgorCisjOiBhdHRyLmM6NDA5Cittc2dpZCAiIgorIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIGluIGdpdCBhdHRyaWJ1dGVzXG4iCisiVXNlICdcXCEnIGZvciBsaXRlcmFsIGxlYWRpbmcgZXhjbGFtYXRpb24uIgorbXNnc3RyICIiCisi5Y+N5ZCR5qih5byP5ZyoIGdpdCBhdHRyaWJ1dGVzIOS4reiiq+W/veeVpVxuIgorIueVtuWtl+S4sueiuuWvpuimgeS7pempmuWYhuiZn+mWi+Wni+aZgu+8jOS9v+eUqCAnXFwhJ+OAgiIKKworIzogYmlzZWN0LmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiCittc2dzdHIgIuaqlOahiCAnJXMnIOWMheWQq+mMr+iqpOeahOW8leeUqOagvOW8j++8miVzIgorCisjOiBiaXNlY3QuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2UgY2Fubm90IGJpc2VjdCBtb3JlIVxuIgorbXNnc3RyICLmiJHlgJHnhKHms5XpgLLooYzmm7TlpJrnmoTkuozliIblsIvmib7vvIFcbiIKKworIzogYmlzZWN0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTmj5DkuqTlkI0gJXMiCisKKyM6IGJpc2VjdC5jOjc1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorIlRoaXMgbWVhbnMgdGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIgorbXNnc3RyICIiCisi5ZCI5L215Z+656SOICVzIOaYr+WjnueahOOAglxuIgorIumAmeaEj+WRs+iRl+S7i+aWvCAlcyDlkowgWyVzXSDkuYvplpPnmoQgYnVnIOW3sue2k+iiq+S/ruW+qeOAglxuIgorCisjOiBiaXNlY3QuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBtZXJnZSBiYXNlICVzIGlzIG5ldy5cbiIKKyJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIuWQiOS9teWfuuekjiAlcyDmmK/mlrDnmoTjgIJcbiIKKyLku4vmlrwgJXMg5ZKMIFslc10g5LmL6ZaT55qE5bGs5oCn5bey57aT6KKr5L+u5pS544CCXG4iCisKKyM6IGJpc2VjdC5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIG1lcmdlIGJhc2UgJXMgaXMgJXMuXG4iCisiVGhpcyBtZWFucyB0aGUgZmlyc3QgJyVzJyBjb21taXQgaXMgYmV0d2VlbiAlcyBhbmQgWyVzXS5cbiIKK21zZ3N0ciAiIgorIuWQiOS9teWfuuekjiAlcyDmmK8gJXPjgIJcbiIKKyLpgJnmhI/lkbPokZfnrKzkuIDlgIsgJyVzJyDmj5DkuqTkvY3mlrwgJXMg5ZKMIFslc10g5LmL6ZaT44CCXG4iCisKKyM6IGJpc2VjdC5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3JzIG9mIHRoZSAlcyByZXYuXG4iCisiZ2l0IGJpc2VjdCBjYW5ub3Qgd29yayBwcm9wZXJseSBpbiB0aGlzIGNhc2UuXG4iCisiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iCittc2dzdHIgIiIKKyLkuIDkupsgJXMg54mI5pys5LiN5pivICVzIOeJiOacrOeahOelluWFiOOAglxuIgorIumAmeeoruaDheazgeS4iyBnaXQg5LqM5YiG5bCL5om+54Sh5rOV5q2j5bi45bel5L2c44CCXG4iCisi5oKo5Y+v6IO95byE6Yyv5LqGICVzIOWSjCAlcyDniYjmnKzvvJ9cbiIKKworIzogYmlzZWN0LmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICVzIGFuZCBbJXNdIG11c3QgYmUgc2tpcHBlZC5cbiIKKyJTbyB3ZSBjYW5ub3QgYmUgc3VyZSB0aGUgZmlyc3QgJXMgY29tbWl0IGlzIGJldHdlZW4gJXMgYW5kICVzLlxuIgorIldlIGNvbnRpbnVlIGFueXdheS4iCittc2dzdHIgIiIKKyLku4vmlrwgJXMg5ZKMIFslc10g55qE5ZCI5L215Z+656SO5LiA5a6a6KKr5b+955Wl5LqG44CCXG4iCisi5omA5Lul5oiR5YCR54Sh5rOV56K66KqN56ys5LiA5YCLICVzIOaPkOS6pOaYr+WQpuS7i+aWvCAlcyDlkowgJXMg5LmL6ZaT44CCXG4iCisi5oiR5YCR5LuN6IiK57m857qM44CCIgorCisjOiBiaXNlY3QuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmlzZWN0aW5nOiBhIG1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWRcbiIKK21zZ3N0ciAi5LqM5YiG5bCL5om+5Lit77ya5ZCI5L215Z+656SO5b+F6aCI5piv57aT6YGO5ris6Kmm55qEXG4iCisKKyM6IGJpc2VjdC5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJhICVzIHJldmlzaW9uIGlzIG5lZWRlZCIKK21zZ3N0ciAi6ZyA6KaB5LiA5YCLICVzIOeJiOacrCIKKworIzogYmlzZWN0LmM6ODg0IGJ1aWx0aW4vbm90ZXMuYzoxNzcgYnVpbHRpbi90YWcuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveW7uueri+aqlOahiCAnJXMnIgorCisjOiBiaXNlY3QuYzo5MjggYnVpbHRpbi9tZXJnZS5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveiugOWPluaqlOahiCAnJXMnIgorCisjOiBiaXNlY3QuYzo5NTgKK21zZ2lkICJyZWFkaW5nIGJpc2VjdCByZWZzIGZhaWxlZCIKK21zZ3N0ciAi6K6A5Y+W5LqM5YiG5bCL5om+5byV55So5aSx5pWXIgorCisjOiBiaXNlY3QuYzo5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgd2FzIGJvdGggJXMgYW5kICVzXG4iCittc2dzdHIgIiVzIOWQjOaZgueCuiAlcyDlkowgJXNcbiIKKworIzogYmlzZWN0LmM6OTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0ZXN0YWJsZSBjb21taXQgZm91bmQuXG4iCisiTWF5YmUgeW91IHN0YXJ0ZWQgd2l0aCBiYWQgcGF0aCBwYXJhbWV0ZXJzP1xuIgorbXNnc3RyICIiCisi5rKS5pyJ55m854++5Y+v5ris6Kmm55qE5o+Q5Lqk44CCXG4iCisi5Y+v6IO95oKo5Zyo5Z+36KGM5pmC5L2/55So5LqG6Yyv6Kqk55qE6Lev5b6R5Y+D5pW477yfXG4iCisKKyM6IGJpc2VjdC5jOjEwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJvdWdobHkgJWQgc3RlcCkiCittc2dpZF9wbHVyYWwgIihyb3VnaGx5ICVkIHN0ZXBzKSIKK21zZ3N0clswXSAi77yI5aSn5qaCICVkIOatpe+8iSIKK21zZ3N0clsxXSAi77yI5aSn5qaCICVkIOatpe+8iSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBsYXN0ICVzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCAiKHJvdWdobHkgJWQKKyMuIHN0ZXBzKSIgdHJhbnNsYXRpb24uCisjLgorIzogYmlzZWN0LmM6MTAxMAorIywgYy1mb3JtYXQKK21zZ2lkICJCaXNlY3Rpbmc6ICVkIHJldmlzaW9uIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dpZF9wbHVyYWwgIkJpc2VjdGluZzogJWQgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICVzXG4iCittc2dzdHJbMF0gIuS6jOWIhuWwi+aJvuS4re+8muWcqOatpOS5i+W+jO+8jOmChOWJqSAlZCDlgIvniYjmnKzlvoXmuKzoqaYgJXNcbiIKK21zZ3N0clsxXSAi5LqM5YiG5bCL5om+5Lit77ya5Zyo5q2k5LmL5b6M77yM6YKE5YmpICVkIOWAi+eJiOacrOW+hea4rOippiAlc1xuIgorCisjOiBibGFtZS5jOjI3MDAKK21zZ2lkICItLWNvbnRlbnRzIGFuZCAtLXJldmVyc2UgZG8gbm90IGJsZW5kIHdlbGwuIgorbXNnc3RyICItLWNvbnRlbnRzIOWSjCAtLXJldmVyc2Ug5LiN6IO95re355So44CCIgorCisjOiBibGFtZS5jOjI3MTQKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiCittc2dzdHIgIuS4jeiDveWwhyAtLWNvbnRlbnRzIOWSjOacgOe1gueahOaPkOS6pOeJqeS7tuWQjeWFseeUqCIKKworIzogYmxhbWUuYzoyNzM1Cittc2dpZCAiLS1yZXZlcnNlIGFuZCAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHNwZWNpZmllZCBsYXRlc3QgY29tbWl0IgorbXNnc3RyICItLXJldmVyc2Ug5ZKMIC0tZmlyc3QtcGFyZW50IOWFseeUqO+8jOmcgOimgeaMh+WumuacgOaWsOeahOaPkOS6pCIKKworIzogYmxhbWUuYzoyNzQ0IGJ1bmRsZS5jOjE2NyByZWYtZmlsdGVyLmM6MjIwMyByZW1vdGUuYzoxOTQxIHNlcXVlbmNlci5jOjIwOTMKKyM6IHNlcXVlbmNlci5jOjQ0NjAgYnVpbHRpbi9jb21taXQuYzoxMDQwIGJ1aWx0aW4vbG9nLmM6Mzg4IGJ1aWx0aW4vbG9nLmM6OTkxCisjOiBidWlsdGluL2xvZy5jOjE1MjAgYnVpbHRpbi9sb2cuYzoxOTI1IGJ1aWx0aW4vbG9nLmM6MjIxNSBidWlsdGluL21lcmdlLmM6NDExCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQzCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTkyCittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgIueJiOacrOmBjeatt+ioreWumuWkseaVlyIKKworIzogYmxhbWUuYzoyNzYyCittc2dpZCAiIgorIi0tcmV2ZXJzZSAtLWZpcnN0LXBhcmVudCB0b2dldGhlciByZXF1aXJlIHJhbmdlIGFsb25nIGZpcnN0LXBhcmVudCBjaGFpbiIKK21zZ3N0ciAiLS1yZXZlcnNlIOWSjCAtLWZpcnN0LXBhcmVudCDlhbHnlKjvvIzpnIDopoHnrKzkuIDnpZblhYjpj4jkuIrnmoTmj5DkuqTnr4TlnI0iCisKKyM6IGJsYW1lLmM6Mjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHBhdGggJXMgaW4gJXMiCittc2dzdHIgIuWcqCAlMiRzIOS4reeEoeatpOi3r+W+kSAlMSRzIgorCisjOiBibGFtZS5jOjI3ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIKK21zZ3N0ciAi5LiN6IO954K66Lev5b6RICUyJHMg6K6A5Y+W6LOH5paZ54mp5Lu2ICUxJHMiCisKKyM6IGJyYW5jaC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJBZnRlciBmaXhpbmcgdGhlIGVycm9yIGNhdXNlIHlvdSBtYXkgdHJ5IHRvIGZpeCB1cFxuIgorInRoZSByZW1vdGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYnkgaW52b2tpbmdcbiIKKyJcImdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMlcyVzXCIuIgorbXNnc3RyICIiCisiXG4iCisi5Zyo5L+u5b6p6Yyv6Kqk5b6M77yM5oKo5Y+v5Lul5ZiX6Kmm5L+u5pS56YGg56uv6L+96Lmk5YiG5pSv77yM6YCP6YGO5Z+36KGM5oyH5LukXG4iCisiXCJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzJXMlc1wiIOOAgiIKKworIzogYnJhbmNoLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICLmnKroqK3lrprliIbmlK8gJXMg5L2c54K65a6D6Ieq5bex55qE5LiK5ri444CCIgorCisjOiBicmFuY2guYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJyBieSByZWJhc2luZy4iCittc2dzdHIgIuWIhuaUryAnJTEkcycg6Kit5a6a54K65L2/55So6YeN5a6a5Z+65bqV5L6G6L+96Lmk5L6G6IeqICclMyRzJyDnmoTpgaDnq6/liIbmlK8gJyUyJHMn44CCIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAnJXMnIGZyb20gJyVzJy4iCittc2dzdHIgIuWIhuaUryAnJTEkcycg6Kit5a6a54K66L+96Lmk5L6G6IeqICclMyRzJyDnmoTpgaDnq6/liIbmlK8gJyUyJHMn44CCIgorCisjOiBicmFuY2guYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLliIbmlK8gJyVzJyDoqK3lrprngrrkvb/nlKjph43lrprln7rlupXkvobov73ouaTmnKzmqZ/liIbmlK8gJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6Kit5a6a54K66L+96Lmk5pys5qmf5YiG5pSvICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6Kit5a6a54K65L2/55So6YeN5a6a5Z+65bqV5L6G6L+96Lmk6YGg56uv5byV55SoICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAnJXMnLiIKK21zZ3N0ciAi5YiG5pSvICclcycg6Kit5a6a54K66L+96Lmk6YGg56uv5byV55SoICclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICclcycgYnkgcmViYXNpbmcuIgorbXNnc3RyICLliIbmlK8gJyVzJyDoqK3lrprngrrkvb/nlKjph43lrprln7rlupXkvobov73ouaTmnKzmqZ/lvJXnlKggJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJyVzJy4iCittc2dzdHIgIuWIhuaUryAnJXMnIOioreWumueCuui/vei5pOacrOapn+W8leeUqCAnJXMn44CCIgorCisjOiBicmFuY2guYzoxMTkKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgdXBzdHJlYW0gYnJhbmNoIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIueEoeazleWvq+WFpeS4iua4uOWIhuaUr+ioreWumiIKKworIzogYnJhbmNoLmM6MTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgIuacqui/vei5pO+8muW8leeUqCAlcyDmnInmrafnvqkiCisKKyM6IGJyYW5jaC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoTliIbmlK/lkI3nqLHjgIIiCisKKyM6IGJyYW5jaC5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi5LiA5YCL5YiG5pSv5ZCNICclcycg5bey57aT5a2Y5Zyo44CCIgorCisjOiBicmFuY2guYzoyMTMKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIueEoeazleW8t+WItuabtOaWsOebruWJjeWIhuaUr+OAgiIKKworIzogYnJhbmNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICLnhKHms5XoqK3lrprov73ouaToqIrmga/vvJvotbflp4vpu54gJyVzJyDkuI3mmK/kuIDlgIvliIbmlK/jgIIiCisKKyM6IGJyYW5jaC5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLoq4vmsYLnmoTkuIrmuLjliIbmlK8gJyVzJyDkuI3lrZjlnKgiCisKKyM6IGJyYW5jaC5jOjIzNworbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIuWmguaenOaCqOato+ioiOWKg+WfuuaWvOmBoOerr+S4gOWAi+ePvuWtmOeahOS4iua4uOWIhuaUr+mWi+Wni+S9oOeahOW3peS9nO+8jFxuIgorIuaCqOWPr+iDvemcgOimgeWft+ihjCBcImdpdCBmZXRjaFwiIOS+huWPluW+l+WIhuaUr+OAglxuIgorIlxuIgorIuWmguaenOaCqOato+ioiOWKg+aOqOmAgeS4gOWAi+iDveiIh+WwjeaHiemBoOerr+WIhuaUr+W7uueri+i/vei5pOeahOaWsOeahOacrOapn+WIhuaUr++8jFxuIgorIuaCqOWPr+iDvemcgOimgeS9v+eUqCBcImdpdCBwdXNoIC11XCIg5o6o6YCB5YiG5pSv5Lim6Kit5a6a5ZKM5LiK5ri455qE6Zec6IGv44CCIgorCisjOiBicmFuY2guYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7blkI3vvJonJXMn44CCIgorCisjOiBicmFuY2guYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi5q2n576p55qE54mp5Lu25ZCN77yaJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIueEoeaViOeahOWIhuaUr+m7nu+8miclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyDlt7LntpPnsL3lh7rliLAgJyVzJyIKKworIzogYnJhbmNoLmM6Mzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgb2Ygd29ya2luZyB0cmVlICVzIGlzIG5vdCB1cGRhdGVkIgorbXNnc3RyICLlt6XkvZzljYAgJXMg55qEIEhFQUQg5oyH5ZCR5rKS5pyJ6KKr5pu05pawIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICInJXMnIOS4jeWDj+aYr+S4gOWAiyB2MiDniYjmnKznmoTljIXmqpTmoYgiCisKKyM6IGJ1bmRsZS5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qE5YyF6aCt77yaJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo5MCByZXJlcmUuYzo0ODAgcmVyZXJlLmM6NjkwIHNlcXVlbmNlci5jOjIzNDQgc2VxdWVuY2VyLmM6MzEwOAorIzogYnVpbHRpbi9jb21taXQuYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWfICclcyciCisKKyM6IGJ1bmRsZS5jOjE0MworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICLniYjmnKzluqvkuK3nvLrlsJHpgJnkupvlv4XlgpnnmoTmj5DkuqTvvJoiCisKKyM6IGJ1bmRsZS5jOjE0NgorbXNnaWQgIm5lZWQgYSByZXBvc2l0b3J5IHRvIHZlcmlmeSBhIGJ1bmRsZSIKK21zZ3N0ciAi6ZyA6KaB54mI5pys5bqr6amX6K2J5LiA5YCL5YyFIgorCisjOiBidW5kbGUuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIumAmeWAi+WMheS4reWQq+aciemAmeWAi+W8leeUqO+8miIKK21zZ3N0clsxXSAi6YCZ5YCL5YyF5Lit5ZCr5pyJICVkIOWAi+W8leeUqO+8miIKKworIzogYnVuZGxlLmM6MjA0Cittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIumAmeWAi+WMheiomOmMhOS4gOWAi+WujOaVtOatt+WPsuOAgiIKKworIzogYnVuZGxlLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLpgJnlgIvljIXpnIDopoHpgJnlgIvlvJXnlKjvvJoiCittc2dzdHJbMV0gIumAmeWAi+WMhemcgOimgSAlZCDlgIvlvJXnlKjvvJoiCisKKyM6IGJ1bmRsZS5jOjI3MworbXNnaWQgInVuYWJsZSB0byBkdXAgYnVuZGxlIGRlc2NyaXB0b3IiCittc2dzdHIgIueEoeazleikh+ijvSBidW5kbGUg5o+P6L+w56ymIgorCisjOiBidW5kbGUuYzoyODAKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICLkuI3og73nlJ/miJAgcGFjay1vYmplY3RzIOmAsueoiyIKKworIzogYnVuZGxlLmM6MjkxCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgInBhY2stb2JqZWN0cyDntYLmraIiCisKKyM6IGJ1bmRsZS5jOjMzMworbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IOe1guatoiIKKworIzogYnVuZGxlLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICLlvJXnlKggJyVzJyDooqsgcmV2LWxpc3Qg6YG46aCF5o6S6ZmkIgorCisjOiBidW5kbGUuYzo0NjEgYnVpbHRpbi9sb2cuYzoyMDMgYnVpbHRpbi9sb2cuYzoxODE0IGJ1aWx0aW4vc2hvcnRsb2cuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qE5Y+D5pW477yaJXMiCisKKyM6IGJ1bmRsZS5jOjQ2OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICLkuI3og73lu7rnq4vnqbrljIXjgIIiCisKKyM6IGJ1bmRsZS5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIuS4jeiDveW7uueriyAnJXMnIgorCisjOiBidW5kbGUuYzo1MDQKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgImluZGV4LXBhY2sg57WC5q2iIgorCisjOiBjb2xvci5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICLnhKHmlYjnmoTpoY/oibLlgLzvvJolLipzIgorCisjOiBjb21taXQuYzo1MSBzZXF1ZW5jZXIuYzoyODExIGJ1aWx0aW4vYW0uYzozNTQgYnVpbHRpbi9hbS5jOjM5OAorIzogYnVpbHRpbi9hbS5jOjEzNjYgYnVpbHRpbi9hbS5jOjIwMDkgYnVpbHRpbi9yZXBsYWNlLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QICVzIgorCisjOiBjb21taXQuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyDkuI3mmK/kuIDlgIvmj5DkuqTvvIEiCisKKyM6IGNvbW1pdC5jOjE5MworbXNnaWQgIiIKKyJTdXBwb3J0IGZvciA8R0lUX0RJUj4vaW5mby9ncmFmdHMgaXMgZGVwcmVjYXRlZFxuIgorImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgR2l0IHZlcnNpb24uXG4iCisiXG4iCisiUGxlYXNlIHVzZSBcImdpdCByZXBsYWNlIC0tY29udmVydC1ncmFmdC1maWxlXCJcbiIKKyJ0byBjb252ZXJ0IHRoZSBncmFmdHMgaW50byByZXBsYWNlIHJlZnMuXG4iCisiXG4iCisiVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmdcbiIKKyJcImdpdCBjb25maWcgYWR2aWNlLmdyYWZ0RmlsZURlcHJlY2F0ZWQgZmFsc2VcIiIKK21zZ3N0ciAiIgorIuWwjSA8R0lUX0RJUj4vaW5mby9ncmFmdHMg55qE5pSv5o+05bey6KKr5qOE55So77yM5Lim5bCH5ZyoXG4iCisi5pyq5L6G55qER2l054mI5pys5Lit6KKr56e76Zmk44CCXG4iCisiXG4iCisi6KuL5L2/55SoIFwiZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGVcIiDlsIdcbiIKKyJncmFmdHMg6L2J5o+b54K65Y+W5Luj5byV55So44CCXG4iCisiXG4iCisi6Kit5a6aIFwiZ2l0IGNvbmZpZyBhZHZpY2UuZ3JhZnRGaWxlRGVwcmVjYXRlZCBmYWxzZVwiXG4iCisi5Y+v6Zec6ZaJ5pys5raI5oGvIgorCisjOiBjb21taXQuYzoxMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIuaPkOS6pCAlcyDmnInkuIDlgIvpnZ7lj6/kv6HnmoTogbLnqLHkvoboh6ogJXMg55qEIEdQRyDnsL3lkI3jgIIiCisKKyM6IGNvbW1pdC5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIuaPkOS6pCAlcyDmnInkuIDlgIvpjK/oqqTnmoTogbLnqLHkvoboh6ogJXMg55qEIEdQRyDnsL3lkI3jgIIiCisKKyM6IGNvbW1pdC5jOjExNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAi5o+Q5LqkICVzIOaykuaciSBHUEcg57C95ZCN44CCIgorCisjOiBjb21taXQuYzoxMTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAi5o+Q5LqkICVzIOacieS4gOWAi+S+huiHqiAlcyDnmoTlpb3nmoQgR1BHIOewveWQjeOAglxuIgorCisjOiBjb21taXQuYzoxNDE1Cittc2dpZCAiIgorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIgorbXNnc3RyICIiCisi6K2m5ZGK77ya5o+Q5Lqk6Kqq5piO5LiN56ym5ZCIIFVURi04IOWtl+WFg+e3qOeivOOAglxuIgorIuaCqOWPr+S7pemAj+mBjuS/ruijnOaPkOS6pOS+huaUueato+aPkOS6pOiqquaYju+8jOaIluiAheWwh+ioreWumuiuiuaVuCBpMThuLmNvbW1pdGVuY29kaW5nXG4iCisi6Kit5a6a54K65oKo6aCF55uu5omA55So55qE5a2X5YWD57eo56K844CCXG4iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEzMAorbXNnaWQgImNvbW1pdC1ncmFwaCBmaWxlIGlzIHRvbyBzbWFsbCIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i5qqU5qGI5aSq5bCPIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHNpZ25hdHVyZSAlWCBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUgJVgiCittc2dzdHIgIuaPkOS6pOWcluW9ouewveWQjSAlWCDlkoznsL3lkI0gJVgg5LiN56ym5ZCIIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIHZlcnNpb24gJVggZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiAlWCIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i54mI5pysICVYIOWSjOeJiOacrCAlWCDkuI3nrKblkIgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggaGFzaCB2ZXJzaW9uICVYIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gJVgiCittc2dzdHIgIuaPkOS6pOWcluW9oumbnOa5iueJiOacrCAlWCDlkozniYjmnKwgJVgg5LiN56ym5ZCIIgorCisjOiBjb21taXQtZ3JhcGguYzoyMzIKK21zZ2lkICJjb21taXQtZ3JhcGggY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3Npbmc7IGZpbGUgbWF5IGJlIGluY29tcGxldGUiCittc2dzdHIgIuaPkOS6pOWcluW9ouWNgOWhiuWwi+aJvuihqOaineebrumBuuWkse+8jOaqlOahiOWPr+iDveS4jeWujOaVtCIKKworIzogY29tbWl0LWdyYXBoLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBpbXByb3BlciBjaHVuayBvZmZzZXQgJTA4eCUwOHgiCittc2dzdHIgIuaPkOS6pOWcluW9ouS4jeato+eiuueahOWNgOWhiuS9jeenuyAlMDh4JTA4eCIKKworIzogY29tbWl0LWdyYXBoLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBjaHVuayBpZCAlMDh4IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMiCittc2dzdHIgIuaPkOS6pOWcluW9ouWNgOWhiiBpZCAlMDh4IOWHuuePvuS6huWkmuasoSIKKworIzogY29tbWl0LWdyYXBoLmM6MzUwCittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBubyBiYXNlIGdyYXBocyBjaHVuayIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i5rKS5pyJ5Z+656SO5ZyW5b2i5Y2A5aGKIgorCisjOiBjb21taXQtZ3JhcGguYzozNjAKK21zZ2lkICJjb21taXQtZ3JhcGggY2hhaW4gZG9lcyBub3QgbWF0Y2giCittc2dzdHIgIuaPkOS6pOWcluW9oumPiOS4jeespuWQiCIKKworIzogY29tbWl0LWdyYXBoLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0LWdyYXBoIGNoYWluOiBsaW5lICclcycgbm90IGEgaGFzaCIKK21zZ3N0ciAi54Sh5pWI55qE5o+Q5Lqk5ZyW5b2i6Y+I77ya6KGMICclcycg5LiN5piv5LiA5YCL6Zuc5rmK5YC8IgorCisjOiBjb21taXQtZ3JhcGguYzo0MzMKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBhbGwgY29tbWl0LWdyYXBoIGZpbGVzIgorbXNnc3RyICLnhKHms5Xmib7liLDmiYDmnInmj5DkuqTlnJblvaLmqpTmoYgiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU2NCBjb21taXQtZ3JhcGguYzo2MjQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBwb3NpdGlvbi4gY29tbWl0LWdyYXBoIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICLnhKHmlYjnmoTmj5DkuqTkvY3nva7jgILmj5DkuqTlnJblvaLlj6/og73lt7LmkI3lo54iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmluZCBjb21taXQgJXMiCittc2dzdHIgIueEoeazleaJvuWIsOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6ODU4IGJ1aWx0aW4vYW0uYzoxMjg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTAxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdldCB0eXBlIG9mIG9iamVjdCAlcyIKK21zZ3N0ciAi54Sh5rOV542y5b6X54mp5Lu2ICVzIOmhnuWeiyIKKworIzogY29tbWl0LWdyYXBoLmM6MTA0OQorbXNnaWQgIkxvYWRpbmcga25vd24gY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOi8ieWFpeaPkOS6pOWcluS4reeahOW3suefpeaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA2NgorbXNnaWQgIkV4cGFuZGluZyByZWFjaGFibGUgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOaTtOWxleaPkOS6pOWcluS4reeahOWPr+S7peWPluW+l+aPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTA4NQorbXNnaWQgIkNsZWFyaW5nIGNvbW1pdCBtYXJrcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOa4hemZpOaPkOS6pOWcluS4reeahOaPkOS6pOaomeiomCIKKworIzogY29tbWl0LWdyYXBoLmM6MTEwNAorbXNnaWQgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIgorbXNnc3RyICLmraPlnKjoqIjnrpfmj5DkuqTlnJbkuJbku6PmlbjlrZciCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFjayIKK21zZ2lkX3BsdXJhbCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggaW4gJWQgcGFja3MiCittc2dzdHJbMF0gIuato+WcqCAlZCDlgIvljIXkuK3lsIvmib7mj5DkuqTlnJbnmoTmj5DkuqQiCittc2dzdHJbMV0gIuato+WcqCAlZCDlgIvljIXkuK3lsIvmib7mj5DkuqTlnJbnmoTmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgYWRkaW5nIHBhY2sgJXMiCittc2dzdHIgIuaWsOWinuWMhSAlcyDnmbznlJ/pjK/oqqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjExOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3Igb3BlbmluZyBpbmRleCBmb3IgJXMiCittc2dzdHIgIueCuiAlcyDplovllZ/ntKLlvJXnmbznlJ/pjK/oqqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluZGluZyBjb21taXRzIGZvciBjb21taXQgZ3JhcGggZnJvbSAlZCByZWYiCittc2dpZF9wbHVyYWwgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGZyb20gJWQgcmVmcyIKK21zZ3N0clswXSAi5q2j5Zyo5b6eICVkIOWAi+W8leeUqOS4reWwi+aJvuaPkOS6pOWclueahOaPkOS6pCIKK21zZ3N0clsxXSAi5q2j5Zyo5b6eICVkIOWAi+W8leeUqOS4reWwi+aJvuaPkOS6pOWclueahOaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MTI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQ6ICVzIgorbXNnc3RyICLnhKHmlYjnmoTmj5DkuqTnianku7YgSUTvvJolcyIKKworIzogY29tbWl0LWdyYXBoLmM6MTI1NQorbXNnaWQgIkZpbmRpbmcgY29tbWl0cyBmb3IgY29tbWl0IGdyYXBoIGFtb25nIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLmraPlnKjmiZPljIXnianku7bkuK3lsIvmib7mj5DkuqTlnJbnmoTmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjEyNzAKK21zZ2lkICJDb3VudGluZyBkaXN0aW5jdCBjb21taXRzIGluIGNvbW1pdCBncmFwaCIKK21zZ3N0ciAi5q2j5Zyo6KiI566X5o+Q5Lqk5ZyW5Lit5LiN5ZCM55qE5o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzAwCittc2dpZCAiRmluZGluZyBleHRyYSBlZGdlcyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOWwi+aJvuaPkOS6pOWcluS4remhjeWklueahOmCiiIKKworIzogY29tbWl0LWdyYXBoLmM6MTM0NgorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb3JyZWN0IG51bWJlciBvZiBiYXNlIGdyYXBoIGlkcyIKK21zZ3N0ciAi54Sh5rOV5a+r5YWl5q2j56K65pW46YeP55qE5Z+656SO5ZyW5b2iIElEIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzc5IG1pZHguYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIgorbXNnc3RyICLkuI3og73ngrogJXMg5bu656uL5YWI5bCO55uu6YyEIgorCisjOiBjb21taXQtZ3JhcGguYzoxMzkxIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwNiBidWlsdGluL3JlcGFjay5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIuS4jeiDveW7uueriyAnJXMnIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgb3V0IGNvbW1pdCBncmFwaCBpbiAlZCBwYXNzIgorbXNnaWRfcGx1cmFsICJXcml0aW5nIG91dCBjb21taXQgZ3JhcGggaW4gJWQgcGFzc2VzIgorbXNnc3RyWzBdICLmraPlnKjnlKggJWQg5q2l5a+r5Ye65o+Q5Lqk5ZyWIgorbXNnc3RyWzFdICLmraPlnKjnlKggJWQg5q2l5a+r5Ye65o+Q5Lqk5ZyWIgorCisjOiBjb21taXQtZ3JhcGguYzoxNDkyCittc2dpZCAidW5hYmxlIHRvIG9wZW4gY29tbWl0LWdyYXBoIGNoYWluIGZpbGUiCittc2dzdHIgIueEoeazlemWi+WVn+aPkOS6pOWcluW9oumPiOaqlOahiCIKKworIzogY29tbWl0LWdyYXBoLmM6MTUwNAorbXNnaWQgImZhaWxlZCB0byByZW5hbWUgYmFzZSBjb21taXQtZ3JhcGggZmlsZSIKK21zZ3N0ciAi54Sh5rOV6YeN5paw5ZG95ZCN5Z+656SO5o+Q5Lqk5ZyW5b2i5qqU5qGIIgorCisjOiBjb21taXQtZ3JhcGguYzoxNTI0Cittc2dpZCAiZmFpbGVkIHRvIHJlbmFtZSB0ZW1wb3JhcnkgY29tbWl0LWdyYXBoIGZpbGUiCittc2dzdHIgIueEoeazlemHjeaWsOWRveWQjeaaq+aZguaPkOS6pOWcluW9ouaqlOahiCIKKworIzogY29tbWl0LWdyYXBoLmM6MTYzNQorbXNnaWQgIlNjYW5uaW5nIG1lcmdlZCBjb21taXRzIgorbXNnc3RyICLmraPlnKjmjoPmj4/lkIjkvbXmj5DkuqQiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkdXBsaWNhdGUgY29tbWl0IGlkICVzIgorbXNnc3RyICLmhI/lpJbnmoTph43opIfmj5DkuqQgSUQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE2NzAKK21zZ2lkICJNZXJnaW5nIGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi5q2j5Zyo5ZCI5L215o+Q5Lqk5ZyW5b2iIgorCisjOiBjb21taXQtZ3JhcGguYzoxODYwCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBjb21taXQgZ3JhcGggZm9ybWF0IGNhbm5vdCB3cml0ZSAlZCBjb21taXRzIgorbXNnc3RyICLmj5DkuqTlnJbmoLzlvI/kuI3og73lr6vlhaUgJWQg5YCL5o+Q5LqkIgorCisjOiBjb21taXQtZ3JhcGguYzoxODcxCittc2dpZCAidG9vIG1hbnkgY29tbWl0cyB0byB3cml0ZSBncmFwaCIKK21zZ3N0ciAi5o+Q5Lqk5aSq5aSa5LiN6IO955Wr5ZyWIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTYxCittc2dpZCAidGhlIGNvbW1pdC1ncmFwaCBmaWxlIGhhcyBpbmNvcnJlY3QgY2hlY2tzdW0gYW5kIGlzIGxpa2VseSBjb3JydXB0IgorbXNnc3RyICLmj5DkuqTlnJbmqpTmoYjnmoTnuL3lkozmqqLmn6XnorzpjK/oqqTvvIzlj6/og73lt7LntpPmkI3lo54iCisKKyM6IGNvbW1pdC1ncmFwaC5jOjE5NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgT0lEIG9yZGVyOiAlcyB0aGVuICVzIgorbXNnc3RyICLmj5DkuqTlnJblvaLnmoTnianku7YgSUQg6aCG5bqP5LiN5q2j56K677yaJXMg54S25b6MICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoxOTgxIGNvbW1pdC1ncmFwaC5jOjE5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0LWdyYXBoIGhhcyBpbmNvcnJlY3QgZmFub3V0IHZhbHVlOiBmYW5vdXRbJWRdID0gJXUgIT0gJXUiCittc2dzdHIgIuaPkOS6pOWcluW9ouacieS4jeato+eiuueahOaJh+WHuuWAvO+8mmZhbm91dFslZF0gPSAldSAhPSAldSIKKworIzogY29tbWl0LWdyYXBoLmM6MTk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gY29tbWl0LWdyYXBoIgorbXNnc3RyICLnhKHms5Xlvp7mj5DkuqTlnJblvaLkuK3op6PmnpDmj5DkuqQgJXMiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwMDYKK21zZ2lkICJWZXJpZnlpbmcgY29tbWl0cyBpbiBjb21taXQgZ3JhcGgiCittc2dzdHIgIuato+WcqOmpl+itieaPkOS6pOWcluS4reeahOaPkOS6pCIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgY29tbWl0ICVzIGZyb20gb2JqZWN0IGRhdGFiYXNlIGZvciBjb21taXQtZ3JhcGgiCittc2dzdHIgIueEoeazleW+nuaPkOS6pOWcluW9oueahOeJqeS7tuW6q+S4reino+aekOaPkOS6pCAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJyb290IHRyZWUgT0lEIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICVzICE9ICVzIgorbXNnc3RyICLmj5DkuqTlnJblvaLkuK3nmoTmj5DkuqQgJXMg55qE5qC55qi554uA54mp5Lu2IElEIOaYryAlcyAhPSAlcyIKKworIzogY29tbWl0LWdyYXBoLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGxpc3QgZm9yIGNvbW1pdCAlcyBpcyB0b28gbG9uZyIKK21zZ3N0ciAi5o+Q5LqkICVzIOeahOaPkOS6pOWcluW9oueItuaPkOS6pOWIl+ihqOWkqumVt+S6hiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggcGFyZW50IGZvciAlcyBpcyAlcyAhPSAlcyIKK21zZ3N0ciAiJXMg55qE5o+Q5Lqk5ZyW5b2i54i25o+Q5Lqk5pivICVzICE9ICVzIgorCisjOiBjb21taXQtZ3JhcGguYzoyMDU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdC1ncmFwaCBwYXJlbnQgbGlzdCBmb3IgY29tbWl0ICVzIHRlcm1pbmF0ZXMgZWFybHkiCittc2dzdHIgIuaPkOS6pCAlcyDnmoTmj5DkuqTlnJblvaLniLbmj5DkuqTliJfooajpgY7ml6nntYLmraIiCisKKyM6IGNvbW1pdC1ncmFwaC5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvbW1pdC1ncmFwaCBoYXMgZ2VuZXJhdGlvbiBudW1iZXIgemVybyBmb3IgY29tbWl0ICVzLCBidXQgbm9uLXplcm8gZWxzZXdoZXJlIgorbXNnc3RyICLmj5DkuqTlnJblvaLkuK3mj5DkuqQgJXMg55qE5LiW5Luj6Jmf5piv6Zu277yM5L2G5YW25a6D5Zyw5pa56Z2e6Zu2IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb21taXQtZ3JhcGggaGFzIG5vbi16ZXJvIGdlbmVyYXRpb24gbnVtYmVyIGZvciBjb21taXQgJXMsIGJ1dCB6ZXJvIGVsc2V3aGVyZSIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i5Lit5o+Q5LqkICVzIOeahOS4luS7o+iZn+mdnumbtu+8jOS9huWFtuWug+WcsOaWueaYr+mbtiIKKworIzogY29tbWl0LWdyYXBoLmM6MjA4MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQtZ3JhcGggZ2VuZXJhdGlvbiBmb3IgY29tbWl0ICVzIGlzICV1ICE9ICV1IgorbXNnc3RyICLmj5DkuqTlnJblvaLkuK3nmoTmj5DkuqQgJXMg55qE5LiW5Luj6Jmf5pivICV1ICE9ICV1IgorCisjOiBjb21taXQtZ3JhcGguYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCBkYXRlIGZvciBjb21taXQgJXMgaW4gY29tbWl0LWdyYXBoIGlzICU8UFJJdU1BWD4gIT0gJTxQUkl1TUFYPiIKK21zZ3N0ciAi5o+Q5Lqk5ZyW5b2i5Lit5o+Q5LqkICVzIOeahOaPkOS6pOaXpeacn+aYryAlPFBSSXVNQVg+ICE9ICU8UFJJdU1BWD4iCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAi6KiY5oa26auU6ICX55uhIgorCisjOiBjb25maWcuYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCAoJWQpIHdoaWxlIGluY2x1ZGluZ1xuIgorIlx0JXNcbiIKKyJmcm9tXG4iCisiXHQlc1xuIgorIlRoaXMgbWlnaHQgYmUgZHVlIHRvIGNpcmN1bGFyIGluY2x1ZGVzLiIKK21zZ3N0ciAiIgorIui2hemBjuS6huacgOWkp+WMheWQq+a3seW6pu+8iCUxJGTvvInvvIznlbblvp5cbiIKKyJcdCUzJHNcbiIKKyLljIXlkKtcbiIKKyJcdCUyJHNcbiIKKyLpgJnlj6/og73mmK/lm6DngrrlvqrnkrDljIXlkKvjgIIiCisKKyM6IGNvbmZpZy5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXhwYW5kIGluY2x1ZGUgcGF0aCAnJXMnIgorbXNnc3RyICLnhKHms5Xmk7TlsZXljIXlkKvot6/lvpEgJyVzJyIKKworIzogY29uZmlnLmM6MTUxCittc2dpZCAicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIgorbXNnc3RyICLnm7jlsI3ot6/lvpHnmoToqK3lrprmqpTmoYjlvJXnlKjlv4XpoIjkvoboh6rmlrzmqpTmoYgiCisKKyM6IGNvbmZpZy5jOjE5NworbXNnaWQgInJlbGF0aXZlIGNvbmZpZyBpbmNsdWRlIGNvbmRpdGlvbmFscyBtdXN0IGNvbWUgZnJvbSBmaWxlcyIKK21zZ3N0ciAi55u45bCN6Lev5b6R55qE6Kit5a6a5qqU5qGI5qKd5Lu25byV55So5b+F6aCI5L6G6Ieq5pa85qqU5qGIIgorCisjOiBjb25maWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIKK21zZ3N0ciAi6Y215ZCN5rKS5pyJ5YyF5ZCr5LiA5YCL5bCP56+A5ZCN56ix77yaJXMiCisKKyM6IGNvbmZpZy5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJrZXkgZG9lcyBub3QgY29udGFpbiB2YXJpYWJsZSBuYW1lOiAlcyIKK21zZ3N0ciAi6Y215ZCN5rKS5pyJ5YyF5ZCr6K6K5pW45ZCN77yaJXMiCisKKyM6IGNvbmZpZy5jOjQwNiBzZXF1ZW5jZXIuYzoyNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAi54Sh5pWI6Y215ZCN77yaJXMiCisKKyM6IGNvbmZpZy5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIgorbXNnc3RyICLnhKHmlYjpjbXlkI3vvIjmnInmj5vooYznrKbomZ/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/lhbbkuK3kuYvkuIDvvJpub3RoaW5n44CBbWF0Y2hpbmfjgIFzaW1wbGXjgIF1cHN0cmVhbSDmiJYgY3VycmVudCIKKworIzogY29uZmlnLmM6MTUxOCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIumMr+iqpOeahOaJk+WMheWjk+e4rue0muWIpSAlZCIKKworIzogY29uZmlnLmM6MTYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCBjb25maWcgYmxvYiBvYmplY3QgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5b6e6LOH5paZ54mp5Lu2ICclcycg6LyJ5YWl6Kit5a6aIgorCisjOiBjb25maWcuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgYmxvYiIKK21zZ3N0ciAi5byV55SoICclcycg5rKS5pyJ5oyH5ZCR5LiA5YCL6LOH5paZ54mp5Lu2IgorCisjOiBjb25maWcuYzoxNjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIGNvbmZpZyBibG9iICclcyciCittc2dzdHIgIuS4jeiDveino+aekOioreWumueJqeS7tiAnJXMnIgorCisjOiBjb25maWcuYzoxNjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSAlcyIKK21zZ3N0ciAi6Kej5p6QICVzIOWkseaVlyIKKworIzogY29uZmlnLmM6MTc0NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLnhKHms5Xop6PmnpDmjIfku6TliJfkuK3nmoToqK3lrpoiCisKKyM6IGNvbmZpZy5jOjIwOTYKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIuWcqOiugOWPluioreWumuaqlOahiOaZgumBh+WIsOacquefpemMr+iqpCIKKworIzogY29uZmlnLmM6MjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICLnhKHmlYggJXPvvJonJXMnIgorCisjOiBjb25maWcuYzoyMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNwbGl0SW5kZXgubWF4UGVyY2VudENoYW5nZSB2YWx1ZSAnJWQnIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCIKK21zZ3N0ciAic3BsaXRJbmRleC5tYXhQZXJjZW50Q2hhbmdlIOeahOWPluWAvCAnJWQnIOaHieipsuS7i+aWvCAwIOWSjCAxMDAg5LmL6ZaTIgorCisjOiBjb25maWcuYzoyMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q5oyH5Luk5YiX6Kit5a6a5Lit55qEICclcyciCisKKyM6IGNvbmZpZy5jOjIzNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICLlnKjmqpTmoYggJyUyJHMnIOeahOesrCAlMyRkIOihjOeZvOePvumMr+iqpOeahOioreWumuiuiuaVuCAnJTEkcyciCisKKyM6IGNvbmZpZy5jOjI0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWUgJyVzJyIKK21zZ3N0ciAi54Sh5pWI55qE5bCP56+A5ZCN56ixICclcyciCisKKyM6IGNvbmZpZy5jOjI0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMg5pyJ5aSa5YCL5Y+W5YC8IgorCisjOiBjb25maWcuYzoyNTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLlr6vlhaXmlrDnmoToqK3lrprmqpTmoYggJXMg5aSx5pWXIgorCisjOiBjb25maWcuYzoyNzUzIGNvbmZpZy5jOjMwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiCittc2dzdHIgIuS4jeiDvemOluWumuioreWumuaqlOahiCAlcyIKKworIzogY29uZmlnLmM6Mjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVuaW5nICVzIgorbXNnc3RyICLplovllZ8gJXMiCisKKyM6IGNvbmZpZy5jOjI3OTkgYnVpbHRpbi9jb25maWcuYzozMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAi54Sh5pWI5qih5byP77yaJXMiCisKKyM6IGNvbmZpZy5jOjI4MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAi54Sh5pWI55qE6Kit5a6a5qqU5qGIICVzIgorCisjOiBjb25maWcuYzoyODM3IGNvbmZpZy5jOjMwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnN0YXQgb24gJXMgZmFpbGVkIgorbXNnc3RyICLlsI0gJXMg5ZG85Y+rIGZzdGF0IOWkseaVlyIKKworIzogY29uZmlnLmM6Mjg0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAnJXMnIgorbXNnc3RyICLkuI3og70gbW1hcCAnJXMnIgorCisjOiBjb25maWcuYzoyODU3IGNvbmZpZy5jOjMwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2htb2Qgb24gJXMgZmFpbGVkIgorbXNnc3RyICLlsI0gJXMg5ZG85Y+rIGNobW9kIOWkseaVlyIKKworIzogY29uZmlnLmM6Mjk0MiBjb25maWcuYzozMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb25maWcgZmlsZSAlcyIKK21zZ3N0ciAi5LiN6IO95a+r5YWl6Kit5a6a5qqU5qGIICVzIgorCisjOiBjb25maWcuYzoyOTc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73oqK3lrpogJyVzJyDngrogJyVzJyIKKworIzogY29uZmlnLmM6Mjk3OCBidWlsdGluL3JlbW90ZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Y+W5raI6Kit5a6aICclcyciCisKKyM6IGNvbmZpZy5jOjMwNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzZWN0aW9uIG5hbWU6ICVzIgorbXNnc3RyICLnhKHmlYjnmoTlsI/nr4DlkI3nqLHvvJolcyIKKworIzogY29uZmlnLmM6MzIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIHZhbHVlIGZvciAnJXMnIgorbXNnc3RyICIlcyDnmoTlj5blgLznvLrlsJEiCisKKyM6IGNvbm5lY3QuYzo2MQorbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiCittc2dzdHIgIumBoOerr+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+gIgorCisjOiBjb25uZWN0LmM6MTI2NAorIywgYy1mb3JtYXQKK21zZ2lkICJzdHJhbmdlIHBhdGhuYW1lICclcycgYmxvY2tlZCIKK21zZ3N0ciAi5bey6Zi75q2i5aWH5oCq55qE6Lev5b6R5ZCNICclcyciCisKKyM6IGNvbm5lY3QuYzoxMzExCittc2dpZCAidW5hYmxlIHRvIGZvcmsiCittc2dzdHIgIueEoeazlSBmb3JrIgorCisjOiBjb25uZWN0ZWQuYzo4OSBidWlsdGluL2ZzY2suYzoyMDggYnVpbHRpbi9wcnVuZS5jOjQzCittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICLmraPlnKjmqqLmn6XpgKPpgJrmgKciCisKKyM6IGNvbm5lY3RlZC5jOjEwMQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIuS4jeiDveWft+ihjCAnZ2l0IHJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6MTIxCittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0IgorbXNnc3RyICLlr6vlhaUgcmV2LWxpc3Qg5aSx5pWXIgorCisjOiBjb25uZWN0ZWQuYzoxMjgKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbiIKK21zZ3N0ciAi6Zec6ZaJIHJldi1saXN0IOeahOaomea6lui8uOWFpeWkseaVlyIKKworIzogY29udmVydC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbGxlZ2FsIGNybGZfYWN0aW9uICVkIgorbXNnc3RyICLpnZ7ms5XnmoQgY3JsZiDli5XkvZwgJWQiCisKKyM6IGNvbnZlcnQuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1JMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBMRiBpbiAlcyIKK21zZ3N0ciAiJXMg5Lit55qEIENSTEYg5bCH6KKrIExGIOWPluS7oyIKKworIzogY29udmVydC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyIlcyDkuK3nmoQgQ1JMRiDlsIfooqsgTEYg5Y+W5Luj44CCPFxuIgorIuWcqOW3peS9nOWNgOS4reipsuaqlOahiOS7jeS/neaMgeWOn+acieeahOaPm+ihjOespuiZn+OAgiIKKworIzogY29udmVydC5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIgorbXNnc3RyICLmqpTmoYggJXMg5Lit55qEIExGIOWwh+iiqyBDUkxGIOWPluS7oyIKKworIzogY29udmVydC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzLlxuIgorIlRoZSBmaWxlIHdpbGwgaGF2ZSBpdHMgb3JpZ2luYWwgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyIlcyDkuK3nmoQgTEYg5bCH6KKrIENSTEYg5Y+W5Luj44CCXG4iCisi5Zyo5bel5L2c5Y2A5Lit6Kmy5qqU5qGI5LuN5L+d5oyB5Y6f5pyJ55qE5o+b6KGM56ym6JmfIgorCisjOiBjb252ZXJ0LmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJPTSBpcyBwcm9oaWJpdGVkIGluICclcycgaWYgZW5jb2RlZCBhcyAlcyIKK21zZ3N0ciAi5aaC5p6c5L2/55SoICUyJHMg57eo56K877yM56aB5q2i5ZyoICclMSRzJyDkuK3kvb/nlKggQk9NIgorCisjOiBjb252ZXJ0LmM6MjkxCisjLCBjLWZvcm1hdAorI3wgbXNnaWQgIiIKKyN8ICJUaGUgZmlsZSAnJXMnIGNvbnRhaW5zIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lcyBhcyAiCisjfCAid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgbWFyayAoQk9NKS4gUGxlYXNlIHVzZSBVVEYtJS4qcyBhcyAiCisid29ya2luZy10cmVlLWVuY29kaW5nLiIKK21zZ3N0ciAi5qqU5qGIICclcycg5YyF5ZCr5L2N5YWD57WE6aCG5bqP5qiZ6KiY77yIQk9N77yJ44CC6KuL5L2/55SoIFVURi0lLipzIOS9nOeCuuW3peS9nOWNgOe3qOeivOOAgiIKKworIzogY29udmVydC5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJCT00gaXMgcmVxdWlyZWQgaW4gJyVzJyBpZiBlbmNvZGVkIGFzICVzIgorbXNnc3RyICLlpoLmnpznt6jnorzngrogJTIkc++8jOmcgOimgeWcqCAnJTEkcycg5Lit5L2/55SoIEJPTSIKKworIzogY29udmVydC5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGUgJyVzJyBpcyBtaXNzaW5nIGEgYnl0ZSBvcmRlciBtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0iCisiJXNMRSAoZGVwZW5kaW5nIG9uIHRoZSBieXRlIG9yZGVyKSBhcyB3b3JraW5nLXRyZWUtZW5jb2RpbmcuIgorbXNnc3RyICIiCisi5qqU5qGIICclcycg57y65bCR5LiA5YCL5L2N5YWD57WE6aCG5bqP5qiZ6KiY77yIQk9N77yJ44CC6KuL5L2/55SoIFVURi0lc0JFIG9yIFVURi0lc0xF77yI5Y+W5rG65pa8IgorIuWtl+evgOW6j++8ieS9nOeCuuW3peS9nOWNgOe3qOeivOOAgiIKKworIzogY29udmVydC5jOjQxOSBjb252ZXJ0LmM6NDkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBlbmNvZGUgJyVzJyBmcm9tICVzIHRvICVzIgorbXNnc3RyICLnhKHms5XlsI0gJyVzJyDpgLLooYzlvp4gJXMg5YiwICVzIOeahOe3qOeivCIKKworIzogY29udmVydC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJlbmNvZGluZyAnJXMnIGZyb20gJXMgdG8gJXMgYW5kIGJhY2sgaXMgbm90IHRoZSBzYW1lIgorbXNnc3RyICLlsIcnJXMnIOeahOe3qOeivOW+niAlcyDliLAgJXMg5L6G6L+06L2J5o+b5LiN5LiA6Ie0IgorCisjOiBjb252ZXJ0LmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJyVzJyIKK21zZ3N0ciAi5LiN6IO9IGZvcmsg5Lul5Z+36KGM5aSW6YOo6YGO5r++5ZmoICclcyciCisKKyM6IGNvbnZlcnQuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAnJXMnIgorbXNnc3RyICLkuI3og73lsIfovLjlhaXlgrPpgZ7ntablpJbpg6jpgY7mv77lmaggJyVzJyIKKworIzogY29udmVydC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQgJWQiCittc2dzdHIgIuWklumDqOmBjua/vuWZqCAnJXMnIOWkseaVl+eivCAlZCIKKworIzogY29udmVydC5jOjczMCBjb252ZXJ0LmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgZnJvbSBleHRlcm5hbCBmaWx0ZXIgJyVzJyBmYWlsZWQiCittc2dzdHIgIuW+nuWklumDqOmBjua/vuWZqCAnJXMnIOiugOWPluWkseaVlyIKKworIzogY29udmVydC5jOjczNiBjb252ZXJ0LmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGZpbHRlciAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5aSW6YOo6YGO5r++5ZmoICclcycg5aSx5pWXIgorCisjOiBjb252ZXJ0LmM6ODM5Cittc2dpZCAidW5leHBlY3RlZCBmaWx0ZXIgdHlwZSIKK21zZ3N0ciAi5oSP5aSW55qE6YGO5r++6aGe5Z6LIgorCisjOiBjb252ZXJ0LmM6ODUwCittc2dpZCAicGF0aCBuYW1lIHRvbyBsb25nIGZvciBleHRlcm5hbCBmaWx0ZXIiCittc2dzdHIgIuWklumDqOmBjua/vuWZqOeahOi3r+W+keWQjeWkqumVtyIKKworIzogY29udmVydC5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXh0ZXJuYWwgZmlsdGVyICclcycgaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGFsdGhvdWdoIG5vdCBhbGwgcGF0aHMgaGF2ZSAiCisiYmVlbiBmaWx0ZXJlZCIKK21zZ3N0ciAi5aSW6YOo6YGO5r++5ZmoICclcycg5LiN5YaN5Y+v55So77yM5L2G5Lim6Z2e5omA5pyJ6Lev5b6R6YO95bey6YGO5r++IgorCisjOiBjb252ZXJ0LmM6MTIyMworbXNnaWQgInRydWUvZmFsc2UgYXJlIG5vIHZhbGlkIHdvcmtpbmctdHJlZS1lbmNvZGluZ3MiCittc2dzdHIgInRydWUvZmFsc2Ug5LiN5piv5pyJ5pWI55qE5bel5L2c5Y2A57eo56K8IgorCisjOiBjb252ZXJ0LmM6MTQxMSBjb252ZXJ0LmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4gZmlsdGVyICclcycgZmFpbGVkIgorbXNnc3RyICIlc++8mmNsZWFuIOmBjua/vuWZqCAnJXMnIOWkseaVlyIKKworIzogY29udmVydC5jOjE0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIgorbXNnc3RyICIlc++8mnNtdWRnZSDpgY7mv77lmaggJXMg5aSx5pWXIgorCisjOiBkYXRlLmM6MTM4Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAi5Zyo5bCH5L6GIgorCisjOiBkYXRlLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDnp5LpkJjliY0iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g56eS6ZCY5YmNIgorCisjOiBkYXRlLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJTxQUkl1TUFYPiDliIbpkJjliY0iCittc2dzdHJbMV0gIiU8UFJJdU1BWD4g5YiG6ZCY5YmNIgorCisjOiBkYXRlLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU8UFJJdU1BWD4gaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiU8UFJJdU1BWD4gaG91cnMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOWwj+aZguWJjSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDlsI/mmYLliY0iCisKKyM6IGRhdGUuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IGRheXMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOWkqeWJjSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDlpKnliY0iCisKKyM6IGRhdGUuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g5ZGo5YmNIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IOWRqOWJjSIKKworIzogZGF0ZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOWAi+aciOWJjSIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDlgIvmnIjliY0iCisKKyM6IGRhdGUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIgorbXNnaWRfcGx1cmFsICIlPFBSSXVNQVg+IHllYXJzIgorbXNnc3RyWzBdICIlPFBSSXVNQVg+IOW5tCIKK21zZ3N0clsxXSAiJTxQUkl1TUFYPiDlubQiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlPFBSSXVNQVg+IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICU8UFJJdU1BWD4gbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJXMgJTxQUkl1TUFYPiDlgIvmnIjliY0iCittc2dzdHJbMV0gIiVzICU8UFJJdU1BWD4g5YCL5pyI5YmNIgorCisjOiBkYXRlLmM6MTk3IGRhdGUuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTxQUkl1TUFYPiB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJTxQUkl1TUFYPiB5ZWFycyBhZ28iCittc2dzdHJbMF0gIiU8UFJJdU1BWD4g5bm05YmNIgorbXNnc3RyWzFdICIlPFBSSXVNQVg+IOW5tOWJjSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjI3MgorbXNnaWQgIlByb3BhZ2F0aW5nIGlzbGFuZCBtYXJrcyIKK21zZ3N0ciAi5q2j5Zyo5YKz5pKt6LOH5paZ5bO25qiZ6KiYIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB0cmVlIG9iamVjdCAlcyIKK21zZ3N0ciAi5aOe55qE5qi554uA54mp5Lu2ICVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIGlzbGFuZCByZWdleCBmb3IgJyVzJzogJXMiCittc2dzdHIgIuacquiDvei8ieWFpSAnJXMnIOeahOizh+aWmeWztuato+imj+ihqOekuuW8j++8miVzIgorCisjOiBkZWx0YS1pc2xhbmRzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlzbGFuZCByZWdleCBmcm9tIGNvbmZpZyBoYXMgdG9vIG1hbnkgY2FwdHVyZSBncm91cHMgKG1heD0lZCkiCittc2dzdHIgIuS+huiHqiBjb25maWcg55qE6LOH5paZ5bO25q2j6KaP6KGo56S65byP5pyJ5aSq5aSa55qE5o2V542y57WE77yI5pyA5aSaICVkIOWAi++8iSIKKworIzogZGVsdGEtaXNsYW5kcy5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJrZWQgJWQgaXNsYW5kcywgZG9uZS5cbiIKK21zZ3N0ciAi5bey5qiZ6KiYICVkIOWAi+izh+aWmeWztu+8jOe1kOadn+OAglxuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICLoroDlj5bmjpLluo/mqpTmoYggJyVzJyDlpLHmlZciCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjU0MworbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICLmraPlnKjpgLLooYzpnZ7nsr7norrnmoTph43mlrDlkb3lkI3lgbXmuKwiCisKKyM6IGRpZmYtbm8taW5kZXguYzoyMzgKK21zZ2lkICJnaXQgZGlmZiAtLW5vLWluZGV4IFs8b3B0aW9ucz5dIDxwYXRoPiA8cGF0aD4iCittc2dzdHIgImdpdCBkaWZmIC0tbm8taW5kZXggWzzpgbjpoIU+XSA86Lev5b6RPiA86Lev5b6RPiIKKworIzogZGlmZi1uby1pbmRleC5jOjI2MworbXNnaWQgIiIKKyJOb3QgYSBnaXQgcmVwb3NpdG9yeS4gVXNlIC0tbm8taW5kZXggdG8gY29tcGFyZSB0d28gcGF0aHMgb3V0c2lkZSBhIHdvcmtpbmcgIgorInRyZWUiCittc2dzdHIgIuS4jeaYr+S4gOWAiyBnaXQg54mI5pys5bqr44CC5L2/55SoIC0tbm8taW5kZXgg5q+U6LyD5bel5L2c5Y2A5LmL5aSW55qE5YWp5YCL6Lev5b6RIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IGRpZmYuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIgIOeEoeazleino+aekCBkaXJzdGF0IOaIquatou+8iGN1dC1vZmbvvInnmb7liIbmr5QgJyVzJ1xuIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IGRpZmYuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICDmnKrnn6XnmoQgZGlyc3RhdCDlj4PmlbggJyVzJ1xuIgorCisjOiBkaWZmLmM6Mjk2Cittc2dpZCAiIgorImNvbG9yIG1vdmVkIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgJ25vJywgJ2RlZmF1bHQnLCAnYmxvY2tzJywgJ3plYnJhJywgIgorIidkaW1tZWQtemVicmEnLCAncGxhaW4nIgorbXNnc3RyICIiCisi56e75YuV55qE6aGP6Imy6Kit5a6a5b+F6aCI5pivICdubyfjgIEnZGVmYXVsdCfjgIEnYmxvY2tzJ+OAgSd6ZWJyYSfjgIEnZGltbWVkX3plYnJhJyDmiJYgIgorIidwbGFpbiciCisKKyM6IGRpZmYuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInVua25vd24gY29sb3ItbW92ZWQtd3MgbW9kZSAnJXMnLCBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUtc3BhY2UtY2hhbmdlJywgIgorIidpZ25vcmUtc3BhY2UtYXQtZW9sJywgJ2lnbm9yZS1hbGwtc3BhY2UnLCAnYWxsb3ctaW5kZW50YXRpb24tY2hhbmdlJyIKK21zZ3N0ciAiIgorIuacquefpeeahCBjb2xvci1tb3ZlZC13cyDmqKHlvI8gJyVzJ++8jOWPr+iDveeahOWPluWAvOaciSAnaWdub3JlLXNwYWNlLWNoYW5nZSfjgIEnaWdub3JlLSIKKyJzcGFjZS1hdC1lb2wn44CBJ2lnbm9yZS1hbGwtc3BhY2Un44CBJ2FsbG93LWluZGVudGF0aW9uLWNoYW5nZSciCisKKyM6IGRpZmYuYzozMzIKK21zZ2lkICIiCisiY29sb3ItbW92ZWQtd3M6IGFsbG93LWluZGVudGF0aW9uLWNoYW5nZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciAiCisid2hpdGVzcGFjZSBtb2RlcyIKK21zZ3N0ciAiY29sb3ItbW92ZWQtd3PvvJphbGxvdy1pbmRlbnRhdGlvbi1jaGFuZ2Ug5LiN6IO96IiH5YW25a6D56m655m95a2X5YWD5qih5byP5YWx55SoIgorCisjOiBkaWZmLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICLoqK3lrprorormlbggJ2RpZmYuc3VibW9kdWxlJyDmnKrnn6XnmoTlj5blgLzvvJonJXMnIgorCisjOiBkaWZmLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICIiCisi55m854++6Kit5a6a6K6K5pW4ICdkaWZmLmRpcnN0YXQnIOS4reeahOmMr+iqpO+8mlxuIgorIiVzIgorCisjOiBkaWZmLmM6NDIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICLlpJbpg6ggZGlmZiDpm6LplovvvIzlgZzmraLlnKggJXMiCisKKyM6IGRpZmYuYzo0NTQ3Cittc2dpZCAiLS1uYW1lLW9ubHksIC0tbmFtZS1zdGF0dXMsIC0tY2hlY2sgYW5kIC1zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tbmFtZS1vbmx544CBLS1uYW1lLXN0YXR1c+OAgS0tY2hlY2sg5ZKMIC1zIOaYr+S6kuaWpeeahCIKKworIzogZGlmZi5jOjQ1NTAKK21zZ2lkICItRywgLVMgYW5kIC0tZmluZC1vYmplY3QgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLUfjgIEtUyDlkowgLS1maW5kLW9iamVjdCDmmK/kupLmlqXnmoQiCisKKyM6IGRpZmYuYzo0NjI4Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IOaYjueiuuimgeaxguWPqui3n+S4gOWAi+i3r+W+keimj+agvCIKKworIzogZGlmZi5jOjQ2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLXN0YXQgdmFsdWU6ICVzIgorbXNnc3RyICLnhKHmlYjnmoQgLS1zdGF0IOWAvO+8miVzIgorCisjOiBkaWZmLmM6NDY4MSBkaWZmLmM6NDY4NiBkaWZmLmM6NDY5MSBkaWZmLmM6NDY5NiBkaWZmLmM6NTIwOQorIzogcGFyc2Utb3B0aW9ucy5jOjE5OSBwYXJzZS1vcHRpb25zLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIiVzIOacn+acm+S4gOWAi+aVuOWtl+WAvCIKKworIzogZGlmZi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIueEoeazleino+aekCAtLWRpcnN0YXQvLVgg6YG46aCF55qE5Y+D5pW477yaXG4iCisiJXMiCisKKyM6IGRpZmYuYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gY2hhbmdlIGNsYXNzICclYycgaW4gLS1kaWZmLWZpbHRlcj0lcyIKK21zZ3N0ciAiLS1kaWZmLWZpbHRlcj0lMiRzIOS4reacquefpeeahOiuiuabtOmhniAnJTEkYyciCisKKyM6IGRpZmYuYzo0ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgYWZ0ZXIgd3MtZXJyb3ItaGlnaGxpZ2h0PSUuKnMiCittc2dzdHIgIndzLWVycm9yLWhpZ2hsaWdodD0lLipzIOS5i+W+jOacquefpeeahOWAvCIKKworIzogZGlmZi5jOjQ4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QICclcyciCisKKyM6IGRpZmYuYzo0ODg2IGRpZmYuYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgPG4+LzxtPiBmb3JtIgorbXNnc3RyICIlcyDmnJ/mnJsgPG4+LzxtPiDmoLzlvI8iCisKKyM6IGRpZmYuYzo0OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4cGVjdHMgYSBjaGFyYWN0ZXIsIGdvdCAnJXMnIgorbXNnc3RyICIlcyDmnJ/mnJvkuIDlgIvlrZflhYPvvIzlvpfliLAgJyVzJyIKKworIzogZGlmZi5jOjQ5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIC0tY29sb3ItbW92ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLlo57nmoQgLS1jb2xvci1tb3ZlZCDlj4PmlbjvvJolcyIKKworIzogZGlmZi5jOjQ5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlICclcycgaW4gLS1jb2xvci1tb3ZlZC13cyIKK21zZ3N0ciAiLS1jb2xvci1tb3ZlZC13cyDkuK3nmoTnhKHmlYjmqKHlvI8gJyVzJyAiCisKKyM6IGRpZmYuYzo0OTg0Cittc2dpZCAiIgorIm9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzIFwibXllcnNcIiwgXCJtaW5pbWFsXCIsIFwicGF0aWVuY2VcIiBhbmQgIgorIlwiaGlzdG9ncmFtXCIiCittc2dzdHIgImRpZmYtYWxnb3JpdGhtIOmBuOmgheaciSBcIm15ZXJzXCLjgIFcIm1pbmltYWxcIuOAgVwicGF0aWVuY2VcIiDlkowgXCJoaXN0b2dyYW1cIiIKKworIzogZGlmZi5jOjUwMjAgZGlmZi5jOjUwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBhcmd1bWVudCB0byAlcyIKK21zZ3N0ciAiJXMg55qE5Y+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+36KGM5q2k5oyH5Luk44CCIgorCisjOiBkaXIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdCIKK21zZ3N0ciAi6Lev5b6R6KaP5qC8ICclcycg5pyq56ym5ZCI5Lu75L2VIGdpdCDlt7Lnn6XmqpTmoYgiCisKKyM6IGRpci5jOjY2NAorIywgYy1mb3JtYXQKKyN8IG1zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnaWQgInVucmVjb2duaXplZCBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICLnhKHms5XorZjliKXmqKPlvI/vvJrjgIwlc+OAjSIKKworIzogZGlyLmM6NjgyIGRpci5jOjY5NgorIywgYy1mb3JtYXQKKyN8IG1zZ2lkICJ1bnJlY29nbml6ZWQgb3B0aW9uOiAnJXMnIgorbXNnaWQgInVucmVjb2duaXplZCBuZWdhdGl2ZSBwYXR0ZXJuOiAnJXMnIgorbXNnc3RyICLnhKHms5XorZjliKXlj43lkJHmqKHlvI/vvJrjgIwlc+OAjSIKKworIzogZGlyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IGhhdmUgaXNzdWVzOiBwYXR0ZXJuICclcycgaXMgcmVwZWF0ZWQiCittc2dzdHIgIuaCqOeahOeogOeWj+ewveWHuuaqlOahiOWPr+iDveacieWVj+mhjO+8muOAjCVz44CN5qij5byP6YeN6KSHIgorCisjOiBkaXIuYzo3MjQKK21zZ2lkICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorbXNnc3RyICLlgZznlKggY29uZSDmqKPlvI/nrKblkIjmqKHlvI8iCisKKyM6IGRpci5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVzZSAlcyBhcyBhbiBleGNsdWRlIGZpbGUiCittc2dzdHIgIuS4jeiDveWwhyAlcyDnlKjkvZzmjpLpmaTmqpTmoYgiCisKKyM6IGRpci5jOjIwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuS4jeiDvemWi+WVn+ebrumMhCAnJXMnIgorCisjOiBkaXIuYzoyNDE1Cittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgIueEoeazleeNsuW+l+aguOW/g+WQjeeoseWSjOioiuaBryIKKworIzogZGlyLmM6MjUzOQorbXNnaWQgInVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIKK21zZ3N0ciAi5b+r5Y+W5pyq6L+96Lmk5qqU5qGI5Zyo5pys57O757Wx5oiW5L2N572u5Lit6KKr56aB55SoIgorCisjOiBkaXIuYzozMzQzCisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCBpbiByZXBvICVzIgorbXNnc3RyICLniYjmnKzluqsgJXMg5Lit55qE57Si5byV5qqU5qGI5pCN5aOeIgorCisjOiBkaXIuYzozMzg4IGRpci5jOjMzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgJXMiCittc2dzdHIgIuS4jeiDveeCuiAlcyDlu7rnq4vnm67pjIQiCisKKyM6IGRpci5jOjM0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1pZ3JhdGUgZ2l0IGRpcmVjdG9yeSBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95b6eICclcycg6YG356e7IGdpdCDnm67pjITliLAgJyVzJyIKKworIzogZWRpdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogV2FpdGluZyBmb3IgeW91ciBlZGl0b3IgdG8gY2xvc2UgdGhlIGZpbGUuLi4lYyIKK21zZ3N0ciAi5o+Q56S677ya562J5b6F5oKo55qE57eo6Lyv5Zmo6Zec6ZaJ5qqU5qGILi4uJWMiCisKKyM6IGVudHJ5LmM6MTc4Cittc2dpZCAiRmlsdGVyaW5nIGNvbnRlbnQiCittc2dzdHIgIumBjua/vuWFp+WuuSIKKworIzogZW50cnkuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73lsI3mqpTmoYggJyVzJyDlkbzlj6sgc3RhdCIKKworIzogZW52aXJvbm1lbnQuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpdCBuYW1lc3BhY2UgcGF0aCBcIiVzXCIiCittc2dzdHIgIumMr+iqpOeahCBnaXQg5ZCN5a2X56m66ZaT6Lev5b6RIFwiJXNcIiIKKworIzogZW52aXJvbm1lbnQuYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciCittc2dzdHIgIuS4jeiDveioreWumiBHSVRfRElSIOeCuiAnJXMnIgorCisjOiBleGVjLWNtZC5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBhcmdzIHRvIHJ1biAlcyIKK21zZ3N0ciAi5Z+36KGMICVzIOeahOWPg+aVuOWkquWkmiIKKworIzogZmV0Y2gtcGFjay5jOjE1MAorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBleHBlY3RlZCBzaGFsbG93IGxpc3QiCittc2dzdHIgImdpdCBmZXRjaC1wYWNr77ya5oeJ54K6IHNoYWxsb3cg5YiX6KGoIgorCisjOiBmZXRjaC1wYWNrLmM6MTUzCittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIGEgZmx1c2ggcGFja2V0IGFmdGVyIHNoYWxsb3cgbGlzdCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2vvvJrlnKjmt7ropIfoo73liJfooajkuYvlvozmnJ/mnJvkuIDlgIsgZmx1c2gg5YyFIgorCisjOiBmZXRjaC1wYWNrLmM6MTY0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBhIGZsdXNoIHBhY2tldCIKK21zZ3N0ciAiZ2l0IGZldGNoLXBhY2vvvJrmnJ/mnJsgQUNLL05BS++8jOWNu+W+l+WIsCBmbHVzaCDljIUiCisKKyM6IGZldGNoLXBhY2suYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGZldGNoLXBhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFja++8muaHieeCuiBBQ0svTkFL77yM5Y275b6X5YiwICclcyciCisKKyM6IGZldGNoLXBhY2suYzoxOTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdG8gcmVtb3RlIgorbXNnc3RyICLnhKHms5Xlr6vliLDpgaDnq68iCisKKyM6IGZldGNoLXBhY2suYzoyNTcKK21zZ2lkICItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIgorbXNnc3RyICItLXN0YXRlbGVzcy1ycGMg6ZyA6KaBIG11bHRpX2Fja19kZXRhaWxlZCIKKworIzogZmV0Y2gtcGFjay5jOjM1NiBmZXRjaC1wYWNrLmM6MTM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiCittc2dzdHIgIueEoeaViOeahCBzaGFsbG93IOioiuaBr++8miVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzYyIGZldGNoLXBhY2suYzoxMzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgdW5zaGFsbG93IGxpbmU6ICVzIgorbXNnc3RyICLnhKHmlYjnmoQgdW5zaGFsbG93IOioiuaBr++8miVzIgorCisjOiBmZXRjaC1wYWNrLmM6MzY0IGZldGNoLXBhY2suYzoxMzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBub3QgZm91bmQ6ICVzIgorbXNnc3RyICLnianku7bmnKrmib7liLDvvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM2NyBmZXRjaC1wYWNrLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBpbiBvYmplY3Q6ICVzIgorbXNnc3RyICLnianku7bkuK3nmbznlJ/pjK/oqqTvvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM2OSBmZXRjaC1wYWNrLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaGFsbG93IGZvdW5kOiAlcyIKK21zZ3N0ciAi5pyq55m854++IHNoYWxsb3fvvJolcyIKKworIzogZmV0Y2gtcGFjay5jOjM3MiBmZXRjaC1wYWNrLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCBzaGFsbG93L3Vuc2hhbGxvdywgZ290ICVzIgorbXNnc3RyICLmh4nngrogc2hhbGxvdy91bnNoYWxsb3fvvIzljbvlvpfliLAgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ290ICVzICVkICVzIgorbXNnc3RyICLlvpfliLAgJXMgJWQgJXMiCisKKyM6IGZldGNoLXBhY2suYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb21taXQgJXMiCittc2dzdHIgIueEoeaViOaPkOS6pCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjQ2MgorbXNnaWQgImdpdmluZyB1cCIKK21zZ3N0ciAi5pS+5qOEIgorCisjOiBmZXRjaC1wYWNrLmM6NDc1IHByb2dyZXNzLmM6MzIzCittc2dpZCAiZG9uZSIKK21zZ3N0ciAi5a6M5oiQIgorCisjOiBmZXRjaC1wYWNrLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdvdCAlcyAoJWQpICVzIgorbXNnc3RyICLlvpfliLAgJXMgKCVkKSAlcyIKKworIzogZmV0Y2gtcGFjay5jOjUzMworIywgYy1mb3JtYXQKK21zZ2lkICJNYXJraW5nICVzIGFzIGNvbXBsZXRlIgorbXNnc3RyICLmqJnoqJggJXMg54K65a6M5oiQIgorCisjOiBmZXRjaC1wYWNrLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImFscmVhZHkgaGF2ZSAlcyAoJXMpIgorbXNnc3RyICLlt7LntpPmnIkgJXPvvIglc++8iSIKKworIzogZmV0Y2gtcGFjay5jOjgxOAorbXNnaWQgImZldGNoLXBhY2s6IHVuYWJsZSB0byBmb3JrIG9mZiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJmZXRjaC1wYWNr77ya54Sh5rOV6KGN55SfIHNpZGViYW5kIOWkmui3r+i8uOWHuiIKKworIzogZmV0Y2gtcGFjay5jOjgyNgorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiCittc2dzdHIgIuWNlOWumumMr+iqpO+8muWjnueahOWMhemgrSIKKworIzogZmV0Y2gtcGFjay5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiCittc2dzdHIgImZldGNoLXBhY2vvvJrnhKHms5XooY3nlJ/pgLLnqIsgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZmFpbGVkIgorbXNnc3RyICIlcyDlpLHmlZciCisKKyM6IGZldGNoLXBhY2suYzo5MTgKK21zZ2lkICJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIgorbXNnc3RyICJzaWRlYmFuZCDlpJrot6/ovLjlh7rnmbznlJ/pjK/oqqQiCisKKyM6IGZldGNoLXBhY2suYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb24gaXMgJS4qcyIKK21zZ3N0ciAi5Ly65pyN5Zmo54mI5pysICUuKnMiCisKKyM6IGZldGNoLXBhY2suYzo5NzAgZmV0Y2gtcGFjay5jOjk3NiBmZXRjaC1wYWNrLmM6OTc5IGZldGNoLXBhY2suYzo5ODUKKyM6IGZldGNoLXBhY2suYzo5ODkgZmV0Y2gtcGFjay5jOjk5MyBmZXRjaC1wYWNrLmM6OTk3IGZldGNoLXBhY2suYzoxMDAxCisjOiBmZXRjaC1wYWNrLmM6MTAwNSBmZXRjaC1wYWNrLmM6MTAwOSBmZXRjaC1wYWNrLmM6MTAxMyBmZXRjaC1wYWNrLmM6MTAxNworIzogZmV0Y2gtcGFjay5jOjEwMjMgZmV0Y2gtcGFjay5jOjEwMjkgZmV0Y2gtcGFjay5jOjEwMzQgZmV0Y2gtcGFjay5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHN1cHBvcnRzICVzIgorbXNnc3RyICLkvLrmnI3lmajmlK/mj7QgJXMiCisKKyM6IGZldGNoLXBhY2suYzo5NzIKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IGNsaWVudHMiCittc2dzdHIgIuS8uuacjeWZqOS4jeaUr+aPtCBzaGFsbGxvdyDnlKjmiLbnq68iCisKKyM6IGZldGNoLXBhY2suYzoxMDMyCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1zaGFsbG93LXNpbmNlIgorbXNnc3RyICLkvLrmnI3lmajkuI3mlK/mj7QgLS1zaGFsbG93LXNpbmNlIgorCisjOiBmZXRjaC1wYWNrLmM6MTAzNworbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tc2hhbGxvdy1leGNsdWRlIgorbXNnc3RyICLkvLrmnI3lmajkuI3mlK/mj7QgLS1zaGFsbG93LWV4Y2x1ZGUiCisKKyM6IGZldGNoLXBhY2suYzoxMDQxCittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgLS1kZWVwZW4iCittc2dzdHIgIuS8uuacjeWZqOS4jeaUr+aPtCAtLWRlZXBlbiIKKworIzogZmV0Y2gtcGFjay5jOjEwNTgKK21zZ2lkICJubyBjb21tb24gY29tbWl0cyIKK21zZ3N0ciAi5rKS5pyJ5YWx5ZCM55qE5o+Q5LqkIgorCisjOiBmZXRjaC1wYWNrLmM6MTA3MCBmZXRjaC1wYWNrLmM6MTUzNgorbXNnaWQgImdpdCBmZXRjaC1wYWNrOiBmZXRjaCBmYWlsZWQuIgorbXNnc3RyICJnaXQgZmV0Y2gtcGFja++8muWPluW+l+WkseaVl+OAgiIKKworIzogZmV0Y2gtcGFjay5jOjEyMDkKK21zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzaGFsbG93IHJlcXVlc3RzIgorbXNnc3RyICLkvLrmnI3lmajkuI3mlK/mj7Qgc2hhbGxsb3cg6KuL5rGCIgorCisjOiBmZXRjaC1wYWNrLmM6MTIxNgorbXNnaWQgIlNlcnZlciBzdXBwb3J0cyBmaWx0ZXIiCittc2dzdHIgIuS8uuacjeWZqOaUr+aPtCBmaWx0ZXIiCisKKyM6IGZldGNoLXBhY2suYzoxMjM5Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHJlcXVlc3QgdG8gcmVtb3RlIgorbXNnc3RyICLnhKHms5XlsIfoq4vmsYLlr6vliLDpgaDnq68iCisKKyM6IGZldGNoLXBhY2suYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHJlYWRpbmcgc2VjdGlvbiBoZWFkZXIgJyVzJyIKK21zZ3N0ciAi6K6A5Y+W56+A5qiZ6aGMICclcycg55m855Sf6Yyv6KqkIgorCisjOiBmZXRjaC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJleHBlY3RlZCAnJXMnLCByZWNlaXZlZCAnJXMnIgorbXNnc3RyICLpoJDmnJ8gJyVzJ++8jOW+l+WIsCAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGFja25vd2xlZGdtZW50IGxpbmU6ICclcyciCittc2dzdHIgIuaEj+WklueahOeiuuiqjeihjO+8miclcyciCisKKyM6IGZldGNoLXBhY2suYzoxMzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3NpbmcgYWNrczogJWQiCittc2dzdHIgIuiZleeQhiBhY2sg55m855Sf6Yyv6Kqk77yaJWQiCisKKyM6IGZldGNoLXBhY2suYzoxMzE4Cittc2dpZCAiZXhwZWN0ZWQgcGFja2ZpbGUgdG8gYmUgc2VudCBhZnRlciAncmVhZHknIgorbXNnc3RyICLpoJDmnJ/lnKggJ3JlYWR5JyDkuYvlvozlgrPpgIEgcGFja2ZpbGUiCisKKyM6IGZldGNoLXBhY2suYzoxMzIwCittc2dpZCAiZXhwZWN0ZWQgbm8gb3RoZXIgc2VjdGlvbnMgdG8gYmUgc2VudCBhZnRlciBubyAncmVhZHknIgorbXNnc3RyICLlnKjmspLmnIkgJ3JlYWR5JyDkuI3mh4noqbLlgrPpgIHlhbblroPlsI/nr4AiCisKKyM6IGZldGNoLXBhY2suYzoxMzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIHByb2Nlc3Npbmcgc2hhbGxvdyBpbmZvOiAlZCIKK21zZ3N0ciAi6JmV55CG5re66KSH6KO96KiK5oGv55m855Sf6Yyv6Kqk77yaJWQiCisKKyM6IGZldGNoLXBhY2suYzoxNDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIHdhbnRlZC1yZWYsIGdvdCAnJXMnIgorbXNnc3RyICLpoJDmnJ8gd2FudGVkLXJlZu+8jOW+l+WIsCAnJXMnIgorCisjOiBmZXRjaC1wYWNrLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIHdhbnRlZC1yZWY6ICclcyciCittc2dzdHIgIuaEj+WklueahCB3YW50ZWQtcmVm77yaJyVzJyIKKworIzogZmV0Y2gtcGFjay5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgcHJvY2Vzc2luZyB3YW50ZWQgcmVmczogJWQiCittc2dzdHIgIuiZleeQhuimgeWPluW+l+eahOW8leeUqOeZvOeUn+mMr+iqpO+8miVkIgorCisjOiBmZXRjaC1wYWNrLmM6MTc2MgorbXNnaWQgIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIgorbXNnc3RyICLmspLmnInnrKblkIjnmoTpgaDnq6/liIbmlK8iCisKKyM6IGZldGNoLXBhY2suYzoxNzg1IGJ1aWx0aW4vY2xvbmUuYzo2ODgKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAi6YGg56uv5rKS5pyJ5YKz6YCB5omA5pyJ5b+F6ZyA55qE54mp5Lu2IgorCisjOiBmZXRjaC1wYWNrLmM6MTgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIuaykuaciemAmeaoo+eahOmBoOerr+W8leeUqCAlcyIKKworIzogZmV0Y2gtcGFjay5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IGFsbG93IHJlcXVlc3QgZm9yIHVuYWR2ZXJ0aXNlZCBvYmplY3QgJXMiCittc2dzdHIgIuS8uuacjeWZqOS4jeWFgeioseiri+axguacquWFrOmWi+eahOeJqeS7tiAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyMworbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiCittc2dzdHIgIuS4jeiDveW7uueri+aaq+WtmOaqlCIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJyIKK21zZ3N0ciAi54Sh5rOV5bCH5YiG6Zui5byP57C95ZCN5a+r5YWlICclcyciCisKKyM6IGdwZy1pbnRlcmZhY2UuYzozOTAKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyDnhKHms5Xngrros4fmlpnnsL3lkI0iCisKKyM6IGdyYXBoLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JlIGludmFsaWQgY29sb3IgJyUuKnMnIGluIGxvZy5ncmFwaENvbG9ycyIKK21zZ3N0ciAi5b+955WlIGxvZy5ncmFwaENvbG9ycyDkuK3nhKHmlYjnmoTpoY/oibIgJyUuKnMnIgorCisjOiBncmVwLmM6NjY4Cittc2dpZCAiIgorImdpdmVuIHBhdHRlcm4gY29udGFpbnMgTlVMTCBieXRlICh2aWEgLWYgPGZpbGU+KS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCAiCisid2l0aCAtUCB1bmRlciBQQ1JFIHYyIgorbXNnc3RyICIiCisi5o+Q5L6b55qE5qih5byP5YyF5ZCrIE5VTEwg5a2X5YWD77yI6YCa6YGOIC1mIDzmqpTmoYg+IOWPg+aVuO+8ieOAguWPquaciSBQQ1JFIHYyIOS4i+eahCAtUCDmlK/mj7TmraQiCisi5Yqf6IO9IgorCisjOiBncmVwLmM6MjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJ++8mueEoeazleiugOWPliAlcyIKKworIzogZ3JlcC5jOjIxNDEgc2V0dXAuYzoxNjUgYnVpbHRpbi9jbG9uZS5jOjQxMSBidWlsdGluL2RpZmYuYzo4MgorIzogYnVpbHRpbi9ybS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLlsI0gJyVzJyDlkbzlj6sgc3RhdCDlpLHmlZciCisKKyM6IGdyZXAuYzoyMTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQiCittc2dzdHIgIiclcyfvvJroroDlj5bkuI3lrozmlbQiCisKKyM6IGhlbHAuYzoyMworbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICLplovlp4vkuIDlgIvlt6XkvZzljYDvvIjlj4PopovvvJpnaXQgaGVscCB0dXRvcmlhbO+8iSIKKworIzogaGVscC5jOjI0Cittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgIuWcqOebruWJjeiuiuabtOS4iuW3peS9nO+8iOWPg+imi++8mmdpdCBoZWxwIGV2ZXJ5ZGF577yJIgorCisjOiBoZWxwLmM6MjUKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgIuaqouafpeatt+WPsuWSjOeLgOaFi++8iOWPg+imi++8mmdpdCBoZWxwIHJldmlzaW9uc++8iSIKKworIzogaGVscC5jOjI2Cittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAi5pO05bGV44CB5qiZ6KiY5ZKM6Kq/5qCh5oKo55qE5q235Y+y6KiY6YyEIgorCisjOiBoZWxwLmM6MjcKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgIuWNlOWQjO+8iOWPg+imi++8mmdpdCBoZWxwIHdvcmtmbG93c++8iSIKKworIzogaGVscC5jOjMxCittc2dpZCAiTWFpbiBQb3JjZWxhaW4gQ29tbWFuZHMiCittc2dzdHIgIuS4u+imgeeahOS4iuWxpOaMh+S7pCIKKworIzogaGVscC5jOjMyCittc2dpZCAiQW5jaWxsYXJ5IENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIgorbXNnc3RyICLovJTliqnmjIfku6Qv5YuV5L2c6ICFIgorCisjOiBoZWxwLmM6MzMKK21zZ2lkICJBbmNpbGxhcnkgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIgorbXNnc3RyICLovJTliqnmjIfku6Qv6Kmi5ZWP6ICFIgorCisjOiBoZWxwLmM6MzQKK21zZ2lkICJJbnRlcmFjdGluZyB3aXRoIE90aGVycyIKK21zZ3N0ciAi6IiH5YW25a6D57O757Wx5LqS5YuVIgorCisjOiBoZWxwLmM6MzUKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBNYW5pcHVsYXRvcnMiCittc2dzdHIgIuS9jue0muaMh+S7pC/li5XkvZzogIUiCisKKyM6IGhlbHAuYzozNgorbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIEludGVycm9nYXRvcnMiCittc2dzdHIgIuS9jue0muaMh+S7pC/oqaLllY/ogIUiCisKKyM6IGhlbHAuYzozNworI3wgbXNnaWQgIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNoaW5nIFJlcG9zaXRvcmllcyIKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIKK21zZ3N0ciAi5L2O57Sa5oyH5LukIC8g5ZCM5q2l54mI5pys5bqrIgorCisjOiBoZWxwLmM6MzgKK21zZ2lkICJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIgorbXNnc3RyICLkvY7ntJrmjIfku6Qv5YWn6YOo5Yqp5omLIgorCisjOiBoZWxwLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAi5ZyoICclcycg5LiL5Y+v55So55qEIGdpdCDmjIfku6QiCisKKyM6IGhlbHAuYzozMDUKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgIuWcqCAkUEFUSCDot6/lvpHkuK3nmoTlhbbku5blnLDmlrnlj6/nlKjnmoQgZ2l0IOaMh+S7pCIKKworIzogaGVscC5jOjMxNAorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAi6YCZ5Lqb5piv5ZCE56iu5aC05ZCI5bi46KaL55qEIEdpdCDmjIfku6TvvJoiCisKKyM6IGhlbHAuYzozNjMgZ2l0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgY29tbWFuZCBsaXN0aW5nIHR5cGUgJyVzJyIKK21zZ3N0ciAi5LiN5pSv5o+055qE5oyH5Luk5YiX6KGo6aGe5Z6LICclcyciCisKKyM6IGhlbHAuYzo0MDMKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOiIKK21zZ3N0ciAi5pyA5bi455So55qEIEdpdCDlmq7lsI7mnInvvJoiCisKKyM6IGhlbHAuYzo1MTIKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgdG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQiCittc2dzdHIgIuWft+ihjOOAgCdnaXQgaGVscCA8Y29tbWFuZD4nIOS+huaqouimlueJueWumuWtkOaMh+S7pCIKKworIzogaGVscC5jOjUxNworbXNnaWQgIkV4dGVybmFsIGNvbW1hbmRzIgorbXNnc3RyICLlpJbpg6jmjIfku6QiCisKKyM6IGhlbHAuYzo1MzIKK21zZ2lkICJDb21tYW5kIGFsaWFzZXMiCittc2dzdHIgIuaMh+S7pOWIpeWQjSIKKworIzogaGVscC5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyInJXMnIOWDj+aYr+S4gOWAiyBnaXQg5oyH5Luk77yM5L2G5Y2754Sh5rOV5Z+36KGM44CCXG4iCisi5Y+v6IO95pivIGdpdC0lcyDlj5fmkI3vvJ8iCisKKyM6IGhlbHAuYzo2NTUKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAi5ZSJ5ZGA77yM5oKo55qE57O757Wx5Lit5pyq55m854++IEdpdCDmjIfku6TjgIIiCisKKyM6IGhlbHAuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi6K2m5ZGK77ya5oKo5Z+36KGM5LqG5LiA5YCL5Lim5LiN5a2Y5Zyo55qEIEdpdCDmjIfku6QgJyVzJ+OAgiIKKworIzogaGVscC5jOjY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcycuIgorbXNnc3RyICLlgYflrprkvaDmg7PopoHnmoTmmK8gJyVzJyDkuKbnubznuozjgIIiCisKKyM6IGhlbHAuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGludWluZyBpbiAlMC4xZiBzZWNvbmRzLCBhc3N1bWluZyB0aGF0IHlvdSBtZWFudCAnJXMnLiIKK21zZ3N0ciAi5YGH5a6a5L2g5oOz6KaB55qE5pivICclMiRzJ++8jOWcqCAlMSQwLjFmIOenkumQmOW+jOe5vOe6jOOAgiIKKworIzogaGVscC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXTvvJonJXMnIOS4jeaYr+S4gOWAiyBnaXQg5oyH5Luk44CC5Y+D6KaLICdnaXQgLS1oZWxwJ+OAgiIKKworIzogaGVscC5jOjY5OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmQgaXMiCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJUaGUgbW9zdCBzaW1pbGFyIGNvbW1hbmRzIGFyZSIKK21zZ3N0clswXSAiIgorIlxuIgorIuacgOmhnuS8vOeahOaMh+S7pOaciSIKK21zZ3N0clsxXSAiIgorIlxuIgorIuacgOmhnuS8vOeahOaMh+S7pOaciSIKKworIzogaGVscC5jOjcxNAorbXNnaWQgImdpdCB2ZXJzaW9uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgdmVyc2lvbiBbPOmBuOmghT5dIgorCisjOiBoZWxwLmM6NzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlc++8miVzIC0gJXMiCisKKyM6IGhlbHAuYzo3ODcKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyLmgqjmjIfnmoTmmK/pgJnlgIvll47vvJ8iCittc2dzdHJbMV0gIiIKKyJcbiIKKyLmgqjmjIfnmoTmmK/pgJnlhbbkuK3nmoTmn5DkuIDlgIvll47vvJ8iCisKKyM6IGlkZW50LmM6MzQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBQbGVhc2UgdGVsbCBtZSB3aG8geW91IGFyZS5cbiIKKyJcbiIKKyJSdW5cbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCBcInlvdUBleGFtcGxlLmNvbVwiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiXG4iCisidG8gc2V0IHlvdXIgYWNjb3VudCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIOiri+WRiuiotOaIkeS9oOaYr+iqsOOAglxuIgorIlxuIgorIuWft+ihjFxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyLkvoboqK3lrprmgqjluLPomZ/nmoTpoJDoqK3ouqvku73mqJnoqJjjgIJcbiIKKyLlpoLmnpzlg4XlnKjmnKzniYjmnKzluqvoqK3lrprouqvku73mqJnoqJjvvIzliYfnnIHnlaUgLS1nbG9iYWwg5Y+D5pW444CCXG4iCisKKyM6IGlkZW50LmM6Mzc5Cittc2dpZCAibm8gZW1haWwgd2FzIGdpdmVuIGFuZCBhdXRvLWRldGVjdGlvbiBpcyBkaXNhYmxlZCIKK21zZ3N0ciAi5pyq5o+Q5L6b5L+h5Lu25L2N5Z2A5LiU6Ieq5YuV5YG15ris6KKr56aB55SoIgorCisjOiBpZGVudC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYXV0by1kZXRlY3QgZW1haWwgYWRkcmVzcyAoZ290ICclcycpIgorbXNnc3RyICLnhKHms5Xoh6rli5XlgbXmuKzkv6Hku7bkvY3lnYDvvIjlvpfliLAgJyVzJ++8iSIKKworIzogaWRlbnQuYzo0MDEKK21zZ2lkICJubyBuYW1lIHdhcyBnaXZlbiBhbmQgYXV0by1kZXRlY3Rpb24gaXMgZGlzYWJsZWQiCittc2dzdHIgIuacquaPkOS+m+Wnk+WQjeS4lOiHquWLleWBtea4rOiiq+emgeeUqCIKKworIzogaWRlbnQuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGF1dG8tZGV0ZWN0IG5hbWUgKGdvdCAnJXMnKSIKK21zZ3N0ciAi54Sh5rOV6Ieq5YuV5YG15ris5aeT5ZCN77yI5b6X5YiwICclcyfvvIkiCisKKyM6IGlkZW50LmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IGlkZW50IG5hbWUgKGZvciA8JXM+KSBub3QgYWxsb3dlZCIKK21zZ3N0ciAi5LiN5YWB6Kix56m655qE5aeT5ZCN77yI5bCN5pa8IDwlcz7vvIkiCisKKyM6IGlkZW50LmM6NDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWUgY29uc2lzdHMgb25seSBvZiBkaXNhbGxvd2VkIGNoYXJhY3RlcnM6ICVzIgorbXNnc3RyICLlp5PlkI3kuK3lg4XljIXlkKvnpoHnlKjlrZflhYPvvJolcyIKKworIzogaWRlbnQuYzo0MzYgYnVpbHRpbi9jb21taXQuYzo2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgIueEoeaViOeahOaXpeacn+agvOW8j++8miVzIgorCisjOiBsaXN0LW9iamVjdHMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW50cnkgJyVzJyBpbiB0cmVlICVzIGhhcyB0cmVlIG1vZGUsIGJ1dCBpcyBub3QgYSB0cmVlIgorbXNnc3RyICLmqLkgJTIkcyDkuK3nmoTmop3nm64gJyUxJHMnIOWFt+acieaoueeahOWxrOaAp++8jOS9huS4jeaYr+S4gOWAi+aoueeLgOeJqeS7tiIKKworIzogbGlzdC1vYmplY3RzLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgImVudHJ5ICclcycgaW4gdHJlZSAlcyBoYXMgYmxvYiBtb2RlLCBidXQgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi5qi5ICUyJHMg5Lit55qE5qKd55uuICclMSRzJyDlhbfmnInos4fmlpnnianku7bnmoTlsazmgKfvvIzkvYbkuI3mmK/kuIDlgIvos4fmlpnnianku7YiCisKKyM6IGxpc3Qtb2JqZWN0cy5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9hZCByb290IHRyZWUgZm9yIGNvbW1pdCAlcyIKK21zZ3N0ciAi54Sh5rOV54K65o+Q5LqkICVzIOi8ieWFpeagueaouSIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzIHNwYXJzZSBibG9iIGluICclcyciCittc2dzdHIgIuS4jeiDveWtmOWPliAnJXMnIOS4reeahOeogOeWj+izh+aWmeeJqeS7tiIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluICVzIgorbXNnc3RyICLnhKHms5Xop6PmnpAgJXMg5Lit55qE56iA55aP6YGO5r++5Zmo6LOH5paZIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo1OAorbXNnaWQgImV4cGVjdGVkICd0cmVlOjxkZXB0aD4nIgorbXNnc3RyICLmnJ/mnJsgJ3RyZWU6POa3seW6pj4nIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzo3MworbXNnaWQgInNwYXJzZTpwYXRoIGZpbHRlcnMgc3VwcG9ydCBoYXMgYmVlbiBkcm9wcGVkIgorbXNnc3RyICJzcGFyc2U6cGF0aCDpgY7mv77lmajmlK/mj7Tlt7LooqvliKrpmaQiCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsdGVyLXNwZWMgJyVzJyIKK21zZ3N0ciAi54Sh5pWI55qE6YGO5r++5Zmo6KGo6YGU5byPICclcyciCisKKyM6IGxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJtdXN0IGVzY2FwZSBjaGFyIGluIHN1Yi1maWx0ZXItc3BlYzogJyVjJyIKK21zZ3N0ciAi5b+F6aCI5bCNIHN1Yi1maWx0ZXItc3BlYyDkuK3nmoTlrZflhYPpgLLooYzovYnnvqnvvJonJWMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuYzoxNDQKK21zZ2lkICJleHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgY29tYmluZToiCittc2dzdHIgIuacn+acm+WcqOe1hOWQiOW+jOacieS4gOS6m+adseilv++8miIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmM6MjI2Cittc2dpZCAibXVsdGlwbGUgZmlsdGVyLXNwZWNzIGNhbm5vdCBiZSBjb21iaW5lZCIKK21zZ3N0ciAi5LiN6IO95re355So5aSa56iu6YGO5r++6KaP5qC8IgorCisjOiBsb2NrZmlsZS5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuIgorIlxuIgorIkFub3RoZXIgZ2l0IHByb2Nlc3Mgc2VlbXMgdG8gYmUgcnVubmluZyBpbiB0aGlzIHJlcG9zaXRvcnksIGUuZy5cbiIKKyJhbiBlZGl0b3Igb3BlbmVkIGJ5ICdnaXQgY29tbWl0Jy4gUGxlYXNlIG1ha2Ugc3VyZSBhbGwgcHJvY2Vzc2VzXG4iCisiYXJlIHRlcm1pbmF0ZWQgdGhlbiB0cnkgYWdhaW4uIElmIGl0IHN0aWxsIGZhaWxzLCBhIGdpdCBwcm9jZXNzXG4iCisibWF5IGhhdmUgY3Jhc2hlZCBpbiB0aGlzIHJlcG9zaXRvcnkgZWFybGllcjpcbiIKKyJyZW1vdmUgdGhlIGZpbGUgbWFudWFsbHkgdG8gY29udGludWUuIgorbXNnc3RyICIiCisi54Sh5rOV5bu656uLICclcy5sb2NrJ++8miVz44CCXG4iCisiXG4iCisi5Ly85LmO5Y+m5aSW5LiA5YCLIGdpdCDpgLLnqIvlnKjpgJnlgIvniYjmnKzluqvkuK3ln7fooYzvvIzkvovlpoLvvJonZ2l0IGNvbW1pdCcg5oyH5Luk5omTXG4iCisi6ZaL5LqG5LiA5YCL57eo6Lyv5Zmo44CC6KuL56K66KqN5omA5pyJ6YCy56iL6YO95bey57aT6Zec6ZaJ54S25b6M6YeN6Kmm44CC5aaC5p6c5LuN54S25aCx6Yyv77yMXG4iCisi5Y+v6IO95LmL5YmN5pyJ5LiA5YCLIGdpdCDpgLLnqIvlnKjpgJnlgIvniYjmnKzluqvkuK3nlbDluLjpm6LplovvvJpcbiIKKyLmiYvli5XliKrpmaTpgJnlgIvmqpTmoYjlho3nubznuozjgIIiCisKKyM6IGxvY2tmaWxlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIKK21zZ3N0ciAi5LiN6IO95bu656uLICclcy5sb2NrJ++8miVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLoroDlj5blv6vlj5blpLHmlZciCisKKyM6IG1lcmdlLmM6MTA3IHJlcmVyZS5jOjcyMCBidWlsdGluL2FtLmM6MTg3NCBidWlsdGluL2FtLmM6MTkwOAorIzogYnVpbHRpbi9jaGVja291dC5jOjUzOSBidWlsdGluL2NoZWNrb3V0LmM6Nzk4IGJ1aWx0aW4vY2xvbmUuYzo4MDkKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNjQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIueEoeazleWvq+aWsOeahOe0ouW8leaqlOahiCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY3Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIu+8iOWjnuaPkOS6pO+8iVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkX2NhY2hlaW5mbyBmYWlsZWQgZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRfY2FjaGVpbmZvIOWwjei3r+W+kSAnJXMnIOWft+ihjOWkseaVl++8jOWQiOS9tee1guatouOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZF9jYWNoZWluZm8gZmFpbGVkIHRvIHJlZnJlc2ggZm9yIHBhdGggJyVzJzsgbWVyZ2UgYWJvcnRpbmcuIgorbXNnc3RyICJhZGRfY2FjaGVpbmZvIOeEoeazlemHjeaWsOaVtOeQhui3r+W+kSAnJXMn77yM5ZCI5L2157WC5q2i44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAi5bu656uL6Lev5b6RICclcyclcyDlpLHmlZciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICLliKrpmaQgJXMg5Lul5L6/54K65a2Q55uu6YyE55WZ5Ye656m66ZaTXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkxMCBtZXJnZS1yZWN1cnNpdmUuYzo5MjkKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICLvvJrlj6/og73mmK/kuIDlgIvnm67pjIQv5qqU5qGI6KGd56qB77yfIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICLmi5LntZXmjajmo4QgJyVzJyDkuK3nmoTmnKrov73ouaTmqpTmoYgiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk2MCBidWlsdGluL2NhdC1maWxlLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIuS4jeiDveiugOWPlueJqeS7tiAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAiJXMgJyVzJyDmh4nngrros4fmlpnnianku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ3N0ciAi6ZaL5ZWfICclcycg5aSx5pWX77yaJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJzogJXMiCittc2dzdHIgIuW7uueri+espuiZn+mAo+e1kCAnJXMnIOWkseaVl++8miVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIuS4jeefpemBk+WmguS9leiZleeQhiAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobm90IGNoZWNrZWQgb3V0KSIKK21zZ3N0ciAi54Sh5rOV5ZCI5L215a2Q5qih57WEICVzIO+8iOaykuacieewveWHuu+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChjb21taXRzIG5vdCBwcmVzZW50KSIKK21zZ3N0ciAi54Sh5rOV5ZCI5L215a2Q5qih57WEICVz77yI5o+Q5Lqk5LiN5a2Y5Zyo77yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKGNvbW1pdHMgZG9uJ3QgZm9sbG93IG1lcmdlLWJhc2UpIgorbXNnc3RyICLnhKHms5XlkIjkvbXlrZDmqKHntYQgJXMg77yI5o+Q5Lqk5pyq6Lef6Zqo5ZCI5L215Z+656SO77yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjIxIG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkaW5nIHN1Ym1vZHVsZSAlcyB0byB0aGUgZm9sbG93aW5nIGNvbW1pdDoiCittc2dzdHIgIuWtkOaooee1hCAlcyDlv6vovYnliLDlpoLkuIvmj5DkuqTvvJoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjQgbWVyZ2UtcmVjdXJzaXZlLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRpbmcgc3VibW9kdWxlICVzIgorbXNnc3RyICLlv6vovYnlrZDmqKHntYQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIHN1Ym1vZHVsZSAlcyAobWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kKSIKK21zZ3N0ciAi54Sh5rOV5ZCI5L215a2Q5qih57WEICVzIO+8iOaykueZvOePvuWQiOS9tei3n+maqOeahOaPkOS6pO+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzIChub3QgZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAi54Sh5rOV5ZCI5L215a2Q5qih57WEICVz77yI6Z2e5b+r6L2J77yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjY0Cittc2dpZCAiRm91bmQgYSBwb3NzaWJsZSBtZXJnZSByZXNvbHV0aW9uIGZvciB0aGUgc3VibW9kdWxlOlxuIgorbXNnc3RyICLmib7liLDlrZDmqKHntYTnmoTkuIDlgIvlj6/og73nmoTlkIjkvbXmlrnmoYjvvJpcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgdGhpcyBpcyBjb3JyZWN0IHNpbXBseSBhZGQgaXQgdG8gdGhlIGluZGV4IGZvciBleGFtcGxlXG4iCisiYnkgdXNpbmc6XG4iCisiXG4iCisiICBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAlcyBcIiVzXCJcbiIKKyJcbiIKKyJ3aGljaCB3aWxsIGFjY2VwdCB0aGlzIHN1Z2dlc3Rpb24uXG4iCittc2dzdHIgIiIKKyLlpoLmnpzpgJnlgIvmraPnorrvvIzlsIflhbbmlrDlop7liLDntKLlvJXvvIzkvovlpoLkvb/nlKjmjIfku6TvvJpcbiIKKyJcbiIKKyIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuIgorIlxuIgorIuS7peaOpeWPl+atpOW7uuitsOOAglxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBzdWJtb2R1bGUgJXMgKG11bHRpcGxlIG1lcmdlcyBmb3VuZCkiCittc2dzdHIgIueEoeazleWQiOS9teWtkOaooee1hCAlcyDvvIjnmbznj77lpJrlgIvlkIjkvbXvvIkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzNDkKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAi54Sh5rOV5Z+36KGM5YWn6YOo5ZCI5L21IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIuS4jeiDveaWsOWiniAlcyDoh7Pnianku7bluqsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICLoh6rli5XlkIjkvbUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJXM7IHdyaXRpbmcgdG8gJXMgaW5zdGVhZC4iCittc2dzdHIgIumMr+iqpO+8muaLkue1lemBuuWkseacqui/vei5pOaqlOahiCAnJXMn77yM6ICM5piv5a+r5YWlICVz44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgIiIKKyLooZ3nqoHvvIglMSRzL+WIqumZpO+8ie+8miUyJHMg5ZyoICUzJHMg5Lit6KKr5Yiq6Zmk77yM5ZyoICU1JHMg5Lit6KKrICU0JHPjgIIlNyRzIOeahCAlNiRzIOeJiCIKKyLmnKzooqvkv53nlZnjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyB0byAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyAiCisibGVmdCBpbiB0cmVlLiIKK21zZ3N0ciAiIgorIuihneeqge+8iCUxJHMv5Yiq6Zmk77yJ77yaJTIkcyDlnKggJTMkcyDkuK3ooqvliKrpmaTvvIzlnKggJTYkcyDkuK3nmoQgJTUkcyDooqsgJTQkc+OAgiU4JHMg55qEICIKKyIlNyRzIOeJiOacrOiiq+S/neeVmeOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUgYXQgJXMuIgorbXNnc3RyICIiCisi6KGd56qB77yIJTEkcy/liKrpmaTvvInvvJolMiRzIOWcqCAlMyRzIOS4reiiq+WIqumZpO+8jOWcqCAlNSRzIOS4reiiqyAlNCRz44CCJTckcyDnmoQgJTYkcyDniYgiCisi5pys5L+d55WZ5ZyoICU4JHMg5Lit44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgdG8gJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgIgorImxlZnQgaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyLooZ3nqoHvvIglMSRzL+WIqumZpO+8ie+8miUyJHMg5ZyoICUzJHMg5Lit6KKr5Yiq6Zmk77yM5ZyoICU2JHMg5Lit55qEICU1JHMg6KKrICU0JHPjgIIlOCRzIOeahCAiCisiJTckcyDniYjmnKzkv53nlZnlnKggJTkkcyDkuK3jgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MzQKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgIumHjeaWsOWRveWQjSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUzNAorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgIumHjeaWsOWRveWQjSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYxNCBtZXJnZS1yZWN1cnNpdmUuYzoyNTMwIG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0ICVzIgorbXNnc3RyICLmi5LntZXpgbrlpLHpq5LmqpTmoYggJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYyNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzLCBldmVuIHRob3VnaCBpdCdzIGluIHRoZSB3YXkuIgorbXNnc3RyICLmi5LntZXlnKggJyVzJyDomZXlpLHljrvmnKrov73ouaTmqpTmoYjvvIzljbPkvb/lroPlrZjlnKjmlrzph43mlrDlkb3lkI3kuK3jgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAgQWRkZWQgJXMgaW4gJXMiCittc2dzdHIgIuihneeqge+8iOmHjeaWsOWRveWQjS/mlrDlop7vvInvvJrlnKggJTMkcyDkuK3ph43mlrDlkb3lkI0gJTEkcy0+JTIkc+OAguWcqCAlNSRzIOS4reaWsOWiniAlNCRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyDmmK8gJXMg5Lit55qE5LiA5YCL55uu6YyE6ICM5beyICVzIOeCuuWQjeiiq+aWsOWiniIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICVzOyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAi5ouS57WV6YG65aSx5pyq6L+96Lmk5qqU5qGIICclcyfvvIzogIzmmK/mlrDlop7ngrogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIuihneeqge+8iOmHjeaWsOWRveWQjS/ph43mlrDlkb3lkI3vvInvvJrlnKjliIbmlK8gXCIlMyRzXCIg5Lit6YeN5paw5ZG95ZCNIFwiJTEkc1wiLT5cIiUyJHNcIu+8jOWcqCIKKyLliIbmlK8gXCIlNiRzXCIg5Lit6YeN5paw5ZG95ZCNIFwiJTQkc1wiLT5cIiU1JHNcIiU3JHMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NDIKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIu+8iOeVmeS4i+acquino+axuu+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyLooZ3nqoHvvIjph43mlrDlkb3lkI0v6YeN5paw5ZG95ZCN77yJ77ya5ZyoICUzJHMg5Lit6YeN5paw5ZG95ZCNICUxJHMtPiUyJHPvvIzlnKggJTYkcyDkuK3ph43mlrDlkb3lkI0gIgorIiU0JHMtPiU1JHMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChkaXJlY3RvcnkgcmVuYW1lIHNwbGl0KTogVW5jbGVhciB3aGVyZSB0byBwbGFjZSAlcyBiZWNhdXNlICIKKyJkaXJlY3RvcnkgJXMgd2FzIHJlbmFtZWQgdG8gbXVsdGlwbGUgb3RoZXIgZGlyZWN0b3JpZXMsIHdpdGggbm8gZGVzdGluYXRpb24gIgorImdldHRpbmcgYSBtYWpvcml0eSBvZiB0aGUgZmlsZXMuIgorbXNnc3RyICIiCisi6KGd56qB77yI5YiG5Ymy55qE55uu6YyE6YeN5paw5ZG95ZCN77yJ77ya5LiN5riF5qWaICVzIOaHieipsuaUvuWcqOWTquijoe+8jOWboOeCuuebrumMhCAlcyDooqvph43mlrDlkb3lkI3liLAiCisi5aSa5YCL5YW25a6D55uu6YyE77yM5rKS5pyJ55uu6YyE5YyF5ZCr5aSn6YOo5YiG5qqU5qGI44CCIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoaW1wbGljaXQgZGlyIHJlbmFtZSk6IEV4aXN0aW5nIGZpbGUvZGlyIGF0ICVzIGluIHRoZSB3YXkgb2YgIgorImltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWUocykgcHV0dGluZyB0aGUgZm9sbG93aW5nIHBhdGgocykgdGhlcmU6ICVzLiIKK21zZ3N0ciAiIgorIuihneeqge+8iOmaseW8j+ebrumMhOmHjeaWsOWRveWQje+8ie+8muiZleaWvOmaseW8j+ebrumMhOmHjeaWsOWRveWQjeeahOePvuWtmOaqlOahiC/nm67pjIQgJXPvvIzlsIfku6XkuIvot6/lvpEiCisi5pS+5Zyo77yaJXPjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIxNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogQ2Fubm90IG1hcCBtb3JlIHRoYW4gb25lIHBhdGggdG8gJXM7ICIKKyJpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcyB0cmllZCB0byBwdXQgdGhlc2UgcGF0aHMgdGhlcmU6ICVzIgorbXNnc3RyICIiCisi6KGd56qB77yI6Zqx5byP55uu6YyE6YeN5paw5ZG95ZCN77yJ77ya54Sh5rOV5pig5bCE5LiA5YCL5Lul5LiK6Lev5b6R5YiwICVz77yM6Zqx5byP55uu6YyE6YeN5paw5ZG95ZCN5ZiX6Kmm5bCH6YCZIgorIuS6m+i3r+W+keaUvue9ruaWvOatpO+8miVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBkaXJlY3RvcnkgJXMtPiVzIGluICVzLiBSZW5hbWUgZGlyZWN0b3J5ICVzLSIKKyI+JXMgaW4gJXMiCittc2dzdHIgIiIKKyLooZ3nqoHvvIjph43mlrDlkb3lkI0v6YeN5paw5ZG95ZCN77yJ77ya5ZyoICUzJHMg5Lit6YeN5paw5ZG95ZCN55uu6YyEICUxJHMtPiUyJHPvvIzlnKggJTYkcyDkuK3ph43mlrAiCisi5ZG95ZCN55uu6YyEICU0JHMtPiU1JHMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nICVzIC0+ICVzIHJlbmFtZSB0byAlcywgYmVjYXVzZSAlcyBpdHNlbGYgd2FzICIKKyJyZW5hbWVkLiIKK21zZ3N0ciAi6K2m5ZGK77ya6YG/5YWN5oeJ55SoICVzIC0+ICVzIOeahOmHjeaWsOWRveWQjeWIsCAlc++8jOWboOeCuiAlcyDmnKzouqvlt7Looqvph43mlrDlkb3lkI3jgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICLkuI3og73oroDlj5bnianku7YgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIueJqeS7tiAlcyDkuI3mmK/kuIDlgIvos4fmlpnnianku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwODYKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIuS/ruaUuSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzA4NgorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLkv67mlLkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMwOTgKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICLlhaflrrkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxMDIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICLmlrDlop4v5paw5aKeIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAi55Wl6YGOICVz77yI5bey57aT5YGa6YGO55u45ZCM5ZCI5L2177yJIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTQ3IGdpdC1zdWJtb2R1bGUuc2g6OTkzCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICLlrZDmqKHntYQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIuihneeqge+8iCVz77yJ77ya5ZCI5L216KGd56qB5pa8ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICLogIzmmK/ku6UgJXMg54K65ZCN5paw5aKeIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRoIHVwZGF0ZWQ6ICVzIGFkZGVkIGluICVzIGluc2lkZSBhIGRpcmVjdG9yeSB0aGF0IHdhcyByZW5hbWVkIGluICVzOyAiCisibW92aW5nIGl0IHRvICVzLiIKK21zZ3N0ciAi6Lev5b6R5bey5pu05paw77yaJXMg5paw5aKe5YiwICVz77yM5L2N5pa85LiA5YCL6KKr6YeN5paw5ZG95ZCN5YiwICVzIOeahOebrumMhOS4re+8jOWwh+WFtuenu+WLleWIsCAlc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyBhZGRlZCBpbiAlcyBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCB3YXMgcmVuYW1lZCAiCisiaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisi6KGd56qB77yI5qqU5qGI5L2N572u77yJ77yaJXMg5paw5aKe5YiwICVz77yM5L2N5pa85LiA5YCL6KKr6YeN5paw5ZG95ZCN54K6ICVzIOeahOebrumMhOS4re+8jOW7uuitsOWwh+WFtuenuyIKKyLli5XliLAgJXPjgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjMyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBhdGggdXBkYXRlZDogJXMgcmVuYW1lZCB0byAlcyBpbiAlcywgaW5zaWRlIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHJlbmFtZWQgaW4gIgorIiVzOyBtb3ZpbmcgaXQgdG8gJXMuIgorbXNnc3RyICIiCisi6Lev5b6R5bey5pu05paw77yaJTEkcyDph43mlrDlkb3lkI3ngrogJTMkcyDkuK3nmoQgJTIkc++8jOiAjOipsuebrumMhOiiq+mHjeaWsOWRveWQjeWIsCAlNCRzIOS4re+8jOWwhyIKKyLlhbbnp7vli5XliLAgJTUkc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzI3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKGZpbGUgbG9jYXRpb24pOiAlcyByZW5hbWVkIHRvICVzIGluICVzLCBpbnNpZGUgYSBkaXJlY3RvcnkgdGhhdCAiCisid2FzIHJlbmFtZWQgaW4gJXMsIHN1Z2dlc3RpbmcgaXQgc2hvdWxkIHBlcmhhcHMgYmUgbW92ZWQgdG8gJXMuIgorbXNnc3RyICIiCisi6KGd56qB77yI5qqU5qGI5L2N572u77yJ77yaJTEkcyDph43mlrDlkb3lkI3ngrogJTMkcyDkuK3nmoQgJTIkc++8jOiAjOipsuebrumMhOiiq+mHjeaWsOWRveWQjeWIsCAlNCRzICIKKyLkuK3vvIzlu7rorbDlsIflhbbnp7vli5XliLAgJTUkc+OAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAi5Yiq6ZmkICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDA4Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgIuaqlOahiC/nm67pjIQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0MTMKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAi55uu6YyEL+aqlOahiCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAi6KGd56qB77yIJTEkc++8ie+8muWcqCAlMyRzIOS4reacieS4gOWAi+WQjeeCuiAlMiRzIOeahOebrumMhOOAguS7pSAlNSRzIOeCuuWQjeaWsOWiniAlNCRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAi5paw5aKeICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChhZGQvYWRkKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIuihneeqge+8iGFkZC9hZGTvvInvvJrlkIjkvbXooZ3nqoHmlrwgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0ODIKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUhIgorbXNnc3RyICLlt7LntpPmmK/mnIDmlrDnmoTvvIEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjM0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICLnhKHms5XlkIjkvbXmqLkgJXMg5ZKMICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNTk1Cittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIuWQiOS9te+8miIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAi55m854++ICV1IOWAi+WFseWQjOelluWFiO+8miIKK21zZ3N0clsxXSAi55m854++ICV1IOWAi+WFseWQjOelluWFiO+8miIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzY1OAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAi5ZCI5L215pyq6L+U5Zue5o+Q5LqkIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozNzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiIKKyIgICVzIgorbXNnc3RyICIiCisi5oKo5bCN5LiL5YiX5qqU5qGI55qE5pys5qmf5L+u5pS55bCH6KKr5ZCI5L215YuV5L2c6KaG6JOL77yaXG4iCisiICAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MzgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIuS4jeiDveino+aekOeJqeS7tiAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzozODMyIGJ1aWx0aW4vbWVyZ2UuYzo2OTQgYnVpbHRpbi9tZXJnZS5jOjg3NAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIuS4jeiDveWvq+WFpee0ouW8leOAgiIKKworIzogbWlkeC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggZmlsZSAlcyBpcyB0b28gc21hbGwiCittc2dzdHIgIuWkmuWMhee0ouW8leaqlOahiCAlcyDlpKrlsI8iCisKKyM6IG1pZHguYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHNpZ25hdHVyZSAweCUwOHggZG9lcyBub3QgbWF0Y2ggc2lnbmF0dXJlIDB4JTA4eCIKK21zZ3N0ciAi5aSa5YyF57Si5byV57C95ZCNIDB4JTA4eCDlkoznsL3lkI0gMHglMDh4IOS4jeespuWQiCIKKworIzogbWlkeC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpLXBhY2staW5kZXggdmVyc2lvbiAlZCBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAibXVsdGktcGFjay1pbmRleCDniYjmnKwgJWQg5LiN6IO96KKr6K2Y5YilIgorCisjOiBtaWR4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCB2ZXJzaW9uICV1IGRvZXMgbm90IG1hdGNoIgorbXNnc3RyICLmlaPliJfniYjmnKwgJXUg5LiN56ym5ZCIIgorCisjOiBtaWR4LmM6MTA4Cittc2dpZCAiaW52YWxpZCBjaHVuayBvZmZzZXQgKHRvbyBsYXJnZSkiCittc2dzdHIgIueEoeaViOeahOWNgOWhiuS9jeenu++8iOWkquWkp++8iSIKKworIzogbWlkeC5jOjEzMgorbXNnaWQgInRlcm1pbmF0aW5nIG11bHRpLXBhY2staW5kZXggY2h1bmsgaWQgYXBwZWFycyBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQiCittc2dzdHIgIue1guatouWkmuWMhee0ouW8leWNgOWhiiBpZCDlh7rnj77mmYLplpPml6nmlrzpoJDmnJ8iCisKKyM6IG1pZHguYzoxNDUKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgcGFjay1uYW1lIGNodW5rIgorbXNnc3RyICLlpJrljIXntKLlvJXnvLrlsJHlv4XpnIDnmoTljIXlkI3loYoiCisKKyM6IG1pZHguYzoxNDcKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IG1pc3NpbmcgcmVxdWlyZWQgT0lEIGZhbm91dCBjaHVuayIKK21zZ3N0ciAi5aSa5YyF57Si5byV57y65bCR5b+F6ZyA55qE54mp5Lu2IElEIOaJh+WHuuWhiiIKKworIzogbWlkeC5jOjE0OQorbXNnaWQgIm11bHRpLXBhY2staW5kZXggbWlzc2luZyByZXF1aXJlZCBPSUQgbG9va3VwIGNodW5rIgorbXNnc3RyICLlpJrljIXntKLlvJXnvLrlsJHlv4XpnIDnmoTnianku7YgSUQg5p+l6Kmi5aGKIgorCisjOiBtaWR4LmM6MTUxCittc2dpZCAibXVsdGktcGFjay1pbmRleCBtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBvZmZzZXRzIGNodW5rIgorbXNnc3RyICLlpJrljIXntKLlvJXnvLrlsJHlv4XpnIDnmoTnianku7bkvY3np7vloYoiCisKKyM6IG1pZHguYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibXVsdGktcGFjay1pbmRleCBwYWNrIG5hbWVzIG91dCBvZiBvcmRlcjogJyVzJyBiZWZvcmUgJyVzJyIKK21zZ3N0ciAi5aSa5YyF57Si5byV5YyF5ZCN54Sh5bqP77yaJyVzJyDlnKggJyVzJyDkuYvliY0iCisKKyM6IG1pZHguYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2staW50LWlkOiAldSAoJXUgdG90YWwgcGFja3MpIgorbXNnc3RyICLpjK/nmoQgcGFjay1pbnQtaWTvvJolde+8iOWFseaciSAldSDlgIvljIXvvIkiCisKKyM6IG1pZHguYzoyNjAKK21zZ2lkICJtdWx0aS1wYWNrLWluZGV4IHN0b3JlcyBhIDY0LWJpdCBvZmZzZXQsIGJ1dCBvZmZfdCBpcyB0b28gc21hbGwiCittc2dzdHIgIuWkmuWMhee0ouW8leWEsuWtmOS4gOWAizY05L2N5L2N56e777yM5L2G5pivIG9mZl90IOWkquWwjyIKKworIzogbWlkeC5jOjI4OAorbXNnaWQgImVycm9yIHByZXBhcmluZyBwYWNrZmlsZSBmcm9tIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIuW+nuWkmuWMhee0ouW8lea6luWCmSBwYWNrZmlsZSDmmYLnmbznlJ/pjK/oqqQiCisKKyM6IG1pZHguYzo0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFkZCBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLmlrDlop4gcGFja2ZpbGUgJyVzJyDlpLHmlZciCisKKyM6IG1pZHguYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGFjay1pbmRleCAnJXMnIgorbXNnc3RyICLplovllZ/ljIXntKLlvJUgJyVzJyDlpLHmlZciCisKKyM6IG1pZHguYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvY2F0ZSBvYmplY3QgJWQgaW4gcGFja2ZpbGUiCittc2dzdHIgIuWcqCBwYWNrZmlsZSDkuK3lrprkvY3nianku7YgJWQg5aSx5pWXIgorCisjOiBtaWR4LmM6ODQyCisjfCBtc2dpZCAiZXJyb3IgcHJlcGFyaW5nIHBhY2tmaWxlIGZyb20gbXVsdGktcGFjay1pbmRleCIKK21zZ2lkICJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIuato+WcqOaWsOWiniBwYWNrZmlsZSDoh7PlpJrljIXntKLlvJUiCisKKyM6IG1pZHguYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCBzZWUgcGFjay1maWxlICVzIHRvIGRyb3AiCittc2dzdHIgIuaykuacieeci+WIsOimgeaNqOajhOeahOWMheaqlOahiCAlcyIKKworIzogbWlkeC5jOjk3MworI3wgbXNnaWQgIldyaXRlIGFuZCB2ZXJpZnkgbXVsdGktcGFjay1pbmRleGVzIgorbXNnaWQgIldyaXRpbmcgY2h1bmtzIHRvIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIuWvq+WFpeWNgOWhiuiHs+WkmuWMhee0ouW8lSIKKworIzogbWlkeC5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFyIG11bHRpLXBhY2staW5kZXggYXQgJXMiCittc2dzdHIgIua4heeQhuS9jeaWvCAlcyDnmoTlpJrljIXntKLlvJXlpLHmlZciCisKKyM6IG1pZHguYzoxMTA4Cittc2dpZCAiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiCittc2dzdHIgIuato+WcqOWwi+aJvuW8leeUqOeahCBwYWNrZmlsZSIKKworIzogbWlkeC5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9pZCBmYW5vdXQgb3V0IG9mIG9yZGVyOiBmYW5vdXRbJWRdID0gJTxQUkl4MzI+ID4gJTxQUkl4MzI+ID0gZmFub3V0WyVkXSIKK21zZ3N0ciAi54mp5Lu2IElEIOaJh+WHuueEoeW6j++8mmZhbm91dFslZF0gPSAlPFBSSXgzMj4gPiAlPFBSSXgzMj4gPSBmYW5vdXRbJWRdIgorCisjOiBtaWR4LmM6MTEyOAorI3wgbXNnaWQgIlZlcmlmeWluZyBPSUQgb3JkZXIgaW4gTUlEWCIKK21zZ2lkICJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIG11bHRpLXBhY2staW5kZXgiCittc2dzdHIgIuato+WcqOmpl+itieWkmuWMhee0ouW8leS4reeahOeJqeS7tiBJRCDpoIbluo8iCisKKyM6IG1pZHguYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9pZCBsb29rdXAgb3V0IG9mIG9yZGVyOiBvaWRbJWRdID0gJXMgPj0gJXMgPSBvaWRbJWRdIgorbXNnc3RyICLnianku7YgSUQg5p+l6Kmi54Sh5bqP77yab2lkWyVkXSA9ICVzID49ICVzID0gb2lkWyVkXSIKKworIzogbWlkeC5jOjExNTcKK21zZ2lkICJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiCittc2dzdHIgIumAj+mBjiBwYWNrZmlsZSDngrrnianku7bmjpLluo8iCisKKyM6IG1pZHguYzoxMTY0Cittc2dpZCAiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIgorbXNnc3RyICLmraPlnKjpqZforYnnianku7bkvY3np7siCisKKyM6IG1pZHguYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2sgZW50cnkgZm9yIG9pZFslZF0gPSAlcyIKK21zZ3N0ciAi54K6IG9pZFslZF0gPSAlcyDovInlhaXljIXmop3nm67lpLHmlZciCisKKyM6IG1pZHguYzoxMTg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIHBhY2staW5kZXggZm9yIHBhY2tmaWxlICVzIgorbXNnc3RyICLngrogcGFja2ZpbGUgJXMg6LyJ5YWl5YyF57Si5byV5aSx5pWXIgorCisjOiBtaWR4LmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmNvcnJlY3Qgb2JqZWN0IG9mZnNldCBmb3Igb2lkWyVkXSA9ICVzOiAlPFBSSXg2ND4gIT0gJTxQUkl4NjQ+IgorbXNnc3RyICJvaWRbJWRdID0gJXMg6Yyv6Kqk55qE54mp5Lu25L2N56e777yaJTxQUkl4NjQ+ICE9ICU8UFJJeDY0PiIKKworIzogbWlkeC5jOjEyMjAKKyN8IG1zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ2lkICJDb3VudGluZyByZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgIuato+WcqOioiOeul+W8leeUqOeJqeS7tiIKKworIzogbWlkeC5jOjEyMzAKKyN8IG1zZ2lkICJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIKK21zZ2lkICJGaW5kaW5nIGFuZCBkZWxldGluZyB1bnJlZmVyZW5jZWQgcGFja2ZpbGVzIgorbXNnc3RyICLmraPlnKjlsIvmib7kuKbliKrpmaTmspLmnInlj4PogIPnmoQgcGFja2ZpbGUiCisKKyM6IG1pZHguYzoxMzg4Cittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyIKK21zZ3N0ciAi5LiN6IO96ZaL5aeLIHBhY2stb2JqZWN0cyIKKworIzogbWlkeC5jOjE0MDcKK21zZ2lkICJjb3VsZCBub3QgZmluaXNoIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAi5LiN6IO957WQ5p2fIHBhY2stb2JqZWN0cyIKKworIzogbmFtZS1oYXNoLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbGF6eV9kaXIgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95bu656uLIGxhenlfZGlyIOWft+ihjOe3ku+8miVzIgorCisjOiBuYW1lLWhhc2guYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBsYXp5X25hbWUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95bu656uLIGxhenlfbmFtZSDln7fooYznt5LvvJolcyIKKworIzogbmFtZS1oYXNoLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxhenlfbmFtZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLkuI3og73liqDlhaUgbGFzeV9uYW1lIOWft+ihjOe3ku+8miVzIgorCisjOiBub3Rlcy1tZXJnZS5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzIG5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuIgorIlBsZWFzZSwgdXNlICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnIG9yICdnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcgdG8gIgorImNvbW1pdC9hYm9ydCB0aGUgcHJldmlvdXMgbWVyZ2UgYmVmb3JlIHlvdSBzdGFydCBhIG5ldyBub3RlcyBtZXJnZS4iCittc2dzdHIgIiIKKyLmgqjnmoTliY3kuIDmrKHlgpnoqLvlkIjkvbXlsJrmnKrntZDmnZ/vvIjlrZjlnKggJXPvvInjgIJcbiIKKyLlnKjplovlp4vkuIDlgIvmlrDnmoTlgpnoqLvlkIjkvbXkuYvliY3vvIzoq4vkvb/nlKggJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcg5oiW6ICFICdnaXQgIgorIm5vdGVzIG1lcmdlIC0tYWJvcnQnIOS+huaPkOS6pC/ntYLmraLliY3kuIDmrKHlkIjkvbXjgIIiCisKKyM6IG5vdGVzLW1lcmdlLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBub3RlcyBtZXJnZSAoJXMgZXhpc3RzKS4iCittc2dzdHIgIuaCqOWwmuacque1kOadn+WCmeiou+WQiOS9te+8iOWtmOWcqCAlc++8ieOAgiIKKworIzogbm90ZXMtdXRpbHMuYzo0NgorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAi5LiN6IO95o+Q5Lqk5pyq5Yid5aeL5YyWL+acquW8leeUqOeahOiou+ino+aouSIKKworIzogbm90ZXMtdXRpbHMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICLlo57nmoQgbm90ZXMucmV3cml0ZU1vZGUg5YC877yaJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIuaLkue1leWQkSAlc++8iOWcqCByZWZzL25vdGVzLyDkuYvlpJbvvInlr6vlhaXoqLvop6MiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YKKyMuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcworIy4gaXRzIHZhbHVlLgorIy4KKyM6IG5vdGVzLXV0aWxzLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi5aOe55qEICVzIOWAvO+8miclcyciCisKKyM6IG9iamVjdC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0IHR5cGUgXCIlc1wiIgorbXNnc3RyICLnhKHmlYjnmoTnianku7bpoZ7lnosgXCIlc1wiIgorCisjOiBvYmplY3QuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIGEgJXMsIG5vdCBhICVzIgorbXNnc3RyICLnianku7YgJXMg5piv5LiA5YCLICVz77yM5LiN5piv5LiA5YCLICVzIgorCisjOiBvYmplY3QuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGhhcyB1bmtub3duIHR5cGUgaWQgJWQiCittc2dzdHIgIueJqeS7tiAlcyDmnInmnKrnn6XnmoTpoZ7lnosgaWQgJWQiCisKKyM6IG9iamVjdC5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q54mp5Lu277yaJXMiCisKKyM6IG9iamVjdC5jOjI2NiBvYmplY3QuYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGFzaCBtaXNtYXRjaCAlcyIKK21zZ3N0ciAi6Zuc5rmK5YC86IiHICVzIOS4jeespuWQiCIKKworIzogcGFja2ZpbGUuYzo2NDEKK21zZ2lkICJvZmZzZXQgYmVmb3JlIGVuZCBvZiBwYWNrZmlsZSAoYnJva2VuIC5pZHg/KSIKK21zZ3N0ciAi5L2N56e76YeP5ZyoIHBhY2tmaWxlIOe1kOadn+S5i+WJje+8iOaQjeWjnueahCAuaWR477yf77yJIgorCisjOiBwYWNrZmlsZS5jOjE4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJlZm9yZSBzdGFydCBvZiBwYWNrIGluZGV4IGZvciAlcyAoY29ycnVwdCBpbmRleD8pIgorbXNnc3RyICLkvY3np7vph4/lnKggJXMg55qE5YyF57Si5byV6ZaL5aeL5LmL5YmN77yI5pCN5aOe55qE57Si5byV77yf77yJIgorCisjOiBwYWNrZmlsZS5jOjE4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2Zmc2V0IGJleW9uZCBlbmQgb2YgcGFjayBpbmRleCBmb3IgJXMgKHRydW5jYXRlZCBpbmRleD8pIgorbXNnc3RyICLkvY3np7vph4/otorpgY7kuoYgJXMg55qE5YyF57Si5byV55qE57WQ5bC+77yI6KKr5oiq5pa355qE57Si5byV77yf77yJIgorCisjOiBwYXJzZS1vcHRpb25zLmM6MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiJXMg6ZyA6KaB5LiA5YCL5YC8IgorCisjOiBwYXJzZS1vcHRpb25zLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJXMiCittc2dzdHIgIiVzIOiIhyAlcyDkuI3nm7jlrrkiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyA6IGluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIgorbXNnc3RyICIlc++8muWSjOWFtuWug+eahOS4jeebuOWuuSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjkyIHBhcnNlLW9wdGlvbnMuYzo5NiBwYXJzZS1vcHRpb25zLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRha2VzIG5vIHZhbHVlIgorbXNnc3RyICIlcyDkuI3lj5blgLwiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpc24ndCBhdmFpbGFibGUiCittc2dzdHIgIiVzIOS4jeWPr+eUqCIKKworIzogcGFyc2Utb3B0aW9ucy5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleHBlY3RzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2l0aCBhbiBvcHRpb25hbCBrL20vZyBzdWZmaXgiCittc2dzdHIgIiVzIOacn+acm+S4gOWAi+mdnuiyoOaVtOaVuOWSjOS4gOWAi+WPr+mBuOeahCBrL20vZyDlvozntrQiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKGNvdWxkIGJlIC0tJXMlcyBvciAtLSVzJXMpIgorbXNnc3RyICLmnInmrafnvqnnmoTpgbjpoIXvvJolc++8iOWPr+S7peaYryAtLSVzJXMg5oiWIC0tJXMlc++8iSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjQyMyBwYXJzZS1vcHRpb25zLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIKK21zZ3N0ciAi5L2g55qE5oSP5oCd5pivIGAtLSVzYO+8iOacieWFqeWAi+efree3mu+8n++8iSIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbiBgJXMnIgorbXNnc3RyICLmnKrnn6XpgbjpoIUgYCVzJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHN3aXRjaCBgJWMnIgorbXNnc3RyICLmnKrnn6Xplovpl5wgYCVjJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG5vbi1hc2NpaSBvcHRpb24gaW4gc3RyaW5nOiBgJXMnIgorbXNnc3RyICLlrZfkuLLkuK3mnKrnn6XnmoTpnZ4gYXNjaWkg5a2X5YWD6YG46aCF77yaYCVzJyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjg4OAorbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAi55So5rOV77yaJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbi4KKyMuCisjOiBwYXJzZS1vcHRpb25zLmM6OTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICDmiJbvvJolcyIKKworIyAg6K2v6ICF77ya54K65L+d6K2J5Zyo6Ly45Ye65Lit5bCN6b2K77yM5rOo5oSP6Kq/5pW05Y+l5Lit56m65qC877yBCisjOiBwYXJzZS1vcHRpb25zLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6OTU1Cittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLeaVuOWtlyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJhbGlhcyBvZiAtLSVzIgorbXNnc3RyICItLSVzIOeahOWIpeWQjSIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjIwIHBhcnNlLW9wdGlvbnMtY2IuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLpgbjpoIUgYCVzJyDmnJ/mnJvkuIDlgIvmlbjlrZflgLwiCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgZXhwaXJhdGlvbiBkYXRlICclcyciCittc2dzdHIgIuagvOW8j+mMr+iqpOeahOWIsOacn+aZgumWk++8miclcyciCisKKyM6IHBhcnNlLW9wdGlvbnMtY2IuYzo1NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBleHBlY3RzIFwiYWx3YXlzXCIsIFwiYXV0b1wiLCBvciBcIm5ldmVyXCIiCittc2dzdHIgIumBuOmghSBgJXMnIOacn+acmyBcImFsd2F5c1wi44CBXCJhdXRvXCIg5oiWIFwibmV2ZXJcIiIKKworIzogcGFyc2Utb3B0aW9ucy1jYi5jOjEzMCBwYXJzZS1vcHRpb25zLWNiLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICLmoLzlvI/pjK/oqqTnmoTnianku7blkI0gJyVzJyIKKworIzogcGF0aC5jOjkxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAi5LiN6IO96Kit5a6aICVzIOeCuue1hOWPr+WvqyIKKworIzogcGF0aHNwZWMuYzoxMzAKK21zZ2lkICJFc2NhcGUgY2hhcmFjdGVyICdcXCcgbm90IGFsbG93ZWQgYXMgbGFzdCBjaGFyYWN0ZXIgaW4gYXR0ciB2YWx1ZSIKK21zZ3N0ciAi6Lez6ISr5a2X5YWDICdcXCcg5LiN6IO95L2c54K65bGs5oCn5YC855qE5pyA5b6M5LiA5YCL5a2X5YWDIgorCisjOiBwYXRoc3BlYy5jOjE0OAorbXNnaWQgIk9ubHkgb25lICdhdHRyOicgc3BlY2lmaWNhdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAi5Y+q5YWB6Kix5LiA5YCLICdhdHRyOicg6KaP5qC844CCIgorCisjOiBwYXRoc3BlYy5jOjE1MQorbXNnaWQgImF0dHIgc3BlYyBtdXN0IG5vdCBiZSBlbXB0eSIKK21zZ3N0ciAi5bGs5oCn6KaP5qC85LiN6IO954K656m6IgorCisjOiBwYXRoc3BlYy5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGF0dHJpYnV0ZSBuYW1lICVzIgorbXNnc3RyICLnhKHmlYjnmoTlsazmgKflkI0gJXMiCisKKyM6IHBhdGhzcGVjLmM6MjU5Cittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi5YWo5Z+f55qEICdnbG9iJyDlkowgJ25vZ2xvYicg6Lev5b6R6KaP5qC86Kit5a6a5LiN55u45a65IgorCisjOiBwYXRoc3BlYy5jOjI2NgorbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIuWFqOWfn+eahCAnbGl0ZXJhbCcg6Lev5b6R6KaP5qC86Kit5a6a5ZKM5YW25a6D55qE5YWo5Z+f6Lev5b6R6KaP5qC86Kit5a6a5LiN55u45a65IgorCisjOiBwYXRoc3BlYy5jOjMwNgorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAi6Lev5b6R6KaP5qC85YyF5ZCr54Sh5pWI55qE56We5aWH5YmN57a0IgorCisjOiBwYXRoc3BlYy5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICLlnKjot6/lvpHopo/moLwgJyUzJHMnIOS4reeEoeaViOeahOelnuWlh+WJjee2tCAnJTIkLioxJHMnIgorCisjOiBwYXRoc3BlYy5jOjMzMgorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIui3r+W+keimj+agvCAnJXMnIOeahOelnuWlh+WJjee2tOe1kOWwvuWwkeS6huS4gOWAiyAnKSciCisKKyM6IHBhdGhzcGVjLmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICLot6/lvpHopo/moLwgJyUyJHMnIOS4reWMheWQq+acquWvpuePvueahOelnuWlh+WJjee2tCAnJTEkYyciCisKKyM6IHBhdGhzcGVjLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlc++8midsaXRlcmFsJyDlkowgJ2dsb2InIOS4jeebuOWuuSIKKworIzogcGF0aHNwZWMuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIlc++8miclcycg5Zyo54mI5pys5bqr5LmL5aSWIgorCisjOiBwYXRoc3BlYy5jOjUxNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIChtbmVtb25pYzogJyVjJykiCittc2dzdHIgIiclcyfvvIjliqnoqJjnrKbvvJonJWMn77yJIgorCisjOiBwYXRoc3BlYy5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIlc++8mui3r+W+keimj+agvOelnuWlh+WJjee2tOS4jeiiq+atpOaMh+S7pOaUr+aPtO+8miVzIgorCisjOiBwYXRoc3BlYy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIui3r+W+keimj+agvCAnJXMnIOS9jeaWvOespuiZn+mAo+e1kOS4rSIKKworIzogcGF0aHNwZWMuYzo2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibGluZSBpcyBiYWRseSBxdW90ZWQ6ICVzIgorbXNnc3RyICLmn5DooYzkuI3mh4noqbLooqvmi6zomZ/mi6zkvY/vvJolcyIKKworIzogcGt0LWxpbmUuYzo5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmbHVzaCBwYWNrZXQiCittc2dzdHIgIueEoeazleWvqyBmbHVzaCDljIUiCisKKyM6IHBrdC1saW5lLmM6OTkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZGVsaW0gcGFja2V0IgorbXNnc3RyICLnhKHms5Xlr6sgZGVsaW0g5YyFIgorCisjOiBwa3QtbGluZS5jOjEwNgorbXNnaWQgImZsdXNoIHBhY2tldCB3cml0ZSBmYWlsZWQiCittc2dzdHIgImZsdXNoIOWMheWvq+mMr+iqpCIKKworIzogcGt0LWxpbmUuYzoxNDYgcGt0LWxpbmUuYzoyMzIKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiCittc2dzdHIgIuWNlOWumumMr+iqpO+8muS4jeWPr+iDveeahOmVt+ihjCIKKworIzogcGt0LWxpbmUuYzoxNjIgcGt0LWxpbmUuYzoxNjQKK21zZ2lkICJwYWNrZXQgd3JpdGUgd2l0aCBmb3JtYXQgZmFpbGVkIgorbXNnc3RyICLmoLzlvI/ljJbljIXlr6vlhaXpjK/oqqQiCisKKyM6IHBrdC1saW5lLmM6MTk2Cittc2dpZCAicGFja2V0IHdyaXRlIGZhaWxlZCAtIGRhdGEgZXhjZWVkcyBtYXggcGFja2V0IHNpemUiCittc2dzdHIgIuWvq+WwgeWMheWkseaVl++8muizh+aWmei2hemBjuS6huWMheeahOacgOWkp+mVt+W6piIKKworIzogcGt0LWxpbmUuYzoyMDMgcGt0LWxpbmUuYzoyMTAKK21zZ2lkICJwYWNrZXQgd3JpdGUgZmFpbGVkIgorbXNnc3RyICLlsIHljIXlr6vlhaXlpLHmlZciCisKKyM6IHBrdC1saW5lLmM6Mjk1Cittc2dpZCAicmVhZCBlcnJvciIKK21zZ3N0ciAi6K6A5Y+W6Yyv6KqkIgorCisjOiBwa3QtbGluZS5jOjMwMworbXNnaWQgInRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5IgorbXNnc3RyICLpgaDnq6/mhI/lpJbmjpvmlrfkuoYiCisKKyM6IHBrdC1saW5lLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIgorbXNnc3RyICLljZTlrprpjK/oqqTvvJrpjK/oqqTnmoTooYzplbfluqblrZfkuLLvvJolLjRzIgorCisjOiBwa3QtbGluZS5jOjM0MSBwa3QtbGluZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwcm90b2NvbCBlcnJvcjogYmFkIGxpbmUgbGVuZ3RoICVkIgorbXNnc3RyICLljZTlrprpjK/oqqTvvJrpjK/oqqTnmoTooYzplbfluqYgJWQiCisKKyM6IHBrdC1saW5lLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgIumBoOerr+mMr+iqpO+8miVzIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTE5Cittc2dpZCAiUmVmcmVzaGluZyBpbmRleCIKK21zZ3N0ciAi5q2j5Zyo6YeN5paw5pW055CG57Si5byVIgorCisjOiBwcmVsb2FkLWluZGV4LmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIgorbXNnc3RyICLnhKHms5Xlu7rnq4vln7fooYznt5IgbHN0YXTvvJolcyIKKworIzogcHJldHR5LmM6OTgxCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIC0tcHJldHR5IOagvOW8jyIKKworIzogcHJvbWlzb3ItcmVtb3RlLmM6MjMKK21zZ2lkICJSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgIumBoOerr+acquioreWumiBVUkwiCisKKyM6IHByb21pc29yLXJlbW90ZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21pc29yIHJlbW90ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgInByb21pc29yIOmBoOerr+WQjeeoseS4jeiDveS7pSAnLycg6ZaL5aeL77yaJXMiCisKKyM6IHJhbmdlLWRpZmYuYzo3NQorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBgbG9nYCIKK21zZ3N0ciAi5LiN6IO95ZWf5YuVIGBsb2dgIgorCisjOiByYW5nZS1kaWZmLmM6NzcKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiCittc2dzdHIgIuS4jeiDveiugOWPliBgbG9nYCDnmoTovLjlh7oiCisKKyM6IHJhbmdlLWRpZmYuYzo5NiBzZXF1ZW5jZXIuYzo1MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5o+Q5LqkICclcyciCisKKyM6IHJhbmdlLWRpZmYuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGdpdCBoZWFkZXIgJyUuKnMnIgorbXNnc3RyICLnhKHms5Xop6PmnpAgZ2l0IOmgrSAnJS4qcyciCisKKyM6IHJhbmdlLWRpZmYuYzoyODUKK21zZ2lkICJmYWlsZWQgdG8gZ2VuZXJhdGUgZGlmZiIKK21zZ3N0ciAi55Sf5oiQIGRpZmYg5aSx5pWXIgorCisjOiByYW5nZS1kaWZmLmM6NTE4IHJhbmdlLWRpZmYuYzo1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGxvZyBmb3IgJyVzJyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QICclcycg55qE5pel6KqMIgorCisjOiByZWFkLWNhY2hlLmM6NjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIgorbXNnc3RyICLlsIfkuI3mnIPmlrDlop7mqpTmoYjliKXlkI0gJyVzJ++8iCclcycg5bey57aT5a2Y5Zyo5pa857Si5byV5Lit77yJIgorCisjOiByZWFkLWNhY2hlLmM6Njk2Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhbiBlbXB0eSBibG9iIGluIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIuS4jeiDveWcqOeJqeS7tuizh+aWmeW6q+S4reW7uueri+epuueahOizh+aWmeeJqeS7tiIKKworIzogcmVhZC1jYWNoZS5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuIG9ubHkgYWRkIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzIG9yIGdpdC1kaXJlY3RvcmllcyIKK21zZ3N0ciAiJXPvvJrlj6rog73mlrDlop7kuIDoiKzmqpTmoYjjgIHnrKbomZ/pgKPntZDmiJYgZ2l0IOebrumMhCIKKworIzogcmVhZC1jYWNoZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIiclcycg5rKS5pyJ57C95Ye65LiA5YCL5o+Q5LqkIgorCisjOiByZWFkLWNhY2hlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBpbmRleCBmaWxlICclcyciCittc2dzdHIgIueEoeazlee0ouW8leaqlOahiCAnJXMnIgorCisjOiByZWFkLWNhY2hlLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgJyVzJyB0byBpbmRleCIKK21zZ3N0ciAi54Sh5rOV5Zyo57Si5byV5Lit5paw5aKeICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5bCNICVzIOWft+ihjCBzdGF0IgorCisjOiByZWFkLWNhY2hlLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFwcGVhcnMgYXMgYm90aCBhIGZpbGUgYW5kIGFzIGEgZGlyZWN0b3J5IgorbXNnc3RyICInJXMnIOeci+i1t+S+huaXouaYr+aqlOahiOWPiOaYr+ebrumMhCIKKworIzogcmVhZC1jYWNoZS5jOjE1MzEKK21zZ2lkICJSZWZyZXNoIGluZGV4IgorbXNnc3RyICLph43mlrDmlbTnkIbntKLlvJUiCisKKyM6IHJlYWQtY2FjaGUuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyLoqK3lrprkuoYgaW5kZXgudmVyc2lvbu+8jOS9huaYr+WPluWAvOeEoeaViOOAglxuIgorIuS9v+eUqOeJiOacrCAlaSIKKworIzogcmVhZC1jYWNoZS5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyLoqK3lrprkuoYgR0lUX0lOREVYX1ZFUlNJT07vvIzkvYbmmK/lj5blgLznhKHmlYjjgIJcbiIKKyLkvb/nlKjniYjmnKwgJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBzaWduYXR1cmUgMHglMDh4IgorbXNnc3RyICLlo57nmoTnsL3lkI0gMHglMDh4IgorCisjOiByZWFkLWNhY2hlLmM6MTcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAlZCIKK21zZ3N0ciAi5aOe55qE57Si5byV54mI5pysICVkIgorCisjOiByZWFkLWNhY2hlLmM6MTcyNAorbXNnaWQgImJhZCBpbmRleCBmaWxlIHNoYTEgc2lnbmF0dXJlIgorbXNnc3RyICLlo57nmoTntKLlvJXmqpTmoYggc2hhMSDnsL3lkI0iCisKKyM6IHJlYWQtY2FjaGUuYzoxNzU0CisjLCBjLWZvcm1hdAorbXNnaWQgImluZGV4IHVzZXMgJS40cyBleHRlbnNpb24sIHdoaWNoIHdlIGRvIG5vdCB1bmRlcnN0YW5kIgorbXNnc3RyICLntKLlvJXkvb/nlKjkuI3ooqvmlK/mj7TnmoQgJS40cyDmk7TlsZUiCisKKyMKKyM6IHJlYWQtY2FjaGUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uIgorbXNnc3RyICLlv73nlaUgJS40cyDmk7TlsZUiCisKKyM6IHJlYWQtY2FjaGUuYzoxNzkzCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW5kZXggZW50cnkgZm9ybWF0IDB4JTA4eCIKK21zZ3N0ciAi5pyq55+l55qE57Si5byV5qKd55uu5qC85byPIDB4JTA4eCIKKworIzogcmVhZC1jYWNoZS5jOjE4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG5hbWUgZmllbGQgaW4gdGhlIGluZGV4LCBuZWFyIHBhdGggJyVzJyIKK21zZ3N0ciAi57Si5byV5Lit6Z2g6L+R6Lev5b6RICclcycg5pyJ6Yyv6Kqk55qE5ZCN56ix5qyE5L2NIgorCisjOiByZWFkLWNhY2hlLmM6MTg2NgorbXNnaWQgInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4IgorbXNnc3RyICLntKLlvJXkuK3mnInmnKrmjpLluo/nmoTmmqvlrZjmop3nm64iCisKKyM6IHJlYWQtY2FjaGUuYzoxODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciCittc2dzdHIgIuWQiOS9teaqlOahiCAnJXMnIOacieWkmuWAi+aaq+WtmOaineebriIKKworIzogcmVhZC1jYWNoZS5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5vcmRlcmVkIHN0YWdlIGVudHJpZXMgZm9yICclcyciCittc2dzdHIgIiclcycg55qE5pyq5o6S5bqP5pqr5a2Y5qKd55uuIgorCisjOiByZWFkLWNhY2hlLmM6MTk3OCByZWFkLWNhY2hlLmM6MjI2NiByZXJlcmUuYzo1NjUgcmVyZXJlLmM6NTk5IHJlcmVyZS5jOjExMTEKKyM6IGJ1aWx0aW4vYWRkLmM6NDk5IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc4IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NTQgYnVpbHRpbi9jbGVhbi5jOjk2NyBidWlsdGluL2NvbW1pdC5jOjM2NworIzogYnVpbHRpbi9kaWZmLXRyZWUuYzoxMjAgYnVpbHRpbi9ncmVwLmM6NDk5IGJ1aWx0aW4vbXYuYzoxNDUKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNDYgYnVpbHRpbi9ybS5jOjI3MSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MzMyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICLntKLlvJXmqpTmoYjmkI3lo54iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9jYWNoZV9lbnRyaWVzIHRocmVhZDogJXMiCittc2dzdHIgIueEoeazleW7uueriyBsb2FkX2NhY2hlX2VudHJpZXMg5Z+36KGM57eS77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfY2FjaGVfZW50cmllcyB0aHJlYWQ6ICVzIgorbXNnc3RyICLnhKHms5XliqDlhaUgbG9hZF9jYWNoZV9lbnRyaWVzIOWft+ihjOe3ku+8miVzIgorCisjOiByZWFkLWNhY2hlLmM6MjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW5kZXggZmlsZSBvcGVuIGZhaWxlZCIKK21zZ3N0ciAiJXPvvJrplovllZ/ntKLlvJXmqpTmoYjlpLHmlZciCisKKyM6IHJlYWQtY2FjaGUuYzoyMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3Qgc3RhdCB0aGUgb3BlbiBpbmRleCIKK21zZ3N0ciAiJXPvvJrkuI3og73lsI3plovllZ/nmoTntKLlvJXln7fooYwgc3RhdCDli5XkvZwiCisKKyM6IHJlYWQtY2FjaGUuYzoyMTczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIKK21zZ3N0ciAiJXPvvJrntKLlvJXmqpTmoYjmr5TpoJDmnJ/nmoTlsI8iCisKKyM6IHJlYWQtY2FjaGUuYzoyMTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB1bmFibGUgdG8gbWFwIGluZGV4IGZpbGUiCittc2dzdHIgIiVz77ya54Sh5rOV5bCN57Si5byV5qqU5qGI5Z+36KGMIG1hcCDli5XkvZwiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgbG9hZF9pbmRleF9leHRlbnNpb25zIHRocmVhZDogJXMiCittc2dzdHIgIueEoeazleW7uueriyBsb2FkX2luZGV4X2V4dGVuc2lvbnMg5Z+36KGM57eS77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzoyMjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBqb2luIGxvYWRfaW5kZXhfZXh0ZW5zaW9ucyB0aHJlYWQ6ICVzIgorbXNnc3RyICLnhKHms5XliqDlhaUgbG9hZF9pbmRleF9leHRlbnNpb25zIOWft+ihjOe3ku+8miVzIgorCisjOiByZWFkLWNhY2hlLmM6MjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZnJlc2hlbiBzaGFyZWQgaW5kZXggJyVzJyIKK21zZ3N0ciAi54Sh5rOV6YeN5paw5pW055CG5YWx5Lqr57Si5byVICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzoyMzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiCittc2dzdHIgIuaQjeWjnueahOe0ouW8le+8jOacn+acm+WcqCAlMiRzIOS4reeahCAlMSRz77yM5b6X5YiwICUzJHMiCisKKyM6IHJlYWQtY2FjaGUuYzozMDIxIHN0cmJ1Zi5jOjExNDUgd3JhcHBlci5jOjYyMiBidWlsdGluL21lcmdlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAi5LiN6IO96Zec6ZaJICclcyciCisKKyM6IHJlYWQtY2FjaGUuYzozMTI0IHNlcXVlbmNlci5jOjI0Mjkgc2VxdWVuY2VyLmM6NDA2OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLkuI3og73lsI0gJyVzJyDlkbzlj6sgc3RhdCIKKworIzogcmVhZC1jYWNoZS5jOjMxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gZ2l0IGRpcjogJXMiCittc2dzdHIgIuS4jeiDvemWi+WVnyBnaXQg55uu6YyE77yaJXMiCisKKyM6IHJlYWQtY2FjaGUuYzozMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bmxpbms6ICVzIgorbXNnc3RyICLnhKHms5XliKrpmaTvvJolcyIKKworIzogcmVhZC1jYWNoZS5jOjMxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpeCBwZXJtaXNzaW9uIGJpdHMgb24gJyVzJyIKK21zZ3N0ciAi5LiN6IO95L+u5b6pICclcycg55qE5qyK6ZmQ5L2NIgorCisjOiByZWFkLWNhY2hlLmM6MzMyMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IGRyb3AgdG8gc3RhZ2UgIzAiCittc2dzdHIgIiVz77ya5LiN6IO96JC95Yiw5pqr5a2Y5Y2AICMwIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5yZWNvZ25pemVkIHNldHRpbmcgJXMgZm9yIG9wdGlvbiByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4gSWdub3JpbmcuIgorbXNnc3RyICLpgbjpoIUgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sg55qE5YC8ICVzIOeEoeazleitmOWIpeOAguW3suW/veeVpeOAgiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MzUKK21zZ2lkICIiCisiXG4iCisiQ29tbWFuZHM6XG4iCisicCwgcGljayA8Y29tbWl0PiA9IHVzZSBjb21taXRcbiIKKyJyLCByZXdvcmQgPGNvbW1pdD4gPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2VcbiIKKyJlLCBlZGl0IDxjb21taXQ+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+ihjOOAglxuIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzo1NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWJhc2UgJXMgb250byAlcyAoJWQgY29tbWFuZCkiCittc2dpZF9wbHVyYWwgIlJlYmFzZSAlcyBvbnRvICVzICglZCBjb21tYW5kcykiCittc2dzdHJbMF0gIumHjeWumuWfuuW6lSAlcyDliLAgJXPvvIglZCDlgIvmj5DkuqTvvIkiCittc2dzdHJbMV0gIumHjeWumuWfuuW6lSAlcyDliLAgJXPvvIglZCDlgIvmj5DkuqTvvIkiCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMjgKK21zZ2lkICIiCisiXG4iCisiRG8gbm90IHJlbW92ZSBhbnkgbGluZS4gVXNlICdkcm9wJyBleHBsaWNpdGx5IHRvIHJlbW92ZSBhIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuS4jeimgeWIqumZpOS7u+aEj+S4gOihjOOAguS9v+eUqCAnZHJvcCcg6aGv5byP5Zyw5Yiq6Zmk5LiA5YCL5o+Q5Lqk44CCXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjY4IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoyMzIKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuXG4iCittc2dzdHIgIiIKKyJcbiIKKyLlpoLmnpzmgqjlnKjpgJnoo6HliKrpmaTkuIDooYzvvIzlsI3mh4nnmoTmj5DkuqTlsIfmnIPpgbrlpLHjgIJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzQgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjg3MQorbXNnaWQgIiIKKyJcbiIKKyJZb3UgYXJlIGVkaXRpbmcgdGhlIHRvZG8gZmlsZSBvZiBhbiBvbmdvaW5nIGludGVyYWN0aXZlIHJlYmFzZS5cbiIKKyJUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIuaCqOato+WcqOS/ruaUuemAsuihjOS4reeahOS6kuWLleW8j+mHjeWumuWfuuW6leW+hei+puWIl+ihqOOAguiLpeimgeWcqOe3qOi8r+e1kOadn+W+jOe5vOe6jOmHjeWumuWfuuW6le+8jFxuIgorIuiri+Wft+ihjO+8mlxuIgorIiAgICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6NzkgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjk0OAorbXNnaWQgIiIKKyJcbiIKKyJIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi54S26ICM77yM5aaC5p6c5oKo5Yiq6Zmk5YWo6YOo5YWn5a6577yM6YeN5a6a5Z+65bqV5YuV5L2c5bCH5pyD57WC5q2i44CCXG4iCisiXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjg1IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NTUKK21zZ2lkICJOb3RlIHRoYXQgZW1wdHkgY29tbWl0cyBhcmUgY29tbWVudGVkIG91dCIKK21zZ3N0ciAi5rOo5oSP56m65o+Q5Lqk5bey6KKr5YKZ6Ki75o6JIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxMDUgcmVyZXJlLmM6NDg1IHJlcmVyZS5jOjY5MiBzZXF1ZW5jZXIuYzozNTM2CisjOiBzZXF1ZW5jZXIuYzozNTYyIHNlcXVlbmNlci5jOjUyNjMgYnVpbHRpbi9mc2NrLmM6MzQ2IGJ1aWx0aW4vcmViYXNlLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICLkuI3og73lr6vlhaUgJyVzJyIKKworIzogcmViYXNlLWludGVyYWN0aXZlLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJy4iCittc2dzdHIgIuS4jeiDveikh+ijvSAnJXMnIOiHsyAnJXMn44CCIgorCisjOiByZWJhc2UtaW50ZXJhY3RpdmUuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorIkRyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOlxuIgorbXNnc3RyICIiCisi6K2m5ZGK77ya5LiA5Lqb5o+Q5Lqk5Y+v6IO96KKr5oSP5aSW5o2o5qOE44CCXG4iCisi5o2o5qOE55qE5o+Q5Lqk77yI5b6e5paw5Yiw6IiK77yJ77yaXG4iCisKKyM6IHJlYmFzZS1pbnRlcmFjdGl2ZS5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG4iCisiXG4iCisiVXNlICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyB0byBjaGFuZ2UgdGhlIGxldmVsIG9mICIKKyJ3YXJuaW5ncy5cbiIKKyJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuXG4iCisiXG4iCittc2dzdHIgIiIKKyLngrrpgb/lhY3pgJnmop3oqIrmga/vvIzkvb/nlKggXCJkcm9wXCIg5oyH5Luk6aGv5byP5Zyw5Yiq6Zmk5LiA5YCL5o+Q5Lqk44CCXG4iCisiXG4iCisi5L2/55SoICdnaXQgY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrJyDkvobkv67mlLnorablkYrntJrliKXjgIJcbiIKKyLlj6/pgbjlgLzmnInvvJppZ25vcmXjgIF3YXJu44CBZXJyb3LjgIJcbiIKKyJcbiIKKworIzogcmVmcy5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIG9iamVjdCEiCittc2dzdHIgIiVzIOaykuacieaMh+WQkeS4gOWAi+acieaViOeahOeJqeS7tu+8gSIKKworIzogcmVmcy5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMiCittc2dzdHIgIuW/veeVpeaHuOepuuespuiZn+W8leeUqCAlcyIKKworIzogcmVmcy5jOjY2OSByZWYtZmlsdGVyLmM6MjA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBicm9rZW4gcmVmICVzIgorbXNnc3RyICLlv73nlaXmkI3lo57nmoTlvJXnlKggJXMiCisKKyM6IHJlZnMuYzo4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIueEoeazleeCuuWvq+WFpemWi+WVnyAnJXMn77yaJXMiCisKKyM6IHJlZnMuYzo4MTQgcmVmcy5jOjg2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCByZWYgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W5byV55SoICclcyciCisKKyM6IHJlZnMuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIuW8leeUqCAnJXMnIOW3sue2k+WtmOWcqCIKKworIzogcmVmcy5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG9iamVjdCBJRCB3aGVuIHdyaXRpbmcgJyVzJyIKK21zZ3N0ciAi5a+r5YWlICclcycg5pmC5oSP5aSW55qE54mp5Lu2IElEIgorCisjOiByZWZzLmM6ODMzIHNlcXVlbmNlci5jOjQwNSBzZXF1ZW5jZXIuYzoyNzkzIHNlcXVlbmNlci5jOjI5OTcKKyM6IHNlcXVlbmNlci5jOjMwMTEgc2VxdWVuY2VyLmM6MzI2OSBzZXF1ZW5jZXIuYzo1MTc5IHN0cmJ1Zi5jOjExNDIKKyM6IHdyYXBwZXIuYzo2MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIuS4jeiDveWvq+WFpSAnJXMnIgorCisjOiByZWZzLmM6ODYwIHN0cmJ1Zi5jOjExNDAgd3JhcHBlci5jOjE4OCB3cmFwcGVyLmM6MzU4IGJ1aWx0aW4vYW0uYzo3MTQKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICLnhKHms5XplovllZ8gJyVzJyDpgLLooYzlr6vlhaUiCisKKyM6IHJlZnMuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBvYmplY3QgSUQgd2hlbiBkZWxldGluZyAnJXMnIgorbXNnc3RyICLliKrpmaQgJyVzJyDmmYLmhI/lpJbnmoTnianku7YgSUQiCisKKyM6IHJlZnMuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZvciByZWYgJXMgaGFzIGdhcCBhZnRlciAlcyIKK21zZ3N0ciAi5byV55SoICVzIOeahOaXpeiqjOWcqCAlcyDkuYvlvozmnInnvLrlj6MiCisKKyM6IHJlZnMuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgcmVmICVzIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAlcyIKK21zZ3N0ciAi5byV55SoICVzIOeahOaXpeiqjOaEj+Wklue1guatouaWvCAlcyAiCisKKyM6IHJlZnMuYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmb3IgJXMgaXMgZW1wdHkiCittc2dzdHIgIiVzIOeahOaXpeiqjOeCuuepuiIKKworIzogcmVmcy5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lICclcyciCittc2dzdHIgIuaLkue1leabtOaWsOaciemMr+iqpOWQjeeosSAnJXMnIOeahOW8leeUqCIKKworIzogcmVmcy5jOjEyMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBkYXRlX3JlZiBmYWlsZWQgZm9yIHJlZiAnJXMnOiAlcyIKK21zZ3N0ciAi5bCN5byV55SoICclcycg5Z+36KGMIHVwZGF0ZV9yZWYg5aSx5pWX77yaJXMiCisKKyM6IHJlZnMuYzoyMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnJXMnIG5vdCBhbGxvd2VkIgorbXNnc3RyICLkuI3lhYHoqLHlsI3lvJXnlKggJyVzJyDlpJrmrKHmm7TmlrAiCisKKyM6IHJlZnMuYzoyMDU1Cittc2dpZCAicmVmIHVwZGF0ZXMgZm9yYmlkZGVuIGluc2lkZSBxdWFyYW50aW5lIGVudmlyb25tZW50IgorbXNnc3RyICLlnKjpmpTpm6LnkrDlooPkuK3npoHmraLmm7TmlrDlvJXnlKgiCisKKyM6IHJlZnMuYzoyMTUxIHJlZnMuYzoyMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgIiclcycg5bey5a2Y5Zyo77yM54Sh5rOV5bu656uLICclcyciCisKKyM6IHJlZnMuYzoyMTU3IHJlZnMuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIKK21zZ3N0ciAi54Sh5rOV5ZCM5pmC6JmV55CGICclcycg5ZKMICclcyciCisKKyM6IHJlZnMvZmlsZXMtYmFja2VuZC5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgIueEoeazleWIqumZpOW8leeUqCAlcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI0OCByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU0MQorIzogcmVmcy9wYWNrZWQtYmFja2VuZC5jOjE1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICLnhKHms5XliKrpmaTlvJXnlKggJXPvvJolcyIKKworIzogcmVmcy9maWxlcy1iYWNrZW5kLmM6MTI1MSByZWZzL3BhY2tlZC1iYWNrZW5kLmM6MTU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICLnhKHms5XliKrpmaTlvJXnlKjvvJolcyIKKworIzogcmVmc3BlYy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZnNwZWMgJyVzJyIKK21zZ3N0ciAi54Sh5pWI55qE5byV55So6KGo6YGU5byP77yaJyVzJyIKKworIzogcmVmLWZpbHRlci5jOjQyIHd0LXN0YXR1cy5jOjE5MzgKK21zZ2lkICJnb25lIgorbXNnc3RyICLpgbrlpLEiCisKKyM6IHJlZi1maWx0ZXIuYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCIKK21zZ3N0ciAi6aCY5YWIICVkIgorCisjOiByZWYtZmlsdGVyLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmVoaW5kICVkIgorbXNnc3RyICLokL3lvowgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJhaGVhZCAlZCwgYmVoaW5kICVkIgorbXNnc3RyICLpoJjlhYggJWTvvIzokL3lvowgJWQiCisKKyM6IHJlZi1maWx0ZXIuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhwZWN0ZWQgZm9ybWF0OiAlJShjb2xvcjo8Y29sb3I+KSIKK21zZ3N0ciAi5pyf5pyb55qE5qC85byP77yaJSUoY29sb3I6POmhj+iJsj4pIgorCisjOiByZWYtZmlsdGVyLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBjb2xvcjogJSUoY29sb3I6JXMpIgorbXNnc3RyICLmnKrog73orZjliKXnmoTpoY/oibLvvJolJShjb2xvcjolcykiCisKKyM6IHJlZi1maWx0ZXIuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWdlciB2YWx1ZSBleHBlY3RlZCByZWZuYW1lOmxzdHJpcD0lcyIKK21zZ3N0ciAi5pyf5pyb5pW05pW45YC8IHJlZm5hbWU6bHN0cmlwPSVzIgorCisjOiByZWYtZmlsdGVyLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVnZXIgdmFsdWUgZXhwZWN0ZWQgcmVmbmFtZTpyc3RyaXA9JXMiCittc2dzdHIgIuacn+acm+aVtOaVuOWAvCByZWZuYW1lOnJzdHJpcD0lcyIKKworIzogcmVmLWZpbHRlci5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoJXMpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qEICUlKCVzKSDlj4PmlbjvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShvYmplY3R0eXBlKSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUob2JqZWN0dHlwZSkg5LiN5bi25Y+D5pW4IgorCisjOiByZWYtZmlsdGVyLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAlJShvYmplY3RzaXplKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveitmOWIpeeahCAlJShvYmplY3RzaXplKSDlj4PmlbjvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlJShkZWx0YWJhc2UpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShkZWx0YWJhc2UpIOS4jeW4tuWPg+aVuCIKKworIzogcmVmLWZpbHRlci5jOjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlJShib2R5KSBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cyIKK21zZ3N0ciAiJSUoYm9keSkg5LiN5bi25Y+D5pW4IgorCisjOiByZWYtZmlsdGVyLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUlKHN1YmplY3QpIGRvZXMgbm90IHRha2UgYXJndW1lbnRzIgorbXNnc3RyICIlJShzdWJqZWN0KSDkuI3luLblj4PmlbgiCisKKyM6IHJlZi1maWx0ZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biAlJSh0cmFpbGVycykgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrnn6XnmoQgJSUodHJhaWxlcnMpIOWPg+aVuO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIGNvbnRlbnRzOmxpbmVzPSVzIgorbXNnc3RyICLmnJ/mnJvkuIDlgIvmraPmlbggY29udGVudHM6bGluZXM9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGNvbnRlbnRzKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveitmOWIpeeahCAlJShjb250ZW50cykg5Y+D5pW477yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zaXRpdmUgdmFsdWUgZXhwZWN0ZWQgb2JqZWN0bmFtZTpzaG9ydD0lcyIKK21zZ3N0ciAi5pyf5pyb5LiA5YCL5q2j5pW4IG9iamVjdG5hbWU6c2hvcnQ9JXMiCisKKyM6IHJlZi1maWx0ZXIuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKG9iamVjdG5hbWUpIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qEICUlKG9iamVjdG5hbWUpIOWPg+aVuO+8miVzIgorCisjOiByZWYtZmlsdGVyLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIKK21zZ3N0ciAi5pyf5pyb55qE5qC85byP77yaJSUoYWxpZ246POWvrOW6pj4sPOS9jee9rj4pIgorCisjOiByZWYtZmlsdGVyLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBwb3NpdGlvbjolcyIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qE5L2N572u77yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdpZHRoOiVzIgorbXNnc3RyICLmnKrog73orZjliKXnmoTlr6zluqbvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgJSUoYWxpZ24pIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq6IO96K2Y5Yil55qEICUlKGFsaWduKSDlj4PmlbjvvJolcyIKKworIzogcmVmLWZpbHRlci5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NpdGl2ZSB3aWR0aCBleHBlY3RlZCB3aXRoIHRoZSAlJShhbGlnbikgYXRvbSIKK21zZ3N0ciAi5YWD57SgICUlKGFsaWduKSDpnIDopoHkuIDlgIvmraPmlbjnmoTlr6zluqYiCisKKyM6IHJlZi1maWx0ZXIuYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkICUlKGlmKSBhcmd1bWVudDogJXMiCittc2dzdHIgIuacquiDveitmOWIpeeahCAlJShpZikg5Y+D5pW477yaJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiCittc2dzdHIgIuagvOW8j+mMr+iqpOeahOashOS9jeWQje+8miUuKnMiCisKKyM6IHJlZi1maWx0ZXIuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWVsZCBuYW1lOiAlLipzIgorbXNnc3RyICLmnKrnn6XnmoTmrITkvY3lkI3vvJolLipzIgorCisjOiByZWYtZmlsdGVyLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnJS4qcycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIgorbXNnc3RyICLkuI3mmK/kuIDlgIsgZ2l0IOeJiOacrOW6q++8jOS9huaYr+ashOS9jSAnJS4qcycg6ZyA6KaB5a2Y5Y+W54mp5Lu26LOH5paZIgorCisjOiByZWYtZmlsdGVyLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoaWYpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAi5qC85byP77ya5L2/55So5LqGICUlKGlmKSDlhYPntKDogIzmspLmnIkgJSUodGhlbikg5YWD57SgIgorCisjOiByZWYtZmlsdGVyLmM6Nzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgIuagvOW8j++8muS9v+eUqOS6hiAlJSh0aGVuKSDlhYPntKDogIzmspLmnIkgJSUoaWYpIOWFg+e0oCIKKworIzogcmVmLWZpbHRlci5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKHRoZW4pIGF0b20gdXNlZCBtb3JlIHRoYW4gb25jZSIKK21zZ3N0ciAi5qC85byP77yaJSUodGhlbikg5YWD57Sg55So5LqG5aSa5qyhIgorCisjOiByZWYtZmlsdGVyLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUodGhlbikgYXRvbSB1c2VkIGFmdGVyICUlKGVsc2UpIgorbXNnc3RyICLmoLzlvI/vvJolJSh0aGVuKSDlhYPntKDnlKjlnKjkuoYgJSUoZWxzZSkg5LmL5b6MIgorCisjOiByZWYtZmlsdGVyLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZvcm1hdDogJSUoZWxzZSkgYXRvbSB1c2VkIHdpdGhvdXQgYW4gJSUoaWYpIGF0b20iCittc2dzdHIgIuagvOW8j++8muS9v+eUqOS6hiAlJShlbHNlKSDlhYPntKDogIzmspLmnIkgJSUoaWYpIOWFg+e0oCIKKworIzogcmVmLWZpbHRlci5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVsc2UpIGF0b20gdXNlZCB3aXRob3V0IGEgJSUodGhlbikgYXRvbSIKK21zZ3N0ciAi5qC85byP77ya5L2/55So5LqGICUlKGVsc2UpIOWFg+e0oOiAjOaykuaciSAlJSh0aGVuKSDlhYPntKAiCisKKyM6IHJlZi1maWx0ZXIuYzo4MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm9ybWF0OiAlJShlbHNlKSBhdG9tIHVzZWQgbW9yZSB0aGFuIG9uY2UiCittc2dzdHIgIuagvOW8j++8miUlKGVsc2UpIOWFg+e0oOeUqOS6huWkmuasoSIKKworIzogcmVmLWZpbHRlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSB1c2VkIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIgorbXNnc3RyICLmoLzlvI/vvJrkvb/nlKjkuoYgJSUoZW5kKSDlhYPntKDljbvmspLmnInlroPnmoTlsI3mh4nlhYPntKAiCisKKyM6IHJlZi1maWx0ZXIuYzo4ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIGZvcm1hdCBzdHJpbmcgJXMiCittc2dzdHIgIumMr+iqpOeahOagvOW8j+WMluWtl+S4siAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCByZWJhc2luZyAlcyIKK21zZ3N0ciAi6Z2e5YiG5pSv77yM5q2j6YeN5a6a5Z+65bqVICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBicmFuY2gsIHJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJXMiCittc2dzdHIgIumdnuWIhuaUr++8jOato+mHjeWumuWfuuW6leWIhumboumWi+mgreaMh+aomSAlcyIKKworIzogcmVmLWZpbHRlci5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcyIKK21zZ3N0ciAi6Z2e5YiG5pSv77yM5LqM5YiG5bCL5om+6ZaL5aeL5pa8ICVzIgorCisjOiByZWYtZmlsdGVyLmM6MTUwNAorbXNnaWQgIm5vIGJyYW5jaCIKK21zZ3N0ciAi6Z2e5YiG5pSvIgorCisjOiByZWYtZmlsdGVyLmM6MTU0MCByZWYtZmlsdGVyLmM6MTc0OQorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiCittc2dzdHIgIue8uuWwkSAlMiRzIOeahOeJqeS7tiAlMSRzIgorCisjOiByZWYtZmlsdGVyLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiCittc2dzdHIgInBhcnNlX29iamVjdF9idWZmZXIg5aSx5pWX5pa8ICUyJHMg55qEICUxJHMiCisKKyM6IHJlZi1maWx0ZXIuYzoyMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAi5qC85byP6Yyv6Kqk55qE54mp5Lu2ICclcyciCisKKyM6IHJlZi1maWx0ZXIuYzoyMDkzCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHJlZiB3aXRoIGJyb2tlbiBuYW1lICVzIgorbXNnc3RyICLlv73nlaXluLbmnInpjK/oqqTlkI3nqLEgJXMg55qE5byV55SoIgorCisjOiByZWYtZmlsdGVyLmM6MjM4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIgorbXNnc3RyICLmoLzlvI/vvJrnvLrlsJEgJSUoZW5kKSDlhYPntKAiCisKKyM6IHJlZi1maWx0ZXIuYzoyNDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2VkIgorbXNnc3RyICLpgbjpoIUgYCVzJyDlkowgLS1tZXJnZWQg5LiN55u45a65IgorCisjOiByZWYtZmlsdGVyLmM6MjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLW1lcmdlZCIKK21zZ3N0ciAi6YG46aCFIGAlcycg5ZKMIC0tbm8tbWVyZ2VkIOS4jeebuOWuuSIKKworIzogcmVmLWZpbHRlci5jOjI1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLmoLzlvI/pjK/oqqTnmoTnianku7blkI0gJXMiCisKKyM6IHJlZi1maWx0ZXIuYzoyNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiBgJXMnIG11c3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIumBuOmghSBgJXMnIOW/hemgiOaMh+WQkeS4gOWAi+aPkOS6pCIKKworIzogcmVtb3RlLmM6MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZpZyByZW1vdGUgc2hvcnRoYW5kIGNhbm5vdCBiZWdpbiB3aXRoICcvJzogJXMiCittc2dzdHIgIuioreWumueahOmBoOerr+efreWQjeeoseS4jeiDveS7pSAnLycg6ZaL5aeL77yaJXMiCisKKyM6IHJlbW90ZS5jOjQxMworbXNnaWQgIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAi5o+Q5L6b5LqG5LiA5YCL5Lul5LiK55qEIHJlY2VpdmVwYWNr77yM5L2/55So56ys5LiA5YCLIgorCisjOiByZW1vdGUuYzo0MjEKK21zZ2lkICJtb3JlIHRoYW4gb25lIHVwbG9hZHBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIKK21zZ3N0ciAi5o+Q5L6b5LqG5LiA5YCL5Lul5LiK55qEIHVwbG9hZHBhY2vvvIzkvb/nlKjnrKzkuIDlgIsiCisKKyM6IHJlbW90ZS5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIuS4jeiDveWQjOaZguWPluW+lyAlcyDlkowgJXMg6IezICVzIgorCisjOiByZW1vdGUuYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMg6YCa5bi46L+96LmkICVz77yM6ICM6Z2eICVzIgorCisjOiByZW1vdGUuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyDlkIzmmYLov73ouaQgJXMg5ZKMICVzIgorCisjOiByZW1vdGUuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAia2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIgorbXNnc3RyICLmqKHlvI/nmoTpjbUgJyVzJyDmspLmnIkgJyonIgorCisjOiByZW1vdGUuYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsdWUgJyVzJyBvZiBwYXR0ZXJuIGhhcyBubyAnKiciCittc2dzdHIgIuaooeW8j+eahOWAvCAnJXMnIOaykuaciSAnKiciCisKKyM6IHJlbW90ZS5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55IgorbXNnc3RyICLmupDlvJXnlKjooajpgZTlvI8gJXMg5rKS5pyJ56ym5ZCIIgorCisjOiByZW1vdGUuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSIKK21zZ3N0ciAi5rqQ5byV55So6KGo6YGU5byPICVzIOespuWQiOi2hemBjuS4gOWAiyIKKworIy4gVFJBTlNMQVRPUlM6ICJtYXRjaGVzICclcyclIiBpcyB0aGUgPGRzdD4gcGFydCBvZiAiZ2l0IHB1c2gKKyMuIDxyZW1vdGU+IDxzcmM+Ojxkc3Q+IiBwdXNoLCBhbmQgImJlaW5nIHB1c2hlZCAoJyVzJykiIGlzCisjLiB0aGUgPHNyYz4uCisjLgorIzogcmVtb3RlLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGRlc3RpbmF0aW9uIHlvdSBwcm92aWRlZCBpcyBub3QgYSBmdWxsIHJlZm5hbWUgKGkuZS4sXG4iCisic3RhcnRpbmcgd2l0aCBcInJlZnMvXCIpLiBXZSB0cmllZCB0byBndWVzcyB3aGF0IHlvdSBtZWFudCBieTpcbiIKKyJcbiIKKyItIExvb2tpbmcgZm9yIGEgcmVmIHRoYXQgbWF0Y2hlcyAnJXMnIG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyItIENoZWNraW5nIGlmIHRoZSA8c3JjPiBiZWluZyBwdXNoZWQgKCclcycpXG4iCisiICBpcyBhIHJlZiBpbiBcInJlZnMve2hlYWRzLHRhZ3N9L1wiLiBJZiBzbyB3ZSBhZGQgYSBjb3JyZXNwb25kaW5nXG4iCisiICByZWZzL3toZWFkcyx0YWdzfS8gcHJlZml4IG9uIHRoZSByZW1vdGUgc2lkZS5cbiIKKyJcbiIKKyJOZWl0aGVyIHdvcmtlZCwgc28gd2UgZ2F2ZSB1cC4gWW91IG11c3QgZnVsbHkgcXVhbGlmeSB0aGUgcmVmLiIKK21zZ3N0ciAiIgorIuaCqOaPkOS+m+eahOebruaomeS4jeaYr+S4gOWAi+WujOaVtOeahOW8leeUqOWQjeeose+8iOWNs+S7pSBcInJlZnMvXCIg6ZaL6aCt77yJ44CC5oiR5YCRXG4iCisi6Kmm6JGX54yc5ris5oKo55qE5oOz5rOV77yaXG4iCisiXG4iCisiLSDlnKjpgaDnq6/mn6XoqaLlkowgJyVzJyDnrKblkIjnmoTlvJXnlKjjgIJcbiIKKyItIOaqouafpeimgeaOqOmAgeeahCA8c3JjPu+8iCclcyfvvInmmK/kuI3mmK/lnKggXCJyZWZzL3toZWFkcyx0YWdzfS9cIiDkuK3nmoRcbiIKKyIgIOW8leeUqOOAguWmguaenOaYr++8jOaIkeWAkeacg+WcqOWwjeaHieeahOmBoOerr+aWsOWiniByZWZzL3toZWFkcyx0YWdzfS8g5YmN57a044CCXG4iCisiXG4iCisi6YO95LiN6KGM77yM5omA5Lul5oiR5YCR5bey5pS+5qOE44CC5oKo5b+F6aCI57Wm5Ye65a6M5pW055qE5byV55So44CCIgorCisjOiByZW1vdGUuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIGNvbW1pdCBvYmplY3QuXG4iCisiRGlkIHlvdSBtZWFuIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL2hlYWRzLyVzJz8iCittc2dzdHIgIiIKKyLlvJXnlKjooajpgZTlvI/nmoQgPHNyYz4g5piv5LiA5YCL5o+Q5Lqk54mp5Lu244CC5oKo5piv5oOz5bu656uL5LiA5YCL5paw55qE5YiG5pSv6ICM5ZCRXG4iCisiJyVzOnJlZnMvaGVhZHMvJXMnIOaOqOmAgeWXju+8nyIKKworIzogcmVtb3RlLmM6MTA0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSB0YWcgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byBjcmVhdGUgYSBuZXcgdGFnIGJ5IHB1c2hpbmcgdG9cbiIKKyInJXM6cmVmcy90YWdzLyVzJz8iCittc2dzdHIgIiIKKyLlvJXnlKjooajpgZTlvI/nmoQgPHNyYz4g5piv5LiA5YCL5qiZ57Gk54mp5Lu244CC5oKo5piv5oOz5bu656uL5LiA5YCL5paw55qE5qiZ57Gk6ICM5ZCRXG4iCisiJyVzOnJlZnMvdGFncy8lcycg5o6o6YCB5ZeO77yfIgorCisjOiByZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgPHNyYz4gcGFydCBvZiB0aGUgcmVmc3BlYyBpcyBhIHRyZWUgb2JqZWN0LlxuIgorIkRpZCB5b3UgbWVhbiB0byB0YWcgYSBuZXcgdHJlZSBieSBwdXNoaW5nIHRvXG4iCisiJyVzOnJlZnMvdGFncy8lcyc/IgorbXNnc3RyICIiCisi5byV55So6KGo6YGU5byP55qEIDxzcmM+IOaYr+S4gOWAi+aoueeLgOeJqeS7tuOAguaCqOaYr+aDs+eCuumAmeWAi+aoueeLgOeJqeS7tuW7uueri+aomeexpOiAjOWQkVxuIgorIiclczpyZWZzL3RhZ3MvJXMnIOaOqOmAgeWXju+8nyIKKworIzogcmVtb3RlLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIDxzcmM+IHBhcnQgb2YgdGhlIHJlZnNwZWMgaXMgYSBibG9iIG9iamVjdC5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdGFnIGEgbmV3IGJsb2IgYnkgcHVzaGluZyB0b1xuIgorIiclczpyZWZzL3RhZ3MvJXMnPyIKK21zZ3N0ciAiIgorIuW8leeUqOihqOmBlOW8j+eahCA8c3JjPiDmmK/kuIDlgIvos4fmlpnnianku7bjgILmgqjmmK/mg7PngrrpgJnlgIvos4fmlpnnianku7blu7rnq4vmqJnnsaTogIzlkJFcbiIKKyInJXM6cmVmcy90YWdzLyVzJyDmjqjpgIHll47vvJ8iCisKKyM6IHJlbW90ZS5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaCIKK21zZ3N0ciAiJXMg54Sh5rOV6KKr6Kej5p6Q54K65YiG5pSvIgorCisjOiByZW1vdGUuYzoxMTA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWxldGUgJyVzJzogcmVtb3RlIHJlZiBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi54Sh5rOV5Yiq6ZmkICclcyfvvJrpgaDnq6/lvJXnlKjkuI3lrZjlnKgiCisKKyM6IHJlbW90ZS5jOjExMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHN0IHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIgorbXNnc3RyICLnm67mqJnlvJXnlKjooajpgZTlvI8gJXMg56ym5ZCI6LaF6YGO5LiA5YCLIgorCisjOiByZW1vdGUuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImRzdCByZWYgJXMgcmVjZWl2ZXMgZnJvbSBtb3JlIHRoYW4gb25lIHNyYyIKK21zZ3N0ciAi55uu5qiZ5byV55SoICVzIOaOpeaUtui2hemBjuS4gOWAi+a6kCIKKworIzogcmVtb3RlLmM6MTYyNyByZW1vdGUuYzoxNzI4Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCDmspLmnInmjIflkJHkuIDlgIvliIbmlK8iCisKKyM6IHJlbW90ZS5jOjE2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIuaykuacieatpOWIhuaUr++8miclcyciCisKKyM6IHJlbW90ZS5jOjE2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIuWwmuacque1puWIhuaUryAnJXMnIOioreWumuS4iua4uCIKKworIzogcmVtb3RlLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi5LiK5ri45YiG5pSvICclcycg5rKS5pyJ5YSy5a2Y54K65LiA5YCL6YGg56uv6L+96Lmk5YiG5pSvIgorCisjOiByZW1vdGUuYzoxNjYwCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLmjqjpgIHnm67mqJkgJyVzJyDoh7PpgaDnq68gJyVzJyDmspLmnInmnKzmqZ/ov73ouaTliIbmlK8iCisKKyM6IHJlbW90ZS5jOjE2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAi5YiG5pSvICclcycg5rKS5pyJ6Kit5a6a6KaB5o6o6YCB55qE6YGg56uv5Ly65pyN5ZmoIgorCisjOiByZW1vdGUuYzoxNjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAi5ZCRICclcycg5o6o6YCB5byV55So6KaP5qC85pyq5YyF5ZCrICclcyciCisKKyM6IHJlbW90ZS5jOjE2OTUKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgIuaOqOmAgeeEoeebruaome+8iHB1c2guZGVmYXVsdCDmmK8gJ25vdGhpbmcn77yJIgorCisjOiByZW1vdGUuYzoxNzE3Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICdzaW1wbGUnIOaOqOmAgeiHs+S4gOWAi+WWrueNqOeahOebruaomSIKKworIzogcmVtb3RlLmM6MTg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgJXMiCittc2dzdHIgIueEoeazleaJvuWIsOmBoOerr+W8leeUqCAlcyIKKworIzogcmVtb3RlLmM6MTg1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiCittc2dzdHIgIiog5Zyo5pys5qmf5b+955Wl5Y+v56yR55qE5byV55SoICclcyciCisKKyM6IHJlbW90ZS5jOjIwMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICLmgqjnmoTliIbmlK/ln7rmlrwgJyVzJ++8jOS9huatpOS4iua4uOWIhuaUr+W3sue2k+S4jeWtmOWcqOOAglxuIgorCisjOiByZW1vdGUuYzoyMDIzCittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIg5L6G5L+u5b6p77yJXG4iCisKKyM6IHJlbW90ZS5jOjIwMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIuaCqOeahOWIhuaUr+iIh+S4iua4uOWIhuaUryAnJXMnIOS4gOiHtOOAglxuIgorCisjOiByZW1vdGUuYzoyMDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIgorbXNnc3RyICLmgqjnmoTliIbmlK/lkowgJyVzJyDmjIflkJHkuI3lkIznmoTmj5DkuqTjgIJcbiIKKworIzogcmVtb3RlLmM6MjAzMworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCIlc1wiIGZvciBkZXRhaWxzKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcIiVzXCIg5qqi6KaW6Kmz5oOF77yJXG4iCisKKyM6IHJlbW90ZS5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAi5oKo55qE5YiG5pSv6aCY5YWIICclcycg5YWxICVkIOWAi+aPkOS6pOOAglxuIgorbXNnc3RyWzFdICLmgqjnmoTliIbmlK/poJjlhYggJyVzJyDlhbEgJWQg5YCL5o+Q5Lqk44CCXG4iCisKKyM6IHJlbW90ZS5jOjIwNDMKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBwdXNoXCIg5L6G55m85biD5oKo55qE5pys5qmf5o+Q5Lqk77yJXG4iCisKKyM6IHJlbW90ZS5jOjIwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAi5oKo55qE5YiG5pSv6JC95b6MICclcycg5YWxICVkIOWAi+aPkOS6pO+8jOS4puS4lOWPr+S7peW/q+i9ieOAglxuIgorbXNnc3RyWzFdICLmgqjnmoTliIbmlK/okL3lvowgJyVzJyDlhbEgJWQg5YCL5o+Q5Lqk77yM5Lim5LiU5Y+v5Lul5b+r6L2J44CCXG4iCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogcmVtb3RlLmM6MjA1NAorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gdXBkYXRlIHlvdXIgbG9jYWwgYnJhbmNoKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBwdWxsXCIg5L6G5pu05paw5oKo55qE5pys5qmf5YiG5pSv77yJXG4iCisKKyM6IHJlbW90ZS5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisi5oKo55qE5YiG5pSv5ZKMICclcycg5Ye654++5LqG5YGP6Zui77yMXG4iCisi5Lim5LiU5YiG5Yil5pyJICVkIOWSjCAlZCDomZXkuI3lkIznmoTmj5DkuqTjgIJcbiIKK21zZ3N0clsxXSAiIgorIuaCqOeahOWIhuaUr+WSjCAnJXMnIOWHuuePvuS6huWBj+mbou+8jFxuIgorIuS4puS4lOWIhuWIpeaciSAlZCDlkowgJWQg6JmV5LiN5ZCM55qE5o+Q5Lqk44CCXG4iCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogcmVtb3RlLmM6MjA2NworbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcHVsbFwiIOS+huWQiOS9temBoOerr+WIhuaUr++8iVxuIgorCisjOiByZW1vdGUuYzoyMjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICLnhKHms5Xop6PmnpDmnJ/mnJvnmoTnianku7blkI0gJyVzJyIKKworIzogcmVwbGFjZS1vYmplY3QuYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiCittc2dzdHIgIumMr+iqpOeahOWPluS7o+W8leeUqOWQjeeose+8miVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSByZXBsYWNlIHJlZjogJXMiCittc2dzdHIgIumHjeikh+eahOWPluS7o+W8leeUqO+8miVzIgorCisjOiByZXBsYWNlLW9iamVjdC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIKK21zZ3N0ciAi54mp5Lu2ICVzIOeahOWPluS7o+WxpOe0muWkqua3sSIKKworIzogcmVyZXJlLmM6MjE3IHJlcmVyZS5jOjIyNiByZXJlcmUuYzoyMjkKK21zZ2lkICJjb3JydXB0IE1FUkdFX1JSIgorbXNnc3RyICLmkI3lo57nmoQgTUVSR0VfUlIiCisKKyM6IHJlcmVyZS5jOjI2NCByZXJlcmUuYzoyNjkKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcmVyZXJlIHJlY29yZCIKK21zZ3N0ciAi54Sh5rOV5a+r5YWlIHJlcmVyZSDoqJjpjIQiCisKKyM6IHJlcmVyZS5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZSB3cml0aW5nICclcycgKCVzKSIKK21zZ3N0ciAi5a+r5YWlICclcycgKCVzKSDmmYLnmbznlJ/pjK/oqqQiCisKKyM6IHJlcmVyZS5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmx1c2ggJyVzJyIKK21zZ3N0ciAi6YeN5paw5pW055CGICclcycg5aSx5pWXIgorCisjOiByZXJlcmUuYzo1MDMgcmVyZXJlLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJyVzJyIKK21zZ3N0ciAi5LiN6IO96Kej5p6QICclcycg5Lit55qE6KGd56qB5aGKIgorCisjOiByZXJlcmUuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJyVzJyIKK21zZ3N0ciAi5ZyoICclcycg5LiK5ZG85Y+rIHV0aW1lKCkg5aSx5pWXIgorCisjOiByZXJlcmUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5a+r5YWlICclcycg5aSx5pWXIgorCisjOiByZXJlcmUuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RhZ2VkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIuS9v+eUqOS5i+WJjeeahOino+axuuaWueahiOaaq+WtmCAnJXMn44CCIgorCisjOiByZXJlcmUuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyVzJy4iCittc2dzdHIgIuW3suiomOmMhCAnJXMnIOeahOino+axuuaWueahiOOAgiIKKworIzogcmVyZXJlLmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc29sdmVkICclcycgdXNpbmcgcHJldmlvdXMgcmVzb2x1dGlvbi4iCittc2dzdHIgIuS9v+eUqOS5i+WJjeeahOino+axuuaWueahiOino+axuiAnJXMn44CCIgorCisjOiByZXJlcmUuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHVubGluayBzdHJheSAnJXMnIgorbXNnc3RyICLkuI3og73liKrpmaQgc3RyYXkgJyVzJyIKKworIzogcmVyZXJlLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJXMnIgorbXNnc3RyICLngrogJyVzJyDoqJjpjIQgcHJlaW1hZ2UiCisKKyM6IHJlcmVyZS5jOjg4MSBzdWJtb2R1bGUuYzoyMDY3IGJ1aWx0aW4vbG9nLmM6MTg3MQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MzYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bu656uL55uu6YyEICclcyciCisKKyM6IHJlcmVyZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBjb25mbGljdGVkIHN0YXRlIGluICclcyciCittc2dzdHIgIuabtOaWsCAnJXMnIOS4reeahOihneeqgeeLgOaFi+WkseaVlyIKKworIzogcmVyZXJlLmM6MTA2OCByZXJlcmUuYzoxMDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlbWVtYmVyZWQgcmVzb2x1dGlvbiBmb3IgJyVzJyIKK21zZ3N0ciAi5rKS5pyJ54K6ICclcycg6KiY5oa255qE6Kej5rG65pa55qGIIgorCisjOiByZXJlcmUuYzoxMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB1bmxpbmsgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yiq6ZmkICclcyciCisKKyM6IHJlcmVyZS5jOjEwODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCBwcmVpbWFnZSBmb3IgJyVzJyIKK21zZ3N0ciAi5bey54K6ICclcycg5pu05pawIHByZWltYWdlIgorCisjOiByZXJlcmUuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZvcmdvdCByZXNvbHV0aW9uIGZvciAnJXMnXG4iCittc2dzdHIgIuW/mOiomCAnJXMnIOeahOino+axuuaWueahiFxuIgorCisjOiByZXJlcmUuYzoxMTk5Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gcnItY2FjaGUgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3og73plovllZ8gcnItY2FjaGUg55uu6YyEIgorCisjOiByZXZpc2lvbi5jOjI0OTcKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoIGFwcGVhcnMgdG8gYmUgYnJva2VuIgorbXNnc3RyICLmgqjnmoTnm67liY3liIbmlK/lpb3lg4/ooqvmkI3lo54iCisKKyM6IHJldmlzaW9uLmM6MjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWl0cyB5ZXQiCittc2dzdHIgIuaCqOeahOebruWJjeWIhuaUryAnJXMnIOWwmueEoeS7u+S9leaPkOS6pCIKKworIzogcmV2aXNpb24uYzoyNzA4Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IOiIhyAtLWJpc2VjdCDkuI3nm7jlrrkiCisKKyM6IHJldmlzaW9uLmM6MjcxMgorbXNnaWQgIi1MIGRvZXMgbm90IHlldCBzdXBwb3J0IGRpZmYgZm9ybWF0cyBiZXNpZGVzIC1wIGFuZCAtcyIKK21zZ3N0ciAiLUwg5bCa5LiN5pSv5o+0IC1wIOWSjCAtcyDkuYvlpJbnmoTlt67nlbDmoLzlvI8iCisKKyM6IHJ1bi1jb21tYW5kLmM6NzYyCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICLkuI3og73plovllZ8gL2Rldi9udWxsIgorCisjOiBydW4tY29tbWFuZC5jOjEyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBhc3luYyB0aHJlYWQ6ICVzIgorbXNnc3RyICLkuI3og73lu7rnq4sgYXN5bmMg5Z+36KGM57eS77yaJXMiCisKKyM6IHJ1bi1jb21tYW5kLmM6MTMzMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlICclcycgaG9vayB3YXMgaWdub3JlZCBiZWNhdXNlIGl0J3Mgbm90IHNldCBhcyBleGVjdXRhYmxlLlxuIgorIllvdSBjYW4gZGlzYWJsZSB0aGlzIHdhcm5pbmcgd2l0aCBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgLiIKK21zZ3N0ciAiIgorIuWboOeCuuaykuacieWwh+aOm+mJpCAnJXMnIOioreWumueCuuWPr+Wft+ihjO+8jOaOm+mJpOiiq+W/veeVpeOAguaCqOWPr+S7pemAj+mBjlxuIgorIuioreWumiBgZ2l0IGNvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2VgIOS+humXnOmWiemAmeaineitpuWRiuOAgiIKKworIzogc2VuZC1wYWNrLmM6MTQ0Cittc2dpZCAidW5leHBlY3RlZCBmbHVzaCBwYWNrZXQgd2hpbGUgcmVhZGluZyByZW1vdGUgdW5wYWNrIHN0YXR1cyIKK21zZ3N0ciAi6K6A5Y+W6YGg56uv6Kej5YyF54uA5oWL5pmC5pS25Yiw5oSP5aSW55qEIGZsdXNoIOWMhSIKKworIzogc2VuZC1wYWNrLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSByZW1vdGUgdW5wYWNrIHN0YXR1czogJXMiCittc2dzdHIgIuS4jeiDveino+aekOmBoOerr+ino+WMheeLgOaFi++8miVzIgorCisjOiBzZW5kLXBhY2suYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIgorbXNnc3RyICLpgaDnq6/op6PljIXlpLHmlZfvvJolcyIKKworIzogc2VuZC1wYWNrLmM6MzA5Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgIueCuuaOqOmAgeitieabuOexpOWQjeWkseaVlyIKKworIzogc2VuZC1wYWNrLmM6NDIzCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICLmjqXmlLbnq6/kuI3mlK/mj7TnsL3lkI3mjqjpgIEiCisKKyM6IHNlbmQtcGFjay5jOjQyNQorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAi5pyq5YKz6YCB5o6o6YCB6K2J5pu477yM5Zug54K65o6l5pS256uv5LiN5pSv5o+057C95ZCN5o6o6YCBIgorCisjOiBzZW5kLXBhY2suYzo0MzcKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgIuaOpeaUtuerr+S4jeaUr+aPtOWOn+WtkOaOqOmAgSIKKworIzogc2VuZC1wYWNrLmM6NDQyCittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCBwdXNoIG9wdGlvbnMiCittc2dzdHIgIuaOpeaUtuerr+S4jeaUr+aPtOaOqOmAgemBuOmghSIKKworIzogc2VxdWVuY2VyLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0IG1lc3NhZ2UgY2xlYW51cCBtb2RlICclcyciCittc2dzdHIgIueEoeaViOeahOaPkOS6pOioiuaBr+a4heeQhuaooeW8jyAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSAnJXMnIgorbXNnc3RyICLnhKHms5XliKrpmaQgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MzEzIGJ1aWx0aW4vcmViYXNlLmM6NzgxIGJ1aWx0aW4vcmViYXNlLmM6MTcwNiBidWlsdGluL3JtLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5Yiq6ZmkICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMyMworbXNnaWQgInJldmVydCIKK21zZ3N0ciAi6YKE5Y6fIgorCisjOiBzZXF1ZW5jZXIuYzozMjUKK21zZ2lkICJjaGVycnktcGljayIKK21zZ3N0ciAi5o+A6YG4IgorCisjOiBzZXF1ZW5jZXIuYzozMjcKK21zZ2lkICJyZWJhc2UgLWkiCittc2dzdHIgInJlYmFzZSAtaSIKKworIzogc2VxdWVuY2VyLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gYWN0aW9uOiAlZCIKK21zZ3N0ciAi5pyq55+l5YuV5L2c77yaJWQiCisKKyM6IHNlcXVlbmNlci5jOjM4NworbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisi6KGd56qB6Kej5rG65a6M55Wi5b6M77yM55SoICdnaXQgYWRkIDzot6/lvpE+JyDmiJYgJ2dpdCBybSA86Lev5b6RPidcbiIKKyLmjIfku6TmqJnoqJjkv67mraPlvoznmoTmqpTmoYgiCisKKyM6IHNlcXVlbmNlci5jOjM5MAorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisi6KGd56qB6Kej5rG65a6M55Wi5b6M77yM55SoICdnaXQgYWRkIDzot6/lvpE+JyDmiJYgJ2dpdCBybSA86Lev5b6RPidcbiIKKyLlsI3kv67mraPlvoznmoTmqpTmoYjlgZrmqJnoqJjvvIznhLblvoznlKggJ2dpdCBjb21taXQnIOaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6NDAzIHNlcXVlbmNlci5jOjI5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvY2sgJyVzJyIKK21zZ3N0ciAi5LiN6IO96Y6W5a6aICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgZW9sIHRvICclcyciCittc2dzdHIgIuS4jeiDveWwh+aPm+ihjOespuiZn+Wvq+WFpSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MTUgc2VxdWVuY2VyLmM6Mjc5OCBzZXF1ZW5jZXIuYzoyOTk5IHNlcXVlbmNlci5jOjMwMTMKKyM6IHNlcXVlbmNlci5jOjMyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmFsaXplICclcyciCittc2dzdHIgIueEoeazleWujOaIkCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0Mzggc2VxdWVuY2VyLmM6MTcwNyBzZXF1ZW5jZXIuYzoyODE4IHNlcXVlbmNlci5jOjMyNTkKKyM6IHNlcXVlbmNlci5jOjMzNjggYnVpbHRpbi9hbS5jOjI0NCBidWlsdGluL2NvbW1pdC5jOjc4MyBidWlsdGluL21lcmdlLmM6MTExNworIzogYnVpbHRpbi9yZWJhc2UuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WICclcyciCisKKyM6IHNlcXVlbmNlci5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXMuIgorbXNnc3RyICLmgqjnmoTmnKzmqZ/kv67mlLnlsIfooqslc+imhuiTi+OAgiIKKworIzogc2VxdWVuY2VyLmM6NDY4Cittc2dpZCAiY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICLmj5DkuqTmgqjnmoTkv67mlLnmiJblhLLol4/lvozlho3nubznuozjgIIiCisKKyM6IHNlcXVlbmNlci5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZmFzdC1mb3J3YXJkIgorbXNnc3RyICIlc++8muW/q+i9iSIKKworIzogc2VxdWVuY2VyLmM6NTM5IGJ1aWx0aW4vdGFnLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICLnhKHmlYjnmoTmuIXnkIbmqKHlvI8gJXMiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiLCAiY2hlcnJ5LXBpY2siIG9yCisjLiAicmViYXNlIC1pIi4KKyMuCisjOiBzZXF1ZW5jZXIuYzo2MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXPvvJrnhKHms5Xlr6vlhaXmlrDntKLlvJXmqpTmoYgiCisKKyM6IHNlcXVlbmNlci5jOjY1MAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZSIKK21zZ3N0ciAi5LiN6IO95pu05paw5b+r5Y+W5qi5IgorCisjOiBzZXF1ZW5jZXIuYzo2NjQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIEhFQUQg5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzo3NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8ga2V5IHByZXNlbnQgaW4gJyUuKnMnIgorbXNnc3RyICLlnKggJyUuKnMnIOS4reaykuaciSBrZXkiCisKKyM6IHNlcXVlbmNlci5jOjc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVxdW90ZSB2YWx1ZSBvZiAnJXMnIgorbXNnc3RyICLnhKHms5XngrogJyVzJyDnmoTlgLzljrvlvJXomZ8iCisKKyM6IHNlcXVlbmNlci5jOjc5MiB3cmFwcGVyLmM6MTkwIHdyYXBwZXIuYzozNjAgYnVpbHRpbi9hbS5jOjcwNQorIzogYnVpbHRpbi9hbS5jOjc5NyBidWlsdGluL21lcmdlLmM6MTExNCBidWlsdGluL3JlYmFzZS5jOjEwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWfICclcycg6YCy6KGM6K6A5Y+WIgorCisjOiBzZXF1ZW5jZXIuYzo4MDIKK21zZ2lkICInR0lUX0FVVEhPUl9OQU1FJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICLlt7LntpPntablh7ogJ0dJVF9BVVRIT1JfTkFNRSciCisKKyM6IHNlcXVlbmNlci5jOjgwNworbXNnaWQgIidHSVRfQVVUSE9SX0VNQUlMJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICLlt7LntpPntablh7ogJ0dJVF9BVVRIT1JfRU1BSUwnIgorCisjOiBzZXF1ZW5jZXIuYzo4MTIKK21zZ2lkICInR0lUX0FVVEhPUl9EQVRFJyBhbHJlYWR5IGdpdmVuIgorbXNnc3RyICLlt7LntpPntablh7ogJ0dJVF9BVVRIT1JfREFURSciCisKKyM6IHNlcXVlbmNlci5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhcmlhYmxlICclcyciCittc2dzdHIgIuacquefpeiuiuaVuCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo4MjEKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX05BTUUnIgorbXNnc3RyICLnvLrlsJEgJ0dJVF9BVVRIT1JfTkFNRSciCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIgorbXNnc3RyICLnvLrlsJEgJ0dJVF9BVVRIT1JfRU1BSUwnIgorCisjOiBzZXF1ZW5jZXIuYzo4MjUKK21zZ2lkICJtaXNzaW5nICdHSVRfQVVUSE9SX0RBVEUnIgorbXNnc3RyICLnvLrlsJEgJ0dJVF9BVVRIT1JfREFURSciCisKKyM6IHNlcXVlbmNlci5jOjkwMiBzZXF1ZW5jZXIuYzoxNDI3CisjfCBtc2dpZCAibWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnaWQgIm1hbGZvcm1lZCBpZGVudCBsaW5lIgorbXNnc3RyICLorZjliKXooYznmoTmoLzlvI/pjK/oqqQiCisKKyM6IHNlcXVlbmNlci5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisieW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWVcbiIKKyJJZiB0aGVzZSBjaGFuZ2VzIGFyZSBtZWFudCB0byBiZSBzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIklmIHRoZXkgYXJlIG1lYW50IHRvIGdvIGludG8gYSBuZXcgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0ICVzXG4iCisiXG4iCisiSW4gYm90aCBjYXNlcywgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorbXNnc3RyICIiCisi5oKo55qE5bel5L2c5Y2A5Lit5a2Y5Zyo5bey5pqr5a2Y55qE5L+u5pS5XG4iCisi5aaC5p6c6YCZ5Lqb5L+u5pS56ZyA6KaB6KKr5L215YWl5YmN5LiA5YCL5o+Q5Lqk77yM5Z+36KGM77yaXG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKyJcbiIKKyLlpoLmnpzpgJnkupvkv67mlLnopoHlvaLmiJDkuIDlgIvmlrDmj5DkuqTvvIzln7fooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyLnhKHoq5blk6rnqK7mg4Xms4HvvIznlbbmgqjlrozmiJDmj5DkuqTvvIznubznuozln7fooYzvvJpcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzoxMjE4Cittc2dpZCAiJ3ByZXBhcmUtY29tbWl0LW1zZycgaG9vayBmYWlsZWQiCittc2dzdHIgIidwcmVwYXJlLWNvbW1pdC1tc2cnIOaOm+mJpOWkseaVlyIKKworIzogc2VxdWVuY2VyLmM6MTIyNAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIuaCqOeahOWnk+WQjeWSjOS/oeS7tuS9jeWdgOWfuuaWvOeZu+WFpeWQjeeoseWSjOS4u+apn+WQjeeoseiHquWLleioreWumuOAguiri+aqouafpeWug+WAkeato+eiulxuIgorIuiIh+WQpuOAguaCqOWPr+S7peWwjeWFtumAsuihjOioreWumuS7peWFjeWGjeWHuuePvuacrOaPkOekuuioiuaBr+OAguWft+ihjOWmguS4i+aMh+S7pOWcqOe3qOi8r+WZqFxuIgorIuS4ree3qOi8r+aCqOeahOioreWumuaqlOahiO+8mlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIuioreWumuWujOeVouW+jO+8jOaCqOWPr+S7peeUqOS4i+mdoueahOaMh+S7pOS+huS/ruato+acrOasoeaPkOS6pOaJgOS9v+eUqOeahOS9v+eUqOiAhei6q+S7ve+8mlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogc2VxdWVuY2VyLmM6MTIzNworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIuaCqOeahOWnk+WQjeWSjOS/oeS7tuS9jeWdgOWfuuaWvOeZu+WFpeWQjeeoseWSjOS4u+apn+WQjeeoseiHquWLleioreWumuOAguiri+aqouafpeWug+WAkeato+eiulxuIgorIuiIh+WQpuOAguaCqOWPr+S7peWwjeWFtumAsuihjOioreWumuS7peWFjeWGjeWHuuePvuacrOaPkOekuuioiuaBr++8mlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyLoqK3lrprlroznlaLlvozvvIzmgqjlj6/ku6XnlKjkuIvpnaLnmoTmjIfku6Tkvobkv67mraPmnKzmrKHmj5DkuqTmiYDkvb/nlKjnmoTkvb/nlKjogIXouqvku73vvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IHNlcXVlbmNlci5jOjEyNzkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLnhKHms5Xmib7liLDmlrDlu7rnq4vnmoTmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjEyODEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIuS4jeiDveino+aekOaWsOW7uueri+eahOaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MTMyNworbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IgorbXNnc3RyICLlu7rnq4vmj5DkuqTlvozvvIzkuI3og73op6PmnpAgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTMyOQorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIuWIhumboumWi+mgreaMh+aomSIKKworIyAg6K2v6ICF77ya5Lit5paH5a2X5Liy5ou85o6l77yM5Y+v5Yiq6Zmk5YmN5bCO56m65qC8CisjOiBzZXF1ZW5jZXIuYzoxMzMzCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAo5qC55o+Q5LqkKSIKKworIzogc2VxdWVuY2VyLmM6MTM1NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIkhFQUQgJXMg5LiN5piv5LiA5YCL5o+Q5Lqk77yBIgorCisjOiBzZXF1ZW5jZXIuYzoxMzYwIHNlcXVlbmNlci5jOjE0NTggYnVpbHRpbi9jb21taXQuYzoxNTY5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCDmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjE0MTEgc2VxdWVuY2VyLmM6MjA1NQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIgorbXNnc3RyICLkuI3og73op6PmnpDmj5DkuqTkvZzogIUiCisKKyM6IHNlcXVlbmNlci5jOjE0MzEKKyN8IG1zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dpZCAiY29ycnVwdGVkIGF1dGhvciB3aXRob3V0IGRhdGUgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTQ0NyBidWlsdGluL2FtLmM6MTU2MSBidWlsdGluL21lcmdlLmM6Njg0Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUg54Sh5rOV5a+r5YWl5qi554uA54mp5Lu2IgorCisjOiBzZXF1ZW5jZXIuYzoxNDgwIHNlcXVlbmNlci5jOjE1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgZnJvbSAnJXMnIgorbXNnc3RyICLkuI3og73lvp4gJyVzJyDoroDlj5bmj5DkuqToqqrmmI4iCisKKyM6IHNlcXVlbmNlci5jOjE1MTYgYnVpbHRpbi9hbS5jOjE1ODMgYnVpbHRpbi9jb21taXQuYzoxNjY4IGJ1aWx0aW4vbWVyZ2UuYzo4ODMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MDgKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi5a+r5o+Q5Lqk54mp5Lu25aSx5pWXIgorCisjOiBzZXF1ZW5jZXIuYzoxNTc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveino+aekOaPkOS6pCAlcyIKKworIzogc2VxdWVuY2VyLmM6MTU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q54i25o+Q5LqkICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjU2IHNlcXVlbmNlci5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBjb21tYW5kOiAlZCIKK21zZ3N0ciAi5pyq55+l5oyH5Luk77yaJWQiCisKKyM6IHNlcXVlbmNlci5jOjE3MTQgc2VxdWVuY2VyLmM6MTczOQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iCittc2dzdHIgIumAmeaYr+S4gOWAiyAlZCDlgIvmj5DkuqTnmoTntYTlkIjjgIIiCisKKyM6IHNlcXVlbmNlci5jOjE3MjQKK21zZ2lkICJuZWVkIGEgSEVBRCB0byBmaXh1cCIKK21zZ3N0ciAi6ZyA6KaB5LiA5YCLIEhFQUQg5L6G5L+u5b6pIgorCisjOiBzZXF1ZW5jZXIuYzoxNzI2IHNlcXVlbmNlci5jOjMzMDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBIRUFEIgorbXNnc3RyICLkuI3og73oroDlj5YgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6MTcyOAorbXNnaWQgImNvdWxkIG5vdCByZWFkIEhFQUQncyBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WIEhFQUQg55qE5o+Q5Lqk6Kqq5piOIgorCisjOiBzZXF1ZW5jZXIuYzoxNzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAnJXMnIgorbXNnc3RyICLkuI3og73lr6sgJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MTc0MSBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDk2Cittc2dpZCAiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIKK21zZ3N0ciAi6YCZ5piv56ys5LiA5YCL5o+Q5Lqk6Kqq5piO77yaIgorCisjOiBzZXF1ZW5jZXIuYzoxNzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlIG9mICVzIgorbXNnc3RyICLkuI3og73oroDlj5YgJXMg55qE5o+Q5Lqk6Kqq5piOIgorCisjOiBzZXF1ZW5jZXIuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMlZDoiCittc2dzdHIgIumAmeaYr+aPkOS6pOiqquaYjiAjJWTvvJoiCisKKyM6IHNlcXVlbmNlci5jOjE3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMlZCB3aWxsIGJlIHNraXBwZWQ6IgorbXNnc3RyICLmj5DkuqToqqrmmI4gIyVkIOWwh+iiq+i3s+mBju+8miIKKworIzogc2VxdWVuY2VyLmM6MTg1MAorbXNnaWQgInlvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgIuaCqOeahOe0ouW8leaqlOahiOacquWujOaIkOWQiOS9teOAgiIKKworIzogc2VxdWVuY2VyLmM6MTg1NworbXNnaWQgImNhbm5vdCBmaXh1cCByb290IGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L+u5b6p5qC55o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxODc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAi5o+Q5LqkICVzIOaYr+S4gOWAi+WQiOS9teaPkOS6pOS9huacquaPkOS+myAtbSDpgbjpoIXjgIIiCisKKyM6IHNlcXVlbmNlci5jOjE4ODQgc2VxdWVuY2VyLmM6MTg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIuaPkOS6pCAlcyDmspLmnInnrKwgJWQg5YCL54i25o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxODk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICLkuI3og73lvpfliLAgJXMg55qE5o+Q5Lqk6Kqq5piOIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisjLiAicmV2ZXJ0IiBvciAicGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExLgorIzogc2VxdWVuY2VyLmM6MTkxNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVz77ya5LiN6IO96Kej5p6Q54i25o+Q5LqkICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxOTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73lsIcgJyVzJyDph43mlrDlkb3lkI3ngrogJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICLkuI3og73pgoTljp8gJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICLkuI3og73mh4nnlKggJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlc++8mueEoeazleiugOWPlue0ouW8lSIKKworIzogc2VxdWVuY2VyLmM6MjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVz77ya54Sh5rOV6YeN5paw5pW055CG57Si5byVIgorCisjOiBzZXF1ZW5jZXIuYzoyMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRvZXMgbm90IGFjY2VwdCBhcmd1bWVudHM6ICclcyciCittc2dzdHIgIiVzIOS4jeaOpeWPl+WPg+aVuO+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjIxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBhcmd1bWVudHMgZm9yICVzIgorbXNnc3RyICLnvLrlsJEgJXMg55qE5Y+D5pW4IgorCisjOiBzZXF1ZW5jZXIuYzoyMjM1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAnJS4qcyciCittc2dzdHIgIueEoeazleino+aekCAnJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjIyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLnhKHmlYjooYwgJWTvvJolLipzIgorCisjOiBzZXF1ZW5jZXIuYzoyMzAwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCAnJXMnIHdpdGhvdXQgYSBwcmV2aW91cyBjb21taXQiCittc2dzdHIgIuaykuacieeItuaPkOS6pOeahOaDheazgeS4i+S4jeiDvSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyMzQ4IGJ1aWx0aW4vcmViYXNlLmM6MTcyIGJ1aWx0aW4vcmViYXNlLmM6MTk3CisjOiBidWlsdGluL3JlYmFzZS5jOjIyMyBidWlsdGluL3JlYmFzZS5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnLiIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WICclcyfjgIIiCisKKyM6IHNlcXVlbmNlci5jOjIzODQKK21zZ2lkICJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuato+WcqOWPlua2iOS4gOWAi+mAsuihjOS4reeahOaPgOmBuCIKKworIzogc2VxdWVuY2VyLmM6MjM5MQorbXNnaWQgImNhbmNlbGxpbmcgYSByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuato+WcqOWPlua2iOS4gOWAi+mAsuihjOS4reeahOmChOWOnyIKKworIzogc2VxdWVuY2VyLmM6MjQzNQorbXNnaWQgInBsZWFzZSBmaXggdGhpcyB1c2luZyAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorbXNnc3RyICLoq4vnlKggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIOS+huS/ruaUueOAgiIKKworIzogc2VxdWVuY2VyLmM6MjQzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJyVzJyIKK21zZ3N0ciAi5LiN5Y+v55So55qE5oyH5Luk5riF5Zau77yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6MjQ0MgorbXNnaWQgIm5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAi5rKS5pyJ6Kej5p6Q5o+Q5Lqk44CCIgorCisjOiBzZXF1ZW5jZXIuYzoyNDUzCittc2dpZCAiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iCittc2dzdHIgIuS4jeiDveWcqOmChOWOn+aPkOS6pOS4reWft+ihjOaPgOmBuOOAgiIKKworIzogc2VxdWVuY2VyLmM6MjQ1NQorbXNnaWQgImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLkuI3og73lnKjmj4DpgbjkuK3ln7fooYzpgoTljp/mj5DkuqTjgIIiCisKKyM6IHNlcXVlbmNlci5jOjI1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICIlcyDnmoTlgLznhKHmlYjvvJolcyIKKworIzogc2VxdWVuY2VyLmM6MjYzMAorbXNnaWQgInVudXNhYmxlIHNxdWFzaC1vbnRvIgorbXNnc3RyICLkuI3lj6/nlKjnmoQgc3F1YXNoLW9udG8iCisKKyM6IHNlcXVlbmNlci5jOjI2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICclcyciCittc2dzdHIgIuagvOW8j+mMr+iqpOeahOmBuOmghea4heWWru+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjI3MzYgc2VxdWVuY2VyLmM6NDQ2MworbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICLmj5DkvpvkuobnqbrnmoTmj5DkuqTpm4YiCisKKyM6IHNlcXVlbmNlci5jOjI3NTIKK21zZ2lkICJyZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5LiA5YCL6YKE5Y6f5YuV5L2c5bey5Zyo6YCy6KGMIgorCisjOiBzZXF1ZW5jZXIuYzoyNzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyeSBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCittc2dzdHIgIuWYl+ippiBcImdpdCByZXZlcnQgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI3NTcKK21zZ2lkICJjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLmj4Dpgbjli5XkvZzlt7LlnKjpgLLooYwiCisKKyM6IHNlcXVlbmNlci5jOjI3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIgorbXNnc3RyICLlmJfoqaYgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAlcy0tYWJvcnQgfCAtLXF1aXQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjI3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuS4jeiDveW7uueri+W6j+WIl+ebrumMhCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoyNzg4Cittc2dpZCAiY291bGQgbm90IGxvY2sgSEVBRCIKK21zZ3N0ciAi5LiN6IO96Y6W5a6aIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjI4NDggc2VxdWVuY2VyLmM6NDIwOQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5o+A6YG45oiW6YKE5Y6f5YuV5L2c5Lim5pyq6YCy6KGMIgorCisjOiBzZXF1ZW5jZXIuYzoyODUwIHNlcXVlbmNlci5jOjI4NjEKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6Mjg1MiBzZXF1ZW5jZXIuYzoyODk2Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIuS4jeiDveW+nuWwmuacquW7uueri+eahOWIhuaUr+e1guatoiIKKworIzogc2VxdWVuY2VyLmM6Mjg4MiBidWlsdGluL2dyZXAuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWfICclcyciCisKKyM6IHNlcXVlbmNlci5jOjI4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJzogJXMiCittc2dzdHIgIuS4jeiDveiugOWPliAnJXMn77yaJXMiCisKKyM6IHNlcXVlbmNlci5jOjI4ODUKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICLmhI/lpJbnmoTmqpTmoYjntZDmnZ8iCisKKyM6IHNlcXVlbmNlci5jOjI4OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICLlhLLlrZjmj4Dpgbjmj5DkuqTliY3nmoQgSEVBRCDmqpTmoYggJyVzJyDmkI3lo54iCisKKyM6IHNlcXVlbmNlci5jOjI5MDIKK21zZ2lkICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQuIE5vdCByZXdpbmRpbmcsIGNoZWNrIHlvdXIgSEVBRCEiCittc2dzdHIgIuaCqOWlveWDj+enu+WLleS6hiBIRUFE44CC5pyq6IO96YKE5Y6f77yM5qqi5p+l5oKo55qEIEhFQUTvvIEiCisKKyM6IHNlcXVlbmNlci5jOjI5NDMKK21zZ2lkICJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIuaykuacieato+WcqOmAsuihjOeahOmChOWOnyIKKworIzogc2VxdWVuY2VyLmM6Mjk1MQorbXNnaWQgIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIgorbXNnc3RyICLmspLmnInmraPlnKjpgLLooYznmoTmj4DpgbgiCisKKyM6IHNlcXVlbmNlci5jOjI5NjEKK21zZ2lkICJmYWlsZWQgdG8gc2tpcCB0aGUgY29tbWl0IgorbXNnc3RyICLnhKHms5Xot7PpgY7pgJnlgIvmj5DkuqQiCisKKyM6IHNlcXVlbmNlci5jOjI5NjgKK21zZ2lkICJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiCittc2dzdHIgIuaykuacieimgei3s+mBjueahCIKKworIzogc2VxdWVuY2VyLmM6Mjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/XG4iCisidHJ5IFwiZ2l0ICVzIC0tY29udGludWVcIiIKK21zZ3N0ciAiIgorIuaCqOW3sue2k+aPkOS6pOS6huWXju+8n1xuIgorIuippuippiBcImdpdCAlcyAtLWNvbnRpbnVlXCIiCisKKyM6IHNlcXVlbmNlci5jOjMwOTUgc2VxdWVuY2VyLmM6NDEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlICVzIgorbXNnc3RyICLkuI3og73mm7TmlrAgJXMiCisKKyM6IHNlcXVlbmNlci5jOjMxMzQgc2VxdWVuY2VyLmM6NDEwMQorbXNnaWQgImNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIuS4jeiDveiugOWPliBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzozMTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi54Sh5rOV6KSH6KO9ICclcycg6IezICclcyciCisKKyM6IHNlcXVlbmNlci5jOjMxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLmgqjnj77lnKjlj6/ku6Xkv67oo5zpgJnlgIvmj5DkuqTvvIzkvb/nlKhcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgLS1hbWVuZCAlc1xuIgorIlxuIgorIueVtuaCqOWwjeiuiuabtOaEn+WIsOa7v+aEj++8jOWft+ihjFxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisKKyM6IHNlcXVlbmNlci5jOjMxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiCittc2dzdHIgIuS4jeiDveaHieeUqCAlcy4uLiAlLipzIgorCisjOiBzZXF1ZW5jZXIuYzozMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtZXJnZSAlLipzIgorbXNnc3RyICLkuI3og73lkIjkvbUgJS4qcyIKKworIzogc2VxdWVuY2VyLmM6MzE5MCBzZXF1ZW5jZXIuYzozMTk0IGJ1aWx0aW4vZGlmZnRvb2wuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73opIfoo70gJyVzJyDoh7MgJyVzJyIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBzZXF1ZW5jZXIuYzozMjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleGVjdXRpb24gZmFpbGVkOiAlc1xuIgorIiVzWW91IGNhbiBmaXggdGhlIHByb2JsZW0sIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLln7fooYzlpLHmlZfvvJolc1xuIgorIiVz5oKo5Y+v5Lul5pS55q2j6Kmy5ZWP6aGM77yM54S25b6M5Z+36KGMXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKyJcbiIKKworIzogc2VxdWVuY2VyLmM6MzIyNworbXNnaWQgImFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCittc2dzdHIgIuS4puS4lOS/ruaUuee0ouW8leWSjC/miJblt6XkvZzljYBcbiIKKworIzogc2VxdWVuY2VyLmM6MzIzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZXhlY3V0aW9uIHN1Y2NlZWRlZDogJXNcbiIKKyJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1blxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisiXG4iCittc2dzdHIgIiIKKyLln7fooYzmiJDlip/vvJolc1xuIgorIuS9huaYr+WcqOe0ouW8leWSjC/miJblt6XkvZzljYDkuK3lrZjlnKjorormm7RcbiIKKyLmj5DkuqTmiJblhLLol4/kv67mlLnvvIznhLblvozln7fooYxcbiIKKyJcbiIKKyIgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorIlxuIgorCisjOiBzZXF1ZW5jZXIuYzozMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIgorbXNnc3RyICLpnZ7ms5XnmoTmqJnnsaTlkI3nqLHvvJonJS4qcyciCisKKyM6IHNlcXVlbmNlci5jOjMzNDgKK21zZ2lkICJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiCittc2dzdHIgIuWvq+WBveagueaPkOS6pCIKKworIzogc2VxdWVuY2VyLmM6MzM1MworbXNnaWQgIndyaXRpbmcgc3F1YXNoLW9udG8iCittc2dzdHIgIuWvq+WFpSBzcXVhc2gtb250byIKKworIzogc2VxdWVuY2VyLmM6MzM5MSBidWlsdGluL3JlYmFzZS5jOjg3NiBidWlsdGluL3JlYmFzZS5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIgorbXNnc3RyICLnhKHms5Xmib7liLAgJXMg5oyH5ZCR55qE5qi544CCIgorCisjOiBzZXF1ZW5jZXIuYzozNDM2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlICclcyciCittc2dzdHIgIueEoeazleino+aekCAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzozNDY3Cittc2dpZCAiY2Fubm90IG1lcmdlIHdpdGhvdXQgYSBjdXJyZW50IHJldmlzaW9uIgorbXNnc3RyICLmspLmnInnm67liY3niYjmnKzkuI3og73lkIjkvbUiCisKKyM6IHNlcXVlbmNlci5jOjM0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclLipzJyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciCittc2dzdHIgIueEoeWPr+eUqOWQiOS9te+8miclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzUxMAorbXNnaWQgIm9jdG9wdXMgbWVyZ2UgY2Fubm90IGJlIGV4ZWN1dGVkIG9uIHRvcCBvZiBhIFtuZXcgcm9vdF0iCittc2dzdHIgIueroOmtmuWQiOS4puS4jeiDveWcqOS4gOWAi+aWsOeahOagueaPkOS6pOS4iuWft+ihjCIKKworIzogc2VxdWVuY2VyLmM6MzUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIG9mICclcyciCittc2dzdHIgIuS4jeiDveWPluW+lyAnJXMnIOeahOaPkOS6pOiqquaYjiIKKworIzogc2VxdWVuY2VyLmM6MzY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIKK21zZ3N0ciAi55Sa6Iez5LiN6IO95ZiX6Kmm5ZCI5L21ICclLipzJyIKKworIzogc2VxdWVuY2VyLmM6MzcwNAorbXNnaWQgIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuWQiOS9te+8mueEoeazleWvq+WFpeaWsOe0ouW8leaqlOahiCIKKworIzogc2VxdWVuY2VyLmM6Mzc3MyBidWlsdGluL3JlYmFzZS5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC5cbiIKK21zZ3N0ciAi5bey5oeJ55SoIGF1dG9zdGFzaOOAglxuIgorCisjOiBzZXF1ZW5jZXIuYzozNzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdG9yZSAlcyIKK21zZ3N0ciAi5LiN6IO95YSy5a2YICVzIgorCisjOiBzZXF1ZW5jZXIuYzozNzg4IGJ1aWx0aW4vcmViYXNlLmM6NzQ5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyLmh4nnlKggYXV0b3N0YXNoIOWwjuiHtOihneeqgeOAglxuIgorIuaCqOeahOS/ruaUueWuieWFqOWcsOWEsuWtmOWcqOWEsuiXj+WNgOS4reOAglxuIgorIuaCqOWPr+S7peWcqOS7u+S9leaZguWAmeWft+ihjCBcImdpdCBzdGFzaCBwb3BcIiDmiJYgXCJnaXQgc3Rhc2ggZHJvcFwi44CCXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICLkuI3og73nsL3lh7ogJXMiCisKKyM6IHNlcXVlbmNlci5jOjM4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vdCBhIHZhbGlkIE9JRCIKK21zZ3N0ciAiJXPvvJrkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7YgSUQiCisKKyM6IHNlcXVlbmNlci5jOjM4NjggZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc3OQorbXNnaWQgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKK21zZ3N0ciAi5LiN6IO95YiG6Zui6ZaL6aCt5oyH5qiZIgorCisjOiBzZXF1ZW5jZXIuYzozODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgSEVBRFxuIgorbXNnc3RyICLlgZzmraLlnKggSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXNcbiIKK21zZ3N0ciAi5YGc5q2i5ZyoICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjM4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBleGVjdXRlIHRoZSB0b2RvIGNvbW1hbmRcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyLnhKHms5Xln7fooYzlvoXovqbmjIfku6RcbiIKKyJcbiIKKyIgICAgJS4qc1xuIgorIuW3suiiq+mHjeaWsOWuieaOku+8jOWcqOe5vOe6jOS5i+WJjee3qOi8r+aMh+S7pO+8jOiri+WFiOe3qOi8r+W+hei+puWIl+ihqO+8mlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlIC0tZWRpdC10b2RvXG4iCisiICAgIGdpdCByZWJhc2UgLS1jb250aW51ZVxuIgorCisjOiBzZXF1ZW5jZXIuYzozOTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0b3BwZWQgYXQgJXMuLi4gICUuKnNcbiIKK21zZ3N0ciAi5YGc5q2i5ZyoICVzLi4uICUuKnNcbiIKKworIzogc2VxdWVuY2VyLmM6NDA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGNvbW1hbmQgJWQiCittc2dzdHIgIuacquefpeaMh+S7pCAlZCIKKworIzogc2VxdWVuY2VyLmM6NDEwOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIG9yaWctaGVhZCIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WIG9yaWctaGVhZCIKKworIzogc2VxdWVuY2VyLmM6NDExNAorbXNnaWQgImNvdWxkIG5vdCByZWFkICdvbnRvJyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WICdvbnRvJyIKKworIzogc2VxdWVuY2VyLmM6NDEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdXBkYXRlIEhFQUQgdG8gJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCBIRUFEIOeCuiAlcyIKKworIzogc2VxdWVuY2VyLmM6NDIyMQorbXNnaWQgImNhbm5vdCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73ph43lrprln7rlupXvvJrmgqjmnInmnKrmmqvlrZjnmoTorormm7TjgIIiCisKKyM6IHNlcXVlbmNlci5jOjQyMzAKK21zZ2lkICJjYW5ub3QgYW1lbmQgbm9uLWV4aXN0aW5nIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L+u6KOc5LiN5a2Y5Zyo55qE5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzo0MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZmlsZTogJyVzJyIKK21zZ3N0ciAi54Sh5pWI5qqU5qGI77yaJyVzJyIKKworIzogc2VxdWVuY2VyLmM6NDIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbnRlbnRzOiAnJXMnIgorbXNnc3RyICLnhKHmlYjlhaflrrnvvJonJXMnIgorCisjOiBzZXF1ZW5jZXIuYzo0MjM3Cittc2dpZCAiIgorIlxuIgorIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW1cbiIKKyJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgLS1jb250aW51ZScgYWdhaW4uIgorbXNnc3RyICIiCisiXG4iCisi5oKo55qE5bel5L2c5Y2A5Lit5pyJ5pyq5o+Q5Lqk55qE6K6K5pu044CC6KuL5YWI5o+Q5Lqk54S25b6M5YaN5qyh5Z+36KGMICdnaXQgcmViYXNlIC0tY29udGludWUn44CCIgorCisjOiBzZXF1ZW5jZXIuYzo0MjczIHNlcXVlbmNlci5jOjQzMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciCittc2dzdHIgIuS4jeiDveWvq+WFpeaqlOahiO+8miclcyciCisKKyM6IHNlcXVlbmNlci5jOjQzMjcKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiCittc2dzdHIgIuS4jeiDveWIqumZpCBDSEVSUllfUElDS19IRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo0MzM0Cittc2dpZCAiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDveaPkOS6pOaaq+WtmOeahOS/ruaUueOAgiIKKworIzogc2VxdWVuY2VyLmM6NDQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXPvvJrkuI3og73mj4DpgbjkuIDlgIslcyIKKworIzogc2VxdWVuY2VyLmM6NDQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlc++8mumMr+iqpOeahOeJiOacrCIKKworIzogc2VxdWVuY2VyLmM6NDQ3OQorbXNnaWQgImNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi5LiN6IO95L2c54K65Yid5aeL5o+Q5Lqk6YKE5Y6f5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzo0OTUyCittc2dpZCAibWFrZV9zY3JpcHQ6IHVuaGFuZGxlZCBvcHRpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdO+8muacieacquiDveiZleeQhueahOmBuOmghSIKKworIzogc2VxdWVuY2VyLmM6NDk1NQorbXNnaWQgIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIgorbXNnc3RyICJtYWtlX3NjcmlwdO+8mua6luWCmeeJiOacrOaZgumMr+iqpCIKKworIzogc2VxdWVuY2VyLmM6NTExMworbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZScuXG4iCisiT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuXG4iCittc2dzdHIgIiIKKyLmgqjlj6/ku6XnlKggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nIOS/ruato++8jOeEtuW+jOWft+ihjCAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJ+OAglxuIgorIuaIluiAheaCqOWPr+S7peeUqCAnZ2l0IHJlYmFzZSAtLWFib3J0JyDntYLmraLph43lrprln7rlupXjgIJcbiIKKworIzogc2VxdWVuY2VyLmM6NTIyNiBzZXF1ZW5jZXIuYzo1MjQzCittc2dpZCAibm90aGluZyB0byBkbyIKK21zZ3N0ciAi54Sh5LqL5Y+v5YGaIgorCisjOiBzZXF1ZW5jZXIuYzo1MjU3Cittc2dpZCAiY291bGQgbm90IHNraXAgdW5uZWNlc3NhcnkgcGljayBjb21tYW5kcyIKK21zZ3N0ciAi54Sh5rOV6Lez6YGO5LiN5b+F6KaB55qE5o+A6YG4IgorCisjOiBzZXF1ZW5jZXIuYzo1MzUxCittc2dpZCAidGhlIHNjcmlwdCB3YXMgYWxyZWFkeSByZWFycmFuZ2VkLiIKK21zZ3N0ciAi6IWz5pys5bey57aT6YeN5paw57eo5o6S44CCIgorCisjOiBzZXR1cC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJyVzJyDlnKjniYjmnKzluqvkuYvlpJYiCisKKyM6IHNldHVwLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICdnaXQgPGNvbW1hbmQ+IC0tIDxwYXRoPi4uLicgdG8gc3BlY2lmeSBwYXRocyB0aGF0IGRvIG5vdCBleGlzdCBsb2NhbGx5LiIKK21zZ3N0ciAiIgorIiVz77ya5bel5L2c5Y2A5Lit54Sh5q2k6Lev5b6R44CCXG4iCisi5L2/55So5oyH5LukICdnaXQgPOaMh+S7pD4gLS0gPOi3r+W+kT4uLi4nIOS+huaMh+WumuacrOapn+S4jeWtmOWcqOeahOi3r+W+keOAgiIKKworIzogc2V0dXAuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiB1bmtub3duIHJldmlzaW9uIG9yIHBhdGggbm90IGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKyInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIgorbXNnc3RyICIiCisi5pyJ5q2n576p55qE5Y+D5pW4ICclcyfvvJrmnKrnn6XnmoTniYjmnKzmiJbot6/lvpHkuI3lrZjlnKjmlrzlt6XkvZzljYDkuK3jgIJcbiIKKyLkvb/nlKggJy0tJyDkvobliIbpmpTniYjmnKzlkozot6/lvpHvvIzkvovlpoLvvJpcbiIKKyInZ2l0IDzmjIfku6Q+IFs854mI5pysPi4uLl0gLS0gWzzmqpTmoYg+Li4uXSciCisKKyM6IHNldHVwLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiAnJXMnIG11c3QgY29tZSBiZWZvcmUgbm9uLW9wdGlvbiBhcmd1bWVudHMiCittc2dzdHIgIumBuOmghSAnJXMnIOW/hemgiOWcqOWFtuS7lumdnumBuOmgheWPg+aVuOS5i+WJjSIKKworIzogc2V0dXAuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIKK21zZ3N0ciAiIgorIuacieatp+e+qeeahOWPg+aVuCAnJXMn77ya5Y+v5ZCM5pmC5piv54mI5pys5ZKM5qqU5qGIXG4iCisi5L2/55SoICctLScg5L6G5YiG6ZqU54mI5pys5ZKM6Lev5b6R77yM5L6L5aaC77yaXG4iCisiJ2dpdCA85oyH5LukPiBbPOeJiOacrD4uLi5dIC0tIFs85qqU5qGIPi4uLl0nIgorCisjOiBzZXR1cC5jOjM5MQorbXNnaWQgInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIgorbXNnc3RyICLnhKHms5Xkvb/nlKjnhKHmlYjoqK3lrprkvoblu7rnq4vlt6XkvZzljYAiCisKKyM6IHNldHVwLmM6Mzk1Cittc2dpZCAidGhpcyBvcGVyYXRpb24gbXVzdCBiZSBydW4gaW4gYSB3b3JrIHRyZWUiCittc2dzdHIgIuipsuWLleS9nOW/hemgiOWcqOS4gOWAi+W3peS9nOWNgOS4reWft+ihjCIKKworIzogc2V0dXAuYzo1NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiCittc2dzdHIgIuacn+acmyBnaXQg54mI5pys5bqr54mI5pysIDw9ICVk77yM5Y275b6X5YiwICVkIgorCisjOiBzZXR1cC5jOjU0OQorbXNnaWQgInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb25zIGZvdW5kOiIKK21zZ3N0ciAi55m854++5pyq55+l55qE54mI5pys5bqr5pO05bGV77yaIgorCisjOiBzZXR1cC5jOjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciBvcGVuaW5nICclcyciCittc2dzdHIgIumWi+WVnyAnJXMnIOeZvOeUn+mMr+iqpCIKKworIzogc2V0dXAuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIGxhcmdlIHRvIGJlIGEgLmdpdCBmaWxlOiAnJXMnIgorbXNnc3RyICLmqpTmoYjlpKrlpKfvvIznhKHms5XkvZzngrogLmdpdCDmqpTmoYjvvJonJXMnIgorCisjOiBzZXR1cC5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nICVzIgorbXNnc3RyICLoroDlj5YgJXMg55m855Sf6Yyv6KqkIgorCisjOiBzZXR1cC5jOjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi54Sh5pWI55qEIGdpdGZpbGUg5qC85byP77yaJXMiCisKKyM6IHNldHVwLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHBhdGggaW4gZ2l0ZmlsZTogJXMiCittc2dzdHIgIuWcqCBnaXRmaWxlIOS4reaykuaciei3r+W+ke+8miVzIgorCisjOiBzZXR1cC5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIuS4jeaYr+S4gOWAiyBnaXQg54mI5pys5bqr77yaJXMiCisKKyM6IHNldHVwLmM6Njc3CisjLCBjLWZvcm1hdAorbXNnaWQgIickJXMnIHRvbyBiaWciCittc2dzdHIgIickJXMnIOWkquWkpyIKKworIzogc2V0dXAuYzo2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciCittc2dzdHIgIuS4jeaYr+S4gOWAiyBnaXQg54mI5pys5bqr77yaJyVzJyIKKworIzogc2V0dXAuYzo3MjAgc2V0dXAuYzo3MjIgc2V0dXAuYzo3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICclcyciCittc2dzdHIgIuS4jeiDveWIh+aPm+ebrumMhOWIsCAnJXMnIgorCisjOiBzZXR1cC5jOjcyNSBzZXR1cC5jOjc4MSBzZXR1cC5jOjc5MSBzZXR1cC5jOjgzMCBzZXR1cC5jOjgzOAorbXNnaWQgImNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLnhKHms5Xov5Tlm57nm67liY3lt6XkvZznm67pjIQiCisKKyM6IHNldHVwLmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclKnMlcyVzJyIKK21zZ3N0ciAi5Y+W5b6XICclKnMlcyVzJyDni4DmhYvvvIhzdGF077yJ5aSx5pWXIgorCisjOiBzZXR1cC5jOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3og73oroDlj5bnm67liY3lt6XkvZznm67pjIQiCisKKyM6IHNldHVwLmM6MTA5OSBzZXR1cC5jOjExMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoYW5nZSB0byAnJXMnIgorbXNnc3RyICLkuI3og73liIfmj5vliLAgJyVzJyIKKworIzogc2V0dXAuYzoxMTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIsgZ2l0IOeJiOacrOW6q++8iOaIluiAheS7u+S9leeItuebrumMhO+8ie+8miVzIgorCisjOiBzZXR1cC5jOjExMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50ICVzKVxuIgorIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIgorbXNnc3RyICIiCisi5LiN5piv5LiA5YCLIGdpdCDniYjmnKzluqvvvIjmiJbogIXnm7Toh7PmjpvovInpu54gJXMg55qE5Lu75L2V54i255uu6YyE77yJXG4iCisi5YGc5q2i5Zyo5qqU5qGI57O757Wx6YKK55WM77yI5pyq6Kit5a6aIEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU3vvInjgIIiCisKKyM6IHNldHVwLmM6MTIyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisicHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAoMCUuM28pLlxuIgorIlRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIKK21zZ3N0ciAiIgorIuWPg+aVuCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkg55qE5qqU5qGI5bGs5oCn5YC85pyJ5ZWP6aGM77yIMCUuM2/vvInjgIJcbiIKKyLmqpTmoYjmiYDmnInogIXlv4XpoIjlp4vntYLmk4HmnInoroDlr6vmrIrpmZDjgIIiCisKKyM6IHNldHVwLmM6MTI3MQorbXNnaWQgIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiCittc2dzdHIgIuS4jeiDvemWi+WVn+aIluiAheikh+ijvSAvZGV2L251bGwiCisKKyM6IHNldHVwLmM6MTI4NgorbXNnaWQgImZvcmsgZmFpbGVkIgorbXNnc3RyICJmb3JrIOWkseaVlyIKKworIzogc2V0dXAuYzoxMjkxCittc2dpZCAic2V0c2lkIGZhaWxlZCIKK21zZ3N0ciAic2V0c2lkIOWkseaVlyIKKworIzogc2hhMS1maWxlLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3Q7IGNoZWNrIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiCittc2dzdHIgIueJqeS7tuebrumMhCAlcyDkuI3lrZjlnKjvvIzmqqLmn6UgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKworIzogc2hhMS1maWxlLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBub3JtYWxpemUgYWx0ZXJuYXRlIG9iamVjdCBwYXRoOiAlcyIKK21zZ3N0ciAi54Sh5rOV6KaP56+E5YyW5YKZ55So54mp5Lu26Lev5b6R77yaJXMiCisKKyM6IHNoYTEtZmlsZS5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiCittc2dzdHIgIiVz77ya5b+955Wl5YKZ55So54mp5Lu25bqr77yM5bWM5aWX5aSq5rexIgorCisjOiBzaGExLWZpbGUuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG5vcm1hbGl6ZSBvYmplY3QgZGlyZWN0b3J5OiAlcyIKK21zZ3N0ciAi54Sh5rOV6KaP56+E5YyW54mp5Lu255uu6YyEOiAlcyIKKworIzogc2hhMS1maWxlLmM6NjI1Cittc2dpZCAidW5hYmxlIHRvIGZkb3BlbiBhbHRlcm5hdGVzIGxvY2tmaWxlIgorbXNnc3RyICLnhKHms5UgZmRvcGVuIOWPluS7o+mOluaqlOahiCIKKworIzogc2hhMS1maWxlLmM6NjQzCittc2dpZCAidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICLnhKHms5XoroDlj5bmm7/ku6PmqpTmoYgiCisKKyM6IHNoYTEtZmlsZS5jOjY1MAorbXNnaWQgInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIKK21zZ3N0ciAi54Sh5rOV5bCH5paw55qE5pu/5Luj5qqU5qGI56e75YuV5Yiw5L2NIgorCisjOiBzaGExLWZpbGUuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLot6/lvpEgJyVzJyDkuI3lrZjlnKgiCisKKyM6IHNoYTEtZmlsZS5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkIGNoZWNrb3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIKK21zZ3N0ciAi5bCa5LiN5pSv5o+05bCH5Y+D6ICD54mI5pys5bqrICclcycg5L2c54K65LiA5YCL6YCj57WQ57C95Ye644CCIgorCisjOiBzaGExLWZpbGUuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAi5Y+D6ICD54mI5pys5bqrICclcycg5LiN5piv5LiA5YCL5pys5qmf54mI5pys5bqr44CCIgorCisjOiBzaGExLWZpbGUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICLlj4PogIPniYjmnKzluqsgJyVzJyDmmK/kuIDlgIvmt7ropIfoo70iCisKKyM6IHNoYTEtZmlsZS5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiCittc2dzdHIgIuWPg+iAg+eJiOacrOW6qyAnJXMnIOW3suiiq+enu+akjSIKKworIzogc2hhMS1maWxlLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIKK21zZ3N0ciAi6Kej5p6Q5YKZ55So5byV55So5pmC54Sh5pWI55qE6KGM77yaJXMiCisKKyM6IHNoYTEtZmlsZS5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICJhdHRlbXB0aW5nIHRvIG1tYXAgJTxQUkl1TUFYPiBvdmVyIGxpbWl0ICU8UFJJdU1BWD4iCittc2dzdHIgIuWYl+ippiBtbWFwICU8UFJJdU1BWD7vvIzotoXpgY7kuobmnIDlpKflgLwgJTxQUkl1TUFYPiIKKworIzogc2hhMS1maWxlLmM6OTY0Cittc2dpZCAibW1hcCBmYWlsZWQiCittc2dzdHIgIm1tYXAg5aSx5pWXIgorCisjOiBzaGExLWZpbGUuYzoxMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCBmaWxlICVzIGlzIGVtcHR5IgorbXNnc3RyICLnianku7bmqpTmoYggJXMg54K656m6IgorCisjOiBzaGExLWZpbGUuYzoxMjUyIHNoYTEtZmlsZS5jOjIzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAi5pCN5aOe55qE6ayG5pWj54mp5Lu2ICclcyciCisKKyM6IHNoYTEtZmlsZS5jOjEyNTQgc2hhMS1maWxlLmM6MjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJnYXJiYWdlIGF0IGVuZCBvZiBsb29zZSBvYmplY3QgJyVzJyIKK21zZ3N0ciAi6ayG5pWj54mp5Lu2ICclcycg5b6M6Z2i5pyJ5Z6D5Zy+6LOH5paZIgorCisjOiBzaGExLWZpbGUuYzoxMjk2Cittc2dpZCAiaW52YWxpZCBvYmplY3QgdHlwZSIKK21zZ3N0ciAi54Sh5pWI55qE54mp5Lu26aGe5Z6LIgorCisjOiBzaGExLWZpbGUuYzoxMzgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiCittc2dzdHIgIueEoeazleeUqCAtLWFsbG93LXVua25vd24tdHlwZSDlj4Pmlbjop6PplosgJXMg5qiZ6aCt6KiK5oGvIgorCisjOiBzaGExLWZpbGUuYzoxMzgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIgorbXNnc3RyICLnhKHms5Xop6PplosgJXMg6aCt6YOoIgorCisjOiBzaGExLWZpbGUuYzoxMzg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIKK21zZ3N0ciAi54Sh5rOV55SoIC0tYWxsb3ctdW5rbm93bi10eXBlIOWPg+aVuOino+aekCAlcyDmqJnpoK3oqIrmga8iCisKKyM6IHNoYTEtZmlsZS5jOjEzOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICVzIOmgremDqCIKKworIzogc2hhMS1maWxlLmM6MTU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIuiugOWPlueJqeS7tiAlcyDlpLHmlZciCisKKyM6IHNoYTEtZmlsZS5jOjE1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwbGFjZW1lbnQgJXMgbm90IGZvdW5kIGZvciAlcyIKK21zZ3N0ciAi5om+5LiN5YiwICUyJHMg55qE5pu/5LujICUxJHMiCisKKyM6IHNoYTEtZmlsZS5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIumshuaVo+eJqeS7tiAlc++8iOWEsuWtmOWcqCAlc++8ieW3suaQjeWjniIKKworIzogc2hhMS1maWxlLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZWQgb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiCittc2dzdHIgIuaJk+WMheeJqeS7tiAlc++8iOWEsuWtmOWcqCAlc++8ieW3suaQjeWjniIKKworIzogc2hhMS1maWxlLmM6MTY5OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIKK21zZ3N0ciAi54Sh5rOV5a+r5qqU5qGIICVzIgorCisjOiBzaGExLWZpbGUuYzoxNzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIgorbXNnc3RyICLnhKHms5XngrogJyVzJyDoqK3lrprmrIrpmZAiCisKKyM6IHNoYTEtZmlsZS5jOjE3MTMKK21zZ2lkICJmaWxlIHdyaXRlIGVycm9yIgorbXNnc3RyICLmqpTmoYjlr6vpjK/oqqQiCisKKyM6IHNoYTEtZmlsZS5jOjE3MzIKK21zZ2lkICJlcnJvciB3aGVuIGNsb3NpbmcgbG9vc2Ugb2JqZWN0IGZpbGUiCittc2dzdHIgIumXnOmWiemshuaVo+eJqeS7tuaqlOahiOaZgueZvOeUn+mMr+iqpCIKKworIzogc2hhMS1maWxlLmM6MTc5NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIgorbXNnc3RyICLmrIrpmZDkuI3otrPvvIznhKHms5XlnKjniYjmnKzluqvnianku7bluqsgJXMg5Lit5paw5aKe54mp5Lu2IgorCisjOiBzaGExLWZpbGUuYzoxNzk5Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIKK21zZ3N0ciAi54Sh5rOV5bu656uL5pqr5a2Y5qqUIgorCisjOiBzaGExLWZpbGUuYzoxODIzCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGxvb3NlIG9iamVjdCBmaWxlIgorbXNnc3RyICLkuI3og73lr6vprIbmlaPnianku7bmqpTmoYgiCisKKyM6IHNoYTEtZmlsZS5jOjE4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgbmV3IG9iamVjdCAlcyAoJWQpIgorbXNnc3RyICLkuI3og73lo5PnuK7mlrDnianku7YgJXPvvIglZO+8iSIKKworIzogc2hhMS1maWxlLmM6MTgzMworIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlRW5kIG9uIG9iamVjdCAlcyBmYWlsZWQgKCVkKSIKK21zZ3N0ciAi5Zyo54mp5Lu2ICVzIOS4iuWRvOWPqyBkZWZsYXRlRW5kIOWkseaVl++8iCVk77yJIgorCisjOiBzaGExLWZpbGUuYzoxODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiCittc2dzdHIgIuiiqyAlcyDnmoTkuI3nqanlrprnianku7bmupDos4fmlpnmkJ7ns4rloZfkuoYiCisKKyM6IHNoYTEtZmlsZS5jOjE4NDcgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHV0aW1lKCkgb24gJXMiCittc2dzdHIgIuWcqCAlcyDkuIrlkbzlj6sgdXRpbWUoKSDlpLHmlZciCisKKyM6IHNoYTEtZmlsZS5jOjE5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+W54mp5Lu2ICVzIgorCisjOiBzaGExLWZpbGUuYzoxOTYyCittc2dpZCAiY29ycnVwdCBjb21taXQiCittc2dzdHIgIuaQjeWjnueahOaPkOS6pCIKKworIzogc2hhMS1maWxlLmM6MTk3MAorbXNnaWQgImNvcnJ1cHQgdGFnIgorbXNnc3RyICLmkI3lo57nmoTmqJnnsaQiCisKKyM6IHNoYTEtZmlsZS5jOjIwNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIKK21zZ3N0ciAi57Si5byVICVzIOaZguiugOWPlumMr+iqpCIKKworIzogc2hhMS1maWxlLmM6MjA3MgorIywgYy1mb3JtYXQKK21zZ2lkICJzaG9ydCByZWFkIHdoaWxlIGluZGV4aW5nICVzIgorbXNnc3RyICLntKLlvJUgJXMg5pmC6K6A5YWl5LiN5a6M5pW0IgorCisjOiBzaGExLWZpbGUuYzoyMTQ1IHNoYTEtZmlsZS5jOjIxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIKK21zZ3N0ciAiJXPvvJrmj5LlhaXos4fmlpnluqvlpLHmlZciCisKKyM6IHNoYTEtZmlsZS5jOjIxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIKK21zZ3N0ciAiJXPvvJrkuI3mlK/mj7TnmoTmqpTmoYjpoZ7lnosiCisKKyM6IHNoYTEtZmlsZS5jOjIxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IgorbXNnc3RyICIlcyDkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7YiCisKKyM6IHNoYTEtZmlsZS5jOjIxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIOS4jeaYr+S4gOWAi+acieaViOeahCAnJXMnIOeJqeS7tiIKKworIzogc2hhMS1maWxlLmM6MjIxMyBidWlsdGluL2luZGV4LXBhY2suYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgIuS4jeiDvemWi+WVnyAlcyIKKworIzogc2hhMS1maWxlLmM6MjQwMyBzaGExLWZpbGUuYzoyNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiCittc2dzdHIgIiVzIOeahOmbnOa5iuWAvOS4jeespuWQiO+8iOmgkOacnyAlc++8iSIKKworIzogc2hhMS1maWxlLmM6MjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW1hcCAlcyIKK21zZ3N0ciAi5LiN6IO9IG1tYXAgJXMiCisKKyM6IHNoYTEtZmlsZS5jOjI0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiCittc2dzdHIgIueEoeazleino+Wjk+e4riAlcyDnmoTpoK3pg6giCisKKyM6IHNoYTEtZmlsZS5jOjI0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGhlYWRlciBvZiAlcyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICVzIOeahOmgremDqCIKKworIzogc2hhMS1maWxlLmM6MjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdW5wYWNrIGNvbnRlbnRzIG9mICVzIgorbXNnc3RyICLnhKHms5Xop6Plo5PnuK4gJXMg55qE5YWn5a65IgorCisjOiBzaGExLW5hbWUuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2hvcnQgU0hBMSAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIuefrSBTSEExICVzIOWtmOWcqOatp+e+qSIKKworIzogc2hhMS1uYW1lLmM6NDk4Cittc2dpZCAiVGhlIGNhbmRpZGF0ZXMgYXJlOiIKK21zZ3N0ciAi5YCZ6YG46ICF5pyJ77yaIgorCisjOiBzaGExLW5hbWUuYzo3OTcKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgc3dpdGNoIC1jICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICIiCisiR2l0IOmAmuW4uOS4jeacg+W7uueri+S4gOWAi+S7pTQw5YCL5Y2B5YWt6YCy5L2N5a2X5YWD57WQ5bC+55qE5byV55So77yM5Zug54K655W25oKo5Y+q5o+Q5L6bNDBcbiIKKyLlgIvljYHlha3pgLLkvY3lrZflhYPmmYLlsIfooqvlv73nlaXjgILpgJnkupvlvJXnlKjlj6/og73ooqvpjK/oqqTlnLDlu7rnq4vjgILkvovlpoLvvJpcbiIKKyJcbiIKKyIgIGdpdCBzd2l0Y2ggLWMgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisi55W2IFwiJGJyXCIg5p+Q56iu5Y6f5Zug56m655m95pmC77yM5LiA5YCLNDDkvY3ljYHlha3pgLLkvY3nmoTlvJXnlKjlsIfooqvlu7rnq4vjgILoq4vmqqLmn6XpgJnkuptcbiIKKyLlvJXnlKjvvIzlj6/og73pnIDopoHliKrpmaTlroPlgJHjgILln7fooYwgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZ1xuIgorImZhbHNlXCIg5oyH5Luk6Zec6ZaJ5pys5raI5oGv6YCa55+l44CCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggZ2liaWJ5dGUKKyM6IHN0cmJ1Zi5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBHaUIiCittc2dzdHIgIiV1LiUyLjJ1IEdpQiIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZAorIzogc3RyYnVmLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEdpQi9zIgorbXNnc3RyICIldS4lMi4ydSBHaUIvcyIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IG1lYmlieXRlCisjOiBzdHJidWYuYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgTWlCIgorbXNnc3RyICIldS4lMi4ydSBNaUIiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQKKyM6IHN0cmJ1Zi5jOjgzNAorIywgYy1mb3JtYXQKK21zZ2lkICIldS4lMi4ydSBNaUIvcyIKK21zZ3N0ciAiJXUuJTIuMnUgTWlCL3MiCisKKyMuIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBraWJpYnl0ZQorIzogc3RyYnVmLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1LiUyLjJ1IEtpQiIKK21zZ3N0ciAiJXUuJTIuMnUgS2lCIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDgga2liaWJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUuJTIuMnUgS2lCL3MiCittc2dzdHIgIiV1LiUyLjJ1IEtpQi9zIgorCisjLiBUUkFOU0xBVE9SUzogSUVDIDgwMDAwLTEzOjIwMDggYnl0ZQorIzogc3RyYnVmLmM6ODQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJ5dGUiCittc2dpZF9wbHVyYWwgIiV1IGJ5dGVzIgorbXNnc3RyWzBdICIldSDkvY3lhYPntYQiCittc2dzdHJbMV0gIiV1IOS9jeWFg+e1hCIKKworIy4gVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kCisjOiBzdHJidWYuYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnl0ZS9zIgorbXNnaWRfcGx1cmFsICIldSBieXRlcy9zIgorbXNnc3RyWzBdICIldSDkvY3lhYPntYQv56eSIgorbXNnc3RyWzFdICIldSDkvY3lhYPntYQv56eSIgorCisjOiBzdHJidWYuYzoxMTQ5CisjLCBjLWZvcm1hdAorI3wgbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dpZCAiY291bGQgbm90IGVkaXQgJyVzJyIKK21zZ3N0ciAi54Sh5rOV57eo6LyvICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjExNCBzdWJtb2R1bGUuYzoxNDMKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAi54Sh5rOV5L+u5pS55pyq5ZCI5L2155qEIC5naXRtb2R1bGVz77yM5YWI6Kej5rG65ZCI5L216KGd56qBIgorCisjOiBzdWJtb2R1bGUuYzoxMTggc3VibW9kdWxlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAi54Sh5rOV5ZyoIC5naXRtb2R1bGVzIOS4reaJvuWIsCBwYXRoPSVzIOeahOWwj+evgCIKKworIzogc3VibW9kdWxlLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICLnhKHms5Xnp7vpmaQgJXMg55qEIC5naXRtb2R1bGVzIOaineebriIKKworIzogc3VibW9kdWxlLmM6MTY1Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAi5bCH5pu05paw5b6MIC5naXRtb2R1bGVzIOaWsOWinuaaq+WtmOWNgOWkseaVlyIKKworIzogc3VibW9kdWxlLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgImluIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLkvY3mlrzmnKrnsL3lh7rnmoTlrZDmqKHntYQgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi6Lev5b6R6KaP5qC8ICclcycg5Zyo5a2Q5qih57WEICclLipzJyDkuK0iCisKKyM6IHN1Ym1vZHVsZS5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZW50cnkgJyVzJyAoJXMpIGlzIGEgJXMsIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAi5a2Q5qih57WE5qKd55uuICclcyfvvIglc++8ieaYr+S4gOWAiyAlc++8jOS4jeaYr+S4gOWAi+aPkOS6pCIKKworIzogc3VibW9kdWxlLmM6MTE0NyBidWlsdGluL2JyYW5jaC5jOjY4MCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjAxNgorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLnhKHms5XlsIcgSEVBRCDop6PmnpDngrrmnInmlYjlvJXnlKjjgIIiCisKKyM6IHN1Ym1vZHVsZS5jOjE0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFjY2VzcyBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5a2Y5Y+W5a2Q5qih57WEICclcyciCisKKyM6IHN1Ym1vZHVsZS5jOjE2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBub3QgcmVjb2duaXplZCBhcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLnhKHms5XlsIcgJyVzJyDorZjliKXngrrkuIDlgIsgZ2l0IOeJiOacrOW6qyIKKworIzogc3VibW9kdWxlLmM6MTc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhcnQgJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLnhKHms5XlnKjlrZDmqKHntYQgJyVzJyDkuK3llZ/li5UgJ2dpdCBzdGF0dXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLnhKHms5XlnKjlrZDmqKHntYQgJyVzJyDkuK3ln7fooYwgJ2dpdCBzdGF0dXMnIgorCisjOiBzdWJtb2R1bGUuYzoxODE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1bnNldCBjb3JlLndvcmt0cmVlIHNldHRpbmcgaW4gc3VibW9kdWxlICclcyciCittc2dzdHIgIueEoeazleWcqOWtkOaooee1hCAnJXMnIOS4reWPlua2iCBjb3JlLndvcmt0cmVlIOeahOioreWumiIKKworIzogc3VibW9kdWxlLmM6MTkwNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgJyVzJyBoYXMgZGlydHkgaW5kZXgiCittc2dzdHIgIuWtkOaooee1hCAnJXMnIOS4reaciemrkue0ouW8lSIKKworIzogc3VibW9kdWxlLmM6MTk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyBjb3VsZCBub3QgYmUgdXBkYXRlZC4iCittc2dzdHIgIuWtkOaooee1hCAnJXMnIOeEoeazleiiq+abtOaWsOOAgiIKKworIzogc3VibW9kdWxlLmM6MjAyNworIywgYy1mb3JtYXQKK21zZ2lkICJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzIGluc2lkZSBnaXQgZGlyICclLipzJyIKK21zZ3N0ciAi44CMJXPjgI3lrZDmqKHntYQgZ2l0IOebrumMhOWcqOOAjCUuKnPjgI1naXQg6Lev5b6R5LitIgorCisjOiBzdWJtb2R1bGUuYzoyMDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggbW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mj7TlsI3mnInlpJrlgIvlt6XkvZzljYDnmoTlrZDmqKHntYQgJyVzJyDln7fooYwgcmVsb2NhdGVfZ2l0ZGlyIgorCisjOiBzdWJtb2R1bGUuYzoyMDYwIHN1Ym1vZHVsZS5jOjIxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95p+l6Kmi5a2Q5qih57WEICclcycg55qE5ZCN56ixIgorCisjOiBzdWJtb2R1bGUuYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiCittc2dzdHIgIuaLkue1leenu+WLleOAjCVz44CN6Iez54++5a2YIGdpdCDnm67pjIQiCisKKyM6IHN1Ym1vZHVsZS5jOjIwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1pZ3JhdGluZyBnaXQgZGlyZWN0b3J5IG9mICclcyVzJyBmcm9tXG4iCisiJyVzJyB0b1xuIgorIiclcydcbiIKK21zZ3N0ciAiIgorIuWwhyAnJXMlcycg55qEIGdpdCDnm67pjITlvp5cbiIKKyInJXMnIOmBt+enu+iHs1xuIgorIiclcydcbiIKKworIzogc3VibW9kdWxlLmM6MjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLnhKHms5XpgZ7ov7TlrZDmqKHntYTot6/lvpEgJyVzJyIKKworIzogc3VibW9kdWxlLmM6MjE5OAorbXNnaWQgImNvdWxkIG5vdCBzdGFydCBscy1maWxlcyBpbiAuLiIKK21zZ3N0ciAi54Sh5rOV5ZyoIC4uIOS4reWVn+WLlSBscy1maWxlcyIKKworIzogc3VibW9kdWxlLmM6MjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJscy10cmVlIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQiCittc2dzdHIgImxzLXRyZWUg6L+U5Zue5pyq55+l6L+U5Zue5YC8ICVkIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIgorbXNnc3RyICLlv73nlaXlj6/nlpHnmoTlrZDmqKHntYTlkI3nqLHvvJolcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjMwMworbXNnaWQgIm5lZ2F0aXZlIHZhbHVlcyBub3QgYWxsb3dlZCBmb3Igc3VibW9kdWxlLmZldGNoam9icyIKK21zZ3N0ciAic3VibW9kdWxlLmZldGNoam9icyDkuI3lhYHoqLHngrrosqDlgLwiCisKKyM6IHN1Ym1vZHVsZS1jb25maWcuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJyVzJyB3aGljaCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uOiAlcyIKK21zZ3N0ciAi5b+955Wl5Y+v6IO96KKr6Kej5p6Q54K65oyH5Luk5YiX6YG46aCF55qEICclcyfvvJolcyIKKworIzogc3VibW9kdWxlLWNvbmZpZy5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHZhbHVlIGZvciAlcyIKK21zZ3N0ciAiJXMg55qE5YC854Sh5pWIIgorCisjOiBzdWJtb2R1bGUtY29uZmlnLmM6NzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCAuZ2l0bW9kdWxlcyDmop3nm64gJXMiCisKKyM6IHRyYWlsZXIuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiCittc2dzdHIgIuWft+ihjCB0cmFpbGVyIOaMh+S7pCAnJXMnIOWkseaVlyIKKworIzogdHJhaWxlci5jOjQ4NSB0cmFpbGVyLmM6NDkwIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjU0OSB0cmFpbGVyLmM6NTUzCisjOiB0cmFpbGVyLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciCittc2dzdHIgIumNtSAnJTIkcycg55qE5pyq55+l5Y+W5YC8ICclMSRzJyIKKworIzogdHJhaWxlci5jOjUzOSB0cmFpbGVyLmM6NTQ0IGJ1aWx0aW4vcmVtb3RlLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIuWkmuaWvOS4gOWAiyAlcyIKKworIzogdHJhaWxlci5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICLnsL3lkI0gJyUuKnMnIOeahOmNteeCuuepuiIKKworIzogdHJhaWxlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIuS4jeiDveiugOWPlui8uOWFpeaqlOahiCAnJXMnIgorCisjOiB0cmFpbGVyLmM6NzUzCittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5LiN6IO96Ieq5qiZ5rqW6Ly45YWl6K6A5Y+WIgorCisjOiB0cmFpbGVyLmM6MTAxMSB3cmFwcGVyLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICLkuI3og73lsI0gJXMg5ZG85Y+rIHN0YXQiCisKKyM6IHRyYWlsZXIuYzoxMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIgorbXNnc3RyICLmqpTmoYggJXMg5LiN5piv5LiA5YCL5q2j6KaP5qqU5qGIIgorCisjOiB0cmFpbGVyLmM6MTAxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIGlzIG5vdCB3cml0YWJsZSBieSB1c2VyIgorbXNnc3RyICLmqpTmoYggJXMg5L2/55So6ICF5LiN5Y+v5a+rIgorCisjOiB0cmFpbGVyLmM6MTAyNworbXNnaWQgImNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIgorbXNnc3RyICLkuI3og73plovllZ/mmqvlrZjmqpQiCisKKyM6IHRyYWlsZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW5hbWUgdGVtcG9yYXJ5IGZpbGUgdG8gJXMiCittc2dzdHIgIuS4jeiDvemHjeaWsOWRveWQjeaaq+WtmOaqlOeCuiAlcyIKKworIzogdHJhbnNwb3J0LmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNldCB1cHN0cmVhbSBvZiAnJXMnIHRvICclcycgb2YgJyVzJ1xuIgorbXNnc3RyICLlsIfopoHoqK3lrpogJyUxJHMnIOeahOS4iua4uOeCuiAnJTMkcycg55qEICclMiRzJ1xuIgorCisjOiB0cmFuc3BvcnQuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgYnVuZGxlICclcyciCittc2dzdHIgIueEoeazleiugOWPliBidW5kbGUgJyVzJyIKKworIzogdHJhbnNwb3J0LmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIKK21zZ3N0ciAi5YKz6Ly477ya54Sh5pWI55qE5rex5bqm6YG46aCFICclcyciCisKKyM6IHRyYW5zcG9ydC5jOjI2NgorbXNnaWQgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluICdnaXQgaGVscCBjb25maWcnIGZvciBtb3JlIGRldGFpbHMiCittc2dzdHIgIuaqouimliAnZ2l0IGhlbHAgY29uZmlnJyDkuK3nmoQgcHJvdG9jb2wudmVyc2lvbiDlj5blvpfmm7TlpJroqIrmga8iCisKKyM6IHRyYW5zcG9ydC5jOjI2NworbXNnaWQgInNlcnZlciBvcHRpb25zIHJlcXVpcmUgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGxhdGVyIgorbXNnc3RyICLmnI3li5nnq6/pgbjpoIXpnIDopoHniYjmnKwgMiDljZTlrprmiJbmm7Tpq5giCisKKyM6IHRyYW5zcG9ydC5jOjYzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSB0cmFuc3BvcnQuY29sb3IuKiBjb25maWciCittc2dzdHIgIuS4jeiDveino+aekCB0cmFuc3BvcnQuY29sb3IuKiDoqK3lrpoiCisKKyM6IHRyYW5zcG9ydC5jOjcwNQorbXNnaWQgInN1cHBvcnQgZm9yIHByb3RvY29sIHYyIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCittc2dzdHIgIuWNlOWumiB2MiDnmoTmlK/mj7TlsJrmnKrlr6bnj74iCisKKyM6IHRyYW5zcG9ydC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiCittc2dzdHIgIuioreWumiAnJXMnIOeahOWPluWAvOacquefpe+8miVzIgorCisjOiB0cmFuc3BvcnQuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiCittc2dzdHIgIuWCs+i8uCAnJXMnIOS4jeWFgeiosSIKKworIzogdHJhbnNwb3J0LmM6OTQ5Cittc2dpZCAiZ2l0LW92ZXItcnN5bmMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5YaN5pSv5o+0IGdpdC1vdmVyLXJzeW5jIgorCisjOiB0cmFuc3BvcnQuYzoxMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHN1Ym1vZHVsZSBwYXRocyBjb250YWluIGNoYW5nZXMgdGhhdCBjYW5cbiIKKyJub3QgYmUgZm91bmQgb24gYW55IHJlbW90ZTpcbiIKK21zZ3N0ciAi5LiL5YiX5a2Q5qih57WE6Lev5b6R5omA5YyF5ZCr55qE5L+u5pS55Zyo5Lu75L2V6YGg56uv5rqQ5Lit6YO95om+5LiN5Yiw77yaXG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBsZWFzZSB0cnlcbiIKKyJcbiIKKyJcdGdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZFxuIgorIlxuIgorIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisidG8gcHVzaCB0aGVtIHRvIGEgcmVtb3RlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisi6KuL5ZiX6KmmXG4iCisiXG4iCisiXHRnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmRcbiIKKyJcbiIKKyLmiJbogIXpgLLlhaXliLDlrZDnm67pjITln7fooYxcbiIKKyJcbiIKKyJcdGdpdCBwdXNoXG4iCisiXG4iCisi5Lul5o6o6YCB6Iez6YGg56uv44CCXG4iCisiXG4iCisKKyM6IHRyYW5zcG9ydC5jOjEwNTYKK21zZ2lkICJBYm9ydGluZy4iCittc2dzdHIgIuato+WcqOe1guatouOAgiIKKworIzogdHJhbnNwb3J0LmM6MTIwMQorbXNnaWQgImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi5LiN6IO95o6o6YCB5YWo6YOo6ZyA6KaB55qE5a2Q5qih57WEIgorCisjOiB0cmFuc3BvcnQuYzoxMzQ1IHRyYW5zcG9ydC1oZWxwZXIuYzo2NTYKK21zZ2lkICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCIKK21zZ3N0ciAi5Y2U5a6a5LiN5pSv5o+06Kmy5YuV5L2cIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjEgdHJhbnNwb3J0LWhlbHBlci5jOjkwCittc2dpZCAiZnVsbCB3cml0ZSB0byByZW1vdGUgaGVscGVyIGZhaWxlZCIKK21zZ3N0ciAi5a6M5pW05a+r5YWl6YGg56uv5Yqp5omL5aSx5pWXIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIHJlbW90ZSBoZWxwZXIgZm9yICclcyciCittc2dzdHIgIueEoeazleeCuiAnJXMnIOaJvuWIsOmBoOerr+WKqeaJiyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE2MCB0cmFuc3BvcnQtaGVscGVyLmM6NTcwCittc2dpZCAiY2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiCittc2dzdHIgIueEoeazleikh+ijveWKqeaJi+i8uOWHuuaqlOahiOWPpeafhCIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidW5rbm93biBtYW5kYXRvcnkgY2FwYWJpbGl0eSAlczsgdGhpcyByZW1vdGUgaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyICIKKyJ2ZXJzaW9uIG9mIEdpdCIKK21zZ3N0ciAi5pyq55+l55qE5by35Yi26IO95YqbICVz77yM6Kmy6YGg56uv5Yqp5omL5Y+v6IO96ZyA6KaB5paw54mI5pys55qER2l0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MjE3Cittc2dpZCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IgorbXNnc3RyICLpgaDnq6/liqnmiYvpnIDopoHlr6bnj74gcmVmc3BlYyDog73lipsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoyODQgdHJhbnNwb3J0LWhlbHBlci5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1bmV4cGVjdGVkbHkgc2FpZDogJyVzJyIKK21zZ3N0ciAiJXMg5oSP5aSW5Zyw6Kqq77yaJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHNvIGxvY2tlZCAlcyIKK21zZ3N0ciAiJXMg5Lmf6Y6W5a6a5LqGICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NDkyCittc2dpZCAiY291bGRuJ3QgcnVuIGZhc3QtaW1wb3J0IgorbXNnc3RyICLkuI3og73ln7fooYwgZmFzdC1pbXBvcnQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo1MTUKK21zZ2lkICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IgorbXNnc3RyICLln7fooYwgZmFzdC1pbXBvcnQg55m855Sf6Yyv6KqkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTQ0IHRyYW5zcG9ydC1oZWxwZXIuYzoxMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAi54Sh5rOV6K6A5Y+W5byV55SoICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcmVzcG9uc2UgdG8gY29ubmVjdDogJXMiCittc2dzdHIgIumAo+e3muaZguacquefpeeahOWbnuaHie+8miVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjExCittc2dpZCAic2V0dGluZyByZW1vdGUgc2VydmljZSBwYXRoIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiCittc2dzdHIgIuWNlOWumuS4jeaUr+aPtOioreWumumBoOerr+acjeWLmei3r+W+kSIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjYxMworbXNnaWQgImludmFsaWQgcmVtb3RlIHNlcnZpY2UgcGF0aCIKK21zZ3N0ciAi54Sh5pWI55qE6YGg56uv5pyN5YuZ6Lev5b6RIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcyIKK21zZ3N0ciAi5LiN6IO96YCj57ea5Yiw5a2Q5pyN5YuZICVzIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6NzM1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4cGVjdGVkIG9rL2Vycm9yLCBoZWxwZXIgc2FpZCAnJXMnIgorbXNnc3RyICLpoJDmnJ8gb2svZXJyb3LvvIzliqnmiYvoqqogJyVzJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJoZWxwZXIgcmVwb3J0ZWQgdW5leHBlY3RlZCBzdGF0dXMgb2YgJXMiCittc2dzdHIgIuWKqeaJi+WgseWRiiAlcyDnmoTmhI/lpJbni4DmhYsiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIKK21zZ3N0ciAi5Yqp5omLICVzIOS4jeaUr+aPtCBkcnktcnVuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5o+0IC0tc2lnbmVkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkPWlmLWFza2VkIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5o+0IC0tc2lnbmVkPWlmLWFza2VkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODYwCisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIgorbXNnc3RyICLliqnmiYsgJXMg5LiN5pSv5o+0IC0tYXRvbWljIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciCittc2dzdHIgIuWKqeaJiyAlcyDkuI3mlK/mj7QgJ3B1c2gtb3B0aW9uJyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjk2NAorbXNnaWQgInJlbW90ZS1oZWxwZXIgZG9lc24ndCBzdXBwb3J0IHB1c2g7IHJlZnNwZWMgbmVlZGVkIgorbXNnc3RyICJyZW1vdGUtaGVwZXIg5LiN5pSv5o+0IHB1c2jvvIzpnIDopoHlvJXnlKjooajpgZTlvI8iCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzo5NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIKK21zZ3N0ciAi5Yqp5omLICVzIOS4jeaUr+aPtCAnZm9yY2UnIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAxNgorbXNnaWQgImNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIKK21zZ3N0ciAi54Sh5rOV5Z+36KGMIGZhc3QtZXhwb3J0IgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyMQorbXNnaWQgImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1leHBvcnQiCittc2dzdHIgIuWft+ihjCBmYXN0LWV4cG9ydCDmmYLnmbznlJ/pjK/oqqQiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIKK21zZ3N0ciAiIgorIuaykuacieWFseWQjOeahOW8leeUqOS4puS4lOS5n+aykuacieaMh+Wumu+8jOS7gOm6vOS5n+S4jeacg+WBmuOAglxuIgorIuWPr+iDveaCqOaHieipsuaMh+WumuS4gOWAi+WIhuaUr+WmgiAnbWFzdGVyJ+OAglxuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIgorbXNnc3RyICLlvJXnlKjliJfooajkuK3moLzlvI/pjK/oqqTnmoTlm57mh4nvvJolcyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCglcykgZmFpbGVkIgorbXNnc3RyICLoroDlj5bvvIglc++8ieWkseaVlyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JpdGUoJXMpIGZhaWxlZCIKK21zZ3N0ciAi5a+r77yIJXPvvInlpLHmlZciCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRocmVhZCBmYWlsZWQiCittc2dzdHIgIiVzIOWft+ihjOe3kuWkseaVlyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEzNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIKK21zZ3N0ciAiJXMg5Z+36KGM57eS562J5b6F5aSx5pWX77yaJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMzcwIHRyYW5zcG9ydC1oZWxwZXIuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIKK21zZ3N0ciAi5LiN6IO95ZWf5YuV5Z+36KGM57eS5L6G6KSH6KO96LOH5paZ77yaJXMiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxNDExCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQiCittc2dzdHIgIiVzIOmAsueoi+etieW+heWkseaVlyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcHJvY2VzcyBmYWlsZWQiCittc2dzdHIgIiVzIOmAsueoi+WkseaVlyIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjE0MzMgdHJhbnNwb3J0LWhlbHBlci5jOjE0NDIKK21zZ2lkICJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIKK21zZ3N0ciAi5LiN6IO95ZWf5YuV5Z+36KGM57eS5L6G6KSH6KO96LOH5paZIgorCisjOiB0cmVlLXdhbGsuYzozMworbXNnaWQgInRvby1zaG9ydCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi5aSq55+t55qE5qi554uA54mp5Lu2IgorCisjOiB0cmVlLXdhbGsuYzozOQorbXNnaWQgIm1hbGZvcm1lZCBtb2RlIGluIHRyZWUgZW50cnkiCittc2dzdHIgIuaoueeLgOeJqeS7tuS4reeahOaineebruaooeW8j+mMr+iqpCIKKworIzogdHJlZS13YWxrLmM6NDMKK21zZ2lkICJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IgorbXNnc3RyICLmqLnni4Dnianku7bmop3nm67kuK3nqbrnmoTmqpTmoYjlkI0iCisKKyM6IHRyZWUtd2Fsay5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGVuYW1lIGluIHRyZWUgZW50cnkgY29udGFpbnMgYmFja3NsYXNoOiAnJXMnIgorbXNnc3RyICLmqLnni4Dnianku7bkuK3nmoTmqpTmoYjlkI3nqLHmnInlj43mlpznt5rvvJonJXMnIgorCisjOiB0cmVlLXdhbGsuYzoxMjQKK21zZ2lkICJ0b28tc2hvcnQgdHJlZSBmaWxlIgorbXNnc3RyICLlpKrnn63nmoTmqLnmqpTmoYgiCisKKyM6IHVucGFjay10cmVlcy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iCittc2dzdHIgIiIKKyLmgqjlsI3kuIvliJfmqpTmoYjnmoTmnKzmqZ/kv67mlLnlsIfooqvnsL3lh7rli5XkvZzopobok4vvvJpcbiIKKyIlJXPoq4vlnKjliIfmj5vliIbmlK/liY3mj5DkuqTmiJblhLLol4/mgqjnmoTkv67mlLnjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5oKo5bCN5LiL5YiX5qqU5qGI55qE5pys5qmf5L+u5pS55bCH6KKr57C95Ye65YuV5L2c6KaG6JOL77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLmgqjlsI3kuIvliJfmqpTmoYjnmoTmnKzmqZ/kv67mlLnlsIfooqvlkIjkvbXli5XkvZzopobok4vvvJpcbiIKKyIlJXPoq4vlnKjlkIjkvbXliY3mj5DkuqTmiJblhLLol4/mgqjnmoTkv67mlLnjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjExNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5oKo5bCN5LiL5YiX5qqU5qGI55qE5pys5qmf5L+u5pS55bCH6KKr5ZCI5L215YuV5L2c6KaG6JOL77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyLmgqjlsI3kuIvliJfmqpTmoYjnmoTmnKzmqZ/kv67mlLnlsIfooqsgJXMg6KaG6JOL77yaXG4iCisiJSVz6KuL5ZyoICVzIOS5i+WJjeaPkOS6pOaIluWEsuiXj+aCqOeahOS/ruaUueOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLmgqjlsI3kuIvliJfmqpTmoYjnmoTmnKzmqZ/kv67mlLnlsIfooqsgJXMg6KaG6JOL77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlbTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuabtOaWsOWmguS4i+ebrumMhOWwh+acg+mBuuWkseWFtuS4reacqui/vei5pOeahOaqlOahiO+8mlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IGNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+acqui/vei5pOeahOaqlOahiOWwh+acg+WboOeCuuewveWHuuWLleS9nOiAjOiiq+WIqumZpO+8mlxuIgorIiUlc+iri+WcqOWIh+aPm+WIhuaUr+S5i+WJjeenu+WLleaIluWIqumZpOOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiIKKyIlJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmnKrov73ouaTnmoTmqpTmoYjlsIfmnIPlm6DngrrnsL3lh7rli5XkvZzogIzooqvliKrpmaTvvJpcbiIKKyIlJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmnKrov73ouaTnmoTmqpTmoYjlsIfmnIPlm6DngrrlkIjkvbXli5XkvZzogIzooqvliKrpmaTvvJpcbiIKKyIlJXPoq4vlnKjlkIjkvbXliY3np7vli5XmiJbliKrpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5pyq6L+96Lmk55qE5qqU5qGI5bCH5pyD5Zug54K65ZCI5L215YuV5L2c6ICM6KKr5Yiq6Zmk77yaXG4iCisiJSVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5ICVzOlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgJXMuIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5pyq6L+96Lmk55qE5qqU5qGI5bCH5pyD5Zug54K6ICVzIOWLleS9nOiAjOiiq+WIqumZpO+8mlxuIgorIiUlc+iri+WcqCAlcyDliY3np7vli5XmiJbliKrpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5pyq6L+96Lmk55qE5qqU5qGI5bCH5pyD5Zug54K6ICVzIOWLleS9nOiAjOiiq+WIqumZpO+8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlc1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+acqui/vei5pOeahOaqlOahiOWwh+acg+WboOeCuuewveWHuuWLleS9nOiAjOiiq+imhuiTi++8mlxuIgorIiUlc+iri+WcqOWIh+aPm+WIhuaUr+WJjeenu+WLleaIluWIqumZpOOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIgorImNoZWNrb3V0OlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+acqui/vei5pOeahOaqlOahiOWwh+acg+WboOeCuuewveWHuuWLleS9nOiAjOiiq+imhuiTi++8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmnKrov73ouaTnmoTmqpTmoYjlsIfmnIPlm6DngrrlkIjkvbXli5XkvZzogIzooqvopobok4vvvJpcbiIKKyIlJXPoq4vlnKjlkIjkvbXliY3np7vli5XmiJbliKrpmaTjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuIgorIiUlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+acqui/vei5pOeahOaqlOahiOWwh+acg+WboOeCuuWQiOS9teWLleS9nOiAjOiiq+imhuiTi++8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSAlcy4iCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmnKrov73ouaTnmoTmqpTmoYjlsIfmnIPlm6DngrogJXMg5YuV5L2c6ICM6KKr6KaG6JOL77yaXG4iCisiJSVz6KuL5ZyoICVzIOWJjeenu+WLleaIluWIqumZpOOAgiIKKworIzogdW5wYWNrLXRyZWVzLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4iCisiJSVzIgorbXNnc3RyICIiCisi5bel5L2c5Y2A5Lit5LiL5YiX5pyq6L+96Lmk55qE5qqU5qGI5bCH5pyD5Zug54K6ICVzIOWLleS9nOiAjOiiq+imhuiTi++8mlxuIgorIiUlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIgorbXNnc3RyICLmop3nm64gJyVzJyDlkowgJyVzJyDph43nlorjgILnhKHms5XlkIjkvbXjgIIiCisKKyM6IHVucGFjay10cmVlcy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQ6IHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90IHVwIHRvIGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLnhKHms5Xmm7TmlrDnqIDnlo/nsL3lh7rvvJrlpoLkuIvmop3nm67kuI3mmK/mnIDmlrDvvJpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgIgorInVwZGF0ZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuW3peS9nOWNgOS4reS4i+WIl+aqlOahiOWwh+iiq+eogOeWj+ewveWHuuabtOaWsOaJgOimhuiTi++8mlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgc3BhcnNlIGNoZWNrb3V0ICIKKyJ1cGRhdGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLlt6XkvZzljYDkuK3kuIvliJfmqpTmoYjlsIfooqvnqIDnlo/nsL3lh7rmm7TmlrDmiYDliKrpmaTvvJpcbiIKKyIlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHN1Ym1vZHVsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIueEoeazleabtOaWsOWtkOaooee1hO+8mlxuIgorIiVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmdcbiIKK21zZ3N0ciAi5q2j5Zyo57WC5q2iXG4iCisKKyM6IHVucGFjay10cmVlcy5jOjMxNworbXNnaWQgIlVwZGF0aW5nIGZpbGVzIgorbXNnc3RyICLmraPlnKjmm7TmlrDmqpTmoYgiCisKKyM6IHVucGFjay10cmVlcy5jOjM0OQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHBhdGhzIGhhdmUgY29sbGlkZWQgKGUuZy4gY2FzZS1zZW5zaXRpdmUgcGF0aHNcbiIKKyJvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSkgYW5kIG9ubHkgb25lIGZyb20gdGhlIHNhbWVcbiIKKyJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIKK21zZ3N0ciAiIgorIuS7peS4i+i3r+W+keeZvOeUn+eisOaSnu+8iOWmgu+8muWcqOS4jeWNgOWIhuWkp+Wwj+Wvq+eahOaqlOahiOezu+e1seS4iueahOWNgOWIhuWkp+Wwj+Wvq+eahOi3r+W+ke+8ie+8jFxuIgorIuS4puS4lOeisOaSnue1hOS4reWPquacieS4gOWAi+aqlOahiOWtmOWcqOW3peS9nOWNgOS4re+8mlxuIgorCisjOiB1bnBhY2stdHJlZXMuYzoxNDQxCisjfCBtc2dpZCAiVXBkYXRpbmcgZmlsZXMiCittc2dpZCAiVXBkYXRpbmcgaW5kZXggZmxhZ3MiCittc2dzdHIgIuato+WcqOabtOaWsOe0ouW8leaXl+aomSIKKworIzogdXJsbWF0Y2guYzoxNjMKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAi54Sh5pWI55qEIFVSTCDmlrnmoYjlkI3nqLHmiJbpgbrlpLEgJzovLycg5b6M57a0IgorCisjOiB1cmxtYXRjaC5jOjE4NyB1cmxtYXRjaC5jOjM0NiB1cmxtYXRjaC5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgIueEoeaViOeahCAlWFgg6L2J576p5bqP5YiXIgorCisjOiB1cmxtYXRjaC5jOjIxNQorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICLnvLrlsJHkuLvmqZ/lkI3nqLHkuJQgVVJMIOaWueahiOS4jeaYryAnZmlsZTonIgorCisjOiB1cmxtYXRjaC5jOjIzMgorbXNnaWQgImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiCittc2dzdHIgIuS4gOWAiyAnZmlsZTonIFVSTCDkuI3mh4noqbLljIXlkKvln6DomZ8iCisKKyM6IHVybG1hdGNoLmM6MjQ3Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIKK21zZ3N0ciAi5Li75qmf5ZCN56ix5Lit5YyF5ZCr54Sh5pWI55qE5a2X5YWDIgorCisjOiB1cmxtYXRjaC5jOjI5MiB1cmxtYXRjaC5jOjMwMworbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIueEoeaViOeahOWfoOiZnyIKKworIzogdXJsbWF0Y2guYzozNzEKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICLnhKHmlYjnmoQgJy4uJyDot6/lvpHniYfmrrUiCisKKyM6IHdvcmt0cmVlLmM6MjU4IGJ1aWx0aW4vYW0uYzoyMDg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICclcyciCittc2dzdHIgIuiugOWPliAnJXMnIOWkseaVlyIKKworIzogd29ya3RyZWUuYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhdCBtYWluIHdvcmtpbmcgdHJlZSBpcyBub3QgdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5IgorbXNnc3RyICLlnKjkuLvlt6XkvZzljYDnmoQgJyVzJyDkuI3mmK/niYjmnKzluqvnm67pjIQiCisKKyM6IHdvcmt0cmVlLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIKK21zZ3N0ciAi5qqU5qGIICclcycg5LiN5YyF5ZCr5bel5L2c5Y2A55qE57WV5bCN6Lev5b6RIgorCisjOiB3b3JrdHJlZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICInJXMnIOS4jeWtmOWcqCIKKworIzogd29ya3RyZWUuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSAuZ2l0IGZpbGUsIGVycm9yIGNvZGUgJWQiCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCLIC5naXQg5qqU5qGI77yM6Yyv6Kqk56K8ICVkIgorCisjOiB3b3JrdHJlZS5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IGJhY2sgdG8gJyVzJyIKK21zZ3N0ciAiJyVzJyDmspLmnInmjIflm57liLAgJyVzJyIKKworIzogd3JhcHBlci5jOjE4NiB3cmFwcGVyLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIueEoeazlemWi+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+WuuSwgIgorCisjOiB3dC1zdGF0dXMuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IgorbXNnaWRfcGx1cmFsICJZb3VyIHN0YXNoIGN1cnJlbnRseSBoYXMgJWQgZW50cmllcyIKK21zZ3N0clswXSAi5oKo55qE5YSy6JeP5Y2A55uu5YmN5pyJICVkIOainee0gOmMhCIKK21zZ3N0clsxXSAi5oKo55qE5YSy6JeP5Y2A55uu5YmN5pyJICVkIOainee0gOmMhCIKKworIzogd3Qtc3RhdHVzLmM6OTM4Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIuWtkOaooee1hOW3suS/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+ihjOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICLmnIDlvozkuIDmop3mjIfku6Tlt7LlrozmiJDvvIglZCDmop3mjIfku6Tooqvln7fooYzvvInvvJoiCittc2dzdHJbMV0gIuacgOW+jOeahOaMh+S7pOW3suWujOaIkO+8iCVkIOaineaMh+S7pOiiq+Wft+ihjO+8ie+8miIKKworIzogd3Qtc3RhdHVzLmM6MTMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICDvvIjmm7TlpJrlj4PopovmqpTmoYggJXPvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzAKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICLmnKrliankuIvku7vkvZXmjIfku6TjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAi5o6l5LiL5L6G6KaB5Z+36KGM55qE5oyH5Luk77yI5Ymp6aSYICVkIOaineaMh+S7pO+8ie+8miIKK21zZ3N0clsxXSAi5o6l5LiL5L6G6KaB5Z+36KGM55qE5oyH5Luk77yI5Ymp6aSYICVkIOaineaMh+S7pO+8ie+8miIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzQxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiDkvobmqqLoppblkoznt6jovK/vvIkiCisKKyM6IHd0LXN0YXR1cy5jOjEzNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIuaCqOWcqOWft+ihjOWwh+WIhuaUryAnJXMnIOmHjeWumuWfuuW6leWIsCAnJXMnIOeahOWLleS9nOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTM1OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM6YeN5a6a5Z+65bqV5YuV5L2c44CCIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjEzNzEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjop6PmsbrooZ3nqoHvvIznhLblvozln7fooYwgXCJnaXQgcmViYXNlIC0tY29udGludWVcIu+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzczCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZWJhc2UgLS1za2lwXCIg6Lez6YGO5q2k5L+u6KOc5qqU77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjEzNzUKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIg5Lul57C95Ye65Y6f5pyJ5YiG5pSv77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjEzODIKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI5omA5pyJ6KGd56qB5bey6Kej5rG677ya5Z+36KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjEzODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM5bCH5YiG5pSvICclcycg6YeN5a6a5Z+65bqV5YiwICclcycg55qE5YuV5L2c5pmC5YiG5Ymy5o+Q5Lqk44CCIgorCisjOiB3dC1zdGF0dXMuYzoxMzkxCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIuaCqOWcqOWft+ihjOmHjeWumuWfuuW6leWLleS9nOaZguWIhuWJsuaPkOS6pOOAgiIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxMzk0Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI5LiA5pem5oKo5bel5L2c55uu6YyE5o+Q5Lqk5Lm+5reo5b6M77yM5Z+36KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM5bCH5YiG5pSvICclcycg6YeN5a6a5Z+65bqV5YiwICclcycg55qE5YuV5L2c5pmC57eo6Lyv5o+Q5Lqk44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNDAzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLmgqjlnKjln7fooYzph43lrprln7rlupXli5XkvZzmmYLnt6jovK/mj5DkuqTjgIIiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQwNgorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIg5L+u6KOc55uu5YmN5o+Q5Lqk77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0MDgKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiAg77yI55W25oKo5bCN5oKo55qE5L+u5pS55ru/5oSP5b6M5Z+36KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MTkKK21zZ2lkICJDaGVycnktcGljayBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuIgorbXNnc3RyICLmj4Dpgbjli5XkvZzmraPlnKjpgLLooYzkuK3jgIIiCisKKyM6IHd0LXN0YXR1cy5jOjE0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM5o+A6YG45o+Q5LqkICVzIOeahOWLleS9nOOAgiIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDI5Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI6Kej5rG66KGd56qB5Lim5Z+36KGMIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIu+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDMyCittc2dpZCAiICAocnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAg77yI5Z+36KGMIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiDku6XnubznuozvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQzNQorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOaJgOacieihneeqgeW3suino+axuu+8muWft+ihjCBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCLvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiDot7PpgY7mraTkv67oo5zmqpTvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQzOQorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIg5Lul5Y+W5raI5o+A6YG45YuV5L2c77yJIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ5Cittc2dpZCAiUmV2ZXJ0IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iCittc2dzdHIgIumChOWOn+WLleS9nOato+WcqOihjOS4reOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAi5oKo5Zyo5Z+36KGM5Y+N6L2J5o+Q5LqkICVzIOeahOWLleS9nOOAgiIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDU4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOino+axuuihneeqgeS4puWft+ihjCBcImdpdCByZXZlcnQgLS1jb250aW51ZVwi77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0NjEKK21zZ2lkICIgIChydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiB0byBjb250aW51ZSkiCittc2dzdHIgIiAg77yI5Z+36KGMIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIg5Lul57m857qM77yJIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE0NjQKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI5omA5pyJ6KGd56qB5bey6Kej5rG677ya5Z+36KGMIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCLvvIkiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQ2NgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcmV2ZXJ0IC0tc2tpcFwiIOi3s+mBjuatpOS/ruijnOaqlO+8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNDY4Cittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiDku6Xlj5bmtojlj43ovYnmj5DkuqTli5XkvZzvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjE0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICclcycuIgorbXNnc3RyICLmgqjlnKjln7fooYzlvp7liIbmlK8gJyVzJyDplovlp4vnmoTkuozliIblsIvmib7li5XkvZzjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjE0ODIKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICLmgqjlnKjln7fooYzkuozliIblsIvmib7li5XkvZzjgIIiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTQ4NQorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgYmlzZWN0IHJlc2V0XCIg57C95Ye65Y6f5pyJ5YiG5pSv77yJIgorCisjOiB3dC1zdGF0dXMuYzoxNjk0Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAi5L2N5pa85YiG5pSvICIKKworIzogd3Qtc3RhdHVzLmM6MTcwMQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIuS6kuWLleW8j+mHjeWumuWfuuW6leWLleS9nOato+WcqOmAsuihjOS4re+8m+iHsyAiCisKKyM6IHd0LXN0YXR1cy5jOjE3MDMKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLph43lrprln7rlupXli5XkvZzmraPlnKjpgLLooYzkuK3vvJvoh7MgIgorCisjOiB3dC1zdGF0dXMuYzoxNzEzCittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi55uu5YmN5LiN5Zyo5Lu75L2V5YiG5pSv5LiK44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNzMwCittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIuWIneWni+aPkOS6pCIKKworIzogd3Qtc3RhdHVzLmM6MTczMQorbXNnaWQgIk5vIGNvbW1pdHMgeWV0IgorbXNnc3RyICLlsJrnhKHmj5DkuqQiCisKKyM6IHd0LXN0YXR1cy5jOjE3NDUKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuacqui/vei5pOeahOaqlOahiCIKKworIzogd3Qtc3RhdHVzLmM6MTc0NworbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIuW/veeVpeeahOaqlOahiCIKKworIzogd3Qtc3RhdHVzLmM6MTc1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisi6ICX6LK75LqGICUuMmYg56eS5Lul5p6a6IiJ5pyq6L+96Lmk55qE5qqU5qGI44CCJ3N0YXR1cyAtdW5vJyDkuZ/oqLHog73mj5Dpq5jpgJ/luqbvvIxcbiIKKyLkvYbmgqjpnIDopoHlsI/lv4PkuI3opoHlv5jkuobmlrDlop7mlrDmqpTmoYjvvIjlj4PoposgJ2dpdCBoZWxwIHN0YXR1cyfvvInjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAi5pyq6L+96Lmk55qE5qqU5qGI5rKS5pyJ5YiX5Ye6JXMiCisKKyMgIOitr+iAhe+8muS4reaWh+Wtl+S4suaLvOaOpe+8jOWPr+WIqumZpOWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTc1OQorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIu+8iOS9v+eUqCAtdSDlj4Pmlbjpoa/npLrmnKrov73ouaTnmoTmqpTmoYjvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjE3NjUKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICLmspLmnInkv67mlLkiCisKKyM6IHd0LXN0YXR1cy5jOjE3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIuS/ruaUueWwmuacquWKoOWFpeaPkOS6pO+8iOS9v+eUqCBcImdpdCBhZGRcIiDlkowv5oiWIFwiZ2l0IGNvbW1pdCAtYVwi77yJXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAi5L+u5pS55bCa5pyq5Yqg5YWl5o+Q5LqkXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAi5o+Q5Lqk54K656m677yM5L2G5piv5a2Y5Zyo5bCa5pyq6L+96Lmk55qE5qqU5qGI77yI5L2/55SoIFwiZ2l0IGFkZFwiIOW7uueri+i/vei5pO+8iVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICLmj5DkuqTngrrnqbrvvIzkvYbmmK/lrZjlnKjlsJrmnKrov73ouaTnmoTmqpTmoYhcbiIKKworIyAg6K2v6ICF77ya5Lit5paH5a2X5Liy5ou85o6l77yM5Y+v5Yiq6Zmk5YmN5bCO56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICLnhKHmqpTmoYjopoHmj5DkuqTvvIjlu7rnq4sv6KSH6KO95qqU5qGI5Lim5L2/55SoIFwiZ2l0IGFkZFwiIOW7uueri+i/vei5pO+8iVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNzg1IHd0LXN0YXR1cy5jOjE3OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAi54Sh5qqU5qGI6KaB5o+Q5LqkXG4iCisKKyMgIOitr+iAhe+8muS4reaWh+Wtl+S4suaLvOaOpe+8jOWPr+WIqumZpOWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICLnhKHmqpTmoYjopoHmj5DkuqTvvIjkvb/nlKggLXUg6aGv56S65pyq6L+96Lmk55qE5qqU5qGI77yJXG4iCisKKyMgIOitr+iAhe+8muS4reaWh+Wtl+S4suaLvOaOpe+8jOWPr+WIqumZpOWJjeWwjuepuuagvAorIzogd3Qtc3RhdHVzLmM6MTc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuXG4iCittc2dzdHIgIuaykuacieimgeaPkOS6pOeahOaqlOahiO+8jOW3peS9nOWNgOeCuuS5vua3qOeLgOaFi1xuIgorCisjOiB3dC1zdGF0dXMuYzoxOTA1Cittc2dpZCAiTm8gY29tbWl0cyB5ZXQgb24gIgorbXNnc3RyICLlsJrnhKHmj5DkuqTlnKggIgorCisjOiB3dC1zdGF0dXMuYzoxOTA5Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRO+8iOmdnuWIhuaUr++8iSIKKworIzogd3Qtc3RhdHVzLmM6MTk0MAorbXNnaWQgImRpZmZlcmVudCIKK21zZ3N0ciAi5LiN5ZCMIgorCisjICDora/ogIXvvJroq4vntq3mjIHlj6XlsL7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE5NDIgd3Qtc3RhdHVzLmM6MTk1MAorbXNnaWQgImJlaGluZCAiCittc2dzdHIgIuiQveW+jCAiCisKKyM6IHd0LXN0YXR1cy5jOjE5NDUgd3Qtc3RhdHVzLmM6MTk0OAorbXNnaWQgImFoZWFkICIKK21zZ3N0ciAi6aCY5YWIICIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBhY3Rpb24gaXMgZS5nLiAicHVsbCB3aXRoIHJlYmFzZSIKKyM6IHd0LXN0YXR1cy5jOjI0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90ICVzOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO9JXPvvJrmgqjmnInmnKrmmqvlrZjnmoTorormm7TjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjI0NzYKK21zZ2lkICJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuWPpuWklu+8jOaCqOeahOe0ouW8leS4reWMheWQq+acquaPkOS6pOeahOiuiuabtOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgJXM6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDvSVz77ya5oKo55qE57Si5byV5Lit5YyF5ZCr5pyq5o+Q5Lqk55qE6K6K5pu044CCIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTggYnVpbHRpbi9jbG9uZS5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIuWIqumZpCAnJXMnIOWkseaVlyIKKworIzogYnVpbHRpbi9hZGQuYzoyNgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs86YG46aCFPl0gWy0tXSA86Lev5b6R6KaP5qC8Pi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICLmhI/lpJbnmoTlt67nlbDni4DmhYsgJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6OTIgYnVpbHRpbi9jb21taXQuYzoyODgKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIuabtOaWsOaqlOahiOWkseaVlyIKKworIzogYnVpbHRpbi9hZGQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAi5Yiq6ZmkICclcydcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzcKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAi6YeN5paw5pW055CG57Si5byV5LmL5b6M5bCa5pyq6KKr5pqr5a2Y55qE6K6K5pu077yaIgorCisjOiBidWlsdGluL2FkZC5jOjI1MiBidWlsdGluL3Jldi1wYXJzZS5jOjg5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi5LiN6IO96K6A5Y+W57Si5byVIgorCisjOiBidWlsdGluL2FkZC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi54Sh5rOV54K65a+r5YWl6ZaL5ZWfICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY3Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICLkuI3og73nlJ/miJDkv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjcwCittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgIue3qOi8r+S/ruijnOaqlOWkseaVlyIKKworIzogYnVpbHRpbi9hZGQuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bCNICclcycg5ZG85Y+rIHN0YXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjc1Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICLnqbrkv67oo5zmqpTjgILnlbDluLjntYLmraLjgIIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICLkuI3og73mh4nnlKggJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyODgKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIuS4i+WIl+i3r+W+keagueaTmuaCqOeahOS4gOWAiyAuZ2l0aWdub3JlIOaqlOahiOiAjOiiq+W/veeVpe+8mlxuIgorCisjOiBidWlsdGluL2FkZC5jOjMwOCBidWlsdGluL2NsZWFuLmM6OTEwIGJ1aWx0aW4vZmV0Y2guYzoxNjMgYnVpbHRpbi9tdi5jOjEyNAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NiBidWlsdGluL3B1bGwuYzoyMjMgYnVpbHRpbi9wdXNoLmM6NTQ4CisjOiBidWlsdGluL3JlbW90ZS5jOjEzNDQgYnVpbHRpbi9ybS5jOjI0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2NQorbXNnaWQgImRyeSBydW4iCittc2dzdHIgIua4rOippuWft+ihjCIKKworIzogYnVpbHRpbi9hZGQuYzozMTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICLkupLli5XlvI/mj4DpgbgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDgyIGJ1aWx0aW4vcmVzZXQuYzozMDcKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAi5LqS5YuV5byP5oyR6YG46LOH5paZ5Y2A5aGKIgorCisjOiBidWlsdGluL2FkZC5jOjMxMworbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAi57eo6Lyv55uu5YmN5beu55Ww5Lim5oeJ55SoIgorCisjOiBidWlsdGluL2FkZC5jOjMxNAorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi5YWB6Kix5paw5aKe5b+955Wl55qE5qqU5qGIIgorCisjOiBidWlsdGluL2FkZC5jOjMxNQorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICLmm7TmlrDlt7Lov73ouaTnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE2Cittc2dpZCAicmVub3JtYWxpemUgRU9MIG9mIHRyYWNrZWQgZmlsZXMgKGltcGxpZXMgLXUpIgorbXNnc3RyICLlsI3lt7Lov73ouaTmqpTmoYjvvIjpmrHlkKsgLXXvvInph43mlrDmrbjkuIDmj5vooYznrKbomZ8iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE3Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICLlj6roqJjpjITvvIzoqbLot6/lvpHnqI3lvozlho3mlrDlop4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzE4Cittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLmlrDlop7miYDmnInmlLnorornmoTlt7Lov73ouaTmqpTmoYjlkozmnKrov73ouaTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIuW/veeVpeW3peS9nOWNgOS4reenu+mZpOeahOi3r+W+ke+8iOWSjCAtLW5vLWFsbCDnm7jlkIzvvIkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzIzCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICLkuI3mlrDlop7vvIzlj6rph43mlrDmlbTnkIbntKLlvJUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzI0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAi6Lez6YGO5Zug55m855Sf6Yyv6Kqk5LiN6IO95paw5aKe55qE5qqU5qGIIgorCisjOiBidWlsdGluL2FkZC5jOjMyNQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAi5qqi5p+l5Zyo5ris6Kmm5Z+36KGM5qih5byP5LiL5qqU5qGI77yI5Y2z5L2/5LiN5a2Y5Zyo77yJ5piv5ZCm6KKr5b+955WlIgorCisjOiBidWlsdGluL2FkZC5jOjMyNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDQKK21zZ2lkICJvdmVycmlkZSB0aGUgZXhlY3V0YWJsZSBiaXQgb2YgdGhlIGxpc3RlZCBmaWxlcyIKK21zZ3N0ciAi6KaG6JOL5YiX6KGo6KOh5qqU5qGI55qE5Y+v5Z+36KGM5L2NIgorCisjOiBidWlsdGluL2FkZC5jOjMyOQorbXNnaWQgIndhcm4gd2hlbiBhZGRpbmcgYW4gZW1iZWRkZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5bu656uL5LiA5YCL5bWM5YWl5byP54mI5pys5bqr5pmC57Wm5LqI6K2m5ZGKIgorCisjOiBidWlsdGluL2FkZC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91J3ZlIGFkZGVkIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgaW5zaWRlIHlvdXIgY3VycmVudCByZXBvc2l0b3J5LlxuIgorIkNsb25lcyBvZiB0aGUgb3V0ZXIgcmVwb3NpdG9yeSB3aWxsIG5vdCBjb250YWluIHRoZSBjb250ZW50cyBvZlxuIgorInRoZSBlbWJlZGRlZCByZXBvc2l0b3J5IGFuZCB3aWxsIG5vdCBrbm93IGhvdyB0byBvYnRhaW4gaXQuXG4iCisiSWYgeW91IG1lYW50IHRvIGFkZCBhIHN1Ym1vZHVsZSwgdXNlOlxuIgorIlxuIgorIlx0Z2l0IHN1Ym1vZHVsZSBhZGQgPHVybD4gJXNcbiIKKyJcbiIKKyJJZiB5b3UgYWRkZWQgdGhpcyBwYXRoIGJ5IG1pc3Rha2UsIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlXG4iCisiaW5kZXggd2l0aDpcbiIKKyJcbiIKKyJcdGdpdCBybSAtLWNhY2hlZCAlc1xuIgorIlxuIgorIlNlZSBcImdpdCBoZWxwIHN1Ym1vZHVsZVwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorIuaCqOWcqOebruWJjeeJiOacrOW6q+S4reaWsOWinuS6huWPpuWkluS4gOWAi0dpdOeJiOacrOW6q+OAguikh+ijveWkluWxpOeahOeJiOacrOW6q+Wwh+S4jeWMheWQq+W1jOWFpeeJiOacrOW6q+eahCIKKyLlhaflrrnvvIzkuKbkuJTkuI3nn6XpgZPoqbLlpoLkvZXlj5blvpflroPjgIJcbiIKKyLlpoLmnpzmgqjopoHmlrDlop7kuIDlgIvlrZDmqKHntYTvvIzkvb/nlKjvvJpcbiIKKyJcbiIKKyJcdGdpdCBzdWJtb2R1bGUgYWRkIDx1cmw+ICVzXG4iCisiXG4iCisi5aaC5p6c5oKo5LiN5bCP5b+D5paw5aKe5LqG6YCZ5YCL6Lev5b6R77yM5Y+v5Lul55So5LiL6Z2i55qE5oyH5Luk5bCH5YW25b6e57Si5byV5Lit5Yiq6Zmk77yaXG4iCisiXG4iCisiXHRnaXQgcm0gLS1jYWNoZWQgJXNcbiIKKyJcbiIKKyLlj4PoposgXCJnaXQgaGVscCBzdWJtb2R1bGVcIiDlj5blvpfmm7TlpJroqIrmga/jgIIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZyBlbWJlZGRlZCBnaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIuato+WcqOaWsOWinuW1jOWFpeW8jyBnaXQg54mI5pys5bqr77yaJXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIuS9v+eUqCAtZiDlj4PmlbjlpoLmnpzmgqjnorrlr6bopoHmlrDlop7lroPlgJHjgIJcbiIKKworIzogYnVpbHRpbi9hZGQuYzo0MDAKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLmlrDlop7mqpTmoYjlpLHmlZciCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDI4IGJ1aWx0aW4vY29tbWl0LmM6MzQ4CisjfCBtc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDoiIcgLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9hZGQuYzo0MzQKKyN8IG1zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIOiIhyAtLWVkaXQg5LiN55u45a65IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NgorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICItQSDlkowgLXUg6YG46aCF5LqS5palIgorCisjOiBidWlsdGluL2FkZC5jOjQ0OQorbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIumBuOmghSAtLWlnbm9yZS1taXNzaW5nIOWPquiDveWSjCAtLWRyeS1ydW4g5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2FkZC5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICItLWNobW9kIHBhcmFtICclcycgbXVzdCBiZSBlaXRoZXIgLXggb3IgK3giCittc2dzdHIgIuWPg+aVuCAtLWNobW9kIOWPluWAvCAnJXMnIOW/hemgiOaYryAteCDmiJYgK3giCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDcxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjQ4IGJ1aWx0aW4vY29tbWl0LmM6MzU0CisjOiBidWlsdGluL3Jlc2V0LmM6MzI3CisjfCBtc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUg6IiHIDzot6/lvpHopo/moLw+IOWPg+aVuOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9hZGQuYzo0NzggYnVpbHRpbi9jaGVja291dC5jOjE2NjAgYnVpbHRpbi9jb21taXQuYzozNjAKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMKK21zZ2lkICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIgorbXNnc3RyICItLXBhdGhzcGVjLWZpbGUtbnVsIOmcgOimgSAtLXBhdGhzcGVjLWZyb20tZmlsZSIKKworIzogYnVpbHRpbi9hZGQuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIuaykuacieaMh+WumuaqlOahiO+8jOS5n+aykuacieaqlOahiOiiq+aWsOWinuOAglxuIgorCisjOiBidWlsdGluL2FkZC5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAi5Lmf6Kix5oKo5oOz6KaB5Z+36KGMICdnaXQgYWRkIC4n77yfXG4iCisKKyM6IGJ1aWx0aW4vYW0uYzozNDcKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5L2c6ICF6IWz5pysIgorCisjOiBidWlsdGluL2FtLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siCittc2dzdHIgIiclcycg6KKrIGFwcGx5cGF0Y2gtbXNnIOaOm+mJpOWIqumZpCIKKworIzogYnVpbHRpbi9hbS5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIumdnuazleeahOi8uOWFpeihjO+8miclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIuW+niAnJXMnIOikh+ijveiou+ino+WIsCAnJXMnIOaZguWkseaVlyIKKworIzogYnVpbHRpbi9hbS5jOjUzNworbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiZnNlZWsg5aSx5pWXIgorCisjOiBidWlsdGluL2FtLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBwYXRjaCAnJXMnIgorbXNnc3RyICLnhKHms5Xop6PmnpDkv67oo5zmqpQgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjc5MAorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICLkuIDmrKHlj6rog73mnInkuIDlgIsgU3RHSVQg5L+u6KOc5qqU5L2H5YiX6KKr5oeJ55SoIgorCisjOiBidWlsdGluL2FtLmM6ODM4Cittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIueEoeaViOeahOaZgumWk+aIsyIKKworIzogYnVpbHRpbi9hbS5jOjg0MyBidWlsdGluL2FtLmM6ODU1Cittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgIueEoeaViOeahOaXpeacn+ihjCIKKworIzogYnVpbHRpbi9hbS5jOjg1MAorbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICLnhKHmlYjnmoTmmYLljYDkvY3np7vlgLwiCisKKyM6IGJ1aWx0aW4vYW0uYzo5NDMKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIuS/ruijnOaqlOagvOW8j+WBtea4rOWkseaVl+OAgiIKKworIzogYnVpbHRpbi9hbS5jOjk0OCBidWlsdGluL2Nsb25lLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuW7uueri+ebrumMhCAnJXMnIOWkseaVlyIKKworIzogYnVpbHRpbi9hbS5jOjk1MworbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAi5YiG5Ymy5L+u6KOc5qqU5aSx5pWX44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAi55W25oKo6Kej5rG66YCZ5LiA5ZWP6aGM77yM5Z+36KGMIFwiJXMgLS1jb250aW51ZVwi44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgIuWmguaenOaCqOaDs+imgei3s+mBjumAmeS4gOS/ruijnOaqlO+8jOWJh+Wft+ihjCBcIiVzIC0tc2tpcFwi44CCIgorCisjOiBidWlsdGluL2FtLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIuiLpeimgeW+qeWOn+iHs+WOn+Wni+WIhuaUr+S4puWBnOatouS/ruijnOaqlOWLleS9nO+8jOWft+ihjCBcIiVzIC0tYWJvcnRcIuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjExNjkKK21zZ2lkICJQYXRjaCBzZW50IHdpdGggZm9ybWF0PWZsb3dlZDsgc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyBtaWdodCBiZSBsb3N0LiIKK21zZ3N0ciAi5L+u6KOc5qqU5L2/55SoIGZvcm1hdD1mbG93ZWQg5qC85byP5YKz6YCB77yM6KGM5bC+55qE56m65qC85Y+v6IO95pyD6YG65aSx44CCIgorCisjOiBidWlsdGluL2FtLmM6MTE5NworbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAi5L+u6KOc5qqU54K656m644CCIgorCisjOiBidWlsdGluL2FtLmM6MTI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGF1dGhvciBsaW5lIGluIGNvbW1pdCAlcyIKK21zZ3N0ciAi5Zyo5o+Q5LqkICVzIOS4ree8uuWwkeS9nOiAheihjCIKKworIzogYnVpbHRpbi9hbS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlLipzIgorbXNnc3RyICLnhKHmlYjnmoTouqvku73mqJnoqJjvvJolLipzIgorCisjOiBidWlsdGluL2FtLmM6MTQ4NAorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIueJiOacrOW6q+e8uuS5j+W/heimgeeahOizh+aWmeeJqeS7tuS7pemAsuihjOS4ieaWueWQiOS9teOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE0ODYKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICLkvb/nlKjntKLlvJXkvobph43lu7rkuIDlgIvvvIjkuInmlrnlkIjkvbXnmoTvvInln7rnpI7nm67pjITmqLkuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTA1Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIuaCqOaYr+WQpuabvuaJi+WLlee3qOi8r+mBjuaCqOeahOS/ruijnOaqlO+8n1xuIgorIueEoeazleWll+eUqOS/ruijnOaqlOWIsOe0ouW8leS4reeahOizh+aWmeeJqeS7tuS4iuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE1MTEKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIuWbnuiQveWIsOWfuuekjueJiOacrOS4iuaJk+S/ruijnOaqlOWPiumAsuihjOS4ieaWueWQiOS9tS4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE1MzcKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICLnhKHms5XlkIjkvbXorormm7TjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNTY5Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi5q2j5aWX55So5Yiw5LiA5YCL56m65q235Y+y5LiKIgorCisjOiBidWlsdGluL2FtLmM6MTYxNiBidWlsdGluL2FtLmM6MTYyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVzdW1lOiAlcyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIueEoeazlee5vOe6jO+8miVzIOS4jeWtmOWcqOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzgKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIuaPkOS6pOWFp+WuueeCuu+8miIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5Y+l5bC+56m65qC8CisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbDogIgorbXNnc3RyICLlpZfnlKjvvJ/mmK9beV0v5ZCmW25dL+e3qOi8r1tlXS/mqqLoppbkv67oo5zmqpRbdl0v5oeJ55So5omA5pyJW2Fd77yaIgorCisjOiBidWlsdGluL2FtLmM6MTY5NSBidWlsdGluL2NvbW1pdC5jOjM5NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICLnhKHms5Xlr6vlhaXntKLlvJXmqpTmoYgiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAi6auS57Si5byV77ya5LiN6IO95aWX55So5L+u6KOc5qqU77yI6auS5qqU5qGI77yaJXPvvIkiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzM5IGJ1aWx0aW4vYW0uYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICLmh4nnlKjvvJolLipzIgorCisjOiBidWlsdGluL2FtLmM6MTc1NgorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAi5rKS5pyJ6K6K5pu0IOKAlOKAlCDkv67oo5zmqpTlt7LntpPmh4nnlKjpgY7jgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICLmiZPkv67oo5zmqpTlpLHmlZfmlrwgJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE3NjYKK21zZ2lkICJVc2UgJ2dpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCcgdG8gc2VlIHRoZSBmYWlsZWQgcGF0Y2giCittc2dzdHIgIueUqCAnZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoJyDmjIfku6TmqqLoppblpLHmlZfnmoTkv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODEwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisi5rKS5pyJ6K6K5pu0IOKAlOKAlCDmgqjmmK/kuI3mmK/lv5jkuobln7fooYwgJ2dpdCBhZGQn77yfXG4iCisi5aaC5p6c5rKS5pyJ5LuA6bq86KaB5paw5aKe5Yiw5pqr5a2Y5Y2A55qE77yM5YmH5b6I5Y+v6IO95piv5YW25a6D5o+Q5Lqk5bey57aT5byV5YWl5LqG55u45ZCM55qE6K6K5pu044CCXG4iCisi5oKo5Lmf6Kix5oOz6KaB6Lez6YGO6YCZ5YCL5L+u6KOc5qqU44CCIgorCisjOiBidWlsdGluL2FtLmM6MTgxNworbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIllvdSBzaG91bGQgJ2dpdCBhZGQnIGVhY2ggZmlsZSB3aXRoIHJlc29sdmVkIGNvbmZsaWN0cyB0byBtYXJrIHRoZW0gYXMgIgorInN1Y2guXG4iCisiWW91IG1pZ2h0IHJ1biBgZ2l0IHJtYCBvbiBhIGZpbGUgdG8gYWNjZXB0IFwiZGVsZXRlZCBieSB0aGVtXCIgZm9yIGl0LiIKK21zZ3N0ciAiIgorIuWcqOaCqOeahOe0ouW8leS4reS7jeWtmOWcqOacquWQiOS9teeahOi3r+W+keOAglxuIgorIuaCqOaHieipsuWwjeW3sue2k+ihneeqgeino+axuueahOavj+S4gOWAi+aqlOahiOWft+ihjCAnZ2l0IGFkZCcg5L6G5qiZ6KiY5bey57aT5a6M5oiQ44CCIFxuIgorIuS9oOWPr+S7peWwjSBcIueUseS7luWAkeWIqumZpFwiIOeahOaqlOahiOWft+ihjCBgZ2l0IHJtYCDmjIfku6TjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTI0IGJ1aWx0aW4vYW0uYzoxOTI4IGJ1aWx0aW4vYW0uYzoxOTQwIGJ1aWx0aW4vcmVzZXQuYzozNDYKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q54mp5Lu2ICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTc2Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICLmuIXnqbrntKLlvJXlpLHmlZciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDIwCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIuaCqOWlveWDj+WcqOS4iuS4gOasoSAnYW0nIOWkseaVl+W+jOenu+WLleS6hiBIRUFE44CC5pyq6YKE5Y6f6IezIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICLnhKHmlYjnmoQgLS1wYXRjaC1mb3JtYXQg5YC877yaJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTUzCittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBbPOmBuOmghT5dIFsoPG1ib3g+IHwgPE1haWxkaXI+KS4uLl0iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTU0Cittc2dpZCAiZ2l0IGFtIFs8b3B0aW9ucz5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbPOmBuOmghT5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTYwCittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgIuS7peS6kuWLleW8j+aWueW8j+Wft+ihjCIKKworIzogYnVpbHRpbi9hbS5jOjIxNjIKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAi6ICB55qE5Y+D5pW4IOKAlOKAlCDnhKHkvZznlKgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTY0Cittc2dpZCAiYWxsb3cgZmFsbCBiYWNrIG9uIDN3YXkgbWVyZ2luZyBpZiBuZWVkZWQiCittc2dzdHIgIuWmguaenOW/heimge+8jOWFgeioseS9v+eUqOS4ieaWueWQiOS9teOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIxNjUgYnVpbHRpbi9pbml0LWRiLmM6NDk0IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTgKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA0IGJ1aWx0aW4vc3Rhc2guYzo4MTEKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAi6Z2c6buY5qih5byPIgorCisjOiBidWlsdGluL2FtLmM6MjE2NworbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuWcqOaPkOS6pOiqquaYjuS4reaWsOWinuS4gOWAiyBTaWduZWQtb2ZmLWJ5IOewveWQjSIKKworIzogYnVpbHRpbi9hbS5jOjIxNzAKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAi5L2/55SoIHV0Zjgg5a2X5YWD6ZuG77yI6aCQ6Kit77yJIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIuWQkSBnaXQtbWFpbGluZm8g5YKz6YGeIC1rIOWPg+aVuCIKKworIzogYnVpbHRpbi9hbS5jOjIxNzQKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLlkJEgZ2l0LW1haWxpbmZvIOWCs+mBniAtYiDlj4PmlbgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTc2Cittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi5ZCRIGdpdC1tYWlsaW5mbyDlgrPpgZ4gLW0g5Y+D5pW4IgorCisjOiBidWlsdGluL2FtLmM6MjE3OAorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgIumHneWwjSBtYm94IOagvOW8j++8jOWQkSBnaXQtbWFpbHNwbGl0IOWCs+mBniAtLWtlZXAtY3Ig5Y+D5pW4IgorCisjOiBidWlsdGluL2FtLmM6MjE4MQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICLkuI3lkJEgZ2l0LW1haWxzcGxpdCDlgrPpgZ4gLS1rZWVwLWNyIOWPg+aVuO+8jOimhuiTiyBhbS5rZWVwY3Ig55qE6Kit5a6aIgorCisjOiBidWlsdGluL2FtLmM6MjE4NAorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAi5o2o5qOE6KOB5YiH57ea5YmN55qE5omA5pyJ5YWn5a65IgorCisjOiBidWlsdGluL2FtLmM6MjE4NiBidWlsdGluL2FtLmM6MjE4OSBidWlsdGluL2FtLmM6MjE5MiBidWlsdGluL2FtLmM6MjE5NQorIzogYnVpbHRpbi9hbS5jOjIxOTggYnVpbHRpbi9hbS5jOjIyMDEgYnVpbHRpbi9hbS5jOjIyMDQgYnVpbHRpbi9hbS5jOjIyMDcKKyM6IGJ1aWx0aW4vYW0uYzoyMjEzCittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAi5YKz6YGe57WmIGdpdC1hcHBseSIKKworIzogYnVpbHRpbi9hbS5jOjIyMDMgYnVpbHRpbi9jb21taXQuYzoxMzg2IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc2IGJ1aWx0aW4vZ3JlcC5jOjg4MyBidWlsdGluL21lcmdlLmM6MjQ5CisjOiBidWlsdGluL3B1bGwuYzoxNjAgYnVpbHRpbi9wdWxsLmM6MjE5IGJ1aWx0aW4vcmViYXNlLmM6MTQ2OQorIzogYnVpbHRpbi9yZXBhY2suYzozMTUgYnVpbHRpbi9yZXBhY2suYzozMTkgYnVpbHRpbi9yZXBhY2suYzozMjEKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTAgYnVpbHRpbi9zaG93LXJlZi5jOjE3MiBidWlsdGluL3RhZy5jOjQwMworIzogcGFyc2Utb3B0aW9ucy5oOjE1NCBwYXJzZS1vcHRpb25zLmg6MTc1IHBhcnNlLW9wdGlvbnMuaDozMTYKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjIwOSBidWlsdGluL2JyYW5jaC5jOjY2MSBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM4CisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTUgYnVpbHRpbi90YWcuYzo0MzcgYnVpbHRpbi92ZXJpZnktdGFnLmM6MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgIuagvOW8jyIKKworIzogYnVpbHRpbi9hbS5jOjIyMTAKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgIuS/ruijnOaqlOeahOagvOW8jyIKKworIzogYnVpbHRpbi9hbS5jOjIyMTYKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgIuaJk+S/ruijnOaqlOWkseaVl+aZgumhr+ekuueahOmMr+iqpOioiuaBryIKKworIzogYnVpbHRpbi9hbS5jOjIyMTgKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICLooZ3nqoHop6PmsbrlvoznubznuozlpZfnlKjkv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgIuWSjCAtLWNvbnRpbnVlIOWQjOe+qSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjQKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICLot7PpgY7nm67liY3kv67oo5zmqpQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI3Cittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAi5b6p5Y6f5Y6f5aeL5YiG5pSv5Lim57WC5q2i5omT5L+u6KOc5qqU5YuV5L2c44CCIgorCisjOiBidWlsdGluL2FtLmM6MjIzMAorbXNnaWQgImFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24gYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcy4iCittc2dzdHIgIue1guatouS/ruijnOaqlOWLleS9nOS9huS/neaMgSBIRUFEIOS4jeiuiuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkLiIKK21zZ3N0ciAi6aGv56S65q2j5Zyo5aWX55So55qE5L+u6KOc5qqU44CCIgorCisjOiBidWlsdGluL2FtLmM6MjIzNworbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAi5bCH5L2c6ICF5pel5pyf5L2c54K65o+Q5Lqk5pel5pyfIgorCisjOiBidWlsdGluL2FtLmM6MjIzOQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgIueUqOebruWJjeaZgumWk+S9nOeCuuS9nOiAheaXpeacnyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDEgYnVpbHRpbi9jb21taXQtdHJlZS5jOjEyMCBidWlsdGluL2NvbW1pdC5jOjE1MDcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODYgYnVpbHRpbi9wdWxsLmM6MTk0IGJ1aWx0aW4vcmViYXNlLmM6NTA5CisjOiBidWlsdGluL3JlYmFzZS5jOjE1MTMgYnVpbHRpbi9yZXZlcnQuYzoxMTcgYnVpbHRpbi90YWcuYzo0MTgKK21zZ2lkICJrZXktaWQiCittc2dzdHIgImtleS1pZCIKKworIzogYnVpbHRpbi9hbS5jOjIyNDIgYnVpbHRpbi9yZWJhc2UuYzo1MTAgYnVpbHRpbi9yZWJhc2UuYzoxNTE0Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAi5L2/55SoIEdQRyDnsL3lkI3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ1Cittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIu+8iOWFp+mDqOS9v+eUqO+8jOeUqOaWvCBnaXQtcmViYXNl77yJIgorCisjOiBidWlsdGluL2FtLmM6MjI2MworbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIuWPg+aVuCAtYi8tLWJpbmFyeSDlt7LntpPlvojplbfmmYLplpPkuI3lgZrku7vkvZXlr6bos6rli5XkvZzkuobvvIzkuKbkuJTlsIfooqvnp7vpmaTjgIJcbiIKKyLoq4vkuI3opoHlho3kvb/nlKjlroPkuobjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcwCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLoroDlj5bntKLlvJXlpLHmlZciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAi5LmL5YmN55qE6YeN5a6a5Z+65bqV55uu6YyEICVzIOS7jeeEtuWtmOWcqO+8jOS9huWNu+aPkOS+m+S6hiBtYm9444CCIgorCisjOiBidWlsdGluL2FtLmM6MjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIueZvOePvuS6humMr+iqpOeahCAlcyDnm67pjITjgIJcbiIKKyLkvb/nlKggXCJnaXQgYW0gLS1hYm9ydFwiIOWIqumZpOWug+OAgiIKKworIzogYnVpbHRpbi9hbS5jOjIzMTUKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICLop6Pmsbrli5XkvZzmnKrpgLLooYzvvIzmiJHlgJHkuI3mnIPnubznuozjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI1Cittc2dpZCAiaW50ZXJhY3RpdmUgbW9kZSByZXF1aXJlcyBwYXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUiCittc2dzdHIgIuS6kuWLleW8j+aooeW8j+mcgOimgeaMh+S7pOWIl+S4iuaPkOS+m+S/ruijnOaqlCIKKworIzogYnVpbHRpbi9hcHBseS5jOjgKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzzpgbjpoIU+XSBbPOS/ruijnOaqlD4uLi5dIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73lu7rnq4vmrbjmqpTmqpTmoYggJyVzJyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICLkuI3og73ph43lrprlkJHovLjlh7oiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrmnKrmj5DkvpvpgaDnq68gVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgYSBmbHVzaCBwYWNrZXQiCittc2dzdHIgImdpdCBhcmNoaXZl77ya5pyf5pyb5pivIEFDSy9OQUvvvIzljbvlvpfliLAgZmx1c2gg5YyFIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJpOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrljZTlrprpjK/oqqQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY5Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZl77ya5oeJ5pyJ5LiA5YCLIGZsdXNoIOWMhSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjIyCittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyMworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDxiYWRfdGVybT4gPGdvb2RfdGVybT4iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLXdyaXRlLXRlcm1zIDzlo54t6KGT6KqePiA85aW9Leihk+iqnj4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNAorbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jbGVhbi1zdGF0ZSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNsZWFuLXN0YXRlIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MjUKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3QtcmVzZXQgWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LXJlc2V0IFs85o+Q5LqkPl0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoyNgorbXNnaWQgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA8c3RhdGU+IDxyZXZpc2lvbj4gPGdvb2RfdGVybT4gIgorIjxiYWRfdGVybT4iCittc2dzdHIgIiIKKyJnaXQgYmlzZWN0LS1oZWxwZXIgLS1iaXNlY3Qtd3JpdGUgWy0tbm8tbG9nXSA854uA5oWLPiA854mI5pysPiA85aW9Leihk+iqnj4gPOWjni3ooZPoqp4iCisiPiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjI3Cittc2dpZCAiIgorImdpdCBiaXNlY3QtLWhlbHBlciAtLWJpc2VjdC1jaGVjay1hbmQtc2V0LXRlcm1zIDxjb21tYW5kPiA8Z29vZF90ZXJtPiAiCisiPGJhZF90ZXJtPiIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tYmlzZWN0LWNoZWNrLWFuZC1zZXQtdGVybXMgPOaMh+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+S7peeUqCBcImdpdCBiaXNlY3QgJXNcIiDlkowgXCJnaXQgYmlzZWN0ICVzXCIg5oyH5Luk44CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImJpc2VjdGluZyBvbmx5IHdpdGggYSAlcyBjb21taXQiCittc2dzdHIgIuWcqOWPquacieS4gOWAiyAlcyDmj5DkuqTnmoTmg4Xms4HkuIvkuozliIblsIvmib4iCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWPpeWwvuepuuagvAorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjLgorIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjMzMAorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICLmgqjnorroqo3ll45bWS9uXe+8nyAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozNzcKK21zZ2lkICJubyB0ZXJtcyBkZWZpbmVkIgorbXNnc3RyICLmnKrlrprnvqnooZPoqp4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJXMgZm9yIHRoZSBvbGQgc3RhdGVcbiIKKyJhbmQgJXMgZm9yIHRoZSBuZXcgc3RhdGUuXG4iCittc2dzdHIgIuaCqOebruWJjemHneWwjeiIiueLgOaFi+eahOihk+iqnuaYryAlc++8jOWwjeaWsOeLgOaFi+eahOihk+iqnuaYryAlc+OAglxuIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIGFyZ3VtZW50ICVzIGZvciAnZ2l0IGJpc2VjdCB0ZXJtcycuXG4iCisiU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIgorbXNnc3RyICIiCisi5oyH5LukICdnaXQgYmlzZWN0IHRlcm1zJyDnmoTlj4PmlbggJXMg54Sh5pWI44CCXG4iCisi5pSv5o+055qE6YG46aCF5pyJ77yaLS10ZXJtLWdvb2R8LS10ZXJtLW9sZCDlkowgLS10ZXJtLWJhZHwtLXRlcm0tbmV344CCIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBvcHRpb246ICclcyciCittc2dzdHIgIuacquitmOWIpeeahOmBuOmghe+8miclcyciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyVzJyDnnIvotbfkvobkuI3mmK/kuIDlgIvmnInmlYjnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MTIKK21zZ2lkICJiYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIuWjnueahCBIRUFEIC0g5oiR6ZyA6KaB5LiA5YCLIEhFQUQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2tpbmcgb3V0ICclcycgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3Qgc3RhcnQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAi57C95Ye6ICclcycg5aSx5pWX44CC5ZiX6KmmICdnaXQgYmlzZWN0IHN0YXJ0IDzmnInmlYjliIbmlK8+J+OAgiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU0OAorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgIuS4jeacg+WcqOWBmuS6hiBjZy1zZWVrIOeahOaoueS4iuWBmuS6jOWIhuWwi+aJviIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjU1MQorbXNnaWQgImJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIuWjnueahCBIRUFEIC0g5aWH5oCq55qE56ym6Jmf5byV55SoIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmOiAnJXMnIgorbXNnc3RyICLnhKHmlYjnmoTlvJXnlKjvvJonJXMnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMxCittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAi5Z+36KGMICdnaXQgYmlzZWN0IG5leHQnIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NjMzCittc2dpZCAid3JpdGUgdGhlIHRlcm1zIHRvIC5naXQvQklTRUNUX1RFUk1TIgorbXNnc3RyICLlsIfooZPoqp7lr6vlhaUgLmdpdC9CSVNFQ1RfVEVSTVMiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzUKK21zZ2lkICJjbGVhbnVwIHRoZSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIua4hemZpOS6jOWIhuWwi+aJvueLgOaFiyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjYzNworbXNnaWQgImNoZWNrIGZvciBleHBlY3RlZCByZXZzIgorbXNnc3RyICLmqqLmn6XpoJDmnJ/nmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2MzkKK21zZ2lkICJyZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlIgorbXNnc3RyICLmuIXpmaTkuozliIblsIvmib7ni4DmhYsiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDEKK21zZ2lkICJ3cml0ZSBvdXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSBpbiBCSVNFQ1RfTE9HIgorbXNnc3RyICLlsIfkuozliIblsIvmib7nmoTni4DmhYvlr6vlhaUgQklTRUNUX0xPRyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0MworbXNnaWQgImNoZWNrIGFuZCBzZXQgdGVybXMgaW4gYSBiaXNlY3Rpb24gc3RhdGUiCittc2dzdHIgIuWcqOS4gOWAi+S6jOWIhuWwi+aJvueLgOaFi+S4reaqouafpeWSjOioreWumuihk+iqniIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NQorbXNnaWQgImNoZWNrIHdoZXRoZXIgYmFkIG9yIGdvb2QgdGVybXMgZXhpc3QiCittc2dzdHIgIuaqouafpeWjnueahOaIluWlveeahOihk+iqnuaYr+WQpuWtmOWcqCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY0NworbXNnaWQgInByaW50IG91dCB0aGUgYmlzZWN0IHRlcm1zIgorbXNnc3RyICLliJfljbDkuozliIblsIvmib7ooZPoqp4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NDkKK21zZ2lkICJzdGFydCB0aGUgYmlzZWN0IHNlc3Npb24iCittc2dzdHIgIuWVn+WLleS6jOWIhuWwi+aJvumBjueoiyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY1MQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIuabtOaWsCBCSVNFQ1RfSEVBRCDogIzpnZ7nsL3lh7rnm67liY3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NTMKK21zZ2lkICJubyBsb2cgZm9yIEJJU0VDVF9XUklURSIKK21zZ3N0ciAiQklTRUNUX1dSSVRFIOeEoeaXpeiqjCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY3MAorbXNnaWQgIi0td3JpdGUtdGVybXMgcmVxdWlyZXMgdHdvIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS13cml0ZS10ZXJtcyDpnIDopoHlhanlgIvlj4PmlbgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo2NzQKK21zZ2lkICItLWJpc2VjdC1jbGVhbi1zdGF0ZSByZXF1aXJlcyBubyBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LWNsZWFuLXN0YXRlIOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY4MQorbXNnaWQgIi0tYmlzZWN0LXJlc2V0IHJlcXVpcmVzIGVpdGhlciBubyBhcmd1bWVudCBvciBhIGNvbW1pdCIKK21zZ3N0ciAiLS1iaXNlY3QtcmVzZXQg54Sh6ZyA5Y+D5pW45oiW6ICF6ZyA6KaB5LiA5YCL5o+Q5LqkIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6Njg1Cittc2dpZCAiLS1iaXNlY3Qtd3JpdGUgcmVxdWlyZXMgZWl0aGVyIDQgb3IgNSBhcmd1bWVudHMiCittc2dzdHIgIi0tYmlzZWN0LXdyaXRlIOmcgOimgSA0IOaIliA1IOWAi+WPg+aVuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5MQorbXNnaWQgIi0tY2hlY2stYW5kLXNldC10ZXJtcyByZXF1aXJlcyAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1jaGVjay1hbmQtc2V0LXRlcm1zIOmcgOimgSAzIOWAi+WPg+aVuCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjY5NworbXNnaWQgIi0tYmlzZWN0LW5leHQtY2hlY2sgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1iaXNlY3QtbmV4dC1jaGVjayDpnIDopoEgMiDmiJYgMyDlgIvlj4PmlbgiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3MDMKK21zZ2lkICItLWJpc2VjdC10ZXJtcyByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnQiCittc2dzdHIgIi0tYmlzZWN0LXRlcm1zIOmcgOimgSAwIOaIliAxIOWAi+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+aciOWJjSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZSIKK21zZ2lkX3BsdXJhbCAiZmlsZSAlcyBoYXMgb25seSAlbHUgbGluZXMiCittc2dzdHJbMF0gIuaqlOahiCAlcyDlj6rmnIkgJWx1IOihjCIKK21zZ3N0clsxXSAi5qqU5qGIICVzIOWPquaciSAlbHUg6KGMIgorCisjOiBidWlsdGluL2JsYW1lLmM6MTEyNQorbXNnaWQgIkJsYW1pbmcgbGluZXMiCittc2dzdHIgIui/vei5pOeoi+W8j+eivOihjCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyOQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmBuOmghT5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzAKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmBuOmghT5dIFstbF0gWy1mXSA85YiG5pSv5ZCNPiBbPOi1t+Wni+m7nj5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMxCittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YG46aCFPl0gWy1yXSAoLWQgfCAtRCkgPOWIhuaUr+WQjT4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzIKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgbjpoIU+XSAoLW0gfCAtTSkgWzzoiIrliIbmlK8+XSA85paw5YiG5pSvPiIKKworIzogYnVpbHRpbi9icmFuY2guYzozMworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1jIHwgLUMpIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmBuOmghT5dICgtYyB8IC1DKSBbPOiAgeWIhuaUrz5dIDzmlrDliIbmlK8+IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tcG9pbnRzLWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmBuOmghT5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tZm9ybWF0XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmBuOmghT5dIFstciB8IC1hXSBbLS1mb3JtYXRdIgorCisjICDora/ogIXvvJrkv53mjIHljp/mj5vooYzmoLzlvI/vvIzlnKjovLjlh7rmmYIgJXMg55qE5pu/5Luj5YWn5a655pyD6K6T5a2X5Liy6K6K6ZW3CisjOiBidWlsdGluL2JyYW5jaC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyLlsIfopoHliKrpmaTnmoTliIbmlK8gJyVzJyDlt7LntpPooqvlkIjkvbXliLBcbiIKKyIgICAgICAgICAnJXMn77yM5L2G5pyq5ZCI5L215YiwIEhFQUTjgIIiCisKKyMgIOitr+iAhe+8muS/neaMgeWOn+aPm+ihjOagvOW8j++8jOWcqOi8uOWHuuaZgiAlcyDnmoTmm7/ku6PlhaflrrnmnIPorpPlrZfkuLLororplbcKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIuS4puacquWIqumZpOWIhuaUryAnJXMn77yMIOmblueEtuWug+W3sue2k+WQiOS9teWIsCBIRUFE77yMXG4iCisiICAgICAgICAg54S26ICM5Y275bCa5pyq6KKr5ZCI5L215Yiw5YiG5pSvICclcycg44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIueEoeazleafpeipoiAnJXMnIOaMh+WQkeeahOaPkOS6pOeJqeS7tiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisi5YiG5pSvICclcycg5rKS5pyJ5a6M5YWo5ZCI5L2144CCXG4iCisi5aaC5p6c5oKo56K66KqN6KaB5Yiq6Zmk5a6D77yM5Z+36KGMICdnaXQgYnJhbmNoIC1EICVzJ+OAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLmm7TmlrDoqK3lrprmqpTmoYjlpLHmlZciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjIwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICLkuI3og73lsIcgLWEg5ZKMIC1kIOWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIueEoeazleafpeipoiBIRUFEIOaMh+WQkeeahOaPkOS6pOeJqeS7tiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSBicmFuY2ggJyVzJyBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICLnhKHms5XliKrpmaTnsL3lh7rmlrwgJyUyJHMnIOeahOWIhuaUryAnJTEkcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLmnKrog73mib7liLDpgaDnq6/ov73ouaTliIbmlK8gJyVzJ+OAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi5YiG5pSvICclcycg5pyq55m854++44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIueEoeazleWIqumZpOmBoOerr+i/vei5pOWIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAi54Sh5rOV5Yiq6Zmk5YiG5pSvICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAi5bey5Yiq6Zmk6YGg56uv6L+96Lmk5YiG5pSvICVz77yI5pu+54K6ICVz77yJ44CCXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLlt7LliKrpmaTliIbmlK8gJXPvvIjmm77ngrogJXPvvInjgIJcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjkgYnVpbHRpbi90YWcuYzo2MQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIgorbXNnc3RyICLkuI3og73op6PmnpDmoLzlvI/ljJblrZfkuLIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYwCittc2dpZCAiY291bGQgbm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIEhFQUQg5o+Q5LqkIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEICglcykgcG9pbnRzIG91dHNpZGUgb2YgcmVmcy9oZWFkcy8iCittc2dzdHIgIkhFQUQgKCVzKSDmjIflkJEgcmVmcy9oZWFkcy8g5LmL5aSWIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgaXMgYmVpbmcgcmViYXNlZCBhdCAlcyIKK21zZ3N0ciAi5YiG5pSvICVzIOato+iiq+mHjeWumuWfuuW6leWIsCAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIGlzIGJlaW5nIGJpc2VjdGVkIGF0ICVzIgorbXNnc3RyICLliIbmlK8gJXMg5q2j6KKr5LqM5YiG5bCL5om+5pa8ICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwMgorbXNnaWQgImNhbm5vdCBjb3B5IHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAi54Sh5rOV6KSH6KO955uu5YmN5YiG5pSv5Zug54K65LiN6JmV5pa85Lu75L2V5YiG5pSv5LiK44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUwNAorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICLnhKHms5Xph43mlrDlkb3lkI3nm67liY3liIbmlK/lm6DngrrkuI3omZXmlrzku7vkvZXliIbmlK/kuIrjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIueEoeaViOeahOWIhuaUr+WQje+8miclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTQyCittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIuWIhuaUr+mHjeaWsOWRveWQjeWkseaVlyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDQKK21zZ2lkICJCcmFuY2ggY29weSBmYWlsZWQiCittc2dzdHIgIuWIhuaUr+ikh+ijveWkseaVlyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhIGNvcHkgb2YgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5bey54K66Yyv6Kqk5ZG95ZCN55qE5YiG5pSvICclcycg5bu656uL5LqG5LiA5YCL5Ymv5pysIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAi5bey5bCH6Yyv6Kqk5ZG95ZCN55qE5YiG5pSvICclcycg6YeN5paw5ZG95ZCNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICLliIbmlK/ph43mlrDlkb3lkI3ngrogJXPvvIzkvYYgSEVBRCDmspLmnInmm7TmlrDvvIEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY2Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLliIbmlK/ooqvph43mlrDlkb3lkI3vvIzkvYbmm7TmlrDoqK3lrprmqpTmoYjlpLHmlZciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTY4Cittc2dpZCAiQnJhbmNoIGlzIGNvcGllZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIuWIhuaUr+W3suikh+ijve+8jOS9huabtOaWsOioreWumuaqlOahiOWkseaVlyIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaFxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBzdHJpcHBlZC5cbiIKK21zZ3N0ciAiIgorIuiri+e3qOi8r+WIhuaUr+eahOaPj+i/sFxuIgorIiAgJXNcbiIKKyLku6UgJyVjJyDplovpoK3nmoTooYzlsIfooqvpgY7mv77jgIJcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTgKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIumAmueUqOmBuOmghSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjAKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAi6aGv56S66Zuc5rmK5YC85ZKM5Li76aGM77yM6Iul5Y+D5pW45Ye654++5YWp5qyh5YmH6aGv56S65LiK5ri45YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMQorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIuS4jemhr+ekuuioiuaBryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjIKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAi6Kit5a6a6L+96Lmk5qih5byP77yI5Y+D6KaLIGdpdC1wdWxsKDEp77yJIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNAorbXNnaWQgImRvIG5vdCB1c2UiCittc2dzdHIgIuS4jeimgeS9v+eUqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MjYgYnVpbHRpbi9yZWJhc2UuYzo1MDUKK21zZ2lkICJ1cHN0cmVhbSIKK21zZ3N0ciAi5LiK5ri4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNgorbXNnaWQgImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAi5pS56K6K5LiK5ri46KiK5oGvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNworI3wgbXNnaWQgIlVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnaWQgInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICLlj5bmtojkuIrmuLjos4foqIroqK3lrpoiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4Cittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICLkvb/nlKjlvanoibLovLjlh7oiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI5Cittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi5L2c55So5pa86YGg56uv6L+96Lmk5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMSBidWlsdGluL2JyYW5jaC5jOjYzMworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIuWPquWIl+WNsOWMheWQq+ipsuaPkOS6pOeahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzIgYnVpbHRpbi9icmFuY2guYzo2MzQKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLlj6rliJfljbDkuI3ljIXlkKvoqbLmj5DkuqTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM3Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAi5YW36auU55qEIGdpdC1icmFuY2gg5YuV5L2c77yaIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzOAorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLliJflh7rpgaDnq6/ov73ouaTlj4rmnKzmqZ/liIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQwCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgIuWIqumZpOWujOWFqOWQiOS9teeahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDEKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICLliKrpmaTliIbmlK/vvIjljbPkvb/mspLmnInlkIjkvbXvvIkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIuenu+WLlS/ph43mlrDlkb3lkI3kuIDlgIvliIbmlK/vvIzku6Xlj4rlroPnmoTlvJXnlKjml6XoqowiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi56e75YuVL+mHjeaWsOWRveWQjeS4gOWAi+WIhuaUr++8jOWNs+S9v+ebruaomeW3suWtmOWcqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDQKK21zZ2lkICJjb3B5IGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICLopIfoo73kuIDlgIvliIbmlK/lkozlroPnmoTlvJXnlKjml6XoqowiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ1Cittc2dpZCAiY29weSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLopIfoo73kuIDlgIvliIbmlK/vvIzljbPkvb/nm67mqJnlt7LlrZjlnKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQ2Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgIuWIl+WHuuWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IGN1cnJlbnQgYnJhbmNoIG5hbWUiCittc2dzdHIgIumhr+ekuuebruWJjeWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDgKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAi5bu656uL5YiG5pSv55qE5byV55So5pel6KqMIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLmqJnoqJjliIbmlK/nmoTmj4/ov7AiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUxCittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAi5by35Yi25bu656uL44CB56e75YuVL+mHjeaWsOWRveWQjeOAgeWIqumZpCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NTIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG1lcmdlZCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5bey57aT5ZCI5L2155qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MworbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5bCa5pyq5ZCI5L2155qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NAorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAi5Lul5YiX55qE5pa55byP6aGv56S65YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyIGJ1aWx0aW4vbm90ZXMuYzo0MTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MTggYnVpbHRpbi9ub3Rlcy5jOjU4MSBidWlsdGluL25vdGVzLmM6NTg0CisjOiBidWlsdGluL3RhZy5jOjQzMworbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAi54mp5Lu2IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1OAorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5oyH5ZCR6Kmy54mp5Lu255qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY2MCBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ4IGJ1aWx0aW4vdGFnLmM6NDQwCittc2dpZCAic29ydGluZyBhbmQgZmlsdGVyaW5nIGFyZSBjYXNlIGluc2Vuc2l0aXZlIgorbXNnc3RyICLmjpLluo/lkozpgY7mv77lsazmlrzlpKflsI/lr6vkuI3mlY/mhJ8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjYxIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzggYnVpbHRpbi90YWcuYzo0MzgKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjM4Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAi6Ly45Ye65qC85byPIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY4NCBidWlsdGluL2Nsb25lLmM6Nzg0Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIkhFQUQg5rKS5pyJ5L2N5pa8IC9yZWZzL2hlYWRzIOS5i+S4i++8gSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDgKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIOWSjCAtLXZlcmJvc2Ug5LiN55u45a65IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyMyBidWlsdGluL2JyYW5jaC5jOjc3NyBidWlsdGluL2JyYW5jaC5jOjc4NgorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICLlv4XpoIjmj5DkvpvliIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzUzCittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi5LiN6IO95ZCR5YiG6Zui6ZaL6aCt5oyH5qiZ5o+Q5L6b5o+P6L+wIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OAorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICLkuI3og73ngrrkuIDlgIvku6XkuIrnmoTliIbmlK/nt6jovK/mj4/ov7AiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICLliIbmlK8gJyVzJyDlsJrnhKHmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAi5rKS5pyJ5YiG5pSvICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgzCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgY29weSBvcGVyYXRpb24iCittc2dzdHIgIueCuuikh+ijveWLleS9nOaPkOS+m+S6huWkquWkmueahOWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTIKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAi54K66YeN5paw5ZG95ZCN5YuV5L2c5o+Q5L6b5LqG5aSq5aSa55qE5Y+D5pW4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc5NworbXNnaWQgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICLngrroqK3lrprmlrDkuIrmuLjmj5DkvpvkuoblpKrlpJrnmoTlj4PmlbgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi54Sh5rOV6Kit5a6aIEhFQUQg55qE5LiK5ri454K6ICVz77yM5Zug54K6IEhFQUQg5rKS5pyJ5oyH5ZCR5Lu75L2V5YiG5pSv44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwNCBidWlsdGluL2JyYW5jaC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICLmspLmnInmraTliIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuWIhuaUryAnJXMnIOS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjEKK21zZ2lkICJ0b28gbWFueSBhcmd1bWVudHMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgIueCuuWPlua2iOS4iua4uOioreWumuWLleS9nOaPkOS+m+S6huWkquWkmueahOWPg+aVuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICLnhKHms5Xlj5bmtoggSEVBRCDnmoTkuIrmuLjoqK3lrprlm6DngrrlroPmspLmnInmjIflkJHkuIDlgIvliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5YiG5pSvICclcycg5rKS5pyJ5LiK5ri46KiK5oGvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgIiIKKyJUaGUgLWEsIGFuZCAtciwgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IHRha2UgYSBicmFuY2ggbmFtZS5cbiIKKyJEaWQgeW91IG1lYW4gdG8gdXNlOiAtYXwtciAtLWxpc3QgPHBhdHRlcm4+PyIKK21zZ3N0ciAiIgorIidnaXQgYnJhbmNoJyDnmoQgLWEg5ZKMIC1yIOmBuOmgheS4jeW4tuS4gOWAi+WIhuaUr+WQjeOAglxuIgorIuaCqOaYr+WQpuaDs+imgeS9v+eUqO+8mi1hfC1yIC0tbGlzdCA85qih5byPPu+8nyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICIiCisidGhlICctLXNldC11cHN0cmVhbScgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgJy0tdHJhY2snIG9yICIKKyInLS1zZXQtdXBzdHJlYW0tdG8nIGluc3RlYWQuIgorbXNnc3RyICLkuI3lho3mlK/mj7TpgbjpoIUgJy0tc2V0LXVwc3RyZWFtJ+OAguiri+S9v+eUqCAnLS10cmFjaycg5oiWICctLXNldC11cHN0cmVhbS10byfjgIIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTUgYnVpbHRpbi9idW5kbGUuYzoyMworI3wgbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ2lkICJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSBjcmVhdGUgWzzpgbjpoIU+XSA85qqU5qGIPiA8Z2l0LXJldi1saXN0IOWPg+aVuD4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYgYnVpbHRpbi9idW5kbGUuYzoyOAorI3wgbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ2lkICJnaXQgYnVuZGxlIHZlcmlmeSBbPG9wdGlvbnM+XSA8ZmlsZT4iCittc2dzdHIgImdpdCBidW5kbGUgdmVyaWZ5IFs86YG46aCFPl0gPOaqlOahiD4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTcgYnVpbHRpbi9idW5kbGUuYzozMworbXNnaWQgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iCittc2dzdHIgImdpdCBidW5kbGUgbGlzdC1oZWFkcyA85qqU5qGIPiBbPOWPg+iAg+WQjeeosT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjE4IGJ1aWx0aW4vYnVuZGxlLmM6MzgKK21zZ2lkICJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIKK21zZ3N0ciAiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA85qqU5qGIPiBbPOWPg+iAg+WQjeeosT4uLi5dIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIyOAorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLkuI3poa/npLrpgLLluqbooagiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjMwCittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi6aGv56S66YCy5bqm6KGoIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjcwIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICLlnKjnianku7blr6vlhaXpmo7mrrXpoa/npLrpgLLluqbooagiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NzMgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjM1Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICLnlbbpgLLluqbooajpoa/npLrmmYLpoZ7kvLzmlrwgLS1hbGwtcHJvZ3Jlc3MiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6OTMKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICLpnIDopoHkuIDlgIvniYjmnKzluqvkvoblu7rnq4vljIXjgIIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTA0CisjfCBtc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dpZCAiZG8gbm90IHNob3cgYnVuZGxlIGRldGFpbHMiCittc2dzdHIgIuS4jemhr+ekuuWMhSAoYnVuZGxlKSDoqbPntLDos4foqIoiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMg5Y+v5LulXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICLpnIDopoHkuIDlgIvniYjmnKzluqvkvobop6PljIXjgIIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6MTY4IGJ1aWx0aW4vcmVtb3RlLmM6MTYwOQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgIuips+e0sOi8uOWHuu+8m+W/hemgiOe9ruaWvOWtkOaMh+S7pOS5i+WJjSIKKworIzogYnVpbHRpbi9idW5kbGUuYzoxOTAgYnVpbHRpbi9yZW1vdGUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuacquefpeWtkOaMh+S7pO+8miVzIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NTk1Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDx0eXBlPiB8IC0tdGV4dGNvbnYgfCAtLWZpbHRlcnMpIFstLXBhdGg9PHBhdGg+XSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1zIFstLWFsbG93LXVua25vd24tdHlwZV0gfCAtZSB8IC0iCisicCB8IDzpoZ7lnos+IHwgLS10ZXh0Y29udiB8IC0tZmlsdGVycykgWy0tcGF0aD086Lev5b6RPl0gPOeJqeS7tj4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo1OTYKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSBbLS10ZXh0Y29udiB8IC0tIgorImZpbHRlcnNdIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjE3Cittc2dpZCAib25seSBvbmUgYmF0Y2ggb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQiCittc2dzdHIgIuWPquiDveaMh+WumuS4gOWAi+aJueasoeiZleeQhumBuOmghSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjYzNQorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPOmhnuWeiz4g5Y+v5Lul5piv5YW25Lit5LmL5LiA77yaYmxvYuOAgXRyZWXjgIFjb21taXTjgIF0YWciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzYKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICLpoa/npLrnianku7bpoZ7lnosiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzcKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICLpoa/npLrnianku7blpKflsI8iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2MzkKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgIueVtuaykuaciemMr+iqpOaZgumboumWi+S4pui/lOWbnumbtiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY0MAorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLnvo7op4DlnLDliJfljbDnianku7bnmoTlhaflrrkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDIKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi5bCN5pa86LOH5paZ54mp5Lu277yM5bCN5YW25YWn5a655YGa5paH5a2X6L2J5o+bIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIGZpbHRlcnMgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi5bCN5pa86LOH5paZ54mp5Lu277yM5bCN5YW25YWn5a655YGa6YGO5r++IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ1IGdpdC1zdWJtb2R1bGUuc2g6OTkyCittc2dpZCAiYmxvYiIKK21zZ3N0ciAi6LOH5paZ54mp5Lu2IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ2Cittc2dpZCAidXNlIGEgc3BlY2lmaWMgcGF0aCBmb3IgLS10ZXh0Y29udi8tLWZpbHRlcnMiCittc2dzdHIgIuWwjeaWvCAtLXRleHRjb252Ly0tZmlsdGVycyDkvb/nlKjkuIDlgIvnibnlrprnmoTot6/lvpEiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NDgKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgIuWFgeiosSAtcyDlkowgLXQg5bCN5pCN5aOe55qE54mp5Lu255Sf5pWIIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjQ5Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICLnt6nooZ0gLS1iYXRjaCDnmoTovLjlh7oiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NTEKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIumhr+ekuuW+nuaomea6lui8uOWFpeaPkOS+m+eahOeJqeS7tueahOioiuaBr+WSjOWFp+WuuSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjY1NQorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi6aGv56S65b6e5qiZ5rqW6Ly45YWl5o+Q5L6b55qE54mp5Lu255qE6KiK5oGvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NjU5Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICLot5/pmqjmqLnlhafnrKbomZ/pgKPntZDvvIjlkowgLS1iYXRjaCDmiJYgLS1iYXRjaC1jaGVjayDlhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjEKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICLkvb/nlKggLS1iYXRjaCDmiJYgLS1iYXRjaC1jaGVjayDlj4Pmlbjpoa/npLrmiYDmnInnianku7YiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo2NjMKK21zZ2lkICJkbyBub3Qgb3JkZXIgLS1iYXRjaC1hbGwtb2JqZWN0cyBvdXRwdXQiCittc2dzdHIgIuS4jeimgeWwjSAtLWJhdGNoLWFsbC1vYmplY3RzIOeahOi8uOWHuuaOkuW6jyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTMKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDzlsazmgKc+Li4uXSBbLS1dIDzot6/lvpHlkI0+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxNAorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDzlsazmgKc+Li4uXSIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgIuWgseWRiuioreWumuWcqOaqlOahiOS4iueahOaJgOacieWxrOaApyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjIKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi5Y+q5L2/55So57Si5byV5Lit55qEIC5naXRhdHRyaWJ1dGVzIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI1IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzoxMDIKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl6K6A5Ye65qqU5qGI5ZCNIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyNSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI3Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIui8uOWFpeWSjOi8uOWHuueahOe0gOmMhOS9v+eUqCBOVUwg5a2X5YWD57WC57WQIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIxIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDM1IGJ1aWx0aW4vZ2MuYzo1MzcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDYKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIuS4jemhr+ekuumAsuW6puWgseWRiiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOQorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICLpoa/npLrmnKrnrKblkIjnmoTovLjlhaXot6/lvpEiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MzEKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAi5qqi5p+l5pmC5b+955Wl57Si5byVIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MAorbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgIuS4jeiDveWQjOaZguaMh+Wumui3r+W+keWPiiAtLXN0ZGluIOWPg+aVuCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiLXog6ZyA6KaB5ZKMIC0tc3RkaW4g5Y+D5pW45YWx55So5omN5pyJ5oSP576pIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICLmnKrmjIflrprot6/lvpEiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY5Cittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIuWPg+aVuCAtLXF1aWV0IOWPquWcqOaPkOS+m+S4gOWAi+i3r+W+keWQjeaZguacieaViCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNzEKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAi5LiN6IO95ZCM5pmC5o+Q5L6bIC0tcXVpZXQg5ZKMIC0tdmVyYm9zZSDlj4PmlbgiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTc0Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiLS1ub24tbWF0Y2hpbmcg6YG46aCF5Y+q5Zyo5L2/55SoIC0tdmVyYm9zZSDmmYLmnInmlYgiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjkKK21zZ2lkICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCittc2dzdHIgImdpdCBjaGVjay1tYWlsbWFwIFs86YG46aCFPl0gPOiBr+e5q+S9jeWdgD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjE0Cittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIumChOW+nuaomea6lui8uOWFpeiugOWPluiBr+e5q+S9jeWdgCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICLkuI3og73op6PmnpDoga/nuavkvY3lnYDvvJolcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDgKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+WumuiBr+e5q+S9jeWdgCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEzMQorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzzpgbjpoIU+XSBbLS1dIFs85qqU5qGIPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNDgKK21zZ2lkICJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIKK21zZ3N0ciAi57Si5byV5YC85oeJ6Kmy5Y+W5YC8IDEg5YiwIDMg5oiW6ICFIGFsbCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICLnsL3lh7rntKLlvJXljYDnmoTmiYDmnInmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNjUKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgIuW8t+WItuimhuiTi+ePvuacieeahOaqlOahiCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2NworbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgIuWtmOWcqOaIluS4jeWcqOe0ouW8leS4reeahOaqlOahiOmDveaykuacieitpuWRiiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE2OQorbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAi5LiN57C95Ye65paw5qqU5qGIIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTcxCittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgIuabtOaWsOe0ouW8leS4reaqlOahiOeahOeLgOaFi+ioiuaBryIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE3NQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl6K6A5Y+W6Lev5b6R5YiX6KGoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTc3Cittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICLlsIflhaflrrnlr6vlhaXmmqvlrZjmqpQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzggYnVpbHRpbi9jb2x1bW4uYzozMQorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODUgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzODgKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzk2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODgyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Njc5Cittc2dpZCAic3RyaW5nIgorbXNnc3RyICLlrZfkuLIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxNzkKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICLlnKjlu7rnq4vmqpTmoYjmmYLvvIzlnKjliY3pnaLliqDkuIogPOWtl+S4sj4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODEKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAi5b6e5oyH5a6a5pqr5a2Y5Y2A5Lit5ou35Ye65qqU5qGIIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzEKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPOmBuOmghT5dIDzliIbmlK8+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzIKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPOmBuOmghT5dIFs85YiG5pSvPl0gLS0gPOaqlOahiD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNworbXNnaWQgImdpdCBzd2l0Y2ggWzxvcHRpb25zPl0gWzxicmFuY2g+XSIKK21zZ3N0ciAiZ2l0IHN3aXRjaCBbPOmBuOmghT5dIFs85YiG5pSvPl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MgorbXNnaWQgImdpdCByZXN0b3JlIFs8b3B0aW9ucz5dIFstLXNvdXJjZT08YnJhbmNoPl0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgcmVzdG9yZSBbPOmBuOmghT5dIFstLXNvdXJjZT085YiG5pSvPl0gPOaqlOahiD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUgYnVpbHRpbi9jaGVja291dC5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAi6Lev5b6RICclcycg5rKS5pyJ5oiR5YCR55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc3IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi6Lev5b6RICclcycg5rKS5pyJ5LuW5YCR55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIui3r+W+kSAnJXMnIOaykuacieWFqOmDqOW/hemcgOeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIui3r+W+kSAnJXMnIOaykuacieW/hemcgOeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAicGF0aCAnJXMn77ya54Sh5rOV5ZCI5L21IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICLnhKHms5XngrogJyVzJyDmlrDlop7lkIjkvbXntZDmnpwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVjcmVhdGVkICVkIG1lcmdlIGNvbmZsaWN0IgorbXNnaWRfcGx1cmFsICJSZWNyZWF0ZWQgJWQgbWVyZ2UgY29uZmxpY3RzIgorbXNnc3RyWzBdICLph43mlrDlu7rnq4vkuoYgJWQg5YCL5ZCI5L216KGd56qBIgorbXNnc3RyWzFdICLph43mlrDlu7rnq4vkuoYgJWQg5YCL5ZCI5L216KGd56qBIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tICVzIgorbXNnaWRfcGx1cmFsICJVcGRhdGVkICVkIHBhdGhzIGZyb20gJXMiCittc2dzdHJbMF0gIuW+niAlMiRzIOabtOaWsOS6hiAlMSRkIOWAi+i3r+W+kSIKK21zZ3N0clsxXSAi5b6eICUyJHMg5pu05paw5LqGICUxJGQg5YCL6Lev5b6RIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgJWQgcGF0aCBmcm9tIHRoZSBpbmRleCIKK21zZ2lkX3BsdXJhbCAiVXBkYXRlZCAlZCBwYXRocyBmcm9tIHRoZSBpbmRleCIKK21zZ3N0clswXSAi5b6e57Si5byV5Y2A5pu05paw5LqGICVkIOWAi+i3r+W+kSIKK21zZ3N0clsxXSAi5b6e57Si5byV5Y2A5pu05paw5LqGICVkIOWAi+i3r+W+kSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQxMiBidWlsdGluL2NoZWNrb3V0LmM6NDE1IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTgKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICInJXMnIOS4jeiDveWcqOabtOaWsOi3r+W+keaZguS9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQyNSBidWlsdGluL2NoZWNrb3V0LmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyDkuI3og73lkowgJXMg5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAi5LiN6IO95ZCM5pmC5pu05paw6Lev5b6R5Lim5YiH5o+b5Yiw5YiG5pSvJyVzJ+OAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQzNgorIywgYy1mb3JtYXQKK21zZ2lkICJuZWl0aGVyICclcycgb3IgJyVzJyBpcyBzcGVjaWZpZWQiCittc2dzdHIgIiclcycg5oiWICclcycg6YO95rKS5pyJ5oyH5a6aIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgbXVzdCBiZSB1c2VkIHdoZW4gJyVzJyBpcyBub3Qgc3BlY2lmaWVkIgorbXNnc3RyICLmnKrmjIflrpogJyUyJHMnIOaZgu+8jOW/hemgiOS9v+eUqCAnJTEkcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NDUgYnVpbHRpbi9jaGVja291dC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG9yICclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJyVzJyDmiJYgJyVzJyDkuI3og73lkowgJXMg5LiA6LW35L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICLot6/lvpEgJyVzJyDmnKrlkIjkvbUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2ODIgYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo4MgorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLmgqjpnIDopoHlhYjop6Pmsbrnm67liY3ntKLlvJXnmoTooZ3nqoEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBjb250aW51ZSB3aXRoIHN0YWdlZCBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLkuI3og73nubznuozvvIzkuIvliJfmqpTmoYjmnInmmqvlrZjnmoTkv67mlLnvvJpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAi5LiN6IO95bCNICclcycg5Z+36KGMIHJlZmxvZyDli5XkvZzvvJolc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODc3Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQg55uu5YmN5L2N5pa8IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODgxIGJ1aWx0aW4vY2xvbmUuYzo3MTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIEhFQUQiCittc2dzdHIgIuS4jeiDveabtOaWsCBIRUFEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIumHjeioreWIhuaUryAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIuW3sue2k+S9jeaWvCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIuWIh+aPm+S4pumHjeioreWIhuaUryAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQgYnVpbHRpbi9jaGVja291dC5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi5YiH5o+b5Yiw5LiA5YCL5paw5YiG5pSvICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLliIfmj5vliLDliIbmlK8gJyVzJ1xuIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiDlj4rlhbblroMgJWQg5YCL44CCXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyLorablkYrvvJrmgqjmraPkuJ/kuIsgJWQg5YCL5o+Q5Lqk77yM5pyq5ZKM5Lu75L2V5YiG5pSv6Zec6IGv77yaXG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIuitpuWRiu+8muaCqOato+S4n+S4iyAlZCDlgIvmj5DkuqTvvIzmnKrlkozku7vkvZXliIbmlK/pl5zoga/vvJpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIuWmguaenOaCqOaDs+imgemAj+mBjuW7uueri+aWsOWIhuaUr+WEsuWtmOWug++8jOmAmeWPr+iDveaYr+S4gOWAi+WlveaZguWAmeOAglxuIgorIuWmguS4i+WLleS9nO+8mlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDzmlrDliIbmlK/lkI0+ICVzXG4iCisiXG4iCittc2dzdHJbMV0gIiIKKyLlpoLmnpzmgqjmg7PopoHpgI/pgY7lu7rnq4vmlrDliIbmlK/lhLLlrZjlroPlgJHvvIzpgJnlj6/og73mmK/kuIDlgIvlpb3mmYLlgJnjgIJcbiIKKyLlpoLkuIvli5XkvZzvvJpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA85paw5YiG5pSv5ZCNPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNworbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgIuWcqOeJiOacrOmBjeatt+aZgumBh+WIsOWFp+mDqOmMr+iqpCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMTEKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAi5LmL5YmN55qEIEhFQUQg5L2N572u5pivIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA1MSBidWlsdGluL2NoZWNrb3V0LmM6MTI4NgorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIuaCqOS9jeaWvOS4gOWAi+WwmuacquWIneWni+WMlueahOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNzgKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQiCittc2dzdHIgIumgkOacn+WPquacieS4gOWAi+W8leeUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgIuaHieWPquacieS4gOWAi+W8leeUqO+8jOWNu+e1puWHuuS6hiAlZCDlgIsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGNvdWxkIGJlIGJvdGggYSBsb2NhbCBmaWxlIGFuZCBhIHRyYWNraW5nIGJyYW5jaC5cbiIKKyJQbGVhc2UgdXNlIC0tIChhbmQgb3B0aW9uYWxseSAtLW5vLWd1ZXNzKSB0byBkaXNhbWJpZ3VhdGUiCittc2dzdHIgIiIKKyInJXMnIOaXouWPr+S7peaYr+S4gOWAi+acrOapn+aqlOahiO+8jOS5n+WPr+S7peaYr+S4gOWAi+i/vei5pOWIhuaUr+OAglxuIgorIuiri+S9v+eUqCAtLe+8iOWSjOWPr+mBuOeahCAtLW5vLWd1ZXNz77yJ5L6G5raI6Zmk5q2n576pIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NSBidWlsdGluL3dvcmt0cmVlLmM6MjkwIGJ1aWx0aW4vd29ya3RyZWUuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLnhKHmlYjlvJXnlKjvvJolcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTggYnVpbHRpbi9jaGVja291dC5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICLlvJXnlKjkuI3mmK/kuIDlgIvmqLnvvJolcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCB0YWcgJyVzJyIKK21zZ3N0ciAi5pyf5pyb5LiA5YCL5YiG5pSv77yM5b6X5Yiw5qiZ57GkICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImEgYnJhbmNoIGlzIGV4cGVjdGVkLCBnb3QgcmVtb3RlIGJyYW5jaCAnJXMnIgorbXNnc3RyICLmnJ/mnJvkuIDlgIvliIbmlK/vvIzlvpfliLDpgaDnq6/liIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMDggYnVpbHRpbi9jaGVja291dC5jOjEzMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCAnJXMnIgorbXNnc3RyICLmnJ/mnJvkuIDlgIvliIbmlK/vvIzlvpfliLAgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYSBicmFuY2ggaXMgZXhwZWN0ZWQsIGdvdCBjb21taXQgJyVzJyIKK21zZ3N0ciAi5pyf5pyb5LiA5YCL5YiG5pSv77yM5b6X5Yiw5o+Q5LqkICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzI3Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIG1lcmdpbmdcbiIKKyJDb25zaWRlciBcImdpdCBtZXJnZSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLkuI3og73lnKjlkIjkvbXmmYLliIfmj5vliIbmlK9cbiIKKyLogIPmha7kvb/nlKggXCJnaXQgbWVyZ2UgLS1xdWl0XCIg5oiWIFwiZ2l0IHdvcmt0cmVlIGFkZFwi44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzMQorbXNnaWQgIiIKKyJjYW5ub3Qgc3dpdGNoIGJyYW5jaCBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb25cbiIKKyJDb25zaWRlciBcImdpdCBhbSAtLXF1aXRcIiBvciBcImdpdCB3b3JrdHJlZSBhZGRcIi4iCittc2dzdHIgIiIKKyLkuI3og73lnKggYW0g5bel5L2c6ZqO5q615pyf6ZaT5YiH5o+b5YiG5pSvXG4iCisi6ICD5oWu5L2/55SoIFwiZ2l0IGFtIC0tcXVpdFwiIOaIliBcImdpdCB3b3JrdHJlZSBhZGRcIuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMzUKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmViYXNpbmdcbiIKKyJDb25zaWRlciBcImdpdCByZWJhc2UgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi5LiN6IO95Zyo6YeN5a6a5Z+65bqV5pmC5YiH5o+b5YiG5pSvXG4iCisi6ICD5oWu5L2/55SoIFwiZ2l0IHJlYmFzZSAtLXF1aXRcIiDmiJYgXCJnaXQgd29ya3RyZWUgYWRkXCLjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzM5Cittc2dpZCAiIgorImNhbm5vdCBzd2l0Y2ggYnJhbmNoIHdoaWxlIGNoZXJyeS1waWNraW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0XCIgb3IgXCJnaXQgd29ya3RyZWUgYWRkXCIuIgorbXNnc3RyICIiCisi5LiN6IO95Zyo5o+A6YG45pmC5YiH5o+b5YiG5pSvXG4iCisi6ICD5oWu5L2/55SoIFwiZ2l0IGNoZXJyeS1waWNrIC0tcXVpdFwiIOaIliBcImdpdCB3b3JrdHJlZSBhZGRcIuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNDMKK21zZ2lkICIiCisiY2Fubm90IHN3aXRjaCBicmFuY2ggd2hpbGUgcmV2ZXJ0aW5nXG4iCisiQ29uc2lkZXIgXCJnaXQgcmV2ZXJ0IC0tcXVpdFwiIG9yIFwiZ2l0IHdvcmt0cmVlIGFkZFwiLiIKK21zZ3N0ciAiIgorIuS4jeiDveWcqOmChOWOn+aZguWIh+aPm+WIhuaUr1xuIgorIuiAg+aFruS9v+eUqCBcImdpdCByZXZlcnQgLS1xdWl0XCIg5oiWIFwiZ2l0IHdvcmt0cmVlIGFkZFwi44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM0NworbXNnaWQgInlvdSBhcmUgc3dpdGNoaW5nIGJyYW5jaCB3aGlsZSBiaXNlY3RpbmciCittc2dzdHIgIuaCqOWcqOWft+ihjOS6jOWIhuWwi+aJvuaZguWIh+aPm+WIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNTQKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAi6Lev5b6R5LiN6IO95ZKM5YiH5o+b5YiG5pSv5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1NyBidWlsdGluL2NoZWNrb3V0LmM6MTM2MSBidWlsdGluL2NoZWNrb3V0LmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICInJXMnIOS4jeiDveWSjOWIh+aPm+WIhuaUr+WQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNjkgYnVpbHRpbi9jaGVja291dC5jOjEzNzIgYnVpbHRpbi9jaGVja291dC5jOjEzNzUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzgwIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICInJXMnIOS4jeiDveWSjCAnJXMnIOWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgdGFrZSA8c3RhcnQtcG9pbnQ+IgorbXNnc3RyICInJXMnIOS4jeW4tiA86LW35aeL6buePiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIuS4jeiDveWIh+aPm+WIhuaUr+WIsOS4gOWAi+mdnuaPkOS6pCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM5NworbXNnaWQgIm1pc3NpbmcgYnJhbmNoIG9yIGNvbW1pdCBhcmd1bWVudCIKK21zZ3N0ciAi57y65bCR5YiG5pSv5oiW5o+Q5Lqk5Y+D5pW4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQzOSBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9jb21taXQtZ3JhcGguYzo1MgorIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTMgYnVpbHRpbi9mZXRjaC5jOjE2NyBidWlsdGluL21lcmdlLmM6Mjg1CisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyNyBidWlsdGluL3B1bGwuYzoxMzggYnVpbHRpbi9wdXNoLmM6NTYzCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3NAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi5by35Yi26aGv56S66YCy5bqm5aCx5ZGKIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ0MAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLlkozmlrDnmoTliIbmlK/ln7fooYzkuInmlrnlkIjkvbUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDQxIGJ1aWx0aW4vbG9nLmM6MTY5MCBwYXJzZS1vcHRpb25zLmg6MzIyCittc2dpZCAic3R5bGUiCittc2dzdHIgIumiqOagvCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NDIKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICLooZ3nqoHovLjlh7rpoqjmoLzvvIhtZXJnZSDmiJYgZGlmZjPvvIkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU0IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDMKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgIkhFQUQg5b6e5oyH5a6a55qE5o+Q5Lqk5YiG6ZuiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ1NQorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLngrrmlrDnmoTliIbmlK/oqK3lrprkuIrmuLjoqIrmga8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgIuW8t+WItuewveWHuu+8iOaNqOajhOacrOapn+S/ruaUue+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NTkKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICLmlrDliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDU5Cittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICLmlrDnmoTmspLmnInniLbmj5DkuqTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNDYxIGJ1aWx0aW4vbWVyZ2UuYzoyODgKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIuabtOaWsOW/veeVpeeahOaqlOahiO+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NjQKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIuS4jeaqouafpeaMh+WumueahOW8leeUqOaYr+WQpuiiq+WFtuS7luW3peS9nOWNgOaJgOWNoOeUqCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NzcKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIuWwjeWwmuacquWQiOS9teeahOaqlOahiOewveWHuuaIkeWAkeeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE0ODAKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAi5bCN5bCa5pyq5ZCI5L2155qE5qqU5qGI57C95Ye65LuW5YCR55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4NAorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAi5bCN6Lev5b6R5LiN5YGa56iA55aP57C95Ye655qE6ZmQ5Yi2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUzNworbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWLjgIEtQiDlkowgLS1vcnBoYW4g5piv5LqS5pal55qEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTU0MAorbXNnaWQgIi1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLXAg5ZKMIC0tb3ZlcmxheSDkupLmlqUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTc3Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIOmcgOimgeS4gOWAi+WIhuaUr+WQjSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1ODIKK21zZ2lkICJtaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIue8uuWwkeWIhuaUr+WQje+8jOWYl+ippiAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlc29sdmUgJXMiCittc2dzdHIgIueEoeazleino+aekCAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2MzEKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi54Sh5pWI55qE6Lev5b6R6KaP5qC8IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCBhbmQgYSBicmFuY2ggJyVzJyBjYW5ub3QgYmUgY3JlYXRlZCBmcm9tIGl0IgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOWAi+aPkOS6pO+8jOS4jeiDveWfuuaWvOWug+W7uueri+WIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dO+8mi0tZGV0YWNoIOS4jeiDveaOpeaUtui3r+W+keWPg+aVuCAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1MQorI3wgbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnaWQgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIgorbXNnc3RyICItLXBhdGhzcGVjLWZyb20tZmlsZSDoiIcgLS1kZXRhY2gg5LiN55u45a65IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY1NCBidWlsdGluL3Jlc2V0LmM6MzI0CisjfCBtc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dpZCAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1wYXRjaCIKK21zZ3N0ciAiLS1wYXRoc3BlYy1mcm9tLWZpbGUg6IiHIC0tcGF0Y2gg5LiN55u45a65IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTY2NQorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V077ya5Zyo5b6e57Si5byV57C95Ye65pmC77yMLS1vdXJzLy0tdGhlaXJz44CBLS1mb3JjZSDlkowgLS1tZXJnZSDkuI3nm7jlrrnjgIIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjcwCittc2dpZCAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiCittc2dzdHIgIuaCqOW/hemgiOaMh+WumuS4gOWAi+imgeW+qeWOn+eahOi3r+W+kSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIHJlbW90ZSB0cmFja2luZyBicmFuY2guXG4iCisiV2UgZm91bmQgJWQgcmVtb3RlcyB3aXRoIGEgcmVmZXJlbmNlIHRoYXQgbWF0Y2hlZC4gU28gd2UgZmVsbCBiYWNrXG4iCisib24gdHJ5aW5nIHRvIHJlc29sdmUgdGhlIGFyZ3VtZW50IGFzIGEgcGF0aCwgYnV0IGZhaWxlZCB0aGVyZSB0b28hXG4iCisiXG4iCisiSWYgeW91IG1lYW50IHRvIGNoZWNrIG91dCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggb24sIGUuZy4gJ29yaWdpbicsXG4iCisieW91IGNhbiBkbyBzbyBieSBmdWxseSBxdWFsaWZ5aW5nIHRoZSBuYW1lIHdpdGggdGhlIC0tdHJhY2sgb3B0aW9uOlxuIgorIlxuIgorIiAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4vPG5hbWU+XG4iCisiXG4iCisiSWYgeW91J2QgbGlrZSB0byBhbHdheXMgaGF2ZSBjaGVja291dHMgb2YgYW4gYW1iaWd1b3VzIDxuYW1lPiBwcmVmZXJcbiIKKyJvbmUgcmVtb3RlLCBlLmcuIHRoZSAnb3JpZ2luJyByZW1vdGUsIGNvbnNpZGVyIHNldHRpbmdcbiIKKyJjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbiBpbiB5b3VyIGNvbmZpZy4iCittc2dzdHIgIiIKKyInJXMnIOespuWQiOS6huS4gOWAi+S7peS4iueahOmBoOerr+i/vei5pOWIhuaUr+OAglxuIgorIuaIkeWAkeeZvOePviAlZCDlgIvpgaDnq6/niYjmnKzluqvlhbfmnInlkIzlkI3liIbmlK/jgILmiYDku6XmiJHlgJHovYnogIzlmJfoqablsIfpgJnlgIvlj4Pmlbjop6PmnpDngrpcbiIKKyLot6/lvpHvvIzkvYbmmK/kuZ/lpLHmlZfkuobvvIFcbiIKKyJcbiIKKyLlpoLmnpzmgqjmg7PopoHnsL3lh7rkuIDlgIvpgaDnq6/ov73ouaTliIbmlK/vvIzkvovlpoLlnKjpgaDnq6/niYjmnKzluqsgJ29yaWdpbicg5LiK55qE77yM5oKo5Y+v5LulXG4iCisi5L2/55So5YiG5pSv5YWo5ZCN5ZKMIC0tdHJhY2sg6YG46aCF77yaXG4iCisiXG4iCisiICAgIGdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi88bmFtZT5cbiIKKyJcbiIKKyLlpoLmnpzmgqjnuL3mmK/llpzmraHkvb/nlKjmqKHns4rnmoTnsKHnn63liIbmlK/lkI0gPG5hbWU+77yM6ICM5LiN5Zac5q2h5aaCICdvcmlnaW4nIOeahOmBoOerr1xuIgorIueJiOacrOW6q+WQje+8jOWPr+S7peWcqOioreWumuS4reioreWumiBjaGVja291dC5kZWZhdWx0UmVtb3RlPW9yaWdpbuOAgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTQgYnVpbHRpbi9jaGVja291dC5jOjE3MTYgYnVpbHRpbi9jaGVja291dC5jOjE3NjUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzY3IGJ1aWx0aW4vY2xvbmUuYzoxMjEgYnVpbHRpbi9yZW1vdGUuYzoxNjkKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxIGJ1aWx0aW4vd29ya3RyZWUuYzo0OTkgYnVpbHRpbi93b3JrdHJlZS5jOjUwMQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAi5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTcxNQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLlu7rnq4vkuKbnsL3lh7rkuIDlgIvmlrDnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzE3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAi5bu656uLL+mHjeioreS4puewveWHuuS4gOWAi+WIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3MTgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLngrrmlrDnmoTliIbmlK/lu7rnq4vlvJXnlKjml6XoqowiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIwCittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPicgKGRlZmF1bHQpIgorbXNnc3RyICLkuozmrKHnjJzmuKwgJ2dpdCBjaGVja291dCA854Sh5q2k5YiG5pSvPifvvIjpoJDoqK3vvIkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzIxCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSAoZGVmYXVsdCkiCittc2dzdHIgIuS9v+eUqOeWiuWKoOaooeW8j++8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjYKK21zZ2lkICJjcmVhdGUgYW5kIHN3aXRjaCB0byBhIG5ldyBicmFuY2giCittc2dzdHIgIuW7uueri+S4puWIh+aPm+S4gOWAi+aWsOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NjgKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaCIKK21zZ3N0ciAi5bu656uLL+mHjeioreS4puWIh+aPm+S4gOWAi+WIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE3NzAKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBzd2l0Y2ggPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIuS6jOasoeeMnOa4rCAnZ2l0IHN3aXRjaCA854Sh5q2k5YiG5pSvPiciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzcyCittc2dpZCAidGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zIgorbXNnc3RyICLmjajmo4TmnKzmqZ/kv67mlLkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA0Cittc2dpZCAid2hpY2ggdHJlZS1pc2ggdG8gY2hlY2tvdXQgZnJvbSIKK21zZ3N0ciAi6KaB57C95Ye65ZOq5LiA5YCL5qi5IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgwNgorbXNnaWQgInJlc3RvcmUgdGhlIGluZGV4IgorbXNnc3RyICLlvqnljp/ntKLlvJUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODA4Cittc2dpZCAicmVzdG9yZSB0aGUgd29ya2luZyB0cmVlIChkZWZhdWx0KSIKK21zZ3N0ciAi5b6p5Y6f5bel5L2c5Y2A77yI6aCQ6Kit77yJIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTgxMAorbXNnaWQgImlnbm9yZSB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLlv73nlaXmnKrlkIjkvbXmop3nm64iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxODExCittc2dpZCAidXNlIG92ZXJsYXkgbW9kZSIKK21zZ3N0ciAi5L2/55So55aK5Yqg5qih5byPIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjgKK21zZ2lkICIiCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA85qih5byPPl0gWy14IHwgLVhdIFstLV0gPOi3r+W+kT4uLi4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICLmraPliKrpmaQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICLlsIfliKrpmaQgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAi5b+955Wl54mI5pys5bqrICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAi5bCH5b+955Wl54mI5pys5bqrICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICLliKrpmaQgJXMg5aSx5pWXIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxzdGF0ICVzXG4iCittc2dzdHIgIuS4jeiDveWwjSAlcyDlkbzlj6sgbHN0YXRcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nXG4iCittc2dzdHIgIiIKKyLljZTliqnvvJpcbiIKKyIxICAgICAgICAgIC0g6YCP6YGO57eo6Jmf6YG45pOH5LiA5YCL6YG46aCFXG4iCisiZm9vICAgICAgICAtIOmAj+mBjuWUr+S4gOWJjee2tOmBuOaTh+S4gOWAi+mBuOmghVxuIgorIiAgICAgICAgICAgLSDvvIjnqbrvvInku4DpurzkuZ/kuI3pgbjmk4dcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwNSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmdcbiIKK21zZ3N0ciAiIgorIuWNlOWKqe+8mlxuIgorIjEgICAgICAgICAgLSDpgbjmk4fkuIDlgIvpgbjpoIVcbiIKKyIzLTUgICAgICAgIC0g6YG45pOH5LiA5YCL56+E5ZyN5YWn55qE5omA5pyJ6YG46aCFXG4iCisiMi0zLDYtOSAgICAtIOmBuOaTh+WkmuWAi+evhOWcjeWFp+eahOaJgOaciemBuOmghVxuIgorImZvbyAgICAgICAgLSDpgI/pgY7llK/kuIDliY3ntrTpgbjmk4fkuIDlgIvpgbjpoIVcbiIKKyItLi4uICAgICAgIC0g5Y+N6YG454m55a6a55qE6YG46aCFXG4iCisiKiAgICAgICAgICAtIOmBuOaTh+aJgOaciemBuOmghVxuIgorIiAgICAgICAgICAgLSDvvIjnqbrvvInntZDmnZ/pgbjmk4dcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUyMSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjU3MAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDo1NzUKKyMsIGMtZm9ybWF0LCBwZXJsLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpP1xuIgorbXNnc3RyICLll6/vvIglc++8ie+8n1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAi6Ly45YWl56+E5pys5Lul5o6S6Zmk5qKd55uuPj4gIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICLorablkYrvvJrnhKHms5Xmib7liLDlkowgJXMg56ym5ZCI55qE5qKd55uuIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzIxCittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAi6YG45pOH6KaB5Yiq6Zmk55qE5qKd55uuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgIuWIqumZpCAlcyBbeS9OXe+8nyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjc5NQorbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIOmWi+Wni+a4heeQhlxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSDpgI/pgY7nr4TmnKzmjpLpmaTopoHliKrpmaTnmoTmop3nm65cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0g6YCP6YGO5pW45a2X6YG45pOH6KaB5Yiq6Zmk55qE5qKd55uuXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIOmHneWwjeWIqumZpOmAkOS4gOipouWVj++8iOWwseWDjyBcInJtIC1pXCLvvIlcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0g5YGc5q2i5Yiq6Zmk5Lim6Zui6ZaLXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIOmhr+ekuuacrOWNlOWKqVxuIgorIj8gICAgICAgICAgICAgICAgICAgLSDpoa/npLrlpoLkvZXlnKjmj5DnpLrnrKbkuIvpgbjmk4fnmoTljZTliqkiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzEKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICLlsIfliKrpmaTlpoLkuIvmop3nm67vvJoiCittc2dzdHJbMV0gIuWwh+WIqumZpOWmguS4i+aineebru+8miIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg0NworbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICLmspLmnInopoHmuIXnkIbnmoTmqpTmoYjvvIzpm6LplovjgIIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDkKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAi5LiN5YiX5Y2w5Yiq6Zmk5qqU5qGI55qE5ZCN56ixIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTExCittc2dpZCAiZm9yY2UiCittc2dzdHIgIuW8t+WItiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxMgorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICLkupLli5XlvI/muIXpmaQiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTQKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgIuWIqumZpOaVtOWAi+ebrumMhCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNSBidWlsdGluL2Rlc2NyaWJlLmM6NTQ4IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NTAKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMSBidWlsdGluL2xvZy5jOjE3NyBidWlsdGluL2xvZy5jOjE3OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjU1NyBidWlsdGluL25hbWUtcmV2LmM6NDY0IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjYKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICLmqKHlvI8iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MTYKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAi5paw5aKeIDzmqKHlvI8+IOWIsOW/veeVpeimj+WJhyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxNworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgIuS5n+WIqumZpOW/veeVpeeahOaqlOahiCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkxOQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIuWPquWIqumZpOW/veeVpeeahOaqlOahiCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzNworbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLXgg5ZKMIC1YIOS4jeiDveWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjk0MQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiY2xlYW4ucmVxdWlyZUZvcmNlIOioreWumueCuiB0cnVlIOS4lOacquaPkOS+myAtaeOAgS1uIOaIliAtZiDpgbjpoIXvvIzmi5LntZXln7fooYzmuIXnkIbli5XkvZwiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5NDQKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiY2xlYW4ucmVxdWlyZUZvcmNlIOmgkOioreeCuiB0cnVlIOS4lOacquaPkOS+myAtaeOAgS1uIOaIliAtZiDpgbjpoIXvvIzmi5LntZXln7fooYzmuIXnkIbli5XkvZwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NQorbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzzpgbjpoIU+XSBbLS1dIDzniYjmnKzluqs+IFs86Lev5b6RPl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICLkuI3lu7rnq4vkuIDlgIvnsL3lh7oiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NCBidWlsdGluL2Nsb25lLmM6OTYgYnVpbHRpbi9pbml0LWRiLmM6NDg5Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLlu7rnq4vkuIDlgIvntJTniYjmnKzluqsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5OAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICLlu7rnq4vkuIDlgIvpj6Hlg4/niYjmnKzluqvvvIjkuZ/mmK/ntJTniYjmnKzluqvvvIkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDAKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5b6e5pys5qmf54mI5pys5bqr6KSH6KO9IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyCittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIuS4jeS9v+eUqOacrOapn+ehrOmAo+e1kO+8jOWni+e1guikh+ijvSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICLoqK3lrprngrrlhbHkuqvniYjmnKzluqsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDcKK21zZ2lkICJwYXRoc3BlYyIKK21zZ3N0ciAi6Lev5b6R6KaP5qC8IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA3Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAi5Zyo6KSH6KO95pmC5Yid5aeL5YyW5a2Q5qih57WEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTEwCittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgY2xvbmVkIGluIHBhcmFsbGVsIgorbXNnc3RyICLkuKbnmbzopIfoo73nmoTlrZDmqKHntYTnmoTmlbjph48iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTEgYnVpbHRpbi9pbml0LWRiLmM6NDg2Cittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICLnr4TmnKznm67pjIQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTIgYnVpbHRpbi9pbml0LWRiLmM6NDg3Cittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAi56+E5pys55uu6YyE5bCH6KKr5L2/55SoIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE0IGJ1aWx0aW4vY2xvbmUuYzoxMTYgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEzOTIKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg1Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgIuWPg+iAg+eJiOacrOW6qyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExOCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NAorIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4ODcKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICLlg4XlnKjopIfoo73mmYLlj4PogIMgLS1yZWZlcmVuY2Ug5oyH5ZCR55qE5pys5qmf54mI5pys5bqrIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTE5IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDYKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NCBidWlsdGluL3JlcGFjay5jOjMyNworbXNnaWQgIm5hbWUiCittc2dzdHIgIuWQjeeosSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyMAorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAi5L2/55SoIDzlkI3nqLE+IOiAjOS4jeaYryAnb3JpZ2luJyDljrvov73ouaTkuIrmuLgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjIKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICLnsL3lh7ogPOWIhuaUrz4g6ICM5LiN5piv6YGg56uvIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICLpgaDnq68gZ2l0LXVwbG9hZC1wYWNrIOi3r+W+kSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNSBidWlsdGluL2ZldGNoLmM6MTY4IGJ1aWx0aW4vZ3JlcC5jOjg0MAorIzogYnVpbHRpbi9wdWxsLmM6MjI3Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIua3seW6piIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyNgorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAi5bu656uL5LiA5YCL5oyH5a6a5rex5bqm55qE5re66KSH6KO9IgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI3IGJ1aWx0aW4vZmV0Y2guYzoxNzAgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjgzCittc2dpZCAidGltZSIKK21zZ3N0ciAi5pmC6ZaTIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTI4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzaW5jZSBhIHNwZWNpZmljIHRpbWUiCittc2dzdHIgIuW+nuS4gOWAi+eJueWumuaZgumWk+W7uueri+S4gOWAi+a3uuikh+ijvSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEyOSBidWlsdGluL2ZldGNoLmM6MTcyIGJ1aWx0aW4vZmV0Y2guYzoxOTUKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ0NQorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICLniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzAgYnVpbHRpbi9mZXRjaC5jOjE3MworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUsIGV4Y2x1ZGluZyByZXYiCittc2dzdHIgIua3seWMlua3uuikh+ijveeahOatt+WPsu+8jOmZpOS6hueJueWumueJiOacrCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzMgorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAi5Y+q6KSH6KO95LiA5YCL5YiG5pSv44CBSEVBRCDmiJYgLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzQKK21zZ2lkICJkb24ndCBjbG9uZSBhbnkgdGFncywgYW5kIG1ha2UgbGF0ZXIgZmV0Y2hlcyBub3QgdG8gZm9sbG93IHRoZW0iCittc2dzdHIgIuS4jeimgeikh+ijveS7u+S9leaomeexpO+8jOS4puS4lOW+jOe6jOWPluW+l+WLleS9nOS5n+S4jeS4i+i8ieWug+WAkSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNgorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNoYWxsb3ciCittc2dzdHIgIuWtkOaooee1hOWwh+S7pea3uuS4i+i8ieaooeW8j+ikh+ijvSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzNyBidWlsdGluL2luaXQtZGIuYzo0OTUKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgImdpdOebrumMhCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEzOCBidWlsdGluL2luaXQtZGIuYzo0OTYKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJnaXTnm67pjITlkozlt6XkvZzljYDliIbpm6IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMzkKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgImtleT12YWx1ZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5Zyo5paw54mI5pys5bqr5Lit6Kit5a6a6Kit5a6a6KiK5oGvIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTQyIGJ1aWx0aW4vZmV0Y2guYzoxOTAgYnVpbHRpbi9scy1yZW1vdGUuYzo3NgorIzogYnVpbHRpbi9wdXNoLmM6NTczIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcyCittc2dpZCAic2VydmVyLXNwZWNpZmljIgorbXNnc3RyICJzZXJ2ZXItc3BlY2lmaWMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNDIgYnVpbHRpbi9mZXRjaC5jOjE5MCBidWlsdGluL2xzLXJlbW90ZS5jOjc2CisjOiBidWlsdGluL3B1c2guYzo1NzMgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJvcHRpb24gdG8gdHJhbnNtaXQiCittc2dzdHIgIuWCs+i8uOmBuOmghSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0MyBidWlsdGluL2ZldGNoLmM6MTkxIGJ1aWx0aW4vcHVsbC5jOjI0MAorIzogYnVpbHRpbi9wdXNoLmM6NTc0Cittc2dpZCAidXNlIElQdjQgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgIuWPquS9v+eUqCBJUHY0IOS9jeWdgCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0NSBidWlsdGluL2ZldGNoLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjI0MworIzogYnVpbHRpbi9wdXNoLmM6NTc2Cittc2dpZCAidXNlIElQdjYgYWRkcmVzc2VzIG9ubHkiCittc2dzdHIgIuWPquS9v+eUqCBJUHY2IOS9jeWdgCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjE0OQorbXNnaWQgImFueSBjbG9uZWQgc3VibW9kdWxlcyB3aWxsIHVzZSB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLku7vkvZXopIfoo73nmoTlrZDmqKHntYTlsIfkvb/nlKjlroPlgJHnmoTpgaDnq6/ov73ouaTliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxNTEKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCBmaWxlIHRvIGluY2x1ZGUgb25seSBmaWxlcyBhdCByb290IgorbXNnc3RyICLliJ3lp4vljJbnqIDnlo/nsL3lh7rmqpTmoYjvvIzlj6rljIXlkKvmoLnnm67pjITkuK3nmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyODcKK21zZ2lkICIiCisiTm8gZGlyZWN0b3J5IG5hbWUgY291bGQgYmUgZ3Vlc3NlZC5cbiIKKyJQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisi54Sh5rOV54yc5Yiw55uu6YyE5ZCN44CCXG4iCisi6KuL5Zyo5oyH5Luk5YiX5oyH5a6a5LiA5YCL55uu6YyEIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgImluZm86IENvdWxkIG5vdCBhZGQgYWx0ZXJuYXRlIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJpbmZvOiDkuI3og73ngrogJyVzJyDmlrDlop7kuIDlgIvlgpnnlKjvvJolc1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyDlrZjlnKjkuJTkuI3mmK/kuIDlgIvnm67pjIQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXJ0IGl0ZXJhdG9yIG92ZXIgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5ZyoICclcycg5LiK5ZWf5YuV55aK5Luj5ZmoIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICLlu7rnq4vpgKPntZAgJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICLopIfoo73mqpTmoYjoh7MgJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGl0ZXJhdGUgb3ZlciAnJXMnIgorbXNnc3RyICLnhKHms5XlnKggJyVzJyDkuIrnlorku6MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAi5a6M5oiQ44CCXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MDgKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB3aXRoICdnaXQgcmVzdG9yZSAtLXNvdXJjZT1IRUFEIDovJ1xuIgorbXNnc3RyICIiCisi6KSH6KO95oiQ5Yqf77yM5L2G5piv57C95Ye65aSx5pWX44CCXG4iCisi5oKo5Y+v5Lul6YCP6YGOICdnaXQgc3RhdHVzJyDmqqLmn6Xlk6rkupvlt7LooqvnsL3lh7rvvIznhLblvozkvb/nlKjmjIfku6RcbiIKKyInZ2l0IHJlc3RvcmUgLS1zb3VyY2U9SEVBRCA6Lycg6YeN6KmmXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIuS4jeiDveeZvOePvuimgeikh+ijveeahOmBoOerr+WIhuaUryAlc+OAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlICVzIgorbXNnc3RyICLkuI3og73mm7TmlrAgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NTIKKyN8IG1zZ2lkICJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIKK21zZ2lkICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIueEoeazleWIneWni+WMlueogOeWj+ewveWHuiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc3NQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAi6YGg56uvIEhFQUQg5oyH5ZCR5LiA5YCL5LiN5a2Y5Zyo55qE5byV55So77yM54Sh5rOV57C95Ye644CCXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDYKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICLkuI3og73nsL3lh7rlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NTYKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgcGFyYW1ldGVycyB0byBjb25maWcgZmlsZSIKK21zZ3N0ciAi54Sh5rOV5bCH5Y+D5pW45a+r5YWl6Kit5a6a5qqU5qGIIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTE5Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAi54Sh5rOV5Z+36KGMIHJlcGFjayDkvobmuIXnkIYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjEKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIueEoeazleWIqumZpOaaq+aZgueahCBhbHRlcm5hdGVzIOaqlOahiCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1OSBidWlsdGluL3JlY2VpdmUtcGFjay5jOjE5NDgKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICLlpKrlpJrlj4PmlbjjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjMKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIuaCqOW/hemgiOaMh+WumuS4gOWAi+eJiOacrOW6q+S+huikh+ijveOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3NgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSDlkowgLS1vcmlnaW4gJXMg6YG46aCF5LiN55u45a6544CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc5Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSDlkowgLS1zZXBhcmF0ZS1naXQtZGlyIOmBuOmgheS4jeebuOWuueOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIueJiOacrOW6qyAnJXMnIOS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk5OCBidWlsdGluL2ZldGNoLmM6MTc4NworIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIua3seW6piAlcyDkuI3mmK/kuIDlgIvmraPmlbgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIuebruaomei3r+W+kSAnJXMnIOW3sue2k+WtmOWcqO+8jOS4puS4lOS4jeaYr+S4gOWAi+epuuebrumMhOOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLlt6XkvZzljYAgJyVzJyDlt7LntpPlrZjlnKjjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDMzIGJ1aWx0aW4vY2xvbmUuYzoxMDU0IGJ1aWx0aW4vZGlmZnRvb2wuYzoyNzEKKyM6IGJ1aWx0aW4vbG9nLmM6MTg2NiBidWlsdGluL3dvcmt0cmVlLmM6MzAyIGJ1aWx0aW4vd29ya3RyZWUuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIuS4jeiDveeCuiAnJXMnIOW7uueri+WFiOWwjuebrumMhCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgIuS4jeiDveW7uueri+W3peS9nOWNgOebrumMhCAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi6KSH6KO95Yiw57SU54mI5pys5bqrICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAi5q2j6KSH6KO95YiwICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwODQKK21zZ2lkICIiCisiY2xvbmUgLS1yZWN1cnNpdmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBib3RoIC0tcmVmZXJlbmNlIGFuZCAtLXJlZmVyZW5jZS1pZi0iCisiYWJsZSIKK21zZ3N0ciAiY2xvbmUgLS1yZWN1cnNpdmUg5ZKMIC0tcmVmZXJlbmNlIOS7peWPiiAtLXJlZmVyZW5jZS1pZi1hYmxlIOS4jeebuOWuuSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNDgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCDlnKjmnKzmqZ/opIfoo73mmYLooqvlv73nlaXvvIzoq4vmlLnnlKggZmlsZTovLyDljZTlrprjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMTUwCittc2dpZCAiLS1zaGFsbG93LXNpbmNlIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1zaGFsbG93LXNpbmNlIOWcqOacrOapn+ikh+ijveaZguiiq+W/veeVpe+8jOiri+aUueeUqCBmaWxlOi8vIOWNlOWumuOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTIKK21zZ2lkICItLXNoYWxsb3ctZXhjbHVkZSBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tc2hhbGxvdy1leGNsdWRlIOWcqOacrOapn+ikh+ijveaZguiiq+W/veeVpe+8jOiri+aUueeUqCBmaWxlOi8vIOWNlOWumuOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTQKK21zZ2lkICItLWZpbHRlciBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZmlsdGVyIOWcqOacrOapn+ikh+ijveaZguiiq+W/veeVpe+8jOiri+aUueeUqCBmaWxlOi8vIOWNlOWumuOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNTcKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICLmupDniYjmnKzluqvmmK/mt7ropIfoo73vvIzlv73nlaUgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjExNjIKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwg6KKr5b+955WlIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTIzNyBidWlsdGluL2Nsb25lLmM6MTI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAi6YGg56uv5YiG5pSvICVzIOWcqOS4iua4uCAlcyDmnKrnmbznj74iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMjQ4Cittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi5oKo5Ly85LmO6KSH6KO95LqG5LiA5YCL56m654mI5pys5bqr44CCIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjEwCittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPOmBuOmghT5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLlsIvmib7oqK3lrprorormlbgiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjggYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIuimgeS9v+eUqOeahOmFjee9riIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIuacgOWkp+WvrOW6piIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIuW3pumCiuahhueahOWhq+WFheepuumWkyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMgorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLlj7PpgormoYbnmoTloavlhYXnqbrplpMiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzMKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAi5YWp5YiX5LmL6ZaT55qE5aGr5YWF56m66ZaTIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQg5b+F6aCI5piv56ys5LiA5YCL5Y+D5pW4IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTgKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHBhcmVudD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPG1lc3NhZ2U+KS4uLl0gWygtRiAiCisiPGZpbGU+KS4uLl0gPHRyZWU+IgorbXNnc3RyICIiCisiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPOeItuaPkOS6pD4pLi4uXSBbLVNbPGtleWlkPl1dIFsoLW0gPOa2iOaBrz4pLi4uXSBbKC1GIDzmqpTmoYgiCisiPikuLi5dIDzmqLk+IgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIHBhcmVudCAlcyBpZ25vcmVkIgorbXNnc3RyICLlv73nlaXph43opIfnmoTniLbmj5DkuqQgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo1NiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTM2IGJ1aWx0aW4vbG9nLmM6NTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7blkI0gJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY29tbWl0LXRyZWU6IGZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZe+8mueEoeazlemWi+WVnyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gcmVhZCAnJXMnIgorbXNnc3RyICJnaXQgY29tbWl0LXRyZWXvvJrnhKHms5XoroDlj5YgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIGNsb3NlICclcyciCittc2dzdHIgImdpdCBjb21taXQtdHJlZe+8mueEoeazlemXnOmWiSAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTExCittc2dpZCAicGFyZW50IgorbXNnc3RyICLniLbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTIKK21zZ2lkICJpZCBvZiBhIHBhcmVudCBjb21taXQgb2JqZWN0IgorbXNnc3RyICLniLbmj5DkuqTnianku7YgSUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTQgYnVpbHRpbi9jb21taXQuYzoxNDk2IGJ1aWx0aW4vbWVyZ2UuYzoyNzAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDkgYnVpbHRpbi9ub3Rlcy5jOjU3NSBidWlsdGluL3N0YXNoLmM6MTQ2OQorIzogYnVpbHRpbi90YWcuYzo0MTIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLoqqrmmI4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMTUgYnVpbHRpbi9jb21taXQuYzoxNDk2Cittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIuaPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9jb21taXQtdHJlZS5jOjExOAorbXNnaWQgInJlYWQgY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi5b6e5qqU5qGI5Lit6K6A5Y+W5o+Q5Lqk6Kqq5piOIgorCisjOiBidWlsdGluL2NvbW1pdC10cmVlLmM6MTIxIGJ1aWx0aW4vY29tbWl0LmM6MTUwOCBidWlsdGluL21lcmdlLmM6Mjg3CisjOiBidWlsdGluL3B1bGwuYzoxOTUgYnVpbHRpbi9yZXZlcnQuYzoxMTgKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkdQRyDmj5DkuqTnsL3lkI0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LXRyZWUuYzoxMzMKK21zZ2lkICJtdXN0IGdpdmUgZXhhY3RseSBvbmUgdHJlZSIKK21zZ3N0ciAi5b+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/nlKjvvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcFxuIgorIlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMxNQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAi6Kej5YyFIEhFQUQg5qi554uA54mp5Lu25aSx5pWXIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorI3wgbXNnaWQgInBhdGhzICclcyAuLi4nIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ2lkICItLXBhdGhzcGVjLWZyb20tZmlsZSB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tcGF0aHNwZWMtZnJvbS1maWxlIOWSjCAtYSDlkIzmmYLkvb/nlKjmspLmnInmhI/nvqkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICLlj4PmlbggLS1pbmNsdWRlLy0tb25seSDkuI3ot5/ot6/lvpHmspLmnInmhI/nvqnjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzc2Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIuS4jeiDveW7uueri+aaq+aZgue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzozODIKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICLkupLli5XlvI/mlrDlop7lpLHmlZciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Mzk2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIueEoeazleabtOaWsOaaq+aZgue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAi5LiN6IO95pu05paw5qi555qE5Li75b+r5Y+WIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyMyBidWlsdGluL2NvbW1pdC5jOjQ0NiBidWlsdGluL2NvbW1pdC5jOjQ5MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAi54Sh5rOV5a+rIG5ld19pbmRleCDmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc1Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICLlnKjlkIjkvbXpgY7nqIvkuK3kuI3og73lgZrpg6jliIbmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc3Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLlnKjmj4DpgbjpgY7nqIvkuK3kuI3og73lgZrpg6jliIbmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDg1Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLnhKHms5XoroDlj5bntKLlvJUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTA0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICLnhKHms5Xlr6vmmqvmmYLntKLlvJXmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgIuaPkOS6pCAnJXMnIOe8uuWwkeS9nOiAheioiuaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAi5o+Q5LqkICclcycg5pyJ5qC85byP6Yyv6Kqk55qE5L2c6ICF6KiK5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYyMworbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIuagvOW8j+mMr+iqpOeahCAtLWF1dGhvciDlj4PmlbgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njc2Cittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIueEoeazlemBuOaTh+S4gOWAi+acquiiq+ebruWJjeaPkOS6pOiqquaYjuS9v+eUqOeahOWCmeiou+Wtl+WFgyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MTQgYnVpbHRpbi9jb21taXQuYzo3NDcgYnVpbHRpbi9jb21taXQuYzoxMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICLkuI3og73mn6XoqaLmj5DkuqQgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI2IGJ1aWx0aW4vc2hvcnRsb2cuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dClcbiIKK21zZ3N0ciAi77yI5q2j5b6e5qiZ5rqW6Ly45YWl5Lit6K6A5Y+W5pel6KqM6KiK5oGv77yJXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI4Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuS4jeiDveW+nuaomea6lui8uOWFpeS4reiugOWPluaXpeiqjOioiuaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+W5pel6KqM5qqU5qGIICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzYzIGJ1aWx0aW4vY29tbWl0LmM6Nzc5Cittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+WIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzcwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICLkuI3og73oroDlj5YgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgIuS4jeiDveWvq+aPkOS6pOevhOacrCIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgbWVyZ2UuXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisi5Ly85LmO5oKo5q2j5Zyo5YGa5LiA5YCL5ZCI5L215o+Q5Lqk44CC5aaC5p6c5LiN5bCN77yM6KuL5Yiq6Zmk5qqU5qGIXG4iCisiXHQlc1xuIgorIueEtuW+jOmHjeippuOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkvLzkuY7mgqjmraPlnKjlgZrkuIDlgIvmj4Dpgbjmj5DkuqTjgILlpoLmnpzkuI3lsI3vvIzoq4vliKrpmaTmqpTmoYhcbiIKKyJcdCVzXG4iCisi54S25b6M6YeN6Kmm44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyLoq4vngrrmgqjnmoTorormm7TovLjlhaXmj5DkuqToqqrmmI7jgILku6UgJyVjJyDplovlp4vnmoTooYzlsIfooqvlv73nlaXvvIzogIzkuIDlgIvnqbrnmoTmj5DkuqRcbiIKKyLoqqrmmI7lsIfmnIPntYLmraLmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyLoq4vngrrmgqjnmoTorormm7TovLjlhaXmj5DkuqToqqrmmI7jgILku6UgJyVjJyDplovlp4vnmoTooYzlsIfooqvkv53nlZnvvIzlpoLmnpzmgqjljp/mhI9cbiIKKyLkuZ/lj6/ku6XliKrpmaTlroPlgJHjgILkuIDlgIvnqbrnmoTmj5DkuqToqqrmmI7lsIfmnIPntYLmraLmj5DkuqTjgIJcbiIKKworIyAg6K2v6ICF77ya54K65L+d6K2J5Zyo6Ly45Ye65Lit5bCN6b2K77yM5rOo5oSP6Kq/5pW05Y+l5Lit56m65qC877yBCisjOiBidWlsdGluL2NvbW1pdC5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVz5L2c6ICF77yaICAlLipzIDwlLipzPiIKKworIyAg6K2v6ICF77ya54K65L+d6K2J5Zyo6Ly45Ye65Lit5bCN6b2K77yM5rOo5oSP6Kq/5pW05Y+l5Lit56m65qC877yBCisjOiBidWlsdGluL2NvbW1pdC5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVz5pel5pyf77yaICAlcyIKKworIyAg6K2v6ICF77ya54K65L+d6K2J5Zyo6Ly45Ye65Lit5bCN6b2K77yM5rOo5oSP6Kq/5pW05Y+l5Lit56m65qC877yBCisjOiBidWlsdGluL2NvbW1pdC5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVz5o+Q5Lqk6ICF77yaJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTI1Cittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIueEoeazleiugOWPlue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTIKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAi54Sh5rOV5bu656uL5qi554uA54mp5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDYgYnVpbHRpbi90YWcuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICLoq4vkvb/nlKggLW0g5oiWIC1GIOmBuOmgheaPkOS+m+aPkOS6pOiqquaYjuOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICItLWF1dGhvciAnJXMnIOS4jeaYryAn5aeT5ZCNIDzkv6HnrrE+JyDmoLzlvI/vvIzkuJTmnKrog73lnKjnj77mnInkvZzogIXkuK3mib7liLDnrKblkIgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlnbm9yZWQgbW9kZSAnJXMnIgorbXNnc3RyICLnhKHmlYjnmoTlv73nlaXmqKHlvI8gJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDgyIGJ1aWx0aW4vY29tbWl0LmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIueEoeaViOeahOacqui/vei5pOaqlOahiOWPg+aVuCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMjIKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbG9uZyDlkowgLXog6YG46aCF5LiN55u45a65IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLlkIzmmYLkvb/nlKggLS1yZXNldC1hdXRob3Ig5ZKMIC0tYXV0aG9yIOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIuaCqOaykuacieWPr+S/ruijnOeahOaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTc4Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAi5oKo5q2j6JmV5pa85LiA5YCL5ZCI5L216YGO56iL5LitIC0tIOeEoeazleS/ruijnOaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgwCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hlcnJ5LXBpY2sgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAi5oKo5q2j6JmV5pa85LiA5YCL5o+A6YG46YGO56iL5LitIC0tIOeEoeazleS/ruijnOaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTgzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAi6YG46aCFIC0tc3F1YXNoIOWSjCAtLWZpeHVwIOS4jeiDveWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIuWPquiDveeUqOS4gOWAiyAtYy8tQy8tRi8tLWZpeHVwIOmBuOmgheOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLiIKK21zZ3N0ciAi6YG46aCFIC1tIOS4jeiDveWSjCAtYy8tQy8tRiDlkIzmmYLkvb/nlKjjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwMworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIOWPquiDveWSjCAtQ+OAgS1jIOaIliAtLWFtZW5kIOWQjOaZguS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjIwCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICLlj6rog73nlKjkuIDlgIsgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2gg6YG46aCF44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHMgJyVzIC4uLicgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLot6/lvpEgICclcyAuLi4nIOWSjCAtYSDpgbjpoIXlkIzmmYLkvb/nlKjmspLmnInmhI/nvqkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM1NyBidWlsdGluL2NvbW1pdC5jOjE1MTkKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgIuS7peewoea9lOeahOagvOW8j+mhr+ekuueLgOaFiyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzU5IGJ1aWx0aW4vY29tbWl0LmM6MTUyMQorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICLpoa/npLrliIbmlK/oqIrmga8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MQorbXNnaWQgInNob3cgc3Rhc2ggaW5mb3JtYXRpb24iCittc2dzdHIgIumhr+ekuuWEsuiXj+WNgOioiuaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzYzIGJ1aWx0aW4vY29tbWl0LmM6MTUyMworbXNnaWQgImNvbXB1dGUgZnVsbCBhaGVhZC9iZWhpbmQgdmFsdWVzIgorbXNnc3RyICLoqIjnrpflrozmlbTnmoTpoJjlhYgv6JC95b6M5YC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNjUKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICLniYjmnKwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2NSBidWlsdGluL2NvbW1pdC5jOjE1MjUgYnVpbHRpbi9wdXNoLmM6NTQ5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjUwCittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgIuapn+WZqOWPr+iugOeahOi8uOWHuiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzY4IGJ1aWx0aW4vY29tbWl0LmM6MTUyNworbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAi5Lul6ZW35qC85byP6aGv56S654uA5oWL77yI6aCQ6Kit77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzEgYnVpbHRpbi9jb21taXQuYzoxNTMwCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgIuaineebruS7pSBOVUwg5a2X5YWD57WQ5bC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzMgYnVpbHRpbi9jb21taXQuYzoxMzc3IGJ1aWx0aW4vY29tbWl0LmM6MTUzMworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTMgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjExNTYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMTU5IGJ1aWx0aW4vcmViYXNlLmM6MTUyNSBwYXJzZS1vcHRpb25zLmg6MzM2Cittc2dpZCAibW9kZSIKK21zZ3N0ciAi5qih5byPIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNzQgYnVpbHRpbi9jb21taXQuYzoxNTMzCittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICLpoa/npLrmnKrov73ouaTnmoTmqpTmoYjvvIzjgIzmqKHlvI/jgI3nmoTlj6/pgbjlj4PmlbjvvJphbGzjgIFub3JtYWzjgIFub+OAgu+8iOmgkOiore+8mmFsbO+8iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzc4Cittc2dpZCAiIgorInNob3cgaWdub3JlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IHRyYWRpdGlvbmFsLCBtYXRjaGluZywgbm8uIChEZWZhdWx0OiAiCisidHJhZGl0aW9uYWwpIgorbXNnc3RyICLpoa/npLrlt7Llv73nlaXnmoTmqpTmoYjvvIzlj6/pgbjmqKHlvI/vvJp0cmFkaXRpb25hbOOAgW1hdGNoaW5n44CBbm/jgILvvIjpoJDoqK3vvJp0cmFkaXRpb25hbO+8iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzgwIHBhcnNlLW9wdGlvbnMuaDoxOTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICLkvZXmmYIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MQorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAi5b+955Wl5a2Q5qih57WE55qE5pu05pS577yM44CM5L2V5pmC44CN55qE5Y+v6YG45Y+D5pW477yaYWxs44CBZGlydHnjgIF1bnRyYWNrZWTjgILvvIjpoJDoqK3vvJphbGzvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgIuS7peWIl+eahOaWueW8j+mhr+ekuuacqui/vei5pOeahOaqlOahiCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzg0Cittc2dpZCAiZG8gbm90IGRldGVjdCByZW5hbWVzIgorbXNnc3RyICLkuI3mqqLmuKzph43mlrDlkb3lkI0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM4NgorbXNnaWQgImRldGVjdCByZW5hbWVzLCBvcHRpb25hbGx5IHNldCBzaW1pbGFyaXR5IGluZGV4IgorbXNnc3RyICLmqqLmuKzph43mlrDlkb3lkI3vvIzlj6/ku6XoqK3lrprntKLlvJXnm7jkvLzluqYiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQwNgorbXNnaWQgIlVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGlnbm9yZWQgYW5kIHVudHJhY2tlZC1maWxlcyBhcmd1bWVudHMiCittc2dzdHIgIuS4jeaUr+aPtOW3suW/veeVpeWSjOacqui/vei5pOaqlOahiOWPg+aVuOeahOe1hOWQiCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg5Cittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAi5o+Q5Lqk5oiQ5Yqf5b6M5LiN6aGv56S65qaC6L+w6KiK5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTAKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIuWcqOaPkOS6pOiqquaYjuevhOacrOijoemhr+ekuuW3rueVsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkyCittc2dpZCAiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIKK21zZ3N0ciAi5o+Q5Lqk6Kqq5piO6YG46aCFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTMgYnVpbHRpbi9tZXJnZS5jOjI3NCBidWlsdGluL3RhZy5jOjQxNAorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIuW+nuaqlOahiOS4reiugOWPluaPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk0Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICLkvZzogIUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICLmj5DkuqTmmYLopobok4vkvZzogIUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NSBidWlsdGluL2djLmM6NTM4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi5pel5pyfIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTUKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgIuaPkOS6pOaZguimhuiTi+aXpeacnyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDk3IGJ1aWx0aW4vY29tbWl0LmM6MTQ5OCBidWlsdGluL2NvbW1pdC5jOjE0OTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMCBwYXJzZS1vcHRpb25zLmg6MzI4IHJlZi1maWx0ZXIuaDo5MgorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAi5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTcKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi6YeN55So5Lim57eo6Lyv5oyH5a6a5o+Q5Lqk55qE5o+Q5Lqk6Kqq5piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTgKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi6YeN55So5oyH5a6a5o+Q5Lqk55qE5o+Q5Lqk6Kqq5piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTkKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLkvb/nlKggYXV0b3NxdWFzaCDmoLzlvI/nmoTmj5DkuqToqqrmmI7nlKjku6Xkv67mraPmjIflrprnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLkvb/nlKggYXV0b3NxdWFzaCDmoLzlvI/nmoTmj5DkuqToqqrmmI7nlKjku6Xlo5PnuK7oh7PmjIflrprnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIuePvuWcqOWwh+ipsuaPkOS6pOeahOS9nOiAheaUueeCuuaIke+8iOWSjCAtQy8tYy8tLWFtZW5kIOWPg+aVuOWFseeUqO+8iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTAyIGJ1aWx0aW4vbG9nLmM6MTYzNCBidWlsdGluL21lcmdlLmM6Mjg5CisjOiBidWlsdGluL3B1bGwuYzoxNjQgYnVpbHRpbi9yZXZlcnQuYzoxMTAKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgIuaWsOWiniBTaWduZWQtb2ZmLWJ5OiDnsL3lkI0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMworbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAi5L2/55So5oyH5a6a55qE56+E5pys5qqU5qGIIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDQKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAi5by35Yi257eo6Lyv5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MDYKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAi5Zyo5o+Q5Lqk6Kqq5piO56+E5pys6KOh5YyF5ZCr54uA5oWL6KiK5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTEKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAi5o+Q5Lqk5YWn5a656YG46aCFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MTIKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgIuaPkOS6pOaJgOacieaUueWLleeahOaqlOahiCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTEzCittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICLmlrDlop7mjIflrprnmoTmqpTmoYjliLDntKLlvJXljYDnrYnlvoXmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNAorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICLkupLli5XlvI/mlrDlop7mqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgIuS6kuWLleW8j+aWsOWinuiuiuabtCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE2Cittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICLlj6rmj5DkuqTmjIflrprnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxNworbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICLnuZ7pgY4gcHJlLWNvbW1pdCDlkowgY29tbWl0LW1zZyDmjpvpiaQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUxOAorbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgIumhr+ekuuWwh+imgeaPkOS6pOeahOWFp+WuuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTMxCittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLkv67mlLnlhYjliY3nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzMgorbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAi57me6YGOIHBvc3QtcmV3cml0ZSDmjpvpiaQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzOQorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgIuWFgeioseS4gOWAi+epuuaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTQxCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAi5YWB6Kix56m655qE5o+Q5Lqk6Kqq5piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAi5pCN5aOe55qEIE1FUkdFX0hFQUQg5qqU5qGI77yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYyMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIuS4jeiDveiugOWPliBNRVJHRV9NT0RFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICLkuI3og73oroDlj5bmj5DkuqToqqrmmI7vvJolcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgIue1guatouaPkOS6pOWboOeCuuaPkOS6pOiqquaYjueCuuepuuOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICLntYLmraLmj5DkuqTvvJvmgqjmnKrmm7TmlLnkvoboh6rnr4TmnKznmoTmj5DkuqToqqrmmI7jgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjg2Cittc2dpZCAiIgorInJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyLniYjmnKzluqvlt7Lmm7TmlrDvvIzkvYbnhKHms5Xlr6sgbmV3X2luZGV4IOaqlOahiOOAguaqouafpeaYr+WQpuejgeein+W3sua7v+aIllxuIgorIuejgeein+mFjemhjeW3suiAl+eboe+8jOeEtuW+jOWft+ihjCBcImdpdCByZXN0b3JlIC0tc3RhZ2VkIDovXCIg5b6p5Y6f44CCIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExIGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTcKK21zZ2lkICIiCisiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSBbLS1vYmplY3QtZGlyIDznianku7bnm67pjIQ+XSBbLS1zaGFsbG93XSBbLS0iCisiW25vLV1wcm9ncmVzc10iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoyMgorbXNnaWQgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIFstLWFwcGVuZHwtLXNwbGl0XSBbLS0iCisicmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8c3BsaXQgb3B0aW9ucz4iCittc2dzdHIgIiIKKyJnaXQgY29tbWl0LWdyYXBoIHdyaXRlIFstLW9iamVjdC1kaXIgPOeJqeS7tuebrumMhD5dIFstLWFwcGVuZHwtLXNwbGl0XSBbLS0iCisicmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8c3BsaXQgb3B0aW9ucz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDggYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDMKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg3IGJ1aWx0aW4vZmV0Y2guYzoxNzkgYnVpbHRpbi9sb2cuYzoxNjU3Cittc2dpZCAiZGlyIgorbXNnc3RyICLnm67pjIQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NDkgYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMDQKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTg4Cittc2dpZCAiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIgorbXNnc3RyICLlhLLlrZjlnJblvaLnmoTnianku7bnm67pjIQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6NTEKK21zZ2lkICJpZiB0aGUgY29tbWl0LWdyYXBoIGlzIHNwbGl0LCBvbmx5IHZlcmlmeSB0aGUgdGlwIGZpbGUiCittc2dzdHIgIuWmguaenOaPkOS6pOWcluW9ouiiq+WIhuWJsu+8jOWPqumpl+itiemgreS4gOWAi+aqlOahiCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzo3MyB0L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf5o+Q5Lqk5ZyW5b2iICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTA2Cittc2dpZCAic3RhcnQgd2FsayBhdCBhbGwgcmVmcyIKK21zZ3N0ciAi6ZaL5aeL6YGN5q235omA5pyJ5byV55SoIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjEwOAorbXNnaWQgInNjYW4gcGFjay1pbmRleGVzIGxpc3RlZCBieSBzdGRpbiBmb3IgY29tbWl0cyIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl5Lit55qE5YyF57Si5byV5qqU5qGI5YiX6KGo5Lit5o6D5o+P5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExMAorbXNnaWQgInN0YXJ0IHdhbGsgYXQgY29tbWl0cyBsaXN0ZWQgYnkgc3RkaW4iCittc2dzdHIgIuW+nuaomea6lui8uOWFpeS4reeahOaPkOS6pOmWi+Wni+aOg+aPjyIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTIKK21zZ2lkICJpbmNsdWRlIGFsbCBjb21taXRzIGFscmVhZHkgaW4gdGhlIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLljIXlkKsgY29tbWl0LWdyYXBoIOaqlOahiOS4reW3suacieaJgOacieaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQtZ3JhcGguYzoxMTUKK21zZ2lkICJhbGxvdyB3cml0aW5nIGFuIGluY3JlbWVudGFsIGNvbW1pdC1ncmFwaCBmaWxlIgorbXNnc3RyICLlhYHoqLHlr6vkuIDlgIvlop7ph4/mj5DkuqTlnJblvaLmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTE3IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTIxCittc2dpZCAibWF4aW11bSBudW1iZXIgb2YgY29tbWl0cyBpbiBhIG5vbi1iYXNlIHNwbGl0IGNvbW1pdC1ncmFwaCIKK21zZ3N0ciAi5Zyo6Z2e5Z+65pys5YiG5Ymy5o+Q5Lqk5ZyW5b2i5Lit55qE5pyA5aSn5o+Q5Lqk5pW4IgorCisjOiBidWlsdGluL2NvbW1pdC1ncmFwaC5jOjExOQorbXNnaWQgIm1heGltdW0gcmF0aW8gYmV0d2VlbiB0d28gbGV2ZWxzIG9mIGEgc3BsaXQgY29tbWl0LWdyYXBoIgorbXNnc3RyICLkuIDlgIvliIblibLmj5DkuqTlnJblvaLnmoTlhanlgIvntJrliKXkuYvplpPnmoTmnIDlpKfmr5TnjociCisKKyM6IGJ1aWx0aW4vY29tbWl0LWdyYXBoLmM6MTM3Cittc2dpZCAidXNlIGF0IG1vc3Qgb25lIG9mIC0tcmVhY2hhYmxlLCAtLXN0ZGluLWNvbW1pdHMsIG9yIC0tc3RkaW4tcGFja3MiCittc2dzdHIgIuS4jeiDveWQjOaZguS9v+eUqCAtLXJlYWNoYWJsZeOAgS0tc3RkaW4tY29tbWl0cyDmiJYgLS1zdGRpbi1wYWNrcyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMQorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMDMgYnVpbHRpbi9lbnYtLWhlbHBlci5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCAtLXR5cGUgYXJndW1lbnQsICVzIgorbXNnc3RyICLmnKrog73orZjliKXnmoQgLS10eXBlIOWPg+aVuO+8jCVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjExNQorbXNnaWQgIm9ubHkgb25lIHR5cGUgYXQgYSB0aW1lIgorbXNnc3RyICLkuIDmrKHlj6rog73kuIDlgIvpoZ7lnosiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI0Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIuioreWumuaqlOahiOS9jee9riIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMjUKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICLkvb/nlKjlhajln5/oqK3lrprmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI2Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So57O757Wx57Sa6Kit5a6a5qqU5qGIIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyNworbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICLkvb/nlKjniYjmnKzluqvntJroqK3lrprmqpTmoYgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTI4Cittc2dpZCAidXNlIHBlci13b3JrdHJlZSBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So5bel5L2c5Y2A57Sa5Yil55qE6Kit5a6a5qqU5qGIIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEyOQorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAi5L2/55So5oyH5a6a55qE6Kit5a6a5qqU5qGIIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzMAorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIuizh+aWmeeJqeS7tiBJRCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzAKK21zZ2lkICJyZWFkIGNvbmZpZyBmcm9tIGdpdmVuIGJsb2Igb2JqZWN0IgorbXNnc3RyICLlvp7mj5DkvpvnmoTos4fmlpnnianku7boroDlj5boqK3lrpoiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMxCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICLli5XkvZwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTMyCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuWPluW+l+WAvO+8mm5hbWUgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzMKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIueNsuW+l+aJgOacieeahOWAvO+8mmtleSBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNAorbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLmoLnmk5rmraPopo/ooajnpLrlvI/njbLlvpflgLzvvJpuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM1Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAi542y5b6XIFVSTCDlj5blgLzvvJpzZWN0aW9uWy52YXJdIFVSTCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzYKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAi5Y+W5Luj5omA5pyJ56ym5ZCI55qE6K6K5pW477yabmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjEzNworbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAi5paw5aKe5LiA5YCL5paw55qE6K6K5pW477yabmFtZSB2YWx1ZSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxMzgKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLliKrpmaTkuIDlgIvorormlbjvvJpuYW1lIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTM5Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuWIqumZpOaJgOacieespuWQiOmghe+8mm5hbWUgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDAKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgIumHjeaWsOWRveWQjeWwj+evgO+8mm9sZC1uYW1lIG5ldy1uYW1lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0MQorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgIuWIqumZpOS4gOWAi+Wwj+evgO+8mm5hbWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQyCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgIuWFqOmDqOWIl+WHuiIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDMKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAi6ZaL5ZWf5LiA5YCL57eo6Lyv5ZmoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICLnjbLlvpfoqK3lrprnmoTpoY/oibLvvJroqK3lrpogW+mgkOiorV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ1Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgIueNsuW+l+mhj+iJsuioreWumu+8muioreWumiBbc3Rkb3V0LWlzLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTQ2Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAi6aGe5Z6LIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0NyBidWlsdGluL2Vudi0taGVscGVyLmM6MzgKK21zZ2lkICJ2YWx1ZSBpcyBnaXZlbiB0aGlzIHR5cGUiCittc2dzdHIgIuWPluWAvOeCuuipsumhnuWeiyIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNDgKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgIuWAvOaYryBcInRydWVcIiDmiJYgXCJmYWxzZVwiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE0OQorbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICLlgLzmmK/ljYHpgLLkvY3mlbgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTUwCittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICLlgLzmmK8gLS1ib29sIG9yIC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgIuWAvOaYr+S4gOWAi+i3r+W+ke+8iOaqlOahiOaIluebrumMhOWQje+8iSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTIKK21zZ2lkICJ2YWx1ZSBpcyBhbiBleHBpcnkgZGF0ZSIKK21zZ3N0ciAi5YC85piv5LiA5YCL5Yiw5pyf5pel5pyfIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE1MworbXNnaWQgIk90aGVyIgorbXNnc3RyICLlhbblroMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU0Cittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLntYLmraLlgLzmmK8gTlVMIOS9jeWFg+e1hCIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTUKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIuWPqumhr+ekuuiuiuaVuOWQjSIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTYKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgIuafpeipouaZguWPg+eFpyBpbmNsdWRlIOaMh+S7pOmBnui/tOWwi+aJviIKKworIzogYnVpbHRpbi9jb25maWcuYzoxNTcKK21zZ2lkICJzaG93IG9yaWdpbiBvZiBjb25maWcgKGZpbGUsIHN0YW5kYXJkIGlucHV0LCBibG9iLCBjb21tYW5kIGxpbmUpIgorbXNnc3RyICLpoa/npLroqK3lrprnmoTkvobmupDvvIjmqpTmoYjjgIHmqJnmupbovLjlhaXjgIHos4fmlpnnianku7bvvIzmiJbmjIfku6TliJfvvIkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4IGJ1aWx0aW4vZW52LS1oZWxwZXIuYzo0MAorbXNnaWQgInZhbHVlIgorbXNnc3RyICLlj5blgLwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTU4Cittc2dpZCAid2l0aCAtLWdldCwgdXNlIGRlZmF1bHQgdmFsdWUgd2hlbiBtaXNzaW5nIGVudHJ5IgorbXNnc3RyICLkvb/nlKggLS1nZXQg5L2G5pyq5oyH5a6a5Y+D5pW45pmC5omA5L2/55So55qE6aCQ6Kit5YC8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBzaG91bGQgYmUgJWQiCittc2dzdHIgIumMr+iqpOeahOWPg+aVuOWAi+aVuO+8jOaHieipsueCuiAlZCDlgIsiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHNob3VsZCBiZSBmcm9tICVkIHRvICVkIgorbXNnc3RyICLpjK/oqqTnmoTlj4PmlbjlgIvmlbjvvIzmh4noqbLngrrlvp4gJWQg5YCL5YiwICVkIOWAiyIKKworIzogYnVpbHRpbi9jb25maWcuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBrZXkgcGF0dGVybjogJXMiCittc2dzdHIgIueEoeaViOmNteWQjeaooeW8j++8miVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlOiAlcyIKK21zZ3N0ciAi5qC85byP5YyW6aCQ6Kit6Kit5a6a5YC85aSx5pWX77yaJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBwYXJzZSBjb2xvciAnJXMnIgorbXNnc3RyICLnhKHms5Xop6PmnpDpoY/oibIgJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo0NDMKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q6aCQ6Kit6aGP6Imy5YC8IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5NiBidWlsdGluL2NvbmZpZy5jOjc0MgorbXNnaWQgIm5vdCBpbiBhIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeWcqCBnaXQg54mI5pys5bqr5LitIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ5OQorbXNnaWQgIndyaXRpbmcgdG8gc3RkaW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi5LiN5pSv5o+05a+r5Yiw5qiZ5rqW6Ly45YWlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjUwMgorbXNnaWQgIndyaXRpbmcgY29uZmlnIGJsb2JzIGlzIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aPtOWvq+WIsOioreWumuizh+aWmeeJqeS7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKK21zZ3N0ciAiIgorIiMgVGhpcyBpcyBHaXQncyBwZXItdXNlciBjb25maWd1cmF0aW9uIGZpbGUuXG4iCisiW3VzZXJdXG4iCisiIyBQbGVhc2UgYWRhcHQgYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTEKK21zZ2lkICJvbmx5IG9uZSBjb25maWcgZmlsZSBhdCBhIHRpbWUiCittc2dzdHIgIuS4gOasoeWPquiDveacieS4gOWAi+ioreWumuaqlOahiCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MTYKK21zZ2lkICItLWxvY2FsIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIi0tbG9jYWwg5Y+q6IO95Zyo5LiA5YCL54mI5pys5bqr5YWn5L2/55SoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxOQorbXNnaWQgIi0tYmxvYiBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLWJsb2Ig5Y+q6IO95Zyo5LiA5YCL54mI5pys5bqr5YWn5L2/55SoIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzOAorbXNnaWQgIiRIT01FIG5vdCBzZXQiCittc2dzdHIgIiRIT01FIOacquioreWumiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NTgKK21zZ2lkICIiCisiLS13b3JrdHJlZSBjYW5ub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgdW5sZXNzIHRoZSBjb25maWdcbiIKKyJleHRlbnNpb24gd29ya3RyZWVDb25maWcgaXMgZW5hYmxlZC4gUGxlYXNlIHJlYWQgXCJDT05GSUdVUkFUSU9OIEZJTEVcIlxuIgorInNlY3Rpb24gaW4gXCJnaXQgaGVscCB3b3JrdHJlZVwiIGZvciBkZXRhaWxzIgorbXNnc3RyICIiCisi5LiN6IO95ZKM5aSa5YCL5bel5L2c5Y2A5LiA6LW35L2/55SoIC0td29ya3RyZWXvvIzpmaTpnZ7llZ/nlKggd29ya3RyZWVDb25maWcg6Kit5a6a5pO05bGV44CCXG4iCisi6Kmz5oOF6KuL6Zax6K6A44CMZ2l0IGhlbHAgd29ya3RyZWXjgI3nmoTjgIxDT05GSUdVUkFUSU9OIEZJTEXjgI3lsI/nr4AiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6Njg4Cittc2dpZCAiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiCittc2dzdHIgIi0tZ2V0LWNvbG9yIOWSjOiuiuaVuOmhnuWei+S4jeebuOWuuSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OTMKK21zZ2lkICJvbmx5IG9uZSBhY3Rpb24gYXQgYSB0aW1lIgorbXNnc3RyICLkuIDmrKHlj6rog73mnInkuIDlgIvli5XkvZwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzA2Cittc2dpZCAiLS1uYW1lLW9ubHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tbGlzdCBvciAtLWdldC1yZWdleHAiCittc2dzdHIgIi0tbmFtZS1vbmx5IOWDhemBqeeUqOaWvCAtLWxpc3Qg5oiWIC0tZ2V0LXJlZ2V4cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTIKK21zZ2lkICIiCisiLS1zaG93LW9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1nZXQsIC0tZ2V0LWFsbCwgLS1nZXQtcmVnZXhwLCBhbmQgLS0iCisibGlzdCIKK21zZ3N0ciAiLS1zaG93LW9yaWdpbiDlg4XpgannlKjmlrwgLS1nZXTjgIEtLWdldC1hbGzjgIEtLWdldC1yZWdleHAg5ZKMIC0tbGlzdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MTgKK21zZ2lkICItLWRlZmF1bHQgaXMgb25seSBhcHBsaWNhYmxlIHRvIC0tZ2V0IgorbXNnc3RyICItLWRlZmF1bHQg5YOF6YGp55So5pa8IC0tZ2V0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIgorbXNnc3RyICLnhKHms5XoroDlj5boqK3lrprmqpTmoYggJyVzJyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MzQKK21zZ2lkICJlcnJvciBwcm9jZXNzaW5nIGNvbmZpZyBmaWxlKHMpIgorbXNnc3RyICLomZXnkIboqK3lrprmqpTmoYjnmbznlJ/pjK/oqqQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQ0Cittc2dpZCAiZWRpdGluZyBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mj7Tnt6jovK/mqJnmupbovLjlhaUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQ2Cittc2dpZCAiZWRpdGluZyBibG9icyBpcyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mj7Tnt6jovK/os4fmlpnnianku7YiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLkuI3og73lu7rnq4voqK3lrprmqpTmoYggJXMiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjYW5ub3Qgb3ZlcndyaXRlIG11bHRpcGxlIHZhbHVlcyB3aXRoIGEgc2luZ2xlIHZhbHVlXG4iCisiICAgICAgIFVzZSBhIHJlZ2V4cCwgLS1hZGQgb3IgLS1yZXBsYWNlLWFsbCB0byBjaGFuZ2UgJXMuIgorbXNnc3RyICIiCisi54Sh5rOV55So5LiA5YCL5YC86KaG6JOL5aSa5YCL5YC8XG4iCisiICAgICAgIOS9v+eUqOS4gOWAi+ato+imj+ihqOekuuW8j+OAgS0tYWRkIOaIliAtLXJlcGxhY2UtYWxsIOS+huS/ruaUuSAlc+OAgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4NDcgYnVpbHRpbi9jb25maWcuYzo4NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBzZWN0aW9uOiAlcyIKK21zZ3N0ciAi54Sh5q2k5bCP56+A77yaJXMiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjkwCittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKK21zZ3N0ciAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6MTAwCittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICLku6Xkvb/nlKjogIXlj6/oroDnmoTmoLzlvI/poa/npLrlpKflsI8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNgorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs86YG46aCFPl0gWzzmj5DkuqTomZ8+Li4uXSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPOmBuOmghT5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MgorbXNnaWQgImhlYWQiCittc2dzdHIgIumgrSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAibGlnaHR3ZWlnaHQiCittc2dzdHIgIui8lemHj+e0mueahCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjYyCittc2dpZCAiYW5ub3RhdGVkIgorbXNnc3RyICLpmYToqLvnmoQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICLpmYToqLvmqJnnsaQgJXMg54Sh5pWIIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgIumZhOiou+aomeexpCAlcyDmspLmnInltYzlhaXlkI3nqLEiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAi5qiZ57GkICclcycg55qE56K65piv5ZyoICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLmspLmnInmqJnnsaTmupbnorrnrKblkIggJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJObyBleGFjdCBtYXRjaCBvbiByZWZzIG9yIHRhZ3MsIHNlYXJjaGluZyB0byBkZXNjcmliZVxuIgorbXNnc3RyICLmspLmnInnsr7norrnrKblkIjliLDlvJXnlKjmiJbmqJnnsaTvvIznubznuozmkJzlsIvpgLLooYzmj4/ov7BcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM4MQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAi5a6M5oiQ5pCc5bCLICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyLmspLmnInpmYToqLvmqJnnsaTog73mj4/ov7AgJyVzJ+OAglxuIgorIueEtuiAjO+8jOWtmOWcqOacqumZhOiou+aomeexpO+8muWYl+ippiAtLXRhZ3PjgIIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIuaykuacieaomeexpOiDveaPj+i/sCAnJXMn44CCXG4iCisi5ZiX6KmmIC0tYWx3YXlz77yM5oiW6ICF5bu656uL5LiA5Lqb5qiZ57Gk44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLlt7LpgY3mrbcgJWx1IOWAi+aPkOS6pFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorIueZvOePvuWkmuaWvCAlaSDlgIvmqJnnsaTvvIzliJflh7rmnIDov5HnmoQgJWkg5YCLXG4iCisi5ZyoICVzIOaUvuajhOaQnOWwi1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc2NyaWJlICVzXG4iCittc2dzdHIgIuaPj+i/sCAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLkuI3mmK/kuIDlgIvmnInmlYjnmoTnianku7blkI0gJXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbmVpdGhlciBhIGNvbW1pdCBub3IgYmxvYiIKK21zZ3N0ciAiJXMg5pei5LiN5piv5o+Q5Lqk5Lmf5LiN5piv6LOH5paZ54mp5Lu2IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM3Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAi5bCL5om+6Kmy5o+Q5Lqk5LmL5b6M55qE5qiZ57GkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM4Cittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAi5Zyo5qiZ5rqW6Yyv6Kqk5LiK6Zmk6Yyv5pCc5bCL562W55WlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTM5Cittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgIuS9v+eUqOS7u+aEj+W8leeUqCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0MAorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICLkvb/nlKjku7vmhI/mqJnnsaTvvIzljbPkvb/mnKrpmYTluLblgpnoqLsiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDEKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICLlp4vntYLkvb/nlKjplbfmj5DkuqTomZ/moLzlvI8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDIKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgIuWPqui3n+maqOesrOS4gOWAi+eItuaPkOS6pCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NQorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIuWPqui8uOWHuueyvueiuuespuWQiCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU0NworbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIuiAg+aFruacgOi/kSA8bj4g5YCL5qiZ57Gk77yI6aCQ6Kit77yaMTDvvIkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo1NDkKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlj6rogIPmha7nrKblkIggPOaooeW8jz4g55qE5qiZ57GkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUxCittc2dpZCAiZG8gbm90IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLkuI3ogIPmha7nrKblkIggPOaooeW8jz4g55qE5qiZ57GkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTUzIGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzMKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIumhr+ekuuewoeWvq+eahOaPkOS6pOiZn+S9nOeCuuW+jOWCmSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjU1NCBidWlsdGluL2Rlc2NyaWJlLmM6NTU3Cittc2dpZCAibWFyayIKK21zZ3N0ciAi5qiZ6KiYIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU1Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICLlsI3mlrzpq5Llt6XkvZzljYDvvIzov73liqAgPOaomeiomD7vvIjpoJDoqK3vvJpcIi1kaXJ0eVwi77yJIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTU4Cittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBicm9rZW4gd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1icm9rZW5cIikiCittc2dzdHIgIuWwjeaWvOaQjeWjnueahOW3peS9nOWNgO+8jOi/veWKoCA85qiZ6KiYPu+8iOmgkOiore+8mlwiLWJyb2tlblwi77yJIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NTc2Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIi0tbG9uZyDoiIcgLS1hYmJyZXY9MCDkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo2MDUKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAi5rKS5pyJ55m854++5ZCN56ix77yM54Sh5rOV5o+P6L+w5Lu75L2V5p2x6KW/44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkg6IiH5o+Q5Lqk6Jmf5LiN55u45a65IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NjU4Cittc2dpZCAiLS1icm9rZW4gaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICItLWJyb2tlbiDoiIfmj5DkuqTomZ/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++8jOS4jeaYryBgJXNgIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjkKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6ODUyCittc2dpZCAiRXJyb3I6IENhbm5vdCBleHBvcnQgbmVzdGVkIHRhZ3MgdW5sZXNzIC0tbWFyay10YWdzIGlzIHNwZWNpZmllZC4iCittc2dzdHIgIumMr+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+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNgorbXNnaWQgImZldGNoLnBhcmFsbGVsIGNhbm5vdCBiZSBuZWdhdGl2ZSIKK21zZ3N0ciAiZmV0Y2gucGFyYWxsZWwg5LiN6IO954K66LKg5pW4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTM5IGJ1aWx0aW4vcHVsbC5jOjIwNAorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIuW+nuaJgOacieeahOmBoOerr+aKk+WPliIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MSBidWlsdGluL3B1bGwuYzoyNDgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL2ZldGNoIgorbXNnc3RyICLngrogZ2l0IHB1bGwvZmV0Y2gg6Kit5a6a5LiK5ri4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzIGJ1aWx0aW4vcHVsbC5jOjIwNworbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAi6L+95Yqg5YiwIC5naXQvRkVUQ0hfSEVBRCDogIzkuI3mmK/opobok4vlroMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDUgYnVpbHRpbi9wdWxsLmM6MjEwCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICLkuIrlgrPljIXliLDpgaDnq6/nmoTot6/lvpEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDYKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgcmVmZXJlbmNlIgorbXNnc3RyICLlvLfliLbopobok4vmnKzmqZ/lvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDgKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgIuW+nuWkmuWAi+mBoOerr+aKk+WPliIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1MCBidWlsdGluL3B1bGwuYzoyMTQKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLmipPlj5bmiYDmnInnmoTmqJnnsaTlkozpl5zoga/nianku7YiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTIKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIuS4jeaKk+WPluS7u+S9leaomeexpCgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU0Cittc2dpZCAibnVtYmVyIG9mIHN1Ym1vZHVsZXMgZmV0Y2hlZCBpbiBwYXJhbGxlbCIKK21zZ3N0ciAi5a2Q5qih57WE5Y+W5b6X55qE5Lim55m85pW4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU2IGJ1aWx0aW4vcHVsbC5jOjIxNworbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICLmuIXpmaTpgaDnq6/lt7LntpPkuI3lrZjlnKjnmoTliIbmlK/nmoTov73ouaTliIbmlK8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTgKK21zZ2lkICJwcnVuZSBsb2NhbCB0YWdzIG5vIGxvbmdlciBvbiByZW1vdGUgYW5kIGNsb2JiZXIgY2hhbmdlZCB0YWdzIgorbXNnc3RyICLmuIXpmaTpgaDnq6/kuI3lrZjlnKjnmoTmnKzmqZ/mqJnnsaTvvIzkuKbkuJTlj5bku6Porormm7TmqJnnsaQiCisKKyMgIOitr+iAhe+8muWPr+mBuOWAvO+8jOS4jeiDvee/u+itrworIzogYnVpbHRpbi9mZXRjaC5jOjE1OSBidWlsdGluL2ZldGNoLmM6MTgyIGJ1aWx0aW4vcHVsbC5jOjE0MQorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAib24tZGVtYW5kIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTYwCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAi5o6n5Yi25a2Q5qih57WE55qE6YGe6L+05oqT5Y+WIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY0IGJ1aWx0aW4vcHVsbC5jOjIyNQorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICLkv53mjIHkuIvovInljIUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNjYKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAi5YWB6Kix5pu05pawIEhFQUQg5byV55SoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY5IGJ1aWx0aW4vZmV0Y2guYzoxNzUgYnVpbHRpbi9wdWxsLmM6MjI4Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAi5rex5YyW5re66KSH6KO955qE5q235Y+yIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTcxCittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyByZXBvc2l0b3J5IGJhc2VkIG9uIHRpbWUiCittc2dzdHIgIuWfuuaWvOaZgumWk+S+hua3seWMlua3uuikh+ijveeahOatt+WPsiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NyBidWlsdGluL3B1bGwuYzoyMzEKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6L2J5o+b54K65LiA5YCL5a6M5pW055qE54mI5pys5bqrIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgwCittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAi5Zyo5a2Q5qih57WE6Lev5b6R6Ly45Ye655qE5YmN6Z2i5Yqg5LiK5q2k55uu6YyEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzCittc2dpZCAiIgorImRlZmF1bHQgZm9yIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIChsb3dlciBwcmlvcml0eSB0aGFuIGNvbmZpZyAiCisiZmlsZXMpIgorbXNnc3RyICLpgZ7ov7Tlj5blvpflrZDmqKHntYTnmoTpoJDoqK3lgLzvvIjmr5ToqK3lrprmqpTmoYjlhKrlhYjluqbkvY7vvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODcgYnVpbHRpbi9wdWxsLmM6MjM0Cittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICLmjqXlj5fmm7TmlrAgLmdpdC9zaGFsbG93IOeahOW8leeUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OCBidWlsdGluL3B1bGwuYzoyMzYKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgIuW8leeUqOaYoOWwhCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE4OSBidWlsdGluL3B1bGwuYzoyMzcKK21zZ2lkICJzcGVjaWZ5IGZldGNoIHJlZm1hcCIKK21zZ3N0ciAi5oyH5a6a5Y+W5b6X5YuV5L2c55qE5byV55So5pig5bCEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTk2Cittc2dpZCAicmVwb3J0IHRoYXQgd2UgaGF2ZSBvbmx5IG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhpcyBvYmplY3QiCittc2dzdHIgIuWgseWRiuaIkeWAkeWPquaTgeacieW+nuipsueJqeS7tumWi+Wni+WPr+S7peWPluW+l+eahOeJqeS7tiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE5OQorbXNnaWQgInJ1biAnZ2MgLS1hdXRvJyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi5Y+W5b6X5b6M5Z+36KGMICdnYyAtLWF1dG8nIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAxIGJ1aWx0aW4vcHVsbC5jOjI0NgorbXNnaWQgImNoZWNrIGZvciBmb3JjZWQtdXBkYXRlcyBvbiBhbGwgdXBkYXRlZCBicmFuY2hlcyIKK21zZ3N0ciAi5Zyo5omA5pyJ5pu05paw5YiG5pSv5LiK5qqi5p+l5by35Yi25pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAzCisjLCBmdXp6eQorI3wgbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dpZCAid3JpdGUgdGhlIGNvbW1pdC1ncmFwaCBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi5oqT5Y+W5b6M5riF6Zmk6YGg56uvIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEzCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIueEoeazleeZvOePvumBoOerryBIRUFEIOW8leeUqCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb25maWd1cmF0aW9uIGZldGNoLm91dHB1dCBjb250YWlucyBpbnZhbGlkIHZhbHVlICVzIgorbXNnc3RyICLoqK3lrprorormlbggZmV0Y2gub3V0cHV0IOWMheWQq+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+l44CCXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyDmnKrlgrPpgIHmiYDmnInlv4XpnIDnmoTnianku7ZcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkzMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICLmi5LntZUgJXMg5Zug54K65re66KSH6KO95LiN5YWB6Kix6KKr5pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAxNyBidWlsdGluL2ZldGNoLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAi5L6G6IeqICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorIuS4gOS6m+acrOapn+W8leeUqOS4jeiDveiiq+abtOaWsO+8m+WYl+ippuWft+ihjFxuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycg5L6G5Yiq6Zmk6IiK55qE44CB5pyJ6KGd56qB55qE5YiG5pSvIgorCisjICDora/ogIXvvJroq4vntq3mjIHliY3lsI7nqbrmoLwKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgIO+8iCVzIOWwh+aIkOeCuuaHuOepuueLgOaFi++8iSIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBidWlsdGluL2ZldGNoLmM6MTEyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgIO+8iCVzIOW3suaIkOeCuuaHuOepuueLgOaFi++8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTgKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvlt7LliKrpmaRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1OSBidWlsdGluL3JlbW90ZS5jOjEwMzUKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIu+8iOeEoe+8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLmi5LntZXlj5blvpfliLDpnZ7ntJTniYjmnKzluqvnmoTnm67liY3liIbmlK8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIumBuOmghSBcIiVzXCIg55qE5YC8IFwiJXNcIiDlsI3mlrwgJXMg5piv54Sh5pWI55qEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIumBuOmghSBcIiVzXCIg54K6ICVzIOaJgOW/veeVpVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQxMgorI3wgbXNnaWQgIm11bHRpcGxlIGJyYW5jaCBkZXRlY3RlZCwgaW5jb21wYXRpYmxlIHdpdGggLS1zZXQtdXBzdHJlYW0iCittc2dpZCAibXVsdGlwbGUgYnJhbmNoZXMgZGV0ZWN0ZWQsIGluY29tcGF0aWJsZSB3aXRoIC0tc2V0LXVwc3RyZWFtIgorbXNnc3RyICLmqqLmuKzliLDlpJrliIbmlK/vvIzlkowgLS1zZXQtdXBzdHJlYW0g5LiN55u45a65IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQyNworbXNnaWQgIm5vdCBzZXR0aW5nIHVwc3RyZWFtIGZvciBhIHJlbW90ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLmspLmnInngrrkuIDlgIvpgaDnq6/ov73ouaTliIbmlK/oqK3lrprkuIrmuLgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNDI5Cittc2dpZCAibm90IHNldHRpbmcgdXBzdHJlYW0gZm9yIGEgcmVtb3RlIHRhZyIKK21zZ3N0ciAi5rKS5pyJ54K65LiA5YCL6YGg56uv5qiZ57Gk6Kit5a6a5LiK5ri4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTQzMQorbXNnaWQgInVua25vd24gYnJhbmNoIHR5cGUiCittc2dzdHIgIuacquefpeeahOWIhuaUr+mhnuWeiyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE0MzMKK21zZ2lkICIiCisibm8gc291cmNlIGJyYW5jaCBmb3VuZC5cbiIKKyJ5b3UgbmVlZCB0byBzcGVjaWZ5IGV4YWN0bHkgb25lIGJyYW5jaCB3aXRoIHRoZSAtLXNldC11cHN0cmVhbSBvcHRpb24uIgorbXNnc3RyICIiCisi5pyq55m854++5rqQ5YiG5pSv44CCXG4iCisi5oKo6ZyA6KaB5L2/55SoIC0tc2V0LXVwc3RyZWFtIOmBuOmgheaMh+WumuS4gOWAi+WIhuaUr+OAgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE1NTkgYnVpbHRpbi9mZXRjaC5jOjE2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAi5q2j5Zyo5Y+W5b6XICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNTY5IGJ1aWx0aW4vZmV0Y2guYzoxNjI0IGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAi5LiN6IO95Y+W5b6XICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmV0Y2ggJyVzJyAoZXhpdCBjb2RlOiAlZClcbiIKK21zZ3N0ciAi54Sh5rOV5Y+W5b6XICclcyfvvIjpm6LplovnorzvvJolZO+8iVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTY4NAorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICLmnKrmjIflrprpgaDnq6/niYjmnKzluqvjgILoq4vpgI/pgY7kuIDlgIsgVVJMIOaIlumBoOerr+eJiOacrOW6q+WQjeaMh+Wumu+8jOeUqOS7peWPluW+l+aWsOaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3MjEKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICLmgqjpnIDopoHmjIflrprkuIDlgIvmqJnnsaTlkI3nqLHjgIIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzcxCittc2dpZCAiTmVnYXRpdmUgZGVwdGggaW4gLS1kZWVwZW4gaXMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiLS1kZWVwZW4g5LiN5pSv5o+06LKg5pW45rex5bqmIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc3MworbXNnaWQgIi0tZGVlcGVuIGFuZCAtLWRlcHRoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi0tZGVlcGVuIOWSjCAtLWRlcHRoIOaYr+S6kuaWpeeahCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjE3NzgKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLS1kZXB0aCDlkowgLS11bnNoYWxsb3cg5LiN6IO95ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc4MAorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLlsI3mlrzkuIDlgIvlrozmlbTnmoTniYjmnKzluqvvvIzlj4PmlbggLS11bnNoYWxsb3cg5rKS5pyJ5oSP576pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTc5NgorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCDkuI3og73luLbkuIDlgIvniYjmnKzluqvlj4PmlbgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxNzk4Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCDluLblvJXnlKjopo/moLzmspLmnInku7vkvZXmhI/nvqkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIuaykuaciemAmeaoo+eahOmBoOerr+aIlumBoOerr+e1hO+8miVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgxNAorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi5Y+W5b6X57WE5Lim5oyH5a6a5byV55So6KaP5qC85rKS5pyJ5oSP576pIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTgzMgorbXNnaWQgIiIKKyItLWZpbHRlciBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHJlbW90ZSBjb25maWd1cmVkIGluIGV4dGVuc2lvbnMuIgorInBhcnRpYWxjbG9uZSIKK21zZ3N0ciAi5Y+q5Y+v5Lul5bCHIC0tZmlsdGVyIOeUqOaWvOWcqCBleHRlbnNpb25zLnBhcnRpYWxDbG9uZSDkuK3oqK3lrprnmoTpgaDnq6/niYjmnKzluqsiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE4Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA86Kqq5piOPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPOaqlOahiD5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzQKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgIuWQkeaPkOS6pOiqquaYjuS4reacgOWkmuikh+ijveaMh+Wumuaineebru+8iOWQiOS9teiAjOS+hueahOaPkOS6pO+8ieeahOewoeefreiqquaYjiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAi5Y+D5pW4IC0tbG9nIOeahOWIpeWQje+8iOW3suajhOeUqO+8iSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjgwCittc2dpZCAidGV4dCIKK21zZ3N0ciAi5paH5a2XIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2ODEKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgIuS9v+eUqCA85paH5a2XPiDkvZzngrrmj5DkuqToqqrmmI7nmoTplovlp4siCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY4MgorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICLlvp7mqpTmoYjkuK3oroDlj5YiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTAKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFs86YG46aCFPl0gWzzmqKHlvI8+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWy0tcG9pbnRzLWF0IDxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbLS1wb2ludHMtYXQgPOeJqeS7tj5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEyCittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFsoLS1tZXJnZWQgfCAtLW5vLW1lcmdlZCkgWzzmj5DkuqQ+XV0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIFstLW5vLWNvbnRhaW5zIFs8Y29tbWl0Pl1dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFstLWNvbnRhaW5zIFs85o+Q5LqkPl1dIFstLW5vLWNvbnRhaW5zIFs85o+Q5LqkPl1dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgIuW8leeUqOWNoOS9jeespumBqeeUqOaWvCBzaGVsbHMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgIuW8leeUqOWNoOS9jeespumBqeeUqOaWvCBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIuW8leeUqOWNoOS9jeespumBqeeUqOaWvCBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAi5byV55So5Y2g5L2N56ym6YGp55So5pa8IFRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICLlj6rpoa/npLogPG4+IOWAi+espuWQiOeahOW8leeUqCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozOSBidWlsdGluL3RhZy5jOjQzOQorbXNnaWQgInJlc3BlY3QgZm9ybWF0IGNvbG9ycyIKK21zZ3N0ciAi6YG154Wn5qC85byP5Lit55qE6aGP6Imy6Ly45Ye6IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQyCittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IgorbXNnc3RyICLlj6rliJfljbDmjIflkJHmj5Dkvpvnianku7bnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDQKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbWVyZ2VkIgorbXNnc3RyICLlj6rliJfljbDlt7LntpPlkIjkvbXnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6NDUKK21zZ2lkICJwcmludCBvbmx5IHJlZnMgdGhhdCBhcmUgbm90IG1lcmdlZCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5rKS5pyJ5ZCI5L2155qE5byV55SoIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ2Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5YyF5ZCr6Kmy5o+Q5Lqk55qE5byV55SoIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjQ3Cittc2dpZCAicHJpbnQgb25seSByZWZzIHdoaWNoIGRvbid0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi5Y+q5YiX5Y2w5LiN5YyF5ZCr6Kmy5o+Q5Lqk55qE5byV55SoIgorCisjOiBidWlsdGluL2ZzY2suYzo2OCBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9mc2NrLmM6MTQ4Cittc2dpZCAidW5rbm93biIKK21zZ3N0ciAi5pyq55+lIgorCisjLiBUUkFOU0xBVE9SUzogZS5nLiBlcnJvciBpbiB0cmVlIDAxYmZkYTogPG1vcmUgZXhwbGFuYXRpb24+CisjOiBidWlsdGluL2ZzY2suYzoxMDAgYnVpbHRpbi9mc2NrLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yIGluICVzICVzOiAlcyIKK21zZ3N0ciAiJXMgJXMg6Yyv6Kqk77yaJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPgorIzogYnVpbHRpbi9mc2NrLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmcgaW4gJXMgJXM6ICVzIgorbXNnc3RyICIlcyAlcyDorablkYrvvJolcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTQzIGJ1aWx0aW4vZnNjay5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJicm9rZW4gbGluayBmcm9tICU3cyAlcyIKK21zZ3N0ciAi5L6G6IeqICU3cyAlcyDnmoTmkI3lo57nmoTpgKPntZAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE1NQorbXNnaWQgIndyb25nIG9iamVjdCB0eXBlIGluIGxpbmsiCittc2dzdHIgIumAo+e1kOS4remMr+iqpOeahOeJqeS7tumhnuWeiyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgorIiAgICAgICAgICAgICAgdG8gJTdzICVzIgorbXNnc3RyICIiCisi5pCN5aOe55qE6YCj57WQ5L6G6Ieq5pa8ICU3cyAlc1xuIgorIiAgICAgICAgICAgICAg5YiwICU3cyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgJXMgJXMiCittc2dzdHIgIue8uuWwkSAlcyAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVhY2hhYmxlICVzICVzIgorbXNnc3RyICLnhKHms5Xlj5blvpcgJXMgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJkYW5nbGluZyAlcyAlcyIKK21zZ3N0ciAi5oe456m6ICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzozMzkKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxvc3QtZm91bmQiCittc2dzdHIgIuS4jeiDveW7uueriyBsb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCAnJXMnIgorbXNnc3RyICLkuI3og73lrozmiJAgJyVzJyIKKworIzogYnVpbHRpbi9mc2NrLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nICVzIgorbXNnc3RyICLmraPlnKjmqqLmn6UgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkgKCVkIG9iamVjdHMpIgorbXNnc3RyICLmraPlnKjmqqLmn6XpgKPpgJrmgKfvvIglZCDlgIvnianku7bvvIkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyAlcyIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+lICVzICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo0MjkKK21zZ2lkICJicm9rZW4gbGlua3MiCittc2dzdHIgIuaQjeWjnueahOmAo+e1kCIKKworIzogYnVpbHRpbi9mc2NrLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgInJvb3QgJXMiCittc2dzdHIgIuaguSAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZ2dlZCAlcyAlcyAoJXMpIGluICVzIgorbXNnc3RyICLmqJnoqJggJXMgJXMgKCVzKSDmlrwgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogb2JqZWN0IGNvcnJ1cHQgb3IgbWlzc2luZyIKK21zZ3N0ciAiJXPvvJrnianku7bmkI3lo57miJbpgbrlpLEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaW52YWxpZCByZWZsb2cgZW50cnkgJXMiCittc2dzdHIgIiVz77ya54Sh5pWI55qE5byV55So5pel6KqM5qKd55uuICVzIgorCisjOiBidWlsdGluL2ZzY2suYzo1MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVmbG9nICVzLT4lcyIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+l5byV55So5pel6KqMICVzLT4lcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciAlcyIKK21zZ3N0ciAiJXPvvJrnhKHmlYjnmoQgc2hhMSDmjIfmqJkgJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm90IGEgY29tbWl0IgorbXNnc3RyICIlc++8muS4jeaYr+S4gOWAi+aPkOS6pCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjA5Cittc2dpZCAibm90aWNlOiBObyBkZWZhdWx0IHJlZmVyZW5jZXMiCittc2dzdHIgIuazqOaEj++8mueEoemgkOioreW8leeUqCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nOiAlcyIKK21zZ3N0ciAiJXPvvJrnianku7bmkI3lo57miJbpgbrlpLHvvJolcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBvYmplY3QgY291bGQgbm90IGJlIHBhcnNlZDogJXMiCittc2dzdHIgIiVz77ya5LiN6IO96Kej5p6Q54mp5Lu277yaJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgc2hhMSBmaWxlOiAlcyIKK21zZ3N0ciAi5aOe55qEIHNoYTEg5qqU5qGI77yaJXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY3MgorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcnkiCittc2dzdHIgIuato+WcqOaqouafpeeJqeS7tuebrumMhCIKKworIzogYnVpbHRpbi9mc2NrLmM6Njc1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yaWVzIgorbXNnc3RyICLmraPlnKjmqqLmn6Xnianku7bnm67pjIQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyAlcyBsaW5rIgorbXNnc3RyICLmraPlnKjmqqLmn6UgJXMg6YCj57WQIgorCisjOiBidWlsdGluL2ZzY2suYzo2OTUgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIueEoeaViOeahCAlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHBvaW50cyB0byBzb21ldGhpbmcgc3RyYW5nZSAoJXMpIgorbXNnc3RyICIlcyDmjIflkJHlpYfmgKrnmoTmnbHopb/vvIglc++8iSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkZXRhY2hlZCBIRUFEIHBvaW50cyBhdCBub3RoaW5nIgorbXNnc3RyICIlc++8muWIhumboumWi+mgreaMh+aomeeahOaMh+WQkeS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGljZTogJXMgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKSIKK21zZ3N0ciAi5rOo5oSP77yaJXMg5oyH5ZCR5LiA5YCL5bCa5pyq6KqV55Sf55qE5YiG5pSv77yIJXPvvIkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcyNAorbXNnaWQgIkNoZWNraW5nIGNhY2hlIHRyZWUiCittc2dzdHIgIuato+WcqOaqouafpeW/q+WPluaouSIKKworIzogYnVpbHRpbi9mc2NrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIHNoYTEgcG9pbnRlciBpbiBjYWNoZS10cmVlIgorbXNnc3RyICIlc++8mmNhY2hlLXRyZWUg5Lit54Sh5pWI55qEIHNoYTEg5oyH5qiZIgorCisjOiBidWlsdGluL2ZzY2suYzo3MzgKK21zZ2lkICJub24tdHJlZSBpbiBjYWNoZS10cmVlIgorbXNnc3RyICJjYWNoZS10cmVlIOS4remdnuaoueeLgOeJqeS7tiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzY5Cittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgWzzpgbjpoIU+XSBbPOeJqeS7tj4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo3NzUKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIumhr+ekuueEoeazleWPluW+l+eahOeJqeS7tiIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzc2Cittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICLpoa/npLrmh7jnqbrnmoTnianku7YiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3NworbXNnaWQgInJlcG9ydCB0YWdzIgorbXNnc3RyICLloLHlkYrmqJnnsaQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICLloLHlkYrmoLnnr4Dpu54iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc3OQorbXNnaWQgIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIgorbXNnc3RyICLlsIfntKLlvJXkuqbkvZzngrrmqqLmn6XnmoTpoK3nr4Dpu54iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjc4MAorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi5bCH5byV55So5pel6KqM5L2c54K65qqi5p+l55qE6aCt56+A6bue77yI6aCQ6Kit77yJIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODEKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAi5Lmf6ICD5oWu5YyF5ZKM5YKZ55So54mp5Lu2IgorCisjOiBidWlsdGluL2ZzY2suYzo3ODIKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi5YOF5qqi5p+l6YCj6YCa5oCnIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODMKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgIuWVn+eUqOabtOWatOagvOeahOaqouafpSIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg1Cittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgIuWwh+aHuOepuueJqeS7tuWvq+WFpSAuZ2l0L2xvc3QtZm91bmQg5LitIgorCisjOiBidWlsdGluL2ZzY2suYzo3ODYgYnVpbHRpbi9wcnVuZS5jOjEzMgorbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgIumhr+ekuumAsuW6piIKKworIzogYnVpbHRpbi9mc2NrLmM6Nzg3Cittc2dpZCAic2hvdyB2ZXJib3NlIG5hbWVzIGZvciByZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi6aGv56S65Y+v5Lul5Y+W5b6X54mp5Lu255qE6Kmz57Sw5ZCN56ixIgorCisjOiBidWlsdGluL2ZzY2suYzo4NDYgYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5q2j5Zyo5qqi5p+l54mp5Lu2IgorCisjOiBidWlsdGluL2ZzY2suYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG9iamVjdCBtaXNzaW5nIgorbXNnc3RyICIlc++8mueJqeS7tue8uuWwkSIKKworIzogYnVpbHRpbi9mc2NrLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIKK21zZ3N0ciAi54Sh5pWI55qE5Y+D5pW477ya5pyf5pybIHNoYTHvvIzlvpfliLAgJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjM1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmc3RhdCAlczogJXMiCittc2dzdHIgIuWwjSAlcyDlkbzlj6sgZnN0YXQg5aSx5pWX77yaJXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlICclcycgdmFsdWUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICclcycg5YC8ICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo0NzUgYnVpbHRpbi9pbml0LWRiLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bCNICclcycg5ZG85Y+rIHN0YXQiCisKKyM6IGJ1aWx0aW4vZ2MuYzo0ODQgYnVpbHRpbi9ub3Rlcy5jOjI0MCBidWlsdGluL3RhZy5jOjUyOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICLkuI3og73oroDlj5YgJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGxhc3QgZ2MgcnVuIHJlcG9ydGVkIHRoZSBmb2xsb3dpbmcuIFBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisiYW5kIHJlbW92ZSAlcy5cbiIKKyJBdXRvbWF0aWMgY2xlYW51cCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgdW50aWwgdGhlIGZpbGUgaXMgcmVtb3ZlZC5cbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuacgOW+jOS4gOasoSBnYyDli5XkvZzloLHlkYrlpoLkuIvoqIrmga/jgILoq4vmqqLmn6Xljp/lm6DkuKbliKrpmaQgJXPjgIJcbiIKKyLlnKjoqbLmqpTmoYjooqvliKrpmaTkuYvliY3vvIzoh6rli5XmuIXnkIblsIfkuI3mnIPln7fooYzjgIJcbiIKKyJcbiIKKyIlcyIKKworIzogYnVpbHRpbi9nYy5jOjUzOQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICLmuIXpmaTmnKrlvJXnlKjnmoTnianku7YiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NDEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgIuabtOW+ueW6le+8iOWinuWKoOWft+ihjOaZgumWk++8iSIKKworIzogYnVpbHRpbi9nYy5jOjU0MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgIuWVn+eUqOiHquWLleWeg+WcvuWbnuaUtuaooeW8jyIKKworIzogYnVpbHRpbi9nYy5jOjU0NQorbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICLlvLfliLbln7fooYwgZ2Mg5Y2z5L2/5Y+m5aSW5LiA5YCLIGdjIOato+WcqOWft+ihjCIKKworIzogYnVpbHRpbi9nYy5jOjU0OAorbXNnaWQgInJlcGFjayBhbGwgb3RoZXIgcGFja3MgZXhjZXB0IHRoZSBsYXJnZXN0IHBhY2siCittc2dzdHIgIumZpOS6huacgOWkp+eahOWMheS5i+Wklu+8jOWwjeaJgOacieWFtuWug+WMheaqlOahiOmHjeaWsOaJk+WMhSIKKworIzogYnVpbHRpbi9nYy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgZ2MubG9nZXhwaXJ5IHZhbHVlICVzIgorbXNnc3RyICLop6PmnpAgZ2MubG9nZXhwaXJ5IOeahOWAvCAlcyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIHBydW5lIGV4cGlyeSB2YWx1ZSAlcyIKK21zZ3N0ciAi6Kej5p6Q5riF6Zmk5pyf6ZmQ5YC8ICVzIOWkseaVlyIKKworIzogYnVpbHRpbi9nYy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAi6Ieq5YuV5Zyo5b6M5Y+w5Z+36KGM54mI5pys5bqr5omT5YyF5Lul5rGC5pyA5L2z5oCn6IO944CCXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICLoh6rli5XmiZPljIXniYjmnKzluqvku6XmsYLmnIDkvbPmgKfog73jgIJcbiIKKworIzogYnVpbHRpbi9nYy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICLmiYvli5Xntq3orbflj4PoposgXCJnaXQgaGVscCBnY1wi44CCXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgImdjIOW3suWcqOOAjCVz44CN5qmf5ZmoIHBpZCAlPFBSSXVNQVg+IOWft+ihjO+8iOWmguaenOS4jeaYr++8jOS9v+eUqCAtLWZvcmNl77yJIgorCisjOiBidWlsdGluL2djLmM6Njk0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICLmnInlpKrlpJrnhKHms5Xlj5blvpfnmoTprIbmlaPnianku7bvvIzln7fooYwgJ2dpdCBwcnVuZScg5Yiq6Zmk5a6D5YCR44CCIgorCisjOiBidWlsdGluL2dyZXAuYzoyOQorbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzzpgbjpoIU+XSBbLWVdIDzmqKHlvI8+IFs854mI5pysPi4uLl0gW1stLV0gPOi3r+W+kT4uLi5dIgorCisjOiBidWlsdGluL2dyZXAuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVw77ya54Sh5rOV5bu656uL5Z+36KGM57eS77yaJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIGZvciAlcyIKK21zZ3N0ciAi54K6ICUyJHMg6Kit5a6a55qE5Z+36KGM57eS5pW4ICglMSRkKSDnhKHmlYgiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyBpcyB0aGUgY29uZmlndXJhdGlvbgorIy4gdmFyaWFibGUgZm9yIHR3ZWFraW5nIHRocmVhZHMsIGN1cnJlbnRseQorIy4gZ3JlcC50aHJlYWRzCisjLgorIzogYnVpbHRpbi9ncmVwLmM6Mjg3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzQgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyNworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgIuaykuacieWft+ihjOe3kuaUr+aPtO+8jOW/veeVpSAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDY3IGJ1aWx0aW4vZ3JlcC5jOjU5MiBidWlsdGluL2dyZXAuYzo2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICLnhKHms5XoroDlj5bmqLnvvIglc++8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIueEoeazleaKk+WPluS+huiHquaWvCAlcyDpoZ7lnovnmoTnianku7YiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLplovpl5wgYCVjJyDmnJ/mnJvkuIDlgIvmlbjlrZflgLwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxNQorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIuWcqOe0ouW8leWNgOaQnOWwi+iAjOS4jeaYr+WcqOW3peS9nOWNgCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODE3Cittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgIuWcqOacquiiqyBnaXQg566h55CG55qE5YWn5a655Lit5bCL5om+IgorCisjICDora/ogIXvvJrkuK3mloflrZfkuLLmi7zmjqXvvIzlj6/liKrpmaTliY3lsI7nqbrmoLwKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgxOQorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi5Zyo6L+96Lmk5ZKM5pyq6L+96Lmk55qE5qqU5qGI5Lit5pCc5bCLIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjEKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgIuW/veeVpSAnLmdpdGlnbm9yZScg5YyF5ZCr55qE5qqU5qGIIgorCisjOiBidWlsdGluL2dyZXAuYzo4MjMKK21zZ2lkICJyZWN1cnNpdmVseSBzZWFyY2ggaW4gZWFjaCBzdWJtb2R1bGUiCittc2dzdHIgIuWcqOavj+S4gOWAi+WtkOaooee1hOS4remBnui/tOaQnOWwiyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIumhr+ekuuacquespuWQiOeahOihjCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODI4Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAi5LiN5Y2A5YiG5aSn5bCP5a+r56ym5ZCIIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzAKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAi5Y+q5Zyo5Zau6Kme6YKK55WM56ym5ZCI5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzIKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLmiorkuozpgLLkvY3mqpTmoYjnlbblgZrmloflrZfomZXnkIYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzNAorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAi5LiN5Zyo5LqM6YCy5L2N5qqU5qGI5Lit56ym5ZCI5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4MzcKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgIueUqCB0ZXh0Y29udiDpgY7mv77lmajomZXnkIbkuozpgLLkvY3mqpTmoYgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgzOQorbXNnaWQgInNlYXJjaCBpbiBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdCkiCittc2dzdHIgIuWcqOWtkOebrumMhOS4reWwi+aJvu+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODQxCittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICLmnIDlpJrku6XmjIflrprnmoTmt7HluqblkJHkuIvlsIvmib4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg0NQorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICLkvb/nlKjmk7TlsZXnmoQgUE9TSVgg5q2j6KaP6KGo56S65byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4NDgKK21zZ2lkICJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiCittc2dzdHIgIuS9v+eUqOWfuuacrOeahCBQT1NJWCDmraPopo/ooajnpLrlvI/vvIjpoJDoqK3vvIkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1MQorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICLmiormqKHlvI/op6PmnpDngrrlm7rlrprnmoTlrZfkuLIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg1NAorbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi5L2/55SoIFBlcmwg55u45a6555qE5q2j6KaP6KGo56S65byPIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTcKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAi6aGv56S66KGM6JmfIgorCisjOiBidWlsdGluL2dyZXAuYzo4NTgKK21zZ2lkICJzaG93IGNvbHVtbiBudW1iZXIgb2YgZmlyc3QgbWF0Y2giCittc2dzdHIgIumhr+ekuuesrOS4gOWAi+espuWQiOeahOWIl+iZnyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODU5Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIuS4jemhr+ekuuaqlOahiOWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYwCittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIumhr+ekuuaqlOahiOWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODYyCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAi6aGv56S655u45bCN5pa86aCC57Sa55uu6YyE55qE5qqU5qGI5ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjQKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIuWPqumhr+ekuuaqlOahiOWQjeiAjOS4jemhr+ekuuespuWQiOeahOihjCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIuWSjCAtLWZpbGVzLXdpdGgtbWF0Y2hlcyDlkIznvqkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2OQorbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAi5Y+q6aGv56S65pyq56ym5ZCI55qE5qqU5qGI5ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzEKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICLlnKjmqpTmoYjlkI3lvozovLjlh7ogTlVMIOWtl+WFgyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODc0Cittc2dpZCAic2hvdyBvbmx5IG1hdGNoaW5nIHBhcnRzIG9mIGEgbGluZSIKK21zZ3N0ciAi5Y+q6aGv56S66KGM5Lit55qE56ym5ZCI55qE6YOo5YiGIgorCisjOiBidWlsdGluL2dyZXAuYzo4NzYKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLpoa/npLrnuL3nrKblkIjooYzmlbjvvIzogIzkuI3poa/npLrnrKblkIjnmoTooYwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3NworbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICLpq5jkuq7poa/npLrnrKblkIjpoIUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg3OQorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICLlnKjkuI3lkIzmqpTmoYjnmoTnrKblkIjpoIXkuYvplpPliJfljbDnqbrooYwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg4MQorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIuWPquWcqOWQjOS4gOaqlOahiOeahOespuWQiOmgheeahOS4iumdoumhr+ekuuS4gOasoeaqlOahiOWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIumhr+ekuuespuWQiOmgheWJjeW+jOeahCA8bj4g6KGM5LiK5LiL5paHIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODcKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLpoa/npLrnrKblkIjpoIXliY0gPG4+IOihjOS4iuS4i+aWhyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg5Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLpoa/npLrnrKblkIjpoIXlvowgPG4+IOihjOS4iuS4i+aWhyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkxCittc2dpZCAidXNlIDxuPiB3b3JrZXIgdGhyZWFkcyIKK21zZ3N0ciAi5L2/55SoIDxuPiDlgIvlt6XkvZzln7fooYznt5IiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgIuW/q+aNt+mNtSAtQyDmlbjlrZciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NQorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIuWcqOespuWQiOeahOWJjemdoumhr+ekuuS4gOihjOWHveaVuOWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgIumhr+ekuuaJgOWcqOWHveaVuOeahOWJjeW+jOWFp+WuuSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAwCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgIuW+nuaqlOahiOiugOWPluaooeW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAyCittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLnrKblkIggPOaooeW8jz4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwNAorbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgIue1hOWQiOeUqCAtZSDlj4PmlbjoqK3lrprnmoTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxNgorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLkuI3ovLjlh7rvvIzogIznlKjpm6LplovnorzmqJnoqJjlkb3kuK3ni4DmhYsiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkxOAorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIuWPqumhr+ekuuespuWQiOaJgOacieaooeW8j+eahOaqlOahiOS4reeahOespuWQiCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTIwCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgIumhr+ekuiBncmVwIOihqOmBlOW8j+eahOino+aekOaouSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAicGFnZXIiCittc2dzdHIgIuWIhumggSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI0Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIuWIhumggemhr+ekuuespuWQiOeahOaqlOahiCIKKworIzogYnVpbHRpbi9ncmVwLmM6OTI4Cittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICLlhYHoqLHlkbzlj6sgZ3JlcCgxKe+8iOacrOasoeani+W7uuW/veeVpe+8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6OTkyCittc2dpZCAibm8gcGF0dGVybiBnaXZlbiIKK21zZ3N0ciAi5pyq5o+Q5L6b56ym5ZCI5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDI4Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMiCittc2dzdHIgIi0tbm8taW5kZXgg5oiWIC0tdW50cmFja2VkIOS4jeiDveWSjOeJiOacrOWQjOaZguS9v+eUqCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSByZXZpc2lvbjogJXMiCittc2dzdHIgIuS4jeiDveino+aekOeJiOacrO+8miVzIgorCisjOiBidWlsdGluL2dyZXAuYzoxMDY3Cittc2dpZCAiaW52YWxpZCBvcHRpb24gY29tYmluYXRpb24sIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAi54Sh5pWI55qE6YG46aCF57WE5ZCI77yM5b+955WlIC0tdGhyZWFkcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3MCBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDAKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIKK21zZ3N0ciAi5rKS5pyJ5Z+36KGM57eS5pSv5o+077yM5b+955WlIC0tdGhyZWFkcyIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA3MyBidWlsdGluL2luZGV4LXBhY2suYzoxNTMxIGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICLmjIflrprnmoTln7fooYznt5LmlbjnhKHmlYjvvIglZO+8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6MTA5NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIOWDheeUqOaWvOW3peS9nOWNgCIKKworIzogYnVpbHRpbi9ncmVwLmM6MTExOQorbXNnaWQgIm9wdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCittc2dzdHIgIumBuOmgheS4jeaUr+aPtOWSjCAtLXJlY3Vyc2Utc3VibW9kdWxlcyDlhbHnlKgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMjUKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXgiCittc2dzdHIgIi0tY2FjaGVkIOaIliAtLXVudHJhY2tlZCDkuI3og73oiIcgLS1uby1pbmRleCDlkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjExMzEKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cyIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQg5LiN6IO955So5pa85bey6L+96Lmk5YWn5a65IgorCisjOiBidWlsdGluL2dyZXAuYzoxMTM5Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuIgorbXNnc3RyICLlkIzmmYLntablh7rkuoYgLS1jYWNoZWQg5ZKM5qi554uA54mp5Lu2IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODUKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDzpoZ7lnos+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+aYryAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICLnhKHms5XloavlhYUgJWQg5L2N5YWD57WEIgorbXNnc3RyWzFdICLnhKHms5XloavlhYUgJWQg5L2N5YWD57WEIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjgKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIumBjuaXqeeahOaqlOahiOe1kOadn+espu+8iEVPRu+8iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY5Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAi6Ly45YWl5LiK55qE6K6A6Yyv6KqkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODEKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAi55So5o6J5LqG6LaF6YGO5Y+v55So55qE5L2N5YWD57WEIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo2MDQKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICLljIXlpKrlpKfotoXpgY7kuobnm67liY0gb2ZmX3Qg55qE5a6a576pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEgYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjk1Cittc2dpZCAicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIgorbXNnc3RyICLljIXotoXpgY7kuobmnIDlpKflhYHoqLHlgLwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLnhKHms5XplovllZ8gcGFja2ZpbGUgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI2Cittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgIuWMheewveWQjeS4jeespuWQiCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgIuS4jeaUr+aPtOWMheeJiOacrCAlPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlPFBSSXVNQVg+OiAlcyIKK21zZ3N0ciAi5YyF5Lit5pyJ6Yyv6Kqk55qE54mp5Lu25L2N5pa85L2N56e76YePICU8UFJJdU1BWD7vvJolcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDY2CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgIuino+Wjk+e4rui/lOWbniAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTE1Cittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAi5L2N56e75YC86KaG6JOL5LqGIGRlbHRhIOWfuua6lueJqeS7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJkZWx0YSDln7rmupbkvY3np7votornlYwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICLmnKrnn6Xnianku7bpoZ7lnosgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2MgorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIueEoeazleiugOWPluWMheaqlOahiCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlPFBSSXVNQVg+IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICU8UFJJdU1BWD4gYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAi5YyF5qqU5qGI6YGO5pep57WQ5p2f77yM57y65bCRICU8UFJJdU1BWD4g5L2N5YWD57WEIgorbXNnc3RyWzFdICLljIXmqpTmoYjpgY7ml6nntZDmnZ/vvIznvLrlsJEgJTxQUkl1TUFYPiDkvY3lhYPntYQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5MAorbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICLop6Plo5PnuK7lmrTph43nmoTkuI3kuIDoh7QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNSBidWlsdGluL2luZGV4LXBhY2suYzo3NDEgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzY0CisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDMgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIKK21zZ3N0ciAi55m854++ICVzIOWHuuePviBTSEExIOihneeqge+8gSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzM4IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU3CisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNyBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAi5LiN6IO96K6AICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0IGluZm8gJXMiCittc2dzdHIgIuS4jeiDveiugOWPluePvuWtmOeJqeS7tuioiuaBryAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K6A5Y+W54++5a2Y54mp5Lu2ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAi54Sh5pWI55qE6LOH5paZ54mp5Lu2ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYgYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ1Cittc2dpZCAiZnNjayBlcnJvciBpbiBwYWNrZWQgb2JqZWN0IgorbXNnc3RyICLlsI3miZPljIXnianku7YgZnNjayDmqqLmn6XnmbznlJ/pjK/oqqQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiJXMg55qE5omA5pyJ5a2Q54mp5Lu25Lim6Z2e6YO95Y+v5Lul5Y+W5b6XIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTkgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTUwCittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICLmh4nnlKggZGVsdGEg5aSx5pWXIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgIuaOpeaUtueJqeS7tuS4rSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIue0ouW8leeJqeS7tuS4rSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MgorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAi5YyF6KGd56qB77yIU0hBMSDkuI3nrKblkIjvvIkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTcKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIuS4jeiDveWwjSBwYWNrZmlsZSDlkbzlj6sgZnN0YXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjAKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIuWMheeahOe1kOWwvuacieWeg+Wcvuizh+aWmSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3MgorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgInBhcnNlX3BhY2tfb2JqZWN0cygpIOS4remBh+WIsOS4jeWPr+eQhuWWu+eahOWVj+mhjCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NQorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIuiZleeQhiBkZWx0YSDkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi5LiN6IO95bu656uL5Z+36KGM57eS77yaJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDYKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICLkuI3lj6/nkIbllrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyWzBdICLlrozmiJAgJWQg5YCL5pys5qmf54mp5Lu2IgorbXNnc3RyWzFdICLlrozmiJAgJWQg5YCL5pys5qmf54mp5Lu2IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICLlsI0gJXMg55qE5bC+6YOo57i95ZKM5qqi5p+l5Ye654++5oSP5aSW77yI56OB56Kf5pCN5aOe77yf77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICLljIXmnIkgJWQg5YCL5pyq6Kej5rG655qEIGRlbHRhIgorbXNnc3RyWzFdICLljIXmnIkgJWQg5YCL5pyq6Kej5rG655qEIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICLkuI3og73lo5PnuK7pmYTliqDnianku7bvvIglZO+8iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAi5pys5qmf54mp5Lu2ICVzIOW3suaQjeWjniIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAicGFja2ZpbGUg5ZCN56ixICclcycg5rKS5pyJ5LulICcucGFjaycg57WQ5bC+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSAlcyBmaWxlICclcyciCittc2dzdHIgIueEoeazleWvq+WFpSAlcyDmqpTmoYggJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiAlcyBmaWxlICclcyciCittc2dzdHIgIueEoeazlemXnOmWieW3suWvq+WFpeeahCAlcyDmqpTmoYggJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ1OQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICLpl5zplonljIXmqpTmoYjmmYLnmbznlJ/pjK/oqqQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzMKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICLnhKHms5XlhLLlrZjljIXmqpTmoYgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0ODEKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAi54Sh5rOV5YSy5a2Y57Si5byV5qqU5qGIIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTI1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICLlo57nmoQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICLnhKHms5XplovllZ/nj77lrZjljIXmqpTmoYggJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICLnhKHms5XngrogJXMg6ZaL5ZWf5YyF57Si5byV5qqU5qGIIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIumdniBkZWx0Ye+8miVkIOWAi+eJqeS7tiIKK21zZ3N0clsxXSAi6Z2eIGRlbHRh77yaJWQg5YCL54mp5Lu2IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIumPiOmVtyA9ICVkOiAlbHUg54mp5Lu2IgorbXNnc3RyWzFdICLpj4jplbcgPSAlZDogJWx1IOeJqeS7tiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY4OQorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLnhKHms5Xov5Tlm57nm67liY3lt6XkvZznm67pjIQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MzggYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc0MQorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTc1NyBidWlsdGluL2luZGV4LXBhY2suYzoxNzYxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAi6Yyv6Kqk6YG46aCFICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzc3Cittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIi0tZml4LXRoaW4g5LiN6IO95ZKMIC0tc3RkaW4g5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzc5Cittc2dpZCAiLS1zdGRpbiByZXF1aXJlcyBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICItLXN0ZGluIOmcgOimgeS4gOWAiyBnaXQg54mI5pys5bqrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzg1Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSDmspLmnInmj5DkvpsgcGFja2ZpbGUg5ZCN56ix5Y+D5pW4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODMzIGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo1ODEKK21zZ2lkICJmc2NrIGVycm9yIGluIHBhY2sgb2JqZWN0cyIKK21zZ3N0ciAi5Zyo5omT5YyF54mp5Lu25LitIGZzY2sg5qqi5p+l55m855Sf6Yyv6KqkIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICLkuI3og73lsI3nr4TmnKwgJyVzJyDlkbzlj6sgc3RhdCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAi5LiN6IO96ZaL5ZWf55uu6YyEICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICLkuI3og73oroDlj5bpgKPntZAgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICLkuI3og73oh6ogJyVzJyDliLAgJyVzJyDlu7rnq4vnrKbomZ/pgKPntZAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO96KSH6KO9ICclcycg6IezICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICLlv73nlaXnr4TmnKwgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kIGluICVzIgorbXNnc3RyICLmspLmnInlnKggJXMg5Lit5om+5Yiw56+E5pysIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIGZyb20gJyVzJzogJXMiCittc2dzdHIgIuaykuacieW+niAnJXMnIOikh+ijveevhOacrO+8miVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgIuS4jeiDveiZleeQhiAlZCDpoZ7lnovnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAi5LiN6IO956e75YuVICVzIOiHsyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMg5bey57aT5a2Y5ZyoIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyBzaGFyZWQgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLph43mlrDliJ3lp4vljJblt7LlrZjlnKjnmoTlhbHkuqsgR2l0IOeJiOacrOW6q+aWvCAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi6YeN5paw5Yid5aeL5YyW5bey5a2Y5Zyo55qEIEdpdCDniYjmnKzluqvmlrwgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgc2hhcmVkIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAi5bey5Yid5aeL5YyW56m655qE5YWx5LqrIEdpdCDniYjmnKzluqvmlrwgJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICLlt7LliJ3lp4vljJbnqbrnmoQgR2l0IOeJiOacrOW6q+aWvCAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ2OAorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT0856+E5pys55uu6YyEPl0gWy0tc2hhcmVkWz085qyK6ZmQPl1dICIKKyJbPOebrumMhD5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTEKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAi5qyK6ZmQIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0OTIKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgIuaMh+WumiBnaXQg54mI5pys5bqr5piv5aSa5YCL5L2/55So6ICF5LmL6ZaT5YWx5Lqr55qEIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjkgYnVpbHRpbi9pbml0LWRiLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAi5LiN6IO95bu656uL55uu6YyEICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICLkuI3og73liIfmj5vnm67pjITliLAgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICLkuI3lhYHoqLEgJXPvvIjmiJYgLS13b3JrLXRyZWU9POebrumMhD7vvInogIzmspLmnInmjIflrpogJXPvvIjmiJYgLS1naXQtZGlyPTznm67pjIQ+77yJIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95a2Y5Y+W5bel5L2c5Y2AICclcyciCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTYKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS1pbi1wbGFjZV0gWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgPOmNtT5bKD18Oik85YC8IgorIj5dKS4uLl0gWzzmqpTmoYg+Li4uXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NQorbXNnaWQgImVkaXQgZmlsZXMgaW4gcGxhY2UiCittc2dzdHIgIuWcqOWOn+S9jee3qOi8r+aqlOahiCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5NgorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgIuWIqumZpOepuueahOWwvumDqOe9suWQjSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzo5OQorbXNnaWQgIndoZXJlIHRvIHBsYWNlIHRoZSBuZXcgdHJhaWxlciIKK21zZ3N0ciAi5Zyo5ZOq6KOh5pS+572u5paw55qE5bC+6YOo572y5ZCNIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwMQorbXNnaWQgImFjdGlvbiBpZiB0cmFpbGVyIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLnlbblsL7pg6jnvbLlkI3lt7LntpPlrZjlnKjmmYLmiYDmjqHlj5bnmoTli5XkvZwiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTAzCittc2dpZCAiYWN0aW9uIGlmIHRyYWlsZXIgaXMgbWlzc2luZyIKK21zZ3N0ciAi55W25bC+6YOo572y5ZCN57y65bCR5pmC5omA5o6h5Y+W55qE5YuV5L2cIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNQorbXNnaWQgIm91dHB1dCBvbmx5IHRoZSB0cmFpbGVycyIKK21zZ3N0ciAi5Y+q6Ly45Ye65bC+6YOo572y5ZCNIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwNgorbXNnaWQgImRvIG5vdCBhcHBseSBjb25maWcgcnVsZXMiCittc2dzdHIgIuS4jeimgeaHieeUqOioreWumuimj+WJhyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMDcKK21zZ2lkICJqb2luIHdoaXRlc3BhY2UtY29udGludWVkIHZhbHVlcyIKK21zZ3N0ciAi6YCj57ea56m655m95oqY6KGM55qE5YC8IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjEwOAorbXNnaWQgInNldCBwYXJzaW5nIG9wdGlvbnMiCittc2dzdHIgIuioreWumuino+aekOmBuOmghSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMTAKK21zZ2lkICJkbyBub3QgdHJlYXQgLS0tIHNwZWNpYWxseSIKK21zZ3N0ciAi5LiN6KaB5bCNIC0tLSDnibnmroromZXnkIYiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTExCittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAi5bC+6YOo572y5ZCNIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjExMgorbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICLopoHmlrDlop7nmoTlsL7pg6jnvbLlkI0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTIzCittc2dpZCAiLS10cmFpbGVyIHdpdGggLS1vbmx5LWlucHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdHJhaWxlciDlkowgLS1vbmx5LWlucHV0IOWQjOaZguS9v+eUqOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxMzMKK21zZ2lkICJubyBpbnB1dCBmaWxlIGdpdmVuIGZvciBpbi1wbGFjZSBlZGl0aW5nIgorbXNnc3RyICLmspLmnInntablh7ropoHljp/kvY3nt6jovK/nmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTYKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFs86YG46aCFPl0gWzzniYjmnKznr4TlnI0+XSBbWy0tXSA86Lev5b6RPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTcKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzzpgbjpoIU+XSA854mp5Lu2Pi4uLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgIueEoeaViOeahCAtLWRlY29yYXRlIOmBuOmghe+8miVzIgorCisjOiBidWlsdGluL2xvZy5jOjE3NAorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICLpoa/npLrmupAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc1Cittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIuS9v+eUqOS/oeS7tuaYoOWwhOaqlOahiCIKKworIzogYnVpbHRpbi9sb2cuYzoxNzcKK21zZ2lkICJvbmx5IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIuWPquS/rumjvuiIhyA85qih5byPPiDnrKblkIjnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTc5Cittc2dpZCAiZG8gbm90IGRlY29yYXRlIHJlZnMgdGhhdCBtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIuS4jeS/rumjvuWSjCA85qih5byPPiDnrKblkIjnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTgwCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAi5L+u6aO+6YG46aCFIgorCisjOiBidWlsdGluL2xvZy5jOjE4MworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICLomZXnkIbmqpTmoYjkuK3nrKwgbiDliLAgbSDkuYvplpPnmoTooYzvvIzlvp4gMSDplovlp4siCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAi5pyA57WC6Ly45Ye677yaJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlczog5pCN5aOe55qE5qqU5qGIIgorCisjOiBidWlsdGluL2xvZy5jOjU1MCBidWlsdGluL2xvZy5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIuS4jeiDveiugOWPlueJqeS7tiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAi5pyq55+l6aGe5Z6L77yaJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBpbnZhbGlkIGNvdmVyIGZyb20gZGVzY3JpcHRpb24gbW9kZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjgyMQorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIOaykuacieWAvCIKKworIzogYnVpbHRpbi9sb2cuYzo5MzYKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIui8uOWHuuebrumMhOWQjeWkqumVtyIKKworIzogYnVpbHRpbi9sb2cuYzo5NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf5L+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+eUqCBbUkZDIFBBVENIXSDku6Pmm78gW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjUxCittc2dpZCAiY292ZXItZnJvbS1kZXNjcmlwdGlvbi1tb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY1MgorbXNnaWQgImdlbmVyYXRlIHBhcnRzIG9mIGEgY292ZXIgbGV0dGVyIGJhc2VkIG9uIGEgYnJhbmNoJ3MgZGVzY3JpcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjU0Cittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICLkvb/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+Li4uXV0iCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NTkKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVtb3RlIFVSTCIKK21zZ3N0ciAi5LiN5YiX5Y2w6YGg56uvIFVSTCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2MCBidWlsdGluL2xzLXJlbW90ZS5jOjYyIGJ1aWx0aW4vcmViYXNlLmM6MTUxOAorbXNnaWQgImV4ZWMiCittc2dzdHIgImV4ZWMiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjEgYnVpbHRpbi9scy1yZW1vdGUuYzo2MworbXNnaWQgInBhdGggb2YgZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUgaG9zdCIKK21zZ3N0ciAi6YGg56uv5Li75qmf5LiK55qEIGdpdC11cGxvYWQtcGFjayDot6/lvpEiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjUKK21zZ2lkICJsaW1pdCB0byB0YWdzIgorbXNnc3RyICLlg4XpmZDmlrzmqJnnsaQiCisKKyM6IGJ1aWx0aW4vbHMtcmVtb3RlLmM6NjYKK21zZ2lkICJsaW1pdCB0byBoZWFkcyIKK21zZ3N0ciAi5YOF6ZmQ5pa85YiG5pSvIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjY3Cittc2dpZCAiZG8gbm90IHNob3cgcGVlbGVkIHRhZ3MiCittc2dzdHIgIuS4jemhr+ekuuW3suino+aekOeahOaomeexpCIKKworIzogYnVpbHRpbi9scy1yZW1vdGUuYzo2OQorbXNnaWQgInRha2UgdXJsLjxiYXNlPi5pbnN0ZWFkT2YgaW50byBhY2NvdW50IgorbXNnc3RyICLlj4PogIMgdXJsLjxiYXNlPi5pbnN0ZWFkT2Yg6Kit5a6aIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjcyCittc2dpZCAiZXhpdCB3aXRoIGV4aXQgY29kZSAyIGlmIG5vIG1hdGNoaW5nIHJlZnMgYXJlIGZvdW5kIgorbXNnc3RyICLoi6XmnKrmib7liLDnrKblkIjnmoTlvJXnlKjliYfku6Xpm6Lplovnorwy6Zui6ZaLIgorCisjOiBidWlsdGluL2xzLXJlbW90ZS5jOjc1Cittc2dpZCAic2hvdyB1bmRlcmx5aW5nIHJlZiBpbiBhZGRpdGlvbiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgYnkgaXQiCittc2dzdHIgIumZpOS6humhr+ekuuaMh+WQkeeahOeJqeS7tuWklu+8jOmhr+ekuuaMh+WQkeeahOW8leeUqOWQjSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MzAKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPOmBuOmghT5dIDzmqLnmiJbmj5DkuqQ+IFs86Lev5b6RPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOAorbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAi5Y+q6aGv56S65qi5IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzAKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIumBnui/tOWIsOWtkOaouSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMyCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAi55W26YGe6L+05pmC6aGv56S65qi5IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLmop3nm67ku6UgTlVMIOWtl+WFg+e1guatoiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM2Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi5YyF5ous54mp5Lu25aSn5bCPIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzggYnVpbHRpbi9scy10cmVlLmM6MTQwCittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAi5Y+q5YiX5Ye65qqU5qGI5ZCNIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDMKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICLkvb/nlKjmqpTmoYjnmoTlhajot6/lvpEiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NQorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAi5YiX5Ye65pW05YCL5qi577yb5LiN5YOF5YOF55uu5YmN55uu6YyE77yI6Zqx5ZCrIC0tZnVsbC1uYW1l77yJIgorCisjOiBidWlsdGluL21haWxzcGxpdC5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSBtYm94OiAnJXMnIgorbXNnc3RyICLnqbrnmoQgbWJveO+8miclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzzpgbjpoIU+XSBbPOaPkOS6pD4uLi5dIgorCisjOiBidWlsdGluL21lcmdlLmM6NTYKK21zZ2lkICJnaXQgbWVyZ2UgLS1hYm9ydCIKK21zZ3N0ciAiZ2l0IG1lcmdlIC0tYWJvcnQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1NworbXNnaWQgImdpdCBtZXJnZSAtLWNvbnRpbnVlIgorbXNnc3RyICJnaXQgbWVyZ2UgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExOAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAi6ZaL6ZecIGBtJyDpnIDopoHkuIDlgIvlgLwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAi6YG46aCFIGAlcycg6ZyA6KaB5LiA5YCL5YC8IgorCisjOiBidWlsdGluL21lcmdlLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIuS4jeiDveaJvuWIsOWQiOS9teetlueVpSAnJXMn44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi5Y+v55So55qE562W55Wl5pyJ77yaIgorCisjOiBidWlsdGluL21lcmdlLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLlj6/nlKjnmoToh6roqILnrZbnlaXmnInvvJoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDQgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi5Zyo5ZCI5L2155qE5pyA5b6M5LiN6aGv56S65beu55Ww57Wx6KiIIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ3IGJ1aWx0aW4vcHVsbC5jOjE1NQorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi5Zyo5ZCI5L2155qE5pyA5b6M6aGv56S65beu55Ww57Wx6KiIIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ4IGJ1aWx0aW4vcHVsbC5jOjE1OAorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIu+8iOWSjCAtLXN0YXQg5ZCM576p77yJIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUwIGJ1aWx0aW4vcHVsbC5jOjE2MQorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5Zyo5ZCI5L215o+Q5Lqk6KiK5oGv5Lit5paw5aKe77yI5pyA5aSaIDxuPiDmop3vvInnsr7nsKHmj5DkuqToqJjpjIQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTMgYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgIuW7uueri+S4gOWAi+WWrueNqOeahOaPkOS6pOiAjOS4jeaYr+WBmuS4gOasoeWQiOS9tSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NSBidWlsdGluL3B1bGwuYzoxNzAKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgIuWmguaenOWQiOS9teaIkOWKn++8jOWft+ihjOS4gOasoeaPkOS6pO+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NyBidWlsdGluL3B1bGwuYzoxNzMKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgIuWcqOaPkOS6pOWJjee3qOi8r+aPkOS6pOiqquaYjiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1OQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgIuWFgeioseW/q+i9ie+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MSBidWlsdGluL3B1bGwuYzoxODAKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICLlpoLmnpzkuI3og73lv6vovYnlsLHmlL7mo4TlkIjkvbUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjUgYnVpbHRpbi9wdWxsLmM6MTgzCittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLpqZforYnmjIflrprnmoTmj5DkuqTmmK/lkKbljIXlkKvkuIDlgIvmnInmlYjnmoQgR1BHIOewveWQjSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NiBidWlsdGluL25vdGVzLmM6Nzg3IGJ1aWx0aW4vcHVsbC5jOjE4NworIzogYnVpbHRpbi9yZWJhc2UuYzo1MTIgYnVpbHRpbi9yZWJhc2UuYzoxNTMxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTE0Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgIuetlueVpSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2NyBidWlsdGluL3B1bGwuYzoxODgKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgIuimgeS9v+eUqOeahOWQiOS9teetlueVpSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OCBidWlsdGluL3B1bGwuYzoxOTEKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIm9wdGlvbj12YWx1ZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2OSBidWlsdGluL3B1bGwuYzoxOTIKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLmiYDpgbjnmoTlkIjkvbXnrZbnlaXnmoTpgbjpoIUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNzEKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIuWQiOS9teeahOaPkOS6pOiqquaYju+8iOmHneWwjemdnuW/q+i9ieW8j+WQiOS9te+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI3OAorbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLmlL7mo4Tnm67liY3mraPlnKjpgLLooYznmoTlkIjkvbUiCisKKyMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODAKK21zZ2lkICItLWFib3J0IGJ1dCBsZWF2ZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIGFsb25lIgorbXNnc3RyICItLWFib3J077yM5L2G5piv5L+d55WZ57Si5byV5ZKM5bel5L2c5Y2AIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgyCittc2dpZCAiY29udGludWUgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIue5vOe6jOebruWJjeato+WcqOmAsuihjOeahOWQiOS9tSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4NCBidWlsdGluL3B1bGwuYzoxOTkKK21zZ2lkICJhbGxvdyBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIuWFgeioseWQiOS4puS4jeebuOmXnOeahOatt+WPsiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI5MAorbXNnaWQgImJ5cGFzcyBwcmUtbWVyZ2UtY29tbWl0IGFuZCBjb21taXQtbXNnIGhvb2tzIgorbXNnc3RyICLnuZ7pgY4gcHJlLW1lcmdlLWNvbW1pdCDlkowgY29tbWl0LW1zZyDmjpvpiaQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMDcKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAi5LiN6IO95Z+36KGM5YSy6JeP44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MzEyCittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICLlhLLol4/lpLHmlZciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5YCL5pyJ5pWI54mp5Lu277yaJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMzkgYnVpbHRpbi9tZXJnZS5jOjM1NgorbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgIuiugOWPluaoueWkseaVlyIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBidWlsdGluL21lcmdlLmM6Mzg2Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiDvvIjnhKHlj6/lo5PnuK7vvIkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLlo5PnuK7mj5DkuqQgLS0g5pyq5pu05pawIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIueEoeWQiOS9teioiuaBryAtLSDmnKrmm7TmlrAgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycg5rKS5pyJ5oyH5ZCR5LiA5YCL5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIuWjnueahCBicmFuY2guJXMubWVyZ2VvcHRpb25zIOWtl+S4su+8miVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzA1Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAi5pyq6JmV55CG5YWp5YCL6aCt5ZCI5L215LmL5aSW55qE5Lu75L2V5YuV5L2c44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgIm1lcmdlLXJlY3Vyc2l2ZSDnmoTmnKrnn6XpgbjpoIXvvJotWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAi5LiN6IO95a+rICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAi5LiN6IO95b6eICclcycg6K6A5Y+WIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAi5pyq5o+Q5Lqk5ZCI5Lim77yM5L2/55SoICdnaXQgY29tbWl0JyDlrozmiJDmraTmrKHlkIjkvbXjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwMQorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCittc2dzdHIgIiIKKyLoq4vovLjlhaXkuIDlgIvmj5DkuqToqIrmga/ku6Xop6Pph4vmraTlkIjkvbXnmoTlv4XopoHmgKfvvIzlsKTlhbbmmK/lsIfkuIDlgIvmm7TmlrDlvoznmoTkuIrmuLjliIbmlK9cbiIKKyLlkIjkvbXliLDkuLvpoYzliIbmlK/jgIJcbiIKKyJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgwNgorbXNnaWQgIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIuepuueahOaPkOS6pOiqquaYjuacg+e1guatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICLku6UgJyVjJyDplovlp4vnmoTooYzlsIfooqvlv73nlaXvvIzogIznqbrnmoTmj5DkuqToqqrmmI7lsIfntYLmraLmj5DkuqTjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg2MgorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAi56m65o+Q5Lqk6KiK5oGv44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAi5aSq5qOS5LqG44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAi6Ieq5YuV5ZCI5L215aSx5pWX77yM5L+u5q2j6KGd56qB54S25b6M5o+Q5Lqk5L+u5q2j55qE57WQ5p6c44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzcKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuaykuacieebruWJjeWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk3OQorbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi55uu5YmN5YiG5pSv5rKS5pyJ5bCN5oeJ55qE6YGg56uv54mI5pys5bqr44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6OTgxCittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLnm67liY3liIbmlK/mspLmnInlrprnvqnpoJDoqK3nmoTkuIrmuLjliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAi5bCN5pa8ICVzIOaykuacieS+huiHqiAlcyDnmoTpgaDnq6/ov73ouaTliIbmlK8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciCittc2dzdHIgIueSsOWigyAnJTIkcycg5Lit5a2Y5Zyo5aOe55qE5Y+W5YC8ICclMSRzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjExNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UgaW4gJXM6ICVzIgorbXNnc3RyICLkuI3og73lnKggJXMg5Lit5ZCI5L2177yaJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTgwCittc2dpZCAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIuS4jeiDveWQiOS9tSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODMKK21zZ2lkICItLWFib3J0IGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWFib3J0IOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyODcKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuaykuacieimgee1guatoueahOWQiOS9te+8iE1FUkdFX0hFQUQg6YG65aSx77yJ44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5NgorbXNnaWQgIi0tcXVpdCBleHBlY3RzIG5vIGFyZ3VtZW50cyIKK21zZ3N0ciAiLS1xdWl0IOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMDkKK21zZ2lkICItLWNvbnRpbnVlIGV4cGVjdHMgbm8gYXJndW1lbnRzIgorbXNnc3RyICItLWNvbnRpbnVlIOS4jeW4tuWPg+aVuCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMTMKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSBpbiBwcm9ncmVzcyAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuaykuaciemAsuihjOS4reeahOWQiOS9te+8iE1FUkdFX0hFQUQg6YG65aSx77yJ44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMyOQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLmgqjlsJrmnKrntZDmnZ/mgqjnmoTlkIjkvbXvvIjlrZjlnKggTUVSR0VfSEVBRO+8ieOAglxuIgorIuiri+WcqOWQiOS9teWJjeWFiOaPkOS6pOaCqOeahOS/ruaUueOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo5bCa5pyq57WQ5p2f5oKo55qE5o+A6YG477yI5a2Y5ZyoIENIRVJSWV9QSUNLX0hFQUTvvInjgIJcbiIKKyLoq4vlnKjlkIjkvbXliY3lhYjmj5DkuqTmgqjnmoTkv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrntZDmnZ/mgqjnmoTmj4DpgbjvvIjlrZjlnKggQ0hFUlJZX1BJQ0tfSEVBRO+8ieOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAi5oKo5LiN6IO95bCHIC0tc3F1YXNoIOWSjCAtLW5vLWZmIOe1hOWQiOS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNTUKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLWNvbW1pdC4iCittc2dzdHIgIuaCqOS4jeiDveWwhyAtLXNxdWFzaCDlkowgLS1jb21taXQg57WE5ZCI5L2/55So44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3MQorbXNnaWQgIk5vIGNvbW1pdCBzcGVjaWZpZWQgYW5kIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIG5vdCBzZXQuIgorbXNnc3RyICLmnKrmjIflrprmj5DkuqTkuKbkuJQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0g5pyq6Kit5a6a44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM4OAorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICLlsJrkuI3mlK/mj7TliLDnqbrliIbmlK/nmoTlo5PnuK7mj5DkuqQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzkwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIuWIsOepuuWIhuaUr+eahOmdnuW/q+i9ieW8j+aPkOS6pOaykuacieaEj+e+qSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSDkuI3og73ooqvlkIjkvbUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzk3Cittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAi5Y+q6IO95bCH5LiA5YCL5o+Q5Lqk5ZCI5Lim5Yiw56m65YiG5pSv5LiKIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ3NgorbXNnaWQgInJlZnVzaW5nIHRvIG1lcmdlIHVucmVsYXRlZCBoaXN0b3JpZXMiCittc2dzdHIgIuaLkue1leWQiOS9teeEoemXnOeahOatt+WPsiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0ODUKK21zZ2lkICJBbHJlYWR5IHVwIHRvIGRhdGUuIgorbXNnc3RyICLlt7LntpPmmK/mnIDmlrDnmoTjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICLmm7TmlrAgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICLlmJfoqabpnZ7luLjlsI/nmoTntKLlvJXlhaflkIjkvbUuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAi54Sh44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTY5Cittc2dpZCAiQWxyZWFkeSB1cCB0byBkYXRlLiBZZWVhaCEiCittc2dzdHIgIuW3sue2k+aYr+acgOaWsOeahOOAguiAtu+8gSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1NzUKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIueEoeazleW/q+i9ie+8jOe1guatouOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTggYnVpbHRpbi9tZXJnZS5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIuWwh+aoueWbnua7vuiHs+WOn+Wni+eLgOaFiy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwMgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAi5ZiX6Kmm5ZCI5L21562W55WlICVzLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLmspLmnInlkIjkvbXnrZbnlaXomZXnkIbmraTlkIjkvbXjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIuS9v+eUqOetlueVpSAlcyDlkIjkvbXlpLHmlZfjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIuS9v+eUqCAlcyDku6XmupblgpnmiYvli5Xop6PmsbrjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAi6Ieq5YuV5ZCI5L216YCy5bGV6aCG5Yip77yM5oyJ6KaB5rGC5Zyo5o+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+aqlOahiDIg6Kit5a6a5qiZ57GkIgorCisjOiBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uICVzIgorbXNnc3RyICLmnKrnn6XpgbjpoIUgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICLkuI3og73op6PmnpDnianku7YgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlLiBJZ25vcmluZyAlcy4iCittc2dpZF9wbHVyYWwgImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIGJhc2VzLiBJZ25vcmluZyAlcy4iCittc2dzdHJbMF0gIueEoeazleiZleeQhiAlZCDmop3ku6XkuIrnmoTln7rnpI7jgILlv73nlaUgJXPjgIIiCittc2dzdHJbMV0gIueEoeazleiZleeQhiAlZCDmop3ku6XkuIrnmoTln7rnpI7jgILlv73nlaUgJXPjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NjUKK21zZ2lkICJub3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLkuI3og73omZXnkIblhanlgIvpoK3lkIjkvbXkuYvlpJbnmoTku7vkvZXli5XkvZzjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6NzQgYnVpbHRpbi9tZXJnZS1yZWN1cnNpdmUuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVzb2x2ZSByZWYgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6Q5byV55SoICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyB3aXRoICVzXG4iCittc2dzdHIgIuWQiOS9tSAlcyDlkowgJXNcbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NgorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTU0Cittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIui8uOWFpeS7pSBOVUwg5a2X5YWD57WC5q2iIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi5YWB6Kix6YG65aSx55qE54mp5Lu2IgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1NgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAi5YWB6Kix5bu656uL5LiA5YCL5Lul5LiK55qE5qi5IgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo5CisjfCBtc2dpZCAiIgorI3wgImdpdCBtdWx0aS1wYWNrLWluZGV4IFstLW9iamVjdC1kaXI9PGRpcj5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLSIKKyN8ICJiYXRjaC1zaXplPTxzaXplPikiCittc2dpZCAiIgorImdpdCBtdWx0aS1wYWNrLWluZGV4IFs8b3B0aW9ucz5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTxzaXplPikiCittc2dzdHIgIiIKKyJnaXQgbXVsdGktcGFjay1pbmRleCBbPOmBuOmghT5dICh3cml0ZXx2ZXJpZnl8ZXhwaXJlfHJlcGFjayAtLWJhdGNoLSIKKyJzaXplPTzlpKflsI8+KSIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6MjYKK21zZ2lkICJvYmplY3QgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2V0IG9mIHBhY2tmaWxlIGFuZCBwYWNrLWluZGV4IHBhaXJzIgorbXNnc3RyICLljIXlkKvmiJDlsI0gcGFja2ZpbGUg5ZKM5YyF57Si5byV55qE54mp5Lu255uu6YyEIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzoyOQorbXNnaWQgIiIKKyJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzICIKKyJsYXJnZXIgdGhhbiB0aGlzIHNpemUiCittc2dzdHIgIuWcqCByZXBhY2sg5pyf6ZaT77yM5bCH6LyD5bCP5bC65a+455qE5YyF5qqU5qGI5pS26ZuG5Yiw5aSn5pa85q2k5aSn5bCP55qE5om55qyh5LitIgorCisjOiBidWlsdGluL211bHRpLXBhY2staW5kZXguYzo1MCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjY3Cittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIgorbXNnc3RyICLlpKrlpJrlj4PmlbgiCisKKyM6IGJ1aWx0aW4vbXVsdGktcGFjay1pbmRleC5jOjYwCittc2dpZCAiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIgorbXNnc3RyICItLWJhdGNoLXNpemUg6YG46aCF5YOF55So5pa8ICdyZXBhY2snIOWtkOaMh+S7pCIKKworIzogYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLmnKrorZjliKXnmoTlrZDmjIfku6TvvJolcyIKKworIzogYnVpbHRpbi9tdi5jOjE4Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPOmBuOmghT5dIDzmupA+Li4uIDznm67mqJk+IgorCisjOiBidWlsdGluL212LmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICLnm67pjIQgJXMg5Zyo57Si5byV5Lit5Lim5LiU5LiN5piv5a2Q5qih57WE77yfIgorCisjOiBidWlsdGluL212LmM6ODUKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAi6KuL5bCH5oKo55qE5L+u5pS55pqr5a2Y5YiwIC5naXRtb2R1bGVzIOS4reaIluWEsuiXj+W+jOWGjee5vOe6jCIKKworIzogYnVpbHRpbi9tdi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICIlLipzIOWcqOe0ouW8leS4rSIKKworIzogYnVpbHRpbi9tdi5jOjEyNQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi5by35Yi256e75YuVL+mHjeaMh+S7pO+8jOWNs+S9v+ebruaomeWtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjEyNworbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICLot7PpgY7np7vli5Uv6YeN5paw5ZG95ZCN6Yyv6KqkIgorCisjOiBidWlsdGluL212LmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICLnm67mqJkgJyVzJyDkuI3mmK/kuIDlgIvnm67pjIQiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICLmqqLmn6UgJyVzJyDliLAgJyVzJyDnmoTph43mlrDlkb3lkI1cbiIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIuWjnueahOa6kCIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIuS4jeiDveWwh+ebrumMhOenu+WLleWIsOiHqui6qyIKKworIzogYnVpbHRpbi9tdi5jOjE5MAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIuS4jeiDveWwh+ebrumMhOenu+WLleWIsOaqlOahiCIKKworIzogYnVpbHRpbi9tdi5jOjE5OQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIua6kOebrumMhOeCuuepuiIKKworIzogYnVpbHRpbi9tdi5jOjIyNAorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIuS4jeWcqOeJiOacrOaOp+WItuS5i+S4iyIKKworIzogYnVpbHRpbi9tdi5jOjIyNworbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAi55uu5qiZ5bey5a2Y5ZyoIgorCisjOiBidWlsdGluL212LmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIuimhuiTiyAnJXMnIgorCisjOiBidWlsdGluL212LmM6MjM4Cittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAi5LiN6IO96KaG6JOLIgorCisjOiBidWlsdGluL212LmM6MjQxCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLlkIzkuIDnm67mqJnlhbfmnInlpJrlgIvmupAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNDMKK21zZ2lkICJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuebruaomeebrumMhOS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXPvvIzmupA9JXPvvIznm67mqJk9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAi6YeN5paw5ZG95ZCNICVzIOiHsyAlc1xuIgorCisjOiBidWlsdGluL212LmM6Mjc3IGJ1aWx0aW4vcmVtb3RlLmM6NzE2IGJ1aWx0aW4vcmVwYWNrLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICLph43mlrDlkb3lkI0gJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0MDMKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPOmBuOmghT5dIDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDA0Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgbjpoIU+XSAtLWFsbCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQwNQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgbjpoIU+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDYyCittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICLlj6rliJfljbDlkI3nqLHvvIjnhKEgU0hBLTHvvIkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NjMKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgIuWPquS9v+eUqOaomeexpOS+huWRveWQjeaPkOS6pCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjQ2NQorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlj6rkvb/nlKjlkowgPOaooeW8jz4g55u456ym5ZCI55qE5byV55SoIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY3Cittc2dpZCAiaWdub3JlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLlv73nlaXlkowgPOaooeW8jz4g55u456ym5ZCI55qE5byV55SoIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDY5Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAi5YiX5Ye65Y+v5Lul5b6e5omA5pyJ5byV55So5a2Y5Y+W55qE5o+Q5LqkIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6NDcwCittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLlvp7mqJnmupbovLjlhaXoroDlj5YiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzEKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgIuWFgeioseWIl+WNsCBg5pyq5a6a576pYCDnmoTlkI3nqLHvvIjpoJDoqK3vvIkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzo0NzcKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAi5Y+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/nlKjoqLvop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDM0IGJ1aWx0aW4vc3Rhc2guYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIuacquefpeWtkOaMh+S7pO+8miVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUyCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzzpgbjpoIU+Li4uXSBbPCA85byV55So5YiX6KGoPiB8IDwgPOeJqeS7tuWIl+ihqD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjUzCittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgWzzpgbjpoIU+Li4uXSA85YmN57a05ZCN56ixPiBbPCA85byV55So5YiX6KGoPiB8IDwgPOeJqeS7tuWIl+ihqD5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIgorbXNnc3RyICIlcyDpjK/nmoTljIXnianku7YgQ1JDIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhY2tlZCBvYmplY3QgZm9yICVzIgorbXNnc3RyICIlcyDmkI3lo57nmoTljIXnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlY3Vyc2l2ZSBkZWx0YSBkZXRlY3RlZCBmb3Igb2JqZWN0ICVzIgorbXNnc3RyICLnmbznj77nianku7YgJXMg6YGe6L+0IGRlbHRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICU8UFJJdTMyPiIKK21zZ3N0ciAi5o6S5bqP5LqGICV1IOWAi+eJqeS7tu+8jOmgkOacnyAlPFBSSXUzMj4g5YCLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBpcyBpbnZhbGlkOiAlcyIKK21zZ3N0ciAi54Sh5pWI55qEIHBhY2tmaWxl77yaJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiCittc2dzdHIgIueEoeazleeCuumHjeeUqOmWi+WVnyBwYWNrZmlsZe+8miVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjgwMgorbXNnaWQgInVuYWJsZSB0byBzZWVrIGluIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAi54Sh5rOV5Zyo6YeN55So55qEIHBhY2tmaWxlIOS4reWwi+aJviIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4MTMKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBmcm9tIHJldXNlZCBwYWNrZmlsZSIKK21zZ3N0ciAi54Sh5rOV5b6e5b6p55So55qEIHBhY2tmaWxlIOS4reiugOWPliIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo4NDEKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIHBhY2tzIGFyZSBzcGxpdCBkdWUgdG8gcGFjay5wYWNrU2l6ZUxpbWl0IgorbXNnc3RyICLnpoHnlKggYml0bWFwIOWvq+WFpe+8jOWboOeCuiBwYWNrLnBhY2tTaXplTGltaXQg6Kit5a6a5L2/5b6X5YyF6KKr5YiH5YiG54K65aSa5YCLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjg1NAorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5a+r5YWl54mp5Lu25LitIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjkxNyBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICLlsI0gJXMg5ZG85Y+rIHN0YXQg5aSx5pWXIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm90ZSAlPFBSSXUzMj4gb2JqZWN0cyB3aGlsZSBleHBlY3RpbmcgJTxQUkl1MzI+IgorbXNnc3RyICLlr6vlhaUgJTxQUkl1MzI+IOWAi+eJqeS7tuiAjOmgkOacnyAlPFBSSXUzMj4g5YCLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjExNjQKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAi56aB55SoIGJpdG1hcCDlr6vlhaXvvIzlm6DngrrkuIDkupvnianku7blsIfkuI3mnIPooqvmiZPljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIKK21zZ3N0ciAiJXMg5aOT57iu5LitIGRlbHRhIOWfuua6luS9jeenu+i2iueVjCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNjAxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiCittc2dzdHIgIiVzIOeahCBkZWx0YSDln7rmupbkvY3np7votornlYwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTg3MAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIueJqeS7tuioiOaVuOS4rSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBnZXQgc2l6ZSBvZiAlcyIKK21zZ3N0ciAi5LiN6IO95b6X5YiwICVzIOeahOWkp+WwjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMDE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3QgaGVhZGVyIG9mICVzIgorbXNnc3RyICLnhKHms5Xop6PmnpDnianku7YgJXMg5qiZ6aCt6KiK5oGvIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTAxCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIgorbXNnc3RyICLnianku7YgJXMg54Sh5rOV6K6A5Y+WIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIwODggYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aCAoJTxQUkl1TUFYPiB2cyAlPFBSSXVNQVg+KSIKK21zZ3N0ciAi54mp5Lu2ICVzIOS4jeS4gOiHtOeahOeJqeS7tumVt+W6pu+8iCU8UFJJdU1BWD4gdnMgJTxQUkl1TUFYPu+8iSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTI1Cittc2dpZCAic3Vib3B0aW1hbCBwYWNrIC0gb3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAi5qyh5YSq77yIc3Vib3B0aW1hbO+8ieaJk+WMhSAtIOiomOaGtumrlOS4jei2syIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbHRhIGNvbXByZXNzaW9uIHVzaW5nIHVwIHRvICVkIHRocmVhZHMiCittc2dzdHIgIuS9v+eUqCAlZCDlgIvln7fooYznt5LpgLLooYzlo5PnuK4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFjayBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRhZyAlcyIKK21zZ3N0ciAi54Sh5rOV54K65qiZ57GkICVzIOWjk+e4rueJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU5Cittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi5aOT57iu54mp5Lu25LitIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjUKK21zZ2lkICJpbmNvbnNpc3RlbmN5IHdpdGggZGVsdGEgY291bnQiCittc2dzdHIgIuS4jeS4gOiHtOeahOW3rueVsOioiOaVuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBlZGdlIG9iamVjdCBJRCwgZ290IGdhcmJhZ2U6XG4iCisiICVzIgorbXNnc3RyICIiCisi6aCQ5pyf6YKK55WM54mp5Lu277yIZWRnZSBvYmplY3TvvIlJRO+8jOWNu+W+l+WIsOWeg+Wcvuizh+aWme+8mlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJleHBlY3RlZCBvYmplY3QgSUQsIGdvdCBnYXJiYWdlOlxuIgorIiAlcyIKK21zZ3N0ciAiIgorIumgkOacn+eJqeS7tiBJRO+8jOWNu+W+l+WIsOWeg+Wcvuizh+aWme+8mlxuIgorIiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyODQ2Cittc2dpZCAiaW52YWxpZCB2YWx1ZSBmb3IgLS1taXNzaW5nIgorbXNnc3RyICLpgbjpoIUgLS1taXNzaW5nIOeahOWAvOeEoeaViCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTA1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAxMworbXNnaWQgImNhbm5vdCBvcGVuIHBhY2sgaW5kZXgiCittc2dzdHIgIueEoeazlemWi+WVn+WMheaqlOahiOe0ouW8lSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvb3NlIG9iamVjdCBhdCAlcyBjb3VsZCBub3QgYmUgZXhhbWluZWQiCittc2dzdHIgIueEoeazleaqouafpSAlcyDomZXnmoTprIbmlaPnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzAyMQorbXNnaWQgInVuYWJsZSB0byBmb3JjZSBsb29zZSBvYmplY3QiCittc2dzdHIgIueEoeazleW8t+WItumshuaVo+eJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHJldiAnJXMnIgorbXNnc3RyICLkuI3mmK/kuIDlgIvniYjmnKwgJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTE2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiAnJXMnIgorbXNnc3RyICLlo57nmoTniYjmnKwgJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMTQxCittc2dpZCAidW5hYmxlIHRvIGFkZCByZWNlbnQgb2JqZWN0cyIKK21zZ3N0ciAi54Sh5rOV5paw5aKe5pyA6L+R55qE54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAi5LiN5pSv5o+055qE57Si5byV54mI5pysICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAi5aOe55qE57Si5byV54mI5pysICclcyciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzIzNgorbXNnaWQgIjx2ZXJzaW9uPlssPG9mZnNldD5dIgorbXNnc3RyICI854mI5pysPlssPOS9jeenuz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyMzcKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICLnlKjmjIflrprnmoQgaWR4IOagvOW8j+eJiOacrOS+huWvq+WMhee0ouW8leaqlOahiCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQwCittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAi5q+P5YCL6Ly45Ye65YyF55qE5pyA5aSn5bC65a+4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNDIKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgIuW/veeVpeW+nuWCmeeUqOeJqeS7tuWEsuWtmOijoeWAn+eUqOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ0Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLlv73nlaXljIXnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI0NgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgIumZkOWItuaJk+WMheimlueql+eahOeJqeS7tuaVuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjQ4Cittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAi6Zmk54mp5Lu25pW46YeP6ZmQ5Yi25aSW6Kit5a6a5omT5YyF6KaW56qX55qE6KiY5oa26auU6ZmQ5Yi2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTAKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAi5omT5YyF5YWB6Kix55qEIGRlbHRhIOmPiOeahOacgOWkp+mVt+W6piIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjUyCittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICLph43nlKjlt7LlrZjlnKjnmoQgZGVsdGFzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNTQKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICLph43nlKjlt7LlrZjlnKjnmoTnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1NgorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAi5L2/55SoIE9GU19ERUxUQSDnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI1OAorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgIuS9v+eUqOWft+ihjOe3kuafpeipouacgOS9syBkZWx0YSDnrKblkIgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI2MAorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgIuS4jeW7uueri+epuueahOWMhei8uOWHuiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjYyCittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5b6e5qiZ5rqW6Ly45YWl6K6A5Y+W54mI5pys6Jmf5Y+D5pW4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjQKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAi6ZmQ5Yi26YKj5Lqb5bCa5pyq5omT5YyF55qE54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNjcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAi5YyF5ous5Y+v5Lul5b6e5Lu75L2V5byV55So5a2Y5Y+W5Yiw55qE54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzAKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgIuWMheaLrOiiq+W8leeUqOaXpeiqjOW8leeUqOWIsOeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjczCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAi5YyF5ous6KKr57Si5byV5byV55So5Yiw55qE54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyNzYKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgIui8uOWHuuWMheWIsOaomea6lui8uOWHuiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjc4Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICLljIXmi6zpgqPkupvlvJXnlKjkuoblvoXmiZPljIXnianku7bnmoTmqJnnsaTnianku7YiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4MAorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi57at5oyB54Sh5rOV5Y+W5b6X55qE54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMyODIKK21zZ2lkICJwYWNrIGxvb3NlIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIuaJk+WMhemshuaVo+eahOeEoeazleWPluW+l+eJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg0Cittc2dpZCAidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIuWwh+avlOaPkOS+myA85pmC6ZaTPiDmlrDnmoTnhKHms5XlrZjlj5bnmoTnianku7bop6PljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI4NworbXNnaWQgInVzZSB0aGUgc3BhcnNlIHJlYWNoYWJpbGl0eSBhbGdvcml0aG0iCittc2dzdHIgIuS9v+eUqOeogOeWj+WPr+S7peWPluW+l+aAp+a8lOeul+azlSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjg5Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgIuW7uueri+eyvuewoeWMhSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkxCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgIuW7uueri+mBqeWQiOa3uuikh+ijveeJiOacrOW6q+WPluW+l+eahOWMhSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjkzCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAi5b+955Wl6YWN5pyJIC5rZWVwIOaqlOahiOeahOWMhSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk1Cittc2dpZCAiaWdub3JlIHRoaXMgcGFjayIKK21zZ3N0ciAi5b+955Wl6KmyIHBhY2siCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzI5NworbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIuaJk+WMheWjk+e4rue0muWIpSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMjk5Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIumhr+ekuuiiq+enu+akjemaseiXj+eahOaPkOS6pCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAxCittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLkvb/nlKggYml0bWFwIOe0ouW8le+8iOWmguaenOacieeahOipse+8ieS7peaPkOmrmOeJqeS7tuioiOaVuOaZgueahOmAn+W6piIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzAzCittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAi5Zyo5bu656uL5YyF57Si5byV55qE5ZCM5pmC5bu656uLIGJpdG1hcCDntKLlvJUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzMwNworbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IGlmIHBvc3NpYmxlIgorbXNnc3RyICLlpoLmnpzlj6/og73vvIzlr6sgYml0bWFwIOe0ouW8lSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzExCittc2dpZCAiaGFuZGxpbmcgZm9yIG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi6JmV55CG6YG65aSx55qE54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzMTQKK21zZ2lkICJkbyBub3QgcGFjayBvYmplY3RzIGluIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAi5LiN6KaB5omT5YyFIHByb21pc29yIHBhY2tmaWxlIOS4reeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozMzE2Cittc2dpZCAicmVzcGVjdCBpc2xhbmRzIGR1cmluZyBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAi5Zyo5aKe6YeP5aOT57iu5pmC5Y+D6ICD6LOH5paZ5bO2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjMzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsdGEgY2hhaW4gZGVwdGggJWQgaXMgdG9vIGRlZXAsIGZvcmNpbmcgJWQiCittc2dzdHIgIuWinumHj+mPiOa3seW6piAlZCDlpKrmt7HkuobvvIzlvLfliLbngrogJWQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrLmRlbHRhQ2FjaGVMaW1pdCBpcyB0b28gaGlnaCwgZm9yY2luZyAlZCIKK21zZ3N0ciAi6Kit5a6aIHBhY2suZGVsdGFDYWNoZUxpbWl0IOWkqumrmOS6hu+8jOW8t+WItueCuiAlZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDA0Cittc2dpZCAiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIiCittc2dzdHIgIuS4jeiDveS9v+eUqCAtLW1heC1wYWNrLXNpemUg5L6G5qeL5bu65YKz6Ly455So55qE5YyF5qqU5qGIIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MDYKK21zZ2lkICJtaW5pbXVtIHBhY2sgc2l6ZSBsaW1pdCBpcyAxIE1pQiIKK21zZ3N0ciAi5pyA5bCP55qE5YyF5qqU5qGI5aSn5bCP5pivIDEgTWlCIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM0MTEKK21zZ2lkICItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2siCittc2dzdHIgIi0tdGhpbiDkuI3og73nlKjmlrzlu7rnq4vkuIDlgIvlj6/ntKLlvJXljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQxNAorbXNnaWQgIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1rZWVwLXVucmVhY2hhYmxlIOWSjCAtLXVucGFjay11bnJlYWNoYWJsZSDkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MzQyMAorbXNnaWQgImNhbm5vdCB1c2UgLS1maWx0ZXIgd2l0aG91dCAtLXN0ZG91dCIKK21zZ3N0ciAi5LiN6IO95Zyo5rKS5pyJIC0tc3Rkb3V0IOeahOaDheazgeS4i+S9v+eUqCAtLWZpbHRlciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzozNDgxCittc2dpZCAiRW51bWVyYXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5p6a6IiJ54mp5Lu2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjM1MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG90YWwgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pLCByZXVzZWQgJTxQUkl1MzI+IChkZWx0YSAlPFBSSXUzMj4pIgorbXNnc3RyICLnuL3lhbEgJTxQUkl1MzI+IO+8iOW3rueVsCAlPFBSSXUzMj7vvInvvIzlvqnnlKggJTxQUkl1MzI+IO+8iOW3rueVsCAlPFBSSXUzMj7vvIkiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6OAorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBwYWNrLXJlZnMgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNgorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi5omT5YyF5LiA5YiHIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE3Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIua4hemZpOmshuaVo+eahOW8leeUqO+8iOmgkOiore+8iSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo5Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDIKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAi5q2j5Zyo5Yiq6Zmk6YeN6KSH54mp5Lu2IgorCisjOiBidWlsdGluL3BydW5lLmM6MTIKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLXByb2dyZXNzXSBbLS1leHBpcmUgPOaZgumWkz5dIFstLV0gWzxoZWFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzEKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgIuWgseWRiua4hemZpOeahOeJqeS7tiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEzNAorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLkvb/ml6nmlrzmj5DkvpvmmYLplpPnmoTnianku7bpgY7mnJ8iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMzYKK21zZ2lkICJsaW1pdCB0cmF2ZXJzYWwgdG8gb2JqZWN0cyBvdXRzaWRlIHByb21pc29yIHBhY2tmaWxlcyIKK21zZ3N0ciAi6ZmQ5Yi26YGN5q23IHByb21pc29yIHBhY2tmaWxlIOS7peWklueahOeJqeS7tiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjE1MAorbXNnaWQgImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIKK21zZ3N0ciAi5LiN6IO95Zyo54+N5ZOB54mI5pys5bqr5Lit5Z+36KGM5riF55CG5YuV5L2cIgorCisjOiBidWlsdGluL3B1bGwuYzo2NiBidWlsdGluL3B1bGwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiVzIOeahOWAvOeEoeaViO+8miVzIgorCisjOiBidWlsdGluL3B1bGwuYzo4OAorbXNnaWQgImdpdCBwdWxsIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPOmBuOmghT5dIFs854mI5pys5bqrPiBbPOW8leeUqOimj+agvD4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQyCittc2dpZCAiY29udHJvbCBmb3IgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIuaOp+WItuWtkOaooee1hOeahOmBnui/tOWPluW+lyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ2Cittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIuWSjOWQiOS9teebuOmXnOeahOmBuOmghSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ5Cittc2dpZCAiaW5jb3Jwb3JhdGUgY2hhbmdlcyBieSByZWJhc2luZyByYXRoZXIgdGhhbiBtZXJnaW5nIgorbXNnc3RyICLkvb/nlKjph43lrprln7rlupXli5XkvZzlj5bku6PlkIjkvbXli5XkvZzku6XlpZfnlKjkv67mlLkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE3NyBidWlsdGluL3JlYmFzZS5jOjQ2NyBidWlsdGluL3JldmVydC5jOjEyNgorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi5YWB6Kix5b+r6L2J5byPIgorCisjOiBidWlsdGluL3B1bGwuYzoxODYKK21zZ2lkICJhdXRvbWF0aWNhbGx5IHN0YXNoL3N0YXNoIHBvcCBiZWZvcmUgYW5kIGFmdGVyIHJlYmFzZSIKK21zZ3N0ciAi6YeN5a6a5Z+65bqV5YuV5L2c5YmN5b6M5Z+36KGM6Ieq5YuV5YSy6JeP5ZKM5b2I5Ye65YSy6JePIgorCisjOiBidWlsdGluL3B1bGwuYzoyMDIKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIuWSjOWPluW+l+ebuOmXnOeahOWPg+aVuCIKKworIzogYnVpbHRpbi9wdWxsLmM6MjEyCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAi5by35Yi26KaG6JOL5pys5qmf5YiG5pSvIgorCisjOiBidWlsdGluL3B1bGwuYzoyMjAKK21zZ2lkICJudW1iZXIgb2Ygc3VibW9kdWxlcyBwdWxsZWQgaW4gcGFyYWxsZWwiCittc2dzdHIgIuS4pueZvOaLieWPlueahOWtkOaooee1hOeahOaVuOmHjyIKKworIzogYnVpbHRpbi9wdWxsLmM6MzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJwdWxsLmZmIOeahOWPluWAvOeEoeaViO+8miVzIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzcKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICLlnKjmgqjliZvliZvlj5blvpfliLDnmoTlvJXnlKjkuK3mspLmnInph43lrprln7rlupXli5XkvZznmoTlgJnpgbjjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICLlnKjmgqjliZvliZvlj5blvpfliLDnmoTlvJXnlKjkuK3mspLmnInlkIjkvbXli5XkvZznmoTlgJnpgbjjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MAorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIumAmuW4uOmAmeaEj+WRs+iRl+aCqOaPkOS+m+S6huS4gOiQrOeUqOWtl+WFg+W8leeUqOimj+agvOS9huacquiDveWSjOmBoOerr+espuWQiOOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyLmgqjopoHmsYLlvp7pgaDnq68gJyVzJyDmi4nlj5bvvIzkvYbmmK/mnKrmjIflrprkuIDlgIvliIbmlK/jgILlm6DngrrpgJnkuI3mmK/nm67liY1cbiIKKyLliIbmlK/poJDoqK3nmoTpgaDnq6/niYjmnKzluqvvvIzmgqjlv4XpoIjlnKjmjIfku6TliJfkuK3mjIflrprkuIDlgIvliIbmlK/lkI3jgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0OCBidWlsdGluL3JlYmFzZS5jOjEzNzUgZ2l0LXBhcnNlLXJlbW90ZS5zaDo3MworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIuaCqOebruWJjeS4jeWcqOS4gOWAi+WIhuaUr+S4iuOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUwIGJ1aWx0aW4vcHVsbC5jOjQ2NSBnaXQtcGFyc2UtcmVtb3RlLnNoOjc5Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAi6KuL5oyH5a6a5oKo6KaB6YeN5a6a5Z+65bqV5Yiw5ZOq5LiA5YCL5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3IGdpdC1wYXJzZS1yZW1vdGUuc2g6ODIKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIuiri+aMh+WumuaCqOimgeWQiOS9teWTquS4gOWAi+WIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUzIGJ1aWx0aW4vcHVsbC5jOjQ2OAorbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIuips+imiyBnaXQtcHVsbCgxKeOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDU1IGJ1aWx0aW4vcHVsbC5jOjQ2MSBidWlsdGluL3B1bGwuYzo0NzAKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MSBnaXQtcGFyc2UtcmVtb3RlLnNoOjY0Cittc2dpZCAiPHJlbW90ZT4iCittc2dzdHIgIjzpgaDnq68+IgorCisjOiBidWlsdGluL3B1bGwuYzo0NTUgYnVpbHRpbi9wdWxsLmM6NDcwIGJ1aWx0aW4vcHVsbC5jOjQ3NQorIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo2NQorbXNnaWQgIjxicmFuY2g+IgorbXNnc3RyICI85YiG5pSvPiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYzIGJ1aWx0aW4vcmViYXNlLmM6MTM3MyBnaXQtcGFyc2UtcmVtb3RlLnNoOjc1Cittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuebruWJjeWIhuaUr+aykuaciei/vei5pOioiuaBr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDcyIGdpdC1wYXJzZS1yZW1vdGUuc2g6OTUKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6IgorbXNnc3RyICLlpoLmnpzmgqjmg7PopoHngrrmraTliIbmlK/lu7rnq4vov73ouaToqIrmga/vvIzmgqjlj6/ku6Xln7fooYzvvJoiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIuaCqOeahOioreWumuS4reaMh+WumuimgeWQiOS9temBoOerr+eahOW8leeUqCAnJXMn77yMXG4iCisi5L2G5piv5rKS5pyJ5Y+W5b6X5Yiw6YCZ5YCL5byV55So44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyBjb21taXQgJXMiCittc2dzdHIgIueEoeazleWtmOWPluaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6ODY3Cittc2dpZCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIgorbXNnc3RyICLngrrph43lrprln7rlupXli5XkvZzlv73nlaUgLS12ZXJpZnktc2lnbmF0dXJlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6OTIyCittc2dpZCAiLS1bbm8tXWF1dG9zdGFzaCBvcHRpb24gaXMgb25seSB2YWxpZCB3aXRoIC0tcmViYXNlLiIKK21zZ3N0ciAiLS1bbm8tXWF1dG9zdGFzaCDpgbjpoIXlj6rlnKjkvb/nlKggLS1yZWJhc2Ug5pmC5pyJ5pWI44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5MzAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICLmm7TmlrDlsJrmnKroqpXnlJ/nmoTliIbmlK/vvIzorormm7TmlrDlop7oh7PntKLlvJXjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjkzNAorbXNnaWQgInB1bGwgd2l0aCByZWJhc2UiCittc2dzdHIgIumHjeWumuWfuuW6leW8j+aLieWPliIKKworIzogYnVpbHRpbi9wdWxsLmM6OTM1Cittc2dpZCAicGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAi6KuL5o+Q5Lqk5oiW5YSy6JeP5a6D5YCR44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisiZmV0Y2gg5pu05paw5LqG55uu5YmN55qE5YiG5pSv44CC5b+r6L2J5oKo55qE5bel5L2c5Y2AXG4iCisi6Iez5o+Q5LqkICVz44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi5oKo55uu5YmN55qE5bel5L2c5Y2A54Sh5rOV5Z+36KGM5b+r6L2J5YuV5L2c44CCXG4iCisi6aaW5YWI5Z+36KGM5aaC5LiL5oyH5Luk77yaXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIuS7peeiuuiqjeaJgOacieacieeUqOeahOizh+aWmeWdh+W3suWEsuWtmOOAgueEtuW+jOWft+ihjOS4i+mdoueahOaMh+S7pFxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorIuW+qeWOn+S5i+WJjeeahOeLgOaFi+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTgxCittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIueEoeazleWwh+WkmuWAi+WIhuaUr+WQiOS9teWIsOepuuWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6OTg1Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAi54Sh5rOV6YeN5a6a5Z+65bqV5Yiw5aSa5YCL5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo5OTIKK21zZ2lkICJjYW5ub3QgcmViYXNlIHdpdGggbG9jYWxseSByZWNvcmRlZCBzdWJtb2R1bGUgbW9kaWZpY2F0aW9ucyIKK21zZ3N0ciAi5pys5qmf5a2Q5qih57WE5Lit5pyJ5L+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/oibIiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2CisjfCBtc2dpZCAibm90ZXMtcmVmIgorbXNnaWQgIm5vdGVzIgorbXNnc3RyICLoqLvop6MiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjI2CisjfCBtc2dpZCAicGFzc2VkIHRvICdnaXQgYW0nIgorbXNnaWQgInBhc3NlZCB0byAnZ2l0IGxvZyciCittc2dzdHIgIuWCs+mBnue1piAnZ2l0IGxvZyciCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjUwIGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIC4uIGluIHJhbmdlOiAnJXMnIgorbXNnc3RyICLmspLmnInlnKjnr4TlnI3kuK3kvb/nlKggLi7vvJonJXMnIgorCisjOiBidWlsdGluL3JhbmdlLWRpZmYuYzo2NAorbXNnaWQgInNpbmdsZSBhcmcgZm9ybWF0IG11c3QgYmUgc3ltbWV0cmljIHJhbmdlIgorbXNnc3RyICLllq7lgIvlj4PmlbjmoLzlvI/lv4XpoIjmmK/lsI3nqLHnr4TlnI3vvIjljbPljIXlkKsuLi7vvIkiCisKKyM6IGJ1aWx0aW4vcmFuZ2UtZGlmZi5jOjc5Cittc2dpZCAibmVlZCB0d28gY29tbWl0IHJhbmdlcyIKK21zZ3N0ciAi6ZyA6KaB5YWp5YCL5o+Q5Lqk56+E5ZyNIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjQxCittc2dpZCAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiCittc2dzdHIgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9POWJjee2tD4pIFstIgorInUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTzmqpTmoYg+XSAoLS1lbXB0eSB8IDzmqLnni4Dnianku7YxPiBbPOaoueeLgOeJqeS7tjI+IFs85qi554uA54mp5Lu2Mz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAi5bCH57Si5byV57WQ5p6c5a+r5YWlIDzmqpTmoYg+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICLlj6rmmK/muIXnqbrntKLlvJUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI5Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAi5ZCI5L21IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgIuiugOWPluS5i+mkmOWGjeWft+ihjOS4gOWAi+WQiOS9tSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzMKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIuWmguaenOaykuacieaqlOahiOe0muWQiOS9temcgOimge+8jOWft+ihjOS4ieaWueWQiOS9tSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICLlrZjlnKjmlrDlop7lkozliKrpmaTmmYLvvIzkuZ/ln7fooYzkuInmlrnlkIjkvbUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM3Cittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAi6aGe5Ly85pa8IC1t77yM5L2G5o2o5qOE5pyq5ZCI5L2155qE5qKd55uuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPOWtkOebrumMhD4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICLoroDlj5bmqLnni4Dnianku7bliLDntKLlvJXnmoQgPOWtkOebrumMhD4vIOS4iyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxNDIKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICLnlKjlkIjkvbXnmoTntZDmnpzmm7TmlrDlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ0Cittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ1Cittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICLlhYHoqLHlv73nlaXmqpTmoYjkuK3oqK3lrprnmoTmqpTmoYjlj6/ku6Xooqvopobok4siCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ4Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICLlkIjkvbXlvozkuI3mqqLmn6Xlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTQ5Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICLkuI3mm7TmlrDntKLlvJXljYDlkozlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUxCittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICLot7PpgY7mh4nnlKjnqIDnlo/nsL3lh7rpgY7mv77lmagiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTUzCittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICLpmaTpjK8gdW5wYWNrLXRyZWVzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjE1NworbXNnaWQgInN1cHByZXNzIGZlZWRiYWNrIG1lc3NhZ2VzIgorbXNnc3RyICLmipHliLblm57ppYvoqIrmga8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTg4CisjfCBtc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dpZCAiWW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIuaCqOmcgOimgeWFiOino+axuuebruWJjee0ouW8leeahOihneeqgSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMgorbXNnaWQgIiIKKyJnaXQgcmViYXNlIFstaV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+IHwgLS1rZWVwLWJhc2VdICIKKyJbPHVwc3RyZWFtPiBbPGJyYW5jaD5dXSIKK21zZ3N0ciAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA85oyH5LukPl0gWy0tb250byA85paw5Z+656SOPiB8IC0ta2VlcC1iYXNlXSBbPCIKKyLkuIrmuLg+IFs85YiG5pSvPl1dIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM0Cittc2dpZCAiIgorImdpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCBbPGJyYW5jaD5dIgorbXNnc3RyICJnaXQgcmViYXNlIFstaV0gW+mBuOmghV0gWy0tZXhlYyA85oyH5LukPl0gWy0tb250byA85paw5Z+656SOPl0gLS1yb290IFs85YiG5pSvPl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MzYKK21zZ2lkICJnaXQgcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8iCittc2dzdHIgImdpdCByZWJhc2UgLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXNraXAgfCAtLWVkaXQtdG9kbyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzcgYnVpbHRpbi9yZWJhc2UuYzoyMDEgYnVpbHRpbi9yZWJhc2UuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW51c2FibGUgdG9kbyBsaXN0OiAnJXMnIgorbXNnc3RyICLkuI3lj6/nlKjnmoTlvoXovqbliJfooajvvJonJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4NiBidWlsdGluL3JlYmFzZS5jOjIxMiBidWlsdGluL3JlYmFzZS5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgJyVzJy4iCittc2dzdHIgIuS4jeiDveWvq+WFpSAnJXMn44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjI3MQorbXNnaWQgIm5vIEhFQUQ/IgorbXNnc3RyICLmspLmnIkgSEVBRO+8nyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgJXMiCittc2dzdHIgIueEoeazleW7uueri+aaq+aZgueahCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzozMDQKK21zZ2lkICJjb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK21zZ3N0ciAi54Sh5rOV5qiZ6KiY54K65LqS5YuV5byPIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjM2MgorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSB0b2RvIGxpc3QiCittc2dzdHIgIueEoeazleeUn+aIkOW+hei+puWIl+ihqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0MDIKK21zZ2lkICJhIGJhc2UgY29tbWl0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCAtLXVwc3RyZWFtIG9yIC0tb250byIKK21zZ3N0ciAi5L2/55SoIC0tdXBzdHJlYW0g5oiWIC0tb250byDlv4XpoIjmj5DkvpvkuIDlgIvln7rnpI7mj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDU3Cittc2dpZCAiZ2l0IHJlYmFzZS0taW50ZXJhY3RpdmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZWJhc2UtLWludGVyYWN0aXZlIFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDY5Cittc2dpZCAia2VlcCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLkv53mjIHnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcxIGJ1aWx0aW4vcmV2ZXJ0LmM6MTI4Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLlhYHoqLHmj5DkuqToqqrmmI7ngrrnqboiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDcyCittc2dpZCAicmViYXNlIG1lcmdlIGNvbW1pdHMiCittc2dzdHIgIuWwjeWQiOS9teaPkOS6pOmHjeWumuWfuuW6lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0NzQKK21zZ2lkICJrZWVwIG9yaWdpbmFsIGJyYW5jaCBwb2ludHMgb2YgY291c2lucyIKK21zZ3N0ciAi5L+d5oyB5YWE5byf5o+Q5Lqk55qE5Y6f5aeL5YiG5pSv6bueIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ3NgorbXNnaWQgIm1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEiCittc2dzdHIgIuenu+WLleS7pSBzcXVhc2ghL2ZpeHVwISDplovpoK3nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc3Cittc2dpZCAic2lnbiBjb21taXRzIgorbXNnc3RyICLnsL3lkI3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDc5IGJ1aWx0aW4vcmViYXNlLmM6MTQ1NQorbXNnaWQgImRpc3BsYXkgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0iCittc2dzdHIgIumhr+ekuuS4iua4uOiuiuWMlueahOW3rueVsOe1seioiCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODEKK21zZ2lkICJjb250aW51ZSByZWJhc2UiCittc2dzdHIgIue5vOe6jOmHjeWumuWfuuW6lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODMKK21zZ2lkICJza2lwIGNvbW1pdCIKK21zZ3N0ciAi6Lez6YGO5o+Q5LqkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NAorbXNnaWQgImVkaXQgdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi6YeN5a6a5Z+65bqV5b6F6L6m5YiX6KGoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ4NgorbXNnaWQgInNob3cgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIumhr+ekuuebruWJjeS/ruijnOaqlCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0ODkKK21zZ2lkICJzaG9ydGVuIGNvbW1pdCBpZHMgaW4gdGhlIHRvZG8gbGlzdCIKK21zZ3N0ciAi57iu55+t5b6F6L6m5YiX6KGo5Lit55qE5o+Q5Lqk6JmfIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjQ5MQorbXNnaWQgImV4cGFuZCBjb21taXQgaWRzIGluIHRoZSB0b2RvIGxpc3QiCittc2dzdHIgIuaTtOWxleW+hei+puWIl+ihqOS4reeahOaPkOS6pOiZnyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo0OTMKK21zZ2lkICJjaGVjayB0aGUgdG9kbyBsaXN0IgorbXNnc3RyICLmqqLmn6XlvoXovqbliJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk1Cittc2dpZCAicmVhcnJhbmdlIGZpeHVwL3NxdWFzaCBsaW5lcyIKK21zZ3N0ciAi6YeN5paw5o6S5YiXIGZpeHVwL3NxdWFzaCDooYwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk3Cittc2dpZCAiaW5zZXJ0IGV4ZWMgY29tbWFuZHMgaW4gdG9kbyBsaXN0IgorbXNnc3RyICLlnKjlvoXovqbliJfooajkuK3mj5LlhaUgZXhlYyDln7fooYzmjIfku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NDk4Cittc2dpZCAib250byIKK21zZ3N0ciAib250byIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDEKK21zZ2lkICJyZXN0cmljdC1yZXZpc2lvbiIKK21zZ3N0ciAicmVzdHJpY3QtcmV2aXNpb24iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTAxCittc2dpZCAicmVzdHJpY3QgcmV2aXNpb24iCittc2dzdHIgIumZkOWItueJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDMKK21zZ2lkICJzcXVhc2gtb250byIKK21zZ3N0ciAic3F1YXNoLW9udG8iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTA0Cittc2dpZCAic3F1YXNoIG9udG8iCittc2dzdHIgInNxdWFzaCBvbnRvIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUwNgorbXNnaWQgInRoZSB1cHN0cmVhbSBjb21taXQiCittc2dzdHIgIuS4iua4uOaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkLW5hbWUiCittc2dzdHIgImhlYWQtbmFtZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo1MDgKK21zZ2lkICJoZWFkIG5hbWUiCittc2dzdHIgImhlYWQg5ZCN56ixIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxMworbXNnaWQgInJlYmFzZSBzdHJhdGVneSIKK21zZ3N0ciAi6YeN5a6a5Z+65bqV562W55WlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNAorbXNnaWQgInN0cmF0ZWd5LW9wdHMiCittc2dzdHIgInN0cmF0ZWd5LW9wdHMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE1Cittc2dpZCAic3RyYXRlZ3kgb3B0aW9ucyIKK21zZ3N0ciAi562W55Wl6YG46aCFIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNgorbXNnaWQgInN3aXRjaC10byIKK21zZ3N0ciAi5YiH5o+b5YiwIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjUxNworbXNnaWQgInRoZSBicmFuY2ggb3IgY29tbWl0IHRvIGNoZWNrb3V0IgorbXNnc3RyICLopoHnsL3lh7rnmoTliIbmlK/miJbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4Cittc2dpZCAib250by1uYW1lIgorbXNnc3RyICJvbnRvLW5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE4Cittc2dpZCAib250byBuYW1lIgorbXNnc3RyICJvbnRvIG5hbWUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAiY21kIgorbXNnc3RyICJjbWQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTE5Cittc2dpZCAidGhlIGNvbW1hbmQgdG8gcnVuIgorbXNnc3RyICLopoHln7fooYznmoTmjIfku6QiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTIyIGJ1aWx0aW4vcmViYXNlLmM6MTU0MAorbXNnaWQgImF1dG9tYXRpY2FsbHkgcmUtc2NoZWR1bGUgYW55IGBleGVjYCB0aGF0IGZhaWxzIgorbXNnc3RyICLoh6rli5Xph43mlrDlronmjpLku7vkvZXlpLHmlZfnmoQgYGV4ZWNgIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjU0MAorbXNnaWQgIi0tW25vLV1yZWJhc2UtY291c2lucyBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1yZWJhc2UtbWVyZ2VzIgorbXNnc3RyICLkuI3kvb/nlKggLS1yZWJhc2UtbWVyZ2Vz77yM5YmHIC0tW25vLV1yZWJhc2UtY291c2lucyDmspLmnInmlYjmnpwiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAiJXMg6ZyA6KaB5LqS5YuV5byP6YeN5a6a5Z+65bqVIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZ2V0ICdvbnRvJzogJyVzJyIKK21zZ3N0ciAi54Sh5rOV5Y+W5b6XICdvbnRvJ++8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3JpZy1oZWFkOiAnJXMnIgorbXNnc3RyICLnhKHmlYjnmoTljp/lp4sgaGVhZO+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIGludmFsaWQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU6ICclcyciCittc2dzdHIgIuW/veeVpeeEoeaViOeahCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0Ze+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6NzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIuS4jeiDveiugOWPliAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjc0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJXMiCittc2dzdHIgIuS4jeiDveWEsuWtmCAlcyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo4NDkKK21zZ2lkICJjb3VsZCBub3QgZGV0ZXJtaW5lIEhFQUQgcmV2aXNpb24iCittc2dzdHIgIuS4jeiDveeiuuWumiBIRUFEIOeJiOacrCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzo5NzIgZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxCittc2dpZCAiIgorIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSwgbWFyayB0aGVtIGFzIHJlc29sdmVkIHdpdGhcbiIKKyJcImdpdCBhZGQvcm0gPGNvbmZsaWN0ZWRfZmlsZXM+XCIsIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiWW91IGNhbiBpbnN0ZWFkIHNraXAgdGhpcyBjb21taXQ6IHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIuXG4iCisiVG8gYWJvcnQgYW5kIGdldCBiYWNrIHRvIHRoZSBzdGF0ZSBiZWZvcmUgXCJnaXQgcmViYXNlXCIsIHJ1biBcImdpdCByZWJhc2UgLS0iCisiYWJvcnRcIi4iCittc2dzdHIgIiIKKyLmiYvli5Xop6PmsbrmiYDmnInooZ3nqoHvvIzln7fooYwgXCJnaXQgYWRkL3JtIDzooZ3nqoHnmoTmqpTmoYg+XCIg5qiZ6KiYXG4iCisi6KGd56qB5bey6Kej5rG677yM54S25b6M5Z+36KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLjgILmgqjkuZ/lj6/ku6Xln7fooYxcbiIKKyJcImdpdCByZWJhc2UgLS1za2lwXCIg5oyH5Luk6Lez6YGO6YCZ5YCL5o+Q5Lqk44CC5aaC5p6c5oOz6KaB57WC5q2i5Z+36KGM5Lim5Zue5YiwXG4iCisiXCJnaXQgcmViYXNlXCIg5Z+36KGM5LmL5YmN55qE54uA5oWL77yM5Z+36KGMIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCLjgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiZ2l0IGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHByZXBhcmluZyB0aGUgcGF0Y2hlcyB0byByZXBsYXlcbiIKKyJ0aGVzZSByZXZpc2lvbnM6XG4iCisiXG4iCisiICAgICVzXG4iCisiXG4iCisiQXMgYSByZXN1bHQsIGdpdCBjYW5ub3QgcmViYXNlIHRoZW0uIgorbXNnc3RyICIiCisiXG4iCisi5Zyo54K66YeN5pS+6YCZ5Lqb54mI5pys6ICM5rqW5YKZ5L+u6KOc5qqU5pmC77yMZ2l0IOmBh+WIsOS6huS4gOWAi+mMr+iqpO+8mlxuIgorIlxuIgorIiAgICAlc1xuIgorIlxuIgorIuWboOatpCBnaXQg54Sh5rOV5bCN5YW26YeN5a6a5Z+65bqV44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzXG4iCisiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LlxuIgorIlNlZSBnaXQtcmViYXNlKDEpIGZvciBkZXRhaWxzLlxuIgorIlxuIgorIiAgICBnaXQgcmViYXNlICc8YnJhbmNoPidcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzXG4iCisi6KuL5oyH5a6a5oKo6KaB6YeN5a6a5Z+65bqV5Yiw5ZOq5YCL5YiG5pSv44CCXG4iCisi6Kmz6KaLIGdpdC1yZWJhc2UoMSnjgIJcbiIKKyJcbiIKKyIgICAgZ2l0IHJlYmFzZSAnPGJyYW5jaD4nXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTM4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOaDs+imgeeCuuatpOWIhuaUr+W7uueri+i/vei5pOioiuaBr++8jOaCqOWPr+S7peWft+ihjO+8mlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQxMworbXNnaWQgImV4ZWMgY29tbWFuZHMgY2Fubm90IGNvbnRhaW4gbmV3bGluZXMiCittc2dzdHIgImV4ZWMg5oyH5Luk5LiN6IO95YyF5ZCr5o+b6KGM56ym6JmfIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0MTcKK21zZ2lkICJlbXB0eSBleGVjIGNvbW1hbmQiCittc2dzdHIgIuepuueahCBleGVjIOaMh+S7pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ2Cittc2dpZCAicmViYXNlIG9udG8gZ2l2ZW4gYnJhbmNoIGluc3RlYWQgb2YgdXBzdHJlYW0iCittc2dzdHIgIumHjeWumuWfuuW6leWIsOaPkOS+m+eahOWIhuaUr+iAjOmdnuS4iua4uCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDQ4Cittc2dpZCAidXNlIHRoZSBtZXJnZS1iYXNlIG9mIHVwc3RyZWFtIGFuZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQgYmFzZSIKK21zZ3N0ciAi5L2/55So5LiK5ri45ZKM5YiG5pSv55qE5ZCI5L215Z+656SO5YGa54K655uu5YmN5Z+656SOIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NTAKK21zZ2lkICJhbGxvdyBwcmUtcmViYXNlIGhvb2sgdG8gcnVuIgorbXNnc3RyICLlhYHoqLHln7fooYwgcHJlLXJlYmFzZSDmjpvpiaQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ1MgorbXNnaWQgImJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdCIKK21zZ3N0ciAi5a6J6Z2c44CC5pqX56S6IC0tbm8tc3RhdCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDU4Cittc2dpZCAiZG8gbm90IHNob3cgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIgorbXNnc3RyICLkuI3poa/npLrkuIrmuLjororljJbnmoTlt67nlbDntbHoqIgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2MQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnk6IGxpbmUgdG8gZWFjaCBjb21taXQiCittc2dzdHIgIueCuuavj+S4gOWAi+aPkOS6pOaWsOWinuS4gOWAiyBTaWduZWQtb2ZmLWJ5OiDnsL3lkI0iCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ2NAorI3wgbXNnaWQgIkdyb3VwIGJ5IGNvbW1pdHRlciByYXRoZXIgdGhhbiBhdXRob3IiCittc2dpZCAibWFrZSBjb21taXR0ZXIgZGF0ZSBtYXRjaCBhdXRob3IgZGF0ZSIKK21zZ3N0ciAi5L2/5o+Q5Lqk5pel5pyf56ym5ZCI5pKw5a+r5pel5pyfIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NjYKK21zZ2lkICJpZ25vcmUgYXV0aG9yIGRhdGUgYW5kIHVzZSBjdXJyZW50IGRhdGUiCittc2dzdHIgIuW/veeVpeaSsOWvq+aXpeacn++8jOS9v+eUqOebruWJjeaXpeacnyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDY4CisjfCBtc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dpZCAic3lub255bSBvZiAtLXJlc2V0LWF1dGhvci1kYXRlIgorbXNnc3RyICLlkowgLS1yZXNldC1hdXRob3ItZGF0ZSDlkIznvqkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ3MCBidWlsdGluL3JlYmFzZS5jOjE0NzQKK21zZ2lkICJwYXNzZWQgdG8gJ2dpdCBhcHBseSciCittc2dzdHIgIuWCs+mBnue1piAnZ2l0IGFwcGx5JyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDcyCisjfCBtc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBhdCBFT0wiCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSIKK21zZ3N0ciAi5b+955Wl56m655m95a2X5YWD6K6K5pu0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0NzYgYnVpbHRpbi9yZWJhc2UuYzoxNDc5Cittc2dpZCAiY2hlcnJ5LXBpY2sgYWxsIGNvbW1pdHMsIGV2ZW4gaWYgdW5jaGFuZ2VkIgorbXNnc3RyICLmj4DpgbjmiYDmnInmj5DkuqTvvIzljbPkvb/mnKrkv67mlLkiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4MQorbXNnaWQgImNvbnRpbnVlIgorbXNnc3RyICLnubznuowiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ4NAorbXNnaWQgInNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUiCittc2dzdHIgIui3s+mBjuebruWJjeS/ruijnOaqlOS4pue5vOe6jCIKKworIyAg6K2v6ICF77ya6KuL57at5oyB5YmN5bCO56m65qC8CisjOiBidWlsdGluL3JlYmFzZS5jOjE0ODYKK21zZ2lkICJhYm9ydCBhbmQgY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2giCittc2dzdHIgIue1guatouS4puewveWHuuWOn+acieWIhuaUryIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNDg5Cittc2dpZCAiYWJvcnQgYnV0IGtlZXAgSEVBRCB3aGVyZSBpdCBpcyIKK21zZ3N0ciAi57WC5q2i5L2G5L+d5oyBIEhFQUQg5LiN6K6KIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTAKK21zZ2lkICJlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZSIKK21zZ3N0ciAi5Zyo5LqS5YuV5byP6YeN5a6a5Z+65bqV5Lit57eo6Lyv5b6F6L6m5YiX6KGoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE0OTMKK21zZ2lkICJzaG93IHRoZSBwYXRjaCBmaWxlIGJlaW5nIGFwcGxpZWQgb3IgbWVyZ2VkIgorbXNnc3RyICLpoa/npLrmraPlnKjlpZfnlKjmiJblkIjkvbXnmoTkv67oo5zmqpTmoYgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTQ5NgorbXNnaWQgInVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlIgorbXNnc3RyICLkvb/nlKjlkIjkvbXnrZbnlaXpgLLooYzph43lrprln7rlupUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwMAorbXNnaWQgImxldCB0aGUgdXNlciBlZGl0IHRoZSBsaXN0IG9mIGNvbW1pdHMgdG8gcmViYXNlIgorbXNnc3RyICLorpPkvb/nlKjogIXnt6jovK/opoHph43lrprln7rlupXnmoTmj5DkuqTliJfooagiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUwNAorbXNnaWQgIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbSIKK21zZ3N0ciAi77yI5bey5qOE55So77yJ5ZiX6Kmm6YeN5bu65ZCI5L215o+Q5Lqk6ICM6Z2e5b+955Wl5a6D5YCRIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MDkKK21zZ2lkICJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiCittc2dzdHIgIumHjeWumuWfuuW6leaZguS/neeVmeepuuaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTExCittc2dpZCAibW92ZSBjb21taXRzIHRoYXQgYmVnaW4gd2l0aCBzcXVhc2ghL2ZpeHVwISB1bmRlciAtaSIKK21zZ3N0ciAi5ZyoIC1pIOS6kuWLleaooeW8j+S4i++8jOenu+WLleS7pSBzcXVhc2ghL2ZpeHVwISDplovpoK3nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUxNworbXNnaWQgImF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIiCittc2dzdHIgIuWcqOWLleS9nOWJjeW+jOWft+ihjOiHquWLleWEsuiXj+WSjOW9iOWHuuWEsuiXjyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTE5Cittc2dpZCAiYWRkIGV4ZWMgbGluZXMgYWZ0ZXIgZWFjaCBjb21taXQgb2YgdGhlIGVkaXRhYmxlIGxpc3QiCittc2dzdHIgIuWPr+e3qOi8r+WIl+ihqOeahOavj+S4gOWAi+aPkOS6pOS4i+mdouWinuWKoOS4gOihjCBleGVjIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MjMKK21zZ2lkICJhbGxvdyByZWJhc2luZyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgIuWFgeiosemHneWwjeepuuaPkOS6pOiqquaYjueahOaPkOS6pOmHjeWumuWfuuW6lSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNTI2Cittc2dpZCAidHJ5IHRvIHJlYmFzZSBtZXJnZXMgaW5zdGVhZCBvZiBza2lwcGluZyB0aGVtIgorbXNnc3RyICLlmJfoqablsI3lkIjkvbXmj5DkuqTph43lrprln7rlupXogIzkuI3mmK/lv73nlaXlroPlgJEiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUyOQorbXNnaWQgInVzZSAnbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQnIHRvIHJlZmluZSB1cHN0cmVhbSIKK21zZ3N0ciAi5L2/55SoICdtZXJnZS1iYXNlIC0tZm9yay1wb2ludCcg5L6G5pyA5L2z5YyW5LiK5ri4IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzEKK21zZ2lkICJ1c2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLkvb/nlKjmj5DkvpvnmoTlkIjkvbXnrZbnlaUiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTUzMyBidWlsdGluL3JldmVydC5jOjExNQorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi6YG46aCFIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzQKK21zZ2lkICJwYXNzIHRoZSBhcmd1bWVudCB0aHJvdWdoIHRvIHRoZSBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5bCH5Y+D5pW45YKz6YGe57Wm5ZCI5L21562W55WlIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE1MzcKK21zZ2lkICJyZWJhc2UgYWxsIHJlYWNoYWJsZSBjb21taXRzIHVwIHRvIHRoZSByb290KHMpIgorbXNnc3RyICLlsIfmiYDmnInlj6/ku6Xlj5blvpfnmoTmj5DkuqTph43lrprln7rlupXliLDmoLnmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU1NAorbXNnaWQgIiIKKyJ0aGUgcmViYXNlLnVzZUJ1aWx0aW4gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkIVxuIgorIlNlZSBpdHMgZW50cnkgaW4gJ2dpdCBoZWxwIGNvbmZpZycgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi5bCNIHJlYmFzZS51c2VCdWlsdGluIOeahOaUr+aPtOW3suiiq+WIqumZpO+8gVxuIgorIuips+imiyAnZ2l0IGhlbHAgY29uZmlnJyDkuK3nmoTmop3nm67jgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTU2MAorbXNnaWQgIkl0IGxvb2tzIGxpa2UgJ2dpdCBhbScgaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICLnnIvotbfkvoYgJ2dpdC1hbScg5q2j5Zyo5Z+36KGM5Lit44CC54Sh5rOV6YeN5a6a5Z+65bqV44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDEKK21zZ2lkICIiCisiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyBpcyBkZXByZWNhdGVkLiBVc2UgLS1yZWJhc2UtbWVyZ2VzIGluc3RlYWQuIgorbXNnc3RyICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIOiiq+ajhOeUqOOAgueUqCAtLXJlYmFzZS1tZXJnZXMg5Luj5pu/44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MDYKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1rZWVwLWJhc2UnIHdpdGggJy0tb250byciCittc2dzdHIgIuS4jeiDveWwhyAnLS1rZWVwLWJhc2UnIOWSjCAnLS1vbnRvJyDntYTlkIjkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYwOAorbXNnaWQgImNhbm5vdCBjb21iaW5lICctLWtlZXAtYmFzZScgd2l0aCAnLS1yb290JyIKK21zZ3N0ciAi5LiN6IO95bCHICctLWtlZXAtYmFzZScg5ZKMICctLXJvb3QnIOe1hOWQiOS9v+eUqCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjEyCittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAi5rKS5pyJ5q2j5Zyo6YCy6KGM55qE6YeN5a6a5Z+65bqV77yfIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2MTYKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIuWLleS9nCAtLWVkaXQtdG9kbyDlj6rog73nlKjlnKjkupLli5XlvI/ph43lrprln7rlupXpgY7nqIvkuK3jgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTYzOQorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIuS4jeiDveiugOWPliBIRUFEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2NTEKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyLmgqjlv4XpoIjnt6jovK/miYDmnInnmoTlkIjkvbXooZ3nqoHvvIznhLblvozpgI/pgY4gZ2l0IGFkZFxuIgorIuaMh+S7pOWwh+Wug+WAkeaomeiomOeCuuW3suino+axuiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNjcwCittc2dpZCAiY291bGQgbm90IGRpc2NhcmQgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAi54Sh5rOV5o2o5qOE5bel5L2c5Y2A6K6K5pu0IgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG1vdmUgYmFjayB0byAlcyIKK21zZ3N0ciAi54Sh5rOV56e75ZueICVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICVzIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQlc1xuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCVzXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS5cbiIKK21zZ3N0ciAiIgorIuS8vOS5juW3suacieS4gOWAiyAlcyDnm67pjITvvIzmiJHmh7fnlpHmgqjmraPomZXmlrzlj6blpJbkuIDlgIvph43lrprln7rlupXli5XkvZzpgY7nqIvkuK3jgIJcbiIKKyLlpoLmnpzmmK/pgJnmqKPvvIzoq4vln7fooYxcbiIKKyJcdCVzXG4iCisi5aaC5p6c5LiN5piv6YCZ5qij77yM6KuL5Z+36KGMXG4iCisiXHQlc1xuIgorIueEtuW+jOWGjemHjeaWsOWft+ihjOOAgiDngrrpgb/lhY3pgbrlpLHph43opoHos4fmlpnvvIzmiJHlt7LntpPlgZzmraLnm67liY3li5XkvZzjgIJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzU3Cittc2dpZCAic3dpdGNoIGBDJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICLplovpl5wgYEMnIOacn+acm+S4gOWAi+aVuOWtl+WAvCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gbW9kZTogJXMiCittc2dzdHIgIuacquefpeaooeW8j++8miVzIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4MjAKK21zZ2lkICItLXN0cmF0ZWd5IHJlcXVpcmVzIC0tbWVyZ2Ugb3IgLS1pbnRlcmFjdGl2ZSIKK21zZ3N0ciAiLS1zdHJhdGVneSDpnIDopoEgLS1tZXJnZSDmiJYgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODYwCittc2dpZCAiLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIHJlcXVpcmVzIC0tZXhlYyBvciAtLWludGVyYWN0aXZlIgorbXNnc3RyICItLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMg6ZyA6KaBIC0tZXhlYyDmiJYgLS1pbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxODcyCittc2dpZCAiY2Fubm90IGNvbWJpbmUgYW0gb3B0aW9ucyB3aXRoIGVpdGhlciBpbnRlcmFjdGl2ZSBvciBtZXJnZSBvcHRpb25zIgorbXNnc3RyICLkuI3og73lsIcgYW0g6YG46aCF6IiH5LqS5YuV5oiW5ZCI5L216YG46aCF5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE4OTEKK21zZ2lkICJjYW5ub3QgY29tYmluZSAnLS1wcmVzZXJ2ZS1tZXJnZXMnIHdpdGggJy0tcmViYXNlLW1lcmdlcyciCittc2dzdHIgIuS4jeiDveWwhyAnLS1wcmVzZXJ2ZS1tZXJnZXMnIOWSjCAnLS1yZWJhc2UtbWVyZ2VzJyDlkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTg5NQorbXNnaWQgIiIKKyJlcnJvcjogY2Fubm90IGNvbWJpbmUgJy0tcHJlc2VydmUtbWVyZ2VzJyB3aXRoICctLXJlc2NoZWR1bGUtZmFpbGVkLWV4ZWMnIgorbXNnc3RyICLpjK/oqqTvvJrkuI3og73lsIcgJy0tcHJlc2VydmUtbWVyZ2VzJyDlkowgJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYycg5ZCM5pmC5L2/55SoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAnJXMnIgorbXNnc3RyICLnhKHmlYjnmoTkuIrmuLggJyVzJyIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTI1Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBuZXcgcm9vdCBjb21taXQiCittc2dzdHIgIuS4jeiDveW7uueri+aWsOeahOagueaPkOS6pCIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSB3aXRoIGJyYW5jaCIKK21zZ3N0ciAiJyVzJ++8muWPqumcgOimgeiIh+WIhuaUr+eahOS4gOWAi+WQiOS9teWfuuekjiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5lZWQgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJyVzJ++8muWPqumcgOimgeS4gOWAi+WQiOS9teWfuuekjiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoxOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0ICclcyciCittc2dzdHIgIuaykuacieaMh+WQkeS4gOWAi+acieaViOeahOaPkOS6pCAnJXMnIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjE5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoL2NvbW1pdCAnJXMnIgorbXNnc3RyICLoh7Tlkb3pjK/oqqTvvJrnhKHmraTliIbmlK8v5o+Q5LqkICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MTk5NSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDAKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVmOiAlcyIKK21zZ3N0ciAi5rKS5pyJ6YCZ5qij55qE5byV55So77yaJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjAwNgorbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgdG8gYSByZXZpc2lvbiIKK21zZ3N0ciAi54Sh5rOV5bCHIEhFQUQg6Kej5p6Q54K65LiA5YCL54mI5pysIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNDQKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICLnhKHms5UgYXV0b3N0YXNoIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCBzdGFzaCByZXNwb25zZTogJyVzJyIKK21zZ3N0ciAi5oSP5aSW55qEIHN0YXNoIOWbnuaHie+8miclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAi5LiN6IO954K6ICclcycg5bu656uL55uu6YyEIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICVzXG4iCittc2dzdHIgIuW7uueri+S6hiBhdXRvc3Rhc2jvvJolc1xuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNTkKK21zZ2lkICJjb3VsZCBub3QgcmVzZXQgLS1oYXJkIgorbXNnc3RyICLnhKHms5UgcmVzZXQgLS1oYXJkIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIwNjgKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICLoq4vmj5DkuqTmiJblhLLol4/kv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6Kej5p6QICclcyciCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3dpdGNoIHRvICVzIgorbXNnc3RyICLnhKHms5XliIfmj5vliLAgJXMiCisKKyM6IGJ1aWx0aW4vcmViYXNlLmM6MjExOQorbXNnaWQgIkhFQUQgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkhFQUQg5piv5pyA5paw55qE44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJXMgaXMgdXAgdG8gZGF0ZS5cbiIKK21zZ3N0ciAi55uu5YmN5YiG5pSvICVzIOaYr+acgOaWsOeahOOAglxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxMjkKK21zZ2lkICJIRUFEIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICJIRUFEIOaYr+acgOaWsOeahO+8jOW8t+WItumHjeWumuWfuuW6leOAgiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICVzIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuXG4iCittc2dzdHIgIuebruWJjeWIhuaUryAlcyDmmK/mnIDmlrDnmoTvvIzlvLfliLbph43lrprln7rlupXjgIJcbiIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTM5Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgInByZS1yZWJhc2Ug5o6b6Ymk5ouS57WV5LqG6YeN5a6a5Z+65bqV5YuV5L2c44CCIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyB0byAlczpcbiIKK21zZ3N0ciAi5YiwICVzIOeahOiuiuabtO+8mlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICVzIHRvICVzOlxuIgorbXNnc3RyICLlvp4gJXMg5YiwICVzIOeahOiuiuabtO+8mlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uXG4iCittc2dzdHIgIummluWFiO+8jOmChOWOn+mWi+mgreaMh+aomeS7peS+v+WcqOWFtuS4iumHjeaUvuaCqOeahOW3peS9nC4uLlxuIgorCisjOiBidWlsdGluL3JlYmFzZS5jOjIxODMKK21zZ2lkICJDb3VsZCBub3QgZGV0YWNoIEhFQUQiCittc2dzdHIgIueEoeazleWIhumboumWi+mgreaMh+aomSIKKworIzogYnVpbHRpbi9yZWJhc2UuYzoyMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICVzIHRvICVzLlxuIgorbXNnc3RyICLlv6vovYkgJXMg5YiwICVz44CCXG4iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MzIKK21zZ2lkICJnaXQgcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiIKK21zZ3N0ciAiZ2l0IHJlY2VpdmUtcGFjayA854mI5pys5bqr55uu6YyEPiIKKworIzogYnVpbHRpbi9yZWNlaXZlLXBhY2suYzo4MzAKK21zZ2lkICIiCisiQnkgZGVmYXVsdCwgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeVxuIgorImlzIGRlbmllZCwgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGluZGV4IGFuZCB3b3JrIHRyZWUgaW5jb25zaXN0ZW50XG4iCisid2l0aCB3aGF0IHlvdSBwdXNoZWQsIGFuZCB3aWxsIHJlcXVpcmUgJ2dpdCByZXNldCAtLWhhcmQnIHRvIG1hdGNoXG4iCisidGhlIHdvcmsgdHJlZSB0byBIRUFELlxuIgorIlxuIgorIllvdSBjYW4gc2V0IHRoZSAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZVxuIgorInRvICdpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvXG4iCisiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91XG4iCisiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWVcbiIKKyJvdGhlciB3YXkuXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXRcbiIKKyIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLpoJDoqK3npoHmraLmm7TmlrDpnZ7ntJTniYjmnKzluqvnmoTnm67liY3liIbmlK/vvIzlm6DngrrmgqjmjqjpgIHnmoTlhaflrrnlsIflsI7oh7TntKLlvJXlkozlt6XkvZzljYBcbiIKKyLkuI3kuIDoh7TvvIzkuKbkuJTlsIfpnIDopoHln7fooYwgJ2dpdCByZXNldCAtLWhhcmQnIOWwh+W3peS9nOWNgOespuWQiOWIsCBIRUFE44CCXG4iCisiXG4iCisi5oKo5Y+v5Lul5Zyo6YGg56uv54mI5pys5bqr5Lit6Kit5a6aICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoJyDoqK3lrprorormlbjngrpcbiIKKyInaWdub3JlJyDmiJYgJ3dhcm4nIOS7peWFgeioseaOqOmAgeWIsOebruWJjeWIhuaUr+OAgueEtuiAjOS4jeaOqOiWpumAmem6vOWBmu+8jOmZpOmdnuaCqFxuIgorIueUqOafkOeoruaWueW8j+Wwh+WFtuW3peS9nOWNgOabtOaWsOiHs+aCqOaOqOmAgeeahOeLgOaFi+OAglxuIgorIlxuIgorIuiLpeimgeWwgemOluatpOioiuaBr+S4lOS/neaMgemgkOioreihjOeCuu+8jOioreWumiAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCdcbiIKKyLoqK3lrprorormlbjngrogJ3JlZnVzZSfjgIIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6ODUwCittc2dpZCAiIgorIkJ5IGRlZmF1bHQsIGRlbGV0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBkZW5pZWQsIGJlY2F1c2UgdGhlIG5leHRcbiIKKyInZ2l0IGNsb25lJyB3b24ndCByZXN1bHQgaW4gYW55IGZpbGUgY2hlY2tlZCBvdXQsIGNhdXNpbmcgY29uZnVzaW9uLlxuIgorIlxuIgorIllvdSBjYW4gc2V0ICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvXG4iCisiJ3dhcm4nIG9yICdpZ25vcmUnIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0byBhbGxvdyBkZWxldGluZyB0aGVcbiIKKyJjdXJyZW50IGJyYW5jaCwgd2l0aCBvciB3aXRob3V0IGEgd2FybmluZyBtZXNzYWdlLlxuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlLCB5b3UgY2FuIHNldCBpdCB0byAncmVmdXNlJy4iCittc2dzdHIgIiIKKyLpoJDoqK3npoHmraLliKrpmaTnm67liY3liIbmlK/vvIzlm6DngrrkuIvkuIDmrKEgJ2dpdCBjbG9uZScg5bCH5LiN5pyD57C95Ye65Lu75L2V5qqU5qGI77yMXG4iCisi5bCO6Ie05Zuw5oOR44CCXG4iCisiXG4iCisi5oKo5Y+v5Lul5Zyo6YGg56uv54mI5pys5bqr5Lit6Kit5a6aICdyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50JyDoqK3lrprorormlbjngrpcbiIKKyInd2FybifvvIjpoa/npLrorablkYroqIrmga/vvInmiJYgJ2lnbm9yZSfvvIjlv73nlaXorablkYroqIrmga/vvInku6XlhYHoqLHliKrpmaTnm67liY3liIbmlK/jgIJcbiIKKyJcbiIKKyLoi6XopoHlsIHpjpbmraToqIrmga/vvIzmgqjlj6/ku6XoqK3lrprlroPngrogJ3JlZnVzZSfjgIIiCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTkzNgorbXNnaWQgInF1aWV0IgorbXNnc3RyICLpnZzpu5jmqKHlvI8iCisKKyM6IGJ1aWx0aW4vcmVjZWl2ZS1wYWNrLmM6MTk1MAorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLmgqjlv4XpoIjmjIflrprkuIDlgIvnm67pjITjgIIiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBleHBpcmUgWy0tZXhwaXJlPTx0aW1lPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPl0gWy0tIgorInJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdIFstLWFsbF0gIgorIjxyZWZzPi4uLiIKK21zZ3N0ciAiIgorImdpdCByZWZsb2cgZXhwaXJlIFstLWV4cGlyZT085pmC6ZaTPl0gWy0tZXhwaXJlLXVucmVhY2hhYmxlPTzmmYLplpM+XSBbLS0iCisicmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1zdGFsZS1maXhdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gWy0tYWxsXSA85byVIgorIueUqD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6MjIKK21zZ2lkICIiCisiZ2l0IHJlZmxvZyBkZWxldGUgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXSBbLS1kcnktcnVuIHwgLW5dIFstLXZlcmJvc2VdICIKKyI8cmVmcz4uLi4iCittc2dzdHIgIiIKKyJnaXQgcmVmbG9nIGRlbGV0ZSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLWRyeS1ydW4gfCAtbl0gWy0tdmVyYm9zZV0gPOW8lSIKKyLnlKg+Li4uIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjI1Cittc2dpZCAiZ2l0IHJlZmxvZyBleGlzdHMgPHJlZj4iCittc2dzdHIgImdpdCByZWZsb2cgZXhpc3RzIDzlvJXnlKg+IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU2NyBidWlsdGluL3JlZmxvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoTmmYLplpPmiLMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hcmtpbmcgcmVhY2hhYmxlIG9iamVjdHMuLi4iCittc2dzdHIgIuato+WcqOaomeiomOWPr+S7peWPluW+l+eJqeS7ti4uLiIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcG9pbnRzIG5vd2hlcmUhIgorbXNnc3RyICIlcyDmjIflkJHkuI3lrZjlnKjvvIEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6Njk1Cittc2dpZCAibm8gcmVmbG9nIHNwZWNpZmllZCB0byBkZWxldGUiCittc2dzdHIgIuacquaMh+WumuimgeWIqumZpOeahOW8leeUqOaXpeiqjCIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgcmVmbG9nOiAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5YCL5byV55So5pel6KqM77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHJlZmxvZyBmb3IgJyVzJyIKK21zZ3N0ciAi5rKS5pyJICclcycg55qE5byV55So5pel6KqMIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjc1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZiBmb3JtYXQ6ICVzIgorbXNnc3RyICLnhKHmlYjnmoTlvJXnlKjmoLzlvI/vvJolcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo3NjQKK21zZ2lkICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorbXNnc3RyICJnaXQgcmVmbG9nIFsgc2hvdyB8IGV4cGlyZSB8IGRlbGV0ZSB8IGV4aXN0cyBdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA85YiG5pSvPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA85ZCN56ixPiA85L2N5Z2APiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOCBidWlsdGluL3JlbW90ZS5jOjM4Cittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDzoiIrlkI3nqLE+IDzmlrDlkI3nqLE+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDzlkI3nqLE+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwIGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDzlkI3nqLE+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA85YiG5pSvPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA85ZCN56ixPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMgorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA85ZCN56ixPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg857WEPiB8IDzpgaDnq68+KS4uLl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA85ZCN56ixPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNSBidWlsdGluL3JlbW90ZS5jOjc0Cittc2dpZCAiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIGdldC11cmwgWy0tcHVzaF0gWy0tYWxsXSA85ZCN56ixPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNiBidWlsdGluL3JlbW90ZS5jOjc5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPOWQjeeosT4gPOaWsOeahOS9jeWdgD4gWzzoiIrnmoTkvY3lnYA+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyNyBidWlsdGluL3JlbW90ZS5jOjgwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDzlkI3nqLE+IDzmlrDnmoTkvY3lnYA+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4IGJ1aWx0aW4vcmVtb3RlLmM6ODEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPOWQjeeosT4gPOS9jeWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzMKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs86YG46aCFPl0gPOWQjeeosT4gPOS9jeWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDzlkI3nqLE+IDzliIbmlK8+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA85ZCN56ixPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OQorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPOmBuOmghT5dIDzlkI3nqLE+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzzpgbjpoIU+XSA85ZCN56ixPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPOmBuOmghT5dIFs857WEPiB8IDzpgaDnq68+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAi5pu05pawICVzIOS4rSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Ig6YG46aCF5Y2x6Zqq5LiU6YGO5pmC77yM6KuL5L2/55SoIC0tbWlycm9yPWZldGNoXG4iCisiXHQg5oiWIC0tbWlycm9yPXB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq55+l55qE6Y+h5YOP5Y+D5pW477yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAi5oqT5Y+W6YGg56uv55qE5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgIuaKk+WPluaZguWMr+WFpeaJgOacieeahOaomeexpOWSjOmXnOiBr+eJqeS7tiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIuaIluS4jeaKk+WPluS7u+S9leaomeexpO+8iC0tbm8tdGFnc++8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzAKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICLov73ouaTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcxCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAi5Li757ea5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICLmiorpgaDnq6/oqK3lrprngrrnlKjku6XmjqjpgIHmiJbmipPlj5bnmoTpj6Hlg48iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAi5oyH5a6a5LiA5YCLIG1hc3RlciDliIbmlK/kuKbkvb/nlKggLS1taXJyb3Ig6YG46aCF5rKS5pyJ5oSP576pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIuaMh+Wumuimgei/vei5pOeahOWIhuaUr+WPquWcqOiIh+WPluW+l+mPoeWDj+WQjOaZguS9v+eUqOaJjeacieaEj+e+qSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTQgYnVpbHRpbi9yZW1vdGUuYzo2MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi6YGg56uvICVzIOW3sue2k+WtmOWcqOOAgiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTggYnVpbHRpbi9yZW1vdGUuYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoTpgaDnq6/lkI3nqLEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAi54Sh5rOV6Kit5a6aIG1hc3RlciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAi54Sh5rOV5b6X5Yiw5byV55So6KaP5qC8ICVzIOeahOWPluW+l+WIl+ihqCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDMgYnVpbHRpbi9yZW1vdGUuYzo0NTEKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICLvvIjnrKblkIjvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDU1Cittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIu+8iOWIqumZpO+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MjkgYnVpbHRpbi9yZW1vdGUuYzo3NjQgYnVpbHRpbi9yZW1vdGUuYzo4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICclcyciCittc2dzdHIgIuaykuacieatpOmBoOerr+eJiOacrOW6q++8miclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73ph43mlrDlkb3lkI3oqK3lrprlsI/nr4AgJyVzJyDliLAgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisi5rKS5pyJ5pu05paw6Z2e6aCQ6Kit55qE5Y+W5b6X5byV55So6KaP5qC8XG4iCisiXHQlc1xuIgorIlx05aaC5p6c5b+F6KaB6KuL5omL5YuV5pu05paw6Kit5a6a44CCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5Yiq6ZmkICclcycg5aSx5pWXIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjczNQorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5bu656uLICclcycg5aSx5pWXIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwMQorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICLms6jmhI/vvJpyZWYvcmVtb3RlcyDlsaTntJrkuYvlpJbnmoTkuIDlgIvliIbmlK/mnKrooqvnp7vpmaTjgILopoHliKrpmaTlroPvvIzkvb/nlKjvvJoiCittc2dzdHJbMV0gIuazqOaEj++8mnJlZi9yZW1vdGVzIOWxpOe0muS5i+WklueahOS4gOS6m+WIhuaUr+acquiiq+enu+mZpOOAguimgeWIqumZpOWug+WAke+8jOS9v+eUqO+8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICLkuI3og73np7vpmaToqK3lrprlsI/nr4AgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIg5paw55qE77yI5LiL5LiA5qyh5Y+W5b6X5bCH5YSy5a2Y5pa8IHJlbW90ZXMvJXPvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTE5Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDlt7Lov73ouaQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIxCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiDpgY7mmYLvvIjkvb/nlKggJ2dpdCByZW1vdGUgcHJ1bmUnIOS+huenu+mZpO+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjMKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIueEoeaViOeahCBicmFuY2guJXMubWVyZ2XvvIzkuI3og73ph43lrprln7rlupXliLDkuIDlgIvku6XkuIrnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgaW50ZXJhY3RpdmVseSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi5LqS5YuV5byP6YeN5a6a5Z+65bqV5Yiw6YGg56uvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIGludGVyYWN0aXZlbHkgKHdpdGggbWVyZ2VzKSBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAi5LqS5YuV5byP6YeN5a6a5Z+65bqV77yI5ZCr5ZCI5L215o+Q5Lqk77yJ5Yiw6YGg56uvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLph43lrprln7rlupXliLDpgaDnq68gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiDoiIfpgaDnq68gJXMg5ZCI5L21IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NQorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIuiIh+mBoOerryAlcyDlkIjkvbUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUtKnMgICAgYW5kIHdpdGggcmVtb3RlICVzXG4iCittc2dzdHIgIiUtKnMgICAg5Lul5Y+K5ZKM6YGg56uvICVzXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMQorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAi5bu656uLIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICJkZWxldGUiCittc2dzdHIgIuWIqumZpCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDM4Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAi5pyA5pawIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICLlj6/lv6vovYkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0NAorbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICLmnKzmqZ/lt7LpgY7mmYIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyDlvLfliLbmjqjpgIHoh7MgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg5o6o6YCB6IezICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg5by35Yi25o6o6YCB6IezICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDmjqjpgIHoh7MgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOQorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICLkuI3mn6XoqaLpgaDnq68iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiDpgaDnq68gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NworIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAg5Y+W5b6X5L2N5Z2A77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1OCBidWlsdGluL3JlbW90ZS5jOjExNzQgYnVpbHRpbi9yZW1vdGUuYzoxMzEzCittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIijnhKEgVVJMKSIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiAnOicgc2hvdWxkIGFsaWduCisjLiB3aXRoIHRoZSBvbmUgaW4gIiBGZXRjaCBVUkw6ICVzIgorIy4gdHJhbnNsYXRpb24uCisjLgorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAg5o6o6YCB5L2N5Z2A77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NiBidWlsdGluL3JlbW90ZS5jOjExNzggYnVpbHRpbi9yZW1vdGUuYzoxMTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIEhFQUQg5YiG5pSv77yaJXMiCisKKyMgIOitr+iAhe+8muS4reaWh+Wtl+S4suaLvOaOpe+8jOWPr+WIqumZpOWJjeWwjuepuuagvAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc2Cittc2dpZCAiKG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAi77yI5pyq5p+l6Kmi77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzgKK21zZ2lkICIodW5rbm93bikiCittc2dzdHIgIu+8iOacquefpe+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiAgSEVBRCDliIbmlK/vvIjpgaDnq68gSEVBRCDmqKHns4rvvIzlj6/og73mmK/kuIvliJfkuK3nmoTkuIDlgIvvvInvvJpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAg6YGg56uv5YiG5pSv77yaJXMiCittc2dzdHJbMV0gIiAg6YGg56uv5YiG5pSv77yaJXMiCisKKyMgIOitr+iAhe+8muS4reaWh+Wtl+S4suaLvOaOpe+8jOWPr+WIqumZpOWJjeWwjuepuuagvAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk3IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMworbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAi77yI54uA5oWL5pyq5p+l6Kmi77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDYKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICDngrogJ2dpdCBwdWxsJyDoqK3lrprnmoTmnKzmqZ/liIbmlK/vvJoiCittc2dzdHJbMV0gIiAg54K6ICdnaXQgcHVsbCcg6Kit5a6a55qE5pys5qmf5YiG5pSv77yaIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTQKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIOacrOapn+W8leeUqOWwh+WcqCAnZ2l0IHB1c2gnIOaZguiiq+mPoeWDjyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgIOeCuiAnZ2l0IHB1c2gnIOioreWumueahOacrOapn+W8leeUqCVz77yaIgorbXNnc3RyWzFdICIgIOeCuiAnZ2l0IHB1c2gnIOioreWumueahOacrOapn+W8leeUqCVz77yaIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNDEKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgIuagueaTmumBoOerr+ioreWumiByZWZzL3JlbW90ZXMvPOWQjeeosT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjQzCittc2dpZCAiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKK21zZ3N0ciAi5Yiq6ZmkIHJlZnMvcmVtb3Rlcy885ZCN56ixPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTgKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICLnhKHms5XnorrlrprpgaDnq68gSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjYwCittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIuWkmuWAi+mBoOerryBIRUFEIOWIhuaUr+OAguiri+aYjueiuuWcsOmBuOaTh+S4gOWAi+eUqOaMh+S7pO+8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIueEoeazleWIqumZpCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIuS4jeaYr+S4gOWAi+acieaViOW8leeUqO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICLkuI3og73oqK3lrpogJXMiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDlsIfmiJDngrrmh7jnqbrni4DmhYvvvIEiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIOW3suaIkOeCuuaHuOepuueLgOaFi++8gSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIuS/ruWJqiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiICogW+Wwh+WIqumZpF0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiICogW+W3suWIqumZpF0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3NAorbXNnaWQgInBydW5lIHJlbW90ZXMgYWZ0ZXIgZmV0Y2hpbmciCittc2dzdHIgIuaKk+WPluW+jOa4hemZpOmBoOerryIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM3IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5MSBidWlsdGluL3JlbW90ZS5jOjE1NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAi5rKS5pyJ5q2k6YGg56uvICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1MworbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgIuaWsOWinuWIhuaUryIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDYwCittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a6YGg56uvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NzcKK21zZ2lkICJxdWVyeSBwdXNoIFVSTHMgcmF0aGVyIHRoYW4gZmV0Y2ggVVJMcyIKK21zZ3N0ciAi5p+l6Kmi5o6o6YCBIFVSTCDkvY3lnYDvvIzogIzpnZ7lj5blvpcgVVJMIOS9jeWdgCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDc5Cittc2dpZCAicmV0dXJuIGFsbCBVUkxzIgorbXNnc3RyICLov5Tlm57miYDmnIkgVVJMIOS9jeWdgCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIFVSTHMgY29uZmlndXJlZCBmb3IgcmVtb3RlICclcyciCittc2dzdHIgIuaykuaciee1pumBoOerr+eJiOacrOW6qyAnJXMnIOioreWumiBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzMworbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICLli5XkvZzmjqjpgIEgVVJMUyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM1Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAi5paw5aKeIFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM3Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgIuWIqumZpCBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0NAorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUg54Sh5oSP576pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICLnhKHmlYjnmoToiIogVVJMIOespuWQiOevhOacrO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICLmnKrmib7liLDmraQgVVJM77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5MworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAi5bCH5LiN5pyD5Yiq6Zmk5omA5pyJ6Z2e5o6o6YCBIFVSTCDkvY3lnYAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjMKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjgKK21zZ2lkICIiCisiSW5jcmVtZW50YWwgcmVwYWNrcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggYml0bWFwIGluZGV4ZXMuICBVc2VcbiIKKyItLW5vLXdyaXRlLWJpdG1hcC1pbmRleCBvciBkaXNhYmxlIHRoZSBwYWNrLndyaXRlYml0bWFwcyBjb25maWd1cmF0aW9uLiIKK21zZ3N0ciAiIgorIuWinumHjyByZXBhY2sg5ZKMIGJpdG1hcCDntKLlvJXkuI3nm7jlrrnjgIIgIOS9v+eUqCAtLW5vLXdyaXRlLWJpdG1hcC1pbmRleFxuIgorIuaIluemgeeUqCBwYWNrLndyaXRlYml0bWFwcyDoqK3lrprjgIIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTkxCittc2dpZCAiY291bGQgbm90IHN0YXJ0IHBhY2stb2JqZWN0cyB0byByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyIKK21zZ3N0ciAi54Sh5rOV6ZaL5aeLIHBhY2stb2JqZWN0cyDkvobph43mlrDmiZPljIUgcHJvbWlzb3Ig54mp5Lu2IgorCisjOiBidWlsdGluL3JlcGFjay5jOjIzMCBidWlsdGluL3JlcGFjay5jOjQxNgorbXNnaWQgInJlcGFjazogRXhwZWN0aW5nIGZ1bGwgaGV4IG9iamVjdCBJRCBsaW5lcyBvbmx5IGZyb20gcGFjay1vYmplY3RzLiIKK21zZ3N0ciAicmVwYWNr77ya5pyf5pyb5L6G6IeqIHBhY2stb2JqZWN0cyDnmoTlrozmlbTljYHlha3pgLLkvY3nianku7YgSUTjgIIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MjU0Cittc2dpZCAiY291bGQgbm90IGZpbmlzaCBwYWNrLW9iamVjdHMgdG8gcmVwYWNrIHByb21pc29yIG9iamVjdHMiCittc2dzdHIgIueEoeazleWujOaIkCBwYWNrLW9iamVjdHMg5L6G6YeN5paw5omT5YyFIHByb21pc29yIOeJqeS7tiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTIKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAi5omA5pyJ5YWn5a655omT5YyF5Yiw5LiA5YCL5YyF5qqU5qGI5LitIgorCisjOiBidWlsdGluL3JlcGFjay5jOjI5NAorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgIuWSjCAtYSDnm7jlkIzvvIzkuKblsIfnhKHms5Xlj5blvpfnmoTnianku7boqK3ngrrprIbmlaPnianku7YiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mjk3Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICLliKrpmaTlpJrppJjnmoTljIXvvIzln7fooYwgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoyOTkKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi5ZCRIGdpdC1wYWNrLW9iamVjdHMg5YKz6YGe5Y+D5pW4IC0tbm8tcmV1c2UtZGVsdGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAxCittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLlkJEgZ2l0LXBhY2stb2JqZWN0cyDlgrPpgZ7lj4PmlbggLS1uby1yZXVzZS1vYmplY3QiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzAzCittc2dpZCAiZG8gbm90IHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorbXNnc3RyICLkuI3ln7fooYwgZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMDYKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi5ZCRIGdpdC1wYWNrLW9iamVjdHMg5YKz6YGe5Y+D5pW4IC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzA4Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICLlr6sgYml0bWFwIOe0ouW8lSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMTAKK21zZ2lkICJwYXNzIC0tZGVsdGEtaXNsYW5kcyB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLlkJEgZ2l0LXBhY2stb2JqZWN0cyDlgrPpgZ7lj4PmlbggLS1kZWx0YS1pc2xhbmRzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxMQorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICLov5HkvLzml6XmnJ8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzEyCittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAi5L2/55SoIC1B77yM5LiN6KaB5bCH5pep5pa85o+Q5L6b5pmC6ZaT55qE54mp5Lu26YGO5pyfIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNAorbXNnaWQgIndpdGggLWEsIHJlcGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLkvb/nlKggLWEg77yM6YeN5paw5bCN54Sh5rOV5Y+W5b6X54mp5Lu25omT5YyFIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNgorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAi55So5pa85aKe6YeP5aOT57iu55qE6KaW56qX5YC8IgorCisjOiBidWlsdGluL3JlcGFjay5jOjMxNyBidWlsdGluL3JlcGFjay5jOjMyMworbXNnaWQgImJ5dGVzIgorbXNnc3RyICLkvY3lhYPntYQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MzE4Cittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIuWSjOS4iumdoueahOebuOS8vO+8jOS9humZkOWItuiomOaGtumrlOWkp+Wwj+iAjOmdnuaineebruaVuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjAKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgIumZkOWItuacgOWkp+WinumHj+a3seW6piIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjIKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMiCittc2dzdHIgIumZkOWItuacgOWkp+Wft+ihjOe3kuaVuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAi5q+P5YCLIHBhY2tmaWxlIOeahOacgOWkp+WwuuWvuCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjYKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAi5bCN5qiZ6KiY54K6IC5rZWVwIOeahOWMheS4reeahOeJqeS7tumHjeaWsOaJk+WMhSIKKworIzogYnVpbHRpbi9yZXBhY2suYzozMjgKK21zZ2lkICJkbyBub3QgcmVwYWNrIHRoaXMgcGFjayIKK21zZ3N0ciAi5LiN6KaB5bCN6Kmy5YyF5qqU5qGI6YeN5paw5omT5YyFIgorCisjOiBidWlsdGluL3JlcGFjay5jOjMzOAorbXNnaWQgImNhbm5vdCBkZWxldGUgcGFja3MgaW4gYSBwcmVjaW91cy1vYmplY3RzIHJlcG8iCittc2dzdHIgIuS4jeiDveWIqumZpOePjeWTgeeJiOacrOW6q+S4reeahOaJk+WMheaqlOahiCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNDIKK21zZ2lkICItLWtlZXAtdW5yZWFjaGFibGUgYW5kIC1BIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0ta2VlcC11bnJlYWNoYWJsZSDlkowgLUEg5LiN55u45a65IgorCisjOiBidWlsdGluL3JlcGFjay5jOjQyNQorbXNnaWQgIk5vdGhpbmcgbmV3IHRvIHBhY2suIgorbXNnc3RyICLmspLmnInmlrDnmoTopoHmiZPljIXjgIIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBTb21lIHBhY2tzIGluIHVzZSBoYXZlIGJlZW4gcmVuYW1lZCBieVxuIgorIldBUk5JTkc6IHByZWZpeGluZyBvbGQtIHRvIHRoZWlyIG5hbWUsIGluIG9yZGVyIHRvXG4iCisiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorIldBUk5JTkc6IGZpbGUuICBCdXQgdGhlIG9wZXJhdGlvbiBmYWlsZWQsIGFuZCB0aGVcbiIKKyJXQVJOSU5HOiBhdHRlbXB0IHRvIHJlbmFtZSB0aGVtIGJhY2sgdG8gdGhlaXJcbiIKKyJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKyJXQVJOSU5HOiBQbGVhc2UgcmVuYW1lIHRoZW0gaW4gJXMgbWFudWFsbHk6XG4iCittc2dzdHIgIiIKKyLorablkYrvvJrngrrkuoblsIfljIXmqpTmoYjlj5bku6PngrrmlrDniYjmnKzvvIzkuIDkupvkvb/nlKjkuK3nmoTljIXlt7LntpNcbiIKKyLorablkYrvvJrpgI/pgY7mlrDlop4gb2xkLSDliY3ntrTnmoTmlrnlvI/ph43mlrDlkb3lkI3jgILkvYbmmK/li5XkvZzlpLHmlZfvvIxcbiIKKyLorablkYrvvJrkuKbkuJTlmJfoqabph43mlrDlkb3lkI3mlLnlm57ljp/mnInmqpTmoYjlkI3nmoTli5XkvZzkuZ/lpLHmlZfjgIJcbiIKKyLorablkYrvvJroq4vmiYvli5XlsIcgJXMg5LiL55qE6YCZ5Lqb5qqU5qGI6YeN5paw5ZG95ZCN77yaXG4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6NTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJyVzJyIKK21zZ3N0ciAi5Yiq6ZmkICclcycg5aSx5pWXIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSA854mp5Lu2PiA85Y+W5Luj54mpPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPOeJqeS7tj4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI0Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA85o+Q5LqkPiBbPOeItuaPkOS6pD4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1jb252ZXJ0LWdyYWZ0LWZpbGUiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjI2Cittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDznianku7Y+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTzmoLzlvI8+XSBbLWwgWzzmqKHlvI8+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKyJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnIgorbXNnc3RyICIiCisi54Sh5pWI55qE5Y+W5Luj5qC85byPICclcydcbiIKKyLmnInmlYjnmoTmoLzlvI/mnIkgJ3Nob3J0J+OAgSdtZWRpdW0nIOWSjCAnbG9uZyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIG5vdCBmb3VuZCIKK21zZ3N0ciAi5pyq55m854++5Y+W5Luj5byV55SoICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlcGxhY2UgcmVmICclcyciCittc2dzdHIgIuW3suWIqumZpOWPluS7o+W8leeUqCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZSIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDlgIvmnInmlYjnmoTlvJXnlKjlkI0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBsYWNlIHJlZiAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLlj5bku6PlvJXnlKggJyVzJyDlt7LntpPlrZjlnKgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUuXG4iCisiJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlZCBvYmplY3Qgb2YgdHlwZSAnJXMnXG4iCisid2hpbGUgJyVzJyBwb2ludHMgdG8gYSByZXBsYWNlbWVudCBvYmplY3Qgb2YgdHlwZSAnJXMnLiIKK21zZ3N0ciAiIgorIueJqeS7tuW/hemgiOWxrOaWvOWQjOS4gOmhnuWei+OAglxuIgorIiclcycg5oyH5ZCRICclcycg6aGe5Z6L55qE5Y+W5Luj54mp5Lu2XG4iCisi6ICMICclcycg5oyH5ZCRICclcycg6aGe5Z6L55qE5Y+W5Luj54mp5Lu244CCIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIueEoeazleeCuuWvq+WFpemWi+WVnyAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjQyCittc2dpZCAiY2F0LWZpbGUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAiY2F0LWZpbGUg5aCx5ZGK5aSx5pWXIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMgZm9yIHJlYWRpbmciCittc2dzdHIgIueEoeazleeCuuiugOWPlumWi+WVnyAlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjcyCittc2dpZCAidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIKK21zZ3N0ciAi54Sh5rOV5ZWf5YuVIG1rdHJlZSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjc2Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgZnJvbSBta3RyZWUiCittc2dzdHIgIueEoeazleW+niBta3RyZWUg6K6A5Y+WIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyODUKK21zZ2lkICJta3RyZWUgcmVwb3J0ZWQgZmFpbHVyZSIKK21zZ3N0ciAibWt0cmVlIOWgseWRiuWkseaVlyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6Mjg5Cittc2dpZCAibWt0cmVlIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCBuYW1lIgorbXNnc3RyICJta3RyZWUg5rKS5pyJ6L+U5Zue5LiA5YCL54mp5Lu25ZCNIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZzdGF0ICVzIgorbXNnc3RyICLnhKHms5XlsI0gJXMg5Z+36KGMIGZzdGF0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMDMKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIgorbXNnc3RyICLnhKHms5XlkJHos4fmlpnluqvlr6vlhaXnianku7YiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyMiBidWlsdGluL3JlcGxhY2UuYzozNzggYnVpbHRpbi9yZXBsYWNlLmM6NDIzCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIuS4jeaYr+S4gOWAi+acieaViOeahOeJqeS7tuWQje+8miclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IG9iamVjdCB0eXBlIGZvciAlcyIKK21zZ3N0ciAi54Sh5rOV5b6X5YiwICVzIOeahOeJqeS7tumhnuWeiyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzQyCittc2dpZCAiZWRpdGluZyBvYmplY3QgZmlsZSBmYWlsZWQiCittc2dzdHIgIue3qOi8r+eJqeS7tuaqlOahiOWkseaVlyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciCittc2dzdHIgIuaWsOeJqeS7tuWSjOiIiueJqeS7tuebuOWQjO+8miclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMgYXMgYSBjb21taXQiCittc2dzdHIgIueEoeazleWwhyAlcyDop6PmnpDngrrkuIDlgIvmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgIuaPkOS6pCAnJXMnIOS4reWQq+acieaQjeWjnueahOWQiOS9teaomeexpCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAi5o+Q5LqkICclcycg5Lit5ZCr5pyJ5qC85byP6Yyv6Kqk55qE5ZCI5L215qiZ57GkIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAi5Y6f5aeL5o+Q5LqkICclcycg5YyF5ZCr5bey57aT5o2o5qOE55qE5ZCI5L215qiZ57GkICclcyfvvIzkvb/nlKggLS1lZGl0IOS7o+abvyAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUiCittc2dzdHIgIuWOn+Wni+aPkOS6pCAnJXMnIOS4reacieS4gOWAiyBncGcg57C95ZCNIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NjkKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAi5Zyo5Y+W5Luj55qE5o+Q5Lqk5Lit57C95ZCN5bCH6KKr56e76Zmk77yBIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgIuS4jeiDveeCuiAnJXMnIOWvq+WPluS7o+aPkOS6pCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgImdyYWZ0IGZvciAnJXMnIHVubmVjZXNzYXJ5IgorbXNnc3RyICLlsI0gJyVzJyDnp7vmpI3mspLmnInlv4XopoEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgY29tbWl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIgorbXNnc3RyICLmlrDmj5DkuqTlkozoiIrnmoTkuIDmqKPvvJonJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBjb252ZXJ0IHRoZSBmb2xsb3dpbmcgZ3JhZnQocyk6XG4iCisiJXMiCittc2dzdHIgIiIKKyLkuI3og73ovYnmj5vkuIvliJfnp7vmpI3vvJpcbiIKKyIlcyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ3Cittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgIuWIl+WHuuWPluS7o+eahOW8leeUqCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTQ4Cittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAi5Yiq6Zmk5Y+W5Luj55qE5byV55SoIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NDkKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAi57eo6Lyv54++5a2Y55qE54mp5Lu2IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTAKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICLkv67mlLnkuIDlgIvmj5DkuqTnmoTniLbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1MQorbXNnaWQgImNvbnZlcnQgZXhpc3RpbmcgZ3JhZnQgZmlsZSIKK21zZ3N0ciAi6L2J5o+b54++5a2Y55qE56e75qSN5qqU5qGIIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NTIKK21zZ2lkICJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIgorbXNnc3RyICLlpoLmnpzlrZjlnKjliYflj5bku6PlvJXnlKgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NAorbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAi5LiN6KaB54K6IC0tZWRpdCDli5XkvZznvo7op4Dpoa/npLrlhaflrrkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU1NQorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAi5L2/55So5q2k5qC85byPIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1NjgKK21zZ2lkICItLWZvcm1hdCBjYW5ub3QgYmUgdXNlZCB3aGVuIG5vdCBsaXN0aW5nIgorbXNnc3RyICLkuI3liJflh7rmmYLkuI3og73kvb/nlKggLS1mb3JtYXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU3NgorbXNnaWQgIi1mIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB3cml0aW5nIGEgcmVwbGFjZW1lbnQiCittc2dzdHIgIuWPquacieWvq+S4gOWAi+WPluS7o+aZgiAtZiDmiY3mnInmhI/nvqkiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjU4MAorbXNnaWQgIi0tcmF3IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLWVkaXQiCittc2dzdHIgIi0tcmF3IOWPquacieWSjCAtLWVkaXQg5YWx55So5omN5pyJ5oSP576pIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo1ODYKK21zZ2lkICItZCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1kIOmcgOimgeiHs+WwkeS4gOWAi+WPg+aVuCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTkyCittc2dpZCAiYmFkIG51bWJlciBvZiBhcmd1bWVudHMiCittc2dzdHIgIumMr+iqpOeahOWPg+aVuOWAi+aVuCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NTk4Cittc2dpZCAiLWUgbmVlZHMgZXhhY3RseSBvbmUgYXJndW1lbnQiCittc2dzdHIgIi1lIOmcgOimgeS4lOWDhemcgOimgeS4gOWAi+WPg+aVuCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NjA0Cittc2dpZCAiLWcgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IgorbXNnc3RyICItZyDpnIDopoHoh7PlsJHkuIDlgIvlj4PmlbgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxMAorbXNnaWQgIi0tY29udmVydC1ncmFmdC1maWxlIHRha2VzIG5vIGFyZ3VtZW50IgorbXNnc3RyICItLWNvbnZlcnQtZ3JhZnQtZmlsZSDkuI3luLblj4PmlbgiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjYxNgorbXNnaWQgIm9ubHkgb25lIHBhdHRlcm4gY2FuIGJlIGdpdmVuIHdpdGggLWwiCittc2dzdHIgIuWPquiDveeCuiAtbCDmj5DkvpvkuIDlgIvmqKHlvI8iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTMKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA86Lev5b6RPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NjAKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAi5Zyo57Si5byV5Lit6Ki75YaK5Lm+5reo55qE6Kej5rG65pa55qGIIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjc5Cittc2dpZCAiJ2dpdCByZXJlcmUgZm9yZ2V0JyB3aXRob3V0IHBhdGhzIGlzIGRlcHJlY2F0ZWQiCittc2dzdHIgIuaykuaciei3r+W+keeahCAnZ2l0IHJlcmVyZSBmb3JnZXQnIOW3sue2k+mBjuaZgiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICclcyciCittc2dzdHIgIueEoeazleeCuiAnJXMnIOeUn+aIkOW3rueVsCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyCittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPOaPkOS6pD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKKyN8IG1zZ2lkICJnaXQgcmVzZXQgWy1xXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHM+Li4uIgorbXNnaWQgImdpdCByZXNldCBbLXFdIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCByZXNldCBbLXFdIFs85qi55oiW5o+Q5LqkPl0gWy0tXSA86Lev5b6R6KaP5qC8Pi4uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiIgorImdpdCByZXNldCBbLXFdIFstLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF1dIFs8dHJlZS1pc2g+XSIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gWy0tcGF0aHNwZWMtZnJvbS1maWxlIFstLXBhdGhzcGVjLWZpbGUtbnVsXV0gWzzmqLnmiJbmj5DkuqQ+XSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM1CisjfCBtc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHNwZWM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzzmqLnmiJbmj5DkuqQ+XSBbLS1dIFs86Lev5b6R6KaP5qC8Pi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgIm1peGVkIgorbXNnc3RyICLmt7fpm5wiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo0MQorbXNnaWQgInNvZnQiCittc2dzdHIgIui7n+aApyIKKworIzogYnVpbHRpbi9yZXNldC5jOjQxCittc2dpZCAiaGFyZCIKK21zZ3N0ciAi56Gs5oCnIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAi5ZCI5L21IgorCisjOiBidWlsdGluL3Jlc2V0LmM6NDEKK21zZ2lkICJrZWVwIgorbXNnc3RyICLkv53mjIEiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICLmgqjmspLmnInkuIDlgIvmnInmlYjnmoQgSEVBROOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAi54Sh5rOV5om+5YiwIEhFQUQg5oyH5ZCR55qE5qi544CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIueEoeazleaJvuWIsCAlcyDmjIflkJHnmoTmqLnjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQg54++5Zyo5L2N5pa8ICVzIgorCisjICDora/ogIXvvJrmvKLlrZfkuYvplpPnhKHnqbrmoLzvvIzmlYXliKrpmaQlc+WJjeW+jOepuuagvAorIzogYnVpbHRpbi9yZXNldC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICLlnKjlkIjkvbXpgY7nqIvkuK3kuI3og73lgZolc+mHjeioreWLleS9nOOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NCBidWlsdGluL3N0YXNoLmM6NTE5IGJ1aWx0aW4vc3Rhc2guYzo1OTQKKyM6IGJ1aWx0aW4vc3Rhc2guYzo2MTgKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICLlronpnZzmqKHlvI/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+WFpeaWsOeahOe0ouW8leaqlOahiOOAgiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQxMQorbXNnaWQgImNhbm5vdCBjb21iaW5lIC0tZXhjbHVkZS1wcm9taXNvci1vYmplY3RzIGFuZCAtLW1pc3NpbmciCittc2dzdHIgIuS4jeiDveWQjOaZguS9v+eUqCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyDlkowgLS1taXNzaW5nIOmBuOmghSIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjQ3MgorbXNnaWQgIm9iamVjdCBmaWx0ZXJpbmcgcmVxdWlyZXMgLS1vYmplY3RzIgorbXNnc3RyICLnianku7bpgY7mv77pnIDopoEgLS1vYmplY3RzIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6NTIyCittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCDkuI3mlK/mj7Tpoa/npLroqLvop6MiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzo1MjUKK21zZ2lkICJjYW5ub3QgY29tYmluZSAtLXVzZS1iaXRtYXAtaW5kZXggd2l0aCBvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLkuI3og73lsIcgLS11c2UtYml0bWFwLWluZGV4IOWSjOeJqeS7tumBjua/vue1hOWQiOS9v+eUqCIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo0MDgKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPOmBuOmghT5dIC0tIFs85Y+D5pW4Pi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDEzCittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICLkv53mjIEgYC0tYCDkvZzngrrkuIDlgIvlj4PmlbjlgrPpgZ4iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE1Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICLpgYfliLDnrKzkuIDlgIvpnZ7pgbjpoIXlj4PmlbjlvozlgZzmraLop6PmnpAiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NDE4Cittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAi5Lul5Zu65a6a6ZW35qC85byP6Ly45Ye6IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjU1MQorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPOmBuOmghT5dIC0tIFs85Y+D5pW4Pi4uLl1cbiIKKyIgICDmiJbogIXvvJpnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzzlj4Pmlbg+Li4uXVxuIgorIiAgIOaIluiAhe+8mmdpdCByZXYtcGFyc2UgWzzpgbjpoIU+XSBbPOWPg+aVuD4uLi5dXG4iCisiXG4iCisi5Yid5qyh5L2/55So5pmC5Z+36KGMIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIg5L6G542y5b6X5pu05aSa6KiK5oGv44CCIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0Cittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzzpgbjpoIU+XSA85o+Q5Lqk6JmfPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyNQorbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDzlrZDmjIfku6Q+IgorCisjOiBidWlsdGluL3JldmVydC5jOjMwCittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs86YG46aCFPl0gPOaPkOS6pOiZnz4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MzEKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPOWtkOaMh+S7pD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIGAlcycgZXhwZWN0cyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyIKK21zZ3N0ciAi6YG46aCFIGAlcycg5pyf5pyb5LiA5YCL5aSn5pa86Zu255qE5pW45a2XIgorCisjOiBidWlsdGluL3JldmVydC5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlc++8miVzIOS4jeiDveWSjCAlcyDlkIzmmYLkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTAyCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi57WC5q2i5Y+N6L2J5oiW5o+A6YG45YuV5L2cIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwMworbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIue5vOe6jOWPjei9ieaIluaPgOmBuOWLleS9nCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLlj5bmtojlj43ovYnmiJbmj4Dpgbjli5XkvZwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAic2tpcCBjdXJyZW50IGNvbW1pdCBhbmQgY29udGludWUiCittc2dzdHIgIui3s+mBjuebruWJjeaPkOS6pOS4pue5vOe6jCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAi5LiN6KaB6Ieq5YuV5o+Q5LqkIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLnt6jovK/mj5DkuqToqqrmmI4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTExCittc2dpZCAicGFyZW50LW51bWJlciIKK21zZ3N0ciAi54i257eo6JmfIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInNlbGVjdCBtYWlubGluZSBwYXJlbnQiCittc2dzdHIgIumBuOaTh+S4u+W5ueeItuaPkOS6pOe3qOiZnyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTQKK21zZ2lkICJtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5ZCI5L21562W55WlIgorCisjOiBidWlsdGluL3JldmVydC5jOjExNgorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIuWQiOS9teetlueVpeeahOmBuOmghSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjUKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgIui/veWKoOaPkOS6pOWQjeeosSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMjcKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAi5L+d55WZ5Yid5aeL5YyW55qE56m65o+Q5LqkIgorCisjOiBidWlsdGluL3JldmVydC5jOjEyOQorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICLkv53mjIHlpJrppJjnmoTjgIHnqbrnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMyCittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAi6YKE5Y6f5aSx5pWXIgorCisjOiBidWlsdGluL3JldmVydC5jOjI0NQorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAi5o+A6YG45aSx5pWXIgorCisjOiBidWlsdGluL3JtLmM6MTkKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPOmBuOmghT5dIFstLV0gPOaqlOahiD4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyMDcKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAi5aaC5LiL5qqU5qGI5YW25pqr5a2Y55qE5YWn5a655ZKM5bel5L2c5Y2A5Y+KIEhFQUQg5Lit55qE6YO95LiN5LiA5qij77yaIgorbXNnc3RyWzFdICLlpoLkuIvmqpTmoYjlhbbmmqvlrZjnmoTlhaflrrnlkozlt6XkvZzljYDlj4ogSEVBRCDkuK3nmoTpg73kuI3kuIDmqKPvvJoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTIKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIu+8iOS9v+eUqCAtZiDlvLfliLbliKrpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMTYKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICLkuIvliJfmqpTmoYjntKLlvJXkuK3mnInorormm7QiCittc2dzdHJbMV0gIuS4i+WIl+aqlOahiOe0ouW8leS4reacieiuiuabtCIKKworIzogYnVpbHRpbi9ybS5jOjIyMCBidWlsdGluL3JtLmM6MjI5Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyLvvIjkvb/nlKggLS1jYWNoZWQg5L+d55WZ5pys5qmf5qqU5qGI77yM5oiW55SoIC1mIOW8t+WItuWIqumZpO+8iSIKKworIzogYnVpbHRpbi9ybS5jOjIyNgorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAi5aaC5LiL5qqU5qGI5pyJ5pys5qmf5L+u5pS577yaIgorbXNnc3RyWzFdICLlpoLkuIvmqpTmoYjmnInmnKzmqZ/kv67mlLnvvJoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDIKK21zZ2lkICJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIgorbXNnc3RyICLkuI3liJflh7rliKrpmaTnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDMKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi5Y+q5b6e57Si5byV5Y2A5Yiq6ZmkIgorCisjOiBidWlsdGluL3JtLmM6MjQ0Cittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgIuW/veeVpeaqlOahiOabtOaWsOeLgOaFi+aqouafpSIKKworIzogYnVpbHRpbi9ybS5jOjI0NQorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICLlhYHoqLHpgZ7ov7TliKrpmaQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDcKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAi5Y2z5L2/5rKS5pyJ56ym5ZCI77yM5Lmf5Lul6Zu254uA5oWL6Zui6ZaLIgorCisjOiBidWlsdGluL3JtLmM6Mjg5Cittc2dpZCAicGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIuiri+Wwh+aCqOeahOS/ruaUueaaq+WtmOWIsCAuZ2l0bW9kdWxlcyDkuK3miJblhLLol4/lvozlho3nubznuowiCisKKyM6IGJ1aWx0aW4vcm0uYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAi5pyq5o+Q5L6bIC1yIOmBuOmgheS4jeacg+mBnui/tOWIqumZpCAnJXMnIgorCisjOiBidWlsdGluL3JtLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJt77ya5LiN6IO95Yiq6ZmkICVzIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjIwCittc2dpZCAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzzkuLvmqZ8+Ol0855uu6YyEPiBbPOW8leeUqD4uLi5dXG4iCisiICAtLWFsbCDlkozmmI7norrnmoQgPOW8leeUqD4g5LqS5pal44CCIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICLpgaDnq6/lkI3nqLEiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc3Cittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgIuS9v+eUqOeEoeeLgOaFi+eahCBSUEMg5Y2U5a6aIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3OAorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICLlvp7mqJnmupbovLjlhaXoroDlj5blvJXnlKgiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc5Cittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAi5YiX5Y2w5L6G6Ieq6YGg56uvIGhlbHBlciDnmoTni4DmhYsiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNAorbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs86YG46aCFPl0gWzzniYjmnKznr4TlnI0+XSBbWy0tXSA86Lev5b6RPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNQorbXNnaWQgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cgWzzpgbjpoIU+XSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NAorbXNnaWQgIkdyb3VwIGJ5IGNvbW1pdHRlciByYXRoZXIgdGhhbiBhdXRob3IiCittc2dzdHIgIuaMieeFp+aPkOS6pOiAheWIhue1hOiAjOS4jeaYr+S9nOiAhSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI2NgorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAi5qC55pOa5q+P5YCL5L2c6ICF55qE5o+Q5Lqk5pW46YeP5o6S5bqPIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjY4Cittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIumaseiXj+aPkOS6pOiqquaYju+8jOWPquaPkOS+m+aPkOS6pOaVuOmHjyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIumhr+ekuuavj+WAi+S9nOiAheeahOmbu+WtkOS/oeS7tuS9jeWdgCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MQorbXNnaWQgIjx3PlssPGkxPlssPGkyPl1dIgorbXNnc3RyICI8dz5bLDxpMT5bLDxpMj5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjI3MgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAi5oqY6KGM6Ly45Ye6IgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MzAxCittc2dpZCAidG9vIG1hbnkgYXJndW1lbnRzIGdpdmVuIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi54mI5pys5bqr5aSW5Z+36KGM5o+Q5L6b5LqG5aSq5aSa55qE5Y+D5pW4IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTzkvZXmmYI+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg854mI5pysPiB8IDzokKznlKjlrZflhYM+KS4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxNworbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw86LW35aeL6buePl1dIFstLWxpc3RdIFs85byV55SoPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZiIKK21zZ2lkX3BsdXJhbCAiaWdub3JpbmcgJXM7IGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJlZnMiCittc2dzdHJbMF0gIuW/veeVpSAlc++8jOeEoeazleiZleeQhiAlZCDlgIvku6XkuIrnmoTlvJXnlKgiCittc2dzdHJbMV0gIuW/veeVpSAlc++8jOeEoeazleiZleeQhiAlZCDlgIvku6XkuIrnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gbWF0Y2hpbmcgcmVmcyB3aXRoICVzIgorbXNnc3RyICLmspLmnInlkowgJXMg56ym5ZCI55qE5byV55SoIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ1Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLpoa/npLrpgaDnq6/ov73ouaTnmoTlkozmnKzmqZ/nmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NDcKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi6aGv56S66YGg56uv6L+96Lmk55qE5YiG5pSvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjQ5Cittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAi6JGX6ImyICcqISstJyDliLDnm7jmh4nnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTEKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAi6aGv56S65YWx5ZCM56WW5YWI5b6M55qEIDxuPiDlgIvmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTMKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgIuWSjCBtb3JlPS0xIOWQjOe+qSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1NAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICLkuI3poa/npLrlrZfkuLLlkb3lkI0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTYKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi5YyF5ous55uu5YmN5YiG5pSvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU4Cittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICLku6Xnianku7blkI3lrZflkb3lkI3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjAKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICLpoa/npLrlj6/og73lkIjkvbXnmoTln7rnpI4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjIKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICLpoa/npLrmspLmnInku7vkvZXlvJXnlKjnmoTnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgIuS7peaLk+aSsumghuW6j+mhr+ekuuaPkOS6pCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NworbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICLlj6rpoa/npLrkuI3lnKjnrKzkuIDlgIvliIbmlK/kuIrnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjkKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgIumhr+ekuuWDheS4gOWAi+WIhuaUr+WPr+WtmOWPlueahOWQiOS9teaPkOS6pCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAi5ouT5pKy5pa55byP5o6S5bqP77yM5Lim5YSY5Y+v6IO95Zyw5L+d5oyB5pel5pyf6aCG5bqPIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxiYXNlPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzUKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAi6aGv56S65b6e6LW35aeL6bue6ZaL5aeL55qEIDxuPiDmop3mnIDov5HnmoTlvJXnlKjml6XoqozoqJjpjIQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MTEKK21zZ2lkICIiCisiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgLS1pbmRlcGVuZGVudCBvciAtLW1lcmdlLWJhc2UiCittc2dzdHIgIi0tcmVmbG9nIOWSjCAtLWFsbOOAgS0tcmVtb3Rlc+OAgS0taW5kZXBlbmRlbnQg5oiWIC0tbWVyZ2UtYmFzZSDkuI3nm7jlrrkiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzUKK21zZ2lkICJubyBicmFuY2hlcyBnaXZlbiwgYW5kIEhFQUQgaXMgbm90IHZhbGlkIgorbXNnc3RyICLmnKrmj5DkvpvliIbmlK/vvIzkuJQgSEVBRCDnhKHmlYgiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3MzgKK21zZ2lkICItLXJlZmxvZyBvcHRpb24gbmVlZHMgb25lIGJyYW5jaCBuYW1lIgorbXNnc3RyICLpgbjpoIUgLS1yZWZsb2cg6ZyA6KaB5LiA5YCL5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgJWQgZW50cnkgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIKK21zZ2lkX3BsdXJhbCAib25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iCittc2dzdHJbMF0gIuS4gOasoeWPquiDvemhr+ekuiAlZCDlgIvmop3nm67jgIIiCittc2dzdHJbMV0gIuS4gOasoeWPquiDvemhr+ekuiAlZCDlgIvmop3nm67jgIIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCByZWYgJXMiCittc2dzdHIgIueEoeatpOW8leeUqCAlcyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXYuIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZXZzLiIKK21zZ3N0clswXSAi5LiN6IO96JmV55CGICVkIOWAi+S7peS4iueahOeJiOacrOOAgiIKK21zZ3N0clsxXSAi5LiN6IO96JmV55CGICVkIOWAi+S7peS4iueahOeJiOacrOOAgiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCL5pyJ5pWI55qE5byV55So44CCIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaW5kIGNvbW1pdCAlcyAoJXMpIgorbXNnc3RyICLkuI3og73mib7liLDmj5DkuqQgJXPvvIglc++8iSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEyCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs85qih5byPPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMworbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTzmqKHlvI8+XSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MgorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgIuWPqumhr+ekuuaomeexpO+8iOWPr+S7peWSjOmgreWFseeUqO+8iSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2MworbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgIuWPqumhr+ekuumgre+8iOWPr+S7peWSjOaomeexpOWFseeUqO+8iSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NAorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgIuabtOWatOagvOeahOW8leeUqOaqoua4rO+8jOmcgOimgeeyvueiuueahOW8leeUqOi3r+W+kSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE2NyBidWlsdGluL3Nob3ctcmVmLmM6MTY5Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICLpoa/npLogSEVBRCDlvJXnlKjvvIzljbPkvb/ooqvpgY7mv77mjokiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAi6L2J5o+b5qiZ57Gk5Yiw54mp5Lu2IElEIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTczCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICLlj6rpoa/npLrkvb/nlKggPG4+IOWAi+aVuOWtl+eahCBTSEExIOmbnOa5iiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICLkuI3liJfljbDntZDmnpzliLDmqJnmupbovLjlh7rvvIjkvovlpoLoiIcgLS12ZXJpZnkg5Y+D5pW45YWx55So77yJIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAi6aGv56S65b6e5qiZ5rqW6Ly45YWl5Lit6K6A5YWl55qE5LiN5Zyo5pys5qmf54mI5pys5bqr5Lit55qE5byV55SoIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIwCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCAoaW5pdHxsaXN0fHNldHxkaXNhYmxlKSA8b3B0aW9ucz4iCittc2dzdHIgImdpdCBzcGFyc2UtY2hlY2tvdXQgKGluaXR8bGlzdHxzZXR8ZGlzYWJsZSkgPOmBuOmghT4iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6NjEKK21zZ2lkICJ0aGlzIHdvcmt0cmVlIGlzIG5vdCBzcGFyc2UgKHNwYXJzZS1jaGVja291dCBmaWxlIG1heSBub3QgZXhpc3QpIgorbXNnc3RyICLpgJnkuI3mmK/nqIDnlo/lt6XkvZzljYDvvIhzcGFyc2UtY2hlY2tvdXQg5qqU5qGI5Y+v6IO95LiN5a2Y5Zyo77yJIgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjIyMAorbXNnaWQgImZhaWxlZCB0byBzZXQgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyBzZXR0aW5nIgorbXNnc3RyICLnhKHms5XoqK3lrpogZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyDoqK3lrpoiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjM3Cittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IFstLWNvbmVdIgorbXNnc3RyICJnaXQgc3BhcnNlLWNoZWNrb3V0IGluaXQgWy0tY29uZV0iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6MjU2Cittc2dpZCAiaW5pdGlhbGl6ZSB0aGUgc3BhcnNlLWNoZWNrb3V0IGluIGNvbmUgbW9kZSIKK21zZ3N0ciAi5LulIGNvbmUg5qih5byP5Yid5aeL5YyW56iA55aP57C95Ye6IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI2MgorI3wgbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ2lkICJpbml0aWFsaXplIHNwYXJzZS1jaGVja291dCIKK21zZ3N0ciAi5Yid5aeL5YyW56iA55aP57C95Ye6IgorCisjOiBidWlsdGluL3NwYXJzZS1jaGVja291dC5jOjI5NQorIywgYy1mb3JtYXQKKyN8IG1zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnOiAlcyIKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICLnhKHms5XplovllZ/jgIwlc+OAjSIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzozNjEKKyN8IG1zZ2lkICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMiCittc2dpZCAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA8cGF0dGVybnM+KSIKK21zZ3N0ciAiZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgKC0tc3RkaW4gfCA85qij5byPPikiCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mzc4CisjfCBtc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIHN0YW5kYXJkIGluIgorbXNnc3RyICLlvp7mqJnmupbovLjlhaXoroDlj5bmqKPlvI8iCisKKyM6IGJ1aWx0aW4vc3BhcnNlLWNoZWNrb3V0LmM6Mzg0CisjfCBtc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnaWQgInNldCBzcGFyc2UtY2hlY2tvdXQgcGF0dGVybnMiCittc2dzdHIgIuioreWumueogOeWj+ewveWHuuaoo+W8jyIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NDcKKyN8IG1zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dpZCAiZGlzYWJsZSBzcGFyc2UtY2hlY2tvdXQiCittc2dzdHIgIuWBnOeUqOeogOeWj+ewveWHuiIKKworIzogYnVpbHRpbi9zcGFyc2UtY2hlY2tvdXQuYzo0NTkKKyN8IG1zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dpZCAiZXJyb3Igd2hpbGUgcmVmcmVzaGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi6YeN5paw5pW055CG5bel5L2c55uu6YyE5pmC55m855Sf6Yyv6KqkIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjIgYnVpbHRpbi9zdGFzaC5jOjM3Cittc2dpZCAiZ2l0IHN0YXNoIGxpc3QgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBzdGFzaCBsaXN0IFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMyBidWlsdGluL3N0YXNoLmM6NDIKK21zZ2lkICJnaXQgc3Rhc2ggc2hvdyBbPG9wdGlvbnM+XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBzaG93IFs86YG46aCFPl0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6MjQgYnVpbHRpbi9zdGFzaC5jOjQ3Cittc2dpZCAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGRyb3AgWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI1Cittc2dpZCAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI2IGJ1aWx0aW4vc3Rhc2guYzo2MgorbXNnaWQgImdpdCBzdGFzaCBicmFuY2ggPGJyYW5jaG5hbWU+IFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGJyYW5jaCA85YiG5pSv5ZCNPiBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyNyBidWlsdGluL3N0YXNoLmM6NjcKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciIKKworIzogYnVpbHRpbi9zdGFzaC5jOjI4IGJ1aWx0aW4vc3Rhc2guYzo3NworbXNnaWQgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPG1lc3NhZ2U+XVxuIgorIiAgICAgICAgICBbLS1dIFs8cGF0aHNwZWM+Li4uXV0iCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggW3B1c2ggWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFstbXwtLW1lc3NhZ2UgPOa2iOaBrz5dXG4iCisiICAgICAgICAgIFstLV0gWzzot6/lvpHopo/moLw+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzozMSBidWlsdGluL3N0YXNoLmM6ODQKK21zZ2lkICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs8bWVzc2FnZT5dIgorbXNnc3RyICIiCisiZ2l0IHN0YXNoIHNhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy1xfC0tcXVpZXRdXG4iCisiICAgICAgICAgIFstdXwtLWluY2x1ZGUtdW50cmFja2VkXSBbLWF8LS1hbGxdIFs85raI5oGvPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1MgorbXNnaWQgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCittc2dzdHIgImdpdCBzdGFzaCBwb3AgWy0taW5kZXhdIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1NworbXNnaWQgImdpdCBzdGFzaCBhcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XSIKK21zZ3N0ciAiZ2l0IHN0YXNoIGFwcGx5IFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dIgorCisjOiBidWlsdGluL3N0YXNoLmM6NzIKK21zZ2lkICJnaXQgc3Rhc2ggc3RvcmUgWy1tfC0tbWVzc2FnZSA8bWVzc2FnZT5dIFstcXwtLXF1aWV0XSA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IHN0YXNoIHN0b3JlIFstbXwtLW1lc3NhZ2UgPOa2iOaBrz5dIFstcXwtLXF1aWV0XSA85o+Q5LqkPiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJXMnIOS4jeWDj+aYr+S4gOWAi+WEsuiXj+aPkOS6pCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiVzIgorbXNnc3RyICLmjIflrprkuoblpKrlpJrnmoTniYjmnKzvvJolcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE2MSBnaXQtbGVnYWN5LXN0YXNoLnNoOjU0OQorbXNnaWQgIk5vIHN0YXNoIGVudHJpZXMgZm91bmQuIgorbXNnc3RyICLmnKrnmbznj77lhLLol4/mop3nm67jgIIiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIlcyDkuI3mmK/kuIDlgIvmnInmlYjnmoTlvJXnlKjlkI0iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoyMjQgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo3NQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIOS4jeaUr+aPtOWPg+aVuCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQwMworbXNnaWQgImNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi54Sh5rOV5Zyo5ZCI5L216YGO56iL5aWX55So5YSy6JePIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZW5lcmF0ZSBkaWZmICVzXiEuIgorbXNnc3RyICLnhKHms5XnlJ/miJDlt67nlbAgJXNeIS4iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0MjEKK21zZ2lkICJjb25mbGljdHMgaW4gaW5kZXguVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIue0ouW8leS4reacieihneeqgeOAguWYl+ippuS4jeeUqCAtLWluZGV444CCIgorCisjOiBidWlsdGluL3N0YXNoLmM6NDI3Cittc2dpZCAiY291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAi5LiN6IO95YSy5a2Y57Si5byV5qi5IgorCisjOiBidWlsdGluL3N0YXNoLmM6NDM2Cittc2dpZCAiY291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2giCittc2dzdHIgIueEoeazleW+nuWEsuiXj+aineebruS4reW+qeWOn+acqui/vei5pOaqlOahiCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIHdpdGggJXMiCittc2dzdHIgIuato+WcqOWQiOS9tSAlcyDlkowgJXMiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo0NjAgZ2l0LWxlZ2FjeS1zdGFzaC5zaDo2ODEKK21zZ2lkICJJbmRleCB3YXMgbm90IHVuc3Rhc2hlZC4iCittc2dzdHIgIue0ouW8leacquW+nuWEsuiXj+S4reW+qeWOn+OAgiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjUyMSBidWlsdGluL3N0YXNoLmM6NjIwCittc2dpZCAiYXR0ZW1wdCB0byByZWNyZWF0ZSB0aGUgaW5kZXgiCittc2dzdHIgIuWYl+ippumHjeW7uue0ouW8lSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICVzICglcykiCittc2dzdHIgIuaNqOajhOS6hiAlc++8iCVz77yJIgorCisjOiBidWlsdGluL3N0YXNoLmM6NTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJXPvvJrnhKHms5Xmjajmo4TlhLLol4/mop3nm64iCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIiclcycg5LiN5piv5LiA5YCL5YSy6JeP5byV55SoIgorCisjOiBidWlsdGluL3N0YXNoLmM6NjMyIGdpdC1sZWdhY3ktc3Rhc2guc2g6Njk1Cittc2dpZCAiVGhlIHN0YXNoIGVudHJ5IGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCittc2dzdHIgIuWEsuiXj+aineebruiiq+S/neeVmeS7peWCmeaCqOWGjeasoemcgOimgeOAgiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjY1NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjcxMworbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL3N0YXNoLmM6Nzk1IGJ1aWx0aW4vc3Rhc2guYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAlcyB3aXRoICVzIgorbXNnc3RyICLnhKHms5XnlKggJTIkcyDmm7TmlrAgJTEkcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgxMyBidWlsdGluL3N0YXNoLmM6MTQ3MCBidWlsdGluL3N0YXNoLmM6MTUwNgorbXNnaWQgInN0YXNoIG1lc3NhZ2UiCittc2dzdHIgIuWEsuiXj+iqquaYjiIKKworIzogYnVpbHRpbi9zdGFzaC5jOjgyMworbXNnaWQgIlwiZ2l0IHN0YXNoIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IgorbXNnc3RyICJcImdpdCBzdGFzaCBzdG9yZVwiIOmcgOimgeS4gOWAiyA85o+Q5LqkPiDlj4PmlbgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMDQ1IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjE4Cittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAi5rKS5pyJ6YG45pOH6K6K5pu0IgorCisjOiBidWlsdGluL3N0YXNoLmM6MTE0NSBnaXQtbGVnYWN5LXN0YXNoLnNoOjE1MAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICLmgqjlsJrmnKrlu7rnq4vliJ3lp4vmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTcyIGdpdC1sZWdhY3ktc3Rhc2guc2g6MTY1Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIueEoeazleWEsuWtmOebruWJjee0ouW8leeLgOaFiyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjExODEgZ2l0LWxlZ2FjeS1zdGFzaC5zaDoxODAKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLnhKHms5XlhLLlrZjmnKrov73ouaTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMTkyIGJ1aWx0aW4vc3Rhc2guYzoxMjAxIGdpdC1sZWdhY3ktc3Rhc2guc2g6MjAxCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjIxNAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICLnhKHms5XlhLLlrZjnm67liY3lt6XkvZzljYDni4DmhYsiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjI5IGdpdC1sZWdhY3ktc3Rhc2guc2g6MjM0Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIuS4jeiDveiomOmMhOW3peS9nOWNgOeLgOaFiyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEyNzggZ2l0LWxlZ2FjeS1zdGFzaC5zaDozMzgKK21zZ2lkICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorbXNnc3RyICLkuI3og73lkIzmmYLkvb/nlKjlj4PmlbggLS1wYXRjaCDlkowgLS1pbmNsdWRlLXVudHJhY2tlZCDmiJYgLS1hbGwiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxMjk0Cittc2dpZCAiRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPyIKK21zZ3N0ciAi5oKo5piv5ZCm5b+Y5LqG5Z+36KGMICdnaXQgYWRkJ++8nyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMDkgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNDYKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIuaykuacieimgeWEsuWtmOeahOacrOapn+S/ruaUuSIKKworIzogYnVpbHRpbi9zdGFzaC5jOjEzMTYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozNTEKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAi54Sh5rOV5Yid5aeL5YyW5YSy6JePIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzMSBnaXQtbGVnYWN5LXN0YXNoLnNoOjM1NQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAi54Sh5rOV5YSy5a2Y55uu5YmN54uA5oWLIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJTYXZlZCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggc3RhdGUgJXMiCittc2dzdHIgIuWEsuWtmOW3peS9nOebrumMhOWSjOe0ouW8leeLgOaFiyAlcyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0MjYgZ2l0LWxlZ2FjeS1zdGFzaC5zaDozODUKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIueEoeazleWIqumZpOW3peS9nOWNgOiuiuabtCIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjEgYnVpbHRpbi9zdGFzaC5jOjE0OTcKK21zZ2lkICJrZWVwIGluZGV4IgorbXNnc3RyICLkv53mjIHntKLlvJUiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNDYzIGJ1aWx0aW4vc3Rhc2guYzoxNDk5Cittc2dpZCAic3Rhc2ggaW4gcGF0Y2ggbW9kZSIKK21zZ3N0ciAi5Lul5L+u6KOc5qqU5qih5byP5YSy6JePIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2NCBidWlsdGluL3N0YXNoLmM6MTUwMAorbXNnaWQgInF1aWV0IG1vZGUiCittc2dzdHIgIumdnOm7mOaooeW8jyIKKworIzogYnVpbHRpbi9zdGFzaC5jOjE0NjYgYnVpbHRpbi9zdGFzaC5jOjE1MDIKK21zZ2lkICJpbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiBzdGFzaCIKK21zZ3N0ciAi5YSy6JeP5Lit5YyF5ZCr5pyq6L+96Lmk5qqU5qGIIgorCisjOiBidWlsdGluL3N0YXNoLmM6MTQ2OCBidWlsdGluL3N0YXNoLmM6MTUwNAorbXNnaWQgImluY2x1ZGUgaWdub3JlIGZpbGVzIgorbXNnc3RyICLljIXlkKvlv73nlaXnmoTmqpTmoYgiCisKKyM6IGJ1aWx0aW4vc3Rhc2guYzoxNTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBleGVjICVzIgorbXNnc3RyICLkuI3og73ln7fooYwgJXMiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjE4Cittc2dpZCAiZ2l0IHN0cmlwc3BhY2UgWy1zIHwgLS1zdHJpcC1jb21tZW50c10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstcyB8IC0tc3RyaXAtY29tbWVudHNdIgorCisjOiBidWlsdGluL3N0cmlwc3BhY2UuYzoxOQorbXNnaWQgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCittc2dzdHIgImdpdCBzdHJpcHNwYWNlIFstYyB8IC0tY29tbWVudC1saW5lc10iCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjM3Cittc2dpZCAic2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIgorbXNnc3RyICLot7PpgY7lkoznp7vpmaTmiYDmnInnmoTlgpnoqLvooYwiCisKKyM6IGJ1aWx0aW4vc3RyaXBzcGFjZS5jOjQwCittc2dpZCAicHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgc3BhY2UgdG8gZWFjaCBsaW5lIgorbXNnc3RyICLngrrmr4/kuIDooYznmoTooYzpppbmlrDlop7lgpnoqLvnrKblkoznqbrmoLwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo0NyBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RpbmcgYSBmdWxsIHJlZiBuYW1lLCBnb3QgJXMiCittc2dzdHIgIuacn+acm+S4gOWAi+WujOaVtOeahOW8leeUqOWQjeeose+8jOWNu+W+l+WIsCAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY0Cittc2dpZCAic3VibW9kdWxlLS1oZWxwZXIgcHJpbnQtZGVmYXVsdC1yZW1vdGUgdGFrZXMgbm8gYXJndW1lbnRzIgorbXNnc3RyICJzdWJtb2R1bGUtLWhlbHBlciBwcmludC1kZWZhdWx0LXJlbW90ZSDkuI3luLblj4PmlbgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJXMnIgorbXNnc3RyICLnhKHms5Xlvp4gdXJsICclcycg5Ymd6Zui5LiA5YCL5YWD5Lu2IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDEwIGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzgwCittc2dpZCAiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIKK21zZ3N0ciAi55u45bCN6Lev5b6R55qE5pu/5Luj6Yyo6KiY77yIYW5jaG9y77yJIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NDE1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgWy0tcHJlZml4PTxwYXRoPl0gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IFstLXByZWZpeD086Lev5b6RPl0gWzzot6/lvpE+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjQ3MiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjMwCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAi5ZyoIC5naXRtb2R1bGVzIOS4reacquaJvuWIsOWtkOaooee1hCAnJXMnIOeahCB1cmwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyVzJ1xuIgorbXNnc3RyICLpgLLlhaUgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJydW5fY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMgZm9yICVzXG4iCisiLiIKK21zZ3N0ciAiIgorIuWwjSAlcyDln7fooYwgcnVuX2NvbW1hbmQg6L+U5Zue6Z2e6Zu25YC844CCXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisicnVuX2NvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzIHdoaWxlIHJlY3Vyc2luZyBpbiB0aGUgbmVzdGVkICIKKyJzdWJtb2R1bGVzIG9mICVzXG4iCisiLiIKK21zZ3N0ciAiIgorIuWcqOmBnui/tCAlcyDnmoTlrZDmqKHntYTln7fooYwgcnVuX2NvbW1hbmQg5pmC6L+U5Zue6Z2e6Zu25YC844CCXG4iCisiLiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU2NQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBlbnRlcmluZyBlYWNoIHN1Ym1vZHVsZSBjb21tYW5kIgorbXNnc3RyICLpmLvmraLpgLLlhaXmr4/kuIDlgIvlrZDmqKHntYTmjIfku6TnmoTovLjlh7oiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo1NjcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjEwNTMKK21zZ2lkICJSZWN1cnNlIGludG8gbmVzdGVkIHN1Ym1vZHVsZXMiCittc2dzdHIgIumBnui/tOmAsuWFpeW1jOWll+WtkOaooee1hOS4rSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjU3MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBmb3JlYWNoIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFstLV0gPGNvbW1hbmQ+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgZm9yZWFjaCBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbLS1dIDzmjIfku6Q+IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3QgbG9vayB1cCBjb25maWd1cmF0aW9uICclcycuIEFzc3VtaW5nIHRoaXMgcmVwb3NpdG9yeSBpcyBpdHMgb3duICIKKyJhdXRob3JpdGF0aXZlIHVwc3RyZWFtLiIKK21zZ3N0ciAi54Sh5rOV5om+5Yiw6Kit5a6aICclcyfjgILlgYflrprpgJnlgIvniYjmnKzluqvmmK/lhbboh6rouqvnmoTlrpjmlrnkuIrmuLjjgIIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K65a2Q5qih57WEICclcycg6Ki75YaKIHVybCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyVzJyAoJXMpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICLlrZDmqKHntYQgJyVzJ++8iCVz77yJ5bey5bCN6Lev5b6RICclcycg6Ki75YaKXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo2ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogY29tbWFuZCB1cGRhdGUgbW9kZSBzdWdnZXN0ZWQgZm9yIHN1Ym1vZHVsZSAnJXMnXG4iCittc2dzdHIgIuitpuWRiu+8muW7uuitsOWtkOaooee1hCAnJXMnIOS9v+eUqOaMh+S7pOabtOaWsOaooeW8j1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K65a2Q5qih57WEICclcycg6Ki75YaK5pu05paw5qih5byPIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6NzEwCittc2dpZCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBpbml0aWFsaXppbmcgYSBzdWJtb2R1bGUiCittc2dzdHIgIumYu+atouWtkOaooee1hOWIneWni+WMlueahOi8uOWHuiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjcxNQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBpbml0IFs8b3B0aW9ucz5dIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgaW5pdCBbPOmBuOmghT5dIFs86Lev5b6RPl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo3ODcgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjkxNAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLlnKggLmdpdG1vZHVsZXMg5Lit5rKS5pyJ55m854++6Lev5b6RICclcycg55qE5a2Q5qih57WE5pig5bCEIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXNvbHZlIEhFQUQgcmVmIGluc2lkZSB0aGUgc3VibW9kdWxlICclcyciCittc2dzdHIgIueEoeazleino+aekOWtkOaooee1hCAnJXMnIOeahCBIRUFEIOW8leeUqCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg1NCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLpgZ7ov7TlrZDmqKHntYQgJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo4NzggYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExODkKK21zZ2lkICJTdXBwcmVzcyBzdWJtb2R1bGUgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi6Zi75q2i5a2Q5qih57WE54uA5oWL6Ly45Ye6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODc5Cittc2dpZCAiIgorIlVzZSBjb21taXQgc3RvcmVkIGluIHRoZSBpbmRleCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdWJtb2R1bGUgIgorIkhFQUQiCittc2dzdHIgIuS9v+eUqOWEsuWtmOWcqOe0ouW8leS4reeahOaPkOS6pO+8jOiAjOmdnuWEsuWtmOWcqOWtkOaooee1hCBIRUFEIOS4reeahOaPkOS6pCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjg4MAorbXNnaWQgInJlY3Vyc2UgaW50byBuZXN0ZWQgc3VibW9kdWxlcyIKK21zZ3N0ciAi6YGe6L+06YCy5YWl5bWM5aWX5a2Q5qih57WE5LitIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6ODg1Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgWy0tcXVpZXRdIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbPOi3r+W+kT4uLi5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTA5Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgPHBhdGg+IgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSA86Lev5b6RPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICclcydcbiIKK21zZ3N0ciAi54K6ICclcycg5ZCM5q2l5a2Q5qih57WEIHVybFxuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIueEoeazleeCuuWtkOaooee1hOi3r+W+kSAnJXMnIOiou+WGiiB1cmwiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCByZW1vdGUgZm9yIHN1Ym1vZHVsZSAnJXMnIgorbXNnc3RyICLnhKHms5XlvpfliLDlrZDmqKHntYQgJyVzJyDnmoTpoJDoqK3pgaDnq6/pl5zoga8iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgcmVtb3RlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV54K65a2Q5qih57WEICclcycg5pu05paw6YGg56uv6Zec6IGvIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1MQorbXNnaWQgIlN1cHByZXNzIG91dHB1dCBvZiBzeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwiCittc2dzdHIgIumYu+atouWtkOaooee1hCB1cmwg5ZCM5q2l55qE6Ly45Ye6IgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTA1OAorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jIFstLXF1aWV0XSBbLS1yZWN1cnNpdmVdIFs8cGF0aD5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgc3luYyBbLS1xdWlldF0gWy0tcmVjdXJzaXZlXSBbPOi3r+W+kT5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTExMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkgKHVzZSAncm0gLXJmJyBpZiB5b3UgIgorInJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIuWtkOaooee1hOW3peS9nOWNgCAnJXMnIOWMheWQq+S4gOWAiyAuZ2l0IOebrumMhO+8iOWmguaenOaCqOeiuumcgOWIqumZpOWug+WPiuWFtuWFqOmDqOatt+WPsu+8jOS9v+eUqCAncm0gIgorIi1yZicg5oyH5Luk77yJIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJXMnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIGRpc2NhcmQgIgorInRoZW0iCittc2dzdHIgIuWtkOaooee1hOW3peS9nOWNgCAnJXMnIOWMheWQq+acrOapn+S/ruaUue+8m+S9v+eUqCAnLWYnIOaNqOajhOWug+WAkSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyVzJ1xuIgorbXNnc3RyICLlt7LmuIXpmaTnm67pjIQgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyVzJ1xuIgorbXNnc3RyICLnhKHms5Xnp7vpmaTlrZDmqKHntYTlt6XkvZzljYAgJyVzJ1xuIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIuS4jeiDveW7uueri+epuueahOWtkOaooee1hOebrumMhCAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICclcycgKCVzKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyVzJ1xuIgorbXNnc3RyICLlrZDmqKHntYQgJyVzJ++8iCVz77yJ5pyq5bCN6Lev5b6RICclcycg6Ki75YaKXG4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTkwCittc2dpZCAiUmVtb3ZlIHN1Ym1vZHVsZSB3b3JraW5nIHRyZWVzIGV2ZW4gaWYgdGhleSBjb250YWluIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIuWIqumZpOWtkOaooee1hOW3peS9nOWNgO+8jOWNs+S9v+WMheWQq+acrOapn+S/ruaUuSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjExOTEKK21zZ2lkICJVbnJlZ2lzdGVyIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLlsIfmiYDmnInlrZDmqKHntYTlj5bmtojoqLvlhooiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMTk2Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUgZGVpbml0IFstLXF1aWV0XSBbLWYgfCAtLWZvcmNlXSBbLS1hbGwgfCBbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZSBkZWluaXQgWy0tcXVpZXRdIFstZiB8IC0tZm9yY2VdIFstLWFsbCB8IFstLV0gWzzot6/lvpE+Li4uXV0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjEwCittc2dpZCAiVXNlICctLWFsbCcgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAi5aaC5p6c5oKo56K65a+m5oOz6KaB5bCN5omA5pyJ5a2Q5qih57WE5Z+36KGM5Y+W5raI5Yid5aeL5YyW77yM6KuL5L2/55SoICctLWFsbCciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMjc1Cittc2dpZCAiIgorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzE0IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzE3CisjLCBjLWZvcm1hdAorbXNnaWQgInN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBhZGQgYWx0ZXJuYXRlOiAlcyIKK21zZ3N0ciAi5a2Q5qih57WEICclcycg5LiN6IO95paw5aKe54mI5pys5bqr5YKZ6YG477yaJXMiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVFcnJvclN0cmF0ZWd5IGlzIG5vdCByZWNvZ25pemVkIgorbXNnc3RyICLkuI3og73orZjliKUgc3VibW9kdWxlLmFsdGVybmF0ZUVycm9yU3RyYXRlZ3kg55qE5Y+W5YC8ICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbHVlICclcycgZm9yIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbiBpcyBub3QgcmVjb2duaXplZCIKK21zZ3N0ciAi5LiN6IO96K2Y5YilIHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhaW9uIOeahOWPluWAvCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4MworbXNnaWQgIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIgorbXNnc3RyICLmlrDnmoTlrZDmqKHntYTlsIfopoHopIfoo73nmoTot6/lvpEiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxMzg2Cittc2dpZCAibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIKK21zZ3N0ciAi5paw5a2Q5qih57WE55qE5ZCN56ixIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM4OQorbXNnaWQgInVybCB3aGVyZSB0byBjbG9uZSB0aGUgc3VibW9kdWxlIGZyb20iCittc2dzdHIgIuikh+ijveWtkOaooee1hOeahCB1cmwg5L2N5Z2AIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTM5NworbXNnaWQgImRlcHRoIGZvciBzaGFsbG93IGNsb25lcyIKK21zZ3N0ciAi5re66KSH6KO955qE5rex5bqmIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQwMCBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NworbXNnaWQgImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIuW8t+WItumhr+ekuuikh+ijvemAsuW6piIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE0MDIgYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4OTkKKyN8IG1zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnaWQgImRpc2FsbG93IGNsb25pbmcgaW50byBub24tZW1wdHkgZGlyZWN0b3J5IgorbXNnc3RyICLkuI3lhYHoqLHopIfoo73oh7PpnZ7nqbrnmb3nm67pjIQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDA3Cittc2dpZCAiIgorImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSBbLS1wcmVmaXg9PHBhdGg+XSBbLS1xdWlldF0gWy0tcmVmZXJlbmNlICIKKyI8cmVwb3NpdG9yeT5dIFstLW5hbWUgPG5hbWU+XSBbLS1kZXB0aCA8ZGVwdGg+XSAtLXVybCA8dXJsPiAtLXBhdGggPHBhdGg+IgorbXNnc3RyICIiCisiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD086Lev5b6RPl0gWy0tcXVpZXRdIFstLXJlZmVyZW5jZSA854mI5pys5bqrIgorIj5dIFstLW5hbWUgPOWQjeWtlz5dIFstLWRlcHRoIDzmt7HluqY+XSAtLXVybCA8dXJsPiAtLXBhdGggPOi3r+W+kT4iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGNyZWF0ZS91c2UgJyVzJyBpbiBhbm90aGVyIHN1Ym1vZHVsZSdzIGdpdCBkaXIiCittc2dzdHIgIuaLkue1leWcqOWFtuS7luWtkOaooee1hOeahCBnaXQg6Lev5b6R5bu656uL77yP5L2/55So44CMJXPjgI0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi54Sh5rOV6KSH6KO9ICclcycg5Yiw5a2Q5qih57WE6Lev5b6RICclcyciCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDQ2CisjLCBjLWZvcm1hdAorI3wgbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dpZCAiZGlyZWN0b3J5IG5vdCBlbXB0eTogJyVzJyIKK21zZ3N0ciAi55uu6YyE5LiN5piv56m655qE77ya44CMJXPjgI0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBnZXQgc3VibW9kdWxlIGRpcmVjdG9yeSBmb3IgJyVzJyIKK21zZ3N0ciAi54Sh5rOV5b6X5YiwICclcycg55qE5a2Q5qih57WE55uu6YyEIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVwZGF0ZSBtb2RlICclcycgZm9yIHN1Ym1vZHVsZSBwYXRoICclcyciCittc2dzdHIgIuWtkOaooee1hCAnJTIkcycg55qE5pu05paw5qih5byPICclMSRzJyDnhKHmlYgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxNDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIgorbXNnc3RyICLngrrlrZDmqKHntYQgJyUyJHMnIOioreWumueahOabtOaWsOaooeW8jyAnJTEkcycg54Sh5pWIIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJXMnIG5vdCBpbml0aWFsaXplZCIKK21zZ3N0ciAi5a2Q5qih57WEICclcycg5bCa5pyq5Yid5aeL5YyWIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTU5OAorbXNnaWQgIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICLkuZ/oqLHmgqjmg7PopoHln7fooYwgJ3VwZGF0ZSAtLWluaXQn77yfIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTYyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyB1bm1lcmdlZCBzdWJtb2R1bGUgJXMiCittc2dzdHIgIueVpemBjuacquWQiOS9teeahOWtkOaooee1hCAlcyIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgc3VibW9kdWxlICclcyciCittc2dzdHIgIueVpemBjuWtkOaooee1hCAnJXMnIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTgwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2xvbmUgJyVzJy4gUmV0cnkgc2NoZWR1bGVkIgorbXNnc3RyICLopIfoo70gJyVzJyDlpLHmlZfjgILmjInoqIjlioPph43oqaYiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjbG9uZSAnJXMnIGEgc2Vjb25kIHRpbWUsIGFib3J0aW5nIgorbXNnc3RyICLnrKzkuozmrKHlmJfoqabopIfoo70gJyVzJyDlpLHmlZfvvIzpm6LplosiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODc2IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTIwCittc2dpZCAicGF0aCBpbnRvIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuWIsOW3peS9nOWNgOeahOi3r+W+kSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE4NzkKK21zZ2lkICJwYXRoIGludG8gdGhlIHdvcmtpbmcgdHJlZSwgYWNyb3NzIG5lc3RlZCBzdWJtb2R1bGUgYm91bmRhcmllcyIKK21zZ3N0ciAi5bel5L2c5Y2A5Lit55qE6Lev5b6R77yM6YGe6L+05bWM5aWX5a2Q5qih57WEIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg4MworbXNnaWQgInJlYmFzZSwgbWVyZ2UsIGNoZWNrb3V0IG9yIG5vbmUiCittc2dzdHIgInJlYmFzZeOAgW1lcmdl44CBY2hlY2tvdXQg5oiWIG5vbmUiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODg5Cittc2dpZCAiQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0cnVuY2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcmV2aXNpb25zIgorbXNnc3RyICLlu7rnq4vkuIDlgIvmjIflrprmt7HluqbnmoTmt7ropIfoo70iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxODkyCittc2dpZCAicGFyYWxsZWwgam9icyIKK21zZ3N0ciAi5Lim55m85Lu75YuZIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NAorbXNnaWQgIndoZXRoZXIgdGhlIGluaXRpYWwgY2xvbmUgc2hvdWxkIGZvbGxvdyB0aGUgc2hhbGxvdyByZWNvbW1lbmRhdGlvbiIKK21zZ3N0ciAi5Yid5aeL6KSH6KO95piv5ZCm5oeJ6Kmy6YG15a6I5o6o6Jam55qE5re66KSH6KO96YG46aCFIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MTg5NQorbXNnaWQgImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiCittc2dzdHIgIuS4jeimgei8uOWHuuikh+ijvemAsuW6piIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MDQKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD08cGF0aD5dIFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgdXBkYXRlLWNsb25lIFstLXByZWZpeD086Lev5b6RPl0gWzzot6/lvpE+Li4uXSIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjE5MTcKK21zZ2lkICJiYWQgdmFsdWUgZm9yIHVwZGF0ZSBwYXJhbWV0ZXIiCittc2dzdHIgInVwZGF0ZSDlj4Pmlbjlj5blgLzpjK/oqqQiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoxOTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgKCVzKSBicmFuY2ggY29uZmlndXJlZCB0byBpbmhlcml0IGJyYW5jaCBmcm9tIHN1cGVycHJvamVjdCwgYnV0ICIKKyJ0aGUgc3VwZXJwcm9qZWN0IGlzIG5vdCBvbiBhbnkgYnJhbmNoIgorbXNnc3RyICLlrZDmqKHntYTvvIglc++8ieeahOWIhuaUr+ioreWumueCuue5vOaJv+S4iue0mumgheebrueahOWIhuaUr++8jOS9huaYr+S4iue0mumgheebruS4jeWcqOS7u+S9leWIhuaUr+S4iiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIwODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGdldCBhIHJlcG9zaXRvcnkgaGFuZGxlIGZvciBzdWJtb2R1bGUgJyVzJyIKK21zZ3N0ciAi54Sh5rOV542y5b6X5a2Q5qih57WEICclcycg55qE54mI5pys5bqr5Y+l5p+EIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjEyMQorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIgorbXNnc3RyICLlnKjlrZDmqKHntYTkuK3pgZ7ov7QiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTI3Cittc2dpZCAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGFic29yYi1naXQtZGlycyBbPOmBuOmghT5dIFs86Lev5b6RPi4uLl0iCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMTgzCittc2dpZCAiY2hlY2sgaWYgaXQgaXMgc2FmZSB0byB3cml0ZSB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSIKK21zZ3N0ciAi5qqi5p+l5a+r5YWlIC5naXRtb2R1bGVzIOaqlOahiOaYr+WQpuWuieWFqCIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxODYKK21zZ2lkICJ1bnNldCB0aGUgY29uZmlnIGluIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIgorbXNnc3RyICLlj5bmtoggLmdpdG1vZHVsZXMg5qqU5qGI5Lit55qE6Kit5a6aIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MQorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgPG5hbWU+IFs8dmFsdWU+XSIKK21zZ3N0ciAiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyA85ZCN56ixPiBbPOWAvD5dIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjE5MgorbXNnaWQgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCA8bmFtZT4iCittc2dzdHIgImdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgLS11bnNldCA85ZCN56ixPiIKKworIzogYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jOjIxOTMKK21zZ2lkICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorbXNnc3RyICJnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlIgorCisjOiBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmM6MjIxMiBnaXQtc3VibW9kdWxlLnNoOjE3MworIywgc2gtZm9ybWF0Cittc2dpZCAicGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuiri+eiuuiqjSAuZ2l0bW9kdWxlcyDmqpTmoYjlnKjlt6XkvZzljYDoo6EiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjYyIGdpdC5jOjQzMyBnaXQuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZG9lc24ndCBzdXBwb3J0IC0tc3VwZXItcHJlZml4IgorbXNnc3RyICIlcyDkuI3mlK/mj7QgLS1zdXBlci1wcmVmaXgiCisKKyM6IGJ1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYzoyMjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgc3VibW9kdWxlLS1oZWxwZXIgc3ViY29tbWFuZCIKK21zZ3N0ciAiJyVzJyDkuI3mmK/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/kuIDlgIvmnInmlYjnmoTmqJnnsaTlkI3nqLHjgIIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLmqJnnsaQgJyVzJyDlt7LlrZjlnKgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAi5bey5pu05paw5qiZ57GkICclcyfvvIjmm77ngrogJXPvvIlcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjUwMQorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICLlsZXplovnianku7bkuK0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIuW7uueri+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+aOpyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDY3Cittc2dpZCAibWFyayBmaWxlcyBhcyBmc21vbml0b3IgdmFsaWQiCittc2dzdHIgIuaomeiomOaqlOahiOeCuiBmc21vbml0b3Ig5pyJ5pWIIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwNzAKK21zZ2lkICJjbGVhciBmc21vbml0b3IgdmFsaWQgYml0IgorbXNnc3RyICLmuIXpmaQgZnNtb25pdG9yIOacieaViOS9jSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTczCittc2dpZCAiIgorImNvcmUuc3BsaXRJbmRleCBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCB0byAiCisiZW5hYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJjb3JlLnNwbGl0SW5kZXgg6KKr6Kit5a6a54K6IGZhbHNl44CC5aaC5p6c5oKo56K65a+m6KaB5ZWf55So57Si5byV5YiG5Ymy77yM6KuL5Yiq6Zmk5oiW5L+u5pS55a6D44CCIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjExODIKK21zZ2lkICIiCisiY29yZS5zcGxpdEluZGV4IGlzIHNldCB0byB0cnVlOyByZW1vdmUgb3IgY2hhbmdlIGl0LCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gIgorImRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgImNvcmUuc3BsaXRJbmRleCDooqvoqK3lrprngrogdHJ1ZeOAguWmguaenOaCqOeiuuWvpuimgeemgeeUqOe0ouW8leWIhuWJsu+8jOiri+WIqumZpOaIluS/ruaUueWug+OAgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMTk0Cittc2dpZCAiIgorImNvcmUudW50cmFja2VkQ2FjaGUgaXMgc2V0IHRvIHRydWU7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZGlzYWJsZSB0aGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSDooqvoqK3lrprngrogdHJ1ZeOAguWmguaenOaCqOeiuuWvpuimgeemgeeUqOacqui/vei5pOaqlOahiOW/q+WPlu+8jOiri+WIqumZpOaIluS/riIKKyLmlLnlroPjgIIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTE5OAorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAi5b+r5Y+W5pyq6L+96Lmk5qqU5qGI6KKr56aB55SoIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMDYKK21zZ2lkICIiCisiY29yZS51bnRyYWNrZWRDYWNoZSBpcyBzZXQgdG8gZmFsc2U7IHJlbW92ZSBvciBjaGFuZ2UgaXQsIGlmIHlvdSByZWFsbHkgd2FudCAiCisidG8gZW5hYmxlIHRoZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIiIKKyJjb3JlLnVudHJhY2tlZENhY2hlIOiiq+ioreWumueCuiBmYWxzZeOAguWmguaenOaCqOeiuuWvpuimgeWVn+eUqOacqui/vei5pOaqlOahiOW/q+WPlu+8jOiri+WIqumZpOaIliIKKyLkv67mlLnlroPjgIIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgZW5hYmxlZCBmb3IgJyVzJyIKK21zZ3N0ciAi5b+r5Y+W5pyq6L+96Lmk5qqU5qGI5ZyoICclcycg5ZWf55SoIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMTgKK21zZ2lkICJjb3JlLmZzbW9uaXRvciBpcyB1bnNldDsgc2V0IGl0IGlmIHlvdSByZWFsbHkgd2FudCB0byBlbmFibGUgZnNtb25pdG9yIgorbXNnc3RyICJjb3JlLmZzbW9uaXRvciDmnKroqK3lrprvvJvlpoLmnpzmg7PopoHllZ/nlKggZnNtb25pdG9yIOiri+ioreWumuipsumBuOmghSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjIyCittc2dpZCAiZnNtb25pdG9yIGVuYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciDooqvllZ/nlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTIyNQorbXNnaWQgIiIKKyJjb3JlLmZzbW9uaXRvciBpcyBzZXQ7IHJlbW92ZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBmc21vbml0b3IiCittc2dzdHIgImNvcmUuZnNtb25pdG9yIOW3suioreWumu+8m+WmguaenOaDs+imgeemgeeUqCBmc21vbml0b3Ig6KuL56e76Zmk6Kmy6YG46aCFIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyMjkKK21zZ2lkICJmc21vbml0b3IgZGlzYWJsZWQiCittc2dzdHIgImZzbW9uaXRvciDooqvnpoHnlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPOmBuOmghT5dIC1kIDzlvJXnlKjlkI0+IFs86IiK5YC8Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzzpgbjpoIU+XSAgICA85byV55So5ZCNPiA85paw5YC8PiBbPOiIiuWAvD5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMgorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzzpgbjpoIU+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NAorbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICLliKrpmaTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICLmm7TmlrAgPOW8leeUqOWQjT4g5pys6Lqr6ICM5LiN5piv5a6D5oyH5ZCR55qE5byV55SoIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICLmqJnmupbovLjlhaXmnInku6UgTlVMIOWtl+WFg+e1guatoueahOWPg+aVuCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgIuW+nuaomea6lui8uOWFpeiugOWPluabtOaWsCIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo3Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE1Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAi5b6e6aCt6ZaL5aeL5pu05paw5qqU5qGI6KiK5oGvIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MTEKK21zZ2lkICJnaXQgdXBsb2FkLXBhY2sgWzxvcHRpb25zPl0gPGRpcj4iCittc2dzdHIgImdpdCB1cGxvYWQtcGFjayBbPOmBuOmghT5dIDznm67pjIQ+IgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjMgdC9oZWxwZXIvdGVzdC1zZXJ2ZS12Mi5jOjE3Cittc2dpZCAicXVpdCBhZnRlciBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIGV4Y2hhbmdlIgorbXNnc3RyICLlnKjkuIDmrKHllq7njajnmoToq4vmsYIv5Zue5oeJ5LmL5b6M6Zui6ZaLIgorCisjOiBidWlsdGluL3VwbG9hZC1wYWNrLmM6MjUKK21zZ2lkICJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGluaXRpYWwgcmVmIGFkdmVydGlzZW1lbnQiCittc2dzdHIgIuWcqOWIneWni+eahOW8leeUqOW7o+WRiuW+jOeri+WNs+mboumWiyIKKworIzogYnVpbHRpbi91cGxvYWQtcGFjay5jOjI3Cittc2dpZCAiZG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBHaXQgZGlyZWN0b3J5IgorbXNnc3RyICLlpoLmnpwgPOebrumMhD4g5LiN5piv5LiA5YCLIEdpdCDnm67pjITvvIzkuI3opoHlmJfoqaYgPOebrumMhD4vLmdpdC8iCisKKyM6IGJ1aWx0aW4vdXBsb2FkLXBhY2suYzoyOQorbXNnaWQgImludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5IgorbXNnc3RyICLkuI3mtLvli5UgPG4+IOenkumQmOW+jOe1guatouWCs+i8uCIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTkKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OAorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAi5YiX5Y2w5o+Q5Lqk5YWn5a65IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo2OSBidWlsdGluL3ZlcmlmeS10YWcuYzozNworbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAi5YiX5Y2w5Y6f5aeLIGdwZyDni4DmhYvovLjlh7oiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NQorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA85YyFPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY1Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAi6Kmz57Sw6Ly45Ye6IgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjcKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAi5Y+q6aGv56S657Wx6KiIIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxOAorbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gWy0tZm9ybWF0PTxmb3JtYXQ+XSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSBbLS1mb3JtYXQ9POagvOW8jz5dIDzmqJnnsaQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzozNgorbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAi5YiX5Y2w5qiZ57Gk5YWn5a65IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTcKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiBbPGNvbW1pdC1pc2g+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBbPOmBuOmghT5dIDzot6/lvpE+IFs85o+Q5LqkPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOAorbXNnaWQgImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgbGlzdCBbPOmBuOmghT5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTkKK21zZ2lkICJnaXQgd29ya3RyZWUgbG9jayBbPG9wdGlvbnM+XSA8cGF0aD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBsb2NrIFs86YG46aCFPl0gPOi3r+W+kT4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMAorbXNnaWQgImdpdCB3b3JrdHJlZSBtb3ZlIDx3b3JrdHJlZT4gPG5ldy1wYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIG1vdmUgPOW3peS9nOWNgD4gPOaWsOi3r+W+kT4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMQorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs86YG46aCFPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMgorbXNnaWQgImdpdCB3b3JrdHJlZSByZW1vdmUgWzxvcHRpb25zPl0gPHdvcmt0cmVlPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHJlbW92ZSBbPOmBuOmghT5dIDzlt6XkvZzljYA+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMKK21zZ2lkICJnaXQgd29ya3RyZWUgdW5sb2NrIDxwYXRoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHVubG9jayA86Lev5b6RPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjYwIGJ1aWx0aW4vd29ya3RyZWUuYzo4OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSAnJXMnIgorbXNnc3RyICLliKrpmaQgJyVzJyDlpLHmlZciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAi5Yiq6Zmk5bel5L2c5Y2ALyVz77ya5LiN5piv5LiA5YCL5pyJ5pWI55qE55uu6YyEIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi5Yiq6ZmkIHdvcmt0cmVlcy8lc++8mmdpdGRpciDmqpTmoYjkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MCBidWlsdGluL3dvcmt0cmVlLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICLliKrpmaQgd29ya3RyZWVzLyVz77ya54Sh5rOV6K6A5Y+WIGdpdGRpciDmqpTmoYggKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBzaG9ydCByZWFkIChleHBlY3RlZCAlPFBSSXVNQVg+IGJ5dGVzLCByZWFkICIKKyIlPFBSSXVNQVg+KSIKK21zZ3N0ciAi5Yiq6Zmk5bel5L2c5qi5LyVz77ya6K6A5Y+W6YGO55+t77yI5pyf5pybICU8UFJJdU1BWD4g5L2N5YWD57WE77yM6K6A5Y+WICU8UFJJdU1BWD7vvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICLliKrpmaQgd29ya3RyZWVzLyVz77ya54Sh5pWI55qEIGdpdGRpciDmqpTmoYgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICLliKrpmaQgd29ya3RyZWVzLyVz77yaZ2l0ZGlyIOaqlOahiOeahOaMh+WQkeS4jeWtmOWcqCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE2NQorbXNnaWQgInJlcG9ydCBwcnVuZWQgd29ya2luZyB0cmVlcyIKK21zZ3N0ciAi5aCx5ZGK5riF6Zmk55qE5bel5L2c5Y2AIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTY3Cittc2dpZCAiZXhwaXJlIHdvcmtpbmcgdHJlZXMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIuWwh+aXqeaWvCA85pmC6ZaTPiDnmoTlt6XkvZzljYDpgY7mnJ8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyDlt7LntpPlrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlLWFkZCB3b3JrdHJlZSAnJXMnIgorbXNnc3RyICLnhKHms5Xlho3mrKHmlrDlop7lt6XkvZzljYAgJyVzJyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGxvY2tlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZiAtZicgdG8gb3ZlcnJpZGUsIG9yICd1bmxvY2snIGFuZCAncHJ1bmUnIG9yICdyZW1vdmUnIHRvIGNsZWFyIgorbXNnc3RyICIiCisiJyVzJyDmmK/kuIDlgIvpgbrlpLHkvYbpjpblrprnmoTlt6XkvZzljYDvvIzkvb/nlKhcbiIKKyInYWRkIC1mIC1mJyDopobok4vvvIzmiJYgJ3VubG9jaycg5ZKMICdwcnVuZScg5oiWICdyZW1vdmUnIOa4hemZpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBpcyBhIG1pc3NpbmcgYnV0IGFscmVhZHkgcmVnaXN0ZXJlZCB3b3JrdHJlZTtcbiIKKyJ1c2UgJ2FkZCAtZicgdG8gb3ZlcnJpZGUsIG9yICdwcnVuZScgb3IgJ3JlbW92ZScgdG8gY2xlYXIiCittc2dzdHIgIiIKKyInJXMnIOaYr+S4gOWAi+mBuuWkseS9huW3sue2k+iou+WGiueahOW3peS9nOWNgO+8jOS9v+eUqFxuIgorIidhZGQgLWYnIOimhuiTi++8jOaIliAncHJ1bmUnIOaIliAncmVtb3ZlJyDmuIXpmaQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bu656uL55uu6YyEICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MzkgYnVpbHRpbi93b3JrdHJlZS5jOjQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKG5ldyBicmFuY2ggJyVzJykiCittc2dzdHIgIua6luWCmeW3peS9nOWNgO+8iOaWsOWIhuaUryAnJXMn77yJIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyB3b3JrdHJlZSAocmVzZXR0aW5nIGJyYW5jaCAnJXMnOyB3YXMgYXQgJXMpIgorbXNnc3RyICLmupblgpnlt6XkvZzljYDvvIjph43oqK3liIbmlK8gJyVzJ++8jOS5i+WJjeeCuiAlc++8iSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgd29ya3RyZWUgKGNoZWNraW5nIG91dCAnJXMnKSIKK21zZ3N0ciAi5rqW5YKZ5bel5L2c5Y2A77yI57C95Ye6ICclcyfvvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nIHdvcmt0cmVlIChkZXRhY2hlZCBIRUFEICVzKSIKK21zZ3N0ciAi5rqW5YKZ5bel5L2c5Y2A77yI5YiG6Zui6ZaL6aCt5oyH5qiZICVz77yJIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDk3Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICLnsL3lh7ogPOWIhuaUrz7vvIzljbPkvb/lt7LntpPooqvnsL3lh7rliLDlhbblroPlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDAKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLlu7rnq4vkuIDlgIvmlrDliIbmlK8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDIKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgIuW7uueri+aIlumHjeioreS4gOWAi+WIhuaUryIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjUwNAorbXNnaWQgInBvcHVsYXRlIHRoZSBuZXcgd29ya2luZyB0cmVlIgorbXNnc3RyICLnlJ/miJDmlrDnmoTlt6XkvZzljYAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MDUKK21zZ2lkICJrZWVwIHRoZSBuZXcgd29ya2luZyB0cmVlIGxvY2tlZCIKK21zZ3N0ciAi6Y6W5a6a5paw5bel5L2c5Y2AIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTA4Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtYnJhbmNoKDEpKSIKK21zZ3N0ciAi6Kit5a6a6L+96Lmk5qih5byP77yI5Y+D6KaLIGdpdC1icmFuY2goMSnvvIkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1MTEKK21zZ2lkICJ0cnkgdG8gbWF0Y2ggdGhlIG5ldyBicmFuY2ggbmFtZSB3aXRoIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi5ZiX6Kmm54K65paw5YiG5pSv5ZCN56ym5ZCI5LiA5YCL6YGg56uv6L+96Lmk5YiG5pSvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTE5Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWLjgIEtQiDlkowgLS1kZXRhY2gg5piv5LqS5pal55qEIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgwCittc2dpZCAiLS1bbm8tXXRyYWNrIGNhbiBvbmx5IGJlIHVzZWQgaWYgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQiCittc2dzdHIgIuWPquiDveWcqOW7uueri+aWsOWIhuaUr+aZguS9v+eUqOmBuOmghSAtLVtuby1ddHJhY2sgIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NjgwCittc2dpZCAicmVhc29uIGZvciBsb2NraW5nIgorbXNnc3RyICLpjpblrprljp/lm6AiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo2OTIgYnVpbHRpbi93b3JrdHJlZS5jOjcyNSBidWlsdGluL3dvcmt0cmVlLmM6Nzk5CisjOiBidWlsdGluL3dvcmt0cmVlLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOWAi+W3peS9nOWNgCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5NCBidWlsdGluL3dvcmt0cmVlLmM6NzI3Cittc2dpZCAiVGhlIG1haW4gd29ya2luZyB0cmVlIGNhbm5vdCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQiCittc2dzdHIgIuS4u+W3peS9nOWNgOeEoeazleiiq+WKoOmOluaIluino+mOliIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgbG9ja2VkLCByZWFzb246ICVzIgorbXNnc3RyICInJXMnIOW3suiiq+mOluWumu+8jOWOn+WboO+8miVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBsb2NrZWQiCittc2dzdHIgIiclcycg5bey6KKr6Y6W5a6aIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGxvY2tlZCIKK21zZ3N0ciAiJyVzJyDmnKrooqvpjpblrpoiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NzAKK21zZ2lkICJ3b3JraW5nIHRyZWVzIGNvbnRhaW5pbmcgc3VibW9kdWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVtb3ZlZCIKK21zZ3N0ciAi5LiN6IO956e75YuV5oiW5Yiq6Zmk5YyF5ZCr5a2Q5qih57WE55qE5bel5L2c5Y2AIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Nzc4Cittc2dpZCAiZm9yY2UgbW92ZSBldmVuIGlmIHdvcmt0cmVlIGlzIGRpcnR5IG9yIGxvY2tlZCIKK21zZ3N0ciAi5by35Yi256e75YuV77yM5Y2z5L2/5bel5L2c5Y2A5piv6auS55qE5oiW5bey6Y6W5a6aIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODAxIGJ1aWx0aW4vd29ya3RyZWUuYzo5MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhIG1haW4gd29ya2luZyB0cmVlIgorbXNnc3RyICInJXMnIOaYr+S4gOWAi+S4u+W3peS9nOWNgCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZmlndXJlIG91dCBkZXN0aW5hdGlvbiBuYW1lIGZyb20gJyVzJyIKK21zZ3N0ciAi54Sh5rOV5b6eICclcycg566X5Ye655uu5qiZ5ZCN56ixIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhcmdldCAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLnm67mqJkgJyVzJyDlt7LlrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZSwgbG9jayByZWFzb246ICVzXG4iCisidXNlICdtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLnhKHms5Xnp7vli5XkuIDlgIvpjpblrprnmoTlt6XkvZzljYDvvIzpjpblrprljp/lm6DvvJolc1xuIgorIuS9v+eUqCAnbW92ZSAtZiAtZicg6KaG6JOL5oiW5YWI6Kej6Y6WIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODIyCittc2dpZCAiIgorImNhbm5vdCBtb3ZlIGEgbG9ja2VkIHdvcmtpbmcgdHJlZTtcbiIKKyJ1c2UgJ21vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIueEoeazleenu+WLleS4gOWAi+mOluWumueahOW3peS9nOWNgO+8jFxuIgorIuS9v+eUqCAnbW92ZSAtZiAtZicg6KaG6JOL5oiW5YWI6Kej6Y6WIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6ODI1CisjLCBjLWZvcm1hdAorbXNnaWQgInZhbGlkYXRpb24gZmFpbGVkLCBjYW5ub3QgbW92ZSB3b3JraW5nIHRyZWU6ICVzIgorbXNnc3RyICLpqZforYnlpLHmlZfvvIznhKHms5Xnp7vli5Xlt6XkvZzljYDvvJolcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjgzMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbW92ZSAnJXMnIHRvICclcyciCittc2dzdHIgIuenu+WLlSAnJXMnIOWIsCAnJXMnIOWkseaVlyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnIgorbXNnc3RyICLlnKggJyVzJyDkuK3ln7fooYwgJ2dpdCBzdGF0dXMnIOWkseaVlyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNvbnRhaW5zIG1vZGlmaWVkIG9yIHVudHJhY2tlZCBmaWxlcywgdXNlIC0tZm9yY2UgdG8gZGVsZXRlIGl0IgorbXNnc3RyICInJXMnIOWMheWQq+S/ruaUueaIluacqui/vei5pOeahOaqlOahiO+8jOS9v+eUqCAtLWZvcmNlIOWIqumZpCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjg4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcnVuICdnaXQgc3RhdHVzJyBvbiAnJXMnLCBjb2RlICVkIgorbXNnc3RyICLlnKggJyVzJyDkuK3ln7fooYwgJ2dpdCBzdGF0dXMnIOWkseaVl++8jOmboumWi+eivCAlZCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkxMAorbXNnaWQgImZvcmNlIHJlbW92YWwgZXZlbiBpZiB3b3JrdHJlZSBpcyBkaXJ0eSBvciBsb2NrZWQiCittc2dzdHIgIuW8t+WItuWIqumZpO+8jOWNs+S9v+W3peS9nOWNgOaYr+mrkueahOaIluW3sumOluWumiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjkzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWUsIGxvY2sgcmVhc29uOiAlc1xuIgorInVzZSAncmVtb3ZlIC1mIC1mJyB0byBvdmVycmlkZSBvciB1bmxvY2sgZmlyc3QiCittc2dzdHIgIiIKKyLnhKHms5XliKrpmaTkuIDlgIvpjpblrprnmoTlt6XkvZzljYDvvIzpjpblrprljp/lm6DvvJolc1xuIgorIuS9v+eUqCAncmVtb3ZlIC1mIC1mJyDopobok4vmiJblhYjop6PpjpYiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzUKK21zZ2lkICIiCisiY2Fubm90IHJlbW92ZSBhIGxvY2tlZCB3b3JraW5nIHRyZWU7XG4iCisidXNlICdyZW1vdmUgLWYgLWYnIHRvIG92ZXJyaWRlIG9yIHVubG9jayBmaXJzdCIKK21zZ3N0ciAiIgorIueEoeazleWIqumZpOS4gOWAi+mOluWumueahOW3peS9nOWNgO+8jFxuIgorIuS9v+eUqCAncmVtb3ZlIC1mIC1mJyDopobok4vmiJblhYjop6PpjpYiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidmFsaWRhdGlvbiBmYWlsZWQsIGNhbm5vdCByZW1vdmUgd29ya2luZyB0cmVlOiAlcyIKK21zZ3N0ciAi6amX6K2J5aSx5pWX77yM54Sh5rOV5Yiq6Zmk5bel5L2c5Y2A77yaJXMiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjE1Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD085YmN57a0Pi9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOAorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAiPOWJjee2tD4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyOQorbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAi5bCHIDzliY3ntrQ+IOWtkOebrumMhOWFp+WuueWvq+WIsOS4gOWAi+aoueeLgOeJqeS7tiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzEKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICLlj6rlsI3pmaTpjK/mnInnlKgiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzEyNQorIywgYy1mb3JtYXQKK21zZ2lkICJFeHBlY3RlZCAnbWFyaycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICLpoJDmnJ8gJ21hcmsnIOaMh+S7pO+8jOW+l+WIsCAlcyIKKworIzogZmFzdC1pbXBvcnQuYzozMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkV4cGVjdGVkICd0bycgY29tbWFuZCwgZ290ICVzIgorbXNnc3RyICLpoJDmnJ8gJ3RvJyDmjIfku6TvvIzlvpfliLAgJXMiCisKKyM6IGZhc3QtaW1wb3J0LmM6MzI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJmZWF0dXJlICclcycgZm9yYmlkZGVuIGluIGlucHV0IHdpdGhvdXQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiCittc2dzdHIgIiIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcGVybWlzc2lvbnMgb24geW91ciBzb2NrZXQgZGlyZWN0b3J5IGFyZSB0b28gbG9vc2U7IG90aGVyXG4iCisidXNlcnMgbWF5IGJlIGFibGUgdG8gcmVhZCB5b3VyIGNhY2hlZCBjcmVkZW50aWFscy4gQ29uc2lkZXIgcnVubmluZzpcbiIKKyJcbiIKKyJcdGNobW9kIDA3MDAgJXMiCittc2dzdHIgIiIKKyLmgqjnmoQgc29ja2V0IOebrumMhOasiumZkOmBjuaWvOWvrOmshu+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/mj7Qgc2hhbGxsb3cg6IO95YqbIgorCisjOiByZW1vdGUtY3VybC5jOjEwMzcKK21zZ2lkICJmZXRjaCBmYWlsZWQuIgorbXNnc3RyICLlj5blvpflpLHmlZfjgIIiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTA4NQorbXNnaWQgImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIKK21zZ3N0ciAi54Sh5rOV6YCP6YGO5pm65oWnIEhUVFAg5Y+W5b6XIHNoYTEiCisKKyM6IHJlbW90ZS1jdXJsLmM6MTEyOSByZW1vdGUtY3VybC5jOjExMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAnJXMnIgorbXNnc3RyICLljZTlrprpjK/oqqTvvJrmnJ/mnJsgc2hhL3JlZu+8jOWNu+W+l+WIsCAnJXMnIgorCisjOiByZW1vdGUtY3VybC5jOjExNDcgcmVtb3RlLWN1cmwuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImh0dHAgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgJXMiCittc2dzdHIgImh0dHAg5YKz6Ly45Y2U5a6a5LiN5pSv5o+0ICVzIgorCisjOiByZW1vdGUtY3VybC5jOjExODMKK21zZ2lkICJnaXQtaHR0cC1wdXNoIGZhaWxlZCIKK21zZ3N0ciAiZ2l0LWh0dHAtcHVzaCDlpLHmlZciCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM2NworbXNnaWQgInJlbW90ZS1jdXJsOiB1c2FnZTogZ2l0IHJlbW90ZS1jdXJsIDxyZW1vdGU+IFs8dXJsPl0iCittc2dzdHIgInJlbW90ZS1jdXJs77ya55So5rOV77yaZ2l0IHJlbW90ZS1jdXJsIDzpgaDnq68+IFs8dXJsPl0iCisKKyM6IHJlbW90ZS1jdXJsLmM6MTM5OQorbXNnaWQgInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0IgorbXNnc3RyICJyZW1vdGUtY3VybO+8mumMr+iqpOiugOWPluS+huiHqiBnaXQg55qE5oyH5Luk5rWBIgorCisjOiByZW1vdGUtY3VybC5jOjE0MDYKK21zZ2lkICJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIgorbXNnc3RyICJyZW1vdGUtY3VybO+8muWYl+ippuaykuacieacrOapn+eJiOacrOW6q+S4i+WPluW+lyIKKworIzogcmVtb3RlLWN1cmwuYzoxNDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS1jdXJsOiB1bmtub3duIGNvbW1hbmQgJyVzJyBmcm9tIGdpdCIKK21zZ3N0ciAicmVtb3RlLWN1cmzvvJrmnKrnn6XnmoTkvoboh6ogZ2l0IOeahOaMh+S7pCAnJXMnIgorCisjOiBsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaDo4NQorbXNnaWQgImFyZ3MiCittc2dzdHIgIuWPg+aVuCIKKworIzogbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmg6ODYKK21zZ2lkICJvYmplY3QgZmlsdGVyaW5nIgorbXNnc3RyICLnianku7bpgY7mv74iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxODMKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAi5Yiw5pyf5pmC6ZaTIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTk3Cittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICLnqbrli5XkvZzvvIjlkJHlvoznm7jlrrnvvIkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMDkKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgIuabtOWKoOips+e0sCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxMQorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgIuabtOWKoOWuiemdnCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMxNworbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICLnlKggPG4+IOS9jeaVuOWtl+mhr+ekuiBTSEEtMSDpm5zmuYrlgLwiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzYKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICLoqK3lrprlpoLkvZXliKrpmaTmj5DkuqToqqrmmI7oo6HnmoTnqbrmoLzlkowgI+WCmeiouyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjMzNworI3wgbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnaWQgInJlYWQgcGF0aHNwZWMgZnJvbSBmaWxlIgorbXNnc3RyICLlvp7mqpTmoYjoroDlj5YgPOi3r+W+keimj+agvD4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDozMzgKKyN8IG1zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ2lkICIiCisid2l0aCAtLXBhdGhzcGVjLWZyb20tZmlsZSwgcGF0aHNwZWMgZWxlbWVudHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIuWmguS9v+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+W5raI5pqr5a2YIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAi5o2o5qOE5LqGICR7UkVWfSAoJHMpIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ977ya54Sh5rOV5o2o5qOE5YSy6JeP5qKd55uuIgorCisjOiBnaXQtbGVnYWN5LXN0YXNoLnNoOjc5MgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAi77yI54K65b6p5Y6f6LOH5paZ6Ly45YWlIFwiZ2l0IHN0YXNoIGFwcGx5XCLvvIkiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjAyCittc2dpZCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuWPquiDveWcqOW3peS9nOWNgOeahOmggue0muebrumMhOS4reS9v+eUqOebuOWwjei3r+W+kSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIueJiOacrOW6qyBVUkzvvJonJHJlcG8nIOW/hemgiOaYr+e1leWwjei3r+W+keaIluS7pSAuL3wuLi8g6LW35aeLIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcg5bey57aT5a2Y5Zyo5pa857Si5byV5LitIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXggYW5kIGlzIG5vdCBhIHN1Ym1vZHVsZSIKK21zZ3N0ciAiJyRzbV9wYXRoJyDlt7LntpPlrZjlnKjmlrzntKLlvJXkuK3kuJTkuI3mmK/kuIDlgIvlrZDmqKHntYQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGRvZXMgbm90IGhhdmUgYSBjb21taXQgY2hlY2tlZCBvdXQiCittc2dzdHIgIickc21fcGF0aCcg5rKS5pyJ57C95Ye655qE5o+Q5LqkIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI0NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyLku6XkuIvot6/lvpHooqvmgqjnmoTkuIDlgIsgLmdpdGlnbm9yZSDmqpTmoYjmiYDlv73nlaXvvJpcbiIKKyIkc21fcGF0aFxuIgorIuWmguaenOaCqOeiuuWvpuaDs+aWsOWinuWug++8jOS9v+eUqCAtZiDlj4PmlbjjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5paw5aKe5L2N5pa8ICckc21fcGF0aCcg55qE54++5a2Y54mI5pys5bqr5Yiw57Si5byVIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcg5bey5a2Y5Zyo5LiU5LiN5piv5LiA5YCL5pyJ5pWI55qEIGdpdCDniYjmnKzluqsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIuacrOapn+eZvOePviAnJHNtX25hbWUnIOeahOS4gOWAiyBnaXQg55uu6YyE77yM6IiH5YW25bCN5oeJ55qE6YGg56uv54mI5pys5bqr77yaIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbVxuIgorIiAgJHJlYWxyZXBvXG4iCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgIgorInJlcG9cbiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIuWmguaenOaCqOaDs+imgemHjeeUqOmAmeWAi+acrOapnyBnaXQg55uu6YyE6ICM6Z2e6YeN5paw6KSH6KO96IeqXG4iCisiICAkcmVhbHJlcG9cbiIKKyLkvb/nlKggJy0tZm9yY2UnIOmBuOmgheOAguWmguaenOacrOapnyBnaXQg55uu6YyE5LiN5piv5q2j56K655qE54mI5pys5bqrXG4iCisi5oiW6ICF5oKo5LiN56K65a6a6YCZ6KOh55qE5ZCr576p77yM5L2/55SoICctLW5hbWUnIOmBuOmghemBuOaTh+WPpuWklueahOWQjeeoseOAgiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIuWVn+WLleacrOapnyBnaXQg55uu6YyE5Yiw5a2Q5qih57WEICckc21fbmFtZSfjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzAwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIuS4jeiDveewveWHuuWtkOaooee1hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAi54Sh5rOV5paw5aKe5a2Q5qih57WEICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIueEoeazleiou+WGiuWtkOaooee1hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU4MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi54Sh5rOV5Zyo5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgnIOS4reaJvuWIsOebruWJjeeJiOacrCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLnhKHms5XlnKjlrZDmqKHntYTot6/lvpEgJyRzbV9wYXRoJyDkuK3lj5blvpciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZpbmQgY3VycmVudCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0gcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggIgorIickc21fcGF0aCciCittc2dzdHIgIueEoeazleWcqOWtkOaooee1hOi3r+W+kSAnJHNtX3BhdGgnIOS4reaJvuWIsOebruWJjeeJiOacrCAke3JlbW90ZV9uYW1lfS8ke2JyYW5jaH0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjEzCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOyB0cnlpbmcgdG8gZGlyZWN0bHkgZmV0Y2ggIgorIiRzaGExOiIKK21zZ3N0ciAi54Sh5rOV5Zyo5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgnIOS4reWPluW+l++8jOWYl+ippuebtOaOpeWPluW+lyAkc2hhMe+8miIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJGZXRjaGVkIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnLCBidXQgaXQgZGlkIG5vdCBjb250YWluICRzaGExLiAiCisiRGlyZWN0IGZldGNoaW5nIG9mIHRoYXQgY29tbWl0IGZhaWxlZC4iCittc2dzdHIgIuWPluW+l+S6huWtkOaooee1hOi3r+W+kSAnJGRpc3BsYXlwYXRoJ++8jOS9huaYr+Wug+aykuacieWMheWQqyAkc2hhMeOAguebtOaOpeWPluW+l+ipsuaPkOS6pOWkseaVl+OAgiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLnhKHms5XlnKjlrZDmqKHntYTot6/lvpEgJyRkaXNwbGF5cGF0aCcg5Lit57C95Ye6ICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjI3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAi5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgn77ya57C95Ye6ICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIueEoeazleWcqOWtkOaooee1hOi3r+W+kSAnJGRpc3BsYXlwYXRoJyDkuK3ph43lrprln7rlupUgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAi5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgn77ya6YeN5a6a5Z+65bqV6IezICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi54Sh5rOV5ZCI5L21ICckc2hhMScg5Yiw5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgnIOS4rSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAi5a2Q5qih57WE6Lev5b6RICckZGlzcGxheXBhdGgn77ya5bey5ZCI5L215YWlICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIuWcqOWtkOaooee1hCAnJGRpc3BsYXlwYXRoJyDkuK3ln7fooYwgJyRjb21tYW5kICRzaGExJyDlpLHmlZciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAi5a2Q5qih57WEICckZGlzcGxheXBhdGgn77yaJyRjb21tYW5kICRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIueEoeazlemBnui/tOmAsuWtkOaooee1hOi3r+W+kSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4ODYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICLpgbjpoIUgLS1jYWNoZWQg5LiN6IO95ZKM6YG46aCFIC0tZmlsZXMg5ZCM5pmC5L2/55SoIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkzOAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICLmhI/lpJbnmoTmqKHlvI8gJG1vZF9kc3QiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICDorablkYrvvJokZGlzcGxheV9uYW1lIOacquWMheWQq+aPkOS6pCAkc2hhMV9zcmMiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICDorablkYrvvJokZGlzcGxheV9uYW1lIOacquWMheWQq+aPkOS6pCAkc2hhMV9kc3QiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiICDorablkYrvvJokZGlzcGxheV9uYW1lIOacquWMheWQq+aPkOS6pCAkc2hhMV9zcmMg5ZKMICRzaGExX2RzdCIKKworIzogZ2l0LXBhcnNlLXJlbW90ZS5zaDo4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiU2VlIGdpdC0ke2NtZH0oMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICLoqbPoposgZ2l0LSR7Y21kfSgxKeOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjEwOQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAi5bey5oeJ55SoIGF1dG9zdGFzaOOAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjExMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICLkuI3og73lhLLlrZggJHN0YXNoX3NoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzaW5nICgkbmV3X2NvdW50LyR0b3RhbCkiCittc2dzdHIgIumHjeWumuWfuuW6leS4re+8iCRuZXdfY291bnQvJHRvdGFs77yJIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MjA3Cittc2dpZCAiIgorIlxuIgorIkNvbW1hbmRzOlxuIgorInAsIHBpY2sgPGNvbW1pdD4gPSB1c2UgY29tbWl0XG4iCisiciwgcmV3b3JkIDxjb21taXQ+ID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlXG4iCisiZSwgZWRpdCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZ1xuIgorInMsIHNxdWFzaCA8Y29tbWl0PiA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0XG4iCisiZiwgZml4dXAgPGNvbW1pdD4gPSBsaWtlIFwic3F1YXNoXCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2VcbiIKKyJ4LCBleGVjIDxjb21taXQ+ID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbFxuIgorImQsIGRyb3AgPGNvbW1pdD4gPSByZW1vdmUgY29tbWl0XG4iCisibCwgbGFiZWwgPGxhYmVsPiA9IGxhYmVsIGN1cnJlbnQgSEVBRCB3aXRoIGEgbmFtZVxuIgorInQsIHJlc2V0IDxsYWJlbD4gPSByZXNldCBIRUFEIHRvIGEgbGFiZWxcbiIKKyJtLCBtZXJnZSBbLUMgPGNvbW1pdD4gfCAtYyA8Y29tbWl0Pl0gPGxhYmVsPiBbIyA8b25lbGluZT5dXG4iCisiLiAgICAgICBjcmVhdGUgYSBtZXJnZSBjb21taXQgdXNpbmcgdGhlIG9yaWdpbmFsIG1lcmdlIGNvbW1pdCdzXG4iCisiLiAgICAgICBtZXNzYWdlIChvciB0aGUgb25lbGluZSwgaWYgbm8gb3JpZ2luYWwgbWVyZ2UgY29tbWl0IHdhc1xuIgorIi4gICAgICAgc3BlY2lmaWVkKS4gVXNlIC1jIDxjb21taXQ+IHRvIHJld29yZCB0aGUgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiVGhlc2UgbGluZXMgY2FuIGJlIHJlLW9yZGVyZWQ7IHRoZXkgYXJlIGV4ZWN1dGVkIGZyb20gdG9wIHRvIGJvdHRvbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuaMh+S7pDpcbiIKKyJwLCBwaWNrIDzmj5DkuqQ+ID0g5L2/55So5o+Q5LqkXG4iCisiciwgcmV3b3JkIDzmj5DkuqQ+ID0g5L2/55So5o+Q5Lqk77yM5L2G5L+u5pS55o+Q5Lqk6Kqq5piOXG4iCisiZSwgZWRpdCA85o+Q5LqkPiA9IOS9v+eUqOaPkOS6pO+8jOS9huWBnOS4i+S+huS/ruijnFxuIgorInMsIHNxdWFzaCA85o+Q5LqkPiA9IOS9v+eUqOaPkOS6pO+8jOS9huiejeWQiOWIsOWJjeS4gOWAi+aPkOS6pFxuIgorImYsIGZpeHVwIDzmj5DkuqQ+ID0g6aGe5Ly85pa8IFwic3F1YXNoXCLvvIzkvYbmjajmo4Tmj5DkuqToqqrmmI7ml6XoqoxcbiIKKyJ4LCBleGVjIDzmjIfku6Q+ID0g5L2/55SoIHNoZWxsIOWft+ihjOaMh+S7pO+8iOatpOihjOWJqemkmOmDqOWIhu+8iVxuIgorImQsIGRyb3AgPOaPkOS6pD4gPSDliKrpmaTmj5DkuqRcbiIKKyJsLCBsYWJlbCA85qiZ57GkPiA9IOeCuuebruWJjSBIRUFEIOaJk+S4iuaomeexpFxuIgorInQsIHJlc2V0IDzmqJnnsaQ+ID0g6YeN6KitIEhFQUQg5Yiw6Kmy5qiZ57GkXG4iCisibSwgbWVyZ2UgWy1DIDzmj5DkuqQ+IHwgLWMgPOaPkOS6pD5dIDzmqJnnsaQ+IFsjIDxvbmVsaW5lPl1cbiIKKyIuICAgICAgIOW7uueri+S4gOWAi+WQiOS9teaPkOS6pO+8jOS4puS9v+eUqOWOn+Wni+eahOWQiOS9teaPkOS6pOiqquaYju+8iOWmguaenOaykuacieaMh+WumlxuIgorIi4gICAgICAg5Y6f5aeL5o+Q5Lqk77yM5L2/55So5YKZ6Ki76YOo5YiG55qEIG9uZWxpbmUg5L2c54K65o+Q5Lqk6Kqq5piO77yJ44CC5L2/55SoXG4iCisiLiAgICAgICAtYyA85o+Q5LqkPiDlj6/ku6Xnt6jovK/mj5DkuqToqqrmmI7jgIJcbiIKKyJcbiIKKyLlj6/ku6XlsI3pgJnkupvooYzph43mlrDmjpLluo/vvIzlsIflvp7kuIroh7PkuIvln7fooYzjgIJcbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKyJcbiIKKyJcdGdpdCBjb21taXQgLS1hbWVuZCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1blxuIgorIlxuIgorIlx0Z2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorbXNnc3RyICIiCisi5oKo54++5Zyo5Y+v5Lul5L+u6KOc6YCZ5YCL5o+Q5Lqk77yM5L2/55SoXG4iCisiXG4iCisiXHRnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyLnlbbmgqjlsI3orormm7TmhJ/liLDmu7/mhI/vvIzln7fooYxcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjI5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHNoYTE6IG5vdCBhIGNvbW1pdCB0aGF0IGNhbiBiZSBwaWNrZWQiCittc2dzdHIgIiRzaGEx77ya5LiN5piv5LiA5YCL5Y+v5Lul6KKr5o+A6YG455qE5o+Q5LqkIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6MzM0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKK21zZ3N0ciAi54Sh5pWI55qE5o+Q5Lqk5ZCN77yaJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDozNjQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorbXNnc3RyICLkuI3og73lr6vlhaXnm67liY3mj5DkuqTnmoTmm7/ku6Mgc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQxNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorbXNnc3RyICLlv6vovYnliLAgJHNoYTEiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJHNoYTEiCittc2dzdHIgIuS4jeiDveW/q+i9ieWIsCAkc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG1vdmUgSEVBRCB0byAkZmlyc3RfcGFyZW50IgorbXNnc3RyICLkuI3og73np7vli5UgSEVBRCDliLAgJGZpcnN0X3BhcmVudCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gc3F1YXNoIGEgbWVyZ2U6ICRzaGExIgorbXNnc3RyICLmi5LntZXlo5PnuK7kuIDlgIvlkIjkvbXvvJokc2hhMSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVkb2luZyBtZXJnZSAkc2hhMSIKK21zZ3N0ciAi54Sh5rOV6YeN5YGa5ZCI5L21ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDU4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGljayAkc2hhMSIKK21zZ3N0ciAi5LiN6IO95o+A6YG4ICRzaGExIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjJHtufToiCittc2dzdHIgIumAmeaYr+aPkOS6pOiqquaYjiAjJHtufe+8miIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjQ3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVGhlIGNvbW1pdCBtZXNzYWdlICMke259IHdpbGwgYmUgc2tpcHBlZDoiCittc2dzdHIgIuaPkOS6pOiqquaYjiAjJHtufSDlsIfooqvot7PpgY7vvJoiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0LiIKK21zZ2lkX3BsdXJhbCAiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICRjb3VudCBjb21taXRzLiIKK21zZ3N0clswXSAi6YCZ5piv5LiA5YCLICRjb3VudCDlgIvmj5DkuqTnmoTntYTlkIjjgIIiCittc2dzdHJbMV0gIumAmeaYr+S4gOWAiyAkY291bnQg5YCL5o+Q5Lqk55qE57WE5ZCI44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NDkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKK21zZ3N0ciAi5LiN6IO95a+r5YWlICRmaXh1cF9tc2ciCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo0OTUKK21zZ2lkICJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgMiBjb21taXRzLiIKK21zZ3N0ciAi6YCZ5piv5LiA5YCLIDIg5YCL5o+Q5Lqk55qE57WE5ZCI44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NTM2IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1NzkKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAkc2hhMS4uLiAkcmVzdCIKK21zZ3N0ciAi5LiN6IO95oeJ55SoICRzaGExLi4uICRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFtZW5kIGNvbW1pdCBhZnRlciBzdWNjZXNzZnVsbHkgcGlja2luZyAkc2hhMS4uLiAkcmVzdFxuIgorIlRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlLCBvciB0aGUgcHJlLWNvbW1pdCBob29rXG4iCisiZmFpbGVkLiBJZiB0aGUgcHJlLWNvbW1pdCBob29rIGZhaWxlZCwgeW91IG1heSBuZWVkIHRvIHJlc29sdmUgdGhlIGlzc3VlICIKKyJiZWZvcmVcbiIKKyJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorbXNnc3RyICIiCisi5LiN6IO95Zyo5oiQ5Yqf5o+A6YG4ICRzaGExLi4uICRyZXN0IOS5i+W+jOS/ruijnOaPkOS6pFxuIgorIumAmemAmuW4uOaYr+WboOeCuuepuueahOaPkOS6pOiqquaYju+8jOaIluiAhSBwcmUtY29tbWl0IOaOm+mJpOWft+ihjOWkseaVl+OAguWmguaenOaYryBwcmUtY29tbWl0XG4iCisi5o6b6Ymk5Z+36KGM5aSx5pWX77yM5L2g5Y+v6IO96ZyA6KaB5Zyo6YeN5a+r5o+Q5Lqk6Kqq5piO5YmN6Kej5rG66YCZ5YCL5ZWP6aGM44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjI2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGVkIGF0ICRzaGExX2FiYnJldi4uLiAkcmVzdCIKK21zZ3N0ciAi5YGc5q2i5ZyoICRzaGExX2FiYnJldi4uLiAkcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY0MQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLmspLmnInniLbmj5DkuqTnmoTmg4Xms4HkuIvkuI3og70gJyRzcXVhc2hfc3R5bGUnIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFeGVjdXRpbmc6ICRyZXN0IgorbXNnc3RyICLln7fooYzvvJokcmVzdCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCittc2dzdHIgIuWft+ihjOWkseaVl++8miRyZXN0IgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6NjkzCittc2dpZCAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuS4puS4lOS/ruaUuee0ouW8leWSjC/miJblt6XkvZzljYAiCisKKyMgIOitr+iAhe+8muiri+e2reaMgeWJjeWwjuepuuagvAorIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjY5NQorbXNnaWQgIiIKKyJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyLmgqjlj6/ku6Xop6PmsbrpgJnlgIvllY/poYzvvIznhLblvozln7fooYxcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIy4gVFJBTlNMQVRPUlM6IGFmdGVyIHRoZXNlIGxpbmVzIGlzIGEgY29tbWFuZCB0byBiZSBpc3N1ZWQgYnkgdGhlIHVzZXIKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gc3VjY2VlZGVkOiAkcmVzdFxuIgorImJ1dCBsZWZ0IGNoYW5nZXMgdG8gdGhlIGluZGV4IGFuZC9vciB0aGUgd29ya2luZyB0cmVlXG4iCisiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisiXG4iCisiXHRnaXQgcmViYXNlIC0tY29udGludWUiCittc2dzdHIgIiIKKyLln7fooYzmiJDlip/vvJokcmVzdFxuIgorIuS9huaYr+WcqOe0ouW8leWSjC/miJblt6XkvZzljYDkuK3lrZjlnKjorormm7TjgILmj5DkuqTmiJblhLLol4/kv67mlLnvvIznhLblvozln7fooYxcbiIKKyJcbiIKKyJcdGdpdCByZWJhc2UgLS1jb250aW51ZSIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjcxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21tYW5kOiAkY29tbWFuZCAkc2hhMSAkcmVzdCIKK21zZ3N0ciAi5pyq55+l5oyH5Luk77yaJGNvbW1hbmQgJHNoYTEgJHJlc3QiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo3MjAKK21zZ2lkICJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKK21zZ3N0ciAi6KaB5L+u5pS56KuL5L2/55So5oyH5LukICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJ+OAgiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjc1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCittc2dzdHIgIuaIkOWKn+mHjeWumuWfuuW6leS4puabtOaWsCAkaGVhZF9uYW1l44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODEyCittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorbXNnc3RyICLkuI3og73liKrpmaQgQ0hFUlJZX1BJQ0tfSEVBRCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlXG4iCisic3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCisiXG4iCisiICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWRcbiIKKyJcbiIKKyJJZiB0aGV5IGFyZSBtZWFudCB0byBnbyBpbnRvIGEgbmV3IGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAkZ3BnX3NpZ25fb3B0X3F1b3RlZFxuIgorIlxuIgorIkluIGJvdGggY2FzZXMsIG9uY2UgeW91J3JlIGRvbmUsIGNvbnRpbnVlIHdpdGg6XG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKK21zZ3N0ciAiIgorIuaCqOW3suaaq+WtmOS6huW3peS9nOWNgOeahOS/ruaUueOAguWmguaenOmAmeS6m+S/ruaUueimgeWjk+e4ruWIsOWJjeS4gOWAi+aPkOS6pO+8jOWft+ihjO+8mlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisi5aaC5p6c6YCZ5Lqb6K6K5pu06KaB5b2i5oiQ5LiA5YCL5paw5o+Q5Lqk77yM5Z+36KGM77yaXG4iCisiXG4iCisiICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkXG4iCisiXG4iCisi54Sh6KuW5ZOq56iu5oOF5rOB77yM55W25oKo5a6M5oiQ5o+Q5Lqk77yM57m857qM5Z+36KGM77yaXG4iCisiXG4iCisiICBnaXQgcmViYXNlIC0tY29udGludWVcbiIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjgzNAorbXNnaWQgIkVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBhdXRob3IgaWRlbnRpdHkgdG8gYW1lbmQgY29tbWl0IgorbXNnc3RyICLlnKjkv67oo5zmj5DkuqTkuK3lsIvmib7kvZzogIXoqIrmga/mmYLpgYfliLDpjK/oqqQiCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4MzkKK21zZ2lkICIiCisiWW91IGhhdmUgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZS4gUGxlYXNlIGNvbW1pdCB0aGVtXG4iCisiZmlyc3QgYW5kIHRoZW4gcnVuICdnaXQgcmViYXNlIC0tY29udGludWUnIGFnYWluLiIKK21zZ3N0ciAi5oKo55qE5bel5L2c5Y2A5Lit5pyJ5pyq5o+Q5Lqk55qE6K6K5pu044CC6KuL5YWI5o+Q5Lqk54S25b6M5YaN5qyh5Z+36KGMICdnaXQgcmViYXNlIC0tY29udGludWUn44CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODQ0IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo4NDgKK21zZ2lkICJDb3VsZCBub3QgY29tbWl0IHN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO95o+Q5Lqk5pqr5a2Y55qE5L+u5pS544CCIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6ODc5IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NjUKK21zZ2lkICJDb3VsZCBub3QgZXhlY3V0ZSBlZGl0b3IiCittc2dzdHIgIueEoeazleWft+ihjOe3qOi8r+WZqCIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkwMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCittc2dzdHIgIuS4jeiDveewveWHuiAkc3dpdGNoX3RvIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA3Cittc2dpZCAiTm8gSEVBRD8iCittc2dzdHIgIuaykuaciSBIRUFE77yfIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkc3RhdGVfZGlyIgorbXNnc3RyICLkuI3og73lu7rnq4vmmqvmmYIgJHN0YXRlX2RpciIKKworIzogZ2l0LXJlYmFzZS0tcHJlc2VydmUtbWVyZ2VzLnNoOjkxMQorbXNnaWQgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgorbXNnc3RyICLkuI3og73mqJnoqJjngrrkupLli5XlvI8iCisKKyM6IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDo5NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQpIgorbXNnaWRfcGx1cmFsICJSZWJhc2UgJHNob3J0cmV2aXNpb25zIG9udG8gJHNob3J0b250byAoJHRvZG9jb3VudCBjb21tYW5kcykiCittc2dzdHJbMF0gIumHjeWumuWfuuW6lSAkc2hvcnRyZXZpc2lvbnMg5YiwICRzaG9ydG9udG/vvIgkdG9kb2NvdW50IOWAi+aPkOS6pO+8iSIKK21zZ3N0clsxXSAi6YeN5a6a5Z+65bqVICRzaG9ydHJldmlzaW9ucyDliLAgJHNob3J0b250b++8iCR0b2RvY291bnQg5YCL5o+Q5Lqk77yJIgorCisjOiBnaXQtcmViYXNlLS1wcmVzZXJ2ZS1tZXJnZXMuc2g6OTk3IGdpdC1yZWJhc2UtLXByZXNlcnZlLW1lcmdlcy5zaDoxMDAyCittc2dpZCAiQ291bGQgbm90IGluaXQgcmV3cml0dGVuIGNvbW1pdHMiCittc2dzdHIgIuS4jeiDveWwjemHjeWvq+aPkOS6pOmAsuihjOWIneWni+WMliIKKworIzogZ2l0LXNoLXNldHVwLnNoOjg5IGdpdC1zaC1zZXR1cC5zaDo5NAorIywgc2gtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCittc2dzdHIgIueUqOazle+8miRkYXNobGVzcyAkVVNBR0UiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoxOTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBjaGRpciB0byAkY2R1cCwgdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIuS4jeiDveWIh+aPm+ebrumMhOWIsCAkY2R1cO+8jOW3peS9nOWNgOeahOmggue0muebrumMhCIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIwMCBnaXQtc2gtc2V0dXAuc2g6MjA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogJHByb2dyYW1fbmFtZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAi6Ie05ZG96Yyv6Kqk77yaJHByb2dyYW1fbmFtZSDkuI3og73lnKjmspLmnInlt6XkvZzljYDnmoTmg4Xms4HkuIvkvb/nlKgiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjEKK21zZ2lkICJDYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5LiN6IO96YeN5a6a5Z+65bqV77ya5oKo5pyJ5pyq5pqr5a2Y55qE6K6K5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MjI0Cittc2dpZCAiQ2Fubm90IHJld3JpdGUgYnJhbmNoZXM6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og73ph43lr6vliIbmlK/vvJrmgqjmnInmnKrmmqvlrZjnmoTorormm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIueEoeazlemAj+mBjumHjeWumuWfuuW6leaWueW8j+aLieWPlu+8muaCqOacieacquaaq+WtmOeahOiuiuabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjIzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICRhY3Rpb246IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og70gJGFjdGlvbu+8muaCqOacieacquaaq+WtmOeahOiuiuabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0MworbXNnaWQgIkNhbm5vdCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIuS4jeiDvemHjeWumuWfuuW6le+8muaCqOeahOe0ouW8leS4reWMheWQq+acquaPkOS6pOeahOiuiuabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI0NgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLnhKHms5XpgI/pgY7ph43lrprln7rlupXmlrnlvI/mi4nlj5bvvJrmgqjnmoTntKLlvJXkuK3ljIXlkKvmnKrmj5DkuqTnmoTorormm7TjgIIiCisKKyM6IGdpdC1zaC1zZXR1cC5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAkYWN0aW9uOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLkuI3og70gJGFjdGlvbu+8muaCqOeahOe0ouW8leS4reWMheWQq+acquaPkOS6pOeahOiuiuabtOOAgiIKKworIzogZ2l0LXNoLXNldHVwLnNoOjI1MworbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi6ICM5LiU5oKo55qE57Si5byV5Lit5YyF5ZCr5pyq5o+Q5Lqk55qE6K6K5pu044CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6MzczCittc2dpZCAiWW91IG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLiIKK21zZ3N0ciAi5oKo6ZyA6KaB5Zyo5bel5L2c5Y2A55qE6aCC57Sa55uu6YyE5Lit5Z+36KGM6YCZ5YCL5oyH5Luk44CCIgorCisjOiBnaXQtc2gtc2V0dXAuc2g6Mzc4Cittc2dpZCAiVW5hYmxlIHRvIGRldGVybWluZSBhYnNvbHV0ZSBwYXRoIG9mIGdpdCBkaXJlY3RvcnkiCittc2dzdHIgIuS4jeiDveeiuuWumiBnaXQg55uu6YyE55qE57WV5bCN6Lev5b6RIgorCisjLiBUUkFOU0xBVE9SUzogeW91IGNhbiBhZGp1c3QgdGhpcyB0byBhbGlnbiAiZ2l0IGFkZCAtaSIgc3RhdHVzIG1lbnUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiUxMnMgJTEycyAlcyIKK21zZ3N0ciAiJTEycyAlMTJzICVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjYzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ0b3VjaGVkICVkIHBhdGhcbiIKK21zZ2lkX3BsdXJhbCAidG91Y2hlZCAlZCBwYXRoc1xuIgorbXNnc3RyWzBdICLlu7rnq4vkuoYgJWQg5YCL6Lev5b6RXG4iCittc2dzdHJbMV0gIuW7uueri+S6hiAlZCDlgIvot6/lvpFcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDUzCittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBzdGFnaW5nLiIKK21zZ3N0ciAi5aaC5p6c5L+u6KOc5qqU6IO95Lm+5reo5Zyw5aWX55So77yM57eo6Lyv5aGK5bCH56uL5Y2z5qiZ6KiY54K65pqr5a2Y44CCIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTYKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHN0YXNoaW5nLiIKK21zZ3N0ciAi5aaC5p6c5L+u6KOc5qqU6IO95Lm+5reo5Zyw5aWX55So77yM57eo6Lyv5aGK5bCH56uL5Y2z5qiZ6KiY54K65YSy6JeP44CCIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEwNTkKK21zZ2lkICIiCisiSWYgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seSwgdGhlIGVkaXRlZCBodW5rIHdpbGwgaW1tZWRpYXRlbHkgYmVcbiIKKyJtYXJrZWQgZm9yIHVuc3RhZ2luZy4iCittc2dzdHIgIuWmguaenOS/ruijnOaqlOiDveS5vua3qOWcsOWll+eUqO+8jOe3qOi8r+WhiuWwh+eri+WNs+aomeiomOeCuuacquaaq+WtmOOAgiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDYyIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA3MQorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc3Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBhcHBseWluZy4iCittc2dzdHIgIuWmguaenOS/ruijnOaqlOiDveS5vua3qOWcsOWll+eUqO+8jOe3qOi8r+WhiuWwh+eri+WNs+aomeiomOeCuuaHieeUqOOAgiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDY1IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTA2OAorIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMDc0Cittc2dpZCAiIgorIklmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlXG4iCisibWFya2VkIGZvciBkaXNjYXJkaW5nLiIKK21zZ3N0ciAi5aaC5p6c5L+u6KOc5qqU6IO95Lm+5reo5Zyw5aWX55So77yM57eo6Lyv5aGK5bCH56uL5Y2z5qiZ6KiY54K65o2o5qOE44CCIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjExMTEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICLngrrlr6vlhaXplovllZ/ljYDloYrnt6jovK/mqpTmoYjlpLHmlZfvvJolcyIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMTE4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyItLS1cbiIKKyJUbyByZW1vdmUgJyVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuXG4iCisiVG8gcmVtb3ZlICclcycgbGluZXMsIGRlbGV0ZSB0aGVtLlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJXMgd2lsbCBiZSByZW1vdmVkLlxuIgorbXNnc3RyICIiCisiLS0tXG4iCisi6KaB5Yiq6ZmkICclcycg6ZaL5aeL55qE6KGM77yM5L2/5YW25oiQ54K6ICcgJyDplovlp4vnmoTooYzvvIjkuIrkuIvmlofvvInjgIJcbiIKKyLopoHliKrpmaQgJyVzJyDplovlp4vnmoTooYzvvIzliKrpmaTlroPlgJHjgIJcbiIKKyLku6UgJXMg6ZaL5aeL55qE6KGM5bCH6KKr5Yiq6Zmk44CCXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTE0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBodW5rIGVkaXQgZmlsZSBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIueEoeazleiugOWPluWNgOWhiue3qOi8r+aqlOahiO+8miVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNDgKK21zZ2lkICIiCisieSAtIHN0YWdlIHRoaXMgaHVua1xuIgorIm4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5pqr5a2Y5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeaaq+WtmOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3mmqvlrZjmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5pqr5a2Y5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeaaq+WtmOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhiiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjU0Cittc2dpZCAiIgorInkgLSBzdGFzaCB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVua1xuIgorInEgLSBxdWl0OyBkbyBub3Qgc3Rhc2ggdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gc3Rhc2ggdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHN0YXNoIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOWEsuiXj+atpOWNgOWhilxuIgorIm4gLSDkuI3opoHlhLLol4/mraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN5YSy6JeP5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOWEsuiXj+atpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3lhLLol4/mraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYoiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI2MAorbXNnaWQgIiIKKyJ5IC0gdW5zdGFnZSB0aGlzIGh1bmtcbiIKKyJuIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rXG4iCisicSAtIHF1aXQ7IGRvIG5vdCB1bnN0YWdlIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIHVuc3RhZ2UgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IHVuc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUiCittc2dzdHIgIiIKKyJ5IC0g5LiN5pqr5a2Y5q2k5Y2A5aGKXG4iCisibiAtIOS4jeimgeS4jeaaq+WtmOatpOWNgOWhilxuIgorInEgLSDpm6LplovjgILkuI3opoHkuI3mmqvlrZjmraTljYDloYrlj4rlvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJhIC0g5LiN5pqr5a2Y5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiZCAtIOS4jeimgeS4jeaaq+WtmOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhiiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMjY2Cittc2dpZCAiIgorInkgLSBhcHBseSB0aGlzIGh1bmsgdG8gaW5kZXhcbiIKKyJuIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayB0byBpbmRleFxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOWcqOe0ouW8leS4reWll+eUqOatpOWNgOWhilxuIgorIm4gLSDkuI3opoHlnKjntKLlvJXkuK3lpZfnlKjmraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN6KaB5aWX55So5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOWll+eUqOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3opoHlpZfnlKjmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYoiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI3MiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyOTAKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJuIC0gZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIGZyb20gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGRpc2NhcmQgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gZGlzY2FyZCB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZVxuIgorImQgLSBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDlnKjlt6XkvZzljYDkuK3mjajmo4TmraTljYDloYpcbiIKKyJuIC0g5LiN6KaB5Zyo5bel5L2c5Y2A5Lit5o2o5qOE5q2k5Y2A5aGKXG4iCisicSAtIOmboumWi+OAguS4jeimgeaNqOajhOatpOWNgOWhiuWPiuW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImEgLSDmjajmo4TmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJkIC0g5LiN6KaB5o2o5qOE5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEyNzgKK21zZ2lkICIiCisieSAtIGRpc2NhcmQgdGhpcyBodW5rIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgZGlzY2FyZCB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lc1xuIgorImEgLSBkaXNjYXJkIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBkaXNjYXJkIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOWcqOe0ouW8leWSjOW3peS9nOWNgOS4reaNqOajhOatpOWNgOWhilxuIgorIm4gLSDkuI3opoHlnKjntKLlvJXlkozlt6XkvZzljYDkuK3mjajmo4TmraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN6KaB5o2o5qOE5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOaNqOajhOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3opoHmjajmo4TmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYoiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI4NAorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorIm4gLSBkbyBub3QgYXBwbHkgdGhpcyBodW5rIHRvIGluZGV4IGFuZCB3b3JrdHJlZVxuIgorInEgLSBxdWl0OyBkbyBub3QgYXBwbHkgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgcmVtYWluaW5nIG9uZXNcbiIKKyJhIC0gYXBwbHkgdGhpcyBodW5rIGFuZCBhbGwgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGVcbiIKKyJkIC0gZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlIgorbXNnc3RyICIiCisieSAtIOWcqOe0ouW8leWSjOW3peS9nOWNgOS4reWll+eUqOatpOWNgOWhilxuIgorIm4gLSDkuI3opoHlnKjntKLlvJXlkozlt6XkvZzljYDkuK3lpZfnlKjmraTljYDloYpcbiIKKyJxIC0g6Zui6ZaL44CC5LiN6KaB5aWX55So5q2k5Y2A5aGK5Y+K5b6M6Z2i55qE5YWo6YOo5Y2A5aGKXG4iCisiYSAtIOWll+eUqOatpOWNgOWhiuWSjOacrOaqlOahiOS4reW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImQgLSDkuI3opoHlpZfnlKjmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYoiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTI5NgorbXNnaWQgIiIKKyJ5IC0gYXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlXG4iCisibiAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgdG8gd29ya3RyZWVcbiIKKyJxIC0gcXVpdDsgZG8gbm90IGFwcGx5IHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIHJlbWFpbmluZyBvbmVzXG4iCisiYSAtIGFwcGx5IHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlXG4iCisiZCAtIGRvIG5vdCBhcHBseSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSBsYXRlciBodW5rcyBpbiB0aGUgZmlsZSIKK21zZ3N0ciAiIgorInkgLSDlnKjlt6XkvZzljYDkuK3lpZfnlKjmraTljYDloYpcbiIKKyJuIC0g5LiN6KaB5Zyo5bel5L2c5Y2A5Lit5aWX55So5q2k5Y2A5aGKXG4iCisicSAtIOmboumWi+OAguS4jeimgeWll+eUqOatpOWNgOWhiuWPiuW+jOmdoueahOWFqOmDqOWNgOWhilxuIgorImEgLSDlpZfnlKjmraTljYDloYrlkozmnKzmqpTmoYjkuK3lvozpnaLnmoTlhajpg6jljYDloYpcbiIKKyJkIC0g5LiN6KaB5aWX55So5q2k5Y2A5aGK5ZKM5pys5qqU5qGI5Lit5b6M6Z2i55qE5YWo6YOo5Y2A5aGKIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzMTEKK21zZ2lkICIiCisiZyAtIHNlbGVjdCBhIGh1bmsgdG8gZ28gdG9cbiIKKyIvIC0gc2VhcmNoIGZvciBhIGh1bmsgbWF0Y2hpbmcgdGhlIGdpdmVuIHJlZ2V4XG4iCisiaiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rXG4iCisiSiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IGh1bmtcbiIKKyJrIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIHVuZGVjaWRlZCBodW5rXG4iCisiSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rXG4iCisicyAtIHNwbGl0IHRoZSBjdXJyZW50IGh1bmsgaW50byBzbWFsbGVyIGh1bmtzXG4iCisiZSAtIG1hbnVhbGx5IGVkaXQgdGhlIGN1cnJlbnQgaHVua1xuIgorIj8gLSBwcmludCBoZWxwXG4iCittc2dzdHIgIiIKKyJnIC0g6YG45pOH6Lez6L2J5Yiw5LiA5YCL5Y2A5aGKXG4iCisiLyAtIOWwi+aJvuWSjOaPkOS+m+ato+imj+ihqOekuuW8j+espuWQiOeahOWNgOWhilxuIgorImogLSDntq3mjIHmraTljYDloYrmnKrmsbrni4DmhYvvvIzmqqLoppbkuIvkuIDlgIvmnKrmsbrlrprljYDloYpcbiIKKyJKIC0g57at5oyB5q2k5Y2A5aGK5pyq5rG654uA5oWL77yM5qqi6KaW5LiL5LiA5YCL5Y2A5aGKXG4iCisiayAtIOe2reaMgeatpOWNgOWhiuacquaxuueLgOaFi++8jOaqouimluS4iuS4gOWAi+acquaxuuWumuWNgOWhilxuIgorIksgLSDntq3mjIHmraTljYDloYrmnKrmsbrni4DmhYvvvIzmqqLoppbkuIrkuIDlgIvljYDloYpcbiIKKyJzIC0g5YiG5Ymy55uu5YmN5Y2A5aGK54K65pu05bCP55qE5Y2A5aGKXG4iCisiZSAtIOaJi+WLlee3qOi8r+ebruWJjeWNgOWhilxuIgorIj8gLSDpoa/npLroqqrmmI5cbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzQyCittc2dpZCAiVGhlIHNlbGVjdGVkIGh1bmtzIGRvIG5vdCBhcHBseSB0byB0aGUgaW5kZXghXG4iCittc2dzdHIgIumBuOS4reeahOWNgOWhiuS4jeiDveWll+eUqOWIsOe0ouW8le+8gVxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDMKK21zZ2lkICJBcHBseSB0aGVtIHRvIHRoZSB3b3JrdHJlZSBhbnl3YXk/ICIKK21zZ3N0ciAi54Sh6KuW5aaC5L2V6YO96KaB5aWX55So5Yiw5bel5L2c5Y2A5ZeO77yfIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjEzNDYKK21zZ2lkICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIgorbXNnc3RyICLmnKrlpZfnlKjjgIJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxMzU3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHVubWVyZ2VkOiAlc1xuIgorbXNnc3RyICLlv73nlaXmnKrlpZfnlKjnmoTvvJolc1xuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3RhZ2UgbW9kZSBjaGFuZ2UgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuaaq+WtmOaooeW8j+iuiuabtCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDI5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLmmqvlrZjliKrpmaTli5XkvZwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuaaq+WtmOatpOWNgOWhiiBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlN0YXNoIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlhLLol4/mqKHlvI/orormm7QgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzNAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJTdGFzaCBkZWxldGlvbiBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5YSy6JeP5Yiq6Zmk5YuV5L2cIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0MzUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3Rhc2ggdGhpcyBodW5rIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlhLLol4/mraTljYDloYogW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIG1vZGUgY2hhbmdlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlj5bmtojmmqvlrZjmqKHlvI/orormm7QgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQzOQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIGRlbGV0aW9uIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlj5bmtojmmqvlrZjliKrpmaTli5XkvZwgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJVbnN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5Y+W5raI5pqr5a2Y5q2k5Y2A5aGKIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NDMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwh+aooeW8j+iuiuabtOWll+eUqOWIsOe0ouW8lSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IGRlbGV0aW9uIHRvIGluZGV4IFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfliKrpmaTli5XkvZzlpZfnlKjliLDntKLlvJUgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ0NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSB0aGlzIGh1bmsgdG8gaW5kZXggW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwh+atpOWNgOWhiuWll+eUqOWIsOe0ouW8lSBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuW+nuW3peS9nOWNgOS4reaNqOajhOaooeW8j+iuiuabtCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDQ5IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuW+nuW3peS9nOWNgOS4reaNqOajhOWIqumZpOWLleS9nCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDUwIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlvp7lt6XkvZzljYDkuK3mjajmo4TmraTljYDloYogW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIG1vZGUgY2hhbmdlIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlvp7ntKLlvJXlkozlt6XkvZzljYDkuK3mjajmo4TmqKHlvI/orormm7QgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIGRlbGV0aW9uIGZyb20gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlvp7ntKLlvJXlkozlt6XkvZzljYDkuK3mjajmo4TliKrpmaQgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHRoaXMgaHVuayBmcm9tIGluZGV4IGFuZCB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5b6e57Si5byV5ZKM5bel5L2c5Y2A5Lit5o2o5qOE5q2k5Y2A5aGKIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgbW9kZSBjaGFuZ2UgdG8gaW5kZXggYW5kIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfmqKHlvI/orormm7TlpZfnlKjliLDntKLlvJXlkozlt6XkvZzljYAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ1OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwh+WIqumZpOWLleS9nOWll+eUqOWIsOe0ouW8leWSjOW3peS9nOWNgCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDYwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IHRoaXMgaHVuayB0byBpbmRleCBhbmQgd29ya3RyZWUgW3ksbixxLGEsZCVzLD9dPyAiCittc2dzdHIgIuWwh+atpOWNgOWhiuWll+eUqOWIsOe0ouW8leWSjOW3peS9nOWNgCBbeSxuLHEsYSxkJXMsP10/ICIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNDY4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkFwcGx5IG1vZGUgY2hhbmdlIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfmqKHlvI/orormm7TlpZfnlKjliLDlt6XkvZzljYAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTQ2OQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcHBseSBkZWxldGlvbiB0byB3b3JrdHJlZSBbeSxuLHEsYSxkJXMsP10/ICIKK21zZ3N0ciAi5bCH5Yiq6Zmk5YuV5L2c5aWX55So5Yiw5bel5L2c5Y2AIFt5LG4scSxhLGQlcyw/XT8gIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE0NzAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQXBwbHkgdGhpcyBodW5rIHRvIHdvcmt0cmVlIFt5LG4scSxhLGQlcyw/XT8gIgorbXNnc3RyICLlsIfmraTljYDloYrlpZfnlKjliLDlt6XkvZzljYAgW3ksbixxLGEsZCVzLD9dPyAiCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU3MAorbXNnaWQgIk5vIG90aGVyIGh1bmtzIHRvIGdvdG9cbiIKK21zZ3N0ciAi5rKS5pyJ5YW25a6D5Y+v5L6b6Lez6L2J55qE5Y2A5aGKXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU4OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlcjogJyVzJ1xuIgorbXNnc3RyICLnhKHmlYjmlbjlrZfvvJonJXMnXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTU5MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTb3JyeSwgb25seSAlZCBodW5rIGF2YWlsYWJsZS5cbiIKK21zZ2lkX3BsdXJhbCAiU29ycnksIG9ubHkgJWQgaHVua3MgYXZhaWxhYmxlLlxuIgorbXNnc3RyWzBdICLlsI3kuI3otbfvvIzlj6rmnIkgJWQg5YCL5Y+v55So5Y2A5aGK44CCXG4iCittc2dzdHJbMV0gIuWwjeS4jei1t++8jOWPquaciSAlZCDlgIvlj6/nlKjljYDloYrjgIJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjE5Cittc2dpZCAiTm8gb3RoZXIgaHVua3MgdG8gc2VhcmNoXG4iCittc2dzdHIgIuaykuacieWFtuWug+WPr+S+m+Wwi+aJvueahOWNgOWhilxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2MzYKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIHNlYXJjaCByZWdleHAgJXM6ICVzXG4iCittc2dzdHIgIumMr+iqpOeahOato+imj+ihqOekuuW8jyAlc++8miVzXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY0NgorbXNnaWQgIk5vIGh1bmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVyblxuIgorbXNnc3RyICLmspLmnInlkozmj5DkvpvmqKHlvI/nm7jnrKblkIjnmoTljYDloYpcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNjU4IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY4MAorbXNnaWQgIk5vIHByZXZpb3VzIGh1bmtcbiIKK21zZ3N0ciAi5rKS5pyJ5YmN5LiA5YCL5Y2A5aGKXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY2NyBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2ODYKK21zZ2lkICJObyBuZXh0IGh1bmtcbiIKK21zZ3N0ciAi5rKS5pyJ5LiL5LiA5YCL5Y2A5aGKXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTY5MgorbXNnaWQgIlNvcnJ5LCBjYW5ub3Qgc3BsaXQgdGhpcyBodW5rXG4iCittc2dzdHIgIuWwjeS4jei1t++8jOS4jeiDveWIhuWJsumAmeWAi+WNgOWhilxuIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE2OTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU3BsaXQgaW50byAlZCBodW5rLlxuIgorbXNnaWRfcGx1cmFsICJTcGxpdCBpbnRvICVkIGh1bmtzLlxuIgorbXNnc3RyWzBdICLliIblibLngrogJWQg5aGK44CCXG4iCittc2dzdHJbMV0gIuWIhuWJsueCuiAlZCDloYrjgIJcbiIKKworIzogZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxNzA4Cittc2dpZCAiU29ycnksIGNhbm5vdCBlZGl0IHRoaXMgaHVua1xuIgorbXNnc3RyICLlsI3kuI3otbfvvIzkuI3og73nt6jovK/pgJnlgIvljYDloYpcbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBkbyBub3QgdHJhbnNsYXRlIHRoZSBjb21tYW5kIG5hbWVzCisjLiAnc3RhdHVzJywgJ3VwZGF0ZScsICdyZXZlcnQnLCBldGMuCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3NzMKK21zZ2lkICIiCisic3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzXG4iCisidXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlc1xuIgorInJldmVydCAgICAgICAgLSByZXZlcnQgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzIGJhY2sgdG8gdGhlIEhFQUQgdmVyc2lvblxuIgorInBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHlcbiIKKyJkaWZmICAgICAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXhcbiIKKyJhZGQgdW50cmFja2VkIC0gYWRkIGNvbnRlbnRzIG9mIHVudHJhY2tlZCBmaWxlcyB0byB0aGUgc3RhZ2VkIHNldCBvZiAiCisiY2hhbmdlc1xuIgorbXNnc3RyICIiCisic3RhdHVzICAgICAgICAtIOmhr+ekuuWQq+iuiuabtOeahOi3r+W+kVxuIgorInVwZGF0ZSAgICAgICAgLSDmlrDlop7lt6XkvZzljYDni4DmhYvoh7PmmqvlrZjliJfooahcbiIKKyJyZXZlcnQgICAgICAgIC0g6YKE5Y6f5L+u5pS555qE5pqr5a2Y6ZuG6IezIEhFQUQg54mI5pysXG4iCisicGF0Y2ggICAgICAgICAtIOaMkemBuOWNgOWhiuS4puS4lOaciemBuOaTh+WcsOabtOaWsFxuIgorImRpZmYgICAgICAgICAgLSDpoa/npLogSEVBRCDlkozntKLlvJXplpPlt67nlbBcbiIKKyJhZGQgdW50cmFja2VkIC0g5paw5aKe5pyq6L+96Lmk5qqU5qGI55qE5YWn5a656Iez5pqr5a2Y5YiX6KGoXG4iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5MCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE3OTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTc5OCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MDUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgwOCBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MTUKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgxOSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjUKK21zZ2lkICJtaXNzaW5nIC0tIgorbXNnc3RyICLnvLrlsJEgLS0iCisKKyM6IGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmw6MTgyMQorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIC0tcGF0Y2ggbW9kZTogJXMiCittc2dzdHIgIuacquefpeeahCAtLXBhdGNoIOaooeW8j++8miVzIgorCisjOiBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsOjE4MjcgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybDoxODMzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImludmFsaWQgYXJndW1lbnQgJXMsIGV4cGVjdGluZyAtLSIKK21zZ3N0ciAi54Sh5pWI55qE5Y+D5pW4ICVz77yM5pyf5pyb5pivIC0tIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzOAorbXNnaWQgImxvY2FsIHpvbmUgZGlmZmVycyBmcm9tIEdNVCBieSBhIG5vbi1taW51dGUgaW50ZXJ2YWxcbiIKK21zZ3N0ciAi5pys5qmf5pmC6ZaT5ZKMIEdNVCDmnInkuI3liLDkuIDliIbpkJjplpPpmpRcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDUgZ2l0LXNlbmQtZW1haWwucGVybDoxNTEKK21zZ2lkICJsb2NhbCB0aW1lIG9mZnNldCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMjQgaG91cnNcbiIKK21zZ3N0ciAi5pys5qmf5pmC6ZaT5L2N56e76YeP5aSn5pa8562J5pa8IDI0IOWwj+aZglxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjIyOQorbXNnaWQgInRoZSBlZGl0b3IgZXhpdGVkIHVuY2xlYW5seSwgYWJvcnRpbmcgZXZlcnl0aGluZyIKK21zZ3N0ciAi57eo6Lyv5Zmo6Z2e5q2j5bi46Zui6ZaL77yM57WC5q2i5omA5pyJ5YuV5L2cIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxMAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBjb250YWlucyBhbiBpbnRlcm1lZGlhdGUgdmVyc2lvbiBvZiB0aGUgZW1haWwgeW91IHdlcmUgY29tcG9zaW5nLlxuIgorbXNnc3RyICInJXMnIOWMheWQq+aCqOato+WcqOe3qOWvq+eahOS4gOWAi+S4remWk+eJiOacrOeahOS/oeS7tuOAglxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjMxNQorIywgcGVybC1mb3JtYXQKK21zZ2lkICInJXMuZmluYWwnIGNvbnRhaW5zIHRoZSBjb21wb3NlZCBlbWFpbC5cbiIKK21zZ3N0ciAiJyVzLmZpbmFsJyDljIXlkKvnt6jovK/nmoTkv6Hku7bjgIJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo0MDgKK21zZ2lkICItLWR1bXAtYWxpYXNlcyBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBvcHRpb25zXG4iCittc2dzdHIgIi0tZHVtcC1hbGlhc2VzIOWSjOWFtuWug+mBuOmgheS4jeebuOWuuVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjQ4MSBnaXQtc2VuZC1lbWFpbC5wZXJsOjY4MworbXNnaWQgIkNhbm5vdCBydW4gZ2l0IGZvcm1hdC1wYXRjaCBmcm9tIG91dHNpZGUgYSByZXBvc2l0b3J5XG4iCittc2dzdHIgIuS4jeiDveWcqOeJiOacrOW6q+S5i+WkluWft+ihjCBnaXQgZm9ybWF0LXBhdGNoXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDg0Cittc2dpZCAiIgorImBiYXRjaC1zaXplYCBhbmQgYHJlbG9naW5gIG11c3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyICh2aWEgY29tbWFuZC1saW5lIG9yICIKKyJjb25maWd1cmF0aW9uIG9wdGlvbilcbiIKK21zZ3N0ciAiYGJhdGNoLXNpemVgIOWSjCBgcmVsb2dpbmAg5b+F6aCI5ZCM5pmC5a6a576p77yI6YCP6YGO5oyH5Luk5YiX5oiW6ICF6Kit5a6a6YG46aCF77yJXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NDk3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1zdXBwcmVzcy1jYyBmaWVsZDogJyVzJ1xuIgorbXNnc3RyICLmnKrnn6XnmoQgLS1zdXBwcmVzcy1jYyDmrITkvY3vvJonJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTI4CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlVua25vd24gLS1jb25maXJtIHNldHRpbmc6ICclcydcbiIKK21zZ3N0ciAi5pyq55+l55qEIC0tY29uZmlybSDoqK3lrprvvJonJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NTU2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHNlbmRtYWlsIGFsaWFzIHdpdGggcXVvdGVzIGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIuitpuWRiu+8muS4jeaUr+aPtOW4tuW8leiZn+eahCBzZW5kbWFpbCDliKXlkI3vvJolc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgOmluY2x1ZGU6YCBub3Qgc3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICLorablkYrvvJrkuI3mlK/mj7QgYDppbmNsdWRlOmDvvJolc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjU2MAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAi6K2m5ZGK77ya5LiN5pSv5o+0IGAvZmlsZWAg5oiWIGB8cGlwZWAg6YeN5a6a5ZCR77yaJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo1NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAid2FybmluZzogc2VuZG1haWwgbGluZSBpcyBub3QgcmVjb2duaXplZDogJXNcbiIKK21zZ3N0ciAi6K2m5ZGK77ya5LiN6IO96K2Y5Yil55qEIHNlbmRtYWlsIOihjO+8miVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjQ5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlICclcycgZXhpc3RzIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHRoZSByYW5nZSBvZiBjb21taXRzXG4iCisidG8gcHJvZHVjZSBwYXRjaGVzIGZvci4gIFBsZWFzZSBkaXNhbWJpZ3VhdGUgYnkuLi5cbiIKKyJcbiIKKyIgICAgKiBTYXlpbmcgXCIuLyVzXCIgaWYgeW91IG1lYW4gYSBmaWxlOyBvclxuIgorIiAgICAqIEdpdmluZyAtLWZvcm1hdC1wYXRjaCBvcHRpb24gaWYgeW91IG1lYW4gYSByYW5nZS5cbiIKK21zZ3N0ciAiIgorIuWtmOWcqOaqlOahiCAnJXMnIOS9huaYr+Wug+S5n+WPr+iDveaYr+S4gOWAi+eUqOaWvOeUoueUn+S/ruijnOaqlOWIl+ihqOeahOaPkOS6pOevhOWcjeOAguiri+eUqOWmguS4i+aWueazlea2iCIKKyLpmaTmrafnvqnvvJpcbiIKKyJcbiIKKyIgICAgKiDlpoLmnpzlkKvnvqnngrrkuIDlgIvmqpTmoYjvvIzkvb/nlKggXCIuLyVzXCLvvIzmiJbogIVcbiIKKyIgICAgKiDlpoLmnpzlkKvnvqnngrrkuIDlgIvnr4TlnI3vvIzkvb/nlKggLS1mb3JtYXQtcGF0Y2gg6YG46aCF44CCXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NjcwCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuZGlyICVzOiAlcyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf55uu6YyEICVzOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo2OTQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiIgorImZhdGFsOiAlczogJXNcbiIKKyJ3YXJuaW5nOiBubyBwYXRjaGVzIHdlcmUgc2VudFxuIgorbXNnc3RyICIiCisi6Ie05ZG96Yyv6Kqk77yaJXPvvJolc1xuIgorIuitpuWRiu+8muS/ruijnOaqlOacquiDveWCs+mAgVxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjcwNQorbXNnaWQgIiIKKyJcbiIKKyJObyBwYXRjaCBmaWxlcyBzcGVjaWZpZWQhXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLmnKrmjIflrprkv67oo5zmqpTmoYjvvIFcbiIKKyJcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MTgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiTm8gc3ViamVjdCBsaW5lIGluICVzPyIKK21zZ3N0ciAi5ZyoICVzIOS4reaykuacieaomemhjOihjO+8nyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MjgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gZm9yIHdyaXRpbmcgJXM6ICVzIgorbXNnc3RyICLngrrlr6vlhaXplovllZ8gJXMg5aSx5pWXOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3MzkKK21zZ2lkICIiCisiTGluZXMgYmVnaW5uaW5nIGluIFwiR0lUOlwiIHdpbGwgYmUgcmVtb3ZlZC5cbiIKKyJDb25zaWRlciBpbmNsdWRpbmcgYW4gb3ZlcmFsbCBkaWZmc3RhdCBvciB0YWJsZSBvZiBjb250ZW50c1xuIgorImZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLlxuIgorIlxuIgorIkNsZWFyIHRoZSBib2R5IGNvbnRlbnQgaWYgeW91IGRvbid0IHdpc2ggdG8gc2VuZCBhIHN1bW1hcnkuXG4iCittc2dzdHIgIiIKKyLku6UgXCJHSVQ6XCIg6ZaL6aCt55qE6KGM5bCH6KKr5Yiq6Zmk44CCXG4iCisi6ICD5oWu5YyF5ZCr5LiA5YCL5pW06auU55qE5beu55Ww57Wx6KiI5oiW6ICF5oKo5q2j5Zyo5a+r55qE5L+u6KOc5qqU55qE55uu6YyE44CCXG4iCisiXG4iCisi5aaC5p6c5oKo5LiN5oOz5YKz6YCB5pGY6KaB77yM5riF6Zmk5YWn5a6544CCXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6NzYzCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzOiAlcyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWfICVzOiAlcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo3ODAKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXMuZmluYWw6ICVzIgorbXNnc3RyICLnhKHms5XplovllZ8gJXMuZmluYWw6ICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjgyMworbXNnaWQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iCittc2dzdHIgIuaRmOimgeS/oeS7tueCuuepuu+8jOi3s+mBjlxuIgorCisjLiBUUkFOU0xBVE9SUzogcGxlYXNlIGtlZXAgW3kvTl0gYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjg1OAorIywgcGVybC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdXNlIDwlcz4gW3kvTl0/ICIKK21zZ3N0ciAi5oKo56K66KqN6KaB5L2/55SoIDwlcz4gW3kvTl3vvJ8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTEzCittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIDhiaXQsIGJ1dCBkbyBub3QgZGVjbGFyZSBhIENvbnRlbnQtVHJhbnNmZXItIgorIkVuY29kaW5nLlxuIgorbXNnc3RyICLlpoLkuIvmqpTmoYjlkKsgOGJpdCDlhaflrrnvvIzkvYbmspLmnInogbLmmI7kuIDlgIsgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ+OAglxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkxOAorbXNnaWQgIldoaWNoIDhiaXQgZW5jb2Rpbmcgc2hvdWxkIEkgZGVjbGFyZSBbVVRGLThdPyAiCittc2dzdHIgIuimgeiBsuaYjiA4Yml0IOeCuuS7gOm6vOaoo+eahOe3qOeivOagvOW8jyBbVVRGLThd77yfIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjkyNgorIywgcGVybC1mb3JtYXQKK21zZ2lkICIiCisiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuIgorIlx0JXNcbiIKKyJoYXMgdGhlIHRlbXBsYXRlIHN1YmplY3QgJyoqKiBTVUJKRUNUIEhFUkUgKioqJy4gUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgIgorIndhbnQgdG8gc2VuZC5cbiIKK21zZ3N0ciAiIgorIuaLkue1leWCs+mAge+8jOWboOeCuuS/ruijnOaqlFxuIgorIlx0JXNcbiIKKyLljIXlkKvnr4TmnKzmqJnpoYwgJyoqKiBTVUJKRUNUIEhFUkUgKioqJ+OAguWmguaenOeiuuWvpuaDs+imgeWCs+mAge+8jOS9v+eUqOWPg+aVuCAtLWZvcmNl44CCXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6OTQ1Cittc2dpZCAiVG8gd2hvbSBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IChpZiBhbnlvbmUpPyIKK21zZ3N0ciAi5L+h5Lu25bCH6KaB5YKz6YCB57Wm6Kqw77yfIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjk2MworIywgcGVybC1mb3JtYXQKK21zZ2lkICJmYXRhbDogYWxpYXMgJyVzJyBleHBhbmRzIHRvIGl0c2VsZlxuIgorbXNnc3RyICLoh7Tlkb3pjK/oqqTvvJrliKXlkI0gJyVzJyDmk7TlsZXngrrlroPoh6rlt7FcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDo5NzUKK21zZ2lkICJNZXNzYWdlLUlEIHRvIGJlIHVzZWQgYXMgSW4tUmVwbHktVG8gZm9yIHRoZSBmaXJzdCBlbWFpbCAoaWYgYW55KT8gIgorbXNnc3RyICJNZXNzYWdlLUlEIOiiq+eUqOS9nOesrOS4gOWwgeS/oeS7tueahCBJbi1SZXBseS1UbyDvvJ8iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTAzMyBnaXQtc2VuZC1lbWFpbC5wZXJsOjEwNDEKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAlc1xuIgorbXNnc3RyICLpjK/oqqTvvJrkuI3og73lvp4gJXMg5Lit5pO35Y+W5LiA5YCL5pyJ5pWI55qE5L+h5Lu25L2N5Z2AXG4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbcV0gW2RdIFtlXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxMDQ1Cittc2dpZCAiV2hhdCB0byBkbyB3aXRoIHRoaXMgYWRkcmVzcz8gKFtxXXVpdHxbZF1yb3B8W2VdZGl0KTogIgorbXNnc3RyICLlpoLkvZXomZXnkIbpgJnlgIvkvY3lnYDvvJ8oW3FddWl0fFtkXXJvcHxbZV1kaXQp77yaIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjEzNjIKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiQ0EgcGF0aCBcIiVzXCIgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkNBIOi3r+W+kSBcIiVzXCIg5LiN5a2Y5ZyoIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NDUKK21zZ2lkICIiCisiICAgIFRoZSBDYyBsaXN0IGFib3ZlIGhhcyBiZWVuIGV4cGFuZGVkIGJ5IGFkZGl0aW9uYWxcbiIKKyIgICAgYWRkcmVzc2VzIGZvdW5kIGluIHRoZSBwYXRjaCBjb21taXQgbWVzc2FnZS4gQnkgZGVmYXVsdFxuIgorIiAgICBzZW5kLWVtYWlsIHByb21wdHMgYmVmb3JlIHNlbmRpbmcgd2hlbmV2ZXIgdGhpcyBvY2N1cnMuXG4iCisiICAgIFRoaXMgYmVoYXZpb3IgaXMgY29udHJvbGxlZCBieSB0aGUgc2VuZGVtYWlsLmNvbmZpcm1cbiIKKyIgICAgY29uZmlndXJhdGlvbiBzZXR0aW5nLlxuIgorIlxuIgorIiAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgcnVuICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAnLlxuIgorIiAgICBUbyByZXRhaW4gdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBzcXVlbGNoIHRoaXMgbWVzc2FnZSxcbiIKKyIgICAgcnVuICdnaXQgY29uZmlnIC0tZ2xvYmFsIHNlbmRlbWFpbC5jb25maXJtIGF1dG8nLlxuIgorIlxuIgorbXNnc3RyICIiCisiICAgIOS7peS4iueahOaKhOmAgeWIl+ihqO+8iENj77yJ5bey57aT55So5L+u6KOc5qqU5o+Q5Lqk6KiK5oGv5Lit55m854++55qE5L2N5Z2A6YCy6KGMXG4iCisiICAgIOS6huaTtOWxleOAgumgkOiorSBzZW5kLWVtYWlsIOacg+e1puWHuuaPkOekuuOAgumAmeWAi+ihjOeCuuWPr+S7pemAj+mBjlxuIgorIiAgICBzZW5kZW1haWwuY29uZmlybSDoqK3lrproqK3lrprjgIJcbiIKKyJcbiIKKyIgICAg5pu05aSa6KiK5oGv77yM5Z+36KGMICdnaXQgc2VuZC1lbWFpbCAtLWhlbHAn44CCXG4iCisiICAgIOimgeS/neaMgeebruWJjeihjOeCuu+8jOS9huS4jemhr+ekuuatpOioiuaBr++8jOWft+ihjCAnZ2l0IGNvbmZpZyAtLWdsb2JhbFxuIgorIiAgICBzZW5kZW1haWwuY29uZmlybSBhdXRvJ+OAglxuIgorIlxuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldIFtuXSBbZV0gW3FdIFthXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDYwCittc2dpZCAiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorbXNnc3RyICLlgrPpgIHpgJnlsIHkv6Hku7bvvJ8oW3ldZXN8W25db3xbZV1kaXR8W3FddWl0fFthXWxsKTogIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE0NjMKK21zZ2lkICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiCittc2dzdHIgIuWCs+mAgeimgeaxgueahOS/oeS7tuWbnuW+qSIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNDkxCittc2dpZCAiVGhlIHJlcXVpcmVkIFNNVFAgc2VydmVyIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkLiIKK21zZ3N0ciAi6KaB5rGC55qEIFNNVFAg5Ly65pyN5Zmo5pyq6KKr5q2j56K65a6a576p44CCIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1MzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgU1RBUlRUTFMhICVzIgorbXNnc3RyICLkvLrmnI3lmajkuI3mlK/mj7QgU1RBUlRUTFPvvIElcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTQzIGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU0NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJTVEFSVFRMUyBmYWlsZWQhICVzIgorbXNnc3RyICJTVEFSVFRMUyDlpLHmlZfvvIElcyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTU2Cittc2dpZCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiIKK21zZ3N0ciAi54Sh5rOV5q2j56K65Zyw5Yid5aeL5YyWIFNNVFDjgILmqqLmn6XoqK3lrprkuKbkvb/nlKggLS1zbXRwLWRlYnVn44CCIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzQKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHNlbmQgJXNcbiIKK21zZ3N0ciAi54Sh5rOV5YKz6YCBICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3NworIywgcGVybC1mb3JtYXQKK21zZ2lkICJEcnktU2VudCAlc1xuIgorbXNnc3RyICLmuKzoqabln7fooYzlgrPpgIEgJXNcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNTc3CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNlbnQgJXNcbiIKK21zZ3N0ciAi5q2j5YKz6YCBICVzXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU3OQorbXNnaWQgIkRyeS1PSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIua4rOippuWft+ihjOaIkOWKn+OAguaXpeiqjOiqqu+8mlxuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE1NzkKK21zZ2lkICJPSy4gTG9nIHNheXM6XG4iCittc2dzdHIgIk9L44CC5pel6KqM6Kqq77yaXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5MQorbXNnaWQgIlJlc3VsdDogIgorbXNnc3RyICLntZDmnpzvvJoiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTU5NAorbXNnaWQgIlJlc3VsdDogT0tcbiIKK21zZ3N0ciAi57WQ5p6c77yaT0tcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxNjEyCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gZmlsZSAlcyIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf5qqU5qGIICVzIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NTkgZ2l0LXNlbmQtZW1haWwucGVybDoxNjc5CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iCittc2dzdHIgIihtYm94KSDmlrDlop4gY2PvvJolcyDoh6rooYwgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE2NjUKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKG1ib3gpIEFkZGluZyB0bzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG1ib3gpIOaWsOWiniB0b++8miVzIOiHquihjCAnJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTcxOAorIywgcGVybC1mb3JtYXQKK21zZ2lkICIobm9uLW1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKG5vbi1tYm94KSDmlrDlop4gY2PvvJolcyDoh6rooYwgJyVzJ1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE3NTMKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiKGJvZHkpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIKK21zZ3N0ciAiKGJvZHkpIOaWsOWiniBjYzogJXMg6Ieq6KGMICclcydcbiIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODY0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQ291bGQgbm90IGV4ZWN1dGUgJyVzJyIKK21zZ3N0ciAiKCVzKSDkuI3og73ln7fooYwgJyVzJyIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxODcxCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIiglcykgQWRkaW5nICVzOiAlcyBmcm9tOiAnJXMnXG4iCittc2dzdHIgIiglcykg5paw5aKeICVzOiAlcyDoh6rvvJonJXMnXG4iCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTg3NQorIywgcGVybC1mb3JtYXQKK21zZ2lkICIoJXMpIGZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICclcyciCittc2dzdHIgIiglcykg54Sh5rOV6Zec6ZaJ566h6YGT6IezICclcyciCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTkwNQorbXNnaWQgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIKK21zZ3N0ciAi5LiN6IO95LulIDdiaXQg5b2i5byP5YKz6YCB6KiK5oGvIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5MTMKK21zZ2lkICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIgorbXNnc3RyICLnhKHmlYjnmoTlgrPpgIHnt6jnorwiCisKKyM6IGdpdC1zZW5kLWVtYWlsLnBlcmw6MTk1NCBnaXQtc2VuZC1lbWFpbC5wZXJsOjIwMDYgZ2l0LXNlbmQtZW1haWwucGVybDoyMDE2CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzOiAlc1xuIgorbXNnc3RyICLkuI3og73plovllZ8gJXPvvJolc1xuIgorCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NTcKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGNvbnRhaW5zIGEgbGluZSBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVycyIKK21zZ3N0ciAiJXPvvJrkv67oo5zmqpTljIXlkKvkuIDlgIvotoXpgY4gOTk4IOWtl+WFg+eahOihjCIKKworIzogZ2l0LXNlbmQtZW1haWwucGVybDoxOTc0CisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nICVzIHdpdGggYmFja3VwIHN1ZmZpeCAnJXMnLlxuIgorbXNnc3RyICLnlaXpgY4gJXMg5ZCr5YKZ5Lu95b6M57a0ICclcyfjgIJcbiIKKworIy4gVFJBTlNMQVRPUlM6IHBsZWFzZSBrZWVwICJbeXxOXSIgYXMgaXMuCisjOiBnaXQtc2VuZC1lbWFpbC5wZXJsOjE5NzgKKyMsIHBlcmwtZm9ybWF0Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIHNlbmQgJXM/IFt5fE5dOiAiCittc2dzdHIgIuaCqOecn+eahOimgeWCs+mAgSAlc++8n1t5fE5d77yaIgorCisjLCBjLWZvcm1hdAorI34gbXNnaWQgInVuYWJsZSB0byBnZXQgdHJlZSBmb3IgJXMiCisjfiBtc2dzdHIgIueEoeazleW+l+WIsCAlcyDnmoTmqLnni4Dnianku7YiCisKKyN+IG1zZ2lkICJVc2UgYW4gZXhwZXJpbWVudGFsIGhldXJpc3RpYyB0byBpbXByb3ZlIGRpZmZzIgorI34gbXNnc3RyICLkvb/nlKjkuIDlgIvlr6bpqZfmgKfnmoTllZ/nmbzlvI/mvJTnrpfms5XmlLnpgLLlt67nlbDpoa/npLoiCisKKyN+IG1zZ2lkICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorI34gbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIFstLW9iamVjdC1kaXIgPOeJqeS7tuebrumMhD5dIgorCisjfiBtc2dpZCAiZ2l0IGNvbW1pdC1ncmFwaCByZWFkIFstLW9iamVjdC1kaXIgPG9iamRpcj5dIgorI34gbXNnc3RyICJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA854mp5Lu255uu6YyEPl0iCmRpZmYgLS1naXQgYS9wcGMvc2hhMS5jIGIvcHBjL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjcwNWNlCi0tLSAvZGV2L251bGwKKysrIGIvcHBjL3NoYTEuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogU0hBLTEgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgorICoKKyAqIFRoaXMgdmVyc2lvbiBhc3N1bWVzIHdlIGFyZSBydW5uaW5nIG9uIGEgYmlnLWVuZGlhbiBtYWNoaW5lLgorICogSXQgY2FsbHMgYW4gZXh0ZXJuYWwgc2hhMV9jb3JlKCkgdG8gcHJvY2VzcyBibG9ja3Mgb2YgNjQgYnl0ZXMuCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInNoYTEuaCIKKwordm9pZCBwcGNfc2hhMV9jb3JlKHVpbnQzMl90ICpoYXNoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwLAorCQkgICB1bnNpZ25lZCBpbnQgbmJsb2Nrcyk7CisKK2ludCBwcGNfU0hBMV9Jbml0KHBwY19TSEFfQ1RYICpjKQoreworCWMtPmhhc2hbMF0gPSAweDY3NDUyMzAxOworCWMtPmhhc2hbMV0gPSAweEVGQ0RBQjg5OworCWMtPmhhc2hbMl0gPSAweDk4QkFEQ0ZFOworCWMtPmhhc2hbM10gPSAweDEwMzI1NDc2OworCWMtPmhhc2hbNF0gPSAweEMzRDJFMUYwOworCWMtPmxlbiA9IDA7CisJYy0+Y250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IHBwY19TSEExX1VwZGF0ZShwcGNfU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG4pCit7CisJdW5zaWduZWQgbG9uZyBuYjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gcHRyOworCisJYy0+bGVuICs9ICh1aW50NjRfdCkgbiA8PCAzOworCXdoaWxlIChuICE9IDApIHsKKwkJaWYgKGMtPmNudCB8fCBuIDwgNjQpIHsKKwkJCW5iID0gNjQgLSBjLT5jbnQ7CisJCQlpZiAobmIgPiBuKQorCQkJCW5iID0gbjsKKwkJCW1lbWNweSgmYy0+YnVmLmJbYy0+Y250XSwgcCwgbmIpOworCQkJaWYgKChjLT5jbnQgKz0gbmIpID09IDY0KSB7CisJCQkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJCQkJYy0+Y250ID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW5iID0gbiA+PiA2OworCQkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBwLCBuYik7CisJCQluYiA8PD0gNjsKKwkJfQorCQluIC09IG5iOworCQlwICs9IG5iOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHBwY19TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHBwY19TSEFfQ1RYICpjKQoreworCXVuc2lnbmVkIGludCBjbnQgPSBjLT5jbnQ7CisKKwljLT5idWYuYltjbnQrK10gPSAweDgwOworCWlmIChjbnQgPiA1NikgeworCQlpZiAoY250IDwgNjQpCisJCQltZW1zZXQoJmMtPmJ1Zi5iW2NudF0sIDAsIDY0IC0gY250KTsKKwkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJCWNudCA9IDA7CisJfQorCWlmIChjbnQgPCA1NikKKwkJbWVtc2V0KCZjLT5idWYuYltjbnRdLCAwLCA1NiAtIGNudCk7CisJYy0+YnVmLmxbN10gPSBjLT5sZW47CisJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJbWVtY3B5KGhhc2gsIGMtPmhhc2gsIDIwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3BwYy9zaGExLmggYi9wcGMvc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjRiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9wcGMvc2hhMS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBTSEEtMSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CisgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IGhhc2hbNV07CisJdWludDMyX3QgY250OworCXVpbnQ2NF90IGxlbjsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgYls2NF07CisJCXVpbnQ2NF90IGxbOF07CisJfSBidWY7Cit9IHBwY19TSEFfQ1RYOworCitpbnQgcHBjX1NIQTFfSW5pdChwcGNfU0hBX0NUWCAqYyk7CitpbnQgcHBjX1NIQTFfVXBkYXRlKHBwY19TSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIG4pOworaW50IHBwY19TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHBwY19TSEFfQ1RYICpjKTsKKworI2RlZmluZSBwbGF0Zm9ybV9TSEFfQ1RYCXBwY19TSEFfQ1RYCisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfSW5pdAlwcGNfU0hBMV9Jbml0CisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfVXBkYXRlCXBwY19TSEExX1VwZGF0ZQorI2RlZmluZSBwbGF0Zm9ybV9TSEExX0ZpbmFsCXBwY19TSEExX0ZpbmFsCmRpZmYgLS1naXQgYS9wcGMvc2hhMXBwYy5TIGIvcHBjL3NoYTFwcGMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzExZWVmCi0tLSAvZGV2L251bGwKKysrIGIvcHBjL3NoYTFwcGMuUwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIFNIQS0xIGltcGxlbWVudGF0aW9uIGZvciBQb3dlclBDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KKyAqLworCisvKgorICogUG93ZXJQQyBjYWxsaW5nIGNvbnZlbnRpb246CisgKiAlcjAgLSB2b2xhdGlsZSB0ZW1wCisgKiAlcjEgLSBzdGFjayBwb2ludGVyLgorICogJXIyIC0gcmVzZXJ2ZWQKKyAqICVyMy0lcjEyIC0gSW5jb21pbmcgYXJndW1lbnRzICYgcmV0dXJuIHZhbHVlczsgdm9sYXRpbGUuCisgKiAlcjEzLSVyMzEgLSBDYWxsZWUtc2F2ZSByZWdpc3RlcnMKKyAqICVsciAtIFJldHVybiBhZGRyZXNzLCB2b2xhdGlsZQorICogJWN0ciAtIHZvbGF0aWxlCisgKgorICogUmVnaXN0ZXIgdXNhZ2UgaW4gdGhpcyByb3V0aW5lOgorICogJXIwIC0gdGVtcAorICogJXIzIC0gYXJndW1lbnQgKHBvaW50ZXIgdG8gNSB3b3JkcyBvZiBTSEEgc3RhdGUpCisgKiAlcjQgLSBhcmd1bWVudCAocG9pbnRlciB0byBkYXRhIHRvIGhhc2gpCisgKiAlcjUgLSBDb25zdGFudCBLIGluIFNIQSByb3VuZCAoaW5pdGlhbGx5IG51bWJlciBvZiBibG9ja3MgdG8gaGFzaCkKKyAqICVyNi0lcjEwIC0gV29ya2luZyBjb3BpZXMgb2YgU0hBIHZhcmlhYmxlcyBBLi5FIChhY3R1YWxseSBFLi5BIG9yZGVyKQorICogJXIxMS0lcjI2IC0gRGF0YSBiZWluZyBoYXNoZWQgV1tdLgorICogJXIyNy0lcjMxIC0gUHJldmlvdXMgY29waWVzIG9mIEEuLkUsIGZvciBmaW5hbCBhZGQgYmFjay4KKyAqICVjdHIgLSBsb29wIGNvdW50CisgKi8KKworCisvKgorICogV2Ugcm9sbCB0aGUgcmVnaXN0ZXJzIGZvciBBLCBCLCBDLCBELCBFIGFyb3VuZCBvbiBlYWNoCisgKiBpdGVyYXRpb247IEUgb24gaXRlcmF0aW9uIHQgaXMgRCBvbiBpdGVyYXRpb24gdCsxLCBhbmQgc28gb24uCisgKiBXZSB1c2UgcmVnaXN0ZXJzIDYgLSAxMCBmb3IgdGhpcy4gIChSZWdpc3RlcnMgMjcgLSAzMSBob2xkCisgKiB0aGUgcHJldmlvdXMgdmFsdWVzLikKKyAqLworI2RlZmluZSBSQSh0KQkoKCh0KSs0KSU1KzYpCisjZGVmaW5lIFJCKHQpCSgoKHQpKzMpJTUrNikKKyNkZWZpbmUgUkModCkJKCgodCkrMiklNSs2KQorI2RlZmluZSBSRCh0KQkoKCh0KSsxKSU1KzYpCisjZGVmaW5lIFJFKHQpCSgoKHQpKzApJTUrNikKKworLyogV2UgdXNlIHJlZ2lzdGVycyAxMSAtIDI2IGZvciB0aGUgVyB2YWx1ZXMgKi8KKyNkZWZpbmUgVyh0KQkoKHQpJTE2KzExKQorCisvKiBSZWdpc3RlciA1IGlzIHVzZWQgZm9yIHRoZSBjb25zdGFudCBrICovCisKKy8qCisgKiBUaGUgYmFzaWMgU0hBLTEgcm91bmQgZnVuY3Rpb24gaXM6CisgKiBFICs9IFJPVEwoQSw1KSArIEYoQixDLEQpICsgV1tpXSArIEs7ICBCID0gUk9UTChCLDMwKQorICogVGhlbiB0aGUgdmFyaWFibGVzIGFyZSByZW5hbWVkOiAoQSxCLEMsRCxFKSA9IChFLEEsQixDLEQpLgorICoKKyAqIEV2ZXJ5IDIwIHJvdW5kcywgdGhlIGZ1bmN0aW9uIEYoKSBhbmQgdGhlIGNvbnN0YW50IEsgY2hhbmdlczoKKyAqIC0gMjAgcm91bmRzIG9mIGYwKGIsYyxkKSA9ICJiaXQgd2lzZSBiID8gYyA6IGQiID0gICheYiAmIGQpICsgKGIgJiBjKQorICogLSAyMCByb3VuZHMgb2YgZjEoYixjLGQpID0gYl5jXmQgPSAoYl5kKV5jCisgKiAtIDIwIHJvdW5kcyBvZiBmMihiLGMsZCkgPSBtYWpvcml0eShiLGMsZCkgPSAoYiZkKSArICgoYl5kKSZjKQorICogLSAyMCBtb3JlIHJvdW5kcyBvZiBmMShiLGMsZCkKKyAqCisgKiBUaGVzZSBhcmUgYWxsIHNjaGVkdWxlZCBmb3IgbmVhci1vcHRpbWFsIHBlcmZvcm1hbmNlIG9uIGEgRzQuCisgKiBUaGUgRzQgaXMgYSAzLWlzc3VlIG91dC1vZi1vcmRlciBtYWNoaW5lIHdpdGggMyBBTFVzLCBidXQgaXQgY2FuIG9ubHkKKyAqICpjb25zaWRlciogc3RhcnRpbmcgdGhlIG9sZGVzdCAzIGluc3RydWN0aW9ucyBwZXIgY3ljbGUuICBTbyB0byBnZXQKKyAqIG1heGltdW0gcGVyZm9ybWFuY2Ugb3V0IG9mIGl0LCB5b3UgaGF2ZSB0byB0cmVhdCBpdCBhcyBhbiBpbi1vcmRlcgorICogbWFjaGluZS4gIFdoaWNoIG1lYW5zIGludGVybGVhdmluZyB0aGUgY29tcHV0YXRpb24gcm91bmQgdCB3aXRoIHRoZQorICogY29tcHV0YXRpb24gb2YgV1t0KzRdLgorICoKKyAqIFRoZSBmaXJzdCAxNiByb3VuZHMgdXNlIFcgdmFsdWVzIGxvYWRlZCBkaXJlY3RseSBmcm9tIG1lbW9yeSwgd2hpbGUgdGhlCisgKiByZW1haW5pbmcgNjQgdXNlIHZhbHVlcyBjb21wdXRlZCBmcm9tIHRob3NlIGZpcnN0IDE2LiAgV2UgcHJlbG9hZAorICogNCB2YWx1ZXMgYmVmb3JlIHN0YXJ0aW5nLCBzbyB0aGVyZSBhcmUgdGhyZWUga2luZHMgb2Ygcm91bmRzOgorICogLSBUaGUgZmlyc3QgMTIgKGFsbCBmMCkgYWxzbyBsb2FkIHRoZSBXIHZhbHVlcyBmcm9tIG1lbW9yeS4KKyAqIC0gVGhlIG5leHQgNjQgY29tcHV0ZSBXKGkrNCkgaW4gcGFyYWxsZWwuIDgqZjAsIDIwKmYxLCAyMCpmMiwgMTYqZjEuCisgKiAtIFRoZSBsYXN0IDQgKGFsbCBmMSkgZG8gbm90IGRvIGFueXRoaW5nIHdpdGggVy4KKyAqCisgKiBUaGVyZWZvcmUsIHdlIGhhdmUgNiBkaWZmZXJlbnQgcm91bmQgZnVuY3Rpb25zOgorICogU1RFUEQwX0xPQUQodCxzKSAtIFBlcmZvcm0gcm91bmQgdCBhbmQgbG9hZCBXKHMpLiAgcyA8IDE2CisgKiBTVEVQRDBfVVBEQVRFKHQscykgLSBQZXJmb3JtIHJvdW5kIHQgYW5kIGNvbXB1dGUgVyhzKS4gIHMgPj0gMTYuCisgKiBTVEVQRDFfVVBEQVRFKHQscykKKyAqIFNURVBEMl9VUERBVEUodCxzKQorICogU1RFUEQxKHQpIC0gUGVyZm9ybSByb3VuZCB0IHdpdGggbm8gbG9hZCBvciB1cGRhdGUuCisgKgorICogVGhlIEc1IGlzIG1vcmUgZnVsbHkgb3V0LW9mLW9yZGVyLCBhbmQgY2FuIGZpbmQgdGhlIHBhcmFsbGVsaXNtCisgKiBieSBpdHNlbGYuICBUaGUgYmlnIGxpbWl0IGlzIHRoYXQgaXQgaGFzIGEgMi1jeWNsZSBBTFUgbGF0ZW5jeSwgc28KKyAqIGV2ZW4gdGhvdWdoIGl0J3MgMi13YXksIHRoZSBjb2RlIGhhcyB0byBiZSBzY2hlZHVsZWQgYXMgaWYgaXQncworICogNC13YXksIHdoaWNoIGNhbiBiZSBhIGxpbWl0LiAgVG8gaGVscCBpdCwgd2UgdHJ5IHRvIHNjaGVkdWxlIHRoZQorICogcmVhZCBvZiBSQSh0KSBhcyBsYXRlIGFzIHBvc3NpYmxlIHNvIGl0IGRvZXNuJ3Qgc3RhbGwgd2FpdGluZyBmb3IKKyAqIHRoZSBwcmV2aW91cyByb3VuZCdzIFJFKHQtMSksIGFuZCB3ZSB0cnkgdG8gcm90YXRlIFJCKHQpIGFzIGVhcmx5CisgKiBhcyBwb3NzaWJsZSB3aGlsZSByZWFkaW5nIFJDKHQpICg9IFJCKHQtMSkpIGFzIGxhdGUgYXMgcG9zc2libGUuCisgKi8KKworLyogdGhlIGluaXRpYWwgbG9hZHMuICovCisjZGVmaW5lIExPQURXKHMpIFwKKwlsd3oJVyhzKSwocykqNCglcjQpCisKKy8qCisgKiBQZXJmb3JtIGEgc3RlcCB3aXRoIEYwLCBhbmQgbG9hZCBXKHMpLiAgVXNlcyBXKHMpIGFzIGEgdGVtcG9yYXJ5CisgKiBiZWZvcmUgbG9hZGluZyBpdC4KKyAqIFRoaXMgaXMgYWN0dWFsbHkgMTAgaW5zdHJ1Y3Rpb25zLCB3aGljaCBpcyBhbiBhd2t3YXJkIGZpdC4KKyAqIEl0IGNhbiBleGVjdXRlIGdyb3VwZWQgYXMgbGlzdGVkLCBvciBkZWxheWVkIG9uZSBpbnN0cnVjdGlvbi4KKyAqIChJZiBkZWxheWVkIHR3byBpbnN0cnVjdGlvbnMsIHRoZXJlIGlzIGEgc3RhbGwgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUKKyAqIHNlY29uZCBsaW5lLikgIFRodXMsIHR3byBpdGVyYXRpb25zIHRha2UgNyBjeWNsZXMsIDMuNSBjeWNsZXMgcGVyIHJvdW5kLgorICovCisjZGVmaW5lIFNURVBEMF9MT0FEKHQscykgXAorYWRkIFJFKHQpLFJFKHQpLFcodCk7IGFuZGMgICAlcjAsUkQodCksUkIodCk7ICBhbmQgICAgVyhzKSxSQyh0KSxSQih0KTsgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHJvdGx3aSAlcjAsUkEodCksNTsgICAgICByb3Rsd2kgUkIodCksUkIodCksMzA7ICAgXAorYWRkIFJFKHQpLFJFKHQpLFcocyk7IGFkZCAgICAlcjAsJXIwLCVyNTsgICAgICBsd3ogICAgVyhzKSwocykqNCglcjQpOyAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMAorCisvKgorICogVGhpcyBpcyBsaWtld2lzZSBhd2t3YXJkLCAxMyBpbnN0cnVjdGlvbnMuICBIb3dldmVyLCBpdCBjYW4gYWxzbworICogZXhlY3V0ZSBzdGFydGluZyB3aXRoIDIgb3V0IG9mIDMgcG9zc2libGUgbW9kdWxpLCBzbyBpdCBkb2VzIDIgcm91bmRzCisgKiBpbiA5IGN5Y2xlcywgNC41IGN5Y2xlcy9yb3VuZC4KKyAqLworI2RlZmluZSBTVEVQRDBfVVBEQVRFKHQscyxsb2Fkay4uLikgXAorYWRkIFJFKHQpLFJFKHQpLFcodCk7IGFuZGMgICAlcjAsUkQodCksUkIodCk7IHhvciAgICBXKHMpLFcoKHMpLTE2KSxXKChzKS0zKTsgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIGFuZCAgICAlcjAsUkModCksUkIodCk7IHhvciAgICBXKHMpLFcocyksVygocyktOCk7ICAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMDsgIHJvdGx3aSAlcjAsUkEodCksNTsgICAgIHhvciAgICBXKHMpLFcocyksVygocyktMTQpOyAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyNTsgIGxvYWRrOyByb3Rsd2kgUkIodCksUkIodCksMzA7ICByb3Rsd2kgVyhzKSxXKHMpLDE7ICAgICBcCithZGQgUkUodCksUkUodCksJXIwCisKKy8qIE5pY2VseSBvcHRpbWFsLiAgQ29udmVuaWVudGx5LCBhbHNvIHRoZSBtb3N0IGNvbW1vbi4gKi8KKyNkZWZpbmUgU1RFUEQxX1VQREFURSh0LHMsbG9hZGsuLi4pIFwKK2FkZCBSRSh0KSxSRSh0KSxXKHQpOyB4b3IgICAgJXIwLFJEKHQpLFJCKHQpOyB4b3IgICAgVyhzKSxXKChzKS0xNiksVygocyktMyk7IFwKK2FkZCBSRSh0KSxSRSh0KSwlcjU7ICBsb2FkazsgeG9yICVyMCwlcjAsUkModCk7ICB4b3IgVyhzKSxXKHMpLFcoKHMpLTgpOyAgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgJXIwLFJBKHQpLDU7ICAgICB4b3IgICAgVyhzKSxXKHMpLFcoKHMpLTE0KTsgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgUkIodCksUkIodCksMzA7ICByb3Rsd2kgVyhzKSxXKHMpLDEKKworLyoKKyAqIFRoZSBuYWtlZCB2ZXJzaW9uLCBubyBVUERBVEUsIGZvciB0aGUgbGFzdCA0IHJvdW5kcy4gIDMgY3ljbGVzIHBlci4KKyAqIFdlIGNvdWxkIHVzZSBXKHMpIGFzIGEgdGVtcCByZWdpc3RlciwgYnV0IHdlIGRvbid0IG5lZWQgaXQuCisgKi8KKyNkZWZpbmUgU1RFUEQxKHQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCAgIFJFKHQpLFJFKHQpLFcodCk7IHhvciAgICAlcjAsUkQodCksUkIodCk7IFwKK3JvdGx3aSBSQih0KSxSQih0KSwzMDsgIGFkZCAgIFJFKHQpLFJFKHQpLCVyNTsgIHhvciAgICAlcjAsJXIwLFJDKHQpOyAgIFwKK2FkZCAgICBSRSh0KSxSRSh0KSwlcjA7IHJvdGx3aSAlcjAsUkEodCksNTsgICAgIC8qIHNwYXJlIHNsb3QgKi8gICAgICAgIFwKK2FkZCAgICBSRSh0KSxSRSh0KSwlcjAKKworLyoKKyAqIDE0IGluc3RydWN0aW9ucywgNSBjeWNsZXMgcGVyLiAgVGhlIG1ham9yaXR5IGZ1bmN0aW9uIGlzIGEgYml0CisgKiBhd2t3YXJkIHRvIGNvbXB1dGUuICBUaGlzIGNhbiBleGVjdXRlIHdpdGggYSAxLWluc3RydWN0aW9uIGRlbGF5LAorICogYnV0IGl0IGNhdXNlcyBhIDItaW5zdHJ1Y3Rpb24gZGVsYXksIHdoaWNoIHRyaWdnZXJzIGEgc3RhbGwuCisgKi8KKyNkZWZpbmUgU1RFUEQyX1VQREFURSh0LHMsbG9hZGsuLi4pIFwKK2FkZCBSRSh0KSxSRSh0KSxXKHQpOyBhbmQgICAgJXIwLFJEKHQpLFJCKHQpOyB4b3IgICAgVyhzKSxXKChzKS0xNiksVygocyktMyk7IFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICB4b3IgICAgJXIwLFJEKHQpLFJCKHQpOyB4b3IgICAgVyhzKSxXKHMpLFcoKHMpLTgpOyAgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjU7ICBsb2FkazsgYW5kICVyMCwlcjAsUkModCk7ICB4b3IgVyhzKSxXKHMpLFcoKHMpLTE0KTsgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgJXIwLFJBKHQpLDU7ICAgICByb3Rsd2kgVyhzKSxXKHMpLDE7ICAgICAgICAgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgUkIodCksUkIodCksMzAKKworI2RlZmluZSBTVEVQMF9MT0FENCh0LHMpCQlcCisJU1RFUEQwX0xPQUQodCxzKTsJCVwKKwlTVEVQRDBfTE9BRCgodCsxKSwocykrMSk7CVwKKwlTVEVQRDBfTE9BRCgodCkrMiwocykrMik7CVwKKwlTVEVQRDBfTE9BRCgodCkrMywocykrMykKKworI2RlZmluZSBTVEVQVVA0KGZuLCB0LCBzLCBsb2Fkay4uLikJCVwKKwlTVEVQIyNmbiMjX1VQREFURSh0LHMsKTsJCVwKKwlTVEVQIyNmbiMjX1VQREFURSgodCkrMSwocykrMSwpOwlcCisJU1RFUCMjZm4jI19VUERBVEUoKHQpKzIsKHMpKzIsKTsJXAorCVNURVAjI2ZuIyNfVVBEQVRFKCh0KSszLChzKSszLGxvYWRrKQorCisjZGVmaW5lIFNURVBVUDIwKGZuLCB0LCBzLCBsb2Fkay4uLikJXAorCVNURVBVUDQoZm4sIHQsIHMsKTsJCVwKKwlTVEVQVVA0KGZuLCAodCkrNCwgKHMpKzQsKTsJXAorCVNURVBVUDQoZm4sICh0KSs4LCAocykrOCwpOwlcCisJU1RFUFVQNChmbiwgKHQpKzEyLCAocykrMTIsKTsJXAorCVNURVBVUDQoZm4sICh0KSsxNiwgKHMpKzE2LCBsb2FkaykKKworCS5nbG9ibAlwcGNfc2hhMV9jb3JlCitwcGNfc2hhMV9jb3JlOgorCXN0d3UJJXIxLC04MCglcjEpCisJc3RtdwklcjEzLDQoJXIxKQorCisJLyogTG9hZCB1cCBBIC0gRSAqLworCWxtdwklcjI3LDAoJXIzKQorCisJbXRjdHIJJXI1CisKKzE6CisJTE9BRFcoMCkKKwlsaXMJJXI1LDB4NWE4MgorCW1yCVJFKDApLCVyMzEKKwlMT0FEVygxKQorCW1yCVJEKDApLCVyMzAKKwltcglSQygwKSwlcjI5CisJTE9BRFcoMikKKwlvcmkJJXI1LCVyNSwweDc5OTkJLyogSzAtMTkgKi8KKwltcglSQigwKSwlcjI4CisJTE9BRFcoMykKKwltcglSQSgwKSwlcjI3CisKKwlTVEVQMF9MT0FENCgwLCA0KQorCVNURVAwX0xPQUQ0KDQsIDgpCisJU1RFUDBfTE9BRDQoOCwgMTIpCisJU1RFUFVQNChEMCwgMTIsIDE2LCkKKwlTVEVQVVA0KEQwLCAxNiwgMjAsIGxpcyAlcjUsMHg2ZWQ5KQorCisJb3JpCSVyNSwlcjUsMHhlYmExCS8qIEsyMC0zOSAqLworCVNURVBVUDIwKEQxLCAyMCwgMjQsIGxpcyAlcjUsMHg4ZjFiKQorCisJb3JpCSVyNSwlcjUsMHhiY2RjCS8qIEs0MC01OSAqLworCVNURVBVUDIwKEQyLCA0MCwgNDQsIGxpcyAlcjUsMHhjYTYyKQorCisJb3JpCSVyNSwlcjUsMHhjMWQ2CS8qIEs2MC03OSAqLworCVNURVBVUDQoRDEsIDYwLCA2NCwpCisJU1RFUFVQNChEMSwgNjQsIDY4LCkKKwlTVEVQVVA0KEQxLCA2OCwgNzIsKQorCVNURVBVUDQoRDEsIDcyLCA3NiwpCisJYWRkaQklcjQsJXI0LDY0CisJU1RFUEQxKDc2KQorCVNURVBEMSg3NykKKwlTVEVQRDEoNzgpCisJU1RFUEQxKDc5KQorCisJLyogQWRkIHJlc3VsdHMgdG8gb3JpZ2luYWwgdmFsdWVzICovCisJYWRkCSVyMzEsJXIzMSxSRSgwKQorCWFkZAklcjMwLCVyMzAsUkQoMCkKKwlhZGQJJXIyOSwlcjI5LFJDKDApCisJYWRkCSVyMjgsJXIyOCxSQigwKQorCWFkZAklcjI3LCVyMjcsUkEoMCkKKworCWJkbnoJMWIKKworCS8qIFNhdmUgZmluYWwgaGFzaCwgcmVzdG9yZSByZWdpc3RlcnMsIGFuZCByZXR1cm4gKi8KKwlzdG13CSVyMjcsMCglcjMpCisJbG13CSVyMTMsNCglcjEpCisJYWRkaQklcjEsJXIxLDgwCisJYmxyCmRpZmYgLS1naXQgYS9wcmVsb2FkLWluZGV4LmMgYi9wcmVsb2FkLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2ZWFhNAotLS0gL2Rldi9udWxsCisrKyBiL3ByZWxvYWQtaW5kZXguYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBMaW51cyBUb3J2YWxkcworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImZzbW9uaXRvci5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCisvKgorICogTW9zdGx5IHJhbmRvbWx5IGNob3NlbiBtYXhpbXVtIHRocmVhZCBjb3VudHM6IHdlCisgKiBjYXAgdGhlIHBhcmFsbGVsaXNtIHRvIDIwIHRocmVhZHMsIGFuZCB3ZSB3YW50CisgKiB0byBoYXZlIGF0IGxlYXN0IDUwMCBsc3RhdCdzIHBlciB0aHJlYWQgZm9yIGl0IHRvCisgKiBiZSB3b3J0aCBzdGFydGluZyBhIHRocmVhZC4KKyAqLworI2RlZmluZSBNQVhfUEFSQUxMRUwgKDIwKQorI2RlZmluZSBUSFJFQURfQ09TVCAoNTAwKQorCitzdHJ1Y3QgcHJvZ3Jlc3NfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBuOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisJcHRocmVhZF9tdXRleF90IG11dGV4OworfTsKKworc3RydWN0IHRocmVhZF9kYXRhIHsKKwlwdGhyZWFkX3QgcHRocmVhZDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4OworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgcHJvZ3Jlc3NfZGF0YSAqcHJvZ3Jlc3M7CisJaW50IG9mZnNldCwgbnI7Cit9OworCitzdGF0aWMgdm9pZCAqcHJlbG9hZF90aHJlYWQodm9pZCAqX2RhdGEpCit7CisJaW50IG5yLCBsYXN0X25yOworCXN0cnVjdCB0aHJlYWRfZGF0YSAqcCA9IF9kYXRhOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBwLT5pbmRleDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjZXAgPSBpbmRleC0+Y2FjaGUgKyBwLT5vZmZzZXQ7CisJc3RydWN0IGNhY2hlX2RlZiBjYWNoZSA9IENBQ0hFX0RFRl9JTklUOworCisJbnIgPSBwLT5ucjsKKwlpZiAobnIgKyBwLT5vZmZzZXQgPiBpbmRleC0+Y2FjaGVfbnIpCisJCW5yID0gaW5kZXgtPmNhY2hlX25yIC0gcC0+b2Zmc2V0OworCWxhc3RfbnIgPSBucjsKKworCWRvIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9ICpjZXArKzsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKGNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisJCWlmIChjZV91cHRvZGF0ZShjZSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQkJY29udGludWU7CisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9GU01PTklUT1JfVkFMSUQpCisJCQljb250aW51ZTsKKwkJaWYgKHAtPnByb2dyZXNzICYmICEobnIgJiAzMSkpIHsKKwkJCXN0cnVjdCBwcm9ncmVzc19kYXRhICpwZCA9IHAtPnByb2dyZXNzOworCisJCQlwdGhyZWFkX211dGV4X2xvY2soJnBkLT5tdXRleCk7CisJCQlwZC0+biArPSBsYXN0X25yIC0gbnI7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHBkLT5wcm9ncmVzcywgcGQtPm4pOworCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnBkLT5tdXRleCk7CisJCQlsYXN0X25yID0gbnI7CisJCX0KKwkJaWYgKCFjZV9wYXRoX21hdGNoKGluZGV4LCBjZSwgJnAtPnBhdGhzcGVjLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQlpZiAodGhyZWFkZWRfaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKCZjYWNoZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkpCisJCQljb250aW51ZTsKKwkJaWYgKGllX21hdGNoX3N0YXQoaW5kZXgsIGNlLCAmc3QsIENFX01BVENIX1JBQ1lfSVNfRElSVFl8Q0VfTUFUQ0hfSUdOT1JFX0ZTTU9OSVRPUikpCisJCQljb250aW51ZTsKKwkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCW1hcmtfZnNtb25pdG9yX3ZhbGlkKGluZGV4LCBjZSk7CisJfSB3aGlsZSAoLS1uciA+IDApOworCWlmIChwLT5wcm9ncmVzcykgeworCQlzdHJ1Y3QgcHJvZ3Jlc3NfZGF0YSAqcGQgPSBwLT5wcm9ncmVzczsKKworCQlwdGhyZWFkX211dGV4X2xvY2soJnBkLT5tdXRleCk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocGQtPnByb2dyZXNzLCBwZC0+biArIGxhc3RfbnIpOworCQlwdGhyZWFkX211dGV4X3VubG9jaygmcGQtPm11dGV4KTsKKwl9CisJY2FjaGVfZGVmX2NsZWFyKCZjYWNoZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcHJlbG9hZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4LAorCQkgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICB1bnNpZ25lZCBpbnQgcmVmcmVzaF9mbGFncykKK3sKKwlpbnQgdGhyZWFkcywgaSwgd29yaywgb2Zmc2V0OworCXN0cnVjdCB0aHJlYWRfZGF0YSBkYXRhW01BWF9QQVJBTExFTF07CisJc3RydWN0IHByb2dyZXNzX2RhdGEgcGQ7CisKKwlpZiAoIUhBVkVfVEhSRUFEUyB8fCAhY29yZV9wcmVsb2FkX2luZGV4KQorCQlyZXR1cm47CisKKwl0aHJlYWRzID0gaW5kZXgtPmNhY2hlX25yIC8gVEhSRUFEX0NPU1Q7CisJaWYgKChpbmRleC0+Y2FjaGVfbnIgPiAxKSAmJiAodGhyZWFkcyA8IDIpICYmIGdpdF9lbnZfYm9vbCgiR0lUX1RFU1RfUFJFTE9BRF9JTkRFWCIsIDApKQorCQl0aHJlYWRzID0gMjsKKwlpZiAodGhyZWFkcyA8IDIpCisJCXJldHVybjsKKwl0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcigpOworCWlmICh0aHJlYWRzID4gTUFYX1BBUkFMTEVMKQorCQl0aHJlYWRzID0gTUFYX1BBUkFMTEVMOworCW9mZnNldCA9IDA7CisJd29yayA9IERJVl9ST1VORF9VUChpbmRleC0+Y2FjaGVfbnIsIHRocmVhZHMpOworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKworCW1lbXNldCgmcGQsIDAsIHNpemVvZihwZCkpOworCWlmIChyZWZyZXNoX2ZsYWdzICYgUkVGUkVTSF9QUk9HUkVTUyAmJiBpc2F0dHkoMikpIHsKKwkJcGQucHJvZ3Jlc3MgPSBzdGFydF9kZWxheWVkX3Byb2dyZXNzKF8oIlJlZnJlc2hpbmcgaW5kZXgiKSwgaW5kZXgtPmNhY2hlX25yKTsKKwkJcHRocmVhZF9tdXRleF9pbml0KCZwZC5tdXRleCwgTlVMTCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHRocmVhZHM7IGkrKykgeworCQlzdHJ1Y3QgdGhyZWFkX2RhdGEgKnAgPSBkYXRhK2k7CisJCWludCBlcnI7CisKKwkJcC0+aW5kZXggPSBpbmRleDsKKwkJaWYgKHBhdGhzcGVjKQorCQkJY29weV9wYXRoc3BlYygmcC0+cGF0aHNwZWMsIHBhdGhzcGVjKTsKKwkJcC0+b2Zmc2V0ID0gb2Zmc2V0OworCQlwLT5uciA9IHdvcms7CisJCWlmIChwZC5wcm9ncmVzcykKKwkJCXAtPnByb2dyZXNzID0gJnBkOworCQlvZmZzZXQgKz0gd29yazsKKwkJZXJyID0gcHRocmVhZF9jcmVhdGUoJnAtPnB0aHJlYWQsIE5VTEwsIHByZWxvYWRfdGhyZWFkLCBwKTsKKworCQlpZiAoZXJyKQorCQkJZGllKF8oInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQ6ICVzIiksIHN0cmVycm9yKGVycikpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdGhyZWFkczsgaSsrKSB7CisJCXN0cnVjdCB0aHJlYWRfZGF0YSAqcCA9IGRhdGEraTsKKwkJaWYgKHB0aHJlYWRfam9pbihwLT5wdGhyZWFkLCBOVUxMKSkKKwkJCWRpZSgidW5hYmxlIHRvIGpvaW4gdGhyZWFkZWQgbHN0YXQiKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcGQucHJvZ3Jlc3MpOworCisJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoInByZWxvYWQgaW5kZXgiKTsKK30KKworaW50IHJlcG9fcmVhZF9pbmRleF9wcmVsb2FkKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgICAgdW5zaWduZWQgaW50IHJlZnJlc2hfZmxhZ3MpCit7CisJaW50IHJldHZhbCA9IHJlcG9fcmVhZF9pbmRleChyZXBvKTsKKworCXByZWxvYWRfaW5kZXgocmVwby0+aW5kZXgsIHBhdGhzcGVjLCByZWZyZXNoX2ZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvcHJldHR5LmMgYi9wcmV0dHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFmYzcwCi0tLSAvZGV2L251bGwKKysrIGIvcHJldHR5LmMKQEAgLTAsMCArMSwyMDE2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAidHJhaWxlci5oIgorCitzdGF0aWMgY2hhciAqdXNlcl9mb3JtYXQ7CitzdGF0aWMgc3RydWN0IGNtdF9mbXRfbWFwIHsKKwljb25zdCBjaGFyICpuYW1lOworCWVudW0gY21pdF9mbXQgZm9ybWF0OworCWludCBpc190Zm9ybWF0OworCWludCBleHBhbmRfdGFic19pbl9sb2c7CisJaW50IGlzX2FsaWFzOworCWVudW0gZGF0ZV9tb2RlX3R5cGUgZGVmYXVsdF9kYXRlX21vZGVfdHlwZTsKKwljb25zdCBjaGFyICp1c2VyX2Zvcm1hdDsKK30gKmNvbW1pdF9mb3JtYXRzOworc3RhdGljIHNpemVfdCBidWlsdGluX2Zvcm1hdHNfbGVuOworc3RhdGljIHNpemVfdCBjb21taXRfZm9ybWF0c19sZW47CitzdGF0aWMgc2l6ZV90IGNvbW1pdF9mb3JtYXRzX2FsbG9jOworc3RhdGljIHN0cnVjdCBjbXRfZm10X21hcCAqZmluZF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKnNvdWdodCk7CisKK2ludCBjb21taXRfZm9ybWF0X2lzX2VtcHR5KGVudW0gY21pdF9mbXQgZm10KQoreworCXJldHVybiBmbXQgPT0gQ01JVF9GTVRfVVNFUkZPUk1BVCAmJiAhKnVzZXJfZm9ybWF0OworfQorCitzdGF0aWMgdm9pZCBzYXZlX3VzZXJfZm9ybWF0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBjb25zdCBjaGFyICpjcCwgaW50IGlzX3Rmb3JtYXQpCit7CisJZnJlZSh1c2VyX2Zvcm1hdCk7CisJdXNlcl9mb3JtYXQgPSB4c3RyZHVwKGNwKTsKKwlpZiAoaXNfdGZvcm1hdCkKKwkJcmV2LT51c2VfdGVybWluYXRvciA9IDE7CisJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKK30KKworc3RhdGljIGludCBnaXRfcHJldHR5X2Zvcm1hdHNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBjbXRfZm10X21hcCAqY29tbWl0X2Zvcm1hdCA9IE5VTEw7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpmbXQ7CisJaW50IGk7CisKKwlpZiAoIXNraXBfcHJlZml4KHZhciwgInByZXR0eS4iLCAmbmFtZSkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGJ1aWx0aW5fZm9ybWF0c19sZW47IGkrKykgeworCQlpZiAoIXN0cmNtcChjb21taXRfZm9ybWF0c1tpXS5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IGJ1aWx0aW5fZm9ybWF0c19sZW47IGkgPCBjb21taXRfZm9ybWF0c19sZW47IGkrKykgeworCQlpZiAoIXN0cmNtcChjb21taXRfZm9ybWF0c1tpXS5uYW1lLCBuYW1lKSkgeworCQkJY29tbWl0X2Zvcm1hdCA9ICZjb21taXRfZm9ybWF0c1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFjb21taXRfZm9ybWF0KSB7CisJCUFMTE9DX0dST1coY29tbWl0X2Zvcm1hdHMsIGNvbW1pdF9mb3JtYXRzX2xlbisxLAorCQkJICAgY29tbWl0X2Zvcm1hdHNfYWxsb2MpOworCQljb21taXRfZm9ybWF0ID0gJmNvbW1pdF9mb3JtYXRzW2NvbW1pdF9mb3JtYXRzX2xlbl07CisJCW1lbXNldChjb21taXRfZm9ybWF0LCAwLCBzaXplb2YoKmNvbW1pdF9mb3JtYXQpKTsKKwkJY29tbWl0X2Zvcm1hdHNfbGVuKys7CisJfQorCisJY29tbWl0X2Zvcm1hdC0+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+bmFtZV9lbmQgLSBuYW1lYnVmOworCQl9CisKKwkJc3RyYnVmX2FkZHN0cihzYiwgIkZyb206ICIpOworCQlpZiAobmVlZHNfcmZjMjA0N19lbmNvZGluZyhuYW1lYnVmLCBuYW1lbGVuKSkgeworCQkJYWRkX3JmYzIwNDcoc2IsIG5hbWVidWYsIG5hbWVsZW4sCisJCQkJICAgIGVuY29kaW5nLCBSRkMyMDQ3X0FERFJFU1MpOworCQkJbWF4X2xlbmd0aCA9IDc2OyAvKiBwZXIgcmZjMjA0NyAqLworCQl9IGVsc2UgaWYgKG5lZWRzX3JmYzgyMl9xdW90aW5nKG5hbWVidWYsIG5hbWVsZW4pKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHF1b3RlZCA9IFNUUkJVRl9JTklUOworCQkJYWRkX3JmYzgyMl9xdW90ZWQoJnF1b3RlZCwgbmFtZWJ1ZiwgbmFtZWxlbik7CisJCQlzdHJidWZfYWRkX3dyYXBwZWRfYnl0ZXMoc2IsIHF1b3RlZC5idWYsIHF1b3RlZC5sZW4sCisJCQkJCQkJLTYsIDEsIG1heF9sZW5ndGgpOworCQkJc3RyYnVmX3JlbGVhc2UoJnF1b3RlZCk7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkX3dyYXBwZWRfYnl0ZXMoc2IsIG5hbWVidWYsIG5hbWVsZW4sCisJCQkJCQkgLTYsIDEsIG1heF9sZW5ndGgpOworCQl9CisKKwkJaWYgKG1heF9sZW5ndGggPAorCQkgICAgbGFzdF9saW5lX2xlbmd0aChzYikgKyBzdHJsZW4oIiA8IikgKyBtYWlsbGVuICsgc3RybGVuKCI+IikpCisJCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCQlzdHJidWZfYWRkZihzYiwgIiA8JS4qcz5cbiIsIChpbnQpbWFpbGxlbiwgbWFpbGJ1Zik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoc2IsICIlczogJS4qcyUuKnMgPCUuKnM+XG4iLCB3aGF0LAorCQkJICAgIChwcC0+Zm10ID09IENNSVRfRk1UX0ZVTExFUikgPyA0IDogMCwgIiAgICAiLAorCQkJICAgIChpbnQpbmFtZWxlbiwgbmFtZWJ1ZiwgKGludCltYWlsbGVuLCBtYWlsYnVmKTsKKwl9CisKKwlzd2l0Y2ggKHBwLT5mbXQpIHsKKwljYXNlIENNSVRfRk1UX01FRElVTToKKwkJc3RyYnVmX2FkZGYoc2IsICJEYXRlOiAgICVzXG4iLAorCQkJICAgIHNob3dfaWRlbnRfZGF0ZSgmaWRlbnQsICZwcC0+ZGF0ZV9tb2RlKSk7CisJCWJyZWFrOworCWNhc2UgQ01JVF9GTVRfRU1BSUw6CisJY2FzZSBDTUlUX0ZNVF9NQk9YUkQ6CisJCXN0cmJ1Zl9hZGRmKHNiLCAiRGF0ZTogJXNcbiIsCisJCQkgICAgc2hvd19pZGVudF9kYXRlKCZpZGVudCwgREFURV9NT0RFKFJGQzI4MjIpKSk7CisJCWJyZWFrOworCWNhc2UgQ01JVF9GTVRfRlVMTEVSOgorCQlzdHJidWZfYWRkZihzYiwgIiVzRGF0ZTogJXNcbiIsIHdoYXQsCisJCQkgICAgc2hvd19pZGVudF9kYXRlKCZpZGVudCwgJnBwLT5kYXRlX21vZGUpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogbm90aW4nICovCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBpc19ibGFua19saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGludCAqbGVuX3ApCit7CisJaW50IGxlbiA9ICpsZW5fcDsKKwl3aGlsZSAobGVuICYmIGlzc3BhY2UobGluZVtsZW4gLSAxXSkpCisJCWxlbi0tOworCSpsZW5fcCA9IGxlbjsKKwlyZXR1cm4gIWxlbjsKK30KKworY29uc3QgY2hhciAqc2tpcF9ibGFua19saW5lcyhjb25zdCBjaGFyICptc2cpCit7CisJZm9yICg7OykgeworCQlpbnQgbGluZWxlbiA9IGdldF9vbmVfbGluZShtc2cpOworCQlpbnQgbGwgPSBsaW5lbGVuOworCQlpZiAoIWxpbmVsZW4pCisJCQlicmVhazsKKwkJaWYgKCFpc19ibGFua19saW5lKG1zZywgJmxsKSkKKwkJCWJyZWFrOworCQltc2cgKz0gbGluZWxlbjsKKwl9CisJcmV0dXJuIG1zZzsKK30KKworc3RhdGljIHZvaWQgYWRkX21lcmdlX2luZm8oY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisKKwlpZiAoKHBwLT5mbXQgPT0gQ01JVF9GTVRfT05FTElORSkgfHwgKGNtaXRfZm10X2lzX21haWwocHAtPmZtdCkpIHx8CisJICAgICFwYXJlbnQgfHwgIXBhcmVudC0+bmV4dCkKKwkJcmV0dXJuOworCisJc3RyYnVmX2FkZHN0cihzYiwgIk1lcmdlOiIpOworCisJd2hpbGUgKHBhcmVudCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRwID0gJnBhcmVudC0+aXRlbS0+b2JqZWN0Lm9pZDsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQlpZiAocHAtPmFiYnJldikKKwkJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihzYiwgb2lkcCwgcHAtPmFiYnJldik7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIG9pZF90b19oZXgob2lkcCkpOworCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfaGVhZGVyKGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqa2V5KQoreworCXNpemVfdCBsZW47CisJY29uc3QgY2hhciAqdiA9IGZpbmRfY29tbWl0X2hlYWRlcihtc2csIGtleSwgJmxlbik7CisJcmV0dXJuIHYgPyB4bWVtZHVweih2LCBsZW4pIDogTlVMTDsKK30KKworc3RhdGljIGNoYXIgKnJlcGxhY2VfZW5jb2RpbmdfaGVhZGVyKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisJc3RydWN0IHN0cmJ1ZiB0bXAgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3Qgc3RhcnQsIGxlbjsKKwljaGFyICpjcCA9IGJ1ZjsKKworCS8qIGd1ZXNzIGlmIHRoZXJlIGlzIGFuIGVuY29kaW5nIGhlYWRlciBiZWZvcmUgYSBcblxuICovCisJd2hpbGUgKCFzdGFydHNfd2l0aChjcCwgImVuY29kaW5nICIpKSB7CisJCWNwID0gc3RyY2hyKGNwLCAnXG4nKTsKKwkJaWYgKCFjcCB8fCAqKytjcCA9PSAnXG4nKQorCQkJcmV0dXJuIGJ1ZjsKKwl9CisJc3RhcnQgPSBjcCAtIGJ1ZjsKKwljcCA9IHN0cmNocihjcCwgJ1xuJyk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIGJ1ZjsgLyogc2hvdWxkIG5vdCBoYXBwZW4gYnV0IGJlIGRlZmVuc2l2ZSAqLworCWxlbiA9IGNwICsgMSAtIChidWYgKyBzdGFydCk7CisKKwlzdHJidWZfYXR0YWNoKCZ0bXAsIGJ1Ziwgc3RybGVuKGJ1ZiksIHN0cmxlbihidWYpICsgMSk7CisJaWYgKGlzX2VuY29kaW5nX3V0ZjgoZW5jb2RpbmcpKSB7CisJCS8qIHdlIGhhdmUgcmUtY29kZWQgdG8gVVRGLTg7IGRyb3AgdGhlIGhlYWRlciAqLworCQlzdHJidWZfcmVtb3ZlKCZ0bXAsIHN0YXJ0LCBsZW4pOworCX0gZWxzZSB7CisJCS8qIGp1c3QgcmVwbGFjZXMgWFhYWCBpbiAnZW5jb2RpbmcgWFhYWFxuJyAqLworCQlzdHJidWZfc3BsaWNlKCZ0bXAsIHN0YXJ0ICsgc3RybGVuKCJlbmNvZGluZyAiKSwKKwkJCQkJICBsZW4gLSBzdHJsZW4oImVuY29kaW5nIFxuIiksCisJCQkJCSAgZW5jb2RpbmcsIHN0cmxlbihlbmNvZGluZykpOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmdG1wLCBOVUxMKTsKK30KKworY29uc3QgY2hhciAqcmVwb19sb2dtc2dfcmVlbmNvZGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgY2hhciAqKmNvbW1pdF9lbmNvZGluZywKKwkJCQkgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp1dGY4ID0gIlVURi04IjsKKwljb25zdCBjaGFyICp1c2VfZW5jb2Rpbmc7CisJY2hhciAqZW5jb2Rpbmc7CisJY29uc3QgY2hhciAqbXNnID0gcmVwb19nZXRfY29tbWl0X2J1ZmZlcihyLCBjb21taXQsIE5VTEwpOworCWNoYXIgKm91dDsKKworCWlmICghb3V0cHV0X2VuY29kaW5nIHx8ICEqb3V0cHV0X2VuY29kaW5nKSB7CisJCWlmIChjb21taXRfZW5jb2RpbmcpCisJCQkqY29tbWl0X2VuY29kaW5nID0gZ2V0X2hlYWRlcihtc2csICJlbmNvZGluZyIpOworCQlyZXR1cm4gbXNnOworCX0KKwllbmNvZGluZyA9IGdldF9oZWFkZXIobXNnLCAiZW5jb2RpbmciKTsKKwlpZiAoY29tbWl0X2VuY29kaW5nKQorCQkqY29tbWl0X2VuY29kaW5nID0gZW5jb2Rpbmc7CisJdXNlX2VuY29kaW5nID0gZW5jb2RpbmcgPyBlbmNvZGluZyA6IHV0Zjg7CisJaWYgKHNhbWVfZW5jb2RpbmcodXNlX2VuY29kaW5nLCBvdXRwdXRfZW5jb2RpbmcpKSB7CisJCS8qCisJCSAqIE5vIGVuY29kaW5nIHdvcmsgdG8gYmUgZG9uZS4gSWYgd2UgaGF2ZSBubyBlbmNvZGluZyBoZWFkZXIKKwkJICogYXQgYWxsLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkbywgYW5kIHdlIGNhbiByZXR1cm4gdGhlCisJCSAqIG1lc3NhZ2UgdmVyYmF0aW0gKHdoZXRoZXIgbmV3bHkgYWxsb2NhdGVkIG9yIG5vdCkuCisJCSAqLworCQlpZiAoIWVuY29kaW5nKQorCQkJcmV0dXJuIG1zZzsKKworCQkvKgorCQkgKiBPdGhlcndpc2UsIHdlIHN0aWxsIHdhbnQgdG8gbXVuZ2UgdGhlIGVuY29kaW5nIGhlYWRlciBpbiB0aGUKKwkJICogcmVzdWx0LCB3aGljaCB3aWxsIGJlIGRvbmUgYnkgbW9kaWZ5aW5nIHRoZSBidWZmZXIuIElmIHdlCisJCSAqIGFyZSB1c2luZyBhIGZyZXNoIGNvcHksIHdlIGNhbiByZXVzZSBpdC4gQnV0IGlmIHdlIGFyZSB1c2luZworCQkgKiB0aGUgY2FjaGVkIGNvcHkgZnJvbSBnZXRfY29tbWl0X2J1ZmZlciwgd2UgbmVlZCB0byBkdXBsaWNhdGUgaXQKKwkJICogdG8gYXZvaWQgbXVuZ2luZyB0aGUgY2FjaGVkIGNvcHkuCisJCSAqLworCQlpZiAobXNnID09IGdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihyLCBjb21taXQsIE5VTEwpKQorCQkJb3V0ID0geHN0cmR1cChtc2cpOworCQllbHNlCisJCQlvdXQgPSAoY2hhciAqKW1zZzsKKwl9CisJZWxzZSB7CisJCS8qCisJCSAqIFRoZXJlJ3MgYWN0dWFsIGVuY29kaW5nIHdvcmsgdG8gZG8uIERvIHRoZSByZWVuY29kaW5nLCB3aGljaAorCQkgKiBzdGlsbCBsZWF2ZXMgdGhlIGhlYWRlciB0byBiZSByZXBsYWNlZCBpbiB0aGUgbmV4dCBzdGVwLiBBdAorCQkgKiB0aGlzIHBvaW50LCB3ZSBhcmUgZG9uZSB3aXRoIG1zZy4gSWYgd2UgYWxsb2NhdGVkIGEgZnJlc2gKKwkJICogY29weSwgd2UgY2FuIGZyZWUgaXQuCisJCSAqLworCQlvdXQgPSByZWVuY29kZV9zdHJpbmcobXNnLCBvdXRwdXRfZW5jb2RpbmcsIHVzZV9lbmNvZGluZyk7CisJCWlmIChvdXQpCisJCQlyZXBvX3VudXNlX2NvbW1pdF9idWZmZXIociwgY29tbWl0LCBtc2cpOworCX0KKworCS8qCisJICogVGhpcyByZXBsYWNlbWVudCBhY3R1YWxseSBjb25zdW1lcyB0aGUgYnVmZmVyIHdlIGhhbmQgaXQsIHNvIHdlIGRvCisJICogbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgZnJlZWluZyB0aGUgb2xkICJvdXQiIGhlcmUuCisJICovCisJaWYgKG91dCkKKwkJb3V0ID0gcmVwbGFjZV9lbmNvZGluZ19oZWFkZXIob3V0LCBvdXRwdXRfZW5jb2RpbmcpOworCisJaWYgKCFjb21taXRfZW5jb2RpbmcpCisJCWZyZWUoZW5jb2RpbmcpOworCS8qCisJICogSWYgdGhlIHJlLWVuY29kaW5nIGZhaWxlZCwgb3V0IG1pZ2h0IGJlIE5VTEwgaGVyZTsgaW4gdGhhdAorCSAqIGNhc2Ugd2UganVzdCByZXR1cm4gdGhlIGNvbW1pdCBtZXNzYWdlIHZlcmJhdGltLgorCSAqLworCXJldHVybiBvdXQgPyBvdXQgOiBtc2c7Cit9CisKK3N0YXRpYyBpbnQgbWFpbG1hcF9uYW1lKGNvbnN0IGNoYXIgKiplbWFpbCwgc2l6ZV90ICplbWFpbF9sZW4sCisJCQljb25zdCBjaGFyICoqbmFtZSwgc2l6ZV90ICpuYW1lX2xlbikKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICptYWlsX21hcDsKKwlpZiAoIW1haWxfbWFwKSB7CisJCW1haWxfbWFwID0geGNhbGxvYygxLCBzaXplb2YoKm1haWxfbWFwKSk7CisJCXJlYWRfbWFpbG1hcChtYWlsX21hcCwgTlVMTCk7CisJfQorCXJldHVybiBtYWlsX21hcC0+bnIgJiYgbWFwX3VzZXIobWFpbF9tYXAsIGVtYWlsLCBlbWFpbF9sZW4sIG5hbWUsIG5hbWVfbGVuKTsKK30KKworc3RhdGljIHNpemVfdCBmb3JtYXRfcGVyc29uX3BhcnQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNoYXIgcGFydCwKKwkJCQkgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuLAorCQkJCSBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICpkbW9kZSkKK3sKKwkvKiBjdXJyZW50bHkgYWxsIHBsYWNlaG9sZGVycyBoYXZlIHNhbWUgbGVuZ3RoICovCisJY29uc3QgaW50IHBsYWNlaG9sZGVyX2xlbiA9IDI7CisJc3RydWN0IGlkZW50X3NwbGl0IHM7CisJY29uc3QgY2hhciAqbmFtZSwgKm1haWw7CisJc2l6ZV90IG1haWxsZW4sIG5hbWVsZW47CisKKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmcywgbXNnLCBsZW4pIDwgMCkKKwkJZ290byBza2lwOworCisJbmFtZSA9IHMubmFtZV9iZWdpbjsKKwluYW1lbGVuID0gcy5uYW1lX2VuZCAtIHMubmFtZV9iZWdpbjsKKwltYWlsID0gcy5tYWlsX2JlZ2luOworCW1haWxsZW4gPSBzLm1haWxfZW5kIC0gcy5tYWlsX2JlZ2luOworCisJaWYgKHBhcnQgPT0gJ04nIHx8IHBhcnQgPT0gJ0UnIHx8IHBhcnQgPT0gJ0wnKSAvKiBtYWlsbWFwIGxvb2t1cCAqLworCQltYWlsbWFwX25hbWUoJm1haWwsICZtYWlsbGVuLCAmbmFtZSwgJm5hbWVsZW4pOworCWlmIChwYXJ0ID09ICduJyB8fCBwYXJ0ID09ICdOJykgewkvKiBuYW1lICovCisJCXN0cmJ1Zl9hZGQoc2IsIG5hbWUsIG5hbWVsZW4pOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCX0KKwlpZiAocGFydCA9PSAnZScgfHwgcGFydCA9PSAnRScpIHsJLyogZW1haWwgKi8KKwkJc3RyYnVmX2FkZChzYiwgbWFpbCwgbWFpbGxlbik7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJfQorCWlmIChwYXJ0ID09ICdsJyB8fCBwYXJ0ID09ICdMJykgewkvKiBsb2NhbC1wYXJ0ICovCisJCWNvbnN0IGNoYXIgKmF0ID0gbWVtY2hyKG1haWwsICdAJywgbWFpbGxlbik7CisJCWlmIChhdCkKKwkJCW1haWxsZW4gPSBhdCAtIG1haWw7CisJCXN0cmJ1Zl9hZGQoc2IsIG1haWwsIG1haWxsZW4pOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCX0KKworCWlmICghcy5kYXRlX2JlZ2luKQorCQlnb3RvIHNraXA7CisKKwlpZiAocGFydCA9PSAndCcpIHsJLyogZGF0ZSwgVU5JWCB0aW1lc3RhbXAgKi8KKwkJc3RyYnVmX2FkZChzYiwgcy5kYXRlX2JlZ2luLCBzLmRhdGVfZW5kIC0gcy5kYXRlX2JlZ2luKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwl9CisKKwlzd2l0Y2ggKHBhcnQpIHsKKwljYXNlICdkJzoJLyogZGF0ZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIGRtb2RlKSk7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJY2FzZSAnRCc6CS8qIGRhdGUsIFJGQzI4MjIgc3R5bGUgKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19pZGVudF9kYXRlKCZzLCBEQVRFX01PREUoUkZDMjgyMikpKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwljYXNlICdyJzoJLyogZGF0ZSwgcmVsYXRpdmUgKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19pZGVudF9kYXRlKCZzLCBEQVRFX01PREUoUkVMQVRJVkUpKSk7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJY2FzZSAnaSc6CS8qIGRhdGUsIElTTyA4NjAxLWxpa2UgKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19pZGVudF9kYXRlKCZzLCBEQVRFX01PREUoSVNPODYwMSkpKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwljYXNlICdJJzoJLyogZGF0ZSwgSVNPIDg2MDEgc3RyaWN0ICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNob3dfaWRlbnRfZGF0ZSgmcywgREFURV9NT0RFKElTTzg2MDFfU1RSSUNUKSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCWNhc2UgJ3MnOgorCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShTSE9SVCkpKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwl9CisKK3NraXA6CisJLyoKKwkgKiByZWFkaW5nIGZyb20gZWl0aGVyIGEgYm9ndXMgY29tbWl0LCBvciBhIHJlZmxvZyBlbnRyeSB3aXRoCisJICogJWduLCAlZ2UsIGV0Yy47ICdzYicgY2Fubm90IGJlIHVwZGF0ZWQsIGJ1dCB3ZSBzdGlsbCBuZWVkCisJICogdG8gY29tcHV0ZSBhIHZhbGlkIHJldHVybiB2YWx1ZS4KKwkgKi8KKwlpZiAocGFydCA9PSAnbicgfHwgcGFydCA9PSAnZScgfHwgcGFydCA9PSAndCcgfHwgcGFydCA9PSAnZCcKKwkgICAgfHwgcGFydCA9PSAnRCcgfHwgcGFydCA9PSAncicgfHwgcGFydCA9PSAnaScpCisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisKKwlyZXR1cm4gMDsgLyogdW5rbm93biBwbGFjZWhvbGRlciAqLworfQorCitzdHJ1Y3QgY2h1bmsgeworCXNpemVfdCBvZmY7CisJc2l6ZV90IGxlbjsKK307CisKK2VudW0gZmx1c2hfdHlwZSB7CisJbm9fZmx1c2gsCisJZmx1c2hfcmlnaHQsCisJZmx1c2hfbGVmdCwKKwlmbHVzaF9sZWZ0X2FuZF9zdGVhbCwKKwlmbHVzaF9ib3RoCit9OworCitlbnVtIHRydW5jX3R5cGUgeworCXRydW5jX25vbmUsCisJdHJ1bmNfbGVmdCwKKwl0cnVuY19taWRkbGUsCisJdHJ1bmNfcmlnaHQKK307CisKK3N0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgeworCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwljb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnByZXR0eV9jdHg7CisJdW5zaWduZWQgY29tbWl0X2hlYWRlcl9wYXJzZWQ6MTsKKwl1bnNpZ25lZCBjb21taXRfbWVzc2FnZV9wYXJzZWQ6MTsKKwlzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrIHNpZ25hdHVyZV9jaGVjazsKKwllbnVtIGZsdXNoX3R5cGUgZmx1c2hfdHlwZTsKKwllbnVtIHRydW5jX3R5cGUgdHJ1bmNhdGU7CisJY29uc3QgY2hhciAqbWVzc2FnZTsKKwljaGFyICpjb21taXRfZW5jb2Rpbmc7CisJc2l6ZV90IHdpZHRoLCBpbmRlbnQxLCBpbmRlbnQyOworCWludCBhdXRvX2NvbG9yOworCWludCBwYWRkaW5nOworCisJLyogVGhlc2Ugb2Zmc2V0cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb21taXQgbWVzc2FnZS4gKi8KKwlzdHJ1Y3QgY2h1bmsgYXV0aG9yOworCXN0cnVjdCBjaHVuayBjb21taXR0ZXI7CisJc2l6ZV90IG1lc3NhZ2Vfb2ZmOworCXNpemVfdCBzdWJqZWN0X29mZjsKKwlzaXplX3QgYm9keV9vZmY7CisKKwkvKiBUaGUgZm9sbG93aW5nIG9uZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSByZXN1bHQgc3RydWN0IHN0cmJ1Zi4gKi8KKwlzaXplX3Qgd3JhcF9zdGFydDsKK307CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NvbW1pdF9oZWFkZXIoc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqY29udGV4dCkKK3sKKwljb25zdCBjaGFyICptc2cgPSBjb250ZXh0LT5tZXNzYWdlOworCWludCBpOworCisJZm9yIChpID0gMDsgbXNnW2ldOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJaW50IGVvbDsKKwkJZm9yIChlb2wgPSBpOyBtc2dbZW9sXSAmJiBtc2dbZW9sXSAhPSAnXG4nOyBlb2wrKykKKwkJCTsgLyogZG8gbm90aGluZyAqLworCisJCWlmIChpID09IGVvbCkgeworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgobXNnICsgaSwgImF1dGhvciAiLCAmbmFtZSkpIHsKKwkJCWNvbnRleHQtPmF1dGhvci5vZmYgPSBuYW1lIC0gbXNnOworCQkJY29udGV4dC0+YXV0aG9yLmxlbiA9IG1zZyArIGVvbCAtIG5hbWU7CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgobXNnICsgaSwgImNvbW1pdHRlciAiLCAmbmFtZSkpIHsKKwkJCWNvbnRleHQtPmNvbW1pdHRlci5vZmYgPSBuYW1lIC0gbXNnOworCQkJY29udGV4dC0+Y29tbWl0dGVyLmxlbiA9IG1zZyArIGVvbCAtIG5hbWU7CisJCX0KKwkJaSA9IGVvbDsKKwl9CisJY29udGV4dC0+bWVzc2FnZV9vZmYgPSBpOworCWNvbnRleHQtPmNvbW1pdF9oZWFkZXJfcGFyc2VkID0gMTsKK30KKworc3RhdGljIGludCBpc3RpdGxlY2hhcihjaGFyIGMpCit7CisJcmV0dXJuIChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fAorCQkoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IGMgPT0gJy4nIHx8IGMgPT0gJ18nOworfQorCitzdGF0aWMgdm9pZCBmb3JtYXRfc2FuaXRpemVkX3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzaXplX3QgdHJpbWxlbjsKKwlzaXplX3Qgc3RhcnRfbGVuID0gc2ItPmxlbjsKKwlpbnQgc3BhY2UgPSAyOworCisJZm9yICg7ICptc2cgJiYgKm1zZyAhPSAnXG4nOyBtc2crKykgeworCQlpZiAoaXN0aXRsZWNoYXIoKm1zZykpIHsKKwkJCWlmIChzcGFjZSA9PSAxKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJy0nKTsKKwkJCXNwYWNlID0gMDsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgKm1zZyk7CisJCQlpZiAoKm1zZyA9PSAnLicpCisJCQkJd2hpbGUgKCoobXNnKzEpID09ICcuJykKKwkJCQkJbXNnKys7CisJCX0gZWxzZQorCQkJc3BhY2UgfD0gMTsKKwl9CisKKwkvKiB0cmltIGFueSB0cmFpbGluZyAnLicgb3IgJy0nIGNoYXJhY3RlcnMgKi8KKwl0cmltbGVuID0gMDsKKwl3aGlsZSAoc2ItPmxlbiAtIHRyaW1sZW4gPiBzdGFydF9sZW4gJiYKKwkJKHNiLT5idWZbc2ItPmxlbiAtIDEgLSB0cmltbGVuXSA9PSAnLicKKwkJfHwgc2ItPmJ1ZltzYi0+bGVuIC0gMSAtIHRyaW1sZW5dID09ICctJykpCisJCXRyaW1sZW4rKzsKKwlzdHJidWZfcmVtb3ZlKHNiLCBzYi0+bGVuIC0gdHJpbWxlbiwgdHJpbWxlbik7Cit9CisKK2NvbnN0IGNoYXIgKmZvcm1hdF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2csCisJCQkgICBjb25zdCBjaGFyICpsaW5lX3NlcGFyYXRvcikKK3sKKwlpbnQgZmlyc3QgPSAxOworCisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpsaW5lID0gbXNnOworCQlpbnQgbGluZWxlbiA9IGdldF9vbmVfbGluZShsaW5lKTsKKworCQltc2cgKz0gbGluZWxlbjsKKwkJaWYgKCFsaW5lbGVuIHx8IGlzX2JsYW5rX2xpbmUobGluZSwgJmxpbmVsZW4pKQorCQkJYnJlYWs7CisKKwkJaWYgKCFzYikKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfZ3JvdyhzYiwgbGluZWxlbiArIDIpOworCQlpZiAoIWZpcnN0KQorCQkJc3RyYnVmX2FkZHN0cihzYiwgbGluZV9zZXBhcmF0b3IpOworCQlzdHJidWZfYWRkKHNiLCBsaW5lLCBsaW5lbGVuKTsKKwkJZmlyc3QgPSAwOworCX0KKwlyZXR1cm4gbXNnOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9jb21taXRfbWVzc2FnZShzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0ICpjKQoreworCWNvbnN0IGNoYXIgKm1zZyA9IGMtPm1lc3NhZ2UgKyBjLT5tZXNzYWdlX29mZjsKKwljb25zdCBjaGFyICpzdGFydCA9IGMtPm1lc3NhZ2U7CisKKwltc2cgPSBza2lwX2JsYW5rX2xpbmVzKG1zZyk7CisJYy0+c3ViamVjdF9vZmYgPSBtc2cgLSBzdGFydDsKKworCW1zZyA9IGZvcm1hdF9zdWJqZWN0KE5VTEwsIG1zZywgTlVMTCk7CisJbXNnID0gc2tpcF9ibGFua19saW5lcyhtc2cpOworCWMtPmJvZHlfb2ZmID0gbXNnIC0gc3RhcnQ7CisKKwljLT5jb21taXRfbWVzc2FnZV9wYXJzZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfd3JhcChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywKKwkJCXNpemVfdCB3aWR0aCwgc2l6ZV90IGluZGVudDEsIHNpemVfdCBpbmRlbnQyKQoreworCXN0cnVjdCBzdHJidWYgdG1wID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocG9zKQorCQlzdHJidWZfYWRkKCZ0bXAsIHNiLT5idWYsIHBvcyk7CisJc3RyYnVmX2FkZF93cmFwcGVkX3RleHQoJnRtcCwgc2ItPmJ1ZiArIHBvcywKKwkJCQkoaW50KSBpbmRlbnQxLCAoaW50KSBpbmRlbnQyLCAoaW50KSB3aWR0aCk7CisJc3RyYnVmX3N3YXAoJnRtcCwgc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0bXApOworfQorCitzdGF0aWMgdm9pZCByZXdyYXBfbWVzc2FnZV90YWlsKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMsCisJCQkJc2l6ZV90IG5ld193aWR0aCwgc2l6ZV90IG5ld19pbmRlbnQxLAorCQkJCXNpemVfdCBuZXdfaW5kZW50MikKK3sKKwlpZiAoYy0+d2lkdGggPT0gbmV3X3dpZHRoICYmIGMtPmluZGVudDEgPT0gbmV3X2luZGVudDEgJiYKKwkgICAgYy0+aW5kZW50MiA9PSBuZXdfaW5kZW50MikKKwkJcmV0dXJuOworCWlmIChjLT53cmFwX3N0YXJ0IDwgc2ItPmxlbikKKwkJc3RyYnVmX3dyYXAoc2IsIGMtPndyYXBfc3RhcnQsIGMtPndpZHRoLCBjLT5pbmRlbnQxLCBjLT5pbmRlbnQyKTsKKwljLT53cmFwX3N0YXJ0ID0gc2ItPmxlbjsKKwljLT53aWR0aCA9IG5ld193aWR0aDsKKwljLT5pbmRlbnQxID0gbmV3X2luZGVudDE7CisJYy0+aW5kZW50MiA9IG5ld19pbmRlbnQyOworfQorCitzdGF0aWMgaW50IGZvcm1hdF9yZWZsb2dfcGVyc29uKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCWNoYXIgcGFydCwKKwkJCQlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqbG9nLAorCQkJCWNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKmRtb2RlKQoreworCWNvbnN0IGNoYXIgKmlkZW50OworCisJaWYgKCFsb2cpCisJCXJldHVybiAyOworCisJaWRlbnQgPSBnZXRfcmVmbG9nX2lkZW50KGxvZyk7CisJaWYgKCFpZGVudCkKKwkJcmV0dXJuIDI7CisKKwlyZXR1cm4gZm9ybWF0X3BlcnNvbl9wYXJ0KHNiLCBwYXJ0LCBpZGVudCwgc3RybGVuKGlkZW50KSwgZG1vZGUpOworfQorCitzdGF0aWMgc2l6ZV90IHBhcnNlX2NvbG9yKHN0cnVjdCBzdHJidWYgKnNiLCAvKiBpbiBVVEYtOCAqLworCQkJICBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCSAgc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqYykKK3sKKwljb25zdCBjaGFyICpyZXN0ID0gcGxhY2Vob2xkZXI7CisJY29uc3QgY2hhciAqYmFzaWNfY29sb3IgPSBOVUxMOworCisJaWYgKHBsYWNlaG9sZGVyWzFdID09ICcoJykgeworCQljb25zdCBjaGFyICpiZWdpbiA9IHBsYWNlaG9sZGVyICsgMjsKKwkJY29uc3QgY2hhciAqZW5kID0gc3RyY2hyKGJlZ2luLCAnKScpOworCQljaGFyIGNvbG9yW0NPTE9SX01BWExFTl07CisKKwkJaWYgKCFlbmQpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoc2tpcF9wcmVmaXgoYmVnaW4sICJhdXRvLCIsICZiZWdpbikpIHsKKwkJCWlmICghd2FudF9jb2xvcihjLT5wcmV0dHlfY3R4LT5jb2xvcikpCisJCQkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChiZWdpbiwgImFsd2F5cywiLCAmYmVnaW4pKSB7CisJCQkvKiBub3RoaW5nIHRvIGRvOyB3ZSBkbyBub3QgcmVzcGVjdCB3YW50X2NvbG9yIGF0IGFsbCAqLworCQl9IGVsc2UgeworCQkJLyogdGhlIGRlZmF1bHQgaXMgdGhlIHNhbWUgYXMgImF1dG8iICovCisJCQlpZiAoIXdhbnRfY29sb3IoYy0+cHJldHR5X2N0eC0+Y29sb3IpKQorCQkJCXJldHVybiBlbmQgLSBwbGFjZWhvbGRlciArIDE7CisJCX0KKworCQlpZiAoY29sb3JfcGFyc2VfbWVtKGJlZ2luLCBlbmQgLSBiZWdpbiwgY29sb3IpIDwgMCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IikpOworCQlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcik7CisJCXJldHVybiBlbmQgLSBwbGFjZWhvbGRlciArIDE7CisJfQorCisJLyoKKwkgKiBXZSBoYW5kbGUgdGhpbmdzIGxpa2UgIiVDKHJlZCkiIGFib3ZlOyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGVyZQorCSAqIGFyZSBhIGZldyBjb2xvcnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHdpdGhvdXQgcGFyZW50aGVzZXMgKGFuZAorCSAqIHRoZXkgY2Fubm90IHN1cHBvcnQgdGhpbmdzIGxpa2UgImF1dG8iIG9yICJhbHdheXMiIGF0IGFsbCkuCisJICovCisJaWYgKHNraXBfcHJlZml4KHBsYWNlaG9sZGVyICsgMSwgInJlZCIsICZyZXN0KSkKKwkJYmFzaWNfY29sb3IgPSBHSVRfQ09MT1JfUkVEOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHBsYWNlaG9sZGVyICsgMSwgImdyZWVuIiwgJnJlc3QpKQorCQliYXNpY19jb2xvciA9IEdJVF9DT0xPUl9HUkVFTjsKKwllbHNlIGlmIChza2lwX3ByZWZpeChwbGFjZWhvbGRlciArIDEsICJibHVlIiwgJnJlc3QpKQorCQliYXNpY19jb2xvciA9IEdJVF9DT0xPUl9CTFVFOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHBsYWNlaG9sZGVyICsgMSwgInJlc2V0IiwgJnJlc3QpKQorCQliYXNpY19jb2xvciA9IEdJVF9DT0xPUl9SRVNFVDsKKworCWlmIChiYXNpY19jb2xvciAmJiB3YW50X2NvbG9yKGMtPnByZXR0eV9jdHgtPmNvbG9yKSkKKwkJc3RyYnVmX2FkZHN0cihzYiwgYmFzaWNfY29sb3IpOworCisJcmV0dXJuIHJlc3QgLSBwbGFjZWhvbGRlcjsKK30KKworc3RhdGljIHNpemVfdCBwYXJzZV9wYWRkaW5nX3BsYWNlaG9sZGVyKGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCQlzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0ICpjKQoreworCWNvbnN0IGNoYXIgKmNoID0gcGxhY2Vob2xkZXI7CisJZW51bSBmbHVzaF90eXBlIGZsdXNoX3R5cGU7CisJaW50IHRvX2NvbHVtbiA9IDA7CisKKwlzd2l0Y2ggKCpjaCsrKSB7CisJY2FzZSAnPCc6CisJCWZsdXNoX3R5cGUgPSBmbHVzaF9yaWdodDsKKwkJYnJlYWs7CisJY2FzZSAnPic6CisJCWlmICgqY2ggPT0gJzwnKSB7CisJCQlmbHVzaF90eXBlID0gZmx1c2hfYm90aDsKKwkJCWNoKys7CisJCX0gZWxzZSBpZiAoKmNoID09ICc+JykgeworCQkJZmx1c2hfdHlwZSA9IGZsdXNoX2xlZnRfYW5kX3N0ZWFsOworCQkJY2grKzsKKwkJfSBlbHNlCisJCQlmbHVzaF90eXBlID0gZmx1c2hfbGVmdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJLyogdGhlIG5leHQgdmFsdWUgbWVhbnMgIndpZGUgZW5vdWdoIHRvIHRoYXQgY29sdW1uIiAqLworCWlmICgqY2ggPT0gJ3wnKSB7CisJCXRvX2NvbHVtbiA9IDE7CisJCWNoKys7CisJfQorCisJaWYgKCpjaCA9PSAnKCcpIHsKKwkJY29uc3QgY2hhciAqc3RhcnQgPSBjaCArIDE7CisJCWNvbnN0IGNoYXIgKmVuZCA9IHN0YXJ0ICsgc3RyY3NwbihzdGFydCwgIiwpIik7CisJCWNoYXIgKm5leHQ7CisJCWludCB3aWR0aDsKKwkJaWYgKCFlbmQgfHwgZW5kID09IHN0YXJ0KQorCQkJcmV0dXJuIDA7CisJCXdpZHRoID0gc3RydG9sKHN0YXJ0LCAmbmV4dCwgMTApOworCQlpZiAobmV4dCA9PSBzdGFydCB8fCB3aWR0aCA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWlmICh3aWR0aCA8IDApIHsKKwkJCWlmICh0b19jb2x1bW4pCisJCQkJd2lkdGggKz0gdGVybV9jb2x1bW5zKCk7CisJCQlpZiAod2lkdGggPCAwKQorCQkJCXJldHVybiAwOworCQl9CisJCWMtPnBhZGRpbmcgPSB0b19jb2x1bW4gPyAtd2lkdGggOiB3aWR0aDsKKwkJYy0+Zmx1c2hfdHlwZSA9IGZsdXNoX3R5cGU7CisKKwkJaWYgKCplbmQgPT0gJywnKSB7CisJCQlzdGFydCA9IGVuZCArIDE7CisJCQllbmQgPSBzdHJjaHIoc3RhcnQsICcpJyk7CisJCQlpZiAoIWVuZCB8fCBlbmQgPT0gc3RhcnQpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoc3RhcnRzX3dpdGgoc3RhcnQsICJ0cnVuYykiKSkKKwkJCQljLT50cnVuY2F0ZSA9IHRydW5jX3JpZ2h0OworCQkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3RhcnQsICJsdHJ1bmMpIikpCisJCQkJYy0+dHJ1bmNhdGUgPSB0cnVuY19sZWZ0OworCQkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3RhcnQsICJtdHJ1bmMpIikpCisJCQkJYy0+dHJ1bmNhdGUgPSB0cnVuY19taWRkbGU7CisJCQllbHNlCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZQorCQkJYy0+dHJ1bmNhdGUgPSB0cnVuY19ub25lOworCisJCXJldHVybiBlbmQgLSBwbGFjZWhvbGRlciArIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX3BsYWNlaG9sZGVyX2FyZ192YWx1ZShjb25zdCBjaGFyICp0b19wYXJzZSwgY29uc3QgY2hhciAqY2FuZGlkYXRlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICoqZW5kLCBjb25zdCBjaGFyICoqdmFsdWVzdGFydCwKKwkJCQkgICAgICAgc2l6ZV90ICp2YWx1ZWxlbikKK3sKKwljb25zdCBjaGFyICpwOworCisJaWYgKCEoc2tpcF9wcmVmaXgodG9fcGFyc2UsIGNhbmRpZGF0ZSwgJnApKSkKKwkJcmV0dXJuIDA7CisJaWYgKHZhbHVlc3RhcnQpIHsKKwkJaWYgKCpwID09ICc9JykgeworCQkJKnZhbHVlc3RhcnQgPSBwICsgMTsKKwkJCSp2YWx1ZWxlbiA9IHN0cmNzcG4oKnZhbHVlc3RhcnQsICIsKSIpOworCQkJcCA9ICp2YWx1ZXN0YXJ0ICsgKnZhbHVlbGVuOworCQl9IGVsc2UgeworCQkJaWYgKCpwICE9ICcsJyAmJiAqcCAhPSAnKScpCisJCQkJcmV0dXJuIDA7CisJCQkqdmFsdWVzdGFydCA9IE5VTEw7CisJCQkqdmFsdWVsZW4gPSAwOworCQl9CisJfQorCWlmICgqcCA9PSAnLCcpIHsKKwkJKmVuZCA9IHAgKyAxOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCpwID09ICcpJykgeworCQkqZW5kID0gcDsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX3BsYWNlaG9sZGVyX2Jvb2xfYXJnKGNvbnN0IGNoYXIgKnRvX3BhcnNlLCBjb25zdCBjaGFyICpjYW5kaWRhdGUsCisJCQkJICAgICAgY29uc3QgY2hhciAqKmVuZCwgaW50ICp2YWwpCit7CisJY29uc3QgY2hhciAqYXJndmFsOworCWNoYXIgKnN0cnZhbDsKKwlzaXplX3QgYXJnbGVuOworCWludCB2OworCisJaWYgKCFtYXRjaF9wbGFjZWhvbGRlcl9hcmdfdmFsdWUodG9fcGFyc2UsIGNhbmRpZGF0ZSwgZW5kLCAmYXJndmFsLCAmYXJnbGVuKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFyZ3ZhbCkgeworCQkqdmFsID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RydmFsID0geHN0cm5kdXAoYXJndmFsLCBhcmdsZW4pOworCXYgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbChzdHJ2YWwpOworCWZyZWUoc3RydmFsKTsKKworCWlmICh2ID09IC0xKQorCQlyZXR1cm4gMDsKKworCSp2YWwgPSB2OworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZm9ybWF0X3RyYWlsZXJfbWF0Y2hfY2IoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqa2V5LCB2b2lkICp1ZCkKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSB1ZDsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0gKGl0ZW0sIGxpc3QpIHsKKwkJaWYgKGtleS0+bGVuID09ICh1aW50cHRyX3QpaXRlbS0+dXRpbCAmJgorCQkgICAgIXN0cm5jYXNlY21wKGl0ZW0tPnN0cmluZywga2V5LT5idWYsIGtleS0+bGVuKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNpemVfdCBmb3JtYXRfY29tbWl0X29uZShzdHJ1Y3Qgc3RyYnVmICpzYiwgLyogaW4gVVRGLTggKi8KKwkJCQljb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCQl2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMgPSBjb250ZXh0OworCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGMtPmNvbW1pdDsKKwljb25zdCBjaGFyICptc2cgPSBjLT5tZXNzYWdlOworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwljb25zdCBjaGFyICphcmc7CisJc2l6ZV90IHJlczsKKwljaGFyICoqc2xvdDsKKworCS8qIHRoZXNlIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgY29tbWl0ICovCisJcmVzID0gc3RyYnVmX2V4cGFuZF9saXRlcmFsX2NiKHNiLCBwbGFjZWhvbGRlciwgTlVMTCk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXN3aXRjaCAocGxhY2Vob2xkZXJbMF0pIHsKKwljYXNlICdDJzoKKwkJaWYgKHN0YXJ0c193aXRoKHBsYWNlaG9sZGVyICsgMSwgIihhdXRvKSIpKSB7CisJCQljLT5hdXRvX2NvbG9yID0gd2FudF9jb2xvcihjLT5wcmV0dHlfY3R4LT5jb2xvcik7CisJCQlpZiAoYy0+YXV0b19jb2xvciAmJiBzYi0+bGVuKQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIEdJVF9DT0xPUl9SRVNFVCk7CisJCQlyZXR1cm4gNzsgLyogY29uc3VtZWQgNyBieXRlcywgIkMoYXV0bykiICovCisJCX0gZWxzZSB7CisJCQlpbnQgcmV0ID0gcGFyc2VfY29sb3Ioc2IsIHBsYWNlaG9sZGVyLCBjKTsKKwkJCWlmIChyZXQpCisJCQkJYy0+YXV0b19jb2xvciA9IDA7CisJCQkvKgorCQkJICogT3RoZXJ3aXNlLCB3ZSBkZWNpZGVkIHRvIHRyZWF0ICVDPHVua25vd24+CisJCQkgKiBhcyBhIGxpdGVyYWwgc3RyaW5nLCBhbmQgdGhlIHByZXZpb3VzCisJCQkgKiAlQyhhdXRvKSBpcyBzdGlsbCB2YWxpZC4KKwkJCSAqLworCQkJcmV0dXJuIHJldDsKKwkJfQorCWNhc2UgJ3cnOgorCQlpZiAocGxhY2Vob2xkZXJbMV0gPT0gJygnKSB7CisJCQl1bnNpZ25lZCBsb25nIHdpZHRoID0gMCwgaW5kZW50MSA9IDAsIGluZGVudDIgPSAwOworCQkJY2hhciAqbmV4dDsKKwkJCWNvbnN0IGNoYXIgKnN0YXJ0ID0gcGxhY2Vob2xkZXIgKyAyOworCQkJY29uc3QgY2hhciAqZW5kID0gc3RyY2hyKHN0YXJ0LCAnKScpOworCQkJaWYgKCFlbmQpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoZW5kID4gc3RhcnQpIHsKKwkJCQl3aWR0aCA9IHN0cnRvdWwoc3RhcnQsICZuZXh0LCAxMCk7CisJCQkJaWYgKCpuZXh0ID09ICcsJykgeworCQkJCQlpbmRlbnQxID0gc3RydG91bChuZXh0ICsgMSwgJm5leHQsIDEwKTsKKwkJCQkJaWYgKCpuZXh0ID09ICcsJykgeworCQkJCQkJaW5kZW50MiA9IHN0cnRvdWwobmV4dCArIDEsCisJCQkJCQkJCSAmbmV4dCwgMTApOworCQkJCQl9CisJCQkJfQorCQkJCWlmICgqbmV4dCAhPSAnKScpCisJCQkJCXJldHVybiAwOworCQkJfQorCQkJcmV3cmFwX21lc3NhZ2VfdGFpbChzYiwgYywgd2lkdGgsIGluZGVudDEsIGluZGVudDIpOworCQkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKKworCWNhc2UgJzwnOgorCWNhc2UgJz4nOgorCQlyZXR1cm4gcGFyc2VfcGFkZGluZ19wbGFjZWhvbGRlcihwbGFjZWhvbGRlciwgYyk7CisJfQorCisJLyogdGhlc2UgZGVwZW5kIG9uIHRoZSBjb21taXQgKi8KKwlpZiAoIWNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCXN3aXRjaCAocGxhY2Vob2xkZXJbMF0pIHsKKwljYXNlICdIJzoJCS8qIGNvbW1pdCBoYXNoICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGRpZmZfZ2V0X2NvbG9yKGMtPmF1dG9fY29sb3IsIERJRkZfQ09NTUlUKSk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQlzdHJidWZfYWRkc3RyKHNiLCBkaWZmX2dldF9jb2xvcihjLT5hdXRvX2NvbG9yLCBESUZGX1JFU0VUKSk7CisJCXJldHVybiAxOworCWNhc2UgJ2gnOgkJLyogYWJicmV2aWF0ZWQgY29tbWl0IGhhc2ggKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgZGlmZl9nZXRfY29sb3IoYy0+YXV0b19jb2xvciwgRElGRl9DT01NSVQpKTsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHNiLCAmY29tbWl0LT5vYmplY3Qub2lkLAorCQkJCQkgYy0+cHJldHR5X2N0eC0+YWJicmV2KTsKKwkJc3RyYnVmX2FkZHN0cihzYiwgZGlmZl9nZXRfY29sb3IoYy0+YXV0b19jb2xvciwgRElGRl9SRVNFVCkpOworCQlyZXR1cm4gMTsKKwljYXNlICdUJzoJCS8qIHRyZWUgaGFzaCAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBvaWRfdG9faGV4KGdldF9jb21taXRfdHJlZV9vaWQoY29tbWl0KSkpOworCQlyZXR1cm4gMTsKKwljYXNlICd0JzoJCS8qIGFiYnJldmlhdGVkIHRyZWUgaGFzaCAqLworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoc2IsCisJCQkJCSBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCksCisJCQkJCSBjLT5wcmV0dHlfY3R4LT5hYmJyZXYpOworCQlyZXR1cm4gMTsKKwljYXNlICdQJzoJCS8qIHBhcmVudCBoYXNoZXMgKi8KKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaWYgKHAgIT0gY29tbWl0LT5wYXJlbnRzKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIG9pZF90b19oZXgoJnAtPml0ZW0tPm9iamVjdC5vaWQpKTsKKwkJfQorCQlyZXR1cm4gMTsKKwljYXNlICdwJzoJCS8qIGFiYnJldmlhdGVkIHBhcmVudCBoYXNoZXMgKi8KKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaWYgKHAgIT0gY29tbWl0LT5wYXJlbnRzKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCXN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihzYiwgJnAtPml0ZW0tPm9iamVjdC5vaWQsCisJCQkJCQkgYy0+cHJldHR5X2N0eC0+YWJicmV2KTsKKwkJfQorCQlyZXR1cm4gMTsKKwljYXNlICdtJzoJCS8qIGxlZnQvcmlnaHQvYm90dG9tICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGdldF9yZXZpc2lvbl9tYXJrKE5VTEwsIGNvbW1pdCkpOworCQlyZXR1cm4gMTsKKwljYXNlICdkJzoKKwkJZm9ybWF0X2RlY29yYXRpb25zKHNiLCBjb21taXQsIGMtPmF1dG9fY29sb3IpOworCQlyZXR1cm4gMTsKKwljYXNlICdEJzoKKwkJZm9ybWF0X2RlY29yYXRpb25zX2V4dGVuZGVkKHNiLCBjb21taXQsIGMtPmF1dG9fY29sb3IsICIiLCAiLCAiLCAiIik7CisJCXJldHVybiAxOworCWNhc2UgJ1MnOgkJLyogdGFnL2JyYW5jaCBsaWtlIC0tc291cmNlICovCisJCWlmICghKGMtPnByZXR0eV9jdHgtPnJldiAmJiBjLT5wcmV0dHlfY3R4LT5yZXYtPnNvdXJjZXMpKQorCQkJcmV0dXJuIDA7CisJCXNsb3QgPSByZXZpc2lvbl9zb3VyY2VzX2F0KGMtPnByZXR0eV9jdHgtPnJldi0+c291cmNlcywgY29tbWl0KTsKKwkJaWYgKCEoc2xvdCAmJiAqc2xvdCkpCisJCQlyZXR1cm4gMDsKKwkJc3RyYnVmX2FkZHN0cihzYiwgKnNsb3QpOworCQlyZXR1cm4gMTsKKwljYXNlICdnJzoJCS8qIHJlZmxvZyBpbmZvICovCisJCXN3aXRjaChwbGFjZWhvbGRlclsxXSkgeworCQljYXNlICdkJzoJLyogcmVmbG9nIHNlbGVjdG9yICovCisJCWNhc2UgJ0QnOgorCQkJaWYgKGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvKQorCQkJCWdldF9yZWZsb2dfc2VsZWN0b3Ioc2IsCisJCQkJCQkgICAgYy0+cHJldHR5X2N0eC0+cmVmbG9nX2luZm8sCisJCQkJCQkgICAgJmMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZSwKKwkJCQkJCSAgICBjLT5wcmV0dHlfY3R4LT5kYXRlX21vZGVfZXhwbGljaXQsCisJCQkJCQkgICAgKHBsYWNlaG9sZGVyWzFdID09ICdkJykpOworCQkJcmV0dXJuIDI7CisJCWNhc2UgJ3MnOgkvKiByZWZsb2cgbWVzc2FnZSAqLworCQkJaWYgKGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvKQorCQkJCWdldF9yZWZsb2dfbWVzc2FnZShzYiwgYy0+cHJldHR5X2N0eC0+cmVmbG9nX2luZm8pOworCQkJcmV0dXJuIDI7CisJCWNhc2UgJ24nOgorCQljYXNlICdOJzoKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOgorCQkJcmV0dXJuIGZvcm1hdF9yZWZsb2dfcGVyc29uKHNiLAorCQkJCQkJICAgIHBsYWNlaG9sZGVyWzFdLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvLAorCQkJCQkJICAgICZjLT5wcmV0dHlfY3R4LT5kYXRlX21vZGUpOworCQl9CisJCXJldHVybiAwOwkvKiB1bmtub3duICVnIHBsYWNlaG9sZGVyICovCisJY2FzZSAnTic6CisJCWlmIChjLT5wcmV0dHlfY3R4LT5ub3Rlc19tZXNzYWdlKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBjLT5wcmV0dHlfY3R4LT5ub3Rlc19tZXNzYWdlKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChwbGFjZWhvbGRlclswXSA9PSAnRycpIHsKKwkJaWYgKCFjLT5zaWduYXR1cmVfY2hlY2sucmVzdWx0KQorCQkJY2hlY2tfY29tbWl0X3NpZ25hdHVyZShjLT5jb21taXQsICYoYy0+c2lnbmF0dXJlX2NoZWNrKSk7CisJCXN3aXRjaCAocGxhY2Vob2xkZXJbMV0pIHsKKwkJY2FzZSAnRyc6CisJCQlpZiAoYy0+c2lnbmF0dXJlX2NoZWNrLmdwZ19vdXRwdXQpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+c2lnbmF0dXJlX2NoZWNrLmdwZ19vdXRwdXQpOworCQkJYnJlYWs7CisJCWNhc2UgJz8nOgorCQkJc3dpdGNoIChjLT5zaWduYXR1cmVfY2hlY2sucmVzdWx0KSB7CisJCQljYXNlICdHJzoKKwkJCQlzd2l0Y2ggKGMtPnNpZ25hdHVyZV9jaGVjay50cnVzdF9sZXZlbCkgeworCQkJCWNhc2UgVFJVU1RfVU5ERUZJTkVEOgorCQkJCWNhc2UgVFJVU1RfTkVWRVI6CisJCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJ1UnKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJc3RyYnVmX2FkZGNoKHNiLCAnRycpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICdCJzoKKwkJCWNhc2UgJ0UnOgorCQkJY2FzZSAnTic6CisJCQljYXNlICdYJzoKKwkJCWNhc2UgJ1knOgorCQkJY2FzZSAnUic6CisJCQkJc3RyYnVmX2FkZGNoKHNiLCBjLT5zaWduYXR1cmVfY2hlY2sucmVzdWx0KTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdTJzoKKwkJCWlmIChjLT5zaWduYXR1cmVfY2hlY2suc2lnbmVyKQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGMtPnNpZ25hdHVyZV9jaGVjay5zaWduZXIpOworCQkJYnJlYWs7CisJCWNhc2UgJ0snOgorCQkJaWYgKGMtPnNpZ25hdHVyZV9jaGVjay5rZXkpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+c2lnbmF0dXJlX2NoZWNrLmtleSk7CisJCQlicmVhazsKKwkJY2FzZSAnRic6CisJCQlpZiAoYy0+c2lnbmF0dXJlX2NoZWNrLmZpbmdlcnByaW50KQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGMtPnNpZ25hdHVyZV9jaGVjay5maW5nZXJwcmludCk7CisJCQlicmVhazsKKwkJY2FzZSAnUCc6CisJCQlpZiAoYy0+c2lnbmF0dXJlX2NoZWNrLnByaW1hcnlfa2V5X2ZpbmdlcnByaW50KQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGMtPnNpZ25hdHVyZV9jaGVjay5wcmltYXJ5X2tleV9maW5nZXJwcmludCk7CisJCQlicmVhazsKKwkJY2FzZSAnVCc6CisJCQlzd2l0Y2ggKGMtPnNpZ25hdHVyZV9jaGVjay50cnVzdF9sZXZlbCkgeworCQkJY2FzZSBUUlVTVF9VTkRFRklORUQ6CisJCQkJc3RyYnVmX2FkZHN0cihzYiwgInVuZGVmaW5lZCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUUlVTVF9ORVZFUjoKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAibmV2ZXIiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVFJVU1RfTUFSR0lOQUw6CisJCQkJc3RyYnVmX2FkZHN0cihzYiwgIm1hcmdpbmFsIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRSVVNUX0ZVTExZOgorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJmdWxseSIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUUlVTVF9VTFRJTUFURToKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAidWx0aW1hdGUiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIDI7CisJfQorCisKKwkvKiBGb3IgdGhlIHJlc3Qgd2UgaGF2ZSB0byBwYXJzZSB0aGUgY29tbWl0IGhlYWRlci4gKi8KKwlpZiAoIWMtPmNvbW1pdF9oZWFkZXJfcGFyc2VkKQorCQlwYXJzZV9jb21taXRfaGVhZGVyKGMpOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJ2EnOgkvKiBhdXRob3IgLi4uICovCisJCXJldHVybiBmb3JtYXRfcGVyc29uX3BhcnQoc2IsIHBsYWNlaG9sZGVyWzFdLAorCQkJCSAgIG1zZyArIGMtPmF1dGhvci5vZmYsIGMtPmF1dGhvci5sZW4sCisJCQkJICAgJmMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZSk7CisJY2FzZSAnYyc6CS8qIGNvbW1pdHRlciAuLi4gKi8KKwkJcmV0dXJuIGZvcm1hdF9wZXJzb25fcGFydChzYiwgcGxhY2Vob2xkZXJbMV0sCisJCQkJICAgbXNnICsgYy0+Y29tbWl0dGVyLm9mZiwgYy0+Y29tbWl0dGVyLmxlbiwKKwkJCQkgICAmYy0+cHJldHR5X2N0eC0+ZGF0ZV9tb2RlKTsKKwljYXNlICdlJzoJLyogZW5jb2RpbmcgKi8KKwkJaWYgKGMtPmNvbW1pdF9lbmNvZGluZykKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGMtPmNvbW1pdF9lbmNvZGluZyk7CisJCXJldHVybiAxOworCWNhc2UgJ0InOgkvKiByYXcgYm9keSAqLworCQkvKiBtZXNzYWdlX29mZiBpcyBhbHdheXMgbGVmdCBhdCB0aGUgaW5pdGlhbCBuZXdsaW5lICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIG1zZyArIGMtPm1lc3NhZ2Vfb2ZmICsgMSk7CisJCXJldHVybiAxOworCX0KKworCS8qIE5vdyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBjb21taXQgbWVzc2FnZS4gKi8KKwlpZiAoIWMtPmNvbW1pdF9tZXNzYWdlX3BhcnNlZCkKKwkJcGFyc2VfY29tbWl0X21lc3NhZ2UoYyk7CisKKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAncyc6CS8qIHN1YmplY3QgKi8KKwkJZm9ybWF0X3N1YmplY3Qoc2IsIG1zZyArIGMtPnN1YmplY3Rfb2ZmLCAiICIpOworCQlyZXR1cm4gMTsKKwljYXNlICdmJzoJLyogc2FuaXRpemVkIHN1YmplY3QgKi8KKwkJZm9ybWF0X3Nhbml0aXplZF9zdWJqZWN0KHNiLCBtc2cgKyBjLT5zdWJqZWN0X29mZik7CisJCXJldHVybiAxOworCWNhc2UgJ2InOgkvKiBib2R5ICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIG1zZyArIGMtPmJvZHlfb2ZmKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHNraXBfcHJlZml4KHBsYWNlaG9sZGVyLCAiKHRyYWlsZXJzIiwgJmFyZykpIHsKKwkJc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zIG9wdHMgPSBQUk9DRVNTX1RSQUlMRVJfT1BUSU9OU19JTklUOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsdGVyX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCQlzdHJ1Y3Qgc3RyYnVmIHNlcGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzaXplX3QgcmV0ID0gMDsKKworCQlvcHRzLm5vX2RpdmlkZXIgPSAxOworCisJCWlmICgqYXJnID09ICc6JykgeworCQkJYXJnKys7CisJCQlmb3IgKDs7KSB7CisJCQkJY29uc3QgY2hhciAqYXJndmFsOworCQkJCXNpemVfdCBhcmdsZW47CisKKwkJCQlpZiAobWF0Y2hfcGxhY2Vob2xkZXJfYXJnX3ZhbHVlKGFyZywgImtleSIsICZhcmcsICZhcmd2YWwsICZhcmdsZW4pKSB7CisJCQkJCXVpbnRwdHJfdCBsZW4gPSBhcmdsZW47CisKKwkJCQkJaWYgKCFhcmd2YWwpCisJCQkJCQlnb3RvIHRyYWlsZXJfb3V0OworCisJCQkJCWlmIChsZW4gJiYgYXJndmFsW2xlbiAtIDFdID09ICc6JykKKwkJCQkJCWxlbi0tOworCQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmZpbHRlcl9saXN0LCBhcmd2YWwpLT51dGlsID0gKGNoYXIgKilsZW47CisKKwkJCQkJb3B0cy5maWx0ZXIgPSBmb3JtYXRfdHJhaWxlcl9tYXRjaF9jYjsKKwkJCQkJb3B0cy5maWx0ZXJfZGF0YSA9ICZmaWx0ZXJfbGlzdDsKKwkJCQkJb3B0cy5vbmx5X3RyYWlsZXJzID0gMTsKKwkJCQl9IGVsc2UgaWYgKG1hdGNoX3BsYWNlaG9sZGVyX2FyZ192YWx1ZShhcmcsICJzZXBhcmF0b3IiLCAmYXJnLCAmYXJndmFsLCAmYXJnbGVuKSkgeworCQkJCQljaGFyICpmbXQ7CisKKwkJCQkJc3RyYnVmX3Jlc2V0KCZzZXBidWYpOworCQkJCQlmbXQgPSB4c3RybmR1cChhcmd2YWwsIGFyZ2xlbik7CisJCQkJCXN0cmJ1Zl9leHBhbmQoJnNlcGJ1ZiwgZm10LCBzdHJidWZfZXhwYW5kX2xpdGVyYWxfY2IsIE5VTEwpOworCQkJCQlmcmVlKGZtdCk7CisJCQkJCW9wdHMuc2VwYXJhdG9yID0gJnNlcGJ1ZjsKKwkJCQl9IGVsc2UgaWYgKCFtYXRjaF9wbGFjZWhvbGRlcl9ib29sX2FyZyhhcmcsICJvbmx5IiwgJmFyZywgJm9wdHMub25seV90cmFpbGVycykgJiYKKwkJCQkJICAgIW1hdGNoX3BsYWNlaG9sZGVyX2Jvb2xfYXJnKGFyZywgInVuZm9sZCIsICZhcmcsICZvcHRzLnVuZm9sZCkgJiYKKwkJCQkJICAgIW1hdGNoX3BsYWNlaG9sZGVyX2Jvb2xfYXJnKGFyZywgInZhbHVlb25seSIsICZhcmcsICZvcHRzLnZhbHVlX29ubHkpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoKmFyZyA9PSAnKScpIHsKKwkJCWZvcm1hdF90cmFpbGVyc19mcm9tX2NvbW1pdChzYiwgbXNnICsgYy0+c3ViamVjdF9vZmYsICZvcHRzKTsKKwkJCXJldCA9IGFyZyAtIHBsYWNlaG9sZGVyICsgMTsKKwkJfQorCXRyYWlsZXJfb3V0OgorCQlzdHJpbmdfbGlzdF9jbGVhcigmZmlsdGVyX2xpc3QsIDApOworCQlzdHJidWZfcmVsZWFzZSgmc2VwYnVmKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsJLyogdW5rbm93biBwbGFjZWhvbGRlciAqLworfQorCitzdGF0aWMgc2l6ZV90IGZvcm1hdF9hbmRfcGFkX2NvbW1pdChzdHJ1Y3Qgc3RyYnVmICpzYiwgLyogaW4gVVRGLTggKi8KKwkJCQkgICAgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsCisJCQkJICAgIHN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMpCit7CisJc3RydWN0IHN0cmJ1ZiBsb2NhbF9zYiA9IFNUUkJVRl9JTklUOworCWludCB0b3RhbF9jb25zdW1lZCA9IDAsIGxlbiwgcGFkZGluZyA9IGMtPnBhZGRpbmc7CisJaWYgKHBhZGRpbmcgPCAwKSB7CisJCWNvbnN0IGNoYXIgKnN0YXJ0ID0gc3RycmNocihzYi0+YnVmLCAnXG4nKTsKKwkJaW50IG9jY3VwaWVkOworCQlpZiAoIXN0YXJ0KQorCQkJc3RhcnQgPSBzYi0+YnVmOworCQlvY2N1cGllZCA9IHV0Zjhfc3RybndpZHRoKHN0YXJ0LCAtMSwgMSk7CisJCW9jY3VwaWVkICs9IGMtPnByZXR0eV9jdHgtPmdyYXBoX3dpZHRoOworCQlwYWRkaW5nID0gKC1wYWRkaW5nKSAtIG9jY3VwaWVkOworCX0KKwl3aGlsZSAoMSkgeworCQlpbnQgbW9kaWZpZXIgPSAqcGxhY2Vob2xkZXIgPT0gJ0MnOworCQlpbnQgY29uc3VtZWQgPSBmb3JtYXRfY29tbWl0X29uZSgmbG9jYWxfc2IsIHBsYWNlaG9sZGVyLCBjKTsKKwkJdG90YWxfY29uc3VtZWQgKz0gY29uc3VtZWQ7CisKKwkJaWYgKCFtb2RpZmllcikKKwkJCWJyZWFrOworCisJCXBsYWNlaG9sZGVyICs9IGNvbnN1bWVkOworCQlpZiAoKnBsYWNlaG9sZGVyICE9ICclJykKKwkJCWJyZWFrOworCQlwbGFjZWhvbGRlcisrOworCQl0b3RhbF9jb25zdW1lZCsrOworCX0KKwlsZW4gPSB1dGY4X3N0cm53aWR0aChsb2NhbF9zYi5idWYsIC0xLCAxKTsKKworCWlmIChjLT5mbHVzaF90eXBlID09IGZsdXNoX2xlZnRfYW5kX3N0ZWFsKSB7CisJCWNvbnN0IGNoYXIgKmNoID0gc2ItPmJ1ZiArIHNiLT5sZW4gLSAxOworCQl3aGlsZSAobGVuID4gcGFkZGluZyAmJiBjaCA+IHNiLT5idWYpIHsKKwkJCWNvbnN0IGNoYXIgKnA7CisJCQlpZiAoKmNoID09ICcgJykgeworCQkJCWNoLS07CisJCQkJcGFkZGluZysrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogY2hlY2sgZm9yIHRyYWlsaW5nIGFuc2kgc2VxdWVuY2VzICovCisJCQlpZiAoKmNoICE9ICdtJykKKwkJCQlicmVhazsKKwkJCXAgPSBjaCAtIDE7CisJCQl3aGlsZSAoY2ggLSBwIDwgMTAgJiYgKnAgIT0gJ1wwMzMnKQorCQkJCXAtLTsKKwkJCWlmICgqcCAhPSAnXDAzMycgfHwKKwkJCSAgICBjaCArIDEgLSBwICE9IGRpc3BsYXlfbW9kZV9lc2Nfc2VxdWVuY2VfbGVuKHApKQorCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIGdvdCBhIGdvb2QgYW5zaSBzZXF1ZW5jZSwgcHV0IGl0IGJhY2sgdG8KKwkJCSAqIGxvY2FsX3NiIGFzIHdlJ3JlIGN1dHRpbmcgc2IKKwkJCSAqLworCQkJc3RyYnVmX2luc2VydCgmbG9jYWxfc2IsIDAsIHAsIGNoICsgMSAtIHApOworCQkJY2ggPSBwIC0gMTsKKwkJfQorCQlzdHJidWZfc2V0bGVuKHNiLCBjaCArIDEgLSBzYi0+YnVmKTsKKwkJYy0+Zmx1c2hfdHlwZSA9IGZsdXNoX2xlZnQ7CisJfQorCisJaWYgKGxlbiA+IHBhZGRpbmcpIHsKKwkJc3dpdGNoIChjLT50cnVuY2F0ZSkgeworCQljYXNlIHRydW5jX2xlZnQ6CisJCQlzdHJidWZfdXRmOF9yZXBsYWNlKCZsb2NhbF9zYiwKKwkJCQkJICAgIDAsIGxlbiAtIChwYWRkaW5nIC0gMiksCisJCQkJCSAgICAiLi4iKTsKKwkJCWJyZWFrOworCQljYXNlIHRydW5jX21pZGRsZToKKwkJCXN0cmJ1Zl91dGY4X3JlcGxhY2UoJmxvY2FsX3NiLAorCQkJCQkgICAgcGFkZGluZyAvIDIgLSAxLAorCQkJCQkgICAgbGVuIC0gKHBhZGRpbmcgLSAyKSwKKwkJCQkJICAgICIuLiIpOworCQkJYnJlYWs7CisJCWNhc2UgdHJ1bmNfcmlnaHQ6CisJCQlzdHJidWZfdXRmOF9yZXBsYWNlKCZsb2NhbF9zYiwKKwkJCQkJICAgIHBhZGRpbmcgLSAyLCBsZW4gLSAocGFkZGluZyAtIDIpLAorCQkJCQkgICAgIi4uIik7CisJCQlicmVhazsKKwkJY2FzZSB0cnVuY19ub25lOgorCQkJYnJlYWs7CisJCX0KKwkJc3RyYnVmX2FkZGJ1ZihzYiwgJmxvY2FsX3NiKTsKKwl9IGVsc2UgeworCQlpbnQgc2JfbGVuID0gc2ItPmxlbiwgb2Zmc2V0ID0gMDsKKwkJaWYgKGMtPmZsdXNoX3R5cGUgPT0gZmx1c2hfbGVmdCkKKwkJCW9mZnNldCA9IHBhZGRpbmcgLSBsZW47CisJCWVsc2UgaWYgKGMtPmZsdXNoX3R5cGUgPT0gZmx1c2hfYm90aCkKKwkJCW9mZnNldCA9IChwYWRkaW5nIC0gbGVuKSAvIDI7CisJCS8qCisJCSAqIHdlIGNhbGN1bGF0ZSBwYWRkaW5nIGluIGNvbHVtbnMsIG5vdworCQkgKiBjb252ZXJ0IGl0IGJhY2sgdG8gY2hhcnMKKwkJICovCisJCXBhZGRpbmcgPSBwYWRkaW5nIC0gbGVuICsgbG9jYWxfc2IubGVuOworCQlzdHJidWZfYWRkY2hhcnMoc2IsICcgJywgcGFkZGluZyk7CisJCW1lbWNweShzYi0+YnVmICsgc2JfbGVuICsgb2Zmc2V0LCBsb2NhbF9zYi5idWYsCisJCSAgICAgICBsb2NhbF9zYi5sZW4pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbG9jYWxfc2IpOworCWMtPmZsdXNoX3R5cGUgPSBub19mbHVzaDsKKwlyZXR1cm4gdG90YWxfY29uc3VtZWQ7Cit9CisKK3N0YXRpYyBzaXplX3QgZm9ybWF0X2NvbW1pdF9pdGVtKHN0cnVjdCBzdHJidWYgKnNiLCAvKiBpbiBVVEYtOCAqLworCQkJCSBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCQkgdm9pZCAqY29udGV4dCkKK3sKKwlpbnQgY29uc3VtZWQ7CisJc2l6ZV90IG9yaWdfbGVuOworCWVudW0geworCQlOT19NQUdJQywKKwkJQUREX0xGX0JFRk9SRV9OT05fRU1QVFksCisJCURFTF9MRl9CRUZPUkVfRU1QVFksCisJCUFERF9TUF9CRUZPUkVfTk9OX0VNUFRZCisJfSBtYWdpYyA9IE5PX01BR0lDOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJy0nOgorCQltYWdpYyA9IERFTF9MRl9CRUZPUkVfRU1QVFk7CisJCWJyZWFrOworCWNhc2UgJysnOgorCQltYWdpYyA9IEFERF9MRl9CRUZPUkVfTk9OX0VNUFRZOworCQlicmVhazsKKwljYXNlICcgJzoKKwkJbWFnaWMgPSBBRERfU1BfQkVGT1JFX05PTl9FTVBUWTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmIChtYWdpYyAhPSBOT19NQUdJQykKKwkJcGxhY2Vob2xkZXIrKzsKKworCW9yaWdfbGVuID0gc2ItPmxlbjsKKwlpZiAoKChzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0ICopY29udGV4dCktPmZsdXNoX3R5cGUgIT0gbm9fZmx1c2gpCisJCWNvbnN1bWVkID0gZm9ybWF0X2FuZF9wYWRfY29tbWl0KHNiLCBwbGFjZWhvbGRlciwgY29udGV4dCk7CisJZWxzZQorCQljb25zdW1lZCA9IGZvcm1hdF9jb21taXRfb25lKHNiLCBwbGFjZWhvbGRlciwgY29udGV4dCk7CisJaWYgKG1hZ2ljID09IE5PX01BR0lDKQorCQlyZXR1cm4gY29uc3VtZWQ7CisKKwlpZiAoKG9yaWdfbGVuID09IHNiLT5sZW4pICYmIG1hZ2ljID09IERFTF9MRl9CRUZPUkVfRU1QVFkpIHsKKwkJd2hpbGUgKHNiLT5sZW4gJiYgc2ItPmJ1ZltzYi0+bGVuIC0gMV0gPT0gJ1xuJykKKwkJCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gLSAxKTsKKwl9IGVsc2UgaWYgKG9yaWdfbGVuICE9IHNiLT5sZW4pIHsKKwkJaWYgKG1hZ2ljID09IEFERF9MRl9CRUZPUkVfTk9OX0VNUFRZKQorCQkJc3RyYnVmX2luc2VydHN0cihzYiwgb3JpZ19sZW4sICJcbiIpOworCQllbHNlIGlmIChtYWdpYyA9PSBBRERfU1BfQkVGT1JFX05PTl9FTVBUWSkKKwkJCXN0cmJ1Zl9pbnNlcnRzdHIoc2IsIG9yaWdfbGVuLCAiICIpOworCX0KKwlyZXR1cm4gY29uc3VtZWQgKyAxOworfQorCitzdGF0aWMgc2l6ZV90IHVzZXJmb3JtYXRfd2FudF9pdGVtKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCQkgICB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCB1c2VyZm9ybWF0X3dhbnQgKncgPSBjb250ZXh0OworCisJaWYgKCpwbGFjZWhvbGRlciA9PSAnKycgfHwgKnBsYWNlaG9sZGVyID09ICctJyB8fCAqcGxhY2Vob2xkZXIgPT0gJyAnKQorCQlwbGFjZWhvbGRlcisrOworCisJc3dpdGNoICgqcGxhY2Vob2xkZXIpIHsKKwljYXNlICdOJzoKKwkJdy0+bm90ZXMgPSAxOworCQlicmVhazsKKwljYXNlICdTJzoKKwkJdy0+c291cmNlID0gMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHVzZXJmb3JtYXRfZmluZF9yZXF1aXJlbWVudHMoY29uc3QgY2hhciAqZm10LCBzdHJ1Y3QgdXNlcmZvcm1hdF93YW50ICp3KQoreworCXN0cnVjdCBzdHJidWYgZHVtbXkgPSBTVFJCVUZfSU5JVDsKKworCWlmICghZm10KSB7CisJCWlmICghdXNlcl9mb3JtYXQpCisJCQlyZXR1cm47CisJCWZtdCA9IHVzZXJfZm9ybWF0OworCX0KKwlzdHJidWZfZXhwYW5kKCZkdW1teSwgZm10LCB1c2VyZm9ybWF0X3dhbnRfaXRlbSwgdyk7CisJc3RyYnVmX3JlbGVhc2UoJmR1bW15KTsKK30KKwordm9pZCByZXBvX2Zvcm1hdF9jb21taXRfbWVzc2FnZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJY29uc3QgY2hhciAqZm9ybWF0LCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQljb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnByZXR0eV9jdHgpCit7CisJc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCBjb250ZXh0ID0geworCQkuY29tbWl0ID0gY29tbWl0LAorCQkucHJldHR5X2N0eCA9IHByZXR0eV9jdHgsCisJCS53cmFwX3N0YXJ0ID0gc2ItPmxlbgorCX07CisJY29uc3QgY2hhciAqb3V0cHV0X2VuYyA9IHByZXR0eV9jdHgtPm91dHB1dF9lbmNvZGluZzsKKwljb25zdCBjaGFyICp1dGY4ID0gIlVURi04IjsKKworCS8qCisJICogY29udmVydCBhIGNvbW1pdCBtZXNzYWdlIHRvIFVURi04IGZpcnN0CisJICogYXMgZmFyIGFzICdmb3JtYXRfY29tbWl0X2l0ZW0nIGFzc3VtZXMgaXQgaW4gVVRGLTgKKwkgKi8KKwljb250ZXh0Lm1lc3NhZ2UgPSByZXBvX2xvZ21zZ19yZWVuY29kZShyLCBjb21taXQsCisJCQkJCSAgICAgICAmY29udGV4dC5jb21taXRfZW5jb2RpbmcsCisJCQkJCSAgICAgICB1dGY4KTsKKworCXN0cmJ1Zl9leHBhbmQoc2IsIGZvcm1hdCwgZm9ybWF0X2NvbW1pdF9pdGVtLCAmY29udGV4dCk7CisJcmV3cmFwX21lc3NhZ2VfdGFpbChzYiwgJmNvbnRleHQsIDAsIDAsIDApOworCisJLyogdGhlbiBjb252ZXJ0IGEgY29tbWl0IG1lc3NhZ2UgdG8gYW4gYWN0dWFsIG91dHB1dCBlbmNvZGluZyAqLworCWlmIChvdXRwdXRfZW5jKSB7CisJCWlmIChzYW1lX2VuY29kaW5nKHV0ZjgsIG91dHB1dF9lbmMpKQorCQkJb3V0cHV0X2VuYyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKGNvbnRleHQuY29tbWl0X2VuY29kaW5nICYmCisJCSAgICAhc2FtZV9lbmNvZGluZyhjb250ZXh0LmNvbW1pdF9lbmNvZGluZywgdXRmOCkpCisJCQlvdXRwdXRfZW5jID0gY29udGV4dC5jb21taXRfZW5jb2Rpbmc7CisJfQorCisJaWYgKG91dHB1dF9lbmMpIHsKKwkJc2l6ZV90IG91dHN6OworCQljaGFyICpvdXQgPSByZWVuY29kZV9zdHJpbmdfbGVuKHNiLT5idWYsIHNiLT5sZW4sCisJCQkJCQlvdXRwdXRfZW5jLCB1dGY4LCAmb3V0c3opOworCQlpZiAob3V0KQorCQkJc3RyYnVmX2F0dGFjaChzYiwgb3V0LCBvdXRzeiwgb3V0c3ogKyAxKTsKKwl9CisKKwlmcmVlKGNvbnRleHQuY29tbWl0X2VuY29kaW5nKTsKKwlyZXBvX3VudXNlX2NvbW1pdF9idWZmZXIociwgY29tbWl0LCBjb250ZXh0Lm1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCBwcF9oZWFkZXIoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJICAgICAgY29uc3QgY2hhciAqKm1zZ19wLAorCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgcGFyZW50c19zaG93biA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKm5hbWUsICpsaW5lID0gKm1zZ19wOworCQlpbnQgbGluZWxlbiA9IGdldF9vbmVfbGluZSgqbXNnX3ApOworCisJCWlmICghbGluZWxlbikKKwkJCXJldHVybjsKKwkJKm1zZ19wICs9IGxpbmVsZW47CisKKwkJaWYgKGxpbmVsZW4gPT0gMSkKKwkJCS8qIEVuZCBvZiBoZWFkZXIgKi8KKwkJCXJldHVybjsKKworCQlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9SQVcpIHsKKwkJCXN0cmJ1Zl9hZGQoc2IsIGxpbmUsIGxpbmVsZW4pOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc3RhcnRzX3dpdGgobGluZSwgInBhcmVudCAiKSkgeworCQkJaWYgKGxpbmVsZW4gIT0gdGhlX2hhc2hfYWxnby0+aGV4c3ogKyA4KQorCQkJCWRpZSgiYmFkIHBhcmVudCBsaW5lIGluIGNvbW1pdCIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXBhcmVudHNfc2hvd24pIHsKKwkJCXVuc2lnbmVkIG51bSA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7CisJCQkvKiB3aXRoIGVub3VnaCBzbG9wICovCisJCQlzdHJidWZfZ3JvdyhzYiwgbnVtICogKEdJVF9NQVhfSEVYU1ogKyAxMCkgKyAyMCk7CisJCQlhZGRfbWVyZ2VfaW5mbyhwcCwgc2IsIGNvbW1pdCk7CisJCQlwYXJlbnRzX3Nob3duID0gMTsKKwkJfQorCisJCS8qCisJCSAqIE1FRElVTSA9PSBERUZBVUxUIHNob3dzIG9ubHkgYXV0aG9yIHdpdGggZGF0ZXMuCisJCSAqIEZVTEwgc2hvd3MgYm90aCBhdXRob3JzIGJ1dCBub3QgZGF0ZXMuCisJCSAqIEZVTExFUiBzaG93cyBib3RoIGF1dGhvcnMgYW5kIGRhdGVzLgorCQkgKi8KKwkJaWYgKHNraXBfcHJlZml4KGxpbmUsICJhdXRob3IgIiwgJm5hbWUpKSB7CisJCQlzdHJidWZfZ3JvdyhzYiwgbGluZWxlbiArIDgwKTsKKwkJCXBwX3VzZXJfaW5mbyhwcCwgIkF1dGhvciIsIHNiLCBuYW1lLCBlbmNvZGluZyk7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGxpbmUsICJjb21taXR0ZXIgIiwgJm5hbWUpICYmCisJCSAgICAocHAtPmZtdCA9PSBDTUlUX0ZNVF9GVUxMIHx8IHBwLT5mbXQgPT0gQ01JVF9GTVRfRlVMTEVSKSkgeworCQkJc3RyYnVmX2dyb3coc2IsIGxpbmVsZW4gKyA4MCk7CisJCQlwcF91c2VyX2luZm8ocHAsICJDb21taXQiLCBzYiwgbmFtZSwgZW5jb2RpbmcpOworCQl9CisJfQorfQorCit2b2lkIHBwX3RpdGxlX2xpbmUoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICAgY29uc3QgY2hhciAqKm1zZ19wLAorCQkgICBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisJCSAgIGludCBuZWVkXzhiaXRfY3RlKQoreworCXN0YXRpYyBjb25zdCBpbnQgbWF4X2xlbmd0aCA9IDc4OyAvKiBwZXIgcmZjMjA0NyAqLworCXN0cnVjdCBzdHJidWYgdGl0bGU7CisKKwlzdHJidWZfaW5pdCgmdGl0bGUsIDgwKTsKKwkqbXNnX3AgPSBmb3JtYXRfc3ViamVjdCgmdGl0bGUsICptc2dfcCwKKwkJCQlwcC0+cHJlc2VydmVfc3ViamVjdCA/ICJcbiIgOiAiICIpOworCisJc3RyYnVmX2dyb3coc2IsIHRpdGxlLmxlbiArIDEwMjQpOworCWlmIChwcC0+cHJpbnRfZW1haWxfc3ViamVjdCkgeworCQlpZiAocHAtPnJldikKKwkJCWZtdF9vdXRwdXRfZW1haWxfc3ViamVjdChzYiwgcHAtPnJldik7CisJCWlmIChuZWVkc19yZmMyMDQ3X2VuY29kaW5nKHRpdGxlLmJ1ZiwgdGl0bGUubGVuKSkKKwkJCWFkZF9yZmMyMDQ3KHNiLCB0aXRsZS5idWYsIHRpdGxlLmxlbiwKKwkJCQkJCWVuY29kaW5nLCBSRkMyMDQ3X1NVQkpFQ1QpOworCQllbHNlCisJCQlzdHJidWZfYWRkX3dyYXBwZWRfYnl0ZXMoc2IsIHRpdGxlLmJ1ZiwgdGl0bGUubGVuLAorCQkJCQkgLWxhc3RfbGluZV9sZW5ndGgoc2IpLCAxLCBtYXhfbGVuZ3RoKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkYnVmKHNiLCAmdGl0bGUpOworCX0KKwlzdHJidWZfYWRkY2goc2IsICdcbicpOworCisJaWYgKG5lZWRfOGJpdF9jdGUgPT0gMCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHBwLT5pbl9ib2R5X2hlYWRlcnMubnI7IGkrKykgeworCQkJaWYgKGhhc19ub25fYXNjaWkocHAtPmluX2JvZHlfaGVhZGVycy5pdGVtc1tpXS5zdHJpbmcpKSB7CisJCQkJbmVlZF84Yml0X2N0ZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobmVlZF84Yml0X2N0ZSA+IDApIHsKKwkJY29uc3QgY2hhciAqaGVhZGVyX2ZtdCA9CisJCQkiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKwkJCSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9JXNcbiIKKwkJCSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iOworCQlzdHJidWZfYWRkZihzYiwgaGVhZGVyX2ZtdCwgZW5jb2RpbmcpOworCX0KKwlpZiAocHAtPmFmdGVyX3N1YmplY3QpIHsKKwkJc3RyYnVmX2FkZHN0cihzYiwgcHAtPmFmdGVyX3N1YmplY3QpOworCX0KKwlpZiAoY21pdF9mbXRfaXNfbWFpbChwcC0+Zm10KSkgeworCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCX0KKworCWlmIChwcC0+aW5fYm9keV9oZWFkZXJzLm5yKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgcHAtPmluX2JvZHlfaGVhZGVycy5ucjsgaSsrKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBwcC0+aW5fYm9keV9oZWFkZXJzLml0ZW1zW2ldLnN0cmluZyk7CisJCQlmcmVlKHBwLT5pbl9ib2R5X2hlYWRlcnMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJfQorCQlzdHJpbmdfbGlzdF9jbGVhcigmcHAtPmluX2JvZHlfaGVhZGVycywgMCk7CisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnRpdGxlKTsKK30KKworc3RhdGljIGludCBwcF91dGY4X3dpZHRoKGNvbnN0IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpCit7CisJaW50IHdpZHRoID0gMDsKKwlzaXplX3QgcmVtYWluID0gZW5kIC0gc3RhcnQ7CisKKwl3aGlsZSAocmVtYWluKSB7CisJCWludCBuID0gdXRmOF93aWR0aCgmc3RhcnQsICZyZW1haW4pOworCQlpZiAobiA8IDAgfHwgIXN0YXJ0KQorCQkJcmV0dXJuIC0xOworCQl3aWR0aCArPSBuOworCX0KKwlyZXR1cm4gd2lkdGg7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hZGRfdGFiZXhwYW5kKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgdGFid2lkdGgsCisJCQkJIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsaW5lbGVuKQoreworCWNvbnN0IGNoYXIgKnRhYjsKKworCXdoaWxlICgodGFiID0gbWVtY2hyKGxpbmUsICdcdCcsIGxpbmVsZW4pKSAhPSBOVUxMKSB7CisJCWludCB3aWR0aCA9IHBwX3V0Zjhfd2lkdGgobGluZSwgdGFiKTsKKworCQkvKgorCQkgKiBJZiBpdCB3YXNuJ3Qgd2VsbC1mb3JtZWQgdXRmOCwgb3IgaXQKKwkJICogaGFkIGNoYXJhY3RlcnMgd2l0aCBiYWRseSBkZWZpbmVkCisJCSAqIHdpZHRoIChjb250cm9sIGNoYXJhY3RlcnMgZXRjKSwganVzdAorCQkgKiBnaXZlIHVwIG9uIHRyeWluZyB0byBhbGlnbiB0aGluZ3MuCisJCSAqLworCQlpZiAod2lkdGggPCAwKQorCQkJYnJlYWs7CisKKwkJLyogT3V0cHV0IHRoZSBkYXRhIC4uICovCisJCXN0cmJ1Zl9hZGQoc2IsIGxpbmUsIHRhYiAtIGxpbmUpOworCisJCS8qIC4uIGFuZCB0aGUgZGUtdGFiaWZpZWQgdGFiICovCisJCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCB0YWJ3aWR0aCAtICh3aWR0aCAlIHRhYndpZHRoKSk7CisKKwkJLyogU2tpcCBvdmVyIHRoZSBwcmludGVkIHBhcnQgLi4gKi8KKwkJbGluZWxlbiAtPSB0YWIgKyAxIC0gbGluZTsKKwkJbGluZSA9IHRhYiArIDE7CisJfQorCisJLyoKKwkgKiBQcmludCBvdXQgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCB0YWIgd2l0aG91dAorCSAqIHdvcnJ5aW5nIGFib3V0IHdpZHRoIC0gdGhlcmUncyBub3RoaW5nIG1vcmUgdG8KKwkgKiBhbGlnbi4KKwkgKi8KKwlzdHJidWZfYWRkKHNiLCBsaW5lLCBsaW5lbGVuKTsKK30KKworLyoKKyAqIHBwX2hhbmRsZV9pbmRlbnQoKSBwcmludHMgb3V0IHRoZSBpbnRlbmRhdGlvbiwgYW5kCisgKiB0aGUgd2hvbGUgbGluZSAod2l0aG91dCB0aGUgZmluYWwgbmV3bGluZSksIGFmdGVyCisgKiBkZS10YWJpZnlpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHBwX2hhbmRsZV9pbmRlbnQoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBpbmRlbnQsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsaW5lbGVuKQoreworCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCBpbmRlbnQpOworCWlmIChwcC0+ZXhwYW5kX3RhYnNfaW5fbG9nKQorCQlzdHJidWZfYWRkX3RhYmV4cGFuZChzYiwgcHAtPmV4cGFuZF90YWJzX2luX2xvZywgbGluZSwgbGluZWxlbik7CisJZWxzZQorCQlzdHJidWZfYWRkKHNiLCBsaW5lLCBsaW5lbGVuKTsKK30KKworc3RhdGljIGludCBpc19tYm94cmRfZnJvbShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCS8qCisJICogYSBsaW5lIG1hdGNoaW5nIC9eRnJvbSAkLyBoZXJlIHdvdWxkIG9ubHkgaGF2ZSBsZW4gPT0gNAorCSAqIGF0IHRoaXMgcG9pbnQgYmVjYXVzZSBpc19lbXB0eV9saW5lIHdvdWxkJ3ZlIHRyaW1tZWQgYWxsCisJICogdHJhaWxpbmcgc3BhY2UKKwkgKi8KKwlyZXR1cm4gbGVuID4gNCAmJiBzdGFydHNfd2l0aChsaW5lICsgc3Ryc3BuKGxpbmUsICI+IiksICJGcm9tICIpOworfQorCit2b2lkIHBwX3JlbWFpbmRlcihzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkgIGNvbnN0IGNoYXIgKiptc2dfcCwKKwkJICBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICBpbnQgaW5kZW50KQoreworCWludCBmaXJzdCA9IDE7CisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpsaW5lID0gKm1zZ19wOworCQlpbnQgbGluZWxlbiA9IGdldF9vbmVfbGluZShsaW5lKTsKKwkJKm1zZ19wICs9IGxpbmVsZW47CisKKwkJaWYgKCFsaW5lbGVuKQorCQkJYnJlYWs7CisKKwkJaWYgKGlzX2JsYW5rX2xpbmUobGluZSwgJmxpbmVsZW4pKSB7CisJCQlpZiAoZmlyc3QpCisJCQkJY29udGludWU7CisJCQlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9TSE9SVCkKKwkJCQlicmVhazsKKwkJfQorCQlmaXJzdCA9IDA7CisKKwkJc3RyYnVmX2dyb3coc2IsIGxpbmVsZW4gKyBpbmRlbnQgKyAyMCk7CisJCWlmIChpbmRlbnQpCisJCQlwcF9oYW5kbGVfaW5kZW50KHBwLCBzYiwgaW5kZW50LCBsaW5lLCBsaW5lbGVuKTsKKwkJZWxzZSBpZiAocHAtPmV4cGFuZF90YWJzX2luX2xvZykKKwkJCXN0cmJ1Zl9hZGRfdGFiZXhwYW5kKHNiLCBwcC0+ZXhwYW5kX3RhYnNfaW5fbG9nLAorCQkJCQkgICAgIGxpbmUsIGxpbmVsZW4pOworCQllbHNlIHsKKwkJCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX01CT1hSRCAmJgorCQkJCQlpc19tYm94cmRfZnJvbShsaW5lLCBsaW5lbGVuKSkKKwkJCQlzdHJidWZfYWRkY2goc2IsICc+Jyk7CisKKwkJCXN0cmJ1Zl9hZGQoc2IsIGxpbmUsIGxpbmVsZW4pOworCQl9CisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJfQorfQorCit2b2lkIHByZXR0eV9wcmludF9jb21taXQoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJCSBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJdW5zaWduZWQgbG9uZyBiZWdpbm5pbmdfb2ZfYm9keTsKKwlpbnQgaW5kZW50ID0gNDsKKwljb25zdCBjaGFyICptc2c7CisJY29uc3QgY2hhciAqcmVlbmNvZGVkOworCWNvbnN0IGNoYXIgKmVuY29kaW5nOworCWludCBuZWVkXzhiaXRfY3RlID0gcHAtPm5lZWRfOGJpdF9jdGU7CisKKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9VU0VSRk9STUFUKSB7CisJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsIHVzZXJfZm9ybWF0LCBzYiwgcHApOworCQlyZXR1cm47CisJfQorCisJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCW1zZyA9IHJlZW5jb2RlZCA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGVuY29kaW5nKTsKKworCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX09ORUxJTkUgfHwgY21pdF9mbXRfaXNfbWFpbChwcC0+Zm10KSkKKwkJaW5kZW50ID0gMDsKKworCS8qCisJICogV2UgbmVlZCB0byBjaGVjayBhbmQgZW1pdCBDb250ZW50LXR5cGU6IHRvIG1hcmsgaXQKKwkgKiBhcyA4LWJpdCBpZiB3ZSBoYXZlbid0IGRvbmUgc28uCisJICovCisJaWYgKGNtaXRfZm10X2lzX21haWwocHAtPmZtdCkgJiYgbmVlZF84Yml0X2N0ZSA9PSAwKSB7CisJCWludCBpLCBjaCwgaW5fYm9keTsKKworCQlmb3IgKGluX2JvZHkgPSBpID0gMDsgKGNoID0gbXNnW2ldKTsgaSsrKSB7CisJCQlpZiAoIWluX2JvZHkpIHsKKwkJCQkvKiBhdXRob3IgY291bGQgYmUgbm9uIDctYml0IEFTQ0lJIGJ1dAorCQkJCSAqIHRoZSBsb2cgbWF5IGJlIHNvOyBza2lwIG92ZXIgdGhlCisJCQkJICogaGVhZGVyIHBhcnQgZmlyc3QuCisJCQkJICovCisJCQkJaWYgKGNoID09ICdcbicgJiYgbXNnW2krMV0gPT0gJ1xuJykKKwkJCQkJaW5fYm9keSA9IDE7CisJCQl9CisJCQllbHNlIGlmIChub25fYXNjaWkoY2gpKSB7CisJCQkJbmVlZF84Yml0X2N0ZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlwcF9oZWFkZXIocHAsIGVuY29kaW5nLCBjb21taXQsICZtc2csIHNiKTsKKwlpZiAocHAtPmZtdCAhPSBDTUlUX0ZNVF9PTkVMSU5FICYmICFwcC0+cHJpbnRfZW1haWxfc3ViamVjdCkgeworCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCX0KKworCS8qIFNraXAgZXhjZXNzIGJsYW5rIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYm9keSwgaWYgYW55Li4uICovCisJbXNnID0gc2tpcF9ibGFua19saW5lcyhtc2cpOworCisJLyogVGhlc2UgZm9ybWF0cyB0cmVhdCB0aGUgdGl0bGUgbGluZSBzcGVjaWFsbHkuICovCisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfT05FTElORSB8fCBjbWl0X2ZtdF9pc19tYWlsKHBwLT5mbXQpKQorCQlwcF90aXRsZV9saW5lKHBwLCAmbXNnLCBzYiwgZW5jb2RpbmcsIG5lZWRfOGJpdF9jdGUpOworCisJYmVnaW5uaW5nX29mX2JvZHkgPSBzYi0+bGVuOworCWlmIChwcC0+Zm10ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCXBwX3JlbWFpbmRlcihwcCwgJm1zZywgc2IsIGluZGVudCk7CisJc3RyYnVmX3J0cmltKHNiKTsKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBhbiBFT0xOIGZvciB0aGUgbm9uLW9uZWxpbmUgY2FzZSAqLworCWlmIChwcC0+Zm10ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisKKwkvKgorCSAqIFRoZSBjYWxsZXIgbWF5IGFwcGVuZCBhZGRpdGlvbmFsIGJvZHkgdGV4dCBpbiBlLW1haWwKKwkgKiBmb3JtYXQuICBNYWtlIHN1cmUgd2UgZGlkIG5vdCBzdHJpcCB0aGUgYmxhbmsgbGluZQorCSAqIGJldHdlZW4gdGhlIGhlYWRlciBhbmQgdGhlIGJvZHkuCisJICovCisJaWYgKGNtaXRfZm10X2lzX21haWwocHAtPmZtdCkgJiYgc2ItPmxlbiA8PSBiZWdpbm5pbmdfb2ZfYm9keSkKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCByZWVuY29kZWQpOworfQorCit2b2lkIHBwX2NvbW1pdF9lYXN5KGVudW0gY21pdF9mbXQgZm10LCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcHAgPSB7MH07CisJcHAuZm10ID0gZm10OworCXByZXR0eV9wcmludF9jb21taXQoJnBwLCBjb21taXQsIHNiKTsKK30KZGlmZiAtLWdpdCBhL3ByZXR0eS5oIGIvcHJldHR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWZjMwotLS0gL2Rldi9udWxsCisrKyBiL3ByZXR0eS5oCkBAIC0wLDAgKzEsMTQxIEBACisjaWZuZGVmIFBSRVRUWV9ICisjZGVmaW5lIFBSRVRUWV9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3Qgc3RyYnVmOworCisvKiBDb21taXQgZm9ybWF0cyAqLworZW51bSBjbWl0X2ZtdCB7CisJQ01JVF9GTVRfUkFXLAorCUNNSVRfRk1UX01FRElVTSwKKwlDTUlUX0ZNVF9ERUZBVUxUID0gQ01JVF9GTVRfTUVESVVNLAorCUNNSVRfRk1UX1NIT1JULAorCUNNSVRfRk1UX0ZVTEwsCisJQ01JVF9GTVRfRlVMTEVSLAorCUNNSVRfRk1UX09ORUxJTkUsCisJQ01JVF9GTVRfRU1BSUwsCisJQ01JVF9GTVRfTUJPWFJELAorCUNNSVRfRk1UX1VTRVJGT1JNQVQsCisKKwlDTUlUX0ZNVF9VTlNQRUNJRklFRAorfTsKKworc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHsKKwkvKgorCSAqIENhbGxlcnMgc2hvdWxkIHR3ZWFrIHRoZXNlIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgcHBfKiBmdW5jdGlvbnMuCisJICovCisJZW51bSBjbWl0X2ZtdCBmbXQ7CisJaW50IGFiYnJldjsKKwljb25zdCBjaGFyICphZnRlcl9zdWJqZWN0OworCWludCBwcmVzZXJ2ZV9zdWJqZWN0OworCXN0cnVjdCBkYXRlX21vZGUgZGF0ZV9tb2RlOworCXVuc2lnbmVkIGRhdGVfbW9kZV9leHBsaWNpdDoxOworCWludCBwcmludF9lbWFpbF9zdWJqZWN0OworCWludCBleHBhbmRfdGFic19pbl9sb2c7CisJaW50IG5lZWRfOGJpdF9jdGU7CisJY2hhciAqbm90ZXNfbWVzc2FnZTsKKwlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm87CisJc3RydWN0IHJldl9pbmZvICpyZXY7CisJY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbWFpbG1hcDsKKwlpbnQgY29sb3I7CisJc3RydWN0IGlkZW50X3NwbGl0ICpmcm9tX2lkZW50OworCisJLyoKKwkgKiBGaWVsZHMgYmVsb3cgaGVyZSBhcmUgbWFuaXB1bGF0ZWQgaW50ZXJuYWxseSBieSBwcF8qIGZ1bmN0aW9ucyBhbmQKKwkgKiBzaG91bGQgbm90IGJlIGNvdW50ZWQgb24gYnkgY2FsbGVycy4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaW5fYm9keV9oZWFkZXJzOworCWludCBncmFwaF93aWR0aDsKK307CisKKy8qIENoZWNrIHdoZXRoZXIgY29tbWl0IGZvcm1hdCBpcyBtYWlsLiAqLworc3RhdGljIGlubGluZSBpbnQgY21pdF9mbXRfaXNfbWFpbChlbnVtIGNtaXRfZm10IGZtdCkKK3sKKwlyZXR1cm4gKGZtdCA9PSBDTUlUX0ZNVF9FTUFJTCB8fCBmbXQgPT0gQ01JVF9GTVRfTUJPWFJEKTsKK30KKworc3RydWN0IHVzZXJmb3JtYXRfd2FudCB7CisJdW5zaWduZWQgbm90ZXM6MTsKKwl1bnNpZ25lZCBzb3VyY2U6MTsKK307CisKKy8qIFNldCB0aGUgZmxhZyAidy0+bm90ZXMiIGlmIHRoZXJlIGlzIHBsYWNlaG9sZGVyICVOIGluICJmbXQiLiAqLwordm9pZCB1c2VyZm9ybWF0X2ZpbmRfcmVxdWlyZW1lbnRzKGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHVzZXJmb3JtYXRfd2FudCAqdyk7CisKKy8qCisgKiBTaG9ydGN1dCBmb3IgaW52b2tpbmcgcHJldHR5X3ByaW50X2NvbW1pdCBpZiB3ZSBkbyBub3QgaGF2ZSBhbnkgY29udGV4dC4KKyAqIENvbnRleHQgd291bGQgYmUgc2V0IGVtcHR5IGV4Y2VwdCAiZm10Ii4KKyAqLwordm9pZCBwcF9jb21taXRfZWFzeShlbnVtIGNtaXRfZm10IGZtdCwgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKgorICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHVzZXIgYW5kIGRhdGUgZnJvbSAibGluZSIsIGZvcm1hdCBpdCBhbmQKKyAqIHB1dCBpdCBpbnRvICJzYiIuCisgKiBGb3JtYXQgb2YgImxpbmUiIG11c3QgYmUgcmVhZGFibGUgZm9yIHNwbGl0X2lkZW50X2xpbmUgZnVuY3Rpb24uCisgKiBUaGUgcmVzdWx0aW5nIGZvcm1hdCBpcyAid2hhdDogbmFtZSA8ZW1haWw+IGRhdGUiLgorICovCit2b2lkIHBwX3VzZXJfaW5mbyhzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLCBjb25zdCBjaGFyICp3aGF0LAorCQkJc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmxpbmUsCisJCQljb25zdCBjaGFyICplbmNvZGluZyk7CisKKy8qCisgKiBGb3JtYXQgdGl0bGUgbGluZSBvZiBjb21taXQgbWVzc2FnZSB0YWtlbiBmcm9tICJtc2dfcCIgYW5kCisgKiBwdXQgaXQgaW50byAic2IiLgorICogRmlyc3QgbGluZSBvZiAibXNnX3AiIGlzIGFsc28gYWZmZWN0ZWQuCisgKi8KK3ZvaWQgcHBfdGl0bGVfbGluZShzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLCBjb25zdCBjaGFyICoqbXNnX3AsCisJCQlzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZW5jb2RpbmcsCisJCQlpbnQgbmVlZF84Yml0X2N0ZSk7CisKKy8qCisgKiBHZXQgY3VycmVudCBzdGF0ZSBvZiBjb21taXQgbWVzc2FnZSBmcm9tICJtc2dfcCIgYW5kIGNvbnRpbnVlIGZvcm1hdHRpbmcKKyAqIGJ5IGFkZGluZyBpbmRlbnRhdGlvbiBhbmQgJz4nIHNpZ25zLiBQdXQgcmVzdWx0IGludG8gInNiIi4KKyAqLwordm9pZCBwcF9yZW1haW5kZXIoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwgY29uc3QgY2hhciAqKm1zZ19wLAorCQkJc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBpbmRlbnQpOworCisvKgorICogQ3JlYXRlIGEgdGV4dCBtZXNzYWdlIGFib3V0IGNvbW1pdCB1c2luZyBnaXZlbiAiZm9ybWF0IiBhbmQgImNvbnRleHQiLgorICogUHV0IHRoZSByZXN1bHQgdG8gInNiIi4KKyAqIFBsZWFzZSB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgY3VzdG9tIGZvcm1hdHMuCisgKi8KK3ZvaWQgcmVwb19mb3JtYXRfY29tbWl0X21lc3NhZ2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQljb25zdCBjaGFyICpmb3JtYXQsIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpjb250ZXh0KTsKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGMsIGYsIHMsIGNvbikgXAorCXJlcG9fZm9ybWF0X2NvbW1pdF9tZXNzYWdlKHRoZV9yZXBvc2l0b3J5LCBjLCBmLCBzLCBjb24pCisjZW5kaWYKKworLyoKKyAqIFBhcnNlIGdpdmVuIGFyZ3VtZW50cyBmcm9tICJhcmciLCBjaGVjayBpdCBmb3IgY29ycmVjdG5lc3MgYW5kCisgKiBmaWxsIHN0cnVjdCByZXZfaW5mby4KKyAqLwordm9pZCBnZXRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqKTsKKworLyoKKyAqIE1ha2UgYSBjb21taXQgbWVzc2FnZSB3aXRoIGFsbCBydWxlcyBmcm9tIGdpdmVuICJwcCIKKyAqIGFuZCBwdXQgaXQgaW50byAic2IiLgorICogUGxlYXNlIHVzZSB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBoYXZlIGEgY29udGV4dCAoY2FuZGlkYXRlIGZvciAicHAiKS4KKyAqLwordm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQlzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qCisgKiBDaGFuZ2UgbGluZSBicmVha3MgaW4gIm1zZyIgdG8gImxpbmVfc2VwYXJhdG9yIiBhbmQgcHV0IGl0IGludG8gInNiIi4KKyAqIFJldHVybiAibXNnIiBpdHNlbGYuCisgKi8KK2NvbnN0IGNoYXIgKmZvcm1hdF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2csCisJCQljb25zdCBjaGFyICpsaW5lX3NlcGFyYXRvcik7CisKKy8qIENoZWNrIGlmICJjbWl0X2ZtdCIgd2lsbCBwcm9kdWNlIGFuIGVtcHR5IG91dHB1dC4gKi8KK2ludCBjb21taXRfZm9ybWF0X2lzX2VtcHR5KGVudW0gY21pdF9mbXQpOworCisjZW5kaWYgLyogUFJFVFRZX0ggKi8KZGlmZiAtLWdpdCBhL3ByaW8tcXVldWUuYyBiL3ByaW8tcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y0ODhjCi0tLSAvZGV2L251bGwKKysrIGIvcHJpby1xdWV1ZS5jCkBAIC0wLDAgKzEsOTYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKworc3RhdGljIGlubGluZSBpbnQgY29tcGFyZShzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUsIGludCBpLCBpbnQgaikKK3sKKwlpbnQgY21wID0gcXVldWUtPmNvbXBhcmUocXVldWUtPmFycmF5W2ldLmRhdGEsIHF1ZXVlLT5hcnJheVtqXS5kYXRhLAorCQkJCSBxdWV1ZS0+Y2JfZGF0YSk7CisJaWYgKCFjbXApCisJCWNtcCA9IHF1ZXVlLT5hcnJheVtpXS5jdHIgLSBxdWV1ZS0+YXJyYXlbal0uY3RyOworCXJldHVybiBjbXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwKHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSwgaW50IGksIGludCBqKQoreworCVNXQVAocXVldWUtPmFycmF5W2ldLCBxdWV1ZS0+YXJyYXlbal0pOworfQorCit2b2lkIHByaW9fcXVldWVfcmV2ZXJzZShzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUpCit7CisJaW50IGksIGo7CisKKwlpZiAocXVldWUtPmNvbXBhcmUgIT0gTlVMTCkKKwkJQlVHKCJwcmlvX3F1ZXVlX3JldmVyc2UoKSBvbiBub24tTElGTyBxdWV1ZSIpOworCWZvciAoaSA9IDA7IGkgPCAoaiA9IChxdWV1ZS0+bnIgLSAxKSAtIGkpOyBpKyspCisJCXN3YXAocXVldWUsIGksIGopOworfQorCit2b2lkIGNsZWFyX3ByaW9fcXVldWUoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlKQoreworCUZSRUVfQU5EX05VTEwocXVldWUtPmFycmF5KTsKKwlxdWV1ZS0+bnIgPSAwOworCXF1ZXVlLT5hbGxvYyA9IDA7CisJcXVldWUtPmluc2VydGlvbl9jdHIgPSAwOworfQorCit2b2lkIHByaW9fcXVldWVfcHV0KHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSwgdm9pZCAqdGhpbmcpCit7CisJaW50IGl4LCBwYXJlbnQ7CisKKwkvKiBBcHBlbmQgYXQgdGhlIGVuZCAqLworCUFMTE9DX0dST1cocXVldWUtPmFycmF5LCBxdWV1ZS0+bnIgKyAxLCBxdWV1ZS0+YWxsb2MpOworCXF1ZXVlLT5hcnJheVtxdWV1ZS0+bnJdLmN0ciA9IHF1ZXVlLT5pbnNlcnRpb25fY3RyKys7CisJcXVldWUtPmFycmF5W3F1ZXVlLT5ucl0uZGF0YSA9IHRoaW5nOworCXF1ZXVlLT5ucisrOworCWlmICghcXVldWUtPmNvbXBhcmUpCisJCXJldHVybjsgLyogTElGTyAqLworCisJLyogQnViYmxlIHVwIHRoZSBuZXcgb25lICovCisJZm9yIChpeCA9IHF1ZXVlLT5uciAtIDE7IGl4OyBpeCA9IHBhcmVudCkgeworCQlwYXJlbnQgPSAoaXggLSAxKSAvIDI7CisJCWlmIChjb21wYXJlKHF1ZXVlLCBwYXJlbnQsIGl4KSA8PSAwKQorCQkJYnJlYWs7CisKKwkJc3dhcChxdWV1ZSwgcGFyZW50LCBpeCk7CisJfQorfQorCit2b2lkICpwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmVzdWx0OworCWludCBpeCwgY2hpbGQ7CisKKwlpZiAoIXF1ZXVlLT5ucikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFxdWV1ZS0+Y29tcGFyZSkKKwkJcmV0dXJuIHF1ZXVlLT5hcnJheVstLXF1ZXVlLT5ucl0uZGF0YTsgLyogTElGTyAqLworCisJcmVzdWx0ID0gcXVldWUtPmFycmF5WzBdLmRhdGE7CisJaWYgKCEtLXF1ZXVlLT5ucikKKwkJcmV0dXJuIHJlc3VsdDsKKworCXF1ZXVlLT5hcnJheVswXSA9IHF1ZXVlLT5hcnJheVtxdWV1ZS0+bnJdOworCisJLyogUHVzaCBkb3duIHRoZSBvbmUgYXQgdGhlIHJvb3QgKi8KKwlmb3IgKGl4ID0gMDsgaXggKiAyICsgMSA8IHF1ZXVlLT5ucjsgaXggPSBjaGlsZCkgeworCQljaGlsZCA9IGl4ICogMiArIDE7IC8qIGxlZnQgKi8KKwkJaWYgKGNoaWxkICsgMSA8IHF1ZXVlLT5uciAmJgorCQkgICAgY29tcGFyZShxdWV1ZSwgY2hpbGQsIGNoaWxkICsgMSkgPj0gMCkKKwkJCWNoaWxkKys7IC8qIHVzZSByaWdodCBjaGlsZCAqLworCisJCWlmIChjb21wYXJlKHF1ZXVlLCBpeCwgY2hpbGQpIDw9IDApCisJCQlicmVhazsKKworCQlzd2FwKHF1ZXVlLCBjaGlsZCwgaXgpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkICpwcmlvX3F1ZXVlX3BlZWsoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlKQoreworCWlmICghcXVldWUtPm5yKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXF1ZXVlLT5jb21wYXJlKQorCQlyZXR1cm4gcXVldWUtPmFycmF5W3F1ZXVlLT5uciAtIDFdLmRhdGE7CisJcmV0dXJuIHF1ZXVlLT5hcnJheVswXS5kYXRhOworfQpkaWZmIC0tZ2l0IGEvcHJpby1xdWV1ZS5oIGIvcHJpby1xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWEzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9wcmlvLXF1ZXVlLmgKQEAgLTAsMCArMSw2MCBAQAorI2lmbmRlZiBQUklPX1FVRVVFX0gKKyNkZWZpbmUgUFJJT19RVUVVRV9ICisKKy8qCisgKiBBIHByaW9yaXR5IHF1ZXVlIGltcGxlbWVudGF0aW9uLCBwcmltYXJpbHkgZm9yIGtlZXBpbmcgdHJhY2sgb2YKKyAqIGNvbW1pdHMgaW4gdGhlICdkYXRlLW9yZGVyJyBzbyB0aGF0IHdlIHByb2Nlc3MgdGhlbSBmcm9tIG5ldyB0byBvbGQKKyAqIGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQsIGJ1dCBjYW4gYmUgdXNlZCB0byBob2xkIGFueSBwb2ludGVyIHRvCisgKiBzdHJ1Y3QuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzdXBwbHlpbmcgYSBmdW5jdGlvbiB0bworICogY29tcGFyZSB0d28gInRoaW5ncyIuCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBkYXRhIHN0cnVjdHVyZSBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgTElGTyBzdGFjaworICogYnkgc3BlY2lmeWluZyBOVUxMIGFzIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uLgorICovCisKKy8qCisgKiBDb21wYXJlIHR3byAidGhpbmdzIiwgb25lIGFuZCB0d287IHRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgY2JfZGF0YQorICogaW4gdGhlIHByaW9fcXVldWUgc3RydWN0dXJlLiAgVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhIHNpZ24gb2YKKyAqIHRoZSByZXR1cm4gdmFsdWUsIGJlaW5nIHRoZSBzYW1lIGFzIHRoZSBzaWduIG9mIHRoZSByZXN1bHQgb2YKKyAqIHN1YnRyYWN0aW5nICJ0d28iIGZyb20gIm9uZSIgKGkuZS4gbmVnYXRpdmUgaWYgIm9uZSIgc29ydHMgZWFybGllcgorICogdGhhbiAidHdvIikuCisgKi8KK3R5cGVkZWYgaW50ICgqcHJpb19xdWV1ZV9jb21wYXJlX2ZuKShjb25zdCB2b2lkICpvbmUsIGNvbnN0IHZvaWQgKnR3bywgdm9pZCAqY2JfZGF0YSk7CisKK3N0cnVjdCBwcmlvX3F1ZXVlX2VudHJ5IHsKKwl1bnNpZ25lZCBjdHI7CisJdm9pZCAqZGF0YTsKK307CisKK3N0cnVjdCBwcmlvX3F1ZXVlIHsKKwlwcmlvX3F1ZXVlX2NvbXBhcmVfZm4gY29tcGFyZTsKKwl1bnNpZ25lZCBpbnNlcnRpb25fY3RyOworCXZvaWQgKmNiX2RhdGE7CisJaW50IGFsbG9jLCBucjsKKwlzdHJ1Y3QgcHJpb19xdWV1ZV9lbnRyeSAqYXJyYXk7Cit9OworCisvKgorICogQWRkIHRoZSAidGhpbmciIHRvIHRoZSBxdWV1ZS4KKyAqLwordm9pZCBwcmlvX3F1ZXVlX3B1dChzdHJ1Y3QgcHJpb19xdWV1ZSAqLCB2b2lkICp0aGluZyk7CisKKy8qCisgKiBFeHRyYWN0IHRoZSAidGhpbmciIHRoYXQgY29tcGFyZXMgdGhlIHNtYWxsZXN0IG91dCBvZiB0aGUgcXVldWUsCisgKiBvciBOVUxMLiAgSWYgY29tcGFyZSBmdW5jdGlvbiBpcyBOVUxMLCB0aGUgcXVldWUgYWN0cyBhcyBhIExJRk8KKyAqIHN0YWNrLgorICovCit2b2lkICpwcmlvX3F1ZXVlX2dldChzdHJ1Y3QgcHJpb19xdWV1ZSAqKTsKKworLyoKKyAqIEdhaW4gYWNjZXNzIHRvIHRoZSAidGhpbmciIHRoYXQgd291bGQgYmUgcmV0dXJuZWQgYnkKKyAqIHByaW9fcXVldWVfZ2V0LCBidXQgZG8gbm90IHJlbW92ZSBpdCBmcm9tIHRoZSBxdWV1ZS4KKyAqLwordm9pZCAqcHJpb19xdWV1ZV9wZWVrKHN0cnVjdCBwcmlvX3F1ZXVlICopOworCit2b2lkIGNsZWFyX3ByaW9fcXVldWUoc3RydWN0IHByaW9fcXVldWUgKik7CisKKy8qIFJldmVyc2UgdGhlIExJRk8gZWxlbWVudHMgKi8KK3ZvaWQgcHJpb19xdWV1ZV9yZXZlcnNlKHN0cnVjdCBwcmlvX3F1ZXVlICopOworCisjZW5kaWYgLyogUFJJT19RVUVVRV9IICovCmRpZmYgLS1naXQgYS9wcm9ncmVzcy5jIGIvcHJvZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTgwNWFjCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3Jlc3MuYwpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIFNpbXBsZSB0ZXh0LWJhc2VkIHByb2dyZXNzIGRpc3BsYXkgbW9kdWxlIGZvciBHSVQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCisjZGVmaW5lIFRQX0lEWF9NQVggICAgICA4CisKK3N0cnVjdCB0aHJvdWdocHV0IHsKKwlvZmZfdCBjdXJyX3RvdGFsOworCW9mZl90IHByZXZfdG90YWw7CisJdWludDY0X3QgcHJldl9uczsKKwl1bnNpZ25lZCBpbnQgYXZnX2J5dGVzOworCXVuc2lnbmVkIGludCBhdmdfbWlzZWNzOworCXVuc2lnbmVkIGludCBsYXN0X2J5dGVzW1RQX0lEWF9NQVhdOworCXVuc2lnbmVkIGludCBsYXN0X21pc2Vjc1tUUF9JRFhfTUFYXTsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXN0cnVjdCBzdHJidWYgZGlzcGxheTsKK307CisKK3N0cnVjdCBwcm9ncmVzcyB7CisJY29uc3QgY2hhciAqdGl0bGU7CisJdWludDY0X3QgbGFzdF92YWx1ZTsKKwl1aW50NjRfdCB0b3RhbDsKKwl1bnNpZ25lZCBsYXN0X3BlcmNlbnQ7CisJdW5zaWduZWQgZGVsYXk7CisJdW5zaWduZWQgc3BhcnNlOworCXN0cnVjdCB0aHJvdWdocHV0ICp0aHJvdWdocHV0OworCXVpbnQ2NF90IHN0YXJ0X25zOworCXN0cnVjdCBzdHJidWYgY291bnRlcnNfc2I7CisJaW50IHRpdGxlX2xlbjsKKwlpbnQgc3BsaXQ7Cit9OworCitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHByb2dyZXNzX3VwZGF0ZTsKKworLyoKKyAqIFRoZXNlIGFyZSBvbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nIHRoZSBwcm9ncmVzcyBvdXRwdXQsIGkuZS4gZXhjbHVzaXZlbHkKKyAqIGZvciAndGVzdC10b29sIHByb2dyZXNzJy4KKyAqLworaW50IHByb2dyZXNzX3Rlc3Rpbmc7Cit1aW50NjRfdCBwcm9ncmVzc190ZXN0X25zID0gMDsKK3ZvaWQgcHJvZ3Jlc3NfdGVzdF9mb3JjZV91cGRhdGUodm9pZCk7IC8qIFRvIHNpbGVuY2UgLVdtaXNzaW5nLXByb3RvdHlwZXMgKi8KK3ZvaWQgcHJvZ3Jlc3NfdGVzdF9mb3JjZV91cGRhdGUodm9pZCkKK3sKKwlwcm9ncmVzc191cGRhdGUgPSAxOworfQorCisKK3N0YXRpYyB2b2lkIHByb2dyZXNzX2ludGVydmFsKGludCBzaWdudW0pCit7CisJcHJvZ3Jlc3NfdXBkYXRlID0gMTsKK30KKworc3RhdGljIHZvaWQgc2V0X3Byb2dyZXNzX3NpZ25hbCh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24gc2E7CisJc3RydWN0IGl0aW1lcnZhbCB2OworCisJaWYgKHByb2dyZXNzX3Rlc3RpbmcpCisJCXJldHVybjsKKworCXByb2dyZXNzX3VwZGF0ZSA9IDA7CisKKwltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKKwlzYS5zYV9oYW5kbGVyID0gcHJvZ3Jlc3NfaW50ZXJ2YWw7CisJc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOworCXNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKKwlzaWdhY3Rpb24oU0lHQUxSTSwgJnNhLCBOVUxMKTsKKworCXYuaXRfaW50ZXJ2YWwudHZfc2VjID0gMTsKKwl2Lml0X2ludGVydmFsLnR2X3VzZWMgPSAwOworCXYuaXRfdmFsdWUgPSB2Lml0X2ludGVydmFsOworCXNldGl0aW1lcihJVElNRVJfUkVBTCwgJnYsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9wcm9ncmVzc19zaWduYWwodm9pZCkKK3sKKwlzdHJ1Y3QgaXRpbWVydmFsIHYgPSB7ezAsfSx9OworCisJaWYgKHByb2dyZXNzX3Rlc3RpbmcpCisJCXJldHVybjsKKworCXNldGl0aW1lcihJVElNRVJfUkVBTCwgJnYsIE5VTEwpOworCXNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKKwlwcm9ncmVzc191cGRhdGUgPSAwOworfQorCitzdGF0aWMgaW50IGlzX2ZvcmVncm91bmRfZmQoaW50IGZkKQoreworCWludCB0cGdycCA9IHRjZ2V0cGdycChmZCk7CisJcmV0dXJuIHRwZ3JwIDwgMCB8fCB0cGdycCA9PSBnZXRwZ2lkKDApOworfQorCitzdGF0aWMgdm9pZCBkaXNwbGF5KHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVpbnQ2NF90IG4sIGNvbnN0IGNoYXIgKmRvbmUpCit7CisJY29uc3QgY2hhciAqdHA7CisJc3RydWN0IHN0cmJ1ZiAqY291bnRlcnNfc2IgPSAmcHJvZ3Jlc3MtPmNvdW50ZXJzX3NiOworCWludCBzaG93X3VwZGF0ZSA9IDA7CisJaW50IGxhc3RfY291bnRfbGVuID0gY291bnRlcnNfc2ItPmxlbjsKKworCWlmIChwcm9ncmVzcy0+ZGVsYXkgJiYgKCFwcm9ncmVzc191cGRhdGUgfHwgLS1wcm9ncmVzcy0+ZGVsYXkpKQorCQlyZXR1cm47CisKKwlwcm9ncmVzcy0+bGFzdF92YWx1ZSA9IG47CisJdHAgPSAocHJvZ3Jlc3MtPnRocm91Z2hwdXQpID8gcHJvZ3Jlc3MtPnRocm91Z2hwdXQtPmRpc3BsYXkuYnVmIDogIiI7CisJaWYgKHByb2dyZXNzLT50b3RhbCkgeworCQl1bnNpZ25lZCBwZXJjZW50ID0gbiAqIDEwMCAvIHByb2dyZXNzLT50b3RhbDsKKwkJaWYgKHBlcmNlbnQgIT0gcHJvZ3Jlc3MtPmxhc3RfcGVyY2VudCB8fCBwcm9ncmVzc191cGRhdGUpIHsKKwkJCXByb2dyZXNzLT5sYXN0X3BlcmNlbnQgPSBwZXJjZW50OworCisJCQlzdHJidWZfcmVzZXQoY291bnRlcnNfc2IpOworCQkJc3RyYnVmX2FkZGYoY291bnRlcnNfc2IsCisJCQkJICAgICIlM3UlJSAoJSJQUkl1TUFYIi8lIlBSSXVNQVgiKSVzIiwgcGVyY2VudCwKKwkJCQkgICAgKHVpbnRtYXhfdCluLCAodWludG1heF90KXByb2dyZXNzLT50b3RhbCwKKwkJCQkgICAgdHApOworCQkJc2hvd191cGRhdGUgPSAxOworCQl9CisJfSBlbHNlIGlmIChwcm9ncmVzc191cGRhdGUpIHsKKwkJc3RyYnVmX3Jlc2V0KGNvdW50ZXJzX3NiKTsKKwkJc3RyYnVmX2FkZGYoY291bnRlcnNfc2IsICIlIlBSSXVNQVgiJXMiLCAodWludG1heF90KW4sIHRwKTsKKwkJc2hvd191cGRhdGUgPSAxOworCX0KKworCWlmIChzaG93X3VwZGF0ZSkgeworCQlpZiAoaXNfZm9yZWdyb3VuZF9mZChmaWxlbm8oc3RkZXJyKSkgfHwgZG9uZSkgeworCQkJY29uc3QgY2hhciAqZW9sID0gZG9uZSA/IGRvbmUgOiAiXHIiOworCQkJc2l6ZV90IGNsZWFyX2xlbiA9IGNvdW50ZXJzX3NiLT5sZW4gPCBsYXN0X2NvdW50X2xlbiA/CisJCQkJCWxhc3RfY291bnRfbGVuIC0gY291bnRlcnNfc2ItPmxlbiArIDEgOgorCQkJCQkwOworCQkJLyogVGhlICIrIDIiIGFjY291bnRzIGZvciB0aGUgIjogIi4gKi8KKwkJCXNpemVfdCBwcm9ncmVzc19saW5lX2xlbiA9IHByb2dyZXNzLT50aXRsZV9sZW4gKworCQkJCQkJY291bnRlcnNfc2ItPmxlbiArIDI7CisJCQlpbnQgY29scyA9IHRlcm1fY29sdW1ucygpOworCisJCQlpZiAocHJvZ3Jlc3MtPnNwbGl0KSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIgICVzJSpzIiwgY291bnRlcnNfc2ItPmJ1ZiwKKwkJCQkJKGludCkgY2xlYXJfbGVuLCBlb2wpOworCQkJfSBlbHNlIGlmICghZG9uZSAmJiBjb2xzIDwgcHJvZ3Jlc3NfbGluZV9sZW4pIHsKKwkJCQljbGVhcl9sZW4gPSBwcm9ncmVzcy0+dGl0bGVfbGVuICsgMSA8IGNvbHMgPworCQkJCQkgICAgY29scyAtIHByb2dyZXNzLT50aXRsZV9sZW4gLSAxIDogMDsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiUqc1xuICAlcyVzIiwKKwkJCQkJcHJvZ3Jlc3MtPnRpdGxlLCAoaW50KSBjbGVhcl9sZW4sICIiLAorCQkJCQljb3VudGVyc19zYi0+YnVmLCBlb2wpOworCQkJCXByb2dyZXNzLT5zcGxpdCA9IDE7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzJSpzIiwgcHJvZ3Jlc3MtPnRpdGxlLAorCQkJCQljb3VudGVyc19zYi0+YnVmLCAoaW50KSBjbGVhcl9sZW4sIGVvbCk7CisJCQl9CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCQlwcm9ncmVzc191cGRhdGUgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgdGhyb3VnaHB1dF9zdHJpbmcoc3RydWN0IHN0cmJ1ZiAqYnVmLCB1aW50NjRfdCB0b3RhbCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCByYXRlKQoreworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiLCAiKTsKKwlzdHJidWZfaHVtYW5pc2VfYnl0ZXMoYnVmLCB0b3RhbCk7CisJc3RyYnVmX2FkZHN0cihidWYsICIgfCAiKTsKKwlzdHJidWZfaHVtYW5pc2VfcmF0ZShidWYsIHJhdGUgKiAxMDI0KTsKK30KKworc3RhdGljIHVpbnQ2NF90IHByb2dyZXNzX2dldG5hbm90aW1lKHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MpCit7CisJaWYgKHByb2dyZXNzX3Rlc3RpbmcpCisJCXJldHVybiBwcm9ncmVzcy0+c3RhcnRfbnMgKyBwcm9ncmVzc190ZXN0X25zOworCWVsc2UKKwkJcmV0dXJuIGdldG5hbm90aW1lKCk7Cit9CisKK3ZvaWQgZGlzcGxheV90aHJvdWdocHV0KHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVpbnQ2NF90IHRvdGFsKQoreworCXN0cnVjdCB0aHJvdWdocHV0ICp0cDsKKwl1aW50NjRfdCBub3dfbnM7CisJdW5zaWduZWQgaW50IG1pc2VjcywgY291bnQsIHJhdGU7CisKKwlpZiAoIXByb2dyZXNzKQorCQlyZXR1cm47CisJdHAgPSBwcm9ncmVzcy0+dGhyb3VnaHB1dDsKKworCW5vd19ucyA9IHByb2dyZXNzX2dldG5hbm90aW1lKHByb2dyZXNzKTsKKworCWlmICghdHApIHsKKwkJcHJvZ3Jlc3MtPnRocm91Z2hwdXQgPSB0cCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp0cCkpOworCQl0cC0+cHJldl90b3RhbCA9IHRwLT5jdXJyX3RvdGFsID0gdG90YWw7CisJCXRwLT5wcmV2X25zID0gbm93X25zOworCQlzdHJidWZfaW5pdCgmdHAtPmRpc3BsYXksIDApOworCQlyZXR1cm47CisJfQorCXRwLT5jdXJyX3RvdGFsID0gdG90YWw7CisKKwkvKiBvbmx5IHVwZGF0ZSB0aHJvdWdocHV0IGV2ZXJ5IDAuNSBzICovCisJaWYgKG5vd19ucyAtIHRwLT5wcmV2X25zIDw9IDUwMDAwMDAwMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXZSBoYXZlIHggPSBieXRlcyBhbmQgeSA9IG5hbm9zZWNzLiAgV2Ugd2FudCB6ID0gS2lCL3M6CisJICoKKwkgKgl6ID0gKHggLyAxMDI0KSAvICh5IC8gMTAwMDAwMDAwMCkKKwkgKgl6ID0geCAvIHkgKiAxMDAwMDAwMDAwIC8gMTAyNAorCSAqCXogPSB4IC8gKHkgKiAxMDI0IC8gMTAwMDAwMDAwMCkKKwkgKgl6ID0geCAvIHknCisJICoKKwkgKiBUbyBzaW1wbGlmeSB0aGluZ3Mgd2UnbGwga2VlcCB0cmFjayBvZiBtaXNlY3MsIG9yIDEwMjR0aCBvZiBhIHNlYworCSAqIG9idGFpbmVkIHdpdGg6CisJICoKKwkgKgl5JyA9IHkgKiAxMDI0IC8gMTAwMDAwMDAwMAorCSAqCXknID0geSAqICgyXjEwIC8gMl40MikgKiAoMl40MiAvIDEwMDAwMDAwMDApCisJICoJeScgPSB5IC8gMl4zMiAqIDQzOTgKKwkgKgl5JyA9ICh5ICogNDM5OCkgPj4gMzIKKwkgKi8KKwltaXNlY3MgPSAoKG5vd19ucyAtIHRwLT5wcmV2X25zKSAqIDQzOTgpID4+IDMyOworCisJY291bnQgPSB0b3RhbCAtIHRwLT5wcmV2X3RvdGFsOworCXRwLT5wcmV2X3RvdGFsID0gdG90YWw7CisJdHAtPnByZXZfbnMgPSBub3dfbnM7CisJdHAtPmF2Z19ieXRlcyArPSBjb3VudDsKKwl0cC0+YXZnX21pc2VjcyArPSBtaXNlY3M7CisJcmF0ZSA9IHRwLT5hdmdfYnl0ZXMgLyB0cC0+YXZnX21pc2VjczsKKwl0cC0+YXZnX2J5dGVzIC09IHRwLT5sYXN0X2J5dGVzW3RwLT5pZHhdOworCXRwLT5hdmdfbWlzZWNzIC09IHRwLT5sYXN0X21pc2Vjc1t0cC0+aWR4XTsKKwl0cC0+bGFzdF9ieXRlc1t0cC0+aWR4XSA9IGNvdW50OworCXRwLT5sYXN0X21pc2Vjc1t0cC0+aWR4XSA9IG1pc2VjczsKKwl0cC0+aWR4ID0gKHRwLT5pZHggKyAxKSAlIFRQX0lEWF9NQVg7CisKKwl0aHJvdWdocHV0X3N0cmluZygmdHAtPmRpc3BsYXksIHRvdGFsLCByYXRlKTsKKwlpZiAocHJvZ3Jlc3MtPmxhc3RfdmFsdWUgIT0gLTEgJiYgcHJvZ3Jlc3NfdXBkYXRlKQorCQlkaXNwbGF5KHByb2dyZXNzLCBwcm9ncmVzcy0+bGFzdF92YWx1ZSwgTlVMTCk7Cit9CisKK3ZvaWQgZGlzcGxheV9wcm9ncmVzcyhzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1aW50NjRfdCBuKQoreworCWlmIChwcm9ncmVzcykKKwkJZGlzcGxheShwcm9ncmVzcywgbiwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3Byb2dyZXNzX2RlbGF5KGNvbnN0IGNoYXIgKnRpdGxlLCB1aW50NjRfdCB0b3RhbCwKKwkJCQkJICAgICB1bnNpZ25lZCBkZWxheSwgdW5zaWduZWQgc3BhcnNlKQoreworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSB4bWFsbG9jKHNpemVvZigqcHJvZ3Jlc3MpKTsKKwlwcm9ncmVzcy0+dGl0bGUgPSB0aXRsZTsKKwlwcm9ncmVzcy0+dG90YWwgPSB0b3RhbDsKKwlwcm9ncmVzcy0+bGFzdF92YWx1ZSA9IC0xOworCXByb2dyZXNzLT5sYXN0X3BlcmNlbnQgPSAtMTsKKwlwcm9ncmVzcy0+ZGVsYXkgPSBkZWxheTsKKwlwcm9ncmVzcy0+c3BhcnNlID0gc3BhcnNlOworCXByb2dyZXNzLT50aHJvdWdocHV0ID0gTlVMTDsKKwlwcm9ncmVzcy0+c3RhcnRfbnMgPSBnZXRuYW5vdGltZSgpOworCXN0cmJ1Zl9pbml0KCZwcm9ncmVzcy0+Y291bnRlcnNfc2IsIDApOworCXByb2dyZXNzLT50aXRsZV9sZW4gPSB1dGY4X3N0cndpZHRoKHRpdGxlKTsKKwlwcm9ncmVzcy0+c3BsaXQgPSAwOworCXNldF9wcm9ncmVzc19zaWduYWwoKTsKKwlyZXR1cm4gcHJvZ3Jlc3M7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RlZmF1bHRfZGVsYXkodm9pZCkKK3sKKwlzdGF0aWMgaW50IGRlbGF5X2luX3NlY3MgPSAtMTsKKworCWlmIChkZWxheV9pbl9zZWNzIDwgMCkKKwkJZGVsYXlfaW5fc2VjcyA9IGdpdF9lbnZfdWxvbmcoIkdJVF9QUk9HUkVTU19ERUxBWSIsIDIpOworCisJcmV0dXJuIGRlbGF5X2luX3NlY3M7Cit9CisKK3N0cnVjdCBwcm9ncmVzcyAqc3RhcnRfZGVsYXllZF9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwgdWludDY0X3QgdG90YWwpCit7CisJcmV0dXJuIHN0YXJ0X3Byb2dyZXNzX2RlbGF5KHRpdGxlLCB0b3RhbCwgZ2V0X2RlZmF1bHRfZGVsYXkoKSwgMCk7Cit9CisKK3N0cnVjdCBwcm9ncmVzcyAqc3RhcnRfcHJvZ3Jlc3MoY29uc3QgY2hhciAqdGl0bGUsIHVpbnQ2NF90IHRvdGFsKQoreworCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIDAsIDApOworfQorCisvKgorICogSGVyZSAic3BhcnNlIiBtZWFucyB0aGF0IHRoZSBjYWxsZXIgbWlnaHQgdXNlIHNvbWUgc2FtcGxpbmcgY3JpdGVyaWEgdG8KKyAqIGRlY2lkZSB3aGVuIHRvIGNhbGwgZGlzcGxheV9wcm9ncmVzcygpIHJhdGhlciB0aGFuIGNhbGxpbmcgaXQgZm9yIGV2ZXJ5CisgKiBpbnRlZ2VyIHZhbHVlIGluWzAgLi4gdG90YWwpLiAgSW4gcGFydGljdWxhciwgdGhlIGNhbGxlciBtaWdodCBub3QgY2FsbAorICogZGlzcGxheV9wcm9ncmVzcygpIGZvciB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgcmFuZ2UuCisgKgorICogV2hlbiAic3BhcnNlIiBpcyBzZXQsIHN0b3BfcHJvZ3Jlc3MoKSB3aWxsIGF1dG9tYXRpY2FsbHkgZm9yY2UgdGhlIGRvbmUKKyAqIG1lc3NhZ2UgdG8gc2hvdyAxMDAlLgorICovCitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwgdWludDY0X3QgdG90YWwpCit7CisJcmV0dXJuIHN0YXJ0X3Byb2dyZXNzX2RlbGF5KHRpdGxlLCB0b3RhbCwgMCwgMSk7Cit9CisKK3N0cnVjdCBwcm9ncmVzcyAqc3RhcnRfZGVsYXllZF9zcGFyc2VfcHJvZ3Jlc3MoY29uc3QgY2hhciAqdGl0bGUsCisJCQkJCSAgICAgICB1aW50NjRfdCB0b3RhbCkKK3sKKwlyZXR1cm4gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkodGl0bGUsIHRvdGFsLCBnZXRfZGVmYXVsdF9kZWxheSgpLCAxKTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2lmX3NwYXJzZShzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzKQoreworCWlmIChwcm9ncmVzcyAmJgorCSAgICBwcm9ncmVzcy0+c3BhcnNlICYmCisJICAgIHByb2dyZXNzLT5sYXN0X3ZhbHVlICE9IHByb2dyZXNzLT50b3RhbCkKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgcHJvZ3Jlc3MtPnRvdGFsKTsKK30KKwordm9pZCBzdG9wX3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqKnBfcHJvZ3Jlc3MpCit7CisJZmluaXNoX2lmX3NwYXJzZSgqcF9wcm9ncmVzcyk7CisKKwlzdG9wX3Byb2dyZXNzX21zZyhwX3Byb2dyZXNzLCBfKCJkb25lIikpOworfQorCit2b2lkIHN0b3BfcHJvZ3Jlc3NfbXNnKHN0cnVjdCBwcm9ncmVzcyAqKnBfcHJvZ3Jlc3MsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gKnBfcHJvZ3Jlc3M7CisJaWYgKCFwcm9ncmVzcykKKwkJcmV0dXJuOworCSpwX3Byb2dyZXNzID0gTlVMTDsKKwlpZiAocHJvZ3Jlc3MtPmxhc3RfdmFsdWUgIT0gLTEpIHsKKwkJLyogRm9yY2UgdGhlIGxhc3QgdXBkYXRlICovCisJCWNoYXIgKmJ1ZjsKKwkJc3RydWN0IHRocm91Z2hwdXQgKnRwID0gcHJvZ3Jlc3MtPnRocm91Z2hwdXQ7CisKKwkJaWYgKHRwKSB7CisJCQl1aW50NjRfdCBub3dfbnMgPSBwcm9ncmVzc19nZXRuYW5vdGltZShwcm9ncmVzcyk7CisJCQl1bnNpZ25lZCBpbnQgbWlzZWNzLCByYXRlOworCQkJbWlzZWNzID0gKChub3dfbnMgLSBwcm9ncmVzcy0+c3RhcnRfbnMpICogNDM5OCkgPj4gMzI7CisJCQlyYXRlID0gdHAtPmN1cnJfdG90YWwgLyAobWlzZWNzID8gbWlzZWNzIDogMSk7CisJCQl0aHJvdWdocHV0X3N0cmluZygmdHAtPmRpc3BsYXksIHRwLT5jdXJyX3RvdGFsLCByYXRlKTsKKwkJfQorCQlwcm9ncmVzc191cGRhdGUgPSAxOworCQlidWYgPSB4c3RyZm10KCIsICVzLlxuIiwgbXNnKTsKKwkJZGlzcGxheShwcm9ncmVzcywgcHJvZ3Jlc3MtPmxhc3RfdmFsdWUsIGJ1Zik7CisJCWZyZWUoYnVmKTsKKwl9CisJY2xlYXJfcHJvZ3Jlc3Nfc2lnbmFsKCk7CisJc3RyYnVmX3JlbGVhc2UoJnByb2dyZXNzLT5jb3VudGVyc19zYik7CisJaWYgKHByb2dyZXNzLT50aHJvdWdocHV0KQorCQlzdHJidWZfcmVsZWFzZSgmcHJvZ3Jlc3MtPnRocm91Z2hwdXQtPmRpc3BsYXkpOworCWZyZWUocHJvZ3Jlc3MtPnRocm91Z2hwdXQpOworCWZyZWUocHJvZ3Jlc3MpOworfQpkaWZmIC0tZ2l0IGEvcHJvZ3Jlc3MuaCBiL3Byb2dyZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3MzM4OQotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyZXNzLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBQUk9HUkVTU19ICisjZGVmaW5lIFBST0dSRVNTX0gKKworc3RydWN0IHByb2dyZXNzOworCit2b2lkIGRpc3BsYXlfdGhyb3VnaHB1dChzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1aW50NjRfdCB0b3RhbCk7Cit2b2lkIGRpc3BsYXlfcHJvZ3Jlc3Moc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgdWludDY0X3Qgbik7CitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLCB1aW50NjRfdCB0b3RhbCk7CitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwgdWludDY0X3QgdG90YWwpOworc3RydWN0IHByb2dyZXNzICpzdGFydF9kZWxheWVkX3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLCB1aW50NjRfdCB0b3RhbCk7CitzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X2RlbGF5ZWRfc3BhcnNlX3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLAorCQkJCQkgICAgICAgdWludDY0X3QgdG90YWwpOwordm9pZCBzdG9wX3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqKnByb2dyZXNzKTsKK3ZvaWQgc3RvcF9wcm9ncmVzc19tc2coc3RydWN0IHByb2dyZXNzICoqcHJvZ3Jlc3MsIGNvbnN0IGNoYXIgKm1zZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcHJvbWlzb3ItcmVtb3RlLmMgYi9wcm9taXNvci1yZW1vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjMzOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvbWlzb3ItcmVtb3RlLmMKQEAgLTAsMCArMSwyNjUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorCitzdGF0aWMgY2hhciAqcmVwb3NpdG9yeV9mb3JtYXRfcGFydGlhbF9jbG9uZTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb3JlX3BhcnRpYWxfY2xvbmVfZmlsdGVyX2RlZmF1bHQ7CisKK3ZvaWQgc2V0X3JlcG9zaXRvcnlfZm9ybWF0X3BhcnRpYWxfY2xvbmUoY2hhciAqcGFydGlhbF9jbG9uZSkKK3sKKwlyZXBvc2l0b3J5X2Zvcm1hdF9wYXJ0aWFsX2Nsb25lID0geHN0cmR1cF9vcl9udWxsKHBhcnRpYWxfY2xvbmUpOworfQorCitzdGF0aWMgaW50IGZldGNoX3JlZnMoY29uc3QgY2hhciAqcmVtb3RlX25hbWUsIHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCWludCByZXM7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZV9uYW1lKTsKKwlpZiAoIXJlbW90ZS0+dXJsWzBdKQorCQlkaWUoXygiUmVtb3RlIHdpdGggbm8gVVJMIikpOworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCByZW1vdGUtPnVybFswXSk7CisKKwl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GUk9NX1BST01JU09SLCAiMSIpOworCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX05PX0RFUEVOREVOVFMsICIxIik7CisJcmVzID0gdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCByZWYpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBmZXRjaF9vYmplY3RzKGNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZHMsCisJCQkgaW50IG9pZF9ucikKK3sKKwlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG9pZF9ucjsgaSsrKSB7CisJCXN0cnVjdCByZWYgKm5ld19yZWYgPSBhbGxvY19yZWYob2lkX3RvX2hleCgmb2lkc1tpXSkpOworCQlvaWRjcHkoJm5ld19yZWYtPm9sZF9vaWQsICZvaWRzW2ldKTsKKwkJbmV3X3JlZi0+ZXhhY3Rfb2lkID0gMTsKKwkJbmV3X3JlZi0+bmV4dCA9IHJlZjsKKwkJcmVmID0gbmV3X3JlZjsKKwl9CisJcmV0dXJuIGZldGNoX3JlZnMocmVtb3RlX25hbWUsIHJlZik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlICpwcm9taXNvcnM7CitzdGF0aWMgc3RydWN0IHByb21pc29yX3JlbW90ZSAqKnByb21pc29yc190YWlsID0gJnByb21pc29yczsKKworc3RhdGljIHN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnByb21pc29yX3JlbW90ZV9uZXcoY29uc3QgY2hhciAqcmVtb3RlX25hbWUpCit7CisJc3RydWN0IHByb21pc29yX3JlbW90ZSAqcjsKKworCWlmICgqcmVtb3RlX25hbWUgPT0gJy8nKSB7CisJCXdhcm5pbmcoXygicHJvbWlzb3IgcmVtb3RlIG5hbWUgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIpLAorCQkJcmVtb3RlX25hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlGTEVYX0FMTE9DX1NUUihyLCBuYW1lLCByZW1vdGVfbmFtZSk7CisKKwkqcHJvbWlzb3JzX3RhaWwgPSByOworCXByb21pc29yc190YWlsID0gJnItPm5leHQ7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnByb21pc29yX3JlbW90ZV9sb29rdXAoY29uc3QgY2hhciAqcmVtb3RlX25hbWUsCisJCQkJCQkgICAgICBzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlICoqcHJldmlvdXMpCit7CisJc3RydWN0IHByb21pc29yX3JlbW90ZSAqciwgKnA7CisKKwlmb3IgKHAgPSBOVUxMLCByID0gcHJvbWlzb3JzOyByOyBwID0gciwgciA9IHItPm5leHQpCisJCWlmICghc3RyY21wKHItPm5hbWUsIHJlbW90ZV9uYW1lKSkgeworCQkJaWYgKHByZXZpb3VzKQorCQkJCSpwcmV2aW91cyA9IHA7CisJCQlyZXR1cm4gcjsKKwkJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHByb21pc29yX3JlbW90ZV9tb3ZlX3RvX3RhaWwoc3RydWN0IHByb21pc29yX3JlbW90ZSAqciwKKwkJCQkJIHN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnByZXZpb3VzKQoreworCWlmIChyLT5uZXh0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChwcmV2aW91cykKKwkJcHJldmlvdXMtPm5leHQgPSByLT5uZXh0OworCWVsc2UKKwkJcHJvbWlzb3JzID0gci0+bmV4dCA/IHItPm5leHQgOiByOworCXItPm5leHQgPSBOVUxMOworCSpwcm9taXNvcnNfdGFpbCA9IHI7CisJcHJvbWlzb3JzX3RhaWwgPSAmci0+bmV4dDsKK30KKworc3RhdGljIGludCBwcm9taXNvcl9yZW1vdGVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbmFtZWxlbjsKKwljb25zdCBjaGFyICpzdWJrZXk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnBhcnRpYWxjbG9uZWZpbHRlciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmNvcmVfcGFydGlhbF9jbG9uZV9maWx0ZXJfZGVmYXVsdCwKKwkJCQkJIHZhciwgdmFsdWUpOworCisJaWYgKHBhcnNlX2NvbmZpZ19rZXkodmFyLCAicmVtb3RlIiwgJm5hbWUsICZuYW1lbGVuLCAmc3Via2V5KSA8IDApCisJCXJldHVybiAwOworCisJaWYgKCFzdHJjbXAoc3Via2V5LCAicHJvbWlzb3IiKSkgeworCQljaGFyICpyZW1vdGVfbmFtZTsKKworCQlpZiAoIWdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCXJldHVybiAwOworCisJCXJlbW90ZV9uYW1lID0geG1lbWR1cHoobmFtZSwgbmFtZWxlbik7CisKKwkJaWYgKCFwcm9taXNvcl9yZW1vdGVfbG9va3VwKHJlbW90ZV9uYW1lLCBOVUxMKSkKKwkJCXByb21pc29yX3JlbW90ZV9uZXcocmVtb3RlX25hbWUpOworCisJCWZyZWUocmVtb3RlX25hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoc3Via2V5LCAicGFydGlhbGNsb25lZmlsdGVyIikpIHsKKwkJc3RydWN0IHByb21pc29yX3JlbW90ZSAqcjsKKwkJY2hhciAqcmVtb3RlX25hbWUgPSB4bWVtZHVweihuYW1lLCBuYW1lbGVuKTsKKworCQlyID0gcHJvbWlzb3JfcmVtb3RlX2xvb2t1cChyZW1vdGVfbmFtZSwgTlVMTCk7CisJCWlmICghcikKKwkJCXIgPSBwcm9taXNvcl9yZW1vdGVfbmV3KHJlbW90ZV9uYW1lKTsKKworCQlmcmVlKHJlbW90ZV9uYW1lKTsKKworCQlpZiAoIXIpCisJCQlyZXR1cm4gMDsKKworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnItPnBhcnRpYWxfY2xvbmVfZmlsdGVyLCB2YXIsIHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0aWFsaXplZDsKKworc3RhdGljIHZvaWQgcHJvbWlzb3JfcmVtb3RlX2luaXQodm9pZCkKK3sKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlpbml0aWFsaXplZCA9IDE7CisKKwlnaXRfY29uZmlnKHByb21pc29yX3JlbW90ZV9jb25maWcsIE5VTEwpOworCisJaWYgKHJlcG9zaXRvcnlfZm9ybWF0X3BhcnRpYWxfY2xvbmUpIHsKKwkJc3RydWN0IHByb21pc29yX3JlbW90ZSAqbywgKnByZXZpb3VzOworCisJCW8gPSBwcm9taXNvcl9yZW1vdGVfbG9va3VwKHJlcG9zaXRvcnlfZm9ybWF0X3BhcnRpYWxfY2xvbmUsCisJCQkJCSAgICZwcmV2aW91cyk7CisJCWlmIChvKQorCQkJcHJvbWlzb3JfcmVtb3RlX21vdmVfdG9fdGFpbChvLCBwcmV2aW91cyk7CisJCWVsc2UKKwkJCXByb21pc29yX3JlbW90ZV9uZXcocmVwb3NpdG9yeV9mb3JtYXRfcGFydGlhbF9jbG9uZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcm9taXNvcl9yZW1vdGVfY2xlYXIodm9pZCkKK3sKKwl3aGlsZSAocHJvbWlzb3JzKSB7CisJCXN0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnIgPSBwcm9taXNvcnM7CisJCXByb21pc29ycyA9IHByb21pc29ycy0+bmV4dDsKKwkJZnJlZShyKTsKKwl9CisKKwlwcm9taXNvcnNfdGFpbCA9ICZwcm9taXNvcnM7Cit9CisKK3ZvaWQgcHJvbWlzb3JfcmVtb3RlX3JlaW5pdCh2b2lkKQoreworCWluaXRpYWxpemVkID0gMDsKKwlwcm9taXNvcl9yZW1vdGVfY2xlYXIoKTsKKwlwcm9taXNvcl9yZW1vdGVfaW5pdCgpOworfQorCitzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlICpwcm9taXNvcl9yZW1vdGVfZmluZChjb25zdCBjaGFyICpyZW1vdGVfbmFtZSkKK3sKKwlwcm9taXNvcl9yZW1vdGVfaW5pdCgpOworCisJaWYgKCFyZW1vdGVfbmFtZSkKKwkJcmV0dXJuIHByb21pc29yczsKKworCXJldHVybiBwcm9taXNvcl9yZW1vdGVfbG9va3VwKHJlbW90ZV9uYW1lLCBOVUxMKTsKK30KKworaW50IGhhc19wcm9taXNvcl9yZW1vdGUodm9pZCkKK3sKKwlyZXR1cm4gISFwcm9taXNvcl9yZW1vdGVfZmluZChOVUxMKTsKK30KKworc3RhdGljIGludCByZW1vdmVfZmV0Y2hlZF9vaWRzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKipvaWRzLAorCQkJICAgICAgIGludCBvaWRfbnIsIGludCB0b19mcmVlKQoreworCWludCBpLCByZW1haW5pbmdfbnIgPSAwOworCWludCAqcmVtYWluaW5nID0geGNhbGxvYyhvaWRfbnIsIHNpemVvZigqcmVtYWluaW5nKSk7CisJc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZHMgPSAqb2lkczsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkczsKKworCWZvciAoaSA9IDA7IGkgPCBvaWRfbnI7IGkrKykKKwkJaWYgKG9pZF9vYmplY3RfaW5mb19leHRlbmRlZChyZXBvLCAmb2xkX29pZHNbaV0sIE5VTEwsCisJCQkJCSAgICAgT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QpKSB7CisJCQlyZW1haW5pbmdbaV0gPSAxOworCQkJcmVtYWluaW5nX25yKys7CisJCX0KKworCWlmIChyZW1haW5pbmdfbnIpIHsKKwkJaW50IGogPSAwOworCQluZXdfb2lkcyA9IHhjYWxsb2MocmVtYWluaW5nX25yLCBzaXplb2YoKm5ld19vaWRzKSk7CisJCWZvciAoaSA9IDA7IGkgPCBvaWRfbnI7IGkrKykKKwkJCWlmIChyZW1haW5pbmdbaV0pCisJCQkJb2lkY3B5KCZuZXdfb2lkc1tqKytdLCAmb2xkX29pZHNbaV0pOworCQkqb2lkcyA9IG5ld19vaWRzOworCQlpZiAodG9fZnJlZSkKKwkJCWZyZWUob2xkX29pZHMpOworCX0KKworCWZyZWUocmVtYWluaW5nKTsKKworCXJldHVybiByZW1haW5pbmdfbnI7Cit9CisKK2ludCBwcm9taXNvcl9yZW1vdGVfZ2V0X2RpcmVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWRzLAorCQkJICAgICAgIGludCBvaWRfbnIpCit7CisJc3RydWN0IHByb21pc29yX3JlbW90ZSAqcjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpyZW1haW5pbmdfb2lkcyA9IChzdHJ1Y3Qgb2JqZWN0X2lkICopb2lkczsKKwlpbnQgcmVtYWluaW5nX25yID0gb2lkX25yOworCWludCB0b19mcmVlID0gMDsKKwlpbnQgcmVzID0gLTE7CisKKwlwcm9taXNvcl9yZW1vdGVfaW5pdCgpOworCisJZm9yIChyID0gcHJvbWlzb3JzOyByOyByID0gci0+bmV4dCkgeworCQlpZiAoZmV0Y2hfb2JqZWN0cyhyLT5uYW1lLCByZW1haW5pbmdfb2lkcywgcmVtYWluaW5nX25yKSA8IDApIHsKKwkJCWlmIChyZW1haW5pbmdfbnIgPT0gMSkKKwkJCQljb250aW51ZTsKKwkJCXJlbWFpbmluZ19uciA9IHJlbW92ZV9mZXRjaGVkX29pZHMocmVwbywgJnJlbWFpbmluZ19vaWRzLAorCQkJCQkJCSByZW1haW5pbmdfbnIsIHRvX2ZyZWUpOworCQkJaWYgKHJlbWFpbmluZ19ucikgeworCQkJCXRvX2ZyZWUgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXJlcyA9IDA7CisJCWJyZWFrOworCX0KKworCWlmICh0b19mcmVlKQorCQlmcmVlKHJlbWFpbmluZ19vaWRzKTsKKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9wcm9taXNvci1yZW1vdGUuaCBiL3Byb21pc29yLXJlbW90ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczN2JhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9taXNvci1yZW1vdGUuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIFBST01JU09SX1JFTU9URV9ICisjZGVmaW5lIFBST01JU09SX1JFTU9URV9ICisKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKK3N0cnVjdCBvYmplY3RfaWQ7CisKKy8qCisgKiBQcm9taXNvciByZW1vdGUgbGlua2VkIGxpc3QKKyAqCisgKiBJbmZvcm1hdGlvbiBpbiBpdHMgZmllbGRzIGNvbWUgZnJvbSByZW1vdGUuWFhYIGNvbmZpZyBlbnRyaWVzIG9yCisgKiBmcm9tIGV4dGVuc2lvbnMucGFydGlhbGNsb25lIG9yIGNvcmUucGFydGlhbGNsb25lZmlsdGVyLgorICovCitzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlIHsKKwlzdHJ1Y3QgcHJvbWlzb3JfcmVtb3RlICpuZXh0OworCWNvbnN0IGNoYXIgKnBhcnRpYWxfY2xvbmVfZmlsdGVyOworCWNvbnN0IGNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK307CisKK3ZvaWQgcHJvbWlzb3JfcmVtb3RlX3JlaW5pdCh2b2lkKTsKK3N0cnVjdCBwcm9taXNvcl9yZW1vdGUgKnByb21pc29yX3JlbW90ZV9maW5kKGNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lKTsKK2ludCBoYXNfcHJvbWlzb3JfcmVtb3RlKHZvaWQpOworaW50IHByb21pc29yX3JlbW90ZV9nZXRfZGlyZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZHMsCisJCQkgICAgICAgaW50IG9pZF9ucik7CisKKy8qCisgKiBUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgb25jZSBmcm9tIHNldHVwLmMgdG8gc2V0IHRoZSB2YWx1ZSB3ZSBnb3QKKyAqIGZyb20gdGhlIGV4dGVuc2lvbnMucGFydGlhbGNsb25lIGNvbmZpZyBvcHRpb24uCisgKi8KK3ZvaWQgc2V0X3JlcG9zaXRvcnlfZm9ybWF0X3BhcnRpYWxfY2xvbmUoY2hhciAqcGFydGlhbF9jbG9uZSk7CisKKyNlbmRpZiAvKiBQUk9NSVNPUl9SRU1PVEVfSCAqLwpkaWZmIC0tZ2l0IGEvcHJvbXB0LmMgYi9wcm9tcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU4ODVkCi0tLSAvZGV2L251bGwKKysrIGIvcHJvbXB0LmMKQEAgLTAsMCArMSw3NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJwcm9tcHQuaCIKKyNpbmNsdWRlICJjb21wYXQvdGVybWluYWwuaCIKKworc3RhdGljIGNoYXIgKmRvX2Fza3Bhc3MoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpwcm9tcHQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcGFzcyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmdzWzNdOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOworCWludCBlcnIgPSAwOworCisJYXJnc1swXSA9IGNtZDsKKwlhcmdzWzFdCT0gcHJvbXB0OworCWFyZ3NbMl0gPSBOVUxMOworCisJcGFzcy5hcmd2ID0gYXJnczsKKwlwYXNzLm91dCA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJnBhc3MpKQorCQlyZXR1cm4gTlVMTDsKKworCXN0cmJ1Zl9yZXNldCgmYnVmZmVyKTsKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZmZlciwgcGFzcy5vdXQsIDIwKSA8IDApCisJCWVyciA9IDE7CisKKwljbG9zZShwYXNzLm91dCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJnBhc3MpKQorCQllcnIgPSAxOworCisJaWYgKGVycikgeworCQllcnJvcigidW5hYmxlIHRvIHJlYWQgYXNrcGFzcyByZXNwb25zZSBmcm9tICclcyciLCBjbWQpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc3RyYnVmX3NldGxlbigmYnVmZmVyLCBzdHJjc3BuKGJ1ZmZlci5idWYsICJcclxuIikpOworCisJcmV0dXJuIGJ1ZmZlci5idWY7Cit9CisKK2NoYXIgKmdpdF9wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgZmxhZ3MpCit7CisJY2hhciAqciA9IE5VTEw7CisKKwlpZiAoZmxhZ3MgJiBQUk9NUFRfQVNLUEFTUykgeworCQljb25zdCBjaGFyICphc2twYXNzOworCisJCWFza3Bhc3MgPSBnZXRlbnYoIkdJVF9BU0tQQVNTIik7CisJCWlmICghYXNrcGFzcykKKwkJCWFza3Bhc3MgPSBhc2twYXNzX3Byb2dyYW07CisJCWlmICghYXNrcGFzcykKKwkJCWFza3Bhc3MgPSBnZXRlbnYoIlNTSF9BU0tQQVNTIik7CisJCWlmIChhc2twYXNzICYmICphc2twYXNzKQorCQkJciA9IGRvX2Fza3Bhc3MoYXNrcGFzcywgcHJvbXB0KTsKKwl9CisKKwlpZiAoIXIpIHsKKwkJY29uc3QgY2hhciAqZXJyOworCisJCWlmIChnaXRfZW52X2Jvb2woIkdJVF9URVJNSU5BTF9QUk9NUFQiLCAxKSkgeworCQkJciA9IGdpdF90ZXJtaW5hbF9wcm9tcHQocHJvbXB0LCBmbGFncyAmIFBST01QVF9FQ0hPKTsKKwkJCWVyciA9IHN0cmVycm9yKGVycm5vKTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9ICJ0ZXJtaW5hbCBwcm9tcHRzIGRpc2FibGVkIjsKKwkJfQorCQlpZiAoIXIpIHsKKwkJCS8qIHByb21wdHMgYWxyZWFkeSBjb250YWluICI6ICIgYXQgdGhlIGVuZCAqLworCQkJZGllKCJjb3VsZCBub3QgcmVhZCAlcyVzIiwgcHJvbXB0LCBlcnIpOworCQl9CisJfQorCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvcHJvbXB0LmggYi9wcm9tcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDRjY2VkCi0tLSAvZGV2L251bGwKKysrIGIvcHJvbXB0LmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIFBST01QVF9ICisjZGVmaW5lIFBST01QVF9ICisKKyNkZWZpbmUgUFJPTVBUX0FTS1BBU1MgKDE8PDApCisjZGVmaW5lIFBST01QVF9FQ0hPICAgICgxPDwxKQorCitjaGFyICpnaXRfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGZsYWdzKTsKKworI2VuZGlmIC8qIFBST01QVF9IICovCmRpZmYgLS1naXQgYS9wcm90b2NvbC5jIGIvcHJvdG9jb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDNiZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvdG9jb2wuYwpAQCAtMCwwICsxLDkzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorCitzdGF0aWMgZW51bSBwcm90b2NvbF92ZXJzaW9uIHBhcnNlX3Byb3RvY29sX3ZlcnNpb24oY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFsdWUsICIwIikpCisJCXJldHVybiBwcm90b2NvbF92MDsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiMSIpKQorCQlyZXR1cm4gcHJvdG9jb2xfdjE7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIjIiKSkKKwkJcmV0dXJuIHByb3RvY29sX3YyOworCWVsc2UKKwkJcmV0dXJuIHByb3RvY29sX3Vua25vd25fdmVyc2lvbjsKK30KKworZW51bSBwcm90b2NvbF92ZXJzaW9uIGdldF9wcm90b2NvbF92ZXJzaW9uX2NvbmZpZyh2b2lkKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCWNvbnN0IGNoYXIgKmdpdF90ZXN0X2sgPSAiR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTiI7CisJY29uc3QgY2hhciAqZ2l0X3Rlc3RfdjsKKworCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJwcm90b2NvbC52ZXJzaW9uIiwgJnZhbHVlKSkgeworCQllbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiA9IHBhcnNlX3Byb3RvY29sX3ZlcnNpb24odmFsdWUpOworCisJCWlmICh2ZXJzaW9uID09IHByb3RvY29sX3Vua25vd25fdmVyc2lvbikKKwkJCWRpZSgidW5rbm93biB2YWx1ZSBmb3IgY29uZmlnICdwcm90b2NvbC52ZXJzaW9uJzogJXMiLAorCQkJICAgIHZhbHVlKTsKKworCQlyZXR1cm4gdmVyc2lvbjsKKwl9CisKKwlnaXRfdGVzdF92ID0gZ2V0ZW52KGdpdF90ZXN0X2spOworCWlmIChnaXRfdGVzdF92ICYmICpnaXRfdGVzdF92KSB7CisJCWVudW0gcHJvdG9jb2xfdmVyc2lvbiBlbnYgPSBwYXJzZV9wcm90b2NvbF92ZXJzaW9uKGdpdF90ZXN0X3YpOworCisJCWlmIChlbnYgPT0gcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uKQorCQkJZGllKCJ1bmtub3duIHZhbHVlIGZvciAlczogJXMiLCBnaXRfdGVzdF9rLCBnaXRfdGVzdF92KTsKKwkJcmV0dXJuIGVudjsKKwl9CisKKwlyZXR1cm4gcHJvdG9jb2xfdjI7Cit9CisKK2VudW0gcHJvdG9jb2xfdmVyc2lvbiBkZXRlcm1pbmVfcHJvdG9jb2xfdmVyc2lvbl9zZXJ2ZXIodm9pZCkKK3sKKwljb25zdCBjaGFyICpnaXRfcHJvdG9jb2wgPSBnZXRlbnYoR0lUX1BST1RPQ09MX0VOVklST05NRU5UKTsKKwllbnVtIHByb3RvY29sX3ZlcnNpb24gdmVyc2lvbiA9IHByb3RvY29sX3YwOworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2hpY2ggcHJvdG9jb2wgdmVyc2lvbiB0aGUgY2xpZW50IGhhcyByZXF1ZXN0ZWQuICBTaW5jZQorCSAqIG11bHRpcGxlICd2ZXJzaW9uJyBrZXlzIGNhbiBiZSBzZW50IGJ5IHRoZSBjbGllbnQsIGluZGljYXRpbmcgdGhhdAorCSAqIHRoZSBjbGllbnQgaXMgb2theSB0byBzcGVhayBhbnkgb2YgdGhlbSwgc2VsZWN0IHRoZSBncmVhdGVzdCB2ZXJzaW9uCisJICogdGhhdCB0aGUgY2xpZW50IGhhcyByZXF1ZXN0ZWQuICBUaGlzIGlzIGR1ZSB0byB0aGUgYXNzdW1wdGlvbiB0aGF0CisJICogdGhlIG1vc3QgcmVjZW50IHByb3RvY29sIHZlcnNpb24gd2lsbCBiZSB0aGUgbW9zdCBzdGF0ZS1vZi10aGUtYXJ0LgorCSAqLworCWlmIChnaXRfcHJvdG9jb2wpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCXN0cmluZ19saXN0X3NwbGl0KCZsaXN0LCBnaXRfcHJvdG9jb2wsICc6JywgLTEpOworCisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmxpc3QpIHsKKwkJCWNvbnN0IGNoYXIgKnZhbHVlOworCQkJZW51bSBwcm90b2NvbF92ZXJzaW9uIHY7CisKKwkJCWlmIChza2lwX3ByZWZpeChpdGVtLT5zdHJpbmcsICJ2ZXJzaW9uPSIsICZ2YWx1ZSkpIHsKKwkJCQl2ID0gcGFyc2VfcHJvdG9jb2xfdmVyc2lvbih2YWx1ZSk7CisJCQkJaWYgKHYgPiB2ZXJzaW9uKQorCQkJCQl2ZXJzaW9uID0gdjsKKwkJCX0KKwkJfQorCisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwl9CisKKwlyZXR1cm4gdmVyc2lvbjsKK30KKworZW51bSBwcm90b2NvbF92ZXJzaW9uIGRldGVybWluZV9wcm90b2NvbF92ZXJzaW9uX2NsaWVudChjb25zdCBjaGFyICpzZXJ2ZXJfcmVzcG9uc2UpCit7CisJZW51bSBwcm90b2NvbF92ZXJzaW9uIHZlcnNpb24gPSBwcm90b2NvbF92MDsKKworCWlmIChza2lwX3ByZWZpeChzZXJ2ZXJfcmVzcG9uc2UsICJ2ZXJzaW9uICIsICZzZXJ2ZXJfcmVzcG9uc2UpKSB7CisJCXZlcnNpb24gPSBwYXJzZV9wcm90b2NvbF92ZXJzaW9uKHNlcnZlcl9yZXNwb25zZSk7CisKKwkJaWYgKHZlcnNpb24gPT0gcHJvdG9jb2xfdW5rbm93bl92ZXJzaW9uKQorCQkJZGllKCJzZXJ2ZXIgaXMgc3BlYWtpbmcgYW4gdW5rbm93biBwcm90b2NvbCIpOworCQlpZiAodmVyc2lvbiA9PSBwcm90b2NvbF92MCkKKwkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IHNlcnZlciBleHBsaWNpdGx5IHNhaWQgdmVyc2lvbiAwIik7CisJfQorCisJcmV0dXJuIHZlcnNpb247Cit9CmRpZmYgLS1naXQgYS9wcm90b2NvbC5oIGIvcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWYxYTRhCi0tLSAvZGV2L251bGwKKysrIGIvcHJvdG9jb2wuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIFBST1RPQ09MX0gKKyNkZWZpbmUgUFJPVE9DT0xfSAorCitlbnVtIHByb3RvY29sX3ZlcnNpb24geworCXByb3RvY29sX3Vua25vd25fdmVyc2lvbiA9IC0xLAorCXByb3RvY29sX3YwID0gMCwKKwlwcm90b2NvbF92MSA9IDEsCisJcHJvdG9jb2xfdjIgPSAyLAorfTsKKworLyoKKyAqIFVzZWQgYnkgYSBjbGllbnQgdG8gZGV0ZXJtaW5lIHdoaWNoIHByb3RvY29sIHZlcnNpb24gdG8gcmVxdWVzdCBiZSB1c2VkIHdoZW4KKyAqIGNvbW11bmljYXRpbmcgd2l0aCBhIHNlcnZlciwgcmVmbGVjdGluZyB0aGUgY29uZmlndXJlZCB2YWx1ZSBvZiB0aGUKKyAqICdwcm90b2NvbC52ZXJzaW9uJyBjb25maWcuICBJZiB1bmNvbmZpZ3VyZWQsIGEgdmFsdWUgb2YgJ3Byb3RvY29sX3YwJyBpcworICogcmV0dXJuZWQuCisgKi8KK2VudW0gcHJvdG9jb2xfdmVyc2lvbiBnZXRfcHJvdG9jb2xfdmVyc2lvbl9jb25maWcodm9pZCk7CisKKy8qCisgKiBVc2VkIGJ5IGEgc2VydmVyIHRvIGRldGVybWluZSB3aGljaCBwcm90b2NvbCB2ZXJzaW9uIHNob3VsZCBiZSB1c2VkIGJhc2VkIG9uCisgKiBhIGNsaWVudCdzIHJlcXVlc3QsIGNvbW11bmljYXRlZCB2aWEgdGhlICdHSVRfUFJPVE9DT0wnIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiBieSBzZXR0aW5nIGFwcHJvcHJpYXRlIHZhbHVlcyBmb3IgdGhlIGtleSAndmVyc2lvbicuICBJZiBhIGNsaWVudCBkb2Vzbid0CisgKiByZXF1ZXN0IGEgcGFydGljdWxhciBwcm90b2NvbCB2ZXJzaW9uLCBhIGRlZmF1bHQgb2YgJ3Byb3RvY29sX3YwJyB3aWxsIGJlCisgKiB1c2VkLgorICovCitlbnVtIHByb3RvY29sX3ZlcnNpb24gZGV0ZXJtaW5lX3Byb3RvY29sX3ZlcnNpb25fc2VydmVyKHZvaWQpOworCisvKgorICogVXNlZCBieSBhIGNsaWVudCB0byBkZXRlcm1pbmUgd2hpY2ggcHJvdG9jb2wgdmVyc2lvbiB0aGUgc2VydmVyIGlzIHNwZWFraW5nCisgKiBiYXNlZCBvbiB0aGUgc2VydmVyJ3MgaW5pdGlhbCByZXNwb25zZS4KKyAqLworZW51bSBwcm90b2NvbF92ZXJzaW9uIGRldGVybWluZV9wcm90b2NvbF92ZXJzaW9uX2NsaWVudChjb25zdCBjaGFyICpzZXJ2ZXJfcmVzcG9uc2UpOworCisjZW5kaWYgLyogUFJPVE9DT0xfSCAqLwpkaWZmIC0tZ2l0IGEvcXVvdGUuYyBiL3F1b3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjMGRiYwotLS0gL2Rldi9udWxsCisrKyBiL3F1b3RlLmMKQEAgLTAsMCArMSw1NDUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitpbnQgcXVvdGVfcGF0aF9mdWxseSA9IDE7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRfYnNfcXVvdGUoY2hhciBjKQoreworCXJldHVybiAoYyA9PSAnXCcnIHx8IGMgPT0gJyEnKTsKK30KKworLyogSGVscCB0byBjb3B5IHRoZSB0aGluZyBwcm9wZXJseSBxdW90ZWQgZm9yIHRoZSBzaGVsbCBzYWZldHkuCisgKiBhbnkgc2luZ2xlIHF1b3RlIGlzIHJlcGxhY2VkIHdpdGggJ1wnJywgYW55IGV4Y2xhbWF0aW9uIHBvaW50CisgKiBpcyByZXBsYWNlZCB3aXRoICdcIScsIGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgZW5jbG9zZWQgaW4gYQorICogc2luZ2xlIHF1b3RlIHBhaXIuCisgKgorICogRS5nLgorICogIG9yaWdpbmFsICAgICBzcV9xdW90ZSAgICAgcmVzdWx0CisgKiAgbmFtZSAgICAgPT0+IG5hbWUgICAgICA9PT4gJ25hbWUnCisgKiAgYSBiICAgICAgPT0+IGEgYiAgICAgICA9PT4gJ2EgYicKKyAqICBhJ2IgICAgICA9PT4gYSdcJydiICAgID09PiAnYSdcJydiJworICogIGEhYiAgICAgID09PiBhJ1whJ2IgICAgPT0+ICdhJ1whJ2InCisgKi8KK3ZvaWQgc3FfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCisJaWYgKGRzdC0+YnVmID09IHNyYykKKwkJdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goZHN0LCBOVUxMKTsKKworCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCXdoaWxlICgqc3JjKSB7CisJCXNpemVfdCBsZW4gPSBzdHJjc3BuKHNyYywgIichIik7CisJCXN0cmJ1Zl9hZGQoZHN0LCBzcmMsIGxlbik7CisJCXNyYyArPSBsZW47CisJCXdoaWxlIChuZWVkX2JzX3F1b3RlKCpzcmMpKSB7CisJCQlzdHJidWZfYWRkc3RyKGRzdCwgIidcXCIpOworCQkJc3RyYnVmX2FkZGNoKGRzdCwgKnNyYysrKTsKKwkJCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCQl9CisJfQorCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK3ZvaWQgc3FfcXVvdGVfYnVmX3ByZXR0eShzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBva19wdW5jdFtdID0gIissLS4vOj1AX14iOworCWNvbnN0IGNoYXIgKnA7CisKKwkvKiBBdm9pZCBsb3NpbmcgYSB6ZXJvLWxlbmd0aCBzdHJpbmcgYnkgYWRkaW5nICcnICovCisJaWYgKCEqc3JjKSB7CisJCXN0cmJ1Zl9hZGRzdHIoZHN0LCAiJyciKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAocCA9IHNyYzsgKnA7IHArKykgeworCQlpZiAoIWlzYWxudW0oKnApICYmICFzdHJjaHIob2tfcHVuY3QsICpwKSkgeworCQkJc3FfcXVvdGVfYnVmKGRzdCwgc3JjKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIGlmIHdlIGdldCBoZXJlLCB3ZSBkaWQgbm90IG5lZWQgcXVvdGluZyAqLworCXN0cmJ1Zl9hZGRzdHIoZHN0LCBzcmMpOworfQorCit2b2lkIHNxX3F1b3RlZihzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgc3JjID0gU1RSQlVGX0lOSVQ7CisKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmc3JjLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJc3FfcXVvdGVfYnVmKGRzdCwgc3JjLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNyYyk7Cit9CisKK3ZvaWQgc3FfcXVvdGVfYXJndihzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpOworCisJLyogQ29weSBpbnRvIGRlc3RpbmF0aW9uIGJ1ZmZlci4gKi8KKwlzdHJidWZfZ3Jvdyhkc3QsIDI1NSk7CisJZm9yIChpID0gMDsgYXJndltpXTsgKytpKSB7CisJCXN0cmJ1Zl9hZGRjaChkc3QsICcgJyk7CisJCXNxX3F1b3RlX2J1Zihkc3QsIGFyZ3ZbaV0pOworCX0KK30KKworLyoKKyAqIExlZ2FjeSBmdW5jdGlvbiB0byBhcHBlbmQgZWFjaCBhcmd2IHZhbHVlLCBxdW90ZWQgYXMgbmVjZXNzYXNyeSwKKyAqIHdpdGggd2hpdGVzcGFjZSBiZWZvcmUgZWFjaCB2YWx1ZS4gIFRoaXMgcmVzdWx0cyBpbiBhIGxlYWRpbmcKKyAqIHNwYWNlIGluIHRoZSByZXN1bHQuCisgKi8KK3ZvaWQgc3FfcXVvdGVfYXJndl9wcmV0dHkoc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpZiAoYXJndlswXSkKKwkJc3RyYnVmX2FkZGNoKGRzdCwgJyAnKTsKKwlzcV9hcHBlbmRfcXVvdGVfYXJndl9wcmV0dHkoZHN0LCBhcmd2KTsKK30KKworLyoKKyAqIEFwcGVuZCBlYWNoIGFyZ3YgdmFsdWUsIHF1b3RlZCBhcyBuZWNlc3NhcnksIHdpdGggd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uCisgKi8KK3ZvaWQgc3FfYXBwZW5kX3F1b3RlX2FyZ3ZfcHJldHR5KHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhcmd2W2ldOyBpKyspIHsKKwkJaWYgKGkgPiAwKQorCQkJc3RyYnVmX2FkZGNoKGRzdCwgJyAnKTsKKwkJc3FfcXVvdGVfYnVmX3ByZXR0eShkc3QsIGFyZ3ZbaV0pOworCX0KK30KKworc3RhdGljIGNoYXIgKnNxX2RlcXVvdGVfc3RlcChjaGFyICphcmcsIGNoYXIgKipuZXh0KQoreworCWNoYXIgKmRzdCA9IGFyZzsKKwljaGFyICpzcmMgPSBhcmc7CisJY2hhciBjOworCisJaWYgKCpzcmMgIT0gJ1wnJykKKwkJcmV0dXJuIE5VTEw7CisJZm9yICg7OykgeworCQljID0gKisrc3JjOworCQlpZiAoIWMpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGMgIT0gJ1wnJykgeworCQkJKmRzdCsrID0gYzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFdlIHN0ZXBwZWQgb3V0IG9mIHNxICovCisJCXN3aXRjaCAoKisrc3JjKSB7CisJCWNhc2UgJ1wwJzoKKwkJCSpkc3QgPSAwOworCQkJaWYgKG5leHQpCisJCQkJKm5leHQgPSBOVUxMOworCQkJcmV0dXJuIGFyZzsKKwkJY2FzZSAnXFwnOgorCQkJLyoKKwkJCSAqIEFsbG93IGJhY2tzbGFzaGVkIGNoYXJhY3RlcnMgb3V0c2lkZSBvZgorCQkJICogc2luZ2xlLXF1b3RlcyBvbmx5IGlmIHRoZXkgbmVlZCBlc2NhcGluZywKKwkJCSAqIGFuZCBvbmx5IGlmIHdlIHJlc3VtZSB0aGUgc2luZ2xlLXF1b3RlZCBwYXJ0CisJCQkgKiBhZnRlcndhcmQuCisJCQkgKi8KKwkJCWlmIChuZWVkX2JzX3F1b3RlKHNyY1sxXSkgJiYgc3JjWzJdID09ICdcJycpIHsKKwkJCQkqZHN0KysgPSBzcmNbMV07CisJCQkJc3JjICs9IDI7CisJCQkJY29udGludWU7CisJCQl9CisJCS8qIEZhbGx0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlpZiAoIW5leHQgfHwgIWlzc3BhY2UoKnNyYykpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlkbyB7CisJCQkJYyA9ICorK3NyYzsKKwkJCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCQkJKmRzdCA9IDA7CisJCQkqbmV4dCA9IHNyYzsKKwkJCXJldHVybiBhcmc7CisJCX0KKwl9Cit9CisKK2NoYXIgKnNxX2RlcXVvdGUoY2hhciAqYXJnKQoreworCXJldHVybiBzcV9kZXF1b3RlX3N0ZXAoYXJnLCBOVUxMKTsKK30KKworc3RhdGljIGludCBzcV9kZXF1b3RlX3RvX2FyZ3ZfaW50ZXJuYWwoY2hhciAqYXJnLAorCQkJCSAgICAgICBjb25zdCBjaGFyICoqKmFyZ3YsIGludCAqbnIsIGludCAqYWxsb2MsCisJCQkJICAgICAgIHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSkKK3sKKwljaGFyICpuZXh0ID0gYXJnOworCisJaWYgKCEqYXJnKQorCQlyZXR1cm4gMDsKKwlkbyB7CisJCWNoYXIgKmRlcXVvdGVkID0gc3FfZGVxdW90ZV9zdGVwKG5leHQsICZuZXh0KTsKKwkJaWYgKCFkZXF1b3RlZCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGFyZ3YpIHsKKwkJCUFMTE9DX0dST1coKmFyZ3YsICpuciArIDEsICphbGxvYyk7CisJCQkoKmFyZ3YpWygqbnIpKytdID0gZGVxdW90ZWQ7CisJCX0KKwkJaWYgKGFycmF5KQorCQkJYXJndl9hcnJheV9wdXNoKGFycmF5LCBkZXF1b3RlZCk7CisJfSB3aGlsZSAobmV4dCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNxX2RlcXVvdGVfdG9fYXJndihjaGFyICphcmcsIGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICpuciwgaW50ICphbGxvYykKK3sKKwlyZXR1cm4gc3FfZGVxdW90ZV90b19hcmd2X2ludGVybmFsKGFyZywgYXJndiwgbnIsIGFsbG9jLCBOVUxMKTsKK30KKworaW50IHNxX2RlcXVvdGVfdG9fYXJndl9hcnJheShjaGFyICphcmcsIHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSkKK3sKKwlyZXR1cm4gc3FfZGVxdW90ZV90b19hcmd2X2ludGVybmFsKGFyZywgTlVMTCwgTlVMTCwgTlVMTCwgYXJyYXkpOworfQorCisvKiAxIG1lYW5zOiBxdW90ZSBhcyBvY3RhbAorICogMCBtZWFuczogcXVvdGUgYXMgb2N0YWwgaWYgKHF1b3RlX3BhdGhfZnVsbHkpCisgKiAtMSBtZWFuczogbmV2ZXIgcXVvdGUKKyAqIGM6IHF1b3RlIGFzICJcXGMiCisgKi8KKyNkZWZpbmUgWDgoeCkgICB4LCB4LCB4LCB4LCB4LCB4LCB4LCB4CisjZGVmaW5lIFgxNih4KSAgWDgoeCksIFg4KHgpCitzdGF0aWMgc2lnbmVkIGNoYXIgY29uc3Qgc3FfbG9va3VwWzI1Nl0gPSB7CisJLyogICAgICAgICAgIDAgICAgMSAgICAyICAgIDMgICAgNCAgICA1ICAgIDYgICAgNyAqLworCS8qIDB4MDAgKi8gICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAnYScsCisJLyogMHgwOCAqLyAnYicsICd0JywgJ24nLCAndicsICdmJywgJ3InLCAgIDEsICAgMSwKKwkvKiAweDEwICovIFgxNigxKSwKKwkvKiAweDIwICovICAtMSwgIC0xLCAnIicsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLAorCS8qIDB4MjggKi8gWDE2KC0xKSwgWDE2KC0xKSwgWDE2KC0xKSwKKwkvKiAweDU4ICovICAtMSwgIC0xLCAgLTEsICAtMSwnXFwnLCAgLTEsICAtMSwgIC0xLAorCS8qIDB4NjAgKi8gWDE2KC0xKSwgWDgoLTEpLAorCS8qIDB4NzggKi8gIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgIDEsCisJLyogMHg4MCAqLyAvKiBzZXQgdG8gMCAqLworfTsKKworc3RhdGljIGlubGluZSBpbnQgc3FfbXVzdF9xdW90ZShjaGFyIGMpCit7CisJcmV0dXJuIHNxX2xvb2t1cFsodW5zaWduZWQgY2hhciljXSArIHF1b3RlX3BhdGhfZnVsbHkgPiAwOworfQorCisvKiByZXR1cm5zIHRoZSBsb25nZXN0IHByZWZpeCBub3QgbmVlZGluZyBhIHF1b3RlIHVwIHRvIG1heGxlbiBpZiBwb3NpdGl2ZS4KKyAgIFRoaXMgc3RvcHMgYXQgdGhlIGZpcnN0IFwwIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgYSBjaGFyYWN0ZXIgbmVlZGluZyBhbgorICAgZXNjYXBlICovCitzdGF0aWMgc2l6ZV90IG5leHRfcXVvdGVfcG9zKGNvbnN0IGNoYXIgKnMsIHNzaXplX3QgbWF4bGVuKQoreworCXNpemVfdCBsZW47CisJaWYgKG1heGxlbiA8IDApIHsKKwkJZm9yIChsZW4gPSAwOyAhc3FfbXVzdF9xdW90ZShzW2xlbl0pOyBsZW4rKyk7CisJfSBlbHNlIHsKKwkJZm9yIChsZW4gPSAwOyBsZW4gPCBtYXhsZW4gJiYgIXNxX211c3RfcXVvdGUoc1tsZW5dKTsgbGVuKyspOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKgorICogQy1zdHlsZSBuYW1lIHF1b3RpbmcuCisgKgorICogKDEpIGlmIHNiIGFuZCBmcCBhcmUgYm90aCBOVUxMLCBpbnNwZWN0IHRoZSBpbnB1dCBuYW1lIGFuZCBjb3VudHMgdGhlCisgKiAgICAgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgYXJlIG5lZWRlZCB0byBob2xkIGNfc3R5bGUgcXVvdGVkIHZlcnNpb24gb2YgbmFtZSwKKyAqICAgICBjb3VudGluZyB0aGUgZG91YmxlIHF1b3RlcyBhcm91bmQgaXQgYnV0IG5vdCB0ZXJtaW5hdGluZyBOVUwsIGFuZAorICogICAgIHJldHVybnMgaXQuCisgKiAgICAgSG93ZXZlciwgaWYgbmFtZSBkb2VzIG5vdCBuZWVkIGNfc3R5bGUgcXVvdGluZywgaXQgcmV0dXJucyAwLgorICoKKyAqICgyKSBpZiBzYiBvciBmcCBhcmUgbm90IE5VTEwsIGl0IGVtaXRzIHRoZSBjX3N0eWxlIHF1b3RlZCB2ZXJzaW9uCisgKiAgICAgb2YgbmFtZSwgZW5jbG9zZWQgd2l0aCBkb3VibGUgcXVvdGVzIGlmIGFza2VkIGFuZCBuZWVkZWQgb25seS4KKyAqICAgICBSZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgaW4gKDEpLgorICovCitzdGF0aWMgc2l6ZV90IHF1b3RlX2Nfc3R5bGVfY291bnRlZChjb25zdCBjaGFyICpuYW1lLCBzc2l6ZV90IG1heGxlbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgbm9fZHEpCit7CisjdW5kZWYgRU1JVAorI2RlZmluZSBFTUlUKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoc2IpIHN0cmJ1Zl9hZGRjaChzYiwgKGMpKTsgICAgICAgICAgXAorCQlpZiAoZnApIGZwdXRjKChjKSwgZnApOyAgICAgICAgICAgICAgICAgXAorCQljb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIEVNSVRCVUYocywgbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChzYikgc3RyYnVmX2FkZChzYiwgKHMpLCAobCkpOyAgICAgICBcCisJCWlmIChmcCkgZndyaXRlKChzKSwgKGwpLCAxLCBmcCk7ICAgICAgICBcCisJCWNvdW50ICs9IChsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSB3aGlsZSAoMCkKKworCXNpemVfdCBsZW4sIGNvdW50ID0gMDsKKwljb25zdCBjaGFyICpwID0gbmFtZTsKKworCWZvciAoOzspIHsKKwkJaW50IGNoOworCisJCWxlbiA9IG5leHRfcXVvdGVfcG9zKHAsIG1heGxlbik7CisJCWlmIChsZW4gPT0gbWF4bGVuIHx8IChtYXhsZW4gPCAwICYmICFwW2xlbl0pKQorCQkJYnJlYWs7CisKKwkJaWYgKCFub19kcSAmJiBwID09IG5hbWUpCisJCQlFTUlUKCciJyk7CisKKwkJRU1JVEJVRihwLCBsZW4pOworCQlFTUlUKCdcXCcpOworCQlwICs9IGxlbjsKKwkJY2ggPSAodW5zaWduZWQgY2hhcikqcCsrOworCQlpZiAobWF4bGVuID49IDApCisJCQltYXhsZW4gLT0gbGVuICsgMTsKKwkJaWYgKHNxX2xvb2t1cFtjaF0gPj0gJyAnKSB7CisJCQlFTUlUKHNxX2xvb2t1cFtjaF0pOworCQl9IGVsc2UgeworCQkJRU1JVCgoKGNoID4+IDYpICYgMDMpICsgJzAnKTsKKwkJCUVNSVQoKChjaCA+PiAzKSAmIDA3KSArICcwJyk7CisJCQlFTUlUKCgoY2ggPj4gMCkgJiAwNykgKyAnMCcpOworCQl9CisJfQorCisJRU1JVEJVRihwLCBsZW4pOworCWlmIChwID09IG5hbWUpICAgLyogbm8gZW5kaW5nIHF1b3RlIG5lZWRlZCAqLworCQlyZXR1cm4gMDsKKworCWlmICghbm9fZHEpCisJCUVNSVQoJyInKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3NpemVfdCBxdW90ZV9jX3N0eWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IG5vZHEpCit7CisJcmV0dXJuIHF1b3RlX2Nfc3R5bGVfY291bnRlZChuYW1lLCAtMSwgc2IsIGZwLCBub2RxKTsKK30KKwordm9pZCBxdW90ZV90d29fY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbm9kcSkKK3sKKwlpZiAocXVvdGVfY19zdHlsZShwcmVmaXgsIE5VTEwsIE5VTEwsIDApIHx8CisJICAgIHF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgTlVMTCwgMCkpIHsKKwkJaWYgKCFub2RxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworCQlxdW90ZV9jX3N0eWxlKHByZWZpeCwgc2IsIE5VTEwsIDEpOworCQlxdW90ZV9jX3N0eWxlKHBhdGgsIHNiLCBOVUxMLCAxKTsKKwkJaWYgKCFub2RxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHByZWZpeCk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHBhdGgpOworCX0KK30KKwordm9pZCB3cml0ZV9uYW1lX3F1b3RlZChjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpCit7CisJaWYgKHRlcm1pbmF0b3IpIHsKKwkJcXVvdGVfY19zdHlsZShuYW1lLCBOVUxMLCBmcCwgMCk7CisJfSBlbHNlIHsKKwkJZnB1dHMobmFtZSwgZnApOworCX0KKwlmcHV0Yyh0ZXJtaW5hdG9yLCBmcCk7Cit9CisKK3ZvaWQgd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCUZJTEUgKmZwLCBpbnQgdGVybWluYXRvcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwluYW1lID0gcmVsYXRpdmVfcGF0aChuYW1lLCBwcmVmaXgsICZzYik7CisJd3JpdGVfbmFtZV9xdW90ZWQobmFtZSwgZnAsIHRlcm1pbmF0b3IpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworLyogcXVvdGUgcGF0aCBhcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcHJlZml4ICovCitjaGFyICpxdW90ZV9wYXRoX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcmVsID0gcmVsYXRpdmVfcGF0aChpbiwgcHJlZml4LCAmc2IpOworCXN0cmJ1Zl9yZXNldChvdXQpOworCXF1b3RlX2Nfc3R5bGVfY291bnRlZChyZWwsIHN0cmxlbihyZWwpLCBvdXQsIE5VTEwsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gb3V0LT5idWY7Cit9CisKKy8qCisgKiBDLXN0eWxlIG5hbWUgdW5xdW90aW5nLgorICoKKyAqIFF1b3RlZCBzaG91bGQgcG9pbnQgYXQgdGhlIG9wZW5pbmcgZG91YmxlIHF1b3RlLgorICogKyBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gdW5xdW90ZSB0aGUgc3RyaW5nIHByb3Blcmx5LCBhbmQgYXBwZW5kcyB0aGUKKyAqICAgcmVzdWx0IGluIHRoZSBzdHJidWYgYHNiJy4KKyAqICsgUmV0dXJucyAtMSBpbiBjYXNlIG9mIGVycm9yLCBhbmQgZG9lc24ndCB0b3VjaCB0aGUgc3RyYnVmLiBUaG91Z2ggbm90ZQorICogICB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSBtZW1vcnkgaW4gdGhlIHN0cmJ1Ziwgc28gY2FsbGluZworICogICBzdHJidWZfcmVsZWFzZSBpcyBtYW5kYXRvcnkgd2hpY2hldmVyIHJlc3VsdCB1bnF1b3RlX2Nfc3R5bGUgcmV0dXJucy4KKyAqCisgKiBVcGRhdGVzIGVuZHAgcG9pbnRlciB0byBwb2ludCBhdCBvbmUgcGFzdCB0aGUgZW5kaW5nIGRvdWJsZSBxdW90ZSBpZiBnaXZlbi4KKyAqLworaW50IHVucXVvdGVfY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcXVvdGVkLCBjb25zdCBjaGFyICoqZW5kcCkKK3sKKwlzaXplX3Qgb2xkbGVuID0gc2ItPmxlbiwgbGVuOworCWludCBjaCwgYWM7CisKKwlpZiAoKnF1b3RlZCsrICE9ICciJykKKwkJcmV0dXJuIC0xOworCisJZm9yICg7OykgeworCQlsZW4gPSBzdHJjc3BuKHF1b3RlZCwgIlwiXFwiKTsKKwkJc3RyYnVmX2FkZChzYiwgcXVvdGVkLCBsZW4pOworCQlxdW90ZWQgKz0gbGVuOworCisJCXN3aXRjaCAoKnF1b3RlZCsrKSB7CisJCSAgY2FzZSAnIic6CisJCQlpZiAoZW5kcCkKKwkJCQkqZW5kcCA9IHF1b3RlZDsKKwkJCXJldHVybiAwOworCQkgIGNhc2UgJ1xcJzoKKwkJCWJyZWFrOworCQkgIGRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJc3dpdGNoICgoY2ggPSAqcXVvdGVkKyspKSB7CisJCWNhc2UgJ2EnOiBjaCA9ICdcYSc7IGJyZWFrOworCQljYXNlICdiJzogY2ggPSAnXGInOyBicmVhazsKKwkJY2FzZSAnZic6IGNoID0gJ1xmJzsgYnJlYWs7CisJCWNhc2UgJ24nOiBjaCA9ICdcbic7IGJyZWFrOworCQljYXNlICdyJzogY2ggPSAnXHInOyBicmVhazsKKwkJY2FzZSAndCc6IGNoID0gJ1x0JzsgYnJlYWs7CisJCWNhc2UgJ3YnOiBjaCA9ICdcdic7IGJyZWFrOworCisJCWNhc2UgJ1xcJzogY2FzZSAnIic6CisJCQlicmVhazsgLyogdmVyYmF0aW0gKi8KKworCQkvKiBvY3RhbCB2YWx1ZXMgd2l0aCBmaXJzdCBkaWdpdCBvdmVyIDQgb3ZlcmZsb3cgKi8KKwkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6CisJCQkJCWFjID0gKChjaCAtICcwJykgPDwgNik7CisJCQlpZiAoKGNoID0gKnF1b3RlZCsrKSA8ICcwJyB8fCAnNycgPCBjaCkKKwkJCQlnb3RvIGVycm9yOworCQkJCQlhYyB8PSAoKGNoIC0gJzAnKSA8PCAzKTsKKwkJCWlmICgoY2ggPSAqcXVvdGVkKyspIDwgJzAnIHx8ICc3JyA8IGNoKQorCQkJCWdvdG8gZXJyb3I7CisJCQkJCWFjIHw9IChjaCAtICcwJyk7CisJCQkJCWNoID0gYWM7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQkJfQorCQlzdHJidWZfYWRkY2goc2IsIGNoKTsKKwkJfQorCisgIGVycm9yOgorCXN0cmJ1Zl9zZXRsZW4oc2IsIG9sZGxlbik7CisJcmV0dXJuIC0xOworfQorCisvKiBxdW90aW5nIGFzIGEgc3RyaW5nIGxpdGVyYWwgZm9yIG90aGVyIGxhbmd1YWdlcyAqLworCit2b2lkIHBlcmxfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzcmMpCit7CisJY29uc3QgY2hhciBzcSA9ICdcJyc7CisJY29uc3QgY2hhciBicSA9ICdcXCc7CisJY2hhciBjOworCisJc3RyYnVmX2FkZGNoKHNiLCBzcSk7CisJd2hpbGUgKChjID0gKnNyYysrKSkgeworCQlpZiAoYyA9PSBzcSB8fCBjID09IGJxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCBicSk7CisJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgc3EpOworfQorCit2b2lkIHB5dGhvbl9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwljb25zdCBjaGFyIHNxID0gJ1wnJzsKKwljb25zdCBjaGFyIGJxID0gJ1xcJzsKKwljb25zdCBjaGFyIG5sID0gJ1xuJzsKKwljaGFyIGM7CisKKwlzdHJidWZfYWRkY2goc2IsIHNxKTsKKwl3aGlsZSAoKGMgPSAqc3JjKyspKSB7CisJCWlmIChjID09IG5sKSB7CisJCQlzdHJidWZfYWRkY2goc2IsIGJxKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJ24nKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09IHNxIHx8IGMgPT0gYnEpCisJCQlzdHJidWZfYWRkY2goc2IsIGJxKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCBjKTsKKwl9CisJc3RyYnVmX2FkZGNoKHNiLCBzcSk7Cit9CisKK3ZvaWQgdGNsX3F1b3RlX2J1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgYzsKKworCXN0cmJ1Zl9hZGRjaChzYiwgJyInKTsKKwl3aGlsZSAoKGMgPSAqc3JjKyspKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdbJzogY2FzZSAnXSc6CisJCWNhc2UgJ3snOiBjYXNlICd9JzoKKwkJY2FzZSAnJCc6IGNhc2UgJ1xcJzogY2FzZSAnIic6CisJCQlzdHJidWZfYWRkY2goc2IsICdcXCcpOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJCQlicmVhazsKKwkJY2FzZSAnXGYnOgorCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcZiIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1xyJzoKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXHIiKTsKKwkJCWJyZWFrOworCQljYXNlICdcbic6CisJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAnXHQnOgorCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcdCIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1x2JzoKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXHYiKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgJyInKTsKK30KKwordm9pZCBiYXNpY19yZWdleF9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwljaGFyIGM7CisKKwlpZiAoKnNyYyA9PSAnXicpIHsKKwkJLyogb25seSBiZWdpbm5pbmcgJ14nIGlzIHNwZWNpYWwgYW5kIG5lZWRzIHF1b3RpbmcgKi8KKwkJc3RyYnVmX2FkZGNoKHNiLCAnXFwnKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAqc3JjKyspOworCX0KKwlpZiAoKnNyYyA9PSAnKicpCisJCS8qIGJlZ2lubmluZyAnKicgaXMgbm90IHNwZWNpYWwsIG5vIHF1b3RpbmcgKi8KKwkJc3RyYnVmX2FkZGNoKHNiLCAqc3JjKyspOworCisJd2hpbGUgKChjID0gKnNyYysrKSkgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnWyc6CisJCWNhc2UgJy4nOgorCQljYXNlICdcXCc6CisJCWNhc2UgJyonOgorCQkJc3RyYnVmX2FkZGNoKHNiLCAnXFwnKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJCQlicmVhazsKKworCQljYXNlICckJzoKKwkJCS8qIG9ubHkgdGhlIGVuZCAnJCcgaXMgc3BlY2lhbCBhbmQgbmVlZHMgcXVvdGluZyAqLworCQkJaWYgKCpzcmMgPT0gJ1wwJykKKwkJCQlzdHJidWZfYWRkY2goc2IsICdcXCcpOworCQkJc3RyYnVmX2FkZGNoKHNiLCBjKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkY2goc2IsIGMpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9xdW90ZS5oIGIvcXVvdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYThlZTMxCi0tLSAvZGV2L251bGwKKysrIGIvcXVvdGUuaApAQCAtMCwwICsxLDg0IEBACisjaWZuZGVmIFFVT1RFX0gKKyNkZWZpbmUgUVVPVEVfSAorCitzdHJ1Y3Qgc3RyYnVmOworCisvKiBIZWxwIHRvIGNvcHkgdGhlIHRoaW5nIHByb3Blcmx5IHF1b3RlZCBmb3IgdGhlIHNoZWxsIHNhZmV0eS4KKyAqIGFueSBzaW5nbGUgcXVvdGUgaXMgcmVwbGFjZWQgd2l0aCAnXCcnLCBhbnkgZXhjbGFtYXRpb24gcG9pbnQKKyAqIGlzIHJlcGxhY2VkIHdpdGggJ1whJywgYW5kIHRoZSB3aG9sZSB0aGluZyBpcyBlbmNsb3NlZCBpbiBhCisgKiBzaW5nbGUgcXVvdGUgcGFpci4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBwYXNzaW5nIHRoZSByZXN1bHQgdG8gc3lzdGVtKCkgYXMgYW4KKyAqIGFyZ3VtZW50OgorICoKKyAqIHNwcmludGYoY21kLCAiZm9vYmFyICVzICVzIiwgc3FfcXVvdGUoYXJnMCksIHNxX3F1b3RlKGFyZzEpKQorICoKKyAqIHdvdWxkIGJlIGFwcHJvcHJpYXRlLiAgSWYgdGhlIHN5c3RlbSgpIGlzIGdvaW5nIHRvIGNhbGwgc3NoIHRvCisgKiBydW4gdGhlIGNvbW1hbmQgb24gdGhlIG90aGVyIHNpZGU6CisgKgorICogc3ByaW50ZihjbWQsICJnaXQtZGlmZi10cmVlICVzICVzIiwgc3FfcXVvdGUoYXJnMCksIHNxX3F1b3RlKGFyZzEpKTsKKyAqIHNwcmludGYocmNtZCwgInNzaCAlcyAlcyIsIHNxX3F1b3RlKGhvc3QpLCBzcV9xdW90ZShjbWQpKTsKKyAqCisgKiBOb3RlIHRoYXQgdGhlIGFib3ZlIGV4YW1wbGVzIGxlYWsgbWVtb3J5ISAgUmVtZW1iZXIgdG8gZnJlZSByZXN1bHQgZnJvbQorICogc3FfcXVvdGUoKSBpbiBhIHJlYWwgYXBwbGljYXRpb24uCisgKgorICogc3FfcXVvdGVfYnVmKCkgd3JpdGVzIHRvIGFuIGV4aXN0aW5nIGJ1ZmZlciBvZiBzcGVjaWZpZWQgc2l6ZTsgaXQKKyAqIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuCisgKiBleGNsdWRpbmcgdGhlIGZpbmFsIG51bGwgcmVnYXJkbGVzcyBvZiB0aGUgYnVmZmVyIHNpemUuCisgKgorICogc3FfcXVvdGVmKCkgcXVvdGVzIHRoZSBlbnRpcmUgZm9ybWF0dGVkIHN0cmluZyBhcyBhIHNpbmdsZSByZXN1bHQuCisgKi8KKwordm9pZCBzcV9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpzcmMpOwordm9pZCBzcV9xdW90ZV9hcmd2KHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqKmFyZ3YpOwordm9pZCBzcV9xdW90ZWYoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qCisgKiBUaGVzZSBtYXRjaCB0aGVpciBub24tcHJldHR5IHZhcmlhbnRzLCBleGNlcHQgdGhhdCB0aGV5IGF2b2lkCisgKiBxdW90aW5nIHdoZW4gdGhlcmUgYXJlIG5vIGV4b3RpYyBjaGFyYWN0ZXJzLiBUaGVzZSBzaG91bGQgb25seSBiZSB1c2VkIGZvcgorICogaHVtYW4tcmVhZGFibGUgb3V0cHV0LCBhcyBzcV9kZXF1b3RlKCkgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBkZXF1b3RlIGl0LgorICovCit2b2lkIHNxX3F1b3RlX2J1Zl9wcmV0dHkoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpzcmMpOwordm9pZCBzcV9xdW90ZV9hcmd2X3ByZXR0eShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKiphcmd2KTsKK3ZvaWQgc3FfYXBwZW5kX3F1b3RlX2FyZ3ZfcHJldHR5KHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqKmFyZ3YpOworCisvKiBUaGlzIHVud3JhcHMgd2hhdCBzcV9xdW90ZSgpIHByb2R1Y2VzIGluIHBsYWNlLCBidXQgcmV0dXJucworICogTlVMTCBpZiB0aGUgaW5wdXQgZG9lcyBub3QgbG9vayBsaWtlIHdoYXQgc3FfcXVvdGUgd291bGQgaGF2ZQorICogcHJvZHVjZWQuCisgKi8KK2NoYXIgKnNxX2RlcXVvdGUoY2hhciAqKTsKKworLyoKKyAqIFNhbWUgYXMgdGhlIGFib3ZlLCBidXQgY2FuIGJlIHVzZWQgdG8gdW53cmFwIG1hbnkgYXJndW1lbnRzIGluIHRoZQorICogc2FtZSBzdHJpbmcgc2VwYXJhdGVkIGJ5IHNwYWNlLiBMaWtlIHNxX3F1b3RlLCBpdCB3b3JrcyBpbiBwbGFjZSwKKyAqIG1vZGlmeWluZyBhcmcgYW5kIGFwcGVuZGluZyBwb2ludGVycyBpbnRvIGl0IHRvIGFyZ3YuCisgKi8KK2ludCBzcV9kZXF1b3RlX3RvX2FyZ3YoY2hhciAqYXJnLCBjb25zdCBjaGFyICoqKmFyZ3YsIGludCAqbnIsIGludCAqYWxsb2MpOworCisvKgorICogU2FtZSBhcyBhYm92ZSwgYnV0IHN0b3JlIHRoZSB1bnF1b3RlZCBzdHJpbmdzIGluIGFuIGFyZ3ZfYXJyYXkuIFdlIHdpbGwKKyAqIHN0aWxsIG1vZGlmeSBhcmcgaW4gcGxhY2UsIGJ1dCB1bmxpa2Ugc3FfZGVxdW90ZV90b19hcmd2LCB0aGUgYXJndl9hcnJheQorICogd2lsbCBkdXBsaWNhdGUgYW5kIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBzdHJpbmdzLgorICovCitzdHJ1Y3QgYXJndl9hcnJheTsKK2ludCBzcV9kZXF1b3RlX3RvX2FyZ3ZfYXJyYXkoY2hhciAqYXJnLCBzdHJ1Y3QgYXJndl9hcnJheSAqKTsKKworaW50IHVucXVvdGVfY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKnF1b3RlZCwgY29uc3QgY2hhciAqKmVuZHApOworc2l6ZV90IHF1b3RlX2Nfc3R5bGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqLCBGSUxFICosIGludCBub19kcSk7Cit2b2lkIHF1b3RlX3R3b19jX3N0eWxlKHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisKK3ZvaWQgd3JpdGVfbmFtZV9xdW90ZWQoY29uc3QgY2hhciAqbmFtZSwgRklMRSAqLCBpbnQgdGVybWluYXRvcik7Cit2b2lkIHdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQlGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpOworCisvKiBxdW90ZSBwYXRoIGFzIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwcmVmaXggKi8KK2NoYXIgKnF1b3RlX3BhdGhfcmVsYXRpdmUoY29uc3QgY2hhciAqaW4sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqb3V0KTsKKworLyogcXVvdGluZyBhcyBhIHN0cmluZyBsaXRlcmFsIGZvciBvdGhlciBsYW5ndWFnZXMgKi8KK3ZvaWQgcGVybF9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYyk7Cit2b2lkIHB5dGhvbl9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYyk7Cit2b2lkIHRjbF9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYyk7Cit2b2lkIGJhc2ljX3JlZ2V4X3F1b3RlX2J1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3JjKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yYW5nZS1kaWZmLmMgYi9yYW5nZS1kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0NTU2NwotLS0gL2Rldi9udWxsCisrKyBiL3JhbmdlLWRpZmYuYwpAQCAtMCwwICsxLDU1MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmFuZ2UtZGlmZi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxpbmVhci1hc3NpZ25tZW50LmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJwcmV0dHkuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgImFwcGx5LmgiCisKK3N0cnVjdCBwYXRjaF91dGlsIHsKKwkvKiBGb3IgdGhlIHNlYXJjaCBmb3IgYW4gZXhhY3QgbWF0Y2ggKi8KKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlOworCWNvbnN0IGNoYXIgKmRpZmYsICpwYXRjaDsKKworCWludCBpLCBzaG93bjsKKwlpbnQgZGlmZnNpemU7CisJc2l6ZV90IGRpZmZfb2Zmc2V0OworCS8qIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgaXRlbSBpbiB0aGUgb3RoZXIgYnJhbmNoLCBvciAtMSAqLworCWludCBtYXRjaGluZzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKK307CisKK3N0YXRpYyBzaXplX3QgZmluZF9lbmRfb2ZfbGluZShjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwljaGFyICplb2wgPSBtZW1jaHIoYnVmZmVyLCAnXG4nLCBzaXplKTsKKworCWlmICghZW9sKQorCQlyZXR1cm4gc2l6ZTsKKworCSplb2wgPSAnXDAnOworCXJldHVybiBlb2wgKyAxIC0gYnVmZmVyOworfQorCisvKgorICogUmVhZHMgdGhlIHBhdGNoZXMgaW50byBhIHN0cmluZyBsaXN0LCB3aXRoIHRoZSBgdXRpbGAgZmllbGQgYmVpbmcgcG9wdWxhdGVkCisgKiBhcyBzdHJ1Y3Qgb2JqZWN0X2lkICh3aWxsIG5lZWQgdG8gYmUgZnJlZSgpZCkuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9wYXRjaGVzKGNvbnN0IGNoYXIgKnJhbmdlLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQljb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3RoZXJfYXJnKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIGNvbnRlbnRzID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHBhdGNoX3V0aWwgKnV0aWwgPSBOVUxMOworCWludCBpbl9oZWFkZXIgPSAxOworCWNoYXIgKmxpbmUsICpjdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKKwlpbnQgb2Zmc2V0LCBsZW47CisJc2l6ZV90IHNpemU7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAibG9nIiwgIi0tbm8tY29sb3IiLCAiLXAiLCAiLS1uby1tZXJnZXMiLAorCQkJIi0tcmV2ZXJzZSIsICItLWRhdGUtb3JkZXIiLCAiLS1kZWNvcmF0ZT1ubyIsCisJCQkiLS1uby1wcmVmaXgiLAorCQkJLyoKKwkJCSAqIENob29zZSBpbmRpY2F0b3JzIHRoYXQgYXJlIG5vdCB1c2VkIGFueXdoZXJlCisJCQkgKiBlbHNlIGluIGRpZmZzLCBidXQgc3RpbGwgbG9vayByZWFzb25hYmxlCisJCQkgKiAoZS5nLiB3aWxsIG5vdCBiZSBjb25mdXNpbmcgd2hlbiBkZWJ1Z2dpbmcpCisJCQkgKi8KKwkJCSItLW91dHB1dC1pbmRpY2F0b3ItbmV3PT4iLAorCQkJIi0tb3V0cHV0LWluZGljYXRvci1vbGQ9PCIsCisJCQkiLS1vdXRwdXQtaW5kaWNhdG9yLWNvbnRleHQ9IyIsCisJCQkiLS1uby1hYmJyZXYtY29tbWl0IiwKKwkJCU5VTEwpOworCWlmIChvdGhlcl9hcmcpCisJCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsIG90aGVyX2FyZy0+YXJndik7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCByYW5nZSk7CisJY3Aub3V0ID0gLTE7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLmdpdF9jbWQgPSAxOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBzdGFydCBgbG9nYCIpKTsKKwlpZiAoc3RyYnVmX3JlYWQoJmNvbnRlbnRzLCBjcC5vdXQsIDApIDwgMCkgeworCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBgbG9nYCBvdXRwdXQiKSk7CisJCWZpbmlzaF9jb21tYW5kKCZjcCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlsaW5lID0gY29udGVudHMuYnVmOworCXNpemUgPSBjb250ZW50cy5sZW47CisJZm9yIChvZmZzZXQgPSAwOyBzaXplID4gMDsgb2Zmc2V0ICs9IGxlbiwgc2l6ZSAtPSBsZW4sIGxpbmUgKz0gbGVuKSB7CisJCWNvbnN0IGNoYXIgKnA7CisKKwkJbGVuID0gZmluZF9lbmRfb2ZfbGluZShsaW5lLCBzaXplKTsKKwkJbGluZVtsZW4gLSAxXSA9ICdcMCc7CisJCWlmIChza2lwX3ByZWZpeChsaW5lLCAiY29tbWl0ICIsICZwKSkgeworCQkJaWYgKHV0aWwpIHsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgYnVmLmJ1ZiktPnV0aWwgPSB1dGlsOworCQkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCX0KKwkJCXV0aWwgPSB4Y2FsbG9jKHNpemVvZigqdXRpbCksIDEpOworCQkJaWYgKGdldF9vaWQocCwgJnV0aWwtPm9pZCkpIHsKKwkJCQllcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciKSwgcCk7CisJCQkJZnJlZSh1dGlsKTsKKwkJCQlzdHJpbmdfbGlzdF9jbGVhcihsaXN0LCAxKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmY29udGVudHMpOworCQkJCWZpbmlzaF9jb21tYW5kKCZjcCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJdXRpbC0+bWF0Y2hpbmcgPSAtMTsKKwkJCWluX2hlYWRlciA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdGFydHNfd2l0aChsaW5lLCAiZGlmZiAtLWdpdCIpKSB7CisJCQlzdHJ1Y3QgcGF0Y2ggcGF0Y2ggPSB7IDAgfTsKKwkJCXN0cnVjdCBzdHJidWYgcm9vdCA9IFNUUkJVRl9JTklUOworCQkJaW50IGxpbmVuciA9IDA7CisKKwkJCWluX2hlYWRlciA9IDA7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJCQlpZiAoIXV0aWwtPmRpZmZfb2Zmc2V0KQorCQkJCXV0aWwtPmRpZmZfb2Zmc2V0ID0gYnVmLmxlbjsKKwkJCWxpbmVbbGVuIC0gMV0gPSAnXG4nOworCQkJbGVuID0gcGFyc2VfZ2l0X2RpZmZfaGVhZGVyKCZyb290LCAmbGluZW5yLCAwLCBsaW5lLAorCQkJCQkJICAgIGxlbiwgc2l6ZSwgJnBhdGNoKTsKKwkJCWlmIChsZW4gPCAwKQorCQkJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgZ2l0IGhlYWRlciAnJS4qcyciKSwgKGludClsZW4sIGxpbmUpOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiICMjICIpOworCQkJaWYgKHBhdGNoLmlzX25ldyA+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+YXJnX2xlbiwKKwkJCQkgICAgdG9kb19pdGVtX2dldF9hcmcob2xkX3RvZG8sIGl0ZW0pKTsKKwkJCSpjb21taXRfc2Vlbl9hdCgmY29tbWl0X3NlZW4sIGNvbW1pdCkgPSAxOworCQl9CisJfQorCisJLyogV2FybiBhYm91dCBtaXNzaW5nIGNvbW1pdHMgKi8KKwlpZiAoIW1pc3NpbmcubGVuKQorCQlnb3RvIGxlYXZlX2NoZWNrOworCisJaWYgKGNoZWNrX2xldmVsID09IE1JU1NJTkdfQ09NTUlUX0NIRUNLX0VSUk9SKQorCQlyZXMgPSAxOworCisJZnByaW50ZihzdGRlcnIsCisJCV8oIldhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LlxuIgorCQkiRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6XG4iKSk7CisKKwkvKiBNYWtlIHRoZSBsaXN0IHVzZXItZnJpZW5kbHkgYW5kIGRpc3BsYXkgKi8KKwlmcHV0cyhtaXNzaW5nLmJ1Ziwgc3RkZXJyKTsKKwlzdHJidWZfcmVsZWFzZSgmbWlzc2luZyk7CisKKwlmcHJpbnRmKHN0ZGVyciwgXygiVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgXCJkcm9wXCIgdG8gIgorCQkiZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuXG5cbiIKKwkJIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlICIKKwkJInRoZSBsZXZlbCBvZiB3YXJuaW5ncy5cbiIKKwkJIlRoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci5cblxuIikpOworCisJZnByaW50ZihzdGRlcnIsIF8oZWRpdF90b2RvX2xpc3RfYWR2aWNlKSk7CisKK2xlYXZlX2NoZWNrOgorCWNsZWFyX2NvbW1pdF9zZWVuKCZjb21taXRfc2Vlbik7CisJcmV0dXJuIHJlczsKK30KKworaW50IHRvZG9fbGlzdF9jaGVja19hZ2FpbnN0X2JhY2t1cChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCXN0cnVjdCB0b2RvX2xpc3QgYmFja3VwID0gVE9ET19MSVNUX0lOSVQ7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYmFja3VwLmJ1ZiwgcmViYXNlX3BhdGhfdG9kb19iYWNrdXAoKSwgMCkgPiAwKSB7CisJCXRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCBiYWNrdXAuYnVmLmJ1ZiwgJmJhY2t1cCk7CisJCXJlcyA9IHRvZG9fbGlzdF9jaGVjaygmYmFja3VwLCB0b2RvX2xpc3QpOworCX0KKworCXRvZG9fbGlzdF9yZWxlYXNlKCZiYWNrdXApOworCXJldHVybiByZXM7Cit9CisKK2ludCBjaGVja190b2RvX2xpc3RfZnJvbV9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCB0b2RvX2xpc3Qgb2xkX3RvZG8gPSBUT0RPX0xJU1RfSU5JVCwgbmV3X3RvZG8gPSBUT0RPX0xJU1RfSU5JVDsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZuZXdfdG9kby5idWYsIHJlYmFzZV9wYXRoX3RvZG8oKSwgMCkgPCAwKSB7CisJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCByZWFkICclcycuIiksIHJlYmFzZV9wYXRoX3RvZG8oKSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZvbGRfdG9kby5idWYsIHJlYmFzZV9wYXRoX3RvZG9fYmFja3VwKCksIDApIDwgMCkgeworCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCAnJXMnLiIpLCByZWJhc2VfcGF0aF90b2RvX2JhY2t1cCgpKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzID0gdG9kb19saXN0X3BhcnNlX2luc25fYnVmZmVyKHIsIG9sZF90b2RvLmJ1Zi5idWYsICZvbGRfdG9kbyk7CisJaWYgKCFyZXMpCisJCXJlcyA9IHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCBuZXdfdG9kby5idWYuYnVmLCAmbmV3X3RvZG8pOworCWlmIChyZXMpCisJCWZwcmludGYoc3RkZXJyLCBfKGVkaXRfdG9kb19saXN0X2FkdmljZSkpOworCWlmICghcmVzKQorCQlyZXMgPSB0b2RvX2xpc3RfY2hlY2soJm9sZF90b2RvLCAmbmV3X3RvZG8pOworb3V0OgorCXRvZG9fbGlzdF9yZWxlYXNlKCZvbGRfdG9kbyk7CisJdG9kb19saXN0X3JlbGVhc2UoJm5ld190b2RvKTsKKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9yZWJhc2UtaW50ZXJhY3RpdmUuaCBiL3JlYmFzZS1pbnRlcmFjdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMmNmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWJhc2UtaW50ZXJhY3RpdmUuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIFJFQkFTRV9JTlRFUkFDVElWRV9ICisjZGVmaW5lIFJFQkFTRV9JTlRFUkFDVElWRV9ICisKK3N0cnVjdCBzdHJidWY7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCB0b2RvX2xpc3Q7CisKK3ZvaWQgYXBwZW5kX3RvZG9faGVscChpbnQgY29tbWFuZF9jb3VudCwKKwkJICAgICAgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsIGNvbnN0IGNoYXIgKnNob3J0b250bywKKwkJICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmKTsKK2ludCBlZGl0X3RvZG9fbGlzdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LAorCQkgICBzdHJ1Y3QgdG9kb19saXN0ICpuZXdfdG9kbywgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsCisJCSAgIGNvbnN0IGNoYXIgKnNob3J0b250bywgdW5zaWduZWQgZmxhZ3MpOworCitpbnQgdG9kb19saXN0X2NoZWNrKHN0cnVjdCB0b2RvX2xpc3QgKm9sZF90b2RvLCBzdHJ1Y3QgdG9kb19saXN0ICpuZXdfdG9kbyk7CitpbnQgdG9kb19saXN0X2NoZWNrX2FnYWluc3RfYmFja3VwKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCk7CisKK2ludCBjaGVja190b2RvX2xpc3RfZnJvbV9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWJhc2UuYyBiL3JlYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTM3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWJhc2UuYwpAQCAtMCwwICsxLDM1IEBACisjaW5jbHVkZSAicmViYXNlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8qCisgKiBQYXJzZXMgdGV4dHVhbCB2YWx1ZSBmb3IgcHVsbC5yZWJhc2UsIGJyYW5jaC48bmFtZT4ucmViYXNlLCBldGMuCisgKiBVbnJlY29nbmlzZWQgdmFsdWUgeWllbGRzIFJFQkFTRV9JTlZBTElELCB3aGljaCB0cmFkaXRpb25hbGx5IGlzCisgKiB0cmVhdGVkIHRoZSBzYW1lIHdheSBhcyBSRUJBU0VfRkFMU0UuCisgKgorICogVGhlIGNhbGxlcnMgdGhhdCBjYXJlIGlmIChhbnkpIHJlYmFzZSBpcyByZXF1ZXN0ZWQgc2hvdWxkIHNheQorICogICBpZiAoUkVCQVNFX1RSVUUgPD0gcmViYXNlX3BhcnNlX3ZhbHVlKHN0cmluZykpCisgKgorICogVGhlIGNhbGxlcnMgdGhhdCB3YW50IHRvIGRpZmZlcmVuY2lhdGUgYW4gdW5yZWNvZ25pc2VkIHZhbHVlIGFuZAorICogZmFsc2UgY2FuIGRvIHNvIGJ5IHRyZWF0aW5nIF9JTlZBTElEIGFuZCBfRkFMU0UgZGlmZmVyZW50bHkuCisgKi8KK2VudW0gcmViYXNlX3R5cGUgcmViYXNlX3BhcnNlX3ZhbHVlKGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCB2ID0gZ2l0X3BhcnNlX21heWJlX2Jvb2wodmFsdWUpOworCisJaWYgKCF2KQorCQlyZXR1cm4gUkVCQVNFX0ZBTFNFOworCWVsc2UgaWYgKHYgPiAwKQorCQlyZXR1cm4gUkVCQVNFX1RSVUU7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInByZXNlcnZlIikgfHwgIXN0cmNtcCh2YWx1ZSwgInAiKSkKKwkJcmV0dXJuIFJFQkFTRV9QUkVTRVJWRTsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibWVyZ2VzIikgfHwgIXN0cmNtcCh2YWx1ZSwgIm0iKSkKKwkJcmV0dXJuIFJFQkFTRV9NRVJHRVM7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImludGVyYWN0aXZlIikgfHwgIXN0cmNtcCh2YWx1ZSwgImkiKSkKKwkJcmV0dXJuIFJFQkFTRV9JTlRFUkFDVElWRTsKKwkvKgorCSAqIFBsZWFzZSB1cGRhdGUgX2dpdF9jb25maWcoKSBpbiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91CisJICogYWRkIG5ldyByZWJhc2UgbW9kZXMuCisJICovCisKKwlyZXR1cm4gUkVCQVNFX0lOVkFMSUQ7Cit9CmRpZmYgLS1naXQgYS9yZWJhc2UuaCBiL3JlYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNzIzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWJhc2UuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIFJFQkFTRV9ICisjZGVmaW5lIFJFQkFTRV9ICisKK2VudW0gcmViYXNlX3R5cGUgeworCVJFQkFTRV9JTlZBTElEID0gLTEsCisJUkVCQVNFX0ZBTFNFID0gMCwKKwlSRUJBU0VfVFJVRSwKKwlSRUJBU0VfUFJFU0VSVkUsCisJUkVCQVNFX01FUkdFUywKKwlSRUJBU0VfSU5URVJBQ1RJVkUKK307CisKK2VudW0gcmViYXNlX3R5cGUgcmViYXNlX3BhcnNlX3ZhbHVlKGNvbnN0IGNoYXIgKnZhbHVlKTsKKworI2VuZGlmIC8qIFJFQkFTRSAqLwpkaWZmIC0tZ2l0IGEvcmVmLWZpbHRlci5jIGIvcmVmLWZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODEyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9yZWYtZmlsdGVyLmMKQEAgLTAsMCArMSwyNTA4IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJlZi1maWx0ZXIuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAidHJhaWxlci5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgImNvbW1pdC1zbGFiLmgiCisjaW5jbHVkZSAiY29tbWl0LWdyYXBoLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitzdGF0aWMgc3RydWN0IHJlZl9tc2cgeworCWNvbnN0IGNoYXIgKmdvbmU7CisJY29uc3QgY2hhciAqYWhlYWQ7CisJY29uc3QgY2hhciAqYmVoaW5kOworCWNvbnN0IGNoYXIgKmFoZWFkX2JlaGluZDsKK30gbXNncyA9IHsKKwkgLyogVW50cmFuc2xhdGVkIHBsdW1iaW5nIG1lc3NhZ2VzOiAqLworCSJnb25lIiwKKwkiYWhlYWQgJWQiLAorCSJiZWhpbmQgJWQiLAorCSJhaGVhZCAlZCwgYmVoaW5kICVkIgorfTsKKwordm9pZCBzZXR1cF9yZWZfZmlsdGVyX3BvcmNlbGFpbl9tc2codm9pZCkKK3sKKwltc2dzLmdvbmUgPSBfKCJnb25lIik7CisJbXNncy5haGVhZCA9IF8oImFoZWFkICVkIik7CisJbXNncy5iZWhpbmQgPSBfKCJiZWhpbmQgJWQiKTsKKwltc2dzLmFoZWFkX2JlaGluZCA9IF8oImFoZWFkICVkLCBiZWhpbmQgJWQiKTsKK30KKwordHlwZWRlZiBlbnVtIHsgRklFTERfU1RSLCBGSUVMRF9VTE9ORywgRklFTERfVElNRSB9IGNtcF90eXBlOwordHlwZWRlZiBlbnVtIHsgQ09NUEFSRV9FUVVBTCwgQ09NUEFSRV9VTkVRVUFMLCBDT01QQVJFX05PTkUgfSBjbXBfc3RhdHVzOwordHlwZWRlZiBlbnVtIHsgU09VUkNFX05PTkUgPSAwLCBTT1VSQ0VfT0JKLCBTT1VSQ0VfT1RIRVIgfSBpbmZvX3NvdXJjZTsKKworc3RydWN0IGFsaWduIHsKKwlhbGlnbl90eXBlIHBvc2l0aW9uOworCXVuc2lnbmVkIGludCB3aWR0aDsKK307CisKK3N0cnVjdCBpZl90aGVuX2Vsc2UgeworCWNtcF9zdGF0dXMgY21wX3N0YXR1czsKKwljb25zdCBjaGFyICpzdHI7CisJdW5zaWduZWQgaW50IHRoZW5fYXRvbV9zZWVuIDogMSwKKwkJZWxzZV9hdG9tX3NlZW4gOiAxLAorCQljb25kaXRpb25fc2F0aXNmaWVkIDogMTsKK307CisKK3N0cnVjdCByZWZuYW1lX2F0b20geworCWVudW0geyBSX05PUk1BTCwgUl9TSE9SVCwgUl9MU1RSSVAsIFJfUlNUUklQIH0gb3B0aW9uOworCWludCBsc3RyaXAsIHJzdHJpcDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXhwYW5kX2RhdGEgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJb2ZmX3QgZGlza19zaXplOworCXN0cnVjdCBvYmplY3RfaWQgZGVsdGFfYmFzZV9vaWQ7CisJdm9pZCAqY29udGVudDsKKworCXN0cnVjdCBvYmplY3RfaW5mbyBpbmZvOworfSBvaSwgb2lfZGVyZWY7CisKK3N0cnVjdCByZWZfdG9fd29ya3RyZWVfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwlzdHJ1Y3Qgd29ya3RyZWUgKnd0OyAvKiBrZXkgaXMgd3QtPmhlYWRfcmVmICovCit9OworCitzdGF0aWMgaW50IHJlZl90b193b3JrdHJlZV9tYXBfY21wZm5jKGNvbnN0IHZvaWQgKnVudXNlZF9sb29rdXBkYXRhLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICprcHRyLAorCQkJCSAgICAgIGNvbnN0IHZvaWQgKmtleWRhdGFfYWthX3JlZm5hbWUpCit7CisJY29uc3Qgc3RydWN0IHJlZl90b193b3JrdHJlZV9lbnRyeSAqZSwgKms7CisKKwllID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCByZWZfdG9fd29ya3RyZWVfZW50cnksIGVudCk7CisJayA9IGNvbnRhaW5lcl9vZihrcHRyLCBjb25zdCBzdHJ1Y3QgcmVmX3RvX3dvcmt0cmVlX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHN0cmNtcChlLT53dC0+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+aWdub3JlX2Nhc2UpIHsKKwkJLyoKKwkJICogd2UgY2FuJ3QgaGFuZGxlIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbnMsCisJCSAqIHNvIGp1c3QgcmV0dXJuIGV2ZXJ5dGhpbmcgYW5kIGxldCB0aGUgY2FsbGVyCisJCSAqIHNvcnQgaXQgb3V0LgorCQkgKi8KKwkJcmV0dXJuIGZvcl9lYWNoX2Z1bGxyZWZfaW4oIiIsIGNiLCBjYl9kYXRhLCBicm9rZW4pOworCX0KKworCWlmICghZmlsdGVyLT5uYW1lX3BhdHRlcm5zWzBdKSB7CisJCS8qIG5vIHBhdHRlcm5zOyB3ZSBoYXZlIHRvIGxvb2sgYXQgZXZlcnl0aGluZyAqLworCQlyZXR1cm4gZm9yX2VhY2hfZnVsbHJlZl9pbigiIiwgY2IsIGNiX2RhdGEsIGJyb2tlbik7CisJfQorCisJZmluZF9sb25nZXN0X3ByZWZpeGVzKCZwcmVmaXhlcywgZmlsdGVyLT5uYW1lX3BhdHRlcm5zKTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0ocHJlZml4LCAmcHJlZml4ZXMpIHsKKwkJcmV0ID0gZm9yX2VhY2hfZnVsbHJlZl9pbihwcmVmaXgtPnN0cmluZywgY2IsIGNiX2RhdGEsIGJyb2tlbik7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmcHJlZml4ZXMsIDApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIHJlZiAoc2hhMSwgcmVmbmFtZSksIGNoZWNrIGlmIHRoZSByZWYgYmVsb25ncyB0byB0aGUgYXJyYXkKKyAqIG9mIHNoYTFzLiBJZiB0aGUgZ2l2ZW4gcmVmIGlzIGEgdGFnLCBjaGVjayBpZiB0aGUgZ2l2ZW4gdGFnIHBvaW50cworICogYXQgb25lIG9mIHRoZSBzaGExcyBpbiB0aGUgZ2l2ZW4gc2hhMSBhcnJheS4KKyAqIHRoZSBnaXZlbiBzaGExX2FycmF5LgorICogTkVFRFNXT1JLOgorICogMS4gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBpbmRlcmVjdGlvbiBpcyBvYnRhaW5lZCwgd2UgbWlnaHQgd2FudCB0bworICogY2hhbmdlIHRoaXMgdG8gYWNjb3VudCBmb3IgbXVsdGlwbGUgbGV2ZWxzIChlLmcuIGFubm90YXRlZCB0YWdzCisgKiBwb2ludGluZyB0byBhbm5vdGF0ZWQgdGFncyBwb2ludGluZyB0byBhIGNvbW1pdC4pCisgKiAyLiBBcyB0aGUgcmVmcyBhcmUgY2FjaGVkIHdlIG1pZ2h0IGtub3cgd2hhdCByZWZuYW1lIHBlZWxzIHRvIHdpdGhvdXQKKyAqIHRoZSBuZWVkIHRvIHBhcnNlIHRoZSBvYmplY3QgdmlhIHBhcnNlX29iamVjdCgpLiBwZWVsX3JlZigpIG1pZ2h0IGJlIGEKKyAqIG1vcmUgZWZmaWNpZW50IGFsdGVybmF0aXZlIHRvIG9idGFpbiB0aGUgcG9pbnRlZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm1hdGNoX3BvaW50c19hdChzdHJ1Y3Qgb2lkX2FycmF5ICpwb2ludHNfYXQsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJCSAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRhZ2dlZF9vaWQgPSBOVUxMOworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCWlmIChvaWRfYXJyYXlfbG9va3VwKHBvaW50c19hdCwgb2lkKSA+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+dmFsdWUpCisJCQljbXAgPSBjbXBfZm4oYS0+cmVmbmFtZSwgYi0+cmVmbmFtZSk7CisJCWVsc2UKKwkJCWNtcCA9IDE7CisJfQorCisJcmV0dXJuIChzLT5yZXZlcnNlKSA/IC1jbXAgOiBjbXA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9yZWZzKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXywgdm9pZCAqcmVmX3NvcnRpbmcpCit7CisJc3RydWN0IHJlZl9hcnJheV9pdGVtICphID0gKigoc3RydWN0IHJlZl9hcnJheV9pdGVtICoqKWFfKTsKKwlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKmIgPSAqKChzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKiopYl8pOworCXN0cnVjdCByZWZfc29ydGluZyAqczsKKworCWZvciAocyA9IHJlZl9zb3J0aW5nOyBzOyBzID0gcy0+bmV4dCkgeworCQlpbnQgY21wID0gY21wX3JlZl9zb3J0aW5nKHMsIGEsIGIpOworCQlpZiAoY21wKQorCQkJcmV0dXJuIGNtcDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVmX2FycmF5X3NvcnQoc3RydWN0IHJlZl9zb3J0aW5nICpzb3J0aW5nLCBzdHJ1Y3QgcmVmX2FycmF5ICphcnJheSkKK3sKKwlRU09SVF9TKGFycmF5LT5pdGVtcywgYXJyYXktPm5yLCBjb21wYXJlX3JlZnMsIHNvcnRpbmcpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbGl0ZXJhbChjb25zdCBjaGFyICpjcCwgY29uc3QgY2hhciAqZXAsIHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0cmJ1ZiAqcyA9ICZzdGF0ZS0+c3RhY2stPm91dHB1dDsKKworCXdoaWxlICgqY3AgJiYgKCFlcCB8fCBjcCA8IGVwKSkgeworCQlpZiAoKmNwID09ICclJykgeworCQkJaWYgKGNwWzFdID09ICclJykKKwkJCQljcCsrOworCQkJZWxzZSB7CisJCQkJaW50IGNoID0gaGV4MmNocihjcCArIDEpOworCQkJCWlmICgwIDw9IGNoKSB7CisJCQkJCXN0cmJ1Zl9hZGRjaChzLCBjaCk7CisJCQkJCWNwICs9IDM7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlzdHJidWZfYWRkY2gocywgKmNwKTsKKwkJY3ArKzsKKwl9Cit9CisKK2ludCBmb3JtYXRfcmVmX2FycmF5X2l0ZW0oc3RydWN0IHJlZl9hcnJheV9pdGVtICppbmZvLAorCQkJICAgY29uc3Qgc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKmZpbmFsX2J1ZiwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKmVycm9yX2J1ZikKK3sKKwljb25zdCBjaGFyICpjcCwgKnNwLCAqZXA7CisJc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YXRlIHN0YXRlID0gUkVGX0ZPUk1BVFRJTkdfU1RBVEVfSU5JVDsKKworCXN0YXRlLnF1b3RlX3N0eWxlID0gZm9ybWF0LT5xdW90ZV9zdHlsZTsKKwlwdXNoX3N0YWNrX2VsZW1lbnQoJnN0YXRlLnN0YWNrKTsKKworCWZvciAoY3AgPSBmb3JtYXQtPmZvcm1hdDsgKmNwICYmIChzcCA9IGZpbmRfbmV4dChjcCkpOyBjcCA9IGVwICsgMSkgeworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqYXRvbXY7CisJCWludCBwb3M7CisKKwkJZXAgPSBzdHJjaHIoc3AsICcpJyk7CisJCWlmIChjcCA8IHNwKQorCQkJYXBwZW5kX2xpdGVyYWwoY3AsIHNwLCAmc3RhdGUpOworCQlwb3MgPSBwYXJzZV9yZWZfZmlsdGVyX2F0b20oZm9ybWF0LCBzcCArIDIsIGVwLCBlcnJvcl9idWYpOworCQlpZiAocG9zIDwgMCB8fCBnZXRfcmVmX2F0b21fdmFsdWUoaW5mbywgcG9zLCAmYXRvbXYsIGVycm9yX2J1ZikgfHwKKwkJICAgIGF0b212LT5oYW5kbGVyKGF0b212LCAmc3RhdGUsIGVycm9yX2J1ZikpIHsKKwkJCXBvcF9zdGFja19lbGVtZW50KCZzdGF0ZS5zdGFjayk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKCpjcCkgeworCQlzcCA9IGNwICsgc3RybGVuKGNwKTsKKwkJYXBwZW5kX2xpdGVyYWwoY3AsIHNwLCAmc3RhdGUpOworCX0KKwlpZiAoZm9ybWF0LT5uZWVkX2NvbG9yX3Jlc2V0X2F0X2VvbCkgeworCQlzdHJ1Y3QgYXRvbV92YWx1ZSByZXNldHY7CisJCXJlc2V0di5zID0gR0lUX0NPTE9SX1JFU0VUOworCQlpZiAoYXBwZW5kX2F0b20oJnJlc2V0diwgJnN0YXRlLCBlcnJvcl9idWYpKSB7CisJCQlwb3Bfc3RhY2tfZWxlbWVudCgmc3RhdGUuc3RhY2spOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCWlmIChzdGF0ZS5zdGFjay0+cHJldikgeworCQlwb3Bfc3RhY2tfZWxlbWVudCgmc3RhdGUuc3RhY2spOworCQlyZXR1cm4gc3RyYnVmX2FkZGZfcmV0KGVycm9yX2J1ZiwgLTEsIF8oImZvcm1hdDogJSUoZW5kKSBhdG9tIG1pc3NpbmciKSk7CisJfQorCXN0cmJ1Zl9hZGRidWYoZmluYWxfYnVmLCAmc3RhdGUuc3RhY2stPm91dHB1dCk7CisJcG9wX3N0YWNrX2VsZW1lbnQoJnN0YXRlLnN0YWNrKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzaG93X3JlZl9hcnJheV9pdGVtKHN0cnVjdCByZWZfYXJyYXlfaXRlbSAqaW5mbywKKwkJCSBjb25zdCBzdHJ1Y3QgcmVmX2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVjdCBzdHJidWYgZmluYWxfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBlcnJvcl9idWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChmb3JtYXRfcmVmX2FycmF5X2l0ZW0oaW5mbywgZm9ybWF0LCAmZmluYWxfYnVmLCAmZXJyb3JfYnVmKSkKKwkJZGllKCIlcyIsIGVycm9yX2J1Zi5idWYpOworCWZ3cml0ZShmaW5hbF9idWYuYnVmLCAxLCBmaW5hbF9idWYubGVuLCBzdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnJvcl9idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZmaW5hbF9idWYpOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3ZvaWQgcHJldHR5X3ByaW50X3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQpCit7CisJc3RydWN0IHJlZl9hcnJheV9pdGVtICpyZWZfaXRlbTsKKwlyZWZfaXRlbSA9IG5ld19yZWZfYXJyYXlfaXRlbShuYW1lLCBvaWQpOworCXJlZl9pdGVtLT5raW5kID0gcmVmX2tpbmRfZnJvbV9yZWZuYW1lKG5hbWUpOworCXNob3dfcmVmX2FycmF5X2l0ZW0ocmVmX2l0ZW0sIGZvcm1hdCk7CisJZnJlZV9hcnJheV9pdGVtKHJlZl9pdGVtKTsKK30KKworc3RhdGljIGludCBwYXJzZV9zb3J0aW5nX2F0b20oY29uc3QgY2hhciAqYXRvbSkKK3sKKwkvKgorCSAqIFRoaXMgcGFyc2VzIGFuIGF0b20gdXNpbmcgYSBkdW1teSByZWZfZm9ybWF0LCBzaW5jZSB3ZSBkb24ndAorCSAqIGFjdHVhbGx5IGNhcmUgYWJvdXQgdGhlIGZvcm1hdHRpbmcgZGV0YWlscy4KKwkgKi8KKwlzdHJ1Y3QgcmVmX2Zvcm1hdCBkdW1teSA9IFJFRl9GT1JNQVRfSU5JVDsKKwljb25zdCBjaGFyICplbmQgPSBhdG9tICsgc3RybGVuKGF0b20pOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlcyA9IHBhcnNlX3JlZl9maWx0ZXJfYXRvbSgmZHVtbXksIGF0b20sIGVuZCwgJmVycik7CisJaWYgKHJlcyA8IDApCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlyZXR1cm4gcmVzOworfQorCisvKiAgSWYgbm8gc29ydGluZyBvcHRpb24gaXMgZ2l2ZW4sIHVzZSByZWZuYW1lIHRvIHNvcnQgYXMgZGVmYXVsdCAqLworc3RydWN0IHJlZl9zb3J0aW5nICpyZWZfZGVmYXVsdF9zb3J0aW5nKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgY3N0cl9uYW1lW10gPSAicmVmbmFtZSI7CisKKwlzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcgPSB4Y2FsbG9jKDEsIHNpemVvZigqc29ydGluZykpOworCisJc29ydGluZy0+bmV4dCA9IE5VTEw7CisJc29ydGluZy0+YXRvbSA9IHBhcnNlX3NvcnRpbmdfYXRvbShjc3RyX25hbWUpOworCXJldHVybiBzb3J0aW5nOworfQorCit2b2lkIHBhcnNlX3JlZl9zb3J0aW5nKHN0cnVjdCByZWZfc29ydGluZyAqKnNvcnRpbmdfdGFpbCwgY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCByZWZfc29ydGluZyAqczsKKworCXMgPSB4Y2FsbG9jKDEsIHNpemVvZigqcykpOworCXMtPm5leHQgPSAqc29ydGluZ190YWlsOworCSpzb3J0aW5nX3RhaWwgPSBzOworCisJaWYgKCphcmcgPT0gJy0nKSB7CisJCXMtPnJldmVyc2UgPSAxOworCQlhcmcrKzsKKwl9CisJaWYgKHNraXBfcHJlZml4KGFyZywgInZlcnNpb246IiwgJmFyZykgfHwKKwkgICAgc2tpcF9wcmVmaXgoYXJnLCAidjoiLCAmYXJnKSkKKwkJcy0+dmVyc2lvbiA9IDE7CisJcy0+YXRvbSA9IHBhcnNlX3NvcnRpbmdfYXRvbShhcmcpOworfQorCitpbnQgcGFyc2Vfb3B0X3JlZl9zb3J0aW5nKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJLyoKKwkgKiBORUVEU1dPUks6IFdlIHNob3VsZCBwcm9iYWJseSBjbGVhciB0aGUgbGlzdCBpbiB0aGlzIGNhc2UsIGJ1dCB3ZSd2ZQorCSAqIGFscmVhZHkgbXVuZ2VkIHRoZSBnbG9iYWwgdXNlZF9hdG9tcyBsaXN0LCB3aGljaCB3b3VsZCBuZWVkIHRvIGJlCisJICogdW5kb25lLgorCSAqLworCUJVR19PTl9PUFRfTkVHKHVuc2V0KTsKKworCXBhcnNlX3JlZl9zb3J0aW5nKG9wdC0+dmFsdWUsIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfbWVyZ2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHJlZl9maWx0ZXIgKnJmID0gb3B0LT52YWx1ZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgbm9fbWVyZ2VkID0gc3RhcnRzX3dpdGgob3B0LT5sb25nX25hbWUsICJubyIpOworCisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCisJaWYgKHJmLT5tZXJnZSkgeworCQlpZiAobm9fbWVyZ2VkKSB7CisJCQlyZXR1cm4gZXJyb3IoXygib3B0aW9uIGAlcycgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1tZXJnZWQiKSwKKwkJCQkgICAgIG9wdC0+bG9uZ19uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBlcnJvcihfKCJvcHRpb24gYCVzJyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLW1lcmdlZCIpLAorCQkJCSAgICAgb3B0LT5sb25nX25hbWUpOworCQl9CisJfQorCisJcmYtPm1lcmdlID0gbm9fbWVyZ2VkCisJCT8gUkVGX0ZJTFRFUl9NRVJHRURfT01JVAorCQk6IFJFRl9GSUxURVJfTUVSR0VEX0lOQ0xVREU7CisKKwlpZiAoZ2V0X29pZChhcmcsICZvaWQpKQorCQlkaWUoXygibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIiksIGFyZyk7CisKKwlyZi0+bWVyZ2VfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSAgJm9pZCwgMCk7CisJaWYgKCFyZi0+bWVyZ2VfY29tbWl0KQorCQlyZXR1cm4gZXJyb3IoXygib3B0aW9uIGAlcycgbXVzdCBwb2ludCB0byBhIGNvbW1pdCIpLCBvcHQtPmxvbmdfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlZi1maWx0ZXIuaCBiL3JlZi1maWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWRjZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVmLWZpbHRlci5oCkBAIC0wLDAgKzEsMTUyIEBACisjaWZuZGVmIFJFRl9GSUxURVJfSAorI2RlZmluZSBSRUZfRklMVEVSX0gKKworI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisvKiBRdW90aW5nIHN0eWxlcyAqLworI2RlZmluZSBRVU9URV9OT05FIDAKKyNkZWZpbmUgUVVPVEVfU0hFTEwgMQorI2RlZmluZSBRVU9URV9QRVJMIDIKKyNkZWZpbmUgUVVPVEVfUFlUSE9OIDQKKyNkZWZpbmUgUVVPVEVfVENMIDgKKworI2RlZmluZSBGSUxURVJfUkVGU19JTkNMVURFX0JST0tFTiAweDAwMDEKKyNkZWZpbmUgRklMVEVSX1JFRlNfVEFHUyAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEZJTFRFUl9SRUZTX0JSQU5DSEVTICAgICAgIDB4MDAwNAorI2RlZmluZSBGSUxURVJfUkVGU19SRU1PVEVTICAgICAgICAweDAwMDgKKyNkZWZpbmUgRklMVEVSX1JFRlNfT1RIRVJTICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEZJTFRFUl9SRUZTX0FMTCAgICAgICAgICAgIChGSUxURVJfUkVGU19UQUdTIHwgRklMVEVSX1JFRlNfQlJBTkNIRVMgfCBcCisJCQkJICAgIEZJTFRFUl9SRUZTX1JFTU9URVMgfCBGSUxURVJfUkVGU19PVEhFUlMpCisjZGVmaW5lIEZJTFRFUl9SRUZTX0RFVEFDSEVEX0hFQUQgIDB4MDAyMAorI2RlZmluZSBGSUxURVJfUkVGU19LSU5EX01BU0sgICAgICAoRklMVEVSX1JFRlNfQUxMIHwgRklMVEVSX1JFRlNfREVUQUNIRURfSEVBRCkKKworc3RydWN0IGF0b21fdmFsdWU7CisKK3N0cnVjdCByZWZfc29ydGluZyB7CisJc3RydWN0IHJlZl9zb3J0aW5nICpuZXh0OworCWludCBhdG9tOyAvKiBpbmRleCBpbnRvIHVzZWRfYXRvbSBhcnJheSAoaW50ZXJuYWwpICovCisJdW5zaWduZWQgcmV2ZXJzZSA6IDEsCisJCWlnbm9yZV9jYXNlIDogMSwKKwkJdmVyc2lvbiA6IDE7Cit9OworCitzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0geworCXN0cnVjdCBvYmplY3RfaWQgb2JqZWN0bmFtZTsKKwlpbnQgZmxhZzsKKwl1bnNpZ25lZCBpbnQga2luZDsKKwljb25zdCBjaGFyICpzeW1yZWY7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBhdG9tX3ZhbHVlICp2YWx1ZTsKKwljaGFyIHJlZm5hbWVbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgcmVmX2FycmF5IHsKKwlpbnQgbnIsIGFsbG9jOworCXN0cnVjdCByZWZfYXJyYXlfaXRlbSAqKml0ZW1zOworCXN0cnVjdCByZXZfaW5mbyAqcmV2czsKK307CisKK3N0cnVjdCByZWZfZmlsdGVyIHsKKwljb25zdCBjaGFyICoqbmFtZV9wYXR0ZXJuczsKKwlzdHJ1Y3Qgb2lkX2FycmF5IHBvaW50c19hdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKndpdGhfY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqbm9fY29tbWl0OworCisJZW51bSB7CisJCVJFRl9GSUxURVJfTUVSR0VEX05PTkUgPSAwLAorCQlSRUZfRklMVEVSX01FUkdFRF9JTkNMVURFLAorCQlSRUZfRklMVEVSX01FUkdFRF9PTUlUCisJfSBtZXJnZTsKKwlzdHJ1Y3QgY29tbWl0ICptZXJnZV9jb21taXQ7CisKKwl1bnNpZ25lZCBpbnQgd2l0aF9jb21taXRfdGFnX2FsZ28gOiAxLAorCQltYXRjaF9hc19wYXRoIDogMSwKKwkJaWdub3JlX2Nhc2UgOiAxLAorCQlkZXRhY2hlZCA6IDE7CisJdW5zaWduZWQgaW50IGtpbmQsCisJCWxpbmVzOworCWludCBhYmJyZXYsCisJCXZlcmJvc2U7Cit9OworCitzdHJ1Y3QgcmVmX2Zvcm1hdCB7CisJLyoKKwkgKiBTZXQgdGhlc2UgdG8gZGVmaW5lIHRoZSBmb3JtYXQ7IG1ha2Ugc3VyZSB5b3UgY2FsbAorCSAqIHZlcmlmeV9yZWZfZm9ybWF0KCkgYWZ0ZXJ3YXJkcyB0byBmaW5hbGl6ZS4KKwkgKi8KKwljb25zdCBjaGFyICpmb3JtYXQ7CisJaW50IHF1b3RlX3N0eWxlOworCWludCB1c2VfY29sb3I7CisKKwkvKiBJbnRlcm5hbCBzdGF0ZSB0byByZWYtZmlsdGVyICovCisJaW50IG5lZWRfY29sb3JfcmVzZXRfYXRfZW9sOworfTsKKworI2RlZmluZSBSRUZfRk9STUFUX0lOSVQgeyBOVUxMLCAwLCAtMSB9CisKKy8qICBNYWNyb3MgZm9yIGNoZWNraW5nIC0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zICovCisjZGVmaW5lIF9PUFRfTUVSR0VEX05PX01FUkdFRChvcHRpb24sIGZpbHRlciwgaCkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCBvcHRpb24sIChmaWx0ZXIpLCBOXygiY29tbWl0IiksIChoKSwgXAorCSAgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCB8IFBBUlNFX09QVF9OT05FRywgXAorCSAgcGFyc2Vfb3B0X21lcmdlX2ZpbHRlciwgKGludHB0cl90KSAiSEVBRCIgXAorCX0KKyNkZWZpbmUgT1BUX01FUkdFRChmLCBoKSBfT1BUX01FUkdFRF9OT19NRVJHRUQoIm1lcmdlZCIsIGYsIGgpCisjZGVmaW5lIE9QVF9OT19NRVJHRUQoZiwgaCkgX09QVF9NRVJHRURfTk9fTUVSR0VEKCJuby1tZXJnZWQiLCBmLCBoKQorCisjZGVmaW5lIE9QVF9SRUZfU09SVCh2YXIpIFwKKwlPUFRfQ0FMTEJBQ0tfRigwLCAic29ydCIsICh2YXIpLCBcCisJCSAgICAgICBOXygia2V5IiksIE5fKCJmaWVsZCBuYW1lIHRvIHNvcnQgb24iKSwgXAorCQkgICAgICAgUEFSU0VfT1BUX05PTkVHLCBwYXJzZV9vcHRfcmVmX3NvcnRpbmcpCisKKy8qCisgKiBBUEkgZm9yIGZpbHRlcmluZyBhIHNldCBvZiByZWZzLiBCYXNlZCBvbiB0aGUgdHlwZSBvZiByZWZzIHRoZSB1c2VyCisgKiBoYXMgcmVxdWVzdGVkLCB3ZSBpdGVyYXRlIHRocm91Z2ggdGhvc2UgcmVmcyBhbmQgYXBwbHkgZmlsdGVycworICogYXMgcGVyIHRoZSBnaXZlbiByZWZfZmlsdGVyIHN0cnVjdHVyZSBhbmQgZmluYWxseSBzdG9yZSB0aGUKKyAqIGZpbHRlcmVkIHJlZnMgaW4gdGhlIHJlZl9hcnJheSBzdHJ1Y3R1cmUuCisgKi8KK2ludCBmaWx0ZXJfcmVmcyhzdHJ1Y3QgcmVmX2FycmF5ICphcnJheSwgc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgdW5zaWduZWQgaW50IHR5cGUpOworLyogIENsZWFyIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHRvIHJlZl9hcnJheSAqLwordm9pZCByZWZfYXJyYXlfY2xlYXIoc3RydWN0IHJlZl9hcnJheSAqYXJyYXkpOworLyogIFVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBnaXZlbiBmb3JtYXQgaXMgY29ycmVjdCBhbmQgdG8gcGFyc2Ugb3V0IHRoZSB1c2VkIGF0b21zICovCitpbnQgdmVyaWZ5X3JlZl9mb3JtYXQoc3RydWN0IHJlZl9mb3JtYXQgKmZvcm1hdCk7CisvKiAgU29ydCB0aGUgZ2l2ZW4gcmVmX2FycmF5IGFzIHBlciB0aGUgcmVmX3NvcnRpbmcgcHJvdmlkZWQgKi8KK3ZvaWQgcmVmX2FycmF5X3NvcnQoc3RydWN0IHJlZl9zb3J0aW5nICpzb3J0LCBzdHJ1Y3QgcmVmX2FycmF5ICphcnJheSk7CisvKiAgQmFzZWQgb24gdGhlIGdpdmVuIGZvcm1hdCBhbmQgcXVvdGVfc3R5bGUsIGZpbGwgdGhlIHN0cmJ1ZiAqLworaW50IGZvcm1hdF9yZWZfYXJyYXlfaXRlbShzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKmluZm8sCisJCQkgIGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQsCisJCQkgIHN0cnVjdCBzdHJidWYgKmZpbmFsX2J1ZiwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqZXJyb3JfYnVmKTsKKy8qICBQcmludCB0aGUgcmVmIHVzaW5nIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHF1b3RlX3N0eWxlICovCit2b2lkIHNob3dfcmVmX2FycmF5X2l0ZW0oc3RydWN0IHJlZl9hcnJheV9pdGVtICppbmZvLCBjb25zdCBzdHJ1Y3QgcmVmX2Zvcm1hdCAqZm9ybWF0KTsKKy8qICBQYXJzZSBhIHNpbmdsZSBzb3J0IHNwZWNpZmllciBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0ICovCit2b2lkIHBhcnNlX3JlZl9zb3J0aW5nKHN0cnVjdCByZWZfc29ydGluZyAqKnNvcnRpbmdfdGFpbCwgY29uc3QgY2hhciAqYXRvbSk7CisvKiAgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHBhcnNpbmcgdGhlIHNvcnQgb3B0aW9uICovCitpbnQgcGFyc2Vfb3B0X3JlZl9zb3J0aW5nKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworLyogIERlZmF1bHQgc29ydCBvcHRpb24gYmFzZWQgb24gcmVmbmFtZSAqLworc3RydWN0IHJlZl9zb3J0aW5nICpyZWZfZGVmYXVsdF9zb3J0aW5nKHZvaWQpOworLyogIEZ1bmN0aW9uIHRvIHBhcnNlIC0tbWVyZ2VkIGFuZCAtLW5vLW1lcmdlZCBvcHRpb25zICovCitpbnQgcGFyc2Vfb3B0X21lcmdlX2ZpbHRlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KTsKKy8qICBHZXQgdGhlIGN1cnJlbnQgSEVBRCdzIGRlc2NyaXB0aW9uICovCitjaGFyICpnZXRfaGVhZF9kZXNjcmlwdGlvbih2b2lkKTsKKy8qICBTZXQgdXAgdHJhbnNsYXRlZCBzdHJpbmdzIGluIHRoZSBvdXRwdXQuICovCit2b2lkIHNldHVwX3JlZl9maWx0ZXJfcG9yY2VsYWluX21zZyh2b2lkKTsKKworLyoKKyAqIFByaW50IGEgc2luZ2xlIHJlZiwgb3V0c2lkZSBvZiBhbnkgcmVmLWZpbHRlci4gTm90ZSB0aGF0IHRoZQorICogbmFtZSBtdXN0IGJlIGEgZnVsbHkgcXVhbGlmaWVkIHJlZm5hbWUuCisgKi8KK3ZvaWQgcHJldHR5X3ByaW50X3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCByZWZfZm9ybWF0ICpmb3JtYXQpOworCisvKgorICogUHVzaCBhIHNpbmdsZSByZWYgb250byB0aGUgYXJyYXk7IHRoaXMgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IHlvdXIgb3duCisgKiByZWZfYXJyYXkgd2l0aG91dCB1c2luZyBmaWx0ZXJfcmVmcygpLgorICovCitzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZl9hcnJheV9wdXNoKHN0cnVjdCByZWZfYXJyYXkgKmFycmF5LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworI2VuZGlmIC8qICBSRUZfRklMVEVSX0ggICovCmRpZmYgLS1naXQgYS9yZWZsb2ctd2Fsay5jIGIvcmVmbG9nLXdhbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTI1YjI3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVmbG9nLXdhbGsuYwpAQCAtMCwwICsxLDM0OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKworc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgeworCWNoYXIgKnJlZjsKKwljb25zdCBjaGFyICpzaG9ydF9yZWY7CisJc3RydWN0IHJlZmxvZ19pbmZvIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvb2lkLCBub2lkOworCQljaGFyICplbWFpbDsKKwkJdGltZXN0YW1wX3QgdGltZXN0YW1wOworCQlpbnQgdHo7CisJCWNoYXIgKm1lc3NhZ2U7CisJfSAqaXRlbXM7CisJaW50IG5yLCBhbGxvYzsKK307CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfcmVmbG9nKHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5vaWQsCisJCWNvbnN0IGNoYXIgKmVtYWlsLCB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGludCB0eiwKKwkJY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqYXJyYXkgPSBjYl9kYXRhOworCXN0cnVjdCByZWZsb2dfaW5mbyAqaXRlbTsKKworCUFMTE9DX0dST1coYXJyYXktPml0ZW1zLCBhcnJheS0+bnIgKyAxLCBhcnJheS0+YWxsb2MpOworCWl0ZW0gPSBhcnJheS0+aXRlbXMgKyBhcnJheS0+bnI7CisJb2lkY3B5KCZpdGVtLT5vb2lkLCBvb2lkKTsKKwlvaWRjcHkoJml0ZW0tPm5vaWQsIG5vaWQpOworCWl0ZW0tPmVtYWlsID0geHN0cmR1cChlbWFpbCk7CisJaXRlbS0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCWl0ZW0tPnR6ID0gdHo7CisJaXRlbS0+bWVzc2FnZSA9IHhzdHJkdXAobWVzc2FnZSk7CisJYXJyYXktPm5yKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY29tcGxldGVfcmVmbG9nKHN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICphcnJheSkKK3sKKwlpbnQgaTsKKworCWlmICghYXJyYXkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykgeworCQlmcmVlKGFycmF5LT5pdGVtc1tpXS5lbWFpbCk7CisJCWZyZWUoYXJyYXktPml0ZW1zW2ldLm1lc3NhZ2UpOworCX0KKwlmcmVlKGFycmF5LT5pdGVtcyk7CisJZnJlZShhcnJheS0+cmVmKTsKKwlmcmVlKGFycmF5KTsKK30KKworc3RhdGljIHN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICpyZWFkX2NvbXBsZXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWYpCit7CisJc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKnJlZmxvZ3MgPQorCQl4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncykpOworCXJlZmxvZ3MtPnJlZiA9IHhzdHJkdXAocmVmKTsKKwlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZiwgcmVhZF9vbmVfcmVmbG9nLCByZWZsb2dzKTsKKwlpZiAocmVmbG9ncy0+bnIgPT0gMCkgeworCQljb25zdCBjaGFyICpuYW1lOworCQl2b2lkICpuYW1lX3RvX2ZyZWU7CisJCW5hbWUgPSBuYW1lX3RvX2ZyZWUgPSByZXNvbHZlX3JlZmR1cChyZWYsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCQkgICAgIE5VTEwsIE5VTEwpOworCQlpZiAobmFtZSkgeworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChuYW1lLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCQkJZnJlZShuYW1lX3RvX2ZyZWUpOworCQl9CisJfQorCWlmIChyZWZsb2dzLT5uciA9PSAwKSB7CisJCWNoYXIgKnJlZm5hbWUgPSB4c3RyZm10KCJyZWZzLyVzIiwgcmVmKTsKKwkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWZuYW1lLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCQlpZiAocmVmbG9ncy0+bnIgPT0gMCkgeworCQkJZnJlZShyZWZuYW1lKTsKKwkJCXJlZm5hbWUgPSB4c3RyZm10KCJyZWZzL2hlYWRzLyVzIiwgcmVmKTsKKwkJCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmbmFtZSwgcmVhZF9vbmVfcmVmbG9nLCByZWZsb2dzKTsKKwkJfQorCQlmcmVlKHJlZm5hbWUpOworCX0KKwlyZXR1cm4gcmVmbG9nczsKK30KKworc3RhdGljIGludCBnZXRfcmVmbG9nX3JlY25vX2J5X3RpbWUoc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKmFycmF5LAorCXRpbWVzdGFtcF90IHRpbWVzdGFtcCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSBhcnJheS0+bnIgLSAxOyBpID49IDA7IGktLSkKKwkJaWYgKHRpbWVzdGFtcCA+PSBhcnJheS0+aXRlbXNbaV0udGltZXN0YW1wKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCitzdHJ1Y3QgY29tbWl0X3JlZmxvZyB7CisJaW50IHJlY25vOworCWVudW0gc2VsZWN0b3JfdHlwZSB7CisJCVNFTEVDVE9SX05PTkUsCisJCVNFTEVDVE9SX0lOREVYLAorCQlTRUxFQ1RPUl9EQVRFCisJfSBzZWxlY3RvcjsKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqcmVmbG9nczsKK307CisKK3N0cnVjdCByZWZsb2dfd2Fsa19pbmZvIHsKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqKmxvZ3M7CisJc2l6ZV90IG5yLCBhbGxvYzsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29tcGxldGVfcmVmbG9nczsKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqbGFzdF9jb21taXRfcmVmbG9nOworfTsKKwordm9pZCBpbml0X3JlZmxvZ193YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICoqaW5mbykKK3sKKwkqaW5mbyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvKSk7CisJKCppbmZvKS0+Y29tcGxldGVfcmVmbG9ncy5zdHJkdXBfc3RyaW5ncyA9IDE7Cit9CisKK2ludCBhZGRfcmVmbG9nX2Zvcl93YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAorCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdGltZXN0YW1wX3QgdGltZXN0YW1wID0gMDsKKwlpbnQgcmVjbm8gPSAtMTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqcmVmbG9nczsKKwljaGFyICpicmFuY2gsICphdCA9IHN0cmNocihuYW1lLCAnQCcpOworCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nOworCWVudW0gc2VsZWN0b3JfdHlwZSBzZWxlY3RvciA9IFNFTEVDVE9SX05PTkU7CisKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlkaWUoImNhbm5vdCB3YWxrIHJlZmxvZ3MgZm9yICVzIiwgbmFtZSk7CisKKwlicmFuY2ggPSB4c3RyZHVwKG5hbWUpOworCWlmIChhdCAmJiBhdFsxXSA9PSAneycpIHsKKwkJY2hhciAqZXA7CisJCWJyYW5jaFthdCAtIG5hbWVdID0gJ1wwJzsKKwkJcmVjbm8gPSBzdHJ0b3VsKGF0ICsgMiwgJmVwLCAxMCk7CisJCWlmICgqZXAgIT0gJ30nKSB7CisJCQlyZWNubyA9IC0xOworCQkJdGltZXN0YW1wID0gYXBwcm94aWRhdGUoYXQgKyAyKTsKKwkJCXNlbGVjdG9yID0gU0VMRUNUT1JfREFURTsKKwkJfQorCQllbHNlCisJCQlzZWxlY3RvciA9IFNFTEVDVE9SX0lOREVYOworCX0gZWxzZQorCQlyZWNubyA9IDA7CisKKwlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKCZpbmZvLT5jb21wbGV0ZV9yZWZsb2dzLCBicmFuY2gpOworCWlmIChpdGVtKQorCQlyZWZsb2dzID0gaXRlbS0+dXRpbDsKKwllbHNlIHsKKwkJaWYgKCpicmFuY2ggPT0gJ1wwJykgeworCQkJZnJlZShicmFuY2gpOworCQkJYnJhbmNoID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCBOVUxMLCBOVUxMKTsKKwkJCWlmICghYnJhbmNoKQorCQkJCWRpZSgibm8gY3VycmVudCBicmFuY2giKTsKKworCQl9CisJCXJlZmxvZ3MgPSByZWFkX2NvbXBsZXRlX3JlZmxvZyhicmFuY2gpOworCQlpZiAoIXJlZmxvZ3MgfHwgcmVmbG9ncy0+bnIgPT0gMCkgeworCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCQljaGFyICpiOworCQkJaW50IHJldCA9IGR3aW1fbG9nKGJyYW5jaCwgc3RybGVuKGJyYW5jaCksCisJCQkJCSAgICZvaWQsICZiKTsKKwkJCWlmIChyZXQgPiAxKQorCQkJCWZyZWUoYik7CisJCQllbHNlIGlmIChyZXQgPT0gMSkgeworCQkJCWZyZWVfY29tcGxldGVfcmVmbG9nKHJlZmxvZ3MpOworCQkJCWZyZWUoYnJhbmNoKTsKKwkJCQlicmFuY2ggPSBiOworCQkJCXJlZmxvZ3MgPSByZWFkX2NvbXBsZXRlX3JlZmxvZyhicmFuY2gpOworCQkJfQorCQl9CisJCWlmICghcmVmbG9ncyB8fCByZWZsb2dzLT5uciA9PSAwKSB7CisJCQlmcmVlX2NvbXBsZXRlX3JlZmxvZyhyZWZsb2dzKTsKKwkJCWZyZWUoYnJhbmNoKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmluZm8tPmNvbXBsZXRlX3JlZmxvZ3MsIGJyYW5jaCktPnV0aWwKKwkJCT0gcmVmbG9nczsKKwl9CisJZnJlZShicmFuY2gpOworCisJY29tbWl0X3JlZmxvZyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb21taXRfcmVmbG9nKSk7CisJaWYgKHJlY25vIDwgMCkgeworCQljb21taXRfcmVmbG9nLT5yZWNubyA9IGdldF9yZWZsb2dfcmVjbm9fYnlfdGltZShyZWZsb2dzLCB0aW1lc3RhbXApOworCQlpZiAoY29tbWl0X3JlZmxvZy0+cmVjbm8gPCAwKSB7CisJCQlmcmVlKGNvbW1pdF9yZWZsb2cpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlCisJCWNvbW1pdF9yZWZsb2ctPnJlY25vID0gcmVmbG9ncy0+bnIgLSByZWNubyAtIDE7CisJY29tbWl0X3JlZmxvZy0+c2VsZWN0b3IgPSBzZWxlY3RvcjsKKwljb21taXRfcmVmbG9nLT5yZWZsb2dzID0gcmVmbG9nczsKKworCUFMTE9DX0dST1coaW5mby0+bG9ncywgaW5mby0+bnIgKyAxLCBpbmZvLT5hbGxvYyk7CisJaW5mby0+bG9nc1tpbmZvLT5ucisrXSA9IGNvbW1pdF9yZWZsb2c7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBnZXRfcmVmbG9nX3NlbGVjdG9yKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJIHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbywKKwkJCSBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICpkbW9kZSwgaW50IGZvcmNlX2RhdGUsCisJCQkgaW50IHNob3J0ZW4pCit7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2cgPSByZWZsb2dfaW5mby0+bGFzdF9jb21taXRfcmVmbG9nOworCXN0cnVjdCByZWZsb2dfaW5mbyAqaW5mbzsKKwljb25zdCBjaGFyICpwcmludGVkX3JlZjsKKworCWlmICghY29tbWl0X3JlZmxvZykKKwkJcmV0dXJuOworCisJaWYgKHNob3J0ZW4pIHsKKwkJaWYgKCFjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5zaG9ydF9yZWYpCisJCQljb21taXRfcmVmbG9nLT5yZWZsb2dzLT5zaG9ydF9yZWYKKwkJCQk9IHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnJlZiwgMCk7CisJCXByaW50ZWRfcmVmID0gY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+c2hvcnRfcmVmOworCX0gZWxzZSB7CisJCXByaW50ZWRfcmVmID0gY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+cmVmOworCX0KKworCXN0cmJ1Zl9hZGRmKHNiLCAiJXNAeyIsIHByaW50ZWRfcmVmKTsKKwlpZiAoY29tbWl0X3JlZmxvZy0+c2VsZWN0b3IgPT0gU0VMRUNUT1JfREFURSB8fAorCSAgICAoY29tbWl0X3JlZmxvZy0+c2VsZWN0b3IgPT0gU0VMRUNUT1JfTk9ORSAmJiBmb3JjZV9kYXRlKSkgeworCQlpbmZvID0gJmNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPml0ZW1zW2NvbW1pdF9yZWZsb2ctPnJlY25vKzFdOworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2RhdGUoaW5mby0+dGltZXN0YW1wLCBpbmZvLT50eiwgZG1vZGUpKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihzYiwgIiVkIiwgY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+bnIKKwkJCSAgICAtIDIgLSBjb21taXRfcmVmbG9nLT5yZWNubyk7CisJfQorCisJc3RyYnVmX2FkZGNoKHNiLCAnfScpOworfQorCit2b2lkIGdldF9yZWZsb2dfbWVzc2FnZShzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCXN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbykKK3sKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CisJc3RydWN0IHJlZmxvZ19pbmZvICppbmZvOworCXNpemVfdCBsZW47CisKKwlpZiAoIWNvbW1pdF9yZWZsb2cpCisJCXJldHVybjsKKworCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CisJbGVuID0gc3RybGVuKGluZm8tPm1lc3NhZ2UpOworCWlmIChsZW4gPiAwKQorCQlsZW4tLTsgLyogc3RyaXAgYXdheSB0cmFpbGluZyBuZXdsaW5lICovCisJc3RyYnVmX2FkZChzYiwgaW5mby0+bWVzc2FnZSwgbGVuKTsKK30KKworY29uc3QgY2hhciAqZ2V0X3JlZmxvZ19pZGVudChzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pCit7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2cgPSByZWZsb2dfaW5mby0+bGFzdF9jb21taXRfcmVmbG9nOworCXN0cnVjdCByZWZsb2dfaW5mbyAqaW5mbzsKKworCWlmICghY29tbWl0X3JlZmxvZykKKwkJcmV0dXJuIE5VTEw7CisKKwlpbmZvID0gJmNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPml0ZW1zW2NvbW1pdF9yZWZsb2ctPnJlY25vKzFdOworCXJldHVybiBpbmZvLT5lbWFpbDsKK30KKwordGltZXN0YW1wX3QgZ2V0X3JlZmxvZ190aW1lc3RhbXAoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvKQoreworCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nID0gcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZzsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisKKwlpZiAoIWNvbW1pdF9yZWZsb2cpCisJCXJldHVybiAwOworCisJaW5mbyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNubysxXTsKKwlyZXR1cm4gaW5mby0+dGltZXN0YW1wOworfQorCit2b2lkIHNob3dfcmVmbG9nX21lc3NhZ2Uoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvLCBpbnQgb25lbGluZSwKKwkJCSBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICpkbW9kZSwgaW50IGZvcmNlX2RhdGUpCit7CisJaWYgKHJlZmxvZ19pbmZvICYmIHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2cpIHsKKwkJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2cgPSByZWZsb2dfaW5mby0+bGFzdF9jb21taXRfcmVmbG9nOworCQlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisJCXN0cnVjdCBzdHJidWYgc2VsZWN0b3IgPSBTVFJCVUZfSU5JVDsKKworCQlpbmZvID0gJmNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPml0ZW1zW2NvbW1pdF9yZWZsb2ctPnJlY25vKzFdOworCQlnZXRfcmVmbG9nX3NlbGVjdG9yKCZzZWxlY3RvciwgcmVmbG9nX2luZm8sIGRtb2RlLCBmb3JjZV9kYXRlLCAwKTsKKwkJaWYgKG9uZWxpbmUpIHsKKwkJCXByaW50ZigiJXM6ICVzIiwgc2VsZWN0b3IuYnVmLCBpbmZvLT5tZXNzYWdlKTsKKwkJfQorCQllbHNlIHsKKwkJCXByaW50ZigiUmVmbG9nOiAlcyAoJXMpXG5SZWZsb2cgbWVzc2FnZTogJXMiLAorCQkJICAgICAgIHNlbGVjdG9yLmJ1ZiwgaW5mby0+ZW1haWwsIGluZm8tPm1lc3NhZ2UpOworCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJnNlbGVjdG9yKTsKKwl9Cit9CisKK2ludCByZWZsb2dfd2Fsa19lbXB0eShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gIWluZm8gfHwgIWluZm8tPm5yOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqbmV4dF9yZWZsb2dfY29tbWl0KHN0cnVjdCBjb21taXRfcmVmbG9nICpsb2cpCit7CisJZm9yICg7IGxvZy0+cmVjbm8gPj0gMDsgbG9nLT5yZWNuby0tKSB7CisJCXN0cnVjdCByZWZsb2dfaW5mbyAqZW50cnkgPSAmbG9nLT5yZWZsb2dzLT5pdGVtc1tsb2ctPnJlY25vXTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICAmZW50cnktPm5vaWQpOworCisJCWlmIChvYmogJiYgb2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlyZXR1cm4gKHN0cnVjdCBjb21taXQgKilvYmo7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdGltZXN0YW1wX3QgbG9nX3RpbWVzdGFtcChzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqbG9nKQoreworCXJldHVybiBsb2ctPnJlZmxvZ3MtPml0ZW1zW2xvZy0+cmVjbm9dLnRpbWVzdGFtcDsKK30KKworc3RydWN0IGNvbW1pdCAqbmV4dF9yZWZsb2dfZW50cnkoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKndhbGspCit7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmJlc3QgPSBOVUxMOworCXN0cnVjdCBjb21taXQgKmJlc3RfY29tbWl0ID0gTlVMTDsKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCB3YWxrLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBjb21taXRfcmVmbG9nICpsb2cgPSB3YWxrLT5sb2dzW2ldOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBuZXh0X3JlZmxvZ19jb21taXQobG9nKTsKKworCQlpZiAoIWNvbW1pdCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghYmVzdCB8fCBsb2dfdGltZXN0YW1wKGxvZykgPiBsb2dfdGltZXN0YW1wKGJlc3QpKSB7CisJCQliZXN0ID0gbG9nOworCQkJYmVzdF9jb21taXQgPSBjb21taXQ7CisJCX0KKwl9CisKKwlpZiAoYmVzdCkgeworCQliZXN0LT5yZWNuby0tOworCQl3YWxrLT5sYXN0X2NvbW1pdF9yZWZsb2cgPSBiZXN0OworCQlyZXR1cm4gYmVzdF9jb21taXQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9yZWZsb2ctd2Fsay5oIGIvcmVmbG9nLXdhbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjY0MDhmCi0tLSAvZGV2L251bGwKKysrIGIvcmVmbG9nLXdhbGsuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIFJFRkxPR19XQUxLX0gKKyNkZWZpbmUgUkVGTE9HX1dBTEtfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RydWN0IGNvbW1pdDsKK3N0cnVjdCByZWZsb2dfd2Fsa19pbmZvOworCit2b2lkIGluaXRfcmVmbG9nX3dhbGsoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKippbmZvKTsKK2ludCBhZGRfcmVmbG9nX2Zvcl93YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAorCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywgaW50LAorCQkJIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKiwgaW50IGZvcmNlX2RhdGUpOwordm9pZCBnZXRfcmVmbG9nX21lc3NhZ2Uoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pOworY29uc3QgY2hhciAqZ2V0X3JlZmxvZ19pZGVudChzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pOwordGltZXN0YW1wX3QgZ2V0X3JlZmxvZ190aW1lc3RhbXAoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvKTsKK3ZvaWQgZ2V0X3JlZmxvZ19zZWxlY3RvcihzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSBzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8sCisJCQkgY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqZG1vZGUsIGludCBmb3JjZV9kYXRlLAorCQkJIGludCBzaG9ydGVuKTsKKworaW50IHJlZmxvZ193YWxrX2VtcHR5KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICp3YWxrKTsKKworc3RydWN0IGNvbW1pdCAqbmV4dF9yZWZsb2dfZW50cnkoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWZzLmMgYi9yZWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiMGJiNQotLS0gL2Rldi9udWxsCisrKyBiL3JlZnMuYwpAQCAtMCwwICsxLDIzNDcgQEAKKy8qCisgKiBUaGUgYmFja2VuZC1pbmRlcGVuZGVudCBwYXJ0IG9mIHRoZSByZWZlcmVuY2UgbW9kdWxlLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgIml0ZXJhdG9yLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnMvcmVmcy1pbnRlcm5hbC5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKworLyoKKyAqIExpc3Qgb2YgYWxsIGF2YWlsYWJsZSBiYWNrZW5kcworICovCitzdGF0aWMgc3RydWN0IHJlZl9zdG9yYWdlX2JlICpyZWZzX2JhY2tlbmRzID0gJnJlZnNfYmVfZmlsZXM7CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX3N0b3JhZ2VfYmUgKmZpbmRfcmVmX3N0b3JhZ2VfYmFja2VuZChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZWZfc3RvcmFnZV9iZSAqYmU7CisJZm9yIChiZSA9IHJlZnNfYmFja2VuZHM7IGJlOyBiZSA9IGJlLT5uZXh0KQorCQlpZiAoIXN0cmNtcChiZS0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gYmU7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCByZWZfc3RvcmFnZV9iYWNrZW5kX2V4aXN0cyhjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBmaW5kX3JlZl9zdG9yYWdlX2JhY2tlbmQobmFtZSkgIT0gTlVMTDsKK30KKworLyoKKyAqIEhvdyB0byBoYW5kbGUgdmFyaW91cyBjaGFyYWN0ZXJzIGluIHJlZm5hbWVzOgorICogMDogQW4gYWNjZXB0YWJsZSBjaGFyYWN0ZXIgZm9yIHJlZnMKKyAqIDE6IEVuZC1vZi1jb21wb25lbnQKKyAqIDI6IC4sIGxvb2sgZm9yIGEgcHJlY2VkaW5nIC4gdG8gcmVqZWN0IC4uIGluIHJlZnMKKyAqIDM6IHssIGxvb2sgZm9yIGEgcHJlY2VkaW5nIEAgdG8gcmVqZWN0IEB7IGluIHJlZnMKKyAqIDQ6IEEgYmFkIGNoYXJhY3RlcjogQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzLCBhbmQKKyAqICAgICI6IiwgIj8iLCAiWyIsICJcIiwgIl4iLCAifiIsIFNQLCBvciBUQUIKKyAqIDU6ICosIHJlamVjdCB1bmxlc3MgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gaXMgc2V0CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHJlZm5hbWVfZGlzcG9zaXRpb25bMjU2XSA9IHsKKwkxLCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAorCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCisJNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgMCwgMCwgMCwgMiwgMSwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCAwLCAwLCAwLCAwLCA0LAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNCwgNCwgMCwgNCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDQsIDQKK307CisKKy8qCisgKiBUcnkgdG8gcmVhZCBvbmUgcmVmbmFtZSBjb21wb25lbnQgZnJvbSB0aGUgZnJvbnQgb2YgcmVmbmFtZS4KKyAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBjb21wb25lbnQgZm91bmQsIG9yIC0xIGlmIHRoZSBjb21wb25lbnQgaXMKKyAqIG5vdCBsZWdhbC4gIEl0IGlzIGxlZ2FsIGlmIGl0IGlzIHNvbWV0aGluZyByZWFzb25hYmxlIHRvIGhhdmUgdW5kZXIKKyAqICIuZ2l0L3JlZnMvIjsgV2UgZG8gbm90IGxpa2UgaXQgaWY6CisgKgorICogLSBpdCBiZWdpbnMgd2l0aCAiLiIsIG9yCisgKiAtIGl0IGhhcyBkb3VibGUgZG90cyAiLi4iLCBvcgorICogLSBpdCBoYXMgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzLCBvcgorICogLSBpdCBoYXMgIjoiLCAiPyIsICJbIiwgIlwiLCAiXiIsICJ+IiwgU1AsIG9yIFRBQiBhbnl3aGVyZSwgb3IKKyAqIC0gaXQgaGFzICIqIiBhbnl3aGVyZSB1bmxlc3MgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gaXMgc2V0LCBvcgorICogLSBpdCBlbmRzIHdpdGggYSAiLyIsIG9yCisgKiAtIGl0IGVuZHMgd2l0aCAiLmxvY2siLCBvcgorICogLSBpdCBjb250YWlucyBhICJAeyIgcG9ydGlvbgorICoKKyAqIFdoZW4gc2FuaXRpemVkIGlzIG5vdCBOVUxMLCBpbnN0ZWFkIG9mIHJlamVjdGluZyB0aGUgaW5wdXQgcmVmbmFtZQorICogYXMgYW4gZXJyb3IsIHRyeSB0byBjb21lIHVwIHdpdGggYSB1c2FibGUgcmVwbGFjZW1lbnQgZm9yIHRoZSBpbnB1dAorICogcmVmbmFtZSBpbiBpdC4KKyAqLworc3RhdGljIGludCBjaGVja19yZWZuYW1lX2NvbXBvbmVudChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgKmZsYWdzLAorCQkJCSAgIHN0cnVjdCBzdHJidWYgKnNhbml0aXplZCkKK3sKKwljb25zdCBjaGFyICpjcDsKKwljaGFyIGxhc3QgPSAnXDAnOworCXNpemVfdCBjb21wb25lbnRfc3RhcnQgPSAwOyAvKiBnYXJiYWdlIC0gbm90IGEgcmVhc29uYWJsZSBpbml0aWFsIHZhbHVlICovCisKKwlpZiAoc2FuaXRpemVkKQorCQljb21wb25lbnRfc3RhcnQgPSBzYW5pdGl6ZWQtPmxlbjsKKworCWZvciAoY3AgPSByZWZuYW1lOyA7IGNwKyspIHsKKwkJaW50IGNoID0gKmNwICYgMjU1OworCQl1bnNpZ25lZCBjaGFyIGRpc3AgPSByZWZuYW1lX2Rpc3Bvc2l0aW9uW2NoXTsKKworCQlpZiAoc2FuaXRpemVkICYmIGRpc3AgIT0gMSkKKwkJCXN0cmJ1Zl9hZGRjaChzYW5pdGl6ZWQsIGNoKTsKKworCQlzd2l0Y2ggKGRpc3ApIHsKKwkJY2FzZSAxOgorCQkJZ290byBvdXQ7CisJCWNhc2UgMjoKKwkJCWlmIChsYXN0ID09ICcuJykgeyAvKiBSZWZuYW1lIGNvbnRhaW5zICIuLiIuICovCisJCQkJaWYgKHNhbml0aXplZCkKKwkJCQkJLyogY29sbGFwc2UgIi4uIiB0byBzaW5nbGUgIi4iICovCisJCQkJCXN0cmJ1Zl9zZXRsZW4oc2FuaXRpemVkLCBzYW5pdGl6ZWQtPmxlbiAtIDEpOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWlmIChsYXN0ID09ICdAJykgeyAvKiBSZWZuYW1lIGNvbnRhaW5zICJAeyIuICovCisJCQkJaWYgKHNhbml0aXplZCkKKwkJCQkJc2FuaXRpemVkLT5idWZbc2FuaXRpemVkLT5sZW4tMV0gPSAnLSc7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJLyogZm9yYmlkZGVuIGNoYXIgKi8KKwkJCWlmIChzYW5pdGl6ZWQpCisJCQkJc2FuaXRpemVkLT5idWZbc2FuaXRpemVkLT5sZW4tMV0gPSAnLSc7CisJCQllbHNlCisJCQkJcmV0dXJuIC0xOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWlmICghKCpmbGFncyAmIFJFRk5BTUVfUkVGU1BFQ19QQVRURVJOKSkgeworCQkJCS8qIHJlZnNwZWMgY2FuJ3QgYmUgYSBwYXR0ZXJuICovCisJCQkJaWYgKHNhbml0aXplZCkKKwkJCQkJc2FuaXRpemVkLT5idWZbc2FuaXRpemVkLT5sZW4tMV0gPSAnLSc7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCS8qCisJCQkgKiBVbnNldCB0aGUgcGF0dGVybiBmbGFnIHNvIHRoYXQgd2Ugb25seSBhY2NlcHQKKwkJCSAqIGEgc2luZ2xlIGFzdGVyaXNrIGZvciBvbmUgc2lkZSBvZiByZWZzcGVjLgorCQkJICovCisJCQkqZmxhZ3MgJj0gfiBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTjsKKwkJCWJyZWFrOworCQl9CisJCWxhc3QgPSBjaDsKKwl9CitvdXQ6CisJaWYgKGNwID09IHJlZm5hbWUpCisJCXJldHVybiAwOyAvKiBDb21wb25lbnQgaGFzIHplcm8gbGVuZ3RoLiAqLworCisJaWYgKHJlZm5hbWVbMF0gPT0gJy4nKSB7IC8qIENvbXBvbmVudCBzdGFydHMgd2l0aCAnLicuICovCisJCWlmIChzYW5pdGl6ZWQpCisJCQlzYW5pdGl6ZWQtPmJ1Zltjb21wb25lbnRfc3RhcnRdID0gJy0nOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCWlmIChjcCAtIHJlZm5hbWUgPj0gTE9DS19TVUZGSVhfTEVOICYmCisJICAgICFtZW1jbXAoY3AgLSBMT0NLX1NVRkZJWF9MRU4sIExPQ0tfU1VGRklYLCBMT0NLX1NVRkZJWF9MRU4pKSB7CisJCWlmICghc2FuaXRpemVkKQorCQkJcmV0dXJuIC0xOworCQkvKiBSZWZuYW1lIGVuZHMgd2l0aCAiLmxvY2siLiAqLworCQl3aGlsZSAoc3RyYnVmX3N0cmlwX3N1ZmZpeChzYW5pdGl6ZWQsIExPQ0tfU1VGRklYKSkgeworCQkJLyogdHJ5IGFnYWluIGluIGNhc2Ugd2UgaGF2ZSAubG9jay5sb2NrICovCisJCX0KKwl9CisJcmV0dXJuIGNwIC0gcmVmbmFtZTsKK30KKworc3RhdGljIGludCBjaGVja19vcl9zYW5pdGl6ZV9yZWZuYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmbGFncywKKwkJCQkgICAgIHN0cnVjdCBzdHJidWYgKnNhbml0aXplZCkKK3sKKwlpbnQgY29tcG9uZW50X2xlbiwgY29tcG9uZW50X2NvdW50ID0gMDsKKworCWlmICghc3RyY21wKHJlZm5hbWUsICJAIikpIHsKKwkJLyogUmVmbmFtZSBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgJ0AnLiAqLworCQlpZiAoc2FuaXRpemVkKQorCQkJc3RyYnVmX2FkZGNoKHNhbml0aXplZCwgJy0nKTsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKworCXdoaWxlICgxKSB7CisJCWlmIChzYW5pdGl6ZWQgJiYgc2FuaXRpemVkLT5sZW4pCisJCQlzdHJidWZfY29tcGxldGUoc2FuaXRpemVkLCAnLycpOworCisJCS8qIFdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBwYXRoIGNvbXBvbmVudC4gKi8KKwkJY29tcG9uZW50X2xlbiA9IGNoZWNrX3JlZm5hbWVfY29tcG9uZW50KHJlZm5hbWUsICZmbGFncywKKwkJCQkJCQlzYW5pdGl6ZWQpOworCQlpZiAoc2FuaXRpemVkICYmIGNvbXBvbmVudF9sZW4gPT0gMCkKKwkJCTsgLyogT0ssIG9taXQgZW1wdHkgY29tcG9uZW50ICovCisJCWVsc2UgaWYgKGNvbXBvbmVudF9sZW4gPD0gMCkKKwkJCXJldHVybiAtMTsKKworCQljb21wb25lbnRfY291bnQrKzsKKwkJaWYgKHJlZm5hbWVbY29tcG9uZW50X2xlbl0gPT0gJ1wwJykKKwkJCWJyZWFrOworCQkvKiBTa2lwIHRvIG5leHQgY29tcG9uZW50LiAqLworCQlyZWZuYW1lICs9IGNvbXBvbmVudF9sZW4gKyAxOworCX0KKworCWlmIChyZWZuYW1lW2NvbXBvbmVudF9sZW4gLSAxXSA9PSAnLicpIHsKKwkJLyogUmVmbmFtZSBlbmRzIHdpdGggJy4nLiAqLworCQlpZiAoc2FuaXRpemVkKQorCQkJOyAvKiBvbWl0IGVuZGluZyBkb3QgKi8KKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKwlpZiAoIShmbGFncyAmIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpICYmIGNvbXBvbmVudF9jb3VudCA8IDIpCisJCXJldHVybiAtMTsgLyogUmVmbmFtZSBoYXMgb25seSBvbmUgY29tcG9uZW50LiAqLworCXJldHVybiAwOworfQorCitpbnQgY2hlY2tfcmVmbmFtZV9mb3JtYXQoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZsYWdzKQoreworCXJldHVybiBjaGVja19vcl9zYW5pdGl6ZV9yZWZuYW1lKHJlZm5hbWUsIGZsYWdzLCBOVUxMKTsKK30KKwordm9pZCBzYW5pdGl6ZV9yZWZuYW1lX2NvbXBvbmVudChjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJaWYgKGNoZWNrX29yX3Nhbml0aXplX3JlZm5hbWUocmVmbmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCwgb3V0KSkKKwkJQlVHKCJzYW5pdGl6aW5nIHJlZm5hbWUgJyVzJyBjaGVjayByZXR1cm5lZCBlcnJvciIsIHJlZm5hbWUpOworfQorCitpbnQgcmVmbmFtZV9pc19zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJY29uc3QgY2hhciAqcmVzdDsKKworCWlmIChza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy8iLCAmcmVzdCkpIHsKKwkJY2hhciAqYnVmOworCQlpbnQgcmVzdWx0OworCQlzaXplX3QgcmVzdGxlbiA9IHN0cmxlbihyZXN0KTsKKworCQkvKiByZXN0IG11c3Qgbm90IGJlIGVtcHR5LCBvciBzdGFydCBvciBlbmQgd2l0aCAiLyIgKi8KKwkJaWYgKCFyZXN0bGVuIHx8ICpyZXN0ID09ICcvJyB8fCByZXN0W3Jlc3RsZW4gLSAxXSA9PSAnLycpCisJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBEb2VzIHRoZSByZWZuYW1lIHRyeSB0byBlc2NhcGUgcmVmcy8/CisJCSAqIEZvciBleGFtcGxlOiByZWZzL2Zvby8uLi9iYXIgaXMgc2FmZSBidXQgcmVmcy9mb28vLi4vLi4vYmFyCisJCSAqIGlzIG5vdC4KKwkJICovCisJCWJ1ZiA9IHhtYWxsb2N6KHJlc3RsZW4pOworCQlyZXN1bHQgPSAhbm9ybWFsaXplX3BhdGhfY29weShidWYsIHJlc3QpICYmICFzdHJjbXAoYnVmLCByZXN0KTsKKwkJZnJlZShidWYpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWRvIHsKKwkJaWYgKCFpc3VwcGVyKCpyZWZuYW1lKSAmJiAqcmVmbmFtZSAhPSAnXycpCisJCQlyZXR1cm4gMDsKKwkJcmVmbmFtZSsrOworCX0gd2hpbGUgKCpyZWZuYW1lKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHJlZm5hbWUsIHdoaWNoIGhhcyB0aGUgc3BlY2lmaWVkIG9pZCBhbmQgZmxhZ3MsIGNhbgorICogYmUgcmVzb2x2ZWQgdG8gYW4gb2JqZWN0IGluIHRoZSBkYXRhYmFzZS4gSWYgdGhlIHJlZmVycmVkLXRvIG9iamVjdAorICogZG9lcyBub3QgZXhpc3QsIGVtaXQgYSB3YXJuaW5nIGFuZCByZXR1cm4gZmFsc2UuCisgKi8KK2ludCByZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgUkVGX0lTQlJPS0VOKQorCQlyZXR1cm4gMDsKKwlpZiAoIWhhc19vYmplY3RfZmlsZShvaWQpKSB7CisJCWVycm9yKF8oIiVzIGRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgb2JqZWN0ISIpLCByZWZuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitjaGFyICpyZWZzX3Jlc29sdmVfcmVmZHVwKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkJICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCAqZmxhZ3MpCit7CisJY29uc3QgY2hhciAqcmVzdWx0OworCisJcmVzdWx0ID0gcmVmc19yZXNvbHZlX3JlZl91bnNhZmUocmVmcywgcmVmbmFtZSwgcmVzb2x2ZV9mbGFncywKKwkJCQkJIG9pZCwgZmxhZ3MpOworCXJldHVybiB4c3RyZHVwX29yX251bGwocmVzdWx0KTsKK30KKworY2hhciAqcmVzb2x2ZV9yZWZkdXAoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHJlc29sdmVfZmxhZ3MsCisJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgKmZsYWdzKQoreworCXJldHVybiByZWZzX3Jlc29sdmVfcmVmZHVwKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksCisJCQkJICAgcmVmbmFtZSwgcmVzb2x2ZV9mbGFncywKKwkJCQkgICBvaWQsIGZsYWdzKTsKK30KKworLyogVGhlIGFyZ3VtZW50IHRvIGZpbHRlcl9yZWZzICovCitzdHJ1Y3QgcmVmX2ZpbHRlciB7CisJY29uc3QgY2hhciAqcGF0dGVybjsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJZWFjaF9yZWZfZm4gKmZuOworCXZvaWQgKmNiX2RhdGE7Cit9OworCitpbnQgcmVmc19yZWFkX3JlZl9mdWxsKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICAgICBpbnQgcmVzb2x2ZV9mbGFncywgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgKmZsYWdzKQoreworCWlmIChyZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZShyZWZzLCByZWZuYW1lLCByZXNvbHZlX2ZsYWdzLCBvaWQsIGZsYWdzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC0xOworfQorCitpbnQgcmVhZF9yZWZfZnVsbChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgKmZsYWdzKQoreworCXJldHVybiByZWZzX3JlYWRfcmVmX2Z1bGwoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgcmVmbmFtZSwKKwkJCQkgIHJlc29sdmVfZmxhZ3MsIG9pZCwgZmxhZ3MpOworfQorCitpbnQgcmVhZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiByZWFkX3JlZl9mdWxsKHJlZm5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcsIG9pZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgcmVmc19yZWZfZXhpc3RzKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJcmV0dXJuICEhcmVmc19yZXNvbHZlX3JlZl91bnNhZmUocmVmcywgcmVmbmFtZSwgUkVTT0xWRV9SRUZfUkVBRElORywgTlVMTCwgTlVMTCk7Cit9CisKK2ludCByZWZfZXhpc3RzKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJcmV0dXJuIHJlZnNfcmVmX2V4aXN0cyhnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCByZWZuYW1lKTsKK30KKworc3RhdGljIGludCBtYXRjaF9yZWZfcGF0dGVybihjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSkKK3sKKwlpbnQgbWF0Y2hlZCA9IDA7CisJaWYgKGl0ZW0tPnV0aWwgPT0gTlVMTCkgeworCQlpZiAoIXdpbGRtYXRjaChpdGVtLT5zdHJpbmcsIHJlZm5hbWUsIDApKQorCQkJbWF0Y2hlZCA9IDE7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqcmVzdDsKKwkJaWYgKHNraXBfcHJlZml4KHJlZm5hbWUsIGl0ZW0tPnN0cmluZywgJnJlc3QpICYmCisJCSAgICAoISpyZXN0IHx8ICpyZXN0ID09ICcvJykpCisJCQltYXRjaGVkID0gMTsKKwl9CisJcmV0dXJuIG1hdGNoZWQ7Cit9CisKK2ludCByZWZfZmlsdGVyX21hdGNoKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICppbmNsdWRlX3BhdHRlcm5zLAorCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmIChleGNsdWRlX3BhdHRlcm5zICYmIGV4Y2x1ZGVfcGF0dGVybnMtPm5yKSB7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgZXhjbHVkZV9wYXR0ZXJucykgeworCQkJaWYgKG1hdGNoX3JlZl9wYXR0ZXJuKHJlZm5hbWUsIGl0ZW0pKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGluY2x1ZGVfcGF0dGVybnMgJiYgaW5jbHVkZV9wYXR0ZXJucy0+bnIpIHsKKwkJaW50IGZvdW5kID0gMDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBpbmNsdWRlX3BhdHRlcm5zKSB7CisJCQlpZiAobWF0Y2hfcmVmX3BhdHRlcm4ocmVmbmFtZSwgaXRlbSkpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWZvdW5kKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9yZWZzKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIGludCBmbGFncywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyID0gKHN0cnVjdCByZWZfZmlsdGVyICopZGF0YTsKKworCWlmICh3aWxkbWF0Y2goZmlsdGVyLT5wYXR0ZXJuLCByZWZuYW1lLCAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZpbHRlci0+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+bmFtZTsKKworCXJldHVybiBzdHJjbXAoZTEtPm5hbWUsIG5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9zdG9yZV9oYXNoX2VudHJ5ICphbGxvY19yZWZfc3RvcmVfaGFzaF9lbnRyeSgKKwkJY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlZl9zdG9yZSAqcmVmcykKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlX2hhc2hfZW50cnkgKmVudHJ5OworCisJRkxFWF9BTExPQ19TVFIoZW50cnksIG5hbWUsIG5hbWUpOworCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudCwgc3RyaGFzaChuYW1lKSk7CisJZW50cnktPnJlZnMgPSByZWZzOworCXJldHVybiBlbnRyeTsKK30KKworLyogQSBoYXNobWFwIG9mIHJlZl9zdG9yZXMsIHN0b3JlZCBieSBzdWJtb2R1bGUgbmFtZTogKi8KK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCBzdWJtb2R1bGVfcmVmX3N0b3JlczsKKworLyogQSBoYXNobWFwIG9mIHJlZl9zdG9yZXMsIHN0b3JlZCBieSB3b3JrdHJlZSBpZDogKi8KK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCB3b3JrdHJlZV9yZWZfc3RvcmVzOworCisvKgorICogTG9vayB1cCBhIHJlZiBzdG9yZSBieSBuYW1lLiBJZiB0aGF0IHJlZl9zdG9yZSBoYXNuJ3QgYmVlbgorICogcmVnaXN0ZXJlZCB5ZXQsIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9zdG9yZSAqbG9va3VwX3JlZl9zdG9yZV9tYXAoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlX2hhc2hfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGludCBoYXNoOworCisJaWYgKCFtYXAtPnRhYmxlc2l6ZSkKKwkJLyogSXQncyBpbml0aWFsaXplZCBvbiBkZW1hbmQgaW4gcmVnaXN0ZXJfcmVmX3N0b3JlKCkuICovCisJCXJldHVybiBOVUxMOworCisJaGFzaCA9IHN0cmhhc2gobmFtZSk7CisJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2gobWFwLCBoYXNoLCBuYW1lLAorCQkJCQlzdHJ1Y3QgcmVmX3N0b3JlX2hhc2hfZW50cnksIGVudCk7CisJcmV0dXJuIGVudHJ5ID8gZW50cnktPnJlZnMgOiBOVUxMOworfQorCisvKgorICogQ3JlYXRlLCByZWNvcmQsIGFuZCByZXR1cm4gYSByZWZfc3RvcmUgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQKKyAqIGdpdGRpci4KKyAqLworc3RhdGljIHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZV9pbml0KGNvbnN0IGNoYXIgKmdpdGRpciwKKwkJCQkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNvbnN0IGNoYXIgKmJlX25hbWUgPSAiZmlsZXMiOworCXN0cnVjdCByZWZfc3RvcmFnZV9iZSAqYmUgPSBmaW5kX3JlZl9zdG9yYWdlX2JhY2tlbmQoYmVfbmFtZSk7CisJc3RydWN0IHJlZl9zdG9yZSAqcmVmczsKKworCWlmICghYmUpCisJCUJVRygicmVmZXJlbmNlIGJhY2tlbmQgJXMgaXMgdW5rbm93biIsIGJlX25hbWUpOworCisJcmVmcyA9IGJlLT5pbml0KGdpdGRpciwgZmxhZ3MpOworCXJldHVybiByZWZzOworfQorCitzdHJ1Y3QgcmVmX3N0b3JlICpnZXRfbWFpbl9yZWZfc3RvcmUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJaWYgKHItPnJlZnMpCisJCXJldHVybiByLT5yZWZzOworCisJaWYgKCFyLT5naXRkaXIpCisJCUJVRygiYXR0ZW1wdGluZyB0byBnZXQgbWFpbl9yZWZfc3RvcmUgb3V0c2lkZSBvZiByZXBvc2l0b3J5Iik7CisKKwlyLT5yZWZzID0gcmVmX3N0b3JlX2luaXQoci0+Z2l0ZGlyLCBSRUZfU1RPUkVfQUxMX0NBUFMpOworCXJldHVybiByLT5yZWZzOworfQorCisvKgorICogQXNzb2NpYXRlIGEgcmVmIHN0b3JlIHdpdGggYSBuYW1lLiBJdCBpcyBhIGZhdGFsIGVycm9yIHRvIGNhbGwgdGhpcworICogZnVuY3Rpb24gdHdpY2UgZm9yIHRoZSBzYW1lIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3JlZl9zdG9yZV9tYXAoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJCQkgICBjb25zdCBjaGFyICp0eXBlLAorCQkJCSAgIHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlX2hhc2hfZW50cnkgKmVudHJ5OworCisJaWYgKCFtYXAtPnRhYmxlc2l6ZSkKKwkJaGFzaG1hcF9pbml0KG1hcCwgcmVmX3N0b3JlX2hhc2hfY21wLCBOVUxMLCAwKTsKKworCWVudHJ5ID0gYWxsb2NfcmVmX3N0b3JlX2hhc2hfZW50cnkobmFtZSwgcmVmcyk7CisJaWYgKGhhc2htYXBfcHV0KG1hcCwgJmVudHJ5LT5lbnQpKQorCQlCVUcoIiVzIHJlZl9zdG9yZSAnJXMnIGluaXRpYWxpemVkIHR3aWNlIiwgdHlwZSwgbmFtZSk7Cit9CisKK3N0cnVjdCByZWZfc3RvcmUgKmdldF9zdWJtb2R1bGVfcmVmX3N0b3JlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHN1Ym1vZHVsZV9zYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnM7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisJc2l6ZV90IGxlbjsKKworCWlmICghc3VibW9kdWxlKQorCQlyZXR1cm4gTlVMTDsKKworCWxlbiA9IHN0cmxlbihzdWJtb2R1bGUpOworCXdoaWxlIChsZW4gJiYgaXNfZGlyX3NlcChzdWJtb2R1bGVbbGVuIC0gMV0pKQorCQlsZW4tLTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoc3VibW9kdWxlW2xlbl0pCisJCS8qIFdlIG5lZWQgdG8gc3RyaXAgb2ZmIG9uZSBvciBtb3JlIHRyYWlsaW5nIHNsYXNoZXMgKi8KKwkJc3VibW9kdWxlID0gdG9fZnJlZSA9IHhtZW1kdXB6KHN1Ym1vZHVsZSwgbGVuKTsKKworCXJlZnMgPSBsb29rdXBfcmVmX3N0b3JlX21hcCgmc3VibW9kdWxlX3JlZl9zdG9yZXMsIHN1Ym1vZHVsZSk7CisJaWYgKHJlZnMpCisJCWdvdG8gZG9uZTsKKworCXN0cmJ1Zl9hZGRzdHIoJnN1Ym1vZHVsZV9zYiwgc3VibW9kdWxlKTsKKwlpZiAoIWlzX25vbmJhcmVfcmVwb3NpdG9yeV9kaXIoJnN1Ym1vZHVsZV9zYikpCisJCWdvdG8gZG9uZTsKKworCWlmIChzdWJtb2R1bGVfdG9fZ2l0ZGlyKCZzdWJtb2R1bGVfc2IsIHN1Ym1vZHVsZSkpCisJCWdvdG8gZG9uZTsKKworCS8qIGFzc3VtZSB0aGF0IGFkZF9zdWJtb2R1bGVfb2RiKCkgaGFzIGJlZW4gY2FsbGVkICovCisJcmVmcyA9IHJlZl9zdG9yZV9pbml0KHN1Ym1vZHVsZV9zYi5idWYsCisJCQkgICAgICBSRUZfU1RPUkVfUkVBRCB8IFJFRl9TVE9SRV9PREIpOworCXJlZ2lzdGVyX3JlZl9zdG9yZV9tYXAoJnN1Ym1vZHVsZV9yZWZfc3RvcmVzLCAic3VibW9kdWxlIiwKKwkJCSAgICAgICByZWZzLCBzdWJtb2R1bGUpOworCitkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZzdWJtb2R1bGVfc2IpOworCWZyZWUodG9fZnJlZSk7CisKKwlyZXR1cm4gcmVmczsKK30KKworc3RydWN0IHJlZl9zdG9yZSAqZ2V0X3dvcmt0cmVlX3JlZl9zdG9yZShjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0KQoreworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnM7CisJY29uc3QgY2hhciAqaWQ7CisKKwlpZiAod3QtPmlzX2N1cnJlbnQpCisJCXJldHVybiBnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpOworCisJaWQgPSB3dC0+aWQgPyB3dC0+aWQgOiAiLyI7CisJcmVmcyA9IGxvb2t1cF9yZWZfc3RvcmVfbWFwKCZ3b3JrdHJlZV9yZWZfc3RvcmVzLCBpZCk7CisJaWYgKHJlZnMpCisJCXJldHVybiByZWZzOworCisJaWYgKHd0LT5pZCkKKwkJcmVmcyA9IHJlZl9zdG9yZV9pbml0KGdpdF9jb21tb25fcGF0aCgid29ya3RyZWVzLyVzIiwgd3QtPmlkKSwKKwkJCQkgICAgICBSRUZfU1RPUkVfQUxMX0NBUFMpOworCWVsc2UKKwkJcmVmcyA9IHJlZl9zdG9yZV9pbml0KGdldF9naXRfY29tbW9uX2RpcigpLAorCQkJCSAgICAgIFJFRl9TVE9SRV9BTExfQ0FQUyk7CisKKwlpZiAocmVmcykKKwkJcmVnaXN0ZXJfcmVmX3N0b3JlX21hcCgmd29ya3RyZWVfcmVmX3N0b3JlcywgIndvcmt0cmVlIiwKKwkJCQkgICAgICAgcmVmcywgaWQpOworCXJldHVybiByZWZzOworfQorCit2b2lkIGJhc2VfcmVmX3N0b3JlX2luaXQoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCSBjb25zdCBzdHJ1Y3QgcmVmX3N0b3JhZ2VfYmUgKmJlKQoreworCXJlZnMtPmJlID0gYmU7Cit9CisKKy8qIGJhY2tlbmQgZnVuY3Rpb25zICovCitpbnQgcmVmc19wYWNrX3JlZnMoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiByZWZzLT5iZS0+cGFja19yZWZzKHJlZnMsIGZsYWdzKTsKK30KKworaW50IHJlZnNfcGVlbF9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IGZsYWc7CisJc3RydWN0IG9iamVjdF9pZCBiYXNlOworCisJaWYgKGN1cnJlbnRfcmVmX2l0ZXIgJiYgY3VycmVudF9yZWZfaXRlci0+cmVmbmFtZSA9PSByZWZuYW1lKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgcGVlbGVkOworCisJCWlmIChyZWZfaXRlcmF0b3JfcGVlbChjdXJyZW50X3JlZl9pdGVyLCAmcGVlbGVkKSkKKwkJCXJldHVybiAtMTsKKwkJb2lkY3B5KG9pZCwgJnBlZWxlZCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChyZWZzX3JlYWRfcmVmX2Z1bGwocmVmcywgcmVmbmFtZSwKKwkJCSAgICAgICBSRVNPTFZFX1JFRl9SRUFESU5HLCAmYmFzZSwgJmZsYWcpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gcGVlbF9vYmplY3QoJmJhc2UsIG9pZCk7Cit9CisKK2ludCBwZWVsX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIHJlZnNfcGVlbF9yZWYoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgcmVmbmFtZSwgb2lkKTsKK30KKworaW50IHJlZnNfY3JlYXRlX3N5bXJlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkgICAgICAgY29uc3QgY2hhciAqcmVmX3RhcmdldCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnJlZnNfaGVhZHNfbWFzdGVyLAorCQkgICAgICAgY29uc3QgY2hhciAqbG9nbXNnKQoreworCXJldHVybiByZWZzLT5iZS0+Y3JlYXRlX3N5bXJlZihyZWZzLCByZWZfdGFyZ2V0LAorCQkJCSAgICAgICByZWZzX2hlYWRzX21hc3RlciwKKwkJCQkgICAgICAgbG9nbXNnKTsKK30KKworaW50IGNyZWF0ZV9zeW1yZWYoY29uc3QgY2hhciAqcmVmX3RhcmdldCwgY29uc3QgY2hhciAqcmVmc19oZWFkc19tYXN0ZXIsCisJCSAgY29uc3QgY2hhciAqbG9nbXNnKQoreworCXJldHVybiByZWZzX2NyZWF0ZV9zeW1yZWYoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgcmVmX3RhcmdldCwKKwkJCQkgIHJlZnNfaGVhZHNfbWFzdGVyLCBsb2dtc2cpOworfQorCitpbnQgcmVmX3VwZGF0ZV9yZWplY3RfZHVwbGljYXRlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzLAorCQkJCSBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc2l6ZV90IGksIG4gPSByZWZuYW1lcy0+bnI7CisKKwlhc3NlcnQoZXJyKTsKKworCWZvciAoaSA9IDE7IGkgPCBuOyBpKyspIHsKKwkJaW50IGNtcCA9IHN0cmNtcChyZWZuYW1lcy0+aXRlbXNbaSAtIDFdLnN0cmluZywKKwkJCQkgcmVmbmFtZXMtPml0ZW1zW2ldLnN0cmluZyk7CisKKwkJaWYgKCFjbXApIHsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwKKwkJCQkgICAgXygibXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQiKSwKKwkJCQkgICAgcmVmbmFtZXMtPml0ZW1zW2ldLnN0cmluZyk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChjbXAgPiAwKSB7CisJCQlCVUcoInJlZl91cGRhdGVfcmVqZWN0X2R1cGxpY2F0ZXMoKSByZWNlaXZlZCB1bnNvcnRlZCBsaXN0Iik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWZfdHJhbnNhY3Rpb25fcHJlcGFyZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHJlZl9zdG9yZSAqcmVmcyA9IHRyYW5zYWN0aW9uLT5yZWZfc3RvcmU7CisKKwlzd2l0Y2ggKHRyYW5zYWN0aW9uLT5zdGF0ZSkgeworCWNhc2UgUkVGX1RSQU5TQUNUSU9OX09QRU46CisJCS8qIEdvb2QuICovCisJCWJyZWFrOworCWNhc2UgUkVGX1RSQU5TQUNUSU9OX1BSRVBBUkVEOgorCQlCVUcoInByZXBhcmUgY2FsbGVkIHR3aWNlIG9uIHJlZmVyZW5jZSB0cmFuc2FjdGlvbiIpOworCQlicmVhazsKKwljYXNlIFJFRl9UUkFOU0FDVElPTl9DTE9TRUQ6CisJCUJVRygicHJlcGFyZSBjYWxsZWQgb24gYSBjbG9zZWQgcmVmZXJlbmNlIHRyYW5zYWN0aW9uIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygidW5leHBlY3RlZCByZWZlcmVuY2UgdHJhbnNhY3Rpb24gc3RhdGUiKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGdldGVudihHSVRfUVVBUkFOVElORV9FTlZJUk9OTUVOVCkpIHsKKwkJc3RyYnVmX2FkZHN0cihlcnIsCisJCQkgICAgICBfKCJyZWYgdXBkYXRlcyBmb3JiaWRkZW4gaW5zaWRlIHF1YXJhbnRpbmUgZW52aXJvbm1lbnQiKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gcmVmcy0+YmUtPnRyYW5zYWN0aW9uX3ByZXBhcmUocmVmcywgdHJhbnNhY3Rpb24sIGVycik7Cit9CisKK2ludCByZWZfdHJhbnNhY3Rpb25fYWJvcnQoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gdHJhbnNhY3Rpb24tPnJlZl9zdG9yZTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAodHJhbnNhY3Rpb24tPnN0YXRlKSB7CisJY2FzZSBSRUZfVFJBTlNBQ1RJT05fT1BFTjoKKwkJLyogTm8gbmVlZCB0byBhYm9ydCBleHBsaWNpdGx5LiAqLworCQlicmVhazsKKwljYXNlIFJFRl9UUkFOU0FDVElPTl9QUkVQQVJFRDoKKwkJcmV0ID0gcmVmcy0+YmUtPnRyYW5zYWN0aW9uX2Fib3J0KHJlZnMsIHRyYW5zYWN0aW9uLCBlcnIpOworCQlicmVhazsKKwljYXNlIFJFRl9UUkFOU0FDVElPTl9DTE9TRUQ6CisJCUJVRygiYWJvcnQgY2FsbGVkIG9uIGEgY2xvc2VkIHJlZmVyZW5jZSB0cmFuc2FjdGlvbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRyYW5zYWN0aW9uIHN0YXRlIik7CisJCWJyZWFrOworCX0KKworCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gdHJhbnNhY3Rpb24tPnJlZl9zdG9yZTsKKwlpbnQgcmV0OworCisJc3dpdGNoICh0cmFuc2FjdGlvbi0+c3RhdGUpIHsKKwljYXNlIFJFRl9UUkFOU0FDVElPTl9PUEVOOgorCQkvKiBOZWVkIHRvIHByZXBhcmUgZmlyc3QuICovCisJCXJldCA9IHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKHRyYW5zYWN0aW9uLCBlcnIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJY2FzZSBSRUZfVFJBTlNBQ1RJT05fUFJFUEFSRUQ6CisJCS8qIEZhbGwgdGhyb3VnaCB0byBmaW5pc2guICovCisJCWJyZWFrOworCWNhc2UgUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDoKKwkJQlVHKCJjb21taXQgY2FsbGVkIG9uIGEgY2xvc2VkIHJlZmVyZW5jZSB0cmFuc2FjdGlvbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRyYW5zYWN0aW9uIHN0YXRlIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZWZzLT5iZS0+dHJhbnNhY3Rpb25fZmluaXNoKHJlZnMsIHRyYW5zYWN0aW9uLCBlcnIpOworfQorCitpbnQgcmVmc192ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4dHJhcywKKwkJCQkgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2tpcCwKKwkJCQkgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwljb25zdCBjaGFyICpzbGFzaDsKKwljb25zdCBjaGFyICpleHRyYV9yZWZuYW1lOworCXN0cnVjdCBzdHJidWYgZGlybmFtZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmVmZXJlbnQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyOworCWludCBvazsKKwlpbnQgcmV0ID0gLTE7CisKKwkvKgorCSAqIEZvciB0aGUgc2FrZSBvZiBjb21tZW50cyBpbiB0aGlzIGZ1bmN0aW9uLCBzdXBwb3NlIHRoYXQKKwkgKiByZWZuYW1lIGlzICJyZWZzL2Zvby9iYXIiLgorCSAqLworCisJYXNzZXJ0KGVycik7CisKKwlzdHJidWZfZ3JvdygmZGlybmFtZSwgc3RybGVuKHJlZm5hbWUpICsgMSk7CisJZm9yIChzbGFzaCA9IHN0cmNocihyZWZuYW1lLCAnLycpOyBzbGFzaDsgc2xhc2ggPSBzdHJjaHIoc2xhc2ggKyAxLCAnLycpKSB7CisJCS8qIEV4cGFuZCBkaXJuYW1lIHRvIHRoZSBuZXcgcHJlZml4LCBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBzbGFzaDogKi8KKwkJc3RyYnVmX2FkZCgmZGlybmFtZSwgcmVmbmFtZSArIGRpcm5hbWUubGVuLCBzbGFzaCAtIHJlZm5hbWUgLSBkaXJuYW1lLmxlbik7CisKKwkJLyoKKwkJICogV2UgYXJlIHN0aWxsIGF0IGEgbGVhZGluZyBkaXIgb2YgdGhlIHJlZm5hbWUgKGUuZy4sCisJCSAqICJyZWZzL2ZvbyI7IGlmIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHdpdGggdGhhdCBuYW1lLAorCQkgKiBpdCBpcyBhIGNvbmZsaWN0LCAqdW5sZXNzKiBpdCBpcyBpbiBza2lwLgorCQkgKi8KKwkJaWYgKHNraXAgJiYgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhza2lwLCBkaXJuYW1lLmJ1ZikpCisJCQljb250aW51ZTsKKworCQlpZiAoIXJlZnNfcmVhZF9yYXdfcmVmKHJlZnMsIGRpcm5hbWUuYnVmLCAmb2lkLCAmcmVmZXJlbnQsICZ0eXBlKSkgeworCQkJc3RyYnVmX2FkZGYoZXJyLCBfKCInJXMnIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAnJXMnIiksCisJCQkJICAgIGRpcm5hbWUuYnVmLCByZWZuYW1lKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCWlmIChleHRyYXMgJiYgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhleHRyYXMsIGRpcm5hbWUuYnVmKSkgeworCQkJc3RyYnVmX2FkZGYoZXJyLCBfKCJjYW5ub3QgcHJvY2VzcyAnJXMnIGFuZCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUiKSwKKwkJCQkgICAgcmVmbmFtZSwgZGlybmFtZS5idWYpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBhcmUgYXQgdGhlIGxlYWYgb2Ygb3VyIHJlZm5hbWUgKGUuZy4sICJyZWZzL2Zvby9iYXIiKS4KKwkgKiBUaGVyZSBpcyBubyBwb2ludCBpbiBzZWFyY2hpbmcgZm9yIGEgcmVmZXJlbmNlIHdpdGggdGhhdAorCSAqIG5hbWUsIGJlY2F1c2UgYSByZWZuYW1lIGlzbid0IGNvbnNpZGVyZWQgdG8gY29uZmxpY3Qgd2l0aAorCSAqIGl0c2VsZi4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgZm9yIHJlZmVyZW5jZXMgd2hvc2UKKwkgKiBuYW1lcyBhcmUgaW4gdGhlICJyZWZzL2Zvby9iYXIvIiBuYW1lc3BhY2UsIGJlY2F1c2UgdGhleQorCSAqICpkbyogY29uZmxpY3QuCisJICovCisJc3RyYnVmX2FkZHN0cigmZGlybmFtZSwgcmVmbmFtZSArIGRpcm5hbWUubGVuKTsKKwlzdHJidWZfYWRkY2goJmRpcm5hbWUsICcvJyk7CisKKwlpdGVyID0gcmVmc19yZWZfaXRlcmF0b3JfYmVnaW4ocmVmcywgZGlybmFtZS5idWYsIDAsCisJCQkJICAgICAgIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOKTsKKwl3aGlsZSAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlcikpID09IElURVJfT0spIHsKKwkJaWYgKHNraXAgJiYKKwkJICAgIHN0cmluZ19saXN0X2hhc19zdHJpbmcoc2tpcCwgaXRlci0+cmVmbmFtZSkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfYWRkZihlcnIsIF8oIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciKSwKKwkJCSAgICBpdGVyLT5yZWZuYW1lLCByZWZuYW1lKTsKKwkJcmVmX2l0ZXJhdG9yX2Fib3J0KGl0ZXIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKG9rICE9IElURVJfRE9ORSkKKwkJQlVHKCJlcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciByZWZlcmVuY2VzIik7CisKKwlleHRyYV9yZWZuYW1lID0gZmluZF9kZXNjZW5kYW50X3JlZihkaXJuYW1lLmJ1ZiwgZXh0cmFzLCBza2lwKTsKKwlpZiAoZXh0cmFfcmVmbmFtZSkKKwkJc3RyYnVmX2FkZGYoZXJyLCBfKCJjYW5ub3QgcHJvY2VzcyAnJXMnIGFuZCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUiKSwKKwkJCSAgICByZWZuYW1lLCBleHRyYV9yZWZuYW1lKTsKKwllbHNlCisJCXJldCA9IDA7CisKK2NsZWFudXA6CisJc3RyYnVmX3JlbGVhc2UoJnJlZmVyZW50KTsKKwlzdHJidWZfcmVsZWFzZSgmZGlybmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJlZnNfZm9yX2VhY2hfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXI7CisJc3RydWN0IGRvX2Zvcl9lYWNoX3JlZl9oZWxwIGhwID0geyBmbiwgY2JfZGF0YSB9OworCisJaXRlciA9IHJlZnMtPmJlLT5yZWZsb2dfaXRlcmF0b3JfYmVnaW4ocmVmcyk7CisKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVwb19yZWZfaXRlcmF0b3IodGhlX3JlcG9zaXRvcnksIGl0ZXIsCisJCQkJCSAgICAgZG9fZm9yX2VhY2hfcmVmX2hlbHBlciwgJmhwKTsKK30KKworaW50IGZvcl9lYWNoX3JlZmxvZyhlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gcmVmc19mb3JfZWFjaF9yZWZsb2coZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgcmVmc19mb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2Uoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJICAgICBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sCisJCQkJICAgICB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiByZWZzLT5iZS0+Zm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlKHJlZnMsIHJlZm5hbWUsCisJCQkJCQkgICAgIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShjb25zdCBjaGFyICpyZWZuYW1lLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sCisJCQkJdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gcmVmc19mb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwKKwkJCQkJCXJlZm5hbWUsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IHJlZnNfZm9yX2VhY2hfcmVmbG9nX2VudChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgICBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5mb3JfZWFjaF9yZWZsb2dfZW50KHJlZnMsIHJlZm5hbWUsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3JlZmxvZ19lbnQoY29uc3QgY2hhciAqcmVmbmFtZSwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLAorCQkJdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gcmVmc19mb3JfZWFjaF9yZWZsb2dfZW50KGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIHJlZm5hbWUsCisJCQkJCWZuLCBjYl9kYXRhKTsKK30KKworaW50IHJlZnNfcmVmbG9nX2V4aXN0cyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiByZWZzLT5iZS0+cmVmbG9nX2V4aXN0cyhyZWZzLCByZWZuYW1lKTsKK30KKworaW50IHJlZmxvZ19leGlzdHMoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gcmVmc19yZWZsb2dfZXhpc3RzKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIHJlZm5hbWUpOworfQorCitpbnQgcmVmc19jcmVhdGVfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICAgICBpbnQgZm9yY2VfY3JlYXRlLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5jcmVhdGVfcmVmbG9nKHJlZnMsIHJlZm5hbWUsIGZvcmNlX2NyZWF0ZSwgZXJyKTsKK30KKworaW50IHNhZmVfY3JlYXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgZm9yY2VfY3JlYXRlLAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXJldHVybiByZWZzX2NyZWF0ZV9yZWZsb2coZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgcmVmbmFtZSwKKwkJCQkgIGZvcmNlX2NyZWF0ZSwgZXJyKTsKK30KKworaW50IHJlZnNfZGVsZXRlX3JlZmxvZyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiByZWZzLT5iZS0+ZGVsZXRlX3JlZmxvZyhyZWZzLCByZWZuYW1lKTsKK30KKworaW50IGRlbGV0ZV9yZWZsb2coY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gcmVmc19kZWxldGVfcmVmbG9nKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIHJlZm5hbWUpOworfQorCitpbnQgcmVmc19yZWZsb2dfZXhwaXJlKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCSAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgICAgICByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJICAgICAgIHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIHNob3VsZF9wcnVuZV9mbiwKKwkJICAgICAgIHJlZmxvZ19leHBpcnlfY2xlYW51cF9mbiBjbGVhbnVwX2ZuLAorCQkgICAgICAgdm9pZCAqcG9saWN5X2NiX2RhdGEpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5yZWZsb2dfZXhwaXJlKHJlZnMsIHJlZm5hbWUsIG9pZCwgZmxhZ3MsCisJCQkJICAgICAgIHByZXBhcmVfZm4sIHNob3VsZF9wcnVuZV9mbiwKKwkJCQkgICAgICAgY2xlYW51cF9mbiwgcG9saWN5X2NiX2RhdGEpOworfQorCitpbnQgcmVmbG9nX2V4cGlyZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkgIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiBwcmVwYXJlX2ZuLAorCQkgIHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIHNob3VsZF9wcnVuZV9mbiwKKwkJICByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4gY2xlYW51cF9mbiwKKwkJICB2b2lkICpwb2xpY3lfY2JfZGF0YSkKK3sKKwlyZXR1cm4gcmVmc19yZWZsb2dfZXhwaXJlKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksCisJCQkJICByZWZuYW1lLCBvaWQsIGZsYWdzLAorCQkJCSAgcHJlcGFyZV9mbiwgc2hvdWxkX3BydW5lX2ZuLAorCQkJCSAgY2xlYW51cF9mbiwgcG9saWN5X2NiX2RhdGEpOworfQorCitpbnQgaW5pdGlhbF9yZWZfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gdHJhbnNhY3Rpb24tPnJlZl9zdG9yZTsKKworCXJldHVybiByZWZzLT5iZS0+aW5pdGlhbF90cmFuc2FjdGlvbl9jb21taXQocmVmcywgdHJhbnNhY3Rpb24sIGVycik7Cit9CisKK2ludCByZWZzX2RlbGV0ZV9yZWZzKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKm1zZywKKwkJICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5kZWxldGVfcmVmcyhyZWZzLCBtc2csIHJlZm5hbWVzLCBmbGFncyk7Cit9CisKK2ludCBkZWxldGVfcmVmcyhjb25zdCBjaGFyICptc2csIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsCisJCXVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gcmVmc19kZWxldGVfcmVmcyhnZXRfbWFpbl9yZWZfc3RvcmUodGhlX3JlcG9zaXRvcnkpLCBtc2csIHJlZm5hbWVzLCBmbGFncyk7Cit9CisKK2ludCByZWZzX3JlbmFtZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqb2xkcmVmLAorCQkgICAgY29uc3QgY2hhciAqbmV3cmVmLCBjb25zdCBjaGFyICpsb2dtc2cpCit7CisJcmV0dXJuIHJlZnMtPmJlLT5yZW5hbWVfcmVmKHJlZnMsIG9sZHJlZiwgbmV3cmVmLCBsb2dtc2cpOworfQorCitpbnQgcmVuYW1lX3JlZihjb25zdCBjaGFyICpvbGRyZWYsIGNvbnN0IGNoYXIgKm5ld3JlZiwgY29uc3QgY2hhciAqbG9nbXNnKQoreworCXJldHVybiByZWZzX3JlbmFtZV9yZWYoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwgb2xkcmVmLCBuZXdyZWYsIGxvZ21zZyk7Cit9CisKK2ludCByZWZzX2NvcHlfZXhpc3RpbmdfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKm9sZHJlZiwKKwkJICAgIGNvbnN0IGNoYXIgKm5ld3JlZiwgY29uc3QgY2hhciAqbG9nbXNnKQoreworCXJldHVybiByZWZzLT5iZS0+Y29weV9yZWYocmVmcywgb2xkcmVmLCBuZXdyZWYsIGxvZ21zZyk7Cit9CisKK2ludCBjb3B5X2V4aXN0aW5nX3JlZihjb25zdCBjaGFyICpvbGRyZWYsIGNvbnN0IGNoYXIgKm5ld3JlZiwgY29uc3QgY2hhciAqbG9nbXNnKQoreworCXJldHVybiByZWZzX2NvcHlfZXhpc3RpbmdfcmVmKGdldF9tYWluX3JlZl9zdG9yZSh0aGVfcmVwb3NpdG9yeSksIG9sZHJlZiwgbmV3cmVmLCBsb2dtc2cpOworfQpkaWZmIC0tZ2l0IGEvcmVmcy5oIGIvcmVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTAyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzLmgKQEAgLTAsMCArMSw4NTggQEAKKyNpZm5kZWYgUkVGU19ICisjZGVmaW5lIFJFRlNfSAorCitzdHJ1Y3Qgb2JqZWN0X2lkOworc3RydWN0IHJlZl9zdG9yZTsKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHN0cmJ1ZjsKK3N0cnVjdCBzdHJpbmdfbGlzdDsKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtOworc3RydWN0IHdvcmt0cmVlOworCisvKgorICogUmVzb2x2ZSBhIHJlZmVyZW5jZSwgcmVjdXJzaXZlbHkgZm9sbG93aW5nIHN5bWJvbGljIHJlZmVyZXJlbmNlcy4KKyAqCisgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIG5vbi1zeW1ib2xpYyByZWZlcmVuY2UgdGhhdCB1bHRpbWF0ZWx5IHBvaW50ZWQKKyAqIGF0IHRoZSByZXNvbHZlZCBvYmplY3QgbmFtZS4gIFRoZSByZXR1cm4gdmFsdWUsIGlmIG5vdCBOVUxMLCBpcyBhCisgKiBwb2ludGVyIGludG8gZWl0aGVyIGEgc3RhdGljIGJ1ZmZlciBvciB0aGUgaW5wdXQgcmVmLgorICoKKyAqIElmIG9pZCBpcyBub24tTlVMTCwgc3RvcmUgdGhlIHJlZmVycmVkLXRvIG9iamVjdCdzIG5hbWUgaW4gaXQuCisgKgorICogSWYgdGhlIHJlZmVyZW5jZSBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYW4gb2JqZWN0LCB0aGUgYmVoYXZpb3IKKyAqIGRlcGVuZHMgb24gdGhlIFJFU09MVkVfUkVGX1JFQURJTkcgZmxhZzoKKyAqCisgKiAtIElmIFJFU09MVkVfUkVGX1JFQURJTkcgaXMgc2V0LCByZXR1cm4gTlVMTC4KKyAqCisgKiAtIElmIFJFU09MVkVfUkVGX1JFQURJTkcgaXMgbm90IHNldCwgY2xlYXIgb2lkIGFuZCByZXR1cm4gdGhlIG5hbWUgb2YKKyAqICAgdGhlIGxhc3QgcmVmZXJlbmNlIG5hbWUgaW4gdGhlIGNoYWluLCB3aGljaCB3aWxsIGVpdGhlciBiZSBhIG5vbi1zeW1ib2xpYworICogICByZWZlcmVuY2Ugb3IgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZS4gIElmIHRoaXMgaXMgYSBwcmVsdWRlIHRvCisgKiAgICJ3cml0aW5nIiB0byB0aGUgcmVmLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBuYW1lIG9mIHRoZSByZWYKKyAqICAgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIGNyZWF0ZWQgb3IgY2hhbmdlZC4KKyAqCisgKiBJZiB0aGUgUkVTT0xWRV9SRUZfTk9fUkVDVVJTRSBmbGFnIGlzIHBhc3NlZCwgb25seSByZXNvbHZlcyBvbmUKKyAqIGxldmVsIG9mIHN5bWJvbGljIHJlZmVyZW5jZS4gIFRoZSB2YWx1ZSBzdG9yZWQgaW4gb2lkIGZvciBhIHN5bWJvbGljCisgKiByZWZlcmVuY2Ugd2lsbCBhbHdheXMgYmUgbnVsbF9vaWQgaW4gdGhpcyBjYXNlLCBhbmQgdGhlIHJldHVybgorICogdmFsdWUgaXMgdGhlIHJlZmVyZW5jZSB0aGF0IHRoZSBzeW1yZWYgcmVmZXJzIHRvIGRpcmVjdGx5LgorICoKKyAqIElmIGZsYWdzIGlzIG5vbi1OVUxMLCBzZXQgdGhlIHZhbHVlIHRoYXQgaXQgcG9pbnRzIHRvIHRoZQorICogY29tYmluYXRpb24gb2YgUkVGX0lTUEFDS0VEIChpZiB0aGUgcmVmZXJlbmNlIHdhcyBmb3VuZCBhbW9uZyB0aGUKKyAqIHBhY2tlZCByZWZlcmVuY2VzKSwgUkVGX0lTU1lNUkVGIChpZiB0aGUgaW5pdGlhbCByZWZlcmVuY2Ugd2FzIGEKKyAqIHN5bWJvbGljIHJlZmVyZW5jZSksIFJFRl9CQURfTkFNRSAoaWYgdGhlIHJlZmVyZW5jZSBuYW1lIGlzIGlsbAorICogZm9ybWVkIC0tLSBzZWUgUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUgYmVsb3cpLCBhbmQgUkVGX0lTQlJPS0VOCisgKiAoaWYgdGhlIHJlZiBpcyBtYWxmb3JtZWQgb3IgaGFzIGEgYmFkIG5hbWUpLiBTZWUgcmVmcy5oIGZvciBtb3JlIGRldGFpbAorICogb24gZWFjaCBmbGFnLgorICoKKyAqIElmIHJlZiBpcyBub3QgYSBwcm9wZXJseS1mb3JtYXR0ZWQsIG5vcm1hbGl6ZWQgcmVmZXJlbmNlLCByZXR1cm4KKyAqIE5VTEwuICBJZiBtb3JlIHRoYW4gTUFYREVQVEggcmVjdXJzaXZlIHN5bWJvbGljIGxvb2t1cHMgYXJlIG5lZWRlZCwKKyAqIGdpdmUgdXAgYW5kIHJldHVybiBOVUxMLgorICoKKyAqIFJFU09MVkVfUkVGX0FMTE9XX0JBRF9OQU1FIGFsbG93cyByZXNvbHZpbmcgcmVmcyBldmVuIHdoZW4gdGhlaXIKKyAqIG5hbWUgaXMgaW52YWxpZCBhY2NvcmRpbmcgdG8gZ2l0LWNoZWNrLXJlZi1mb3JtYXQoMSkuICBJZiB0aGUgbmFtZQorICogaXMgYmFkIHRoZW4gdGhlIHZhbHVlIHN0b3JlZCBpbiBvaWQgd2lsbCBiZSBudWxsX29pZCBhbmQgdGhlIHR3bworICogZmxhZ3MgUkVGX0lTQlJPS0VOIGFuZCBSRUZfQkFEX05BTUUgd2lsbCBiZSBzZXQuCisgKgorICogRXZlbiB3aXRoIFJFU09MVkVfUkVGX0FMTE9XX0JBRF9OQU1FLCBuYW1lcyB0aGF0IGVzY2FwZSB0aGUgcmVmcy8KKyAqIGRpcmVjdG9yeSBhbmQgZG8gbm90IGNvbnNpc3Qgb2YgYWxsIGNhcHMgYW5kIHVuZGVyc2NvcmVzIGNhbm5vdCBiZQorICogcmVzb2x2ZWQuIFRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwgZm9yIHN1Y2ggcmVmIG5hbWVzLgorICogQ2FwcyBhbmQgdW5kZXJzY29yZXMgcmVmZXJzIHRvIHRoZSBzcGVjaWFsIHJlZnMsIHN1Y2ggYXMgSEVBRCwKKyAqIEZFVENIX0hFQUQgYW5kIGZyaWVuZHMsIHRoYXQgYWxsIGxpdmUgb3V0c2lkZSBvZiB0aGUgcmVmcy8gZGlyZWN0b3J5LgorICovCisjZGVmaW5lIFJFU09MVkVfUkVGX1JFQURJTkcgMHgwMQorI2RlZmluZSBSRVNPTFZFX1JFRl9OT19SRUNVUlNFIDB4MDIKKyNkZWZpbmUgUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUgMHgwNAorCitjb25zdCBjaGFyICpyZWZzX3Jlc29sdmVfcmVmX3Vuc2FmZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICBpbnQgcmVzb2x2ZV9mbGFncywKKwkJCQkgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgICBpbnQgKmZsYWdzKTsKK2NvbnN0IGNoYXIgKnJlc29sdmVfcmVmX3Vuc2FmZShjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCAqZmxhZ3MpOworCitjaGFyICpyZWZzX3Jlc29sdmVfcmVmZHVwKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkJICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCAqZmxhZ3MpOworY2hhciAqcmVzb2x2ZV9yZWZkdXAoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHJlc29sdmVfZmxhZ3MsCisJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgKmZsYWdzKTsKKworaW50IHJlZnNfcmVhZF9yZWZfZnVsbChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkgICAgICAgaW50IHJlc29sdmVfZmxhZ3MsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50ICpmbGFncyk7CitpbnQgcmVhZF9yZWZfZnVsbChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywKKwkJICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCAqZmxhZ3MpOworaW50IHJlYWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qCisgKiBSZXR1cm4gMCBpZiBhIHJlZmVyZW5jZSBuYW1lZCByZWZuYW1lIGNvdWxkIGJlIGNyZWF0ZWQgd2l0aG91dAorICogY29uZmxpY3Rpbmcgd2l0aCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyByZWZlcmVuY2UuIE90aGVyd2lzZSwKKyAqIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGFuZCB3cml0ZSBhbiBleHBsYW5hdGlvbiB0byBlcnIuIElmIGV4dHJhcworICogaXMgbm9uLU5VTEwsIGl0IGlzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHJlZm5hbWVzIHdpdGggd2hpY2ggcmVmbmFtZQorICogaXMgbm90IGFsbG93ZWQgdG8gY29uZmxpY3QuIElmIHNraXAgaXMgbm9uLU5VTEwsIGlnbm9yZSBwb3RlbnRpYWwKKyAqIGNvbmZsaWN0cyB3aXRoIHJlZnMgaW4gc2tpcCAoZS5nLiwgYmVjYXVzZSB0aGV5IGFyZSBzY2hlZHVsZWQgZm9yCisgKiBkZWxldGlvbiBpbiB0aGUgc2FtZSBvcGVyYXRpb24pLiBCZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgdGhlIHNhbWUKKyAqIG5hbWUgaXMgbGlzdGVkIGluIGJvdGggZXh0cmFzIGFuZCBza2lwLgorICoKKyAqIFR3byByZWZlcmVuY2UgbmFtZXMgY29uZmxpY3QgaWYgb25lIG9mIHRoZW0gZXhhY3RseSBtYXRjaGVzIHRoZQorICogbGVhZGluZyBjb21wb25lbnRzIG9mIHRoZSBvdGhlcjsgZS5nLiwgImZvby9iYXIiIGNvbmZsaWN0cyB3aXRoCisgKiBib3RoICJmb28iIGFuZCB3aXRoICJmb28vYmFyL2JheiIgYnV0IG5vdCB3aXRoICJmb28vYmFyIiBvcgorICogImZvby9iYXJiYWRvcyIuCisgKgorICogZXh0cmFzIGFuZCBza2lwIG11c3QgYmUgc29ydGVkLgorICovCisKK2ludCByZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFzLAorCQkJCSAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpza2lwLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworaW50IHJlZl9leGlzdHMoY29uc3QgY2hhciAqcmVmbmFtZSk7CisKK2ludCBzaG91bGRfYXV0b2NyZWF0ZV9yZWZsb2coY29uc3QgY2hhciAqcmVmbmFtZSk7CisKK2ludCBpc19icmFuY2goY29uc3QgY2hhciAqcmVmbmFtZSk7CisKK2ludCByZWZzX2luaXRfZGIoc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIElmIHJlZm5hbWUgaXMgYSBub24tc3ltYm9saWMgcmVmZXJlbmNlIHRoYXQgcmVmZXJzIHRvIGEgdGFnIG9iamVjdCwKKyAqIGFuZCB0aGUgdGFnIGNhbiBiZSAocmVjdXJzaXZlbHkpIGRlcmVmZXJlbmNlZCB0byBhIG5vbi10YWcgb2JqZWN0LAorICogc3RvcmUgdGhlIG9iamVjdCBJRCBvZiB0aGUgcmVmZXJyZWQtdG8gb2JqZWN0IHRvIG9pZCBhbmQgcmV0dXJuIDAuCisgKiBJZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUuCisgKiBTeW1ib2xpYyByZWZlcmVuY2VzIGFyZSBjb25zaWRlcmVkIHVucGVlbGFibGUsIGV2ZW4gaWYgdGhleQorICogdWx0aW1hdGVseSByZXNvbHZlIHRvIGEgcGVlbGFibGUgdGFnLgorICovCitpbnQgcmVmc19wZWVsX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CitpbnQgcGVlbF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoqCisgKiBSZXNvbHZlIHJlZm5hbWUgaW4gdGhlIG5lc3RlZCAiZ2l0bGluayIgcmVwb3NpdG9yeSBpbiB0aGUgc3BlY2lmaWVkCisgKiBzdWJtb2R1bGUgKHdoaWNoIG11c3QgYmUgbm9uLU5VTEwpLiBJZiB0aGUgcmVzb2x1dGlvbiBpcworICogc3VjY2Vzc2Z1bCwgcmV0dXJuIDAgYW5kIHNldCBvaWQgdG8gdGhlIG5hbWUgb2YgdGhlIG9iamVjdDsKKyAqIG90aGVyd2lzZSwgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUuCisgKi8KK2ludCByZXNvbHZlX2dpdGxpbmtfcmVmKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZmYgYWJicmV2X25hbWUgaXMgYSBwb3NzaWJsZSBhYmJyZXZpYXRpb24gZm9yCisgKiBmdWxsX25hbWUgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBkZWZpbmVkIGJ5IHJlZl9yZXZfcGFyc2VfcnVsZXMgaW4KKyAqIHJlZnMuYy4KKyAqLworaW50IHJlZm5hbWVfbWF0Y2goY29uc3QgY2hhciAqYWJicmV2X25hbWUsIGNvbnN0IGNoYXIgKmZ1bGxfbmFtZSk7CisKKy8qCisgKiBHaXZlbiBhICdwcmVmaXgnIGV4cGFuZCBpdCBieSB0aGUgcnVsZXMgaW4gJ3JlZl9yZXZfcGFyc2VfcnVsZXMnIGFuZCBhZGQKKyAqIHRoZSByZXN1bHRzIHRvICdwcmVmaXhlcycKKyAqLworc3RydWN0IGFyZ3ZfYXJyYXk7Cit2b2lkIGV4cGFuZF9yZWZfcHJlZml4KHN0cnVjdCBhcmd2X2FycmF5ICpwcmVmaXhlcywgY29uc3QgY2hhciAqcHJlZml4KTsKKworaW50IGV4cGFuZF9yZWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjaGFyICoqcmVmKTsKK2ludCByZXBvX2R3aW1fcmVmKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY2hhciAqKnJlZik7CitpbnQgcmVwb19kd2ltX2xvZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNoYXIgKipyZWYpOworaW50IGR3aW1fcmVmKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjaGFyICoqcmVmKTsKK2ludCBkd2ltX2xvZyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY2hhciAqKnJlZik7CisKKy8qCisgKiBBIHJlZl90cmFuc2FjdGlvbiByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiByZWZlcmVuY2UgdXBkYXRlcyB0aGF0CisgKiBzaG91bGQgc3VjY2VlZCBvciBmYWlsIHRvZ2V0aGVyLgorICoKKyAqIENhbGxpbmcgc2VxdWVuY2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgYHN0cnVjdCByZWZfdHJhbnNhY3Rpb25gIGJ5IGNhbGxpbmcKKyAqICAgYHJlZl90cmFuc2FjdGlvbl9iZWdpbigpYC4KKyAqCisgKiAtIFNwZWNpZnkgdGhlIGludGVuZGVkIHJlZiB1cGRhdGVzIGJ5IGNhbGxpbmcgb25lIG9yIG1vcmUgb2YgdGhlCisgKiAgIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgKiAgIC0gYHJlZl90cmFuc2FjdGlvbl91cGRhdGUoKWAKKyAqICAgLSBgcmVmX3RyYW5zYWN0aW9uX2NyZWF0ZSgpYAorICogICAtIGByZWZfdHJhbnNhY3Rpb25fZGVsZXRlKClgCisgKiAgIC0gYHJlZl90cmFuc2FjdGlvbl92ZXJpZnkoKWAKKyAqCisgKiAtIFRoZW4gZWl0aGVyOgorICoKKyAqICAgLSBPcHRpb25hbGx5IGNhbGwgYHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKClgIHRvIHByZXBhcmUgdGhlCisgKiAgICAgdHJhbnNhY3Rpb24uIFRoaXMgbG9ja3MgYWxsIHJlZmVyZW5jZXMsIGNoZWNrcyBwcmVjb25kaXRpb25zLAorICogICAgIGV0Yy4gYnV0IGRvZXNuJ3QgZmluYWxpemUgYW55dGhpbmcuIElmIHRoaXMgc3RlcCBmYWlscywgdGhlCisgKiAgICAgdHJhbnNhY3Rpb24gaGFzIGJlZW4gY2xvc2VkIGFuZCBjYW4gb25seSBiZSBmcmVlZC4gSWYgdGhpcyBzdGVwCisgKiAgICAgc3VjY2VlZHMsIHRoZW4gYHJlZl90cmFuc2FjdGlvbl9jb21taXQoKWAgaXMgYWxtb3N0IGNlcnRhaW4gdG8KKyAqICAgICBzdWNjZWVkLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGNhbGwgYHJlZl90cmFuc2FjdGlvbl9hYm9ydCgpYAorICogICAgIGlmIHlvdSBkZWNpZGUgbm90IHRvIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24gYWZ0ZXIgYWxsLgorICoKKyAqICAgLSBDYWxsIGByZWZfdHJhbnNhY3Rpb25fY29tbWl0KClgIHRvIGV4ZWN1dGUgdGhlIHRyYW5zYWN0aW9uLAorICogICAgIG1ha2UgdGhlIGNoYW5nZXMgcGVybWFuZW50LCBhbmQgcmVsZWFzZSBhbGwgbG9ja3MuIElmIHlvdQorICogICAgIGhhdmVuJ3QgYWxyZWFkeSBjYWxsZWQgYHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKClgLCB0aGVuCisgKiAgICAgYHJlZl90cmFuc2FjdGlvbl9jb21taXQoKWAgY2FsbHMgaXQgZm9yIHlvdS4KKyAqCisgKiAgIE9yCisgKgorICogICAtIENhbGwgYGluaXRpYWxfcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYCBpZiB0aGUgcmVmIGRhdGFiYXNlIGlzCisgKiAgICAga25vd24gdG8gYmUgZW1wdHkgYW5kIGhhdmUgbm8gb3RoZXIgd3JpdGVycyAoZS5nLiBkdXJpbmcKKyAqICAgICBjbG9uZSkuIFRoaXMgaXMgbGlrZWx5IHRvIGJlIG11Y2ggZmFzdGVyIHRoYW4KKyAqICAgICBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYC4gYHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKClgIHNob3VsZAorICogICAgICpub3QqIGJlIGNhbGxlZCBiZWZvcmUgYGluaXRpYWxfcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYC4KKyAqCisgKiAtIFRoZW4gZmluYWxseSwgY2FsbCBgcmVmX3RyYW5zYWN0aW9uX2ZyZWUoKWAgdG8gZnJlZSB0aGUKKyAqICAgYHJlZl90cmFuc2FjdGlvbmAgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQXQgYW55IHRpbWUgYmVmb3JlIGNhbGxpbmcgYHJlZl90cmFuc2FjdGlvbl9jb21taXQoKWAsIHlvdSBjYW4gY2FsbAorICogYHJlZl90cmFuc2FjdGlvbl9hYm9ydCgpYCB0byBhYm9ydCB0aGUgdHJhbnNhY3Rpb24sIHJvbGxiYWNrIGFueQorICogbG9ja3MsIGFuZCBmcmVlIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcyAoaW5jbHVkaW5nIHRoZQorICogYHJlZl90cmFuc2FjdGlvbmAgZGF0YSBzdHJ1Y3R1cmUpLgorICoKKyAqIFB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyLCBhIGNvbXBsZXRlIHJlZmVyZW5jZSB1cGRhdGUgbG9va3MgbGlrZQorICoKKyAqICAgICAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisgKiAgICAgICAgIHN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisgKiAgICAgICAgIGludCByZXQgPSAwOworICoKKyAqICAgICAgICAgdHJhbnNhY3Rpb24gPSByZWZfc3RvcmVfdHJhbnNhY3Rpb25fYmVnaW4ocmVmcywgJmVycik7CisgKiAgICAgICAgIGlmICghdHJhbnNhY3Rpb24gfHwKKyAqICAgICAgICAgICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUoLi4uKSB8fAorICogICAgICAgICAgICAgcmVmX3RyYW5zYWN0aW9uX2NyZWF0ZSguLi4pIHx8CisgKiAgICAgICAgICAgICAuLi5ldGMuLi4gfHwKKyAqICAgICAgICAgICAgIHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKSB7CisgKiAgICAgICAgICAgICAgICAgZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisgKiAgICAgICAgICAgICAgICAgcmV0ID0gLTE7CisgKiAgICAgICAgIH0KKyAqICAgICAgICAgcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworICogICAgICAgICBzdHJidWZfcmVsZWFzZSgmZXJyKTsKKyAqICAgICAgICAgcmV0dXJuIHJldDsKKyAqCisgKiBFcnJvciBoYW5kbGluZworICogLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBPbiBlcnJvciwgdHJhbnNhY3Rpb24gZnVuY3Rpb25zIGFwcGVuZCBhIG1lc3NhZ2UgYWJvdXQgd2hhdAorICogd2VudCB3cm9uZyB0byB0aGUgJ2VycicgYXJndW1lbnQuICBUaGUgbWVzc2FnZSBtZW50aW9ucyB3aGF0CisgKiByZWYgd2FzIGJlaW5nIHVwZGF0ZWQgKGlmIGFueSkgd2hlbiB0aGUgZXJyb3Igb2NjdXJyZWQgc28gaXQKKyAqIGNhbiBiZSBwYXNzZWQgdG8gJ2RpZScgb3IgJ2Vycm9yJyBhcy1pcy4KKyAqCisgKiBUaGUgbWVzc2FnZSBpcyBhcHBlbmRlZCB0byBlcnIgd2l0aG91dCBmaXJzdCBjbGVhcmluZyBlcnIuCisgKiBlcnIgd2lsbCBub3QgYmUgJ1xuJyB0ZXJtaW5hdGVkLgorICoKKyAqIENhdmVhdHMKKyAqIC0tLS0tLS0KKyAqCisgKiBOb3RlIHRoYXQgbm8gbG9ja3MgYXJlIHRha2VuLCBhbmQgbm8gcmVmcyBhcmUgcmVhZCwgdW50aWwKKyAqIGByZWZfdHJhbnNhY3Rpb25fcHJlcGFyZSgpYCBvciBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYCBpcworICogY2FsbGVkLiBTbywgZm9yIGV4YW1wbGUsIGByZWZfdHJhbnNhY3Rpb25fdmVyaWZ5KClgIHdvbid0IHJlcG9ydCBhCisgKiB2ZXJpZmljYXRpb24gZmFpbHVyZSB1bnRpbCB0aGUgY29tbWl0IGlzIGF0dGVtcHRlZC4KKyAqLworc3RydWN0IHJlZl90cmFuc2FjdGlvbjsKKworLyoKKyAqIEJpdCB2YWx1ZXMgc2V0IGluIHRoZSBmbGFncyBhcmd1bWVudCBwYXNzZWQgdG8gZWFjaF9yZWZfZm4oKSBhbmQKKyAqIHN0b3JlZCBpbiByZWZfaXRlcmF0b3I6OmZsYWdzLiBPdGhlciBiaXRzIGFyZSBmb3IgaW50ZXJuYWwgdXNlCisgKiBvbmx5OgorICovCisKKy8qIFJlZmVyZW5jZSBpcyBhIHN5bWJvbGljIHJlZmVyZW5jZS4gKi8KKyNkZWZpbmUgUkVGX0lTU1lNUkVGIDB4MDEKKworLyogUmVmZXJlbmNlIGlzIGEgcGFja2VkIHJlZmVyZW5jZS4gKi8KKyNkZWZpbmUgUkVGX0lTUEFDS0VEIDB4MDIKKworLyoKKyAqIFJlZmVyZW5jZSBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYW4gb2JqZWN0IG5hbWU6IGRhbmdsaW5nIHN5bWJvbGljCisgKiByZWZlcmVuY2UgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpLCBjb3JydXB0IHJlZmVyZW5jZSBmaWxlLAorICogcmVmZXJlbmNlIGV4aXN0cyBidXQgbmFtZSBpcyBiYWQsIG9yIHN5bWJvbGljIHJlZmVyZW5jZSByZWZlcnMgdG8KKyAqIGlsbC1mb3JtYXR0ZWQgcmVmZXJlbmNlIG5hbWUuCisgKi8KKyNkZWZpbmUgUkVGX0lTQlJPS0VOIDB4MDQKKworLyoKKyAqIFJlZmVyZW5jZSBuYW1lIGlzIG5vdCB3ZWxsIGZvcm1lZC4KKyAqCisgKiBTZWUgZ2l0LWNoZWNrLXJlZi1mb3JtYXQoMSkgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHdlbGwgZm9ybWVkIHJlZiBuYW1lcy4KKyAqLworI2RlZmluZSBSRUZfQkFEX05BTUUgMHgwOAorCisvKgorICogVGhlIHNpZ25hdHVyZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgZm9yX2VhY2hfKigpCisgKiBmdW5jdGlvbnMgYmVsb3cuICBUaGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgdGhlIHJlZm5hbWUgYW5kIG9pZAorICogYXJndW1lbnRzIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEKKyAqIHNpbmdsZSBjYWxsYmFjayBpbnZvY2F0aW9uLgorICovCit0eXBlZGVmIGludCBlYWNoX3JlZl9mbihjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpOworCisvKgorICogVGhlIHNhbWUgYXMgZWFjaF9yZWZfZm4sIGJ1dCBhbHNvIHdpdGggYSByZXBvc2l0b3J5IGFyZ3VtZW50IHRoYXQKKyAqIGNvbnRhaW5zIHRoZSByZXBvc2l0b3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsbGJhY2suCisgKi8KK3R5cGVkZWYgaW50IGVhY2hfcmVwb19yZWZfZm4oc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgaW50IGZsYWdzLAorCQkJICAgICB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGludm9rZSB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvcgorICogZWFjaCByZWZlcmVuY2UgaW5kaWNhdGVkLiAgSWYgdGhlIGZ1bmN0aW9uIGV2ZXIgcmV0dXJucyBhIG5vbnplcm8KKyAqIHZhbHVlLCBzdG9wIHRoZSBpdGVyYXRpb24gYW5kIHJldHVybiB0aGF0IHZhbHVlLiAgUGxlYXNlIG5vdGUgdGhhdAorICogaXQgaXMgbm90IHNhZmUgdG8gbW9kaWZ5IHJlZmVyZW5jZXMgd2hpbGUgYW4gaXRlcmF0aW9uIGlzIGluCisgKiBwcm9ncmVzcywgdW5sZXNzIHRoZSBzYW1lIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9jYXRpb24gdGhhdAorICogbW9kaWZpZXMgdGhlIHJlZmVyZW5jZSBhbHNvIHJldHVybnMgYSBub256ZXJvIHZhbHVlIHRvIGltbWVkaWF0ZWx5CisgKiBzdG9wIHRoZSBpdGVyYXRpb24uIFJldHVybmVkIHJlZmVyZW5jZXMgYXJlIHNvcnRlZC4KKyAqLworaW50IHJlZnNfaGVhZF9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgcmVmc19mb3JfZWFjaF9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJICAgICAgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworaW50IHJlZnNfZm9yX2VhY2hfcmVmX2luKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgcmVmc19mb3JfZWFjaF90YWdfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkgIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCByZWZzX2Zvcl9lYWNoX2JyYW5jaF9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCSAgICAgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworaW50IHJlZnNfZm9yX2VhY2hfcmVtb3RlX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJICAgICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CisKKy8qIGp1c3QgaXRlcmF0ZXMgdGhlIGhlYWQgcmVmLiAqLworaW50IGhlYWRfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyogaXRlcmF0ZXMgYWxsIHJlZnMuICovCitpbnQgZm9yX2VhY2hfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyoqCisgKiBpdGVyYXRlcyBhbGwgcmVmcyB3aGljaCBoYXZlIGEgZGVmaW5lZCBwcmVmaXggYW5kIHN0cmlwcyB0aGF0IHByZWZpeCBmcm9tCisgKiB0aGUgcGFzc2VkIHZhcmlhYmxlIHJlZm5hbWUuCisgKi8KK2ludCBmb3JfZWFjaF9yZWZfaW4oY29uc3QgY2hhciAqcHJlZml4LCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CisKK2ludCByZWZzX2Zvcl9lYWNoX2Z1bGxyZWZfaW4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGJyb2tlbik7CitpbnQgZm9yX2VhY2hfZnVsbHJlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhLAorCQkJdW5zaWduZWQgaW50IGJyb2tlbik7CisKKy8qKgorICogaXRlcmF0ZSByZWZzIGZyb20gdGhlIHJlc3BlY3RpdmUgYXJlYS4KKyAqLworaW50IGZvcl9lYWNoX3RhZ19yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX2JyYW5jaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX3JlbW90ZV9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX3JlcGxhY2VfcmVmKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBlYWNoX3JlcG9fcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyogaXRlcmF0ZXMgYWxsIHJlZnMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIGdsb2IgcGF0dGVybi4gKi8KK2ludCBmb3JfZWFjaF9nbG9iX3JlZihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwgdm9pZCAqY2JfZGF0YSk7CisKK2ludCBmb3JfZWFjaF9nbG9iX3JlZl9pbihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCSBjb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKmNiX2RhdGEpOworCitpbnQgaGVhZF9yZWZfbmFtZXNwYWNlZChlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfbmFtZXNwYWNlZF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisvKiBjYW4gYmUgdXNlZCB0byBsZWFybiBhYm91dCBicm9rZW4gcmVmIGFuZCBzeW1yZWYgKi8KK2ludCByZWZzX2Zvcl9lYWNoX3Jhd3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitpbnQgZm9yX2VhY2hfcmF3cmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIE5vcm1hbGl6ZXMgcGFydGlhbCByZWZzIHRvIHRoZWlyIGZ1bGx5IHF1YWxpZmllZCBmb3JtLgorICogV2lsbCBwcmVwZW5kIDxwcmVmaXg+IHRvIHRoZSA8cGF0dGVybj4gaWYgaXQgZG9lc24ndCBzdGFydCB3aXRoICdyZWZzLycuCisgKiA8cHJlZml4PiB3aWxsIGRlZmF1bHQgdG8gJ3JlZnMvJyBpZiBOVUxMLgorICoKKyAqIGl0ZW0uc3RyaW5nIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuCisgKiBpdGVtLnV0aWwgd2lsbCBiZSBzZXQgdG8gTlVMTCBpZiA8cGF0dGVybj4gY29udGFpbnMgZ2xvYiBjaGFyYWN0ZXJzLCBvcgorICogbm9uLU5VTEwgaWYgaXQgZG9lc24ndC4KKyAqLwordm9pZCBub3JtYWxpemVfZ2xvYl9yZWYoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCWNvbnN0IGNoYXIgKnBhdHRlcm4pOworCisvKgorICogUmV0dXJucyAwIGlmIHJlZm5hbWUgbWF0Y2hlcyBhbnkgb2YgdGhlIGV4Y2x1ZGVfcGF0dGVybnMsIG9yIGlmIGl0IGRvZXNuJ3QKKyAqIG1hdGNoIGFueSBvZiB0aGUgaW5jbHVkZV9wYXR0ZXJucy4gUmV0dXJucyAxIG90aGVyd2lzZS4KKyAqCisgKiBJZiBwYXR0ZXJuIGxpc3QgaXMgTlVMTCBvciBlbXB0eSwgbWF0Y2hpbmcgYWdhaW5zdCB0aGF0IGxpc3QgaXMgc2tpcHBlZC4KKyAqIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgbWF0Y2hpbmcgZXZlcnl0aGluZyBieSBkZWZhdWx0LCB1bmxlc3MgdGhlIHVzZXIKKyAqIHNwZWNpZmllcyBydWxlcyBvdGhlcndpc2UuCisgKi8KK2ludCByZWZfZmlsdGVyX21hdGNoKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICppbmNsdWRlX3BhdHRlcm5zLAorCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXhjbHVkZV9wYXR0ZXJucyk7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqaGFzX2dsb2Jfc3BlY2lhbHMoY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwlyZXR1cm4gc3RycGJyayhwYXR0ZXJuLCAiPypbIik7Cit9CisKK3ZvaWQgd2Fybl9kYW5nbGluZ19zeW1yZWYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm1zZ19mbXQsIGNvbnN0IGNoYXIgKnJlZm5hbWUpOwordm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZnMoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm1zZ19mbXQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzKTsKKworLyoKKyAqIEZsYWdzIGZvciBjb250cm9sbGluZyBiZWhhdmlvdXIgb2YgcGFja19yZWZzKCkKKyAqIFBBQ0tfUkVGU19QUlVORTogUHJ1bmUgbG9vc2UgcmVmcyBhZnRlciBwYWNraW5nCisgKiBQQUNLX1JFRlNfQUxMOiAgIFBhY2sgX2FsbF8gcmVmcywgbm90IGp1c3QgdGFncyBhbmQgYWxyZWFkeSBwYWNrZWQgcmVmcworICovCisjZGVmaW5lIFBBQ0tfUkVGU19QUlVORSAweDAwMDEKKyNkZWZpbmUgUEFDS19SRUZTX0FMTCAgIDB4MDAwMgorCisvKgorICogV3JpdGUgYSBwYWNrZWQtcmVmcyBmaWxlIGZvciB0aGUgY3VycmVudCByZXBvc2l0b3J5LgorICogZmxhZ3M6IENvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZSBQQUNLX1JFRlNfKiBmbGFncy4KKyAqLworaW50IHJlZnNfcGFja19yZWZzKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qCisgKiBTZXR1cCByZWZsb2cgYmVmb3JlIHVzaW5nLiBGaWxsIGluIGVyciBhbmQgcmV0dXJuIC0xIG9uIGZhaWx1cmUuCisgKi8KK2ludCByZWZzX2NyZWF0ZV9yZWZsb2coc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgICAgIGludCBmb3JjZV9jcmVhdGUsIHN0cnVjdCBzdHJidWYgKmVycik7CitpbnQgc2FmZV9jcmVhdGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmb3JjZV9jcmVhdGUsIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qKiBSZWFkcyBsb2cgZm9yIHRoZSB2YWx1ZSBvZiByZWYgZHVyaW5nIGF0X3RpbWUuICoqLworaW50IHJlYWRfcmVmX2F0KHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCWNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGludCBmbGFncywKKwkJdGltZXN0YW1wX3QgYXRfdGltZSwgaW50IGNudCwKKwkJc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjaGFyICoqbXNnLAorCQl0aW1lc3RhbXBfdCAqY3V0b2ZmX3RpbWUsIGludCAqY3V0b2ZmX3R6LCBpbnQgKmN1dG9mZl9jbnQpOworCisvKiogQ2hlY2sgaWYgYSBwYXJ0aWN1bGFyIHJlZmxvZyBleGlzdHMgKi8KK2ludCByZWZzX3JlZmxvZ19leGlzdHMoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSk7CitpbnQgcmVmbG9nX2V4aXN0cyhjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyoKKyAqIERlbGV0ZSB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZS4gSWYgb2xkX29pZCBpcyBub24tTlVMTCwgdGhlbgorICogdmVyaWZ5IHRoYXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlZmVyZW5jZSBpcyBvbGRfb2lkIGJlZm9yZQorICogZGVsZXRpbmcgaXQuIElmIG9sZF9vaWQgaXMgTlVMTCwgZGVsZXRlIHRoZSByZWZlcmVuY2UgaWYgaXQKKyAqIGV4aXN0cywgcmVnYXJkbGVzcyBvZiBpdHMgb2xkIHZhbHVlLiBJdCBpcyBhbiBlcnJvciBmb3Igb2xkX29pZCB0bworICogYmUgbnVsbF9vaWQuIG1zZyBhbmQgZmxhZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRvCisgKiByZWZfdHJhbnNhY3Rpb25fZGVsZXRlKCkuCisgKi8KK2ludCByZWZzX2RlbGV0ZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqbXNnLAorCQkgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IGRlbGV0ZV9yZWYoY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisvKgorICogRGVsZXRlIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlcy4gSWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcywgZW1pdAorICogZXJyb3JzIGJ1dCBhdHRlbXB0IHRvIGtlZXAgZ29pbmcgKGkuZS4sIHRoZSBkZWxldGVzIGFyZSBub3QgZG9uZSBpbgorICogYW4gYWxsLW9yLW5vdGhpbmcgdHJhbnNhY3Rpb24pLiBtc2cgYW5kIGZsYWdzIGFyZSBwYXNzZWQgdGhyb3VnaCB0bworICogcmVmX3RyYW5zYWN0aW9uX2RlbGV0ZSgpLgorICovCitpbnQgcmVmc19kZWxldGVfcmVmcyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICptc2csCisJCSAgICAgc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcywgdW5zaWduZWQgaW50IGZsYWdzKTsKK2ludCBkZWxldGVfcmVmcyhjb25zdCBjaGFyICptc2csIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMsCisJCXVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qKiBEZWxldGUgYSByZWZsb2cgKi8KK2ludCByZWZzX2RlbGV0ZV9yZWZsb2coc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSk7CitpbnQgZGVsZXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyogaXRlcmF0ZSBvdmVyIHJlZmxvZyBlbnRyaWVzICovCit0eXBlZGVmIGludCBlYWNoX3JlZmxvZ19lbnRfZm4oCisJCXN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCWNvbnN0IGNoYXIgKmNvbW1pdHRlciwgdGltZXN0YW1wX3QgdGltZXN0YW1wLAorCQlpbnQgdHosIGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqY2JfZGF0YSk7CisKK2ludCByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnQoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgICAgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICAgIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwKKwkJCQkgICAgIHZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX3JlZmxvZ19lbnQoY29uc3QgY2hhciAqcmVmbmFtZSwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UoY29uc3QgY2hhciAqcmVmbmFtZSwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIENhbGxzIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gZm9yIGVhY2ggcmVmbG9nIGZpbGUgdW50aWwgaXQgcmV0dXJucyBub256ZXJvLAorICogYW5kIHJldHVybnMgdGhlIHZhbHVlLiBSZWZsb2cgZmlsZSBvcmRlciBpcyB1bnNwZWNpZmllZC4KKyAqLworaW50IHJlZnNfZm9yX2VhY2hfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZWZsb2coZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisjZGVmaW5lIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwgMQorI2RlZmluZSBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTiAyCisKKy8qCisgKiBSZXR1cm4gMCBpZmYgcmVmbmFtZSBoYXMgdGhlIGNvcnJlY3QgZm9ybWF0IGZvciBhIHJlZm5hbWUgYWNjb3JkaW5nCisgKiB0byB0aGUgcnVsZXMgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0LgorICogSWYgUkVGTkFNRV9BTExPV19PTkVMRVZFTCBpcyBzZXQgaW4gZmxhZ3MsIHRoZW4gYWNjZXB0IG9uZS1sZXZlbAorICogcmVmZXJlbmNlIG5hbWVzLiAgSWYgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gaXMgc2V0IGluIGZsYWdzLCB0aGVuCisgKiBhbGxvdyBhIHNpbmdsZSAiKiIgd2lsZGNhcmQgY2hhcmFjdGVyIGluIHRoZSByZWZzcGVjLiBObyBsZWFkaW5nIG9yCisgKiByZXBlYXRlZCBzbGFzaGVzIGFyZSBhY2NlcHRlZC4KKyAqLworaW50IGNoZWNrX3JlZm5hbWVfZm9ybWF0KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmbGFncyk7CisKKy8qCisgKiBBcHBseSB0aGUgcnVsZXMgZnJvbSBjaGVja19yZWZuYW1lX2Zvcm1hdCwgYnV0IG11dGF0ZSB0aGUgcmVzdWx0IHVudGlsIGl0CisgKiBpcyBhY2NlcHRhYmxlLCBhbmQgcGxhY2UgdGhlIHJlc3VsdCBpbiAib3V0Ii4KKyAqLwordm9pZCBzYW5pdGl6ZV9yZWZuYW1lX2NvbXBvbmVudChjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpOworCitjb25zdCBjaGFyICpwcmV0dGlmeV9yZWZuYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCitjaGFyICpyZWZzX3Nob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHN0cmljdCk7CitjaGFyICpzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgc3RyaWN0KTsKKworLyoqIHJlbmFtZSByZWYsIHJldHVybiAwIG9uIHN1Y2Nlc3MgKiovCitpbnQgcmVmc19yZW5hbWVfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKm9sZHJlZiwKKwkJICAgIGNvbnN0IGNoYXIgKm5ld3JlZiwgY29uc3QgY2hhciAqbG9nbXNnKTsKK2ludCByZW5hbWVfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLAorCQkJY29uc3QgY2hhciAqbG9nbXNnKTsKKworLyoqIGNvcHkgcmVmLCByZXR1cm4gMCBvbiBzdWNjZXNzICoqLworaW50IHJlZnNfY29weV9leGlzdGluZ19yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqb2xkcmVmLAorCQkgICAgY29uc3QgY2hhciAqbmV3cmVmLCBjb25zdCBjaGFyICpsb2dtc2cpOworaW50IGNvcHlfZXhpc3RpbmdfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZiwgY29uc3QgY2hhciAqbmV3cmVmLAorCQkJY29uc3QgY2hhciAqbG9nbXNnKTsKKworaW50IHJlZnNfY3JlYXRlX3N5bXJlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkgICAgICAgY29uc3QgY2hhciAqdGFyZ2V0LCBjb25zdCBjaGFyICpsb2dtc2cpOworaW50IGNyZWF0ZV9zeW1yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBjb25zdCBjaGFyICpsb2dtc2cpOworCitlbnVtIGFjdGlvbl9vbl9lcnIgeworCVVQREFURV9SRUZTX01TR19PTl9FUlIsCisJVVBEQVRFX1JFRlNfRElFX09OX0VSUiwKKwlVUERBVEVfUkVGU19RVUlFVF9PTl9FUlIKK307CisKKy8qCisgKiBCZWdpbiBhIHJlZmVyZW5jZSB0cmFuc2FjdGlvbi4gIFRoZSByZWZlcmVuY2UgdHJhbnNhY3Rpb24gbXVzdAorICogYmUgZnJlZWQgYnkgY2FsbGluZyByZWZfdHJhbnNhY3Rpb25fZnJlZSgpLgorICovCitzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICpyZWZfc3RvcmVfdHJhbnNhY3Rpb25fYmVnaW4oc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqcmVmX3RyYW5zYWN0aW9uX2JlZ2luKHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qCisgKiBSZWZlcmVuY2UgdHJhbnNhY3Rpb24gdXBkYXRlcworICoKKyAqIFRoZSBmb2xsb3dpbmcgZm91ciBmdW5jdGlvbnMgYWRkIGEgcmVmZXJlbmNlIGNoZWNrIG9yIHVwZGF0ZSB0byBhCisgKiByZWZfdHJhbnNhY3Rpb24uICBUaGV5IGhhdmUgc29tZSBjb21tb24gc2ltaWxhciBwYXJhbWV0ZXJzOgorICoKKyAqICAgICB0cmFuc2FjdGlvbiAtLSBhIHBvaW50ZXIgdG8gYW4gb3BlbiByZWZfdHJhbnNhY3Rpb24sIG9idGFpbmVkCisgKiAgICAgICAgIGZyb20gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCkuCisgKgorICogICAgIHJlZm5hbWUgLS0gdGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSB0byBiZSBhZmZlY3RlZC4KKyAqCisgKiAgICAgbmV3X29pZCAtLSB0aGUgb2JqZWN0IElEIHRoYXQgc2hvdWxkIGJlIHNldCB0byBiZSB0aGUgbmV3IHZhbHVlCisgKiAgICAgICAgIG9mIHRoZSByZWZlcmVuY2UuIFNvbWUgZnVuY3Rpb25zIGFsbG93IHRoaXMgcGFyYW1ldGVyIHRvIGJlCisgKiAgICAgICAgIE5VTEwsIG1lYW5pbmcgdGhhdCB0aGUgcmVmZXJlbmNlIGlzIG5vdCBjaGFuZ2VkLCBvcgorICogICAgICAgICBudWxsX29pZCwgbWVhbmluZyB0aGF0IHRoZSByZWZlcmVuY2Ugc2hvdWxkIGJlIGRlbGV0ZWQuIEEKKyAqICAgICAgICAgY29weSBvZiB0aGlzIHZhbHVlIGlzIG1hZGUgaW4gdGhlIHRyYW5zYWN0aW9uLgorICoKKyAqICAgICBvbGRfb2lkIC0tIHRoZSBvYmplY3QgSUQgdGhhdCB0aGUgcmVmZXJlbmNlIG11c3QgaGF2ZSBiZWZvcmUKKyAqICAgICAgICAgdGhlIHVwZGF0ZS4gU29tZSBmdW5jdGlvbnMgYWxsb3cgdGhpcyBwYXJhbWV0ZXIgdG8gYmUgTlVMTCwKKyAqICAgICAgICAgbWVhbmluZyB0aGF0IHRoZSBvbGQgdmFsdWUgb2YgdGhlIHJlZmVyZW5jZSBpcyBub3QgY2hlY2tlZCwKKyAqICAgICAgICAgb3IgbnVsbF9vaWQsIG1lYW5pbmcgdGhhdCB0aGUgcmVmZXJlbmNlIG11c3Qgbm90IGV4aXN0CisgKiAgICAgICAgIGJlZm9yZSB0aGUgdXBkYXRlLiBBIGNvcHkgb2YgdGhpcyB2YWx1ZSBpcyBtYWRlIGluIHRoZQorICogICAgICAgICB0cmFuc2FjdGlvbi4KKyAqCisgKiAgICAgZmxhZ3MgLS0gZmxhZ3MgYWZmZWN0aW5nIHRoZSB1cGRhdGUsIHBhc3NlZCB0bworICogICAgICAgICB1cGRhdGVfcmVmX2xvY2soKS4gUG9zc2libGUgZmxhZ3M6IFJFRl9OT19ERVJFRiwKKyAqICAgICAgICAgUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0cuIFNlZSB0aG9zZSBjb25zdGFudHMgZm9yIG1vcmUKKyAqICAgICAgICAgaW5mb3JtYXRpb24uCisgKgorICogICAgIG1zZyAtLSBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgY2hhbmdlIChmb3IgdGhlIHJlZmxvZykuCisgKgorICogICAgIGVyciAtLSBhIHN0cmJ1ZiBmb3IgcmVjZWl2aW5nIGEgZGVzY3JpcHRpb24gb2YgYW55IGVycm9yIHRoYXQKKyAqICAgICAgICAgbWlnaHQgaGF2ZSBvY2N1cnJlZC4KKyAqCisgKiBUaGUgZnVuY3Rpb25zIG1ha2UgaW50ZXJuYWwgY29waWVzIG9mIHJlZm5hbWUgYW5kIG1zZywgc28gdGhlCisgKiBjYWxsZXIgcmV0YWlucyBvd25lcnNoaXAgb2YgdGhlc2UgcGFyYW1ldGVycy4KKyAqCisgKiBUaGUgZnVuY3Rpb25zIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIG5vbi16ZXJvIG9uIGZhaWx1cmUuIEEKKyAqIGZhaWx1cmUgbWVhbnMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gYXMgYSB3aG9sZSBoYXMgZmFpbGVkIGFuZCBuZWVkcworICogdG8gYmUgcm9sbGVkIGJhY2suCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZmxhZ3MgY2FuIGJlIHBhc3NlZCB0byByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKCkgZXRjLgorICogSW50ZXJuYWxseSwgdGhleSBhcmUgc3RvcmVkIGluIGByZWZfdXBkYXRlOjpmbGFnc2AsIGFsb25nIHdpdGggc29tZQorICogaW50ZXJuYWwgZmxhZ3MuCisgKi8KKworLyoKKyAqIEFjdCBvbiB0aGUgcmVmIGRpcmVjdGx5OyBpLmUuLCB3aXRob3V0IGRlcmVmZXJlbmNpbmcgc3ltYm9saWMgcmVmcy4KKyAqIElmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHN5bWJvbGljIHJlZmVyZW5jZXMgYXJlCisgKiBkZXJlZmVyZW5jZWQgYW5kIHRoZSB1cGRhdGUgaXMgYXBwbGllZCB0byB0aGUgcmVmZXJlbnQuCisgKi8KKyNkZWZpbmUgUkVGX05PX0RFUkVGICgxIDw8IDApCisKKy8qCisgKiBGb3JjZSB0aGUgY3JlYXRpb24gb2YgYSByZWZsb2cgZm9yIHRoaXMgcmVmZXJlbmNlLCBldmVuIGlmIGl0CisgKiBkaWRuJ3QgcHJldmlvdXNseSBoYXZlIGEgcmVmbG9nLgorICovCisjZGVmaW5lIFJFRl9GT1JDRV9DUkVBVEVfUkVGTE9HICgxIDw8IDEpCisKKy8qCisgKiBCaXRtYXNrIG9mIGFsbCBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBwYXNzZWQgaW4gdG8KKyAqIHJlZl90cmFuc2FjdGlvbl91cGRhdGUoKSBhbmQgZnJpZW5kczoKKyAqLworI2RlZmluZSBSRUZfVFJBTlNBQ1RJT05fVVBEQVRFX0FMTE9XRURfRkxBR1MgXAorCShSRUZfTk9fREVSRUYgfCBSRUZfRk9SQ0VfQ1JFQVRFX1JFRkxPRykKKworLyoKKyAqIEFkZCBhIHJlZmVyZW5jZSB1cGRhdGUgdG8gdHJhbnNhY3Rpb24uIGBuZXdfb2lkYCBpcyB0aGUgdmFsdWUgdGhhdAorICogdGhlIHJlZmVyZW5jZSBzaG91bGQgaGF2ZSBhZnRlciB0aGUgdXBkYXRlLCBvciBgbnVsbF9vaWRgIGlmIGl0CisgKiBzaG91bGQgYmUgZGVsZXRlZC4gSWYgYG5ld19vaWRgIGlzIE5VTEwsIHRoZW4gdGhlIHJlZmVyZW5jZSBpcyBub3QKKyAqIGNoYW5nZWQgYXQgYWxsLiBgb2xkX29pZGAgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIHJlZmVyZW5jZSBtdXN0IGhhdmUKKyAqIGJlZm9yZSB0aGUgdXBkYXRlLCBvciBgbnVsbF9vaWRgIGlmIGl0IG11c3Qgbm90IGhhdmUgZXhpc3RlZAorICogYmVmb3JlaGFuZC4gVGhlIG9sZCB2YWx1ZSBpcyBjaGVja2VkIGFmdGVyIHRoZSBsb2NrIGlzIHRha2VuIHRvCisgKiBwcmV2ZW50IHJhY2VzLiBJZiB0aGUgb2xkIHZhbHVlIGRvZXNuJ3QgYWdyZWUgd2l0aCBvbGRfb2lkLCB0aGUKKyAqIHdob2xlIHRyYW5zYWN0aW9uIGZhaWxzLiBJZiBvbGRfb2lkIGlzIE5VTEwsIHRoZW4gdGhlIHByZXZpb3VzCisgKiB2YWx1ZSBpcyBub3QgY2hlY2tlZC4KKyAqCisgKiBTZWUgdGhlIGFib3ZlIGNvbW1lbnQgIlJlZmVyZW5jZSB0cmFuc2FjdGlvbiB1cGRhdGVzIiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24uCisgKi8KK2ludCByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICptc2csCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogQWRkIGEgcmVmZXJlbmNlIGNyZWF0aW9uIHRvIHRyYW5zYWN0aW9uLiBuZXdfb2lkIGlzIHRoZSB2YWx1ZSB0aGF0CisgKiB0aGUgcmVmZXJlbmNlIHNob3VsZCBoYXZlIGFmdGVyIHRoZSB1cGRhdGU7IGl0IG11c3Qgbm90IGJlCisgKiBudWxsX29pZC4gSXQgaXMgdmVyaWZpZWQgdGhhdCB0aGUgcmVmZXJlbmNlIGRvZXMgbm90IGV4aXN0CisgKiBhbHJlYWR5LgorICoKKyAqIFNlZSB0aGUgYWJvdmUgY29tbWVudCAiUmVmZXJlbmNlIHRyYW5zYWN0aW9uIHVwZGF0ZXMiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbi4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl9jcmVhdGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqbXNnLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIEFkZCBhIHJlZmVyZW5jZSBkZWxldGlvbiB0byB0cmFuc2FjdGlvbi4gSWYgb2xkX29pZCBpcyBub24tTlVMTCwKKyAqIHRoZW4gaXQgaG9sZHMgdGhlIHZhbHVlIHRoYXQgdGhlIHJlZmVyZW5jZSBzaG91bGQgaGF2ZSBoYWQgYmVmb3JlCisgKiB0aGUgdXBkYXRlICh3aGljaCBtdXN0IG5vdCBiZSBudWxsX29pZCkuCisgKgorICogU2VlIHRoZSBhYm92ZSBjb21tZW50ICJSZWZlcmVuY2UgdHJhbnNhY3Rpb24gdXBkYXRlcyIgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uLgorICovCitpbnQgcmVmX3RyYW5zYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICptc2csCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogVmVyaWZ5LCB3aXRoaW4gYSB0cmFuc2FjdGlvbiwgdGhhdCByZWZuYW1lIGhhcyB0aGUgdmFsdWUgb2xkX29pZCwKKyAqIG9yLCBpZiBvbGRfb2lkIGlzIG51bGxfb2lkLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSByZWZlcmVuY2UKKyAqIGRvZXNuJ3QgZXhpc3QuIG9sZF9vaWQgbXVzdCBiZSBub24tTlVMTC4KKyAqCisgKiBTZWUgdGhlIGFib3ZlIGNvbW1lbnQgIlJlZmVyZW5jZSB0cmFuc2FjdGlvbiB1cGRhdGVzIiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24uCisgKi8KK2ludCByZWZfdHJhbnNhY3Rpb25fdmVyaWZ5KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKiBOYW1pbmcgY29uZmxpY3QgKGZvciBleGFtcGxlLCB0aGUgcmVmIG5hbWVzIEEgYW5kIEEvQiBjb25mbGljdCkuICovCisjZGVmaW5lIFRSQU5TQUNUSU9OX05BTUVfQ09ORkxJQ1QgLTEKKy8qIEFsbCBvdGhlciBlcnJvcnMuICovCisjZGVmaW5lIFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1IgLTIKKworLyoKKyAqIFBlcmZvcm0gdGhlIHByZXBhcmF0b3J5IHN0YWdlcyBvZiBjb21taXR0aW5nIGB0cmFuc2FjdGlvbmAuIEFjcXVpcmUKKyAqIGFueSBuZWVkZWQgbG9ja3MsIGNoZWNrIHByZWNvbmRpdGlvbnMsIGV0Yy47IGJhc2ljYWxseSwgZG8gYXMgbXVjaAorICogYXMgcG9zc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHdpbGwgYmUgYWJsZSB0byBnbworICogdGhyb3VnaCwgc3RvcHBpbmcganVzdCBzaG9ydCBvZiBtYWtpbmcgYW55IGlycmV2b2NhYmxlIG9yCisgKiB1c2VyLXZpc2libGUgY2hhbmdlcy4gVGhlIHVwZGF0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNhbgorICogYmUgZmluaXNoZWQgdXAgYnkgY2FsbGluZyBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYCBvciByb2xsZWQgYmFjaworICogYnkgY2FsbGluZyBgcmVmX3RyYW5zYWN0aW9uX2Fib3J0KClgLgorICoKKyAqIE9uIHN1Y2Nlc3MsIHJldHVybiAwIGFuZCBsZWF2ZSB0aGUgdHJhbnNhY3Rpb24gaW4gInByZXBhcmVkIiBzdGF0ZS4KKyAqIE9uIGZhaWx1cmUsIGFib3J0IHRoZSB0cmFuc2FjdGlvbiwgd3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byBgZXJyYCwKKyAqIGFuZCByZXR1cm4gb25lIG9mIHRoZSBgVFJBTlNBQ1RJT05fKmAgY29uc3RhbnRzLgorICoKKyAqIENhbGxlcnMgd2hvIGRvbid0IG5lZWQgc3VjaCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGNvbW1pdHRpbmcKKyAqIHJlZmVyZW5jZSB0cmFuc2FjdGlvbnMgc2hvdWxkIGp1c3QgY2FsbCBgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpYC4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qCisgKiBDb21taXQgYWxsIG9mIHRoZSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIHF1ZXVlZCBpbiB0cmFuc2FjdGlvbiwgYXMKKyAqIGF0b21pY2FsbHkgYXMgcG9zc2libGUuIE9uIHN1Y2Nlc3MsIHJldHVybiAwIGFuZCBsZWF2ZSB0aGUKKyAqIHRyYW5zYWN0aW9uIGluICJjbG9zZWQiIHN0YXRlLiBPbiBmYWlsdXJlLCByb2xsIGJhY2sgdGhlCisgKiB0cmFuc2FjdGlvbiwgd3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byBgZXJyYCwgYW5kIHJldHVybiBvbmUgb2YgdGhlCisgKiBgVFJBTlNBQ1RJT05fKmAgY29uc3RhbnRzCisgKi8KK2ludCByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIEFib3J0IGB0cmFuc2FjdGlvbmAsIHdoaWNoIGhhcyBiZWVuIGJlZ3VuIGFuZCBwb3NzaWJseSBwcmVwYXJlZCwKKyAqIGJ1dCBub3QgeWV0IGNvbW1pdHRlZC4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl9hYm9ydChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIExpa2UgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpLCBidXQgb3B0aW1pemVkIGZvciBjcmVhdGluZworICogcmVmZXJlbmNlcyB3aGVuIG9yaWdpbmFsbHkgaW5pdGlhbGl6aW5nIGEgcmVwb3NpdG9yeSAoZS5nLiwgYnkgImdpdAorICogY2xvbmUiKS4gSXQgd3JpdGVzIHRoZSBuZXcgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBwYWNrZWQtcmVmcworICogd2l0aG91dCBsb2NraW5nIHRoZSBpbmRpdmlkdWFsIHJlZmVyZW5jZXMuCisgKgorICogSXQgaXMgYSBidWcgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlcmUgbWlnaHQgYmUgb3RoZXIKKyAqIHByb2Nlc3NlcyBhY2Nlc3NpbmcgdGhlIHJlcG9zaXRvcnkgb3IgaWYgdGhlcmUgYXJlIGV4aXN0aW5nCisgKiByZWZlcmVuY2VzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGUgb25lcyBiZWluZyBjcmVhdGVkLiBBbGwKKyAqIG9sZF9vaWQgdmFsdWVzIG11c3QgZWl0aGVyIGJlIGFic2VudCBvciBudWxsX29pZC4KKyAqLworaW50IGluaXRpYWxfcmVmX3RyYW5zYWN0aW9uX2NvbW1pdChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogRnJlZSBgKnRyYW5zYWN0aW9uYCBhbmQgYWxsIGFzc29jaWF0ZWQgZGF0YS4KKyAqLwordm9pZCByZWZfdHJhbnNhY3Rpb25fZnJlZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbik7CisKKy8qKgorICogTG9jaywgdXBkYXRlLCBhbmQgdW5sb2NrIGEgc2luZ2xlIHJlZmVyZW5jZS4gVGhpcyBmdW5jdGlvbgorICogYmFzaWNhbGx5IGRvZXMgYSB0cmFuc2FjdGlvbiBjb250YWluaW5nIGEgc2luZ2xlIGNhbGwgdG8KKyAqIHJlZl90cmFuc2FjdGlvbl91cGRhdGUoKS4gVGhlIHBhcmFtZXRlcnMgdG8gdGhpcyBmdW5jdGlvbiBoYXZlIHRoZQorICogc2FtZSBtZWFuaW5nIGFzIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlcnMgdG8KKyAqIHJlZl90cmFuc2FjdGlvbl91cGRhdGUoKS4gSGFuZGxlIGVycm9ycyBhcyByZXF1ZXN0ZWQgYnkgdGhlIGBvbmVycmAKKyAqIGFyZ3VtZW50LgorICovCitpbnQgcmVmc191cGRhdGVfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gYWN0aW9uX29uX2VyciBvbmVycik7CitpbnQgdXBkYXRlX3JlZihjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBhY3Rpb25fb25fZXJyIG9uZXJyKTsKKworaW50IHBhcnNlX2hpZGVfcmVmc19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgY29uc3QgY2hhciAqKTsKKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYSByZWYgaXMgaGlkZGVuLiBJZiBubyBuYW1lc3BhY2UgaXMgc2V0LCBib3RoIHRoZSBmaXJzdCBhbmQKKyAqIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHBvaW50IHRvIHRoZSBmdWxsIHJlZiBuYW1lLiBJZiBhIG5hbWVzcGFjZSBpcyBzZXQgYW5kCisgKiB0aGUgcmVmIGlzIGluc2lkZSB0aGF0IG5hbWVzcGFjZSwgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gdGhlCisgKiBuYW1lIG9mIHRoZSByZWYgd2l0aCB0aGUgbmFtZXNwYWNlIHByZWZpeCByZW1vdmVkLiBJZiBhIG5hbWVzcGFjZSBpcyBzZXQgYW5kCisgKiB0aGUgcmVmIGlzIG91dHNpZGUgdGhhdCBuYW1lc3BhY2UsIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhlIHNlY29uZAorICogcGFyYW1ldGVyIGFsd2F5cyBwb2ludHMgdG8gdGhlIGZ1bGwgcmVmIG5hbWUuCisgKi8KK2ludCByZWZfaXNfaGlkZGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworZW51bSByZWZfdHlwZSB7CisJUkVGX1RZUEVfUEVSX1dPUktUUkVFLAkgIC8qIHJlZnMgaW5zaWRlIHJlZnMvIGJ1dCBub3Qgc2hhcmVkICAgICAgICovCisJUkVGX1RZUEVfUFNFVURPUkVGLAkgIC8qIHJlZnMgb3V0c2lkZSByZWZzLyBpbiBjdXJyZW50IHdvcmt0cmVlICovCisJUkVGX1RZUEVfTUFJTl9QU0VVRE9SRUYsICAvKiBwc2V1ZG8gcmVmcyBmcm9tIHRoZSBtYWluIHdvcmt0cmVlICAgICAqLworCVJFRl9UWVBFX09USEVSX1BTRVVET1JFRiwgLyogcHNldWRvIHJlZnMgZnJvbSBvdGhlciB3b3JrdHJlZXMgICAgICAgKi8KKwlSRUZfVFlQRV9OT1JNQUwsCSAgLyogbm9ybWFsL3NoYXJlZCByZWZzIGluc2lkZSByZWZzLyAgICAgICAgKi8KK307CisKK2VudW0gcmVmX3R5cGUgcmVmX3R5cGUoY29uc3QgY2hhciAqcmVmbmFtZSk7CisKK2VudW0gZXhwaXJlX3JlZmxvZ19mbGFncyB7CisJRVhQSVJFX1JFRkxPR1NfRFJZX1JVTiA9IDEgPDwgMCwKKwlFWFBJUkVfUkVGTE9HU19VUERBVEVfUkVGID0gMSA8PCAxLAorCUVYUElSRV9SRUZMT0dTX1ZFUkJPU0UgPSAxIDw8IDIsCisJRVhQSVJFX1JFRkxPR1NfUkVXUklURSA9IDEgPDwgMworfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIHJlZmxvZyBleHBpcmF0aW9uLiBUaGUgY2FsbGVyCisgKiBjYWxscyByZWZsb2dfZXhwaXJlKCksIHN1cHBseWluZyBpdCB3aXRoIHRocmVlIGNhbGxiYWNrIGZ1bmN0aW9ucywKKyAqIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMuIFRoZSBjYWxsYmFjayBmdW5jdGlvbnMgZGVmaW5lIHRoZQorICogZXhwaXJhdGlvbiBwb2xpY3kgdGhhdCBpcyBkZXNpcmVkLgorICoKKyAqIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiAtLSBDYWxsZWQgb25jZSBhZnRlciB0aGUgcmVmZXJlbmNlIGlzCisgKiAgICAgbG9ja2VkLgorICoKKyAqIHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIC0tIENhbGxlZCBvbmNlIGZvciBlYWNoIGVudHJ5IGluIHRoZQorICogICAgIGV4aXN0aW5nIHJlZmxvZy4gSXQgc2hvdWxkIHJldHVybiB0cnVlIGlmZiB0aGF0IGVudHJ5IHNob3VsZCBiZQorICogICAgIHBydW5lZC4KKyAqCisgKiByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4gLS0gQ2FsbGVkIG9uY2UgYmVmb3JlIHRoZSByZWZlcmVuY2UgaXMKKyAqICAgICB1bmxvY2tlZCBhZ2Fpbi4KKyAqLwordHlwZWRlZiB2b2lkIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbihjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgICB2b2lkICpjYl9kYXRhKTsKK3R5cGVkZWYgaW50IHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuKHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsCisJCQkJCSAgc3RydWN0IG9iamVjdF9pZCAqbm9pZCwKKwkJCQkJICBjb25zdCBjaGFyICplbWFpbCwKKwkJCQkJICB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGludCB0eiwKKwkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKTsKK3R5cGVkZWYgdm9pZCByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4odm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBFeHBpcmUgcmVmbG9nIGVudHJpZXMgZm9yIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLiBvaWQgaXMgdGhlIG9sZAorICogdmFsdWUgb2YgdGhlIHJlZmVyZW5jZS4gZmxhZ3MgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgY29uc3RhbnRzIGluCisgKiBlbnVtIGV4cGlyZV9yZWZsb2dfZmxhZ3MuIFRoZSB0aHJlZSBmdW5jdGlvbiBwb2ludGVycyBhcmUgZGVzY3JpYmVkCisgKiBhYm92ZS4gT24gc3VjY2VzcywgcmV0dXJuIHplcm8uCisgKi8KK2ludCByZWZzX3JlZmxvZ19leHBpcmUoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgICAgICByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJICAgICAgIHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIHNob3VsZF9wcnVuZV9mbiwKKwkJICAgICAgIHJlZmxvZ19leHBpcnlfY2xlYW51cF9mbiBjbGVhbnVwX2ZuLAorCQkgICAgICAgdm9pZCAqcG9saWN5X2NiX2RhdGEpOworaW50IHJlZmxvZ19leHBpcmUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgIHVuc2lnbmVkIGludCBmbGFncywKKwkJICByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gcHJlcGFyZV9mbiwKKwkJICByZWZsb2dfZXhwaXJ5X3Nob3VsZF9wcnVuZV9mbiBzaG91bGRfcHJ1bmVfZm4sCisJCSAgcmVmbG9nX2V4cGlyeV9jbGVhbnVwX2ZuIGNsZWFudXBfZm4sCisJCSAgdm9pZCAqcG9saWN5X2NiX2RhdGEpOworCitpbnQgcmVmX3N0b3JhZ2VfYmFja2VuZF9leGlzdHMoY29uc3QgY2hhciAqbmFtZSk7CisKK3N0cnVjdCByZWZfc3RvcmUgKmdldF9tYWluX3JlZl9zdG9yZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKy8qKgorICogU3VibW9kdWxlcworICogLS0tLS0tLS0tLQorICoKKyAqIElmIHlvdSB3YW50IHRvIGl0ZXJhdGUgdGhlIHJlZnMgb2YgYSBzdWJtb2R1bGUgeW91IGZpcnN0IG5lZWQgdG8gYWRkIHRoZQorICogc3VibW9kdWxlcyBvYmplY3QgZGF0YWJhc2UuIFlvdSBjYW4gZG8gdGhpcyBieSBhIGNvZGUtc25pcHBldCBsaWtlCisgKiB0aGlzOgorICoKKyAqIAljb25zdCBjaGFyICpwYXRoID0gInBhdGgvdG8vc3VibW9kdWxlIgorICogCWlmIChhZGRfc3VibW9kdWxlX29kYihwYXRoKSkKKyAqIAkJZGllKCJFcnJvciBzdWJtb2R1bGUgJyVzJyBub3QgcG9wdWxhdGVkLiIsIHBhdGgpOworICoKKyAqIGBhZGRfc3VibW9kdWxlX29kYigpYCB3aWxsIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MuIElmIHlvdQorICogZG8gbm90IGRvIHRoaXMgeW91IHdpbGwgZ2V0IGFuIGVycm9yIGZvciBlYWNoIHJlZiB0aGF0IGl0IGRvZXMgbm90IHBvaW50CisgKiB0byBhIHZhbGlkIG9iamVjdC4KKyAqCisgKiBOb3RlOiBBcyBhIHNpZGUtZWZmZWN0IG9mIHRoaXMgeW91IGNhbm5vdCBzYWZlbHkgYXNzdW1lIHRoYXQgYWxsCisgKiBvYmplY3RzIHlvdSBsb29rdXAgYXJlIGF2YWlsYWJsZSBpbiBzdXBlcnByb2plY3QuIEFsbCBzdWJtb2R1bGUgb2JqZWN0cworICogd2lsbCBiZSBhdmFpbGFibGUgdGhlIHNhbWUgd2F5IGFzIHRoZSBzdXBlcnByb2plY3RzIG9iamVjdHMuCisgKgorICogRXhhbXBsZToKKyAqIC0tLS0tLS0tCisgKgorICogLS0tLQorICogc3RhdGljIGludCBoYW5kbGVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAorICogCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCisgKiB7CisgKiAJc3RydWN0IHN0cmJ1ZiAqb3V0cHV0ID0gY2JfZGF0YTsKKyAqIAlzdHJidWZfYWRkZihvdXRwdXQsICIlc1xuIiwgcmVmbmFtZSk7CisgKiAJcmV0dXJuIDA7CisgKiB9CisgKgorICovCisKKy8qCisgKiBSZXR1cm4gdGhlIHJlZl9zdG9yZSBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCBzdWJtb2R1bGUuIEZvciB0aGUKKyAqIG1haW4gcmVwb3NpdG9yeSwgdXNlIHN1Ym1vZHVsZT09TlVMTDsgc3VjaCBhIGNhbGwgY2Fubm90IGZhaWwuIEZvcgorICogYSBzdWJtb2R1bGUsIHRoZSBzdWJtb2R1bGUgbXVzdCBleGlzdCBhbmQgYmUgYSBub25iYXJlIHJlcG9zaXRvcnksCisgKiBvdGhlcndpc2UgcmV0dXJuIE5VTEwuIElmIHRoZSByZXF1ZXN0ZWQgcmVmZXJlbmNlIHN0b3JlIGhhcyBub3QgeWV0CisgKiBiZWVuIGluaXRpYWxpemVkLCBpbml0aWFsaXplIGl0IGZpcnN0LgorICoKKyAqIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgc3VibW9kdWxlPT0iIiBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzCisgKiBzdWJtb2R1bGU9PU5VTEwuCisgKi8KK3N0cnVjdCByZWZfc3RvcmUgKmdldF9zdWJtb2R1bGVfcmVmX3N0b3JlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSk7CitzdHJ1Y3QgcmVmX3N0b3JlICpnZXRfd29ya3RyZWVfcmVmX3N0b3JlKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpOworCisjZW5kaWYgLyogUkVGU19IICovCmRpZmYgLS1naXQgYS9yZWZzL2ZpbGVzLWJhY2tlbmQuYyBiL3JlZnMvZmlsZXMtYmFja2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MWMzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzL2ZpbGVzLWJhY2tlbmQuYwpAQCAtMCwwICsxLDMyMDAgQEAKKyNpbmNsdWRlICIuLi9jYWNoZS5oIgorI2luY2x1ZGUgIi4uL2NvbmZpZy5oIgorI2luY2x1ZGUgIi4uL3JlZnMuaCIKKyNpbmNsdWRlICJyZWZzLWludGVybmFsLmgiCisjaW5jbHVkZSAicmVmLWNhY2hlLmgiCisjaW5jbHVkZSAicGFja2VkLWJhY2tlbmQuaCIKKyNpbmNsdWRlICIuLi9pdGVyYXRvci5oIgorI2luY2x1ZGUgIi4uL2Rpci1pdGVyYXRvci5oIgorI2luY2x1ZGUgIi4uL2xvY2tmaWxlLmgiCisjaW5jbHVkZSAiLi4vb2JqZWN0LmgiCisjaW5jbHVkZSAiLi4vZGlyLmgiCisjaW5jbHVkZSAiLi4vY2hkaXItbm90aWZ5LmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworLyoKKyAqIFRoaXMgYmFja2VuZCB1c2VzIHRoZSBmb2xsb3dpbmcgZmxhZ3MgaW4gYHJlZl91cGRhdGU6OmZsYWdzYCBmb3IKKyAqIGludGVybmFsIGJvb2trZWVwaW5nIHB1cnBvc2VzLiBUaGVpciBudW1lcmljYWwgdmFsdWVzIG11c3Qgbm90CisgKiBjb25mbGljdCB3aXRoIFJFRl9OT19ERVJFRiwgUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0csIFJFRl9IQVZFX05FVywKKyAqIFJFRl9IQVZFX09MRCwgb3IgUkVGX0lTX1BSVU5JTkcsIHdoaWNoIGFyZSBhbHNvIHN0b3JlZCBpbgorICogYHJlZl91cGRhdGU6OmZsYWdzYC4KKyAqLworCisvKgorICogVXNlZCBhcyBhIGZsYWcgaW4gcmVmX3VwZGF0ZTo6ZmxhZ3Mgd2hlbiBhIGxvb3NlIHJlZiBpcyBiZWluZworICogcHJ1bmVkLiBUaGlzIGZsYWcgbXVzdCBvbmx5IGJlIHVzZWQgd2hlbiBSRUZfTk9fREVSRUYgaXMgc2V0LgorICovCisjZGVmaW5lIFJFRl9JU19QUlVOSU5HICgxIDw8IDQpCisKKy8qCisgKiBGbGFnIHBhc3NlZCB0byBsb2NrX3JlZl9zaGExX2Jhc2ljKCkgdGVsbGluZyBpdCB0byB0b2xlcmF0ZSBicm9rZW4KKyAqIHJlZnMgKGkuZS4sIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBpcyBhYm91dCB0byBiZSBkZWxldGVkIGFueXdheSkuCisgKi8KKyNkZWZpbmUgUkVGX0RFTEVUSU5HICgxIDw8IDUpCisKKy8qCisgKiBVc2VkIGFzIGEgZmxhZyBpbiByZWZfdXBkYXRlOjpmbGFncyB3aGVuIHRoZSBsb2NrZmlsZSBuZWVkcyB0byBiZQorICogY29tbWl0dGVkLgorICovCisjZGVmaW5lIFJFRl9ORUVEU19DT01NSVQgKDEgPDwgNikKKworLyoKKyAqIFVzZWQgYXMgYSBmbGFnIGluIHJlZl91cGRhdGU6OmZsYWdzIHdoZW4gd2Ugd2FudCB0byBsb2cgYSByZWYKKyAqIHVwZGF0ZSBidXQgbm90IGFjdHVhbGx5IHBlcmZvcm0gaXQuICBUaGlzIGlzIHVzZWQgd2hlbiBhIHN5bWJvbGljCisgKiByZWYgdXBkYXRlIGlzIHNwbGl0IHVwLgorICovCisjZGVmaW5lIFJFRl9MT0dfT05MWSAoMSA8PCA3KQorCisvKgorICogVXNlZCBhcyBhIGZsYWcgaW4gcmVmX3VwZGF0ZTo6ZmxhZ3Mgd2hlbiB0aGUgcmVmX3VwZGF0ZSB3YXMgdmlhIGFuCisgKiB1cGRhdGUgdG8gSEVBRC4KKyAqLworI2RlZmluZSBSRUZfVVBEQVRFX1ZJQV9IRUFEICgxIDw8IDgpCisKKy8qCisgKiBVc2VkIGFzIGEgZmxhZyBpbiByZWZfdXBkYXRlOjpmbGFncyB3aGVuIHRoZSBsb29zZSByZWZlcmVuY2UgaGFzCisgKiBiZWVuIGRlbGV0ZWQuCisgKi8KKyNkZWZpbmUgUkVGX0RFTEVURURfTE9PU0UgKDEgPDwgOSkKKworc3RydWN0IHJlZl9sb2NrIHsKKwljaGFyICpyZWZfbmFtZTsKKwlzdHJ1Y3QgbG9ja19maWxlIGxrOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKK307CisKK3N0cnVjdCBmaWxlc19yZWZfc3RvcmUgeworCXN0cnVjdCByZWZfc3RvcmUgYmFzZTsKKwl1bnNpZ25lZCBpbnQgc3RvcmVfZmxhZ3M7CisKKwljaGFyICpnaXRkaXI7CisJY2hhciAqZ2l0Y29tbW9uZGlyOworCisJc3RydWN0IHJlZl9jYWNoZSAqbG9vc2U7CisKKwlzdHJ1Y3QgcmVmX3N0b3JlICpwYWNrZWRfcmVmX3N0b3JlOworfTsKKworc3RhdGljIHZvaWQgY2xlYXJfbG9vc2VfcmVmX2NhY2hlKHN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMpCit7CisJaWYgKHJlZnMtPmxvb3NlKSB7CisJCWZyZWVfcmVmX2NhY2hlKHJlZnMtPmxvb3NlKTsKKwkJcmVmcy0+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+YmFja2VuZF9kYXRhID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChiYWNrZW5kX2RhdGEtPnBhY2tlZF90cmFuc2FjdGlvbiAmJgorCSAgICByZWZfdHJhbnNhY3Rpb25fYWJvcnQoYmFja2VuZF9kYXRhLT5wYWNrZWRfdHJhbnNhY3Rpb24sICZlcnIpKSB7CisJCWVycm9yKCJlcnJvciBhYm9ydGluZyB0cmFuc2FjdGlvbjogJXMiLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJfQorCisJaWYgKGJhY2tlbmRfZGF0YS0+cGFja2VkX3JlZnNfbG9ja2VkKQorCQlwYWNrZWRfcmVmc191bmxvY2socmVmcy0+cGFja2VkX3JlZl9zdG9yZSk7CisKKwlmcmVlKGJhY2tlbmRfZGF0YSk7CisKKwl0cmFuc2FjdGlvbi0+c3RhdGUgPSBSRUZfVFJBTlNBQ1RJT05fQ0xPU0VEOworfQorCitzdGF0aWMgaW50IGZpbGVzX3RyYW5zYWN0aW9uX3ByZXBhcmUoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9CisJCWZpbGVzX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFLAorCQkJICAgICAgICJyZWZfdHJhbnNhY3Rpb25fcHJlcGFyZSIpOworCXNpemVfdCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBhZmZlY3RlZF9yZWZuYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJY2hhciAqaGVhZF9yZWYgPSBOVUxMOworCWludCBoZWFkX3R5cGU7CisJc3RydWN0IGZpbGVzX3RyYW5zYWN0aW9uX2JhY2tlbmRfZGF0YSAqYmFja2VuZF9kYXRhOworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnBhY2tlZF90cmFuc2FjdGlvbiA9IE5VTEw7CisKKwlhc3NlcnQoZXJyKTsKKworCWlmICghdHJhbnNhY3Rpb24tPm5yKQorCQlnb3RvIGNsZWFudXA7CisKKwliYWNrZW5kX2RhdGEgPSB4Y2FsbG9jKDEsIHNpemVvZigqYmFja2VuZF9kYXRhKSk7CisJdHJhbnNhY3Rpb24tPmJhY2tlbmRfZGF0YSA9IGJhY2tlbmRfZGF0YTsKKworCS8qCisJICogRmFpbCBpZiBhIHJlZm5hbWUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUKKwkgKiB0cmFuc2FjdGlvbi4gKElmIHdlIGVuZCB1cCBzcGxpdHRpbmcgdXAgYW55IHVwZGF0ZXMgdXNpbmcKKwkgKiBzcGxpdF9zeW1yZWZfdXBkYXRlKCkgb3Igc3BsaXRfaGVhZF91cGRhdGUoKSwgdGhvc2UKKwkgKiBmdW5jdGlvbnMgd2lsbCBjaGVjayB0aGF0IHRoZSBuZXcgdXBkYXRlcyBkb24ndCBoYXZlIHRoZQorCSAqIHNhbWUgcmVmbmFtZSBhcyBhbnkgZXhpc3Rpbmcgb25lcy4pIEFsc28gZmFpbCBpZiBhbnkgb2YgdGhlCisJICogdXBkYXRlcyB1c2UgUkVGX0lTX1BSVU5JTkcgd2l0aG91dCBSRUZfTk9fREVSRUYuCisJICovCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZhZmZlY3RlZF9yZWZuYW1lcywgdXBkYXRlLT5yZWZuYW1lKTsKKworCQlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSVNfUFJVTklORykgJiYKKwkJICAgICEodXBkYXRlLT5mbGFncyAmIFJFRl9OT19ERVJFRikpCisJCQlCVUcoIlJFRl9JU19QUlVOSU5HIHNldCB3aXRob3V0IFJFRl9OT19ERVJFRiIpOworCisJCS8qCisJCSAqIFdlIHN0b3JlIGEgcG9pbnRlciB0byB1cGRhdGUgaW4gaXRlbS0+dXRpbCwgYnV0IGF0CisJCSAqIHRoZSBtb21lbnQgd2UgbmV2ZXIgdXNlIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkCisJCSAqIGV4Y2VwdCB0byBjaGVjayB3aGV0aGVyIGl0IGlzIG5vbi1OVUxMLgorCQkgKi8KKwkJaXRlbS0+dXRpbCA9IHVwZGF0ZTsKKwl9CisJc3RyaW5nX2xpc3Rfc29ydCgmYWZmZWN0ZWRfcmVmbmFtZXMpOworCWlmIChyZWZfdXBkYXRlX3JlamVjdF9kdXBsaWNhdGVzKCZhZmZlY3RlZF9yZWZuYW1lcywgZXJyKSkgeworCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBTcGVjaWFsIGhhY2s6IElmIGEgYnJhbmNoIGlzIHVwZGF0ZWQgZGlyZWN0bHkgYW5kIEhFQUQKKwkgKiBwb2ludHMgdG8gaXQgKG1heSBoYXBwZW4gb24gdGhlIHJlbW90ZSBzaWRlIG9mIGEgcHVzaAorCSAqIGZvciBleGFtcGxlKSB0aGVuIGxvZ2ljYWxseSB0aGUgSEVBRCByZWZsb2cgc2hvdWxkIGJlCisJICogdXBkYXRlZCB0b28uCisJICoKKwkgKiBBIGdlbmVyaWMgc29sdXRpb24gd291bGQgcmVxdWlyZSByZXZlcnNlIHN5bXJlZiBsb29rdXBzLAorCSAqIGJ1dCBmaW5kaW5nIGFsbCBzeW1yZWZzIHBvaW50aW5nIHRvIGEgZ2l2ZW4gYnJhbmNoIHdvdWxkIGJlCisJICogcmF0aGVyIGNvc3RseSBmb3IgdGhpcyByYXJlIGV2ZW50ICh0aGUgZGlyZWN0IHVwZGF0ZSBvZiBhCisJICogYnJhbmNoKSB0byBiZSB3b3J0aCBpdC4gU28gbGV0J3MgY2hlYXQgYW5kIGNoZWNrIHdpdGggSEVBRAorCSAqIG9ubHksIHdoaWNoIHNob3VsZCBjb3ZlciA5OSUgb2YgYWxsIHVzYWdlIHNjZW5hcmlvcyAoZXZlbgorCSAqIDEwMCUgb2YgdGhlIGRlZmF1bHQgb25lcykuCisJICoKKwkgKiBTbyBpZiBIRUFEIGlzIGEgc3ltYm9saWMgcmVmZXJlbmNlLCB0aGVuIHJlY29yZCB0aGUgbmFtZSBvZgorCSAqIHRoZSByZWZlcmVuY2UgdGhhdCBpdCBwb2ludHMgdG8uIElmIHdlIHNlZSBhbiB1cGRhdGUgb2YKKwkgKiBoZWFkX3JlZiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uLCB0aGVuIHNwbGl0X2hlYWRfdXBkYXRlKCkKKwkgKiBhcnJhbmdlcyBmb3IgdGhlIHJlZmxvZyBvZiBIRUFEIHRvIGJlIHVwZGF0ZWQsIHRvby4KKwkgKi8KKwloZWFkX3JlZiA9IHJlZnNfcmVzb2x2ZV9yZWZkdXAocmVmX3N0b3JlLCAiSEVBRCIsCisJCQkJICAgICAgIFJFU09MVkVfUkVGX05PX1JFQ1VSU0UsCisJCQkJICAgICAgIE5VTEwsICZoZWFkX3R5cGUpOworCisJaWYgKGhlYWRfcmVmICYmICEoaGVhZF90eXBlICYgUkVGX0lTU1lNUkVGKSkgeworCQlGUkVFX0FORF9OVUxMKGhlYWRfcmVmKTsKKwl9CisKKwkvKgorCSAqIEFjcXVpcmUgYWxsIGxvY2tzLCB2ZXJpZnkgb2xkIHZhbHVlcyBpZiBwcm92aWRlZCwgY2hlY2sKKwkgKiB0aGF0IG5ldyB2YWx1ZXMgYXJlIHZhbGlkLCBhbmQgd3JpdGUgbmV3IHZhbHVlcyB0byB0aGUKKwkgKiBsb2NrZmlsZXMsIHJlYWR5IHRvIGJlIGFjdGl2YXRlZC4gT25seSBrZWVwIG9uZSBsb2NrZmlsZQorCSAqIG9wZW4gYXQgYSB0aW1lIHRvIGF2b2lkIHJ1bm5pbmcgb3V0IG9mIGZpbGUgZGVzY3JpcHRvcnMuCisJICogTm90ZSB0aGF0IGxvY2tfcmVmX2Zvcl91cGRhdGUoKSBtaWdodCBhcHBlbmQgbW9yZSB1cGRhdGVzCisJICogdG8gdGhlIHRyYW5zYWN0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0cmFuc2FjdGlvbi0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gdHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV07CisKKwkJcmV0ID0gbG9ja19yZWZfZm9yX3VwZGF0ZShyZWZzLCB1cGRhdGUsIHRyYW5zYWN0aW9uLAorCQkJCQkgIGhlYWRfcmVmLCAmYWZmZWN0ZWRfcmVmbmFtZXMsIGVycik7CisJCWlmIChyZXQpCisJCQlnb3RvIGNsZWFudXA7CisKKwkJaWYgKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfREVMRVRJTkcgJiYKKwkJICAgICEodXBkYXRlLT5mbGFncyAmIFJFRl9MT0dfT05MWSkgJiYKKwkJICAgICEodXBkYXRlLT5mbGFncyAmIFJFRl9JU19QUlVOSU5HKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgcmVmZXJlbmNlIGhhcyB0byBiZSBkZWxldGVkIGZyb20KKwkJCSAqIHBhY2tlZC1yZWZzIGlmIGl0IGV4aXN0cyB0aGVyZS4KKwkJCSAqLworCQkJaWYgKCFwYWNrZWRfdHJhbnNhY3Rpb24pIHsKKwkJCQlwYWNrZWRfdHJhbnNhY3Rpb24gPSByZWZfc3RvcmVfdHJhbnNhY3Rpb25fYmVnaW4oCisJCQkJCQlyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLCBlcnIpOworCQkJCWlmICghcGFja2VkX3RyYW5zYWN0aW9uKSB7CisJCQkJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisKKwkJCQliYWNrZW5kX2RhdGEtPnBhY2tlZF90cmFuc2FjdGlvbiA9CisJCQkJCXBhY2tlZF90cmFuc2FjdGlvbjsKKwkJCX0KKworCQkJcmVmX3RyYW5zYWN0aW9uX2FkZF91cGRhdGUoCisJCQkJCXBhY2tlZF90cmFuc2FjdGlvbiwgdXBkYXRlLT5yZWZuYW1lLAorCQkJCQlSRUZfSEFWRV9ORVcgfCBSRUZfTk9fREVSRUYsCisJCQkJCSZ1cGRhdGUtPm5ld19vaWQsIE5VTEwsCisJCQkJCU5VTEwpOworCQl9CisJfQorCisJaWYgKHBhY2tlZF90cmFuc2FjdGlvbikgeworCQlpZiAocGFja2VkX3JlZnNfbG9jayhyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLCAwLCBlcnIpKSB7CisJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCWJhY2tlbmRfZGF0YS0+cGFja2VkX3JlZnNfbG9ja2VkID0gMTsKKworCQlpZiAoaXNfcGFja2VkX3RyYW5zYWN0aW9uX25lZWRlZChyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLAorCQkJCQkJIHBhY2tlZF90cmFuc2FjdGlvbikpIHsKKwkJCXJldCA9IHJlZl90cmFuc2FjdGlvbl9wcmVwYXJlKHBhY2tlZF90cmFuc2FjdGlvbiwgZXJyKTsKKwkJCS8qCisJCQkgKiBBIGZhaWx1cmUgZHVyaW5nIHRoZSBwcmVwYXJlIHN0ZXAgd2lsbCBhYm9ydAorCQkJICogaXRzZWxmLCBidXQgbm90IGZyZWUuIERvIHRoYXQgbm93LCBhbmQgZGlzY29ubmVjdAorCQkJICogZnJvbSB0aGUgZmlsZXNfdHJhbnNhY3Rpb24gc28gaXQgZG9lcyBub3QgdHJ5IHRvCisJCQkgKiBhYm9ydCB1cyB3aGVuIHdlIGhpdCB0aGUgY2xlYW51cCBjb2RlIGJlbG93LgorCQkJICovCisJCQlpZiAocmV0KSB7CisJCQkJcmVmX3RyYW5zYWN0aW9uX2ZyZWUocGFja2VkX3RyYW5zYWN0aW9uKTsKKwkJCQliYWNrZW5kX2RhdGEtPnBhY2tlZF90cmFuc2FjdGlvbiA9IE5VTEw7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgY2FuIHNraXAgcmV3cml0aW5nIHRoZSBgcGFja2VkLXJlZnNgCisJCQkgKiBmaWxlLiBCdXQgd2UgZG8gbmVlZCB0byBsZWF2ZSBpdCBsb2NrZWQsIHNvCisJCQkgKiB0aGF0IHNvbWVib2R5IGVsc2UgZG9lc24ndCBwYWNrIGEgcmVmZXJlbmNlCisJCQkgKiB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gZGVsZXRlLgorCQkJICoKKwkJCSAqIFdlIG5lZWQgdG8gZGlzY29ubmVjdCBvdXIgdHJhbnNhY3Rpb24gZnJvbQorCQkJICogYmFja2VuZF9kYXRhLCBzaW5jZSB0aGUgYWJvcnQgKHdoZXRoZXIgc3VjY2Vzc2Z1bCBvcgorCQkJICogbm90KSB3aWxsIGZyZWUgaXQuCisJCQkgKi8KKwkJCWJhY2tlbmRfZGF0YS0+cGFja2VkX3RyYW5zYWN0aW9uID0gTlVMTDsKKwkJCWlmIChyZWZfdHJhbnNhY3Rpb25fYWJvcnQocGFja2VkX3RyYW5zYWN0aW9uLCBlcnIpKSB7CisJCQkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCX0KKwl9CisKK2NsZWFudXA6CisJZnJlZShoZWFkX3JlZik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmFmZmVjdGVkX3JlZm5hbWVzLCAwKTsKKworCWlmIChyZXQpCisJCWZpbGVzX3RyYW5zYWN0aW9uX2NsZWFudXAocmVmcywgdHJhbnNhY3Rpb24pOworCWVsc2UKKwkJdHJhbnNhY3Rpb24tPnN0YXRlID0gUkVGX1RSQU5TQUNUSU9OX1BSRVBBUkVEOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmaWxlc190cmFuc2FjdGlvbl9maW5pc2goc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBmaWxlc19yZWZfc3RvcmUgKnJlZnMgPQorCQlmaWxlc19kb3duY2FzdChyZWZfc3RvcmUsIDAsICJyZWZfdHJhbnNhY3Rpb25fZmluaXNoIik7CisJc2l6ZV90IGk7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBmaWxlc190cmFuc2FjdGlvbl9iYWNrZW5kX2RhdGEgKmJhY2tlbmRfZGF0YTsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICpwYWNrZWRfdHJhbnNhY3Rpb247CisKKworCWFzc2VydChlcnIpOworCisJaWYgKCF0cmFuc2FjdGlvbi0+bnIpIHsKKwkJdHJhbnNhY3Rpb24tPnN0YXRlID0gUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDsKKwkJcmV0dXJuIDA7CisJfQorCisJYmFja2VuZF9kYXRhID0gdHJhbnNhY3Rpb24tPmJhY2tlbmRfZGF0YTsKKwlwYWNrZWRfdHJhbnNhY3Rpb24gPSBiYWNrZW5kX2RhdGEtPnBhY2tlZF90cmFuc2FjdGlvbjsKKworCS8qIFBlcmZvcm0gdXBkYXRlcyBmaXJzdCBzbyBsaXZlIGNvbW1pdHMgcmVtYWluIHJlZmVyZW5jZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCQlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2sgPSB1cGRhdGUtPmJhY2tlbmRfZGF0YTsKKworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9ORUVEU19DT01NSVQgfHwKKwkJICAgIHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTE9HX09OTFkpIHsKKwkJCWlmIChmaWxlc19sb2dfcmVmX3dyaXRlKHJlZnMsCisJCQkJCQlsb2NrLT5yZWZfbmFtZSwKKwkJCQkJCSZsb2NrLT5vbGRfb2lkLAorCQkJCQkJJnVwZGF0ZS0+bmV3X29pZCwKKwkJCQkJCXVwZGF0ZS0+bXNnLCB1cGRhdGUtPmZsYWdzLAorCQkJCQkJZXJyKSkgeworCQkJCWNoYXIgKm9sZF9tc2cgPSBzdHJidWZfZGV0YWNoKGVyciwgTlVMTCk7CisKKwkJCQlzdHJidWZfYWRkZihlcnIsICJjYW5ub3QgdXBkYXRlIHRoZSByZWYgJyVzJzogJXMiLAorCQkJCQkgICAgbG9jay0+cmVmX25hbWUsIG9sZF9tc2cpOworCQkJCWZyZWUob2xkX21zZyk7CisJCQkJdW5sb2NrX3JlZihsb2NrKTsKKwkJCQl1cGRhdGUtPmJhY2tlbmRfZGF0YSA9IE5VTEw7CisJCQkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCX0KKwkJaWYgKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTkVFRFNfQ09NTUlUKSB7CisJCQljbGVhcl9sb29zZV9yZWZfY2FjaGUocmVmcyk7CisJCQlpZiAoY29tbWl0X3JlZihsb2NrKSkgeworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgImNvdWxkbid0IHNldCAnJXMnIiwgbG9jay0+cmVmX25hbWUpOworCQkJCXVubG9ja19yZWYobG9jayk7CisJCQkJdXBkYXRlLT5iYWNrZW5kX2RhdGEgPSBOVUxMOworCQkJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB1cGRhdGVzIGFyZSBzYWZlbHkgY29tcGxldGVkLCB3ZSBjYW4gcGVyZm9ybQorCSAqIGRlbGV0ZXMuIEZpcnN0IGRlbGV0ZSB0aGUgcmVmbG9ncyBvZiBhbnkgcmVmZXJlbmNlcyB0aGF0CisJICogd2lsbCBiZSBkZWxldGVkLCBzaW5jZSAoaW4gdGhlIHVuZXhwZWN0ZWQgZXZlbnQgb2YgYW4KKwkgKiBlcnJvcikgbGVhdmluZyBhIHJlZmVyZW5jZSB3aXRob3V0IGEgcmVmbG9nIGlzIGxlc3MgYmFkCisJICogdGhhbiBsZWF2aW5nIGEgcmVmbG9nIHdpdGhvdXQgYSByZWZlcmVuY2UgKHRoZSBsYXR0ZXIgaXMgYQorCSAqIG1pbGRseSBpbnZhbGlkIHJlcG9zaXRvcnkgc3RhdGUpOgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0cmFuc2FjdGlvbi0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gdHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV07CisJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX0RFTEVUSU5HICYmCisJCSAgICAhKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTE9HX09OTFkpICYmCisJCSAgICAhKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSVNfUFJVTklORykpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQkJZmlsZXNfcmVmbG9nX3BhdGgocmVmcywgJnNiLCB1cGRhdGUtPnJlZm5hbWUpOworCQkJaWYgKCF1bmxpbmtfb3Jfd2FybihzYi5idWYpKQorCQkJCXRyeV9yZW1vdmVfZW1wdHlfcGFyZW50cyhyZWZzLCB1cGRhdGUtPnJlZm5hbWUsCisJCQkJCQkJIFJFTU9WRV9FTVBUWV9QQVJFTlRTX1JFRkxPRyk7CisJCX0KKwl9CisKKwkvKgorCSAqIFBlcmZvcm0gZGVsZXRlcyBub3cgdGhhdCB1cGRhdGVzIGFyZSBzYWZlbHkgY29tcGxldGVkLgorCSAqCisJICogRmlyc3QgZGVsZXRlIGFueSBwYWNrZWQgdmVyc2lvbnMgb2YgdGhlIHJlZmVyZW5jZXMsIHdoaWxlCisJICogcmV0YWluaW5nIHRoZSBwYWNrZWQtcmVmcyBsb2NrOgorCSAqLworCWlmIChwYWNrZWRfdHJhbnNhY3Rpb24pIHsKKwkJcmV0ID0gcmVmX3RyYW5zYWN0aW9uX2NvbW1pdChwYWNrZWRfdHJhbnNhY3Rpb24sIGVycik7CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHBhY2tlZF90cmFuc2FjdGlvbik7CisJCXBhY2tlZF90cmFuc2FjdGlvbiA9IE5VTEw7CisJCWJhY2tlbmRfZGF0YS0+cGFja2VkX3RyYW5zYWN0aW9uID0gTlVMTDsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBOb3cgZGVsZXRlIHRoZSBsb29zZSB2ZXJzaW9ucyBvZiB0aGUgcmVmZXJlbmNlczogKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCQlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2sgPSB1cGRhdGUtPmJhY2tlbmRfZGF0YTsKKworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9ERUxFVElORyAmJgorCQkgICAgISh1cGRhdGUtPmZsYWdzICYgUkVGX0xPR19PTkxZKSkgeworCQkJaWYgKCEodXBkYXRlLT50eXBlICYgUkVGX0lTUEFDS0VEKSB8fAorCQkJICAgIHVwZGF0ZS0+dHlwZSAmIFJFRl9JU1NZTVJFRikgeworCQkJCS8qIEl0IGlzIGEgbG9vc2UgcmVmZXJlbmNlLiAqLworCQkJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQkJCWZpbGVzX3JlZl9wYXRoKHJlZnMsICZzYiwgbG9jay0+cmVmX25hbWUpOworCQkJCWlmICh1bmxpbmtfb3JfbXNnKHNiLmJ1ZiwgZXJyKSkgeworCQkJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJfQorCQkJCXVwZGF0ZS0+ZmxhZ3MgfD0gUkVGX0RFTEVURURfTE9PU0U7CisJCQl9CisJCX0KKwl9CisKKwljbGVhcl9sb29zZV9yZWZfY2FjaGUocmVmcyk7CisKK2NsZWFudXA6CisJZmlsZXNfdHJhbnNhY3Rpb25fY2xlYW51cChyZWZzLCB0cmFuc2FjdGlvbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCisJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX0RFTEVURURfTE9PU0UpIHsKKwkJCS8qCisJCQkgKiBUaGUgbG9vc2UgcmVmZXJlbmNlIHdhcyBkZWxldGVkLiBEZWxldGUgYW55CisJCQkgKiBlbXB0eSBwYXJlbnQgZGlyZWN0b3JpZXMuIChOb3RlIHRoYXQgdGhpcworCQkJICogY2FuIG9ubHkgd29yayBiZWNhdXNlIHdlIGhhdmUgYWxyZWFkeQorCQkJICogcmVtb3ZlZCB0aGUgbG9ja2ZpbGUuKQorCQkJICovCisJCQl0cnlfcmVtb3ZlX2VtcHR5X3BhcmVudHMocmVmcywgdXBkYXRlLT5yZWZuYW1lLAorCQkJCQkJIFJFTU9WRV9FTVBUWV9QQVJFTlRTX1JFRik7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfdHJhbnNhY3Rpb25fYWJvcnQoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KKwkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCAwLCAicmVmX3RyYW5zYWN0aW9uX2Fib3J0Iik7CisKKwlmaWxlc190cmFuc2FjdGlvbl9jbGVhbnVwKHJlZnMsIHRyYW5zYWN0aW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWZfcHJlc2VudChjb25zdCBjaGFyICpyZWZuYW1lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICphZmZlY3RlZF9yZWZuYW1lcyA9IGNiX2RhdGE7CisKKwlyZXR1cm4gc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhhZmZlY3RlZF9yZWZuYW1lcywgcmVmbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfaW5pdGlhbF90cmFuc2FjdGlvbl9jb21taXQoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCQkgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IGZpbGVzX3JlZl9zdG9yZSAqcmVmcyA9CisJCWZpbGVzX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFLAorCQkJICAgICAgICJpbml0aWFsX3JlZl90cmFuc2FjdGlvbl9jb21taXQiKTsKKwlzaXplX3QgaTsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYWZmZWN0ZWRfcmVmbmFtZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnBhY2tlZF90cmFuc2FjdGlvbiA9IE5VTEw7CisKKwlhc3NlcnQoZXJyKTsKKworCWlmICh0cmFuc2FjdGlvbi0+c3RhdGUgIT0gUkVGX1RSQU5TQUNUSU9OX09QRU4pCisJCUJVRygiY29tbWl0IGNhbGxlZCBmb3IgdHJhbnNhY3Rpb24gdGhhdCBpcyBub3Qgb3BlbiIpOworCisJLyogRmFpbCBpZiBhIHJlZm5hbWUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgdHJhbnNhY3Rpb246ICovCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmFmZmVjdGVkX3JlZm5hbWVzLAorCQkJCSAgIHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldLT5yZWZuYW1lKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZhZmZlY3RlZF9yZWZuYW1lcyk7CisJaWYgKHJlZl91cGRhdGVfcmVqZWN0X2R1cGxpY2F0ZXMoJmFmZmVjdGVkX3JlZm5hbWVzLCBlcnIpKSB7CisJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIEl0J3MgcmVhbGx5IHVuZGVmaW5lZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gYW4gYWN0aXZlCisJICogcmVwb3NpdG9yeSBvciB3aGVuIHRoZXJlIGFyZSBleGlzdGluZyByZWZlcmVuY2VzOiB3ZSBhcmUKKwkgKiBvbmx5IGxvY2tpbmcgYW5kIGNoYW5naW5nIHBhY2tlZC1yZWZzLCBzbyAoMSkgYW55CisJICogc2ltdWx0YW5lb3VzIHByb2Nlc3NlcyBtaWdodCB0cnkgdG8gY2hhbmdlIGEgcmVmZXJlbmNlIGF0CisJICogdGhlIHNhbWUgdGltZSB3ZSBkbywgYW5kICgyKSBhbnkgZXhpc3RpbmcgbG9vc2UgdmVyc2lvbnMgb2YKKwkgKiB0aGUgcmVmZXJlbmNlcyB0aGF0IHdlIGFyZSBzZXR0aW5nIHdvdWxkIGhhdmUgcHJlY2VkZW5jZQorCSAqIG92ZXIgb3VyIHZhbHVlcy4gQnV0IHNvbWUgcmVtb3RlIGhlbHBlcnMgY3JlYXRlIHRoZSByZW1vdGUKKwkgKiAiSEVBRCIgYW5kICJtYXN0ZXIiIGJyYW5jaGVzIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sCisJICogc28gaGVyZSB3ZSByZWFsbHkgb25seSBjaGVjayB0aGF0IG5vbmUgb2YgdGhlIHJlZmVyZW5jZXMKKwkgKiB0aGF0IHdlIGFyZSBjcmVhdGluZyBhbHJlYWR5IGV4aXN0cy4KKwkgKi8KKwlpZiAocmVmc19mb3JfZWFjaF9yYXdyZWYoJnJlZnMtPmJhc2UsIHJlZl9wcmVzZW50LAorCQkJCSAmYWZmZWN0ZWRfcmVmbmFtZXMpKQorCQlCVUcoImluaXRpYWwgcmVmIHRyYW5zYWN0aW9uIGNhbGxlZCB3aXRoIGV4aXN0aW5nIHJlZnMiKTsKKworCXBhY2tlZF90cmFuc2FjdGlvbiA9IHJlZl9zdG9yZV90cmFuc2FjdGlvbl9iZWdpbihyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLCBlcnIpOworCWlmICghcGFja2VkX3RyYW5zYWN0aW9uKSB7CisJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCisJCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX09MRCkgJiYKKwkJICAgICFpc19udWxsX29pZCgmdXBkYXRlLT5vbGRfb2lkKSkKKwkJCUJVRygiaW5pdGlhbCByZWYgdHJhbnNhY3Rpb24gd2l0aCBvbGRfc2hhMSBzZXQiKTsKKwkJaWYgKHJlZnNfdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlKCZyZWZzLT5iYXNlLCB1cGRhdGUtPnJlZm5hbWUsCisJCQkJCQkgICZhZmZlY3RlZF9yZWZuYW1lcywgTlVMTCwKKwkJCQkJCSAgZXJyKSkgeworCQkJcmV0ID0gVFJBTlNBQ1RJT05fTkFNRV9DT05GTElDVDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCS8qCisJCSAqIEFkZCBhIHJlZmVyZW5jZSBjcmVhdGlvbiBmb3IgdGhpcyByZWZlcmVuY2UgdG8gdGhlCisJCSAqIHBhY2tlZC1yZWZzIHRyYW5zYWN0aW9uOgorCQkgKi8KKwkJcmVmX3RyYW5zYWN0aW9uX2FkZF91cGRhdGUocGFja2VkX3RyYW5zYWN0aW9uLCB1cGRhdGUtPnJlZm5hbWUsCisJCQkJCSAgIHVwZGF0ZS0+ZmxhZ3MgJiB+UkVGX0hBVkVfT0xELAorCQkJCQkgICAmdXBkYXRlLT5uZXdfb2lkLCAmdXBkYXRlLT5vbGRfb2lkLAorCQkJCQkgICBOVUxMKTsKKwl9CisKKwlpZiAocGFja2VkX3JlZnNfbG9jayhyZWZzLT5wYWNrZWRfcmVmX3N0b3JlLCAwLCBlcnIpKSB7CisJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoaW5pdGlhbF9yZWZfdHJhbnNhY3Rpb25fY29tbWl0KHBhY2tlZF90cmFuc2FjdGlvbiwgZXJyKSkgeworCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCX0KKworCXBhY2tlZF9yZWZzX3VubG9jayhyZWZzLT5wYWNrZWRfcmVmX3N0b3JlKTsKK2NsZWFudXA6CisJaWYgKHBhY2tlZF90cmFuc2FjdGlvbikKKwkJcmVmX3RyYW5zYWN0aW9uX2ZyZWUocGFja2VkX3RyYW5zYWN0aW9uKTsKKwl0cmFuc2FjdGlvbi0+c3RhdGUgPSBSRUZfVFJBTlNBQ1RJT05fQ0xPU0VEOworCXN0cmluZ19saXN0X2NsZWFyKCZhZmZlY3RlZF9yZWZuYW1lcywgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGV4cGlyZV9yZWZsb2dfY2IgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlyZWZsb2dfZXhwaXJ5X3Nob3VsZF9wcnVuZV9mbiAqc2hvdWxkX3BydW5lX2ZuOworCXZvaWQgKnBvbGljeV9jYjsKKwlGSUxFICpuZXdsb2c7CisJc3RydWN0IG9iamVjdF9pZCBsYXN0X2tlcHRfb2lkOworfTsKKworc3RhdGljIGludCBleHBpcmVfcmVmbG9nX2VudChzdHJ1Y3Qgb2JqZWN0X2lkICpvb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpub2lkLAorCQkJICAgICBjb25zdCBjaGFyICplbWFpbCwgdGltZXN0YW1wX3QgdGltZXN0YW1wLCBpbnQgdHosCisJCQkgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfY2IgKmNiID0gY2JfZGF0YTsKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgKnBvbGljeV9jYiA9IGNiLT5wb2xpY3lfY2I7CisKKwlpZiAoY2ItPmZsYWdzICYgRVhQSVJFX1JFRkxPR1NfUkVXUklURSkKKwkJb29pZCA9ICZjYi0+bGFzdF9rZXB0X29pZDsKKworCWlmICgoKmNiLT5zaG91bGRfcHJ1bmVfZm4pKG9vaWQsIG5vaWQsIGVtYWlsLCB0aW1lc3RhbXAsIHR6LAorCQkJCSAgIG1lc3NhZ2UsIHBvbGljeV9jYikpIHsKKwkJaWYgKCFjYi0+bmV3bG9nKQorCQkJcHJpbnRmKCJ3b3VsZCBwcnVuZSAlcyIsIG1lc3NhZ2UpOworCQllbHNlIGlmIChjYi0+ZmxhZ3MgJiBFWFBJUkVfUkVGTE9HU19WRVJCT1NFKQorCQkJcHJpbnRmKCJwcnVuZSAlcyIsIG1lc3NhZ2UpOworCX0gZWxzZSB7CisJCWlmIChjYi0+bmV3bG9nKSB7CisJCQlmcHJpbnRmKGNiLT5uZXdsb2csICIlcyAlcyAlcyAlIlBSSXRpbWUiICUrMDVkXHQlcyIsCisJCQkJb2lkX3RvX2hleChvb2lkKSwgb2lkX3RvX2hleChub2lkKSwKKwkJCQllbWFpbCwgdGltZXN0YW1wLCB0eiwgbWVzc2FnZSk7CisJCQlvaWRjcHkoJmNiLT5sYXN0X2tlcHRfb2lkLCBub2lkKTsKKwkJfQorCQlpZiAoY2ItPmZsYWdzICYgRVhQSVJFX1JFRkxPR1NfVkVSQk9TRSkKKwkJCXByaW50Zigia2VlcCAlcyIsIG1lc3NhZ2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxlc19yZWZsb2dfZXhwaXJlKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgICAgIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiBwcmVwYXJlX2ZuLAorCQkJICAgICAgIHJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIHNob3VsZF9wcnVuZV9mbiwKKwkJCSAgICAgICByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4gY2xlYW51cF9mbiwKKwkJCSAgICAgICB2b2lkICpwb2xpY3lfY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KKwkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCBSRUZfU1RPUkVfV1JJVEUsICJyZWZsb2dfZXhwaXJlIik7CisJc3RydWN0IGxvY2tfZmlsZSByZWZsb2dfbG9jayA9IExPQ0tfSU5JVDsKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19jYiBjYjsKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CisJc3RydWN0IHN0cmJ1ZiBsb2dfZmlsZV9zYiA9IFNUUkJVRl9JTklUOworCWNoYXIgKmxvZ19maWxlOworCWludCBzdGF0dXMgPSAwOworCWludCB0eXBlOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwltZW1zZXQoJmNiLCAwLCBzaXplb2YoY2IpKTsKKwljYi5mbGFncyA9IGZsYWdzOworCWNiLnBvbGljeV9jYiA9IHBvbGljeV9jYl9kYXRhOworCWNiLnNob3VsZF9wcnVuZV9mbiA9IHNob3VsZF9wcnVuZV9mbjsKKworCS8qCisJICogVGhlIHJlZmxvZyBmaWxlIGlzIGxvY2tlZCBieSBob2xkaW5nIHRoZSBsb2NrIG9uIHRoZQorCSAqIHJlZmVyZW5jZSBpdHNlbGYsIHBsdXMgd2UgbWlnaHQgbmVlZCB0byB1cGRhdGUgdGhlCisJICogcmVmZXJlbmNlIGlmIC0tdXBkYXRlcmVmIHdhcyBzcGVjaWZpZWQ6CisJICovCisJbG9jayA9IGxvY2tfcmVmX29pZF9iYXNpYyhyZWZzLCByZWZuYW1lLCBvaWQsCisJCQkJICBOVUxMLCBOVUxMLCBSRUZfTk9fREVSRUYsCisJCQkJICAmdHlwZSwgJmVycik7CisJaWYgKCFsb2NrKSB7CisJCWVycm9yKCJjYW5ub3QgbG9jayByZWYgJyVzJzogJXMiLCByZWZuYW1lLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFyZWZzX3JlZmxvZ19leGlzdHMocmVmX3N0b3JlLCByZWZuYW1lKSkgeworCQl1bmxvY2tfcmVmKGxvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlmaWxlc19yZWZsb2dfcGF0aChyZWZzLCAmbG9nX2ZpbGVfc2IsIHJlZm5hbWUpOworCWxvZ19maWxlID0gc3RyYnVmX2RldGFjaCgmbG9nX2ZpbGVfc2IsIE5VTEwpOworCWlmICghKGZsYWdzICYgRVhQSVJFX1JFRkxPR1NfRFJZX1JVTikpIHsKKwkJLyoKKwkJICogRXZlbiB0aG91Z2ggaG9sZGluZyAkR0lUX0RJUi9sb2dzLyRyZWZsb2cubG9jayBoYXMKKwkJICogbm8gbG9ja2luZyBpbXBsaWNhdGlvbnMsIHdlIHVzZSB0aGUgbG9ja19maWxlCisJCSAqIG1hY2hpbmVyeSBoZXJlIGFueXdheSBiZWNhdXNlIGl0IGRvZXMgYSBsb3Qgb2YgdGhlCisJCSAqIHdvcmsgd2UgbmVlZCwgaW5jbHVkaW5nIGNsZWFuaW5nIHVwIGlmIHRoZSBwcm9ncmFtCisJCSAqIGV4aXRzIHVuZXhwZWN0ZWRseS4KKwkJICovCisJCWlmIChob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZyZWZsb2dfbG9jaywgbG9nX2ZpbGUsIDApIDwgMCkgeworCQkJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwkJCXVuYWJsZV90b19sb2NrX21lc3NhZ2UobG9nX2ZpbGUsIGVycm5vLCAmZXJyKTsKKwkJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCQlnb3RvIGZhaWx1cmU7CisJCX0KKwkJY2IubmV3bG9nID0gZmRvcGVuX2xvY2tfZmlsZSgmcmVmbG9nX2xvY2ssICJ3Iik7CisJCWlmICghY2IubmV3bG9nKSB7CisJCQllcnJvcigiY2Fubm90IGZkb3BlbiAlcyAoJXMpIiwKKwkJCSAgICAgIGdldF9sb2NrX2ZpbGVfcGF0aCgmcmVmbG9nX2xvY2spLCBzdHJlcnJvcihlcnJubykpOworCQkJZ290byBmYWlsdXJlOworCQl9CisJfQorCisJKCpwcmVwYXJlX2ZuKShyZWZuYW1lLCBvaWQsIGNiLnBvbGljeV9jYik7CisJcmVmc19mb3JfZWFjaF9yZWZsb2dfZW50KHJlZl9zdG9yZSwgcmVmbmFtZSwgZXhwaXJlX3JlZmxvZ19lbnQsICZjYik7CisJKCpjbGVhbnVwX2ZuKShjYi5wb2xpY3lfY2IpOworCisJaWYgKCEoZmxhZ3MgJiBFWFBJUkVfUkVGTE9HU19EUllfUlVOKSkgeworCQkvKgorCQkgKiBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gYWRqdXN0IGEgcmVmZXJlbmNlIHBvaW50ZWQKKwkJICogdG8gYnkgYSBzeW1ib2xpYyByZWYgYmFzZWQgb24gZXhwaXJpbmcgZW50cmllcyBpbgorCQkgKiB0aGUgc3ltYm9saWMgcmVmZXJlbmNlJ3MgcmVmbG9nLiBOb3IgY2FuIHdlIHVwZGF0ZQorCQkgKiBhIHJlZmVyZW5jZSBpZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIHJlZmxvZworCQkgKiBlbnRyaWVzLgorCQkgKi8KKwkJaW50IHVwZGF0ZSA9IChmbGFncyAmIEVYUElSRV9SRUZMT0dTX1VQREFURV9SRUYpICYmCisJCQkhKHR5cGUgJiBSRUZfSVNTWU1SRUYpICYmCisJCQkhaXNfbnVsbF9vaWQoJmNiLmxhc3Rfa2VwdF9vaWQpOworCisJCWlmIChjbG9zZV9sb2NrX2ZpbGVfZ2VudGx5KCZyZWZsb2dfbG9jaykpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcigiY291bGRuJ3Qgd3JpdGUgJXM6ICVzIiwgbG9nX2ZpbGUsCisJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJnJlZmxvZ19sb2NrKTsKKwkJfSBlbHNlIGlmICh1cGRhdGUgJiYKKwkJCSAgICh3cml0ZV9pbl9mdWxsKGdldF9sb2NrX2ZpbGVfZmQoJmxvY2stPmxrKSwKKwkJCQlvaWRfdG9faGV4KCZjYi5sYXN0X2tlcHRfb2lkKSwgdGhlX2hhc2hfYWxnby0+aGV4c3opIDwgMCB8fAorCQkJICAgIHdyaXRlX3N0cl9pbl9mdWxsKGdldF9sb2NrX2ZpbGVfZmQoJmxvY2stPmxrKSwgIlxuIikgPCAwIHx8CisJCQkgICAgY2xvc2VfcmVmX2dlbnRseShsb2NrKSA8IDApKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoImNvdWxkbid0IHdyaXRlICVzIiwKKwkJCQkJZ2V0X2xvY2tfZmlsZV9wYXRoKCZsb2NrLT5saykpOworCQkJcm9sbGJhY2tfbG9ja19maWxlKCZyZWZsb2dfbG9jayk7CisJCX0gZWxzZSBpZiAoY29tbWl0X2xvY2tfZmlsZSgmcmVmbG9nX2xvY2spKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoInVuYWJsZSB0byB3cml0ZSByZWZsb2cgJyVzJyAoJXMpIiwKKwkJCQkJbG9nX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCX0gZWxzZSBpZiAodXBkYXRlICYmIGNvbW1pdF9yZWYobG9jaykpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcigiY291bGRuJ3Qgc2V0ICVzIiwgbG9jay0+cmVmX25hbWUpOworCQl9CisJfQorCWZyZWUobG9nX2ZpbGUpOworCXVubG9ja19yZWYobG9jayk7CisJcmV0dXJuIHN0YXR1czsKKworIGZhaWx1cmU6CisJcm9sbGJhY2tfbG9ja19maWxlKCZyZWZsb2dfbG9jayk7CisJZnJlZShsb2dfZmlsZSk7CisJdW5sb2NrX3JlZihsb2NrKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZmlsZXNfaW5pdF9kYihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgZmlsZXNfcmVmX3N0b3JlICpyZWZzID0KKwkJZmlsZXNfZG93bmNhc3QocmVmX3N0b3JlLCBSRUZfU1RPUkVfV1JJVEUsICJpbml0X2RiIik7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJLyoKKwkgKiBDcmVhdGUgLmdpdC9yZWZzL3toZWFkcyx0YWdzfQorCSAqLworCWZpbGVzX3JlZl9wYXRoKHJlZnMsICZzYiwgInJlZnMvaGVhZHMiKTsKKwlzYWZlX2NyZWF0ZV9kaXIoc2IuYnVmLCAxKTsKKworCXN0cmJ1Zl9yZXNldCgmc2IpOworCWZpbGVzX3JlZl9wYXRoKHJlZnMsICZzYiwgInJlZnMvdGFncyIpOworCXNhZmVfY3JlYXRlX2RpcihzYi5idWYsIDEpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZl9zdG9yYWdlX2JlIHJlZnNfYmVfZmlsZXMgPSB7CisJTlVMTCwKKwkiZmlsZXMiLAorCWZpbGVzX3JlZl9zdG9yZV9jcmVhdGUsCisJZmlsZXNfaW5pdF9kYiwKKwlmaWxlc190cmFuc2FjdGlvbl9wcmVwYXJlLAorCWZpbGVzX3RyYW5zYWN0aW9uX2ZpbmlzaCwKKwlmaWxlc190cmFuc2FjdGlvbl9hYm9ydCwKKwlmaWxlc19pbml0aWFsX3RyYW5zYWN0aW9uX2NvbW1pdCwKKworCWZpbGVzX3BhY2tfcmVmcywKKwlmaWxlc19jcmVhdGVfc3ltcmVmLAorCWZpbGVzX2RlbGV0ZV9yZWZzLAorCWZpbGVzX3JlbmFtZV9yZWYsCisJZmlsZXNfY29weV9yZWYsCisKKwlmaWxlc19yZWZfaXRlcmF0b3JfYmVnaW4sCisJZmlsZXNfcmVhZF9yYXdfcmVmLAorCisJZmlsZXNfcmVmbG9nX2l0ZXJhdG9yX2JlZ2luLAorCWZpbGVzX2Zvcl9lYWNoX3JlZmxvZ19lbnQsCisJZmlsZXNfZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlLAorCWZpbGVzX3JlZmxvZ19leGlzdHMsCisJZmlsZXNfY3JlYXRlX3JlZmxvZywKKwlmaWxlc19kZWxldGVfcmVmbG9nLAorCWZpbGVzX3JlZmxvZ19leHBpcmUKK307CmRpZmYgLS1naXQgYS9yZWZzL2l0ZXJhdG9yLmMgYi9yZWZzL2l0ZXJhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5ZTAwYQotLS0gL2Rldi9udWxsCisrKyBiL3JlZnMvaXRlcmF0b3IuYwpAQCAtMCwwICsxLDQzNSBAQAorLyoKKyAqIEdlbmVyaWMgcmVmZXJlbmNlIGl0ZXJhdG9yIGluZnJhc3RydWN0dXJlLiBTZWUgcmVmcy1pbnRlcm5hbC5oIGZvcgorICogZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgZGVzaWduIGFuZCB1c2Ugb2YgcmVmZXJlbmNlIGl0ZXJhdG9ycy4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmcy9yZWZzLWludGVybmFsLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKworaW50IHJlZl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yLT52dGFibGUtPmFkdmFuY2UocmVmX2l0ZXJhdG9yKTsKK30KKworaW50IHJlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKQoreworCXJldHVybiByZWZfaXRlcmF0b3ItPnZ0YWJsZS0+cGVlbChyZWZfaXRlcmF0b3IsIHBlZWxlZCk7Cit9CisKK2ludCByZWZfaXRlcmF0b3JfYWJvcnQoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXJldHVybiByZWZfaXRlcmF0b3ItPnZ0YWJsZS0+YWJvcnQocmVmX2l0ZXJhdG9yKTsKK30KKwordm9pZCBiYXNlX3JlZl9pdGVyYXRvcl9pbml0KHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIsCisJCQkgICAgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgKnZ0YWJsZSwKKwkJCSAgICBpbnQgb3JkZXJlZCkKK3sKKwlpdGVyLT52dGFibGUgPSB2dGFibGU7CisJaXRlci0+b3JkZXJlZCA9ICEhb3JkZXJlZDsKKwlpdGVyLT5yZWZuYW1lID0gTlVMTDsKKwlpdGVyLT5vaWQgPSBOVUxMOworCWl0ZXItPmZsYWdzID0gMDsKK30KKwordm9pZCBiYXNlX3JlZl9pdGVyYXRvcl9mcmVlKHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIpCit7CisJLyogSGVscCBtYWtlIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZmFpbCBxdWlja2x5OiAqLworCWl0ZXItPnZ0YWJsZSA9IE5VTEw7CisJZnJlZShpdGVyKTsKK30KKworc3RydWN0IGVtcHR5X3JlZl9pdGVyYXRvciB7CisJc3RydWN0IHJlZl9pdGVyYXRvciBiYXNlOworfTsKKworc3RhdGljIGludCBlbXB0eV9yZWZfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJcmV0dXJuIHJlZl9pdGVyYXRvcl9hYm9ydChyZWZfaXRlcmF0b3IpOworfQorCitzdGF0aWMgaW50IGVtcHR5X3JlZl9pdGVyYXRvcl9wZWVsKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCit7CisJQlVHKCJwZWVsIGNhbGxlZCBmb3IgZW1wdHkgaXRlcmF0b3IiKTsKK30KKworc3RhdGljIGludCBlbXB0eV9yZWZfaXRlcmF0b3JfYWJvcnQoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCWJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUocmVmX2l0ZXJhdG9yKTsKKwlyZXR1cm4gSVRFUl9ET05FOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9pdGVyYXRvcl92dGFibGUgZW1wdHlfcmVmX2l0ZXJhdG9yX3Z0YWJsZSA9IHsKKwllbXB0eV9yZWZfaXRlcmF0b3JfYWR2YW5jZSwKKwllbXB0eV9yZWZfaXRlcmF0b3JfcGVlbCwKKwllbXB0eV9yZWZfaXRlcmF0b3JfYWJvcnQKK307CisKK3N0cnVjdCByZWZfaXRlcmF0b3IgKmVtcHR5X3JlZl9pdGVyYXRvcl9iZWdpbih2b2lkKQoreworCXN0cnVjdCBlbXB0eV9yZWZfaXRlcmF0b3IgKml0ZXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXRlcikpOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciA9ICZpdGVyLT5iYXNlOworCisJYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChyZWZfaXRlcmF0b3IsICZlbXB0eV9yZWZfaXRlcmF0b3JfdnRhYmxlLCAxKTsKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yOworfQorCitpbnQgaXNfZW1wdHlfcmVmX2l0ZXJhdG9yKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yLT52dGFibGUgPT0gJmVtcHR5X3JlZl9pdGVyYXRvcl92dGFibGU7Cit9CisKK3N0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgeworCXN0cnVjdCByZWZfaXRlcmF0b3IgYmFzZTsKKworCXN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIwLCAqaXRlcjE7CisKKwlyZWZfaXRlcmF0b3Jfc2VsZWN0X2ZuICpzZWxlY3Q7CisJdm9pZCAqY2JfZGF0YTsKKworCS8qCisJICogQSBwb2ludGVyIHRvIGl0ZXIwIG9yIGl0ZXIxICh3aGljaGV2ZXIgaXMgc3VwcGx5aW5nIHRoZQorCSAqIGN1cnJlbnQgdmFsdWUpLCBvciBOVUxMIGlmIGFkdmFuY2UgaGFzIG5vdCB5ZXQgYmVlbiBjYWxsZWQuCisJICovCisJc3RydWN0IHJlZl9pdGVyYXRvciAqKmN1cnJlbnQ7Cit9OworCitzdGF0aWMgaW50IG1lcmdlX3JlZl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rOworCisJaWYgKCFpdGVyLT5jdXJyZW50KSB7CisJCS8qIEluaXRpYWxpemU6IGFkdmFuY2UgYm90aCBpdGVyYXRvcnMgdG8gdGhlaXIgZmlyc3QgZW50cmllcyAqLworCQlpZiAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlci0+aXRlcjApKSAhPSBJVEVSX09LKSB7CisJCQlpdGVyLT5pdGVyMCA9IE5VTEw7CisJCQlpZiAob2sgPT0gSVRFUl9FUlJPUikKKwkJCQlnb3RvIGVycm9yOworCQl9CisJCWlmICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZShpdGVyLT5pdGVyMSkpICE9IElURVJfT0spIHsKKwkJCWl0ZXItPml0ZXIxID0gTlVMTDsKKwkJCWlmIChvayA9PSBJVEVSX0VSUk9SKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBBZHZhbmNlIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHBhc3QgdGhlIGp1c3QtdXNlZAorCQkgKiBlbnRyeToKKwkJICovCisJCWlmICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZSgqaXRlci0+Y3VycmVudCkpICE9IElURVJfT0spIHsKKwkJCSppdGVyLT5jdXJyZW50ID0gTlVMTDsKKwkJCWlmIChvayA9PSBJVEVSX0VSUk9SKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwkvKiBMb29wIHVudGlsIHdlIGZpbmQgYW4gZW50cnkgdGhhdCB3ZSBjYW4geWllbGQuICovCisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IHJlZl9pdGVyYXRvciAqKnNlY29uZGFyeTsKKwkJZW51bSBpdGVyYXRvcl9zZWxlY3Rpb24gc2VsZWN0aW9uID0KKwkJCWl0ZXItPnNlbGVjdChpdGVyLT5pdGVyMCwgaXRlci0+aXRlcjEsIGl0ZXItPmNiX2RhdGEpOworCisJCWlmIChzZWxlY3Rpb24gPT0gSVRFUl9TRUxFQ1RfRE9ORSkgeworCQkJcmV0dXJuIHJlZl9pdGVyYXRvcl9hYm9ydChyZWZfaXRlcmF0b3IpOworCQl9IGVsc2UgaWYgKHNlbGVjdGlvbiA9PSBJVEVSX1NFTEVDVF9FUlJPUikgeworCQkJcmVmX2l0ZXJhdG9yX2Fib3J0KHJlZl9pdGVyYXRvcik7CisJCQlyZXR1cm4gSVRFUl9FUlJPUjsKKwkJfQorCisJCWlmICgoc2VsZWN0aW9uICYgSVRFUl9DVVJSRU5UX1NFTEVDVElPTl9NQVNLKSA9PSAwKSB7CisJCQlpdGVyLT5jdXJyZW50ID0gJml0ZXItPml0ZXIwOworCQkJc2Vjb25kYXJ5ID0gJml0ZXItPml0ZXIxOworCQl9IGVsc2UgeworCQkJaXRlci0+Y3VycmVudCA9ICZpdGVyLT5pdGVyMTsKKwkJCXNlY29uZGFyeSA9ICZpdGVyLT5pdGVyMDsKKwkJfQorCisJCWlmIChzZWxlY3Rpb24gJiBJVEVSX1NLSVBfU0VDT05EQVJZKSB7CisJCQlpZiAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKnNlY29uZGFyeSkpICE9IElURVJfT0spIHsKKwkJCQkqc2Vjb25kYXJ5ID0gTlVMTDsKKwkJCQlpZiAob2sgPT0gSVRFUl9FUlJPUikKKwkJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCisJCWlmIChzZWxlY3Rpb24gJiBJVEVSX1lJRUxEX0NVUlJFTlQpIHsKKwkJCWl0ZXItPmJhc2UucmVmbmFtZSA9ICgqaXRlci0+Y3VycmVudCktPnJlZm5hbWU7CisJCQlpdGVyLT5iYXNlLm9pZCA9ICgqaXRlci0+Y3VycmVudCktPm9pZDsKKwkJCWl0ZXItPmJhc2UuZmxhZ3MgPSAoKml0ZXItPmN1cnJlbnQpLT5mbGFnczsKKwkJCXJldHVybiBJVEVSX09LOworCQl9CisJfQorCitlcnJvcjoKKwlyZWZfaXRlcmF0b3JfYWJvcnQocmVmX2l0ZXJhdG9yKTsKKwlyZXR1cm4gSVRFUl9FUlJPUjsKK30KKworc3RhdGljIGludCBtZXJnZV9yZWZfaXRlcmF0b3JfcGVlbChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IsCisJCQkJICAgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKQoreworCXN0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IG1lcmdlX3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKworCWlmICghaXRlci0+Y3VycmVudCkgeworCQlCVUcoInBlZWwgY2FsbGVkIGJlZm9yZSBhZHZhbmNlIGZvciBtZXJnZSBpdGVyYXRvciIpOworCX0KKwlyZXR1cm4gcmVmX2l0ZXJhdG9yX3BlZWwoKml0ZXItPmN1cnJlbnQsIHBlZWxlZCk7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rID0gSVRFUl9ET05FOworCisJaWYgKGl0ZXItPml0ZXIwKSB7CisJCWlmIChyZWZfaXRlcmF0b3JfYWJvcnQoaXRlci0+aXRlcjApICE9IElURVJfRE9ORSkKKwkJCW9rID0gSVRFUl9FUlJPUjsKKwl9CisJaWYgKGl0ZXItPml0ZXIxKSB7CisJCWlmIChyZWZfaXRlcmF0b3JfYWJvcnQoaXRlci0+aXRlcjEpICE9IElURVJfRE9ORSkKKwkJCW9rID0gSVRFUl9FUlJPUjsKKwl9CisJYmFzZV9yZWZfaXRlcmF0b3JfZnJlZShyZWZfaXRlcmF0b3IpOworCXJldHVybiBvazsKK30KKworc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlIG1lcmdlX3JlZl9pdGVyYXRvcl92dGFibGUgPSB7CisJbWVyZ2VfcmVmX2l0ZXJhdG9yX2FkdmFuY2UsCisJbWVyZ2VfcmVmX2l0ZXJhdG9yX3BlZWwsCisJbWVyZ2VfcmVmX2l0ZXJhdG9yX2Fib3J0Cit9OworCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICptZXJnZV9yZWZfaXRlcmF0b3JfYmVnaW4oCisJCWludCBvcmRlcmVkLAorCQlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMCwgc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjEsCisJCXJlZl9pdGVyYXRvcl9zZWxlY3RfZm4gKnNlbGVjdCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgbWVyZ2VfcmVmX2l0ZXJhdG9yICppdGVyID0geGNhbGxvYygxLCBzaXplb2YoKml0ZXIpKTsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IgPSAmaXRlci0+YmFzZTsKKworCS8qCisJICogV2UgY2FuJ3QgZG8gdGhlIHNhbWUga2luZCBvZiBpc19lbXB0eV9yZWZfaXRlcmF0b3IoKS1zdHlsZQorCSAqIG9wdGltaXphdGlvbiBoZXJlIGFzIG92ZXJsYXlfcmVmX2l0ZXJhdG9yX2JlZ2luKCkgZG9lcywKKwkgKiBiZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlIHNlbWFudGljcyBvZiB0aGUgc2VsZWN0IGZ1bmN0aW9uLgorCSAqIEl0IG1pZ2h0LCBmb3IgZXhhbXBsZSwgaW1wbGVtZW50ICJpbnRlcnNlY3QiIGJ5IHBhc3NpbmcKKwkgKiByZWZlcmVuY2VzIHRocm91Z2ggb25seSBpZiB0aGV5IGV4aXN0IGluIGJvdGggaXRlcmF0b3JzLgorCSAqLworCisJYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChyZWZfaXRlcmF0b3IsICZtZXJnZV9yZWZfaXRlcmF0b3JfdnRhYmxlLCBvcmRlcmVkKTsKKwlpdGVyLT5pdGVyMCA9IGl0ZXIwOworCWl0ZXItPml0ZXIxID0gaXRlcjE7CisJaXRlci0+c2VsZWN0ID0gc2VsZWN0OworCWl0ZXItPmNiX2RhdGEgPSBjYl9kYXRhOworCWl0ZXItPmN1cnJlbnQgPSBOVUxMOworCXJldHVybiByZWZfaXRlcmF0b3I7Cit9CisKKy8qCisgKiBBIHJlZl9pdGVyYXRvcl9zZWxlY3RfZm4gdGhhdCBvdmVybGF5cyB0aGUgaXRlbXMgZnJvbSBmcm9udCBvbiB0b3AKKyAqIG9mIHRob3NlIGZyb20gYmFjayAobGlrZSBsb29zZSByZWZzIG92ZXIgcGFja2VkIHJlZnMpLiBTZWUKKyAqIG92ZXJsYXlfcmVmX2l0ZXJhdG9yX2JlZ2luKCkuCisgKi8KK3N0YXRpYyBlbnVtIGl0ZXJhdG9yX3NlbGVjdGlvbiBvdmVybGF5X2l0ZXJhdG9yX3NlbGVjdCgKKwkJc3RydWN0IHJlZl9pdGVyYXRvciAqZnJvbnQsIHN0cnVjdCByZWZfaXRlcmF0b3IgKmJhY2ssCisJCXZvaWQgKmNiX2RhdGEpCit7CisJaW50IGNtcDsKKworCWlmICghYmFjaykKKwkJcmV0dXJuIGZyb250ID8gSVRFUl9TRUxFQ1RfMCA6IElURVJfU0VMRUNUX0RPTkU7CisJZWxzZSBpZiAoIWZyb250KQorCQlyZXR1cm4gSVRFUl9TRUxFQ1RfMTsKKworCWNtcCA9IHN0cmNtcChmcm9udC0+cmVmbmFtZSwgYmFjay0+cmVmbmFtZSk7CisKKwlpZiAoY21wIDwgMCkKKwkJcmV0dXJuIElURVJfU0VMRUNUXzA7CisJZWxzZSBpZiAoY21wID4gMCkKKwkJcmV0dXJuIElURVJfU0VMRUNUXzE7CisJZWxzZQorCQlyZXR1cm4gSVRFUl9TRUxFQ1RfMF9TS0lQXzE7Cit9CisKK3N0cnVjdCByZWZfaXRlcmF0b3IgKm92ZXJsYXlfcmVmX2l0ZXJhdG9yX2JlZ2luKAorCQlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpmcm9udCwgc3RydWN0IHJlZl9pdGVyYXRvciAqYmFjaykKK3sKKwkvKgorCSAqIE9wdGltaXphdGlvbjogaWYgb25lIG9mIHRoZSBpdGVyYXRvcnMgaXMgZW1wdHksIHJldHVybiB0aGUKKwkgKiBvdGhlciBvbmUgcmF0aGVyIHRoYW4gaW5jdXJyaW5nIHRoZSBvdmVyaGVhZCBvZiB3cmFwcGluZworCSAqIHRoZW0uCisJICovCisJaWYgKGlzX2VtcHR5X3JlZl9pdGVyYXRvcihmcm9udCkpIHsKKwkJcmVmX2l0ZXJhdG9yX2Fib3J0KGZyb250KTsKKwkJcmV0dXJuIGJhY2s7CisJfSBlbHNlIGlmIChpc19lbXB0eV9yZWZfaXRlcmF0b3IoYmFjaykpIHsKKwkJcmVmX2l0ZXJhdG9yX2Fib3J0KGJhY2spOworCQlyZXR1cm4gZnJvbnQ7CisJfSBlbHNlIGlmICghZnJvbnQtPm9yZGVyZWQgfHwgIWJhY2stPm9yZGVyZWQpIHsKKwkJQlVHKCJvdmVybGF5X3JlZl9pdGVyYXRvciByZXF1aXJlcyBvcmRlcmVkIGlucHV0cyIpOworCX0KKworCXJldHVybiBtZXJnZV9yZWZfaXRlcmF0b3JfYmVnaW4oMSwgZnJvbnQsIGJhY2ssCisJCQkJCW92ZXJsYXlfaXRlcmF0b3Jfc2VsZWN0LCBOVUxMKTsKK30KKworc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgeworCXN0cnVjdCByZWZfaXRlcmF0b3IgYmFzZTsKKworCXN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIwOworCWNoYXIgKnByZWZpeDsKKwlpbnQgdHJpbTsKK307CisKKy8qIFJldHVybiAtMSwgMCwgMSBpZiByZWZuYW1lIGlzIGJlZm9yZSwgaW5zaWRlLCBvciBhZnRlciB0aGUgcHJlZml4LiAqLworc3RhdGljIGludCBjb21wYXJlX3ByZWZpeChjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJd2hpbGUgKCpwcmVmaXgpIHsKKwkJaWYgKCpyZWZuYW1lICE9ICpwcmVmaXgpCisJCQlyZXR1cm4gKCh1bnNpZ25lZCBjaGFyKSpyZWZuYW1lIDwgKHVuc2lnbmVkIGNoYXIpKnByZWZpeCkgPyAtMSA6ICsxOworCisJCXJlZm5hbWUrKzsKKwkJcHJlZml4Kys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJlZml4X3JlZl9pdGVyYXRvcl9hZHZhbmNlKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgcHJlZml4X3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgcHJlZml4X3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKwlpbnQgb2s7CisKKwl3aGlsZSAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlci0+aXRlcjApKSA9PSBJVEVSX09LKSB7CisJCWludCBjbXAgPSBjb21wYXJlX3ByZWZpeChpdGVyLT5pdGVyMC0+cmVmbmFtZSwgaXRlci0+cHJlZml4KTsKKworCQlpZiAoY21wIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbXAgPiAwKSB7CisJCQkvKgorCQkJICogSWYgdGhlIHNvdXJjZSBpdGVyYXRvciBpcyBvcmRlcmVkLCB0aGVuIHdlCisJCQkgKiBjYW4gc3RvcCB0aGUgaXRlcmF0aW9uIGFzIHNvb24gYXMgd2Ugc2VlIGEKKwkJCSAqIHJlZm5hbWUgdGhhdCBjb21lcyBhZnRlciB0aGUgcHJlZml4OgorCQkJICovCisJCQlpZiAoaXRlci0+aXRlcjAtPm9yZGVyZWQpIHsKKwkJCQlvayA9IHJlZl9pdGVyYXRvcl9hYm9ydChpdGVyLT5pdGVyMCk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKGl0ZXItPnRyaW0pIHsKKwkJCS8qCisJCQkgKiBJdCBpcyBub25zZW5zZSB0byB0cmltIG9mZiBjaGFyYWN0ZXJzIHRoYXQKKwkJCSAqIHlvdSBoYXZlbid0IGFscmVhZHkgY2hlY2tlZCBmb3IgdmlhIGEKKwkJCSAqIHByZWZpeCBjaGVjaywgd2hldGhlciB2aWEgdGhpcworCQkJICogYHByZWZpeF9yZWZfaXRlcmF0b3JgIG9yIHVwc3RyZWFtIGluCisJCQkgKiBgaXRlcjBgKS4gU28gaWYgdGhlcmUgd291bGRuJ3QgYmUgYXQgbGVhc3QKKwkJCSAqIG9uZSBjaGFyYWN0ZXIgbGVmdCBpbiB0aGUgcmVmbmFtZSBhZnRlcgorCQkJICogdHJpbW1pbmcsIHJlcG9ydCBpdCBhcyBhIGJ1ZzoKKwkJCSAqLworCQkJaWYgKHN0cmxlbihpdGVyLT5pdGVyMC0+cmVmbmFtZSkgPD0gaXRlci0+dHJpbSkKKwkJCQlCVUcoImF0dGVtcHQgdG8gdHJpbSB0b28gbWFueSBjaGFyYWN0ZXJzIik7CisJCQlpdGVyLT5iYXNlLnJlZm5hbWUgPSBpdGVyLT5pdGVyMC0+cmVmbmFtZSArIGl0ZXItPnRyaW07CisJCX0gZWxzZSB7CisJCQlpdGVyLT5iYXNlLnJlZm5hbWUgPSBpdGVyLT5pdGVyMC0+cmVmbmFtZTsKKwkJfQorCisJCWl0ZXItPmJhc2Uub2lkID0gaXRlci0+aXRlcjAtPm9pZDsKKwkJaXRlci0+YmFzZS5mbGFncyA9IGl0ZXItPml0ZXIwLT5mbGFnczsKKwkJcmV0dXJuIElURVJfT0s7CisJfQorCisJaXRlci0+aXRlcjAgPSBOVUxMOworCWlmIChyZWZfaXRlcmF0b3JfYWJvcnQocmVmX2l0ZXJhdG9yKSAhPSBJVEVSX0RPTkUpCisJCXJldHVybiBJVEVSX0VSUk9SOworCXJldHVybiBvazsKK30KKworc3RhdGljIGludCBwcmVmaXhfcmVmX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpCit7CisJc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yX3BlZWwoaXRlci0+aXRlcjAsIHBlZWxlZCk7Cit9CisKK3N0YXRpYyBpbnQgcHJlZml4X3JlZl9pdGVyYXRvcl9hYm9ydChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKml0ZXIgPQorCQkoc3RydWN0IHByZWZpeF9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisJaW50IG9rID0gSVRFUl9ET05FOworCisJaWYgKGl0ZXItPml0ZXIwKQorCQlvayA9IHJlZl9pdGVyYXRvcl9hYm9ydChpdGVyLT5pdGVyMCk7CisJZnJlZShpdGVyLT5wcmVmaXgpOworCWJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUocmVmX2l0ZXJhdG9yKTsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSBwcmVmaXhfcmVmX2l0ZXJhdG9yX3Z0YWJsZSA9IHsKKwlwcmVmaXhfcmVmX2l0ZXJhdG9yX2FkdmFuY2UsCisJcHJlZml4X3JlZl9pdGVyYXRvcl9wZWVsLAorCXByZWZpeF9yZWZfaXRlcmF0b3JfYWJvcnQKK307CisKK3N0cnVjdCByZWZfaXRlcmF0b3IgKnByZWZpeF9yZWZfaXRlcmF0b3JfYmVnaW4oc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjAsCisJCQkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSAgICAgICBpbnQgdHJpbSkKK3sKKwlzdHJ1Y3QgcHJlZml4X3JlZl9pdGVyYXRvciAqaXRlcjsKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3I7CisKKwlpZiAoISpwcmVmaXggJiYgIXRyaW0pCisJCXJldHVybiBpdGVyMDsgLyogb3B0aW1pemF0aW9uOiBubyBuZWVkIHRvIHdyYXAgaXRlcmF0b3IgKi8KKworCWl0ZXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXRlcikpOworCXJlZl9pdGVyYXRvciA9ICZpdGVyLT5iYXNlOworCisJYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChyZWZfaXRlcmF0b3IsICZwcmVmaXhfcmVmX2l0ZXJhdG9yX3Z0YWJsZSwgaXRlcjAtPm9yZGVyZWQpOworCisJaXRlci0+aXRlcjAgPSBpdGVyMDsKKwlpdGVyLT5wcmVmaXggPSB4c3RyZHVwKHByZWZpeCk7CisJaXRlci0+dHJpbSA9IHRyaW07CisKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yOworfQorCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpjdXJyZW50X3JlZl9pdGVyID0gTlVMTDsKKworaW50IGRvX2Zvcl9lYWNoX3JlcG9fcmVmX2l0ZXJhdG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgZWFjaF9yZXBvX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgcmV0dmFsID0gMCwgb2s7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqb2xkX3JlZl9pdGVyID0gY3VycmVudF9yZWZfaXRlcjsKKworCWN1cnJlbnRfcmVmX2l0ZXIgPSBpdGVyOworCXdoaWxlICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgPT0gSVRFUl9PSykgeworCQlyZXR2YWwgPSBmbihyLCBpdGVyLT5yZWZuYW1lLCBpdGVyLT5vaWQsIGl0ZXItPmZsYWdzLCBjYl9kYXRhKTsKKwkJaWYgKHJldHZhbCkgeworCQkJLyoKKwkJCSAqIElmIHJlZl9pdGVyYXRvcl9hYm9ydCgpIHJldHVybnMgSVRFUl9FUlJPUiwKKwkJCSAqIHdlIGlnbm9yZSB0aGF0IGVycm9yIGluIGRlZmVyZW5jZSB0byB0aGUKKwkJCSAqIGNhbGxiYWNrIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLgorCQkJICovCisJCQlyZWZfaXRlcmF0b3JfYWJvcnQoaXRlcik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWN1cnJlbnRfcmVmX2l0ZXIgPSBvbGRfcmVmX2l0ZXI7CisJaWYgKG9rID09IElURVJfRVJST1IpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvcmVmcy9wYWNrZWQtYmFja2VuZC5jIGIvcmVmcy9wYWNrZWQtYmFja2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NThhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzL3BhY2tlZC1iYWNrZW5kLmMKQEAgLTAsMCArMSwxNjY5IEBACisjaW5jbHVkZSAiLi4vY2FjaGUuaCIKKyNpbmNsdWRlICIuLi9jb25maWcuaCIKKyNpbmNsdWRlICIuLi9yZWZzLmgiCisjaW5jbHVkZSAicmVmcy1pbnRlcm5hbC5oIgorI2luY2x1ZGUgInBhY2tlZC1iYWNrZW5kLmgiCisjaW5jbHVkZSAiLi4vaXRlcmF0b3IuaCIKKyNpbmNsdWRlICIuLi9sb2NrZmlsZS5oIgorI2luY2x1ZGUgIi4uL2NoZGlyLW5vdGlmeS5oIgorCitlbnVtIG1tYXBfc3RyYXRlZ3kgeworCS8qCisJICogRG9uJ3QgdXNlIG1tYXAoKSBhdCBhbGwgZm9yIHJlYWRpbmcgYHBhY2tlZC1yZWZzYC4KKwkgKi8KKwlNTUFQX05PTkUsCisKKwkvKgorCSAqIENhbiB1c2UgbW1hcCgpIGZvciByZWFkaW5nIGBwYWNrZWQtcmVmc2AsIGJ1dCB0aGUgZmlsZSBtdXN0CisJICogbm90IHJlbWFpbiBtbWFwcGVkLiBUaGlzIGlzIHRoZSB1c3VhbCBvcHRpb24gb24gV2luZG93cywKKwkgKiB3aGVyZSB5b3UgY2Fubm90IHJlbmFtZSBhIG5ldyB2ZXJzaW9uIG9mIGEgZmlsZSBvbnRvIGEgZmlsZQorCSAqIHRoYXQgaXMgY3VycmVudGx5IG1tYXBwZWQuCisJICovCisJTU1BUF9URU1QT1JBUlksCisKKwkvKgorCSAqIEl0IGlzIE9LIHRvIGxlYXZlIHRoZSBgcGFja2VkLXJlZnNgIGZpbGUgbW1hcHBlZCB3aGlsZQorCSAqIGFyYml0cmFyeSBvdGhlciBjb2RlIGlzIHJ1bm5pbmcuCisJICovCisJTU1BUF9PSworfTsKKworI2lmIGRlZmluZWQoTk9fTU1BUCkKK3N0YXRpYyBlbnVtIG1tYXBfc3RyYXRlZ3kgbW1hcF9zdHJhdGVneSA9IE1NQVBfTk9ORTsKKyNlbGlmIGRlZmluZWQoTU1BUF9QUkVWRU5UU19ERUxFVEUpCitzdGF0aWMgZW51bSBtbWFwX3N0cmF0ZWd5IG1tYXBfc3RyYXRlZ3kgPSBNTUFQX1RFTVBPUkFSWTsKKyNlbHNlCitzdGF0aWMgZW51bSBtbWFwX3N0cmF0ZWd5IG1tYXBfc3RyYXRlZ3kgPSBNTUFQX09LOworI2VuZGlmCisKK3N0cnVjdCBwYWNrZWRfcmVmX3N0b3JlOworCisvKgorICogQSBgc25hcHNob3RgIHJlcHJlc2VudHMgb25lIHNuYXBzaG90IG9mIGEgYHBhY2tlZC1yZWZzYCBmaWxlLgorICoKKyAqIE5vcm1hbGx5LCB0aGlzIHdpbGwgYmUgYSBtbWFwcGVkIHZpZXcgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZQorICogYHBhY2tlZC1yZWZzYCBmaWxlIGF0IHRoZSB0aW1lIHRoZSBzbmFwc2hvdCB3YXMgY3JlYXRlZC4gSG93ZXZlciwKKyAqIGlmIHRoZSBgcGFja2VkLXJlZnNgIGZpbGUgd2FzIG5vdCBzb3J0ZWQsIHRoaXMgbWlnaHQgcG9pbnQgYXQgaGVhcAorICogbWVtb3J5IGhvbGRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBgcGFja2VkLXJlZnNgIGZpbGUgd2l0aCBpdHMKKyAqIHJlY29yZHMgc29ydGVkIGJ5IHJlZm5hbWUuCisgKgorICogYHNuYXBzaG90YCBpbnN0YW5jZXMgYXJlIHJlZmVyZW5jZSBjb3VudGVkICh2aWEKKyAqIGBhY3F1aXJlX3NuYXBzaG90KClgIGFuZCBgcmVsZWFzZV9zbmFwc2hvdCgpYCkuIFRoaXMgaXMgdG8gcHJldmVudAorICogYW4gaW5zdGFuY2UgZnJvbSBkaXNhcHBlYXJpbmcgd2hpbGUgYW4gaXRlcmF0b3IgaXMgc3RpbGwgaXRlcmF0aW5nCisgKiBvdmVyIGl0LiBJbnN0YW5jZXMgYXJlIGdhcmJhZ2UgY29sbGVjdGVkIHdoZW4gdGhlaXIgYHJlZmVycmVyc2AKKyAqIGNvdW50IGdvZXMgdG8gemVyby4KKyAqCisgKiBUaGUgbW9zdCByZWNlbnQgYHNuYXBzaG90YCwgaWYgYXZhaWxhYmxlLCBpcyByZWZlcmVuY2VkIGJ5IHRoZQorICogYHBhY2tlZF9yZWZfc3RvcmVgLiBJdHMgZnJlc2huZXNzIGlzIGNoZWNrZWQgd2hlbmV2ZXIKKyAqIGBnZXRfc25hcHNob3QoKWAgaXMgY2FsbGVkOyBpZiB0aGUgZXhpc3Rpbmcgc25hcHNob3QgaXMgb2Jzb2xldGUsIGEKKyAqIG5ldyBzbmFwc2hvdCBpcyB0YWtlbi4KKyAqLworc3RydWN0IHNuYXBzaG90IHsKKwkvKgorCSAqIEEgYmFjay1wb2ludGVyIHRvIHRoZSBwYWNrZWRfcmVmX3N0b3JlIHdpdGggd2hpY2ggdGhpcworCSAqIHNuYXBzaG90IGlzIGFzc29jaWF0ZWQ6CisJICovCisJc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnM7CisKKwkvKiBJcyB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIGN1cnJlbnRseSBtbWFwcGVkPyAqLworCWludCBtbWFwcGVkOworCisJLyoKKwkgKiBUaGUgY29udGVudHMgb2YgdGhlIGBwYWNrZWQtcmVmc2AgZmlsZToKKwkgKgorCSAqIC0gYnVmIC0tIGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIG1lbW9yeQorCSAqIC0gc3RhcnQgLS0gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIGFjdHVhbCByZWZlcmVuY2VzCisJICogICAoaS5lLiwgYWZ0ZXIgdGhlIGhlYWRlciBsaW5lLCBpZiBvbmUgaXMgcHJlc2VudCkKKwkgKiAtIGVvZiAtLSBhIHBvaW50ZXIganVzdCBwYXN0IHRoZSBlbmQgb2YgdGhlIHJlZmVyZW5jZQorCSAqICAgY29udGVudHMKKwkgKgorCSAqIElmIHRoZSBgcGFja2VkLXJlZnNgIGZpbGUgd2FzIGFscmVhZHkgc29ydGVkLCBgYnVmYCBwb2ludHMKKwkgKiBhdCB0aGUgbW1hcHBlZCBjb250ZW50cyBvZiB0aGUgZmlsZS4gSWYgbm90LCBpdCBwb2ludHMgYXQKKwkgKiBoZWFwLWFsbG9jYXRlZCBtZW1vcnkgY29udGFpbmluZyB0aGUgY29udGVudHMsIHNvcnRlZC4gSWYKKwkgKiB0aGVyZSB3ZXJlIG5vIGNvbnRlbnRzIChlLmcuLCBiZWNhdXNlIHRoZSBmaWxlIGRpZG4ndAorCSAqIGV4aXN0KSwgYGJ1ZmAsIGBzdGFydGAsIGFuZCBgZW9mYCBhcmUgYWxsIE5VTEwuCisJICovCisJY2hhciAqYnVmLCAqc3RhcnQsICplb2Y7CisKKwkvKgorCSAqIFdoYXQgaXMgdGhlIHBlZWxlZCBzdGF0ZSBvZiB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIHRoYXQKKwkgKiB0aGlzIHNuYXBzaG90IHJlcHJlc2VudHM/IChUaGlzIGlzIHVzdWFsbHkgZGV0ZXJtaW5lZCBmcm9tCisJICogdGhlIGZpbGUncyBoZWFkZXIuKQorCSAqLworCWVudW0geyBQRUVMRURfTk9ORSwgUEVFTEVEX1RBR1MsIFBFRUxFRF9GVUxMWSB9IHBlZWxlZDsKKworCS8qCisJICogQ291bnQgb2YgcmVmZXJlbmNlcyB0byB0aGlzIGluc3RhbmNlLCBpbmNsdWRpbmcgdGhlIHBvaW50ZXIKKwkgKiBmcm9tIGBwYWNrZWRfcmVmX3N0b3JlOjpzbmFwc2hvdGAsIGlmIGFueS4gVGhlIGluc3RhbmNlCisJICogd2lsbCBub3QgYmUgZnJlZWQgYXMgbG9uZyBhcyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzCisJICogbm9uemVyby4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcmVmZXJyZXJzOworCisJLyoKKwkgKiBUaGUgbWV0YWRhdGEgb2YgdGhlIGBwYWNrZWQtcmVmc2AgZmlsZSBmcm9tIHdoaWNoIHRoaXMKKwkgKiBzbmFwc2hvdCB3YXMgY3JlYXRlZCwgdXNlZCB0byB0ZWxsIGlmIHRoZSBmaWxlIGhhcyBiZWVuCisJICogcmVwbGFjZWQgc2luY2Ugd2UgcmVhZCBpdC4KKwkgKi8KKwlzdHJ1Y3Qgc3RhdF92YWxpZGl0eSB2YWxpZGl0eTsKK307CisKKy8qCisgKiBBIGByZWZfc3RvcmVgIHJlcHJlc2VudGluZyByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIGBwYWNrZWQtcmVmc2AKKyAqIGZpbGUuIEl0IGltcGxlbWVudHMgdGhlIGByZWZfc3RvcmVgIGludGVyZmFjZSwgdGhvdWdoIGl0IGhhcyBzb21lCisgKiBsaW1pdGF0aW9uczoKKyAqCisgKiAtIEl0IGNhbm5vdCBzdG9yZSBzeW1ib2xpYyByZWZlcmVuY2VzLgorICoKKyAqIC0gSXQgY2Fubm90IHN0b3JlIHJlZmxvZ3MuCisgKgorICogLSBJdCBkb2VzIG5vdCBzdXBwb3J0IHJlZmVyZW5jZSByZW5hbWluZyAodGhvdWdoIGl0IGNvdWxkKS4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgY2FuIGJlIGxvY2tlZCBvdXRzaWRlIG9mIGEgcmVmZXJlbmNlCisgKiB0cmFuc2FjdGlvbi4gSW4gdGhhdCBjYXNlLCBpdCByZW1haW5zIGxvY2tlZCBldmVuIGFmdGVyIHRoZQorICogdHJhbnNhY3Rpb24gaXMgZG9uZSBhbmQgdGhlIG5ldyBgcGFja2VkLXJlZnNgIGZpbGUgaXMgYWN0aXZhdGVkLgorICovCitzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSB7CisJc3RydWN0IHJlZl9zdG9yZSBiYXNlOworCisJdW5zaWduZWQgaW50IHN0b3JlX2ZsYWdzOworCisJLyogVGhlIHBhdGggb2YgdGhlICJwYWNrZWQtcmVmcyIgZmlsZTogKi8KKwljaGFyICpwYXRoOworCisJLyoKKwkgKiBBIHNuYXBzaG90IG9mIHRoZSB2YWx1ZXMgcmVhZCBmcm9tIHRoZSBgcGFja2VkLXJlZnNgIGZpbGUsCisJICogaWYgaXQgbWlnaHQgc3RpbGwgYmUgY3VycmVudDsgb3RoZXJ3aXNlLCBOVUxMLgorCSAqLworCXN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3Q7CisKKwkvKgorCSAqIExvY2sgdXNlZCBmb3IgdGhlICJwYWNrZWQtcmVmcyIgZmlsZS4gTm90ZSB0aGF0IHRoaXMgKGFuZAorCSAqIHRodXMgdGhlIGVuY2xvc2luZyBgcGFja2VkX3JlZl9zdG9yZWApIG11c3Qgbm90IGJlIGZyZWVkLgorCSAqLworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jazsKKworCS8qCisJICogVGVtcG9yYXJ5IGZpbGUgdXNlZCB3aGVuIHJld3JpdGluZyBuZXcgY29udGVudHMgdG8gdGhlCisJICogInBhY2tlZC1yZWZzIiBmaWxlLiBOb3RlIHRoYXQgdGhpcyAoYW5kIHRodXMgdGhlIGVuY2xvc2luZworCSAqIGBwYWNrZWRfcmVmX3N0b3JlYCkgbXVzdCBub3QgYmUgZnJlZWQuCisJICovCisJc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZTsKK307CisKKy8qCisgKiBJbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBgKnNuYXBzaG90YC4KKyAqLworc3RhdGljIHZvaWQgYWNxdWlyZV9zbmFwc2hvdChzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90KQoreworCXNuYXBzaG90LT5yZWZlcnJlcnMrKzsKK30KKworLyoKKyAqIElmIHRoZSBidWZmZXIgaW4gYHNuYXBzaG90YCBpcyBhY3RpdmUsIHRoZW4gZWl0aGVyIG11bm1hcCB0aGUKKyAqIG1lbW9yeSBhbmQgY2xvc2UgdGhlIGZpbGUsIG9yIGZyZWUgdGhlIG1lbW9yeS4gVGhlbiBzZXQgdGhlIGJ1ZmZlcgorICogcG9pbnRlcnMgdG8gTlVMTC4KKyAqLworc3RhdGljIHZvaWQgY2xlYXJfc25hcHNob3RfYnVmZmVyKHN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3QpCit7CisJaWYgKHNuYXBzaG90LT5tbWFwcGVkKSB7CisJCWlmIChtdW5tYXAoc25hcHNob3QtPmJ1Ziwgc25hcHNob3QtPmVvZiAtIHNuYXBzaG90LT5idWYpKQorCQkJZGllX2Vycm5vKCJlcnJvciB1bW1hcHBpbmcgcGFja2VkLXJlZnMgZmlsZSAlcyIsCisJCQkJICBzbmFwc2hvdC0+cmVmcy0+cGF0aCk7CisJCXNuYXBzaG90LT5tbWFwcGVkID0gMDsKKwl9IGVsc2UgeworCQlmcmVlKHNuYXBzaG90LT5idWYpOworCX0KKwlzbmFwc2hvdC0+YnVmID0gc25hcHNob3QtPnN0YXJ0ID0gc25hcHNob3QtPmVvZiA9IE5VTEw7Cit9CisKKy8qCisgKiBEZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGAqc25hcHNob3RgLiBJZiBpdCBnb2VzIHRvIHplcm8sCisgKiBmcmVlIGAqc25hcHNob3RgIGFuZCByZXR1cm4gdHJ1ZTsgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4KKyAqLworc3RhdGljIGludCByZWxlYXNlX3NuYXBzaG90KHN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3QpCit7CisJaWYgKCEtLXNuYXBzaG90LT5yZWZlcnJlcnMpIHsKKwkJc3RhdF92YWxpZGl0eV9jbGVhcigmc25hcHNob3QtPnZhbGlkaXR5KTsKKwkJY2xlYXJfc25hcHNob3RfYnVmZmVyKHNuYXBzaG90KTsKKwkJZnJlZShzbmFwc2hvdCk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworc3RydWN0IHJlZl9zdG9yZSAqcGFja2VkX3JlZl9zdG9yZV9jcmVhdGUoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgc3RvcmVfZmxhZ3MpCit7CisJc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVmcykpOworCXN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSA9IChzdHJ1Y3QgcmVmX3N0b3JlICopcmVmczsKKworCWJhc2VfcmVmX3N0b3JlX2luaXQocmVmX3N0b3JlLCAmcmVmc19iZV9wYWNrZWQpOworCXJlZnMtPnN0b3JlX2ZsYWdzID0gc3RvcmVfZmxhZ3M7CisKKwlyZWZzLT5wYXRoID0geHN0cmR1cChwYXRoKTsKKwljaGRpcl9ub3RpZnlfcmVwYXJlbnQoInBhY2tlZC1yZWZzIiwgJnJlZnMtPnBhdGgpOworCisJcmV0dXJuIHJlZl9zdG9yZTsKK30KKworLyoKKyAqIERvd25jYXN0IGByZWZfc3RvcmVgIHRvIGBwYWNrZWRfcmVmX3N0b3JlYC4gRGllIGlmIGByZWZfc3RvcmVgIGlzCisgKiBub3QgYSBgcGFja2VkX3JlZl9zdG9yZWAuIEFsc28gZGllIGlmIGBwYWNrZWRfcmVmX3N0b3JlYCBkb2Vzbid0CisgKiBzdXBwb3J0IGF0IGxlYXN0IHRoZSBmbGFncyBzcGVjaWZpZWQgaW4gYHJlcXVpcmVkX2ZsYWdzYC4gYGNhbGxlcmAKKyAqIGlzIHVzZWQgaW4gYW55IG5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcy4KKyAqLworc3RhdGljIHN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpwYWNrZWRfZG93bmNhc3Qoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCQkJdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZsYWdzLAorCQkJCQkJY29uc3QgY2hhciAqY2FsbGVyKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzOworCisJaWYgKHJlZl9zdG9yZS0+YmUgIT0gJnJlZnNfYmVfcGFja2VkKQorCQlCVUcoInJlZl9zdG9yZSBpcyB0eXBlIFwiJXNcIiBub3QgXCJwYWNrZWRcIiBpbiAlcyIsCisJCSAgICByZWZfc3RvcmUtPmJlLT5uYW1lLCBjYWxsZXIpOworCisJcmVmcyA9IChzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqKXJlZl9zdG9yZTsKKworCWlmICgocmVmcy0+c3RvcmVfZmxhZ3MgJiByZXF1aXJlZF9mbGFncykgIT0gcmVxdWlyZWRfZmxhZ3MpCisJCUJVRygidW5hbGxvd2VkIG9wZXJhdGlvbiAoJXMpLCByZXF1aXJlcyAleCwgaGFzICV4XG4iLAorCQkgICAgY2FsbGVyLCByZXF1aXJlZF9mbGFncywgcmVmcy0+c3RvcmVfZmxhZ3MpOworCisJcmV0dXJuIHJlZnM7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3NuYXBzaG90KHN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzKQoreworCWlmIChyZWZzLT5zbmFwc2hvdCkgeworCQlzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90ID0gcmVmcy0+c25hcHNob3Q7CisKKwkJcmVmcy0+c25hcHNob3QgPSBOVUxMOworCQlyZWxlYXNlX3NuYXBzaG90KHNuYXBzaG90KTsKKwl9Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV91bnRlcm1pbmF0ZWRfbGluZShjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgICBjb25zdCBjaGFyICpwLCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPCA4MCkKKwkJZGllKCJ1bnRlcm1pbmF0ZWQgbGluZSBpbiAlczogJS4qcyIsIHBhdGgsIChpbnQpbGVuLCBwKTsKKwllbHNlCisJCWRpZSgidW50ZXJtaW5hdGVkIGxpbmUgaW4gJXM6ICUuNzVzLi4uIiwgcGF0aCwgcCk7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9pbnZhbGlkX2xpbmUoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpwLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKmVvbCA9IG1lbWNocihwLCAnXG4nLCBsZW4pOworCisJaWYgKCFlb2wpCisJCWRpZV91bnRlcm1pbmF0ZWRfbGluZShwYXRoLCBwLCBsZW4pOworCWVsc2UgaWYgKGVvbCAtIHAgPCA4MCkKKwkJZGllKCJ1bmV4cGVjdGVkIGxpbmUgaW4gJXM6ICUuKnMiLCBwYXRoLCAoaW50KShlb2wgLSBwKSwgcCk7CisJZWxzZQorCQlkaWUoInVuZXhwZWN0ZWQgbGluZSBpbiAlczogJS43NXMuLi4iLCBwYXRoLCBwKTsKKworfQorCitzdHJ1Y3Qgc25hcHNob3RfcmVjb3JkIHsKKwljb25zdCBjaGFyICpzdGFydDsKKwlzaXplX3QgbGVuOworfTsKKworc3RhdGljIGludCBjbXBfcGFja2VkX3JlZl9yZWNvcmRzKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2MikKK3sKKwljb25zdCBzdHJ1Y3Qgc25hcHNob3RfcmVjb3JkICplMSA9IHYxLCAqZTIgPSB2MjsKKwljb25zdCBjaGFyICpyMSA9IGUxLT5zdGFydCArIHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMTsKKwljb25zdCBjaGFyICpyMiA9IGUyLT5zdGFydCArIHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMTsKKworCXdoaWxlICgxKSB7CisJCWlmICgqcjEgPT0gJ1xuJykKKwkJCXJldHVybiAqcjIgPT0gJ1xuJyA/IDAgOiAtMTsKKwkJaWYgKCpyMSAhPSAqcjIpIHsKKwkJCWlmICgqcjIgPT0gJ1xuJykKKwkJCQlyZXR1cm4gMTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gKHVuc2lnbmVkIGNoYXIpKnIxIDwgKHVuc2lnbmVkIGNoYXIpKnIyID8gLTEgOiArMTsKKwkJfQorCQlyMSsrOworCQlyMisrOworCX0KK30KKworLyoKKyAqIENvbXBhcmUgYSBzbmFwc2hvdCByZWNvcmQgYXQgYHJlY2AgdG8gdGhlIHNwZWNpZmllZCBOVUwtdGVybWluYXRlZAorICogcmVmbmFtZS4KKyAqLworc3RhdGljIGludCBjbXBfcmVjb3JkX3RvX3JlZm5hbWUoY29uc3QgY2hhciAqcmVjLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWNvbnN0IGNoYXIgKnIxID0gcmVjICsgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxOworCWNvbnN0IGNoYXIgKnIyID0gcmVmbmFtZTsKKworCXdoaWxlICgxKSB7CisJCWlmICgqcjEgPT0gJ1xuJykKKwkJCXJldHVybiAqcjIgPyAtMSA6IDA7CisJCWlmICghKnIyKQorCQkJcmV0dXJuIDE7CisJCWlmICgqcjEgIT0gKnIyKQorCQkJcmV0dXJuICh1bnNpZ25lZCBjaGFyKSpyMSA8ICh1bnNpZ25lZCBjaGFyKSpyMiA/IC0xIDogKzE7CisJCXIxKys7CisJCXIyKys7CisJfQorfQorCisvKgorICogYHNuYXBzaG90LT5idWZgIGlzIG5vdCBrbm93biB0byBiZSBzb3J0ZWQuIENoZWNrIHdoZXRoZXIgaXQgaXMsIGFuZAorICogaWYgbm90LCBzb3J0IGl0IGludG8gbmV3IG1lbW9yeSBhbmQgbXVubWFwL2ZyZWUgdGhlIG9sZCBzdG9yYWdlLgorICovCitzdGF0aWMgdm9pZCBzb3J0X3NuYXBzaG90KHN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3QpCit7CisJc3RydWN0IHNuYXBzaG90X3JlY29yZCAqcmVjb3JkcyA9IE5VTEw7CisJc2l6ZV90IGFsbG9jID0gMCwgbnIgPSAwOworCWludCBzb3J0ZWQgPSAxOworCWNvbnN0IGNoYXIgKnBvcywgKmVvZiwgKmVvbDsKKwlzaXplX3QgbGVuLCBpOworCWNoYXIgKm5ld19idWZmZXIsICpkc3Q7CisKKwlwb3MgPSBzbmFwc2hvdC0+c3RhcnQ7CisJZW9mID0gc25hcHNob3QtPmVvZjsKKworCWlmIChwb3MgPT0gZW9mKQorCQlyZXR1cm47CisKKwlsZW4gPSBlb2YgLSBwb3M7CisKKwkvKgorCSAqIEluaXRpYWxpemUgcmVjb3JkcyBiYXNlZCBvbiBhIGNydWRlIGVzdGltYXRlIG9mIHRoZSBudW1iZXIKKwkgKiBvZiByZWZlcmVuY2VzIGluIHRoZSBmaWxlICh3ZSdsbCBncm93IGl0IGJlbG93IGlmIG5lZWRlZCk6CisJICovCisJQUxMT0NfR1JPVyhyZWNvcmRzLCBsZW4gLyA4MCArIDIwLCBhbGxvYyk7CisKKwl3aGlsZSAocG9zIDwgZW9mKSB7CisJCWVvbCA9IG1lbWNocihwb3MsICdcbicsIGVvZiAtIHBvcyk7CisJCWlmICghZW9sKQorCQkJLyogVGhlIHNhZmV0eSBjaGVjayBzaG91bGQgcHJldmVudCB0aGlzLiAqLworCQkJQlVHKCJ1bnRlcm1pbmF0ZWQgbGluZSBmb3VuZCBpbiBwYWNrZWQtcmVmcyIpOworCQlpZiAoZW9sIC0gcG9zIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAyKQorCQkJZGllX2ludmFsaWRfbGluZShzbmFwc2hvdC0+cmVmcy0+cGF0aCwKKwkJCQkJIHBvcywgZW9mIC0gcG9zKTsKKwkJZW9sKys7CisJCWlmIChlb2wgPCBlb2YgJiYgKmVvbCA9PSAnXicpIHsKKwkJCS8qCisJCQkgKiBLZWVwIGFueSBwZWVsZWQgbGluZSB0b2dldGhlciB3aXRoIGl0cworCQkJICogcmVmZXJlbmNlOgorCQkJICovCisJCQljb25zdCBjaGFyICpwZWVsZWRfc3RhcnQgPSBlb2w7CisKKwkJCWVvbCA9IG1lbWNocihwZWVsZWRfc3RhcnQsICdcbicsIGVvZiAtIHBlZWxlZF9zdGFydCk7CisJCQlpZiAoIWVvbCkKKwkJCQkvKiBUaGUgc2FmZXR5IGNoZWNrIHNob3VsZCBwcmV2ZW50IHRoaXMuICovCisJCQkJQlVHKCJ1bnRlcm1pbmF0ZWQgcGVlbGVkIGxpbmUgZm91bmQgaW4gcGFja2VkLXJlZnMiKTsKKwkJCWVvbCsrOworCQl9CisKKwkJQUxMT0NfR1JPVyhyZWNvcmRzLCBuciArIDEsIGFsbG9jKTsKKwkJcmVjb3Jkc1tucl0uc3RhcnQgPSBwb3M7CisJCXJlY29yZHNbbnJdLmxlbiA9IGVvbCAtIHBvczsKKwkJbnIrKzsKKworCQlpZiAoc29ydGVkICYmCisJCSAgICBuciA+IDEgJiYKKwkJICAgIGNtcF9wYWNrZWRfcmVmX3JlY29yZHMoJnJlY29yZHNbbnIgLSAyXSwKKwkJCQkJICAgJnJlY29yZHNbbnIgLSAxXSkgPj0gMCkKKwkJCXNvcnRlZCA9IDA7CisKKwkJcG9zID0gZW9sOworCX0KKworCWlmIChzb3J0ZWQpCisJCWdvdG8gY2xlYW51cDsKKworCS8qIFdlIG5lZWQgdG8gc29ydCB0aGUgbWVtb3J5LiBGaXJzdCB3ZSBzb3J0IHRoZSByZWNvcmRzIGFycmF5OiAqLworCVFTT1JUKHJlY29yZHMsIG5yLCBjbXBfcGFja2VkX3JlZl9yZWNvcmRzKTsKKworCS8qCisJICogQWxsb2NhdGUgYSBuZXcgY2h1bmsgb2YgbWVtb3J5LCBhbmQgY29weSB0aGUgb2xkIG1lbW9yeSB0bworCSAqIHRoZSBuZXcgaW4gdGhlIG9yZGVyIGluZGljYXRlZCBieSBgcmVjb3Jkc2AgKG5vdCBib3RoZXJpbmcKKwkgKiB3aXRoIHRoZSBoZWFkZXIgbGluZSk6CisJICovCisJbmV3X2J1ZmZlciA9IHhtYWxsb2MobGVuKTsKKwlmb3IgKGRzdCA9IG5ld19idWZmZXIsIGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQltZW1jcHkoZHN0LCByZWNvcmRzW2ldLnN0YXJ0LCByZWNvcmRzW2ldLmxlbik7CisJCWRzdCArPSByZWNvcmRzW2ldLmxlbjsKKwl9CisKKwkvKgorCSAqIE5vdyBtdW5tYXAgdGhlIG9sZCBidWZmZXIgYW5kIHVzZSB0aGUgc29ydGVkIGJ1ZmZlciBpbiBpdHMKKwkgKiBwbGFjZToKKwkgKi8KKwljbGVhcl9zbmFwc2hvdF9idWZmZXIoc25hcHNob3QpOworCXNuYXBzaG90LT5idWYgPSBzbmFwc2hvdC0+c3RhcnQgPSBuZXdfYnVmZmVyOworCXNuYXBzaG90LT5lb2YgPSBuZXdfYnVmZmVyICsgbGVuOworCitjbGVhbnVwOgorCWZyZWUocmVjb3Jkcyk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgcmVjb3JkIHRoYXQgY29udGFpbnMgdGhlCisgKiBjaGFyYWN0ZXIgYCpwYCAod2hpY2ggbXVzdCBiZSB3aXRoaW4gdGhlIGJ1ZmZlcikuIElmIG5vIG90aGVyCisgKiByZWNvcmQgc3RhcnQgaXMgZm91bmQsIHJldHVybiBgYnVmYC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfc3RhcnRfb2ZfcmVjb3JkKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqcCkKK3sKKwl3aGlsZSAocCA+IGJ1ZiAmJiAocFstMV0gIT0gJ1xuJyB8fCBwWzBdID09ICdeJykpCisJCXAtLTsKKwlyZXR1cm4gcDsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSByZWNvcmQgZm9sbG93aW5nIHRoZSByZWNvcmQKKyAqIHRoYXQgY29udGFpbnMgYCpwYC4gSWYgbm9uZSBpcyBmb3VuZCBiZWZvcmUgYGVuZGAsIHJldHVybiBgZW5kYC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZW5kX29mX3JlY29yZChjb25zdCBjaGFyICpwLCBjb25zdCBjaGFyICplbmQpCit7CisJd2hpbGUgKCsrcCA8IGVuZCAmJiAocFstMV0gIT0gJ1xuJyB8fCBwWzBdID09ICdeJykpCisJCTsKKwlyZXR1cm4gcDsKK30KKworLyoKKyAqIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBjb21wYXJlIG1tYXBwZWQgcmVmZXJlbmNlIHJlY29yZHMgcXVpY2tseSwKKyAqIHdpdGhvdXQgdG90YWxseSBwYXJzaW5nIHRoZW0uIFdlIGNhbiBkbyBzbyBiZWNhdXNlIHRoZSByZWNvcmRzIGFyZQorICogTEYtdGVybWluYXRlZCwgYW5kIHRoZSByZWZuYW1lIHNob3VsZCBzdGFydCBleGFjdGx5IChHSVRfU0hBMV9IRVhTWgorICogKyAxKSBieXRlcyBwYXN0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlY29yZC4KKyAqCisgKiBCdXQgd2hhdCBpZiB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIGNvbnRhaW5zIGdhcmJhZ2U/IFdlJ3JlIHdpbGxpbmcKKyAqIHRvIHRvbGVyYXRlIG5vdCBkZXRlY3RpbmcgdGhlIHByb2JsZW0sIGFzIGxvbmcgYXMgd2UgZG9uJ3QgcHJvZHVjZQorICogdG90YWxseSBnYXJibGVkIG91dHB1dCAod2UgY2FuJ3QgYWZmb3JkIHRvIGNoZWNrIHRoZSBpbnRlZ3JpdHkgb2YKKyAqIHRoZSB3aG9sZSBmaWxlIGR1cmluZyBldmVyeSBHaXQgaW52b2NhdGlvbikuIEJ1dCB3ZSBkbyB3YW50IHRvIGJlCisgKiBzdXJlIHRoYXQgd2UgbmV2ZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBpbiBtZW1vcnkgYW5kCisgKiBwZXJmb3JtIGFuIGlsbGVnYWwgbWVtb3J5IGFjY2Vzcy4KKyAqCisgKiBHdWFyYW50ZWUgdGhhdCBtaW5pbXVtIGxldmVsIG9mIHNhZmV0eSBieSB2ZXJpZnlpbmcgdGhhdCB0aGUgbGFzdAorICogcmVjb3JkIGluIHRoZSBmaWxlIGlzIExGLXRlcm1pbmF0ZWQsIGFuZCB0aGF0IGl0IGhhcyBhdCBsZWFzdAorICogKEdJVF9TSEExX0hFWFNaICsgMSkgY2hhcmFjdGVycyBiZWZvcmUgdGhlIExGLiBEaWUgaWYgZWl0aGVyIG9mCisgKiB0aGVzZSBjaGVja3MgZmFpbHMuCisgKi8KK3N0YXRpYyB2b2lkIHZlcmlmeV9idWZmZXJfc2FmZShzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90KQoreworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gc25hcHNob3QtPnN0YXJ0OworCWNvbnN0IGNoYXIgKmVvZiA9IHNuYXBzaG90LT5lb2Y7CisJY29uc3QgY2hhciAqbGFzdF9saW5lOworCisJaWYgKHN0YXJ0ID09IGVvZikKKwkJcmV0dXJuOworCisJbGFzdF9saW5lID0gZmluZF9zdGFydF9vZl9yZWNvcmQoc3RhcnQsIGVvZiAtIDEpOworCWlmICgqKGVvZiAtIDEpICE9ICdcbicgfHwgZW9mIC0gbGFzdF9saW5lIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAyKQorCQlkaWVfaW52YWxpZF9saW5lKHNuYXBzaG90LT5yZWZzLT5wYXRoLAorCQkJCSBsYXN0X2xpbmUsIGVvZiAtIGxhc3RfbGluZSk7Cit9CisKKyNkZWZpbmUgU01BTExfRklMRV9TSVpFICgzMioxMDI0KQorCisvKgorICogRGVwZW5kaW5nIG9uIGBtbWFwX3N0cmF0ZWd5YCwgZWl0aGVyIG1tYXAgb3IgcmVhZCB0aGUgY29udGVudHMgb2YKKyAqIHRoZSBgcGFja2VkLXJlZnNgIGZpbGUgaW50byB0aGUgc25hcHNob3QuIFJldHVybiAxIGlmIHRoZSBmaWxlCisgKiBleGlzdGVkIGFuZCB3YXMgcmVhZCwgb3IgMCBpZiB0aGUgZmlsZSB3YXMgYWJzZW50IG9yIGVtcHR5LiBEaWUgb24KKyAqIGVycm9ycy4KKyAqLworc3RhdGljIGludCBsb2FkX2NvbnRlbnRzKHN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3QpCit7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCXNpemVfdCBzaXplOworCXNzaXplX3QgYnl0ZXNfcmVhZDsKKworCWZkID0gb3BlbihzbmFwc2hvdC0+cmVmcy0+cGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgT0s7IGl0IGp1c3QgbWVhbnMgdGhhdCBubworCQkJICogInBhY2tlZC1yZWZzIiBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4geWV0LAorCQkJICogd2hpY2ggaXMgZXF1aXZhbGVudCB0byBpdCBiZWluZyBlbXB0eSwKKwkJCSAqIHdoaWNoIGlzIGl0cyBzdGF0ZSB3aGVuIGluaXRpYWxpemVkIHdpdGgKKwkJCSAqIHplcm9zLgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWRpZV9lcnJubygiY291bGRuJ3QgcmVhZCAlcyIsIHNuYXBzaG90LT5yZWZzLT5wYXRoKTsKKwkJfQorCX0KKworCXN0YXRfdmFsaWRpdHlfdXBkYXRlKCZzbmFwc2hvdC0+dmFsaWRpdHksIGZkKTsKKworCWlmIChmc3RhdChmZCwgJnN0KSA8IDApCisJCWRpZV9lcnJubygiY291bGRuJ3Qgc3RhdCAlcyIsIHNuYXBzaG90LT5yZWZzLT5wYXRoKTsKKwlzaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKworCWlmICghc2l6ZSkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAobW1hcF9zdHJhdGVneSA9PSBNTUFQX05PTkUgfHwgc2l6ZSA8PSBTTUFMTF9GSUxFX1NJWkUpIHsKKwkJc25hcHNob3QtPmJ1ZiA9IHhtYWxsb2Moc2l6ZSk7CisJCWJ5dGVzX3JlYWQgPSByZWFkX2luX2Z1bGwoZmQsIHNuYXBzaG90LT5idWYsIHNpemUpOworCQlpZiAoYnl0ZXNfcmVhZCA8IDAgfHwgYnl0ZXNfcmVhZCAhPSBzaXplKQorCQkJZGllX2Vycm5vKCJjb3VsZG4ndCByZWFkICVzIiwgc25hcHNob3QtPnJlZnMtPnBhdGgpOworCQlzbmFwc2hvdC0+bW1hcHBlZCA9IDA7CisJfSBlbHNlIHsKKwkJc25hcHNob3QtPmJ1ZiA9IHhtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwkJc25hcHNob3QtPm1tYXBwZWQgPSAxOworCX0KKwljbG9zZShmZCk7CisKKwlzbmFwc2hvdC0+c3RhcnQgPSBzbmFwc2hvdC0+YnVmOworCXNuYXBzaG90LT5lb2YgPSBzbmFwc2hvdC0+YnVmICsgc2l6ZTsKKworCXJldHVybiAxOworfQorCisvKgorICogRmluZCB0aGUgcGxhY2UgaW4gYHNuYXBzaG90LT5idWZgIHdoZXJlIHRoZSBzdGFydCBvZiB0aGUgcmVjb3JkIGZvcgorICogYHJlZm5hbWVgIHN0YXJ0cy4gSWYgYG11c3RleGlzdGAgaXMgdHJ1ZSBhbmQgdGhlIHJlZmVyZW5jZSBkb2Vzbid0CisgKiBleGlzdCwgdGhlbiByZXR1cm4gTlVMTC4gSWYgYG11c3RleGlzdGAgaXMgZmFsc2UgYW5kIHRoZSByZWZlcmVuY2UKKyAqIGRvZXNuJ3QgZXhpc3QsIHRoZW4gcmV0dXJuIHRoZSBwb2ludCB3aGVyZSB0aGF0IHJlZmVyZW5jZSB3b3VsZCBiZQorICogaW5zZXJ0ZWQsIG9yIGBzbmFwc2hvdC0+ZW9mYCAod2hpY2ggbWlnaHQgYmUgTlVMTCkgaWYgaXQgd291bGQgYmUKKyAqIGluc2VydGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIEluIHRoZSBsYXR0ZXIgbW9kZSwgYHJlZm5hbWVgCisgKiBkb2Vzbid0IGhhdmUgdG8gYmUgYSBwcm9wZXIgcmVmZXJlbmNlIG5hbWU7IGZvciBleGFtcGxlLCBvbmUgY291bGQKKyAqIHNlYXJjaCBmb3IgInJlZnMvcmVwbGFjZS8iIHRvIGZpbmQgdGhlIHN0YXJ0IG9mIGFueSByZXBsYWNlCisgKiByZWZlcmVuY2VzLgorICoKKyAqIFRoZSByZWNvcmQgaXMgc291Z2h0IHVzaW5nIGEgYmluYXJ5IHNlYXJjaCwgc28gYHNuYXBzaG90LT5idWZgIG11c3QKKyAqIGJlIHNvcnRlZC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfcmVmZXJlbmNlX2xvY2F0aW9uKHN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3QsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBtdXN0ZXhpc3QpCit7CisJLyoKKwkgKiBUaGlzIGlzIG5vdCAqcXVpdGUqIGEgZ2FyZGVuLXZhcmlldHkgYmluYXJ5IHNlYXJjaCwgYmVjYXVzZQorCSAqIHRoZSBkYXRhIHdlJ3JlIHNlYXJjaGluZyBpcyBtYWRlIHVwIG9mIHJlY29yZHMsIGFuZCB3ZQorCSAqIGFsd2F5cyBuZWVkIHRvIGZpbmQgdGhlIGJlZ2lubmluZyBvZiBhIHJlY29yZCB0byBkbyBhCisJICogY29tcGFyaXNvbi4gQSAicmVjb3JkIiBoZXJlIGlzIG9uZSBsaW5lIGZvciB0aGUgcmVmZXJlbmNlCisJICogaXRzZWxmIGFuZCB6ZXJvIG9yIG9uZSBwZWVsIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCAnXicuIE91cgorCSAqIGxvb3AgaW52YXJpYW50IGlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCB0d28gY29tbWVudHMuCisJICovCisKKwkvKgorCSAqIEEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzdGFydCBvZiBhIHJlY29yZCB3aG9zZQorCSAqIHByZWNlZGluZyByZWNvcmRzIGFsbCBoYXZlIHJlZmVyZW5jZSBuYW1lcyB0aGF0IGNvbWUKKwkgKiAqYmVmb3JlKiBgcmVmbmFtZWAuCisJICovCisJY29uc3QgY2hhciAqbG8gPSBzbmFwc2hvdC0+c3RhcnQ7CisKKwkvKgorCSAqIEEgcG9pbnRlciB0byBhIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSByZWNvcmQgd2hvc2UKKwkgKiByZWZlcmVuY2UgbmFtZSBjb21lcyAqYWZ0ZXIqIGByZWZuYW1lYC4KKwkgKi8KKwljb25zdCBjaGFyICpoaSA9IHNuYXBzaG90LT5lb2Y7CisKKwl3aGlsZSAobG8gIT0gaGkpIHsKKwkJY29uc3QgY2hhciAqbWlkLCAqcmVjOworCQlpbnQgY21wOworCisJCW1pZCA9IGxvICsgKGhpIC0gbG8pIC8gMjsKKwkJcmVjID0gZmluZF9zdGFydF9vZl9yZWNvcmQobG8sIG1pZCk7CisJCWNtcCA9IGNtcF9yZWNvcmRfdG9fcmVmbmFtZShyZWMsIHJlZm5hbWUpOworCQlpZiAoY21wIDwgMCkgeworCQkJbG8gPSBmaW5kX2VuZF9vZl9yZWNvcmQobWlkLCBoaSk7CisJCX0gZWxzZSBpZiAoY21wID4gMCkgeworCQkJaGkgPSByZWM7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gcmVjOworCQl9CisJfQorCisJaWYgKG11c3RleGlzdCkKKwkJcmV0dXJuIE5VTEw7CisJZWxzZQorCQlyZXR1cm4gbG87Cit9CisKKy8qCisgKiBDcmVhdGUgYSBuZXdseS1hbGxvY2F0ZWQgYHNuYXBzaG90YCBvZiB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlIGluCisgKiBpdHMgY3VycmVudCBzdGF0ZSBhbmQgcmV0dXJuIGl0LiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxyZWFkeSBoYXZlCisgKiBpdHMgcmVmZXJlbmNlIGNvdW50IGluY3JlbWVudGVkLgorICoKKyAqIEEgY29tbWVudCBsaW5lIG9mIHRoZSBmb3JtICIjIHBhY2stcmVmcyB3aXRoOiAiIG1heSBjb250YWluIHplcm8gb3IKKyAqIG1vcmUgdHJhaXRzLiBXZSBpbnRlcnByZXQgdGhlIHRyYWl0cyBhcyBmb2xsb3dzOgorICoKKyAqICAgTmVpdGhlciBgcGVlbGVkYCBub3IgYGZ1bGx5LXBlZWxlZGA6CisgKgorICogICAgICBQcm9iYWJseSBubyByZWZlcmVuY2VzIGFyZSBwZWVsZWQuIEJ1dCBpZiB0aGUgZmlsZSBjb250YWlucyBhCisgKiAgICAgIHBlZWxlZCB2YWx1ZSBmb3IgYSByZWZlcmVuY2UsIHdlIHdpbGwgdXNlIGl0LgorICoKKyAqICAgYHBlZWxlZGA6CisgKgorICogICAgICBSZWZlcmVuY2VzIHVuZGVyICJyZWZzL3RhZ3MvIiwgaWYgdGhleSAqY2FuKiBiZSBwZWVsZWQsICphcmUqCisgKiAgICAgIHBlZWxlZCBpbiB0aGlzIGZpbGUuIFJlZmVyZW5jZXMgb3V0c2lkZSBvZiAicmVmcy90YWdzLyIgYXJlCisgKiAgICAgIHByb2JhYmx5IG5vdCBwZWVsZWQgZXZlbiBpZiB0aGV5IGNvdWxkIGhhdmUgYmVlbiwgYnV0IGlmIHdlIGZpbmQKKyAqICAgICAgYSBwZWVsZWQgdmFsdWUgZm9yIHN1Y2ggYSByZWZlcmVuY2Ugd2Ugd2lsbCB1c2UgaXQuCisgKgorICogICBgZnVsbHktcGVlbGVkYDoKKyAqCisgKiAgICAgIEFsbCByZWZlcmVuY2VzIGluIHRoZSBmaWxlIHRoYXQgY2FuIGJlIHBlZWxlZCBhcmUgcGVlbGVkLgorICogICAgICBJbnZlcnNlbHkgKGFuZCB0aGlzIGlzIG1vcmUgaW1wb3J0YW50KSwgYW55IHJlZmVyZW5jZXMgaW4gdGhlCisgKiAgICAgIGZpbGUgZm9yIHdoaWNoIG5vIHBlZWxlZCB2YWx1ZSBpcyByZWNvcmRlZCBpcyBub3QgcGVlbGFibGUuIFRoaXMKKyAqICAgICAgdHJhaXQgc2hvdWxkIHR5cGljYWxseSBiZSB3cml0dGVuIGFsb25nc2lkZSAicGVlbGVkIiBmb3IKKyAqICAgICAgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGNsaWVudHMsIGJ1dCB3ZSBkbyBub3QgcmVxdWlyZSBpdAorICogICAgICAoaS5lLiwgInBlZWxlZCIgaXMgYSBuby1vcCBpZiAiZnVsbHktcGVlbGVkIiBpcyBzZXQpLgorICoKKyAqICAgYHNvcnRlZGA6CisgKgorICogICAgICBUaGUgcmVmZXJlbmNlcyBpbiB0aGlzIGZpbGUgYXJlIGtub3duIHRvIGJlIHNvcnRlZCBieSByZWZuYW1lLgorICovCitzdGF0aWMgc3RydWN0IHNuYXBzaG90ICpjcmVhdGVfc25hcHNob3Qoc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMpCit7CisJc3RydWN0IHNuYXBzaG90ICpzbmFwc2hvdCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzbmFwc2hvdCkpOworCWludCBzb3J0ZWQgPSAwOworCisJc25hcHNob3QtPnJlZnMgPSByZWZzOworCWFjcXVpcmVfc25hcHNob3Qoc25hcHNob3QpOworCXNuYXBzaG90LT5wZWVsZWQgPSBQRUVMRURfTk9ORTsKKworCWlmICghbG9hZF9jb250ZW50cyhzbmFwc2hvdCkpCisJCXJldHVybiBzbmFwc2hvdDsKKworCS8qIElmIHRoZSBmaWxlIGhhcyBhIGhlYWRlciBsaW5lLCBwcm9jZXNzIGl0OiAqLworCWlmIChzbmFwc2hvdC0+YnVmIDwgc25hcHNob3QtPmVvZiAmJiAqc25hcHNob3QtPmJ1ZiA9PSAnIycpIHsKKwkJY2hhciAqdG1wLCAqcCwgKmVvbDsKKwkJc3RydWN0IHN0cmluZ19saXN0IHRyYWl0cyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKKwkJZW9sID0gbWVtY2hyKHNuYXBzaG90LT5idWYsICdcbicsCisJCQkgICAgIHNuYXBzaG90LT5lb2YgLSBzbmFwc2hvdC0+YnVmKTsKKwkJaWYgKCFlb2wpCisJCQlkaWVfdW50ZXJtaW5hdGVkX2xpbmUocmVmcy0+cGF0aCwKKwkJCQkJICAgICAgc25hcHNob3QtPmJ1ZiwKKwkJCQkJICAgICAgc25hcHNob3QtPmVvZiAtIHNuYXBzaG90LT5idWYpOworCisJCXRtcCA9IHhtZW1kdXB6KHNuYXBzaG90LT5idWYsIGVvbCAtIHNuYXBzaG90LT5idWYpOworCisJCWlmICghc2tpcF9wcmVmaXgodG1wLCAiIyBwYWNrLXJlZnMgd2l0aDoiLCAoY29uc3QgY2hhciAqKikmcCkpCisJCQlkaWVfaW52YWxpZF9saW5lKHJlZnMtPnBhdGgsCisJCQkJCSBzbmFwc2hvdC0+YnVmLAorCQkJCQkgc25hcHNob3QtPmVvZiAtIHNuYXBzaG90LT5idWYpOworCisJCXN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCZ0cmFpdHMsIHAsICcgJywgLTEpOworCisJCWlmICh1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZ0cmFpdHMsICJmdWxseS1wZWVsZWQiKSkKKwkJCXNuYXBzaG90LT5wZWVsZWQgPSBQRUVMRURfRlVMTFk7CisJCWVsc2UgaWYgKHVuc29ydGVkX3N0cmluZ19saXN0X2hhc19zdHJpbmcoJnRyYWl0cywgInBlZWxlZCIpKQorCQkJc25hcHNob3QtPnBlZWxlZCA9IFBFRUxFRF9UQUdTOworCisJCXNvcnRlZCA9IHVuc29ydGVkX3N0cmluZ19saXN0X2hhc19zdHJpbmcoJnRyYWl0cywgInNvcnRlZCIpOworCisJCS8qIHBlcmhhcHMgb3RoZXIgdHJhaXRzIGxhdGVyIGFzIHdlbGwgKi8KKworCQkvKiBUaGUgIisgMSIgaXMgZm9yIHRoZSBMRiBjaGFyYWN0ZXIuICovCisJCXNuYXBzaG90LT5zdGFydCA9IGVvbCArIDE7CisKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnRyYWl0cywgMCk7CisJCWZyZWUodG1wKTsKKwl9CisKKwl2ZXJpZnlfYnVmZmVyX3NhZmUoc25hcHNob3QpOworCisJaWYgKCFzb3J0ZWQpIHsKKwkJc29ydF9zbmFwc2hvdChzbmFwc2hvdCk7CisKKwkJLyoKKwkJICogUmVvcmRlcmluZyB0aGUgcmVjb3JkcyBtaWdodCBoYXZlIG1vdmVkIGEgc2hvcnQgb25lCisJCSAqIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgc28gdmVyaWZ5IHRoZSBidWZmZXIncworCQkgKiBzYWZldHkgYWdhaW46CisJCSAqLworCQl2ZXJpZnlfYnVmZmVyX3NhZmUoc25hcHNob3QpOworCX0KKworCWlmIChtbWFwX3N0cmF0ZWd5ICE9IE1NQVBfT0sgJiYgc25hcHNob3QtPm1tYXBwZWQpIHsKKwkJLyoKKwkJICogV2UgZG9uJ3Qgd2FudCB0byBsZWF2ZSB0aGUgZmlsZSBtbWFwcGVkLCBzbyB3ZSBhcmUKKwkJICogZm9yY2VkIHRvIG1ha2UgYSBjb3B5IG5vdzoKKwkJICovCisJCXNpemVfdCBzaXplID0gc25hcHNob3QtPmVvZiAtIHNuYXBzaG90LT5zdGFydDsKKwkJY2hhciAqYnVmX2NvcHkgPSB4bWFsbG9jKHNpemUpOworCisJCW1lbWNweShidWZfY29weSwgc25hcHNob3QtPnN0YXJ0LCBzaXplKTsKKwkJY2xlYXJfc25hcHNob3RfYnVmZmVyKHNuYXBzaG90KTsKKwkJc25hcHNob3QtPmJ1ZiA9IHNuYXBzaG90LT5zdGFydCA9IGJ1Zl9jb3B5OworCQlzbmFwc2hvdC0+ZW9mID0gYnVmX2NvcHkgKyBzaXplOworCX0KKworCXJldHVybiBzbmFwc2hvdDsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgYHJlZnMtPnNuYXBzaG90YCAoaWYgcHJlc2VudCkgc3RpbGwgcmVmbGVjdHMgdGhlCisgKiBjb250ZW50cyBvZiB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlLiBJZiBub3QsIGNsZWFyIHRoZSBzbmFwc2hvdC4KKyAqLworc3RhdGljIHZvaWQgdmFsaWRhdGVfc25hcHNob3Qoc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMpCit7CisJaWYgKHJlZnMtPnNuYXBzaG90ICYmCisJICAgICFzdGF0X3ZhbGlkaXR5X2NoZWNrKCZyZWZzLT5zbmFwc2hvdC0+dmFsaWRpdHksIHJlZnMtPnBhdGgpKQorCQljbGVhcl9zbmFwc2hvdChyZWZzKTsKK30KKworLyoKKyAqIEdldCB0aGUgYHNuYXBzaG90YCBmb3IgdGhlIHNwZWNpZmllZCBwYWNrZWRfcmVmX3N0b3JlLCBjcmVhdGluZyBhbmQKKyAqIHBvcHVsYXRpbmcgaXQgaWYgaXQgaGFzbid0IGJlZW4gcmVhZCBiZWZvcmUgb3IgaWYgdGhlIGZpbGUgaGFzIGJlZW4KKyAqIGNoYW5nZWQgKGFjY29yZGluZyB0byBpdHMgYHZhbGlkaXR5YCBmaWVsZCkgc2luY2UgaXQgd2FzIGxhc3QgcmVhZC4KKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBob2xkIHRoZSBsb2NrLCB0aGVuIGFzc3VtZSB0aGF0IHRoZSBmaWxlCisgKiBoYXNuJ3QgYmVlbiBjaGFuZ2VkIG91dCBmcm9tIHVuZGVyIHVzLCBzbyBza2lwIHRoZSBleHRyYSBgc3RhdCgpYAorICogY2FsbCBpbiBgc3RhdF92YWxpZGl0eV9jaGVjaygpYC4gVGhpcyBmdW5jdGlvbiBkb2VzICpub3QqIGluY3JlYXNlCisgKiB0aGUgc25hcHNob3QncyByZWZlcmVuY2UgY291bnQgb24gYmVoYWxmIG9mIHRoZSBjYWxsZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25hcHNob3QgKmdldF9zbmFwc2hvdChzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcykKK3sKKwlpZiAoIWlzX2xvY2tfZmlsZV9sb2NrZWQoJnJlZnMtPmxvY2spKQorCQl2YWxpZGF0ZV9zbmFwc2hvdChyZWZzKTsKKworCWlmICghcmVmcy0+c25hcHNob3QpCisJCXJlZnMtPnNuYXBzaG90ID0gY3JlYXRlX3NuYXBzaG90KHJlZnMpOworCisJcmV0dXJuIHJlZnMtPnNuYXBzaG90OworfQorCitzdGF0aWMgaW50IHBhY2tlZF9yZWFkX3Jhd19yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpyZWZlcmVudCwgdW5zaWduZWQgaW50ICp0eXBlKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0KKwkJcGFja2VkX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1JFQUQsICJyZWFkX3Jhd19yZWYiKTsKKwlzdHJ1Y3Qgc25hcHNob3QgKnNuYXBzaG90ID0gZ2V0X3NuYXBzaG90KHJlZnMpOworCWNvbnN0IGNoYXIgKnJlYzsKKworCSp0eXBlID0gMDsKKworCXJlYyA9IGZpbmRfcmVmZXJlbmNlX2xvY2F0aW9uKHNuYXBzaG90LCByZWZuYW1lLCAxKTsKKworCWlmICghcmVjKSB7CisJCS8qIHJlZm5hbWUgaXMgbm90IGEgcGFja2VkIHJlZmVyZW5jZS4gKi8KKwkJZXJybm8gPSBFTk9FTlQ7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZ2V0X29pZF9oZXgocmVjLCBvaWQpKQorCQlkaWVfaW52YWxpZF9saW5lKHJlZnMtPnBhdGgsIHJlYywgc25hcHNob3QtPmVvZiAtIHJlYyk7CisKKwkqdHlwZSA9IFJFRl9JU1BBQ0tFRDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgdmFsdWUgaXMgc2V0IGluIGBiYXNlLmZsYWdzYCBpZiB0aGUgcGVlbGVkIHZhbHVlIG9mIHRoZQorICogY3VycmVudCByZWZlcmVuY2UgaXMga25vd24uIEluIHRoYXQgY2FzZSwgYHBlZWxlZGAgY29udGFpbnMgdGhlCisgKiBjb3JyZWN0IHBlZWxlZCB2YWx1ZSBmb3IgdGhlIHJlZmVyZW5jZSwgd2hpY2ggbWlnaHQgYmUgYG51bGxfb2lkYAorICogaWYgdGhlIHJlZmVyZW5jZSBpcyBub3QgYSB0YWcgb3IgaWYgaXQgaXMgYnJva2VuLgorICovCisjZGVmaW5lIFJFRl9LTk9XU19QRUVMRUQgMHg0MAorCisvKgorICogQW4gaXRlcmF0b3Igb3ZlciBhIHNuYXBzaG90IG9mIGEgYHBhY2tlZC1yZWZzYCBmaWxlLgorICovCitzdHJ1Y3QgcGFja2VkX3JlZl9pdGVyYXRvciB7CisJc3RydWN0IHJlZl9pdGVyYXRvciBiYXNlOworCisJc3RydWN0IHNuYXBzaG90ICpzbmFwc2hvdDsKKworCS8qIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzbmFwc2hvdCdzIGJ1ZmZlcjogKi8KKwljb25zdCBjaGFyICpwb3M7CisKKwkvKiBUaGUgZW5kIG9mIHRoZSBwYXJ0IG9mIHRoZSBidWZmZXIgdGhhdCB3aWxsIGJlIGl0ZXJhdGVkIG92ZXI6ICovCisJY29uc3QgY2hhciAqZW9mOworCisJLyogU2NyYXRjaCBzcGFjZSBmb3IgY3VycmVudCB2YWx1ZXM6ICovCisJc3RydWN0IG9iamVjdF9pZCBvaWQsIHBlZWxlZDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZm5hbWVfYnVmOworCisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworLyoKKyAqIE1vdmUgdGhlIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IHJlY29yZCBpbiB0aGUgc25hcHNob3QsIHdpdGhvdXQKKyAqIHJlc3BlY3QgZm9yIHdoZXRoZXIgdGhlIHJlY29yZCBpcyBhY3R1YWxseSByZXF1aXJlZCBieSB0aGUgY3VycmVudAorICogaXRlcmF0aW9uLiBBZGp1c3QgdGhlIGZpZWxkcyBpbiBgaXRlcmAgYW5kIHJldHVybiBgSVRFUl9PS2Agb3IKKyAqIGBJVEVSX0RPTkVgLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGZyZWUgdGhlIGl0ZXJhdG9yIGluIHRoZSBjYXNlCisgKiBvZiBgSVRFUl9ET05FYC4KKyAqLworc3RhdGljIGludCBuZXh0X3JlY29yZChzdHJ1Y3QgcGFja2VkX3JlZl9pdGVyYXRvciAqaXRlcikKK3sKKwljb25zdCBjaGFyICpwID0gaXRlci0+cG9zLCAqZW9sOworCisJc3RyYnVmX3Jlc2V0KCZpdGVyLT5yZWZuYW1lX2J1Zik7CisKKwlpZiAoaXRlci0+cG9zID09IGl0ZXItPmVvZikKKwkJcmV0dXJuIElURVJfRE9ORTsKKworCWl0ZXItPmJhc2UuZmxhZ3MgPSBSRUZfSVNQQUNLRUQ7CisKKwlpZiAoaXRlci0+ZW9mIC0gcCA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMiB8fAorCSAgICBwYXJzZV9vaWRfaGV4KHAsICZpdGVyLT5vaWQsICZwKSB8fAorCSAgICAhaXNzcGFjZSgqcCsrKSkKKwkJZGllX2ludmFsaWRfbGluZShpdGVyLT5zbmFwc2hvdC0+cmVmcy0+cGF0aCwKKwkJCQkgaXRlci0+cG9zLCBpdGVyLT5lb2YgLSBpdGVyLT5wb3MpOworCisJZW9sID0gbWVtY2hyKHAsICdcbicsIGl0ZXItPmVvZiAtIHApOworCWlmICghZW9sKQorCQlkaWVfdW50ZXJtaW5hdGVkX2xpbmUoaXRlci0+c25hcHNob3QtPnJlZnMtPnBhdGgsCisJCQkJICAgICAgaXRlci0+cG9zLCBpdGVyLT5lb2YgLSBpdGVyLT5wb3MpOworCisJc3RyYnVmX2FkZCgmaXRlci0+cmVmbmFtZV9idWYsIHAsIGVvbCAtIHApOworCWl0ZXItPmJhc2UucmVmbmFtZSA9IGl0ZXItPnJlZm5hbWVfYnVmLmJ1ZjsKKworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChpdGVyLT5iYXNlLnJlZm5hbWUsIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpKSB7CisJCWlmICghcmVmbmFtZV9pc19zYWZlKGl0ZXItPmJhc2UucmVmbmFtZSkpCisJCQlkaWUoInBhY2tlZCByZWZuYW1lIGlzIGRhbmdlcm91czogJXMiLAorCQkJICAgIGl0ZXItPmJhc2UucmVmbmFtZSk7CisJCW9pZGNscigmaXRlci0+b2lkKTsKKwkJaXRlci0+YmFzZS5mbGFncyB8PSBSRUZfQkFEX05BTUUgfCBSRUZfSVNCUk9LRU47CisJfQorCWlmIChpdGVyLT5zbmFwc2hvdC0+cGVlbGVkID09IFBFRUxFRF9GVUxMWSB8fAorCSAgICAoaXRlci0+c25hcHNob3QtPnBlZWxlZCA9PSBQRUVMRURfVEFHUyAmJgorCSAgICAgc3RhcnRzX3dpdGgoaXRlci0+YmFzZS5yZWZuYW1lLCAicmVmcy90YWdzLyIpKSkKKwkJaXRlci0+YmFzZS5mbGFncyB8PSBSRUZfS05PV1NfUEVFTEVEOworCisJaXRlci0+cG9zID0gZW9sICsgMTsKKworCWlmIChpdGVyLT5wb3MgPCBpdGVyLT5lb2YgJiYgKml0ZXItPnBvcyA9PSAnXicpIHsKKwkJcCA9IGl0ZXItPnBvcyArIDE7CisJCWlmIChpdGVyLT5lb2YgLSBwIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxIHx8CisJCSAgICBwYXJzZV9vaWRfaGV4KHAsICZpdGVyLT5wZWVsZWQsICZwKSB8fAorCQkgICAgKnArKyAhPSAnXG4nKQorCQkJZGllX2ludmFsaWRfbGluZShpdGVyLT5zbmFwc2hvdC0+cmVmcy0+cGF0aCwKKwkJCQkJIGl0ZXItPnBvcywgaXRlci0+ZW9mIC0gaXRlci0+cG9zKTsKKwkJaXRlci0+cG9zID0gcDsKKworCQkvKgorCQkgKiBSZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGZpbGUgaGVhZGVyIHNhaWQsIHdlCisJCSAqIGRlZmluaXRlbHkga25vdyB0aGUgdmFsdWUgb2YgKnRoaXMqIHJlZmVyZW5jZS4gQnV0CisJCSAqIHdlIHN1cHByZXNzIGl0IGlmIHRoZSByZWZlcmVuY2UgaXMgYnJva2VuOgorCQkgKi8KKwkJaWYgKChpdGVyLT5iYXNlLmZsYWdzICYgUkVGX0lTQlJPS0VOKSkgeworCQkJb2lkY2xyKCZpdGVyLT5wZWVsZWQpOworCQkJaXRlci0+YmFzZS5mbGFncyAmPSB+UkVGX0tOT1dTX1BFRUxFRDsKKwkJfSBlbHNlIHsKKwkJCWl0ZXItPmJhc2UuZmxhZ3MgfD0gUkVGX0tOT1dTX1BFRUxFRDsKKwkJfQorCX0gZWxzZSB7CisJCW9pZGNscigmaXRlci0+cGVlbGVkKTsKKwl9CisKKwlyZXR1cm4gSVRFUl9PSzsKK30KKworc3RhdGljIGludCBwYWNrZWRfcmVmX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBwYWNrZWRfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCWludCBvazsKKworCXdoaWxlICgob2sgPSBuZXh0X3JlY29yZChpdGVyKSkgPT0gSVRFUl9PSykgeworCQlpZiAoaXRlci0+ZmxhZ3MgJiBET19GT1JfRUFDSF9QRVJfV09SS1RSRUVfT05MWSAmJgorCQkgICAgcmVmX3R5cGUoaXRlci0+YmFzZS5yZWZuYW1lKSAhPSBSRUZfVFlQRV9QRVJfV09SS1RSRUUpCisJCQljb250aW51ZTsKKworCQlpZiAoIShpdGVyLT5mbGFncyAmIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOKSAmJgorCQkgICAgIXJlZl9yZXNvbHZlc190b19vYmplY3QoaXRlci0+YmFzZS5yZWZuYW1lLCAmaXRlci0+b2lkLAorCQkJCQkgICAgaXRlci0+ZmxhZ3MpKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIElURVJfT0s7CisJfQorCisJaWYgKHJlZl9pdGVyYXRvcl9hYm9ydChyZWZfaXRlcmF0b3IpICE9IElURVJfRE9ORSkKKwkJb2sgPSBJVEVSX0VSUk9SOworCisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgaW50IHBhY2tlZF9yZWZfaXRlcmF0b3JfcGVlbChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IsCisJCQkJICAgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBwYWNrZWRfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCisJaWYgKChpdGVyLT5iYXNlLmZsYWdzICYgUkVGX0tOT1dTX1BFRUxFRCkpIHsKKwkJb2lkY3B5KHBlZWxlZCwgJml0ZXItPnBlZWxlZCk7CisJCXJldHVybiBpc19udWxsX29pZCgmaXRlci0+cGVlbGVkKSA/IC0xIDogMDsKKwl9IGVsc2UgaWYgKChpdGVyLT5iYXNlLmZsYWdzICYgKFJFRl9JU0JST0tFTiB8IFJFRl9JU1NZTVJFRikpKSB7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gISFwZWVsX29iamVjdCgmaXRlci0+b2lkLCBwZWVsZWQpOworCX0KK30KKworc3RhdGljIGludCBwYWNrZWRfcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgcGFja2VkX3JlZl9pdGVyYXRvciAqKXJlZl9pdGVyYXRvcjsKKwlpbnQgb2sgPSBJVEVSX0RPTkU7CisKKwlzdHJidWZfcmVsZWFzZSgmaXRlci0+cmVmbmFtZV9idWYpOworCXJlbGVhc2Vfc25hcHNob3QoaXRlci0+c25hcHNob3QpOworCWJhc2VfcmVmX2l0ZXJhdG9yX2ZyZWUocmVmX2l0ZXJhdG9yKTsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSBwYWNrZWRfcmVmX2l0ZXJhdG9yX3Z0YWJsZSA9IHsKKwlwYWNrZWRfcmVmX2l0ZXJhdG9yX2FkdmFuY2UsCisJcGFja2VkX3JlZl9pdGVyYXRvcl9wZWVsLAorCXBhY2tlZF9yZWZfaXRlcmF0b3JfYWJvcnQKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpwYWNrZWRfcmVmX2l0ZXJhdG9yX2JlZ2luKAorCQlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzOworCXN0cnVjdCBzbmFwc2hvdCAqc25hcHNob3Q7CisJY29uc3QgY2hhciAqc3RhcnQ7CisJc3RydWN0IHBhY2tlZF9yZWZfaXRlcmF0b3IgKml0ZXI7CisJc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yOworCXVuc2lnbmVkIGludCByZXF1aXJlZF9mbGFncyA9IFJFRl9TVE9SRV9SRUFEOworCisJaWYgKCEoZmxhZ3MgJiBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTikpCisJCXJlcXVpcmVkX2ZsYWdzIHw9IFJFRl9TVE9SRV9PREI7CisJcmVmcyA9IHBhY2tlZF9kb3duY2FzdChyZWZfc3RvcmUsIHJlcXVpcmVkX2ZsYWdzLCAicmVmX2l0ZXJhdG9yX2JlZ2luIik7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBgZ2V0X3NuYXBzaG90KClgIGludGVybmFsbHkgY2hlY2tzIHdoZXRoZXIgdGhlCisJICogc25hcHNob3QgaXMgdXAgdG8gZGF0ZSB3aXRoIHdoYXQgaXMgb24gZGlzaywgYW5kIHJlLXJlYWRzCisJICogaXQgaWYgbm90LgorCSAqLworCXNuYXBzaG90ID0gZ2V0X3NuYXBzaG90KHJlZnMpOworCisJaWYgKHByZWZpeCAmJiAqcHJlZml4KQorCQlzdGFydCA9IGZpbmRfcmVmZXJlbmNlX2xvY2F0aW9uKHNuYXBzaG90LCBwcmVmaXgsIDApOworCWVsc2UKKwkJc3RhcnQgPSBzbmFwc2hvdC0+c3RhcnQ7CisKKwlpZiAoc3RhcnQgPT0gc25hcHNob3QtPmVvZikKKwkJcmV0dXJuIGVtcHR5X3JlZl9pdGVyYXRvcl9iZWdpbigpOworCisJaXRlciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdGVyKSk7CisJcmVmX2l0ZXJhdG9yID0gJml0ZXItPmJhc2U7CisJYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChyZWZfaXRlcmF0b3IsICZwYWNrZWRfcmVmX2l0ZXJhdG9yX3Z0YWJsZSwgMSk7CisKKwlpdGVyLT5zbmFwc2hvdCA9IHNuYXBzaG90OworCWFjcXVpcmVfc25hcHNob3Qoc25hcHNob3QpOworCisJaXRlci0+cG9zID0gc3RhcnQ7CisJaXRlci0+ZW9mID0gc25hcHNob3QtPmVvZjsKKwlzdHJidWZfaW5pdCgmaXRlci0+cmVmbmFtZV9idWYsIDApOworCisJaXRlci0+YmFzZS5vaWQgPSAmaXRlci0+b2lkOworCisJaXRlci0+ZmxhZ3MgPSBmbGFnczsKKworCWlmIChwcmVmaXggJiYgKnByZWZpeCkKKwkJLyogU3RvcCBpdGVyYXRpb24gYWZ0ZXIgd2UndmUgZ29uZSAqcGFzdCogcHJlZml4OiAqLworCQlyZWZfaXRlcmF0b3IgPSBwcmVmaXhfcmVmX2l0ZXJhdG9yX2JlZ2luKHJlZl9pdGVyYXRvciwgcHJlZml4LCAwKTsKKworCXJldHVybiByZWZfaXRlcmF0b3I7Cit9CisKKy8qCisgKiBXcml0ZSBhbiBlbnRyeSB0byB0aGUgcGFja2VkLXJlZnMgZmlsZSBmb3IgdGhlIHNwZWNpZmllZCByZWZuYW1lLgorICogSWYgcGVlbGVkIGlzIG5vbi1OVUxMLCB3cml0ZSBpdCBhcyB0aGUgZW50cnkncyBwZWVsZWQgdmFsdWUuIE9uCisgKiBlcnJvciwgcmV0dXJuIGEgbm9uemVybyB2YWx1ZSBhbmQgbGVhdmUgZXJybm8gc2V0IGF0IHRoZSB2YWx1ZSBsZWZ0CisgKiBieSB0aGUgZmFpbGluZyBjYWxsIHRvIGBmcHJpbnRmKClgLgorICovCitzdGF0aWMgaW50IHdyaXRlX3BhY2tlZF9lbnRyeShGSUxFICpmaCwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlpZiAoZnByaW50ZihmaCwgIiVzICVzXG4iLCBvaWRfdG9faGV4KG9pZCksIHJlZm5hbWUpIDwgMCB8fAorCSAgICAocGVlbGVkICYmIGZwcmludGYoZmgsICJeJXNcbiIsIG9pZF90b19oZXgocGVlbGVkKSkgPCAwKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwYWNrZWRfcmVmc19sb2NrKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwgaW50IGZsYWdzLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMgPQorCQlwYWNrZWRfZG93bmNhc3QocmVmX3N0b3JlLCBSRUZfU1RPUkVfV1JJVEUgfCBSRUZfU1RPUkVfTUFJTiwKKwkJCQkicGFja2VkX3JlZnNfbG9jayIpOworCXN0YXRpYyBpbnQgdGltZW91dF9jb25maWd1cmVkID0gMDsKKwlzdGF0aWMgaW50IHRpbWVvdXRfdmFsdWUgPSAxMDAwOworCisJaWYgKCF0aW1lb3V0X2NvbmZpZ3VyZWQpIHsKKwkJZ2l0X2NvbmZpZ19nZXRfaW50KCJjb3JlLnBhY2tlZHJlZnN0aW1lb3V0IiwgJnRpbWVvdXRfdmFsdWUpOworCQl0aW1lb3V0X2NvbmZpZ3VyZWQgPSAxOworCX0KKworCS8qCisJICogTm90ZSB0aGF0IHdlIGNsb3NlIHRoZSBsb2NrZmlsZSBpbW1lZGlhdGVseSBiZWNhdXNlIHdlCisJICogZG9uJ3Qgd3JpdGUgbmV3IGNvbnRlbnQgdG8gaXQsIGJ1dCByYXRoZXIgdG8gYSBzZXBhcmF0ZQorCSAqIHRlbXBmaWxlLgorCSAqLworCWlmIChob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX3RpbWVvdXQoCisJCQkgICAgJnJlZnMtPmxvY2ssCisJCQkgICAgcmVmcy0+cGF0aCwKKwkJCSAgICBmbGFncywgdGltZW91dF92YWx1ZSkgPCAwKSB7CisJCXVuYWJsZV90b19sb2NrX21lc3NhZ2UocmVmcy0+cGF0aCwgZXJybm8sIGVycik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY2xvc2VfbG9ja19maWxlX2dlbnRseSgmcmVmcy0+bG9jaykpIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGNsb3NlICVzOiAlcyIsIHJlZnMtPnBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmcmVmcy0+bG9jayk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgc3RhdC12YWxpZGl0eSBwcm9ibGVtIG1pZ2h0IGNhdXNlIGB1cGRhdGUtcmVmIC1kYAorCSAqIGxvc3QgdGhlIG5ld2x5IGNvbW1pdCBvZiBhIHJlZiwgYmVjYXVzZSBhIG5ldyBgcGFja2VkLXJlZnNgCisJICogZmlsZSBtaWdodCBoYXMgdGhlIHNhbWUgb24tZGlzayBmaWxlIGF0dHJpYnV0ZXMgc3VjaCBhcworCSAqIHRpbWVzdGFtcCwgZmlsZSBzaXplIGFuZCBpbm9kZSB2YWx1ZSwgYnV0IGhhcyBhIGNoYW5nZWQKKwkgKiByZWYgdmFsdWUuCisJICoKKwkgKiBUaGlzIGNvdWxkIGhhcHBlbiB3aXRoIGEgdmVyeSBzbWFsbCBjaGFuY2Ugd2hlbgorCSAqIGB1cGRhdGUtcmVmIC1kYCBpcyBjYWxsZWQgYW5kIGF0IHRoZSBzYW1lIHRpbWUgYW5vdGhlcgorCSAqIGBwYWNrLXJlZnMgLS1hbGxgIHByb2Nlc3MgaXMgcnVubmluZy4KKwkgKgorCSAqIE5vdyB0aGF0IHdlIGhvbGQgdGhlIGBwYWNrZWQtcmVmc2AgbG9jaywgaXQgaXMgaW1wb3J0YW50CisJICogdG8gbWFrZSBzdXJlIHdlIGNvdWxkIHJlYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mCisJICogYHBhY2tlZC1yZWZzYCBmaWxlIG5vIG1hdHRlciB3ZSBoYXZlIGp1c3QgbW1hcCBpdCBvciBub3QuCisJICogU28gd2hhdCBuZWVkIHRvIGRvIGlzIGNsZWFyIHRoZSBzbmFwc2hvdCBpZiB3ZSBob2xkIGl0CisJICogYWxyZWFkeS4KKwkgKi8KKwljbGVhcl9zbmFwc2hvdChyZWZzKTsKKworCS8qCisJICogTm93IG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWNrZWQtcmVmcyBmaWxlIGFzIGl0IGV4aXN0cyBpbiB0aGUKKwkgKiBsb2NrZWQgc3RhdGUgaXMgbG9hZGVkIGludG8gdGhlIHNuYXBzaG90OgorCSAqLworCWdldF9zbmFwc2hvdChyZWZzKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwYWNrZWRfcmVmc191bmxvY2soc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0gcGFja2VkX2Rvd25jYXN0KAorCQkJcmVmX3N0b3JlLAorCQkJUkVGX1NUT1JFX1JFQUQgfCBSRUZfU1RPUkVfV1JJVEUsCisJCQkicGFja2VkX3JlZnNfdW5sb2NrIik7CisKKwlpZiAoIWlzX2xvY2tfZmlsZV9sb2NrZWQoJnJlZnMtPmxvY2spKQorCQlCVUcoInBhY2tlZF9yZWZzX3VubG9jaygpIGNhbGxlZCB3aGVuIG5vdCBsb2NrZWQiKTsKKwlyb2xsYmFja19sb2NrX2ZpbGUoJnJlZnMtPmxvY2spOworfQorCitpbnQgcGFja2VkX3JlZnNfaXNfbG9ja2VkKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcyA9IHBhY2tlZF9kb3duY2FzdCgKKwkJCXJlZl9zdG9yZSwKKwkJCVJFRl9TVE9SRV9SRUFEIHwgUkVGX1NUT1JFX1dSSVRFLAorCQkJInBhY2tlZF9yZWZzX2lzX2xvY2tlZCIpOworCisJcmV0dXJuIGlzX2xvY2tfZmlsZV9sb2NrZWQoJnJlZnMtPmxvY2spOworfQorCisvKgorICogVGhlIHBhY2tlZC1yZWZzIGhlYWRlciBsaW5lIHRoYXQgd2Ugd3JpdGUgb3V0LiBQZXJoYXBzIG90aGVyIHRyYWl0cworICogd2lsbCBiZSBhZGRlZCBsYXRlci4KKyAqCisgKiBOb3RlIHRoYXQgZWFybGllciB2ZXJzaW9ucyBvZiBHaXQgdXNlZCB0byBwYXJzZSB0aGVzZSB0cmFpdHMgYnkKKyAqIGxvb2tpbmcgZm9yICIgdHJhaXQgIiBpbiB0aGUgbGluZS4gRm9yIHRoaXMgcmVhc29uLCB0aGUgc3BhY2UgYWZ0ZXIKKyAqIHRoZSBjb2xvbiBhbmQgdGhlIHRyYWlsaW5nIHNwYWNlIGFyZSByZXF1aXJlZC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgUEFDS0VEX1JFRlNfSEVBREVSW10gPQorCSIjIHBhY2stcmVmcyB3aXRoOiBwZWVsZWQgZnVsbHktcGVlbGVkIHNvcnRlZCBcbiI7CisKK3N0YXRpYyBpbnQgcGFja2VkX2luaXRfZGIoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJLyogTm90aGluZyB0byBkby4gKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyaXRlIHRoZSBwYWNrZWQgcmVmcyBmcm9tIHRoZSBjdXJyZW50IHNuYXBzaG90IHRvIHRoZSBwYWNrZWQtcmVmcworICogdGVtcGZpbGUsIGluY29ycG9yYXRpbmcgYW55IGNoYW5nZXMgZnJvbSBgdXBkYXRlc2AuIGB1cGRhdGVzYCBtdXN0CisgKiBiZSBhIHNvcnRlZCBzdHJpbmcgbGlzdCB3aG9zZSBrZXlzIGFyZSB0aGUgcmVmbmFtZXMgYW5kIHdob3NlIHV0aWwKKyAqIHZhbHVlcyBhcmUgYHN0cnVjdCByZWZfdXBkYXRlICpgLiBPbiBlcnJvciwgcm9sbGJhY2sgdGhlIHRlbXBmaWxlLAorICogd3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byBgZXJyYCwgYW5kIHJldHVybiBhIG5vbnplcm8gdmFsdWUuCisgKgorICogVGhlIHBhY2tmaWxlIG11c3QgYmUgbG9ja2VkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIHdpbGwKKyAqIHJlbWFpbiBsb2NrZWQgd2hlbiBpdCBpcyBkb25lLgorICovCitzdGF0aWMgaW50IHdyaXRlX3dpdGhfdXBkYXRlcyhzdHJ1Y3QgcGFja2VkX3JlZl9zdG9yZSAqcmVmcywKKwkJCSAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqdXBkYXRlcywKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyID0gTlVMTDsKKwlzaXplX3QgaTsKKwlpbnQgb2s7CisJRklMRSAqb3V0OworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpwYWNrZWRfcmVmc19wYXRoOworCisJaWYgKCFpc19sb2NrX2ZpbGVfbG9ja2VkKCZyZWZzLT5sb2NrKSkKKwkJQlVHKCJ3cml0ZV93aXRoX3VwZGF0ZXMoKSBjYWxsZWQgd2hpbGUgdW5sb2NrZWQiKTsKKworCS8qCisJICogSWYgcGFja2VkLXJlZnMgaXMgYSBzeW1saW5rLCB3ZSB3YW50IHRvIG92ZXJ3cml0ZSB0aGUKKwkgKiBzeW1saW5rZWQtdG8gZmlsZSwgbm90IHRoZSBzeW1saW5rIGl0c2VsZi4gQWxzbywgcHV0IHRoZQorCSAqIHN0YWdpbmcgZmlsZSBuZXh0IHRvIGl0OgorCSAqLworCXBhY2tlZF9yZWZzX3BhdGggPSBnZXRfbG9ja2VkX2ZpbGVfcGF0aCgmcmVmcy0+bG9jayk7CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMubmV3IiwgcGFja2VkX3JlZnNfcGF0aCk7CisJZnJlZShwYWNrZWRfcmVmc19wYXRoKTsKKwlyZWZzLT50ZW1wZmlsZSA9IGNyZWF0ZV90ZW1wZmlsZShzYi5idWYpOworCWlmICghcmVmcy0+dGVtcGZpbGUpIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGNyZWF0ZSBmaWxlICVzOiAlcyIsCisJCQkgICAgc2IuYnVmLCBzdHJlcnJvcihlcnJubykpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlvdXQgPSBmZG9wZW5fdGVtcGZpbGUocmVmcy0+dGVtcGZpbGUsICJ3Iik7CisJaWYgKCFvdXQpIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGZkb3BlbiBwYWNrZWQtcmVmcyB0ZW1wZmlsZTogJXMiLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGZwcmludGYob3V0LCAiJXMiLCBQQUNLRURfUkVGU19IRUFERVIpIDwgMCkKKwkJZ290byB3cml0ZV9lcnJvcjsKKworCS8qCisJICogV2UgaXRlcmF0ZSBpbiBwYXJhbGxlbCB0aHJvdWdoIHRoZSBjdXJyZW50IGxpc3Qgb2YgcmVmcyBhbmQKKwkgKiB0aGUgbGlzdCBvZiB1cGRhdGVzLCBwcm9jZXNzaW5nIGFuIGVudHJ5IGZyb20gYXQgbGVhc3Qgb25lCisJICogb2YgdGhlIGxpc3RzIGVhY2ggdGltZSB0aHJvdWdoIHRoZSBsb29wLiBXaGVuIHRoZSBjdXJyZW50CisJICogbGlzdCBvZiByZWZzIGlzIGV4aGF1c3RlZCwgc2V0IGl0ZXIgdG8gTlVMTC4gV2hlbiB0aGUgbGlzdAorCSAqIG9mIHVwZGF0ZXMgaXMgZXhoYXVzdGVkLCBsZWF2ZSBpIHNldCB0byB1cGRhdGVzLT5uci4KKwkgKi8KKwlpdGVyID0gcGFja2VkX3JlZl9pdGVyYXRvcl9iZWdpbigmcmVmcy0+YmFzZSwgIiIsCisJCQkJCSBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTik7CisJaWYgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXIpKSAhPSBJVEVSX09LKQorCQlpdGVyID0gTlVMTDsKKworCWkgPSAwOworCisJd2hpbGUgKGl0ZXIgfHwgaSA8IHVwZGF0ZXMtPm5yKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSBOVUxMOworCQlpbnQgY21wOworCisJCWlmIChpID49IHVwZGF0ZXMtPm5yKSB7CisJCQljbXAgPSAtMTsKKwkJfSBlbHNlIHsKKwkJCXVwZGF0ZSA9IHVwZGF0ZXMtPml0ZW1zW2ldLnV0aWw7CisKKwkJCWlmICghaXRlcikKKwkJCQljbXAgPSArMTsKKwkJCWVsc2UKKwkJCQljbXAgPSBzdHJjbXAoaXRlci0+cmVmbmFtZSwgdXBkYXRlLT5yZWZuYW1lKTsKKwkJfQorCisJCWlmICghY21wKSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgYm90aCBhbiBvbGQgdmFsdWUgYW5kIGFuIHVwZGF0ZQorCQkJICogZm9yIHRoaXMgcmVmZXJlbmNlLiBDaGVjayB0aGUgb2xkIHZhbHVlIGlmCisJCQkgKiBuZWNlc3Nhcnk6CisJCQkgKi8KKwkJCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX09MRCkpIHsKKwkJCQlpZiAoaXNfbnVsbF9vaWQoJnVwZGF0ZS0+b2xkX29pZCkpIHsKKwkJCQkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IHVwZGF0ZSByZWYgJyVzJzogIgorCQkJCQkJICAgICJyZWZlcmVuY2UgYWxyZWFkeSBleGlzdHMiLAorCQkJCQkJICAgIHVwZGF0ZS0+cmVmbmFtZSk7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfSBlbHNlIGlmICghb2lkZXEoJnVwZGF0ZS0+b2xkX29pZCwgaXRlci0+b2lkKSkgeworCQkJCQlzdHJidWZfYWRkZihlcnIsICJjYW5ub3QgdXBkYXRlIHJlZiAnJXMnOiAiCisJCQkJCQkgICAgImlzIGF0ICVzIGJ1dCBleHBlY3RlZCAlcyIsCisJCQkJCQkgICAgdXBkYXRlLT5yZWZuYW1lLAorCQkJCQkJICAgIG9pZF90b19oZXgoaXRlci0+b2lkKSwKKwkJCQkJCSAgICBvaWRfdG9faGV4KCZ1cGRhdGUtPm9sZF9vaWQpKTsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQl9CisKKwkJCS8qIE5vdyBmaWd1cmUgb3V0IHdoYXQgdG8gdXNlIGZvciB0aGUgbmV3IHZhbHVlOiAqLworCQkJaWYgKCh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfTkVXKSkgeworCQkJCS8qCisJCQkJICogVGhlIHVwZGF0ZSB0YWtlcyBwcmVjZWRlbmNlLiBTa2lwCisJCQkJICogdGhlIGl0ZXJhdG9yIG92ZXIgdGhlIHVubmVlZGVkCisJCQkJICogdmFsdWUuCisJCQkJICovCisJCQkJaWYgKChvayA9IHJlZl9pdGVyYXRvcl9hZHZhbmNlKGl0ZXIpKSAhPSBJVEVSX09LKQorCQkJCQlpdGVyID0gTlVMTDsKKwkJCQljbXAgPSArMTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgdXBkYXRlIGRvZXNuJ3QgYWN0dWFsbHkgd2FudCB0bworCQkJCSAqIGNoYW5nZSBhbnl0aGluZy4gV2UncmUgZG9uZSB3aXRoIGl0LgorCQkJCSAqLworCQkJCWkrKzsKKwkJCQljbXAgPSAtMTsKKwkJCX0KKwkJfSBlbHNlIGlmIChjbXAgPiAwKSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgbm8gb2xkIHZhbHVlIGJ1dCB0aGVyZSBpcyBhbgorCQkJICogdXBkYXRlIGZvciB0aGlzIHJlZmVyZW5jZS4gTWFrZSBzdXJlIHRoYXQKKwkJCSAqIHRoZSB1cGRhdGUgZGlkbid0IGV4cGVjdCBhbiBleGlzdGluZyB2YWx1ZToKKwkJCSAqLworCQkJaWYgKCh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfT0xEKSAmJgorCQkJICAgICFpc19udWxsX29pZCgmdXBkYXRlLT5vbGRfb2lkKSkgeworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCB1cGRhdGUgcmVmICclcyc6ICIKKwkJCQkJICAgICJyZWZlcmVuY2UgaXMgbWlzc2luZyBidXQgZXhwZWN0ZWQgJXMiLAorCQkJCQkgICAgdXBkYXRlLT5yZWZuYW1lLAorCQkJCQkgICAgb2lkX3RvX2hleCgmdXBkYXRlLT5vbGRfb2lkKSk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCisJCWlmIChjbXAgPCAwKSB7CisJCQkvKiBQYXNzIHRoZSBvbGQgcmVmZXJlbmNlIHRocm91Z2guICovCisKKwkJCXN0cnVjdCBvYmplY3RfaWQgcGVlbGVkOworCQkJaW50IHBlZWxfZXJyb3IgPSByZWZfaXRlcmF0b3JfcGVlbChpdGVyLCAmcGVlbGVkKTsKKworCQkJaWYgKHdyaXRlX3BhY2tlZF9lbnRyeShvdXQsIGl0ZXItPnJlZm5hbWUsCisJCQkJCSAgICAgICBpdGVyLT5vaWQsCisJCQkJCSAgICAgICBwZWVsX2Vycm9yID8gTlVMTCA6ICZwZWVsZWQpKQorCQkJCWdvdG8gd3JpdGVfZXJyb3I7CisKKwkJCWlmICgob2sgPSByZWZfaXRlcmF0b3JfYWR2YW5jZShpdGVyKSkgIT0gSVRFUl9PSykKKwkJCQlpdGVyID0gTlVMTDsKKwkJfSBlbHNlIGlmIChpc19udWxsX29pZCgmdXBkYXRlLT5uZXdfb2lkKSkgeworCQkJLyoKKwkJCSAqIFRoZSB1cGRhdGUgd2FudHMgdG8gZGVsZXRlIHRoZSByZWZlcmVuY2UsCisJCQkgKiBhbmQgdGhlIHJlZmVyZW5jZSBlaXRoZXIgZGlkbid0IGV4aXN0IG9yIHdlCisJCQkgKiBoYXZlIGFscmVhZHkgc2tpcHBlZCBpdC4gU28gd2UncmUgZG9uZSB3aXRoCisJCQkgKiB0aGUgdXBkYXRlIChhbmQgZG9uJ3QgaGF2ZSB0byB3cml0ZQorCQkJICogYW55dGhpbmcpLgorCQkJICovCisJCQlpKys7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKKwkJCWludCBwZWVsX2Vycm9yID0gcGVlbF9vYmplY3QoJnVwZGF0ZS0+bmV3X29pZCwKKwkJCQkJCSAgICAgJnBlZWxlZCk7CisKKwkJCWlmICh3cml0ZV9wYWNrZWRfZW50cnkob3V0LCB1cGRhdGUtPnJlZm5hbWUsCisJCQkJCSAgICAgICAmdXBkYXRlLT5uZXdfb2lkLAorCQkJCQkgICAgICAgcGVlbF9lcnJvciA/IE5VTEwgOiAmcGVlbGVkKSkKKwkJCQlnb3RvIHdyaXRlX2Vycm9yOworCisJCQlpKys7CisJCX0KKwl9CisKKwlpZiAob2sgIT0gSVRFUl9ET05FKSB7CisJCXN0cmJ1Zl9hZGRzdHIoZXJyLCAidW5hYmxlIHRvIHdyaXRlIHBhY2tlZC1yZWZzIGZpbGU6ICIKKwkJCSAgICAgICJlcnJvciBpdGVyYXRpbmcgb3ZlciBvbGQgY29udGVudHMiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoY2xvc2VfdGVtcGZpbGVfZ2VudGx5KHJlZnMtPnRlbXBmaWxlKSkgeworCQlzdHJidWZfYWRkZihlcnIsICJlcnJvciBjbG9zaW5nIGZpbGUgJXM6ICVzIiwKKwkJCSAgICBnZXRfdGVtcGZpbGVfcGF0aChyZWZzLT50ZW1wZmlsZSksCisJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJZGVsZXRlX3RlbXBmaWxlKCZyZWZzLT50ZW1wZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKKword3JpdGVfZXJyb3I6CisJc3RyYnVmX2FkZGYoZXJyLCAiZXJyb3Igd3JpdGluZyB0byAlczogJXMiLAorCQkgICAgZ2V0X3RlbXBmaWxlX3BhdGgocmVmcy0+dGVtcGZpbGUpLCBzdHJlcnJvcihlcnJubykpOworCitlcnJvcjoKKwlpZiAoaXRlcikKKwkJcmVmX2l0ZXJhdG9yX2Fib3J0KGl0ZXIpOworCisJZGVsZXRlX3RlbXBmaWxlKCZyZWZzLT50ZW1wZmlsZSk7CisJcmV0dXJuIC0xOworfQorCitpbnQgaXNfcGFja2VkX3RyYW5zYWN0aW9uX25lZWRlZChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0gcGFja2VkX2Rvd25jYXN0KAorCQkJcmVmX3N0b3JlLAorCQkJUkVGX1NUT1JFX1JFQUQsCisJCQkiaXNfcGFja2VkX3RyYW5zYWN0aW9uX25lZWRlZCIpOworCXN0cnVjdCBzdHJidWYgcmVmZXJlbnQgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgaTsKKwlpbnQgcmV0OworCisJaWYgKCFpc19sb2NrX2ZpbGVfbG9ja2VkKCZyZWZzLT5sb2NrKSkKKwkJQlVHKCJpc19wYWNrZWRfdHJhbnNhY3Rpb25fbmVlZGVkKCkgY2FsbGVkIHdoaWxlIHVubG9ja2VkIik7CisKKwkvKgorCSAqIFdlJ3JlIG9ubHkgZ29pbmcgdG8gYm90aGVyIHJldHVybmluZyBmYWxzZSBmb3IgdGhlIGNvbW1vbiwKKwkgKiB0cml2aWFsIGNhc2UgdGhhdCByZWZlcmVuY2VzIGFyZSBvbmx5IGJlaW5nIGRlbGV0ZWQsIHRoZWlyCisJICogb2xkIHZhbHVlcyBhcmUgbm90IGJlaW5nIGNoZWNrZWQsIGFuZCB0aGUgb2xkIGBwYWNrZWQtcmVmc2AKKwkgKiBmaWxlIGRvZXNuJ3QgY29udGFpbiBhbnkgb2YgdGhvc2UgcmVmZXJlbmNlKHMpLiBUaGlzIGdpdmVzCisJICogZmFsc2UgcG9zaXRpdmVzIGZvciBzb21lIG90aGVyIGNhc2VzIHRoYXQgY291bGQKKwkgKiB0aGVvcmV0aWNhbGx5IGJlIG9wdGltaXplZCBhd2F5OgorCSAqCisJICogMS4gSXQgY291bGQgYmUgdGhhdCB0aGUgb2xkIHZhbHVlIGlzIGJlaW5nIHZlcmlmaWVkIHdpdGhvdXQKKwkgKiAgICBzZXR0aW5nIGEgbmV3IHZhbHVlLiBJbiB0aGlzIGNhc2UsIHdlIGNvdWxkIHZlcmlmeSB0aGUKKwkgKiAgICBvbGQgdmFsdWUgaGVyZSBhbmQgc2tpcCB0aGUgdXBkYXRlIGlmIGl0IGFncmVlcy4gSWYgaXQKKwkgKiAgICBkaXNhZ3JlZXMsIHdlIGNvdWxkIGVpdGhlciBsZXQgdGhlIHVwZGF0ZSBnbyB0aHJvdWdoCisJICogICAgKHRoZSBhY3R1YWwgY29tbWl0IHdvdWxkIHJlLWRldGVjdCBhbmQgcmVwb3J0IHRoZQorCSAqICAgIHByb2JsZW0pLCBvciBjb21lIHVwIHdpdGggYSB3YXkgb2YgcmVwb3J0aW5nIHN1Y2ggYW4KKwkgKiAgICBlcnJvciB0byAqb3VyKiBjYWxsZXIuCisJICoKKwkgKiAyLiBJdCBjb3VsZCBiZSB0aGF0IGEgbmV3IHZhbHVlIGlzIGJlaW5nIHNldCwgYnV0IHRoYXQgaXQKKwkgKiAgICBpcyBpZGVudGljYWwgdG8gdGhlIGN1cnJlbnQgcGFja2VkIHZhbHVlIG9mIHRoZQorCSAqICAgIHJlZmVyZW5jZS4KKwkgKgorCSAqIE5laXRoZXIgb2YgdGhlc2UgY2FzZXMgd2lsbCBjb21lIHVwIGluIHRoZSBjdXJyZW50IGNvZGUsCisJICogYmVjYXVzZSB0aGUgb25seSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBwYXNzZXMgdG8gaXQgYQorCSAqIHRyYW5zYWN0aW9uIHRoYXQgb25seSBpbmNsdWRlcyBgZGVsZXRlYCB1cGRhdGVzIHdpdGggbm8KKwkgKiBgb2xkX2lkYC4gRXZlbiBpZiB0aGF0IGV2ZXIgY2hhbmdlcywgZmFsc2UgcG9zaXRpdmVzIG9ubHkKKwkgKiBjYXVzZSBhbiBvcHRpbWl6YXRpb24gdG8gYmUgbWlzc2VkOyB0aGV5IGRvIG5vdCBhZmZlY3QKKwkgKiBjb3JyZWN0bmVzcy4KKwkgKi8KKworCS8qCisJICogU3RhcnQgd2l0aCB0aGUgY2hlYXAgY2hlY2tzIHRoYXQgZG9uJ3QgcmVxdWlyZSBvbGQKKwkgKiByZWZlcmVuY2UgdmFsdWVzIHRvIGJlIHJlYWQ6CisJICovCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB0cmFuc2FjdGlvbi0+dXBkYXRlc1tpXTsKKworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX09MRCkKKwkJCS8qIEhhdmUgdG8gY2hlY2sgdGhlIG9sZCB2YWx1ZSAtPiBuZWVkZWQuICovCisJCQlyZXR1cm4gMTsKKworCQlpZiAoKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfSEFWRV9ORVcpICYmICFpc19udWxsX29pZCgmdXBkYXRlLT5uZXdfb2lkKSkKKwkJCS8qIEhhdmUgdG8gc2V0IGEgbmV3IHZhbHVlIC0+IG5lZWRlZC4gKi8KKwkJCXJldHVybiAxOworCX0KKworCS8qCisJICogVGhlIHRyYW5zYWN0aW9uIGlzbid0IGNoZWNraW5nIGFueSBvbGQgdmFsdWVzIG5vciBpcyBpdAorCSAqIHNldHRpbmcgYW55IG5vbnplcm8gbmV3IHZhbHVlcywgc28gaXQgc3RpbGwgbWlnaHQgYmUgYWJsZQorCSAqIHRvIGJlIHNraXBwZWQuIE5vdyBkbyB0aGUgbW9yZSBleHBlbnNpdmUgY2hlY2s6IHRoZSB1cGRhdGUKKwkgKiBpcyBuZWVkZWQgaWYgYW55IG9mIHRoZSB1cGRhdGVzIGlzIGEgZGVsZXRlLCBhbmQgdGhlIG9sZAorCSAqIGBwYWNrZWQtcmVmc2AgZmlsZSBjb250YWlucyBhIHZhbHVlIGZvciB0aGF0IHJlZmVyZW5jZS4KKwkgKi8KKwlyZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCB0cmFuc2FjdGlvbi0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gdHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV07CisJCXVuc2lnbmVkIGludCB0eXBlOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQlpZiAoISh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfTkVXKSkKKwkJCS8qCisJCQkgKiBUaGlzIHJlZmVyZW5jZSBpc24ndCBiZWluZyBkZWxldGVkIC0+IG5vdAorCQkJICogbmVlZGVkLgorCQkJICovCisJCQljb250aW51ZTsKKworCQlpZiAoIXJlZnNfcmVhZF9yYXdfcmVmKHJlZl9zdG9yZSwgdXBkYXRlLT5yZWZuYW1lLAorCQkJCSAgICAgICAmb2lkLCAmcmVmZXJlbnQsICZ0eXBlKSB8fAorCQkgICAgZXJybm8gIT0gRU5PRU5UKSB7CisJCQkvKgorCQkJICogV2UgaGF2ZSB0byBhY3R1YWxseSBkZWxldGUgdGhhdCByZWZlcmVuY2UKKwkJCSAqIC0+IHRoaXMgdHJhbnNhY3Rpb24gaXMgbmVlZGVkLgorCQkJICovCisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmcmVmZXJlbnQpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBwYWNrZWRfdHJhbnNhY3Rpb25fYmFja2VuZF9kYXRhIHsKKwkvKiBUcnVlIGlmZiB0aGUgdHJhbnNhY3Rpb24gb3ducyB0aGUgcGFja2VkLXJlZnMgbG9jay4gKi8KKwlpbnQgb3duX2xvY2s7CisKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdXBkYXRlczsKK307CisKK3N0YXRpYyB2b2lkIHBhY2tlZF90cmFuc2FjdGlvbl9jbGVhbnVwKHN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbikKK3sKKwlzdHJ1Y3QgcGFja2VkX3RyYW5zYWN0aW9uX2JhY2tlbmRfZGF0YSAqZGF0YSA9IHRyYW5zYWN0aW9uLT5iYWNrZW5kX2RhdGE7CisKKwlpZiAoZGF0YSkgeworCQlzdHJpbmdfbGlzdF9jbGVhcigmZGF0YS0+dXBkYXRlcywgMCk7CisKKwkJaWYgKGlzX3RlbXBmaWxlX2FjdGl2ZShyZWZzLT50ZW1wZmlsZSkpCisJCQlkZWxldGVfdGVtcGZpbGUoJnJlZnMtPnRlbXBmaWxlKTsKKworCQlpZiAoZGF0YS0+b3duX2xvY2sgJiYgaXNfbG9ja19maWxlX2xvY2tlZCgmcmVmcy0+bG9jaykpIHsKKwkJCXBhY2tlZF9yZWZzX3VubG9jaygmcmVmcy0+YmFzZSk7CisJCQlkYXRhLT5vd25fbG9jayA9IDA7CisJCX0KKworCQlmcmVlKGRhdGEpOworCQl0cmFuc2FjdGlvbi0+YmFja2VuZF9kYXRhID0gTlVMTDsKKwl9CisKKwl0cmFuc2FjdGlvbi0+c3RhdGUgPSBSRUZfVFJBTlNBQ1RJT05fQ0xPU0VEOworfQorCitzdGF0aWMgaW50IHBhY2tlZF90cmFuc2FjdGlvbl9wcmVwYXJlKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkgICAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMgPSBwYWNrZWRfZG93bmNhc3QoCisJCQlyZWZfc3RvcmUsCisJCQlSRUZfU1RPUkVfUkVBRCB8IFJFRl9TVE9SRV9XUklURSB8IFJFRl9TVE9SRV9PREIsCisJCQkicmVmX3RyYW5zYWN0aW9uX3ByZXBhcmUiKTsKKwlzdHJ1Y3QgcGFja2VkX3RyYW5zYWN0aW9uX2JhY2tlbmRfZGF0YSAqZGF0YTsKKwlzaXplX3QgaTsKKwlpbnQgcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKworCS8qCisJICogTm90ZSB0aGF0IHdlICpkb24ndCogc2tpcCB0cmFuc2FjdGlvbnMgd2l0aCB6ZXJvIHVwZGF0ZXMsCisJICogYmVjYXVzZSBzdWNoIGEgdHJhbnNhY3Rpb24gbWlnaHQgYmUgZXhlY3V0ZWQgZm9yIHRoZSBzaWRlCisJICogZWZmZWN0IG9mIGVuc3VyaW5nIHRoYXQgYWxsIG9mIHRoZSByZWZlcmVuY2VzIGFyZSBwZWVsZWQgb3IKKwkgKiBlbnN1cmluZyB0aGF0IHRoZSBgcGFja2VkLXJlZnNgIGZpbGUgaXMgc29ydGVkLiBJZiB0aGUKKwkgKiBjYWxsZXIgd2FudHMgdG8gb3B0aW1pemUgYXdheSBlbXB0eSB0cmFuc2FjdGlvbnMsIGl0IHNob3VsZAorCSAqIGRvIHNvIGl0c2VsZi4KKwkgKi8KKworCWRhdGEgPSB4Y2FsbG9jKDEsIHNpemVvZigqZGF0YSkpOworCXN0cmluZ19saXN0X2luaXQoJmRhdGEtPnVwZGF0ZXMsIDApOworCisJdHJhbnNhY3Rpb24tPmJhY2tlbmRfZGF0YSA9IGRhdGE7CisKKwkvKgorCSAqIFN0aWNrIHRoZSB1cGRhdGVzIGluIGEgc3RyaW5nIGxpc3QgYnkgcmVmbmFtZSBzbyB0aGF0IHdlCisJICogY2FuIHNvcnQgdGhlbToKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHJhbnNhY3Rpb24tPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHRyYW5zYWN0aW9uLT51cGRhdGVzW2ldOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRhdGEtPnVwZGF0ZXMsIHVwZGF0ZS0+cmVmbmFtZSk7CisKKwkJLyogU3RvcmUgYSBwb2ludGVyIHRvIHVwZGF0ZSBpbiBpdGVtLT51dGlsOiAqLworCQlpdGVtLT51dGlsID0gdXBkYXRlOworCX0KKwlzdHJpbmdfbGlzdF9zb3J0KCZkYXRhLT51cGRhdGVzKTsKKworCWlmIChyZWZfdXBkYXRlX3JlamVjdF9kdXBsaWNhdGVzKCZkYXRhLT51cGRhdGVzLCBlcnIpKQorCQlnb3RvIGZhaWx1cmU7CisKKwlpZiAoIWlzX2xvY2tfZmlsZV9sb2NrZWQoJnJlZnMtPmxvY2spKSB7CisJCWlmIChwYWNrZWRfcmVmc19sb2NrKHJlZl9zdG9yZSwgMCwgZXJyKSkKKwkJCWdvdG8gZmFpbHVyZTsKKwkJZGF0YS0+b3duX2xvY2sgPSAxOworCX0KKworCWlmICh3cml0ZV93aXRoX3VwZGF0ZXMocmVmcywgJmRhdGEtPnVwZGF0ZXMsIGVycikpCisJCWdvdG8gZmFpbHVyZTsKKworCXRyYW5zYWN0aW9uLT5zdGF0ZSA9IFJFRl9UUkFOU0FDVElPTl9QUkVQQVJFRDsKKwlyZXR1cm4gMDsKKworZmFpbHVyZToKKwlwYWNrZWRfdHJhbnNhY3Rpb25fY2xlYW51cChyZWZzLCB0cmFuc2FjdGlvbik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWNrZWRfdHJhbnNhY3Rpb25fYWJvcnQoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0gcGFja2VkX2Rvd25jYXN0KAorCQkJcmVmX3N0b3JlLAorCQkJUkVGX1NUT1JFX1JFQUQgfCBSRUZfU1RPUkVfV1JJVEUgfCBSRUZfU1RPUkVfT0RCLAorCQkJInJlZl90cmFuc2FjdGlvbl9hYm9ydCIpOworCisJcGFja2VkX3RyYW5zYWN0aW9uX2NsZWFudXAocmVmcywgdHJhbnNhY3Rpb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhY2tlZF90cmFuc2FjdGlvbl9maW5pc2goc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCSAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHBhY2tlZF9yZWZfc3RvcmUgKnJlZnMgPSBwYWNrZWRfZG93bmNhc3QoCisJCQlyZWZfc3RvcmUsCisJCQlSRUZfU1RPUkVfUkVBRCB8IFJFRl9TVE9SRV9XUklURSB8IFJFRl9TVE9SRV9PREIsCisJCQkicmVmX3RyYW5zYWN0aW9uX2ZpbmlzaCIpOworCWludCByZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCWNoYXIgKnBhY2tlZF9yZWZzX3BhdGg7CisKKwljbGVhcl9zbmFwc2hvdChyZWZzKTsKKworCXBhY2tlZF9yZWZzX3BhdGggPSBnZXRfbG9ja2VkX2ZpbGVfcGF0aCgmcmVmcy0+bG9jayk7CisJaWYgKHJlbmFtZV90ZW1wZmlsZSgmcmVmcy0+dGVtcGZpbGUsIHBhY2tlZF9yZWZzX3BhdGgpKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgImVycm9yIHJlcGxhY2luZyAlczogJXMiLAorCQkJICAgIHJlZnMtPnBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlyZXQgPSAwOworCitjbGVhbnVwOgorCWZyZWUocGFja2VkX3JlZnNfcGF0aCk7CisJcGFja2VkX3RyYW5zYWN0aW9uX2NsZWFudXAocmVmcywgdHJhbnNhY3Rpb24pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX2luaXRpYWxfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkJICAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXJldHVybiByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCBlcnIpOworfQorCitzdGF0aWMgaW50IHBhY2tlZF9kZWxldGVfcmVmcyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgICAgc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYWNrZWRfcmVmX3N0b3JlICpyZWZzID0KKwkJcGFja2VkX2Rvd25jYXN0KHJlZl9zdG9yZSwgUkVGX1NUT1JFX1dSSVRFLCAiZGVsZXRlX3JlZnMiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCByZXQ7CisKKwkodm9pZClyZWZzOyAvKiBXZSBuZWVkIHRoZSBjaGVjayBhYm92ZSwgYnV0IGRvbid0IHVzZSB0aGUgdmFyaWFibGUgKi8KKworCWlmICghcmVmbmFtZXMtPm5yKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogU2luY2Ugd2UgZG9uJ3QgY2hlY2sgdGhlIHJlZmVyZW5jZXMnIG9sZF9vaWRzLCB0aGUKKwkgKiBpbmRpdmlkdWFsIHVwZGF0ZXMgY2FuJ3QgZmFpbCwgc28gd2UgY2FuIHBhY2sgYWxsIG9mIHRoZQorCSAqIHVwZGF0ZXMgaW50byBhIHNpbmdsZSB0cmFuc2FjdGlvbi4KKwkgKi8KKworCXRyYW5zYWN0aW9uID0gcmVmX3N0b3JlX3RyYW5zYWN0aW9uX2JlZ2luKHJlZl9zdG9yZSwgJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbikKKwkJcmV0dXJuIC0xOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCByZWZuYW1lcykgeworCQlpZiAocmVmX3RyYW5zYWN0aW9uX2RlbGV0ZSh0cmFuc2FjdGlvbiwgaXRlbS0+c3RyaW5nLCBOVUxMLAorCQkJCQkgICBmbGFncywgbXNnLCAmZXJyKSkgeworCQkJd2FybmluZyhfKCJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiKSwKKwkJCQlpdGVtLT5zdHJpbmcsIGVyci5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZlcnIpOworCQl9CisJfQorCisJcmV0ID0gcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycik7CisKKwlpZiAocmV0KSB7CisJCWlmIChyZWZuYW1lcy0+bnIgPT0gMSkKKwkJCWVycm9yKF8oImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIpLAorCQkJICAgICAgcmVmbmFtZXMtPml0ZW1zWzBdLnN0cmluZywgZXJyLmJ1Zik7CisJCWVsc2UKKwkJCWVycm9yKF8oImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiKSwgZXJyLmJ1Zik7CisJfQorCisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX3BhY2tfcmVmcyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwkvKgorCSAqIFBhY2tlZCByZWZzIGFyZSBhbHJlYWR5IHBhY2tlZC4gSXQgbWlnaHQgYmUgdGhhdCBsb29zZSByZWZzCisJICogYXJlIHBhY2tlZCAqaW50byogYSBwYWNrZWQgcmVmcyBzdG9yZSwgYnV0IHRoYXQgaXMgZG9uZSBieQorCSAqIHVwZGF0aW5nIHRoZSBwYWNrZWQgcmVmZXJlbmNlcyB2aWEgYSB0cmFuc2FjdGlvbi4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWNrZWRfY3JlYXRlX3N5bXJlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgY2hhciAqdGFyZ2V0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmxvZ21zZykKK3sKKwlCVUcoInBhY2tlZCByZWZlcmVuY2Ugc3RvcmUgZG9lcyBub3Qgc3VwcG9ydCBzeW1yZWZzIik7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX3JlbmFtZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgIGNvbnN0IGNoYXIgKm9sZHJlZm5hbWUsIGNvbnN0IGNoYXIgKm5ld3JlZm5hbWUsCisJCQkgICAgY29uc3QgY2hhciAqbG9nbXNnKQoreworCUJVRygicGFja2VkIHJlZmVyZW5jZSBzdG9yZSBkb2VzIG5vdCBzdXBwb3J0IHJlbmFtaW5nIHJlZmVyZW5jZXMiKTsKK30KKworc3RhdGljIGludCBwYWNrZWRfY29weV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgY29uc3QgY2hhciAqb2xkcmVmbmFtZSwgY29uc3QgY2hhciAqbmV3cmVmbmFtZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmxvZ21zZykKK3sKKwlCVUcoInBhY2tlZCByZWZlcmVuY2Ugc3RvcmUgZG9lcyBub3Qgc3VwcG9ydCBjb3B5aW5nIHJlZmVyZW5jZXMiKTsKK30KKworc3RhdGljIHN0cnVjdCByZWZfaXRlcmF0b3IgKnBhY2tlZF9yZWZsb2dfaXRlcmF0b3JfYmVnaW4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlKQoreworCXJldHVybiBlbXB0eV9yZWZfaXRlcmF0b3JfYmVnaW4oKTsKK30KKworc3RhdGljIGludCBwYWNrZWRfZm9yX2VhY2hfcmVmbG9nX2VudChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICAgICBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJCSAgICAgIGVhY2hfcmVmbG9nX2VudF9mbiBmbiwKKwkJCQkJICAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWNrZWRfcmVmbG9nX2V4aXN0cyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWNrZWRfY3JlYXRlX3JlZmxvZyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZvcmNlX2NyZWF0ZSwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJQlVHKCJwYWNrZWQgcmVmZXJlbmNlIHN0b3JlIGRvZXMgbm90IHN1cHBvcnQgcmVmbG9ncyIpOworfQorCitzdGF0aWMgaW50IHBhY2tlZF9kZWxldGVfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhY2tlZF9yZWZsb2dfZXhwaXJlKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQljb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCXJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiBwcmVwYXJlX2ZuLAorCQkJCXJlZmxvZ19leHBpcnlfc2hvdWxkX3BydW5lX2ZuIHNob3VsZF9wcnVuZV9mbiwKKwkJCQlyZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4gY2xlYW51cF9mbiwKKwkJCQl2b2lkICpwb2xpY3lfY2JfZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZl9zdG9yYWdlX2JlIHJlZnNfYmVfcGFja2VkID0geworCU5VTEwsCisJInBhY2tlZCIsCisJcGFja2VkX3JlZl9zdG9yZV9jcmVhdGUsCisJcGFja2VkX2luaXRfZGIsCisJcGFja2VkX3RyYW5zYWN0aW9uX3ByZXBhcmUsCisJcGFja2VkX3RyYW5zYWN0aW9uX2ZpbmlzaCwKKwlwYWNrZWRfdHJhbnNhY3Rpb25fYWJvcnQsCisJcGFja2VkX2luaXRpYWxfdHJhbnNhY3Rpb25fY29tbWl0LAorCisJcGFja2VkX3BhY2tfcmVmcywKKwlwYWNrZWRfY3JlYXRlX3N5bXJlZiwKKwlwYWNrZWRfZGVsZXRlX3JlZnMsCisJcGFja2VkX3JlbmFtZV9yZWYsCisJcGFja2VkX2NvcHlfcmVmLAorCisJcGFja2VkX3JlZl9pdGVyYXRvcl9iZWdpbiwKKwlwYWNrZWRfcmVhZF9yYXdfcmVmLAorCisJcGFja2VkX3JlZmxvZ19pdGVyYXRvcl9iZWdpbiwKKwlwYWNrZWRfZm9yX2VhY2hfcmVmbG9nX2VudCwKKwlwYWNrZWRfZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlLAorCXBhY2tlZF9yZWZsb2dfZXhpc3RzLAorCXBhY2tlZF9jcmVhdGVfcmVmbG9nLAorCXBhY2tlZF9kZWxldGVfcmVmbG9nLAorCXBhY2tlZF9yZWZsb2dfZXhwaXJlCit9OwpkaWZmIC0tZ2l0IGEvcmVmcy9wYWNrZWQtYmFja2VuZC5oIGIvcmVmcy9wYWNrZWQtYmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMWEwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzL3BhY2tlZC1iYWNrZW5kLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBSRUZTX1BBQ0tFRF9CQUNLRU5EX0gKKyNkZWZpbmUgUkVGU19QQUNLRURfQkFDS0VORF9ICisKK3N0cnVjdCByZWZfdHJhbnNhY3Rpb247CisKKy8qCisgKiBTdXBwb3J0IGZvciBzdG9yaW5nIHJlZmVyZW5jZXMgaW4gYSBgcGFja2VkLXJlZnNgIGZpbGUuCisgKgorICogTm90ZSB0aGF0IHRoaXMgYmFja2VuZCBkb2Vzbid0IGNoZWNrIGZvciBEL0YgY29uZmxpY3RzLCBiZWNhdXNlIGl0CisgKiBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlbS4gQnV0IHVzdWFsbHkgaXQgc2hvdWxkIGJlIHdyYXBwZWQgaW4gYQorICogYGZpbGVzX3JlZl9zdG9yZWAgdGhhdCBwcmV2ZW50cyBEL0YgY29uZmxpY3RzIGZyb20gYmVpbmcgY3JlYXRlZCwKKyAqIGV2ZW4gYW1vbmcgcGFja2VkIHJlZnMuCisgKi8KKworc3RydWN0IHJlZl9zdG9yZSAqcGFja2VkX3JlZl9zdG9yZV9jcmVhdGUoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgc3RvcmVfZmxhZ3MpOworCisvKgorICogTG9jayB0aGUgcGFja2VkLXJlZnMgZmlsZSBmb3Igd3JpdGluZy4gRmxhZ3MgaXMgcGFzc2VkIHRvCisgKiBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCkuIFJldHVybiAwIG9uIHN1Y2Nlc3MuIE9uIGVycm9ycywgd3JpdGUKKyAqIGFuIGVycm9yIG1lc3NhZ2UgdG8gYGVycmAgYW5kIHJldHVybiBhIG5vbnplcm8gdmFsdWUuCisgKi8KK2ludCBwYWNrZWRfcmVmc19sb2NrKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwgaW50IGZsYWdzLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCit2b2lkIHBhY2tlZF9yZWZzX3VubG9jayhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUpOworaW50IHBhY2tlZF9yZWZzX2lzX2xvY2tlZChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUpOworCisvKgorICogUmV0dXJuIHRydWUgaWYgYHRyYW5zYWN0aW9uYCByZWFsbHkgbmVlZHMgdG8gYmUgY2FycmllZCBvdXQgYWdhaW5zdAorICogdGhlIHNwZWNpZmllZCBwYWNrZWRfcmVmX3N0b3JlLCBvciBmYWxzZSBpZiBpdCBjYW4gYmUgc2tpcHBlZAorICogKGkuZS4sIGJlY2F1c2UgaXQgaXMgYW4gb2J2aW91cyBOT09QKS4gYHJlZl9zdG9yZWAgbXVzdCBiZSBsb2NrZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK2ludCBpc19wYWNrZWRfdHJhbnNhY3Rpb25fbmVlZGVkKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCQkgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pOworCisjZW5kaWYgLyogUkVGU19QQUNLRURfQkFDS0VORF9IICovCmRpZmYgLS1naXQgYS9yZWZzL3JlZi1jYWNoZS5jIGIvcmVmcy9yZWYtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzA1MmY3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVmcy9yZWYtY2FjaGUuYwpAQCAtMCwwICsxLDU1MSBAQAorI2luY2x1ZGUgIi4uL2NhY2hlLmgiCisjaW5jbHVkZSAiLi4vcmVmcy5oIgorI2luY2x1ZGUgInJlZnMtaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJyZWYtY2FjaGUuaCIKKyNpbmNsdWRlICIuLi9pdGVyYXRvci5oIgorCit2b2lkIGFkZF9lbnRyeV90b19kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpCit7CisJQUxMT0NfR1JPVyhkaXItPmVudHJpZXMsIGRpci0+bnIgKyAxLCBkaXItPmFsbG9jKTsKKwlkaXItPmVudHJpZXNbZGlyLT5ucisrXSA9IGVudHJ5OworCS8qIG9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0IGVudHJpZXMgYXJlIGFkZGVkIGluIG9yZGVyICovCisJaWYgKGRpci0+bnIgPT0gMSB8fAorCSAgICAoZGlyLT5uciA9PSBkaXItPnNvcnRlZCArIDEgJiYKKwkgICAgIHN0cmNtcChkaXItPmVudHJpZXNbZGlyLT5uciAtIDJdLT5uYW1lLAorCQkgICAgZGlyLT5lbnRyaWVzW2Rpci0+bnIgLSAxXS0+bmFtZSkgPCAwKSkKKwkJZGlyLT5zb3J0ZWQgPSBkaXItPm5yOworfQorCitzdHJ1Y3QgcmVmX2RpciAqZ2V0X3JlZl9kaXIoc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHJlZl9kaXIgKmRpcjsKKwlhc3NlcnQoZW50cnktPmZsYWcgJiBSRUZfRElSKTsKKwlkaXIgPSAmZW50cnktPnUuc3ViZGlyOworCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9JTkNPTVBMRVRFKSB7CisJCWlmICghZGlyLT5jYWNoZS0+ZmlsbF9yZWZfZGlyKQorCQkJQlVHKCJpbmNvbXBsZXRlIHJlZl9zdG9yZSB3aXRob3V0IGZpbGxfcmVmX2RpciBmdW5jdGlvbiIpOworCisJCWRpci0+Y2FjaGUtPmZpbGxfcmVmX2RpcihkaXItPmNhY2hlLT5yZWZfc3RvcmUsIGRpciwgZW50cnktPm5hbWUpOworCQllbnRyeS0+ZmxhZyAmPSB+UkVGX0lOQ09NUExFVEU7CisJfQorCXJldHVybiBkaXI7Cit9CisKK3N0cnVjdCByZWZfZW50cnkgKmNyZWF0ZV9yZWZfZW50cnkoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFnKQoreworCXN0cnVjdCByZWZfZW50cnkgKnJlZjsKKworCUZMRVhfQUxMT0NfU1RSKHJlZiwgbmFtZSwgcmVmbmFtZSk7CisJb2lkY3B5KCZyZWYtPnUudmFsdWUub2lkLCBvaWQpOworCXJlZi0+ZmxhZyA9IGZsYWc7CisJcmV0dXJuIHJlZjsKK30KKworc3RydWN0IHJlZl9jYWNoZSAqY3JlYXRlX3JlZl9jYWNoZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgIGZpbGxfcmVmX2Rpcl9mbiAqZmlsbF9yZWZfZGlyKQoreworCXN0cnVjdCByZWZfY2FjaGUgKnJldCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXQpKTsKKworCXJldC0+cmVmX3N0b3JlID0gcmVmczsKKwlyZXQtPmZpbGxfcmVmX2RpciA9IGZpbGxfcmVmX2RpcjsKKwlyZXQtPnJvb3QgPSBjcmVhdGVfZGlyX2VudHJ5KHJldCwgIiIsIDAsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpcik7CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVmX2VudHJ5KHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KQoreworCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9ESVIpIHsKKwkJLyoKKwkJICogRG8gbm90IHVzZSBnZXRfcmVmX2RpcigpIGhlcmUsIGFzIHRoYXQgbWlnaHQKKwkJICogdHJpZ2dlciB0aGUgcmVhZGluZyBvZiBsb29zZSByZWZzLgorCQkgKi8KKwkJY2xlYXJfcmVmX2RpcigmZW50cnktPnUuc3ViZGlyKTsKKwl9CisJZnJlZShlbnRyeSk7Cit9CisKK3ZvaWQgZnJlZV9yZWZfY2FjaGUoc3RydWN0IHJlZl9jYWNoZSAqY2FjaGUpCit7CisJZnJlZV9yZWZfZW50cnkoY2FjaGUtPnJvb3QpOworCWZyZWUoY2FjaGUpOworfQorCisvKgorICogQ2xlYXIgYW5kIGZyZWUgYWxsIGVudHJpZXMgaW4gZGlyLCByZWN1cnNpdmVseS4KKyAqLworc3RhdGljIHZvaWQgY2xlYXJfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspCisJCWZyZWVfcmVmX2VudHJ5KGRpci0+ZW50cmllc1tpXSk7CisJRlJFRV9BTkRfTlVMTChkaXItPmVudHJpZXMpOworCWRpci0+c29ydGVkID0gZGlyLT5uciA9IGRpci0+YWxsb2MgPSAwOworfQorCitzdHJ1Y3QgcmVmX2VudHJ5ICpjcmVhdGVfZGlyX2VudHJ5KHN0cnVjdCByZWZfY2FjaGUgKmNhY2hlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmRpcm5hbWUsIHNpemVfdCBsZW4sCisJCQkJICAgaW50IGluY29tcGxldGUpCit7CisJc3RydWN0IHJlZl9lbnRyeSAqZGlyZW50cnk7CisKKwlGTEVYX0FMTE9DX01FTShkaXJlbnRyeSwgbmFtZSwgZGlybmFtZSwgbGVuKTsKKwlkaXJlbnRyeS0+dS5zdWJkaXIuY2FjaGUgPSBjYWNoZTsKKwlkaXJlbnRyeS0+ZmxhZyA9IFJFRl9ESVIgfCAoaW5jb21wbGV0ZSA/IFJFRl9JTkNPTVBMRVRFIDogMCk7CisJcmV0dXJuIGRpcmVudHJ5OworfQorCitzdGF0aWMgaW50IHJlZl9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpvbmUgPSAqKHN0cnVjdCByZWZfZW50cnkgKiopYTsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICp0d28gPSAqKHN0cnVjdCByZWZfZW50cnkgKiopYjsKKwlyZXR1cm4gc3RyY21wKG9uZS0+bmFtZSwgdHdvLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgc29ydF9yZWZfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIpOworCitzdHJ1Y3Qgc3RyaW5nX3NsaWNlIHsKKwlzaXplX3QgbGVuOworCWNvbnN0IGNoYXIgKnN0cjsKK307CisKK3N0YXRpYyBpbnQgcmVmX2VudHJ5X2NtcF9zc2xpY2UoY29uc3Qgdm9pZCAqa2V5XywgY29uc3Qgdm9pZCAqZW50XykKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX3NsaWNlICprZXkgPSBrZXlfOworCWNvbnN0IHN0cnVjdCByZWZfZW50cnkgKmVudCA9ICooY29uc3Qgc3RydWN0IHJlZl9lbnRyeSAqIGNvbnN0ICopZW50XzsKKwlpbnQgY21wID0gc3RybmNtcChrZXktPnN0ciwgZW50LT5uYW1lLCBrZXktPmxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gJ1wwJyAtICh1bnNpZ25lZCBjaGFyKWVudC0+bmFtZVtrZXktPmxlbl07Cit9CisKK2ludCBzZWFyY2hfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpyZWZuYW1lLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCByZWZfZW50cnkgKipyOworCXN0cnVjdCBzdHJpbmdfc2xpY2Uga2V5OworCisJaWYgKHJlZm5hbWUgPT0gTlVMTCB8fCAhZGlyLT5ucikKKwkJcmV0dXJuIC0xOworCisJc29ydF9yZWZfZGlyKGRpcik7CisJa2V5LmxlbiA9IGxlbjsKKwlrZXkuc3RyID0gcmVmbmFtZTsKKwlyID0gYnNlYXJjaCgma2V5LCBkaXItPmVudHJpZXMsIGRpci0+bnIsIHNpemVvZigqZGlyLT5lbnRyaWVzKSwKKwkJICAgIHJlZl9lbnRyeV9jbXBfc3NsaWNlKTsKKworCWlmIChyID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJldHVybiByIC0gZGlyLT5lbnRyaWVzOworfQorCisvKgorICogU2VhcmNoIGZvciBhIGRpcmVjdG9yeSBlbnRyeSBkaXJlY3RseSB3aXRoaW4gZGlyICh3aXRob3V0CisgKiByZWN1cnNpbmcpLiAgU29ydCBkaXIgaWYgbmVjZXNzYXJ5LiAgc3ViZGlybmFtZSBtdXN0IGJlIGEgZGlyZWN0b3J5CisgKiBuYW1lIChpLmUuLCBlbmQgaW4gJy8nKS4gIElmIG1rZGlyIGlzIHNldCwgdGhlbiBjcmVhdGUgdGhlCisgKiBkaXJlY3RvcnkgaWYgaXQgaXMgbWlzc2luZzsgb3RoZXJ3aXNlLCByZXR1cm4gTlVMTCBpZiB0aGUgZGVzaXJlZAorICogZGlyZWN0b3J5IGNhbm5vdCBiZSBmb3VuZC4gIGRpciBtdXN0IGFscmVhZHkgYmUgY29tcGxldGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX2RpciAqc2VhcmNoX2Zvcl9zdWJkaXIoc3RydWN0IHJlZl9kaXIgKmRpciwKKwkJCQkJIGNvbnN0IGNoYXIgKnN1YmRpcm5hbWUsIHNpemVfdCBsZW4sCisJCQkJCSBpbnQgbWtkaXIpCit7CisJaW50IGVudHJ5X2luZGV4ID0gc2VhcmNoX3JlZl9kaXIoZGlyLCBzdWJkaXJuYW1lLCBsZW4pOworCXN0cnVjdCByZWZfZW50cnkgKmVudHJ5OworCWlmIChlbnRyeV9pbmRleCA9PSAtMSkgeworCQlpZiAoIW1rZGlyKQorCQkJcmV0dXJuIE5VTEw7CisJCS8qCisJCSAqIFNpbmNlIGRpciBpcyBjb21wbGV0ZSwgdGhlIGFic2VuY2Ugb2YgYSBzdWJkaXIKKwkJICogbWVhbnMgdGhhdCB0aGUgc3ViZGlyIHJlYWxseSBkb2Vzbid0IGV4aXN0OworCQkgKiB0aGVyZWZvcmUsIGNyZWF0ZSBhbiBlbXB0eSByZWNvcmQgZm9yIGl0IGJ1dCBtYXJrCisJCSAqIHRoZSByZWNvcmQgY29tcGxldGUuCisJCSAqLworCQllbnRyeSA9IGNyZWF0ZV9kaXJfZW50cnkoZGlyLT5jYWNoZSwgc3ViZGlybmFtZSwgbGVuLCAwKTsKKwkJYWRkX2VudHJ5X3RvX2RpcihkaXIsIGVudHJ5KTsKKwl9IGVsc2UgeworCQllbnRyeSA9IGRpci0+ZW50cmllc1tlbnRyeV9pbmRleF07CisJfQorCXJldHVybiBnZXRfcmVmX2RpcihlbnRyeSk7Cit9CisKKy8qCisgKiBJZiByZWZuYW1lIGlzIGEgcmVmZXJlbmNlIG5hbWUsIGZpbmQgdGhlIHJlZl9kaXIgd2l0aGluIHRoZSBkaXIKKyAqIHRyZWUgdGhhdCBzaG91bGQgaG9sZCByZWZuYW1lLiBJZiByZWZuYW1lIGlzIGEgZGlyZWN0b3J5IG5hbWUKKyAqIChpLmUuLCBpdCBlbmRzIGluICcvJyksIHRoZW4gcmV0dXJuIHRoYXQgcmVmX2RpciBpdHNlbGYuIGRpciBtdXN0CisgKiByZXByZXNlbnQgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkgYW5kIG11c3QgYWxyZWFkeSBiZSBjb21wbGV0ZS4KKyAqIFNvcnQgcmVmX2RpcnMgYW5kIHJlY3Vyc2UgaW50byBzdWJkaXJlY3RvcmllcyBhcyBuZWNlc3NhcnkuIElmCisgKiBta2RpciBpcyBzZXQsIHRoZW4gY3JlYXRlIGFueSBtaXNzaW5nIGRpcmVjdG9yaWVzOyBvdGhlcndpc2UsCisgKiByZXR1cm4gTlVMTCBpZiB0aGUgZGVzaXJlZCBkaXJlY3RvcnkgY2Fubm90IGJlIGZvdW5kLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9kaXIgKmZpbmRfY29udGFpbmluZ19kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwKKwkJCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IG1rZGlyKQoreworCWNvbnN0IGNoYXIgKnNsYXNoOworCWZvciAoc2xhc2ggPSBzdHJjaHIocmVmbmFtZSwgJy8nKTsgc2xhc2g7IHNsYXNoID0gc3RyY2hyKHNsYXNoICsgMSwgJy8nKSkgeworCQlzaXplX3QgZGlybmFtZWxlbiA9IHNsYXNoIC0gcmVmbmFtZSArIDE7CisJCXN0cnVjdCByZWZfZGlyICpzdWJkaXI7CisJCXN1YmRpciA9IHNlYXJjaF9mb3Jfc3ViZGlyKGRpciwgcmVmbmFtZSwgZGlybmFtZWxlbiwgbWtkaXIpOworCQlpZiAoIXN1YmRpcikgeworCQkJZGlyID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWRpciA9IHN1YmRpcjsKKwl9CisKKwlyZXR1cm4gZGlyOworfQorCitzdHJ1Y3QgcmVmX2VudHJ5ICpmaW5kX3JlZl9lbnRyeShzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWludCBlbnRyeV9pbmRleDsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeTsKKwlkaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKGRpciwgcmVmbmFtZSwgMCk7CisJaWYgKCFkaXIpCisJCXJldHVybiBOVUxMOworCWVudHJ5X2luZGV4ID0gc2VhcmNoX3JlZl9kaXIoZGlyLCByZWZuYW1lLCBzdHJsZW4ocmVmbmFtZSkpOworCWlmIChlbnRyeV9pbmRleCA9PSAtMSkKKwkJcmV0dXJuIE5VTEw7CisJZW50cnkgPSBkaXItPmVudHJpZXNbZW50cnlfaW5kZXhdOworCXJldHVybiAoZW50cnktPmZsYWcgJiBSRUZfRElSKSA/IE5VTEwgOiBlbnRyeTsKK30KKworaW50IHJlbW92ZV9lbnRyeV9mcm9tX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWludCByZWZuYW1lX2xlbiA9IHN0cmxlbihyZWZuYW1lKTsKKwlpbnQgZW50cnlfaW5kZXg7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisJaW50IGlzX2RpciA9IHJlZm5hbWVbcmVmbmFtZV9sZW4gLSAxXSA9PSAnLyc7CisJaWYgKGlzX2RpcikgeworCQkvKgorCQkgKiByZWZuYW1lIHJlcHJlc2VudHMgYSByZWZlcmVuY2UgZGlyZWN0b3J5LiAgUmVtb3ZlCisJCSAqIHRoZSB0cmFpbGluZyBzbGFzaDsgb3RoZXJ3aXNlIHdlIHdpbGwgZ2V0IHRoZQorCQkgKiBkaXJlY3RvcnkgKnJlcHJlc2VudGluZyogcmVmbmFtZSByYXRoZXIgdGhhbiB0aGUKKwkJICogb25lICpjb250YWluaW5nKiBpdC4KKwkJICovCisJCWNoYXIgKmRpcm5hbWUgPSB4bWVtZHVweihyZWZuYW1lLCByZWZuYW1lX2xlbiAtIDEpOworCQlkaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKGRpciwgZGlybmFtZSwgMCk7CisJCWZyZWUoZGlybmFtZSk7CisJfSBlbHNlIHsKKwkJZGlyID0gZmluZF9jb250YWluaW5nX2RpcihkaXIsIHJlZm5hbWUsIDApOworCX0KKwlpZiAoIWRpcikKKwkJcmV0dXJuIC0xOworCWVudHJ5X2luZGV4ID0gc2VhcmNoX3JlZl9kaXIoZGlyLCByZWZuYW1lLCByZWZuYW1lX2xlbik7CisJaWYgKGVudHJ5X2luZGV4ID09IC0xKQorCQlyZXR1cm4gLTE7CisJZW50cnkgPSBkaXItPmVudHJpZXNbZW50cnlfaW5kZXhdOworCisJTU9WRV9BUlJBWSgmZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XSwKKwkJICAgJmRpci0+ZW50cmllc1tlbnRyeV9pbmRleCArIDFdLCBkaXItPm5yIC0gZW50cnlfaW5kZXggLSAxKTsKKwlkaXItPm5yLS07CisJaWYgKGRpci0+c29ydGVkID4gZW50cnlfaW5kZXgpCisJCWRpci0+c29ydGVkLS07CisJZnJlZV9yZWZfZW50cnkoZW50cnkpOworCXJldHVybiBkaXItPm5yOworfQorCitpbnQgYWRkX3JlZl9lbnRyeShzdHJ1Y3QgcmVmX2RpciAqZGlyLCBzdHJ1Y3QgcmVmX2VudHJ5ICpyZWYpCit7CisJZGlyID0gZmluZF9jb250YWluaW5nX2RpcihkaXIsIHJlZi0+bmFtZSwgMSk7CisJaWYgKCFkaXIpCisJCXJldHVybiAtMTsKKwlhZGRfZW50cnlfdG9fZGlyKGRpciwgcmVmKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEVtaXQgYSB3YXJuaW5nIGFuZCByZXR1cm4gdHJ1ZSBpZmYgcmVmMSBhbmQgcmVmMiBoYXZlIHRoZSBzYW1lIG5hbWUKKyAqIGFuZCB0aGUgc2FtZSBvaWQuIERpZSBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50CisgKiBvaWRzLgorICovCitzdGF0aWMgaW50IGlzX2R1cF9yZWYoY29uc3Qgc3RydWN0IHJlZl9lbnRyeSAqcmVmMSwgY29uc3Qgc3RydWN0IHJlZl9lbnRyeSAqcmVmMikKK3sKKwlpZiAoc3RyY21wKHJlZjEtPm5hbWUsIHJlZjItPm5hbWUpKQorCQlyZXR1cm4gMDsKKworCS8qIER1cGxpY2F0ZSBuYW1lOyBtYWtlIHN1cmUgdGhhdCB0aGV5IGRvbid0IGNvbmZsaWN0OiAqLworCisJaWYgKChyZWYxLT5mbGFnICYgUkVGX0RJUikgfHwgKHJlZjItPmZsYWcgJiBSRUZfRElSKSkKKwkJLyogVGhpcyBpcyBpbXBvc3NpYmxlIGJ5IGNvbnN0cnVjdGlvbiAqLworCQlkaWUoIlJlZmVyZW5jZSBkaXJlY3RvcnkgY29uZmxpY3Q6ICVzIiwgcmVmMS0+bmFtZSk7CisKKwlpZiAoIW9pZGVxKCZyZWYxLT51LnZhbHVlLm9pZCwgJnJlZjItPnUudmFsdWUub2lkKSkKKwkJZGllKCJEdXBsaWNhdGVkIHJlZiwgYW5kIFNIQTFzIGRvbid0IG1hdGNoOiAlcyIsIHJlZjEtPm5hbWUpOworCisJd2FybmluZygiRHVwbGljYXRlZCByZWY6ICVzIiwgcmVmMS0+bmFtZSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBTb3J0IHRoZSBlbnRyaWVzIGluIGRpciBub24tcmVjdXJzaXZlbHkgKGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5CisgKiBzb3J0ZWQpIGFuZCByZW1vdmUgYW55IGR1cGxpY2F0ZSBlbnRyaWVzLgorICovCitzdGF0aWMgdm9pZCBzb3J0X3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpcikKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpsYXN0ID0gTlVMTDsKKworCS8qCisJICogVGhpcyBjaGVjayBhbHNvIHByZXZlbnRzIHBhc3NpbmcgYSB6ZXJvLWxlbmd0aCBhcnJheSB0byBxc29ydCgpLAorCSAqIHdoaWNoIGlzIGEgcHJvYmxlbSBvbiBzb21lIHBsYXRmb3Jtcy4KKwkgKi8KKwlpZiAoZGlyLT5zb3J0ZWQgPT0gZGlyLT5ucikKKwkJcmV0dXJuOworCisJUVNPUlQoZGlyLT5lbnRyaWVzLCBkaXItPm5yLCByZWZfZW50cnlfY21wKTsKKworCS8qIFJlbW92ZSBhbnkgZHVwbGljYXRlczogKi8KKwlmb3IgKGkgPSAwLCBqID0gMDsgaiA8IGRpci0+bnI7IGorKykgeworCQlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSA9IGRpci0+ZW50cmllc1tqXTsKKwkJaWYgKGxhc3QgJiYgaXNfZHVwX3JlZihsYXN0LCBlbnRyeSkpCisJCQlmcmVlX3JlZl9lbnRyeShlbnRyeSk7CisJCWVsc2UKKwkJCWxhc3QgPSBkaXItPmVudHJpZXNbaSsrXSA9IGVudHJ5OworCX0KKwlkaXItPnNvcnRlZCA9IGRpci0+bnIgPSBpOworfQorCitlbnVtIHByZWZpeF9zdGF0ZSB7CisJLyogQWxsIHJlZnMgd2l0aGluIHRoZSBkaXJlY3Rvcnkgd291bGQgbWF0Y2ggcHJlZml4OiAqLworCVBSRUZJWF9DT05UQUlOU19ESVIsCisKKwkvKiBTb21lLCBidXQgbm90IGFsbCwgcmVmcyB3aXRoaW4gdGhlIGRpcmVjdG9yeSBtaWdodCBtYXRjaCBwcmVmaXg6ICovCisJUFJFRklYX1dJVEhJTl9ESVIsCisKKwkvKiBObyByZWZzIHdpdGhpbiB0aGUgZGlyZWN0b3J5IGNvdWxkIHBvc3NpYmx5IG1hdGNoIHByZWZpeDogKi8KKwlQUkVGSVhfRVhDTFVERVNfRElSCit9OworCisvKgorICogUmV0dXJuIGEgYHByZWZpeF9zdGF0ZWAgY29uc3RhbnQgZGVzY3JpYmluZyB0aGUgcmVsYXRpb25zaGlwCisgKiBiZXR3ZWVuIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGUgc3BlY2lmaWVkIGBkaXJuYW1lYCBhbmQgYHByZWZpeGAuCisgKi8KK3N0YXRpYyBlbnVtIHByZWZpeF9zdGF0ZSBvdmVybGFwc19wcmVmaXgoY29uc3QgY2hhciAqZGlybmFtZSwKKwkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwl3aGlsZSAoKnByZWZpeCAmJiAqZGlybmFtZSA9PSAqcHJlZml4KSB7CisJCWRpcm5hbWUrKzsKKwkJcHJlZml4Kys7CisJfQorCWlmICghKnByZWZpeCkKKwkJcmV0dXJuIFBSRUZJWF9DT05UQUlOU19ESVI7CisJZWxzZSBpZiAoISpkaXJuYW1lKQorCQlyZXR1cm4gUFJFRklYX1dJVEhJTl9ESVI7CisJZWxzZQorCQlyZXR1cm4gUFJFRklYX0VYQ0xVREVTX0RJUjsKK30KKworLyoKKyAqIExvYWQgYWxsIG9mIHRoZSByZWZzIGZyb20gYGRpcmAgKHJlY3Vyc2l2ZWx5KSB0aGF0IGNvdWxkIHBvc3NpYmx5CisgKiBjb250YWluIHJlZmVyZW5jZXMgbWF0Y2hpbmcgYHByZWZpeGAgaW50byBvdXIgaW4tbWVtb3J5IGNhY2hlLiBJZgorICogYHByZWZpeGAgaXMgTlVMTCwgcHJpbWUgdW5jb25kaXRpb25hbGx5LgorICovCitzdGF0aWMgdm9pZCBwcmltZV9yZWZfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwkvKgorCSAqIFRoZSBoYXJkIHdvcmsgb2YgbG9hZGluZyBsb29zZSByZWZzIGlzIGRvbmUgYnkgZ2V0X3JlZl9kaXIoKSwgc28gd2UKKwkgKiBqdXN0IG5lZWQgdG8gcmVjdXJzZSB0aHJvdWdoIGFsbCBvZiB0aGUgc3ViLWRpcmVjdG9yaWVzLiBXZSBkbyBub3QKKwkgKiBldmVuIG5lZWQgdG8gY2FyZSBhYm91dCBzb3J0aW5nLCBhcyB0cmF2ZXJzYWwgb3JkZXIgZG9lcyBub3QgbWF0dGVyCisJICogdG8gdXMuCisJICovCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGRpci0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSA9IGRpci0+ZW50cmllc1tpXTsKKwkJaWYgKCEoZW50cnktPmZsYWcgJiBSRUZfRElSKSkgeworCQkJLyogTm90IGEgZGlyZWN0b3J5OyBubyBuZWVkIHRvIHJlY3Vyc2UuICovCisJCX0gZWxzZSBpZiAoIXByZWZpeCkgeworCQkJLyogUmVjdXJzZSBpbiBhbnkgY2FzZTogKi8KKwkJCXByaW1lX3JlZl9kaXIoZ2V0X3JlZl9kaXIoZW50cnkpLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAob3ZlcmxhcHNfcHJlZml4KGVudHJ5LT5uYW1lLCBwcmVmaXgpKSB7CisJCQljYXNlIFBSRUZJWF9DT05UQUlOU19ESVI6CisJCQkJLyoKKwkJCQkgKiBSZWN1cnNlLCBhbmQgZnJvbSBoZXJlIGRvd24gd2UKKwkJCQkgKiBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZSBwcmVmaXgKKwkJCQkgKiBhbnltb3JlOgorCQkJCSAqLworCQkJCXByaW1lX3JlZl9kaXIoZ2V0X3JlZl9kaXIoZW50cnkpLCBOVUxMKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUFJFRklYX1dJVEhJTl9ESVI6CisJCQkJcHJpbWVfcmVmX2RpcihnZXRfcmVmX2RpcihlbnRyeSksIHByZWZpeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBSRUZJWF9FWENMVURFU19ESVI6CisJCQkJLyogTm8gbmVlZCB0byBwcmltZSB0aGlzIGRpcmVjdG9yeS4gKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIEEgbGV2ZWwgaW4gdGhlIHJlZmVyZW5jZSBoaWVyYXJjaHkgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgaXRlcmF0ZWQKKyAqIHRocm91Z2guCisgKi8KK3N0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3JfbGV2ZWwgeworCS8qCisJICogVGhlIHJlZl9kaXIgYmVpbmcgaXRlcmF0ZWQgb3ZlciBhdCB0aGlzIGxldmVsLiBUaGUgcmVmX2RpcgorCSAqIGlzIHNvcnRlZCBiZWZvcmUgYmVpbmcgc3RvcmVkIGhlcmUuCisJICovCisJc3RydWN0IHJlZl9kaXIgKmRpcjsKKworCWVudW0gcHJlZml4X3N0YXRlIHByZWZpeF9zdGF0ZTsKKworCS8qCisJICogVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGVudHJ5IHdpdGhpbiBkaXIgKHdoaWNoIG1pZ2h0CisJICogaXRzZWxmIGJlIGEgZGlyZWN0b3J5KS4gSWYgaW5kZXggPT0gLTEsIHRoZW4gdGhlIGl0ZXJhdGlvbgorCSAqIGhhc24ndCB5ZXQgYmVndW4uIElmIGluZGV4ID09IGRpci0+bnIsIHRoZW4gdGhlIGl0ZXJhdGlvbgorCSAqIHRocm91Z2ggdGhpcyBsZXZlbCBpcyBvdmVyLgorCSAqLworCWludCBpbmRleDsKK307CisKKy8qCisgKiBSZXByZXNlbnQgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSByZWZfZGlyIGluIHRoZSBtZW1vcnkgY2FjaGUuIFRoZQorICogaXRlcmF0aW9uIHJlY3Vyc2VzIHRocm91Z2ggc3ViZGlyZWN0b3JpZXMuCisgKi8KK3N0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3IgeworCXN0cnVjdCByZWZfaXRlcmF0b3IgYmFzZTsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBsZXZlbHMgY3VycmVudGx5IG9uIHRoZSBzdGFjay4gVGhpcyBpcyBhbHdheXMKKwkgKiBhdCBsZWFzdCAxLCBiZWNhdXNlIHdoZW4gaXQgYmVjb21lcyB6ZXJvIHRoZSBpdGVyYXRpb24gaXMKKwkgKiBlbmRlZCBhbmQgdGhpcyBzdHJ1Y3QgaXMgZnJlZWQuCisJICovCisJc2l6ZV90IGxldmVsc19ucjsKKworCS8qIFRoZSBudW1iZXIgb2YgbGV2ZWxzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgKi8KKwlzaXplX3QgbGV2ZWxzX2FsbG9jOworCisJLyoKKwkgKiBPbmx5IGluY2x1ZGUgcmVmZXJlbmNlcyB3aXRoIHRoaXMgcHJlZml4IGluIHRoZSBpdGVyYXRpb24uCisJICogVGhlIHByZWZpeCBpcyBtYXRjaGVkIHRleHR1YWxseSwgd2l0aG91dCByZWdhcmQgZm9yIHBhdGgKKwkgKiBjb21wb25lbnQgYm91bmRhcmllcy4KKwkgKi8KKwljb25zdCBjaGFyICpwcmVmaXg7CisKKwkvKgorCSAqIEEgc3RhY2sgb2YgbGV2ZWxzLiBsZXZlbHNbMF0gaXMgdGhlIHVwcGVybW9zdCBsZXZlbCB0aGF0IGlzCisJICogYmVpbmcgaXRlcmF0ZWQgb3ZlciBpbiB0aGlzIGl0ZXJhdGlvbi4gKFRoaXMgaXMgbm90CisJICogbmVjZXNzYXJ5IHRoZSB0b3AgbGV2ZWwgaW4gdGhlIHJlZmVyZW5jZXMgaGllcmFyY2h5LiBJZiB3ZQorCSAqIGFyZSBpdGVyYXRpbmcgdGhyb3VnaCBhIHN1YnRyZWUsIHRoZW4gbGV2ZWxzWzBdIHdpbGwgaG9sZAorCSAqIHRoZSByZWZfZGlyIGZvciB0aGF0IHN1YnRyZWUsIGFuZCBzdWJzZXF1ZW50IGxldmVscyB3aWxsIGdvCisJICogb24gZnJvbSB0aGVyZS4pCisJICovCisJc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWxzOworfTsKKworc3RhdGljIGludCBjYWNoZV9yZWZfaXRlcmF0b3JfYWR2YW5jZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3IpCit7CisJc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvciAqaXRlciA9CisJCShzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yICopcmVmX2l0ZXJhdG9yOworCisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IGNhY2hlX3JlZl9pdGVyYXRvcl9sZXZlbCAqbGV2ZWwgPQorCQkJJml0ZXItPmxldmVsc1tpdGVyLT5sZXZlbHNfbnIgLSAxXTsKKwkJc3RydWN0IHJlZl9kaXIgKmRpciA9IGxldmVsLT5kaXI7CisJCXN0cnVjdCByZWZfZW50cnkgKmVudHJ5OworCQllbnVtIHByZWZpeF9zdGF0ZSBlbnRyeV9wcmVmaXhfc3RhdGU7CisKKwkJaWYgKGxldmVsLT5pbmRleCA9PSAtMSkKKwkJCXNvcnRfcmVmX2RpcihkaXIpOworCisJCWlmICgrK2xldmVsLT5pbmRleCA9PSBsZXZlbC0+ZGlyLT5ucikgeworCQkJLyogVGhpcyBsZXZlbCBpcyBleGhhdXN0ZWQ7IHBvcCB1cCBhIGxldmVsICovCisJCQlpZiAoLS1pdGVyLT5sZXZlbHNfbnIgPT0gMCkKKwkJCQlyZXR1cm4gcmVmX2l0ZXJhdG9yX2Fib3J0KHJlZl9pdGVyYXRvcik7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZW50cnkgPSBkaXItPmVudHJpZXNbbGV2ZWwtPmluZGV4XTsKKworCQlpZiAobGV2ZWwtPnByZWZpeF9zdGF0ZSA9PSBQUkVGSVhfV0lUSElOX0RJUikgeworCQkJZW50cnlfcHJlZml4X3N0YXRlID0gb3ZlcmxhcHNfcHJlZml4KGVudHJ5LT5uYW1lLCBpdGVyLT5wcmVmaXgpOworCQkJaWYgKGVudHJ5X3ByZWZpeF9zdGF0ZSA9PSBQUkVGSVhfRVhDTFVERVNfRElSKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJZW50cnlfcHJlZml4X3N0YXRlID0gbGV2ZWwtPnByZWZpeF9zdGF0ZTsKKwkJfQorCisJCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9ESVIpIHsKKwkJCS8qIHB1c2ggZG93biBhIGxldmVsICovCisJCQlBTExPQ19HUk9XKGl0ZXItPmxldmVscywgaXRlci0+bGV2ZWxzX25yICsgMSwKKwkJCQkgICBpdGVyLT5sZXZlbHNfYWxsb2MpOworCisJCQlsZXZlbCA9ICZpdGVyLT5sZXZlbHNbaXRlci0+bGV2ZWxzX25yKytdOworCQkJbGV2ZWwtPmRpciA9IGdldF9yZWZfZGlyKGVudHJ5KTsKKwkJCWxldmVsLT5wcmVmaXhfc3RhdGUgPSBlbnRyeV9wcmVmaXhfc3RhdGU7CisJCQlsZXZlbC0+aW5kZXggPSAtMTsKKwkJfSBlbHNlIHsKKwkJCWl0ZXItPmJhc2UucmVmbmFtZSA9IGVudHJ5LT5uYW1lOworCQkJaXRlci0+YmFzZS5vaWQgPSAmZW50cnktPnUudmFsdWUub2lkOworCQkJaXRlci0+YmFzZS5mbGFncyA9IGVudHJ5LT5mbGFnOworCQkJcmV0dXJuIElURVJfT0s7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVfcmVmX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkJCSAgIHN0cnVjdCBvYmplY3RfaWQgKnBlZWxlZCkKK3sKKwlyZXR1cm4gcGVlbF9vYmplY3QocmVmX2l0ZXJhdG9yLT5vaWQsIHBlZWxlZCk7Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVfcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcikKK3sKKwlzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yICppdGVyID0KKwkJKHN0cnVjdCBjYWNoZV9yZWZfaXRlcmF0b3IgKilyZWZfaXRlcmF0b3I7CisKKwlmcmVlKChjaGFyICopaXRlci0+cHJlZml4KTsKKwlmcmVlKGl0ZXItPmxldmVscyk7CisJYmFzZV9yZWZfaXRlcmF0b3JfZnJlZShyZWZfaXRlcmF0b3IpOworCXJldHVybiBJVEVSX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2l0ZXJhdG9yX3Z0YWJsZSBjYWNoZV9yZWZfaXRlcmF0b3JfdnRhYmxlID0geworCWNhY2hlX3JlZl9pdGVyYXRvcl9hZHZhbmNlLAorCWNhY2hlX3JlZl9pdGVyYXRvcl9wZWVsLAorCWNhY2hlX3JlZl9pdGVyYXRvcl9hYm9ydAorfTsKKworc3RydWN0IHJlZl9pdGVyYXRvciAqY2FjaGVfcmVmX2l0ZXJhdG9yX2JlZ2luKHN0cnVjdCByZWZfY2FjaGUgKmNhY2hlLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSAgICAgIGludCBwcmltZV9kaXIpCit7CisJc3RydWN0IHJlZl9kaXIgKmRpcjsKKwlzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yICppdGVyOworCXN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcjsKKwlzdHJ1Y3QgY2FjaGVfcmVmX2l0ZXJhdG9yX2xldmVsICpsZXZlbDsKKworCWRpciA9IGdldF9yZWZfZGlyKGNhY2hlLT5yb290KTsKKwlpZiAocHJlZml4ICYmICpwcmVmaXgpCisJCWRpciA9IGZpbmRfY29udGFpbmluZ19kaXIoZGlyLCBwcmVmaXgsIDApOworCWlmICghZGlyKQorCQkvKiBUaGVyZSdzIG5vdGhpbmcgdG8gaXRlcmF0ZSBvdmVyLiAqLworCQlyZXR1cm4gZW1wdHlfcmVmX2l0ZXJhdG9yX2JlZ2luKCk7CisKKwlpZiAocHJpbWVfZGlyKQorCQlwcmltZV9yZWZfZGlyKGRpciwgcHJlZml4KTsKKworCWl0ZXIgPSB4Y2FsbG9jKDEsIHNpemVvZigqaXRlcikpOworCXJlZl9pdGVyYXRvciA9ICZpdGVyLT5iYXNlOworCWJhc2VfcmVmX2l0ZXJhdG9yX2luaXQocmVmX2l0ZXJhdG9yLCAmY2FjaGVfcmVmX2l0ZXJhdG9yX3Z0YWJsZSwgMSk7CisJQUxMT0NfR1JPVyhpdGVyLT5sZXZlbHMsIDEwLCBpdGVyLT5sZXZlbHNfYWxsb2MpOworCisJaXRlci0+bGV2ZWxzX25yID0gMTsKKwlsZXZlbCA9ICZpdGVyLT5sZXZlbHNbMF07CisJbGV2ZWwtPmluZGV4ID0gLTE7CisJbGV2ZWwtPmRpciA9IGRpcjsKKworCWlmIChwcmVmaXggJiYgKnByZWZpeCkgeworCQlpdGVyLT5wcmVmaXggPSB4c3RyZHVwKHByZWZpeCk7CisJCWxldmVsLT5wcmVmaXhfc3RhdGUgPSBQUkVGSVhfV0lUSElOX0RJUjsKKwl9IGVsc2UgeworCQlsZXZlbC0+cHJlZml4X3N0YXRlID0gUFJFRklYX0NPTlRBSU5TX0RJUjsKKwl9CisKKwlyZXR1cm4gcmVmX2l0ZXJhdG9yOworfQpkaWZmIC0tZ2l0IGEvcmVmcy9yZWYtY2FjaGUuaCBiL3JlZnMvcmVmLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmYjg5ZAotLS0gL2Rldi9udWxsCisrKyBiL3JlZnMvcmVmLWNhY2hlLmgKQEAgLTAsMCArMSwyNDMgQEAKKyNpZm5kZWYgUkVGU19SRUZfQ0FDSEVfSAorI2RlZmluZSBSRUZTX1JFRl9DQUNIRV9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdHJ1Y3QgcmVmX2RpcjsKK3N0cnVjdCByZWZfc3RvcmU7CisKKy8qCisgKiBJZiB0aGlzIHJlZl9jYWNoZSBpcyBmaWxsZWQgbGF6aWx5LCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbG9hZAorICogaW5mb3JtYXRpb24gaW50byB0aGUgc3BlY2lmaWVkIHJlZl9kaXIgKHNoYWxsb3cgb3IgZGVlcCwgYXQgdGhlCisgKiBvcHRpb24gb2YgdGhlIHJlZl9zdG9yZSkuIGRpcm5hbWUgaW5jbHVkZXMgYSB0cmFpbGluZyBzbGFzaC4KKyAqLwordHlwZWRlZiB2b2lkIGZpbGxfcmVmX2Rpcl9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgIHN0cnVjdCByZWZfZGlyICpkaXIsIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworCitzdHJ1Y3QgcmVmX2NhY2hlIHsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpyb290OworCisJLyogQSBwb2ludGVyIHRvIHRoZSByZWZfc3RvcmUgd2hvc2UgY2FjaGUgdGhpcyBpczogKi8KKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmU7CisKKwkvKgorCSAqIEZ1bmN0aW9uIHVzZWQgKGlmIG5lY2Vzc2FyeSkgdG8gbGF6aWx5LWZpbGwgY2FjaGUuIE1heSBiZQorCSAqIE5VTEwuCisJICovCisJZmlsbF9yZWZfZGlyX2ZuICpmaWxsX3JlZl9kaXI7Cit9OworCisvKgorICogSW5mb3JtYXRpb24gdXNlZCAoYWxvbmcgd2l0aCB0aGUgaW5mb3JtYXRpb24gaW4gcmVmX2VudHJ5KSB0bworICogZGVzY3JpYmUgYSBzaW5nbGUgY2FjaGVkIHJlZmVyZW5jZS4gIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgb25seQorICogb2NjdXJzIGVtYmVkZGVkIGluIGEgdW5pb24gaW4gc3RydWN0IHJlZl9lbnRyeSwgYW5kIG9ubHkgd2hlbgorICogKHJlZl9lbnRyeS0+ZmxhZyAmIFJFRl9ESVIpIGlzIHplcm8uCisgKi8KK3N0cnVjdCByZWZfdmFsdWUgeworCS8qCisJICogVGhlIG5hbWUgb2YgdGhlIG9iamVjdCB0byB3aGljaCB0aGlzIHJlZmVyZW5jZSByZXNvbHZlcworCSAqICh3aGljaCBtYXkgYmUgYSB0YWcgb2JqZWN0KS4gIElmIFJFRl9JU0JST0tFTiwgdGhpcyBpcworCSAqIG51bGwuICBJZiBSRUZfSVNTWU1SRUYsIHRoZW4gdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0CisJICogcmVmZXJyZWQgdG8gYnkgdGhlIGxhc3QgcmVmZXJlbmNlIGluIHRoZSBzeW1saW5rIGNoYWluLgorCSAqLworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworLyoKKyAqIEluZm9ybWF0aW9uIHVzZWQgKGFsb25nIHdpdGggdGhlIGluZm9ybWF0aW9uIGluIHJlZl9lbnRyeSkgdG8KKyAqIGRlc2NyaWJlIGEgbGV2ZWwgaW4gdGhlIGhpZXJhcmNoeSBvZiByZWZlcmVuY2VzLiAgVGhpcyBkYXRhCisgKiBzdHJ1Y3R1cmUgb25seSBvY2N1cnMgZW1iZWRkZWQgaW4gYSB1bmlvbiBpbiBzdHJ1Y3QgcmVmX2VudHJ5LCBhbmQKKyAqIG9ubHkgd2hlbiAocmVmX2VudHJ5LmZsYWcgJiBSRUZfRElSKSBpcyBzZXQuICBJbiB0aGF0IGNhc2UsCisgKiAocmVmX2VudHJ5LmZsYWcgJiBSRUZfSU5DT01QTEVURSkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZWZlcmVuY2VzCisgKiBpbiB0aGUgZGlyZWN0b3J5IGhhdmUgYWxyZWFkeSBiZWVuIHJlYWQ6CisgKgorICogICAgIChyZWZfZW50cnkuZmxhZyAmIFJFRl9JTkNPTVBMRVRFKSB1bnNldCAtLSBhIGRpcmVjdG9yeSBvZiBsb29zZQorICogICAgICAgICBvciBwYWNrZWQgcmVmZXJlbmNlcywgYWxyZWFkeSByZWFkLgorICoKKyAqICAgICAocmVmX2VudHJ5LmZsYWcgJiBSRUZfSU5DT01QTEVURSkgc2V0IC0tIGEgZGlyZWN0b3J5IG9mIGxvb3NlCisgKiAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBoYXNuJ3QgYmVlbiByZWFkIHlldCAobm9yIGhhcyBhbnkgb2YgaXRzCisgKiAgICAgICAgIHN1YmRpcmVjdG9yaWVzKS4KKyAqCisgKiBFbnRyaWVzIHdpdGhpbiBhIGRpcmVjdG9yeSBhcmUgc3RvcmVkIHdpdGhpbiBhIGdyb3dhYmxlIGFycmF5IG9mCisgKiBwb2ludGVycyB0byByZWZfZW50cmllcyAoZW50cmllcywgbnIsIGFsbG9jKS4gIEVudHJpZXMgMCA8PSBpIDwKKyAqIHNvcnRlZCBhcmUgc29ydGVkIGJ5IHRoZWlyIGNvbXBvbmVudCBuYW1lIGluIHN0cmNtcCgpIG9yZGVyIGFuZCB0aGUKKyAqIHJlbWFpbmluZyBlbnRyaWVzIGFyZSB1bnNvcnRlZC4KKyAqCisgKiBMb29zZSByZWZlcmVuY2VzIGFyZSByZWFkIGxhemlseSwgb25lIGRpcmVjdG9yeSBhdCBhIHRpbWUuICBXaGVuIGEKKyAqIGRpcmVjdG9yeSBvZiBsb29zZSByZWZlcmVuY2VzIGlzIHJlYWQsIHRoZW4gYWxsIG9mIHRoZSByZWZlcmVuY2VzCisgKiBpbiB0aGF0IGRpcmVjdG9yeSBhcmUgc3RvcmVkLCBhbmQgUkVGX0lOQ09NUExFVEUgc3R1YnMgYXJlIGNyZWF0ZWQKKyAqIGZvciBhbnkgc3ViZGlyZWN0b3JpZXMsIGJ1dCB0aGUgc3ViZGlyZWN0b3JpZXMgdGhlbXNlbHZlcyBhcmUgbm90CisgKiByZWFkLiAgVGhlIHJlYWRpbmcgaXMgdHJpZ2dlcmVkIGJ5IGdldF9yZWZfZGlyKCkuCisgKi8KK3N0cnVjdCByZWZfZGlyIHsKKwlpbnQgbnIsIGFsbG9jOworCisJLyoKKwkgKiBFbnRyaWVzIHdpdGggaW5kZXggMCA8PSBpIDwgc29ydGVkIGFyZSBzb3J0ZWQgYnkgbmFtZS4gIE5ldworCSAqIGVudHJpZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBsaXN0IHVuc29ydGVkLCBhbmQgYXJlIHNvcnRlZAorCSAqIG9ubHkgd2hlbiByZXF1aXJlZDsgdGh1cyB3ZSBhdm9pZCB0aGUgbmVlZCB0byBzb3J0IHRoZSBsaXN0CisJICogYWZ0ZXIgdGhlIGFkZGl0aW9uIG9mIGV2ZXJ5IHJlZmVyZW5jZS4KKwkgKi8KKwlpbnQgc29ydGVkOworCisJLyogVGhlIHJlZl9jYWNoZSBjb250YWluaW5nIHRoaXMgZW50cnk6ICovCisJc3RydWN0IHJlZl9jYWNoZSAqY2FjaGU7CisKKwlzdHJ1Y3QgcmVmX2VudHJ5ICoqZW50cmllczsKK307CisKKy8qCisgKiBCaXQgdmFsdWVzIGZvciByZWZfZW50cnk6OmZsYWcuICBSRUZfSVNTWU1SRUY9MHgwMSwKKyAqIFJFRl9JU1BBQ0tFRD0weDAyLCBSRUZfSVNCUk9LRU49MHgwNCBhbmQgUkVGX0JBRF9OQU1FPTB4MDggYXJlCisgKiBwdWJsaWMgdmFsdWVzOyBzZWUgcmVmcy5oLgorICovCisKKy8qIHJlZl9lbnRyeSByZXByZXNlbnRzIGEgZGlyZWN0b3J5IG9mIHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgUkVGX0RJUiAweDEwCisKKy8qCisgKiBFbnRyeSBoYXMgbm90IHlldCBiZWVuIHJlYWQgZnJvbSBkaXNrICh1c2VkIG9ubHkgZm9yIFJFRl9ESVIKKyAqIGVudHJpZXMgcmVwcmVzZW50aW5nIGxvb3NlIHJlZmVyZW5jZXMpCisgKi8KKyNkZWZpbmUgUkVGX0lOQ09NUExFVEUgMHgyMAorCisvKgorICogQSByZWZfZW50cnkgcmVwcmVzZW50cyBlaXRoZXIgYSByZWZlcmVuY2Ugb3IgYSAic3ViZGlyZWN0b3J5IiBvZgorICogcmVmZXJlbmNlcy4KKyAqCisgKiBFYWNoIGRpcmVjdG9yeSBpbiB0aGUgcmVmZXJlbmNlIG5hbWVzcGFjZSBpcyByZXByZXNlbnRlZCBieSBhCisgKiByZWZfZW50cnkgd2l0aCAoZmxhZ3MgJiBSRUZfRElSKSBzZXQgYW5kIGNvbnRhaW5pbmcgYSBzdWJkaXIgbWVtYmVyCisgKiB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzIGluIHRoYXQgZGlyZWN0b3J5IHRoYXQgaGF2ZSBiZWVuIHJlYWQgc28KKyAqIGZhci4gIElmIChmbGFncyAmIFJFRl9JTkNPTVBMRVRFKSBpcyBzZXQsIHRoZW4gdGhlIGRpcmVjdG9yeSBhbmQKKyAqIGl0cyBzdWJkaXJlY3RvcmllcyBoYXZlbid0IGJlZW4gcmVhZCB5ZXQuICBSRUZfSU5DT01QTEVURSBpcyBvbmx5CisgKiB1c2VkIGZvciBsb29zZSByZWZlcmVuY2UgZGlyZWN0b3JpZXMuCisgKgorICogUmVmZXJlbmNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSByZWZfZW50cnkgd2l0aCAoZmxhZ3MgJiBSRUZfRElSKQorICogdW5zZXQgYW5kIGEgdmFsdWUgbWVtYmVyIHRoYXQgZGVzY3JpYmVzIHRoZSByZWZlcmVuY2UncyB2YWx1ZS4gIFRoZQorICogZmxhZyBtZW1iZXIgaXMgYXQgdGhlIHJlZl9lbnRyeSBsZXZlbCwgYnV0IGl0IGlzIGFsc28gbmVlZGVkIHRvCisgKiBpbnRlcnByZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB2YWx1ZSBmaWVsZCAoaW4gb3RoZXIgd29yZHMsIGEKKyAqIHJlZl92YWx1ZSBvYmplY3QgaXMgbm90IHZlcnkgbXVjaCB1c2Ugd2l0aG91dCB0aGUgZW5jbG9zaW5nCisgKiByZWZfZW50cnkpLgorICoKKyAqIFJlZmVyZW5jZSBuYW1lcyBjYW5ub3QgZW5kIHdpdGggc2xhc2ggYW5kIGRpcmVjdG9yaWVzJyBuYW1lcyBhcmUKKyAqIGFsd2F5cyBzdG9yZWQgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIChleGNlcHQgZm9yIHRoZSB0b3AtbGV2ZWwKKyAqIGRpcmVjdG9yeSwgd2hpY2ggaXMgYWx3YXlzIGRlbm90ZWQgYnkgIiIpLiAgVGhpcyBoYXMgdHdvIG5pY2UKKyAqIGNvbnNlcXVlbmNlczogKDEpIHdoZW4gdGhlIGVudHJpZXMgaW4gZWFjaCBzdWJkaXIgYXJlIHNvcnRlZAorICogbGV4aWNvZ3JhcGhpY2FsbHkgYnkgbmFtZSAoYXMgdGhleSB1c3VhbGx5IGFyZSksIHRoZSByZWZlcmVuY2VzIGluCisgKiBhIHdob2xlIHRyZWUgY2FuIGJlIGdlbmVyYXRlZCBpbiBsZXhpY29ncmFwaGljIG9yZGVyIGJ5IHRyYXZlcnNpbmcKKyAqIHRoZSB0cmVlIGluIGxlZnQtdG8tcmlnaHQsIGRlcHRoLWZpcnN0IG9yZGVyOyAoMikgdGhlIG5hbWVzIG9mCisgKiByZWZlcmVuY2VzIGFuZCBzdWJkaXJlY3RvcmllcyBjYW5ub3QgY29uZmxpY3QsIGFuZCB0aGVyZWZvcmUgdGhlCisgKiBwcmVzZW5jZSBvZiBhbiBlbXB0eSBzdWJkaXJlY3RvcnkgZG9lcyBub3QgYmxvY2sgdGhlIGNyZWF0aW9uIG9mIGEKKyAqIHNpbWlsYXJseS1uYW1lZCByZWZlcmVuY2UuICAoVGhlIGZhY3QgdGhhdCByZWZlcmVuY2UgbmFtZXMgd2l0aCB0aGUKKyAqIHNhbWUgbGVhZGluZyBjb21wb25lbnRzIGNhbiBjb25mbGljdCAqd2l0aCBlYWNoIG90aGVyKiBpcyBhCisgKiBzZXBhcmF0ZSBpc3N1ZSB0aGF0IGlzIHJlZ3VsYXRlZCBieSByZWZzX3ZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZSgpLikKKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBuYW1lIGZpZWxkIGNvbnRhaW5zIHRoZSBmdWxseS1xdWFsaWZpZWQKKyAqIHJlZmVyZW5jZSAob3Igc3ViZGlyZWN0b3J5KSBuYW1lLiAgU3BhY2UgY291bGQgYmUgc2F2ZWQgYnkgb25seQorICogc3RvcmluZyB0aGUgcmVsYXRpdmUgbmFtZXMuICBCdXQgdGhhdCB3b3VsZCByZXF1aXJlIHRoZSBmdWxsIG5hbWVzCisgKiB0byBiZSBnZW5lcmF0ZWQgb24gdGhlIGZseSB3aGVuIGl0ZXJhdGluZyBpbiBkb19mb3JfZWFjaF9yZWYoKSwgYW5kCisgKiB3b3VsZCBicmVhayBjYWxsYmFjayBmdW5jdGlvbnMsIHdobyBoYXZlIGFsd2F5cyBiZWVuIGFibGUgdG8gYXNzdW1lCisgKiB0aGF0IHRoZSBuYW1lIHN0cmluZ3MgdGhhdCB0aGV5IGFyZSBwYXNzZWQgd2lsbCBub3QgYmUgZnJlZWQgZHVyaW5nCisgKiB0aGUgaXRlcmF0aW9uLgorICovCitzdHJ1Y3QgcmVmX2VudHJ5IHsKKwl1bnNpZ25lZCBjaGFyIGZsYWc7IC8qIElTU1lNUkVGPyBJU1BBQ0tFRD8gKi8KKwl1bmlvbiB7CisJCXN0cnVjdCByZWZfdmFsdWUgdmFsdWU7IC8qIGlmIG5vdCAoZmxhZ3MmUkVGX0RJUikgKi8KKwkJc3RydWN0IHJlZl9kaXIgc3ViZGlyOyAvKiBpZiAoZmxhZ3MmUkVGX0RJUikgKi8KKwl9IHU7CisJLyoKKwkgKiBUaGUgZnVsbCBuYW1lIG9mIHRoZSByZWZlcmVuY2UgKGUuZy4sICJyZWZzL2hlYWRzL21hc3RlciIpCisJICogb3IgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHdpdGggYSB0cmFpbGluZyBzbGFzaAorCSAqIChlLmcuLCAicmVmcy9oZWFkcy8iKToKKwkgKi8KKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCisvKgorICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gcmVmbmFtZSBmcm9tIHRoZQorICogcmVmX2RpciAobm9uLXJlY3Vyc2l2ZWx5KSwgc29ydGluZyBkaXIgaWYgbmVjZXNzYXJ5LiAgUmV0dXJuIC0xIGlmCisgKiBubyBzdWNoIGVudHJ5IGlzIGZvdW5kLiAgZGlyIG11c3QgYWxyZWFkeSBiZSBjb21wbGV0ZS4KKyAqLworaW50IHNlYXJjaF9yZWZfZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHNpemVfdCBsZW4pOworCitzdHJ1Y3QgcmVmX2RpciAqZ2V0X3JlZl9kaXIoc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpOworCisvKgorICogQ3JlYXRlIGEgc3RydWN0IHJlZl9lbnRyeSBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgZGlybmFtZS4KKyAqIGRpcm5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggKGUuZy4sCisgKiAicmVmcy9oZWFkcy8iKSBvciAiIiBmb3IgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8KK3N0cnVjdCByZWZfZW50cnkgKmNyZWF0ZV9kaXJfZW50cnkoc3RydWN0IHJlZl9jYWNoZSAqY2FjaGUsCisJCQkJICAgY29uc3QgY2hhciAqZGlybmFtZSwgc2l6ZV90IGxlbiwKKwkJCQkgICBpbnQgaW5jb21wbGV0ZSk7CisKK3N0cnVjdCByZWZfZW50cnkgKmNyZWF0ZV9yZWZfZW50cnkoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFnKTsKKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXcgYHJlZl9jYWNoZWAuIEl0cyB0b3AtbGV2ZWwgc3RhcnRzIG91dAorICogbWFya2VkIGluY29tcGxldGUuIElmIGBmaWxsX3JlZl9kaXJgIGlzIG5vbi1OVUxMLCBpdCBpcyB0aGUKKyAqIGZ1bmN0aW9uIGNhbGxlZCB0byBmaWxsIGluIGluY29tcGxldGUgZGlyZWN0b3JpZXMgaW4gdGhlCisgKiBgcmVmX2NhY2hlYCB3aGVuIHRoZXkgYXJlIGFjY2Vzc2VkLiBJZiBpdCBpcyBOVUxMLCB0aGVuIHRoZSB3aG9sZQorICogYHJlZl9jYWNoZWAgbXVzdCBiZSBmaWxsZWQgKGluY2x1ZGluZyBjbGVhcmluZyBpdHMgZGlyZWN0b3JpZXMnCisgKiBgUkVGX0lOQ09NUExFVEVgIGJpdHMpIGJlZm9yZSBpdCBpcyB1c2VkLCBhbmQgYHJlZnNgIGNhbiBiZSBOVUxMLAorICogdG9vLgorICovCitzdHJ1Y3QgcmVmX2NhY2hlICpjcmVhdGVfcmVmX2NhY2hlKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkJICAgZmlsbF9yZWZfZGlyX2ZuICpmaWxsX3JlZl9kaXIpOworCisvKgorICogRnJlZSB0aGUgYHJlZl9jYWNoZWAgYW5kIGFsbCBvZiBpdHMgYXNzb2NpYXRlZCBkYXRhLgorICovCit2b2lkIGZyZWVfcmVmX2NhY2hlKHN0cnVjdCByZWZfY2FjaGUgKmNhY2hlKTsKKworLyoKKyAqIEFkZCBhIHJlZl9lbnRyeSB0byB0aGUgZW5kIG9mIGRpciAodW5zb3J0ZWQpLiAgRW50cnkgaXMgYWx3YXlzCisgKiBzdG9yZWQgZGlyZWN0bHkgaW4gZGlyOyBubyByZWN1cnNpb24gaW50byBzdWJkaXJlY3RvcmllcyBpcworICogZG9uZS4KKyAqLwordm9pZCBhZGRfZW50cnlfdG9fZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsIHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KTsKKworLyoKKyAqIFJlbW92ZSB0aGUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBmcm9tIGRpciwgcmVjdXJzaW5nIGludG8KKyAqIHN1YmRpcmVjdG9yaWVzIGFzIG5lY2Vzc2FyeS4gIElmIHJlZm5hbWUgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkKKyAqIChpLmUuLCBlbmRzIHdpdGggJy8nKSwgdGhlbiByZW1vdmUgdGhlIGRpcmVjdG9yeSBhbmQgaXRzIGNvbnRlbnRzLgorICogSWYgdGhlIHJlbW92YWwgd2FzIHN1Y2Nlc3NmdWwsIHJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMKKyAqIHJlbWFpbmluZyBpbiB0aGUgZGlyZWN0b3J5IGVudHJ5IHRoYXQgY29udGFpbmVkIHRoZSBkZWxldGVkIGVudHJ5LgorICogSWYgdGhlIG5hbWUgd2FzIG5vdCBmb3VuZCwgcmV0dXJuIC0xLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzCisgKiBmdW5jdGlvbiBvbmx5IGRlbGV0ZXMgdGhlIGVudHJ5IGZyb20gdGhlIGNhY2hlOyBpdCBkb2VzIG5vdCBkZWxldGUKKyAqIGl0IGZyb20gdGhlIGZpbGVzeXN0ZW0gb3IgZW5zdXJlIHRoYXQgb3RoZXIgY2FjaGUgZW50cmllcyAod2hpY2gKKyAqIG1pZ2h0IGJlIHN5bWJvbGljIHJlZmVyZW5jZXMgdG8gdGhlIHJlbW92ZWQgZW50cnkpIGFyZSB1cGRhdGVkLgorICogTm9yIGRvZXMgaXQgcmVtb3ZlIGFueSBjb250YWluaW5nIGRpciBlbnRyaWVzIHRoYXQgbWlnaHQgYmUgbWFkZQorICogZW1wdHkgYnkgdGhlIHJlbW92YWwuICBkaXIgbXVzdCByZXByZXNlbnQgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkKKyAqIGFuZCBtdXN0IGFscmVhZHkgYmUgY29tcGxldGUuCisgKi8KK2ludCByZW1vdmVfZW50cnlfZnJvbV9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqcmVmbmFtZSk7CisKKy8qCisgKiBBZGQgYSByZWZfZW50cnkgdG8gdGhlIHJlZl9kaXIgKHVuc29ydGVkKSwgcmVjdXJzaW5nIGludG8KKyAqIHN1YmRpcmVjdG9yaWVzIGFzIG5lY2Vzc2FyeS4gIGRpciBtdXN0IHJlcHJlc2VudCB0aGUgdG9wLWxldmVsCisgKiBkaXJlY3RvcnkuICBSZXR1cm4gMCBvbiBzdWNjZXNzLgorICovCitpbnQgYWRkX3JlZl9lbnRyeShzdHJ1Y3QgcmVmX2RpciAqZGlyLCBzdHJ1Y3QgcmVmX2VudHJ5ICpyZWYpOworCisvKgorICogRmluZCB0aGUgdmFsdWUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiBkaXIsIHNvcnRpbmcgcmVmX2RpcnMKKyAqIGFuZCByZWN1cnNpbmcgaW50byBzdWJkaXJlY3RvcmllcyBhcyBuZWNlc3NhcnkuICBJZiB0aGUgbmFtZSBpcyBub3QKKyAqIGZvdW5kIG9yIGl0IGNvcnJlc3BvbmRzIHRvIGEgZGlyZWN0b3J5IGVudHJ5LCByZXR1cm4gTlVMTC4KKyAqLworc3RydWN0IHJlZl9lbnRyeSAqZmluZF9yZWZfZW50cnkoc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqcmVmbmFtZSk7CisKKy8qCisgKiBTdGFydCBpdGVyYXRpbmcgb3ZlciByZWZlcmVuY2VzIGluIGBjYWNoZWAuIElmIGBwcmVmaXhgIGlzCisgKiBzcGVjaWZpZWQsIG9ubHkgaW5jbHVkZSByZWZlcmVuY2VzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggdGhhdAorICogcHJlZml4LiBJZiBgcHJpbWVfZGlyYCBpcyB0cnVlLCB0aGVuIGZpbGwgYW55IGluY29tcGxldGUKKyAqIGRpcmVjdG9yaWVzIGJlZm9yZSBiZWdpbm5pbmcgdGhlIGl0ZXJhdGlvbi4gVGhlIG91dHB1dCBpcyBvcmRlcmVkCisgKiBieSByZWZuYW1lLgorICovCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpjYWNoZV9yZWZfaXRlcmF0b3JfYmVnaW4oc3RydWN0IHJlZl9jYWNoZSAqY2FjaGUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJICAgICAgaW50IHByaW1lX2Rpcik7CisKKyNlbmRpZiAvKiBSRUZTX1JFRl9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9yZWZzL3JlZnMtaW50ZXJuYWwuaCBiL3JlZnMvcmVmcy1pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMjQzNmMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzL3JlZnMtaW50ZXJuYWwuaApAQCAtMCwwICsxLDY3OCBAQAorI2lmbmRlZiBSRUZTX1JFRlNfSU5URVJOQUxfSAorI2RlZmluZSBSRUZTX1JFRlNfSU5URVJOQUxfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKworc3RydWN0IHJlZl90cmFuc2FjdGlvbjsKKworLyoKKyAqIERhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGZvciB0aGUgaW50ZXJuYWwgdXNlIG9mIHRoZSByZWZzCisgKiBtb2R1bGUuIENvZGUgb3V0c2lkZSBvZiB0aGUgcmVmcyBtb2R1bGUgc2hvdWxkIHVzZSBvbmx5IHRoZSBwdWJsaWMKKyAqIGZ1bmN0aW9ucyBkZWZpbmVkIGluICJyZWZzLmgiLCBhbmQgc2hvdWxkICpub3QqIGluY2x1ZGUgdGhpcyBmaWxlLgorICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBhcHBlYXIgaW4gYHJlZl91cGRhdGU6OmZsYWdzYC4gVGhlaXIKKyAqIG51bWVyaWNhbCB2YWx1ZXMgbXVzdCBub3QgY29uZmxpY3Qgd2l0aCB0aG9zZSBvZiBSRUZfTk9fREVSRUYgYW5kCisgKiBSRUZfRk9SQ0VfQ1JFQVRFX1JFRkxPRywgd2hpY2ggYXJlIGFsc28gc3RvcmVkIGluCisgKiBgcmVmX3VwZGF0ZTo6ZmxhZ3NgLgorICovCisKKy8qCisgKiBUaGUgcmVmZXJlbmNlIHNob3VsZCBiZSB1cGRhdGVkIHRvIG5ld19vaWQuCisgKi8KKyNkZWZpbmUgUkVGX0hBVkVfTkVXICgxIDw8IDIpCisKKy8qCisgKiBUaGUgY3VycmVudCByZWZlcmVuY2UncyB2YWx1ZSBzaG91bGQgYmUgY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdAorICogaXQgYWdyZWVzIHdpdGggb2xkX29pZC4KKyAqLworI2RlZmluZSBSRUZfSEFWRV9PTEQgKDEgPDwgMykKKworLyoKKyAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRpbWUgdG8gcmV0cnkgYWNxdWlyaW5nIGEgbG9vc2UgcmVmZXJlbmNlIGxvY2sKKyAqIGJlZm9yZSBnaXZpbmcgdXAsIGluIG1pbGxpc2Vjb25kczoKKyAqLworbG9uZyBnZXRfZmlsZXNfcmVmX2xvY2tfdGltZW91dF9tcyh2b2lkKTsKKworLyoKKyAqIFJldHVybiB0cnVlIGlmZiByZWZuYW1lIGlzIG1pbmltYWxseSBzYWZlLiAiU2FmZSIgaGVyZSBtZWFucyB0aGF0CisgKiBkZWxldGluZyBhIGxvb3NlIHJlZmVyZW5jZSBieSB0aGlzIG5hbWUgd2lsbCBub3QgZG8gYW55IGRhbWFnZSwgZm9yCisgKiBleGFtcGxlIGJ5IGNhdXNpbmcgYSBmaWxlIHRoYXQgaXMgbm90IGEgcmVmZXJlbmNlIHRvIGJlIGRlbGV0ZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgdGhlIHJlZmVyZW5jZSBuYW1lIGlzIGxlZ2FsOyBmb3IKKyAqIHRoYXQsIHVzZSBjaGVja19yZWZuYW1lX2Zvcm1hdCgpLgorICoKKyAqIEEgcmVmbmFtZSB0aGF0IHN0YXJ0cyB3aXRoICJyZWZzLyIgaXMgY29uc2lkZXJlZCBzYWZlIGlmZiBpdAorICogZG9lc24ndCBjb250YWluIGFueSAiLiIgb3IgIi4uIiBjb21wb25lbnRzIG9yIGNvbnNlY3V0aXZlICcvJworICogY2hhcmFjdGVycywgZW5kIHdpdGggJy8nLCBvciAob24gV2luZG93cykgY29udGFpbiBhbnkgJ1wnCisgKiBjaGFyYWN0ZXJzLiBOYW1lcyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoICJyZWZzLyIgYXJlIGNvbnNpZGVyZWQKKyAqIHNhZmUgaWZmIHRoZXkgY29uc2lzdCBlbnRpcmVseSBvZiB1cHBlciBjYXNlIGNoYXJhY3RlcnMgYW5kICdfJworICogKGxpa2UgIkhFQUQiIGFuZCAiTUVSR0VfSEVBRCIgYnV0IG5vdCAiY29uZmlnIiBvciAiRk9PL0JBUiIpLgorICovCitpbnQgcmVmbmFtZV9pc19zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCisvKgorICogSGVscGVyIGZ1bmN0aW9uOiByZXR1cm4gdHJ1ZSBpZiByZWZuYW1lLCB3aGljaCBoYXMgdGhlIHNwZWNpZmllZAorICogb2lkIGFuZCBmbGFncywgY2FuIGJlIHJlc29sdmVkIHRvIGFuIG9iamVjdCBpbiB0aGUgZGF0YWJhc2UuIElmIHRoZQorICogcmVmZXJyZWQtdG8gb2JqZWN0IGRvZXMgbm90IGV4aXN0LCBlbWl0IGEgd2FybmluZyBhbmQgcmV0dXJuIGZhbHNlLgorICovCitpbnQgcmVmX3Jlc29sdmVzX3RvX29iamVjdChjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzKTsKKworZW51bSBwZWVsX3N0YXR1cyB7CisJLyogb2JqZWN0IHdhcyBwZWVsZWQgc3VjY2Vzc2Z1bGx5OiAqLworCVBFRUxfUEVFTEVEID0gMCwKKworCS8qCisJICogb2JqZWN0IGNhbm5vdCBiZSBwZWVsZWQgYmVjYXVzZSB0aGUgbmFtZWQgb2JqZWN0IChvciBhbgorCSAqIG9iamVjdCByZWZlcnJlZCB0byBieSBhIHRhZyBpbiB0aGUgcGVlbCBjaGFpbiksIGRvZXMgbm90CisJICogZXhpc3QuCisJICovCisJUEVFTF9JTlZBTElEID0gLTEsCisKKwkvKiBvYmplY3QgY2Fubm90IGJlIHBlZWxlZCBiZWNhdXNlIGl0IGlzIG5vdCBhIHRhZzogKi8KKwlQRUVMX05PTl9UQUcgPSAtMiwKKworCS8qIHJlZl9lbnRyeSBjb250YWlucyBubyBwZWVsZWQgdmFsdWUgYmVjYXVzZSBpdCBpcyBhIHN5bXJlZjogKi8KKwlQRUVMX0lTX1NZTVJFRiA9IC0zLAorCisJLyoKKwkgKiByZWZfZW50cnkgY2Fubm90IGJlIHBlZWxlZCBiZWNhdXNlIGl0IGlzIGJyb2tlbiAoaS5lLiwgdGhlCisJICogc3ltYm9saWMgcmVmZXJlbmNlIGNhbm5vdCBldmVuIGJlIHJlc29sdmVkIHRvIGFuIG9iamVjdAorCSAqIG5hbWUpOgorCSAqLworCVBFRUxfQlJPS0VOID0gLTQKK307CisKKy8qCisgKiBQZWVsIHRoZSBuYW1lZCBvYmplY3Q7IGkuZS4sIGlmIHRoZSBvYmplY3QgaXMgYSB0YWcsIHJlc29sdmUgdGhlCisgKiB0YWcgcmVjdXJzaXZlbHkgdW50aWwgYSBub24tdGFnIGlzIGZvdW5kLiAgSWYgc3VjY2Vzc2Z1bCwgc3RvcmUgdGhlCisgKiByZXN1bHQgdG8gb2lkIGFuZCByZXR1cm4gUEVFTF9QRUVMRUQuICBJZiB0aGUgb2JqZWN0IGlzIG5vdCBhIHRhZworICogb3IgaXMgbm90IHZhbGlkLCByZXR1cm4gUEVFTF9OT05fVEFHIG9yIFBFRUxfSU5WQUxJRCwgcmVzcGVjdGl2ZWx5LAorICogYW5kIGxlYXZlIG9pZCB1bmNoYW5nZWQuCisgKi8KK2VudW0gcGVlbF9zdGF0dXMgcGVlbF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIENvcHkgdGhlIHJlZmxvZyBtZXNzYWdlIG1zZyB0byBzYiB3aGlsZSBjbGVhbmluZyB1cCB0aGUgd2hpdGVzcGFjZXMuCisgKiBFc3BlY2lhbGx5LCBjb252ZXJ0IExGIHRvIHNwYWNlLCBiZWNhdXNlIHJlZmxvZyBmaWxlIGlzIG9uZSBsaW5lIHBlciBlbnRyeS4KKyAqLwordm9pZCBjb3B5X3JlZmxvZ19tc2coc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm1zZyk7CisKKy8qKgorICogSW5mb3JtYXRpb24gbmVlZGVkIGZvciBhIHNpbmdsZSByZWYgdXBkYXRlLiBTZXQgbmV3X29pZCB0byB0aGUgbmV3CisgKiB2YWx1ZSBvciB0byBudWxsX29pZCB0byBkZWxldGUgdGhlIHJlZi4gVG8gY2hlY2sgdGhlIG9sZCB2YWx1ZQorICogd2hpbGUgdGhlIHJlZiBpcyBsb2NrZWQsIHNldCAoZmxhZ3MgJiBSRUZfSEFWRV9PTEQpIGFuZCBzZXQgb2xkX29pZAorICogdG8gdGhlIG9sZCB2YWx1ZSwgb3IgdG8gbnVsbF9vaWQgdG8gZW5zdXJlIHRoZSByZWYgZG9lcyBub3QgZXhpc3QKKyAqIGJlZm9yZSB1cGRhdGUuCisgKi8KK3N0cnVjdCByZWZfdXBkYXRlIHsKKwkvKgorCSAqIElmIChmbGFncyAmIFJFRl9IQVZFX05FVyksIHNldCB0aGUgcmVmZXJlbmNlIHRvIHRoaXMgdmFsdWUKKwkgKiAob3IgZGVsZXRlIGl0LCBpZiBgbmV3X29pZGAgaXMgYG51bGxfb2lkYCkuCisJICovCisJc3RydWN0IG9iamVjdF9pZCBuZXdfb2lkOworCisJLyoKKwkgKiBJZiAoZmxhZ3MgJiBSRUZfSEFWRV9PTEQpLCBjaGVjayB0aGF0IHRoZSByZWZlcmVuY2UKKwkgKiBwcmV2aW91c2x5IGhhZCB0aGlzIHZhbHVlIChvciBkaWRuJ3QgcHJldmlvdXNseSBleGlzdCwgaWYKKwkgKiBgb2xkX29pZGAgaXMgYG51bGxfb2lkYCkuCisJICovCisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworCisJLyoKKwkgKiBPbmUgb3IgbW9yZSBvZiBSRUZfTk9fREVSRUYsIFJFRl9GT1JDRV9DUkVBVEVfUkVGTE9HLAorCSAqIFJFRl9IQVZFX05FVywgUkVGX0hBVkVfT0xELCBvciBiYWNrZW5kLXNwZWNpZmljIGZsYWdzLgorCSAqLworCXVuc2lnbmVkIGludCBmbGFnczsKKworCXZvaWQgKmJhY2tlbmRfZGF0YTsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKwljaGFyICptc2c7CisKKwkvKgorCSAqIElmIHRoaXMgcmVmX3VwZGF0ZSB3YXMgc3BsaXQgb2ZmIG9mIGEgc3ltcmVmIHVwZGF0ZSB2aWEKKwkgKiBzcGxpdF9zeW1yZWZfdXBkYXRlKCksIHRoZW4gdGhpcyBtZW1iZXIgcG9pbnRzIGF0IHRoYXQKKwkgKiB1cGRhdGUuIFRoaXMgaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOgorCSAqIDEuIFdoZW4gcmVwb3J0aW5nIGVycm9ycywgd2UgcmVwb3J0IHRoZSByZWZuYW1lIHVuZGVyIHdoaWNoCisJICogICAgdGhlIHVwZGF0ZSB3YXMgb3JpZ2luYWxseSByZXF1ZXN0ZWQuCisJICogMi4gV2hlbiB3ZSByZWFkIHRoZSBvbGQgdmFsdWUgb2YgdGhpcyByZWZlcmVuY2UsIHdlCisJICogICAgcHJvcGFnYXRlIGl0IGJhY2sgdG8gaXRzIHBhcmVudCB1cGRhdGUgZm9yIHJlY29yZGluZyBpbgorCSAqICAgIHRoZSBsYXR0ZXIncyByZWZsb2cuCisJICovCisJc3RydWN0IHJlZl91cGRhdGUgKnBhcmVudF91cGRhdGU7CisKKwljb25zdCBjaGFyIHJlZm5hbWVbRkxFWF9BUlJBWV07Cit9OworCitpbnQgcmVmc19yZWFkX3Jhd19yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkgICAgICBjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgIHN0cnVjdCBzdHJidWYgKnJlZmVyZW50LCB1bnNpZ25lZCBpbnQgKnR5cGUpOworCisvKgorICogV3JpdGUgYW4gZXJyb3IgdG8gYGVycmAgYW5kIHJldHVybiBhIG5vbnplcm8gdmFsdWUgaWZmIHRoZSBzYW1lCisgKiByZWZuYW1lIGFwcGVhcnMgbXVsdGlwbGUgdGltZXMgaW4gYHJlZm5hbWVzYC4gYHJlZm5hbWVzYCBtdXN0IGJlCisgKiBzb3J0ZWQgb24gZW50cnkgdG8gdGhpcyBmdW5jdGlvbi4KKyAqLworaW50IHJlZl91cGRhdGVfcmVqZWN0X2R1cGxpY2F0ZXMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcywKKwkJCQkgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIEFkZCBhIHJlZl91cGRhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMgdG8gdHJhbnNhY3Rpb24sIGFuZAorICogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3IG9iamVjdC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB2ZXJpZnkKKyAqIHRoYXQgcmVmbmFtZSBpcyB3ZWxsLWZvcm1lZC4gbmV3X29pZCBhbmQgb2xkX29pZCBhcmUgb25seQorICogZGVyZWZlcmVuY2VkIGlmIHRoZSBSRUZfSEFWRV9ORVcgYW5kIFJFRl9IQVZFX09MRCBiaXRzLAorICogcmVzcGVjdGl2ZWx5LCBhcmUgc2V0IGluIGZsYWdzLgorICovCitzdHJ1Y3QgcmVmX3VwZGF0ZSAqcmVmX3RyYW5zYWN0aW9uX2FkZF91cGRhdGUoCisJCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQljb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19vaWQsCisJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCWNvbnN0IGNoYXIgKm1zZyk7CisKKy8qCisgKiBUcmFuc2FjdGlvbiBzdGF0ZXMuCisgKgorICogT1BFTjogICBUaGUgdHJhbnNhY3Rpb24gaXMgaW5pdGlhbGl6ZWQgYW5kIG5ldyB1cGRhdGVzIGNhbiBzdGlsbCBiZQorICogICAgICAgICBhZGRlZCB0byBpdC4gQW4gT1BFTiB0cmFuc2FjdGlvbiBjYW4gYmUgcHJlcGFyZWQsCisgKiAgICAgICAgIGNvbW1pdHRlZCwgZnJlZWQsIG9yIGFib3J0ZWQgKGZyZWVpbmcgYW5kIGFib3J0aW5nIGFuIG9wZW4KKyAqICAgICAgICAgdHJhbnNhY3Rpb24gYXJlIGVxdWl2YWxlbnQpLgorICoKKyAqIFBSRVBBUkVEOiByZWZfdHJhbnNhY3Rpb25fcHJlcGFyZSgpLCB3aGljaCBsb2NrcyBhbGwgb2YgdGhlCisgKiAgICAgICAgIHJlZmVyZW5jZXMgaW52b2x2ZWQgaW4gdGhlIHVwZGF0ZSBhbmQgY2hlY2tzIHRoYXQgdGhlCisgKiAgICAgICAgIHVwZGF0ZSBoYXMgbm8gZXJyb3JzLCBoYXMgYmVlbiBjYWxsZWQgc3VjY2Vzc2Z1bGx5IGZvciB0aGUKKyAqICAgICAgICAgdHJhbnNhY3Rpb24uIEEgUFJFUEFSRUQgdHJhbnNhY3Rpb24gY2FuIGJlIGNvbW1pdHRlZCBvcgorICogICAgICAgICBhYm9ydGVkLgorICoKKyAqIENMT1NFRDogVGhlIHRyYW5zYWN0aW9uIGlzIG5vIGxvbmdlciBhY3RpdmUuIEEgdHJhbnNhY3Rpb24gYmVjb21lcworICogICAgICAgICBDTE9TRUQgaWYgdGhlcmUgaXMgYSBmYWlsdXJlIHdoaWxlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbgorICogICAgICAgICBvciBpZiBhIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvciBhYm9ydGVkLiBBIENMT1NFRAorICogICAgICAgICB0cmFuc2FjdGlvbiBjYW4gb25seSBiZSBmcmVlZC4KKyAqLworZW51bSByZWZfdHJhbnNhY3Rpb25fc3RhdGUgeworCVJFRl9UUkFOU0FDVElPTl9PUEVOICAgICA9IDAsCisJUkVGX1RSQU5TQUNUSU9OX1BSRVBBUkVEID0gMSwKKwlSRUZfVFJBTlNBQ1RJT05fQ0xPU0VEICAgPSAyCit9OworCisvKgorICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgYSByZWZlcmVuY2UgdHJhbnNhY3Rpb24sIHdoaWNoIGNhbgorICogY29uc2lzdCBvZiBjaGVja3MgYW5kIHVwZGF0ZXMgdG8gbXVsdGlwbGUgcmVmZXJlbmNlcywgY2FycmllZCBvdXQKKyAqIGFzIGF0b21pY2FsbHkgYXMgcG9zc2libGUuICBUaGlzIHN0cnVjdHVyZSBpcyBvcGFxdWUgdG8gY2FsbGVycy4KKyAqLworc3RydWN0IHJlZl90cmFuc2FjdGlvbiB7CisJc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlOworCXN0cnVjdCByZWZfdXBkYXRlICoqdXBkYXRlczsKKwlzaXplX3QgYWxsb2M7CisJc2l6ZV90IG5yOworCWVudW0gcmVmX3RyYW5zYWN0aW9uX3N0YXRlIHN0YXRlOworCXZvaWQgKmJhY2tlbmRfZGF0YTsKK307CisKKy8qCisgKiBDaGVjayBmb3IgZW50cmllcyBpbiBleHRyYXMgdGhhdCBhcmUgd2l0aGluIHRoZSBzcGVjaWZpZWQKKyAqIGRpcmVjdG9yeSwgd2hlcmUgZGlybmFtZSBpcyBhIHJlZmVyZW5jZSBkaXJlY3RvcnkgbmFtZSBpbmNsdWRpbmcKKyAqIHRoZSB0cmFpbGluZyBzbGFzaCAoZS5nLiwgInJlZnMvaGVhZHMvZm9vLyIpLiBJZ25vcmUgYW55CisgKiBjb25mbGljdGluZyByZWZlcmVuY2VzIHRoYXQgYXJlIGZvdW5kIGluIHNraXAuIElmIHRoZXJlIGlzIGEKKyAqIGNvbmZsaWN0aW5nIHJlZmVyZW5jZSwgcmV0dXJuIGl0cyBuYW1lLgorICoKKyAqIGV4dHJhcyBhbmQgc2tpcCBtdXN0IGJlIHNvcnRlZCBsaXN0cyBvZiByZWZlcmVuY2UgbmFtZXMuIEVpdGhlciBvbmUKKyAqIGNhbiBiZSBOVUxMLCBzaWduaWZ5aW5nIHRoZSBlbXB0eSBsaXN0LgorICovCitjb25zdCBjaGFyICpmaW5kX2Rlc2NlbmRhbnRfcmVmKGNvbnN0IGNoYXIgKmRpcm5hbWUsCisJCQkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpleHRyYXMsCisJCQkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpza2lwKTsKKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gYXR0ZW1wdCB0byByZW5hbWUgb2xkX3JlZm5hbWUgdG8gbmV3X3JlZm5hbWUgd291bGQKKyAqIGNhdXNlIGEgRC9GIGNvbmZsaWN0IHdpdGggYW55IGV4aXN0aW5nIHJlZmVyZW5jZSAob3RoZXIgdGhhbgorICogcG9zc2libHkgb2xkX3JlZm5hbWUpLiBJZiB0aGVyZSB3b3VsZCBiZSBhIGNvbmZsaWN0LCBlbWl0IGFuIGVycm9yCisgKiBtZXNzYWdlIGFuZCByZXR1cm4gZmFsc2U7IG90aGVyd2lzZSwgcmV0dXJuIHRydWUuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IHNhZmUgYWdhaW5zdCBhbGwgcmFjZXMgd2l0aCBvdGhlcgorICogcHJvY2Vzc2VzICh0aG91Z2ggcmVuYW1lX3JlZigpIGNhdGNoZXMgc29tZSByYWNlcyB0aGF0IG1pZ2h0IGdldCBieQorICogdGhpcyBjaGVjaykuCisgKi8KK2ludCByZWZzX3JlbmFtZV9yZWZfYXZhaWxhYmxlKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkgICAgICBjb25zdCBjaGFyICpvbGRfcmVmbmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5ld19yZWZuYW1lKTsKKworLyogV2UgYWxsb3cgInJlY3Vyc2l2ZSIgc3ltYm9saWMgcmVmcy4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KKyNkZWZpbmUgU1lNUkVGX01BWERFUFRIIDUKKworLyogSW5jbHVkZSBicm9rZW4gcmVmZXJlbmNlcyBpbiBhIGRvX2Zvcl9lYWNoX3JlZiooKSBpdGVyYXRpb246ICovCisjZGVmaW5lIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOIDB4MDEKKworLyoKKyAqIFJlZmVyZW5jZSBpdGVyYXRvcnMKKyAqCisgKiBBIHJlZmVyZW5jZSBpdGVyYXRvciBlbmNhcHN1bGF0ZXMgdGhlIHN0YXRlIG9mIGFuIGluLXByb2dyZXNzCisgKiBpdGVyYXRpb24gb3ZlciByZWZlcmVuY2VzLiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYHN0cnVjdAorICogcmVmX2l0ZXJhdG9yYCB2aWEgb25lIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuCisgKgorICogQSBmcmVzaGx5LWNyZWF0ZWQgcmVmX2l0ZXJhdG9yIGRvZXNuJ3QgeWV0IHBvaW50IGF0IGEgcmVmZXJlbmNlLiBUbworICogYWR2YW5jZSB0aGUgaXRlcmF0b3IsIGNhbGwgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKS4gSWYgc3VjY2Vzc2Z1bCwKKyAqIHRoaXMgc2V0cyB0aGUgaXRlcmF0b3IncyByZWZuYW1lLCBvaWQsIGFuZCBmbGFncyBmaWVsZHMgdG8gZGVzY3JpYmUKKyAqIHRoZSBuZXh0IHJlZmVyZW5jZSBhbmQgcmV0dXJucyBJVEVSX09LLiBUaGUgZGF0YSBwb2ludGVkIGF0IGJ5CisgKiByZWZuYW1lIGFuZCBvaWQgYmVsb25nIHRvIHRoZSBpdGVyYXRvcjsgaWYgeW91IHdhbnQgdG8gcmV0YWluIHRoZW0KKyAqIGFmdGVyIGNhbGxpbmcgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSBhZ2FpbiBvciBjYWxsaW5nCisgKiByZWZfaXRlcmF0b3JfYWJvcnQoKSwgeW91IG11c3QgbWFrZSBhIGNvcHkuIFdoZW4gdGhlIGl0ZXJhdGlvbiBoYXMKKyAqIGJlZW4gZXhoYXVzdGVkLCByZWZfaXRlcmF0b3JfYWR2YW5jZSgpIHJlbGVhc2VzIGFueSByZXNvdXJjZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXRlcmF0aW9uLCBmcmVlcyB0aGUgcmVmX2l0ZXJhdG9yIG9iamVjdCwgYW5kCisgKiByZXR1cm5zIElURVJfRE9ORS4gSWYgeW91IHdhbnQgdG8gYWJvcnQgdGhlIGl0ZXJhdGlvbiBlYXJseSwgY2FsbAorICogcmVmX2l0ZXJhdG9yX2Fib3J0KCksIHdoaWNoIGFsc28gZnJlZXMgdGhlIHJlZl9pdGVyYXRvciBvYmplY3QgYW5kCisgKiBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuIElmIHRoZXJlIHdhcyBhbiBpbnRlcm5hbCBlcnJvciBhZHZhbmNpbmcKKyAqIHRvIHRoZSBuZXh0IGVudHJ5LCByZWZfaXRlcmF0b3JfYWR2YW5jZSgpIGFib3J0cyB0aGUgaXRlcmF0aW9uLAorICogZnJlZXMgdGhlIHJlZl9pdGVyYXRvciwgYW5kIHJldHVybnMgSVRFUl9FUlJPUi4KKyAqCisgKiBUaGUgcmVmZXJlbmNlIGN1cnJlbnRseSBiZWluZyBsb29rZWQgYXQgY2FuIGJlIHBlZWxlZCBieSBjYWxsaW5nCisgKiByZWZfaXRlcmF0b3JfcGVlbCgpLiBUaGlzIGZ1bmN0aW9uIGlzIG9mdGVuIGZhc3RlciB0aGFuIHBlZWxfcmVmKCksCisgKiBzbyBpdCBzaG91bGQgYmUgcHJlZmVycmVkIHdoZW4gaXRlcmF0aW5nIG92ZXIgcmVmZXJlbmNlcy4KKyAqCisgKiBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciwgYSB0eXBpY2FsIGl0ZXJhdGlvbiBsb29rcyBsaWtlIHRoaXM6CisgKgorICogICAgIGludCBvazsKKyAqICAgICBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyID0gLi4uOworICoKKyAqICAgICB3aGlsZSAoKG9rID0gcmVmX2l0ZXJhdG9yX2FkdmFuY2UoaXRlcikpID09IElURVJfT0spIHsKKyAqICAgICAgICAgICAgIGlmICh3YW50X3RvX3N0b3BfaXRlcmF0aW9uKCkpIHsKKyAqICAgICAgICAgICAgICAgICAgICAgb2sgPSByZWZfaXRlcmF0b3JfYWJvcnQoaXRlcik7CisgKiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICogICAgICAgICAgICAgfQorICoKKyAqICAgICAgICAgICAgIC8vIEFjY2VzcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCByZWZlcmVuY2U6CisgKiAgICAgICAgICAgICBpZiAoIShpdGVyLT5mbGFncyAmIFJFRl9JU1NZTVJFRikpCisgKiAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMgaXMgJXNcbiIsIGl0ZXItPnJlZm5hbWUsIG9pZF90b19oZXgoaXRlci0+b2lkKSk7CisgKgorICogICAgICAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gcGVlbCB0aGUgcmVmZXJlbmNlOgorICogICAgICAgICAgICAgcmVmX2l0ZXJhdG9yX3BlZWwoaXRlciwgJm9pZCk7CisgKiAgICAgfQorICoKKyAqICAgICBpZiAob2sgIT0gSVRFUl9ET05FKQorICogICAgICAgICAgICAgaGFuZGxlX2Vycm9yKCk7CisgKi8KK3N0cnVjdCByZWZfaXRlcmF0b3IgeworCXN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlICp2dGFibGU7CisKKwkvKgorCSAqIERvZXMgdGhpcyBgcmVmX2l0ZXJhdG9yYCBpdGVyYXRlIG92ZXIgcmVmZXJlbmNlcyBpbiBvcmRlcgorCSAqIGJ5IHJlZm5hbWU/CisJICovCisJdW5zaWduZWQgaW50IG9yZGVyZWQgOiAxOworCisJY29uc3QgY2hhciAqcmVmbmFtZTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworLyoKKyAqIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBvciBuZXh0IGl0ZW0gYW5kIHJldHVybiBJVEVSX09LLgorICogSWYgdGhlIGl0ZXJhdGlvbiBpcyBleGhhdXN0ZWQsIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSByZWZfaXRlcmF0b3IgYW5kIHJldHVybiBJVEVSX0RPTkUuIE9uIGVycm9ycywgZnJlZSB0aGUgaXRlcmF0b3IKKyAqIHJlc291cmNlcyBhbmQgcmV0dXJuIElURVJfRVJST1IuIEl0IGlzIGEgYnVnIHRvIHVzZSByZWZfaXRlcmF0b3Igb3IKKyAqIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiBhZnRlciBpdCBoYXMgcmV0dXJuZWQgSVRFUl9ET05FIG9yCisgKiBJVEVSX0VSUk9SLgorICovCitpbnQgcmVmX2l0ZXJhdG9yX2FkdmFuY2Uoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKTsKKworLyoKKyAqIElmIHBvc3NpYmxlLCBwZWVsIHRoZSByZWZlcmVuY2UgY3VycmVudGx5IGJlaW5nIHZpZXdlZCBieSB0aGUKKyAqIGl0ZXJhdG9yLiBSZXR1cm4gMCBvbiBzdWNjZXNzLgorICovCitpbnQgcmVmX2l0ZXJhdG9yX3BlZWwoc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yLAorCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpwZWVsZWQpOworCisvKgorICogRW5kIHRoZSBpdGVyYXRpb24gYmVmb3JlIGl0IGhhcyBiZWVuIGV4aGF1c3RlZCwgZnJlZWluZyB0aGUKKyAqIHJlZmVyZW5jZSBpdGVyYXRvciBhbmQgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzIGFuZCByZXR1cm5pbmcKKyAqIElURVJfRE9ORS4gSWYgdGhlIGFib3J0IGl0c2VsZiBmYWlsZWQsIHJldHVybiBJVEVSX0VSUk9SLgorICovCitpbnQgcmVmX2l0ZXJhdG9yX2Fib3J0KHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcik7CisKKy8qCisgKiBBbiBpdGVyYXRvciBvdmVyIG5vdGhpbmcgKGl0cyBmaXJzdCByZWZfaXRlcmF0b3JfYWR2YW5jZSgpIGNhbGwKKyAqIHJldHVybnMgSVRFUl9ET05FKS4KKyAqLworc3RydWN0IHJlZl9pdGVyYXRvciAqZW1wdHlfcmVmX2l0ZXJhdG9yX2JlZ2luKHZvaWQpOworCisvKgorICogUmV0dXJuIHRydWUgaWZmIHJlZl9pdGVyYXRvciBpcyBhbiBlbXB0eV9yZWZfaXRlcmF0b3IuCisgKi8KK2ludCBpc19lbXB0eV9yZWZfaXRlcmF0b3Ioc3RydWN0IHJlZl9pdGVyYXRvciAqcmVmX2l0ZXJhdG9yKTsKKworLyoKKyAqIFJldHVybiBhbiBpdGVyYXRvciB0aGF0IGdvZXMgb3ZlciBlYWNoIHJlZmVyZW5jZSBpbiBgcmVmc2AgZm9yCisgKiB3aGljaCB0aGUgcmVmbmFtZSBiZWdpbnMgd2l0aCBwcmVmaXguIElmIHRyaW0gaXMgbm9uLXplcm8sIHRoZW4KKyAqIHRyaW0gdGhhdCBtYW55IGNoYXJhY3RlcnMgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCByZWZuYW1lLiBmbGFncworICogY2FuIGJlIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOIHRvIGluY2x1ZGUgYnJva2VuIHJlZmVyZW5jZXMgaW4KKyAqIHRoZSBpdGVyYXRpb24uIFRoZSBvdXRwdXQgaXMgb3JkZXJlZCBieSByZWZuYW1lLgorICovCitzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZzX3JlZl9pdGVyYXRvcl9iZWdpbigKKwkJc3RydWN0IHJlZl9zdG9yZSAqcmVmcywKKwkJY29uc3QgY2hhciAqcHJlZml4LCBpbnQgdHJpbSwgaW50IGZsYWdzKTsKKworLyoKKyAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBpbnN0cnVjdCBtZXJnZV9yZWZfaXRlcmF0b3IgaG93IHRvCisgKiBpbnRlcmxlYXZlIHRoZSBlbnRyaWVzIGZyb20gaXRlcjAgYW5kIGl0ZXIxLiBUaGUgZnVuY3Rpb24gc2hvdWxkCisgKiByZXR1cm4gb25lIG9mIHRoZSBjb25zdGFudHMgZGVmaW5lZCBpbiBlbnVtIGl0ZXJhdG9yX3NlbGVjdGlvbi4gSXQKKyAqIG11c3Qgbm90IGFkdmFuY2UgZWl0aGVyIG9mIHRoZSBpdGVyYXRvcnMgaXRzZWxmLgorICoKKyAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIHByZXBhcmVkIHRvIGhhbmRsZSB0aGUgY2FzZSB0aGF0IGl0ZXIwIGFuZC9vcgorICogaXRlcjEgaXMgTlVMTCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc3ViLWl0ZXJhdG9yCisgKiBoYXMgYmVlbiBleGhhdXN0ZWQuIEl0cyByZXR1cm4gdmFsdWUgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlCisgKiBjdXJyZW50IHN0YXRlcyBvZiB0aGUgaXRlcmF0b3JzOyBlLmcuLCBpdCBtdXN0IG5vdCByZXR1cm4KKyAqIElURVJfU0tJUF8xIGlmIGl0ZXIxIGhhcyBhbHJlYWR5IGJlZW4gZXhoYXVzdGVkLgorICovCit0eXBlZGVmIGVudW0gaXRlcmF0b3Jfc2VsZWN0aW9uIHJlZl9pdGVyYXRvcl9zZWxlY3RfZm4oCisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIwLCBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMSwKKwkJdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgdGhlIGVudHJpZXMgZnJvbSBpdGVyMCBhbmQgaXRlcjEsIHdpdGggdGhlIHZhbHVlcworICogaW50ZXJsZWF2ZWQgYXMgZGlyZWN0ZWQgYnkgdGhlIHNlbGVjdCBmdW5jdGlvbi4gVGhlIGl0ZXJhdG9yIHRha2VzCisgKiBvd25lcnNoaXAgb2YgaXRlcjAgYW5kIGl0ZXIxIGFuZCBmcmVlcyB0aGVtIHdoZW4gdGhlIGl0ZXJhdGlvbiBpcworICogb3Zlci4gQSBkZXJpdmVkIGNsYXNzIHNob3VsZCBzZXQgYG9yZGVyZWRgIHRvIDEgb3IgMCBiYXNlZCBvbgorICogd2hldGhlciBpdCBnZW5lcmF0ZXMgaXRzIG91dHB1dCBpbiBvcmRlciBieSByZWZlcmVuY2UgbmFtZS4KKyAqLworc3RydWN0IHJlZl9pdGVyYXRvciAqbWVyZ2VfcmVmX2l0ZXJhdG9yX2JlZ2luKAorCQlpbnQgb3JkZXJlZCwKKwkJc3RydWN0IHJlZl9pdGVyYXRvciAqaXRlcjAsIHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIxLAorCQlyZWZfaXRlcmF0b3Jfc2VsZWN0X2ZuICpzZWxlY3QsIHZvaWQgKmNiX2RhdGEpOworCisvKgorICogQW4gaXRlcmF0b3IgY29uc2lzdGluZyBvZiB0aGUgdW5pb24gb2YgdGhlIGVudHJpZXMgZnJvbSBmcm9udCBhbmQKKyAqIGJhY2suIElmIHRoZXJlIGFyZSBlbnRyaWVzIGNvbW1vbiB0byB0aGUgdHdvIHN1Yi1pdGVyYXRvcnMsIHVzZSB0aGUKKyAqIG9uZSBmcm9tIGZyb250LiBFYWNoIGl0ZXJhdG9yIG11c3QgaXRlcmF0ZSBvdmVyIGl0cyBlbnRyaWVzIGluCisgKiBzdHJjbXAoKSBvcmRlciBieSByZWZuYW1lIGZvciB0aGlzIHRvIHdvcmsuCisgKgorICogVGhlIG5ldyBpdGVyYXRvciB0YWtlcyBvd25lcnNoaXAgb2YgaXRzIGFyZ3VtZW50cyBhbmQgZnJlZXMgdGhlbQorICogd2hlbiB0aGUgaXRlcmF0aW9uIGlzIG92ZXIuIEFzIGEgY29udmVuaWVuY2UgdG8gY2FsbGVycywgaWYgZnJvbnQKKyAqIG9yIGJhY2sgaXMgYW4gZW1wdHlfcmVmX2l0ZXJhdG9yLCB0aGVuIGFib3J0IHRoYXQgb25lIGltbWVkaWF0ZWx5CisgKiBhbmQgcmV0dXJuIHRoZSBvdGhlciBpdGVyYXRvciBkaXJlY3RseSwgd2l0aG91dCB3cmFwcGluZyBpdC4KKyAqLworc3RydWN0IHJlZl9pdGVyYXRvciAqb3ZlcmxheV9yZWZfaXRlcmF0b3JfYmVnaW4oCisJCXN0cnVjdCByZWZfaXRlcmF0b3IgKmZyb250LCBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpiYWNrKTsKKworLyoKKyAqIFdyYXAgaXRlcjAsIG9ubHkgbGV0dGluZyB0aHJvdWdoIHRoZSByZWZlcmVuY2VzIHdob3NlIG5hbWVzIHN0YXJ0CisgKiB3aXRoIHByZWZpeC4gSWYgdHJpbSBpcyBzZXQsIHNldCBpdGVyLT5yZWZuYW1lIHRvIHRoZSBuYW1lIG9mIHRoZQorICogcmVmZXJlbmNlIHdpdGggdGhhdCBtYW55IGNoYXJhY3RlcnMgdHJpbW1lZCBvZmYgdGhlIGZyb250OworICogb3RoZXJ3aXNlIHNldCBpdCB0byB0aGUgZnVsbCByZWZuYW1lLiBUaGUgbmV3IGl0ZXJhdG9yIHRha2VzIG92ZXIKKyAqIG93bmVyc2hpcCBvZiBpdGVyMCBhbmQgZnJlZXMgaXQgd2hlbiBpdGVyYXRpb24gaXMgb3Zlci4gSXQgbWFrZXMKKyAqIGl0cyBvd24gY29weSBvZiBwcmVmaXguCisgKgorICogQXMgYW4gY29udmVuaWVuY2UgdG8gY2FsbGVycywgaWYgcHJlZml4IGlzIHRoZSBlbXB0eSBzdHJpbmcgYW5kCisgKiB0cmltIGlzIHplcm8sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBpdGVyMCBkaXJlY3RseSwgd2l0aG91dAorICogd3JhcHBpbmcgaXQuCisgKgorICogVGhlIHJlc3VsdGluZyByZWZfaXRlcmF0b3IgaXMgb3JkZXJlZCBpZiBpdGVyMCBpcy4KKyAqLworc3RydWN0IHJlZl9pdGVyYXRvciAqcHJlZml4X3JlZl9pdGVyYXRvcl9iZWdpbihzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyMCwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJICAgICAgIGludCB0cmltKTsKKworLyogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgcmVmZXJlbmNlIGl0ZXJhdGlvbjogKi8KKworLyoKKyAqIEJhc2UgY2xhc3MgY29uc3RydWN0b3IgZm9yIHJlZl9pdGVyYXRvcnMuIEluaXRpYWxpemUgdGhlCisgKiByZWZfaXRlcmF0b3IgcGFydCBvZiBpdGVyLCBzZXR0aW5nIGl0cyB2dGFibGUgcG9pbnRlciBhcyBzcGVjaWZpZWQuCisgKiBgb3JkZXJlZGAgc2hvdWxkIGJlIHNldCB0byAxIGlmIHRoZSBpdGVyYXRvciB3aWxsIGl0ZXJhdGUgb3ZlcgorICogcmVmZXJlbmNlcyBpbiBvcmRlciBieSByZWZuYW1lOyBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNldCB0byAwLgorICogVGhpcyBpcyBtZWFudCB0byBiZSBjYWxsZWQgb25seSBieSB0aGUgaW5pdGlhbGl6ZXJzIG9mIGRlcml2ZWQKKyAqIGNsYXNzZXMuCisgKi8KK3ZvaWQgYmFzZV9yZWZfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyLAorCQkJICAgIHN0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlICp2dGFibGUsCisJCQkgICAgaW50IG9yZGVyZWQpOworCisvKgorICogQmFzZSBjbGFzcyBkZXN0cnVjdG9yIGZvciByZWZfaXRlcmF0b3JzLiBEZXN0cm95IHRoZSByZWZfaXRlcmF0b3IKKyAqIHBhcnQgb2YgaXRlciBhbmQgc2hhbGxvdy1mcmVlIHRoZSBvYmplY3QuIFRoaXMgaXMgbWVhbnQgdG8gYmUKKyAqIGNhbGxlZCBvbmx5IGJ5IHRoZSBkZXN0cnVjdG9ycyBvZiBkZXJpdmVkIGNsYXNzZXMuCisgKi8KK3ZvaWQgYmFzZV9yZWZfaXRlcmF0b3JfZnJlZShzdHJ1Y3QgcmVmX2l0ZXJhdG9yICppdGVyKTsKKworLyogVmlydHVhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHJlZl9pdGVyYXRvcnM6ICovCisKK3R5cGVkZWYgaW50IHJlZl9pdGVyYXRvcl9hZHZhbmNlX2ZuKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcik7CisKK3R5cGVkZWYgaW50IHJlZl9pdGVyYXRvcl9wZWVsX2ZuKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvciwKKwkJCQkgc3RydWN0IG9iamVjdF9pZCAqcGVlbGVkKTsKKworLyoKKyAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBmcmVlIGFueSByZXNvdXJjZXMgc3BlY2lmaWMKKyAqIHRvIHRoZSBkZXJpdmVkIGNsYXNzLCB0aGVuIGNhbGwgYmFzZV9yZWZfaXRlcmF0b3JfZnJlZSgpIHRvIGNsZWFuCisgKiB1cCBhbmQgZnJlZSB0aGUgcmVmX2l0ZXJhdG9yIG9iamVjdC4KKyAqLwordHlwZWRlZiBpbnQgcmVmX2l0ZXJhdG9yX2Fib3J0X2ZuKHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZl9pdGVyYXRvcik7CisKK3N0cnVjdCByZWZfaXRlcmF0b3JfdnRhYmxlIHsKKwlyZWZfaXRlcmF0b3JfYWR2YW5jZV9mbiAqYWR2YW5jZTsKKwlyZWZfaXRlcmF0b3JfcGVlbF9mbiAqcGVlbDsKKwlyZWZfaXRlcmF0b3JfYWJvcnRfZm4gKmFib3J0OworfTsKKworLyoKKyAqIGN1cnJlbnRfcmVmX2l0ZXIgaXMgYSBwZXJmb3JtYW5jZSBoYWNrOiB3aGVuIGl0ZXJhdGluZyBvdmVyCisgKiByZWZlcmVuY2VzIHVzaW5nIHRoZSBmb3JfZWFjaF9yZWYqKCkgZnVuY3Rpb25zLCBjdXJyZW50X3JlZl9pdGVyIGlzCisgKiBzZXQgdG8gdGhlIHJlZmVyZW5jZSBpdGVyYXRvciBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBJZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbHMgcGVlbF9yZWYoKSwgdGhlbiBwZWVsX3JlZigpIGZpcnN0CisgKiBjaGVja3Mgd2hldGhlciB0aGUgcmVmZXJlbmNlIHRvIGJlIHBlZWxlZCBpcyB0aGUgb25lIHJlZmVycmVkIHRvIGJ5CisgKiB0aGUgaXRlcmF0b3IgKGl0IHVzdWFsbHkgaXMpIGFuZCBpZiBzbywgYXNrcyB0aGUgaXRlcmF0b3IgZm9yIHRoZQorICogcGVlbGVkIHZlcnNpb24gb2YgdGhlIHJlZmVyZW5jZSBpZiBpdCBpcyBhdmFpbGFibGUuIFRoaXMgYXZvaWRzIGEKKyAqIHJlZm5hbWUgbG9va3VwIGluIGEgY29tbW9uIGNhc2UuIGN1cnJlbnRfcmVmX2l0ZXIgaXMgc2V0IHRvIE5VTEwKKyAqIHdoZW4gdGhlIGl0ZXJhdGlvbiBpcyBvdmVyLgorICovCitleHRlcm4gc3RydWN0IHJlZl9pdGVyYXRvciAqY3VycmVudF9yZWZfaXRlcjsKKworLyoKKyAqIFRoZSBjb21tb24gYmFja2VuZCBmb3IgdGhlIGZvcl9lYWNoXypyZWYqIGZ1bmN0aW9ucy4gQ2FsbCBmbiBmb3IKKyAqIGVhY2ggcmVmZXJlbmNlIGluIGl0ZXIuIElmIHRoZSBpdGVyYXRvciBpdHNlbGYgZXZlciByZXR1cm5zCisgKiBJVEVSX0VSUk9SLCByZXR1cm4gLTEuIElmIGZuIGV2ZXIgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCBzdG9wCisgKiB0aGUgaXRlcmF0aW9uIGFuZCByZXR1cm4gdGhhdCB2YWx1ZS4gT3RoZXJ3aXNlLCByZXR1cm4gMC4gSW4gYW55CisgKiBjYXNlLCBmcmVlIHRoZSBpdGVyYXRvciB3aGVuIGRvbmUuIFRoaXMgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGFuCisgKiBhZGFwdGVyIGJldHdlZW4gdGhlIGNhbGxiYWNrIHN0eWxlIG9mIHJlZmVyZW5jZSBpdGVyYXRpb24gYW5kIHRoZQorICogaXRlcmF0b3Igc3R5bGUuCisgKi8KK2ludCBkb19mb3JfZWFjaF9yZXBvX3JlZl9pdGVyYXRvcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIHN0cnVjdCByZWZfaXRlcmF0b3IgKml0ZXIsCisJCQkJICBlYWNoX3JlcG9fcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIE9ubHkgaW5jbHVkZSBwZXItd29ya3RyZWUgcmVmcyBpbiBhIGRvX2Zvcl9lYWNoX3JlZiooKSBpdGVyYXRpb24uCisgKiBOb3JtYWxseSB0aGlzIHdpbGwgYmUgdXNlZCB3aXRoIGEgZmlsZXMgcmVmX3N0b3JlLCBzaW5jZSB0aGF0J3MKKyAqIHdoZXJlIGFsbCByZWZlcmVuY2UgYmFja2VuZHMgd2lsbCBwcmVzdW1hYmx5IHN0b3JlIHRoZWlyCisgKiBwZXItd29ya3RyZWUgcmVmcy4KKyAqLworI2RlZmluZSBET19GT1JfRUFDSF9QRVJfV09SS1RSRUVfT05MWSAweDAyCisKK3N0cnVjdCByZWZfc3RvcmU7CisKKy8qIHJlZnMgYmFja2VuZHMgKi8KKworLyogcmVmX3N0b3JlX2luaXQgZmxhZ3MgKi8KKyNkZWZpbmUgUkVGX1NUT1JFX1JFQUQJCSgxIDw8IDApCisjZGVmaW5lIFJFRl9TVE9SRV9XUklURQkJKDEgPDwgMSkgLyogY2FuIHBlcmZvcm0gdXBkYXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgUkVGX1NUT1JFX09EQgkJKDEgPDwgMikgLyogaGFzIGFjY2VzcyB0byBvYmplY3QgZGF0YWJhc2UgKi8KKyNkZWZpbmUgUkVGX1NUT1JFX01BSU4JCSgxIDw8IDMpCisjZGVmaW5lIFJFRl9TVE9SRV9BTExfQ0FQUwkoUkVGX1NUT1JFX1JFQUQgfCBcCisJCQkJIFJFRl9TVE9SRV9XUklURSB8IFwKKwkJCQkgUkVGX1NUT1JFX09EQiB8IFwKKwkJCQkgUkVGX1NUT1JFX01BSU4pCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSByZWZfc3RvcmUgZm9yIHRoZSBzcGVjaWZpZWQgZ2l0ZGlyLiBUaGVzZSBmdW5jdGlvbnMKKyAqIHNob3VsZCBjYWxsIGJhc2VfcmVmX3N0b3JlX2luaXQoKSB0byBpbml0aWFsaXplIHRoZSBzaGFyZWQgcGFydCBvZgorICogdGhlIHJlZl9zdG9yZSBhbmQgdG8gcmVjb3JkIHRoZSByZWZfc3RvcmUgZm9yIGxhdGVyIGxvb2t1cC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmVfaW5pdF9mbihjb25zdCBjaGFyICpnaXRkaXIsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCit0eXBlZGVmIGludCByZWZfaW5pdF9kYl9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCit0eXBlZGVmIGludCByZWZfdHJhbnNhY3Rpb25fcHJlcGFyZV9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICAgICBzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKwordHlwZWRlZiBpbnQgcmVmX3RyYW5zYWN0aW9uX2ZpbmlzaF9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICAgIHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmVycik7CisKK3R5cGVkZWYgaW50IHJlZl90cmFuc2FjdGlvbl9hYm9ydF9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJCSAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCit0eXBlZGVmIGludCByZWZfdHJhbnNhY3Rpb25fY29tbWl0X2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCisJCQkJICAgICAgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKwordHlwZWRlZiBpbnQgcGFja19yZWZzX2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKK3R5cGVkZWYgaW50IGNyZWF0ZV9zeW1yZWZfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICAgICBjb25zdCBjaGFyICpyZWZfdGFyZ2V0LAorCQkJICAgICBjb25zdCBjaGFyICpyZWZzX2hlYWRzX21hc3RlciwKKwkJCSAgICAgY29uc3QgY2hhciAqbG9nbXNnKTsKK3R5cGVkZWYgaW50IGRlbGV0ZV9yZWZzX2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwgY29uc3QgY2hhciAqbXNnLAorCQkJICAgc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcywgdW5zaWduZWQgaW50IGZsYWdzKTsKK3R5cGVkZWYgaW50IHJlbmFtZV9yZWZfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJICBjb25zdCBjaGFyICpvbGRyZWYsIGNvbnN0IGNoYXIgKm5ld3JlZiwKKwkJCSAgY29uc3QgY2hhciAqbG9nbXNnKTsKK3R5cGVkZWYgaW50IGNvcHlfcmVmX2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgY29uc3QgY2hhciAqb2xkcmVmLCBjb25zdCBjaGFyICpuZXdyZWYsCisJCQkgIGNvbnN0IGNoYXIgKmxvZ21zZyk7CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgdGhlIHJlZmVyZW5jZXMgaW4gYHJlZl9zdG9yZWAgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aAorICogYHByZWZpeGAuIGBwcmVmaXhgIGlzIG1hdGNoZWQgYXMgYSBsaXRlcmFsIHN0cmluZywgd2l0aG91dCByZWdhcmQKKyAqIGZvciBwYXRoIHNlcGFyYXRvcnMuIElmIHByZWZpeCBpcyBOVUxMIG9yIHRoZSBlbXB0eSBzdHJpbmcsIGl0ZXJhdGUKKyAqIG92ZXIgYWxsIHJlZmVyZW5jZXMgaW4gYHJlZl9zdG9yZWAuIFRoZSBvdXRwdXQgaXMgb3JkZXJlZCBieQorICogcmVmbmFtZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcmVmX2l0ZXJhdG9yICpyZWZfaXRlcmF0b3JfYmVnaW5fZm4oCisJCXN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJY29uc3QgY2hhciAqcHJlZml4LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisvKiByZWZsb2cgZnVuY3Rpb25zICovCisKKy8qCisgKiBJdGVyYXRlIG92ZXIgdGhlIHJlZmVyZW5jZXMgaW4gdGhlIHNwZWNpZmllZCByZWZfc3RvcmUgdGhhdCBoYXZlIGEKKyAqIHJlZmxvZy4gVGhlIHJlZnMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gYXJiaXRyYXJ5IG9yZGVyLgorICovCit0eXBlZGVmIHN0cnVjdCByZWZfaXRlcmF0b3IgKnJlZmxvZ19pdGVyYXRvcl9iZWdpbl9mbigKKwkJc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlKTsKKwordHlwZWRlZiBpbnQgZm9yX2VhY2hfcmVmbG9nX2VudF9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sCisJCQkJICAgdm9pZCAqY2JfZGF0YSk7Cit0eXBlZGVmIGludCBmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2VfZm4oc3RydWN0IHJlZl9zdG9yZSAqcmVmX3N0b3JlLAorCQkJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgICBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sCisJCQkJCSAgIHZvaWQgKmNiX2RhdGEpOwordHlwZWRlZiBpbnQgcmVmbG9nX2V4aXN0c19mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIGNvbnN0IGNoYXIgKnJlZm5hbWUpOwordHlwZWRlZiBpbnQgY3JlYXRlX3JlZmxvZ19mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgIGludCBmb3JjZV9jcmVhdGUsIHN0cnVjdCBzdHJidWYgKmVycik7Cit0eXBlZGVmIGludCBkZWxldGVfcmVmbG9nX2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwgY29uc3QgY2hhciAqcmVmbmFtZSk7Cit0eXBlZGVmIGludCByZWZsb2dfZXhwaXJlX2ZuKHN0cnVjdCByZWZfc3RvcmUgKnJlZl9zdG9yZSwKKwkJCSAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICAgIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiBwcmVwYXJlX2ZuLAorCQkJICAgICByZWZsb2dfZXhwaXJ5X3Nob3VsZF9wcnVuZV9mbiBzaG91bGRfcHJ1bmVfZm4sCisJCQkgICAgIHJlZmxvZ19leHBpcnlfY2xlYW51cF9mbiBjbGVhbnVwX2ZuLAorCQkJICAgICB2b2lkICpwb2xpY3lfY2JfZGF0YSk7CisKKy8qCisgKiBSZWFkIGEgcmVmZXJlbmNlIGZyb20gdGhlIHNwZWNpZmllZCByZWZlcmVuY2Ugc3RvcmUsIG5vbi1yZWN1cnNpdmVseS4KKyAqIFNldCB0eXBlIHRvIGRlc2NyaWJlIHRoZSByZWZlcmVuY2UsIGFuZDoKKyAqCisgKiAtIElmIHJlZm5hbWUgaXMgdGhlIG5hbWUgb2YgYSBub3JtYWwgcmVmZXJlbmNlLCBmaWxsIGluIG9pZAorICogICAobGVhdmluZyByZWZlcmVudCB1bmNoYW5nZWQpLgorICoKKyAqIC0gSWYgcmVmbmFtZSBpcyB0aGUgbmFtZSBvZiBhIHN5bWJvbGljIHJlZmVyZW5jZSwgd3JpdGUgdGhlIGZ1bGwKKyAqICAgbmFtZSBvZiB0aGUgcmVmZXJlbmNlIHRvIHdoaWNoIGl0IHJlZmVycyAoZS5nLgorICogICAicmVmcy9oZWFkcy9tYXN0ZXIiKSB0byByZWZlcmVudCBhbmQgc2V0IHRoZSBSRUZfSVNTWU1SRUYgYml0IGluCisgKiAgIHR5cGUgKGxlYXZpbmcgb2lkIHVuY2hhbmdlZCkuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgKiAgIHZhbGlkYXRpbmcgdGhhdCByZWZlcmVudCBpcyBhIHZhbGlkIHJlZmVyZW5jZSBuYW1lLgorICoKKyAqIFdBUk5JTkc6IHJlZm5hbWUgbWlnaHQgYmUgdXNlZCBhcyBwYXJ0IG9mIGEgZmlsZW5hbWUsIHNvIGl0IGlzCisgKiBpbXBvcnRhbnQgZnJvbSBhIHNlY3VyaXR5IHN0YW5kcG9pbnQgdGhhdCBpdCBiZSBzYWZlIGluIHRoZSBzZW5zZQorICogb2YgcmVmbmFtZV9pc19zYWZlKCkuIE1vcmVvdmVyLCBmb3Igc3ltcmVmcyB0aGlzIGZ1bmN0aW9uIHNldHMKKyAqIHJlZmVyZW50IHRvIHdoYXRldmVyIHRoZSByZXBvc2l0b3J5IHNheXMsIHdoaWNoIG1pZ2h0IG5vdCBiZSBhCisgKiBwcm9wZXJseS1mb3JtYXR0ZWQgb3IgZXZlbiBzYWZlIHJlZmVyZW5jZSBuYW1lLiBORUlUSEVSIElOUFVUIE5PUgorICogT1VUUFVUIFJFRkVSRU5DRSBOQU1FUyBBUkUgVkFMSURBVEVEIFdJVEhJTiBUSElTIEZVTkNUSU9OLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MuIElmIHRoZSByZWYgZG9lc24ndCBleGlzdCwgc2V0IGVycm5vIHRvIEVOT0VOVAorICogYW5kIHJldHVybiAtMS4gSWYgdGhlIHJlZiBleGlzdHMgYnV0IGlzIG5laXRoZXIgYSBzeW1ib2xpYyByZWYgbm9yCisgKiBhbiBvYmplY3QgSUQsIGl0IGlzIGJyb2tlbjsgc2V0IFJFRl9JU0JST0tFTiBpbiB0eXBlLCBzZXQgZXJybm8gdG8KKyAqIEVJTlZBTCwgYW5kIHJldHVybiAtMS4gSWYgdGhlcmUgaXMgYW5vdGhlciBlcnJvciByZWFkaW5nIHRoZSByZWYsCisgKiBzZXQgZXJybm8gYXBwcm9wcmlhdGVseSBhbmQgcmV0dXJuIC0xLgorICoKKyAqIEJhY2tlbmQtc3BlY2lmaWMgZmxhZ3MgbWlnaHQgYmUgc2V0IGluIHR5cGUgYXMgd2VsbCwgcmVnYXJkbGVzcyBvZgorICogb3V0Y29tZS4KKyAqCisgKiBJdCBpcyBPSyBmb3IgcmVmbmFtZSB0byBwb2ludCBpbnRvIHJlZmVyZW50LiBJZiBzbzoKKyAqCisgKiAtIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyB3aXRoIFJFRl9JU1NZTVJFRiwgcmVmZXJlbnQgd2lsbCBiZQorICogICBvdmVyd3JpdHRlbiBhbmQgdGhlIG1lbW9yeSBmb3JtZXJseSBwb2ludGVkIHRvIGJ5IGl0IG1pZ2h0IGJlCisgKiAgIGNoYW5nZWQgb3IgZXZlbiBmcmVlZC4KKyAqCisgKiAtIGluIGFsbCBvdGhlciBjYXNlcywgcmVmZXJlbnQgd2lsbCBiZSB1bnRvdWNoZWQsIGFuZCB0aGVyZWZvcmUKKyAqICAgcmVmbmFtZSB3aWxsIHN0aWxsIGJlIHZhbGlkIGFuZCB1bmNoYW5nZWQuCisgKi8KK3R5cGVkZWYgaW50IHJlYWRfcmF3X3JlZl9mbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZfc3RvcmUsCisJCQkgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKnJlZmVyZW50LCB1bnNpZ25lZCBpbnQgKnR5cGUpOworCitzdHJ1Y3QgcmVmX3N0b3JhZ2VfYmUgeworCXN0cnVjdCByZWZfc3RvcmFnZV9iZSAqbmV4dDsKKwljb25zdCBjaGFyICpuYW1lOworCXJlZl9zdG9yZV9pbml0X2ZuICppbml0OworCXJlZl9pbml0X2RiX2ZuICppbml0X2RiOworCisJcmVmX3RyYW5zYWN0aW9uX3ByZXBhcmVfZm4gKnRyYW5zYWN0aW9uX3ByZXBhcmU7CisJcmVmX3RyYW5zYWN0aW9uX2ZpbmlzaF9mbiAqdHJhbnNhY3Rpb25fZmluaXNoOworCXJlZl90cmFuc2FjdGlvbl9hYm9ydF9mbiAqdHJhbnNhY3Rpb25fYWJvcnQ7CisJcmVmX3RyYW5zYWN0aW9uX2NvbW1pdF9mbiAqaW5pdGlhbF90cmFuc2FjdGlvbl9jb21taXQ7CisKKwlwYWNrX3JlZnNfZm4gKnBhY2tfcmVmczsKKwljcmVhdGVfc3ltcmVmX2ZuICpjcmVhdGVfc3ltcmVmOworCWRlbGV0ZV9yZWZzX2ZuICpkZWxldGVfcmVmczsKKwlyZW5hbWVfcmVmX2ZuICpyZW5hbWVfcmVmOworCWNvcHlfcmVmX2ZuICpjb3B5X3JlZjsKKworCXJlZl9pdGVyYXRvcl9iZWdpbl9mbiAqaXRlcmF0b3JfYmVnaW47CisJcmVhZF9yYXdfcmVmX2ZuICpyZWFkX3Jhd19yZWY7CisKKwlyZWZsb2dfaXRlcmF0b3JfYmVnaW5fZm4gKnJlZmxvZ19pdGVyYXRvcl9iZWdpbjsKKwlmb3JfZWFjaF9yZWZsb2dfZW50X2ZuICpmb3JfZWFjaF9yZWZsb2dfZW50OworCWZvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZV9mbiAqZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlOworCXJlZmxvZ19leGlzdHNfZm4gKnJlZmxvZ19leGlzdHM7CisJY3JlYXRlX3JlZmxvZ19mbiAqY3JlYXRlX3JlZmxvZzsKKwlkZWxldGVfcmVmbG9nX2ZuICpkZWxldGVfcmVmbG9nOworCXJlZmxvZ19leHBpcmVfZm4gKnJlZmxvZ19leHBpcmU7Cit9OworCitleHRlcm4gc3RydWN0IHJlZl9zdG9yYWdlX2JlIHJlZnNfYmVfZmlsZXM7CitleHRlcm4gc3RydWN0IHJlZl9zdG9yYWdlX2JlIHJlZnNfYmVfcGFja2VkOworCisvKgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVmZXJlbmNlIHN0b3JlIGZvciB0aGUgbWFpbiByZXBvc2l0b3J5IG9yCisgKiBhIHN1Ym1vZHVsZS4gVGhlIHJlZl9zdG9yZSBpbnN0YW5jZXMgZm9yIHN1Ym1vZHVsZXMgYXJlIGtlcHQgaW4gYQorICogbGlua2VkIGxpc3QuCisgKi8KK3N0cnVjdCByZWZfc3RvcmUgeworCS8qIFRoZSBiYWNrZW5kIGRlc2NyaWJpbmcgdGhpcyByZWZfc3RvcmUncyBzdG9yYWdlIHNjaGVtZTogKi8KKwljb25zdCBzdHJ1Y3QgcmVmX3N0b3JhZ2VfYmUgKmJlOworfTsKKworLyoKKyAqIEZpbGwgaW4gdGhlIGdlbmVyaWMgcGFydCBvZiByZWZzIGFuZCBhZGQgaXQgdG8gb3VyIGNvbGxlY3Rpb24gb2YKKyAqIHJlZmVyZW5jZSBzdG9yZXMuCisgKi8KK3ZvaWQgYmFzZV9yZWZfc3RvcmVfaW5pdChzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJIGNvbnN0IHN0cnVjdCByZWZfc3RvcmFnZV9iZSAqYmUpOworCisjZW5kaWYgLyogUkVGU19SRUZTX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL3JlZnNwZWMuYyBiL3JlZnNwZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTliZjIxCi0tLSAvZGV2L251bGwKKysrIGIvcmVmc3BlYy5jCkBAIC0wLDAgKzEsMjMyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKworc3RhdGljIHN0cnVjdCByZWZzcGVjX2l0ZW0gc190YWdfcmVmc3BlYyA9IHsKKwkwLAorCTEsCisJMCwKKwkwLAorCSJyZWZzL3RhZ3MvKiIsCisJInJlZnMvdGFncy8qIgorfTsKKworLyogU2VlIFRBR19SRUZTUEVDIGZvciB0aGUgc3RyaW5nIHZlcnNpb24gKi8KK2NvbnN0IHN0cnVjdCByZWZzcGVjX2l0ZW0gKnRhZ19yZWZzcGVjID0gJnNfdGFnX3JlZnNwZWM7CisKKy8qCisgKiBQYXJzZXMgdGhlIHByb3ZpZGVkIHJlZnNwZWMgJ3JlZnNwZWMnIGFuZCBwb3B1bGF0ZXMgdGhlIHJlZnNwZWNfaXRlbSAnaXRlbScuCisgKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBhbmQgMCBpZiB0aGUgcmVmc3BlYyBpcyBpbnZhbGlkLgorICovCitzdGF0aWMgaW50IHBhcnNlX3JlZnNwZWMoc3RydWN0IHJlZnNwZWNfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqcmVmc3BlYywgaW50IGZldGNoKQoreworCXNpemVfdCBsbGVuOworCWludCBpc19nbG9iOworCWNvbnN0IGNoYXIgKmxocywgKnJoczsKKwlpbnQgZmxhZ3M7CisKKwlpc19nbG9iID0gMDsKKworCWxocyA9IHJlZnNwZWM7CisJaWYgKCpsaHMgPT0gJysnKSB7CisJCWl0ZW0tPmZvcmNlID0gMTsKKwkJbGhzKys7CisJfQorCisJcmhzID0gc3RycmNocihsaHMsICc6Jyk7CisKKwkvKgorCSAqIEJlZm9yZSBnb2luZyBvbiwgc3BlY2lhbCBjYXNlICI6IiAob3IgIis6IikgYXMgYSByZWZzcGVjCisJICogZm9yIHB1c2hpbmcgbWF0Y2hpbmcgcmVmcy4KKwkgKi8KKwlpZiAoIWZldGNoICYmIHJocyA9PSBsaHMgJiYgcmhzWzFdID09ICdcMCcpIHsKKwkJaXRlbS0+bWF0Y2hpbmcgPSAxOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAocmhzKSB7CisJCXNpemVfdCBybGVuID0gc3RybGVuKCsrcmhzKTsKKwkJaXNfZ2xvYiA9ICgxIDw9IHJsZW4gJiYgc3RyY2hyKHJocywgJyonKSk7CisJCWl0ZW0tPmRzdCA9IHhzdHJuZHVwKHJocywgcmxlbik7CisJfSBlbHNlIHsKKwkJaXRlbS0+ZHN0ID0gTlVMTDsKKwl9CisKKwlsbGVuID0gKHJocyA/IChyaHMgLSBsaHMgLSAxKSA6IHN0cmxlbihsaHMpKTsKKwlpZiAoMSA8PSBsbGVuICYmIG1lbWNocihsaHMsICcqJywgbGxlbikpIHsKKwkJaWYgKChyaHMgJiYgIWlzX2dsb2IpIHx8ICghcmhzICYmIGZldGNoKSkKKwkJCXJldHVybiAwOworCQlpc19nbG9iID0gMTsKKwl9IGVsc2UgaWYgKHJocyAmJiBpc19nbG9iKSB7CisJCXJldHVybiAwOworCX0KKworCWl0ZW0tPnBhdHRlcm4gPSBpc19nbG9iOworCWl0ZW0tPnNyYyA9IHhzdHJuZHVwKGxocywgbGxlbik7CisJZmxhZ3MgPSBSRUZOQU1FX0FMTE9XX09ORUxFVkVMIHwgKGlzX2dsb2IgPyBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTiA6IDApOworCisJaWYgKGZldGNoKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgdW51c2VkOworCisJCS8qIExIUyAqLworCQlpZiAoISppdGVtLT5zcmMpCisJCQk7IC8qIGVtcHR5IGlzIG9rOyBpdCBtZWFucyAiSEVBRCIgKi8KKwkJZWxzZSBpZiAobGxlbiA9PSB0aGVfaGFzaF9hbGdvLT5oZXhzeiAmJiAhZ2V0X29pZF9oZXgoaXRlbS0+c3JjLCAmdW51c2VkKSkKKwkJCWl0ZW0tPmV4YWN0X3NoYTEgPSAxOyAvKiBvayAqLworCQllbHNlIGlmICghY2hlY2tfcmVmbmFtZV9mb3JtYXQoaXRlbS0+c3JjLCBmbGFncykpCisJCQk7IC8qIHZhbGlkIGxvb2tpbmcgcmVmIGlzIG9rICovCisJCWVsc2UKKwkJCXJldHVybiAwOworCQkvKiBSSFMgKi8KKwkJaWYgKCFpdGVtLT5kc3QpCisJCQk7IC8qIG1pc3NpbmcgaXMgb2s7IGl0IGlzIHRoZSBzYW1lIGFzIGVtcHR5ICovCisJCWVsc2UgaWYgKCEqaXRlbS0+ZHN0KQorCQkJOyAvKiBlbXB0eSBpcyBvazsgaXQgbWVhbnMgImRvIG5vdCBzdG9yZSIgKi8KKwkJZWxzZSBpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KGl0ZW0tPmRzdCwgZmxhZ3MpKQorCQkJOyAvKiB2YWxpZCBsb29raW5nIHJlZiBpcyBvayAqLworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBMSFMKKwkJICogLSBlbXB0eSBpcyBhbGxvd2VkOyBpdCBtZWFucyBkZWxldGUuCisJCSAqIC0gd2hlbiB3aWxkY2FyZGVkLCBpdCBtdXN0IGJlIGEgdmFsaWQgbG9va2luZyByZWYuCisJCSAqIC0gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGFuIGV4dGVuZGVkIFNIQS0xLCBidXQKKwkJICogICB0aGVyZSBpcyBubyBleGlzdGluZyB3YXkgdG8gdmFsaWRhdGUgdGhpcy4KKwkJICovCisJCWlmICghKml0ZW0tPnNyYykKKwkJCTsgLyogZW1wdHkgaXMgb2sgKi8KKwkJZWxzZSBpZiAoaXNfZ2xvYikgeworCQkJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KGl0ZW0tPnNyYywgZmxhZ3MpKQorCQkJCXJldHVybiAwOworCQl9CisJCWVsc2UKKwkJCTsgLyogYW55dGhpbmcgZ29lcywgZm9yIG5vdyAqLworCQkvKgorCQkgKiBSSFMKKwkJICogLSBtaXNzaW5nIGlzIGFsbG93ZWQsIGJ1dCBMSFMgdGhlbiBtdXN0IGJlIGEKKwkJICogICB2YWxpZCBsb29raW5nIHJlZi4KKwkJICogLSBlbXB0eSBpcyBub3QgYWxsb3dlZC4KKwkJICogLSBvdGhlcndpc2UgaXQgbXVzdCBiZSBhIHZhbGlkIGxvb2tpbmcgcmVmLgorCQkgKi8KKwkJaWYgKCFpdGVtLT5kc3QpIHsKKwkJCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChpdGVtLT5zcmMsIGZsYWdzKSkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmICghKml0ZW0tPmRzdCkgeworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoaXRlbS0+ZHN0LCBmbGFncykpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworaW50IHJlZnNwZWNfaXRlbV9pbml0KHN0cnVjdCByZWZzcGVjX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKnJlZnNwZWMsIGludCBmZXRjaCkKK3sKKwltZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKCppdGVtKSk7CisJcmV0dXJuIHBhcnNlX3JlZnNwZWMoaXRlbSwgcmVmc3BlYywgZmV0Y2gpOworfQorCit2b2lkIHJlZnNwZWNfaXRlbV9pbml0X29yX2RpZShzdHJ1Y3QgcmVmc3BlY19pdGVtICppdGVtLCBjb25zdCBjaGFyICpyZWZzcGVjLAorCQkJICAgICAgaW50IGZldGNoKQoreworCWlmICghcmVmc3BlY19pdGVtX2luaXQoaXRlbSwgcmVmc3BlYywgZmV0Y2gpKQorCQlkaWUoXygiaW52YWxpZCByZWZzcGVjICclcyciKSwgcmVmc3BlYyk7Cit9CisKK3ZvaWQgcmVmc3BlY19pdGVtX2NsZWFyKHN0cnVjdCByZWZzcGVjX2l0ZW0gKml0ZW0pCit7CisJRlJFRV9BTkRfTlVMTChpdGVtLT5zcmMpOworCUZSRUVfQU5EX05VTEwoaXRlbS0+ZHN0KTsKKwlpdGVtLT5mb3JjZSA9IDA7CisJaXRlbS0+cGF0dGVybiA9IDA7CisJaXRlbS0+bWF0Y2hpbmcgPSAwOworCWl0ZW0tPmV4YWN0X3NoYTEgPSAwOworfQorCit2b2lkIHJlZnNwZWNfaW5pdChzdHJ1Y3QgcmVmc3BlYyAqcnMsIGludCBmZXRjaCkKK3sKKwltZW1zZXQocnMsIDAsIHNpemVvZigqcnMpKTsKKwlycy0+ZmV0Y2ggPSBmZXRjaDsKK30KKwordm9pZCByZWZzcGVjX2FwcGVuZChzdHJ1Y3QgcmVmc3BlYyAqcnMsIGNvbnN0IGNoYXIgKnJlZnNwZWMpCit7CisJc3RydWN0IHJlZnNwZWNfaXRlbSBpdGVtOworCisJcmVmc3BlY19pdGVtX2luaXRfb3JfZGllKCZpdGVtLCByZWZzcGVjLCBycy0+ZmV0Y2gpOworCisJQUxMT0NfR1JPVyhycy0+aXRlbXMsIHJzLT5uciArIDEsIHJzLT5hbGxvYyk7CisJcnMtPml0ZW1zW3JzLT5ucisrXSA9IGl0ZW07CisKKwlBTExPQ19HUk9XKHJzLT5yYXcsIHJzLT5yYXdfbnIgKyAxLCBycy0+cmF3X2FsbG9jKTsKKwlycy0+cmF3W3JzLT5yYXdfbnIrK10gPSB4c3RyZHVwKHJlZnNwZWMpOworfQorCit2b2lkIHJlZnNwZWNfYXBwZW5kbihzdHJ1Y3QgcmVmc3BlYyAqcnMsIGNvbnN0IGNoYXIgKipyZWZzcGVjcywgaW50IG5yKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQlyZWZzcGVjX2FwcGVuZChycywgcmVmc3BlY3NbaV0pOworfQorCit2b2lkIHJlZnNwZWNfY2xlYXIoc3RydWN0IHJlZnNwZWMgKnJzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJzLT5ucjsgaSsrKQorCQlyZWZzcGVjX2l0ZW1fY2xlYXIoJnJzLT5pdGVtc1tpXSk7CisKKwlGUkVFX0FORF9OVUxMKHJzLT5pdGVtcyk7CisJcnMtPmFsbG9jID0gMDsKKwlycy0+bnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHJzLT5yYXdfbnI7IGkrKykKKwkJZnJlZSgoY2hhciAqKXJzLT5yYXdbaV0pOworCUZSRUVfQU5EX05VTEwocnMtPnJhdyk7CisJcnMtPnJhd19hbGxvYyA9IDA7CisJcnMtPnJhd19uciA9IDA7CisKKwlycy0+ZmV0Y2ggPSAwOworfQorCitpbnQgdmFsaWRfZmV0Y2hfcmVmc3BlYyhjb25zdCBjaGFyICpmZXRjaF9yZWZzcGVjX3N0cikKK3sKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHJlZnNwZWM7CisJaW50IHJldCA9IHJlZnNwZWNfaXRlbV9pbml0KCZyZWZzcGVjLCBmZXRjaF9yZWZzcGVjX3N0ciwgUkVGU1BFQ19GRVRDSCk7CisJcmVmc3BlY19pdGVtX2NsZWFyKCZyZWZzcGVjKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJlZnNwZWNfcmVmX3ByZWZpeGVzKGNvbnN0IHN0cnVjdCByZWZzcGVjICpycywKKwkJCSAgc3RydWN0IGFyZ3ZfYXJyYXkgKnJlZl9wcmVmaXhlcykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHJlZnNwZWNfaXRlbSAqaXRlbSA9ICZycy0+aXRlbXNbaV07CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisKKwkJaWYgKGl0ZW0tPmV4YWN0X3NoYTEpCisJCQljb250aW51ZTsKKwkJaWYgKHJzLT5mZXRjaCA9PSBSRUZTUEVDX0ZFVENIKQorCQkJcHJlZml4ID0gaXRlbS0+c3JjOworCQllbHNlIGlmIChpdGVtLT5kc3QpCisJCQlwcmVmaXggPSBpdGVtLT5kc3Q7CisJCWVsc2UgaWYgKGl0ZW0tPnNyYyAmJiAhaXRlbS0+ZXhhY3Rfc2hhMSkKKwkJCXByZWZpeCA9IGl0ZW0tPnNyYzsKKworCQlpZiAocHJlZml4KSB7CisJCQlpZiAoaXRlbS0+cGF0dGVybikgeworCQkJCWNvbnN0IGNoYXIgKmdsb2IgPSBzdHJjaHIocHJlZml4LCAnKicpOworCQkJCWFyZ3ZfYXJyYXlfcHVzaGYocmVmX3ByZWZpeGVzLCAiJS4qcyIsCisJCQkJCQkgKGludCkoZ2xvYiAtIHByZWZpeCksCisJCQkJCQkgcHJlZml4KTsKKwkJCX0gZWxzZSB7CisJCQkJZXhwYW5kX3JlZl9wcmVmaXgocmVmX3ByZWZpeGVzLCBwcmVmaXgpOworCQkJfQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvcmVmc3BlYy5oIGIvcmVmc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMmJkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzcGVjLmgKQEAgLTAsMCArMSw3MSBAQAorI2lmbmRlZiBSRUZTUEVDX0gKKyNkZWZpbmUgUkVGU1BFQ19ICisKKyNkZWZpbmUgVEFHX1JFRlNQRUMgInJlZnMvdGFncy8qOnJlZnMvdGFncy8qIgorZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWZzcGVjX2l0ZW0gKnRhZ19yZWZzcGVjOworCitzdHJ1Y3QgcmVmc3BlY19pdGVtIHsKKwl1bnNpZ25lZCBmb3JjZSA6IDE7CisJdW5zaWduZWQgcGF0dGVybiA6IDE7CisJdW5zaWduZWQgbWF0Y2hpbmcgOiAxOworCXVuc2lnbmVkIGV4YWN0X3NoYTEgOiAxOworCisJY2hhciAqc3JjOworCWNoYXIgKmRzdDsKK307CisKKyNkZWZpbmUgUkVGU1BFQ19GRVRDSCAxCisjZGVmaW5lIFJFRlNQRUNfUFVTSCAwCisKKyNkZWZpbmUgUkVGU1BFQ19JTklUX0ZFVENIIHsgLmZldGNoID0gUkVGU1BFQ19GRVRDSCB9CisjZGVmaW5lIFJFRlNQRUNfSU5JVF9QVVNIIHsgLmZldGNoID0gUkVGU1BFQ19QVVNIIH0KKworLyoqCisgKiBBIHN0cnVjdCByZWZzcGVjIGhvbGRzIHRoZSBwYXJzZWQgaW50ZXJwcmV0YXRpb24gb2YgYSByZWZzcGVjLiAgSWYgaXQgd2lsbAorICogZm9yY2UgdXBkYXRlcyAoc3RhcnRzIHdpdGggYSAnKycpLCBmb3JjZSBpcyB0cnVlLiAgSWYgaXQgaXMgYSBwYXR0ZXJuCisgKiAoc2lkZXMgZW5kIHdpdGggJyonKSBwYXR0ZXJuIGlzIHRydWUuICBzcmMgYW5kIGRlc3QgYXJlIHRoZSB0d28gc2lkZXMKKyAqIChpbmNsdWRpbmcgJyonIGNoYXJhY3RlcnMgaWYgcHJlc2VudCk7IGlmIHRoZXJlIGlzIG9ubHkgb25lIHNpZGUsIGl0IGlzIHNyYywKKyAqIGFuZCBkc3QgaXMgTlVMTDsgaWYgc2lkZXMgZXhpc3QgYnV0IGFyZSBlbXB0eSAoaS5lLiwgdGhlIHJlZnNwZWMgZWl0aGVyCisgKiBzdGFydHMgb3IgZW5kcyB3aXRoICc6JyksIHRoZSBjb3JyZXNwb25kaW5nIHNpZGUgaXMgIiIuCisgKgorICogQW4gYXJyYXkgb2Ygc3RyaW5ncyBjYW4gYmUgcGFyc2VkIGludG8gYW4gYXJyYXkgb2Ygc3RydWN0IHJlZnNwZWNzIHVzaW5nCisgKiBwYXJzZV9mZXRjaF9yZWZzcGVjKCkgb3IgcGFyc2VfcHVzaF9yZWZzcGVjKCkuCisgKgorICogcmVtb3RlX2ZpbmRfdHJhY2tpbmcoKSwgZ2l2ZW4gYSByZW1vdGUgYW5kIGEgc3RydWN0IHJlZnNwZWMgd2l0aCBlaXRoZXIgc3JjCisgKiBvciBkc3QgZmlsbGVkIG91dCwgd2lsbCBmaWxsIG91dCB0aGUgb3RoZXIgc3VjaCB0aGF0IHRoZSByZXN1bHQgaXMgaW4gdGhlCisgKiAiZmV0Y2giIHNwZWNpZmljYXRpb24gZm9yIHRoZSByZW1vdGUgKG5vdGUgdGhhdCB0aGlzIGV2YWx1YXRlcyBwYXR0ZXJucyBhbmQKKyAqIHJldHVybnMgYSBzaW5nbGUgcmVzdWx0KS4KKyAqLworc3RydWN0IHJlZnNwZWMgeworCXN0cnVjdCByZWZzcGVjX2l0ZW0gKml0ZW1zOworCWludCBhbGxvYzsKKwlpbnQgbnI7CisKKwljb25zdCBjaGFyICoqcmF3OworCWludCByYXdfYWxsb2M7CisJaW50IHJhd19ucjsKKworCWludCBmZXRjaDsKK307CisKK2ludCByZWZzcGVjX2l0ZW1faW5pdChzdHJ1Y3QgcmVmc3BlY19pdGVtICppdGVtLCBjb25zdCBjaGFyICpyZWZzcGVjLAorCQkgICAgICBpbnQgZmV0Y2gpOwordm9pZCByZWZzcGVjX2l0ZW1faW5pdF9vcl9kaWUoc3RydWN0IHJlZnNwZWNfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqcmVmc3BlYywKKwkJCSAgICAgIGludCBmZXRjaCk7Cit2b2lkIHJlZnNwZWNfaXRlbV9jbGVhcihzdHJ1Y3QgcmVmc3BlY19pdGVtICppdGVtKTsKK3ZvaWQgcmVmc3BlY19pbml0KHN0cnVjdCByZWZzcGVjICpycywgaW50IGZldGNoKTsKK3ZvaWQgcmVmc3BlY19hcHBlbmQoc3RydWN0IHJlZnNwZWMgKnJzLCBjb25zdCBjaGFyICpyZWZzcGVjKTsKK3ZvaWQgcmVmc3BlY19hcHBlbmRuKHN0cnVjdCByZWZzcGVjICpycywgY29uc3QgY2hhciAqKnJlZnNwZWNzLCBpbnQgbnIpOwordm9pZCByZWZzcGVjX2NsZWFyKHN0cnVjdCByZWZzcGVjICpycyk7CisKK2ludCB2YWxpZF9mZXRjaF9yZWZzcGVjKGNvbnN0IGNoYXIgKnJlZnNwZWMpOworCitzdHJ1Y3QgYXJndl9hcnJheTsKKy8qCisgKiBEZXRlcm1pbmUgd2hhdCA8cHJlZml4PiB2YWx1ZXMgdG8gcGFzcyB0byB0aGUgcGVlciBpbiByZWYtcHJlZml4IGxpbmVzCisgKiAoc2VlIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLXYyLnR4dCkuCisgKi8KK3ZvaWQgcmVmc3BlY19yZWZfcHJlZml4ZXMoY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJzLAorCQkJICBzdHJ1Y3QgYXJndl9hcnJheSAqcmVmX3ByZWZpeGVzKTsKKworI2VuZGlmIC8qIFJFRlNQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvcmVtb3RlLWN1cmwuYyBiL3JlbW90ZS1jdXJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjZDMyMQotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZS1jdXJsLmMKQEAgLTAsMCArMSwxNDU3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAid2Fsa2VyLmgiCisjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJzZW5kLXBhY2suaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisvKiBhbHdheXMgZW5kcyB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHVybCA9IFNUUkJVRl9JTklUOworCitzdHJ1Y3Qgb3B0aW9ucyB7CisJaW50IHZlcmJvc2l0eTsKKwl1bnNpZ25lZCBsb25nIGRlcHRoOworCWNoYXIgKmRlZXBlbl9zaW5jZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZGVlcGVuX25vdDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcHVzaF9vcHRpb25zOworCWNoYXIgKmZpbHRlcjsKKwl1bnNpZ25lZCBwcm9ncmVzcyA6IDEsCisJCWNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgOiAxLAorCQljbG9uaW5nIDogMSwKKwkJdXBkYXRlX3NoYWxsb3cgOiAxLAorCQlmb2xsb3d0YWdzIDogMSwKKwkJZHJ5X3J1biA6IDEsCisJCXRoaW4gOiAxLAorCQkvKiBPbmUgb2YgdGhlIFNFTkRfUEFDS19QVVNIX0NFUlRfKiBjb25zdGFudHMuICovCisJCXB1c2hfY2VydCA6IDIsCisJCWRlZXBlbl9yZWxhdGl2ZSA6IDEsCisJCWZyb21fcHJvbWlzb3IgOiAxLAorCQlub19kZXBlbmRlbnRzIDogMSwKKwkJYXRvbWljIDogMTsKK307CitzdGF0aWMgc3RydWN0IG9wdGlvbnMgb3B0aW9uczsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgY2FzX29wdGlvbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworc3RhdGljIGludCBzZXRfb3B0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKG5hbWUsICJ2ZXJib3NpdHkiKSkgeworCQljaGFyICplbmQ7CisJCWludCB2ID0gc3RydG9sKHZhbHVlLCAmZW5kLCAxMCk7CisJCWlmICh2YWx1ZSA9PSBlbmQgfHwgKmVuZCkKKwkJCXJldHVybiAtMTsKKwkJb3B0aW9ucy52ZXJib3NpdHkgPSB2OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicHJvZ3Jlc3MiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMucHJvZ3Jlc3MgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMucHJvZ3Jlc3MgPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJkZXB0aCIpKSB7CisJCWNoYXIgKmVuZDsKKwkJdW5zaWduZWQgbG9uZyB2ID0gc3RydG91bCh2YWx1ZSwgJmVuZCwgMTApOworCQlpZiAodmFsdWUgPT0gZW5kIHx8ICplbmQpCisJCQlyZXR1cm4gLTE7CisJCW9wdGlvbnMuZGVwdGggPSB2OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZGVlcGVuLXNpbmNlIikpIHsKKwkJb3B0aW9ucy5kZWVwZW5fc2luY2UgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImRlZXBlbi1ub3QiKSkgeworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm9wdGlvbnMuZGVlcGVuX25vdCwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZGVlcGVuLXJlbGF0aXZlIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmRlZXBlbl9yZWxhdGl2ZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5kZWVwZW5fcmVsYXRpdmUgPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJmb2xsb3d0YWdzIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmZvbGxvd3RhZ3MgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMuZm9sbG93dGFncyA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImRyeS1ydW4iKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMuZHJ5X3J1biA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5kcnlfcnVuID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY2hlY2stY29ubmVjdGl2aXR5IikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMuY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNhcyIpKSB7CisJCXN0cnVjdCBzdHJidWYgdmFsID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZ2YWwsICItLSIgQ0FTX09QVF9OQU1FICI9JXMiLCB2YWx1ZSk7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmY2FzX29wdGlvbnMsIHZhbC5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmdmFsKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJjbG9uaW5nIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmNsb25pbmcgPSAxOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMuY2xvbmluZyA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJ1cGRhdGUtc2hhbGxvdyIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAidHJ1ZSIpKQorCQkJb3B0aW9ucy51cGRhdGVfc2hhbGxvdyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy51cGRhdGVfc2hhbGxvdyA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJwdXNoY2VydCIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAidHJ1ZSIpKQorCQkJb3B0aW9ucy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImZhbHNlIikpCisJCQlvcHRpb25zLnB1c2hfY2VydCA9IFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpZi1hc2tlZCIpKQorCQkJb3B0aW9ucy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiYXRvbWljIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLmF0b21pYyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5hdG9taWMgPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicHVzaC1vcHRpb24iKSkgeworCQlpZiAoKnZhbHVlICE9ICciJykKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmb3B0aW9ucy5wdXNoX29wdGlvbnMsIHZhbHVlKTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHVucXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1bnF1b3RlZCwgdmFsdWUsIE5VTEwpIDwgMCkKKwkJCQlkaWUoXygiaW52YWxpZCBxdW90aW5nIGluIHB1c2gtb3B0aW9uIHZhbHVlOiAnJXMnIiksIHZhbHVlKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cCgmb3B0aW9ucy5wdXNoX29wdGlvbnMsCisJCQkJCQkgc3RyYnVmX2RldGFjaCgmdW5xdW90ZWQsIE5VTEwpKTsKKwkJfQorCQlyZXR1cm4gMDsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBhMDgKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImZhbWlseSIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAiaXB2NCIpKQorCQkJZ2l0X2N1cmxfaXByZXNvbHZlID0gQ1VSTF9JUFJFU09MVkVfVjQ7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpcHY2IikpCisJCQlnaXRfY3VybF9pcHJlc29sdmUgPSBDVVJMX0lQUkVTT0xWRV9WNjsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImFsbCIpKQorCQkJZ2l0X2N1cmxfaXByZXNvbHZlID0gQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVI7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisjZW5kaWYgLyogTElCQ1VSTF9WRVJTSU9OX05VTSA+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+bmFtZSk7CisJbm90ZXNfcmVmID0gbm90ZXNfcmVmX3NiLmJ1ZjsKKworCXN0cmJ1Zl9hZGRmKCZtYXJrc2ZpbGVuYW1lX3NiLCAiJXMvaW5mby9mYXN0LWltcG9ydC9yZW1vdGUtc3ZuLyVzLm1hcmtzIiwKKwkJZ2V0X2dpdF9kaXIoKSwgcmVtb3RlLT5uYW1lKTsKKwltYXJrc2ZpbGVuYW1lID0gbWFya3NmaWxlbmFtZV9zYi5idWY7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc3RyYnVmX2dldGxpbmVfbGYoJmJ1Ziwgc3RkaW4pID09IEVPRikgeworCQkJaWYgKGZlcnJvcihzdGRpbikpCisJCQkJZGllKCJFcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIik7CisJCQllbHNlCisJCQkJZGllKCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tYW5kIHN0cmVhbSIpOworCQl9CisJCWlmIChkb19jb21tYW5kKCZidWYpKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdXJsX3NiKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJpdmF0ZV9yZWZfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZub3Rlc19yZWZfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZtYXJrc2ZpbGVuYW1lX3NiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlbW90ZS5jIGIvcmVtb3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzMTk2ZQotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZS5jCkBAIC0wLDAgKzEsMjMxMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm1lcmdlc29ydC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJhZHZpY2UuaCIKKworZW51bSBtYXBfZGlyZWN0aW9uIHsgRlJPTV9TUkMsIEZST01fRFNUIH07CisKK3N0cnVjdCBjb3VudGVkX3N0cmluZyB7CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICpzOworfTsKK3N0cnVjdCByZXdyaXRlIHsKKwljb25zdCBjaGFyICpiYXNlOworCXNpemVfdCBiYXNlbGVuOworCXN0cnVjdCBjb3VudGVkX3N0cmluZyAqaW5zdGVhZF9vZjsKKwlpbnQgaW5zdGVhZF9vZl9ucjsKKwlpbnQgaW5zdGVhZF9vZl9hbGxvYzsKK307CitzdHJ1Y3QgcmV3cml0ZXMgeworCXN0cnVjdCByZXdyaXRlICoqcmV3cml0ZTsKKwlpbnQgcmV3cml0ZV9hbGxvYzsKKwlpbnQgcmV3cml0ZV9ucjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlICoqcmVtb3RlczsKK3N0YXRpYyBpbnQgcmVtb3Rlc19hbGxvYzsKK3N0YXRpYyBpbnQgcmVtb3Rlc19ucjsKK3N0YXRpYyBzdHJ1Y3QgaGFzaG1hcCByZW1vdGVzX2hhc2g7CisKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICoqYnJhbmNoZXM7CitzdGF0aWMgaW50IGJyYW5jaGVzX2FsbG9jOworc3RhdGljIGludCBicmFuY2hlc19ucjsKKworc3RhdGljIHN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoOworc3RhdGljIGNvbnN0IGNoYXIgKnB1c2hyZW1vdGVfbmFtZTsKKworc3RhdGljIHN0cnVjdCByZXdyaXRlcyByZXdyaXRlczsKK3N0YXRpYyBzdHJ1Y3QgcmV3cml0ZXMgcmV3cml0ZXNfcHVzaDsKKworc3RhdGljIGludCB2YWxpZF9yZW1vdGUoY29uc3Qgc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCXJldHVybiAoISFyZW1vdGUtPnVybCkgfHwgKCEhcmVtb3RlLT5mb3JlaWduX3Zjcyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphbGlhc191cmwoY29uc3QgY2hhciAqdXJsLCBzdHJ1Y3QgcmV3cml0ZXMgKnIpCit7CisJaW50IGksIGo7CisJc3RydWN0IGNvdW50ZWRfc3RyaW5nICpsb25nZXN0OworCWludCBsb25nZXN0X2k7CisKKwlsb25nZXN0ID0gTlVMTDsKKwlsb25nZXN0X2kgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgci0+cmV3cml0ZV9ucjsgaSsrKSB7CisJCWlmICghci0+cmV3cml0ZVtpXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgci0+cmV3cml0ZVtpXS0+aW5zdGVhZF9vZl9ucjsgaisrKSB7CisJCQlpZiAoc3RhcnRzX3dpdGgodXJsLCByLT5yZXdyaXRlW2ldLT5pbnN0ZWFkX29mW2pdLnMpICYmCisJCQkgICAgKCFsb25nZXN0IHx8CisJCQkgICAgIGxvbmdlc3QtPmxlbiA8IHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2Zbal0ubGVuKSkgeworCQkJCWxvbmdlc3QgPSAmKHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2Zbal0pOworCQkJCWxvbmdlc3RfaSA9IGk7CisJCQl9CisJCX0KKwl9CisJaWYgKCFsb25nZXN0KQorCQlyZXR1cm4gdXJsOworCisJcmV0dXJuIHhzdHJmbXQoIiVzJXMiLCByLT5yZXdyaXRlW2xvbmdlc3RfaV0tPmJhc2UsIHVybCArIGxvbmdlc3QtPmxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF91cmwoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpCit7CisJQUxMT0NfR1JPVyhyZW1vdGUtPnVybCwgcmVtb3RlLT51cmxfbnIgKyAxLCByZW1vdGUtPnVybF9hbGxvYyk7CisJcmVtb3RlLT51cmxbcmVtb3RlLT51cmxfbnIrK10gPSB1cmw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wdXNodXJsKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqcHVzaHVybCkKK3sKKwlBTExPQ19HUk9XKHJlbW90ZS0+cHVzaHVybCwgcmVtb3RlLT5wdXNodXJsX25yICsgMSwgcmVtb3RlLT5wdXNodXJsX2FsbG9jKTsKKwlyZW1vdGUtPnB1c2h1cmxbcmVtb3RlLT5wdXNodXJsX25yKytdID0gcHVzaHVybDsKK30KKworc3RhdGljIHZvaWQgYWRkX3B1c2h1cmxfYWxpYXMoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpCit7CisJY29uc3QgY2hhciAqcHVzaHVybCA9IGFsaWFzX3VybCh1cmwsICZyZXdyaXRlc19wdXNoKTsKKwlpZiAocHVzaHVybCAhPSB1cmwpCisJCWFkZF9wdXNodXJsKHJlbW90ZSwgcHVzaHVybCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF91cmxfYWxpYXMoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpCit7CisJYWRkX3VybChyZW1vdGUsIGFsaWFzX3VybCh1cmwsICZyZXdyaXRlcykpOworCWFkZF9wdXNodXJsX2FsaWFzKHJlbW90ZSwgdXJsKTsKK30KKworc3RydWN0IHJlbW90ZXNfaGFzaF9rZXkgeworCWNvbnN0IGNoYXIgKnN0cjsKKwlpbnQgbGVuOworfTsKKworc3RhdGljIGludCByZW1vdGVzX2hhc2hfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICAgIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJY29uc3Qgc3RydWN0IHJlbW90ZSAqYSwgKmI7CisJY29uc3Qgc3RydWN0IHJlbW90ZXNfaGFzaF9rZXkgKmtleSA9IGtleWRhdGE7CisKKwlhID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCByZW1vdGUsIGVudCk7CisJYiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCByZW1vdGUsIGVudCk7CisKKwlpZiAoa2V5KQorCQlyZXR1cm4gc3RybmNtcChhLT5uYW1lLCBrZXktPnN0ciwga2V5LT5sZW4pIHx8IGEtPm5hbWVba2V5LT5sZW5dOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfcmVtb3Rlc19oYXNoKHZvaWQpCit7CisJaWYgKCFyZW1vdGVzX2hhc2guY21wZm4pCisJCWhhc2htYXBfaW5pdCgmcmVtb3Rlc19oYXNoLCByZW1vdGVzX2hhc2hfY21wLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCByZW1vdGUgKm1ha2VfcmVtb3RlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJc3RydWN0IHJlbW90ZSAqcmV0LCAqcmVwbGFjZWQ7CisJc3RydWN0IHJlbW90ZXNfaGFzaF9rZXkgbG9va3VwOworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGxvb2t1cF9lbnRyeSwgKmU7CisKKwlpZiAoIWxlbikKKwkJbGVuID0gc3RybGVuKG5hbWUpOworCisJaW5pdF9yZW1vdGVzX2hhc2goKTsKKwlsb29rdXAuc3RyID0gbmFtZTsKKwlsb29rdXAubGVuID0gbGVuOworCWhhc2htYXBfZW50cnlfaW5pdCgmbG9va3VwX2VudHJ5LCBtZW1oYXNoKG5hbWUsIGxlbikpOworCisJZSA9IGhhc2htYXBfZ2V0KCZyZW1vdGVzX2hhc2gsICZsb29rdXBfZW50cnksICZsb29rdXApOworCWlmIChlKQorCQlyZXR1cm4gY29udGFpbmVyX29mKGUsIHN0cnVjdCByZW1vdGUsIGVudCk7CisKKwlyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVtb3RlKSk7CisJcmV0LT5wcnVuZSA9IC0xOyAgLyogdW5zcGVjaWZpZWQgKi8KKwlyZXQtPnBydW5lX3RhZ3MgPSAtMTsgIC8qIHVuc3BlY2lmaWVkICovCisJcmV0LT5uYW1lID0geHN0cm5kdXAobmFtZSwgbGVuKTsKKwlyZWZzcGVjX2luaXQoJnJldC0+cHVzaCwgUkVGU1BFQ19QVVNIKTsKKwlyZWZzcGVjX2luaXQoJnJldC0+ZmV0Y2gsIFJFRlNQRUNfRkVUQ0gpOworCisJQUxMT0NfR1JPVyhyZW1vdGVzLCByZW1vdGVzX25yICsgMSwgcmVtb3Rlc19hbGxvYyk7CisJcmVtb3Rlc1tyZW1vdGVzX25yKytdID0gcmV0OworCisJaGFzaG1hcF9lbnRyeV9pbml0KCZyZXQtPmVudCwgbG9va3VwX2VudHJ5Lmhhc2gpOworCXJlcGxhY2VkID0gaGFzaG1hcF9wdXRfZW50cnkoJnJlbW90ZXNfaGFzaCwgcmV0LCBlbnQpOworCWFzc2VydChyZXBsYWNlZCA9PSBOVUxMKTsgIC8qIG5vIHByZXZpb3VzIGVudHJ5IG92ZXJ3cml0dGVuICovCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkX21lcmdlKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlBTExPQ19HUk9XKGJyYW5jaC0+bWVyZ2VfbmFtZSwgYnJhbmNoLT5tZXJnZV9uciArIDEsCisJCSAgIGJyYW5jaC0+bWVyZ2VfYWxsb2MpOworCWJyYW5jaC0+bWVyZ2VfbmFtZVticmFuY2gtPm1lcmdlX25yKytdID0gbmFtZTsKK30KKworc3RhdGljIHN0cnVjdCBicmFuY2ggKm1ha2VfYnJhbmNoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJc3RydWN0IGJyYW5jaCAqcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGJyYW5jaGVzX25yOyBpKyspIHsKKwkJaWYgKGxlbiA/ICghc3RybmNtcChuYW1lLCBicmFuY2hlc1tpXS0+bmFtZSwgbGVuKSAmJgorCQkJICAgIWJyYW5jaGVzW2ldLT5uYW1lW2xlbl0pIDoKKwkJICAgICFzdHJjbXAobmFtZSwgYnJhbmNoZXNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIGJyYW5jaGVzW2ldOworCX0KKworCUFMTE9DX0dST1coYnJhbmNoZXMsIGJyYW5jaGVzX25yICsgMSwgYnJhbmNoZXNfYWxsb2MpOworCXJldCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBicmFuY2gpKTsKKwlicmFuY2hlc1ticmFuY2hlc19ucisrXSA9IHJldDsKKwlpZiAobGVuKQorCQlyZXQtPm5hbWUgPSB4c3RybmR1cChuYW1lLCBsZW4pOworCWVsc2UKKwkJcmV0LT5uYW1lID0geHN0cmR1cChuYW1lKTsKKwlyZXQtPnJlZm5hbWUgPSB4c3RyZm10KCJyZWZzL2hlYWRzLyVzIiwgcmV0LT5uYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmV3cml0ZSAqbWFrZV9yZXdyaXRlKHN0cnVjdCByZXdyaXRlcyAqciwgY29uc3QgY2hhciAqYmFzZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcmV3cml0ZSAqcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHItPnJld3JpdGVfbnI7IGkrKykgeworCQlpZiAobGVuCisJCSAgICA/IChsZW4gPT0gci0+cmV3cml0ZVtpXS0+YmFzZWxlbiAmJgorCQkgICAgICAgIXN0cm5jbXAoYmFzZSwgci0+cmV3cml0ZVtpXS0+YmFzZSwgbGVuKSkKKwkJICAgIDogIXN0cmNtcChiYXNlLCByLT5yZXdyaXRlW2ldLT5iYXNlKSkKKwkJCXJldHVybiByLT5yZXdyaXRlW2ldOworCX0KKworCUFMTE9DX0dST1coci0+cmV3cml0ZSwgci0+cmV3cml0ZV9uciArIDEsIHItPnJld3JpdGVfYWxsb2MpOworCXJldCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZXdyaXRlKSk7CisJci0+cmV3cml0ZVtyLT5yZXdyaXRlX25yKytdID0gcmV0OworCWlmIChsZW4pIHsKKwkJcmV0LT5iYXNlID0geHN0cm5kdXAoYmFzZSwgbGVuKTsKKwkJcmV0LT5iYXNlbGVuID0gbGVuOworCX0KKwllbHNlIHsKKwkJcmV0LT5iYXNlID0geHN0cmR1cChiYXNlKTsKKwkJcmV0LT5iYXNlbGVuID0gc3RybGVuKGJhc2UpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRfaW5zdGVhZF9vZihzdHJ1Y3QgcmV3cml0ZSAqcmV3cml0ZSwgY29uc3QgY2hhciAqaW5zdGVhZF9vZikKK3sKKwlBTExPQ19HUk9XKHJld3JpdGUtPmluc3RlYWRfb2YsIHJld3JpdGUtPmluc3RlYWRfb2ZfbnIgKyAxLCByZXdyaXRlLT5pbnN0ZWFkX29mX2FsbG9jKTsKKwlyZXdyaXRlLT5pbnN0ZWFkX29mW3Jld3JpdGUtPmluc3RlYWRfb2ZfbnJdLnMgPSBpbnN0ZWFkX29mOworCXJld3JpdGUtPmluc3RlYWRfb2ZbcmV3cml0ZS0+aW5zdGVhZF9vZl9ucl0ubGVuID0gc3RybGVuKGluc3RlYWRfb2YpOworCXJld3JpdGUtPmluc3RlYWRfb2ZfbnIrKzsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfc3BhY2VzKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKGlzc3BhY2UoKnMpKQorCQlzKys7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcmVtb3Rlc19maWxlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmYgPSBmb3Blbl9vcl93YXJuKGdpdF9wYXRoKCJyZW1vdGVzLyVzIiwgcmVtb3RlLT5uYW1lKSwgInIiKTsKKworCWlmICghZikKKwkJcmV0dXJuOworCXJlbW90ZS0+Y29uZmlndXJlZF9pbl9yZXBvID0gMTsKKwlyZW1vdGUtPm9yaWdpbiA9IFJFTU9URV9SRU1PVEVTOworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBmKSAhPSBFT0YpIHsKKwkJY29uc3QgY2hhciAqdjsKKworCQlzdHJidWZfcnRyaW0oJmJ1Zik7CisKKwkJaWYgKHNraXBfcHJlZml4KGJ1Zi5idWYsICJVUkw6IiwgJnYpKQorCQkJYWRkX3VybF9hbGlhcyhyZW1vdGUsIHhzdHJkdXAoc2tpcF9zcGFjZXModikpKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYnVmLmJ1ZiwgIlB1c2g6IiwgJnYpKQorCQkJcmVmc3BlY19hcHBlbmQoJnJlbW90ZS0+cHVzaCwgc2tpcF9zcGFjZXModikpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChidWYuYnVmLCAiUHVsbDoiLCAmdikpCisJCQlyZWZzcGVjX2FwcGVuZCgmcmVtb3RlLT5mZXRjaCwgc2tpcF9zcGFjZXModikpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlmY2xvc2UoZik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfYnJhbmNoZXNfZmlsZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUpCit7CisJY2hhciAqZnJhZzsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmYgPSBmb3Blbl9vcl93YXJuKGdpdF9wYXRoKCJicmFuY2hlcy8lcyIsIHJlbW90ZS0+bmFtZSksICJyIik7CisKKwlpZiAoIWYpCisJCXJldHVybjsKKworCXN0cmJ1Zl9nZXRsaW5lX2xmKCZidWYsIGYpOworCWZjbG9zZShmKTsKKwlzdHJidWZfdHJpbSgmYnVmKTsKKwlpZiAoIWJ1Zi5sZW4pIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlyZW1vdGUtPmNvbmZpZ3VyZWRfaW5fcmVwbyA9IDE7CisJcmVtb3RlLT5vcmlnaW4gPSBSRU1PVEVfQlJBTkNIRVM7CisKKwkvKgorCSAqIFRoZSBicmFuY2hlcyBmaWxlIHdvdWxkIGhhdmUgVVJMIGFuZCBvcHRpb25hbGx5CisJICogI2JyYW5jaCBzcGVjaWZpZWQuICBUaGUgIm1hc3RlciIgKG9yIHNwZWNpZmllZCkgYnJhbmNoIGlzCisJICogZmV0Y2hlZCBhbmQgc3RvcmVkIGluIHRoZSBsb2NhbCBicmFuY2ggbWF0Y2hpbmcgdGhlCisJICogcmVtb3RlIG5hbWUuCisJICovCisJZnJhZyA9IHN0cmNocihidWYuYnVmLCAnIycpOworCWlmIChmcmFnKQorCQkqKGZyYWcrKykgPSAnXDAnOworCWVsc2UKKwkJZnJhZyA9ICJtYXN0ZXIiOworCisJYWRkX3VybF9hbGlhcyhyZW1vdGUsIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL2hlYWRzLyVzOnJlZnMvaGVhZHMvJXMiLAorCQkgICAgZnJhZywgcmVtb3RlLT5uYW1lKTsKKwlyZWZzcGVjX2FwcGVuZCgmcmVtb3RlLT5mZXRjaCwgYnVmLmJ1Zik7CisKKwkvKgorCSAqIENvZ2l0byBjb21wYXRpYmxlIHB1c2g6IHB1c2ggY3VycmVudCBIRUFEIHRvIHJlbW90ZSAjYnJhbmNoCisJICogKG1hc3RlciBpZiBtaXNzaW5nKQorCSAqLworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkZigmYnVmLCAiSEVBRDpyZWZzL2hlYWRzLyVzIiwgZnJhZyk7CisJcmVmc3BlY19hcHBlbmQoJnJlbW90ZS0+cHVzaCwgYnVmLmJ1Zik7CisJcmVtb3RlLT5mZXRjaF90YWdzID0gMTsgLyogYWx3YXlzIGF1dG8tZm9sbG93ICovCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWludCBuYW1lbGVuOworCWNvbnN0IGNoYXIgKnN1YmtleTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCWlmIChwYXJzZV9jb25maWdfa2V5KGtleSwgImJyYW5jaCIsICZuYW1lLCAmbmFtZWxlbiwgJnN1YmtleSkgPj0gMCkgeworCQlpZiAoIW5hbWUpCisJCQlyZXR1cm4gMDsKKwkJYnJhbmNoID0gbWFrZV9icmFuY2gobmFtZSwgbmFtZWxlbik7CisJCWlmICghc3RyY21wKHN1YmtleSwgInJlbW90ZSIpKSB7CisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmJyYW5jaC0+cmVtb3RlX25hbWUsIGtleSwgdmFsdWUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHVzaHJlbW90ZSIpKSB7CisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmJyYW5jaC0+cHVzaHJlbW90ZV9uYW1lLCBrZXksIHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIm1lcmdlIikpIHsKKwkJCWlmICghdmFsdWUpCisJCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGtleSk7CisJCQlhZGRfbWVyZ2UoYnJhbmNoLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmIChwYXJzZV9jb25maWdfa2V5KGtleSwgInVybCIsICZuYW1lLCAmbmFtZWxlbiwgJnN1YmtleSkgPj0gMCkgeworCQlzdHJ1Y3QgcmV3cml0ZSAqcmV3cml0ZTsKKwkJaWYgKCFuYW1lKQorCQkJcmV0dXJuIDA7CisJCWlmICghc3RyY21wKHN1YmtleSwgImluc3RlYWRvZiIpKSB7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJcmV3cml0ZSA9IG1ha2VfcmV3cml0ZSgmcmV3cml0ZXMsIG5hbWUsIG5hbWVsZW4pOworCQkJYWRkX2luc3RlYWRfb2YocmV3cml0ZSwgeHN0cmR1cCh2YWx1ZSkpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHVzaGluc3RlYWRvZiIpKSB7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJcmV3cml0ZSA9IG1ha2VfcmV3cml0ZSgmcmV3cml0ZXNfcHVzaCwgbmFtZSwgbmFtZWxlbik7CisJCQlhZGRfaW5zdGVhZF9vZihyZXdyaXRlLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0KKwl9CisKKwlpZiAocGFyc2VfY29uZmlnX2tleShrZXksICJyZW1vdGUiLCAmbmFtZSwgJm5hbWVsZW4sICZzdWJrZXkpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBIYW5kbGUgcmVtb3RlLiogdmFyaWFibGVzICovCisJaWYgKCFuYW1lICYmICFzdHJjbXAoc3Via2V5LCAicHVzaGRlZmF1bHQiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZwdXNocmVtb3RlX25hbWUsIGtleSwgdmFsdWUpOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gMDsKKwkvKiBIYW5kbGUgcmVtb3RlLjxuYW1lPi4qIHZhcmlhYmxlcyAqLworCWlmICgqbmFtZSA9PSAnLycpIHsKKwkJd2FybmluZyhfKCJjb25maWcgcmVtb3RlIHNob3J0aGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLyc6ICVzIiksCisJCQluYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXJlbW90ZSA9IG1ha2VfcmVtb3RlKG5hbWUsIG5hbWVsZW4pOworCXJlbW90ZS0+b3JpZ2luID0gUkVNT1RFX0NPTkZJRzsKKwlpZiAoY3VycmVudF9jb25maWdfc2NvcGUoKSA9PSBDT05GSUdfU0NPUEVfTE9DQUwgfHwKKwljdXJyZW50X2NvbmZpZ19zY29wZSgpID09IENPTkZJR19TQ09QRV9XT1JLVFJFRSkKKwkJcmVtb3RlLT5jb25maWd1cmVkX2luX3JlcG8gPSAxOworCWlmICghc3RyY21wKHN1YmtleSwgIm1pcnJvciIpKQorCQlyZW1vdGUtPm1pcnJvciA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgInNraXBkZWZhdWx0dXBkYXRlIikpCisJCXJlbW90ZS0+c2tpcF9kZWZhdWx0X3VwZGF0ZSA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgInNraXBmZXRjaGFsbCIpKQorCQlyZW1vdGUtPnNraXBfZGVmYXVsdF91cGRhdGUgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJwcnVuZSIpKQorCQlyZW1vdGUtPnBydW5lID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHJ1bmV0YWdzIikpCisJCXJlbW90ZS0+cHJ1bmVfdGFncyA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgInVybCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWFkZF91cmwocmVtb3RlLCB2KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHVzaHVybCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWFkZF9wdXNodXJsKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgInB1c2giKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlyZWZzcGVjX2FwcGVuZCgmcmVtb3RlLT5wdXNoLCB2KTsKKwkJZnJlZSgoY2hhciAqKXYpOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJmZXRjaCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCXJlZnNwZWNfYXBwZW5kKCZyZW1vdGUtPmZldGNoLCB2KTsKKwkJZnJlZSgoY2hhciAqKXYpOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJyZWNlaXZlcGFjayIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWlmICghcmVtb3RlLT5yZWNlaXZlcGFjaykKKwkJCXJlbW90ZS0+cmVjZWl2ZXBhY2sgPSB2OworCQllbHNlCisJCQllcnJvcihfKCJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiKSk7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgInVwbG9hZHBhY2siKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoIXJlbW90ZS0+dXBsb2FkcGFjaykKKwkJCXJlbW90ZS0+dXBsb2FkcGFjayA9IHY7CisJCWVsc2UKKwkJCWVycm9yKF8oIm1vcmUgdGhhbiBvbmUgdXBsb2FkcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0IikpOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJ0YWdvcHQiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIi0tbm8tdGFncyIpKQorCQkJcmVtb3RlLT5mZXRjaF90YWdzID0gLTE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICItLXRhZ3MiKSkKKwkJCXJlbW90ZS0+ZmV0Y2hfdGFncyA9IDI7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgInByb3h5IikpIHsKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKChjb25zdCBjaGFyICoqKSZyZW1vdGUtPmh0dHBfcHJveHksCisJCQkJCSBrZXksIHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAicHJveHlhdXRobWV0aG9kIikpIHsKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKChjb25zdCBjaGFyICoqKSZyZW1vdGUtPmh0dHBfcHJveHlfYXV0aG1ldGhvZCwKKwkJCQkJIGtleSwgdmFsdWUpOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICJ2Y3MiKSkgeworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnJlbW90ZS0+Zm9yZWlnbl92Y3MsIGtleSwgdmFsdWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWxpYXNfYWxsX3VybHModm9pZCkKK3sKKwlpbnQgaSwgajsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3Rlc19ucjsgaSsrKSB7CisJCWludCBhZGRfcHVzaHVybF9hbGlhc2VzOworCQlpZiAoIXJlbW90ZXNbaV0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IHJlbW90ZXNbaV0tPnB1c2h1cmxfbnI7IGorKykgeworCQkJcmVtb3Rlc1tpXS0+cHVzaHVybFtqXSA9IGFsaWFzX3VybChyZW1vdGVzW2ldLT5wdXNodXJsW2pdLCAmcmV3cml0ZXMpOworCQl9CisJCWFkZF9wdXNodXJsX2FsaWFzZXMgPSByZW1vdGVzW2ldLT5wdXNodXJsX25yID09IDA7CisJCWZvciAoaiA9IDA7IGogPCByZW1vdGVzW2ldLT51cmxfbnI7IGorKykgeworCQkJaWYgKGFkZF9wdXNodXJsX2FsaWFzZXMpCisJCQkJYWRkX3B1c2h1cmxfYWxpYXMocmVtb3Rlc1tpXSwgcmVtb3Rlc1tpXS0+dXJsW2pdKTsKKwkJCXJlbW90ZXNbaV0tPnVybFtqXSA9IGFsaWFzX3VybChyZW1vdGVzW2ldLT51cmxbal0sICZyZXdyaXRlcyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfY29uZmlnKHZvaWQpCit7CisJc3RhdGljIGludCBsb2FkZWQ7CisJaW50IGZsYWc7CisKKwlpZiAobG9hZGVkKQorCQlyZXR1cm47CisJbG9hZGVkID0gMTsKKworCWN1cnJlbnRfYnJhbmNoID0gTlVMTDsKKwlpZiAoc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIHsKKwkJY29uc3QgY2hhciAqaGVhZF9yZWYgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBOVUxMLCAmZmxhZyk7CisJCWlmIChoZWFkX3JlZiAmJiAoZmxhZyAmIFJFRl9JU1NZTVJFRikgJiYKKwkJICAgIHNraXBfcHJlZml4KGhlYWRfcmVmLCAicmVmcy9oZWFkcy8iLCAmaGVhZF9yZWYpKSB7CisJCQljdXJyZW50X2JyYW5jaCA9IG1ha2VfYnJhbmNoKGhlYWRfcmVmLCAwKTsKKwkJfQorCX0KKwlnaXRfY29uZmlnKGhhbmRsZV9jb25maWcsIE5VTEwpOworCWFsaWFzX2FsbF91cmxzKCk7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRfcmVtb3RlX25pY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIW5hbWVbMF0gfHwgaXNfZG90X29yX2RvdGRvdChuYW1lKSkKKwkJcmV0dXJuIDA7CisKKwkvKiByZW1vdGUgbmlja25hbWVzIGNhbm5vdCBjb250YWluIHNsYXNoZXMgKi8KKwl3aGlsZSAoKm5hbWUpCisJCWlmIChpc19kaXJfc2VwKCpuYW1lKyspKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK2NvbnN0IGNoYXIgKnJlbW90ZV9mb3JfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50ICpleHBsaWNpdCkKK3sKKwlpZiAoYnJhbmNoICYmIGJyYW5jaC0+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+bWVyZ2VbaV0tPmRzdCA9IHhzdHJkdXAocmV0LT5tZXJnZV9uYW1lW2ldKTsKKwl9Cit9CisKK3N0cnVjdCBicmFuY2ggKmJyYW5jaF9nZXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpyZXQ7CisKKwlyZWFkX2NvbmZpZygpOworCWlmICghbmFtZSB8fCAhKm5hbWUgfHwgIXN0cmNtcChuYW1lLCAiSEVBRCIpKQorCQlyZXQgPSBjdXJyZW50X2JyYW5jaDsKKwllbHNlCisJCXJldCA9IG1ha2VfYnJhbmNoKG5hbWUsIDApOworCXNldF9tZXJnZShyZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBicmFuY2hfaGFzX21lcmdlX2NvbmZpZyhzdHJ1Y3QgYnJhbmNoICpicmFuY2gpCit7CisJcmV0dXJuIGJyYW5jaCAmJiAhIWJyYW5jaC0+bWVyZ2U7Cit9CisKK2ludCBicmFuY2hfbWVyZ2VfbWF0Y2hlcyhzdHJ1Y3QgYnJhbmNoICpicmFuY2gsCisJCSAgICAgICAgICAgICAgICAgaW50IGksCisJCSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlpZiAoIWJyYW5jaCB8fCBpIDwgMCB8fCBpID49IGJyYW5jaC0+bWVyZ2VfbnIpCisJCXJldHVybiAwOworCXJldHVybiByZWZuYW1lX21hdGNoKGJyYW5jaC0+bWVyZ2VbaV0tPnNyYywgcmVmbmFtZSk7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDIsMykpKQorc3RhdGljIGNvbnN0IGNoYXIgKmVycm9yX2J1ZihzdHJ1Y3Qgc3RyYnVmICplcnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWlmIChlcnIpIHsKKwkJdmFfbGlzdCBhcDsKKwkJdmFfc3RhcnQoYXAsIGZtdCk7CisJCXN0cmJ1Zl92YWRkZihlcnIsIGZtdCwgYXApOworCQl2YV9lbmQoYXApOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciAqYnJhbmNoX2dldF91cHN0cmVhbShzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAoIWJyYW5jaCkKKwkJcmV0dXJuIGVycm9yX2J1ZihlcnIsIF8oIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giKSk7CisKKwlpZiAoIWJyYW5jaC0+bWVyZ2UgfHwgIWJyYW5jaC0+bWVyZ2VbMF0pIHsKKwkJLyoKKwkJICogbm8gbWVyZ2UgY29uZmlnOyBpcyBpdCBiZWNhdXNlIHRoZSB1c2VyIGRpZG4ndCBkZWZpbmUgYW55LAorCQkgKiBvciBiZWNhdXNlIGl0IGlzIG5vdCBhIHJlYWwgYnJhbmNoLCBhbmQgZ2V0X2JyYW5jaAorCQkgKiBhdXRvLXZpdmlmaWVkIGl0PworCQkgKi8KKwkJaWYgKCFyZWZfZXhpc3RzKGJyYW5jaC0+cmVmbmFtZSkpCisJCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwgXygibm8gc3VjaCBicmFuY2g6ICclcyciKSwKKwkJCQkJIGJyYW5jaC0+bmFtZSk7CisJCXJldHVybiBlcnJvcl9idWYoZXJyLAorCQkJCSBfKCJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIpLAorCQkJCSBicmFuY2gtPm5hbWUpOworCX0KKworCWlmICghYnJhbmNoLT5tZXJnZVswXS0+ZHN0KQorCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwKKwkJCQkgXygidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giKSwKKwkJCQkgYnJhbmNoLT5tZXJnZVswXS0+c3JjKTsKKworCXJldHVybiBicmFuY2gtPm1lcmdlWzBdLT5kc3Q7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0cmFja2luZ19mb3JfcHVzaF9kZXN0KHN0cnVjdCByZW1vdGUgKnJlbW90ZSwKKwkJCQkJICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwljaGFyICpyZXQ7CisKKwlyZXQgPSBhcHBseV9yZWZzcGVjcygmcmVtb3RlLT5mZXRjaCwgcmVmbmFtZSk7CisJaWYgKCFyZXQpCisJCXJldHVybiBlcnJvcl9idWYoZXJyLAorCQkJCSBfKCJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIpLAorCQkJCSByZWZuYW1lLCByZW1vdGUtPm5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpicmFuY2hfZ2V0X3B1c2hfMShzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHB1c2hyZW1vdGVfZm9yX2JyYW5jaChicmFuY2gsIE5VTEwpKTsKKwlpZiAoIXJlbW90ZSkKKwkJcmV0dXJuIGVycm9yX2J1ZihlcnIsCisJCQkJIF8oImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciKSwKKwkJCQkgYnJhbmNoLT5uYW1lKTsKKworCWlmIChyZW1vdGUtPnB1c2gubnIpIHsKKwkJY2hhciAqZHN0OworCQljb25zdCBjaGFyICpyZXQ7CisKKwkJZHN0ID0gYXBwbHlfcmVmc3BlY3MoJnJlbW90ZS0+cHVzaCwgYnJhbmNoLT5yZWZuYW1lKTsKKwkJaWYgKCFkc3QpCisJCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwKKwkJCQkJIF8oInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIpLAorCQkJCQkgcmVtb3RlLT5uYW1lLCBicmFuY2gtPm5hbWUpOworCisJCXJldCA9IHRyYWNraW5nX2Zvcl9wdXNoX2Rlc3QocmVtb3RlLCBkc3QsIGVycik7CisJCWZyZWUoZHN0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocmVtb3RlLT5taXJyb3IpCisJCXJldHVybiB0cmFja2luZ19mb3JfcHVzaF9kZXN0KHJlbW90ZSwgYnJhbmNoLT5yZWZuYW1lLCBlcnIpOworCisJc3dpdGNoIChwdXNoX2RlZmF1bHQpIHsKKwljYXNlIFBVU0hfREVGQVVMVF9OT1RISU5HOgorCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwgXygicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIikpOworCisJY2FzZSBQVVNIX0RFRkFVTFRfTUFUQ0hJTkc6CisJY2FzZSBQVVNIX0RFRkFVTFRfQ1VSUkVOVDoKKwkJcmV0dXJuIHRyYWNraW5nX2Zvcl9wdXNoX2Rlc3QocmVtb3RlLCBicmFuY2gtPnJlZm5hbWUsIGVycik7CisKKwljYXNlIFBVU0hfREVGQVVMVF9VUFNUUkVBTToKKwkJcmV0dXJuIGJyYW5jaF9nZXRfdXBzdHJlYW0oYnJhbmNoLCBlcnIpOworCisJY2FzZSBQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQ6CisJY2FzZSBQVVNIX0RFRkFVTFRfU0lNUExFOgorCQl7CisJCQljb25zdCBjaGFyICp1cCwgKmN1cjsKKworCQkJdXAgPSBicmFuY2hfZ2V0X3Vwc3RyZWFtKGJyYW5jaCwgZXJyKTsKKwkJCWlmICghdXApCisJCQkJcmV0dXJuIE5VTEw7CisJCQljdXIgPSB0cmFja2luZ19mb3JfcHVzaF9kZXN0KHJlbW90ZSwgYnJhbmNoLT5yZWZuYW1lLCBlcnIpOworCQkJaWYgKCFjdXIpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpZiAoc3RyY21wKGN1ciwgdXApKQorCQkJCXJldHVybiBlcnJvcl9idWYoZXJyLAorCQkJCQkJIF8oImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iKSk7CisJCQlyZXR1cm4gY3VyOworCQl9CisJfQorCisJQlVHKCJ1bmhhbmRsZWQgcHVzaCBzaXR1YXRpb24iKTsKK30KKworY29uc3QgY2hhciAqYnJhbmNoX2dldF9wdXNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmICghYnJhbmNoKQorCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwgXygiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIpKTsKKworCWlmICghYnJhbmNoLT5wdXNoX3RyYWNraW5nX3JlZikKKwkJYnJhbmNoLT5wdXNoX3RyYWNraW5nX3JlZiA9IGJyYW5jaF9nZXRfcHVzaF8xKGJyYW5jaCwgZXJyKTsKKwlyZXR1cm4gYnJhbmNoLT5wdXNoX3RyYWNraW5nX3JlZjsKK30KKworc3RhdGljIGludCBpZ25vcmVfc3ltcmVmX3VwZGF0ZShjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWludCBmbGFnOworCisJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgMCwgTlVMTCwgJmZsYWcpKQorCQlyZXR1cm4gMDsgLyogbm9uLWV4aXN0aW5nIHJlZnMgYXJlIE9LICovCisJcmV0dXJuIChmbGFnICYgUkVGX0lTU1lNUkVGKTsKK30KKworLyoKKyAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbGlzdCBvZiAoc3RydWN0IHJlZikgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YKKyAqIGVhY2ggcmVtb3RlX3JlZiB0aGF0IG1hdGNoZXMgcmVmc3BlYy4gIHJlZnNwZWMgbXVzdCBiZSBhIHBhdHRlcm4uCisgKiBGaWxsIGluIHRoZSBjb3BpZXMnIHBlZXJfcmVmIHRvIGRlc2NyaWJlIHRoZSBsb2NhbCB0cmFja2luZyByZWZzIHRvCisgKiB3aGljaCB0aGV5IG1hcC4gIE9taXQgYW55IHJlZmVyZW5jZXMgdGhhdCB3b3VsZCBtYXAgdG8gYW4gZXhpc3RpbmcKKyAqIGxvY2FsIHN5bWJvbGljIHJlZi4KKyAqLworc3RhdGljIHN0cnVjdCByZWYgKmdldF9leHBhbmRlZF9tYXAoY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJCQkJICAgIGNvbnN0IHN0cnVjdCByZWZzcGVjX2l0ZW0gKnJlZnNwZWMpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCByZWYgKnJldCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnRhaWwgPSAmcmV0OworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJY2hhciAqZXhwbl9uYW1lID0gTlVMTDsKKworCQlpZiAoc3RyY2hyKHJlZi0+bmFtZSwgJ14nKSkKKwkJCWNvbnRpbnVlOyAvKiBhIGRlcmVmZXJlbmNlIGl0ZW0gKi8KKwkJaWYgKG1hdGNoX25hbWVfd2l0aF9wYXR0ZXJuKHJlZnNwZWMtPnNyYywgcmVmLT5uYW1lLAorCQkJCQkgICAgcmVmc3BlYy0+ZHN0LCAmZXhwbl9uYW1lKSAmJgorCQkgICAgIWlnbm9yZV9zeW1yZWZfdXBkYXRlKGV4cG5fbmFtZSkpIHsKKwkJCXN0cnVjdCByZWYgKmNweSA9IGNvcHlfcmVmKHJlZik7CisKKwkJCWNweS0+cGVlcl9yZWYgPSBhbGxvY19yZWYoZXhwbl9uYW1lKTsKKwkJCWlmIChyZWZzcGVjLT5mb3JjZSkKKwkJCQljcHktPnBlZXJfcmVmLT5mb3JjZSA9IDE7CisJCQkqdGFpbCA9IGNweTsKKwkJCXRhaWwgPSAmY3B5LT5uZXh0OworCQl9CisJCWZyZWUoZXhwbl9uYW1lKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZiAqZmluZF9yZWZfYnlfbmFtZV9hYmJyZXYoY29uc3Qgc3RydWN0IHJlZiAqcmVmcywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWY7CisJY29uc3Qgc3RydWN0IHJlZiAqYmVzdF9tYXRjaCA9IE5VTEw7CisJaW50IGJlc3Rfc2NvcmUgPSAwOworCisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpbnQgc2NvcmUgPSByZWZuYW1lX21hdGNoKG5hbWUsIHJlZi0+bmFtZSk7CisKKwkJaWYgKGJlc3Rfc2NvcmUgPCBzY29yZSkgeworCQkJYmVzdF9tYXRjaCA9IHJlZjsKKwkJCWJlc3Rfc2NvcmUgPSBzY29yZTsKKwkJfQorCX0KKwlyZXR1cm4gYmVzdF9tYXRjaDsKK30KKworc3RydWN0IHJlZiAqZ2V0X3JlbW90ZV9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmID0gZmluZF9yZWZfYnlfbmFtZV9hYmJyZXYocmVtb3RlX3JlZnMsIG5hbWUpOworCisJaWYgKCFyZWYpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGNvcHlfcmVmKHJlZik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfbG9jYWxfcmVmKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFuYW1lIHx8IG5hbWVbMF0gPT0gJ1wwJykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvIikpCisJCXJldHVybiBhbGxvY19yZWYobmFtZSk7CisKKwlpZiAoc3RhcnRzX3dpdGgobmFtZSwgImhlYWRzLyIpIHx8CisJICAgIHN0YXJ0c193aXRoKG5hbWUsICJ0YWdzLyIpIHx8CisJICAgIHN0YXJ0c193aXRoKG5hbWUsICJyZW1vdGVzLyIpKQorCQlyZXR1cm4gYWxsb2NfcmVmX3dpdGhfcHJlZml4KCJyZWZzLyIsIDUsIG5hbWUpOworCisJcmV0dXJuIGFsbG9jX3JlZl93aXRoX3ByZWZpeCgicmVmcy9oZWFkcy8iLCAxMSwgbmFtZSk7Cit9CisKK2ludCBnZXRfZmV0Y2hfbWFwKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCQkgIGNvbnN0IHN0cnVjdCByZWZzcGVjX2l0ZW0gKnJlZnNwZWMsCisJCSAgc3RydWN0IHJlZiAqKip0YWlsLAorCQkgIGludCBtaXNzaW5nX29rKQoreworCXN0cnVjdCByZWYgKnJlZl9tYXAsICoqcm1wOworCisJaWYgKHJlZnNwZWMtPnBhdHRlcm4pIHsKKwkJcmVmX21hcCA9IGdldF9leHBhbmRlZF9tYXAocmVtb3RlX3JlZnMsIHJlZnNwZWMpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSByZWZzcGVjLT5zcmNbMF0gPyByZWZzcGVjLT5zcmMgOiAiSEVBRCI7CisKKwkJaWYgKHJlZnNwZWMtPmV4YWN0X3NoYTEpIHsKKwkJCXJlZl9tYXAgPSBhbGxvY19yZWYobmFtZSk7CisJCQlnZXRfb2lkX2hleChuYW1lLCAmcmVmX21hcC0+b2xkX29pZCk7CisJCQlyZWZfbWFwLT5leGFjdF9vaWQgPSAxOworCQl9IGVsc2UgeworCQkJcmVmX21hcCA9IGdldF9yZW1vdGVfcmVmKHJlbW90ZV9yZWZzLCBuYW1lKTsKKwkJfQorCQlpZiAoIW1pc3Npbmdfb2sgJiYgIXJlZl9tYXApCisJCQlkaWUoXygiY291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIiksIG5hbWUpOworCQlpZiAocmVmX21hcCkgeworCQkJcmVmX21hcC0+cGVlcl9yZWYgPSBnZXRfbG9jYWxfcmVmKHJlZnNwZWMtPmRzdCk7CisJCQlpZiAocmVmX21hcC0+cGVlcl9yZWYgJiYgcmVmc3BlYy0+Zm9yY2UpCisJCQkJcmVmX21hcC0+cGVlcl9yZWYtPmZvcmNlID0gMTsKKwkJfQorCX0KKworCWZvciAocm1wID0gJnJlZl9tYXA7ICpybXA7ICkgeworCQlpZiAoKCpybXApLT5wZWVyX3JlZikgeworCQkJaWYgKCFzdGFydHNfd2l0aCgoKnJtcCktPnBlZXJfcmVmLT5uYW1lLCAicmVmcy8iKSB8fAorCQkJICAgIGNoZWNrX3JlZm5hbWVfZm9ybWF0KCgqcm1wKS0+cGVlcl9yZWYtPm5hbWUsIDApKSB7CisJCQkJc3RydWN0IHJlZiAqaWdub3JlID0gKnJtcDsKKwkJCQllcnJvcihfKCIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiKSwKKwkJCQkgICAgICAoKnJtcCktPnBlZXJfcmVmLT5uYW1lKTsKKwkJCQkqcm1wID0gKCpybXApLT5uZXh0OworCQkJCWZyZWUoaWdub3JlLT5wZWVyX3JlZik7CisJCQkJZnJlZShpZ25vcmUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXJtcCA9ICYoKCpybXApLT5uZXh0KTsKKwl9CisKKwlpZiAocmVmX21hcCkKKwkJdGFpbF9saW5rX3JlZihyZWZfbWFwLCB0YWlsKTsKKworCXJldHVybiAwOworfQorCitpbnQgcmVzb2x2ZV9yZW1vdGVfc3ltcmVmKHN0cnVjdCByZWYgKnJlZiwgc3RydWN0IHJlZiAqbGlzdCkKK3sKKwlpZiAoIXJlZi0+c3ltcmVmKQorCQlyZXR1cm4gMDsKKwlmb3IgKDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJCWlmICghc3RyY21wKHJlZi0+c3ltcmVmLCBsaXN0LT5uYW1lKSkgeworCQkJb2lkY3B5KCZyZWYtPm9sZF9vaWQsICZsaXN0LT5vbGRfb2lkKTsKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBjb21taXQgYWhlYWQvYmVoaW5kIHZhbHVlcyBmb3IgdGhlIHBhaXIgYnJhbmNoX25hbWUsIGJhc2UuCisgKgorICogSWYgYWJmIGlzIEFIRUFEX0JFSElORF9GVUxMLCBjb21wdXRlIHRoZSBmdWxsIGFoZWFkL2JlaGluZCBhbmQgcmV0dXJuIHRoZQorICogY291bnRzIGluICpudW1fb3VycyBhbmQgKm51bV90aGVpcnMuICBJZiBhYmYgaXMgQUhFQURfQkVISU5EX1FVSUNLLCBza2lwCisgKiB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgYS9iIGNvbXB1dGF0aW9uICgqbnVtX291cnMgYW5kICpudW1fdGhlaXJzIGFyZQorICogc2V0IHRvIHplcm8pLgorICoKKyAqIFJldHVybnMgLTEgaWYgbnVtX291cnMgYW5kIG51bV90aGVpcnMgY291bGQgbm90IGJlIGZpbGxlZCBpbiAoZS5nLiwgcmVmCisgKiBkb2VzIG5vdCBleGlzdCkuICBSZXR1cm5zIDAgaWYgdGhlIGNvbW1pdHMgYXJlIGlkZW50aWNhbC4gIFJldHVybnMgMSBpZgorICogY29tbWl0cyBhcmUgZGlmZmVyZW50LgorICovCisKK3N0YXRpYyBpbnQgc3RhdF9icmFuY2hfcGFpcihjb25zdCBjaGFyICpicmFuY2hfbmFtZSwgY29uc3QgY2hhciAqYmFzZSwKKwkJCSAgICAgaW50ICpudW1fb3VycywgaW50ICpudW1fdGhlaXJzLAorCQkJICAgICBlbnVtIGFoZWFkX2JlaGluZF9mbGFncyBhYmYpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbW1pdCAqb3VycywgKnRoZWlyczsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCisJLyogQ2Fubm90IHN0YXQgaWYgd2hhdCB3ZSB1c2VkIHRvIGJ1aWxkIG9uIG5vIGxvbmdlciBleGlzdHMgKi8KKwlpZiAocmVhZF9yZWYoYmFzZSwgJm9pZCkpCisJCXJldHVybiAtMTsKKwl0aGVpcnMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJaWYgKCF0aGVpcnMpCisJCXJldHVybiAtMTsKKworCWlmIChyZWFkX3JlZihicmFuY2hfbmFtZSwgJm9pZCkpCisJCXJldHVybiAtMTsKKwlvdXJzID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UodGhlX3JlcG9zaXRvcnksICZvaWQpOworCWlmICghb3VycykKKwkJcmV0dXJuIC0xOworCisJKm51bV90aGVpcnMgPSAqbnVtX291cnMgPSAwOworCisJLyogYXJlIHdlIHRoZSBzYW1lPyAqLworCWlmICh0aGVpcnMgPT0gb3VycykKKwkJcmV0dXJuIDA7CisJaWYgKGFiZiA9PSBBSEVBRF9CRUhJTkRfUVVJQ0spCisJCXJldHVybiAxOworCWlmIChhYmYgIT0gQUhFQURfQkVISU5EX0ZVTEwpCisJCUJVRygic3RhdF9icmFuY2hfcGFpcjogaW52YWxpZCBhYmYgJyVkJyIsIGFiZik7CisKKwkvKiBSdW4gInJldi1saXN0IC0tbGVmdC1yaWdodCBvdXJzLi4udGhlaXJzIiBpbnRlcm5hbGx5Li4uICovCisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiIik7IC8qIGlnbm9yZWQgKi8KKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLWxlZnQtcmlnaHQiKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZhcmd2LCAiJXMuLi4lcyIsCisJCQkgb2lkX3RvX2hleCgmb3Vycy0+b2JqZWN0Lm9pZCksCisJCQkgb2lkX3RvX2hleCgmdGhlaXJzLT5vYmplY3Qub2lkKSk7CisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS0iKTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXZzLCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMoYXJndi5hcmdjLCBhcmd2LmFyZ3YsICZyZXZzLCBOVUxMKTsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworCisJLyogLi4uIGFuZCBjb3VudCB0aGUgY29tbWl0cyBvbiBlYWNoIHNpZGUuICovCisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IGdldF9yZXZpc2lvbigmcmV2cyk7CisJCWlmICghYykKKwkJCWJyZWFrOworCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQkoKm51bV9vdXJzKSsrOworCQllbHNlCisJCQkoKm51bV90aGVpcnMpKys7CisJfQorCisJLyogY2xlYXIgb2JqZWN0IGZsYWdzIHNtdWRnZWQgYnkgdGhlIGFib3ZlIHRyYXZlcnNhbCAqLworCWNsZWFyX2NvbW1pdF9tYXJrcyhvdXJzLCBBTExfUkVWX0ZMQUdTKTsKKwljbGVhcl9jb21taXRfbWFya3ModGhlaXJzLCBBTExfUkVWX0ZMQUdTKTsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCXJldHVybiAxOworfQorCisvKgorICogTG9va3VwIHRoZSB0cmFja2luZyBicmFuY2ggZm9yIHRoZSBnaXZlbiBicmFuY2ggYW5kIGlmIHByZXNlbnQsIG9wdGlvbmFsbHkKKyAqIGNvbXB1dGUgdGhlIGNvbW1pdCBhaGVhZC9iZWhpbmQgdmFsdWVzIGZvciB0aGUgcGFpci4KKyAqCisgKiBJZiBmb3JfcHVzaCBpcyB0cnVlLCB0aGUgdHJhY2tpbmcgYnJhbmNoIHJlZmVycyB0byB0aGUgcHVzaCBicmFuY2gsCisgKiBvdGhlcndpc2UgaXQgcmVmZXJzIHRvIHRoZSB1cHN0cmVhbSBicmFuY2guCisgKgorICogVGhlIG5hbWUgb2YgdGhlIHRyYWNraW5nIGJyYW5jaCAob3IgTlVMTCBpZiBpdCBpcyBub3QgZGVmaW5lZCkgaXMKKyAqIHJldHVybmVkIHZpYSAqdHJhY2tpbmdfbmFtZSwgaWYgaXQgaXMgbm90IGl0c2VsZiBOVUxMLgorICoKKyAqIElmIGFiZiBpcyBBSEVBRF9CRUhJTkRfRlVMTCwgY29tcHV0ZSB0aGUgZnVsbCBhaGVhZC9iZWhpbmQgYW5kIHJldHVybiB0aGUKKyAqIGNvdW50cyBpbiAqbnVtX291cnMgYW5kICpudW1fdGhlaXJzLiAgSWYgYWJmIGlzIEFIRUFEX0JFSElORF9RVUlDSywgc2tpcAorICogdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIGEvYiBjb21wdXRhdGlvbiAoKm51bV9vdXJzIGFuZCAqbnVtX3RoZWlycyBhcmUKKyAqIHNldCB0byB6ZXJvKS4KKyAqCisgKiBSZXR1cm5zIC0xIGlmIG51bV9vdXJzIGFuZCBudW1fdGhlaXJzIGNvdWxkIG5vdCBiZSBmaWxsZWQgaW4gKGUuZy4sIG5vCisgKiB1cHN0cmVhbSBkZWZpbmVkLCBvciByZWYgZG9lcyBub3QgZXhpc3QpLiAgUmV0dXJucyAwIGlmIHRoZSBjb21taXRzIGFyZQorICogaWRlbnRpY2FsLiAgUmV0dXJucyAxIGlmIGNvbW1pdHMgYXJlIGRpZmZlcmVudC4KKyAqLworaW50IHN0YXRfdHJhY2tpbmdfaW5mbyhzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIGludCAqbnVtX291cnMsIGludCAqbnVtX3RoZWlycywKKwkJICAgICAgIGNvbnN0IGNoYXIgKip0cmFja2luZ19uYW1lLCBpbnQgZm9yX3B1c2gsCisJCSAgICAgICBlbnVtIGFoZWFkX2JlaGluZF9mbGFncyBhYmYpCit7CisJY29uc3QgY2hhciAqYmFzZTsKKworCS8qIENhbm5vdCBzdGF0IHVubGVzcyB3ZSBhcmUgbWFya2VkIHRvIGJ1aWxkIG9uIHRvcCBvZiBzb21lYm9keSBlbHNlLiAqLworCWJhc2UgPSBmb3JfcHVzaCA/IGJyYW5jaF9nZXRfcHVzaChicmFuY2gsIE5VTEwpIDoKKwkJYnJhbmNoX2dldF91cHN0cmVhbShicmFuY2gsIE5VTEwpOworCWlmICh0cmFja2luZ19uYW1lKQorCQkqdHJhY2tpbmdfbmFtZSA9IGJhc2U7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gc3RhdF9icmFuY2hfcGFpcihicmFuY2gtPnJlZm5hbWUsIGJhc2UsIG51bV9vdXJzLCBudW1fdGhlaXJzLCBhYmYpOworfQorCisvKgorICogUmV0dXJuIHRydWUgd2hlbiB0aGVyZSBpcyBhbnl0aGluZyB0byByZXBvcnQsIG90aGVyd2lzZSBmYWxzZS4KKyAqLworaW50IGZvcm1hdF90cmFja2luZ19pbmZvKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgZW51bSBhaGVhZF9iZWhpbmRfZmxhZ3MgYWJmKQoreworCWludCBvdXJzLCB0aGVpcnMsIHN0aTsKKwljb25zdCBjaGFyICpmdWxsX2Jhc2U7CisJY2hhciAqYmFzZTsKKwlpbnQgdXBzdHJlYW1faXNfZ29uZSA9IDA7CisKKwlzdGkgPSBzdGF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmb3VycywgJnRoZWlycywgJmZ1bGxfYmFzZSwgMCwgYWJmKTsKKwlpZiAoc3RpIDwgMCkgeworCQlpZiAoIWZ1bGxfYmFzZSkKKwkJCXJldHVybiAwOworCQl1cHN0cmVhbV9pc19nb25lID0gMTsKKwl9CisKKwliYXNlID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoZnVsbF9iYXNlLCAwKTsKKwlpZiAodXBzdHJlYW1faXNfZ29uZSkgeworCQlzdHJidWZfYWRkZihzYiwKKwkJCV8oIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIpLAorCQkJYmFzZSk7CisJCWlmIChhZHZpY2Vfc3RhdHVzX2hpbnRzKQorCQkJc3RyYnVmX2FkZHN0cihzYiwKKwkJCQlfKCIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIpKTsKKwl9IGVsc2UgaWYgKCFzdGkpIHsKKwkJc3RyYnVmX2FkZGYoc2IsCisJCQlfKCJZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJyVzJy5cbiIpLAorCQkJYmFzZSk7CisJfSBlbHNlIGlmIChhYmYgPT0gQUhFQURfQkVISU5EX1FVSUNLKSB7CisJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJICAgIF8oIllvdXIgYnJhbmNoIGFuZCAnJXMnIHJlZmVyIHRvIGRpZmZlcmVudCBjb21taXRzLlxuIiksCisJCQkgICAgYmFzZSk7CisJCWlmIChhZHZpY2Vfc3RhdHVzX2hpbnRzKQorCQkJc3RyYnVmX2FkZGYoc2IsIF8oIiAgKHVzZSBcIiVzXCIgZm9yIGRldGFpbHMpXG4iKSwKKwkJCQkgICAgImdpdCBzdGF0dXMgLS1haGVhZC1iZWhpbmQiKTsKKwl9IGVsc2UgaWYgKCF0aGVpcnMpIHsKKwkJc3RyYnVmX2FkZGYoc2IsCisJCQlRXygiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iLAorCQkJICAgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIsCisJCQkgICBvdXJzKSwKKwkJCWJhc2UsIG91cnMpOworCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsCisJCQkJXygiICAodXNlIFwiZ2l0IHB1c2hcIiB0byBwdWJsaXNoIHlvdXIgbG9jYWwgY29tbWl0cylcbiIpKTsKKwl9IGVsc2UgaWYgKCFvdXJzKSB7CisJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJUV8oIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgIgorCQkJICAgICAgICJhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIiwKKwkJCSAgICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCAiCisJCQkgICAgICAgImFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iLAorCQkJICAgdGhlaXJzKSwKKwkJCWJhc2UsIHRoZWlycyk7CisJCWlmIChhZHZpY2Vfc3RhdHVzX2hpbnRzKQorCQkJc3RyYnVmX2FkZHN0cihzYiwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIpKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihzYiwKKwkJCVFfKCJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorCQkJICAgICAgICJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCAiCisJCQkgICAgICAgInJlc3BlY3RpdmVseS5cbiIsCisJCQkgICAiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKwkJCSAgICAgICAiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsICIKKwkJCSAgICAgICAicmVzcGVjdGl2ZWx5LlxuIiwKKwkJCSAgIG91cnMgKyB0aGVpcnMpLAorCQkJYmFzZSwgb3VycywgdGhlaXJzKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQlzdHJidWZfYWRkc3RyKHNiLAorCQkJCV8oIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIpKTsKKwl9CisJZnJlZShiYXNlKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBvbmVfbG9jYWxfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmICoqKmxvY2FsX3RhaWwgPSBjYl9kYXRhOworCXN0cnVjdCByZWYgKnJlZjsKKworCS8qIHdlIGFscmVhZHkga25vdyBpdCBzdGFydHMgd2l0aCByZWZzLyB0byBnZXQgaGVyZSAqLworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyZWZuYW1lICsgNSwgMCkpCisJCXJldHVybiAwOworCisJcmVmID0gYWxsb2NfcmVmKHJlZm5hbWUpOworCW9pZGNweSgmcmVmLT5uZXdfb2lkLCBvaWQpOworCSoqbG9jYWxfdGFpbCA9IHJlZjsKKwkqbG9jYWxfdGFpbCA9ICZyZWYtPm5leHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZWYgKmdldF9sb2NhbF9oZWFkcyh2b2lkKQoreworCXN0cnVjdCByZWYgKmxvY2FsX3JlZnMgPSBOVUxMLCAqKmxvY2FsX3RhaWwgPSAmbG9jYWxfcmVmczsKKworCWZvcl9lYWNoX3JlZihvbmVfbG9jYWxfcmVmLCAmbG9jYWxfdGFpbCk7CisJcmV0dXJuIGxvY2FsX3JlZnM7Cit9CisKK3N0cnVjdCByZWYgKmd1ZXNzX3JlbW90ZV9oZWFkKGNvbnN0IHN0cnVjdCByZWYgKmhlYWQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJICAgICAgaW50IGFsbCkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyOworCXN0cnVjdCByZWYgKmxpc3QgPSBOVUxMOworCXN0cnVjdCByZWYgKip0YWlsID0gJmxpc3Q7CisKKwlpZiAoIWhlYWQpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBTb21lIHRyYW5zcG9ydHMgc3VwcG9ydCBkaXJlY3RseSBwZWVraW5nIGF0CisJICogd2hlcmUgSEVBRCBwb2ludHM7IGlmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZW4KKwkgKiB3ZSBkb24ndCBoYXZlIHRvIGd1ZXNzLgorCSAqLworCWlmIChoZWFkLT5zeW1yZWYpCisJCXJldHVybiBjb3B5X3JlZihmaW5kX3JlZl9ieV9uYW1lKHJlZnMsIGhlYWQtPnN5bXJlZikpOworCisJLyogSWYgcmVmcy9oZWFkcy9tYXN0ZXIgY291bGQgYmUgcmlnaHQsIGl0IGlzLiAqLworCWlmICghYWxsKSB7CisJCXIgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsICJyZWZzL2hlYWRzL21hc3RlciIpOworCQlpZiAociAmJiBvaWRlcSgmci0+b2xkX29pZCwgJmhlYWQtPm9sZF9vaWQpKQorCQkJcmV0dXJuIGNvcHlfcmVmKHIpOworCX0KKworCS8qIExvb2sgZm9yIGFub3RoZXIgcmVmIHRoYXQgcG9pbnRzIHRoZXJlICovCisJZm9yIChyID0gcmVmczsgcjsgciA9IHItPm5leHQpIHsKKwkJaWYgKHIgIT0gaGVhZCAmJgorCQkgICAgc3RhcnRzX3dpdGgoci0+bmFtZSwgInJlZnMvaGVhZHMvIikgJiYKKwkJICAgIG9pZGVxKCZyLT5vbGRfb2lkLCAmaGVhZC0+b2xkX29pZCkpIHsKKwkJCSp0YWlsID0gY29weV9yZWYocik7CisJCQl0YWlsID0gJigoKnRhaWwpLT5uZXh0KTsKKwkJCWlmICghYWxsKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGxpc3Q7Cit9CisKK3N0cnVjdCBzdGFsZV9oZWFkc19pbmZvIHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9uYW1lczsKKwlzdHJ1Y3QgcmVmICoqc3RhbGVfcmVmc190YWlsOworCXN0cnVjdCByZWZzcGVjICpyczsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3N0YWxlX2hlYWRzX2NiKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RhbGVfaGVhZHNfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHN0cmluZ19saXN0IG1hdGNoZXMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3QgcmVmc3BlY19pdGVtIHF1ZXJ5OworCWludCBpLCBzdGFsZSA9IDE7CisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHN0cnVjdCByZWZzcGVjX2l0ZW0pKTsKKwlxdWVyeS5kc3QgPSAoY2hhciAqKXJlZm5hbWU7CisKKwlxdWVyeV9yZWZzcGVjc19tdWx0aXBsZShpbmZvLT5ycywgJnF1ZXJ5LCAmbWF0Y2hlcyk7CisJaWYgKG1hdGNoZXMubnIgPT0gMCkKKwkJZ290byBjbGVhbl9leGl0OyAvKiBObyBtYXRjaGVzICovCisKKwkvKgorCSAqIElmIHdlIGRpZCBmaW5kIGEgc3VpdGFibGUgcmVmc3BlYyBhbmQgaXQncyBub3QgYSBzeW1yZWYgYW5kCisJICogaXQncyBub3QgaW4gdGhlIGxpc3Qgb2YgcmVmcyB0aGF0IGN1cnJlbnRseSBleGlzdCBpbiB0aGF0CisJICogcmVtb3RlLCB3ZSBjb25zaWRlciBpdCB0byBiZSBzdGFsZS4gSW4gb3JkZXIgdG8gZGVhbCB3aXRoCisJICogb3ZlcmxhcHBpbmcgcmVmc3BlY3MsIHdlIG5lZWQgdG8gZ28gb3ZlciBhbGwgb2YgdGhlCisJICogbWF0Y2hpbmcgcmVmcy4KKwkgKi8KKwlpZiAoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCisJCWdvdG8gY2xlYW5fZXhpdDsKKworCWZvciAoaSA9IDA7IHN0YWxlICYmIGkgPCBtYXRjaGVzLm5yOyBpKyspCisJCWlmIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKGluZm8tPnJlZl9uYW1lcywgbWF0Y2hlcy5pdGVtc1tpXS5zdHJpbmcpKQorCQkJc3RhbGUgPSAwOworCisJaWYgKHN0YWxlKSB7CisJCXN0cnVjdCByZWYgKnJlZiA9IG1ha2VfbGlua2VkX3JlZihyZWZuYW1lLCAmaW5mby0+c3RhbGVfcmVmc190YWlsKTsKKwkJb2lkY3B5KCZyZWYtPm5ld19vaWQsIG9pZCk7CisJfQorCitjbGVhbl9leGl0OgorCXN0cmluZ19saXN0X2NsZWFyKCZtYXRjaGVzLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZiAqZ2V0X3N0YWxlX2hlYWRzKHN0cnVjdCByZWZzcGVjICpycywgc3RydWN0IHJlZiAqZmV0Y2hfbWFwKQoreworCXN0cnVjdCByZWYgKnJlZiwgKnN0YWxlX3JlZnMgPSBOVUxMOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZfbmFtZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdGFsZV9oZWFkc19pbmZvIGluZm87CisKKwlpbmZvLnJlZl9uYW1lcyA9ICZyZWZfbmFtZXM7CisJaW5mby5zdGFsZV9yZWZzX3RhaWwgPSAmc3RhbGVfcmVmczsKKwlpbmZvLnJzID0gcnM7CisJZm9yIChyZWYgPSBmZXRjaF9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlZl9uYW1lcywgcmVmLT5uYW1lKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZyZWZfbmFtZXMpOworCWZvcl9lYWNoX3JlZihnZXRfc3RhbGVfaGVhZHNfY2IsICZpbmZvKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVmX25hbWVzLCAwKTsKKwlyZXR1cm4gc3RhbGVfcmVmczsKK30KKworLyoKKyAqIENvbXBhcmUtYW5kLXN3YXAKKyAqLworc3RhdGljIHZvaWQgY2xlYXJfY2FzX29wdGlvbihzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FzLT5ucjsgaSsrKQorCQlmcmVlKGNhcy0+ZW50cnlbaV0ucmVmbmFtZSk7CisJZnJlZShjYXMtPmVudHJ5KTsKKwltZW1zZXQoY2FzLCAwLCBzaXplb2YoKmNhcykpOworfQorCitzdGF0aWMgc3RydWN0IHB1c2hfY2FzICphZGRfY2FzX2VudHJ5KHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gKmNhcywKKwkJCQkgICAgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICAgIHNpemVfdCByZWZuYW1lbGVuKQoreworCXN0cnVjdCBwdXNoX2NhcyAqZW50cnk7CisJQUxMT0NfR1JPVyhjYXMtPmVudHJ5LCBjYXMtPm5yICsgMSwgY2FzLT5hbGxvYyk7CisJZW50cnkgPSAmY2FzLT5lbnRyeVtjYXMtPm5yKytdOworCW1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOworCWVudHJ5LT5yZWZuYW1lID0geG1lbWR1cHoocmVmbmFtZSwgcmVmbmFtZWxlbik7CisJcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50IHBhcnNlX3B1c2hfY2FzX29wdGlvbihzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXMsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWNvbnN0IGNoYXIgKmNvbG9uOworCXN0cnVjdCBwdXNoX2NhcyAqZW50cnk7CisKKwlpZiAodW5zZXQpIHsKKwkJLyogIi0tbm8tPG9wdGlvbj4iICovCisJCWNsZWFyX2Nhc19vcHRpb24oY2FzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFhcmcpIHsKKwkJLyoganVzdCAiLS08b3B0aW9uPiIgKi8KKwkJY2FzLT51c2VfdHJhY2tpbmdfZm9yX3Jlc3QgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiAiLS08b3B0aW9uPj1yZWZuYW1lIiBvciAiLS08b3B0aW9uPj1yZWZuYW1lOnZhbHVlIiAqLworCWNvbG9uID0gc3RyY2hybnVsKGFyZywgJzonKTsKKwllbnRyeSA9IGFkZF9jYXNfZW50cnkoY2FzLCBhcmcsIGNvbG9uIC0gYXJnKTsKKwlpZiAoISpjb2xvbikKKwkJZW50cnktPnVzZV90cmFja2luZyA9IDE7CisJZWxzZSBpZiAoIWNvbG9uWzFdKQorCQlvaWRjbHIoJmVudHJ5LT5leHBlY3QpOworCWVsc2UgaWYgKGdldF9vaWQoY29sb24gKyAxLCAmZW50cnktPmV4cGVjdCkpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcGFyc2UgZXhwZWN0ZWQgb2JqZWN0IG5hbWUgJyVzJyIpLAorCQkJICAgICBjb2xvbiArIDEpOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2VvcHRfcHVzaF9jYXNfb3B0aW9uKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIHBhcnNlX3B1c2hfY2FzX29wdGlvbihvcHQtPnZhbHVlLCBhcmcsIHVuc2V0KTsKK30KKworaW50IGlzX2VtcHR5X2Nhcyhjb25zdCBzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXMpCit7CisJcmV0dXJuICFjYXMtPnVzZV90cmFja2luZ19mb3JfcmVzdCAmJiAhY2FzLT5ucjsKK30KKworLyoKKyAqIExvb2sgYXQgcmVtb3RlLmZldGNoIHJlZnNwZWMgYW5kIHNlZSBpZiB3ZSBoYXZlIGEgcmVtb3RlCisgKiB0cmFja2luZyBicmFuY2ggZm9yIHRoZSByZWZuYW1lIHRoZXJlLiAgRmlsbCBpdHMgY3VycmVudAorICogdmFsdWUgaW4gc2hhMVtdLgorICogSWYgd2UgY2Fubm90IGRvIHNvLCByZXR1cm4gbmVnYXRpdmUgdG8gc2lnbmFsIGFuIGVycm9yLgorICovCitzdGF0aWMgaW50IHJlbW90ZV90cmFja2luZyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY2hhciAqZHN0OworCisJZHN0ID0gYXBwbHlfcmVmc3BlY3MoJnJlbW90ZS0+ZmV0Y2gsIHJlZm5hbWUpOworCWlmICghZHN0KQorCQlyZXR1cm4gLTE7IC8qIG5vIHRyYWNraW5nIHJlZiBmb3IgcmVmbmFtZSBhdCByZW1vdGUgKi8KKwlpZiAocmVhZF9yZWYoZHN0LCBvaWQpKQorCQlyZXR1cm4gLTE7IC8qIHdlIGtub3cgd2hhdCB0aGUgdHJhY2tpbmcgcmVmIGlzIGJ1dCB3ZSBjYW5ub3QgcmVhZCBpdCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhcHBseV9jYXMoc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqY2FzLAorCQkgICAgICBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsCisJCSAgICAgIHN0cnVjdCByZWYgKnJlZikKK3sKKwlpbnQgaTsKKworCS8qIEZpbmQgYW4gZXhwbGljaXQgLS08b3B0aW9uPj08bmFtZT5bOjx2YWx1ZT5dIGVudHJ5ICovCisJZm9yIChpID0gMDsgaSA8IGNhcy0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcHVzaF9jYXMgKmVudHJ5ID0gJmNhcy0+ZW50cnlbaV07CisJCWlmICghcmVmbmFtZV9tYXRjaChlbnRyeS0+cmVmbmFtZSwgcmVmLT5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlyZWYtPmV4cGVjdF9vbGRfc2hhMSA9IDE7CisJCWlmICghZW50cnktPnVzZV90cmFja2luZykKKwkJCW9pZGNweSgmcmVmLT5vbGRfb2lkX2V4cGVjdCwgJmVudHJ5LT5leHBlY3QpOworCQllbHNlIGlmIChyZW1vdGVfdHJhY2tpbmcocmVtb3RlLCByZWYtPm5hbWUsICZyZWYtPm9sZF9vaWRfZXhwZWN0KSkKKwkJCW9pZGNscigmcmVmLT5vbGRfb2lkX2V4cGVjdCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBBcmUgd2UgdXNpbmcgIi0tPG9wdGlvbj4iIHRvIGNvdmVyIGFsbD8gKi8KKwlpZiAoIWNhcy0+dXNlX3RyYWNraW5nX2Zvcl9yZXN0KQorCQlyZXR1cm47CisKKwlyZWYtPmV4cGVjdF9vbGRfc2hhMSA9IDE7CisJaWYgKHJlbW90ZV90cmFja2luZyhyZW1vdGUsIHJlZi0+bmFtZSwgJnJlZi0+b2xkX29pZF9leHBlY3QpKQorCQlvaWRjbHIoJnJlZi0+b2xkX29pZF9leHBlY3QpOworfQorCit2b2lkIGFwcGx5X3B1c2hfY2FzKHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gKmNhcywKKwkJICAgIHN0cnVjdCByZW1vdGUgKnJlbW90ZSwKKwkJICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJYXBwbHlfY2FzKGNhcywgcmVtb3RlLCByZWYpOworfQpkaWZmIC0tZ2l0IGEvcmVtb3RlLmggYi9yZW1vdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWQ4NzE5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVtb3RlLmgKQEAgLTAsMCArMSwzNDggQEAKKyNpZm5kZWYgUkVNT1RFX0gKKyNkZWZpbmUgUkVNT1RFX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJyZWZzcGVjLmgiCisKKy8qKgorICogVGhlIEFQSSBnaXZlcyBhY2Nlc3MgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byByZW1vdGVzLiBJdCBoYW5kbGVzCisgKiBhbGwgdGhyZWUgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zIGhpc3RvcmljYWxseSBhbmQgY3VycmVudGx5IHVzZWQgYnkgR2l0LAorICogYW5kIHByZXNlbnRzIHRoZSBpbmZvcm1hdGlvbiBpbiBhIHVuaWZvcm0gZmFzaGlvbi4gTm90ZSB0aGF0IHRoZSBjb2RlIGFsc28KKyAqIGhhbmRsZXMgcGxhaW4gVVJMcyB3aXRob3V0IGFueSBjb25maWd1cmF0aW9uLCBnaXZpbmcgdGhlbSBqdXN0IHRoZSBkZWZhdWx0CisgKiBpbmZvcm1hdGlvbi4KKyAqLworCitlbnVtIHsKKwlSRU1PVEVfVU5DT05GSUdVUkVEID0gMCwKKwlSRU1PVEVfQ09ORklHLAorCVJFTU9URV9SRU1PVEVTLAorCVJFTU9URV9CUkFOQ0hFUworfTsKKworc3RydWN0IHJlbW90ZSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCisJLyogVGhlIHVzZXIncyBuaWNrbmFtZSBmb3IgdGhlIHJlbW90ZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlpbnQgb3JpZ2luLCBjb25maWd1cmVkX2luX3JlcG87CisKKwljb25zdCBjaGFyICpmb3JlaWduX3ZjczsKKworCS8qIEFuIGFycmF5IG9mIGFsbCBvZiB0aGUgdXJsX25yIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZSAqLworCWNvbnN0IGNoYXIgKip1cmw7CisKKwlpbnQgdXJsX25yOworCWludCB1cmxfYWxsb2M7CisKKwkvKiBBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHB1c2h1cmxfbnIgcHVzaCBVUkxzIGNvbmZpZ3VyZWQgZm9yIHRoZSByZW1vdGUgKi8KKwljb25zdCBjaGFyICoqcHVzaHVybDsKKworCWludCBwdXNodXJsX25yOworCWludCBwdXNodXJsX2FsbG9jOworCisJc3RydWN0IHJlZnNwZWMgcHVzaDsKKworCXN0cnVjdCByZWZzcGVjIGZldGNoOworCisJLyoKKwkgKiBUaGUgc2V0dGluZyBmb3Igd2hldGhlciB0byBmZXRjaCB0YWdzIChhcyBhIHNlcGFyYXRlIHJ1bGUgZnJvbSB0aGUKKwkgKiBjb25maWd1cmVkIHJlZnNwZWNzKTsKKwkgKiAtMSB0byBuZXZlciBmZXRjaCB0YWdzCisJICogMCB0byBhdXRvLWZvbGxvdyB0YWdzIG9uIGhldXJpc3RpYyAoZGVmYXVsdCkKKwkgKiAxIHRvIGFsd2F5cyBhdXRvLWZvbGxvdyB0YWdzCisJICogMiB0byBhbHdheXMgZmV0Y2ggdGFncworCSAqLworCWludCBmZXRjaF90YWdzOworCisJaW50IHNraXBfZGVmYXVsdF91cGRhdGU7CisJaW50IG1pcnJvcjsKKwlpbnQgcHJ1bmU7CisJaW50IHBydW5lX3RhZ3M7CisKKwkvKioKKwkgKiBUaGUgY29uZmlndXJlZCBoZWxwZXIgcHJvZ3JhbXMgdG8gcnVuIG9uIHRoZSByZW1vdGUgc2lkZSwgZm9yCisJICogR2l0LW5hdGl2ZSBwcm90b2NvbHMuCisJICovCisJY29uc3QgY2hhciAqcmVjZWl2ZXBhY2s7CisJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKKworCS8qIFRoZSBwcm94eSB0byB1c2UgZm9yIGN1cmwgKGh0dHAsIGh0dHBzLCBmdHAsIGV0Yy4pIFVSTHMuICovCisJY2hhciAqaHR0cF9wcm94eTsKKworCS8qIFRoZSBtZXRob2QgdXNlZCBmb3IgYXV0aGVudGljYXRpbmcgYWdhaW5zdCBgaHR0cF9wcm94eWAuICovCisJY2hhciAqaHR0cF9wcm94eV9hdXRobWV0aG9kOworfTsKKworLyoqCisgKiBzdHJ1Y3QgcmVtb3RlcyBjYW4gYmUgZm91bmQgYnkgbmFtZSB3aXRoIHJlbW90ZV9nZXQoKS4KKyAqIHJlbW90ZV9nZXQoTlVMTCkgd2lsbCByZXR1cm4gdGhlIGRlZmF1bHQgcmVtb3RlLCBnaXZlbiB0aGUgY3VycmVudCBicmFuY2gKKyAqIGFuZCBjb25maWd1cmF0aW9uLgorICovCitzdHJ1Y3QgcmVtb3RlICpyZW1vdGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOworCitzdHJ1Y3QgcmVtb3RlICpwdXNocmVtb3RlX2dldChjb25zdCBjaGFyICpuYW1lKTsKK2ludCByZW1vdGVfaXNfY29uZmlndXJlZChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGludCBpbl9yZXBvKTsKKwordHlwZWRlZiBpbnQgZWFjaF9yZW1vdGVfZm4oc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpwcml2KTsKKworLyogaXRlcmF0ZSB0aHJvdWdoIHN0cnVjdCByZW1vdGVzICovCitpbnQgZm9yX2VhY2hfcmVtb3RlKGVhY2hfcmVtb3RlX2ZuIGZuLCB2b2lkICpwcml2KTsKKworaW50IHJlbW90ZV9oYXNfdXJsKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKTsKKworc3RydWN0IHJlZiB7CisJc3RydWN0IHJlZiAqbmV4dDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9sZF9vaWQ7CisJc3RydWN0IG9iamVjdF9pZCBuZXdfb2lkOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZF9leHBlY3Q7IC8qIHVzZWQgYnkgZXhwZWN0LW9sZCAqLworCWNoYXIgKnN5bXJlZjsKKwl1bnNpZ25lZCBpbnQKKwkJZm9yY2U6MSwKKwkJZm9yY2VkX3VwZGF0ZToxLAorCQlleHBlY3Rfb2xkX3NoYTE6MSwKKwkJZXhhY3Rfb2lkOjEsCisJCWRlbGV0aW9uOjE7CisKKwllbnVtIHsKKwkJUkVGX05PVF9NQVRDSEVEID0gMCwgLyogaW5pdGlhbCB2YWx1ZSAqLworCQlSRUZfTUFUQ0hFRCwKKwkJUkVGX1VOQURWRVJUSVNFRF9OT1RfQUxMT1dFRAorCX0gbWF0Y2hfc3RhdHVzOworCisJLyoKKwkgKiBPcmRlciBpcyBpbXBvcnRhbnQgaGVyZSwgYXMgd2Ugd3JpdGUgdG8gRkVUQ0hfSEVBRAorCSAqIGluIG51bWVyaWMgb3JkZXIuIEFuZCB0aGUgZGVmYXVsdCBOT1RfRk9SX01FUkdFCisJICogc2hvdWxkIGJlIDAsIHNvIHRoYXQgeGNhbGxvYydkIHN0cnVjdHVyZXMgZ2V0IGl0CisJICogYnkgZGVmYXVsdC4KKwkgKi8KKwllbnVtIHsKKwkJRkVUQ0hfSEVBRF9NRVJHRSA9IC0xLAorCQlGRVRDSF9IRUFEX05PVF9GT1JfTUVSR0UgPSAwLAorCQlGRVRDSF9IRUFEX0lHTk9SRSA9IDEKKwl9IGZldGNoX2hlYWRfc3RhdHVzOworCisJZW51bSB7CisJCVJFRl9TVEFUVVNfTk9ORSA9IDAsCisJCVJFRl9TVEFUVVNfT0ssCisJCVJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJELAorCQlSRUZfU1RBVFVTX1JFSkVDVF9BTFJFQURZX0VYSVNUUywKKwkJUkVGX1NUQVRVU19SRUpFQ1RfTk9ERUxFVEUsCisJCVJFRl9TVEFUVVNfUkVKRUNUX0ZFVENIX0ZJUlNULAorCQlSRUZfU1RBVFVTX1JFSkVDVF9ORUVEU19GT1JDRSwKKwkJUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEUsCisJCVJFRl9TVEFUVVNfUkVKRUNUX1NIQUxMT1csCisJCVJFRl9TVEFUVVNfVVBUT0RBVEUsCisJCVJFRl9TVEFUVVNfUkVNT1RFX1JFSkVDVCwKKwkJUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JULAorCQlSRUZfU1RBVFVTX0FUT01JQ19QVVNIX0ZBSUxFRAorCX0gc3RhdHVzOworCWNoYXIgKnJlbW90ZV9zdGF0dXM7CisJc3RydWN0IHJlZiAqcGVlcl9yZWY7IC8qIHdoZW4gcmVuYW1pbmcgKi8KKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKKyNkZWZpbmUgUkVGX05PUk1BTAkoMXUgPDwgMCkKKyNkZWZpbmUgUkVGX0hFQURTCSgxdSA8PCAxKQorI2RlZmluZSBSRUZfVEFHUwkoMXUgPDwgMikKKworc3RydWN0IHJlZiAqZmluZF9yZWZfYnlfbmFtZShjb25zdCBzdHJ1Y3QgcmVmICpsaXN0LCBjb25zdCBjaGFyICpuYW1lKTsKKworc3RydWN0IHJlZiAqYWxsb2NfcmVmKGNvbnN0IGNoYXIgKm5hbWUpOworc3RydWN0IHJlZiAqY29weV9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVmKTsKK3N0cnVjdCByZWYgKmNvcHlfcmVmX2xpc3QoY29uc3Qgc3RydWN0IHJlZiAqcmVmKTsKK3ZvaWQgc29ydF9yZWZfbGlzdChzdHJ1Y3QgcmVmICoqLCBpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CitpbnQgY291bnRfcmVmc3BlY19tYXRjaChjb25zdCBjaGFyICosIHN0cnVjdCByZWYgKnJlZnMsIHN0cnVjdCByZWYgKiptYXRjaGVkX3JlZik7CitpbnQgcmVmX2NvbXBhcmVfbmFtZShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisKK2ludCBjaGVja19yZWZfdHlwZShjb25zdCBzdHJ1Y3QgcmVmICpyZWYsIGludCBmbGFncyk7CisKKy8qCisgKiBGcmVlIGEgc2luZ2xlIHJlZiBhbmQgaXRzIHBlZXIsIG9yIGFuIGVudGlyZSBsaXN0IG9mIHJlZnMgYW5kIHRoZWlyIHBlZXJzLAorICogcmVzcGVjdGl2ZWx5LgorICovCit2b2lkIGZyZWVfb25lX3JlZihzdHJ1Y3QgcmVmICpyZWYpOwordm9pZCBmcmVlX3JlZnMoc3RydWN0IHJlZiAqcmVmKTsKKworc3RydWN0IG9pZF9hcnJheTsKK3N0cnVjdCBwYWNrZXRfcmVhZGVyOworc3RydWN0IGFyZ3ZfYXJyYXk7CitzdHJ1Y3Qgc3RyaW5nX2xpc3Q7CitzdHJ1Y3QgcmVmICoqZ2V0X3JlbW90ZV9oZWFkcyhzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJICAgICAgc3RydWN0IHJlZiAqKmxpc3QsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCSAgICAgIHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhX2hhdmUsCisJCQkgICAgICBzdHJ1Y3Qgb2lkX2FycmF5ICpzaGFsbG93X3BvaW50cyk7CisKKy8qIFVzZWQgZm9yIHByb3RvY29sIHYyIGluIG9yZGVyIHRvIHJldHJpZXZlIHJlZnMgZnJvbSBhIHJlbW90ZSAqLworc3RydWN0IHJlZiAqKmdldF9yZW1vdGVfcmVmcyhpbnQgZmRfb3V0LCBzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLAorCQkJICAgICBzdHJ1Y3QgcmVmICoqbGlzdCwgaW50IGZvcl9wdXNoLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqcmVmX3ByZWZpeGVzLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNlcnZlcl9vcHRpb25zKTsKKworaW50IHJlc29sdmVfcmVtb3RlX3N5bXJlZihzdHJ1Y3QgcmVmICpyZWYsIHN0cnVjdCByZWYgKmxpc3QpOworCisvKgorICogUmVtb3ZlIGFuZCBmcmVlIGFsbCBidXQgdGhlIGZpcnN0IG9mIGFueSBlbnRyaWVzIGluIHRoZSBpbnB1dCBsaXN0CisgKiB0aGF0IG1hcCB0aGUgc2FtZSByZW1vdGUgcmVmZXJlbmNlIHRvIHRoZSBzYW1lIGxvY2FsIHJlZmVyZW5jZS4gIElmCisgKiB0aGVyZSBhcmUgdHdvIGVudHJpZXMgdGhhdCBtYXAgZGlmZmVyZW50IHJlbW90ZSByZWZlcmVuY2VzIHRvIHRoZQorICogc2FtZSBsb2NhbCByZWZlcmVuY2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZGllLiAgUmV0dXJuIGEKKyAqIHBvaW50ZXIgdG8gdGhlIGhlYWQgb2YgdGhlIHJlc3VsdGluZyBsaXN0LgorICovCitzdHJ1Y3QgcmVmICpyZWZfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IHJlZiAqcmVmX21hcCk7CisKK2ludCBxdWVyeV9yZWZzcGVjcyhzdHJ1Y3QgcmVmc3BlYyAqcnMsIHN0cnVjdCByZWZzcGVjX2l0ZW0gKnF1ZXJ5KTsKK2NoYXIgKmFwcGx5X3JlZnNwZWNzKHN0cnVjdCByZWZzcGVjICpycywgY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBjaGVja19wdXNoX3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmc3BlYyAqcnMpOworaW50IG1hdGNoX3B1c2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWYgKipkc3QsCisJCSAgICBzdHJ1Y3QgcmVmc3BlYyAqcnMsIGludCBmbGFncyk7Cit2b2lkIHNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgc2VuZF9taXJyb3IsCisJaW50IGZvcmNlX3VwZGF0ZSk7CisKKy8qCisgKiBHaXZlbiBhIGxpc3Qgb2YgdGhlIHJlbW90ZSByZWZzIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGluZ3MgdG8KKyAqIGZldGNoLCBtYWtlcyBhIChzZXBhcmF0ZSkgbGlzdCBvZiB0aGUgcmVmcyB0byBmZXRjaCBhbmQgdGhlIGxvY2FsCisgKiByZWZzIHRvIHN0b3JlIGludG8uCisgKgorICogKnRhaWwgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIHRhaWwgcG9pbnRlciBvZiB0aGUgbGlzdCBvZiByZXN1bHRzCisgKiBiZWZvcmVoYW5kLCBhbmQgd2lsbCBiZSBzZXQgdG8gdGhlIHRhaWwgcG9pbnRlciBvZiB0aGUgbGlzdCBvZgorICogcmVzdWx0cyBhZnRlcndhcmQuCisgKgorICogbWlzc2luZ19vayBpcyB1c3VhbGx5IGZhbHNlLCBidXQgd2hlbiB3ZSBhcmUgYWRkaW5nIGJyYW5jaC4kbmFtZS5tZXJnZQorICogaXQgaXMgT2sgaWYgdGhlIGJyYW5jaCBpcyBub3QgYXQgdGhlIHJlbW90ZSBhbnltb3JlLgorICovCitpbnQgZ2V0X2ZldGNoX21hcChjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgY29uc3Qgc3RydWN0IHJlZnNwZWNfaXRlbSAqcmVmc3BlYywKKwkJICBzdHJ1Y3QgcmVmICoqKnRhaWwsIGludCBtaXNzaW5nX29rKTsKKworc3RydWN0IHJlZiAqZ2V0X3JlbW90ZV9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKgorICogRm9yIHRoZSBnaXZlbiByZW1vdGUsIHJlYWRzIHRoZSByZWZzcGVjJ3Mgc3JjIGFuZCBzZXRzIHRoZSBvdGhlciBmaWVsZHMuCisgKi8KK2ludCByZW1vdGVfZmluZF90cmFja2luZyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWZzcGVjX2l0ZW0gKnJlZnNwZWMpOworCisvKioKKyAqIHN0cnVjdCBicmFuY2ggaG9sZHMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgYnJhbmNoLiBJdCBjYW4gYmUgbG9va2VkIHVwIHdpdGgKKyAqIGJyYW5jaF9nZXQobmFtZSkgZm9yICJyZWZzL2hlYWRzL3tuYW1lfSIsIG9yIHdpdGggYnJhbmNoX2dldChOVUxMKSBmb3IgSEVBRC4KKyAqLworc3RydWN0IGJyYW5jaCB7CisKKwkvKiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgYnJhbmNoLiAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKiBUaGUgZnVsbCBwYXRoIGZvciB0aGUgYnJhbmNoIHJlZi4gKi8KKwljb25zdCBjaGFyICpyZWZuYW1lOworCisJLyogVGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBsaXN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICovCisJY29uc3QgY2hhciAqcmVtb3RlX25hbWU7CisKKwljb25zdCBjaGFyICpwdXNocmVtb3RlX25hbWU7CisKKwkvKiBBbiBhcnJheSBvZiB0aGUgIm1lcmdlIiBsaW5lcyBpbiB0aGUgY29uZmlndXJhdGlvbi4gKi8KKwljb25zdCBjaGFyICoqbWVyZ2VfbmFtZTsKKworCS8qKgorCSAqIEFuIGFycmF5IG9mIHRoZSBzdHJ1Y3QgcmVmc3BlY3MgdXNlZCBmb3IgdGhlIG1lcmdlIGxpbmVzLiBUaGF0IGlzLAorCSAqIG1lcmdlW2ldLT5kc3QgaXMgYSBsb2NhbCB0cmFja2luZyByZWYgd2hpY2ggc2hvdWxkIGJlIG1lcmdlZCBpbnRvIHRoaXMKKwkgKiBicmFuY2ggYnkgZGVmYXVsdC4KKwkgKi8KKwlzdHJ1Y3QgcmVmc3BlY19pdGVtICoqbWVyZ2U7CisKKwkvKiBUaGUgbnVtYmVyIG9mIG1lcmdlIGNvbmZpZ3VyYXRpb25zICovCisJaW50IG1lcmdlX25yOworCisJaW50IG1lcmdlX2FsbG9jOworCisJY29uc3QgY2hhciAqcHVzaF90cmFja2luZ19yZWY7Cit9OworCitzdHJ1Y3QgYnJhbmNoICpicmFuY2hfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOworY29uc3QgY2hhciAqcmVtb3RlX2Zvcl9icmFuY2goc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBpbnQgKmV4cGxpY2l0KTsKK2NvbnN0IGNoYXIgKnB1c2hyZW1vdGVfZm9yX2JyYW5jaChzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIGludCAqZXhwbGljaXQpOworY29uc3QgY2hhciAqcmVtb3RlX3JlZl9mb3JfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50IGZvcl9wdXNoKTsKKworLyogcmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBicmFuY2ggaGFzIG1lcmdlIGNvbmZpZ3VyYXRpb24gZ2l2ZW4uICovCitpbnQgYnJhbmNoX2hhc19tZXJnZV9jb25maWcoc3RydWN0IGJyYW5jaCAqYnJhbmNoKTsKKworaW50IGJyYW5jaF9tZXJnZV9tYXRjaGVzKHN0cnVjdCBicmFuY2ggKiwgaW50IG4sIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogUmV0dXJuIHRoZSBmdWxseS1xdWFsaWZpZWQgcmVmbmFtZSBvZiB0aGUgdHJhY2tpbmcgYnJhbmNoIGZvciBgYnJhbmNoYC4KKyAqIEkuZS4sIHdoYXQgImJyYW5jaEB7dXBzdHJlYW19IiB3b3VsZCBnaXZlIHlvdS4gUmV0dXJucyBOVUxMIGlmIG5vCisgKiB1cHN0cmVhbSBpcyBkZWZpbmVkLgorICoKKyAqIElmIGBlcnJgIGlzIG5vdCBOVUxMIGFuZCBubyB1cHN0cmVhbSBpcyBkZWZpbmVkLCBhIG1vcmUgc3BlY2lmaWMgZXJyb3IKKyAqIG1lc3NhZ2UgaXMgcmVjb3JkZWQgdGhlcmUgKGlmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gTlVMTCwgdGhlbgorICogYGVycmAgaXMgbm90IHRvdWNoZWQpLgorICovCitjb25zdCBjaGFyICpicmFuY2hfZ2V0X3Vwc3RyZWFtKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoqCisgKiBSZXR1cm4gdGhlIHRyYWNraW5nIGJyYW5jaCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSByZWYgd2Ugd291bGQgcHVzaCB0bworICogZ2l2ZW4gYSBiYXJlIGBnaXQgcHVzaGAgd2hpbGUgYGJyYW5jaGAgaXMgY2hlY2tlZCBvdXQuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBhbmQgYGVycmAgY29udmVudGlvbnMgbWF0Y2ggdGhvc2Ugb2YgYGJyYW5jaF9nZXRfdXBzdHJlYW1gLgorICovCitjb25zdCBjaGFyICpicmFuY2hfZ2V0X3B1c2goc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKiBGbGFncyB0byBtYXRjaF9yZWZzLiAqLworZW51bSBtYXRjaF9yZWZzX2ZsYWdzIHsKKwlNQVRDSF9SRUZTX05PTkUJCT0gMCwKKwlNQVRDSF9SRUZTX0FMTCAJCT0gKDEgPDwgMCksCisJTUFUQ0hfUkVGU19NSVJST1IJPSAoMSA8PCAxKSwKKwlNQVRDSF9SRUZTX1BSVU5FCT0gKDEgPDwgMiksCisJTUFUQ0hfUkVGU19GT0xMT1dfVEFHUwk9ICgxIDw8IDMpCit9OworCisvKiBGbGFncyBmb3IgLS1haGVhZC1iZWhpbmQgb3B0aW9uLiAqLworZW51bSBhaGVhZF9iZWhpbmRfZmxhZ3MgeworCUFIRUFEX0JFSElORF9VTlNQRUNJRklFRCA9IC0xLAorCUFIRUFEX0JFSElORF9RVUlDSyAgICAgICA9ICAwLCAgLyoganVzdCBlcS9uZXEgcmVwb3J0aW5nICovCisJQUhFQURfQkVISU5EX0ZVTEwgICAgICAgID0gIDEsICAvKiB0cmFkaXRpb25hbCBhL2IgcmVwb3J0aW5nICovCit9OworCisvKiBSZXBvcnRpbmcgb2YgdHJhY2tpbmcgaW5mbyAqLworaW50IHN0YXRfdHJhY2tpbmdfaW5mbyhzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIGludCAqbnVtX291cnMsIGludCAqbnVtX3RoZWlycywKKwkJICAgICAgIGNvbnN0IGNoYXIgKip1cHN0cmVhbV9uYW1lLCBpbnQgZm9yX3B1c2gsCisJCSAgICAgICBlbnVtIGFoZWFkX2JlaGluZF9mbGFncyBhYmYpOworaW50IGZvcm1hdF90cmFja2luZ19pbmZvKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgZW51bSBhaGVhZF9iZWhpbmRfZmxhZ3MgYWJmKTsKKworc3RydWN0IHJlZiAqZ2V0X2xvY2FsX2hlYWRzKHZvaWQpOworLyoKKyAqIEZpbmQgcmVmcyBmcm9tIGEgbGlzdCB3aGljaCBhcmUgbGlrZWx5IHRvIGJlIHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIEhFQUQKKyAqIHJlZi4gSWYgJ2FsbCcgaXMgZmFsc2UsIHJldHVybnMgdGhlIG1vc3QgbGlrZWx5IHJlZjsgb3RoZXJ3aXNlLCByZXR1cm5zIGEKKyAqIGxpc3Qgb2YgYWxsIGNhbmRpZGF0ZSByZWZzLiBJZiBubyBtYXRjaCBpcyBmb3VuZCAob3IgJ2hlYWQnIGlzIE5VTEwpLAorICogcmV0dXJucyBOVUxMLiBBbGwgcmV0dXJucyBhcmUgbmV3bHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYmUgZnJlZWQuCisgKi8KK3N0cnVjdCByZWYgKmd1ZXNzX3JlbW90ZV9oZWFkKGNvbnN0IHN0cnVjdCByZWYgKmhlYWQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkJICAgICAgaW50IGFsbCk7CisKKy8qIFJldHVybiByZWZzIHdoaWNoIG5vIGxvbmdlciBleGlzdCBvbiByZW1vdGUgKi8KK3N0cnVjdCByZWYgKmdldF9zdGFsZV9oZWFkcyhzdHJ1Y3QgcmVmc3BlYyAqcnMsIHN0cnVjdCByZWYgKmZldGNoX21hcCk7CisKKy8qCisgKiBDb21wYXJlLWFuZC1zd2FwCisgKi8KKyNkZWZpbmUgQ0FTX09QVF9OQU1FICJmb3JjZS13aXRoLWxlYXNlIgorCitzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uIHsKKwl1bnNpZ25lZCB1c2VfdHJhY2tpbmdfZm9yX3Jlc3Q6MTsKKwlzdHJ1Y3QgcHVzaF9jYXMgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIGV4cGVjdDsKKwkJdW5zaWduZWQgdXNlX3RyYWNraW5nOjE7CisJCWNoYXIgKnJlZm5hbWU7CisJfSAqZW50cnk7CisJaW50IG5yOworCWludCBhbGxvYzsKK307CisKK2ludCBwYXJzZW9wdF9wdXNoX2Nhc19vcHRpb24oY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CisKK2ludCBpc19lbXB0eV9jYXMoY29uc3Qgc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqKTsKK3ZvaWQgYXBwbHlfcHVzaF9jYXMoc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqLCBzdHJ1Y3QgcmVtb3RlICosIHN0cnVjdCByZWYgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVwbGFjZS1vYmplY3QuYyBiL3JlcGxhY2Utb2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkOWFiYQotLS0gL2Rldi9udWxsCisrKyBiL3JlcGxhY2Utb2JqZWN0LmMKQEAgLTAsMCArMSw4MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2lkbWFwLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwbGFjZS1vYmplY3QuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorCitzdGF0aWMgaW50IHJlZ2lzdGVyX3JlcGxhY2VfcmVmKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCWNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCWludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCS8qIEdldCBzaGExIGZyb20gcmVmbmFtZSAqLworCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RycmNocihyZWZuYW1lLCAnLycpOworCWNvbnN0IGNoYXIgKmhhc2ggPSBzbGFzaCA/IHNsYXNoICsgMSA6IHJlZm5hbWU7CisJc3RydWN0IHJlcGxhY2Vfb2JqZWN0ICpyZXBsX29iaiA9IHhtYWxsb2Moc2l6ZW9mKCpyZXBsX29iaikpOworCisJaWYgKGdldF9vaWRfaGV4KGhhc2gsICZyZXBsX29iai0+b3JpZ2luYWwub2lkKSkgeworCQlmcmVlKHJlcGxfb2JqKTsKKwkJd2FybmluZyhfKCJiYWQgcmVwbGFjZSByZWYgbmFtZTogJXMiKSwgcmVmbmFtZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIENvcHkgc2hhMSBmcm9tIHRoZSByZWFkIHJlZiAqLworCW9pZGNweSgmcmVwbF9vYmotPnJlcGxhY2VtZW50LCBvaWQpOworCisJLyogUmVnaXN0ZXIgbmV3IG9iamVjdCAqLworCWlmIChvaWRtYXBfcHV0KHItPm9iamVjdHMtPnJlcGxhY2VfbWFwLCByZXBsX29iaikpCisJCWRpZShfKCJkdXBsaWNhdGUgcmVwbGFjZSByZWY6ICVzIiksIHJlZm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcHJlcGFyZV9yZXBsYWNlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlpZiAoci0+b2JqZWN0cy0+cmVwbGFjZV9tYXBfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCXB0aHJlYWRfbXV0ZXhfbG9jaygmci0+b2JqZWN0cy0+cmVwbGFjZV9tdXRleCk7CisJaWYgKHItPm9iamVjdHMtPnJlcGxhY2VfbWFwX2luaXRpYWxpemVkKSB7CisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZyLT5vYmplY3RzLT5yZXBsYWNlX211dGV4KTsKKwkJcmV0dXJuOworCX0KKworCXItPm9iamVjdHMtPnJlcGxhY2VfbWFwID0KKwkJeG1hbGxvYyhzaXplb2YoKnItPm9iamVjdHMtPnJlcGxhY2VfbWFwKSk7CisJb2lkbWFwX2luaXQoci0+b2JqZWN0cy0+cmVwbGFjZV9tYXAsIDApOworCisJZm9yX2VhY2hfcmVwbGFjZV9yZWYociwgcmVnaXN0ZXJfcmVwbGFjZV9yZWYsIE5VTEwpOworCXItPm9iamVjdHMtPnJlcGxhY2VfbWFwX2luaXRpYWxpemVkID0gMTsKKworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZyLT5vYmplY3RzLT5yZXBsYWNlX211dGV4KTsKK30KKworLyogV2UgYWxsb3cgInJlY3Vyc2l2ZSIgcmVwbGFjZW1lbnQuIE9ubHkgd2l0aGluIHJlYXNvbiwgdGhvdWdoICovCisjZGVmaW5lIE1BWFJFUExBQ0VERVBUSCA1CisKKy8qCisgKiBJZiBhIHJlcGxhY2VtZW50IGZvciBvYmplY3Qgb2lkIGhhcyBiZWVuIHNldCB1cCwgcmV0dXJuIHRoZQorICogcmVwbGFjZW1lbnQgb2JqZWN0J3MgbmFtZSAocmVwbGFjZWQgcmVjdXJzaXZlbHksIGlmIG5lY2Vzc2FyeSkuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGVpdGhlciBvaWQgb3IgYSBwb2ludGVyIHRvIGEKKyAqIHBlcm1hbmVudGx5LWFsbG9jYXRlZCB2YWx1ZS4gIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJlc3BlY3RzIHJlcGxhY2UKKyAqIHJlZmVyZW5jZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIHJlYWRfcmVwbGFjZV9yZWZzLgorICovCitjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpkb19sb29rdXBfcmVwbGFjZV9vYmplY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBkZXB0aCA9IE1BWFJFUExBQ0VERVBUSDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjdXIgPSBvaWQ7CisKKwlwcmVwYXJlX3JlcGxhY2Vfb2JqZWN0KHIpOworCisJLyogVHJ5IHRvIHJlY3Vyc2l2ZWx5IHJlcGxhY2UgdGhlIG9iamVjdCAqLworCXdoaWxlIChkZXB0aC0tID4gMCkgeworCQlzdHJ1Y3QgcmVwbGFjZV9vYmplY3QgKnJlcGxfb2JqID0KKwkJCW9pZG1hcF9nZXQoci0+b2JqZWN0cy0+cmVwbGFjZV9tYXAsIGN1cik7CisJCWlmICghcmVwbF9vYmopCisJCQlyZXR1cm4gY3VyOworCQljdXIgPSAmcmVwbF9vYmotPnJlcGxhY2VtZW50OworCX0KKwlkaWUoXygicmVwbGFjZSBkZXB0aCB0b28gaGlnaCBmb3Igb2JqZWN0ICVzIiksIG9pZF90b19oZXgob2lkKSk7Cit9CmRpZmYgLS1naXQgYS9yZXBsYWNlLW9iamVjdC5oIGIvcmVwbGFjZS1vYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmJjMzJlCi0tLSAvZGV2L251bGwKKysrIGIvcmVwbGFjZS1vYmplY3QuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIFJFUExBQ0VfT0JKRUNUX0gKKyNkZWZpbmUgUkVQTEFDRV9PQkpFQ1RfSAorCisjaW5jbHVkZSAib2lkbWFwLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorCitzdHJ1Y3QgcmVwbGFjZV9vYmplY3QgeworCXN0cnVjdCBvaWRtYXBfZW50cnkgb3JpZ2luYWw7CisJc3RydWN0IG9iamVjdF9pZCByZXBsYWNlbWVudDsKK307CisKK3ZvaWQgcHJlcGFyZV9yZXBsYWNlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKy8qCisgKiBUaGlzIGludGVybmFsIGZ1bmN0aW9uIGlzIG9ubHkgZGVjbGFyZWQgaGVyZSBmb3IgdGhlIGJlbmVmaXQgb2YKKyAqIGxvb2t1cF9yZXBsYWNlX29iamVjdCgpLiAgUGxlYXNlIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LgorICovCitjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpkb19sb29rdXBfcmVwbGFjZV9vYmplY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoKKyAqIElmIG9iamVjdCBzaGExIHNob3VsZCBiZSByZXBsYWNlZCwgcmV0dXJuIHRoZSByZXBsYWNlbWVudCBvYmplY3QncworICogbmFtZSAocmVwbGFjZWQgcmVjdXJzaXZlbHksIGlmIG5lY2Vzc2FyeSkuICBUaGUgcmV0dXJuIHZhbHVlIGlzCisgKiBlaXRoZXIgc2hhMSBvciBhIHBvaW50ZXIgdG8gYSBwZXJtYW5lbnRseS1hbGxvY2F0ZWQgdmFsdWUuICBXaGVuCisgKiBvYmplY3QgcmVwbGFjZW1lbnQgaXMgc3VwcHJlc3NlZCwgYWx3YXlzIHJldHVybiBzaGExLgorICoKKyAqIE5vdGU6IHNvbWUgdGhyZWFkIGRlYnVnZ2VycyBtaWdodCBwb2ludCBhIGRhdGEgcmFjZSBvbiB0aGUKKyAqIHJlcGxhY2VfbWFwX2luaXRpYWxpemVkIHJlYWRpbmcgaW4gdGhpcyBmdW5jdGlvbi4gSG93ZXZlciwgd2Uga25vdyB0aGVyZSdzIG5vCisgKiBwcm9ibGVtIGluIHRoZSB2YWx1ZSBiZWluZyB1cGRhdGVkIGJ5IG9uZSB0aHJlYWQgcmlnaHQgYWZ0ZXIgYW5vdGhlciBvbmUgcmVhZAorICogaXQgaGVyZSAoYW5kIGl0IHNob3VsZCBiZSB3cml0dGVuIHRvIG9ubHkgb25jZSwgYW55d2F5KS4KKyAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpsb29rdXBfcmVwbGFjZV9vYmplY3Qoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpZiAoIXJlYWRfcmVwbGFjZV9yZWZzIHx8CisJICAgIChyLT5vYmplY3RzLT5yZXBsYWNlX21hcF9pbml0aWFsaXplZCAmJgorCSAgICAgci0+b2JqZWN0cy0+cmVwbGFjZV9tYXAtPm1hcC50YWJsZXNpemUgPT0gMCkpCisJCXJldHVybiBvaWQ7CisJcmV0dXJuIGRvX2xvb2t1cF9yZXBsYWNlX29iamVjdChyLCBvaWQpOworfQorCisjZW5kaWYgLyogUkVQTEFDRV9PQkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvcmVwby1zZXR0aW5ncy5jIGIvcmVwby1zZXR0aW5ncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDNlNDAKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBvLXNldHRpbmdzLmMKQEAgLTAsMCArMSw2OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCisjZGVmaW5lIFVQREFURV9ERUZBVUxUX0JPT0wocyx2KSBkbyB7IGlmIChzID09IC0xKSB7IHMgPSB2OyB9IH0gd2hpbGUoMCkKKwordm9pZCBwcmVwYXJlX3JlcG9fc2V0dGluZ3Moc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJaW50IHZhbHVlOworCWNoYXIgKnN0cnZhbDsKKworCWlmIChyLT5zZXR0aW5ncy5pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJLyogRGVmYXVsdHMgKi8KKwltZW1zZXQoJnItPnNldHRpbmdzLCAtMSwgc2l6ZW9mKHItPnNldHRpbmdzKSk7CisKKwlpZiAoIXJlcG9fY29uZmlnX2dldF9ib29sKHIsICJjb3JlLmNvbW1pdGdyYXBoIiwgJnZhbHVlKSkKKwkJci0+c2V0dGluZ3MuY29yZV9jb21taXRfZ3JhcGggPSB2YWx1ZTsKKwlpZiAoIXJlcG9fY29uZmlnX2dldF9ib29sKHIsICJnYy53cml0ZWNvbW1pdGdyYXBoIiwgJnZhbHVlKSkKKwkJci0+c2V0dGluZ3MuZ2Nfd3JpdGVfY29tbWl0X2dyYXBoID0gdmFsdWU7CisJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5jb3JlX2NvbW1pdF9ncmFwaCwgMSk7CisJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5nY193cml0ZV9jb21taXRfZ3JhcGgsIDEpOworCisJaWYgKCFyZXBvX2NvbmZpZ19nZXRfaW50KHIsICJpbmRleC52ZXJzaW9uIiwgJnZhbHVlKSkKKwkJci0+c2V0dGluZ3MuaW5kZXhfdmVyc2lvbiA9IHZhbHVlOworCWlmICghcmVwb19jb25maWdfZ2V0X21heWJlX2Jvb2wociwgImNvcmUudW50cmFja2VkY2FjaGUiLCAmdmFsdWUpKSB7CisJCWlmICh2YWx1ZSA9PSAwKQorCQkJci0+c2V0dGluZ3MuY29yZV91bnRyYWNrZWRfY2FjaGUgPSBVTlRSQUNLRURfQ0FDSEVfUkVNT1ZFOworCQllbHNlCisJCQlyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSA9IFVOVFJBQ0tFRF9DQUNIRV9XUklURTsKKwl9IGVsc2UgaWYgKCFyZXBvX2NvbmZpZ19nZXRfc3RyaW5nKHIsICJjb3JlLnVudHJhY2tlZGNhY2hlIiwgJnN0cnZhbCkpIHsKKwkJaWYgKCFzdHJjYXNlY21wKHN0cnZhbCwgImtlZXAiKSkKKwkJCXItPnNldHRpbmdzLmNvcmVfdW50cmFja2VkX2NhY2hlID0gVU5UUkFDS0VEX0NBQ0hFX0tFRVA7CisKKwkJZnJlZShzdHJ2YWwpOworCX0KKworCWlmICghcmVwb19jb25maWdfZ2V0X3N0cmluZyhyLCAiZmV0Y2gubmVnb3RpYXRpb25hbGdvcml0aG0iLCAmc3RydmFsKSkgeworCQlpZiAoIXN0cmNhc2VjbXAoc3RydmFsLCAic2tpcHBpbmciKSkKKwkJCXItPnNldHRpbmdzLmZldGNoX25lZ290aWF0aW9uX2FsZ29yaXRobSA9IEZFVENIX05FR09USUFUSU9OX1NLSVBQSU5HOworCQllbHNlCisJCQlyLT5zZXR0aW5ncy5mZXRjaF9uZWdvdGlhdGlvbl9hbGdvcml0aG0gPSBGRVRDSF9ORUdPVElBVElPTl9ERUZBVUxUOworCX0KKworCWlmICghcmVwb19jb25maWdfZ2V0X2Jvb2wociwgInBhY2sudXNlc3BhcnNlIiwgJnZhbHVlKSkKKwkJci0+c2V0dGluZ3MucGFja191c2Vfc3BhcnNlID0gdmFsdWU7CisJaWYgKCFyZXBvX2NvbmZpZ19nZXRfYm9vbChyLCAiZmVhdHVyZS5tYW55ZmlsZXMiLCAmdmFsdWUpICYmIHZhbHVlKSB7CisJCVVQREFURV9ERUZBVUxUX0JPT0woci0+c2V0dGluZ3MuaW5kZXhfdmVyc2lvbiwgNCk7CisJCVVQREFURV9ERUZBVUxUX0JPT0woci0+c2V0dGluZ3MuY29yZV91bnRyYWNrZWRfY2FjaGUsIFVOVFJBQ0tFRF9DQUNIRV9XUklURSk7CisJfQorCWlmICghcmVwb19jb25maWdfZ2V0X2Jvb2wociwgImZldGNoLndyaXRlY29tbWl0Z3JhcGgiLCAmdmFsdWUpKQorCQlyLT5zZXR0aW5ncy5mZXRjaF93cml0ZV9jb21taXRfZ3JhcGggPSB2YWx1ZTsKKwlpZiAoIXJlcG9fY29uZmlnX2dldF9ib29sKHIsICJmZWF0dXJlLmV4cGVyaW1lbnRhbCIsICZ2YWx1ZSkgJiYgdmFsdWUpIHsKKwkJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5wYWNrX3VzZV9zcGFyc2UsIDEpOworCQlVUERBVEVfREVGQVVMVF9CT09MKHItPnNldHRpbmdzLmZldGNoX25lZ290aWF0aW9uX2FsZ29yaXRobSwgRkVUQ0hfTkVHT1RJQVRJT05fU0tJUFBJTkcpOworCQlVUERBVEVfREVGQVVMVF9CT09MKHItPnNldHRpbmdzLmZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCwgMSk7CisJfQorCVVQREFURV9ERUZBVUxUX0JPT0woci0+c2V0dGluZ3MuZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoLCAwKTsKKworCS8qIEhhY2sgZm9yIHRlc3QgcHJvZ3JhbXMgbGlrZSB0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlICovCisJaWYgKGlnbm9yZV91bnRyYWNrZWRfY2FjaGVfY29uZmlnKQorCQlyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSA9IFVOVFJBQ0tFRF9DQUNIRV9LRUVQOworCWVsc2UKKwkJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5jb3JlX3VudHJhY2tlZF9jYWNoZSwgVU5UUkFDS0VEX0NBQ0hFX0tFRVApOworCisJVVBEQVRFX0RFRkFVTFRfQk9PTChyLT5zZXR0aW5ncy5mZXRjaF9uZWdvdGlhdGlvbl9hbGdvcml0aG0sIEZFVENIX05FR09USUFUSU9OX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvcmVwb3NpdG9yeS5jIGIvcmVwb3NpdG9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MTc0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBvc2l0b3J5LmMKQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiBub3QgcmVhbGx5IF91c2luZ18gdGhlIGNvbXBhdCBtYWNyb3MsIGp1c3QgbWFrZSBzdXJlIHRoZV9pbmRleAorICogZGVjbGFyYXRpb24gbWF0Y2hlcyB0aGUgZGVmaW5pdGlvbiBpbiB0aGlzIGZpbGUuCisgKi8KKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorCisvKiBUaGUgbWFpbiByZXBvc2l0b3J5ICovCitzdGF0aWMgc3RydWN0IHJlcG9zaXRvcnkgdGhlX3JlcG87CitzdHJ1Y3QgcmVwb3NpdG9yeSAqdGhlX3JlcG9zaXRvcnk7CitzdHJ1Y3QgaW5kZXhfc3RhdGUgdGhlX2luZGV4OworCit2b2lkIGluaXRpYWxpemVfdGhlX3JlcG9zaXRvcnkodm9pZCkKK3sKKwl0aGVfcmVwb3NpdG9yeSA9ICZ0aGVfcmVwbzsKKworCXRoZV9yZXBvLmluZGV4ID0gJnRoZV9pbmRleDsKKwl0aGVfcmVwby5vYmplY3RzID0gcmF3X29iamVjdF9zdG9yZV9uZXcoKTsKKwl0aGVfcmVwby5wYXJzZWRfb2JqZWN0cyA9IHBhcnNlZF9vYmplY3RfcG9vbF9uZXcoKTsKKworCXJlcG9fc2V0X2hhc2hfYWxnbygmdGhlX3JlcG8sIEdJVF9IQVNIX1NIQTEpOworfQorCitzdGF0aWMgdm9pZCBleHBhbmRfYmFzZV9kaXIoY2hhciAqKm91dCwgY29uc3QgY2hhciAqaW4sCisJCQkgICAgY29uc3QgY2hhciAqYmFzZV9kaXIsIGNvbnN0IGNoYXIgKmRlZl9pbikKK3sKKwlmcmVlKCpvdXQpOworCWlmIChpbikKKwkJKm91dCA9IHhzdHJkdXAoaW4pOworCWVsc2UKKwkJKm91dCA9IHhzdHJmbXQoIiVzLyVzIiwgYmFzZV9kaXIsIGRlZl9pbik7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9fc2V0X2NvbW1vbmRpcihzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgICBjb25zdCBjaGFyICpjb21tb25kaXIpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZnJlZShyZXBvLT5jb21tb25kaXIpOworCisJaWYgKGNvbW1vbmRpcikgeworCQlyZXBvLT5kaWZmZXJlbnRfY29tbW9uZGlyID0gMTsKKwkJcmVwby0+Y29tbW9uZGlyID0geHN0cmR1cChjb21tb25kaXIpOworCQlyZXR1cm47CisJfQorCisJcmVwby0+ZGlmZmVyZW50X2NvbW1vbmRpciA9IGdldF9jb21tb25fZGlyX25vZW52KCZzYiwgcmVwby0+Z2l0ZGlyKTsKKwlyZXBvLT5jb21tb25kaXIgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7Cit9CisKK3ZvaWQgcmVwb19zZXRfZ2l0ZGlyKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkgICAgIGNvbnN0IGNoYXIgKnJvb3QsCisJCSAgICAgY29uc3Qgc3RydWN0IHNldF9naXRkaXJfYXJncyAqbykKK3sKKwljb25zdCBjaGFyICpnaXRmaWxlID0gcmVhZF9naXRmaWxlKHJvb3QpOworCS8qCisJICogcmVwby0+Z2l0ZGlyIGlzIHNhdmVkIGJlY2F1c2UgdGhlIGNhbGxlciBjb3VsZCBwYXNzICJyb290IgorCSAqIHRoYXQgYWxzbyBwb2ludHMgdG8gcmVwby0+Z2l0ZGlyLiBXZSB3YW50IHRvIGtlZXAgaXQgYWxpdmUKKwkgKiB1bnRpbCBhZnRlciB4c3RyZHVwKHJvb3QpLiBUaGVuIHdlIGNhbiBmcmVlIGl0LgorCSAqLworCWNoYXIgKm9sZF9naXRkaXIgPSByZXBvLT5naXRkaXI7CisKKwlyZXBvLT5naXRkaXIgPSB4c3RyZHVwKGdpdGZpbGUgPyBnaXRmaWxlIDogcm9vdCk7CisJZnJlZShvbGRfZ2l0ZGlyKTsKKworCXJlcG9fc2V0X2NvbW1vbmRpcihyZXBvLCBvLT5jb21tb25kaXIpOworCisJaWYgKCFyZXBvLT5vYmplY3RzLT5vZGIpIHsKKwkJcmVwby0+b2JqZWN0cy0+b2RiID0geGNhbGxvYygxLCBzaXplb2YoKnJlcG8tPm9iamVjdHMtPm9kYikpOworCQlyZXBvLT5vYmplY3RzLT5vZGJfdGFpbCA9ICZyZXBvLT5vYmplY3RzLT5vZGItPm5leHQ7CisJfQorCWV4cGFuZF9iYXNlX2RpcigmcmVwby0+b2JqZWN0cy0+b2RiLT5wYXRoLCBvLT5vYmplY3RfZGlyLAorCQkJcmVwby0+Y29tbW9uZGlyLCAib2JqZWN0cyIpOworCisJZnJlZShyZXBvLT5vYmplY3RzLT5hbHRlcm5hdGVfZGIpOworCXJlcG8tPm9iamVjdHMtPmFsdGVybmF0ZV9kYiA9IHhzdHJkdXBfb3JfbnVsbChvLT5hbHRlcm5hdGVfZGIpOworCWV4cGFuZF9iYXNlX2RpcigmcmVwby0+Z3JhZnRfZmlsZSwgby0+Z3JhZnRfZmlsZSwKKwkJCXJlcG8tPmNvbW1vbmRpciwgImluZm8vZ3JhZnRzIik7CisJZXhwYW5kX2Jhc2VfZGlyKCZyZXBvLT5pbmRleF9maWxlLCBvLT5pbmRleF9maWxlLAorCQkJcmVwby0+Z2l0ZGlyLCAiaW5kZXgiKTsKK30KKwordm9pZCByZXBvX3NldF9oYXNoX2FsZ28oc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGludCBoYXNoX2FsZ28pCit7CisJcmVwby0+aGFzaF9hbGdvID0gJmhhc2hfYWxnb3NbaGFzaF9hbGdvXTsKK30KKworLyoKKyAqIEF0dGVtcHQgdG8gcmVzb2x2ZSBhbmQgc2V0IHRoZSBwcm92aWRlZCAnZ2l0ZGlyJyBmb3IgcmVwb3NpdG9yeSAncmVwbycuCisgKiBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MgYW5kIGEgbm9uLXplcm8gdmFsdWUgdXBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHJlcG9faW5pdF9naXRkaXIoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmdpdGRpcikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZXJyb3IgPSAwOworCWNoYXIgKmFic3BhdGggPSBOVUxMOworCWNvbnN0IGNoYXIgKnJlc29sdmVkX2dpdGRpcjsKKwlzdHJ1Y3Qgc2V0X2dpdGRpcl9hcmdzIGFyZ3MgPSB7IE5VTEwgfTsKKworCWFic3BhdGggPSByZWFsX3BhdGhkdXAoZ2l0ZGlyLCAwKTsKKwlpZiAoIWFic3BhdGgpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCS8qICdnaXRkaXInIG11c3QgcmVmZXJlbmNlIHRoZSBnaXRkaXIgZGlyZWN0bHkgKi8KKwlyZXNvbHZlZF9naXRkaXIgPSByZXNvbHZlX2dpdGRpcl9nZW50bHkoYWJzcGF0aCwgJmVycm9yKTsKKwlpZiAoIXJlc29sdmVkX2dpdGRpcikgeworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVwb19zZXRfZ2l0ZGlyKHJlcG8sIHJlc29sdmVkX2dpdGRpciwgJmFyZ3MpOworCitvdXQ6CisJZnJlZShhYnNwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJlcG9fc2V0X3dvcmt0cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKQoreworCXJlcG8tPndvcmt0cmVlID0gcmVhbF9wYXRoZHVwKHBhdGgsIDEpOworCisJdHJhY2UyX2RlZl9yZXBvKHJlcG8pOworfQorCitzdGF0aWMgaW50IHJlYWRfYW5kX3ZlcmlmeV9yZXBvc2l0b3J5X2Zvcm1hdChzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKmZvcm1hdCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpjb21tb25kaXIpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvY29uZmlnIiwgY29tbW9uZGlyKTsKKwlyZWFkX3JlcG9zaXRvcnlfZm9ybWF0KGZvcm1hdCwgc2IuYnVmKTsKKwlzdHJidWZfcmVzZXQoJnNiKTsKKworCWlmICh2ZXJpZnlfcmVwb3NpdG9yeV9mb3JtYXQoZm9ybWF0LCAmc2IpIDwgMCkgeworCQl3YXJuaW5nKCIlcyIsIHNiLmJ1Zik7CisJCXJldCA9IC0xOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgJ3JlcG8nIGJhc2VkIG9uIHRoZSBwcm92aWRlZCAnZ2l0ZGlyJy4KKyAqIFJldHVybiAwIHVwb24gc3VjY2VzcyBhbmQgYSBub24temVybyB2YWx1ZSB1cG9uIGZhaWx1cmUuCisgKi8KK2ludCByZXBvX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJICAgICAgY29uc3QgY2hhciAqZ2l0ZGlyLAorCSAgICAgIGNvbnN0IGNoYXIgKndvcmt0cmVlKQoreworCXN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCBmb3JtYXQgPSBSRVBPU0lUT1JZX0ZPUk1BVF9JTklUOworCW1lbXNldChyZXBvLCAwLCBzaXplb2YoKnJlcG8pKTsKKworCXJlcG8tPm9iamVjdHMgPSByYXdfb2JqZWN0X3N0b3JlX25ldygpOworCXJlcG8tPnBhcnNlZF9vYmplY3RzID0gcGFyc2VkX29iamVjdF9wb29sX25ldygpOworCisJaWYgKHJlcG9faW5pdF9naXRkaXIocmVwbywgZ2l0ZGlyKSkKKwkJZ290byBlcnJvcjsKKworCWlmIChyZWFkX2FuZF92ZXJpZnlfcmVwb3NpdG9yeV9mb3JtYXQoJmZvcm1hdCwgcmVwby0+Y29tbW9uZGlyKSkKKwkJZ290byBlcnJvcjsKKworCXJlcG9fc2V0X2hhc2hfYWxnbyhyZXBvLCBmb3JtYXQuaGFzaF9hbGdvKTsKKworCWlmICh3b3JrdHJlZSkKKwkJcmVwb19zZXRfd29ya3RyZWUocmVwbywgd29ya3RyZWUpOworCisJY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoJmZvcm1hdCk7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXJlcG9fY2xlYXIocmVwbyk7CisJcmV0dXJuIC0xOworfQorCitpbnQgcmVwb19zdWJtb2R1bGVfaW5pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqc3VicmVwbywKKwkJCXN0cnVjdCByZXBvc2l0b3J5ICpzdXBlcnByb2plY3QsCisJCQljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWIpCit7CisJc3RydWN0IHN0cmJ1ZiBnaXRkaXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHdvcmt0cmVlID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXN1YikgeworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJc3RyYnVmX3JlcG9fd29ya3RyZWVfcGF0aCgmZ2l0ZGlyLCBzdXBlcnByb2plY3QsICIlcy8uZ2l0Iiwgc3ViLT5wYXRoKTsKKwlzdHJidWZfcmVwb193b3JrdHJlZV9wYXRoKCZ3b3JrdHJlZSwgc3VwZXJwcm9qZWN0LCAiJXMiLCBzdWItPnBhdGgpOworCisJaWYgKHJlcG9faW5pdChzdWJyZXBvLCBnaXRkaXIuYnVmLCB3b3JrdHJlZS5idWYpKSB7CisJCS8qCisJCSAqIElmIGluaXRpYWxpemF0aW9uIGZhaWxzIHRoZW4gaXQgbWF5IGJlIGR1ZSB0byB0aGUgc3VibW9kdWxlCisJCSAqIG5vdCBiZWluZyBwb3B1bGF0ZWQgaW4gdGhlIHN1cGVycHJvamVjdCdzIHdvcmt0cmVlLiAgSW5zdGVhZAorCQkgKiB3ZSBjYW4gdHJ5IHRvIGluaXRpYWxpemUgdGhlIHN1Ym1vZHVsZSBieSBmaW5kaW5nIGl0J3MgZ2l0ZGlyCisJCSAqIGluIHRoZSBzdXBlcnByb2plY3QncyAnbW9kdWxlcycgZGlyZWN0b3J5LiAgSW4gdGhpcyBjYXNlIHRoZQorCQkgKiBzdWJtb2R1bGUgd291bGQgbm90IGhhdmUgYSB3b3JrdHJlZS4KKwkJICovCisJCXN0cmJ1Zl9yZXNldCgmZ2l0ZGlyKTsKKwkJc3RyYnVmX3JlcG9fZ2l0X3BhdGgoJmdpdGRpciwgc3VwZXJwcm9qZWN0LAorCQkJCSAgICAgIm1vZHVsZXMvJXMiLCBzdWItPm5hbWUpOworCisJCWlmIChyZXBvX2luaXQoc3VicmVwbywgZ2l0ZGlyLmJ1ZiwgTlVMTCkpIHsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlzdWJyZXBvLT5zdWJtb2R1bGVfcHJlZml4ID0geHN0cmZtdCgiJXMlcy8iLAorCQkJCQkgICAgc3VwZXJwcm9qZWN0LT5zdWJtb2R1bGVfcHJlZml4ID8KKwkJCQkJICAgIHN1cGVycHJvamVjdC0+c3VibW9kdWxlX3ByZWZpeCA6CisJCQkJCSAgICAiIiwgc3ViLT5wYXRoKTsKKworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZnaXRkaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZ3b3JrdHJlZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZXBvX2NsZWFyKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKQoreworCUZSRUVfQU5EX05VTEwocmVwby0+Z2l0ZGlyKTsKKwlGUkVFX0FORF9OVUxMKHJlcG8tPmNvbW1vbmRpcik7CisJRlJFRV9BTkRfTlVMTChyZXBvLT5ncmFmdF9maWxlKTsKKwlGUkVFX0FORF9OVUxMKHJlcG8tPmluZGV4X2ZpbGUpOworCUZSRUVfQU5EX05VTEwocmVwby0+d29ya3RyZWUpOworCUZSRUVfQU5EX05VTEwocmVwby0+c3VibW9kdWxlX3ByZWZpeCk7CisKKwlyYXdfb2JqZWN0X3N0b3JlX2NsZWFyKHJlcG8tPm9iamVjdHMpOworCUZSRUVfQU5EX05VTEwocmVwby0+b2JqZWN0cyk7CisKKwlwYXJzZWRfb2JqZWN0X3Bvb2xfY2xlYXIocmVwby0+cGFyc2VkX29iamVjdHMpOworCUZSRUVfQU5EX05VTEwocmVwby0+cGFyc2VkX29iamVjdHMpOworCisJaWYgKHJlcG8tPmNvbmZpZykgeworCQlnaXRfY29uZmlnc2V0X2NsZWFyKHJlcG8tPmNvbmZpZyk7CisJCUZSRUVfQU5EX05VTEwocmVwby0+Y29uZmlnKTsKKwl9CisKKwlpZiAocmVwby0+c3VibW9kdWxlX2NhY2hlKSB7CisJCXN1Ym1vZHVsZV9jYWNoZV9mcmVlKHJlcG8tPnN1Ym1vZHVsZV9jYWNoZSk7CisJCXJlcG8tPnN1Ym1vZHVsZV9jYWNoZSA9IE5VTEw7CisJfQorCisJaWYgKHJlcG8tPmluZGV4KSB7CisJCWRpc2NhcmRfaW5kZXgocmVwby0+aW5kZXgpOworCQlpZiAocmVwby0+aW5kZXggIT0gJnRoZV9pbmRleCkKKwkJCUZSRUVfQU5EX05VTEwocmVwby0+aW5kZXgpOworCX0KK30KKworaW50IHJlcG9fcmVhZF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlpZiAoIXJlcG8tPmluZGV4KQorCQlyZXBvLT5pbmRleCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXBvLT5pbmRleCkpOworCisJcmV0dXJuIHJlYWRfaW5kZXhfZnJvbShyZXBvLT5pbmRleCwgcmVwby0+aW5kZXhfZmlsZSwgcmVwby0+Z2l0ZGlyKTsKK30KKworaW50IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICBzdHJ1Y3QgbG9ja19maWxlICpsZiwKKwkJCSAgIGludCBmbGFncykKK3sKKwlpZiAoIXJlcG8tPmluZGV4X2ZpbGUpCisJCUJVRygidGhlIHJlcG8gaGFzbid0IGJlZW4gc2V0dXAiKTsKKwlyZXR1cm4gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsZiwgcmVwby0+aW5kZXhfZmlsZSwgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvcmVwb3NpdG9yeS5oIGIvcmVwb3NpdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDA1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBvc2l0b3J5LmgKQEAgLTAsMCArMSwxOTUgQEAKKyNpZm5kZWYgUkVQT1NJVE9SWV9ICisjZGVmaW5lIFJFUE9TSVRPUllfSAorCisjaW5jbHVkZSAicGF0aC5oIgorCitzdHJ1Y3QgY29uZmlnX3NldDsKK3N0cnVjdCBnaXRfaGFzaF9hbGdvOworc3RydWN0IGluZGV4X3N0YXRlOworc3RydWN0IGxvY2tfZmlsZTsKK3N0cnVjdCBwYXRoc3BlYzsKK3N0cnVjdCByYXdfb2JqZWN0X3N0b3JlOworc3RydWN0IHN1Ym1vZHVsZV9jYWNoZTsKKworZW51bSB1bnRyYWNrZWRfY2FjaGVfc2V0dGluZyB7CisJVU5UUkFDS0VEX0NBQ0hFX1VOU0VUID0gLTEsCisJVU5UUkFDS0VEX0NBQ0hFX1JFTU9WRSA9IDAsCisJVU5UUkFDS0VEX0NBQ0hFX0tFRVAgPSAxLAorCVVOVFJBQ0tFRF9DQUNIRV9XUklURSA9IDIKK307CisKK2VudW0gZmV0Y2hfbmVnb3RpYXRpb25fc2V0dGluZyB7CisJRkVUQ0hfTkVHT1RJQVRJT05fVU5TRVQgPSAtMSwKKwlGRVRDSF9ORUdPVElBVElPTl9OT05FID0gMCwKKwlGRVRDSF9ORUdPVElBVElPTl9ERUZBVUxUID0gMSwKKwlGRVRDSF9ORUdPVElBVElPTl9TS0lQUElORyA9IDIsCit9OworCitzdHJ1Y3QgcmVwb19zZXR0aW5ncyB7CisJaW50IGluaXRpYWxpemVkOworCisJaW50IGNvcmVfY29tbWl0X2dyYXBoOworCWludCBnY193cml0ZV9jb21taXRfZ3JhcGg7CisJaW50IGZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaDsKKworCWludCBpbmRleF92ZXJzaW9uOworCWVudW0gdW50cmFja2VkX2NhY2hlX3NldHRpbmcgY29yZV91bnRyYWNrZWRfY2FjaGU7CisKKwlpbnQgcGFja191c2Vfc3BhcnNlOworCWVudW0gZmV0Y2hfbmVnb3RpYXRpb25fc2V0dGluZyBmZXRjaF9uZWdvdGlhdGlvbl9hbGdvcml0aG07Cit9OworCitzdHJ1Y3QgcmVwb3NpdG9yeSB7CisJLyogRW52aXJvbm1lbnQgKi8KKwkvKgorCSAqIFBhdGggdG8gdGhlIGdpdCBkaXJlY3RvcnkuCisJICogQ2Fubm90IGJlIE5VTEwgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisJICovCisJY2hhciAqZ2l0ZGlyOworCisJLyoKKwkgKiBQYXRoIHRvIHRoZSBjb21tb24gZ2l0IGRpcmVjdG9yeS4KKwkgKiBDYW5ub3QgYmUgTlVMTCBhZnRlciBpbml0aWFsaXphdGlvbi4KKwkgKi8KKwljaGFyICpjb21tb25kaXI7CisKKwkvKgorCSAqIEhvbGRzIGFueSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFjY2Vzc2luZyB0aGUgcmF3IG9iamVjdCBjb250ZW50LgorCSAqLworCXN0cnVjdCByYXdfb2JqZWN0X3N0b3JlICpvYmplY3RzOworCisJLyoKKwkgKiBBbGwgb2JqZWN0cyBpbiB0aGlzIHJlcG9zaXRvcnkgdGhhdCBoYXZlIGJlZW4gcGFyc2VkLiBUaGlzIHN0cnVjdHVyZQorCSAqIG93bnMgYWxsIG9iamVjdHMgaXQgcmVmZXJlbmNlcywgc28gdXNlcnMgb2YgInN0cnVjdCBvYmplY3QgKiIKKwkgKiBnZW5lcmFsbHkgZG8gbm90IG5lZWQgdG8gZnJlZSB0aGVtOyBpbnN0ZWFkLCB3aGVuIGEgcmVwb3NpdG9yeSBpcyBubworCSAqIGxvbmdlciB1c2VkLCBjYWxsIHBhcnNlZF9vYmplY3RfcG9vbF9jbGVhcigpIG9uIHRoaXMgc3RydWN0dXJlLCB3aGljaAorCSAqIGlzIGNhbGxlZCBieSB0aGUgcmVwb3NpdG9yaWVzIHJlcG9fY2xlYXIgb24gaXRzIGRlc2NvbnN0cnVjdGlvbi4KKwkgKi8KKwlzdHJ1Y3QgcGFyc2VkX29iamVjdF9wb29sICpwYXJzZWRfb2JqZWN0czsKKworCS8qIFRoZSBzdG9yZSBpbiB3aGljaCB0aGUgcmVmcyBhcmUgaGVsZC4gKi8KKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzOworCisJLyoKKwkgKiBDb250YWlucyBwYXRoIHRvIG9mdGVuIHVzZWQgZmlsZSBuYW1lcy4KKwkgKi8KKwlzdHJ1Y3QgcGF0aF9jYWNoZSBjYWNoZWRfcGF0aHM7CisKKwkvKgorCSAqIFBhdGggdG8gdGhlIHJlcG9zaXRvcnkncyBncmFmdCBmaWxlLgorCSAqIENhbm5vdCBiZSBOVUxMIGFmdGVyIGluaXRpYWxpemF0aW9uLgorCSAqLworCWNoYXIgKmdyYWZ0X2ZpbGU7CisKKwkvKgorCSAqIFBhdGggdG8gdGhlIGN1cnJlbnQgd29ya3RyZWUncyBpbmRleCBmaWxlLgorCSAqIENhbm5vdCBiZSBOVUxMIGFmdGVyIGluaXRpYWxpemF0aW9uLgorCSAqLworCWNoYXIgKmluZGV4X2ZpbGU7CisKKwkvKgorCSAqIFBhdGggdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorCSAqIEEgTlVMTCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyB3b3JraW5nIGRpcmVjdG9yeS4KKwkgKi8KKwljaGFyICp3b3JrdHJlZTsKKworCS8qCisJICogUGF0aCBmcm9tIHRoZSByb290IG9mIHRoZSB0b3AtbGV2ZWwgc3VwZXJwcm9qZWN0IGRvd24gdG8gdGhpcworCSAqIHJlcG9zaXRvcnkuICBUaGlzIGlzIG9ubHkgbm9uLU5VTEwgaWYgdGhlIHJlcG9zaXRvcnkgaXMgaW5pdGlhbGl6ZWQKKwkgKiBhcyBhIHN1Ym1vZHVsZSBvZiBhbm90aGVyIHJlcG9zaXRvcnkuCisJICovCisJY2hhciAqc3VibW9kdWxlX3ByZWZpeDsKKworCXN0cnVjdCByZXBvX3NldHRpbmdzIHNldHRpbmdzOworCisJLyogU3Vic3lzdGVtcyAqLworCS8qCisJICogUmVwb3NpdG9yeSdzIGNvbmZpZyB3aGljaCBjb250YWlucyBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgdXN1YWwKKwkgKiBzZXQgb2YgY29uZmlnIGZpbGVzIChpLmUuIHJlcG8gc3BlY2lmaWMgLmdpdC9jb25maWcsIHVzZXIgd2lkZQorCSAqIH4vLmdpdGNvbmZpZywgWERHIGNvbmZpZyBmaWxlIGFuZCB0aGUgZ2xvYmFsIC9ldGMvZ2l0Y29uZmlnKQorCSAqLworCXN0cnVjdCBjb25maWdfc2V0ICpjb25maWc7CisKKwkvKiBSZXBvc2l0b3J5J3Mgc3VibW9kdWxlIGNvbmZpZyBhcyBkZWZpbmVkIGJ5ICcuZ2l0bW9kdWxlcycgKi8KKwlzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpzdWJtb2R1bGVfY2FjaGU7CisKKwkvKgorCSAqIFJlcG9zaXRvcnkncyBpbi1tZW1vcnkgaW5kZXguCisJICogJ3JlcG9fcmVhZF9pbmRleCgpJyBjYW4gYmUgdXNlZCB0byBwb3B1bGF0ZSAnaW5kZXgnLgorCSAqLworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXg7CisKKwkvKiBSZXBvc2l0b3J5J3MgY3VycmVudCBoYXNoIGFsZ29yaXRobSwgYXMgc2VyaWFsaXplZCBvbiBkaXNrLiAqLworCWNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICpoYXNoX2FsZ287CisKKwkvKiBBIHVuaXF1ZS1pZCBmb3IgdHJhY2luZyBwdXJwb3Nlcy4gKi8KKwlpbnQgdHJhY2UyX3JlcG9faWQ7CisKKwkvKiBUcnVlIGlmIGNvbW1pdC1ncmFwaCBoYXMgYmVlbiBkaXNhYmxlZCB3aXRoaW4gdGhpcyBwcm9jZXNzLiAqLworCWludCBjb21taXRfZ3JhcGhfZGlzYWJsZWQ7CisKKwkvKiBDb25maWd1cmF0aW9ucyAqLworCisJLyogSW5kaWNhdGUgaWYgYSByZXBvc2l0b3J5IGhhcyBhIGRpZmZlcmVudCAnY29tbW9uZGlyJyBmcm9tICdnaXRkaXInICovCisJdW5zaWduZWQgZGlmZmVyZW50X2NvbW1vbmRpcjoxOworfTsKKworZXh0ZXJuIHN0cnVjdCByZXBvc2l0b3J5ICp0aGVfcmVwb3NpdG9yeTsKKworLyoKKyAqIERlZmluZSBhIGN1c3RvbSByZXBvc2l0b3J5IGxheW91dC4gQW55IGZpZWxkIGNhbiBiZSBOVUxMLCB3aGljaAorICogd2lsbCBkZWZhdWx0IGJhY2sgdG8gdGhlIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IGxheW91dC4KKyAqLworc3RydWN0IHNldF9naXRkaXJfYXJncyB7CisJY29uc3QgY2hhciAqY29tbW9uZGlyOworCWNvbnN0IGNoYXIgKm9iamVjdF9kaXI7CisJY29uc3QgY2hhciAqZ3JhZnRfZmlsZTsKKwljb25zdCBjaGFyICppbmRleF9maWxlOworCWNvbnN0IGNoYXIgKmFsdGVybmF0ZV9kYjsKK307CisKK3ZvaWQgcmVwb19zZXRfZ2l0ZGlyKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpyb290LAorCQkgICAgIGNvbnN0IHN0cnVjdCBzZXRfZ2l0ZGlyX2FyZ3MgKmV4dHJhX2FyZ3MpOwordm9pZCByZXBvX3NldF93b3JrdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIHJlcG9fc2V0X2hhc2hfYWxnbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgaW50IGFsZ28pOwordm9pZCBpbml0aWFsaXplX3RoZV9yZXBvc2l0b3J5KHZvaWQpOworaW50IHJlcG9faW5pdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqZ2l0ZGlyLCBjb25zdCBjaGFyICp3b3JrdHJlZSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSByZXBvc2l0b3J5ICdzdWJyZXBvJyBhcyB0aGUgc3VibW9kdWxlIGdpdmVuIGJ5IHRoZQorICogc3RydWN0IHN1Ym1vZHVsZSAnc3ViJyBpbiBwYXJlbnQgcmVwb3NpdG9yeSAnc3VwZXJwcm9qZWN0Jy4KKyAqIFJldHVybiAwIHVwb24gc3VjY2VzcyBhbmQgYSBub24temVybyB2YWx1ZSB1cG9uIGZhaWx1cmUsIHdoaWNoIG1heSBoYXBwZW4KKyAqIGlmIHRoZSBzdWJtb2R1bGUgaXMgbm90IGZvdW5kLCBvciAnc3ViJyBpcyBOVUxMLgorICovCitzdHJ1Y3Qgc3VibW9kdWxlOworaW50IHJlcG9fc3VibW9kdWxlX2luaXQoc3RydWN0IHJlcG9zaXRvcnkgKnN1YnJlcG8sCisJCQlzdHJ1Y3QgcmVwb3NpdG9yeSAqc3VwZXJwcm9qZWN0LAorCQkJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViKTsKK3ZvaWQgcmVwb19jbGVhcihzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CisKKy8qCisgKiBQb3B1bGF0ZXMgdGhlIHJlcG9zaXRvcnkncyBpbmRleCBmcm9tIGl0cyBpbmRleF9maWxlLCBhbiBpbmRleCBzdHJ1Y3Qgd2lsbAorICogYmUgYWxsb2NhdGVkIGlmIG5lZWRlZC4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpbmRleCBlbnRyaWVzIGluIHRoZSBwb3B1bGF0ZWQgaW5kZXggb3IgYSB2YWx1ZSBsZXNzCisgKiB0aGFuIHplcm8gaWYgYW4gZXJyb3Igb2NjdXJyZWQuICBJZiB0aGUgcmVwb3NpdG9yeSdzIGluZGV4IGhhcyBhbHJlYWR5IGJlZW4KKyAqIHBvcHVsYXRlZCB0aGVuIHRoZSBudW1iZXIgb2YgZW50cmllcyB3aWxsIHNpbXBseSBiZSByZXR1cm5lZC4KKyAqLworaW50IHJlcG9fcmVhZF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CitpbnQgcmVwb19ob2xkX2xvY2tlZF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgIHN0cnVjdCBsb2NrX2ZpbGUgKmxmLAorCQkJICAgaW50IGZsYWdzKTsKKworaW50IHJlcG9fcmVhZF9pbmRleF9wcmVsb2FkKHN0cnVjdCByZXBvc2l0b3J5ICosCisJCQkgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCSAgICB1bnNpZ25lZCByZWZyZXNoX2ZsYWdzKTsKK2ludCByZXBvX3JlYWRfaW5kZXhfdW5tZXJnZWQoc3RydWN0IHJlcG9zaXRvcnkgKik7CisvKgorICogT3Bwb3J0dW5pc3RpY2FsbHkgdXBkYXRlIHRoZSBpbmRleCBidXQgZG8gbm90IGNvbXBsYWluIGlmIHdlIGNhbid0LgorICogVGhlIGxvY2tmaWxlIGlzIGFsd2F5cyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suCisgKi8KK3ZvaWQgcmVwb191cGRhdGVfaW5kZXhfaWZfYWJsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBzdHJ1Y3QgbG9ja19maWxlICopOworCit2b2lkIHByZXBhcmVfcmVwb19zZXR0aW5ncyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcik7CisKKyNlbmRpZiAvKiBSRVBPU0lUT1JZX0ggKi8KZGlmZiAtLWdpdCBhL3JlcmVyZS5jIGIvcmVyZXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4MTEzMQotLS0gL2Rldi9udWxsCisrKyBiL3JlcmVyZS5jCkBAIC0wLDAgKzEsMTI1NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKworI2RlZmluZSBSRVNPTFZFRCAwCisjZGVmaW5lIFBVTlRFRCAxCisjZGVmaW5lIFRIUkVFX1NUQUdFRCAyCit2b2lkICpSRVJFUkVfUkVTT0xWRUQgPSAmUkVSRVJFX1JFU09MVkVEOworCisvKiBpZiByZXJlcmVfZW5hYmxlZCA9PSAtMSwgZmFsbCBiYWNrIHRvIGRldGVjdGlvbiBvZiAuZ2l0L3JyLWNhY2hlICovCitzdGF0aWMgaW50IHJlcmVyZV9lbmFibGVkID0gLTE7CisKKy8qIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGNsZWFubHkgcmVzb2x2ZWQgcGF0aHMgdG8gdGhlIGluZGV4ICovCitzdGF0aWMgaW50IHJlcmVyZV9hdXRvdXBkYXRlOworCitzdGF0aWMgaW50IHJlcmVyZV9kaXJfbnI7CitzdGF0aWMgaW50IHJlcmVyZV9kaXJfYWxsb2M7CisKKyNkZWZpbmUgUlJfSEFTX1BPU1RJTUFHRSAxCisjZGVmaW5lIFJSX0hBU19QUkVJTUFHRSAyCitzdGF0aWMgc3RydWN0IHJlcmVyZV9kaXIgeworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfTUFYX0hFWFNaXTsKKwlpbnQgc3RhdHVzX2FsbG9jLCBzdGF0dXNfbnI7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzOworfSAqKnJlcmVyZV9kaXI7CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVyZXJlX2RpcnModm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVyZXJlX2Rpcl9ucjsgaSsrKSB7CisJCWZyZWUocmVyZXJlX2RpcltpXS0+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+ZF9uYW1lKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKworCS8qIC4uLiBhbmQgdGhlbiByZW1vdmUgdGhlIGVtcHR5IGRpcmVjdG9yaWVzICovCisJZm9yIChpID0gMDsgaSA8IHRvX3JlbW92ZS5ucjsgaSsrKQorCQlybWRpcihnaXRfcGF0aCgicnItY2FjaGUvJXMiLCB0b19yZW1vdmUuaXRlbXNbaV0uc3RyaW5nKSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnRvX3JlbW92ZSwgMCk7CisJcm9sbGJhY2tfbG9ja19maWxlKCZ3cml0ZV9sb2NrKTsKK30KKworLyoKKyAqIER1cmluZyBhIGNvbmZsaWN0IHJlc29sdXRpb24sIGFmdGVyICJyZXJlcmUiIHJlY29yZGVkIHRoZQorICogcHJlaW1hZ2VzLCBhYmFuZG9uIHRoZW0gaWYgdGhlIHVzZXIgZGlkIG5vdCByZXNvbHZlIHRoZW0gb3IKKyAqIHJlY29yZCB0aGVpciByZXNvbHV0aW9ucy4gIEFuZCBkcm9wICRHSVRfRElSL01FUkdFX1JSLgorICoKKyAqIE5FRURTV09SSzogc2hvdWxkbid0IHdlIGJlIGNhbGxpbmcgdGhpcyBmcm9tICJyZXNldCAtLWhhcmQiPworICovCit2b2lkIHJlcmVyZV9jbGVhcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHN0cmluZ19saXN0ICptZXJnZV9ycikKK3sKKwlpbnQgaTsKKworCWlmIChzZXR1cF9yZXJlcmUociwgbWVyZ2VfcnIsIDApIDwgMCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZXJlcmVfaWQgKmlkID0gbWVyZ2VfcnItPml0ZW1zW2ldLnV0aWw7CisJCWlmICghaGFzX3JlcmVyZV9yZXNvbHV0aW9uKGlkKSkgeworCQkJdW5saW5rX3JyX2l0ZW0oaWQpOworCQkJcm1kaXIocmVyZXJlX3BhdGgoaWQsIE5VTEwpKTsKKwkJfQorCX0KKwl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aF9tZXJnZV9ycihyKSk7CisJcm9sbGJhY2tfbG9ja19maWxlKCZ3cml0ZV9sb2NrKTsKK30KZGlmZiAtLWdpdCBhL3JlcmVyZS5oIGIvcmVyZXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyZDc5YwotLS0gL2Rldi9udWxsCisrKyBiL3JlcmVyZS5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgUkVSRVJFX0gKKyNkZWZpbmUgUkVSRVJFX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBwYXRoc3BlYzsKK3N0cnVjdCByZXBvc2l0b3J5OworCisjZGVmaW5lIFJFUkVSRV9BVVRPVVBEQVRFICAgMDEKKyNkZWZpbmUgUkVSRVJFX05PQVVUT1VQREFURSAwMgorI2RlZmluZSBSRVJFUkVfUkVBRE9OTFkgICAgIDA0CisKKy8qCisgKiBNYXJrcyBwYXRocyB0aGF0IGhhdmUgYmVlbiBoYW5kLXJlc29sdmVkIGFuZCBhZGRlZCB0byB0aGUKKyAqIGluZGV4LiBTZXQgaW4gdGhlIHV0aWwgZmllbGQgb2Ygc3VjaCBwYXRocyBhZnRlciBjYWxsaW5nCisgKiByZXJlcmVfcmVtYWluaW5nLgorICovCitleHRlcm4gdm9pZCAqUkVSRVJFX1JFU09MVkVEOworCitzdHJ1Y3QgcmVyZXJlX2RpcjsKK3N0cnVjdCByZXJlcmVfaWQgeworCXN0cnVjdCByZXJlcmVfZGlyICpjb2xsZWN0aW9uOworCWludCB2YXJpYW50OworfTsKKworaW50IHNldHVwX3JlcmVyZShzdHJ1Y3QgcmVwb3NpdG9yeSAqLHN0cnVjdCBzdHJpbmdfbGlzdCAqLCBpbnQpOworI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUworI2RlZmluZSByZXJlcmUoZmxhZ3MpIHJlcG9fcmVyZXJlKHRoZV9yZXBvc2l0b3J5LCBmbGFncykKKyNlbmRpZgoraW50IHJlcG9fcmVyZXJlKHN0cnVjdCByZXBvc2l0b3J5ICosIGludCk7CisvKgorICogR2l2ZW4gdGhlIGNvbmZsaWN0IElEIGFuZCB0aGUgbmFtZSBvZiBhICJmaWxlIiB1c2VkIGZvciByZXBsYXlpbmcKKyAqIHRoZSByZWNvcmRlZCByZXNvbHV0aW9uIChlLmcuICJwcmVpbWFnZSIsICJwb3N0aW1hZ2UiKSwgcmV0dXJuIHRoZQorICogcGF0aCB0byB0aGF0IGZpbGVzeXN0ZW0gZW50aXR5LiAgV2l0aCAiZmlsZSIgc3BlY2lmaWVkIHdpdGggTlVMTCwKKyAqIHJldHVybiB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgaG91c2VzIHRoZXNlIGZpbGVzLgorICovCitjb25zdCBjaGFyICpyZXJlcmVfcGF0aChjb25zdCBzdHJ1Y3QgcmVyZXJlX2lkICosIGNvbnN0IGNoYXIgKmZpbGUpOworaW50IHJlcmVyZV9mb3JnZXQoc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHBhdGhzcGVjICopOworaW50IHJlcmVyZV9yZW1haW5pbmcoc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHN0cmluZ19saXN0ICopOwordm9pZCByZXJlcmVfY2xlYXIoc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHN0cmluZ19saXN0ICopOwordm9pZCByZXJlcmVfZ2Moc3RydWN0IHJlcG9zaXRvcnkgKiwgc3RydWN0IHN0cmluZ19saXN0ICopOworCisjZGVmaW5lIE9QVF9SRVJFUkVfQVVUT1VQREFURSh2KSBPUFRfVVlOKDAsICJyZXJlcmUtYXV0b3VwZGF0ZSIsICh2KSwgXAorCU5fKCJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZXNvbHZlLXVuZG8uYyBiL3Jlc29sdmUtdW5kby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjMyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9yZXNvbHZlLXVuZG8uYwpAQCAtMCwwICsxLDE5NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyogVGhlIG9ubHkgZXJyb3IgY2FzZSBpcyB0byBydW4gb3V0IG9mIG1lbW9yeSBpbiBzdHJpbmctbGlzdCAqLwordm9pZCByZWNvcmRfcmVzb2x2ZV91bmRvKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpsb3N0OworCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqdWk7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZXNvbHZlX3VuZG87CisJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCisJaWYgKCFzdGFnZSkKKwkJcmV0dXJuOworCisJaWYgKCFpc3RhdGUtPnJlc29sdmVfdW5kbykgeworCQlyZXNvbHZlX3VuZG8gPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVzb2x2ZV91bmRvKSk7CisJCXJlc29sdmVfdW5kby0+c3RyZHVwX3N0cmluZ3MgPSAxOworCQlpc3RhdGUtPnJlc29sdmVfdW5kbyA9IHJlc29sdmVfdW5kbzsKKwl9CisJcmVzb2x2ZV91bmRvID0gaXN0YXRlLT5yZXNvbHZlX3VuZG87CisJbG9zdCA9IHN0cmluZ19saXN0X2luc2VydChyZXNvbHZlX3VuZG8sIGNlLT5uYW1lKTsKKwlpZiAoIWxvc3QtPnV0aWwpCisJCWxvc3QtPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZigqdWkpKTsKKwl1aSA9IGxvc3QtPnV0aWw7CisJb2lkY3B5KCZ1aS0+b2lkW3N0YWdlIC0gMV0sICZjZS0+b2lkKTsKKwl1aS0+bW9kZVtzdGFnZSAtIDFdID0gY2UtPmNlX21vZGU7Cit9CisKK3ZvaWQgcmVzb2x2ZV91bmRvX3dyaXRlKHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kbykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHJlc29sdmVfdW5kbykgeworCQlzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8gKnVpID0gaXRlbS0+dXRpbDsKKwkJaW50IGk7CisKKwkJaWYgKCF1aSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfYWRkc3RyKHNiLCBpdGVtLT5zdHJpbmcpOworCQlzdHJidWZfYWRkY2goc2IsIDApOworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJc3RyYnVmX2FkZGYoc2IsICIlbyVjIiwgdWktPm1vZGVbaV0sIDApOworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlpZiAoIXVpLT5tb2RlW2ldKQorCQkJCWNvbnRpbnVlOworCQkJc3RyYnVmX2FkZChzYiwgdWktPm9pZFtpXS5oYXNoLCB0aGVfaGFzaF9hbGdvLT5yYXdzeik7CisJCX0KKwl9Cit9CisKK3N0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvX3JlYWQoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvOworCXNpemVfdCBsZW47CisJY2hhciAqZW5kcHRyOworCWludCBpOworCWNvbnN0IHVuc2lnbmVkIHJhd3N6ID0gdGhlX2hhc2hfYWxnby0+cmF3c3o7CisKKwlyZXNvbHZlX3VuZG8gPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVzb2x2ZV91bmRvKSk7CisJcmVzb2x2ZV91bmRvLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisKKwl3aGlsZSAoc2l6ZSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqbG9zdDsKKwkJc3RydWN0IHJlc29sdmVfdW5kb19pbmZvICp1aTsKKworCQlsZW4gPSBzdHJsZW4oZGF0YSkgKyAxOworCQlpZiAoc2l6ZSA8PSBsZW4pCisJCQlnb3RvIGVycm9yOworCQlsb3N0ID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHJlc29sdmVfdW5kbywgZGF0YSk7CisJCWlmICghbG9zdC0+dXRpbCkKKwkJCWxvc3QtPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZigqdWkpKTsKKwkJdWkgPSBsb3N0LT51dGlsOworCQlzaXplIC09IGxlbjsKKwkJZGF0YSArPSBsZW47CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJdWktPm1vZGVbaV0gPSBzdHJ0b3VsKGRhdGEsICZlbmRwdHIsIDgpOworCQkJaWYgKCFlbmRwdHIgfHwgZW5kcHRyID09IGRhdGEgfHwgKmVuZHB0cikKKwkJCQlnb3RvIGVycm9yOworCQkJbGVuID0gKGVuZHB0ciArIDEpIC0gKGNoYXIqKWRhdGE7CisJCQlpZiAoc2l6ZSA8PSBsZW4pCisJCQkJZ290byBlcnJvcjsKKwkJCXNpemUgLT0gbGVuOworCQkJZGF0YSArPSBsZW47CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlpZiAoIXVpLT5tb2RlW2ldKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHNpemUgPCByYXdzeikKKwkJCQlnb3RvIGVycm9yOworCQkJb2lkcmVhZCgmdWktPm9pZFtpXSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkYXRhKTsKKwkJCXNpemUgLT0gcmF3c3o7CisJCQlkYXRhICs9IHJhd3N6OworCQl9CisJfQorCXJldHVybiByZXNvbHZlX3VuZG87CisKK2Vycm9yOgorCXN0cmluZ19saXN0X2NsZWFyKHJlc29sdmVfdW5kbywgMSk7CisJZXJyb3IoIkluZGV4IHJlY29yZHMgaW52YWxpZCByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCByZXNvbHZlX3VuZG9fY2xlYXJfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZXNvbHZlX3VuZG8gPSBpc3RhdGUtPnJlc29sdmVfdW5kbzsKKwlpZiAoIXJlc29sdmVfdW5kbykKKwkJcmV0dXJuOworCXN0cmluZ19saXN0X2NsZWFyKHJlc29sdmVfdW5kbywgMSk7CisJZnJlZShyZXNvbHZlX3VuZG8pOworCWlzdGF0ZS0+cmVzb2x2ZV91bmRvID0gTlVMTDsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gUkVTT0xWRV9VTkRPX0NIQU5HRUQ7Cit9CisKK2ludCB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgcG9zKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHJlc29sdmVfdW5kb19pbmZvICpydTsKKwlpbnQgaSwgZXJyID0gMCwgbWF0Y2hlZDsKKwljaGFyICpuYW1lOworCisJaWYgKCFpc3RhdGUtPnJlc29sdmVfdW5kbykKKwkJcmV0dXJuIHBvczsKKworCWNlID0gaXN0YXRlLT5jYWNoZVtwb3NdOworCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJLyogYWxyZWFkeSB1bm1lcmdlZCAqLworCQl3aGlsZSAoKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpICYmCisJCSAgICAgICAhIHN0cmNtcChpc3RhdGUtPmNhY2hlW3Bvc10tPm5hbWUsIGNlLT5uYW1lKSkKKwkJCXBvcysrOworCQlyZXR1cm4gcG9zIC0gMTsgLyogcmV0dXJuIHRoZSBsYXN0IGVudHJ5IHByb2Nlc3NlZCAqLworCX0KKwlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGlzdGF0ZS0+cmVzb2x2ZV91bmRvLCBjZS0+bmFtZSk7CisJaWYgKCFpdGVtKQorCQlyZXR1cm4gcG9zOworCXJ1ID0gaXRlbS0+dXRpbDsKKwlpZiAoIXJ1KQorCQlyZXR1cm4gcG9zOworCW1hdGNoZWQgPSBjZS0+Y2VfZmxhZ3MgJiBDRV9NQVRDSEVEOworCW5hbWUgPSB4c3RyZHVwKGNlLT5uYW1lKTsKKwlyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBwb3MpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpuY2U7CisJCWlmICghcnUtPm1vZGVbaV0pCisJCQljb250aW51ZTsKKwkJbmNlID0gbWFrZV9jYWNoZV9lbnRyeShpc3RhdGUsCisJCQkJICAgICAgIHJ1LT5tb2RlW2ldLAorCQkJCSAgICAgICAmcnUtPm9pZFtpXSwKKwkJCQkgICAgICAgbmFtZSwgaSArIDEsIDApOworCQlpZiAobWF0Y2hlZCkKKwkJCW5jZS0+Y2VfZmxhZ3MgfD0gQ0VfTUFUQ0hFRDsKKwkJaWYgKGFkZF9pbmRleF9lbnRyeShpc3RhdGUsIG5jZSwgQUREX0NBQ0hFX09LX1RPX0FERCkpIHsKKwkJCWVyciA9IDE7CisJCQllcnJvcigiY2Fubm90IHVubWVyZ2UgJyVzJyIsIG5hbWUpOworCQl9CisJfQorCWZyZWUobmFtZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIHBvczsKKwlmcmVlKHJ1KTsKKwlpdGVtLT51dGlsID0gTlVMTDsKKwlyZXR1cm4gdW5tZXJnZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIHBvcyk7Cit9CisKK3ZvaWQgdW5tZXJnZV9tYXJrZWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IGk7CisKKwlpZiAoIWlzdGF0ZS0+cmVzb2x2ZV91bmRvKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRCkKKwkJCWkgPSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgaSk7CisJfQorfQorCit2b2lkIHVubWVyZ2VfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJaW50IGk7CisKKwlpZiAoIWlzdGF0ZS0+cmVzb2x2ZV91bmRvKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoIWNlX3BhdGhfbWF0Y2goaXN0YXRlLCBjZSwgcGF0aHNwZWMsIE5VTEwpKQorCQkJY29udGludWU7CisJCWkgPSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgaSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvcmVzb2x2ZS11bmRvLmggYi9yZXNvbHZlLXVuZG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjNmMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzb2x2ZS11bmRvLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBSRVNPTFZFX1VORE9fSAorI2RlZmluZSBSRVNPTFZFX1VORE9fSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RydWN0IHJlc29sdmVfdW5kb19pbmZvIHsKKwl1bnNpZ25lZCBpbnQgbW9kZVszXTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZFszXTsKK307CisKK3ZvaWQgcmVjb3JkX3Jlc29sdmVfdW5kbyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGNhY2hlX2VudHJ5ICopOwordm9pZCByZXNvbHZlX3VuZG9fd3JpdGUoc3RydWN0IHN0cmJ1ZiAqLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKik7CitzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kb19yZWFkKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIHJlc29sdmVfdW5kb19jbGVhcl9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CitpbnQgdW5tZXJnZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgaW50KTsKK3ZvaWQgdW5tZXJnZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICopOwordm9pZCB1bm1lcmdlX21hcmtlZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uYyBiL3JldmlzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEzNjkyOQotLS0gL2Rldi9udWxsCisrKyBiL3JldmlzaW9uLmMKQEAgLTAsMCArMSwzOTc4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKKyNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKyNpbmNsdWRlICJwYXRjaC1pZHMuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJsaW5lLWxvZy5oIgorI2luY2x1ZGUgIm1haWxtYXAuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJiaXNlY3QuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImNvbW1pdC1yZWFjaC5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAidXRmOC5oIgorCit2b2xhdGlsZSBzaG93X2Vhcmx5X291dHB1dF9mbl90IHNob3dfZWFybHlfb3V0cHV0OworCitzdGF0aWMgY29uc3QgY2hhciAqdGVybV9iYWQ7CitzdGF0aWMgY29uc3QgY2hhciAqdGVybV9nb29kOworCitpbXBsZW1lbnRfc2hhcmVkX2NvbW1pdF9zbGFiKHJldmlzaW9uX3NvdXJjZXMsIGNoYXIgKik7CisKK3ZvaWQgc2hvd19vYmplY3Rfd2l0aF9uYW1lKEZJTEUgKm91dCwgc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKnA7CisKKwlmcHJpbnRmKG91dCwgIiVzICIsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisJZm9yIChwID0gbmFtZTsgKnAgJiYgKnAgIT0gJ1xuJzsgcCsrKQorCQlmcHV0YygqcCwgb3V0KTsKKwlmcHV0YygnXG4nLCBvdXQpOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2Jsb2JfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgYmxvYiAqYmxvYikKK3sKKwlpZiAoIWJsb2IpCisJCXJldHVybjsKKwlpZiAoYmxvYi0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJcmV0dXJuOworCWJsb2ItPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworfQorCitzdGF0aWMgdm9pZCBtYXJrX3RyZWVfY29udGVudHNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgICBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisKKwlpZiAocGFyc2VfdHJlZV9nZW50bHkodHJlZSwgMSkgPCAwKQorCQlyZXR1cm47CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlzd2l0Y2ggKG9iamVjdF90eXBlKGVudHJ5Lm1vZGUpKSB7CisJCWNhc2UgT0JKX1RSRUU6CisJCQltYXJrX3RyZWVfdW5pbnRlcmVzdGluZyhyLCBsb29rdXBfdHJlZShyLCAmZW50cnkub2lkKSk7CisJCQlicmVhazsKKwkJY2FzZSBPQkpfQkxPQjoKKwkJCW1hcmtfYmxvYl91bmludGVyZXN0aW5nKGxvb2t1cF9ibG9iKHIsICZlbnRyeS5vaWQpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogU3VicHJvamVjdCBjb21taXQgLSBub3QgaW4gdGhpcyByZXBvc2l0b3J5ICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgdHJlZSBhbnkgbW9yZQorCSAqIGFmdGVyIGl0IGhhcyBiZWVuIG1hcmtlZCB1bmludGVyZXN0aW5nLgorCSAqLworCWZyZWVfdHJlZV9idWZmZXIodHJlZSk7Cit9CisKK3ZvaWQgbWFya190cmVlX3VuaW50ZXJlc3Rpbmcoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCWlmICghdHJlZSkKKwkJcmV0dXJuOworCisJb2JqID0gJnRyZWUtPm9iamVjdDsKKwlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybjsKKwlvYmotPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJbWFya190cmVlX2NvbnRlbnRzX3VuaW50ZXJlc3RpbmcociwgdHJlZSk7Cit9CisKK3N0cnVjdCBwYXRoX2FuZF9vaWRzX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY2hhciAqcGF0aDsKKwlzdHJ1Y3Qgb2lkc2V0IHRyZWVzOworfTsKKworc3RhdGljIGludCBwYXRoX2FuZF9vaWRzX2NtcChjb25zdCB2b2lkICpoYXNobWFwX2NtcF9mbl9kYXRhLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZXB0ciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgICAgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgcGF0aF9hbmRfb2lkc19lbnRyeSAqZTEsICplMjsKKworCWUxID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCBwYXRoX2FuZF9vaWRzX2VudHJ5LCBlbnQpOworCWUyID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IHBhdGhfYW5kX29pZHNfZW50cnksIGVudCk7CisKKwlyZXR1cm4gc3RyY21wKGUxLT5wYXRoLCBlMi0+cGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGhzX2FuZF9vaWRzX2luaXQoc3RydWN0IGhhc2htYXAgKm1hcCkKK3sKKwloYXNobWFwX2luaXQobWFwLCBwYXRoX2FuZF9vaWRzX2NtcCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGhzX2FuZF9vaWRzX2NsZWFyKHN0cnVjdCBoYXNobWFwICptYXApCit7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCXN0cnVjdCBwYXRoX2FuZF9vaWRzX2VudHJ5ICplbnRyeTsKKworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkobWFwLCAmaXRlciwgZW50cnksIGVudCAvKiBtZW1iZXIgbmFtZSAqLykgeworCQlvaWRzZXRfY2xlYXIoJmVudHJ5LT50cmVlcyk7CisJCWZyZWUoZW50cnktPnBhdGgpOworCX0KKworCWhhc2htYXBfZnJlZV9lbnRyaWVzKG1hcCwgc3RydWN0IHBhdGhfYW5kX29pZHNfZW50cnksIGVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGhzX2FuZF9vaWRzX2luc2VydChzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJCSAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgaGFzaCA9IHN0cmhhc2gocGF0aCk7CisJc3RydWN0IHBhdGhfYW5kX29pZHNfZW50cnkga2V5OworCXN0cnVjdCBwYXRoX2FuZF9vaWRzX2VudHJ5ICplbnRyeTsKKworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LmVudCwgaGFzaCk7CisKKwkvKiB1c2UgYSBzaGFsbG93IGNvcHkgZm9yIHRoZSBsb29rdXAgKi8KKwlrZXkucGF0aCA9IChjaGFyICopcGF0aDsKKwlvaWRzZXRfaW5pdCgma2V5LnRyZWVzLCAwKTsKKworCWVudHJ5ID0gaGFzaG1hcF9nZXRfZW50cnkobWFwLCAma2V5LCBlbnQsIE5VTEwpOworCWlmICghZW50cnkpIHsKKwkJZW50cnkgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcGF0aF9hbmRfb2lkc19lbnRyeSkpOworCQloYXNobWFwX2VudHJ5X2luaXQoJmVudHJ5LT5lbnQsIGhhc2gpOworCQllbnRyeS0+cGF0aCA9IHhzdHJkdXAoa2V5LnBhdGgpOworCQlvaWRzZXRfaW5pdCgmZW50cnktPnRyZWVzLCAxNik7CisJCWhhc2htYXBfcHV0KG1hcCwgJmVudHJ5LT5lbnQpOworCX0KKworCW9pZHNldF9pbnNlcnQoJmVudHJ5LT50cmVlcywgb2lkKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2NoaWxkcmVuX2J5X3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJCSBzdHJ1Y3QgaGFzaG1hcCAqbWFwKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCWlmICghdHJlZSkKKwkJcmV0dXJuOworCisJaWYgKHBhcnNlX3RyZWVfZ2VudGx5KHRyZWUsIDEpIDwgMCkKKwkJcmV0dXJuOworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJc3dpdGNoIChvYmplY3RfdHlwZShlbnRyeS5tb2RlKSkgeworCQljYXNlIE9CSl9UUkVFOgorCQkJcGF0aHNfYW5kX29pZHNfaW5zZXJ0KG1hcCwgZW50cnkucGF0aCwgJmVudHJ5Lm9pZCk7CisKKwkJCWlmICh0cmVlLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQkJc3RydWN0IHRyZWUgKmNoaWxkID0gbG9va3VwX3RyZWUociwgJmVudHJ5Lm9pZCk7CisJCQkJaWYgKGNoaWxkKQorCQkJCQljaGlsZC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBPQkpfQkxPQjoKKwkJCWlmICh0cmVlLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQkJc3RydWN0IGJsb2IgKmNoaWxkID0gbG9va3VwX2Jsb2IociwgJmVudHJ5Lm9pZCk7CisJCQkJaWYgKGNoaWxkKQorCQkJCQljaGlsZC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIFN1YnByb2plY3QgY29tbWl0IC0gbm90IGluIHRoaXMgcmVwb3NpdG9yeSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworfQorCit2b2lkIG1hcmtfdHJlZXNfdW5pbnRlcmVzdGluZ19zcGFyc2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgICBzdHJ1Y3Qgb2lkc2V0ICp0cmVlcykKK3sKKwl1bnNpZ25lZCBoYXNfaW50ZXJlc3RpbmcgPSAwLCBoYXNfdW5pbnRlcmVzdGluZyA9IDA7CisJc3RydWN0IGhhc2htYXAgbWFwOworCXN0cnVjdCBoYXNobWFwX2l0ZXIgbWFwX2l0ZXI7CisJc3RydWN0IHBhdGhfYW5kX29pZHNfZW50cnkgKmVudHJ5OworCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwlzdHJ1Y3Qgb2lkc2V0X2l0ZXIgaXRlcjsKKworCW9pZHNldF9pdGVyX2luaXQodHJlZXMsICZpdGVyKTsKKwl3aGlsZSAoKCFoYXNfaW50ZXJlc3RpbmcgfHwgIWhhc191bmludGVyZXN0aW5nKSAmJgorCSAgICAgICAob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gbG9va3VwX3RyZWUociwgb2lkKTsKKworCQlpZiAoIXRyZWUpCisJCQljb250aW51ZTsKKworCQlpZiAodHJlZS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWhhc191bmludGVyZXN0aW5nID0gMTsKKwkJZWxzZQorCQkJaGFzX2ludGVyZXN0aW5nID0gMTsKKwl9CisKKwkvKiBEbyBub3Qgd2FsayB1bmxlc3Mgd2UgaGF2ZSBib3RoIHR5cGVzIG9mIHRyZWVzLiAqLworCWlmICghaGFzX3VuaW50ZXJlc3RpbmcgfHwgIWhhc19pbnRlcmVzdGluZykKKwkJcmV0dXJuOworCisJcGF0aHNfYW5kX29pZHNfaW5pdCgmbWFwKTsKKworCW9pZHNldF9pdGVyX2luaXQodHJlZXMsICZpdGVyKTsKKwl3aGlsZSAoKG9pZCA9IG9pZHNldF9pdGVyX25leHQoJml0ZXIpKSkgeworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGxvb2t1cF90cmVlKHIsIG9pZCk7CisJCWFkZF9jaGlsZHJlbl9ieV9wYXRoKHIsIHRyZWUsICZtYXApOworCX0KKworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJm1hcCwgJm1hcF9pdGVyLCBlbnRyeSwgZW50IC8qIG1lbWJlciBuYW1lICovKQorCQltYXJrX3RyZWVzX3VuaW50ZXJlc3Rpbmdfc3BhcnNlKHIsICZlbnRyeS0+dHJlZXMpOworCisJcGF0aHNfYW5kX29pZHNfY2xlYXIoJm1hcCk7Cit9CisKK3N0cnVjdCBjb21taXRfc3RhY2sgeworCXN0cnVjdCBjb21taXQgKippdGVtczsKKwlzaXplX3QgbnIsIGFsbG9jOworfTsKKyNkZWZpbmUgQ09NTUlUX1NUQUNLX0lOSVQgeyBOVUxMLCAwLCAwIH0KKworc3RhdGljIHZvaWQgY29tbWl0X3N0YWNrX3B1c2goc3RydWN0IGNvbW1pdF9zdGFjayAqc3RhY2ssIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlBTExPQ19HUk9XKHN0YWNrLT5pdGVtcywgc3RhY2stPm5yICsgMSwgc3RhY2stPmFsbG9jKTsKKwlzdGFjay0+aXRlbXNbc3RhY2stPm5yKytdID0gY29tbWl0OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqY29tbWl0X3N0YWNrX3BvcChzdHJ1Y3QgY29tbWl0X3N0YWNrICpzdGFjaykKK3sKKwlyZXR1cm4gc3RhY2stPm5yID8gc3RhY2stPml0ZW1zWy0tc3RhY2stPm5yXSA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF9zdGFja19jbGVhcihzdHJ1Y3QgY29tbWl0X3N0YWNrICpzdGFjaykKK3sKKwlGUkVFX0FORF9OVUxMKHN0YWNrLT5pdGVtcyk7CisJc3RhY2stPm5yID0gc3RhY2stPmFsbG9jID0gMDsKK30KKworc3RhdGljIHZvaWQgbWFya19vbmVfcGFyZW50X3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQkgIHN0cnVjdCBjb21taXRfc3RhY2sgKnBlbmRpbmcpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsOworCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJcmV0dXJuOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIGhhdmVuJ3QgcGFyc2VkIHRoZSBwYXJlbnQKKwkgKiB5ZXQsIHNvIHdlIHdvbid0IGhhdmUgYSBwYXJlbnQgb2YgYSBwYXJlbnQKKwkgKiBoZXJlLiBIb3dldmVyLCBpdCBtYXkgdHVybiBvdXQgdGhhdCB3ZSd2ZQorCSAqIHJlYWNoZWQgdGhpcyBjb21taXQgc29tZSBvdGhlciB3YXkgKHdoZXJlIGl0CisJICogd2Fzbid0IHVuaW50ZXJlc3RpbmcpLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQKKwkgKiB0byBtYXJrIGl0cyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IHRvby4uCisJICovCisJZm9yIChsID0gY29tbWl0LT5wYXJlbnRzOyBsOyBsID0gbC0+bmV4dCkKKwkJY29tbWl0X3N0YWNrX3B1c2gocGVuZGluZywgbC0+aXRlbSk7Cit9CisKK3ZvaWQgbWFya19wYXJlbnRzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfc3RhY2sgcGVuZGluZyA9IENPTU1JVF9TVEFDS19JTklUOworCXN0cnVjdCBjb21taXRfbGlzdCAqbDsKKworCWZvciAobCA9IGNvbW1pdC0+cGFyZW50czsgbDsgbCA9IGwtPm5leHQpCisJCW1hcmtfb25lX3BhcmVudF91bmludGVyZXN0aW5nKGwtPml0ZW0sICZwZW5kaW5nKTsKKworCXdoaWxlIChwZW5kaW5nLm5yID4gMCkKKwkJbWFya19vbmVfcGFyZW50X3VuaW50ZXJlc3RpbmcoY29tbWl0X3N0YWNrX3BvcCgmcGVuZGluZyksCisJCQkJCSAgICAgICZwZW5kaW5nKTsKKworCWNvbW1pdF9zdGFja19jbGVhcigmcGVuZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgc3RydWN0IG9iamVjdCAqb2JqLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbW9kZSwKKwkJCQkJIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKCFvYmopCisJCXJldHVybjsKKwlpZiAocmV2cy0+bm9fd2FsayAmJiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQlyZXZzLT5ub193YWxrID0gMDsKKwlpZiAocmV2cy0+cmVmbG9nX2luZm8gJiYgb2JqLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IGxlbiA9IGludGVycHJldF9icmFuY2hfbmFtZShuYW1lLCAwLCAmYnVmLCAwKTsKKworCQlpZiAoMCA8IGxlbiAmJiBuYW1lW2xlbl0gJiYgYnVmLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbmFtZSArIGxlbik7CisJCWFkZF9yZWZsb2dfZm9yX3dhbGsocmV2cy0+cmVmbG9nX2luZm8sCisJCQkJICAgIChzdHJ1Y3QgY29tbWl0ICopb2JqLAorCQkJCSAgICBidWYuYnVmWzBdID8gYnVmLmJ1ZjogbmFtZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm47IC8qIGRvIG5vdCBhZGQgdGhlIGNvbW1pdCBpdHNlbGYgKi8KKwl9CisJYWRkX29iamVjdF9hcnJheV93aXRoX3BhdGgob2JqLCBuYW1lLCAmcmV2cy0+cGVuZGluZywgbW9kZSwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX29iamVjdF93aXRoX21vZGUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgc3RydWN0IG9iamVjdCAqb2JqLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbW9kZSkKK3sKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9wYXRoKHJldnMsIG9iaiwgbmFtZSwgbW9kZSwgTlVMTCk7Cit9CisKK3ZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHJldnMsIG9iaiwgbmFtZSwgU19JRklOVkFMSUQpOworfQorCit2b2lkIGFkZF9oZWFkX3RvX3BlbmRpbmcoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBvYmplY3QgKm9iajsKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZvaWQpKQorCQlyZXR1cm47CisJb2JqID0gcGFyc2Vfb2JqZWN0KHJldnMtPnJlcG8sICZvaWQpOworCWlmICghb2JqKQorCQlyZXR1cm47CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iaiwgIkhFQUQiKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3QgKmdldF9yZWZlcmVuY2Uoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisKKwkvKgorCSAqIElmIHRoZSByZXBvc2l0b3J5IGhhcyBjb21taXQgZ3JhcGhzLCByZXBvX3BhcnNlX2NvbW1pdCgpIGF2b2lkcworCSAqIHJlYWRpbmcgdGhlIG9iamVjdCBidWZmZXIsIHNvIHVzZSBpdCB3aGVuZXZlciBwb3NzaWJsZS4KKwkgKi8KKwlpZiAob2lkX29iamVjdF9pbmZvKHJldnMtPnJlcG8sIG9pZCwgTlVMTCkgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdChyZXZzLT5yZXBvLCBvaWQpOworCQlpZiAoIXJlcG9fcGFyc2VfY29tbWl0KHJldnMtPnJlcG8sIGMpKQorCQkJb2JqZWN0ID0gKHN0cnVjdCBvYmplY3QgKikgYzsKKwkJZWxzZQorCQkJb2JqZWN0ID0gTlVMTDsKKwl9IGVsc2UgeworCQlvYmplY3QgPSBwYXJzZV9vYmplY3QocmV2cy0+cmVwbywgb2lkKTsKKwl9CisKKwlpZiAoIW9iamVjdCkgeworCQlpZiAocmV2cy0+aWdub3JlX21pc3NpbmcpCisJCQlyZXR1cm4gb2JqZWN0OworCQlpZiAocmV2cy0+ZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzICYmIGlzX3Byb21pc29yX29iamVjdChvaWQpKQorCQkJcmV0dXJuIE5VTEw7CisJCWRpZSgiYmFkIG9iamVjdCAlcyIsIG5hbWUpOworCX0KKwlvYmplY3QtPmZsYWdzIHw9IGZsYWdzOworCXJldHVybiBvYmplY3Q7Cit9CisKK3ZvaWQgYWRkX3BlbmRpbmdfb2lkKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gZ2V0X3JlZmVyZW5jZShyZXZzLCBuYW1lLCBvaWQsIGZsYWdzKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCBuYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmhhbmRsZV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBlbnRyeS0+aXRlbTsKKwljb25zdCBjaGFyICpuYW1lID0gZW50cnktPm5hbWU7CisJY29uc3QgY2hhciAqcGF0aCA9IGVudHJ5LT5wYXRoOworCXVuc2lnbmVkIGludCBtb2RlID0gZW50cnktPm1vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IG9iamVjdC0+ZmxhZ3M7CisKKwkvKgorCSAqIFRhZyBvYmplY3Q/IExvb2sgd2hhdCBpdCBwb2ludHMgdG8uLgorCSAqLworCXdoaWxlIChvYmplY3QtPnR5cGUgPT0gT0JKX1RBRykgeworCQlzdHJ1Y3QgdGFnICp0YWcgPSAoc3RydWN0IHRhZyAqKSBvYmplY3Q7CisJCWlmIChyZXZzLT50YWdfb2JqZWN0cyAmJiAhKGZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCB0YWctPnRhZyk7CisJCW9iamVjdCA9IHBhcnNlX29iamVjdChyZXZzLT5yZXBvLCBnZXRfdGFnZ2VkX29pZCh0YWcpKTsKKwkJaWYgKCFvYmplY3QpIHsKKwkJCWlmIChyZXZzLT5pZ25vcmVfbWlzc2luZ19saW5rcyB8fCAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlmIChyZXZzLT5leGNsdWRlX3Byb21pc29yX29iamVjdHMgJiYKKwkJCSAgICBpc19wcm9taXNvcl9vYmplY3QoJnRhZy0+dGFnZ2VkLT5vaWQpKQorCQkJCXJldHVybiBOVUxMOworCQkJZGllKCJiYWQgb2JqZWN0ICVzIiwgb2lkX3RvX2hleCgmdGFnLT50YWdnZWQtPm9pZCkpOworCQl9CisJCW9iamVjdC0+ZmxhZ3MgfD0gZmxhZ3M7CisJCS8qCisJCSAqIFdlJ2xsIGhhbmRsZSB0aGUgdGFnZ2VkIG9iamVjdCBieSBsb29waW5nIG9yIGRyb3BwaW5nCisJCSAqIHRocm91Z2ggdG8gdGhlIG5vbi10YWcgaGFuZGxlcnMgYmVsb3cuIERvIG5vdAorCQkgKiBwcm9wYWdhdGUgcGF0aCBkYXRhIGZyb20gdGhlIHRhZydzIHBlbmRpbmcgZW50cnkuCisJCSAqLworCQlwYXRoID0gTlVMTDsKKwkJbW9kZSA9IDA7CisJfQorCisJLyoKKwkgKiBDb21taXQgb2JqZWN0PyBKdXN0IHJldHVybiBpdCwgd2UnbGwgZG8gYWxsIHRoZSBjb21wbGV4CisJICogcmVhY2hhYmlsaXR5IGNydWQuCisJICovCisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0OworCisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSA8IDApCisJCQlkaWUoInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiLCBuYW1lKTsKKwkJaWYgKGZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0KTsKKworCQkJaWYgKCFyZXZzLT50b3BvX29yZGVyIHx8ICFnZW5lcmF0aW9uX251bWJlcnNfZW5hYmxlZCh0aGVfcmVwb3NpdG9yeSkpCisJCQkJcmV2cy0+bGltaXRlZCA9IDE7CisJCX0KKwkJaWYgKHJldnMtPnNvdXJjZXMpIHsKKwkJCWNoYXIgKipzbG90ID0gcmV2aXNpb25fc291cmNlc19hdChyZXZzLT5zb3VyY2VzLCBjb21taXQpOworCisJCQlpZiAoISpzbG90KQorCQkJCSpzbG90ID0geHN0cmR1cChuYW1lKTsKKwkJfQorCQlyZXR1cm4gY29tbWl0OworCX0KKworCS8qCisJICogVHJlZSBvYmplY3Q/IEVpdGhlciBtYXJrIGl0IHVuaW50ZXJlc3RpbmcsIG9yIGFkZCBpdAorCSAqIHRvIHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gbG9vayBhdCBsYXRlci4uCisJICovCisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IChzdHJ1Y3QgdHJlZSAqKW9iamVjdDsKKwkJaWYgKCFyZXZzLT50cmVlX29iamVjdHMpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJbWFya190cmVlX2NvbnRlbnRzX3VuaW50ZXJlc3RpbmcocmV2cy0+cmVwbywgdHJlZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9wYXRoKHJldnMsIG9iamVjdCwgbmFtZSwgbW9kZSwgcGF0aCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogQmxvYiBvYmplY3Q/IFlvdSBrbm93IHRoZSBkcmlsbCBieSBub3cuLgorCSAqLworCWlmIChvYmplY3QtPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJaWYgKCFyZXZzLT5ibG9iX29iamVjdHMpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCXJldHVybiBOVUxMOworCQlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9wYXRoKHJldnMsIG9iamVjdCwgbmFtZSwgbW9kZSwgcGF0aCk7CisJCXJldHVybiBOVUxMOworCX0KKwlkaWUoIiVzIGlzIHVua25vd24gb2JqZWN0IiwgbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgZXZlcnlib2R5X3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdF9saXN0ICpvcmlnLAorCQkJCSAgIHN0cnVjdCBjb21taXQgKippbnRlcmVzdGluZ19jYWNoZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBvcmlnOworCisJaWYgKCppbnRlcmVzdGluZ19jYWNoZSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAqaW50ZXJlc3RpbmdfY2FjaGU7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCisJCSppbnRlcmVzdGluZ19jYWNoZSA9IGNvbW1pdDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogQSBkZWZpbml0aW9uIG9mICJyZWxldmFudCIgY29tbWl0IHRoYXQgd2UgY2FuIHVzZSB0byBzaW1wbGlmeSBsaW1pdGVkIGdyYXBocworICogYnkgZWxpbWluYXRpbmcgc2lkZSBicmFuY2hlcy4KKyAqCisgKiBBICJyZWxldmFudCIgY29tbWl0IGlzIG9uZSB0aGF0IGlzICFVTklOVEVSRVNUSU5HIChpZSB3ZSBhcmUgaW5jbHVkaW5nIGl0CisgKiBpbiBvdXIgbGlzdCksIG9yIHRoYXQgaXMgYSBzcGVjaWZpZWQgQk9UVE9NIGNvbW1pdC4gVGhlbiBhZnRlciBjb21wdXRpbmcKKyAqIGEgbGltaXRlZCBsaXN0LCBkdXJpbmcgcHJvY2Vzc2luZyB3ZSBjYW4gZ2VuZXJhbGx5IGlnbm9yZSBib3VuZGFyeSBtZXJnZXMKKyAqIGNvbWluZyBmcm9tIG91dHNpZGUgdGhlIGdyYXBoLCAoaWUgZnJvbSBpcnJlbGV2YW50IHBhcmVudHMpLCBhbmQgdHJlYXQKKyAqIHRob3NlIG1lcmdlcyBhcyBpZiB0aGV5IHdlcmUgc2luZ2xlLXBhcmVudC4gVFJFRVNBTUUgaXMgZGVmaW5lZCB0byBjb25zaWRlcgorICogb25seSByZWxldmFudCBwYXJlbnRzLCBpZiBhbnkuIElmIHdlIGFyZSBUUkVFU0FNRSB0byBvdXIgb24tZ3JhcGggcGFyZW50cywKKyAqIHdlIGRvbid0IGNhcmUgaWYgd2Ugd2VyZSAhVFJFRVNBTUUgdG8gbm9uLWdyYXBoIHBhcmVudHMuCisgKgorICogVHJlYXRpbmcgYm90dG9tIGNvbW1pdHMgYXMgcmVsZXZhbnQgZW5zdXJlcyB0aGF0IGEgbGltaXRlZCBncmFwaCdzCisgKiBjb25uZWN0aW9uIHRvIHRoZSBhY3R1YWwgYm90dG9tIGNvbW1pdCBpcyBub3Qgdmlld2VkIGFzIGEgc2lkZSBicmFuY2gsIGJ1dAorICogdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBncmFwaC4gRm9yIGV4YW1wbGU6CisgKgorICogICAuLi4uWi4uLkEtLS1YLS0tby0tLW8tLS1CCisgKiAgICAgICAgLiAgICAgLworICogICAgICAgICBXLS0tWQorICoKKyAqIFdoZW4gY29tcHV0aW5nICJBLi5CIiwgdGhlIEEtWCBjb25uZWN0aW9uIGlzIGF0IGxlYXN0IGFzIGltcG9ydGFudCBhcworICogWS1YLCBkZXNwaXRlIEEgYmVpbmcgZmxhZ2dlZCBVTklOVEVSRVNUSU5HLgorICoKKyAqIEFuZCB3aGVuIGNvbXB1dGluZyAtLWFuY2VzdHJ5LXBhdGggIkEuLkIiLCB0aGUgQS1YIGNvbm5lY3Rpb24gaXMgbW9yZQorICogaW1wb3J0YW50IHRoYW4gWS1YLCBkZXNwaXRlIGJvdGggQSBhbmQgWSBiZWluZyBmbGFnZ2VkIFVOSU5URVJFU1RJTkcuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJlbGV2YW50X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJcmV0dXJuIChjb21taXQtPm9iamVjdC5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgQk9UVE9NKSkgIT0gVU5JTlRFUkVTVElORzsKK30KKworLyoKKyAqIFJldHVybiBhIHNpbmdsZSByZWxldmFudCBjb21taXQgZnJvbSBhIHBhcmVudCBsaXN0LiBJZiB3ZSBhcmUgYSBUUkVFU0FNRQorICogY29tbWl0LCBhbmQgdGhpcyBzZWxlY3RzIG9uZSBvZiBvdXIgcGFyZW50cywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNpbXBsaWZ5IHRvCisgKiB0aGF0IHBhcmVudC4KKyAqLworc3RhdGljIHN0cnVjdCBjb21taXQgKm9uZV9yZWxldmFudF9wYXJlbnQoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgIHN0cnVjdCBjb21taXRfbGlzdCAqb3JpZykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBvcmlnOworCXN0cnVjdCBjb21taXQgKnJlbGV2YW50ID0gTlVMTDsKKworCWlmICghb3JpZykKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIEZvciAxLXBhcmVudCBjb21taXRzLCBvciBpZiBmaXJzdC1wYXJlbnQtb25seSwgdGhlbiByZXR1cm4gdGhhdAorCSAqIGZpcnN0IHBhcmVudCAoZXZlbiBpZiBub3QgInJlbGV2YW50IiBieSB0aGUgYWJvdmUgZGVmaW5pdGlvbikuCisJICogVFJFRVNBTUUgd2lsbCBoYXZlIGJlZW4gc2V0IHB1cmVseSBvbiB0aGF0IHBhcmVudC4KKwkgKi8KKwlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkgfHwgIW9yaWctPm5leHQpCisJCXJldHVybiBvcmlnLT5pdGVtOworCisJLyoKKwkgKiBGb3IgbXVsdGktcGFyZW50IGNvbW1pdHMsIGlkZW50aWZ5IGEgc29sZSByZWxldmFudCBwYXJlbnQsIGlmIGFueS4KKwkgKiBJZiB3ZSBoYXZlIG9ubHkgb25lIHJlbGV2YW50IHBhcmVudCwgdGhlbiBUUkVFU0FNRSB3aWxsIGJlIHNldCBwdXJlbHkKKwkgKiB3aXRoIHJlZ2FyZCB0byB0aGF0IHBhcmVudCwgYW5kIHdlIGNhbiBzaW1wbGlmeSBhY2NvcmRpbmdseS4KKwkgKgorCSAqIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSByZWxldmFudCBwYXJlbnQsIG9yIG5vIHJlbGV2YW50IHBhcmVudHMKKwkgKiAoYW5kIG11bHRpcGxlIGlycmVsZXZhbnQgb25lcyksIHRoZW4gd2UgY2FuJ3Qgc2VsZWN0IGEgcGFyZW50IGhlcmUKKwkgKiBhbmQgcmV0dXJuIE5VTEwuCisJICovCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWlmIChyZWxldmFudF9jb21taXQoY29tbWl0KSkgeworCQkJaWYgKHJlbGV2YW50KQorCQkJCXJldHVybiBOVUxMOworCQkJcmVsZXZhbnQgPSBjb21taXQ7CisJCX0KKwl9CisJcmV0dXJuIHJlbGV2YW50OworfQorCisvKgorICogVGhlIGdvYWwgaXMgdG8gZ2V0IFJFVl9UUkVFX05FVyBhcyB0aGUgcmVzdWx0IG9ubHkgaWYgdGhlCisgKiBkaWZmIGNvbnNpc3RzIG9mIGFsbCAnKycgKGFuZCBubyBvdGhlciBjaGFuZ2VzKSwgUkVWX1RSRUVfT0xECisgKiBpZiB0aGUgd2hvbGUgZGlmZiBpcyByZW1vdmFsIG9mIG9sZCBkYXRhLCBhbmQgb3RoZXJ3aXNlCisgKiBSRVZfVFJFRV9ESUZGRVJFTlQgKG9mIGNvdXJzZSBpZiB0aGUgdHJlZXMgYXJlIHRoZSBzYW1lIHdlCisgKiB3YW50IFJFVl9UUkVFX1NBTUUpLgorICoKKyAqIFRoZSBvbmx5IHRpbWUgd2UgY2FyZSBhYm91dCB0aGUgZGlzdGluY3Rpb24gaXMgd2hlbgorICogcmVtb3ZlX2VtcHR5X3RyZWVzIGlzIGluIGVmZmVjdCwgaW4gd2hpY2ggY2FzZSB3ZSBjYXJlIG9ubHkgYWJvdXQKKyAqIHdoZXRoZXIgdGhlIHdob2xlIGNoYW5nZSBpcyBSRVZfVFJFRV9ORVcsIG9yIGlmIHRoZXJlJ3MgYW5vdGhlciB0eXBlCisgKiBvZiBjaGFuZ2UuIFdoaWNoIG1lYW5zIHdlIGNhbiBzdG9wIHRoZSBkaWZmIGVhcmx5IGluIGVpdGhlciBvZiB0aGVzZQorICogY2FzZXM6CisgKgorICogICAxLiBXZSdyZSBub3QgdXNpbmcgcmVtb3ZlX2VtcHR5X3RyZWVzIGF0IGFsbC4KKyAqCisgKiAgIDIuIFdlIHNhdyBhbnl0aGluZyBleGNlcHQgUkVWX1RSRUVfTkVXLgorICovCitzdGF0aWMgaW50IHRyZWVfZGlmZmVyZW5jZSA9IFJFVl9UUkVFX1NBTUU7CisKK3N0YXRpYyB2b2lkIGZpbGVfYWRkX3JlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgICAgaW50IGFkZHJlbW92ZSwgdW5zaWduZWQgbW9kZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBvaWRfdmFsaWQsCisJCSAgICBjb25zdCBjaGFyICpmdWxscGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQoreworCWludCBkaWZmID0gYWRkcmVtb3ZlID09ICcrJyA/IFJFVl9UUkVFX05FVyA6IFJFVl9UUkVFX09MRDsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSBvcHRpb25zLT5jaGFuZ2VfZm5fZGF0YTsKKworCXRyZWVfZGlmZmVyZW5jZSB8PSBkaWZmOworCWlmICghcmV2cy0+cmVtb3ZlX2VtcHR5X3RyZWVzIHx8IHRyZWVfZGlmZmVyZW5jZSAhPSBSRVZfVFJFRV9ORVcpCisJCW9wdGlvbnMtPmZsYWdzLmhhc19jaGFuZ2VzID0gMTsKK30KKworc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKKwkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQkgaW50IG9sZF9vaWRfdmFsaWQsIGludCBuZXdfb2lkX3ZhbGlkLAorCQkgY29uc3QgY2hhciAqZnVsbHBhdGgsCisJCSB1bnNpZ25lZCBvbGRfZGlydHlfc3VibW9kdWxlLCB1bnNpZ25lZCBuZXdfZGlydHlfc3VibW9kdWxlKQoreworCXRyZWVfZGlmZmVyZW5jZSA9IFJFVl9UUkVFX0RJRkZFUkVOVDsKKwlvcHRpb25zLT5mbGFncy5oYXNfY2hhbmdlcyA9IDE7Cit9CisKK3N0YXRpYyBpbnQgcmV2X2NvbXBhcmVfdHJlZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgc3RydWN0IGNvbW1pdCAqcGFyZW50LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHRyZWUgKnQxID0gZ2V0X2NvbW1pdF90cmVlKHBhcmVudCk7CisJc3RydWN0IHRyZWUgKnQyID0gZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCk7CisKKwlpZiAoIXQxKQorCQlyZXR1cm4gUkVWX1RSRUVfTkVXOworCWlmICghdDIpCisJCXJldHVybiBSRVZfVFJFRV9PTEQ7CisKKwlpZiAocmV2cy0+c2ltcGxpZnlfYnlfZGVjb3JhdGlvbikgeworCQkvKgorCQkgKiBJZiB3ZSBhcmUgc2ltcGxpZnlpbmcgYnkgZGVjb3JhdGlvbiwgdGhlbiB0aGUgY29tbWl0CisJCSAqIGlzIHdvcnRoIHNob3dpbmcgaWYgaXQgaGFzIGEgdGFnIHBvaW50aW5nIGF0IGl0LgorCQkgKi8KKwkJaWYgKGdldF9uYW1lX2RlY29yYXRpb24oJmNvbW1pdC0+b2JqZWN0KSkKKwkJCXJldHVybiBSRVZfVFJFRV9ESUZGRVJFTlQ7CisJCS8qCisJCSAqIEEgY29tbWl0IHRoYXQgaXMgbm90IHBvaW50ZWQgYnkgYSB0YWcgaXMgdW5pbnRlcmVzdGluZworCQkgKiBpZiB3ZSBhcmUgbm90IGxpbWl0ZWQgYnkgcGF0aC4gIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbAorCQkgKiBzZWUgdGhlIHVzdWFsICJjb21taXRzIHRoYXQgdG91Y2ggdGhlIHBhdGhzIiBwbHVzIGFueQorCQkgKiB0YWdnZWQgY29tbWl0IGJ5IHNwZWNpZnlpbmcgYm90aCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24KKwkJICogYW5kIHBhdGhzcGVjLgorCQkgKi8KKwkJaWYgKCFyZXZzLT5wcnVuZV9kYXRhLm5yKQorCQkJcmV0dXJuIFJFVl9UUkVFX1NBTUU7CisJfQorCisJdHJlZV9kaWZmZXJlbmNlID0gUkVWX1RSRUVfU0FNRTsKKwlyZXZzLT5wcnVuaW5nLmZsYWdzLmhhc19jaGFuZ2VzID0gMDsKKwlpZiAoZGlmZl90cmVlX29pZCgmdDEtPm9iamVjdC5vaWQsICZ0Mi0+b2JqZWN0Lm9pZCwgIiIsCisJCQkgICAmcmV2cy0+cHJ1bmluZykgPCAwKQorCQlyZXR1cm4gUkVWX1RSRUVfRElGRkVSRU5UOworCXJldHVybiB0cmVlX2RpZmZlcmVuY2U7Cit9CisKK3N0YXRpYyBpbnQgcmV2X3NhbWVfdHJlZV9hc19lbXB0eShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB0cmVlICp0MSA9IGdldF9jb21taXRfdHJlZShjb21taXQpOworCisJaWYgKCF0MSkKKwkJcmV0dXJuIDA7CisKKwl0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9TQU1FOworCXJldnMtPnBydW5pbmcuZmxhZ3MuaGFzX2NoYW5nZXMgPSAwOworCXJldHZhbCA9IGRpZmZfdHJlZV9vaWQoTlVMTCwgJnQxLT5vYmplY3Qub2lkLCAiIiwgJnJldnMtPnBydW5pbmcpOworCisJcmV0dXJuIHJldHZhbCA+PSAwICYmICh0cmVlX2RpZmZlcmVuY2UgPT0gUkVWX1RSRUVfU0FNRSk7Cit9CisKK3N0cnVjdCB0cmVlc2FtZV9zdGF0ZSB7CisJdW5zaWduZWQgaW50IG5wYXJlbnRzOworCXVuc2lnbmVkIGNoYXIgdHJlZXNhbWVbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgc3RydWN0IHRyZWVzYW1lX3N0YXRlICppbml0aWFsaXNlX3RyZWVzYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXVuc2lnbmVkIG4gPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqc3QgPSB4Y2FsbG9jKDEsIHN0X2FkZChzaXplb2YoKnN0KSwgbikpOworCXN0LT5ucGFyZW50cyA9IG47CisJYWRkX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QsIHN0KTsKKwlyZXR1cm4gc3Q7Cit9CisKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciByZW1vdmluZyB0aGUgbnRoX3BhcmVudCBmcm9tIGEgY29tbWl0J3MKKyAqIHBhcmVudCBsaXN0LCBpZiB3ZSBhcmUgbWFpbnRhaW5pbmcgdGhlIHBlci1wYXJlbnQgdHJlZXNhbWVbXSBkZWNvcmF0aW9uLgorICogVGhpcyBkb2VzIG5vdCByZWNhbGN1bGF0ZSB0aGUgbWFzdGVyIFRSRUVTQU1FIGZsYWcgLSB1cGRhdGVfdHJlZXNhbWUoKQorICogc2hvdWxkIGJlIGNhbGxlZCB0byB1cGRhdGUgaXQgYWZ0ZXIgYSBzZXF1ZW5jZSBvZiB0cmVlc2FtZVtdIG1vZGlmaWNhdGlvbnMKKyAqIHRoYXQgbWF5IGhhdmUgYWZmZWN0ZWQgaXQuCisgKi8KK3N0YXRpYyBpbnQgY29tcGFjdF90cmVlc2FtZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdW5zaWduZWQgbnRoX3BhcmVudCkKK3sKKwlzdHJ1Y3QgdHJlZXNhbWVfc3RhdGUgKnN0OworCWludCBvbGRfc2FtZTsKKworCWlmICghY29tbWl0LT5wYXJlbnRzKSB7CisJCS8qCisJCSAqIEhhdmUganVzdCByZW1vdmVkIHRoZSBvbmx5IHBhcmVudCBmcm9tIGEgbm9uLW1lcmdlLgorCQkgKiBEaWZmZXJlbnQgaGFuZGxpbmcsIGFzIHdlIGxhY2sgZGVjb3JhdGlvbi4KKwkJICovCisJCWlmIChudGhfcGFyZW50ICE9IDApCisJCQlkaWUoImNvbXBhY3RfdHJlZXNhbWUgJXUiLCBudGhfcGFyZW50KTsKKwkJb2xkX3NhbWUgPSAhIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKTsKKwkJaWYgKHJldl9zYW1lX3RyZWVfYXNfZW1wdHkocmV2cywgY29tbWl0KSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworCQllbHNlCisJCQljb21taXQtPm9iamVjdC5mbGFncyAmPSB+VFJFRVNBTUU7CisJCXJldHVybiBvbGRfc2FtZTsKKwl9CisKKwlzdCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT50cmVlc2FtZSwgJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAoIXN0IHx8IG50aF9wYXJlbnQgPj0gc3QtPm5wYXJlbnRzKQorCQlkaWUoImNvbXBhY3RfdHJlZXNhbWUgJXUiLCBudGhfcGFyZW50KTsKKworCW9sZF9zYW1lID0gc3QtPnRyZWVzYW1lW250aF9wYXJlbnRdOworCW1lbW1vdmUoc3QtPnRyZWVzYW1lICsgbnRoX3BhcmVudCwKKwkJc3QtPnRyZWVzYW1lICsgbnRoX3BhcmVudCArIDEsCisJCXN0LT5ucGFyZW50cyAtIG50aF9wYXJlbnQgLSAxKTsKKworCS8qCisJICogSWYgd2UndmUganVzdCBiZWNvbWUgYSBub24tbWVyZ2UgY29tbWl0LCB1cGRhdGUgVFJFRVNBTUUKKwkgKiBpbW1lZGlhdGVseSwgYW5kIHJlbW92ZSB0aGUgbm8tbG9uZ2VyLW5lZWRlZCBkZWNvcmF0aW9uLgorCSAqIElmIHN0aWxsIGEgbWVyZ2UsIGRlZmVyIHVwZGF0ZSB1bnRpbCB1cGRhdGVfdHJlZXNhbWUoKS4KKwkgKi8KKwlpZiAoLS1zdC0+bnBhcmVudHMgPT0gMSkgeworCQlpZiAoY29tbWl0LT5wYXJlbnRzLT5uZXh0KQorCQkJZGllKCJjb21wYWN0X3RyZWVzYW1lIHBhcmVudHMgbWlzbWF0Y2giKTsKKwkJaWYgKHN0LT50cmVlc2FtZVswXSAmJiByZXZzLT5kZW5zZSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworCQllbHNlCisJCQljb21taXQtPm9iamVjdC5mbGFncyAmPSB+VFJFRVNBTUU7CisJCWZyZWUoYWRkX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QsIE5VTEwpKTsKKwl9CisKKwlyZXR1cm4gb2xkX3NhbWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB1cGRhdGVfdHJlZXNhbWUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGNvbW1pdC0+cGFyZW50cyAmJiBjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJdW5zaWduZWQgbjsKKwkJc3RydWN0IHRyZWVzYW1lX3N0YXRlICpzdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQl1bnNpZ25lZCByZWxldmFudF9wYXJlbnRzOworCQl1bnNpZ25lZCByZWxldmFudF9jaGFuZ2UsIGlycmVsZXZhbnRfY2hhbmdlOworCisJCXN0ID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QpOworCQlpZiAoIXN0KQorCQkJZGllKCJ1cGRhdGVfdHJlZXNhbWUgJXMiLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJcmVsZXZhbnRfcGFyZW50cyA9IDA7CisJCXJlbGV2YW50X2NoYW5nZSA9IGlycmVsZXZhbnRfY2hhbmdlID0gMDsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzLCBuID0gMDsgcDsgbisrLCBwID0gcC0+bmV4dCkgeworCQkJaWYgKHJlbGV2YW50X2NvbW1pdChwLT5pdGVtKSkgeworCQkJCXJlbGV2YW50X2NoYW5nZSB8PSAhc3QtPnRyZWVzYW1lW25dOworCQkJCXJlbGV2YW50X3BhcmVudHMrKzsKKwkJCX0gZWxzZQorCQkJCWlycmVsZXZhbnRfY2hhbmdlIHw9ICFzdC0+dHJlZXNhbWVbbl07CisJCX0KKwkJaWYgKHJlbGV2YW50X3BhcmVudHMgPyByZWxldmFudF9jaGFuZ2UgOiBpcnJlbGV2YW50X2NoYW5nZSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UUkVFU0FNRTsKKwkJZWxzZQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJfQorCisJcmV0dXJuIGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpbWl0aW5nX2Nhbl9pbmNyZWFzZV90cmVlc2FtZShjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJLyoKKwkgKiBUUkVFU0FNRSBpcyBpcnJlbGV2YW50IHVubGVzcyBwcnVuZSAmJiBkZW5zZTsKKwkgKiBpZiBzaW1wbGlmeV9oaXN0b3J5IGlzIHNldCwgd2UgY2FuJ3QgaGF2ZSBhIG1peHR1cmUgb2YgVFJFRVNBTUUgYW5kCisJICogICAgIVRSRUVTQU1FIElOVEVSRVNUSU5HIHBhcmVudHMgKGFuZCB3ZSBkb24ndCBoYXZlIHRyZWVzYW1lW10KKwkgKiAgICBkZWNvcmF0aW9uIGFueXdheSk7CisJICogaWYgZmlyc3RfcGFyZW50X29ubHkgaXMgc2V0LCB0aGVuIHRoZSBUUkVFU0FNRSBmbGFnIGlzIGxvY2tlZAorCSAqICAgIGFnYWluc3QgdGhlIGZpcnN0IHBhcmVudCAoYW5kIGFnYWluIHdlIGxhY2sgdHJlZXNhbWVbXSBkZWNvcmF0aW9uKS4KKwkgKi8KKwlyZXR1cm4gcmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UgJiYKKwkgICAgICAgIXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgJiYKKwkgICAgICAgIXJldnMtPmZpcnN0X3BhcmVudF9vbmx5OworfQorCitzdGF0aWMgdm9pZCB0cnlfdG9fc2ltcGxpZnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwLCAqcGFyZW50OworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqdHMgPSBOVUxMOworCWludCByZWxldmFudF9jaGFuZ2UgPSAwLCBpcnJlbGV2YW50X2NoYW5nZSA9IDA7CisJaW50IHJlbGV2YW50X3BhcmVudHMsIG50aF9wYXJlbnQ7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGRvIHBydW5pbmcsIGV2ZXJ5dGhpbmcgaXMgaW50ZXJlc3RpbmcKKwkgKi8KKwlpZiAoIXJldnMtPnBydW5lKQorCQlyZXR1cm47CisKKwlpZiAoIWdldF9jb21taXRfdHJlZShjb21taXQpKQorCQlyZXR1cm47CisKKwlpZiAoIWNvbW1pdC0+cGFyZW50cykgeworCQlpZiAocmV2X3NhbWVfdHJlZV9hc19lbXB0eShyZXZzLCBjb21taXQpKQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE5vcm1hbCBub24tbWVyZ2UgY29tbWl0PyBJZiB3ZSBkb24ndCB3YW50IHRvIG1ha2UgdGhlCisJICogaGlzdG9yeSBkZW5zZSwgd2UgY29uc2lkZXIgaXQgYWx3YXlzIHRvIGJlIGEgY2hhbmdlLi4KKwkgKi8KKwlpZiAoIXJldnMtPmRlbnNlICYmICFjb21taXQtPnBhcmVudHMtPm5leHQpCisJCXJldHVybjsKKworCWZvciAocHAgPSAmY29tbWl0LT5wYXJlbnRzLCBudGhfcGFyZW50ID0gMCwgcmVsZXZhbnRfcGFyZW50cyA9IDA7CisJICAgICAocGFyZW50ID0gKnBwKSAhPSBOVUxMOworCSAgICAgcHAgPSAmcGFyZW50LT5uZXh0LCBudGhfcGFyZW50KyspIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKKwkJaWYgKHJlbGV2YW50X2NvbW1pdChwKSkKKwkJCXJlbGV2YW50X3BhcmVudHMrKzsKKworCQlpZiAobnRoX3BhcmVudCA9PSAxKSB7CisJCQkvKgorCQkJICogVGhpcyBvdXIgc2Vjb25kIGxvb3AgaXRlcmF0aW9uIC0gc28gd2Ugbm93IGtub3cKKwkJCSAqIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1lcmdlLgorCQkJICoKKwkJCSAqIERvIG5vdCBjb21wYXJlIHdpdGggbGF0ZXIgcGFyZW50cyB3aGVuIHdlIGNhcmUgb25seSBhYm91dAorCQkJICogdGhlIGZpcnN0IHBhcmVudCBjaGFpbiwgaW4gb3JkZXIgdG8gYXZvaWQgZGVyYWlsaW5nIHRoZQorCQkJICogdHJhdmVyc2FsIHRvIGZvbGxvdyBhIHNpZGUgYnJhbmNoIHRoYXQgYnJvdWdodCBldmVyeXRoaW5nCisJCQkgKiBpbiB0aGUgcGF0aCB3ZSBhcmUgbGltaXRlZCB0byBieSB0aGUgcGF0aHNwZWMuCisJCQkgKi8KKwkJCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBJZiB0aGlzIHdpbGwgcmVtYWluIGEgcG90ZW50aWFsbHktc2ltcGxpZmlhYmxlCisJCQkgKiBtZXJnZSwgcmVtZW1iZXIgcGVyLXBhcmVudCB0cmVlc2FtZSBpZiBuZWVkZWQuCisJCQkgKiBJbml0aWFsaXNlIHRoZSBhcnJheSB3aXRoIHRoZSBjb21wYXJpc29uIGZyb20gb3VyCisJCQkgKiBmaXJzdCBpdGVyYXRpb24uCisJCQkgKi8KKwkJCWlmIChyZXZzLT50cmVlc2FtZS5uYW1lICYmCisJCQkgICAgIXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgJiYKKwkJCSAgICAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpIHsKKwkJCQl0cyA9IGluaXRpYWxpc2VfdHJlZXNhbWUocmV2cywgY29tbWl0KTsKKwkJCQlpZiAoIShpcnJlbGV2YW50X2NoYW5nZSB8fCByZWxldmFudF9jaGFuZ2UpKQorCQkJCQl0cy0+dHJlZXNhbWVbMF0gPSAxOworCQkJfQorCQl9CisJCWlmIChwYXJzZV9jb21taXQocCkgPCAwKQorCQkJZGllKCJjYW5ub3Qgc2ltcGxpZnkgY29tbWl0ICVzIChiZWNhdXNlIG9mICVzKSIsCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSwKKwkJCSAgICBvaWRfdG9faGV4KCZwLT5vYmplY3Qub2lkKSk7CisJCXN3aXRjaCAocmV2X2NvbXBhcmVfdHJlZShyZXZzLCBwLCBjb21taXQpKSB7CisJCWNhc2UgUkVWX1RSRUVfU0FNRToKKwkJCWlmICghcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSB8fCAhcmVsZXZhbnRfY29tbWl0KHApKSB7CisJCQkJLyogRXZlbiBpZiBhIG1lcmdlIHdpdGggYW4gdW5pbnRlcmVzdGluZworCQkJCSAqIHNpZGUgYnJhbmNoIGJyb3VnaHQgdGhlIGVudGlyZSBjaGFuZ2UKKwkJCQkgKiB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwgd2UgZG8gbm90IHdhbnQKKwkJCQkgKiB0byBsb3NlIHRoZSBvdGhlciBicmFuY2hlcyBvZiB0aGlzCisJCQkJICogbWVyZ2UsIHNvIHdlIGp1c3Qga2VlcCBnb2luZy4KKwkJCQkgKi8KKwkJCQlpZiAodHMpCisJCQkJCXRzLT50cmVlc2FtZVtudGhfcGFyZW50XSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwYXJlbnQtPm5leHQgPSBOVUxMOworCQkJY29tbWl0LT5wYXJlbnRzID0gcGFyZW50OworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCQlyZXR1cm47CisKKwkJY2FzZSBSRVZfVFJFRV9ORVc6CisJCQlpZiAocmV2cy0+cmVtb3ZlX2VtcHR5X3RyZWVzICYmCisJCQkgICAgcmV2X3NhbWVfdHJlZV9hc19lbXB0eShyZXZzLCBwKSkgeworCQkJCS8qIFdlIGFyZSBhZGRpbmcgYWxsIHRoZSBzcGVjaWZpZWQKKwkJCQkgKiBwYXRocyBmcm9tIHRoaXMgcGFyZW50LCBzbyB0aGUKKwkJCQkgKiBoaXN0b3J5IGJleW9uZCB0aGlzIHBhcmVudCBpcyBub3QKKwkJCQkgKiBpbnRlcmVzdGluZy4gIFJlbW92ZSBpdHMgcGFyZW50cworCQkJCSAqICh0aGV5IGFyZSBncmFuZHBhcmVudHMgZm9yIHVzKS4KKwkJCQkgKiBJT1csIHdlIHByZXRlbmQgdGhpcyBwYXJlbnQgaXMgYQorCQkJCSAqICJyb290IiBjb21taXQuCisJCQkJICovCisJCQkJaWYgKHBhcnNlX2NvbW1pdChwKSA8IDApCisJCQkJCWRpZSgiY2Fubm90IHNpbXBsaWZ5IGNvbW1pdCAlcyAoaW52YWxpZCAlcykiLAorCQkJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSwKKwkJCQkJICAgIG9pZF90b19oZXgoJnAtPm9iamVjdC5vaWQpKTsKKwkJCQlwLT5wYXJlbnRzID0gTlVMTDsKKwkJCX0KKwkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBSRVZfVFJFRV9PTEQ6CisJCWNhc2UgUkVWX1RSRUVfRElGRkVSRU5UOgorCQkJaWYgKHJlbGV2YW50X2NvbW1pdChwKSkKKwkJCQlyZWxldmFudF9jaGFuZ2UgPSAxOworCQkJZWxzZQorCQkJCWlycmVsZXZhbnRfY2hhbmdlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRpZSgiYmFkIHRyZWUgY29tcGFyZSBmb3IgY29tbWl0ICVzIiwgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJfQorCisJLyoKKwkgKiBUUkVFU0FNRSBpcyBzdHJhaWdodGZvcndhcmQgZm9yIHNpbmdsZS1wYXJlbnQgY29tbWl0cy4gRm9yIG1lcmdlCisJICogY29tbWl0cywgaXQgaXMgbW9zdCB1c2VmdWwgdG8gZGVmaW5lIGl0IHNvIHRoYXQgImlycmVsZXZhbnQiCisJICogcGFyZW50cyBjYW5ub3QgbWFrZSB1cyAhVFJFRVNBTUUgLSBpZiB3ZSBoYXZlIGFueSByZWxldmFudAorCSAqIHBhcmVudHMsIHRoZW4gd2Ugb25seSBjb25zaWRlciBUUkVFU0FNRW5lc3Mgd2l0aCByZXNwZWN0IHRvIHRoZW0sCisJICogYWxsb3dpbmcgaXJyZWxldmFudCBtZXJnZXMgZnJvbSB1bmludGVyZXN0aW5nIGJyYW5jaGVzIHRvIGJlCisJICogc2ltcGxpZmllZCBhd2F5LiBPbmx5IGlmIHdlIGhhdmUgb25seSBpcnJlbGV2YW50IHBhcmVudHMgZG8gd2UKKwkgKiBiYXNlIFRSRUVTQU1FIG9uIHRoZW0uIE5vdGUgdGhhdCB0aGlzIGxvZ2ljIGlzIHJlcGxpY2F0ZWQgaW4KKwkgKiB1cGRhdGVfdHJlZXNhbWUsIHdoaWNoIHNob3VsZCBiZSBrZXB0IGluIHN5bmMuCisJICovCisJaWYgKHJlbGV2YW50X3BhcmVudHMgPyAhcmVsZXZhbnRfY2hhbmdlIDogIWlycmVsZXZhbnRfY2hhbmdlKQorCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUUkVFU0FNRTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3BhcmVudHMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0LCBzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisJdW5zaWduZWQgbGVmdF9mbGFnOworCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQURERUQpCisJCXJldHVybiAwOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IEFEREVEOworCisJaWYgKHJldnMtPmluY2x1ZGVfY2hlY2sgJiYKKwkgICAgIXJldnMtPmluY2x1ZGVfY2hlY2soY29tbWl0LCByZXZzLT5pbmNsdWRlX2NoZWNrX2RhdGEpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGNvbW1pdCBpcyB1bmludGVyZXN0aW5nLCBkb24ndCB0cnkgdG8KKwkgKiBwcnVuZSBwYXJlbnRzIC0gd2Ugd2FudCB0aGUgbWF4aW1hbCB1bmludGVyZXN0aW5nCisJICogc2V0LgorCSAqCisJICogTm9ybWFsbHkgd2UgaGF2ZW4ndCBwYXJzZWQgdGhlIHBhcmVudAorCSAqIHlldCwgc28gd2Ugd29uJ3QgaGF2ZSBhIHBhcmVudCBvZiBhIHBhcmVudAorCSAqIGhlcmUuIEhvd2V2ZXIsIGl0IG1heSB0dXJuIG91dCB0aGF0IHdlJ3ZlCisJICogcmVhY2hlZCB0aGlzIGNvbW1pdCBzb21lIG90aGVyIHdheSAod2hlcmUgaXQKKwkgKiB3YXNuJ3QgdW5pbnRlcmVzdGluZyksIGluIHdoaWNoIGNhc2Ugd2UgbmVlZAorCSAqIHRvIG1hcmsgaXRzIHBhcmVudHMgcmVjdXJzaXZlbHkgdG9vLi4KKwkgKi8KKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCQlpZiAocCkKKwkJCQlwLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCWlmIChwYXJzZV9jb21taXRfZ2VudGx5KHAsIDEpIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwLT5wYXJlbnRzKQorCQkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKHApOworCQkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCQkJY29udGludWU7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCWlmIChsaXN0KQorCQkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHAsIGxpc3QpOworCQkJaWYgKHF1ZXVlKQorCQkJCXByaW9fcXVldWVfcHV0KHF1ZXVlLCBwKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE9rLCB0aGUgY29tbWl0IHdhc24ndCB1bmludGVyZXN0aW5nLiBUcnkgdG8KKwkgKiBzaW1wbGlmeSB0aGUgY29tbWl0IGhpc3RvcnkgYW5kIGZpbmQgdGhlIHBhcmVudAorCSAqIHRoYXQgaGFzIG5vIGRpZmZlcmVuY2VzIGluIHRoZSBwYXRoIHNldCBpZiBvbmUgZXhpc3RzLgorCSAqLworCXRyeV90b19zaW1wbGlmeV9jb21taXQocmV2cywgY29tbWl0KTsKKworCWlmIChyZXZzLT5ub193YWxrKQorCQlyZXR1cm4gMDsKKworCWxlZnRfZmxhZyA9IChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKTsKKworCWZvciAocGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOworCQlpbnQgZ2VudGx5ID0gcmV2cy0+aWdub3JlX21pc3NpbmdfbGlua3MgfHwKKwkJCSAgICAgcmV2cy0+ZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzOworCQlpZiAocGFyc2VfY29tbWl0X2dlbnRseShwLCBnZW50bHkpIDwgMCkgeworCQkJaWYgKHJldnMtPmV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cyAmJgorCQkJICAgIGlzX3Byb21pc29yX29iamVjdCgmcC0+b2JqZWN0Lm9pZCkpIHsKKwkJCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQkJCWJyZWFrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChyZXZzLT5zb3VyY2VzKSB7CisJCQljaGFyICoqc2xvdCA9IHJldmlzaW9uX3NvdXJjZXNfYXQocmV2cy0+c291cmNlcywgcCk7CisKKwkJCWlmICghKnNsb3QpCisJCQkJKnNsb3QgPSAqcmV2aXNpb25fc291cmNlc19hdChyZXZzLT5zb3VyY2VzLCBjb21taXQpOworCQl9CisJCXAtPm9iamVjdC5mbGFncyB8PSBsZWZ0X2ZsYWc7CisJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pKSB7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCWlmIChsaXN0KQorCQkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHAsIGxpc3QpOworCQkJaWYgKHF1ZXVlKQorCQkJCXByaW9fcXVldWVfcHV0KHF1ZXVlLCBwKTsKKwkJfQorCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoZXJyeV9waWNrX2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWludCBsZWZ0X2NvdW50ID0gMCwgcmlnaHRfY291bnQgPSAwOworCWludCBsZWZ0X2ZpcnN0OworCXN0cnVjdCBwYXRjaF9pZHMgaWRzOworCXVuc2lnbmVkIGNoZXJyeV9mbGFnOworCisJLyogRmlyc3QgY291bnQgdGhlIGNvbW1pdHMgb24gdGhlIGxlZnQgYW5kIG9uIHRoZSByaWdodCAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWlmIChmbGFncyAmIEJPVU5EQVJZKQorCQkJOworCQllbHNlIGlmIChmbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJbGVmdF9jb3VudCsrOworCQllbHNlCisJCQlyaWdodF9jb3VudCsrOworCX0KKworCWlmICghbGVmdF9jb3VudCB8fCAhcmlnaHRfY291bnQpCisJCXJldHVybjsKKworCWxlZnRfZmlyc3QgPSBsZWZ0X2NvdW50IDwgcmlnaHRfY291bnQ7CisJaW5pdF9wYXRjaF9pZHMocmV2cy0+cmVwbywgJmlkcyk7CisJaWRzLmRpZmZvcHRzLnBhdGhzcGVjID0gcmV2cy0+ZGlmZm9wdC5wYXRoc3BlYzsKKworCS8qIENvbXB1dGUgcGF0Y2gtaWRzIGZvciBvbmUgc2lkZSAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisKKwkJaWYgKGZsYWdzICYgQk9VTkRBUlkpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmZXdlciBsZWZ0LCBsZWZ0X2ZpcnN0IGlzIHNldCBhbmQgd2Ugb21pdAorCQkgKiBjb21taXRzIG9uIHRoZSByaWdodCBicmFuY2ggaW4gdGhpcyBsb29wLiAgSWYgd2UgaGF2ZQorCQkgKiBmZXdlciByaWdodCwgd2Ugc2tpcCB0aGUgbGVmdCBvbmVzLgorCQkgKi8KKwkJaWYgKGxlZnRfZmlyc3QgIT0gISEoZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkpCisJCQljb250aW51ZTsKKwkJYWRkX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpOworCX0KKworCS8qIGVpdGhlciBjaGVycnlfbWFyayBvciBjaGVycnlfcGljayBhcmUgdHJ1ZSAqLworCWNoZXJyeV9mbGFnID0gcmV2cy0+Y2hlcnJ5X21hcmsgPyBQQVRDSFNBTUUgOiBTSE9XTjsKKworCS8qIENoZWNrIHRoZSBvdGhlciBzaWRlICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJc3RydWN0IHBhdGNoX2lkICppZDsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKworCQlpZiAoZmxhZ3MgJiBCT1VOREFSWSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGZld2VyIGxlZnQsIGxlZnRfZmlyc3QgaXMgc2V0IGFuZCB3ZSBvbWl0CisJCSAqIGNvbW1pdHMgb24gdGhlIGxlZnQgYnJhbmNoIGluIHRoaXMgbG9vcC4KKwkJICovCisJCWlmIChsZWZ0X2ZpcnN0ID09ICEhKGZsYWdzICYgU1lNTUVUUklDX0xFRlQpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSGF2ZSB3ZSBzZWVuIHRoZSBzYW1lIHBhdGNoIGlkPworCQkgKi8KKwkJaWQgPSBoYXNfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcyk7CisJCWlmICghaWQpCisJCQljb250aW51ZTsKKworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBjaGVycnlfZmxhZzsKKwkJaWQtPmNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IGNoZXJyeV9mbGFnOworCX0KKworCWZyZWVfcGF0Y2hfaWRzKCZpZHMpOworfQorCisvKiBIb3cgbWFueSBleHRyYSB1bmludGVyZXN0aW5nIGNvbW1pdHMgd2Ugd2FudCB0byBzZWUuLiAqLworI2RlZmluZSBTTE9QIDUKKworc3RhdGljIGludCBzdGlsbF9pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnNyYywgdGltZXN0YW1wX3QgZGF0ZSwgaW50IHNsb3AsCisJCQkgICAgIHN0cnVjdCBjb21taXQgKippbnRlcmVzdGluZ19jYWNoZSkKK3sKKwkvKgorCSAqIE5vIHNvdXJjZSBsaXN0IGF0IGFsbD8gV2UncmUgZGVmaW5pdGVseSBkb25lLi4KKwkgKi8KKwlpZiAoIXNyYykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIERvZXMgdGhlIGRlc3RpbmF0aW9uIGxpc3QgY29udGFpbiBlbnRyaWVzIHdpdGggYSBkYXRlCisJICogYmVmb3JlIHRoZSBzb3VyY2UgbGlzdD8gRGVmaW5pdGVseSBfbm90XyBkb25lLgorCSAqLworCWlmIChkYXRlIDw9IHNyYy0+aXRlbS0+ZGF0ZSkKKwkJcmV0dXJuIFNMT1A7CisKKwkvKgorCSAqIERvZXMgdGhlIHNvdXJjZSBsaXN0IHN0aWxsIGhhdmUgaW50ZXJlc3RpbmcgY29tbWl0cyBpbgorCSAqIGl0PyBEZWZpbml0ZWx5IG5vdCBkb25lLi4KKwkgKi8KKwlpZiAoIWV2ZXJ5Ym9keV91bmludGVyZXN0aW5nKHNyYywgaW50ZXJlc3RpbmdfY2FjaGUpKQorCQlyZXR1cm4gU0xPUDsKKworCS8qIE9rLCB3ZSdyZSBjbG9zaW5nIGluLi4gKi8KKwlyZXR1cm4gc2xvcC0xOworfQorCisvKgorICogInJldi1saXN0IC0tYW5jZXN0cnktcGF0aCBBLi5CIiBjb21wdXRlcyBjb21taXRzIHRoYXQgYXJlIGFuY2VzdG9ycworICogb2YgQiBidXQgbm90IGFuY2VzdG9ycyBvZiBBIGJ1dCBmdXJ0aGVyIGxpbWl0cyB0aGUgcmVzdWx0IHRvIHRob3NlCisgKiB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiBBLiAgVGhpcyB0YWtlcyB0aGUgbGlzdCBvZiBib3R0b20gY29tbWl0cyBhbmQKKyAqIHRoZSByZXN1bHQgb2YgIkEuLkIiIHdpdGhvdXQgLS1hbmNlc3RyeS1wYXRoLCBhbmQgbGltaXRzIHRoZSBsYXR0ZXIKKyAqIGZ1cnRoZXIgdG8gdGhlIG9uZXMgdGhhdCBjYW4gcmVhY2ggb25lIG9mIHRoZSBjb21taXRzIGluICJib3R0b20iLgorICovCitzdGF0aWMgdm9pZCBsaW1pdF90b19hbmNlc3RyeShzdHJ1Y3QgY29tbWl0X2xpc3QgKmJvdHRvbSwgc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJsaXN0ID0gTlVMTDsKKwlpbnQgbWFkZV9wcm9ncmVzczsKKworCS8qCisJICogUmV2ZXJzZSB0aGUgbGlzdCBzbyB0aGF0IGl0IHdpbGwgYmUgbGlrZWx5IHRoYXQgd2Ugd291bGQKKwkgKiBwcm9jZXNzIHBhcmVudHMgYmVmb3JlIGNoaWxkcmVuLgorCSAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KQorCQljb21taXRfbGlzdF9pbnNlcnQocC0+aXRlbSwgJnJsaXN0KTsKKworCWZvciAocCA9IGJvdHRvbTsgcDsgcCA9IHAtPm5leHQpCisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKworCS8qCisJICogTWFyayB0aGUgb25lcyB0aGF0IGNhbiByZWFjaCBib3R0b20gY29tbWl0cyBpbiAibGlzdCIsCisJICogaW4gYSBib3R0b20tdXAgZmFzaGlvbi4KKwkgKi8KKwlkbyB7CisJCW1hZGVfcHJvZ3Jlc3MgPSAwOworCQlmb3IgKHAgPSBybGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCXN0cnVjdCBjb21taXQgKmMgPSBwLT5pdGVtOworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJaWYgKGMtPm9iamVjdC5mbGFncyAmIChUTVBfTUFSSyB8IFVOSU5URVJFU1RJTkcpKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChwYXJlbnRzID0gYy0+cGFyZW50czsKKwkJCSAgICAgcGFyZW50czsKKwkJCSAgICAgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJCQlpZiAoIShwYXJlbnRzLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBUTVBfTUFSSykpCisJCQkJCWNvbnRpbnVlOworCQkJCWMtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKwkJCQltYWRlX3Byb2dyZXNzID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKG1hZGVfcHJvZ3Jlc3MpOworCisJLyoKKwkgKiBORUVEU1dPUks6IGRlY2lkZSBpZiB3ZSB3YW50IHRvIHJlbW92ZSBwYXJlbnRzIHRoYXQgYXJlCisJICogbm90IG1hcmtlZCB3aXRoIFRNUF9NQVJLIGZyb20gY29tbWl0LT5wYXJlbnRzIGZvciBjb21taXRzCisJICogaW4gdGhlIHJlc3VsdGluZyBsaXN0LiAgV2UgbWF5IG5vdCB3YW50IHRvIGRvIHRoYXQsIHRob3VnaC4KKwkgKi8KKworCS8qCisJICogVGhlIG9uZXMgdGhhdCBhcmUgbm90IG1hcmtlZCB3aXRoIFRNUF9NQVJLIGFyZSB1bmludGVyZXN0aW5nCisJICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IHAtPml0ZW07CisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBUTVBfTUFSSykKKwkJCWNvbnRpbnVlOworCQljLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwl9CisKKwkvKiBXZSBhcmUgZG9uZSB3aXRoIHRoZSBUTVBfTUFSSyAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KQorCQlwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gflRNUF9NQVJLOworCWZvciAocCA9IGJvdHRvbTsgcDsgcCA9IHAtPm5leHQpCisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+VE1QX01BUks7CisJZnJlZV9jb21taXRfbGlzdChybGlzdCk7Cit9CisKKy8qCisgKiBCZWZvcmUgd2Fsa2luZyB0aGUgaGlzdG9yeSwga2VlcCB0aGUgc2V0IG9mICJuZWdhdGl2ZSIgcmVmcyB0aGUKKyAqIGNhbGxlciBoYXMgYXNrZWQgdG8gZXhjbHVkZS4KKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSAicmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEEuLkIiLCBhcyB3ZSBuZWVkCisgKiB0byBmaWx0ZXIgdGhlIHJlc3VsdCBvZiAiQS4uQiIgZnVydGhlciB0byB0aGUgb25lcyB0aGF0IGNhbiBhY3R1YWxseQorICogcmVhY2ggQS4KKyAqLworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29sbGVjdF9ib3R0b21fY29tbWl0cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICplbGVtLCAqYm90dG9tID0gTlVMTDsKKwlmb3IgKGVsZW0gPSBsaXN0OyBlbGVtOyBlbGVtID0gZWxlbS0+bmV4dCkKKwkJaWYgKGVsZW0tPml0ZW0tPm9iamVjdC5mbGFncyAmIEJPVFRPTSkKKwkJCWNvbW1pdF9saXN0X2luc2VydChlbGVtLT5pdGVtLCAmYm90dG9tKTsKKwlyZXR1cm4gYm90dG9tOworfQorCisvKiBBc3N1bWVzIGVpdGhlciBsZWZ0X29ubHkgb3IgcmlnaHRfb25seSBpcyBzZXQgKi8KK3N0YXRpYyB2b2lkIGxpbWl0X2xlZnRfcmlnaHQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKworCQlpZiAocmV2cy0+cmlnaHRfb25seSkgeworCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gU0hPV047CisJCX0gZWxzZQkvKiByZXZzLT5sZWZ0X29ubHkgaXMgc2V0ICovCisJCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKSkKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbGltaXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJaW50IHNsb3AgPSBTTE9QOworCXRpbWVzdGFtcF90IGRhdGUgPSBUSU1FX01BWDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSByZXZzLT5jb21taXRzOworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3bGlzdCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcCA9ICZuZXdsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqYm90dG9tID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0ICppbnRlcmVzdGluZ19jYWNoZSA9IE5VTEw7CisKKwlpZiAocmV2cy0+YW5jZXN0cnlfcGF0aCkgeworCQlib3R0b20gPSBjb2xsZWN0X2JvdHRvbV9jb21taXRzKGxpc3QpOworCQlpZiAoIWJvdHRvbSkKKwkJCWRpZSgiLS1hbmNlc3RyeS1wYXRoIGdpdmVuIGJ1dCB0aGVyZSBhcmUgbm8gYm90dG9tIGNvbW1pdHMiKTsKKwl9CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3BfY29tbWl0KCZsaXN0KTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gJmNvbW1pdC0+b2JqZWN0OworCQlzaG93X2Vhcmx5X291dHB1dF9mbl90IHNob3c7CisKKwkJaWYgKGNvbW1pdCA9PSBpbnRlcmVzdGluZ19jYWNoZSkKKwkJCWludGVyZXN0aW5nX2NhY2hlID0gTlVMTDsKKworCQlpZiAocmV2cy0+bWF4X2FnZSAhPSAtMSAmJiAoY29tbWl0LT5kYXRlIDwgcmV2cy0+bWF4X2FnZSkpCisJCQlvYmotPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCWlmIChwcm9jZXNzX3BhcmVudHMocmV2cywgY29tbWl0LCAmbGlzdCwgTlVMTCkgPCAwKQorCQkJcmV0dXJuIC0xOworCQlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7CisJCQlzbG9wID0gc3RpbGxfaW50ZXJlc3RpbmcobGlzdCwgZGF0ZSwgc2xvcCwgJmludGVyZXN0aW5nX2NhY2hlKTsKKwkJCWlmIChzbG9wKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJldnMtPm1pbl9hZ2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA+IHJldnMtPm1pbl9hZ2UpKQorCQkJY29udGludWU7CisJCWRhdGUgPSBjb21taXQtPmRhdGU7CisJCXAgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcCktPm5leHQ7CisKKwkJc2hvdyA9IHNob3dfZWFybHlfb3V0cHV0OworCQlpZiAoIXNob3cpCisJCQljb250aW51ZTsKKworCQlzaG93KHJldnMsIG5ld2xpc3QpOworCQlzaG93X2Vhcmx5X291dHB1dCA9IE5VTEw7CisJfQorCWlmIChyZXZzLT5jaGVycnlfcGljayB8fCByZXZzLT5jaGVycnlfbWFyaykKKwkJY2hlcnJ5X3BpY2tfbGlzdChuZXdsaXN0LCByZXZzKTsKKworCWlmIChyZXZzLT5sZWZ0X29ubHkgfHwgcmV2cy0+cmlnaHRfb25seSkKKwkJbGltaXRfbGVmdF9yaWdodChuZXdsaXN0LCByZXZzKTsKKworCWlmIChib3R0b20pIHsKKwkJbGltaXRfdG9fYW5jZXN0cnkoYm90dG9tLCBuZXdsaXN0KTsKKwkJZnJlZV9jb21taXRfbGlzdChib3R0b20pOworCX0KKworCS8qCisJICogQ2hlY2sgaWYgYW55IGNvbW1pdHMgaGF2ZSBiZWNvbWUgVFJFRVNBTUUgYnkgc29tZSBvZiB0aGVpciBwYXJlbnRzCisJICogYmVjb21pbmcgVU5JTlRFUkVTVElORy4KKwkgKi8KKwlpZiAobGltaXRpbmdfY2FuX2luY3JlYXNlX3RyZWVzYW1lKHJldnMpKQorCQlmb3IgKGxpc3QgPSBuZXdsaXN0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqYyA9IGxpc3QtPml0ZW07CisJCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBUUkVFU0FNRSkpCisJCQkJY29udGludWU7CisJCQl1cGRhdGVfdHJlZXNhbWUocmV2cywgYyk7CisJCX0KKworCXJldnMtPmNvbW1pdHMgPSBuZXdsaXN0OworCXJldHVybiAwOworfQorCisvKgorICogQWRkIGFuIGVudHJ5IHRvIHJlZnMtPmNtZGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIGluZm9ybWF0aW9uLgorICogKm5hbWUgaXMgY29waWVkLgorICovCitzdGF0aWMgdm9pZCBhZGRfcmV2X2NtZGxpbmUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgIHN0cnVjdCBvYmplY3QgKml0ZW0sCisJCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICBpbnQgd2hlbmNlLAorCQkJICAgIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCByZXZfY21kbGluZV9pbmZvICppbmZvID0gJnJldnMtPmNtZGxpbmU7CisJdW5zaWduZWQgaW50IG5yID0gaW5mby0+bnI7CisKKwlBTExPQ19HUk9XKGluZm8tPnJldiwgbnIgKyAxLCBpbmZvLT5hbGxvYyk7CisJaW5mby0+cmV2W25yXS5pdGVtID0gaXRlbTsKKwlpbmZvLT5yZXZbbnJdLm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWluZm8tPnJldltucl0ud2hlbmNlID0gd2hlbmNlOworCWluZm8tPnJldltucl0uZmxhZ3MgPSBmbGFnczsKKwlpbmZvLT5ucisrOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmV2X2NtZGxpbmVfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3QsCisJCQkJIGludCB3aGVuY2UsCisJCQkJIHVuc2lnbmVkIGZsYWdzKQoreworCXdoaWxlIChjb21taXRfbGlzdCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSAmY29tbWl0X2xpc3QtPml0ZW0tPm9iamVjdDsKKwkJYWRkX3Jldl9jbWRsaW5lKHJldnMsIG9iamVjdCwgb2lkX3RvX2hleCgmb2JqZWN0LT5vaWQpLAorCQkJCXdoZW5jZSwgZmxhZ3MpOworCQljb21taXRfbGlzdCA9IGNvbW1pdF9saXN0LT5uZXh0OworCX0KK30KKworc3RydWN0IGFsbF9yZWZzX2NiIHsKKwlpbnQgYWxsX2ZsYWdzOworCWludCB3YXJuZWRfYmFkX3JlZmxvZzsKKwlzdHJ1Y3QgcmV2X2luZm8gKmFsbF9yZXZzOworCWNvbnN0IGNoYXIgKm5hbWVfZm9yX2Vycm9ybXNnOworCXN0cnVjdCB3b3JrdHJlZSAqd3Q7Cit9OworCitpbnQgcmVmX2V4Y2x1ZGVkKHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmX2V4Y2x1ZGVzLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKCFyZWZfZXhjbHVkZXMpCisJCXJldHVybiAwOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgcmVmX2V4Y2x1ZGVzKSB7CisJCWlmICghd2lsZG1hdGNoKGl0ZW0tPnN0cmluZywgcGF0aCwgMCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX29uZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgYWxsX3JlZnNfY2IgKmNiID0gY2JfZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisKKwlpZiAocmVmX2V4Y2x1ZGVkKGNiLT5hbGxfcmV2cy0+cmVmX2V4Y2x1ZGVzLCBwYXRoKSkKKwkgICAgcmV0dXJuIDA7CisKKwlvYmplY3QgPSBnZXRfcmVmZXJlbmNlKGNiLT5hbGxfcmV2cywgcGF0aCwgb2lkLCBjYi0+YWxsX2ZsYWdzKTsKKwlhZGRfcmV2X2NtZGxpbmUoY2ItPmFsbF9yZXZzLCBvYmplY3QsIHBhdGgsIFJFVl9DTURfUkVGLCBjYi0+YWxsX2ZsYWdzKTsKKwlhZGRfcGVuZGluZ19vaWQoY2ItPmFsbF9yZXZzLCBwYXRoLCBvaWQsIGNiLT5hbGxfZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbml0X2FsbF9yZWZzX2NiKHN0cnVjdCBhbGxfcmVmc19jYiAqY2IsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwl1bnNpZ25lZCBmbGFncykKK3sKKwljYi0+YWxsX3JldnMgPSByZXZzOworCWNiLT5hbGxfZmxhZ3MgPSBmbGFnczsKKwlyZXZzLT5yZXZfaW5wdXRfZ2l2ZW4gPSAxOworCWNiLT53dCA9IE5VTEw7Cit9CisKK3ZvaWQgY2xlYXJfcmVmX2V4Y2x1c2lvbihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKipyZWZfZXhjbHVkZXNfcCkKK3sKKwlpZiAoKnJlZl9leGNsdWRlc19wKSB7CisJCXN0cmluZ19saXN0X2NsZWFyKCpyZWZfZXhjbHVkZXNfcCwgMCk7CisJCWZyZWUoKnJlZl9leGNsdWRlc19wKTsKKwl9CisJKnJlZl9leGNsdWRlc19wID0gTlVMTDsKK30KKwordm9pZCBhZGRfcmVmX2V4Y2x1c2lvbihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKipyZWZfZXhjbHVkZXNfcCwgY29uc3QgY2hhciAqZXhjbHVkZSkKK3sKKwlpZiAoISpyZWZfZXhjbHVkZXNfcCkgeworCQkqcmVmX2V4Y2x1ZGVzX3AgPSB4Y2FsbG9jKDEsIHNpemVvZigqKnJlZl9leGNsdWRlc19wKSk7CisJCSgqcmVmX2V4Y2x1ZGVzX3ApLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisJfQorCXN0cmluZ19saXN0X2FwcGVuZCgqcmVmX2V4Y2x1ZGVzX3AsIGV4Y2x1ZGUpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVmcyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLAorCQkJc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBmbGFncywKKwkJCWludCAoKmZvcl9lYWNoKShzdHJ1Y3QgcmVmX3N0b3JlICosIGVhY2hfcmVmX2ZuLCB2b2lkICopKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiBjYjsKKworCWlmICghcmVmcykgeworCQkvKiB0aGlzIGNvdWxkIGhhcHBlbiB3aXRoIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcyAqLworCQlyZXR1cm47CisJfQorCisJaW5pdF9hbGxfcmVmc19jYigmY2IsIHJldnMsIGZsYWdzKTsKKwlmb3JfZWFjaChyZWZzLCBoYW5kbGVfb25lX3JlZiwgJmNiKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX29uZV9yZWZsb2dfY29tbWl0KHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgYWxsX3JlZnNfY2IgKmNiID0gY2JfZGF0YTsKKwlpZiAoIWlzX251bGxfb2lkKG9pZCkpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdChjYi0+YWxsX3JldnMtPnJlcG8sIG9pZCk7CisJCWlmIChvKSB7CisJCQlvLT5mbGFncyB8PSBjYi0+YWxsX2ZsYWdzOworCQkJLyogPz8/IENNRExJTkVGTEFHUyA/Pz8gKi8KKwkJCWFkZF9wZW5kaW5nX29iamVjdChjYi0+YWxsX3JldnMsIG8sICIiKTsKKwkJfQorCQllbHNlIGlmICghY2ItPndhcm5lZF9iYWRfcmVmbG9nKSB7CisJCQl3YXJuaW5nKCJyZWZsb2cgb2YgJyVzJyByZWZlcmVuY2VzIHBydW5lZCBjb21taXRzIiwKKwkJCQljYi0+bmFtZV9mb3JfZXJyb3Jtc2cpOworCQkJY2ItPndhcm5lZF9iYWRfcmVmbG9nID0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBoYW5kbGVfb25lX3JlZmxvZ19lbnQoc3RydWN0IG9iamVjdF9pZCAqb29pZCwgc3RydWN0IG9iamVjdF9pZCAqbm9pZCwKKwkJY29uc3QgY2hhciAqZW1haWwsIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwgaW50IHR6LAorCQljb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCWhhbmRsZV9vbmVfcmVmbG9nX2NvbW1pdChvb2lkLCBjYl9kYXRhKTsKKwloYW5kbGVfb25lX3JlZmxvZ19jb21taXQobm9pZCwgY2JfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX29uZV9yZWZsb2coY29uc3QgY2hhciAqcmVmbmFtZV9pbl93dCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgYWxsX3JlZnNfY2IgKmNiID0gY2JfZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZm5hbWUgPSBTVFJCVUZfSU5JVDsKKworCWNiLT53YXJuZWRfYmFkX3JlZmxvZyA9IDA7CisJc3RyYnVmX3dvcmt0cmVlX3JlZihjYi0+d3QsICZyZWZuYW1lLCByZWZuYW1lX2luX3d0KTsKKwljYi0+bmFtZV9mb3JfZXJyb3Jtc2cgPSByZWZuYW1lLmJ1ZjsKKwlyZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnQoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwKKwkJCQkgcmVmbmFtZS5idWYsCisJCQkJIGhhbmRsZV9vbmVfcmVmbG9nX2VudCwgY2JfZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJnJlZm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfb3RoZXJfcmVmbG9nc190b19wZW5kaW5nKHN0cnVjdCBhbGxfcmVmc19jYiAqY2IpCit7CisJc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzLCAqKnA7CisKKwl3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCWZvciAocCA9IHdvcmt0cmVlczsgKnA7IHArKykgeworCQlzdHJ1Y3Qgd29ya3RyZWUgKnd0ID0gKnA7CisKKwkJaWYgKHd0LT5pc19jdXJyZW50KQorCQkJY29udGludWU7CisKKwkJY2ItPnd0ID0gd3Q7CisJCXJlZnNfZm9yX2VhY2hfcmVmbG9nKGdldF93b3JrdHJlZV9yZWZfc3RvcmUod3QpLAorCQkJCSAgICAgaGFuZGxlX29uZV9yZWZsb2csCisJCQkJICAgICBjYik7CisJfQorCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7Cit9CisKK3ZvaWQgYWRkX3JlZmxvZ3NfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiBjYjsKKworCWNiLmFsbF9yZXZzID0gcmV2czsKKwljYi5hbGxfZmxhZ3MgPSBmbGFnczsKKwljYi53dCA9IE5VTEw7CisJZm9yX2VhY2hfcmVmbG9nKGhhbmRsZV9vbmVfcmVmbG9nLCAmY2IpOworCisJaWYgKCFyZXZzLT5zaW5nbGVfd29ya3RyZWUpCisJCWFkZF9vdGhlcl9yZWZsb2dzX3RvX3BlbmRpbmcoJmNiKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2NhY2hlX3RyZWUoc3RydWN0IGNhY2hlX3RyZWUgKml0LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc2l6ZV90IGJhc2VsZW4gPSBwYXRoLT5sZW47CisJaW50IGk7CisKKwlpZiAoaXQtPmVudHJ5X2NvdW50ID49IDApIHsKKwkJc3RydWN0IHRyZWUgKnRyZWUgPSBsb29rdXBfdHJlZShyZXZzLT5yZXBvLCAmaXQtPm9pZCk7CisJCXRyZWUtPm9iamVjdC5mbGFncyB8PSBmbGFnczsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfcGF0aChyZXZzLCAmdHJlZS0+b2JqZWN0LCAiIiwKKwkJCQkJICAgICAwNDAwMDAsIHBhdGgtPmJ1Zik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGl0LT5zdWJ0cmVlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWIgPSBpdC0+ZG93bltpXTsKKwkJc3RyYnVmX2FkZGYocGF0aCwgIiVzJXMiLCBiYXNlbGVuID8gIi8iIDogIiIsIHN1Yi0+bmFtZSk7CisJCWFkZF9jYWNoZV90cmVlKHN1Yi0+Y2FjaGVfdHJlZSwgcmV2cywgcGF0aCwgZmxhZ3MpOworCQlzdHJidWZfc2V0bGVuKHBhdGgsIGJhc2VsZW4pOworCX0KKworfQorCitzdGF0aWMgdm9pZCBkb19hZGRfaW5kZXhfb2JqZWN0c190b19wZW5kaW5nKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJc3RydWN0IGJsb2IgKmJsb2I7CisKKwkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCWJsb2IgPSBsb29rdXBfYmxvYihyZXZzLT5yZXBvLCAmY2UtPm9pZCk7CisJCWlmICghYmxvYikKKwkJCWRpZSgidW5hYmxlIHRvIGFkZCBpbmRleCBibG9iIHRvIHRyYXZlcnNhbCIpOworCQlibG9iLT5vYmplY3QuZmxhZ3MgfD0gZmxhZ3M7CisJCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgJmJsb2ItPm9iamVjdCwgIiIsCisJCQkJCSAgICAgY2UtPmNlX21vZGUsIGNlLT5uYW1lKTsKKwl9CisKKwlpZiAoaXN0YXRlLT5jYWNoZV90cmVlKSB7CisJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCQlhZGRfY2FjaGVfdHJlZShpc3RhdGUtPmNhY2hlX3RyZWUsIHJldnMsICZwYXRoLCBmbGFncyk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwl9Cit9CisKK3ZvaWQgYWRkX2luZGV4X29iamVjdHNfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMsICoqcDsKKworCXJlcG9fcmVhZF9pbmRleChyZXZzLT5yZXBvKTsKKwlkb19hZGRfaW5kZXhfb2JqZWN0c190b19wZW5kaW5nKHJldnMsIHJldnMtPnJlcG8tPmluZGV4LCBmbGFncyk7CisKKwlpZiAocmV2cy0+c2luZ2xlX3dvcmt0cmVlKQorCQlyZXR1cm47CisKKwl3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCWZvciAocCA9IHdvcmt0cmVlczsgKnA7IHArKykgeworCQlzdHJ1Y3Qgd29ya3RyZWUgKnd0ID0gKnA7CisJCXN0cnVjdCBpbmRleF9zdGF0ZSBpc3RhdGUgPSB7IE5VTEwgfTsKKworCQlpZiAod3QtPmlzX2N1cnJlbnQpCisJCQljb250aW51ZTsgLyogY3VycmVudCBpbmRleCBhbHJlYWR5IHRha2VuIGNhcmUgb2YgKi8KKworCQlpZiAocmVhZF9pbmRleF9mcm9tKCZpc3RhdGUsCisJCQkJICAgIHdvcmt0cmVlX2dpdF9wYXRoKHd0LCAiaW5kZXgiKSwKKwkJCQkgICAgZ2V0X3dvcmt0cmVlX2dpdF9kaXIod3QpKSA+IDApCisJCQlkb19hZGRfaW5kZXhfb2JqZWN0c190b19wZW5kaW5nKHJldnMsICZpc3RhdGUsIGZsYWdzKTsKKwkJZGlzY2FyZF9pbmRleCgmaXN0YXRlKTsKKwl9CisJZnJlZV93b3JrdHJlZXMod29ya3RyZWVzKTsKK30KKworc3RydWN0IGFkZF9hbHRlcm5hdGVfcmVmc19kYXRhIHsKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworc3RhdGljIHZvaWQgYWRkX29uZV9hbHRlcm5hdGVfcmVmKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHZvaWQgKnZkYXRhKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSAiLmFsdGVybmF0ZSI7CisJc3RydWN0IGFkZF9hbHRlcm5hdGVfcmVmc19kYXRhICpkYXRhID0gdmRhdGE7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJb2JqID0gZ2V0X3JlZmVyZW5jZShkYXRhLT5yZXZzLCBuYW1lLCBvaWQsIGRhdGEtPmZsYWdzKTsKKwlhZGRfcmV2X2NtZGxpbmUoZGF0YS0+cmV2cywgb2JqLCBuYW1lLCBSRVZfQ01EX1JFViwgZGF0YS0+ZmxhZ3MpOworCWFkZF9wZW5kaW5nX29iamVjdChkYXRhLT5yZXZzLCBvYmosIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBhZGRfYWx0ZXJuYXRlX3JlZnNfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBhZGRfYWx0ZXJuYXRlX3JlZnNfZGF0YSBkYXRhOworCWRhdGEucmV2cyA9IHJldnM7CisJZGF0YS5mbGFncyA9IGZsYWdzOworCWZvcl9lYWNoX2FsdGVybmF0ZV9yZWYoYWRkX29uZV9hbHRlcm5hdGVfcmVmLCAmZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BhcmVudHNfb25seShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKmFyZ18sIGludCBmbGFncywKKwkJCSAgICBpbnQgZXhjbHVkZV9wYXJlbnQpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IG9iamVjdCAqaXQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlpbnQgcGFyZW50X251bWJlcjsKKwljb25zdCBjaGFyICphcmcgPSBhcmdfOworCisJaWYgKCphcmcgPT0gJ14nKSB7CisJCWZsYWdzIF49IFVOSU5URVJFU1RJTkcgfCBCT1RUT007CisJCWFyZysrOworCX0KKwlpZiAoZ2V0X29pZF9jb21taXR0aXNoKGFyZywgJm9pZCkpCisJCXJldHVybiAwOworCXdoaWxlICgxKSB7CisJCWl0ID0gZ2V0X3JlZmVyZW5jZShyZXZzLCBhcmcsICZvaWQsIDApOworCQlpZiAoIWl0ICYmIHJldnMtPmlnbm9yZV9taXNzaW5nKQorCQkJcmV0dXJuIDA7CisJCWlmIChpdC0+dHlwZSAhPSBPQkpfVEFHKQorCQkJYnJlYWs7CisJCWlmICghKChzdHJ1Y3QgdGFnKilpdCktPnRhZ2dlZCkKKwkJCXJldHVybiAwOworCQlvaWRjcHkoJm9pZCwgJigoc3RydWN0IHRhZyopaXQpLT50YWdnZWQtPm9pZCk7CisJfQorCWlmIChpdC0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gMDsKKwljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKWl0OworCWlmIChleGNsdWRlX3BhcmVudCAmJgorCSAgICBleGNsdWRlX3BhcmVudCA+IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cykpCisJCXJldHVybiAwOworCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50cywgcGFyZW50X251bWJlciA9IDE7CisJICAgICBwYXJlbnRzOworCSAgICAgcGFyZW50cyA9IHBhcmVudHMtPm5leHQsIHBhcmVudF9udW1iZXIrKykgeworCQlpZiAoZXhjbHVkZV9wYXJlbnQgJiYgcGFyZW50X251bWJlciAhPSBleGNsdWRlX3BhcmVudCkKKwkJCWNvbnRpbnVlOworCisJCWl0ID0gJnBhcmVudHMtPml0ZW0tPm9iamVjdDsKKwkJaXQtPmZsYWdzIHw9IGZsYWdzOworCQlhZGRfcmV2X2NtZGxpbmUocmV2cywgaXQsIGFyZ18sIFJFVl9DTURfUEFSRU5UU19PTkxZLCBmbGFncyk7CisJCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBpdCwgYXJnKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgcmVwb19pbml0X3JldmlzaW9ucyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgY29uc3QgY2hhciAqcHJlZml4KQoreworCW1lbXNldChyZXZzLCAwLCBzaXplb2YoKnJldnMpKTsKKworCXJldnMtPnJlcG8gPSByOworCXJldnMtPmFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCXJldnMtPmlnbm9yZV9tZXJnZXMgPSAxOworCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAxOworCXJldnMtPnBydW5pbmcucmVwbyA9IHI7CisJcmV2cy0+cHJ1bmluZy5mbGFncy5yZWN1cnNpdmUgPSAxOworCXJldnMtPnBydW5pbmcuZmxhZ3MucXVpY2sgPSAxOworCXJldnMtPnBydW5pbmcuYWRkX3JlbW92ZSA9IGZpbGVfYWRkX3JlbW92ZTsKKwlyZXZzLT5wcnVuaW5nLmNoYW5nZSA9IGZpbGVfY2hhbmdlOworCXJldnMtPnBydW5pbmcuY2hhbmdlX2ZuX2RhdGEgPSByZXZzOworCXJldnMtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjsKKwlyZXZzLT5kZW5zZSA9IDE7CisJcmV2cy0+cHJlZml4ID0gcHJlZml4OworCXJldnMtPm1heF9hZ2UgPSAtMTsKKwlyZXZzLT5taW5fYWdlID0gLTE7CisJcmV2cy0+c2tpcF9jb3VudCA9IC0xOworCXJldnMtPm1heF9jb3VudCA9IC0xOworCXJldnMtPm1heF9wYXJlbnRzID0gLTE7CisJcmV2cy0+ZXhwYW5kX3RhYnNfaW5fbG9nID0gLTE7CisKKwlyZXZzLT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfREVGQVVMVDsKKwlyZXZzLT5leHBhbmRfdGFic19pbl9sb2dfZGVmYXVsdCA9IDg7CisKKwlpbml0X2dyZXBfZGVmYXVsdHMocmV2cy0+cmVwbyk7CisJZ3JlcF9pbml0KCZyZXZzLT5ncmVwX2ZpbHRlciwgcmV2cy0+cmVwbywgcHJlZml4KTsKKwlyZXZzLT5ncmVwX2ZpbHRlci5zdGF0dXNfb25seSA9IDE7CisKKwlyZXBvX2RpZmZfc2V0dXAocmV2cy0+cmVwbywgJnJldnMtPmRpZmZvcHQpOworCWlmIChwcmVmaXggJiYgIXJldnMtPmRpZmZvcHQucHJlZml4KSB7CisJCXJldnMtPmRpZmZvcHQucHJlZml4ID0gcHJlZml4OworCQlyZXZzLT5kaWZmb3B0LnByZWZpeF9sZW5ndGggPSBzdHJsZW4ocHJlZml4KTsKKwl9CisKKwlpbml0X2Rpc3BsYXlfbm90ZXMoJnJldnMtPm5vdGVzX29wdCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRfbGlzdCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXdoaWxlIChjb21taXRfbGlzdCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSAmY29tbWl0X2xpc3QtPml0ZW0tPm9iamVjdDsKKwkJb2JqZWN0LT5mbGFncyB8PSBmbGFnczsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iamVjdCwgb2lkX3RvX2hleCgmb2JqZWN0LT5vaWQpKTsKKwkJY29tbWl0X2xpc3QgPSBjb21taXRfbGlzdC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfc2hvd19tZXJnZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpiYXNlczsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkLCAqb3RoZXI7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY29uc3QgY2hhciAqKnBydW5lID0gTlVMTDsKKwlpbnQgaSwgcHJ1bmVfbnVtID0gMTsgLyogY291bnRpbmcgdGVybWluYXRpbmcgTlVMTCAqLworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gcmV2cy0+cmVwby0+aW5kZXg7CisKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZvaWQpKQorCQlkaWUoIi0tbWVyZ2Ugd2l0aG91dCBIRUFEPyIpOworCWhlYWQgPSBsb29rdXBfY29tbWl0X29yX2RpZSgmb2lkLCAiSEVBRCIpOworCWlmIChnZXRfb2lkKCJNRVJHRV9IRUFEIiwgJm9pZCkpCisJCWRpZSgiLS1tZXJnZSB3aXRob3V0IE1FUkdFX0hFQUQ/Iik7CisJb3RoZXIgPSBsb29rdXBfY29tbWl0X29yX2RpZSgmb2lkLCAiTUVSR0VfSEVBRCIpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCAmaGVhZC0+b2JqZWN0LCAiSEVBRCIpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCAmb3RoZXItPm9iamVjdCwgIk1FUkdFX0hFQUQiKTsKKwliYXNlcyA9IGdldF9tZXJnZV9iYXNlcyhoZWFkLCBvdGhlcik7CisJYWRkX3Jldl9jbWRsaW5lX2xpc3QocmV2cywgYmFzZXMsIFJFVl9DTURfTUVSR0VfQkFTRSwgVU5JTlRFUkVTVElORyB8IEJPVFRPTSk7CisJYWRkX3BlbmRpbmdfY29tbWl0X2xpc3QocmV2cywgYmFzZXMsIFVOSU5URVJFU1RJTkcgfCBCT1RUT00pOworCWZyZWVfY29tbWl0X2xpc3QoYmFzZXMpOworCWhlYWQtPm9iamVjdC5mbGFncyB8PSBTWU1NRVRSSUNfTEVGVDsKKworCWlmICghaXN0YXRlLT5jYWNoZV9ucikKKwkJcmVwb19yZWFkX2luZGV4KHJldnMtPnJlcG8pOworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmICghY2Vfc3RhZ2UoY2UpKQorCQkJY29udGludWU7CisJCWlmIChjZV9wYXRoX21hdGNoKGlzdGF0ZSwgY2UsICZyZXZzLT5wcnVuZV9kYXRhLCBOVUxMKSkgeworCQkJcHJ1bmVfbnVtKys7CisJCQlSRUFMTE9DX0FSUkFZKHBydW5lLCBwcnVuZV9udW0pOworCQkJcHJ1bmVbcHJ1bmVfbnVtLTJdID0gY2UtPm5hbWU7CisJCQlwcnVuZVtwcnVuZV9udW0tMV0gPSBOVUxMOworCQl9CisJCXdoaWxlICgoaSsxIDwgaXN0YXRlLT5jYWNoZV9ucikgJiYKKwkJICAgICAgIGNlX3NhbWVfbmFtZShjZSwgaXN0YXRlLT5jYWNoZVtpKzFdKSkKKwkJCWkrKzsKKwl9CisJY2xlYXJfcGF0aHNwZWMoJnJldnMtPnBydW5lX2RhdGEpOworCXBhcnNlX3BhdGhzcGVjKCZyZXZzLT5wcnVuZV9kYXRhLCBQQVRIU1BFQ19BTExfTUFHSUMgJiB+UEFUSFNQRUNfTElURVJBTCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwgUEFUSFNQRUNfTElURVJBTF9QQVRILCAiIiwgcHJ1bmUpOworCXJldnMtPmxpbWl0ZWQgPSAxOworfQorCitzdGF0aWMgaW50IGRvdGRvdF9taXNzaW5nKGNvbnN0IGNoYXIgKmFyZywgY2hhciAqZG90ZG90LAorCQkJICBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBzeW1tZXRyaWMpCit7CisJaWYgKHJldnMtPmlnbm9yZV9taXNzaW5nKQorCQlyZXR1cm4gMDsKKwkvKiBkZS1tdW5nZSBzbyB3ZSByZXBvcnQgdGhlIGZ1bGwgYXJndW1lbnQgKi8KKwkqZG90ZG90ID0gJy4nOworCWRpZShzeW1tZXRyaWMKKwkgICAgPyAiSW52YWxpZCBzeW1tZXRyaWMgZGlmZmVyZW5jZSBleHByZXNzaW9uICVzIgorCSAgICA6ICJJbnZhbGlkIHJldmlzaW9uIHJhbmdlICVzIiwgYXJnKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfZG90ZG90XzEoY29uc3QgY2hhciAqYXJnLCBjaGFyICpkb3Rkb3QsCisJCQkgICBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBmbGFncywKKwkJCSAgIGludCBjYW50X2JlX2ZpbGVuYW1lLAorCQkJICAgc3RydWN0IG9iamVjdF9jb250ZXh0ICphX29jLAorCQkJICAgc3RydWN0IG9iamVjdF9jb250ZXh0ICpiX29jKQoreworCWNvbnN0IGNoYXIgKmFfbmFtZSwgKmJfbmFtZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGFfb2lkLCBiX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0ICphX29iaiwgKmJfb2JqOworCXVuc2lnbmVkIGludCBhX2ZsYWdzLCBiX2ZsYWdzOworCWludCBzeW1tZXRyaWMgPSAwOworCXVuc2lnbmVkIGludCBmbGFnc19leGNsdWRlID0gZmxhZ3MgXiAoVU5JTlRFUkVTVElORyB8IEJPVFRPTSk7CisJdW5zaWduZWQgaW50IG9jX2ZsYWdzID0gR0VUX09JRF9DT01NSVRUSVNIIHwgR0VUX09JRF9SRUNPUkRfUEFUSDsKKworCWFfbmFtZSA9IGFyZzsKKwlpZiAoISphX25hbWUpCisJCWFfbmFtZSA9ICJIRUFEIjsKKworCWJfbmFtZSA9IGRvdGRvdCArIDI7CisJaWYgKCpiX25hbWUgPT0gJy4nKSB7CisJCXN5bW1ldHJpYyA9IDE7CisJCWJfbmFtZSsrOworCX0KKwlpZiAoISpiX25hbWUpCisJCWJfbmFtZSA9ICJIRUFEIjsKKworCWlmIChnZXRfb2lkX3dpdGhfY29udGV4dChyZXZzLT5yZXBvLCBhX25hbWUsIG9jX2ZsYWdzLCAmYV9vaWQsIGFfb2MpIHx8CisJICAgIGdldF9vaWRfd2l0aF9jb250ZXh0KHJldnMtPnJlcG8sIGJfbmFtZSwgb2NfZmxhZ3MsICZiX29pZCwgYl9vYykpCisJCXJldHVybiAtMTsKKworCWlmICghY2FudF9iZV9maWxlbmFtZSkgeworCQkqZG90ZG90ID0gJy4nOworCQl2ZXJpZnlfbm9uX2ZpbGVuYW1lKHJldnMtPnByZWZpeCwgYXJnKTsKKwkJKmRvdGRvdCA9ICdcMCc7CisJfQorCisJYV9vYmogPSBwYXJzZV9vYmplY3QocmV2cy0+cmVwbywgJmFfb2lkKTsKKwliX29iaiA9IHBhcnNlX29iamVjdChyZXZzLT5yZXBvLCAmYl9vaWQpOworCWlmICghYV9vYmogfHwgIWJfb2JqKQorCQlyZXR1cm4gZG90ZG90X21pc3NpbmcoYXJnLCBkb3Rkb3QsIHJldnMsIHN5bW1ldHJpYyk7CisKKwlpZiAoIXN5bW1ldHJpYykgeworCQkvKiBqdXN0IEEuLkIgKi8KKwkJYl9mbGFncyA9IGZsYWdzOworCQlhX2ZsYWdzID0gZmxhZ3NfZXhjbHVkZTsKKwl9IGVsc2UgeworCQkvKiBBLi4uQiAtLSBmaW5kIG1lcmdlIGJhc2VzIGJldHdlZW4gdGhlIHR3byAqLworCQlzdHJ1Y3QgY29tbWl0ICphLCAqYjsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpleGNsdWRlOworCisJCWEgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyZXZzLT5yZXBvLCAmYV9vYmotPm9pZCk7CisJCWIgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyZXZzLT5yZXBvLCAmYl9vYmotPm9pZCk7CisJCWlmICghYSB8fCAhYikKKwkJCXJldHVybiBkb3Rkb3RfbWlzc2luZyhhcmcsIGRvdGRvdCwgcmV2cywgc3ltbWV0cmljKTsKKworCQlleGNsdWRlID0gZ2V0X21lcmdlX2Jhc2VzKGEsIGIpOworCQlhZGRfcmV2X2NtZGxpbmVfbGlzdChyZXZzLCBleGNsdWRlLCBSRVZfQ01EX01FUkdFX0JBU0UsCisJCQkJICAgICBmbGFnc19leGNsdWRlKTsKKwkJYWRkX3BlbmRpbmdfY29tbWl0X2xpc3QocmV2cywgZXhjbHVkZSwgZmxhZ3NfZXhjbHVkZSk7CisJCWZyZWVfY29tbWl0X2xpc3QoZXhjbHVkZSk7CisKKwkJYl9mbGFncyA9IGZsYWdzOworCQlhX2ZsYWdzID0gZmxhZ3MgfCBTWU1NRVRSSUNfTEVGVDsKKwl9CisKKwlhX29iai0+ZmxhZ3MgfD0gYV9mbGFnczsKKwliX29iai0+ZmxhZ3MgfD0gYl9mbGFnczsKKwlhZGRfcmV2X2NtZGxpbmUocmV2cywgYV9vYmosIGFfbmFtZSwgUkVWX0NNRF9MRUZULCBhX2ZsYWdzKTsKKwlhZGRfcmV2X2NtZGxpbmUocmV2cywgYl9vYmosIGJfbmFtZSwgUkVWX0NNRF9SSUdIVCwgYl9mbGFncyk7CisJYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfcGF0aChyZXZzLCBhX29iaiwgYV9uYW1lLCBhX29jLT5tb2RlLCBhX29jLT5wYXRoKTsKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9wYXRoKHJldnMsIGJfb2JqLCBiX25hbWUsIGJfb2MtPm1vZGUsIGJfb2MtPnBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9kb3Rkb3QoY29uc3QgY2hhciAqYXJnLAorCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGZsYWdzLAorCQkJIGludCBjYW50X2JlX2ZpbGVuYW1lKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCBhX29jLCBiX29jOworCWNoYXIgKmRvdGRvdCA9IHN0cnN0cihhcmcsICIuLiIpOworCWludCByZXQ7CisKKwlpZiAoIWRvdGRvdCkKKwkJcmV0dXJuIC0xOworCisJbWVtc2V0KCZhX29jLCAwLCBzaXplb2YoYV9vYykpOworCW1lbXNldCgmYl9vYywgMCwgc2l6ZW9mKGJfb2MpKTsKKworCSpkb3Rkb3QgPSAnXDAnOworCXJldCA9IGhhbmRsZV9kb3Rkb3RfMShhcmcsIGRvdGRvdCwgcmV2cywgZmxhZ3MsIGNhbnRfYmVfZmlsZW5hbWUsCisJCQkgICAgICAmYV9vYywgJmJfb2MpOworCSpkb3Rkb3QgPSAnLic7CisKKwlmcmVlKGFfb2MucGF0aCk7CisJZnJlZShiX29jLnBhdGgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGhhbmRsZV9yZXZpc2lvbl9hcmcoY29uc3QgY2hhciAqYXJnXywgc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgZmxhZ3MsIHVuc2lnbmVkIHJldmFyZ19vcHQpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IG9jOworCWNoYXIgKm1hcms7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBsb2NhbF9mbGFnczsKKwljb25zdCBjaGFyICphcmcgPSBhcmdfOworCWludCBjYW50X2JlX2ZpbGVuYW1lID0gcmV2YXJnX29wdCAmIFJFVkFSR19DQU5OT1RfQkVfRklMRU5BTUU7CisJdW5zaWduZWQgZ2V0X3NoYTFfZmxhZ3MgPSBHRVRfT0lEX1JFQ09SRF9QQVRIOworCisJZmxhZ3MgPSBmbGFncyAmIFVOSU5URVJFU1RJTkcgPyBmbGFncyB8IEJPVFRPTSA6IGZsYWdzICYgfkJPVFRPTTsKKworCWlmICghY2FudF9iZV9maWxlbmFtZSAmJiAhc3RyY21wKGFyZywgIi4uIikpIHsKKwkJLyoKKwkJICogSnVzdCAiLi4iPyAgVGhhdCBpcyBub3QgYSByYW5nZSBidXQgdGhlCisJCSAqIHBhdGhzcGVjIGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKwkJICovCisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoIWhhbmRsZV9kb3Rkb3QoYXJnLCByZXZzLCBmbGFncywgcmV2YXJnX29wdCkpCisJCXJldHVybiAwOworCisJbWFyayA9IHN0cnN0cihhcmcsICJeQCIpOworCWlmIChtYXJrICYmICFtYXJrWzJdKSB7CisJCSptYXJrID0gMDsKKwkJaWYgKGFkZF9wYXJlbnRzX29ubHkocmV2cywgYXJnLCBmbGFncywgMCkpCisJCQlyZXR1cm4gMDsKKwkJKm1hcmsgPSAnXic7CisJfQorCW1hcmsgPSBzdHJzdHIoYXJnLCAiXiEiKTsKKwlpZiAobWFyayAmJiAhbWFya1syXSkgeworCQkqbWFyayA9IDA7CisJCWlmICghYWRkX3BhcmVudHNfb25seShyZXZzLCBhcmcsIGZsYWdzIF4gKFVOSU5URVJFU1RJTkcgfCBCT1RUT00pLCAwKSkKKwkJCSptYXJrID0gJ14nOworCX0KKwltYXJrID0gc3Ryc3RyKGFyZywgIl4tIik7CisJaWYgKG1hcmspIHsKKwkJaW50IGV4Y2x1ZGVfcGFyZW50ID0gMTsKKworCQlpZiAobWFya1syXSkgeworCQkJY2hhciAqZW5kOworCQkJZXhjbHVkZV9wYXJlbnQgPSBzdHJ0b3VsKG1hcmsgKyAyLCAmZW5kLCAxMCk7CisJCQlpZiAoKmVuZCAhPSAnXDAnIHx8ICFleGNsdWRlX3BhcmVudCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQkqbWFyayA9IDA7CisJCWlmICghYWRkX3BhcmVudHNfb25seShyZXZzLCBhcmcsIGZsYWdzIF4gKFVOSU5URVJFU1RJTkcgfCBCT1RUT00pLCBleGNsdWRlX3BhcmVudCkpCisJCQkqbWFyayA9ICdeJzsKKwl9CisKKwlsb2NhbF9mbGFncyA9IDA7CisJaWYgKCphcmcgPT0gJ14nKSB7CisJCWxvY2FsX2ZsYWdzID0gVU5JTlRFUkVTVElORyB8IEJPVFRPTTsKKwkJYXJnKys7CisJfQorCisJaWYgKHJldmFyZ19vcHQgJiBSRVZBUkdfQ09NTUlUVElTSCkKKwkJZ2V0X3NoYTFfZmxhZ3MgfD0gR0VUX09JRF9DT01NSVRUSVNIOworCisJaWYgKGdldF9vaWRfd2l0aF9jb250ZXh0KHJldnMtPnJlcG8sIGFyZywgZ2V0X3NoYTFfZmxhZ3MsICZvaWQsICZvYykpCisJCXJldHVybiByZXZzLT5pZ25vcmVfbWlzc2luZyA/IDAgOiAtMTsKKwlpZiAoIWNhbnRfYmVfZmlsZW5hbWUpCisJCXZlcmlmeV9ub25fZmlsZW5hbWUocmV2cy0+cHJlZml4LCBhcmcpOworCW9iamVjdCA9IGdldF9yZWZlcmVuY2UocmV2cywgYXJnLCAmb2lkLCBmbGFncyBeIGxvY2FsX2ZsYWdzKTsKKwlpZiAoIW9iamVjdCkKKwkJcmV0dXJuIHJldnMtPmlnbm9yZV9taXNzaW5nID8gMCA6IC0xOworCWFkZF9yZXZfY21kbGluZShyZXZzLCBvYmplY3QsIGFyZ18sIFJFVl9DTURfUkVWLCBmbGFncyBeIGxvY2FsX2ZsYWdzKTsKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9wYXRoKHJldnMsIG9iamVjdCwgYXJnLCBvYy5tb2RlLCBvYy5wYXRoKTsKKwlmcmVlKG9jLnBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWFkX3BhdGhzcGVjX2Zyb21fc3RkaW4oc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJICAgICBzdHJ1Y3QgYXJndl9hcnJheSAqcHJ1bmUpCit7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKHNiLCBzdGRpbikgIT0gRU9GKQorCQlhcmd2X2FycmF5X3B1c2gocHJ1bmUsIHNiLT5idWYpOworfQorCitzdGF0aWMgdm9pZCByZWFkX3JldmlzaW9uc19mcm9tX3N0ZGluKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICAgICBzdHJ1Y3QgYXJndl9hcnJheSAqcHJ1bmUpCit7CisJc3RydWN0IHN0cmJ1ZiBzYjsKKwlpbnQgc2Vlbl9kYXNoZGFzaCA9IDA7CisJaW50IHNhdmVfd2FybmluZzsKKworCXNhdmVfd2FybmluZyA9IHdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5OworCXdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5ID0gMDsKKworCXN0cmJ1Zl9pbml0KCZzYiwgMTAwMCk7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgc3RkaW4pICE9IEVPRikgeworCQlpbnQgbGVuID0gc2IubGVuOworCQlpZiAoIWxlbikKKwkJCWJyZWFrOworCQlpZiAoc2IuYnVmWzBdID09ICctJykgeworCQkJaWYgKGxlbiA9PSAyICYmIHNiLmJ1ZlsxXSA9PSAnLScpIHsKKwkJCQlzZWVuX2Rhc2hkYXNoID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRpZSgib3B0aW9ucyBub3Qgc3VwcG9ydGVkIGluIC0tc3RkaW4gbW9kZSIpOworCQl9CisJCWlmIChoYW5kbGVfcmV2aXNpb25fYXJnKHNiLmJ1ZiwgcmV2cywgMCwKKwkJCQkJUkVWQVJHX0NBTk5PVF9CRV9GSUxFTkFNRSkpCisJCQlkaWUoImJhZCByZXZpc2lvbiAnJXMnIiwgc2IuYnVmKTsKKwl9CisJaWYgKHNlZW5fZGFzaGRhc2gpCisJCXJlYWRfcGF0aHNwZWNfZnJvbV9zdGRpbigmc2IsIHBydW5lKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHkgPSBzYXZlX3dhcm5pbmc7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9ncmVwKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHRuLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHdoYXQpCit7CisJYXBwZW5kX2dyZXBfcGF0dGVybigmcmV2cy0+Z3JlcF9maWx0ZXIsIHB0biwgImNvbW1hbmQgbGluZSIsIDAsIHdoYXQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfaGVhZGVyX2dyZXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBlbnVtIGdyZXBfaGVhZGVyX2ZpZWxkIGZpZWxkLCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKCZyZXZzLT5ncmVwX2ZpbHRlciwgZmllbGQsIHBhdHRlcm4pOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWVzc2FnZV9ncmVwKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwlhZGRfZ3JlcChyZXZzLCBwYXR0ZXJuLCBHUkVQX1BBVFRFUk5fQk9EWSk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3JldmlzaW9uX29wdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICAgICBpbnQgKnVua2MsIGNvbnN0IGNoYXIgKip1bmt2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQqIG9wdCkKK3sKKwljb25zdCBjaGFyICphcmcgPSBhcmd2WzBdOworCWNvbnN0IGNoYXIgKm9wdGFyZzsKKwlpbnQgYXJnY291bnQ7CisJY29uc3QgdW5zaWduZWQgaGV4c3ogPSB0aGVfaGFzaF9hbGdvLT5oZXhzejsKKworCS8qIHBzZXVkbyByZXZpc2lvbiBhcmd1bWVudHMgKi8KKwlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1icmFuY2hlcyIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS10YWdzIikgfHwgIXN0cmNtcChhcmcsICItLXJlbW90ZXMiKSB8fAorCSAgICAhc3RyY21wKGFyZywgIi0tcmVmbG9nIikgfHwgIXN0cmNtcChhcmcsICItLW5vdCIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1uby13YWxrIikgfHwgIXN0cmNtcChhcmcsICItLWRvLXdhbGsiKSB8fAorCSAgICAhc3RyY21wKGFyZywgIi0tYmlzZWN0IikgfHwgc3RhcnRzX3dpdGgoYXJnLCAiLS1nbG9iPSIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1pbmRleGVkLW9iamVjdHMiKSB8fAorCSAgICAhc3RyY21wKGFyZywgIi0tYWx0ZXJuYXRlLXJlZnMiKSB8fAorCSAgICBzdGFydHNfd2l0aChhcmcsICItLWV4Y2x1ZGU9IikgfHwKKwkgICAgc3RhcnRzX3dpdGgoYXJnLCAiLS1icmFuY2hlcz0iKSB8fCBzdGFydHNfd2l0aChhcmcsICItLXRhZ3M9IikgfHwKKwkgICAgc3RhcnRzX3dpdGgoYXJnLCAiLS1yZW1vdGVzPSIpIHx8IHN0YXJ0c193aXRoKGFyZywgIi0tbm8td2Fsaz0iKSkKKwl7CisJCXVua3ZbKCp1bmtjKSsrXSA9IGFyZzsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJtYXgtY291bnQiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWF4X2NvdW50ID0gYXRvaShvcHRhcmcpOworCQlyZXZzLT5ub193YWxrID0gMDsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoInNraXAiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+c2tpcF9jb3VudCA9IGF0b2kob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKCphcmcgPT0gJy0nKSAmJiBpc2RpZ2l0KGFyZ1sxXSkpIHsKKwkJLyogYWNjZXB0IC08ZGlnaXQ+LCBsaWtlIHRyYWRpdGlvbmFsICJoZWFkIiAqLworCQlpZiAoc3RydG9sX2koYXJnICsgMSwgMTAsICZyZXZzLT5tYXhfY291bnQpIDwgMCB8fAorCQkgICAgcmV2cy0+bWF4X2NvdW50IDwgMCkKKwkJCWRpZSgiJyVzJzogbm90IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIiLCBhcmcgKyAxKTsKKwkJcmV2cy0+bm9fd2FsayA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi1uIikpIHsKKwkJaWYgKGFyZ2MgPD0gMSkKKwkJCXJldHVybiBlcnJvcigiLW4gcmVxdWlyZXMgYW4gYXJndW1lbnQiKTsKKwkJcmV2cy0+bWF4X2NvdW50ID0gYXRvaShhcmd2WzFdKTsKKwkJcmV2cy0+bm9fd2FsayA9IDA7CisJCXJldHVybiAyOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLW4iLCAmb3B0YXJnKSkgeworCQlyZXZzLT5tYXhfY291bnQgPSBhdG9pKG9wdGFyZyk7CisJCXJldnMtPm5vX3dhbGsgPSAwOworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoIm1heC1hZ2UiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWF4X2FnZSA9IGF0b2kob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoInNpbmNlIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXJldnMtPm1heF9hZ2UgPSBhcHByb3hpZGF0ZShvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiYWZ0ZXIiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWF4X2FnZSA9IGFwcHJveGlkYXRlKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJtaW4tYWdlIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXJldnMtPm1pbl9hZ2UgPSBhdG9pKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJiZWZvcmUiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWluX2FnZSA9IGFwcHJveGlkYXRlKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJ1bnRpbCIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5taW5fYWdlID0gYXBwcm94aWRhdGUob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZpcnN0LXBhcmVudCIpKSB7CisJCXJldnMtPmZpcnN0X3BhcmVudF9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hbmNlc3RyeS1wYXRoIikpIHsKKwkJcmV2cy0+YW5jZXN0cnlfcGF0aCA9IDE7CisJCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWciKSB8fCAhc3RyY21wKGFyZywgIi0td2Fsay1yZWZsb2dzIikpIHsKKwkJaW5pdF9yZWZsb2dfd2FsaygmcmV2cy0+cmVmbG9nX2luZm8pOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWRlZmF1bHQiKSkgeworCQlpZiAoYXJnYyA8PSAxKQorCQkJcmV0dXJuIGVycm9yKCJiYWQgLS1kZWZhdWx0IGFyZ3VtZW50Iik7CisJCXJldnMtPmRlZiA9IGFyZ3ZbMV07CisJCXJldHVybiAyOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW1lcmdlIikpIHsKKwkJcmV2cy0+c2hvd19tZXJnZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdG9wby1vcmRlciIpKSB7CisJCXJldnMtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2ltcGxpZnktbWVyZ2VzIikpIHsKKwkJcmV2cy0+c2ltcGxpZnlfbWVyZ2VzID0gMTsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCXJldnMtPnJld3JpdGVfcGFyZW50cyA9IDE7CisJCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uIikpIHsKKwkJcmV2cy0+c2ltcGxpZnlfbWVyZ2VzID0gMTsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCXJldnMtPnJld3JpdGVfcGFyZW50cyA9IDE7CisJCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCQlyZXZzLT5zaW1wbGlmeV9ieV9kZWNvcmF0aW9uID0gMTsKKwkJcmV2cy0+bGltaXRlZCA9IDE7CisJCXJldnMtPnBydW5lID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kYXRlLW9yZGVyIikpIHsKKwkJcmV2cy0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFOworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hdXRob3ItZGF0ZS1vcmRlciIpKSB7CisJCXJldnMtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9CWV9BVVRIT1JfREFURTsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZWFybHktb3V0cHV0IikpIHsKKwkJcmV2cy0+ZWFybHlfb3V0cHV0ID0gMTAwOworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tZWFybHktb3V0cHV0PSIsICZvcHRhcmcpKSB7CisJCWlmIChzdHJ0b3VsX3VpKG9wdGFyZywgMTAsICZyZXZzLT5lYXJseV9vdXRwdXQpIDwgMCkKKwkJCWRpZSgiJyVzJzogbm90IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIiLCBvcHRhcmcpOworCQlyZXZzLT50b3BvX29yZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1wYXJlbnRzIikpIHsKKwkJcmV2cy0+cmV3cml0ZV9wYXJlbnRzID0gMTsKKwkJcmV2cy0+cHJpbnRfcGFyZW50cyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZGVuc2UiKSkgeworCQlyZXZzLT5kZW5zZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3BhcnNlIikpIHsKKwkJcmV2cy0+ZGVuc2UgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWluLWNvbW1pdC1vcmRlciIpKSB7CisJCXJldnMtPnRyZWVfYmxvYnNfaW5fY29tbWl0X29yZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZW1vdmUtZW1wdHkiKSkgeworCQlyZXZzLT5yZW1vdmVfZW1wdHlfdHJlZXMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW1lcmdlcyIpKSB7CisJCXJldnMtPm1pbl9wYXJlbnRzID0gMjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1tZXJnZXMiKSkgeworCQlyZXZzLT5tYXhfcGFyZW50cyA9IDE7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLW1pbi1wYXJlbnRzPSIsICZvcHRhcmcpKSB7CisJCXJldnMtPm1pbl9wYXJlbnRzID0gYXRvaShvcHRhcmcpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW1pbi1wYXJlbnRzIikpIHsKKwkJcmV2cy0+bWluX3BhcmVudHMgPSAwOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1tYXgtcGFyZW50cz0iLCAmb3B0YXJnKSkgeworCQlyZXZzLT5tYXhfcGFyZW50cyA9IGF0b2kob3B0YXJnKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1tYXgtcGFyZW50cyIpKSB7CisJCXJldnMtPm1heF9wYXJlbnRzID0gLTE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYm91bmRhcnkiKSkgeworCQlyZXZzLT5ib3VuZGFyeSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbGVmdC1yaWdodCIpKSB7CisJCXJldnMtPmxlZnRfcmlnaHQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWxlZnQtb25seSIpKSB7CisJCWlmIChyZXZzLT5yaWdodF9vbmx5KQorCQkJZGllKCItLWxlZnQtb25seSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXJpZ2h0LW9ubHkiCisJCQkgICAgIiBvciAtLWNoZXJyeSIpOworCQlyZXZzLT5sZWZ0X29ubHkgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJpZ2h0LW9ubHkiKSkgeworCQlpZiAocmV2cy0+bGVmdF9vbmx5KQorCQkJZGllKCItLXJpZ2h0LW9ubHkgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1sZWZ0LW9ubHkiKTsKKwkJcmV2cy0+cmlnaHRfb25seSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY2hlcnJ5IikpIHsKKwkJaWYgKHJldnMtPmxlZnRfb25seSkKKwkJCWRpZSgiLS1jaGVycnkgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1sZWZ0LW9ubHkiKTsKKwkJcmV2cy0+Y2hlcnJ5X21hcmsgPSAxOworCQlyZXZzLT5yaWdodF9vbmx5ID0gMTsKKwkJcmV2cy0+bWF4X3BhcmVudHMgPSAxOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jb3VudCIpKSB7CisJCXJldnMtPmNvdW50ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGVycnktbWFyayIpKSB7CisJCWlmIChyZXZzLT5jaGVycnlfcGljaykKKwkJCWRpZSgiLS1jaGVycnktbWFyayBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWNoZXJyeS1waWNrIik7CisJCXJldnMtPmNoZXJyeV9tYXJrID0gMTsKKwkJcmV2cy0+bGltaXRlZCA9IDE7IC8qIG5lZWRzIGxpbWl0X2xpc3QoKSAqLworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNoZXJyeS1waWNrIikpIHsKKwkJaWYgKHJldnMtPmNoZXJyeV9tYXJrKQorCQkJZGllKCItLWNoZXJyeS1waWNrIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tY2hlcnJ5LW1hcmsiKTsKKwkJcmV2cy0+Y2hlcnJ5X3BpY2sgPSAxOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1vYmplY3RzIikpIHsKKwkJcmV2cy0+dGFnX29iamVjdHMgPSAxOworCQlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCQlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW9iamVjdHMtZWRnZSIpKSB7CisJCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwkJcmV2cy0+dHJlZV9vYmplY3RzID0gMTsKKwkJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKKwkJcmV2cy0+ZWRnZV9oaW50ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSIpKSB7CisJCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwkJcmV2cy0+dHJlZV9vYmplY3RzID0gMTsKKwkJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKKwkJcmV2cy0+ZWRnZV9oaW50ID0gMTsKKwkJcmV2cy0+ZWRnZV9oaW50X2FnZ3Jlc3NpdmUgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeS1vYmplY3RzIikpIHsKKwkJcmV2cy0+dGFnX29iamVjdHMgPSAxOworCQlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCQlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCQlyZXZzLT52ZXJpZnlfb2JqZWN0cyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdW5wYWNrZWQiKSkgeworCQlyZXZzLT51bnBhY2tlZCA9IDE7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLXVucGFja2VkPSIpKSB7CisJCWRpZSgiLS11bnBhY2tlZD08cGFja2ZpbGU+IG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi1yIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCXJldnMtPmRpZmZvcHQuZmxhZ3MucmVjdXJzaXZlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXQiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJcmV2cy0+ZGlmZm9wdC5mbGFncy5yZWN1cnNpdmUgPSAxOworCQlyZXZzLT5kaWZmb3B0LmZsYWdzLnRyZWVfaW5fcmVjdXJzaXZlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW0iKSkgeworCQlyZXZzLT5pZ25vcmVfbWVyZ2VzID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWMiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMDsKKwkJcmV2cy0+Y29tYmluZV9tZXJnZXMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNvbWJpbmVkLWFsbC1wYXRocyIpKSB7CisJCXJldnMtPmRpZmYgPSAxOworCQlyZXZzLT5jb21iaW5lZF9hbGxfcGF0aHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNjIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IDE7CisJCXJldnMtPmNvbWJpbmVfbWVyZ2VzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXYiKSkgeworCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcHJldHR5IikpIHsKKwkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOworCQlyZXZzLT5wcmV0dHlfZ2l2ZW4gPSAxOworCQlnZXRfY29tbWl0X2Zvcm1hdChOVUxMLCByZXZzKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tcHJldHR5PSIsICZvcHRhcmcpIHx8CisJCSAgIHNraXBfcHJlZml4KGFyZywgIi0tZm9ybWF0PSIsICZvcHRhcmcpKSB7CisJCS8qCisJCSAqIERldGFjaGVkIGZvcm0gKCItLXByZXR0eSBYIiBhcyBvcHBvc2VkIHRvICItLXByZXR0eT1YIikKKwkJICogbm90IGFsbG93ZWQsIHNpbmNlIHRoZSBhcmd1bWVudCBpcyBvcHRpb25hbC4KKwkJICovCisJCXJldnMtPnZlcmJvc2VfaGVhZGVyID0gMTsKKwkJcmV2cy0+cHJldHR5X2dpdmVuID0gMTsKKwkJZ2V0X2NvbW1pdF9mb3JtYXQob3B0YXJnLCByZXZzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1leHBhbmQtdGFicyIpKSB7CisJCXJldnMtPmV4cGFuZF90YWJzX2luX2xvZyA9IDg7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tZXhwYW5kLXRhYnMiKSkgeworCQlyZXZzLT5leHBhbmRfdGFic19pbl9sb2cgPSAwOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1leHBhbmQtdGFicz0iLCAmYXJnKSkgeworCQlpbnQgdmFsOworCQlpZiAoc3RydG9sX2koYXJnLCAxMCwgJnZhbCkgPCAwIHx8IHZhbCA8IDApCisJCQlkaWUoIiclcyc6IG5vdCBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIiwgYXJnKTsKKwkJcmV2cy0+ZXhwYW5kX3RhYnNfaW5fbG9nID0gdmFsOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNob3ctbm90ZXMiKSB8fCAhc3RyY21wKGFyZywgIi0tbm90ZXMiKSkgeworCQllbmFibGVfZGVmYXVsdF9kaXNwbGF5X25vdGVzKCZyZXZzLT5ub3Rlc19vcHQsICZyZXZzLT5zaG93X25vdGVzKTsKKwkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1zaWduYXR1cmUiKSkgeworCQlyZXZzLT5zaG93X3NpZ25hdHVyZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tc2hvdy1zaWduYXR1cmUiKSkgeworCQlyZXZzLT5zaG93X3NpZ25hdHVyZSA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1saW5lYXItYnJlYWsiKSkgeworCQlyZXZzLT5icmVha19iYXIgPSAiICAgICAgICAgICAgICAgICAgICAuLi4uLi4uLi4uIjsKKwkJcmV2cy0+dHJhY2tfbGluZWFyID0gMTsKKwkJcmV2cy0+dHJhY2tfZmlyc3RfdGltZSA9IDE7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXNob3ctbGluZWFyLWJyZWFrPSIsICZvcHRhcmcpKSB7CisJCXJldnMtPmJyZWFrX2JhciA9IHhzdHJkdXAob3B0YXJnKTsKKwkJcmV2cy0+dHJhY2tfbGluZWFyID0gMTsKKwkJcmV2cy0+dHJhY2tfZmlyc3RfdGltZSA9IDE7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXNob3ctbm90ZXM9IiwgJm9wdGFyZykgfHwKKwkJICAgc2tpcF9wcmVmaXgoYXJnLCAiLS1ub3Rlcz0iLCAmb3B0YXJnKSkgeworCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1zaG93LW5vdGVzPSIpICYmCisJCSAgICByZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPCAwKQorCQkJcmV2cy0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID0gMTsKKwkJZW5hYmxlX3JlZl9kaXNwbGF5X25vdGVzKCZyZXZzLT5ub3Rlc19vcHQsICZyZXZzLT5zaG93X25vdGVzLCBvcHRhcmcpOworCQlyZXZzLT5zaG93X25vdGVzX2dpdmVuID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1ub3RlcyIpKSB7CisJCWRpc2FibGVfZGlzcGxheV9ub3RlcygmcmV2cy0+bm90ZXNfb3B0LCAmcmV2cy0+c2hvd19ub3Rlcyk7CisJCXJldnMtPnNob3dfbm90ZXNfZ2l2ZW4gPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0YW5kYXJkLW5vdGVzIikpIHsKKwkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CisJCXJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tc3RhbmRhcmQtbm90ZXMiKSkgeworCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW9uZWxpbmUiKSkgeworCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CisJCWdldF9jb21taXRfZm9ybWF0KCJvbmVsaW5lIiwgcmV2cyk7CisJCXJldnMtPnByZXR0eV9naXZlbiA9IDE7CisJCXJldnMtPmFiYnJldl9jb21taXQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWdyYXBoIikpIHsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCXJldnMtPnJld3JpdGVfcGFyZW50cyA9IDE7CisJCXJldnMtPmdyYXBoID0gZ3JhcGhfaW5pdChyZXZzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yb290IikpIHsKKwkJcmV2cy0+c2hvd19yb290X2RpZmYgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWNvbW1pdC1pZCIpKSB7CisJCXJldnMtPm5vX2NvbW1pdF9pZCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWx3YXlzIikpIHsKKwkJcmV2cy0+YWx3YXlzX3Nob3dfaGVhZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1hYmJyZXYiKSkgeworCQlyZXZzLT5hYmJyZXYgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFiYnJldiIpKSB7CisJCXJldnMtPmFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1hYmJyZXY9IiwgJm9wdGFyZykpIHsKKwkJcmV2cy0+YWJicmV2ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDEwKTsKKwkJaWYgKHJldnMtPmFiYnJldiA8IE1JTklNVU1fQUJCUkVWKQorCQkJcmV2cy0+YWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7CisJCWVsc2UgaWYgKHJldnMtPmFiYnJldiA+IGhleHN6KQorCQkJcmV2cy0+YWJicmV2ID0gaGV4c3o7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWJicmV2LWNvbW1pdCIpKSB7CisJCXJldnMtPmFiYnJldl9jb21taXQgPSAxOworCQlyZXZzLT5hYmJyZXZfY29tbWl0X2dpdmVuID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1hYmJyZXYtY29tbWl0IikpIHsKKwkJcmV2cy0+YWJicmV2X2NvbW1pdCA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZnVsbC1kaWZmIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCXJldnMtPmZ1bGxfZGlmZiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZnVsbC1oaXN0b3J5IikpIHsKKwkJcmV2cy0+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+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgfHwKKwkgICAgIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSB8fAorCSAgICAocGFyZW50ID0gb25lX3JlbGV2YW50X3BhcmVudChyZXZzLCBjb21taXQtPnBhcmVudHMpKSA9PSBOVUxMKQorCQlzdC0+c2ltcGxpZmllZCA9IGNvbW1pdDsKKwllbHNlIHsKKwkJcHN0ID0gbG9jYXRlX3NpbXBsaWZ5X3N0YXRlKHJldnMsIHBhcmVudCk7CisJCXN0LT5zaW1wbGlmaWVkID0gcHN0LT5zaW1wbGlmaWVkOworCX0KKwlyZXR1cm4gdGFpbDsKK30KKworc3RhdGljIHZvaWQgc2ltcGxpZnlfbWVyZ2VzKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsICpuZXh0OworCXN0cnVjdCBjb21taXRfbGlzdCAqeWV0X3RvX2RvLCAqKnRhaWw7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJaWYgKCFyZXZzLT5wcnVuZSkKKwkJcmV0dXJuOworCisJLyogZmVlZCB0aGUgbGlzdCByZXZlcnNlZCAqLworCXlldF90b19kbyA9IE5VTEw7CisJZm9yIChsaXN0ID0gcmV2cy0+Y29tbWl0czsgbGlzdDsgbGlzdCA9IG5leHQpIHsKKwkJY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJbmV4dCA9IGxpc3QtPm5leHQ7CisJCS8qCisJCSAqIERvIG5vdCBmcmVlKGxpc3QpIGhlcmUgeWV0OyB0aGUgb3JpZ2luYWwgbGlzdAorCQkgKiBpcyB1c2VkIGxhdGVyIGluIHRoaXMgZnVuY3Rpb24uCisJCSAqLworCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmeWV0X3RvX2RvKTsKKwl9CisJd2hpbGUgKHlldF90b19kbykgeworCQlsaXN0ID0geWV0X3RvX2RvOworCQl5ZXRfdG9fZG8gPSBOVUxMOworCQl0YWlsID0gJnlldF90b19kbzsKKwkJd2hpbGUgKGxpc3QpIHsKKwkJCWNvbW1pdCA9IHBvcF9jb21taXQoJmxpc3QpOworCQkJdGFpbCA9IHNpbXBsaWZ5X29uZShyZXZzLCBjb21taXQsIHRhaWwpOworCQl9CisJfQorCisJLyogY2xlYW4gdXAgdGhlIHJlc3VsdCwgcmVtb3ZpbmcgdGhlIHNpbXBsaWZpZWQgb25lcyAqLworCWxpc3QgPSByZXZzLT5jb21taXRzOworCXJldnMtPmNvbW1pdHMgPSBOVUxMOworCXRhaWwgPSAmcmV2cy0+Y29tbWl0czsKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgbWVyZ2Vfc2ltcGxpZnlfc3RhdGUgKnN0OworCisJCWNvbW1pdCA9IHBvcF9jb21taXQoJmxpc3QpOworCQlzdCA9IGxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShyZXZzLCBjb21taXQpOworCQlpZiAoc3QtPnNpbXBsaWZpZWQgPT0gY29tbWl0KQorCQkJdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCB0YWlsKS0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jaGlsZHJlbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsOworCWZvciAobCA9IHJldnMtPmNvbW1pdHM7IGw7IGwgPSBsLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGwtPml0ZW07CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCQlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJYWRkX2NoaWxkKHJldnMsIHAtPml0ZW0sIGNvbW1pdCk7CisJfQorfQorCit2b2lkIHJlc2V0X3JldmlzaW9uX3dhbGsodm9pZCkKK3sKKwljbGVhcl9vYmplY3RfZmxhZ3MoU0VFTiB8IEFEREVEIHwgU0hPV04gfCBUT1BPX1dBTEtfRVhQTE9SRUQgfCBUT1BPX1dBTEtfSU5ERUdSRUUpOworfQorCitzdGF0aWMgaW50IG1hcmtfdW5pbnRlcmVzdGluZyhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywKKwkJCSAgICAgIHVpbnQzMl90IHBvcywKKwkJCSAgICAgIHZvaWQgKmNiKQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IGNiOworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3QocmV2cy0+cmVwbywgb2lkKTsKKwlvLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HIHwgU0VFTjsKKwlyZXR1cm4gMDsKK30KKworZGVmaW5lX2NvbW1pdF9zbGFiKGluZGVncmVlX3NsYWIsIGludCk7CitkZWZpbmVfY29tbWl0X3NsYWIoYXV0aG9yX2RhdGVfc2xhYiwgdGltZXN0YW1wX3QpOworCitzdHJ1Y3QgdG9wb193YWxrX2luZm8geworCXVpbnQzMl90IG1pbl9nZW5lcmF0aW9uOworCXN0cnVjdCBwcmlvX3F1ZXVlIGV4cGxvcmVfcXVldWU7CisJc3RydWN0IHByaW9fcXVldWUgaW5kZWdyZWVfcXVldWU7CisJc3RydWN0IHByaW9fcXVldWUgdG9wb19xdWV1ZTsKKwlzdHJ1Y3QgaW5kZWdyZWVfc2xhYiBpbmRlZ3JlZTsKKwlzdHJ1Y3QgYXV0aG9yX2RhdGVfc2xhYiBhdXRob3JfZGF0ZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZXN0X2ZsYWdfYW5kX2luc2VydChzdHJ1Y3QgcHJpb19xdWV1ZSAqcSwgc3RydWN0IGNvbW1pdCAqYywgaW50IGZsYWcpCit7CisJaWYgKGMtPm9iamVjdC5mbGFncyAmIGZsYWcpCisJCXJldHVybjsKKworCWMtPm9iamVjdC5mbGFncyB8PSBmbGFnOworCXByaW9fcXVldWVfcHV0KHEsIGMpOworfQorCitzdGF0aWMgdm9pZCBleHBsb3JlX3dhbGtfc3RlcChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IHRvcG9fd2Fsa19pbmZvICppbmZvID0gcmV2cy0+dG9wb193YWxrX2luZm87CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCBjb21taXQgKmMgPSBwcmlvX3F1ZXVlX2dldCgmaW5mby0+ZXhwbG9yZV9xdWV1ZSk7CisKKwlpZiAoIWMpCisJCXJldHVybjsKKworCWlmIChwYXJzZV9jb21taXRfZ2VudGx5KGMsIDEpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKHJldnMtPnNvcnRfb3JkZXIgPT0gUkVWX1NPUlRfQllfQVVUSE9SX0RBVEUpCisJCXJlY29yZF9hdXRob3JfZGF0ZSgmaW5mby0+YXV0aG9yX2RhdGUsIGMpOworCisJaWYgKHJldnMtPm1heF9hZ2UgIT0gLTEgJiYgKGMtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkKKwkJYy0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisKKwlpZiAocHJvY2Vzc19wYXJlbnRzKHJldnMsIGMsIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKGMtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGMpOworCisJZm9yIChwID0gYy0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpCisJCXRlc3RfZmxhZ19hbmRfaW5zZXJ0KCZpbmZvLT5leHBsb3JlX3F1ZXVlLCBwLT5pdGVtLCBUT1BPX1dBTEtfRVhQTE9SRUQpOworfQorCitzdGF0aWMgdm9pZCBleHBsb3JlX3RvX2RlcHRoKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgdWludDMyX3QgZ2VuX2N1dG9mZikKK3sKKwlzdHJ1Y3QgdG9wb193YWxrX2luZm8gKmluZm8gPSByZXZzLT50b3BvX3dhbGtfaW5mbzsKKwlzdHJ1Y3QgY29tbWl0ICpjOworCXdoaWxlICgoYyA9IHByaW9fcXVldWVfcGVlaygmaW5mby0+ZXhwbG9yZV9xdWV1ZSkpICYmCisJICAgICAgIGMtPmdlbmVyYXRpb24gPj0gZ2VuX2N1dG9mZikKKwkJZXhwbG9yZV93YWxrX3N0ZXAocmV2cyk7Cit9CisKK3N0YXRpYyB2b2lkIGluZGVncmVlX3dhbGtfc3RlcChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCB0b3BvX3dhbGtfaW5mbyAqaW5mbyA9IHJldnMtPnRvcG9fd2Fsa19pbmZvOworCXN0cnVjdCBjb21taXQgKmMgPSBwcmlvX3F1ZXVlX2dldCgmaW5mby0+aW5kZWdyZWVfcXVldWUpOworCisJaWYgKCFjKQorCQlyZXR1cm47CisKKwlpZiAocGFyc2VfY29tbWl0X2dlbnRseShjLCAxKSA8IDApCisJCXJldHVybjsKKworCWV4cGxvcmVfdG9fZGVwdGgocmV2cywgYy0+Z2VuZXJhdGlvbik7CisKKwlmb3IgKHAgPSBjLT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwLT5pdGVtOworCQlpbnQgKnBpID0gaW5kZWdyZWVfc2xhYl9hdCgmaW5mby0+aW5kZWdyZWUsIHBhcmVudCk7CisKKwkJaWYgKCpwaSkKKwkJCSgqcGkpKys7CisJCWVsc2UKKwkJCSpwaSA9IDI7CisKKwkJdGVzdF9mbGFnX2FuZF9pbnNlcnQoJmluZm8tPmluZGVncmVlX3F1ZXVlLCBwYXJlbnQsIFRPUE9fV0FMS19JTkRFR1JFRSk7CisKKwkJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5KQorCQkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgY29tcHV0ZV9pbmRlZ3JlZXNfdG9fZGVwdGgoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSAgICAgICB1aW50MzJfdCBnZW5fY3V0b2ZmKQoreworCXN0cnVjdCB0b3BvX3dhbGtfaW5mbyAqaW5mbyA9IHJldnMtPnRvcG9fd2Fsa19pbmZvOworCXN0cnVjdCBjb21taXQgKmM7CisJd2hpbGUgKChjID0gcHJpb19xdWV1ZV9wZWVrKCZpbmZvLT5pbmRlZ3JlZV9xdWV1ZSkpICYmCisJICAgICAgIGMtPmdlbmVyYXRpb24gPj0gZ2VuX2N1dG9mZikKKwkJaW5kZWdyZWVfd2Fsa19zdGVwKHJldnMpOworfQorCitzdGF0aWMgdm9pZCByZXNldF90b3BvX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCB0b3BvX3dhbGtfaW5mbyAqaW5mbyA9IHJldnMtPnRvcG9fd2Fsa19pbmZvOworCisJY2xlYXJfcHJpb19xdWV1ZSgmaW5mby0+ZXhwbG9yZV9xdWV1ZSk7CisJY2xlYXJfcHJpb19xdWV1ZSgmaW5mby0+aW5kZWdyZWVfcXVldWUpOworCWNsZWFyX3ByaW9fcXVldWUoJmluZm8tPnRvcG9fcXVldWUpOworCWNsZWFyX2luZGVncmVlX3NsYWIoJmluZm8tPmluZGVncmVlKTsKKwljbGVhcl9hdXRob3JfZGF0ZV9zbGFiKCZpbmZvLT5hdXRob3JfZGF0ZSk7CisKKwlGUkVFX0FORF9OVUxMKHJldnMtPnRvcG9fd2Fsa19pbmZvKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF90b3BvX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCB0b3BvX3dhbGtfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisJaWYgKHJldnMtPnRvcG9fd2Fsa19pbmZvKQorCQlyZXNldF90b3BvX3dhbGsocmV2cyk7CisKKwlyZXZzLT50b3BvX3dhbGtfaW5mbyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0b3BvX3dhbGtfaW5mbykpOworCWluZm8gPSByZXZzLT50b3BvX3dhbGtfaW5mbzsKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCB0b3BvX3dhbGtfaW5mbykpOworCisJaW5pdF9pbmRlZ3JlZV9zbGFiKCZpbmZvLT5pbmRlZ3JlZSk7CisJbWVtc2V0KCZpbmZvLT5leHBsb3JlX3F1ZXVlLCAwLCBzaXplb2YoaW5mby0+ZXhwbG9yZV9xdWV1ZSkpOworCW1lbXNldCgmaW5mby0+aW5kZWdyZWVfcXVldWUsIDAsIHNpemVvZihpbmZvLT5pbmRlZ3JlZV9xdWV1ZSkpOworCW1lbXNldCgmaW5mby0+dG9wb19xdWV1ZSwgMCwgc2l6ZW9mKGluZm8tPnRvcG9fcXVldWUpKTsKKworCXN3aXRjaCAocmV2cy0+c29ydF9vcmRlcikgeworCWRlZmF1bHQ6IC8qIFJFVl9TT1JUX0lOX0dSQVBIX09SREVSICovCisJCWluZm8tPnRvcG9fcXVldWUuY29tcGFyZSA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgUkVWX1NPUlRfQllfQ09NTUlUX0RBVEU6CisJCWluZm8tPnRvcG9fcXVldWUuY29tcGFyZSA9IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZTsKKwkJYnJlYWs7CisJY2FzZSBSRVZfU09SVF9CWV9BVVRIT1JfREFURToKKwkJaW5pdF9hdXRob3JfZGF0ZV9zbGFiKCZpbmZvLT5hdXRob3JfZGF0ZSk7CisJCWluZm8tPnRvcG9fcXVldWUuY29tcGFyZSA9IGNvbXBhcmVfY29tbWl0c19ieV9hdXRob3JfZGF0ZTsKKwkJaW5mby0+dG9wb19xdWV1ZS5jYl9kYXRhID0gJmluZm8tPmF1dGhvcl9kYXRlOworCQlicmVhazsKKwl9CisKKwlpbmZvLT5leHBsb3JlX3F1ZXVlLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfZ2VuX3RoZW5fY29tbWl0X2RhdGU7CisJaW5mby0+aW5kZWdyZWVfcXVldWUuY29tcGFyZSA9IGNvbXBhcmVfY29tbWl0c19ieV9nZW5fdGhlbl9jb21taXRfZGF0ZTsKKworCWluZm8tPm1pbl9nZW5lcmF0aW9uID0gR0VORVJBVElPTl9OVU1CRVJfSU5GSU5JVFk7CisJZm9yIChsaXN0ID0gcmV2cy0+Y29tbWl0czsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IGxpc3QtPml0ZW07CisKKwkJaWYgKHBhcnNlX2NvbW1pdF9nZW50bHkoYywgMSkpCisJCQljb250aW51ZTsKKworCQl0ZXN0X2ZsYWdfYW5kX2luc2VydCgmaW5mby0+ZXhwbG9yZV9xdWV1ZSwgYywgVE9QT19XQUxLX0VYUExPUkVEKTsKKwkJdGVzdF9mbGFnX2FuZF9pbnNlcnQoJmluZm8tPmluZGVncmVlX3F1ZXVlLCBjLCBUT1BPX1dBTEtfSU5ERUdSRUUpOworCisJCWlmIChjLT5nZW5lcmF0aW9uIDwgaW5mby0+bWluX2dlbmVyYXRpb24pCisJCQlpbmZvLT5taW5fZ2VuZXJhdGlvbiA9IGMtPmdlbmVyYXRpb247CisKKwkJKihpbmRlZ3JlZV9zbGFiX2F0KCZpbmZvLT5pbmRlZ3JlZSwgYykpID0gMTsKKworCQlpZiAocmV2cy0+c29ydF9vcmRlciA9PSBSRVZfU09SVF9CWV9BVVRIT1JfREFURSkKKwkJCXJlY29yZF9hdXRob3JfZGF0ZSgmaW5mby0+YXV0aG9yX2RhdGUsIGMpOworCX0KKwljb21wdXRlX2luZGVncmVlc190b19kZXB0aChyZXZzLCBpbmZvLT5taW5fZ2VuZXJhdGlvbik7CisKKwlmb3IgKGxpc3QgPSByZXZzLT5jb21taXRzOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gbGlzdC0+aXRlbTsKKworCQlpZiAoKihpbmRlZ3JlZV9zbGFiX2F0KCZpbmZvLT5pbmRlZ3JlZSwgYykpID09IDEpCisJCQlwcmlvX3F1ZXVlX3B1dCgmaW5mby0+dG9wb19xdWV1ZSwgYyk7CisJfQorCisJLyoKKwkgKiBUaGlzIGlzIHVuZm9ydHVuYXRlOyB0aGUgaW5pdGlhbCB0aXBzIG5lZWQgdG8gYmUgc2hvd24KKwkgKiBpbiB0aGUgb3JkZXIgZ2l2ZW4gZnJvbSB0aGUgcmV2aXNpb24gdHJhdmVyc2FsIG1hY2hpbmVyeS4KKwkgKi8KKwlpZiAocmV2cy0+c29ydF9vcmRlciA9PSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUikKKwkJcHJpb19xdWV1ZV9yZXZlcnNlKCZpbmZvLT50b3BvX3F1ZXVlKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKm5leHRfdG9wb19jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXQgKmM7CisJc3RydWN0IHRvcG9fd2Fsa19pbmZvICppbmZvID0gcmV2cy0+dG9wb193YWxrX2luZm87CisKKwkvKiBwb3AgbmV4dCBvZmYgb2YgdG9wb19xdWV1ZSAqLworCWMgPSBwcmlvX3F1ZXVlX2dldCgmaW5mby0+dG9wb19xdWV1ZSk7CisKKwlpZiAoYykKKwkJKihpbmRlZ3JlZV9zbGFiX2F0KCZpbmZvLT5pbmRlZ3JlZSwgYykpID0gMDsKKworCXJldHVybiBjOworfQorCitzdGF0aWMgdm9pZCBleHBhbmRfdG9wb193YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlzdHJ1Y3QgdG9wb193YWxrX2luZm8gKmluZm8gPSByZXZzLT50b3BvX3dhbGtfaW5mbzsKKwlpZiAocHJvY2Vzc19wYXJlbnRzKHJldnMsIGNvbW1pdCwgTlVMTCwgTlVMTCkgPCAwKSB7CisJCWlmICghcmV2cy0+aWdub3JlX21pc3NpbmdfbGlua3MpCisJCQlkaWUoIkZhaWxlZCB0byB0cmF2ZXJzZSBwYXJlbnRzIG9mIGNvbW1pdCAlcyIsCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJfQorCisJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwLT5pdGVtOworCQlpbnQgKnBpOworCisJCWlmIChwYXJlbnQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKworCQlpZiAocGFyc2VfY29tbWl0X2dlbnRseShwYXJlbnQsIDEpIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXJlbnQtPmdlbmVyYXRpb24gPCBpbmZvLT5taW5fZ2VuZXJhdGlvbikgeworCQkJaW5mby0+bWluX2dlbmVyYXRpb24gPSBwYXJlbnQtPmdlbmVyYXRpb247CisJCQljb21wdXRlX2luZGVncmVlc190b19kZXB0aChyZXZzLCBpbmZvLT5taW5fZ2VuZXJhdGlvbik7CisJCX0KKworCQlwaSA9IGluZGVncmVlX3NsYWJfYXQoJmluZm8tPmluZGVncmVlLCBwYXJlbnQpOworCisJCSgqcGkpLS07CisJCWlmICgqcGkgPT0gMSkKKwkJCXByaW9fcXVldWVfcHV0KCZpbmZvLT50b3BvX3F1ZXVlLCBwYXJlbnQpOworCisJCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJCXJldHVybjsKKwl9Cit9CisKK2ludCBwcmVwYXJlX3JldmlzaW9uX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCWludCBpOworCXN0cnVjdCBvYmplY3RfYXJyYXkgb2xkX3BlbmRpbmc7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCA9ICZyZXZzLT5jb21taXRzOworCisJbWVtY3B5KCZvbGRfcGVuZGluZywgJnJldnMtPnBlbmRpbmcsIHNpemVvZihvbGRfcGVuZGluZykpOworCXJldnMtPnBlbmRpbmcubnIgPSAwOworCXJldnMtPnBlbmRpbmcuYWxsb2MgPSAwOworCXJldnMtPnBlbmRpbmcub2JqZWN0cyA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IG9sZF9wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZSA9IG9sZF9wZW5kaW5nLm9iamVjdHMgKyBpOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBoYW5kbGVfY29tbWl0KHJldnMsIGUpOworCQlpZiAoY29tbWl0KSB7CisJCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFNFRU4pKSB7CisJCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCQluZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGNvbW1pdCwgbmV4dCk7CisJCQl9CisJCX0KKwl9CisJb2JqZWN0X2FycmF5X2NsZWFyKCZvbGRfcGVuZGluZyk7CisKKwkvKiBTaWduYWwgd2hldGhlciB3ZSBuZWVkIHBlci1wYXJlbnQgdHJlZXNhbWUgZGVjb3JhdGlvbiAqLworCWlmIChyZXZzLT5zaW1wbGlmeV9tZXJnZXMgfHwKKwkgICAgKHJldnMtPmxpbWl0ZWQgJiYgbGltaXRpbmdfY2FuX2luY3JlYXNlX3RyZWVzYW1lKHJldnMpKSkKKwkJcmV2cy0+dHJlZXNhbWUubmFtZSA9ICJ0cmVlc2FtZSI7CisKKwlpZiAocmV2cy0+ZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzKSB7CisJCWZvcl9lYWNoX3BhY2tlZF9vYmplY3QobWFya191bmludGVyZXN0aW5nLCByZXZzLAorCQkJCSAgICAgICBGT1JfRUFDSF9PQkpFQ1RfUFJPTUlTT1JfT05MWSk7CisJfQorCisJaWYgKHJldnMtPm5vX3dhbGsgIT0gUkVWSVNJT05fV0FMS19OT19XQUxLX1VOU09SVEVEKQorCQljb21taXRfbGlzdF9zb3J0X2J5X2RhdGUoJnJldnMtPmNvbW1pdHMpOworCWlmIChyZXZzLT5ub193YWxrKQorCQlyZXR1cm4gMDsKKwlpZiAocmV2cy0+bGltaXRlZCkgeworCQlpZiAobGltaXRfbGlzdChyZXZzKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChyZXZzLT50b3BvX29yZGVyKQorCQkJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmcmV2cy0+Y29tbWl0cywgcmV2cy0+c29ydF9vcmRlcik7CisJfSBlbHNlIGlmIChyZXZzLT50b3BvX29yZGVyKQorCQlpbml0X3RvcG9fd2FsayhyZXZzKTsKKwlpZiAocmV2cy0+bGluZV9sZXZlbF90cmF2ZXJzZSkKKwkJbGluZV9sb2dfZmlsdGVyKHJldnMpOworCWlmIChyZXZzLT5zaW1wbGlmeV9tZXJnZXMpCisJCXNpbXBsaWZ5X21lcmdlcyhyZXZzKTsKKwlpZiAocmV2cy0+Y2hpbGRyZW4ubmFtZSkKKwkJc2V0X2NoaWxkcmVuKHJldnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSByZXdyaXRlX3Jlc3VsdCByZXdyaXRlX29uZV8xKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJIHN0cnVjdCBjb21taXQgKipwcCwKKwkJCQkJIHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSkKK3sKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBjb21taXQgKnAgPSAqcHA7CisJCWlmICghcmV2cy0+bGltaXRlZCkKKwkJCWlmIChwcm9jZXNzX3BhcmVudHMocmV2cywgcCwgTlVMTCwgcXVldWUpIDwgMCkKKwkJCQlyZXR1cm4gcmV3cml0ZV9vbmVfZXJyb3I7CisJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJcmV0dXJuIHJld3JpdGVfb25lX29rOworCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCWlmICghcC0+cGFyZW50cykKKwkJCXJldHVybiByZXdyaXRlX29uZV9ub3BhcmVudHM7CisJCWlmICgocCA9IG9uZV9yZWxldmFudF9wYXJlbnQocmV2cywgcC0+cGFyZW50cykpID09IE5VTEwpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCSpwcCA9IHA7CisJfQorfQorCitzdGF0aWMgdm9pZCBtZXJnZV9xdWV1ZV9pbnRvX2xpc3Qoc3RydWN0IHByaW9fcXVldWUgKnEsIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpCit7CisJd2hpbGUgKHEtPm5yKSB7CisJCXN0cnVjdCBjb21taXQgKml0ZW0gPSBwcmlvX3F1ZXVlX3BlZWsocSk7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcCA9ICpsaXN0OworCisJCWlmIChwICYmIHAtPml0ZW0tPmRhdGUgPj0gaXRlbS0+ZGF0ZSkKKwkJCWxpc3QgPSAmcC0+bmV4dDsKKwkJZWxzZSB7CisJCQlwID0gY29tbWl0X2xpc3RfaW5zZXJ0KGl0ZW0sIGxpc3QpOworCQkJbGlzdCA9ICZwLT5uZXh0OyAvKiBza2lwIG5ld2x5IGFkZGVkIGl0ZW0gKi8KKwkJCXByaW9fcXVldWVfZ2V0KHEpOyAvKiBwb3AgaXRlbSAqLworCQl9CisJfQorfQorCitzdGF0aWMgZW51bSByZXdyaXRlX3Jlc3VsdCByZXdyaXRlX29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKipwcCkKK3sKKwlzdHJ1Y3QgcHJpb19xdWV1ZSBxdWV1ZSA9IHsgY29tcGFyZV9jb21taXRzX2J5X2NvbW1pdF9kYXRlIH07CisJZW51bSByZXdyaXRlX3Jlc3VsdCByZXQgPSByZXdyaXRlX29uZV8xKHJldnMsIHBwLCAmcXVldWUpOworCW1lcmdlX3F1ZXVlX2ludG9fbGlzdCgmcXVldWUsICZyZXZzLT5jb21taXRzKTsKKwljbGVhcl9wcmlvX3F1ZXVlKCZxdWV1ZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJld3JpdGVfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwlyZXdyaXRlX3BhcmVudF9mbl90IHJld3JpdGVfcGFyZW50KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwID0gJmNvbW1pdC0+cGFyZW50czsKKwl3aGlsZSAoKnBwKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gKnBwOworCQlzd2l0Y2ggKHJld3JpdGVfcGFyZW50KHJldnMsICZwYXJlbnQtPml0ZW0pKSB7CisJCWNhc2UgcmV3cml0ZV9vbmVfb2s6CisJCQlicmVhazsKKwkJY2FzZSByZXdyaXRlX29uZV9ub3BhcmVudHM6CisJCQkqcHAgPSBwYXJlbnQtPm5leHQ7CisJCQljb250aW51ZTsKKwkJY2FzZSByZXdyaXRlX29uZV9lcnJvcjoKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcCA9ICZwYXJlbnQtPm5leHQ7CisJfQorCXJlbW92ZV9kdXBsaWNhdGVfcGFyZW50cyhyZXZzLCBjb21taXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbW1pdF9yZXdyaXRlX3BlcnNvbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKndoYXQsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFpbG1hcCkKK3sKKwljaGFyICpwZXJzb24sICplbmRwOworCXNpemVfdCBsZW4sIG5hbWVsZW4sIG1haWxsZW47CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICptYWlsOworCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKworCXBlcnNvbiA9IHN0cnN0cihidWYtPmJ1Ziwgd2hhdCk7CisJaWYgKCFwZXJzb24pCisJCXJldHVybiAwOworCisJcGVyc29uICs9IHN0cmxlbih3aGF0KTsKKwllbmRwID0gc3RyY2hyKHBlcnNvbiwgJ1xuJyk7CisJaWYgKCFlbmRwKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGVuZHAgLSBwZXJzb247CisKKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIHBlcnNvbiwgbGVuKSkKKwkJcmV0dXJuIDA7CisKKwltYWlsID0gaWRlbnQubWFpbF9iZWdpbjsKKwltYWlsbGVuID0gaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luOworCW5hbWUgPSBpZGVudC5uYW1lX2JlZ2luOworCW5hbWVsZW4gPSBpZGVudC5uYW1lX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW47CisKKwlpZiAobWFwX3VzZXIobWFpbG1hcCwgJm1haWwsICZtYWlsbGVuLCAmbmFtZSwgJm5hbWVsZW4pKSB7CisJCXN0cnVjdCBzdHJidWYgbmFtZW1haWwgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkZigmbmFtZW1haWwsICIlLipzIDwlLipzPiIsCisJCQkgICAgKGludCluYW1lbGVuLCBuYW1lLCAoaW50KW1haWxsZW4sIG1haWwpOworCisJCXN0cmJ1Zl9zcGxpY2UoYnVmLCBpZGVudC5uYW1lX2JlZ2luIC0gYnVmLT5idWYsCisJCQkgICAgICBpZGVudC5tYWlsX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW4gKyAxLAorCQkJICAgICAgbmFtZW1haWwuYnVmLCBuYW1lbWFpbC5sZW4pOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lbWFpbCk7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X21hdGNoKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHJldl9pbmZvICpvcHQpCit7CisJaW50IHJldHZhbDsKKwljb25zdCBjaGFyICplbmNvZGluZzsKKwljb25zdCBjaGFyICptZXNzYWdlOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIW9wdC0+Z3JlcF9maWx0ZXIucGF0dGVybl9saXN0ICYmICFvcHQtPmdyZXBfZmlsdGVyLmhlYWRlcl9saXN0KQorCQlyZXR1cm4gMTsKKworCS8qIFByZXBlbmQgImZha2UiIGhlYWRlcnMgYXMgbmVlZGVkICovCisJaWYgKG9wdC0+Z3JlcF9maWx0ZXIudXNlX3JlZmxvZ19maWx0ZXIpIHsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAicmVmbG9nICIpOworCQlnZXRfcmVmbG9nX21lc3NhZ2UoJmJ1Ziwgb3B0LT5yZWZsb2dfaW5mbyk7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwl9CisKKwkvKgorCSAqIFdlIGdyZXAgaW4gdGhlIHVzZXIncyBvdXRwdXQgZW5jb2RpbmcsIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQKKwkgKiBpcyB0aGUgZW5jb2RpbmcgdGhleSBhcmUgbW9zdCBsaWtlbHkgdG8gd3JpdGUgdGhlaXIgZ3JlcCBwYXR0ZXJuCisJICogZm9yLiBJbiBhZGRpdGlvbiwgaXQgbWVhbnMgd2Ugd2lsbCBtYXRjaCB0aGUgIm5vdGVzIiBlbmNvZGluZyBiZWxvdywKKwkgKiBzbyB3ZSB3aWxsIG5vdCBlbmQgdXAgd2l0aCBhIGJ1ZmZlciB0aGF0IGhhcyB0d28gZGlmZmVyZW50IGVuY29kaW5ncworCSAqIGluIGl0LgorCSAqLworCWVuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwltZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpOworCisJLyogQ29weSB0aGUgY29tbWl0IHRvIHRlbXBvcmFyeSBpZiB3ZSBhcmUgdXNpbmcgImZha2UiIGhlYWRlcnMgKi8KKwlpZiAoYnVmLmxlbikKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBtZXNzYWdlKTsKKworCWlmIChvcHQtPmdyZXBfZmlsdGVyLmhlYWRlcl9saXN0ICYmIG9wdC0+bWFpbG1hcCkgeworCQlpZiAoIWJ1Zi5sZW4pCisJCQlzdHJidWZfYWRkc3RyKCZidWYsIG1lc3NhZ2UpOworCisJCWNvbW1pdF9yZXdyaXRlX3BlcnNvbigmYnVmLCAiXG5hdXRob3IgIiwgb3B0LT5tYWlsbWFwKTsKKwkJY29tbWl0X3Jld3JpdGVfcGVyc29uKCZidWYsICJcbmNvbW1pdHRlciAiLCBvcHQtPm1haWxtYXApOworCX0KKworCS8qIEFwcGVuZCAiZmFrZSIgbWVzc2FnZSBwYXJ0cyBhcyBuZWVkZWQgKi8KKwlpZiAob3B0LT5zaG93X25vdGVzKSB7CisJCWlmICghYnVmLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbWVzc2FnZSk7CisJCWZvcm1hdF9kaXNwbGF5X25vdGVzKCZjb21taXQtPm9iamVjdC5vaWQsICZidWYsIGVuY29kaW5nLCAxKTsKKwl9CisKKwkvKgorCSAqIEZpbmQgZWl0aGVyIGluIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSwgb3IgaW4gdGhlIHRlbXBvcmFyeS4KKwkgKiBOb3RlIHRoYXQgd2UgY2FzdCBhd2F5IHRoZSBjb25zdG5lc3Mgb2YgIm1lc3NhZ2UiIGhlcmUuIEl0IGlzCisJICogY29uc3QgYmVjYXVzZSBpdCBtYXkgY29tZSBmcm9tIHRoZSBjYWNoZWQgY29tbWl0IGJ1ZmZlci4gVGhhdCdzIE9LLAorCSAqIGJlY2F1c2Ugd2Uga25vdyB0aGF0IGl0IGlzIG1vZGlmaWFibGUgaGVhcCBtZW1vcnksIGFuZCB0aGF0IHdoaWxlCisJICogZ3JlcF9idWZmZXIgbWF5IG1vZGlmeSBpdCBmb3Igc3BlZWQsIGl0IHdpbGwgcmVzdG9yZSBhbnkKKwkgKiBjaGFuZ2VzIGJlZm9yZSByZXR1cm5pbmcuCisJICovCisJaWYgKGJ1Zi5sZW4pCisJCXJldHZhbCA9IGdyZXBfYnVmZmVyKCZvcHQtPmdyZXBfZmlsdGVyLCBidWYuYnVmLCBidWYubGVuKTsKKwllbHNlCisJCXJldHZhbCA9IGdyZXBfYnVmZmVyKCZvcHQtPmdyZXBfZmlsdGVyLAorCQkJCSAgICAgKGNoYXIgKiltZXNzYWdlLCBzdHJsZW4obWVzc2FnZSkpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtZXNzYWdlKTsKKwlyZXR1cm4gb3B0LT5pbnZlcnRfZ3JlcCA/ICFyZXR2YWwgOiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdhbnRfYW5jZXN0cnkoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXJldHVybiAocmV2cy0+cmV3cml0ZV9wYXJlbnRzIHx8IHJldnMtPmNoaWxkcmVuLm5hbWUpOworfQorCisvKgorICogUmV0dXJuIGEgdGltZXN0YW1wIHRvIGJlIHVzZWQgZm9yIC0tc2luY2UvLS11bnRpbCBjb21wYXJpc29ucyBmb3IgdGhpcworICogY29tbWl0LCBiYXNlZCBvbiB0aGUgcmV2aXNpb24gb3B0aW9ucy4KKyAqLworc3RhdGljIHRpbWVzdGFtcF90IGNvbXBhcmlzb25fZGF0ZShjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJICAgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXJldHVybiByZXZzLT5yZWZsb2dfaW5mbyA/CisJCWdldF9yZWZsb2dfdGltZXN0YW1wKHJldnMtPnJlZmxvZ19pbmZvKSA6CisJCWNvbW1pdC0+ZGF0ZTsKK30KKworZW51bSBjb21taXRfYWN0aW9uIGdldF9jb21taXRfYWN0aW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNIT1dOKQorCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwlpZiAocmV2cy0+dW5wYWNrZWQgJiYgaGFzX29iamVjdF9wYWNrKCZjb21taXQtPm9iamVjdC5vaWQpKQorCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwlpZiAocmV2cy0+bWluX2FnZSAhPSAtMSAmJgorCSAgICBjb21wYXJpc29uX2RhdGUocmV2cywgY29tbWl0KSA+IHJldnMtPm1pbl9hZ2UpCisJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwlpZiAocmV2cy0+bWluX3BhcmVudHMgfHwgKHJldnMtPm1heF9wYXJlbnRzID49IDApKSB7CisJCWludCBuID0gY29tbWl0X2xpc3RfY291bnQoY29tbWl0LT5wYXJlbnRzKTsKKwkJaWYgKChuIDwgcmV2cy0+bWluX3BhcmVudHMpIHx8CisJCSAgICAoKHJldnMtPm1heF9wYXJlbnRzID49IDApICYmIChuID4gcmV2cy0+bWF4X3BhcmVudHMpKSkKKwkJCXJldHVybiBjb21taXRfaWdub3JlOworCX0KKwlpZiAoIWNvbW1pdF9tYXRjaChjb21taXQsIHJldnMpKQorCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwlpZiAocmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UpIHsKKwkJLyogQ29tbWl0IHdpdGhvdXQgY2hhbmdlcz8gKi8KKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpIHsKKwkJCWludCBuOworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQkJLyogZHJvcCBtZXJnZXMgdW5sZXNzIHdlIHdhbnQgcGFyZW50aG9vZCAqLworCQkJaWYgKCF3YW50X2FuY2VzdHJ5KHJldnMpKQorCQkJCXJldHVybiBjb21taXRfaWdub3JlOworCQkJLyoKKwkJCSAqIElmIHdlIHdhbnQgYW5jZXN0cnksIHRoZW4gbmVlZCB0byBrZWVwIGFueSBtZXJnZXMKKwkJCSAqIGJldHdlZW4gcmVsZXZhbnQgY29tbWl0cyB0byB0aWUgdG9nZXRoZXIgdG9wb2xvZ3kuCisJCQkgKiBGb3IgY29uc2lzdGVuY3kgd2l0aCBUUkVFU0FNRSBhbmQgc2ltcGxpZmljYXRpb24KKwkJCSAqIHVzZSAicmVsZXZhbnQiIGhlcmUgcmF0aGVyIHRoYW4ganVzdCBJTlRFUkVTVElORywKKwkJCSAqIHRvIHRyZWF0IGJvdHRvbSBjb21taXQocykgYXMgcGFydCBvZiB0aGUgdG9wb2xvZ3kuCisJCQkgKi8KKwkJCWZvciAobiA9IDAsIHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJCWlmIChyZWxldmFudF9jb21taXQocC0+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+Y2hlcnJ5X21hcmspCisJCXJldHVybiAiKyI7CisJcmV0dXJuICIiOworfQorCit2b2lkIHB1dF9yZXZpc2lvbl9tYXJrKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNvbnN0IGNoYXIgKm1hcmsgPSBnZXRfcmV2aXNpb25fbWFyayhyZXZzLCBjb21taXQpOworCWlmICghc3RybGVuKG1hcmspKQorCQlyZXR1cm47CisJZnB1dHMobWFyaywgc3Rkb3V0KTsKKwlwdXRjaGFyKCcgJyk7Cit9CmRpZmYgLS1naXQgYS9yZXZpc2lvbi5oIGIvcmV2aXNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzVmMDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcmV2aXNpb24uaApAQCAtMCwwICsxLDQzOSBAQAorI2lmbmRlZiBSRVZJU0lPTl9ICisjZGVmaW5lIFJFVklTSU9OX0gKKworI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJwcmV0dHkuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWItZGVjbC5oIgorCisvKioKKyAqIFRoZSByZXZpc2lvbiB3YWxraW5nIEFQSSBvZmZlcnMgZnVuY3Rpb25zIHRvIGJ1aWxkIGEgbGlzdCBvZiByZXZpc2lvbnMKKyAqIGFuZCB0aGVuIGl0ZXJhdGUgb3ZlciB0aGF0IGxpc3QuCisgKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSB3YWxraW5nIEFQSSBoYXMgYSBnaXZlbiBjYWxsaW5nIHNlcXVlbmNlOiBmaXJzdCB5b3UgbmVlZCB0byBpbml0aWFsaXplCisgKiBhIHJldl9pbmZvIHN0cnVjdHVyZSwgdGhlbiBhZGQgcmV2aXNpb25zIHRvIGNvbnRyb2wgd2hhdCBraW5kIG9mIHJldmlzaW9uCisgKiBsaXN0IGRvIHlvdSB3YW50IHRvIGdldCwgZmluYWxseSB5b3UgY2FuIGl0ZXJhdGUgb3ZlciB0aGUgcmV2aXNpb24gbGlzdC4KKyAqCisgKi8KKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgU0VFTgkJKDF1PDwwKQorI2RlZmluZSBVTklOVEVSRVNUSU5HICAgKDF1PDwxKQorI2RlZmluZSBUUkVFU0FNRQkoMXU8PDIpCisjZGVmaW5lIFNIT1dOCQkoMXU8PDMpCisjZGVmaW5lIFRNUF9NQVJLCSgxdTw8NCkgLyogZm9yIGlzb2xhdGVkIGNhc2VzOyBjbGVhbiBhZnRlciB1c2UgKi8KKyNkZWZpbmUgQk9VTkRBUlkJKDF1PDw1KQorI2RlZmluZSBDSElMRF9TSE9XTgkoMXU8PDYpCisjZGVmaW5lIEFEREVECQkoMXU8PDcpCS8qIFBhcmVudHMgYWxyZWFkeSBwYXJzZWQgYW5kIGFkZGVkPyAqLworI2RlZmluZSBTWU1NRVRSSUNfTEVGVAkoMXU8PDgpCisjZGVmaW5lIFBBVENIU0FNRQkoMXU8PDkpCisjZGVmaW5lIEJPVFRPTQkJKDF1PDwxMCkKKy8qCisgKiBJbmRpY2F0ZXMgb2JqZWN0IHdhcyByZWFjaGVkIGJ5IHRyYXZlcnNhbC4gaS5lLiBub3QgZ2l2ZW4gYnkgdXNlciBvbgorICogY29tbWFuZC1saW5lIG9yIHN0ZGluLgorICogTkVFRFNXT1JLOiBOT1RfVVNFUl9HSVZFTiBkb2Vzbid0IGFwcGx5IHRvIGNvbW1pdHMgYmVjYXVzZSB3ZSBvbmx5IHN1cHBvcnQKKyAqIGZpbHRlcmluZyB0cmVlcyBhbmQgYmxvYnMsIGJ1dCBpdCBtYXkgYmUgdXNlZnVsIHRvIHN1cHBvcnQgZmlsdGVyaW5nIGNvbW1pdHMKKyAqIGluIHRoZSBmdXR1cmUuCisgKi8KKyNkZWZpbmUgTk9UX1VTRVJfR0lWRU4JKDF1PDwyNSkKKyNkZWZpbmUgVFJBQ0tfTElORUFSCSgxdTw8MjYpCisjZGVmaW5lIEFMTF9SRVZfRkxBR1MJKCgoMXU8PDExKS0xKSB8IE5PVF9VU0VSX0dJVkVOIHwgVFJBQ0tfTElORUFSKQorCisjZGVmaW5lIFRPUE9fV0FMS19FWFBMT1JFRAkoMXU8PDI3KQorI2RlZmluZSBUT1BPX1dBTEtfSU5ERUdSRUUJKDF1PDwyOCkKKworI2RlZmluZSBERUNPUkFURV9TSE9SVF9SRUZTCTEKKyNkZWZpbmUgREVDT1JBVEVfRlVMTF9SRUZTCTIKKworc3RydWN0IGxvZ19pbmZvOworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3QgcmV2X2luZm87CitzdHJ1Y3Qgc3RyaW5nX2xpc3Q7CitzdHJ1Y3Qgc2F2ZWRfcGFyZW50czsKK2RlZmluZV9zaGFyZWRfY29tbWl0X3NsYWIocmV2aXNpb25fc291cmNlcywgY2hhciAqKTsKKworc3RydWN0IHJldl9jbWRsaW5lX2luZm8geworCXVuc2lnbmVkIGludCBucjsKKwl1bnNpZ25lZCBpbnQgYWxsb2M7CisJc3RydWN0IHJldl9jbWRsaW5lX2VudHJ5IHsKKwkJc3RydWN0IG9iamVjdCAqaXRlbTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJZW51bSB7CisJCQlSRVZfQ01EX1JFRiwKKwkJCVJFVl9DTURfUEFSRU5UU19PTkxZLAorCQkJUkVWX0NNRF9MRUZULAorCQkJUkVWX0NNRF9SSUdIVCwKKwkJCVJFVl9DTURfTUVSR0VfQkFTRSwKKwkJCVJFVl9DTURfUkVWCisJCX0gd2hlbmNlOworCQl1bnNpZ25lZCBmbGFnczsKKwl9ICpyZXY7Cit9OworCisjZGVmaW5lIFJFVklTSU9OX1dBTEtfV0FMSyAwCisjZGVmaW5lIFJFVklTSU9OX1dBTEtfTk9fV0FMS19TT1JURUQgMQorI2RlZmluZSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfVU5TT1JURUQgMgorCitzdHJ1Y3Qgb2lkc2V0Oworc3RydWN0IHRvcG9fd2Fsa19pbmZvOworCitzdHJ1Y3QgcmV2X2luZm8geworCS8qIFN0YXJ0aW5nIGxpc3QgKi8KKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1pdHM7CisJc3RydWN0IG9iamVjdF9hcnJheSBwZW5kaW5nOworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCisJLyogUGFyZW50cyBvZiBzaG93biBjb21taXRzICovCisJc3RydWN0IG9iamVjdF9hcnJheSBib3VuZGFyeV9jb21taXRzOworCisJLyogVGhlIGVuZC1wb2ludHMgc3BlY2lmaWVkIGJ5IHRoZSBlbmQgdXNlciAqLworCXN0cnVjdCByZXZfY21kbGluZV9pbmZvIGNtZGxpbmU7CisKKwkvKiBleGNsdWRpbmcgZnJvbSAtLWJyYW5jaGVzLCAtLXJlZnMsIGV0Yy4gZXhwYW5zaW9uICovCisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZfZXhjbHVkZXM7CisKKwkvKiBCYXNpYyBpbmZvcm1hdGlvbiAqLworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwljb25zdCBjaGFyICpkZWY7CisJc3RydWN0IHBhdGhzcGVjIHBydW5lX2RhdGE7CisKKwkvKgorCSAqIFdoZXRoZXIgdGhlIGFyZ3VtZW50cyBwYXJzZWQgYnkgc2V0dXBfcmV2aXNpb25zKCkgaW5jbHVkZWQgYW55CisJICogImlucHV0IiByZXZpc2lvbnMgdGhhdCBtaWdodCBzdGlsbCBoYXZlIHlpZWxkZWQgYW4gZW1wdHkgcGVuZGluZworCSAqIGxpc3QgKGUuZy4sIHBhdHRlcm5zIGxpa2UgIi0tYWxsIiBvciAiLS1nbG9iIikuCisJICovCisJaW50IHJldl9pbnB1dF9naXZlbjsKKworCS8qCisJICogV2hldGhlciB3ZSByZWFkIGZyb20gc3RkaW4gZHVlIHRvIHRoZSAtLXN0ZGluIG9wdGlvbi4KKwkgKi8KKwlpbnQgcmVhZF9mcm9tX3N0ZGluOworCisJLyogdG9wby1zb3J0ICovCisJZW51bSByZXZfc29ydF9vcmRlciBzb3J0X29yZGVyOworCisJdW5zaWduZWQgaW50IGVhcmx5X291dHB1dDsKKworCXVuc2lnbmVkIGludAlpZ25vcmVfbWlzc2luZzoxLAorCQkJaWdub3JlX21pc3NpbmdfbGlua3M6MTsKKworCS8qIFRyYXZlcnNhbCBmbGFncyAqLworCXVuc2lnbmVkIGludAlkZW5zZToxLAorCQkJcHJ1bmU6MSwKKwkJCW5vX3dhbGs6MiwKKwkJCXJlbW92ZV9lbXB0eV90cmVlczoxLAorCQkJc2ltcGxpZnlfaGlzdG9yeToxLAorCQkJdG9wb19vcmRlcjoxLAorCQkJc2ltcGxpZnlfbWVyZ2VzOjEsCisJCQlzaW1wbGlmeV9ieV9kZWNvcmF0aW9uOjEsCisJCQlzaW5nbGVfd29ya3RyZWU6MSwKKwkJCXRhZ19vYmplY3RzOjEsCisJCQl0cmVlX29iamVjdHM6MSwKKwkJCWJsb2Jfb2JqZWN0czoxLAorCQkJdmVyaWZ5X29iamVjdHM6MSwKKwkJCWVkZ2VfaGludDoxLAorCQkJZWRnZV9oaW50X2FnZ3Jlc3NpdmU6MSwKKwkJCWxpbWl0ZWQ6MSwKKwkJCXVucGFja2VkOjEsCisJCQlib3VuZGFyeToyLAorCQkJY291bnQ6MSwKKwkJCWxlZnRfcmlnaHQ6MSwKKwkJCWxlZnRfb25seToxLAorCQkJcmlnaHRfb25seToxLAorCQkJcmV3cml0ZV9wYXJlbnRzOjEsCisJCQlwcmludF9wYXJlbnRzOjEsCisJCQlzaG93X2RlY29yYXRpb25zOjEsCisJCQlyZXZlcnNlOjEsCisJCQlyZXZlcnNlX291dHB1dF9zdGFnZToxLAorCQkJY2hlcnJ5X3BpY2s6MSwKKwkJCWNoZXJyeV9tYXJrOjEsCisJCQliaXNlY3Q6MSwKKwkJCWFuY2VzdHJ5X3BhdGg6MSwKKwkJCWZpcnN0X3BhcmVudF9vbmx5OjEsCisJCQlsaW5lX2xldmVsX3RyYXZlcnNlOjEsCisJCQl0cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlcjoxLAorCisJCQkvKgorCQkJICogQmxvYnMgYXJlIHNob3duIHdpdGhvdXQgcmVnYXJkIGZvciB0aGVpciBleGlzdGVuY2UuCisJCQkgKiBCdXQgbm90IHNvIGZvciB0cmVlczogdW5sZXNzIGV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0cworCQkJICogaXMgc2V0IGFuZCB0aGUgdHJlZSBpbiBxdWVzdGlvbiBpcyBhIHByb21pc29yIG9iamVjdDsKKwkJCSAqIE9SIGlnbm9yZV9taXNzaW5nX2xpbmtzIGlzIHNldCwgdGhlIHJldmlzaW9uIHdhbGtlcgorCQkJICogZGllcyB3aXRoIGEgImJhZCB0cmVlIG9iamVjdCBIQVNIIiBtZXNzYWdlIHdoZW4KKwkJCSAqIGVuY291bnRlcmluZyBhIG1pc3NpbmcgdHJlZS4gRm9yIGNhbGxlcnMgdGhhdCBjYW4KKwkJCSAqIGhhbmRsZSBtaXNzaW5nIHRyZWVzIGFuZCB3YW50IHRoZW0gdG8gYmUgZmlsdGVyYWJsZQorCQkJICogYW5kIHNob3dhYmxlLCBzZXQgdGhpcyB0byB0cnVlLiBUaGUgcmV2aXNpb24gd2Fsa2VyCisJCQkgKiB3aWxsIGZpbHRlciBhbmQgc2hvdyBzdWNoIGEgbWlzc2luZyB0cmVlIGFzIHVzdWFsLAorCQkJICogYnV0IHdpbGwgbm90IGF0dGVtcHQgdG8gcmVjdXJzZSBpbnRvIHRoaXMgdHJlZQorCQkJICogb2JqZWN0LgorCQkJICovCisJCQlkb19ub3RfZGllX29uX21pc3NpbmdfdHJlZToxLAorCisJCQkvKiBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgKi8KKwkJCWV4Y2x1ZGVfcHJvbWlzb3Jfb2JqZWN0czoxOworCisJLyogRGlmZiBmbGFncyAqLworCXVuc2lnbmVkIGludAlkaWZmOjEsCisJCQlmdWxsX2RpZmY6MSwKKwkJCXNob3dfcm9vdF9kaWZmOjEsCisJCQlub19jb21taXRfaWQ6MSwKKwkJCXZlcmJvc2VfaGVhZGVyOjEsCisJCQlpZ25vcmVfbWVyZ2VzOjEsCisJCQljb21iaW5lX21lcmdlczoxLAorCQkJY29tYmluZWRfYWxsX3BhdGhzOjEsCisJCQlkZW5zZV9jb21iaW5lZF9tZXJnZXM6MSwKKwkJCWFsd2F5c19zaG93X2hlYWRlcjoxOworCisJLyogRm9ybWF0IGluZm8gKi8KKwlpbnQJCXNob3dfbm90ZXM7CisJdW5zaWduZWQgaW50CXNob3duX29uZToxLAorCQkJc2hvd25fZGFzaGVzOjEsCisJCQlzaG93X21lcmdlOjEsCisJCQlzaG93X25vdGVzX2dpdmVuOjEsCisJCQlzaG93X3NpZ25hdHVyZToxLAorCQkJcHJldHR5X2dpdmVuOjEsCisJCQlhYmJyZXZfY29tbWl0OjEsCisJCQlhYmJyZXZfY29tbWl0X2dpdmVuOjEsCisJCQl6ZXJvX2NvbW1pdDoxLAorCQkJdXNlX3Rlcm1pbmF0b3I6MSwKKwkJCW1pc3NpbmdfbmV3bGluZToxLAorCQkJZGF0ZV9tb2RlX2V4cGxpY2l0OjEsCisJCQlwcmVzZXJ2ZV9zdWJqZWN0OjE7CisJdW5zaWduZWQgaW50CWRpc2FibGVfc3RkaW46MTsKKwkvKiAtLXNob3ctbGluZWFyLWJyZWFrICovCisJdW5zaWduZWQgaW50CXRyYWNrX2xpbmVhcjoxLAorCQkJdHJhY2tfZmlyc3RfdGltZToxLAorCQkJbGluZWFyOjE7CisKKwlzdHJ1Y3QgZGF0ZV9tb2RlIGRhdGVfbW9kZTsKKwlpbnQJCWV4cGFuZF90YWJzX2luX2xvZzsgLyogdW5zZXQgaWYgbmVnYXRpdmUgKi8KKwlpbnQJCWV4cGFuZF90YWJzX2luX2xvZ19kZWZhdWx0OworCisJdW5zaWduZWQgaW50CWFiYnJldjsKKwllbnVtIGNtaXRfZm10CWNvbW1pdF9mb3JtYXQ7CisJc3RydWN0IGxvZ19pbmZvICpsb2dpbmZvOworCWludAkJbnIsIHRvdGFsOworCWNvbnN0IGNoYXIJKm1pbWVfYm91bmRhcnk7CisJY29uc3QgY2hhcgkqcGF0Y2hfc3VmZml4OworCWludAkJbnVtYmVyZWRfZmlsZXM7CisJaW50CQlyZXJvbGxfY291bnQ7CisJY2hhcgkJKm1lc3NhZ2VfaWQ7CisJc3RydWN0IGlkZW50X3NwbGl0IGZyb21faWRlbnQ7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZfbWVzc2FnZV9pZHM7CisJaW50CQlhZGRfc2lnbm9mZjsKKwljb25zdCBjaGFyCSpleHRyYV9oZWFkZXJzOworCWNvbnN0IGNoYXIJKmxvZ19yZWVuY29kZTsKKwljb25zdCBjaGFyCSpzdWJqZWN0X3ByZWZpeDsKKwlpbnQJCW5vX2lubGluZTsKKwlpbnQJCXNob3dfbG9nX3NpemU7CisJc3RydWN0IHN0cmluZ19saXN0ICptYWlsbWFwOworCisJLyogRmlsdGVyIGJ5IGNvbW1pdCBsb2cgbWVzc2FnZSAqLworCXN0cnVjdCBncmVwX29wdAlncmVwX2ZpbHRlcjsKKwkvKiBOZWdhdGUgdGhlIG1hdGNoIG9mIGdyZXBfZmlsdGVyICovCisJaW50IGludmVydF9ncmVwOworCisJLyogRGlzcGxheSBoaXN0b3J5IGdyYXBoICovCisJc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGg7CisKKwkvKiBzcGVjaWFsIGxpbWl0cyAqLworCWludCBza2lwX2NvdW50OworCWludCBtYXhfY291bnQ7CisJdGltZXN0YW1wX3QgbWF4X2FnZTsKKwl0aW1lc3RhbXBfdCBtaW5fYWdlOworCWludCBtaW5fcGFyZW50czsKKwlpbnQgbWF4X3BhcmVudHM7CisJaW50ICgqaW5jbHVkZV9jaGVjaykoc3RydWN0IGNvbW1pdCAqLCB2b2lkICopOworCXZvaWQgKmluY2x1ZGVfY2hlY2tfZGF0YTsKKworCS8qIGRpZmYgaW5mbyBmb3IgcGF0Y2hlcyBhbmQgZm9yIHBhdGhzIGxpbWl0aW5nICovCisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmb3B0OworCXN0cnVjdCBkaWZmX29wdGlvbnMgcHJ1bmluZzsKKworCXN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbzsKKwlzdHJ1Y3QgZGVjb3JhdGlvbiBjaGlsZHJlbjsKKwlzdHJ1Y3QgZGVjb3JhdGlvbiBtZXJnZV9zaW1wbGlmaWNhdGlvbjsKKwlzdHJ1Y3QgZGVjb3JhdGlvbiB0cmVlc2FtZTsKKworCS8qIG5vdGVzLXNwZWNpZmljIG9wdGlvbnM6IHdoaWNoIHJlZnMgdG8gc2hvdyAqLworCXN0cnVjdCBkaXNwbGF5X25vdGVzX29wdCBub3Rlc19vcHQ7CisKKwkvKiBpbnRlcmRpZmYgKi8KKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICppZGlmZl9vaWQxOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmlkaWZmX29pZDI7CisJY29uc3QgY2hhciAqaWRpZmZfdGl0bGU7CisKKwkvKiByYW5nZS1kaWZmICovCisJY29uc3QgY2hhciAqcmRpZmYxOworCWNvbnN0IGNoYXIgKnJkaWZmMjsKKwlpbnQgY3JlYXRpb25fZmFjdG9yOworCWNvbnN0IGNoYXIgKnJkaWZmX3RpdGxlOworCisJLyogY29tbWl0IGNvdW50cyAqLworCWludCBjb3VudF9sZWZ0OworCWludCBjb3VudF9yaWdodDsKKwlpbnQgY291bnRfc2FtZTsKKworCS8qIGxpbmUgbGV2ZWwgcmFuZ2UgdGhhdCB3ZSBhcmUgY2hhc2luZyAqLworCXN0cnVjdCBkZWNvcmF0aW9uIGxpbmVfbG9nX2RhdGE7CisKKwkvKiBjb3BpZXMgb2YgdGhlIHBhcmVudCBsaXN0cywgZm9yIC0tZnVsbC1kaWZmIGRpc3BsYXkgKi8KKwlzdHJ1Y3Qgc2F2ZWRfcGFyZW50cyAqc2F2ZWRfcGFyZW50c19zbGFiOworCisJc3RydWN0IGNvbW1pdF9saXN0ICpwcmV2aW91c19wYXJlbnRzOworCWNvbnN0IGNoYXIgKmJyZWFrX2JhcjsKKworCXN0cnVjdCByZXZpc2lvbl9zb3VyY2VzICpzb3VyY2VzOworCisJc3RydWN0IHRvcG9fd2Fsa19pbmZvICp0b3BvX3dhbGtfaW5mbzsKK307CisKK2ludCByZWZfZXhjbHVkZWQoc3RydWN0IHN0cmluZ19saXN0ICosIGNvbnN0IGNoYXIgKnBhdGgpOwordm9pZCBjbGVhcl9yZWZfZXhjbHVzaW9uKHN0cnVjdCBzdHJpbmdfbGlzdCAqKik7Cit2b2lkIGFkZF9yZWZfZXhjbHVzaW9uKHN0cnVjdCBzdHJpbmdfbGlzdCAqKiwgY29uc3QgY2hhciAqZXhjbHVkZSk7CisKKworI2RlZmluZSBSRVZfVFJFRV9TQU1FCQkwCisjZGVmaW5lIFJFVl9UUkVFX05FVwkJMQkvKiBPbmx5IG5ldyBmaWxlcyAqLworI2RlZmluZSBSRVZfVFJFRV9PTEQJCTIJLyogT25seSBmaWxlcyByZW1vdmVkICovCisjZGVmaW5lIFJFVl9UUkVFX0RJRkZFUkVOVAkzCS8qIE1peGVkIGNoYW5nZXMgKi8KKworLyogcmV2aXNpb24uYyAqLwordHlwZWRlZiB2b2lkICgqc2hvd19lYXJseV9vdXRwdXRfZm5fdCkoc3RydWN0IHJldl9pbmZvICosIHN0cnVjdCBjb21taXRfbGlzdCAqKTsKK2V4dGVybiB2b2xhdGlsZSBzaG93X2Vhcmx5X291dHB1dF9mbl90IHNob3dfZWFybHlfb3V0cHV0OworCitzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHsKKwljb25zdCBjaGFyICpkZWY7CisJdm9pZCAoKnR3ZWFrKShzdHJ1Y3QgcmV2X2luZm8gKiwgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqKTsKKwljb25zdCBjaGFyICpzdWJtb2R1bGU7CS8qIFRPRE86IGRyb3AgdGhpcyBhbmQgdXNlIHJldl9pbmZvLT5yZXBvICovCisJdW5zaWduZWQgaW50CWFzc3VtZV9kYXNoZGFzaDoxLAorCQkJYWxsb3dfZXhjbHVkZV9wcm9taXNvcl9vYmplY3RzOjE7CisJdW5zaWduZWQgcmV2YXJnX29wdDsKK307CisKKyNpZm5kZWYgTk9fVEhFX1JFUE9TSVRPUllfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgaW5pdF9yZXZpc2lvbnMocmV2cywgcHJlZml4KSByZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCByZXZzLCBwcmVmaXgpCisjZW5kaWYKKworLyoqCisgKiBJbml0aWFsaXplIGEgcmV2X2luZm8gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMuIFRoZSB0aGlyZCBwYXJhbWV0ZXIgbWF5CisgKiBiZSBOVUxMIG9yIGNhbiBiZSBwcmVmaXggcGF0aCwgYW5kIHRoZW4gdGhlIGAucHJlZml4YCB2YXJpYWJsZSB3aWxsIGJlIHNldAorICogdG8gaXQuIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBmaXJzdCBmdW5jdGlvbiB5b3Ugd2FudCB0byBjYWxsIHdoZW4geW91IHdhbnQKKyAqIHRvIGRlYWwgd2l0aCBhIHJldmlzaW9uIGxpc3QuIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgeW91IGFyZSBmcmVlIHRvCisgKiBjdXN0b21pemUgb3B0aW9ucywgbGlrZSBzZXQgYC5pZ25vcmVfbWVyZ2VzYCB0byAwIGlmIHlvdSBkb24ndCB3YW50IHRvCisgKiBpZ25vcmUgbWVyZ2VzLCBhbmQgc28gb24uCisgKi8KK3ZvaWQgcmVwb19pbml0X3JldmlzaW9ucyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgY29uc3QgY2hhciAqcHJlZml4KTsKKworLyoqCisgKiBQYXJzZSByZXZpc2lvbiBpbmZvcm1hdGlvbiwgZmlsbGluZyBpbiB0aGUgYHJldl9pbmZvYCBzdHJ1Y3R1cmUsIGFuZAorICogcmVtb3ZpbmcgdGhlIHVzZWQgYXJndW1lbnRzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuIFJldHVybnMgdGhlIG51bWJlcgorICogb2YgYXJndW1lbnRzIGxlZnQgdGhhdCB3ZXJlbid0IHJlY29nbml6ZWQsIHdoaWNoIGFyZSBhbHNvIG1vdmVkIHRvIHRoZQorICogaGVhZCBvZiB0aGUgYXJndW1lbnQgbGlzdC4gVGhlIGxhc3QgcGFyYW1ldGVyIGlzIHVzZWQgaW4gY2FzZSBubworICogcGFyYW1ldGVyIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzLgorICovCitpbnQgc2V0dXBfcmV2aXNpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkgICAgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqKTsKKwordm9pZCBwYXJzZV9yZXZpc2lvbl9vcHQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10pOworI2RlZmluZSBSRVZBUkdfQ0FOTk9UX0JFX0ZJTEVOQU1FIDAxCisjZGVmaW5lIFJFVkFSR19DT01NSVRUSVNIIDAyCitpbnQgaGFuZGxlX3JldmlzaW9uX2FyZyhjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCWludCBmbGFncywgdW5zaWduZWQgcmV2YXJnX29wdCk7CisKKy8qKgorICogUmVzZXQgdGhlIGZsYWdzIHVzZWQgYnkgdGhlIHJldmlzaW9uIHdhbGtpbmcgYXBpLiBZb3UgY2FuIHVzZSB0aGlzIHRvIGRvCisgKiBtdWx0aXBsZSBzZXF1ZW50aWFsIHJldmlzaW9uIHdhbGtzLgorICovCit2b2lkIHJlc2V0X3JldmlzaW9uX3dhbGsodm9pZCk7CisKKy8qKgorICogUHJlcGFyZXMgdGhlIHJldl9pbmZvIHN0cnVjdHVyZSBmb3IgYSB3YWxrLiBZb3Ugc2hvdWxkIGNoZWNrIGlmIGl0IHJldHVybnMKKyAqIGFueSBlcnJvciAobm9uLXplcm8gcmV0dXJuIGNvZGUpIGFuZCBpZiBpdCBkb2VzIG5vdCwgeW91IGNhbiBzdGFydCB1c2luZworICogZ2V0X3JldmlzaW9uKCkgdG8gZG8gdGhlIGl0ZXJhdGlvbi4KKyAqLworaW50IHByZXBhcmVfcmV2aXNpb25fd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOworCisvKioKKyAqIFRha2VzIGEgcG9pbnRlciB0byBhIGByZXZfaW5mb2Agc3RydWN0dXJlIGFuZCBpdGVyYXRlcyBvdmVyIGl0LCByZXR1cm5pbmcgYQorICogYHN0cnVjdCBjb21taXQgKmAgZWFjaCB0aW1lIHlvdSBjYWxsIGl0LiBUaGUgZW5kIG9mIHRoZSByZXZpc2lvbiBsaXN0IGlzCisgKiBpbmRpY2F0ZWQgYnkgcmV0dXJuaW5nIGEgTlVMTCBwb2ludGVyLgorICovCitzdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb24oc3RydWN0IHJldl9pbmZvICpyZXZzKTsKKworY29uc3QgY2hhciAqZ2V0X3JldmlzaW9uX21hcmsoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK3ZvaWQgcHV0X3JldmlzaW9uX21hcmsoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKKwordm9pZCBtYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwordm9pZCBtYXJrX3RyZWVfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRyZWUgKnRyZWUpOwordm9pZCBtYXJrX3RyZWVzX3VuaW50ZXJlc3Rpbmdfc3BhcnNlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgb2lkc2V0ICp0cmVlcyk7CisKK3ZvaWQgc2hvd19vYmplY3Rfd2l0aF9uYW1lKEZJTEUgKiwgc3RydWN0IG9iamVjdCAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYWRkIGNvbW1pdCBvYmplY3RzIGFzIHJldmlzaW9uCisgKiBpbmZvcm1hdGlvbi4gWW91IGNhbiB1c2UgdGhlIGBVTklOVEVSRVNUSU5HYCBvYmplY3QgZmxhZyB0byBpbmRpY2F0ZSBpZgorICogeW91IHdhbnQgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZSBnaXZlbiBjb21taXQgKGFuZCBjb21taXRzIHJlYWNoYWJsZQorICogZnJvbSB0aGUgZ2l2ZW4gY29tbWl0KSBmcm9tIHRoZSByZXZpc2lvbiBsaXN0LgorICoKKyAqIE5PVEU6IElmIHlvdSBoYXZlIHRoZSBjb21taXRzIGFzIGEgc3RyaW5nIGxpc3QgdGhlbiB5b3UgcHJvYmFibHkgd2FudCB0bworICogdXNlIHNldHVwX3JldmlzaW9ucygpLCBpbnN0ZWFkIG9mIHBhcnNpbmcgZWFjaCBzdHJpbmcgYW5kIHVzaW5nIHRoaXMKKyAqIGZ1bmN0aW9uLgorICovCit2b2lkIGFkZF9wZW5kaW5nX29iamVjdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOworCit2b2lkIGFkZF9wZW5kaW5nX29pZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisKK3ZvaWQgYWRkX2hlYWRfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKik7Cit2b2lkIGFkZF9yZWZsb2dzX3RvX3BlbmRpbmcoc3RydWN0IHJldl9pbmZvICosIHVuc2lnbmVkIGludCBmbGFncyk7Cit2b2lkIGFkZF9pbmRleF9vYmplY3RzX3RvX3BlbmRpbmcoc3RydWN0IHJldl9pbmZvICosIHVuc2lnbmVkIGludCBmbGFncyk7CisKK2VudW0gY29tbWl0X2FjdGlvbiB7CisJY29tbWl0X2lnbm9yZSwKKwljb21taXRfc2hvdywKKwljb21taXRfZXJyb3IKK307CisKK2VudW0gY29tbWl0X2FjdGlvbiBnZXRfY29tbWl0X2FjdGlvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJICAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworZW51bSBjb21taXRfYWN0aW9uIHNpbXBsaWZ5X2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJICAgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKKworZW51bSByZXdyaXRlX3Jlc3VsdCB7CisJcmV3cml0ZV9vbmVfb2ssCisJcmV3cml0ZV9vbmVfbm9wYXJlbnRzLAorCXJld3JpdGVfb25lX2Vycm9yCit9OworCit0eXBlZGVmIGVudW0gcmV3cml0ZV9yZXN1bHQgKCpyZXdyaXRlX3BhcmVudF9mbl90KShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKipwcCk7CisKK2ludCByZXdyaXRlX3BhcmVudHMoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgcmV3cml0ZV9wYXJlbnRfZm5fdCByZXdyaXRlX3BhcmVudCk7CisKKy8qCisgKiBUaGUgbG9nIG1hY2hpbmVyeSBzYXZlcyB0aGUgb3JpZ2luYWwgcGFyZW50IGxpc3Qgc28gdGhhdAorICogZ2V0X3NhdmVkX3BhcmVudHMoKSBjYW4gbGF0ZXIgdGVsbCB3aGF0IHRoZSByZWFsIHBhcmVudHMgb2YgdGhlCisgKiBjb21taXRzIGFyZSwgd2hlbiBjb21taXQtPnBhcmVudHMgaGFzIGJlZW4gbW9kaWZpZWQgYnkgaGlzdG9yeQorICogc2ltcGlmaWNhdGlvbi4KKyAqCisgKiBnZXRfc2F2ZWRfcGFyZW50cygpIHdpbGwgdHJhbnNwYXJlbnRseSByZXR1cm4gY29tbWl0LT5wYXJlbnRzIGlmCisgKiBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIGlzIG9mZi4KKyAqLworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2F2ZWRfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcnVuLWNvbW1hbmQuYyBiL3J1bi1jb21tYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlMTE0OQotLS0gL2Rldi9udWxsCisrKyBiL3J1bi1jb21tYW5kLmMKQEAgLTAsMCArMSwxODY2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImV4ZWMtY21kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCit2b2lkIGNoaWxkX3Byb2Nlc3NfaW5pdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY2hpbGQpCit7CisJbWVtc2V0KGNoaWxkLCAwLCBzaXplb2YoKmNoaWxkKSk7CisJYXJndl9hcnJheV9pbml0KCZjaGlsZC0+YXJncyk7CisJYXJndl9hcnJheV9pbml0KCZjaGlsZC0+ZW52X2FycmF5KTsKK30KKwordm9pZCBjaGlsZF9wcm9jZXNzX2NsZWFyKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCkKK3sKKwlhcmd2X2FycmF5X2NsZWFyKCZjaGlsZC0+YXJncyk7CisJYXJndl9hcnJheV9jbGVhcigmY2hpbGQtPmVudl9hcnJheSk7Cit9CisKK3N0cnVjdCBjaGlsZF90b19jbGVhbiB7CisJcGlkX3QgcGlkOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzOworCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqbmV4dDsKK307CitzdGF0aWMgc3RydWN0IGNoaWxkX3RvX2NsZWFuICpjaGlsZHJlbl90b19jbGVhbjsKK3N0YXRpYyBpbnQgaW5zdGFsbGVkX2NoaWxkX2NsZWFudXBfaGFuZGxlcjsKKworc3RhdGljIHZvaWQgY2xlYW51cF9jaGlsZHJlbihpbnQgc2lnLCBpbnQgaW5fc2lnbmFsKQoreworCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqY2hpbGRyZW5fdG9fd2FpdF9mb3IgPSBOVUxMOworCisJd2hpbGUgKGNoaWxkcmVuX3RvX2NsZWFuKSB7CisJCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqcCA9IGNoaWxkcmVuX3RvX2NsZWFuOworCQljaGlsZHJlbl90b19jbGVhbiA9IHAtPm5leHQ7CisKKwkJaWYgKHAtPnByb2Nlc3MgJiYgIWluX3NpZ25hbCkgeworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb2Nlc3MgPSBwLT5wcm9jZXNzOworCQkJaWYgKHByb2Nlc3MtPmNsZWFuX29uX2V4aXRfaGFuZGxlcikgeworCQkJCXRyYWNlX3ByaW50ZigKKwkJCQkJInRyYWNlOiBydW5fY29tbWFuZDogcnVubmluZyBleGl0IGhhbmRsZXIgZm9yIHBpZCAlIgorCQkJCQlQUkl1TUFYLCAodWludG1heF90KXAtPnBpZAorCQkJCSk7CisJCQkJcHJvY2Vzcy0+Y2xlYW5fb25fZXhpdF9oYW5kbGVyKHByb2Nlc3MpOworCQkJfQorCQl9CisKKwkJa2lsbChwLT5waWQsIHNpZyk7CisKKwkJaWYgKHAtPnByb2Nlc3MgJiYgcC0+cHJvY2Vzcy0+d2FpdF9hZnRlcl9jbGVhbikgeworCQkJcC0+bmV4dCA9IGNoaWxkcmVuX3RvX3dhaXRfZm9yOworCQkJY2hpbGRyZW5fdG9fd2FpdF9mb3IgPSBwOworCQl9IGVsc2UgeworCQkJaWYgKCFpbl9zaWduYWwpCisJCQkJZnJlZShwKTsKKwkJfQorCX0KKworCXdoaWxlIChjaGlsZHJlbl90b193YWl0X2ZvcikgeworCQlzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4gKnAgPSBjaGlsZHJlbl90b193YWl0X2ZvcjsKKwkJY2hpbGRyZW5fdG9fd2FpdF9mb3IgPSBwLT5uZXh0OworCisJCXdoaWxlICh3YWl0cGlkKHAtPnBpZCwgTlVMTCwgMCkgPCAwICYmIGVycm5vID09IEVJTlRSKQorCQkJOyAvKiBzcGluIHdhaXRpbmcgZm9yIHByb2Nlc3MgZXhpdCBvciBlcnJvciAqLworCisJCWlmICghaW5fc2lnbmFsKQorCQkJZnJlZShwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfY2hpbGRyZW5fb25fc2lnbmFsKGludCBzaWcpCit7CisJY2xlYW51cF9jaGlsZHJlbihzaWcsIDEpOworCXNpZ2NoYWluX3BvcChzaWcpOworCXJhaXNlKHNpZyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfY2hpbGRyZW5fb25fZXhpdCh2b2lkKQoreworCWNsZWFudXBfY2hpbGRyZW4oU0lHVEVSTSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY2hpbGRfZm9yX2NsZWFudXAocGlkX3QgcGlkLCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqcHJvY2VzcykKK3sKKwlzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4gKnAgPSB4bWFsbG9jKHNpemVvZigqcCkpOworCXAtPnBpZCA9IHBpZDsKKwlwLT5wcm9jZXNzID0gcHJvY2VzczsKKwlwLT5uZXh0ID0gY2hpbGRyZW5fdG9fY2xlYW47CisJY2hpbGRyZW5fdG9fY2xlYW4gPSBwOworCisJaWYgKCFpbnN0YWxsZWRfY2hpbGRfY2xlYW51cF9oYW5kbGVyKSB7CisJCWF0ZXhpdChjbGVhbnVwX2NoaWxkcmVuX29uX2V4aXQpOworCQlzaWdjaGFpbl9wdXNoX2NvbW1vbihjbGVhbnVwX2NoaWxkcmVuX29uX3NpZ25hbCk7CisJCWluc3RhbGxlZF9jaGlsZF9jbGVhbnVwX2hhbmRsZXIgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgY2xlYXJfY2hpbGRfZm9yX2NsZWFudXAocGlkX3QgcGlkKQoreworCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqKnBwOworCisJZm9yIChwcCA9ICZjaGlsZHJlbl90b19jbGVhbjsgKnBwOyBwcCA9ICYoKnBwKS0+bmV4dCkgeworCQlzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4gKmNsZWFuX21lID0gKnBwOworCisJCWlmIChjbGVhbl9tZS0+cGlkID09IHBpZCkgeworCQkJKnBwID0gY2xlYW5fbWUtPm5leHQ7CisJCQlmcmVlKGNsZWFuX21lKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsb3NlX3BhaXIoaW50IGZkWzJdKQoreworCWNsb3NlKGZkWzBdKTsKKwljbG9zZShmZFsxXSk7Cit9CisKK2ludCBpc19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoc3RhdChuYW1lLCAmc3QpIHx8IC8qIHN0YXQsIG5vdCBsc3RhdCAqLworCSAgICAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKyNpZiBkZWZpbmVkKEdJVF9XSU5ET1dTX05BVElWRSkKKwkvKgorCSAqIE9uIFdpbmRvd3MgdGhlcmUgaXMgbm8gZXhlY3V0YWJsZSBiaXQuIFRoZSBmaWxlIGV4dGVuc2lvbgorCSAqIGluZGljYXRlcyB3aGV0aGVyIGl0IGNhbiBiZSBydW4gYXMgYW4gZXhlY3V0YWJsZSwgYW5kIEdpdAorCSAqIGhhcyBzcGVjaWFsLWhhbmRsaW5nIHRvIGRldGVjdCBzY3JpcHRzIGFuZCBsYXVuY2ggdGhlbQorCSAqIHRocm91Z2ggdGhlIGluZGljYXRlZCBzY3JpcHQgaW50ZXJwcmV0ZXIuIFdlIHRlc3QgZm9yIHRoZQorCSAqIGZpbGUgZXh0ZW5zaW9uIGZpcnN0IGJlY2F1c2UgdmlydXMgc2Nhbm5lcnMgbWF5IG1ha2UKKwkgKiBpdCBxdWl0ZSBleHBlbnNpdmUgdG8gb3BlbiBtYW55IGZpbGVzLgorCSAqLworCWlmIChlbmRzX3dpdGgobmFtZSwgIi5leGUiKSkKKwkJcmV0dXJuIFNfSVhVU1I7CisKK3sKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGtub3cgaXQgZG9lcyBub3QgaGF2ZSBhbiBleGVjdXRhYmxlIGV4dGVuc2lvbiwKKwkgKiBwZWVrIGludG8gdGhlIGZpbGUgaW5zdGVhZC4KKwkgKi8KKwljaGFyIGJ1ZlszXSA9IHsgMCB9OworCWludCBuOworCWludCBmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkpOworCXN0LnN0X21vZGUgJj0gflNfSVhVU1I7CisJaWYgKGZkID49IDApIHsKKwkJbiA9IHJlYWQoZmQsIGJ1ZiwgMik7CisJCWlmIChuID09IDIpCisJCQkvKiBsb29rIGZvciBhIHNoZS1iYW5nICovCisJCQlpZiAoIXN0cmNtcChidWYsICIjISIpKQorCQkJCXN0LnN0X21vZGUgfD0gU19JWFVTUjsKKwkJY2xvc2UoZmQpOworCX0KK30KKyNlbmRpZgorCXJldHVybiBzdC5zdF9tb2RlICYgU19JWFVTUjsKK30KKworLyoKKyAqIFNlYXJjaCAkUEFUSCBmb3IgYSBjb21tYW5kLiAgVGhpcyBlbXVsYXRlcyB0aGUgcGF0aCBzZWFyY2ggdGhhdAorICogZXhlY3ZwIHdvdWxkIHBlcmZvcm0sIHdpdGhvdXQgYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBjb21tYW5kIHNvIGl0CisgKiBjYW4gYmUgdXNlZCBiZWZvcmUgZm9yaygpIHRvIHByZXBhcmUgdG8gcnVuIGEgY29tbWFuZCB1c2luZworICogZXhlY3ZlKCkgb3IgYWZ0ZXIgZXhlY3ZwKCkgdG8gZGlhZ25vc2Ugd2h5IGl0IGZhaWxlZC4KKyAqCisgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgdGhhdCBmaWxlIGNvbnRhaW5zIG5vIGRpcmVjdG9yeQorICogc2VwYXJhdG9ycy4KKyAqCisgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBjb21tYW5kLCBhcyBmb3VuZCBpbiAkUEFUSCBvciBOVUxMIGlmIHRoZQorICogY29tbWFuZCBjb3VsZCBub3QgYmUgZm91bmQuICBUaGUgY2FsbGVyIGluaGVyaXRzIG93bmVyc2hpcCBvZiB0aGUgbWVtb3J5CisgKiB1c2VkIHRvIHN0b3JlIHRoZSByZXN1bHRhbnQgcGF0aC4KKyAqCisgKiBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBvbiBXaW5kb3dzLCB3aGVyZSB0aGUgJFBBVEggc2VhcmNoIHJ1bGVzCisgKiBhcmUgbW9yZSBjb21wbGljYXRlZCAoZS5nLiwgYSBzZWFyY2ggZm9yICJmb28iIHNob3VsZCBmaW5kCisgKiAiZm9vLmV4ZSIpLgorICovCitzdGF0aWMgY2hhciAqbG9jYXRlX2luX1BBVEgoY29uc3QgY2hhciAqZmlsZSkKK3sKKwljb25zdCBjaGFyICpwID0gZ2V0ZW52KCJQQVRIIik7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcCB8fCAhKnApCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqZW5kID0gc3RyY2hybnVsKHAsICc6Jyk7CisKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCisJCS8qIFBPU0lYIHNwZWNpZmllcyBhbiBlbXB0eSBlbnRyeSBhcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuICovCisJCWlmIChlbmQgIT0gcCkgeworCQkJc3RyYnVmX2FkZCgmYnVmLCBwLCBlbmQgLSBwKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnLycpOworCQl9CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZmlsZSk7CisKKwkJaWYgKGlzX2V4ZWN1dGFibGUoYnVmLmJ1ZikpCisJCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCQlpZiAoISplbmQpCisJCQlicmVhazsKKwkJcCA9IGVuZCArIDE7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZXhpc3RzX2luX1BBVEgoY29uc3QgY2hhciAqZmlsZSkKK3sKKwljaGFyICpyID0gbG9jYXRlX2luX1BBVEgoZmlsZSk7CisJaW50IGZvdW5kID0gciAhPSBOVUxMOworCWZyZWUocik7CisJcmV0dXJuIGZvdW5kOworfQorCitpbnQgc2FuZV9leGVjdnAoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKK3sKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCisJLyoKKwkgKiBleGVjdnAoKSBkb2Vzbid0IHJldHVybiwgc28gd2UgYWxsIHdlIGNhbiBkbyBpcyB0ZWxsIHRyYWNlMgorCSAqIHdoYXQgd2UgYXJlIGFib3V0IHRvIGRvIGFuZCBsZXQgaXQgbGVhdmUgYSBoaW50IGluIHRoZSBsb2cKKwkgKiAodW5sZXNzIG9mIGNvdXJzZSB0aGUgZXhlY3ZwKCkgZmFpbHMpLgorCSAqCisJICogd2Ugc2tpcCB0aGlzIGZvciBXaW5kb3dzIGJlY2F1c2UgdGhlIGNvbXBhdCBsYXllciBhbHJlYWR5CisJICogaGFzIHRvIGVtdWxhdGUgdGhlIGV4ZWN2cCgpIGNhbGwgYW55d2F5LgorCSAqLworCWludCBleGVjX2lkID0gdHJhY2UyX2V4ZWMoZmlsZSwgKGNvbnN0IGNoYXIgKiopYXJndik7CisjZW5kaWYKKworCWlmICghZXhlY3ZwKGZpbGUsIGFyZ3YpKQorCQlyZXR1cm4gMDsgLyogY2Fubm90IGhhcHBlbiA7LSkgKi8KKworI2lmbmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwl7CisJCWludCBlYyA9IGVycm5vOworCQl0cmFjZTJfZXhlY19yZXN1bHQoZXhlY19pZCwgZWMpOworCQllcnJubyA9IGVjOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiBXaGVuIGEgY29tbWFuZCBjYW4ndCBiZSBmb3VuZCBiZWNhdXNlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMKKwkgKiBsaXN0ZWQgaW4gJFBBVEggaXMgdW5zZWFyY2hhYmxlLCBleGVjdnAgcmVwb3J0cyBFQUNDRVMsIGJ1dAorCSAqIGNhcmVmdWwgdXNhYmlsaXR5IHRlc3RpbmcgKHJlYWQ6IGFuYWx5c2lzIG9mIG9jY2FzaW9uYWwgYnVnCisJICogcmVwb3J0cykgcmV2ZWFscyB0aGF0ICJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IiBpcyBtb3JlCisJICogaW50dWl0aXZlLgorCSAqCisJICogV2UgYXZvaWQgY29tbWFuZHMgd2l0aCAiLyIsIGJlY2F1c2UgZXhlY3ZwIHdpbGwgbm90IGRvICRQQVRICisJICogbG9va3VwcyBpbiB0aGF0IGNhc2UuCisJICoKKwkgKiBUaGUgcmVhc3NpZ25tZW50IG9mIEVBQ0NFUyB0byBlcnJubyBsb29rcyBsaWtlIGEgbm8tb3AgYmVsb3csCisJICogYnV0IHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGV4aXN0c19pbl9QQVRIIG92ZXJ3cml0aW5nIGVycm5vLgorCSAqLworCWlmIChlcnJubyA9PSBFQUNDRVMgJiYgIXN0cmNocihmaWxlLCAnLycpKQorCQllcnJubyA9IGV4aXN0c19pbl9QQVRIKGZpbGUpID8gRUFDQ0VTIDogRU5PRU5UOworCWVsc2UgaWYgKGVycm5vID09IEVOT1RESVIgJiYgIXN0cmNocihmaWxlLCAnLycpKQorCQllcnJubyA9IEVOT0VOVDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoqcHJlcGFyZV9zaGVsbF9jbWQoc3RydWN0IGFyZ3ZfYXJyYXkgKm91dCwgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKCFhcmd2WzBdKQorCQlCVUcoInNoZWxsIGNvbW1hbmQgaXMgZW1wdHkiKTsKKworCWlmIChzdHJjc3BuKGFyZ3ZbMF0sICJ8Jjs8PigpJGBcXFwiJyBcdFxuKj9bI349JSIpICE9IHN0cmxlbihhcmd2WzBdKSkgeworI2lmbmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwkJYXJndl9hcnJheV9wdXNoKG91dCwgU0hFTExfUEFUSCk7CisjZWxzZQorCQlhcmd2X2FycmF5X3B1c2gob3V0LCAic2giKTsKKyNlbmRpZgorCQlhcmd2X2FycmF5X3B1c2gob3V0LCAiLWMiKTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIG5vIGV4dHJhIGFyZ3VtZW50cywgd2UgZG8gbm90IGV2ZW4gbmVlZCB0bworCQkgKiBib3RoZXIgd2l0aCB0aGUgIiRAIiBtYWdpYy4KKwkJICovCisJCWlmICghYXJndlsxXSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaChvdXQsIGFyZ3ZbMF0pOworCQllbHNlCisJCQlhcmd2X2FycmF5X3B1c2hmKG91dCwgIiVzIFwiJEBcIiIsIGFyZ3ZbMF0pOworCX0KKworCWFyZ3ZfYXJyYXlfcHVzaHYob3V0LCBhcmd2KTsKKwlyZXR1cm4gb3V0LT5hcmd2OworfQorCisjaWZuZGVmIEdJVF9XSU5ET1dTX05BVElWRQorc3RhdGljIGludCBjaGlsZF9ub3RpZmllciA9IC0xOworCitlbnVtIGNoaWxkX2VycmNvZGUgeworCUNISUxEX0VSUl9DSERJUiwKKwlDSElMRF9FUlJfRFVQMiwKKwlDSElMRF9FUlJfQ0xPU0UsCisJQ0hJTERfRVJSX1NJR1BST0NNQVNLLAorCUNISUxEX0VSUl9FTk9FTlQsCisJQ0hJTERfRVJSX1NJTEVOVCwKKwlDSElMRF9FUlJfRVJSTk8KK307CisKK3N0cnVjdCBjaGlsZF9lcnIgeworCWVudW0gY2hpbGRfZXJyY29kZSBlcnI7CisJaW50IHN5c2VycjsgLyogZXJybm8gKi8KK307CisKK3N0YXRpYyB2b2lkIGNoaWxkX2RpZShlbnVtIGNoaWxkX2VycmNvZGUgZXJyKQoreworCXN0cnVjdCBjaGlsZF9lcnIgYnVmOworCisJYnVmLmVyciA9IGVycjsKKwlidWYuc3lzZXJyID0gZXJybm87CisKKwkvKiB3cml0ZSgyKSBvbiBidWYgc21hbGxlciB0aGFuIFBJUEVfQlVGIChtaW4gNTEyKSBpcyBhdG9taWM6ICovCisJeHdyaXRlKGNoaWxkX25vdGlmaWVyLCAmYnVmLCBzaXplb2YoYnVmKSk7CisJX2V4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoaWxkX2R1cDIoaW50IGZkLCBpbnQgdG8pCit7CisJaWYgKGR1cDIoZmQsIHRvKSA8IDApCisJCWNoaWxkX2RpZShDSElMRF9FUlJfRFVQMik7Cit9CisKK3N0YXRpYyB2b2lkIGNoaWxkX2Nsb3NlKGludCBmZCkKK3sKKwlpZiAoY2xvc2UoZmQpKQorCQljaGlsZF9kaWUoQ0hJTERfRVJSX0NMT1NFKTsKK30KKworc3RhdGljIHZvaWQgY2hpbGRfY2xvc2VfcGFpcihpbnQgZmRbMl0pCit7CisJY2hpbGRfY2xvc2UoZmRbMF0pOworCWNoaWxkX2Nsb3NlKGZkWzFdKTsKK30KKworLyoKKyAqIHBhcmVudCB3aWxsIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBjaGlsZCBzcGV3ZWQgYSBmYXRhbCBlcnJvciBhbmQgZGllZAorICogdGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBjaGFuZ2VzIHRvIHQwMDYxLgorICovCitzdGF0aWMgdm9pZCBmYWtlX2ZhdGFsKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJdnJlcG9ydGYoImZhdGFsOiAiLCBlcnIsIHBhcmFtcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoaWxkX2Vycm9yX2ZuKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJY29uc3QgY2hhciBtc2dbXSA9ICJlcnJvcigpIHNob3VsZCBub3QgYmUgY2FsbGVkIGluIGNoaWxkXG4iOworCXh3cml0ZSgyLCBtc2csIHNpemVvZihtc2cpIC0gMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoaWxkX3dhcm5fZm4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwljb25zdCBjaGFyIG1zZ1tdID0gIndhcm4oKSBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiBjaGlsZFxuIjsKKwl4d3JpdGUoMiwgbXNnLCBzaXplb2YobXNnKSAtIDEpOworfQorCitzdGF0aWMgdm9pZCBOT1JFVFVSTiBjaGlsZF9kaWVfZm4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwljb25zdCBjaGFyIG1zZ1tdID0gImRpZSgpIHNob3VsZCBub3QgYmUgY2FsbGVkIGluIGNoaWxkXG4iOworCXh3cml0ZSgyLCBtc2csIHNpemVvZihtc2cpIC0gMSk7CisJX2V4aXQoMik7Cit9CisKKy8qIHRoaXMgcnVucyBpbiB0aGUgcGFyZW50IHByb2Nlc3MgKi8KK3N0YXRpYyB2b2lkIGNoaWxkX2Vycl9zcGV3KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsIHN0cnVjdCBjaGlsZF9lcnIgKmNlcnIpCit7CisJc3RhdGljIHZvaWQgKCpvbGRfZXJyZm4pKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpOworCisJb2xkX2VycmZuID0gZ2V0X2Vycm9yX3JvdXRpbmUoKTsKKwlzZXRfZXJyb3Jfcm91dGluZShmYWtlX2ZhdGFsKTsKKwllcnJubyA9IGNlcnItPnN5c2VycjsKKworCXN3aXRjaCAoY2Vyci0+ZXJyKSB7CisJY2FzZSBDSElMRF9FUlJfQ0hESVI6CisJCWVycm9yX2Vycm5vKCJleGVjICclcyc6IGNkIHRvICclcycgZmFpbGVkIiwKKwkJCSAgICBjbWQtPmFyZ3ZbMF0sIGNtZC0+ZGlyKTsKKwkJYnJlYWs7CisJY2FzZSBDSElMRF9FUlJfRFVQMjoKKwkJZXJyb3JfZXJybm8oImR1cDIoKSBpbiBjaGlsZCBmYWlsZWQiKTsKKwkJYnJlYWs7CisJY2FzZSBDSElMRF9FUlJfQ0xPU0U6CisJCWVycm9yX2Vycm5vKCJjbG9zZSgpIGluIGNoaWxkIGZhaWxlZCIpOworCQlicmVhazsKKwljYXNlIENISUxEX0VSUl9TSUdQUk9DTUFTSzoKKwkJZXJyb3JfZXJybm8oInNpZ3Byb2NtYXNrIGZhaWxlZCByZXN0b3Jpbmcgc2lnbmFscyIpOworCQlicmVhazsKKwljYXNlIENISUxEX0VSUl9FTk9FTlQ6CisJCWVycm9yX2Vycm5vKCJjYW5ub3QgcnVuICVzIiwgY21kLT5hcmd2WzBdKTsKKwkJYnJlYWs7CisJY2FzZSBDSElMRF9FUlJfU0lMRU5UOgorCQlicmVhazsKKwljYXNlIENISUxEX0VSUl9FUlJOTzoKKwkJZXJyb3JfZXJybm8oImNhbm5vdCBleGVjICclcyciLCBjbWQtPmFyZ3ZbMF0pOworCQlicmVhazsKKwl9CisJc2V0X2Vycm9yX3JvdXRpbmUob2xkX2VycmZuKTsKK30KKworc3RhdGljIGludCBwcmVwYXJlX2NtZChzdHJ1Y3QgYXJndl9hcnJheSAqb3V0LCBjb25zdCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCWlmICghY21kLT5hcmd2WzBdKQorCQlCVUcoImNvbW1hbmQgaXMgZW1wdHkiKTsKKworCS8qCisJICogQWRkIFNIRUxMX1BBVEggc28gaW4gdGhlIGV2ZW50IGV4ZWMgZmFpbHMgd2l0aCBFTk9FWEVDIHdlIGNhbgorCSAqIGF0dGVtcHQgdG8gaW50ZXJwcmV0IHRoZSBjb21tYW5kIHdpdGggJ3NoJy4KKwkgKi8KKwlhcmd2X2FycmF5X3B1c2gob3V0LCBTSEVMTF9QQVRIKTsKKworCWlmIChjbWQtPmdpdF9jbWQpIHsKKwkJcHJlcGFyZV9naXRfY21kKG91dCwgY21kLT5hcmd2KTsKKwl9IGVsc2UgaWYgKGNtZC0+dXNlX3NoZWxsKSB7CisJCXByZXBhcmVfc2hlbGxfY21kKG91dCwgY21kLT5hcmd2KTsKKwl9IGVsc2UgeworCQlhcmd2X2FycmF5X3B1c2h2KG91dCwgY21kLT5hcmd2KTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyAnLycgY2hhcmFjdGVycyBpbiB0aGUgY29tbWFuZCB0aGVuIHBlcmZvcm0gYSBwYXRoCisJICogbG9va3VwIGFuZCB1c2UgdGhlIHJlc29sdmVkIHBhdGggYXMgdGhlIGNvbW1hbmQgdG8gZXhlYy4gIElmIHRoZXJlCisJICogYXJlICcvJyBjaGFyYWN0ZXJzLCB3ZSBoYXZlIGV4ZWMgYXR0ZW1wdCB0byBpbnZva2UgdGhlIGNvbW1hbmQKKwkgKiBkaXJlY3RseS4KKwkgKi8KKwlpZiAoIXN0cmNocihvdXQtPmFyZ3ZbMV0sICcvJykpIHsKKwkJY2hhciAqcHJvZ3JhbSA9IGxvY2F0ZV9pbl9QQVRIKG91dC0+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+b3V0cHV0X293bmVyICsgaSkgJSBuOworCQl9CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBydW5fcHJvY2Vzc2VzX3BhcmFsbGVsKGludCBuLAorCQkJICAgZ2V0X25leHRfdGFza19mbiBnZXRfbmV4dF90YXNrLAorCQkJICAgc3RhcnRfZmFpbHVyZV9mbiBzdGFydF9mYWlsdXJlLAorCQkJICAgdGFza19maW5pc2hlZF9mbiB0YXNrX2ZpbmlzaGVkLAorCQkJICAgdm9pZCAqcHBfY2IpCit7CisJaW50IGksIGNvZGU7CisJaW50IG91dHB1dF90aW1lb3V0ID0gMTAwOworCWludCBzcGF3bl9jYXAgPSA0OworCXN0cnVjdCBwYXJhbGxlbF9wcm9jZXNzZXMgcHA7CisKKwlwcF9pbml0KCZwcCwgbiwgZ2V0X25leHRfdGFzaywgc3RhcnRfZmFpbHVyZSwgdGFza19maW5pc2hlZCwgcHBfY2IpOworCXdoaWxlICgxKSB7CisJCWZvciAoaSA9IDA7CisJCSAgICBpIDwgc3Bhd25fY2FwICYmICFwcC5zaHV0ZG93biAmJgorCQkgICAgcHAubnJfcHJvY2Vzc2VzIDwgcHAubWF4X3Byb2Nlc3NlczsKKwkJICAgIGkrKykgeworCQkJY29kZSA9IHBwX3N0YXJ0X29uZSgmcHApOworCQkJaWYgKCFjb2RlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNvZGUgPCAwKSB7CisJCQkJcHAuc2h1dGRvd24gPSAxOworCQkJCWtpbGxfY2hpbGRyZW4oJnBwLCAtY29kZSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXBwLm5yX3Byb2Nlc3NlcykKKwkJCWJyZWFrOworCQlwcF9idWZmZXJfc3RkZXJyKCZwcCwgb3V0cHV0X3RpbWVvdXQpOworCQlwcF9vdXRwdXQoJnBwKTsKKwkJY29kZSA9IHBwX2NvbGxlY3RfZmluaXNoZWQoJnBwKTsKKwkJaWYgKGNvZGUpIHsKKwkJCXBwLnNodXRkb3duID0gMTsKKwkJCWlmIChjb2RlIDwgMCkKKwkJCQlraWxsX2NoaWxkcmVuKCZwcCwgLWNvZGUpOworCQl9CisJfQorCisJcHBfY2xlYW51cCgmcHApOworCXJldHVybiAwOworfQorCitpbnQgcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbF90cjIoaW50IG4sIGdldF9uZXh0X3Rhc2tfZm4gZ2V0X25leHRfdGFzaywKKwkJCSAgICAgICBzdGFydF9mYWlsdXJlX2ZuIHN0YXJ0X2ZhaWx1cmUsCisJCQkgICAgICAgdGFza19maW5pc2hlZF9mbiB0YXNrX2ZpbmlzaGVkLCB2b2lkICpwcF9jYiwKKwkJCSAgICAgICBjb25zdCBjaGFyICp0cjJfY2F0ZWdvcnksIGNvbnN0IGNoYXIgKnRyMl9sYWJlbCkKK3sKKwlpbnQgcmVzdWx0OworCisJdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGYodHIyX2NhdGVnb3J5LCB0cjJfbGFiZWwsIE5VTEwsICJtYXg6JWQiLAorCQkJCSAgICgobiA8IDEpID8gb25saW5lX2NwdXMoKSA6IG4pKTsKKworCXJlc3VsdCA9IHJ1bl9wcm9jZXNzZXNfcGFyYWxsZWwobiwgZ2V0X25leHRfdGFzaywgc3RhcnRfZmFpbHVyZSwKKwkJCQkJdGFza19maW5pc2hlZCwgcHBfY2IpOworCisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSh0cjJfY2F0ZWdvcnksIHRyMl9sYWJlbCwgTlVMTCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvcnVuLWNvbW1hbmQuaCBiL3J1bi1jb21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzY2M3MwotLS0gL2Rldi9udWxsCisrKyBiL3J1bi1jb21tYW5kLmgKQEAgLTAsMCArMSw0NzMgQEAKKyNpZm5kZWYgUlVOX0NPTU1BTkRfSAorI2RlZmluZSBSVU5fQ09NTUFORF9ICisKKyNpbmNsdWRlICJ0aHJlYWQtdXRpbHMuaCIKKworI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworLyoqCisgKiBUaGUgcnVuLWNvbW1hbmQgQVBJIG9mZmVycyBhIHZlcnNhdGlsZSB0b29sIHRvIHJ1biBzdWItcHJvY2Vzc2VzIHdpdGgKKyAqIHJlZGlyZWN0ZWQgaW5wdXQgYW5kIG91dHB1dCBhcyB3ZWxsIGFzIHdpdGggYSBtb2RpZmllZCBlbnZpcm9ubWVudAorICogYW5kIGFuIGFsdGVybmF0ZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAqCisgKiBBIHNpbWlsYXIgQVBJIG9mZmVycyB0aGUgY2FwYWJpbGl0eSB0byBydW4gYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseSwKKyAqIHdoaWNoIGlzIHByaW1hcmlseSB1c2VkIHRvIGNhcHR1cmUgdGhlIG91dHB1dCB0aGF0IHRoZSBmdW5jdGlvbgorICogcHJvZHVjZXMgaW4gdGhlIGNhbGxlciBpbiBvcmRlciB0byBwcm9jZXNzIGl0LgorICovCisKKworLyoqCisgKiBUaGlzIGRlc2NyaWJlcyB0aGUgYXJndW1lbnRzLCByZWRpcmVjdGlvbnMsIGFuZCBlbnZpcm9ubWVudCBvZiBhCisgKiBjb21tYW5kIHRvIHJ1biBpbiBhIHN1Yi1wcm9jZXNzLgorICoKKyAqIFRoZSBjYWxsZXI6CisgKgorICogMS4gYWxsb2NhdGVzIGFuZCBjbGVhcnMgKHVzaW5nIGNoaWxkX3Byb2Nlc3NfaW5pdCgpIG9yCisgKiAgICBDSElMRF9QUk9DRVNTX0lOSVQpIGEgc3RydWN0IGNoaWxkX3Byb2Nlc3MgdmFyaWFibGU7CisgKiAyLiBpbml0aWFsaXplcyB0aGUgbWVtYmVyczsKKyAqIDMuIGNhbGxzIHN0YXJ0X2NvbW1hbmQoKTsKKyAqIDQuIHByb2Nlc3NlcyB0aGUgZGF0YTsKKyAqIDUuIGNsb3NlcyBmaWxlIGRlc2NyaXB0b3JzIChpZiBuZWNlc3Nhcnk7IHNlZSBiZWxvdyk7CisgKiA2LiBjYWxscyBmaW5pc2hfY29tbWFuZCgpLgorICoKKyAqIFNwZWNpYWwgZm9ybXMgb2YgcmVkaXJlY3Rpb24gYXJlIGF2YWlsYWJsZSBieSBzZXR0aW5nIHRoZXNlIG1lbWJlcnMKKyAqIHRvIDE6CisgKgorICogIC5ub19zdGRpbiwgLm5vX3N0ZG91dCwgLm5vX3N0ZGVycjogVGhlIHJlc3BlY3RpdmUgY2hhbm5lbCBpcworICoJCXJlZGlyZWN0ZWQgdG8gL2Rldi9udWxsLgorICoKKyAqCS5zdGRvdXRfdG9fc3RkZXJyOiBzdGRvdXQgb2YgdGhlIGNoaWxkIGlzIHJlZGlyZWN0ZWQgdG8gaXRzCisgKgkJc3RkZXJyLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgc3RkZXJyIGlzIGl0c2VsZiByZWRpcmVjdGVkLgorICoJCVNvIHN0ZG91dCB3aWxsIGZvbGxvdyBzdGRlcnIgdG8gd2hlcmV2ZXIgaXQgaXMKKyAqCQlyZWRpcmVjdGVkLgorICovCitzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB7CisKKwkvKioKKwkgKiBUaGUgLmFyZ3YgbWVtYmVyIGlzIHNldCB1cCBhcyBhbiBhcnJheSBvZiBzdHJpbmcgcG9pbnRlcnMgKE5VTEwKKwkgKiB0ZXJtaW5hdGVkKSwgb2Ygd2hpY2ggLmFyZ3ZbMF0gaXMgdGhlIHByb2dyYW0gbmFtZSB0byBydW4gKHVzdWFsbHkKKwkgKiB3aXRob3V0IGEgcGF0aCkuIElmIHRoZSBjb21tYW5kIHRvIHJ1biBpcyBhIGdpdCBjb21tYW5kLCBzZXQgYXJndlswXSB0bworCSAqIHRoZSBjb21tYW5kIG5hbWUgd2l0aG91dCB0aGUgJ2dpdC0nIHByZWZpeCBhbmQgc2V0IC5naXRfY21kID0gMS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgb3duZXJzaGlwIG9mIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSAuYXJndiBzdGF5cyB3aXRoIHRoZQorCSAqIGNhbGxlciwgYnV0IGl0IHNob3VsZCBzdXJ2aXZlIHVudGlsIGBmaW5pc2hfY29tbWFuZGAgY29tcGxldGVzLiBJZiB0aGUKKwkgKiAuYXJndiBtZW1iZXIgaXMgTlVMTCwgYHN0YXJ0X2NvbW1hbmRgIHdpbGwgcG9pbnQgaXQgYXQgdGhlIC5hcmdzCisJICogYGFyZ3ZfYXJyYXlgIChzbyB5b3UgbWF5IHVzZSBvbmUgb3IgdGhlIG90aGVyLCBidXQgeW91IG11c3QgdXNlIGV4YWN0bHkKKwkgKiBvbmUpLiBUaGUgbWVtb3J5IGluIC5hcmdzIHdpbGwgYmUgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IGR1cmluZworCSAqIGBmaW5pc2hfY29tbWFuZGAgKG9yIGR1cmluZyBgc3RhcnRfY29tbWFuZGAgd2hlbiBpdCBpcyB1bnN1Y2Nlc3NmdWwpLgorCSAqCisJICovCisJY29uc3QgY2hhciAqKmFyZ3Y7CisKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzOworCXN0cnVjdCBhcmd2X2FycmF5IGVudl9hcnJheTsKKwlwaWRfdCBwaWQ7CisKKwlpbnQgdHJhY2UyX2NoaWxkX2lkOworCXVpbnQ2NF90IHRyYWNlMl9jaGlsZF91c19zdGFydDsKKwljb25zdCBjaGFyICp0cmFjZTJfY2hpbGRfY2xhc3M7CisJY29uc3QgY2hhciAqdHJhY2UyX2hvb2tfbmFtZTsKKworCS8qCisJICogVXNpbmcgLmluLCAub3V0LCAuZXJyOgorCSAqIC0gU3BlY2lmeSAwIGZvciBubyByZWRpcmVjdGlvbnMuIE5vIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgYWxsb2NhdGVkLgorCSAqIChjaGlsZCBpbmhlcml0cyBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgZnJvbSBwYXJlbnQpLgorCSAqIC0gU3BlY2lmeSAtMSB0byBoYXZlIGEgcGlwZSBhbGxvY2F0ZWQgYXMgZm9sbG93czoKKwkgKiAgICAgLmluOiByZXR1cm5zIHRoZSB3cml0YWJsZSBwaXBlIGVuZDsgcGFyZW50IHdyaXRlcyB0byBpdCwKKwkgKiAgICAgICAgICB0aGUgcmVhZGFibGUgcGlwZSBlbmQgYmVjb21lcyBjaGlsZCdzIHN0ZGluCisJICogICAgIC5vdXQsIC5lcnI6IHJldHVybnMgdGhlIHJlYWRhYmxlIHBpcGUgZW5kOyBwYXJlbnQgcmVhZHMgZnJvbQorCSAqICAgICAgICAgIGl0LCB0aGUgd3JpdGFibGUgcGlwZSBlbmQgYmVjb21lcyBjaGlsZCdzIHN0ZG91dC9zdGRlcnIKKwkgKiAgIFRoZSBjYWxsZXIgb2Ygc3RhcnRfY29tbWFuZCgpIG11c3QgY2xvc2UgdGhlIHJldHVybmVkIEZEcworCSAqICAgYWZ0ZXIgaXQgaGFzIGNvbXBsZXRlZCByZWFkaW5nIGZyb20vd3JpdGluZyB0byBpdCEKKwkgKiAtIFNwZWNpZnkgPiAwIHRvIHNldCBhIGNoYW5uZWwgdG8gYSBwYXJ0aWN1bGFyIEZEIGFzIGZvbGxvd3M6CisJICogICAgIC5pbjogYSByZWFkYWJsZSBGRCwgYmVjb21lcyBjaGlsZCdzIHN0ZGluCisJICogICAgIC5vdXQ6IGEgd3JpdGFibGUgRkQsIGJlY29tZXMgY2hpbGQncyBzdGRvdXQvc3RkZXJyCisJICogICAgIC5lcnI6IGEgd3JpdGFibGUgRkQsIGJlY29tZXMgY2hpbGQncyBzdGRlcnIKKwkgKiAgIFRoZSBzcGVjaWZpZWQgRkQgaXMgY2xvc2VkIGJ5IHN0YXJ0X2NvbW1hbmQoKSwgZXZlbiBpbiBjYXNlCisJICogICBvZiBlcnJvcnMhCisJICovCisJaW50IGluOworCWludCBvdXQ7CisJaW50IGVycjsKKworCS8qKgorCSAqIFRvIHNwZWNpZnkgYSBuZXcgaW5pdGlhbCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHN1Yi1wcm9jZXNzLAorCSAqIHNwZWNpZnkgaXQgaW4gdGhlIC5kaXIgbWVtYmVyLgorCSAqLworCWNvbnN0IGNoYXIgKmRpcjsKKworCS8qKgorCSAqIFRvIG1vZGlmeSB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIHN1Yi1wcm9jZXNzLCBzcGVjaWZ5IGFuIGFycmF5IG9mCisJICogc3RyaW5nIHBvaW50ZXJzIChOVUxMIHRlcm1pbmF0ZWQpIGluIC5lbnY6CisJICoKKwkgKiAtIElmIHRoZSBzdHJpbmcgaXMgb2YgdGhlIGZvcm0gIlZBUj12YWx1ZSIsIGkuZS4gaXQgY29udGFpbnMgJz0nCisJICogICB0aGUgdmFyaWFibGUgaXMgYWRkZWQgdG8gdGhlIGNoaWxkIHByb2Nlc3MncyBlbnZpcm9ubWVudC4KKwkgKgorCSAqIC0gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluICc9JywgaXQgbmFtZXMgYW4gZW52aXJvbm1lbnQKKwkgKiAgIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGNoaWxkIHByb2Nlc3MncyBlbnZpcm9ubWVudC4KKwkgKgorCSAqIElmIHRoZSAuZW52IG1lbWJlciBpcyBOVUxMLCBgc3RhcnRfY29tbWFuZGAgd2lsbCBwb2ludCBpdCBhdCB0aGUKKwkgKiAuZW52X2FycmF5IGBhcmd2X2FycmF5YCAoc28geW91IG1heSB1c2Ugb25lIG9yIHRoZSBvdGhlciwgYnV0IG5vdCBib3RoKS4KKwkgKiBUaGUgbWVtb3J5IGluIC5lbnZfYXJyYXkgd2lsbCBiZSBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgZHVyaW5nCisJICogYGZpbmlzaF9jb21tYW5kYCAob3IgZHVyaW5nIGBzdGFydF9jb21tYW5kYCB3aGVuIGl0IGlzIHVuc3VjY2Vzc2Z1bCkuCisJICovCisJY29uc3QgY2hhciAqY29uc3QgKmVudjsKKworCXVuc2lnbmVkIG5vX3N0ZGluOjE7CisJdW5zaWduZWQgbm9fc3Rkb3V0OjE7CisJdW5zaWduZWQgbm9fc3RkZXJyOjE7CisJdW5zaWduZWQgZ2l0X2NtZDoxOyAvKiBpZiB0aGlzIGlzIHRvIGJlIGdpdCBzdWItY29tbWFuZCAqLworCisJLyoqCisJICogSWYgdGhlIHByb2dyYW0gY2Fubm90IGJlIGZvdW5kLCB0aGUgZnVuY3Rpb25zIHJldHVybiAtMSBhbmQgc2V0CisJICogZXJybm8gdG8gRU5PRU5ULiBOb3JtYWxseSwgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLCBidXQgaWYKKwkgKiAuc2lsZW50X2V4ZWNfZmFpbHVyZSBpcyBzZXQgdG8gMSwgbm8gbWVzc2FnZSBpcyBwcmludGVkIGZvciB0aGlzCisJICogc3BlY2lhbCBlcnJvciBjb25kaXRpb24uCisJICovCisJdW5zaWduZWQgc2lsZW50X2V4ZWNfZmFpbHVyZToxOworCisJdW5zaWduZWQgc3Rkb3V0X3RvX3N0ZGVycjoxOworCXVuc2lnbmVkIHVzZV9zaGVsbDoxOworCXVuc2lnbmVkIGNsZWFuX29uX2V4aXQ6MTsKKwl1bnNpZ25lZCB3YWl0X2FmdGVyX2NsZWFuOjE7CisJdm9pZCAoKmNsZWFuX29uX2V4aXRfaGFuZGxlcikoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb2Nlc3MpOworCXZvaWQgKmNsZWFuX29uX2V4aXRfaGFuZGxlcl9jYmRhdGE7Cit9OworCisjZGVmaW5lIENISUxEX1BST0NFU1NfSU5JVCB7IE5VTEwsIEFSR1ZfQVJSQVlfSU5JVCwgQVJHVl9BUlJBWV9JTklUIH0KKworLyoqCisgKiBUaGUgZnVuY3Rpb25zOiBjaGlsZF9wcm9jZXNzX2luaXQsIHN0YXJ0X2NvbW1hbmQsIGZpbmlzaF9jb21tYW5kLAorICogcnVuX2NvbW1hbmQsIHJ1bl9jb21tYW5kX3Zfb3B0LCBydW5fY29tbWFuZF92X29wdF9jZF9lbnYsIGNoaWxkX3Byb2Nlc3NfY2xlYXIKKyAqIGRvIHRoZSBmb2xsb3dpbmc6CisgKgorICogLSBJZiBhIHN5c3RlbSBjYWxsIGZhaWxlZCwgZXJybm8gaXMgc2V0IGFuZCAtMSBpcyByZXR1cm5lZC4gQSBkaWFnbm9zdGljCisgKiAgIGlzIHByaW50ZWQuCisgKgorICogLSBJZiB0aGUgcHJvZ3JhbSB3YXMgbm90IGZvdW5kLCB0aGVuIC0xIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgdG8KKyAqICAgRU5PRU5UOyBhIGRpYWdub3N0aWMgaXMgcHJpbnRlZCBvbmx5IGlmIC5zaWxlbnRfZXhlY19mYWlsdXJlIGlzIDAuCisgKgorICogLSBPdGhlcndpc2UsIHRoZSBwcm9ncmFtIGlzIHJ1bi4gSWYgaXQgdGVybWluYXRlcyByZWd1bGFybHksIGl0cyBleGl0CisgKiAgIGNvZGUgaXMgcmV0dXJuZWQuIE5vIGRpYWdub3N0aWMgaXMgcHJpbnRlZCwgZXZlbiBpZiB0aGUgZXhpdCBjb2RlIGlzCisgKiAgIG5vbi16ZXJvLgorICoKKyAqIC0gSWYgdGhlIHByb2dyYW0gdGVybWluYXRlZCBkdWUgdG8gYSBzaWduYWwsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUKKyAqICAgc2lnbmFsIG51bWJlciArIDEyOCwgaWUuIHRoZSBzYW1lIHZhbHVlIHRoYXQgYSBQT1NJWCBzaGVsbCdzICQ/IHdvdWxkCisgKiAgIHJlcG9ydC4gIEEgZGlhZ25vc3RpYyBpcyBwcmludGVkLgorICoKKyAqLworCisvKioKKyAqIEluaXRpYWxpemUgYSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB2YXJpYWJsZS4KKyAqLwordm9pZCBjaGlsZF9wcm9jZXNzX2luaXQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CisKKy8qKgorICogUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RydWN0IGNoaWxkX3Byb2Nlc3MuCisgKiBNb3N0IHVzZXJzIG9mIHRoZSBydW4tY29tbWFuZCBBUEkgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9uIGV4cGxpY2l0bHkgYmVjYXVzZSBgc3RhcnRfY29tbWFuZGAgaW52b2tlcyBpdCBvbgorICogZmFpbHVyZSBhbmQgYGZpbmlzaF9jb21tYW5kYCBjYWxscyBpdCBhdXRvbWF0aWNhbGx5IGFscmVhZHkuCisgKi8KK3ZvaWQgY2hpbGRfcHJvY2Vzc19jbGVhcihzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKKworaW50IGlzX2V4ZWN1dGFibGUoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogU3RhcnQgYSBzdWItcHJvY2Vzcy4gVGFrZXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYAorICogdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgYW5kIHJldHVybnMgcGlwZSBGRHMgKGlmIHJlcXVlc3RlZCkuCisgKiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisgKi8KK2ludCBzdGFydF9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCisvKioKKyAqIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGEgc3ViLXByb2Nlc3MgdGhhdCB3YXMgc3RhcnRlZCB3aXRoCisgKiBzdGFydF9jb21tYW5kKCkuCisgKi8KK2ludCBmaW5pc2hfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKKworaW50IGZpbmlzaF9jb21tYW5kX2luX3NpZ25hbChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKKworLyoqCisgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgZW5jYXBzdWxhdGVzIGEgc2VxdWVuY2Ugb2YKKyAqIHN0YXJ0X2NvbW1hbmQoKSBmb2xsb3dlZCBieSBmaW5pc2hfY29tbWFuZCgpLiBUYWtlcyBhIHBvaW50ZXIKKyAqIHRvIGEgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscy4KKyAqLworaW50IHJ1bl9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCisvKgorICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgaG9vayBmaWxlLCBvciBOVUxMIGlmIHRoZSBob29rIGlzIG1pc3NpbmcKKyAqIG9yIGRpc2FibGVkLiBOb3RlIHRoYXQgdGhpcyBwb2ludHMgdG8gc3RhdGljIHN0b3JhZ2UgdGhhdCB3aWxsIGJlCisgKiBvdmVyd3JpdHRlbiBieSBmdXJ0aGVyIGNhbGxzIHRvIGZpbmRfaG9vayBhbmQgcnVuX2hvb2tfKi4KKyAqLworY29uc3QgY2hhciAqZmluZF9ob29rKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioKKyAqIFJ1biBhIGhvb2suCisgKiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSBwYXRobmFtZSB0byBhbiBpbmRleCBmaWxlLCBvciBOVUxMCisgKiBpZiB0aGUgaG9vayB1c2VzIHRoZSBkZWZhdWx0IGluZGV4IGZpbGUgb3Igbm8gaW5kZXggaXMgbmVlZGVkLgorICogVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgaG9vay4KKyAqIFRoZSBmdXJ0aGVyIGFyZ3VtZW50cyBjb3JyZXNwb25kIHRvIHRoZSBob29rIGFyZ3VtZW50cy4KKyAqIFRoZSBsYXN0IGFyZ3VtZW50IGhhcyB0byBiZSBOVUxMIHRvIHRlcm1pbmF0ZSB0aGUgYXJndW1lbnRzIGxpc3QuCisgKiBJZiB0aGUgaG9vayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZXhlY3V0YWJsZSwgdGhlIHJldHVybgorICogdmFsdWUgd2lsbCBiZSB6ZXJvLgorICogSWYgaXQgaXMgZXhlY3V0YWJsZSwgdGhlIGhvb2sgd2lsbCBiZSBleGVjdXRlZCBhbmQgdGhlIGV4aXQKKyAqIHN0YXR1cyBvZiB0aGUgaG9vayBpcyByZXR1cm5lZC4KKyAqIE9uIGV4ZWN1dGlvbiwgLnN0ZG91dF90b19zdGRlcnIgYW5kIC5ub19zdGRpbiB3aWxsIGJlIHNldC4KKyAqLworTEFTVF9BUkdfTVVTVF9CRV9OVUxMCitpbnQgcnVuX2hvb2tfbGUoY29uc3QgY2hhciAqY29uc3QgKmVudiwgY29uc3QgY2hhciAqbmFtZSwgLi4uKTsKK2ludCBydW5faG9va192ZShjb25zdCBjaGFyICpjb25zdCAqZW52LCBjb25zdCBjaGFyICpuYW1lLCB2YV9saXN0IGFyZ3MpOworCisjZGVmaW5lIFJVTl9DT01NQU5EX05PX1NURElOIDEKKyNkZWZpbmUgUlVOX0dJVF9DTUQJICAgICAyCS8qSWYgdGhpcyBpcyB0byBiZSBnaXQgc3ViLWNvbW1hbmQgKi8KKyNkZWZpbmUgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUiA0CisjZGVmaW5lIFJVTl9TSUxFTlRfRVhFQ19GQUlMVVJFIDgKKyNkZWZpbmUgUlVOX1VTSU5HX1NIRUxMIDE2CisjZGVmaW5lIFJVTl9DTEVBTl9PTl9FWElUIDMyCisKKy8qKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRoYXQgZW5jYXBzdWxhdGUgYSBzZXF1ZW5jZSBvZgorICogc3RhcnRfY29tbWFuZCgpIGZvbGxvd2VkIGJ5IGZpbmlzaF9jb21tYW5kKCkuIFRoZSBhcmd1bWVudCBhcmd2CisgKiBzcGVjaWZpZXMgdGhlIHByb2dyYW0gYW5kIGl0cyBhcmd1bWVudHMuIFRoZSBhcmd1bWVudCBvcHQgaXMgemVybworICogb3IgbW9yZSBvZiB0aGUgZmxhZ3MgYFJVTl9DT01NQU5EX05PX1NURElOYCwgYFJVTl9HSVRfQ01EYCwKKyAqIGBSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSYCwgb3IgYFJVTl9TSUxFTlRfRVhFQ19GQUlMVVJFYAorICogdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBtZW1iZXJzIC5ub19zdGRpbiwgLmdpdF9jbWQsCisgKiAuc3Rkb3V0X3RvX3N0ZGVyciwgLnNpbGVudF9leGVjX2ZhaWx1cmUgb2YgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYC4KKyAqIFRoZSBhcmd1bWVudCBkaXIgY29ycmVzcG9uZHMgdGhlIG1lbWJlciAuZGlyLiBUaGUgYXJndW1lbnQgZW52CisgKiBjb3JyZXNwb25kcyB0byB0aGUgbWVtYmVyIC5lbnYuCisgKi8KK2ludCBydW5fY29tbWFuZF92X29wdChjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCk7CitpbnQgcnVuX2NvbW1hbmRfdl9vcHRfdHIyKGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgb3B0LCBjb25zdCBjaGFyICp0cjJfY2xhc3MpOworLyoKKyAqIGVudiAodGhlIGVudmlyb25tZW50KSBpcyB0byBiZSBmb3JtYXR0ZWQgbGlrZSBlbnZpcm9uOiAiVkFSPVZBTFVFIi4KKyAqIFRvIHVuc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHVzZSBqdXN0ICJWQVIiLgorICovCitpbnQgcnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52KGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgb3B0LCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpOworaW50IHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2Vudl90cjIoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQsIGNvbnN0IGNoYXIgKmRpciwKKwkJCQkgY29uc3QgY2hhciAqY29uc3QgKmVudiwgY29uc3QgY2hhciAqdHIyX2NsYXNzKTsKKworLyoqCisgKiBFeGVjdXRlIHRoZSBnaXZlbiBjb21tYW5kLCBzZW5kaW5nICJpbiIgdG8gaXRzIHN0ZGluLCBhbmQgY2FwdHVyaW5nIGl0cworICogc3Rkb3V0IGFuZCBzdGRlcnIgaW4gdGhlICJvdXQiIGFuZCAiZXJyIiBzdHJidWZzLiBBbnkgb2YgdGhlIHRocmVlIG1heQorICogYmUgTlVMTCB0byBza2lwIHByb2Nlc3NpbmcuCisgKgorICogUmV0dXJucyAtMSBpZiBzdGFydGluZyB0aGUgY29tbWFuZCBmYWlscyBvciByZWFkaW5nIGZhaWxzLCBhbmQgb3RoZXJ3aXNlCisgKiByZXR1cm5zIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuIEFueSBvdXRwdXQgY29sbGVjdGVkIGluIHRoZQorICogYnVmZmVycyBpcyBrZXB0IGV2ZW4gaWYgdGhlIGNvbW1hbmQgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQuIFRoZSBoaW50IGZpZWxkcworICogZ2l2ZXMgc3RhcnRpbmcgc2l6ZXMgZm9yIHRoZSBzdHJidWYgYWxsb2NhdGlvbnMuCisgKgorICogVGhlIGZpZWxkcyBvZiAiY21kIiBzaG91bGQgYmUgc2V0IHVwIGFzIHRoZXkgd291bGQgZm9yIGEgbm9ybWFsIHJ1bl9jb21tYW5kCisgKiBpbnZvY2F0aW9uLiBCdXQgbm90ZSB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHRoZSBpbiwgb3V0LCBvciBlcnIKKyAqIGZpZWxkczsgcGlwZV9jb21tYW5kIGhhbmRsZXMgdGhhdCBhdXRvbWF0aWNhbGx5LgorICovCitpbnQgcGlwZV9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsCisJCSBjb25zdCBjaGFyICppbiwgc2l6ZV90IGluX2xlbiwKKwkJIHN0cnVjdCBzdHJidWYgKm91dCwgc2l6ZV90IG91dF9oaW50LAorCQkgc3RydWN0IHN0cmJ1ZiAqZXJyLCBzaXplX3QgZXJyX2hpbnQpOworCisvKioKKyAqIENvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHBpcGVfY29tbWFuZCBmb3IgdGhlIGNvbW1vbiBjYXNlCisgKiBvZiBjYXB0dXJpbmcgb25seSBzdGRvdXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNhcHR1cmVfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCSAgc2l6ZV90IGhpbnQpCit7CisJcmV0dXJuIHBpcGVfY29tbWFuZChjbWQsIE5VTEwsIDAsIG91dCwgaGludCwgTlVMTCwgMCk7Cit9CisKKy8qCisgKiBUaGUgcHVycG9zZSBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpcyB0byBmZWVkIGEgcGlwZSBieSBydW5uaW5nCisgKiBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5IGFuZCBwcm92aWRpbmcgb3V0cHV0IHRoYXQgdGhlIGNhbGxlciByZWFkcy4KKyAqCisgKiBJdCBpcyBleHBlY3RlZCB0aGF0IG5vIHN5bmNocm9uaXphdGlvbiBhbmQgbXV0dWFsIGV4Y2x1c2lvbiBiZXR3ZWVuCisgKiB0aGUgY2FsbGVyIGFuZCB0aGUgZmVlZCBmdW5jdGlvbiBpcyBuZWNlc3Nhcnkgc28gdGhhdCB0aGUgZnVuY3Rpb24KKyAqIGNhbiBydW4gaW4gYSB0aHJlYWQgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHRoZSBjYWxsZXIuCisgKgorICogVGhlIGNhbGxlcjoKKyAqCisgKiAxLiBhbGxvY2F0ZXMgYW5kIGNsZWFycyAobWVtc2V0KCZhc3ksIDAsIHNpemVvZihhc3kpKTspIGEKKyAqICAgIHN0cnVjdCBhc3luYyB2YXJpYWJsZTsKKyAqIDIuIGluaXRpYWxpemVzIC5wcm9jIGFuZCAuZGF0YTsKKyAqIDMuIGNhbGxzIHN0YXJ0X2FzeW5jKCk7CisgKiA0LiBwcm9jZXNzZXMgY29tbXVuaWNhdGVzIHdpdGggcHJvYyB0aHJvdWdoIC5pbiBhbmQgLm91dDsKKyAqIDUuIGNsb3NlcyAuaW4gYW5kIC5vdXQ7CisgKiA2LiBjYWxscyBmaW5pc2hfYXN5bmMoKS4KKyAqCisgKiBUaGVyZSBhcmUgc2VyaW91cyByZXN0cmljdGlvbnMgb24gd2hhdCB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbiBkbworICogYmVjYXVzZSB0aGlzIGZhY2lsaXR5IGlzIGltcGxlbWVudGVkIGJ5IGEgdGhyZWFkIGluIHRoZSBzYW1lIGFkZHJlc3MKKyAqIHNwYWNlIG9uIG1vc3QgcGxhdGZvcm1zICh3aGVuIHB0aHJlYWRzIGlzIGF2YWlsYWJsZSksIGJ1dCBieSBhIHBpcGUgdG8KKyAqIGEgZm9ya2VkIHByb2Nlc3Mgb3RoZXJ3aXNlOgorICoKKyAqIC0gSXQgY2Fubm90IGNoYW5nZSB0aGUgcHJvZ3JhbSdzIHN0YXRlIChnbG9iYWwgdmFyaWFibGVzLCBlbnZpcm9ubWVudCwKKyAqICAgZXRjLikgaW4gYSB3YXkgdGhhdCB0aGUgY2FsbGVyIG5vdGljZXM7IGluIG90aGVyIHdvcmRzLCAuaW4gYW5kIC5vdXQKKyAqICAgYXJlIHRoZSBvbmx5IGNvbW11bmljYXRpb24gY2hhbm5lbHMgdG8gdGhlIGNhbGxlci4KKyAqCisgKiAtIEl0IG11c3Qgbm90IGNoYW5nZSB0aGUgcHJvZ3JhbSdzIHN0YXRlIHRoYXQgdGhlIGNhbGxlciBvZiB0aGUKKyAqICAgZmFjaWxpdHkgYWxzbyB1c2VzLgorICoKKyAqLworc3RydWN0IGFzeW5jIHsKKworCS8qKgorCSAqIFRoZSBmdW5jdGlvbiBwb2ludGVyIGluIC5wcm9jIGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKKwkgKgorCSAqCWludCBwcm9jKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSk7CisJICoKKwkgKiAtIGluLCBvdXQgc3BlY2lmaWVzIGEgc2V0IG9mIGZpbGUgZGVzY3JpcHRvcnMgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uCisJICogIG11c3QgcmVhZC93cml0ZSB0aGUgZGF0YSB0aGF0IGl0IG5lZWRzL3Byb2R1Y2VzLiAgVGhlIGZ1bmN0aW9uCisJICogICptdXN0KiBjbG9zZSB0aGVzZSBkZXNjcmlwdG9ycyBiZWZvcmUgaXQgcmV0dXJucy4gIEEgZGVzY3JpcHRvcgorCSAqICBtYXkgYmUgLTEgaWYgdGhlIGNhbGxlciBkaWQgbm90IGNvbmZpZ3VyZSBhIGRlc2NyaXB0b3IgZm9yIHRoYXQKKwkgKiAgZGlyZWN0aW9uLgorCSAqCisJICogLSBkYXRhIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBjYWxsZXIgaGFzIHNwZWNpZmllZCBpbiB0aGUgLmRhdGEgbWVtYmVyCisJICogIG9mIHN0cnVjdCBhc3luYy4KKwkgKgorCSAqIC0gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgMCBvbiBzdWNjZXNzIGFuZCBub24temVybworCSAqICBvbiBmYWlsdXJlLiBJZiB0aGUgZnVuY3Rpb24gaW5kaWNhdGVzIGZhaWx1cmUsIGZpbmlzaF9hc3luYygpIHdpbGwKKwkgKiAgcmVwb3J0IGZhaWx1cmUgYXMgd2VsbC4KKwkgKgorCSAqLworCWludCAoKnByb2MpKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSk7CisKKwl2b2lkICpkYXRhOworCisJLyoqCisJICogVGhlIG1lbWJlcnMgLmluLCAub3V0IGFyZSB1c2VkIHRvIHByb3ZpZGUgYSBzZXQgb2YgZmQncyBmb3IKKwkgKiBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGNhbGxlciBhbmQgdGhlIGNhbGxlZSBhcyBmb2xsb3dzOgorCSAqCisJICogLSBTcGVjaWZ5IDAgdG8gaGF2ZSBubyBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkLiAgVGhlIGNhbGxlZSB3aWxsCisJICogICByZWNlaXZlIC0xIGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LgorCSAqCisJICogLSBTcGVjaWZ5IDwgMCB0byBoYXZlIGEgcGlwZSBhbGxvY2F0ZWQ7IHN0YXJ0X2FzeW5jKCkgcmVwbGFjZXMKKwkgKiAgIHdpdGggdGhlIHBpcGUgRkQgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisJICoKKwkgKiAJLmluOiBSZXR1cm5zIHRoZSB3cml0YWJsZSBwaXBlIGVuZCBpbnRvIHdoaWNoIHRoZSBjYWxsZXIKKwkgKiAJd3JpdGVzOyB0aGUgcmVhZGFibGUgZW5kIG9mIHRoZSBwaXBlIGJlY29tZXMgdGhlIGZ1bmN0aW9uJ3MKKwkgKiAJaW4gYXJndW1lbnQuCisJICoKKwkgKiAJLm91dDogUmV0dXJucyB0aGUgcmVhZGFibGUgcGlwZSBlbmQgZnJvbSB3aGljaCB0aGUgY2FsbGVyCisJICogCXJlYWRzOyB0aGUgd3JpdGFibGUgZW5kIG9mIHRoZSBwaXBlIGJlY29tZXMgdGhlIGZ1bmN0aW9uJ3MKKwkgKiAJb3V0IGFyZ3VtZW50LgorCSAqCisJICogICBUaGUgY2FsbGVyIG9mIHN0YXJ0X2FzeW5jKCkgbXVzdCBjbG9zZSB0aGUgcmV0dXJuZWQgRkRzIGFmdGVyIGl0CisJICogICBoYXMgY29tcGxldGVkIHJlYWRpbmcgZnJvbS93cml0aW5nIGZyb20gdGhlbS4KKwkgKgorCSAqIC0gU3BlY2lmeSBhIGZpbGUgZGVzY3JpcHRvciA+IDAgdG8gYmUgdXNlZCBieSB0aGUgZnVuY3Rpb246CisJICoKKwkgKiAJLmluOiBUaGUgRkQgbXVzdCBiZSByZWFkYWJsZTsgaXQgYmVjb21lcyB0aGUgZnVuY3Rpb24ncyBpbi4KKwkgKiAJLm91dDogVGhlIEZEIG11c3QgYmUgd3JpdGFibGU7IGl0IGJlY29tZXMgdGhlIGZ1bmN0aW9uJ3Mgb3V0LgorCSAqCisJICogICBUaGUgc3BlY2lmaWVkIEZEIGlzIGNsb3NlZCBieSBzdGFydF9hc3luYygpLCBldmVuIGlmIGl0IGZhaWxzIHRvCisJICogICBydW4gdGhlIGZ1bmN0aW9uLgorCSAqLworCWludCBpbjsJCS8qIGNhbGxlciB3cml0ZXMgaGVyZSBhbmQgY2xvc2VzIGl0ICovCisJaW50IG91dDsJLyogY2FsbGVyIHJlYWRzIGZyb20gaGVyZSBhbmQgY2xvc2VzIGl0ICovCisjaWZkZWYgTk9fUFRIUkVBRFMKKwlwaWRfdCBwaWQ7CisjZWxzZQorCXB0aHJlYWRfdCB0aWQ7CisJaW50IHByb2NfaW47CisJaW50IHByb2Nfb3V0OworI2VuZGlmCisJaW50IGlzb2xhdGVfc2lncGlwZTsKK307CisKKy8qKgorICogUnVuIGEgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHkuIFRha2VzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3QKKyAqIGFzeW5jYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBhIHNldCBvZiBwaXBlIEZEcworICogZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZnVuY3Rpb24uIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KKyAqLworaW50IHN0YXJ0X2FzeW5jKHN0cnVjdCBhc3luYyAqYXN5bmMpOworCisvKioKKyAqIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHdhcworICogc3RhcnRlZCB3aXRoIHN0YXJ0X2FzeW5jKCkuCisgKi8KK2ludCBmaW5pc2hfYXN5bmMoc3RydWN0IGFzeW5jICphc3luYyk7CisKK2ludCBpbl9hc3luYyh2b2lkKTsKK2ludCBhc3luY193aXRoX2Zvcmsodm9pZCk7Cit2b2lkIGNoZWNrX3BpcGUoaW50IGVycik7CisKKy8qKgorICogVGhpcyBjYWxsYmFjayBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgY2hpbGQgcHJvY2VzcyBhbmQgcHJlbG9hZCB0aGUKKyAqIGVycm9yIGNoYW5uZWwgaWYgZGVzaXJlZC4gVGhlIHByZWxvYWRpbmcgb2YgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvCisgKiBoYXZlIGEgbWVzc2FnZSBwcmludGVkIGRpcmVjdGx5IGJlZm9yZSB0aGUgb3V0cHV0IG9mIHRoZSBjaGlsZCBwcm9jZXNzLgorICogcHBfY2IgaXMgdGhlIGNhbGxiYWNrIGNvb2tpZSBhcyBwYXNzZWQgdG8gcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbC4KKyAqIFlvdSBjYW4gc3RvcmUgYSBjaGlsZCBwcm9jZXNzIHNwZWNpZmljIGNhbGxiYWNrIGNvb2tpZSBpbiBwcF90YXNrX2NiLgorICoKKyAqIEV2ZW4gYWZ0ZXIgcmV0dXJuaW5nIDAgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSBwcm9jZXNzZXMsCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFnYWluIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHJ1bm5pbmcKKyAqIGNoaWxkIHByb2Nlc3Nlcy4KKyAqCisgKiBSZXR1cm4gMSBpZiB0aGUgbmV4dCBjaGlsZCBpcyByZWFkeSB0byBydW4uCisgKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgY3VycmVudGx5IG5vIG1vcmUgdGFza3MgdG8gYmUgcHJvY2Vzc2VkLgorICogVG8gc2VuZCBhIHNpZ25hbCB0byBvdGhlciBjaGlsZCBwcm9jZXNzZXMgZm9yIGFib3J0aW9uLAorICogcmV0dXJuIHRoZSBuZWdhdGl2ZSBzaWduYWwgbnVtYmVyLgorICovCit0eXBlZGVmIGludCAoKmdldF9uZXh0X3Rhc2tfZm4pKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjcCwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkJdm9pZCAqcHBfY2IsCisJCQkJdm9pZCAqKnBwX3Rhc2tfY2IpOworCisvKioKKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBwcm9ibGVtcyBzdGFydGluZworICogYSBuZXcgcHJvY2Vzcy4KKyAqCisgKiBZb3UgbXVzdCBub3Qgd3JpdGUgdG8gc3Rkb3V0IG9yIHN0ZGVyciBpbiB0aGlzIGZ1bmN0aW9uLiBBZGQgeW91cgorICogbWVzc2FnZSB0byB0aGUgc3RyYnVmIG91dCBpbnN0ZWFkLCB3aGljaCB3aWxsIGJlIHByaW50ZWQgd2l0aG91dAorICogbWVzc2luZyB1cCB0aGUgb3V0cHV0IG9mIHRoZSBvdGhlciBwYXJhbGxlbCBwcm9jZXNzZXMuCisgKgorICogcHBfY2IgaXMgdGhlIGNhbGxiYWNrIGNvb2tpZSBhcyBwYXNzZWQgaW50byBydW5fcHJvY2Vzc2VzX3BhcmFsbGVsLAorICogcHBfdGFza19jYiBpcyB0aGUgY2FsbGJhY2sgY29va2llIGFzIHBhc3NlZCBpbnRvIGdldF9uZXh0X3Rhc2tfZm4uCisgKgorICogUmV0dXJuIDAgdG8gY29udGludWUgdGhlIHBhcmFsbGVsIHByb2Nlc3NpbmcuIFRvIGFib3J0IHJldHVybiBub24gemVyby4KKyAqIFRvIHNlbmQgYSBzaWduYWwgdG8gb3RoZXIgY2hpbGQgcHJvY2Vzc2VzIGZvciBhYm9ydGlvbiwgcmV0dXJuCisgKiB0aGUgbmVnYXRpdmUgc2lnbmFsIG51bWJlci4KKyAqLwordHlwZWRlZiBpbnQgKCpzdGFydF9mYWlsdXJlX2ZuKShzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJCQkJdm9pZCAqcHBfY2IsCisJCQkJdm9pZCAqcHBfdGFza19jYik7CisKKy8qKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgb24gZXZlcnkgY2hpbGQgcHJvY2VzcyB0aGF0IGZpbmlzaGVkIHByb2Nlc3NpbmcuCisgKgorICogWW91IG11c3Qgbm90IHdyaXRlIHRvIHN0ZG91dCBvciBzdGRlcnIgaW4gdGhpcyBmdW5jdGlvbi4gQWRkIHlvdXIKKyAqIG1lc3NhZ2UgdG8gdGhlIHN0cmJ1ZiBvdXQgaW5zdGVhZCwgd2hpY2ggd2lsbCBiZSBwcmludGVkIHdpdGhvdXQKKyAqIG1lc3NpbmcgdXAgdGhlIG91dHB1dCBvZiB0aGUgb3RoZXIgcGFyYWxsZWwgcHJvY2Vzc2VzLgorICoKKyAqIHBwX2NiIGlzIHRoZSBjYWxsYmFjayBjb29raWUgYXMgcGFzc2VkIGludG8gcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbCwKKyAqIHBwX3Rhc2tfY2IgaXMgdGhlIGNhbGxiYWNrIGNvb2tpZSBhcyBwYXNzZWQgaW50byBnZXRfbmV4dF90YXNrX2ZuLgorICoKKyAqIFJldHVybiAwIHRvIGNvbnRpbnVlIHRoZSBwYXJhbGxlbCBwcm9jZXNzaW5nLiAgVG8gYWJvcnQgcmV0dXJuIG5vbiB6ZXJvLgorICogVG8gc2VuZCBhIHNpZ25hbCB0byBvdGhlciBjaGlsZCBwcm9jZXNzZXMgZm9yIGFib3J0aW9uLCByZXR1cm4KKyAqIHRoZSBuZWdhdGl2ZSBzaWduYWwgbnVtYmVyLgorICovCit0eXBlZGVmIGludCAoKnRhc2tfZmluaXNoZWRfZm4pKGludCByZXN1bHQsCisJCQkJc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCXZvaWQgKnBwX2NiLAorCQkJCXZvaWQgKnBwX3Rhc2tfY2IpOworCisvKioKKyAqIFJ1bnMgdXAgdG8gbiBwcm9jZXNzZXMgYXQgdGhlIHNhbWUgdGltZS4gV2hlbmV2ZXIgYSBwcm9jZXNzIGNhbiBiZQorICogc3RhcnRlZCwgdGhlIGNhbGxiYWNrIGdldF9uZXh0X3Rhc2tfZm4gaXMgY2FsbGVkIHRvIG9idGFpbiB0aGUgZGF0YQorICogcmVxdWlyZWQgdG8gc3RhcnQgYW5vdGhlciBjaGlsZCBwcm9jZXNzLgorICoKKyAqIFRoZSBjaGlsZHJlbiBzdGFydGVkIHZpYSB0aGlzIGZ1bmN0aW9uIHJ1biBpbiBwYXJhbGxlbC4gVGhlaXIgb3V0cHV0CisgKiAoYm90aCBzdGRvdXQgYW5kIHN0ZGVycikgaXMgcm91dGVkIHRvIHN0ZGVyciBpbiBhIG1hbm5lciB0aGF0IG91dHB1dAorICogZnJvbSBkaWZmZXJlbnQgdGFza3MgZG9lcyBub3QgaW50ZXJsZWF2ZS4KKyAqCisgKiBzdGFydF9mYWlsdXJlX2ZuIGFuZCB0YXNrX2ZpbmlzaGVkX2ZuIGNhbiBiZSBOVUxMIHRvIG9taXQgYW55CisgKiBzcGVjaWFsIGhhbmRsaW5nLgorICovCitpbnQgcnVuX3Byb2Nlc3Nlc19wYXJhbGxlbChpbnQgbiwKKwkJCSAgIGdldF9uZXh0X3Rhc2tfZm4sCisJCQkgICBzdGFydF9mYWlsdXJlX2ZuLAorCQkJICAgdGFza19maW5pc2hlZF9mbiwKKwkJCSAgIHZvaWQgKnBwX2NiKTsKK2ludCBydW5fcHJvY2Vzc2VzX3BhcmFsbGVsX3RyMihpbnQgbiwgZ2V0X25leHRfdGFza19mbiwgc3RhcnRfZmFpbHVyZV9mbiwKKwkJCSAgICAgICB0YXNrX2ZpbmlzaGVkX2ZuLCB2b2lkICpwcF9jYiwKKwkJCSAgICAgICBjb25zdCBjaGFyICp0cjJfY2F0ZWdvcnksIGNvbnN0IGNoYXIgKnRyMl9sYWJlbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2VuZC1wYWNrLmMgYi9zZW5kLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDA3ODQxCi0tLSAvZGV2L251bGwKKysrIGIvc2VuZC1wYWNrLmMKQEAgLTAsMCArMSw2MzAgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzZW5kLXBhY2suaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBvcHRpb25fcGFyc2VfcHVzaF9zaWduZWQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpIHsKKwkJKihpbnQgKikob3B0LT52YWx1ZSkgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSOworCQlyZXR1cm4gMDsKKwl9CisJc3dpdGNoIChnaXRfcGFyc2VfbWF5YmVfYm9vbChhcmcpKSB7CisJY2FzZSAxOgorCQkqKGludCAqKShvcHQtPnZhbHVlKSA9IFNFTkRfUEFDS19QVVNIX0NFUlRfQUxXQVlTOworCQlyZXR1cm4gMDsKKwljYXNlIDA6CisJCSooaW50ICopKG9wdC0+dmFsdWUpID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9ORVZFUjsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY2FzZWNtcCgiaWYtYXNrZWQiLCBhcmcpKSB7CisJCSooaW50ICopKG9wdC0+dmFsdWUpID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9JRl9BU0tFRDsKKwkJcmV0dXJuIDA7CisJfQorCWRpZSgiYmFkICVzIGFyZ3VtZW50OiAlcyIsIG9wdC0+bG9uZ19uYW1lLCBhcmcpOworfQorCitzdGF0aWMgdm9pZCBmZWVkX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIEZJTEUgKmZoLCBpbnQgbmVnYXRpdmUpCit7CisJaWYgKG5lZ2F0aXZlICYmCisJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncyhvaWQsCisJCQkJCU9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUIHwKKwkJCQkJT0JKRUNUX0lORk9fUVVJQ0spKQorCQlyZXR1cm47CisKKwlpZiAobmVnYXRpdmUpCisJCXB1dGMoJ14nLCBmaCk7CisJZnB1dHMob2lkX3RvX2hleChvaWQpLCBmaCk7CisJcHV0YygnXG4nLCBmaCk7Cit9CisKKy8qCisgKiBNYWtlIGEgcGFjayBzdHJlYW0gYW5kIHNwaXQgaXQgb3V0IGludG8gZmlsZSBkZXNjcmlwdG9yIGZkCisgKi8KK3N0YXRpYyBpbnQgcGFja19vYmplY3RzKGludCBmZCwgc3RydWN0IHJlZiAqcmVmcywgc3RydWN0IG9pZF9hcnJheSAqZXh0cmEsIHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncykKK3sKKwkvKgorCSAqIFRoZSBjaGlsZCBiZWNvbWVzIHBhY2stb2JqZWN0cyAtLXJldnM7IHdlIGZlZWQKKwkgKiB0aGUgcmV2aXNpb24gcGFyYW1ldGVycyB0byBpdCB2aWEgaXRzIHN0ZGluIGFuZAorCSAqIGxldCBpdHMgc3Rkb3V0IGdvIGJhY2sgdG8gdGhlIG90aGVyIGVuZC4KKwkgKi8KKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwbyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlGSUxFICpwb19pbjsKKwlpbnQgaTsKKwlpbnQgcmM7CisKKwlhcmd2X2FycmF5X3B1c2goJnBvLmFyZ3MsICJwYWNrLW9iamVjdHMiKTsKKwlhcmd2X2FycmF5X3B1c2goJnBvLmFyZ3MsICItLWFsbC1wcm9ncmVzcy1pbXBsaWVkIik7CisJYXJndl9hcnJheV9wdXNoKCZwby5hcmdzLCAiLS1yZXZzIik7CisJYXJndl9hcnJheV9wdXNoKCZwby5hcmdzLCAiLS1zdGRvdXQiKTsKKwlpZiAoYXJncy0+dXNlX3RoaW5fcGFjaykKKwkJYXJndl9hcnJheV9wdXNoKCZwby5hcmdzLCAiLS10aGluIik7CisJaWYgKGFyZ3MtPnVzZV9vZnNfZGVsdGEpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcG8uYXJncywgIi0tZGVsdGEtYmFzZS1vZmZzZXQiKTsKKwlpZiAoYXJncy0+cXVpZXQgfHwgIWFyZ3MtPnByb2dyZXNzKQorCQlhcmd2X2FycmF5X3B1c2goJnBvLmFyZ3MsICItcSIpOworCWlmIChhcmdzLT5wcm9ncmVzcykKKwkJYXJndl9hcnJheV9wdXNoKCZwby5hcmdzLCAiLS1wcm9ncmVzcyIpOworCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKQorCQlhcmd2X2FycmF5X3B1c2goJnBvLmFyZ3MsICItLXNoYWxsb3ciKTsKKwlwby5pbiA9IC0xOworCXBvLm91dCA9IGFyZ3MtPnN0YXRlbGVzc19ycGMgPyAtMSA6IGZkOworCXBvLmdpdF9jbWQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZwbykpCisJCWRpZV9lcnJubygiZ2l0IHBhY2stb2JqZWN0cyBmYWlsZWQiKTsKKworCS8qCisJICogV2UgZmVlZCB0aGUgcGFjay1vYmplY3RzIHdlIGp1c3Qgc3Bhd25lZCB3aXRoIHJldmlzaW9uCisJICogcGFyYW1ldGVycyBieSB3cml0aW5nIHRvIHRoZSBwaXBlLgorCSAqLworCXBvX2luID0geGZkb3Blbihwby5pbiwgInciKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXh0cmEtPm5yOyBpKyspCisJCWZlZWRfb2JqZWN0KCZleHRyYS0+b2lkW2ldLCBwb19pbiwgMSk7CisKKwl3aGlsZSAocmVmcykgeworCQlpZiAoIWlzX251bGxfb2lkKCZyZWZzLT5vbGRfb2lkKSkKKwkJCWZlZWRfb2JqZWN0KCZyZWZzLT5vbGRfb2lkLCBwb19pbiwgMSk7CisJCWlmICghaXNfbnVsbF9vaWQoJnJlZnMtPm5ld19vaWQpKQorCQkJZmVlZF9vYmplY3QoJnJlZnMtPm5ld19vaWQsIHBvX2luLCAwKTsKKwkJcmVmcyA9IHJlZnMtPm5leHQ7CisJfQorCisJZmZsdXNoKHBvX2luKTsKKwlpZiAoZmVycm9yKHBvX2luKSkKKwkJZGllX2Vycm5vKCJlcnJvciB3cml0aW5nIHRvIHBhY2stb2JqZWN0cyIpOworCWZjbG9zZShwb19pbik7CisKKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykgeworCQljaGFyICpidWYgPSB4bWFsbG9jKExBUkdFX1BBQ0tFVF9NQVgpOworCQl3aGlsZSAoMSkgeworCQkJc3NpemVfdCBuID0geHJlYWQocG8ub3V0LCBidWYsIExBUkdFX1BBQ0tFVF9NQVgpOworCQkJaWYgKG4gPD0gMCkKKwkJCQlicmVhazsKKwkJCXNlbmRfc2lkZWJhbmQoZmQsIC0xLCBidWYsIG4sIExBUkdFX1BBQ0tFVF9NQVgpOworCQl9CisJCWZyZWUoYnVmKTsKKwkJY2xvc2UocG8ub3V0KTsKKwkJcG8ub3V0ID0gLTE7CisJfQorCisJcmMgPSBmaW5pc2hfY29tbWFuZCgmcG8pOworCWlmIChyYykgeworCQkvKgorCQkgKiBGb3IgYSBub3JtYWwgbm9uLXplcm8gZXhpdCwgd2UgYXNzdW1lIHBhY2stb2JqZWN0cyB3cm90ZQorCQkgKiBzb21ldGhpbmcgdXNlZnVsIHRvIHN0ZGVyci4gRm9yIGRlYXRoIGJ5IHNpZ25hbCwgdGhvdWdoLAorCQkgKiB3ZSBzaG91bGQgbWVudGlvbiBpdCB0byB0aGUgdXNlci4gVGhlIGV4Y2VwdGlvbiBpcyBTSUdQSVBFCisJCSAqICgxNDEpLCBiZWNhdXNlIHRoYXQncyBhIG5vcm1hbCBvY2N1cnJlbmNlIGlmIHRoZSByZW1vdGUgZW5kCisJCSAqIGhhbmdzIHVwIChhbmQgd2UnbGwgcmVwb3J0IHRoYXQgYnkgdHJ5aW5nIHRvIHJlYWQgdGhlIHVucGFjaworCQkgKiBzdGF0dXMpLgorCQkgKi8KKwkJaWYgKHJjID4gMTI4ICYmIHJjICE9IDE0MSkKKwkJCWVycm9yKCJwYWNrLW9iamVjdHMgZGllZCBvZiBzaWduYWwgJWQiLCByYyAtIDEyOCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVjZWl2ZV91bnBhY2tfc3RhdHVzKHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZWFkZXIpCit7CisJaWYgKHBhY2tldF9yZWFkZXJfcmVhZChyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX05PUk1BTCkKKwkJcmV0dXJuIGVycm9yKF8oInVuZXhwZWN0ZWQgZmx1c2ggcGFja2V0IHdoaWxlIHJlYWRpbmcgcmVtb3RlIHVucGFjayBzdGF0dXMiKSk7CisJaWYgKCFza2lwX3ByZWZpeChyZWFkZXItPmxpbmUsICJ1bnBhY2sgIiwgJnJlYWRlci0+bGluZSkpCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gcGFyc2UgcmVtb3RlIHVucGFjayBzdGF0dXM6ICVzIiksIHJlYWRlci0+bGluZSk7CisJaWYgKHN0cmNtcChyZWFkZXItPmxpbmUsICJvayIpKQorCQlyZXR1cm4gZXJyb3IoXygicmVtb3RlIHVucGFjayBmYWlsZWQ6ICVzIiksIHJlYWRlci0+bGluZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVjZWl2ZV9zdGF0dXMoc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlYWRlciwgc3RydWN0IHJlZiAqcmVmcykKK3sKKwlzdHJ1Y3QgcmVmICpoaW50OworCWludCByZXQ7CisKKwloaW50ID0gTlVMTDsKKwlyZXQgPSByZWNlaXZlX3VucGFja19zdGF0dXMocmVhZGVyKTsKKwl3aGlsZSAoMSkgeworCQljb25zdCBjaGFyICpyZWZuYW1lOworCQljaGFyICptc2c7CisJCWlmIChwYWNrZXRfcmVhZGVyX3JlYWQocmVhZGVyKSAhPSBQQUNLRVRfUkVBRF9OT1JNQUwpCisJCQlicmVhazsKKwkJaWYgKCFzdGFydHNfd2l0aChyZWFkZXItPmxpbmUsICJvayAiKSAmJiAhc3RhcnRzX3dpdGgocmVhZGVyLT5saW5lLCAibmcgIikpIHsKKwkJCWVycm9yKCJpbnZhbGlkIHJlZiBzdGF0dXMgZnJvbSByZW1vdGU6ICVzIiwgcmVhZGVyLT5saW5lKTsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKworCQlyZWZuYW1lID0gcmVhZGVyLT5saW5lICsgMzsKKwkJbXNnID0gc3RyY2hyKHJlZm5hbWUsICcgJyk7CisJCWlmIChtc2cpCisJCQkqbXNnKysgPSAnXDAnOworCisJCS8qIGZpcnN0IHRyeSBzZWFyY2hpbmcgYXQgb3VyIGhpbnQsIGZhbGxpbmcgYmFjayB0byBhbGwgcmVmcyAqLworCQlpZiAoaGludCkKKwkJCWhpbnQgPSBmaW5kX3JlZl9ieV9uYW1lKGhpbnQsIHJlZm5hbWUpOworCQlpZiAoIWhpbnQpCisJCQloaW50ID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCByZWZuYW1lKTsKKwkJaWYgKCFoaW50KSB7CisJCQl3YXJuaW5nKCJyZW1vdGUgcmVwb3J0ZWQgc3RhdHVzIG9uIHVua25vd24gcmVmOiAlcyIsCisJCQkJCXJlZm5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGhpbnQtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX0VYUEVDVElOR19SRVBPUlQpIHsKKwkJCXdhcm5pbmcoInJlbW90ZSByZXBvcnRlZCBzdGF0dXMgb24gdW5leHBlY3RlZCByZWY6ICVzIiwKKwkJCQkJcmVmbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChyZWFkZXItPmxpbmVbMF0gPT0gJ28nICYmIHJlYWRlci0+bGluZVsxXSA9PSAnaycpCisJCQloaW50LT5zdGF0dXMgPSBSRUZfU1RBVFVTX09LOworCQllbHNlIHsKKwkJCWhpbnQtPnN0YXR1cyA9IFJFRl9TVEFUVVNfUkVNT1RFX1JFSkVDVDsKKwkJCXJldCA9IC0xOworCQl9CisJCWhpbnQtPnJlbW90ZV9zdGF0dXMgPSB4c3RyZHVwX29yX251bGwobXNnKTsKKwkJLyogc3RhcnQgb3VyIG5leHQgc2VhcmNoIGZyb20gdGhlIG5leHQgcmVmICovCisJCWhpbnQgPSBoaW50LT5uZXh0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpZGViYW5kX2RlbXV4KGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKmZkID0gZGF0YSwgcmV0OworCWlmIChhc3luY193aXRoX2ZvcmsoKSkKKwkJY2xvc2UoZmRbMV0pOworCXJldCA9IHJlY3Zfc2lkZWJhbmQoInNlbmQtcGFjayIsIGZkWzBdLCBvdXQpOworCWNsb3NlKG91dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHNfY2IoY29uc3Qgc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQsIHZvaWQgKmNiKQoreworCXN0cnVjdCBzdHJidWYgKnNiID0gY2I7CisJaWYgKGdyYWZ0LT5ucl9wYXJlbnQgPT0gLTEpCisJCXBhY2tldF9idWZfd3JpdGUoc2IsICJzaGFsbG93ICVzXG4iLCBvaWRfdG9faGV4KCZncmFmdC0+b2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkdmVydGlzZV9zaGFsbG93X2dyYWZ0c19idWYoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaWYgKCFpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKQorCQlyZXR1cm47CisJZm9yX2VhY2hfY29tbWl0X2dyYWZ0KGFkdmVydGlzZV9zaGFsbG93X2dyYWZ0c19jYiwgc2IpOworfQorCisjZGVmaW5lIENIRUNLX1JFRl9OT19QVVNIIC0xCisjZGVmaW5lIENIRUNLX1JFRl9TVEFUVVNfUkVKRUNURUQgLTIKKyNkZWZpbmUgQ0hFQ0tfUkVGX1VQVE9EQVRFIC0zCitzdGF0aWMgaW50IGNoZWNrX3RvX3NlbmRfdXBkYXRlKGNvbnN0IHN0cnVjdCByZWYgKnJlZiwgY29uc3Qgc3RydWN0IHNlbmRfcGFja19hcmdzICphcmdzKQoreworCWlmICghcmVmLT5wZWVyX3JlZiAmJiAhYXJncy0+c2VuZF9taXJyb3IpCisJCXJldHVybiBDSEVDS19SRUZfTk9fUFVTSDsKKworCS8qIENoZWNrIGZvciBzdGF0dXNlcyBzZXQgYnkgc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2goKSAqLworCXN3aXRjaCAocmVmLT5zdGF0dXMpIHsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgorCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfQUxSRUFEWV9FWElTVFM6CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9GRVRDSF9GSVJTVDoKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05FRURTX0ZPUkNFOgorCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEU6CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURToKKwkJcmV0dXJuIENIRUNLX1JFRl9TVEFUVVNfUkVKRUNURUQ7CisJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQlyZXR1cm4gQ0hFQ0tfUkVGX1VQVE9EQVRFOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSwgb3IgdGhlIGVuZCBvZiBidWZmZXIuCisgKgorICogTkVFRFNXT1JLOiBwZXJoYXBzIG1vdmUgdGhpcyB0byBnaXQtY29tcGF0LXV0aWwuaCBvciBzb21ld2hlcmUgYW5kCisgKiBjb252ZXJ0IG1hbnkgc2ltaWxhciB1c2VzIGZvdW5kIGJ5ICJnaXQgZ3JlcCAtQTQgbWVtY2hyIi4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKm5leHRfbGluZShjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKm5sID0gbWVtY2hyKGxpbmUsICdcbicsIGxlbik7CisJaWYgKCFubCkKKwkJcmV0dXJuIGxpbmUgKyBsZW47IC8qIGluY29tcGxldGUgbGluZSAqLworCXJldHVybiBubCArIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJhdGVfcHVzaF9jZXJ0KHN0cnVjdCBzdHJidWYgKnJlcV9idWYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJCSAgICAgIHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmNhcF9zdHJpbmcsCisJCQkgICAgICBjb25zdCBjaGFyICpwdXNoX2NlcnRfbm9uY2UpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWNoYXIgKnNpZ25pbmdfa2V5ID0geHN0cmR1cChnZXRfc2lnbmluZ19rZXkoKSk7CisJY29uc3QgY2hhciAqY3AsICpucDsKKwlzdHJ1Y3Qgc3RyYnVmIGNlcnQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgdXBkYXRlX3NlZW4gPSAwOworCisJc3RyYnVmX2FkZHN0cigmY2VydCwgImNlcnRpZmljYXRlIHZlcnNpb24gMC4xXG4iKTsKKwlzdHJidWZfYWRkZigmY2VydCwgInB1c2hlciAlcyAiLCBzaWduaW5nX2tleSk7CisJZGF0ZXN0YW1wKCZjZXJ0KTsKKwlzdHJidWZfYWRkY2goJmNlcnQsICdcbicpOworCWlmIChhcmdzLT51cmwgJiYgKmFyZ3MtPnVybCkgeworCQljaGFyICphbm9uX3VybCA9IHRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKGFyZ3MtPnVybCk7CisJCXN0cmJ1Zl9hZGRmKCZjZXJ0LCAicHVzaGVlICVzXG4iLCBhbm9uX3VybCk7CisJCWZyZWUoYW5vbl91cmwpOworCX0KKwlpZiAocHVzaF9jZXJ0X25vbmNlWzBdKQorCQlzdHJidWZfYWRkZigmY2VydCwgIm5vbmNlICVzXG4iLCBwdXNoX2NlcnRfbm9uY2UpOworCWlmIChhcmdzLT5wdXNoX29wdGlvbnMpCisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgYXJncy0+cHVzaF9vcHRpb25zKQorCQkJc3RyYnVmX2FkZGYoJmNlcnQsICJwdXNoLW9wdGlvbiAlc1xuIiwgaXRlbS0+c3RyaW5nKTsKKwlzdHJidWZfYWRkc3RyKCZjZXJ0LCAiXG4iKTsKKworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmIChjaGVja190b19zZW5kX3VwZGF0ZShyZWYsIGFyZ3MpIDwgMCkKKwkJCWNvbnRpbnVlOworCQl1cGRhdGVfc2VlbiA9IDE7CisJCXN0cmJ1Zl9hZGRmKCZjZXJ0LCAiJXMgJXMgJXNcbiIsCisJCQkgICAgb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkKSwKKwkJCSAgICBvaWRfdG9faGV4KCZyZWYtPm5ld19vaWQpLAorCQkJICAgIHJlZi0+bmFtZSk7CisJfQorCWlmICghdXBkYXRlX3NlZW4pCisJCWdvdG8gZnJlZV9yZXR1cm47CisKKwlpZiAoc2lnbl9idWZmZXIoJmNlcnQsICZjZXJ0LCBzaWduaW5nX2tleSkpCisJCWRpZShfKCJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIpKTsKKworCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwgInB1c2gtY2VydCVjJXMiLCAwLCBjYXBfc3RyaW5nKTsKKwlmb3IgKGNwID0gY2VydC5idWY7IGNwIDwgY2VydC5idWYgKyBjZXJ0LmxlbjsgY3AgPSBucCkgeworCQlucCA9IG5leHRfbGluZShjcCwgY2VydC5idWYgKyBjZXJ0LmxlbiAtIGNwKTsKKwkJcGFja2V0X2J1Zl93cml0ZShyZXFfYnVmLAorCQkJCSAiJS4qcyIsIChpbnQpKG5wIC0gY3ApLCBjcCk7CisJfQorCXBhY2tldF9idWZfd3JpdGUocmVxX2J1ZiwgInB1c2gtY2VydC1lbmRcbiIpOworCitmcmVlX3JldHVybjoKKwlmcmVlKHNpZ25pbmdfa2V5KTsKKwlzdHJidWZfcmVsZWFzZSgmY2VydCk7CisJcmV0dXJuIHVwZGF0ZV9zZWVuOworfQorCisKK3N0YXRpYyBpbnQgYXRvbWljX3B1c2hfZmFpbHVyZShzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkgICAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJCQkgICAgICAgc3RydWN0IHJlZiAqZmFpbGluZ19yZWYpCit7CisJc3RydWN0IHJlZiAqcmVmOworCS8qIE1hcmsgb3RoZXIgcmVmcyBhcyBmYWlsZWQgKi8KKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIXJlZi0+cGVlcl9yZWYgJiYgIWFyZ3MtPnNlbmRfbWlycm9yKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVDoKKwkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19BVE9NSUNfUFVTSF9GQUlMRUQ7CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOyAvKiBkbyBub3RoaW5nICovCisJCX0KKwl9CisJcmV0dXJuIGVycm9yKCJhdG9taWMgcHVzaCBmYWlsZWQgZm9yIHJlZiAlcy4gc3RhdHVzOiAlZFxuIiwKKwkJICAgICBmYWlsaW5nX3JlZi0+bmFtZSwgZmFpbGluZ19yZWYtPnN0YXR1cyk7Cit9CisKKyNkZWZpbmUgTk9OQ0VfTEVOX0xJTUlUIDI1NgorCitzdGF0aWMgdm9pZCByZWplY3RfaW52YWxpZF9ub25jZShjb25zdCBjaGFyICpub25jZSwgaW50IGxlbikKK3sKKwlpbnQgaSA9IDA7CisKKwlpZiAoTk9OQ0VfTEVOX0xJTUlUIDw9IGxlbikKKwkJZGllKCJ0aGUgcmVjZWl2aW5nIGVuZCBhc2tlZCB0byBzaWduIGFuIGludmFsaWQgbm9uY2UgPCUuKnM+IiwKKwkJICAgIGxlbiwgbm9uY2UpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWludCBjaCA9IG5vbmNlW2ldICYgMHhGRjsKKwkJaWYgKGlzYWxudW0oY2gpIHx8CisJCSAgICBjaCA9PSAnLScgfHwgY2ggPT0gJy4nIHx8CisJCSAgICBjaCA9PSAnLycgfHwgY2ggPT0gJysnIHx8CisJCSAgICBjaCA9PSAnPScgfHwgY2ggPT0gJ18nKQorCQkJY29udGludWU7CisJCWRpZSgidGhlIHJlY2VpdmluZyBlbmQgYXNrZWQgdG8gc2lnbiBhbiBpbnZhbGlkIG5vbmNlIDwlLipzPiIsCisJCSAgICBsZW4sIG5vbmNlKTsKKwl9Cit9CisKK2ludCBzZW5kX3BhY2soc3RydWN0IHNlbmRfcGFja19hcmdzICphcmdzLAorCSAgICAgIGludCBmZFtdLCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubiwKKwkgICAgICBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkgICAgICBzdHJ1Y3Qgb2lkX2FycmF5ICpleHRyYV9oYXZlKQoreworCWludCBpbiA9IGZkWzBdOworCWludCBvdXQgPSBmZFsxXTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlcV9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNhcF9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmICpyZWY7CisJaW50IG5lZWRfcGFja19kYXRhID0gMDsKKwlpbnQgYWxsb3dfZGVsZXRpbmdfcmVmcyA9IDA7CisJaW50IHN0YXR1c19yZXBvcnQgPSAwOworCWludCB1c2Vfc2lkZWJhbmQgPSAwOworCWludCBxdWlldF9zdXBwb3J0ZWQgPSAwOworCWludCBhZ2VudF9zdXBwb3J0ZWQgPSAwOworCWludCB1c2VfYXRvbWljID0gMDsKKwlpbnQgYXRvbWljX3N1cHBvcnRlZCA9IDA7CisJaW50IHVzZV9wdXNoX29wdGlvbnMgPSAwOworCWludCBwdXNoX29wdGlvbnNfc3VwcG9ydGVkID0gMDsKKwl1bnNpZ25lZCBjbWRzX3NlbnQgPSAwOworCWludCByZXQ7CisJc3RydWN0IGFzeW5jIGRlbXV4OworCWNvbnN0IGNoYXIgKnB1c2hfY2VydF9ub25jZSA9IE5VTEw7CisJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOworCisJLyogRG9lcyB0aGUgb3RoZXIgZW5kIHN1cHBvcnQgdGhlIHJlcG9ydGluZz8gKi8KKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJyZXBvcnQtc3RhdHVzIikpCisJCXN0YXR1c19yZXBvcnQgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImRlbGV0ZS1yZWZzIikpCisJCWFsbG93X2RlbGV0aW5nX3JlZnMgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm9mcy1kZWx0YSIpKQorCQlhcmdzLT51c2Vfb2ZzX2RlbHRhID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQtNjRrIikpCisJCXVzZV9zaWRlYmFuZCA9IDE7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygicXVpZXQiKSkKKwkJcXVpZXRfc3VwcG9ydGVkID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJhZ2VudCIpKQorCQlhZ2VudF9zdXBwb3J0ZWQgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm5vLXRoaW4iKSkKKwkJYXJncy0+dXNlX3RoaW5fcGFjayA9IDA7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygiYXRvbWljIikpCisJCWF0b21pY19zdXBwb3J0ZWQgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoInB1c2gtb3B0aW9ucyIpKQorCQlwdXNoX29wdGlvbnNfc3VwcG9ydGVkID0gMTsKKworCWlmIChhcmdzLT5wdXNoX2NlcnQgIT0gU0VORF9QQUNLX1BVU0hfQ0VSVF9ORVZFUikgeworCQlpbnQgbGVuOworCQlwdXNoX2NlcnRfbm9uY2UgPSBzZXJ2ZXJfZmVhdHVyZV92YWx1ZSgicHVzaC1jZXJ0IiwgJmxlbik7CisJCWlmIChwdXNoX2NlcnRfbm9uY2UpIHsKKwkJCXJlamVjdF9pbnZhbGlkX25vbmNlKHB1c2hfY2VydF9ub25jZSwgbGVuKTsKKwkJCXB1c2hfY2VydF9ub25jZSA9IHhtZW1kdXB6KHB1c2hfY2VydF9ub25jZSwgbGVuKTsKKwkJfSBlbHNlIGlmIChhcmdzLT5wdXNoX2NlcnQgPT0gU0VORF9QQUNLX1BVU0hfQ0VSVF9BTFdBWVMpIHsKKwkJCWRpZShfKCJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giKSk7CisJCX0gZWxzZSBpZiAoYXJncy0+cHVzaF9jZXJ0ID09IFNFTkRfUEFDS19QVVNIX0NFUlRfSUZfQVNLRUQpIHsKKwkJCXdhcm5pbmcoXygibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSIKKwkJCQkgICIgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIgorCQkJCSAgIiBwdXNoIikpOworCQl9CisJfQorCisJaWYgKCFyZW1vdGVfcmVmcykgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKwkJCSJQZXJoYXBzIHlvdSBzaG91bGQgc3BlY2lmeSBhIGJyYW5jaCBzdWNoIGFzICdtYXN0ZXInLlxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoYXJncy0+YXRvbWljICYmICFhdG9taWNfc3VwcG9ydGVkKQorCQlkaWUoXygidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIikpOworCisJdXNlX2F0b21pYyA9IGF0b21pY19zdXBwb3J0ZWQgJiYgYXJncy0+YXRvbWljOworCisJaWYgKGFyZ3MtPnB1c2hfb3B0aW9ucyAmJiAhcHVzaF9vcHRpb25zX3N1cHBvcnRlZCkKKwkJZGllKF8oInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaCBvcHRpb25zIikpOworCisJdXNlX3B1c2hfb3B0aW9ucyA9IHB1c2hfb3B0aW9uc19zdXBwb3J0ZWQgJiYgYXJncy0+cHVzaF9vcHRpb25zOworCisJaWYgKHN0YXR1c19yZXBvcnQpCisJCXN0cmJ1Zl9hZGRzdHIoJmNhcF9idWYsICIgcmVwb3J0LXN0YXR1cyIpOworCWlmICh1c2Vfc2lkZWJhbmQpCisJCXN0cmJ1Zl9hZGRzdHIoJmNhcF9idWYsICIgc2lkZS1iYW5kLTY0ayIpOworCWlmIChxdWlldF9zdXBwb3J0ZWQgJiYgKGFyZ3MtPnF1aWV0IHx8ICFhcmdzLT5wcm9ncmVzcykpCisJCXN0cmJ1Zl9hZGRzdHIoJmNhcF9idWYsICIgcXVpZXQiKTsKKwlpZiAodXNlX2F0b21pYykKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiBhdG9taWMiKTsKKwlpZiAodXNlX3B1c2hfb3B0aW9ucykKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiBwdXNoLW9wdGlvbnMiKTsKKwlpZiAoYWdlbnRfc3VwcG9ydGVkKQorCQlzdHJidWZfYWRkZigmY2FwX2J1ZiwgIiBhZ2VudD0lcyIsIGdpdF91c2VyX2FnZW50X3Nhbml0aXplZCgpKTsKKworCS8qCisJICogTkVFRFNXT1JLOiB3aHkgZG9lcyBkZWxldGUtcmVmcyBoYXZlIHRvIGJlIHNvIHNwZWNpZmljIHRvCisJICogc2VuZC1wYWNrIG1hY2hpbmVyeSB0aGF0IHNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKCkgY2Fubm90CisJICogc2V0IHRoaXMgYml0IGZvciB1cz8/PworCSAqLworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlpZiAocmVmLT5kZWxldGlvbiAmJiAhYWxsb3dfZGVsZXRpbmdfcmVmcykKKwkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ERUxFVEU7CisKKwlpZiAoIWFyZ3MtPmRyeV9ydW4pCisJCWFkdmVydGlzZV9zaGFsbG93X2dyYWZ0c19idWYoJnJlcV9idWYpOworCisJaWYgKCFhcmdzLT5kcnlfcnVuICYmIHB1c2hfY2VydF9ub25jZSkKKwkJY21kc19zZW50ID0gZ2VuZXJhdGVfcHVzaF9jZXJ0KCZyZXFfYnVmLCByZW1vdGVfcmVmcywgYXJncywKKwkJCQkJICAgICAgIGNhcF9idWYuYnVmLCBwdXNoX2NlcnRfbm9uY2UpOworCisJLyoKKwkgKiBDbGVhciB0aGUgc3RhdHVzIGZvciBlYWNoIHJlZiBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gc2VuZAorCSAqIHRoZSBwYWNrIGRhdGEuCisJICovCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3dpdGNoIChjaGVja190b19zZW5kX3VwZGF0ZShyZWYsIGFyZ3MpKSB7CisJCWNhc2UgMDogLyogbm8gZXJyb3IgKi8KKwkJCWJyZWFrOworCQljYXNlIENIRUNLX1JFRl9TVEFUVVNfUkVKRUNURUQ6CisJCQkvKgorCQkJICogV2hlbiB3ZSBrbm93IHRoZSBzZXJ2ZXIgd291bGQgcmVqZWN0IGEgcmVmIHVwZGF0ZSBpZgorCQkJICogd2Ugd2VyZSB0byBzZW5kIGl0IGFuZCB3ZSdyZSB0cnlpbmcgdG8gc2VuZCB0aGUgcmVmcworCQkJICogYXRvbWljYWxseSwgYWJvcnQgdGhlIHdob2xlIG9wZXJhdGlvbi4KKwkJCSAqLworCQkJaWYgKHVzZV9hdG9taWMpIHsKKwkJCQlzdHJidWZfcmVsZWFzZSgmcmVxX2J1Zik7CisJCQkJc3RyYnVmX3JlbGVhc2UoJmNhcF9idWYpOworCQkJCXJldHVybiBhdG9taWNfcHVzaF9mYWlsdXJlKGFyZ3MsIHJlbW90ZV9yZWZzLCByZWYpOworCQkJfQorCQkJLyogZWxzZSBmYWxsdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFyZWYtPmRlbGV0aW9uKQorCQkJbmVlZF9wYWNrX2RhdGEgPSAxOworCisJCWlmIChhcmdzLT5kcnlfcnVuIHx8ICFzdGF0dXNfcmVwb3J0KQorCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX09LOworCQllbHNlCisJCQlyZWYtPnN0YXR1cyA9IFJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVDsKKwl9CisKKwkvKgorCSAqIEZpbmFsbHksIHRlbGwgdGhlIG90aGVyIGVuZCEKKwkgKi8KKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljaGFyICpvbGRfaGV4LCAqbmV3X2hleDsKKworCQlpZiAoYXJncy0+ZHJ5X3J1biB8fCBwdXNoX2NlcnRfbm9uY2UpCisJCQljb250aW51ZTsKKworCQlpZiAoY2hlY2tfdG9fc2VuZF91cGRhdGUocmVmLCBhcmdzKSA8IDApCisJCQljb250aW51ZTsKKworCQlvbGRfaGV4ID0gb2lkX3RvX2hleCgmcmVmLT5vbGRfb2lkKTsKKwkJbmV3X2hleCA9IG9pZF90b19oZXgoJnJlZi0+bmV3X29pZCk7CisJCWlmICghY21kc19zZW50KSB7CisJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLAorCQkJCQkgIiVzICVzICVzJWMlcyIsCisJCQkJCSBvbGRfaGV4LCBuZXdfaGV4LCByZWYtPm5hbWUsIDAsCisJCQkJCSBjYXBfYnVmLmJ1Zik7CisJCQljbWRzX3NlbnQgPSAxOworCQl9IGVsc2UgeworCQkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgIiVzICVzICVzIiwKKwkJCQkJIG9sZF9oZXgsIG5ld19oZXgsIHJlZi0+bmFtZSk7CisJCX0KKwl9CisKKwlpZiAodXNlX3B1c2hfb3B0aW9ucykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlwYWNrZXRfYnVmX2ZsdXNoKCZyZXFfYnVmKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBhcmdzLT5wdXNoX29wdGlvbnMpCisJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiJXMiLCBpdGVtLT5zdHJpbmcpOworCX0KKworCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjKSB7CisJCWlmICghYXJncy0+ZHJ5X3J1biAmJiAoY21kc19zZW50IHx8IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpKSB7CisJCQlwYWNrZXRfYnVmX2ZsdXNoKCZyZXFfYnVmKTsKKwkJCXNlbmRfc2lkZWJhbmQob3V0LCAtMSwgcmVxX2J1Zi5idWYsIHJlcV9idWYubGVuLCBMQVJHRV9QQUNLRVRfTUFYKTsKKwkJfQorCX0gZWxzZSB7CisJCXdyaXRlX29yX2RpZShvdXQsIHJlcV9idWYuYnVmLCByZXFfYnVmLmxlbik7CisJCXBhY2tldF9mbHVzaChvdXQpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcmVxX2J1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmNhcF9idWYpOworCisJaWYgKHVzZV9zaWRlYmFuZCAmJiBjbWRzX3NlbnQpIHsKKwkJbWVtc2V0KCZkZW11eCwgMCwgc2l6ZW9mKGRlbXV4KSk7CisJCWRlbXV4LnByb2MgPSBzaWRlYmFuZF9kZW11eDsKKwkJZGVtdXguZGF0YSA9IGZkOworCQlkZW11eC5vdXQgPSAtMTsKKwkJZGVtdXguaXNvbGF0ZV9zaWdwaXBlID0gMTsKKwkJaWYgKHN0YXJ0X2FzeW5jKCZkZW11eCkpCisJCQlkaWUoInNlbmQtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiKTsKKwkJaW4gPSBkZW11eC5vdXQ7CisJfQorCisJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIGluLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwlpZiAobmVlZF9wYWNrX2RhdGEgJiYgY21kc19zZW50KSB7CisJCWlmIChwYWNrX29iamVjdHMob3V0LCByZW1vdGVfcmVmcywgZXh0cmFfaGF2ZSwgYXJncykgPCAwKSB7CisJCQlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykKKwkJCQljbG9zZShvdXQpOworCQkJaWYgKGdpdF9jb25uZWN0aW9uX2lzX3NvY2tldChjb25uKSkKKwkJCQlzaHV0ZG93bihmZFswXSwgU0hVVF9XUik7CisKKwkJCS8qCisJCQkgKiBEbyBub3QgZXZlbiBib3RoZXIgd2l0aCB0aGUgcmV0dXJuIHZhbHVlOyB3ZSBrbm93IHdlCisJCQkgKiBhcmUgZmFpbGluZywgYW5kIGp1c3Qgd2FudCB0aGUgZXJyb3IoKSBzaWRlIGVmZmVjdHMsCisJCQkgKiBhcyB3ZWxsIGFzIG1hcmtpbmcgcmVmcyB3aXRoIHRoZWlyIHJlbW90ZSBzdGF0dXMgKGlmCisJCQkgKiB3ZSBnZXQgb25lKS4KKwkJCSAqLworCQkJaWYgKHN0YXR1c19yZXBvcnQpCisJCQkJcmVjZWl2ZV9zdGF0dXMoJnJlYWRlciwgcmVtb3RlX3JlZnMpOworCisJCQlpZiAodXNlX3NpZGViYW5kKSB7CisJCQkJY2xvc2UoZGVtdXgub3V0KTsKKwkJCQlmaW5pc2hfYXN5bmMoJmRlbXV4KTsKKwkJCX0KKwkJCWZkWzFdID0gLTE7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCFhcmdzLT5zdGF0ZWxlc3NfcnBjKQorCQkJLyogQ2xvc2VkIGJ5IHBhY2tfb2JqZWN0cygpIHZpYSBzdGFydF9jb21tYW5kKCkgKi8KKwkJCWZkWzFdID0gLTE7CisJfQorCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjICYmIGNtZHNfc2VudCkKKwkJcGFja2V0X2ZsdXNoKG91dCk7CisKKwlpZiAoc3RhdHVzX3JlcG9ydCAmJiBjbWRzX3NlbnQpCisJCXJldCA9IHJlY2VpdmVfc3RhdHVzKCZyZWFkZXIsIHJlbW90ZV9yZWZzKTsKKwllbHNlCisJCXJldCA9IDA7CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpCisJCXBhY2tldF9mbHVzaChvdXQpOworCisJaWYgKHVzZV9zaWRlYmFuZCAmJiBjbWRzX3NlbnQpIHsKKwkJY2xvc2UoZGVtdXgub3V0KTsKKwkJaWYgKGZpbmlzaF9hc3luYygmZGVtdXgpKSB7CisJCQllcnJvcigiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpOworCQkJcmV0ID0gLTE7CisJCX0KKwl9CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChhcmdzLT5wb3JjZWxhaW4pCisJCXJldHVybiAwOworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3dpdGNoIChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQljYXNlIFJFRl9TVEFUVVNfT0s6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NlbmQtcGFjay5oIGIvc2VuZC1wYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0OGZjZAotLS0gL2Rldi9udWxsCisrKyBiL3NlbmQtcGFjay5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgU0VORF9QQUNLX0gKKyNkZWZpbmUgU0VORF9QQUNLX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBjaGlsZF9wcm9jZXNzOworc3RydWN0IG9pZF9hcnJheTsKK3N0cnVjdCByZWY7CisKKy8qIFBvc3NpYmxlIHZhbHVlcyBmb3IgcHVzaF9jZXJ0IGZpZWxkIGluIHNlbmRfcGFja19hcmdzLiAqLworI2RlZmluZSBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSIDAKKyNkZWZpbmUgU0VORF9QQUNLX1BVU0hfQ0VSVF9JRl9BU0tFRCAxCisjZGVmaW5lIFNFTkRfUEFDS19QVVNIX0NFUlRfQUxXQVlTIDIKKworc3RydWN0IHNlbmRfcGFja19hcmdzIHsKKwljb25zdCBjaGFyICp1cmw7CisJdW5zaWduZWQgdmVyYm9zZToxLAorCQlxdWlldDoxLAorCQlwb3JjZWxhaW46MSwKKwkJcHJvZ3Jlc3M6MSwKKwkJc2VuZF9taXJyb3I6MSwKKwkJZm9yY2VfdXBkYXRlOjEsCisJCXVzZV90aGluX3BhY2s6MSwKKwkJdXNlX29mc19kZWx0YToxLAorCQlkcnlfcnVuOjEsCisJCS8qIE9uZSBvZiB0aGUgU0VORF9QQUNLX1BVU0hfQ0VSVF8qIGNvbnN0YW50cy4gKi8KKwkJcHVzaF9jZXJ0OjIsCisJCXN0YXRlbGVzc19ycGM6MSwKKwkJYXRvbWljOjE7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnM7Cit9OworCitzdHJ1Y3Qgb3B0aW9uOworaW50IG9wdGlvbl9wYXJzZV9wdXNoX3NpZ25lZChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KTsKKworaW50IHNlbmRfcGFjayhzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCisJICAgICAgaW50IGZkW10sIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uLAorCSAgICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBzdHJ1Y3Qgb2lkX2FycmF5ICpleHRyYV9oYXZlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zZXF1ZW5jZXIuYyBiL3NlcXVlbmNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjgyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zZXF1ZW5jZXIuYwpAQCAtMCwwICsxLDUzMTcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInRyYWlsZXIuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJub3Rlcy11dGlscy5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJvaWRtYXAuaCIKKyNpbmNsdWRlICJvaWRzZXQuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgImFsaWFzLmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisjaW5jbHVkZSAicmViYXNlLWludGVyYWN0aXZlLmgiCisKKyNkZWZpbmUgR0lUX1JFRkxPR19BQ1RJT04gIkdJVF9SRUZMT0dfQUNUSU9OIgorCitzdGF0aWMgY29uc3QgY2hhciBzaWduX29mZl9oZWFkZXJbXSA9ICJTaWduZWQtb2ZmLWJ5OiAiOworc3RhdGljIGNvbnN0IGNoYXIgY2hlcnJ5X3BpY2tlZF9wcmVmaXhbXSA9ICIoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAiOworCitHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2NvbW1pdF9lZGl0bXNnLCAiQ09NTUlUX0VESVRNU0ciKQorCitHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX3NlcV9kaXIsICJzZXF1ZW5jZXIiKQorCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF90b2RvX2ZpbGUsICJzZXF1ZW5jZXIvdG9kbyIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9vcHRzX2ZpbGUsICJzZXF1ZW5jZXIvb3B0cyIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9oZWFkX2ZpbGUsICJzZXF1ZW5jZXIvaGVhZCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9hYm9ydF9zYWZldHlfZmlsZSwgInNlcXVlbmNlci9hYm9ydC1zYWZldHkiKQorCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aCwgInJlYmFzZS1tZXJnZSIpCisvKgorICogVGhlIGZpbGUgY29udGFpbmluZyByZWJhc2UgY29tbWFuZHMsIGNvbW1lbnRzLCBhbmQgZW1wdHkgbGluZXMuCisgKiBUaGlzIGZpbGUgaXMgY3JlYXRlZCBieSAiZ2l0IHJlYmFzZSAtaSIgdGhlbiBlZGl0ZWQgYnkgdGhlIHVzZXIuIEFzCisgKiB0aGUgbGluZXMgYXJlIHByb2Nlc3NlZCwgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBmcm9udCBvZiB0aGlzCisgKiBmaWxlIGFuZCB3cml0dGVuIHRvIHRoZSB0YWlsIG9mICdkb25lJy4KKyAqLworR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF90b2RvLCAicmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyIpCitHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX3RvZG9fYmFja3VwLCAicmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kby5iYWNrdXAiKQorCitHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2Ryb3BwZWQsICJyZWJhc2UtbWVyZ2UvZHJvcHBlZCIpCisKKy8qCisgKiBUaGUgcmViYXNlIGNvbW1hbmQgbGluZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQuIEEgbGluZQorICogaXMgbW92ZWQgaGVyZSB3aGVuIGl0IGlzIGZpcnN0IGhhbmRsZWQsIGJlZm9yZSBhbnkgYXNzb2NpYXRlZCB1c2VyCisgKiBhY3Rpb25zLgorICovCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9kb25lLCAicmViYXNlLW1lcmdlL2RvbmUiKQorLyoKKyAqIFRoZSBmaWxlIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgY29tbWFuZHMgd2VyZSBhbHJlYWR5IHByb2Nlc3NlZCAoZS5nLgorICogZm9yIHRoZSBwcm9tcHQpLgorICovCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9tc2dudW0sICJyZWJhc2UtbWVyZ2UvbXNnbnVtIikKKy8qCisgKiBUaGUgZmlsZSB0byBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IGNvbW1hbmRzIGFyZSB0byBiZSBwcm9jZXNzZWQgaW4gdG90YWwKKyAqIChlLmcuIGZvciB0aGUgcHJvbXB0KS4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfbXNndG90YWwsICJyZWJhc2UtbWVyZ2UvZW5kIikKKy8qCisgKiBUaGUgY29tbWl0IG1lc3NhZ2UgdGhhdCBpcyBwbGFubmVkIHRvIGJlIHVzZWQgZm9yIGFueSBjaGFuZ2VzIHRoYXQKKyAqIG5lZWQgdG8gYmUgY29tbWl0dGVkIGZvbGxvd2luZyBhIHVzZXIgaW50ZXJhY3Rpb24uCisgKi8KK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX21lc3NhZ2UsICJyZWJhc2UtbWVyZ2UvbWVzc2FnZSIpCisvKgorICogVGhlIGZpbGUgaW50byB3aGljaCBpcyBhY2N1bXVsYXRlZCB0aGUgc3VnZ2VzdGVkIGNvbW1pdCBtZXNzYWdlIGZvcgorICogc3F1YXNoL2ZpeHVwIGNvbW1hbmRzLiBXaGVuIHRoZSBmaXJzdCBvZiBhIHNlcmllcyBvZiBzcXVhc2gvZml4dXBzCisgKiBpcyBzZWVuLCB0aGUgZmlsZSBpcyBjcmVhdGVkIGFuZCB0aGUgY29tbWl0IG1lc3NhZ2UgZnJvbSB0aGUKKyAqIHByZXZpb3VzIGNvbW1pdCBhbmQgZnJvbSB0aGUgZmlyc3Qgc3F1YXNoL2ZpeHVwIGNvbW1pdCBhcmUgd3JpdHRlbgorICogdG8gaXQuIFRoZSBjb21taXQgbWVzc2FnZSBmb3IgZWFjaCBzdWJzZXF1ZW50IHNxdWFzaC9maXh1cCBjb21taXQKKyAqIGlzIGFwcGVuZGVkIHRvIHRoZSBmaWxlIGFzIGl0IGlzIHByb2Nlc3NlZC4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfc3F1YXNoX21zZywgInJlYmFzZS1tZXJnZS9tZXNzYWdlLXNxdWFzaCIpCisvKgorICogSWYgdGhlIGN1cnJlbnQgc2VyaWVzIG9mIHNxdWFzaC9maXh1cHMgaGFzIG5vdCB5ZXQgaW5jbHVkZWQgYSBzcXVhc2gKKyAqIGNvbW1hbmQsIHRoZW4gdGhpcyBmaWxlIGV4aXN0cyBhbmQgaG9sZHMgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIHRoZQorICogb3JpZ2luYWwgInBpY2siIGNvbW1pdC4gIChJZiB0aGUgc2VyaWVzIGVuZHMgd2l0aG91dCBhICJzcXVhc2giCisgKiBjb21tYW5kLCB0aGVuIHRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIHRoZSBjb21iaW5lZAorICogY29tbWl0IHdpdGhvdXQgb3BlbmluZyB0aGUgZWRpdG9yLikKKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfZml4dXBfbXNnLCAicmViYXNlLW1lcmdlL21lc3NhZ2UtZml4dXAiKQorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBmaXh1cC9zcXVhc2ggY29tbWFuZHMgdGhhdCBoYXZlIGJlZW4KKyAqIGFjY3VtdWxhdGVkIGludG8gbWVzc2FnZS1maXh1cCBvciBtZXNzYWdlLXNxdWFzaCBzbyBmYXIuCisgKi8KK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2N1cnJlbnRfZml4dXBzLCAicmViYXNlLW1lcmdlL2N1cnJlbnQtZml4dXBzIikKKy8qCisgKiBBIHNjcmlwdCB0byBzZXQgdGhlIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCwgYW5kCisgKiBHSVRfQVVUSE9SX0RBVEUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBjb21taXQgdGhhdCBpcyBjdXJyZW50bHkKKyAqIGJlaW5nIHJlYmFzZWQuCisgKi8KK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2F1dGhvcl9zY3JpcHQsICJyZWJhc2UtbWVyZ2UvYXV0aG9yLXNjcmlwdCIpCisvKgorICogV2hlbiBhbiAiZWRpdCIgcmViYXNlIGNvbW1hbmQgaXMgYmVpbmcgcHJvY2Vzc2VkLCB0aGUgU0hBMSBvZiB0aGUKKyAqIGNvbW1pdCB0byBiZSBlZGl0ZWQgaXMgcmVjb3JkZWQgaW4gdGhpcyBmaWxlLiAgV2hlbiAiZ2l0IHJlYmFzZQorICogLS1jb250aW51ZSIgaXMgZXhlY3V0ZWQsIGlmIHRoZXJlIGFyZSBhbnkgc3RhZ2VkIGNoYW5nZXMgdGhlbiB0aGV5CisgKiB3aWxsIGJlIGFtZW5kZWQgdG8gdGhlIEhFQUQgY29tbWl0LCBidXQgb25seSBwcm92aWRlZCB0aGUgSEVBRAorICogY29tbWl0IGlzIHN0aWxsIHRoZSBjb21taXQgdG8gYmUgZWRpdGVkLiAgV2hlbiBhbnkgb3RoZXIgcmViYXNlCisgKiBjb21tYW5kIGlzIHByb2Nlc3NlZCwgdGhpcyBmaWxlIGlzIGRlbGV0ZWQuCisgKi8KK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2FtZW5kLCAicmViYXNlLW1lcmdlL2FtZW5kIikKKy8qCisgKiBXaGVuIHdlIHN0b3AgYXQgYSBnaXZlbiBwYXRjaCB2aWEgdGhlICJlZGl0IiBjb21tYW5kLCB0aGlzIGZpbGUgY29udGFpbnMKKyAqIHRoZSBhYmJyZXZpYXRlZCBjb21taXQgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBwYXRjaC4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfc3RvcHBlZF9zaGEsICJyZWJhc2UtbWVyZ2Uvc3RvcHBlZC1zaGEiKQorLyoKKyAqIEZvciB0aGUgcG9zdC1yZXdyaXRlIGhvb2ssIHdlIG1ha2UgYSBsaXN0IG9mIHJld3JpdHRlbiBjb21taXRzIGFuZAorICogdGhlaXIgbmV3IHNoYTFzLiAgVGhlIHJld3JpdHRlbi1wZW5kaW5nIGxpc3Qga2VlcHMgdGhlIHNoYTFzIG9mCisgKiBjb21taXRzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCwgYnV0IG5vdCBjb21taXR0ZWQgeWV0LAorICogZS5nLiBiZWNhdXNlIHRoZXkgYXJlIHdhaXRpbmcgZm9yIGEgJ3NxdWFzaCcgY29tbWFuZC4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfcmV3cml0dGVuX2xpc3QsICJyZWJhc2UtbWVyZ2UvcmV3cml0dGVuLWxpc3QiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfcmV3cml0dGVuX3BlbmRpbmcsCisJInJlYmFzZS1tZXJnZS9yZXdyaXR0ZW4tcGVuZGluZyIpCisKKy8qCisgKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBPSUQgb2YgdGhlICJzcXVhc2ggb250byIgY29tbWl0LCBpLmUuCisgKiB0aGUgZHVtbXkgY29tbWl0IHVzZWQgZm9yIGByZXNldCBbbmV3IHJvb3RdYC4KKyAqLworc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfc3F1YXNoX29udG8sICJyZWJhc2UtbWVyZ2Uvc3F1YXNoLW9udG8iKQorCisvKgorICogVGhlIHBhdGggb2YgdGhlIGZpbGUgbGlzdGluZyByZWZzIHRoYXQgbmVlZCB0byBiZSBkZWxldGVkIGFmdGVyIHRoZSByZWJhc2UKKyAqIGZpbmlzaGVzLiBUaGlzIGlzIHVzZWQgYnkgdGhlIGBsYWJlbGAgY29tbWFuZCB0byByZWNvcmQgdGhlIG5lZWQgZm9yIGNsZWFudXAuCisgKi8KK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX3JlZnNfdG9fZGVsZXRlLCAicmViYXNlLW1lcmdlL3JlZnMtdG8tZGVsZXRlIikKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIHdyaXR0ZW4gYnkgZ2l0LXJlYmFzZSBqdXN0IGFmdGVyIHBhcnNpbmcgdGhlCisgKiBjb21tYW5kLWxpbmUuCisgKi8KK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2dwZ19zaWduX29wdCwgInJlYmFzZS1tZXJnZS9ncGdfc2lnbl9vcHQiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfb3JpZ19oZWFkLCAicmViYXNlLW1lcmdlL29yaWctaGVhZCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF92ZXJib3NlLCAicmViYXNlLW1lcmdlL3ZlcmJvc2UiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfcXVpZXQsICJyZWJhc2UtbWVyZ2UvcXVpZXQiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfc2lnbm9mZiwgInJlYmFzZS1tZXJnZS9zaWdub2ZmIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2hlYWRfbmFtZSwgInJlYmFzZS1tZXJnZS9oZWFkLW5hbWUiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfb250bywgInJlYmFzZS1tZXJnZS9vbnRvIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2F1dG9zdGFzaCwgInJlYmFzZS1tZXJnZS9hdXRvc3Rhc2giKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfc3RyYXRlZ3ksICJyZWJhc2UtbWVyZ2Uvc3RyYXRlZ3kiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfc3RyYXRlZ3lfb3B0cywgInJlYmFzZS1tZXJnZS9zdHJhdGVneV9vcHRzIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlLCAicmViYXNlLW1lcmdlL2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX3Jlc2NoZWR1bGVfZmFpbGVkX2V4ZWMsICJyZWJhc2UtbWVyZ2UvcmVzY2hlZHVsZS1mYWlsZWQtZXhlYyIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9kcm9wX3JlZHVuZGFudF9jb21taXRzLCAicmViYXNlLW1lcmdlL2Ryb3BfcmVkdW5kYW50X2NvbW1pdHMiKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfa2VlcF9yZWR1bmRhbnRfY29tbWl0cywgInJlYmFzZS1tZXJnZS9rZWVwX3JlZHVuZGFudF9jb21taXRzIikKKworc3RhdGljIGludCBnaXRfc2VxdWVuY2VyX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMgPSBjYjsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC5jbGVhbnVwIikpIHsKKwkJY29uc3QgY2hhciAqczsKKworCQlzdGF0dXMgPSBnaXRfY29uZmlnX3N0cmluZygmcywgaywgdik7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCisJCWlmICghc3RyY21wKHMsICJ2ZXJiYXRpbSIpKSB7CisJCQlvcHRzLT5kZWZhdWx0X21zZ19jbGVhbnVwID0gQ09NTUlUX01TR19DTEVBTlVQX05PTkU7CisJCQlvcHRzLT5leHBsaWNpdF9jbGVhbnVwID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHMsICJ3aGl0ZXNwYWNlIikpIHsKKwkJCW9wdHMtPmRlZmF1bHRfbXNnX2NsZWFudXAgPSBDT01NSVRfTVNHX0NMRUFOVVBfU1BBQ0U7CisJCQlvcHRzLT5leHBsaWNpdF9jbGVhbnVwID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHMsICJzdHJpcCIpKSB7CisJCQlvcHRzLT5kZWZhdWx0X21zZ19jbGVhbnVwID0gQ09NTUlUX01TR19DTEVBTlVQX0FMTDsKKwkJCW9wdHMtPmV4cGxpY2l0X2NsZWFudXAgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocywgInNjaXNzb3JzIikpIHsKKwkJCW9wdHMtPmRlZmF1bHRfbXNnX2NsZWFudXAgPSBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlM7CisJCQlvcHRzLT5leHBsaWNpdF9jbGVhbnVwID0gMTsKKwkJfSBlbHNlIHsKKwkJCXdhcm5pbmcoXygiaW52YWxpZCBjb21taXQgbWVzc2FnZSBjbGVhbnVwIG1vZGUgJyVzJyIpLAorCQkJCSAgcyk7CisJCX0KKworCQlmcmVlKChjaGFyICopcyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC5ncGdzaWduIikpIHsKKwkJb3B0cy0+Z3BnX3NpZ24gPSBnaXRfY29uZmlnX2Jvb2woaywgdikgPyB4c3RyZHVwKCIiKSA6IE5VTEw7CisJCXJldHVybiAwOworCX0KKworCXN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKGssIHYsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gZ2l0X2RpZmZfYmFzaWNfY29uZmlnKGssIHYsIE5VTEwpOworfQorCit2b2lkIHNlcXVlbmNlcl9pbml0X2NvbmZpZyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJb3B0cy0+ZGVmYXVsdF9tc2dfY2xlYW51cCA9IENPTU1JVF9NU0dfQ0xFQU5VUF9OT05FOworCWdpdF9jb25maWcoZ2l0X3NlcXVlbmNlcl9jb25maWcsIG9wdHMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19yZWJhc2VfaShjb25zdCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJcmV0dXJuIG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfSU5URVJBQ1RJVkVfUkVCQVNFOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2Rpcihjb25zdCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKQorCQlyZXR1cm4gcmViYXNlX3BhdGgoKTsKKwlyZXR1cm4gZ2l0X3BhdGhfc2VxX2RpcigpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3RvZG9fcGF0aChjb25zdCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKQorCQlyZXR1cm4gcmViYXNlX3BhdGhfdG9kbygpOworCXJldHVybiBnaXRfcGF0aF90b2RvX2ZpbGUoKTsKK30KKworLyoKKyAqIFJldHVybnMgMCBmb3Igbm9uLWNvbmZvcm1pbmcgZm9vdGVyCisgKiBSZXR1cm5zIDEgZm9yIGNvbmZvcm1pbmcgZm9vdGVyCisgKiBSZXR1cm5zIDIgd2hlbiBzb2IgZXhpc3RzIHdpdGhpbiBjb25mb3JtaW5nIGZvb3RlcgorICogUmV0dXJucyAzIHdoZW4gc29iIGV4aXN0cyB3aXRoaW4gY29uZm9ybWluZyBmb290ZXIgYXMgbGFzdCBlbnRyeQorICovCitzdGF0aWMgaW50IGhhc19jb25mb3JtaW5nX2Zvb3RlcihzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IHN0cmJ1ZiAqc29iLAorCXNpemVfdCBpZ25vcmVfZm9vdGVyKQoreworCXN0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyBvcHRzID0gUFJPQ0VTU19UUkFJTEVSX09QVElPTlNfSU5JVDsKKwlzdHJ1Y3QgdHJhaWxlcl9pbmZvIGluZm87CisJc2l6ZV90IGk7CisJaW50IGZvdW5kX3NvYiA9IDAsIGZvdW5kX3NvYl9sYXN0ID0gMDsKKworCW9wdHMubm9fZGl2aWRlciA9IDE7CisKKwl0cmFpbGVyX2luZm9fZ2V0KCZpbmZvLCBzYi0+YnVmLCAmb3B0cyk7CisKKwlpZiAoaW5mby50cmFpbGVyX3N0YXJ0ID09IGluZm8udHJhaWxlcl9lbmQpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGluZm8udHJhaWxlcl9ucjsgaSsrKQorCQlpZiAoc29iICYmICFzdHJuY21wKGluZm8udHJhaWxlcnNbaV0sIHNvYi0+YnVmLCBzb2ItPmxlbikpIHsKKwkJCWZvdW5kX3NvYiA9IDE7CisJCQlpZiAoaSA9PSBpbmZvLnRyYWlsZXJfbnIgLSAxKQorCQkJCWZvdW5kX3NvYl9sYXN0ID0gMTsKKwkJfQorCisJdHJhaWxlcl9pbmZvX3JlbGVhc2UoJmluZm8pOworCisJaWYgKGZvdW5kX3NvYl9sYXN0KQorCQlyZXR1cm4gMzsKKwlpZiAoZm91bmRfc29iKQorCQlyZXR1cm4gMjsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdwZ19zaWduX29wdF9xdW90ZWQoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCWlmIChvcHRzLT5ncGdfc2lnbikKKwkJc3FfcXVvdGVmKCZidWYsICItUyVzIiwgb3B0cy0+Z3BnX3NpZ24pOworCXJldHVybiBidWYuYnVmOworfQorCitpbnQgc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCWlmIChpc19yZWJhc2VfaShvcHRzKSAmJgorCSAgICBzdHJidWZfcmVhZF9maWxlKCZidWYsIHJlYmFzZV9wYXRoX3JlZnNfdG9fZGVsZXRlKCksIDApID4gMCkgeworCQljaGFyICpwID0gYnVmLmJ1ZjsKKwkJd2hpbGUgKCpwKSB7CisJCQljaGFyICplb2wgPSBzdHJjaHIocCwgJ1xuJyk7CisJCQlpZiAoZW9sKQorCQkJCSplb2wgPSAnXDAnOworCQkJaWYgKGRlbGV0ZV9yZWYoIihyZWJhc2UpIGNsZWFudXAiLCBwLCBOVUxMLCAwKSA8IDApIHsKKwkJCQl3YXJuaW5nKF8oImNvdWxkIG5vdCBkZWxldGUgJyVzJyIpLCBwKTsKKwkJCQlyZXQgPSAtMTsKKwkJCX0KKwkJCWlmICghZW9sKQorCQkJCWJyZWFrOworCQkJcCA9IGVvbCArIDE7CisJCX0KKwl9CisKKwlmcmVlKG9wdHMtPmdwZ19zaWduKTsKKwlmcmVlKG9wdHMtPnN0cmF0ZWd5KTsKKwlmb3IgKGkgPSAwOyBpIDwgb3B0cy0+eG9wdHNfbnI7IGkrKykKKwkJZnJlZShvcHRzLT54b3B0c1tpXSk7CisJZnJlZShvcHRzLT54b3B0cyk7CisJc3RyYnVmX3JlbGVhc2UoJm9wdHMtPmN1cnJlbnRfZml4dXBzKTsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGdldF9kaXIob3B0cykpOworCWlmIChyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZidWYsIDApKQorCQlyZXQgPSBlcnJvcihfKCJjb3VsZCBub3QgcmVtb3ZlICclcyciKSwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWN0aW9uX25hbWUoY29uc3Qgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN3aXRjaCAob3B0cy0+YWN0aW9uKSB7CisJY2FzZSBSRVBMQVlfUkVWRVJUOgorCQlyZXR1cm4gTl8oInJldmVydCIpOworCWNhc2UgUkVQTEFZX1BJQ0s6CisJCXJldHVybiBOXygiY2hlcnJ5LXBpY2siKTsKKwljYXNlIFJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0U6CisJCXJldHVybiBOXygicmViYXNlIik7CisJfQorCWRpZShfKCJ1bmtub3duIGFjdGlvbjogJWQiKSwgb3B0cy0+YWN0aW9uKTsKK30KKworc3RydWN0IGNvbW1pdF9tZXNzYWdlIHsKKwljaGFyICpwYXJlbnRfbGFiZWw7CisJY2hhciAqbGFiZWw7CisJY2hhciAqc3ViamVjdDsKKwljb25zdCBjaGFyICptZXNzYWdlOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNob3J0X2NvbW1pdF9uYW1lKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gZmluZF91bmlxdWVfYWJicmV2KCZjb21taXQtPm9iamVjdC5vaWQsIERFRkFVTFRfQUJCUkVWKTsKK30KKworc3RhdGljIGludCBnZXRfbWVzc2FnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbWVzc2FnZSAqb3V0KQoreworCWNvbnN0IGNoYXIgKmFiYnJldiwgKnN1YmplY3Q7CisJaW50IHN1YmplY3RfbGVuOworCisJb3V0LT5tZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKSk7CisJYWJicmV2ID0gc2hvcnRfY29tbWl0X25hbWUoY29tbWl0KTsKKworCXN1YmplY3RfbGVuID0gZmluZF9jb21taXRfc3ViamVjdChvdXQtPm1lc3NhZ2UsICZzdWJqZWN0KTsKKworCW91dC0+c3ViamVjdCA9IHhtZW1kdXB6KHN1YmplY3QsIHN1YmplY3RfbGVuKTsKKwlvdXQtPmxhYmVsID0geHN0cmZtdCgiJXMuLi4gJXMiLCBhYmJyZXYsIG91dC0+c3ViamVjdCk7CisJb3V0LT5wYXJlbnRfbGFiZWwgPSB4c3RyZm10KCJwYXJlbnQgb2YgJXMiLCBvdXQtPmxhYmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX21lc3NhZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X21lc3NhZ2UgKm1zZykKK3sKKwlmcmVlKG1zZy0+cGFyZW50X2xhYmVsKTsKKwlmcmVlKG1zZy0+bGFiZWwpOworCWZyZWUobXNnLT5zdWJqZWN0KTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgbXNnLT5tZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYWR2aWNlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBpbnQgc2hvd19oaW50LAorCQkJIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwljaGFyICptc2cgPSBnZXRlbnYoIkdJVF9DSEVSUllfUElDS19IRUxQIik7CisKKwlpZiAobXNnKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CisJCS8qCisJCSAqIEEgY29uZmxpY3QgaGFzIG9jY3VycmVkIGJ1dCB0aGUgcG9yY2VsYWluCisJCSAqICh0eXBpY2FsbHkgcmViYXNlIC0taW50ZXJhY3RpdmUpIHdhbnRzIHRvIHRha2UgY2FyZQorCQkgKiBvZiB0aGUgY29tbWl0IGl0c2VsZiBzbyByZW1vdmUgQ0hFUlJZX1BJQ0tfSEVBRAorCQkgKi8KKwkJdW5saW5rKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpOworCQlyZXR1cm47CisJfQorCisJaWYgKHNob3dfaGludCkgeworCQlpZiAob3B0cy0+bm9fY29tbWl0KQorCQkJYWR2aXNlKF8oImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKwkJCQkgIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIpKTsKKwkJZWxzZQorCQkJYWR2aXNlKF8oImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKwkJCQkgIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorCQkJCSAiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIikpOworCX0KK30KKworc3RhdGljIGludCB3cml0ZV9tZXNzYWdlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgaW50IGFwcGVuZF9lb2wpCit7CisJc3RydWN0IGxvY2tfZmlsZSBtc2dfZmlsZSA9IExPQ0tfSU5JVDsKKworCWludCBtc2dfZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZtc2dfZmlsZSwgZmlsZW5hbWUsIDApOworCWlmIChtc2dfZmQgPCAwKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGxvY2sgJyVzJyIpLCBmaWxlbmFtZSk7CisJaWYgKHdyaXRlX2luX2Z1bGwobXNnX2ZkLCBidWYsIGxlbikgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGZpbGVuYW1lKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZtc2dfZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGFwcGVuZF9lb2wgJiYgd3JpdGUobXNnX2ZkLCAiXG4iLCAxKSA8IDApIHsKKwkJZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlIGVvbCB0byAnJXMnIiksIGZpbGVuYW1lKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZtc2dfZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJm1zZ19maWxlKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgdG8gZmluYWxpemUgJyVzJyIpLCBmaWxlbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWRzIGEgZmlsZSB0aGF0IHdhcyBwcmVzdW1hYmx5IHdyaXR0ZW4gYnkgYSBzaGVsbCBzY3JpcHQsIGkuZS4gd2l0aCBhbgorICogZW5kLW9mLWxpbmUgbWFya2VyIHRoYXQgbmVlZHMgdG8gYmUgc3RyaXBwZWQuCisgKgorICogTm90ZSB0aGF0IG9ubHkgdGhlIGxhc3QgZW5kLW9mLWxpbmUgbWFya2VyIGlzIHN0cmlwcGVkLCBjb25zaXN0ZW50IHdpdGggdGhlCisgKiBiZWhhdmlvciBvZiAiJChjYXQgcGF0aCkiIGluIGEgc2hlbGwgc2NyaXB0LgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgZmlsZSB3YXMgcmVhZCwgMCBpZiBpdCBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBleGlzdC4KKyAqLworc3RhdGljIGludCByZWFkX29uZWxpbmVyKHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwljb25zdCBjaGFyICpwYXRoLCBpbnQgc2tpcF9pZl9lbXB0eSkKK3sKKwlpbnQgb3JpZ19sZW4gPSBidWYtPmxlbjsKKworCWlmICghZmlsZV9leGlzdHMocGF0aCkpCisJCXJldHVybiAwOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoYnVmLCBwYXRoLCAwKSA8IDApIHsKKwkJd2FybmluZ19lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIHBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYnVmLT5sZW4gPiBvcmlnX2xlbiAmJiBidWYtPmJ1ZltidWYtPmxlbiAtIDFdID09ICdcbicpIHsKKwkJaWYgKC0tYnVmLT5sZW4gPiBvcmlnX2xlbiAmJiBidWYtPmJ1ZltidWYtPmxlbiAtIDFdID09ICdccicpCisJCQktLWJ1Zi0+bGVuOworCQlidWYtPmJ1ZltidWYtPmxlbl0gPSAnXDAnOworCX0KKworCWlmIChza2lwX2lmX2VtcHR5ICYmIGJ1Zi0+bGVuID09IG9yaWdfbGVuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHRyZWUgKmVtcHR5X3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJcmV0dXJuIGxvb2t1cF90cmVlKHIsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworfQorCitzdGF0aWMgaW50IGVycm9yX2RpcnR5X2luZGV4KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaWYgKHJlcG9fcmVhZF9pbmRleF91bm1lcmdlZChyZXBvKSkKKwkJcmV0dXJuIGVycm9yX3Jlc29sdmVfY29uZmxpY3QoXyhhY3Rpb25fbmFtZShvcHRzKSkpOworCisJZXJyb3IoXygieW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzLiIpLAorCQlfKGFjdGlvbl9uYW1lKG9wdHMpKSk7CisKKwlpZiAoYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UpCisJCWFkdmlzZShfKCJjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iKSk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfYWJvcnRfc2FmZXR5X2ZpbGUodm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQ7CisKKwkvKiBEbyBub3RoaW5nIG9uIGEgc2luZ2xlLXBpY2sgKi8KKwlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX3NlcV9kaXIoKSkpCisJCXJldHVybjsKKworCWlmICghZ2V0X29pZCgiSEVBRCIsICZoZWFkKSkKKwkJd3JpdGVfZmlsZShnaXRfcGF0aF9hYm9ydF9zYWZldHlfZmlsZSgpLCAiJXMiLCBvaWRfdG9faGV4KCZoZWFkKSk7CisJZWxzZQorCQl3cml0ZV9maWxlKGdpdF9wYXRoX2Fib3J0X3NhZmV0eV9maWxlKCksICIlcyIsICIiKTsKK30KKworc3RhdGljIGludCBmYXN0X2ZvcndhcmRfdG8oc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0bywKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmZyb20sCisJCQkgICBpbnQgdW5ib3JuLAorCQkJICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJcmVwb19yZWFkX2luZGV4KHIpOworCWlmIChjaGVja291dF9mYXN0X2ZvcndhcmQociwgZnJvbSwgdG8sIDEpKQorCQlyZXR1cm4gLTE7IC8qIHRoZSBjYWxsZWUgc2hvdWxkIGhhdmUgY29tcGxhaW5lZCBhbHJlYWR5ICovCisKKwlzdHJidWZfYWRkZigmc2IsIF8oIiVzOiBmYXN0LWZvcndhcmQiKSwgXyhhY3Rpb25fbmFtZShvcHRzKSkpOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbiB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCAiSEVBRCIsCisJCQkJICAgdG8sIHVuYm9ybiAmJiAhaXNfcmViYXNlX2kob3B0cykgPworCQkJCSAgICZudWxsX29pZCA6IGZyb20sCisJCQkJICAgMCwgc2IuYnVmLCAmZXJyKSB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkgeworCQlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXVwZGF0ZV9hYm9ydF9zYWZldHlfZmlsZSgpOworCXJldHVybiAwOworfQorCitlbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGdldF9jbGVhbnVwX21vZGUoY29uc3QgY2hhciAqY2xlYW51cF9hcmcsCisJaW50IHVzZV9lZGl0b3IpCit7CisJaWYgKCFjbGVhbnVwX2FyZyB8fCAhc3RyY21wKGNsZWFudXBfYXJnLCAiZGVmYXVsdCIpKQorCQlyZXR1cm4gdXNlX2VkaXRvciA/IENPTU1JVF9NU0dfQ0xFQU5VUF9BTEwgOgorCQkJCSAgICBDT01NSVRfTVNHX0NMRUFOVVBfU1BBQ0U7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgInZlcmJhdGltIikpCisJCXJldHVybiBDT01NSVRfTVNHX0NMRUFOVVBfTk9ORTsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAid2hpdGVzcGFjZSIpKQorCQlyZXR1cm4gQ09NTUlUX01TR19DTEVBTlVQX1NQQUNFOworCWVsc2UgaWYgKCFzdHJjbXAoY2xlYW51cF9hcmcsICJzdHJpcCIpKQorCQlyZXR1cm4gQ09NTUlUX01TR19DTEVBTlVQX0FMTDsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAic2Npc3NvcnMiKSkKKwkJcmV0dXJuIHVzZV9lZGl0b3IgPyBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMgOgorCQkJCSAgICBDT01NSVRfTVNHX0NMRUFOVVBfU1BBQ0U7CisJZWxzZQorCQlkaWUoXygiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiKSwgY2xlYW51cF9hcmcpOworfQorCisvKgorICogTkIgdXNpbmcgaW50IHJhdGhlciB0aGFuIGVudW0gY2xlYW51cF9tb2RlIHRvIHN0b3AgY2xhbmcncworICogLVd0YXV0b2xvZ2ljYWwtY29uc3RhbnQtb3V0LW9mLXJhbmdlLWNvbXBhcmUgY29tcGxhaW5pbmcgdGhhdCB0aGUgY29tcGFyaXNvbgorICogaXMgYWx3YXlzIHRydWUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9jbGVhbnVwX21vZGUoaW50IGNsZWFudXBfbW9kZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqbW9kZXNbXSA9IHsgIndoaXRlc3BhY2UiLAorCQkJCSAgICAgICAidmVyYmF0aW0iLAorCQkJCSAgICAgICAic2Npc3NvcnMiLAorCQkJCSAgICAgICAic3RyaXAiIH07CisKKwlpZiAoY2xlYW51cF9tb2RlIDwgQVJSQVlfU0laRShtb2RlcykpCisJCXJldHVybiBtb2Rlc1tjbGVhbnVwX21vZGVdOworCisJQlVHKCJpbnZhbGlkIGNsZWFudXBfbW9kZSBwcm92aWRlZCAoJWQpIiwgY2xlYW51cF9tb2RlKTsKK30KKwordm9pZCBhcHBlbmRfY29uZmxpY3RzX2hpbnQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJc3RydWN0IHN0cmJ1ZiAqbXNnYnVmLCBlbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXBfbW9kZSkKK3sKKwlpbnQgaTsKKworCWlmIChjbGVhbnVwX21vZGUgPT0gQ09NTUlUX01TR19DTEVBTlVQX1NDSVNTT1JTKSB7CisJCXN0cmJ1Zl9hZGRjaChtc2didWYsICdcbicpOworCQl3dF9zdGF0dXNfYXBwZW5kX2N1dF9saW5lKG1zZ2J1Zik7CisJCXN0cmJ1Zl9hZGRjaChtc2didWYsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwl9CisKKwlzdHJidWZfYWRkY2gobXNnYnVmLCAnXG4nKTsKKwlzdHJidWZfY29tbWVudGVkX2FkZGYobXNnYnVmLCAiQ29uZmxpY3RzOlxuIik7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7KSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2krK107CisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZihtc2didWYsICJcdCVzXG4iLCBjZS0+bmFtZSk7CisJCQl3aGlsZSAoaSA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYKKwkJCSAgICAgICAhc3RyY21wKGNlLT5uYW1lLCBpc3RhdGUtPmNhY2hlW2ldLT5uYW1lKSkKKwkJCQlpKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fcmVjdXJzaXZlX21lcmdlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgc3RydWN0IGNvbW1pdCAqYmFzZSwgc3RydWN0IGNvbW1pdCAqbmV4dCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJhc2VfbGFiZWwsIGNvbnN0IGNoYXIgKm5leHRfbGFiZWwsCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpoZWFkLCBzdHJ1Y3Qgc3RyYnVmICptc2didWYsCisJCQkgICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwlzdHJ1Y3QgdHJlZSAqbmV4dF90cmVlLCAqYmFzZV90cmVlLCAqaGVhZF90cmVlOworCWludCBjbGVhbjsKKwlpbnQgaTsKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2sgPSBMT0NLX0lOSVQ7CisKKwlpZiAocmVwb19ob2xkX2xvY2tlZF9pbmRleChyLCAmaW5kZXhfbG9jaywgTE9DS19SRVBPUlRfT05fRVJST1IpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmVwb19yZWFkX2luZGV4KHIpOworCisJaW5pdF9tZXJnZV9vcHRpb25zKCZvLCByKTsKKwlvLmFuY2VzdG9yID0gYmFzZSA/IGJhc2VfbGFiZWwgOiAiKGVtcHR5IHRyZWUpIjsKKwlvLmJyYW5jaDEgPSAiSEVBRCI7CisJby5icmFuY2gyID0gbmV4dCA/IG5leHRfbGFiZWwgOiAiKGVtcHR5IHRyZWUpIjsKKwlpZiAoaXNfcmViYXNlX2kob3B0cykpCisJCW8uYnVmZmVyX291dHB1dCA9IDI7CisJby5zaG93X3JlbmFtZV9wcm9ncmVzcyA9IDE7CisKKwloZWFkX3RyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KGhlYWQpOworCW5leHRfdHJlZSA9IG5leHQgPyBnZXRfY29tbWl0X3RyZWUobmV4dCkgOiBlbXB0eV90cmVlKHIpOworCWJhc2VfdHJlZSA9IGJhc2UgPyBnZXRfY29tbWl0X3RyZWUoYmFzZSkgOiBlbXB0eV90cmVlKHIpOworCisJZm9yIChpID0gMDsgaSA8IG9wdHMtPnhvcHRzX25yOyBpKyspCisJCXBhcnNlX21lcmdlX29wdCgmbywgb3B0cy0+eG9wdHNbaV0pOworCisJY2xlYW4gPSBtZXJnZV90cmVlcygmbywKKwkJCSAgICBoZWFkX3RyZWUsCisJCQkgICAgbmV4dF90cmVlLCBiYXNlX3RyZWUpOworCWlmIChpc19yZWJhc2VfaShvcHRzKSAmJiBjbGVhbiA8PSAwKQorCQlmcHV0cyhvLm9idWYuYnVmLCBzdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZvLm9idWYpOworCWlmIChjbGVhbiA8IDApIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZpbmRleF9sb2NrKTsKKwkJcmV0dXJuIGNsZWFuOworCX0KKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoci0+aW5kZXgsICZpbmRleF9sb2NrLAorCQkJICAgICAgIENPTU1JVF9MT0NLIHwgU0tJUF9JRl9VTkNIQU5HRUQpKQorCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiwgImNoZXJyeS1waWNrIiBvcgorCQkgKiAicmViYXNlIi4KKwkJICovCisJCXJldHVybiBlcnJvcihfKCIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIiksCisJCQlfKGFjdGlvbl9uYW1lKG9wdHMpKSk7CisKKwlpZiAoIWNsZWFuKQorCQlhcHBlbmRfY29uZmxpY3RzX2hpbnQoci0+aW5kZXgsIG1zZ2J1ZiwKKwkJCQkgICAgICBvcHRzLT5kZWZhdWx0X21zZ19jbGVhbnVwKTsKKworCXJldHVybiAhY2xlYW47Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2lkICpnZXRfY2FjaGVfdHJlZV9vaWQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaWYgKCFpc3RhdGUtPmNhY2hlX3RyZWUpCisJCWlzdGF0ZS0+Y2FjaGVfdHJlZSA9IGNhY2hlX3RyZWUoKTsKKworCWlmICghY2FjaGVfdHJlZV9mdWxseV92YWxpZChpc3RhdGUtPmNhY2hlX3RyZWUpKQorCQlpZiAoY2FjaGVfdHJlZV91cGRhdGUoaXN0YXRlLCAwKSkgeworCQkJZXJyb3IoXygidW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlIikpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCXJldHVybiAmaXN0YXRlLT5jYWNoZV90cmVlLT5vaWQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfaW5kZXhfdW5jaGFuZ2VkKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQsICpjYWNoZV90cmVlX29pZDsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IHItPmluZGV4OworCisJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCAmaGVhZF9vaWQsIE5VTEwpKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXQiKSk7CisKKwloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXQociwgJmhlYWRfb2lkKTsKKworCS8qCisJICogSWYgaGVhZF9jb21taXQgaXMgTlVMTCwgY2hlY2tfY29tbWl0LCBjYWxsZWQgZnJvbQorCSAqIGxvb2t1cF9jb21taXQsIHdvdWxkIGhhdmUgaW5kaWNhdGVkIHRoYXQgaGVhZF9jb21taXQgaXMgbm90CisJICogYSBjb21taXQgb2JqZWN0IGFscmVhZHkuICBwYXJzZV9jb21taXQoKSB3aWxsIHJldHVybiBmYWlsdXJlCisJICogd2l0aG91dCBmdXJ0aGVyIGNvbXBsYWludHMgaW4gc3VjaCBhIGNhc2UuICBPdGhlcndpc2UsIGlmCisJICogdGhlIGNvbW1pdCBpcyBpbnZhbGlkLCBwYXJzZV9jb21taXQoKSB3aWxsIGNvbXBsYWluLiAgU28KKwkgKiB0aGVyZSBpcyBub3RoaW5nIGZvciB1cyB0byBzYXkgaGVyZS4gIEp1c3QgcmV0dXJuIGZhaWx1cmUuCisJICovCisJaWYgKHBhcnNlX2NvbW1pdChoZWFkX2NvbW1pdCkpCisJCXJldHVybiAtMTsKKworCWlmICghKGNhY2hlX3RyZWVfb2lkID0gZ2V0X2NhY2hlX3RyZWVfb2lkKGlzdGF0ZSkpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gb2lkZXEoY2FjaGVfdHJlZV9vaWQsIGdldF9jb21taXRfdHJlZV9vaWQoaGVhZF9jb21taXQpKTsKK30KKworc3RhdGljIGludCB3cml0ZV9hdXRob3Jfc2NyaXB0KGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICplb2w7CisJaW50IHJlczsKKworCWZvciAoOzspCisJCWlmICghKm1lc3NhZ2UgfHwgc3RhcnRzX3dpdGgobWVzc2FnZSwgIlxuIikpIHsKK21pc3NpbmdfYXV0aG9yOgorCQkJLyogTWlzc2luZyAnYXV0aG9yJyBsaW5lPyAqLworCQkJdW5saW5rKHJlYmFzZV9wYXRoX2F1dGhvcl9zY3JpcHQoKSk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChtZXNzYWdlLCAiYXV0aG9yICIsICZtZXNzYWdlKSkKKwkJCWJyZWFrOworCQllbHNlIGlmICgoZW9sID0gc3RyY2hyKG1lc3NhZ2UsICdcbicpKSkKKwkJCW1lc3NhZ2UgPSBlb2wgKyAxOworCQllbHNlCisJCQlnb3RvIG1pc3NpbmdfYXV0aG9yOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCAiR0lUX0FVVEhPUl9OQU1FPSciKTsKKwl3aGlsZSAoKm1lc3NhZ2UgJiYgKm1lc3NhZ2UgIT0gJ1xuJyAmJiAqbWVzc2FnZSAhPSAnXHInKQorCQlpZiAoc2tpcF9wcmVmaXgobWVzc2FnZSwgIiA8IiwgJm1lc3NhZ2UpKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKCptZXNzYWdlICE9ICdcJycpCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgKihtZXNzYWdlKyspKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIidcXCVjJyIsICoobWVzc2FnZSsrKSk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCAiJ1xuR0lUX0FVVEhPUl9FTUFJTD0nIik7CisJd2hpbGUgKCptZXNzYWdlICYmICptZXNzYWdlICE9ICdcbicgJiYgKm1lc3NhZ2UgIT0gJ1xyJykKKwkJaWYgKHNraXBfcHJlZml4KG1lc3NhZ2UsICI+ICIsICZtZXNzYWdlKSkKKwkJCWJyZWFrOworCQllbHNlIGlmICgqbWVzc2FnZSAhPSAnXCcnKQorCQkJc3RyYnVmX2FkZGNoKCZidWYsICoobWVzc2FnZSsrKSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICInXFwlYyciLCAqKG1lc3NhZ2UrKykpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIidcbkdJVF9BVVRIT1JfREFURT0nQCIpOworCXdoaWxlICgqbWVzc2FnZSAmJiAqbWVzc2FnZSAhPSAnXG4nICYmICptZXNzYWdlICE9ICdccicpCisJCWlmICgqbWVzc2FnZSAhPSAnXCcnKQorCQkJc3RyYnVmX2FkZGNoKCZidWYsICoobWVzc2FnZSsrKSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICInXFwlYyciLCAqKG1lc3NhZ2UrKykpOworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXCcnKTsKKwlyZXMgPSB3cml0ZV9tZXNzYWdlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHJlYmFzZV9wYXRoX2F1dGhvcl9zY3JpcHQoKSwgMSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBUYWtlIGEgc2VyaWVzIG9mIEtFWT0nVkFMVUUnIGxpbmVzIHdoZXJlIFZBTFVFIHBhcnQgaXMKKyAqIHNxLXF1b3RlZCwgYW5kIGFwcGVuZCA8S0VZLCBWQUxVRT4gYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGxpc3QKKyAqLworc3RhdGljIGludCBwYXJzZV9rZXlfdmFsdWVfc3F1b3RlZChjaGFyICpidWYsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwl3aGlsZSAoKmJ1ZikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJY2hhciAqbnA7CisJCWNoYXIgKmNwID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKwkJaWYgKCFjcCkgeworCQkJbnAgPSBzdHJjaHJudWwoYnVmLCAnXG4nKTsKKwkJCXJldHVybiBlcnJvcihfKCJubyBrZXkgcHJlc2VudCBpbiAnJS4qcyciKSwKKwkJCQkgICAgIChpbnQpIChucCAtIGJ1ZiksIGJ1Zik7CisJCX0KKwkJbnAgPSBzdHJjaHJudWwoY3AsICdcbicpOworCQkqY3ArKyA9ICdcMCc7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgYnVmKTsKKworCQlidWYgPSBucCArICgqbnAgPT0gJ1xuJyk7CisJCSpucCA9ICdcMCc7CisJCWNwID0gc3FfZGVxdW90ZShjcCk7CisJCWlmICghY3ApCisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIGRlcXVvdGUgdmFsdWUgb2YgJyVzJyIpLAorCQkJCSAgICAgaXRlbS0+c3RyaW5nKTsKKwkJaXRlbS0+dXRpbCA9IHhzdHJkdXAoY3ApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBSZWFkcyBhbmQgcGFyc2VzIHRoZSBzdGF0ZSBkaXJlY3RvcnkncyAiYXV0aG9yLXNjcmlwdCIgZmlsZSwgYW5kIHNldHMgbmFtZSwKKyAqIGVtYWlsIGFuZCBkYXRlIGFjY29yZGluZ2x5LgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQuCisgKgorICogVGhlIGF1dGhvciBzY3JpcHQgaXMgb2YgdGhlIGZvcm1hdDoKKyAqCisgKglHSVRfQVVUSE9SX05BTUU9JyRhdXRob3JfbmFtZScKKyAqCUdJVF9BVVRIT1JfRU1BSUw9JyRhdXRob3JfZW1haWwnCisgKglHSVRfQVVUSE9SX0RBVEU9JyRhdXRob3JfZGF0ZScKKyAqCisgKiB3aGVyZSAkYXV0aG9yX25hbWUsICRhdXRob3JfZW1haWwgYW5kICRhdXRob3JfZGF0ZSBhcmUgcXVvdGVkLiBXZSBhcmUgc3RyaWN0CisgKiB3aXRoIG91ciBwYXJzaW5nLCBhcyB0aGUgZmlsZSB3YXMgbWVhbnQgdG8gYmUgZXZhbCdkIGluIHRoZSBub3ctcmVtb3ZlZAorICogZ2l0LWFtLnNoL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoIHNjcmlwdHMsIGFuZCB0aHVzIGlmIHRoZSBmaWxlIGRpZmZlcnMKKyAqIGZyb20gd2hhdCB0aGlzIGZ1bmN0aW9uIGV4cGVjdHMsIGl0IGlzIGJldHRlciB0byBiYWlsIG91dCB0aGFuIHRvIGRvCisgKiBzb21ldGhpbmcgdGhhdCB0aGUgdXNlciBkb2VzIG5vdCBleHBlY3QuCisgKi8KK2ludCByZWFkX2F1dGhvcl9zY3JpcHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqKm5hbWUsIGNoYXIgKiplbWFpbCwgY2hhciAqKmRhdGUsCisJCSAgICAgICBpbnQgYWxsb3dfbWlzc2luZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBrdiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCByZXR2YWwgPSAtMTsgLyogYXNzdW1lIGZhaWx1cmUgKi8KKwlpbnQgaSwgbmFtZV9pID0gLTIsIGVtYWlsX2kgPSAtMiwgZGF0ZV9pID0gLTIsIGVyciA9IDA7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBwYXRoLCAyNTYpIDw9IDApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCWlmIChlcnJubyA9PSBFTk9FTlQgJiYgYWxsb3dfbWlzc2luZykKKwkJCXJldHVybiAwOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIpLAorCQkJCQkgICBwYXRoKTsKKwl9CisKKwlpZiAocGFyc2Vfa2V5X3ZhbHVlX3NxdW90ZWQoYnVmLmJ1ZiwgJmt2KSkKKwkJZ290byBmaW5pc2g7CisKKwlmb3IgKGkgPSAwOyBpIDwga3YubnI7IGkrKykgeworCQlpZiAoIXN0cmNtcChrdi5pdGVtc1tpXS5zdHJpbmcsICJHSVRfQVVUSE9SX05BTUUiKSkgeworCQkJaWYgKG5hbWVfaSAhPSAtMikKKwkJCQluYW1lX2kgPSBlcnJvcihfKCInR0lUX0FVVEhPUl9OQU1FJyBhbHJlYWR5IGdpdmVuIikpOworCQkJZWxzZQorCQkJCW5hbWVfaSA9IGk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrdi5pdGVtc1tpXS5zdHJpbmcsICJHSVRfQVVUSE9SX0VNQUlMIikpIHsKKwkJCWlmIChlbWFpbF9pICE9IC0yKQorCQkJCWVtYWlsX2kgPSBlcnJvcihfKCInR0lUX0FVVEhPUl9FTUFJTCcgYWxyZWFkeSBnaXZlbiIpKTsKKwkJCWVsc2UKKwkJCQllbWFpbF9pID0gaTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGt2Lml0ZW1zW2ldLnN0cmluZywgIkdJVF9BVVRIT1JfREFURSIpKSB7CisJCQlpZiAoZGF0ZV9pICE9IC0yKQorCQkJCWRhdGVfaSA9IGVycm9yKF8oIidHSVRfQVVUSE9SX0RBVEUnIGFscmVhZHkgZ2l2ZW4iKSk7CisJCQllbHNlCisJCQkJZGF0ZV9pID0gaTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IGVycm9yKF8oInVua25vd24gdmFyaWFibGUgJyVzJyIpLAorCQkJCSAgICBrdi5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJfQorCWlmIChuYW1lX2kgPT0gLTIpCisJCWVycm9yKF8oIm1pc3NpbmcgJ0dJVF9BVVRIT1JfTkFNRSciKSk7CisJaWYgKGVtYWlsX2kgPT0gLTIpCisJCWVycm9yKF8oIm1pc3NpbmcgJ0dJVF9BVVRIT1JfRU1BSUwnIikpOworCWlmIChkYXRlX2kgPT0gLTIpCisJCWVycm9yKF8oIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciKSk7CisJaWYgKGRhdGVfaSA8IDAgfHwgZW1haWxfaSA8IDAgfHwgZGF0ZV9pIDwgMCB8fCBlcnIpCisJCWdvdG8gZmluaXNoOworCSpuYW1lID0ga3YuaXRlbXNbbmFtZV9pXS51dGlsOworCSplbWFpbCA9IGt2Lml0ZW1zW2VtYWlsX2ldLnV0aWw7CisJKmRhdGUgPSBrdi5pdGVtc1tkYXRlX2ldLnV0aWw7CisJcmV0dmFsID0gMDsKK2ZpbmlzaDoKKwlzdHJpbmdfbGlzdF9jbGVhcigma3YsICEhcmV0dmFsKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogUmVhZCBhIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCBBTkQgR0lUX0FVVEhPUl9EQVRFIGZyb20gYQorICogZmlsZSB3aXRoIHNoZWxsIHF1b3RpbmcgaW50byBzdHJ1Y3QgYXJndl9hcnJheS4gUmV0dXJucyAtMSBvbgorICogZXJyb3IsIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHJlYWRfZW52X3NjcmlwdChzdHJ1Y3QgYXJndl9hcnJheSAqZW52KQoreworCWNoYXIgKm5hbWUsICplbWFpbCwgKmRhdGU7CisKKwlpZiAocmVhZF9hdXRob3Jfc2NyaXB0KHJlYmFzZV9wYXRoX2F1dGhvcl9zY3JpcHQoKSwKKwkJCSAgICAgICAmbmFtZSwgJmVtYWlsLCAmZGF0ZSwgMCkpCisJCXJldHVybiAtMTsKKworCWFyZ3ZfYXJyYXlfcHVzaGYoZW52LCAiR0lUX0FVVEhPUl9OQU1FPSVzIiwgbmFtZSk7CisJYXJndl9hcnJheV9wdXNoZihlbnYsICJHSVRfQVVUSE9SX0VNQUlMPSVzIiwgZW1haWwpOworCWFyZ3ZfYXJyYXlfcHVzaGYoZW52LCAiR0lUX0FVVEhPUl9EQVRFPSVzIiwgZGF0ZSk7CisJZnJlZShuYW1lKTsKKwlmcmVlKGVtYWlsKTsKKwlmcmVlKGRhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfYXV0aG9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJc2l6ZV90IGxlbjsKKwljb25zdCBjaGFyICphOworCisJYSA9IGZpbmRfY29tbWl0X2hlYWRlcihtZXNzYWdlLCAiYXV0aG9yIiwgJmxlbik7CisJaWYgKGEpCisJCXJldHVybiB4bWVtZHVweihhLCBsZW4pOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHN0YWdlZF9jaGFuZ2VzX2FkdmljZVtdID0KK05fKCJ5b3UgaGF2ZSBzdGFnZWQgY2hhbmdlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZVxuIgorIklmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlIHNxdWFzaGVkIGludG8gdGhlIHByZXZpb3VzIGNvbW1pdCwgcnVuOlxuIgorIlxuIgorIiAgZ2l0IGNvbW1pdCAtLWFtZW5kICVzXG4iCisiXG4iCisiSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjpcbiIKKyJcbiIKKyIgIGdpdCBjb21taXQgJXNcbiIKKyJcbiIKKyJJbiBib3RoIGNhc2VzLCBvbmNlIHlvdSdyZSBkb25lLCBjb250aW51ZSB3aXRoOlxuIgorIlxuIgorIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iKTsKKworI2RlZmluZSBBTExPV19FTVBUWSAoMTw8MCkKKyNkZWZpbmUgRURJVF9NU0cgICAgKDE8PDEpCisjZGVmaW5lIEFNRU5EX01TRyAgICgxPDwyKQorI2RlZmluZSBDTEVBTlVQX01TRyAoMTw8MykKKyNkZWZpbmUgVkVSSUZZX01TRyAgKDE8PDQpCisjZGVmaW5lIENSRUFURV9ST09UX0NPTU1JVCAoMTw8NSkKKworc3RhdGljIGludCBydW5fY29tbWFuZF9zaWxlbnRfb25fc3VjY2VzcyhzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJjOworCisJY21kLT5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlyYyA9IHBpcGVfY29tbWFuZChjbWQsCisJCQkgIE5VTEwsIDAsCisJCQkgIE5VTEwsIDAsCisJCQkgICZidWYsIDApOworCisJaWYgKHJjKQorCQlmcHV0cyhidWYuYnVmLCBzdGRlcnIpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIElmIHdlIGFyZSBjaGVycnktcGljaywgYW5kIGlmIHRoZSBtZXJnZSBkaWQgbm90IHJlc3VsdCBpbgorICogaGFuZC1lZGl0aW5nLCB3ZSB3aWxsIGhpdCB0aGlzIGNvbW1pdCBhbmQgaW5oZXJpdCB0aGUgb3JpZ2luYWwKKyAqIGF1dGhvciBkYXRlIGFuZCBuYW1lLgorICoKKyAqIElmIHdlIGFyZSByZXZlcnQsIG9yIGlmIG91ciBjaGVycnktcGljayByZXN1bHRzIGluIGEgaGFuZCBtZXJnZSwKKyAqIHdlIGhhZCBiZXR0ZXIgc2F5IHRoYXQgdGhlIGN1cnJlbnQgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgdGhhdC4KKyAqCisgKiBBbiBleGNlcHRpb24gaXMgd2hlbiBydW5fZ2l0X2NvbW1pdCgpIGlzIGNhbGxlZCBkdXJpbmcgYW4KKyAqIGludGVyYWN0aXZlIHJlYmFzZTogaW4gdGhhdCBjYXNlLCB3ZSB3aWxsIHdhbnQgdG8gcmV0YWluIHRoZQorICogYXV0aG9yIG1ldGFkYXRhLgorICovCitzdGF0aWMgaW50IHJ1bl9naXRfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBjb25zdCBjaGFyICpkZWZtc2csCisJCQkgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCWNtZC5naXRfY21kID0gMTsKKworCWlmIChpc19yZWJhc2VfaShvcHRzKSAmJiByZWFkX2Vudl9zY3JpcHQoJmNtZC5lbnZfYXJyYXkpKSB7CisJCWNvbnN0IGNoYXIgKmdwZ19vcHQgPSBncGdfc2lnbl9vcHRfcXVvdGVkKG9wdHMpOworCisJCXJldHVybiBlcnJvcihfKHN0YWdlZF9jaGFuZ2VzX2FkdmljZSksCisJCQkgICAgIGdwZ19vcHQsIGdwZ19vcHQpOworCX0KKworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICJjb21taXQiKTsKKworCWlmICghKGZsYWdzICYgVkVSSUZZX01TRykpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItbiIpOworCWlmICgoZmxhZ3MgJiBBTUVORF9NU0cpKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1hbWVuZCIpOworCWlmIChvcHRzLT5ncGdfc2lnbikKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsICItUyVzIiwgb3B0cy0+Z3BnX3NpZ24pOworCWlmIChkZWZtc2cpCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNtZC5hcmdzLCAiLUYiLCBkZWZtc2csIE5VTEwpOworCWVsc2UgaWYgKCEoZmxhZ3MgJiBFRElUX01TRykpCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNtZC5hcmdzLCAiLUMiLCAiSEVBRCIsIE5VTEwpOworCWlmICgoZmxhZ3MgJiBDTEVBTlVQX01TRykpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWNsZWFudXA9c3RyaXAiKTsKKwlpZiAoKGZsYWdzICYgRURJVF9NU0cpKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLWUiKTsKKwllbHNlIGlmICghKGZsYWdzICYgQ0xFQU5VUF9NU0cpICYmCisJCSAhb3B0cy0+c2lnbm9mZiAmJiAhb3B0cy0+cmVjb3JkX29yaWdpbiAmJgorCQkgIW9wdHMtPmV4cGxpY2l0X2NsZWFudXApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWNsZWFudXA9dmVyYmF0aW0iKTsKKworCWlmICgoZmxhZ3MgJiBBTExPV19FTVBUWSkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWFsbG93LWVtcHR5Iik7CisKKwlpZiAoIShmbGFncyAmIEVESVRfTVNHKSkKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tYWxsb3ctZW1wdHktbWVzc2FnZSIpOworCisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmICEoZmxhZ3MgJiBFRElUX01TRykpCisJCXJldHVybiBydW5fY29tbWFuZF9zaWxlbnRfb25fc3VjY2VzcygmY21kKTsKKwllbHNlCisJCXJldHVybiBydW5fY29tbWFuZCgmY21kKTsKK30KKworc3RhdGljIGludCByZXN0X2lzX2VtcHR5KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgc3RhcnQpCit7CisJaW50IGksIGVvbDsKKwljb25zdCBjaGFyICpubDsKKworCS8qIENoZWNrIGlmIHRoZSByZXN0IGlzIGp1c3Qgd2hpdGVzcGFjZSBhbmQgU2lnbmVkLW9mZi1ieSdzLiAqLworCWZvciAoaSA9IHN0YXJ0OyBpIDwgc2ItPmxlbjsgaSsrKSB7CisJCW5sID0gbWVtY2hyKHNiLT5idWYgKyBpLCAnXG4nLCBzYi0+bGVuIC0gaSk7CisJCWlmIChubCkKKwkJCWVvbCA9IG5sIC0gc2ItPmJ1ZjsKKwkJZWxzZQorCQkJZW9sID0gc2ItPmxlbjsKKworCQlpZiAoc3RybGVuKHNpZ25fb2ZmX2hlYWRlcikgPD0gZW9sIC0gaSAmJgorCQkgICAgc3RhcnRzX3dpdGgoc2ItPmJ1ZiArIGksIHNpZ25fb2ZmX2hlYWRlcikpIHsKKwkJCWkgPSBlb2w7CisJCQljb250aW51ZTsKKwkJfQorCQl3aGlsZSAoaSA8IGVvbCkKKwkJCWlmICghaXNzcGFjZShzYi0+YnVmW2krK10pKQorCQkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCit2b2lkIGNsZWFudXBfbWVzc2FnZShzdHJ1Y3Qgc3RyYnVmICptc2didWYsCisJZW51bSBjb21taXRfbXNnX2NsZWFudXBfbW9kZSBjbGVhbnVwX21vZGUsIGludCB2ZXJib3NlKQoreworCWlmICh2ZXJib3NlIHx8IC8qIFRydW5jYXRlIHRoZSBtZXNzYWdlIGp1c3QgYmVmb3JlIHRoZSBkaWZmLCBpZiBhbnkuICovCisJICAgIGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMpCisJCXN0cmJ1Zl9zZXRsZW4obXNnYnVmLCB3dF9zdGF0dXNfbG9jYXRlX2VuZChtc2didWYtPmJ1ZiwgbXNnYnVmLT5sZW4pKTsKKwlpZiAoY2xlYW51cF9tb2RlICE9IENPTU1JVF9NU0dfQ0xFQU5VUF9OT05FKQorCQlzdHJidWZfc3RyaXBzcGFjZShtc2didWYsIGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfQUxMKTsKK30KKworLyoKKyAqIEZpbmQgb3V0IGlmIHRoZSBtZXNzYWdlIGluIHRoZSBzdHJidWYgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlIGFuZAorICogU2lnbmVkLW9mZi1ieSBsaW5lcy4KKyAqLworaW50IG1lc3NhZ2VfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCSAgICAgZW51bSBjb21taXRfbXNnX2NsZWFudXBfbW9kZSBjbGVhbnVwX21vZGUpCit7CisJaWYgKGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfTk9ORSAmJiBzYi0+bGVuKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVzdF9pc19lbXB0eShzYiwgMCk7Cit9CisKKy8qCisgKiBTZWUgaWYgdGhlIHVzZXIgZWRpdGVkIHRoZSBtZXNzYWdlIGluIHRoZSBlZGl0b3Igb3IgbGVmdCB3aGF0CisgKiB3YXMgaW4gdGhlIHRlbXBsYXRlIGludGFjdAorICovCitpbnQgdGVtcGxhdGVfdW50b3VjaGVkKGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICp0ZW1wbGF0ZV9maWxlLAorCQkgICAgICAgZW51bSBjb21taXRfbXNnX2NsZWFudXBfbW9kZSBjbGVhbnVwX21vZGUpCit7CisJc3RydWN0IHN0cmJ1ZiB0bXBsID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqc3RhcnQ7CisKKwlpZiAoY2xlYW51cF9tb2RlID09IENPTU1JVF9NU0dfQ0xFQU5VUF9OT05FICYmIHNiLT5sZW4pCisJCXJldHVybiAwOworCisJaWYgKCF0ZW1wbGF0ZV9maWxlIHx8IHN0cmJ1Zl9yZWFkX2ZpbGUoJnRtcGwsIHRlbXBsYXRlX2ZpbGUsIDApIDw9IDApCisJCXJldHVybiAwOworCisJc3RyYnVmX3N0cmlwc3BhY2UoJnRtcGwsIGNsZWFudXBfbW9kZSA9PSBDT01NSVRfTVNHX0NMRUFOVVBfQUxMKTsKKwlpZiAoIXNraXBfcHJlZml4KHNiLT5idWYsIHRtcGwuYnVmLCAmc3RhcnQpKQorCQlzdGFydCA9IHNiLT5idWY7CisJc3RyYnVmX3JlbGVhc2UoJnRtcGwpOworCXJldHVybiByZXN0X2lzX2VtcHR5KHNiLCBzdGFydCAtIHNiLT5idWYpOworfQorCitpbnQgdXBkYXRlX2hlYWRfd2l0aF9yZWZsb2coY29uc3Qgc3RydWN0IGNvbW1pdCAqb2xkX2hlYWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X2hlYWQsCisJCQkgICAgY29uc3QgY2hhciAqYWN0aW9uLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICptc2csCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpubDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChhY3Rpb24pIHsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGFjdGlvbik7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiOiAiKTsKKwl9CisKKwlubCA9IHN0cmNocihtc2ctPmJ1ZiwgJ1xuJyk7CisJaWYgKG5sKSB7CisJCXN0cmJ1Zl9hZGQoJnNiLCBtc2ctPmJ1ZiwgbmwgKyAxIC0gbXNnLT5idWYpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRidWYoJnNiLCBtc2cpOworCQlzdHJidWZfYWRkY2goJnNiLCAnXG4nKTsKKwl9CisKKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbihlcnIpOworCWlmICghdHJhbnNhY3Rpb24gfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgIkhFQUQiLCBuZXdfaGVhZCwKKwkJCQkgICBvbGRfaGVhZCA/ICZvbGRfaGVhZC0+b2JqZWN0Lm9pZCA6ICZudWxsX29pZCwKKwkJCQkgICAwLCBzYi5idWYsIGVycikgfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgZXJyKSkgeworCQlyZXQgPSAtMTsKKwl9CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ1bl9yZXdyaXRlX2hvb2soY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkb2lkLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld29pZCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbM107CisJaW50IGNvZGU7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJYXJndlswXSA9IGZpbmRfaG9vaygicG9zdC1yZXdyaXRlIik7CisJaWYgKCFhcmd2WzBdKQorCQlyZXR1cm4gMDsKKworCWFyZ3ZbMV0gPSAiYW1lbmQiOworCWFyZ3ZbMl0gPSBOVUxMOworCisJcHJvYy5hcmd2ID0gYXJndjsKKwlwcm9jLmluID0gLTE7CisJcHJvYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlwcm9jLnRyYWNlMl9ob29rX25hbWUgPSAicG9zdC1yZXdyaXRlIjsKKworCWNvZGUgPSBzdGFydF9jb21tYW5kKCZwcm9jKTsKKwlpZiAoY29kZSkKKwkJcmV0dXJuIGNvZGU7CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMgJXNcbiIsIG9pZF90b19oZXgob2xkb2lkKSwgb2lkX3RvX2hleChuZXdvaWQpKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCXdyaXRlX2luX2Z1bGwocHJvYy5pbiwgc2IuYnVmLCBzYi5sZW4pOworCWNsb3NlKHByb2MuaW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmcHJvYyk7Cit9CisKK3ZvaWQgY29tbWl0X3Bvc3RfcmV3cml0ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBjb25zdCBzdHJ1Y3QgY29tbWl0ICpvbGRfaGVhZCwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfaGVhZCkKK3sKKwlzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmNmZzsKKworCWNmZyA9IGluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZSgiYW1lbmQiKTsKKwlpZiAoY2ZnKSB7CisJCS8qIHdlIGFyZSBhbWVuZGluZywgc28gb2xkX2hlYWQgaXMgbm90IE5VTEwgKi8KKwkJY29weV9ub3RlX2Zvcl9yZXdyaXRlKGNmZywgJm9sZF9oZWFkLT5vYmplY3Qub2lkLCBuZXdfaGVhZCk7CisJCWZpbmlzaF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKHIsIGNmZywgIk5vdGVzIGFkZGVkIGJ5ICdnaXQgY29tbWl0IC0tYW1lbmQnIik7CisJfQorCXJ1bl9yZXdyaXRlX2hvb2soJm9sZF9oZWFkLT5vYmplY3Qub2lkLCBuZXdfaGVhZCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3ByZXBhcmVfY29tbWl0X21zZ19ob29rKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICptc2csCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNvbW1pdCkKK3sKKwlpbnQgcmV0ID0gMDsKKwljb25zdCBjaGFyICpuYW1lLCAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDsKKworCW5hbWUgPSBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpOworCWlmICh3cml0ZV9tZXNzYWdlKG1zZy0+YnVmLCBtc2ctPmxlbiwgbmFtZSwgMCkpCisJCXJldHVybiAtMTsKKworCWlmIChjb21taXQpIHsKKwkJYXJnMSA9ICJjb21taXQiOworCQlhcmcyID0gY29tbWl0OworCX0gZWxzZSB7CisJCWFyZzEgPSAibWVzc2FnZSI7CisJfQorCWlmIChydW5fY29tbWl0X2hvb2soMCwgci0+aW5kZXhfZmlsZSwgInByZXBhcmUtY29tbWl0LW1zZyIsIG5hbWUsCisJCQkgICAgYXJnMSwgYXJnMiwgTlVMTCkpCisJCXJldCA9IGVycm9yKF8oIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIikpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaW1wbGljaXRfaWRlbnRfYWR2aWNlX25vY29uZmlnW10gPQorTl8oIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGltcGxpY2l0X2lkZW50X2FkdmljZV9jb25maWdbXSA9CitOXygiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmltcGxpY2l0X2lkZW50X2FkdmljZSh2b2lkKQoreworCWNoYXIgKnVzZXJfY29uZmlnID0gZXhwYW5kX3VzZXJfcGF0aCgifi8uZ2l0Y29uZmlnIiwgMCk7CisJY2hhciAqeGRnX2NvbmZpZyA9IHhkZ19jb25maWdfaG9tZSgiY29uZmlnIik7CisJaW50IGNvbmZpZ19leGlzdHMgPSBmaWxlX2V4aXN0cyh1c2VyX2NvbmZpZykgfHwgZmlsZV9leGlzdHMoeGRnX2NvbmZpZyk7CisKKwlmcmVlKHVzZXJfY29uZmlnKTsKKwlmcmVlKHhkZ19jb25maWcpOworCisJaWYgKGNvbmZpZ19leGlzdHMpCisJCXJldHVybiBfKGltcGxpY2l0X2lkZW50X2FkdmljZV9jb25maWcpOworCWVsc2UKKwkJcmV0dXJuIF8oaW1wbGljaXRfaWRlbnRfYWR2aWNlX25vY29uZmlnKTsKKworfQorCit2b2lkIHByaW50X2NvbW1pdF9zdW1tYXJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBzdHJidWYgZm9ybWF0ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqaGVhZDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcGN0eCA9IHswfTsKKwlzdHJ1Y3Qgc3RyYnVmIGF1dGhvcl9pZGVudCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgY29tbWl0dGVyX2lkZW50ID0gU1RSQlVGX0lOSVQ7CisKKwljb21taXQgPSBsb29rdXBfY29tbWl0KHIsIG9pZCk7CisJaWYgKCFjb21taXQpCisJCWRpZShfKCJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IikpOworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIpKTsKKworCXN0cmJ1Zl9hZGRzdHIoJmZvcm1hdCwgImZvcm1hdDolaF0gJXMiKTsKKworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlYW4gPCVhZT4iLCAmYXV0aG9yX2lkZW50LCAmcGN0eCk7CisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiVjbiA8JWNlPiIsICZjb21taXR0ZXJfaWRlbnQsICZwY3R4KTsKKwlpZiAoc3RyYnVmX2NtcCgmYXV0aG9yX2lkZW50LCAmY29tbWl0dGVyX2lkZW50KSkgeworCQlzdHJidWZfYWRkc3RyKCZmb3JtYXQsICJcbiBBdXRob3I6ICIpOworCQlzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZSgmZm9ybWF0LCAmYXV0aG9yX2lkZW50KTsKKwl9CisJaWYgKGZsYWdzICYgU1VNTUFSWV9TSE9XX0FVVEhPUl9EQVRFKSB7CisJCXN0cnVjdCBzdHJidWYgZGF0ZSA9IFNUUkJVRl9JTklUOworCisJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIlYWQiLCAmZGF0ZSwgJnBjdHgpOworCQlzdHJidWZfYWRkc3RyKCZmb3JtYXQsICJcbiBEYXRlOiAiKTsKKwkJc3RyYnVmX2FkZGJ1Zl9wZXJjZW50cXVvdGUoJmZvcm1hdCwgJmRhdGUpOworCQlzdHJidWZfcmVsZWFzZSgmZGF0ZSk7CisJfQorCWlmICghY29tbWl0dGVyX2lkZW50X3N1ZmZpY2llbnRseV9naXZlbigpKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmZvcm1hdCwgIlxuIENvbW1pdHRlcjogIik7CisJCXN0cmJ1Zl9hZGRidWZfcGVyY2VudHF1b3RlKCZmb3JtYXQsICZjb21taXR0ZXJfaWRlbnQpOworCQlpZiAoYWR2aWNlX2ltcGxpY2l0X2lkZW50aXR5KSB7CisJCQlzdHJidWZfYWRkY2goJmZvcm1hdCwgJ1xuJyk7CisJCQlzdHJidWZfYWRkc3RyKCZmb3JtYXQsIGltcGxpY2l0X2lkZW50X2FkdmljZSgpKTsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYXV0aG9yX2lkZW50KTsKKwlzdHJidWZfcmVsZWFzZSgmY29tbWl0dGVyX2lkZW50KTsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMociwgJnJldiwgcHJlZml4KTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisKKwlyZXYuZGlmZiA9IDE7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9CisJCURJRkZfRk9STUFUX1NIT1JUU1RBVCB8IERJRkZfRk9STUFUX1NVTU1BUlk7CisKKwlyZXYudmVyYm9zZV9oZWFkZXIgPSAxOworCXJldi5zaG93X3Jvb3RfZGlmZiA9IDE7CisJZ2V0X2NvbW1pdF9mb3JtYXQoZm9ybWF0LmJ1ZiwgJnJldik7CisJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDA7CisJcmV2LmRpZmZvcHQuZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKKwlyZXYuZGlmZm9wdC5icmVha19vcHQgPSAwOworCWRpZmZfc2V0dXBfZG9uZSgmcmV2LmRpZmZvcHQpOworCisJaGVhZCA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIE5VTEwsIE5VTEwpOworCWlmICghaGVhZCkKKwkJZGllX2Vycm5vKF8oInVuYWJsZSB0byByZXNvbHZlIEhFQUQgYWZ0ZXIgY3JlYXRpbmcgY29tbWl0IikpOworCWlmICghc3RyY21wKGhlYWQsICJIRUFEIikpCisJCWhlYWQgPSBfKCJkZXRhY2hlZCBIRUFEIik7CisJZWxzZQorCQlza2lwX3ByZWZpeChoZWFkLCAicmVmcy9oZWFkcy8iLCAmaGVhZCk7CisJcHJpbnRmKCJbJXMlcyAiLCBoZWFkLCAoZmxhZ3MgJiBTVU1NQVJZX0lOSVRJQUxfQ09NTUlUKSA/CisJCQkJCQlfKCIgKHJvb3QtY29tbWl0KSIpIDogIiIpOworCisJaWYgKCFsb2dfdHJlZV9jb21taXQoJnJldiwgY29tbWl0KSkgeworCQlyZXYuYWx3YXlzX3Nob3dfaGVhZGVyID0gMTsKKwkJcmV2LnVzZV90ZXJtaW5hdG9yID0gMTsKKwkJbG9nX3RyZWVfY29tbWl0KCZyZXYsIGNvbW1pdCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmZvcm1hdCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaGVhZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGNvbW1pdCAqKmhlYWQpCit7CisJc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmb2lkKSkgeworCQljdXJyZW50X2hlYWQgPSBOVUxMOworCX0gZWxzZSB7CisJCWN1cnJlbnRfaGVhZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHIsICZvaWQpOworCQlpZiAoIWN1cnJlbnRfaGVhZCkKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgSEVBRCIpKTsKKwkJaWYgKCFvaWRlcSgmb2lkLCAmY3VycmVudF9oZWFkLT5vYmplY3Qub2lkKSkgeworCQkJd2FybmluZyhfKCJIRUFEICVzIGlzIG5vdCBhIGNvbW1pdCEiKSwKKwkJCQlvaWRfdG9faGV4KCZvaWQpKTsKKwkJfQorCQlpZiAocGFyc2VfY29tbWl0KGN1cnJlbnRfaGVhZCkpCisJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IikpOworCX0KKwkqaGVhZCA9IGN1cnJlbnRfaGVhZDsKKworCXJldHVybiAwOworfQorCisvKgorICogVHJ5IHRvIGNvbW1pdCB3aXRob3V0IGZvcmtpbmcgJ2dpdCBjb21taXQnLiBJbiBzb21lIGNhc2VzIHdlIG5lZWQKKyAqIHRvIHJ1biAnZ2l0IGNvbW1pdCcgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlCisgKgorICogUmV0dXJuczoKKyAqICAtMSAtIGVycm9yIHVuYWJsZSB0byBjb21taXQKKyAqICAgMCAtIHN1Y2Nlc3MKKyAqICAgMSAtIHJ1biAnZ2l0IGNvbW1pdCcKKyAqLworc3RhdGljIGludCB0cnlfdG9fY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJIHN0cnVjdCBzdHJidWYgKm1zZywgY29uc3QgY2hhciAqYXV0aG9yLAorCQkJIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRyZWU7CisJc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOworCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdF9tc2cgPSBTVFJCVUZfSU5JVDsKKwljaGFyICphbWVuZF9hdXRob3IgPSBOVUxMOworCWNvbnN0IGNoYXIgKmhvb2tfY29tbWl0ID0gTlVMTDsKKwllbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXA7CisJaW50IHJlcyA9IDA7CisKKwlpZiAocGFyc2VfaGVhZChyLCAmY3VycmVudF9oZWFkKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGZsYWdzICYgQU1FTkRfTVNHKSB7CisJCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfZ3Bnc2lnW10gPSB7ICJncGdzaWciLCBOVUxMIH07CisJCWNvbnN0IGNoYXIgKm91dF9lbmMgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCQljb25zdCBjaGFyICptZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGN1cnJlbnRfaGVhZCwgTlVMTCwKKwkJCQkJCSAgICAgIG91dF9lbmMpOworCisJCWlmICghbXNnKSB7CisJCQljb25zdCBjaGFyICpvcmlnX21lc3NhZ2UgPSBOVUxMOworCisJCQlmaW5kX2NvbW1pdF9zdWJqZWN0KG1lc3NhZ2UsICZvcmlnX21lc3NhZ2UpOworCQkJbXNnID0gJmNvbW1pdF9tc2c7CisJCQlzdHJidWZfYWRkc3RyKG1zZywgb3JpZ19tZXNzYWdlKTsKKwkJCWhvb2tfY29tbWl0ID0gIkhFQUQiOworCQl9CisJCWF1dGhvciA9IGFtZW5kX2F1dGhvciA9IGdldF9hdXRob3IobWVzc2FnZSk7CisJCXVudXNlX2NvbW1pdF9idWZmZXIoY3VycmVudF9oZWFkLCBtZXNzYWdlKTsKKwkJaWYgKCFhdXRob3IpIHsKKwkJCXJlcyA9IGVycm9yKF8oInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIikpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcGFyZW50cyA9IGNvcHlfY29tbWl0X2xpc3QoY3VycmVudF9oZWFkLT5wYXJlbnRzKTsKKwkJZXh0cmEgPSByZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJzKGN1cnJlbnRfaGVhZCwgZXhjbHVkZV9ncGdzaWcpOworCX0gZWxzZSBpZiAoY3VycmVudF9oZWFkICYmCisJCSAgICghKGZsYWdzICYgQ1JFQVRFX1JPT1RfQ09NTUlUKSB8fCAoZmxhZ3MgJiBBTUVORF9NU0cpKSkgeworCQljb21taXRfbGlzdF9pbnNlcnQoY3VycmVudF9oZWFkLCAmcGFyZW50cyk7CisJfQorCisJaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUoJnRyZWUsIHItPmluZGV4LCByLT5pbmRleF9maWxlLCAwLCBOVUxMKSkgeworCQlyZXMgPSBlcnJvcihfKCJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIikpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIShmbGFncyAmIEFMTE9XX0VNUFRZKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpmaXJzdF9wYXJlbnQgPSBjdXJyZW50X2hlYWQ7CisKKwkJaWYgKGZsYWdzICYgQU1FTkRfTVNHKSB7CisJCQlpZiAoY3VycmVudF9oZWFkLT5wYXJlbnRzKSB7CisJCQkJZmlyc3RfcGFyZW50ID0gY3VycmVudF9oZWFkLT5wYXJlbnRzLT5pdGVtOworCQkJCWlmIChyZXBvX3BhcnNlX2NvbW1pdChyLCBmaXJzdF9wYXJlbnQpKSB7CisJCQkJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIpKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmaXJzdF9wYXJlbnQgPSBOVUxMOworCQkJfQorCQl9CisJCWlmIChvaWRlcShmaXJzdF9wYXJlbnQKKwkJCSAgPyBnZXRfY29tbWl0X3RyZWVfb2lkKGZpcnN0X3BhcmVudCkKKwkJCSAgOiB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLAorCQkJICAmdHJlZSkpIHsKKwkJCXJlcyA9IDE7IC8qIHJ1biAnZ2l0IGNvbW1pdCcgdG8gZGlzcGxheSBlcnJvciBtZXNzYWdlICovCisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChmaW5kX2hvb2soInByZXBhcmUtY29tbWl0LW1zZyIpKSB7CisJCXJlcyA9IHJ1bl9wcmVwYXJlX2NvbW1pdF9tc2dfaG9vayhyLCBtc2csIGhvb2tfY29tbWl0KTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gb3V0OworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmY29tbWl0X21zZywgZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2coKSwKKwkJCQkgICAgIDIwNDgpIDwgMCkgeworCQkJcmVzID0gZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIHJlYWQgY29tbWl0IG1lc3NhZ2UgIgorCQkJCQkgICAgICAiZnJvbSAnJXMnIiksCisJCQkJCSAgICBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW1zZyA9ICZjb21taXRfbXNnOworCX0KKworCWlmIChmbGFncyAmIENMRUFOVVBfTVNHKQorCQljbGVhbnVwID0gQ09NTUlUX01TR19DTEVBTlVQX0FMTDsKKwllbHNlIGlmICgob3B0cy0+c2lnbm9mZiB8fCBvcHRzLT5yZWNvcmRfb3JpZ2luKSAmJgorCQkgIW9wdHMtPmV4cGxpY2l0X2NsZWFudXApCisJCWNsZWFudXAgPSBDT01NSVRfTVNHX0NMRUFOVVBfU1BBQ0U7CisJZWxzZQorCQljbGVhbnVwID0gb3B0cy0+ZGVmYXVsdF9tc2dfY2xlYW51cDsKKworCWlmIChjbGVhbnVwICE9IENPTU1JVF9NU0dfQ0xFQU5VUF9OT05FKQorCQlzdHJidWZfc3RyaXBzcGFjZShtc2csIGNsZWFudXAgPT0gQ09NTUlUX01TR19DTEVBTlVQX0FMTCk7CisJaWYgKChmbGFncyAmIEVESVRfTVNHKSAmJiBtZXNzYWdlX2lzX2VtcHR5KG1zZywgY2xlYW51cCkpIHsKKwkJcmVzID0gMTsgLyogcnVuICdnaXQgY29tbWl0JyB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2UgKi8KKwkJZ290byBvdXQ7CisJfQorCisJcmVzZXRfaWRlbnRfZGF0ZSgpOworCisJaWYgKGNvbW1pdF90cmVlX2V4dGVuZGVkKG1zZy0+YnVmLCBtc2ctPmxlbiwgJnRyZWUsIHBhcmVudHMsCisJCQkJIG9pZCwgYXV0aG9yLCBvcHRzLT5ncGdfc2lnbiwgZXh0cmEpKSB7CisJCXJlcyA9IGVycm9yKF8oImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IikpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodXBkYXRlX2hlYWRfd2l0aF9yZWZsb2coY3VycmVudF9oZWFkLCBvaWQsCisJCQkJICAgIGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKSwgbXNnLCAmZXJyKSkgeworCQlyZXMgPSBlcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJZ290byBvdXQ7CisJfQorCisJcnVuX2NvbW1pdF9ob29rKDAsIHItPmluZGV4X2ZpbGUsICJwb3N0LWNvbW1pdCIsIE5VTEwpOworCWlmIChmbGFncyAmIEFNRU5EX01TRykKKwkJY29tbWl0X3Bvc3RfcmV3cml0ZShyLCBjdXJyZW50X2hlYWQsIG9pZCk7CisKK291dDoKKwlmcmVlX2NvbW1pdF9leHRyYV9oZWFkZXJzKGV4dHJhKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlzdHJidWZfcmVsZWFzZSgmY29tbWl0X21zZyk7CisJZnJlZShhbWVuZF9hdXRob3IpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBkb19jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgY29uc3QgY2hhciAqbXNnX2ZpbGUsIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgcmVzID0gMTsKKworCWlmICghKGZsYWdzICYgRURJVF9NU0cpICYmICEoZmxhZ3MgJiBWRVJJRllfTVNHKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCWlmIChtc2dfZmlsZSAmJiBzdHJidWZfcmVhZF9maWxlKCZzYiwgbXNnX2ZpbGUsIDIwNDgpIDwgMCkKKwkJCXJldHVybiBlcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gcmVhZCBjb21taXQgbWVzc2FnZSAiCisJCQkJCSAgICAgImZyb20gJyVzJyIpLAorCQkJCQkgICBtc2dfZmlsZSk7CisKKwkJcmVzID0gdHJ5X3RvX2NvbW1pdChyLCBtc2dfZmlsZSA/ICZzYiA6IE5VTEwsCisJCQkJICAgIGF1dGhvciwgb3B0cywgZmxhZ3MsICZvaWQpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlpZiAoIXJlcykgeworCQkJdW5saW5rKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpOworCQkJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJCQlpZiAoIWlzX3JlYmFzZV9pKG9wdHMpKQorCQkJCXByaW50X2NvbW1pdF9zdW1tYXJ5KHIsIE5VTEwsICZvaWQsCisJCQkJCQlTVU1NQVJZX1NIT1dfQVVUSE9SX0RBVEUpOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0KKwlpZiAocmVzID09IDEpCisJCXJldHVybiBydW5fZ2l0X2NvbW1pdChyLCBtc2dfZmlsZSwgb3B0cywgZmxhZ3MpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBpc19vcmlnaW5hbF9jb21taXRfZW1wdHkoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnB0cmVlX29pZDsKKworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXMiKSwKKwkJCSAgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJaWYgKGNvbW1pdC0+cGFyZW50cykgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHMtPml0ZW07CisJCWlmIChwYXJzZV9jb21taXQocGFyZW50KSkKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIpLAorCQkJCW9pZF90b19oZXgoJnBhcmVudC0+b2JqZWN0Lm9pZCkpOworCQlwdHJlZV9vaWQgPSBnZXRfY29tbWl0X3RyZWVfb2lkKHBhcmVudCk7CisJfSBlbHNlIHsKKwkJcHRyZWVfb2lkID0gdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZTsgLyogY29tbWl0IGlzIHJvb3QgKi8KKwl9CisKKwlyZXR1cm4gb2lkZXEocHRyZWVfb2lkLCBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCkpOworfQorCisvKgorICogU2hvdWxkIGVtcHR5IGNvbW1pdHMgYmUgYWxsb3dlZD8gIFJldHVybiBzdGF0dXM6CisgKiAgICA8MDogRXJyb3IgaW4gaXNfaW5kZXhfdW5jaGFuZ2VkKHIpIG9yIGlzX29yaWdpbmFsX2NvbW1pdF9lbXB0eShjb21taXQpCisgKiAgICAgMDogSGFsdCBvbiBlbXB0eSBjb21taXQKKyAqICAgICAxOiBBbGxvdyBlbXB0eSBjb21taXQKKyAqICAgICAyOiBEcm9wIGVtcHR5IGNvbW1pdAorICovCitzdGF0aWMgaW50IGFsbG93X2VtcHR5KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkgICAgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLAorCQkgICAgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBpbmRleF91bmNoYW5nZWQsIG9yaWdpbmFsbHlfZW1wdHk7CisKKwkvKgorCSAqIEZvdXIgY2FzZXM6CisJICoKKwkgKiAoMSkgd2UgZG8gbm90IGFsbG93IGVtcHR5IGF0IGFsbCBhbmQgZXJyb3Igb3V0LgorCSAqCisJICogKDIpIHdlIGFsbG93IG9uZXMgdGhhdCB3ZXJlIGluaXRpYWxseSBlbXB0eSwgYW5kCisJICogICAgIGp1c3QgZHJvcCB0aGUgb25lcyB0aGF0IGJlY29tZSBlbXB0eQorCSAqCisJICogKDMpIHdlIGFsbG93IG9uZXMgdGhhdCB3ZXJlIGluaXRpYWxseSBlbXB0eSwgYnV0CisJICogICAgIGhhbHQgZm9yIHRoZSBvbmVzIHRoYXQgYmVjb21lIGVtcHR5OworCSAqCisJICogKDQpIHdlIGFsbG93IGJvdGguCisJICovCisJaWYgKCFvcHRzLT5hbGxvd19lbXB0eSkKKwkJcmV0dXJuIDA7IC8qIGxldCAiZ2l0IGNvbW1pdCIgYmFyZiBhcyBuZWNlc3NhcnkgKi8KKworCWluZGV4X3VuY2hhbmdlZCA9IGlzX2luZGV4X3VuY2hhbmdlZChyKTsKKwlpZiAoaW5kZXhfdW5jaGFuZ2VkIDwgMCkKKwkJcmV0dXJuIGluZGV4X3VuY2hhbmdlZDsKKwlpZiAoIWluZGV4X3VuY2hhbmdlZCkKKwkJcmV0dXJuIDA7IC8qIHdlIGRvIG5vdCBoYXZlIHRvIHNheSAtLWFsbG93LWVtcHR5ICovCisKKwlpZiAob3B0cy0+a2VlcF9yZWR1bmRhbnRfY29tbWl0cykKKwkJcmV0dXJuIDE7CisKKwlvcmlnaW5hbGx5X2VtcHR5ID0gaXNfb3JpZ2luYWxfY29tbWl0X2VtcHR5KGNvbW1pdCk7CisJaWYgKG9yaWdpbmFsbHlfZW1wdHkgPCAwKQorCQlyZXR1cm4gb3JpZ2luYWxseV9lbXB0eTsKKwlpZiAob3JpZ2luYWxseV9lbXB0eSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAob3B0cy0+ZHJvcF9yZWR1bmRhbnRfY29tbWl0cykKKwkJcmV0dXJuIDI7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB7CisJY2hhciBjOworCWNvbnN0IGNoYXIgKnN0cjsKK30gdG9kb19jb21tYW5kX2luZm9bXSA9IHsKKwl7ICdwJywgInBpY2siIH0sCisJeyAwLCAgICJyZXZlcnQiIH0sCisJeyAnZScsICJlZGl0IiB9LAorCXsgJ3InLCAicmV3b3JkIiB9LAorCXsgJ2YnLCAiZml4dXAiIH0sCisJeyAncycsICJzcXVhc2giIH0sCisJeyAneCcsICJleGVjIiB9LAorCXsgJ2InLCAiYnJlYWsiIH0sCisJeyAnbCcsICJsYWJlbCIgfSwKKwl7ICd0JywgInJlc2V0IiB9LAorCXsgJ20nLCAibWVyZ2UiIH0sCisJeyAwLCAgICJub29wIiB9LAorCXsgJ2QnLCAiZHJvcCIgfSwKKwl7IDAsICAgTlVMTCB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29tbWFuZF90b19zdHJpbmcoY29uc3QgZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCkKK3sKKwlpZiAoY29tbWFuZCA8IFRPRE9fQ09NTUVOVCkKKwkJcmV0dXJuIHRvZG9fY29tbWFuZF9pbmZvW2NvbW1hbmRdLnN0cjsKKwlkaWUoXygidW5rbm93biBjb21tYW5kOiAlZCIpLCBjb21tYW5kKTsKK30KKworc3RhdGljIGNoYXIgY29tbWFuZF90b19jaGFyKGNvbnN0IGVudW0gdG9kb19jb21tYW5kIGNvbW1hbmQpCit7CisJaWYgKGNvbW1hbmQgPCBUT0RPX0NPTU1FTlQgJiYgdG9kb19jb21tYW5kX2luZm9bY29tbWFuZF0uYykKKwkJcmV0dXJuIHRvZG9fY29tbWFuZF9pbmZvW2NvbW1hbmRdLmM7CisJcmV0dXJuIGNvbW1lbnRfbGluZV9jaGFyOworfQorCitzdGF0aWMgaW50IGlzX25vb3AoY29uc3QgZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCkKK3sKKwlyZXR1cm4gVE9ET19OT09QIDw9IGNvbW1hbmQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfZml4dXAoZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCkKK3sKKwlyZXR1cm4gY29tbWFuZCA9PSBUT0RPX0ZJWFVQIHx8IGNvbW1hbmQgPT0gVE9ET19TUVVBU0g7Cit9CisKKy8qIERvZXMgdGhpcyBjb21tYW5kIGNyZWF0ZSBhIChub24tbWVyZ2UpIGNvbW1pdD8gKi8KK3N0YXRpYyBpbnQgaXNfcGlja19vcl9zaW1pbGFyKGVudW0gdG9kb19jb21tYW5kIGNvbW1hbmQpCit7CisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBUT0RPX1BJQ0s6CisJY2FzZSBUT0RPX1JFVkVSVDoKKwljYXNlIFRPRE9fRURJVDoKKwljYXNlIFRPRE9fUkVXT1JEOgorCWNhc2UgVE9ET19GSVhVUDoKKwljYXNlIFRPRE9fU1FVQVNIOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3NxdWFzaF9tZXNzYWdlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIGVudW0gdG9kb19jb21tYW5kIGNvbW1hbmQsCisJCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVzOworCWNvbnN0IGNoYXIgKm1lc3NhZ2UsICpib2R5OworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKworCWlmIChvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ID4gMCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRlciA9IFNUUkJVRl9JTklUOworCQljaGFyICplb2w7CisKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcmViYXNlX3BhdGhfc3F1YXNoX21zZygpLCA5KSA8PSAwKQorCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkICclcyciKSwKKwkJCQlyZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCkpOworCisJCWVvbCA9IGJ1Zi5idWZbMF0gIT0gY29tbWVudF9saW5lX2NoYXIgPworCQkJYnVmLmJ1ZiA6IHN0cmNocm51bChidWYuYnVmLCAnXG4nKTsKKworCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJWMgIiwgY29tbWVudF9saW5lX2NoYXIpOworCQlzdHJidWZfYWRkZigmaGVhZGVyLCBfKCJUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgJWQgY29tbWl0cy4iKSwKKwkJCSAgICBvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ICsgMik7CisJCXN0cmJ1Zl9zcGxpY2UoJmJ1ZiwgMCwgZW9sIC0gYnVmLmJ1ZiwgaGVhZGVyLmJ1ZiwgaGVhZGVyLmxlbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkZXIpOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmplY3RfaWQgaGVhZDsKKwkJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQ7CisJCWNvbnN0IGNoYXIgKmhlYWRfbWVzc2FnZSwgKmJvZHk7CisKKwkJaWYgKGdldF9vaWQoIkhFQUQiLCAmaGVhZCkpCisJCQlyZXR1cm4gZXJyb3IoXygibmVlZCBhIEhFQUQgdG8gZml4dXAiKSk7CisJCWlmICghKGhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UociwgJmhlYWQpKSkKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBIRUFEIikpOworCQlpZiAoIShoZWFkX21lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoaGVhZF9jb21taXQsIE5VTEwsIGVuY29kaW5nKSkpCisJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgSEVBRCdzIGNvbW1pdCBtZXNzYWdlIikpOworCisJCWZpbmRfY29tbWl0X3N1YmplY3QoaGVhZF9tZXNzYWdlLCAmYm9keSk7CisJCWlmICh3cml0ZV9tZXNzYWdlKGJvZHksIHN0cmxlbihib2R5KSwKKwkJCQkgIHJlYmFzZV9wYXRoX2ZpeHVwX21zZygpLCAwKSkgeworCQkJdW51c2VfY29tbWl0X2J1ZmZlcihoZWFkX2NvbW1pdCwgaGVhZF9tZXNzYWdlKTsKKwkJCXJldHVybiBlcnJvcihfKCJjYW5ub3Qgd3JpdGUgJyVzJyIpLAorCQkJCSAgICAgcmViYXNlX3BhdGhfZml4dXBfbXNnKCkpOworCQl9CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVjICIsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgXygiVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mICVkIGNvbW1pdHMuIiksIDIpOworCQlzdHJidWZfYWRkZigmYnVmLCAiXG4lYyAiLCBjb21tZW50X2xpbmVfY2hhcik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgXygiVGhpcyBpcyB0aGUgMXN0IGNvbW1pdCBtZXNzYWdlOiIpKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5cbiIpOworCQlzdHJidWZfYWRkc3RyKCZidWYsIGJvZHkpOworCisJCXVudXNlX2NvbW1pdF9idWZmZXIoaGVhZF9jb21taXQsIGhlYWRfbWVzc2FnZSk7CisJfQorCisJaWYgKCEobWVzc2FnZSA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGVuY29kaW5nKSkpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZSBvZiAlcyIpLAorCQkJICAgICBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwlmaW5kX2NvbW1pdF9zdWJqZWN0KG1lc3NhZ2UsICZib2R5KTsKKworCWlmIChjb21tYW5kID09IFRPRE9fU1FVQVNIKSB7CisJCXVubGluayhyZWJhc2VfcGF0aF9maXh1cF9tc2coKSk7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJcbiVjICIsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgXygiVGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgIyVkOiIpLAorCQkJICAgICsrb3B0cy0+Y3VycmVudF9maXh1cF9jb3VudCArIDEpOworCQlzdHJidWZfYWRkc3RyKCZidWYsICJcblxuIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgYm9keSk7CisJfSBlbHNlIGlmIChjb21tYW5kID09IFRPRE9fRklYVVApIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIlxuJWMgIiwgY29tbWVudF9saW5lX2NoYXIpOworCQlzdHJidWZfYWRkZigmYnVmLCBfKCJUaGUgY29tbWl0IG1lc3NhZ2UgIyVkIHdpbGwgYmUgc2tpcHBlZDoiKSwKKwkJCSAgICArK29wdHMtPmN1cnJlbnRfZml4dXBfY291bnQgKyAxKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5cbiIpOworCQlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcygmYnVmLCBib2R5LCBzdHJsZW4oYm9keSkpOworCX0gZWxzZQorCQlyZXR1cm4gZXJyb3IoXygidW5rbm93biBjb21tYW5kOiAlZCIpLCBjb21tYW5kKTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgbWVzc2FnZSk7CisKKwlyZXMgPSB3cml0ZV9tZXNzYWdlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKSwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoIXJlcykgeworCQlzdHJidWZfYWRkZigmb3B0cy0+Y3VycmVudF9maXh1cHMsICIlcyVzICVzIiwKKwkJCSAgICBvcHRzLT5jdXJyZW50X2ZpeHVwcy5sZW4gPyAiXG4iIDogIiIsCisJCQkgICAgY29tbWFuZF90b19zdHJpbmcoY29tbWFuZCksCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCXJlcyA9IHdyaXRlX21lc3NhZ2Uob3B0cy0+Y3VycmVudF9maXh1cHMuYnVmLAorCQkJCSAgICBvcHRzLT5jdXJyZW50X2ZpeHVwcy5sZW4sCisJCQkJICAgIHJlYmFzZV9wYXRoX2N1cnJlbnRfZml4dXBzKCksIDApOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX3Jld3JpdHRlbl9wZW5kaW5nKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5ld29pZDsKKwlGSUxFICpvdXQ7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCByZWJhc2VfcGF0aF9yZXdyaXR0ZW5fcGVuZGluZygpLCAoR0lUX01BWF9IRVhTWiArIDEpICogMikgPiAwICYmCisJICAgICFnZXRfb2lkKCJIRUFEIiwgJm5ld29pZCkgJiYKKwkgICAgKG91dCA9IGZvcGVuX29yX3dhcm4ocmViYXNlX3BhdGhfcmV3cml0dGVuX2xpc3QoKSwgImEiKSkpIHsKKwkJY2hhciAqYm9sID0gYnVmLmJ1ZiwgKmVvbDsKKworCQl3aGlsZSAoKmJvbCkgeworCQkJZW9sID0gc3RyY2hybnVsKGJvbCwgJ1xuJyk7CisJCQlmcHJpbnRmKG91dCwgIiUuKnMgJXNcbiIsIChpbnQpKGVvbCAtIGJvbCksCisJCQkJCWJvbCwgb2lkX3RvX2hleCgmbmV3b2lkKSk7CisJCQlpZiAoISplb2wpCisJCQkJYnJlYWs7CisJCQlib2wgPSBlb2wgKyAxOworCQl9CisJCWZjbG9zZShvdXQpOworCQl1bmxpbmsocmViYXNlX3BhdGhfcmV3cml0dGVuX3BlbmRpbmcoKSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfaW5fcmV3cml0dGVuKHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJZW51bSB0b2RvX2NvbW1hbmQgbmV4dF9jb21tYW5kKQoreworCUZJTEUgKm91dCA9IGZvcGVuX29yX3dhcm4ocmViYXNlX3BhdGhfcmV3cml0dGVuX3BlbmRpbmcoKSwgImEiKTsKKworCWlmICghb3V0KQorCQlyZXR1cm47CisKKwlmcHJpbnRmKG91dCwgIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCWZjbG9zZShvdXQpOworCisJaWYgKCFpc19maXh1cChuZXh0X2NvbW1hbmQpKQorCQlmbHVzaF9yZXdyaXR0ZW5fcGVuZGluZygpOworfQorCitzdGF0aWMgaW50IGRvX3BpY2tfY29tbWl0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICBlbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kLAorCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwkJCSAgaW50IGZpbmFsX2ZpeHVwLCBpbnQgKmNoZWNrX3RvZG8pCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gb3B0cy0+ZWRpdCA/IEVESVRfTVNHIDogMDsKKwljb25zdCBjaGFyICptc2dfZmlsZSA9IG9wdHMtPmVkaXQgPyBOVUxMIDogZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpOworCXN0cnVjdCBvYmplY3RfaWQgaGVhZDsKKwlzdHJ1Y3QgY29tbWl0ICpiYXNlLCAqbmV4dCwgKnBhcmVudDsKKwljb25zdCBjaGFyICpiYXNlX2xhYmVsLCAqbmV4dF9sYWJlbDsKKwljaGFyICphdXRob3IgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbWVzc2FnZSBtc2cgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXMsIHVuYm9ybiA9IDAsIHJld29yZCA9IDAsIGFsbG93LCBkcm9wX2NvbW1pdDsKKworCWlmIChvcHRzLT5ub19jb21taXQpIHsKKwkJLyoKKwkJICogV2UgZG8gbm90IGludGVuZCB0byBjb21taXQgaW1tZWRpYXRlbHkuICBXZSBqdXN0IHdhbnQgdG8KKwkJICogbWVyZ2UgdGhlIGRpZmZlcmVuY2VzIGluLCBzbyBsZXQncyBjb21wdXRlIHRoZSB0cmVlCisJCSAqIHRoYXQgcmVwcmVzZW50cyB0aGUgImN1cnJlbnQiIHN0YXRlIGZvciBtZXJnZS1yZWN1cnNpdmUKKwkJICogdG8gd29yayBvbi4KKwkJICovCisJCWlmICh3cml0ZV9pbmRleF9hc190cmVlKCZoZWFkLCByLT5pbmRleCwgci0+aW5kZXhfZmlsZSwgMCwgTlVMTCkpCisJCQlyZXR1cm4gZXJyb3IoXygieW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIpKTsKKwl9IGVsc2UgeworCQl1bmJvcm4gPSBnZXRfb2lkKCJIRUFEIiwgJmhlYWQpOworCQkvKiBEbyB3ZSB3YW50IHRvIGdlbmVyYXRlIGEgcm9vdCBjb21taXQ/ICovCisJCWlmIChpc19waWNrX29yX3NpbWlsYXIoY29tbWFuZCkgJiYgb3B0cy0+aGF2ZV9zcXVhc2hfb250byAmJgorCQkgICAgb2lkZXEoJmhlYWQsICZvcHRzLT5zcXVhc2hfb250bykpIHsKKwkJCWlmIChpc19maXh1cChjb21tYW5kKSkKKwkJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGZpeHVwIHJvb3QgY29tbWl0IikpOworCQkJZmxhZ3MgfD0gQ1JFQVRFX1JPT1RfQ09NTUlUOworCQkJdW5ib3JuID0gMTsKKwkJfSBlbHNlIGlmICh1bmJvcm4pCisJCQlvaWRjcHkoJmhlYWQsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCQlpZiAoaW5kZXhfZGlmZmVyc19mcm9tKHIsIHVuYm9ybiA/IGVtcHR5X3RyZWVfb2lkX2hleCgpIDogIkhFQUQiLAorCQkJCSAgICAgICBOVUxMLCAwKSkKKwkJCXJldHVybiBlcnJvcl9kaXJ0eV9pbmRleChyLCBvcHRzKTsKKwl9CisJZGlzY2FyZF9pbmRleChyLT5pbmRleCk7CisKKwlpZiAoIWNvbW1pdC0+cGFyZW50cykKKwkJcGFyZW50ID0gTlVMTDsKKwllbHNlIGlmIChjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJLyogUmV2ZXJ0aW5nIG9yIGNoZXJyeS1waWNraW5nIGEgbWVyZ2UgY29tbWl0ICovCisJCWludCBjbnQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCQlpZiAoIW9wdHMtPm1haW5saW5lKQorCQkJcmV0dXJuIGVycm9yKF8oImNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIpLAorCQkJCW9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCisJCWZvciAoY250ID0gMSwgcCA9IGNvbW1pdC0+cGFyZW50czsKKwkJICAgICBjbnQgIT0gb3B0cy0+bWFpbmxpbmUgJiYgcDsKKwkJICAgICBjbnQrKykKKwkJCXAgPSBwLT5uZXh0OworCQlpZiAoY250ICE9IG9wdHMtPm1haW5saW5lIHx8ICFwKQorCQkJcmV0dXJuIGVycm9yKF8oImNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIpLAorCQkJCW9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCksIG9wdHMtPm1haW5saW5lKTsKKwkJcGFyZW50ID0gcC0+aXRlbTsKKwl9IGVsc2UgaWYgKDEgPCBvcHRzLT5tYWlubGluZSkKKwkJLyoKKwkJICogIE5vbi1maXJzdCBwYXJlbnQgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgbWFpbmxpbmUgZm9yCisJCSAqICBub24tbWVyZ2UgY29tbWl0CisJCSAqLworCQlyZXR1cm4gZXJyb3IoXygiY29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIiksCisJCQkgICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCksIG9wdHMtPm1haW5saW5lKTsKKwllbHNlCisJCXBhcmVudCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKworCWlmIChnZXRfbWVzc2FnZShjb21taXQsICZtc2cpICE9IDApCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIpLAorCQkJb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisKKwlpZiAob3B0cy0+YWxsb3dfZmYgJiYgIWlzX2ZpeHVwKGNvbW1hbmQpICYmCisJICAgICgocGFyZW50ICYmIG9pZGVxKCZwYXJlbnQtPm9iamVjdC5vaWQsICZoZWFkKSkgfHwKKwkgICAgICghcGFyZW50ICYmIHVuYm9ybikpKSB7CisJCWlmIChpc19yZWJhc2VfaShvcHRzKSkKKwkJCXdyaXRlX2F1dGhvcl9zY3JpcHQobXNnLm1lc3NhZ2UpOworCQlyZXMgPSBmYXN0X2ZvcndhcmRfdG8ociwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgJmhlYWQsIHVuYm9ybiwKKwkJCW9wdHMpOworCQlpZiAocmVzIHx8IGNvbW1hbmQgIT0gVE9ET19SRVdPUkQpCisJCQlnb3RvIGxlYXZlOworCQlyZXdvcmQgPSAxOworCQltc2dfZmlsZSA9IE5VTEw7CisJCWdvdG8gZmFzdF9mb3J3YXJkX2VkaXQ7CisJfQorCWlmIChwYXJlbnQgJiYgcGFyc2VfY29tbWl0KHBhcmVudCkgPCAwKQorCQkvKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgYSAidG9kbyIgY29tbWFuZCBsaWtlCisJCSAgICJyZXZlcnQiIG9yICJwaWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEuICovCisJCXJldHVybiBlcnJvcihfKCIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiKSwKKwkJCWNvbW1hbmRfdG9fc3RyaW5nKGNvbW1hbmQpLAorCQkJb2lkX3RvX2hleCgmcGFyZW50LT5vYmplY3Qub2lkKSk7CisKKwkvKgorCSAqICJjb21taXQiIGlzIGFuIGV4aXN0aW5nIGNvbW1pdC4gIFdlIHdvdWxkIHdhbnQgdG8gYXBwbHkKKwkgKiB0aGUgZGlmZmVyZW5jZSBpdCBpbnRyb2R1Y2VzIHNpbmNlIGl0cyBmaXJzdCBwYXJlbnQgInByZXYiCisJICogb24gdG9wIG9mIHRoZSBjdXJyZW50IEhFQUQgaWYgd2UgYXJlIGNoZXJyeS1waWNrLiAgT3IgdGhlCisJICogcmV2ZXJzZSBvZiBpdCBpZiB3ZSBhcmUgcmV2ZXJ0LgorCSAqLworCisJaWYgKGNvbW1hbmQgPT0gVE9ET19SRVZFUlQpIHsKKwkJYmFzZSA9IGNvbW1pdDsKKwkJYmFzZV9sYWJlbCA9IG1zZy5sYWJlbDsKKwkJbmV4dCA9IHBhcmVudDsKKwkJbmV4dF9sYWJlbCA9IG1zZy5wYXJlbnRfbGFiZWw7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgIlJldmVydCBcIiIpOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIG1zZy5zdWJqZWN0KTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiXCJcblxuVGhpcyByZXZlcnRzIGNvbW1pdCAiKTsKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKworCQlpZiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiLCByZXZlcnNpbmdcbmNoYW5nZXMgbWFkZSB0byAiKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1Ziwgb2lkX3RvX2hleCgmcGFyZW50LT5vYmplY3Qub2lkKSk7CisJCX0KKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiLlxuIik7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqcDsKKworCQliYXNlID0gcGFyZW50OworCQliYXNlX2xhYmVsID0gbXNnLnBhcmVudF9sYWJlbDsKKwkJbmV4dCA9IGNvbW1pdDsKKwkJbmV4dF9sYWJlbCA9IG1zZy5sYWJlbDsKKworCQkvKiBBcHBlbmQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB0byBtc2didWYuICovCisJCWlmIChmaW5kX2NvbW1pdF9zdWJqZWN0KG1zZy5tZXNzYWdlLCAmcCkpCisJCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHApOworCisJCWlmIChvcHRzLT5yZWNvcmRfb3JpZ2luKSB7CisJCQlzdHJidWZfY29tcGxldGVfbGluZSgmbXNnYnVmKTsKKwkJCWlmICghaGFzX2NvbmZvcm1pbmdfZm9vdGVyKCZtc2didWYsIE5VTEwsIDApKQorCQkJCXN0cmJ1Zl9hZGRjaCgmbXNnYnVmLCAnXG4nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgY2hlcnJ5X3BpY2tlZF9wcmVmaXgpOworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCBvaWRfdG9faGV4KCZjb21taXQtPm9iamVjdC5vaWQpKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgIilcbiIpOworCQl9CisJCWlmICghaXNfZml4dXAoY29tbWFuZCkpCisJCQlhdXRob3IgPSBnZXRfYXV0aG9yKG1zZy5tZXNzYWdlKTsKKwl9CisKKwlpZiAoY29tbWFuZCA9PSBUT0RPX1JFV09SRCkKKwkJcmV3b3JkID0gMTsKKwllbHNlIGlmIChpc19maXh1cChjb21tYW5kKSkgeworCQlpZiAodXBkYXRlX3NxdWFzaF9tZXNzYWdlcyhyLCBjb21tYW5kLCBjb21taXQsIG9wdHMpKQorCQkJcmV0dXJuIC0xOworCQlmbGFncyB8PSBBTUVORF9NU0c7CisJCWlmICghZmluYWxfZml4dXApCisJCQltc2dfZmlsZSA9IHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKTsKKwkJZWxzZSBpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfZml4dXBfbXNnKCkpKSB7CisJCQlmbGFncyB8PSBDTEVBTlVQX01TRzsKKwkJCW1zZ19maWxlID0gcmViYXNlX3BhdGhfZml4dXBfbXNnKCk7CisJCX0gZWxzZSB7CisJCQljb25zdCBjaGFyICpkZXN0ID0gZ2l0X3BhdGhfc3F1YXNoX21zZyhyKTsKKwkJCXVubGluayhkZXN0KTsKKwkJCWlmIChjb3B5X2ZpbGUoZGVzdCwgcmViYXNlX3BhdGhfc3F1YXNoX21zZygpLCAwNjY2KSkKKwkJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlbmFtZSAnJXMnIHRvICclcyciKSwKKwkJCQkJICAgICByZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCksIGRlc3QpOworCQkJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJCQltc2dfZmlsZSA9IGRlc3Q7CisJCQlmbGFncyB8PSBFRElUX01TRzsKKwkJfQorCX0KKworCWlmIChvcHRzLT5zaWdub2ZmICYmICFpc19maXh1cChjb21tYW5kKSkKKwkJYXBwZW5kX3NpZ25vZmYoJm1zZ2J1ZiwgMCwgMCk7CisKKwlpZiAoaXNfcmViYXNlX2kob3B0cykgJiYgd3JpdGVfYXV0aG9yX3NjcmlwdChtc2cubWVzc2FnZSkgPCAwKQorCQlyZXMgPSAtMTsKKwllbHNlIGlmICghb3B0cy0+c3RyYXRlZ3kgfHwgIXN0cmNtcChvcHRzLT5zdHJhdGVneSwgInJlY3Vyc2l2ZSIpIHx8IGNvbW1hbmQgPT0gVE9ET19SRVZFUlQpIHsKKwkJcmVzID0gZG9fcmVjdXJzaXZlX21lcmdlKHIsIGJhc2UsIG5leHQsIGJhc2VfbGFiZWwsIG5leHRfbGFiZWwsCisJCQkJCSAmaGVhZCwgJm1zZ2J1Ziwgb3B0cyk7CisJCWlmIChyZXMgPCAwKQorCQkJZ290byBsZWF2ZTsKKworCQlyZXMgfD0gd3JpdGVfbWVzc2FnZShtc2didWYuYnVmLCBtc2didWYubGVuLAorCQkJCSAgICAgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiA9IE5VTEw7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlcyA9IE5VTEw7CisKKwkJcmVzID0gd3JpdGVfbWVzc2FnZShtc2didWYuYnVmLCBtc2didWYubGVuLAorCQkJCSAgICBnaXRfcGF0aF9tZXJnZV9tc2cociksIDApOworCisJCWNvbW1pdF9saXN0X2luc2VydChiYXNlLCAmY29tbW9uKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KG5leHQsICZyZW1vdGVzKTsKKwkJcmVzIHw9IHRyeV9tZXJnZV9jb21tYW5kKHIsIG9wdHMtPnN0cmF0ZWd5LAorCQkJCQkgb3B0cy0+eG9wdHNfbnIsIChjb25zdCBjaGFyICoqKW9wdHMtPnhvcHRzLAorCQkJCQljb21tb24sIG9pZF90b19oZXgoJmhlYWQpLCByZW1vdGVzKTsKKwkJZnJlZV9jb21taXRfbGlzdChjb21tb24pOworCQlmcmVlX2NvbW1pdF9saXN0KHJlbW90ZXMpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKKworCS8qCisJICogSWYgdGhlIG1lcmdlIHdhcyBjbGVhbiBvciBpZiBpdCBmYWlsZWQgZHVlIHRvIGNvbmZsaWN0LCB3ZSB3cml0ZQorCSAqIENIRVJSWV9QSUNLX0hFQUQgZm9yIHRoZSBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgY29tbWl0IHRvIHVzZS4KKwkgKiBIb3dldmVyLCBpZiB0aGUgbWVyZ2UgZGlkIG5vdCBldmVuIHN0YXJ0LCB0aGVuIHdlIGRvbid0IHdhbnQgdG8KKwkgKiB3cml0ZSBpdCBhdCBhbGwuCisJICovCisJaWYgKGNvbW1hbmQgPT0gVE9ET19QSUNLICYmICFvcHRzLT5ub19jb21taXQgJiYgKHJlcyA9PSAwIHx8IHJlcyA9PSAxKSAmJgorCSAgICB1cGRhdGVfcmVmKE5VTEwsICJDSEVSUllfUElDS19IRUFEIiwgJmNvbW1pdC0+b2JqZWN0Lm9pZCwgTlVMTCwKKwkJICAgICAgIFJFRl9OT19ERVJFRiwgVVBEQVRFX1JFRlNfTVNHX09OX0VSUikpCisJCXJlcyA9IC0xOworCWlmIChjb21tYW5kID09IFRPRE9fUkVWRVJUICYmICgob3B0cy0+bm9fY29tbWl0ICYmIHJlcyA9PSAwKSB8fCByZXMgPT0gMSkgJiYKKwkgICAgdXBkYXRlX3JlZihOVUxMLCAiUkVWRVJUX0hFQUQiLCAmY29tbWl0LT5vYmplY3Qub2lkLCBOVUxMLAorCQkgICAgICAgUkVGX05PX0RFUkVGLCBVUERBVEVfUkVGU19NU0dfT05fRVJSKSkKKwkJcmVzID0gLTE7CisKKwlpZiAocmVzKSB7CisJCWVycm9yKGNvbW1hbmQgPT0gVE9ET19SRVZFUlQKKwkJICAgICAgPyBfKCJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIikKKwkJICAgICAgOiBfKCJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiKSwKKwkJICAgICAgc2hvcnRfY29tbWl0X25hbWUoY29tbWl0KSwgbXNnLnN1YmplY3QpOworCQlwcmludF9hZHZpY2UociwgcmVzID09IDEsIG9wdHMpOworCQlyZXBvX3JlcmVyZShyLCBvcHRzLT5hbGxvd19yZXJlcmVfYXV0byk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJZHJvcF9jb21taXQgPSAwOworCWFsbG93ID0gYWxsb3dfZW1wdHkociwgb3B0cywgY29tbWl0KTsKKwlpZiAoYWxsb3cgPCAwKSB7CisJCXJlcyA9IGFsbG93OworCQlnb3RvIGxlYXZlOworCX0gZWxzZSBpZiAoYWxsb3cgPT0gMSkgeworCQlmbGFncyB8PSBBTExPV19FTVBUWTsKKwl9IGVsc2UgaWYgKGFsbG93ID09IDIpIHsKKwkJZHJvcF9jb21taXQgPSAxOworCQl1bmxpbmsoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSk7CisJCXVubGluayhnaXRfcGF0aF9tZXJnZV9tc2cocikpOworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oImRyb3BwaW5nICVzICVzIC0tIHBhdGNoIGNvbnRlbnRzIGFscmVhZHkgdXBzdHJlYW1cbiIpLAorCQkJb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSwgbXNnLnN1YmplY3QpOworCX0gLyogZWxzZSBhbGxvdyA9PSAwIGFuZCB0aGVyZSdzIG5vdGhpbmcgc3BlY2lhbCB0byBkbyAqLworCWlmICghb3B0cy0+bm9fY29tbWl0ICYmICFkcm9wX2NvbW1pdCkgeworCQlpZiAoYXV0aG9yIHx8IGNvbW1hbmQgPT0gVE9ET19SRVZFUlQgfHwgKGZsYWdzICYgQU1FTkRfTVNHKSkKKwkJCXJlcyA9IGRvX2NvbW1pdChyLCBtc2dfZmlsZSwgYXV0aG9yLCBvcHRzLCBmbGFncyk7CisJCWVsc2UKKwkJCXJlcyA9IGVycm9yKF8oInVuYWJsZSB0byBwYXJzZSBjb21taXQgYXV0aG9yIikpOworCQkqY2hlY2tfdG9kbyA9ICEhKGZsYWdzICYgRURJVF9NU0cpOworCQlpZiAoIXJlcyAmJiByZXdvcmQpIHsKK2Zhc3RfZm9yd2FyZF9lZGl0OgorCQkJcmVzID0gcnVuX2dpdF9jb21taXQociwgTlVMTCwgb3B0cywgRURJVF9NU0cgfAorCQkJCQkgICAgIFZFUklGWV9NU0cgfCBBTUVORF9NU0cgfAorCQkJCQkgICAgIChmbGFncyAmIEFMTE9XX0VNUFRZKSk7CisJCQkqY2hlY2tfdG9kbyA9IDE7CisJCX0KKwl9CisKKworCWlmICghcmVzICYmIGZpbmFsX2ZpeHVwKSB7CisJCXVubGluayhyZWJhc2VfcGF0aF9maXh1cF9tc2coKSk7CisJCXVubGluayhyZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCkpOworCQl1bmxpbmsocmViYXNlX3BhdGhfY3VycmVudF9maXh1cHMoKSk7CisJCXN0cmJ1Zl9yZXNldCgmb3B0cy0+Y3VycmVudF9maXh1cHMpOworCQlvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ID0gMDsKKwl9CisKK2xlYXZlOgorCWZyZWVfbWVzc2FnZShjb21taXQsICZtc2cpOworCWZyZWUoYXV0aG9yKTsKKwl1cGRhdGVfYWJvcnRfc2FmZXR5X2ZpbGUoKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9yZXZzKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwkvKgorCSAqIHBpY2tpbmcgKGJ1dCBub3QgcmV2ZXJ0aW5nKSByYW5nZXMgKGJ1dCBub3QgaW5kaXZpZHVhbCByZXZpc2lvbnMpCisJICogc2hvdWxkIGJlIGRvbmUgaW4gcmV2ZXJzZQorCSAqLworCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1BJQ0sgJiYgIW9wdHMtPnJldnMtPm5vX3dhbGspCisJCW9wdHMtPnJldnMtPnJldmVyc2UgXj0gMTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsob3B0cy0+cmV2cykpCisJCXJldHVybiBlcnJvcihfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfYW5kX3JlZnJlc2hfY2FjaGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrID0gTE9DS19JTklUOworCWludCBpbmRleF9mZCA9IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmluZGV4X2xvY2ssIDApOworCWlmIChyZXBvX3JlYWRfaW5kZXgocikgPCAwKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7CisJCXJldHVybiBlcnJvcihfKCJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIpLAorCQkJXyhhY3Rpb25fbmFtZShvcHRzKSkpOworCX0KKwlyZWZyZXNoX2luZGV4KHItPmluZGV4LCBSRUZSRVNIX1FVSUVUfFJFRlJFU0hfVU5NRVJHRUQsIE5VTEwsIE5VTEwsIE5VTEwpOworCWlmIChpbmRleF9mZCA+PSAwKSB7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoci0+aW5kZXgsICZpbmRleF9sb2NrLAorCQkJCSAgICAgICBDT01NSVRfTE9DSyB8IFNLSVBfSUZfVU5DSEFOR0VEKSkgeworCQkJcmV0dXJuIGVycm9yKF8oImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IiksCisJCQkJXyhhY3Rpb25fbmFtZShvcHRzKSkpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitlbnVtIHRvZG9faXRlbV9mbGFncyB7CisJVE9ET19FRElUX01FUkdFX01TRyA9IDEKK307CisKK3ZvaWQgdG9kb19saXN0X3JlbGVhc2Uoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCXN0cmJ1Zl9yZWxlYXNlKCZ0b2RvX2xpc3QtPmJ1Zik7CisJRlJFRV9BTkRfTlVMTCh0b2RvX2xpc3QtPml0ZW1zKTsKKwl0b2RvX2xpc3QtPm5yID0gdG9kb19saXN0LT5hbGxvYyA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdG9kb19pdGVtICphcHBlbmRfbmV3X3RvZG8oc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCUFMTE9DX0dST1codG9kb19saXN0LT5pdGVtcywgdG9kb19saXN0LT5uciArIDEsIHRvZG9fbGlzdC0+YWxsb2MpOworCXRvZG9fbGlzdC0+dG90YWxfbnIrKzsKKwlyZXR1cm4gdG9kb19saXN0LT5pdGVtcyArIHRvZG9fbGlzdC0+bnIrKzsKK30KKworY29uc3QgY2hhciAqdG9kb19pdGVtX2dldF9hcmcoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LAorCQkJICAgICAgc3RydWN0IHRvZG9faXRlbSAqaXRlbSkKK3sKKwlyZXR1cm4gdG9kb19saXN0LT5idWYuYnVmICsgaXRlbS0+YXJnX29mZnNldDsKK30KKworc3RhdGljIGludCBpc19jb21tYW5kKGVudW0gdG9kb19jb21tYW5kIGNvbW1hbmQsIGNvbnN0IGNoYXIgKipib2wpCit7CisJY29uc3QgY2hhciAqc3RyID0gdG9kb19jb21tYW5kX2luZm9bY29tbWFuZF0uc3RyOworCWNvbnN0IGNoYXIgbmljayA9IHRvZG9fY29tbWFuZF9pbmZvW2NvbW1hbmRdLmM7CisJY29uc3QgY2hhciAqcCA9ICpib2wgKyAxOworCisJcmV0dXJuIHNraXBfcHJlZml4KCpib2wsIHN0ciwgYm9sKSB8fAorCQkoKG5pY2sgJiYgKipib2wgPT0gbmljaykgJiYKKwkJICgqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JyB8fCAqcCA9PSAnXG4nIHx8ICpwID09ICdccicgfHwgISpwKSAmJgorCQkgKCpib2wgPSBwKSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaW5zbl9saW5lKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdG9kb19pdGVtICppdGVtLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpib2wsIGNoYXIgKmVvbCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGNvbW1pdF9vaWQ7CisJY2hhciAqZW5kX29mX29iamVjdF9uYW1lOworCWludCBpLCBzYXZlZCwgc3RhdHVzLCBwYWRkaW5nOworCisJaXRlbS0+ZmxhZ3MgPSAwOworCisJLyogbGVmdC10cmltICovCisJYm9sICs9IHN0cnNwbihib2wsICIgXHQiKTsKKworCWlmIChib2wgPT0gZW9sIHx8ICpib2wgPT0gJ1xyJyB8fCAqYm9sID09IGNvbW1lbnRfbGluZV9jaGFyKSB7CisJCWl0ZW0tPmNvbW1hbmQgPSBUT0RPX0NPTU1FTlQ7CisJCWl0ZW0tPmNvbW1pdCA9IE5VTEw7CisJCWl0ZW0tPmFyZ19vZmZzZXQgPSBib2wgLSBidWY7CisJCWl0ZW0tPmFyZ19sZW4gPSBlb2wgLSBib2w7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBUT0RPX0NPTU1FTlQ7IGkrKykKKwkJaWYgKGlzX2NvbW1hbmQoaSwgJmJvbCkpIHsKKwkJCWl0ZW0tPmNvbW1hbmQgPSBpOworCQkJYnJlYWs7CisJCX0KKwlpZiAoaSA+PSBUT0RPX0NPTU1FTlQpCisJCXJldHVybiAtMTsKKworCS8qIEVhdCB1cCBleHRyYSBzcGFjZXMvIHRhYnMgYmVmb3JlIG9iamVjdCBuYW1lICovCisJcGFkZGluZyA9IHN0cnNwbihib2wsICIgXHQiKTsKKwlib2wgKz0gcGFkZGluZzsKKworCWlmIChpdGVtLT5jb21tYW5kID09IFRPRE9fTk9PUCB8fCBpdGVtLT5jb21tYW5kID09IFRPRE9fQlJFQUspIHsKKwkJaWYgKGJvbCAhPSBlb2wpCisJCQlyZXR1cm4gZXJyb3IoXygiJXMgZG9lcyBub3QgYWNjZXB0IGFyZ3VtZW50czogJyVzJyIpLAorCQkJCSAgICAgY29tbWFuZF90b19zdHJpbmcoaXRlbS0+Y29tbWFuZCksIGJvbCk7CisJCWl0ZW0tPmNvbW1pdCA9IE5VTEw7CisJCWl0ZW0tPmFyZ19vZmZzZXQgPSBib2wgLSBidWY7CisJCWl0ZW0tPmFyZ19sZW4gPSBlb2wgLSBib2w7CisJCXJldHVybiAwOworCX0KKworCWlmICghcGFkZGluZykKKwkJcmV0dXJuIGVycm9yKF8oIm1pc3NpbmcgYXJndW1lbnRzIGZvciAlcyIpLAorCQkJICAgICBjb21tYW5kX3RvX3N0cmluZyhpdGVtLT5jb21tYW5kKSk7CisKKwlpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX0VYRUMgfHwgaXRlbS0+Y29tbWFuZCA9PSBUT0RPX0xBQkVMIHx8CisJICAgIGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19SRVNFVCkgeworCQlpdGVtLT5jb21taXQgPSBOVUxMOworCQlpdGVtLT5hcmdfb2Zmc2V0ID0gYm9sIC0gYnVmOworCQlpdGVtLT5hcmdfbGVuID0gKGludCkoZW9sIC0gYm9sKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19NRVJHRSkgeworCQlpZiAoc2tpcF9wcmVmaXgoYm9sLCAiLUMiLCAmYm9sKSkKKwkJCWJvbCArPSBzdHJzcG4oYm9sLCAiIFx0Iik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGJvbCwgIi1jIiwgJmJvbCkpIHsKKwkJCWJvbCArPSBzdHJzcG4oYm9sLCAiIFx0Iik7CisJCQlpdGVtLT5mbGFncyB8PSBUT0RPX0VESVRfTUVSR0VfTVNHOworCQl9IGVsc2UgeworCQkJaXRlbS0+ZmxhZ3MgfD0gVE9ET19FRElUX01FUkdFX01TRzsKKwkJCWl0ZW0tPmNvbW1pdCA9IE5VTEw7CisJCQlpdGVtLT5hcmdfb2Zmc2V0ID0gYm9sIC0gYnVmOworCQkJaXRlbS0+YXJnX2xlbiA9IChpbnQpKGVvbCAtIGJvbCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWVuZF9vZl9vYmplY3RfbmFtZSA9IChjaGFyICopIGJvbCArIHN0cmNzcG4oYm9sLCAiIFx0XG4iKTsKKwlzYXZlZCA9ICplbmRfb2Zfb2JqZWN0X25hbWU7CisJKmVuZF9vZl9vYmplY3RfbmFtZSA9ICdcMCc7CisJc3RhdHVzID0gZ2V0X29pZChib2wsICZjb21taXRfb2lkKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZXJyb3IoXygiY291bGQgbm90IHBhcnNlICclcyciKSwgYm9sKTsgLyogcmV0dXJuIGxhdGVyICovCisJKmVuZF9vZl9vYmplY3RfbmFtZSA9IHNhdmVkOworCisJYm9sID0gZW5kX29mX29iamVjdF9uYW1lICsgc3Ryc3BuKGVuZF9vZl9vYmplY3RfbmFtZSwgIiBcdCIpOworCWl0ZW0tPmFyZ19vZmZzZXQgPSBib2wgLSBidWY7CisJaXRlbS0+YXJnX2xlbiA9IChpbnQpKGVvbCAtIGJvbCk7CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWl0ZW0tPmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHIsICZjb21taXRfb2lkKTsKKwlyZXR1cm4gaXRlbS0+Y29tbWl0ID8gMCA6IC0xOworfQorCitpbnQgc2VxdWVuY2VyX2dldF9sYXN0X2NvbW1hbmQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGVudW0gcmVwbGF5X2FjdGlvbiAqYWN0aW9uKQoreworCWNvbnN0IGNoYXIgKnRvZG9fZmlsZSwgKmJvbDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJdG9kb19maWxlID0gZ2l0X3BhdGhfdG9kb19maWxlKCk7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgdG9kb19maWxlLCAwKSA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTk9URElSKQorCQkJcmV0dXJuIC0xOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oInVuYWJsZSB0byBvcGVuICclcyciLCB0b2RvX2ZpbGUpOworCX0KKwlib2wgPSBidWYuYnVmICsgc3Ryc3BuKGJ1Zi5idWYsICIgXHRcclxuIik7CisJaWYgKGlzX2NvbW1hbmQoVE9ET19QSUNLLCAmYm9sKSAmJiAoKmJvbCA9PSAnICcgfHwgKmJvbCA9PSAnXHQnKSkKKwkJKmFjdGlvbiA9IFJFUExBWV9QSUNLOworCWVsc2UgaWYgKGlzX2NvbW1hbmQoVE9ET19SRVZFUlQsICZib2wpICYmCisJCSAoKmJvbCA9PSAnICcgfHwgKmJvbCA9PSAnXHQnKSkKKwkJKmFjdGlvbiA9IFJFUExBWV9SRVZFUlQ7CisJZWxzZQorCQlyZXQgPSAtMTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY2hhciAqYnVmLAorCQkJCXN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCkKK3sKKwlzdHJ1Y3QgdG9kb19pdGVtICppdGVtOworCWNoYXIgKnAgPSBidWYsICpuZXh0X3A7CisJaW50IGksIHJlcyA9IDAsIGZpeHVwX29rYXkgPSBmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9kb25lKCkpOworCisJdG9kb19saXN0LT5jdXJyZW50ID0gdG9kb19saXN0LT5uciA9IDA7CisKKwlmb3IgKGkgPSAxOyAqcDsgaSsrLCBwID0gbmV4dF9wKSB7CisJCWNoYXIgKmVvbCA9IHN0cmNocm51bChwLCAnXG4nKTsKKworCQluZXh0X3AgPSAqZW9sID8gZW9sICsgMSAvKiBza2lwIExGICovIDogZW9sOworCisJCWlmIChwICE9IGVvbCAmJiBlb2xbLTFdID09ICdccicpCisJCQllb2wtLTsgLyogc3RyaXAgQ2FycmlhZ2UgUmV0dXJuICovCisKKwkJaXRlbSA9IGFwcGVuZF9uZXdfdG9kbyh0b2RvX2xpc3QpOworCQlpdGVtLT5vZmZzZXRfaW5fYnVmID0gcCAtIHRvZG9fbGlzdC0+YnVmLmJ1ZjsKKwkJaWYgKHBhcnNlX2luc25fbGluZShyLCBpdGVtLCBidWYsIHAsIGVvbCkpIHsKKwkJCXJlcyA9IGVycm9yKF8oImludmFsaWQgbGluZSAlZDogJS4qcyIpLAorCQkJCWksIChpbnQpKGVvbCAtIHApLCBwKTsKKwkJCWl0ZW0tPmNvbW1hbmQgPSBUT0RPX0NPTU1FTlQgKyAxOworCQkJaXRlbS0+YXJnX29mZnNldCA9IHAgLSBidWY7CisJCQlpdGVtLT5hcmdfbGVuID0gKGludCkoZW9sIC0gcCk7CisJCQlpdGVtLT5jb21taXQgPSBOVUxMOworCQl9CisKKwkJaWYgKGZpeHVwX29rYXkpCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJZWxzZSBpZiAoaXNfZml4dXAoaXRlbS0+Y29tbWFuZCkpCisJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90ICclcycgd2l0aG91dCBhIHByZXZpb3VzIGNvbW1pdCIpLAorCQkJCWNvbW1hbmRfdG9fc3RyaW5nKGl0ZW0tPmNvbW1hbmQpKTsKKwkJZWxzZSBpZiAoIWlzX25vb3AoaXRlbS0+Y29tbWFuZCkpCisJCQlmaXh1cF9va2F5ID0gMTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGNvdW50X2NvbW1hbmRzKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCkKK3sKKwlpbnQgY291bnQgPSAwLCBpOworCisJZm9yIChpID0gMDsgaSA8IHRvZG9fbGlzdC0+bnI7IGkrKykKKwkJaWYgKHRvZG9fbGlzdC0+aXRlbXNbaV0uY29tbWFuZCAhPSBUT0RPX0NPTU1FTlQpCisJCQljb3VudCsrOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGdldF9pdGVtX2xpbmVfb2Zmc2V0KHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwgaW50IGluZGV4KQoreworCXJldHVybiBpbmRleCA8IHRvZG9fbGlzdC0+bnIgPworCQl0b2RvX2xpc3QtPml0ZW1zW2luZGV4XS5vZmZzZXRfaW5fYnVmIDogdG9kb19saXN0LT5idWYubGVuOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2l0ZW1fbGluZShzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsIGludCBpbmRleCkKK3sKKwlyZXR1cm4gdG9kb19saXN0LT5idWYuYnVmICsgZ2V0X2l0ZW1fbGluZV9vZmZzZXQodG9kb19saXN0LCBpbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2l0ZW1fbGluZV9sZW5ndGgoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LCBpbnQgaW5kZXgpCit7CisJcmV0dXJuIGdldF9pdGVtX2xpbmVfb2Zmc2V0KHRvZG9fbGlzdCwgaW5kZXggKyAxKQorCQktICBnZXRfaXRlbV9saW5lX29mZnNldCh0b2RvX2xpc3QsIGluZGV4KTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RyYnVmX3JlYWRfZmlsZV9vcl93aGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgZmQ7CisJc3NpemVfdCBsZW47CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIiksIHBhdGgpOworCWxlbiA9IHN0cmJ1Zl9yZWFkKHNiLCBmZCwgMCk7CisJY2xvc2UoZmQpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgJyVzJy4iKSwgcGF0aCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBoYXZlX2ZpbmlzaGVkX3RoZV9sYXN0X3BpY2sodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmVvbDsKKwljb25zdCBjaGFyICp0b2RvX3BhdGggPSBnaXRfcGF0aF90b2RvX2ZpbGUoKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZidWYsIHRvZG9fcGF0aCwgMCkgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJZXJyb3JfZXJybm8oInVuYWJsZSB0byBvcGVuICclcyciLCB0b2RvX3BhdGgpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJLyogSWYgdGhlcmUgaXMgb25seSBvbmUgbGluZSB0aGVuIHdlIGFyZSBkb25lICovCisJZW9sID0gc3RyY2hyKGJ1Zi5idWYsICdcbicpOworCWlmICghZW9sIHx8ICFlb2xbMV0pCisJCXJldCA9IDE7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKQoreworCXN0cnVjdCByZXBsYXlfb3B0cyBvcHRzID0gUkVQTEFZX09QVFNfSU5JVDsKKwlpbnQgbmVlZF9jbGVhbnVwID0gMDsKKworCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHIpKSkgeworCQlpZiAoIXVubGluayhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHIpKSAmJiB2ZXJib3NlKQorCQkJd2FybmluZyhfKCJjYW5jZWxsaW5nIGEgY2hlcnJ5IHBpY2tpbmcgaW4gcHJvZ3Jlc3MiKSk7CisJCW9wdHMuYWN0aW9uID0gUkVQTEFZX1BJQ0s7CisJCW5lZWRfY2xlYW51cCA9IDE7CisJfQorCisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSkgeworCQlpZiAoIXVubGluayhnaXRfcGF0aF9yZXZlcnRfaGVhZChyKSkgJiYgdmVyYm9zZSkKKwkJCXdhcm5pbmcoXygiY2FuY2VsbGluZyBhIHJldmVydCBpbiBwcm9ncmVzcyIpKTsKKwkJb3B0cy5hY3Rpb24gPSBSRVBMQVlfUkVWRVJUOworCQluZWVkX2NsZWFudXAgPSAxOworCX0KKworCWlmICghbmVlZF9jbGVhbnVwKQorCQlyZXR1cm47CisKKwlpZiAoIWhhdmVfZmluaXNoZWRfdGhlX2xhc3RfcGljaygpKQorCQlyZXR1cm47CisKKwlzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKCZvcHRzKTsKK30KKworc3RhdGljIHZvaWQgdG9kb19saXN0X3dyaXRlX3RvdGFsX25yKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCkKK3sKKwlGSUxFICpmID0gZm9wZW5fb3Jfd2FybihyZWJhc2VfcGF0aF9tc2d0b3RhbCgpLCAidyIpOworCisJaWYgKGYpIHsKKwkJZnByaW50ZihmLCAiJWRcbiIsIHRvZG9fbGlzdC0+dG90YWxfbnIpOworCQlmY2xvc2UoZik7CisJfQorfQorCitzdGF0aWMgaW50IHJlYWRfcG9wdWxhdGVfdG9kbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKKwkJCSAgICAgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBjaGFyICp0b2RvX2ZpbGUgPSBnZXRfdG9kb19wYXRoKG9wdHMpOworCWludCByZXM7CisKKwlzdHJidWZfcmVzZXQoJnRvZG9fbGlzdC0+YnVmKTsKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZV9vcl93aGluZSgmdG9kb19saXN0LT5idWYsIHRvZG9fZmlsZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXMgPSBzdGF0KHRvZG9fZmlsZSwgJnN0KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHN0YXQgJyVzJyIpLCB0b2RvX2ZpbGUpOworCWZpbGxfc3RhdF9kYXRhKCZ0b2RvX2xpc3QtPnN0YXQsICZzdCk7CisKKwlyZXMgPSB0b2RvX2xpc3RfcGFyc2VfaW5zbl9idWZmZXIociwgdG9kb19saXN0LT5idWYuYnVmLCB0b2RvX2xpc3QpOworCWlmIChyZXMpIHsKKwkJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKQorCQkJcmV0dXJuIGVycm9yKF8oInBsZWFzZSBmaXggdGhpcyB1c2luZyAiCisJCQkJICAgICAgICInZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIikpOworCQlyZXR1cm4gZXJyb3IoXygidW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICclcyciKSwgdG9kb19maWxlKTsKKwl9CisKKwlpZiAoIXRvZG9fbGlzdC0+bnIgJiYKKwkgICAgKCFpc19yZWJhc2VfaShvcHRzKSB8fCAhZmlsZV9leGlzdHMocmViYXNlX3BhdGhfZG9uZSgpKSkpCisJCXJldHVybiBlcnJvcihfKCJubyBjb21taXRzIHBhcnNlZC4iKSk7CisKKwlpZiAoIWlzX3JlYmFzZV9pKG9wdHMpKSB7CisJCWVudW0gdG9kb19jb21tYW5kIHZhbGlkID0KKwkJCW9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUElDSyA/IFRPRE9fUElDSyA6IFRPRE9fUkVWRVJUOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdG9kb19saXN0LT5ucjsgaSsrKQorCQkJaWYgKHZhbGlkID09IHRvZG9fbGlzdC0+aXRlbXNbaV0uY29tbWFuZCkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UgaWYgKHZhbGlkID09IFRPRE9fUElDSykKKwkJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGNoZXJyeS1waWNrIGR1cmluZyBhIHJldmVydC4iKSk7CisJCQllbHNlCisJCQkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCByZXZlcnQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIikpOworCX0KKworCWlmIChpc19yZWJhc2VfaShvcHRzKSkgeworCQlzdHJ1Y3QgdG9kb19saXN0IGRvbmUgPSBUT0RPX0xJU1RfSU5JVDsKKworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmZG9uZS5idWYsIHJlYmFzZV9wYXRoX2RvbmUoKSwgMCkgPiAwICYmCisJCSAgICAhdG9kb19saXN0X3BhcnNlX2luc25fYnVmZmVyKHIsIGRvbmUuYnVmLmJ1ZiwgJmRvbmUpKQorCQkJdG9kb19saXN0LT5kb25lX25yID0gY291bnRfY29tbWFuZHMoJmRvbmUpOworCQllbHNlCisJCQl0b2RvX2xpc3QtPmRvbmVfbnIgPSAwOworCisJCXRvZG9fbGlzdC0+dG90YWxfbnIgPSB0b2RvX2xpc3QtPmRvbmVfbnIKKwkJCSsgY291bnRfY29tbWFuZHModG9kb19saXN0KTsKKwkJdG9kb19saXN0X3JlbGVhc2UoJmRvbmUpOworCisJCXRvZG9fbGlzdF93cml0ZV90b3RhbF9ucih0b2RvX2xpc3QpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9jb25maWdfc3RyaW5nX2R1cChjaGFyICoqZGVzdCwKKwkJCQkgY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwlmcmVlKCpkZXN0KTsKKwkqZGVzdCA9IHhzdHJkdXAodmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvcHVsYXRlX29wdHNfY2IoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMgPSBkYXRhOworCWludCBlcnJvcl9mbGFnID0gMTsKKworCWlmICghdmFsdWUpCisJCWVycm9yX2ZsYWcgPSAwOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5uby1jb21taXQiKSkKKwkJb3B0cy0+bm9fY29tbWl0ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmVkaXQiKSkKKwkJb3B0cy0+ZWRpdCA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5hbGxvdy1lbXB0eSIpKQorCQlvcHRzLT5hbGxvd19lbXB0eSA9CisJCQlnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZlcnJvcl9mbGFnKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMuYWxsb3ctZW1wdHktbWVzc2FnZSIpKQorCQlvcHRzLT5hbGxvd19lbXB0eV9tZXNzYWdlID0KKwkJCWdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5rZWVwLXJlZHVuZGFudC1jb21taXRzIikpCisJCW9wdHMtPmtlZXBfcmVkdW5kYW50X2NvbW1pdHMgPQorCQkJZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLnNpZ25vZmYiKSkKKwkJb3B0cy0+c2lnbm9mZiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5yZWNvcmQtb3JpZ2luIikpCisJCW9wdHMtPnJlY29yZF9vcmlnaW4gPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZlcnJvcl9mbGFnKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMuYWxsb3ctZmYiKSkKKwkJb3B0cy0+YWxsb3dfZmYgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZlcnJvcl9mbGFnKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMubWFpbmxpbmUiKSkKKwkJb3B0cy0+bWFpbmxpbmUgPSBnaXRfY29uZmlnX2ludChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMuc3RyYXRlZ3kiKSkKKwkJZ2l0X2NvbmZpZ19zdHJpbmdfZHVwKCZvcHRzLT5zdHJhdGVneSwga2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmdwZy1zaWduIikpCisJCWdpdF9jb25maWdfc3RyaW5nX2R1cCgmb3B0cy0+Z3BnX3NpZ24sIGtleSwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5zdHJhdGVneS1vcHRpb24iKSkgeworCQlBTExPQ19HUk9XKG9wdHMtPnhvcHRzLCBvcHRzLT54b3B0c19uciArIDEsIG9wdHMtPnhvcHRzX2FsbG9jKTsKKwkJb3B0cy0+eG9wdHNbb3B0cy0+eG9wdHNfbnIrK10gPSB4c3RyZHVwKHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5hbGxvdy1yZXJlcmUtYXV0byIpKQorCQlvcHRzLT5hbGxvd19yZXJlcmVfYXV0byA9CisJCQlnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZlcnJvcl9mbGFnKSA/CisJCQkJUkVSRVJFX0FVVE9VUERBVEUgOiBSRVJFUkVfTk9BVVRPVVBEQVRFOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5kZWZhdWx0LW1zZy1jbGVhbnVwIikpIHsKKwkJb3B0cy0+ZXhwbGljaXRfY2xlYW51cCA9IDE7CisJCW9wdHMtPmRlZmF1bHRfbXNnX2NsZWFudXAgPSBnZXRfY2xlYW51cF9tb2RlKHZhbHVlLCAxKTsKKwl9IGVsc2UKKwkJcmV0dXJuIGVycm9yKF8oImludmFsaWQga2V5OiAlcyIpLCBrZXkpOworCisJaWYgKCFlcnJvcl9mbGFnKQorCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIiksIGtleSwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGFyc2Vfc3RyYXRlZ3lfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNoYXIgKnJhd19vcHRzKQoreworCWludCBpOworCWNoYXIgKnN0cmF0ZWd5X29wdHNfc3RyaW5nID0gcmF3X29wdHM7CisKKwlpZiAoKnN0cmF0ZWd5X29wdHNfc3RyaW5nID09ICcgJykKKwkJc3RyYXRlZ3lfb3B0c19zdHJpbmcrKzsKKworCW9wdHMtPnhvcHRzX25yID0gc3BsaXRfY21kbGluZShzdHJhdGVneV9vcHRzX3N0cmluZywKKwkJCQkgICAgICAgKGNvbnN0IGNoYXIgKioqKSZvcHRzLT54b3B0cyk7CisJZm9yIChpID0gMDsgaSA8IG9wdHMtPnhvcHRzX25yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gb3B0cy0+eG9wdHNbaV07CisKKwkJc2tpcF9wcmVmaXgoYXJnLCAiLS0iLCAmYXJnKTsKKwkJb3B0cy0+eG9wdHNbaV0gPSB4c3RyZHVwKGFyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWFkX3N0cmF0ZWd5X29wdHMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJaWYgKCFyZWFkX29uZWxpbmVyKGJ1ZiwgcmViYXNlX3BhdGhfc3RyYXRlZ3koKSwgMCkpCisJCXJldHVybjsKKwlvcHRzLT5zdHJhdGVneSA9IHN0cmJ1Zl9kZXRhY2goYnVmLCBOVUxMKTsKKwlpZiAoIXJlYWRfb25lbGluZXIoYnVmLCByZWJhc2VfcGF0aF9zdHJhdGVneV9vcHRzKCksIDApKQorCQlyZXR1cm47CisKKwlwYXJzZV9zdHJhdGVneV9vcHRzKG9wdHMsIGJ1Zi0+YnVmKTsKK30KKworc3RhdGljIGludCByZWFkX3BvcHVsYXRlX29wdHMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWlmIChpc19yZWJhc2VfaShvcHRzKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChyZWFkX29uZWxpbmVyKCZidWYsIHJlYmFzZV9wYXRoX2dwZ19zaWduX29wdCgpLCAxKSkgeworCQkJaWYgKCFzdGFydHNfd2l0aChidWYuYnVmLCAiLVMiKSkKKwkJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCQllbHNlIHsKKwkJCQlmcmVlKG9wdHMtPmdwZ19zaWduKTsKKwkJCQlvcHRzLT5ncGdfc2lnbiA9IHhzdHJkdXAoYnVmLmJ1ZiArIDIpOworCQkJfQorCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQl9CisKKwkJaWYgKHJlYWRfb25lbGluZXIoJmJ1ZiwgcmViYXNlX3BhdGhfYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUoKSwgMSkpIHsKKwkJCWlmICghc3RyY21wKGJ1Zi5idWYsICItLXJlcmVyZS1hdXRvdXBkYXRlIikpCisJCQkJb3B0cy0+YWxsb3dfcmVyZXJlX2F1dG8gPSBSRVJFUkVfQVVUT1VQREFURTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLmJ1ZiwgIi0tbm8tcmVyZXJlLWF1dG91cGRhdGUiKSkKKwkJCQlvcHRzLT5hbGxvd19yZXJlcmVfYXV0byA9IFJFUkVSRV9OT0FVVE9VUERBVEU7CisJCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCX0KKworCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfdmVyYm9zZSgpKSkKKwkJCW9wdHMtPnZlcmJvc2UgPSAxOworCisJCWlmIChmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9xdWlldCgpKSkKKwkJCW9wdHMtPnF1aWV0ID0gMTsKKworCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfc2lnbm9mZigpKSkgeworCQkJb3B0cy0+YWxsb3dfZmYgPSAwOworCQkJb3B0cy0+c2lnbm9mZiA9IDE7CisJCX0KKworCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfcmVzY2hlZHVsZV9mYWlsZWRfZXhlYygpKSkKKwkJCW9wdHMtPnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMgPSAxOworCisJCWlmIChmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9kcm9wX3JlZHVuZGFudF9jb21taXRzKCkpKQorCQkJb3B0cy0+ZHJvcF9yZWR1bmRhbnRfY29tbWl0cyA9IDE7CisKKwkJaWYgKGZpbGVfZXhpc3RzKHJlYmFzZV9wYXRoX2tlZXBfcmVkdW5kYW50X2NvbW1pdHMoKSkpCisJCQlvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzID0gMTsKKworCQlyZWFkX3N0cmF0ZWd5X29wdHMob3B0cywgJmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJCWlmIChyZWFkX29uZWxpbmVyKCZvcHRzLT5jdXJyZW50X2ZpeHVwcywKKwkJCQkgIHJlYmFzZV9wYXRoX2N1cnJlbnRfZml4dXBzKCksIDEpKSB7CisJCQljb25zdCBjaGFyICpwID0gb3B0cy0+Y3VycmVudF9maXh1cHMuYnVmOworCQkJb3B0cy0+Y3VycmVudF9maXh1cF9jb3VudCA9IDE7CisJCQl3aGlsZSAoKHAgPSBzdHJjaHIocCwgJ1xuJykpKSB7CisJCQkJb3B0cy0+Y3VycmVudF9maXh1cF9jb3VudCsrOworCQkJCXArKzsKKwkJCX0KKwkJfQorCisJCWlmIChyZWFkX29uZWxpbmVyKCZidWYsIHJlYmFzZV9wYXRoX3NxdWFzaF9vbnRvKCksIDApKSB7CisJCQlpZiAoZ2V0X29pZF9oZXgoYnVmLmJ1ZiwgJm9wdHMtPnNxdWFzaF9vbnRvKSA8IDApCisJCQkJcmV0dXJuIGVycm9yKF8oInVudXNhYmxlIHNxdWFzaC1vbnRvIikpOworCQkJb3B0cy0+aGF2ZV9zcXVhc2hfb250byA9IDE7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX29wdHNfZmlsZSgpKSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBUaGUgZnVuY3Rpb24gZ2l0X3BhcnNlX3NvdXJjZSgpLCBjYWxsZWQgZnJvbSBnaXRfY29uZmlnX2Zyb21fZmlsZSgpLAorCSAqIG1heSBkaWUoKSBpbiBjYXNlIG9mIGEgc3ludGFjdGljYWxseSBpbmNvcnJlY3QgZmlsZS4gV2UgZG8gbm90IGNhcmUKKwkgKiBhYm91dCB0aGlzIGNhc2UsIHRob3VnaCwgYmVjYXVzZSB3ZSB3cm90ZSB0aGF0IGZpbGUgb3Vyc2VsdmVzLCBzbyB3ZQorCSAqIGFyZSBwcmV0dHkgY2VydGFpbiB0aGF0IGl0IGlzIHN5bnRhY3RpY2FsbHkgY29ycmVjdC4KKwkgKi8KKwlpZiAoZ2l0X2NvbmZpZ19mcm9tX2ZpbGUocG9wdWxhdGVfb3B0c19jYiwgZ2l0X3BhdGhfb3B0c19maWxlKCksIG9wdHMpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oIm1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAnJXMnIiksCisJCQlnaXRfcGF0aF9vcHRzX2ZpbGUoKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3N0cmF0ZWd5X29wdHMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWludCBpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgb3B0cy0+eG9wdHNfbnI7ICsraSkKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiAtLSVzIiwgb3B0cy0+eG9wdHNbaV0pOworCisJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9zdHJhdGVneV9vcHRzKCksICIlc1xuIiwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK2ludCB3cml0ZV9iYXNpY19zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNvbnN0IGNoYXIgKmhlYWRfbmFtZSwKKwkJICAgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkKQoreworCWlmIChoZWFkX25hbWUpCisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfaGVhZF9uYW1lKCksICIlc1xuIiwgaGVhZF9uYW1lKTsKKwlpZiAob250bykKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9vbnRvKCksICIlc1xuIiwKKwkJCSAgIG9pZF90b19oZXgoJm9udG8tPm9iamVjdC5vaWQpKTsKKwlpZiAob3JpZ19oZWFkKQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX29yaWdfaGVhZCgpLCAiJXNcbiIsIG9yaWdfaGVhZCk7CisKKwlpZiAob3B0cy0+cXVpZXQpCisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfcXVpZXQoKSwgIiVzIiwgIiIpOworCWlmIChvcHRzLT52ZXJib3NlKQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX3ZlcmJvc2UoKSwgIiVzIiwgIiIpOworCWlmIChvcHRzLT5zdHJhdGVneSkKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9zdHJhdGVneSgpLCAiJXNcbiIsIG9wdHMtPnN0cmF0ZWd5KTsKKwlpZiAob3B0cy0+eG9wdHNfbnIgPiAwKQorCQl3cml0ZV9zdHJhdGVneV9vcHRzKG9wdHMpOworCisJaWYgKG9wdHMtPmFsbG93X3JlcmVyZV9hdXRvID09IFJFUkVSRV9BVVRPVVBEQVRFKQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlKCksICItLXJlcmVyZS1hdXRvdXBkYXRlXG4iKTsKKwllbHNlIGlmIChvcHRzLT5hbGxvd19yZXJlcmVfYXV0byA9PSBSRVJFUkVfTk9BVVRPVVBEQVRFKQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlKCksICItLW5vLXJlcmVyZS1hdXRvdXBkYXRlXG4iKTsKKworCWlmIChvcHRzLT5ncGdfc2lnbikKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9ncGdfc2lnbl9vcHQoKSwgIi1TJXNcbiIsIG9wdHMtPmdwZ19zaWduKTsKKwlpZiAob3B0cy0+c2lnbm9mZikKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9zaWdub2ZmKCksICItLXNpZ25vZmZcbiIpOworCWlmIChvcHRzLT5kcm9wX3JlZHVuZGFudF9jb21taXRzKQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX2Ryb3BfcmVkdW5kYW50X2NvbW1pdHMoKSwgIiVzIiwgIiIpOworCWlmIChvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzKQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX2tlZXBfcmVkdW5kYW50X2NvbW1pdHMoKSwgIiVzIiwgIiIpOworCWlmIChvcHRzLT5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjKQorCQl3cml0ZV9maWxlKHJlYmFzZV9wYXRoX3Jlc2NoZWR1bGVfZmFpbGVkX2V4ZWMoKSwgIiVzIiwgIiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Fsa19yZXZzX3BvcHVsYXRlX3RvZG8oc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LAorCQkJCXN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwllbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kID0gb3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLID8KKwkJVE9ET19QSUNLIDogVE9ET19SRVZFUlQ7CisJY29uc3QgY2hhciAqY29tbWFuZF9zdHJpbmcgPSB0b2RvX2NvbW1hbmRfaW5mb1tjb21tYW5kXS5zdHI7CisJY29uc3QgY2hhciAqZW5jb2Rpbmc7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJaWYgKHByZXBhcmVfcmV2cyhvcHRzKSkKKwkJcmV0dXJuIC0xOworCisJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ob3B0cy0+cmV2cykpKSB7CisJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSBhcHBlbmRfbmV3X3RvZG8odG9kb19saXN0KTsKKwkJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGVuY29kaW5nKTsKKwkJY29uc3QgY2hhciAqc3ViamVjdDsKKwkJaW50IHN1YmplY3RfbGVuOworCisJCWl0ZW0tPmNvbW1hbmQgPSBjb21tYW5kOworCQlpdGVtLT5jb21taXQgPSBjb21taXQ7CisJCWl0ZW0tPmFyZ19vZmZzZXQgPSAwOworCQlpdGVtLT5hcmdfbGVuID0gMDsKKwkJaXRlbS0+b2Zmc2V0X2luX2J1ZiA9IHRvZG9fbGlzdC0+YnVmLmxlbjsKKwkJc3ViamVjdF9sZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbW1pdF9idWZmZXIsICZzdWJqZWN0KTsKKwkJc3RyYnVmX2FkZGYoJnRvZG9fbGlzdC0+YnVmLCAiJXMgJXMgJS4qc1xuIiwgY29tbWFuZF9zdHJpbmcsCisJCQlzaG9ydF9jb21taXRfbmFtZShjb21taXQpLCBzdWJqZWN0X2xlbiwgc3ViamVjdCk7CisJCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBjb21taXRfYnVmZmVyKTsKKwl9CisKKwlpZiAoIXRvZG9fbGlzdC0+bnIpCisJCXJldHVybiBlcnJvcihfKCJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9zZXFfZGlyKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWVudW0gcmVwbGF5X2FjdGlvbiBhY3Rpb247CisJY29uc3QgY2hhciAqaW5fcHJvZ3Jlc3NfZXJyb3IgPSBOVUxMOworCWNvbnN0IGNoYXIgKmluX3Byb2dyZXNzX2FkdmljZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGFkdmlzZV9za2lwID0gZmlsZV9leGlzdHMoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQocikpIHx8CisJCQkJZmlsZV9leGlzdHMoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSk7CisKKwlpZiAoIXNlcXVlbmNlcl9nZXRfbGFzdF9jb21tYW5kKHIsICZhY3Rpb24pKSB7CisJCXN3aXRjaCAoYWN0aW9uKSB7CisJCWNhc2UgUkVQTEFZX1JFVkVSVDoKKwkJCWluX3Byb2dyZXNzX2Vycm9yID0gXygicmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiKTsKKwkJCWluX3Byb2dyZXNzX2FkdmljZSA9CisJCQlfKCJ0cnkgXCJnaXQgcmV2ZXJ0ICgtLWNvbnRpbnVlIHwgJXMtLWFib3J0IHwgLS1xdWl0KVwiIik7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMQVlfUElDSzoKKwkJCWluX3Byb2dyZXNzX2Vycm9yID0gXygiY2hlcnJ5LXBpY2sgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIpOworCQkJaW5fcHJvZ3Jlc3NfYWR2aWNlID0KKwkJCV8oInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8ICVzLS1hYm9ydCB8IC0tcXVpdClcIiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoInVuZXhwZWN0ZWQgYWN0aW9uIGluIGNyZWF0ZV9zZXFfZGlyIik7CisJCX0KKwl9CisJaWYgKGluX3Byb2dyZXNzX2Vycm9yKSB7CisJCWVycm9yKCIlcyIsIGluX3Byb2dyZXNzX2Vycm9yKTsKKwkJaWYgKGFkdmljZV9zZXF1ZW5jZXJfaW5fdXNlKQorCQkJYWR2aXNlKGluX3Byb2dyZXNzX2FkdmljZSwKKwkJCQlhZHZpc2Vfc2tpcCA/ICItLXNraXAgfCAiIDogIiIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChta2RpcihnaXRfcGF0aF9zZXFfZGlyKCksIDA3NzcpIDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAnJXMnIiksCisJCQkJICAgZ2l0X3BhdGhfc2VxX2RpcigpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhdmVfaGVhZChjb25zdCBjaGFyICpoZWFkKQoreworCXN0cnVjdCBsb2NrX2ZpbGUgaGVhZF9sb2NrID0gTE9DS19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZkOworCXNzaXplX3Qgd3JpdHRlbjsKKworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmaGVhZF9sb2NrLCBnaXRfcGF0aF9oZWFkX2ZpbGUoKSwgMCk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBsb2NrIEhFQUQiKSk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzXG4iLCBoZWFkKTsKKwl3cml0dGVuID0gd3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJaWYgKHdyaXR0ZW4gPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGdpdF9wYXRoX2hlYWRfZmlsZSgpKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZoZWFkX2xvY2spOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjb21taXRfbG9ja19maWxlKCZoZWFkX2xvY2spIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIiksIGdpdF9wYXRoX2hlYWRfZmlsZSgpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByb2xsYmFja19pc19zYWZlKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgZXhwZWN0ZWRfaGVhZCwgYWN0dWFsX2hlYWQ7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGdpdF9wYXRoX2Fib3J0X3NhZmV0eV9maWxlKCksIDApID49IDApIHsKKwkJc3RyYnVmX3RyaW0oJnNiKTsKKwkJaWYgKGdldF9vaWRfaGV4KHNiLmJ1ZiwgJmV4cGVjdGVkX2hlYWQpKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSAlcyIpLCBnaXRfcGF0aF9hYm9ydF9zYWZldHlfZmlsZSgpKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCX0KKwllbHNlIGlmIChlcnJubyA9PSBFTk9FTlQpCisJCW9pZGNscigmZXhwZWN0ZWRfaGVhZCk7CisJZWxzZQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgJyVzJyIpLCBnaXRfcGF0aF9hYm9ydF9zYWZldHlfZmlsZSgpKTsKKworCWlmIChnZXRfb2lkKCJIRUFEIiwgJmFjdHVhbF9oZWFkKSkKKwkJb2lkY2xyKCZhY3R1YWxfaGVhZCk7CisKKwlyZXR1cm4gb2lkZXEoJmFjdHVhbF9oZWFkLCAmZXhwZWN0ZWRfaGVhZCk7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfbWVyZ2UoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCByZXQ7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3YsICJyZXNldCIsICItLW1lcmdlIiwgTlVMTCk7CisKKwlpZiAoIWlzX251bGxfb2lkKG9pZCkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgb2lkX3RvX2hleChvaWQpKTsKKworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByb2xsYmFja19zaW5nbGVfcGljayhzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCisJaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHIpKSAmJgorCSAgICAhZmlsZV9leGlzdHMoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQocikpKQorCQlyZXR1cm4gZXJyb3IoXygibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIikpOworCWlmIChyZWFkX3JlZl9mdWxsKCJIRUFEIiwgMCwgJmhlYWRfb2lkLCBOVUxMKSkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCByZXNvbHZlIEhFQUQiKSk7CisJaWYgKGlzX251bGxfb2lkKCZoZWFkX29pZCkpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIpKTsKKwlyZXR1cm4gcmVzZXRfbWVyZ2UoJmhlYWRfb2lkKTsKK30KKworc3RhdGljIGludCBza2lwX3NpbmdsZV9waWNrKHZvaWQpCit7CisJc3RydWN0IG9iamVjdF9pZCBoZWFkOworCisJaWYgKHJlYWRfcmVmX2Z1bGwoIkhFQUQiLCAwLCAmaGVhZCwgTlVMTCkpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmVzb2x2ZSBIRUFEIikpOworCXJldHVybiByZXNldF9tZXJnZSgmaGVhZCk7Cit9CisKK2ludCBzZXF1ZW5jZXJfcm9sbGJhY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlGSUxFICpmOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcDsKKworCWYgPSBmb3BlbihnaXRfcGF0aF9oZWFkX2ZpbGUoKSwgInIiKTsKKwlpZiAoIWYgJiYgZXJybm8gPT0gRU5PRU5UKSB7CisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG11bHRpcGxlLWNoZXJyeS1waWNrIGluIHByb2dyZXNzLgorCQkgKiBJZiBDSEVSUllfUElDS19IRUFEIG9yIFJFVkVSVF9IRUFEIGluZGljYXRlcworCQkgKiBhIHNpbmdsZS1jaGVycnktcGljayBpbiBwcm9ncmVzcywgYWJvcnQgdGhhdC4KKwkJICovCisJCXJldHVybiByb2xsYmFja19zaW5nbGVfcGljayhyKTsKKwl9CisJaWYgKCFmKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY2Fubm90IG9wZW4gJyVzJyIpLCBnaXRfcGF0aF9oZWFkX2ZpbGUoKSk7CisJaWYgKHN0cmJ1Zl9nZXRsaW5lX2xmKCZidWYsIGYpKSB7CisJCWVycm9yKF8oImNhbm5vdCByZWFkICclcyc6ICVzIiksIGdpdF9wYXRoX2hlYWRfZmlsZSgpLAorCQkgICAgICBmZXJyb3IoZikgPyAgc3RyZXJyb3IoZXJybm8pIDogXygidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpKTsKKwkJZmNsb3NlKGYpOworCQlnb3RvIGZhaWw7CisJfQorCWZjbG9zZShmKTsKKwlpZiAocGFyc2Vfb2lkX2hleChidWYuYnVmLCAmb2lkLCAmcCkgfHwgKnAgIT0gJ1wwJykgeworCQllcnJvcihfKCJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiKSwKKwkJCWdpdF9wYXRoX2hlYWRfZmlsZSgpKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAoaXNfbnVsbF9vaWQoJm9pZCkpIHsKKwkJZXJyb3IoXygiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iKSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoIXJvbGxiYWNrX2lzX3NhZmUoKSkgeworCQkvKiBEbyBub3QgZXJyb3IsIGp1c3QgZG8gbm90IHJvbGxiYWNrICovCisJCXdhcm5pbmcoXygiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFELiAiCisJCQkgICJOb3QgcmV3aW5kaW5nLCBjaGVjayB5b3VyIEhFQUQhIikpOworCX0gZWxzZQorCWlmIChyZXNldF9tZXJnZSgmb2lkKSkKKwkJZ290byBmYWlsOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKG9wdHMpOworZmFpbDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBzZXF1ZW5jZXJfc2tpcChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWVudW0gcmVwbGF5X2FjdGlvbiBhY3Rpb24gPSAtMTsKKwlzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChyLCAmYWN0aW9uKTsKKworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgc3ViY29tbWFuZCByZXF1ZXN0ZWQgdG8gc2tpcCB0aGUgY29tbWl0IGlzIGFjdHVhbGx5CisJICogaW4gcHJvZ3Jlc3MgYW5kIHRoYXQgaXQncyBzYWZlIHRvIHNraXAgdGhlIGNvbW1pdC4KKwkgKgorCSAqIG9wdHMtPmFjdGlvbiB0ZWxscyB1cyB3aGljaCBzdWJjb21tYW5kIHJlcXVlc3RlZCB0byBza2lwIHRoZSBjb21taXQuCisJICogSWYgdGhlIGNvcnJlc3BvbmRpbmcgLmdpdC88QUNUSU9OPl9IRUFEIGV4aXN0cywgd2Uga25vdyB0aGF0IHRoZQorCSAqIGFjdGlvbiBpcyBpbiBwcm9ncmVzcyBhbmQgd2UgY2FuIHNraXAgdGhlIGNvbW1pdC4KKwkgKgorCSAqIE90aGVyd2lzZSB3ZSBjaGVjayB0aGF0IHRoZSBsYXN0IGluc3RydWN0aW9uIHdhcyByZWxhdGVkIHRvIHRoZQorCSAqIHBhcnRpY3VsYXIgc3ViY29tbWFuZCB3ZSdyZSB0cnlpbmcgdG8gZXhlY3V0ZSBhbmQgYmFyZiBpZiB0aGF0J3Mgbm90CisJICogdGhlIGNhc2UuCisJICoKKwkgKiBGaW5hbGx5IHdlIGNoZWNrIHRoYXQgdGhlIHJvbGxiYWNrIGlzICJzYWZlIiwgaS5lLiwgaGFzIHRoZSBIRUFECisJICogbW92ZWQ/IEluIHRoaXMgY2FzZSwgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvICJyZXNldCB0aGUgbWVyZ2UiIGFuZAorCSAqICJza2lwIHRoZSBjb21taXQiIGFzIHRoZSB1c2VyIGFscmVhZHkgaGFuZGxlZCB0aGlzIGJ5IGNvbW1pdHRpbmcuIEJ1dAorCSAqIHdlJ2Qgbm90IHdhbnQgdG8gYmFyZiBoZXJlLCBpbnN0ZWFkIGdpdmUgYWR2aWNlIG9uIGhvdyB0byBwcm9jZWVkLiBXZQorCSAqIG9ubHkgbmVlZCB0byBjaGVjayB0aGF0IHdoZW4gLmdpdC88QUNUSU9OPl9IRUFEIGRvZXNuJ3QgZXhpc3QgYmVjYXVzZQorCSAqIGl0IGdldHMgcmVtb3ZlZCB3aGVuIHRoZSB1c2VyIGNvbW1pdHMsIHNvIGlmIGl0IHN0aWxsIGV4aXN0cyB3ZSdyZQorCSAqIHN1cmUgdGhlIHVzZXIgY2FuJ3QgaGF2ZSBjb21taXR0ZWQgYmVmb3JlLgorCSAqLworCXN3aXRjaCAob3B0cy0+YWN0aW9uKSB7CisJY2FzZSBSRVBMQVlfUkVWRVJUOgorCQlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX3JldmVydF9oZWFkKHIpKSkgeworCQkJaWYgKGFjdGlvbiAhPSBSRVBMQVlfUkVWRVJUKQorCQkJCXJldHVybiBlcnJvcihfKCJubyByZXZlcnQgaW4gcHJvZ3Jlc3MiKSk7CisJCQlpZiAoIXJvbGxiYWNrX2lzX3NhZmUoKSkKKwkJCQlnb3RvIGdpdmVfYWR2aWNlOworCQl9CisJCWJyZWFrOworCWNhc2UgUkVQTEFZX1BJQ0s6CisJCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSkpIHsKKwkJCWlmIChhY3Rpb24gIT0gUkVQTEFZX1BJQ0spCisJCQkJcmV0dXJuIGVycm9yKF8oIm5vIGNoZXJyeS1waWNrIGluIHByb2dyZXNzIikpOworCQkJaWYgKCFyb2xsYmFja19pc19zYWZlKCkpCisJCQkJZ290byBnaXZlX2FkdmljZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVuZXhwZWN0ZWQgYWN0aW9uIGluIHNlcXVlbmNlcl9za2lwIik7CisJfQorCisJaWYgKHNraXBfc2luZ2xlX3BpY2soKSkKKwkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byBza2lwIHRoZSBjb21taXQiKSk7CisJaWYgKCFpc19kaXJlY3RvcnkoZ2l0X3BhdGhfc2VxX2RpcigpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2VxdWVuY2VyX2NvbnRpbnVlKHIsIG9wdHMpOworCitnaXZlX2FkdmljZToKKwllcnJvcihfKCJ0aGVyZSBpcyBub3RoaW5nIHRvIHNraXAiKSk7CisKKwlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpIHsKKwkJYWR2aXNlKF8oImhhdmUgeW91IGNvbW1pdHRlZCBhbHJlYWR5P1xuIgorCQkJICJ0cnkgXCJnaXQgJXMgLS1jb250aW51ZVwiIiksCisJCQkgYWN0aW9uID09IFJFUExBWV9SRVZFUlQgPyAicmV2ZXJ0IiA6ICJjaGVycnktcGljayIpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgc2F2ZV90b2RvKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBsb2NrX2ZpbGUgdG9kb19sb2NrID0gTE9DS19JTklUOworCWNvbnN0IGNoYXIgKnRvZG9fcGF0aCA9IGdldF90b2RvX3BhdGgob3B0cyk7CisJaW50IG5leHQgPSB0b2RvX2xpc3QtPmN1cnJlbnQsIG9mZnNldCwgZmQ7CisKKwkvKgorCSAqIHJlYmFzZSAtaSB3cml0ZXMgImdpdC1yZWJhc2UtdG9kbyIgd2l0aG91dCB0aGUgY3VycmVudGx5IGV4ZWN1dGluZworCSAqIGNvbW1hbmQsIGFwcGVuZGluZyBpdCB0byAiZG9uZSIgaW5zdGVhZC4KKwkgKi8KKwlpZiAoaXNfcmViYXNlX2kob3B0cykpCisJCW5leHQrKzsKKworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmdG9kb19sb2NrLCB0b2RvX3BhdGgsIDApOworCWlmIChmZCA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgbG9jayAnJXMnIiksIHRvZG9fcGF0aCk7CisJb2Zmc2V0ID0gZ2V0X2l0ZW1fbGluZV9vZmZzZXQodG9kb19saXN0LCBuZXh0KTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgdG9kb19saXN0LT5idWYuYnVmICsgb2Zmc2V0LAorCQkJdG9kb19saXN0LT5idWYubGVuIC0gb2Zmc2V0KSA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCB0b2RvX3BhdGgpOworCWlmIChjb21taXRfbG9ja19maWxlKCZ0b2RvX2xvY2spIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIiksIHRvZG9fcGF0aCk7CisKKwlpZiAoaXNfcmViYXNlX2kob3B0cykgJiYgbmV4dCA+IDApIHsKKwkJY29uc3QgY2hhciAqZG9uZSA9IHJlYmFzZV9wYXRoX2RvbmUoKTsKKwkJaW50IGZkID0gb3Blbihkb25lLCBPX0NSRUFUIHwgT19XUk9OTFkgfCBPX0FQUEVORCwgMDY2Nik7CisJCWludCByZXQgPSAwOworCisJCWlmIChmZCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGdldF9pdGVtX2xpbmUodG9kb19saXN0LCBuZXh0IC0gMSksCisJCQkJICBnZXRfaXRlbV9saW5lX2xlbmd0aCh0b2RvX2xpc3QsIG5leHQgLSAxKSkKKwkJICAgIDwgMCkKKwkJCXJldCA9IGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGRvbmUpOworCQlpZiAoY2xvc2UoZmQpIDwgMCkKKwkJCXJldCA9IGVycm9yX2Vycm5vKF8oImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIiksIGRvbmUpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYXZlX29wdHMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWNvbnN0IGNoYXIgKm9wdHNfZmlsZSA9IGdpdF9wYXRoX29wdHNfZmlsZSgpOworCWludCByZXMgPSAwOworCisJaWYgKG9wdHMtPm5vX2NvbW1pdCkKKwkJcmVzIHw9IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KG9wdHNfZmlsZSwKKwkJCQkJIm9wdGlvbnMubm8tY29tbWl0IiwgInRydWUiKTsKKwlpZiAob3B0cy0+ZWRpdCkKKwkJcmVzIHw9IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KG9wdHNfZmlsZSwKKwkJCQkJIm9wdGlvbnMuZWRpdCIsICJ0cnVlIik7CisJaWYgKG9wdHMtPmFsbG93X2VtcHR5KQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCQkib3B0aW9ucy5hbGxvdy1lbXB0eSIsICJ0cnVlIik7CisJaWYgKG9wdHMtPmFsbG93X2VtcHR5X21lc3NhZ2UpCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJIm9wdGlvbnMuYWxsb3ctZW1wdHktbWVzc2FnZSIsICJ0cnVlIik7CisJaWYgKG9wdHMtPmtlZXBfcmVkdW5kYW50X2NvbW1pdHMpCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJIm9wdGlvbnMua2VlcC1yZWR1bmRhbnQtY29tbWl0cyIsICJ0cnVlIik7CisJaWYgKG9wdHMtPnNpZ25vZmYpCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJCSJvcHRpb25zLnNpZ25vZmYiLCAidHJ1ZSIpOworCWlmIChvcHRzLT5yZWNvcmRfb3JpZ2luKQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCQkib3B0aW9ucy5yZWNvcmQtb3JpZ2luIiwgInRydWUiKTsKKwlpZiAob3B0cy0+YWxsb3dfZmYpCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJCSJvcHRpb25zLmFsbG93LWZmIiwgInRydWUiKTsKKwlpZiAob3B0cy0+bWFpbmxpbmUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVkIiwgb3B0cy0+bWFpbmxpbmUpOworCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCQkib3B0aW9ucy5tYWlubGluZSIsIGJ1Zi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisJaWYgKG9wdHMtPnN0cmF0ZWd5KQorCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCQkib3B0aW9ucy5zdHJhdGVneSIsIG9wdHMtPnN0cmF0ZWd5KTsKKwlpZiAob3B0cy0+Z3BnX3NpZ24pCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJCSJvcHRpb25zLmdwZy1zaWduIiwgb3B0cy0+Z3BnX3NpZ24pOworCWlmIChvcHRzLT54b3B0cykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IG9wdHMtPnhvcHRzX25yOyBpKyspCisJCQlyZXMgfD0gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZV9nZW50bHkob3B0c19maWxlLAorCQkJCQkib3B0aW9ucy5zdHJhdGVneS1vcHRpb24iLAorCQkJCQlvcHRzLT54b3B0c1tpXSwgIl4kIiwgMCk7CisJfQorCWlmIChvcHRzLT5hbGxvd19yZXJlcmVfYXV0bykKKwkJcmVzIHw9IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KG9wdHNfZmlsZSwKKwkJCQkib3B0aW9ucy5hbGxvdy1yZXJlcmUtYXV0byIsCisJCQkJb3B0cy0+YWxsb3dfcmVyZXJlX2F1dG8gPT0gUkVSRVJFX0FVVE9VUERBVEUgPworCQkJCSJ0cnVlIiA6ICJmYWxzZSIpOworCisJaWYgKG9wdHMtPmV4cGxpY2l0X2NsZWFudXApCisJCXJlcyB8PSBnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShvcHRzX2ZpbGUsCisJCQkJIm9wdGlvbnMuZGVmYXVsdC1tc2ctY2xlYW51cCIsCisJCQkJZGVzY3JpYmVfY2xlYW51cF9tb2RlKG9wdHMtPmRlZmF1bHRfbXNnX2NsZWFudXApKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IG1ha2VfcGF0Y2goc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJICAgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJldl9pbmZvIGxvZ190cmVlX29wdDsKKwljb25zdCBjaGFyICpzdWJqZWN0LCAqcDsKKwlpbnQgcmVzID0gMDsKKworCXAgPSBzaG9ydF9jb21taXRfbmFtZShjb21taXQpOworCWlmICh3cml0ZV9tZXNzYWdlKHAsIHN0cmxlbihwKSwgcmViYXNlX3BhdGhfc3RvcHBlZF9zaGEoKSwgMSkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKHVwZGF0ZV9yZWYoInJlYmFzZSIsICJSRUJBU0VfSEVBRCIsICZjb21taXQtPm9iamVjdC5vaWQsCisJCSAgICAgICBOVUxMLCBSRUZfTk9fREVSRUYsIFVQREFURV9SRUZTX01TR19PTl9FUlIpKQorCQlyZXMgfD0gZXJyb3IoXygiY291bGQgbm90IHVwZGF0ZSAlcyIpLCAiUkVCQVNFX0hFQUQiKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9wYXRjaCIsIGdldF9kaXIob3B0cykpOworCW1lbXNldCgmbG9nX3RyZWVfb3B0LCAwLCBzaXplb2YobG9nX3RyZWVfb3B0KSk7CisJcmVwb19pbml0X3JldmlzaW9ucyhyLCAmbG9nX3RyZWVfb3B0LCBOVUxMKTsKKwlsb2dfdHJlZV9vcHQuYWJicmV2ID0gMDsKKwlsb2dfdHJlZV9vcHQuZGlmZiA9IDE7CisJbG9nX3RyZWVfb3B0LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCWxvZ190cmVlX29wdC5kaXNhYmxlX3N0ZGluID0gMTsKKwlsb2dfdHJlZV9vcHQubm9fY29tbWl0X2lkID0gMTsKKwlsb2dfdHJlZV9vcHQuZGlmZm9wdC5maWxlID0gZm9wZW4oYnVmLmJ1ZiwgInciKTsKKwlsb2dfdHJlZV9vcHQuZGlmZm9wdC51c2VfY29sb3IgPSBHSVRfQ09MT1JfTkVWRVI7CisJaWYgKCFsb2dfdHJlZV9vcHQuZGlmZm9wdC5maWxlKQorCQlyZXMgfD0gZXJyb3JfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyIpLCBidWYuYnVmKTsKKwllbHNlIHsKKwkJcmVzIHw9IGxvZ190cmVlX2NvbW1pdCgmbG9nX3RyZWVfb3B0LCBjb21taXQpOworCQlmY2xvc2UobG9nX3RyZWVfb3B0LmRpZmZvcHQuZmlsZSk7CisJfQorCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9tZXNzYWdlIiwgZ2V0X2RpcihvcHRzKSk7CisJaWYgKCFmaWxlX2V4aXN0cyhidWYuYnVmKSkgeworCQljb25zdCBjaGFyICplbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJCWNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CisJCWZpbmRfY29tbWl0X3N1YmplY3QoY29tbWl0X2J1ZmZlciwgJnN1YmplY3QpOworCQlyZXMgfD0gd3JpdGVfbWVzc2FnZShzdWJqZWN0LCBzdHJsZW4oc3ViamVjdCksIGJ1Zi5idWYsIDEpOworCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgY29tbWl0X2J1ZmZlcik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBpbnRlbmRfdG9fYW1lbmQodm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQ7CisJY2hhciAqcDsKKworCWlmIChnZXRfb2lkKCJIRUFEIiwgJmhlYWQpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlYWQgSEVBRCIpKTsKKworCXAgPSBvaWRfdG9faGV4KCZoZWFkKTsKKwlyZXR1cm4gd3JpdGVfbWVzc2FnZShwLCBzdHJsZW4ocCksIHJlYmFzZV9wYXRoX2FtZW5kKCksIDEpOworfQorCitzdGF0aWMgaW50IGVycm9yX3dpdGhfcGF0Y2goc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgIGNvbnN0IGNoYXIgKnN1YmplY3QsIGludCBzdWJqZWN0X2xlbiwKKwkJCSAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJCQkgICAgaW50IGV4aXRfY29kZSwgaW50IHRvX2FtZW5kKQoreworCWlmIChjb21taXQpIHsKKwkJaWYgKG1ha2VfcGF0Y2gociwgY29tbWl0LCBvcHRzKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKGNvcHlfZmlsZShyZWJhc2VfcGF0aF9tZXNzYWdlKCksCisJCQkgICAgIGdpdF9wYXRoX21lcmdlX21zZyhyKSwgMDY2NikpCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gY29weSAnJXMnIHRvICclcyciKSwKKwkJCSAgICAgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpLCByZWJhc2VfcGF0aF9tZXNzYWdlKCkpOworCisJaWYgKHRvX2FtZW5kKSB7CisJCWlmIChpbnRlbmRfdG9fYW1lbmQoKSkKKwkJCXJldHVybiAtMTsKKworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGhcbiIKKwkJCSAgIlxuIgorCQkJICAiICBnaXQgY29tbWl0IC0tYW1lbmQgJXNcbiIKKwkJCSAgIlxuIgorCQkJICAiT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcywgcnVuXG4iCisJCQkgICJcbiIKKwkJCSAgIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iKSwKKwkJCWdwZ19zaWduX29wdF9xdW90ZWQob3B0cykpOworCX0gZWxzZSBpZiAoZXhpdF9jb2RlKSB7CisJCWlmIChjb21taXQpCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ291bGQgbm90IGFwcGx5ICVzLi4uICUuKnMiKSwKKwkJCQkgICBzaG9ydF9jb21taXRfbmFtZShjb21taXQpLCBzdWJqZWN0X2xlbiwgc3ViamVjdCk7CisJCWVsc2UKKwkJCS8qCisJCQkgKiBXZSBkb24ndCBoYXZlIHRoZSBoYXNoIG9mIHRoZSBwYXJlbnQgc28KKwkJCSAqIGp1c3QgcHJpbnQgdGhlIGxpbmUgZnJvbSB0aGUgdG9kbyBmaWxlLgorCQkJICovCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiQ291bGQgbm90IG1lcmdlICUuKnMiKSwKKwkJCQkgICBzdWJqZWN0X2xlbiwgc3ViamVjdCk7CisJfQorCisJcmV0dXJuIGV4aXRfY29kZTsKK30KKworc3RhdGljIGludCBlcnJvcl9mYWlsZWRfc3F1YXNoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJCQkgICAgICAgaW50IHN1YmplY3RfbGVuLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnN1YmplY3QpCit7CisJaWYgKGNvcHlfZmlsZShyZWJhc2VfcGF0aF9tZXNzYWdlKCksIHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKSwgMDY2NikpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgY29weSAnJXMnIHRvICclcyciKSwKKwkJCXJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKSwgcmViYXNlX3BhdGhfbWVzc2FnZSgpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpKTsKKwlpZiAoY29weV9maWxlKGdpdF9wYXRoX21lcmdlX21zZyhyKSwgcmViYXNlX3BhdGhfbWVzc2FnZSgpLCAwNjY2KSkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJyIpLAorCQkJICAgICByZWJhc2VfcGF0aF9tZXNzYWdlKCksCisJCQkgICAgIGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJcmV0dXJuIGVycm9yX3dpdGhfcGF0Y2gociwgY29tbWl0LCBzdWJqZWN0LCBzdWJqZWN0X2xlbiwgb3B0cywgMSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZG9fZXhlYyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqY29tbWFuZF9saW5lKQoreworCXN0cnVjdCBhcmd2X2FycmF5IGNoaWxkX2VudiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwljb25zdCBjaGFyICpjaGlsZF9hcmd2W10gPSB7IE5VTEwsIE5VTEwgfTsKKwlpbnQgZGlydHksIHN0YXR1czsKKworCWZwcmludGYoc3RkZXJyLCAiRXhlY3V0aW5nOiAlc1xuIiwgY29tbWFuZF9saW5lKTsKKwljaGlsZF9hcmd2WzBdID0gY29tbWFuZF9saW5lOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkX2VudiwgIkdJVF9ESVI9JXMiLCBhYnNvbHV0ZV9wYXRoKGdldF9naXRfZGlyKCkpKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZF9lbnYsICJHSVRfV09SS19UUkVFPSVzIiwKKwkJCSBhYnNvbHV0ZV9wYXRoKGdldF9naXRfd29ya190cmVlKCkpKTsKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdF9jZF9lbnYoY2hpbGRfYXJndiwgUlVOX1VTSU5HX1NIRUxMLCBOVUxMLAorCQkJCQkgIGNoaWxkX2Vudi5hcmd2KTsKKworCS8qIGZvcmNlIHJlLXJlYWRpbmcgb2YgdGhlIGNhY2hlICovCisJaWYgKGRpc2NhcmRfaW5kZXgoci0+aW5kZXgpIDwgMCB8fCByZXBvX3JlYWRfaW5kZXgocikgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgaW5kZXgiKSk7CisKKwlkaXJ0eSA9IHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHIsICJyZWJhc2UiLCBOVUxMLCAxLCAxKTsKKworCWlmIChzdGF0dXMpIHsKKwkJd2FybmluZyhfKCJleGVjdXRpb24gZmFpbGVkOiAlc1xuJXMiCisJCQkgICJZb3UgY2FuIGZpeCB0aGUgcHJvYmxlbSwgYW5kIHRoZW4gcnVuXG4iCisJCQkgICJcbiIKKwkJCSAgIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisJCQkgICJcbiIpLAorCQkJY29tbWFuZF9saW5lLAorCQkJZGlydHkgPyBOXygiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSAiCisJCQkJIndvcmtpbmcgdHJlZVxuIikgOiAiIik7CisJCWlmIChzdGF0dXMgPT0gMTI3KQorCQkJLyogY29tbWFuZCBub3QgZm91bmQgKi8KKwkJCXN0YXR1cyA9IDE7CisJfSBlbHNlIGlmIChkaXJ0eSkgeworCQl3YXJuaW5nKF8oImV4ZWN1dGlvbiBzdWNjZWVkZWQ6ICVzXG5idXQgIgorCQkJICAibGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZVxuIgorCQkJICAiQ29tbWl0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcywgYW5kIHRoZW4gcnVuXG4iCisJCQkgICJcbiIKKwkJCSAgIiAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iCisJCQkgICJcbiIpLCBjb21tYW5kX2xpbmUpOworCQlzdGF0dXMgPSAxOworCX0KKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmNoaWxkX2Vudik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHNhZmVfYXBwZW5kKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKKwlpbnQgZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBmaWxlbmFtZSwKKwkJCQkJICAgTE9DS19SRVBPUlRfT05fRVJST1IpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmYnVmLCBmaWxlbmFtZSwgMCkgPCAwICYmIGVycm5vICE9IEVOT0VOVCkgeworCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIGZpbGVuYW1lKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfY29tcGxldGUoJmJ1ZiwgJ1xuJyk7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZidWYsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIGZpbGVuYW1lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJmxvY2spIDwgMCkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJcmV0dXJuIGVycm9yKF8oImZhaWxlZCB0byBmaW5hbGl6ZSAnJXMnIiksIGZpbGVuYW1lKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19sYWJlbChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzID0gZ2V0X21haW5fcmVmX3N0b3JlKHIpOworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgcmVmX25hbWUgPSBTVFJCVUZfSU5JVCwgZXJyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWRfb2lkOworCisJaWYgKGxlbiA9PSAxICYmICpuYW1lID09ICcjJykKKwkJcmV0dXJuIGVycm9yKF8oImlsbGVnYWwgbGFiZWwgbmFtZTogJyUuKnMnIiksIGxlbiwgbmFtZSk7CisKKwlzdHJidWZfYWRkZigmcmVmX25hbWUsICJyZWZzL3Jld3JpdHRlbi8lLipzIiwgbGVuLCBuYW1lKTsKKwlzdHJidWZfYWRkZigmbXNnLCAicmViYXNlIChsYWJlbCkgJyUuKnMnIiwgbGVuLCBuYW1lKTsKKworCXRyYW5zYWN0aW9uID0gcmVmX3N0b3JlX3RyYW5zYWN0aW9uX2JlZ2luKHJlZnMsICZlcnIpOworCWlmICghdHJhbnNhY3Rpb24pIHsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXJldCA9IC0xOworCX0gZWxzZSBpZiAoZ2V0X29pZCgiSEVBRCIsICZoZWFkX29pZCkpIHsKKwkJZXJyb3IoXygiY291bGQgbm90IHJlYWQgSEVBRCIpKTsKKwkJcmV0ID0gLTE7CisJfSBlbHNlIGlmIChyZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWZfbmFtZS5idWYsICZoZWFkX29pZCwKKwkJCQkJICBOVUxMLCAwLCBtc2cuYnVmLCAmZXJyKSA8IDAgfHwKKwkJICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXJldCA9IC0xOworCX0KKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gc2FmZV9hcHBlbmQocmViYXNlX3BhdGhfcmVmc190b19kZWxldGUoKSwKKwkJCQkgICIlc1xuIiwgcmVmX25hbWUuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVmX25hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlZmxvZ19tZXNzYWdlKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwljb25zdCBjaGFyICpzdWJfYWN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKK3N0YXRpYyBpbnQgZG9fcmVzZXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBzdHJidWYgcmVmX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgbG9ja19maWxlIGxvY2sgPSBMT0NLX0lOSVQ7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyB1bnBhY2tfdHJlZV9vcHRzOworCWludCByZXQgPSAwOworCisJaWYgKHJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmxvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChsZW4gPT0gMTAgJiYgIXN0cm5jbXAoIltuZXcgcm9vdF0iLCBuYW1lLCBsZW4pKSB7CisJCWlmICghb3B0cy0+aGF2ZV9zcXVhc2hfb250bykgeworCQkJY29uc3QgY2hhciAqaGV4OworCQkJaWYgKGNvbW1pdF90cmVlKCIiLCAwLCB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLAorCQkJCQlOVUxMLCAmb3B0cy0+c3F1YXNoX29udG8sCisJCQkJCU5VTEwsIE5VTEwpKQorCQkJCXJldHVybiBlcnJvcihfKCJ3cml0aW5nIGZha2Ugcm9vdCBjb21taXQiKSk7CisJCQlvcHRzLT5oYXZlX3NxdWFzaF9vbnRvID0gMTsKKwkJCWhleCA9IG9pZF90b19oZXgoJm9wdHMtPnNxdWFzaF9vbnRvKTsKKwkJCWlmICh3cml0ZV9tZXNzYWdlKGhleCwgc3RybGVuKGhleCksCisJCQkJCSAgcmViYXNlX3BhdGhfc3F1YXNoX29udG8oKSwgMCkpCisJCQkJcmV0dXJuIGVycm9yKF8oIndyaXRpbmcgc3F1YXNoLW9udG8iKSk7CisJCX0KKwkJb2lkY3B5KCZvaWQsICZvcHRzLT5zcXVhc2hfb250byk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisKKwkJLyogRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlIGxhYmVsICovCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCWlmIChpc3NwYWNlKG5hbWVbaV0pKQorCQkJCWJyZWFrOworCQlsZW4gPSBpOworCisJCXN0cmJ1Zl9hZGRmKCZyZWZfbmFtZSwgInJlZnMvcmV3cml0dGVuLyUuKnMiLCBsZW4sIG5hbWUpOworCQlpZiAoZ2V0X29pZChyZWZfbmFtZS5idWYsICZvaWQpICYmCisJCSAgICBnZXRfb2lkKHJlZl9uYW1lLmJ1ZiArIHN0cmxlbigicmVmcy9yZXdyaXR0ZW4vIiksICZvaWQpKSB7CisJCQllcnJvcihfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIHJlZl9uYW1lLmJ1Zik7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQkJc3RyYnVmX3JlbGVhc2UoJnJlZl9uYW1lKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCW1lbXNldCgmdW5wYWNrX3RyZWVfb3B0cywgMCwgc2l6ZW9mKHVucGFja190cmVlX29wdHMpKTsKKwlzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZ1bnBhY2tfdHJlZV9vcHRzLCAicmVzZXQiKTsKKwl1bnBhY2tfdHJlZV9vcHRzLmhlYWRfaWR4ID0gMTsKKwl1bnBhY2tfdHJlZV9vcHRzLnNyY19pbmRleCA9IHItPmluZGV4OworCXVucGFja190cmVlX29wdHMuZHN0X2luZGV4ID0gci0+aW5kZXg7CisJdW5wYWNrX3RyZWVfb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwl1bnBhY2tfdHJlZV9vcHRzLm1lcmdlID0gMTsKKwl1bnBhY2tfdHJlZV9vcHRzLnVwZGF0ZSA9IDE7CisKKwlpZiAocmVwb19yZWFkX2luZGV4X3VubWVyZ2VkKHIpKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZyZWZfbmFtZSk7CisJCXJldHVybiBlcnJvcl9yZXNvbHZlX2NvbmZsaWN0KF8oYWN0aW9uX25hbWUob3B0cykpKTsKKwl9CisKKwlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKHIsICZkZXNjLCAmb2lkKSkgeworCQllcnJvcihfKCJmYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzIiksIG9pZF90b19oZXgoJm9pZCkpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQlmcmVlKCh2b2lkICopZGVzYy5idWZmZXIpOworCQlzdHJidWZfcmVsZWFzZSgmcmVmX25hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHVucGFja190cmVlcygxLCAmZGVzYywgJnVucGFja190cmVlX29wdHMpKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCWZyZWUoKHZvaWQgKilkZXNjLmJ1ZmZlcik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZyZWZfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCgmb2lkKTsKKwlwcmltZV9jYWNoZV90cmVlKHIsIHItPmluZGV4LCB0cmVlKTsKKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoci0+aW5kZXgsICZsb2NrLCBDT01NSVRfTE9DSykgPCAwKQorCQlyZXQgPSBlcnJvcihfKCJjb3VsZCBub3Qgd3JpdGUgaW5kZXgiKSk7CisJZnJlZSgodm9pZCAqKWRlc2MuYnVmZmVyKTsKKworCWlmICghcmV0KQorCQlyZXQgPSB1cGRhdGVfcmVmKHJlZmxvZ19tZXNzYWdlKG9wdHMsICJyZXNldCIsICInJS4qcyciLAorCQkJCQkJbGVuLCBuYW1lKSwgIkhFQUQiLCAmb2lkLAorCQkJCSBOVUxMLCAwLCBVUERBVEVfUkVGU19NU0dfT05fRVJSKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZfbmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmxvb2t1cF9sYWJlbChjb25zdCBjaGFyICpsYWJlbCwgaW50IGxlbiwKKwkJCQkgICBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZGYoYnVmLCAicmVmcy9yZXdyaXR0ZW4vJS4qcyIsIGxlbiwgbGFiZWwpOworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoYnVmLT5idWYpOworCWlmICghY29tbWl0KSB7CisJCS8qIGZhbGwgYmFjayB0byBub24tcmV3cml0dGVuIHJlZiBvciBjb21taXQgKi8KKwkJc3RyYnVmX3NwbGljZShidWYsIDAsIHN0cmxlbigicmVmcy9yZXdyaXR0ZW4vIiksICIiLCAwKTsKKwkJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShidWYtPmJ1Zik7CisJfQorCisJaWYgKCFjb21taXQpCisJCWVycm9yKF8oImNvdWxkIG5vdCByZXNvbHZlICclcyciKSwgYnVmLT5idWYpOworCisJcmV0dXJuIGNvbW1pdDsKK30KKworc3RhdGljIGludCBkb19tZXJnZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IGFyZ19sZW4sCisJCSAgICBpbnQgZmxhZ3MsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlpbnQgcnVuX2NvbW1pdF9mbGFncyA9IChmbGFncyAmIFRPRE9fRURJVF9NRVJHRV9NU0cpID8KKwkJRURJVF9NU0cgfCBWRVJJRllfTVNHIDogMDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZl9uYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQsICptZXJnZV9jb21taXQsICppOworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXMsICpqLCAqcmV2ZXJzZWQgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqdG9fbWVyZ2UgPSBOVUxMLCAqKnRhaWwgPSAmdG9fbWVyZ2U7CisJY29uc3QgY2hhciAqc3RyYXRlZ3kgPSAhb3B0cy0+eG9wdHNfbnIgJiYKKwkJKCFvcHRzLT5zdHJhdGVneSB8fCAhc3RyY21wKG9wdHMtPnN0cmF0ZWd5LCAicmVjdXJzaXZlIikpID8KKwkJTlVMTCA6IG9wdHMtPnN0cmF0ZWd5OworCXN0cnVjdCBtZXJnZV9vcHRpb25zIG87CisJaW50IG1lcmdlX2FyZ19sZW4sIG9uZWxpbmVfb2Zmc2V0LCBjYW5fZmFzdF9mb3J3YXJkLCByZXQsIGs7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9jazsKKwljb25zdCBjaGFyICpwOworCisJaWYgKHJlcG9faG9sZF9sb2NrZWRfaW5kZXgociwgJmxvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKSA8IDApIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gbGVhdmVfbWVyZ2U7CisJfQorCisJaGVhZF9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lKCJIRUFEIik7CisJaWYgKCFoZWFkX2NvbW1pdCkgeworCQlyZXQgPSBlcnJvcihfKCJjYW5ub3QgbWVyZ2Ugd2l0aG91dCBhIGN1cnJlbnQgcmV2aXNpb24iKSk7CisJCWdvdG8gbGVhdmVfbWVyZ2U7CisJfQorCisJLyoKKwkgKiBGb3Igb2N0b3B1cyBtZXJnZXMsIHRoZSBhcmcgc3RhcnRzIHdpdGggdGhlIGxpc3Qgb2YgcmV2aXNpb25zIHRvIGJlCisJICogbWVyZ2VkLiBUaGUgbGlzdCBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5ICcjJyBhbmQgdGhlIG9uZWxpbmUuCisJICovCisJbWVyZ2VfYXJnX2xlbiA9IG9uZWxpbmVfb2Zmc2V0ID0gYXJnX2xlbjsKKwlmb3IgKHAgPSBhcmc7IHAgLSBhcmcgPCBhcmdfbGVuOyBwICs9IHN0cnNwbihwLCAiIFx0XG4iKSkgeworCQlpZiAoISpwKQorCQkJYnJlYWs7CisJCWlmICgqcCA9PSAnIycgJiYgKCFwWzFdIHx8IGlzc3BhY2UocFsxXSkpKSB7CisJCQlwICs9IDEgKyBzdHJzcG4ocCArIDEsICIgXHRcbiIpOworCQkJb25lbGluZV9vZmZzZXQgPSBwIC0gYXJnOworCQkJYnJlYWs7CisJCX0KKwkJayA9IHN0cmNzcG4ocCwgIiBcdFxuIik7CisJCWlmICghaykKKwkJCWNvbnRpbnVlOworCQltZXJnZV9jb21taXQgPSBsb29rdXBfbGFiZWwocCwgaywgJnJlZl9uYW1lKTsKKwkJaWYgKCFtZXJnZV9jb21taXQpIHsKKwkJCXJldCA9IGVycm9yKF8oInVuYWJsZSB0byBwYXJzZSAnJS4qcyciKSwgaywgcCk7CisJCQlnb3RvIGxlYXZlX21lcmdlOworCQl9CisJCXRhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KG1lcmdlX2NvbW1pdCwgdGFpbCktPm5leHQ7CisJCXAgKz0gazsKKwkJbWVyZ2VfYXJnX2xlbiA9IHAgLSBhcmc7CisJfQorCisJaWYgKCF0b19tZXJnZSkgeworCQlyZXQgPSBlcnJvcihfKCJub3RoaW5nIHRvIG1lcmdlOiAnJS4qcyciKSwgYXJnX2xlbiwgYXJnKTsKKwkJZ290byBsZWF2ZV9tZXJnZTsKKwl9CisKKwlpZiAob3B0cy0+aGF2ZV9zcXVhc2hfb250byAmJgorCSAgICBvaWRlcSgmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsICZvcHRzLT5zcXVhc2hfb250bykpIHsKKwkJLyoKKwkJICogV2hlbiB0aGUgdXNlciB0ZWxscyB1cyB0byAibWVyZ2UiIHNvbWV0aGluZyBpbnRvIGEKKwkJICogIltuZXcgcm9vdF0iLCBsZXQncyBzaW1wbHkgZmFzdC1mb3J3YXJkIHRvIHRoZSBtZXJnZSBoZWFkLgorCQkgKi8KKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJaWYgKHRvX21lcmdlLT5uZXh0KQorCQkJcmV0ID0gZXJyb3IoXygib2N0b3B1cyBtZXJnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gIgorCQkJCSAgICAgICJ0b3Agb2YgYSBbbmV3IHJvb3RdIikpOworCQllbHNlCisJCQlyZXQgPSBmYXN0X2ZvcndhcmRfdG8ociwgJnRvX21lcmdlLT5pdGVtLT5vYmplY3Qub2lkLAorCQkJCQkgICAgICAmaGVhZF9jb21taXQtPm9iamVjdC5vaWQsIDAsCisJCQkJCSAgICAgIG9wdHMpOworCQlnb3RvIGxlYXZlX21lcmdlOworCX0KKworCWlmIChjb21taXQpIHsKKwkJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCQljb25zdCBjaGFyICptZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpOworCQljb25zdCBjaGFyICpib2R5OworCQlpbnQgbGVuOworCisJCWlmICghbWVzc2FnZSkgeworCQkJcmV0ID0gZXJyb3IoXygiY291bGQgbm90IGdldCBjb21taXQgbWVzc2FnZSBvZiAnJXMnIiksCisJCQkJICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCQkJZ290byBsZWF2ZV9tZXJnZTsKKwkJfQorCQl3cml0ZV9hdXRob3Jfc2NyaXB0KG1lc3NhZ2UpOworCQlmaW5kX2NvbW1pdF9zdWJqZWN0KG1lc3NhZ2UsICZib2R5KTsKKwkJbGVuID0gc3RybGVuKGJvZHkpOworCQlyZXQgPSB3cml0ZV9tZXNzYWdlKGJvZHksIGxlbiwgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpLCAwKTsKKwkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIG1lc3NhZ2UpOworCQlpZiAocmV0KSB7CisJCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIpLAorCQkJCSAgICBnaXRfcGF0aF9tZXJnZV9tc2cocikpOworCQkJZ290byBsZWF2ZV9tZXJnZTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWludCBsZW47CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImF1dGhvciAlcyIsIGdpdF9hdXRob3JfaW5mbygwKSk7CisJCXdyaXRlX2F1dGhvcl9zY3JpcHQoYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKworCQlpZiAob25lbGluZV9vZmZzZXQgPCBhcmdfbGVuKSB7CisJCQlwID0gYXJnICsgb25lbGluZV9vZmZzZXQ7CisJCQlsZW4gPSBhcmdfbGVuIC0gb25lbGluZV9vZmZzZXQ7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiTWVyZ2UgJXMgJyUuKnMnIiwKKwkJCQkgICAgdG9fbWVyZ2UtPm5leHQgPyAiYnJhbmNoZXMiIDogImJyYW5jaCIsCisJCQkJICAgIG1lcmdlX2FyZ19sZW4sIGFyZyk7CisJCQlwID0gYnVmLmJ1ZjsKKwkJCWxlbiA9IGJ1Zi5sZW47CisJCX0KKworCQlyZXQgPSB3cml0ZV9tZXNzYWdlKHAsIGxlbiwgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpLCAwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCWlmIChyZXQpIHsKKwkJCWVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSAnJXMnIiksCisJCQkJICAgIGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJCQlnb3RvIGxlYXZlX21lcmdlOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBIRUFEIGlzIG5vdCBpZGVudGljYWwgdG8gdGhlIGZpcnN0IHBhcmVudCBvZiB0aGUgb3JpZ2luYWwgbWVyZ2UKKwkgKiBjb21taXQsIHdlIGNhbm5vdCBmYXN0LWZvcndhcmQuCisJICovCisJY2FuX2Zhc3RfZm9yd2FyZCA9IG9wdHMtPmFsbG93X2ZmICYmIGNvbW1pdCAmJiBjb21taXQtPnBhcmVudHMgJiYKKwkJb2lkZXEoJmNvbW1pdC0+cGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZCwKKwkJICAgICAgJmhlYWRfY29tbWl0LT5vYmplY3Qub2lkKTsKKworCS8qCisJICogSWYgYW55IG1lcmdlIGhlYWQgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgd2UgY2Fubm90CisJICogZmFzdC1mb3J3YXJkLgorCSAqLworCWlmIChjYW5fZmFzdF9mb3J3YXJkKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcCA9IGNvbW1pdC0+cGFyZW50cy0+bmV4dDsKKworCQlmb3IgKGogPSB0b19tZXJnZTsgaiAmJiBwOyBqID0gai0+bmV4dCwgcCA9IHAtPm5leHQpCisJCQlpZiAoIW9pZGVxKCZqLT5pdGVtLT5vYmplY3Qub2lkLAorCQkJCSAgICZwLT5pdGVtLT5vYmplY3Qub2lkKSkgeworCQkJCWNhbl9mYXN0X2ZvcndhcmQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkvKgorCQkgKiBJZiB0aGUgbnVtYmVyIG9mIG1lcmdlIGhlYWRzIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYWwgbWVyZ2UKKwkJICogY29tbWl0LCB3ZSBjYW5ub3QgZmFzdC1mb3J3YXJkLgorCQkgKi8KKwkJaWYgKGogfHwgcCkKKwkJCWNhbl9mYXN0X2ZvcndhcmQgPSAwOworCX0KKworCWlmIChjYW5fZmFzdF9mb3J3YXJkKSB7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCXJldCA9IGZhc3RfZm9yd2FyZF90byhyLCAmY29tbWl0LT5vYmplY3Qub2lkLAorCQkJCSAgICAgICZoZWFkX2NvbW1pdC0+b2JqZWN0Lm9pZCwgMCwgb3B0cyk7CisJCWlmIChmbGFncyAmIFRPRE9fRURJVF9NRVJHRV9NU0cpIHsKKwkJCXJ1bl9jb21taXRfZmxhZ3MgfD0gQU1FTkRfTVNHOworCQkJZ290byBmYXN0X2ZvcndhcmRfZWRpdDsKKwkJfQorCQlnb3RvIGxlYXZlX21lcmdlOworCX0KKworCWlmIChzdHJhdGVneSB8fCB0b19tZXJnZS0+bmV4dCkgeworCQkvKiBPY3RvcHVzIG1lcmdlICovCisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKworCQlpZiAocmVhZF9lbnZfc2NyaXB0KCZjbWQuZW52X2FycmF5KSkgeworCQkJY29uc3QgY2hhciAqZ3BnX29wdCA9IGdwZ19zaWduX29wdF9xdW90ZWQob3B0cyk7CisKKwkJCXJldCA9IGVycm9yKF8oc3RhZ2VkX2NoYW5nZXNfYWR2aWNlKSwgZ3BnX29wdCwgZ3BnX29wdCk7CisJCQlnb3RvIGxlYXZlX21lcmdlOworCQl9CisKKwkJY21kLmdpdF9jbWQgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAibWVyZ2UiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi1zIik7CisJCWlmICghc3RyYXRlZ3kpCisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAib2N0b3B1cyIpOworCQllbHNlIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIHN0cmF0ZWd5KTsKKwkJCWZvciAoayA9IDA7IGsgPCBvcHRzLT54b3B0c19ucjsgaysrKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5hcmdzLAorCQkJCQkJICItWCVzIiwgb3B0cy0+eG9wdHNba10pOworCQl9CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLW5vLWVkaXQiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tbm8tZmYiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tbm8tbG9nIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLW5vLXN0YXQiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi1GIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CisJCWlmIChvcHRzLT5ncGdfc2lnbikKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIG9wdHMtPmdwZ19zaWduKTsKKworCQkvKiBBZGQgdGhlIHRpcHMgdG8gYmUgbWVyZ2VkICovCisJCWZvciAoaiA9IHRvX21lcmdlOyBqOyBqID0gai0+bmV4dCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsCisJCQkJCW9pZF90b19oZXgoJmotPml0ZW0tPm9iamVjdC5vaWQpKTsKKworCQlzdHJidWZfcmVsZWFzZSgmcmVmX25hbWUpOworCQl1bmxpbmsoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwkJcmV0ID0gcnVuX2NvbW1hbmQoJmNtZCk7CisKKwkJLyogZm9yY2UgcmUtcmVhZGluZyBvZiB0aGUgY2FjaGUgKi8KKwkJaWYgKCFyZXQgJiYgKGRpc2NhcmRfaW5kZXgoci0+aW5kZXgpIDwgMCB8fAorCQkJICAgICByZXBvX3JlYWRfaW5kZXgocikgPCAwKSkKKwkJCXJldCA9IGVycm9yKF8oImNvdWxkIG5vdCByZWFkIGluZGV4IikpOworCQlnb3RvIGxlYXZlX21lcmdlOworCX0KKworCW1lcmdlX2NvbW1pdCA9IHRvX21lcmdlLT5pdGVtOworCWJhc2VzID0gZ2V0X21lcmdlX2Jhc2VzKGhlYWRfY29tbWl0LCBtZXJnZV9jb21taXQpOworCWlmIChiYXNlcyAmJiBvaWRlcSgmbWVyZ2VfY29tbWl0LT5vYmplY3Qub2lkLAorCQkJICAgJmJhc2VzLT5pdGVtLT5vYmplY3Qub2lkKSkgeworCQlyZXQgPSAwOworCQkvKiBza2lwIG1lcmdpbmcgYW4gYW5jZXN0b3Igb2YgSEVBRCAqLworCQlnb3RvIGxlYXZlX21lcmdlOworCX0KKworCXdyaXRlX21lc3NhZ2Uob2lkX3RvX2hleCgmbWVyZ2VfY29tbWl0LT5vYmplY3Qub2lkKSwgdGhlX2hhc2hfYWxnby0+aGV4c3osCisJCSAgICAgIGdpdF9wYXRoX21lcmdlX2hlYWQociksIDApOworCXdyaXRlX21lc3NhZ2UoIm5vLWZmIiwgNSwgZ2l0X3BhdGhfbWVyZ2VfbW9kZShyKSwgMCk7CisKKwlmb3IgKGogPSBiYXNlczsgajsgaiA9IGotPm5leHQpCisJCWNvbW1pdF9saXN0X2luc2VydChqLT5pdGVtLCAmcmV2ZXJzZWQpOworCWZyZWVfY29tbWl0X2xpc3QoYmFzZXMpOworCisJcmVwb19yZWFkX2luZGV4KHIpOworCWluaXRfbWVyZ2Vfb3B0aW9ucygmbywgcik7CisJby5icmFuY2gxID0gIkhFQUQiOworCW8uYnJhbmNoMiA9IHJlZl9uYW1lLmJ1ZjsKKwlvLmJ1ZmZlcl9vdXRwdXQgPSAyOworCisJcmV0ID0gbWVyZ2VfcmVjdXJzaXZlKCZvLCBoZWFkX2NvbW1pdCwgbWVyZ2VfY29tbWl0LCByZXZlcnNlZCwgJmkpOworCWlmIChyZXQgPD0gMCkKKwkJZnB1dHMoby5vYnVmLmJ1Ziwgc3Rkb3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmby5vYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnJvcihfKCJjb3VsZCBub3QgZXZlbiBhdHRlbXB0IHRvIG1lcmdlICclLipzJyIpLAorCQkgICAgICBtZXJnZV9hcmdfbGVuLCBhcmcpOworCQlnb3RvIGxlYXZlX21lcmdlOworCX0KKwkvKgorCSAqIFRoZSByZXR1cm4gdmFsdWUgb2YgbWVyZ2VfcmVjdXJzaXZlKCkgaXMgMSBvbiBjbGVhbiwgYW5kIDAgb24KKwkgKiB1bmNsZWFuIG1lcmdlLgorCSAqCisJICogTGV0J3MgcmV2ZXJzZSB0aGF0LCBzbyB0aGF0IGRvX21lcmdlKCkgcmV0dXJucyAwIHVwb24gc3VjY2VzcyBhbmQKKwkgKiAxIHVwb24gZmFpbGVkIG1lcmdlIChrZWVwaW5nIHRoZSByZXR1cm4gdmFsdWUgLTEgZm9yIHRoZSBjYXNlcyB3aGVyZQorCSAqIHdlIHdpbGwgd2FudCB0byByZXNjaGVkdWxlIHRoZSBgbWVyZ2VgIGNvbW1hbmQpLgorCSAqLworCXJldCA9ICFyZXQ7CisKKwlpZiAoci0+aW5kZXgtPmNhY2hlX2NoYW5nZWQgJiYKKwkgICAgd3JpdGVfbG9ja2VkX2luZGV4KHItPmluZGV4LCAmbG9jaywgQ09NTUlUX0xPQ0spKSB7CisJCXJldCA9IGVycm9yKF8oIm1lcmdlOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisJCWdvdG8gbGVhdmVfbWVyZ2U7CisJfQorCisJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwlpZiAocmV0KQorCQlyZXBvX3JlcmVyZShyLCBvcHRzLT5hbGxvd19yZXJlcmVfYXV0byk7CisJZWxzZQorCQkvKgorCQkgKiBJbiBjYXNlIG9mIHByb2JsZW1zLCB3ZSBub3cgd2FudCB0byByZXR1cm4gYSBwb3NpdGl2ZQorCQkgKiB2YWx1ZSAoYSBuZWdhdGl2ZSBvbmUgd291bGQgaW5kaWNhdGUgdGhhdCB0aGUgYG1lcmdlYAorCQkgKiBjb21tYW5kIG5lZWRzIHRvIGJlIHJlc2NoZWR1bGVkKS4KKwkJICovCisJZmFzdF9mb3J3YXJkX2VkaXQ6CisJCXJldCA9ICEhcnVuX2dpdF9jb21taXQociwgZ2l0X3BhdGhfbWVyZ2VfbXNnKHIpLCBvcHRzLAorCQkJCSAgICAgICBydW5fY29tbWl0X2ZsYWdzKTsKKworbGVhdmVfbWVyZ2U6CisJc3RyYnVmX3JlbGVhc2UoJnJlZl9uYW1lKTsKKwlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCWZyZWVfY29tbWl0X2xpc3QodG9fbWVyZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfZmluYWxfZml4dXAoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCWludCBpID0gdG9kb19saXN0LT5jdXJyZW50OworCisJaWYgKCFpc19maXh1cCh0b2RvX2xpc3QtPml0ZW1zW2ldLmNvbW1hbmQpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgrK2kgPCB0b2RvX2xpc3QtPm5yKQorCQlpZiAoaXNfZml4dXAodG9kb19saXN0LT5pdGVtc1tpXS5jb21tYW5kKSkKKwkJCXJldHVybiAwOworCQllbHNlIGlmICghaXNfbm9vcCh0b2RvX2xpc3QtPml0ZW1zW2ldLmNvbW1hbmQpKQorCQkJYnJlYWs7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBlbnVtIHRvZG9fY29tbWFuZCBwZWVrX2NvbW1hbmQoc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LCBpbnQgb2Zmc2V0KQoreworCWludCBpOworCisJZm9yIChpID0gdG9kb19saXN0LT5jdXJyZW50ICsgb2Zmc2V0OyBpIDwgdG9kb19saXN0LT5ucjsgaSsrKQorCQlpZiAoIWlzX25vb3AodG9kb19saXN0LT5pdGVtc1tpXS5jb21tYW5kKSkKKwkJCXJldHVybiB0b2RvX2xpc3QtPml0ZW1zW2ldLmNvbW1hbmQ7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfYXV0b3N0YXNoKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHN0YXNoX3NoYTEgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghcmVhZF9vbmVsaW5lcigmc3Rhc2hfc2hhMSwgcmViYXNlX3BhdGhfYXV0b3N0YXNoKCksIDEpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzdGFzaF9zaGExKTsKKwkJcmV0dXJuIDA7CisJfQorCXN0cmJ1Zl90cmltKCZzdGFzaF9zaGExKTsKKworCWNoaWxkLmdpdF9jbWQgPSAxOworCWNoaWxkLm5vX3N0ZG91dCA9IDE7CisJY2hpbGQubm9fc3RkZXJyID0gMTsKKwlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICJzdGFzaCIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgImFwcGx5Iik7CisJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCBzdGFzaF9zaGExLmJ1Zik7CisJaWYgKCFydW5fY29tbWFuZCgmY2hpbGQpKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiQXBwbGllZCBhdXRvc3Rhc2guXG4iKSk7CisJZWxzZSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHN0b3JlID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCXN0b3JlLmdpdF9jbWQgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJnN0b3JlLmFyZ3MsICJzdGFzaCIpOworCQlhcmd2X2FycmF5X3B1c2goJnN0b3JlLmFyZ3MsICJzdG9yZSIpOworCQlhcmd2X2FycmF5X3B1c2goJnN0b3JlLmFyZ3MsICItbSIpOworCQlhcmd2X2FycmF5X3B1c2goJnN0b3JlLmFyZ3MsICJhdXRvc3Rhc2giKTsKKwkJYXJndl9hcnJheV9wdXNoKCZzdG9yZS5hcmdzLCAiLXEiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZzdG9yZS5hcmdzLCBzdGFzaF9zaGExLmJ1Zik7CisJCWlmIChydW5fY29tbWFuZCgmc3RvcmUpKQorCQkJcmV0ID0gZXJyb3IoXygiY2Fubm90IHN0b3JlICVzIiksIHN0YXNoX3NoYTEuYnVmKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKwkJCQkgICJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorCQkJCSAgIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIgorCQkJCSAgIiBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iKSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnN0YXNoX3NoYTEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJY29uc3QgY2hhciAqc3ViX2FjdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGFjdGlvbl9uYW1lKG9wdHMpKTsKKwlpZiAoc3ViX2FjdGlvbikKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiAoJXMpIiwgc3ViX2FjdGlvbik7CisJaWYgKGZtdCkgeworCQlzdHJidWZfYWRkc3RyKCZidWYsICI6ICIpOworCQlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBhcCk7CisJfQorCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gYnVmLmJ1ZjsKK30KKworc3RhdGljIGludCBydW5fZ2l0X2NoZWNrb3V0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsCisJCQkgICAgY29uc3QgY2hhciAqY29tbWl0LCBjb25zdCBjaGFyICphY3Rpb24pCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCByZXQ7CisKKwljbWQuZ2l0X2NtZCA9IDE7CisKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiY2hlY2tvdXQiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCBjb21taXQpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5lbnZfYXJyYXksIEdJVF9SRUZMT0dfQUNUSU9OICI9JXMiLCBhY3Rpb24pOworCisJaWYgKG9wdHMtPnZlcmJvc2UpCisJCXJldCA9IHJ1bl9jb21tYW5kKCZjbWQpOworCWVsc2UKKwkJcmV0ID0gcnVuX2NvbW1hbmRfc2lsZW50X29uX3N1Y2Nlc3MoJmNtZCk7CisKKwlpZiAoIXJldCkKKwkJZGlzY2FyZF9pbmRleChyLT5pbmRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X29udG8oc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwkJCSBjb25zdCBjaGFyICpvbnRvX25hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9udG8sCisJCQkgY29uc3QgY2hhciAqb3JpZ19oZWFkKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IGNoYXIgKmFjdGlvbiA9IHJlZmxvZ19tZXNzYWdlKG9wdHMsICJzdGFydCIsICJjaGVja291dCAlcyIsIG9udG9fbmFtZSk7CisKKwlpZiAoZ2V0X29pZChvcmlnX2hlYWQsICZvaWQpKQorCQlyZXR1cm4gZXJyb3IoXygiJXM6IG5vdCBhIHZhbGlkIE9JRCIpLCBvcmlnX2hlYWQpOworCisJaWYgKHJ1bl9naXRfY2hlY2tvdXQociwgb3B0cywgb2lkX3RvX2hleChvbnRvKSwgYWN0aW9uKSkgeworCQlhcHBseV9hdXRvc3Rhc2gob3B0cyk7CisJCXNlcXVlbmNlcl9yZW1vdmVfc3RhdGUob3B0cyk7CisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgZGV0YWNoIEhFQUQiKSk7CisJfQorCisJcmV0dXJuIHVwZGF0ZV9yZWYoTlVMTCwgIk9SSUdfSEVBRCIsICZvaWQsIE5VTEwsIDAsIFVQREFURV9SRUZTX01TR19PTl9FUlIpOworfQorCitzdGF0aWMgaW50IHN0b3BwZWRfYXRfaGVhZChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGhlYWQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbWVzc2FnZSBtZXNzYWdlOworCisJaWYgKGdldF9vaWQoIkhFQUQiLCAmaGVhZCkgfHwKKwkgICAgIShjb21taXQgPSBsb29rdXBfY29tbWl0KHIsICZoZWFkKSkgfHwKKwkgICAgcGFyc2VfY29tbWl0KGNvbW1pdCkgfHwgZ2V0X21lc3NhZ2UoY29tbWl0LCAmbWVzc2FnZSkpCisJCWZwcmludGYoc3RkZXJyLCBfKCJTdG9wcGVkIGF0IEhFQURcbiIpKTsKKwllbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlN0b3BwZWQgYXQgJXNcbiIpLCBtZXNzYWdlLmxhYmVsKTsKKwkJZnJlZV9tZXNzYWdlKGNvbW1pdCwgJm1lc3NhZ2UpOworCX0KKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgY29uc3QgY2hhciByZXNjaGVkdWxlZF9hZHZpY2VbXSA9CitOXygiQ291bGQgbm90IGV4ZWN1dGUgdGhlIHRvZG8gY29tbWFuZFxuIgorIlxuIgorIiAgICAlLipzIgorIlxuIgorIkl0IGhhcyBiZWVuIHJlc2NoZWR1bGVkOyBUbyBlZGl0IHRoZSBjb21tYW5kIGJlZm9yZSBjb250aW51aW5nLCBwbGVhc2VcbiIKKyJlZGl0IHRoZSB0b2RvIGxpc3QgZmlyc3Q6XG4iCisiXG4iCisiICAgIGdpdCByZWJhc2UgLS1lZGl0LXRvZG9cbiIKKyIgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXG4iKTsKKworc3RhdGljIGludCBwaWNrX2NvbW1pdHMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQlzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJaW50IHJlcyA9IDAsIHJlc2NoZWR1bGUgPSAwOworCisJc2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OLCBhY3Rpb25fbmFtZShvcHRzKSwgMCk7CisJaWYgKG9wdHMtPmFsbG93X2ZmKQorCQlhc3NlcnQoIShvcHRzLT5zaWdub2ZmIHx8IG9wdHMtPm5vX2NvbW1pdCB8fAorCQkJCW9wdHMtPnJlY29yZF9vcmlnaW4gfHwgb3B0cy0+ZWRpdCkpOworCWlmIChyZWFkX2FuZF9yZWZyZXNoX2NhY2hlKHIsIG9wdHMpKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAodG9kb19saXN0LT5jdXJyZW50IDwgdG9kb19saXN0LT5ucikgeworCQlzdHJ1Y3QgdG9kb19pdGVtICppdGVtID0gdG9kb19saXN0LT5pdGVtcyArIHRvZG9fbGlzdC0+Y3VycmVudDsKKwkJY29uc3QgY2hhciAqYXJnID0gdG9kb19pdGVtX2dldF9hcmcodG9kb19saXN0LCBpdGVtKTsKKwkJaW50IGNoZWNrX3RvZG8gPSAwOworCisJCWlmIChzYXZlX3RvZG8odG9kb19saXN0LCBvcHRzKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKSB7CisJCQlpZiAoaXRlbS0+Y29tbWFuZCAhPSBUT0RPX0NPTU1FTlQpIHsKKwkJCQlGSUxFICpmID0gZm9wZW4ocmViYXNlX3BhdGhfbXNnbnVtKCksICJ3Iik7CisKKwkJCQl0b2RvX2xpc3QtPmRvbmVfbnIrKzsKKworCQkJCWlmIChmKSB7CisJCQkJCWZwcmludGYoZiwgIiVkXG4iLCB0b2RvX2xpc3QtPmRvbmVfbnIpOworCQkJCQlmY2xvc2UoZik7CisJCQkJfQorCQkJCWlmICghb3B0cy0+cXVpZXQpCisJCQkJCWZwcmludGYoc3RkZXJyLCAiUmViYXNpbmcgKCVkLyVkKSVzIiwKKwkJCQkJCXRvZG9fbGlzdC0+ZG9uZV9uciwKKwkJCQkJCXRvZG9fbGlzdC0+dG90YWxfbnIsCisJCQkJCQlvcHRzLT52ZXJib3NlID8gIlxuIiA6ICJcciIpOworCQkJfQorCQkJdW5saW5rKHJlYmFzZV9wYXRoX21lc3NhZ2UoKSk7CisJCQl1bmxpbmsocmViYXNlX3BhdGhfYXV0aG9yX3NjcmlwdCgpKTsKKwkJCXVubGluayhyZWJhc2VfcGF0aF9zdG9wcGVkX3NoYSgpKTsKKwkJCXVubGluayhyZWJhc2VfcGF0aF9hbWVuZCgpKTsKKwkJCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHIpKTsKKwkJCWRlbGV0ZV9yZWYoTlVMTCwgIlJFQkFTRV9IRUFEIiwgTlVMTCwgUkVGX05PX0RFUkVGKTsKKworCQkJaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19CUkVBSykgeworCQkJCWlmICghb3B0cy0+dmVyYm9zZSkKKwkJCQkJdGVybV9jbGVhcl9saW5lKCk7CisJCQkJcmV0dXJuIHN0b3BwZWRfYXRfaGVhZChyKTsKKwkJCX0KKwkJfQorCQlpZiAoaXRlbS0+Y29tbWFuZCA8PSBUT0RPX1NRVUFTSCkgeworCQkJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKQorCQkJCXNldGVudigiR0lUX1JFRkxPR19BQ1RJT04iLCByZWZsb2dfbWVzc2FnZShvcHRzLAorCQkJCQljb21tYW5kX3RvX3N0cmluZyhpdGVtLT5jb21tYW5kKSwgTlVMTCksCisJCQkJCTEpOworCQkJcmVzID0gZG9fcGlja19jb21taXQociwgaXRlbS0+Y29tbWFuZCwgaXRlbS0+Y29tbWl0LAorCQkJCQkgICAgIG9wdHMsIGlzX2ZpbmFsX2ZpeHVwKHRvZG9fbGlzdCksCisJCQkJCSAgICAgJmNoZWNrX3RvZG8pOworCQkJaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmIHJlcyA8IDApIHsKKwkJCQkvKiBSZXNjaGVkdWxlICovCisJCQkJYWR2aXNlKF8ocmVzY2hlZHVsZWRfYWR2aWNlKSwKKwkJCQkgICAgICAgZ2V0X2l0ZW1fbGluZV9sZW5ndGgodG9kb19saXN0LAorCQkJCQkJCSAgICB0b2RvX2xpc3QtPmN1cnJlbnQpLAorCQkJCSAgICAgICBnZXRfaXRlbV9saW5lKHRvZG9fbGlzdCwKKwkJCQkJCSAgICAgdG9kb19saXN0LT5jdXJyZW50KSk7CisJCQkJdG9kb19saXN0LT5jdXJyZW50LS07CisJCQkJaWYgKHNhdmVfdG9kbyh0b2RvX2xpc3QsIG9wdHMpKQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX0VESVQpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBpdGVtLT5jb21taXQ7CisJCQkJaWYgKCFyZXMpIHsKKwkJCQkJaWYgKCFvcHRzLT52ZXJib3NlKQorCQkJCQkJdGVybV9jbGVhcl9saW5lKCk7CisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJXygiU3RvcHBlZCBhdCAlcy4uLiAgJS4qc1xuIiksCisJCQkJCQlzaG9ydF9jb21taXRfbmFtZShjb21taXQpLAorCQkJCQkJaXRlbS0+YXJnX2xlbiwgYXJnKTsKKwkJCQl9CisJCQkJcmV0dXJuIGVycm9yX3dpdGhfcGF0Y2gociwgY29tbWl0LAorCQkJCQlhcmcsIGl0ZW0tPmFyZ19sZW4sIG9wdHMsIHJlcywgIXJlcyk7CisJCQl9CisJCQlpZiAoaXNfcmViYXNlX2kob3B0cykgJiYgIXJlcykKKwkJCQlyZWNvcmRfaW5fcmV3cml0dGVuKCZpdGVtLT5jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCXBlZWtfY29tbWFuZCh0b2RvX2xpc3QsIDEpKTsKKwkJCWlmIChyZXMgJiYgaXNfZml4dXAoaXRlbS0+Y29tbWFuZCkpIHsKKwkJCQlpZiAocmVzID09IDEpCisJCQkJCWludGVuZF90b19hbWVuZCgpOworCQkJCXJldHVybiBlcnJvcl9mYWlsZWRfc3F1YXNoKHIsIGl0ZW0tPmNvbW1pdCwgb3B0cywKKwkJCQkJaXRlbS0+YXJnX2xlbiwgYXJnKTsKKwkJCX0gZWxzZSBpZiAocmVzICYmIGlzX3JlYmFzZV9pKG9wdHMpICYmIGl0ZW0tPmNvbW1pdCkgeworCQkJCWludCB0b19hbWVuZCA9IDA7CisJCQkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJCQkvKgorCQkJCSAqIElmIHdlIGFyZSByZXdvcmRpbmcgYW5kIGhhdmUgZWl0aGVyCisJCQkJICogZmFzdC1mb3J3YXJkZWQgYWxyZWFkeSwgb3IgYXJlIGFib3V0IHRvCisJCQkJICogY3JlYXRlIGEgbmV3IHJvb3QgY29tbWl0LCB3ZSB3YW50IHRvIGFtZW5kLAorCQkJCSAqIG90aGVyd2lzZSB3ZSBkbyBub3QuCisJCQkJICovCisJCQkJaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19SRVdPUkQgJiYKKwkJCQkgICAgIWdldF9vaWQoIkhFQUQiLCAmb2lkKSAmJgorCQkJCSAgICAob2lkZXEoJml0ZW0tPmNvbW1pdC0+b2JqZWN0Lm9pZCwgJm9pZCkgfHwKKwkJCQkgICAgIChvcHRzLT5oYXZlX3NxdWFzaF9vbnRvICYmCisJCQkJICAgICAgb2lkZXEoJm9wdHMtPnNxdWFzaF9vbnRvLCAmb2lkKSkpKQorCQkJCQl0b19hbWVuZCA9IDE7CisKKwkJCQlyZXR1cm4gcmVzIHwgZXJyb3Jfd2l0aF9wYXRjaChyLCBpdGVtLT5jb21taXQsCisJCQkJCQlhcmcsIGl0ZW0tPmFyZ19sZW4sIG9wdHMsCisJCQkJCQlyZXMsIHRvX2FtZW5kKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChpdGVtLT5jb21tYW5kID09IFRPRE9fRVhFQykgeworCQkJY2hhciAqZW5kX29mX2FyZyA9IChjaGFyICopKGFyZyArIGl0ZW0tPmFyZ19sZW4pOworCQkJaW50IHNhdmVkID0gKmVuZF9vZl9hcmc7CisKKwkJCWlmICghb3B0cy0+dmVyYm9zZSkKKwkJCQl0ZXJtX2NsZWFyX2xpbmUoKTsKKwkJCSplbmRfb2ZfYXJnID0gJ1wwJzsKKwkJCXJlcyA9IGRvX2V4ZWMociwgYXJnKTsKKwkJCSplbmRfb2ZfYXJnID0gc2F2ZWQ7CisKKwkJCWlmIChyZXMpIHsKKwkJCQlpZiAob3B0cy0+cmVzY2hlZHVsZV9mYWlsZWRfZXhlYykKKwkJCQkJcmVzY2hlZHVsZSA9IDE7CisJCQl9CisJCQljaGVja190b2RvID0gMTsKKwkJfSBlbHNlIGlmIChpdGVtLT5jb21tYW5kID09IFRPRE9fTEFCRUwpIHsKKwkJCWlmICgocmVzID0gZG9fbGFiZWwociwgYXJnLCBpdGVtLT5hcmdfbGVuKSkpCisJCQkJcmVzY2hlZHVsZSA9IDE7CisJCX0gZWxzZSBpZiAoaXRlbS0+Y29tbWFuZCA9PSBUT0RPX1JFU0VUKSB7CisJCQlpZiAoKHJlcyA9IGRvX3Jlc2V0KHIsIGFyZywgaXRlbS0+YXJnX2xlbiwgb3B0cykpKQorCQkJCXJlc2NoZWR1bGUgPSAxOworCQl9IGVsc2UgaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19NRVJHRSkgeworCQkJaWYgKChyZXMgPSBkb19tZXJnZShyLCBpdGVtLT5jb21taXQsCisJCQkJCSAgICBhcmcsIGl0ZW0tPmFyZ19sZW4sCisJCQkJCSAgICBpdGVtLT5mbGFncywgb3B0cykpIDwgMCkKKwkJCQlyZXNjaGVkdWxlID0gMTsKKwkJCWVsc2UgaWYgKGl0ZW0tPmNvbW1pdCkKKwkJCQlyZWNvcmRfaW5fcmV3cml0dGVuKCZpdGVtLT5jb21taXQtPm9iamVjdC5vaWQsCisJCQkJCQkgICAgcGVla19jb21tYW5kKHRvZG9fbGlzdCwgMSkpOworCQkJaWYgKHJlcyA+IDApCisJCQkJLyogZmFpbGVkIHdpdGggbWVyZ2UgY29uZmxpY3RzICovCisJCQkJcmV0dXJuIGVycm9yX3dpdGhfcGF0Y2gociwgaXRlbS0+Y29tbWl0LAorCQkJCQkJCWFyZywgaXRlbS0+YXJnX2xlbiwKKwkJCQkJCQlvcHRzLCByZXMsIDApOworCQl9IGVsc2UgaWYgKCFpc19ub29wKGl0ZW0tPmNvbW1hbmQpKQorCQkJcmV0dXJuIGVycm9yKF8oInVua25vd24gY29tbWFuZCAlZCIpLCBpdGVtLT5jb21tYW5kKTsKKworCQlpZiAocmVzY2hlZHVsZSkgeworCQkJYWR2aXNlKF8ocmVzY2hlZHVsZWRfYWR2aWNlKSwKKwkJCSAgICAgICBnZXRfaXRlbV9saW5lX2xlbmd0aCh0b2RvX2xpc3QsCisJCQkJCQkgICAgdG9kb19saXN0LT5jdXJyZW50KSwKKwkJCSAgICAgICBnZXRfaXRlbV9saW5lKHRvZG9fbGlzdCwgdG9kb19saXN0LT5jdXJyZW50KSk7CisJCQl0b2RvX2xpc3QtPmN1cnJlbnQtLTsKKwkJCWlmIChzYXZlX3RvZG8odG9kb19saXN0LCBvcHRzKSkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoaXRlbS0+Y29tbWl0KQorCQkJCXJldHVybiBlcnJvcl93aXRoX3BhdGNoKHIsCisJCQkJCQkJaXRlbS0+Y29tbWl0LAorCQkJCQkJCWFyZywgaXRlbS0+YXJnX2xlbiwKKwkJCQkJCQlvcHRzLCByZXMsIDApOworCQl9IGVsc2UgaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmIGNoZWNrX3RvZG8gJiYgIXJlcykgeworCQkJc3RydWN0IHN0YXQgc3Q7CisKKwkJCWlmIChzdGF0KGdldF90b2RvX3BhdGgob3B0cyksICZzdCkpIHsKKwkJCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgc3RhdCAnJXMnIiksCisJCQkJCQkgIGdldF90b2RvX3BhdGgob3B0cykpOworCQkJfSBlbHNlIGlmIChtYXRjaF9zdGF0X2RhdGEoJnRvZG9fbGlzdC0+c3RhdCwgJnN0KSkgeworCQkJCS8qIFJlcmVhZCB0aGUgdG9kbyBmaWxlIGlmIGl0IGhhcyBjaGFuZ2VkLiAqLworCQkJCXRvZG9fbGlzdF9yZWxlYXNlKHRvZG9fbGlzdCk7CisJCQkJaWYgKHJlYWRfcG9wdWxhdGVfdG9kbyhyLCB0b2RvX2xpc3QsIG9wdHMpKQorCQkJCQlyZXMgPSAtMTsgLyogbWVzc2FnZSB3YXMgcHJpbnRlZCAqLworCQkJCS8qIGBjdXJyZW50YCB3aWxsIGJlIGluY3JlbWVudGVkIGJlbG93ICovCisJCQkJdG9kb19saXN0LT5jdXJyZW50ID0gLTE7CisJCQl9CisJCX0KKworCQl0b2RvX2xpc3QtPmN1cnJlbnQrKzsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisJfQorCisJaWYgKGlzX3JlYmFzZV9pKG9wdHMpKSB7CisJCXN0cnVjdCBzdHJidWYgaGVhZF9yZWYgPSBTVFJCVUZfSU5JVCwgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCS8qIFN0b3BwZWQgaW4gdGhlIG1pZGRsZSwgYXMgcGxhbm5lZD8gKi8KKwkJaWYgKHRvZG9fbGlzdC0+Y3VycmVudCA8IHRvZG9fbGlzdC0+bnIpCisJCQlyZXR1cm4gMDsKKworCQlpZiAocmVhZF9vbmVsaW5lcigmaGVhZF9yZWYsIHJlYmFzZV9wYXRoX2hlYWRfbmFtZSgpLCAwKSAmJgorCQkJCXN0YXJ0c193aXRoKGhlYWRfcmVmLmJ1ZiwgInJlZnMvIikpIHsKKwkJCWNvbnN0IGNoYXIgKm1zZzsKKwkJCXN0cnVjdCBvYmplY3RfaWQgaGVhZCwgb3JpZzsKKwkJCWludCByZXM7CisKKwkJCWlmIChnZXRfb2lkKCJIRUFEIiwgJmhlYWQpKSB7CisJCQkJcmVzID0gZXJyb3IoXygiY2Fubm90IHJlYWQgSEVBRCIpKTsKK2NsZWFudXBfaGVhZF9yZWY6CisJCQkJc3RyYnVmX3JlbGVhc2UoJmhlYWRfcmVmKTsKKwkJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJCQlyZXR1cm4gcmVzOworCQkJfQorCQkJaWYgKCFyZWFkX29uZWxpbmVyKCZidWYsIHJlYmFzZV9wYXRoX29yaWdfaGVhZCgpLCAwKSB8fAorCQkJCQlnZXRfb2lkX2hleChidWYuYnVmLCAmb3JpZykpIHsKKwkJCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBvcmlnLWhlYWQiKSk7CisJCQkJZ290byBjbGVhbnVwX2hlYWRfcmVmOworCQkJfQorCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJaWYgKCFyZWFkX29uZWxpbmVyKCZidWYsIHJlYmFzZV9wYXRoX29udG8oKSwgMCkpIHsKKwkJCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCAnb250byciKSk7CisJCQkJZ290byBjbGVhbnVwX2hlYWRfcmVmOworCQkJfQorCQkJbXNnID0gcmVmbG9nX21lc3NhZ2Uob3B0cywgImZpbmlzaCIsICIlcyBvbnRvICVzIiwKKwkJCQloZWFkX3JlZi5idWYsIGJ1Zi5idWYpOworCQkJaWYgKHVwZGF0ZV9yZWYobXNnLCBoZWFkX3JlZi5idWYsICZoZWFkLCAmb3JpZywKKwkJCQkgICAgICAgUkVGX05PX0RFUkVGLCBVUERBVEVfUkVGU19NU0dfT05fRVJSKSkgeworCQkJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCB1cGRhdGUgJXMiKSwKKwkJCQkJaGVhZF9yZWYuYnVmKTsKKwkJCQlnb3RvIGNsZWFudXBfaGVhZF9yZWY7CisJCQl9CisJCQltc2cgPSByZWZsb2dfbWVzc2FnZShvcHRzLCAiZmluaXNoIiwgInJldHVybmluZyB0byAlcyIsCisJCQkJaGVhZF9yZWYuYnVmKTsKKwkJCWlmIChjcmVhdGVfc3ltcmVmKCJIRUFEIiwgaGVhZF9yZWYuYnVmLCBtc2cpKSB7CisJCQkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHVwZGF0ZSBIRUFEIHRvICVzIiksCisJCQkJCWhlYWRfcmVmLmJ1Zik7CisJCQkJZ290byBjbGVhbnVwX2hlYWRfcmVmOworCQkJfQorCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQl9CisKKwkJaWYgKG9wdHMtPnZlcmJvc2UpIHsKKwkJCXN0cnVjdCByZXZfaW5mbyBsb2dfdHJlZV9vcHQ7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9yaWcsIGhlYWQ7CisKKwkJCW1lbXNldCgmbG9nX3RyZWVfb3B0LCAwLCBzaXplb2YobG9nX3RyZWVfb3B0KSk7CisJCQlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZsb2dfdHJlZV9vcHQsIE5VTEwpOworCQkJbG9nX3RyZWVfb3B0LmRpZmYgPSAxOworCQkJbG9nX3RyZWVfb3B0LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9CisJCQkJRElGRl9GT1JNQVRfRElGRlNUQVQ7CisJCQlsb2dfdHJlZV9vcHQuZGlzYWJsZV9zdGRpbiA9IDE7CisKKwkJCWlmIChyZWFkX29uZWxpbmVyKCZidWYsIHJlYmFzZV9wYXRoX29yaWdfaGVhZCgpLCAwKSAmJgorCQkJICAgICFnZXRfb2lkKGJ1Zi5idWYsICZvcmlnKSAmJgorCQkJICAgICFnZXRfb2lkKCJIRUFEIiwgJmhlYWQpKSB7CisJCQkJZGlmZl90cmVlX29pZCgmb3JpZywgJmhlYWQsICIiLAorCQkJCQkgICAgICAmbG9nX3RyZWVfb3B0LmRpZmZvcHQpOworCQkJCWxvZ190cmVlX2RpZmZfZmx1c2goJmxvZ190cmVlX29wdCk7CisJCQl9CisJCX0KKwkJZmx1c2hfcmV3cml0dGVuX3BlbmRpbmcoKTsKKwkJaWYgKCFzdGF0KHJlYmFzZV9wYXRoX3Jld3JpdHRlbl9saXN0KCksICZzdCkgJiYKKwkJCQlzdC5zdF9zaXplID4gMCkgeworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCQljb25zdCBjaGFyICpwb3N0X3Jld3JpdGVfaG9vayA9CisJCQkJZmluZF9ob29rKCJwb3N0LXJld3JpdGUiKTsKKworCQkJY2hpbGQuaW4gPSBvcGVuKHJlYmFzZV9wYXRoX3Jld3JpdHRlbl9saXN0KCksIE9fUkRPTkxZKTsKKwkJCWNoaWxkLmdpdF9jbWQgPSAxOworCQkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC5hcmdzLCAibm90ZXMiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgImNvcHkiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIi0tZm9yLXJld3JpdGU9cmViYXNlIik7CisJCQkvKiB3ZSBkb24ndCBjYXJlIGlmIHRoaXMgY29weWluZyBmYWlsZWQgKi8KKwkJCXJ1bl9jb21tYW5kKCZjaGlsZCk7CisKKwkJCWlmIChwb3N0X3Jld3JpdGVfaG9vaykgeworCQkJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGhvb2sgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJCQlob29rLmluID0gb3BlbihyZWJhc2VfcGF0aF9yZXdyaXR0ZW5fbGlzdCgpLAorCQkJCQlPX1JET05MWSk7CisJCQkJaG9vay5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwkJCQlob29rLnRyYWNlMl9ob29rX25hbWUgPSAicG9zdC1yZXdyaXRlIjsKKwkJCQlhcmd2X2FycmF5X3B1c2goJmhvb2suYXJncywgcG9zdF9yZXdyaXRlX2hvb2spOworCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmaG9vay5hcmdzLCAicmViYXNlIik7CisJCQkJLyogd2UgZG9uJ3QgY2FyZSBpZiB0aGlzIGhvb2sgZmFpbGVkICovCisJCQkJcnVuX2NvbW1hbmQoJmhvb2spOworCQkJfQorCQl9CisJCWFwcGx5X2F1dG9zdGFzaChvcHRzKTsKKworCQlpZiAoIW9wdHMtPnF1aWV0KSB7CisJCQlpZiAoIW9wdHMtPnZlcmJvc2UpCisJCQkJdGVybV9jbGVhcl9saW5lKCk7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJXMuXG4iLAorCQkJCWhlYWRfcmVmLmJ1Zik7CisJCX0KKworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmhlYWRfcmVmKTsKKwl9CisKKwkvKgorCSAqIFNlcXVlbmNlIG9mIHBpY2tzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseTsgY2xlYW51cCBieQorCSAqIHJlbW92aW5nIHRoZSAuZ2l0L3NlcXVlbmNlciBkaXJlY3RvcnkKKwkgKi8KKwlyZXR1cm4gc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShvcHRzKTsKK30KKworc3RhdGljIGludCBjb250aW51ZV9zaW5nbGVfcGljayhzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwljb25zdCBjaGFyICphcmd2W10gPSB7ICJjb21taXQiLCBOVUxMIH07CisKKwlpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocikpICYmCisJICAgICFmaWxlX2V4aXN0cyhnaXRfcGF0aF9yZXZlcnRfaGVhZChyKSkpCisJCXJldHVybiBlcnJvcihfKCJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiKSk7CisJcmV0dXJuIHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9HSVRfQ01EKTsKK30KKworc3RhdGljIGludCBjb21taXRfc3RhZ2VkX2NoYW5nZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwkJCQkgc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IEFMTE9XX0VNUFRZIHwgRURJVF9NU0c7CisJdW5zaWduZWQgaW50IGZpbmFsX2ZpeHVwID0gMCwgaXNfY2xlYW47CisKKwlpZiAoaGFzX3Vuc3RhZ2VkX2NoYW5nZXMociwgMSkpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIpKTsKKworCWlzX2NsZWFuID0gIWhhc191bmNvbW1pdHRlZF9jaGFuZ2VzKHIsIDApOworCisJaWYgKGZpbGVfZXhpc3RzKHJlYmFzZV9wYXRoX2FtZW5kKCkpKSB7CisJCXN0cnVjdCBzdHJidWYgcmV2ID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBvYmplY3RfaWQgaGVhZCwgdG9fYW1lbmQ7CisKKwkJaWYgKGdldF9vaWQoIkhFQUQiLCAmaGVhZCkpCisJCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGFtZW5kIG5vbi1leGlzdGluZyBjb21taXQiKSk7CisJCWlmICghcmVhZF9vbmVsaW5lcigmcmV2LCByZWJhc2VfcGF0aF9hbWVuZCgpLCAwKSkKKwkJCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIGZpbGU6ICclcyciKSwgcmViYXNlX3BhdGhfYW1lbmQoKSk7CisJCWlmIChnZXRfb2lkX2hleChyZXYuYnVmLCAmdG9fYW1lbmQpKQorCQkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgY29udGVudHM6ICclcyciKSwKKwkJCQlyZWJhc2VfcGF0aF9hbWVuZCgpKTsKKwkJaWYgKCFpc19jbGVhbiAmJiAhb2lkZXEoJmhlYWQsICZ0b19hbWVuZCkpCisJCQlyZXR1cm4gZXJyb3IoXygiXG5Zb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgIgorCQkJCSAgICAgICAid29ya2luZyB0cmVlLiBQbGVhc2UsIGNvbW1pdCB0aGVtXG4iCisJCQkJICAgICAgICJmaXJzdCBhbmQgdGhlbiBydW4gJ2dpdCByZWJhc2UgIgorCQkJCSAgICAgICAiLS1jb250aW51ZScgYWdhaW4uIikpOworCQkvKgorCQkgKiBXaGVuIHNraXBwaW5nIGEgZmFpbGVkIGZpeHVwL3NxdWFzaCwgd2UgbmVlZCB0byBlZGl0IHRoZQorCQkgKiBjb21taXQgbWVzc2FnZSwgdGhlIGN1cnJlbnQgZml4dXAgbGlzdCBhbmQgY291bnQsIGFuZCBpZiBpdAorCQkgKiB3YXMgdGhlIGxhc3QgZml4dXAvc3F1YXNoIGluIHRoZSBjaGFpbiwgd2UgbmVlZCB0byBjbGVhbiB1cAorCQkgKiB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIGlmIHRoZXJlIHdhcyBhIHNxdWFzaCwgbGV0IHRoZSB1c2VyCisJCSAqIGVkaXQgaXQuCisJCSAqLworCQlpZiAoIWlzX2NsZWFuIHx8ICFvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50KQorCQkJOyAvKiB0aGlzIGlzIG5vdCB0aGUgZmluYWwgZml4dXAgKi8KKwkJZWxzZSBpZiAoIW9pZGVxKCZoZWFkLCAmdG9fYW1lbmQpIHx8CisJCQkgIWZpbGVfZXhpc3RzKHJlYmFzZV9wYXRoX3N0b3BwZWRfc2hhKCkpKSB7CisJCQkvKiB3YXMgYSBmaW5hbCBmaXh1cCBvciBzcXVhc2ggZG9uZSBtYW51YWxseT8gKi8KKwkJCWlmICghaXNfZml4dXAocGVla19jb21tYW5kKHRvZG9fbGlzdCwgMCkpKSB7CisJCQkJdW5saW5rKHJlYmFzZV9wYXRoX2ZpeHVwX21zZygpKTsKKwkJCQl1bmxpbmsocmViYXNlX3BhdGhfc3F1YXNoX21zZygpKTsKKwkJCQl1bmxpbmsocmViYXNlX3BhdGhfY3VycmVudF9maXh1cHMoKSk7CisJCQkJc3RyYnVmX3Jlc2V0KCZvcHRzLT5jdXJyZW50X2ZpeHVwcyk7CisJCQkJb3B0cy0+Y3VycmVudF9maXh1cF9jb3VudCA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB3ZSBhcmUgaW4gYSBmaXh1cC9zcXVhc2ggY2hhaW4gKi8KKwkJCWNvbnN0IGNoYXIgKnAgPSBvcHRzLT5jdXJyZW50X2ZpeHVwcy5idWY7CisJCQlpbnQgbGVuID0gb3B0cy0+Y3VycmVudF9maXh1cHMubGVuOworCisJCQlvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50LS07CisJCQlpZiAoIWxlbikKKwkJCQlCVUcoIkluY29ycmVjdCBjdXJyZW50X2ZpeHVwczpcbiVzIiwgcCk7CisJCQl3aGlsZSAobGVuICYmIHBbbGVuIC0gMV0gIT0gJ1xuJykKKwkJCQlsZW4tLTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJm9wdHMtPmN1cnJlbnRfZml4dXBzLCBsZW4pOworCQkJaWYgKHdyaXRlX21lc3NhZ2UocCwgbGVuLCByZWJhc2VfcGF0aF9jdXJyZW50X2ZpeHVwcygpLAorCQkJCQkgIDApIDwgMCkKKwkJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGZpbGU6ICclcyciKSwKKwkJCQkJICAgICByZWJhc2VfcGF0aF9jdXJyZW50X2ZpeHVwcygpKTsKKworCQkJLyoKKwkJCSAqIElmIGEgZml4dXAvc3F1YXNoIGluIGEgZml4dXAvc3F1YXNoIGNoYWluIGZhaWxlZCwgdGhlCisJCQkgKiBjb21taXQgbWVzc2FnZSBpcyBhbHJlYWR5IGNvcnJlY3QsIG5vIG5lZWQgdG8gY29tbWl0CisJCQkgKiBpdCBhZ2Fpbi4KKwkJCSAqCisJCQkgKiBPbmx5IGlmIGl0IGlzIHRoZSBmaW5hbCBjb21tYW5kIGluIHRoZSBmaXh1cC9zcXVhc2gKKwkJCSAqIGNoYWluLCBhbmQgb25seSBpZiB0aGUgY2hhaW4gaXMgbG9uZ2VyIHRoYW4gYSBzaW5nbGUKKwkJCSAqIGZpeHVwL3NxdWFzaCBjb21tYW5kICh3aGljaCB3YXMganVzdCBza2lwcGVkKSwgZG8gd2UKKwkJCSAqIGFjdHVhbGx5IG5lZWQgdG8gcmUtY29tbWl0IHdpdGggYSBjbGVhbmVkIHVwIGNvbW1pdAorCQkJICogbWVzc2FnZS4KKwkJCSAqLworCQkJaWYgKG9wdHMtPmN1cnJlbnRfZml4dXBfY291bnQgPiAwICYmCisJCQkgICAgIWlzX2ZpeHVwKHBlZWtfY29tbWFuZCh0b2RvX2xpc3QsIDApKSkgeworCQkJCWZpbmFsX2ZpeHVwID0gMTsKKwkJCQkvKgorCQkJCSAqIElmIHRoZXJlIHdhcyBub3QgYSBzaW5nbGUgInNxdWFzaCIgaW4gdGhlCisJCQkJICogY2hhaW4sIHdlIG9ubHkgbmVlZCB0byBjbGVhbiB1cCB0aGUgY29tbWl0CisJCQkJICogbWVzc2FnZSwgbm8gbmVlZCB0byBib3RoZXIgdGhlIHVzZXIgd2l0aAorCQkJCSAqIG9wZW5pbmcgdGhlIGNvbW1pdCBtZXNzYWdlIGluIHRoZSBlZGl0b3IuCisJCQkJICovCisJCQkJaWYgKCFzdGFydHNfd2l0aChwLCAic3F1YXNoICIpICYmCisJCQkJICAgICFzdHJzdHIocCwgIlxuc3F1YXNoICIpKQorCQkJCQlmbGFncyA9IChmbGFncyAmIH5FRElUX01TRykgfCBDTEVBTlVQX01TRzsKKwkJCX0gZWxzZSBpZiAoaXNfZml4dXAocGVla19jb21tYW5kKHRvZG9fbGlzdCwgMCkpKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3F1YXNoIG1lc3NhZ2UgdG8gc2tpcAorCQkJCSAqIHRoZSBsYXRlc3QgY29tbWl0IG1lc3NhZ2UuCisJCQkJICovCisJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQkJCWNvbnN0IGNoYXIgKnBhdGggPSByZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCk7CisJCQkJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCisJCQkJaWYgKHBhcnNlX2hlYWQociwgJmNvbW1pdCkgfHwKKwkJCQkgICAgIShwID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpKSB8fAorCQkJCSAgICB3cml0ZV9tZXNzYWdlKHAsIHN0cmxlbihwKSwgcGF0aCwgMCkpIHsKKwkJCQkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIHApOworCQkJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGZpbGU6ICIKKwkJCQkJCSAgICAgICAiJyVzJyIpLCBwYXRoKTsKKwkJCQl9CisJCQkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIHApOworCQkJfQorCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJnJldik7CisJCWZsYWdzIHw9IEFNRU5EX01TRzsKKwl9CisKKwlpZiAoaXNfY2xlYW4pIHsKKwkJY29uc3QgY2hhciAqY2hlcnJ5X3BpY2tfaGVhZCA9IGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQocik7CisKKwkJaWYgKGZpbGVfZXhpc3RzKGNoZXJyeV9waWNrX2hlYWQpICYmIHVubGluayhjaGVycnlfcGlja19oZWFkKSkKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVtb3ZlIENIRVJSWV9QSUNLX0hFQUQiKSk7CisJCWlmICghZmluYWxfZml4dXApCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocnVuX2dpdF9jb21taXQociwgZmluYWxfZml4dXAgPyBOVUxMIDogcmViYXNlX3BhdGhfbWVzc2FnZSgpLAorCQkJICAgb3B0cywgZmxhZ3MpKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iKSk7CisJdW5saW5rKHJlYmFzZV9wYXRoX2FtZW5kKCkpOworCXVubGluayhnaXRfcGF0aF9tZXJnZV9oZWFkKHIpKTsKKwlpZiAoZmluYWxfZml4dXApIHsKKwkJdW5saW5rKHJlYmFzZV9wYXRoX2ZpeHVwX21zZygpKTsKKwkJdW5saW5rKHJlYmFzZV9wYXRoX3NxdWFzaF9tc2coKSk7CisJfQorCWlmIChvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ID4gMCkgeworCQkvKgorCQkgKiBXaGV0aGVyIGZpbmFsIGZpeHVwIG9yIG5vdCwgd2UganVzdCBjbGVhbmVkIHVwIHRoZSBjb21taXQKKwkJICogbWVzc2FnZS4uLgorCQkgKi8KKwkJdW5saW5rKHJlYmFzZV9wYXRoX2N1cnJlbnRfZml4dXBzKCkpOworCQlzdHJidWZfcmVzZXQoJm9wdHMtPmN1cnJlbnRfZml4dXBzKTsKKwkJb3B0cy0+Y3VycmVudF9maXh1cF9jb3VudCA9IDA7CisJfQorCXJldHVybiAwOworfQorCitpbnQgc2VxdWVuY2VyX2NvbnRpbnVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IHRvZG9fbGlzdCB0b2RvX2xpc3QgPSBUT0RPX0xJU1RfSU5JVDsKKwlpbnQgcmVzOworCisJaWYgKHJlYWRfYW5kX3JlZnJlc2hfY2FjaGUociwgb3B0cykpCisJCXJldHVybiAtMTsKKworCWlmIChyZWFkX3BvcHVsYXRlX29wdHMob3B0cykpCisJCXJldHVybiAtMTsKKwlpZiAoaXNfcmViYXNlX2kob3B0cykpIHsKKwkJaWYgKChyZXMgPSByZWFkX3BvcHVsYXRlX3RvZG8ociwgJnRvZG9fbGlzdCwgb3B0cykpKQorCQkJZ290byByZWxlYXNlX3RvZG9fbGlzdDsKKworCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfZHJvcHBlZCgpKSkgeworCQkJaWYgKChyZXMgPSB0b2RvX2xpc3RfY2hlY2tfYWdhaW5zdF9iYWNrdXAociwgJnRvZG9fbGlzdCkpKQorCQkJCWdvdG8gcmVsZWFzZV90b2RvX2xpc3Q7CisKKwkJCXVubGluayhyZWJhc2VfcGF0aF9kcm9wcGVkKCkpOworCQl9CisKKwkJaWYgKGNvbW1pdF9zdGFnZWRfY2hhbmdlcyhyLCBvcHRzLCAmdG9kb19saXN0KSkgeworCQkJcmVzID0gLTE7CisJCQlnb3RvIHJlbGVhc2VfdG9kb19saXN0OworCQl9CisJfSBlbHNlIGlmICghZmlsZV9leGlzdHMoZ2V0X3RvZG9fcGF0aChvcHRzKSkpCisJCXJldHVybiBjb250aW51ZV9zaW5nbGVfcGljayhyKTsKKwllbHNlIGlmICgocmVzID0gcmVhZF9wb3B1bGF0ZV90b2RvKHIsICZ0b2RvX2xpc3QsIG9wdHMpKSkKKwkJZ290byByZWxlYXNlX3RvZG9fbGlzdDsKKworCWlmICghaXNfcmViYXNlX2kob3B0cykpIHsKKwkJLyogVmVyaWZ5IHRoYXQgdGhlIGNvbmZsaWN0IGhhcyBiZWVuIHJlc29sdmVkICovCisJCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHIpKSB8fAorCQkgICAgZmlsZV9leGlzdHMoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQocikpKSB7CisJCQlyZXMgPSBjb250aW51ZV9zaW5nbGVfcGljayhyKTsKKwkJCWlmIChyZXMpCisJCQkJZ290byByZWxlYXNlX3RvZG9fbGlzdDsKKwkJfQorCQlpZiAoaW5kZXhfZGlmZmVyc19mcm9tKHIsICJIRUFEIiwgTlVMTCwgMCkpIHsKKwkJCXJlcyA9IGVycm9yX2RpcnR5X2luZGV4KHIsIG9wdHMpOworCQkJZ290byByZWxlYXNlX3RvZG9fbGlzdDsKKwkJfQorCQl0b2RvX2xpc3QuY3VycmVudCsrOworCX0gZWxzZSBpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfc3RvcHBlZF9zaGEoKSkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJaWYgKHJlYWRfb25lbGluZXIoJmJ1ZiwgcmViYXNlX3BhdGhfc3RvcHBlZF9zaGEoKSwgMSkgJiYKKwkJICAgICFnZXRfb2lkX2NvbW1pdHRpc2goYnVmLmJ1ZiwgJm9pZCkpCisJCQlyZWNvcmRfaW5fcmV3cml0dGVuKCZvaWQsIHBlZWtfY29tbWFuZCgmdG9kb19saXN0LCAwKSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKworCXJlcyA9IHBpY2tfY29tbWl0cyhyLCAmdG9kb19saXN0LCBvcHRzKTsKK3JlbGVhc2VfdG9kb19saXN0OgorCXRvZG9fbGlzdF9yZWxlYXNlKCZ0b2RvX2xpc3QpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2luZ2xlX3BpY2soc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICpjbWl0LAorCQkgICAgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWludCBjaGVja190b2RvOworCisJc2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OLCBhY3Rpb25fbmFtZShvcHRzKSwgMCk7CisJcmV0dXJuIGRvX3BpY2tfY29tbWl0KHIsIG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUElDSyA/CisJCQkgICAgICBUT0RPX1BJQ0sgOiBUT0RPX1JFVkVSVCwgY21pdCwgb3B0cywgMCwKKwkJCSAgICAgICZjaGVja190b2RvKTsKK30KKworaW50IHNlcXVlbmNlcl9waWNrX3JldmlzaW9ucyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCB0b2RvX2xpc3QgdG9kb19saXN0ID0gVE9ET19MSVNUX0lOSVQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGksIHJlczsKKworCWFzc2VydChvcHRzLT5yZXZzKTsKKwlpZiAocmVhZF9hbmRfcmVmcmVzaF9jYWNoZShyLCBvcHRzKSkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IG9wdHMtPnJldnMtPnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY29uc3QgY2hhciAqbmFtZSA9IG9wdHMtPnJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lOworCisJCS8qIFRoaXMgaGFwcGVucyB3aGVuIHVzaW5nIC0tc3RkaW4uICovCisJCWlmICghc3RybGVuKG5hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFnZXRfb2lkKG5hbWUsICZvaWQpKSB7CisJCQlpZiAoIWxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyLCAmb2lkLCAxKSkgeworCQkJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhyLAorCQkJCQkJCQkJJm9pZCwKKwkJCQkJCQkJCU5VTEwpOworCQkJCXJldHVybiBlcnJvcihfKCIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIpLAorCQkJCQluYW1lLCB0eXBlX25hbWUodHlwZSkpOworCQkJfQorCQl9IGVsc2UKKwkJCXJldHVybiBlcnJvcihfKCIlczogYmFkIHJldmlzaW9uIiksIG5hbWUpOworCX0KKworCS8qCisJICogSWYgd2Ugd2VyZSBjYWxsZWQgYXMgImdpdCBjaGVycnktcGljayA8Y29tbWl0PiIsIGp1c3QKKwkgKiBjaGVycnktcGljay9yZXZlcnQgaXQsIHNldCBDSEVSUllfUElDS19IRUFEIC8KKwkgKiBSRVZFUlRfSEVBRCwgYW5kIGRvbid0IHRvdWNoIHRoZSBzZXF1ZW5jZXIgc3RhdGUuCisJICogVGhpcyBtZWFucyBpdCBpcyBwb3NzaWJsZSB0byBjaGVycnktcGljayBpbiB0aGUgbWlkZGxlCisJICogb2YgYSBjaGVycnktcGljayBzZXF1ZW5jZS4KKwkgKi8KKwlpZiAob3B0cy0+cmV2cy0+Y21kbGluZS5uciA9PSAxICYmCisJICAgIG9wdHMtPnJldnMtPmNtZGxpbmUucmV2LT53aGVuY2UgPT0gUkVWX0NNRF9SRVYgJiYKKwkgICAgb3B0cy0+cmV2cy0+bm9fd2FsayAmJgorCSAgICAhb3B0cy0+cmV2cy0+Y21kbGluZS5yZXYtPmZsYWdzKSB7CisJCXN0cnVjdCBjb21taXQgKmNtaXQ7CisJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsob3B0cy0+cmV2cykpCisJCQlyZXR1cm4gZXJyb3IoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisJCWNtaXQgPSBnZXRfcmV2aXNpb24ob3B0cy0+cmV2cyk7CisJCWlmICghY21pdCkKKwkJCXJldHVybiBlcnJvcihfKCJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIpKTsKKwkJaWYgKGdldF9yZXZpc2lvbihvcHRzLT5yZXZzKSkKKwkJCUJVRygidW5leHBlY3RlZCBleHRyYSBjb21taXQgZnJvbSB3YWxrIik7CisJCXJldHVybiBzaW5nbGVfcGljayhyLCBjbWl0LCBvcHRzKTsKKwl9CisKKwkvKgorCSAqIFN0YXJ0IGEgbmV3IGNoZXJyeS1waWNrLyByZXZlcnQgc2VxdWVuY2U7IGJ1dAorCSAqIGZpcnN0LCBtYWtlIHN1cmUgdGhhdCBhbiBleGlzdGluZyBvbmUgaXNuJ3QgaW4KKwkgKiBwcm9ncmVzcworCSAqLworCisJaWYgKHdhbGtfcmV2c19wb3B1bGF0ZV90b2RvKCZ0b2RvX2xpc3QsIG9wdHMpIHx8CisJCQljcmVhdGVfc2VxX2RpcihyKSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoZ2V0X29pZCgiSEVBRCIsICZvaWQpICYmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCkpCisJCXJldHVybiBlcnJvcihfKCJjYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiKSk7CisJaWYgKHNhdmVfaGVhZChvaWRfdG9faGV4KCZvaWQpKSkKKwkJcmV0dXJuIC0xOworCWlmIChzYXZlX29wdHMob3B0cykpCisJCXJldHVybiAtMTsKKwl1cGRhdGVfYWJvcnRfc2FmZXR5X2ZpbGUoKTsKKwlyZXMgPSBwaWNrX2NvbW1pdHMociwgJnRvZG9fbGlzdCwgb3B0cyk7CisJdG9kb19saXN0X3JlbGVhc2UoJnRvZG9fbGlzdCk7CisJcmV0dXJuIHJlczsKK30KKwordm9pZCBhcHBlbmRfc2lnbm9mZihzdHJ1Y3Qgc3RyYnVmICptc2didWYsIHNpemVfdCBpZ25vcmVfZm9vdGVyLCB1bnNpZ25lZCBmbGFnKQoreworCXVuc2lnbmVkIG5vX2R1cF9zb2IgPSBmbGFnICYgQVBQRU5EX1NJR05PRkZfREVEVVA7CisJc3RydWN0IHN0cmJ1ZiBzb2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaGFzX2Zvb3RlcjsKKworCXN0cmJ1Zl9hZGRzdHIoJnNvYiwgc2lnbl9vZmZfaGVhZGVyKTsKKwlzdHJidWZfYWRkc3RyKCZzb2IsIGZtdF9uYW1lKFdBTlRfQ09NTUlUVEVSX0lERU5UKSk7CisJc3RyYnVmX2FkZGNoKCZzb2IsICdcbicpOworCisJaWYgKCFpZ25vcmVfZm9vdGVyKQorCQlzdHJidWZfY29tcGxldGVfbGluZShtc2didWYpOworCisJLyoKKwkgKiBJZiB0aGUgd2hvbGUgbWVzc2FnZSBidWZmZXIgaXMgZXF1YWwgdG8gdGhlIHNvYiwgcHJldGVuZCB0aGF0IHdlCisJICogZm91bmQgYSBjb25mb3JtaW5nIGZvb3RlciB3aXRoIGEgbWF0Y2hpbmcgc29iCisJICovCisJaWYgKG1zZ2J1Zi0+bGVuIC0gaWdub3JlX2Zvb3RlciA9PSBzb2IubGVuICYmCisJICAgICFzdHJuY21wKG1zZ2J1Zi0+YnVmLCBzb2IuYnVmLCBzb2IubGVuKSkKKwkJaGFzX2Zvb3RlciA9IDM7CisJZWxzZQorCQloYXNfZm9vdGVyID0gaGFzX2NvbmZvcm1pbmdfZm9vdGVyKG1zZ2J1ZiwgJnNvYiwgaWdub3JlX2Zvb3Rlcik7CisKKwlpZiAoIWhhc19mb290ZXIpIHsKKwkJY29uc3QgY2hhciAqYXBwZW5kX25ld2xpbmVzID0gTlVMTDsKKwkJc2l6ZV90IGxlbiA9IG1zZ2J1Zi0+bGVuIC0gaWdub3JlX2Zvb3RlcjsKKworCQlpZiAoIWxlbikgeworCQkJLyoKKwkJCSAqIFRoZSBidWZmZXIgaXMgY29tcGxldGVseSBlbXB0eS4gIExlYXZlIGZvb20gZm9yCisJCQkgKiB0aGUgdGl0bGUgYW5kIGJvZHkgdG8gYmUgZmlsbGVkIGluIGJ5IHRoZSB1c2VyLgorCQkJICovCisJCQlhcHBlbmRfbmV3bGluZXMgPSAiXG5cbiI7CisJCX0gZWxzZSBpZiAobGVuID09IDEpIHsKKwkJCS8qCisJCQkgKiBCdWZmZXIgY29udGFpbnMgYSBzaW5nbGUgbmV3bGluZS4gIEFkZCBhbm90aGVyCisJCQkgKiBzbyB0aGF0IHdlIGxlYXZlIHJvb20gZm9yIHRoZSB0aXRsZSBhbmQgYm9keS4KKwkJCSAqLworCQkJYXBwZW5kX25ld2xpbmVzID0gIlxuIjsKKwkJfSBlbHNlIGlmIChtc2didWYtPmJ1ZltsZW4gLSAyXSAhPSAnXG4nKSB7CisJCQkvKgorCQkJICogQnVmZmVyIGVuZHMgd2l0aCBhIHNpbmdsZSBuZXdsaW5lLiAgQWRkIGFub3RoZXIKKwkJCSAqIHNvIHRoYXQgdGhlcmUgaXMgYW4gZW1wdHkgbGluZSBiZXR3ZWVuIHRoZSBtZXNzYWdlCisJCQkgKiBib2R5IGFuZCB0aGUgc29iLgorCQkJICovCisJCQlhcHBlbmRfbmV3bGluZXMgPSAiXG4iOworCQl9IC8qIGVsc2UsIHRoZSBidWZmZXIgYWxyZWFkeSBlbmRzIHdpdGggdHdvIG5ld2xpbmVzLiAqLworCisJCWlmIChhcHBlbmRfbmV3bGluZXMpCisJCQlzdHJidWZfc3BsaWNlKG1zZ2J1ZiwgbXNnYnVmLT5sZW4gLSBpZ25vcmVfZm9vdGVyLCAwLAorCQkJCWFwcGVuZF9uZXdsaW5lcywgc3RybGVuKGFwcGVuZF9uZXdsaW5lcykpOworCX0KKworCWlmIChoYXNfZm9vdGVyICE9IDMgJiYgKCFub19kdXBfc29iIHx8IGhhc19mb290ZXIgIT0gMikpCisJCXN0cmJ1Zl9zcGxpY2UobXNnYnVmLCBtc2didWYtPmxlbiAtIGlnbm9yZV9mb290ZXIsIDAsCisJCQkJc29iLmJ1Ziwgc29iLmxlbik7CisKKwlzdHJidWZfcmVsZWFzZSgmc29iKTsKK30KKworc3RydWN0IGxhYmVsc19lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50cnk7CisJY2hhciBsYWJlbFtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgbGFiZWxzX2NtcChjb25zdCB2b2lkICpmbmRhdGEsIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LCBjb25zdCB2b2lkICprZXkpCit7CisJY29uc3Qgc3RydWN0IGxhYmVsc19lbnRyeSAqYSwgKmI7CisKKwlhID0gY29udGFpbmVyX29mKGVwdHIsIGNvbnN0IHN0cnVjdCBsYWJlbHNfZW50cnksIGVudHJ5KTsKKwliID0gY29udGFpbmVyX29mKGVudHJ5X29yX2tleSwgY29uc3Qgc3RydWN0IGxhYmVsc19lbnRyeSwgZW50cnkpOworCisJcmV0dXJuIGtleSA/IHN0cmNtcChhLT5sYWJlbCwga2V5KSA6IHN0cmNtcChhLT5sYWJlbCwgYi0+bGFiZWwpOworfQorCitzdHJ1Y3Qgc3RyaW5nX2VudHJ5IHsKKwlzdHJ1Y3Qgb2lkbWFwX2VudHJ5IGVudHJ5OworCWNoYXIgc3RyaW5nW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IGxhYmVsX3N0YXRlIHsKKwlzdHJ1Y3Qgb2lkbWFwIGNvbW1pdDJsYWJlbDsKKwlzdHJ1Y3QgaGFzaG1hcCBsYWJlbHM7CisJc3RydWN0IHN0cmJ1ZiBidWY7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqbGFiZWxfb2lkKHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkgICAgIHN0cnVjdCBsYWJlbF9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGxhYmVsc19lbnRyeSAqbGFiZWxzX2VudHJ5OworCXN0cnVjdCBzdHJpbmdfZW50cnkgKnN0cmluZ19lbnRyeTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGR1bW15OworCWludCBpOworCisJc3RyaW5nX2VudHJ5ID0gb2lkbWFwX2dldCgmc3RhdGUtPmNvbW1pdDJsYWJlbCwgb2lkKTsKKwlpZiAoc3RyaW5nX2VudHJ5KQorCQlyZXR1cm4gc3RyaW5nX2VudHJ5LT5zdHJpbmc7CisKKwkvKgorCSAqIEZvciAidW5pbnRlcmVzdGluZyIgY29tbWl0cywgaS5lLiBjb21taXRzIHRoYXQgYXJlIG5vdCB0byBiZQorCSAqIHJlYmFzZWQsIGFuZCB3aGljaCBjYW4gdGhlcmVmb3JlIG5vdCBiZSBsYWJlbGVkLCB3ZSB1c2UgYSB1bmlxdWUKKwkgKiBhYmJyZXZpYXRpb24gb2YgdGhlIGNvbW1pdCBuYW1lLiBUaGlzIGlzIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQKKwkgKiB0aGFuIGNhbGxpbmcgZmluZF91bmlxdWVfYWJicmV2KCkgYmVjYXVzZSB3ZSBhbHNvIG5lZWQgdG8gbWFrZQorCSAqIHN1cmUgdGhhdCB0aGUgYWJicmV2aWF0aW9uIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggYW55IG90aGVyCisJICogbGFiZWwuCisJICoKKwkgKiBXZSBkaXNhbGxvdyAiaW50ZXJlc3RpbmciIGNvbW1pdHMgdG8gYmUgbGFiZWxlZCBieSBhIHN0cmluZyB0aGF0CisJICogaXMgYSB2YWxpZCBmdWxsLWxlbmd0aCBoYXNoLCB0byBlbnN1cmUgdGhhdCB3ZSBhbHdheXMgY2FuIGZpbmQgYW4KKwkgKiBhYmJyZXZpYXRpb24gZm9yIGFueSB1bmludGVyZXN0aW5nIGNvbW1pdCdzIG5hbWVzIHRoYXQgZG9lcyBub3QKKwkgKiBjbGFzaCB3aXRoIGFueSBvdGhlciBsYWJlbC4KKwkgKi8KKwlzdHJidWZfcmVzZXQoJnN0YXRlLT5idWYpOworCWlmICghbGFiZWwpIHsKKwkJY2hhciAqcDsKKworCQlzdHJidWZfZ3Jvdygmc3RhdGUtPmJ1ZiwgR0lUX01BWF9IRVhTWik7CisJCWxhYmVsID0gcCA9IHN0YXRlLT5idWYuYnVmOworCisJCWZpbmRfdW5pcXVlX2FiYnJldl9yKHAsIG9pZCwgZGVmYXVsdF9hYmJyZXYpOworCisJCS8qCisJCSAqIFdlIG1heSBuZWVkIHRvIGV4dGVuZCB0aGUgYWJicmV2aWF0ZWQgaGFzaCBzbyB0aGF0IHRoZXJlIGlzCisJCSAqIG5vIGNvbmZsaWN0aW5nIGxhYmVsLgorCQkgKi8KKwkJaWYgKGhhc2htYXBfZ2V0X2Zyb21faGFzaCgmc3RhdGUtPmxhYmVscywgc3RyaWhhc2gocCksIHApKSB7CisJCQlzaXplX3QgaSA9IHN0cmxlbihwKSArIDE7CisKKwkJCW9pZF90b19oZXhfcihwLCBvaWQpOworCQkJZm9yICg7IGkgPCB0aGVfaGFzaF9hbGdvLT5oZXhzejsgaSsrKSB7CisJCQkJY2hhciBzYXZlID0gcFtpXTsKKwkJCQlwW2ldID0gJ1wwJzsKKwkJCQlpZiAoIWhhc2htYXBfZ2V0X2Zyb21faGFzaCgmc3RhdGUtPmxhYmVscywKKwkJCQkJCQkgICBzdHJpaGFzaChwKSwgcCkpCisJCQkJCWJyZWFrOworCQkJCXBbaV0gPSBzYXZlOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiAqYnVmID0gJnN0YXRlLT5idWY7CisKKwkJLyoKKwkJICogU2FuaXRpemUgbGFiZWxzIGJ5IHJlcGxhY2luZyBub24tYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzCisJCSAqIChpbmNsdWRpbmcgd2hpdGUtc3BhY2Ugb25lcykgYnkgZGFzaGVzLCBhcyB0aGV5IG1pZ2h0IGJlCisJCSAqIGlsbGVnYWwgaW4gZmlsZSBuYW1lcyAoYW5kIGhlbmNlIGluIHJlZiBuYW1lcykuCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSByZXRhaW4gbm9uLUFTQ0lJIFVURi04IGNoYXJhY3RlcnMgKGlkZW50aWZpZWQKKwkJICogdmlhIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCkuIFRoZXkgc2hvdWxkIGJlIGFsbCBhY2NlcHRhYmxlCisJCSAqIGluIGZpbGUgbmFtZXMuIFdlIGRvIG5vdCB2YWxpZGF0ZSB0aGUgVVRGLTggaGVyZSwgdGhhdCdzIG5vdAorCQkgKiB0aGUgam9iIG9mIHRoaXMgZnVuY3Rpb24uCisJCSAqLworCQlmb3IgKDsgKmxhYmVsOyBsYWJlbCsrKQorCQkJaWYgKCgqbGFiZWwgJiAweDgwKSB8fCBpc2FsbnVtKCpsYWJlbCkpCisJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgKmxhYmVsKTsKKwkJCS8qIGF2b2lkIGxlYWRpbmcgZGFzaCBhbmQgZG91YmxlLWRhc2hlcyAqLworCQkJZWxzZSBpZiAoYnVmLT5sZW4gJiYgYnVmLT5idWZbYnVmLT5sZW4gLSAxXSAhPSAnLScpCisJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy0nKTsKKwkJaWYgKCFidWYtPmxlbikgeworCQkJc3RyYnVmX2FkZHN0cihidWYsICJyZXYtIik7CisJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoYnVmLCBvaWQsIGRlZmF1bHRfYWJicmV2KTsKKwkJfQorCQlsYWJlbCA9IGJ1Zi0+YnVmOworCisJCWlmICgoYnVmLT5sZW4gPT0gdGhlX2hhc2hfYWxnby0+aGV4c3ogJiYKKwkJICAgICAhZ2V0X29pZF9oZXgobGFiZWwsICZkdW1teSkpIHx8CisJCSAgICAoYnVmLT5sZW4gPT0gMSAmJiAqbGFiZWwgPT0gJyMnKSB8fAorCQkgICAgaGFzaG1hcF9nZXRfZnJvbV9oYXNoKCZzdGF0ZS0+bGFiZWxzLAorCQkJCQkgIHN0cmloYXNoKGxhYmVsKSwgbGFiZWwpKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGxhYmVsIGFscmVhZHkgZXhpc3RzLCBvciBpZiB0aGUgbGFiZWwgaXMgYQorCQkJICogdmFsaWQgZnVsbCBPSUQsIG9yIHRoZSBsYWJlbCBpcyBhICcjJyAod2hpY2ggd2UgdXNlCisJCQkgKiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIG1lcmdlIGhlYWRzIGFuZCBvbmVsaW5lKSwgd2UKKwkJCSAqIGFwcGVuZCBhIGRhc2ggYW5kIGEgbnVtYmVyIHRvIG1ha2UgaXQgdW5pcXVlLgorCQkJICovCisJCQlzaXplX3QgbGVuID0gYnVmLT5sZW47CisKKwkJCWZvciAoaSA9IDI7IDsgaSsrKSB7CisJCQkJc3RyYnVmX3NldGxlbihidWYsIGxlbik7CisJCQkJc3RyYnVmX2FkZGYoYnVmLCAiLSVkIiwgaSk7CisJCQkJaWYgKCFoYXNobWFwX2dldF9mcm9tX2hhc2goJnN0YXRlLT5sYWJlbHMsCisJCQkJCQkJICAgc3RyaWhhc2goYnVmLT5idWYpLAorCQkJCQkJCSAgIGJ1Zi0+YnVmKSkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCWxhYmVsID0gYnVmLT5idWY7CisJCX0KKwl9CisKKwlGTEVYX0FMTE9DX1NUUihsYWJlbHNfZW50cnksIGxhYmVsLCBsYWJlbCk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZsYWJlbHNfZW50cnktPmVudHJ5LCBzdHJpaGFzaChsYWJlbCkpOworCWhhc2htYXBfYWRkKCZzdGF0ZS0+bGFiZWxzLCAmbGFiZWxzX2VudHJ5LT5lbnRyeSk7CisKKwlGTEVYX0FMTE9DX1NUUihzdHJpbmdfZW50cnksIHN0cmluZywgbGFiZWwpOworCW9pZGNweSgmc3RyaW5nX2VudHJ5LT5lbnRyeS5vaWQsIG9pZCk7CisJb2lkbWFwX3B1dCgmc3RhdGUtPmNvbW1pdDJsYWJlbCwgc3RyaW5nX2VudHJ5KTsKKworCXJldHVybiBzdHJpbmdfZW50cnktPnN0cmluZzsKK30KKworc3RhdGljIGludCBtYWtlX3NjcmlwdF93aXRoX21lcmdlcyhzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJCSAgIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCSAgIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZWJhc2VfY291c2lucyA9IGZsYWdzICYgVE9ET19MSVNUX1JFQkFTRV9DT1VTSU5TOworCWludCByb290X3dpdGhfb250byA9IGZsYWdzICYgVE9ET19MSVNUX1JPT1RfV0lUSF9PTlRPOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIG9uZWxpbmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGxhYmVsID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRzID0gTlVMTCwgKip0YWlsID0gJmNvbW1pdHMsICppdGVyOworCXN0cnVjdCBjb21taXRfbGlzdCAqdGlwcyA9IE5VTEwsICoqdGlwc190YWlsID0gJnRpcHM7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvaWRtYXAgY29tbWl0MnRvZG8gPSBPSURNQVBfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgb2lkc2V0IGludGVyZXN0aW5nID0gT0lEU0VUX0lOSVQsIGNoaWxkX3NlZW4gPSBPSURTRVRfSU5JVCwKKwkJc2hvd24gPSBPSURTRVRfSU5JVDsKKwlzdHJ1Y3QgbGFiZWxfc3RhdGUgc3RhdGUgPSB7IE9JRE1BUF9JTklULCB7IE5VTEwgfSwgU1RSQlVGX0lOSVQgfTsKKworCWludCBhYmJyID0gZmxhZ3MgJiBUT0RPX0xJU1RfQUJCUkVWSUFURV9DTURTOworCWNvbnN0IGNoYXIgKmNtZF9waWNrID0gYWJiciA/ICJwIiA6ICJwaWNrIiwKKwkJKmNtZF9sYWJlbCA9IGFiYnIgPyAibCIgOiAibGFiZWwiLAorCQkqY21kX3Jlc2V0ID0gYWJiciA/ICJ0IiA6ICJyZXNldCIsCisJCSpjbWRfbWVyZ2UgPSBhYmJyID8gIm0iIDogIm1lcmdlIjsKKworCW9pZG1hcF9pbml0KCZjb21taXQydG9kbywgMCk7CisJb2lkbWFwX2luaXQoJnN0YXRlLmNvbW1pdDJsYWJlbCwgMCk7CisJaGFzaG1hcF9pbml0KCZzdGF0ZS5sYWJlbHMsIGxhYmVsc19jbXAsIE5VTEwsIDApOworCXN0cmJ1Zl9pbml0KCZzdGF0ZS5idWYsIDMyKTsKKworCWlmIChyZXZzLT5jbWRsaW5lLm5yICYmIChyZXZzLT5jbWRsaW5lLnJldlswXS5mbGFncyAmIEJPVFRPTSkpIHsKKwkJc3RydWN0IGxhYmVsc19lbnRyeSAqb250b19sYWJlbF9lbnRyeTsKKwkJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJnJldnMtPmNtZGxpbmUucmV2WzBdLml0ZW0tPm9pZDsKKwkJRkxFWF9BTExPQ19TVFIoZW50cnksIHN0cmluZywgIm9udG8iKTsKKwkJb2lkY3B5KCZlbnRyeS0+ZW50cnkub2lkLCBvaWQpOworCQlvaWRtYXBfcHV0KCZzdGF0ZS5jb21taXQybGFiZWwsIGVudHJ5KTsKKworCQlGTEVYX0FMTE9DX1NUUihvbnRvX2xhYmVsX2VudHJ5LCBsYWJlbCwgIm9udG8iKTsKKwkJaGFzaG1hcF9lbnRyeV9pbml0KCZvbnRvX2xhYmVsX2VudHJ5LT5lbnRyeSwgc3RyaWhhc2goIm9udG8iKSk7CisJCWhhc2htYXBfYWRkKCZzdGF0ZS5sYWJlbHMsICZvbnRvX2xhYmVsX2VudHJ5LT5lbnRyeSk7CisJfQorCisJLyoKKwkgKiBGaXJzdCBwaGFzZToKKwkgKiAtIGdldCBvbmVsaW5lcyBmb3IgYWxsIGNvbW1pdHMKKwkgKiAtIGdhdGhlciBhbGwgYnJhbmNoIHRpcHMgKGkuZS4gMm5kIG9yIGxhdGVyIHBhcmVudHMgb2YgbWVyZ2VzKQorCSAqIC0gbGFiZWwgYWxsIGJyYW5jaCB0aXBzCisJICovCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2cykpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqdG9fbWVyZ2U7CisJCWNvbnN0IGNoYXIgKnAxLCAqcDI7CisJCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwkJaW50IGlzX2VtcHR5OworCisJCXRhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgdGFpbCktPm5leHQ7CisJCW9pZHNldF9pbnNlcnQoJmludGVyZXN0aW5nLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCQlpc19lbXB0eSA9IGlzX29yaWdpbmFsX2NvbW1pdF9lbXB0eShjb21taXQpOworCQlpZiAoIWlzX2VtcHR5ICYmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBBVENIU0FNRSkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfcmVzZXQoJm9uZWxpbmUpOworCQlwcmV0dHlfcHJpbnRfY29tbWl0KHBwLCBjb21taXQsICZvbmVsaW5lKTsKKworCQl0b19tZXJnZSA9IGNvbW1pdC0+cGFyZW50cyA/IGNvbW1pdC0+cGFyZW50cy0+bmV4dCA6IE5VTEw7CisJCWlmICghdG9fbWVyZ2UpIHsKKwkJCS8qIG5vbi1tZXJnZSBjb21taXQ6IGVhc3kgY2FzZSAqLworCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzICVzICVzIiwgY21kX3BpY2ssCisJCQkJICAgIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCksCisJCQkJICAgIG9uZWxpbmUuYnVmKTsKKworCQkJRkxFWF9BTExPQ19TVFIoZW50cnksIHN0cmluZywgYnVmLmJ1Zik7CisJCQlvaWRjcHkoJmVudHJ5LT5lbnRyeS5vaWQsICZjb21taXQtPm9iamVjdC5vaWQpOworCQkJb2lkbWFwX3B1dCgmY29tbWl0MnRvZG8sIGVudHJ5KTsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBDcmVhdGUgYSBsYWJlbCAqLworCQlzdHJidWZfcmVzZXQoJmxhYmVsKTsKKwkJaWYgKHNraXBfcHJlZml4KG9uZWxpbmUuYnVmLCAiTWVyZ2UgIiwgJnAxKSAmJgorCQkgICAgKHAxID0gc3RyY2hyKHAxLCAnXCcnKSkgJiYKKwkJICAgIChwMiA9IHN0cmNocigrK3AxLCAnXCcnKSkpCisJCQlzdHJidWZfYWRkKCZsYWJlbCwgcDEsIHAyIC0gcDEpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChvbmVsaW5lLmJ1ZiwgIk1lcmdlIHB1bGwgcmVxdWVzdCAiLAorCQkJCSAgICAgJnAxKSAmJgorCQkJIChwMSA9IHN0cnN0cihwMSwgIiBmcm9tICIpKSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmxhYmVsLCBwMSArIHN0cmxlbigiIGZyb20gIikpOworCQllbHNlCisJCQlzdHJidWZfYWRkYnVmKCZsYWJlbCwgJm9uZWxpbmUpOworCisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzIC1DICVzIiwKKwkJCSAgICBjbWRfbWVyZ2UsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCisJCS8qIGxhYmVsIHRoZSB0aXBzIG9mIG1lcmdlZCBicmFuY2hlcyAqLworCQlmb3IgKDsgdG9fbWVyZ2U7IHRvX21lcmdlID0gdG9fbWVyZ2UtPm5leHQpIHsKKwkJCW9pZCA9ICZ0b19tZXJnZS0+aXRlbS0+b2JqZWN0Lm9pZDsKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnICcpOworCisJCQlpZiAoIW9pZHNldF9jb250YWlucygmaW50ZXJlc3RpbmcsIG9pZCkpIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWYsIGxhYmVsX29pZChvaWQsIE5VTEwsCisJCQkJCQkJICAgICAgJnN0YXRlKSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXRpcHNfdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQodG9fbWVyZ2UtPml0ZW0sCisJCQkJCQkJdGlwc190YWlsKS0+bmV4dDsKKworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBsYWJlbF9vaWQob2lkLCBsYWJlbC5idWYsICZzdGF0ZSkpOworCQl9CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIgIyAlcyIsIG9uZWxpbmUuYnVmKTsKKworCQlGTEVYX0FMTE9DX1NUUihlbnRyeSwgc3RyaW5nLCBidWYuYnVmKTsKKwkJb2lkY3B5KCZlbnRyeS0+ZW50cnkub2lkLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKwkJb2lkbWFwX3B1dCgmY29tbWl0MnRvZG8sIGVudHJ5KTsKKwl9CisKKwkvKgorCSAqIFNlY29uZCBwaGFzZToKKwkgKiAtIGxhYmVsIGJyYW5jaCBwb2ludHMKKwkgKiAtIGFkZCBIRUFEIHRvIHRoZSBicmFuY2ggdGlwcworCSAqLworCWZvciAoaXRlciA9IGNvbW1pdHM7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gaXRlci0+aXRlbS0+cGFyZW50czsKKwkJZm9yICg7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSAmcGFyZW50LT5pdGVtLT5vYmplY3Qub2lkOworCQkJaWYgKCFvaWRzZXRfY29udGFpbnMoJmludGVyZXN0aW5nLCBvaWQpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG9pZHNldF9pbnNlcnQoJmNoaWxkX3NlZW4sIG9pZCkpCisJCQkJbGFiZWxfb2lkKG9pZCwgImJyYW5jaC1wb2ludCIsICZzdGF0ZSk7CisJCX0KKworCQkvKiBBZGQgSEVBRCBhcyBpbXBsaWNpdCAidGlwIG9mIGJyYW5jaCIgKi8KKwkJaWYgKCFpdGVyLT5uZXh0KQorCQkJdGlwc190YWlsID0gJmNvbW1pdF9saXN0X2luc2VydChpdGVyLT5pdGVtLAorCQkJCQkJCXRpcHNfdGFpbCktPm5leHQ7CisJfQorCisJLyoKKwkgKiBUaGlyZCBwaGFzZTogb3V0cHV0IHRoZSB0b2RvIGxpc3QuIFRoaXMgaXMgYSBiaXQgdHJpY2t5LCBhcyB3ZQorCSAqIHdhbnQgdG8gYXZvaWQganVtcGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHJldmlzaW9ucy4gVG8KKwkgKiBhY2NvbXBsaXNoIHRoYXQgZ29hbCwgd2Ugd2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgYnJhbmNoIHRpcHMsCisJICogZ2F0aGVyaW5nIGNvbW1pdHMgbm90IHlldCBzaG93biwgcmV2ZXJzaW5nIHRoZSBsaXN0IG9uIHRoZSBmbHksCisJICogdGhlbiBvdXRwdXR0aW5nIHRoYXQgbGlzdCAobGFiZWxpbmcgcmV2aXNpb25zIGFzIG5lZWRlZCkuCisJICovCisJc3RyYnVmX2FkZGYob3V0LCAiJXMgb250b1xuIiwgY21kX2xhYmVsKTsKKwlmb3IgKGl0ZXIgPSB0aXBzOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMLCAqaXRlcjI7CisKKwkJY29tbWl0ID0gaXRlci0+aXRlbTsKKwkJaWYgKG9pZHNldF9jb250YWlucygmc2hvd24sICZjb21taXQtPm9iamVjdC5vaWQpKQorCQkJY29udGludWU7CisJCWVudHJ5ID0gb2lkbWFwX2dldCgmc3RhdGUuY29tbWl0MmxhYmVsLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKworCQlpZiAoZW50cnkpCisJCQlzdHJidWZfYWRkZihvdXQsICJcbiVjIEJyYW5jaCAlc1xuIiwgY29tbWVudF9saW5lX2NoYXIsIGVudHJ5LT5zdHJpbmcpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKworCQl3aGlsZSAob2lkc2V0X2NvbnRhaW5zKCZpbnRlcmVzdGluZywgJmNvbW1pdC0+b2JqZWN0Lm9pZCkgJiYKKwkJICAgICAgICFvaWRzZXRfY29udGFpbnMoJnNob3duLCAmY29tbWl0LT5vYmplY3Qub2lkKSkgeworCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJmxpc3QpOworCQkJaWYgKCFjb21taXQtPnBhcmVudHMpIHsKKwkJCQljb21taXQgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQkJY29tbWl0ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCQl9CisKKwkJaWYgKCFjb21taXQpCisJCQlzdHJidWZfYWRkZihvdXQsICIlcyAlc1xuIiwgY21kX3Jlc2V0LAorCQkJCSAgICByZWJhc2VfY291c2lucyB8fCByb290X3dpdGhfb250byA/CisJCQkJICAgICJvbnRvIiA6ICJbbmV3IHJvb3RdIik7CisJCWVsc2UgeworCQkJY29uc3QgY2hhciAqdG8gPSBOVUxMOworCisJCQllbnRyeSA9IG9pZG1hcF9nZXQoJnN0YXRlLmNvbW1pdDJsYWJlbCwKKwkJCQkJICAgJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJCQlpZiAoZW50cnkpCisJCQkJdG8gPSBlbnRyeS0+c3RyaW5nOworCQkJZWxzZSBpZiAoIXJlYmFzZV9jb3VzaW5zKQorCQkJCXRvID0gbGFiZWxfb2lkKCZjb21taXQtPm9iamVjdC5vaWQsIE5VTEwsCisJCQkJCSAgICAgICAmc3RhdGUpOworCisJCQlpZiAoIXRvIHx8ICFzdHJjbXAodG8sICJvbnRvIikpCisJCQkJc3RyYnVmX2FkZGYob3V0LCAiJXMgb250b1xuIiwgY21kX3Jlc2V0KTsKKwkJCWVsc2UgeworCQkJCXN0cmJ1Zl9yZXNldCgmb25lbGluZSk7CisJCQkJcHJldHR5X3ByaW50X2NvbW1pdChwcCwgY29tbWl0LCAmb25lbGluZSk7CisJCQkJc3RyYnVmX2FkZGYob3V0LCAiJXMgJXMgIyAlc1xuIiwKKwkJCQkJICAgIGNtZF9yZXNldCwgdG8sIG9uZWxpbmUuYnVmKTsKKwkJCX0KKwkJfQorCisJCWZvciAoaXRlcjIgPSBsaXN0OyBpdGVyMjsgaXRlcjIgPSBpdGVyMi0+bmV4dCkgeworCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJml0ZXIyLT5pdGVtLT5vYmplY3Qub2lkOworCQkJZW50cnkgPSBvaWRtYXBfZ2V0KCZjb21taXQydG9kbywgb2lkKTsKKwkJCS8qIG9ubHkgc2hvdyBpZiBub3QgYWxyZWFkeSB1cHN0cmVhbSAqLworCQkJaWYgKGVudHJ5KQorCQkJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzXG4iLCBlbnRyeS0+c3RyaW5nKTsKKwkJCWVudHJ5ID0gb2lkbWFwX2dldCgmc3RhdGUuY29tbWl0MmxhYmVsLCBvaWQpOworCQkJaWYgKGVudHJ5KQorCQkJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzICVzXG4iLAorCQkJCQkgICAgY21kX2xhYmVsLCBlbnRyeS0+c3RyaW5nKTsKKwkJCW9pZHNldF9pbnNlcnQoJnNob3duLCBvaWQpOworCQl9CisKKwkJZnJlZV9jb21taXRfbGlzdChsaXN0KTsKKwl9CisKKwlmcmVlX2NvbW1pdF9saXN0KGNvbW1pdHMpOworCWZyZWVfY29tbWl0X2xpc3QodGlwcyk7CisKKwlzdHJidWZfcmVsZWFzZSgmbGFiZWwpOworCXN0cmJ1Zl9yZWxlYXNlKCZvbmVsaW5lKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCW9pZG1hcF9mcmVlKCZjb21taXQydG9kbywgMSk7CisJb2lkbWFwX2ZyZWUoJnN0YXRlLmNvbW1pdDJsYWJlbCwgMSk7CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJnN0YXRlLmxhYmVscywgc3RydWN0IGxhYmVsc19lbnRyeSwgZW50cnkpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0ZS5idWYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXF1ZW5jZXJfbWFrZV9zY3JpcHQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzdHJidWYgKm91dCwgaW50IGFyZ2MsCisJCQkgIGNvbnN0IGNoYXIgKiphcmd2LCB1bnNpZ25lZCBmbGFncykKK3sKKwljaGFyICpmb3JtYXQgPSBOVUxMOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcCA9IHswfTsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY29uc3QgY2hhciAqaW5zbiA9IGZsYWdzICYgVE9ET19MSVNUX0FCQlJFVklBVEVfQ01EUyA/ICJwIiA6ICJwaWNrIjsKKwlpbnQgcmViYXNlX21lcmdlcyA9IGZsYWdzICYgVE9ET19MSVNUX1JFQkFTRV9NRVJHRVM7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZyZXZzLCBOVUxMKTsKKwlyZXZzLnZlcmJvc2VfaGVhZGVyID0gMTsKKwlpZiAoIXJlYmFzZV9tZXJnZXMpCisJCXJldnMubWF4X3BhcmVudHMgPSAxOworCXJldnMuY2hlcnJ5X21hcmsgPSAxOworCXJldnMubGltaXRlZCA9IDE7CisJcmV2cy5yZXZlcnNlID0gMTsKKwlyZXZzLnJpZ2h0X29ubHkgPSAxOworCXJldnMuc29ydF9vcmRlciA9IFJFVl9TT1JUX0lOX0dSQVBIX09SREVSOworCXJldnMudG9wb19vcmRlciA9IDE7CisKKwlyZXZzLnByZXR0eV9naXZlbiA9IDE7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJyZWJhc2UuaW5zdHJ1Y3Rpb25Gb3JtYXQiLCAmZm9ybWF0KTsKKwlpZiAoIWZvcm1hdCB8fCAhKmZvcm1hdCkgeworCQlmcmVlKGZvcm1hdCk7CisJCWZvcm1hdCA9IHhzdHJkdXAoIiVzIik7CisJfQorCWdldF9jb21taXRfZm9ybWF0KGZvcm1hdCwgJnJldnMpOworCWZyZWUoZm9ybWF0KTsKKwlwcC5mbXQgPSByZXZzLmNvbW1pdF9mb3JtYXQ7CisJcHAub3V0cHV0X2VuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKworCWlmIChzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpID4gMSkKKwkJcmV0dXJuIGVycm9yKF8oIm1ha2Vfc2NyaXB0OiB1bmhhbmRsZWQgb3B0aW9ucyIpKTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oIm1ha2Vfc2NyaXB0OiBlcnJvciBwcmVwYXJpbmcgcmV2aXNpb25zIikpOworCisJaWYgKHJlYmFzZV9tZXJnZXMpCisJCXJldHVybiBtYWtlX3NjcmlwdF93aXRoX21lcmdlcygmcHAsICZyZXZzLCBvdXQsIGZsYWdzKTsKKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKSkpIHsKKwkJaW50IGlzX2VtcHR5ID0gaXNfb3JpZ2luYWxfY29tbWl0X2VtcHR5KGNvbW1pdCk7CisKKwkJaWYgKCFpc19lbXB0eSAmJiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBQQVRDSFNBTUUpKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzICVzICIsIGluc24sCisJCQkgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CisJCXByZXR0eV9wcmludF9jb21taXQoJnBwLCBjb21taXQsIG91dCk7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICdcbicpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFkZCBjb21tYW5kcyBhZnRlciBwaWNrIGFuZCAoc2VyaWVzIG9mKSBzcXVhc2gvZml4dXAgY29tbWFuZHMKKyAqIGluIHRoZSB0b2RvIGxpc3QuCisgKi8KK3ZvaWQgdG9kb19saXN0X2FkZF9leGVjX2NvbW1hbmRzKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKKwkJCQkgc3RydWN0IHN0cmluZ19saXN0ICpjb21tYW5kcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAmdG9kb19saXN0LT5idWY7CisJc2l6ZV90IGJhc2Vfb2Zmc2V0ID0gYnVmLT5sZW47CisJaW50IGksIGluc2VydCwgbnIgPSAwLCBhbGxvYyA9IDA7CisJc3RydWN0IHRvZG9faXRlbSAqaXRlbXMgPSBOVUxMLCAqYmFzZV9pdGVtcyA9IE5VTEw7CisKKwliYXNlX2l0ZW1zID0geGNhbGxvYyhjb21tYW5kcy0+bnIsIHNpemVvZihzdHJ1Y3QgdG9kb19pdGVtKSk7CisJZm9yIChpID0gMDsgaSA8IGNvbW1hbmRzLT5ucjsgaSsrKSB7CisJCXNpemVfdCBjb21tYW5kX2xlbiA9IHN0cmxlbihjb21tYW5kcy0+aXRlbXNbaV0uc3RyaW5nKTsKKworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgY29tbWFuZHMtPml0ZW1zW2ldLnN0cmluZyk7CisJCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCisJCWJhc2VfaXRlbXNbaV0uY29tbWFuZCA9IFRPRE9fRVhFQzsKKwkJYmFzZV9pdGVtc1tpXS5vZmZzZXRfaW5fYnVmID0gYmFzZV9vZmZzZXQ7CisJCWJhc2VfaXRlbXNbaV0uYXJnX29mZnNldCA9IGJhc2Vfb2Zmc2V0ICsgc3RybGVuKCJleGVjICIpOworCQliYXNlX2l0ZW1zW2ldLmFyZ19sZW4gPSBjb21tYW5kX2xlbiAtIHN0cmxlbigiZXhlYyAiKTsKKworCQliYXNlX29mZnNldCArPSBjb21tYW5kX2xlbiArIDE7CisJfQorCisJLyoKKwkgKiBJbnNlcnQgPGNvbW1hbmRzPiBhZnRlciBldmVyeSBwaWNrLiBIZXJlLCBmaXh1cC9zcXVhc2ggY2hhaW5zCisJICogYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcGljaywgc28gd2UgaW5zZXJ0IHRoZSBjb21tYW5kcyAqYWZ0ZXIqCisJICogdGhvc2UgY2hhaW5zIGlmIHRoZXJlIGFyZSBhbnkuCisJICoKKwkgKiBBcyB3ZSBpbnNlcnQgdGhlIGV4ZWMgY29tbWFuZHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVhcnJhbmdpbmcKKwkgKiBhbnkgZml4dXBzIGFuZCBiZWZvcmUgdGhlIHVzZXIgZWRpdHMgdGhlIGxpc3QsIGEgZml4dXAgY2hhaW4KKwkgKiBjYW4gbmV2ZXIgY29udGFpbiBjb21tZW50cyAoYW55IGNvbW1lbnRzIGFyZSBlbXB0eSBwaWNrcyB0aGF0CisJICogaGF2ZSBiZWVuIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGUgdXNlciBkaWQgbm90IHNwZWNpZnkKKwkgKiAtLWtlZXAtZW1wdHkpLiAgU28sIGl0IGlzIHNhZmUgdG8gaW5zZXJ0IGFuIGV4ZWMgY29tbWFuZAorCSAqIHdpdGhvdXQgbG9va2luZyBhdCB0aGUgY29tbWFuZCBmb2xsb3dpbmcgYSBjb21tZW50LgorCSAqLworCWluc2VydCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHRvZG9fbGlzdC0+bnI7IGkrKykgeworCQllbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kID0gdG9kb19saXN0LT5pdGVtc1tpXS5jb21tYW5kOworCQlpZiAoaW5zZXJ0ICYmICFpc19maXh1cChjb21tYW5kKSkgeworCQkJQUxMT0NfR1JPVyhpdGVtcywgbnIgKyBjb21tYW5kcy0+bnIsIGFsbG9jKTsKKwkJCUNPUFlfQVJSQVkoaXRlbXMgKyBuciwgYmFzZV9pdGVtcywgY29tbWFuZHMtPm5yKTsKKwkJCW5yICs9IGNvbW1hbmRzLT5ucjsKKworCQkJaW5zZXJ0ID0gMDsKKwkJfQorCisJCUFMTE9DX0dST1coaXRlbXMsIG5yICsgMSwgYWxsb2MpOworCQlpdGVtc1tucisrXSA9IHRvZG9fbGlzdC0+aXRlbXNbaV07CisKKwkJaWYgKGNvbW1hbmQgPT0gVE9ET19QSUNLIHx8IGNvbW1hbmQgPT0gVE9ET19NRVJHRSkKKwkJCWluc2VydCA9IDE7CisJfQorCisJLyogaW5zZXJ0IG9yIGFwcGVuZCBmaW5hbCA8Y29tbWFuZHM+ICovCisJaWYgKGluc2VydCB8fCBuciA9PSB0b2RvX2xpc3QtPm5yKSB7CisJCUFMTE9DX0dST1coaXRlbXMsIG5yICsgY29tbWFuZHMtPm5yLCBhbGxvYyk7CisJCUNPUFlfQVJSQVkoaXRlbXMgKyBuciwgYmFzZV9pdGVtcywgY29tbWFuZHMtPm5yKTsKKwkJbnIgKz0gY29tbWFuZHMtPm5yOworCX0KKworCWZyZWUoYmFzZV9pdGVtcyk7CisJRlJFRV9BTkRfTlVMTCh0b2RvX2xpc3QtPml0ZW1zKTsKKwl0b2RvX2xpc3QtPml0ZW1zID0gaXRlbXM7CisJdG9kb19saXN0LT5uciA9IG5yOworCXRvZG9fbGlzdC0+YWxsb2MgPSBhbGxvYzsKK30KKworc3RhdGljIHZvaWQgdG9kb19saXN0X3RvX3N0cmJ1ZihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0LAorCQkJCXN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IG51bSwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHRvZG9faXRlbSAqaXRlbTsKKwlpbnQgaSwgbWF4ID0gdG9kb19saXN0LT5ucjsKKworCWlmIChudW0gPiAwICYmIG51bSA8IG1heCkKKwkJbWF4ID0gbnVtOworCisJZm9yIChpdGVtID0gdG9kb19saXN0LT5pdGVtcywgaSA9IDA7IGkgPCBtYXg7IGkrKywgaXRlbSsrKSB7CisJCS8qIGlmIHRoZSBpdGVtIGlzIG5vdCBhIGNvbW1hbmQgd3JpdGUgaXQgYW5kIGNvbnRpbnVlICovCisJCWlmIChpdGVtLT5jb21tYW5kID49IFRPRE9fQ09NTUVOVCkgeworCQkJc3RyYnVmX2FkZGYoYnVmLCAiJS4qc1xuIiwgaXRlbS0+YXJnX2xlbiwKKwkJCQkgICAgdG9kb19pdGVtX2dldF9hcmcodG9kb19saXN0LCBpdGVtKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGFkZCBjb21tYW5kIHRvIHRoZSBidWZmZXIgKi8KKwkJaWYgKGZsYWdzICYgVE9ET19MSVNUX0FCQlJFVklBVEVfQ01EUykKKwkJCXN0cmJ1Zl9hZGRjaChidWYsIGNvbW1hbmRfdG9fY2hhcihpdGVtLT5jb21tYW5kKSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBjb21tYW5kX3RvX3N0cmluZyhpdGVtLT5jb21tYW5kKSk7CisKKwkJLyogYWRkIGNvbW1pdCBpZCAqLworCQlpZiAoaXRlbS0+Y29tbWl0KSB7CisJCQljb25zdCBjaGFyICpvaWQgPSBmbGFncyAmIFRPRE9fTElTVF9TSE9SVEVOX0lEUyA/CisJCQkJCSAgc2hvcnRfY29tbWl0X25hbWUoaXRlbS0+Y29tbWl0KSA6CisJCQkJCSAgb2lkX3RvX2hleCgmaXRlbS0+Y29tbWl0LT5vYmplY3Qub2lkKTsKKworCQkJaWYgKGl0ZW0tPmNvbW1hbmQgPT0gVE9ET19NRVJHRSkgeworCQkJCWlmIChpdGVtLT5mbGFncyAmIFRPRE9fRURJVF9NRVJHRV9NU0cpCisJCQkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiIC1jIik7CisJCQkJZWxzZQorCQkJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiAtQyIpOworCQkJfQorCisJCQlzdHJidWZfYWRkZihidWYsICIgJXMiLCBvaWQpOworCQl9CisKKwkJLyogYWRkIGFsbCB0aGUgcmVzdCAqLworCQlpZiAoIWl0ZW0tPmFyZ19sZW4pCisJCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoYnVmLCAiICUuKnNcbiIsIGl0ZW0tPmFyZ19sZW4sCisJCQkJICAgIHRvZG9faXRlbV9nZXRfYXJnKHRvZG9fbGlzdCwgaXRlbSkpOworCX0KK30KKworaW50IHRvZG9fbGlzdF93cml0ZV90b19maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQkgICAgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsCisJCQkgICAgY29uc3QgY2hhciAqc2hvcnRvbnRvLCBpbnQgbnVtLCB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmVzOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwl0b2RvX2xpc3RfdG9fc3RyYnVmKHIsIHRvZG9fbGlzdCwgJmJ1ZiwgbnVtLCBmbGFncyk7CisJaWYgKGZsYWdzICYgVE9ET19MSVNUX0FQUEVORF9UT0RPX0hFTFApCisJCWFwcGVuZF90b2RvX2hlbHAoY291bnRfY29tbWFuZHModG9kb19saXN0KSwKKwkJCQkgc2hvcnRyZXZpc2lvbnMsIHNob3J0b250bywgJmJ1Zik7CisKKwlyZXMgPSB3cml0ZV9tZXNzYWdlKGJ1Zi5idWYsIGJ1Zi5sZW4sIGZpbGUsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJlczsKK30KKworLyogc2tpcCBwaWNraW5nIGNvbW1pdHMgd2hvc2UgcGFyZW50cyBhcmUgdW5jaGFuZ2VkICovCitzdGF0aWMgaW50IHNraXBfdW5uZWNlc3NhcnlfcGlja3Moc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICBzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQkJICBzdHJ1Y3Qgb2JqZWN0X2lkICpiYXNlX29pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpwYXJlbnRfb2lkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRvZG9fbGlzdC0+bnI7IGkrKykgeworCQlzdHJ1Y3QgdG9kb19pdGVtICppdGVtID0gdG9kb19saXN0LT5pdGVtcyArIGk7CisKKwkJaWYgKGl0ZW0tPmNvbW1hbmQgPj0gVE9ET19OT09QKQorCQkJY29udGludWU7CisJCWlmIChpdGVtLT5jb21tYW5kICE9IFRPRE9fUElDSykKKwkJCWJyZWFrOworCQlpZiAocGFyc2VfY29tbWl0KGl0ZW0tPmNvbW1pdCkpIHsKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgY29tbWl0ICclcyciKSwKKwkJCQlvaWRfdG9faGV4KCZpdGVtLT5jb21taXQtPm9iamVjdC5vaWQpKTsKKwkJfQorCQlpZiAoIWl0ZW0tPmNvbW1pdC0+cGFyZW50cykKKwkJCWJyZWFrOyAvKiByb290IGNvbW1pdCAqLworCQlpZiAoaXRlbS0+Y29tbWl0LT5wYXJlbnRzLT5uZXh0KQorCQkJYnJlYWs7IC8qIG1lcmdlIGNvbW1pdCAqLworCQlwYXJlbnRfb2lkID0gJml0ZW0tPmNvbW1pdC0+cGFyZW50cy0+aXRlbS0+b2JqZWN0Lm9pZDsKKwkJaWYgKCFvaWRlcShwYXJlbnRfb2lkLCBiYXNlX29pZCkpCisJCQlicmVhazsKKwkJb2lkY3B5KGJhc2Vfb2lkLCAmaXRlbS0+Y29tbWl0LT5vYmplY3Qub2lkKTsKKwl9CisJaWYgKGkgPiAwKSB7CisJCWNvbnN0IGNoYXIgKmRvbmVfcGF0aCA9IHJlYmFzZV9wYXRoX2RvbmUoKTsKKworCQlpZiAodG9kb19saXN0X3dyaXRlX3RvX2ZpbGUociwgdG9kb19saXN0LCBkb25lX3BhdGgsIE5VTEwsIE5VTEwsIGksIDApKSB7CisJCQllcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBkb25lX3BhdGgpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJTU9WRV9BUlJBWSh0b2RvX2xpc3QtPml0ZW1zLCB0b2RvX2xpc3QtPml0ZW1zICsgaSwgdG9kb19saXN0LT5uciAtIGkpOworCQl0b2RvX2xpc3QtPm5yIC09IGk7CisJCXRvZG9fbGlzdC0+Y3VycmVudCA9IDA7CisJCXRvZG9fbGlzdC0+ZG9uZV9uciArPSBpOworCisJCWlmIChpc19maXh1cChwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSkpCisJCQlyZWNvcmRfaW5fcmV3cml0dGVuKGJhc2Vfb2lkLCBwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjb21wbGV0ZV9hY3Rpb24oc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywgdW5zaWduZWQgZmxhZ3MsCisJCSAgICBjb25zdCBjaGFyICpzaG9ydHJldmlzaW9ucywgY29uc3QgY2hhciAqb250b19uYW1lLAorCQkgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkLAorCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICpjb21tYW5kcywgdW5zaWduZWQgYXV0b3NxdWFzaCwKKwkJICAgIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCkKK3sKKwljb25zdCBjaGFyICpzaG9ydG9udG8sICp0b2RvX2ZpbGUgPSByZWJhc2VfcGF0aF90b2RvKCk7CisJc3RydWN0IHRvZG9fbGlzdCBuZXdfdG9kbyA9IFRPRE9fTElTVF9JTklUOworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9ICZ0b2RvX2xpc3QtPmJ1ZiwgYnVmMiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvYmplY3RfaWQgb2lkID0gb250by0+b2JqZWN0Lm9pZDsKKwlpbnQgcmVzOworCisJc2hvcnRvbnRvID0gZmluZF91bmlxdWVfYWJicmV2KCZvaWQsIERFRkFVTFRfQUJCUkVWKTsKKworCWlmIChidWYtPmxlbiA9PSAwKSB7CisJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSBhcHBlbmRfbmV3X3RvZG8odG9kb19saXN0KTsKKwkJaXRlbS0+Y29tbWFuZCA9IFRPRE9fTk9PUDsKKwkJaXRlbS0+Y29tbWl0ID0gTlVMTDsKKwkJaXRlbS0+YXJnX2xlbiA9IGl0ZW0tPmFyZ19vZmZzZXQgPSBpdGVtLT5mbGFncyA9IGl0ZW0tPm9mZnNldF9pbl9idWYgPSAwOworCX0KKworCWlmIChhdXRvc3F1YXNoICYmIHRvZG9fbGlzdF9yZWFycmFuZ2Vfc3F1YXNoKHRvZG9fbGlzdCkpCisJCXJldHVybiAtMTsKKworCWlmIChjb21tYW5kcy0+bnIpCisJCXRvZG9fbGlzdF9hZGRfZXhlY19jb21tYW5kcyh0b2RvX2xpc3QsIGNvbW1hbmRzKTsKKworCWlmIChjb3VudF9jb21tYW5kcyh0b2RvX2xpc3QpID09IDApIHsKKwkJYXBwbHlfYXV0b3N0YXNoKG9wdHMpOworCQlzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKG9wdHMpOworCisJCXJldHVybiBlcnJvcihfKCJub3RoaW5nIHRvIGRvIikpOworCX0KKworCXJlcyA9IGVkaXRfdG9kb19saXN0KHIsIHRvZG9fbGlzdCwgJm5ld190b2RvLCBzaG9ydHJldmlzaW9ucywKKwkJCSAgICAgc2hvcnRvbnRvLCBmbGFncyk7CisJaWYgKHJlcyA9PSAtMSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKHJlcyA9PSAtMikgeworCQlhcHBseV9hdXRvc3Rhc2gob3B0cyk7CisJCXNlcXVlbmNlcl9yZW1vdmVfc3RhdGUob3B0cyk7CisKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAocmVzID09IC0zKSB7CisJCWFwcGx5X2F1dG9zdGFzaChvcHRzKTsKKwkJc2VxdWVuY2VyX3JlbW92ZV9zdGF0ZShvcHRzKTsKKwkJdG9kb19saXN0X3JlbGVhc2UoJm5ld190b2RvKTsKKworCQlyZXR1cm4gZXJyb3IoXygibm90aGluZyB0byBkbyIpKTsKKwl9IGVsc2UgaWYgKHJlcyA9PSAtNCkgeworCQljaGVja291dF9vbnRvKHIsIG9wdHMsIG9udG9fbmFtZSwgJm9udG8tPm9iamVjdC5vaWQsIG9yaWdfaGVhZCk7CisJCXRvZG9fbGlzdF9yZWxlYXNlKCZuZXdfdG9kbyk7CisKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEV4cGFuZCB0aGUgY29tbWl0IElEcyAqLworCXRvZG9fbGlzdF90b19zdHJidWYociwgJm5ld190b2RvLCAmYnVmMiwgLTEsIDApOworCXN0cmJ1Zl9zd2FwKCZuZXdfdG9kby5idWYsICZidWYyKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmMik7CisJbmV3X3RvZG8udG90YWxfbnIgLT0gbmV3X3RvZG8ubnI7CisJaWYgKHRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCBuZXdfdG9kby5idWYuYnVmLCAmbmV3X3RvZG8pIDwgMCkKKwkJQlVHKCJpbnZhbGlkIHRvZG8gbGlzdCBhZnRlciBleHBhbmRpbmcgSURzOlxuJXMiLAorCQkgICAgbmV3X3RvZG8uYnVmLmJ1Zik7CisKKwlpZiAob3B0cy0+YWxsb3dfZmYgJiYgc2tpcF91bm5lY2Vzc2FyeV9waWNrcyhyLCAmbmV3X3RvZG8sICZvaWQpKSB7CisJCXRvZG9fbGlzdF9yZWxlYXNlKCZuZXdfdG9kbyk7CisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIikpOworCX0KKworCWlmICh0b2RvX2xpc3Rfd3JpdGVfdG9fZmlsZShyLCAmbmV3X3RvZG8sIHRvZG9fZmlsZSwgTlVMTCwgTlVMTCwgLTEsCisJCQkJICAgIGZsYWdzICYgfihUT0RPX0xJU1RfU0hPUlRFTl9JRFMpKSkgeworCQl0b2RvX2xpc3RfcmVsZWFzZSgmbmV3X3RvZG8pOworCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IHdyaXRlICclcyciKSwgdG9kb19maWxlKTsKKwl9CisKKwlyZXMgPSAtMTsKKworCWlmIChjaGVja291dF9vbnRvKHIsIG9wdHMsIG9udG9fbmFtZSwgJm9pZCwgb3JpZ19oZWFkKSkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHIsICJyZWJhc2UiLCAiIiwgMSwgMSkpCisJCWdvdG8gY2xlYW51cDsKKworCXRvZG9fbGlzdF93cml0ZV90b3RhbF9ucigmbmV3X3RvZG8pOworCXJlcyA9IHBpY2tfY29tbWl0cyhyLCAmbmV3X3RvZG8sIG9wdHMpOworCitjbGVhbnVwOgorCXRvZG9fbGlzdF9yZWxlYXNlKCZuZXdfdG9kbyk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdHJ1Y3Qgc3ViamVjdDJpdGVtX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwlpbnQgaTsKKwljaGFyIHN1YmplY3RbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgaW50IHN1YmplY3QyaXRlbV9jbXAoY29uc3Qgdm9pZCAqZm5kYXRhLAorCQkJICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCQkgICAgY29uc3Qgdm9pZCAqa2V5KQoreworCWNvbnN0IHN0cnVjdCBzdWJqZWN0Mml0ZW1fZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3Qgc3ViamVjdDJpdGVtX2VudHJ5LCBlbnRyeSk7CisJYiA9IGNvbnRhaW5lcl9vZihlbnRyeV9vcl9rZXksIGNvbnN0IHN0cnVjdCBzdWJqZWN0Mml0ZW1fZW50cnksIGVudHJ5KTsKKworCXJldHVybiBrZXkgPyBzdHJjbXAoYS0+c3ViamVjdCwga2V5KSA6IHN0cmNtcChhLT5zdWJqZWN0LCBiLT5zdWJqZWN0KTsKK30KKworZGVmaW5lX2NvbW1pdF9zbGFiKGNvbW1pdF90b2RvX2l0ZW0sIHN0cnVjdCB0b2RvX2l0ZW0gKik7CisKKy8qCisgKiBSZWFycmFuZ2UgdGhlIHRvZG8gbGlzdCB0aGF0IGhhcyBib3RoICJwaWNrIGNvbW1pdC1pZCBtc2ciIGFuZCAicGljaworICogY29tbWl0LWlkIGZpeHVwIS9zcXVhc2ghIG1zZyIgaW4gaXQgc28gdGhhdCB0aGUgbGF0dGVyIGlzIHB1dCBpbW1lZGlhdGVseQorICogYWZ0ZXIgdGhlIGZvcm1lciwgYW5kIGNoYW5nZSAicGljayIgdG8gImZpeHVwIi8ic3F1YXNoIi4KKyAqCisgKiBOb3RlIHRoYXQgaWYgdGhlIGNvbmZpZyBoYXMgc3BlY2lmaWVkIGEgY3VzdG9tIGluc3RydWN0aW9uIGZvcm1hdCwgZWFjaCBsb2cKKyAqIG1lc3NhZ2Ugd2lsbCBoYXZlIHRvIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBjb21taXQgKGFzIHRoZSBvbmVsaW5lIGluIHRoZQorICogc2NyaXB0IGNhbm5vdCBiZSB0cnVzdGVkKSBpbiBvcmRlciB0byBub3JtYWxpemUgdGhlIGF1dG9zcXVhc2ggYXJyYW5nZW1lbnQuCisgKi8KK2ludCB0b2RvX2xpc3RfcmVhcnJhbmdlX3NxdWFzaChzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpCit7CisJc3RydWN0IGhhc2htYXAgc3ViamVjdDJpdGVtOworCWludCByZWFycmFuZ2VkID0gMCwgKm5leHQsICp0YWlsLCBpLCBuciA9IDAsIGFsbG9jID0gMDsKKwljaGFyICoqc3ViamVjdHM7CisJc3RydWN0IGNvbW1pdF90b2RvX2l0ZW0gY29tbWl0X3RvZG87CisJc3RydWN0IHRvZG9faXRlbSAqaXRlbXMgPSBOVUxMOworCisJaW5pdF9jb21taXRfdG9kb19pdGVtKCZjb21taXRfdG9kbyk7CisJLyoKKwkgKiBUaGUgaGFzaG1hcCBtYXBzIG9uZWxpbmVzIHRvIHRoZSByZXNwZWN0aXZlIHRvZG8gbGlzdCBpbmRleC4KKwkgKgorCSAqIElmIGFueSBpdGVtcyBuZWVkIHRvIGJlIHJlYXJyYW5nZWQsIHRoZSBuZXh0W2ldIHZhbHVlIHdpbGwgaW5kaWNhdGUKKwkgKiB3aGljaCBpdGVtIHdhcyBtb3ZlZCBkaXJlY3RseSBhZnRlciB0aGUgaSd0aC4KKwkgKgorCSAqIEluIHRoYXQgY2FzZSwgbGFzdFtpXSB3aWxsIGluZGljYXRlIHRoZSBpbmRleCBvZiB0aGUgbGF0ZXN0IGl0ZW0gdG8KKwkgKiBiZSBtb3ZlZCB0byBhcHBlYXIgYWZ0ZXIgdGhlIGkndGguCisJICovCisJaGFzaG1hcF9pbml0KCZzdWJqZWN0Mml0ZW0sIHN1YmplY3QyaXRlbV9jbXAsIE5VTEwsIHRvZG9fbGlzdC0+bnIpOworCUFMTE9DX0FSUkFZKG5leHQsIHRvZG9fbGlzdC0+bnIpOworCUFMTE9DX0FSUkFZKHRhaWwsIHRvZG9fbGlzdC0+bnIpOworCUFMTE9DX0FSUkFZKHN1YmplY3RzLCB0b2RvX2xpc3QtPm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgdG9kb19saXN0LT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSB0b2RvX2xpc3QtPml0ZW1zICsgaTsKKwkJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciwgKnN1YmplY3QsICpwOworCQlzaXplX3Qgc3ViamVjdF9sZW47CisJCWludCBpMiA9IC0xOworCQlzdHJ1Y3Qgc3ViamVjdDJpdGVtX2VudHJ5ICplbnRyeTsKKworCQluZXh0W2ldID0gdGFpbFtpXSA9IC0xOworCQlpZiAoIWl0ZW0tPmNvbW1pdCB8fCBpdGVtLT5jb21tYW5kID09IFRPRE9fRFJPUCkgeworCQkJc3ViamVjdHNbaV0gPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaXNfZml4dXAoaXRlbS0+Y29tbWFuZCkpIHsKKwkJCWNsZWFyX2NvbW1pdF90b2RvX2l0ZW0oJmNvbW1pdF90b2RvKTsKKwkJCXJldHVybiBlcnJvcihfKCJ0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IHJlYXJyYW5nZWQuIikpOworCQl9CisKKwkJKmNvbW1pdF90b2RvX2l0ZW1fYXQoJmNvbW1pdF90b2RvLCBpdGVtLT5jb21taXQpID0gaXRlbTsKKworCQlwYXJzZV9jb21taXQoaXRlbS0+Y29tbWl0KTsKKwkJY29tbWl0X2J1ZmZlciA9IGxvZ21zZ19yZWVuY29kZShpdGVtLT5jb21taXQsIE5VTEwsICJVVEYtOCIpOworCQlmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbW1pdF9idWZmZXIsICZzdWJqZWN0KTsKKwkJZm9ybWF0X3N1YmplY3QoJmJ1Ziwgc3ViamVjdCwgIiAiKTsKKwkJc3ViamVjdCA9IHN1YmplY3RzW2ldID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc3ViamVjdF9sZW4pOworCQl1bnVzZV9jb21taXRfYnVmZmVyKGl0ZW0tPmNvbW1pdCwgY29tbWl0X2J1ZmZlcik7CisJCWlmICgoc2tpcF9wcmVmaXgoc3ViamVjdCwgImZpeHVwISAiLCAmcCkgfHwKKwkJICAgICBza2lwX3ByZWZpeChzdWJqZWN0LCAic3F1YXNoISAiLCAmcCkpKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQyOworCisJCQlmb3IgKDs7KSB7CisJCQkJd2hpbGUgKGlzc3BhY2UoKnApKQorCQkJCQlwKys7CisJCQkJaWYgKCFza2lwX3ByZWZpeChwLCAiZml4dXAhICIsICZwKSAmJgorCQkJCSAgICAhc2tpcF9wcmVmaXgocCwgInNxdWFzaCEgIiwgJnApKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2goJnN1YmplY3QyaXRlbSwKKwkJCQkJCXN0cmhhc2gocCksIHAsCisJCQkJCQlzdHJ1Y3Qgc3ViamVjdDJpdGVtX2VudHJ5LAorCQkJCQkJZW50cnkpOworCQkJaWYgKGVudHJ5KQorCQkJCS8qIGZvdW5kIGJ5IHRpdGxlICovCisJCQkJaTIgPSBlbnRyeS0+aTsKKwkJCWVsc2UgaWYgKCFzdHJjaHIocCwgJyAnKSAmJgorCQkJCSAoY29tbWl0MiA9CisJCQkJICBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9ieV9uYW1lKHApKSAmJgorCQkJCSAqY29tbWl0X3RvZG9faXRlbV9hdCgmY29tbWl0X3RvZG8sIGNvbW1pdDIpKQorCQkJCS8qIGZvdW5kIGJ5IGNvbW1pdCBuYW1lICovCisJCQkJaTIgPSAqY29tbWl0X3RvZG9faXRlbV9hdCgmY29tbWl0X3RvZG8sIGNvbW1pdDIpCisJCQkJCS0gdG9kb19saXN0LT5pdGVtczsKKwkJCWVsc2UgeworCQkJCS8qIGNvcHkgY2FuIGJlIGEgcHJlZml4IG9mIHRoZSBjb21taXQgc3ViamVjdCAqLworCQkJCWZvciAoaTIgPSAwOyBpMiA8IGk7IGkyKyspCisJCQkJCWlmIChzdWJqZWN0c1tpMl0gJiYKKwkJCQkJICAgIHN0YXJ0c193aXRoKHN1YmplY3RzW2kyXSwgcCkpCisJCQkJCQlicmVhazsKKwkJCQlpZiAoaTIgPT0gaSkKKwkJCQkJaTIgPSAtMTsKKwkJCX0KKwkJfQorCQlpZiAoaTIgPj0gMCkgeworCQkJcmVhcnJhbmdlZCA9IDE7CisJCQl0b2RvX2xpc3QtPml0ZW1zW2ldLmNvbW1hbmQgPQorCQkJCXN0YXJ0c193aXRoKHN1YmplY3QsICJmaXh1cCEiKSA/CisJCQkJVE9ET19GSVhVUCA6IFRPRE9fU1FVQVNIOworCQkJaWYgKG5leHRbaTJdIDwgMCkKKwkJCQluZXh0W2kyXSA9IGk7CisJCQllbHNlCisJCQkJbmV4dFt0YWlsW2kyXV0gPSBpOworCQkJdGFpbFtpMl0gPSBpOworCQl9IGVsc2UgaWYgKCFoYXNobWFwX2dldF9mcm9tX2hhc2goJnN1YmplY3QyaXRlbSwKKwkJCQkJCXN0cmhhc2goc3ViamVjdCksIHN1YmplY3QpKSB7CisJCQlGTEVYX0FMTE9DX01FTShlbnRyeSwgc3ViamVjdCwgc3ViamVjdCwgc3ViamVjdF9sZW4pOworCQkJZW50cnktPmkgPSBpOworCQkJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeS0+ZW50cnksCisJCQkJCXN0cmhhc2goZW50cnktPnN1YmplY3QpKTsKKwkJCWhhc2htYXBfcHV0KCZzdWJqZWN0Mml0ZW0sICZlbnRyeS0+ZW50cnkpOworCQl9CisJfQorCisJaWYgKHJlYXJyYW5nZWQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRvZG9fbGlzdC0+bnI7IGkrKykgeworCQkJZW51bSB0b2RvX2NvbW1hbmQgY29tbWFuZCA9IHRvZG9fbGlzdC0+aXRlbXNbaV0uY29tbWFuZDsKKwkJCWludCBjdXIgPSBpOworCisJCQkvKgorCQkJICogSW5pdGlhbGx5LCBhbGwgY29tbWFuZHMgYXJlICdwaWNrJ3MuIElmIGl0IGlzIGEKKwkJCSAqIGZpeHVwIG9yIGEgc3F1YXNoIG5vdywgd2UgaGF2ZSByZWFycmFuZ2VkIGl0LgorCQkJICovCisJCQlpZiAoaXNfZml4dXAoY29tbWFuZCkpCisJCQkJY29udGludWU7CisKKwkJCXdoaWxlIChjdXIgPj0gMCkgeworCQkJCUFMTE9DX0dST1coaXRlbXMsIG5yICsgMSwgYWxsb2MpOworCQkJCWl0ZW1zW25yKytdID0gdG9kb19saXN0LT5pdGVtc1tjdXJdOworCQkJCWN1ciA9IG5leHRbY3VyXTsKKwkJCX0KKwkJfQorCisJCUZSRUVfQU5EX05VTEwodG9kb19saXN0LT5pdGVtcyk7CisJCXRvZG9fbGlzdC0+aXRlbXMgPSBpdGVtczsKKwkJdG9kb19saXN0LT5uciA9IG5yOworCQl0b2RvX2xpc3QtPmFsbG9jID0gYWxsb2M7CisJfQorCisJZnJlZShuZXh0KTsKKwlmcmVlKHRhaWwpOworCWZvciAoaSA9IDA7IGkgPCB0b2RvX2xpc3QtPm5yOyBpKyspCisJCWZyZWUoc3ViamVjdHNbaV0pOworCWZyZWUoc3ViamVjdHMpOworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZzdWJqZWN0Mml0ZW0sIHN0cnVjdCBzdWJqZWN0Mml0ZW1fZW50cnksIGVudHJ5KTsKKworCWNsZWFyX2NvbW1pdF90b2RvX2l0ZW0oJmNvbW1pdF90b2RvKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmggYi9zZXF1ZW5jZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThhMDc0Ci0tLSAvZGV2L251bGwKKysrIGIvc2VxdWVuY2VyLmgKQEAgLTAsMCArMSwyMDkgQEAKKyNpZm5kZWYgU0VRVUVOQ0VSX0gKKyNkZWZpbmUgU0VRVUVOQ0VSX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3QgcmVwb3NpdG9yeTsKKworY29uc3QgY2hhciAqZ2l0X3BhdGhfY29tbWl0X2VkaXRtc2codm9pZCk7Citjb25zdCBjaGFyICpnaXRfcGF0aF9zZXFfZGlyKHZvaWQpOworY29uc3QgY2hhciAqcmViYXNlX3BhdGhfdG9kbyh2b2lkKTsKK2NvbnN0IGNoYXIgKnJlYmFzZV9wYXRoX3RvZG9fYmFja3VwKHZvaWQpOworY29uc3QgY2hhciAqcmViYXNlX3BhdGhfZHJvcHBlZCh2b2lkKTsKKworI2RlZmluZSBBUFBFTkRfU0lHTk9GRl9ERURVUCAoMXUgPDwgMCkKKworZW51bSByZXBsYXlfYWN0aW9uIHsKKwlSRVBMQVlfUkVWRVJULAorCVJFUExBWV9QSUNLLAorCVJFUExBWV9JTlRFUkFDVElWRV9SRUJBU0UKK307CisKK2VudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgeworCUNPTU1JVF9NU0dfQ0xFQU5VUF9TUEFDRSwKKwlDT01NSVRfTVNHX0NMRUFOVVBfTk9ORSwKKwlDT01NSVRfTVNHX0NMRUFOVVBfU0NJU1NPUlMsCisJQ09NTUlUX01TR19DTEVBTlVQX0FMTAorfTsKKworc3RydWN0IHJlcGxheV9vcHRzIHsKKwllbnVtIHJlcGxheV9hY3Rpb24gYWN0aW9uOworCisJLyogQm9vbGVhbiBvcHRpb25zICovCisJaW50IGVkaXQ7CisJaW50IHJlY29yZF9vcmlnaW47CisJaW50IG5vX2NvbW1pdDsKKwlpbnQgc2lnbm9mZjsKKwlpbnQgYWxsb3dfZmY7CisJaW50IGFsbG93X3JlcmVyZV9hdXRvOworCWludCBhbGxvd19lbXB0eTsKKwlpbnQgYWxsb3dfZW1wdHlfbWVzc2FnZTsKKwlpbnQgZHJvcF9yZWR1bmRhbnRfY29tbWl0czsKKwlpbnQga2VlcF9yZWR1bmRhbnRfY29tbWl0czsKKwlpbnQgdmVyYm9zZTsKKwlpbnQgcXVpZXQ7CisJaW50IHJlc2NoZWR1bGVfZmFpbGVkX2V4ZWM7CisKKwlpbnQgbWFpbmxpbmU7CisKKwljaGFyICpncGdfc2lnbjsKKwllbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGRlZmF1bHRfbXNnX2NsZWFudXA7CisJaW50IGV4cGxpY2l0X2NsZWFudXA7CisKKwkvKiBNZXJnZSBzdHJhdGVneSAqLworCWNoYXIgKnN0cmF0ZWd5OworCWNoYXIgKip4b3B0czsKKwlzaXplX3QgeG9wdHNfbnIsIHhvcHRzX2FsbG9jOworCisJLyogVXNlZCBieSBmaXh1cC9zcXVhc2ggKi8KKwlzdHJ1Y3Qgc3RyYnVmIGN1cnJlbnRfZml4dXBzOworCWludCBjdXJyZW50X2ZpeHVwX2NvdW50OworCisJLyogcGxhY2Vob2xkZXIgY29tbWl0IGZvciAtaSAtLXJvb3QgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIHNxdWFzaF9vbnRvOworCWludCBoYXZlX3NxdWFzaF9vbnRvOworCisJLyogT25seSB1c2VkIGJ5IFJFUExBWV9OT05FICovCisJc3RydWN0IHJldl9pbmZvICpyZXZzOworfTsKKyNkZWZpbmUgUkVQTEFZX09QVFNfSU5JVCB7IC5hY3Rpb24gPSAtMSwgLmN1cnJlbnRfZml4dXBzID0gU1RSQlVGX0lOSVQgfQorCisvKgorICogTm90ZSB0aGF0IG9yZGVyaW5nIG1hdHRlcnMgaW4gdGhpcyBlbnVtLiBOb3Qgb25seSBtdXN0IGl0IG1hdGNoIHRoZSBtYXBwaW5nCisgKiBvZiB0b2RvX2NvbW1hbmRfaW5mbyAoaW4gc2VxdWVuY2VyLmMpLCBpdCBpcyBhbHNvIGRpdmlkZWQgaW50byBzZXZlcmFsCisgKiBzZWN0aW9ucyB0aGF0IG1hdHRlci4gIFdoZW4gYWRkaW5nIG5ldyBjb21tYW5kcywgbWFrZSBzdXJlIHlvdSBhZGQgaXQgaW4gdGhlCisgKiByaWdodCBzZWN0aW9uLgorICovCitlbnVtIHRvZG9fY29tbWFuZCB7CisJLyogY29tbWFuZHMgdGhhdCBoYW5kbGUgY29tbWl0cyAqLworCVRPRE9fUElDSyA9IDAsCisJVE9ET19SRVZFUlQsCisJVE9ET19FRElULAorCVRPRE9fUkVXT1JELAorCVRPRE9fRklYVVAsCisJVE9ET19TUVVBU0gsCisJLyogY29tbWFuZHMgdGhhdCBkbyBzb21ldGhpbmcgZWxzZSB0aGFuIGhhbmRsaW5nIGEgc2luZ2xlIGNvbW1pdCAqLworCVRPRE9fRVhFQywKKwlUT0RPX0JSRUFLLAorCVRPRE9fTEFCRUwsCisJVE9ET19SRVNFVCwKKwlUT0RPX01FUkdFLAorCS8qIGNvbW1hbmRzIHRoYXQgZG8gbm90aGluZyBidXQgYXJlIGNvdW50ZWQgZm9yIHJlcG9ydGluZyBwcm9ncmVzcyAqLworCVRPRE9fTk9PUCwKKwlUT0RPX0RST1AsCisJLyogY29tbWVudHMgKG5vdCBjb3VudGVkIGZvciByZXBvcnRpbmcgcHJvZ3Jlc3MpICovCisJVE9ET19DT01NRU5UCit9OworCitzdHJ1Y3QgdG9kb19pdGVtIHsKKwllbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJaW50IGFyZ19sZW47CisJLyogVGhlIG9mZnNldCBvZiB0aGUgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50IGluIHRoZSBzdHJidWYgKi8KKwlzaXplX3Qgb2Zmc2V0X2luX2J1ZiwgYXJnX29mZnNldDsKK307CisKK3N0cnVjdCB0b2RvX2xpc3QgeworCXN0cnVjdCBzdHJidWYgYnVmOworCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW1zOworCWludCBuciwgYWxsb2MsIGN1cnJlbnQ7CisJaW50IGRvbmVfbnIsIHRvdGFsX25yOworCXN0cnVjdCBzdGF0X2RhdGEgc3RhdDsKK307CisKKyNkZWZpbmUgVE9ET19MSVNUX0lOSVQgeyBTVFJCVUZfSU5JVCB9CisKK2ludCB0b2RvX2xpc3RfcGFyc2VfaW5zbl9idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNoYXIgKmJ1ZiwKKwkJCQlzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpOworaW50IHRvZG9fbGlzdF93cml0ZV90b19maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQkgICAgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsCisJCQkgICAgY29uc3QgY2hhciAqc2hvcnRvbnRvLCBpbnQgbnVtLCB1bnNpZ25lZCBmbGFncyk7Cit2b2lkIHRvZG9fbGlzdF9yZWxlYXNlKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCk7Citjb25zdCBjaGFyICp0b2RvX2l0ZW1fZ2V0X2FyZyhzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QsCisJCQkgICAgICBzdHJ1Y3QgdG9kb19pdGVtICppdGVtKTsKKworLyogQ2FsbCB0aGlzIHRvIHNldHVwIGRlZmF1bHRzIGJlZm9yZSBwYXJzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zICovCit2b2lkIHNlcXVlbmNlcl9pbml0X2NvbmZpZyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpOworaW50IHNlcXVlbmNlcl9waWNrX3JldmlzaW9ucyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSAgICAgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKTsKK2ludCBzZXF1ZW5jZXJfY29udGludWUoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cyk7CitpbnQgc2VxdWVuY2VyX3JvbGxiYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpOworaW50IHNlcXVlbmNlcl9za2lwKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpOworaW50IHNlcXVlbmNlcl9yZW1vdmVfc3RhdGUoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKTsKKworLyogI2RlZmluZSBUT0RPX0xJU1RfS0VFUF9FTVBUWSAoMVUgPDwgMCkgKi8gLyogTm8gbG9uZ2VyIHVzZWQgKi8KKyNkZWZpbmUgVE9ET19MSVNUX1NIT1JURU5fSURTICgxVSA8PCAxKQorI2RlZmluZSBUT0RPX0xJU1RfQUJCUkVWSUFURV9DTURTICgxVSA8PCAyKQorI2RlZmluZSBUT0RPX0xJU1RfUkVCQVNFX01FUkdFUyAoMVUgPDwgMykKKy8qCisgKiBXaGVuIHJlYmFzaW5nIG1lcmdlcywgY29tbWl0cyB0aGF0IGRvIGhhdmUgdGhlIGJhc2UgY29tbWl0IGFzIGFuY2VzdG9yCisgKiAoImNvdXNpbnMiKSBhcmUgKm5vdCogcmViYXNlZCBvbnRvIHRoZSBuZXcgYmFzZSBieSBkZWZhdWx0LiBJZiB0aG9zZQorICogY29tbWl0cyBzaG91bGQgYmUgcmViYXNlZCBvbnRvIHRoZSBuZXcgYmFzZSwgdGhpcyBmbGFnIG5lZWRzIHRvIGJlIHBhc3NlZC4KKyAqLworI2RlZmluZSBUT0RPX0xJU1RfUkVCQVNFX0NPVVNJTlMgKDFVIDw8IDQpCisjZGVmaW5lIFRPRE9fTElTVF9BUFBFTkRfVE9ET19IRUxQICgxVSA8PCA1KQorLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBhIHNjcmlwdCB0aGF0IHJlYmFzZXMgbWVyZ2VzIHdpdGggYC0tcm9vdGAgKmFuZCogd2l0aAorICogYC0tb250b2AsIHdlIGRvIG5vdCB3YW50IHRvIHJlLWdlbmVyYXRlIHRoZSByb290IGNvbW1pdHMuCisgKi8KKyNkZWZpbmUgVE9ET19MSVNUX1JPT1RfV0lUSF9PTlRPICgxVSA8PCA2KQorCisKK2ludCBzZXF1ZW5jZXJfbWFrZV9zY3JpcHQoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBzdHJidWYgKm91dCwgaW50IGFyZ2MsCisJCQkgIGNvbnN0IGNoYXIgKiphcmd2LCB1bnNpZ25lZCBmbGFncyk7CisKK3ZvaWQgdG9kb19saXN0X2FkZF9leGVjX2NvbW1hbmRzKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKKwkJCQkgc3RydWN0IHN0cmluZ19saXN0ICpjb21tYW5kcyk7CitpbnQgY29tcGxldGVfYWN0aW9uKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIHVuc2lnbmVkIGZsYWdzLAorCQkgICAgY29uc3QgY2hhciAqc2hvcnRyZXZpc2lvbnMsIGNvbnN0IGNoYXIgKm9udG9fbmFtZSwKKwkJICAgIHN0cnVjdCBjb21taXQgKm9udG8sIGNvbnN0IGNoYXIgKm9yaWdfaGVhZCwgc3RydWN0IHN0cmluZ19saXN0ICpjb21tYW5kcywKKwkJICAgIHVuc2lnbmVkIGF1dG9zcXVhc2gsIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCk7CitpbnQgdG9kb19saXN0X3JlYXJyYW5nZV9zcXVhc2goc3RydWN0IHRvZG9fbGlzdCAqdG9kb19saXN0KTsKKworLyoKKyAqIEFwcGVuZCBhIHNpZ25vZmYgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIGluICJtc2didWYiLiBUaGUgaWdub3JlX2Zvb3RlcgorICogcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF0IHRoZSBlbmQgb2YgbXNnYnVmIHRoYXQgc2hvdWxkCisgKiBub3QgYmUgY29uc2lkZXJlZCBhdCBhbGwuIEkuZS4sIHRoZXkgYXJlIG5vdCBjaGVja2VkIGZvciBleGlzdGluZyB0cmFpbGVycywKKyAqIGFuZCB0aGUgbmV3IHNpZ25vZmYgd2lsbCBiZSBzcGxpY2VkIGludG8gdGhlIGJ1ZmZlciBiZWZvcmUgdGhvc2UgYnl0ZXMuCisgKi8KK3ZvaWQgYXBwZW5kX3NpZ25vZmYoc3RydWN0IHN0cmJ1ZiAqbXNnYnVmLCBzaXplX3QgaWdub3JlX2Zvb3RlciwgdW5zaWduZWQgZmxhZyk7CisKK3ZvaWQgYXBwZW5kX2NvbmZsaWN0c19oaW50KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQlzdHJ1Y3Qgc3RyYnVmICptc2didWYsIGVudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgY2xlYW51cF9tb2RlKTsKK2VudW0gY29tbWl0X21zZ19jbGVhbnVwX21vZGUgZ2V0X2NsZWFudXBfbW9kZShjb25zdCBjaGFyICpjbGVhbnVwX2FyZywKKwlpbnQgdXNlX2VkaXRvcik7CisKK3ZvaWQgY2xlYW51cF9tZXNzYWdlKHN0cnVjdCBzdHJidWYgKm1zZ2J1ZiwKKwllbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXBfbW9kZSwgaW50IHZlcmJvc2UpOworCitpbnQgbWVzc2FnZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICAgICBlbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXBfbW9kZSk7CitpbnQgdGVtcGxhdGVfdW50b3VjaGVkKGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICp0ZW1wbGF0ZV9maWxlLAorCQkgICAgICAgZW51bSBjb21taXRfbXNnX2NsZWFudXBfbW9kZSBjbGVhbnVwX21vZGUpOworaW50IHVwZGF0ZV9oZWFkX3dpdGhfcmVmbG9nKGNvbnN0IHN0cnVjdCBjb21taXQgKm9sZF9oZWFkLAorCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19oZWFkLAorCQkJICAgIGNvbnN0IGNoYXIgKmFjdGlvbiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbXNnLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycik7Cit2b2lkIGNvbW1pdF9wb3N0X3Jld3JpdGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgY29uc3Qgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm5ld19oZWFkKTsKKworI2RlZmluZSBTVU1NQVJZX0lOSVRJQUxfQ09NTUlUICAgKDEgPDwgMCkKKyNkZWZpbmUgU1VNTUFSWV9TSE9XX0FVVEhPUl9EQVRFICgxIDw8IDEpCit2b2lkIHByaW50X2NvbW1pdF9zdW1tYXJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKKworaW50IHJlYWRfYXV0aG9yX3NjcmlwdChjb25zdCBjaGFyICpwYXRoLCBjaGFyICoqbmFtZSwgY2hhciAqKmVtYWlsLCBjaGFyICoqZGF0ZSwKKwkJICAgICAgIGludCBhbGxvd19taXNzaW5nKTsKK3ZvaWQgcGFyc2Vfc3RyYXRlZ3lfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNoYXIgKnJhd19vcHRzKTsKK2ludCB3cml0ZV9iYXNpY19zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNvbnN0IGNoYXIgKmhlYWRfbmFtZSwKKwkJICAgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkKTsKK3ZvaWQgc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKTsKK2ludCBzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChzdHJ1Y3QgcmVwb3NpdG9yeSogciwKKwkJCSAgICAgICBlbnVtIHJlcGxheV9hY3Rpb24gKmFjdGlvbik7CisjZW5kaWYgLyogU0VRVUVOQ0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NlcnZlLmMgYi9zZXJ2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzI1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2ZS5jCkBAIC0wLDAgKzEsMjU5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImxzLXJlZnMuaCIKKyNpbmNsdWRlICJzZXJ2ZS5oIgorI2luY2x1ZGUgInVwbG9hZC1wYWNrLmgiCisKK3N0YXRpYyBpbnQgYWx3YXlzX2FkdmVydGlzZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICp2YWx1ZSkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhZ2VudF9hZHZlcnRpc2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICp2YWx1ZSkKK3sKKwlpZiAodmFsdWUpCisJCXN0cmJ1Zl9hZGRzdHIodmFsdWUsIGdpdF91c2VyX2FnZW50X3Nhbml0aXplZCgpKTsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IHByb3RvY29sX2NhcGFiaWxpdHkgeworCS8qCisJICogVGhlIG5hbWUgb2YgdGhlIGNhcGFiaWxpdHkuICBUaGUgc2VydmVyIHVzZXMgdGhpcyBuYW1lIHdoZW4KKwkgKiBhZHZlcnRpc2luZyB0aGlzIGNhcGFiaWxpdHksIGFuZCB0aGUgY2xpZW50IHVzZXMgdGhpcyBuYW1lIHRvCisJICogc3BlY2lmeSB0aGlzIGNhcGFiaWxpdHkuCisJICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qCisJICogRnVuY3Rpb24gcXVlcmllZCB0byBzZWUgaWYgYSBjYXBhYmlsaXR5IHNob3VsZCBiZSBhZHZlcnRpc2VkLgorCSAqIE9wdGlvbmFsbHkgYSB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IGFkZGluZyBpdCB0byAndmFsdWUnLgorCSAqIElmIGEgdmFsdWUgaXMgYWRkZWQgdG8gJ3ZhbHVlJywgdGhlIHNlcnZlciB3aWxsIGFkdmVydGlzZSB0aGlzCisJICogY2FwYWJpbGl0eSBhcyAiPG5hbWU+PTx2YWx1ZT4iIGluc3RlYWQgb2YgIjxuYW1lPiIuCisJICovCisJaW50ICgqYWR2ZXJ0aXNlKShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHN0cmJ1ZiAqdmFsdWUpOworCisJLyoKKwkgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiBhIGNsaWVudCByZXF1ZXN0cyB0aGUgY2FwYWJpbGl0eSBhcyBhIGNvbW1hbmQuCisJICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUgcHJvdmlkZWQgdGhlIGNhcGFiaWxpdGllcyByZXF1ZXN0ZWQgdmlhICdrZXlzJworCSAqIGFzIHdlbGwgYXMgYSBzdHJ1Y3QgcGFja2V0X3JlYWRlciAncmVxdWVzdCcgd2hpY2ggdGhlIGNvbW1hbmQgc2hvdWxkCisJICogdXNlIHRvIHJlYWQgdGhlIGNvbW1hbmQgc3BlY2lmaWMgcGFydCBvZiB0aGUgcmVxdWVzdC4gIEV2ZXJ5IGNvbW1hbmQKKwkgKiBNVVNUIHJlYWQgdW50aWwgYSBmbHVzaCBwYWNrZXQgaXMgc2VlbiBiZWZvcmUgc2VuZGluZyBhIHJlc3BvbnNlLgorCSAqCisJICogVGhpcyBmaWVsZCBzaG91bGQgYmUgTlVMTCBmb3IgY2FwYWJpbGl0aWVzIHdoaWNoIGFyZSBub3QgY29tbWFuZHMuCisJICovCisJaW50ICgqY29tbWFuZCkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgICBzdHJ1Y3QgYXJndl9hcnJheSAqa2V5cywKKwkJICAgICAgIHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZXF1ZXN0KTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHJvdG9jb2xfY2FwYWJpbGl0eSBjYXBhYmlsaXRpZXNbXSA9IHsKKwl7ICJhZ2VudCIsIGFnZW50X2FkdmVydGlzZSwgTlVMTCB9LAorCXsgImxzLXJlZnMiLCBhbHdheXNfYWR2ZXJ0aXNlLCBsc19yZWZzIH0sCisJeyAiZmV0Y2giLCB1cGxvYWRfcGFja19hZHZlcnRpc2UsIHVwbG9hZF9wYWNrX3YyIH0sCisJeyAic2VydmVyLW9wdGlvbiIsIGFsd2F5c19hZHZlcnRpc2UsIE5VTEwgfSwKK307CisKK3N0YXRpYyB2b2lkIGFkdmVydGlzZV9jYXBhYmlsaXRpZXModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNhcGFiaWxpdHkgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhbHVlID0gU1RSQlVGX0lOSVQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYXBhYmlsaXRpZXMpOyBpKyspIHsKKwkJc3RydWN0IHByb3RvY29sX2NhcGFiaWxpdHkgKmMgPSAmY2FwYWJpbGl0aWVzW2ldOworCisJCWlmIChjLT5hZHZlcnRpc2UodGhlX3JlcG9zaXRvcnksICZ2YWx1ZSkpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmNhcGFiaWxpdHksIGMtPm5hbWUpOworCisJCQlpZiAodmFsdWUubGVuKSB7CisJCQkJc3RyYnVmX2FkZGNoKCZjYXBhYmlsaXR5LCAnPScpOworCQkJCXN0cmJ1Zl9hZGRidWYoJmNhcGFiaWxpdHksICZ2YWx1ZSk7CisJCQl9CisKKwkJCXN0cmJ1Zl9hZGRjaCgmY2FwYWJpbGl0eSwgJ1xuJyk7CisJCQlwYWNrZXRfd3JpdGUoMSwgY2FwYWJpbGl0eS5idWYsIGNhcGFiaWxpdHkubGVuKTsKKwkJfQorCisJCXN0cmJ1Zl9yZXNldCgmY2FwYWJpbGl0eSk7CisJCXN0cmJ1Zl9yZXNldCgmdmFsdWUpOworCX0KKworCXBhY2tldF9mbHVzaCgxKTsKKwlzdHJidWZfcmVsZWFzZSgmY2FwYWJpbGl0eSk7CisJc3RyYnVmX3JlbGVhc2UoJnZhbHVlKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm90b2NvbF9jYXBhYmlsaXR5ICpnZXRfY2FwYWJpbGl0eShjb25zdCBjaGFyICprZXkpCit7CisJaW50IGk7CisKKwlpZiAoIWtleSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYXBhYmlsaXRpZXMpOyBpKyspIHsKKwkJc3RydWN0IHByb3RvY29sX2NhcGFiaWxpdHkgKmMgPSAmY2FwYWJpbGl0aWVzW2ldOworCQljb25zdCBjaGFyICpvdXQ7CisJCWlmIChza2lwX3ByZWZpeChrZXksIGMtPm5hbWUsICZvdXQpICYmICghKm91dCB8fCAqb3V0ID09ICc9JykpCisJCQlyZXR1cm4gYzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBpc192YWxpZF9jYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBzdHJ1Y3QgcHJvdG9jb2xfY2FwYWJpbGl0eSAqYyA9IGdldF9jYXBhYmlsaXR5KGtleSk7CisKKwlyZXR1cm4gYyAmJiBjLT5hZHZlcnRpc2UodGhlX3JlcG9zaXRvcnksIE5VTEwpOworfQorCitzdGF0aWMgaW50IGlzX2NvbW1hbmQoY29uc3QgY2hhciAqa2V5LCBzdHJ1Y3QgcHJvdG9jb2xfY2FwYWJpbGl0eSAqKmNvbW1hbmQpCit7CisJY29uc3QgY2hhciAqb3V0OworCisJaWYgKHNraXBfcHJlZml4KGtleSwgImNvbW1hbmQ9IiwgJm91dCkpIHsKKwkJc3RydWN0IHByb3RvY29sX2NhcGFiaWxpdHkgKmNtZCA9IGdldF9jYXBhYmlsaXR5KG91dCk7CisKKwkJaWYgKCpjb21tYW5kKQorCQkJZGllKCJjb21tYW5kICclcycgcmVxdWVzdGVkIGFmdGVyIGFscmVhZHkgcmVxdWVzdGluZyBjb21tYW5kICclcyciLAorCQkJICAgIG91dCwgKCpjb21tYW5kKS0+bmFtZSk7CisJCWlmICghY21kIHx8ICFjbWQtPmFkdmVydGlzZSh0aGVfcmVwb3NpdG9yeSwgTlVMTCkgfHwgIWNtZC0+Y29tbWFuZCkKKwkJCWRpZSgiaW52YWxpZCBjb21tYW5kICclcyciLCBvdXQpOworCisJCSpjb21tYW5kID0gY21kOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhhc19jYXBhYmlsaXR5KGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICprZXlzLCBjb25zdCBjaGFyICpjYXBhYmlsaXR5LAorCQkgICBjb25zdCBjaGFyICoqdmFsdWUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGtleXMtPmFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICpvdXQ7CisJCWlmIChza2lwX3ByZWZpeChrZXlzLT5hcmd2W2ldLCBjYXBhYmlsaXR5LCAmb3V0KSAmJgorCQkgICAgKCEqb3V0IHx8ICpvdXQgPT0gJz0nKSkgeworCQkJaWYgKHZhbHVlKSB7CisJCQkJaWYgKCpvdXQgPT0gJz0nKQorCQkJCQlvdXQrKzsKKwkJCQkqdmFsdWUgPSBvdXQ7CisJCQl9CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitlbnVtIHJlcXVlc3Rfc3RhdGUgeworCVBST0NFU1NfUkVRVUVTVF9LRVlTLAorCVBST0NFU1NfUkVRVUVTVF9ET05FLAorfTsKKworc3RhdGljIGludCBwcm9jZXNzX3JlcXVlc3Qodm9pZCkKK3sKKwllbnVtIHJlcXVlc3Rfc3RhdGUgc3RhdGUgPSBQUk9DRVNTX1JFUVVFU1RfS0VZUzsKKwlzdHJ1Y3QgcGFja2V0X3JlYWRlciByZWFkZXI7CisJc3RydWN0IGFyZ3ZfYXJyYXkga2V5cyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgcHJvdG9jb2xfY2FwYWJpbGl0eSAqY29tbWFuZCA9IE5VTEw7CisKKwlwYWNrZXRfcmVhZGVyX2luaXQoJnJlYWRlciwgMCwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUgfAorCQkJICAgUEFDS0VUX1JFQURfR0VOVExFX09OX0VPRiB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgY2xpZW50IGNsb3NlZCB0aGVpciBlbmQgYmVmb3JlIHNlbmRpbmcgYW5vdGhlcgorCSAqIHJlcXVlc3QuICBJZiBzbyB3ZSBjYW4gdGVybWluYXRlIHRoZSBjb25uZWN0aW9uLgorCSAqLworCWlmIChwYWNrZXRfcmVhZGVyX3BlZWsoJnJlYWRlcikgPT0gUEFDS0VUX1JFQURfRU9GKQorCQlyZXR1cm4gMTsKKwlyZWFkZXIub3B0aW9ucyAmPSB+UEFDS0VUX1JFQURfR0VOVExFX09OX0VPRjsKKworCXdoaWxlIChzdGF0ZSAhPSBQUk9DRVNTX1JFUVVFU1RfRE9ORSkgeworCQlzd2l0Y2ggKHBhY2tldF9yZWFkZXJfcGVlaygmcmVhZGVyKSkgeworCQljYXNlIFBBQ0tFVF9SRUFEX0VPRjoKKwkJCUJVRygiU2hvdWxkIGhhdmUgYWxyZWFkeSBkaWVkIHdoZW4gc2VlaW5nIEVPRiIpOworCQljYXNlIFBBQ0tFVF9SRUFEX05PUk1BTDoKKwkJCS8qIGNvbGxlY3QgcmVxdWVzdDsgYSBzZXF1ZW5jZSBvZiBrZXlzIGFuZCB2YWx1ZXMgKi8KKwkJCWlmIChpc19jb21tYW5kKHJlYWRlci5saW5lLCAmY29tbWFuZCkgfHwKKwkJCSAgICBpc192YWxpZF9jYXBhYmlsaXR5KHJlYWRlci5saW5lKSkKKwkJCQlhcmd2X2FycmF5X3B1c2goJmtleXMsIHJlYWRlci5saW5lKTsKKwkJCWVsc2UKKwkJCQlkaWUoInVua25vd24gY2FwYWJpbGl0eSAnJXMnIiwgcmVhZGVyLmxpbmUpOworCisJCQkvKiBDb25zdW1lIHRoZSBwZWVrZWQgbGluZSAqLworCQkJcGFja2V0X3JlYWRlcl9yZWFkKCZyZWFkZXIpOworCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfRkxVU0g6CisJCQkvKgorCQkJICogSWYgbm8gY29tbWFuZCBhbmQgbm8ga2V5cyB3ZXJlIGdpdmVuIHRoZW4gdGhlIGNsaWVudAorCQkJICogd2FudGVkIHRvIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbi4KKwkJCSAqLworCQkJaWYgKCFrZXlzLmFyZ2MpCisJCQkJcmV0dXJuIDE7CisKKwkJCS8qCisJCQkgKiBUaGUgZmx1c2ggcGFja2V0IGlzbid0IGNvbnN1bWUgaGVyZSBsaWtlIGl0IGlzIGluCisJCQkgKiB0aGUgb3RoZXIgcGFydHMgb2YgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LiAgVGhpcyBpcworCQkJICogc28gdGhhdCB0aGUgY29tbWFuZCBjYW4gcmVhZCB0aGUgZmx1c2ggcGFja2V0IGFuZAorCQkJICogc2VlIHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QgaW4gdGhlIHNhbWUgd2F5IGl0IHdvdWxkCisJCQkgKiBpZiBjb21tYW5kIHNwZWNpZmljIGFyZ3VtZW50cyB3ZXJlIHByb3ZpZGVkIGFmdGVyIGEKKwkJCSAqIGRlbGltIHBhY2tldC4KKwkJCSAqLworCQkJc3RhdGUgPSBQUk9DRVNTX1JFUVVFU1RfRE9ORTsKKwkJCWJyZWFrOworCQljYXNlIFBBQ0tFVF9SRUFEX0RFTElNOgorCQkJLyogQ29uc3VtZSB0aGUgcGVla2VkIGxpbmUgKi8KKwkJCXBhY2tldF9yZWFkZXJfcmVhZCgmcmVhZGVyKTsKKworCQkJc3RhdGUgPSBQUk9DRVNTX1JFUVVFU1RfRE9ORTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFjb21tYW5kKQorCQlkaWUoIm5vIGNvbW1hbmQgcmVxdWVzdGVkIik7CisKKwljb21tYW5kLT5jb21tYW5kKHRoZV9yZXBvc2l0b3J5LCAma2V5cywgJnJlYWRlcik7CisKKwlhcmd2X2FycmF5X2NsZWFyKCZrZXlzKTsKKwlyZXR1cm4gMDsKK30KKworLyogTWFpbiBzZXJ2ZSBsb29wIGZvciBwcm90b2NvbCB2ZXJzaW9uIDIgKi8KK3ZvaWQgc2VydmUoc3RydWN0IHNlcnZlX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaWYgKG9wdGlvbnMtPmFkdmVydGlzZV9jYXBhYmlsaXRpZXMgfHwgIW9wdGlvbnMtPnN0YXRlbGVzc19ycGMpIHsKKwkJLyogc2VydmUgYnkgZGVmYXVsdCBzdXBwb3J0cyB2MiAqLworCQlwYWNrZXRfd3JpdGVfZm10KDEsICJ2ZXJzaW9uIDJcbiIpOworCisJCWFkdmVydGlzZV9jYXBhYmlsaXRpZXMoKTsKKwkJLyoKKwkJICogSWYgb25seSB0aGUgbGlzdCBvZiBjYXBhYmlsaXRpZXMgd2FzIHJlcXVlc3RlZCBleGl0CisJCSAqIGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcworCQkgKi8KKwkJaWYgKG9wdGlvbnMtPmFkdmVydGlzZV9jYXBhYmlsaXRpZXMpCisJCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiBzdGF0ZWxlc3MtcnBjIHdhcyByZXF1ZXN0ZWQgdGhlbiBleGl0IGFmdGVyCisJICogYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZQorCSAqLworCWlmIChvcHRpb25zLT5zdGF0ZWxlc3NfcnBjKSB7CisJCXByb2Nlc3NfcmVxdWVzdCgpOworCX0gZWxzZSB7CisJCWZvciAoOzspCisJCQlpZiAocHJvY2Vzc19yZXF1ZXN0KCkpCisJCQkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvc2VydmUuaCBiL3NlcnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkZGNhNwotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZlLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBTRVJWRV9ICisjZGVmaW5lIFNFUlZFX0gKKworc3RydWN0IGFyZ3ZfYXJyYXk7CitpbnQgaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKmtleXMsIGNvbnN0IGNoYXIgKmNhcGFiaWxpdHksCisJCSAgIGNvbnN0IGNoYXIgKip2YWx1ZSk7CisKK3N0cnVjdCBzZXJ2ZV9vcHRpb25zIHsKKwl1bnNpZ25lZCBhZHZlcnRpc2VfY2FwYWJpbGl0aWVzOworCXVuc2lnbmVkIHN0YXRlbGVzc19ycGM7Cit9OworI2RlZmluZSBTRVJWRV9PUFRJT05TX0lOSVQgeyAwIH0KK3ZvaWQgc2VydmUoc3RydWN0IHNlcnZlX29wdGlvbnMgKm9wdGlvbnMpOworCisjZW5kaWYgLyogU0VSVkVfSCAqLwpkaWZmIC0tZ2l0IGEvc2VydmVyLWluZm8uYyBiL3NlcnZlci1pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlMmNkZgotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZlci1pbmZvLmMKQEAgLTAsMCArMSwzNjcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCB7CisJRklMRSAqY3VyX2ZwOworCUZJTEUgKm9sZF9mcDsgLyogYmVjb21lcyBOVUxMIGlmIGl0IGRpZmZlcnMgZnJvbSBjdXJfZnAgKi8KKwlzdHJ1Y3Qgc3RyYnVmIGN1cl9zYjsKKwlzdHJ1Y3Qgc3RyYnVmIG9sZF9zYjsKK307CisKK3N0YXRpYyB2b2lkIHVpY19tYXJrX3N0YWxlKHN0cnVjdCB1cGRhdGVfaW5mb19jdHggKnVpYykKK3sKKwlmY2xvc2UodWljLT5vbGRfZnApOworCXVpYy0+b2xkX2ZwID0gTlVMTDsKK30KKworc3RhdGljIGludCB1aWNfaXNfc3RhbGUoY29uc3Qgc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqdWljKQoreworCXJldHVybiB1aWMtPm9sZF9mcCA9PSBOVUxMOworfQorCitzdGF0aWMgaW50IHVpY19wcmludGYoc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqdWljLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQgPSAtMTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCisJaWYgKHVpY19pc19zdGFsZSh1aWMpKSB7CisJCXJldCA9IHZmcHJpbnRmKHVpYy0+Y3VyX2ZwLCBmbXQsIGFwKTsKKwl9IGVsc2UgeworCQlzc2l6ZV90IHI7CisJCXN0cnVjdCBzdHJidWYgKmN1ciA9ICZ1aWMtPmN1cl9zYjsKKwkJc3RydWN0IHN0cmJ1ZiAqb2xkID0gJnVpYy0+b2xkX3NiOworCisJCXN0cmJ1Zl9yZXNldChjdXIpOworCQlzdHJidWZfdmluc2VydGYoY3VyLCAwLCBmbXQsIGFwKTsKKworCQlzdHJidWZfcmVzZXQob2xkKTsKKwkJc3RyYnVmX2dyb3cob2xkLCBjdXItPmxlbik7CisJCXIgPSBmcmVhZChvbGQtPmJ1ZiwgMSwgY3VyLT5sZW4sIHVpYy0+b2xkX2ZwKTsKKwkJaWYgKHIgIT0gY3VyLT5sZW4gfHwgbWVtY21wKG9sZC0+YnVmLCBjdXItPmJ1ZiwgcikpCisJCQl1aWNfbWFya19zdGFsZSh1aWMpOworCisJCWlmIChmd3JpdGUoY3VyLT5idWYsIDEsIGN1ci0+bGVuLCB1aWMtPmN1cl9mcCkgPT0gY3VyLT5sZW4pCisJCQlyZXQgPSAwOworCX0KKworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ3JlYXRlIHRoZSBmaWxlICJwYXRoIiBieSB3cml0aW5nIHRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIHJlbmFtaW5nCisgKiBpdCBpbnRvIHBsYWNlLiBUaGUgY29udGVudHMgb2YgdGhlIGZpbGUgY29tZSBmcm9tICJnZW5lcmF0ZSIsIHdoaWNoCisgKiBzaG91bGQgcmV0dXJuIG5vbi16ZXJvIGlmIGl0IGVuY291bnRlcnMgYW4gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX2luZm9fZmlsZShjaGFyICpwYXRoLAorCQkJaW50ICgqZ2VuZXJhdGUpKHN0cnVjdCB1cGRhdGVfaW5mb19jdHggKiksCisJCQlpbnQgZm9yY2UpCit7CisJY2hhciAqdG1wID0gbWtwYXRoZHVwKCIlc19YWFhYWFgiLCBwYXRoKTsKKwlpbnQgcmV0ID0gLTE7CisJaW50IGZkID0gLTE7CisJRklMRSAqdG9fY2xvc2U7CisJc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCB1aWMgPSB7CisJCS5jdXJfZnAgPSBOVUxMLAorCQkub2xkX2ZwID0gTlVMTCwKKwkJLmN1cl9zYiA9IFNUUkJVRl9JTklULAorCQkub2xkX3NiID0gU1RSQlVGX0lOSVQKKwl9OworCisJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhwYXRoKTsKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodG1wLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlnb3RvIG91dDsKKwl0b19jbG9zZSA9IHVpYy5jdXJfZnAgPSBmZG9wZW4oZmQsICJ3Iik7CisJaWYgKCF1aWMuY3VyX2ZwKQorCQlnb3RvIG91dDsKKwlmZCA9IC0xOworCisJLyogbm8gcHJvYmxlbSBvbiBFTk9FTlQgYW5kIG9sZF9mcCA9PSBOVUxMLCBpdCdzIHN0YWxlLCBub3cgKi8KKwlpZiAoIWZvcmNlKQorCQl1aWMub2xkX2ZwID0gZm9wZW5fb3Jfd2FybihwYXRoLCAiciIpOworCisJLyoKKwkgKiB1aWNfcHJpbnRmIHdpbGwgY29tcGFyZSBpbmNyZW1lbnRhbCBjb21wYXJpc29uIGFnYWluc3Qgb2xkX2ZwCisJICogYW5kIG1hcmsgdWljIGFzIHN0YWxlIGlmIG5lZWRlZAorCSAqLworCXJldCA9IGdlbmVyYXRlKCZ1aWMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogbmV3IGZpbGUgbWF5IGJlIHNob3J0ZXIgdGhhbiB0aGUgb2xkIG9uZSwgY2hlY2sgaGVyZSAqLworCWlmICghdWljX2lzX3N0YWxlKCZ1aWMpKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlsb25nIG5ld19sZW4gPSBmdGVsbCh1aWMuY3VyX2ZwKTsKKwkJaW50IG9sZF9mZCA9IGZpbGVubyh1aWMub2xkX2ZwKTsKKworCQlpZiAobmV3X2xlbiA8IDApIHsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGZzdGF0KG9sZF9mZCwgJnN0KSB8fCAoc3Quc3Rfc2l6ZSAhPSAoc2l6ZV90KW5ld19sZW4pKQorCQkJdWljX21hcmtfc3RhbGUoJnVpYyk7CisJfQorCisJdWljLmN1cl9mcCA9IE5VTEw7CisJaWYgKGZjbG9zZSh0b19jbG9zZSkpCisJCWdvdG8gb3V0OworCisJaWYgKHVpY19pc19zdGFsZSgmdWljKSkgeworCQlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHRtcCkgPCAwKQorCQkJZ290byBvdXQ7CisJCWlmIChyZW5hbWUodG1wLCBwYXRoKSA8IDApCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQl1bmxpbmsodG1wKTsKKwl9CisJcmV0ID0gMDsKKworb3V0OgorCWlmIChyZXQpIHsKKwkJZXJyb3JfZXJybm8oInVuYWJsZSB0byB1cGRhdGUgJXMiLCBwYXRoKTsKKwkJaWYgKHVpYy5jdXJfZnApCisJCQlmY2xvc2UodWljLmN1cl9mcCk7CisJCWVsc2UgaWYgKGZkID49IDApCisJCQljbG9zZShmZCk7CisJCXVubGluayh0bXApOworCX0KKwlmcmVlKHRtcCk7CisJaWYgKHVpYy5vbGRfZnApCisJCWZjbG9zZSh1aWMub2xkX2ZwKTsKKwlzdHJidWZfcmVsZWFzZSgmdWljLm9sZF9zYik7CisJc3RyYnVmX3JlbGVhc2UoJnVpYy5jdXJfc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2luZm9fcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB1cGRhdGVfaW5mb19jdHggKnVpYyA9IGNiX2RhdGE7CisJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKKwlpZiAoIW8pCisJCXJldHVybiAtMTsKKworCWlmICh1aWNfcHJpbnRmKHVpYywgIiVzCSVzXG4iLCBvaWRfdG9faGV4KG9pZCksIHBhdGgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKG8tPnR5cGUgPT0gT0JKX1RBRykgeworCQlvID0gZGVyZWZfdGFnKHRoZV9yZXBvc2l0b3J5LCBvLCBwYXRoLCAwKTsKKwkJaWYgKG8pCisJCQlpZiAodWljX3ByaW50Zih1aWMsICIlcwklc157fVxuIiwKKwkJCQlvaWRfdG9faGV4KCZvLT5vaWQpLCBwYXRoKSA8IDApCisJCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW5lcmF0ZV9pbmZvX3JlZnMoc3RydWN0IHVwZGF0ZV9pbmZvX2N0eCAqdWljKQoreworCXJldHVybiBmb3JfZWFjaF9yZWYoYWRkX2luZm9fcmVmLCB1aWMpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9pbmZvX3JlZnMoaW50IGZvcmNlKQoreworCWNoYXIgKnBhdGggPSBnaXRfcGF0aGR1cCgiaW5mby9yZWZzIik7CisJaW50IHJldCA9IHVwZGF0ZV9pbmZvX2ZpbGUocGF0aCwgZ2VuZXJhdGVfaW5mb19yZWZzLCBmb3JjZSk7CisJZnJlZShwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBwYWNrcyAqLworc3RhdGljIHN0cnVjdCBwYWNrX2luZm8geworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCBvbGRfbnVtOworCWludCBuZXdfbnVtOworfSAqKmluZm87CitzdGF0aWMgaW50IG51bV9wYWNrOworCitzdGF0aWMgc3RydWN0IHBhY2tfaW5mbyAqZmluZF9wYWNrX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGluZm9baV0tPnA7CisJCWlmICghc3RyY21wKHBhY2tfYmFzZW5hbWUocCksIG5hbWUpKQorCQkJcmV0dXJuIGluZm9baV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBSZXR1cm5zIG5vbi16ZXJvIHdoZW4gd2UgZGV0ZWN0IHRoYXQgdGhlIGluZm8gaW4gdGhlCisgKiBvbGQgZmlsZSBpcyB1c2VsZXNzLgorICovCitzdGF0aWMgaW50IHBhcnNlX3BhY2tfZGVmKGNvbnN0IGNoYXIgKnBhY2tuYW1lLCBpbnQgb2xkX2NudCkKK3sKKwlzdHJ1Y3QgcGFja19pbmZvICppID0gZmluZF9wYWNrX2J5X25hbWUocGFja25hbWUpOworCWlmIChpKSB7CisJCWktPm9sZF9udW0gPSBvbGRfY250OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSB7CisJCS8qIFRoZSBmaWxlIGRlc2NyaWJlcyBhIHBhY2sgdGhhdCBpcyBubyBsb25nZXIgaGVyZSAqLworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qIFJldHVybnMgbm9uLXplcm8gd2hlbiB3ZSBkZXRlY3QgdGhhdCB0aGUgaW5mbyBpbiB0aGUKKyAqIG9sZCBmaWxlIGlzIHVzZWxlc3MuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9wYWNrX2luZm9fZmlsZShjb25zdCBjaGFyICppbmZvZmlsZSkKK3sKKwlGSUxFICpmcDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgb2xkX2NudCA9IDA7CisJaW50IHN0YWxlID0gMTsKKworCWZwID0gZm9wZW5fb3Jfd2FybihpbmZvZmlsZSwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gMTsgLyogbm9uZXhpc3RlbnQgaXMgbm90IGFuIGVycm9yLiAqLworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmcCkgIT0gRU9GKSB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKworCQlpZiAoIWxpbmUubGVuKQorCQkJY29udGludWU7CisKKwkJaWYgKHNraXBfcHJlZml4KGxpbmUuYnVmLCAiUCAiLCAmYXJnKSkgeworCQkJLyogUCBuYW1lICovCisJCQlpZiAocGFyc2VfcGFja19kZWYoYXJnLCBvbGRfY250KyspKQorCQkJCWdvdG8gb3V0X3N0YWxlOworCQl9IGVsc2UgaWYgKGxpbmUuYnVmWzBdID09ICdEJykgeworCQkJLyogd2UgdXNlZCB0byBlbWl0IEQgYnV0IHRoYXQgd2FzIG1pc2d1aWRlZC4gKi8KKwkJCWdvdG8gb3V0X3N0YWxlOworCQl9IGVsc2UgaWYgKGxpbmUuYnVmWzBdID09ICdUJykgeworCQkJLyogd2UgdXNlZCB0byBlbWl0IFQgYnV0IG5vYm9keSB1c2VzIGl0LiAqLworCQkJZ290byBvdXRfc3RhbGU7CisJCX0gZWxzZSB7CisJCQllcnJvcigidW5yZWNvZ25pemVkOiAlcyIsIGxpbmUuYnVmKTsKKwkJfQorCX0KKwlzdGFsZSA9IDA7CisKKyBvdXRfc3RhbGU6CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWZjbG9zZShmcCk7CisJcmV0dXJuIHN0YWxlOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfaW5mbyhjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHBhY2tfaW5mbyAqY29uc3QgKmEgPSBhXzsKKwlzdHJ1Y3QgcGFja19pbmZvICpjb25zdCAqYiA9IGJfOworCisJaWYgKDAgPD0gKCphKS0+b2xkX251bSAmJiAwIDw9ICgqYiktPm9sZF9udW0pCisJCS8qIEtlZXAgdGhlIG9yZGVyIGluIHRoZSBvcmlnaW5hbCAqLworCQlyZXR1cm4gKCphKS0+b2xkX251bSAtICgqYiktPm9sZF9udW07CisJZWxzZSBpZiAoMCA8PSAoKmEpLT5vbGRfbnVtKQorCQkvKiBPbmx5IEEgZXhpc3RlZCBpbiB0aGUgb3JpZ2luYWwgc28gQiBpcyBvYnZpb3VzbHkgbmV3ZXIgKi8KKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKDAgPD0gKCpiKS0+b2xkX251bSkKKwkJLyogVGhlIG90aGVyIHdheSBhcm91bmQuICovCisJCXJldHVybiAxOworCisJLyogdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgYnV0IGF0IGxlYXN0IGtlZXAgdGhlIGNvbXBhcmlzb24gc3RhYmxlICovCisJaWYgKCgqYSktPnAgPT0gKCpiKS0+cCkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoKCphKS0+cCA8ICgqYiktPnApCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBpbml0X3BhY2tfaW5mbyhjb25zdCBjaGFyICppbmZvZmlsZSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCBzdGFsZTsKKwlpbnQgaTsKKwlzaXplX3QgYWxsb2MgPSAwOworCisJZm9yIChwID0gZ2V0X2FsbF9wYWNrcyh0aGVfcmVwb3NpdG9yeSk7IHA7IHAgPSBwLT5uZXh0KSB7CisJCS8qIHdlIGlnbm9yZSB0aGluZ3Mgb24gYWx0ZXJuYXRlIHBhdGggc2luY2UgdGhleSBhcmUKKwkJICogbm90IGF2YWlsYWJsZSB0byB0aGUgcHVsbGVycyBpbiBnZW5lcmFsLgorCQkgKi8KKwkJaWYgKCFwLT5wYWNrX2xvY2FsIHx8ICFmaWxlX2V4aXN0cyhwLT5wYWNrX25hbWUpKQorCQkJY29udGludWU7CisKKwkJaSA9IG51bV9wYWNrKys7CisJCUFMTE9DX0dST1coaW5mbywgbnVtX3BhY2ssIGFsbG9jKTsKKwkJaW5mb1tpXSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwYWNrX2luZm8pKTsKKwkJaW5mb1tpXS0+cCA9IHA7CisJCWluZm9baV0tPm9sZF9udW0gPSAtMTsKKwl9CisKKwlpZiAoaW5mb2ZpbGUgJiYgIWZvcmNlKQorCQlzdGFsZSA9IHJlYWRfcGFja19pbmZvX2ZpbGUoaW5mb2ZpbGUpOworCWVsc2UKKwkJc3RhbGUgPSAxOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWNrOyBpKyspCisJCWlmIChzdGFsZSkKKwkJCWluZm9baV0tPm9sZF9udW0gPSAtMTsKKworCS8qIHJlbnVtYmVyIHRoZW0gKi8KKwlRU09SVChpbmZvLCBudW1fcGFjaywgY29tcGFyZV9pbmZvKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykKKwkJaW5mb1tpXS0+bmV3X251bSA9IGk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcGFja19pbmZvKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYWNrOyBpKyspCisJCWZyZWUoaW5mb1tpXSk7CisJZnJlZShpbmZvKTsKK30KKworc3RhdGljIGludCB3cml0ZV9wYWNrX2luZm9fZmlsZShzdHJ1Y3QgdXBkYXRlX2luZm9fY3R4ICp1aWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG51bV9wYWNrOyBpKyspIHsKKwkJaWYgKHVpY19wcmludGYodWljLCAiUCAlc1xuIiwgcGFja19iYXNlbmFtZShpbmZvW2ldLT5wKSkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKwlpZiAodWljX3ByaW50Zih1aWMsICJcbiIpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9pbmZvX3BhY2tzKGludCBmb3JjZSkKK3sKKwljaGFyICppbmZvZmlsZSA9IG1rcGF0aGR1cCgiJXMvaW5mby9wYWNrcyIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCWludCByZXQ7CisKKwlpbml0X3BhY2tfaW5mbyhpbmZvZmlsZSwgZm9yY2UpOworCXJldCA9IHVwZGF0ZV9pbmZvX2ZpbGUoaW5mb2ZpbGUsIHdyaXRlX3BhY2tfaW5mb19maWxlLCBmb3JjZSk7CisJZnJlZV9wYWNrX2luZm8oKTsKKwlmcmVlKGluZm9maWxlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBwdWJsaWMgKi8KK2ludCB1cGRhdGVfc2VydmVyX2luZm8oaW50IGZvcmNlKQoreworCS8qIFdlIHdvdWxkIGFkZCBtb3JlIGR1bWItc2VydmVyIHN1cHBvcnQgZmlsZXMgbGF0ZXIsCisJICogaW5jbHVkaW5nIGluZGV4IG9mIGF2YWlsYWJsZSBwYWNrIGZpbGVzIGFuZCB0aGVpcgorCSAqIGludGVuZGVkIGF1ZGllbmNlcy4KKwkgKi8KKwlpbnQgZXJycyA9IDA7CisKKwllcnJzID0gZXJycyB8IHVwZGF0ZV9pbmZvX3JlZnMoZm9yY2UpOworCWVycnMgPSBlcnJzIHwgdXBkYXRlX2luZm9fcGFja3MoZm9yY2UpOworCisJLyogcmVtb3ZlIGxlZnRvdmVyIHJldi1jYWNoZSBmaWxlIGlmIHRoZXJlIGlzIGFueSAqLworCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCJpbmZvL3Jldi1jYWNoZSIpKTsKKworCXJldHVybiBlcnJzOworfQpkaWZmIC0tZ2l0IGEvc2V0dXAuYyBiL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhOTI4NQotLS0gL2Rldi9udWxsCisrKyBiL3NldHVwLmMKQEAgLTAsMCArMSwxMzIwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjaGRpci1ub3RpZnkuaCIKKyNpbmNsdWRlICJwcm9taXNvci1yZW1vdGUuaCIKKworc3RhdGljIGludCBpbnNpZGVfZ2l0X2RpciA9IC0xOworc3RhdGljIGludCBpbnNpZGVfd29ya190cmVlID0gLTE7CitzdGF0aWMgaW50IHdvcmtfdHJlZV9jb25maWdfaXNfYm9ndXM7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RhcnR1cF9pbmZvIHRoZV9zdGFydHVwX2luZm87CitzdHJ1Y3Qgc3RhcnR1cF9pbmZvICpzdGFydHVwX2luZm8gPSAmdGhlX3N0YXJ0dXBfaW5mbzsKKworLyoKKyAqIFRoZSBpbnB1dCBwYXJhbWV0ZXIgbXVzdCBjb250YWluIGFuIGFic29sdXRlIHBhdGgsIGFuZCBpdCBtdXN0IGFscmVhZHkgYmUKKyAqIG5vcm1hbGl6ZWQuCisgKgorICogRmluZCB0aGUgcGFydCBvZiBhbiBhYnNvbHV0ZSBwYXRoIHRoYXQgbGllcyBpbnNpZGUgdGhlIHdvcmsgdHJlZSBieQorICogZGVyZWZlcmVuY2luZyBzeW1saW5rcyBvdXRzaWRlIHRoZSB3b3JrIHRyZWUsIGZvciBleGFtcGxlOgorICogL2RpcjEvcmVwby9kaXIyL2ZpbGUgICAod29yayB0cmVlIGlzIC9kaXIxL3JlcG8pICAgICAgLT4gZGlyMi9maWxlCisgKiAvZGlyL2ZpbGUgICAgICAgICAgICAgICh3b3JrIHRyZWUgaXMgLykgICAgICAgICAgICAgICAtPiBkaXIvZmlsZQorICogL2Rpci9zeW1saW5rMS9zeW1saW5rMiAoc3ltbGluazEgcG9pbnRzIHRvIHdvcmsgdHJlZSkgLT4gc3ltbGluazIKKyAqIC9kaXIvcmVwb2xpbmsvZmlsZSAgICAgKHJlcG9saW5rIHBvaW50cyB0byAvZGlyL3JlcG8pIC0+IGZpbGUKKyAqIC9kaXIvcmVwbyAgICAgICAgICAgICAgKGV4YWN0bHkgZXF1YWwgdG8gd29yayB0cmVlKSAgIC0+IChlbXB0eSBzdHJpbmcpCisgKi8KK3N0YXRpYyBpbnQgYWJzcGF0aF9wYXJ0X2luc2lkZV9yZXBvKGNoYXIgKnBhdGgpCit7CisJc2l6ZV90IGxlbjsKKwlzaXplX3Qgd3RsZW47CisJY2hhciAqcGF0aDA7CisJaW50IG9mZjsKKwljb25zdCBjaGFyICp3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCisJaWYgKCF3b3JrX3RyZWUpCisJCXJldHVybiAtMTsKKwl3dGxlbiA9IHN0cmxlbih3b3JrX3RyZWUpOworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlvZmYgPSBvZmZzZXRfMXN0X2NvbXBvbmVudChwYXRoKTsKKworCS8qIGNoZWNrIGlmIHdvcmsgdHJlZSBpcyBhbHJlYWR5IHRoZSBwcmVmaXggKi8KKwlpZiAod3RsZW4gPD0gbGVuICYmICFmc3BhdGhuY21wKHBhdGgsIHdvcmtfdHJlZSwgd3RsZW4pKSB7CisJCWlmIChwYXRoW3d0bGVuXSA9PSAnLycpIHsKKwkJCW1lbW1vdmUocGF0aCwgcGF0aCArIHd0bGVuICsgMSwgbGVuIC0gd3RsZW4pOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAocGF0aFt3dGxlbiAtIDFdID09ICcvJyB8fCBwYXRoW3d0bGVuXSA9PSAnXDAnKSB7CisJCQkvKiB3b3JrIHRyZWUgaXMgdGhlIHJvb3QsIG9yIHRoZSB3aG9sZSBwYXRoICovCisJCQltZW1tb3ZlKHBhdGgsIHBhdGggKyB3dGxlbiwgbGVuIC0gd3RsZW4gKyAxKTsKKwkJCXJldHVybiAwOworCQl9CisJCS8qIHdvcmsgdHJlZSBtaWdodCBtYXRjaCBiZWdpbm5pbmcgb2YgYSBzeW1saW5rIHRvIHdvcmsgdHJlZSAqLworCQlvZmYgPSB3dGxlbjsKKwl9CisJcGF0aDAgPSBwYXRoOworCXBhdGggKz0gb2ZmOworCisJLyogY2hlY2sgZWFjaCAnLyctdGVybWluYXRlZCBsZXZlbCAqLworCXdoaWxlICgqcGF0aCkgeworCQlwYXRoKys7CisJCWlmICgqcGF0aCA9PSAnLycpIHsKKwkJCSpwYXRoID0gJ1wwJzsKKwkJCWlmIChmc3BhdGhjbXAocmVhbF9wYXRoKHBhdGgwKSwgd29ya190cmVlKSA9PSAwKSB7CisJCQkJbWVtbW92ZShwYXRoMCwgcGF0aCArIDEsIGxlbiAtIChwYXRoIC0gcGF0aDApKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCSpwYXRoID0gJy8nOworCQl9CisJfQorCisJLyogY2hlY2sgd2hvbGUgcGF0aCAqLworCWlmIChmc3BhdGhjbXAocmVhbF9wYXRoKHBhdGgwKSwgd29ya190cmVlKSA9PSAwKSB7CisJCSpwYXRoMCA9ICdcMCc7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIE5vcm1hbGl6ZSAicGF0aCIsIHByZXBlbmRpbmcgdGhlICJwcmVmaXgiIGZvciByZWxhdGl2ZSBwYXRocy4gSWYKKyAqIHJlbWFpbmluZ19wcmVmaXggaXMgbm90IE5VTEwsIHJldHVybiB0aGUgYWN0dWFsIHByZWZpeCBzdGlsbAorICogcmVtYWlucyBpbiB0aGUgcGF0aC4gRm9yIGV4YW1wbGUsIHByZWZpeCA9IHN1YjEvc3ViMi8gYW5kIHBhdGggaXMKKyAqCisgKiAgZm9vICAgICAgICAgIC0+IHN1YjEvc3ViMi9mb28gIChmdWxsIHByZWZpeCkKKyAqICAuLi9mb28gICAgICAgLT4gc3ViMS9mb28gICAgICAgKHJlbWFpbmluZyBwcmVmaXggaXMgc3ViMS8pCisgKiAgLi4vLi4vYmFyICAgIC0+IGJhciAgICAgICAgICAgIChubyByZW1haW5pbmcgcHJlZml4KQorICogIC4uLy4uL3N1YjEvc3ViMi9mb28gLT4gc3ViMS9zdWIyL2ZvbyAoYnV0IG5vIHJlbWFpbmluZyBwcmVmaXgpCisgKiAgYHB3ZGAvLi4vYmFyIC0+IHN1YjEvYmFyICAgICAgIChubyByZW1haW5pbmcgcHJlZml4KQorICovCitjaGFyICpwcmVmaXhfcGF0aF9nZW50bHkoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbGVuLAorCQkJIGludCAqcmVtYWluaW5nX3ByZWZpeCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICpvcmlnID0gcGF0aDsKKwljaGFyICpzYW5pdGl6ZWQ7CisJaWYgKGlzX2Fic29sdXRlX3BhdGgob3JpZykpIHsKKwkJc2FuaXRpemVkID0geG1hbGxvY3ooc3RybGVuKHBhdGgpKTsKKwkJaWYgKHJlbWFpbmluZ19wcmVmaXgpCisJCQkqcmVtYWluaW5nX3ByZWZpeCA9IDA7CisJCWlmIChub3JtYWxpemVfcGF0aF9jb3B5X2xlbihzYW5pdGl6ZWQsIHBhdGgsIHJlbWFpbmluZ19wcmVmaXgpKSB7CisJCQlmcmVlKHNhbml0aXplZCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpZiAoYWJzcGF0aF9wYXJ0X2luc2lkZV9yZXBvKHNhbml0aXplZCkpIHsKKwkJCWZyZWUoc2FuaXRpemVkKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJc2FuaXRpemVkID0geHN0cmZtdCgiJS4qcyVzIiwgbGVuLCBsZW4gPyBwcmVmaXggOiAiIiwgcGF0aCk7CisJCWlmIChyZW1haW5pbmdfcHJlZml4KQorCQkJKnJlbWFpbmluZ19wcmVmaXggPSBsZW47CisJCWlmIChub3JtYWxpemVfcGF0aF9jb3B5X2xlbihzYW5pdGl6ZWQsIHNhbml0aXplZCwgcmVtYWluaW5nX3ByZWZpeCkpIHsKKwkJCWZyZWUoc2FuaXRpemVkKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCXJldHVybiBzYW5pdGl6ZWQ7Cit9CisKK2NoYXIgKnByZWZpeF9wYXRoKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGxlbiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpyID0gcHJlZml4X3BhdGhfZ2VudGx5KHByZWZpeCwgbGVuLCBOVUxMLCBwYXRoKTsKKwlpZiAoIXIpIHsKKwkJY29uc3QgY2hhciAqaGludF9wYXRoID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKwkJaWYgKCFoaW50X3BhdGgpCisJCQloaW50X3BhdGggPSBnZXRfZ2l0X2RpcigpOworCQlkaWUoXygiJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkgYXQgJyVzJyIpLCBwYXRoLAorCQkgICAgYWJzb2x1dGVfcGF0aChoaW50X3BhdGgpKTsKKwl9CisJcmV0dXJuIHI7Cit9CisKK2ludCBwYXRoX2luc2lkZV9yZXBvKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgbGVuID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCWNoYXIgKnIgPSBwcmVmaXhfcGF0aF9nZW50bHkocHJlZml4LCBsZW4sIE5VTEwsIHBhdGgpOworCWlmIChyKSB7CisJCWZyZWUocik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqYXJnKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHNraXBfcHJlZml4KGFyZywgIjovIiwgJmFyZykpIHsKKwkJaWYgKCEqYXJnKSAvKiAiOi8iIGlzIHJvb3QgZGlyLCBhbHdheXMgZXhpc3RzICovCisJCQlyZXR1cm4gMTsKKwkJcHJlZml4ID0gTlVMTDsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIjohIiwgJmFyZykgfHwKKwkJICAgc2tpcF9wcmVmaXgoYXJnLCAiOl4iLCAmYXJnKSkgeworCQlpZiAoISphcmcpIC8qIGV4Y2x1ZGluZyBldmVyeXRoaW5nIGlzIHNpbGx5LCBidXQgYWxsb3dlZCAqLworCQkJcmV0dXJuIDE7CisJfQorCisJaWYgKHByZWZpeCkKKwkJYXJnID0gdG9fZnJlZSA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGFyZyk7CisKKwlpZiAoIWxzdGF0KGFyZywgJnN0KSkgeworCQlmcmVlKHRvX2ZyZWUpOworCQlyZXR1cm4gMTsgLyogZmlsZSBleGlzdHMgKi8KKwl9CisJaWYgKGlzX21pc3NpbmdfZmlsZV9lcnJvcihlcnJubykpIHsKKwkJZnJlZSh0b19mcmVlKTsKKwkJcmV0dXJuIDA7IC8qIGZpbGUgZG9lcyBub3QgZXhpc3QgKi8KKwl9CisJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGF0ICclcyciKSwgYXJnKTsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gZGllX3ZlcmlmeV9maWxlbmFtZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJIGNvbnN0IGNoYXIgKmFyZywKKwkJCQkJIGludCBkaWFnbm9zZV9taXNzcGVsdF9yZXYpCit7CisJaWYgKCFkaWFnbm9zZV9taXNzcGVsdF9yZXYpCisJCWRpZShfKCIlczogbm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUuXG4iCisJCSAgICAgICJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIiksCisJCSAgICBhcmcpOworCS8qCisJICogU2F5aW5nICInKGljYXNlKWZvbycgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGluZGV4IiB3aGVuIHRoZQorCSAqIHVzZXIgZ2F2ZSB1cyAiOihpY2FzZSlmb28iIGlzIGp1c3Qgc3R1cGlkLiAgQSBtYWdpYyBwYXRoc3BlYworCSAqIGJlZ2lucyB3aXRoIGEgY29sb24gYW5kIGlzIGZvbGxvd2VkIGJ5IGEgbm9uLWFsbnVtOyBkbyBub3QKKwkgKiBsZXQgbWF5YmVfZGllX29uX21pc3NwZWx0X29iamVjdF9uYW1lKCkgZXZlbiB0cmlnZ2VyLgorCSAqLworCWlmICghKGFyZ1swXSA9PSAnOicgJiYgIWlzYWxudW0oYXJnWzFdKSkpCisJCW1heWJlX2RpZV9vbl9taXNzcGVsdF9vYmplY3RfbmFtZShyLCBhcmcsIHByZWZpeCk7CisKKwkvKiAuLi4gb3IgZmFsbCBiYWNrIHRoZSBtb3N0IGdlbmVyYWwgbWVzc2FnZS4gKi8KKwlkaWUoXygiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKwkgICAgICAiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKwkgICAgICAiJ2dpdCA8Y29tbWFuZD4gWzxyZXZpc2lvbj4uLi5dIC0tIFs8ZmlsZT4uLi5dJyIpLCBhcmcpOworCit9CisKKy8qCisgKiBDaGVjayBmb3IgYXJndW1lbnRzIHRoYXQgZG9uJ3QgcmVzb2x2ZSBhcyBhY3R1YWwgZmlsZXMsCisgKiBidXQgd2hpY2ggbG9vayBzdWZmaWNpZW50bHkgbGlrZSBwYXRoc3BlY3MgdGhhdCB3ZSdsbCBjb25zaWRlcgorICogdGhlbSBzdWNoIGZvciB0aGUgcHVycG9zZXMgb2YgcmV2L3BhdGhzcGVjIERXSU0gcGFyc2luZy4KKyAqLworc3RhdGljIGludCBsb29rc19saWtlX3BhdGhzcGVjKGNvbnN0IGNoYXIgKmFyZykKK3sKKwljb25zdCBjaGFyICpwOworCWludCBlc2NhcGVkID0gMDsKKworCS8qCisJICogV2lsZGNhcmQgY2hhcmFjdGVycyBpbXBseSB0aGUgdXNlciBpcyBsb29raW5nIHRvIG1hdGNoIHBhdGhzcGVjcworCSAqIHRoYXQgYXJlbid0IGluIHRoZSBmaWxlc3lzdGVtLiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGluY2x1ZGUKKwkgKiBiYWNrc2xhc2ggZXZlbiB0aG91Z2ggaXQncyBhIGdsb2Igc3BlY2lhbDsgYnkgaXRzZWxmIGl0IGRvZXNuJ3QKKwkgKiBjYXVzZSBhbnkgaW5jcmVhc2UgaW4gdGhlIG1hdGNoLiBMaWtld2lzZSBpZ25vcmUgYmFja3NsYXNoLWVzY2FwZWQKKwkgKiB3aWxkY2FyZCBjaGFyYWN0ZXJzLgorCSAqLworCWZvciAocCA9IGFyZzsgKnA7IHArKykgeworCQlpZiAoZXNjYXBlZCkgeworCQkJZXNjYXBlZCA9IDA7CisJCX0gZWxzZSBpZiAoaXNfZ2xvYl9zcGVjaWFsKCpwKSkgeworCQkJaWYgKCpwID09ICdcXCcpCisJCQkJZXNjYXBlZCA9IDE7CisJCQllbHNlCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKiBsb25nLWZvcm0gcGF0aHNwZWMgbWFnaWMgKi8KKwlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiOigiKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFZlcmlmeSBhIGZpbGVuYW1lIHRoYXQgd2UgZ290IGFzIGFuIGFyZ3VtZW50IGZvciBhIHBhdGhzcGVjCisgKiBlbnRyeS4gTm90ZSB0aGF0IGEgZmlsZW5hbWUgdGhhdCBiZWdpbnMgd2l0aCAiLSIgbmV2ZXIgdmVyaWZpZXMKKyAqIGFzIHRydWUsIGJlY2F1c2UgZXZlbiBpZiBzdWNoIGEgZmlsZW5hbWUgd2VyZSB0byBleGlzdCwgd2Ugd2FudAorICogaXQgdG8gYmUgcHJlY2VkZWQgYnkgdGhlICItLSIgbWFya2VyIChvciB3ZSB3YW50IHRoZSB1c2VyIHRvCisgKiB1c2UgYSBmb3JtYXQgbGlrZSAiLi8tZmlsZW5hbWUiKQorICoKKyAqIFRoZSAiZGlhZ25vc2VfbWlzc3BlbHRfcmV2IiBpcyB1c2VkIHRvIHByb3ZpZGUgYSB1c2VyLWZyaWVuZGx5CisgKiBkaWFnbm9zaXMgd2hlbiBkeWluZyB1cG9uIGZpbmRpbmcgdGhhdCAibmFtZSIgaXMgbm90IGEgcGF0aG5hbWUuCisgKiBJZiBzZXQgdG8gMSwgdGhlIGRpYWdub3NpcyB3aWxsIHRyeSB0byBkaWFnbm9zZSAibmFtZSIgYXMgYW4KKyAqIGludmFsaWQgb2JqZWN0IG5hbWUgKGUuZy4gSEVBRDpmb28pLiBJZiBzZXQgdG8gMCwgdGhlIGRpYWdub3NpcworICogd2lsbCBvbmx5IGNvbXBsYWluIGFib3V0IGFuIGluZXhpc3RpbmcgZmlsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSBjYWxsZWQgdG8gY2hlY2sgdGhhdCBhICJmaWxlIG9yIHJldiIKKyAqIGFyZ3VtZW50IGlzIHVuYW1iaWd1b3VzLiBJbiB0aGlzIGNhc2UsIHRoZSBjYWxsZXIgd2lsbCB3YW50CisgKiBkaWFnbm9zZV9taXNzcGVsdF9yZXYgPT0gMSB3aGVuIHZlcmlmeWluZyB0aGUgZmlyc3Qgbm9uLXJldgorICogYXJndW1lbnQgKHdoaWNoIGNvdWxkIGhhdmUgYmVlbiBhIHJldmlzaW9uKSwgYW5kCisgKiBkaWFnbm9zZV9taXNzcGVsdF9yZXYgPT0gMCBmb3IgdGhlIG5leHQgb25lcyAoYmVjYXVzZSB3ZSBhbHJlYWR5CisgKiBzYXcgYSBmaWxlbmFtZSwgdGhlcmUncyBub3QgYW1iaWd1aXR5IGFueW1vcmUpLgorICovCit2b2lkIHZlcmlmeV9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgY29uc3QgY2hhciAqYXJnLAorCQkgICAgIGludCBkaWFnbm9zZV9taXNzcGVsdF9yZXYpCit7CisJaWYgKCphcmcgPT0gJy0nKQorCQlkaWUoXygib3B0aW9uICclcycgbXVzdCBjb21lIGJlZm9yZSBub24tb3B0aW9uIGFyZ3VtZW50cyIpLCBhcmcpOworCWlmIChsb29rc19saWtlX3BhdGhzcGVjKGFyZykgfHwgY2hlY2tfZmlsZW5hbWUocHJlZml4LCBhcmcpKQorCQlyZXR1cm47CisJZGllX3ZlcmlmeV9maWxlbmFtZSh0aGVfcmVwb3NpdG9yeSwgcHJlZml4LCBhcmcsIGRpYWdub3NlX21pc3NwZWx0X3Jldik7Cit9CisKKy8qCisgKiBPcHBvc2l0ZSBvZiB0aGUgYWJvdmU6IHRoZSBjb21tYW5kIGxpbmUgZGlkIG5vdCBoYXZlIC0tIG1hcmtlcgorICogYW5kIHdlIHBhcnNlZCB0aGUgYXJnIGFzIGEgcmVmbmFtZS4gIEl0IHNob3VsZCBub3QgYmUgaW50ZXJwcmV0YWJsZQorICogYXMgYSBmaWxlbmFtZS4KKyAqLwordm9pZCB2ZXJpZnlfbm9uX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqYXJnKQoreworCWlmICghaXNfaW5zaWRlX3dvcmtfdHJlZSgpIHx8IGlzX2luc2lkZV9naXRfZGlyKCkpCisJCXJldHVybjsKKwlpZiAoKmFyZyA9PSAnLScpCisJCXJldHVybjsgLyogZmxhZyAqLworCWlmICghY2hlY2tfZmlsZW5hbWUocHJlZml4LCBhcmcpKQorCQlyZXR1cm47CisJZGllKF8oImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorCSAgICAgICJVc2UgJy0tJyB0byBzZXBhcmF0ZSBwYXRocyBmcm9tIHJldmlzaW9ucywgbGlrZSB0aGlzOlxuIgorCSAgICAgICInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIiksIGFyZyk7Cit9CisKK2ludCBnZXRfY29tbW9uX2RpcihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZ2l0ZGlyKQoreworCWNvbnN0IGNoYXIgKmdpdF9lbnZfY29tbW9uX2RpciA9IGdldGVudihHSVRfQ09NTU9OX0RJUl9FTlZJUk9OTUVOVCk7CisJaWYgKGdpdF9lbnZfY29tbW9uX2RpcikgeworCQlzdHJidWZfYWRkc3RyKHNiLCBnaXRfZW52X2NvbW1vbl9kaXIpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZ2V0X2NvbW1vbl9kaXJfbm9lbnYoc2IsIGdpdGRpcik7CisJfQorfQorCitpbnQgZ2V0X2NvbW1vbl9kaXJfbm9lbnYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmdpdGRpcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGRhdGEgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKworCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiJXMvY29tbW9uZGlyIiwgZ2l0ZGlyKTsKKwlpZiAoZmlsZV9leGlzdHMocGF0aC5idWYpKSB7CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZkYXRhLCBwYXRoLmJ1ZiwgMCkgPD0gMCkKKwkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gcmVhZCAlcyIpLCBwYXRoLmJ1Zik7CisJCXdoaWxlIChkYXRhLmxlbiAmJiAoZGF0YS5idWZbZGF0YS5sZW4gLSAxXSA9PSAnXG4nIHx8CisJCQkJICAgIGRhdGEuYnVmW2RhdGEubGVuIC0gMV0gPT0gJ1xyJykpCisJCQlkYXRhLmxlbi0tOworCQlkYXRhLmJ1ZltkYXRhLmxlbl0gPSAnXDAnOworCQlzdHJidWZfcmVzZXQoJnBhdGgpOworCQlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZGF0YS5idWYpKQorCQkJc3RyYnVmX2FkZGYoJnBhdGgsICIlcy8iLCBnaXRkaXIpOworCQlzdHJidWZfYWRkYnVmKCZwYXRoLCAmZGF0YSk7CisJCXN0cmJ1Zl9hZGRfcmVhbF9wYXRoKHNiLCBwYXRoLmJ1Zik7CisJCXJldCA9IDE7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cihzYiwgZ2l0ZGlyKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUZXN0IGlmIGl0IGxvb2tzIGxpa2Ugd2UncmUgYXQgYSBnaXQgZGlyZWN0b3J5LgorICogV2Ugd2FudCB0byBzZWU6CisgKgorICogIC0gZWl0aGVyIGFuIG9iamVjdHMvIGRpcmVjdG9yeSBfb3JfIHRoZSBwcm9wZXIKKyAqICAgIEdJVF9PQkpFQ1RfRElSRUNUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiAgLSBhIHJlZnMvIGRpcmVjdG9yeQorICogIC0gZWl0aGVyIGEgSEVBRCBzeW1saW5rIG9yIGEgSEVBRCBmaWxlIHRoYXQgaXMgZm9ybWF0dGVkIGFzCisgKiAgICBhIHByb3BlciAicmVmOiIsIG9yIGEgcmVndWxhciBmaWxlIEhFQUQgdGhhdCBoYXMgYSBwcm9wZXJseQorICogICAgZm9ybWF0dGVkIHNoYTEgb2JqZWN0IG5hbWUuCisgKi8KK2ludCBpc19naXRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnN1c3BlY3QpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisJc2l6ZV90IGxlbjsKKworCS8qIENoZWNrIHdvcmt0cmVlLXJlbGF0ZWQgc2lnbmF0dXJlcyAqLworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHN1c3BlY3QpOworCXN0cmJ1Zl9jb21wbGV0ZSgmcGF0aCwgJy8nKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCAiSEVBRCIpOworCWlmICh2YWxpZGF0ZV9oZWFkcmVmKHBhdGguYnVmKSkKKwkJZ290byBkb25lOworCisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlnZXRfY29tbW9uX2RpcigmcGF0aCwgc3VzcGVjdCk7CisJbGVuID0gcGF0aC5sZW47CisKKwkvKiBDaGVjayBub24td29ya3RyZWUtcmVsYXRlZCBzaWduYXR1cmVzICovCisJaWYgKGdldGVudihEQl9FTlZJUk9OTUVOVCkpIHsKKwkJaWYgKGFjY2VzcyhnZXRlbnYoREJfRU5WSVJPTk1FTlQpLCBYX09LKSkKKwkJCWdvdG8gZG9uZTsKKwl9CisJZWxzZSB7CisJCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvb2JqZWN0cyIpOworCQlpZiAoYWNjZXNzKHBhdGguYnVmLCBYX09LKSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlzdHJidWZfc2V0bGVuKCZwYXRoLCBsZW4pOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvcmVmcyIpOworCWlmIChhY2Nlc3MocGF0aC5idWYsIFhfT0spKQorCQlnb3RvIGRvbmU7CisKKwlyZXQgPSAxOworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGlzX25vbmJhcmVfcmVwb3NpdG9yeV9kaXIoc3RydWN0IHN0cmJ1ZiAqcGF0aCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZ2l0ZmlsZV9lcnJvcjsKKwlzaXplX3Qgb3JpZ19wYXRoX2xlbiA9IHBhdGgtPmxlbjsKKwlhc3NlcnQob3JpZ19wYXRoX2xlbiAhPSAwKTsKKwlzdHJidWZfY29tcGxldGUocGF0aCwgJy8nKTsKKwlzdHJidWZfYWRkc3RyKHBhdGgsICIuZ2l0Iik7CisJaWYgKHJlYWRfZ2l0ZmlsZV9nZW50bHkocGF0aC0+YnVmLCAmZ2l0ZmlsZV9lcnJvcikgfHwgaXNfZ2l0X2RpcmVjdG9yeShwYXRoLT5idWYpKQorCQlyZXQgPSAxOworCWlmIChnaXRmaWxlX2Vycm9yID09IFJFQURfR0lURklMRV9FUlJfT1BFTl9GQUlMRUQgfHwKKwkgICAgZ2l0ZmlsZV9lcnJvciA9PSBSRUFEX0dJVEZJTEVfRVJSX1JFQURfRkFJTEVEKQorCQlyZXQgPSAxOworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgb3JpZ19wYXRoX2xlbik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGlzX2luc2lkZV9naXRfZGlyKHZvaWQpCit7CisJaWYgKGluc2lkZV9naXRfZGlyIDwgMCkKKwkJaW5zaWRlX2dpdF9kaXIgPSBpc19pbnNpZGVfZGlyKGdldF9naXRfZGlyKCkpOworCXJldHVybiBpbnNpZGVfZ2l0X2RpcjsKK30KKworaW50IGlzX2luc2lkZV93b3JrX3RyZWUodm9pZCkKK3sKKwlpZiAoaW5zaWRlX3dvcmtfdHJlZSA8IDApCisJCWluc2lkZV93b3JrX3RyZWUgPSBpc19pbnNpZGVfZGlyKGdldF9naXRfd29ya190cmVlKCkpOworCXJldHVybiBpbnNpZGVfd29ya190cmVlOworfQorCit2b2lkIHNldHVwX3dvcmtfdHJlZSh2b2lkKQoreworCWNvbnN0IGNoYXIgKndvcmtfdHJlZTsKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworCWlmIChpbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJaWYgKHdvcmtfdHJlZV9jb25maWdfaXNfYm9ndXMpCisJCWRpZShfKCJ1bmFibGUgdG8gc2V0IHVwIHdvcmsgdHJlZSB1c2luZyBpbnZhbGlkIGNvbmZpZyIpKTsKKworCXdvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CisJaWYgKCF3b3JrX3RyZWUgfHwgY2hkaXJfbm90aWZ5KHdvcmtfdHJlZSkpCisJCWRpZShfKCJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIpKTsKKworCS8qCisJICogTWFrZSBzdXJlIHN1YnNlcXVlbnQgZ2l0IHByb2Nlc3NlcyBmaW5kIGNvcnJlY3Qgd29ya3RyZWUKKwkgKiBpZiAkR0lUX1dPUktfVFJFRSBpcyBzZXQgcmVsYXRpdmUKKwkgKi8KKwlpZiAoZ2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQpKQorCQlzZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwgIi4iLCAxKTsKKworCWluaXRpYWxpemVkID0gMTsKK30KKworc3RhdGljIGludCByZWFkX3dvcmt0cmVlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICp2ZGF0YSkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKmRhdGEgPSB2ZGF0YTsKKworCWlmIChzdHJjbXAodmFyLCAiY29yZS5iYXJlIikgPT0gMCkgeworCQlkYXRhLT5pc19iYXJlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCX0gZWxzZSBpZiAoc3RyY21wKHZhciwgImNvcmUud29ya3RyZWUiKSA9PSAwKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZnJlZShkYXRhLT53b3JrX3RyZWUpOworCQlkYXRhLT53b3JrX3RyZWUgPSB4c3RyZHVwKHZhbHVlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVwb19mb3JtYXQoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqdmRhdGEpCit7CisJc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpkYXRhID0gdmRhdGE7CisJY29uc3QgY2hhciAqZXh0OworCisJaWYgKHN0cmNtcCh2YXIsICJjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIikgPT0gMCkKKwkJZGF0YS0+dmVyc2lvbiA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHZhciwgImV4dGVuc2lvbnMuIiwgJmV4dCkpIHsKKwkJLyoKKwkJICogcmVjb3JkIGFueSBrbm93biBleHRlbnNpb25zIGhlcmU7IG90aGVyd2lzZSwKKwkJICogd2UgZmFsbCB0aHJvdWdoIHRvIHJlY29yZGluZyBpdCBhcyB1bmtub3duLCBhbmQKKwkJICogY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXQgd2lsbCBjb21wbGFpbgorCQkgKi8KKwkJaWYgKCFzdHJjbXAoZXh0LCAibm9vcCIpKQorCQkJOworCQllbHNlIGlmICghc3RyY21wKGV4dCwgInByZWNpb3Vzb2JqZWN0cyIpKQorCQkJZGF0YS0+cHJlY2lvdXNfb2JqZWN0cyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJZWxzZSBpZiAoIXN0cmNtcChleHQsICJwYXJ0aWFsY2xvbmUiKSkgeworCQkJaWYgKCF2YWx1ZSkKKwkJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJCWRhdGEtPnBhcnRpYWxfY2xvbmUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGV4dCwgIndvcmt0cmVlY29uZmlnIikpCisJCQlkYXRhLT53b3JrdHJlZV9jb25maWcgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCWVsc2UKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZGF0YS0+dW5rbm93bl9leHRlbnNpb25zLCBleHQpOworCX0KKworCXJldHVybiByZWFkX3dvcmt0cmVlX2NvbmZpZyh2YXIsIHZhbHVlLCB2ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGNvbnN0IGNoYXIgKmdpdGRpciwgc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpjYW5kaWRhdGUsIGludCAqbm9uZ2l0X29rKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWludCBoYXNfY29tbW9uOworCisJaGFzX2NvbW1vbiA9IGdldF9jb21tb25fZGlyKCZzYiwgZ2l0ZGlyKTsKKwlzdHJidWZfYWRkc3RyKCZzYiwgIi9jb25maWciKTsKKwlyZWFkX3JlcG9zaXRvcnlfZm9ybWF0KGNhbmRpZGF0ZSwgc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJLyoKKwkgKiBGb3IgaGlzdG9yaWNhbCB1c2Ugb2YgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXQoKSBpbiBnaXQtaW5pdCwKKwkgKiB3ZSB0cmVhdCBhIG1pc3NpbmcgY29uZmlnIGFzIGEgc2lsZW50ICJvayIsIGV2ZW4gd2hlbiBub25naXRfb2sKKwkgKiBpcyB1bnNldC4KKwkgKi8KKwlpZiAoY2FuZGlkYXRlLT52ZXJzaW9uIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodmVyaWZ5X3JlcG9zaXRvcnlfZm9ybWF0KGNhbmRpZGF0ZSwgJmVycikgPCAwKSB7CisJCWlmIChub25naXRfb2spIHsKKwkJCXdhcm5pbmcoIiVzIiwgZXJyLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJCSpub25naXRfb2sgPSAtMTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJfQorCisJcmVwb3NpdG9yeV9mb3JtYXRfcHJlY2lvdXNfb2JqZWN0cyA9IGNhbmRpZGF0ZS0+cHJlY2lvdXNfb2JqZWN0czsKKwlzZXRfcmVwb3NpdG9yeV9mb3JtYXRfcGFydGlhbF9jbG9uZShjYW5kaWRhdGUtPnBhcnRpYWxfY2xvbmUpOworCXJlcG9zaXRvcnlfZm9ybWF0X3dvcmt0cmVlX2NvbmZpZyA9IGNhbmRpZGF0ZS0+d29ya3RyZWVfY29uZmlnOworCXN0cmluZ19saXN0X2NsZWFyKCZjYW5kaWRhdGUtPnVua25vd25fZXh0ZW5zaW9ucywgMCk7CisKKwlpZiAocmVwb3NpdG9yeV9mb3JtYXRfd29ya3RyZWVfY29uZmlnKSB7CisJCS8qCisJCSAqIHBpY2sgdXAgY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIGZyb20gcGVyLXdvcmt0cmVlCisJCSAqIGNvbmZpZyBpZiBwcmVzZW50CisJCSAqLworCQlzdHJidWZfYWRkZigmc2IsICIlcy9jb25maWcud29ya3RyZWUiLCBnaXRkaXIpOworCQlnaXRfY29uZmlnX2Zyb21fZmlsZShyZWFkX3dvcmt0cmVlX2NvbmZpZywgc2IuYnVmLCBjYW5kaWRhdGUpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQloYXNfY29tbW9uID0gMDsKKwl9CisKKwlpZiAoIWhhc19jb21tb24pIHsKKwkJaWYgKGNhbmRpZGF0ZS0+aXNfYmFyZSAhPSAtMSkgeworCQkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IGNhbmRpZGF0ZS0+aXNfYmFyZTsKKwkJCWlmIChpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID09IDEpCisJCQkJaW5zaWRlX3dvcmtfdHJlZSA9IC0xOworCQl9CisJCWlmIChjYW5kaWRhdGUtPndvcmtfdHJlZSkgeworCQkJZnJlZShnaXRfd29ya190cmVlX2NmZyk7CisJCQlnaXRfd29ya190cmVlX2NmZyA9IHhzdHJkdXAoY2FuZGlkYXRlLT53b3JrX3RyZWUpOworCQkJaW5zaWRlX3dvcmtfdHJlZSA9IC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcmVwb3NpdG9yeV9mb3JtYXQoc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpmb3JtYXQpCit7CisJY29uc3Qgc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0IGZyZXNoID0gUkVQT1NJVE9SWV9GT1JNQVRfSU5JVDsKKworCW1lbWNweShmb3JtYXQsICZmcmVzaCwgc2l6ZW9mKGZyZXNoKSk7Cit9CisKK2ludCByZWFkX3JlcG9zaXRvcnlfZm9ybWF0KHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqZm9ybWF0LCBjb25zdCBjaGFyICpwYXRoKQoreworCWNsZWFyX3JlcG9zaXRvcnlfZm9ybWF0KGZvcm1hdCk7CisJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY2hlY2tfcmVwb19mb3JtYXQsIHBhdGgsIGZvcm1hdCk7CisJaWYgKGZvcm1hdC0+dmVyc2lvbiA9PSAtMSkKKwkJY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoZm9ybWF0KTsKKwlyZXR1cm4gZm9ybWF0LT52ZXJzaW9uOworfQorCit2b2lkIGNsZWFyX3JlcG9zaXRvcnlfZm9ybWF0KHN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cmluZ19saXN0X2NsZWFyKCZmb3JtYXQtPnVua25vd25fZXh0ZW5zaW9ucywgMCk7CisJZnJlZShmb3JtYXQtPndvcmtfdHJlZSk7CisJZnJlZShmb3JtYXQtPnBhcnRpYWxfY2xvbmUpOworCWluaXRfcmVwb3NpdG9yeV9mb3JtYXQoZm9ybWF0KTsKK30KKworaW50IHZlcmlmeV9yZXBvc2l0b3J5X2Zvcm1hdChjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKmZvcm1hdCwKKwkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmIChHSVRfUkVQT19WRVJTSU9OX1JFQUQgPCBmb3JtYXQtPnZlcnNpb24pIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCBfKCJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIpLAorCQkJICAgIEdJVF9SRVBPX1ZFUlNJT05fUkVBRCwgZm9ybWF0LT52ZXJzaW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChmb3JtYXQtPnZlcnNpb24gPj0gMSAmJiBmb3JtYXQtPnVua25vd25fZXh0ZW5zaW9ucy5ucikgeworCQlpbnQgaTsKKworCQlzdHJidWZfYWRkc3RyKGVyciwgXygidW5rbm93biByZXBvc2l0b3J5IGV4dGVuc2lvbnMgZm91bmQ6IikpOworCisJCWZvciAoaSA9IDA7IGkgPCBmb3JtYXQtPnVua25vd25fZXh0ZW5zaW9ucy5ucjsgaSsrKQorCQkJc3RyYnVmX2FkZGYoZXJyLCAiXG5cdCVzIiwKKwkJCQkgICAgZm9ybWF0LT51bmtub3duX2V4dGVuc2lvbnMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHJlYWRfZ2l0ZmlsZV9lcnJvcl9kaWUoaW50IGVycm9yX2NvZGUsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmRpcikKK3sKKwlzd2l0Y2ggKGVycm9yX2NvZGUpIHsKKwljYXNlIFJFQURfR0lURklMRV9FUlJfU1RBVF9GQUlMRUQ6CisJY2FzZSBSRUFEX0dJVEZJTEVfRVJSX05PVF9BX0ZJTEU6CisJCS8qIG5vbi1mYXRhbDsgZm9sbG93IHJldHVybiBwYXRoICovCisJCWJyZWFrOworCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9PUEVOX0ZBSUxFRDoKKwkJZGllX2Vycm5vKF8oImVycm9yIG9wZW5pbmcgJyVzJyIpLCBwYXRoKTsKKwljYXNlIFJFQURfR0lURklMRV9FUlJfVE9PX0xBUkdFOgorCQlkaWUoXygidG9vIGxhcmdlIHRvIGJlIGEgLmdpdCBmaWxlOiAnJXMnIiksIHBhdGgpOworCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9SRUFEX0ZBSUxFRDoKKwkJZGllKF8oImVycm9yIHJlYWRpbmcgJXMiKSwgcGF0aCk7CisJY2FzZSBSRUFEX0dJVEZJTEVfRVJSX0lOVkFMSURfRk9STUFUOgorCQlkaWUoXygiaW52YWxpZCBnaXRmaWxlIGZvcm1hdDogJXMiKSwgcGF0aCk7CisJY2FzZSBSRUFEX0dJVEZJTEVfRVJSX05PX1BBVEg6CisJCWRpZShfKCJubyBwYXRoIGluIGdpdGZpbGU6ICVzIiksIHBhdGgpOworCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9SRVBPOgorCQlkaWUoXygibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIiksIGRpcik7CisJZGVmYXVsdDoKKwkJQlVHKCJ1bmtub3duIGVycm9yIGNvZGUiKTsKKwl9Cit9CisKKy8qCisgKiBUcnkgdG8gcmVhZCB0aGUgbG9jYXRpb24gb2YgdGhlIGdpdCBkaXJlY3RvcnkgZnJvbSB0aGUgLmdpdCBmaWxlLAorICogcmV0dXJuIHBhdGggdG8gZ2l0IGRpcmVjdG9yeSBpZiBmb3VuZC4gVGhlIHJldHVybiB2YWx1ZSBjb21lcyBmcm9tCisgKiBhIHNoYXJlZCBidWZmZXIuCisgKgorICogT24gZmFpbHVyZSwgaWYgcmV0dXJuX2Vycm9yX2NvZGUgaXMgbm90IE5VTEwsIHJldHVybl9lcnJvcl9jb2RlCisgKiB3aWxsIGJlIHNldCB0byBhbiBlcnJvciBjb2RlIGFuZCBOVUxMIHdpbGwgYmUgcmV0dXJuZWQuIElmCisgKiByZXR1cm5fZXJyb3JfY29kZSBpcyBOVUxMIHRoZSBmdW5jdGlvbiB3aWxsIGRpZSBpbnN0ZWFkIChmb3IgbW9zdAorICogY2FzZXMpLgorICovCitjb25zdCBjaGFyICpyZWFkX2dpdGZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKnBhdGgsIGludCAqcmV0dXJuX2Vycm9yX2NvZGUpCit7CisJY29uc3QgaW50IG1heF9maWxlX3NpemUgPSAxIDw8IDIwOyAgLyogMU1CICovCisJaW50IGVycm9yX2NvZGUgPSAwOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisJY2hhciAqZGlyID0gTlVMTDsKKwljb25zdCBjaGFyICpzbGFzaDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZmQ7CisJc3NpemVfdCBsZW47CisKKwlpZiAoc3RhdChwYXRoLCAmc3QpKSB7CisJCS8qIE5FRURTV09SSzogZGlzY2VybiBiZXR3ZWVuIEVOT0VOVCB2cyBvdGhlciBlcnJvcnMgKi8KKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfU1RBVF9GQUlMRUQ7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQllcnJvcl9jb2RlID0gUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9GSUxFOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlpZiAoc3Quc3Rfc2l6ZSA+IG1heF9maWxlX3NpemUpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfVE9PX0xBUkdFOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfT1BFTl9GQUlMRUQ7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCWJ1ZiA9IHhtYWxsb2N6KHN0LnN0X3NpemUpOworCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgYnVmLCBzdC5zdF9zaXplKTsKKwljbG9zZShmZCk7CisJaWYgKGxlbiAhPSBzdC5zdF9zaXplKSB7CisJCWVycm9yX2NvZGUgPSBSRUFEX0dJVEZJTEVfRVJSX1JFQURfRkFJTEVEOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlpZiAoIXN0YXJ0c193aXRoKGJ1ZiwgImdpdGRpcjogIikpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfSU5WQUxJRF9GT1JNQVQ7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCXdoaWxlIChidWZbbGVuIC0gMV0gPT0gJ1xuJyB8fCBidWZbbGVuIC0gMV0gPT0gJ1xyJykKKwkJbGVuLS07CisJaWYgKGxlbiA8IDkpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfTk9fUEFUSDsKKwkJZ290byBjbGVhbnVwX3JldHVybjsKKwl9CisJYnVmW2xlbl0gPSAnXDAnOworCWRpciA9IGJ1ZiArIDg7CisKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZGlyKSAmJiAoc2xhc2ggPSBzdHJyY2hyKHBhdGgsICcvJykpKSB7CisJCXNpemVfdCBwYXRobGVuID0gc2xhc2grMSAtIHBhdGg7CisJCWRpciA9IHhzdHJmbXQoIiUuKnMlLipzIiwgKGludClwYXRobGVuLCBwYXRoLAorCQkJICAgICAgKGludCkobGVuIC0gOCksIGJ1ZiArIDgpOworCQlmcmVlKGJ1Zik7CisJCWJ1ZiA9IGRpcjsKKwl9CisJaWYgKCFpc19naXRfZGlyZWN0b3J5KGRpcikpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfTk9UX0FfUkVQTzsKKwkJZ290byBjbGVhbnVwX3JldHVybjsKKwl9CisJcGF0aCA9IHJlYWxfcGF0aChkaXIpOworCitjbGVhbnVwX3JldHVybjoKKwlpZiAocmV0dXJuX2Vycm9yX2NvZGUpCisJCSpyZXR1cm5fZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJZWxzZSBpZiAoZXJyb3JfY29kZSkKKwkJcmVhZF9naXRmaWxlX2Vycm9yX2RpZShlcnJvcl9jb2RlLCBwYXRoLCBkaXIpOworCisJZnJlZShidWYpOworCXJldHVybiBlcnJvcl9jb2RlID8gTlVMTCA6IHBhdGg7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzZXR1cF9leHBsaWNpdF9naXRfZGlyKGNvbnN0IGNoYXIgKmdpdGRpcmVudiwKKwkJCQkJICBzdHJ1Y3Qgc3RyYnVmICpjd2QsCisJCQkJCSAgc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpyZXBvX2ZtdCwKKwkJCQkJICBpbnQgKm5vbmdpdF9vaykKK3sKKwljb25zdCBjaGFyICp3b3JrX3RyZWVfZW52ID0gZ2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQpOworCWNvbnN0IGNoYXIgKndvcmt0cmVlOworCWNoYXIgKmdpdGZpbGU7CisJaW50IG9mZnNldDsKKworCWlmIChQQVRIX01BWCAtIDQwIDwgc3RybGVuKGdpdGRpcmVudikpCisJCWRpZShfKCInJCVzJyB0b28gYmlnIiksIEdJVF9ESVJfRU5WSVJPTk1FTlQpOworCisJZ2l0ZmlsZSA9IChjaGFyKilyZWFkX2dpdGZpbGUoZ2l0ZGlyZW52KTsKKwlpZiAoZ2l0ZmlsZSkgeworCQlnaXRmaWxlID0geHN0cmR1cChnaXRmaWxlKTsKKwkJZ2l0ZGlyZW52ID0gZ2l0ZmlsZTsKKwl9CisKKwlpZiAoIWlzX2dpdF9kaXJlY3RvcnkoZ2l0ZGlyZW52KSkgeworCQlpZiAobm9uZ2l0X29rKSB7CisJCQkqbm9uZ2l0X29rID0gMTsKKwkJCWZyZWUoZ2l0ZmlsZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlkaWUoXygibm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciKSwgZ2l0ZGlyZW52KTsKKwl9CisKKwlpZiAoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGdpdGRpcmVudiwgcmVwb19mbXQsIG5vbmdpdF9vaykpIHsKKwkJZnJlZShnaXRmaWxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogIzMsICM3LCAjMTEsICMxNSwgIzE5LCAjMjMsICMyNywgIzMxIChzZWUgdDE1MTApICovCisJaWYgKHdvcmtfdHJlZV9lbnYpCisJCXNldF9naXRfd29ya190cmVlKHdvcmtfdHJlZV9lbnYpOworCWVsc2UgaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPiAwKSB7CisJCWlmIChnaXRfd29ya190cmVlX2NmZykgeworCQkJLyogIzIyLjIsICMzMCAqLworCQkJd2FybmluZygiY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIGRvIG5vdCBtYWtlIHNlbnNlIik7CisJCQl3b3JrX3RyZWVfY29uZmlnX2lzX2JvZ3VzID0gMTsKKwkJfQorCisJCS8qICMxOCwgIzI2ICovCisJCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKwllbHNlIGlmIChnaXRfd29ya190cmVlX2NmZykgeyAvKiAjNiwgIzE0ICovCisJCWlmIChpc19hYnNvbHV0ZV9wYXRoKGdpdF93b3JrX3RyZWVfY2ZnKSkKKwkJCXNldF9naXRfd29ya190cmVlKGdpdF93b3JrX3RyZWVfY2ZnKTsKKwkJZWxzZSB7CisJCQljaGFyICpjb3JlX3dvcmt0cmVlOworCQkJaWYgKGNoZGlyKGdpdGRpcmVudikpCisJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBjaGRpciB0byAnJXMnIiksIGdpdGRpcmVudik7CisJCQlpZiAoY2hkaXIoZ2l0X3dvcmtfdHJlZV9jZmcpKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY2hkaXIgdG8gJyVzJyIpLCBnaXRfd29ya190cmVlX2NmZyk7CisJCQljb3JlX3dvcmt0cmVlID0geGdldGN3ZCgpOworCQkJaWYgKGNoZGlyKGN3ZC0+YnVmKSkKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiKSk7CisJCQlzZXRfZ2l0X3dvcmtfdHJlZShjb3JlX3dvcmt0cmVlKTsKKwkJCWZyZWUoY29yZV93b3JrdHJlZSk7CisJCX0KKwl9CisJZWxzZSBpZiAoIWdpdF9lbnZfYm9vbChHSVRfSU1QTElDSVRfV09SS19UUkVFX0VOVklST05NRU5ULCAxKSkgeworCQkvKiAjMTZkICovCisJCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKwllbHNlIC8qICMyLCAjMTAgKi8KKwkJc2V0X2dpdF93b3JrX3RyZWUoIi4iKTsKKworCS8qIHNldF9naXRfd29ya190cmVlKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGJ5IG5vdyAqLworCXdvcmt0cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKworCS8qIGJvdGggZ2V0X2dpdF93b3JrX3RyZWUoKSBhbmQgY3dkIGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQgKi8KKwlpZiAoIXN0cmNtcChjd2QtPmJ1Ziwgd29ya3RyZWUpKSB7IC8qIGN3ZCA9PSB3b3JrdHJlZSAqLworCQlzZXRfZ2l0X2RpcihnaXRkaXJlbnYpOworCQlmcmVlKGdpdGZpbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlvZmZzZXQgPSBkaXJfaW5zaWRlX29mKGN3ZC0+YnVmLCB3b3JrdHJlZSk7CisJaWYgKG9mZnNldCA+PSAwKSB7CS8qIGN3ZCBpbnNpZGUgd29ya3RyZWU/ICovCisJCXNldF9naXRfZGlyKHJlYWxfcGF0aChnaXRkaXJlbnYpKTsKKwkJaWYgKGNoZGlyKHdvcmt0cmVlKSkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY2hkaXIgdG8gJyVzJyIpLCB3b3JrdHJlZSk7CisJCXN0cmJ1Zl9hZGRjaChjd2QsICcvJyk7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBjd2QtPmJ1ZiArIG9mZnNldDsKKwl9CisKKwkvKiBjd2Qgb3V0c2lkZSB3b3JrdHJlZSAqLworCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJZnJlZShnaXRmaWxlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2Rpc2NvdmVyZWRfZ2l0X2Rpcihjb25zdCBjaGFyICpnaXRkaXIsCisJCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpjd2QsIGludCBvZmZzZXQsCisJCQkJCSAgICBzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgKnJlcG9fZm10LAorCQkJCQkgICAgaW50ICpub25naXRfb2spCit7CisJaWYgKGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X2dlbnRseShnaXRkaXIsIHJlcG9fZm10LCBub25naXRfb2spKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIC0td29yay10cmVlIGlzIHNldCB3aXRob3V0IC0tZ2l0LWRpcjsgdXNlIGRpc2NvdmVyZWQgb25lICovCisJaWYgKGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKSB8fCBnaXRfd29ya190cmVlX2NmZykgeworCQljaGFyICp0b19mcmVlID0gTlVMTDsKKwkJY29uc3QgY2hhciAqcmV0OworCisJCWlmIChvZmZzZXQgIT0gY3dkLT5sZW4gJiYgIWlzX2Fic29sdXRlX3BhdGgoZ2l0ZGlyKSkKKwkJCWdpdGRpciA9IHRvX2ZyZWUgPSByZWFsX3BhdGhkdXAoZ2l0ZGlyLCAxKTsKKwkJaWYgKGNoZGlyKGN3ZC0+YnVmKSkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpKTsKKwkJcmV0ID0gc2V0dXBfZXhwbGljaXRfZ2l0X2RpcihnaXRkaXIsIGN3ZCwgcmVwb19mbXQsIG5vbmdpdF9vayk7CisJCWZyZWUodG9fZnJlZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogIzE2LjIsICMxNy4yLCAjMjAuMiwgIzIxLjIsICMyNCwgIzI1LCAjMjgsICMyOSAoc2VlIHQxNTEwKSAqLworCWlmIChpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID4gMCkgeworCQlzZXRfZ2l0X2RpcihvZmZzZXQgPT0gY3dkLT5sZW4gPyBnaXRkaXIgOiByZWFsX3BhdGgoZ2l0ZGlyKSk7CisJCWlmIChjaGRpcihjd2QtPmJ1ZikpCisJCQlkaWVfZXJybm8oXygiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qICMwLCAjMSwgIzUsICM4LCAjOSwgIzEyLCAjMTMgKi8KKwlzZXRfZ2l0X3dvcmtfdHJlZSgiLiIpOworCWlmIChzdHJjbXAoZ2l0ZGlyLCBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpKQorCQlzZXRfZ2l0X2RpcihnaXRkaXIpOworCWluc2lkZV9naXRfZGlyID0gMDsKKwlpbnNpZGVfd29ya190cmVlID0gMTsKKwlpZiAob2Zmc2V0ID49IGN3ZC0+bGVuKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIE1ha2UgIm9mZnNldCIgcG9pbnQgcGFzdCB0aGUgJy8nIChhbHJlYWR5IHRoZSBjYXNlIGZvciByb290IGRpcnMpICovCisJaWYgKG9mZnNldCAhPSBvZmZzZXRfMXN0X2NvbXBvbmVudChjd2QtPmJ1ZikpCisJCW9mZnNldCsrOworCS8qIEFkZCBhICcvJyBhdCB0aGUgZW5kICovCisJc3RyYnVmX2FkZGNoKGN3ZCwgJy8nKTsKKwlyZXR1cm4gY3dkLT5idWYgKyBvZmZzZXQ7Cit9CisKKy8qICMxNi4xLCAjMTcuMSwgIzIwLjEsICMyMS4xLCAjMjIuMSAoc2VlIHQxNTEwKSAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2JhcmVfZ2l0X2RpcihzdHJ1Y3Qgc3RyYnVmICpjd2QsIGludCBvZmZzZXQsCisJCQkJICAgICAgc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0ICpyZXBvX2ZtdCwKKwkJCQkgICAgICBpbnQgKm5vbmdpdF9vaykKK3sKKwlpbnQgcm9vdF9sZW47CisKKwlpZiAoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KCIuIiwgcmVwb19mbXQsIG5vbmdpdF9vaykpCisJCXJldHVybiBOVUxMOworCisJc2V0ZW52KEdJVF9JTVBMSUNJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsICIwIiwgMSk7CisKKwkvKiAtLXdvcmstdHJlZSBpcyBzZXQgd2l0aG91dCAtLWdpdC1kaXI7IHVzZSBkaXNjb3ZlcmVkIG9uZSAqLworCWlmIChnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCkgfHwgZ2l0X3dvcmtfdHJlZV9jZmcpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmdpdGRpcjsKKworCQlnaXRkaXIgPSBvZmZzZXQgPT0gY3dkLT5sZW4gPyAiLiIgOiB4bWVtZHVweihjd2QtPmJ1Ziwgb2Zmc2V0KTsKKwkJaWYgKGNoZGlyKGN3ZC0+YnVmKSkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpKTsKKwkJcmV0dXJuIHNldHVwX2V4cGxpY2l0X2dpdF9kaXIoZ2l0ZGlyLCBjd2QsIHJlcG9fZm10LCBub25naXRfb2spOworCX0KKworCWluc2lkZV9naXRfZGlyID0gMTsKKwlpbnNpZGVfd29ya190cmVlID0gMDsKKwlpZiAob2Zmc2V0ICE9IGN3ZC0+bGVuKSB7CisJCWlmIChjaGRpcihjd2QtPmJ1ZikpCisJCQlkaWVfZXJybm8oXygiY2Fubm90IGNvbWUgYmFjayB0byBjd2QiKSk7CisJCXJvb3RfbGVuID0gb2Zmc2V0XzFzdF9jb21wb25lbnQoY3dkLT5idWYpOworCQlzdHJidWZfc2V0bGVuKGN3ZCwgb2Zmc2V0ID4gcm9vdF9sZW4gPyBvZmZzZXQgOiByb290X2xlbik7CisJCXNldF9naXRfZGlyKGN3ZC0+YnVmKTsKKwl9CisJZWxzZQorCQlzZXRfZ2l0X2RpcigiLiIpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgZGV2X3QgZ2V0X2RldmljZV9vcl9kaWUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbikKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaWYgKHN0YXQocGF0aCwgJmJ1ZikpIHsKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGF0ICclKnMlcyVzJyIpLAorCQkJCXByZWZpeF9sZW4sCisJCQkJcHJlZml4ID8gcHJlZml4IDogIiIsCisJCQkJcHJlZml4ID8gIi8iIDogIiIsIHBhdGgpOworCX0KKwlyZXR1cm4gYnVmLnN0X2RldjsKK30KKworLyoKKyAqIEEgInN0cmluZ19saXN0X2VhY2hfZnVuY190IiBmdW5jdGlvbiB0aGF0IGNhbm9uaWNhbGl6ZXMgYW4gZW50cnkKKyAqIGZyb20gR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgdXNpbmcgcmVhbF9wYXRoX2lmX3ZhbGlkKCksIG9yCisgKiBkaXNjYXJkcyBpdCBpZiB1bnVzYWJsZS4gIFRoZSBwcmVzZW5jZSBvZiBhbiBlbXB0eSBlbnRyeSBpbgorICogR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgdHVybnMgb2ZmIGNhbm9uaWNhbGl6YXRpb24gZm9yIGFsbAorICogc3Vic2VxdWVudCBlbnRyaWVzLgorICovCitzdGF0aWMgaW50IGNhbm9uaWNhbGl6ZV9jZWlsaW5nX2VudHJ5KHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLAorCQkJCSAgICAgIHZvaWQgKmNiX2RhdGEpCit7CisJaW50ICplbXB0eV9lbnRyeV9mb3VuZCA9IGNiX2RhdGE7CisJY2hhciAqY2VpbCA9IGl0ZW0tPnN0cmluZzsKKworCWlmICghKmNlaWwpIHsKKwkJKmVtcHR5X2VudHJ5X2ZvdW5kID0gMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghaXNfYWJzb2x1dGVfcGF0aChjZWlsKSkgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCplbXB0eV9lbnRyeV9mb3VuZCkgeworCQkvKiBLZWVwIGVudHJ5IGJ1dCBkbyBub3QgY2Fub25pY2FsaXplIGl0ICovCisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWNoYXIgKnJlYWxfcGF0aCA9IHJlYWxfcGF0aGR1cChjZWlsLCAwKTsKKwkJaWYgKCFyZWFsX3BhdGgpIHsKKwkJCXJldHVybiAwOworCQl9CisJCWZyZWUoaXRlbS0+c3RyaW5nKTsKKwkJaXRlbS0+c3RyaW5nID0gcmVhbF9wYXRoOworCQlyZXR1cm4gMTsKKwl9Cit9CisKK2VudW0gZGlzY292ZXJ5X3Jlc3VsdCB7CisJR0lUX0RJUl9OT05FID0gMCwKKwlHSVRfRElSX0VYUExJQ0lULAorCUdJVF9ESVJfRElTQ09WRVJFRCwKKwlHSVRfRElSX0JBUkUsCisJLyogdGhlc2UgYXJlIGVycm9ycyAqLworCUdJVF9ESVJfSElUX0NFSUxJTkcgPSAtMSwKKwlHSVRfRElSX0hJVF9NT1VOVF9QT0lOVCA9IC0yLAorCUdJVF9ESVJfSU5WQUxJRF9HSVRGSUxFID0gLTMKK307CisKKy8qCisgKiBXZSBjYW5ub3QgZGVjaWRlIGluIHRoaXMgZnVuY3Rpb24gd2hldGhlciB3ZSBhcmUgaW4gdGhlIHdvcmsgdHJlZSBvcgorICogbm90LCBzaW5jZSB0aGUgY29uZmlnIGNhbiBvbmx5IGJlIHJlYWQgX2FmdGVyXyB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuCisgKgorICogQWxzbywgd2UgYXZvaWQgY2hhbmdpbmcgYW55IGdsb2JhbCBzdGF0ZSAoc3VjaCBhcyB0aGUgY3VycmVudCB3b3JraW5nCisgKiBkaXJlY3RvcnkpIHRvIGFsbG93IGVhcmx5IGNhbGxlcnMuCisgKgorICogVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2VhcmNoIHNob3VsZCBzdGFydCBuZWVkcyB0byBiZSBwYXNzZWQgaW4gdmlhIHRoZQorICogYGRpcmAgcGFyYW1ldGVyOyB1cG9uIHJldHVybiwgdGhlIGBkaXJgIGJ1ZmZlciB3aWxsIGNvbnRhaW4gdGhlIHBhdGggb2YKKyAqIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHNlYXJjaCBlbmRlZCwgYW5kIGBnaXRkaXJgIHdpbGwgY29udGFpbiB0aGUgcGF0aCBvZgorICogdGhlIGRpc2NvdmVyZWQgLmdpdC8gZGlyZWN0b3J5LCBpZiBhbnkuIElmIGBnaXRkaXJgIGlzIG5vdCBhYnNvbHV0ZSwgaXQKKyAqIGlzIHJlbGF0aXZlIHRvIGBkaXJgIChpLmUuICpub3QqIG5lY2Vzc2FyaWx5IHRoZSBjd2QpLgorICovCitzdGF0aWMgZW51bSBkaXNjb3ZlcnlfcmVzdWx0IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5XzEoc3RydWN0IHN0cmJ1ZiAqZGlyLAorCQkJCQkJCSAgc3RydWN0IHN0cmJ1ZiAqZ2l0ZGlyLAorCQkJCQkJCSAgaW50IGRpZV9vbl9lcnJvcikKK3sKKwljb25zdCBjaGFyICplbnZfY2VpbGluZ19kaXJzID0gZ2V0ZW52KENFSUxJTkdfRElSRUNUT1JJRVNfRU5WSVJPTk1FTlQpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBjZWlsaW5nX2RpcnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwljb25zdCBjaGFyICpnaXRkaXJlbnY7CisJaW50IGNlaWxfb2Zmc2V0ID0gLTEsIG1pbl9vZmZzZXQgPSBvZmZzZXRfMXN0X2NvbXBvbmVudChkaXItPmJ1Zik7CisJZGV2X3QgY3VycmVudF9kZXZpY2UgPSAwOworCWludCBvbmVfZmlsZXN5c3RlbSA9IDE7CisKKwkvKgorCSAqIElmIEdJVF9ESVIgaXMgc2V0IGV4cGxpY2l0bHksIHdlJ3JlIG5vdCBnb2luZworCSAqIHRvIGRvIGFueSBkaXNjb3ZlcnksIGJ1dCB3ZSBzdGlsbCBkbyByZXBvc2l0b3J5CisJICogdmFsaWRhdGlvbi4KKwkgKi8KKwlnaXRkaXJlbnYgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJaWYgKGdpdGRpcmVudikgeworCQlzdHJidWZfYWRkc3RyKGdpdGRpciwgZ2l0ZGlyZW52KTsKKwkJcmV0dXJuIEdJVF9ESVJfRVhQTElDSVQ7CisJfQorCisJaWYgKGVudl9jZWlsaW5nX2RpcnMpIHsKKwkJaW50IGVtcHR5X2VudHJ5X2ZvdW5kID0gMDsKKworCQlzdHJpbmdfbGlzdF9zcGxpdCgmY2VpbGluZ19kaXJzLCBlbnZfY2VpbGluZ19kaXJzLCBQQVRIX1NFUCwgLTEpOworCQlmaWx0ZXJfc3RyaW5nX2xpc3QoJmNlaWxpbmdfZGlycywgMCwKKwkJCQkgICBjYW5vbmljYWxpemVfY2VpbGluZ19lbnRyeSwgJmVtcHR5X2VudHJ5X2ZvdW5kKTsKKwkJY2VpbF9vZmZzZXQgPSBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChkaXItPmJ1ZiwgJmNlaWxpbmdfZGlycyk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZjZWlsaW5nX2RpcnMsIDApOworCX0KKworCWlmIChjZWlsX29mZnNldCA8IDApCisJCWNlaWxfb2Zmc2V0ID0gbWluX29mZnNldCAtIDI7CisKKwlpZiAobWluX29mZnNldCAmJiBtaW5fb2Zmc2V0ID09IGRpci0+bGVuICYmCisJICAgICFpc19kaXJfc2VwKGRpci0+YnVmW21pbl9vZmZzZXQgLSAxXSkpIHsKKwkJc3RyYnVmX2FkZGNoKGRpciwgJy8nKTsKKwkJbWluX29mZnNldCsrOworCX0KKworCS8qCisJICogVGVzdCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIChyZWxhdGl2ZSB0byB0aGUgZGlyKToKKwkgKiAtIC5naXQgKGZpbGUgY29udGFpbmluZyAiZ2l0ZGlyOiA8cGF0aD4iKQorCSAqIC0gLmdpdC8KKwkgKiAtIC4vIChiYXJlKQorCSAqIC0gLi4vLmdpdAorCSAqIC0gLi4vLmdpdC8KKwkgKiAtIC4uLyAoYmFyZSkKKwkgKiAtIC4uLy4uLy5naXQKKwkgKiAgIGV0Yy4KKwkgKi8KKwlvbmVfZmlsZXN5c3RlbSA9ICFnaXRfZW52X2Jvb2woIkdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0iLCAwKTsKKwlpZiAob25lX2ZpbGVzeXN0ZW0pCisJCWN1cnJlbnRfZGV2aWNlID0gZ2V0X2RldmljZV9vcl9kaWUoZGlyLT5idWYsIE5VTEwsIDApOworCWZvciAoOzspIHsKKwkJaW50IG9mZnNldCA9IGRpci0+bGVuLCBlcnJvcl9jb2RlID0gMDsKKworCQlpZiAob2Zmc2V0ID4gbWluX29mZnNldCkKKwkJCXN0cmJ1Zl9hZGRjaChkaXIsICcvJyk7CisJCXN0cmJ1Zl9hZGRzdHIoZGlyLCBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpOworCQlnaXRkaXJlbnYgPSByZWFkX2dpdGZpbGVfZ2VudGx5KGRpci0+YnVmLCBkaWVfb25fZXJyb3IgPworCQkJCQkJTlVMTCA6ICZlcnJvcl9jb2RlKTsKKwkJaWYgKCFnaXRkaXJlbnYpIHsKKwkJCWlmIChkaWVfb25fZXJyb3IgfHwKKwkJCSAgICBlcnJvcl9jb2RlID09IFJFQURfR0lURklMRV9FUlJfTk9UX0FfRklMRSkgeworCQkJCS8qIE5FRURTV09SSzogZmFpbCBpZiAuZ2l0IGlzIG5vdCBmaWxlIG5vciBkaXIgKi8KKwkJCQlpZiAoaXNfZ2l0X2RpcmVjdG9yeShkaXItPmJ1ZikpCisJCQkJCWdpdGRpcmVudiA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKKwkJCX0gZWxzZSBpZiAoZXJyb3JfY29kZSAhPSBSRUFEX0dJVEZJTEVfRVJSX1NUQVRfRkFJTEVEKQorCQkJCXJldHVybiBHSVRfRElSX0lOVkFMSURfR0lURklMRTsKKwkJfQorCQlzdHJidWZfc2V0bGVuKGRpciwgb2Zmc2V0KTsKKwkJaWYgKGdpdGRpcmVudikgeworCQkJc3RyYnVmX2FkZHN0cihnaXRkaXIsIGdpdGRpcmVudik7CisJCQlyZXR1cm4gR0lUX0RJUl9ESVNDT1ZFUkVEOworCQl9CisKKwkJaWYgKGlzX2dpdF9kaXJlY3RvcnkoZGlyLT5idWYpKSB7CisJCQlzdHJidWZfYWRkc3RyKGdpdGRpciwgIi4iKTsKKwkJCXJldHVybiBHSVRfRElSX0JBUkU7CisJCX0KKworCQlpZiAob2Zmc2V0IDw9IG1pbl9vZmZzZXQpCisJCQlyZXR1cm4gR0lUX0RJUl9ISVRfQ0VJTElORzsKKworCQl3aGlsZSAoLS1vZmZzZXQgPiBjZWlsX29mZnNldCAmJiAhaXNfZGlyX3NlcChkaXItPmJ1ZltvZmZzZXRdKSkKKwkJCTsgLyogY29udGludWUgKi8KKwkJaWYgKG9mZnNldCA8PSBjZWlsX29mZnNldCkKKwkJCXJldHVybiBHSVRfRElSX0hJVF9DRUlMSU5HOworCisJCXN0cmJ1Zl9zZXRsZW4oZGlyLCBvZmZzZXQgPiBtaW5fb2Zmc2V0ID8gIG9mZnNldCA6IG1pbl9vZmZzZXQpOworCQlpZiAob25lX2ZpbGVzeXN0ZW0gJiYKKwkJICAgIGN1cnJlbnRfZGV2aWNlICE9IGdldF9kZXZpY2Vfb3JfZGllKGRpci0+YnVmLCBOVUxMLCBvZmZzZXQpKQorCQkJcmV0dXJuIEdJVF9ESVJfSElUX01PVU5UX1BPSU5UOworCX0KK30KKworaW50IGRpc2NvdmVyX2dpdF9kaXJlY3Rvcnkoc3RydWN0IHN0cmJ1ZiAqY29tbW9uZGlyLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZ2l0ZGlyKQoreworCXN0cnVjdCBzdHJidWYgZGlyID0gU1RSQlVGX0lOSVQsIGVyciA9IFNUUkJVRl9JTklUOworCXNpemVfdCBnaXRkaXJfb2Zmc2V0ID0gZ2l0ZGlyLT5sZW4sIGN3ZF9sZW47CisJc2l6ZV90IGNvbW1vbmRpcl9vZmZzZXQgPSBjb21tb25kaXItPmxlbjsKKwlzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgY2FuZGlkYXRlID0gUkVQT1NJVE9SWV9GT1JNQVRfSU5JVDsKKworCWlmIChzdHJidWZfZ2V0Y3dkKCZkaXIpKQorCQlyZXR1cm4gLTE7CisKKwljd2RfbGVuID0gZGlyLmxlbjsKKwlpZiAoc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHlfMSgmZGlyLCBnaXRkaXIsIDApIDw9IDApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmRpcik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFRoZSByZXR1cm5lZCBnaXRkaXIgaXMgcmVsYXRpdmUgdG8gZGlyLCBhbmQgaWYgZGlyIGRvZXMgbm90IHJlZmxlY3QKKwkgKiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgd2Ugc2ltcGx5IG1ha2UgdGhlIGdpdGRpciBhYnNvbHV0ZS4KKwkgKi8KKwlpZiAoZGlyLmxlbiA8IGN3ZF9sZW4gJiYgIWlzX2Fic29sdXRlX3BhdGgoZ2l0ZGlyLT5idWYgKyBnaXRkaXJfb2Zmc2V0KSkgeworCQkvKiBBdm9pZCBhIHRyYWlsaW5nICIvLiIgKi8KKwkJaWYgKCFzdHJjbXAoIi4iLCBnaXRkaXItPmJ1ZiArIGdpdGRpcl9vZmZzZXQpKQorCQkJc3RyYnVmX3NldGxlbihnaXRkaXIsIGdpdGRpcl9vZmZzZXQpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2goJmRpciwgJy8nKTsKKwkJc3RyYnVmX2luc2VydChnaXRkaXIsIGdpdGRpcl9vZmZzZXQsIGRpci5idWYsIGRpci5sZW4pOworCX0KKworCWdldF9jb21tb25fZGlyKGNvbW1vbmRpciwgZ2l0ZGlyLT5idWYgKyBnaXRkaXJfb2Zmc2V0KTsKKworCXN0cmJ1Zl9yZXNldCgmZGlyKTsKKwlzdHJidWZfYWRkZigmZGlyLCAiJXMvY29uZmlnIiwgY29tbW9uZGlyLT5idWYgKyBjb21tb25kaXJfb2Zmc2V0KTsKKwlyZWFkX3JlcG9zaXRvcnlfZm9ybWF0KCZjYW5kaWRhdGUsIGRpci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZkaXIpOworCisJaWYgKHZlcmlmeV9yZXBvc2l0b3J5X2Zvcm1hdCgmY2FuZGlkYXRlLCAmZXJyKSA8IDApIHsKKwkJd2FybmluZygiaWdub3JpbmcgZ2l0IGRpciAnJXMnOiAlcyIsCisJCQlnaXRkaXItPmJ1ZiArIGdpdGRpcl9vZmZzZXQsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJc3RyYnVmX3NldGxlbihjb21tb25kaXIsIGNvbW1vbmRpcl9vZmZzZXQpOworCQlzdHJidWZfc2V0bGVuKGdpdGRpciwgZ2l0ZGlyX29mZnNldCk7CisJCWNsZWFyX3JlcG9zaXRvcnlfZm9ybWF0KCZjYW5kaWRhdGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoJmNhbmRpZGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KGludCAqbm9uZ2l0X29rKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGN3ZCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZGlyID0gU1RSQlVGX0lOSVQsIGdpdGRpciA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJc3RydWN0IHJlcG9zaXRvcnlfZm9ybWF0IHJlcG9fZm10ID0gUkVQT1NJVE9SWV9GT1JNQVRfSU5JVDsKKworCS8qCisJICogV2UgbWF5IGhhdmUgcmVhZCBhbiBpbmNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gYmVmb3JlCisJICogc2V0dGluZy11cCB0aGUgZ2l0IGRpcmVjdG9yeS4gSWYgc28sIGNsZWFyIHRoZSBjYWNoZSBzbworCSAqIHRoYXQgdGhlIG5leHQgcXVlcmllcyB0byB0aGUgY29uZmlndXJhdGlvbiByZWxvYWQgY29tcGxldGUKKwkgKiBjb25maWd1cmF0aW9uIChpbmNsdWRpbmcgdGhlIHBlci1yZXBvIGNvbmZpZyBmaWxlIHRoYXQgd2UKKwkgKiBpZ25vcmVkIHByZXZpb3VzbHkpLgorCSAqLworCWdpdF9jb25maWdfY2xlYXIoKTsKKworCS8qCisJICogTGV0J3MgYXNzdW1lIHRoYXQgd2UgYXJlIGluIGEgZ2l0IHJlcG9zaXRvcnkuCisJICogSWYgaXQgdHVybnMgb3V0IGxhdGVyIHRoYXQgd2UgYXJlIHNvbWV3aGVyZSBlbHNlLCB0aGUgdmFsdWUgd2lsbCBiZQorCSAqIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisJICovCisJaWYgKG5vbmdpdF9vaykKKwkJKm5vbmdpdF9vayA9IDA7CisKKwlpZiAoc3RyYnVmX2dldGN3ZCgmY3dkKSkKKwkJZGllX2Vycm5vKF8oIlVuYWJsZSB0byByZWFkIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiKSk7CisJc3RyYnVmX2FkZGJ1ZigmZGlyLCAmY3dkKTsKKworCXN3aXRjaCAoc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHlfMSgmZGlyLCAmZ2l0ZGlyLCAxKSkgeworCWNhc2UgR0lUX0RJUl9FWFBMSUNJVDoKKwkJcHJlZml4ID0gc2V0dXBfZXhwbGljaXRfZ2l0X2RpcihnaXRkaXIuYnVmLCAmY3dkLCAmcmVwb19mbXQsIG5vbmdpdF9vayk7CisJCWJyZWFrOworCWNhc2UgR0lUX0RJUl9ESVNDT1ZFUkVEOgorCQlpZiAoZGlyLmxlbiA8IGN3ZC5sZW4gJiYgY2hkaXIoZGlyLmJ1ZikpCisJCQlkaWUoXygiY2Fubm90IGNoYW5nZSB0byAnJXMnIiksIGRpci5idWYpOworCQlwcmVmaXggPSBzZXR1cF9kaXNjb3ZlcmVkX2dpdF9kaXIoZ2l0ZGlyLmJ1ZiwgJmN3ZCwgZGlyLmxlbiwKKwkJCQkJCSAgJnJlcG9fZm10LCBub25naXRfb2spOworCQlicmVhazsKKwljYXNlIEdJVF9ESVJfQkFSRToKKwkJaWYgKGRpci5sZW4gPCBjd2QubGVuICYmIGNoZGlyKGRpci5idWYpKQorCQkJZGllKF8oImNhbm5vdCBjaGFuZ2UgdG8gJyVzJyIpLCBkaXIuYnVmKTsKKwkJcHJlZml4ID0gc2V0dXBfYmFyZV9naXRfZGlyKCZjd2QsIGRpci5sZW4sICZyZXBvX2ZtdCwgbm9uZ2l0X29rKTsKKwkJYnJlYWs7CisJY2FzZSBHSVRfRElSX0hJVF9DRUlMSU5HOgorCQlpZiAoIW5vbmdpdF9vaykKKwkJCWRpZShfKCJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMpOiAlcyIpLAorCQkJICAgIERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJCSpub25naXRfb2sgPSAxOworCQlicmVhazsKKwljYXNlIEdJVF9ESVJfSElUX01PVU5UX1BPSU5UOgorCQlpZiAoIW5vbmdpdF9vaykKKwkJCWRpZShfKCJub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludCAlcylcbiIKKwkJCSAgICAgICJTdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZX0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLiIpLAorCQkJICAgIGRpci5idWYpOworCQkqbm9uZ2l0X29rID0gMTsKKwkJYnJlYWs7CisJY2FzZSBHSVRfRElSX05PTkU6CisJCS8qCisJCSAqIEFzIGEgc2FmZWd1YXJkIGFnYWluc3Qgc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHlfMSByZXR1cm5pbmcKKwkJICogdGhpcyB2YWx1ZSwgZmFsbHRocm91Z2ggdG8gQlVHLiBPdGhlcndpc2UgaXQgaXMgcG9zc2libGUgdG8KKwkJICogc2V0IHN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5IHRvIDEgd2hlbiB3ZSBkaWQgbm90aGluZyB0bworCQkgKiBmaW5kIGEgcmVwb3NpdG9yeS4KKwkJICovCisJZGVmYXVsdDoKKwkJQlVHKCJ1bmhhbmRsZWQgc2V0dXBfZ2l0X2RpcmVjdG9yeV8xKCkgcmVzdWx0Iik7CisJfQorCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCBub25naXRfb2sgaXMgc3RhYmxlLiBJZiBpdCBpcyBub24tTlVMTCBhbmQgcG9pbnRzCisJICogdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiB0aGlzIG1lYW5zIHRoYXQgd2UgaGF2ZW4ndCBmb3VuZCBhCisJICogcmVwb3NpdG9yeSBhbmQgdGhhdCB0aGUgY2FsbGVyIGV4cGVjdHMgc3RhcnR1cF9pbmZvIHRvIHJlZmxlY3QKKwkgKiB0aGlzLgorCSAqCisJICogUmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUgb2Ygbm9uZ2l0X29rLCBzdGFydHVwX2luZm8tPnByZWZpeCBhbmQKKwkgKiB0aGUgR0lUX1BSRUZJWCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGFsd2F5cyBtYXRjaC4gRm9yIGRldGFpbHMKKwkgKiBzZWUgRG9jdW1lbnRhdGlvbi9jb25maWcvYWxpYXMudHh0LgorCSAqLworCWlmIChub25naXRfb2sgJiYgKm5vbmdpdF9vaykgeworCQlzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSA9IDA7CisJCXN0YXJ0dXBfaW5mby0+cHJlZml4ID0gTlVMTDsKKwkJc2V0ZW52KEdJVF9QUkVGSVhfRU5WSVJPTk1FTlQsICIiLCAxKTsKKwl9IGVsc2UgeworCQlzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSA9IDE7CisJCXN0YXJ0dXBfaW5mby0+cHJlZml4ID0gcHJlZml4OworCQlpZiAocHJlZml4KQorCQkJc2V0ZW52KEdJVF9QUkVGSVhfRU5WSVJPTk1FTlQsIHByZWZpeCwgMSk7CisJCWVsc2UKKwkJCXNldGVudihHSVRfUFJFRklYX0VOVklST05NRU5ULCAiIiwgMSk7CisJfQorCisJLyoKKwkgKiBOb3QgYWxsIHBhdGhzIHRocm91Z2ggdGhlIHNldHVwIGNvZGUgd2lsbCBjYWxsICdzZXRfZ2l0X2RpcigpJyAod2hpY2gKKwkgKiBkaXJlY3RseSBzZXRzIHVwIHRoZSBlbnZpcm9ubWVudCkgc28gaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRoYXQgdGhlCisJICogZW52aXJvbm1lbnQgaXMgaW4gYSBjb25zaXN0ZW50IHN0YXRlIGFmdGVyIHNldHVwLCBleHBsaWNpdGx5IHNldHVwCisJICogdGhlIGVudmlyb25tZW50IGlmIHdlIGhhdmUgYSByZXBvc2l0b3J5LgorCSAqCisJICogTkVFRFNXT1JLOiBjdXJyZW50bHkgd2UgYWxsb3cgYm9ndXMgR0lUX0RJUiB2YWx1ZXMgdG8gYmUgc2V0IGluIHNvbWUKKwkgKiBjb2RlIHBhdGhzIHNvIHdlIGFsc28gbmVlZCB0byBleHBsaWNpdGx5IHNldHVwIHRoZSBlbnZpcm9ubWVudCBpZgorCSAqIHRoZSB1c2VyIGhhcyBzZXQgR0lUX0RJUi4gIEl0IG1heSBiZSBiZW5lZmljaWFsIHRvIGRpc2FsbG93IGJvZ3VzCisJICogR0lUX0RJUiB2YWx1ZXMgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLgorCSAqLworCWlmICgvKiBHSVRfRElSX0VYUExJQ0lULCBHSVRfRElSX0RJU0NPVkVSRUQsIEdJVF9ESVJfQkFSRSAqLworCSAgICBzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSB8fAorCSAgICAvKiBHSVRfRElSX0VYUExJQ0lUICovCisJICAgIGdldGVudihHSVRfRElSX0VOVklST05NRU5UKSkgeworCQlpZiAoIXRoZV9yZXBvc2l0b3J5LT5naXRkaXIpIHsKKwkJCWNvbnN0IGNoYXIgKmdpdGRpciA9IGdldGVudihHSVRfRElSX0VOVklST05NRU5UKTsKKwkJCWlmICghZ2l0ZGlyKQorCQkJCWdpdGRpciA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKKwkJCXNldHVwX2dpdF9lbnYoZ2l0ZGlyKTsKKwkJfQorCQlpZiAoc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCQlyZXBvX3NldF9oYXNoX2FsZ28odGhlX3JlcG9zaXRvcnksIHJlcG9fZm10Lmhhc2hfYWxnbyk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmRpcik7CisJc3RyYnVmX3JlbGVhc2UoJmdpdGRpcik7CisJY2xlYXJfcmVwb3NpdG9yeV9mb3JtYXQoJnJlcG9fZm10KTsKKworCXJldHVybiBwcmVmaXg7Cit9CisKK2ludCBnaXRfY29uZmlnX3Blcm0oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQgaTsKKwljaGFyICplbmRwdHI7CisKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIFBFUk1fR1JPVVA7CisKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgInVtYXNrIikpCisJCXJldHVybiBQRVJNX1VNQVNLOworCWlmICghc3RyY21wKHZhbHVlLCAiZ3JvdXAiKSkKKwkJcmV0dXJuIFBFUk1fR1JPVVA7CisJaWYgKCFzdHJjbXAodmFsdWUsICJhbGwiKSB8fAorCSAgICAhc3RyY21wKHZhbHVlLCAid29ybGQiKSB8fAorCSAgICAhc3RyY21wKHZhbHVlLCAiZXZlcnlib2R5IikpCisJCXJldHVybiBQRVJNX0VWRVJZQk9EWTsKKworCS8qIFBhcnNlIG9jdGFsIG51bWJlcnMgKi8KKwlpID0gc3RydG9sKHZhbHVlLCAmZW5kcHRyLCA4KTsKKworCS8qIElmIG5vdCBhbiBvY3RhbCBudW1iZXIsIG1heWJlIHRydWUvZmFsc2U/ICovCisJaWYgKCplbmRwdHIgIT0gMCkKKwkJcmV0dXJuIGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/IFBFUk1fR1JPVVAgOiBQRVJNX1VNQVNLOworCisJLyoKKwkgKiBUcmVhdCB2YWx1ZXMgMCwgMSBhbmQgMiBhcyBjb21wYXRpYmlsaXR5IGNhc2VzLCBvdGhlcndpc2UgaXQgaXMKKwkgKiBhIGNobW9kIHZhbHVlIHRvIHJlc3RyaWN0IHRvLgorCSAqLworCXN3aXRjaCAoaSkgeworCWNhc2UgUEVSTV9VTUFTSzogICAgICAgICAgICAgICAvKiAwICovCisJCXJldHVybiBQRVJNX1VNQVNLOworCWNhc2UgT0xEX1BFUk1fR1JPVVA6ICAgICAgICAgICAvKiAxICovCisJCXJldHVybiBQRVJNX0dST1VQOworCWNhc2UgT0xEX1BFUk1fRVZFUllCT0RZOiAgICAgICAvKiAyICovCisJCXJldHVybiBQRVJNX0VWRVJZQk9EWTsKKwl9CisKKwkvKiBBIGZpbGVtb2RlIHZhbHVlIHdhcyBnaXZlbjogMHh4eCAqLworCisJaWYgKChpICYgMDYwMCkgIT0gMDYwMCkKKwkJZGllKF8oInByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgIgorCQkgICAgIigwJS4zbykuXG5UaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSAiCisJCSAgICAicmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIiksIGkpOworCisJLyoKKwkgKiBNYXNrIGZpbGVtb2RlIHZhbHVlLiBPdGhlcnMgY2FuIG5vdCBnZXQgd3JpdGUgcGVybWlzc2lvbi4KKwkgKiB4IGZsYWdzIGZvciBkaXJlY3RvcmllcyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorCSAqLworCXJldHVybiAtKGkgJiAwNjY2KTsKK30KKwordm9pZCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdCh2b2lkKQoreworCXN0cnVjdCByZXBvc2l0b3J5X2Zvcm1hdCByZXBvX2ZtdCA9IFJFUE9TSVRPUllfRk9STUFUX0lOSVQ7CisJY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGdldF9naXRfZGlyKCksICZyZXBvX2ZtdCwgTlVMTCk7CisJc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkgPSAxOworCWNsZWFyX3JlcG9zaXRvcnlfZm9ybWF0KCZyZXBvX2ZtdCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSAicHJlZml4IiwgYSBwYXRoIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgKiByZWxhdGl2ZSB0byB0aGUgd29yayB0cmVlIHJvb3QsIG9yIE5VTEwsIGlmIHRoZSBjdXJyZW50IHdvcmtpbmcKKyAqIGRpcmVjdG9yeSBpcyBub3QgYSBzdHJpY3Qgc3ViZGlyZWN0b3J5IG9mIHRoZSB3b3JrIHRyZWUgcm9vdC4gVGhlCisgKiBwcmVmaXggYWx3YXlzIGVuZHMgd2l0aCBhICcvJyBjaGFyYWN0ZXIuCisgKi8KK2NvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3Rvcnkodm9pZCkKK3sKKwlyZXR1cm4gc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoTlVMTCk7Cit9CisKK2NvbnN0IGNoYXIgKnJlc29sdmVfZ2l0ZGlyX2dlbnRseShjb25zdCBjaGFyICpzdXNwZWN0LCBpbnQgKnJldHVybl9lcnJvcl9jb2RlKQoreworCWlmIChpc19naXRfZGlyZWN0b3J5KHN1c3BlY3QpKQorCQlyZXR1cm4gc3VzcGVjdDsKKwlyZXR1cm4gcmVhZF9naXRmaWxlX2dlbnRseShzdXNwZWN0LCByZXR1cm5fZXJyb3JfY29kZSk7Cit9CisKKy8qIGlmIGFueSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3IgaXMgbWlzc2luZyBvcGVuIGl0IHRvIC9kZXYvbnVsbCAqLwordm9pZCBzYW5pdGl6ZV9zdGRmZHModm9pZCkKK3sKKwlpbnQgZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IsIDApOworCXdoaWxlIChmZCAhPSAtMSAmJiBmZCA8IDIpCisJCWZkID0gZHVwKGZkKTsKKwlpZiAoZmQgPT0gLTEpCisJCWRpZV9lcnJubyhfKCJvcGVuIC9kZXYvbnVsbCBvciBkdXAgZmFpbGVkIikpOworCWlmIChmZCA+IDIpCisJCWNsb3NlKGZkKTsKK30KKworaW50IGRhZW1vbml6ZSh2b2lkKQoreworI2lmZGVmIE5PX1BPU0lYX0dPT0RJRVMKKwllcnJubyA9IEVOT1NZUzsKKwlyZXR1cm4gLTE7CisjZWxzZQorCXN3aXRjaCAoZm9yaygpKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJZGllX2Vycm5vKF8oImZvcmsgZmFpbGVkIikpOworCQlkZWZhdWx0OgorCQkJZXhpdCgwKTsKKwl9CisJaWYgKHNldHNpZCgpID09IC0xKQorCQlkaWVfZXJybm8oXygic2V0c2lkIGZhaWxlZCIpKTsKKwljbG9zZSgwKTsKKwljbG9zZSgxKTsKKwljbG9zZSgyKTsKKwlzYW5pdGl6ZV9zdGRmZHMoKTsKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc2gtaTE4bi0tZW52c3Vic3QuYyBiL3NoLWkxOG4tLWVudnN1YnN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0MzBiOQotLS0gL2Rldi9udWxsCisrKyBiL3NoLWkxOG4tLWVudnN1YnN0LmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qCisgKiBzaC1pMThuLS1lbnZzdWJzdC5jIC0gYSBzdHJpcHBlZC1kb3duIHZlcnNpb24gb2YgZ2V0dGV4dCdzIGVudnN1YnN0KDEpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisgKgorICogVGhpcyBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YKKyAqIDY3ZDA4NzFhOGM6Z2V0dGV4dC1ydW50aW1lL3NyYy9lbnZzdWJzdC5jIGZyb20gdGhlIGdldHRleHQuZ2l0CisgKiByZXBvc2l0b3J5LiBJdCBoYXMgYmVlbiBzdHJpcHBlZCBkb3duIHRvIG9ubHkgaW1wbGVtZW50IHRoZQorICogZW52c3Vic3QoMSkgZmVhdHVyZXMgdGhhdCB3ZSBuZWVkIGluIHRoZSBnaXQtc2gtaTE4biBmYWxsYmFja3MuCisgKgorICogVGhlICJDbG9zZSBzdGFuZGFyZCBlcnJvciIgcGFydCBpbiBtYWluKCkgaXMgZnJvbQorICogOGRhYzAzM2RmMDpnbnVsaWItbG9jYWwvbGliL2Nsb3Nlb3V0LmMuIFRoZSBjb3B5cmlnaHQgbm90aWNlcyBmb3IKKyAqIGJvdGggZmlsZXMgYXJlIHJlcHJvZHVjZWQgaW1tZWRpYXRlbHkgYmVsb3cuCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInRyYWNlMi5oIgorCisvKiBTdWJzdGl0dXRpb24gb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHNoZWxsIGZvcm1hdCBzdHJpbmdzLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBjbG9zZW91dC5jIC0gY2xvc2Ugc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvcgorICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogSWYgdHJ1ZSwgc3Vic3RpdHV0aW9uIHNoYWxsIGJlIHBlcmZvcm1lZCBvbiBhbGwgdmFyaWFibGVzLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgYWxsX3ZhcmlhYmxlczsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBsb2NhbCBmdW5jdGlvbnMuICAqLworc3RhdGljIHZvaWQgcHJpbnRfdmFyaWFibGVzIChjb25zdCBjaGFyICpzdHJpbmcpOworc3RhdGljIHZvaWQgbm90ZV92YXJpYWJsZXMgKGNvbnN0IGNoYXIgKnN0cmluZyk7CitzdGF0aWMgdm9pZCBzdWJzdF9mcm9tX3N0ZGluICh2b2lkKTsKKworaW50CitjbWRfbWFpbiAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKK3sKKyAgLyogRGVmYXVsdCB2YWx1ZXMgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zLiAgKi8KKyAgLyogdW5zaWduZWQgc2hvcnQgaW50IHNob3dfdmFyaWFibGVzID0gMDsgKi8KKworICB0cmFjZTJfY21kX25hbWUoInNoLWkxOG4tLWVudnN1YnN0Iik7CisKKyAgc3dpdGNoIChhcmdjKQorCXsKKwljYXNlIDE6CisJICBlcnJvciAoIndlIHdvbid0IHN1YnN0aXR1dGUgYWxsIHZhcmlhYmxlcyBvbiBzdGRpbiBmb3IgeW91Iik7CisJICBicmVhazsKKwkgIC8qCisJICBhbGxfdmFyaWFibGVzID0gMTsKKyAgICAgIHN1YnN0X2Zyb21fc3RkaW4gKCk7CisJICAqLworCWNhc2UgMjoKKwkgIC8qIGVjaG8gJyRmb28gYW5kICRiYXInIHwgZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICckZm9vIGFuZCAkYmFyJyAqLworCSAgYWxsX3ZhcmlhYmxlcyA9IDA7CisJICBub3RlX3ZhcmlhYmxlcyAoYXJndlsxXSk7CisgICAgICBzdWJzdF9mcm9tX3N0ZGluICgpOworCSAgYnJlYWs7CisJY2FzZSAzOgorCSAgLyogZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICckZm9vIGFuZCAkYmFyJyAqLworCSAgaWYgKHN0cmNtcChhcmd2WzFdLCAiLS12YXJpYWJsZXMiKSkKKwkJZXJyb3IgKCJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIC0tdmFyaWFibGVzIHdoZW4gdHdvIGFyZSBnaXZlbiIpOworCSAgLyogc2hvd192YXJpYWJsZXMgPSAxOyAqLworICAgICAgcHJpbnRfdmFyaWFibGVzIChhcmd2WzJdKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBlcnJvciAoInRvbyBtYW55IGFyZ3VtZW50cyIpOworCSAgYnJlYWs7CisJfQorCisgIC8qIENsb3NlIHN0YW5kYXJkIGVycm9yLiAgVGhpcyBpcyBzaW1wbGVyIHRoYW4gZndyaXRlZXJyb3Jfbm9fZWJhZGYsIGJlY2F1c2UKKyAgICAgdXBvbiBmYWlsdXJlIHdlIGRvbid0IG5lZWQgYW4gZXJybm8gLSBhbGwgd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgaXMgdG8KKyAgICAgc2V0IGFuIGV4aXQgc3RhdHVzLiAgKi8KKyAgZXJybm8gPSAwOworICBpZiAoZmVycm9yIChzdGRlcnIpIHx8IGZmbHVzaCAoc3RkZXJyKSkKKyAgICB7CisgICAgICBmY2xvc2UgKHN0ZGVycik7CisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgaWYgKGZjbG9zZSAoc3RkZXJyKSAmJiBlcnJubyAhPSBFQkFERikKKyAgICBleGl0IChFWElUX0ZBSUxVUkUpOworCisgIGV4aXQgKEVYSVRfU1VDQ0VTUyk7Cit9CisKKy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIGludm9rZSB0aGUgY2FsbGJhY2sgZWFjaCB0aW1lIGEgJFZBUklBQkxFIG9yCisgICAke1ZBUklBQkxFfSBjb25zdHJ1Y3QgaXMgc2Vlbiwgd2hlcmUgVkFSSUFCTEUgaXMgYSBub25lbXB0eSBzZXF1ZW5jZQorICAgb2YgQVNDSUkgYWxwaGFudW1lcmljL3VuZGVyc2NvcmUgY2hhcmFjdGVycywgc3RhcnRpbmcgd2l0aCBhbiBBU0NJSQorICAgYWxwaGFiZXRpYy91bmRlcnNjb3JlIGNoYXJhY3Rlci4KKyAgIFdlIGFsbG93IG9ubHkgQVNDSUkgY2hhcmFjdGVycywgdG8gYXZvaWQgZGVwZW5kZW5jaWVzIHcuci50LiB0aGUgY3VycmVudAorICAgZW5jb2Rpbmc6IFdoaWxlICIke1x4ZTB9IiBsb29rcyBsaWtlIGEgdmFyaWFibGUgYWNjZXNzIGluIElTTy04ODU5LTEKKyAgIGVuY29kaW5nLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBvbmUgaW4gdGhlIEJJRzUsIEJJRzUtSEtTQ1MsIEdCSywgR0IxODAzMCwKKyAgIFNISUZUX0pJUywgSk9IQUIgZW5jb2RpbmdzLCBiZWNhdXNlIFx4ZTBceDdkIGlzIGEgc2luZ2xlIGNoYXJhY3RlciBpbiB0aGVzZQorICAgZW5jb2RpbmdzLiAgKi8KK3N0YXRpYyB2b2lkCitmaW5kX3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nLAorCQl2b2lkICgqY2FsbGJhY2spIChjb25zdCBjaGFyICp2YXJfcHRyLCBzaXplX3QgdmFyX2xlbikpCit7CisgIGZvciAoOyAqc3RyaW5nICE9ICdcMCc7KQorICAgIGlmICgqc3RyaW5nKysgPT0gJyQnKQorICAgICAgeworCWNvbnN0IGNoYXIgKnZhcmlhYmxlX3N0YXJ0OworCWNvbnN0IGNoYXIgKnZhcmlhYmxlX2VuZDsKKwl1bnNpZ25lZCBzaG9ydCBpbnQgdmFsaWQ7CisJY2hhciBjOworCisJaWYgKCpzdHJpbmcgPT0gJ3snKQorCSAgc3RyaW5nKys7CisKKwl2YXJpYWJsZV9zdGFydCA9IHN0cmluZzsKKwljID0gKnN0cmluZzsKKwlpZiAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IGMgPT0gJ18nKQorCSAgeworCSAgICBkbworCSAgICAgIGMgPSAqKytzdHJpbmc7CisJICAgIHdoaWxlICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykKKwkJICAgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBjID09ICdfJyk7CisJICAgIHZhcmlhYmxlX2VuZCA9IHN0cmluZzsKKworCSAgICBpZiAodmFyaWFibGVfc3RhcnRbLTFdID09ICd7JykKKwkgICAgICB7CisJCWlmICgqc3RyaW5nID09ICd9JykKKwkJICB7CisJCSAgICBzdHJpbmcrKzsKKwkJICAgIHZhbGlkID0gMTsKKwkJICB9CisJCWVsc2UKKwkJICB2YWxpZCA9IDA7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgdmFsaWQgPSAxOworCisJICAgIGlmICh2YWxpZCkKKwkgICAgICBjYWxsYmFjayAodmFyaWFibGVfc3RhcnQsIHZhcmlhYmxlX2VuZCAtIHZhcmlhYmxlX3N0YXJ0KTsKKwkgIH0KKyAgICAgIH0KK30KKworCisvKiBQcmludCBhIHZhcmlhYmxlIHRvIHN0ZG91dCwgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAgKi8KK3N0YXRpYyB2b2lkCitwcmludF92YXJpYWJsZSAoY29uc3QgY2hhciAqdmFyX3B0ciwgc2l6ZV90IHZhcl9sZW4pCit7CisgIGZ3cml0ZSAodmFyX3B0ciwgdmFyX2xlbiwgMSwgc3Rkb3V0KTsKKyAgcHV0Y2hhciAoJ1xuJyk7Cit9CisKKy8qIFByaW50IHRoZSB2YXJpYWJsZXMgY29udGFpbmVkIGluIFNUUklORyB0byBzdGRvdXQsIGVhY2ggb25lIGZvbGxvd2VkIGJ5IGEKKyAgIG5ld2xpbmUuICAqLworc3RhdGljIHZvaWQKK3ByaW50X3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICBmaW5kX3ZhcmlhYmxlcyAoc3RyaW5nLCAmcHJpbnRfdmFyaWFibGUpOworfQorCisKKy8qIFR5cGUgZGVzY3JpYmluZyBsaXN0IG9mIGltbXV0YWJsZSBzdHJpbmdzLAorICAgaW1wbGVtZW50ZWQgdXNpbmcgYSBkeW5hbWljIGFycmF5LiAgKi8KK3R5cGVkZWYgc3RydWN0IHN0cmluZ19saXN0X3R5IHN0cmluZ19saXN0X3R5Oworc3RydWN0IHN0cmluZ19saXN0X3R5Cit7CisgIGNvbnN0IGNoYXIgKippdGVtOworICBzaXplX3Qgbml0ZW1zOworICBzaXplX3Qgbml0ZW1zX21heDsKK307CisKKy8qIEluaXRpYWxpemUgYW4gZW1wdHkgbGlzdCBvZiBzdHJpbmdzLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc3RyaW5nX2xpc3RfaW5pdCAoc3RyaW5nX2xpc3RfdHkgKnNscCkKK3sKKyAgc2xwLT5pdGVtID0gTlVMTDsKKyAgc2xwLT5uaXRlbXMgPSAwOworICBzbHAtPm5pdGVtc19tYXggPSAwOworfQorCisvKiBBcHBlbmQgYSBzaW5nbGUgc3RyaW5nIHRvIHRoZSBlbmQgb2YgYSBsaXN0IG9mIHN0cmluZ3MuICAqLworc3RhdGljIGlubGluZSB2b2lkCitzdHJpbmdfbGlzdF9hcHBlbmQgKHN0cmluZ19saXN0X3R5ICpzbHAsIGNvbnN0IGNoYXIgKnMpCit7CisgIC8qIEdyb3cgdGhlIGxpc3QuICAqLworICBpZiAoc2xwLT5uaXRlbXMgPj0gc2xwLT5uaXRlbXNfbWF4KQorICAgIHsKKyAgICAgIHNscC0+bml0ZW1zX21heCA9IHNscC0+bml0ZW1zX21heCAqIDIgKyA0OworICAgICAgUkVBTExPQ19BUlJBWShzbHAtPml0ZW0sIHNscC0+bml0ZW1zX21heCk7CisgICAgfQorCisgIC8qIEFkZCB0aGUgc3RyaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICAqLworICBzbHAtPml0ZW1bc2xwLT5uaXRlbXMrK10gPSBzOworfQorCisvKiBDb21wYXJlIHR3byBzdHJpbmdzIGdpdmVuIGJ5IHJlZmVyZW5jZS4gICovCitzdGF0aWMgaW50CitjbXBfc3RyaW5nIChjb25zdCB2b2lkICpwc3RyMSwgY29uc3Qgdm9pZCAqcHN0cjIpCit7CisgIGNvbnN0IGNoYXIgKnN0cjEgPSAqKGNvbnN0IGNoYXIgKiopcHN0cjE7CisgIGNvbnN0IGNoYXIgKnN0cjIgPSAqKGNvbnN0IGNoYXIgKiopcHN0cjI7CisKKyAgcmV0dXJuIHN0cmNtcCAoc3RyMSwgc3RyMik7Cit9CisKKy8qIFNvcnQgYSBsaXN0IG9mIHN0cmluZ3MuICAqLworc3RhdGljIGlubGluZSB2b2lkCitzdHJpbmdfbGlzdF9zb3J0IChzdHJpbmdfbGlzdF90eSAqc2xwKQoreworICBRU09SVChzbHAtPml0ZW0sIHNscC0+bml0ZW1zLCBjbXBfc3RyaW5nKTsKK30KKworLyogVGVzdCB3aGV0aGVyIGEgc29ydGVkIHN0cmluZyBsaXN0IGNvbnRhaW5zIGEgZ2l2ZW4gc3RyaW5nLiAgKi8KK3N0YXRpYyBpbnQKK3NvcnRlZF9zdHJpbmdfbGlzdF9tZW1iZXIgKGNvbnN0IHN0cmluZ19saXN0X3R5ICpzbHAsIGNvbnN0IGNoYXIgKnMpCit7CisgIHNpemVfdCBqMSwgajI7CisKKyAgajEgPSAwOworICBqMiA9IHNscC0+bml0ZW1zOworICBpZiAoajIgPiAwKQorICAgIHsKKyAgICAgIC8qIEJpbmFyeSBzZWFyY2guICAqLworICAgICAgd2hpbGUgKGoyIC0gajEgPiAxKQorCXsKKwkgIC8qIEhlcmUgd2Uga25vdyB0aGF0IGlmIHMgaXMgaW4gdGhlIGxpc3QsIGl0IGlzIGF0IGFuIGluZGV4IGoKKwkgICAgIHdpdGggajEgPD0gaiA8IGoyLiAgKi8KKwkgIHNpemVfdCBqID0gajEgKyAoKGoyIC0gajEpID4+IDEpOworCSAgaW50IHJlc3VsdCA9IHN0cmNtcCAoc2xwLT5pdGVtW2pdLCBzKTsKKworCSAgaWYgKHJlc3VsdCA+IDApCisJICAgIGoyID0gajsKKwkgIGVsc2UgaWYgKHJlc3VsdCA9PSAwKQorCSAgICByZXR1cm4gMTsKKwkgIGVsc2UKKwkgICAgajEgPSBqICsgMTsKKwl9CisgICAgICBpZiAoajIgPiBqMSkKKwlpZiAoc3RyY21wIChzbHAtPml0ZW1bajFdLCBzKSA9PSAwKQorCSAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworCisvKiBTZXQgb2YgdmFyaWFibGVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gc3Vic3RpdHV0aW9uLgorICAgVXNlZCBvbmx5IGlmICFhbGxfdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBzdHJpbmdfbGlzdF90eSB2YXJpYWJsZXNfc2V0OworCisvKiBBZGRzIGEgdmFyaWFibGUgdG8gdmFyaWFibGVzX3NldC4gICovCitzdGF0aWMgdm9pZAorbm90ZV92YXJpYWJsZSAoY29uc3QgY2hhciAqdmFyX3B0ciwgc2l6ZV90IHZhcl9sZW4pCit7CisgIGNoYXIgKnN0cmluZyA9IHhtZW1kdXB6ICh2YXJfcHRyLCB2YXJfbGVuKTsKKworICBzdHJpbmdfbGlzdF9hcHBlbmQgKCZ2YXJpYWJsZXNfc2V0LCBzdHJpbmcpOworfQorCisvKiBTdG9yZXMgdGhlIHZhcmlhYmxlcyBvY2N1cnJpbmcgaW4gdGhlIHN0cmluZyBpbiB2YXJpYWJsZXNfc2V0LiAgKi8KK3N0YXRpYyB2b2lkCitub3RlX3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICBzdHJpbmdfbGlzdF9pbml0ICgmdmFyaWFibGVzX3NldCk7CisgIGZpbmRfdmFyaWFibGVzIChzdHJpbmcsICZub3RlX3ZhcmlhYmxlKTsKKyAgc3RyaW5nX2xpc3Rfc29ydCAoJnZhcmlhYmxlc19zZXQpOworfQorCisKK3N0YXRpYyBpbnQKK2RvX2dldGMgKHZvaWQpCit7CisgIGludCBjID0gZ2V0YyAoc3RkaW4pOworCisgIGlmIChjID09IEVPRikKKyAgICB7CisgICAgICBpZiAoZmVycm9yIChzdGRpbikpCisJZXJyb3IgKCJlcnJvciB3aGlsZSByZWFkaW5nIHN0YW5kYXJkIGlucHV0Iik7CisgICAgfQorCisgIHJldHVybiBjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvX3VuZ2V0YyAoaW50IGMpCit7CisgIGlmIChjICE9IEVPRikKKyAgICB1bmdldGMgKGMsIHN0ZGluKTsKK30KKworLyogQ29waWVzIHN0ZGluIHRvIHN0ZG91dCwgcGVyZm9ybWluZyBzdWJzdGl0dXRpb25zLiAgKi8KK3N0YXRpYyB2b2lkCitzdWJzdF9mcm9tX3N0ZGluICh2b2lkKQoreworICBzdGF0aWMgY2hhciAqYnVmZmVyOworICBzdGF0aWMgc2l6ZV90IGJ1Zm1heDsKKyAgc3RhdGljIHNpemVfdCBidWZsZW47CisgIGludCBjOworCisgIGZvciAoOzspCisgICAgeworICAgICAgYyA9IGRvX2dldGMgKCk7CisgICAgICBpZiAoYyA9PSBFT0YpCisJYnJlYWs7CisgICAgICAvKiBMb29rIGZvciAkVkFSSUFCTEUgb3IgJHtWQVJJQUJMRX0uICAqLworICAgICAgaWYgKGMgPT0gJyQnKQorCXsKKwkgIHVuc2lnbmVkIHNob3J0IGludCBvcGVuaW5nX2JyYWNlID0gMDsKKwkgIHVuc2lnbmVkIHNob3J0IGludCBjbG9zaW5nX2JyYWNlID0gMDsKKworCSAgYyA9IGRvX2dldGMgKCk7CisJICBpZiAoYyA9PSAneycpCisJICAgIHsKKwkgICAgICBvcGVuaW5nX2JyYWNlID0gMTsKKwkgICAgICBjID0gZG9fZ2V0YyAoKTsKKwkgICAgfQorCSAgaWYgKChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCBjID09ICdfJykKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIHNob3J0IGludCB2YWxpZDsKKworCSAgICAgIC8qIEFjY3VtdWxhdGUgdGhlIFZBUklBQkxFIGluIGJ1ZmZlci4gICovCisJICAgICAgYnVmbGVuID0gMDsKKwkgICAgICBkbworCQl7CisJCSAgaWYgKGJ1ZmxlbiA+PSBidWZtYXgpCisJCSAgICB7CisJCSAgICAgIGJ1Zm1heCA9IDIgKiBidWZtYXggKyAxMDsKKwkJICAgICAgYnVmZmVyID0geHJlYWxsb2MgKGJ1ZmZlciwgYnVmbWF4KTsKKwkJICAgIH0KKwkJICBidWZmZXJbYnVmbGVuKytdID0gYzsKKworCQkgIGMgPSBkb19nZXRjICgpOworCQl9CisJICAgICAgd2hpbGUgKChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKQorCQkgICAgIHx8IChjID49ICcwJyAmJiBjIDw9ICc5JykgfHwgYyA9PSAnXycpOworCisJICAgICAgaWYgKG9wZW5pbmdfYnJhY2UpCisJCXsKKwkJICBpZiAoYyA9PSAnfScpCisJCSAgICB7CisJCSAgICAgIGNsb3NpbmdfYnJhY2UgPSAxOworCQkgICAgICB2YWxpZCA9IDE7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICB2YWxpZCA9IDA7CisJCSAgICAgIGRvX3VuZ2V0YyAoYyk7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB2YWxpZCA9IDE7CisJCSAgZG9fdW5nZXRjIChjKTsKKwkJfQorCisJICAgICAgaWYgKHZhbGlkKQorCQl7CisJCSAgLyogVGVybWluYXRlIHRoZSB2YXJpYWJsZSBpbiB0aGUgYnVmZmVyLiAgKi8KKwkJICBpZiAoYnVmbGVuID49IGJ1Zm1heCkKKwkJICAgIHsKKwkJICAgICAgYnVmbWF4ID0gMiAqIGJ1Zm1heCArIDEwOworCQkgICAgICBidWZmZXIgPSB4cmVhbGxvYyAoYnVmZmVyLCBidWZtYXgpOworCQkgICAgfQorCQkgIGJ1ZmZlcltidWZsZW5dID0gJ1wwJzsKKworCQkgIC8qIFRlc3Qgd2hldGhlciB0aGUgdmFyaWFibGUgc2hhbGwgYmUgc3Vic3RpdHV0ZWQuICAqLworCQkgIGlmICghYWxsX3ZhcmlhYmxlcworCQkgICAgICAmJiAhc29ydGVkX3N0cmluZ19saXN0X21lbWJlciAoJnZhcmlhYmxlc19zZXQsIGJ1ZmZlcikpCisJCSAgICB2YWxpZCA9IDA7CisJCX0KKworCSAgICAgIGlmICh2YWxpZCkKKwkJeworCQkgIC8qIFN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgZnJvbSB0aGUgZW52aXJvbm1lbnQuICAqLworCQkgIGNvbnN0IGNoYXIgKmVudl92YWx1ZSA9IGdldGVudiAoYnVmZmVyKTsKKworCQkgIGlmIChlbnZfdmFsdWUgIT0gTlVMTCkKKwkJICAgIGZwdXRzIChlbnZfdmFsdWUsIHN0ZG91dCk7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBQZXJmb3JtIG5vIHN1YnN0aXR1dGlvbiBhdCBhbGwuICBTaW5jZSB0aGUgYnVmZmVyZWQgaW5wdXQKKwkJICAgICBjb250YWlucyBubyBvdGhlciAnJCcgdGhhbiBhdCB0aGUgc3RhcnQsIHdlIGNhbiBqdXN0CisJCSAgICAgb3V0cHV0IGFsbCB0aGUgYnVmZmVyZWQgY29udGVudHMuICAqLworCQkgIHB1dGNoYXIgKCckJyk7CisJCSAgaWYgKG9wZW5pbmdfYnJhY2UpCisJCSAgICBwdXRjaGFyICgneycpOworCQkgIGZ3cml0ZSAoYnVmZmVyLCBidWZsZW4sIDEsIHN0ZG91dCk7CisJCSAgaWYgKGNsb3NpbmdfYnJhY2UpCisJCSAgICBwdXRjaGFyICgnfScpOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGRvX3VuZ2V0YyAoYyk7CisJICAgICAgcHV0Y2hhciAoJyQnKTsKKwkgICAgICBpZiAob3BlbmluZ19icmFjZSkKKwkJcHV0Y2hhciAoJ3snKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwlwdXRjaGFyIChjKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zaGExLWFycmF5LmMgYi9zaGExLWFycmF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlYWRmZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYTEtYXJyYXkuYwpAQCAtMCwwICsxLDk2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKwordm9pZCBvaWRfYXJyYXlfYXBwZW5kKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJQUxMT0NfR1JPVyhhcnJheS0+b2lkLCBhcnJheS0+bnIgKyAxLCBhcnJheS0+YWxsb2MpOworCW9pZGNweSgmYXJyYXktPm9pZFthcnJheS0+bnIrK10sIG9pZCk7CisJYXJyYXktPnNvcnRlZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgdm9pZF9oYXNoY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuIG9pZGNtcChhLCBiKTsKK30KKworc3RhdGljIHZvaWQgb2lkX2FycmF5X3NvcnQoc3RydWN0IG9pZF9hcnJheSAqYXJyYXkpCit7CisJUVNPUlQoYXJyYXktPm9pZCwgYXJyYXktPm5yLCB2b2lkX2hhc2hjbXApOworCWFycmF5LT5zb3J0ZWQgPSAxOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMV9hY2Nlc3Moc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICphcnJheSA9IHRhYmxlOworCXJldHVybiBhcnJheVtpbmRleF0uaGFzaDsKK30KKworaW50IG9pZF9hcnJheV9sb29rdXAoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpZiAoIWFycmF5LT5zb3J0ZWQpCisJCW9pZF9hcnJheV9zb3J0KGFycmF5KTsKKwlyZXR1cm4gc2hhMV9wb3Mob2lkLT5oYXNoLCBhcnJheS0+b2lkLCBhcnJheS0+bnIsIHNoYTFfYWNjZXNzKTsKK30KKwordm9pZCBvaWRfYXJyYXlfY2xlYXIoc3RydWN0IG9pZF9hcnJheSAqYXJyYXkpCit7CisJRlJFRV9BTkRfTlVMTChhcnJheS0+b2lkKTsKKwlhcnJheS0+bnIgPSAwOworCWFycmF5LT5hbGxvYyA9IDA7CisJYXJyYXktPnNvcnRlZCA9IDA7Cit9CisKKworaW50IG9pZF9hcnJheV9mb3JfZWFjaChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwKKwkJICAgICAgIGZvcl9lYWNoX29pZF9mbiBmbiwKKwkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisKKwkvKiBObyBvaWRfYXJyYXlfc29ydCgpIGhlcmUhIFNlZSBzaGExLWFycmF5LmggKi8KKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykgeworCQlpbnQgcmV0ID0gZm4oYXJyYXktPm9pZCArIGksIGRhdGEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBvaWRfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LAorCQkJICAgICAgZm9yX2VhY2hfb2lkX2ZuIGZuLAorCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWlmICghYXJyYXktPnNvcnRlZCkKKwkJb2lkX2FycmF5X3NvcnQoYXJyYXkpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CisJCWludCByZXQ7CisJCWlmIChpID4gMCAmJiBvaWRlcShhcnJheS0+b2lkICsgaSwgYXJyYXktPm9pZCArIGkgLSAxKSkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBmbihhcnJheS0+b2lkICsgaSwgZGF0YSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBvaWRfYXJyYXlfZmlsdGVyKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LAorCQkgICAgICBmb3JfZWFjaF9vaWRfZm4gd2FudCwKKwkJICAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKwl1bnNpZ25lZCBuciA9IGFycmF5LT5uciwgc3JjLCBkc3Q7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkcyA9IGFycmF5LT5vaWQ7CisKKwlmb3IgKHNyYyA9IGRzdCA9IDA7IHNyYyA8IG5yOyBzcmMrKykgeworCQlpZiAod2FudCgmb2lkc1tzcmNdLCBjYl9kYXRhKSkgeworCQkJaWYgKHNyYyAhPSBkc3QpCisJCQkJb2lkY3B5KCZvaWRzW2RzdF0sICZvaWRzW3NyY10pOworCQkJZHN0Kys7CisJCX0KKwl9CisJYXJyYXktPm5yID0gZHN0OworfQpkaWZmIC0tZ2l0IGEvc2hhMS1hcnJheS5oIGIvc2hhMS1hcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMWJjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExLWFycmF5LmgKQEAgLTAsMCArMSwxMDkgQEAKKyNpZm5kZWYgU0hBMV9BUlJBWV9ICisjZGVmaW5lIFNIQTFfQVJSQVlfSAorCisvKioKKyAqIFRoZSBBUEkgcHJvdmlkZXMgc3RvcmFnZSBhbmQgbWFuaXB1bGF0aW9uIG9mIHNldHMgb2Ygb2JqZWN0IGlkZW50aWZpZXJzLgorICogVGhlIGVtcGhhc2lzIGlzIG9uIHN0b3JhZ2UgYW5kIHByb2Nlc3NpbmcgZWZmaWNpZW5jeSwgbWFraW5nIHRoZW0gc3VpdGFibGUKKyAqIGZvciBsYXJnZSBsaXN0cy4gTm90ZSB0aGF0IHRoZSBvcmRlcmluZyBvZiBpdGVtcyBpcyBub3QgcHJlc2VydmVkIG92ZXIgc29tZQorICogb3BlcmF0aW9ucy4KKyAqCisgKiBFeGFtcGxlcworICogLS0tLS0tLS0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBpbnQgcHJpbnRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorICogCQkgICAgdm9pZCAqZGF0YSkKKyAqIHsKKyAqIAlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworICogCXJldHVybiAwOyAvLyBhbHdheXMgY29udGludWUKKyAqIH0KKyAqCisgKiB2b2lkIHNvbWVfZnVuYyh2b2lkKQorICogeworICogICAgIHN0cnVjdCBzaGExX2FycmF5IGhhc2hlcyA9IE9JRF9BUlJBWV9JTklUOworICogICAgIHN0cnVjdCBvYmplY3RfaWQgb2lkOworICoKKyAqICAgICAvLyBSZWFkIG9iamVjdHMgaW50byBvdXIgc2V0CisgKiAgICAgd2hpbGUgKHJlYWRfb2JqZWN0X2Zyb21fc3RkaW4ob2lkLmhhc2gpKQorICogICAgICAgICBvaWRfYXJyYXlfYXBwZW5kKCZoYXNoZXMsICZvaWQpOworICoKKyAqICAgICAvLyBDaGVjayBpZiBzb21lIG9iamVjdHMgYXJlIGluIG91ciBzZXQKKyAqICAgICB3aGlsZSAocmVhZF9vYmplY3RfZnJvbV9zdGRpbihvaWQuaGFzaCkpIHsKKyAqICAgICAgICAgaWYgKG9pZF9hcnJheV9sb29rdXAoJmhhc2hlcywgJm9pZCkgPj0gMCkKKyAqICAgICAgICAgICAgIHByaW50ZigiaXQncyBpbiB0aGVyZSFcbiIpOworICoKKyAqICAgICAgICAgIC8vIFByaW50IHRoZSB1bmlxdWUgc2V0IG9mIG9iamVjdHMuIFdlIGNvdWxkIGFsc28gaGF2ZQorICogICAgICAgICAgLy8gYXZvaWRlZCBhZGRpbmcgZHVwbGljYXRlIG9iamVjdHMgaW4gdGhlIGZpcnN0IHBsYWNlLAorICogICAgICAgICAgLy8gYnV0IHdlIHdvdWxkIGVuZCB1cCByZS1zb3J0aW5nIHRoZSBhcnJheSByZXBlYXRlZGx5LgorICogICAgICAgICAgLy8gSW5zdGVhZCwgdGhpcyB3aWxsIHNvcnQgb25jZSBhbmQgdGhlbiBza2lwIGR1cGxpY2F0ZXMKKyAqICAgICAgICAgIC8vIGluIGxpbmVhciB0aW1lLgorICoKKyAqICAgICAgICAgb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmaGFzaGVzLCBwcmludF9jYWxsYmFjaywgTlVMTCk7CisgKiAgICAgfQorICovCisKKy8qKgorICogQSBzaW5nbGUgYXJyYXkgb2Ygb2JqZWN0IElEcy4gVGhpcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYnkgYXNzaWdubWVudCBmcm9tCisgKiBgT0lEX0FSUkFZX0lOSVRgLiBUaGUgYG9pZGAgbWVtYmVyIGNvbnRhaW5zIHRoZSBhY3R1YWwgZGF0YS4gVGhlIGBucmAgbWVtYmVyCisgKiBjb250YWlucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZXQuIFRoZSBgYWxsb2NgIGFuZCBgc29ydGVkYCBtZW1iZXJzCisgKiBhcmUgdXNlZCBpbnRlcm5hbGx5LCBhbmQgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYnkgQVBJIGNhbGxlcnMuCisgKi8KK3N0cnVjdCBvaWRfYXJyYXkgeworCXN0cnVjdCBvYmplY3RfaWQgKm9pZDsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCWludCBzb3J0ZWQ7Cit9OworCisjZGVmaW5lIE9JRF9BUlJBWV9JTklUIHsgTlVMTCwgMCwgMCwgMCB9CisKKy8qKgorICogQWRkIGFuIGl0ZW0gdG8gdGhlIHNldC4gVGhlIG9iamVjdCBJRCB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheQorICogKGJ1dCBub3RlIHRoYXQgc29tZSBvcGVyYXRpb25zIGJlbG93IG1heSBsb3NlIHRoaXMgb3JkZXJpbmcpLgorICovCit2b2lkIG9pZF9hcnJheV9hcHBlbmQoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qKgorICogUGVyZm9ybSBhIGJpbmFyeSBzZWFyY2ggb2YgdGhlIGFycmF5IGZvciBhIHNwZWNpZmljIG9iamVjdCBJRC4gSWYgZm91bmQsCisgKiByZXR1cm5zIHRoZSBvZmZzZXQgKGluIG51bWJlciBvZiBlbGVtZW50cykgb2YgdGhlIG9iamVjdCBJRC4gSWYgbm90IGZvdW5kLAorICogcmV0dXJucyBhIG5lZ2F0aXZlIGludGVnZXIuIElmIHRoZSBhcnJheSBpcyBub3Qgc29ydGVkLCB0aGlzIGZ1bmN0aW9uIGhhcworICogdGhlIHNpZGUgZWZmZWN0IG9mIHNvcnRpbmcgaXQuCisgKi8KK2ludCBvaWRfYXJyYXlfbG9va3VwKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisvKioKKyAqIEZyZWUgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgdG8gdGhlIGluaXRpYWwsCisgKiBlbXB0eSBzdGF0ZS4KKyAqLwordm9pZCBvaWRfYXJyYXlfY2xlYXIoc3RydWN0IG9pZF9hcnJheSAqYXJyYXkpOworCit0eXBlZGVmIGludCAoKmZvcl9lYWNoX29pZF9mbikoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgIHZvaWQgKmRhdGEpOworLyoqCisgKiBJdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0LCBleGVjdXRpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvcgorICogZWFjaCBvbmUuIERvZXMgbm90IHNvcnQgdGhlIGxpc3QsIHNvIGFueSBjdXN0b20gaGFzaCBvcmRlciBpcyByZXRhaW5lZC4KKyAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIHRoZSBpdGVyYXRpb24gZW5kcyBpbW1lZGlhdGVseQorICogYW5kIHRoZSBjYWxsYmFjaydzIHJldHVybiBpcyBwcm9wYWdhdGVkOyBvdGhlcndpc2UsIDAgaXMgcmV0dXJuZWQuCisgKi8KK2ludCBvaWRfYXJyYXlfZm9yX2VhY2goc3RydWN0IG9pZF9hcnJheSAqYXJyYXksCisJCSAgICAgICBmb3JfZWFjaF9vaWRfZm4gZm4sCisJCSAgICAgICB2b2lkICpkYXRhKTsKKworLyoqCisgKiBJdGVyYXRlIG92ZXIgZWFjaCB1bmlxdWUgZWxlbWVudCBvZiB0aGUgbGlzdCBpbiBzb3J0ZWQgb3JkZXIsIGJ1dCBvdGhlcndpc2UKKyAqIGJlaGF2ZSBsaWtlIGBvaWRfYXJyYXlfZm9yX2VhY2hgLiBJZiB0aGUgYXJyYXkgaXMgbm90IHNvcnRlZCwgdGhpcyBmdW5jdGlvbgorICogaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBzb3J0aW5nIGl0LgorICovCitpbnQgb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZShzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwKKwkJCSAgICAgIGZvcl9lYWNoX29pZF9mbiBmbiwKKwkJCSAgICAgIHZvaWQgKmRhdGEpOworCisvKioKKyAqIEFwcGx5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBgd2FudGAgdG8gZWFjaCBlbnRyeSBpbiB0aGUgYXJyYXksIHJldGFpbmluZworICogb25seSB0aGUgZW50cmllcyBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4gUHJlc2VydmUgdGhlIG9yZGVyCisgKiBvZiB0aGUgZW50cmllcyB0aGF0IGFyZSByZXRhaW5lZC4KKyAqLwordm9pZCBvaWRfYXJyYXlfZmlsdGVyKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LAorCQkgICAgICBmb3JfZWFjaF9vaWRfZm4gd2FudCwKKwkJICAgICAgdm9pZCAqY2JkYXRhKTsKKworI2VuZGlmIC8qIFNIQTFfQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEvc2hhMS1maWxlLmMgYi9zaGExLWZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTY4ODY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhMS1maWxlLmMKQEAgLTAsMCArMSwyNTIwIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICoKKyAqIFRoaXMgaGFuZGxlcyBiYXNpYyBnaXQgc2hhMSBvYmplY3QgZmlsZXMgLSBwYWNraW5nLCB1bnBhY2tpbmcsCisgKiBjcmVhdGlvbiBldGMuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgImJ1bGstY2hlY2tpbi5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJyZXBsYWNlLW9iamVjdC5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInBhY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicHJvbWlzb3ItcmVtb3RlLmgiCisKKy8qIFRoZSBtYXhpbXVtIHNpemUgZm9yIGFuIG9iamVjdCBoZWFkZXIuICovCisjZGVmaW5lIE1BWF9IRUFERVJfTEVOIDMyCisKKworI2RlZmluZSBFTVBUWV9UUkVFX1NIQTFfQklOX0xJVEVSQUwgXAorCSAiXHg0Ylx4ODJceDVkXHhjNlx4NDJceGNiXHg2ZVx4YjlceGEwXHg2MCIgXAorCSAiXHhlNVx4NGJceGY4XHhkNlx4OTJceDg4XHhmYlx4ZWVceDQ5XHgwNCIKKyNkZWZpbmUgRU1QVFlfVFJFRV9TSEEyNTZfQklOX0xJVEVSQUwgXAorCSJceDZlXHhmMVx4OWJceDQxXHgyMlx4NWNceDUzXHg2OVx4ZjFceGMxIiBcCisJIlx4MDRceGQ0XHg1ZFx4OGRceDg1XHhlZlx4YTlceGIwXHg1N1x4YjUiIFwKKwkiXHgzYlx4MTRceGI0XHhiOVx4YjlceDM5XHhkZFx4NzRceGRlXHhjYyIgXAorCSJceDUzXHgyMSIKKworI2RlZmluZSBFTVBUWV9CTE9CX1NIQTFfQklOX0xJVEVSQUwgXAorCSJceGU2XHg5ZFx4ZTJceDliXHhiMlx4ZDFceGQ2XHg0M1x4NGJceDhiIiBcCisJIlx4MjlceGFlXHg3N1x4NWFceGQ4XHhjMlx4ZTRceDhjXHg1M1x4OTEiCisjZGVmaW5lIEVNUFRZX0JMT0JfU0hBMjU2X0JJTl9MSVRFUkFMIFwKKwkiXHg0N1x4M2FceDBmXHg0Y1x4M2JceGU4XHhhOVx4MzZceDgxXHhhMiIgXAorCSJceDY3XHhlM1x4YjFceGU5XHhhN1x4ZGNceGRhXHgxMVx4ODVceDQzIiBcCisJIlx4NmZceGUxXHg0MVx4ZjdceDc0XHg5MVx4MjBceGEzXHgwM1x4NzIiIFwKKwkiXHgxOFx4MTMiCisKK2NvbnN0IHN0cnVjdCBvYmplY3RfaWQgbnVsbF9vaWQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9pZCBlbXB0eV90cmVlX29pZCA9IHsKKwlFTVBUWV9UUkVFX1NIQTFfQklOX0xJVEVSQUwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9pZCBlbXB0eV9ibG9iX29pZCA9IHsKKwlFTVBUWV9CTE9CX1NIQTFfQklOX0xJVEVSQUwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9pZCBlbXB0eV90cmVlX29pZF9zaGEyNTYgPSB7CisJRU1QVFlfVFJFRV9TSEEyNTZfQklOX0xJVEVSQUwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamVjdF9pZCBlbXB0eV9ibG9iX29pZF9zaGEyNTYgPSB7CisJRU1QVFlfQkxPQl9TSEEyNTZfQklOX0xJVEVSQUwKK307CisKK3N0YXRpYyB2b2lkIGdpdF9oYXNoX3NoYTFfaW5pdChnaXRfaGFzaF9jdHggKmN0eCkKK3sKKwlnaXRfU0hBMV9Jbml0KCZjdHgtPnNoYTEpOworfQorCitzdGF0aWMgdm9pZCBnaXRfaGFzaF9zaGExX3VwZGF0ZShnaXRfaGFzaF9jdHggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlnaXRfU0hBMV9VcGRhdGUoJmN0eC0+c2hhMSwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgZ2l0X2hhc2hfc2hhMV9maW5hbCh1bnNpZ25lZCBjaGFyICpoYXNoLCBnaXRfaGFzaF9jdHggKmN0eCkKK3sKKwlnaXRfU0hBMV9GaW5hbChoYXNoLCAmY3R4LT5zaGExKTsKK30KKworCitzdGF0aWMgdm9pZCBnaXRfaGFzaF9zaGEyNTZfaW5pdChnaXRfaGFzaF9jdHggKmN0eCkKK3sKKwlnaXRfU0hBMjU2X0luaXQoJmN0eC0+c2hhMjU2KTsKK30KKworc3RhdGljIHZvaWQgZ2l0X2hhc2hfc2hhMjU2X3VwZGF0ZShnaXRfaGFzaF9jdHggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlnaXRfU0hBMjU2X1VwZGF0ZSgmY3R4LT5zaGEyNTYsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9oYXNoX3NoYTI1Nl9maW5hbCh1bnNpZ25lZCBjaGFyICpoYXNoLCBnaXRfaGFzaF9jdHggKmN0eCkKK3sKKwlnaXRfU0hBMjU2X0ZpbmFsKGhhc2gsICZjdHgtPnNoYTI1Nik7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9oYXNoX3Vua25vd25faW5pdChnaXRfaGFzaF9jdHggKmN0eCkKK3sKKwlCVUcoInRyeWluZyB0byBpbml0IHVua25vd24gaGFzaCIpOworfQorCitzdGF0aWMgdm9pZCBnaXRfaGFzaF91bmtub3duX3VwZGF0ZShnaXRfaGFzaF9jdHggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlCVUcoInRyeWluZyB0byB1cGRhdGUgdW5rbm93biBoYXNoIik7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9oYXNoX3Vua25vd25fZmluYWwodW5zaWduZWQgY2hhciAqaGFzaCwgZ2l0X2hhc2hfY3R4ICpjdHgpCit7CisJQlVHKCJ0cnlpbmcgdG8gZmluYWxpemUgdW5rbm93biBoYXNoIik7Cit9CisKK2NvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvIGhhc2hfYWxnb3NbR0lUX0hBU0hfTkFMR09TXSA9IHsKKwl7CisJCU5VTEwsCisJCTB4MDAwMDAwMDAsCisJCTAsCisJCTAsCisJCTAsCisJCWdpdF9oYXNoX3Vua25vd25faW5pdCwKKwkJZ2l0X2hhc2hfdW5rbm93bl91cGRhdGUsCisJCWdpdF9oYXNoX3Vua25vd25fZmluYWwsCisJCU5VTEwsCisJCU5VTEwsCisJfSwKKwl7CisJCSJzaGExIiwKKwkJLyogInNoYTEiLCBiaWctZW5kaWFuICovCisJCTB4NzM2ODYxMzEsCisJCUdJVF9TSEExX1JBV1NaLAorCQlHSVRfU0hBMV9IRVhTWiwKKwkJR0lUX1NIQTFfQkxLU1osCisJCWdpdF9oYXNoX3NoYTFfaW5pdCwKKwkJZ2l0X2hhc2hfc2hhMV91cGRhdGUsCisJCWdpdF9oYXNoX3NoYTFfZmluYWwsCisJCSZlbXB0eV90cmVlX29pZCwKKwkJJmVtcHR5X2Jsb2Jfb2lkLAorCX0sCisJeworCQkic2hhMjU2IiwKKwkJLyogInMyNTYiLCBiaWctZW5kaWFuICovCisJCTB4NzMzMjM1MzYsCisJCUdJVF9TSEEyNTZfUkFXU1osCisJCUdJVF9TSEEyNTZfSEVYU1osCisJCUdJVF9TSEEyNTZfQkxLU1osCisJCWdpdF9oYXNoX3NoYTI1Nl9pbml0LAorCQlnaXRfaGFzaF9zaGEyNTZfdXBkYXRlLAorCQlnaXRfaGFzaF9zaGEyNTZfZmluYWwsCisJCSZlbXB0eV90cmVlX29pZF9zaGEyNTYsCisJCSZlbXB0eV9ibG9iX29pZF9zaGEyNTYsCisJfQorfTsKKworY29uc3QgY2hhciAqZW1wdHlfdHJlZV9vaWRfaGV4KHZvaWQpCit7CisJc3RhdGljIGNoYXIgYnVmW0dJVF9NQVhfSEVYU1ogKyAxXTsKKwlyZXR1cm4gb2lkX3RvX2hleF9yKGJ1ZiwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7Cit9CisKK2NvbnN0IGNoYXIgKmVtcHR5X2Jsb2Jfb2lkX2hleCh2b2lkKQoreworCXN0YXRpYyBjaGFyIGJ1ZltHSVRfTUFYX0hFWFNaICsgMV07CisJcmV0dXJuIG9pZF90b19oZXhfcihidWYsIHRoZV9oYXNoX2FsZ28tPmVtcHR5X2Jsb2IpOworfQorCitpbnQgaGFzaF9hbGdvX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiBHSVRfSEFTSF9VTktOT1dOOworCWZvciAoaSA9IDE7IGkgPCBHSVRfSEFTSF9OQUxHT1M7IGkrKykKKwkJaWYgKCFzdHJjbXAobmFtZSwgaGFzaF9hbGdvc1tpXS5uYW1lKSkKKwkJCXJldHVybiBpOworCXJldHVybiBHSVRfSEFTSF9VTktOT1dOOworfQorCitpbnQgaGFzaF9hbGdvX2J5X2lkKHVpbnQzMl90IGZvcm1hdF9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAxOyBpIDwgR0lUX0hBU0hfTkFMR09TOyBpKyspCisJCWlmIChmb3JtYXRfaWQgPT0gaGFzaF9hbGdvc1tpXS5mb3JtYXRfaWQpCisJCQlyZXR1cm4gaTsKKwlyZXR1cm4gR0lUX0hBU0hfVU5LTk9XTjsKK30KKworaW50IGhhc2hfYWxnb19ieV9sZW5ndGgoaW50IGxlbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAxOyBpIDwgR0lUX0hBU0hfTkFMR09TOyBpKyspCisJCWlmIChsZW4gPT0gaGFzaF9hbGdvc1tpXS5yYXdzeikKKwkJCXJldHVybiBpOworCXJldHVybiBHSVRfSEFTSF9VTktOT1dOOworfQorCisvKgorICogVGhpcyBpcyBtZWFudCB0byBob2xkIGEgKnNtYWxsKiBudW1iZXIgb2Ygb2JqZWN0cyB0aGF0IHlvdSB3b3VsZAorICogd2FudCByZWFkX29iamVjdF9maWxlKCkgdG8gYmUgYWJsZSB0byByZXR1cm4sIGJ1dCB5ZXQgeW91IGRvIG5vdCB3YW50CisgKiB0byB3cml0ZSB0aGVtIGludG8gdGhlIG9iamVjdCBzdG9yZSAoZS5nLiBhIGJyb3dzZS1vbmx5CisgKiBhcHBsaWNhdGlvbikuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2FjaGVkX29iamVjdCB7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9ICpjYWNoZWRfb2JqZWN0czsKK3N0YXRpYyBpbnQgY2FjaGVkX29iamVjdF9uciwgY2FjaGVkX29iamVjdF9hbGxvYzsKKworc3RhdGljIHN0cnVjdCBjYWNoZWRfb2JqZWN0IGVtcHR5X3RyZWUgPSB7CisJeyBFTVBUWV9UUkVFX1NIQTFfQklOX0xJVEVSQUwgfSwKKwlPQkpfVFJFRSwKKwkiIiwKKwkwCit9OworCitzdGF0aWMgc3RydWN0IGNhY2hlZF9vYmplY3QgKmZpbmRfY2FjaGVkX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGNhY2hlZF9vYmplY3QgKmNvID0gY2FjaGVkX29iamVjdHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FjaGVkX29iamVjdF9ucjsgaSsrLCBjbysrKSB7CisJCWlmIChvaWRlcSgmY28tPm9pZCwgb2lkKSkKKwkJCXJldHVybiBjbzsKKwl9CisJaWYgKG9pZGVxKG9pZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSkpCisJCXJldHVybiAmZW1wdHlfdHJlZTsKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgaW50IGdldF9jb252X2ZsYWdzKHVuc2lnbmVkIGZsYWdzKQoreworCWlmIChmbGFncyAmIEhBU0hfUkVOT1JNQUxJWkUpCisJCXJldHVybiBDT05WX0VPTF9SRU5PUk1BTElaRTsKKwllbHNlIGlmIChmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUKQorCQlyZXR1cm4gZ2xvYmFsX2NvbnZfZmxhZ3NfZW9sIHwgQ09OVl9XUklURV9PQkpFQ1Q7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworCitpbnQgbWtkaXJfaW5fZ2l0ZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKG1rZGlyKHBhdGgsIDA3NzcpKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQlyZXR1cm4gLTE7CisJCS8qCisJCSAqIEFyZSB3ZSBsb29raW5nIGF0IGEgcGF0aCBpbiBhIHN5bWxpbmtlZCB3b3JrdHJlZQorCQkgKiB3aG9zZSBvcmlnaW5hbCByZXBvc2l0b3J5IGRvZXMgbm90IHlldCBoYXZlIGl0PworCQkgKiBlLmcuIC5naXQvcnItY2FjaGUgcG9pbnRpbmcgYXQgaXRzIG9yaWdpbmFsCisJCSAqIHJlcG9zaXRvcnkgaW4gd2hpY2ggdGhlIHVzZXIgaGFzbid0IHBlcmZvcm1lZCBhbnkKKwkJICogY29uZmxpY3QgcmVzb2x1dGlvbiB5ZXQ/CisJCSAqLworCQlpZiAobHN0YXQocGF0aCwgJnN0KSB8fCAhU19JU0xOSyhzdC5zdF9tb2RlKSB8fAorCQkgICAgc3RyYnVmX3JlYWRsaW5rKCZzYiwgcGF0aCwgc3Quc3Rfc2l6ZSkgfHwKKwkJICAgICFpc19hYnNvbHV0ZV9wYXRoKHNiLmJ1ZikgfHwKKwkJICAgIG1rZGlyKHNiLmJ1ZiwgMDc3NykpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQkJcmV0dXJuIC0xOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCXJldHVybiBhZGp1c3Rfc2hhcmVkX3Blcm0ocGF0aCk7Cit9CisKK2VudW0gc2NsZF9lcnJvciBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGNoYXIgKnBhdGgpCit7CisJY2hhciAqbmV4dF9jb21wb25lbnQgPSBwYXRoICsgb2Zmc2V0XzFzdF9jb21wb25lbnQocGF0aCk7CisJZW51bSBzY2xkX2Vycm9yIHJldCA9IFNDTERfT0s7CisKKwl3aGlsZSAocmV0ID09IFNDTERfT0sgJiYgbmV4dF9jb21wb25lbnQpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNoYXIgKnNsYXNoID0gbmV4dF9jb21wb25lbnQsIHNsYXNoX2NoYXJhY3RlcjsKKworCQl3aGlsZSAoKnNsYXNoICYmICFpc19kaXJfc2VwKCpzbGFzaCkpCisJCQlzbGFzaCsrOworCisJCWlmICghKnNsYXNoKQorCQkJYnJlYWs7CisKKwkJbmV4dF9jb21wb25lbnQgPSBzbGFzaCArIDE7CisJCXdoaWxlIChpc19kaXJfc2VwKCpuZXh0X2NvbXBvbmVudCkpCisJCQluZXh0X2NvbXBvbmVudCsrOworCQlpZiAoISpuZXh0X2NvbXBvbmVudCkKKwkJCWJyZWFrOworCisJCXNsYXNoX2NoYXJhY3RlciA9ICpzbGFzaDsKKwkJKnNsYXNoID0gJ1wwJzsKKwkJaWYgKCFzdGF0KHBhdGgsICZzdCkpIHsKKwkJCS8qIHBhdGggZXhpc3RzICovCisJCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCQllcnJubyA9IEVOT1RESVI7CisJCQkJcmV0ID0gU0NMRF9FWElTVFM7CisJCQl9CisJCX0gZWxzZSBpZiAobWtkaXIocGF0aCwgMDc3NykpIHsKKwkJCWlmIChlcnJubyA9PSBFRVhJU1QgJiYKKwkJCSAgICAhc3RhdChwYXRoLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJOyAvKiBzb21lYm9keSBjcmVhdGVkIGl0IHNpbmNlIHdlIGNoZWNrZWQgKi8KKwkJCWVsc2UgaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCQkvKgorCQkJCSAqIEVpdGhlciBta2RpcigpIGZhaWxlZCBiZWNhdXNlCisJCQkJICogc29tZWJvZHkganVzdCBwcnVuZWQgdGhlIGNvbnRhaW5pbmcKKwkJCQkgKiBkaXJlY3RvcnksIG9yIHN0YXQoKSBmYWlsZWQgYmVjYXVzZQorCQkJCSAqIHRoZSBmaWxlIHRoYXQgd2FzIGluIG91ciB3YXkgd2FzCisJCQkJICoganVzdCByZW1vdmVkLiAgRWl0aGVyIHdheSwgaW5mb3JtCisJCQkJICogdGhlIGNhbGxlciB0aGF0IGl0IG1pZ2h0IGJlIHdvcnRoCisJCQkJICogdHJ5aW5nIGFnYWluOgorCQkJCSAqLworCQkJCXJldCA9IFNDTERfVkFOSVNIRUQ7CisJCQllbHNlCisJCQkJcmV0ID0gU0NMRF9GQUlMRUQ7CisJCX0gZWxzZSBpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHBhdGgpKSB7CisJCQlyZXQgPSBTQ0xEX1BFUk1TOworCQl9CisJCSpzbGFzaCA9IHNsYXNoX2NoYXJhY3RlcjsKKwl9CisJcmV0dXJuIHJldDsKK30KKworZW51bSBzY2xkX2Vycm9yIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgc2F2ZV9lcnJubzsKKwkvKiBwYXRoIHBvaW50cyB0byBjYWNoZSBlbnRyaWVzLCBzbyB4c3RyZHVwIGJlZm9yZSBtZXNzaW5nIHdpdGggaXQgKi8KKwljaGFyICpidWYgPSB4c3RyZHVwKHBhdGgpOworCWVudW0gc2NsZF9lcnJvciByZXN1bHQgPSBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGJ1Zik7CisKKwlzYXZlX2Vycm5vID0gZXJybm87CisJZnJlZShidWYpOworCWVycm5vID0gc2F2ZV9lcnJubzsKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgcmFjZXByb29mX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNyZWF0ZV9maWxlX2ZuIGZuLCB2b2lkICpjYikKK3sKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgdGltZXMgd2Ugd2lsbCB0cnkgdG8gcmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVzCisJICogaW4gdGhlIHdheSBvZiBwYXRoLiBUaGlzIGlzIG9ubHkgMSBiZWNhdXNlIGlmIGFub3RoZXIKKwkgKiBwcm9jZXNzIGlzIHJhY2lseSBjcmVhdGluZyBkaXJlY3RvcmllcyB0aGF0IGNvbmZsaWN0IHdpdGgKKwkgKiB1cywgd2UgZG9uJ3Qgd2FudCB0byBmaWdodCBhZ2FpbnN0IHRoZW0uCisJICovCisJaW50IHJlbW92ZV9kaXJlY3Rvcmllc19yZW1haW5pbmcgPSAxOworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgd2Ugd2lsbCB0cnkgdG8gY3JlYXRlIHRoZQorCSAqIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgcGF0aC4gV2UgYXJlIHdpbGxpbmcgdG8gYXR0ZW1wdCB0aGlzCisJICogbW9yZSB0aGFuIG9uY2UsIGJlY2F1c2UgYW5vdGhlciBwcm9jZXNzIGNvdWxkIGJlIHRyeWluZyB0bworCSAqIGNsZWFuIHVwIGVtcHR5IGRpcmVjdG9yaWVzIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgYXJlCisJICogdHJ5aW5nIHRvIGNyZWF0ZSB0aGVtLgorCSAqLworCWludCBjcmVhdGVfZGlyZWN0b3JpZXNfcmVtYWluaW5nID0gMzsKKworCS8qIEEgc2NyYXRjaCBjb3B5IG9mIHBhdGgsIGZpbGxlZCBsYXppbHkgaWYgd2UgbmVlZCBpdDogKi8KKwlzdHJ1Y3Qgc3RyYnVmIHBhdGhfY29weSA9IFNUUkJVRl9JTklUOworCisJaW50IHJldCwgc2F2ZV9lcnJubzsKKworCS8qIFNhbml0eSBjaGVjazogKi8KKwlhc3NlcnQoKnBhdGgpOworCityZXRyeV9mbjoKKwlyZXQgPSBmbihwYXRoLCBjYik7CisJc2F2ZV9lcnJubyA9IGVycm5vOworCWlmICghcmV0KQorCQlnb3RvIG91dDsKKworCWlmIChlcnJubyA9PSBFSVNESVIgJiYgcmVtb3ZlX2RpcmVjdG9yaWVzX3JlbWFpbmluZy0tID4gMCkgeworCQkvKgorCQkgKiBBIGRpcmVjdG9yeSBpcyBpbiB0aGUgd2F5LiBNYXliZSBpdCBpcyBlbXB0eTsgdHJ5CisJCSAqIHRvIHJlbW92ZSBpdDoKKwkJICovCisJCWlmICghcGF0aF9jb3B5LmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJnBhdGhfY29weSwgcGF0aCk7CisKKwkJaWYgKCFyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZwYXRoX2NvcHksIFJFTU9WRV9ESVJfRU1QVFlfT05MWSkpCisJCQlnb3RvIHJldHJ5X2ZuOworCX0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UICYmIGNyZWF0ZV9kaXJlY3Rvcmllc19yZW1haW5pbmctLSA+IDApIHsKKwkJLyoKKwkJICogTWF5YmUgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGRpZG4ndCBleGlzdCwgb3IKKwkJICogbWF5YmUgaXQgd2FzIGp1c3QgZGVsZXRlZCBieSBhIHByb2Nlc3MgdGhhdCBpcworCQkgKiByYWNpbmcgd2l0aCB1cyB0byBjbGVhbiB1cCBlbXB0eSBkaXJlY3Rvcmllcy4gVHJ5CisJCSAqIHRvIGNyZWF0ZSBpdDoKKwkJICovCisJCWVudW0gc2NsZF9lcnJvciBzY2xkX3Jlc3VsdDsKKworCQlpZiAoIXBhdGhfY29weS5sZW4pCisJCQlzdHJidWZfYWRkc3RyKCZwYXRoX2NvcHksIHBhdGgpOworCisJCWRvIHsKKwkJCXNjbGRfcmVzdWx0ID0gc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhwYXRoX2NvcHkuYnVmKTsKKwkJCWlmIChzY2xkX3Jlc3VsdCA9PSBTQ0xEX09LKQorCQkJCWdvdG8gcmV0cnlfZm47CisJCX0gd2hpbGUgKHNjbGRfcmVzdWx0ID09IFNDTERfVkFOSVNIRUQgJiYgY3JlYXRlX2RpcmVjdG9yaWVzX3JlbWFpbmluZy0tID4gMCk7CisJfQorCitvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnBhdGhfY29weSk7CisJZXJybm8gPSBzYXZlX2Vycm5vOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfbG9vc2VfcGF0aChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgdGhlX2hhc2hfYWxnby0+cmF3c3o7IGkrKykgeworCQlzdGF0aWMgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwkJdW5zaWduZWQgaW50IHZhbCA9IG9pZC0+aGFzaFtpXTsKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgaGV4W3ZhbCA+PiA0XSk7CisJCXN0cmJ1Zl9hZGRjaChidWYsIGhleFt2YWwgJiAweGZdKTsKKwkJaWYgKCFpKQorCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy8nKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpvZGJfbG9vc2VfcGF0aChzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCBvZGItPnBhdGgpOworCXN0cmJ1Zl9hZGRjaChidWYsICcvJyk7CisJZmlsbF9sb29zZV9wYXRoKGJ1Ziwgb2lkKTsKKwlyZXR1cm4gYnVmLT5idWY7Cit9CisKK2NvbnN0IGNoYXIgKmxvb3NlX29iamVjdF9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIG9kYl9sb29zZV9wYXRoKHItPm9iamVjdHMtPm9kYiwgYnVmLCBvaWQpOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmZiB0aGUgcGF0aCBpcyB1c2FibGUgYXMgYW4gYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZS4KKyAqLworc3RhdGljIGludCBhbHRfb2RiX3VzYWJsZShzdHJ1Y3QgcmF3X29iamVjdF9zdG9yZSAqbywKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCSAgY29uc3QgY2hhciAqbm9ybWFsaXplZF9vYmpkaXIpCit7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKworCS8qIERldGVjdCBjYXNlcyB3aGVyZSBhbHRlcm5hdGUgZGlzYXBwZWFyZWQgKi8KKwlpZiAoIWlzX2RpcmVjdG9yeShwYXRoLT5idWYpKSB7CisJCWVycm9yKF8oIm9iamVjdCBkaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3Q7ICIKKwkJCSJjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIiksCisJCSAgICAgIHBhdGgtPmJ1Zik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogUHJldmVudCB0aGUgY29tbW9uIG1pc3Rha2Ugb2YgbGlzdGluZyB0aGUgc2FtZQorCSAqIHRoaW5nIHR3aWNlLCBvciBvYmplY3QgZGlyZWN0b3J5IGl0c2VsZi4KKwkgKi8KKwlmb3IgKG9kYiA9IG8tPm9kYjsgb2RiOyBvZGIgPSBvZGItPm5leHQpIHsKKwkJaWYgKCFmc3BhdGhjbXAocGF0aC0+YnVmLCBvZGItPnBhdGgpKQorCQkJcmV0dXJuIDA7CisJfQorCWlmICghZnNwYXRoY21wKHBhdGgtPmJ1Ziwgbm9ybWFsaXplZF9vYmpkaXIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogUHJlcGFyZSBhbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlIHJlZ2lzdHJ5LgorICoKKyAqIFRoZSB2YXJpYWJsZSBhbHRfb2RiX2xpc3QgcG9pbnRzIGF0IHRoZSBsaXN0IG9mIHN0cnVjdAorICogb2JqZWN0X2RpcmVjdG9yeS4gIFRoZSBlbGVtZW50cyBvbiB0aGlzIGxpc3QgY29tZSBmcm9tCisgKiBub24tZW1wdHkgZWxlbWVudHMgZnJvbSBjb2xvbiBzZXBhcmF0ZWQgQUxURVJOQVRFX0RCX0VOVklST05NRU5UCisgKiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYW5kICRHSVRfT0JKRUNUX0RJUkVDVE9SWS9pbmZvL2FsdGVybmF0ZXMsCisgKiB3aG9zZSBjb250ZW50cyBpcyBzaW1pbGFyIHRvIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgYnV0IGNhbiBiZQorICogTEYgc2VwYXJhdGVkLiAgSXRzIGJhc2UgcG9pbnRzIGF0IGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnVmZmVyIHRoYXQKKyAqIGNvbnRhaW5zICIvdGhlL2RpcmVjdG9yeS9jb3JyZXNwb25kaW5nL3RvLy5naXQvb2JqZWN0cy8uLi4iLCB3aGlsZQorICogaXRzIG5hbWUgcG9pbnRzIGp1c3QgYWZ0ZXIgdGhlIHNsYXNoIGF0IHRoZSBlbmQgb2YgIi5naXQvb2JqZWN0cy8iCisgKiBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgYW5kIGhhcyBlbm91Z2ggc3BhY2UgdG8gaG9sZCA0MC1ieXRlIGhleAorICogU0hBMSwgYW4gZXh0cmEgc2xhc2ggZm9yIHRoZSBmaXJzdCBsZXZlbCBpbmRpcmVjdGlvbiwgYW5kIHRoZQorICogdGVybWluYXRpbmcgTlVMLgorICovCitzdGF0aWMgdm9pZCByZWFkX2luZm9fYWx0ZXJuYXRlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgY29uc3QgY2hhciAqcmVsYXRpdmVfYmFzZSwKKwkJCQkgaW50IGRlcHRoKTsKK3N0YXRpYyBpbnQgbGlua19hbHRfb2RiX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICplbnRyeSwKKwljb25zdCBjaGFyICpyZWxhdGl2ZV9iYXNlLCBpbnQgZGVwdGgsIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRfb2JqZGlyKQoreworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICplbnQ7CisJc3RydWN0IHN0cmJ1ZiBwYXRoYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZW50cnkpICYmIHJlbGF0aXZlX2Jhc2UpIHsKKwkJc3RyYnVmX3JlYWxwYXRoKCZwYXRoYnVmLCByZWxhdGl2ZV9iYXNlLCAxKTsKKwkJc3RyYnVmX2FkZGNoKCZwYXRoYnVmLCAnLycpOworCX0KKwlzdHJidWZfYWRkc3RyKCZwYXRoYnVmLCBlbnRyeSk7CisKKwlpZiAoc3RyYnVmX25vcm1hbGl6ZV9wYXRoKCZwYXRoYnVmKSA8IDAgJiYgcmVsYXRpdmVfYmFzZSkgeworCQllcnJvcihfKCJ1bmFibGUgdG8gbm9ybWFsaXplIGFsdGVybmF0ZSBvYmplY3QgcGF0aDogJXMiKSwKKwkJICAgICAgcGF0aGJ1Zi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmcGF0aGJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFRoZSB0cmFpbGluZyBzbGFzaCBhZnRlciB0aGUgZGlyZWN0b3J5IG5hbWUgaXMgZ2l2ZW4gYnkKKwkgKiB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBlbmQuIFJlbW92ZSBkdXBsaWNhdGVzLgorCSAqLworCXdoaWxlIChwYXRoYnVmLmxlbiAmJiBwYXRoYnVmLmJ1ZltwYXRoYnVmLmxlbiAtIDFdID09ICcvJykKKwkJc3RyYnVmX3NldGxlbigmcGF0aGJ1ZiwgcGF0aGJ1Zi5sZW4gLSAxKTsKKworCWlmICghYWx0X29kYl91c2FibGUoci0+b2JqZWN0cywgJnBhdGhidWYsIG5vcm1hbGl6ZWRfb2JqZGlyKSkgeworCQlzdHJidWZfcmVsZWFzZSgmcGF0aGJ1Zik7CisJCXJldHVybiAtMTsKKwl9CisKKwllbnQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZW50KSk7CisJZW50LT5wYXRoID0geHN0cmR1cChwYXRoYnVmLmJ1Zik7CisKKwkvKiBhZGQgdGhlIGFsdGVybmF0ZSBlbnRyeSAqLworCSpyLT5vYmplY3RzLT5vZGJfdGFpbCA9IGVudDsKKwlyLT5vYmplY3RzLT5vZGJfdGFpbCA9ICYoZW50LT5uZXh0KTsKKwllbnQtPm5leHQgPSBOVUxMOworCisJLyogcmVjdXJzaXZlbHkgYWRkIGFsdGVybmF0ZXMgKi8KKwlyZWFkX2luZm9fYWx0ZXJuYXRlcyhyLCBwYXRoYnVmLmJ1ZiwgZGVwdGggKyAxKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2FsdF9vZGJfZW50cnkoY29uc3QgY2hhciAqc3RyaW5nLAorCQkJCSAgICAgICBpbnQgc2VwLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJY29uc3QgY2hhciAqZW5kOworCisJc3RyYnVmX3Jlc2V0KG91dCk7CisKKwlpZiAoKnN0cmluZyA9PSAnIycpIHsKKwkJLyogY29tbWVudDsgY29uc3VtZSB1cCB0byBuZXh0IHNlcGFyYXRvciAqLworCQllbmQgPSBzdHJjaHJudWwoc3RyaW5nLCBzZXApOworCX0gZWxzZSBpZiAoKnN0cmluZyA9PSAnIicgJiYgIXVucXVvdGVfY19zdHlsZShvdXQsIHN0cmluZywgJmVuZCkpIHsKKwkJLyoKKwkJICogcXVvdGVkIHBhdGg7IHVucXVvdGVfY19zdHlsZSBoYXMgY29waWVkIHRoZQorCQkgKiBkYXRhIGZvciB1cyBhbmQgc2V0ICJlbmQiLiBCcm9rZW4gcXVvdGluZyAoZS5nLiwKKwkJICogYW4gZW50cnkgdGhhdCBkb2Vzbid0IGVuZCB3aXRoIGEgcXVvdGUpIGZhbGxzCisJCSAqIGJhY2sgdG8gdGhlIHVucXVvdGVkIGNhc2UgYmVsb3cuCisJCSAqLworCX0gZWxzZSB7CisJCS8qIG5vcm1hbCwgdW5xdW90ZWQgcGF0aCAqLworCQllbmQgPSBzdHJjaHJudWwoc3RyaW5nLCBzZXApOworCQlzdHJidWZfYWRkKG91dCwgc3RyaW5nLCBlbmQgLSBzdHJpbmcpOworCX0KKworCWlmICgqZW5kKQorCQllbmQrKzsKKwlyZXR1cm4gZW5kOworfQorCitzdGF0aWMgdm9pZCBsaW5rX2FsdF9vZGJfZW50cmllcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqYWx0LAorCQkJCSBpbnQgc2VwLCBjb25zdCBjaGFyICpyZWxhdGl2ZV9iYXNlLCBpbnQgZGVwdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBvYmpkaXJidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVudHJ5ID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWFsdCB8fCAhKmFsdCkKKwkJcmV0dXJuOworCisJaWYgKGRlcHRoID4gNSkgeworCQllcnJvcihfKCIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAiKSwKKwkJCQlyZWxhdGl2ZV9iYXNlKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmb2JqZGlyYnVmLCByLT5vYmplY3RzLT5vZGItPnBhdGgpOworCWlmIChzdHJidWZfbm9ybWFsaXplX3BhdGgoJm9iamRpcmJ1ZikgPCAwKQorCQlkaWUoXygidW5hYmxlIHRvIG5vcm1hbGl6ZSBvYmplY3QgZGlyZWN0b3J5OiAlcyIpLAorCQkgICAgb2JqZGlyYnVmLmJ1Zik7CisKKwl3aGlsZSAoKmFsdCkgeworCQlhbHQgPSBwYXJzZV9hbHRfb2RiX2VudHJ5KGFsdCwgc2VwLCAmZW50cnkpOworCQlpZiAoIWVudHJ5LmxlbikKKwkJCWNvbnRpbnVlOworCQlsaW5rX2FsdF9vZGJfZW50cnkociwgZW50cnkuYnVmLAorCQkJCSAgIHJlbGF0aXZlX2Jhc2UsIGRlcHRoLCBvYmpkaXJidWYuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmVudHJ5KTsKKwlzdHJidWZfcmVsZWFzZSgmb2JqZGlyYnVmKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9pbmZvX2FsdGVybmF0ZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIGNvbnN0IGNoYXIgKnJlbGF0aXZlX2Jhc2UsCisJCQkJIGludCBkZXB0aCkKK3sKKwljaGFyICpwYXRoOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlwYXRoID0geHN0cmZtdCgiJXMvaW5mby9hbHRlcm5hdGVzIiwgcmVsYXRpdmVfYmFzZSk7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcGF0aCwgMTAyNCkgPCAwKSB7CisJCXdhcm5fb25fZm9wZW5fZXJyb3JzKHBhdGgpOworCQlmcmVlKHBhdGgpOworCQlyZXR1cm47CisJfQorCisJbGlua19hbHRfb2RiX2VudHJpZXMociwgYnVmLmJ1ZiwgJ1xuJywgcmVsYXRpdmVfYmFzZSwgZGVwdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWZyZWUocGF0aCk7Cit9CisKK3ZvaWQgYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShjb25zdCBjaGFyICpyZWZlcmVuY2UpCit7CisJc3RydWN0IGxvY2tfZmlsZSBsb2NrID0gTE9DS19JTklUOworCWNoYXIgKmFsdHMgPSBnaXRfcGF0aGR1cCgib2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiKTsKKwlGSUxFICppbiwgKm91dDsKKwlpbnQgZm91bmQgPSAwOworCisJaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9jaywgYWx0cywgTE9DS19ESUVfT05fRVJST1IpOworCW91dCA9IGZkb3Blbl9sb2NrX2ZpbGUoJmxvY2ssICJ3Iik7CisJaWYgKCFvdXQpCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiKSk7CisKKwlpbiA9IGZvcGVuKGFsdHMsICJyIik7CisJaWYgKGluKSB7CisJCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgaW4pICE9IEVPRikgeworCQkJaWYgKCFzdHJjbXAocmVmZXJlbmNlLCBsaW5lLmJ1ZikpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmcHJpbnRmX29yX2RpZShvdXQsICIlc1xuIiwgbGluZS5idWYpOworCQl9CisKKwkJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCQlmY2xvc2UoaW4pOworCX0KKwllbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gcmVhZCBhbHRlcm5hdGVzIGZpbGUiKSk7CisKKwlpZiAoZm91bmQpIHsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZsb2NrKTsKKwl9IGVsc2UgeworCQlmcHJpbnRmX29yX2RpZShvdXQsICIlc1xuIiwgcmVmZXJlbmNlKTsKKwkJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJmxvY2spKQorCQkJZGllX2Vycm5vKF8oInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIpKTsKKwkJaWYgKHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5sb2FkZWRfYWx0ZXJuYXRlcykKKwkJCWxpbmtfYWx0X29kYl9lbnRyaWVzKHRoZV9yZXBvc2l0b3J5LCByZWZlcmVuY2UsCisJCQkJCSAgICAgJ1xuJywgTlVMTCwgMCk7CisJfQorCWZyZWUoYWx0cyk7Cit9CisKK3ZvaWQgYWRkX3RvX2FsdGVybmF0ZXNfbWVtb3J5KGNvbnN0IGNoYXIgKnJlZmVyZW5jZSkKK3sKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbHRlcm5hdGVzIGFyZSBpbml0aWFsaXplZCwgb3IgZWxzZSBvdXIgZW50cnkgbWF5IGJlCisJICogb3ZlcndyaXR0ZW4gd2hlbiB0aGV5IGFyZS4KKwkgKi8KKwlwcmVwYXJlX2FsdF9vZGIodGhlX3JlcG9zaXRvcnkpOworCisJbGlua19hbHRfb2RiX2VudHJpZXModGhlX3JlcG9zaXRvcnksIHJlZmVyZW5jZSwKKwkJCSAgICAgJ1xuJywgTlVMTCwgMCk7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBleGFjdCBwYXRoIGFuIGFsdGVybmF0ZSBpcyBhdCBhbmQgcmV0dXJucyBpdC4gSW4gY2FzZSBvZgorICogZXJyb3IgTlVMTCBpcyByZXR1cm5lZCBhbmQgdGhlIGh1bWFuIHJlYWRhYmxlIGVycm9yIGlzIGFkZGVkIHRvIGBlcnJgCisgKiBgcGF0aGAgbWF5IGJlIHJlbGF0aXZlIGFuZCBzaG91bGQgcG9pbnQgdG8gJEdJVF9ESVIuCisgKiBgZXJyYCBtdXN0IG5vdCBiZSBudWxsLgorICovCitjaGFyICpjb21wdXRlX2FsdGVybmF0ZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwljaGFyICpyZWZfZ2l0ID0gTlVMTDsKKwljb25zdCBjaGFyICpyZXBvLCAqcmVmX2dpdF9zOworCWludCBzZWVuX2Vycm9yID0gMDsKKworCXJlZl9naXRfcyA9IHJlYWxfcGF0aF9pZl92YWxpZChwYXRoKTsKKwlpZiAoIXJlZl9naXRfcykgeworCQlzZWVuX2Vycm9yID0gMTsKKwkJc3RyYnVmX2FkZGYoZXJyLCBfKCJwYXRoICclcycgZG9lcyBub3QgZXhpc3QiKSwgcGF0aCk7CisJCWdvdG8gb3V0OworCX0gZWxzZQorCQkvKgorCQkgKiBCZXdhcmU6IHJlYWRfZ2l0ZmlsZSgpLCByZWFsX3BhdGgoKSBhbmQgbWtwYXRoKCkKKwkJICogcmV0dXJuIHN0YXRpYyBidWZmZXIKKwkJICovCisJCXJlZl9naXQgPSB4c3RyZHVwKHJlZl9naXRfcyk7CisKKwlyZXBvID0gcmVhZF9naXRmaWxlKHJlZl9naXQpOworCWlmICghcmVwbykKKwkJcmVwbyA9IHJlYWRfZ2l0ZmlsZShta3BhdGgoIiVzLy5naXQiLCByZWZfZ2l0KSk7CisJaWYgKHJlcG8pIHsKKwkJZnJlZShyZWZfZ2l0KTsKKwkJcmVmX2dpdCA9IHhzdHJkdXAocmVwbyk7CisJfQorCisJaWYgKCFyZXBvICYmIGlzX2RpcmVjdG9yeShta3BhdGgoIiVzLy5naXQvb2JqZWN0cyIsIHJlZl9naXQpKSkgeworCQljaGFyICpyZWZfZ2l0X2dpdCA9IG1rcGF0aGR1cCgiJXMvLmdpdCIsIHJlZl9naXQpOworCQlmcmVlKHJlZl9naXQpOworCQlyZWZfZ2l0ID0gcmVmX2dpdF9naXQ7CisJfSBlbHNlIGlmICghaXNfZGlyZWN0b3J5KG1rcGF0aCgiJXMvb2JqZWN0cyIsIHJlZl9naXQpKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCXNlZW5fZXJyb3IgPSAxOworCQlpZiAoZ2V0X2NvbW1vbl9kaXIoJnNiLCByZWZfZ2l0KSkgeworCQkJc3RyYnVmX2FkZGYoZXJyLAorCQkJCSAgICBfKCJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGFzIGEgbGlua2VkICIKKwkJCQkgICAgICAiY2hlY2tvdXQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIiksCisJCQkJICAgIHBhdGgpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzdHJidWZfYWRkZihlcnIsIF8oInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgIgorCQkJCQkibG9jYWwgcmVwb3NpdG9yeS4iKSwgcGF0aCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghYWNjZXNzKG1rcGF0aCgiJXMvc2hhbGxvdyIsIHJlZl9naXQpLCBGX09LKSkgeworCQlzdHJidWZfYWRkZihlcnIsIF8oInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIpLAorCQkJICAgIHBhdGgpOworCQlzZWVuX2Vycm9yID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFhY2Nlc3MobWtwYXRoKCIlcy9pbmZvL2dyYWZ0cyIsIHJlZl9naXQpLCBGX09LKSkgeworCQlzdHJidWZfYWRkZihlcnIsCisJCQkgICAgXygicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIiksCisJCQkgICAgcGF0aCk7CisJCXNlZW5fZXJyb3IgPSAxOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlpZiAoc2Vlbl9lcnJvcikgeworCQlGUkVFX0FORF9OVUxMKHJlZl9naXQpOworCX0KKworCXJldHVybiByZWZfZ2l0OworfQorCitzdGF0aWMgdm9pZCBmaWxsX2FsdGVybmF0ZV9yZWZzX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCwKKwkJCQkJY29uc3QgY2hhciAqcmVwb19wYXRoKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiY29yZS5hbHRlcm5hdGVSZWZzQ29tbWFuZCIsICZ2YWx1ZSkpIHsKKwkJY21kLT51c2Vfc2hlbGwgPSAxOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCB2YWx1ZSk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLT5hcmdzLCByZXBvX3BhdGgpOworCX0gZWxzZSB7CisJCWNtZC0+Z2l0X2NtZCA9IDE7CisKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLT5hcmdzLCAiLS1naXQtZGlyPSVzIiwgcmVwb19wYXRoKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQtPmFyZ3MsICJmb3ItZWFjaC1yZWYiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQtPmFyZ3MsICItLWZvcm1hdD0lKG9iamVjdG5hbWUpIik7CisKKwkJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiY29yZS5hbHRlcm5hdGVSZWZzUHJlZml4ZXMiLCAmdmFsdWUpKSB7CisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC0+YXJncywgIi0tIik7CisJCQlhcmd2X2FycmF5X3NwbGl0KCZjbWQtPmFyZ3MsIHZhbHVlKTsKKwkJfQorCX0KKworCWNtZC0+ZW52ID0gbG9jYWxfcmVwb19lbnY7CisJY21kLT5vdXQgPSAtMTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9hbHRlcm5hdGVfcmVmcyhjb25zdCBjaGFyICpwYXRoLAorCQkJCWFsdGVybmF0ZV9yZWZfZm4gKmNiLAorCQkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZoOworCisJZmlsbF9hbHRlcm5hdGVfcmVmc19jb21tYW5kKCZjbWQsIHBhdGgpOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpCisJCXJldHVybjsKKworCWZoID0geGZkb3BlbihjbWQub3V0LCAiciIpOworCXdoaWxlIChzdHJidWZfZ2V0bGluZV9sZigmbGluZSwgZmgpICE9IEVPRikgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY29uc3QgY2hhciAqcDsKKworCQlpZiAocGFyc2Vfb2lkX2hleChsaW5lLmJ1ZiwgJm9pZCwgJnApIHx8ICpwKSB7CisJCQl3YXJuaW5nKF8oImludmFsaWQgbGluZSB3aGlsZSBwYXJzaW5nIGFsdGVybmF0ZSByZWZzOiAlcyIpLAorCQkJCWxpbmUuYnVmKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2IoJm9pZCwgZGF0YSk7CisJfQorCisJZmNsb3NlKGZoKTsKKwlmaW5pc2hfY29tbWFuZCgmY21kKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7Cit9CisKK3N0cnVjdCBhbHRlcm5hdGVfcmVmc19kYXRhIHsKKwlhbHRlcm5hdGVfcmVmX2ZuICpmbjsKKwl2b2lkICpkYXRhOworfTsKKworc3RhdGljIGludCByZWZzX2Zyb21fYWx0ZXJuYXRlX2NiKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICplLAorCQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgYmFzZV9sZW47CisJc3RydWN0IGFsdGVybmF0ZV9yZWZzX2RhdGEgKmNiID0gZGF0YTsKKworCWlmICghc3RyYnVmX3JlYWxwYXRoKCZwYXRoLCBlLT5wYXRoLCAwKSkKKwkJZ290byBvdXQ7CisJaWYgKCFzdHJidWZfc3RyaXBfc3VmZml4KCZwYXRoLCAiL29iamVjdHMiKSkKKwkJZ290byBvdXQ7CisJYmFzZV9sZW4gPSBwYXRoLmxlbjsKKworCS8qIElzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeSB3aXRoIHJlZnM/ICovCisJc3RyYnVmX2FkZHN0cigmcGF0aCwgIi9yZWZzIik7CisJaWYgKCFpc19kaXJlY3RvcnkocGF0aC5idWYpKQorCQlnb3RvIG91dDsKKwlzdHJidWZfc2V0bGVuKCZwYXRoLCBiYXNlX2xlbik7CisKKwlyZWFkX2FsdGVybmF0ZV9yZWZzKHBhdGguYnVmLCBjYi0+Zm4sIGNiLT5kYXRhKTsKKworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGFsdGVybmF0ZV9yZWZfZm4gZm4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFsdGVybmF0ZV9yZWZzX2RhdGEgY2I7CisJY2IuZm4gPSBmbjsKKwljYi5kYXRhID0gZGF0YTsKKwlmb3JlYWNoX2FsdF9vZGIocmVmc19mcm9tX2FsdGVybmF0ZV9jYiwgJmNiKTsKK30KKworaW50IGZvcmVhY2hfYWx0X29kYihhbHRfb2RiX2ZuIGZuLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqZW50OworCWludCByID0gMDsKKworCXByZXBhcmVfYWx0X29kYih0aGVfcmVwb3NpdG9yeSk7CisJZm9yIChlbnQgPSB0aGVfcmVwb3NpdG9yeS0+b2JqZWN0cy0+b2RiLT5uZXh0OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgeworCQlyID0gZm4oZW50LCBjYik7CisJCWlmIChyKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByOworfQorCit2b2lkIHByZXBhcmVfYWx0X29kYihzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwlpZiAoci0+b2JqZWN0cy0+bG9hZGVkX2FsdGVybmF0ZXMpCisJCXJldHVybjsKKworCWxpbmtfYWx0X29kYl9lbnRyaWVzKHIsIHItPm9iamVjdHMtPmFsdGVybmF0ZV9kYiwgUEFUSF9TRVAsIE5VTEwsIDApOworCisJcmVhZF9pbmZvX2FsdGVybmF0ZXMociwgci0+b2JqZWN0cy0+b2RiLT5wYXRoLCAwKTsKKwlyLT5vYmplY3RzLT5sb2FkZWRfYWx0ZXJuYXRlcyA9IDE7Cit9CisKKy8qIFJldHVybnMgMSBpZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBmcmVzaGVuZWQgdGhlIGZpbGUsIDAgb3RoZXJ3aXNlLiAqLworc3RhdGljIGludCBmcmVzaGVuX2ZpbGUoY29uc3QgY2hhciAqZm4pCit7CisJc3RydWN0IHV0aW1idWYgdDsKKwl0LmFjdGltZSA9IHQubW9kdGltZSA9IHRpbWUoTlVMTCk7CisJcmV0dXJuICF1dGltZShmbiwgJnQpOworfQorCisvKgorICogQWxsIG9mIHRoZSBjaGVja19hbmRfZnJlc2hlbiBmdW5jdGlvbnMgcmV0dXJuIDEgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCB3YXMKKyAqIGZyZXNoZW5lZCAoaWYgZnJlc2hlbmluZyB3YXMgcmVxdWVzdGVkKSwgMCBvdGhlcndpc2UuIElmIHRoZXkgcmV0dXJuCisgKiAwLCB5b3Ugc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCBpdCBpcyBzYWZlIHRvIHNraXAgYSB3cml0ZSBvZiB0aGUgb2JqZWN0IChpdAorICogZWl0aGVyIGRvZXMgbm90IGV4aXN0IG9uIGRpc2ssIG9yIGhhcyBhIHN0YWxlIG10aW1lIGFuZCBtYXkgYmUgc3ViamVjdCB0bworICogcHJ1bmluZykuCisgKi8KK2ludCBjaGVja19hbmRfZnJlc2hlbl9maWxlKGNvbnN0IGNoYXIgKmZuLCBpbnQgZnJlc2hlbikKK3sKKwlpZiAoYWNjZXNzKGZuLCBGX09LKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZyZXNoZW4gJiYgIWZyZXNoZW5fZmlsZShmbikpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FuZF9mcmVzaGVuX29kYihzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJIGludCBmcmVzaGVuKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlvZGJfbG9vc2VfcGF0aChvZGIsICZwYXRoLCBvaWQpOworCXJldHVybiBjaGVja19hbmRfZnJlc2hlbl9maWxlKHBhdGguYnVmLCBmcmVzaGVuKTsKK30KKworc3RhdGljIGludCBjaGVja19hbmRfZnJlc2hlbl9sb2NhbChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmcmVzaGVuKQoreworCXJldHVybiBjaGVja19hbmRfZnJlc2hlbl9vZGIodGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPm9kYiwgb2lkLCBmcmVzaGVuKTsKK30KKworc3RhdGljIGludCBjaGVja19hbmRfZnJlc2hlbl9ub25sb2NhbChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmcmVzaGVuKQoreworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisKKwlwcmVwYXJlX2FsdF9vZGIodGhlX3JlcG9zaXRvcnkpOworCWZvciAob2RiID0gdGhlX3JlcG9zaXRvcnktPm9iamVjdHMtPm9kYi0+bmV4dDsgb2RiOyBvZGIgPSBvZGItPm5leHQpIHsKKwkJaWYgKGNoZWNrX2FuZF9mcmVzaGVuX29kYihvZGIsIG9pZCwgZnJlc2hlbikpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYW5kX2ZyZXNoZW4oY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZnJlc2hlbikKK3sKKwlyZXR1cm4gY2hlY2tfYW5kX2ZyZXNoZW5fbG9jYWwob2lkLCBmcmVzaGVuKSB8fAorCSAgICAgICBjaGVja19hbmRfZnJlc2hlbl9ub25sb2NhbChvaWQsIGZyZXNoZW4pOworfQorCitpbnQgaGFzX2xvb3NlX29iamVjdF9ub25sb2NhbChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIGNoZWNrX2FuZF9mcmVzaGVuX25vbmxvY2FsKG9pZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaGFzX2xvb3NlX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIGNoZWNrX2FuZF9mcmVzaGVuKG9pZCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG1tYXBfbGltaXRfY2hlY2soc2l6ZV90IGxlbmd0aCkKK3sKKwlzdGF0aWMgc2l6ZV90IGxpbWl0ID0gMDsKKwlpZiAoIWxpbWl0KSB7CisJCWxpbWl0ID0gZ2l0X2Vudl91bG9uZygiR0lUX01NQVBfTElNSVQiLCAwKTsKKwkJaWYgKCFsaW1pdCkKKwkJCWxpbWl0ID0gU0laRV9NQVg7CisJfQorCWlmIChsZW5ndGggPiBsaW1pdCkKKwkJZGllKF8oImF0dGVtcHRpbmcgdG8gbW1hcCAlIlBSSXVNQVgiIG92ZXIgbGltaXQgJSJQUkl1TUFYKSwKKwkJICAgICh1aW50bWF4X3QpbGVuZ3RoLCAodWludG1heF90KWxpbWl0KTsKK30KKwordm9pZCAqeG1tYXBfZ2VudGx5KHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLAorCQkgIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KQoreworCXZvaWQgKnJldDsKKworCW1tYXBfbGltaXRfY2hlY2sobGVuZ3RoKTsKKwlyZXQgPSBtbWFwKHN0YXJ0LCBsZW5ndGgsIHByb3QsIGZsYWdzLCBmZCwgb2Zmc2V0KTsKKwlpZiAocmV0ID09IE1BUF9GQUlMRUQgJiYgIWxlbmd0aCkKKwkJcmV0ID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkICp4bW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwKKwlpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCkKK3sKKwl2b2lkICpyZXQgPSB4bW1hcF9nZW50bHkoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOworCWlmIChyZXQgPT0gTUFQX0ZBSUxFRCkKKwkJZGllX2Vycm5vKF8oIm1tYXAgZmFpbGVkIikpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXaXRoIGFuIGluLWNvcmUgb2JqZWN0IGRhdGEgaW4gIm1hcCIsIHJlaGFzaCBpdCB0byBtYWtlIHN1cmUgdGhlCisgKiBvYmplY3QgbmFtZSBhY3R1YWxseSBtYXRjaGVzICJvaWQiIHRvIGRldGVjdCBvYmplY3QgY29ycnVwdGlvbi4KKyAqIFdpdGggIm1hcCIgPT0gTlVMTCwgdHJ5IHJlYWRpbmcgdGhlIG9iamVjdCBuYW1lZCB3aXRoICJvaWQiIHVzaW5nCisgKiB0aGUgc3RyZWFtaW5nIGludGVyZmFjZSBhbmQgcmVoYXNoIGl0IHRvIGRvIHRoZSBzYW1lLgorICovCitpbnQgY2hlY2tfb2JqZWN0X3NpZ25hdHVyZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgdm9pZCAqbWFwLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKnR5cGUpCit7CisJc3RydWN0IG9iamVjdF9pZCByZWFsX29pZDsKKwllbnVtIG9iamVjdF90eXBlIG9ial90eXBlOworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3Q7CisJZ2l0X2hhc2hfY3R4IGM7CisJY2hhciBoZHJbTUFYX0hFQURFUl9MRU5dOworCWludCBoZHJsZW47CisKKwlpZiAobWFwKSB7CisJCWhhc2hfb2JqZWN0X2ZpbGUoci0+aGFzaF9hbGdvLCBtYXAsIHNpemUsIHR5cGUsICZyZWFsX29pZCk7CisJCXJldHVybiAhb2lkZXEob2lkLCAmcmVhbF9vaWQpID8gLTEgOiAwOworCX0KKworCXN0ID0gb3Blbl9pc3RyZWFtKHIsIG9pZCwgJm9ial90eXBlLCAmc2l6ZSwgTlVMTCk7CisJaWYgKCFzdCkKKwkJcmV0dXJuIC0xOworCisJLyogR2VuZXJhdGUgdGhlIGhlYWRlciAqLworCWhkcmxlbiA9IHhzbnByaW50ZihoZHIsIHNpemVvZihoZHIpLCAiJXMgJSJQUkl1TUFYICwgdHlwZV9uYW1lKG9ial90eXBlKSwgKHVpbnRtYXhfdClzaXplKSArIDE7CisKKwkvKiBTaGExLi4gKi8KKwlyLT5oYXNoX2FsZ28tPmluaXRfZm4oJmMpOworCXItPmhhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBoZHIsIGhkcmxlbik7CisJZm9yICg7OykgeworCQljaGFyIGJ1ZlsxMDI0ICogMTZdOworCQlzc2l6ZV90IHJlYWRsZW4gPSByZWFkX2lzdHJlYW0oc3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJCWlmIChyZWFkbGVuIDwgMCkgeworCQkJY2xvc2VfaXN0cmVhbShzdCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCFyZWFkbGVuKQorCQkJYnJlYWs7CisJCXItPmhhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBidWYsIHJlYWRsZW4pOworCX0KKwlyLT5oYXNoX2FsZ28tPmZpbmFsX2ZuKHJlYWxfb2lkLmhhc2gsICZjKTsKKwljbG9zZV9pc3RyZWFtKHN0KTsKKwlyZXR1cm4gIW9pZGVxKG9pZCwgJnJlYWxfb2lkKSA/IC0xIDogMDsKK30KKworaW50IGdpdF9vcGVuX2Nsb2V4ZWMoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKQoreworCWludCBmZDsKKwlzdGF0aWMgaW50IG9fY2xvZXhlYyA9IE9fQ0xPRVhFQzsKKworCWZkID0gb3BlbihuYW1lLCBmbGFncyB8IG9fY2xvZXhlYyk7CisJaWYgKChvX2Nsb2V4ZWMgJiBPX0NMT0VYRUMpICYmIGZkIDwgMCAmJiBlcnJubyA9PSBFSU5WQUwpIHsKKwkJLyogVHJ5IGFnYWluIHcvbyBPX0NMT0VYRUM6IHRoZSBrZXJuZWwgbWlnaHQgbm90IHN1cHBvcnQgaXQgKi8KKwkJb19jbG9leGVjICY9IH5PX0NMT0VYRUM7CisJCWZkID0gb3BlbihuYW1lLCBmbGFncyB8IG9fY2xvZXhlYyk7CisJfQorCisjaWYgZGVmaW5lZChGX0dFVEZEKSAmJiBkZWZpbmVkKEZfU0VURkQpICYmIGRlZmluZWQoRkRfQ0xPRVhFQykKKwl7CisJCXN0YXRpYyBpbnQgZmRfY2xvZXhlYyA9IEZEX0NMT0VYRUM7CisKKwkJaWYgKCFvX2Nsb2V4ZWMgJiYgMCA8PSBmZCAmJiBmZF9jbG9leGVjKSB7CisJCQkvKiBPcGVuZWQgdy9vIE9fQ0xPRVhFQz8gIHRyeSB3aXRoIGZjbnRsKDIpIHRvIGFkZCBpdCAqLworCQkJaW50IGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworCQkJaWYgKGZjbnRsKGZkLCBGX1NFVEZELCBmbGFncyB8IGZkX2Nsb2V4ZWMpKQorCQkJCWZkX2Nsb2V4ZWMgPSAwOworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuIGZkOworfQorCisvKgorICogRmluZCAib2lkIiBhcyBhIGxvb3NlIG9iamVjdCBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeSBvciBpbiBhbiBhbHRlcm5hdGUuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KKyAqCisgKiBUaGUgInBhdGgiIG91dC1wYXJhbWV0ZXIgd2lsbCBnaXZlIHRoZSBwYXRoIG9mIHRoZSBvYmplY3Qgd2UgZm91bmQgKGlmIGFueSkuCisgKiBOb3RlIHRoYXQgaXQgbWF5IHBvaW50IHRvIHN0YXRpYyBzdG9yYWdlIGFuZCBpcyBvbmx5IHZhbGlkIHVudGlsIGFub3RoZXIKKyAqIGNhbGwgdG8gc3RhdF9sb29zZV9vYmplY3QoKS4KKyAqLworc3RhdGljIGludCBzdGF0X2xvb3NlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICBzdHJ1Y3Qgc3RhdCAqc3QsIGNvbnN0IGNoYXIgKipwYXRoKQoreworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlwcmVwYXJlX2FsdF9vZGIocik7CisJZm9yIChvZGIgPSByLT5vYmplY3RzLT5vZGI7IG9kYjsgb2RiID0gb2RiLT5uZXh0KSB7CisJCSpwYXRoID0gb2RiX2xvb3NlX3BhdGgob2RiLCAmYnVmLCBvaWQpOworCQlpZiAoIWxzdGF0KCpwYXRoLCBzdCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBMaWtlIHN0YXRfbG9vc2Vfb2JqZWN0KCksIGJ1dCBhY3R1YWxseSBvcGVuIHRoZSBvYmplY3QgYW5kIHJldHVybiB0aGUKKyAqIGRlc2NyaXB0b3IuIFNlZSB0aGUgY2F2ZWF0cyBvbiB0aGUgInBhdGgiIHBhcmFtZXRlciBhYm92ZS4KKyAqLworc3RhdGljIGludCBvcGVuX2xvb3NlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICoqcGF0aCkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IG9iamVjdF9kaXJlY3RvcnkgKm9kYjsKKwlpbnQgbW9zdF9pbnRlcmVzdGluZ19lcnJubyA9IEVOT0VOVDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXByZXBhcmVfYWx0X29kYihyKTsKKwlmb3IgKG9kYiA9IHItPm9iamVjdHMtPm9kYjsgb2RiOyBvZGIgPSBvZGItPm5leHQpIHsKKwkJKnBhdGggPSBvZGJfbG9vc2VfcGF0aChvZGIsICZidWYsIG9pZCk7CisJCWZkID0gZ2l0X29wZW4oKnBhdGgpOworCQlpZiAoZmQgPj0gMCkKKwkJCXJldHVybiBmZDsKKworCQlpZiAobW9zdF9pbnRlcmVzdGluZ19lcnJubyA9PSBFTk9FTlQpCisJCQltb3N0X2ludGVyZXN0aW5nX2Vycm5vID0gZXJybm87CisJfQorCWVycm5vID0gbW9zdF9pbnRlcmVzdGluZ19lcnJubzsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcXVpY2tfaGFzX2xvb3NlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGI7CisKKwlwcmVwYXJlX2FsdF9vZGIocik7CisJZm9yIChvZGIgPSByLT5vYmplY3RzLT5vZGI7IG9kYjsgb2RiID0gb2RiLT5uZXh0KSB7CisJCWlmIChvaWRfYXJyYXlfbG9va3VwKG9kYl9sb29zZV9jYWNoZShvZGIsIG9pZCksIG9pZCkgPj0gMCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE1hcCB0aGUgbG9vc2Ugb2JqZWN0IGF0ICJwYXRoIiBpZiBpdCBpcyBub3QgTlVMTCwgb3IgdGhlIHBhdGggZm91bmQgYnkKKyAqIHNlYXJjaGluZyBmb3IgYSBsb29zZSBvYmplY3QgbmFtZWQgIm9pZCIuCisgKi8KK3N0YXRpYyB2b2lkICptYXBfbG9vc2Vfb2JqZWN0XzEoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwl2b2lkICptYXA7CisJaW50IGZkOworCisJaWYgKHBhdGgpCisJCWZkID0gZ2l0X29wZW4ocGF0aCk7CisJZWxzZQorCQlmZCA9IG9wZW5fbG9vc2Vfb2JqZWN0KHIsIG9pZCwgJnBhdGgpOworCW1hcCA9IE5VTEw7CisJaWYgKGZkID49IDApIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKCFmc3RhdChmZCwgJnN0KSkgeworCQkJKnNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQkJaWYgKCEqc2l6ZSkgeworCQkJCS8qIG1tYXAoKSBpcyBmb3JiaWRkZW4gb24gZW1wdHkgZmlsZXMgKi8KKwkJCQllcnJvcihfKCJvYmplY3QgZmlsZSAlcyBpcyBlbXB0eSIpLCBwYXRoKTsKKwkJCQljbG9zZShmZCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQltYXAgPSB4bW1hcChOVUxMLCAqc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCQl9CisJCWNsb3NlKGZkKTsKKwl9CisJcmV0dXJuIG1hcDsKK30KKwordm9pZCAqbWFwX2xvb3NlX29iamVjdChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJcmV0dXJuIG1hcF9sb29zZV9vYmplY3RfMShyLCBOVUxMLCBvaWQsIHNpemUpOworfQorCitzdGF0aWMgaW50IHVucGFja19sb29zZV9zaG9ydF9oZWFkZXIoZ2l0X3pzdHJlYW0gKnN0cmVhbSwKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm1hcCwgdW5zaWduZWQgbG9uZyBtYXBzaXplLAorCQkJCSAgICAgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGJ1ZnNpeikKK3sKKwlpbnQgcmV0OworCisJLyogR2V0IHRoZSBkYXRhIHN0cmVhbSAqLworCW1lbXNldChzdHJlYW0sIDAsIHNpemVvZigqc3RyZWFtKSk7CisJc3RyZWFtLT5uZXh0X2luID0gbWFwOworCXN0cmVhbS0+YXZhaWxfaW4gPSBtYXBzaXplOworCXN0cmVhbS0+bmV4dF9vdXQgPSBidWZmZXI7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSBidWZzaXo7CisKKwlnaXRfaW5mbGF0ZV9pbml0KHN0cmVhbSk7CisJb2JqX3JlYWRfdW5sb2NrKCk7CisJcmV0ID0gZ2l0X2luZmxhdGUoc3RyZWFtLCAwKTsKKwlvYmpfcmVhZF9sb2NrKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdW5wYWNrX2xvb3NlX2hlYWRlcihnaXRfenN0cmVhbSAqc3RyZWFtLAorCQkJdW5zaWduZWQgY2hhciAqbWFwLCB1bnNpZ25lZCBsb25nIG1hcHNpemUsCisJCQl2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmc2l6KQoreworCWludCBzdGF0dXMgPSB1bnBhY2tfbG9vc2Vfc2hvcnRfaGVhZGVyKHN0cmVhbSwgbWFwLCBtYXBzaXplLAorCQkJCQkgICAgICAgYnVmZmVyLCBidWZzaXopOworCisJaWYgKHN0YXR1cyA8IFpfT0spCisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgdGVybWluYXRpbmcgTlVMICovCisJaWYgKCFtZW1jaHIoYnVmZmVyLCAnXDAnLCBzdHJlYW0tPm5leHRfb3V0IC0gKHVuc2lnbmVkIGNoYXIgKilidWZmZXIpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5wYWNrX2xvb3NlX2hlYWRlcl90b19zdHJidWYoZ2l0X3pzdHJlYW0gKnN0cmVhbSwgdW5zaWduZWQgY2hhciAqbWFwLAorCQkJCQkgdW5zaWduZWQgbG9uZyBtYXBzaXplLCB2b2lkICpidWZmZXIsCisJCQkJCSB1bnNpZ25lZCBsb25nIGJ1ZnNpeiwgc3RydWN0IHN0cmJ1ZiAqaGVhZGVyKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB1bnBhY2tfbG9vc2Vfc2hvcnRfaGVhZGVyKHN0cmVhbSwgbWFwLCBtYXBzaXplLCBidWZmZXIsIGJ1ZnNpeik7CisJaWYgKHN0YXR1cyA8IFpfT0spCisJCXJldHVybiAtMTsKKworCS8qCisJICogQ2hlY2sgaWYgZW50aXJlIGhlYWRlciBpcyB1bnBhY2tlZCBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLgorCSAqLworCWlmIChtZW1jaHIoYnVmZmVyLCAnXDAnLCBzdHJlYW0tPm5leHRfb3V0IC0gKHVuc2lnbmVkIGNoYXIgKilidWZmZXIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogYnVmZmVyWzAuLmJ1ZnNpel0gd2FzIG5vdCBsYXJnZSBlbm91Z2guICBDb3B5IHRoZSBwYXJ0aWFsCisJICogcmVzdWx0IG91dCB0byBoZWFkZXIsIGFuZCB0aGVuIGFwcGVuZCB0aGUgcmVzdWx0IG9mIGZ1cnRoZXIKKwkgKiByZWFkaW5nIHRoZSBzdHJlYW0uCisJICovCisJc3RyYnVmX2FkZChoZWFkZXIsIGJ1ZmZlciwgc3RyZWFtLT5uZXh0X291dCAtICh1bnNpZ25lZCBjaGFyICopYnVmZmVyKTsKKwlzdHJlYW0tPm5leHRfb3V0ID0gYnVmZmVyOworCXN0cmVhbS0+YXZhaWxfb3V0ID0gYnVmc2l6OworCisJZG8geworCQlvYmpfcmVhZF91bmxvY2soKTsKKwkJc3RhdHVzID0gZ2l0X2luZmxhdGUoc3RyZWFtLCAwKTsKKwkJb2JqX3JlYWRfbG9jaygpOworCQlzdHJidWZfYWRkKGhlYWRlciwgYnVmZmVyLCBzdHJlYW0tPm5leHRfb3V0IC0gKHVuc2lnbmVkIGNoYXIgKilidWZmZXIpOworCQlpZiAobWVtY2hyKGJ1ZmZlciwgJ1wwJywgc3RyZWFtLT5uZXh0X291dCAtICh1bnNpZ25lZCBjaGFyICopYnVmZmVyKSkKKwkJCXJldHVybiAwOworCQlzdHJlYW0tPm5leHRfb3V0ID0gYnVmZmVyOworCQlzdHJlYW0tPmF2YWlsX291dCA9IGJ1ZnNpejsKKwl9IHdoaWxlIChzdGF0dXMgIT0gWl9TVFJFQU1fRU5EKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2tfbG9vc2VfcmVzdChnaXRfenN0cmVhbSAqc3RyZWFtLAorCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlpbnQgYnl0ZXMgPSBzdHJsZW4oYnVmZmVyKSArIDE7CisJdW5zaWduZWQgY2hhciAqYnVmID0geG1hbGxvY3ooc2l6ZSk7CisJdW5zaWduZWQgbG9uZyBuOworCWludCBzdGF0dXMgPSBaX09LOworCisJbiA9IHN0cmVhbS0+dG90YWxfb3V0IC0gYnl0ZXM7CisJaWYgKG4gPiBzaXplKQorCQluID0gc2l6ZTsKKwltZW1jcHkoYnVmLCAoY2hhciAqKSBidWZmZXIgKyBieXRlcywgbik7CisJYnl0ZXMgPSBuOworCWlmIChieXRlcyA8PSBzaXplKSB7CisJCS8qCisJCSAqIFRoZSBhYm92ZSBjb25kaXRpb24gbXVzdCBiZSAoYnl0ZXMgPD0gc2l6ZSksIG5vdAorCQkgKiAoYnl0ZXMgPCBzaXplKS4gIEluIG90aGVyIHdvcmRzLCBldmVuIHRob3VnaCB3ZQorCQkgKiBleHBlY3Qgbm8gbW9yZSBvdXRwdXQgYW5kIHNldCBhdmFpbF9vdXQgdG8gemVybywKKwkJICogdGhlIGlucHV0IHpsaWIgc3RyZWFtIG1heSBoYXZlIGJ5dGVzIHRoYXQgZXhwcmVzcworCQkgKiAidGhpcyBjb25jbHVkZXMgdGhlIHN0cmVhbSIsIGFuZCB3ZSAqZG8qIHdhbnQgdG8KKwkJICogZWF0IHRoYXQgaW5wdXQuCisJCSAqCisJCSAqIE90aGVyd2lzZSB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byB0ZXN0IHRoYXQgd2UKKwkJICogY29uc3VtZWQgYWxsIHRoZSBpbnB1dCB0byByZWFjaCB0aGUgZXhwZWN0ZWQgc2l6ZTsKKwkJICogd2UgYWxzbyB3YW50IHRvIGNoZWNrIHRoYXQgemxpYiB0ZWxscyB1cyB0aGF0IGFsbAorCQkgKiB3ZW50IHdlbGwgd2l0aCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EIGF0IHRoZSBlbmQuCisJCSAqLworCQlzdHJlYW0tPm5leHRfb3V0ID0gYnVmICsgYnl0ZXM7CisJCXN0cmVhbS0+YXZhaWxfb3V0ID0gc2l6ZSAtIGJ5dGVzOworCQl3aGlsZSAoc3RhdHVzID09IFpfT0spIHsKKwkJCW9ial9yZWFkX3VubG9jaygpOworCQkJc3RhdHVzID0gZ2l0X2luZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7CisJCQlvYmpfcmVhZF9sb2NrKCk7CisJCX0KKwl9CisJaWYgKHN0YXR1cyA9PSBaX1NUUkVBTV9FTkQgJiYgIXN0cmVhbS0+YXZhaWxfaW4pIHsKKwkJZ2l0X2luZmxhdGVfZW5kKHN0cmVhbSk7CisJCXJldHVybiBidWY7CisJfQorCisJaWYgKHN0YXR1cyA8IDApCisJCWVycm9yKF8oImNvcnJ1cHQgbG9vc2Ugb2JqZWN0ICclcyciKSwgb2lkX3RvX2hleChvaWQpKTsKKwllbHNlIGlmIChzdHJlYW0tPmF2YWlsX2luKQorCQllcnJvcihfKCJnYXJiYWdlIGF0IGVuZCBvZiBsb29zZSBvYmplY3QgJyVzJyIpLAorCQkgICAgICBvaWRfdG9faGV4KG9pZCkpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFdlIHVzZWQgdG8ganVzdCB1c2UgInNzY2FuZigpIiwgYnV0IHRoYXQncyBhY3R1YWxseSB3YXkKKyAqIHRvbyBwZXJtaXNzaXZlIGZvciB3aGF0IHdlIHdhbnQgdG8gY2hlY2suIFNvIGRvIGFuIGFuYWwKKyAqIG9iamVjdCBoZWFkZXIgcGFyc2UgYnkgaGFuZC4KKyAqLworc3RhdGljIGludCBwYXJzZV9sb29zZV9oZWFkZXJfZXh0ZW5kZWQoY29uc3QgY2hhciAqaGRyLCBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9pLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJY29uc3QgY2hhciAqdHlwZV9idWYgPSBoZHI7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCB0eXBlLCB0eXBlX2xlbiA9IDA7CisKKwkvKgorCSAqIFRoZSB0eXBlIGNhbiBiZSBvZiBhbnkgc2l6ZSBidXQgaXMgZm9sbG93ZWQgYnkKKwkgKiBhIHNwYWNlLgorCSAqLworCWZvciAoOzspIHsKKwkJY2hhciBjID0gKmhkcisrOworCQlpZiAoIWMpCisJCQlyZXR1cm4gLTE7CisJCWlmIChjID09ICcgJykKKwkJCWJyZWFrOworCQl0eXBlX2xlbisrOworCX0KKworCXR5cGUgPSB0eXBlX2Zyb21fc3RyaW5nX2dlbnRseSh0eXBlX2J1ZiwgdHlwZV9sZW4sIDEpOworCWlmIChvaS0+dHlwZV9uYW1lKQorCQlzdHJidWZfYWRkKG9pLT50eXBlX25hbWUsIHR5cGVfYnVmLCB0eXBlX2xlbik7CisJLyoKKwkgKiBTZXQgdHlwZSB0byAwIGlmIGl0cyBhbiB1bmtub3duIG9iamVjdCBhbmQKKwkgKiB3ZSdyZSBvYnRhaW5pbmcgdGhlIHR5cGUgdXNpbmcgJy0tYWxsb3ctdW5rbm93bi10eXBlJworCSAqIG9wdGlvbi4KKwkgKi8KKwlpZiAoKGZsYWdzICYgT0JKRUNUX0lORk9fQUxMT1dfVU5LTk9XTl9UWVBFKSAmJiAodHlwZSA8IDApKQorCQl0eXBlID0gMDsKKwllbHNlIGlmICh0eXBlIDwgMCkKKwkJZGllKF8oImludmFsaWQgb2JqZWN0IHR5cGUiKSk7CisJaWYgKG9pLT50eXBlcCkKKwkJKm9pLT50eXBlcCA9IHR5cGU7CisKKwkvKgorCSAqIFRoZSBsZW5ndGggbXVzdCBmb2xsb3cgaW1tZWRpYXRlbHksIGFuZCBiZSBpbiBjYW5vbmljYWwKKwkgKiBkZWNpbWFsIGZvcm1hdCAoaWUgIjAxMCIgaXMgbm90IHZhbGlkKS4KKwkgKi8KKwlzaXplID0gKmhkcisrIC0gJzAnOworCWlmIChzaXplID4gOSkKKwkJcmV0dXJuIC0xOworCWlmIChzaXplKSB7CisJCWZvciAoOzspIHsKKwkJCXVuc2lnbmVkIGxvbmcgYyA9ICpoZHIgLSAnMCc7CisJCQlpZiAoYyA+IDkpCisJCQkJYnJlYWs7CisJCQloZHIrKzsKKwkJCXNpemUgPSBzaXplICogMTAgKyBjOworCQl9CisJfQorCisJaWYgKG9pLT5zaXplcCkKKwkJKm9pLT5zaXplcCA9IHNpemU7CisKKwkvKgorCSAqIFRoZSBsZW5ndGggbXVzdCBiZSBmb2xsb3dlZCBieSBhIHplcm8gYnl0ZQorCSAqLworCXJldHVybiAqaGRyID8gLTEgOiB0eXBlOworfQorCitpbnQgcGFyc2VfbG9vc2VfaGVhZGVyKGNvbnN0IGNoYXIgKmhkciwgdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJc3RydWN0IG9iamVjdF9pbmZvIG9pID0gT0JKRUNUX0lORk9fSU5JVDsKKworCW9pLnNpemVwID0gc2l6ZXA7CisJcmV0dXJuIHBhcnNlX2xvb3NlX2hlYWRlcl9leHRlbmRlZChoZHIsICZvaSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbG9vc2Vfb2JqZWN0X2luZm8oc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgc3RydWN0IG9iamVjdF9pbmZvICpvaSwgaW50IGZsYWdzKQoreworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgbWFwc2l6ZTsKKwl2b2lkICptYXA7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWNoYXIgaGRyW01BWF9IRUFERVJfTEVOXTsKKwlzdHJ1Y3Qgc3RyYnVmIGhkcmJ1ZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGxvbmcgc2l6ZV9zY3JhdGNoOworCisJaWYgKG9pLT5kZWx0YV9iYXNlX29pZCkKKwkJb2lkY2xyKG9pLT5kZWx0YV9iYXNlX29pZCk7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGNhcmUgYWJvdXQgdHlwZSBvciBzaXplLCB0aGVuIHdlIGRvbid0CisJICogbmVlZCB0byBsb29rIGluc2lkZSB0aGUgb2JqZWN0IGF0IGFsbC4gTm90ZSB0aGF0IHdlCisJICogZG8gbm90IG9wdGltaXplIG91dCB0aGUgc3RhdCBjYWxsLCBldmVuIGlmIHRoZQorCSAqIGNhbGxlciBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGRpc2stc2l6ZSwgc2luY2Ugb3VyCisJICogcmV0dXJuIHZhbHVlIGltcGxpY2l0bHkgaW5kaWNhdGVzIHdoZXRoZXIgdGhlCisJICogb2JqZWN0IGV2ZW4gZXhpc3RzLgorCSAqLworCWlmICghb2ktPnR5cGVwICYmICFvaS0+dHlwZV9uYW1lICYmICFvaS0+c2l6ZXAgJiYgIW9pLT5jb250ZW50cCkgeworCQljb25zdCBjaGFyICpwYXRoOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKCFvaS0+ZGlza19zaXplcCAmJiAoZmxhZ3MgJiBPQkpFQ1RfSU5GT19RVUlDSykpCisJCQlyZXR1cm4gcXVpY2tfaGFzX2xvb3NlKHIsIG9pZCkgPyAwIDogLTE7CisJCWlmIChzdGF0X2xvb3NlX29iamVjdChyLCBvaWQsICZzdCwgJnBhdGgpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKG9pLT5kaXNrX3NpemVwKQorCQkJKm9pLT5kaXNrX3NpemVwID0gc3Quc3Rfc2l6ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gbWFwX2xvb3NlX29iamVjdChyLCBvaWQsICZtYXBzaXplKTsKKwlpZiAoIW1hcCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFvaS0+c2l6ZXApCisJCW9pLT5zaXplcCA9ICZzaXplX3NjcmF0Y2g7CisKKwlpZiAob2ktPmRpc2tfc2l6ZXApCisJCSpvaS0+ZGlza19zaXplcCA9IG1hcHNpemU7CisJaWYgKChmbGFncyAmIE9CSkVDVF9JTkZPX0FMTE9XX1VOS05PV05fVFlQRSkpIHsKKwkJaWYgKHVucGFja19sb29zZV9oZWFkZXJfdG9fc3RyYnVmKCZzdHJlYW0sIG1hcCwgbWFwc2l6ZSwgaGRyLCBzaXplb2YoaGRyKSwgJmhkcmJ1ZikgPCAwKQorCQkJc3RhdHVzID0gZXJyb3IoXygidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIpLAorCQkJCSAgICAgICBvaWRfdG9faGV4KG9pZCkpOworCX0gZWxzZSBpZiAodW5wYWNrX2xvb3NlX2hlYWRlcigmc3RyZWFtLCBtYXAsIG1hcHNpemUsIGhkciwgc2l6ZW9mKGhkcikpIDwgMCkKKwkJc3RhdHVzID0gZXJyb3IoXygidW5hYmxlIHRvIHVucGFjayAlcyBoZWFkZXIiKSwKKwkJCSAgICAgICBvaWRfdG9faGV4KG9pZCkpOworCWlmIChzdGF0dXMgPCAwKQorCQk7IC8qIERvIG5vdGhpbmcgKi8KKwllbHNlIGlmIChoZHJidWYubGVuKSB7CisJCWlmICgoc3RhdHVzID0gcGFyc2VfbG9vc2VfaGVhZGVyX2V4dGVuZGVkKGhkcmJ1Zi5idWYsIG9pLCBmbGFncykpIDwgMCkKKwkJCXN0YXR1cyA9IGVycm9yKF8oInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIpLAorCQkJCSAgICAgICBvaWRfdG9faGV4KG9pZCkpOworCX0gZWxzZSBpZiAoKHN0YXR1cyA9IHBhcnNlX2xvb3NlX2hlYWRlcl9leHRlbmRlZChoZHIsIG9pLCBmbGFncykpIDwgMCkKKwkJc3RhdHVzID0gZXJyb3IoXygidW5hYmxlIHRvIHBhcnNlICVzIGhlYWRlciIpLCBvaWRfdG9faGV4KG9pZCkpOworCisJaWYgKHN0YXR1cyA+PSAwICYmIG9pLT5jb250ZW50cCkgeworCQkqb2ktPmNvbnRlbnRwID0gdW5wYWNrX2xvb3NlX3Jlc3QoJnN0cmVhbSwgaGRyLAorCQkJCQkJICAqb2ktPnNpemVwLCBvaWQpOworCQlpZiAoISpvaS0+Y29udGVudHApIHsKKwkJCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwkJCXN0YXR1cyA9IC0xOworCQl9CisJfSBlbHNlCisJCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKworCW11bm1hcChtYXAsIG1hcHNpemUpOworCWlmIChzdGF0dXMgJiYgb2ktPnR5cGVwKQorCQkqb2ktPnR5cGVwID0gc3RhdHVzOworCWlmIChvaS0+c2l6ZXAgPT0gJnNpemVfc2NyYXRjaCkKKwkJb2ktPnNpemVwID0gTlVMTDsKKwlzdHJidWZfcmVsZWFzZSgmaGRyYnVmKTsKKwlvaS0+d2hlbmNlID0gT0lfTE9PU0U7CisJcmV0dXJuIChzdGF0dXMgPCAwKSA/IHN0YXR1cyA6IDA7Cit9CisKK2ludCBvYmpfcmVhZF91c2VfbG9jayA9IDA7CitwdGhyZWFkX211dGV4X3Qgb2JqX3JlYWRfbXV0ZXg7CisKK3ZvaWQgZW5hYmxlX29ial9yZWFkX2xvY2sodm9pZCkKK3sKKwlpZiAob2JqX3JlYWRfdXNlX2xvY2spCisJCXJldHVybjsKKworCW9ial9yZWFkX3VzZV9sb2NrID0gMTsKKwlpbml0X3JlY3Vyc2l2ZV9tdXRleCgmb2JqX3JlYWRfbXV0ZXgpOworfQorCit2b2lkIGRpc2FibGVfb2JqX3JlYWRfbG9jayh2b2lkKQoreworCWlmICghb2JqX3JlYWRfdXNlX2xvY2spCisJCXJldHVybjsKKworCW9ial9yZWFkX3VzZV9sb2NrID0gMDsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm9ial9yZWFkX211dGV4KTsKK30KKworaW50IGZldGNoX2lmX21pc3NpbmcgPSAxOworCitzdGF0aWMgaW50IGRvX29pZF9vYmplY3RfaW5mb19leHRlbmRlZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9pLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdGF0aWMgc3RydWN0IG9iamVjdF9pbmZvIGJsYW5rX29pID0gT0JKRUNUX0lORk9fSU5JVDsKKwlzdHJ1Y3QgY2FjaGVkX29iamVjdCAqY287CisJc3RydWN0IHBhY2tfZW50cnkgZTsKKwlpbnQgcnR5cGU7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqcmVhbCA9IG9pZDsKKwlpbnQgYWxyZWFkeV9yZXRyaWVkID0gMDsKKworCisJaWYgKGZsYWdzICYgT0JKRUNUX0lORk9fTE9PS1VQX1JFUExBQ0UpCisJCXJlYWwgPSBsb29rdXBfcmVwbGFjZV9vYmplY3Qociwgb2lkKTsKKworCWlmIChpc19udWxsX29pZChyZWFsKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFvaSkKKwkJb2kgPSAmYmxhbmtfb2k7CisKKwljbyA9IGZpbmRfY2FjaGVkX29iamVjdChyZWFsKTsKKwlpZiAoY28pIHsKKwkJaWYgKG9pLT50eXBlcCkKKwkJCSoob2ktPnR5cGVwKSA9IGNvLT50eXBlOworCQlpZiAob2ktPnNpemVwKQorCQkJKihvaS0+c2l6ZXApID0gY28tPnNpemU7CisJCWlmIChvaS0+ZGlza19zaXplcCkKKwkJCSoob2ktPmRpc2tfc2l6ZXApID0gMDsKKwkJaWYgKG9pLT5kZWx0YV9iYXNlX29pZCkKKwkJCW9pZGNscihvaS0+ZGVsdGFfYmFzZV9vaWQpOworCQlpZiAob2ktPnR5cGVfbmFtZSkKKwkJCXN0cmJ1Zl9hZGRzdHIob2ktPnR5cGVfbmFtZSwgdHlwZV9uYW1lKGNvLT50eXBlKSk7CisJCWlmIChvaS0+Y29udGVudHApCisJCQkqb2ktPmNvbnRlbnRwID0geG1lbWR1cHooY28tPmJ1ZiwgY28tPnNpemUpOworCQlvaS0+d2hlbmNlID0gT0lfQ0FDSEVEOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlpZiAoZmluZF9wYWNrX2VudHJ5KHIsIHJlYWwsICZlKSkKKwkJCWJyZWFrOworCisJCWlmIChmbGFncyAmIE9CSkVDVF9JTkZPX0lHTk9SRV9MT09TRSkKKwkJCXJldHVybiAtMTsKKworCQkvKiBNb3N0IGxpa2VseSBpdCdzIGEgbG9vc2Ugb2JqZWN0LiAqLworCQlpZiAoIWxvb3NlX29iamVjdF9pbmZvKHIsIHJlYWwsIG9pLCBmbGFncykpCisJCQlyZXR1cm4gMDsKKworCQkvKiBOb3QgYSBsb29zZSBvYmplY3Q7IHNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBqdXN0IHBhY2tlZCBpdC4gKi8KKwkJaWYgKCEoZmxhZ3MgJiBPQkpFQ1RfSU5GT19RVUlDSykpIHsKKwkJCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KHIpOworCQkJaWYgKGZpbmRfcGFja19lbnRyeShyLCByZWFsLCAmZSkpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBDaGVjayBpZiBpdCBpcyBhIG1pc3Npbmcgb2JqZWN0ICovCisJCWlmIChmZXRjaF9pZl9taXNzaW5nICYmIGhhc19wcm9taXNvcl9yZW1vdGUoKSAmJgorCQkgICAgIWFscmVhZHlfcmV0cmllZCAmJiByID09IHRoZV9yZXBvc2l0b3J5ICYmCisJCSAgICAhKGZsYWdzICYgT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QpKSB7CisJCQkvKgorCQkJICogVE9ETyBJbnZlc3RpZ2F0ZSBjaGVja2luZyBwcm9taXNvcl9yZW1vdGVfZ2V0X2RpcmVjdCgpCisJCQkgKiBUT0RPIHJldHVybiB2YWx1ZSBhbmQgc3RvcHBpbmcgb24gZXJyb3IgaGVyZS4KKwkJCSAqIFRPRE8gUGFzcyBhIHJlcG9zaXRvcnkgc3RydWN0IHRocm91Z2gKKwkJCSAqIHByb21pc29yX3JlbW90ZV9nZXRfZGlyZWN0KCksIHN1Y2ggdGhhdCBhcmJpdHJhcnkKKwkJCSAqIHJlcG9zaXRvcmllcyB3b3JrLgorCQkJICovCisJCQlwcm9taXNvcl9yZW1vdGVfZ2V0X2RpcmVjdChyLCByZWFsLCAxKTsKKwkJCWFscmVhZHlfcmV0cmllZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAob2kgPT0gJmJsYW5rX29pKQorCQkvKgorCQkgKiBXZSBrbm93IHRoYXQgdGhlIGNhbGxlciBkb2Vzbid0IGFjdHVhbGx5IG5lZWQgdGhlCisJCSAqIGluZm9ybWF0aW9uIGJlbG93LCBzbyByZXR1cm4gZWFybHkuCisJCSAqLworCQlyZXR1cm4gMDsKKwlydHlwZSA9IHBhY2tlZF9vYmplY3RfaW5mbyhyLCBlLnAsIGUub2Zmc2V0LCBvaSk7CisJaWYgKHJ0eXBlIDwgMCkgeworCQltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KGUucCwgcmVhbC0+aGFzaCk7CisJCXJldHVybiBkb19vaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQociwgcmVhbCwgb2ksIDApOworCX0gZWxzZSBpZiAob2ktPndoZW5jZSA9PSBPSV9QQUNLRUQpIHsKKwkJb2ktPnUucGFja2VkLm9mZnNldCA9IGUub2Zmc2V0OworCQlvaS0+dS5wYWNrZWQucGFjayA9IGUucDsKKwkJb2ktPnUucGFja2VkLmlzX2RlbHRhID0gKHJ0eXBlID09IE9CSl9SRUZfREVMVEEgfHwKKwkJCQkJIHJ0eXBlID09IE9CSl9PRlNfREVMVEEpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgIHN0cnVjdCBvYmplY3RfaW5mbyAqb2ksIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQ7CisJb2JqX3JlYWRfbG9jaygpOworCXJldCA9IGRvX29pZF9vYmplY3RfaW5mb19leHRlbmRlZChyLCBvaWQsIG9pLCBmbGFncyk7CisJb2JqX3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworCisvKiByZXR1cm5zIGVudW0gb2JqZWN0X3R5cGUgb3IgbmVnYXRpdmUgKi8KK2ludCBvaWRfb2JqZWN0X2luZm8oc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IG9iamVjdF9pbmZvIG9pID0gT0JKRUNUX0lORk9fSU5JVDsKKworCW9pLnR5cGVwID0gJnR5cGU7CisJb2kuc2l6ZXAgPSBzaXplcDsKKwlpZiAob2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHIsIG9pZCwgJm9pLAorCQkJCSAgICAgIE9CSkVDVF9JTkZPX0xPT0tVUF9SRVBMQUNFKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIHZvaWQgKnJlYWRfb2JqZWN0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCSB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IE9CSkVDVF9JTkZPX0lOSVQ7CisJdm9pZCAqY29udGVudDsKKwlvaS50eXBlcCA9IHR5cGU7CisJb2kuc2l6ZXAgPSBzaXplOworCW9pLmNvbnRlbnRwID0gJmNvbnRlbnQ7CisKKwlpZiAob2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHIsIG9pZCwgJm9pLCAwKSA8IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiBjb250ZW50OworfQorCitpbnQgcHJldGVuZF9vYmplY3RfZmlsZSh2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IGNhY2hlZF9vYmplY3QgKmNvOworCisJaGFzaF9vYmplY3RfZmlsZSh0aGVfaGFzaF9hbGdvLCBidWYsIGxlbiwgdHlwZV9uYW1lKHR5cGUpLCBvaWQpOworCWlmIChoYXNfb2JqZWN0X2ZpbGUob2lkKSB8fCBmaW5kX2NhY2hlZF9vYmplY3Qob2lkKSkKKwkJcmV0dXJuIDA7CisJQUxMT0NfR1JPVyhjYWNoZWRfb2JqZWN0cywgY2FjaGVkX29iamVjdF9uciArIDEsIGNhY2hlZF9vYmplY3RfYWxsb2MpOworCWNvID0gJmNhY2hlZF9vYmplY3RzW2NhY2hlZF9vYmplY3RfbnIrK107CisJY28tPnNpemUgPSBsZW47CisJY28tPnR5cGUgPSB0eXBlOworCWNvLT5idWYgPSB4bWFsbG9jKGxlbik7CisJbWVtY3B5KGNvLT5idWYsIGJ1ZiwgbGVuKTsKKwlvaWRjcHkoJmNvLT5vaWQsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRpZXMgb24gY29ycnVwdCBvYmplY3RzOyB0aGUgY2FsbGVycyB3aG8gd2FudCB0bworICogZGVhbCB3aXRoIHRoZW0gc2hvdWxkIGFycmFuZ2UgdG8gY2FsbCByZWFkX29iamVjdCgpIGFuZCBnaXZlIGVycm9yCisgKiBtZXNzYWdlcyB0aGVtc2VsdmVzLgorICovCit2b2lkICpyZWFkX29iamVjdF9maWxlX2V4dGVuZGVkKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQllbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJCXVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkJaW50IGxvb2t1cF9yZXBsYWNlKQoreworCXZvaWQgKmRhdGE7CisJY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnA7CisJY29uc3QgY2hhciAqcGF0aDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXBsID0gbG9va3VwX3JlcGxhY2UgPworCQlsb29rdXBfcmVwbGFjZV9vYmplY3Qociwgb2lkKSA6IG9pZDsKKworCWVycm5vID0gMDsKKwlkYXRhID0gcmVhZF9vYmplY3QociwgcmVwbCwgdHlwZSwgc2l6ZSk7CisJaWYgKGRhdGEpCisJCXJldHVybiBkYXRhOworCisJb2JqX3JlYWRfbG9jaygpOworCWlmIChlcnJubyAmJiBlcnJubyAhPSBFTk9FTlQpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gcmVhZCBvYmplY3QgJXMiKSwgb2lkX3RvX2hleChvaWQpKTsKKworCS8qIGRpZSBpZiB3ZSByZXBsYWNlZCBhbiBvYmplY3Qgd2l0aCBvbmUgdGhhdCBkb2VzIG5vdCBleGlzdCAqLworCWlmIChyZXBsICE9IG9pZCkKKwkJZGllKF8oInJlcGxhY2VtZW50ICVzIG5vdCBmb3VuZCBmb3IgJXMiKSwKKwkJICAgIG9pZF90b19oZXgocmVwbCksIG9pZF90b19oZXgob2lkKSk7CisKKwlpZiAoIXN0YXRfbG9vc2Vfb2JqZWN0KHIsIHJlcGwsICZzdCwgJnBhdGgpKQorCQlkaWUoXygibG9vc2Ugb2JqZWN0ICVzIChzdG9yZWQgaW4gJXMpIGlzIGNvcnJ1cHQiKSwKKwkJICAgIG9pZF90b19oZXgocmVwbCksIHBhdGgpOworCisJaWYgKChwID0gaGFzX3BhY2tlZF9hbmRfYmFkKHIsIHJlcGwtPmhhc2gpKSAhPSBOVUxMKQorCQlkaWUoXygicGFja2VkIG9iamVjdCAlcyAoc3RvcmVkIGluICVzKSBpcyBjb3JydXB0IiksCisJCSAgICBvaWRfdG9faGV4KHJlcGwpLCBwLT5wYWNrX25hbWUpOworCW9ial9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgKnJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJIGNvbnN0IGNoYXIgKnJlcXVpcmVkX3R5cGVfbmFtZSwKKwkJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgc3RydWN0IG9iamVjdF9pZCAqYWN0dWFsX29pZF9yZXR1cm4pCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlLCByZXF1aXJlZF90eXBlOworCXZvaWQgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGlzaXplOworCXN0cnVjdCBvYmplY3RfaWQgYWN0dWFsX29pZDsKKworCXJlcXVpcmVkX3R5cGUgPSB0eXBlX2Zyb21fc3RyaW5nKHJlcXVpcmVkX3R5cGVfbmFtZSk7CisJb2lkY3B5KCZhY3R1YWxfb2lkLCBvaWQpOworCXdoaWxlICgxKSB7CisJCWludCByZWZfbGVuZ3RoID0gLTE7CisJCWNvbnN0IGNoYXIgKnJlZl90eXBlID0gTlVMTDsKKworCQlidWZmZXIgPSByZXBvX3JlYWRfb2JqZWN0X2ZpbGUociwgJmFjdHVhbF9vaWQsICZ0eXBlLCAmaXNpemUpOworCQlpZiAoIWJ1ZmZlcikKKwkJCXJldHVybiBOVUxMOworCQlpZiAodHlwZSA9PSByZXF1aXJlZF90eXBlKSB7CisJCQkqc2l6ZSA9IGlzaXplOworCQkJaWYgKGFjdHVhbF9vaWRfcmV0dXJuKQorCQkJCW9pZGNweShhY3R1YWxfb2lkX3JldHVybiwgJmFjdHVhbF9vaWQpOworCQkJcmV0dXJuIGJ1ZmZlcjsKKwkJfQorCQkvKiBIYW5kbGUgcmVmZXJlbmNlcyAqLworCQllbHNlIGlmICh0eXBlID09IE9CSl9DT01NSVQpCisJCQlyZWZfdHlwZSA9ICJ0cmVlICI7CisJCWVsc2UgaWYgKHR5cGUgPT0gT0JKX1RBRykKKwkJCXJlZl90eXBlID0gIm9iamVjdCAiOworCQllbHNlIHsKKwkJCWZyZWUoYnVmZmVyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXJlZl9sZW5ndGggPSBzdHJsZW4ocmVmX3R5cGUpOworCisJCWlmIChyZWZfbGVuZ3RoICsgdGhlX2hhc2hfYWxnby0+aGV4c3ogPiBpc2l6ZSB8fAorCQkgICAgbWVtY21wKGJ1ZmZlciwgcmVmX3R5cGUsIHJlZl9sZW5ndGgpIHx8CisJCSAgICBnZXRfb2lkX2hleCgoY2hhciAqKSBidWZmZXIgKyByZWZfbGVuZ3RoLCAmYWN0dWFsX29pZCkpIHsKKwkJCWZyZWUoYnVmZmVyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWZyZWUoYnVmZmVyKTsKKwkJLyogTm93IHdlIGhhdmUgdGhlIElEIG9mIHRoZSByZWZlcnJlZC10byBvYmplY3QgaW4KKwkJICogYWN0dWFsX29pZC4gIENoZWNrIGFnYWluLiAqLworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfb2JqZWN0X2ZpbGVfcHJlcGFyZShjb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqYWxnbywKKwkJCQkgICAgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgICBjaGFyICpoZHIsIGludCAqaGRybGVuKQoreworCWdpdF9oYXNoX2N0eCBjOworCisJLyogR2VuZXJhdGUgdGhlIGhlYWRlciAqLworCSpoZHJsZW4gPSB4c25wcmludGYoaGRyLCAqaGRybGVuLCAiJXMgJSJQUkl1TUFYICwgdHlwZSwgKHVpbnRtYXhfdClsZW4pKzE7CisKKwkvKiBTaGExLi4gKi8KKwlhbGdvLT5pbml0X2ZuKCZjKTsKKwlhbGdvLT51cGRhdGVfZm4oJmMsIGhkciwgKmhkcmxlbik7CisJYWxnby0+dXBkYXRlX2ZuKCZjLCBidWYsIGxlbik7CisJYWxnby0+ZmluYWxfZm4ob2lkLT5oYXNoLCAmYyk7Cit9CisKKy8qCisgKiBNb3ZlIHRoZSBqdXN0IHdyaXR0ZW4gb2JqZWN0IGludG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UuCisgKi8KK2ludCBmaW5hbGl6ZV9vYmplY3RfZmlsZShjb25zdCBjaGFyICp0bXBmaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChvYmplY3RfY3JlYXRpb25fbW9kZSA9PSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTKQorCQlnb3RvIHRyeV9yZW5hbWU7CisJZWxzZSBpZiAobGluayh0bXBmaWxlLCBmaWxlbmFtZSkpCisJCXJldCA9IGVycm5vOworCisJLyoKKwkgKiBDb2RhIGhhY2sgLSBjb2RhIGRvZXNuJ3QgbGlrZSBjcm9zcy1kaXJlY3RvcnkgbGlua3MsCisJICogc28gd2UgZmFsbCBiYWNrIHRvIGEgcmVuYW1lLCB3aGljaCB3aWxsIG1lYW4gdGhhdCBpdAorCSAqIHdvbid0IGJlIGFibGUgdG8gY2hlY2sgY29sbGlzaW9ucywgYnV0IHRoYXQncyBub3QgYQorCSAqIGJpZyBkZWFsLgorCSAqCisJICogVGhlIHNhbWUgaG9sZHMgZm9yIEZBVCBmb3JtYXR0ZWQgbWVkaWEuCisJICoKKwkgKiBXaGVuIHRoaXMgc3VjY2VlZHMsIHdlIGp1c3QgcmV0dXJuLiAgV2UgaGF2ZSBub3RoaW5nCisJICogbGVmdCB0byB1bmxpbmsuCisJICovCisJaWYgKHJldCAmJiByZXQgIT0gRUVYSVNUKSB7CisJdHJ5X3JlbmFtZToKKwkJaWYgKCFyZW5hbWUodG1wZmlsZSwgZmlsZW5hbWUpKQorCQkJZ290byBvdXQ7CisJCXJldCA9IGVycm5vOworCX0KKwl1bmxpbmtfb3Jfd2Fybih0bXBmaWxlKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgIT0gRUVYSVNUKSB7CisJCQlyZXR1cm4gZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMiKSwgZmlsZW5hbWUpOworCQl9CisJCS8qIEZJWE1FISEhIENvbGxpc2lvbiBjaGVjayBoZXJlID8gKi8KKwl9CisKK291dDoKKwlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKGZpbGVuYW1lKSkKKwkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byBzZXQgcGVybWlzc2lvbiB0byAnJXMnIiksIGZpbGVuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9idWZmZXIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgbGVuKSA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubyhfKCJmaWxlIHdyaXRlIGVycm9yIikpOworCXJldHVybiAwOworfQorCitpbnQgaGFzaF9vYmplY3RfZmlsZShjb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqYWxnbywgY29uc3Qgdm9pZCAqYnVmLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLAorCQkgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwljaGFyIGhkcltNQVhfSEVBREVSX0xFTl07CisJaW50IGhkcmxlbiA9IHNpemVvZihoZHIpOworCXdyaXRlX29iamVjdF9maWxlX3ByZXBhcmUoYWxnbywgYnVmLCBsZW4sIHR5cGUsIG9pZCwgaGRyLCAmaGRybGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyogRmluYWxpemUgYSBmaWxlIG9uIGRpc2ssIGFuZCBjbG9zZSBpdC4gKi8KK3N0YXRpYyB2b2lkIGNsb3NlX2xvb3NlX29iamVjdChpbnQgZmQpCit7CisJaWYgKGZzeW5jX29iamVjdF9maWxlcykKKwkJZnN5bmNfb3JfZGllKGZkLCAibG9vc2Ugb2JqZWN0IGZpbGUiKTsKKwlpZiAoY2xvc2UoZmQpICE9IDApCisJCWRpZV9lcnJubyhfKCJlcnJvciB3aGVuIGNsb3NpbmcgbG9vc2Ugb2JqZWN0IGZpbGUiKSk7Cit9CisKKy8qIFNpemUgb2YgZGlyZWN0b3J5IGNvbXBvbmVudCwgaW5jbHVkaW5nIHRoZSBlbmRpbmcgJy8nICovCitzdGF0aWMgaW5saW5lIGludCBkaXJlY3Rvcnlfc2l6ZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwljb25zdCBjaGFyICpzID0gc3RycmNocihmaWxlbmFtZSwgJy8nKTsKKwlpZiAoIXMpCisJCXJldHVybiAwOworCXJldHVybiBzIC0gZmlsZW5hbWUgKyAxOworfQorCisvKgorICogVGhpcyBjcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBmaW5hbAorICogJ2ZpbGVuYW1lJworICoKKyAqIFdlIHdhbnQgdG8gYXZvaWQgY3Jvc3MtZGlyZWN0b3J5IGZpbGVuYW1lIHJlbmFtZXMsIGJlY2F1c2UgdGhvc2UKKyAqIGNhbiBoYXZlIHByb2JsZW1zIG9uIHZhcmlvdXMgZmlsZXN5c3RlbXMgKEZBVCwgTkZTLCBDb2RhKS4KKyAqLworc3RhdGljIGludCBjcmVhdGVfdG1wZmlsZShzdHJ1Y3Qgc3RyYnVmICp0bXAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludCBmZCwgZGlybGVuID0gZGlyZWN0b3J5X3NpemUoZmlsZW5hbWUpOworCisJc3RyYnVmX3Jlc2V0KHRtcCk7CisJc3RyYnVmX2FkZCh0bXAsIGZpbGVuYW1lLCBkaXJsZW4pOworCXN0cmJ1Zl9hZGRzdHIodG1wLCAidG1wX29ial9YWFhYWFgiKTsKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodG1wLT5idWYsIDA0NDQpOworCWlmIChmZCA8IDAgJiYgZGlybGVuICYmIGVycm5vID09IEVOT0VOVCkgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHM7IG5vdGUgdGhhdCB0aGUgY29udGVudHMKKwkJICogb2YgdGhlIGJ1ZmZlciBhcmUgdW5kZWZpbmVkIGFmdGVyIG1rc3RlbXAgcmV0dXJucyBhbgorCQkgKiBlcnJvciwgc28gd2UgaGF2ZSB0byByZXdyaXRlIHRoZSB3aG9sZSBidWZmZXIgZnJvbQorCQkgKiBzY3JhdGNoLgorCQkgKi8KKwkJc3RyYnVmX3Jlc2V0KHRtcCk7CisJCXN0cmJ1Zl9hZGQodG1wLCBmaWxlbmFtZSwgZGlybGVuIC0gMSk7CisJCWlmIChta2Rpcih0bXAtPmJ1ZiwgMDc3NykgJiYgZXJybm8gIT0gRUVYSVNUKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHRtcC0+YnVmKSkKKwkJCXJldHVybiAtMTsKKworCQkvKiBUcnkgYWdhaW4gKi8KKwkJc3RyYnVmX2FkZHN0cih0bXAsICIvdG1wX29ial9YWFhYWFgiKTsKKwkJZmQgPSBnaXRfbWtzdGVtcF9tb2RlKHRtcC0+YnVmLCAwNDQ0KTsKKwl9CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50IHdyaXRlX2xvb3NlX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNoYXIgKmhkciwKKwkJCSAgICAgIGludCBoZHJsZW4sIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgICAgICB0aW1lX3QgbXRpbWUpCit7CisJaW50IGZkLCByZXQ7CisJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkWzQwOTZdOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwlnaXRfaGFzaF9jdHggYzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBhcmFub19vaWQ7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdG1wX2ZpbGUgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBmaWxlbmFtZSA9IFNUUkJVRl9JTklUOworCisJbG9vc2Vfb2JqZWN0X3BhdGgodGhlX3JlcG9zaXRvcnksICZmaWxlbmFtZSwgb2lkKTsKKworCWZkID0gY3JlYXRlX3RtcGZpbGUoJnRtcF9maWxlLCBmaWxlbmFtZS5idWYpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVBQ0NFUykKKwkJCXJldHVybiBlcnJvcihfKCJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzIiksIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpKTsKKwl9CisKKwkvKiBTZXQgaXQgdXAgKi8KKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIHpsaWJfY29tcHJlc3Npb25fbGV2ZWwpOworCXN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWQ7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihjb21wcmVzc2VkKTsKKwl0aGVfaGFzaF9hbGdvLT5pbml0X2ZuKCZjKTsKKworCS8qIEZpcnN0IGhlYWRlci4uICovCisJc3RyZWFtLm5leHRfaW4gPSAodW5zaWduZWQgY2hhciAqKWhkcjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBoZHJsZW47CisJd2hpbGUgKGdpdF9kZWZsYXRlKCZzdHJlYW0sIDApID09IFpfT0spCisJCTsgLyogbm90aGluZyAqLworCXRoZV9oYXNoX2FsZ28tPnVwZGF0ZV9mbigmYywgaGRyLCBoZHJsZW4pOworCisJLyogVGhlbiB0aGUgZGF0YSBpdHNlbGYuLiAqLworCXN0cmVhbS5uZXh0X2luID0gKHZvaWQgKilidWY7CisJc3RyZWFtLmF2YWlsX2luID0gbGVuOworCWRvIHsKKwkJdW5zaWduZWQgY2hhciAqaW4wID0gc3RyZWFtLm5leHRfaW47CisJCXJldCA9IGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBpbjAsIHN0cmVhbS5uZXh0X2luIC0gaW4wKTsKKwkJaWYgKHdyaXRlX2J1ZmZlcihmZCwgY29tcHJlc3NlZCwgc3RyZWFtLm5leHRfb3V0IC0gY29tcHJlc3NlZCkgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBsb29zZSBvYmplY3QgZmlsZSIpKTsKKwkJc3RyZWFtLm5leHRfb3V0ID0gY29tcHJlc3NlZDsKKwkJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihjb21wcmVzc2VkKTsKKwl9IHdoaWxlIChyZXQgPT0gWl9PSyk7CisKKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkKKwkJZGllKF8oInVuYWJsZSB0byBkZWZsYXRlIG5ldyBvYmplY3QgJXMgKCVkKSIpLCBvaWRfdG9faGV4KG9pZCksCisJCSAgICByZXQpOworCXJldCA9IGdpdF9kZWZsYXRlX2VuZF9nZW50bHkoJnN0cmVhbSk7CisJaWYgKHJldCAhPSBaX09LKQorCQlkaWUoXygiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiKSwgb2lkX3RvX2hleChvaWQpLAorCQkgICAgcmV0KTsKKwl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihwYXJhbm9fb2lkLmhhc2gsICZjKTsKKwlpZiAoIW9pZGVxKG9pZCwgJnBhcmFub19vaWQpKQorCQlkaWUoXygiY29uZnVzZWQgYnkgdW5zdGFibGUgb2JqZWN0IHNvdXJjZSBkYXRhIGZvciAlcyIpLAorCQkgICAgb2lkX3RvX2hleChvaWQpKTsKKworCWNsb3NlX2xvb3NlX29iamVjdChmZCk7CisKKwlpZiAobXRpbWUpIHsKKwkJc3RydWN0IHV0aW1idWYgdXRiOworCQl1dGIuYWN0aW1lID0gbXRpbWU7CisJCXV0Yi5tb2R0aW1lID0gbXRpbWU7CisJCWlmICh1dGltZSh0bXBfZmlsZS5idWYsICZ1dGIpIDwgMCkKKwkJCXdhcm5pbmdfZXJybm8oXygiZmFpbGVkIHV0aW1lKCkgb24gJXMiKSwgdG1wX2ZpbGUuYnVmKTsKKwl9CisKKwlyZXR1cm4gZmluYWxpemVfb2JqZWN0X2ZpbGUodG1wX2ZpbGUuYnVmLCBmaWxlbmFtZS5idWYpOworfQorCitzdGF0aWMgaW50IGZyZXNoZW5fbG9vc2Vfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gY2hlY2tfYW5kX2ZyZXNoZW4ob2lkLCAxKTsKK30KKworc3RhdGljIGludCBmcmVzaGVuX3BhY2tlZF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBwYWNrX2VudHJ5IGU7CisJaWYgKCFmaW5kX3BhY2tfZW50cnkodGhlX3JlcG9zaXRvcnksIG9pZCwgJmUpKQorCQlyZXR1cm4gMDsKKwlpZiAoZS5wLT5mcmVzaGVuZWQpCisJCXJldHVybiAxOworCWlmICghZnJlc2hlbl9maWxlKGUucC0+cGFja19uYW1lKSkKKwkJcmV0dXJuIDA7CisJZS5wLT5mcmVzaGVuZWQgPSAxOworCXJldHVybiAxOworfQorCitpbnQgd3JpdGVfb2JqZWN0X2ZpbGUoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwKKwkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWNoYXIgaGRyW01BWF9IRUFERVJfTEVOXTsKKwlpbnQgaGRybGVuID0gc2l6ZW9mKGhkcik7CisKKwkvKiBOb3JtYWxseSBpZiB3ZSBoYXZlIGl0IGluIHRoZSBwYWNrIHRoZW4gd2UgZG8gbm90IGJvdGhlciB3cml0aW5nCisJICogaXQgb3V0IGludG8gLmdpdC9vYmplY3RzLz8/Lz97Mzh9IGZpbGUuCisJICovCisJd3JpdGVfb2JqZWN0X2ZpbGVfcHJlcGFyZSh0aGVfaGFzaF9hbGdvLCBidWYsIGxlbiwgdHlwZSwgb2lkLCBoZHIsCisJCQkJICAmaGRybGVuKTsKKwlpZiAoZnJlc2hlbl9wYWNrZWRfb2JqZWN0KG9pZCkgfHwgZnJlc2hlbl9sb29zZV9vYmplY3Qob2lkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHdyaXRlX2xvb3NlX29iamVjdChvaWQsIGhkciwgaGRybGVuLCBidWYsIGxlbiwgMCk7Cit9CisKK2ludCBoYXNoX29iamVjdF9maWxlX2xpdGVyYWxseShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwljaGFyICpoZWFkZXI7CisJaW50IGhkcmxlbiwgc3RhdHVzID0gMDsKKworCS8qIHR5cGUgc3RyaW5nLCBTUCwgJWx1IG9mIHRoZSBsZW5ndGggcGx1cyBOVUwgbXVzdCBmaXQgdGhpcyAqLworCWhkcmxlbiA9IHN0cmxlbih0eXBlKSArIE1BWF9IRUFERVJfTEVOOworCWhlYWRlciA9IHhtYWxsb2MoaGRybGVuKTsKKwl3cml0ZV9vYmplY3RfZmlsZV9wcmVwYXJlKHRoZV9oYXNoX2FsZ28sIGJ1ZiwgbGVuLCB0eXBlLCBvaWQsIGhlYWRlciwKKwkJCQkgICZoZHJsZW4pOworCisJaWYgKCEoZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVCkpCisJCWdvdG8gY2xlYW51cDsKKwlpZiAoZnJlc2hlbl9wYWNrZWRfb2JqZWN0KG9pZCkgfHwgZnJlc2hlbl9sb29zZV9vYmplY3Qob2lkKSkKKwkJZ290byBjbGVhbnVwOworCXN0YXR1cyA9IHdyaXRlX2xvb3NlX29iamVjdChvaWQsIGhlYWRlciwgaGRybGVuLCBidWYsIGxlbiwgMCk7CisKK2NsZWFudXA6CisJZnJlZShoZWFkZXIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBmb3JjZV9vYmplY3RfbG9vc2UoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB0aW1lX3QgbXRpbWUpCit7CisJdm9pZCAqYnVmOworCXVuc2lnbmVkIGxvbmcgbGVuOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyIGhkcltNQVhfSEVBREVSX0xFTl07CisJaW50IGhkcmxlbjsKKwlpbnQgcmV0OworCisJaWYgKGhhc19sb29zZV9vYmplY3Qob2lkKSkKKwkJcmV0dXJuIDA7CisJYnVmID0gcmVhZF9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCwgJnR5cGUsICZsZW4pOworCWlmICghYnVmKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlYWQgb2JqZWN0IGZvciAlcyIpLCBvaWRfdG9faGV4KG9pZCkpOworCWhkcmxlbiA9IHhzbnByaW50ZihoZHIsIHNpemVvZihoZHIpLCAiJXMgJSJQUkl1TUFYICwgdHlwZV9uYW1lKHR5cGUpLCAodWludG1heF90KWxlbikgKyAxOworCXJldCA9IHdyaXRlX2xvb3NlX29iamVjdChvaWQsIGhkciwgaGRybGVuLCBidWYsIGxlbiwgbXRpbWUpOworCWZyZWUoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCByZXBvX2hhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncykKK3sKKwlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gb2lkX29iamVjdF9pbmZvX2V4dGVuZGVkKHIsIG9pZCwgTlVMTCwgZmxhZ3MpID49IDA7Cit9CisKK2ludCByZXBvX2hhc19vYmplY3RfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIHJlcG9faGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Mociwgb2lkLCAwKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdHJlZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCBidWYsIHNpemUpOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKQorCQkvKiBkbyBub3RoaW5nCisJCSAqIHRyZWVfZW50cnkoKSB3aWxsIGRpZSgpIG9uIG1hbGZvcm1lZCBlbnRyaWVzICovCisJCTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY29tbWl0KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGNvbW1pdCBjOworCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKKwlpZiAocGFyc2VfY29tbWl0X2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgJmMsIGJ1Ziwgc2l6ZSwgMCkpCisJCWRpZShfKCJjb3JydXB0IGNvbW1pdCIpKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdGFnKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHRhZyB0OworCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKwlpZiAocGFyc2VfdGFnX2J1ZmZlcih0aGVfcmVwb3NpdG9yeSwgJnQsIGJ1Ziwgc2l6ZSkpCisJCWRpZShfKCJjb3JydXB0IHRhZyIpKTsKK30KKworc3RhdGljIGludCBpbmRleF9tZW0oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpidWYsIHNpemVfdCBzaXplLAorCQkgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJICAgICBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0LCByZV9hbGxvY2F0ZWQgPSAwOworCWludCB3cml0ZV9vYmplY3QgPSBmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUOworCisJaWYgKCF0eXBlKQorCQl0eXBlID0gT0JKX0JMT0I7CisKKwkvKgorCSAqIENvbnZlcnQgYmxvYnMgdG8gZ2l0IGludGVybmFsIGZvcm1hdAorCSAqLworCWlmICgodHlwZSA9PSBPQkpfQkxPQikgJiYgcGF0aCkgeworCQlzdHJ1Y3Qgc3RyYnVmIG5idWYgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKGNvbnZlcnRfdG9fZ2l0KGlzdGF0ZSwgcGF0aCwgYnVmLCBzaXplLCAmbmJ1ZiwKKwkJCQkgICBnZXRfY29udl9mbGFncyhmbGFncykpKSB7CisJCQlidWYgPSBzdHJidWZfZGV0YWNoKCZuYnVmLCAmc2l6ZSk7CisJCQlyZV9hbGxvY2F0ZWQgPSAxOworCQl9CisJfQorCWlmIChmbGFncyAmIEhBU0hfRk9STUFUX0NIRUNLKSB7CisJCWlmICh0eXBlID09IE9CSl9UUkVFKQorCQkJY2hlY2tfdHJlZShidWYsIHNpemUpOworCQlpZiAodHlwZSA9PSBPQkpfQ09NTUlUKQorCQkJY2hlY2tfY29tbWl0KGJ1Ziwgc2l6ZSk7CisJCWlmICh0eXBlID09IE9CSl9UQUcpCisJCQljaGVja190YWcoYnVmLCBzaXplKTsKKwl9CisKKwlpZiAod3JpdGVfb2JqZWN0KQorCQlyZXQgPSB3cml0ZV9vYmplY3RfZmlsZShidWYsIHNpemUsIHR5cGVfbmFtZSh0eXBlKSwgb2lkKTsKKwllbHNlCisJCXJldCA9IGhhc2hfb2JqZWN0X2ZpbGUodGhlX2hhc2hfYWxnbywgYnVmLCBzaXplLAorCQkJCSAgICAgICB0eXBlX25hbWUodHlwZSksIG9pZCk7CisJaWYgKHJlX2FsbG9jYXRlZCkKKwkJZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW5kZXhfc3RyZWFtX2NvbnZlcnRfYmxvYihzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgIGludCBmZCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0OworCWNvbnN0IGludCB3cml0ZV9vYmplY3QgPSBmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUOworCXN0cnVjdCBzdHJidWYgc2J1ZiA9IFNUUkJVRl9JTklUOworCisJYXNzZXJ0KHBhdGgpOworCWFzc2VydCh3b3VsZF9jb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQoaXN0YXRlLCBwYXRoKSk7CisKKwljb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQoaXN0YXRlLCBwYXRoLCBmZCwgJnNidWYsCisJCQkJIGdldF9jb252X2ZsYWdzKGZsYWdzKSk7CisKKwlpZiAod3JpdGVfb2JqZWN0KQorCQlyZXQgPSB3cml0ZV9vYmplY3RfZmlsZShzYnVmLmJ1Ziwgc2J1Zi5sZW4sIHR5cGVfbmFtZShPQkpfQkxPQiksCisJCQkJCW9pZCk7CisJZWxzZQorCQlyZXQgPSBoYXNoX29iamVjdF9maWxlKHRoZV9oYXNoX2FsZ28sIHNidWYuYnVmLCBzYnVmLmxlbiwKKwkJCQkgICAgICAgdHlwZV9uYW1lKE9CSl9CTE9CKSwgb2lkKTsKKwlzdHJidWZfcmVsZWFzZSgmc2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbmRleF9waXBlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgIGludCBmZCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJaWYgKHN0cmJ1Zl9yZWFkKCZzYnVmLCBmZCwgNDA5NikgPj0gMCkKKwkJcmV0ID0gaW5kZXhfbWVtKGlzdGF0ZSwgb2lkLCBzYnVmLmJ1Ziwgc2J1Zi5sZW4sIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwllbHNlCisJCXJldCA9IC0xOworCXN0cmJ1Zl9yZWxlYXNlKCZzYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFNNQUxMX0ZJTEVfU0laRSAoMzIqMTAyNCkKKworc3RhdGljIGludCBpbmRleF9jb3JlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmZCwgc2l6ZV90IHNpemUsCisJCSAgICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHJldDsKKworCWlmICghc2l6ZSkgeworCQlyZXQgPSBpbmRleF9tZW0oaXN0YXRlLCBvaWQsICIiLCBzaXplLCB0eXBlLCBwYXRoLCBmbGFncyk7CisJfSBlbHNlIGlmIChzaXplIDw9IFNNQUxMX0ZJTEVfU0laRSkgeworCQljaGFyICpidWYgPSB4bWFsbG9jKHNpemUpOworCQlzc2l6ZV90IHJlYWRfcmVzdWx0ID0gcmVhZF9pbl9mdWxsKGZkLCBidWYsIHNpemUpOworCQlpZiAocmVhZF9yZXN1bHQgPCAwKQorCQkJcmV0ID0gZXJyb3JfZXJybm8oXygicmVhZCBlcnJvciB3aGlsZSBpbmRleGluZyAlcyIpLAorCQkJCQkgIHBhdGggPyBwYXRoIDogIjx1bmtub3duPiIpOworCQllbHNlIGlmIChyZWFkX3Jlc3VsdCAhPSBzaXplKQorCQkJcmV0ID0gZXJyb3IoXygic2hvcnQgcmVhZCB3aGlsZSBpbmRleGluZyAlcyIpLAorCQkJCSAgICBwYXRoID8gcGF0aCA6ICI8dW5rbm93bj4iKTsKKwkJZWxzZQorCQkJcmV0ID0gaW5kZXhfbWVtKGlzdGF0ZSwgb2lkLCBidWYsIHNpemUsIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwkJZnJlZShidWYpOworCX0gZWxzZSB7CisJCXZvaWQgKmJ1ZiA9IHhtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwkJcmV0ID0gaW5kZXhfbWVtKGlzdGF0ZSwgb2lkLCBidWYsIHNpemUsIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwkJbXVubWFwKGJ1Ziwgc2l6ZSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGNyZWF0ZXMgb25lIHBhY2tmaWxlIHBlciBsYXJnZSBibG9iIHVubGVzcyBidWxrLWNoZWNraW4KKyAqIG1hY2hpbmVyeSBpcyAicGx1Z2dlZCIuCisgKgorICogVGhpcyBhbHNvIGJ5cGFzc2VzIHRoZSB1c3VhbCAiY29udmVydC10by1naXQiIGRhbmNlLCBhbmQgdGhhdCBpcyBvbgorICogcHVycG9zZS4gV2UgY291bGQgd3JpdGUgYSBzdHJlYW1pbmcgdmVyc2lvbiBvZiB0aGUgY29udmVydGluZworICogZnVuY3Rpb25zIGFuZCBpbnNlcnQgdGhhdCBiZWZvcmUgZmVlZGluZyB0aGUgZGF0YSB0byBmYXN0LWltcG9ydAorICogKG9yIGVxdWl2YWxlbnQgaW4tY29yZSBBUEkgZGVzY3JpYmVkIGFib3ZlKS4gSG93ZXZlciwgdGhhdCBpcworICogc29tZXdoYXQgY29tcGxpY2F0ZWQsIGFzIHdlIGRvIG5vdCBrbm93IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXIKKyAqIHJlc3VsdCwgd2hpY2ggd2UgbmVlZCB0byBrbm93IGJlZm9yZWhhbmQgd2hlbiB3cml0aW5nIGEgZ2l0IG9iamVjdC4KKyAqIFNpbmNlIHRoZSBwcmltYXJ5IG1vdGl2YXRpb24gZm9yIHRyeWluZyB0byBzdHJlYW0gZnJvbSB0aGUgd29ya2luZworICogdHJlZSBmaWxlIGFuZCB0byBhdm9pZCBtbWFwaW5nIGl0IGluIGNvcmUgaXMgdG8gZGVhbCB3aXRoIGxhcmdlCisgKiBiaW5hcnkgYmxvYnMsIHRoZXkgZ2VuZXJhbGx5IGRvIG5vdCB3YW50IHRvIGdldCBhbnkgY29udmVyc2lvbiwgYW5kCisgKiBjYWxsZXJzIHNob3VsZCBhdm9pZCB0aGlzIGNvZGUgcGF0aCB3aGVuIGZpbHRlcnMgYXJlIHJlcXVlc3RlZC4KKyAqLworc3RhdGljIGludCBpbmRleF9zdHJlYW0oc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmQsIHNpemVfdCBzaXplLAorCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0dXJuIGluZGV4X2J1bGtfY2hlY2tpbihvaWQsIGZkLCBzaXplLCB0eXBlLCBwYXRoLCBmbGFncyk7Cit9CisKK2ludCBpbmRleF9mZChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCSAgICAgaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIENhbGwgeHNpemVfdCgpIG9ubHkgd2hlbiBuZWVkZWQgdG8gYXZvaWQgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkKKwkgKiBkaWUoKSBmb3IgbGFyZ2UgZmlsZXMuCisJICovCisJaWYgKHR5cGUgPT0gT0JKX0JMT0IgJiYgcGF0aCAmJiB3b3VsZF9jb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQoaXN0YXRlLCBwYXRoKSkKKwkJcmV0ID0gaW5kZXhfc3RyZWFtX2NvbnZlcnRfYmxvYihpc3RhdGUsIG9pZCwgZmQsIHBhdGgsIGZsYWdzKTsKKwllbHNlIGlmICghU19JU1JFRyhzdC0+c3RfbW9kZSkpCisJCXJldCA9IGluZGV4X3BpcGUoaXN0YXRlLCBvaWQsIGZkLCB0eXBlLCBwYXRoLCBmbGFncyk7CisJZWxzZSBpZiAoc3QtPnN0X3NpemUgPD0gYmlnX2ZpbGVfdGhyZXNob2xkIHx8IHR5cGUgIT0gT0JKX0JMT0IgfHwKKwkJIChwYXRoICYmIHdvdWxkX2NvbnZlcnRfdG9fZ2l0KGlzdGF0ZSwgcGF0aCkpKQorCQlyZXQgPSBpbmRleF9jb3JlKGlzdGF0ZSwgb2lkLCBmZCwgeHNpemVfdChzdC0+c3Rfc2l6ZSksCisJCQkJIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwllbHNlCisJCXJldCA9IGluZGV4X3N0cmVhbShvaWQsIGZkLCB4c2l6ZV90KHN0LT5zdF9zaXplKSwgdHlwZSwgcGF0aCwKKwkJCQkgICBmbGFncyk7CisJY2xvc2UoZmQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpbmRleF9wYXRoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IGZkOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmMgPSAwOworCisJc3dpdGNoIChzdC0+c3RfbW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRlJFRzoKKwkJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCXJldHVybiBlcnJvcl9lcnJubygib3BlbihcIiVzXCIpIiwgcGF0aCk7CisJCWlmIChpbmRleF9mZChpc3RhdGUsIG9pZCwgZmQsIHN0LCBPQkpfQkxPQiwgcGF0aCwgZmxhZ3MpIDwgMCkKKwkJCXJldHVybiBlcnJvcihfKCIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIiksCisJCQkJICAgICBwYXRoKTsKKwkJYnJlYWs7CisJY2FzZSBTX0lGTE5LOgorCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgcGF0aCwgc3QtPnN0X3NpemUpKQorCQkJcmV0dXJuIGVycm9yX2Vycm5vKCJyZWFkbGluayhcIiVzXCIpIiwgcGF0aCk7CisJCWlmICghKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpKQorCQkJaGFzaF9vYmplY3RfZmlsZSh0aGVfaGFzaF9hbGdvLCBzYi5idWYsIHNiLmxlbiwKKwkJCQkJIGJsb2JfdHlwZSwgb2lkKTsKKwkJZWxzZSBpZiAod3JpdGVfb2JqZWN0X2ZpbGUoc2IuYnVmLCBzYi5sZW4sIGJsb2JfdHlwZSwgb2lkKSkKKwkJCXJjID0gZXJyb3IoXygiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIpLCBwYXRoKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJYnJlYWs7CisJY2FzZSBTX0lGRElSOgorCQlyZXR1cm4gcmVzb2x2ZV9naXRsaW5rX3JlZihwYXRoLCAiSEVBRCIsIG9pZCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKF8oIiVzOiB1bnN1cHBvcnRlZCBmaWxlIHR5cGUiKSwgcGF0aCk7CisJfQorCXJldHVybiByYzsKK30KKworaW50IHJlYWRfcGFja19oZWFkZXIoaW50IGZkLCBzdHJ1Y3QgcGFja19oZWFkZXIgKmhlYWRlcikKK3sKKwlpZiAocmVhZF9pbl9mdWxsKGZkLCBoZWFkZXIsIHNpemVvZigqaGVhZGVyKSkgIT0gc2l6ZW9mKCpoZWFkZXIpKQorCQkvKiAiZW9mIGJlZm9yZSBwYWNrIGhlYWRlciB3YXMgZnVsbHkgcmVhZCIgKi8KKwkJcmV0dXJuIFBIX0VSUk9SX0VPRjsKKworCWlmIChoZWFkZXItPmhkcl9zaWduYXR1cmUgIT0gaHRvbmwoUEFDS19TSUdOQVRVUkUpKQorCQkvKiAicHJvdG9jb2wgZXJyb3IgKHBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIGRldGVjdGVkKSIgKi8KKwkJcmV0dXJuIFBIX0VSUk9SX1BBQ0tfU0lHTkFUVVJFOworCWlmICghcGFja192ZXJzaW9uX29rKGhlYWRlci0+aGRyX3ZlcnNpb24pKQorCQkvKiAicHJvdG9jb2wgZXJyb3IgKHBhY2sgdmVyc2lvbiB1bnN1cHBvcnRlZCkiICovCisJCXJldHVybiBQSF9FUlJPUl9QUk9UT0NPTDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhc3NlcnRfb2lkX3R5cGUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIGV4cGVjdCkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksIG9pZCwgTlVMTCk7CisJaWYgKHR5cGUgPCAwKQorCQlkaWUoXygiJXMgaXMgbm90IGEgdmFsaWQgb2JqZWN0IiksIG9pZF90b19oZXgob2lkKSk7CisJaWYgKHR5cGUgIT0gZXhwZWN0KQorCQlkaWUoXygiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiKSwgb2lkX3RvX2hleChvaWQpLAorCQkgICAgdHlwZV9uYW1lKGV4cGVjdCkpOworfQorCitpbnQgZm9yX2VhY2hfZmlsZV9pbl9vYmpfc3ViZGlyKHVuc2lnbmVkIGludCBzdWJkaXJfbnIsCisJCQkJc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCQllYWNoX2xvb3NlX29iamVjdF9mbiBvYmpfY2IsCisJCQkJZWFjaF9sb29zZV9jcnVmdF9mbiBjcnVmdF9jYiwKKwkJCQllYWNoX2xvb3NlX3N1YmRpcl9mbiBzdWJkaXJfY2IsCisJCQkJdm9pZCAqZGF0YSkKK3sKKwlzaXplX3Qgb3JpZ2xlbiwgYmFzZWxlbjsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlpbnQgciA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwlpZiAoc3ViZGlyX25yID4gMHhmZikKKwkJQlVHKCJpbnZhbGlkIGxvb3NlIG9iamVjdCBzdWJkaXJlY3Rvcnk6ICV4Iiwgc3ViZGlyX25yKTsKKworCW9yaWdsZW4gPSBwYXRoLT5sZW47CisJc3RyYnVmX2NvbXBsZXRlKHBhdGgsICcvJyk7CisJc3RyYnVmX2FkZGYocGF0aCwgIiUwMngiLCBzdWJkaXJfbnIpOworCisJZGlyID0gb3BlbmRpcihwYXRoLT5idWYpOworCWlmICghZGlyKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyID0gZXJyb3JfZXJybm8oXygidW5hYmxlIHRvIG9wZW4gJXMiKSwgcGF0aC0+YnVmKTsKKwkJc3RyYnVmX3NldGxlbihwYXRoLCBvcmlnbGVuKTsKKwkJcmV0dXJuIHI7CisJfQorCisJb2lkLmhhc2hbMF0gPSBzdWJkaXJfbnI7CisJc3RyYnVmX2FkZGNoKHBhdGgsICcvJyk7CisJYmFzZWxlbiA9IHBhdGgtPmxlbjsKKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpKSB7CisJCXNpemVfdCBuYW1lbGVuOworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCW5hbWVsZW4gPSBzdHJsZW4oZGUtPmRfbmFtZSk7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJCXN0cmJ1Zl9hZGQocGF0aCwgZGUtPmRfbmFtZSwgbmFtZWxlbik7CisJCWlmIChuYW1lbGVuID09IHRoZV9oYXNoX2FsZ28tPmhleHN6IC0gMiAmJgorCQkgICAgIWhleF90b19ieXRlcyhvaWQuaGFzaCArIDEsIGRlLT5kX25hbWUsCisJCQkJICB0aGVfaGFzaF9hbGdvLT5yYXdzeiAtIDEpKSB7CisJCQlpZiAob2JqX2NiKSB7CisJCQkJciA9IG9ial9jYigmb2lkLCBwYXRoLT5idWYsIGRhdGEpOworCQkJCWlmIChyKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNydWZ0X2NiKSB7CisJCQlyID0gY3J1ZnRfY2IoZGUtPmRfbmFtZSwgcGF0aC0+YnVmLCBkYXRhKTsKKwkJCWlmIChyKQorCQkJCWJyZWFrOworCQl9CisJfQorCWNsb3NlZGlyKGRpcik7CisKKwlzdHJidWZfc2V0bGVuKHBhdGgsIGJhc2VsZW4gLSAxKTsKKwlpZiAoIXIgJiYgc3ViZGlyX2NiKQorCQlyID0gc3ViZGlyX2NiKHN1YmRpcl9uciwgcGF0aC0+YnVmLCBkYXRhKTsKKworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgb3JpZ2xlbik7CisKKwlyZXR1cm4gcjsKK30KKworaW50IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyX2J1ZihzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJICAgIGVhY2hfbG9vc2Vfb2JqZWN0X2ZuIG9ial9jYiwKKwkJCSAgICBlYWNoX2xvb3NlX2NydWZ0X2ZuIGNydWZ0X2NiLAorCQkJICAgIGVhY2hfbG9vc2Vfc3ViZGlyX2ZuIHN1YmRpcl9jYiwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCWludCByID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlyID0gZm9yX2VhY2hfZmlsZV9pbl9vYmpfc3ViZGlyKGksIHBhdGgsIG9ial9jYiwgY3J1ZnRfY2IsCisJCQkJCQlzdWJkaXJfY2IsIGRhdGEpOworCQlpZiAocikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByOworfQorCitpbnQgZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgIGVhY2hfbG9vc2Vfb2JqZWN0X2ZuIG9ial9jYiwKKwkJCQkgIGVhY2hfbG9vc2VfY3J1ZnRfZm4gY3J1ZnRfY2IsCisJCQkJICBlYWNoX2xvb3NlX3N1YmRpcl9mbiBzdWJkaXJfY2IsCisJCQkJICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHI7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIHBhdGgpOworCXIgPSBmb3JfZWFjaF9sb29zZV9maWxlX2luX29iamRpcl9idWYoJmJ1Ziwgb2JqX2NiLCBjcnVmdF9jYiwKKwkJCQkJICAgICAgc3ViZGlyX2NiLCBkYXRhKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiByOworfQorCitpbnQgZm9yX2VhY2hfbG9vc2Vfb2JqZWN0KGVhY2hfbG9vc2Vfb2JqZWN0X2ZuIGNiLCB2b2lkICpkYXRhLAorCQkJICBlbnVtIGZvcl9lYWNoX29iamVjdF9mbGFncyBmbGFncykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCisJcHJlcGFyZV9hbHRfb2RiKHRoZV9yZXBvc2l0b3J5KTsKKwlmb3IgKG9kYiA9IHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGI7IG9kYjsgb2RiID0gb2RiLT5uZXh0KSB7CisJCWludCByID0gZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIob2RiLT5wYXRoLCBjYiwgTlVMTCwKKwkJCQkJCSAgICAgIE5VTEwsIGRhdGEpOworCQlpZiAocikKKwkJCXJldHVybiByOworCisJCWlmIChmbGFncyAmIEZPUl9FQUNIX09CSkVDVF9MT0NBTF9PTkxZKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX2xvb3NlX29iamVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlvaWRfYXJyYXlfYXBwZW5kKGRhdGEsIG9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBvaWRfYXJyYXkgKm9kYl9sb29zZV9jYWNoZShzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWludCBzdWJkaXJfbnIgPSBvaWQtPmhhc2hbMF07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChzdWJkaXJfbnIgPCAwIHx8CisJICAgIHN1YmRpcl9uciA+PSBBUlJBWV9TSVpFKG9kYi0+bG9vc2Vfb2JqZWN0c19zdWJkaXJfc2VlbikpCisJCUJVRygic3ViZGlyX25yIG91dCBvZiByYW5nZSIpOworCisJaWYgKG9kYi0+bG9vc2Vfb2JqZWN0c19zdWJkaXJfc2VlbltzdWJkaXJfbnJdKQorCQlyZXR1cm4gJm9kYi0+bG9vc2Vfb2JqZWN0c19jYWNoZVtzdWJkaXJfbnJdOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCBvZGItPnBhdGgpOworCWZvcl9lYWNoX2ZpbGVfaW5fb2JqX3N1YmRpcihzdWJkaXJfbnIsICZidWYsCisJCQkJICAgIGFwcGVuZF9sb29zZV9vYmplY3QsCisJCQkJICAgIE5VTEwsIE5VTEwsCisJCQkJICAgICZvZGItPmxvb3NlX29iamVjdHNfY2FjaGVbc3ViZGlyX25yXSk7CisJb2RiLT5sb29zZV9vYmplY3RzX3N1YmRpcl9zZWVuW3N1YmRpcl9ucl0gPSAxOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAmb2RiLT5sb29zZV9vYmplY3RzX2NhY2hlW3N1YmRpcl9ucl07Cit9CisKK3ZvaWQgb2RiX2NsZWFyX2xvb3NlX2NhY2hlKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvZGItPmxvb3NlX29iamVjdHNfY2FjaGUpOyBpKyspCisJCW9pZF9hcnJheV9jbGVhcigmb2RiLT5sb29zZV9vYmplY3RzX2NhY2hlW2ldKTsKKwltZW1zZXQoJm9kYi0+bG9vc2Vfb2JqZWN0c19zdWJkaXJfc2VlbiwgMCwKKwkgICAgICAgc2l6ZW9mKG9kYi0+bG9vc2Vfb2JqZWN0c19zdWJkaXJfc2VlbikpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N0cmVhbV9vaWQoZ2l0X3pzdHJlYW0gKnN0cmVhbSwKKwkJCSAgICBjb25zdCBjaGFyICpoZHIsCisJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZXhwZWN0ZWRfb2lkKQoreworCWdpdF9oYXNoX2N0eCBjOworCXN0cnVjdCBvYmplY3RfaWQgcmVhbF9vaWQ7CisJdW5zaWduZWQgY2hhciBidWZbNDA5Nl07CisJdW5zaWduZWQgbG9uZyB0b3RhbF9yZWFkOworCWludCBzdGF0dXMgPSBaX09LOworCisJdGhlX2hhc2hfYWxnby0+aW5pdF9mbigmYyk7CisJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBoZHIsIHN0cmVhbS0+dG90YWxfb3V0KTsKKworCS8qCisJICogV2UgYWxyZWFkeSByZWFkIHNvbWUgYnl0ZXMgaW50byBoZHIsIGJ1dCB0aGUgb25lcyB1cCB0byB0aGUgTlVMCisJICogZG8gbm90IGNvdW50IGFnYWluc3QgdGhlIG9iamVjdCdzIGNvbnRlbnQgc2l6ZS4KKwkgKi8KKwl0b3RhbF9yZWFkID0gc3RyZWFtLT50b3RhbF9vdXQgLSBzdHJsZW4oaGRyKSAtIDE7CisKKwkvKgorCSAqIFRoaXMgc2l6ZSBjb21wYXJpc29uIG11c3QgYmUgIjw9IiB0byByZWFkIHRoZSBmaW5hbCB6bGliIHBhY2tldHM7CisJICogc2VlIHRoZSBjb21tZW50IGluIHVucGFja19sb29zZV9yZXN0IGZvciBkZXRhaWxzLgorCSAqLworCXdoaWxlICh0b3RhbF9yZWFkIDw9IHNpemUgJiYKKwkgICAgICAgKHN0YXR1cyA9PSBaX09LIHx8CisJCShzdGF0dXMgPT0gWl9CVUZfRVJST1IgJiYgIXN0cmVhbS0+YXZhaWxfb3V0KSkpIHsKKwkJc3RyZWFtLT5uZXh0X291dCA9IGJ1ZjsKKwkJc3RyZWFtLT5hdmFpbF9vdXQgPSBzaXplb2YoYnVmKTsKKwkJaWYgKHNpemUgLSB0b3RhbF9yZWFkIDwgc3RyZWFtLT5hdmFpbF9vdXQpCisJCQlzdHJlYW0tPmF2YWlsX291dCA9IHNpemUgLSB0b3RhbF9yZWFkOworCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwkJdGhlX2hhc2hfYWxnby0+dXBkYXRlX2ZuKCZjLCBidWYsIHN0cmVhbS0+bmV4dF9vdXQgLSBidWYpOworCQl0b3RhbF9yZWFkICs9IHN0cmVhbS0+bmV4dF9vdXQgLSBidWY7CisJfQorCWdpdF9pbmZsYXRlX2VuZChzdHJlYW0pOworCisJaWYgKHN0YXR1cyAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJZXJyb3IoXygiY29ycnVwdCBsb29zZSBvYmplY3QgJyVzJyIpLCBvaWRfdG9faGV4KGV4cGVjdGVkX29pZCkpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzdHJlYW0tPmF2YWlsX2luKSB7CisJCWVycm9yKF8oImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIiksCisJCSAgICAgIG9pZF90b19oZXgoZXhwZWN0ZWRfb2lkKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl0aGVfaGFzaF9hbGdvLT5maW5hbF9mbihyZWFsX29pZC5oYXNoLCAmYyk7CisJaWYgKCFvaWRlcShleHBlY3RlZF9vaWQsICZyZWFsX29pZCkpIHsKKwkJZXJyb3IoXygiaGFzaCBtaXNtYXRjaCBmb3IgJXMgKGV4cGVjdGVkICVzKSIpLCBwYXRoLAorCQkgICAgICBvaWRfdG9faGV4KGV4cGVjdGVkX29pZCkpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCByZWFkX2xvb3NlX29iamVjdChjb25zdCBjaGFyICpwYXRoLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpleHBlY3RlZF9vaWQsCisJCSAgICAgIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCSAgICAgIHZvaWQgKipjb250ZW50cykKK3sKKwlpbnQgcmV0ID0gLTE7CisJdm9pZCAqbWFwID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG1hcHNpemU7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWNoYXIgaGRyW01BWF9IRUFERVJfTEVOXTsKKworCSpjb250ZW50cyA9IE5VTEw7CisKKwltYXAgPSBtYXBfbG9vc2Vfb2JqZWN0XzEodGhlX3JlcG9zaXRvcnksIHBhdGgsIE5VTEwsICZtYXBzaXplKTsKKwlpZiAoIW1hcCkgeworCQllcnJvcl9lcnJubyhfKCJ1bmFibGUgdG8gbW1hcCAlcyIpLCBwYXRoKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHVucGFja19sb29zZV9oZWFkZXIoJnN0cmVhbSwgbWFwLCBtYXBzaXplLCBoZHIsIHNpemVvZihoZHIpKSA8IDApIHsKKwkJZXJyb3IoXygidW5hYmxlIHRvIHVucGFjayBoZWFkZXIgb2YgJXMiKSwgcGF0aCk7CisJCWdvdG8gb3V0OworCX0KKworCSp0eXBlID0gcGFyc2VfbG9vc2VfaGVhZGVyKGhkciwgc2l6ZSk7CisJaWYgKCp0eXBlIDwgMCkgeworCQllcnJvcihfKCJ1bmFibGUgdG8gcGFyc2UgaGVhZGVyIG9mICVzIiksIHBhdGgpOworCQlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgqdHlwZSA9PSBPQkpfQkxPQiAmJiAqc2l6ZSA+IGJpZ19maWxlX3RocmVzaG9sZCkgeworCQlpZiAoY2hlY2tfc3RyZWFtX29pZCgmc3RyZWFtLCBoZHIsICpzaXplLCBwYXRoLCBleHBlY3RlZF9vaWQpIDwgMCkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCSpjb250ZW50cyA9IHVucGFja19sb29zZV9yZXN0KCZzdHJlYW0sIGhkciwgKnNpemUsIGV4cGVjdGVkX29pZCk7CisJCWlmICghKmNvbnRlbnRzKSB7CisJCQllcnJvcihfKCJ1bmFibGUgdG8gdW5wYWNrIGNvbnRlbnRzIG9mICVzIiksIHBhdGgpOworCQkJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGNoZWNrX29iamVjdF9zaWduYXR1cmUodGhlX3JlcG9zaXRvcnksIGV4cGVjdGVkX29pZCwKKwkJCQkJICAgKmNvbnRlbnRzLCAqc2l6ZSwKKwkJCQkJICAgdHlwZV9uYW1lKCp0eXBlKSkpIHsKKwkJCWVycm9yKF8oImhhc2ggbWlzbWF0Y2ggZm9yICVzIChleHBlY3RlZCAlcykiKSwgcGF0aCwKKwkJCSAgICAgIG9pZF90b19oZXgoZXhwZWN0ZWRfb2lkKSk7CisJCQlmcmVlKCpjb250ZW50cyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldCA9IDA7IC8qIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCAqLworCitvdXQ6CisJaWYgKG1hcCkKKwkJbXVubWFwKG1hcCwgbWFwc2l6ZSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3NoYTEtbG9va3VwLmMgYi9zaGExLWxvb2t1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MTg1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExLWxvb2t1cC5jCkBAIC0wLDAgKzEsMTI5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorCitzdGF0aWMgdWludDMyX3QgdGFrZTIoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gKChzaGExWzBdIDw8IDgpIHwgc2hhMVsxXSk7Cit9CisKKy8qCisgKiBDb252ZW50aW9uYWwgYmluYXJ5IHNlYXJjaCBsb29wIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiAgICAgIGRvIHsKKyAqICAgICAgICAgICAgICBpbnQgbWkgPSBsbyArIChoaSAtIGxvKSAvIDI7CisgKiAgICAgICAgICAgICAgaW50IGNtcCA9ICJlbnRyeSBwb2ludGVkIGF0IGJ5IG1pIiBtaW51cyAidGFyZ2V0IjsKKyAqICAgICAgICAgICAgICBpZiAoIWNtcCkKKyAqICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobWkgaXMgdGhlIHdhbnRlZCBvbmUpCisgKiAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgKiAgICAgICAgICAgICAgICAgICAgICBoaSA9IG1pOyAibWkgaXMgbGFyZ2VyIHRoYW4gdGFyZ2V0IgorICogICAgICAgICAgICAgIGVsc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGxvID0gbWkrMTsgIm1pIGlzIHNtYWxsZXIgdGhhbiB0YXJnZXQiCisgKiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpOworICoKKyAqIFRoZSBpbnZhcmlhbnRzIGFyZToKKyAqCisgKiAtIFdoZW4gZW50ZXJpbmcgdGhlIGxvb3AsIGxvIHBvaW50cyBhdCBhIHNsb3QgdGhhdCBpcyBuZXZlcgorICogICBhYm92ZSB0aGUgdGFyZ2V0IChpdCBjb3VsZCBiZSBhdCB0aGUgdGFyZ2V0KSwgaGkgcG9pbnRzIGF0IGEKKyAqICAgc2xvdCB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJvdmUgdGhlIHRhcmdldCAoaXQgY2FuIG5ldmVyCisgKiAgIGJlIGF0IHRoZSB0YXJnZXQpLgorICoKKyAqIC0gV2UgZmluZCBhIHBvaW50ICdtaScgYmV0d2VlbiBsbyBhbmQgaGkgKG1pIGNvdWxkIGJlIHRoZSBzYW1lCisgKiAgIGFzIGxvLCBidXQgbmV2ZXIgY2FuIGJlIHRoZSBzYW1lIGFzIGhpKSwgYW5kIGNoZWNrIGlmIGl0IGhpdHMKKyAqICAgdGhlIHRhcmdldC4gIFRoZXJlIGFyZSB0aHJlZSBjYXNlczoKKyAqCisgKiAgICAtIGlmIGl0IGlzIGEgaGl0LCB3ZSBhcmUgaGFwcHkuCisgKgorICogICAgLSBpZiBpdCBpcyBzdHJpY3RseSBoaWdoZXIgdGhhbiB0aGUgdGFyZ2V0LCB3ZSB1cGRhdGUgaGkgd2l0aAorICogICAgICBpdC4KKyAqCisgKiAgICAtIGlmIGl0IGlzIHN0cmljdGx5IGxvd2VyIHRoYW4gdGhlIHRhcmdldCwgd2UgdXBkYXRlIGxvIHRvIGJlCisgKiAgICAgIG9uZSBzbG90IGFmdGVyIGl0LCBiZWNhdXNlIHdlIGFsbG93IGxvIHRvIGJlIGF0IHRoZSB0YXJnZXQuCisgKgorICogV2hlbiBjaG9vc2luZyAnbWknLCB3ZSBkbyBub3QgaGF2ZSB0byB0YWtlIHRoZSAibWlkZGxlIiBidXQKKyAqIGFueXdoZXJlIGluIGJldHdlZW4gbG8gYW5kIGhpLCBhcyBsb25nIGFzIGxvIDw9IG1pIDwgaGkgaXMKKyAqIHNhdGlzZmllZC4gIFdoZW4gd2Ugc29tZWhvdyBrbm93IHRoYXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlCisgKiB0YXJnZXQgYW5kIGxvIGlzIG11Y2ggc2hvcnRlciB0aGFuIHRoZSB0YXJnZXQgYW5kIGhpLCB3ZSBjb3VsZAorICogcGljayBtaSB0aGF0IGlzIG11Y2ggY2xvc2VyIHRvIGxvIHRoYW4gdGhlIG1pZHdheS4KKyAqLworLyoKKyAqIFRoZSB0YWJsZSBzaG91bGQgY29udGFpbiAibnIiIGVsZW1lbnRzLgorICogVGhlIHNoYTEgb2YgZWxlbWVudCBpIChiZXR3ZWVuIDAgYW5kIG5yIC0gMSkgc2hvdWxkIGJlIHJldHVybmVkCisgKiBieSAiZm4oaSwgdGFibGUpIi4KKyAqLworaW50IHNoYTFfcG9zKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHZvaWQgKnRhYmxlLCBzaXplX3QgbnIsCisJICAgICBzaGExX2FjY2Vzc19mbiBmbikKK3sKKwlzaXplX3QgaGkgPSBucjsKKwlzaXplX3QgbG8gPSAwOworCXNpemVfdCBtaSA9IDA7CisKKwlpZiAoIW5yKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobnIgIT0gMSkgeworCQlzaXplX3QgbG92LCBoaXYsIG1pdiwgb2ZzOworCisJCWZvciAob2ZzID0gMDsgb2ZzIDwgdGhlX2hhc2hfYWxnby0+cmF3c3ogLSAyOyBvZnMgKz0gMikgeworCQkJbG92ID0gdGFrZTIoZm4oMCwgdGFibGUpICsgb2ZzKTsKKwkJCWhpdiA9IHRha2UyKGZuKG5yIC0gMSwgdGFibGUpICsgb2ZzKTsKKwkJCW1pdiA9IHRha2UyKGhhc2ggKyBvZnMpOworCQkJaWYgKG1pdiA8IGxvdikKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoaGl2IDwgbWl2KQorCQkJCXJldHVybiBpbmRleF9wb3NfdG9faW5zZXJ0X3Bvcyhucik7CisJCQlpZiAobG92ICE9IGhpdikgeworCQkJCS8qCisJCQkJICogQXQgdGhpcyBwb2ludCBtaXYgY291bGQgYmUgZXF1YWwKKwkJCQkgKiB0byBoaXYgKGJ1dCBzaGExIGNvdWxkIHN0aWxsIGJlIGhpZ2hlcik7CisJCQkJICogdGhlIGludmFyaWFudCBvZiAobWkgPCBoaSkgc2hvdWxkIGJlCisJCQkJICoga2VwdC4KKwkJCQkgKi8KKwkJCQltaSA9IChuciAtIDEpICogKG1pdiAtIGxvdikgLyAoaGl2IC0gbG92KTsKKwkJCQlpZiAobG8gPD0gbWkgJiYgbWkgPCBoaSkKKwkJCQkJYnJlYWs7CisJCQkJQlVHKCJhc3NlcnRpb24gZmFpbGVkIGluIGJpbmFyeSBzZWFyY2giKTsKKwkJCX0KKwkJfQorCX0KKworCWRvIHsKKwkJaW50IGNtcDsKKwkJY21wID0gaGFzaGNtcChmbihtaSwgdGFibGUpLCBoYXNoKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbWk7CisJCWlmIChjbXAgPiAwKQorCQkJaGkgPSBtaTsKKwkJZWxzZQorCQkJbG8gPSBtaSArIDE7CisJCW1pID0gbG8gKyAoaGkgLSBsbykgLyAyOworCX0gd2hpbGUgKGxvIDwgaGkpOworCXJldHVybiBpbmRleF9wb3NfdG9faW5zZXJ0X3Bvcyhsbyk7Cit9CisKK2ludCBic2VhcmNoX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgdWludDMyX3QgKmZhbm91dF9uYm8sCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWJsZSwgc2l6ZV90IHN0cmlkZSwgdWludDMyX3QgKnJlc3VsdCkKK3sKKwl1aW50MzJfdCBoaSwgbG87CisKKwloaSA9IG50b2hsKGZhbm91dF9uYm9bKnNoYTFdKTsKKwlsbyA9ICgoKnNoYTEgPT0gMHgwKSA/IDAgOiBudG9obChmYW5vdXRfbmJvWypzaGExIC0gMV0pKTsKKworCXdoaWxlIChsbyA8IGhpKSB7CisJCXVuc2lnbmVkIG1pID0gbG8gKyAoaGkgLSBsbykgLyAyOworCQlpbnQgY21wID0gaGFzaGNtcCh0YWJsZSArIG1pICogc3RyaWRlLCBzaGExKTsKKworCQlpZiAoIWNtcCkgeworCQkJaWYgKHJlc3VsdCkKKwkJCQkqcmVzdWx0ID0gbWk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoY21wID4gMCkKKwkJCWhpID0gbWk7CisJCWVsc2UKKwkJCWxvID0gbWkgKyAxOworCX0KKworCWlmIChyZXN1bHQpCisJCSpyZXN1bHQgPSBsbzsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NoYTEtbG9va3VwLmggYi9zaGExLWxvb2t1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZmNkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExLWxvb2t1cC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgU0hBMV9MT09LVVBfSAorI2RlZmluZSBTSEExX0xPT0tVUF9ICisKK3R5cGVkZWYgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMV9hY2Nlc3NfZm4oc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSk7CisKK2ludCBzaGExX3Bvcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCSAgICAgdm9pZCAqdGFibGUsCisJICAgICBzaXplX3QgbnIsCisJICAgICBzaGExX2FjY2Vzc19mbiBmbik7CisKKy8qCisgKiBTZWFyY2hlcyBmb3Igc2hhMSBpbiB0YWJsZSwgdXNpbmcgdGhlIGdpdmVuIGZhbm91dCB0YWJsZSB0byBkZXRlcm1pbmUgdGhlCisgKiBpbnRlcnZhbCB0byBzZWFyY2gsIHRoZW4gdXNpbmcgYmluYXJ5IHNlYXJjaC4gUmV0dXJucyAxIGlmIGZvdW5kLCAwIGlmIG5vdC4KKyAqCisgKiBUYWtlcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisgKgorICogIC0gc2hhMTogdGhlIGhhc2ggdG8gc2VhcmNoIGZvcgorICogIC0gZmFub3V0X25ibzogYSAyNTYtZWxlbWVudCBhcnJheSBvZiBORVRXT1JLLW9yZGVyIDMyLWJpdCBpbnRlZ2VyczsgdGhlCisgKiAgICBpbnRlZ2VyIGF0IHBvc2l0aW9uIGkgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRhYmxlIHdob3NlCisgKiAgICBmaXJzdCBieXRlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBpCisgKiAgLSB0YWJsZTogYSBzb3J0ZWQgbGlzdCBvZiBoYXNoZXMgd2l0aCBvcHRpb25hbCBleHRyYSBpbmZvcm1hdGlvbiBpbiBiZXR3ZWVuCisgKiAgLSBzdHJpZGU6IGRpc3RhbmNlIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGVsZW1lbnRzIGluIHRhYmxlIChzaG91bGQgYmUKKyAqICAgIEdJVF9NQVhfUkFXU1ogb3IgZ3JlYXRlcikKKyAqICAtIHJlc3VsdDogaWYgbm90IE5VTEwsIHRoaXMgZnVuY3Rpb24gc3RvcmVzIHRoZSBlbGVtZW50IGluZGV4IG9mIHRoZQorICogICAgcG9zaXRpb24gZm91bmQgKGlmIHRoZSBzZWFyY2ggaXMgc3VjY2Vzc2Z1bCkgb3IgdGhlIGluZGV4IG9mIHRoZSBsZWFzdAorICogICAgZWxlbWVudCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBzaGExIChpZiB0aGUgc2VhcmNoIGlzIG5vdCBzdWNjZXNzZnVsKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgZmFub3V0IHRhYmxlLgorICovCitpbnQgYnNlYXJjaF9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IHVpbnQzMl90ICpmYW5vdXRfbmJvLAorCQkgY29uc3QgdW5zaWduZWQgY2hhciAqdGFibGUsIHNpemVfdCBzdHJpZGUsIHVpbnQzMl90ICpyZXN1bHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9zaGExLW5hbWUuYyBiL3NoYTEtbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYjAwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExLW5hbWUuYwpAQCAtMCwwICsxLDE5NDEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJwYWNrZmlsZS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJtaWR4LmgiCisjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisKK3N0YXRpYyBpbnQgZ2V0X29pZF9vbmVsaW5lKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICosIHN0cnVjdCBvYmplY3RfaWQgKiwgc3RydWN0IGNvbW1pdF9saXN0ICopOworCit0eXBlZGVmIGludCAoKmRpc2FtYmlndWF0ZV9oaW50X2ZuKShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIHZvaWQgKik7CisKK3N0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgeworCWludCBsZW47IC8qIGxlbmd0aCBvZiBwcmVmaXggaW4gaGV4IGNoYXJzICovCisJY2hhciBoZXhfcGZ4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGJpbl9wZng7CisKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlkaXNhbWJpZ3VhdGVfaGludF9mbiBmbjsKKwl2b2lkICpjYl9kYXRhOworCXN0cnVjdCBvYmplY3RfaWQgY2FuZGlkYXRlOworCXVuc2lnbmVkIGNhbmRpZGF0ZV9leGlzdHM6MTsKKwl1bnNpZ25lZCBjYW5kaWRhdGVfY2hlY2tlZDoxOworCXVuc2lnbmVkIGNhbmRpZGF0ZV9vazoxOworCXVuc2lnbmVkIGRpc2FtYmlndWF0ZV9mbl91c2VkOjE7CisJdW5zaWduZWQgYW1iaWd1b3VzOjE7CisJdW5zaWduZWQgYWx3YXlzX2NhbGxfZm46MTsKK307CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jYW5kaWRhdGVzKHN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgKmRzLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJyZW50KQoreworCWlmIChkcy0+YWx3YXlzX2NhbGxfZm4pIHsKKwkJZHMtPmFtYmlndW91cyA9IGRzLT5mbihkcy0+cmVwbywgY3VycmVudCwgZHMtPmNiX2RhdGEpID8gMSA6IDA7CisJCXJldHVybjsKKwl9CisJaWYgKCFkcy0+Y2FuZGlkYXRlX2V4aXN0cykgeworCQkvKiB0aGlzIGlzIHRoZSBmaXJzdCBjYW5kaWRhdGUgKi8KKwkJb2lkY3B5KCZkcy0+Y2FuZGlkYXRlLCBjdXJyZW50KTsKKwkJZHMtPmNhbmRpZGF0ZV9leGlzdHMgPSAxOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChvaWRlcSgmZHMtPmNhbmRpZGF0ZSwgY3VycmVudCkpIHsKKwkJLyogdGhlIHNhbWUgYXMgd2hhdCB3ZSBhbHJlYWR5IGhhdmUgc2VlbiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKCFkcy0+Zm4pIHsKKwkJLyogY2Fubm90IGRpc2FtYmlndWF0ZSBiZXR3ZWVuIGRzLT5jYW5kaWRhdGUgYW5kIGN1cnJlbnQgKi8KKwkJZHMtPmFtYmlndW91cyA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWRzLT5jYW5kaWRhdGVfY2hlY2tlZCkgeworCQlkcy0+Y2FuZGlkYXRlX29rID0gZHMtPmZuKGRzLT5yZXBvLCAmZHMtPmNhbmRpZGF0ZSwgZHMtPmNiX2RhdGEpOworCQlkcy0+ZGlzYW1iaWd1YXRlX2ZuX3VzZWQgPSAxOworCQlkcy0+Y2FuZGlkYXRlX2NoZWNrZWQgPSAxOworCX0KKworCWlmICghZHMtPmNhbmRpZGF0ZV9vaykgeworCQkvKiBkaXNjYXJkIHRoZSBjYW5kaWRhdGU7IHdlIGtub3cgaXQgZG9lcyBub3Qgc2F0aXNmeSBmbiAqLworCQlvaWRjcHkoJmRzLT5jYW5kaWRhdGUsIGN1cnJlbnQpOworCQlkcy0+Y2FuZGlkYXRlX2NoZWNrZWQgPSAwOworCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgcmVhY2ggdGhpcyBwb2ludCwgd2Uga25vdyBkcy0+Y2FuZGlkYXRlIHNhdGlzZmllcyBmbiAqLworCWlmIChkcy0+Zm4oZHMtPnJlcG8sIGN1cnJlbnQsIGRzLT5jYl9kYXRhKSkgeworCQkvKgorCQkgKiBpZiBib3RoIGN1cnJlbnQgYW5kIGNhbmRpZGF0ZSBzYXRpc2Z5IGZuLCB3ZSBjYW5ub3QKKwkJICogZGlzYW1iaWd1YXRlLgorCQkgKi8KKwkJZHMtPmNhbmRpZGF0ZV9vayA9IDA7CisJCWRzLT5hbWJpZ3VvdXMgPSAxOworCX0KKworCS8qIG90aGVyd2lzZSwgY3VycmVudCBjYW4gYmUgZGlzY2FyZGVkIGFuZCBjYW5kaWRhdGUgaXMgc3RpbGwgZ29vZCAqLworfQorCitzdGF0aWMgaW50IG1hdGNoX3NoYSh1bnNpZ25lZCwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICopOworCitzdGF0aWMgdm9pZCBmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZShzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlICpkcykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCisJZm9yIChvZGIgPSBkcy0+cmVwby0+b2JqZWN0cy0+b2RiOyBvZGIgJiYgIWRzLT5hbWJpZ3VvdXM7IG9kYiA9IG9kYi0+bmV4dCkgeworCQlpbnQgcG9zOworCQlzdHJ1Y3Qgb2lkX2FycmF5ICpsb29zZV9vYmplY3RzOworCisJCWxvb3NlX29iamVjdHMgPSBvZGJfbG9vc2VfY2FjaGUob2RiLCAmZHMtPmJpbl9wZngpOworCQlwb3MgPSBvaWRfYXJyYXlfbG9va3VwKGxvb3NlX29iamVjdHMsICZkcy0+YmluX3BmeCk7CisJCWlmIChwb3MgPCAwKQorCQkJcG9zID0gLTEgLSBwb3M7CisJCXdoaWxlICghZHMtPmFtYmlndW91cyAmJiBwb3MgPCBsb29zZV9vYmplY3RzLT5ucikgeworCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOworCQkJb2lkID0gbG9vc2Vfb2JqZWN0cy0+b2lkICsgcG9zOworCQkJaWYgKCFtYXRjaF9zaGEoZHMtPmxlbiwgZHMtPmJpbl9wZnguaGFzaCwgb2lkLT5oYXNoKSkKKwkJCQlicmVhazsKKwkJCXVwZGF0ZV9jYW5kaWRhdGVzKGRzLCBvaWQpOworCQkJcG9zKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfc2hhKHVuc2lnbmVkIGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqYikKK3sKKwlkbyB7CisJCWlmICgqYSAhPSAqYikKKwkJCXJldHVybiAwOworCQlhKys7CisJCWIrKzsKKwkJbGVuIC09IDI7CisJfSB3aGlsZSAobGVuID4gMSk7CisJaWYgKGxlbikKKwkJaWYgKCgqYSBeICpiKSAmIDB4ZjApCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdW5pcXVlX2luX21pZHgoc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0sCisJCQkgICBzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlICpkcykKK3sKKwl1aW50MzJfdCBudW0sIGksIGZpcnN0ID0gMDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjdXJyZW50ID0gTlVMTDsKKwludW0gPSBtLT5udW1fb2JqZWN0czsKKworCWlmICghbnVtKQorCQlyZXR1cm47CisKKwlic2VhcmNoX21pZHgoJmRzLT5iaW5fcGZ4LCBtLCAmZmlyc3QpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCAiZmlyc3QiIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbG93ZXN0IG9iamVjdAorCSAqIHdpdGggYW4gb2JqZWN0IG5hbWUgdGhhdCBjb3VsZCBtYXRjaCAiYmluX3BmeCIuICBTZWUgaWYgd2UgaGF2ZQorCSAqIDAsIDEgb3IgbW9yZSBvYmplY3RzIHRoYXQgYWN0dWFsbHkgbWF0Y2goZXMpLgorCSAqLworCWZvciAoaSA9IGZpcnN0OyBpIDwgbnVtICYmICFkcy0+YW1iaWd1b3VzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWN1cnJlbnQgPSBudGhfbWlkeGVkX29iamVjdF9vaWQoJm9pZCwgbSwgaSk7CisJCWlmICghbWF0Y2hfc2hhKGRzLT5sZW4sIGRzLT5iaW5fcGZ4Lmhhc2gsIGN1cnJlbnQtPmhhc2gpKQorCQkJYnJlYWs7CisJCXVwZGF0ZV9jYW5kaWRhdGVzKGRzLCBjdXJyZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVuaXF1ZV9pbl9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJICAgc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMpCit7CisJdWludDMyX3QgbnVtLCBpLCBmaXJzdCA9IDA7CisKKwlpZiAocC0+bXVsdGlfcGFja19pbmRleCkKKwkJcmV0dXJuOworCisJaWYgKG9wZW5fcGFja19pbmRleChwKSB8fCAhcC0+bnVtX29iamVjdHMpCisJCXJldHVybjsKKworCW51bSA9IHAtPm51bV9vYmplY3RzOworCWJzZWFyY2hfcGFjaygmZHMtPmJpbl9wZngsIHAsICZmaXJzdCk7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsICJmaXJzdCIgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb3dlc3Qgb2JqZWN0CisJICogd2l0aCBhbiBvYmplY3QgbmFtZSB0aGF0IGNvdWxkIG1hdGNoICJiaW5fcGZ4Ii4gIFNlZSBpZiB3ZSBoYXZlCisJICogMCwgMSBvciBtb3JlIG9iamVjdHMgdGhhdCBhY3R1YWxseSBtYXRjaChlcykuCisJICovCisJZm9yIChpID0gZmlyc3Q7IGkgPCBudW0gJiYgIWRzLT5hbWJpZ3VvdXM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJbnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgcCwgaSk7CisJCWlmICghbWF0Y2hfc2hhKGRzLT5sZW4sIGRzLT5iaW5fcGZ4Lmhhc2gsIG9pZC5oYXNoKSkKKwkJCWJyZWFrOworCQl1cGRhdGVfY2FuZGlkYXRlcyhkcywgJm9pZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX3Nob3J0X3BhY2tlZF9vYmplY3Qoc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMpCit7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm07CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwlmb3IgKG0gPSBnZXRfbXVsdGlfcGFja19pbmRleChkcy0+cmVwbyk7IG0gJiYgIWRzLT5hbWJpZ3VvdXM7CisJICAgICBtID0gbS0+bmV4dCkKKwkJdW5pcXVlX2luX21pZHgobSwgZHMpOworCWZvciAocCA9IGdldF9wYWNrZWRfZ2l0KGRzLT5yZXBvKTsgcCAmJiAhZHMtPmFtYmlndW91czsKKwkgICAgIHAgPSBwLT5uZXh0KQorCQl1bmlxdWVfaW5fcGFjayhwLCBkcyk7Cit9CisKK3N0YXRpYyBpbnQgZmluaXNoX29iamVjdF9kaXNhbWJpZ3VhdGlvbihzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlICpkcywKKwkJCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWlmIChkcy0+YW1iaWd1b3VzKQorCQlyZXR1cm4gU0hPUlRfTkFNRV9BTUJJR1VPVVM7CisKKwlpZiAoIWRzLT5jYW5kaWRhdGVfZXhpc3RzKQorCQlyZXR1cm4gTUlTU0lOR19PQkpFQ1Q7CisKKwlpZiAoIWRzLT5jYW5kaWRhdGVfY2hlY2tlZCkKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB0aGUgb25seSBjYW5kaWRhdGUsIHRoZXJlIGlzIG5vIHBvaW50CisJCSAqIGNhbGxpbmcgdGhlIGRpc2FtYmlndWF0aW9uIGhpbnQgY2FsbGJhY2suCisJCSAqCisJCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgY3VycmVudCBjYW5kaWRhdGUKKwkJICogcmVwbGFjZWQgYW4gZWFybGllciBjYW5kaWRhdGUgdGhhdCBkaWQgX25vdF8gcGFzcworCQkgKiB0aGUgZGlzYW1iaWd1YXRpb24gaGludCBjYWxsYmFjaywgdGhlbiB3ZSBkbyBoYXZlCisJCSAqIG1vcmUgdGhhbiBvbmUgb2JqZWN0cyB0aGF0IG1hdGNoIHRoZSBzaG9ydCBuYW1lCisJCSAqIGdpdmVuLCBzbyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoaXMgb25lIG1hdGNoZXM7CisJCSAqIG90aGVyd2lzZSwgaWYgd2UgZGlzY292ZXJlZCB0aGlzIG9uZSBhbmQgdGhlIG9uZQorCQkgKiB0aGF0IHdlIHByZXZpb3VzbHkgZGlzY2FyZGVkIGluIHRoZSByZXZlcnNlIG9yZGVyLAorCQkgKiB3ZSB3b3VsZCBlbmQgdXAgc2hvd2luZyBkaWZmZXJlbnQgcmVzdWx0cyBpbiB0aGUKKwkJICogc2FtZSByZXBvc2l0b3J5IQorCQkgKi8KKwkJZHMtPmNhbmRpZGF0ZV9vayA9ICghZHMtPmRpc2FtYmlndWF0ZV9mbl91c2VkIHx8CisJCQkJICAgIGRzLT5mbihkcy0+cmVwbywgJmRzLT5jYW5kaWRhdGUsIGRzLT5jYl9kYXRhKSk7CisKKwlpZiAoIWRzLT5jYW5kaWRhdGVfb2spCisJCXJldHVybiBTSE9SVF9OQU1FX0FNQklHVU9VUzsKKworCW9pZGNweShvaWQsICZkcy0+Y2FuZGlkYXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNhbWJpZ3VhdGVfY29tbWl0X29ubHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgdm9pZCAqY2JfZGF0YV91bnVzZWQpCit7CisJaW50IGtpbmQgPSBvaWRfb2JqZWN0X2luZm8ociwgb2lkLCBOVUxMKTsKKwlyZXR1cm4ga2luZCA9PSBPQkpfQ09NTUlUOworfQorCitzdGF0aWMgaW50IGRpc2FtYmlndWF0ZV9jb21taXR0aXNoX29ubHkoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkJdm9pZCAqY2JfZGF0YV91bnVzZWQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWludCBraW5kOworCisJa2luZCA9IG9pZF9vYmplY3RfaW5mbyhyLCBvaWQsIE5VTEwpOworCWlmIChraW5kID09IE9CSl9DT01NSVQpCisJCXJldHVybiAxOworCWlmIChraW5kICE9IE9CSl9UQUcpCisJCXJldHVybiAwOworCisJLyogV2UgbmVlZCB0byBkbyB0aGlzIHRoZSBoYXJkIHdheS4uLiAqLworCW9iaiA9IGRlcmVmX3RhZyhyLCBwYXJzZV9vYmplY3Qociwgb2lkKSwgTlVMTCwgMCk7CisJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX3RyZWVfb25seShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCWludCBraW5kID0gb2lkX29iamVjdF9pbmZvKHIsIG9pZCwgTlVMTCk7CisJcmV0dXJuIGtpbmQgPT0gT0JKX1RSRUU7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX3RyZWVpc2hfb25seShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgIHZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwlpbnQga2luZDsKKworCWtpbmQgPSBvaWRfb2JqZWN0X2luZm8ociwgb2lkLCBOVUxMKTsKKwlpZiAoa2luZCA9PSBPQkpfVFJFRSB8fCBraW5kID09IE9CSl9DT01NSVQpCisJCXJldHVybiAxOworCWlmIChraW5kICE9IE9CSl9UQUcpCisJCXJldHVybiAwOworCisJLyogV2UgbmVlZCB0byBkbyB0aGlzIHRoZSBoYXJkIHdheS4uLiAqLworCW9iaiA9IGRlcmVmX3RhZyhyLCBwYXJzZV9vYmplY3Qociwgb2lkKSwgTlVMTCwgMCk7CisJaWYgKG9iaiAmJiAob2JqLT50eXBlID09IE9CSl9UUkVFIHx8IG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX2Jsb2Jfb25seShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgIHZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCWludCBraW5kID0gb2lkX29iamVjdF9pbmZvKHIsIG9pZCwgTlVMTCk7CisJcmV0dXJuIGtpbmQgPT0gT0JKX0JMT0I7Cit9CisKK3N0YXRpYyBkaXNhbWJpZ3VhdGVfaGludF9mbiBkZWZhdWx0X2Rpc2FtYmlndWF0ZV9oaW50OworCitpbnQgc2V0X2Rpc2FtYmlndWF0ZV9oaW50X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQljb25zdCBjaGFyICpuYW1lOworCQlkaXNhbWJpZ3VhdGVfaGludF9mbiBmbjsKKwl9IGhpbnRzW10gPSB7CisJCXsgIm5vbmUiLCBOVUxMIH0sCisJCXsgImNvbW1pdCIsIGRpc2FtYmlndWF0ZV9jb21taXRfb25seSB9LAorCQl7ICJjb21taXR0aXNoIiwgZGlzYW1iaWd1YXRlX2NvbW1pdHRpc2hfb25seSB9LAorCQl7ICJ0cmVlIiwgZGlzYW1iaWd1YXRlX3RyZWVfb25seSB9LAorCQl7ICJ0cmVlaXNoIiwgZGlzYW1iaWd1YXRlX3RyZWVpc2hfb25seSB9LAorCQl7ICJibG9iIiwgZGlzYW1iaWd1YXRlX2Jsb2Jfb25seSB9CisJfTsKKwlpbnQgaTsKKworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGludHMpOyBpKyspIHsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCBoaW50c1tpXS5uYW1lKSkgeworCQkJZGVmYXVsdF9kaXNhbWJpZ3VhdGVfaGludCA9IGhpbnRzW2ldLmZuOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyb3IoInVua25vd24gaGludCB0eXBlIGZvciAnJXMnOiAlcyIsIHZhciwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IGluaXRfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkJICAgICAgc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMpCit7CisJaW50IGk7CisKKwlpZiAobGVuIDwgTUlOSU1VTV9BQkJSRVYgfHwgbGVuID4gdGhlX2hhc2hfYWxnby0+aGV4c3opCisJCXJldHVybiAtMTsKKworCW1lbXNldChkcywgMCwgc2l6ZW9mKCpkcykpOworCisJZm9yIChpID0gMDsgaSA8IGxlbiA7aSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IG5hbWVbaV07CisJCXVuc2lnbmVkIGNoYXIgdmFsOworCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisJCQl2YWwgPSBjIC0gJzAnOworCQllbHNlIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKKwkJCXZhbCA9IGMgLSAnYScgKyAxMDsKKwkJZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSdGJykgeworCQkJdmFsID0gYyAtICdBJyArIDEwOworCQkJYyAtPSAnQScgLSAnYSc7CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlkcy0+aGV4X3BmeFtpXSA9IGM7CisJCWlmICghKGkgJiAxKSkKKwkJCXZhbCA8PD0gNDsKKwkJZHMtPmJpbl9wZnguaGFzaFtpID4+IDFdIHw9IHZhbDsKKwl9CisKKwlkcy0+bGVuID0gbGVuOworCWRzLT5oZXhfcGZ4W2xlbl0gPSAnXDAnOworCWRzLT5yZXBvID0gcjsKKwlwcmVwYXJlX2FsdF9vZGIocik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19hbWJpZ3VvdXNfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlICpkcyA9IGRhdGE7CisJc3RydWN0IHN0cmJ1ZiBkZXNjID0gU1RSQlVGX0lOSVQ7CisJaW50IHR5cGU7CisKKwlpZiAoZHMtPmZuICYmICFkcy0+Zm4oZHMtPnJlcG8sIG9pZCwgZHMtPmNiX2RhdGEpKQorCQlyZXR1cm4gMDsKKworCXR5cGUgPSBvaWRfb2JqZWN0X2luZm8oZHMtPnJlcG8sIG9pZCwgTlVMTCk7CisJaWYgKHR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KGRzLT5yZXBvLCBvaWQpOworCQlpZiAoY29tbWl0KSB7CisJCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcHAgPSB7MH07CisJCQlwcC5kYXRlX21vZGUudHlwZSA9IERBVEVfU0hPUlQ7CisJCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiICVhZCAtICVzIiwgJmRlc2MsICZwcCk7CisJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX1RBRykgeworCQlzdHJ1Y3QgdGFnICp0YWcgPSBsb29rdXBfdGFnKGRzLT5yZXBvLCBvaWQpOworCQlpZiAoIXBhcnNlX3RhZyh0YWcpICYmIHRhZy0+dGFnKQorCQkJc3RyYnVmX2FkZGYoJmRlc2MsICIgJXMiLCB0YWctPnRhZyk7CisJfQorCisJYWR2aXNlKCIgICVzICVzJXMiLAorCSAgICAgICByZXBvX2ZpbmRfdW5pcXVlX2FiYnJldihkcy0+cmVwbywgb2lkLCBERUZBVUxUX0FCQlJFViksCisJICAgICAgIHR5cGVfbmFtZSh0eXBlKSA/IHR5cGVfbmFtZSh0eXBlKSA6ICJ1bmtub3duIHR5cGUiLAorCSAgICAgICBkZXNjLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmZGVzYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29sbGVjdF9hbWJpZ3VvdXMoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpkYXRhKQoreworCW9pZF9hcnJheV9hcHBlbmQoZGF0YSwgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXBvX2NvbGxlY3RfYW1iaWd1b3VzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gY29sbGVjdF9hbWJpZ3VvdXMob2lkLCBkYXRhKTsKK30KKworc3RhdGljIGludCBzb3J0X2FtYmlndW91cyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICpjdHgpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnNvcnRfYW1iaWd1b3VzX3JlcG8gPSBjdHg7CisJaW50IGFfdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhzb3J0X2FtYmlndW91c19yZXBvLCBhLCBOVUxMKTsKKwlpbnQgYl90eXBlID0gb2lkX29iamVjdF9pbmZvKHNvcnRfYW1iaWd1b3VzX3JlcG8sIGIsIE5VTEwpOworCWludCBhX3R5cGVfc29ydDsKKwlpbnQgYl90eXBlX3NvcnQ7CisKKwkvKgorCSAqIFNvcnRzIGJ5IGhhc2ggd2l0aGluIHRoZSBzYW1lIG9iamVjdCB0eXBlLCBqdXN0IGFzCisJICogb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgpIHdvdWxkIGRvLgorCSAqLworCWlmIChhX3R5cGUgPT0gYl90eXBlKQorCQlyZXR1cm4gb2lkY21wKGEsIGIpOworCisJLyoKKwkgKiBCZXR3ZWVuIG9iamVjdCB0eXBlcyBzaG93IHRhZ3MsIHRoZW4gY29tbWl0cywgYW5kIGZpbmFsbHkKKwkgKiB0cmVlcyBhbmQgYmxvYnMuCisJICoKKwkgKiBUaGUgb2JqZWN0X3R5cGUgZW51bSBpcyBjb21taXQsIHRyZWUsIGJsb2IsIHRhZywgYnV0IHdlCisJICogd2FudCB0YWcsIGNvbW1pdCwgdHJlZSBibG9iLiBDbGV2ZXJseSAocGVyaGFwcyB0b28KKwkgKiBjbGV2ZXJseSkgZG8gdGhhdCB3aXRoIG1vZHVsdXMsIHNpbmNlIHRoZSBlbnVtIGFzc2lnbnMgMSB0bworCSAqIGNvbW1pdCwgc28gdGFnIGJlY29tZXMgMC4KKwkgKi8KKwlhX3R5cGVfc29ydCA9IGFfdHlwZSAlIDQ7CisJYl90eXBlX3NvcnQgPSBiX3R5cGUgJSA0OworCXJldHVybiBhX3R5cGVfc29ydCA+IGJfdHlwZV9zb3J0ID8gMSA6IC0xOworfQorCitzdGF0aWMgdm9pZCBzb3J0X2FtYmlndW91c19vaWRfYXJyYXkoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBvaWRfYXJyYXkgKmEpCit7CisJUVNPUlRfUyhhLT5vaWQsIGEtPm5yLCBzb3J0X2FtYmlndW91cywgcik7Cit9CisKK3N0YXRpYyBlbnVtIGdldF9vaWRfcmVzdWx0IGdldF9zaG9ydF9vaWQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJCQkgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlIGRzOworCWludCBxdWlldGx5ID0gISEoZmxhZ3MgJiBHRVRfT0lEX1FVSUVUTFkpOworCisJaWYgKGluaXRfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKHIsIG5hbWUsIGxlbiwgJmRzKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChIQVNfTVVMVElfQklUUyhmbGFncyAmIEdFVF9PSURfRElTQU1CSUdVQVRPUlMpKQorCQlCVUcoIm11bHRpcGxlIGdldF9zaG9ydF9vaWQgZGlzYW1iaWd1YXRvciBmbGFncyIpOworCisJaWYgKGZsYWdzICYgR0VUX09JRF9DT01NSVQpCisJCWRzLmZuID0gZGlzYW1iaWd1YXRlX2NvbW1pdF9vbmx5OworCWVsc2UgaWYgKGZsYWdzICYgR0VUX09JRF9DT01NSVRUSVNIKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV9jb21taXR0aXNoX29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfT0lEX1RSRUUpCisJCWRzLmZuID0gZGlzYW1iaWd1YXRlX3RyZWVfb25seTsKKwllbHNlIGlmIChmbGFncyAmIEdFVF9PSURfVFJFRUlTSCkKKwkJZHMuZm4gPSBkaXNhbWJpZ3VhdGVfdHJlZWlzaF9vbmx5OworCWVsc2UgaWYgKGZsYWdzICYgR0VUX09JRF9CTE9CKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV9ibG9iX29ubHk7CisJZWxzZQorCQlkcy5mbiA9IGRlZmF1bHRfZGlzYW1iaWd1YXRlX2hpbnQ7CisKKwlmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZSgmZHMpOworCWZpbmRfc2hvcnRfcGFja2VkX29iamVjdCgmZHMpOworCXN0YXR1cyA9IGZpbmlzaF9vYmplY3RfZGlzYW1iaWd1YXRpb24oJmRzLCBvaWQpOworCisJLyoKKwkgKiBJZiB3ZSBkaWRuJ3QgZmluZCBpdCwgZG8gdGhlIHVzdWFsIHJlcHJlcGFyZSgpIHNsb3ctcGF0aCwKKwkgKiBzaW5jZSB0aGUgb2JqZWN0IG1heSBoYXZlIHJlY2VudGx5IGJlZW4gYWRkZWQgdG8gdGhlIHJlcG9zaXRvcnkKKwkgKiBvciBtaWdyYXRlZCBmcm9tIGxvb3NlIHRvIHBhY2tlZC4KKwkgKi8KKwlpZiAoc3RhdHVzID09IE1JU1NJTkdfT0JKRUNUKSB7CisJCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KHIpOworCQlmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZSgmZHMpOworCQlmaW5kX3Nob3J0X3BhY2tlZF9vYmplY3QoJmRzKTsKKwkJc3RhdHVzID0gZmluaXNoX29iamVjdF9kaXNhbWJpZ3VhdGlvbigmZHMsIG9pZCk7CisJfQorCisJaWYgKCFxdWlldGx5ICYmIChzdGF0dXMgPT0gU0hPUlRfTkFNRV9BTUJJR1VPVVMpKSB7CisJCXN0cnVjdCBvaWRfYXJyYXkgY29sbGVjdCA9IE9JRF9BUlJBWV9JTklUOworCisJCWVycm9yKF8oInNob3J0IFNIQTEgJXMgaXMgYW1iaWd1b3VzIiksIGRzLmhleF9wZngpOworCisJCS8qCisJCSAqIFdlIG1heSBzdGlsbCBoYXZlIGFtYmlndWl0eSBpZiB3ZSBzaW1wbHkgc2F3IGEgc2VyaWVzIG9mCisJCSAqIGNhbmRpZGF0ZXMgdGhhdCBkaWQgbm90IHNhdGlzZnkgb3VyIGhpbnQgZnVuY3Rpb24uIEluCisJCSAqIHRoYXQgY2FzZSwgd2Ugc3RpbGwgd2FudCB0byBzaG93IHRoZW0sIHNvIGRpc2FibGUgdGhlIGhpbnQKKwkJICogZnVuY3Rpb24gZW50aXJlbHkuCisJCSAqLworCQlpZiAoIWRzLmFtYmlndW91cykKKwkJCWRzLmZuID0gTlVMTDsKKworCQlhZHZpc2UoXygiVGhlIGNhbmRpZGF0ZXMgYXJlOiIpKTsKKwkJcmVwb19mb3JfZWFjaF9hYmJyZXYociwgZHMuaGV4X3BmeCwgY29sbGVjdF9hbWJpZ3VvdXMsICZjb2xsZWN0KTsKKwkJc29ydF9hbWJpZ3VvdXNfb2lkX2FycmF5KHIsICZjb2xsZWN0KTsKKworCQlpZiAob2lkX2FycmF5X2Zvcl9lYWNoKCZjb2xsZWN0LCBzaG93X2FtYmlndW91c19vYmplY3QsICZkcykpCisJCQlCVUcoInNob3dfYW1iaWd1b3VzX29iamVjdCBzaG91bGRuJ3QgcmV0dXJuIG5vbi16ZXJvIik7CisJCW9pZF9hcnJheV9jbGVhcigmY29sbGVjdCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHJlcG9fZm9yX2VhY2hfYWJicmV2KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgZWFjaF9hYmJyZXZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9pZF9hcnJheSBjb2xsZWN0ID0gT0lEX0FSUkFZX0lOSVQ7CisJc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSBkczsKKwlpbnQgcmV0OworCisJaWYgKGluaXRfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKHIsIHByZWZpeCwgc3RybGVuKHByZWZpeCksICZkcykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlkcy5hbHdheXNfY2FsbF9mbiA9IDE7CisJZHMuZm4gPSByZXBvX2NvbGxlY3RfYW1iaWd1b3VzOworCWRzLmNiX2RhdGEgPSAmY29sbGVjdDsKKwlmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZSgmZHMpOworCWZpbmRfc2hvcnRfcGFja2VkX29iamVjdCgmZHMpOworCisJcmV0ID0gb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmY29sbGVjdCwgZm4sIGNiX2RhdGEpOworCW9pZF9hcnJheV9jbGVhcigmY29sbGVjdCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgc2xvdCBvZiB0aGUgbW9zdC1zaWduaWZpY2FudCBiaXQgc2V0IGluICJ2YWwiLiBUaGVyZSBhcmUgdmFyaW91cworICogd2F5cyB0byBkbyB0aGlzIHF1aWNrbHkgd2l0aCBmbHMoKSBvciBfX2J1aWx0aW5fY2x6bCgpLCBidXQgc3BlZWQgaXMKKyAqIHByb2JhYmx5IG5vdCBhIGJpZyBkZWFsIGhlcmUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBtc2IodW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgciA9IDA7CisJd2hpbGUgKHZhbCA+Pj0gMSkKKwkJcisrOworCXJldHVybiByOworfQorCitzdHJ1Y3QgbWluX2FiYnJldl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgaW5pdF9sZW47CisJdW5zaWduZWQgaW50IGN1cl9sZW47CisJY2hhciAqaGV4OworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZDsKK307CisKK3N0YXRpYyBpbmxpbmUgY2hhciBnZXRfaGV4X2NoYXJfZnJvbV9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCQkgdW5zaWduZWQgaW50IHBvcykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKworCWlmICgocG9zICYgMSkgPT0gMCkKKwkJcmV0dXJuIGhleFtvaWQtPmhhc2hbcG9zID4+IDFdID4+IDRdOworCWVsc2UKKwkJcmV0dXJuIGhleFtvaWQtPmhhc2hbcG9zID4+IDFdICYgMHhmXTsKK30KKworc3RhdGljIGludCBleHRlbmRfYWJicmV2X2xlbihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG1pbl9hYmJyZXZfZGF0YSAqbWFkID0gY2JfZGF0YTsKKworCXVuc2lnbmVkIGludCBpID0gbWFkLT5pbml0X2xlbjsKKwl3aGlsZSAobWFkLT5oZXhbaV0gJiYgbWFkLT5oZXhbaV0gPT0gZ2V0X2hleF9jaGFyX2Zyb21fb2lkKG9pZCwgaSkpCisJCWkrKzsKKworCWlmIChpIDwgR0lUX01BWF9SQVdTWiAmJiBpID49IG1hZC0+Y3VyX2xlbikKKwkJbWFkLT5jdXJfbGVuID0gaSArIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXBvX2V4dGVuZF9hYmJyZXZfbGVuKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJCSAgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZXh0ZW5kX2FiYnJldl9sZW4ob2lkLCBjYl9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgZmluZF9hYmJyZXZfbGVuX2Zvcl9taWR4KHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLAorCQkJCSAgICAgc3RydWN0IG1pbl9hYmJyZXZfZGF0YSAqbWFkKQoreworCWludCBtYXRjaCA9IDA7CisJdWludDMyX3QgbnVtLCBmaXJzdCA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbWFkX29pZDsKKworCWlmICghbS0+bnVtX29iamVjdHMpCisJCXJldHVybjsKKworCW51bSA9IG0tPm51bV9vYmplY3RzOworCW1hZF9vaWQgPSBtYWQtPm9pZDsKKwltYXRjaCA9IGJzZWFyY2hfbWlkeChtYWRfb2lkLCBtLCAmZmlyc3QpOworCisJLyoKKwkgKiBmaXJzdCBpcyBub3cgdGhlIHBvc2l0aW9uIGluIHRoZSBwYWNrZmlsZSB3aGVyZSB3ZSB3b3VsZCBpbnNlcnQKKwkgKiBtYWQtPmhhc2ggaWYgaXQgZG9lcyBub3QgZXhpc3QgKG9yIHRoZSBwb3NpdGlvbiBvZiBtYWQtPmhhc2ggaWYKKwkgKiBpdCBkb2VzIGV4aXN0KS4gSGVuY2UsIHdlIGNvbnNpZGVyIGEgbWF4aW11bSBvZiB0d28gb2JqZWN0cworCSAqIG5lYXJieSBmb3IgdGhlIGFiYnJldmlhdGlvbiBsZW5ndGguCisJICovCisJbWFkLT5pbml0X2xlbiA9IDA7CisJaWYgKCFtYXRjaCkgeworCQlpZiAobnRoX21pZHhlZF9vYmplY3Rfb2lkKCZvaWQsIG0sIGZpcnN0KSkKKwkJCWV4dGVuZF9hYmJyZXZfbGVuKCZvaWQsIG1hZCk7CisJfSBlbHNlIGlmIChmaXJzdCA8IG51bSAtIDEpIHsKKwkJaWYgKG50aF9taWR4ZWRfb2JqZWN0X29pZCgmb2lkLCBtLCBmaXJzdCArIDEpKQorCQkJZXh0ZW5kX2FiYnJldl9sZW4oJm9pZCwgbWFkKTsKKwl9CisJaWYgKGZpcnN0ID4gMCkgeworCQlpZiAobnRoX21pZHhlZF9vYmplY3Rfb2lkKCZvaWQsIG0sIGZpcnN0IC0gMSkpCisJCQlleHRlbmRfYWJicmV2X2xlbigmb2lkLCBtYWQpOworCX0KKwltYWQtPmluaXRfbGVuID0gbWFkLT5jdXJfbGVuOworfQorCitzdGF0aWMgdm9pZCBmaW5kX2FiYnJldl9sZW5fZm9yX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkJICAgICBzdHJ1Y3QgbWluX2FiYnJldl9kYXRhICptYWQpCit7CisJaW50IG1hdGNoID0gMDsKKwl1aW50MzJfdCBudW0sIGZpcnN0ID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICptYWRfb2lkOworCisJaWYgKHAtPm11bHRpX3BhY2tfaW5kZXgpCisJCXJldHVybjsKKworCWlmIChvcGVuX3BhY2tfaW5kZXgocCkgfHwgIXAtPm51bV9vYmplY3RzKQorCQlyZXR1cm47CisKKwludW0gPSBwLT5udW1fb2JqZWN0czsKKwltYWRfb2lkID0gbWFkLT5vaWQ7CisJbWF0Y2ggPSBic2VhcmNoX3BhY2sobWFkX29pZCwgcCwgJmZpcnN0KTsKKworCS8qCisJICogZmlyc3QgaXMgbm93IHRoZSBwb3NpdGlvbiBpbiB0aGUgcGFja2ZpbGUgd2hlcmUgd2Ugd291bGQgaW5zZXJ0CisJICogbWFkLT5oYXNoIGlmIGl0IGRvZXMgbm90IGV4aXN0IChvciB0aGUgcG9zaXRpb24gb2YgbWFkLT5oYXNoIGlmCisJICogaXQgZG9lcyBleGlzdCkuIEhlbmNlLCB3ZSBjb25zaWRlciBhIG1heGltdW0gb2YgdHdvIG9iamVjdHMKKwkgKiBuZWFyYnkgZm9yIHRoZSBhYmJyZXZpYXRpb24gbGVuZ3RoLgorCSAqLworCW1hZC0+aW5pdF9sZW4gPSAwOworCWlmICghbWF0Y2gpIHsKKwkJaWYgKCFudGhfcGFja2VkX29iamVjdF9pZCgmb2lkLCBwLCBmaXJzdCkpCisJCQlleHRlbmRfYWJicmV2X2xlbigmb2lkLCBtYWQpOworCX0gZWxzZSBpZiAoZmlyc3QgPCBudW0gLSAxKSB7CisJCWlmICghbnRoX3BhY2tlZF9vYmplY3RfaWQoJm9pZCwgcCwgZmlyc3QgKyAxKSkKKwkJCWV4dGVuZF9hYmJyZXZfbGVuKCZvaWQsIG1hZCk7CisJfQorCWlmIChmaXJzdCA+IDApIHsKKwkJaWYgKCFudGhfcGFja2VkX29iamVjdF9pZCgmb2lkLCBwLCBmaXJzdCAtIDEpKQorCQkJZXh0ZW5kX2FiYnJldl9sZW4oJm9pZCwgbWFkKTsKKwl9CisJbWFkLT5pbml0X2xlbiA9IG1hZC0+Y3VyX2xlbjsKK30KKworc3RhdGljIHZvaWQgZmluZF9hYmJyZXZfbGVuX3BhY2tlZChzdHJ1Y3QgbWluX2FiYnJldl9kYXRhICptYWQpCit7CisJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm07CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwlmb3IgKG0gPSBnZXRfbXVsdGlfcGFja19pbmRleChtYWQtPnJlcG8pOyBtOyBtID0gbS0+bmV4dCkKKwkJZmluZF9hYmJyZXZfbGVuX2Zvcl9taWR4KG0sIG1hZCk7CisJZm9yIChwID0gZ2V0X3BhY2tlZF9naXQobWFkLT5yZXBvKTsgcDsgcCA9IHAtPm5leHQpCisJCWZpbmRfYWJicmV2X2xlbl9mb3JfcGFjayhwLCBtYWQpOworfQorCitpbnQgcmVwb19maW5kX3VuaXF1ZV9hYmJyZXZfcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY2hhciAqaGV4LAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgbGVuKQoreworCXN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgZHM7CisJc3RydWN0IG1pbl9hYmJyZXZfZGF0YSBtYWQ7CisJc3RydWN0IG9iamVjdF9pZCBvaWRfcmV0OworCWNvbnN0IHVuc2lnbmVkIGhleHN6ID0gci0+aGFzaF9hbGdvLT5oZXhzejsKKworCWlmIChsZW4gPCAwKSB7CisJCXVuc2lnbmVkIGxvbmcgY291bnQgPSByZXBvX2FwcHJveGltYXRlX29iamVjdF9jb3VudChyKTsKKwkJLyoKKwkJICogQWRkIG9uZSBiZWNhdXNlIHRoZSBNU0Igb25seSB0ZWxscyB1cyB0aGUgaGlnaGVzdCBiaXQgc2V0LAorCQkgKiBub3QgaW5jbHVkaW5nIHRoZSB2YWx1ZSBvZiBhbGwgdGhlIF9vdGhlcl8gYml0cyAoc28gIjE1IgorCQkgKiBpcyBvbmx5IG9uZSBvZmYgb2YgMl40LCBidXQgdGhlIE1TQiBpcyB0aGUgM3JkIGJpdC4KKwkJICovCisJCWxlbiA9IG1zYihjb3VudCkgKyAxOworCQkvKgorCQkgKiBXZSBub3cga25vdyB3ZSBoYXZlIG9uIHRoZSBvcmRlciBvZiAyXmxlbiBvYmplY3RzLCB3aGljaAorCQkgKiBleHBlY3RzIGEgY29sbGlzaW9uIGF0IDJeKGxlbi8yKS4gQnV0IHdlIGFsc28gY2FyZSBhYm91dCBoZXgKKwkJICogY2hhcnMsIG5vdCBiaXRzLCBhbmQgdGhlcmUgYXJlIDQgYml0cyBwZXIgaGV4LiBTbyBhbGwKKwkJICogdG9nZXRoZXIgd2UgbmVlZCB0byBkaXZpZGUgYnkgMiBhbmQgcm91bmQgdXAuCisJCSAqLworCQlsZW4gPSBESVZfUk9VTkRfVVAobGVuLCAyKTsKKwkJLyoKKwkJICogRm9yIHZlcnkgc21hbGwgcmVwb3MsIHdlIHN0aWNrIHdpdGggb3VyIHJlZ3VsYXIgZmFsbGJhY2suCisJCSAqLworCQlpZiAobGVuIDwgRkFMTEJBQ0tfREVGQVVMVF9BQkJSRVYpCisJCQlsZW4gPSBGQUxMQkFDS19ERUZBVUxUX0FCQlJFVjsKKwl9CisKKwlvaWRfdG9faGV4X3IoaGV4LCBvaWQpOworCWlmIChsZW4gPT0gaGV4c3ogfHwgIWxlbikKKwkJcmV0dXJuIGhleHN6OworCisJbWFkLnJlcG8gPSByOworCW1hZC5pbml0X2xlbiA9IGxlbjsKKwltYWQuY3VyX2xlbiA9IGxlbjsKKwltYWQuaGV4ID0gaGV4OworCW1hZC5vaWQgPSBvaWQ7CisKKwlmaW5kX2FiYnJldl9sZW5fcGFja2VkKCZtYWQpOworCisJaWYgKGluaXRfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKHIsIGhleCwgbWFkLmN1cl9sZW4sICZkcykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlkcy5mbiA9IHJlcG9fZXh0ZW5kX2FiYnJldl9sZW47CisJZHMuYWx3YXlzX2NhbGxfZm4gPSAxOworCWRzLmNiX2RhdGEgPSAodm9pZCAqKSZtYWQ7CisKKwlmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZSgmZHMpOworCSh2b2lkKWZpbmlzaF9vYmplY3RfZGlzYW1iaWd1YXRpb24oJmRzLCAmb2lkX3JldCk7CisKKwloZXhbbWFkLmN1cl9sZW5dID0gMDsKKwlyZXR1cm4gbWFkLmN1cl9sZW47Cit9CisKK2NvbnN0IGNoYXIgKnJlcG9fZmluZF91bmlxdWVfYWJicmV2KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgIGludCBsZW4pCit7CisJc3RhdGljIGludCBidWZubzsKKwlzdGF0aWMgY2hhciBoZXhidWZmZXJbNF1bR0lUX01BWF9IRVhTWiArIDFdOworCWNoYXIgKmhleCA9IGhleGJ1ZmZlcltidWZub107CisJYnVmbm8gPSAoYnVmbm8gKyAxKSAlIEFSUkFZX1NJWkUoaGV4YnVmZmVyKTsKKwlyZXBvX2ZpbmRfdW5pcXVlX2FiYnJldl9yKHIsIGhleCwgb2lkLCBsZW4pOworCXJldHVybiBoZXg7Cit9CisKK3N0YXRpYyBpbnQgYW1iaWd1b3VzX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbikKK3sKKwlpbnQgc2xhc2ggPSAxOworCWludCBjbnQ7CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IGxlbjsgY250KyspIHsKKwkJc3dpdGNoICgqcGF0aCsrKSB7CisJCWNhc2UgJ1wwJzoKKwkJCWJyZWFrOworCQljYXNlICcvJzoKKwkJCWlmIChzbGFzaCkKKwkJCQlicmVhazsKKwkJCXNsYXNoID0gMTsKKwkJCWNvbnRpbnVlOworCQljYXNlICcuJzoKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJc2xhc2ggPSAwOworCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiBzbGFzaDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRfbWFyayhjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW4sCisJCQkgIGNvbnN0IGNoYXIgKipzdWZmaXgsIGludCBucikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCWludCBzdWZmaXhfbGVuID0gc3RybGVuKHN1ZmZpeFtpXSk7CisJCWlmIChzdWZmaXhfbGVuIDw9IGxlbgorCQkgICAgJiYgIXN0cm5jYXNlY21wKHN0cmluZywgc3VmZml4W2ldLCBzdWZmaXhfbGVuKSkKKwkJCXJldHVybiBzdWZmaXhfbGVuOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdXBzdHJlYW1fbWFyayhjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqc3VmZml4W10gPSB7ICJAe3Vwc3RyZWFtfSIsICJAe3V9IiB9OworCXJldHVybiBhdF9tYXJrKHN0cmluZywgbGVuLCBzdWZmaXgsIEFSUkFZX1NJWkUoc3VmZml4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1c2hfbWFyayhjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqc3VmZml4W10gPSB7ICJAe3B1c2h9IiB9OworCXJldHVybiBhdF9tYXJrKHN0cmluZywgbGVuLCBzdWZmaXgsIEFSUkFZX1NJWkUoc3VmZml4KSk7Cit9CisKK3N0YXRpYyBlbnVtIGdldF9vaWRfcmVzdWx0IGdldF9vaWRfMShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB1bnNpZ25lZCBsb29rdXBfZmxhZ3MpOworc3RhdGljIGludCBpbnRlcnByZXRfbnRoX3ByaW9yX2NoZWNrb3V0KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgc3RydWN0IHN0cmJ1ZiAqYnVmKTsKKworc3RhdGljIGludCBnZXRfb2lkX2Jhc2ljKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisJCQkgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKndhcm5fbXNnID0gInJlZm5hbWUgJyUuKnMnIGlzIGFtYmlndW91cy4iOworCXN0YXRpYyBjb25zdCBjaGFyICpvYmplY3RfbmFtZV9tc2cgPSBOXygKKwkiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKwkiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorCSJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKwkiXG4iCisJIiAgZ2l0IHN3aXRjaCAtYyAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKwkiXG4iCisJIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorCSJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKwkicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiKTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRtcF9vaWQ7CisJY2hhciAqcmVhbF9yZWYgPSBOVUxMOworCWludCByZWZzX2ZvdW5kID0gMDsKKwlpbnQgYXQsIHJlZmxvZ19sZW4sIG50aF9wcmlvciA9IDA7CisKKwlpZiAobGVuID09IHItPmhhc2hfYWxnby0+aGV4c3ogJiYgIWdldF9vaWRfaGV4KHN0ciwgb2lkKSkgeworCQlpZiAod2Fybl9hbWJpZ3VvdXNfcmVmcyAmJiB3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eSkgeworCQkJcmVmc19mb3VuZCA9IHJlcG9fZHdpbV9yZWYociwgc3RyLCBsZW4sICZ0bXBfb2lkLCAmcmVhbF9yZWYpOworCQkJaWYgKHJlZnNfZm91bmQgPiAwKSB7CisJCQkJd2FybmluZyh3YXJuX21zZywgbGVuLCBzdHIpOworCQkJCWlmIChhZHZpY2Vfb2JqZWN0X25hbWVfd2FybmluZykKKwkJCQkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgXyhvYmplY3RfbmFtZV9tc2cpKTsKKwkJCX0KKwkJCWZyZWUocmVhbF9yZWYpOworCQl9CisJCXJldHVybiAwOworCX0KKworCS8qIGJhc2ljQHt0aW1lIG9yIG51bWJlciBvciAtbnVtYmVyfSBmb3JtYXQgdG8gcXVlcnkgcmVmLWxvZyAqLworCXJlZmxvZ19sZW4gPSBhdCA9IDA7CisJaWYgKGxlbiAmJiBzdHJbbGVuLTFdID09ICd9JykgeworCQlmb3IgKGF0ID0gbGVuLTQ7IGF0ID49IDA7IGF0LS0pIHsKKwkJCWlmIChzdHJbYXRdID09ICdAJyAmJiBzdHJbYXQrMV0gPT0gJ3snKSB7CisJCQkJaWYgKHN0clthdCsyXSA9PSAnLScpIHsKKwkJCQkJaWYgKGF0ICE9IDApCisJCQkJCQkvKiBAey1OfSBub3QgYXQgc3RhcnQgKi8KKwkJCQkJCXJldHVybiAtMTsKKwkJCQkJbnRoX3ByaW9yID0gMTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmICghdXBzdHJlYW1fbWFyayhzdHIgKyBhdCwgbGVuIC0gYXQpICYmCisJCQkJICAgICFwdXNoX21hcmsoc3RyICsgYXQsIGxlbiAtIGF0KSkgeworCQkJCQlyZWZsb2dfbGVuID0gKGxlbi0xKSAtIChhdCsyKTsKKwkJCQkJbGVuID0gYXQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyogQWNjZXB0IG9ubHkgdW5hbWJpZ3VvdXMgcmVmIHBhdGhzLiAqLworCWlmIChsZW4gJiYgYW1iaWd1b3VzX3BhdGgoc3RyLCBsZW4pKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobnRoX3ByaW9yKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCWludCBkZXRhY2hlZDsKKworCQlpZiAoaW50ZXJwcmV0X250aF9wcmlvcl9jaGVja291dChyLCBzdHIsIGxlbiwgJmJ1ZikgPiAwKSB7CisJCQlkZXRhY2hlZCA9IChidWYubGVuID09IHItPmhhc2hfYWxnby0+aGV4c3ogJiYgIWdldF9vaWRfaGV4KGJ1Zi5idWYsIG9pZCkpOworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCQlpZiAoZGV0YWNoZWQpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoIWxlbiAmJiByZWZsb2dfbGVuKQorCQkvKiBhbGxvdyAiQHsuLi59IiB0byBtZWFuIHRoZSBjdXJyZW50IGJyYW5jaCByZWZsb2cgKi8KKwkJcmVmc19mb3VuZCA9IHJlcG9fZHdpbV9yZWYociwgIkhFQUQiLCA0LCBvaWQsICZyZWFsX3JlZik7CisJZWxzZSBpZiAocmVmbG9nX2xlbikKKwkJcmVmc19mb3VuZCA9IHJlcG9fZHdpbV9sb2cociwgc3RyLCBsZW4sIG9pZCwgJnJlYWxfcmVmKTsKKwllbHNlCisJCXJlZnNfZm91bmQgPSByZXBvX2R3aW1fcmVmKHIsIHN0ciwgbGVuLCBvaWQsICZyZWFsX3JlZik7CisKKwlpZiAoIXJlZnNfZm91bmQpCisJCXJldHVybiAtMTsKKworCWlmICh3YXJuX2FtYmlndW91c19yZWZzICYmICEoZmxhZ3MgJiBHRVRfT0lEX1FVSUVUTFkpICYmCisJICAgIChyZWZzX2ZvdW5kID4gMSB8fAorCSAgICAgIWdldF9zaG9ydF9vaWQociwgc3RyLCBsZW4sICZ0bXBfb2lkLCBHRVRfT0lEX1FVSUVUTFkpKSkKKwkJd2FybmluZyh3YXJuX21zZywgbGVuLCBzdHIpOworCisJaWYgKHJlZmxvZ19sZW4pIHsKKwkJaW50IG50aCwgaTsKKwkJdGltZXN0YW1wX3QgYXRfdGltZTsKKwkJdGltZXN0YW1wX3QgY29fdGltZTsKKwkJaW50IGNvX3R6LCBjb19jbnQ7CisKKwkJLyogSXMgaXQgYXNraW5nIGZvciBOLXRoIGVudHJ5LCBvciBhcHByb3hpZGF0ZT8gKi8KKwkJZm9yIChpID0gbnRoID0gMDsgMCA8PSBudGggJiYgaSA8IHJlZmxvZ19sZW47IGkrKykgeworCQkJY2hhciBjaCA9IHN0clthdCsyK2ldOworCQkJaWYgKCcwJyA8PSBjaCAmJiBjaCA8PSAnOScpCisJCQkJbnRoID0gbnRoICogMTAgKyBjaCAtICcwJzsKKwkJCWVsc2UKKwkJCQludGggPSAtMTsKKwkJfQorCQlpZiAoMTAwMDAwMDAwIDw9IG50aCkgeworCQkJYXRfdGltZSA9IG50aDsKKwkJCW50aCA9IC0xOworCQl9IGVsc2UgaWYgKDAgPD0gbnRoKQorCQkJYXRfdGltZSA9IDA7CisJCWVsc2UgeworCQkJaW50IGVycm9ycyA9IDA7CisJCQljaGFyICp0bXAgPSB4c3RybmR1cChzdHIgKyBhdCArIDIsIHJlZmxvZ19sZW4pOworCQkJYXRfdGltZSA9IGFwcHJveGlkYXRlX2NhcmVmdWwodG1wLCAmZXJyb3JzKTsKKwkJCWZyZWUodG1wKTsKKwkJCWlmIChlcnJvcnMpIHsKKwkJCQlmcmVlKHJlYWxfcmVmKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJaWYgKHJlYWRfcmVmX2F0KGdldF9tYWluX3JlZl9zdG9yZShyKSwKKwkJCQlyZWFsX3JlZiwgZmxhZ3MsIGF0X3RpbWUsIG50aCwgb2lkLCBOVUxMLAorCQkJCSZjb190aW1lLCAmY29fdHosICZjb19jbnQpKSB7CisJCQlpZiAoIWxlbikgeworCQkJCWlmICghc2tpcF9wcmVmaXgocmVhbF9yZWYsICJyZWZzL2hlYWRzLyIsICZzdHIpKQorCQkJCQlzdHIgPSAiSEVBRCI7CisJCQkJbGVuID0gc3RybGVuKHN0cik7CisJCQl9CisJCQlpZiAoYXRfdGltZSkgeworCQkJCWlmICghKGZsYWdzICYgR0VUX09JRF9RVUlFVExZKSkgeworCQkJCQl3YXJuaW5nKF8oImxvZyBmb3IgJyUuKnMnIG9ubHkgZ29lcyBiYWNrIHRvICVzIiksCisJCQkJCQlsZW4sIHN0ciwKKwkJCQkJCXNob3dfZGF0ZShjb190aW1lLCBjb190eiwgREFURV9NT0RFKFJGQzI4MjIpKSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoZmxhZ3MgJiBHRVRfT0lEX1FVSUVUTFkpIHsKKwkJCQkJZXhpdCgxMjgpOworCQkJCX0KKwkJCQlkaWUoXygibG9nIGZvciAnJS4qcycgb25seSBoYXMgJWQgZW50cmllcyIpLAorCQkJCSAgICBsZW4sIHN0ciwgY29fY250KTsKKwkJCX0KKwkJfQorCX0KKworCWZyZWUocmVhbF9yZWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBnZXRfb2lkX3Jlc3VsdCBnZXRfcGFyZW50KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCBpbnQgaWR4KQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWVudW0gZ2V0X29pZF9yZXN1bHQgcmV0ID0gZ2V0X29pZF8xKHIsIG5hbWUsIGxlbiwgJm9pZCwKKwkJCQkJICAgIEdFVF9PSURfQ09NTUlUVElTSCk7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UociwgJm9pZCk7CisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gTUlTU0lOR19PQkpFQ1Q7CisJaWYgKCFpZHgpIHsKKwkJb2lkY3B5KHJlc3VsdCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisJCXJldHVybiBGT1VORDsKKwl9CisJcCA9IGNvbW1pdC0+cGFyZW50czsKKwl3aGlsZSAocCkgeworCQlpZiAoIS0taWR4KSB7CisJCQlvaWRjcHkocmVzdWx0LCAmcC0+aXRlbS0+b2JqZWN0Lm9pZCk7CisJCQlyZXR1cm4gRk9VTkQ7CisJCX0KKwkJcCA9IHAtPm5leHQ7CisJfQorCXJldHVybiBNSVNTSU5HX09CSkVDVDsKK30KKworc3RhdGljIGVudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X250aF9hbmNlc3RvcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQsCisJCQkJCSAgICBpbnQgZ2VuZXJhdGlvbikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IHJldDsKKworCXJldCA9IGdldF9vaWRfMShyLCBuYW1lLCBsZW4sICZvaWQsIEdFVF9PSURfQ09NTUlUVElTSCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyLCAmb2lkKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIE1JU1NJTkdfT0JKRUNUOworCisJd2hpbGUgKGdlbmVyYXRpb24tLSkgeworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkgfHwgIWNvbW1pdC0+cGFyZW50cykKKwkJCXJldHVybiBNSVNTSU5HX09CSkVDVDsKKwkJY29tbWl0ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCX0KKwlvaWRjcHkocmVzdWx0LCAmY29tbWl0LT5vYmplY3Qub2lkKTsKKwlyZXR1cm4gRk9VTkQ7Cit9CisKK3N0cnVjdCBvYmplY3QgKnJlcG9fcGVlbF90b190eXBlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCQkgc3RydWN0IG9iamVjdCAqbywgZW51bSBvYmplY3RfdHlwZSBleHBlY3RlZF90eXBlKQoreworCWlmIChuYW1lICYmICFuYW1lbGVuKQorCQluYW1lbGVuID0gc3RybGVuKG5hbWUpOworCXdoaWxlICgxKSB7CisJCWlmICghbyB8fCAoIW8tPnBhcnNlZCAmJiAhcGFyc2Vfb2JqZWN0KHIsICZvLT5vaWQpKSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoZXhwZWN0ZWRfdHlwZSA9PSBPQkpfQU5ZIHx8IG8tPnR5cGUgPT0gZXhwZWN0ZWRfdHlwZSkKKwkJCXJldHVybiBvOworCQlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKQorCQkJbyA9ICgoc3RydWN0IHRhZyopIG8pLT50YWdnZWQ7CisJCWVsc2UgaWYgKG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCW8gPSAmKHJlcG9fZ2V0X2NvbW1pdF90cmVlKHIsICgoc3RydWN0IGNvbW1pdCAqKW8pKS0+b2JqZWN0KTsKKwkJZWxzZSB7CisJCQlpZiAobmFtZSkKKwkJCQllcnJvcigiJS4qczogZXhwZWN0ZWQgJXMgdHlwZSwgYnV0IHRoZSBvYmplY3QgIgorCQkJCSAgICAgICJkZXJlZmVyZW5jZXMgdG8gJXMgdHlwZSIsCisJCQkJICAgICAgbmFtZWxlbiwgbmFtZSwgdHlwZV9uYW1lKGV4cGVjdGVkX3R5cGUpLAorCQkJCSAgICAgIHR5cGVfbmFtZShvLT50eXBlKSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwZWVsX29uaW9uKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHVuc2lnbmVkIGxvb2t1cF9mbGFncykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG91dGVyOworCWNvbnN0IGNoYXIgKnNwOworCXVuc2lnbmVkIGludCBleHBlY3RlZF90eXBlID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0ICpvOworCisJLyoKKwkgKiAicmVmXnt0eXBlfSIgZGVyZWZlcmVuY2VzIHJlZiByZXBlYXRlZGx5IHVudGlsIHlvdSBjYW5ub3QKKwkgKiBkZXJlZmVyZW5jZSBhbnltb3JlLCBvciB5b3UgZ2V0IGFuIG9iamVjdCBvZiBnaXZlbiB0eXBlLAorCSAqIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gICJyZWZee30iIG1lYW5zIGp1c3QgZGVyZWZlcmVuY2UKKwkgKiB0YWdzIHVudGlsIHlvdSBnZXQgYSBub24tdGFnLiAgInJlZl4wIiBpcyBhIHNob3J0aGFuZCBmb3IKKwkgKiAicmVmXntjb21taXR9Ii4gICJjb21taXRee3RyZWV9IiBjb3VsZCBiZSB1c2VkIHRvIGZpbmQgdGhlCisJICogdG9wLWxldmVsIHRyZWUgb2YgdGhlIGdpdmVuIGNvbW1pdC4KKwkgKi8KKwlpZiAobGVuIDwgNCB8fCBuYW1lW2xlbi0xXSAhPSAnfScpCisJCXJldHVybiAtMTsKKworCWZvciAoc3AgPSBuYW1lICsgbGVuIC0gMTsgbmFtZSA8PSBzcDsgc3AtLSkgeworCQlpbnQgY2ggPSAqc3A7CisJCWlmIChjaCA9PSAneycgJiYgbmFtZSA8IHNwICYmIHNwWy0xXSA9PSAnXicpCisJCQlicmVhazsKKwl9CisJaWYgKHNwIDw9IG5hbWUpCisJCXJldHVybiAtMTsKKworCXNwKys7IC8qIGJlZ2lubmluZyBvZiB0eXBlIG5hbWUsIG9yIGNsb3NpbmcgYnJhY2UgZm9yIGVtcHR5ICovCisJaWYgKHN0YXJ0c193aXRoKHNwLCAiY29tbWl0fSIpKQorCQlleHBlY3RlZF90eXBlID0gT0JKX0NPTU1JVDsKKwllbHNlIGlmIChzdGFydHNfd2l0aChzcCwgInRhZ30iKSkKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9UQUc7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3AsICJ0cmVlfSIpKQorCQlleHBlY3RlZF90eXBlID0gT0JKX1RSRUU7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3AsICJibG9ifSIpKQorCQlleHBlY3RlZF90eXBlID0gT0JKX0JMT0I7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3AsICJvYmplY3R9IikpCisJCWV4cGVjdGVkX3R5cGUgPSBPQkpfQU5ZOworCWVsc2UgaWYgKHNwWzBdID09ICd9JykKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9OT05FOworCWVsc2UgaWYgKHNwWzBdID09ICcvJykKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9DT01NSVQ7CisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlsb29rdXBfZmxhZ3MgJj0gfkdFVF9PSURfRElTQU1CSUdVQVRPUlM7CisJaWYgKGV4cGVjdGVkX3R5cGUgPT0gT0JKX0NPTU1JVCkKKwkJbG9va3VwX2ZsYWdzIHw9IEdFVF9PSURfQ09NTUlUVElTSDsKKwllbHNlIGlmIChleHBlY3RlZF90eXBlID09IE9CSl9UUkVFKQorCQlsb29rdXBfZmxhZ3MgfD0gR0VUX09JRF9UUkVFSVNIOworCisJaWYgKGdldF9vaWRfMShyLCBuYW1lLCBzcCAtIG5hbWUgLSAyLCAmb3V0ZXIsIGxvb2t1cF9mbGFncykpCisJCXJldHVybiAtMTsKKworCW8gPSBwYXJzZV9vYmplY3QociwgJm91dGVyKTsKKwlpZiAoIW8pCisJCXJldHVybiAtMTsKKwlpZiAoIWV4cGVjdGVkX3R5cGUpIHsKKwkJbyA9IGRlcmVmX3RhZyhyLCBvLCBuYW1lLCBzcCAtIG5hbWUgLSAyKTsKKwkJaWYgKCFvIHx8ICghby0+cGFyc2VkICYmICFwYXJzZV9vYmplY3QociwgJm8tPm9pZCkpKQorCQkJcmV0dXJuIC0xOworCQlvaWRjcHkob2lkLCAmby0+b2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCB0aGUgc3ludGF4IGxvb2sgY29ycmVjdCwgc28KKwkgKiBpZiB3ZSBkbyBub3QgZ2V0IHRoZSBuZWVkZWQgb2JqZWN0LCB3ZSBzaG91bGQKKwkgKiBiYXJmLgorCSAqLworCW8gPSByZXBvX3BlZWxfdG9fdHlwZShyLCBuYW1lLCBsZW4sIG8sIGV4cGVjdGVkX3R5cGUpOworCWlmICghbykKKwkJcmV0dXJuIC0xOworCisJb2lkY3B5KG9pZCwgJm8tPm9pZCk7CisJaWYgKHNwWzBdID09ICcvJykgeworCQkvKiAiJGNvbW1pdF57L2Zvb30iICovCisJCWNoYXIgKnByZWZpeDsKKwkJaW50IHJldDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKKworCQkvKgorCQkgKiAkY29tbWl0XnsvfS4gU29tZSByZWdleCBpbXBsZW1lbnRhdGlvbiBtYXkgcmVqZWN0LgorCQkgKiBXZSBkb24ndCBuZWVkIHJlZ2V4IGFueXdheS4gJycgcGF0dGVybiBhbHdheXMgbWF0Y2hlcy4KKwkJICovCisJCWlmIChzcFsxXSA9PSAnfScpCisJCQlyZXR1cm4gMDsKKworCQlwcmVmaXggPSB4c3RybmR1cChzcCArIDEsIG5hbWUgKyBsZW4gLSAxIC0gKHNwICsgMSkpOworCQljb21taXRfbGlzdF9pbnNlcnQoKHN0cnVjdCBjb21taXQgKilvLCAmbGlzdCk7CisJCXJldCA9IGdldF9vaWRfb25lbGluZShyLCBwcmVmaXgsIG9pZCwgbGlzdCk7CisJCWZyZWUocHJlZml4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Rlc2NyaWJlX25hbWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBmbGFncyA9IEdFVF9PSURfUVVJRVRMWSB8IEdFVF9PSURfQ09NTUlUOworCisJZm9yIChjcCA9IG5hbWUgKyBsZW4gLSAxOyBuYW1lICsgMiA8PSBjcDsgY3AtLSkgeworCQljaGFyIGNoID0gKmNwOworCQlpZiAoIWlzeGRpZ2l0KGNoKSkgeworCQkJLyogV2UgbXVzdCBiZSBsb29raW5nIGF0IGcgaW4gIlNPTUVUSElORy1nIgorCQkJICogZm9yIGl0IHRvIGJlIGRlc2NyaWJlIG91dHB1dC4KKwkJCSAqLworCQkJaWYgKGNoID09ICdnJyAmJiBjcFstMV0gPT0gJy0nKSB7CisJCQkJY3ArKzsKKwkJCQlsZW4gLT0gY3AgLSBuYW1lOworCQkJCXJldHVybiBnZXRfc2hvcnRfb2lkKHIsCisJCQkJCQkgICAgIGNwLCBsZW4sIG9pZCwgZmxhZ3MpOworCQkJfQorCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGVudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X29pZF8xKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCQkgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvb2t1cF9mbGFncykKK3sKKwlpbnQgcmV0LCBoYXNfc3VmZml4OworCWNvbnN0IGNoYXIgKmNwOworCisJLyoKKwkgKiAibmFtZX4zIiBpcyAibmFtZV5eXiIsICJuYW1lfiIgaXMgIm5hbWV+MSIsIGFuZCAibmFtZV4iIGlzICJuYW1lXjEiLgorCSAqLworCWhhc19zdWZmaXggPSAwOworCWZvciAoY3AgPSBuYW1lICsgbGVuIC0gMTsgbmFtZSA8PSBjcDsgY3AtLSkgeworCQlpbnQgY2ggPSAqY3A7CisJCWlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKQorCQkJY29udGludWU7CisJCWlmIChjaCA9PSAnficgfHwgY2ggPT0gJ14nKQorCQkJaGFzX3N1ZmZpeCA9IGNoOworCQlicmVhazsKKwl9CisKKwlpZiAoaGFzX3N1ZmZpeCkgeworCQl1bnNpZ25lZCBpbnQgbnVtID0gMDsKKwkJaW50IGxlbjEgPSBjcCAtIG5hbWU7CisJCWNwKys7CisJCXdoaWxlIChjcCA8IG5hbWUgKyBsZW4pIHsKKwkJCXVuc2lnbmVkIGludCBkaWdpdCA9ICpjcCsrIC0gJzAnOworCQkJaWYgKHVuc2lnbmVkX211bHRfb3ZlcmZsb3dzKG51bSwgMTApKQorCQkJCXJldHVybiBNSVNTSU5HX09CSkVDVDsKKwkJCW51bSAqPSAxMDsKKwkJCWlmICh1bnNpZ25lZF9hZGRfb3ZlcmZsb3dzKG51bSwgZGlnaXQpKQorCQkJCXJldHVybiBNSVNTSU5HX09CSkVDVDsKKwkJCW51bSArPSBkaWdpdDsKKwkJfQorCQlpZiAoIW51bSAmJiBsZW4xID09IGxlbiAtIDEpCisJCQludW0gPSAxOworCQllbHNlIGlmIChudW0gPiBJTlRfTUFYKQorCQkJcmV0dXJuIE1JU1NJTkdfT0JKRUNUOworCQlpZiAoaGFzX3N1ZmZpeCA9PSAnXicpCisJCQlyZXR1cm4gZ2V0X3BhcmVudChyLCBuYW1lLCBsZW4xLCBvaWQsIG51bSk7CisJCS8qIGVsc2UgaWYgKGhhc19zdWZmaXggPT0gJ34nKSAtLSBnb2VzIHdpdGhvdXQgc2F5aW5nICovCisJCXJldHVybiBnZXRfbnRoX2FuY2VzdG9yKHIsIG5hbWUsIGxlbjEsIG9pZCwgbnVtKTsKKwl9CisKKwlyZXQgPSBwZWVsX29uaW9uKHIsIG5hbWUsIGxlbiwgb2lkLCBsb29rdXBfZmxhZ3MpOworCWlmICghcmV0KQorCQlyZXR1cm4gRk9VTkQ7CisKKwlyZXQgPSBnZXRfb2lkX2Jhc2ljKHIsIG5hbWUsIGxlbiwgb2lkLCBsb29rdXBfZmxhZ3MpOworCWlmICghcmV0KQorCQlyZXR1cm4gRk9VTkQ7CisKKwkvKiBJdCBjb3VsZCBiZSBkZXNjcmliZSBvdXRwdXQgdGhhdCBpcyAiU09NRVRISU5HLWdYWFhYIiAqLworCXJldCA9IGdldF9kZXNjcmliZV9uYW1lKHIsIG5hbWUsIGxlbiwgb2lkKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIEZPVU5EOworCisJcmV0dXJuIGdldF9zaG9ydF9vaWQociwgbmFtZSwgbGVuLCBvaWQsIGxvb2t1cF9mbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGludGVycHJldHMgbmFtZXMgbGlrZSAnOi9Jbml0aWFsIHJldmlzaW9uIG9mICJnaXQiJyBieSBzZWFyY2hpbmcKKyAqIHRocm91Z2ggaGlzdG9yeSBhbmQgcmV0dXJuaW5nIHRoZSBmaXJzdCBjb21taXQgd2hvc2UgbWVzc2FnZSBzdGFydHMKKyAqIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24uCisgKgorICogRm9yIG5lZ2F0aXZlLW1hdGNoaW5nLCBwcmVmaXggdGhlIHBhdHRlcm4tcGFydCB3aXRoICchLScsIGxpa2U6ICc6LyEtV0lQJy4KKyAqCisgKiBGb3IgYSBsaXRlcmFsICchJyBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHBhdHRlcm4sIHlvdSBoYXZlIHRvIHJlcGVhdAorICogdGhhdCwgbGlrZTogJzovISFmb28nCisgKgorICogRm9yIGZ1dHVyZSBleHRlbnNpb24sIGFsbCBvdGhlciBzZXF1ZW5jZXMgYmVnaW5uaW5nIHdpdGggJzovIScgYXJlIHJlc2VydmVkLgorICovCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIE9ORUxJTkVfU0VFTiAoMXU8PDIwKQorCitzdHJ1Y3QgaGFuZGxlX29uZV9yZWZfY2IgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3Q7Cit9OworCitzdGF0aWMgaW50IGhhbmRsZV9vbmVfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGhhbmRsZV9vbmVfcmVmX2NiICpjYiA9IGNiX2RhdGE7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCA9IGNiLT5saXN0OworCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHBhcnNlX29iamVjdChjYi0+cmVwbywgb2lkKTsKKwlpZiAoIW9iamVjdCkKKwkJcmV0dXJuIDA7CisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW9iamVjdCA9IGRlcmVmX3RhZyhjYi0+cmVwbywgb2JqZWN0LCBwYXRoLAorCQkJCSAgIHN0cmxlbihwYXRoKSk7CisJCWlmICghb2JqZWN0KQorCQkJcmV0dXJuIDA7CisJfQorCWlmIChvYmplY3QtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDA7CisJY29tbWl0X2xpc3RfaW5zZXJ0KChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0LCBsaXN0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfb2lkX29uZWxpbmUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmJhY2t1cCA9IE5VTEwsICpsOworCWludCBmb3VuZCA9IDA7CisJaW50IG5lZ2F0aXZlID0gMDsKKwlyZWdleF90IHJlZ2V4OworCisJaWYgKHByZWZpeFswXSA9PSAnIScpIHsKKwkJcHJlZml4Kys7CisKKwkJaWYgKHByZWZpeFswXSA9PSAnLScpIHsKKwkJCXByZWZpeCsrOworCQkJbmVnYXRpdmUgPSAxOworCQl9IGVsc2UgaWYgKHByZWZpeFswXSAhPSAnIScpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmIChyZWdjb21wKCZyZWdleCwgcHJlZml4LCBSRUdfRVhURU5ERUQpKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGwgPSBsaXN0OyBsOyBsID0gbC0+bmV4dCkgeworCQlsLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gT05FTElORV9TRUVOOworCQljb21taXRfbGlzdF9pbnNlcnQobC0+aXRlbSwgJmJhY2t1cCk7CisJfQorCXdoaWxlIChsaXN0KSB7CisJCWNvbnN0IGNoYXIgKnAsICpidWY7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJaW50IG1hdGNoZXM7CisKKwkJY29tbWl0ID0gcG9wX21vc3RfcmVjZW50X2NvbW1pdCgmbGlzdCwgT05FTElORV9TRUVOKTsKKwkJaWYgKCFwYXJzZV9vYmplY3QociwgJmNvbW1pdC0+b2JqZWN0Lm9pZCkpCisJCQljb250aW51ZTsKKwkJYnVmID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKTsKKwkJcCA9IHN0cnN0cihidWYsICJcblxuIik7CisJCW1hdGNoZXMgPSBuZWdhdGl2ZSBeIChwICYmICFyZWdleGVjKCZyZWdleCwgcCArIDIsIDAsIE5VTEwsIDApKTsKKwkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1Zik7CisKKwkJaWYgKG1hdGNoZXMpIHsKKwkJCW9pZGNweShvaWQsICZjb21taXQtPm9iamVjdC5vaWQpOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVnZnJlZSgmcmVnZXgpOworCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CisJZm9yIChsID0gYmFja3VwOyBsOyBsID0gbC0+bmV4dCkKKwkJY2xlYXJfY29tbWl0X21hcmtzKGwtPml0ZW0sIE9ORUxJTkVfU0VFTik7CisJZnJlZV9jb21taXRfbGlzdChiYWNrdXApOworCXJldHVybiBmb3VuZCA/IDAgOiAtMTsKK30KKworc3RydWN0IGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2hfY2JkYXRhIHsKKwlpbnQgcmVtYWluaW5nOworCXN0cnVjdCBzdHJidWYgKnNiOworfTsKKworc3RhdGljIGludCBncmFiX250aF9icmFuY2hfc3dpdGNoKHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5vaWQsCisJCQkJICBjb25zdCBjaGFyICplbWFpbCwgdGltZXN0YW1wX3QgdGltZXN0YW1wLCBpbnQgdHosCisJCQkJICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBncmFiX250aF9icmFuY2hfc3dpdGNoX2NiZGF0YSAqY2IgPSBjYl9kYXRhOworCWNvbnN0IGNoYXIgKm1hdGNoID0gTlVMTCwgKnRhcmdldCA9IE5VTEw7CisJc2l6ZV90IGxlbjsKKworCWlmIChza2lwX3ByZWZpeChtZXNzYWdlLCAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tICIsICZtYXRjaCkpCisJCXRhcmdldCA9IHN0cnN0cihtYXRjaCwgIiB0byAiKTsKKworCWlmICghbWF0Y2ggfHwgIXRhcmdldCkKKwkJcmV0dXJuIDA7CisJaWYgKC0tKGNiLT5yZW1haW5pbmcpID09IDApIHsKKwkJbGVuID0gdGFyZ2V0IC0gbWF0Y2g7CisJCXN0cmJ1Zl9yZXNldChjYi0+c2IpOworCQlzdHJidWZfYWRkKGNiLT5zYiwgbWF0Y2gsIGxlbik7CisJCXJldHVybiAxOyAvKiB3ZSBhcmUgZG9uZSAqLworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBhcnNlIEB7LU59IHN5bnRheCwgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwYXJzZWQKKyAqIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBzaWduYWwgYW4gZXJyb3Igd2l0aCBuZWdhdGl2ZSB2YWx1ZS4KKyAqLworc3RhdGljIGludCBpbnRlcnByZXRfbnRoX3ByaW9yX2NoZWNrb3V0KHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCQkJc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWxvbmcgbnRoOworCWludCByZXR2YWw7CisJc3RydWN0IGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2hfY2JkYXRhIGNiOworCWNvbnN0IGNoYXIgKmJyYWNlOworCWNoYXIgKm51bV9lbmQ7CisKKwlpZiAobmFtZWxlbiA8IDQpCisJCXJldHVybiAtMTsKKwlpZiAobmFtZVswXSAhPSAnQCcgfHwgbmFtZVsxXSAhPSAneycgfHwgbmFtZVsyXSAhPSAnLScpCisJCXJldHVybiAtMTsKKwlicmFjZSA9IG1lbWNocihuYW1lLCAnfScsIG5hbWVsZW4pOworCWlmICghYnJhY2UpCisJCXJldHVybiAtMTsKKwludGggPSBzdHJ0b2wobmFtZSArIDMsICZudW1fZW5kLCAxMCk7CisJaWYgKG51bV9lbmQgIT0gYnJhY2UpCisJCXJldHVybiAtMTsKKwlpZiAobnRoIDw9IDApCisJCXJldHVybiAtMTsKKwljYi5yZW1haW5pbmcgPSBudGg7CisJY2Iuc2IgPSBidWY7CisKKwlyZXR2YWwgPSByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShnZXRfbWFpbl9yZWZfc3RvcmUociksCisJCQkiSEVBRCIsIGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2gsICZjYik7CisJaWYgKDAgPCByZXR2YWwpIHsKKwkJcmV0dmFsID0gYnJhY2UgLSBuYW1lICsgMTsKKwl9IGVsc2UKKwkJcmV0dmFsID0gMDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCByZXBvX2dldF9vaWRfbWIoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBjb21taXQgKm9uZSwgKnR3bzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm1iczsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZF90bXA7CisJY29uc3QgY2hhciAqZG90czsKKwlpbnQgc3Q7CisKKwlkb3RzID0gc3Ryc3RyKG5hbWUsICIuLi4iKTsKKwlpZiAoIWRvdHMpCisJCXJldHVybiByZXBvX2dldF9vaWQociwgbmFtZSwgb2lkKTsKKwlpZiAoZG90cyA9PSBuYW1lKQorCQlzdCA9IHJlcG9fZ2V0X29pZChyLCAiSEVBRCIsICZvaWRfdG1wKTsKKwllbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYjsKKwkJc3RyYnVmX2luaXQoJnNiLCBkb3RzIC0gbmFtZSk7CisJCXN0cmJ1Zl9hZGQoJnNiLCBuYW1lLCBkb3RzIC0gbmFtZSk7CisJCXN0ID0gcmVwb19nZXRfb2lkX2NvbW1pdHRpc2gociwgc2IuYnVmLCAmb2lkX3RtcCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCWlmIChzdCkKKwkJcmV0dXJuIHN0OworCW9uZSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyLCAmb2lkX3RtcCwgMCk7CisJaWYgKCFvbmUpCisJCXJldHVybiAtMTsKKworCWlmIChyZXBvX2dldF9vaWRfY29tbWl0dGlzaChyLCBkb3RzWzNdID8gKGRvdHMgKyAzKSA6ICJIRUFEIiwgJm9pZF90bXApKQorCQlyZXR1cm4gLTE7CisJdHdvID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHIsICZvaWRfdG1wLCAwKTsKKwlpZiAoIXR3bykKKwkJcmV0dXJuIC0xOworCW1icyA9IHJlcG9fZ2V0X21lcmdlX2Jhc2VzKHIsIG9uZSwgdHdvKTsKKwlpZiAoIW1icyB8fCBtYnMtPm5leHQpCisJCXN0ID0gLTE7CisJZWxzZSB7CisJCXN0ID0gMDsKKwkJb2lkY3B5KG9pZCwgJm1icy0+aXRlbS0+b2JqZWN0Lm9pZCk7CisJfQorCWZyZWVfY29tbWl0X2xpc3QobWJzKTsKKwlyZXR1cm4gc3Q7Cit9CisKKy8qIHBhcnNlIEBzb21ldGhpbmcgc3ludGF4LCB3aGVuICdzb21ldGhpbmcnIGlzIG5vdCB7Lip9ICovCitzdGF0aWMgaW50IGludGVycHJldF9lbXB0eV9hdChjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IGxlbiwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNvbnN0IGNoYXIgKm5leHQ7CisKKwlpZiAobGVuIHx8IG5hbWVbMV0gPT0gJ3snKQorCQlyZXR1cm4gLTE7CisKKwkvKiBtYWtlIHN1cmUgaXQncyBhIHNpbmdsZSBALCBvciBAQHsuKn0sIG5vdCBAZm9vICovCisJbmV4dCA9IG1lbWNocihuYW1lICsgbGVuICsgMSwgJ0AnLCBuYW1lbGVuIC0gbGVuIC0gMSk7CisJaWYgKG5leHQgJiYgbmV4dFsxXSAhPSAneycpCisJCXJldHVybiAtMTsKKwlpZiAoIW5leHQpCisJCW5leHQgPSBuYW1lICsgbmFtZWxlbjsKKwlpZiAobmV4dCAhPSBuYW1lICsgMSkKKwkJcmV0dXJuIC0xOworCisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZChidWYsICJIRUFEIiwgNCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcmVpbnRlcnByZXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IGxlbiwKKwkJICAgICAgIHN0cnVjdCBzdHJidWYgKmJ1ZiwgdW5zaWduZWQgYWxsb3dlZCkKK3sKKwkvKiB3ZSBoYXZlIGV4dHJhIGRhdGEsIHdoaWNoIG1pZ2h0IG5lZWQgZnVydGhlciBwcm9jZXNzaW5nICovCisJc3RydWN0IHN0cmJ1ZiB0bXAgPSBTVFJCVUZfSU5JVDsKKwlpbnQgdXNlZCA9IGJ1Zi0+bGVuOworCWludCByZXQ7CisKKwlzdHJidWZfYWRkKGJ1ZiwgbmFtZSArIGxlbiwgbmFtZWxlbiAtIGxlbik7CisJcmV0ID0gcmVwb19pbnRlcnByZXRfYnJhbmNoX25hbWUociwgYnVmLT5idWYsIGJ1Zi0+bGVuLCAmdG1wLCBhbGxvd2VkKTsKKwkvKiB0aGF0IGRhdGEgd2FzIG5vdCBpbnRlcnByZXRlZCwgcmVtb3ZlIG91ciBjcnVmdCAqLworCWlmIChyZXQgPCAwKSB7CisJCXN0cmJ1Zl9zZXRsZW4oYnVmLCB1c2VkKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZGJ1ZihidWYsICZ0bXApOworCXN0cmJ1Zl9yZWxlYXNlKCZ0bXApOworCS8qIHR3ZWFrIGZvciBzaXplIG9mIHstTn0gdmVyc3VzIGV4cGFuZGVkIHJlZiBuYW1lICovCisJcmV0dXJuIHJldCAtIHVzZWQgKyBsZW47Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zaG9ydGVuZWRfcmVmKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwljaGFyICpzID0gcmVmc19zaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihnZXRfbWFpbl9yZWZfc3RvcmUociksIHJlZiwgMCk7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZHN0cihidWYsIHMpOworCWZyZWUocyk7Cit9CisKK3N0YXRpYyBpbnQgYnJhbmNoX2ludGVycHJldF9hbGxvd2VkKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGFsbG93ZWQpCit7CisJaWYgKCFhbGxvd2VkKQorCQlyZXR1cm4gMTsKKworCWlmICgoYWxsb3dlZCAmIElOVEVSUFJFVF9CUkFOQ0hfTE9DQUwpICYmCisJICAgIHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQlyZXR1cm4gMTsKKwlpZiAoKGFsbG93ZWQgJiBJTlRFUlBSRVRfQlJBTkNIX1JFTU9URSkgJiYKKwkgICAgc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRlcnByZXRfYnJhbmNoX21hcmsoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJCSBpbnQgYXQsIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCQkgaW50ICgqZ2V0X21hcmspKGNvbnN0IGNoYXIgKiwgaW50KSwKKwkJCQkgY29uc3QgY2hhciAqKCpnZXRfZGF0YSkoc3RydWN0IGJyYW5jaCAqLAorCQkJCQkJCSBzdHJ1Y3Qgc3RyYnVmICopLAorCQkJCSB1bnNpZ25lZCBhbGxvd2VkKQoreworCWludCBsZW47CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwlsZW4gPSBnZXRfbWFyayhuYW1lICsgYXQsIG5hbWVsZW4gLSBhdCk7CisJaWYgKCFsZW4pCisJCXJldHVybiAtMTsKKworCWlmIChtZW1jaHIobmFtZSwgJzonLCBhdCkpCisJCXJldHVybiAtMTsKKworCWlmIChhdCkgeworCQljaGFyICpuYW1lX3N0ciA9IHhtZW1kdXB6KG5hbWUsIGF0KTsKKwkJYnJhbmNoID0gYnJhbmNoX2dldChuYW1lX3N0cik7CisJCWZyZWUobmFtZV9zdHIpOworCX0gZWxzZQorCQlicmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCisJdmFsdWUgPSBnZXRfZGF0YShicmFuY2gsICZlcnIpOworCWlmICghdmFsdWUpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCWlmICghYnJhbmNoX2ludGVycHJldF9hbGxvd2VkKHZhbHVlLCBhbGxvd2VkKSkKKwkJcmV0dXJuIC0xOworCisJc2V0X3Nob3J0ZW5lZF9yZWYociwgYnVmLCB2YWx1ZSk7CisJcmV0dXJuIGxlbiArIGF0OworfQorCitpbnQgcmVwb19pbnRlcnByZXRfYnJhbmNoX25hbWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJICAgICAgIHVuc2lnbmVkIGFsbG93ZWQpCit7CisJY2hhciAqYXQ7CisJY29uc3QgY2hhciAqc3RhcnQ7CisJaW50IGxlbjsKKworCWlmICghbmFtZWxlbikKKwkJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKworCWlmICghYWxsb3dlZCB8fCAoYWxsb3dlZCAmIElOVEVSUFJFVF9CUkFOQ0hfTE9DQUwpKSB7CisJCWxlbiA9IGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQociwgbmFtZSwgbmFtZWxlbiwgYnVmKTsKKwkJaWYgKCFsZW4pIHsKKwkJCXJldHVybiBsZW47IC8qIHN5bnRheCBPaywgbm90IGVub3VnaCBzd2l0Y2hlcyAqLworCQl9IGVsc2UgaWYgKGxlbiA+IDApIHsKKwkJCWlmIChsZW4gPT0gbmFtZWxlbikKKwkJCQlyZXR1cm4gbGVuOyAvKiBjb25zdW1lZCBhbGwgKi8KKwkJCWVsc2UKKwkJCQlyZXR1cm4gcmVpbnRlcnByZXQociwgbmFtZSwgbmFtZWxlbiwgbGVuLCBidWYsIGFsbG93ZWQpOworCQl9CisJfQorCisJZm9yIChzdGFydCA9IG5hbWU7CisJICAgICAoYXQgPSBtZW1jaHIoc3RhcnQsICdAJywgbmFtZWxlbiAtIChzdGFydCAtIG5hbWUpKSk7CisJICAgICBzdGFydCA9IGF0ICsgMSkgeworCisJCWlmICghYWxsb3dlZCB8fCAoYWxsb3dlZCAmIElOVEVSUFJFVF9CUkFOQ0hfSEVBRCkpIHsKKwkJCWxlbiA9IGludGVycHJldF9lbXB0eV9hdChuYW1lLCBuYW1lbGVuLCBhdCAtIG5hbWUsIGJ1Zik7CisJCQlpZiAobGVuID4gMCkKKwkJCQlyZXR1cm4gcmVpbnRlcnByZXQociwgbmFtZSwgbmFtZWxlbiwgbGVuLCBidWYsCisJCQkJCQkgICBhbGxvd2VkKTsKKwkJfQorCisJCWxlbiA9IGludGVycHJldF9icmFuY2hfbWFyayhyLCBuYW1lLCBuYW1lbGVuLCBhdCAtIG5hbWUsIGJ1ZiwKKwkJCQkJICAgIHVwc3RyZWFtX21hcmssIGJyYW5jaF9nZXRfdXBzdHJlYW0sCisJCQkJCSAgICBhbGxvd2VkKTsKKwkJaWYgKGxlbiA+IDApCisJCQlyZXR1cm4gbGVuOworCisJCWxlbiA9IGludGVycHJldF9icmFuY2hfbWFyayhyLCBuYW1lLCBuYW1lbGVuLCBhdCAtIG5hbWUsIGJ1ZiwKKwkJCQkJICAgIHB1c2hfbWFyaywgYnJhbmNoX2dldF9wdXNoLAorCQkJCQkgICAgYWxsb3dlZCk7CisJCWlmIChsZW4gPiAwKQorCQkJcmV0dXJuIGxlbjsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgc3RyYnVmX2JyYW5jaG5hbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGFsbG93ZWQpCit7CisJaW50IGxlbiA9IHN0cmxlbihuYW1lKTsKKwlpbnQgdXNlZCA9IGludGVycHJldF9icmFuY2hfbmFtZShuYW1lLCBsZW4sIHNiLCBhbGxvd2VkKTsKKworCWlmICh1c2VkIDwgMCkKKwkJdXNlZCA9IDA7CisJc3RyYnVmX2FkZChzYiwgbmFtZSArIHVzZWQsIGxlbiAtIHVzZWQpOworfQorCitpbnQgc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKHN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQlzdHJidWZfYnJhbmNobmFtZShzYiwgbmFtZSwgSU5URVJQUkVUX0JSQU5DSF9MT0NBTCk7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKHNiLCBuYW1lKTsKKworCS8qCisJICogVGhpcyBzcGxpY2UgbXVzdCBiZSBkb25lIGV2ZW4gaWYgd2UgZW5kIHVwIHJlamVjdGluZyB0aGUKKwkgKiBuYW1lOyBidWlsdGluL2JyYW5jaC5jOjpjb3B5X29yX3JlbmFtZV9icmFuY2goKSBzdGlsbCB3YW50cworCSAqIHRvIHNlZSB3aGF0IHRoZSBuYW1lIGV4cGFuZGVkIHRvIHNvIHRoYXQgImJyYW5jaCAtbSIgY2FuIGJlCisJICogdXNlZCBhcyBhIHRvb2wgdG8gY29ycmVjdCBlYXJsaWVyIG1pc3Rha2VzLgorCSAqLworCXN0cmJ1Zl9zcGxpY2Uoc2IsIDAsIDAsICJyZWZzL2hlYWRzLyIsIDExKTsKKworCWlmICgqbmFtZSA9PSAnLScgfHwKKwkgICAgIXN0cmNtcChzYi0+YnVmLCAicmVmcy9oZWFkcy9IRUFEIikpCisJCXJldHVybiAtMTsKKworCXJldHVybiBjaGVja19yZWZuYW1lX2Zvcm1hdChzYi0+YnVmLCAwKTsKK30KKworLyoKKyAqIFRoaXMgaXMgbGlrZSAiZ2V0X29pZF9iYXNpYygpIiwgZXhjZXB0IGl0IGFsbG93cyAib2JqZWN0IElEIGV4cHJlc3Npb25zIiwKKyAqIG5vdGFibHkgInh5el4iIGZvciAicGFyZW50IG9mIHh5eiIKKyAqLworaW50IHJlcG9fZ2V0X29pZChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9vaWRfd2l0aF9jb250ZXh0KHIsIG5hbWUsIDAsIG9pZCwgJnVudXNlZCk7Cit9CisKKy8qCisgKiBUaGlzIHJldHVybnMgYSBub24temVybyB2YWx1ZSBpZiB0aGUgc3RyaW5nIChidWlsdCB1c2luZyBwcmludGYKKyAqIGZvcm1hdCBhbmQgdGhlIGdpdmVuIGFyZ3VtZW50cykgaXMgbm90IGEgdmFsaWQgb2JqZWN0LgorICovCitpbnQgZ2V0X29pZGYoc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldCA9IGdldF9vaWQoc2IuYnVmLCBvaWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTWFueSBjYWxsZXJzIGtub3cgdGhhdCB0aGUgdXNlciBtZWFudCB0byBuYW1lIGEgY29tbWl0LWlzaCBieQorICogc3ludGFjdGljYWwgcG9zaXRpb25zIHdoZXJlIHRoZSBvYmplY3QgbmFtZSBhcHBlYXJzLiAgQ2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbiBhbGxvd3MgdGhlIG1hY2hpbmVyeSB0byBkaXNhbWJpZ3VhdGUgc2hvcnRlci10aGFuLXVuaXF1ZQorICogYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWVzIGJldHdlZW4gY29tbWl0LWlzaCBhbmQgb3RoZXJzLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgTk9UIGVycm9yIG91dCB3aGVuIHRoZSBuYW1lZCBvYmplY3QgaXMgbm90IGEKKyAqIGNvbW1pdC1pc2guIEl0IGlzIG1lcmVseSB0byBnaXZlIGEgaGludCB0byB0aGUgZGlzYW1iaWd1YXRpb24KKyAqIG1hY2hpbmVyeS4KKyAqLworaW50IHJlcG9fZ2V0X29pZF9jb21taXR0aXNoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9vaWRfd2l0aF9jb250ZXh0KHIsIG5hbWUsIEdFVF9PSURfQ09NTUlUVElTSCwKKwkJCQkgICAgb2lkLCAmdW51c2VkKTsKK30KKworaW50IHJlcG9fZ2V0X29pZF90cmVlaXNoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9vaWRfd2l0aF9jb250ZXh0KHIsIG5hbWUsIEdFVF9PSURfVFJFRUlTSCwKKwkJCQkgICAgb2lkLCAmdW51c2VkKTsKK30KKworaW50IHJlcG9fZ2V0X29pZF9jb21taXQoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQljb25zdCBjaGFyICpuYW1lLAorCQkJc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9vaWRfd2l0aF9jb250ZXh0KHIsIG5hbWUsIEdFVF9PSURfQ09NTUlULAorCQkJCSAgICBvaWQsICZ1bnVzZWQpOworfQorCitpbnQgcmVwb19nZXRfb2lkX3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfb2lkX3dpdGhfY29udGV4dChyLCBuYW1lLCBHRVRfT0lEX1RSRUUsCisJCQkJICAgIG9pZCwgJnVudXNlZCk7Cit9CisKK2ludCByZXBvX2dldF9vaWRfYmxvYihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9vaWRfd2l0aF9jb250ZXh0KHIsIG5hbWUsIEdFVF9PSURfQkxPQiwKKwkJCQkgICAgb2lkLCAmdW51c2VkKTsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIG9iamVjdF9uYW1lOmZpbGVuYW1lIGRvZXNuJ3QgZXhpc3QuICovCitzdGF0aWMgdm9pZCBkaWFnbm9zZV9pbnZhbGlkX29pZF9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpvYmplY3RfbmFtZSwKKwkJCQkgICAgICBpbnQgb2JqZWN0X25hbWVfbGVuKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXVuc2lnbmVkIHNob3J0IG1vZGU7CisKKwlpZiAoIXByZWZpeCkKKwkJcHJlZml4ID0gIiI7CisKKwlpZiAoZmlsZV9leGlzdHMoZmlsZW5hbWUpKQorCQlkaWUoXygicGF0aCAnJXMnIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluICclLipzJyIpLAorCQkgICAgZmlsZW5hbWUsIG9iamVjdF9uYW1lX2xlbiwgb2JqZWN0X25hbWUpOworCWlmIChpc19taXNzaW5nX2ZpbGVfZXJyb3IoZXJybm8pKSB7CisJCWNoYXIgKmZ1bGxuYW1lID0geHN0cmZtdCgiJXMlcyIsIHByZWZpeCwgZmlsZW5hbWUpOworCisJCWlmICghZ2V0X3RyZWVfZW50cnkociwgdHJlZV9vaWQsIGZ1bGxuYW1lLCAmb2lkLCAmbW9kZSkpIHsKKwkJCWRpZShfKCJwYXRoICclcycgZXhpc3RzLCBidXQgbm90ICclcydcbiIKKwkJCSAgICAiaGludDogRGlkIHlvdSBtZWFuICclLipzOiVzJyBha2EgJyUuKnM6Li8lcyc/IiksCisJCQkgICAgZnVsbG5hbWUsCisJCQkgICAgZmlsZW5hbWUsCisJCQkgICAgb2JqZWN0X25hbWVfbGVuLCBvYmplY3RfbmFtZSwKKwkJCSAgICBmdWxsbmFtZSwKKwkJCSAgICBvYmplY3RfbmFtZV9sZW4sIG9iamVjdF9uYW1lLAorCQkJICAgIGZpbGVuYW1lKTsKKwkJfQorCQlkaWUoXygicGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IGluICclLipzJyIpLAorCQkgICAgZmlsZW5hbWUsIG9iamVjdF9uYW1lX2xlbiwgb2JqZWN0X25hbWUpOworCX0KK30KKworLyogTXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIDpzdGFnZTpmaWxlbmFtZSBkb2Vzbid0IGV4aXN0LiAqLworc3RhdGljIHZvaWQgZGlhZ25vc2VfaW52YWxpZF9pbmRleF9wYXRoKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQlpbnQgc3RhZ2UsCisJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSByLT5pbmRleDsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBwb3M7CisJdW5zaWduZWQgbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CisJc3RydWN0IHN0cmJ1ZiBmdWxsbmFtZSA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwcmVmaXgpCisJCXByZWZpeCA9ICIiOworCisJLyogV3Jvbmcgc3RhZ2UgbnVtYmVyPyAqLworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgZmlsZW5hbWUsIG5hbWVsZW4pOworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtcG9zIC0gMTsKKwlpZiAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpID09IG5hbWVsZW4gJiYKKwkJICAgICFtZW1jbXAoY2UtPm5hbWUsIGZpbGVuYW1lLCBuYW1lbGVuKSkKKwkJCWRpZShfKCJwYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90IGF0IHN0YWdlICVkXG4iCisJCQkgICAgImhpbnQ6IERpZCB5b3UgbWVhbiAnOiVkOiVzJz8iKSwKKwkJCSAgICBmaWxlbmFtZSwgc3RhZ2UsCisJCQkgICAgY2Vfc3RhZ2UoY2UpLCBmaWxlbmFtZSk7CisJfQorCisJLyogQ29uZnVzaW9uIGJldHdlZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIGZpbGVuYW1lcz8gKi8KKwlzdHJidWZfYWRkc3RyKCZmdWxsbmFtZSwgcHJlZml4KTsKKwlzdHJidWZfYWRkc3RyKCZmdWxsbmFtZSwgZmlsZW5hbWUpOworCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgZnVsbG5hbWUuYnVmLCBmdWxsbmFtZS5sZW4pOworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtcG9zIC0gMTsKKwlpZiAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpID09IGZ1bGxuYW1lLmxlbiAmJgorCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgZnVsbG5hbWUuYnVmLCBmdWxsbmFtZS5sZW4pKQorCQkJZGllKF8oInBhdGggJyVzJyBpcyBpbiB0aGUgaW5kZXgsIGJ1dCBub3QgJyVzJ1xuIgorCQkJICAgICJoaW50OiBEaWQgeW91IG1lYW4gJzolZDolcycgYWthICc6JWQ6Li8lcyc/IiksCisJCQkgICAgZnVsbG5hbWUuYnVmLCBmaWxlbmFtZSwKKwkJCSAgICBjZV9zdGFnZShjZSksIGZ1bGxuYW1lLmJ1ZiwKKwkJCSAgICBjZV9zdGFnZShjZSksIGZpbGVuYW1lKTsKKwl9CisKKwlpZiAocmVwb19maWxlX2V4aXN0cyhyLCBmaWxlbmFtZSkpCisJCWRpZShfKCJwYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4IiksIGZpbGVuYW1lKTsKKwlpZiAoaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycm5vKSkKKwkJZGllKF8oInBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIiksCisJCSAgICBmaWxlbmFtZSk7CisKKwlzdHJidWZfcmVsZWFzZSgmZnVsbG5hbWUpOworfQorCisKK3N0YXRpYyBjaGFyICpyZXNvbHZlX3JlbGF0aXZlX3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnJlbCkKK3sKKwlpZiAoIXN0YXJ0c193aXRoKHJlbCwgIi4vIikgJiYgIXN0YXJ0c193aXRoKHJlbCwgIi4uLyIpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyICE9IHRoZV9yZXBvc2l0b3J5IHx8ICFpc19pbnNpZGVfd29ya190cmVlKCkpCisJCWRpZShfKCJyZWxhdGl2ZSBwYXRoIHN5bnRheCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgd29ya2luZyB0cmVlIikpOworCisJLyogZGllKCkgaW5zaWRlIHByZWZpeF9wYXRoKCkgaWYgcmVzb2x2ZWQgcGF0aCBpcyBvdXRzaWRlIHdvcmt0cmVlICovCisJcmV0dXJuIHByZWZpeF9wYXRoKHN0YXJ0dXBfaW5mby0+cHJlZml4LAorCQkJICAgc3RhcnR1cF9pbmZvLT5wcmVmaXggPyBzdHJsZW4oc3RhcnR1cF9pbmZvLT5wcmVmaXgpIDogMCwKKwkJCSAgIHJlbCk7Cit9CisKK3N0YXRpYyBlbnVtIGdldF9vaWRfcmVzdWx0IGdldF9vaWRfd2l0aF9jb250ZXh0XzEoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgdW5zaWduZWQgZmxhZ3MsCisJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICBzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgKm9jKQoreworCWludCByZXQsIGJyYWNrZXRfZGVwdGg7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJY29uc3QgY2hhciAqY3A7CisJaW50IG9ubHlfdG9fZGllID0gZmxhZ3MgJiBHRVRfT0lEX09OTFlfVE9fRElFOworCisJaWYgKG9ubHlfdG9fZGllKQorCQlmbGFncyB8PSBHRVRfT0lEX1FVSUVUTFk7CisKKwltZW1zZXQob2MsIDAsIHNpemVvZigqb2MpKTsKKwlvYy0+bW9kZSA9IFNfSUZJTlZBTElEOworCXN0cmJ1Zl9pbml0KCZvYy0+c3ltbGlua19wYXRoLCAwKTsKKwlyZXQgPSBnZXRfb2lkXzEocmVwbywgbmFtZSwgbmFtZWxlbiwgb2lkLCBmbGFncyk7CisJaWYgKCFyZXQpCisJCXJldHVybiByZXQ7CisJLyoKKwkgKiBzaGExOnBhdGggLS0+IG9iamVjdCBuYW1lIG9mIHBhdGggaW4gZW50IHNoYTEKKwkgKiA6cGF0aCAtPiBvYmplY3QgbmFtZSBvZiBhYnNvbHV0ZSBwYXRoIGluIGluZGV4CisJICogOi4vcGF0aCAtPiBvYmplY3QgbmFtZSBvZiBwYXRoIHJlbGF0aXZlIHRvIGN3ZCBpbiBpbmRleAorCSAqIDpbMC0zXTpwYXRoIC0+IG9iamVjdCBuYW1lIG9mIHBhdGggaW4gaW5kZXggYXQgc3RhZ2UKKwkgKiA6L2ZvbyAtPiByZWNlbnQgY29tbWl0IG1hdGNoaW5nIGZvbworCSAqLworCWlmIChuYW1lWzBdID09ICc6JykgeworCQlpbnQgc3RhZ2UgPSAwOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCQljaGFyICpuZXdfcGF0aCA9IE5VTEw7CisJCWludCBwb3M7CisJCWlmICghb25seV90b19kaWUgJiYgbmFtZWxlbiA+IDIgJiYgbmFtZVsxXSA9PSAnLycpIHsKKwkJCXN0cnVjdCBoYW5kbGVfb25lX3JlZl9jYiBjYjsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CisKKwkJCWNiLnJlcG8gPSByZXBvOworCQkJY2IubGlzdCA9ICZsaXN0OworCQkJcmVmc19mb3JfZWFjaF9yZWYocmVwby0+cmVmcywgaGFuZGxlX29uZV9yZWYsICZjYik7CisJCQlyZWZzX2hlYWRfcmVmKHJlcG8tPnJlZnMsIGhhbmRsZV9vbmVfcmVmLCAmY2IpOworCQkJY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKCZsaXN0KTsKKwkJCXJldHVybiBnZXRfb2lkX29uZWxpbmUocmVwbywgbmFtZSArIDIsIG9pZCwgbGlzdCk7CisJCX0KKwkJaWYgKG5hbWVsZW4gPCAzIHx8CisJCSAgICBuYW1lWzJdICE9ICc6JyB8fAorCQkgICAgbmFtZVsxXSA8ICcwJyB8fCAnMycgPCBuYW1lWzFdKQorCQkJY3AgPSBuYW1lICsgMTsKKwkJZWxzZSB7CisJCQlzdGFnZSA9IG5hbWVbMV0gLSAnMCc7CisJCQljcCA9IG5hbWUgKyAzOworCQl9CisJCW5ld19wYXRoID0gcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoKHJlcG8sIGNwKTsKKwkJaWYgKCFuZXdfcGF0aCkgeworCQkJbmFtZWxlbiA9IG5hbWVsZW4gLSAoY3AgLSBuYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWNwID0gbmV3X3BhdGg7CisJCQluYW1lbGVuID0gc3RybGVuKGNwKTsKKwkJfQorCisJCWlmIChmbGFncyAmIEdFVF9PSURfUkVDT1JEX1BBVEgpCisJCQlvYy0+cGF0aCA9IHhzdHJkdXAoY3ApOworCisJCWlmICghcmVwby0+aW5kZXggfHwgIXJlcG8tPmluZGV4LT5jYWNoZSkKKwkJCXJlcG9fcmVhZF9pbmRleChyZXBvKTsKKwkJcG9zID0gaW5kZXhfbmFtZV9wb3MocmVwby0+aW5kZXgsIGNwLCBuYW1lbGVuKTsKKwkJaWYgKHBvcyA8IDApCisJCQlwb3MgPSAtcG9zIC0gMTsKKwkJd2hpbGUgKHBvcyA8IHJlcG8tPmluZGV4LT5jYWNoZV9ucikgeworCQkJY2UgPSByZXBvLT5pbmRleC0+Y2FjaGVbcG9zXTsKKwkJCWlmIChjZV9uYW1lbGVuKGNlKSAhPSBuYW1lbGVuIHx8CisJCQkgICAgbWVtY21wKGNlLT5uYW1lLCBjcCwgbmFtZWxlbikpCisJCQkJYnJlYWs7CisJCQlpZiAoY2Vfc3RhZ2UoY2UpID09IHN0YWdlKSB7CisJCQkJb2lkY3B5KG9pZCwgJmNlLT5vaWQpOworCQkJCW9jLT5tb2RlID0gY2UtPmNlX21vZGU7CisJCQkJZnJlZShuZXdfcGF0aCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlwb3MrKzsKKwkJfQorCQlpZiAob25seV90b19kaWUgJiYgbmFtZVsxXSAmJiBuYW1lWzFdICE9ICcvJykKKwkJCWRpYWdub3NlX2ludmFsaWRfaW5kZXhfcGF0aChyZXBvLCBzdGFnZSwgcHJlZml4LCBjcCk7CisJCWZyZWUobmV3X3BhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCWZvciAoY3AgPSBuYW1lLCBicmFja2V0X2RlcHRoID0gMDsgKmNwOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ3snKQorCQkJYnJhY2tldF9kZXB0aCsrOworCQllbHNlIGlmIChicmFja2V0X2RlcHRoICYmICpjcCA9PSAnfScpCisJCQlicmFja2V0X2RlcHRoLS07CisJCWVsc2UgaWYgKCFicmFja2V0X2RlcHRoICYmICpjcCA9PSAnOicpCisJCQlicmVhazsKKwl9CisJaWYgKCpjcCA9PSAnOicpIHsKKwkJc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZDsKKwkJaW50IGxlbiA9IGNwIC0gbmFtZTsKKwkJdW5zaWduZWQgc3ViX2ZsYWdzID0gZmxhZ3M7CisKKwkJc3ViX2ZsYWdzICY9IH5HRVRfT0lEX0RJU0FNQklHVUFUT1JTOworCQlzdWJfZmxhZ3MgfD0gR0VUX09JRF9UUkVFSVNIOworCisJCWlmICghZ2V0X29pZF8xKHJlcG8sIG5hbWUsIGxlbiwgJnRyZWVfb2lkLCBzdWJfZmxhZ3MpKSB7CisJCQljb25zdCBjaGFyICpmaWxlbmFtZSA9IGNwKzE7CisJCQljaGFyICpuZXdfZmlsZW5hbWUgPSBOVUxMOworCisJCQluZXdfZmlsZW5hbWUgPSByZXNvbHZlX3JlbGF0aXZlX3BhdGgocmVwbywgZmlsZW5hbWUpOworCQkJaWYgKG5ld19maWxlbmFtZSkKKwkJCQlmaWxlbmFtZSA9IG5ld19maWxlbmFtZTsKKwkJCWlmIChmbGFncyAmIEdFVF9PSURfRk9MTE9XX1NZTUxJTktTKSB7CisJCQkJcmV0ID0gZ2V0X3RyZWVfZW50cnlfZm9sbG93X3N5bWxpbmtzKHJlcG8sICZ0cmVlX29pZCwKKwkJCQkJZmlsZW5hbWUsIG9pZCwgJm9jLT5zeW1saW5rX3BhdGgsCisJCQkJCSZvYy0+bW9kZSk7CisJCQl9IGVsc2UgeworCQkJCXJldCA9IGdldF90cmVlX2VudHJ5KHJlcG8sICZ0cmVlX29pZCwgZmlsZW5hbWUsIG9pZCwKKwkJCQkJCSAgICAgJm9jLT5tb2RlKTsKKwkJCQlpZiAocmV0ICYmIG9ubHlfdG9fZGllKSB7CisJCQkJCWRpYWdub3NlX2ludmFsaWRfb2lkX3BhdGgocmVwbywgcHJlZml4LAorCQkJCQkJCQkgICBmaWxlbmFtZSwKKwkJCQkJCQkJICAgJnRyZWVfb2lkLAorCQkJCQkJCQkgICBuYW1lLCBsZW4pOworCQkJCX0KKwkJCX0KKwkJCWlmIChmbGFncyAmIEdFVF9PSURfUkVDT1JEX1BBVEgpCisJCQkJb2MtPnBhdGggPSB4c3RyZHVwKGZpbGVuYW1lKTsKKworCQkJZnJlZShuZXdfZmlsZW5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIHsKKwkJCWlmIChvbmx5X3RvX2RpZSkKKwkJCQlkaWUoXygiaW52YWxpZCBvYmplY3QgbmFtZSAnJS4qcycuIiksIGxlbiwgbmFtZSk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHlvdSBrbm93ICJuYW1lIiBnaXZlbiBieSB0aGUgZW5kIHVzZXIgbXVzdAorICogbmFtZSBhbiBvYmplY3QgYnV0IGl0IGRvZXNuJ3Q7IHRoZSBmdW5jdGlvbiBfbWF5XyBkaWUgd2l0aCBhIGJldHRlcgorICogZGlhZ25vc3RpYyBtZXNzYWdlIHRoYW4gIm5vIHN1Y2ggb2JqZWN0ICduYW1lJyIsIGUuZy4gIlBhdGggJ2RvYycgZG9lcyBub3QKKyAqIGV4aXN0IGluICdIRUFEJyIgd2hlbiBnaXZlbiAiSEVBRDpkb2MiLCBvciBpdCBtYXkgcmV0dXJuIGluIHdoaWNoIGNhc2UKKyAqIHlvdSBoYXZlIGEgY2hhbmNlIHRvIGRpYWdub3NlIHRoZSBlcnJvciBmdXJ0aGVyLgorICovCit2b2lkIG1heWJlX2RpZV9vbl9taXNzcGVsdF9vYmplY3RfbmFtZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlnZXRfb2lkX3dpdGhfY29udGV4dF8xKHIsIG5hbWUsIEdFVF9PSURfT05MWV9UT19ESUUsCisJCQkgICAgICAgcHJlZml4LCAmb2lkLCAmb2MpOworfQorCitlbnVtIGdldF9vaWRfcmVzdWx0IGdldF9vaWRfd2l0aF9jb250ZXh0KHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCQkgY29uc3QgY2hhciAqc3RyLAorCQkJCQkgdW5zaWduZWQgZmxhZ3MsCisJCQkJCSBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJCSBzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgKm9jKQoreworCWlmIChmbGFncyAmIEdFVF9PSURfRk9MTE9XX1NZTUxJTktTICYmIGZsYWdzICYgR0VUX09JRF9PTkxZX1RPX0RJRSkKKwkJQlVHKCJpbmNvbXBhdGlibGUgZmxhZ3MgZm9yIGdldF9zaGExX3dpdGhfY29udGV4dCIpOworCXJldHVybiBnZXRfb2lkX3dpdGhfY29udGV4dF8xKHJlcG8sIHN0ciwgZmxhZ3MsIE5VTEwsIG9pZCwgb2MpOworfQpkaWZmIC0tZ2l0IGEvc2hhMWNvbGxpc2lvbmRldGVjdGlvbiBiL3NoYTFjb2xsaXNpb25kZXRlY3Rpb24KbmV3IGZpbGUgbW9kZSAxNjAwMDAKaW5kZXggMDAwMDAwMC4uODU1ODI3YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFjb2xsaXNpb25kZXRlY3Rpb24KQEAgLTAsMCArMSBAQAorU3VicHJvamVjdCBjb21taXQgODU1ODI3YzU4M2JjMzA2NDViYTQyNzg4NWNhYTQwYzViODE3NjRkMgpkaWZmIC0tZ2l0IGEvc2hhMWRjLy5naXRhdHRyaWJ1dGVzIGIvc2hhMWRjLy5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNTNmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExZGMvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKiB3aGl0ZXNwYWNlPS1pbmRlbnQtd2l0aC1ub24tdGFiCmRpZmYgLS1naXQgYS9zaGExZGMvTElDRU5TRS50eHQgYi9zaGExZGMvTElDRU5TRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzZTZhMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFkYy9MSUNFTlNFLnR4dApAQCAtMCwwICsxLDMwIEBACitNSVQgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMTc6CisgICAgTWFyYyBTdGV2ZW5zCisgICAgQ3J5cHRvbG9neSBHcm91cAorICAgIENlbnRydW0gV2lza3VuZGUgJiBJbmZvcm1hdGljYQorICAgIFAuTy4gQm94IDk0MDc5LCAxMDkwIEdCIEFtc3RlcmRhbSwgTmV0aGVybGFuZHMKKyAgICBtYXJjQG1hcmMtc3RldmVucy5ubAorCisgICAgRGFuIFNodW1vdworICAgIE1pY3Jvc29mdCBSZXNlYXJjaAorICAgIGRhbnNodUBtaWNyb3NvZnQuY29tCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvc2hhMWRjL3NoYTEuYyBiL3NoYTFkYy9zaGExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkZTJjYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFkYy9zaGExLmMKQEAgLTAsMCArMSwxOTExIEBACisvKioqCisqIENvcHlyaWdodCAyMDE3IE1hcmMgU3RldmVucyA8bWFyY0BtYXJjLXN0ZXZlbnMubmw+LCBEYW4gU2h1bW93IChkYW5zaHVAbWljcm9zb2Z0LmNvbSkKKyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBTb2Z0d2FyZSBMaWNlbnNlLgorKiBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRS50eHQgb3IgY29weSBhdAorKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorKioqLworCisjaWZuZGVmIFNIQTFEQ19OT19TVEFOREFSRF9JTkNMVURFUworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG1lbW9yeS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX191bml4X18KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogbWFrZSBzdXJlIG1hY3JvcyBsaWtlIF9CSUdfRU5ESUFOIHZpc2libGUgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBTSEExRENfQ1VTVE9NX0lOQ0xVREVfU0hBMV9DCisjaW5jbHVkZSBTSEExRENfQ1VTVE9NX0lOQ0xVREVfU0hBMV9DCisjZW5kaWYKKworI2lmbmRlZiBTSEExRENfSU5JVF9TQUZFX0hBU0hfREVGQVVMVAorI2RlZmluZSBTSEExRENfSU5JVF9TQUZFX0hBU0hfREVGQVVMVCAxCisjZW5kaWYKKworI2luY2x1ZGUgInNoYTEuaCIKKyNpbmNsdWRlICJ1YmNfY2hlY2suaCIKKworI2lmIChkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX2FtZDY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX194ODZfNjQpIHx8IFwKKyAgICAgZGVmaW5lZChpMzg2KSB8fCBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2k0ODZfXykgIHx8IFwKKyAgICAgZGVmaW5lZChfX2k1ODZfXykgfHwgZGVmaW5lZChfX2k2ODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9fWDg2X18pIHx8IFwKKyAgICAgZGVmaW5lZChfWDg2XykgfHwgZGVmaW5lZChfX1RIV19JTlRFTF9fKSB8fCBkZWZpbmVkKF9fSTg2X18pIHx8IGRlZmluZWQoX19JTlRFTF9fKSB8fCBcCisgICAgIGRlZmluZWQoX18zODYpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9NX0FNRDY0KSkKKyNkZWZpbmUgU0hBMURDX09OX0lOVEVMX0xJS0VfUFJPQ0VTU09SCisjZW5kaWYKKworLyoKKyAgIEJlY2F1c2UgTGl0dGxlLUVuZGlhbiBhcmNoaXRlY3R1cmVzIGFyZSBtb3N0IGNvbW1vbiwKKyAgIHdlIG9ubHkgc2V0IFNIQTFEQ19CSUdFTkRJQU4gaWYgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgbWV0LgorICAgTm90ZSB0aGF0IGFsbCBNU0ZUIHBsYXRmb3JtcyBhcmUgbGl0dGxlIGVuZGlhbiwKKyAgIHNvIG5vbmUgb2YgdGhlc2Ugd2lsbCBiZSBkZWZpbmVkIHVuZGVyIHRoZSBNU0MgY29tcGlsZXIuCisgICBJZiB5b3UgYXJlIGNvbXBpbGluZyBvbiBhIGJpZyBlbmRpYW4gcGxhdGZvcm0gYW5kIHlvdXIgY29tcGlsZXIgZG9lcyBub3QgZGVmaW5lIG9uZSBvZiB0aGVzZSwKKyAgIHlvdSB3aWxsIGhhdmUgdG8gYWRkIHdoYXRldmVyIG1hY3JvcyB5b3VyIHRvb2wgY2hhaW4gZGVmaW5lcyB0byBpbmRpY2F0ZSBCaWctRW5kaWFubmVzcy4KKyAqLworCisjaWYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgJiYgZGVmaW5lZChfX09SREVSX0JJR19FTkRJQU5fXykKKy8qCisgKiBTaG91bGQgZGV0ZWN0IEJpZyBFbmRpYW4gdW5kZXIgR0NDIHNpbmNlIGF0IGxlYXN0IDQuNi4wIChnY2Mgc3ZuCisgKiByZXYgIzE2NTg4MSkuIFNlZQorICogaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2NwcC9Db21tb24tUHJlZGVmaW5lZC1NYWNyb3MuaHRtbAorICoKKyAqIFRoaXMgYWxzbyB3b3JrcyB1bmRlciBjbGFuZyBzaW5jZSAzLjIsIGl0IGNvcGllZCB0aGUgR0NDLWlzbS4gU2VlCisgKiBjbGFuZy5naXQncyAzYjE5OGE5N2QyICgiUHJlcHJvY2Vzc29yOiBhZGQgX19CWVRFX09SREVSX18KKyAqIHByZWRlZmluZWQgbWFjcm8iLCAyMDEyLTA3LTI3KQorICovCisjaWYgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18KKyNkZWZpbmUgU0hBMURDX0JJR0VORElBTgorI2VuZGlmCisKKy8qIE5vdCB1bmRlciBHQ0MtYWxpa2UgKi8KKyNlbGlmIGRlZmluZWQoX19CWVRFX09SREVSKSAmJiBkZWZpbmVkKF9fQklHX0VORElBTikKKy8qCisgKiBTaG91bGQgZGV0ZWN0IEJpZyBFbmRpYW4gdW5kZXIgZ2xpYmMuZ2l0IHNpbmNlIDE0MjQ1ZWI3MGUgKCJlbnRlcmVkCisgKiBpbnRvIFJDUyIsIDE5OTItMTEtMjUpLiBEZWZpbmVkIGluIDxlbmRpYW4uaD4gd2hpY2ggd2lsbCBoYXZlIGJlZW4KKyAqIGJyb3VnaHQgaW4gYnkgc3RhbmRhcmQgaGVhZGVycy4gU2VlIGdsaWJjLmdpdCBhbmQKKyAqIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvcHJlZGVmL3dpa2kvRW5kaWFubmVzcy8KKyAqLworI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKyNkZWZpbmUgU0hBMURDX0JJR0VORElBTgorI2VuZGlmCisKKy8qIE5vdCB1bmRlciBHQ0MtYWxpa2Ugb3IgZ2xpYmMgKi8KKyNlbGlmIGRlZmluZWQoX0JZVEVfT1JERVIpICYmIGRlZmluZWQoX0JJR19FTkRJQU4pICYmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pCisvKgorICogKkJTRCBhbmQgbmV3bGliIChlbWJlZGRlZCBsaW51eCwgY3lnd2luLCBldGMpLgorICogdGhlIGRlZmluZWQoX0JJR19FTkRJQU4pICYmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pIHBhcnQgcHJldmVudHMKKyAqIHRoaXMgY29uZGl0aW9uIGZyb20gbWF0Y2hpbmcgd2l0aCBTb2xhcmlzL3NwYXJjLgorICogKFNvbGFyaXMgZGVmaW5lcyBvbmx5IG9uZSBlbmRpYW4gbWFjcm8pCisgKi8KKyNpZiBfQllURV9PUkRFUiA9PSBfQklHX0VORElBTgorI2RlZmluZSBTSEExRENfQklHRU5ESUFOCisjZW5kaWYKKworLyogTm90IHVuZGVyIEdDQy1hbGlrZSBvciBnbGliYyBvciAqQlNEIG9yIG5ld2xpYiAqLworI2VsaWYgKGRlZmluZWQoX19BUk1FQl9fKSB8fCBkZWZpbmVkKF9fVEhVTUJFQl9fKSB8fCBkZWZpbmVkKF9fQUFSQ0g2NEVCX18pIHx8IFwKKyAgICAgICBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgXAorICAgICAgIGRlZmluZWQoX19zcGFyYykpCisvKgorICogU2hvdWxkIGRlZmluZSBCaWcgRW5kaWFuIGZvciBhIHdoaXRlbGlzdCBvZiBrbm93biBwcm9jZXNzb3JzLiBTZWUKKyAqIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvcHJlZGVmL3dpa2kvRW5kaWFubmVzcy8gYW5kCisgKiBodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvc2VydmVyLXN0b3JhZ2Uvc29sYXJpcy9wb3J0aW5ndG9zb2xhcmlzLTEzODUxNC5odG1sCisgKi8KKyNkZWZpbmUgU0hBMURDX0JJR0VORElBTgorCisvKiBOb3QgdW5kZXIgR0NDLWFsaWtlIG9yIGdsaWJjIG9yICpCU0Qgb3IgbmV3bGliIG9yIDxwcm9jZXNzb3Igd2hpdGVsaXN0PiAqLworI2VsaWYgKGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChfX2hwdXgpKQorCisvKgorICogRGVmaW5lcyBCaWcgRW5kaWFuIG9uIGEgd2hpdGVsaXN0IG9mIE9TcyB0aGF0IGFyZSBrbm93biB0byBiZSBCaWcKKyAqIEVuZGlhbi1vbmx5LiBTZWUKKyAqIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC85MzA1NjgyMy0yNzQwLWQwNzItMWViZC00NmI0NDBiMzNkN2VAZmVsdC5kZW1vbi5ubC8KKyAqLworI2RlZmluZSBTSEExRENfQklHRU5ESUFOCisKKy8qIE5vdCB1bmRlciBHQ0MtYWxpa2Ugb3IgZ2xpYmMgb3IgKkJTRCBvciBuZXdsaWIgb3IgPHByb2Nlc3NvciB3aGl0ZWxpc3Q+IG9yIDxvcyB3aGl0ZWxpc3Q+ICovCisjZWxpZiBkZWZpbmVkKFNIQTFEQ19PTl9JTlRFTF9MSUtFX1BST0NFU1NPUikKKy8qCisgKiBBcyBhIGxhc3QgcmVzb3J0IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlIHdlJ3JlIG5vdCAxMDAlIHN1cmUKKyAqIGFib3V0IGJlbG93LCB3ZSBibGFja2xpc3Qgc3BlY2lmaWMgcHJvY2Vzc29ycyBoZXJlLiBXZSBjb3VsZCBhZGQKKyAqIG1vcmUsIHNlZSBlLmcuIGh0dHBzOi8vd2lraS5kZWJpYW4ub3JnL0FyY2hpdGVjdHVyZVNwZWNpZmljc01lbW8KKyAqLworI2Vsc2UgLyogTm90IHVuZGVyIEdDQy1hbGlrZSBvciBnbGliYyBvciAqQlNEIG9yIG5ld2xpYiBvciA8cHJvY2Vzc29yIHdoaXRlbGlzdD4gb3IgPG9zIHdoaXRlbGlzdD4gb3IgPHByb2Nlc3NvciBibGFja2xpc3Q+ICovCisKKy8qIFdlIGRvIG5vdGhpbmcgbW9yZSBoZXJlIGZvciBub3cgKi8KKy8qI2Vycm9yICJVbmNvbW1lbnQgdGhpcyB0byBzZWUgaWYgeW91IGZhbGwgdGhyb3VnaCBhbGwgdGhlIGRldGVjdGlvbiIqLworCisjZW5kaWYgLyogQmlnIEVuZGlhbiBkZXRlY3Rpb24gKi8KKworI2lmIChkZWZpbmVkKFNIQTFEQ19GT1JDRV9MSVRUTEVFTkRJQU4pICYmIGRlZmluZWQoU0hBMURDX0JJR0VORElBTikpCisjdW5kZWYgU0hBMURDX0JJR0VORElBTgorI2VuZGlmCisjaWYgKGRlZmluZWQoU0hBMURDX0ZPUkNFX0JJR0VORElBTikgJiYgIWRlZmluZWQoU0hBMURDX0JJR0VORElBTikpCisjZGVmaW5lIFNIQTFEQ19CSUdFTkRJQU4KKyNlbmRpZgorLypFTkRJQU5ORVNTIFNFTEVDVElPTiovCisKKyNpZm5kZWYgU0hBMURDX0ZPUkNFX0FMSUdORURfQUNDRVNTCisjaWYgZGVmaW5lZChTSEExRENfRk9SQ0VfVU5BTElHTkVEX0FDQ0VTUykgfHwgZGVmaW5lZChTSEExRENfT05fSU5URUxfTElLRV9QUk9DRVNTT1IpCisjZGVmaW5lIFNIQTFEQ19BTExPV19VTkFMSUdORURfQUNDRVNTCisjZW5kaWYgLypVTkFMSUdORUQgQUNDRVNTIERFVEVDVElPTiovCisjZW5kaWYgLypGT1JDRSBBTElHTkVEIEFDQ0VTUyovCisKKyNkZWZpbmUgcm90YXRlX3JpZ2h0KHgsbikgKCgoeCk+PihuKSl8KCh4KTw8KDMyLShuKSkpKQorI2RlZmluZSByb3RhdGVfbGVmdCh4LG4pICAoKCh4KTw8KG4pKXwoKHgpPj4oMzItKG4pKSkpCisKKyNkZWZpbmUgc2hhMV9ic3dhcDMyKHgpIFwKKwl7eCA9ICgoeCA8PCA4KSAmIDB4RkYwMEZGMDApIHwgKCh4ID4+IDgpICYgMHhGRjAwRkYpOyB4ID0gKHggPDwgMTYpIHwgKHggPj4gMTYpO30KKworI2RlZmluZSBzaGExX21peChXLCB0KSAgKHJvdGF0ZV9sZWZ0KFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl0sIDEpKQorCisjaWZkZWYgU0hBMURDX0JJR0VORElBTgorCSNkZWZpbmUgc2hhMV9sb2FkKG0sIHQsIHRlbXApICB7IHRlbXAgPSBtW3RdOyB9CisjZWxzZQorCSNkZWZpbmUgc2hhMV9sb2FkKG0sIHQsIHRlbXApICB7IHRlbXAgPSBtW3RdOyBzaGExX2Jzd2FwMzIodGVtcCk7IH0KKyNlbmRpZgorCisjZGVmaW5lIHNoYTFfc3RvcmUoVywgdCwgeCkJKih2b2xhdGlsZSB1aW50MzJfdCAqKSZXW3RdID0geAorCisjZGVmaW5lIHNoYTFfZjEoYixjLGQpICgoZCleKChiKSYoKGMpXihkKSkpKQorI2RlZmluZSBzaGExX2YyKGIsYyxkKSAoKGIpXihjKV4oZCkpCisjZGVmaW5lIHNoYTFfZjMoYixjLGQpICgoKGIpJihjKSkrKChkKSYoKGIpXihjKSkpKQorI2RlZmluZSBzaGExX2Y0KGIsYyxkKSAoKGIpXihjKV4oZCkpCisKKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBlICs9IHJvdGF0ZV9sZWZ0KGEsIDUpICsgc2hhMV9mMShiLGMsZCkgKyAweDVBODI3OTk5ICsgbVt0XTsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorI2RlZmluZSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIG0sIHQpIFwKKwl7IGUgKz0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YyKGIsYyxkKSArIDB4NkVEOUVCQTEgKyBtW3RdOyBiID0gcm90YXRlX2xlZnQoYiwgMzApOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgZSArPSByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjMoYixjLGQpICsgMHg4RjFCQkNEQyArIG1bdF07IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBlICs9IHJvdGF0ZV9sZWZ0KGEsIDUpICsgc2hhMV9mNChiLGMsZCkgKyAweENBNjJDMUQ2ICsgbVt0XTsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorCisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgYiA9IHJvdGF0ZV9yaWdodChiLCAzMCk7IGUgLT0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YxKGIsYyxkKSArIDB4NUE4Mjc5OTkgKyBtW3RdOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgYiA9IHJvdGF0ZV9yaWdodChiLCAzMCk7IGUgLT0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YyKGIsYyxkKSArIDB4NkVEOUVCQTEgKyBtW3RdOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgYiA9IHJvdGF0ZV9yaWdodChiLCAzMCk7IGUgLT0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YzKGIsYyxkKSArIDB4OEYxQkJDREMgKyBtW3RdOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgYiA9IHJvdGF0ZV9yaWdodChiLCAzMCk7IGUgLT0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2Y0KGIsYyxkKSArIDB4Q0E2MkMxRDYgKyBtW3RdOyB9CisKKyNkZWZpbmUgU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChhLCBiLCBjLCBkLCBlLCBtLCBXLCB0LCB0ZW1wKSBcCisJe3NoYTFfbG9hZChtLCB0LCB0ZW1wKTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YxKGIsYyxkKSArIDB4NUE4Mjc5OTk7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7fQorCisjZGVmaW5lIFNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0VYUEFORChhLCBiLCBjLCBkLCBlLCBXLCB0LCB0ZW1wKSBcCisJe3RlbXAgPSBzaGExX21peChXLCB0KTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YxKGIsYyxkKSArIDB4NUE4Mjc5OTk7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKworI2RlZmluZSBTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCB0LCB0ZW1wKSBcCisJe3RlbXAgPSBzaGExX21peChXLCB0KTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YyKGIsYyxkKSArIDB4NkVEOUVCQTE7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKworI2RlZmluZSBTSEExQ09NUFJFU1NfRlVMTF9ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCB0LCB0ZW1wKSBcCisJe3RlbXAgPSBzaGExX21peChXLCB0KTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YzKGIsYyxkKSArIDB4OEYxQkJDREM7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKworI2RlZmluZSBTSEExQ09NUFJFU1NfRlVMTF9ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCB0LCB0ZW1wKSBcCisJe3RlbXAgPSBzaGExX21peChXLCB0KTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2Y0KGIsYyxkKSArIDB4Q0E2MkMxRDY7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKworCisjZGVmaW5lIFNIQTFfU1RPUkVfU1RBVEUoaSkgc3RhdGVzW2ldWzBdID0gYTsgc3RhdGVzW2ldWzFdID0gYjsgc3RhdGVzW2ldWzJdID0gYzsgc3RhdGVzW2ldWzNdID0gZDsgc3RhdGVzW2ldWzRdID0gZTsKKworI2lmZGVmIEJVSUxETk9DT0xMREVURUNUU0hBMUNPTVBSRVNTSU9OCit2b2lkIHNoYTFfY29tcHJlc3Npb24odWludDMyX3QgaWh2WzVdLCBjb25zdCB1aW50MzJfdCBtWzE2XSkKK3sKKwl1aW50MzJfdCBXWzgwXTsKKwl1aW50MzJfdCBhLGIsYyxkLGU7CisJdW5zaWduZWQgaTsKKworCW1lbWNweShXLCBtLCAxNiAqIDQpOworCWZvciAoaSA9IDE2OyBpIDwgODA7ICsraSkKKwkJV1tpXSA9IHNoYTFfbWl4KFcsIGkpOworCisJYSA9IGlodlswXTsgYiA9IGlodlsxXTsgYyA9IGlodlsyXTsgZCA9IGlodlszXTsgZSA9IGlodls0XTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYiwgYywgZCwgZSwgYSwgVywgOSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAxMCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxMSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAxMik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAxMyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAxNCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAxNSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxNik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAxNyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAxOCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAxOSk7CisKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDIwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDIxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDIyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDIzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDI0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDI1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDI2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDI3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDI4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDI5KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDMwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDMxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDMyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDMzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDM0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDM1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDM2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDM3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDM4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDM5KTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDkpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTkpOworCisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA2MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA2Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA2Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA2NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA2NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA2Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA2OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA2OSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA3MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA3MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA3Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA3NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA3NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA3Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA3OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA3OSk7CisKKwlpaHZbMF0gKz0gYTsgaWh2WzFdICs9IGI7IGlodlsyXSArPSBjOyBpaHZbM10gKz0gZDsgaWh2WzRdICs9IGU7Cit9CisjZW5kaWYgLypCVUlMRE5PQ09MTERFVEVDVFNIQTFDT01QUkVTU0lPTiovCisKKworc3RhdGljIHZvaWQgc2hhMV9jb21wcmVzc2lvbl9XKHVpbnQzMl90IGlodls1XSwgY29uc3QgdWludDMyX3QgV1s4MF0pCit7CisJdWludDMyX3QgYSA9IGlodlswXSwgYiA9IGlodlsxXSwgYyA9IGlodlsyXSwgZCA9IGlodlszXSwgZSA9IGlodls0XTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYiwgYywgZCwgZSwgYSwgVywgOSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAxMCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxMSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAxMik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAxMyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAxNCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAxNSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxNik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAxNyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAxOCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAxOSk7CisKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDIwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDIxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDIyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDIzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDI0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDI1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDI2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDI3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDI4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDI5KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDMwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDMxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDMyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDMzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDM0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDM1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDM2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDM3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDM4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDM5KTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDkpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTkpOworCisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA2MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA2Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA2Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA2NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA2NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA2Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA2OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA2OSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA3MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA3MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA3Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA3NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA3NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA3Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA3OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA3OSk7CisKKwlpaHZbMF0gKz0gYTsgaWh2WzFdICs9IGI7IGlodlsyXSArPSBjOyBpaHZbM10gKz0gZDsgaWh2WzRdICs9IGU7Cit9CisKKworCit2b2lkIHNoYTFfY29tcHJlc3Npb25fc3RhdGVzKHVpbnQzMl90IGlodls1XSwgY29uc3QgdWludDMyX3QgbVsxNl0sIHVpbnQzMl90IFdbODBdLCB1aW50MzJfdCBzdGF0ZXNbODBdWzVdKQoreworCXVpbnQzMl90IGEgPSBpaHZbMF0sIGIgPSBpaHZbMV0sIGMgPSBpaHZbMl0sIGQgPSBpaHZbM10sIGUgPSBpaHZbNF07CisJdWludDMyX3QgdGVtcDsKKworI2lmZGVmIERPU1RPUkVTVEFURTAwCisJU0hBMV9TVE9SRV9TVEFURSgwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChhLCBiLCBjLCBkLCBlLCBtLCBXLCAwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTAxCisJU0hBMV9TVE9SRV9TVEFURSgxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChlLCBhLCBiLCBjLCBkLCBtLCBXLCAxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTAyCisJU0hBMV9TVE9SRV9TVEFURSgyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChkLCBlLCBhLCBiLCBjLCBtLCBXLCAyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTAzCisJU0hBMV9TVE9SRV9TVEFURSgzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChjLCBkLCBlLCBhLCBiLCBtLCBXLCAzLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA0CisJU0hBMV9TVE9SRV9TVEFURSg0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChiLCBjLCBkLCBlLCBhLCBtLCBXLCA0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA1CisJU0hBMV9TVE9SRV9TVEFURSg1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChhLCBiLCBjLCBkLCBlLCBtLCBXLCA1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA2CisJU0hBMV9TVE9SRV9TVEFURSg2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChlLCBhLCBiLCBjLCBkLCBtLCBXLCA2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA3CisJU0hBMV9TVE9SRV9TVEFURSg3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChkLCBlLCBhLCBiLCBjLCBtLCBXLCA3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA4CisJU0hBMV9TVE9SRV9TVEFURSg4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChjLCBkLCBlLCBhLCBiLCBtLCBXLCA4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA5CisJU0hBMV9TVE9SRV9TVEFURSg5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChiLCBjLCBkLCBlLCBhLCBtLCBXLCA5LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTEwCisJU0hBMV9TVE9SRV9TVEFURSgxMCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0xPQUQoYSwgYiwgYywgZCwgZSwgbSwgVywgMTAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTEKKwlTSEExX1NUT1JFX1NUQVRFKDExKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChlLCBhLCBiLCBjLCBkLCBtLCBXLCAxMSwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxMgorCVNIQTFfU1RPUkVfU1RBVEUoMTIpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGQsIGUsIGEsIGIsIGMsIG0sIFcsIDEyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTEzCisJU0hBMV9TVE9SRV9TVEFURSgxMykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0xPQUQoYywgZCwgZSwgYSwgYiwgbSwgVywgMTMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTQKKwlTSEExX1NUT1JFX1NUQVRFKDE0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChiLCBjLCBkLCBlLCBhLCBtLCBXLCAxNCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxNQorCVNIQTFfU1RPUkVfU1RBVEUoMTUpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGEsIGIsIGMsIGQsIGUsIG0sIFcsIDE1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTE2CisJU0hBMV9TVE9SRV9TVEFURSgxNikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0VYUEFORChlLCBhLCBiLCBjLCBkLCBXLCAxNiwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxNworCVNIQTFfU1RPUkVfU1RBVEUoMTcpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9FWFBBTkQoZCwgZSwgYSwgYiwgYywgVywgMTcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTgKKwlTSEExX1NUT1JFX1NUQVRFKDE4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfRVhQQU5EKGMsIGQsIGUsIGEsIGIsIFcsIDE4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTE5CisJU0hBMV9TVE9SRV9TVEFURSgxOSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0VYUEFORChiLCBjLCBkLCBlLCBhLCBXLCAxOSwgdGVtcCk7CisKKworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjAKKwlTSEExX1NUT1JFX1NUQVRFKDIwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMjAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjEKKwlTSEExX1NUT1JFX1NUQVRFKDIxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMjEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjIKKwlTSEExX1NUT1JFX1NUQVRFKDIyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMjIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjMKKwlTSEExX1NUT1JFX1NUQVRFKDIzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMjMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjQKKwlTSEExX1NUT1JFX1NUQVRFKDI0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMjQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjUKKwlTSEExX1NUT1JFX1NUQVRFKDI1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMjUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjYKKwlTSEExX1NUT1JFX1NUQVRFKDI2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMjYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjcKKwlTSEExX1NUT1JFX1NUQVRFKDI3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMjcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjgKKwlTSEExX1NUT1JFX1NUQVRFKDI4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMjgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjkKKwlTSEExX1NUT1JFX1NUQVRFKDI5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMjksIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzAKKwlTSEExX1NUT1JFX1NUQVRFKDMwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMzAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzEKKwlTSEExX1NUT1JFX1NUQVRFKDMxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMzEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzIKKwlTSEExX1NUT1JFX1NUQVRFKDMyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMzIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzMKKwlTSEExX1NUT1JFX1NUQVRFKDMzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMzMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzQKKwlTSEExX1NUT1JFX1NUQVRFKDM0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMzQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzUKKwlTSEExX1NUT1JFX1NUQVRFKDM1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMzUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzYKKwlTSEExX1NUT1JFX1NUQVRFKDM2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMzYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzcKKwlTSEExX1NUT1JFX1NUQVRFKDM3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMzcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzgKKwlTSEExX1NUT1JFX1NUQVRFKDM4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMzgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzkKKwlTSEExX1NUT1JFX1NUQVRFKDM5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMzksIHRlbXApOworCisKKworI2lmZGVmIERPU1RPUkVTVEFURTQwCisJU0hBMV9TVE9SRV9TVEFURSg0MCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDQwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQxCisJU0hBMV9TVE9SRV9TVEFURSg0MSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDQxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQyCisJU0hBMV9TVE9SRV9TVEFURSg0MikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDQyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQzCisJU0hBMV9TVE9SRV9TVEFURSg0MykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDQzLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ0CisJU0hBMV9TVE9SRV9TVEFURSg0NCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDQ0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ1CisJU0hBMV9TVE9SRV9TVEFURSg0NSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDQ1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ2CisJU0hBMV9TVE9SRV9TVEFURSg0NikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDQ2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ3CisJU0hBMV9TVE9SRV9TVEFURSg0NykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDQ3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ4CisJU0hBMV9TVE9SRV9TVEFURSg0OCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDQ4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ5CisJU0hBMV9TVE9SRV9TVEFURSg0OSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDQ5LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTUwCisJU0hBMV9TVE9SRV9TVEFURSg1MCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDUwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTUxCisJU0hBMV9TVE9SRV9TVEFURSg1MSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDUxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTUyCisJU0hBMV9TVE9SRV9TVEFURSg1MikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDUyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTUzCisJU0hBMV9TVE9SRV9TVEFURSg1MykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDUzLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU0CisJU0hBMV9TVE9SRV9TVEFURSg1NCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDU0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU1CisJU0hBMV9TVE9SRV9TVEFURSg1NSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDU1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU2CisJU0hBMV9TVE9SRV9TVEFURSg1NikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDU2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU3CisJU0hBMV9TVE9SRV9TVEFURSg1NykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDU3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU4CisJU0hBMV9TVE9SRV9TVEFURSg1OCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDU4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU5CisJU0hBMV9TVE9SRV9TVEFURSg1OSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDU5LCB0ZW1wKTsKKworCisKKworI2lmZGVmIERPU1RPUkVTVEFURTYwCisJU0hBMV9TVE9SRV9TVEFURSg2MCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDYwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTYxCisJU0hBMV9TVE9SRV9TVEFURSg2MSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDYxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTYyCisJU0hBMV9TVE9SRV9TVEFURSg2MikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDYyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTYzCisJU0hBMV9TVE9SRV9TVEFURSg2MykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDYzLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY0CisJU0hBMV9TVE9SRV9TVEFURSg2NCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDY0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY1CisJU0hBMV9TVE9SRV9TVEFURSg2NSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDY1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY2CisJU0hBMV9TVE9SRV9TVEFURSg2NikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDY2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY3CisJU0hBMV9TVE9SRV9TVEFURSg2NykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDY3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY4CisJU0hBMV9TVE9SRV9TVEFURSg2OCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDY4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY5CisJU0hBMV9TVE9SRV9TVEFURSg2OSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDY5LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTcwCisJU0hBMV9TVE9SRV9TVEFURSg3MCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDcwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTcxCisJU0hBMV9TVE9SRV9TVEFURSg3MSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDcxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTcyCisJU0hBMV9TVE9SRV9TVEFURSg3MikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDcyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTczCisJU0hBMV9TVE9SRV9TVEFURSg3MykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDczLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc0CisJU0hBMV9TVE9SRV9TVEFURSg3NCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDc0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc1CisJU0hBMV9TVE9SRV9TVEFURSg3NSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDc1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc2CisJU0hBMV9TVE9SRV9TVEFURSg3NikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDc2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc3CisJU0hBMV9TVE9SRV9TVEFURSg3NykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDc3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc4CisJU0hBMV9TVE9SRV9TVEFURSg3OCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDc4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc5CisJU0hBMV9TVE9SRV9TVEFURSg3OSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDc5LCB0ZW1wKTsKKworCisKKwlpaHZbMF0gKz0gYTsgaWh2WzFdICs9IGI7IGlodlsyXSArPSBjOyBpaHZbM10gKz0gZDsgaWh2WzRdICs9IGU7Cit9CisKKworCisKKyNkZWZpbmUgU0hBMV9SRUNPTVBSRVNTKHQpIFwKK3N0YXRpYyB2b2lkIHNoYTFyZWNvbXByZXNzX2Zhc3RfICMjIHQgKHVpbnQzMl90IGlodmluWzVdLCB1aW50MzJfdCBpaHZvdXRbNV0sIGNvbnN0IHVpbnQzMl90IG1lMls4MF0sIGNvbnN0IHVpbnQzMl90IHN0YXRlWzVdKSBcCit7IFwKKwl1aW50MzJfdCBhID0gc3RhdGVbMF0sIGIgPSBzdGF0ZVsxXSwgYyA9IHN0YXRlWzJdLCBkID0gc3RhdGVbM10sIGUgPSBzdGF0ZVs0XTsgXAorCWlmICh0ID4gNzkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA3OSk7IFwKKwlpZiAodCA+IDc4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgNzgpOyBcCisJaWYgKHQgPiA3NykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDc3KTsgXAorCWlmICh0ID4gNzYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA3Nik7IFwKKwlpZiAodCA+IDc1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNzUpOyBcCisJaWYgKHQgPiA3NCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDc0KTsgXAorCWlmICh0ID4gNzMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA3Myk7IFwKKwlpZiAodCA+IDcyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNzIpOyBcCisJaWYgKHQgPiA3MSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDcxKTsgXAorCWlmICh0ID4gNzApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA3MCk7IFwKKwlpZiAodCA+IDY5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNjkpOyBcCisJaWYgKHQgPiA2OCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDY4KTsgXAorCWlmICh0ID4gNjcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCA2Nyk7IFwKKwlpZiAodCA+IDY2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgNjYpOyBcCisJaWYgKHQgPiA2NSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDY1KTsgXAorCWlmICh0ID4gNjQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA2NCk7IFwKKwlpZiAodCA+IDYzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgNjMpOyBcCisJaWYgKHQgPiA2MikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDYyKTsgXAorCWlmICh0ID4gNjEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA2MSk7IFwKKwlpZiAodCA+IDYwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNjApOyBcCisJaWYgKHQgPiA1OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDU5KTsgXAorCWlmICh0ID4gNTgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA1OCk7IFwKKwlpZiAodCA+IDU3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNTcpOyBcCisJaWYgKHQgPiA1NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDU2KTsgXAorCWlmICh0ID4gNTUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA1NSk7IFwKKwlpZiAodCA+IDU0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNTQpOyBcCisJaWYgKHQgPiA1MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDUzKTsgXAorCWlmICh0ID4gNTIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCA1Mik7IFwKKwlpZiAodCA+IDUxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgNTEpOyBcCisJaWYgKHQgPiA1MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDUwKTsgXAorCWlmICh0ID4gNDkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA0OSk7IFwKKwlpZiAodCA+IDQ4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgNDgpOyBcCisJaWYgKHQgPiA0NykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDQ3KTsgXAorCWlmICh0ID4gNDYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA0Nik7IFwKKwlpZiAodCA+IDQ1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNDUpOyBcCisJaWYgKHQgPiA0NCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDQ0KTsgXAorCWlmICh0ID4gNDMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA0Myk7IFwKKwlpZiAodCA+IDQyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNDIpOyBcCisJaWYgKHQgPiA0MSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDQxKTsgXAorCWlmICh0ID4gNDApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA0MCk7IFwKKwlpZiAodCA+IDM5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgMzkpOyBcCisJaWYgKHQgPiAzOCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDM4KTsgXAorCWlmICh0ID4gMzcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCAzNyk7IFwKKwlpZiAodCA+IDM2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgMzYpOyBcCisJaWYgKHQgPiAzNSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDM1KTsgXAorCWlmICh0ID4gMzQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCAzNCk7IFwKKwlpZiAodCA+IDMzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgMzMpOyBcCisJaWYgKHQgPiAzMikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDMyKTsgXAorCWlmICh0ID4gMzEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCAzMSk7IFwKKwlpZiAodCA+IDMwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgMzApOyBcCisJaWYgKHQgPiAyOSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDI5KTsgXAorCWlmICh0ID4gMjgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCAyOCk7IFwKKwlpZiAodCA+IDI3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgMjcpOyBcCisJaWYgKHQgPiAyNikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDI2KTsgXAorCWlmICh0ID4gMjUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCAyNSk7IFwKKwlpZiAodCA+IDI0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgMjQpOyBcCisJaWYgKHQgPiAyMykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDIzKTsgXAorCWlmICh0ID4gMjIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCAyMik7IFwKKwlpZiAodCA+IDIxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgMjEpOyBcCisJaWYgKHQgPiAyMCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDIwKTsgXAorCWlmICh0ID4gMTkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCAxOSk7IFwKKwlpZiAodCA+IDE4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgMTgpOyBcCisJaWYgKHQgPiAxNykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDE3KTsgXAorCWlmICh0ID4gMTYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCAxNik7IFwKKwlpZiAodCA+IDE1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgMTUpOyBcCisJaWYgKHQgPiAxNCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDE0KTsgXAorCWlmICh0ID4gMTMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCAxMyk7IFwKKwlpZiAodCA+IDEyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgMTIpOyBcCisJaWYgKHQgPiAxMSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDExKTsgXAorCWlmICh0ID4gMTApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCAxMCk7IFwKKwlpZiAodCA+IDkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA5KTsgXAorCWlmICh0ID4gOCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDgpOyBcCisJaWYgKHQgPiA3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNyk7IFwKKwlpZiAodCA+IDYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA2KTsgXAorCWlmICh0ID4gNSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDUpOyBcCisJaWYgKHQgPiA0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNCk7IFwKKwlpZiAodCA+IDMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCAzKTsgXAorCWlmICh0ID4gMikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDIpOyBcCisJaWYgKHQgPiAxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgMSk7IFwKKwlpZiAodCA+IDApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCAwKTsgXAorCWlodmluWzBdID0gYTsgaWh2aW5bMV0gPSBiOyBpaHZpblsyXSA9IGM7IGlodmluWzNdID0gZDsgaWh2aW5bNF0gPSBlOyBcCisJYSA9IHN0YXRlWzBdOyBiID0gc3RhdGVbMV07IGMgPSBzdGF0ZVsyXTsgZCA9IHN0YXRlWzNdOyBlID0gc3RhdGVbNF07IFwKKwlpZiAodCA8PSAwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgMCk7IFwKKwlpZiAodCA8PSAxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgMSk7IFwKKwlpZiAodCA8PSAyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgMik7IFwKKwlpZiAodCA8PSAzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgMyk7IFwKKwlpZiAodCA8PSA0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNCk7IFwKKwlpZiAodCA8PSA1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNSk7IFwKKwlpZiAodCA8PSA2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNik7IFwKKwlpZiAodCA8PSA3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNyk7IFwKKwlpZiAodCA8PSA4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgOCk7IFwKKwlpZiAodCA8PSA5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgOSk7IFwKKwlpZiAodCA8PSAxMCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDEwKTsgXAorCWlmICh0IDw9IDExKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgMTEpOyBcCisJaWYgKHQgPD0gMTIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCAxMik7IFwKKwlpZiAodCA8PSAxMykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDEzKTsgXAorCWlmICh0IDw9IDE0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgMTQpOyBcCisJaWYgKHQgPD0gMTUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCAxNSk7IFwKKwlpZiAodCA8PSAxNikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDE2KTsgXAorCWlmICh0IDw9IDE3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgMTcpOyBcCisJaWYgKHQgPD0gMTgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCAxOCk7IFwKKwlpZiAodCA8PSAxOSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDE5KTsgXAorCWlmICh0IDw9IDIwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgMjApOyBcCisJaWYgKHQgPD0gMjEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCAyMSk7IFwKKwlpZiAodCA8PSAyMikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDIyKTsgXAorCWlmICh0IDw9IDIzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgMjMpOyBcCisJaWYgKHQgPD0gMjQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCAyNCk7IFwKKwlpZiAodCA8PSAyNSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDI1KTsgXAorCWlmICh0IDw9IDI2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgMjYpOyBcCisJaWYgKHQgPD0gMjcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCAyNyk7IFwKKwlpZiAodCA8PSAyOCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDI4KTsgXAorCWlmICh0IDw9IDI5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgMjkpOyBcCisJaWYgKHQgPD0gMzApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCAzMCk7IFwKKwlpZiAodCA8PSAzMSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDMxKTsgXAorCWlmICh0IDw9IDMyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgMzIpOyBcCisJaWYgKHQgPD0gMzMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCAzMyk7IFwKKwlpZiAodCA8PSAzNCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDM0KTsgXAorCWlmICh0IDw9IDM1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgMzUpOyBcCisJaWYgKHQgPD0gMzYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCAzNik7IFwKKwlpZiAodCA8PSAzNykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDM3KTsgXAorCWlmICh0IDw9IDM4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgMzgpOyBcCisJaWYgKHQgPD0gMzkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCAzOSk7IFwKKwlpZiAodCA8PSA0MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDQwKTsgXAorCWlmICh0IDw9IDQxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNDEpOyBcCisJaWYgKHQgPD0gNDIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA0Mik7IFwKKwlpZiAodCA8PSA0MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDQzKTsgXAorCWlmICh0IDw9IDQ0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNDQpOyBcCisJaWYgKHQgPD0gNDUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA0NSk7IFwKKwlpZiAodCA8PSA0NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDQ2KTsgXAorCWlmICh0IDw9IDQ3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNDcpOyBcCisJaWYgKHQgPD0gNDgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA0OCk7IFwKKwlpZiAodCA8PSA0OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDQ5KTsgXAorCWlmICh0IDw9IDUwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNTApOyBcCisJaWYgKHQgPD0gNTEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCA1MSk7IFwKKwlpZiAodCA8PSA1MikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDUyKTsgXAorCWlmICh0IDw9IDUzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgNTMpOyBcCisJaWYgKHQgPD0gNTQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA1NCk7IFwKKwlpZiAodCA8PSA1NSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDU1KTsgXAorCWlmICh0IDw9IDU2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNTYpOyBcCisJaWYgKHQgPD0gNTcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA1Nyk7IFwKKwlpZiAodCA8PSA1OCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDU4KTsgXAorCWlmICh0IDw9IDU5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNTkpOyBcCisJaWYgKHQgPD0gNjApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA2MCk7IFwKKwlpZiAodCA8PSA2MSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDYxKTsgXAorCWlmICh0IDw9IDYyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNjIpOyBcCisJaWYgKHQgPD0gNjMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA2Myk7IFwKKwlpZiAodCA8PSA2NCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDY0KTsgXAorCWlmICh0IDw9IDY1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNjUpOyBcCisJaWYgKHQgPD0gNjYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCA2Nik7IFwKKwlpZiAodCA8PSA2NykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDY3KTsgXAorCWlmICh0IDw9IDY4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgNjgpOyBcCisJaWYgKHQgPD0gNjkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA2OSk7IFwKKwlpZiAodCA8PSA3MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDcwKTsgXAorCWlmICh0IDw9IDcxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNzEpOyBcCisJaWYgKHQgPD0gNzIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA3Mik7IFwKKwlpZiAodCA8PSA3MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDczKTsgXAorCWlmICh0IDw9IDc0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNzQpOyBcCisJaWYgKHQgPD0gNzUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA3NSk7IFwKKwlpZiAodCA8PSA3NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDc2KTsgXAorCWlmICh0IDw9IDc3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNzcpOyBcCisJaWYgKHQgPD0gNzgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA3OCk7IFwKKwlpZiAodCA8PSA3OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDc5KTsgXAorCWlodm91dFswXSA9IGlodmluWzBdICsgYTsgaWh2b3V0WzFdID0gaWh2aW5bMV0gKyBiOyBpaHZvdXRbMl0gPSBpaHZpblsyXSArIGM7IGlodm91dFszXSA9IGlodmluWzNdICsgZDsgaWh2b3V0WzRdID0gaWh2aW5bNF0gKyBlOyBcCit9CisKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDEyNykgIC8qIENvbXBpbGVyIGNvbXBsYWlucyBhYm91dCB0aGUgY2hlY2tzIGluIHRoZSBhYm92ZSBtYWNybyBiZWluZyBjb25zdGFudC4gKi8KKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMAorU0hBMV9SRUNPTVBSRVNTKDApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTEKK1NIQTFfUkVDT01QUkVTUygxKQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEUyCitTSEExX1JFQ09NUFJFU1MoMikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMworU0hBMV9SRUNPTVBSRVNTKDMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQKK1NIQTFfUkVDT01QUkVTUyg0KQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEU1CitTSEExX1JFQ09NUFJFU1MoNSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNgorU0hBMV9SRUNPTVBSRVNTKDYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTcKK1NIQTFfUkVDT01QUkVTUyg3KQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEU4CitTSEExX1JFQ09NUFJFU1MoOCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFOQorU0hBMV9SRUNPTVBSRVNTKDkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTEwCitTSEExX1JFQ09NUFJFU1MoMTApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTExCitTSEExX1JFQ09NUFJFU1MoMTEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTEyCitTSEExX1JFQ09NUFJFU1MoMTIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTEzCitTSEExX1JFQ09NUFJFU1MoMTMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE0CitTSEExX1JFQ09NUFJFU1MoMTQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE1CitTSEExX1JFQ09NUFJFU1MoMTUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE2CitTSEExX1JFQ09NUFJFU1MoMTYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE3CitTSEExX1JFQ09NUFJFU1MoMTcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE4CitTSEExX1JFQ09NUFJFU1MoMTgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE5CitTSEExX1JFQ09NUFJFU1MoMTkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIwCitTSEExX1JFQ09NUFJFU1MoMjApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIxCitTSEExX1JFQ09NUFJFU1MoMjEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIyCitTSEExX1JFQ09NUFJFU1MoMjIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIzCitTSEExX1JFQ09NUFJFU1MoMjMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI0CitTSEExX1JFQ09NUFJFU1MoMjQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI1CitTSEExX1JFQ09NUFJFU1MoMjUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI2CitTSEExX1JFQ09NUFJFU1MoMjYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI3CitTSEExX1JFQ09NUFJFU1MoMjcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI4CitTSEExX1JFQ09NUFJFU1MoMjgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI5CitTSEExX1JFQ09NUFJFU1MoMjkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTMwCitTSEExX1JFQ09NUFJFU1MoMzApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTMxCitTSEExX1JFQ09NUFJFU1MoMzEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTMyCitTSEExX1JFQ09NUFJFU1MoMzIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTMzCitTSEExX1JFQ09NUFJFU1MoMzMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM0CitTSEExX1JFQ09NUFJFU1MoMzQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM1CitTSEExX1JFQ09NUFJFU1MoMzUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM2CitTSEExX1JFQ09NUFJFU1MoMzYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM3CitTSEExX1JFQ09NUFJFU1MoMzcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM4CitTSEExX1JFQ09NUFJFU1MoMzgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM5CitTSEExX1JFQ09NUFJFU1MoMzkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQwCitTSEExX1JFQ09NUFJFU1MoNDApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQxCitTSEExX1JFQ09NUFJFU1MoNDEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQyCitTSEExX1JFQ09NUFJFU1MoNDIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQzCitTSEExX1JFQ09NUFJFU1MoNDMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ0CitTSEExX1JFQ09NUFJFU1MoNDQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ1CitTSEExX1JFQ09NUFJFU1MoNDUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ2CitTSEExX1JFQ09NUFJFU1MoNDYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ3CitTSEExX1JFQ09NUFJFU1MoNDcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ4CitTSEExX1JFQ09NUFJFU1MoNDgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ5CitTSEExX1JFQ09NUFJFU1MoNDkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUwCitTSEExX1JFQ09NUFJFU1MoNTApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUxCitTSEExX1JFQ09NUFJFU1MoNTEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUyCitTSEExX1JFQ09NUFJFU1MoNTIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUzCitTSEExX1JFQ09NUFJFU1MoNTMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU0CitTSEExX1JFQ09NUFJFU1MoNTQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU1CitTSEExX1JFQ09NUFJFU1MoNTUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU2CitTSEExX1JFQ09NUFJFU1MoNTYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU3CitTSEExX1JFQ09NUFJFU1MoNTcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU4CitTSEExX1JFQ09NUFJFU1MoNTgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU5CitTSEExX1JFQ09NUFJFU1MoNTkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTYwCitTSEExX1JFQ09NUFJFU1MoNjApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTYxCitTSEExX1JFQ09NUFJFU1MoNjEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTYyCitTSEExX1JFQ09NUFJFU1MoNjIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTYzCitTSEExX1JFQ09NUFJFU1MoNjMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY0CitTSEExX1JFQ09NUFJFU1MoNjQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY1CitTSEExX1JFQ09NUFJFU1MoNjUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY2CitTSEExX1JFQ09NUFJFU1MoNjYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY3CitTSEExX1JFQ09NUFJFU1MoNjcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY4CitTSEExX1JFQ09NUFJFU1MoNjgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY5CitTSEExX1JFQ09NUFJFU1MoNjkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTcwCitTSEExX1JFQ09NUFJFU1MoNzApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTcxCitTSEExX1JFQ09NUFJFU1MoNzEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTcyCitTSEExX1JFQ09NUFJFU1MoNzIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTczCitTSEExX1JFQ09NUFJFU1MoNzMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc0CitTSEExX1JFQ09NUFJFU1MoNzQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc1CitTSEExX1JFQ09NUFJFU1MoNzUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc2CitTSEExX1JFQ09NUFJFU1MoNzYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc3CitTSEExX1JFQ09NUFJFU1MoNzcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc4CitTSEExX1JFQ09NUFJFU1MoNzgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc5CitTSEExX1JFQ09NUFJFU1MoNzkpCisjZW5kaWYKKworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNoYTFfcmVjb21wcmVzc2lvbl9zdGVwKHVpbnQzMl90IHN0ZXAsIHVpbnQzMl90IGlodmluWzVdLCB1aW50MzJfdCBpaHZvdXRbNV0sIGNvbnN0IHVpbnQzMl90IG1lMls4MF0sIGNvbnN0IHVpbnQzMl90IHN0YXRlWzVdKQoreworCXN3aXRjaCAoc3RlcCkKKwl7CisjaWZkZWYgRE9TVE9SRVNUQVRFMAorCWNhc2UgMDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8wKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTEKKwljYXNlIDE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyCisJY2FzZSAyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMworCWNhc2UgMzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQKKwljYXNlIDQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1CisJY2FzZSA1OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNgorCWNhc2UgNjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTcKKwljYXNlIDc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU4CisJY2FzZSA4OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFOQorCWNhc2UgOToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF85KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTEwCisJY2FzZSAxMDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xMChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxMQorCWNhc2UgMTE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTEoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTIKKwljYXNlIDEyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzEyKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTEzCisJY2FzZSAxMzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xMyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxNAorCWNhc2UgMTQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTQoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTUKKwljYXNlIDE1OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzE1KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTE2CisJY2FzZSAxNjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xNihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxNworCWNhc2UgMTc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTcoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTgKKwljYXNlIDE4OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzE4KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTE5CisJY2FzZSAxOToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xOShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyMAorCWNhc2UgMjA6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjAoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjEKKwljYXNlIDIxOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzIxKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTIyCisJY2FzZSAyMjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yMihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyMworCWNhc2UgMjM6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjMoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjQKKwljYXNlIDI0OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzI0KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTI1CisJY2FzZSAyNToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yNShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyNgorCWNhc2UgMjY6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjYoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjcKKwljYXNlIDI3OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzI3KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTI4CisJY2FzZSAyODoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yOChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyOQorCWNhc2UgMjk6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjkoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzAKKwljYXNlIDMwOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzMwKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTMxCisJY2FzZSAzMToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zMShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzMgorCWNhc2UgMzI6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzMKKwljYXNlIDMzOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzMzKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTM0CisJY2FzZSAzNDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zNChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzNQorCWNhc2UgMzU6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzYKKwljYXNlIDM2OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzM2KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTM3CisJY2FzZSAzNzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zNyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzOAorCWNhc2UgMzg6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzkKKwljYXNlIDM5OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzM5KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQwCisJY2FzZSA0MDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80MChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0MQorCWNhc2UgNDE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDEoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDIKKwljYXNlIDQyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQyKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQzCisJY2FzZSA0MzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80MyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0NAorCWNhc2UgNDQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDQoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDUKKwljYXNlIDQ1OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQ1KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQ2CisJY2FzZSA0NjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80NihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0NworCWNhc2UgNDc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDcoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDgKKwljYXNlIDQ4OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQ4KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQ5CisJY2FzZSA0OToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80OShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1MAorCWNhc2UgNTA6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTAoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTEKKwljYXNlIDUxOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzUxKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTUyCisJY2FzZSA1MjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81MihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1MworCWNhc2UgNTM6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTMoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTQKKwljYXNlIDU0OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzU0KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTU1CisJY2FzZSA1NToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81NShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1NgorCWNhc2UgNTY6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTYoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTcKKwljYXNlIDU3OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzU3KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTU4CisJY2FzZSA1ODoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81OChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1OQorCWNhc2UgNTk6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTkoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjAKKwljYXNlIDYwOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzYwKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTYxCisJY2FzZSA2MToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82MShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2MgorCWNhc2UgNjI6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjMKKwljYXNlIDYzOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzYzKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTY0CisJY2FzZSA2NDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82NChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2NQorCWNhc2UgNjU6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjYKKwljYXNlIDY2OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzY2KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTY3CisJY2FzZSA2NzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82NyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2OAorCWNhc2UgNjg6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjkKKwljYXNlIDY5OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzY5KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTcwCisJY2FzZSA3MDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83MChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3MQorCWNhc2UgNzE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzEoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzIKKwljYXNlIDcyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzcyKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTczCisJY2FzZSA3MzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83MyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3NAorCWNhc2UgNzQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzQoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzUKKwljYXNlIDc1OgorCQlzaGExcmVjb21wcmVzc19mYXN0Xzc1KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTc2CisJY2FzZSA3NjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83NihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3NworCWNhc2UgNzc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzcoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzgKKwljYXNlIDc4OgorCQlzaGExcmVjb21wcmVzc19mYXN0Xzc4KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTc5CisJY2FzZSA3OToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83OShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlhYm9ydCgpOworCX0KKworfQorCisKKworc3RhdGljIHZvaWQgc2hhMV9wcm9jZXNzKFNIQTFfQ1RYKiBjdHgsIGNvbnN0IHVpbnQzMl90IGJsb2NrWzE2XSkKK3sKKwl1bnNpZ25lZCBpLCBqOworCXVpbnQzMl90IHViY19kdl9tYXNrW0RWTUFTS1NJWkVdID0geyAweEZGRkZGRkZGIH07CisJdWludDMyX3QgaWh2dG1wWzVdOworCisJY3R4LT5paHYxWzBdID0gY3R4LT5paHZbMF07CisJY3R4LT5paHYxWzFdID0gY3R4LT5paHZbMV07CisJY3R4LT5paHYxWzJdID0gY3R4LT5paHZbMl07CisJY3R4LT5paHYxWzNdID0gY3R4LT5paHZbM107CisJY3R4LT5paHYxWzRdID0gY3R4LT5paHZbNF07CisKKwlzaGExX2NvbXByZXNzaW9uX3N0YXRlcyhjdHgtPmlodiwgYmxvY2ssIGN0eC0+bTEsIGN0eC0+c3RhdGVzKTsKKworCWlmIChjdHgtPmRldGVjdF9jb2xsKQorCXsKKwkJaWYgKGN0eC0+dWJjX2NoZWNrKQorCQl7CisJCQl1YmNfY2hlY2soY3R4LT5tMSwgdWJjX2R2X21hc2spOworCQl9CisKKwkJaWYgKHViY19kdl9tYXNrWzBdICE9IDApCisJCXsKKwkJCWZvciAoaSA9IDA7IHNoYTFfZHZzW2ldLmR2VHlwZSAhPSAwOyArK2kpCisJCQl7CisJCQkJaWYgKHViY19kdl9tYXNrWzBdICYgKCh1aW50MzJfdCkoMSkgPDwgc2hhMV9kdnNbaV0ubWFza2IpKQorCQkJCXsKKwkJCQkJZm9yIChqID0gMDsgaiA8IDgwOyArK2opCisJCQkJCQljdHgtPm0yW2pdID0gY3R4LT5tMVtqXSBeIHNoYTFfZHZzW2ldLmRtW2pdOworCisJCQkJCXNoYTFfcmVjb21wcmVzc2lvbl9zdGVwKHNoYTFfZHZzW2ldLnRlc3R0LCBjdHgtPmlodjIsIGlodnRtcCwgY3R4LT5tMiwgY3R4LT5zdGF0ZXNbc2hhMV9kdnNbaV0udGVzdHRdKTsKKworCQkJCQkvKiB0byB2ZXJpZnkgU0hBLTEgY29sbGlzaW9uIGRldGVjdGlvbiBjb2RlIHdpdGggY29sbGlzaW9ucyBmb3IgcmVkdWNlZC1zdGVwIFNIQS0xICovCisJCQkJCWlmICgoMCA9PSAoKGlodnRtcFswXSBeIGN0eC0+aWh2WzBdKSB8IChpaHZ0bXBbMV0gXiBjdHgtPmlodlsxXSkgfCAoaWh2dG1wWzJdIF4gY3R4LT5paHZbMl0pIHwgKGlodnRtcFszXSBeIGN0eC0+aWh2WzNdKSB8IChpaHZ0bXBbNF0gXiBjdHgtPmlodls0XSkpKQorCQkJCQkJfHwgKGN0eC0+cmVkdWNlZF9yb3VuZF9jb2xsICYmIDA9PSgoY3R4LT5paHYxWzBdIF4gY3R4LT5paHYyWzBdKSB8IChjdHgtPmlodjFbMV0gXiBjdHgtPmlodjJbMV0pIHwgKGN0eC0+aWh2MVsyXSBeIGN0eC0+aWh2MlsyXSkgfCAoY3R4LT5paHYxWzNdIF4gY3R4LT5paHYyWzNdKSB8IChjdHgtPmlodjFbNF0gXiBjdHgtPmlodjJbNF0pKSkpCisJCQkJCXsKKwkJCQkJCWN0eC0+Zm91bmRfY29sbGlzaW9uID0gMTsKKworCQkJCQkJaWYgKGN0eC0+c2FmZV9oYXNoKQorCQkJCQkJeworCQkJCQkJCXNoYTFfY29tcHJlc3Npb25fVyhjdHgtPmlodiwgY3R4LT5tMSk7CisJCQkJCQkJc2hhMV9jb21wcmVzc2lvbl9XKGN0eC0+aWh2LCBjdHgtPm0xKTsKKwkJCQkJCX0KKworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgU0hBMURDSW5pdChTSEExX0NUWCogY3R4KQoreworCWN0eC0+dG90YWwgPSAwOworCWN0eC0+aWh2WzBdID0gMHg2NzQ1MjMwMTsKKwljdHgtPmlodlsxXSA9IDB4RUZDREFCODk7CisJY3R4LT5paHZbMl0gPSAweDk4QkFEQ0ZFOworCWN0eC0+aWh2WzNdID0gMHgxMDMyNTQ3NjsKKwljdHgtPmlodls0XSA9IDB4QzNEMkUxRjA7CisJY3R4LT5mb3VuZF9jb2xsaXNpb24gPSAwOworCWN0eC0+c2FmZV9oYXNoID0gU0hBMURDX0lOSVRfU0FGRV9IQVNIX0RFRkFVTFQ7CisJY3R4LT51YmNfY2hlY2sgPSAxOworCWN0eC0+ZGV0ZWN0X2NvbGwgPSAxOworCWN0eC0+cmVkdWNlZF9yb3VuZF9jb2xsID0gMDsKKwljdHgtPmNhbGxiYWNrID0gTlVMTDsKK30KKwordm9pZCBTSEExRENTZXRTYWZlSGFzaChTSEExX0NUWCogY3R4LCBpbnQgc2FmZWhhc2gpCit7CisJaWYgKHNhZmVoYXNoKQorCQljdHgtPnNhZmVfaGFzaCA9IDE7CisJZWxzZQorCQljdHgtPnNhZmVfaGFzaCA9IDA7Cit9CisKKwordm9pZCBTSEExRENTZXRVc2VVQkMoU0hBMV9DVFgqIGN0eCwgaW50IHViY19jaGVjaykKK3sKKwlpZiAodWJjX2NoZWNrKQorCQljdHgtPnViY19jaGVjayA9IDE7CisJZWxzZQorCQljdHgtPnViY19jaGVjayA9IDA7Cit9CisKK3ZvaWQgU0hBMURDU2V0VXNlRGV0ZWN0Q29sbChTSEExX0NUWCogY3R4LCBpbnQgZGV0ZWN0X2NvbGwpCit7CisJaWYgKGRldGVjdF9jb2xsKQorCQljdHgtPmRldGVjdF9jb2xsID0gMTsKKwllbHNlCisJCWN0eC0+ZGV0ZWN0X2NvbGwgPSAwOworfQorCit2b2lkIFNIQTFEQ1NldERldGVjdFJlZHVjZWRSb3VuZENvbGxpc2lvbihTSEExX0NUWCogY3R4LCBpbnQgcmVkdWNlZF9yb3VuZF9jb2xsKQoreworCWlmIChyZWR1Y2VkX3JvdW5kX2NvbGwpCisJCWN0eC0+cmVkdWNlZF9yb3VuZF9jb2xsID0gMTsKKwllbHNlCisJCWN0eC0+cmVkdWNlZF9yb3VuZF9jb2xsID0gMDsKK30KKwordm9pZCBTSEExRENTZXRDYWxsYmFjayhTSEExX0NUWCogY3R4LCBjb2xsaXNpb25fYmxvY2tfY2FsbGJhY2sgY2FsbGJhY2spCit7CisJY3R4LT5jYWxsYmFjayA9IGNhbGxiYWNrOworfQorCit2b2lkIFNIQTFEQ1VwZGF0ZShTSEExX0NUWCogY3R4LCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgbGVmdCwgZmlsbDsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuOworCisJbGVmdCA9IGN0eC0+dG90YWwgJiA2MzsKKwlmaWxsID0gNjQgLSBsZWZ0OworCisJaWYgKGxlZnQgJiYgbGVuID49IGZpbGwpCisJeworCQljdHgtPnRvdGFsICs9IGZpbGw7CisJCW1lbWNweShjdHgtPmJ1ZmZlciArIGxlZnQsIGJ1ZiwgZmlsbCk7CisJCXNoYTFfcHJvY2VzcyhjdHgsICh1aW50MzJfdCopKGN0eC0+YnVmZmVyKSk7CisJCWJ1ZiArPSBmaWxsOworCQlsZW4gLT0gZmlsbDsKKwkJbGVmdCA9IDA7CisJfQorCXdoaWxlIChsZW4gPj0gNjQpCisJeworCQljdHgtPnRvdGFsICs9IDY0OworCisjaWYgZGVmaW5lZChTSEExRENfQUxMT1dfVU5BTElHTkVEX0FDQ0VTUykKKwkJc2hhMV9wcm9jZXNzKGN0eCwgKHVpbnQzMl90KikoYnVmKSk7CisjZWxzZQorCQltZW1jcHkoY3R4LT5idWZmZXIsIGJ1ZiwgNjQpOworCQlzaGExX3Byb2Nlc3MoY3R4LCAodWludDMyX3QqKShjdHgtPmJ1ZmZlcikpOworI2VuZGlmIC8qIGRlZmluZWQoU0hBMURDX0FMTE9XX1VOQUxJR05FRF9BQ0NFU1MpICovCisJCWJ1ZiArPSA2NDsKKwkJbGVuIC09IDY0OworCX0KKwlpZiAobGVuID4gMCkKKwl7CisJCWN0eC0+dG90YWwgKz0gbGVuOworCQltZW1jcHkoY3R4LT5idWZmZXIgKyBsZWZ0LCBidWYsIGxlbik7CisJfQorfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3BhZGRpbmdbNjRdID0KK3sKKwkweDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCitpbnQgU0hBMURDRmluYWwodW5zaWduZWQgY2hhciBvdXRwdXRbMjBdLCBTSEExX0NUWCAqY3R4KQoreworCXVpbnQzMl90IGxhc3QgPSBjdHgtPnRvdGFsICYgNjM7CisJdWludDMyX3QgcGFkbiA9IChsYXN0IDwgNTYpID8gKDU2IC0gbGFzdCkgOiAoMTIwIC0gbGFzdCk7CisJdWludDY0X3QgdG90YWw7CisJU0hBMURDVXBkYXRlKGN0eCwgKGNvbnN0IGNoYXIqKShzaGExX3BhZGRpbmcpLCBwYWRuKTsKKworCXRvdGFsID0gY3R4LT50b3RhbCAtIHBhZG47CisJdG90YWwgPDw9IDM7CisJY3R4LT5idWZmZXJbNTZdID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsID4+IDU2KTsKKwljdHgtPmJ1ZmZlcls1N10gPSAodW5zaWduZWQgY2hhcikodG90YWwgPj4gNDgpOworCWN0eC0+YnVmZmVyWzU4XSA9ICh1bnNpZ25lZCBjaGFyKSh0b3RhbCA+PiA0MCk7CisJY3R4LT5idWZmZXJbNTldID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsID4+IDMyKTsKKwljdHgtPmJ1ZmZlcls2MF0gPSAodW5zaWduZWQgY2hhcikodG90YWwgPj4gMjQpOworCWN0eC0+YnVmZmVyWzYxXSA9ICh1bnNpZ25lZCBjaGFyKSh0b3RhbCA+PiAxNik7CisJY3R4LT5idWZmZXJbNjJdID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsID4+IDgpOworCWN0eC0+YnVmZmVyWzYzXSA9ICh1bnNpZ25lZCBjaGFyKSh0b3RhbCk7CisJc2hhMV9wcm9jZXNzKGN0eCwgKHVpbnQzMl90KikoY3R4LT5idWZmZXIpKTsKKwlvdXRwdXRbMF0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMF0gPj4gMjQpOworCW91dHB1dFsxXSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlswXSA+PiAxNik7CisJb3V0cHV0WzJdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzBdID4+IDgpOworCW91dHB1dFszXSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlswXSk7CisJb3V0cHV0WzRdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzFdID4+IDI0KTsKKwlvdXRwdXRbNV0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMV0gPj4gMTYpOworCW91dHB1dFs2XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlsxXSA+PiA4KTsKKwlvdXRwdXRbN10gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMV0pOworCW91dHB1dFs4XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlsyXSA+PiAyNCk7CisJb3V0cHV0WzldID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzJdID4+IDE2KTsKKwlvdXRwdXRbMTBdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzJdID4+IDgpOworCW91dHB1dFsxMV0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMl0pOworCW91dHB1dFsxMl0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbM10gPj4gMjQpOworCW91dHB1dFsxM10gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbM10gPj4gMTYpOworCW91dHB1dFsxNF0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbM10gPj4gOCk7CisJb3V0cHV0WzE1XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlszXSk7CisJb3V0cHV0WzE2XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodls0XSA+PiAyNCk7CisJb3V0cHV0WzE3XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodls0XSA+PiAxNik7CisJb3V0cHV0WzE4XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodls0XSA+PiA4KTsKKwlvdXRwdXRbMTldID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzRdKTsKKwlyZXR1cm4gY3R4LT5mb3VuZF9jb2xsaXNpb247Cit9CisKKyNpZmRlZiBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfU0hBMV9DCisjaW5jbHVkZSBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfU0hBMV9DCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NoYTFkYy9zaGExLmggYi9zaGExZGMvc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGU5NGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExZGMvc2hhMS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKioqCisqIENvcHlyaWdodCAyMDE3IE1hcmMgU3RldmVucyA8bWFyY0BtYXJjLXN0ZXZlbnMubmw+LCBEYW4gU2h1bW93IDxkYW5zaHVAbWljcm9zb2Z0LmNvbT4KKyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBTb2Z0d2FyZSBMaWNlbnNlLgorKiBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRS50eHQgb3IgY29weSBhdAorKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorKioqLworCisjaWZuZGVmIFNIQTFEQ19TSEExX0gKKyNkZWZpbmUgU0hBMURDX1NIQTFfSAorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgU0hBMURDX05PX1NUQU5EQVJEX0lOQ0xVREVTCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworLyogc2hhLTEgY29tcHJlc3Npb24gZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBhbHJlYWR5IGV4cGFuZGVkIG1lc3NhZ2UsIGFuZCBhZGRpdGlvbmFsbHkgc3RvcmUgaW50ZXJtZWRpYXRlIHN0YXRlcyAqLworLyogb25seSBzdG9yZXMgc3RhdGVzIGlpICh0aGUgc3RhdGUgYmV0d2VlbiBzdGVwIGlpLTEgYW5kIHN0ZXAgaWkpIHdoZW4gRE9TVE9SRVNUQVRFaWkgaXMgZGVmaW5lZCBpbiB1YmNfY2hlY2suaCAqLwordm9pZCBzaGExX2NvbXByZXNzaW9uX3N0YXRlcyh1aW50MzJfdFs1XSwgY29uc3QgdWludDMyX3RbMTZdLCB1aW50MzJfdFs4MF0sIHVpbnQzMl90WzgwXVs1XSk7CisKKy8qCisvLyBGdW5jdGlvbiB0eXBlIGZvciBzaGExX3JlY29tcHJlc3Npb25fc3RlcF9UICh1aW50MzJfdCBpaHZpbls1XSwgdWludDMyX3QgaWh2b3V0WzVdLCBjb25zdCB1aW50MzJfdCBtZTJbODBdLCBjb25zdCB1aW50MzJfdCBzdGF0ZVs1XSkuCisvLyBXaGVyZSAwIDw9IFQgPCA4MAorLy8gICAgICAgbWUyIGlzIGFuIGV4cGFuZGVkIG1lc3NhZ2UgKHRoZSBleHBhbnNpb24gb2YgYW4gb3JpZ2luYWwgbWVzc2FnZSBibG9jayBYT1InZWQgd2l0aCBhIGRpc3R1cmJhbmNlIHZlY3RvcidzIG1lc3NhZ2UgYmxvY2sgZGlmZmVyZW5jZS4pCisvLyAgICAgICBzdGF0ZSBpcyB0aGUgaW50ZXJuYWwgc3RhdGUgKGEsYixjLGQsZSkgYmVmb3JlIHN0ZXAgVCBvZiB0aGUgU0hBLTEgY29tcHJlc3Npb24gZnVuY3Rpb24gd2hpbGUgcHJvY2Vzc2luZyB0aGUgb3JpZ2luYWwgbWVzc2FnZSBibG9jay4KKy8vIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybjoKKy8vICAgICAgIGlodmluOiBUaGUgcmVjb25zdHJ1Y3RlZCBpbnB1dCBjaGFpbmluZyB2YWx1ZS4KKy8vICAgICAgIGlodm91dDogVGhlIHJlY29uc3RydWN0ZWQgb3V0cHV0IGNoYWluaW5nIHZhbHVlLgorKi8KK3R5cGVkZWYgdm9pZCgqc2hhMV9yZWNvbXByZXNzaW9uX3R5cGUpKHVpbnQzMl90KiwgdWludDMyX3QqLCBjb25zdCB1aW50MzJfdCosIGNvbnN0IHVpbnQzMl90Kik7CisKKy8qIEEgY2FsbGJhY2sgZnVuY3Rpb24gdHlwZSB0aGF0IGNhbiBiZSBzZXQgdG8gYmUgY2FsbGVkIHdoZW4gYSBjb2xsaXNpb24gYmxvY2sgaGFzIGJlZW4gZm91bmQ6ICovCisvKiB2b2lkIGNvbGxpc2lvbl9ibG9ja19jYWxsYmFjayh1aW50NjRfdCBieXRlb2Zmc2V0LCBjb25zdCB1aW50MzJfdCBpaHZpbjFbNV0sIGNvbnN0IHVpbnQzMl90IGlodmluMls1XSwgY29uc3QgdWludDMyX3QgbTFbODBdLCBjb25zdCB1aW50MzJfdCBtMls4MF0pICovCit0eXBlZGVmIHZvaWQoKmNvbGxpc2lvbl9ibG9ja19jYWxsYmFjaykodWludDY0X3QsIGNvbnN0IHVpbnQzMl90KiwgY29uc3QgdWludDMyX3QqLCBjb25zdCB1aW50MzJfdCosIGNvbnN0IHVpbnQzMl90Kik7CisKKy8qIFRoZSBTSEEtMSBjb250ZXh0LiAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQ2NF90IHRvdGFsOworCXVpbnQzMl90IGlodls1XTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07CisJaW50IGZvdW5kX2NvbGxpc2lvbjsKKwlpbnQgc2FmZV9oYXNoOworCWludCBkZXRlY3RfY29sbDsKKwlpbnQgdWJjX2NoZWNrOworCWludCByZWR1Y2VkX3JvdW5kX2NvbGw7CisJY29sbGlzaW9uX2Jsb2NrX2NhbGxiYWNrIGNhbGxiYWNrOworCisJdWludDMyX3QgaWh2MVs1XTsKKwl1aW50MzJfdCBpaHYyWzVdOworCXVpbnQzMl90IG0xWzgwXTsKKwl1aW50MzJfdCBtMls4MF07CisJdWludDMyX3Qgc3RhdGVzWzgwXVs1XTsKK30gU0hBMV9DVFg7CisKKy8qIEluaXRpYWxpemUgU0hBLTEgY29udGV4dC4gKi8KK3ZvaWQgU0hBMURDSW5pdChTSEExX0NUWCopOworCisvKgorICAgIEZ1bmN0aW9uIHRvIGVuYWJsZSBzYWZlIFNIQS0xIGhhc2hpbmc6CisgICAgQ29sbGlzaW9uIGF0dGFja3MgYXJlIHRod2FydGVkIGJ5IGhhc2hpbmcgYSBkZXRlY3RlZCBuZWFyLWNvbGxpc2lvbiBibG9jayAzIHRpbWVzLgorICAgIFRoaW5rIG9mIGl0IGFzIGV4dGVuZGluZyBTSEEtMSBmcm9tIDgwLXN0ZXBzIHRvIDI0MC1zdGVwcyBmb3Igc3VjaCBibG9ja3M6CisgICAgICAgIFRoZSBiZXN0IGNvbGxpc2lvbiBhdHRhY2tzIGFnYWluc3QgU0hBLTEgaGF2ZSBjb21wbGV4aXR5IGFib3V0IDJeNjAsCisgICAgICAgIHRodXMgZm9yIDI0MC1zdGVwcyBhbiBpbW1lZGlhdGUgbG93ZXItYm91bmQgZm9yIHRoZSBiZXN0IGNyeXB0YW5hbHl0aWMgYXR0YWNrcyB3b3VsZCBiZSAyXjE4MC4KKyAgICAgICAgQW4gYXR0YWNrZXIgd291bGQgYmUgYmV0dGVyIG9mZiB1c2luZyBhIGdlbmVyaWMgYmlydGhkYXkgc2VhcmNoIG9mIGNvbXBsZXhpdHkgMl44MC4KKworICAgRW5hYmxpbmcgc2FmZSBTSEEtMSBoYXNoaW5nIHdpbGwgcmVzdWx0IGluIHRoZSBjb3JyZWN0IFNIQS0xIGhhc2ggZm9yIG1lc3NhZ2VzIHdoZXJlIG5vIGNvbGxpc2lvbiBhdHRhY2sgd2FzIGRldGVjdGVkLAorICAgYnV0IGl0IHdpbGwgcmVzdWx0IGluIGEgZGlmZmVyZW50IFNIQS0xIGhhc2ggZm9yIG1lc3NhZ2VzIHdoZXJlIGEgY29sbGlzaW9uIGF0dGFjayB3YXMgZGV0ZWN0ZWQuCisgICBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBpbnZhbGlkYXRlIFNIQS0xIGJhc2VkIGRpZ2l0YWwgc2lnbmF0dXJlIGZvcmdlcmllcy4KKyAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KKyovCit2b2lkIFNIQTFEQ1NldFNhZmVIYXNoKFNIQTFfQ1RYKiwgaW50KTsKKworLyoKKyAgICBGdW5jdGlvbiB0byBkaXNhYmxlIG9yIGVuYWJsZSB0aGUgdXNlIG9mIFVuYXZvaWRhYmxlIEJpdGNvbmRpdGlvbnMgKHByb3ZpZGVzIGEgc2lnbmlmaWNhbnQgc3BlZWQgdXApLgorICAgIEVuYWJsZWQgYnkgZGVmYXVsdAorICovCit2b2lkIFNIQTFEQ1NldFVzZVVCQyhTSEExX0NUWCosIGludCk7CisKKy8qCisgICAgRnVuY3Rpb24gdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIHVzZSBvZiBDb2xsaXNpb24gRGV0ZWN0aW9uLgorICAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KKyAqLwordm9pZCBTSEExRENTZXRVc2VEZXRlY3RDb2xsKFNIQTFfQ1RYKiwgaW50KTsKKworLyogZnVuY3Rpb24gdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIGRldGVjdGlvbiBvZiByZWR1Y2VkLXJvdW5kIFNIQS0xIGNvbGxpc2lvbnMgKi8KKy8qIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KK3ZvaWQgU0hBMURDU2V0RGV0ZWN0UmVkdWNlZFJvdW5kQ29sbGlzaW9uKFNIQTFfQ1RYKiwgaW50KTsKKworLyogZnVuY3Rpb24gdG8gc2V0IGEgY2FsbGJhY2sgZnVuY3Rpb24sIHBhc3MgTlVMTCB0byBkaXNhYmxlICovCisvKiBieSBkZWZhdWx0IG5vIGNhbGxiYWNrIHNldCAqLwordm9pZCBTSEExRENTZXRDYWxsYmFjayhTSEExX0NUWCosIGNvbGxpc2lvbl9ibG9ja19jYWxsYmFjayk7CisKKy8qIHVwZGF0ZSBTSEEtMSBjb250ZXh0IHdpdGggYnVmZmVyIGNvbnRlbnRzICovCit2b2lkIFNIQTFEQ1VwZGF0ZShTSEExX0NUWCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOworCisvKiBvYnRhaW4gU0hBLTEgaGFzaCBmcm9tIFNIQS0xIGNvbnRleHQgKi8KKy8qIHJldHVybnM6IDAgPSBubyBjb2xsaXNpb24gZGV0ZWN0ZWQsIG90aGVyd2lzZSA9IGNvbGxpc2lvbiBmb3VuZCA9PiB3YXJuIHVzZXIgZm9yIGFjdGl2ZSBhdHRhY2sgKi8KK2ludCAgU0hBMURDRmluYWwodW5zaWduZWQgY2hhclsyMF0sIFNIQTFfQ1RYKik7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyNpZmRlZiBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfU0hBMV9ICisjaW5jbHVkZSBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfU0hBMV9ICisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zaGExZGMvdWJjX2NoZWNrLmMgYi9zaGExZGMvdWJjX2NoZWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiZWZmMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFkYy91YmNfY2hlY2suYwpAQCAtMCwwICsxLDM3MiBAQAorLyoqKgorKiBDb3B5cmlnaHQgMjAxNyBNYXJjIFN0ZXZlbnMgPG1hcmNAbWFyYy1zdGV2ZW5zLm5sPiwgRGFuIFNodW1vdyA8ZGFuc2h1QG1pY3Jvc29mdC5jb20+CisqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgU29mdHdhcmUgTGljZW5zZS4KKyogU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0UudHh0IG9yIGNvcHkgYXQKKyogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKyoqKi8KKworLyoKKy8vIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSAncGFyc2VfYml0cmVsJyBwcm9ncmFtIGluIHRoZSB0b29scyBzZWN0aW9uCisvLyB1c2luZyB0aGUgZGF0YSBmaWxlcyBmcm9tIGRpcmVjdG9yeSAndG9vbHMvZGF0YS8zNTY1JworLy8KKy8vIHNoYTFfZHZzIGNvbnRhaW5zIGEgbGlzdCBvZiBTSEEtMSBEaXN0dXJiYW5jZSBWZWN0b3JzIChEVikgdG8gY2hlY2sKKy8vIGR2VHlwZSwgZHZLIGFuZCBkdkIgZGVmaW5lIHRoZSBEVjogSShLLEIpIG9yIElJKEssQikgKHNlZSB0aGUgcGFwZXIpCisvLyBkbVs4MF0gaXMgdGhlIGV4cGFuZGVkIG1lc3NhZ2UgYmxvY2sgWE9SLWRpZmZlcmVuY2UgZGVmaW5lZCBieSB0aGUgRFYKKy8vIHRlc3R0IGlzIHRoZSBzdGVwIHRvIGRvIHRoZSByZWNvbXByZXNzaW9uIGZyb20gZm9yIGNvbGxpc2lvbiBkZXRlY3Rpb24KKy8vIG1hc2tpIGFuZCBtYXNrYiBkZWZpbmUgdGhlIGJpdCB0byBjaGVjayBmb3IgZWFjaCBEViBpbiB0aGUgZHZtYXNrIHJldHVybmVkIGJ5IHViY19jaGVjaworLy8KKy8vIHViY19jaGVjayB0YWtlcyBhcyBpbnB1dCBhbiBleHBhbmRlZCBtZXNzYWdlIGJsb2NrIGFuZCB2ZXJpZmllcyB0aGUgdW5hdm9pZGFibGUgYml0Y29uZGl0aW9ucyBmb3IgYWxsIGxpc3RlZCBEVnMKKy8vIGl0IHJldHVybnMgYSBkdm1hc2sgd2hlcmUgZWFjaCBiaXQgYmVsb25naW5nIHRvIGEgRFYgaXMgc2V0IGlmIGFsbCB1bmF2b2lkYWJsZSBiaXRjb25kaXRpb25zIGZvciB0aGF0IERWIGhhdmUgYmVlbiBtZXQKKy8vIHRodXMgb25lIG5lZWRzIHRvIGRvIHRoZSByZWNvbXByZXNzaW9uIGNoZWNrIGZvciBlYWNoIERWIHRoYXQgaGFzIGl0cyBiaXQgc2V0CisvLworLy8gdWJjX2NoZWNrIGlzIHByb2dyYW1tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCB0aGUgdW5hdm9pZGFibGUgYml0Y29uZGl0aW9ucyBoYXZlIGJlZW4gaGFyZGNvZGVkCisvLyBhIGRpcmVjdGx5IHZlcmlmaWFibGUgdmVyc2lvbiBuYW1lZCB1YmNfY2hlY2tfdmVyaWZ5IGNhbiBiZSBmb3VuZCBpbiB1YmNfY2hlY2tfdmVyaWZ5LmMKKy8vIHViY19jaGVjayBoYXMgYmVlbiB2ZXJpZmllZCBhZ2FpbnN0IHViY19jaGVja192ZXJpZnkgdXNpbmcgdGhlICd1YmNfY2hlY2tfdGVzdCcgcHJvZ3JhbSBpbiB0aGUgdG9vbHMgc2VjdGlvbgorKi8KKworI2lmbmRlZiBTSEExRENfTk9fU1RBTkRBUkRfSU5DTFVERVMKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIFNIQTFEQ19DVVNUT01fSU5DTFVERV9VQkNfQ0hFQ0tfQworI2luY2x1ZGUgU0hBMURDX0NVU1RPTV9JTkNMVURFX1VCQ19DSEVDS19DCisjZW5kaWYKKyNpbmNsdWRlICJ1YmNfY2hlY2suaCIKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDNfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAwOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDRfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDVfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDZfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAzOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDZfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA0Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDdfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA1Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDdfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA2Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDhfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA3Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDhfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA4Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDlfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA5Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDlfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxMDsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JXzUwXzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTE7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV81MF8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDEyOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNTFfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxMzsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JXzUxXzJfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTQ7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV81Ml8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDE1Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzQ1XzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTY7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNDZfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxNzsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV80Nl8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDE4Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzQ3XzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTk7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNDhfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyMDsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV80OV8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDIxOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzQ5XzJfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjI7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTBfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyMzsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81MF8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDI0Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzUxXzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTFfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyNjsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81Ml8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDI3Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzUzXzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjg7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTRfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyOTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81NV8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDMwOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzU2XzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMzE7CisKK2R2X2luZm9fdCBzaGExX2R2c1tdID0KK3sKKyAgezEsNDMsMCw1OCwwLDAsIHsgMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDgsMHg4MDAwMDBlNiwweDgwMDAwMDRjLDB4MDAwMDA4MDMsMHg4MDAwMDE2MSwweDgwMDAwNTk5IH0gfQorLCB7MSw0NCwwLDU4LDAsMSwgeyAweGI0MDAwMDA4LDB4MDgwMDAwMDAsMHg5ODAwMDAwYywweGQ4MDAwMDEwLDB4MDgwMDAwMTAsMHhiODAwMDAxMCwweDk4MDAwMDAwLDB4NjAwMDAwMDAsMHgwMDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTQsMHgxMDAwMDAxMCwweGI4MDAwMDE0LDB4MjgwMDAwMDAsMHgyMDAwMDAxMCwweDQ4MDAwMDAwLDB4MDgwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHg5MDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweGIwMDAwMDA4LDB4NDAwMDAwMDAsMHg5MDAwMDAwMCwweGYwMDAwMDEwLDB4OTAwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4OTAwMDAwMTAsMHg5MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgyMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQwLDB4NDAwMDAwMDIsMHg4MDAwMDAwNCwweDgwMDAwMDgwLDB4ODAwMDAwMDYsMHgwMDAwMDA0OSwweDAwMDAwMTAzLDB4ODAwMDAwMDksMHg4MDAwMDAxMiwweDgwMDAwMjAyLDB4MDAwMDAwMTgsMHgwMDAwMDE2NCwweDAwMDAwNDA4LDB4ODAwMDAwZTYsMHg4MDAwMDA0YywweDAwMDAwODAzLDB4ODAwMDAxNjEgfSB9CissIHsxLDQ1LDAsNTgsMCwyLCB7IDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4LDB4MDAwMDAxNjQsMHgwMDAwMDQwOCwweDgwMDAwMGU2LDB4ODAwMDAwNGMsMHgwMDAwMDgwMyB9IH0KKywgezEsNDYsMCw1OCwwLDMsIHsgMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDgsMHg4MDAwMDBlNiwweDgwMDAwMDRjIH0gfQorLCB7MSw0NiwyLDU4LDAsNCwgeyAweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwLDB4MDAwMDA1OTAsMHgwMDAwMTAyMCwweDAwMDAwMzlhLDB4MDAwMDAxMzIgfSB9CissIHsxLDQ3LDAsNTgsMCw1LCB7IDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDgsMHg4MDAwMDBlNiB9IH0KKywgezEsNDcsMiw1OCwwLDYsIHsgMHgyMDAwMDA0MywweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwLDB4MDAwMDA1OTAsMHgwMDAwMTAyMCwweDAwMDAwMzlhIH0gfQorLCB7MSw0OCwwLDU4LDAsNywgeyAweGI4MDAwMDBhLDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDggfSB9CissIHsxLDQ4LDIsNTgsMCw4LCB7IDB4ZTAwMDAwMmEsMHgyMDAwMDA0MywweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwLDB4MDAwMDA1OTAsMHgwMDAwMTAyMCB9IH0KKywgezEsNDksMCw1OCwwLDksIHsgMHgxODAwMDAwMCwweGI4MDAwMDBhLDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0IH0gfQorLCB7MSw0OSwyLDU4LDAsMTAsIHsgMHg2MDAwMDAwMCwweGUwMDAwMDJhLDB4MjAwMDAwNDMsMHhiMDAwMDA0MCwweGQwMDAwMDUzLDB4ZDAwMDAwMjIsMHgyMDAwMDAwMCwweDYwMDAwMDMyLDB4NjAwMDAwNDMsMHgyMDAwMDA0MCwweGUwMDAwMDQyLDB4NjAwMDAwMDIsMHg4MDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDMsMHg0MDAwMDA1MiwweDQwMDAwMDQwLDB4ZTAwMDAwNTIsMHhhMDAwMDAwMCwweDgwMDAwMDQwLDB4MjAwMDAwMDEsMHgyMDAwMDA2MCwweDgwMDAwMDAxLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweDQwMDAwMDIyLDB4MDAwMDAwMDMsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4YzAwMDAwMjIsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4YzAwMDAwNDMsMHg0MDAwMDA2MiwweDgwMDAwMDAxLDB4NDAwMDAwNDIsMHg0MDAwMDA0MiwweDQwMDAwMDAyLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMiwweDgwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA0LDB4MDAwMDAwODAsMHgwMDAwMDAwNCwweDAwMDAwMDA5LDB4MDAwMDAxMDEsMHgwMDAwMDAwOSwweDAwMDAwMDEyLDB4MDAwMDAyMDIsMHgwMDAwMDAxYSwweDAwMDAwMTI0LDB4MDAwMDA0MGMsMHgwMDAwMDAyNiwweDAwMDAwMDRhLDB4MDAwMDA4MGEsMHgwMDAwMDA2MCwweDAwMDAwNTkwIH0gfQorLCB7MSw1MCwwLDY1LDAsMTEsIHsgMHgwODAwMDAwYywweDE4MDAwMDAwLDB4YjgwMDAwMGEsMHhjODAwMDAxMCwweDJjMDAwMDEwLDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4IH0gfQorLCB7MSw1MCwyLDY1LDAsMTIsIHsgMHgyMDAwMDAzMCwweDYwMDAwMDAwLDB4ZTAwMDAwMmEsMHgyMDAwMDA0MywweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwIH0gfQorLCB7MSw1MSwwLDY1LDAsMTMsIHsgMHhlODAwMDAwMCwweDA4MDAwMDBjLDB4MTgwMDAwMDAsMHhiODAwMDAwYSwweGM4MDAwMDEwLDB4MmMwMDAwMTAsMHhmNDAwMDAxNCwweGI0MDAwMDA4LDB4MDgwMDAwMDAsMHg5ODAwMDAwYywweGQ4MDAwMDEwLDB4MDgwMDAwMTAsMHhiODAwMDAxMCwweDk4MDAwMDAwLDB4NjAwMDAwMDAsMHgwMDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTQsMHgxMDAwMDAxMCwweGI4MDAwMDE0LDB4MjgwMDAwMDAsMHgyMDAwMDAxMCwweDQ4MDAwMDAwLDB4MDgwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHg5MDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweGIwMDAwMDA4LDB4NDAwMDAwMDAsMHg5MDAwMDAwMCwweGYwMDAwMDEwLDB4OTAwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4OTAwMDAwMTAsMHg5MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgyMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQwLDB4NDAwMDAwMDIsMHg4MDAwMDAwNCwweDgwMDAwMDgwLDB4ODAwMDAwMDYsMHgwMDAwMDA0OSwweDAwMDAwMTAzLDB4ODAwMDAwMDksMHg4MDAwMDAxMiwweDgwMDAwMjAyIH0gfQorLCB7MSw1MSwyLDY1LDAsMTQsIHsgMHhhMDAwMDAwMywweDIwMDAwMDMwLDB4NjAwMDAwMDAsMHhlMDAwMDAyYSwweDIwMDAwMDQzLDB4YjAwMDAwNDAsMHhkMDAwMDA1MywweGQwMDAwMDIyLDB4MjAwMDAwMDAsMHg2MDAwMDAzMiwweDYwMDAwMDQzLDB4MjAwMDAwNDAsMHhlMDAwMDA0MiwweDYwMDAwMDAyLDB4ODAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAzLDB4NDAwMDAwNTIsMHg0MDAwMDA0MCwweGUwMDAwMDUyLDB4YTAwMDAwMDAsMHg4MDAwMDA0MCwweDIwMDAwMDAxLDB4MjAwMDAwNjAsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHg0MDAwMDAyMiwweDAwMDAwMDAzLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweGMwMDAwMDIyLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweGMwMDAwMDQzLDB4NDAwMDAwNjIsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4NDAwMDAwNDIsMHg0MDAwMDAwMiwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHg4MDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTAxLDB4MDAwMDAwMDksMHgwMDAwMDAxMiwweDAwMDAwMjAyLDB4MDAwMDAwMWEsMHgwMDAwMDEyNCwweDAwMDAwNDBjLDB4MDAwMDAwMjYsMHgwMDAwMDA0YSwweDAwMDAwODBhIH0gfQorLCB7MSw1MiwwLDY1LDAsMTUsIHsgMHgwNDAwMDAxMCwweGU4MDAwMDAwLDB4MDgwMDAwMGMsMHgxODAwMDAwMCwweGI4MDAwMDBhLDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyIH0gfQorLCB7Miw0NSwwLDU4LDAsMTYsIHsgMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODksMHgwMDAwMDAxNCwweDgwMDAwMjRiLDB4MDAwMDAxMWIsMHg4MDAwMDE2ZCwweDgwMDAwNDFhLDB4MDAwMDAyZTQsMHg4MDAwMDA1NCwweDAwMDAwOTY3IH0gfQorLCB7Miw0NiwwLDU4LDAsMTcsIHsgMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0LDB4ODAwMDAyNGIsMHgwMDAwMDExYiwweDgwMDAwMTZkLDB4ODAwMDA0MWEsMHgwMDAwMDJlNCwweDgwMDAwMDU0IH0gfQorLCB7Miw0NiwyLDU4LDAsMTgsIHsgMHg5MDAwMDA3MCwweGIwMDAwMDUzLDB4MzAwMDAwMDgsMHgwMDAwMDA0MywweGQwMDAwMDcyLDB4YjAwMDAwMTAsMHhmMDAwMDA2MiwweGMwMDAwMDQyLDB4MDAwMDAwMzAsMHhlMDAwMDA0MiwweDIwMDAwMDYwLDB4ZTAwMDAwNDEsMHgyMDAwMDA1MCwweGMwMDAwMDQxLDB4ZTAwMDAwNzIsMHhhMDAwMDAwMywweGMwMDAwMDEyLDB4NjAwMDAwNDEsMHhjMDAwMDAzMiwweDIwMDAwMDAxLDB4YzAwMDAwMDIsMHhlMDAwMDA0MiwweDYwMDAwMDQyLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMSwweDAwMDAwMDYwLDB4ODAwMDAwMDMsMHg0MDAwMDAwMiwweGMwMDAwMDQwLDB4YzAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA0LDB4MDAwMDAwODAsMHgwMDAwMDAwNCwweDAwMDAwMDA5LDB4MDAwMDAxMDUsMHgwMDAwMDA4OSwweDAwMDAwMDE2LDB4MDAwMDAyMGIsMHgwMDAwMDExYiwweDAwMDAwMTJkLDB4MDAwMDA0MWUsMHgwMDAwMDIyNCwweDAwMDAwMDUwLDB4MDAwMDA5MmUsMHgwMDAwMDQ2YywweDAwMDAwNWI2LDB4MDAwMDEwNmEsMHgwMDAwMGI5MCwweDAwMDAwMTUyIH0gfQorLCB7Miw0NywwLDU4LDAsMTksIHsgMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5LDB4MDAwMDAwMTQsMHg4MDAwMDI0YiwweDAwMDAwMTFiLDB4ODAwMDAxNmQsMHg4MDAwMDQxYSwweDAwMDAwMmU0IH0gfQorLCB7Miw0OCwwLDU4LDAsMjAsIHsgMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODksMHgwMDAwMDAxNCwweDgwMDAwMjRiLDB4MDAwMDAxMWIsMHg4MDAwMDE2ZCwweDgwMDAwNDFhIH0gfQorLCB7Miw0OSwwLDU4LDAsMjEsIHsgMHgzYzAwMDAwNCwweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0LDB4ODAwMDAyNGIsMHgwMDAwMDExYiwweDgwMDAwMTZkIH0gfQorLCB7Miw0OSwyLDU4LDAsMjIsIHsgMHhmMDAwMDAxMCwweGYwMDAwMDZhLDB4ODAwMDAwNDAsMHg5MDAwMDA3MCwweGIwMDAwMDUzLDB4MzAwMDAwMDgsMHgwMDAwMDA0MywweGQwMDAwMDcyLDB4YjAwMDAwMTAsMHhmMDAwMDA2MiwweGMwMDAwMDQyLDB4MDAwMDAwMzAsMHhlMDAwMDA0MiwweDIwMDAwMDYwLDB4ZTAwMDAwNDEsMHgyMDAwMDA1MCwweGMwMDAwMDQxLDB4ZTAwMDAwNzIsMHhhMDAwMDAwMywweGMwMDAwMDEyLDB4NjAwMDAwNDEsMHhjMDAwMDAzMiwweDIwMDAwMDAxLDB4YzAwMDAwMDIsMHhlMDAwMDA0MiwweDYwMDAwMDQyLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMSwweDAwMDAwMDYwLDB4ODAwMDAwMDMsMHg0MDAwMDAwMiwweGMwMDAwMDQwLDB4YzAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA0LDB4MDAwMDAwODAsMHgwMDAwMDAwNCwweDAwMDAwMDA5LDB4MDAwMDAxMDUsMHgwMDAwMDA4OSwweDAwMDAwMDE2LDB4MDAwMDAyMGIsMHgwMDAwMDExYiwweDAwMDAwMTJkLDB4MDAwMDA0MWUsMHgwMDAwMDIyNCwweDAwMDAwMDUwLDB4MDAwMDA5MmUsMHgwMDAwMDQ2YywweDAwMDAwNWI2IH0gfQorLCB7Miw1MCwwLDY1LDAsMjMsIHsgMHhiNDAwMDAxYywweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5LDB4MDAwMDAwMTQsMHg4MDAwMDI0YiwweDAwMDAwMTFiIH0gfQorLCB7Miw1MCwyLDY1LDAsMjQsIHsgMHhkMDAwMDA3MiwweGYwMDAwMDEwLDB4ZjAwMDAwNmEsMHg4MDAwMDA0MCwweDkwMDAwMDcwLDB4YjAwMDAwNTMsMHgzMDAwMDAwOCwweDAwMDAwMDQzLDB4ZDAwMDAwNzIsMHhiMDAwMDAxMCwweGYwMDAwMDYyLDB4YzAwMDAwNDIsMHgwMDAwMDAzMCwweGUwMDAwMDQyLDB4MjAwMDAwNjAsMHhlMDAwMDA0MSwweDIwMDAwMDUwLDB4YzAwMDAwNDEsMHhlMDAwMDA3MiwweGEwMDAwMDAzLDB4YzAwMDAwMTIsMHg2MDAwMDA0MSwweGMwMDAwMDMyLDB4MjAwMDAwMDEsMHhjMDAwMDAwMiwweGUwMDAwMDQyLDB4NjAwMDAwNDIsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAxLDB4MDAwMDAwNjAsMHg4MDAwMDAwMywweDQwMDAwMDAyLDB4YzAwMDAwNDAsMHhjMDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwNSwweDAwMDAwMDg5LDB4MDAwMDAwMTYsMHgwMDAwMDIwYiwweDAwMDAwMTFiLDB4MDAwMDAxMmQsMHgwMDAwMDQxZSwweDAwMDAwMjI0LDB4MDAwMDAwNTAsMHgwMDAwMDkyZSwweDAwMDAwNDZjIH0gfQorLCB7Miw1MSwwLDY1LDAsMjUsIHsgMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4M2MwMDAwMDQsMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODksMHgwMDAwMDAxNCwweDgwMDAwMjRiIH0gfQorLCB7Miw1MSwyLDY1LDAsMjYsIHsgMHgwMDAwMDA0MywweGQwMDAwMDcyLDB4ZjAwMDAwMTAsMHhmMDAwMDA2YSwweDgwMDAwMDQwLDB4OTAwMDAwNzAsMHhiMDAwMDA1MywweDMwMDAwMDA4LDB4MDAwMDAwNDMsMHhkMDAwMDA3MiwweGIwMDAwMDEwLDB4ZjAwMDAwNjIsMHhjMDAwMDA0MiwweDAwMDAwMDMwLDB4ZTAwMDAwNDIsMHgyMDAwMDA2MCwweGUwMDAwMDQxLDB4MjAwMDAwNTAsMHhjMDAwMDA0MSwweGUwMDAwMDcyLDB4YTAwMDAwMDMsMHhjMDAwMDAxMiwweDYwMDAwMDQxLDB4YzAwMDAwMzIsMHgyMDAwMDAwMSwweGMwMDAwMDAyLDB4ZTAwMDAwNDIsMHg2MDAwMDA0MiwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDEsMHgwMDAwMDA2MCwweDgwMDAwMDAzLDB4NDAwMDAwMDIsMHhjMDAwMDA0MCwweGMwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTA1LDB4MDAwMDAwODksMHgwMDAwMDAxNiwweDAwMDAwMjBiLDB4MDAwMDAxMWIsMHgwMDAwMDEyZCwweDAwMDAwNDFlLDB4MDAwMDAyMjQsMHgwMDAwMDA1MCwweDAwMDAwOTJlIH0gfQorLCB7Miw1MiwwLDY1LDAsMjcsIHsgMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgzYzAwMDAwNCwweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0IH0gfQorLCB7Miw1MywwLDY1LDAsMjgsIHsgMHhjYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5IH0gfQorLCB7Miw1NCwwLDY1LDAsMjksIHsgMHgwNDAwMDAxYywweGNjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4M2MwMDAwMDQsMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3IH0gfQorLCB7Miw1NSwwLDY1LDAsMzAsIHsgMHgwMDAwMDAxMCwweDA0MDAwMDFjLDB4Y2MwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgzYzAwMDAwNCwweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiIH0gfQorLCB7Miw1NiwwLDY1LDAsMzEsIHsgMHgyNjAwMDAxYSwweDAwMDAwMDEwLDB4MDQwMDAwMWMsMHhjYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2IH0gfQorLCB7MCwwLDAsMCwwLDAsIHswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9fQorfTsKK3ZvaWQgdWJjX2NoZWNrKGNvbnN0IHVpbnQzMl90IFdbODBdLCB1aW50MzJfdCBkdm1hc2tbMV0pCit7CisJdWludDMyX3QgbWFzayA9IH4oKHVpbnQzMl90KSgwKSk7CisJbWFzayAmPSAoKCgoKFdbNDRdXldbNDVdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ4XzBfYml0fERWX0lfNTFfMF9iaXR8RFZfSV81Ml8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV81MF8wX2JpdHxEVl9JSV81MV8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ5XV5XWzUwXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80Nl8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV81MF8wX2JpdHxEVl9JSV81MV8wX2JpdHxEVl9JSV81NV8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ4XV5XWzQ5XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ5XzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzU0XzBfYml0fERWX0lJXzU1XzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0N11eKFdbNTBdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV80N18wX2JpdHxEVl9JXzQ5XzBfYml0fERWX0lfNTFfMF9iaXR8RFZfSUlfNDVfMF9iaXR8RFZfSUlfNTFfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0N11eV1s0OF0pPj4yOSkmMSktMSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81M18wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ2XT4+NCleKFdbNDldPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ2XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzU1XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDZdXldbNDddKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNTBfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTJfMF9iaXR8RFZfSUlfNTNfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0NV0+PjQpXihXWzQ4XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzQ3XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ1XV5XWzQ2XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80OV8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzUxXzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDRdPj40KV4oV1s0N10+PjI5KSkmMSktMSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSV80Nl8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lfNTBfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTNfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0M10+PjQpXihXWzQ2XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80M18wX2JpdHxEVl9JXzQ1XzBfYml0fERWX0lfNDdfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81Ml8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQzXV5XWzQ0XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80N18wX2JpdHxEVl9JXzUwXzBfYml0fERWX0lfNTFfMF9iaXR8RFZfSUlfNDVfMF9iaXR8RFZfSUlfNDlfMF9iaXR8RFZfSUlfNTBfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0Ml0+PjQpXihXWzQ1XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSV81Ml8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV81MV8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQxXT4+NCleKFdbNDRdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSV80N18wX2JpdHxEVl9JXzUxXzBfYml0fERWX0lJXzQ1XzBfYml0fERWX0lJXzUwXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDBdXldbNDFdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ0XzBfYml0fERWX0lfNDdfMF9iaXR8RFZfSV80OF8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzU0XV5XWzU1XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV81MV8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81MF8wX2JpdHxEVl9JSV81NV8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzUzXV5XWzU0XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV81MF8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81NF8wX2JpdHxEVl9JSV81NV8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzUyXV5XWzUzXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80OV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81M18wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNTBdXihXWzUzXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNTBfMF9iaXR8RFZfSV81Ml8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzUwXV5XWzUxXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80N18wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV81MV8wX2JpdHxEVl9JSV81Ml8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNDldXihXWzUyXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNDlfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNDhdXihXWzUxXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNDhfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDJdXldbNDNdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ2XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV80OV8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQxXV5XWzQyXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNDhfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0MF0+PjQpXihXWzQzXT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lfNTBfMF9iaXR8RFZfSUlfNDlfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1szOV0+PjQpXihXWzQyXT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80M18wX2JpdHxEVl9JXzQ1XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ0XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNTRfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKQorCQltYXNrICY9ICgoKCgoV1szOF0+PjQpXihXWzQxXT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzU0XzBfYml0fERWX0lJXzU2XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbMzddPj40KV4oV1s0MF0+PjI5KSkmMSktMSkgfCB+KERWX0lfNDNfMF9iaXR8RFZfSV80N18wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV81M18wX2JpdHxEVl9JSV81NV8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTJfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTFfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKQorCQltYXNrICY9ICgoKCgoV1s1NV1eV1s1Nl0pPj4yOSkmMSktMSkgfCB+KERWX0lfNTJfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTFfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUyXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzU2XzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1s1Ml1eKFdbNTVdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV81Ml8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81MF8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTFfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNDlfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzUxXV4oV1s1NF0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JXzUxXzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzQ5XzBfYml0fERWX0lJXzU1XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80OF8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81Ml8wX2JpdHxEVl9JSV81M18wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzUxXV5XWzUyXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80OF8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81Ml8wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDZfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80OF8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzM2XT4+NCleKFdbNDBdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ2XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSUlfNDVfMF9iaXR8RFZfSUlfNDhfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUyXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzQ5XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s1M11eV1s1Nl0pPj4yOSkmMSkpIHwgfihEVl9JXzUyXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzQ5XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV81MF8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80N18wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNTFdXldbNTRdKT4+MjkpJjEpKSB8IH4oRFZfSV81MF8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80N18wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDlfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80NV8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNTBdXldbNTJdKT4+MjkpJjEpKSB8IH4oRFZfSV80OV8wX2JpdHxEVl9JXzUxXzBfYml0fERWX0lJXzQ1XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80OF8wX2JpdHxEVl9JXzUwXzBfYml0fERWX0lfNTJfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQ5XV5XWzUxXSk+PjI5KSYxKSkgfCB+KERWX0lfNDhfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JXzUyXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80N18wX2JpdHxEVl9JXzQ5XzBfYml0fERWX0lfNTFfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQ4XV5XWzUwXSk+PjI5KSYxKSkgfCB+KERWX0lfNDdfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JXzUxXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80Nl8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lfNTBfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQ3XV5XWzQ5XSk+PjI5KSYxKSkgfCB+KERWX0lfNDZfMF9iaXR8RFZfSV80OF8wX2JpdHxEVl9JXzUwXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80NV8wX2JpdHxEVl9JXzQ3XzBfYml0fERWX0lfNDlfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQ2XV5XWzQ4XSk+PjI5KSYxKSkgfCB+KERWX0lfNDVfMF9iaXR8RFZfSV80N18wX2JpdHxEVl9JXzQ5XzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0NV1eV1s0N10pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV80N18yX2JpdHxEVl9JXzQ5XzJfYml0fERWX0lfNTFfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ0XzBfYml0fERWX0lfNDZfMF9iaXR8RFZfSV80OF8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDVdXldbNDddKT4+MjkpJjEpKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lfNDhfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0NF1eV1s0Nl0pPj42KSYxKS0xKSB8IH4oRFZfSV80Nl8yX2JpdHxEVl9JXzQ4XzJfYml0fERWX0lfNTBfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSV80N18wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDRdXldbNDZdKT4+MjkpJjEpKSB8IH4oRFZfSV80M18wX2JpdHxEVl9JXzQ1XzBfYml0fERWX0lfNDdfMF9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbNDFdXihXWzQyXT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzQ4XzJfYml0fERWX0lJXzQ2XzJfYml0fERWX0lJXzUxXzJfYml0KSk7CisJbWFzayAmPSAoKDAtKChXWzQwXV4oV1s0MV0+PjUpKSYoMTw8MSkpKSB8IH4oRFZfSV80N18yX2JpdHxEVl9JXzUxXzJfYml0fERWX0lJXzUwXzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lJXzU2XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s0MF1eV1s0Ml0pPj40KSYxKSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSV80Nl8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgwLSgoV1szOV1eKFdbNDBdPj41KSkmKDE8PDEpKSkgfCB+KERWX0lfNDZfMl9iaXR8RFZfSV81MF8yX2JpdHxEVl9JSV80OV8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDNfMF9iaXR8RFZfSV80NV8wX2JpdHxEVl9JSV81NV8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbMzldXldbNDFdKT4+NCkmMSkpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ0XzBfYml0fERWX0lJXzU0XzBfYml0fERWX0lJXzU2XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1szOF1eV1s0MF0pPj40KSYxKSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSUlfNTRfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQzXzBfYml0fERWX0lJXzUzXzBfYml0fERWX0lJXzU1XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1szN11eV1szOV0pPj40KSYxKSkgfCB+KERWX0lfNDNfMF9iaXR8RFZfSUlfNTNfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbMzZdXihXWzM3XT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzQ3XzJfYml0fERWX0lfNTBfMl9iaXR8RFZfSUlfNDZfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ1XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSUlfNDdfMF9iaXQpKQorCQltYXNrICY9ICgoKCgoV1szNV0+PjQpXihXWzM5XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lJXzQ3XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80OF8wX2JpdHxEVl9JSV80OF8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1s2M11eKFdbNjRdPj41KSkmKDE8PDApKSkgfCB+KERWX0lfNDhfMF9iaXR8RFZfSUlfNDhfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ1XzBfYml0fERWX0lJXzQ1XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKChXWzYzXV4oV1s2NF0+PjUpKSYoMTw8MSkpKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JSV80NV8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDdfMF9iaXR8RFZfSUlfNDdfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKFdbNjJdXihXWzYzXT4+NSkpJigxPDwwKSkpIHwgfihEVl9JXzQ3XzBfYml0fERWX0lJXzQ3XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80Nl8wX2JpdHxEVl9JSV80Nl8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1s2MV1eKFdbNjJdPj41KSkmKDE8PDApKSkgfCB+KERWX0lfNDZfMF9iaXR8RFZfSUlfNDZfMF9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbNjFdXihXWzYyXT4+NSkpJigxPDwyKSkpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lJXzQ2XzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80NV8wX2JpdHxEVl9JSV80NV8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1s2MF1eKFdbNjFdPj41KSkmKDE8PDApKSkgfCB+KERWX0lfNDVfMF9iaXR8RFZfSUlfNDVfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81MV8wX2JpdHxEVl9JSV81NF8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzU4XV5XWzU5XSk+PjI5KSYxKS0xKSB8IH4oRFZfSUlfNTFfMF9iaXR8RFZfSUlfNTRfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81MF8wX2JpdHxEVl9JSV81M18wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzU3XV5XWzU4XSk+PjI5KSYxKS0xKSB8IH4oRFZfSUlfNTBfMF9iaXR8RFZfSUlfNTNfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81Ml8wX2JpdHxEVl9JSV81NF8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbNTZdXihXWzU5XT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lJXzUyXzBfYml0fERWX0lJXzU0XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNTFfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzU2XV5XWzU5XSk+PjI5KSYxKSkgfCB+KERWX0lJXzUxXzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNDlfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKQorCQltYXNrICY9ICgoKCgoV1s1Nl1eV1s1N10pPj4yOSkmMSktMSkgfCB+KERWX0lJXzQ5XzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNTFfMF9iaXR8RFZfSUlfNTNfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzU1XV4oV1s1OF0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JSV81MV8wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lJXzUwXzBfYml0fERWX0lJXzUyXzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1s1NF1eKFdbNTddPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSUlfNTBfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV80OV8wX2JpdHxEVl9JSV81MV8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbNTNdXihXWzU2XT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lJXzQ5XzBfYml0fERWX0lJXzUxXzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s1MV1eKFdbNTBdPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzUwXzJfYml0fERWX0lJXzQ2XzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0OF1eV1s1MF0pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV81MF8yX2JpdHxEVl9JSV80Nl8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTFfMF9iaXR8RFZfSV81Ml8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDhdXldbNTVdKT4+MjkpJjEpKSB8IH4oRFZfSV81MV8wX2JpdHxEVl9JXzUyXzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0N11eV1s0OV0pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV80OV8yX2JpdHxEVl9JXzUxXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0OF1eKFdbNDddPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzQ3XzJfYml0fERWX0lJXzUxXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0Nl1eV1s0OF0pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV80OF8yX2JpdHxEVl9JXzUwXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0N11eKFdbNDZdPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lJXzUwXzJfYml0KSk7CisJbWFzayAmPSAoKDAtKChXWzQ0XV4oV1s0NV0+PjUpKSYoMTw8MSkpKSB8IH4oRFZfSV81MV8yX2JpdHxEVl9JSV80OV8yX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNDNdXldbNDVdKSYoMTw8NikpLSgxPDw2KSkgfCB+KERWX0lfNDdfMl9iaXR8RFZfSV80OV8yX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQyXV5XWzQ0XSk+PjYpJjEpLTEpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lfNDhfMl9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQzXV4oV1s0Ml0+PjUpKSYoMTw8MSkpLSgxPDwxKSkgfCB+KERWX0lJXzQ2XzJfYml0fERWX0lJXzUxXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0Ml1eKFdbNDFdPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzUxXzJfYml0fERWX0lJXzUwXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0MV1eKFdbNDBdPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzUwXzJfYml0fERWX0lJXzQ5XzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV81Ml8wX2JpdHxEVl9JSV81MV8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbMzldXihXWzQzXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNTJfMF9iaXR8RFZfSUlfNTFfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUxXzBfYml0fERWX0lJXzUwXzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1szOF1eKFdbNDJdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV81MV8wX2JpdHxEVl9JSV81MF8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDhfMl9iaXR8RFZfSV81MV8yX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1szN11eKFdbMzhdPj41KSkmKDE8PDEpKSkgfCB+KERWX0lfNDhfMl9iaXR8RFZfSV81MV8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTBfMF9iaXR8RFZfSUlfNDlfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzM3XV4oV1s0MV0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JXzUwXzBfYml0fERWX0lJXzQ5XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNTJfMF9iaXR8RFZfSUlfNTRfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKFdbMzZdXldbMzhdKSYoMTw8NCkpKSB8IH4oRFZfSUlfNTJfMF9iaXR8RFZfSUlfNTRfMF9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbMzVdXihXWzM2XT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lfNDlfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUxXzBfYml0fERWX0lJXzQ3XzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1szNV1eKFdbMzldPj4yNSkpJigxPDwzKSktKDE8PDMpKSB8IH4oRFZfSV81MV8wX2JpdHxEVl9JSV80N18wX2JpdCkpOworaWYgKG1hc2spIHsKKworCWlmIChtYXNrICYgRFZfSV80M18wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKChXWzYxXV4oV1s2Ml0+PjUpKSAmICgxPDwxKSkKKwkJCSB8fCAhKCEoKFdbNTldXihXWzYzXT4+MjUpKSAmICgxPDw1KSkpCisJCQkgfHwgISgoV1s1OF1eKFdbNjNdPj4zMCkpICYgKDE8PDApKQorCQkgKSAgbWFzayAmPSB+RFZfSV80M18wX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNDRfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISgoV1s2Ml1eKFdbNjNdPj41KSkgJiAoMTw8MSkpCisJCQkgfHwgISghKChXWzYwXV4oV1s2NF0+PjI1KSkgJiAoMTw8NSkpKQorCQkJIHx8ICEoKFdbNTldXihXWzY0XT4+MzApKSAmICgxPDwwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lfNDRfMF9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JXzQ2XzJfYml0KQorCQltYXNrICY9ICgofigoV1s0MF1eV1s0Ml0pPj4yKSkgfCB+RFZfSV80Nl8yX2JpdCk7CisJaWYgKG1hc2sgJiBEVl9JXzQ3XzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoKFdbNjJdXihXWzYzXT4+NSkpICYgKDE8PDIpKQorCQkJIHx8ICEoISgoV1s0MV1eV1s0M10pICYgKDE8PDYpKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lfNDdfMl9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JXzQ4XzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoKFdbNjNdXihXWzY0XT4+NSkpICYgKDE8PDIpKQorCQkJIHx8ICEoISgoV1s0OF1eKFdbNDldPDw1KSkgJiAoMTw8NikpKQorCQkgKSAgbWFzayAmPSB+RFZfSV80OF8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNDlfMl9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzQ5XV4oV1s1MF08PDUpKSAmICgxPDw2KSkpCisJCQkgfHwgISgoV1s0Ml1eV1s1MF0pICYgKDE8PDEpKQorCQkJIHx8ICEoISgoV1szOV1eKFdbNDBdPDw1KSkgJiAoMTw8NikpKQorCQkJIHx8ICEoKFdbMzhdXldbNDBdKSAmICgxPDwxKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lfNDlfMl9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JXzUwXzBfYml0KQorCQltYXNrICY9ICgoKChXWzM2XV5XWzM3XSk8PDcpKSB8IH5EVl9JXzUwXzBfYml0KTsKKwlpZiAobWFzayAmIERWX0lfNTBfMl9iaXQpCisJCW1hc2sgJj0gKCgoKFdbNDNdXldbNTFdKTw8MTEpKSB8IH5EVl9JXzUwXzJfYml0KTsKKwlpZiAobWFzayAmIERWX0lfNTFfMF9iaXQpCisJCW1hc2sgJj0gKCgoKFdbMzddXldbMzhdKTw8OSkpIHwgfkRWX0lfNTFfMF9iaXQpOworCWlmIChtYXNrICYgRFZfSV81MV8yX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKCEoKFdbNTFdXihXWzUyXTw8NSkpICYgKDE8PDYpKSkKKwkJCSB8fCAhKCEoKFdbNDldXldbNTFdKSAmICgxPDw2KSkpCisJCQkgfHwgISghKChXWzM3XV4oV1szN10+PjUpKSAmICgxPDwxKSkpCisJCQkgfHwgISghKChXWzM1XV4oV1szOV0+PjI1KSkgJiAoMTw8NSkpKQorCQkgKSAgbWFzayAmPSB+RFZfSV81MV8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNTJfMF9iaXQpCisJCW1hc2sgJj0gKCgoKFdbMzhdXldbMzldKTw8MTEpKSB8IH5EVl9JXzUyXzBfYml0KTsKKwlpZiAobWFzayAmIERWX0lJXzQ2XzJfYml0KQorCQltYXNrICY9ICgoKChXWzQ3XV5XWzUxXSk8PDE3KSkgfCB+RFZfSUlfNDZfMl9iaXQpOworCWlmIChtYXNrICYgRFZfSUlfNDhfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzM2XV4oV1s0MF0+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoKFdbMzVdXihXWzQwXTw8MikpICYgKDE8PDMwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzQ4XzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNDlfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzM3XV4oV1s0MV0+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoKFdbMzZdXihXWzQxXTw8MikpICYgKDE8PDMwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzQ5XzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNDlfMl9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzUzXV4oV1s1NF08PDUpKSAmICgxPDw2KSkpCisJCQkgfHwgISghKChXWzUxXV5XWzUzXSkgJiAoMTw8NikpKQorCQkJIHx8ICEoKFdbNTBdXldbNTRdKSAmICgxPDwxKSkKKwkJCSB8fCAhKCEoKFdbNDVdXihXWzQ2XTw8NSkpICYgKDE8PDYpKSkKKwkJCSB8fCAhKCEoKFdbMzddXihXWzQxXT4+MjUpKSAmICgxPDw1KSkpCisJCQkgfHwgISgoV1szNl1eKFdbNDFdPj4zMCkpICYgKDE8PDApKQorCQkgKSAgbWFzayAmPSB+RFZfSUlfNDlfMl9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JSV81MF8wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKChXWzU1XV5XWzU4XSkgJiAoMTw8MjkpKQorCQkJIHx8ICEoISgoV1szOF1eKFdbNDJdPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKChXWzM3XV4oV1s0Ml08PDIpKSAmICgxPDwzMCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81MF8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUwXzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1NF1eKFdbNTVdPDw1KSkgJiAoMTw8NikpKQorCQkJIHx8ICEoISgoV1s1Ml1eV1s1NF0pICYgKDE8PDYpKSkKKwkJCSB8fCAhKChXWzUxXV5XWzU1XSkgJiAoMTw8MSkpCisJCQkgfHwgISgoV1s0NV1eV1s0N10pICYgKDE8PDEpKQorCQkJIHx8ICEoISgoV1szOF1eKFdbNDJdPj4yNSkpICYgKDE8PDUpKSkKKwkJCSB8fCAhKChXWzM3XV4oV1s0Ml0+PjMwKSkgJiAoMTw8MCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81MF8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUxXzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1szOV1eKFdbNDNdPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKChXWzM4XV4oV1s0M108PDIpKSAmICgxPDwzMCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81MV8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUxXzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1NV1eKFdbNTZdPDw1KSkgJiAoMTw8NikpKQorCQkJIHx8ICEoISgoV1s1M11eV1s1NV0pICYgKDE8PDYpKSkKKwkJCSB8fCAhKChXWzUyXV5XWzU2XSkgJiAoMTw8MSkpCisJCQkgfHwgISgoV1s0Nl1eV1s0OF0pICYgKDE8PDEpKQorCQkJIHx8ICEoISgoV1szOV1eKFdbNDNdPj4yNSkpICYgKDE8PDUpKSkKKwkJCSB8fCAhKChXWzM4XV4oV1s0M10+PjMwKSkgJiAoMTw8MCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81MV8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUyXzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1OV1eV1s2MF0pICYgKDE8PDI5KSkpCisJCQkgfHwgISghKChXWzQwXV4oV1s0NF0+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoISgoV1s0MF1eKFdbNDRdPj4yNSkpICYgKDE8PDQpKSkKKwkJCSB8fCAhKChXWzM5XV4oV1s0NF08PDIpKSAmICgxPDwzMCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81Ml8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUzXzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoKFdbNThdXldbNjFdKSAmICgxPDwyOSkpCisJCQkgfHwgISghKChXWzU3XV4oV1s2MV0+PjI1KSkgJiAoMTw8NCkpKQorCQkJIHx8ICEoISgoV1s0MV1eKFdbNDVdPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKCEoKFdbNDFdXihXWzQ1XT4+MjUpKSAmICgxPDw0KSkpCisJCSApICBtYXNrICY9IH5EVl9JSV81M18wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzU0XzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1OF1eKFdbNjJdPj4yNSkpICYgKDE8PDQpKSkKKwkJCSB8fCAhKCEoKFdbNDJdXihXWzQ2XT4+MjUpKSAmICgxPDwzKSkpCisJCQkgfHwgISghKChXWzQyXV4oV1s0Nl0+PjI1KSkgJiAoMTw8NCkpKQorCQkgKSAgbWFzayAmPSB+RFZfSUlfNTRfMF9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JSV81NV8wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKCEoKFdbNTldXihXWzYzXT4+MjUpKSAmICgxPDw0KSkpCisJCQkgfHwgISghKChXWzU3XV4oV1s1OV0+PjI1KSkgJiAoMTw8NCkpKQorCQkJIHx8ICEoISgoV1s0M11eKFdbNDddPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKCEoKFdbNDNdXihXWzQ3XT4+MjUpKSAmICgxPDw0KSkpCisJCSApICBtYXNrICY9IH5EVl9JSV81NV8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzU2XzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s2MF1eKFdbNjRdPj4yNSkpICYgKDE8PDQpKSkKKwkJCSB8fCAhKCEoKFdbNDRdXihXWzQ4XT4+MjUpKSAmICgxPDwzKSkpCisJCQkgfHwgISghKChXWzQ0XV4oV1s0OF0+PjI1KSkgJiAoMTw8NCkpKQorCQkgKSAgbWFzayAmPSB+RFZfSUlfNTZfMF9iaXQ7Cit9CisKKwlkdm1hc2tbMF09bWFzazsKK30KKworI2lmZGVmIFNIQTFEQ19DVVNUT01fVFJBSUxJTkdfSU5DTFVERV9VQkNfQ0hFQ0tfQworI2luY2x1ZGUgU0hBMURDX0NVU1RPTV9UUkFJTElOR19JTkNMVURFX1VCQ19DSEVDS19DCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NoYTFkYy91YmNfY2hlY2suaCBiL3NoYTFkYy91YmNfY2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2UxN2RjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMWRjL3ViY19jaGVjay5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioKKyogQ29weXJpZ2h0IDIwMTcgTWFyYyBTdGV2ZW5zIDxtYXJjQG1hcmMtc3RldmVucy5ubD4sIERhbiBTaHVtb3cgPGRhbnNodUBtaWNyb3NvZnQuY29tPgorKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIFNvZnR3YXJlIExpY2Vuc2UuCisqIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFLnR4dCBvciBjb3B5IGF0CisqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisqKiovCisKKy8qCisvLyB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgJ3BhcnNlX2JpdHJlbCcgcHJvZ3JhbSBpbiB0aGUgdG9vbHMgc2VjdGlvbgorLy8gdXNpbmcgdGhlIGRhdGEgZmlsZXMgZnJvbSBkaXJlY3RvcnkgJ3Rvb2xzL2RhdGEvMzU2NScKKy8vCisvLyBzaGExX2R2cyBjb250YWlucyBhIGxpc3Qgb2YgU0hBLTEgRGlzdHVyYmFuY2UgVmVjdG9ycyAoRFYpIHRvIGNoZWNrCisvLyBkdlR5cGUsIGR2SyBhbmQgZHZCIGRlZmluZSB0aGUgRFY6IEkoSyxCKSBvciBJSShLLEIpIChzZWUgdGhlIHBhcGVyKQorLy8gZG1bODBdIGlzIHRoZSBleHBhbmRlZCBtZXNzYWdlIGJsb2NrIFhPUi1kaWZmZXJlbmNlIGRlZmluZWQgYnkgdGhlIERWCisvLyB0ZXN0dCBpcyB0aGUgc3RlcCB0byBkbyB0aGUgcmVjb21wcmVzc2lvbiBmcm9tIGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uCisvLyBtYXNraSBhbmQgbWFza2IgZGVmaW5lIHRoZSBiaXQgdG8gY2hlY2sgZm9yIGVhY2ggRFYgaW4gdGhlIGR2bWFzayByZXR1cm5lZCBieSB1YmNfY2hlY2sKKy8vCisvLyB1YmNfY2hlY2sgdGFrZXMgYXMgaW5wdXQgYW4gZXhwYW5kZWQgbWVzc2FnZSBibG9jayBhbmQgdmVyaWZpZXMgdGhlIHVuYXZvaWRhYmxlIGJpdGNvbmRpdGlvbnMgZm9yIGFsbCBsaXN0ZWQgRFZzCisvLyBpdCByZXR1cm5zIGEgZHZtYXNrIHdoZXJlIGVhY2ggYml0IGJlbG9uZ2luZyB0byBhIERWIGlzIHNldCBpZiBhbGwgdW5hdm9pZGFibGUgYml0Y29uZGl0aW9ucyBmb3IgdGhhdCBEViBoYXZlIGJlZW4gbWV0CisvLyB0aHVzIG9uZSBuZWVkcyB0byBkbyB0aGUgcmVjb21wcmVzc2lvbiBjaGVjayBmb3IgZWFjaCBEViB0aGF0IGhhcyBpdHMgYml0IHNldAorKi8KKworI2lmbmRlZiBTSEExRENfVUJDX0NIRUNLX0gKKyNkZWZpbmUgU0hBMURDX1VCQ19DSEVDS19ICisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBTSEExRENfTk9fU1RBTkRBUkRfSU5DTFVERVMKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjZGVmaW5lIERWTUFTS1NJWkUgMQordHlwZWRlZiBzdHJ1Y3QgeyBpbnQgZHZUeXBlOyBpbnQgZHZLOyBpbnQgZHZCOyBpbnQgdGVzdHQ7IGludCBtYXNraTsgaW50IG1hc2tiOyB1aW50MzJfdCBkbVs4MF07IH0gZHZfaW5mb190OworZXh0ZXJuIGR2X2luZm9fdCBzaGExX2R2c1tdOwordm9pZCB1YmNfY2hlY2soY29uc3QgdWludDMyX3QgV1s4MF0sIHVpbnQzMl90IGR2bWFza1tEVk1BU0tTSVpFXSk7CisKKyNkZWZpbmUgRE9TVE9SRVNUQVRFNTgKKyNkZWZpbmUgRE9TVE9SRVNUQVRFNjUKKworI2RlZmluZSBDSEVDS19EVk1BU0soX0RWTUFTSykgKDAgIT0gX0RWTUFTS1swXSkKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2lmZGVmIFNIQTFEQ19DVVNUT01fVFJBSUxJTkdfSU5DTFVERV9VQkNfQ0hFQ0tfSAorI2luY2x1ZGUgU0hBMURDX0NVU1RPTV9UUkFJTElOR19JTkNMVURFX1VCQ19DSEVDS19ICisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zaGExZGNfZ2l0LmMgYi9zaGExZGNfZ2l0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzMDBlOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFkY19naXQuYwpAQCAtMCwwICsxLDM4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2lmZGVmIERDX1NIQTFfRVhURVJOQUwKKy8qCisgKiBTYW1lIGFzIFNIQTFEQ0luaXQsIGJ1dCB3aXRoIGRlZmF1bHQgc2F2ZV9oYXNoPTAKKyAqLwordm9pZCBnaXRfU0hBMURDSW5pdChTSEExX0NUWCAqY3R4KQoreworCVNIQTFEQ0luaXQoY3R4KTsKKwlTSEExRENTZXRTYWZlSGFzaChjdHgsIDApOworfQorI2VuZGlmCisKKy8qCisgKiBTYW1lIGFzIFNIQTFEQ0ZpbmFsLCBidXQgY29udmVydCBjb2xsaXNpb24gYXR0YWNrIGNhc2UgaW50byBhIHZlcmJvc2UgZGllKCkuCisgKi8KK3ZvaWQgZ2l0X1NIQTFEQ0ZpbmFsKHVuc2lnbmVkIGNoYXIgaGFzaFsyMF0sIFNIQTFfQ1RYICpjdHgpCit7CisJaWYgKCFTSEExRENGaW5hbChoYXNoLCBjdHgpKQorCQlyZXR1cm47CisJZGllKCJTSEEtMSBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgYSBjb2xsaXNpb24gYXR0YWNrOiAlcyIsCisJICAgIGhhc2hfdG9faGV4X2FsZ29wKGhhc2gsICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdKSk7Cit9CisKKy8qCisgKiBTYW1lIGFzIFNIQTFEQ1VwZGF0ZSwgYnV0IGFkanVzdCB0eXBlcyB0byBtYXRjaCBnaXQncyB1c3VhbCBpbnRlcmZhY2UuCisgKi8KK3ZvaWQgZ2l0X1NIQTFEQ1VwZGF0ZShTSEExX0NUWCAqY3R4LCBjb25zdCB2b2lkICp2ZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJY29uc3QgY2hhciAqZGF0YSA9IHZkYXRhOworCS8qIFdlIGV4cGVjdCBhbiB1bnNpZ25lZCBsb25nLCBidXQgc2hhMWRjIG9ubHkgdGFrZXMgYW4gaW50ICovCisJd2hpbGUgKGxlbiA+IElOVF9NQVgpIHsKKwkJU0hBMURDVXBkYXRlKGN0eCwgZGF0YSwgSU5UX01BWCk7CisJCWRhdGEgKz0gSU5UX01BWDsKKwkJbGVuIC09IElOVF9NQVg7CisJfQorCVNIQTFEQ1VwZGF0ZShjdHgsIGRhdGEsIGxlbik7Cit9CmRpZmYgLS1naXQgYS9zaGExZGNfZ2l0LmggYi9zaGExZGNfZ2l0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlMWMzZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYTFkY19naXQuaApAQCAtMCwwICsxLDIzIEBACisvKiBQbHVtYmluZyB3aXRoIGNvbGxpdGlvbi1kZXRlY3RpbmcgU0hBMSBjb2RlICovCisKKyNpZmRlZiBEQ19TSEExX0VYVEVSTkFMCisjaW5jbHVkZSA8c2hhMWRjL3NoYTEuaD4KKyNlbGlmIGRlZmluZWQoRENfU0hBMV9TVUJNT0RVTEUpCisjaW5jbHVkZSAic2hhMWNvbGxpc2lvbmRldGVjdGlvbi9saWIvc2hhMS5oIgorI2Vsc2UKKyNpbmNsdWRlICJzaGExZGMvc2hhMS5oIgorI2VuZGlmCisKKyNpZmRlZiBEQ19TSEExX0VYVEVSTkFMCit2b2lkIGdpdF9TSEExRENJbml0KFNIQTFfQ1RYICopOworI2Vsc2UKKyNkZWZpbmUgZ2l0X1NIQTFEQ0luaXQJU0hBMURDSW5pdAorI2VuZGlmCisKK3ZvaWQgZ2l0X1NIQTFEQ0ZpbmFsKHVuc2lnbmVkIGNoYXIgWzIwXSwgU0hBMV9DVFggKik7Cit2b2lkIGdpdF9TSEExRENVcGRhdGUoU0hBMV9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBsZW4pOworCisjZGVmaW5lIHBsYXRmb3JtX1NIQV9DVFggU0hBMV9DVFgKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMV9Jbml0IGdpdF9TSEExRENJbml0CisjZGVmaW5lIHBsYXRmb3JtX1NIQTFfVXBkYXRlIGdpdF9TSEExRENVcGRhdGUKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMV9GaW5hbCBnaXRfU0hBMURDRmluYWwKZGlmZiAtLWdpdCBhL3NoYTI1Ni9ibG9jay9zaGEyNTYuYyBiL3NoYTI1Ni9ibG9jay9zaGEyNTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg1MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhMjU2L2Jsb2NrL3NoYTI1Ni5jCkBAIC0wLDAgKzEsMTk2IEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiLi9zaGEyNTYuaCIKKworI3VuZGVmIFJORAorI3VuZGVmIEJMS1NJWkUKKworI2RlZmluZSBCTEtTSVpFIGJsa19TSEEyNTZfQkxLU0laRQorCit2b2lkIGJsa19TSEEyNTZfSW5pdChibGtfU0hBMjU2X0NUWCAqY3R4KQoreworCWN0eC0+b2Zmc2V0ID0gMDsKKwljdHgtPnNpemUgPSAwOworCWN0eC0+c3RhdGVbMF0gPSAweDZhMDllNjY3dWw7CisJY3R4LT5zdGF0ZVsxXSA9IDB4YmI2N2FlODV1bDsKKwljdHgtPnN0YXRlWzJdID0gMHgzYzZlZjM3MnVsOworCWN0eC0+c3RhdGVbM10gPSAweGE1NGZmNTNhdWw7CisJY3R4LT5zdGF0ZVs0XSA9IDB4NTEwZTUyN2Z1bDsKKwljdHgtPnN0YXRlWzVdID0gMHg5YjA1Njg4Y3VsOworCWN0eC0+c3RhdGVbNl0gPSAweDFmODNkOWFidWw7CisJY3R4LT5zdGF0ZVs3XSA9IDB4NWJlMGNkMTl1bDsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCByb3IodWludDMyX3QgeCwgdW5zaWduZWQgbikKK3sKKwlyZXR1cm4gKHggPj4gbikgfCAoeCA8PCAoMzIgLSBuKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2godWludDMyX3QgeCwgdWludDMyX3QgeSwgdWludDMyX3QgeikKK3sKKwlyZXR1cm4geiBeICh4ICYgKHkgXiB6KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbWFqKHVpbnQzMl90IHgsIHVpbnQzMl90IHksIHVpbnQzMl90IHopCit7CisJcmV0dXJuICgoeCB8IHkpICYgeikgfCAoeCAmIHkpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHNpZ21hMCh1aW50MzJfdCB4KQoreworCXJldHVybiByb3IoeCwgMikgXiByb3IoeCwgMTMpIF4gcm9yKHgsIDIyKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBzaWdtYTEodWludDMyX3QgeCkKK3sKKwlyZXR1cm4gcm9yKHgsIDYpIF4gcm9yKHgsIDExKSBeIHJvcih4LCAyNSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZ2FtbWEwKHVpbnQzMl90IHgpCit7CisJcmV0dXJuIHJvcih4LCA3KSBeIHJvcih4LCAxOCkgXiAoeCA+PiAzKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBnYW1tYTEodWludDMyX3QgeCkKK3sKKwlyZXR1cm4gcm9yKHgsIDE3KSBeIHJvcih4LCAxOSkgXiAoeCA+PiAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19TSEEyNTZfVHJhbnNmb3JtKGJsa19TSEEyNTZfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKworCXVpbnQzMl90IFNbOF0sIFdbNjRdLCB0MCwgdDE7CisJaW50IGk7CisKKwkvKiBjb3B5IHN0YXRlIGludG8gUyAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCVNbaV0gPSBjdHgtPnN0YXRlW2ldOworCisJLyogY29weSB0aGUgc3RhdGUgaW50byA1MTItYml0cyBpbnRvIFdbMC4uMTVdICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyssIGJ1ZiArPSBzaXplb2YodWludDMyX3QpKQorCQlXW2ldID0gZ2V0X2JlMzIoYnVmKTsKKworCS8qIGZpbGwgV1sxNi4uNjNdICovCisJZm9yIChpID0gMTY7IGkgPCA2NDsgaSsrKQorCQlXW2ldID0gZ2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgZ2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl07CisKKyNkZWZpbmUgUk5EKGEsYixjLGQsZSxmLGcsaCxpLGtpKSAgICAgICAgICAgICAgICAgICAgXAorCXQwID0gaCArIHNpZ21hMShlKSArIGNoKGUsIGYsIGcpICsga2kgKyBXW2ldOyAgIFwKKwl0MSA9IHNpZ21hMChhKSArIG1haihhLCBiLCBjKTsgICAgICAgICAgICAgICAgICBcCisJZCArPSB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWggID0gdDAgKyB0MTsKKworCVJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sMCwweDQyOGEyZjk4KTsKKwlSTkQoU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLDEsMHg3MTM3NDQ5MSk7CisJUk5EKFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSwyLDB4YjVjMGZiY2YpOworCVJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sMywweGU5YjVkYmE1KTsKKwlSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDQsMHgzOTU2YzI1Yik7CisJUk5EKFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSw1LDB4NTlmMTExZjEpOworCVJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sNiwweDkyM2Y4MmE0KTsKKwlSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDcsMHhhYjFjNWVkNSk7CisJUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSw4LDB4ZDgwN2FhOTgpOworCVJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sOSwweDEyODM1YjAxKTsKKwlSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDEwLDB4MjQzMTg1YmUpOworCVJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sMTEsMHg1NTBjN2RjMyk7CisJUk5EKFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSwxMiwweDcyYmU1ZDc0KTsKKwlSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDEzLDB4ODBkZWIxZmUpOworCVJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sMTQsMHg5YmRjMDZhNyk7CisJUk5EKFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSwxNSwweGMxOWJmMTc0KTsKKwlSTkQoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDE2LDB4ZTQ5YjY5YzEpOworCVJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sMTcsMHhlZmJlNDc4Nik7CisJUk5EKFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSwxOCwweDBmYzE5ZGM2KTsKKwlSTkQoU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLDE5LDB4MjQwY2ExY2MpOworCVJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sMjAsMHgyZGU5MmM2Zik7CisJUk5EKFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSwyMSwweDRhNzQ4NGFhKTsKKwlSTkQoU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLDIyLDB4NWNiMGE5ZGMpOworCVJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sMjMsMHg3NmY5ODhkYSk7CisJUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwyNCwweDk4M2U1MTUyKTsKKwlSTkQoU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLDI1LDB4YTgzMWM2NmQpOworCVJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sMjYsMHhiMDAzMjdjOCk7CisJUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSwyNywweGJmNTk3ZmM3KTsKKwlSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDI4LDB4YzZlMDBiZjMpOworCVJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sMjksMHhkNWE3OTE0Nyk7CisJUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSwzMCwweDA2Y2E2MzUxKTsKKwlSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDMxLDB4MTQyOTI5NjcpOworCVJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sMzIsMHgyN2I3MGE4NSk7CisJUk5EKFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSwzMywweDJlMWIyMTM4KTsKKwlSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDM0LDB4NGQyYzZkZmMpOworCVJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sMzUsMHg1MzM4MGQxMyk7CisJUk5EKFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSwzNiwweDY1MGE3MzU0KTsKKwlSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDM3LDB4NzY2YTBhYmIpOworCVJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sMzgsMHg4MWMyYzkyZSk7CisJUk5EKFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSwzOSwweDkyNzIyYzg1KTsKKwlSTkQoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDQwLDB4YTJiZmU4YTEpOworCVJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sNDEsMHhhODFhNjY0Yik7CisJUk5EKFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSw0MiwweGMyNGI4YjcwKTsKKwlSTkQoU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLDQzLDB4Yzc2YzUxYTMpOworCVJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sNDQsMHhkMTkyZTgxOSk7CisJUk5EKFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSw0NSwweGQ2OTkwNjI0KTsKKwlSTkQoU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLDQ2LDB4ZjQwZTM1ODUpOworCVJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sNDcsMHgxMDZhYTA3MCk7CisJUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSw0OCwweDE5YTRjMTE2KTsKKwlSTkQoU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLDQ5LDB4MWUzNzZjMDgpOworCVJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sNTAsMHgyNzQ4Nzc0Yyk7CisJUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSw1MSwweDM0YjBiY2I1KTsKKwlSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDUyLDB4MzkxYzBjYjMpOworCVJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sNTMsMHg0ZWQ4YWE0YSk7CisJUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSw1NCwweDViOWNjYTRmKTsKKwlSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDU1LDB4NjgyZTZmZjMpOworCVJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sNTYsMHg3NDhmODJlZSk7CisJUk5EKFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSw1NywweDc4YTU2MzZmKTsKKwlSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDU4LDB4ODRjODc4MTQpOworCVJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sNTksMHg4Y2M3MDIwOCk7CisJUk5EKFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSw2MCwweDkwYmVmZmZhKTsKKwlSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDYxLDB4YTQ1MDZjZWIpOworCVJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sNjIsMHhiZWY5YTNmNyk7CisJUk5EKFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSw2MywweGM2NzE3OGYyKTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWN0eC0+c3RhdGVbaV0gKz0gU1tpXTsKK30KKwordm9pZCBibGtfU0hBMjU2X1VwZGF0ZShibGtfU0hBMjU2X0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGludCBsZW5fYnVmID0gY3R4LT5zaXplICYgNjM7CisKKwljdHgtPnNpemUgKz0gbGVuOworCisJLyogUmVhZCB0aGUgZGF0YSBpbnRvIGJ1ZiBhbmQgcHJvY2VzcyBibG9ja3MgYXMgdGhleSBnZXQgZnVsbCAqLworCWlmIChsZW5fYnVmKSB7CisJCXVuc2lnbmVkIGludCBsZWZ0ID0gNjQgLSBsZW5fYnVmOworCQlpZiAobGVuIDwgbGVmdCkKKwkJCWxlZnQgPSBsZW47CisJCW1lbWNweShsZW5fYnVmICsgY3R4LT5idWYsIGRhdGEsIGxlZnQpOworCQlsZW5fYnVmID0gKGxlbl9idWYgKyBsZWZ0KSAmIDYzOworCQlsZW4gLT0gbGVmdDsKKwkJZGF0YSA9ICgoY29uc3QgY2hhciAqKWRhdGEgKyBsZWZ0KTsKKwkJaWYgKGxlbl9idWYpCisJCQlyZXR1cm47CisJCWJsa19TSEEyNTZfVHJhbnNmb3JtKGN0eCwgY3R4LT5idWYpOworCX0KKwl3aGlsZSAobGVuID49IDY0KSB7CisJCWJsa19TSEEyNTZfVHJhbnNmb3JtKGN0eCwgZGF0YSk7CisJCWRhdGEgPSAoKGNvbnN0IGNoYXIgKilkYXRhICsgNjQpOworCQlsZW4gLT0gNjQ7CisJfQorCWlmIChsZW4pCisJCW1lbWNweShjdHgtPmJ1ZiwgZGF0YSwgbGVuKTsKK30KKwordm9pZCBibGtfU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgYmxrX1NIQTI1Nl9DVFggKmN0eCkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWRbNjRdID0geyAweDgwIH07CisJdW5zaWduZWQgaW50IHBhZGxlblsyXTsKKwlpbnQgaTsKKworCS8qIFBhZCB3aXRoIGEgYmluYXJ5IDEgKGllIDB4ODApLCB0aGVuIHplcm9lcywgdGhlbiBsZW5ndGggKi8KKwlwYWRsZW5bMF0gPSBodG9ubCgodWludDMyX3QpKGN0eC0+c2l6ZSA+PiAyOSkpOworCXBhZGxlblsxXSA9IGh0b25sKCh1aW50MzJfdCkoY3R4LT5zaXplIDw8IDMpKTsKKworCWkgPSBjdHgtPnNpemUgJiA2MzsKKwlibGtfU0hBMjU2X1VwZGF0ZShjdHgsIHBhZCwgMSArICg2MyAmICg1NSAtIGkpKSk7CisJYmxrX1NIQTI1Nl9VcGRhdGUoY3R4LCBwYWRsZW4sIDgpOworCisJLyogY29weSBvdXRwdXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrLCBkaWdlc3QgKz0gc2l6ZW9mKHVpbnQzMl90KSkKKwkJcHV0X2JlMzIoZGlnZXN0LCBjdHgtPnN0YXRlW2ldKTsKK30KZGlmZiAtLWdpdCBhL3NoYTI1Ni9ibG9jay9zaGEyNTYuaCBiL3NoYTI1Ni9ibG9jay9zaGEyNTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDk5ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhMjU2L2Jsb2NrL3NoYTI1Ni5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgU0hBMjU2X0JMT0NLX1NIQTI1Nl9ICisjZGVmaW5lIFNIQTI1Nl9CTE9DS19TSEEyNTZfSAorCisjZGVmaW5lIGJsa19TSEEyNTZfQkxLU0laRSA2NAorCitzdHJ1Y3QgYmxrX1NIQTI1Nl9DVFggeworCXVpbnQzMl90IHN0YXRlWzhdOworCXVpbnQ2NF90IHNpemU7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQ4X3QgYnVmW2Jsa19TSEEyNTZfQkxLU0laRV07Cit9OworCit0eXBlZGVmIHN0cnVjdCBibGtfU0hBMjU2X0NUWCBibGtfU0hBMjU2X0NUWDsKKwordm9pZCBibGtfU0hBMjU2X0luaXQoYmxrX1NIQTI1Nl9DVFggKmN0eCk7Cit2b2lkIGJsa19TSEEyNTZfVXBkYXRlKGJsa19TSEEyNTZfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwordm9pZCBibGtfU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgYmxrX1NIQTI1Nl9DVFggKmN0eCk7CisKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMjU2X0NUWCBibGtfU0hBMjU2X0NUWAorI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfSW5pdCBibGtfU0hBMjU2X0luaXQKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMjU2X1VwZGF0ZSBibGtfU0hBMjU2X1VwZGF0ZQorI2RlZmluZSBwbGF0Zm9ybV9TSEEyNTZfRmluYWwgYmxrX1NIQTI1Nl9GaW5hbAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NoYTI1Ni9nY3J5cHQuaCBiL3NoYTI1Ni9nY3J5cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJkOGJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMjU2L2djcnlwdC5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgU0hBMjU2X0dDUllQVF9ICisjZGVmaW5lIFNIQTI1Nl9HQ1JZUFRfSAorCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisKKyNkZWZpbmUgU0hBMjU2X0RJR0VTVF9TSVpFIDMyCisKK3R5cGVkZWYgZ2NyeV9tZF9oZF90IGdjcnlwdF9TSEEyNTZfQ1RYOworCitpbmxpbmUgdm9pZCBnY3J5cHRfU0hBMjU2X0luaXQoZ2NyeXB0X1NIQTI1Nl9DVFggKmN0eCkKK3sKKwlnY3J5X21kX29wZW4oY3R4LCBHQ1JZX01EX1NIQTI1NiwgMCk7Cit9CisKK2lubGluZSB2b2lkIGdjcnlwdF9TSEEyNTZfVXBkYXRlKGdjcnlwdF9TSEEyNTZfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJZ2NyeV9tZF93cml0ZSgqY3R4LCBkYXRhLCBsZW4pOworfQorCitpbmxpbmUgdm9pZCBnY3J5cHRfU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgZ2NyeXB0X1NIQTI1Nl9DVFggKmN0eCkKK3sKKwltZW1jcHkoZGlnZXN0LCBnY3J5X21kX3JlYWQoKmN0eCwgR0NSWV9NRF9TSEEyNTYpLCBTSEEyNTZfRElHRVNUX1NJWkUpOworfQorCisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9DVFggZ2NyeXB0X1NIQTI1Nl9DVFgKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMjU2X0luaXQgZ2NyeXB0X1NIQTI1Nl9Jbml0CisjZGVmaW5lIHBsYXRmb3JtX1NIQTI1Nl9VcGRhdGUgZ2NyeXB0X1NIQTI1Nl9VcGRhdGUKKyNkZWZpbmUgcGxhdGZvcm1fU0hBMjU2X0ZpbmFsIGdjcnlwdF9TSEEyNTZfRmluYWwKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zaGFsbG93LmMgYi9zaGFsbG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkMDRhZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYWxsb3cuYwpAQCAtMCwwICsxLDc5MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgInRlbXBmaWxlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKwordm9pZCBzZXRfYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqcGF0aCwgaW50IG92ZXJyaWRlKQoreworCWlmIChyLT5wYXJzZWRfb2JqZWN0cy0+aXNfc2hhbGxvdyAhPSAtMSkKKwkJQlVHKCJpc19yZXBvc2l0b3J5X3NoYWxsb3cgbXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBzZXRfYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSIpOworCWlmIChyLT5wYXJzZWRfb2JqZWN0cy0+YWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSAmJiAhb3ZlcnJpZGUpCisJCXJldHVybjsKKwlmcmVlKHItPnBhcnNlZF9vYmplY3RzLT5hbHRlcm5hdGVfc2hhbGxvd19maWxlKTsKKwlyLT5wYXJzZWRfb2JqZWN0cy0+YWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9IHhzdHJkdXBfb3JfbnVsbChwYXRoKTsKK30KKworaW50IHJlZ2lzdGVyX3NoYWxsb3coc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCA9CisJCXhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21taXRfZ3JhZnQpKTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCBvaWQpOworCisJb2lkY3B5KCZncmFmdC0+b2lkLCBvaWQpOworCWdyYWZ0LT5ucl9wYXJlbnQgPSAtMTsKKwlpZiAoY29tbWl0ICYmIGNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwlyZXR1cm4gcmVnaXN0ZXJfY29tbWl0X2dyYWZ0KHIsIGdyYWZ0LCAwKTsKK30KKworaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKK3sKKwkvKgorCSAqIE5FRURTV09SSzogVGhpcyBmdW5jdGlvbiB1cGRhdGVzCisJICogci0+cGFyc2VkX29iamVjdHMtPntpc19zaGFsbG93LHNoYWxsb3dfc3RhdH0gYXMgYSBzaWRlIGVmZmVjdCBidXQKKwkgKiB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHRvIGNsZWFyIHRoZW0gd2hlbiB0aGUgc2hhbGxvdworCSAqIGZpbGUgaXMgdXBkYXRlZC4KKwkgKi8KKworCUZJTEUgKmZwOworCWNoYXIgYnVmWzEwMjRdOworCWNvbnN0IGNoYXIgKnBhdGggPSByLT5wYXJzZWRfb2JqZWN0cy0+YWx0ZXJuYXRlX3NoYWxsb3dfZmlsZTsKKworCWlmIChyLT5wYXJzZWRfb2JqZWN0cy0+aXNfc2hhbGxvdyA+PSAwKQorCQlyZXR1cm4gci0+cGFyc2VkX29iamVjdHMtPmlzX3NoYWxsb3c7CisKKwlpZiAoIXBhdGgpCisJCXBhdGggPSBnaXRfcGF0aF9zaGFsbG93KHIpOworCS8qCisJICogZmV0Y2gtcGFjayBzZXRzICctLXNoYWxsb3ctZmlsZSAiIicgYXMgYW4gaW5kaWNhdG9yIHRoYXQgbm8KKwkgKiBzaGFsbG93IGZpbGUgc2hvdWxkIGJlIHVzZWQuIFdlIGNvdWxkIGp1c3Qgb3BlbiBpdCBhbmQgaXQKKwkgKiB3aWxsIGxpa2VseSBmYWlsLiBCdXQgbGV0J3MgZG8gYW4gZXhwbGljaXQgY2hlY2sgaW5zdGVhZC4KKwkgKi8KKwlpZiAoISpwYXRoIHx8IChmcCA9IGZvcGVuKHBhdGgsICJyIikpID09IE5VTEwpIHsKKwkJc3RhdF92YWxpZGl0eV9jbGVhcihyLT5wYXJzZWRfb2JqZWN0cy0+c2hhbGxvd19zdGF0KTsKKwkJci0+cGFyc2VkX29iamVjdHMtPmlzX3NoYWxsb3cgPSAwOworCQlyZXR1cm4gci0+cGFyc2VkX29iamVjdHMtPmlzX3NoYWxsb3c7CisJfQorCXN0YXRfdmFsaWRpdHlfdXBkYXRlKHItPnBhcnNlZF9vYmplY3RzLT5zaGFsbG93X3N0YXQsIGZpbGVubyhmcCkpOworCXItPnBhcnNlZF9vYmplY3RzLT5pc19zaGFsbG93ID0gMTsKKworCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWlmIChnZXRfb2lkX2hleChidWYsICZvaWQpKQorCQkJZGllKCJiYWQgc2hhbGxvdyBsaW5lOiAlcyIsIGJ1Zik7CisJCXJlZ2lzdGVyX3NoYWxsb3cociwgJm9pZCk7CisJfQorCWZjbG9zZShmcCk7CisJcmV0dXJuIHItPnBhcnNlZF9vYmplY3RzLT5pc19zaGFsbG93OworfQorCisvKgorICogVE9ETzogdXNlICJpbnQiIGVsZW10eXBlIGluc3RlYWQgb2YgImludCAqIiB3aGVuL2lmIGNvbW1pdC1zbGFiCisgKiBzdXBwb3J0cyBhICJ2YWxpZCIgZmxhZy4KKyAqLworZGVmaW5lX2NvbW1pdF9zbGFiKGNvbW1pdF9kZXB0aCwgaW50ICopOworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2hhbGxvd19jb21taXRzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmhlYWRzLCBpbnQgZGVwdGgsCisJCWludCBzaGFsbG93X2ZsYWcsIGludCBub3Rfc2hhbGxvd19mbGFnKQoreworCWludCBpID0gMCwgY3VyX2RlcHRoID0gMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9hcnJheSBzdGFjayA9IE9CSkVDVF9BUlJBWV9JTklUOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQ7CisJc3RydWN0IGNvbW1pdF9kZXB0aCBkZXB0aHM7CisKKwlpbml0X2NvbW1pdF9kZXB0aCgmZGVwdGhzKTsKKwl3aGlsZSAoY29tbWl0IHx8IGkgPCBoZWFkcy0+bnIgfHwgc3RhY2subnIpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQlpZiAoIWNvbW1pdCkgeworCQkJaWYgKGkgPCBoZWFkcy0+bnIpIHsKKwkJCQlpbnQgKipkZXB0aF9zbG90OworCQkJCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopCisJCQkJCWRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAgaGVhZHMtPm9iamVjdHNbaSsrXS5pdGVtLAorCQkJCQkJICBOVUxMLCAwKTsKKwkJCQlpZiAoIWNvbW1pdCB8fCBjb21taXQtPm9iamVjdC50eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJCQkJY29tbWl0ID0gTlVMTDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWRlcHRoX3Nsb3QgPSBjb21taXRfZGVwdGhfYXQoJmRlcHRocywgY29tbWl0KTsKKwkJCQlpZiAoISpkZXB0aF9zbG90KQorCQkJCQkqZGVwdGhfc2xvdCA9IHhtYWxsb2Moc2l6ZW9mKGludCkpOworCQkJCSoqZGVwdGhfc2xvdCA9IDA7CisJCQkJY3VyX2RlcHRoID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikKKwkJCQkJb2JqZWN0X2FycmF5X3BvcCgmc3RhY2spOworCQkJCWN1cl9kZXB0aCA9ICoqY29tbWl0X2RlcHRoX2F0KCZkZXB0aHMsIGNvbW1pdCk7CisJCQl9CisJCX0KKwkJcGFyc2VfY29tbWl0X29yX2RpZShjb21taXQpOworCQljdXJfZGVwdGgrKzsKKwkJaWYgKChkZXB0aCAhPSBJTkZJTklURV9ERVBUSCAmJiBjdXJfZGVwdGggPj0gZGVwdGgpIHx8CisJCSAgICAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSAmJiAhY29tbWl0LT5wYXJlbnRzICYmCisJCSAgICAgKGdyYWZ0ID0gbG9va3VwX2NvbW1pdF9ncmFmdCh0aGVfcmVwb3NpdG9yeSwgJmNvbW1pdC0+b2JqZWN0Lm9pZCkpICE9IE5VTEwgJiYKKwkJICAgICBncmFmdC0+bnJfcGFyZW50IDwgMCkpIHsKKwkJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZyZXN1bHQpOworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gc2hhbGxvd19mbGFnOworCQkJY29tbWl0ID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IG5vdF9zaGFsbG93X2ZsYWc7CisJCWZvciAocCA9IGNvbW1pdC0+cGFyZW50cywgY29tbWl0ID0gTlVMTDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCWludCAqKmRlcHRoX3Nsb3QgPSBjb21taXRfZGVwdGhfYXQoJmRlcHRocywgcC0+aXRlbSk7CisJCQlpZiAoISpkZXB0aF9zbG90KSB7CisJCQkJKmRlcHRoX3Nsb3QgPSB4bWFsbG9jKHNpemVvZihpbnQpKTsKKwkJCQkqKmRlcHRoX3Nsb3QgPSBjdXJfZGVwdGg7CisJCQl9IGVsc2UgeworCQkJCWlmIChjdXJfZGVwdGggPj0gKipkZXB0aF9zbG90KQorCQkJCQljb250aW51ZTsKKwkJCQkqKmRlcHRoX3Nsb3QgPSBjdXJfZGVwdGg7CisJCQl9CisJCQlpZiAocC0+bmV4dCkKKwkJCQlhZGRfb2JqZWN0X2FycmF5KCZwLT5pdGVtLT5vYmplY3QsCisJCQkJCQlOVUxMLCAmc3RhY2spOworCQkJZWxzZSB7CisJCQkJY29tbWl0ID0gcC0+aXRlbTsKKwkJCQljdXJfZGVwdGggPSAqKmNvbW1pdF9kZXB0aF9hdCgmZGVwdGhzLCBjb21taXQpOworCQkJfQorCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBkZXB0aHMuc2xhYl9jb3VudDsgaSsrKSB7CisJCWludCBqOworCisJCWlmICghZGVwdGhzLnNsYWJbaV0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGRlcHRocy5zbGFiX3NpemU7IGorKykKKwkJCWZyZWUoZGVwdGhzLnNsYWJbaV1bal0pOworCX0KKwljbGVhcl9jb21taXRfZGVwdGgoJmRlcHRocyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgZGF0YSk7Cit9CisKKy8qCisgKiBHaXZlbiByZXYtbGlzdCBhcmd1bWVudHMsIHJ1biByZXYtbGlzdC4gQWxsIHJlYWNoYWJsZSBjb21taXRzCisgKiBleGNlcHQgYm9yZGVyIG9uZXMgYXJlIG1hcmtlZCB3aXRoIG5vdF9zaGFsbG93X2ZsYWcuIEJvcmRlciBjb21taXRzCisgKiBhcmUgbWFya2VkIHdpdGggc2hhbGxvd19mbGFnLiBUaGUgbGlzdCBvZiBib3JkZXIvc2hhbGxvdyBjb21taXRzCisgKiBhcmUgYWxzbyByZXR1cm5lZC4KKyAqLworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2hhbGxvd19jb21taXRzX2J5X3Jldl9saXN0KGludCBhYywgY29uc3QgY2hhciAqKmF2LAorCQkJCQkJICAgIGludCBzaGFsbG93X2ZsYWcsCisJCQkJCQkgICAgaW50IG5vdF9zaGFsbG93X2ZsYWcpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQgPSBOVUxMLCAqcDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5vdF9zaGFsbG93X2xpc3QgPSBOVUxMOworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWludCBib3RoX2ZsYWdzID0gc2hhbGxvd19mbGFnIHwgbm90X3NoYWxsb3dfZmxhZzsKKworCS8qCisJICogU0hBTExPVyAoZXhjbHVkZWQpIGFuZCBOT1RfU0hBTExPVyAoaW5jbHVkZWQpIHNob3VsZCBub3QgYmUKKwkgKiBzZXQgYXQgdGhpcyBwb2ludC4gQnV0IGJldHRlciBiZSBzYWZlIHRoYW4gc29ycnkuCisJICovCisJY2xlYXJfb2JqZWN0X2ZsYWdzKGJvdGhfZmxhZ3MpOworCisJaXNfcmVwb3NpdG9yeV9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KTsgLyogbWFrZSBzdXJlIHNoYWxsb3dzIGFyZSByZWFkICovCisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2cywgTlVMTCk7CisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlzZXR1cF9yZXZpc2lvbnMoYWMsIGF2LCAmcmV2cywgTlVMTCk7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgTlVMTCwgJm5vdF9zaGFsbG93X2xpc3QpOworCisJaWYgKCFub3Rfc2hhbGxvd19saXN0KQorCQlkaWUoIm5vIGNvbW1pdHMgc2VsZWN0ZWQgZm9yIHNoYWxsb3cgcmVxdWVzdHMiKTsKKworCS8qIE1hcmsgYWxsIHJlYWNoYWJsZSBjb21taXRzIGFzIE5PVF9TSEFMTE9XICovCisJZm9yIChwID0gbm90X3NoYWxsb3dfbGlzdDsgcDsgcCA9IHAtPm5leHQpCisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBub3Rfc2hhbGxvd19mbGFnOworCisJLyoKKwkgKiBtYXJrIGJvcmRlciBjb21taXRzIFNIQUxMT1cgKyBOT1RfU0hBTExPVy4KKwkgKiBXZSBjYW5ub3QgY2xlYXIgTk9UX1NIQUxMT1cgcmlnaHQgbm93LiBJbWFnaW5lIGJvcmRlcgorCSAqIGNvbW1pdCBBIGlzIHByb2Nlc3NlZCBmaXJzdCwgdGhlbiBjb21taXQgQiwgd2hvc2UgcGFyZW50IGlzCisJICogQSwgbGF0ZXIuIElmIE5PVF9TSEFMTE9XIG9uIEEgaXMgY2xlYXJlZCBhdCBzdGVwIDEsIEIKKwkgKiBpdHNlbGYgaXMgY29uc2lkZXJlZCBib3JkZXIgYXQgc3RlcCAyLCB3aGljaCBpcyBpbmNvcnJlY3QuCisJICovCisJZm9yIChwID0gbm90X3NoYWxsb3dfbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IHAtPml0ZW07CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJCWlmIChwYXJzZV9jb21taXQoYykpCisJCQlkaWUoInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiLAorCQkJICAgIG9pZF90b19oZXgoJmMtPm9iamVjdC5vaWQpKTsKKworCQlmb3IgKHBhcmVudCA9IGMtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KQorCQkJaWYgKCEocGFyZW50LT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBub3Rfc2hhbGxvd19mbGFnKSkgeworCQkJCWMtPm9iamVjdC5mbGFncyB8PSBzaGFsbG93X2ZsYWc7CisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGMsICZyZXN1bHQpOworCQkJCWJyZWFrOworCQkJfQorCX0KKwlmcmVlX2NvbW1pdF9saXN0KG5vdF9zaGFsbG93X2xpc3QpOworCisJLyoKKwkgKiBOb3cgd2UgY2FuIGNsZWFuIHVwIE5PVF9TSEFMTE9XIG9uIGJvcmRlciBjb21taXRzLiBIYXZpbmcKKwkgKiBib3RoIGZsYWdzIHNldCBjYW4gY29uZnVzZSB0aGUgY2FsbGVyLgorCSAqLworCWZvciAocCA9IHJlc3VsdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9ICZwLT5pdGVtLT5vYmplY3Q7CisJCWlmICgoby0+ZmxhZ3MgJiBib3RoX2ZsYWdzKSA9PSBib3RoX2ZsYWdzKQorCQkJby0+ZmxhZ3MgJj0gfm5vdF9zaGFsbG93X2ZsYWc7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3NoYWxsb3dfZmlsZV9mb3JfdXBkYXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyKQoreworCWlmIChyLT5wYXJzZWRfb2JqZWN0cy0+aXNfc2hhbGxvdyA9PSAtMSkKKwkJQlVHKCJzaGFsbG93IG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgbm93Iik7CisKKwlpZiAoIXN0YXRfdmFsaWRpdHlfY2hlY2soci0+cGFyc2VkX29iamVjdHMtPnNoYWxsb3dfc3RhdCwKKwkJCQkgZ2l0X3BhdGhfc2hhbGxvdyhyKSkpCisJCWRpZSgic2hhbGxvdyBmaWxlIGhhcyBjaGFuZ2VkIHNpbmNlIHdlIHJlYWQgaXQiKTsKK30KKworI2RlZmluZSBTRUVOX09OTFkgMQorI2RlZmluZSBWRVJCT1NFICAgMgorI2RlZmluZSBRVUlDSyA0CisKK3N0cnVjdCB3cml0ZV9zaGFsbG93X2RhdGEgeworCXN0cnVjdCBzdHJidWYgKm91dDsKKwlpbnQgdXNlX3BhY2tfcHJvdG9jb2w7CisJaW50IGNvdW50OworCXVuc2lnbmVkIGZsYWdzOworfTsKKworc3RhdGljIGludCB3cml0ZV9vbmVfc2hhbGxvdyhjb25zdCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgd3JpdGVfc2hhbGxvd19kYXRhICpkYXRhID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICpoZXggPSBvaWRfdG9faGV4KCZncmFmdC0+b2lkKTsKKwlpZiAoZ3JhZnQtPm5yX3BhcmVudCAhPSAtMSkKKwkJcmV0dXJuIDA7CisJaWYgKGRhdGEtPmZsYWdzICYgUVVJQ0spIHsKKwkJaWYgKCFoYXNfb2JqZWN0X2ZpbGUoJmdyYWZ0LT5vaWQpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChkYXRhLT5mbGFncyAmIFNFRU5fT05MWSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgJmdyYWZ0LT5vaWQpOworCQlpZiAoIWMgfHwgIShjLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkgeworCQkJaWYgKGRhdGEtPmZsYWdzICYgVkVSQk9TRSkKKwkJCQlwcmludGYoIlJlbW92aW5nICVzIGZyb20gLmdpdC9zaGFsbG93XG4iLAorCQkJCSAgICAgICBvaWRfdG9faGV4KCZjLT5vYmplY3Qub2lkKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlkYXRhLT5jb3VudCsrOworCWlmIChkYXRhLT51c2VfcGFja19wcm90b2NvbCkKKwkJcGFja2V0X2J1Zl93cml0ZShkYXRhLT5vdXQsICJzaGFsbG93ICVzIiwgaGV4KTsKKwllbHNlIHsKKwkJc3RyYnVmX2FkZHN0cihkYXRhLT5vdXQsIGhleCk7CisJCXN0cmJ1Zl9hZGRjaChkYXRhLT5vdXQsICdcbicpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9zaGFsbG93X2NvbW1pdHNfMShzdHJ1Y3Qgc3RyYnVmICpvdXQsIGludCB1c2VfcGFja19wcm90b2NvbCwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgb2lkX2FycmF5ICpleHRyYSwKKwkJCQkgICB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgd3JpdGVfc2hhbGxvd19kYXRhIGRhdGE7CisJaW50IGk7CisJZGF0YS5vdXQgPSBvdXQ7CisJZGF0YS51c2VfcGFja19wcm90b2NvbCA9IHVzZV9wYWNrX3Byb3RvY29sOworCWRhdGEuY291bnQgPSAwOworCWRhdGEuZmxhZ3MgPSBmbGFnczsKKwlmb3JfZWFjaF9jb21taXRfZ3JhZnQod3JpdGVfb25lX3NoYWxsb3csICZkYXRhKTsKKwlpZiAoIWV4dHJhKQorCQlyZXR1cm4gZGF0YS5jb3VudDsKKwlmb3IgKGkgPSAwOyBpIDwgZXh0cmEtPm5yOyBpKyspIHsKKwkJc3RyYnVmX2FkZHN0cihvdXQsIG9pZF90b19oZXgoZXh0cmEtPm9pZCArIGkpKTsKKwkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJCWRhdGEuY291bnQrKzsKKwl9CisJcmV0dXJuIGRhdGEuY291bnQ7Cit9CisKK2ludCB3cml0ZV9zaGFsbG93X2NvbW1pdHMoc3RydWN0IHN0cmJ1ZiAqb3V0LCBpbnQgdXNlX3BhY2tfcHJvdG9jb2wsCisJCQkgIGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhKQoreworCXJldHVybiB3cml0ZV9zaGFsbG93X2NvbW1pdHNfMShvdXQsIHVzZV9wYWNrX3Byb3RvY29sLCBleHRyYSwgMCk7Cit9CisKK2NvbnN0IGNoYXIgKnNldHVwX3RlbXBvcmFyeV9zaGFsbG93KGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAod3JpdGVfc2hhbGxvd19jb21taXRzKCZzYiwgMCwgZXh0cmEpKSB7CisJCXRlbXAgPSB4bWtzX3RlbXBmaWxlKGdpdF9wYXRoKCJzaGFsbG93X1hYWFhYWCIpKTsKKworCQlpZiAod3JpdGVfaW5fZnVsbCh0ZW1wLT5mZCwgc2IuYnVmLCBzYi5sZW4pIDwgMCB8fAorCQkgICAgY2xvc2VfdGVtcGZpbGVfZ2VudGx5KHRlbXApIDwgMCkKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIHRvICVzIiwKKwkJCQkgIGdldF90ZW1wZmlsZV9wYXRoKHRlbXApKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIGdldF90ZW1wZmlsZV9wYXRoKHRlbXApOworCX0KKwkvKgorCSAqIGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpIHNlZXMgZW1wdHkgc3RyaW5nIGFzICJubyBzaGFsbG93CisJICogZmlsZSIuCisJICovCisJcmV0dXJuICIiOworfQorCit2b2lkIHNldHVwX2FsdGVybmF0ZV9zaGFsbG93KHN0cnVjdCBsb2NrX2ZpbGUgKnNoYWxsb3dfbG9jaywKKwkJCSAgICAgY29uc3QgY2hhciAqKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvaWRfYXJyYXkgKmV4dHJhKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZmQ7CisKKwlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoc2hhbGxvd19sb2NrLAorCQkJCSAgICAgICBnaXRfcGF0aF9zaGFsbG93KHRoZV9yZXBvc2l0b3J5KSwKKwkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCWNoZWNrX3NoYWxsb3dfZmlsZV9mb3JfdXBkYXRlKHRoZV9yZXBvc2l0b3J5KTsKKwlpZiAod3JpdGVfc2hhbGxvd19jb21taXRzKCZzYiwgMCwgZXh0cmEpKSB7CisJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbikgPCAwKQorCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gd3JpdGUgdG8gJXMiLAorCQkJCSAgZ2V0X2xvY2tfZmlsZV9wYXRoKHNoYWxsb3dfbG9jaykpOworCQkqYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9IGdldF9sb2NrX2ZpbGVfcGF0aChzaGFsbG93X2xvY2spOworCX0gZWxzZQorCQkvKgorCQkgKiBpc19yZXBvc2l0b3J5X3NoYWxsb3coKSBzZWVzIGVtcHR5IHN0cmluZyBhcyAibm8KKwkJICogc2hhbGxvdyBmaWxlIi4KKwkJICovCisJCSphbHRlcm5hdGVfc2hhbGxvd19maWxlID0gIiI7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIGludCBhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHNfY2IoY29uc3Qgc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQsIHZvaWQgKmNiKQoreworCWludCBmZCA9ICooaW50ICopY2I7CisJaWYgKGdyYWZ0LT5ucl9wYXJlbnQgPT0gLTEpCisJCXBhY2tldF93cml0ZV9mbXQoZmQsICJzaGFsbG93ICVzXG4iLCBvaWRfdG9faGV4KCZncmFmdC0+b2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzKGludCBmZCkKK3sKKwlpZiAoIWlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpCisJCXJldHVybjsKKwlmb3JfZWFjaF9jb21taXRfZ3JhZnQoYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzX2NiLCAmZmQpOworfQorCisvKgorICogbWFya19yZWFjaGFibGVfb2JqZWN0cygpIHNob3VsZCBoYXZlIGJlZW4gcnVuIHByaW9yIHRvIHRoaXMgYW5kIGFsbAorICogcmVhY2hhYmxlIGNvbW1pdHMgbWFya2VkIGFzICJTRUVOIiwgZXhjZXB0IHdoZW4gcXVpY2tfcHJ1bmUgaXMgbm9uLXplcm8sCisgKiBpbiB3aGljaCBjYXNlIGxpbmVzIGFyZSBleGNpc2VkIGZyb20gdGhlIHNoYWxsb3cgZmlsZSBpZiB0aGV5IHJlZmVyIHRvCisgKiBjb21taXRzIHRoYXQgZG8gbm90IGV4aXN0IChhbnkgbG9uZ2VyKS4KKyAqLwordm9pZCBwcnVuZV9zaGFsbG93KHVuc2lnbmVkIG9wdGlvbnMpCit7CisJc3RydWN0IGxvY2tfZmlsZSBzaGFsbG93X2xvY2sgPSBMT0NLX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGZsYWdzID0gU0VFTl9PTkxZOworCWludCBmZDsKKworCWlmIChvcHRpb25zICYgUFJVTkVfUVVJQ0spCisJCWZsYWdzIHw9IFFVSUNLOworCisJaWYgKG9wdGlvbnMgJiBQUlVORV9TSE9XX09OTFkpIHsKKwkJZmxhZ3MgfD0gVkVSQk9TRTsKKwkJd3JpdGVfc2hhbGxvd19jb21taXRzXzEoJnNiLCAwLCBOVUxMLCBmbGFncyk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybjsKKwl9CisJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZzaGFsbG93X2xvY2ssCisJCQkJICAgICAgIGdpdF9wYXRoX3NoYWxsb3codGhlX3JlcG9zaXRvcnkpLAorCQkJCSAgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CisJY2hlY2tfc2hhbGxvd19maWxlX2Zvcl91cGRhdGUodGhlX3JlcG9zaXRvcnkpOworCWlmICh3cml0ZV9zaGFsbG93X2NvbW1pdHNfMSgmc2IsIDAsIE5VTEwsIGZsYWdzKSkgeworCQlpZiAod3JpdGVfaW5fZnVsbChmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMCkKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIHRvICVzIiwKKwkJCQkgIGdldF9sb2NrX2ZpbGVfcGF0aCgmc2hhbGxvd19sb2NrKSk7CisJCWNvbW1pdF9sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisJfSBlbHNlIHsKKwkJdW5saW5rKGdpdF9wYXRoX3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKTsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZzaGFsbG93X2xvY2spOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX3NoYWxsb3cgPSBUUkFDRV9LRVlfSU5JVChTSEFMTE9XKTsKKworLyoKKyAqIFN0ZXAgMSwgc3BsaXQgc2VuZGVyIHNoYWxsb3cgY29tbWl0cyBpbnRvICJvdXJzIiBhbmQgInRoZWlycyIKKyAqIFN0ZXAgMiwgY2xlYW4gIm91cnMiIGJhc2VkIG9uIC5naXQvc2hhbGxvdworICovCit2b2lkIHByZXBhcmVfc2hhbGxvd19pbmZvKHN0cnVjdCBzaGFsbG93X2luZm8gKmluZm8sIHN0cnVjdCBvaWRfYXJyYXkgKnNhKQoreworCWludCBpOworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NoYWxsb3csICJzaGFsbG93OiBwcmVwYXJlX3NoYWxsb3dfaW5mb1xuIik7CisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCWluZm8tPnNoYWxsb3cgPSBzYTsKKwlpZiAoIXNhKQorCQlyZXR1cm47CisJQUxMT0NfQVJSQVkoaW5mby0+b3Vycywgc2EtPm5yKTsKKwlBTExPQ19BUlJBWShpbmZvLT50aGVpcnMsIHNhLT5ucik7CisJZm9yIChpID0gMDsgaSA8IHNhLT5ucjsgaSsrKSB7CisJCWlmIChoYXNfb2JqZWN0X2ZpbGUoc2EtPm9pZCArIGkpKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdDsKKwkJCWdyYWZ0ID0gbG9va3VwX2NvbW1pdF9ncmFmdCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCSAgICAmc2EtPm9pZFtpXSk7CisJCQlpZiAoZ3JhZnQgJiYgZ3JhZnQtPm5yX3BhcmVudCA8IDApCisJCQkJY29udGludWU7CisJCQlpbmZvLT5vdXJzW2luZm8tPm5yX291cnMrK10gPSBpOworCQl9IGVsc2UKKwkJCWluZm8tPnRoZWlyc1tpbmZvLT5ucl90aGVpcnMrK10gPSBpOworCX0KK30KKwordm9pZCBjbGVhcl9zaGFsbG93X2luZm8oc3RydWN0IHNoYWxsb3dfaW5mbyAqaW5mbykKK3sKKwlmcmVlKGluZm8tPm91cnMpOworCWZyZWUoaW5mby0+dGhlaXJzKTsKK30KKworLyogU3RlcCA0LCByZW1vdmUgbm9uLWV4aXN0ZW50IG9uZXMgaW4gInRoZWlycyIgYWZ0ZXIgZ2V0dGluZyB0aGUgcGFjayAqLworCit2b2lkIHJlbW92ZV9ub25leGlzdGVudF90aGVpcnNfc2hhbGxvdyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICppbmZvKQoreworCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9IGluZm8tPnNoYWxsb3ctPm9pZDsKKwlpbnQgaSwgZHN0OworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NoYWxsb3csICJzaGFsbG93OiByZW1vdmVfbm9uZXhpc3RlbnRfdGhlaXJzX3NoYWxsb3dcbiIpOworCWZvciAoaSA9IGRzdCA9IDA7IGkgPCBpbmZvLT5ucl90aGVpcnM7IGkrKykgeworCQlpZiAoaSAhPSBkc3QpCisJCQlpbmZvLT50aGVpcnNbZHN0XSA9IGluZm8tPnRoZWlyc1tpXTsKKwkJaWYgKGhhc19vYmplY3RfZmlsZShvaWQgKyBpbmZvLT50aGVpcnNbaV0pKQorCQkJZHN0Kys7CisJfQorCWluZm8tPm5yX3RoZWlycyA9IGRzdDsKK30KKworZGVmaW5lX2NvbW1pdF9zbGFiKHJlZl9iaXRtYXAsIHVpbnQzMl90ICopOworCisjZGVmaW5lIFBPT0xfU0laRSAoNTEyICogMTAyNCkKKworc3RydWN0IHBhaW50X2luZm8geworCXN0cnVjdCByZWZfYml0bWFwIHJlZl9iaXRtYXA7CisJdW5zaWduZWQgbnJfYml0czsKKwljaGFyICoqcG9vbHM7CisJY2hhciAqZnJlZSwgKmVuZDsKKwl1bnNpZ25lZCBwb29sX2NvdW50OworfTsKKworc3RhdGljIHVpbnQzMl90ICpwYWludF9hbGxvYyhzdHJ1Y3QgcGFpbnRfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBuciA9IERJVl9ST1VORF9VUChpbmZvLT5ucl9iaXRzLCAzMik7CisJdW5zaWduZWQgc2l6ZSA9IG5yICogc2l6ZW9mKHVpbnQzMl90KTsKKwl2b2lkICpwOworCWlmICghaW5mby0+cG9vbF9jb3VudCB8fCBzaXplID4gaW5mby0+ZW5kIC0gaW5mby0+ZnJlZSkgeworCQlpZiAoc2l6ZSA+IFBPT0xfU0laRSkKKwkJCUJVRygicG9vbCBzaXplIHRvbyBzbWFsbCBmb3IgJWQgaW4gcGFpbnRfYWxsb2MoKSIsCisJCQkgICAgc2l6ZSk7CisJCWluZm8tPnBvb2xfY291bnQrKzsKKwkJUkVBTExPQ19BUlJBWShpbmZvLT5wb29scywgaW5mby0+cG9vbF9jb3VudCk7CisJCWluZm8tPmZyZWUgPSB4bWFsbG9jKFBPT0xfU0laRSk7CisJCWluZm8tPnBvb2xzW2luZm8tPnBvb2xfY291bnQgLSAxXSA9IGluZm8tPmZyZWU7CisJCWluZm8tPmVuZCA9IGluZm8tPmZyZWUgKyBQT09MX1NJWkU7CisJfQorCXAgPSBpbmZvLT5mcmVlOworCWluZm8tPmZyZWUgKz0gc2l6ZTsKKwlyZXR1cm4gcDsKK30KKworLyoKKyAqIEdpdmVuIGEgY29tbWl0IFNIQS0xLCB3YWxrIGRvd24gdG8gcGFyZW50cyB1bnRpbCBlaXRoZXIgU0VFTiwKKyAqIFVOSU5URVJFU1RJTkcgb3IgQk9UVE9NIGlzIGhpdC4gU2V0IHRoZSBpZC10aCBiaXQgaW4gcmVmX2JpdG1hcCBmb3IKKyAqIGFsbCB3YWxrZWQgY29tbWl0cy4KKyAqLworc3RhdGljIHZvaWQgcGFpbnRfZG93bihzdHJ1Y3QgcGFpbnRfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICAgdW5zaWduZWQgaW50IGlkKQoreworCXVuc2lnbmVkIGludCBpLCBucjsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmhlYWQgPSBOVUxMOworCWludCBiaXRtYXBfbnIgPSBESVZfUk9VTkRfVVAoaW5mby0+bnJfYml0cywgMzIpOworCXNpemVfdCBiaXRtYXBfc2l6ZSA9IHN0X211bHQoc2l6ZW9mKHVpbnQzMl90KSwgYml0bWFwX25yKTsKKwlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHRoZV9yZXBvc2l0b3J5LCBvaWQsCisJCQkJCQkJICAxKTsKKwl1aW50MzJfdCAqdG1wOyAvKiB0byBiZSBmcmVlZCBiZWZvcmUgcmV0dXJuICovCisJdWludDMyX3QgKmJpdG1hcDsKKworCWlmICghYykKKwkJcmV0dXJuOworCisJdG1wID0geG1hbGxvYyhiaXRtYXBfc2l6ZSk7CisJYml0bWFwID0gcGFpbnRfYWxsb2MoaW5mbyk7CisJbWVtc2V0KGJpdG1hcCwgMCwgYml0bWFwX3NpemUpOworCWJpdG1hcFtpZCAvIDMyXSB8PSAoMVUgPDwgKGlkICUgMzIpKTsKKwljb21taXRfbGlzdF9pbnNlcnQoYywgJmhlYWQpOworCXdoaWxlIChoZWFkKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IHBvcF9jb21taXQoJmhlYWQpOworCQl1aW50MzJfdCAqKnJlZnMgPSByZWZfYml0bWFwX2F0KCZpbmZvLT5yZWZfYml0bWFwLCBjKTsKKworCQkvKiBYWFggY2hlY2sgIlVOSU5URVJFU1RJTkciIGZyb20gcGFjayBiaXRtYXBzIGlmIGF2YWlsYWJsZSAqLworCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFNFRU4gfCBVTklOVEVSRVNUSU5HKSkKKwkJCWNvbnRpbnVlOworCQllbHNlCisJCQljLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKworCQlpZiAoKnJlZnMgPT0gTlVMTCkKKwkJCSpyZWZzID0gYml0bWFwOworCQllbHNlIHsKKwkJCW1lbWNweSh0bXAsICpyZWZzLCBiaXRtYXBfc2l6ZSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgYml0bWFwX25yOyBpKyspCisJCQkJdG1wW2ldIHw9IGJpdG1hcFtpXTsKKwkJCWlmIChtZW1jbXAodG1wLCAqcmVmcywgYml0bWFwX3NpemUpKSB7CisJCQkJKnJlZnMgPSBwYWludF9hbGxvYyhpbmZvKTsKKwkJCQltZW1jcHkoKnJlZnMsIHRtcCwgYml0bWFwX3NpemUpOworCQkJfQorCQl9CisKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIEJPVFRPTSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXJzZV9jb21taXQoYykpCisJCQlkaWUoInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiLAorCQkJICAgIG9pZF90b19oZXgoJmMtPm9iamVjdC5vaWQpKTsKKworCQlmb3IgKHAgPSBjLT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQkJaWYgKHAtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCQkJY29udGludWU7CisJCQljb21taXRfbGlzdF9pbnNlcnQocC0+aXRlbSwgJmhlYWQpOworCQl9CisJfQorCisJbnIgPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBnZXRfaW5kZXhlZF9vYmplY3QoaSk7CisJCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCW8tPmZsYWdzICY9IH5TRUVOOworCX0KKworCWZyZWUodG1wKTsKK30KKworc3RhdGljIGludCBtYXJrX3VuaW50ZXJlc3RpbmcoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkgICAgICAgb2lkLCAxKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIDA7CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwltYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjb21taXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb3N0X2Fzc2lnbl9zaGFsbG93KHN0cnVjdCBzaGFsbG93X2luZm8gKmluZm8sCisJCQkJc3RydWN0IHJlZl9iaXRtYXAgKnJlZl9iaXRtYXAsCisJCQkJaW50ICpyZWZfc3RhdHVzKTsKKy8qCisgKiBTdGVwIDYoKzcpLCBhc3NvY2lhdGUgc2hhbGxvdyBjb21taXRzIHdpdGggbmV3IHJlZnMKKyAqCisgKiBpbmZvLT5yZWYgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIElmIHVzZWQgaXMgbm90IE5VTEwsIGl0J3MgYW4gYXJyYXkgb2YgaW5mby0+c2hhbGxvdy0+bnIKKyAqIGJpdG1hcHMuIFRoZSBuLXRoIGJpdCBzZXQgaW4gdGhlIG0tdGggYml0bWFwIGlmIHJlZltuXSBuZWVkcyB0aGUKKyAqIG0tdGggc2hhbGxvdyBjb21taXQgZnJvbSBpbmZvLT5zaGFsbG93LgorICoKKyAqIElmIHVzZWQgaXMgTlVMTCwgIm91cnMiIGFuZCAidGhlaXJzIiBhcmUgdXBkYXRlZC4gQW5kIGlmIHJlZl9zdGF0dXMKKyAqIGlzIG5vdCBOVUxMIGl0J3MgYW4gYXJyYXkgb2YgcmVmLT5uciBpbnRzLiByZWZfc3RhdHVzW2ldIGlzIHRydWUgaWYKKyAqIHRoZSByZWYgbmVlZHMgc29tZSBzaGFsbG93IGNvbW1pdHMgZnJvbSBlaXRoZXIgaW5mby0+b3VycyBvcgorICogaW5mby0+dGhlaXJzLgorICovCit2b2lkIGFzc2lnbl9zaGFsbG93X2NvbW1pdHNfdG9fcmVmcyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICppbmZvLAorCQkJCSAgICB1aW50MzJfdCAqKnVzZWQsIGludCAqcmVmX3N0YXR1cykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQgPSBpbmZvLT5zaGFsbG93LT5vaWQ7CisJc3RydWN0IG9pZF9hcnJheSAqcmVmID0gaW5mby0+cmVmOworCXVuc2lnbmVkIGludCBpLCBucjsKKwlpbnQgKnNoYWxsb3csIG5yX3NoYWxsb3cgPSAwOworCXN0cnVjdCBwYWludF9pbmZvIHBpOworCisJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2Vfc2hhbGxvdywgInNoYWxsb3c6IGFzc2lnbl9zaGFsbG93X2NvbW1pdHNfdG9fcmVmc1xuIik7CisJQUxMT0NfQVJSQVkoc2hhbGxvdywgaW5mby0+bnJfb3VycyArIGluZm8tPm5yX3RoZWlycyk7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPm5yX291cnM7IGkrKykKKwkJc2hhbGxvd1tucl9zaGFsbG93KytdID0gaW5mby0+b3Vyc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnJfdGhlaXJzOyBpKyspCisJCXNoYWxsb3dbbnJfc2hhbGxvdysrXSA9IGluZm8tPnRoZWlyc1tpXTsKKworCS8qCisJICogUHJlcGFyZSB0aGUgY29tbWl0IGdyYXBoIHRvIHRyYWNrIHdoYXQgcmVmcyBjYW4gcmVhY2ggd2hhdAorCSAqIChuZXcpIHNoYWxsb3cgY29tbWl0cy4KKwkgKi8KKwluciA9IGdldF9tYXhfb2JqZWN0X2luZGV4KCk7CisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IGdldF9pbmRleGVkX29iamVjdChpKTsKKwkJaWYgKCFvIHx8IG8tPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCWNvbnRpbnVlOworCisJCW8tPmZsYWdzICY9IH4oVU5JTlRFUkVTVElORyB8IEJPVFRPTSB8IFNFRU4pOworCX0KKworCW1lbXNldCgmcGksIDAsIHNpemVvZihwaSkpOworCWluaXRfcmVmX2JpdG1hcCgmcGkucmVmX2JpdG1hcCk7CisJcGkubnJfYml0cyA9IHJlZi0+bnI7CisKKwkvKgorCSAqICItLW5vdCAtLWFsbCIgdG8gY3V0IHNob3J0IHRoZSB0cmF2ZXJzYWwgaWYgbmV3IHJlZnMKKwkgKiBjb25uZWN0IHRvIG9sZCByZWZzLiBJZiBub3QgKGUuZy4gZm9yY2UgcmVmIHVwZGF0ZXMpIGl0J2xsCisJICogaGF2ZSB0byBnbyBkb3duIHRvIHRoZSBjdXJyZW50IHNoYWxsb3cgY29tbWl0cy4KKwkgKi8KKwloZWFkX3JlZihtYXJrX3VuaW50ZXJlc3RpbmcsIE5VTEwpOworCWZvcl9lYWNoX3JlZihtYXJrX3VuaW50ZXJlc3RpbmcsIE5VTEwpOworCisJLyogTWFyayBwb3RlbnRpYWwgYm90dG9tcyBzbyB3ZSB3b24ndCBnbyBvdXQgb2YgYm91bmQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfc2hhbGxvdzsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICZvaWRbc2hhbGxvd1tpXV0pOworCQljLT5vYmplY3QuZmxhZ3MgfD0gQk9UVE9NOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByZWYtPm5yOyBpKyspCisJCXBhaW50X2Rvd24oJnBpLCByZWYtPm9pZCArIGksIGkpOworCisJaWYgKHVzZWQpIHsKKwkJaW50IGJpdG1hcF9zaXplID0gRElWX1JPVU5EX1VQKHBpLm5yX2JpdHMsIDMyKSAqIHNpemVvZih1aW50MzJfdCk7CisJCW1lbXNldCh1c2VkLCAwLCBzaXplb2YoKnVzZWQpICogaW5mby0+c2hhbGxvdy0+bnIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfc2hhbGxvdzsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkgICAgICAgJm9pZFtzaGFsbG93W2ldXSk7CisJCQl1aW50MzJfdCAqKm1hcCA9IHJlZl9iaXRtYXBfYXQoJnBpLnJlZl9iaXRtYXAsIGMpOworCQkJaWYgKCptYXApCisJCQkJdXNlZFtzaGFsbG93W2ldXSA9IHhtZW1kdXB6KCptYXAsIGJpdG1hcF9zaXplKTsKKwkJfQorCQkvKgorCQkgKiB1bnJlYWNoYWJsZSBzaGFsbG93IGNvbW1pdHMgYXJlIG5vdCByZW1vdmVkIGZyb20KKwkJICogIm91cnMiIGFuZCAidGhlaXJzIi4gVGhlIHVzZXIgaXMgc3VwcG9zZWQgdG8gcnVuCisJCSAqIHN0ZXAgNyBvbiBldmVyeSByZWYgc2VwYXJhdGVseSBhbmQgbm90IHRydXN0ICJvdXJzIgorCQkgKiBhbmQgInRoZWlycyIgYW55IG1vcmUuCisJCSAqLworCX0gZWxzZQorCQlwb3N0X2Fzc2lnbl9zaGFsbG93KGluZm8sICZwaS5yZWZfYml0bWFwLCByZWZfc3RhdHVzKTsKKworCWNsZWFyX3JlZl9iaXRtYXAoJnBpLnJlZl9iaXRtYXApOworCWZvciAoaSA9IDA7IGkgPCBwaS5wb29sX2NvdW50OyBpKyspCisJCWZyZWUocGkucG9vbHNbaV0pOworCWZyZWUocGkucG9vbHMpOworCWZyZWUoc2hhbGxvdyk7Cit9CisKK3N0cnVjdCBjb21taXRfYXJyYXkgeworCXN0cnVjdCBjb21taXQgKipjb21taXRzOworCWludCBuciwgYWxsb2M7Cit9OworCitzdGF0aWMgaW50IGFkZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbW1pdF9hcnJheSAqY2EgPSBjYl9kYXRhOworCUFMTE9DX0dST1coY2EtPmNvbW1pdHMsIGNhLT5uciArIDEsIGNhLT5hbGxvYyk7CisJY2EtPmNvbW1pdHNbY2EtPm5yXSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkgICAgIG9pZCwgMSk7CisJaWYgKGNhLT5jb21taXRzW2NhLT5ucl0pCisJCWNhLT5ucisrOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmVmc3RhdHVzKGludCAqcmVmX3N0YXR1cywgaW50IG5yLCB1aW50MzJfdCAqYml0bWFwKQoreworCXVuc2lnbmVkIGludCBpOworCWlmICghcmVmX3N0YXR1cykKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQlpZiAoYml0bWFwW2kgLyAzMl0gJiAoMVUgPDwgKGkgJSAzMikpKQorCQkJcmVmX3N0YXR1c1tpXSsrOworfQorCisvKgorICogU3RlcCA3LCByZWFjaGFiaWxpdHkgdGVzdCBvbiAib3VycyIgYXQgY29tbWl0IGxldmVsCisgKi8KK3N0YXRpYyB2b2lkIHBvc3RfYXNzaWduX3NoYWxsb3coc3RydWN0IHNoYWxsb3dfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgcmVmX2JpdG1hcCAqcmVmX2JpdG1hcCwKKwkJCQlpbnQgKnJlZl9zdGF0dXMpCit7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gaW5mby0+c2hhbGxvdy0+b2lkOworCXN0cnVjdCBjb21taXQgKmM7CisJdWludDMyX3QgKipiaXRtYXA7CisJaW50IGRzdCwgaSwgajsKKwlpbnQgYml0bWFwX25yID0gRElWX1JPVU5EX1VQKGluZm8tPnJlZi0+bnIsIDMyKTsKKwlzdHJ1Y3QgY29tbWl0X2FycmF5IGNhOworCisJdHJhY2VfcHJpbnRmX2tleSgmdHJhY2Vfc2hhbGxvdywgInNoYWxsb3c6IHBvc3RfYXNzaWduX3NoYWxsb3dcbiIpOworCWlmIChyZWZfc3RhdHVzKQorCQltZW1zZXQocmVmX3N0YXR1cywgMCwgc2l6ZW9mKCpyZWZfc3RhdHVzKSAqIGluZm8tPnJlZi0+bnIpOworCisJLyogUmVtb3ZlIHVucmVhY2hhYmxlIHNoYWxsb3cgY29tbWl0cyBmcm9tICJ0aGVpcnMiICovCisJZm9yIChpID0gZHN0ID0gMDsgaSA8IGluZm8tPm5yX3RoZWlyczsgaSsrKSB7CisJCWlmIChpICE9IGRzdCkKKwkJCWluZm8tPnRoZWlyc1tkc3RdID0gaW5mby0+dGhlaXJzW2ldOworCQljID0gbG9va3VwX2NvbW1pdCh0aGVfcmVwb3NpdG9yeSwgJm9pZFtpbmZvLT50aGVpcnNbaV1dKTsKKwkJYml0bWFwID0gcmVmX2JpdG1hcF9hdChyZWZfYml0bWFwLCBjKTsKKwkJaWYgKCEqYml0bWFwKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBiaXRtYXBfbnI7IGorKykKKwkJCWlmIChiaXRtYXBbMF1bal0pIHsKKwkJCQl1cGRhdGVfcmVmc3RhdHVzKHJlZl9zdGF0dXMsIGluZm8tPnJlZi0+bnIsICpiaXRtYXApOworCQkJCWRzdCsrOworCQkJCWJyZWFrOworCQkJfQorCX0KKwlpbmZvLT5ucl90aGVpcnMgPSBkc3Q7CisKKwltZW1zZXQoJmNhLCAwLCBzaXplb2YoY2EpKTsKKwloZWFkX3JlZihhZGRfcmVmLCAmY2EpOworCWZvcl9lYWNoX3JlZihhZGRfcmVmLCAmY2EpOworCisJLyogUmVtb3ZlIHVucmVhY2hhYmxlIHNoYWxsb3cgY29tbWl0cyBmcm9tICJvdXJzIiAqLworCWZvciAoaSA9IGRzdCA9IDA7IGkgPCBpbmZvLT5ucl9vdXJzOyBpKyspIHsKKwkJaWYgKGkgIT0gZHN0KQorCQkJaW5mby0+b3Vyc1tkc3RdID0gaW5mby0+b3Vyc1tpXTsKKwkJYyA9IGxvb2t1cF9jb21taXQodGhlX3JlcG9zaXRvcnksICZvaWRbaW5mby0+b3Vyc1tpXV0pOworCQliaXRtYXAgPSByZWZfYml0bWFwX2F0KHJlZl9iaXRtYXAsIGMpOworCQlpZiAoISpiaXRtYXApCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGJpdG1hcF9ucjsgaisrKQorCQkJaWYgKGJpdG1hcFswXVtqXSAmJgorCQkJICAgIC8qIFN0ZXAgNywgcmVhY2hhYmlsaXR5IHRlc3QgYXQgY29tbWl0IGxldmVsICovCisJCQkgICAgIWluX21lcmdlX2Jhc2VzX21hbnkoYywgY2EubnIsIGNhLmNvbW1pdHMpKSB7CisJCQkJdXBkYXRlX3JlZnN0YXR1cyhyZWZfc3RhdHVzLCBpbmZvLT5yZWYtPm5yLCAqYml0bWFwKTsKKwkJCQlkc3QrKzsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisJaW5mby0+bnJfb3VycyA9IGRzdDsKKworCWZyZWUoY2EuY29tbWl0cyk7Cit9CisKKy8qIChEZWxheWVkKSBzdGVwIDcsIHJlYWNoYWJpbGl0eSB0ZXN0IGF0IGNvbW1pdCBsZXZlbCAqLworaW50IGRlbGF5ZWRfcmVhY2hhYmlsaXR5X3Rlc3Qoc3RydWN0IHNoYWxsb3dfaW5mbyAqc2ksIGludCBjKQoreworCWlmIChzaS0+bmVlZF9yZWFjaGFiaWxpdHlfdGVzdFtjXSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICAgICAgJnNpLT5zaGFsbG93LT5vaWRbY10pOworCisJCWlmICghc2ktPmNvbW1pdHMpIHsKKwkJCXN0cnVjdCBjb21taXRfYXJyYXkgY2E7CisKKwkJCW1lbXNldCgmY2EsIDAsIHNpemVvZihjYSkpOworCQkJaGVhZF9yZWYoYWRkX3JlZiwgJmNhKTsKKwkJCWZvcl9lYWNoX3JlZihhZGRfcmVmLCAmY2EpOworCQkJc2ktPmNvbW1pdHMgPSBjYS5jb21taXRzOworCQkJc2ktPm5yX2NvbW1pdHMgPSBjYS5ucjsKKwkJfQorCisJCXNpLT5yZWFjaGFibGVbY10gPSBpbl9tZXJnZV9iYXNlc19tYW55KGNvbW1pdCwKKwkJCQkJCSAgICAgICBzaS0+bnJfY29tbWl0cywKKwkJCQkJCSAgICAgICBzaS0+Y29tbWl0cyk7CisJCXNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0W2NdID0gMDsKKwl9CisJcmV0dXJuIHNpLT5yZWFjaGFibGVbY107Cit9CmRpZmYgLS1naXQgYS9zaGVsbC5jIGIvc2hlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGNjYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hlbGwuYwpAQCAtMCwwICsxLDE5OSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJleGVjLWNtZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKworI2RlZmluZSBDT01NQU5EX0RJUiAiZ2l0LXNoZWxsLWNvbW1hbmRzIgorI2RlZmluZSBIRUxQX0NPTU1BTkQgQ09NTUFORF9ESVIgIi9oZWxwIgorI2RlZmluZSBOT0xPR0lOX0NPTU1BTkQgQ09NTUFORF9ESVIgIi9uby1pbnRlcmFjdGl2ZS1sb2dpbiIKKworc3RhdGljIGludCBkb19nZW5lcmljX2NtZChjb25zdCBjaGFyICptZSwgY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKm15X2FyZ3ZbNF07CisKKwlzZXR1cF9wYXRoKCk7CisJaWYgKCFhcmcgfHwgIShhcmcgPSBzcV9kZXF1b3RlKGFyZykpIHx8ICphcmcgPT0gJy0nKQorCQlkaWUoImJhZCBhcmd1bWVudCIpOworCWlmICghc2tpcF9wcmVmaXgobWUsICJnaXQtIiwgJm1lKSkKKwkJZGllKCJiYWQgY29tbWFuZCIpOworCisJbXlfYXJndlswXSA9IG1lOworCW15X2FyZ3ZbMV0gPSBhcmc7CisJbXlfYXJndlsyXSA9IE5VTEw7CisKKwlyZXR1cm4gZXhlY3ZfZ2l0X2NtZChteV9hcmd2KTsKK30KKworc3RhdGljIGludCBpc192YWxpZF9jbWRfbmFtZShjb25zdCBjaGFyICpjbWQpCit7CisJLyogVGVzdCBjb21tYW5kIGNvbnRhaW5zIG5vIC4gb3IgLyBjaGFyYWN0ZXJzICovCisJcmV0dXJuIGNtZFtzdHJjc3BuKGNtZCwgIi4vIildID09ICdcMCc7Cit9CisKK3N0YXRpYyBjaGFyICptYWtlX2NtZChjb25zdCBjaGFyICpwcm9nKQoreworCXJldHVybiB4c3RyZm10KCIlcy8lcyIsIENPTU1BTkRfRElSLCBwcm9nKTsKK30KKworc3RhdGljIHZvaWQgY2RfdG9faG9tZWRpcih2b2lkKQoreworCWNvbnN0IGNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwlpZiAoIWhvbWUpCisJCWRpZSgiY291bGQgbm90IGRldGVybWluZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnk7IEhPTUUgaXMgdW5zZXQiKTsKKwlpZiAoY2hkaXIoaG9tZSkgPT0gLTEpCisJCWRpZSgiY291bGQgbm90IGNoZGlyIHRvIHVzZXIncyBob21lIGRpcmVjdG9yeSIpOworfQorCitzdGF0aWMgdm9pZCBydW5fc2hlbGwodm9pZCkKK3sKKwlpbnQgZG9uZSA9IDA7CisJc3RhdGljIGNvbnN0IGNoYXIgKmhlbHBfYXJndltdID0geyBIRUxQX0NPTU1BTkQsIE5VTEwgfTsKKworCWlmICghYWNjZXNzKE5PTE9HSU5fQ09NTUFORCwgRl9PSykpIHsKKwkJLyogSW50ZXJhY3RpdmUgbG9naW4gZGlzYWJsZWQuICovCisJCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgTk9MT0dJTl9DT01NQU5ELCBOVUxMIH07CisJCWludCBzdGF0dXM7CisKKwkJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgMCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZXhpdCgxMjcpOworCQlleGl0KHN0YXR1cyk7CisJfQorCisJLyogUHJpbnQgaGVscCBpZiBlbmFibGVkICovCisJcnVuX2NvbW1hbmRfdl9vcHQoaGVscF9hcmd2LCBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRSk7CisKKwlkbyB7CisJCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpwcm9nOworCQljaGFyICpmdWxsX2NtZDsKKwkJY2hhciAqcmF3YXJnczsKKwkJY2hhciAqc3BsaXRfYXJnczsKKwkJY29uc3QgY2hhciAqKmFyZ3Y7CisJCWludCBjb2RlOworCQlpbnQgY291bnQ7CisKKwkJZnByaW50ZihzdGRlcnIsICJnaXQ+ICIpOworCQlpZiAoc3RyYnVmX2dldGxpbmVfbGYoJmxpbmUsIHN0ZGluKSA9PSBFT0YpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJCWJyZWFrOworCQl9CisJCXN0cmJ1Zl90cmltKCZsaW5lKTsKKwkJcmF3YXJncyA9IHN0cmJ1Zl9kZXRhY2goJmxpbmUsIE5VTEwpOworCQlzcGxpdF9hcmdzID0geHN0cmR1cChyYXdhcmdzKTsKKwkJY291bnQgPSBzcGxpdF9jbWRsaW5lKHNwbGl0X2FyZ3MsICZhcmd2KTsKKwkJaWYgKGNvdW50IDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGNvbW1hbmQgZm9ybWF0ICclcyc6ICVzXG4iLCByYXdhcmdzLAorCQkJCXNwbGl0X2NtZGxpbmVfc3RyZXJyb3IoY291bnQpKTsKKwkJCWZyZWUoc3BsaXRfYXJncyk7CisJCQlmcmVlKHJhd2FyZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQlwcm9nID0gYXJndlswXTsKKwkJaWYgKCFzdHJjbXAocHJvZywgIiIpKSB7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChwcm9nLCAicXVpdCIpIHx8ICFzdHJjbXAocHJvZywgImxvZ291dCIpIHx8CisJCQkgICAhc3RyY21wKHByb2csICJleGl0IikgfHwgIXN0cmNtcChwcm9nLCAiYnllIikpIHsKKwkJCWRvbmUgPSAxOworCQl9IGVsc2UgaWYgKGlzX3ZhbGlkX2NtZF9uYW1lKHByb2cpKSB7CisJCQlmdWxsX2NtZCA9IG1ha2VfY21kKHByb2cpOworCQkJYXJndlswXSA9IGZ1bGxfY21kOworCQkJY29kZSA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9TSUxFTlRfRVhFQ19GQUlMVVJFKTsKKwkJCWlmIChjb2RlID09IC0xICYmIGVycm5vID09IEVOT0VOVCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAidW5yZWNvZ25pemVkIGNvbW1hbmQgJyVzJ1xuIiwgcHJvZyk7CisJCQl9CisJCQlmcmVlKGZ1bGxfY21kKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBjb21tYW5kIGZvcm1hdCAnJXMnXG4iLCBwcm9nKTsKKwkJfQorCisJCWZyZWUoYXJndik7CisJCWZyZWUocmF3YXJncyk7CisJfSB3aGlsZSAoIWRvbmUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1hbmRzIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKmV4ZWMpKGNvbnN0IGNoYXIgKm1lLCBjaGFyICphcmcpOworfSBjbWRfbGlzdFtdID0geworCXsgImdpdC1yZWNlaXZlLXBhY2siLCBkb19nZW5lcmljX2NtZCB9LAorCXsgImdpdC11cGxvYWQtcGFjayIsIGRvX2dlbmVyaWNfY21kIH0sCisJeyAiZ2l0LXVwbG9hZC1hcmNoaXZlIiwgZG9fZ2VuZXJpY19jbWQgfSwKKwl7IE5VTEwgfSwKK307CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqcHJvZzsKKwljb25zdCBjaGFyICoqdXNlcl9hcmd2OworCXN0cnVjdCBjb21tYW5kcyAqY21kOworCWludCBjb3VudDsKKworCS8qCisJICogU3BlY2lhbCBoYWNrIHRvIHByZXRlbmQgdG8gYmUgYSBDVlMgc2VydmVyCisJICovCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJjdnMgc2VydmVyIikpIHsKKwkJYXJndi0tOworCX0gZWxzZSBpZiAoYXJnYyA9PSAxKSB7CisJCS8qIEFsbG93IHRoZSB1c2VyIHRvIHJ1biBhbiBpbnRlcmFjdGl2ZSBzaGVsbCAqLworCQljZF90b19ob21lZGlyKCk7CisJCWlmIChhY2Nlc3MoQ09NTUFORF9ESVIsIFJfT0sgfCBYX09LKSA9PSAtMSkgeworCQkJZGllKCJJbnRlcmFjdGl2ZSBnaXQgc2hlbGwgaXMgbm90IGVuYWJsZWQuXG4iCisJCQkgICAgImhpbnQ6IH4vIiBDT01NQU5EX0RJUiAiIHNob3VsZCBleGlzdCAiCisJCQkgICAgImFuZCBoYXZlIHJlYWQgYW5kIGV4ZWN1dGUgYWNjZXNzLiIpOworCQl9CisJCXJ1bl9zaGVsbCgpOworCQlleGl0KDApOworCX0gZWxzZSBpZiAoYXJnYyAhPSAzIHx8IHN0cmNtcChhcmd2WzFdLCAiLWMiKSkgeworCQkvKgorCQkgKiBXZSBkbyBub3QgYWNjZXB0IGFueSBvdGhlciBtb2RlcyBleGNlcHQgIi1jIiBmb2xsb3dlZCBieQorCQkgKiAiY21kIGFyZyIsIHdoZXJlICJjbWQiIGlzIGEgdmVyeSBsaW1pdGVkIHN1YnNldCBvZiBnaXQKKwkJICogY29tbWFuZHMgb3IgYSBjb21tYW5kIGluIHRoZSBDT01NQU5EX0RJUgorCQkgKi8KKwkJZGllKCJSdW4gd2l0aCBubyBhcmd1bWVudHMgb3Igd2l0aCAtYyBjbWQiKTsKKwl9CisKKwlwcm9nID0geHN0cmR1cChhcmd2WzJdKTsKKwlpZiAoIXN0cm5jbXAocHJvZywgImdpdCIsIDMpICYmIGlzc3BhY2UocHJvZ1szXSkpCisJCS8qIEFjY2VwdCAiZ2l0IGZvbyIgYXMgaWYgdGhlIGNhbGxlciBzYWlkICJnaXQtZm9vIi4gKi8KKwkJcHJvZ1szXSA9ICctJzsKKworCWZvciAoY21kID0gY21kX2xpc3QgOyBjbWQtPm5hbWUgOyBjbWQrKykgeworCQlpbnQgbGVuID0gc3RybGVuKGNtZC0+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+IDAgJiYgbjIgPiAwKSB7CisJCWlmIChjbXAoYjEsIGIyKSA8PSAwKSB7CisJCQltZW1jcHkodG1wLCBiMSwgcyk7CisJCQl0bXAgKz0gczsKKwkJCWIxICs9IHM7CisJCQktLW4xOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHRtcCwgYjIsIHMpOworCQkJdG1wICs9IHM7CisJCQliMiArPSBzOworCQkJLS1uMjsKKwkJfQorCX0KKwlpZiAobjEgPiAwKQorCQltZW1jcHkodG1wLCBiMSwgbjEgKiBzKTsKKwltZW1jcHkoYiwgdCwgKG4gLSBuMikgKiBzKTsKK30KKwordm9pZCBnaXRfc3RhYmxlX3Fzb3J0KHZvaWQgKmIsIHNpemVfdCBuLCBzaXplX3QgcywKKwkJICAgICAgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisJY29uc3Qgc2l6ZV90IHNpemUgPSBzdF9tdWx0KG4sIHMpOworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKHNpemUgPCBzaXplb2YoYnVmKSkgeworCQkvKiBUaGUgdGVtcG9yYXJ5IGFycmF5IGZpdHMgb24gdGhlIHNtYWxsIG9uLXN0YWNrIGJ1ZmZlci4gKi8KKwkJbXNvcnRfd2l0aF90bXAoYiwgbiwgcywgY21wLCBidWYpOworCX0gZWxzZSB7CisJCS8qIEl0J3Mgc29tZXdoYXQgbGFyZ2UsIHNvIG1hbGxvYyBpdC4gICovCisJCWNoYXIgKnRtcCA9IHhtYWxsb2Moc2l6ZSk7CisJCW1zb3J0X3dpdGhfdG1wKGIsIG4sIHMsIGNtcCwgdG1wKTsKKwkJZnJlZSh0bXApOworCX0KK30KZGlmZiAtLWdpdCBhL3N0cmJ1Zi5jIGIvc3RyYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwMDY1YwotLS0gL2Rldi9udWxsCisrKyBiL3N0cmJ1Zi5jCkBAIC0wLDAgKzEsMTE3MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAidXRmOC5oIgorCitpbnQgc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZm9yICg7IDsgc3RyKyssIHByZWZpeCsrKQorCQlpZiAoISpwcmVmaXgpCisJCQlyZXR1cm4gMTsKKwkJZWxzZSBpZiAoKnN0ciAhPSAqcHJlZml4KQorCQkJcmV0dXJuIDA7Cit9CisKK2ludCBpc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZm9yICg7IDsgc3RyKyssIHByZWZpeCsrKQorCQlpZiAoISpwcmVmaXgpCisJCQlyZXR1cm4gMTsKKwkJZWxzZSBpZiAodG9sb3dlcigqc3RyKSAhPSB0b2xvd2VyKCpwcmVmaXgpKQorCQkJcmV0dXJuIDA7Cit9CisKK2ludCBza2lwX3RvX29wdGlvbmFsX2FyZ19kZWZhdWx0KGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSBjb25zdCBjaGFyICoqYXJnLCBjb25zdCBjaGFyICpkZWYpCit7CisJY29uc3QgY2hhciAqcDsKKworCWlmICghc2tpcF9wcmVmaXgoc3RyLCBwcmVmaXgsICZwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoISpwKSB7CisJCWlmIChhcmcpCisJCQkqYXJnID0gZGVmOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKnAgIT0gJz0nKQorCQlyZXR1cm4gMDsKKworCWlmIChhcmcpCisJCSphcmcgPSBwICsgMTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFVzZWQgYXMgdGhlIGRlZmF1bHQgLT5idWYgdmFsdWUsIHNvIHRoYXQgcGVvcGxlIGNhbiBhbHdheXMgYXNzdW1lCisgKiBidWYgaXMgbm9uIE5VTEwgYW5kIC0+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+XCIle318XFxeYDovPyNbXUAhJCYnKCkqKyw7PSIKKwordm9pZCBzdHJidWZfYWRkX3BlcmNlbnRlbmNvZGUoc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJc2l6ZV90IGksIGxlbiA9IHN0cmxlbihzcmMpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgY2ggPSBzcmNbaV07CisJCWlmIChjaCA8PSAweDFGIHx8IGNoID49IDB4N0YgfHwgc3RyY2hyKFVSTF9VTlNBRkVfQ0hBUlMsIGNoKSkKKwkJCXN0cmJ1Zl9hZGRmKGRzdCwgIiUlJTAyWCIsICh1bnNpZ25lZCBjaGFyKWNoKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKGRzdCwgY2gpOworCX0KK30KKworc2l6ZV90IHN0cmJ1Zl9mcmVhZChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHNpemUsIEZJTEUgKmYpCit7CisJc2l6ZV90IHJlczsKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisKKwlzdHJidWZfZ3JvdyhzYiwgc2l6ZSk7CisJcmVzID0gZnJlYWQoc2ItPmJ1ZiArIHNiLT5sZW4sIDEsIHNpemUsIGYpOworCWlmIChyZXMgPiAwKQorCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgcmVzKTsKKwllbHNlIGlmIChvbGRhbGxvYyA9PSAwKQorCQlzdHJidWZfcmVsZWFzZShzYik7CisJcmV0dXJuIHJlczsKK30KKworc3NpemVfdCBzdHJidWZfcmVhZChzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGZkLCBzaXplX3QgaGludCkKK3sKKwlzaXplX3Qgb2xkbGVuID0gc2ItPmxlbjsKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisKKwlzdHJidWZfZ3JvdyhzYiwgaGludCA/IGhpbnQgOiA4MTkyKTsKKwlmb3IgKDs7KSB7CisJCXNzaXplX3Qgd2FudCA9IHNiLT5hbGxvYyAtIHNiLT5sZW4gLSAxOworCQlzc2l6ZV90IGdvdCA9IHJlYWRfaW5fZnVsbChmZCwgc2ItPmJ1ZiArIHNiLT5sZW4sIHdhbnQpOworCisJCWlmIChnb3QgPCAwKSB7CisJCQlpZiAob2xkYWxsb2MgPT0gMCkKKwkJCQlzdHJidWZfcmVsZWFzZShzYik7CisJCQllbHNlCisJCQkJc3RyYnVmX3NldGxlbihzYiwgb2xkbGVuKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzYi0+bGVuICs9IGdvdDsKKwkJaWYgKGdvdCA8IHdhbnQpCisJCQlicmVhazsKKwkJc3RyYnVmX2dyb3coc2IsIDgxOTIpOworCX0KKworCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworCXJldHVybiBzYi0+bGVuIC0gb2xkbGVuOworfQorCitzc2l6ZV90IHN0cmJ1Zl9yZWFkX29uY2Uoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCwgc2l6ZV90IGhpbnQpCit7CisJc2l6ZV90IG9sZGFsbG9jID0gc2ItPmFsbG9jOworCXNzaXplX3QgY250OworCisJc3RyYnVmX2dyb3coc2IsIGhpbnQgPyBoaW50IDogODE5Mik7CisJY250ID0geHJlYWQoZmQsIHNiLT5idWYgKyBzYi0+bGVuLCBzYi0+YWxsb2MgLSBzYi0+bGVuIC0gMSk7CisJaWYgKGNudCA+IDApCisJCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBjbnQpOworCWVsc2UgaWYgKG9sZGFsbG9jID09IDApCisJCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKKwlyZXR1cm4gY250OworfQorCitzc2l6ZV90IHN0cmJ1Zl93cml0ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZikKK3sKKwlyZXR1cm4gc2ItPmxlbiA/IGZ3cml0ZShzYi0+YnVmLCAxLCBzYi0+bGVuLCBmKSA6IDA7Cit9CisKKworI2RlZmluZSBTVFJCVUZfTUFYTElOSyAoMipQQVRIX01BWCkKKworaW50IHN0cmJ1Zl9yZWFkbGluayhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpCit7CisJc2l6ZV90IG9sZGFsbG9jID0gc2ItPmFsbG9jOworCisJaWYgKGhpbnQgPCAzMikKKwkJaGludCA9IDMyOworCisJd2hpbGUgKGhpbnQgPCBTVFJCVUZfTUFYTElOSykgeworCQlzc2l6ZV90IGxlbjsKKworCQlzdHJidWZfZ3JvdyhzYiwgaGludCk7CisJCWxlbiA9IHJlYWRsaW5rKHBhdGgsIHNiLT5idWYsIGhpbnQpOworCQlpZiAobGVuIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVSQU5HRSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIGlmIChsZW4gPCBoaW50KSB7CisJCQlzdHJidWZfc2V0bGVuKHNiLCBsZW4pOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiAuLiB0aGUgYnVmZmVyIHdhcyB0b28gc21hbGwgLSB0cnkgYWdhaW4gKi8KKwkJaGludCAqPSAyOworCX0KKwlpZiAob2xkYWxsb2MgPT0gMCkKKwkJc3RyYnVmX3JlbGVhc2Uoc2IpOworCXJldHVybiAtMTsKK30KKworaW50IHN0cmJ1Zl9nZXRjd2Qoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJc2l6ZV90IG9sZGFsbG9jID0gc2ItPmFsbG9jOworCXNpemVfdCBndWVzc2VkX2xlbiA9IDEyODsKKworCWZvciAoOzsgZ3Vlc3NlZF9sZW4gKj0gMikgeworCQlzdHJidWZfZ3JvdyhzYiwgZ3Vlc3NlZF9sZW4pOworCQlpZiAoZ2V0Y3dkKHNiLT5idWYsIHNiLT5hbGxvYykpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oc2IsIHN0cmxlbihzYi0+YnVmKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIElmIGdldGN3ZCgzKSBpcyBpbXBsZW1lbnRlZCBhcyBhIHN5c2NhbGwgdGhhdCBmYWxscworCQkgKiBiYWNrIHRvIGEgcmVndWxhciBsb29rdXAgdXNpbmcgcmVhZGRpcigzKSBldGMuIHRoZW4KKwkJICogd2UgbWF5IGJlIGFibGUgdG8gYXZvaWQgRUFDQ0VTIGJ5IHByb3ZpZGluZyBlbm91Z2gKKwkJICogc3BhY2UgdG8gdGhlIHN5c2NhbGwgYXMgaXQncyBub3QgbmVjZXNzYXJpbHkgYm91bmQKKwkJICogdG8gdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIHRoZSBmYWxsYmFjay4KKwkJICovCisJCWlmIChlcnJubyA9PSBFQUNDRVMgJiYgZ3Vlc3NlZF9sZW4gPCBQQVRIX01BWCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlcnJubyAhPSBFUkFOR0UpCisJCQlicmVhazsKKwl9CisJaWYgKG9sZGFsbG9jID09IDApCisJCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKKwllbHNlCisJCXN0cmJ1Zl9yZXNldChzYik7CisJcmV0dXJuIC0xOworfQorCisjaWZkZWYgSEFWRV9HRVRERUxJTQoraW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgdGVybSkKK3sKKwlzc2l6ZV90IHI7CisKKwlpZiAoZmVvZihmcCkpCisJCXJldHVybiBFT0Y7CisKKwlzdHJidWZfcmVzZXQoc2IpOworCisJLyogVHJhbnNsYXRlIHNsb3BidWYgdG8gTlVMTCwgYXMgd2UgY2Fubm90IGNhbGwgcmVhbGxvYyBvbiBpdCAqLworCWlmICghc2ItPmFsbG9jKQorCQlzYi0+YnVmID0gTlVMTDsKKwllcnJubyA9IDA7CisJciA9IGdldGRlbGltKCZzYi0+YnVmLCAmc2ItPmFsbG9jLCB0ZXJtLCBmcCk7CisKKwlpZiAociA+IDApIHsKKwkJc2ItPmxlbiA9IHI7CisJCXJldHVybiAwOworCX0KKwlhc3NlcnQociA9PSAtMSk7CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIHdvdWxkIGhhdmUgY2FsbGVkIHhyZWFsbG9jLCB3aGljaCB3aWxsIHRyeSB0byBmcmVlCisJICogbWVtb3J5IGFuZCByZWNvdmVyLiBCdXQgd2UgaGF2ZSBubyB3YXkgdG8gdGVsbCBnZXRkZWxpbSgpIHRvIGRvIHNvLgorCSAqIFdvcnNlLCB3ZSBjYW5ub3QgdHJ5IHRvIHJlY292ZXIgRU5PTUVNIG91cnNlbHZlcywgYmVjYXVzZSB3ZSBoYXZlCisJICogbm8gaWRlYSBob3cgbWFueSBieXRlcyB3ZXJlIHJlYWQgYnkgZ2V0ZGVsaW0uCisJICoKKwkgKiBEeWluZyBoZXJlIGlzIHJlYXNvbmFibGUuIEl0IG1pcnJvcnMgd2hhdCB4cmVhbGxvYyB3b3VsZCBkbyBvbgorCSAqIGNhdGFzdHJvcGhpYyBtZW1vcnkgZmFpbHVyZS4gV2Ugc2tpcCB0aGUgb3Bwb3J0dW5pdHkgdG8gZnJlZSBwYWNrCisJICogbWVtb3J5IGFuZCByZXRyeSwgYnV0IHRoYXQncyB1bmxpa2VseSB0byBoZWxwIGZvciBhIG1hbGxvYyBzbWFsbAorCSAqIGVub3VnaCB0byBob2xkIGEgc2luZ2xlIGxpbmUgb2YgaW5wdXQsIGFueXdheS4KKwkgKi8KKwlpZiAoZXJybm8gPT0gRU5PTUVNKQorCQlkaWUoIk91dCBvZiBtZW1vcnksIGdldGRlbGltIGZhaWxlZCIpOworCisJLyoKKwkgKiBSZXN0b3JlIHN0cmJ1ZiBpbnZhcmlhbnRzOyBpZiBnZXRkZWxpbSBsZWZ0IHVzIHdpdGggYSBOVUxMIHBvaW50ZXIsCisJICogd2UgY2FuIGp1c3QgcmUtaW5pdCwgYnV0IG90aGVyd2lzZSB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgb3VyCisJICogbGVuZ3RoIGlzIGVtcHR5LCBhbmQgdGhhdCB0aGUgcmVzdWx0IGlzIE5VTC10ZXJtaW5hdGVkLgorCSAqLworCWlmICghc2ItPmJ1ZikKKwkJc3RyYnVmX2luaXQoc2IsIDApOworCWVsc2UKKwkJc3RyYnVmX3Jlc2V0KHNiKTsKKwlyZXR1cm4gRU9GOworfQorI2Vsc2UKK2ludCBzdHJidWZfZ2V0d2hvbGVsaW5lKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IHRlcm0pCit7CisJaW50IGNoOworCisJaWYgKGZlb2YoZnApKQorCQlyZXR1cm4gRU9GOworCisJc3RyYnVmX3Jlc2V0KHNiKTsKKwlmbG9ja2ZpbGUoZnApOworCXdoaWxlICgoY2ggPSBnZXRjX3VubG9ja2VkKGZwKSkgIT0gRU9GKSB7CisJCWlmICghc3RyYnVmX2F2YWlsKHNiKSkKKwkJCXN0cmJ1Zl9ncm93KHNiLCAxKTsKKwkJc2ItPmJ1ZltzYi0+bGVuKytdID0gY2g7CisJCWlmIChjaCA9PSB0ZXJtKQorCQkJYnJlYWs7CisJfQorCWZ1bmxvY2tmaWxlKGZwKTsKKwlpZiAoY2ggPT0gRU9GICYmIHNiLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc3RyYnVmX2dldGRlbGltKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IHRlcm0pCit7CisJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc2IsIGZwLCB0ZXJtKSkKKwkJcmV0dXJuIEVPRjsKKwlpZiAoc2ItPmJ1ZltzYi0+bGVuIC0gMV0gPT0gdGVybSkKKwkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCXJldHVybiAwOworfQorCitpbnQgc3RyYnVmX2dldGxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwKQoreworCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKHNiLCBmcCwgJ1xuJykpCisJCXJldHVybiBFT0Y7CisJaWYgKHNiLT5idWZbc2ItPmxlbiAtIDFdID09ICdcbicpIHsKKwkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCQlpZiAoc2ItPmxlbiAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnXHInKQorCQkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHN0cmJ1Zl9nZXRsaW5lX2xmKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCkKK3sKKwlyZXR1cm4gc3RyYnVmX2dldGRlbGltKHNiLCBmcCwgJ1xuJyk7Cit9CisKK2ludCBzdHJidWZfZ2V0bGluZV9udWwoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwKQoreworCXJldHVybiBzdHJidWZfZ2V0ZGVsaW0oc2IsIGZwLCAnXDAnKTsKK30KKworaW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCwgaW50IHRlcm0pCit7CisJc3RyYnVmX3Jlc2V0KHNiKTsKKworCXdoaWxlICgxKSB7CisJCWNoYXIgY2g7CisJCXNzaXplX3QgbGVuID0geHJlYWQoZmQsICZjaCwgMSk7CisJCWlmIChsZW4gPD0gMCkKKwkJCXJldHVybiBFT0Y7CisJCXN0cmJ1Zl9hZGRjaChzYiwgY2gpOworCQlpZiAoY2ggPT0gdGVybSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3NpemVfdCBzdHJidWZfcmVhZF9maWxlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgaGludCkKK3sKKwlpbnQgZmQ7CisJc3NpemVfdCBsZW47CisJaW50IHNhdmVkX2Vycm5vOworCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJbGVuID0gc3RyYnVmX3JlYWQoc2IsIGZkLCBoaW50KTsKKwlzYXZlZF9lcnJubyA9IGVycm5vOworCWNsb3NlKGZkKTsKKwlpZiAobGVuIDwgMCkgeworCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKwordm9pZCBzdHJidWZfYWRkX2xpbmVzKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCWFkZF9saW5lcyhvdXQsIHByZWZpeCwgTlVMTCwgYnVmLCBzaXplKTsKK30KKwordm9pZCBzdHJidWZfYWRkc3RyX3htbF9xdW90ZWQoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykgeworCQlzaXplX3QgbGVuID0gc3RyY3NwbihzLCAiXCI8PiYiKTsKKwkJc3RyYnVmX2FkZChidWYsIHMsIGxlbik7CisJCXMgKz0gbGVuOworCQlzd2l0Y2ggKCpzKSB7CisJCWNhc2UgJyInOgorCQkJc3RyYnVmX2FkZHN0cihidWYsICImcXVvdDsiKTsKKwkJCWJyZWFrOworCQljYXNlICc8JzoKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiJmx0OyIpOworCQkJYnJlYWs7CisJCWNhc2UgJz4nOgorCQkJc3RyYnVmX2FkZHN0cihidWYsICImZ3Q7Iik7CisJCQlicmVhazsKKwkJY2FzZSAnJic6CisJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiZhbXA7Iik7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJcmV0dXJuOworCQl9CisJCXMrKzsKKwl9Cit9CisKK2ludCBpc19yZmMzOTg2X3Jlc2VydmVkX29yX3VucmVzZXJ2ZWQoY2hhciBjaCkKK3sKKwlpZiAoaXNfcmZjMzk4Nl91bnJlc2VydmVkKGNoKSkKKwkJcmV0dXJuIDE7CisJc3dpdGNoIChjaCkgeworCQljYXNlICchJzogY2FzZSAnKic6IGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICc7JzoKKwkJY2FzZSAnOic6IGNhc2UgJ0AnOiBjYXNlICcmJzogY2FzZSAnPSc6IGNhc2UgJysnOiBjYXNlICckJzoKKwkJY2FzZSAnLCc6IGNhc2UgJy8nOiBjYXNlICc/JzogY2FzZSAnIyc6IGNhc2UgJ1snOiBjYXNlICddJzoKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3JmYzM5ODZfdW5yZXNlcnZlZChjaGFyIGNoKQoreworCXJldHVybiBpc2FsbnVtKGNoKSB8fAorCQljaCA9PSAnLScgfHwgY2ggPT0gJ18nIHx8IGNoID09ICcuJyB8fCBjaCA9PSAnfic7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hZGRfdXJsZW5jb2RlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuLAorCQkJCSBjaGFyX3ByZWRpY2F0ZSBhbGxvd191bmVuY29kZWRfZm4pCit7CisJc3RyYnVmX2dyb3coc2IsIGxlbik7CisJd2hpbGUgKGxlbi0tKSB7CisJCWNoYXIgY2ggPSAqcysrOworCQlpZiAoYWxsb3dfdW5lbmNvZGVkX2ZuKGNoKSkKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgY2gpOworCQllbHNlCisJCQlzdHJidWZfYWRkZihzYiwgIiUlJTAyeCIsICh1bnNpZ25lZCBjaGFyKWNoKTsKKwl9Cit9CisKK3ZvaWQgc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnMsCisJCQkgICAgIGNoYXJfcHJlZGljYXRlIGFsbG93X3VuZW5jb2RlZF9mbikKK3sKKwlzdHJidWZfYWRkX3VybGVuY29kZShzYiwgcywgc3RybGVuKHMpLCBhbGxvd191bmVuY29kZWRfZm4pOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfaHVtYW5pc2Uoc3RydWN0IHN0cmJ1ZiAqYnVmLCBvZmZfdCBieXRlcywKKwkJCQkgaW50IGh1bWFuaXNlX3JhdGUpCit7CisJaWYgKGJ5dGVzID4gMSA8PCAzMCkgeworCQlzdHJidWZfYWRkZihidWYsCisJCQkJaHVtYW5pc2VfcmF0ZSA9PSAwID8KKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlICovCisJCQkJCV8oIiV1LiUyLjJ1IEdpQiIpIDoKKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGdpYmlieXRlL3NlY29uZCAqLworCQkJCQlfKCIldS4lMi4ydSBHaUIvcyIpLAorCQkJICAgICh1bnNpZ25lZCkoYnl0ZXMgPj4gMzApLAorCQkJICAgICh1bnNpZ25lZCkoYnl0ZXMgJiAoKDEgPDwgMzApIC0gMSkpIC8gMTA3Mzc0MTkpOworCX0gZWxzZSBpZiAoYnl0ZXMgPiAxIDw8IDIwKSB7CisJCXVuc2lnbmVkIHggPSBieXRlcyArIDUyNDM7ICAvKiBmb3Igcm91bmRpbmcgKi8KKwkJc3RyYnVmX2FkZGYoYnVmLAorCQkJCWh1bWFuaXNlX3JhdGUgPT0gMCA/CisJCQkJCS8qIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZSAqLworCQkJCQlfKCIldS4lMi4ydSBNaUIiKSA6CisJCQkJCS8qIFRSQU5TTEFUT1JTOiBJRUMgODAwMDAtMTM6MjAwOCBtZWJpYnl0ZS9zZWNvbmQgKi8KKwkJCQkJXygiJXUuJTIuMnUgTWlCL3MiKSwKKwkJCSAgICB4ID4+IDIwLCAoKHggJiAoKDEgPDwgMjApIC0gMSkpICogMTAwKSA+PiAyMCk7CisJfSBlbHNlIGlmIChieXRlcyA+IDEgPDwgMTApIHsKKwkJdW5zaWduZWQgeCA9IGJ5dGVzICsgNTsgIC8qIGZvciByb3VuZGluZyAqLworCQlzdHJidWZfYWRkZihidWYsCisJCQkJaHVtYW5pc2VfcmF0ZSA9PSAwID8KKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlICovCisJCQkJCV8oIiV1LiUyLjJ1IEtpQiIpIDoKKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGtpYmlieXRlL3NlY29uZCAqLworCQkJCQlfKCIldS4lMi4ydSBLaUIvcyIpLAorCQkJICAgIHggPj4gMTAsICgoeCAmICgoMSA8PCAxMCkgLSAxKSkgKiAxMDApID4+IDEwKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihidWYsCisJCQkJaHVtYW5pc2VfcmF0ZSA9PSAwID8KKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUgKi8KKwkJCQkJUV8oIiV1IGJ5dGUiLCAiJXUgYnl0ZXMiLCAodW5zaWduZWQpYnl0ZXMpIDoKKwkJCQkJLyogVFJBTlNMQVRPUlM6IElFQyA4MDAwMC0xMzoyMDA4IGJ5dGUvc2Vjb25kICovCisJCQkJCVFfKCIldSBieXRlL3MiLCAiJXUgYnl0ZXMvcyIsICh1bnNpZ25lZClieXRlcyksCisJCQkJKHVuc2lnbmVkKWJ5dGVzKTsKKwl9Cit9CisKK3ZvaWQgc3RyYnVmX2h1bWFuaXNlX2J5dGVzKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgYnl0ZXMpCit7CisJc3RyYnVmX2h1bWFuaXNlKGJ1ZiwgYnl0ZXMsIDApOworfQorCit2b2lkIHN0cmJ1Zl9odW1hbmlzZV9yYXRlKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgYnl0ZXMpCit7CisJc3RyYnVmX2h1bWFuaXNlKGJ1ZiwgYnl0ZXMsIDEpOworfQorCit2b2lkIHN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoISpwYXRoKQorCQlkaWUoIlRoZSBlbXB0eSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgcGF0aCIpOworCWlmICghaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkgeworCQlzdHJ1Y3Qgc3RhdCBjd2Rfc3RhdCwgcHdkX3N0YXQ7CisJCXNpemVfdCBvcmlnX2xlbiA9IHNiLT5sZW47CisJCWNoYXIgKmN3ZCA9IHhnZXRjd2QoKTsKKwkJY2hhciAqcHdkID0gZ2V0ZW52KCJQV0QiKTsKKwkJaWYgKHB3ZCAmJiBzdHJjbXAocHdkLCBjd2QpICYmCisJCSAgICAhc3RhdChjd2QsICZjd2Rfc3RhdCkgJiYKKwkJICAgIChjd2Rfc3RhdC5zdF9kZXYgfHwgY3dkX3N0YXQuc3RfaW5vKSAmJgorCQkgICAgIXN0YXQocHdkLCAmcHdkX3N0YXQpICYmCisJCSAgICBwd2Rfc3RhdC5zdF9kZXYgPT0gY3dkX3N0YXQuc3RfZGV2ICYmCisJCSAgICBwd2Rfc3RhdC5zdF9pbm8gPT0gY3dkX3N0YXQuc3RfaW5vKQorCQkJc3RyYnVmX2FkZHN0cihzYiwgcHdkKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cihzYiwgY3dkKTsKKwkJaWYgKHNiLT5sZW4gPiBvcmlnX2xlbiAmJiAhaXNfZGlyX3NlcChzYi0+YnVmW3NiLT5sZW4gLSAxXSkpCisJCQlzdHJidWZfYWRkY2goc2IsICcvJyk7CisJCWZyZWUoY3dkKTsKKwl9CisJc3RyYnVmX2FkZHN0cihzYiwgcGF0aCk7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZF9yZWFsX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKHNiLT5sZW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiByZXNvbHZlZCA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfcmVhbHBhdGgoJnJlc29sdmVkLCBwYXRoLCAxKTsKKwkJc3RyYnVmX2FkZGJ1ZihzYiwgJnJlc29sdmVkKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlc29sdmVkKTsKKwl9IGVsc2UKKwkJc3RyYnVmX3JlYWxwYXRoKHNiLCBwYXRoLCAxKTsKK30KKworaW50IHByaW50Zl9sbihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdnByaW50ZihmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWlmIChyZXQgPCAwIHx8IHB1dGNoYXIoJ1xuJykgPT0gRU9GKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldCArIDE7Cit9CisKK2ludCBmcHJpbnRmX2xuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoZnAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKHJldCA8IDAgfHwgcHV0YygnXG4nLCBmcCkgPT0gRU9GKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldCArIDE7Cit9CisKK2NoYXIgKnhzdHJkdXBfdG9sb3dlcihjb25zdCBjaGFyICpzdHJpbmcpCit7CisJY2hhciAqcmVzdWx0OworCXNpemVfdCBsZW4sIGk7CisKKwlsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKwlyZXN1bHQgPSB4bWFsbG9jeihsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcmVzdWx0W2ldID0gdG9sb3dlcihzdHJpbmdbaV0pOworCXJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgKnhzdHJkdXBfdG91cHBlcihjb25zdCBjaGFyICpzdHJpbmcpCit7CisJY2hhciAqcmVzdWx0OworCXNpemVfdCBsZW4sIGk7CisKKwlsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKwlyZXN1bHQgPSB4bWFsbG9jeihsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcmVzdWx0W2ldID0gdG91cHBlcihzdHJpbmdbaV0pOworCXJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgKnhzdHJ2Zm10KGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIGFwKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworY2hhciAqeHN0cmZtdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKnJldDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHhzdHJ2Zm10KGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHN0cmJ1Zl9hZGRmdGltZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCBjb25zdCBzdHJ1Y3QgdG0gKnRtLAorCQkgICAgIGludCB0el9vZmZzZXQsIGludCBzdXBwcmVzc190el9uYW1lKQoreworCXN0cnVjdCBzdHJidWYgbXVuZ2VkX2ZtdCA9IFNUUkJVRl9JTklUOworCXNpemVfdCBoaW50ID0gMTI4OworCXNpemVfdCBsZW47CisKKwlpZiAoISpmbXQpCisJCXJldHVybjsKKworCS8qCisJICogVGhlcmUgaXMgbm8gcG9ydGFibGUgd2F5IHRvIHBhc3MgdGltZXpvbmUgaW5mb3JtYXRpb24gdG8KKwkgKiBzdHJmdGltZSwgc28gd2UgaGFuZGxlICV6IGFuZCAlWiBoZXJlLgorCSAqLworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqcGVyY2VudCA9IHN0cmNocm51bChmbXQsICclJyk7CisJCXN0cmJ1Zl9hZGQoJm11bmdlZF9mbXQsIGZtdCwgcGVyY2VudCAtIGZtdCk7CisJCWlmICghKnBlcmNlbnQpCisJCQlicmVhazsKKwkJZm10ID0gcGVyY2VudCArIDE7CisJCXN3aXRjaCAoKmZtdCkgeworCQljYXNlICclJzoKKwkJCXN0cmJ1Zl9hZGRzdHIoJm11bmdlZF9mbXQsICIlJSIpOworCQkJZm10Kys7CisJCQlicmVhazsKKwkJY2FzZSAneic6CisJCQlzdHJidWZfYWRkZigmbXVuZ2VkX2ZtdCwgIiUrMDVkIiwgdHpfb2Zmc2V0KTsKKwkJCWZtdCsrOworCQkJYnJlYWs7CisJCWNhc2UgJ1onOgorCQkJaWYgKHN1cHByZXNzX3R6X25hbWUpIHsKKwkJCQlmbXQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkY2goJm11bmdlZF9mbXQsICclJyk7CisJCX0KKwl9CisJZm10ID0gbXVuZ2VkX2ZtdC5idWY7CisKKwlzdHJidWZfZ3JvdyhzYiwgaGludCk7CisJbGVuID0gc3RyZnRpbWUoc2ItPmJ1ZiArIHNiLT5sZW4sIHNiLT5hbGxvYyAtIHNiLT5sZW4sIGZtdCwgdG0pOworCisJaWYgKCFsZW4pIHsKKwkJLyoKKwkJICogc3RyZnRpbWUgcmVwb3J0cyAiMCIgaWYgaXQgY291bGQgbm90IGZpdCB0aGUgcmVzdWx0IGluIHRoZSBidWZmZXIuCisJCSAqIFVuZm9ydHVuYXRlbHksIGl0IGFsc28gcmVwb3J0cyAiMCIgaWYgdGhlIHJlcXVlc3RlZCB0aW1lIHN0cmluZworCQkgKiB0YWtlcyAwIGJ5dGVzLiBTbyBvdXIgc3RyYXRlZ3kgaXMgdG8gbXVuZ2UgdGhlIGZvcm1hdCBzbyB0aGF0IHRoZQorCQkgKiBvdXRwdXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgYW5kIHRoZW4gZHJvcCB0aGUgZXh0cmEKKwkJICogY2hhcmFjdGVyIGJlZm9yZSByZXR1cm5pbmcuCisJCSAqLworCQlzdHJidWZfYWRkY2goJm11bmdlZF9mbXQsICcgJyk7CisJCXdoaWxlICghbGVuKSB7CisJCQloaW50ICo9IDI7CisJCQlzdHJidWZfZ3JvdyhzYiwgaGludCk7CisJCQlsZW4gPSBzdHJmdGltZShzYi0+YnVmICsgc2ItPmxlbiwgc2ItPmFsbG9jIC0gc2ItPmxlbiwKKwkJCQkgICAgICAgbXVuZ2VkX2ZtdC5idWYsIHRtKTsKKwkJfQorCQlsZW4tLTsgLyogZHJvcCBtdW5nZWQgc3BhY2UgKi8KKwl9CisJc3RyYnVmX3JlbGVhc2UoJm11bmdlZF9mbXQpOworCXN0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBsZW4pOworfQorCit2b2lkIHN0cmJ1Zl9hZGRfdW5pcXVlX2FiYnJldihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGFiYnJldl9sZW4pCit7CisJaW50IHI7CisJc3RyYnVmX2dyb3coc2IsIEdJVF9NQVhfSEVYU1ogKyAxKTsKKwlyID0gZmluZF91bmlxdWVfYWJicmV2X3Ioc2ItPmJ1ZiArIHNiLT5sZW4sIG9pZCwgYWJicmV2X2xlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIHIpOworfQorCisvKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgbGluZSwgd2l0aG91dCB0cmFpbGluZyBzcGFjZXMuCisgKgorICogSWYgdGhlIGxpbmUgZW5kcyB3aXRoIG5ld2xpbmUsIGl0IHdpbGwgYmUgcmVtb3ZlZCB0b28uCisgKi8KK3N0YXRpYyBzaXplX3QgY2xlYW51cChjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4pIHsKKwkJdW5zaWduZWQgY2hhciBjID0gbGluZVtsZW4gLSAxXTsKKwkJaWYgKCFpc3NwYWNlKGMpKQorCQkJYnJlYWs7CisJCWxlbi0tOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBSZW1vdmUgZW1wdHkgbGluZXMgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBlbmQKKyAqIGFuZCBhbHNvIHRyYWlsaW5nIHNwYWNlcyBmcm9tIGV2ZXJ5IGxpbmUuCisgKgorICogVHVybiBtdWx0aXBsZSBjb25zZWN1dGl2ZSBlbXB0eSBsaW5lcyBiZXR3ZWVuIHBhcmFncmFwaHMKKyAqIGludG8ganVzdCBvbmUgZW1wdHkgbGluZS4KKyAqCisgKiBJZiB0aGUgaW5wdXQgaGFzIG9ubHkgZW1wdHkgbGluZXMgYW5kIHNwYWNlcywKKyAqIG5vIG91dHB1dCB3aWxsIGJlIHByb2R1Y2VkLgorICoKKyAqIElmIGxhc3QgbGluZSBkb2VzIG5vdCBoYXZlIGEgbmV3bGluZSBhdCB0aGUgZW5kLCBvbmUgaXMgYWRkZWQuCisgKgorICogRW5hYmxlIHNraXBfY29tbWVudHMgdG8gc2tpcCBldmVyeSBsaW5lIHN0YXJ0aW5nIHdpdGggY29tbWVudAorICogY2hhcmFjdGVyLgorICovCit2b2lkIHN0cmJ1Zl9zdHJpcHNwYWNlKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgc2tpcF9jb21tZW50cykKK3sKKwlzaXplX3QgZW1wdGllcyA9IDA7CisJc2l6ZV90IGksIGosIGxlbiwgbmV3bGVuOworCWNoYXIgKmVvbDsKKworCS8qIFdlIG1heSBoYXZlIHRvIGFkZCBhIG5ld2xpbmUuICovCisJc3RyYnVmX2dyb3coc2IsIDEpOworCisJZm9yIChpID0gaiA9IDA7IGkgPCBzYi0+bGVuOyBpICs9IGxlbiwgaiArPSBuZXdsZW4pIHsKKwkJZW9sID0gbWVtY2hyKHNiLT5idWYgKyBpLCAnXG4nLCBzYi0+bGVuIC0gaSk7CisJCWxlbiA9IGVvbCA/IGVvbCAtIChzYi0+YnVmICsgaSkgKyAxIDogc2ItPmxlbiAtIGk7CisKKwkJaWYgKHNraXBfY29tbWVudHMgJiYgbGVuICYmIHNiLT5idWZbaV0gPT0gY29tbWVudF9saW5lX2NoYXIpIHsKKwkJCW5ld2xlbiA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQluZXdsZW4gPSBjbGVhbnVwKHNiLT5idWYgKyBpLCBsZW4pOworCisJCS8qIE5vdCBqdXN0IGFuIGVtcHR5IGxpbmU/ICovCisJCWlmIChuZXdsZW4pIHsKKwkJCWlmIChlbXB0aWVzID4gMCAmJiBqID4gMCkKKwkJCQlzYi0+YnVmW2orK10gPSAnXG4nOworCQkJZW1wdGllcyA9IDA7CisJCQltZW1tb3ZlKHNiLT5idWYgKyBqLCBzYi0+YnVmICsgaSwgbmV3bGVuKTsKKwkJCXNiLT5idWZbbmV3bGVuICsgaisrXSA9ICdcbic7CisJCX0gZWxzZSB7CisJCQllbXB0aWVzKys7CisJCX0KKwl9CisKKwlzdHJidWZfc2V0bGVuKHNiLCBqKTsKK30KKworaW50IHN0cmJ1Zl9ub3JtYWxpemVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzcmMpCit7CisJc3RydWN0IHN0cmJ1ZiBkc3QgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9ncm93KCZkc3QsIHNyYy0+bGVuKTsKKwlpZiAobm9ybWFsaXplX3BhdGhfY29weShkc3QuYnVmLCBzcmMtPmJ1ZikgPCAwKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZkc3QpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBub3JtYWxpemVfcGF0aCBkb2VzIG5vdCB0ZWxsIHVzIHRoZSBuZXcgbGVuZ3RoLCBzbyB3ZSBoYXZlIHRvCisJICogY29tcHV0ZSBpdCBieSBsb29raW5nIGZvciB0aGUgbmV3IE5VTCBpdCBwbGFjZWQKKwkgKi8KKwlzdHJidWZfc2V0bGVuKCZkc3QsIHN0cmxlbihkc3QuYnVmKSk7CisJc3RyYnVmX3N3YXAoc3JjLCAmZHN0KTsKKwlzdHJidWZfcmVsZWFzZSgmZHN0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHN0cmJ1Zl9lZGl0X2ludGVyYWN0aXZlbHkoc3RydWN0IHN0cmJ1ZiAqYnVmZmVyLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwljaGFyICpwYXRoMiA9IE5VTEw7CisJaW50IGZkLCByZXMgPSAwOworCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQorCQlwYXRoID0gcGF0aDIgPSB4c3RyZHVwKGdpdF9wYXRoKCIlcyIsIHBhdGgpKTsKKworCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksIHBhdGgpOworCWVsc2UgaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZmZlci0+YnVmLCBidWZmZXItPmxlbikgPCAwKSB7CisJCXJlcyA9IGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiksIHBhdGgpOworCQljbG9zZShmZCk7CisJfSBlbHNlIGlmIChjbG9zZShmZCkgPCAwKQorCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgY2xvc2UgJyVzJyIpLCBwYXRoKTsKKwllbHNlIHsKKwkJc3RyYnVmX3Jlc2V0KGJ1ZmZlcik7CisJCWlmIChsYXVuY2hfZWRpdG9yKHBhdGgsIGJ1ZmZlciwgZW52KSA8IDApCisJCQlyZXMgPSBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3QgZWRpdCAnJXMnIiksIHBhdGgpOworCQl1bmxpbmsocGF0aCk7CisJfQorCisJZnJlZShwYXRoMik7CisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3N0cmJ1Zi5oIGIvc3RyYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4ZTQ5YwotLS0gL2Rldi9udWxsCisrKyBiL3N0cmJ1Zi5oCkBAIC0wLDAgKzEsNzI5IEBACisjaWZuZGVmIFNUUkJVRl9ICisjZGVmaW5lIFNUUkJVRl9ICisKK3N0cnVjdCBzdHJpbmdfbGlzdDsKKworLyoqCisgKiBzdHJidWYncyBhcmUgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIGFsbCB0aGUgdXN1YWwgQyBzdHJpbmcgYW5kIG1lbW9yeQorICogQVBJcy4gR2l2ZW4gdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMga25vd24sIGl0J3Mgb2Z0ZW4gYmV0dGVyIHRvCisgKiB1c2UgdGhlIG1lbSogZnVuY3Rpb25zIHRoYW4gYSBzdHIqIG9uZSAobWVtY2hyIHZzLiBzdHJjaHIgZS5nLikuCisgKiBUaG91Z2gsIG9uZSBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGUgZmFjdCB0aGF0IHN0ciogZnVuY3Rpb25zIG9mdGVuCisgKiBzdG9wIG9uIE5VTHMgYW5kIHRoYXQgc3RyYnVmcyBtYXkgaGF2ZSBlbWJlZGRlZCBOVUxzLgorICoKKyAqIEEgc3RyYnVmIGlzIE5VTCB0ZXJtaW5hdGVkIGZvciBjb252ZW5pZW5jZSwgYnV0IG5vIGZ1bmN0aW9uIGluIHRoZQorICogc3RyYnVmIEFQSSBhY3R1YWxseSByZWxpZXMgb24gdGhlIHN0cmluZyBiZWluZyBmcmVlIG9mIE5VTHMuCisgKgorICogc3RyYnVmcyBoYXZlIHNvbWUgaW52YXJpYW50cyB0aGF0IGFyZSB2ZXJ5IGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQ6CisgKgorICogIC0gVGhlIGBidWZgIG1lbWJlciBpcyBuZXZlciBOVUxMLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBhbnkgdXN1YWwgQworICogICAgc3RyaW5nIG9wZXJhdGlvbnMgc2FmZWx5LiBzdHJidWYncyBfaGF2ZV8gdG8gYmUgaW5pdGlhbGl6ZWQgZWl0aGVyIGJ5CisgKiAgICBgc3RyYnVmX2luaXQoKWAgb3IgYnkgYD0gU1RSQlVGX0lOSVRgIGJlZm9yZSB0aGUgaW52YXJpYW50cywgdGhvdWdoLgorICoKKyAqICAgIERvICpub3QqIGFzc3VtZSBhbnl0aGluZyBvbiB3aGF0IGBidWZgIHJlYWxseSBpcyAoZS5nLiBpZiBpdCBpcworICogICAgYWxsb2NhdGVkIG1lbW9yeSBvciBub3QpLCB1c2UgYHN0cmJ1Zl9kZXRhY2goKWAgdG8gdW53cmFwIGEgbWVtb3J5CisgKiAgICBidWZmZXIgZnJvbSBpdHMgc3RyYnVmIHNoZWxsIGluIGEgc2FmZSB3YXkuIFRoYXQgaXMgdGhlIHNvbGUgc3VwcG9ydGVkCisgKiAgICB3YXkuIFRoaXMgd2lsbCBnaXZlIHlvdSBhIG1hbGxvY2VkIGJ1ZmZlciB0aGF0IHlvdSBjYW4gbGF0ZXIgYGZyZWUoKWAuCisgKgorICogICAgSG93ZXZlciwgaXQgaXMgdG90YWxseSBzYWZlIHRvIG1vZGlmeSBhbnl0aGluZyBpbiB0aGUgc3RyaW5nIHBvaW50ZWQgYnkKKyAqICAgIHRoZSBgYnVmYCBtZW1iZXIsIGJldHdlZW4gdGhlIGluZGljZXMgYDBgIGFuZCBgbGVuLTFgIChpbmNsdXNpdmUpLgorICoKKyAqICAtIFRoZSBgYnVmYCBtZW1iZXIgaXMgYSBieXRlIGFycmF5IHRoYXQgaGFzIGF0IGxlYXN0IGBsZW4gKyAxYCBieXRlcworICogICAgYWxsb2NhdGVkLiBUaGUgZXh0cmEgYnl0ZSBpcyB1c2VkIHRvIHN0b3JlIGEgYCdcMCdgLCBhbGxvd2luZyB0aGUKKyAqICAgIGBidWZgIG1lbWJlciB0byBiZSBhIHZhbGlkIEMtc3RyaW5nLiBFdmVyeSBzdHJidWYgZnVuY3Rpb24gZW5zdXJlIHRoaXMKKyAqICAgIGludmFyaWFudCBpcyBwcmVzZXJ2ZWQuCisgKgorICogICAgTk9URTogSXQgaXMgT0sgdG8gInBsYXkiIHdpdGggdGhlIGJ1ZmZlciBkaXJlY3RseSBpZiB5b3Ugd29yayBpdCB0aGlzCisgKiAgICB3YXk6CisgKgorICogICAgICAgIHN0cmJ1Zl9ncm93KHNiLCBTT01FX1NJWkUpOyA8MT4KKyAqICAgICAgICBzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgU09NRV9PVEhFUl9TSVpFKTsKKyAqCisgKiAgICA8MT4gSGVyZSwgdGhlIG1lbW9yeSBhcnJheSBzdGFydGluZyBhdCBgc2ItPmJ1ZmAsIGFuZCBvZiBsZW5ndGgKKyAqICAgIGBzdHJidWZfYXZhaWwoc2IpYCBpcyBhbGwgeW91cnMsIGFuZCB5b3UgY2FuIGJlIHN1cmUgdGhhdAorICogICAgYHN0cmJ1Zl9hdmFpbChzYilgIGlzIGF0IGxlYXN0IGBTT01FX1NJWkVgLgorICoKKyAqICAgIE5PVEU6IGBTT01FX09USEVSX1NJWkVgIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBgc3RyYnVmX2F2YWlsKHNiKWAuCisgKgorICogICAgRG9pbmcgc28gaXMgc2FmZSwgdGhvdWdoIGlmIGl0IGhhcyB0byBiZSBkb25lIGluIG1hbnkgcGxhY2VzLCBhZGRpbmcgdGhlCisgKiAgICBtaXNzaW5nIEFQSSB0byB0aGUgc3RyYnVmIG1vZHVsZSBpcyB0aGUgd2F5IHRvIGdvLgorICoKKyAqICAgIFdBUk5JTkc6IERvIF9ub3RfIGFzc3VtZSB0aGF0IHRoZSBhcmVhIHRoYXQgaXMgeW91cnMgaXMgb2Ygc2l6ZSBgYWxsb2MKKyAqICAgIC0gMWAgZXZlbiBpZiBpdCdzIHRydWUgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEFsbG9jIGlzIHNvbWVob3cgYQorICogICAgInByaXZhdGUiIG1lbWJlciB0aGF0IHNob3VsZCBub3QgYmUgbWVzc2VkIHdpdGguIFVzZSBgc3RyYnVmX2F2YWlsKClgCisgKiAgICBpbnN0ZWFkLgorKi8KKworLyoqCisgKiBEYXRhIFN0cnVjdHVyZXMKKyAqIC0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qKgorICogVGhpcyBpcyB0aGUgc3RyaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUuIFRoZSBgbGVuYCBtZW1iZXIgY2FuIGJlIHVzZWQgdG8KKyAqIGRldGVybWluZSB0aGUgY3VycmVudCBsZW5ndGggb2YgdGhlIHN0cmluZywgYW5kIGBidWZgIG1lbWJlciBwcm92aWRlcworICogYWNjZXNzIHRvIHRoZSBzdHJpbmcgaXRzZWxmLgorICovCitzdHJ1Y3Qgc3RyYnVmIHsKKwlzaXplX3QgYWxsb2M7CisJc2l6ZV90IGxlbjsKKwljaGFyICpidWY7Cit9OworCitleHRlcm4gY2hhciBzdHJidWZfc2xvcGJ1ZltdOworI2RlZmluZSBTVFJCVUZfSU5JVCAgeyAuYWxsb2MgPSAwLCAubGVuID0gMCwgLmJ1ZiA9IHN0cmJ1Zl9zbG9wYnVmIH0KKworLyoKKyAqIFByZWRlY2xhcmUgdGhpcyBoZXJlLCBzaW5jZSBjYWNoZS5oIGluY2x1ZGVzIHRoaXMgZmlsZSBiZWZvcmUgaXQgZGVmaW5lcyB0aGUKKyAqIHN0cnVjdC4KKyAqLworc3RydWN0IG9iamVjdF9pZDsKKworLyoqCisgKiBMaWZlIEN5Y2xlIEZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZS4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgY2FuIGJlIHplcm8gb3IgYSBiaWdnZXIKKyAqIG51bWJlciB0byBhbGxvY2F0ZSBtZW1vcnksIGluIGNhc2UgeW91IHdhbnQgdG8gcHJldmVudCBmdXJ0aGVyIHJlYWxsb2NzLgorICovCit2b2lkIHN0cmJ1Zl9pbml0KHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgYWxsb2MpOworCisvKioKKyAqIFJlbGVhc2UgYSBzdHJpbmcgYnVmZmVyIGFuZCB0aGUgbWVtb3J5IGl0IHVzZWQuIEFmdGVyIHRoaXMgY2FsbCwgdGhlCisgKiBzdHJidWYgcG9pbnRzIHRvIGFuIGVtcHR5IHN0cmluZyB0aGF0IGRvZXMgbm90IG5lZWQgdG8gYmUgZnJlZSgpZWQsIGFzCisgKiBpZiBpdCBoYWQgYmVlbiBzZXQgdG8gYFNUUkJVRl9JTklUYCBhbmQgbmV2ZXIgbW9kaWZpZWQuCisgKgorICogVG8gY2xlYXIgYSBzdHJidWYgaW4gcHJlcGFyYXRpb24gZm9yIGZ1cnRoZXIgdXNlIHdpdGhvdXQgdGhlIG92ZXJoZWFkCisgKiBvZiBmcmVlKClpbmcgYW5kIG1hbGxvYygpaW5nIGFnYWluLCB1c2Ugc3RyYnVmX3Jlc2V0KCkgaW5zdGVhZC4KKyAqLwordm9pZCBzdHJidWZfcmVsZWFzZShzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qKgorICogRGV0YWNoIHRoZSBzdHJpbmcgZnJvbSB0aGUgc3RyYnVmIGFuZCByZXR1cm5zIGl0OyB5b3Ugbm93IG93biB0aGUKKyAqIHN0b3JhZ2UgdGhlIHN0cmluZyBvY2N1cGllcyBhbmQgaXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSBmcm9tIHRoZW4gb24KKyAqIHRvIHJlbGVhc2UgaXQgd2l0aCBgZnJlZSgzKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBpdC4KKyAqCisgKiBUaGUgc3RyYnVmIHRoYXQgcHJldmlvdXNseSBoZWxkIHRoZSBzdHJpbmcgaXMgcmVzZXQgdG8gYFNUUkJVRl9JTklUYCBzbworICogaXQgY2FuIGJlIHJldXNlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK2NoYXIgKnN0cmJ1Zl9kZXRhY2goc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCAqc3opOworCisvKioKKyAqIEF0dGFjaCBhIHN0cmluZyB0byBhIGJ1ZmZlci4gWW91IHNob3VsZCBzcGVjaWZ5IHRoZSBzdHJpbmcgdG8gYXR0YWNoLAorICogdGhlIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYW5kIHRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeS4KKyAqIFRoZSBhbW91bnQgbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGUgc3RyaW5nIGxlbmd0aCwgYmVjYXVzZSB0aGUgc3RyaW5nIHlvdQorICogcGFzcyBpcyBzdXBwb3NlZCB0byBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4gIFRoaXMgc3RyaW5nIF9tdXN0XyBiZQorICogbWFsbG9jKCllZCwgYW5kIGFmdGVyIGF0dGFjaGluZywgdGhlIHBvaW50ZXIgY2Fubm90IGJlIHJlbGllZCB1cG9uCisgKiBhbnltb3JlLCBhbmQgbmVpdGhlciBiZSBmcmVlKClkIGRpcmVjdGx5LgorICovCit2b2lkIHN0cmJ1Zl9hdHRhY2goc3RydWN0IHN0cmJ1ZiAqc2IsIHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IG1lbSk7CisKKy8qKgorICogU3dhcCB0aGUgY29udGVudHMgb2YgdHdvIHN0cmluZyBidWZmZXJzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX3N3YXAoc3RydWN0IHN0cmJ1ZiAqYSwgc3RydWN0IHN0cmJ1ZiAqYikKK3sKKwlTV0FQKCphLCAqYik7Cit9CisKKworLyoqCisgKiBGdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoqCisgKiBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgYnV0IHVudXNlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmJ1Zl9hdmFpbChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlyZXR1cm4gc2ItPmFsbG9jID8gc2ItPmFsbG9jIC0gc2ItPmxlbiAtIDEgOiAwOworfQorCisvKioKKyAqIEVuc3VyZSB0aGF0IGF0IGxlYXN0IHRoaXMgYW1vdW50IG9mIHVudXNlZCBtZW1vcnkgaXMgYXZhaWxhYmxlIGFmdGVyCisgKiBgbGVuYC4gVGhpcyBpcyB1c2VkIHdoZW4geW91IGtub3cgYSB0eXBpY2FsIHNpemUgZm9yIHdoYXQgeW91IHdpbGwgYWRkCisgKiBhbmQgd2FudCB0byBhdm9pZCByZXBldGl0aXZlIGF1dG9tYXRpYyByZXNpemluZyBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIuCisgKiBUaGlzIGlzIG5ldmVyIGEgbmVlZGVkIG9wZXJhdGlvbiwgYnV0IGNhbiBiZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4KKyAqIHNvbWUgY2FzZXMuCisgKi8KK3ZvaWQgc3RyYnVmX2dyb3coc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBhbW91bnQpOworCisvKioKKyAqIFNldCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgdG8gYSBnaXZlbiB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzICpub3QqCisgKiBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBzbyB5b3Ugc2hvdWxkIG5vdCBwZXJmb3JtIGEgYHN0cmJ1Zl9zZXRsZW4oKWAgdG8gYQorICogbGVuZ3RoIHRoYXQgaXMgbGFyZ2VyIHRoYW4gYGxlbiArIHN0cmJ1Zl9hdmFpbCgpYC4gYHN0cmJ1Zl9zZXRsZW4oKWAgaXMKKyAqIGp1c3QgbWVhbnQgYXMgYSAncGxlYXNlIGZpeCBpbnZhcmlhbnRzIGZyb20gdGhpcyBzdHJidWYgSSBqdXN0IG1lc3NlZAorICogd2l0aCcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfc2V0bGVuKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPiAoc2ItPmFsbG9jID8gc2ItPmFsbG9jIC0gMSA6IDApKQorCQlkaWUoIkJVRzogc3RyYnVmX3NldGxlbigpIGJleW9uZCBidWZmZXIiKTsKKwlzYi0+bGVuID0gbGVuOworCWlmIChzYi0+YnVmICE9IHN0cmJ1Zl9zbG9wYnVmKQorCQlzYi0+YnVmW2xlbl0gPSAnXDAnOworCWVsc2UKKwkJYXNzZXJ0KCFzdHJidWZfc2xvcGJ1ZlswXSk7Cit9CisKKy8qKgorICogRW1wdHkgdGhlIGJ1ZmZlciBieSBzZXR0aW5nIHRoZSBzaXplIG9mIGl0IHRvIHplcm8uCisgKi8KKyNkZWZpbmUgc3RyYnVmX3Jlc2V0KHNiKSAgc3RyYnVmX3NldGxlbihzYiwgMCkKKworCisvKioKKyAqIEZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qKgorICogU3RyaXAgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgKGBsdHJpbWApLCBlbmQgKGBydHJpbWApLCBvciBib3RoIHNpZGUKKyAqIChgdHJpbWApIG9mIGEgc3RyaW5nLgorICovCit2b2lkIHN0cmJ1Zl90cmltKHN0cnVjdCBzdHJidWYgKnNiKTsKK3ZvaWQgc3RyYnVmX3J0cmltKHN0cnVjdCBzdHJidWYgKnNiKTsKK3ZvaWQgc3RyYnVmX2x0cmltKHN0cnVjdCBzdHJidWYgKnNiKTsKKworLyogU3RyaXAgdHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcnMgKi8KK3ZvaWQgc3RyYnVmX3RyaW1fdHJhaWxpbmdfZGlyX3NlcChzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qIFN0cmlwIHRyYWlsaW5nIExGIG9yIENSL0xGICovCit2b2lkIHN0cmJ1Zl90cmltX3RyYWlsaW5nX25ld2xpbmUoc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKioKKyAqIFJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJidWYgd2l0aCBhIHJlZW5jb2RlZCBmb3JtLiAgUmV0dXJucyAtMQorICogb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IHN0cmJ1Zl9yZWVuY29kZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOworCisvKioKKyAqIExvd2VyY2FzZSBlYWNoIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIHVzaW5nIGB0b2xvd2VyYC4KKyAqLwordm9pZCBzdHJidWZfdG9sb3dlcihzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qKgorICogQ29tcGFyZSB0d28gYnVmZmVycy4gUmV0dXJucyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIKKyAqIHRoYW4gemVybyBpZiB0aGUgZmlyc3QgYnVmZmVyIGlzIGZvdW5kLCByZXNwZWN0aXZlbHksIHRvIGJlIGxlc3MgdGhhbiwKKyAqIHRvIG1hdGNoLCBvciBiZSBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBidWZmZXIuCisgKi8KK2ludCBzdHJidWZfY21wKGNvbnN0IHN0cnVjdCBzdHJidWYgKmZpcnN0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzZWNvbmQpOworCisKKy8qKgorICogQWRkaW5nIGRhdGEgdG8gdGhlIGJ1ZmZlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIE5PVEU6IEFsbCBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgc2VjdGlvbiB3aWxsIGdyb3cgdGhlIGJ1ZmZlciBhcworICogbmVjZXNzYXJ5LiAgSWYgdGhleSBmYWlsIGZvciBzb21lIHJlYXNvbiBvdGhlciB0aGFuIG1lbW9yeSBzaG9ydGFnZSBhbmQgdGhlCisgKiBidWZmZXIgaGFkbid0IGJlZW4gYWxsb2NhdGVkIGJlZm9yZSAoaS5lLiB0aGUgYHN0cnVjdCBzdHJidWZgIHdhcyBzZXQgdG8KKyAqIGBTVFJCVUZfSU5JVGApLCB0aGVuIHRoZXkgd2lsbCBmcmVlKCkgaXQuCisgKi8KKworLyoqCisgKiBBZGQgYSBzaW5nbGUgY2hhcmFjdGVyIHRvIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfYWRkY2goc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBjKQoreworCWlmICghc3RyYnVmX2F2YWlsKHNiKSkKKwkJc3RyYnVmX2dyb3coc2IsIDEpOworCXNiLT5idWZbc2ItPmxlbisrXSA9IGM7CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKKy8qKgorICogQWRkIGEgY2hhcmFjdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHRoZSBidWZmZXIuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZGNoYXJzKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgYywgc2l6ZV90IG4pOworCisvKioKKyAqIEluc2VydCBkYXRhIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLiBUaGUgcmVtYWluaW5nIGNvbnRlbnRzCisgKiB3aWxsIGJlIHNoaWZ0ZWQsIG5vdCBvdmVyd3JpdHRlbi4KKyAqLwordm9pZCBzdHJidWZfaW5zZXJ0KHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLCBjb25zdCB2b2lkICosIHNpemVfdCk7CisKKy8qKgorICogSW5zZXJ0IGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLgorICogVGhlIHJlbWFpbmluZyBjb250ZW50cyB3aWxsIGJlIHNoaWZ0ZWQsIG5vdCBvdmVyd3JpdHRlbi4gIEl0J3MgYW4KKyAqIGlubGluZSBmdW5jdGlvbiB0byBhbGxvdyB0aGUgY29tcGlsZXIgdG8gcmVzb2x2ZSBzdHJsZW4oKSBjYWxscyBvbgorICogY29uc3RhbnRzIGF0IGNvbXBpbGUgdGltZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9pbnNlcnRzdHIoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBwb3MsCisJCQkJICAgIGNvbnN0IGNoYXIgKnMpCit7CisJc3RyYnVmX2luc2VydChzYiwgcG9zLCBzLCBzdHJsZW4ocykpOworfQorCisvKioKKyAqIEluc2VydCBkYXRhIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyIGdpdmluZyBhIHByaW50ZiBmb3JtYXQKKyAqIHN0cmluZy4gVGhlIGNvbnRlbnRzIHdpbGwgYmUgc2hpZnRlZCwgbm90IG92ZXJ3cml0dGVuLgorICovCit2b2lkIHN0cmJ1Zl92aW5zZXJ0ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgY29uc3QgY2hhciAqZm10LAorCQkgICAgIHZhX2xpc3QgYXApOworCit2b2lkIHN0cmJ1Zl9pbnNlcnRmKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qKgorICogUmVtb3ZlIGdpdmVuIGFtb3VudCBvZiBkYXRhIGZyb20gYSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLgorICovCit2b2lkIHN0cmJ1Zl9yZW1vdmUoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBwb3MsIHNpemVfdCBsZW4pOworCisvKioKKyAqIFJlbW92ZSB0aGUgYnl0ZXMgYmV0d2VlbiBgcG9zLi5wb3MrbGVuYCBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBnaXZlbgorICogZGF0YS4KKyAqLwordm9pZCBzdHJidWZfc3BsaWNlKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLCBzaXplX3QgbGVuLAorCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pOworCisvKioKKyAqIEFkZCBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgYnVmZmVyLiBFYWNoIGxpbmUgd2lsbCBiZSBwcmVwZW5kZWQKKyAqIGJ5IGEgY29tbWVudCBjaGFyYWN0ZXIgYW5kIGEgYmxhbmsuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOworCisKKy8qKgorICogQWRkIGRhdGEgb2YgZ2l2ZW4gbGVuZ3RoIHRvIHRoZSBidWZmZXIuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisKKy8qKgorICogQWRkIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBidWZmZXIuCisgKgorICogTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsICphbHdheXMqIGJlIGltcGxlbWVudGVkIGFzIGFuIGlubGluZSBvciBhIG1hY3JvCisgKiB1c2luZyBzdHJsZW4sIG1lYW5pbmcgdGhhdCB0aGlzIGlzIGVmZmljaWVudCB0byB3cml0ZSB0aGluZ3MgbGlrZToKKyAqCisgKiAgICAgc3RyYnVmX2FkZHN0cihzYiwgImltbWVkaWF0ZSBzdHJpbmciKTsKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfYWRkc3RyKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzKQoreworCXN0cmJ1Zl9hZGQoc2IsIHMsIHN0cmxlbihzKSk7Cit9CisKKy8qKgorICogQ29weSB0aGUgY29udGVudHMgb2YgYW5vdGhlciBidWZmZXIgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBvbmUuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZGJ1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IyKTsKKworLyoqCisgKiBKb2luIHRoZSBhcmd1bWVudHMgaW50byBhIGJ1ZmZlci4gYGRlbGltYCBpcyBwdXQgYmV0d2VlbiBldmVyeQorICogdHdvIGFyZ3VtZW50cy4KKyAqLworY29uc3QgY2hhciAqc3RyYnVmX2pvaW5fYXJndihzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBhcmdjLAorCQkJICAgICBjb25zdCBjaGFyICoqYXJndiwgY2hhciBkZWxpbSk7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBleHBhbmQgYSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcKKyAqIHBsYWNlaG9sZGVycy4gVG8gdGhhdCBlbmQsIGl0IHBhcnNlcyB0aGUgc3RyaW5nIGFuZCBjYWxscyB0aGUgc3BlY2lmaWVkCisgKiBmdW5jdGlvbiBmb3IgZXZlcnkgcGVyY2VudCBzaWduIGZvdW5kLgorICoKKyAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBnaXZlbiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgYCVgCisgKiBhbmQgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgc3RyYnVmLiAgSXQgaXMgZXhwZWN0ZWQgdG8gYWRkIHRoZSBleHBhbmRlZAorICogdmVyc2lvbiBvZiB0aGUgcGxhY2Vob2xkZXIgdG8gdGhlIHN0cmJ1ZiwgZS5nLiB0byBhZGQgYSBuZXdsaW5lCisgKiBjaGFyYWN0ZXIgaWYgdGhlIGxldHRlciBgbmAgYXBwZWFycyBhZnRlciBhIGAlYC4gIFRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiB0aGUgbGVuZ3RoIG9mIHRoZSBwbGFjZWhvbGRlciByZWNvZ25pemVkIGFuZCBgc3RyYnVmX2V4cGFuZCgpYCBza2lwcworICogb3ZlciBpdC4KKyAqCisgKiBUaGUgZm9ybWF0IGAlJWAgaXMgYXV0b21hdGljYWxseSBleHBhbmRlZCB0byBhIHNpbmdsZSBgJWAgYXMgYSBxdW90aW5nCisgKiBtZWNoYW5pc207IGNhbGxlcnMgZG8gbm90IG5lZWQgdG8gaGFuZGxlIHRoZSBgJWAgcGxhY2Vob2xkZXIgdGhlbXNlbHZlcywKKyAqIGFuZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgYmUgaW52b2tlZCBmb3IgdGhpcyBwbGFjZWhvbGRlci4KKyAqCisgKiBBbGwgb3RoZXIgY2hhcmFjdGVycyAobm9uLXBlcmNlbnQgYW5kIG5vdCBza2lwcGVkIG9uZXMpIGFyZSBjb3BpZWQKKyAqIHZlcmJhdGltIHRvIHRoZSBzdHJidWYuICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgemVybywgbWVhbmluZyB0aGF0IHRoZQorICogcGxhY2Vob2xkZXIgaXMgdW5rbm93biwgdGhlbiB0aGUgcGVyY2VudCBzaWduIGlzIGNvcGllZCwgdG9vLgorICoKKyAqIEluIG9yZGVyIHRvIGZhY2lsaXRhdGUgY2FjaGluZyBhbmQgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBnaXZlCisgKiBwYXJhbWV0ZXJzIHRvIHRoZSBjYWxsYmFjaywgYHN0cmJ1Zl9leHBhbmQoKWAgcGFzc2VzIGEgY29udGV4dCBwb2ludGVyLAorICogd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIHByb2dyYW1tZXIgb2YgdGhlIGNhbGxiYWNrIGFzIHNoZSBzZWVzIGZpdC4KKyAqLwordHlwZWRlZiBzaXplX3QgKCpleHBhbmRfZm5fdCkgKHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJICAgICAgIHZvaWQgKmNvbnRleHQpOwordm9pZCBzdHJidWZfZXhwYW5kKHN0cnVjdCBzdHJidWYgKnNiLAorCQkgICBjb25zdCBjaGFyICpmb3JtYXQsCisJCSAgIGV4cGFuZF9mbl90IGZuLAorCQkgICB2b2lkICpjb250ZXh0KTsKKworLyoqCisgKiBVc2VkIGFzIGNhbGxiYWNrIGZvciBgc3RyYnVmX2V4cGFuZGAgdG8gb25seSBleHBhbmQgbGl0ZXJhbHMKKyAqIChpLmUuICVuIGFuZCAleE5OKS4gVGhlIGNvbnRleHQgYXJndW1lbnQgaXMgaWdub3JlZC4KKyAqLworc2l6ZV90IHN0cmJ1Zl9leHBhbmRfbGl0ZXJhbF9jYihzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQljb25zdCBjaGFyICpwbGFjZWhvbGRlciwKKwkJCQl2b2lkICpjb250ZXh0KTsKKworLyoqCisgKiBVc2VkIGFzIGNhbGxiYWNrIGZvciBgc3RyYnVmX2V4cGFuZCgpYCwgZXhwZWN0cyBhbiBhcnJheSBvZgorICogc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSBhcyBjb250ZXh0LCBpLmUuIHBhaXJzIG9mCisgKiBwbGFjZWhvbGRlciBhbmQgcmVwbGFjZW1lbnQgc3RyaW5nLiAgVGhlIGFycmF5IG5lZWRzIHRvIGJlCisgKiB0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggcGxhY2Vob2xkZXIgc2V0IHRvIE5VTEwuCisgKi8KK3N0cnVjdCBzdHJidWZfZXhwYW5kX2RpY3RfZW50cnkgeworCWNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyOworCWNvbnN0IGNoYXIgKnZhbHVlOworfTsKK3NpemVfdCBzdHJidWZfZXhwYW5kX2RpY3RfY2Ioc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgICAgIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJICAgICB2b2lkICpjb250ZXh0KTsKKworLyoqCisgKiBBcHBlbmQgdGhlIGNvbnRlbnRzIG9mIG9uZSBzdHJidWYgdG8gYW5vdGhlciwgcXVvdGluZyBhbnkKKyAqIHBlcmNlbnQgc2lnbnMgKCIlIikgaW50byBkb3VibGUtcGVyY2VudHMgKCIlJSIpIGluIHRoZQorICogZGVzdGluYXRpb24uIFRoaXMgaXMgdXNlZnVsIGZvciBsaXRlcmFsIGRhdGEgdG8gYmUgZmVkIHRvIGVpdGhlcgorICogc3RyYnVmX2V4cGFuZCBvciB0byB0aGUgKnByaW50ZiBmYW1pbHkgb2YgZnVuY3Rpb25zLgorICovCit2b2lkIHN0cmJ1Zl9hZGRidWZfcGVyY2VudHF1b3RlKHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc3JjKTsKKworLyoqCisgKiBBcHBlbmQgdGhlIGNvbnRlbnRzIG9mIGEgc3RyaW5nIHRvIGEgc3RyYnVmLCBwZXJjZW50LWVuY29kaW5nIGFueSBjaGFyYWN0ZXJzCisgKiB0aGF0IGFyZSBuZWVkZWQgdG8gYmUgZW5jb2RlZCBmb3IgYSBVUkwuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZF9wZXJjZW50ZW5jb2RlKHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqc3JjKTsKKworLyoqCisgKiBBcHBlbmQgdGhlIGdpdmVuIGJ5dGUgc2l6ZSBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyAoaS5lLiAxMi4yMyBLaUIsCisgKiAzLjUwIE1pQikuCisgKi8KK3ZvaWQgc3RyYnVmX2h1bWFuaXNlX2J5dGVzKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgYnl0ZXMpOworCisvKioKKyAqIEFwcGVuZCB0aGUgZ2l2ZW4gYnl0ZSByYXRlIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIChpLmUuIDEyLjIzIEtpQi9zLAorICogMy41MCBNaUIvcykuCisgKi8KK3ZvaWQgc3RyYnVmX2h1bWFuaXNlX3JhdGUoc3RydWN0IHN0cmJ1ZiAqYnVmLCBvZmZfdCBieXRlcyk7CisKKy8qKgorICogQWRkIGEgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgYnVmZmVyLgorICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwyLDMpKSkKK3ZvaWQgc3RyYnVmX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyoqCisgKiBBZGQgYSBmb3JtYXR0ZWQgc3RyaW5nIHByZXBlbmRlZCBieSBhIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBhCisgKiBibGFuayB0byB0aGUgYnVmZmVyLgorICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQordm9pZCBzdHJidWZfY29tbWVudGVkX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMiwwKSkpCit2b2lkIHN0cmJ1Zl92YWRkZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKworLyoqCisgKiBBZGQgdGhlIHRpbWUgc3BlY2lmaWVkIGJ5IGB0bWAsIGFzIGZvcm1hdHRlZCBieSBgc3RyZnRpbWVgLgorICogYHR6X29mZnNldGAgaXMgaW4gZGVjaW1hbCBoaG1tIGZvcm1hdCwgZS5nLiAtNjAwIG1lYW5zIHNpeCBob3VycyB3ZXN0CisgKiBvZiBHcmVlbndpY2gsIGFuZCBpdCdzIHVzZWQgdG8gZXhwYW5kICV6IGludGVybmFsbHkuICBIb3dldmVyLCB0b2tlbnMKKyAqIHdpdGggbW9kaWZpZXJzIChlLmcuICVFeikgYXJlIHBhc3NlZCB0byBgc3RyZnRpbWVgLgorICogYHN1cHByZXNzX3R6X25hbWVgLCB3aGVuIHNldCwgZXhwYW5kcyAlWiBpbnRlcm5hbGx5IHRvIHRoZSBlbXB0eQorICogc3RyaW5nIHJhdGhlciB0aGFuIHBhc3NpbmcgaXQgdG8gYHN0cmZ0aW1lYC4KKyAqLwordm9pZCBzdHJidWZfYWRkZnRpbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwKKwkJICAgIGNvbnN0IHN0cnVjdCB0bSAqdG0sIGludCB0el9vZmZzZXQsCisJCSAgICBpbnQgc3VwcHJlc3NfdHpfbmFtZSk7CisKKy8qKgorICogUmVhZCBhIGdpdmVuIHNpemUgb2YgZGF0YSBmcm9tIGEgRklMRSogcG9pbnRlciB0byB0aGUgYnVmZmVyLgorICoKKyAqIE5PVEU6IFRoZSBidWZmZXIgaXMgcmV3b3VuZCBpZiB0aGUgcmVhZCBmYWlscy4gSWYgLTEgaXMgcmV0dXJuZWQsCisgKiBgZXJybm9gIG11c3QgYmUgY29uc3VsdGVkLCBsaWtlIHlvdSB3b3VsZCBkbyBmb3IgYHJlYWQoMylgLgorICogYHN0cmJ1Zl9yZWFkKClgLCBgc3RyYnVmX3JlYWRfZmlsZSgpYCBhbmQgYHN0cmJ1Zl9nZXRsaW5lXyooKWAKKyAqIGZhbWlseSBvZiBmdW5jdGlvbnMgaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgd2VsbC4KKyAqLworc2l6ZV90IHN0cmJ1Zl9mcmVhZChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHNpemUsIEZJTEUgKmZpbGUpOworCisvKioKKyAqIFJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLiBUaGUgdGhpcmQgYXJndW1lbnQgY2FuIGJlCisgKiB1c2VkIHRvIGdpdmUgYSBoaW50IGFib3V0IHRoZSBmaWxlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLiAgSWYgcmVhZCBmYWlscywKKyAqIGFueSBwYXJ0aWFsIHJlYWQgaXMgdW5kb25lLgorICovCitzc2l6ZV90IHN0cmJ1Zl9yZWFkKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQsIHNpemVfdCBoaW50KTsKKworLyoqCisgKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIGZpbGUgZGVzY3JpcHRvciBwYXJ0aWFsbHkgYnkgdXNpbmcgb25seSBvbmUKKyAqIGF0dGVtcHQgb2YgeHJlYWQuIFRoZSB0aGlyZCBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBnaXZlIGEgaGludCBhYm91dCB0aGUKKyAqIGZpbGUgc2l6ZSwgdG8gYXZvaWQgcmVhbGxvY3MuIFJldHVybnMgdGhlIG51bWJlciBvZiBuZXcgYnl0ZXMgYXBwZW5kZWQgdG8KKyAqIHRoZSBzYi4KKyAqLworc3NpemVfdCBzdHJidWZfcmVhZF9vbmNlKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQsIHNpemVfdCBoaW50KTsKKworLyoqCisgKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIGZpbGUsIHNwZWNpZmllZCBieSBpdHMgcGF0aC4gVGhlIHRoaXJkIGFyZ3VtZW50CisgKiBjYW4gYmUgdXNlZCB0byBnaXZlIGEgaGludCBhYm91dCB0aGUgZmlsZSBzaXplLCB0byBhdm9pZCByZWFsbG9jcy4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBzb21lIGVycm9yCisgKiBvY2N1cnJlZCB3aGlsZSBvcGVuaW5nIG9yIHJlYWRpbmcgdGhlIGZpbGUuCisgKi8KK3NzaXplX3Qgc3RyYnVmX3JlYWRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpOworCisvKioKKyAqIFJlYWQgdGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmssIHNwZWNpZmllZCBieSBpdHMgcGF0aC4gIFRoZSB0aGlyZAorICogYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gZ2l2ZSBhIGhpbnQgYWJvdXQgdGhlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorICovCitpbnQgc3RyYnVmX3JlYWRsaW5rKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgaGludCk7CisKKy8qKgorICogV3JpdGUgdGhlIHdob2xlIGNvbnRlbnQgb2YgdGhlIHN0cmJ1ZiB0byB0aGUgc3RyZWFtIG5vdCBzdG9wcGluZyBhdAorICogTlVMIGJ5dGVzLgorICovCitzc2l6ZV90IHN0cmJ1Zl93cml0ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqc3RyZWFtKTsKKworLyoqCisgKiBSZWFkIGEgbGluZSBmcm9tIGEgRklMRSAqLCBvdmVyd3JpdGluZyB0aGUgZXhpc3RpbmcgY29udGVudHMgb2YKKyAqIHRoZSBzdHJidWYuICBUaGUgc3RyYnVmX2dldGxpbmUqKCkgZmFtaWx5IG9mIGZ1bmN0aW9ucyBzaGFyZQorICogdGhpcyBzaWduYXR1cmUsIGJ1dCBoYXZlIGRpZmZlcmVudCBsaW5lIHRlcm1pbmF0aW9uIGNvbnZlbnRpb25zLgorICoKKyAqIFJlYWRpbmcgc3RvcHMgYWZ0ZXIgdGhlIHRlcm1pbmF0b3Igb3IgYXQgRU9GLiAgVGhlIHRlcm1pbmF0b3IKKyAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgYnVmZmVyIGJlZm9yZSByZXR1cm5pbmcuICBSZXR1cm5zIDAgdW5sZXNzCisgKiB0aGVyZSB3YXMgbm90aGluZyBsZWZ0IGJlZm9yZSBFT0YsIGluIHdoaWNoIGNhc2UgaXQgcmV0dXJucyBgRU9GYC4KKyAqLwordHlwZWRlZiBpbnQgKCpzdHJidWZfZ2V0bGluZV9mbikoc3RydWN0IHN0cmJ1ZiAqLCBGSUxFICopOworCisvKiBVc2VzIExGIGFzIHRoZSBsaW5lIHRlcm1pbmF0b3IgKi8KK2ludCBzdHJidWZfZ2V0bGluZV9sZihzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZnApOworCisvKiBVc2VzIE5VTCBhcyB0aGUgbGluZSB0ZXJtaW5hdG9yICovCitpbnQgc3RyYnVmX2dldGxpbmVfbnVsKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCk7CisKKy8qCisgKiBTaW1pbGFyIHRvIHN0cmJ1Zl9nZXRsaW5lX2xmKCksIGJ1dCBhZGRpdGlvbmFsbHkgdHJlYXRzIGEgQ1IgdGhhdAorICogY29tZXMgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBMRiBhcyBwYXJ0IG9mIHRoZSB0ZXJtaW5hdG9yLgorICogVGhpcyBpcyB0aGUgbW9zdCBmcmllbmRseSB2ZXJzaW9uIHRvIGJlIHVzZWQgdG8gcmVhZCAidGV4dCIgZmlsZXMKKyAqIHRoYXQgY2FuIGNvbWUgZnJvbSBwbGF0Zm9ybXMgd2hvc2UgbmF0aXZlIHRleHQgZm9ybWF0IGlzIENSTEYKKyAqIHRlcm1pbmF0ZWQuCisgKi8KK2ludCBzdHJidWZfZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZmlsZSk7CisKKworLyoqCisgKiBMaWtlIGBzdHJidWZfZ2V0bGluZWAsIGJ1dCBrZWVwcyB0aGUgdHJhaWxpbmcgdGVybWluYXRvciAoaWYKKyAqIGFueSkgaW4gdGhlIGJ1ZmZlci4KKyAqLworaW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZpbGUsIGludCB0ZXJtKTsKKworLyoqCisgKiBMaWtlIGBzdHJidWZfZ2V0d2hvbGVsaW5lYCwgYnV0IG9wZXJhdGVzIG9uIGEgZmlsZSBkZXNjcmlwdG9yLgorICogSXQgcmVhZHMgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUsIHNvIGl0IGlzIHZlcnkgc2xvdy4gIERvIG5vdAorICogdXNlIGl0IHVubGVzcyB5b3UgbmVlZCB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbiB0aGUgZmlsZQorICogZGVzY3JpcHRvci4KKyAqLworaW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCwgaW50IHRlcm0pOworCisvKioKKyAqIFNldCB0aGUgYnVmZmVyIHRvIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICovCitpbnQgc3RyYnVmX2dldGN3ZChzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qKgorICogQWRkIGEgcGF0aCB0byBhIGJ1ZmZlciwgY29udmVydGluZyBhIHJlbGF0aXZlIHBhdGggdG8gYW4KKyAqIGFic29sdXRlIG9uZSBpbiB0aGUgcHJvY2Vzcy4gIFN5bWJvbGljIGxpbmtzIGFyZSBub3QKKyAqIHJlc29sdmVkLgorICovCit2b2lkIHN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qKgorICogQ2Fub25pemUgYHBhdGhgIChtYWtlIGl0IGFic29sdXRlLCByZXNvbHZlIHN5bWxpbmtzLCByZW1vdmUgZXh0cmEKKyAqIHNsYXNoZXMpIGFuZCBhcHBlbmQgaXQgdG8gYHNiYC4gIERpZSB3aXRoIGFuIGluZm9ybWF0aXZlIGVycm9yCisgKiBtZXNzYWdlIGlmIHRoZXJlIGlzIGEgcHJvYmxlbS4KKyAqCisgKiBUaGUgZGlyZWN0b3J5IHBhcnQgb2YgYHBhdGhgIChpLmUuLCBldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0CisgKiBkaXJfc2VwKSBtdXN0IGRlbm90ZSBhIHZhbGlkLCBleGlzdGluZyBkaXJlY3RvcnksIGJ1dCB0aGUgbGFzdAorICogY29tcG9uZW50IG5lZWQgbm90IGV4aXN0LgorICoKKyAqIENhbGxlcnMgdGhhdCBkb24ndCBtaW5kIGxpbmtzIHNob3VsZCB1c2UgdGhlIG1vcmUgbGlnaHR3ZWlnaHQKKyAqIHN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgpIGluc3RlYWQuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZF9yZWFsX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgpOworCisKKy8qKgorICogTm9ybWFsaXplIGluLXBsYWNlIHRoZSBwYXRoIGNvbnRhaW5lZCBpbiB0aGUgc3RyYnVmLiBTZWUKKyAqIG5vcm1hbGl6ZV9wYXRoX2NvcHkoKSBmb3IgZGV0YWlscy4gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgY29udGVudHMgb2YgInNiIgorICogYXJlIGxlZnQgdW50b3VjaGVkLCBhbmQgLTEgaXMgcmV0dXJuZWQuCisgKi8KK2ludCBzdHJidWZfbm9ybWFsaXplX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKioKKyAqIFN0cmlwIHdoaXRlc3BhY2UgZnJvbSBhIGJ1ZmZlci4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgY29udHJvbHMgaWYKKyAqIGNvbW1lbnRzIGFyZSBjb25zaWRlcmVkIGNvbnRlbnRzIHRvIGJlIHJlbW92ZWQgb3Igbm90LgorICovCit2b2lkIHN0cmJ1Zl9zdHJpcHNwYWNlKHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IHNraXBfY29tbWVudHMpOworCitzdGF0aWMgaW5saW5lIGludCBzdHJidWZfc3RyaXBfc3VmZml4KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzdWZmaXgpCit7CisJaWYgKHN0cmlwX3N1ZmZpeF9tZW0oc2ItPmJ1ZiwgJnNiLT5sZW4sIHN1ZmZpeCkpIHsKKwkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbik7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTcGxpdCBzdHIgKG9mIGxlbmd0aCBzbGVuKSBhdCB0aGUgc3BlY2lmaWVkIHRlcm1pbmF0b3IgY2hhcmFjdGVyLgorICogUmV0dXJuIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cmJ1ZiBvYmplY3RzCisgKiBob2xkaW5nIHRoZSBzdWJzdHJpbmdzLiAgVGhlIHN1YnN0cmluZ3MgaW5jbHVkZSB0aGUgdGVybWluYXRvciwKKyAqIGV4Y2VwdCBmb3IgdGhlIGxhc3Qgc3Vic3RyaW5nLCB3aGljaCBtaWdodCBiZSB1bnRlcm1pbmF0ZWQgaWYgdGhlCisgKiBvcmlnaW5hbCBzdHJpbmcgZGlkIG5vdCBlbmQgd2l0aCBhIHRlcm1pbmF0b3IuICBJZiBtYXggaXMgcG9zaXRpdmUsCisgKiB0aGVuIHNwbGl0IHRoZSBzdHJpbmcgaW50byBhdCBtb3N0IG1heCBzdWJzdHJpbmdzICh3aXRoIHRoZSBsYXN0CisgKiBzdWJzdHJpbmcgY29udGFpbmluZyBldmVyeXRoaW5nIGZvbGxvd2luZyB0aGUgKG1heC0xKXRoIHRlcm1pbmF0b3IKKyAqIGNoYXJhY3RlcikuCisgKgorICogVGhlIG1vc3QgZ2VuZXJpYyBmb3JtIGlzIGBzdHJidWZfc3BsaXRfYnVmYCwgd2hpY2ggdGFrZXMgYW4gYXJiaXRyYXJ5CisgKiBwb2ludGVyL2xlbiBidWZmZXIuIFRoZSBgX3N0cmAgdmFyaWFudCB0YWtlcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZywKKyAqIHRoZSBgX21heGAgdmFyaWFudCB0YWtlcyBhIHN0cmJ1ZiwgYW5kIGp1c3QgYHN0cmJ1Zl9zcGxpdGAgaXMgYSBjb252ZW5pZW5jZQorICogd3JhcHBlciB0byBkcm9wIHRoZSBgbWF4YCBwYXJhbWV0ZXIuCisgKgorICogRm9yIGxpZ2h0ZXItd2VpZ2h0IGFsdGVybmF0aXZlcywgc2VlIHN0cmluZ19saXN0X3NwbGl0KCkgYW5kCisgKiBzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZSgpLgorICovCitzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0X2J1Zihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sCisJCQkJIGludCB0ZXJtaW5hdG9yLCBpbnQgbWF4KTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0X3N0cihjb25zdCBjaGFyICpzdHIsCisJCQkJCSAgICAgICBpbnQgdGVybWluYXRvciwgaW50IG1heCkKK3sKKwlyZXR1cm4gc3RyYnVmX3NwbGl0X2J1ZihzdHIsIHN0cmxlbihzdHIpLCB0ZXJtaW5hdG9yLCBtYXgpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdHJidWYgKipzdHJidWZfc3BsaXRfbWF4KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCQkgICAgICAgaW50IHRlcm1pbmF0b3IsIGludCBtYXgpCit7CisJcmV0dXJuIHN0cmJ1Zl9zcGxpdF9idWYoc2ItPmJ1Ziwgc2ItPmxlbiwgdGVybWluYXRvciwgbWF4KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0KGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiLAorCQkJCQkgICBpbnQgdGVybWluYXRvcikKK3sKKwlyZXR1cm4gc3RyYnVmX3NwbGl0X21heChzYiwgdGVybWluYXRvciwgMCk7Cit9CisKKy8qCisgKiBBZGRzIGFsbCBzdHJpbmdzIG9mIGEgc3RyaW5nIGxpc3QgdG8gdGhlIHN0cmJ1Ziwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgorICogc2VwYXJhdG9yLiAgRm9yIGV4YW1wbGUsIGlmIHNlcCBpcworICogICAnLCAnCisgKiBhbmQgc2xpc3QgY29udGFpbnMKKyAqICAgWydlbGVtZW50MScsICdlbGVtZW50MicsIC4uLiwgJ2VsZW1lbnROJ10sCisgKiB0aGVuIHdyaXRlOgorICogICAnZWxlbWVudDEsIGVsZW1lbnQyLCAuLi4sIGVsZW1lbnROJworICogdG8gc3RyLiAgSWYgb25seSBvbmUgZWxlbWVudCwganVzdCB3cml0ZSAiZWxlbWVudDEiIHRvIHN0ci4KKyAqLwordm9pZCBzdHJidWZfYWRkX3NlcGFyYXRlZF9zdHJpbmdfbGlzdChzdHJ1Y3Qgc3RyYnVmICpzdHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqc2VwLAorCQkJCSAgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqc2xpc3QpOworCisvKioKKyAqIEZyZWUgYSBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBzdHJidWZzIChmb3IgZXhhbXBsZSwgdGhlIHJldHVybgorICogdmFsdWVzIG9mIHRoZSBzdHJidWZfc3BsaXQqKCkgZnVuY3Rpb25zKS4KKyAqLwordm9pZCBzdHJidWZfbGlzdF9mcmVlKHN0cnVjdCBzdHJidWYgKipsaXN0KTsKKworLyoqCisgKiBBZGQgdGhlIGFiYnJldmlhdGlvbiwgYXMgZ2VuZXJhdGVkIGJ5IGZpbmRfdW5pcXVlX2FiYnJldiwgb2YgYHNoYTFgIHRvCisgKiB0aGUgc3RyYnVmIGBzYmAuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGFiYnJldl9sZW4pOworCisvKioKKyAqIExhdW5jaCB0aGUgdXNlciBwcmVmZXJyZWQgZWRpdG9yIHRvIGVkaXQgYSBmaWxlIGFuZCBmaWxsIHRoZSBidWZmZXIKKyAqIHdpdGggdGhlIGZpbGUncyBjb250ZW50cyB1cG9uIHRoZSB1c2VyIGNvbXBsZXRpbmcgdGhlaXIgZWRpdGluZy4gVGhlCisgKiB0aGlyZCBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGVudmlyb25tZW50IHdoaWNoIHRoZSBlZGl0b3IgaXMKKyAqIHJ1biBpbi4gSWYgdGhlIGJ1ZmZlciBpcyBOVUxMIHRoZSBlZGl0b3IgaXMgbGF1bmNoZWQgYXMgdXN1YWwgYnV0IHRoZQorICogZmlsZSdzIGNvbnRlbnRzIGFyZSBub3QgcmVhZCBpbnRvIHRoZSBidWZmZXIgdXBvbiBjb21wbGV0aW9uLgorICovCitpbnQgbGF1bmNoX2VkaXRvcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsCisJCSAgY29uc3QgY2hhciAqY29uc3QgKmVudik7CisKK2ludCBsYXVuY2hfc2VxdWVuY2VfZWRpdG9yKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwKKwkJCSAgIGNvbnN0IGNoYXIgKmNvbnN0ICplbnYpOworCisvKgorICogSW4gY29udHJhc3QgdG8gYGxhdW5jaF9lZGl0b3IoKWAsIHRoaXMgZnVuY3Rpb24gd3JpdGVzIG91dCB0aGUgY29udGVudHMKKyAqIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBmaXJzdCwgdGhlbiBjbGVhcnMgdGhlIGBidWZmZXJgLCB0aGVuIGxhdW5jaGVzCisgKiB0aGUgZWRpdG9yIGFuZCByZWFkcyBiYWNrIGluIHRoZSBmaWxlIGNvbnRlbnRzIGludG8gdGhlIGBidWZmZXJgLgorICogRmluYWxseSwgaXQgZGVsZXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUuCisgKgorICogSWYgYHBhdGhgIGlzIHJlbGF0aXZlLCBpdCByZWZlcnMgdG8gYSBmaWxlIGluIHRoZSBgLmdpdGAgZGlyZWN0b3J5LgorICovCitpbnQgc3RyYnVmX2VkaXRfaW50ZXJhY3RpdmVseShzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICBjb25zdCBjaGFyICpjb25zdCAqZW52KTsKKwordm9pZCBzdHJidWZfYWRkX2xpbmVzKHN0cnVjdCBzdHJidWYgKnNiLAorCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IHNpemUpOworCisvKioKKyAqIEFwcGVuZCBzIHRvIHNiLCB3aXRoIHRoZSBjaGFyYWN0ZXJzICc8JywgJz4nLCAnJicgYW5kICciJyBjb252ZXJ0ZWQKKyAqIGludG8gWE1MIGVudGl0aWVzLgorICovCit2b2lkIHN0cmJ1Zl9hZGRzdHJfeG1sX3F1b3RlZChzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnMpOworCisvKioKKyAqICJDb21wbGV0ZSIgdGhlIGNvbnRlbnRzIG9mIGBzYmAgYnkgZW5zdXJpbmcgdGhhdCBlaXRoZXIgaXQgZW5kcyB3aXRoIHRoZQorICogY2hhcmFjdGVyIGB0ZXJtYCwgb3IgaXQgaXMgZW1wdHkuICBUaGlzIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwKKyAqIHRvIGVuc3VyZSB0aGF0IHRleHQgZW5kcyB3aXRoIGEgbmV3bGluZSwgYnV0IHdpdGhvdXQgY3JlYXRpbmcgYW4gZW1wdHkKKyAqIGJsYW5rIGxpbmUgaWYgdGhlcmUgaXMgbm8gY29udGVudCBpbiB0aGUgZmlyc3QgcGxhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfY29tcGxldGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNoYXIgdGVybSkKK3sKKwlpZiAoc2ItPmxlbiAmJiBzYi0+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+Iik7CisJaWYgKChsaW5lID0gcGFja2V0X3JlYWRfbGluZShwcm9jZXNzLT5vdXQsIE5VTEwpKSkKKwkJcmV0dXJuIGVycm9yKCJVbmV4cGVjdGVkIGxpbmUgJyVzJywgZXhwZWN0ZWQgZmx1c2giLCBsaW5lKTsKKworCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB2ZXJzaW9uIHJlY2VpdmVkIGlzIHN1cHBvcnRlZCAqLworCWZvciAoaSA9IDA7IHZlcnNpb25zW2ldOyBpKyspIHsKKwkJaWYgKHZlcnNpb25zW2ldID09ICpjaG9zZW5fdmVyc2lvbikKKwkJCWJyZWFrOworCX0KKwlpZiAoIXZlcnNpb25zW2ldKQorCQlyZXR1cm4gZXJyb3IoIlZlcnNpb24gJWQgbm90IHN1cHBvcnRlZCIsICpjaG9zZW5fdmVyc2lvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kc2hha2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpwcm9jZXNzLAorCQkJCSAgc3RydWN0IHN1YnByb2Nlc3NfY2FwYWJpbGl0eSAqY2FwYWJpbGl0aWVzLAorCQkJCSAgdW5zaWduZWQgaW50ICpzdXBwb3J0ZWRfY2FwYWJpbGl0aWVzKQoreworCWludCBpOworCWNoYXIgKmxpbmU7CisKKwlmb3IgKGkgPSAwOyBjYXBhYmlsaXRpZXNbaV0ubmFtZTsgaSsrKSB7CisJCWlmIChwYWNrZXRfd3JpdGVfZm10X2dlbnRseShwcm9jZXNzLT5pbiwgImNhcGFiaWxpdHk9JXNcbiIsCisJCQkJCSAgICBjYXBhYmlsaXRpZXNbaV0ubmFtZSkpCisJCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCB3cml0ZSByZXF1ZXN0ZWQgY2FwYWJpbGl0eSIpOworCX0KKwlpZiAocGFja2V0X2ZsdXNoX2dlbnRseShwcm9jZXNzLT5pbikpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHdyaXRlIGZsdXNoIHBhY2tldCIpOworCisJd2hpbGUgKChsaW5lID0gcGFja2V0X3JlYWRfbGluZShwcm9jZXNzLT5vdXQsIE5VTEwpKSkgeworCQljb25zdCBjaGFyICpwOworCQlpZiAoIXNraXBfcHJlZml4KGxpbmUsICJjYXBhYmlsaXR5PSIsICZwKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7CisJCSAgICAgY2FwYWJpbGl0aWVzW2ldLm5hbWUgJiYgc3RyY21wKHAsIGNhcGFiaWxpdGllc1tpXS5uYW1lKTsKKwkJICAgICBpKyspCisJCQk7CisJCWlmIChjYXBhYmlsaXRpZXNbaV0ubmFtZSkgeworCQkJaWYgKHN1cHBvcnRlZF9jYXBhYmlsaXRpZXMpCisJCQkJKnN1cHBvcnRlZF9jYXBhYmlsaXRpZXMgfD0gY2FwYWJpbGl0aWVzW2ldLmZsYWc7CisJCX0gZWxzZSB7CisJCQlkaWUoInN1YnByb2Nlc3MgJyVzJyByZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgY2FwYWJpbGl0eSAnJXMnIiwKKwkJCSAgICBwcm9jZXNzLT5hcmd2WzBdLCBwKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgc3VicHJvY2Vzc19oYW5kc2hha2Uoc3RydWN0IHN1YnByb2Nlc3NfZW50cnkgKmVudHJ5LAorCQkJIGNvbnN0IGNoYXIgKndlbGNvbWVfcHJlZml4LAorCQkJIGludCAqdmVyc2lvbnMsCisJCQkgaW50ICpjaG9zZW5fdmVyc2lvbiwKKwkJCSBzdHJ1Y3Qgc3VicHJvY2Vzc19jYXBhYmlsaXR5ICpjYXBhYmlsaXRpZXMsCisJCQkgdW5zaWduZWQgaW50ICpzdXBwb3J0ZWRfY2FwYWJpbGl0aWVzKQoreworCWludCByZXR2YWw7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb2Nlc3MgPSAmZW50cnktPnByb2Nlc3M7CisKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJcmV0dmFsID0gaGFuZHNoYWtlX3ZlcnNpb24ocHJvY2Vzcywgd2VsY29tZV9wcmVmaXgsIHZlcnNpb25zLAorCQkJCSAgIGNob3Nlbl92ZXJzaW9uKSB8fAorCQkgaGFuZHNoYWtlX2NhcGFiaWxpdGllcyhwcm9jZXNzLCBjYXBhYmlsaXRpZXMsCisJCQkJCXN1cHBvcnRlZF9jYXBhYmlsaXRpZXMpOworCisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9zdWItcHJvY2Vzcy5oIGIvc3ViLXByb2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVmMjFmCi0tLSAvZGV2L251bGwKKysrIGIvc3ViLXByb2Nlc3MuaApAQCAtMCwwICsxLDk4IEBACisjaWZuZGVmIFNVQlBST0NFU1NfSAorI2RlZmluZSBTVUJQUk9DRVNTX0gKKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisvKgorICogVGhlIHN1Yi1wcm9jZXNzIEFQSSBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gYmFja2dyb3VuZCBzdWItcHJvY2Vzc2VzCisgKiBmb3IgdGhlIGVudGlyZSBsaWZldGltZSBvZiBhIEdpdCBpbnZvY2F0aW9uLiBJZiBHaXQgbmVlZHMgdG8gY29tbXVuaWNhdGUKKyAqIHdpdGggYW4gZXh0ZXJuYWwgcHJvY2VzcyBtdWx0aXBsZSB0aW1lcywgdGhlbiB0aGlzIGNhbiByZWR1Y2VzIHRoZSBwcm9jZXNzCisgKiBpbnZvY2F0aW9uIG92ZXJoZWFkLiBHaXQgYW5kIHRoZSBzdWItcHJvY2VzcyBjb21tdW5pY2F0ZSB0aHJvdWdoIHN0ZGluIGFuZAorICogc3Rkb3V0LgorICoKKyAqIFRoZSBzdWItcHJvY2Vzc2VzIGFyZSBrZXB0IGluIGEgaGFzaG1hcCBieSBjb21tYW5kIG5hbWUgYW5kIGxvb2tlZCB1cAorICogdmlhIHRoZSBzdWJwcm9jZXNzX2ZpbmRfZW50cnkgZnVuY3Rpb24uICBJZiBhbiBleGlzdGluZyBpbnN0YW5jZSBjYW4gbm90CisgKiBiZSBmb3VuZCB0aGVuIGEgbmV3IHByb2Nlc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHN0YXJ0ZWQuICBXaGVuIHRoZQorICogcGFyZW50IGdpdCBjb21tYW5kIHRlcm1pbmF0ZXMsIGFsbCBzdWItcHJvY2Vzc2VzIGFyZSBhbHNvIHRlcm1pbmF0ZWQuCisgKgorICogVGhpcyBBUEkgaXMgYmFzZWQgb24gdGhlIHJ1bi1jb21tYW5kIEFQSS4KKyAqLworCisgLyogZGF0YSBzdHJ1Y3R1cmVzICovCisKKy8qIE1lbWJlcnMgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4gKi8KK3N0cnVjdCBzdWJwcm9jZXNzX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJY29uc3QgY2hhciAqY21kOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2Nlc3M7Cit9OworCitzdHJ1Y3Qgc3VicHJvY2Vzc19jYXBhYmlsaXR5IHsKKwljb25zdCBjaGFyICpuYW1lOworCisJLyoKKwkgKiBzdWJwcm9jZXNzX2hhbmRzaGFrZSB3aWxsICJ8PSIgdGhpcyB2YWx1ZSB0byBzdXBwb3J0ZWRfY2FwYWJpbGl0aWVzCisJICogaWYgdGhlIHNlcnZlciByZXBvcnRzIHRoYXQgaXQgc3VwcG9ydHMgdGhpcyBjYXBhYmlsaXR5LgorCSAqLworCXVuc2lnbmVkIGludCBmbGFnOworfTsKKworLyogc3VicHJvY2VzcyBmdW5jdGlvbnMgKi8KKworLyogRnVuY3Rpb24gdG8gdGVzdCB0d28gc3VicHJvY2VzcyBoYXNobWFwIGVudHJpZXMgZm9yIGVxdWFsaXR5LiAqLworaW50IGNtZDJwcm9jZXNzX2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCSAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplbnRyeV9vcl9rZXksCisJCSAgICBjb25zdCB2b2lkICp1bnVzZWRfa2V5ZGF0YSk7CisKKy8qCisgKiBVc2VyLXN1cHBsaWVkIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIHN1Yi1wcm9jZXNzLiAgVGhpcyBpcworICogdHlwaWNhbGx5IHVzZWQgdG8gbmVnb3RpYXRlIHRoZSBpbnRlcmZhY2UgdmVyc2lvbiBhbmQgY2FwYWJpbGl0aWVzLgorICovCit0eXBlZGVmIGludCgqc3VicHJvY2Vzc19zdGFydF9mbikoc3RydWN0IHN1YnByb2Nlc3NfZW50cnkgKmVudHJ5KTsKKworLyogU3RhcnQgYSBzdWJwcm9jZXNzIGFuZCBhZGQgaXQgdG8gdGhlIHN1YnByb2Nlc3MgaGFzaG1hcC4gKi8KK2ludCBzdWJwcm9jZXNzX3N0YXJ0KHN0cnVjdCBoYXNobWFwICpoYXNobWFwLCBzdHJ1Y3Qgc3VicHJvY2Vzc19lbnRyeSAqZW50cnksIGNvbnN0IGNoYXIgKmNtZCwKKwkJc3VicHJvY2Vzc19zdGFydF9mbiBzdGFydGZuKTsKKworLyogS2lsbCBhIHN1YnByb2Nlc3MgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBzdWJwcm9jZXNzIGhhc2htYXAuICovCit2b2lkIHN1YnByb2Nlc3Nfc3RvcChzdHJ1Y3QgaGFzaG1hcCAqaGFzaG1hcCwgc3RydWN0IHN1YnByb2Nlc3NfZW50cnkgKmVudHJ5KTsKKworLyogRmluZCBhIHN1YnByb2Nlc3MgaW4gdGhlIHN1YnByb2Nlc3MgaGFzaG1hcC4gKi8KK3N0cnVjdCBzdWJwcm9jZXNzX2VudHJ5ICpzdWJwcm9jZXNzX2ZpbmRfZW50cnkoc3RydWN0IGhhc2htYXAgKmhhc2htYXAsIGNvbnN0IGNoYXIgKmNtZCk7CisKKy8qIHN1YnByb2Nlc3MgaGVscGVyIGZ1bmN0aW9ucyAqLworCisvKiBHZXQgdGhlIHVuZGVybHlpbmcgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYCBmcm9tIGEgc3VicHJvY2Vzcy4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnN1YnByb2Nlc3NfZ2V0X2NoaWxkX3Byb2Nlc3MoCisJCXN0cnVjdCBzdWJwcm9jZXNzX2VudHJ5ICplbnRyeSkKK3sKKwlyZXR1cm4gJmVudHJ5LT5wcm9jZXNzOworfQorCisvKgorICogUGVyZm9ybSB0aGUgdmVyc2lvbiBhbmQgY2FwYWJpbGl0eSBuZWdvdGlhdGlvbiBhcyBkZXNjcmliZWQgaW4gdGhlCisgKiAiSGFuZHNoYWtlIiBzZWN0aW9uIG9mIGxvbmctcnVubmluZy1wcm9jZXNzLXByb3RvY29sLnR4dCB1c2luZyB0aGUKKyAqIGdpdmVuIHJlcXVlc3RlZCB2ZXJzaW9ucyBhbmQgY2FwYWJpbGl0aWVzLiBUaGUgInZlcnNpb25zIiBhbmQgImNhcGFiaWxpdGllcyIKKyAqIHBhcmFtZXRlcnMgYXJlIGFycmF5cyB0ZXJtaW5hdGVkIGJ5IGEgMCBvciBibGFuayBzdHJ1Y3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIHdoZW4gYSBzdWJwcm9jZXNzIGlzIHN0YXJ0ZWQgKGFzIHBhcnQgb2YKKyAqIHRoZSAic3RhcnRmbiIgcGFzc2VkIHRvIHN1YnByb2Nlc3Nfc3RhcnQpLgorICovCitpbnQgc3VicHJvY2Vzc19oYW5kc2hha2Uoc3RydWN0IHN1YnByb2Nlc3NfZW50cnkgKmVudHJ5LAorCQkJIGNvbnN0IGNoYXIgKndlbGNvbWVfcHJlZml4LAorCQkJIGludCAqdmVyc2lvbnMsCisJCQkgaW50ICpjaG9zZW5fdmVyc2lvbiwKKwkJCSBzdHJ1Y3Qgc3VicHJvY2Vzc19jYXBhYmlsaXR5ICpjYXBhYmlsaXRpZXMsCisJCQkgdW5zaWduZWQgaW50ICpzdXBwb3J0ZWRfY2FwYWJpbGl0aWVzKTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IHdpbGwgcmVhZCBwYWNrZXRzIGxvb2tpbmcgZm9yICJzdGF0dXM9PGZvbz4iCisgKiBrZXkvdmFsdWUgcGFpcnMgYW5kIHJldHVybiB0aGUgdmFsdWUgZnJvbSB0aGUgbGFzdCAic3RhdHVzIiBwYWNrZXQKKyAqLworCitpbnQgc3VicHJvY2Vzc19yZWFkX3N0YXR1cyhpbnQgZmQsIHN0cnVjdCBzdHJidWYgKnN0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLWNvbmZpZy5jIGIvc3VibW9kdWxlLWNvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMWM5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9zdWJtb2R1bGUtY29uZmlnLmMKQEAgLTAsMCArMSw4MTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisvKgorICogc3VibW9kdWxlIGNhY2hlIGxvb2t1cCBzdHJ1Y3R1cmUKKyAqIFRoZXJlIGlzIG9uZSBzaGFyZWQgc2V0IG9mICdzdHJ1Y3Qgc3VibW9kdWxlJyBlbnRyaWVzIHdoaWNoIGNhbiBiZQorICogbG9va2VkIHVwIGJ5IHRoZWlyIHNoYTEgYmxvYiBpZCBvZiB0aGUgLmdpdG1vZHVsZXMgZmlsZSBhbmQgZWl0aGVyCisgKiB1c2luZyBwYXRoIG9yIG5hbWUgYXMga2V5LgorICogZm9yX3BhdGggc3RvcmVzIHN1Ym1vZHVsZSBlbnRyaWVzIHdpdGggcGF0aCBhcyBrZXkKKyAqIGZvcl9uYW1lIHN0b3JlcyBzdWJtb2R1bGUgZW50cmllcyB3aXRoIG5hbWUgYXMga2V5CisgKi8KK3N0cnVjdCBzdWJtb2R1bGVfY2FjaGUgeworCXN0cnVjdCBoYXNobWFwIGZvcl9wYXRoOworCXN0cnVjdCBoYXNobWFwIGZvcl9uYW1lOworCXVuc2lnbmVkIGluaXRpYWxpemVkOjE7CisJdW5zaWduZWQgZ2l0bW9kdWxlc19yZWFkOjE7Cit9OworCisvKgorICogdGhpbiB3cmFwcGVyIHN0cnVjdCBuZWVkZWQgdG8gaW5zZXJ0ICdzdHJ1Y3Qgc3VibW9kdWxlJyBlbnRyaWVzIHRvCisgKiB0aGUgaGFzaG1hcAorICovCitzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IHN1Ym1vZHVsZSAqY29uZmlnOworfTsKKworZW51bSBsb29rdXBfdHlwZSB7CisJbG9va3VwX25hbWUsCisJbG9va3VwX3BhdGgKK307CisKK3N0YXRpYyBpbnQgY29uZmlnX3BhdGhfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgIGNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LCBlbnQpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHN0cmNtcChhLT5jb25maWctPnBhdGgsIGItPmNvbmZpZy0+cGF0aCkgfHwKKwkgICAgICAgIW9pZGVxKCZhLT5jb25maWctPmdpdG1vZHVsZXNfb2lkLCAmYi0+Y29uZmlnLT5naXRtb2R1bGVzX29pZCk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX25hbWVfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICAgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmVudHJ5X29yX2tleSwKKwkJCSAgIGNvbnN0IHZvaWQgKnVudXNlZF9rZXlkYXRhKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmEsICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihlcHRyLCBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LCBlbnQpOworCWIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5LCBlbnQpOworCisJcmV0dXJuIHN0cmNtcChhLT5jb25maWctPm5hbWUsIGItPmNvbmZpZy0+bmFtZSkgfHwKKwkgICAgICAgIW9pZGVxKCZhLT5jb25maWctPmdpdG1vZHVsZXNfb2lkLCAmYi0+Y29uZmlnLT5naXRtb2R1bGVzX29pZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpzdWJtb2R1bGVfY2FjaGVfYWxsb2Modm9pZCkKK3sKKwlyZXR1cm4geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSkpOworfQorCitzdGF0aWMgdm9pZCBzdWJtb2R1bGVfY2FjaGVfaW5pdChzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSkKK3sKKwloYXNobWFwX2luaXQoJmNhY2hlLT5mb3JfcGF0aCwgY29uZmlnX3BhdGhfY21wLCBOVUxMLCAwKTsKKwloYXNobWFwX2luaXQoJmNhY2hlLT5mb3JfbmFtZSwgY29uZmlnX25hbWVfY21wLCBOVUxMLCAwKTsKKwljYWNoZS0+aW5pdGlhbGl6ZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBmcmVlX29uZV9jb25maWcoc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZW50cnkpCit7CisJZnJlZSgodm9pZCAqKSBlbnRyeS0+Y29uZmlnLT5wYXRoKTsKKwlmcmVlKCh2b2lkICopIGVudHJ5LT5jb25maWctPm5hbWUpOworCWZyZWUoKHZvaWQgKikgZW50cnktPmNvbmZpZy0+YnJhbmNoKTsKKwlmcmVlKCh2b2lkICopIGVudHJ5LT5jb25maWctPnVwZGF0ZV9zdHJhdGVneS5jb21tYW5kKTsKKwlmcmVlKGVudHJ5LT5jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBzdWJtb2R1bGVfY2FjaGVfY2xlYXIoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUpCit7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmVudHJ5OworCisJaWYgKCFjYWNoZS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCS8qCisJICogV2UgaXRlcmF0ZSBvdmVyIHRoZSBuYW1lIGhhc2ggaGVyZSB0byBiZSBzeW1tZXRyaWMgd2l0aCB0aGUKKwkgKiBhbGxvY2F0aW9uIG9mIHN0cnVjdCBzdWJtb2R1bGUgZW50cmllcy4gRWFjaCBpcyBhbGxvY2F0ZWQgYnkKKwkgKiB0aGVpciAuZ2l0bW9kdWxlcyBibG9iIHNoYTEgYW5kIHN1Ym1vZHVsZSBuYW1lLgorCSAqLworCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJmNhY2hlLT5mb3JfbmFtZSwgJml0ZXIsIGVudHJ5LAorCQkJCWVudCAvKiBtZW1iZXIgbmFtZSAqLykKKwkJZnJlZV9vbmVfY29uZmlnKGVudHJ5KTsKKworCWhhc2htYXBfZnJlZV9lbnRyaWVzKCZjYWNoZS0+Zm9yX3BhdGgsIHN0cnVjdCBzdWJtb2R1bGVfZW50cnksIGVudCk7CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJmNhY2hlLT5mb3JfbmFtZSwgc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSwgZW50KTsKKwljYWNoZS0+aW5pdGlhbGl6ZWQgPSAwOworCWNhY2hlLT5naXRtb2R1bGVzX3JlYWQgPSAwOworfQorCit2b2lkIHN1Ym1vZHVsZV9jYWNoZV9mcmVlKHN0cnVjdCBzdWJtb2R1bGVfY2FjaGUgKmNhY2hlKQoreworCXN1Ym1vZHVsZV9jYWNoZV9jbGVhcihjYWNoZSk7CisJZnJlZShjYWNoZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9vaWRfc3RyaW5nKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICAgY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiBtZW1oYXNoKG9pZC0+aGFzaCwgdGhlX2hhc2hfYWxnby0+cmF3c3opICsgc3RyaGFzaChzdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBjYWNoZV9wdXRfcGF0aChzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJCSAgIHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfb2lkX3N0cmluZygmc3VibW9kdWxlLT5naXRtb2R1bGVzX29pZCwKKwkJCQkJICAgIHN1Ym1vZHVsZS0+cGF0aCk7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZSA9IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnQsIGhhc2gpOworCWUtPmNvbmZpZyA9IHN1Ym1vZHVsZTsKKwloYXNobWFwX3B1dCgmY2FjaGUtPmZvcl9wYXRoLCAmZS0+ZW50KTsKK30KKworc3RhdGljIHZvaWQgY2FjaGVfcmVtb3ZlX3BhdGgoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUsCisJCQkgICAgICBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGUpCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX29pZF9zdHJpbmcoJnN1Ym1vZHVsZS0+Z2l0bW9kdWxlc19vaWQsCisJCQkJCSAgICBzdWJtb2R1bGUtPnBhdGgpOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkgZTsKKwlzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5ICpyZW1vdmVkOworCWhhc2htYXBfZW50cnlfaW5pdCgmZS5lbnQsIGhhc2gpOworCWUuY29uZmlnID0gc3VibW9kdWxlOworCXJlbW92ZWQgPSBoYXNobWFwX3JlbW92ZV9lbnRyeSgmY2FjaGUtPmZvcl9wYXRoLCAmZSwgZW50LCBOVUxMKTsKKwlmcmVlKHJlbW92ZWQpOworfQorCitzdGF0aWMgdm9pZCBjYWNoZV9hZGQoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUsCisJCSAgICAgIHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfb2lkX3N0cmluZygmc3VibW9kdWxlLT5naXRtb2R1bGVzX29pZCwKKwkJCQkJICAgIHN1Ym1vZHVsZS0+bmFtZSk7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZSA9IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLT5lbnQsIGhhc2gpOworCWUtPmNvbmZpZyA9IHN1Ym1vZHVsZTsKKwloYXNobWFwX2FkZCgmY2FjaGUtPmZvcl9uYW1lLCAmZS0+ZW50KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKmNhY2hlX2xvb2t1cF9wYXRoKHN0cnVjdCBzdWJtb2R1bGVfY2FjaGUgKmNhY2hlLAorCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpnaXRtb2R1bGVzX29pZCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfb2lkX3N0cmluZyhnaXRtb2R1bGVzX29pZCwgcGF0aCk7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSBrZXk7CisJc3RydWN0IHN1Ym1vZHVsZSBrZXlfY29uZmlnOworCisJb2lkY3B5KCZrZXlfY29uZmlnLmdpdG1vZHVsZXNfb2lkLCBnaXRtb2R1bGVzX29pZCk7CisJa2V5X2NvbmZpZy5wYXRoID0gcGF0aDsKKworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LmVudCwgaGFzaCk7CisJa2V5LmNvbmZpZyA9ICZrZXlfY29uZmlnOworCisJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeSgmY2FjaGUtPmZvcl9wYXRoLCAma2V5LCBlbnQsIE5VTEwpOworCWlmIChlbnRyeSkKKwkJcmV0dXJuIGVudHJ5LT5jb25maWc7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VibW9kdWxlICpjYWNoZV9sb29rdXBfbmFtZShzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZ2l0bW9kdWxlc19vaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX29pZF9zdHJpbmcoZ2l0bW9kdWxlc19vaWQsIG5hbWUpOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkga2V5OworCXN0cnVjdCBzdWJtb2R1bGUga2V5X2NvbmZpZzsKKworCW9pZGNweSgma2V5X2NvbmZpZy5naXRtb2R1bGVzX29pZCwgZ2l0bW9kdWxlc19vaWQpOworCWtleV9jb25maWcubmFtZSA9IG5hbWU7CisKKwloYXNobWFwX2VudHJ5X2luaXQoJmtleS5lbnQsIGhhc2gpOworCWtleS5jb25maWcgPSAma2V5X2NvbmZpZzsKKworCWVudHJ5ID0gaGFzaG1hcF9nZXRfZW50cnkoJmNhY2hlLT5mb3JfbmFtZSwgJmtleSwgZW50LCBOVUxMKTsKKwlpZiAoZW50cnkpCisJCXJldHVybiBlbnRyeS0+Y29uZmlnOworCXJldHVybiBOVUxMOworfQorCitpbnQgY2hlY2tfc3VibW9kdWxlX25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKiBEaXNhbGxvdyBlbXB0eSBuYW1lcyAqLworCWlmICghKm5hbWUpCisJCXJldHVybiAtMTsKKworCS8qCisJICogTG9vayBmb3IgJy4uJyBhcyBhIHBhdGggY29tcG9uZW50LiBDaGVjayBib3RoICcvJyBhbmQgJ1xcJyBhcworCSAqIHNlcGFyYXRvcnMgcmF0aGVyIHRoYW4gaXNfZGlyX3NlcCgpLCBiZWNhdXNlIHdlIHdhbnQgdGhlIG5hbWUgcnVsZXMKKwkgKiB0byBiZSBjb25zaXN0ZW50IGFjcm9zcyBwbGF0Zm9ybXMuCisJICovCisJZ290byBpbl9jb21wb25lbnQ7IC8qIGFsd2F5cyBzdGFydCBpbnNpZGUgY29tcG9uZW50ICovCisJd2hpbGUgKCpuYW1lKSB7CisJCWNoYXIgYyA9ICpuYW1lKys7CisJCWlmIChjID09ICcvJyB8fCBjID09ICdcXCcpIHsKK2luX2NvbXBvbmVudDoKKwkJCWlmIChuYW1lWzBdID09ICcuJyAmJiBuYW1lWzFdID09ICcuJyAmJgorCQkJICAgICghbmFtZVsyXSB8fCBuYW1lWzJdID09ICcvJyB8fCBuYW1lWzJdID09ICdcXCcpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5hbWVfYW5kX2l0ZW1fZnJvbV92YXIoY29uc3QgY2hhciAqdmFyLCBzdHJ1Y3Qgc3RyYnVmICpuYW1lLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqaXRlbSkKK3sKKwljb25zdCBjaGFyICpzdWJzZWN0aW9uLCAqa2V5OworCWludCBzdWJzZWN0aW9uX2xlbiwgcGFyc2U7CisJcGFyc2UgPSBwYXJzZV9jb25maWdfa2V5KHZhciwgInN1Ym1vZHVsZSIsICZzdWJzZWN0aW9uLAorCQkJJnN1YnNlY3Rpb25fbGVuLCAma2V5KTsKKwlpZiAocGFyc2UgPCAwIHx8ICFzdWJzZWN0aW9uKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9hZGQobmFtZSwgc3Vic2VjdGlvbiwgc3Vic2VjdGlvbl9sZW4pOworCWlmIChjaGVja19zdWJtb2R1bGVfbmFtZShuYW1lLT5idWYpIDwgMCkgeworCQl3YXJuaW5nKF8oImlnbm9yaW5nIHN1c3BpY2lvdXMgc3VibW9kdWxlIG5hbWU6ICVzIiksIG5hbWUtPmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKG5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdHJidWZfYWRkc3RyKGl0ZW0sIGtleSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzdWJtb2R1bGUgKmxvb2t1cF9vcl9jcmVhdGVfYnlfbmFtZShzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqZ2l0bW9kdWxlc19vaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlOworCXN0cnVjdCBzdHJidWYgbmFtZV9idWYgPSBTVFJCVUZfSU5JVDsKKworCXN1Ym1vZHVsZSA9IGNhY2hlX2xvb2t1cF9uYW1lKGNhY2hlLCBnaXRtb2R1bGVzX29pZCwgbmFtZSk7CisJaWYgKHN1Ym1vZHVsZSkKKwkJcmV0dXJuIHN1Ym1vZHVsZTsKKworCXN1Ym1vZHVsZSA9IHhtYWxsb2Moc2l6ZW9mKCpzdWJtb2R1bGUpKTsKKworCXN0cmJ1Zl9hZGRzdHIoJm5hbWVfYnVmLCBuYW1lKTsKKwlzdWJtb2R1bGUtPm5hbWUgPSBzdHJidWZfZGV0YWNoKCZuYW1lX2J1ZiwgTlVMTCk7CisKKwlzdWJtb2R1bGUtPnBhdGggPSBOVUxMOworCXN1Ym1vZHVsZS0+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+cmVjdXJzZV9zdWJtb2R1bGVzKSA9IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGZldGNoX2NvbmZpZ19mcm9tX2dpdG1vZHVsZXMoaW50ICptYXhfY2hpbGRyZW4sIGludCAqcmVjdXJzZV9zdWJtb2R1bGVzKQoreworCXN0cnVjdCBmZXRjaF9jb25maWcgY29uZmlnID0geworCQkubWF4X2NoaWxkcmVuID0gbWF4X2NoaWxkcmVuLAorCQkucmVjdXJzZV9zdWJtb2R1bGVzID0gcmVjdXJzZV9zdWJtb2R1bGVzCisJfTsKKwljb25maWdfZnJvbV9naXRtb2R1bGVzKGdpdG1vZHVsZXNfZmV0Y2hfY29uZmlnLCB0aGVfcmVwb3NpdG9yeSwgJmNvbmZpZyk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0bW9kdWxlc191cGRhdGVfY2xvbmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkJCSAgdm9pZCAqY2IpCit7CisJaW50ICptYXhfam9icyA9IGNiOworCWlmICghc3RyY21wKHZhciwgInN1Ym1vZHVsZS5mZXRjaGpvYnMiKSkKKwkJKm1heF9qb2JzID0gcGFyc2Vfc3VibW9kdWxlX2ZldGNoam9icyh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1cGRhdGVfY2xvbmVfY29uZmlnX2Zyb21fZ2l0bW9kdWxlcyhpbnQgKm1heF9qb2JzKQoreworCWNvbmZpZ19mcm9tX2dpdG1vZHVsZXMoZ2l0bW9kdWxlc191cGRhdGVfY2xvbmVfY29uZmlnLCB0aGVfcmVwb3NpdG9yeSwgJm1heF9qb2JzKTsKK30KZGlmZiAtLWdpdCBhL3N1Ym1vZHVsZS1jb25maWcuaCBiL3N1Ym1vZHVsZS1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFlMjJjCi0tLSAvZGV2L251bGwKKysrIGIvc3VibW9kdWxlLWNvbmZpZy5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIFNVQk1PRFVMRV9DT05GSUdfQ0FDSEVfSAorI2RlZmluZSBTVUJNT0RVTEVfQ09ORklHX0NBQ0hFX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisvKioKKyAqIFRoZSBzdWJtb2R1bGUgY29uZmlnIGNhY2hlIEFQSSBhbGxvd3MgdG8gcmVhZCBzdWJtb2R1bGUKKyAqIGNvbmZpZ3VyYXRpb25zL2luZm9ybWF0aW9uIGZyb20gc3BlY2lmaWVkIHJldmlzaW9ucy4gSW50ZXJuYWxseQorICogaW5mb3JtYXRpb24gaXMgbGF6aWx5IHJlYWQgaW50byBhIGNhY2hlIHRoYXQgaXMgdXNlZCB0byBhdm9pZAorICogdW5uZWNlc3NhcnkgcGFyc2luZyBvZiB0aGUgc2FtZSAuZ2l0bW9kdWxlcyBmaWxlcy4gTG9va3VwcyBjYW4gYmUgZG9uZSBieQorICogc3VibW9kdWxlIHBhdGggb3IgbmFtZS4KKyAqCisgKiBVc2FnZQorICogLS0tLS0KKyAqCisgKiBUaGUgY2FsbGVyIGNhbiBsb29rIHVwIGluZm9ybWF0aW9uIGFib3V0IHN1Ym1vZHVsZXMgYnkgdXNpbmcgdGhlCisgKiBgc3VibW9kdWxlX2Zyb21fcGF0aCgpYCBvciBgc3VibW9kdWxlX2Zyb21fbmFtZSgpYCBmdW5jdGlvbnMuIFRoZXkgcmV0dXJuCisgKiBhIGBzdHJ1Y3Qgc3VibW9kdWxlYCB3aGljaCBjb250YWlucyB0aGUgdmFsdWVzLiBUaGUgQVBJIGF1dG9tYXRpY2FsbHkKKyAqIGluaXRpYWxpemVzIGFuZCBhbGxvY2F0ZXMgdGhlIG5lZWRlZCBpbmZyYXN0cnVjdHVyZSBvbi1kZW1hbmQuIElmIHRoZQorICogY2FsbGVyIGRvZXMgb25seSB3YW50IHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSByZXZpc2lvbnMgdGhlIGluaXRpYWxpemF0aW9uCisgKiBjYW4gYmUgc2tpcHBlZC4KKyAqCisgKiBJZiB0aGUgaW50ZXJuYWwgY2FjaGUgbWlnaHQgZ3JvdyB0b28gYmlnIG9yIHdoZW4gdGhlIGNhbGxlciBpcyBkb25lIHdpdGgKKyAqIHRoZSBBUEksIGFsbCBpbnRlcm5hbGx5IGNhY2hlZCB2YWx1ZXMgY2FuIGJlIGZyZWVkIHdpdGggc3VibW9kdWxlX2ZyZWUoKS4KKyAqCisgKi8KKworLyoKKyAqIFN1Ym1vZHVsZSBlbnRyeSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIGNlcnRhaW4gc3VibW9kdWxlCisgKiBpbiBhIGNlcnRhaW4gcmV2aXNpb24uIEl0IGlzIHJldHVybmVkIGJ5IHRoZSBsb29rdXAgZnVuY3Rpb25zLgorICovCitzdHJ1Y3Qgc3VibW9kdWxlIHsKKwljb25zdCBjaGFyICpwYXRoOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqdXJsOworCWludCBmZXRjaF9yZWN1cnNlOworCWNvbnN0IGNoYXIgKmlnbm9yZTsKKwljb25zdCBjaGFyICpicmFuY2g7CisJc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kgdXBkYXRlX3N0cmF0ZWd5OworCS8qIHRoZSBvYmplY3QgaWQgb2YgdGhlIHJlc3BvbnNpYmxlIC5naXRtb2R1bGVzIGZpbGUgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIGdpdG1vZHVsZXNfb2lkOworCWludCByZWNvbW1lbmRfc2hhbGxvdzsKK307CisKKyNkZWZpbmUgU1VCTU9EVUxFX0lOSVQgeyBOVUxMLCBOVUxMLCBOVUxMLCBSRUNVUlNFX1NVQk1PRFVMRVNfTk9ORSwgXAorCU5VTEwsIE5VTEwsIFNVQk1PRFVMRV9VUERBVEVfU1RSQVRFR1lfSU5JVCwgeyB7IDAgfSB9LCAtMSB9OworCitzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlOworc3RydWN0IHJlcG9zaXRvcnk7CisKK3ZvaWQgc3VibW9kdWxlX2NhY2hlX2ZyZWUoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUpOworCitpbnQgcGFyc2Vfc3VibW9kdWxlX2ZldGNoam9icyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2ludCBwYXJzZV9mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKTsKK3N0cnVjdCBvcHRpb247CitpbnQgb3B0aW9uX2ZldGNoX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworaW50IHBhcnNlX3VwZGF0ZV9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKTsKK2ludCBwYXJzZV9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpOwordm9pZCByZXBvX3JlYWRfZ2l0bW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgaW50IHNraXBfaWZfcmVhZCk7Cit2b2lkIGdpdG1vZHVsZXNfY29uZmlnX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkKTsKKworLyoqCisgKiBTYW1lIGFzIHN1Ym1vZHVsZV9mcm9tX3BhdGggYnV0IGxvb2t1cCBieSBuYW1lLgorICovCitjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGVfZnJvbV9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29yX3RyZWUsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBHaXZlbiBhIHRyZWUtaXNoIGluIHRoZSBzdXBlcnByb2plY3QgYW5kIGEgcGF0aCwgcmV0dXJuIHRoZSBzdWJtb2R1bGUgdGhhdAorICogaXMgYm91bmQgYXQgdGhlIHBhdGggaW4gdGhlIG5hbWVkIHRyZWUuCisgKi8KK2NvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb3JfdHJlZSwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKioKKyAqIFVzZSB0aGVzZSB0byBmcmVlIHRoZSBpbnRlcm5hbGx5IGNhY2hlZCB2YWx1ZXMuCisgKi8KK3ZvaWQgc3VibW9kdWxlX2ZyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworCitpbnQgcHJpbnRfY29uZmlnX2Zyb21fZ2l0bW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5KTsKK2ludCBjb25maWdfc2V0X2luX2dpdG1vZHVsZXNfZmlsZV9nZW50bHkoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSk7CisKKy8qCisgKiBSZXR1cm5zIDAgaWYgdGhlIG5hbWUgaXMgc3ludGFjdGljYWxseSBhY2NlcHRhYmxlIGFzIGEgc3VibW9kdWxlICJuYW1lIgorICogKGUuZy4sIHRoYXQgbWF5IGJlIGZvdW5kIGluIHRoZSBzdWJzZWN0aW9uIG9mIGEgLmdpdG1vZHVsZXMgZmlsZSkgYW5kIC0xCisgKiBvdGhlcndpc2UuCisgKi8KK2ludCBjaGVja19zdWJtb2R1bGVfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyoKKyAqIE5vdGU6IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgZXhpc3Qgc29sZWx5IHRvIG1haW50YWluIGJhY2t3YXJkCisgKiBjb21wYXRpYmlsaXR5IHdpdGggJ2ZldGNoJyBhbmQgJ3VwZGF0ZV9jbG9uZScgc3RvcmluZyBjb25maWd1cmF0aW9uIGluCisgKiAnLmdpdG1vZHVsZXMnLgorICoKKyAqIE5ldyBoZWxwZXJzIHRvIHJldHJpZXZlIGFyYml0cmFyeSBjb25maWd1cmF0aW9uIGZyb20gdGhlICcuZ2l0bW9kdWxlcycgZmlsZQorICogc2hvdWxkIE5PVCBiZSBhZGRlZC4KKyAqLwordm9pZCBmZXRjaF9jb25maWdfZnJvbV9naXRtb2R1bGVzKGludCAqbWF4X2NoaWxkcmVuLCBpbnQgKnJlY3Vyc2Vfc3VibW9kdWxlcyk7Cit2b2lkIHVwZGF0ZV9jbG9uZV9jb25maWdfZnJvbV9naXRtb2R1bGVzKGludCAqbWF4X2pvYnMpOworCisjZW5kaWYgLyogU1VCTU9EVUxFX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9zdWJtb2R1bGUuYyBiL3N1Ym1vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZjM5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9zdWJtb2R1bGUuYwpAQCAtMCwwICsxLDIyODUgQEAKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworc3RhdGljIGludCBjb25maWdfdXBkYXRlX3JlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CitzdGF0aWMgaW50IGluaXRpYWxpemVkX2ZldGNoX3JlZl90aXBzOworc3RhdGljIHN0cnVjdCBvaWRfYXJyYXkgcmVmX3RpcHNfYmVmb3JlX2ZldGNoOworc3RhdGljIHN0cnVjdCBvaWRfYXJyYXkgcmVmX3RpcHNfYWZ0ZXJfZmV0Y2g7CisKKy8qCisgKiBDaGVjayBpZiB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyB1bm1lcmdlZC4gUGFyc2luZyBvZiB0aGUgLmdpdG1vZHVsZXMgZmlsZQorICogd2lsbCBiZSBkaXNhYmxlZCBiZWNhdXNlIHdlIGNhbid0IGd1ZXNzIHdoYXQgbWlnaHQgYmUgY29uZmlndXJlZCBpbgorICogLmdpdG1vZHVsZXMgdW5sZXNzIHRoZSB1c2VyIHJlc29sdmVzIHRoZSBjb25mbGljdC4KKyAqLworaW50IGlzX2dpdG1vZHVsZXNfdW5tZXJnZWQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgR0lUTU9EVUxFU19GSUxFLCBzdHJsZW4oR0lUTU9EVUxFU19GSUxFKSk7CisJaWYgKHBvcyA8IDApIHsgLyogLmdpdG1vZHVsZXMgbm90IGZvdW5kIG9yIGlzbid0IG1lcmdlZCAqLworCQlwb3MgPSAtMSAtIHBvczsKKwkJaWYgKGlzdGF0ZS0+Y2FjaGVfbnIgPiBwb3MpIHsgIC8qIHRoZXJlIGlzIGEgLmdpdG1vZHVsZXMgKi8KKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CisJCQlpZiAoY2VfbmFtZWxlbihjZSkgPT0gc3RybGVuKEdJVE1PRFVMRVNfRklMRSkgJiYKKwkJCSAgICAhc3RyY21wKGNlLT5uYW1lLCBHSVRNT0RVTEVTX0ZJTEUpKQorCQkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgLmdpdG1vZHVsZXMgZmlsZSBpcyBzYWZlIHRvIHdyaXRlLgorICoKKyAqIFdyaXRpbmcgdG8gdGhlIC5naXRtb2R1bGVzIGZpbGUgcmVxdWlyZXMgdGhhdCB0aGUgZmlsZSBleGlzdHMgaW4gdGhlCisgKiB3b3JraW5nIHRyZWUgb3IsIGlmIGl0IGRvZXNuJ3QsIHRoYXQgYSBicmFuZCBuZXcgLmdpdG1vZHVsZXMgZmlsZSBpcyBnb2luZworICogdG8gYmUgY3JlYXRlZCAoaS5lLiBpdCdzIG5laXRoZXIgaW4gdGhlIGluZGV4IG5vciBpbiB0aGUgY3VycmVudCBicmFuY2gpLgorICoKKyAqIEl0IGlzIG5vdCBzYWZlIHRvIHdyaXRlIHRvIC5naXRtb2R1bGVzIGlmIGl0J3Mgbm90IGluIHRoZSB3b3JraW5nIHRyZWUgYnV0CisgKiBpdCBpcyBpbiB0aGUgaW5kZXggb3IgaW4gdGhlIGN1cnJlbnQgYnJhbmNoLCBiZWNhdXNlIHdyaXRpbmcgbmV3IHZhbHVlcworICogKGFuZCBzdGFnaW5nIHRoZW0pIHdvdWxkIGJsaW5kbHkgb3ZlcndyaXRlIEFMTCB0aGUgb2xkIGNvbnRlbnQuCisgKi8KK2ludCBpc193cml0aW5nX2dpdG1vZHVsZXNfb2sodm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlyZXR1cm4gZmlsZV9leGlzdHMoR0lUTU9EVUxFU19GSUxFKSB8fAorCQkoZ2V0X29pZChHSVRNT0RVTEVTX0lOREVYLCAmb2lkKSA8IDAgJiYgZ2V0X29pZChHSVRNT0RVTEVTX0hFQUQsICZvaWQpIDwgMCk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgLmdpdG1vZHVsZXMgZmlsZSBoYXMgdW5zdGFnZWQgbW9kaWZpY2F0aW9ucy4gIFRoaXMgbXVzdCBiZQorICogY2hlY2tlZCBiZWZvcmUgYWxsb3dpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgLmdpdG1vZHVsZXMgZmlsZSB3aXRoIHRoZQorICogaW50ZW50aW9uIHRvIHN0YWdlIHRoZW0gbGF0ZXIsIGJlY2F1c2Ugd2hlbiBjb250aW51aW5nIHdlIHdvdWxkIHN0YWdlIHRoZQorICogbW9kaWZpY2F0aW9ucyB0aGUgdXNlciBkaWRuJ3Qgc3RhZ2UgaGVyc2VsZiB0b28uIFRoYXQgbWlnaHQgY2hhbmdlIGluIGEKKyAqIGZ1dHVyZSB2ZXJzaW9uIHdoZW4gd2UgbGVhcm4gdG8gc3RhZ2UgdGhlIGNoYW5nZXMgd2UgZG8gb3Vyc2VsdmVzIHdpdGhvdXQKKyAqIHN0YWdpbmcgYW55IHByZXZpb3VzIG1vZGlmaWNhdGlvbnMuCisgKi8KK2ludCBpc19zdGFnaW5nX2dpdG1vZHVsZXNfb2soc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgR0lUTU9EVUxFU19GSUxFLCBzdHJsZW4oR0lUTU9EVUxFU19GSUxFKSk7CisKKwlpZiAoKHBvcyA+PSAwKSAmJiAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWlmIChsc3RhdChHSVRNT0RVTEVTX0ZJTEUsICZzdCkgPT0gMCAmJgorCQkgICAgaWVfbW9kaWZpZWQoaXN0YXRlLCBpc3RhdGUtPmNhY2hlW3Bvc10sICZzdCwgMCkgJiBEQVRBX0NIQU5HRUQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmb3JfZWFjaF9yZW1vdGVfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsCisJCQkJCSBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gcmVmc19mb3JfZWFjaF9yZW1vdGVfcmVmKGdldF9zdWJtb2R1bGVfcmVmX3N0b3JlKHN1Ym1vZHVsZSksCisJCQkJCWZuLCBjYl9kYXRhKTsKK30KKworLyoKKyAqIFRyeSB0byB1cGRhdGUgdGhlICJwYXRoIiBlbnRyeSBpbiB0aGUgInN1Ym1vZHVsZS48bmFtZT4iIHNlY3Rpb24gb2YgdGhlCisgKiAuZ2l0bW9kdWxlcyBmaWxlLiBSZXR1cm4gMCBvbmx5IGlmIGEgLmdpdG1vZHVsZXMgZmlsZSB3YXMgZm91bmQsIGEgc2VjdGlvbgorICogd2l0aCB0aGUgY29ycmVjdCBwYXRoPTxvbGRwYXRoPiBzZXR0aW5nIHdhcyBmb3VuZCBhbmQgd2UgY291bGQgdXBkYXRlIGl0LgorICovCitpbnQgdXBkYXRlX3BhdGhfaW5fZ2l0bW9kdWxlcyhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKQoreworCXN0cnVjdCBzdHJidWYgZW50cnkgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGU7CisJaW50IHJldDsKKworCWlmICghZmlsZV9leGlzdHMoR0lUTU9EVUxFU19GSUxFKSkgLyogRG8gbm90aGluZyB3aXRob3V0IC5naXRtb2R1bGVzICovCisJCXJldHVybiAtMTsKKworCWlmIChpc19naXRtb2R1bGVzX3VubWVyZ2VkKHRoZV9yZXBvc2l0b3J5LT5pbmRleCkpCisJCWRpZShfKCJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIpKTsKKworCXN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgb2xkcGF0aCk7CisJaWYgKCFzdWJtb2R1bGUgfHwgIXN1Ym1vZHVsZS0+bmFtZSkgeworCQl3YXJuaW5nKF8oIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIpLCBvbGRwYXRoKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfYWRkc3RyKCZlbnRyeSwgInN1Ym1vZHVsZS4iKTsKKwlzdHJidWZfYWRkc3RyKCZlbnRyeSwgc3VibW9kdWxlLT5uYW1lKTsKKwlzdHJidWZfYWRkc3RyKCZlbnRyeSwgIi5wYXRoIik7CisJcmV0ID0gY29uZmlnX3NldF9pbl9naXRtb2R1bGVzX2ZpbGVfZ2VudGx5KGVudHJ5LmJ1ZiwgbmV3cGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJmVudHJ5KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVHJ5IHRvIHJlbW92ZSB0aGUgInN1Ym1vZHVsZS48bmFtZT4iIHNlY3Rpb24gZnJvbSAuZ2l0bW9kdWxlcyB3aGVyZSB0aGUgZ2l2ZW4KKyAqIHBhdGggaXMgY29uZmlndXJlZC4gUmV0dXJuIDAgb25seSBpZiBhIC5naXRtb2R1bGVzIGZpbGUgd2FzIGZvdW5kLCBhIHNlY3Rpb24KKyAqIHdpdGggdGhlIGNvcnJlY3QgcGF0aD08cGF0aD4gc2V0dGluZyB3YXMgZm91bmQgYW5kIHdlIGNvdWxkIHJlbW92ZSBpdC4KKyAqLworaW50IHJlbW92ZV9wYXRoX2Zyb21fZ2l0bW9kdWxlcyhjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgc2VjdCA9IFNUUkJVRl9JTklUOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKworCWlmICghZmlsZV9leGlzdHMoR0lUTU9EVUxFU19GSUxFKSkgLyogRG8gbm90aGluZyB3aXRob3V0IC5naXRtb2R1bGVzICovCisJCXJldHVybiAtMTsKKworCWlmIChpc19naXRtb2R1bGVzX3VubWVyZ2VkKHRoZV9yZXBvc2l0b3J5LT5pbmRleCkpCisJCWRpZShfKCJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIpKTsKKworCXN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgcGF0aCk7CisJaWYgKCFzdWJtb2R1bGUgfHwgIXN1Ym1vZHVsZS0+bmFtZSkgeworCQl3YXJuaW5nKF8oIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIpLCBwYXRoKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfYWRkc3RyKCZzZWN0LCAic3VibW9kdWxlLiIpOworCXN0cmJ1Zl9hZGRzdHIoJnNlY3QsIHN1Ym1vZHVsZS0+bmFtZSk7CisJaWYgKGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShHSVRNT0RVTEVTX0ZJTEUsIHNlY3QuYnVmLCBOVUxMKSA8IDApIHsKKwkJLyogTWF5YmUgdGhlIHVzZXIgYWxyZWFkeSBkaWQgdGhhdCwgZG9uJ3QgZXJyb3Igb3V0IGhlcmUgKi8KKwkJd2FybmluZyhfKCJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIpLCBwYXRoKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNlY3QpOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzZWN0KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdGFnZV91cGRhdGVkX2dpdG1vZHVsZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaWYgKGFkZF9maWxlX3RvX2luZGV4KGlzdGF0ZSwgR0lUTU9EVUxFU19GSUxFLCAwKSkKKwkJZGllKF8oInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiKSk7Cit9CisKKy8qIFRPRE86IHJlbW92ZSB0aGlzIGZ1bmN0aW9uLCB1c2UgcmVwb19zdWJtb2R1bGVfaW5pdCBpbnN0ZWFkLiAqLworaW50IGFkZF9zdWJtb2R1bGVfb2RiKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBvYmplY3RzX2RpcmVjdG9yeSA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJcmV0ID0gc3RyYnVmX2dpdF9wYXRoX3N1Ym1vZHVsZSgmb2JqZWN0c19kaXJlY3RvcnksIHBhdGgsICJvYmplY3RzLyIpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKwlpZiAoIWlzX2RpcmVjdG9yeShvYmplY3RzX2RpcmVjdG9yeS5idWYpKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCWFkZF90b19hbHRlcm5hdGVzX21lbW9yeShvYmplY3RzX2RpcmVjdG9yeS5idWYpOworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmb2JqZWN0c19kaXJlY3RvcnkpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2V0X2RpZmZvcHRfZmxhZ3NfZnJvbV9zdWJtb2R1bGVfY29uZmlnKHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCQkJCSAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGUgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCQkmbnVsbF9vaWQsIHBhdGgpOworCWlmIChzdWJtb2R1bGUpIHsKKwkJY29uc3QgY2hhciAqaWdub3JlOworCQljaGFyICprZXk7CisKKwkJa2V5ID0geHN0cmZtdCgic3VibW9kdWxlLiVzLmlnbm9yZSIsIHN1Ym1vZHVsZS0+bmFtZSk7CisJCWlmIChyZXBvX2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KHRoZV9yZXBvc2l0b3J5LCBrZXksICZpZ25vcmUpKQorCQkJaWdub3JlID0gc3VibW9kdWxlLT5pZ25vcmU7CisJCWZyZWUoa2V5KTsKKworCQlpZiAoaWdub3JlKQorCQkJaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZyhkaWZmb3B0LCBpZ25vcmUpOworCQllbHNlIGlmIChpc19naXRtb2R1bGVzX3VubWVyZ2VkKHRoZV9yZXBvc2l0b3J5LT5pbmRleCkpCisJCQlkaWZmb3B0LT5mbGFncy5pZ25vcmVfc3VibW9kdWxlcyA9IDE7CisJfQorfQorCisvKiBDaGVhcCBmdW5jdGlvbiB0aGF0IG9ubHkgZGV0ZXJtaW5lcyBpZiB3ZSdyZSBpbnRlcmVzdGVkIGluIHN1Ym1vZHVsZXMgYXQgYWxsICovCitpbnQgZ2l0X2RlZmF1bHRfc3VibW9kdWxlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJzdWJtb2R1bGUucmVjdXJzZSIpKSB7CisJCWludCB2ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpID8KKwkJCVJFQ1VSU0VfU1VCTU9EVUxFU19PTiA6IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJCWNvbmZpZ191cGRhdGVfcmVjdXJzZV9zdWJtb2R1bGVzID0gdjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBvcHRpb25fcGFyc2VfcmVjdXJzZV9zdWJtb2R1bGVzX3dvcmt0cmVlX3VwZGF0ZXIoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkJICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpIHsKKwkJY29uZmlnX3VwZGF0ZV9yZWN1cnNlX3N1Ym1vZHVsZXMgPSBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGFyZykKKwkJY29uZmlnX3VwZGF0ZV9yZWN1cnNlX3N1Ym1vZHVsZXMgPQorCQkJcGFyc2VfdXBkYXRlX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcob3B0LT5sb25nX25hbWUsCisJCQkJCQkJICAgIGFyZyk7CisJZWxzZQorCQljb25maWdfdXBkYXRlX3JlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTjsKKworCXJldHVybiAwOworfQorCisvKgorICogRGV0ZXJtaW5lIGlmIGEgc3VibW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkIGF0IGEgZ2l2ZW4gJ3BhdGgnCisgKi8KK2ludCBpc19zdWJtb2R1bGVfYWN0aXZlKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCByZXQgPSAwOworCWNoYXIgKmtleSA9IE5VTEw7CisJY2hhciAqdmFsdWUgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2w7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqbW9kdWxlOworCisJbW9kdWxlID0gc3VibW9kdWxlX2Zyb21fcGF0aChyZXBvLCAmbnVsbF9vaWQsIHBhdGgpOworCisJLyogZWFybHkgcmV0dXJuIGlmIHRoZXJlIGlzbid0IGEgcGF0aC0+bW9kdWxlIG1hcHBpbmcgKi8KKwlpZiAoIW1vZHVsZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBzdWJtb2R1bGUuPG5hbWU+LmFjdGl2ZSBpcyBzZXQgKi8KKwlrZXkgPSB4c3RyZm10KCJzdWJtb2R1bGUuJXMuYWN0aXZlIiwgbW9kdWxlLT5uYW1lKTsKKwlpZiAoIXJlcG9fY29uZmlnX2dldF9ib29sKHJlcG8sIGtleSwgJnJldCkpIHsKKwkJZnJlZShrZXkpOworCQlyZXR1cm4gcmV0OworCX0KKwlmcmVlKGtleSk7CisKKwkvKiBzdWJtb2R1bGUuYWN0aXZlIGlzIHNldCAqLworCXNsID0gcmVwb19jb25maWdfZ2V0X3ZhbHVlX211bHRpKHJlcG8sICJzdWJtb2R1bGUuYWN0aXZlIik7CisJaWYgKHNsKSB7CisJCXN0cnVjdCBwYXRoc3BlYyBwczsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBzbCkgeworCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBpdGVtLT5zdHJpbmcpOworCQl9CisKKwkJcGFyc2VfcGF0aHNwZWMoJnBzLCAwLCAwLCBOVUxMLCBhcmdzLmFyZ3YpOworCQlyZXQgPSBtYXRjaF9wYXRoc3BlYyhyZXBvLT5pbmRleCwgJnBzLCBwYXRoLCBzdHJsZW4ocGF0aCksIDAsIE5VTEwsIDEpOworCisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCQljbGVhcl9wYXRoc3BlYygmcHMpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGZhbGxiYWNrIHRvIGNoZWNraW5nIGlmIHRoZSBVUkwgaXMgc2V0ICovCisJa2V5ID0geHN0cmZtdCgic3VibW9kdWxlLiVzLnVybCIsIG1vZHVsZS0+bmFtZSk7CisJcmV0ID0gIXJlcG9fY29uZmlnX2dldF9zdHJpbmcocmVwbywga2V5LCAmdmFsdWUpOworCisJZnJlZSh2YWx1ZSk7CisJZnJlZShrZXkpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpc19zdWJtb2R1bGVfcG9wdWxhdGVkX2dlbnRseShjb25zdCBjaGFyICpwYXRoLCBpbnQgKnJldHVybl9lcnJvcl9jb2RlKQoreworCWludCByZXQgPSAwOworCWNoYXIgKmdpdGRpciA9IHhzdHJmbXQoIiVzLy5naXQiLCBwYXRoKTsKKworCWlmIChyZXNvbHZlX2dpdGRpcl9nZW50bHkoZ2l0ZGlyLCByZXR1cm5fZXJyb3JfY29kZSkpCisJCXJldCA9IDE7CisKKwlmcmVlKGdpdGRpcik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERpZXMgaWYgdGhlIHByb3ZpZGVkICdwcmVmaXgnIGNvcnJlc3BvbmRzIHRvIGFuIHVucG9wdWxhdGVkIHN1Ym1vZHVsZQorICovCit2b2lkIGRpZV9pbl91bnBvcHVsYXRlZF9zdWJtb2R1bGUoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIHByZWZpeGxlbjsKKworCWlmICghcHJlZml4KQorCQlyZXR1cm47CisKKwlwcmVmaXhsZW4gPSBzdHJsZW4ocHJlZml4KTsKKworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWludCBjZV9sZW4gPSBjZV9uYW1lbGVuKGNlKTsKKworCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJlZml4bGVuIDw9IGNlX2xlbikKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RybmNtcChjZS0+bmFtZSwgcHJlZml4LCBjZV9sZW4pKQorCQkJY29udGludWU7CisJCWlmIChwcmVmaXhbY2VfbGVuXSAhPSAnLycpCisJCQljb250aW51ZTsKKworCQlkaWUoXygiaW4gdW5wb3B1bGF0ZWQgc3VibW9kdWxlICclcyciKSwgY2UtPm5hbWUpOworCX0KK30KKworLyoKKyAqIERpZXMgaWYgYW55IHBhdGhzIGluIHRoZSBwcm92aWRlZCBwYXRoc3BlYyBkZXNjZW5kcyBpbnRvIGEgc3VibW9kdWxlCisgKi8KK3ZvaWQgZGllX3BhdGhfaW5zaWRlX3N1Ym1vZHVsZShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaW50IGNlX2xlbiA9IGNlX25hbWVsZW4oY2UpOworCisJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IHBzLT5uciA7IGorKykgeworCQkJY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0gPSAmcHMtPml0ZW1zW2pdOworCisJCQlpZiAoaXRlbS0+bGVuIDw9IGNlX2xlbikKKwkJCQljb250aW51ZTsKKwkJCWlmIChpdGVtLT5tYXRjaFtjZV9sZW5dICE9ICcvJykKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBpdGVtLT5tYXRjaCwgY2VfbGVuKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpdGVtLT5sZW4gPT0gY2VfbGVuICsgMSkKKwkJCQljb250aW51ZTsKKworCQkJZGllKF8oIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIpLAorCQkJICAgIGl0ZW0tPm9yaWdpbmFsLCBjZV9sZW4sIGNlLT5uYW1lKTsKKwkJfQorCX0KK30KKworZW51bSBzdWJtb2R1bGVfdXBkYXRlX3R5cGUgcGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV90eXBlKGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhbHVlLCAibm9uZSIpKQorCQlyZXR1cm4gU01fVVBEQVRFX05PTkU7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImNoZWNrb3V0IikpCisJCXJldHVybiBTTV9VUERBVEVfQ0hFQ0tPVVQ7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInJlYmFzZSIpKQorCQlyZXR1cm4gU01fVVBEQVRFX1JFQkFTRTsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibWVyZ2UiKSkKKwkJcmV0dXJuIFNNX1VQREFURV9NRVJHRTsKKwllbHNlIGlmICgqdmFsdWUgPT0gJyEnKQorCQlyZXR1cm4gU01fVVBEQVRFX0NPTU1BTkQ7CisJZWxzZQorCQlyZXR1cm4gU01fVVBEQVRFX1VOU1BFQ0lGSUVEOworfQorCitpbnQgcGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneShjb25zdCBjaGFyICp2YWx1ZSwKKwkJc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kgKmRzdCkKK3sKKwllbnVtIHN1Ym1vZHVsZV91cGRhdGVfdHlwZSB0eXBlOworCisJZnJlZSgodm9pZCopZHN0LT5jb21tYW5kKTsKKwlkc3QtPmNvbW1hbmQgPSBOVUxMOworCisJdHlwZSA9IHBhcnNlX3N1Ym1vZHVsZV91cGRhdGVfdHlwZSh2YWx1ZSk7CisJaWYgKHR5cGUgPT0gU01fVVBEQVRFX1VOU1BFQ0lGSUVEKQorCQlyZXR1cm4gLTE7CisKKwlkc3QtPnR5cGUgPSB0eXBlOworCWlmICh0eXBlID09IFNNX1VQREFURV9DT01NQU5EKQorCQlkc3QtPmNvbW1hbmQgPSB4c3RyZHVwKHZhbHVlICsgMSk7CisKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqc3VibW9kdWxlX3N0cmF0ZWd5X3RvX3N0cmluZyhjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSAqcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3dpdGNoIChzLT50eXBlKSB7CisJY2FzZSBTTV9VUERBVEVfQ0hFQ0tPVVQ6CisJCXJldHVybiAiY2hlY2tvdXQiOworCWNhc2UgU01fVVBEQVRFX01FUkdFOgorCQlyZXR1cm4gIm1lcmdlIjsKKwljYXNlIFNNX1VQREFURV9SRUJBU0U6CisJCXJldHVybiAicmViYXNlIjsKKwljYXNlIFNNX1VQREFURV9OT05FOgorCQlyZXR1cm4gIm5vbmUiOworCWNhc2UgU01fVVBEQVRFX1VOU1BFQ0lGSUVEOgorCQlyZXR1cm4gTlVMTDsKKwljYXNlIFNNX1VQREFURV9DT01NQU5EOgorCQlzdHJidWZfYWRkZigmc2IsICIhJXMiLCBzLT5jb21tYW5kKTsKKwkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0LAorCQkJCSAgY29uc3QgY2hhciAqYXJnKQoreworCWRpZmZvcHQtPmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzID0gMDsKKwlkaWZmb3B0LT5mbGFncy5pZ25vcmVfdW50cmFja2VkX2luX3N1Ym1vZHVsZXMgPSAwOworCWRpZmZvcHQtPmZsYWdzLmlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzID0gMDsKKworCWlmICghc3RyY21wKGFyZywgImFsbCIpKQorCQlkaWZmb3B0LT5mbGFncy5pZ25vcmVfc3VibW9kdWxlcyA9IDE7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ1bnRyYWNrZWQiKSkKKwkJZGlmZm9wdC0+ZmxhZ3MuaWdub3JlX3VudHJhY2tlZF9pbl9zdWJtb2R1bGVzID0gMTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImRpcnR5IikpCisJCWRpZmZvcHQtPmZsYWdzLmlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzID0gMTsKKwllbHNlIGlmIChzdHJjbXAoYXJnLCAibm9uZSIpKQorCQlkaWUoXygiYmFkIC0taWdub3JlLXN1Ym1vZHVsZXMgYXJndW1lbnQ6ICVzIiksIGFyZyk7CisJLyoKKwkgKiBQbGVhc2UgdXBkYXRlIF9naXRfc3RhdHVzKCkgaW4gZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdQorCSAqIGFkZCBuZXcgb3B0aW9ucworCSAqLworfQorCitzdGF0aWMgaW50IHByZXBhcmVfc3VibW9kdWxlX3N1bW1hcnkoc3RydWN0IHJldl9pbmZvICpyZXYsIGNvbnN0IGNoYXIgKnBhdGgsCisJCXN0cnVjdCBjb21taXQgKmxlZnQsIHN0cnVjdCBjb21taXQgKnJpZ2h0LAorCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKworCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksIHJldiwgTlVMTCk7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsIHJldiwgTlVMTCk7CisJcmV2LT5sZWZ0X3JpZ2h0ID0gMTsKKwlyZXYtPmZpcnN0X3BhcmVudF9vbmx5ID0gMTsKKwlsZWZ0LT5vYmplY3QuZmxhZ3MgfD0gU1lNTUVUUklDX0xFRlQ7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgJmxlZnQtPm9iamVjdCwgcGF0aCk7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgJnJpZ2h0LT5vYmplY3QsIHBhdGgpOworCWZvciAobGlzdCA9IG1lcmdlX2Jhc2VzOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQlsaXN0LT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgJmxpc3QtPml0ZW0tPm9iamVjdCwKKwkJCW9pZF90b19oZXgoJmxpc3QtPml0ZW0tPm9iamVjdC5vaWQpKTsKKwl9CisJcmV0dXJuIHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXYpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9zdWJtb2R1bGVfc3VtbWFyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgZm9ybWF0W10gPSAiICAlbSAlcyI7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldikpKSB7CisJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJCWN0eC5kYXRlX21vZGUgPSByZXYtPmRhdGVfbW9kZTsKKwkJY3R4Lm91dHB1dF9lbmNvZGluZyA9IGdldF9sb2dfb3V0cHV0X2VuY29kaW5nKCk7CisJCXN0cmJ1Zl9zZXRsZW4oJnNiLCAwKTsKKwkJcmVwb19mb3JtYXRfY29tbWl0X21lc3NhZ2UociwgY29tbWl0LCBmb3JtYXQsICZzYiwKKwkJCQkgICAgICAmY3R4KTsKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJ1xuJyk7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJZGlmZl9lbWl0X3N1Ym1vZHVsZV9kZWwobywgc2IuYnVmKTsKKwkJZWxzZQorCQkJZGlmZl9lbWl0X3N1Ym1vZHVsZV9hZGQobywgc2IuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnZfbm9fZ2l0X2RpcihzdHJ1Y3QgYXJndl9hcnJheSAqb3V0KQoreworCWNvbnN0IGNoYXIgKiBjb25zdCAqdmFyOworCisJZm9yICh2YXIgPSBsb2NhbF9yZXBvX2VudjsgKnZhcjsgdmFyKyspIHsKKwkJaWYgKHN0cmNtcCgqdmFyLCBDT05GSUdfREFUQV9FTlZJUk9OTUVOVCkpCisJCQlhcmd2X2FycmF5X3B1c2gob3V0LCAqdmFyKTsKKwl9Cit9CisKK3ZvaWQgcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoc3RydWN0IGFyZ3ZfYXJyYXkgKm91dCkKK3sKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2Vudl9ub19naXRfZGlyKG91dCk7CisJYXJndl9hcnJheV9wdXNoZihvdXQsICIlcz0lcyIsIEdJVF9ESVJfRU5WSVJPTk1FTlQsCisJCQkgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnZfaW5fZ2l0ZGlyKHN0cnVjdCBhcmd2X2FycmF5ICpvdXQpCit7CisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnZfbm9fZ2l0X2RpcihvdXQpOworCWFyZ3ZfYXJyYXlfcHVzaGYob3V0LCAiJXM9LiIsIEdJVF9ESVJfRU5WSVJPTk1FTlQpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIHJlcG9zaXRvcnkgc3RydWN0IGZvciBhIHN1Ym1vZHVsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgJ3BhdGgnLgorICoKKyAqIFVubGlrZSByZXBvX3N1Ym1vZHVsZV9pbml0LCB0aGlzIHRvbGVyYXRlcyBzdWJtb2R1bGVzIG5vdCBwcmVzZW50CisgKiBpbiAuZ2l0bW9kdWxlcy4gVGhpcyBmdW5jdGlvbiBleGlzdHMgb25seSB0byBwcmVzZXJ2ZSBoaXN0b3JpY2FsIGJlaGF2aW9yLAorICoKKyAqIFJldHVybnMgdGhlIHJlcG9zaXRvcnkgc3RydWN0IG9uIHN1Y2Nlc3MsCisgKiBOVUxMIHdoZW4gdGhlIHN1Ym1vZHVsZSBpcyBub3QgcHJlc2VudC4KKyAqLworc3RhdGljIHN0cnVjdCByZXBvc2l0b3J5ICpvcGVuX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqb3V0ID0geG1hbGxvYyhzaXplb2YoKm91dCkpOworCisJaWYgKHN1Ym1vZHVsZV90b19naXRkaXIoJnNiLCBwYXRoKSB8fCByZXBvX2luaXQob3V0LCBzYi5idWYsIE5VTEwpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWZyZWUob3V0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogTWFyayBpdCBhcyBhIHN1Ym1vZHVsZSAqLworCW91dC0+c3VibW9kdWxlX3ByZWZpeCA9IHhzdHJkdXAocGF0aCk7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiBvdXQ7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzcGxheSB0aGUgc3VibW9kdWxlIGhlYWRlciBsaW5lIHByaW9yIHRvIHRoZSBmdWxsCisgKiBzdW1tYXJ5IG91dHB1dC4KKyAqCisgKiBJZiBpdCBjYW4gbG9jYXRlIHRoZSBzdWJtb2R1bGUgZ2l0IGRpcmVjdG9yeSBpdCB3aWxsIGNyZWF0ZSBhIHJlcG9zaXRvcnkKKyAqIGhhbmRsZSBmb3IgdGhlIHN1Ym1vZHVsZSBhbmQgbG9va3VwIGJvdGggdGhlIGxlZnQgYW5kIHJpZ2h0IGNvbW1pdHMgYW5kCisgKiBwdXQgdGhlbSBpbnRvIHRoZSBsZWZ0IGFuZCByaWdodCBwb2ludGVycy4KKyAqLworc3RhdGljIHZvaWQgc2hvd19zdWJtb2R1bGVfaGVhZGVyKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCWNvbnN0IGNoYXIgKnBhdGgsCisJCXN0cnVjdCBvYmplY3RfaWQgKm9uZSwgc3RydWN0IG9iamVjdF9pZCAqdHdvLAorCQl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUsCisJCXN0cnVjdCByZXBvc2l0b3J5ICpzdWIsCisJCXN0cnVjdCBjb21taXQgKipsZWZ0LCBzdHJ1Y3QgY29tbWl0ICoqcmlnaHQsCisJCXN0cnVjdCBjb21taXRfbGlzdCAqKm1lcmdlX2Jhc2VzKQoreworCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZmFzdF9mb3J3YXJkID0gMCwgZmFzdF9iYWNrd2FyZCA9IDA7CisKKwlpZiAoZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCkKKwkJZGlmZl9lbWl0X3N1Ym1vZHVsZV91bnRyYWNrZWQobywgcGF0aCk7CisKKwlpZiAoZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX01PRElGSUVEKQorCQlkaWZmX2VtaXRfc3VibW9kdWxlX21vZGlmaWVkKG8sIHBhdGgpOworCisJaWYgKGlzX251bGxfb2lkKG9uZSkpCisJCW1lc3NhZ2UgPSAiKG5ldyBzdWJtb2R1bGUpIjsKKwllbHNlIGlmIChpc19udWxsX29pZCh0d28pKQorCQltZXNzYWdlID0gIihzdWJtb2R1bGUgZGVsZXRlZCkiOworCisJaWYgKCFzdWIpIHsKKwkJaWYgKCFtZXNzYWdlKQorCQkJbWVzc2FnZSA9ICIoY29tbWl0cyBub3QgcHJlc2VudCkiOworCQlnb3RvIG91dHB1dF9oZWFkZXI7CisJfQorCisJLyoKKwkgKiBBdHRlbXB0IHRvIGxvb2t1cCB0aGUgY29tbWl0IHJlZmVyZW5jZXMsIGFuZCBkZXRlcm1pbmUgaWYgdGhpcyBpcworCSAqIGEgZmFzdCBmb3J3YXJkIG9yIGZhc3QgYmFja3dhcmRzIHVwZGF0ZS4KKwkgKi8KKwkqbGVmdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHN1Yiwgb25lKTsKKwkqcmlnaHQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzdWIsIHR3byk7CisKKwkvKgorCSAqIFdhcm4gYWJvdXQgbWlzc2luZyBjb21taXRzIGluIHRoZSBzdWJtb2R1bGUgcHJvamVjdCwgYnV0IG9ubHkgaWYKKwkgKiB0aGV5IGFyZW4ndCBudWxsLgorCSAqLworCWlmICgoIWlzX251bGxfb2lkKG9uZSkgJiYgISpsZWZ0KSB8fAorCSAgICAgKCFpc19udWxsX29pZCh0d28pICYmICEqcmlnaHQpKQorCQltZXNzYWdlID0gIihjb21taXRzIG5vdCBwcmVzZW50KSI7CisKKwkqbWVyZ2VfYmFzZXMgPSByZXBvX2dldF9tZXJnZV9iYXNlcyhzdWIsICpsZWZ0LCAqcmlnaHQpOworCWlmICgqbWVyZ2VfYmFzZXMpIHsKKwkJaWYgKCgqbWVyZ2VfYmFzZXMpLT5pdGVtID09ICpsZWZ0KQorCQkJZmFzdF9mb3J3YXJkID0gMTsKKwkJZWxzZSBpZiAoKCptZXJnZV9iYXNlcyktPml0ZW0gPT0gKnJpZ2h0KQorCQkJZmFzdF9iYWNrd2FyZCA9IDE7CisJfQorCisJaWYgKG9pZGVxKG9uZSwgdHdvKSkgeworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm47CisJfQorCitvdXRwdXRfaGVhZGVyOgorCXN0cmJ1Zl9hZGRmKCZzYiwgIlN1Ym1vZHVsZSAlcyAiLCBwYXRoKTsKKwlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnNiLCBvbmUsIERFRkFVTFRfQUJCUkVWKTsKKwlzdHJidWZfYWRkc3RyKCZzYiwgKGZhc3RfYmFja3dhcmQgfHwgZmFzdF9mb3J3YXJkKSA/ICIuLiIgOiAiLi4uIik7CisJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZzYiwgdHdvLCBERUZBVUxUX0FCQlJFVik7CisJaWYgKG1lc3NhZ2UpCisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiAlc1xuIiwgbWVzc2FnZSk7CisJZWxzZQorCQlzdHJidWZfYWRkZigmc2IsICIlczpcbiIsIGZhc3RfYmFja3dhcmQgPyAiIChyZXdpbmQpIiA6ICIiKTsKKwlkaWZmX2VtaXRfc3VibW9kdWxlX2hlYWRlcihvLCBzYi5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKwordm9pZCBzaG93X3N1Ym1vZHVsZV9zdW1tYXJ5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKnBhdGgsCisJCXN0cnVjdCBvYmplY3RfaWQgKm9uZSwgc3RydWN0IG9iamVjdF9pZCAqdHdvLAorCQl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgY29tbWl0ICpsZWZ0ID0gTlVMTCwgKnJpZ2h0ID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzID0gTlVMTDsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqc3ViOworCisJc3ViID0gb3Blbl9zdWJtb2R1bGUocGF0aCk7CisJc2hvd19zdWJtb2R1bGVfaGVhZGVyKG8sIHBhdGgsIG9uZSwgdHdvLCBkaXJ0eV9zdWJtb2R1bGUsCisJCQkgICAgICBzdWIsICZsZWZ0LCAmcmlnaHQsICZtZXJnZV9iYXNlcyk7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgYm90aCBhIGxlZnQgYW5kIGEgcmlnaHQgcG9pbnRlciwgdGhlcmUgaXMgbm8KKwkgKiByZWFzb24gdG8gdHJ5IGFuZCBkaXNwbGF5IGEgc3VtbWFyeS4gVGhlIGhlYWRlciBsaW5lIHNob3VsZCBjb250YWluCisJICogYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGUgdXNlciBuZWVkcy4KKwkgKi8KKwlpZiAoIWxlZnQgfHwgIXJpZ2h0IHx8ICFzdWIpCisJCWdvdG8gb3V0OworCisJLyogVHJlYXQgcmV2aXNpb24gd2Fsa2VyIGZhaWx1cmUgdGhlIHNhbWUgYXMgbWlzc2luZyBjb21taXRzICovCisJaWYgKHByZXBhcmVfc3VibW9kdWxlX3N1bW1hcnkoJnJldiwgcGF0aCwgbGVmdCwgcmlnaHQsIG1lcmdlX2Jhc2VzKSkgeworCQlkaWZmX2VtaXRfc3VibW9kdWxlX2Vycm9yKG8sICIocmV2aXNpb24gd2Fsa2VyIGZhaWxlZClcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcmludF9zdWJtb2R1bGVfc3VtbWFyeShzdWIsICZyZXYsIG8pOworCitvdXQ6CisJaWYgKG1lcmdlX2Jhc2VzKQorCQlmcmVlX2NvbW1pdF9saXN0KG1lcmdlX2Jhc2VzKTsKKwljbGVhcl9jb21taXRfbWFya3MobGVmdCwgfjApOworCWNsZWFyX2NvbW1pdF9tYXJrcyhyaWdodCwgfjApOworCWlmIChzdWIpIHsKKwkJcmVwb19jbGVhcihzdWIpOworCQlmcmVlKHN1Yik7CisJfQorfQorCit2b2lkIHNob3dfc3VibW9kdWxlX2lubGluZV9kaWZmKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKnBhdGgsCisJCXN0cnVjdCBvYmplY3RfaWQgKm9uZSwgc3RydWN0IG9iamVjdF9pZCAqdHdvLAorCQl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUpCit7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCA9IHRoZV9oYXNoX2FsZ28tPmVtcHR5X3RyZWUsICpuZXdfb2lkID0gdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZTsKKwlzdHJ1Y3QgY29tbWl0ICpsZWZ0ID0gTlVMTCwgKnJpZ2h0ID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzID0gTlVMTDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlcG9zaXRvcnkgKnN1YjsKKworCXN1YiA9IG9wZW5fc3VibW9kdWxlKHBhdGgpOworCXNob3dfc3VibW9kdWxlX2hlYWRlcihvLCBwYXRoLCBvbmUsIHR3bywgZGlydHlfc3VibW9kdWxlLAorCQkJICAgICAgc3ViLCAmbGVmdCwgJnJpZ2h0LCAmbWVyZ2VfYmFzZXMpOworCisJLyogV2UgbmVlZCBhIHZhbGlkIGxlZnQgYW5kIHJpZ2h0IGNvbW1pdCB0byBkaXNwbGF5IGEgZGlmZmVyZW5jZSAqLworCWlmICghKGxlZnQgfHwgaXNfbnVsbF9vaWQob25lKSkgfHwKKwkgICAgIShyaWdodCB8fCBpc19udWxsX29pZCh0d28pKSkKKwkJZ290byBkb25lOworCisJaWYgKGxlZnQpCisJCW9sZF9vaWQgPSBvbmU7CisJaWYgKHJpZ2h0KQorCQluZXdfb2lkID0gdHdvOworCisJY3AuZ2l0X2NtZCA9IDE7CisJY3AuZGlyID0gcGF0aDsKKwljcC5vdXQgPSAtMTsKKwljcC5ub19zdGRpbiA9IDE7CisKKwkvKiBUT0RPOiBvdGhlciBvcHRpb25zIG1heSBuZWVkIHRvIGJlIHBhc3NlZCBoZXJlLiAqLworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJkaWZmIiwgIi0tc3VibW9kdWxlPWRpZmYiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1jb2xvcj0lcyIsIHdhbnRfY29sb3Ioby0+dXNlX2NvbG9yKSA/CisJCQkgImFsd2F5cyIgOiAibmV2ZXIiKTsKKworCWlmIChvLT5mbGFncy5yZXZlcnNlX2RpZmYpIHsKKwkJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIi0tc3JjLXByZWZpeD0lcyVzLyIsCisJCQkJIG8tPmJfcHJlZml4LCBwYXRoKTsKKwkJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIi0tZHN0LXByZWZpeD0lcyVzLyIsCisJCQkJIG8tPmFfcHJlZml4LCBwYXRoKTsKKwl9IGVsc2UgeworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1zcmMtcHJlZml4PSVzJXMvIiwKKwkJCQkgby0+YV9wcmVmaXgsIHBhdGgpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1kc3QtcHJlZml4PSVzJXMvIiwKKwkJCQkgby0+Yl9wcmVmaXgsIHBhdGgpOworCX0KKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG9pZF90b19oZXgob2xkX29pZCkpOworCS8qCisJICogSWYgdGhlIHN1Ym1vZHVsZSBoYXMgbW9kaWZpZWQgY29udGVudCwgd2Ugd2lsbCBkaWZmIGFnYWluc3QgdGhlCisJICogd29yayB0cmVlLCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSB1c2VyIGhhcyBhc2tlZCBmb3IgdGhlCisJICogZGlmZiBmb3JtYXQgYW5kIHdpc2hlcyB0byBhY3R1YWxseSBzZWUgYWxsIGRpZmZlcmVuY2VzIGV2ZW4gaWYgdGhleQorCSAqIGhhdmVuJ3QgeWV0IGJlZW4gY29tbWl0dGVkIHRvIHRoZSBzdWJtb2R1bGUgeWV0LgorCSAqLworCWlmICghKGRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgb2lkX3RvX2hleChuZXdfb2lkKSk7CisKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQlkaWZmX2VtaXRfc3VibW9kdWxlX2Vycm9yKG8sICIoZGlmZiBmYWlsZWQpXG4iKTsKKworCXdoaWxlIChzdHJidWZfZ2V0d2hvbGVsaW5lX2ZkKCZzYiwgY3Aub3V0LCAnXG4nKSAhPSBFT0YpCisJCWRpZmZfZW1pdF9zdWJtb2R1bGVfcGlwZXRocm91Z2gobywgc2IuYnVmLCBzYi5sZW4pOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjcCkpCisJCWRpZmZfZW1pdF9zdWJtb2R1bGVfZXJyb3IobywgIihkaWZmIGZhaWxlZClcbiIpOworCitkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJaWYgKG1lcmdlX2Jhc2VzKQorCQlmcmVlX2NvbW1pdF9saXN0KG1lcmdlX2Jhc2VzKTsKKwlpZiAobGVmdCkKKwkJY2xlYXJfY29tbWl0X21hcmtzKGxlZnQsIH4wKTsKKwlpZiAocmlnaHQpCisJCWNsZWFyX2NvbW1pdF9tYXJrcyhyaWdodCwgfjApOworCWlmIChzdWIpIHsKKwkJcmVwb19jbGVhcihzdWIpOworCQlmcmVlKHN1Yik7CisJfQorfQorCitpbnQgc2hvdWxkX3VwZGF0ZV9zdWJtb2R1bGVzKHZvaWQpCit7CisJcmV0dXJuIGNvbmZpZ191cGRhdGVfcmVjdXJzZV9zdWJtb2R1bGVzID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTjsKK30KKworY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlX2Zyb21fY2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXNob3VsZF91cGRhdGVfc3VibW9kdWxlcygpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIGNlLT5uYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCBvaWRfYXJyYXkgKnN1Ym1vZHVsZV9jb21taXRzKHN0cnVjdCBzdHJpbmdfbGlzdCAqc3VibW9kdWxlcywKKwkJCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoc3VibW9kdWxlcywgbmFtZSk7CisJaWYgKGl0ZW0tPnV0aWwpCisJCXJldHVybiAoc3RydWN0IG9pZF9hcnJheSAqKSBpdGVtLT51dGlsOworCisJLyogTkVFRFNXT1JLOiBzaG91bGQgd2UgaGF2ZSBvaWRfYXJyYXlfaW5pdCgpPyAqLworCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgb2lkX2FycmF5KSk7CisJcmV0dXJuIChzdHJ1Y3Qgb2lkX2FycmF5ICopIGl0ZW0tPnV0aWw7Cit9CisKK3N0cnVjdCBjb2xsZWN0X2NoYW5nZWRfc3VibW9kdWxlc19jYl9kYXRhIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNoYW5nZWQ7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29pZDsKK307CisKKy8qCisgKiB0aGlzIHdvdWxkIG5vcm1hbGx5IGJlIHR3byBmdW5jdGlvbnM6IGRlZmF1bHRfbmFtZV9mcm9tX3BhdGgoKSBhbmQKKyAqIHBhdGhfZnJvbV9kZWZhdWx0X25hbWUoKS4gU2luY2UgdGhlIGRlZmF1bHQgbmFtZSBpcyB0aGUgc2FtZSBhcworICogdGhlIHN1Ym1vZHVsZSBwYXRoIHdlIGNhbiBnZXQgYXdheSB3aXRoIGp1c3Qgb25lIGZ1bmN0aW9uIHdoaWNoIG9ubHkKKyAqIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGlzIGEgc3VibW9kdWxlIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhdCB0aGF0CisgKiBsb2NhdGlvbi4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfbmFtZV9vcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGhfb3JfbmFtZSkKK3sKKwlpbnQgZXJyb3JfY29kZTsKKworCWlmICghaXNfc3VibW9kdWxlX3BvcHVsYXRlZF9nZW50bHkocGF0aF9vcl9uYW1lLCAmZXJyb3JfY29kZSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBhdGhfb3JfbmFtZTsKK30KKworc3RhdGljIHZvaWQgY29sbGVjdF9jaGFuZ2VkX3N1Ym1vZHVsZXNfY2Ioc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJCQkgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29sbGVjdF9jaGFuZ2VkX3N1Ym1vZHVsZXNfY2JfZGF0YSAqbWUgPSBkYXRhOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqY2hhbmdlZCA9IG1lLT5jaGFuZ2VkOworCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKmNvbW1pdF9vaWQgPSBtZS0+Y29tbWl0X29pZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCXN0cnVjdCBvaWRfYXJyYXkgKmNvbW1pdHM7CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKworCQlpZiAoIVNfSVNHSVRMSU5LKHAtPnR3by0+bW9kZSkpCisJCQljb250aW51ZTsKKworCQlzdWJtb2R1bGUgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKG1lLT5yZXBvLAorCQkJCQkJY29tbWl0X29pZCwgcC0+dHdvLT5wYXRoKTsKKwkJaWYgKHN1Ym1vZHVsZSkKKwkJCW5hbWUgPSBzdWJtb2R1bGUtPm5hbWU7CisJCWVsc2UgeworCQkJbmFtZSA9IGRlZmF1bHRfbmFtZV9vcl9wYXRoKHAtPnR3by0+cGF0aCk7CisJCQkvKiBtYWtlIHN1cmUgbmFtZSBkb2VzIG5vdCBjb2xsaWRlIHdpdGggZXhpc3Rpbmcgb25lICovCisJCQlpZiAobmFtZSkKKwkJCQlzdWJtb2R1bGUgPSBzdWJtb2R1bGVfZnJvbV9uYW1lKG1lLT5yZXBvLAorCQkJCQkJCQljb21taXRfb2lkLCBuYW1lKTsKKwkJCWlmIChzdWJtb2R1bGUpIHsKKwkJCQl3YXJuaW5nKF8oIlN1Ym1vZHVsZSBpbiBjb21taXQgJXMgYXQgcGF0aDogIgorCQkJCQkiJyVzJyBjb2xsaWRlcyB3aXRoIGEgc3VibW9kdWxlIG5hbWVkICIKKwkJCQkJInRoZSBzYW1lLiBTa2lwcGluZyBpdC4iKSwKKwkJCQkJb2lkX3RvX2hleChjb21taXRfb2lkKSwgcC0+dHdvLT5wYXRoKTsKKwkJCQluYW1lID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCWlmICghbmFtZSkKKwkJCWNvbnRpbnVlOworCisJCWNvbW1pdHMgPSBzdWJtb2R1bGVfY29tbWl0cyhjaGFuZ2VkLCBuYW1lKTsKKwkJb2lkX2FycmF5X2FwcGVuZChjb21taXRzLCAmcC0+dHdvLT5vaWQpOworCX0KK30KKworLyoKKyAqIENvbGxlY3QgdGhlIHBhdGhzIG9mIHN1Ym1vZHVsZXMgaW4gJ2NoYW5nZWQnIHdoaWNoIGhhdmUgY2hhbmdlZCBiYXNlZCBvbgorICogdGhlIHJldmlzaW9ucyBhcyBzcGVjaWZpZWQgaW4gJ2FyZ3YnLiAgRWFjaCBlbnRyeSBpbiAnY2hhbmdlZCcgd2lsbCBhbHNvCisgKiBoYXZlIGEgY29ycmVzcG9uZGluZyAnc3RydWN0IG9pZF9hcnJheScgKGluIHRoZSAndXRpbCcgZmllbGQpIHdoaWNoIGxpc3RzCisgKiB3aGF0IHRoZSBzdWJtb2R1bGUgcG9pbnRlcnMgd2VyZSB1cGRhdGVkIHRvIGR1cmluZyB0aGUgY2hhbmdlLgorICovCitzdGF0aWMgdm9pZCBjb2xsZWN0X2NoYW5nZWRfc3VibW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpjaGFuZ2VkLAorCQkJCSAgICAgICBzdHJ1Y3QgYXJndl9hcnJheSAqYXJndikKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMociwgJnJldiwgTlVMTCk7CisJc2V0dXBfcmV2aXNpb25zKGFyZ3YtPmFyZ2MsIGFyZ3YtPmFyZ3YsICZyZXYsIE5VTEwpOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXYpKSkgeworCQlzdHJ1Y3QgcmV2X2luZm8gZGlmZl9yZXY7CisJCXN0cnVjdCBjb2xsZWN0X2NoYW5nZWRfc3VibW9kdWxlc19jYl9kYXRhIGRhdGE7CisJCWRhdGEucmVwbyA9IHI7CisJCWRhdGEuY2hhbmdlZCA9IGNoYW5nZWQ7CisJCWRhdGEuY29tbWl0X29pZCA9ICZjb21taXQtPm9iamVjdC5vaWQ7CisKKwkJcmVwb19pbml0X3JldmlzaW9ucyhyLCAmZGlmZl9yZXYsIE5VTEwpOworCQlkaWZmX3Jldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJCWRpZmZfcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gY29sbGVjdF9jaGFuZ2VkX3N1Ym1vZHVsZXNfY2I7CisJCWRpZmZfcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmZGF0YTsKKwkJZGlmZl90cmVlX2NvbWJpbmVkX21lcmdlKGNvbW1pdCwgMSwgJmRpZmZfcmV2KTsKKwl9CisKKwlyZXNldF9yZXZpc2lvbl93YWxrKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3VibW9kdWxlc19vaWRzKHN0cnVjdCBzdHJpbmdfbGlzdCAqc3VibW9kdWxlcykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHN1Ym1vZHVsZXMpCisJCW9pZF9hcnJheV9jbGVhcigoc3RydWN0IG9pZF9hcnJheSAqKSBpdGVtLT51dGlsKTsKKwlzdHJpbmdfbGlzdF9jbGVhcihzdWJtb2R1bGVzLCAxKTsKK30KKworc3RhdGljIGludCBoYXNfcmVtb3RlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9vaWRfdG9fYXJndihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3YgPSBkYXRhOworCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCBvaWRfdG9faGV4KG9pZCkpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgaGFzX2NvbW1pdF9kYXRhIHsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbzsKKwlpbnQgcmVzdWx0OworCWNvbnN0IGNoYXIgKnBhdGg7Cit9OworCitzdGF0aWMgaW50IGNoZWNrX2hhc19jb21taXQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBoYXNfY29tbWl0X2RhdGEgKmNiID0gZGF0YTsKKworCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhjYi0+cmVwbywgb2lkLCBOVUxMKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX0NPTU1JVDoKKwkJcmV0dXJuIDA7CisJY2FzZSBPQkpfQkFEOgorCQkvKgorCQkgKiBPYmplY3QgaXMgbWlzc2luZyBvciBpbnZhbGlkLiBJZiBpbnZhbGlkLCBhbiBlcnJvciBtZXNzYWdlCisJCSAqIGhhcyBhbHJlYWR5IGJlZW4gcHJpbnRlZC4KKwkJICovCisJCWNiLT5yZXN1bHQgPSAwOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlkaWUoXygic3VibW9kdWxlIGVudHJ5ICclcycgKCVzKSBpcyBhICVzLCBub3QgYSBjb21taXQiKSwKKwkJICAgIGNiLT5wYXRoLCBvaWRfdG9faGV4KG9pZCksIHR5cGVfbmFtZSh0eXBlKSk7CisJfQorfQorCitzdGF0aWMgaW50IHN1Ym1vZHVsZV9oYXNfY29tbWl0cyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgc3RydWN0IG9pZF9hcnJheSAqY29tbWl0cykKK3sKKwlzdHJ1Y3QgaGFzX2NvbW1pdF9kYXRhIGhhc19jb21taXQgPSB7IHIsIDEsIHBhdGggfTsKKworCS8qCisJICogUGVyZm9ybSBhIGNoZWFwLCBidXQgaW5jb3JyZWN0IGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mICdjb21taXRzJy4KKwkgKiBUaGlzIGlzIGRvbmUgYnkgYWRkaW5nIHRoZSBzdWJtb2R1bGUncyBvYmplY3Qgc3RvcmUgdG8gdGhlIGluLWNvcmUKKwkgKiBvYmplY3Qgc3RvcmUsIGFuZCB0aGVuIHF1ZXJ5aW5nIGZvciBlYWNoIGNvbW1pdCdzIGV4aXN0ZW5jZS4gIElmIHdlCisJICogZG8gbm90IGhhdmUgdGhlIGNvbW1pdCBvYmplY3QgYW55d2hlcmUsIHRoZXJlIGlzIG5vIGNoYW5jZSB3ZSBoYXZlCisJICogaXQgaW4gdGhlIG9iamVjdCBzdG9yZSBvZiB0aGUgY29ycmVjdCBzdWJtb2R1bGUgYW5kIGhhdmUgaXQKKwkgKiByZWFjaGFibGUgZnJvbSBhIHJlZiwgc28gd2UgY2FuIGZhaWwgZWFybHkgd2l0aG91dCBzcGF3bmluZyByZXYtbGlzdAorCSAqIHdoaWNoIGlzIGV4cGVuc2l2ZS4KKwkgKi8KKwlpZiAoYWRkX3N1Ym1vZHVsZV9vZGIocGF0aCkpCisJCXJldHVybiAwOworCisJb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZShjb21taXRzLCBjaGVja19oYXNfY29tbWl0LCAmaGFzX2NvbW1pdCk7CisKKwlpZiAoaGFzX2NvbW1pdC5yZXN1bHQpIHsKKwkJLyoKKwkJICogRXZlbiBpZiB0aGUgc3VibW9kdWxlIGlzIGNoZWNrZWQgb3V0IGFuZCB0aGUgY29tbWl0IGlzCisJCSAqIHByZXNlbnQsIG1ha2Ugc3VyZSBpdCBleGlzdHMgaW4gdGhlIHN1Ym1vZHVsZSdzIG9iamVjdCBzdG9yZQorCQkgKiBhbmQgdGhhdCBpdCBpcyByZWFjaGFibGUgZnJvbSBhIHJlZi4KKwkJICovCisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJyZXYtbGlzdCIsICItbiIsICIxIiwgTlVMTCk7CisJCW9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoY29tbWl0cywgYXBwZW5kX29pZF90b19hcmd2LCAmY3AuYXJncyk7CisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICItLW5vdCIsICItLWFsbCIsIE5VTEwpOworCisJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCQljcC5naXRfY21kID0gMTsKKwkJY3Aubm9fc3RkaW4gPSAxOworCQljcC5kaXIgPSBwYXRoOworCisJCWlmIChjYXB0dXJlX2NvbW1hbmQoJmNwLCAmb3V0LCBHSVRfTUFYX0hFWFNaICsgMSkgfHwgb3V0LmxlbikKKwkJCWhhc19jb21taXQucmVzdWx0ID0gMDsKKworCQlzdHJidWZfcmVsZWFzZSgmb3V0KTsKKwl9CisKKwlyZXR1cm4gaGFzX2NvbW1pdC5yZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc3VibW9kdWxlX25lZWRzX3B1c2hpbmcoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICBzdHJ1Y3Qgb2lkX2FycmF5ICpjb21taXRzKQoreworCWlmICghc3VibW9kdWxlX2hhc19jb21taXRzKHIsIHBhdGgsIGNvbW1pdHMpKQorCQkvKgorCQkgKiBOT1RFOiBXZSBkbyBjb25zaWRlciBpdCBzYWZlIHRvIHJldHVybiAibm8iIGhlcmUuIFRoZQorCQkgKiBjb3JyZWN0IGFuc3dlciB3b3VsZCBiZSAiV2UgZG8gbm90IGtub3ciIGluc3RlYWQgb2YKKwkJICogIk5vIHB1c2ggbmVlZGVkIiwgYnV0IGl0IGlzIHF1aXRlIGhhcmQgdG8gY2hhbmdlCisJCSAqIHRoZSBzdWJtb2R1bGUgcG9pbnRlciB3aXRob3V0IGhhdmluZyB0aGUgc3VibW9kdWxlCisJCSAqIGFyb3VuZC4gSWYgYSB1c2VyIGRpZCBob3dldmVyIGNoYW5nZSB0aGUgc3VibW9kdWxlcworCQkgKiB3aXRob3V0IGhhdmluZyB0aGUgc3VibW9kdWxlIGFyb3VuZCwgdGhpcyBpbmRpY2F0ZXMKKwkJICogYW4gZXhwZXJ0IHdobyBrbm93cyB3aGF0IHRoZXkgYXJlIGRvaW5nIG9yIGEKKwkJICogbWFpbnRhaW5lciBpbnRlZ3JhdGluZyB3b3JrIGZyb20gb3RoZXIgcGVvcGxlLiBJbgorCQkgKiBib3RoIGNhc2VzIGl0IHNob3VsZCBiZSBzYWZlIHRvIHNraXAgdGhpcyBjaGVjay4KKwkJICovCisJCXJldHVybiAwOworCisJaWYgKGZvcl9lYWNoX3JlbW90ZV9yZWZfc3VibW9kdWxlKHBhdGgsIGhhc19yZW1vdGUsIE5VTEwpID4gMCkgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IG5lZWRzX3B1c2hpbmcgPSAwOworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgInJldi1saXN0Iik7CisJCW9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoY29tbWl0cywgYXBwZW5kX29pZF90b19hcmd2LCAmY3AuYXJncyk7CisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICItLW5vdCIsICItLXJlbW90ZXMiLCAiLW4iLCAiMSIgLCBOVUxMKTsKKworCQlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWNwLm5vX3N0ZGluID0gMTsKKwkJY3Aub3V0ID0gLTE7CisJCWNwLmRpciA9IHBhdGg7CisJCWlmIChzdGFydF9jb21tYW5kKCZjcCkpCisJCQlkaWUoXygiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0IDxjb21taXRzPiAtLW5vdCAtLXJlbW90ZXMgLW4gMScgY29tbWFuZCBpbiBzdWJtb2R1bGUgJXMiKSwKKwkJCQkJcGF0aCk7CisJCWlmIChzdHJidWZfcmVhZCgmYnVmLCBjcC5vdXQsIHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMSkpCisJCQluZWVkc19wdXNoaW5nID0gMTsKKwkJZmluaXNoX2NvbW1hbmQoJmNwKTsKKwkJY2xvc2UoY3Aub3V0KTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiBuZWVkc19wdXNoaW5nOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZmluZF91bnB1c2hlZF9zdWJtb2R1bGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICBzdHJ1Y3Qgb2lkX2FycmF5ICpjb21taXRzLAorCQkJICAgICBjb25zdCBjaGFyICpyZW1vdGVzX25hbWUsCisJCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqbmVlZHNfcHVzaGluZykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3VibW9kdWxlcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpuYW1lOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkvKiBhcmd2LmFyZ3ZbMF0gd2lsbCBiZSBpZ25vcmVkIGJ5IHNldHVwX3JldmlzaW9ucyAqLworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgImZpbmRfdW5wdXNoZWRfc3VibW9kdWxlcyIpOworCW9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoY29tbWl0cywgYXBwZW5kX29pZF90b19hcmd2LCAmYXJndik7CisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS1ub3QiKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZhcmd2LCAiLS1yZW1vdGVzPSVzIiwgcmVtb3Rlc19uYW1lKTsKKworCWNvbGxlY3RfY2hhbmdlZF9zdWJtb2R1bGVzKHIsICZzdWJtb2R1bGVzLCAmYXJndik7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKG5hbWUsICZzdWJtb2R1bGVzKSB7CisJCXN0cnVjdCBvaWRfYXJyYXkgKmNvbW1pdHMgPSBuYW1lLT51dGlsOworCQljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGU7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBOVUxMOworCisJCXN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX25hbWUociwgJm51bGxfb2lkLCBuYW1lLT5zdHJpbmcpOworCQlpZiAoc3VibW9kdWxlKQorCQkJcGF0aCA9IHN1Ym1vZHVsZS0+cGF0aDsKKwkJZWxzZQorCQkJcGF0aCA9IGRlZmF1bHRfbmFtZV9vcl9wYXRoKG5hbWUtPnN0cmluZyk7CisKKwkJaWYgKCFwYXRoKQorCQkJY29udGludWU7CisKKwkJaWYgKHN1Ym1vZHVsZV9uZWVkc19wdXNoaW5nKHIsIHBhdGgsIGNvbW1pdHMpKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KG5lZWRzX3B1c2hpbmcsIHBhdGgpOworCX0KKworCWZyZWVfc3VibW9kdWxlc19vaWRzKCZzdWJtb2R1bGVzKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKworCXJldHVybiBuZWVkc19wdXNoaW5nLT5ucjsKK30KKworc3RhdGljIGludCBwdXNoX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLAorCQkJICBjb25zdCBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsCisJCQkgIGNvbnN0IHN0cnVjdCByZWZzcGVjICpycywKKwkJCSAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwdXNoX29wdGlvbnMsCisJCQkgIGludCBkcnlfcnVuKQoreworCWlmIChmb3JfZWFjaF9yZW1vdGVfcmVmX3N1Ym1vZHVsZShwYXRoLCBoYXNfcmVtb3RlLCBOVUxMKSA+IDApIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgInB1c2giKTsKKwkJaWYgKGRyeV9ydW4pCisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLWRyeS1ydW4iKTsKKworCQlpZiAocHVzaF9vcHRpb25zICYmIHB1c2hfb3B0aW9ucy0+bnIpIHsKKwkJCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBwdXNoX29wdGlvbnMpCisJCQkJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIi0tcHVzaC1vcHRpb249JXMiLAorCQkJCQkJIGl0ZW0tPnN0cmluZyk7CisJCX0KKworCQlpZiAocmVtb3RlLT5vcmlnaW4gIT0gUkVNT1RFX1VOQ09ORklHVVJFRCkgeworCQkJaW50IGk7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHJlbW90ZS0+bmFtZSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgcnMtPnJhd19ucjsgaSsrKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcnMtPnJhd1tpXSk7CisJCX0KKworCQlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWNwLm5vX3N0ZGluID0gMTsKKwkJY3AuZGlyID0gcGF0aDsKKwkJaWYgKHJ1bl9jb21tYW5kKCZjcCkpCisJCQlyZXR1cm4gMDsKKwkJY2xvc2UoY3Aub3V0KTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFBlcmZvcm0gYSBjaGVjayBpbiB0aGUgc3VibW9kdWxlIHRvIHNlZSBpZiB0aGUgcmVtb3RlIGFuZCByZWZzcGVjIHdvcmsuCisgKiBEaWUgaWYgdGhlIHN1Ym1vZHVsZSBjYW4ndCBiZSBwdXNoZWQuCisgKi8KK3N0YXRpYyB2b2lkIHN1Ym1vZHVsZV9wdXNoX2NoZWNrKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmhlYWQsCisJCQkJIGNvbnN0IHN0cnVjdCByZW1vdGUgKnJlbW90ZSwKKwkJCQkgY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBpOworCisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAic3VibW9kdWxlLS1oZWxwZXIiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJwdXNoLWNoZWNrIik7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBoZWFkKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHJlbW90ZS0+bmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPnJhd19ucjsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHJzLT5yYXdbaV0pOworCisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJY3AuZ2l0X2NtZCA9IDE7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLm5vX3N0ZG91dCA9IDE7CisJY3AuZGlyID0gcGF0aDsKKworCS8qCisJICogU2ltcGx5IGluZGljYXRlIGlmICdzdWJtb2R1bGUtLWhlbHBlciBwdXNoLWNoZWNrJyBmYWlsZWQuCisJICogTW9yZSBkZXRhaWxlZCBlcnJvciBpbmZvcm1hdGlvbiB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRoZQorCSAqIGNoaWxkIHByb2Nlc3MuCisJICovCisJaWYgKHJ1bl9jb21tYW5kKCZjcCkpCisJCWRpZShfKCJwcm9jZXNzIGZvciBzdWJtb2R1bGUgJyVzJyBmYWlsZWQiKSwgcGF0aCk7Cit9CisKK2ludCBwdXNoX3VucHVzaGVkX3N1Ym1vZHVsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgIHN0cnVjdCBvaWRfYXJyYXkgKmNvbW1pdHMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCByZW1vdGUgKnJlbW90ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJzLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9ucywKKwkJCSAgICAgaW50IGRyeV9ydW4pCit7CisJaW50IGksIHJldCA9IDE7CisJc3RydWN0IHN0cmluZ19saXN0IG5lZWRzX3B1c2hpbmcgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWlmICghZmluZF91bnB1c2hlZF9zdWJtb2R1bGVzKHIsIGNvbW1pdHMsCisJCQkJICAgICAgcmVtb3RlLT5uYW1lLCAmbmVlZHNfcHVzaGluZykpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBWZXJpZnkgdGhhdCB0aGUgcmVtb3RlIGFuZCByZWZzcGVjIGNhbiBiZSBwcm9wYWdhdGVkIHRvIGFsbAorCSAqIHN1Ym1vZHVsZXMuICBUaGlzIGNoZWNrIGNhbiBiZSBza2lwcGVkIGlmIHRoZSByZW1vdGUgYW5kIHJlZnNwZWMKKwkgKiB3b24ndCBiZSBwcm9wYWdhdGVkIGR1ZSB0byB0aGUgcmVtb3RlIGJlaW5nIHVuY29uZmlndXJlZCAoZS5nLiBhIFVSTAorCSAqIGluc3RlYWQgb2YgYSByZW1vdGUgbmFtZSkuCisJICovCisJaWYgKHJlbW90ZS0+b3JpZ2luICE9IFJFTU9URV9VTkNPTkZJR1VSRUQpIHsKKwkJY2hhciAqaGVhZDsKKwkJc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKKworCQloZWFkID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCAmaGVhZF9vaWQsIE5VTEwpOworCQlpZiAoIWhlYWQpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IG5lZWRzX3B1c2hpbmcubnI7IGkrKykKKwkJCXN1Ym1vZHVsZV9wdXNoX2NoZWNrKG5lZWRzX3B1c2hpbmcuaXRlbXNbaV0uc3RyaW5nLAorCQkJCQkgICAgIGhlYWQsIHJlbW90ZSwgcnMpOworCQlmcmVlKGhlYWQpOworCX0KKworCS8qIEFjdHVhbGx5IHB1c2ggdGhlIHN1Ym1vZHVsZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmVlZHNfcHVzaGluZy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBuZWVkc19wdXNoaW5nLml0ZW1zW2ldLnN0cmluZzsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlB1c2hpbmcgc3VibW9kdWxlICclcydcbiIpLCBwYXRoKTsKKwkJaWYgKCFwdXNoX3N1Ym1vZHVsZShwYXRoLCByZW1vdGUsIHJzLAorCQkJCSAgICBwdXNoX29wdGlvbnMsIGRyeV9ydW4pKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiVW5hYmxlIHRvIHB1c2ggc3VibW9kdWxlICclcydcbiIpLCBwYXRoKTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbmVlZHNfcHVzaGluZywgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFwcGVuZF9vaWRfdG9fYXJyYXkoY29uc3QgY2hhciAqcmVmLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICAgaW50IGZsYWdzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBvaWRfYXJyYXkgKmFycmF5ID0gZGF0YTsKKwlvaWRfYXJyYXlfYXBwZW5kKGFycmF5LCBvaWQpOworCXJldHVybiAwOworfQorCit2b2lkIGNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHMoc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWlmICghaW5pdGlhbGl6ZWRfZmV0Y2hfcmVmX3RpcHMpIHsKKwkJZm9yX2VhY2hfcmVmKGFwcGVuZF9vaWRfdG9fYXJyYXksICZyZWZfdGlwc19iZWZvcmVfZmV0Y2gpOworCQlpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwcyA9IDE7CisJfQorCisJb2lkX2FycmF5X2FwcGVuZCgmcmVmX3RpcHNfYWZ0ZXJfZmV0Y2gsIG9pZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZV9jaGFuZ2VkX3N1Ym1vZHVsZV9wYXRocyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJc3RydWN0IHN0cmluZ19saXN0ICpjaGFuZ2VkX3N1Ym1vZHVsZV9uYW1lcykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpuYW1lOworCisJLyogTm8gbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgbm8gc3VibW9kdWxlcyBjb25maWd1cmVkICovCisJaWYgKCFzdWJtb2R1bGVfZnJvbV9wYXRoKHIsIE5VTEwsIE5VTEwpKQorCQlyZXR1cm47CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLSIpOyAvKiBhcmd2WzBdIHByb2dyYW0gbmFtZSAqLworCW9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoJnJlZl90aXBzX2FmdGVyX2ZldGNoLAorCQkJCSAgIGFwcGVuZF9vaWRfdG9fYXJndiwgJmFyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgIi0tbm90Iik7CisJb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmcmVmX3RpcHNfYmVmb3JlX2ZldGNoLAorCQkJCSAgIGFwcGVuZF9vaWRfdG9fYXJndiwgJmFyZ3YpOworCisJLyoKKwkgKiBDb2xsZWN0IGFsbCBzdWJtb2R1bGVzICh3aGV0aGVyIGNoZWNrZWQgb3V0IG9yIG5vdCkgZm9yIHdoaWNoIG5ldworCSAqIGNvbW1pdHMgaGF2ZSBiZWVuIHJlY29yZGVkIHVwc3RyZWFtIGluICJjaGFuZ2VkX3N1Ym1vZHVsZV9uYW1lcyIuCisJICovCisJY29sbGVjdF9jaGFuZ2VkX3N1Ym1vZHVsZXMociwgY2hhbmdlZF9zdWJtb2R1bGVfbmFtZXMsICZhcmd2KTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0obmFtZSwgY2hhbmdlZF9zdWJtb2R1bGVfbmFtZXMpIHsKKwkJc3RydWN0IG9pZF9hcnJheSAqY29tbWl0cyA9IG5hbWUtPnV0aWw7CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IE5VTEw7CisKKwkJc3VibW9kdWxlID0gc3VibW9kdWxlX2Zyb21fbmFtZShyLCAmbnVsbF9vaWQsIG5hbWUtPnN0cmluZyk7CisJCWlmIChzdWJtb2R1bGUpCisJCQlwYXRoID0gc3VibW9kdWxlLT5wYXRoOworCQllbHNlCisJCQlwYXRoID0gZGVmYXVsdF9uYW1lX29yX3BhdGgobmFtZS0+c3RyaW5nKTsKKworCQlpZiAoIXBhdGgpCisJCQljb250aW51ZTsKKworCQlpZiAoc3VibW9kdWxlX2hhc19jb21taXRzKHIsIHBhdGgsIGNvbW1pdHMpKSB7CisJCQlvaWRfYXJyYXlfY2xlYXIoY29tbWl0cyk7CisJCQkqbmFtZS0+c3RyaW5nID0gJ1wwJzsKKwkJfQorCX0KKworCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcyhjaGFuZ2VkX3N1Ym1vZHVsZV9uYW1lcywgMSk7CisKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlvaWRfYXJyYXlfY2xlYXIoJnJlZl90aXBzX2JlZm9yZV9mZXRjaCk7CisJb2lkX2FycmF5X2NsZWFyKCZyZWZfdGlwc19hZnRlcl9mZXRjaCk7CisJaW5pdGlhbGl6ZWRfZmV0Y2hfcmVmX3RpcHMgPSAwOworfQorCitpbnQgc3VibW9kdWxlX3RvdWNoZXNfaW5fcmFuZ2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICAgc3RydWN0IG9iamVjdF9pZCAqZXhjbF9vaWQsCisJCQkgICAgICAgc3RydWN0IG9iamVjdF9pZCAqaW5jbF9vaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHN1YnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXQ7CisKKwkvKiBObyBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBubyBzdWJtb2R1bGVzIGNvbmZpZ3VyZWQgKi8KKwlpZiAoIXN1Ym1vZHVsZV9mcm9tX3BhdGgociwgTlVMTCwgTlVMTCkpCisJCXJldHVybiAwOworCisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS0iKTsgLyogYXJnc1swXSBwcm9ncmFtIG5hbWUgKi8KKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9pZF90b19oZXgoaW5jbF9vaWQpKTsKKwlpZiAoIWlzX251bGxfb2lkKGV4Y2xfb2lkKSkgeworCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLW5vdCIpOworCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9pZF90b19oZXgoZXhjbF9vaWQpKTsKKwl9CisKKwljb2xsZWN0X2NoYW5nZWRfc3VibW9kdWxlcyhyLCAmc3VicywgJmFyZ3MpOworCXJldCA9IHN1YnMubnI7CisKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKworCWZyZWVfc3VibW9kdWxlc19vaWRzKCZzdWJzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3Qgc3VibW9kdWxlX3BhcmFsbGVsX2ZldGNoIHsKKwlpbnQgY291bnQ7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJnczsKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqcjsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IGNvbW1hbmRfbGluZV9vcHRpb247CisJaW50IGRlZmF1bHRfb3B0aW9uOworCWludCBxdWlldDsKKwlpbnQgcmVzdWx0OworCisJc3RydWN0IHN0cmluZ19saXN0IGNoYW5nZWRfc3VibW9kdWxlX25hbWVzOworCisJLyogUGVuZGluZyBmZXRjaGVzIGJ5IE9JRHMgKi8KKwlzdHJ1Y3QgZmV0Y2hfdGFzayAqKm9pZF9mZXRjaF90YXNrczsKKwlpbnQgb2lkX2ZldGNoX3Rhc2tzX25yLCBvaWRfZmV0Y2hfdGFza3NfYWxsb2M7CisKKwlzdHJ1Y3Qgc3RyYnVmIHN1Ym1vZHVsZXNfd2l0aF9lcnJvcnM7Cit9OworI2RlZmluZSBTUEZfSU5JVCB7MCwgQVJHVl9BUlJBWV9JTklULCBOVUxMLCBOVUxMLCAwLCAwLCAwLCAwLCBcCisJCSAgU1RSSU5HX0xJU1RfSU5JVF9EVVAsIFwKKwkJICBOVUxMLCAwLCAwLCBTVFJCVUZfSU5JVH0KKworc3RhdGljIGludCBnZXRfZmV0Y2hfcmVjdXJzZV9jb25maWcoY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlLAorCQkJCSAgICBzdHJ1Y3Qgc3VibW9kdWxlX3BhcmFsbGVsX2ZldGNoICpzcGYpCit7CisJaWYgKHNwZi0+Y29tbWFuZF9saW5lX29wdGlvbiAhPSBSRUNVUlNFX1NVQk1PRFVMRVNfREVGQVVMVCkKKwkJcmV0dXJuIHNwZi0+Y29tbWFuZF9saW5lX29wdGlvbjsKKworCWlmIChzdWJtb2R1bGUpIHsKKwkJY2hhciAqa2V5OworCQljb25zdCBjaGFyICp2YWx1ZTsKKworCQlpbnQgZmV0Y2hfcmVjdXJzZSA9IHN1Ym1vZHVsZS0+ZmV0Y2hfcmVjdXJzZTsKKwkJa2V5ID0geHN0cmZtdCgic3VibW9kdWxlLiVzLmZldGNoUmVjdXJzZVN1Ym1vZHVsZXMiLCBzdWJtb2R1bGUtPm5hbWUpOworCQlpZiAoIXJlcG9fY29uZmlnX2dldF9zdHJpbmdfY29uc3Qoc3BmLT5yLCBrZXksICZ2YWx1ZSkpIHsKKwkJCWZldGNoX3JlY3Vyc2UgPSBwYXJzZV9mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGtleSwgdmFsdWUpOworCQl9CisJCWZyZWUoa2V5KTsKKworCQlpZiAoZmV0Y2hfcmVjdXJzZSAhPSBSRUNVUlNFX1NVQk1PRFVMRVNfTk9ORSkKKwkJCS8qIGxvY2FsIGNvbmZpZyBvdmVycnVsZXMgZXZlcnl0aGluZyBleGNlcHQgY29tbWFuZGxpbmUgKi8KKwkJCXJldHVybiBmZXRjaF9yZWN1cnNlOworCX0KKworCXJldHVybiBzcGYtPmRlZmF1bHRfb3B0aW9uOworfQorCisvKgorICogRmV0Y2ggaW4gcHJvZ3Jlc3MgKGlmIGNhbGxiYWNrIGRhdGEpIG9yCisgKiBwZW5kaW5nIChpZiBpbiBvaWRfZmV0Y2hfdGFza3MgaW4gc3RydWN0IHN1Ym1vZHVsZV9wYXJhbGxlbF9mZXRjaCkKKyAqLworc3RydWN0IGZldGNoX3Rhc2sgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXBvOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwl1bnNpZ25lZCBmcmVlX3N1YiA6IDE7IC8qIERvIHdlIG5lZWQgdG8gZnJlZSB0aGUgc3VibW9kdWxlPyAqLworCisJc3RydWN0IG9pZF9hcnJheSAqY29tbWl0czsgLyogRW5zdXJlIHRoZXNlIGNvbW1pdHMgYXJlIGZldGNoZWQgKi8KK307CisKKy8qKgorICogV2hlbiBhIHN1Ym1vZHVsZSBpcyBub3QgZGVmaW5lZCBpbiAuZ2l0bW9kdWxlcywgd2UgY2Fubm90IGFjY2VzcyBpdAorICogdmlhIHRoZSByZWd1bGFyIHN1Ym1vZHVsZS1jb25maWcuIENyZWF0ZSBhIGZha2Ugc3VibW9kdWxlLCB3aGljaCB3ZSBjYW4KKyAqIHdvcmsgb24uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpnZXRfbm9uX2dpdG1vZHVsZXNfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN1Ym1vZHVsZSAqcmV0ID0gTlVMTDsKKwljb25zdCBjaGFyICpuYW1lID0gZGVmYXVsdF9uYW1lX29yX3BhdGgocGF0aCk7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJcmV0ID0geG1hbGxvYyhzaXplb2YoKnJldCkpOworCW1lbXNldChyZXQsIDAsIHNpemVvZigqcmV0KSk7CisJcmV0LT5wYXRoID0gbmFtZTsKKwlyZXQtPm5hbWUgPSBuYW1lOworCisJcmV0dXJuIChjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICopIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmZXRjaF90YXNrICpmZXRjaF90YXNrX2NyZWF0ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGZldGNoX3Rhc2sgKnRhc2sgPSB4bWFsbG9jKHNpemVvZigqdGFzaykpOworCW1lbXNldCh0YXNrLCAwLCBzaXplb2YoKnRhc2spKTsKKworCXRhc2stPnN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgociwgJm51bGxfb2lkLCBwYXRoKTsKKwlpZiAoIXRhc2stPnN1YikgeworCQkvKgorCQkgKiBObyBlbnRyeSBpbiAuZ2l0bW9kdWxlcz8gVGVjaG5pY2FsbHkgbm90IGEgc3VibW9kdWxlLAorCQkgKiBidXQgaGlzdG9yaWNhbGx5IHdlIHN1cHBvcnRlZCByZXBvc2l0b3JpZXMgdGhhdCBoYXBwZW4gdG8gYmUKKwkJICogaW4tcGxhY2Ugd2hlcmUgYSBnaXRsaW5rIGlzLiBLZWVwIHN1cHBvcnRpbmcgdGhlbS4KKwkJICovCisJCXRhc2stPnN1YiA9IGdldF9ub25fZ2l0bW9kdWxlc19zdWJtb2R1bGUocGF0aCk7CisJCWlmICghdGFzay0+c3ViKSB7CisJCQlmcmVlKHRhc2spOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQl0YXNrLT5mcmVlX3N1YiA9IDE7CisJfQorCisJcmV0dXJuIHRhc2s7Cit9CisKK3N0YXRpYyB2b2lkIGZldGNoX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgZmV0Y2hfdGFzayAqcCkKK3sKKwlpZiAocC0+ZnJlZV9zdWIpCisJCWZyZWUoKHZvaWQqKXAtPnN1Yik7CisJcC0+ZnJlZV9zdWIgPSAwOworCXAtPnN1YiA9IE5VTEw7CisKKwlpZiAocC0+cmVwbykKKwkJcmVwb19jbGVhcihwLT5yZXBvKTsKKwlGUkVFX0FORF9OVUxMKHAtPnJlcG8pOworfQorCitzdGF0aWMgc3RydWN0IHJlcG9zaXRvcnkgKmdldF9zdWJtb2R1bGVfcmVwb19mb3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkJCQkgY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViKQoreworCXN0cnVjdCByZXBvc2l0b3J5ICpyZXQgPSB4bWFsbG9jKHNpemVvZigqcmV0KSk7CisKKwlpZiAocmVwb19zdWJtb2R1bGVfaW5pdChyZXQsIHIsIHN1YikpIHsKKwkJLyoKKwkJICogTm8gZW50cnkgaW4gLmdpdG1vZHVsZXM/IFRlY2huaWNhbGx5IG5vdCBhIHN1Ym1vZHVsZSwKKwkJICogYnV0IGhpc3RvcmljYWxseSB3ZSBzdXBwb3J0ZWQgcmVwb3NpdG9yaWVzIHRoYXQgaGFwcGVuIHRvIGJlCisJCSAqIGluLXBsYWNlIHdoZXJlIGEgZ2l0bGluayBpcy4gS2VlcCBzdXBwb3J0aW5nIHRoZW0uCisJCSAqLworCQlzdHJ1Y3Qgc3RyYnVmIGdpdGRpciA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfcmVwb193b3JrdHJlZV9wYXRoKCZnaXRkaXIsIHIsICIlcy8uZ2l0Iiwgc3ViLT5wYXRoKTsKKwkJaWYgKHJlcG9faW5pdChyZXQsIGdpdGRpci5idWYsIE5VTEwpKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmZ2l0ZGlyKTsKKwkJCWZyZWUocmV0KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZnaXRkaXIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X25leHRfc3VibW9kdWxlKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjcCwKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmVyciwgdm9pZCAqZGF0YSwgdm9pZCAqKnRhc2tfY2IpCit7CisJc3RydWN0IHN1Ym1vZHVsZV9wYXJhbGxlbF9mZXRjaCAqc3BmID0gZGF0YTsKKworCWZvciAoOyBzcGYtPmNvdW50IDwgc3BmLT5yLT5pbmRleC0+Y2FjaGVfbnI7IHNwZi0+Y291bnQrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gc3BmLT5yLT5pbmRleC0+Y2FjaGVbc3BmLT5jb3VudF07CisJCWNvbnN0IGNoYXIgKmRlZmF1bHRfYXJndjsKKwkJc3RydWN0IGZldGNoX3Rhc2sgKnRhc2s7CisKKwkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKworCQl0YXNrID0gZmV0Y2hfdGFza19jcmVhdGUoc3BmLT5yLCBjZS0+bmFtZSk7CisJCWlmICghdGFzaykKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoZ2V0X2ZldGNoX3JlY3Vyc2VfY29uZmlnKHRhc2stPnN1Yiwgc3BmKSkKKwkJeworCQlkZWZhdWx0OgorCQljYXNlIFJFQ1VSU0VfU1VCTU9EVUxFU19ERUZBVUxUOgorCQljYXNlIFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQ6CisJCQlpZiAoIXRhc2stPnN1YiB8fAorCQkJICAgICFzdHJpbmdfbGlzdF9sb29rdXAoCisJCQkJCSZzcGYtPmNoYW5nZWRfc3VibW9kdWxlX25hbWVzLAorCQkJCQl0YXNrLT5zdWItPm5hbWUpKQorCQkJCWNvbnRpbnVlOworCQkJZGVmYXVsdF9hcmd2ID0gIm9uLWRlbWFuZCI7CisJCQlicmVhazsKKwkJY2FzZSBSRUNVUlNFX1NVQk1PRFVMRVNfT046CisJCQlkZWZhdWx0X2FyZ3YgPSAieWVzIjsKKwkJCWJyZWFrOworCQljYXNlIFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY6CisJCQljb250aW51ZTsKKwkJfQorCisJCXRhc2stPnJlcG8gPSBnZXRfc3VibW9kdWxlX3JlcG9fZm9yKHNwZi0+ciwgdGFzay0+c3ViKTsKKwkJaWYgKHRhc2stPnJlcG8pIHsKKwkJCXN0cnVjdCBzdHJidWYgc3VibW9kdWxlX3ByZWZpeCA9IFNUUkJVRl9JTklUOworCQkJY2hpbGRfcHJvY2Vzc19pbml0KGNwKTsKKwkJCWNwLT5kaXIgPSB0YXNrLT5yZXBvLT5naXRkaXI7CisJCQlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2Vudl9pbl9naXRkaXIoJmNwLT5lbnZfYXJyYXkpOworCQkJY3AtPmdpdF9jbWQgPSAxOworCQkJaWYgKCFzcGYtPnF1aWV0KQorCQkJCXN0cmJ1Zl9hZGRmKGVyciwgXygiRmV0Y2hpbmcgc3VibW9kdWxlICVzJXNcbiIpLAorCQkJCQkgICAgc3BmLT5wcmVmaXgsIGNlLT5uYW1lKTsKKwkJCWFyZ3ZfYXJyYXlfaW5pdCgmY3AtPmFyZ3MpOworCQkJYXJndl9hcnJheV9wdXNodigmY3AtPmFyZ3MsIHNwZi0+YXJncy5hcmd2KTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AtPmFyZ3MsIGRlZmF1bHRfYXJndik7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCAiLS1zdWJtb2R1bGUtcHJlZml4Iik7CisKKwkJCXN0cmJ1Zl9hZGRmKCZzdWJtb2R1bGVfcHJlZml4LCAiJXMlcy8iLAorCQkJCQkJICAgICAgIHNwZi0+cHJlZml4LAorCQkJCQkJICAgICAgIHRhc2stPnN1Yi0+cGF0aCk7CisJCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCBzdWJtb2R1bGVfcHJlZml4LmJ1Zik7CisKKwkJCXNwZi0+Y291bnQrKzsKKwkJCSp0YXNrX2NiID0gdGFzazsKKworCQkJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9wcmVmaXgpOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisKKwkJCWZldGNoX3Rhc2tfcmVsZWFzZSh0YXNrKTsKKwkJCWZyZWUodGFzayk7CisKKwkJCS8qCisJCQkgKiBBbiBlbXB0eSBkaXJlY3RvcnkgaXMgbm9ybWFsLAorCQkJICogdGhlIHN1Ym1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQKKwkJCSAqLworCQkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSAmJgorCQkJICAgICFpc19lbXB0eV9kaXIoY2UtPm5hbWUpKSB7CisJCQkJc3BmLT5yZXN1bHQgPSAxOworCQkJCXN0cmJ1Zl9hZGRmKGVyciwKKwkJCQkJICAgIF8oIkNvdWxkIG5vdCBhY2Nlc3Mgc3VibW9kdWxlICclcydcbiIpLAorCQkJCQkgICAgY2UtPm5hbWUpOworCQkJfQorCQl9CisJfQorCisJaWYgKHNwZi0+b2lkX2ZldGNoX3Rhc2tzX25yKSB7CisJCXN0cnVjdCBmZXRjaF90YXNrICp0YXNrID0KKwkJCXNwZi0+b2lkX2ZldGNoX3Rhc2tzW3NwZi0+b2lkX2ZldGNoX3Rhc2tzX25yIC0gMV07CisJCXN0cnVjdCBzdHJidWYgc3VibW9kdWxlX3ByZWZpeCA9IFNUUkJVRl9JTklUOworCQlzcGYtPm9pZF9mZXRjaF90YXNrc19uci0tOworCisJCXN0cmJ1Zl9hZGRmKCZzdWJtb2R1bGVfcHJlZml4LCAiJXMlcy8iLAorCQkJICAgIHNwZi0+cHJlZml4LCB0YXNrLT5zdWItPnBhdGgpOworCisJCWNoaWxkX3Byb2Nlc3NfaW5pdChjcCk7CisJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52X2luX2dpdGRpcigmY3AtPmVudl9hcnJheSk7CisJCWNwLT5naXRfY21kID0gMTsKKwkJY3AtPmRpciA9IHRhc2stPnJlcG8tPmdpdGRpcjsKKworCQlhcmd2X2FycmF5X2luaXQoJmNwLT5hcmdzKTsKKwkJYXJndl9hcnJheV9wdXNodigmY3AtPmFyZ3MsIHNwZi0+YXJncy5hcmd2KTsKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgIm9uLWRlbWFuZCIpOworCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCAiLS1zdWJtb2R1bGUtcHJlZml4Iik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AtPmFyZ3MsIHN1Ym1vZHVsZV9wcmVmaXguYnVmKTsKKworCQkvKiBORUVEU1dPUks6IGhhdmUgZ2V0X2RlZmF1bHRfcmVtb3RlIGZyb20gc3VibW9kdWxlLS1oZWxwZXIgKi8KKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgIm9yaWdpbiIpOworCQlvaWRfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKHRhc2stPmNvbW1pdHMsCisJCQkJCSAgYXBwZW5kX29pZF90b19hcmd2LCAmY3AtPmFyZ3MpOworCisJCSp0YXNrX2NiID0gdGFzazsKKwkJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9wcmVmaXgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmZXRjaF9zdGFydF9mYWlsdXJlKHN0cnVjdCBzdHJidWYgKmVyciwKKwkJCSAgICAgICB2b2lkICpjYiwgdm9pZCAqdGFza19jYikKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlX3BhcmFsbGVsX2ZldGNoICpzcGYgPSBjYjsKKwlzdHJ1Y3QgZmV0Y2hfdGFzayAqdGFzayA9IHRhc2tfY2I7CisKKwlzcGYtPnJlc3VsdCA9IDE7CisKKwlmZXRjaF90YXNrX3JlbGVhc2UodGFzayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X21pc3NpbmdfaW5fc3ViKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVwb3NpdG9yeSAqc3VicmVwbyA9IGRhdGE7CisKKwllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvaWRfb2JqZWN0X2luZm8oc3VicmVwbywgb2lkLCBOVUxMKTsKKworCXJldHVybiB0eXBlICE9IE9CSl9DT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfZmluaXNoKGludCByZXR2YWx1ZSwgc3RydWN0IHN0cmJ1ZiAqZXJyLAorCQkJdm9pZCAqY2IsIHZvaWQgKnRhc2tfY2IpCit7CisJc3RydWN0IHN1Ym1vZHVsZV9wYXJhbGxlbF9mZXRjaCAqc3BmID0gY2I7CisJc3RydWN0IGZldGNoX3Rhc2sgKnRhc2sgPSB0YXNrX2NiOworCisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCXN0cnVjdCBvaWRfYXJyYXkgKmNvbW1pdHM7CisKKwlpZiAoIXRhc2sgfHwgIXRhc2stPnN1YikKKwkJQlVHKCJjYWxsYmFjayBjb29raWUgYm9ndXMiKTsKKworCWlmIChyZXR2YWx1ZSkgeworCQkvKgorCQkgKiBORUVEU1dPUks6IFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIG92ZXJhbGwgZmV0Y2gKKwkJICogZmFpbGVkLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgYmUgYSBzdWJzZXF1ZW50IGZldGNoCisJCSAqIGJ5IGNvbW1pdCBoYXNoIHRoYXQgbWlnaHQgd29yay4gSXQgbWF5IGJlIGEgZ29vZAorCQkgKiBpZGVhIHRvIG5vdCBpbmRpY2F0ZSBmYWlsdXJlIGluIHRoaXMgY2FzZSwgYW5kIG9ubHkKKwkJICogaW5kaWNhdGUgZmFpbHVyZSBpZiB0aGUgc3Vic2VxdWVudCBmZXRjaCBmYWlscy4KKwkJICovCisJCXNwZi0+cmVzdWx0ID0gMTsKKworCQlzdHJidWZfYWRkZigmc3BmLT5zdWJtb2R1bGVzX3dpdGhfZXJyb3JzLCAiXHQlc1xuIiwKKwkJCSAgICB0YXNrLT5zdWItPm5hbWUpOworCX0KKworCS8qIElzIHRoaXMgdGhlIHNlY29uZCB0aW1lIHdlIHByb2Nlc3MgdGhpcyBzdWJtb2R1bGU/ICovCisJaWYgKHRhc2stPmNvbW1pdHMpCisJCWdvdG8gb3V0OworCisJaXQgPSBzdHJpbmdfbGlzdF9sb29rdXAoJnNwZi0+Y2hhbmdlZF9zdWJtb2R1bGVfbmFtZXMsIHRhc2stPnN1Yi0+bmFtZSk7CisJaWYgKCFpdCkKKwkJLyogQ291bGQgYmUgYW4gdW5jaGFuZ2VkIHN1Ym1vZHVsZSwgbm90IGNvbnRhaW5lZCBpbiB0aGUgbGlzdCAqLworCQlnb3RvIG91dDsKKworCWNvbW1pdHMgPSBpdC0+dXRpbDsKKwlvaWRfYXJyYXlfZmlsdGVyKGNvbW1pdHMsCisJCQkgY29tbWl0X21pc3NpbmdfaW5fc3ViLAorCQkJIHRhc2stPnJlcG8pOworCisJLyogQXJlIHRoZXJlIGNvbW1pdHMgd2Ugd2FudCwgYnV0IGRvIG5vdCBleGlzdD8gKi8KKwlpZiAoY29tbWl0cy0+bnIpIHsKKwkJdGFzay0+Y29tbWl0cyA9IGNvbW1pdHM7CisJCUFMTE9DX0dST1coc3BmLT5vaWRfZmV0Y2hfdGFza3MsCisJCQkgICBzcGYtPm9pZF9mZXRjaF90YXNrc19uciArIDEsCisJCQkgICBzcGYtPm9pZF9mZXRjaF90YXNrc19hbGxvYyk7CisJCXNwZi0+b2lkX2ZldGNoX3Rhc2tzW3NwZi0+b2lkX2ZldGNoX3Rhc2tzX25yXSA9IHRhc2s7CisJCXNwZi0+b2lkX2ZldGNoX3Rhc2tzX25yKys7CisJCXJldHVybiAwOworCX0KKworb3V0OgorCWZldGNoX3Rhc2tfcmVsZWFzZSh0YXNrKTsKKworCXJldHVybiAwOworfQorCitpbnQgZmV0Y2hfcG9wdWxhdGVkX3N1Ym1vZHVsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKm9wdGlvbnMsCisJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgY29tbWFuZF9saW5lX29wdGlvbiwKKwkJCSAgICAgICBpbnQgZGVmYXVsdF9vcHRpb24sCisJCQkgICAgICAgaW50IHF1aWV0LCBpbnQgbWF4X3BhcmFsbGVsX2pvYnMpCit7CisJaW50IGk7CisJc3RydWN0IHN1Ym1vZHVsZV9wYXJhbGxlbF9mZXRjaCBzcGYgPSBTUEZfSU5JVDsKKworCXNwZi5yID0gcjsKKwlzcGYuY29tbWFuZF9saW5lX29wdGlvbiA9IGNvbW1hbmRfbGluZV9vcHRpb247CisJc3BmLmRlZmF1bHRfb3B0aW9uID0gZGVmYXVsdF9vcHRpb247CisJc3BmLnF1aWV0ID0gcXVpZXQ7CisJc3BmLnByZWZpeCA9IHByZWZpeDsKKworCWlmICghci0+d29ya3RyZWUpCisJCWdvdG8gb3V0OworCisJaWYgKHJlcG9fcmVhZF9pbmRleChyKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlhcmd2X2FycmF5X3B1c2goJnNwZi5hcmdzLCAiZmV0Y2giKTsKKwlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy0+YXJnYzsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2goJnNwZi5hcmdzLCBvcHRpb25zLT5hcmd2W2ldKTsKKwlhcmd2X2FycmF5X3B1c2goJnNwZi5hcmdzLCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdCIpOworCS8qIGRlZmF1bHQgdmFsdWUsICItLXN1Ym1vZHVsZS1wcmVmaXgiIGFuZCBpdHMgdmFsdWUgYXJlIGFkZGVkIGxhdGVyICovCisKKwljYWxjdWxhdGVfY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHMociwgJnNwZi5jaGFuZ2VkX3N1Ym1vZHVsZV9uYW1lcyk7CisJc3RyaW5nX2xpc3Rfc29ydCgmc3BmLmNoYW5nZWRfc3VibW9kdWxlX25hbWVzKTsKKwlydW5fcHJvY2Vzc2VzX3BhcmFsbGVsX3RyMihtYXhfcGFyYWxsZWxfam9icywKKwkJCQkgICBnZXRfbmV4dF9zdWJtb2R1bGUsCisJCQkJICAgZmV0Y2hfc3RhcnRfZmFpbHVyZSwKKwkJCQkgICBmZXRjaF9maW5pc2gsCisJCQkJICAgJnNwZiwKKwkJCQkgICAic3VibW9kdWxlIiwgInBhcmFsbGVsL2ZldGNoIik7CisKKwlpZiAoc3BmLnN1Ym1vZHVsZXNfd2l0aF9lcnJvcnMubGVuID4gMCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIkVycm9ycyBkdXJpbmcgc3VibW9kdWxlIGZldGNoOlxuJXMiKSwKKwkJCXNwZi5zdWJtb2R1bGVzX3dpdGhfZXJyb3JzLmJ1Zik7CisKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJnNwZi5hcmdzKTsKK291dDoKKwlmcmVlX3N1Ym1vZHVsZXNfb2lkcygmc3BmLmNoYW5nZWRfc3VibW9kdWxlX25hbWVzKTsKKwlyZXR1cm4gc3BmLnJlc3VsdDsKK30KKwordW5zaWduZWQgaXNfc3VibW9kdWxlX21vZGlmaWVkKGNvbnN0IGNoYXIgKnBhdGgsIGludCBpZ25vcmVfdW50cmFja2VkKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZnA7CisJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlID0gMDsKKwljb25zdCBjaGFyICpnaXRfZGlyOworCWludCBpZ25vcmVfY3BfZXhpdF9jb2RlID0gMDsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy8uZ2l0IiwgcGF0aCk7CisJZ2l0X2RpciA9IHJlYWRfZ2l0ZmlsZShidWYuYnVmKTsKKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBidWYuYnVmOworCWlmICghaXNfZ2l0X2RpcmVjdG9yeShnaXRfZGlyKSkgeworCQlpZiAoaXNfZGlyZWN0b3J5KGdpdF9kaXIpKQorCQkJZGllKF8oIiclcycgbm90IHJlY29nbml6ZWQgYXMgYSBnaXQgcmVwb3NpdG9yeSIpLCBnaXRfZGlyKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCS8qIFRoZSBzdWJtb2R1bGUgaXMgbm90IGNoZWNrZWQgb3V0LCBzbyBpdCBpcyBub3QgbW9kaWZpZWQgKi8KKwkJcmV0dXJuIDA7CisJfQorCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJzdGF0dXMiLCAiLS1wb3JjZWxhaW49MiIsIE5VTEwpOworCWlmIChpZ25vcmVfdW50cmFja2VkKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItdW5vIik7CisKKwlwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudigmY3AuZW52X2FycmF5KTsKKwljcC5naXRfY21kID0gMTsKKwljcC5ub19zdGRpbiA9IDE7CisJY3Aub3V0ID0gLTE7CisJY3AuZGlyID0gcGF0aDsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQlkaWUoXygiQ291bGQgbm90IHJ1biAnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj0yJyBpbiBzdWJtb2R1bGUgJXMiKSwgcGF0aCk7CisKKwlmcCA9IHhmZG9wZW4oY3Aub3V0LCAiciIpOworCXdoaWxlIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIGZwLCAnXG4nKSAhPSBFT0YpIHsKKwkJLyogcmVndWxhciB1bnRyYWNrZWQgZmlsZXMgKi8KKwkJaWYgKGJ1Zi5idWZbMF0gPT0gJz8nKQorCQkJZGlydHlfc3VibW9kdWxlIHw9IERJUlRZX1NVQk1PRFVMRV9VTlRSQUNLRUQ7CisKKwkJaWYgKGJ1Zi5idWZbMF0gPT0gJ3UnIHx8CisJCSAgICBidWYuYnVmWzBdID09ICcxJyB8fAorCQkgICAgYnVmLmJ1ZlswXSA9PSAnMicpIHsKKwkJCS8qIFQgPSBsaW5lIHR5cGUsIFhZID0gc3RhdHVzLCBTU1NTID0gc3VibW9kdWxlIHN0YXRlICovCisJCQlpZiAoYnVmLmxlbiA8IHN0cmxlbigiVCBYWSBTU1NTIikpCisJCQkJQlVHKCJpbnZhbGlkIHN0YXR1cyAtLXBvcmNlbGFpbj0yIGxpbmUgJXMiLAorCQkJCSAgICBidWYuYnVmKTsKKworCQkJaWYgKGJ1Zi5idWZbNV0gPT0gJ1MnICYmIGJ1Zi5idWZbOF0gPT0gJ1UnKQorCQkJCS8qIG5lc3RlZCB1bnRyYWNrZWQgZmlsZSAqLworCQkJCWRpcnR5X3N1Ym1vZHVsZSB8PSBESVJUWV9TVUJNT0RVTEVfVU5UUkFDS0VEOworCisJCQlpZiAoYnVmLmJ1ZlswXSA9PSAndScgfHwKKwkJCSAgICBidWYuYnVmWzBdID09ICcyJyB8fAorCQkJICAgIG1lbWNtcChidWYuYnVmICsgNSwgIlMuLlUiLCA0KSkKKwkJCQkvKiBvdGhlciBjaGFuZ2UgKi8KKwkJCQlkaXJ0eV9zdWJtb2R1bGUgfD0gRElSVFlfU1VCTU9EVUxFX01PRElGSUVEOworCQl9CisKKwkJaWYgKChkaXJ0eV9zdWJtb2R1bGUgJiBESVJUWV9TVUJNT0RVTEVfTU9ESUZJRUQpICYmCisJCSAgICAoKGRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9VTlRSQUNLRUQpIHx8CisJCSAgICAgaWdub3JlX3VudHJhY2tlZCkpIHsKKwkJCS8qCisJCQkgKiBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBhbnkgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tCisJCQkgKiB0aGUgY2hpbGQgYW55IG1vcmUsIG5laXRoZXIgb3V0cHV0IG5vciBpdHMgZXhpdCBjb2RlLgorCQkJICovCisJCQlpZ25vcmVfY3BfZXhpdF9jb2RlID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZjbG9zZShmcCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNwKSAmJiAhaWdub3JlX2NwX2V4aXRfY29kZSkKKwkJZGllKF8oIidnaXQgc3RhdHVzIC0tcG9yY2VsYWluPTInIGZhaWxlZCBpbiBzdWJtb2R1bGUgJXMiKSwgcGF0aCk7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gZGlydHlfc3VibW9kdWxlOworfQorCitpbnQgc3VibW9kdWxlX3VzZXNfZ2l0ZmlsZShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsKKwkJInN1Ym1vZHVsZSIsCisJCSJmb3JlYWNoIiwKKwkJIi0tcXVpZXQiLAorCQkiLS1yZWN1cnNpdmUiLAorCQkidGVzdCAtZiAuZ2l0IiwKKwkJTlVMTCwKKwl9OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZ2l0X2RpcjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy8uZ2l0IiwgcGF0aCk7CisJZ2l0X2RpciA9IHJlYWRfZ2l0ZmlsZShidWYuYnVmKTsKKwlpZiAoIWdpdF9kaXIpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiAwOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCS8qIE5vdyB0ZXN0IHRoYXQgYWxsIG5lc3RlZCBzdWJtb2R1bGVzIHVzZSBhIGdpdGZpbGUgdG9vICovCisJY3AuYXJndiA9IGFyZ3Y7CisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJY3AuZ2l0X2NtZCA9IDE7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLm5vX3N0ZGVyciA9IDE7CisJY3Aubm9fc3Rkb3V0ID0gMTsKKwljcC5kaXIgPSBwYXRoOworCWlmIChydW5fY29tbWFuZCgmY3ApKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgaWYgaXQgaXMgYSBiYWQgaWRlYSB0byByZW1vdmUgYSBzdWJtb2R1bGUsIGkuZS4gaWYgd2UnZCBsb3NlIGRhdGEKKyAqIHdoZW4gZG9pbmcgc28uCisgKgorICogUmV0dXJuIDEgaWYgd2UnZCBsb3NlIGRhdGEsIHJldHVybiAwIGlmIHRoZSByZW1vdmFsIGlzIGZpbmUsCisgKiBhbmQgbmVnYXRpdmUgdmFsdWVzIGZvciBlcnJvcnMuCisgKi8KK2ludCBiYWRfdG9fcmVtb3ZlX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJaWYgKCFmaWxlX2V4aXN0cyhwYXRoKSB8fCBpc19lbXB0eV9kaXIocGF0aCkpCisJCXJldHVybiAwOworCisJaWYgKCFzdWJtb2R1bGVfdXNlc19naXRmaWxlKHBhdGgpKQorCQlyZXR1cm4gMTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJzdGF0dXMiLCAiLS1wb3JjZWxhaW4iLAorCQkJCSAgICItLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUiLCBOVUxMKTsKKworCWlmIChmbGFncyAmIFNVQk1PRFVMRV9SRU1PVkFMX0lHTk9SRV9VTlRSQUNLRUQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi11bm8iKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi11YWxsIik7CisKKwlpZiAoIShmbGFncyAmIFNVQk1PRFVMRV9SRU1PVkFMX0lHTk9SRV9JR05PUkVEX1VOVFJBQ0tFRCkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0taWdub3JlZCIpOworCisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisJY3AuZ2l0X2NtZCA9IDE7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLm91dCA9IC0xOworCWNwLmRpciA9IHBhdGg7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkgeworCQlpZiAoZmxhZ3MgJiBTVUJNT0RVTEVfUkVNT1ZBTF9ESUVfT05fRVJST1IpCisJCQlkaWUoXygiY291bGQgbm90IHN0YXJ0ICdnaXQgc3RhdHVzJyBpbiBzdWJtb2R1bGUgJyVzJyIpLAorCQkJCXBhdGgpOworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJbGVuID0gc3RyYnVmX3JlYWQoJmJ1ZiwgY3Aub3V0LCAxMDI0KTsKKwlpZiAobGVuID4gMikKKwkJcmV0ID0gMTsKKwljbG9zZShjcC5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjcCkpIHsKKwkJaWYgKGZsYWdzICYgU1VCTU9EVUxFX1JFTU9WQUxfRElFX09OX0VSUk9SKQorCQkJZGllKF8oImNvdWxkIG5vdCBydW4gJ2dpdCBzdGF0dXMnIGluIHN1Ym1vZHVsZSAnJXMnIiksCisJCQkJcGF0aCk7CisJCXJldCA9IC0xOworCX0KK291dDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHN1Ym1vZHVsZV91bnNldF9jb3JlX3dvcmt0cmVlKGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YikKK3sKKwljaGFyICpjb25maWdfcGF0aCA9IHhzdHJmbXQoIiVzL21vZHVsZXMvJXMvY29uZmlnIiwKKwkJCQkgICAgZ2V0X2dpdF9kaXIoKSwgc3ViLT5uYW1lKTsKKworCWlmIChnaXRfY29uZmlnX3NldF9pbl9maWxlX2dlbnRseShjb25maWdfcGF0aCwgImNvcmUud29ya3RyZWUiLCBOVUxMKSkKKwkJd2FybmluZyhfKCJDb3VsZCBub3QgdW5zZXQgY29yZS53b3JrdHJlZSBzZXR0aW5nIGluIHN1Ym1vZHVsZSAnJXMnIiksCisJCQkgIHN1Yi0+cGF0aCk7CisKKwlmcmVlKGNvbmZpZ19wYXRoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9zdXBlcl9wcmVmaXhfb3JfZW1wdHkodm9pZCkKK3sKKwljb25zdCBjaGFyICpzID0gZ2V0X3N1cGVyX3ByZWZpeCgpOworCWlmICghcykKKwkJcyA9ICIiOworCXJldHVybiBzOworfQorCitzdGF0aWMgaW50IHN1Ym1vZHVsZV9oYXNfZGlydHlfaW5kZXgoY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisKKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiZGlmZi1pbmRleCIsICItLXF1aWV0IiwKKwkJCQkgICAiLS1jYWNoZWQiLCAiSEVBRCIsIE5VTEwpOworCWNwLm5vX3N0ZGluID0gMTsKKwljcC5ub19zdGRvdXQgPSAxOworCWNwLmRpciA9IHN1Yi0+cGF0aDsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQlkaWUoXygiY291bGQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgJyVzJyIpLCBzdWItPnBhdGgpOworCisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZjcCk7Cit9CisKK3N0YXRpYyB2b2lkIHN1Ym1vZHVsZV9yZXNldF9pbmRleChjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCisJY3AuZ2l0X2NtZCA9IDE7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLmRpciA9IHBhdGg7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1zdXBlci1wcmVmaXg9JXMlcy8iLAorCQkJCSAgIGdldF9zdXBlcl9wcmVmaXhfb3JfZW1wdHkoKSwgcGF0aCk7CisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInJlYWQtdHJlZSIsICItdSIsICItLXJlc2V0IiwgTlVMTCk7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIGVtcHR5X3RyZWVfb2lkX2hleCgpKTsKKworCWlmIChydW5fY29tbWFuZCgmY3ApKQorCQlkaWUoXygiY291bGQgbm90IHJlc2V0IHN1Ym1vZHVsZSBpbmRleCIpKTsKK30KKworLyoqCisgKiBNb3ZlcyBhIHN1Ym1vZHVsZSBhdCBhIGdpdmVuIHBhdGggZnJvbSBhIGdpdmVuIGhlYWQgdG8gYW5vdGhlciBuZXcgaGVhZC4KKyAqIEZvciBlZGdlIGNhc2VzIChhIHN1Ym1vZHVsZSBjb21pbmcgaW50byBleGlzdGVuY2Ugb3IgcmVtb3ZpbmcgYSBzdWJtb2R1bGUpCisgKiBwYXNzIE5VTEwgZm9yIG9sZCBvciBuZXcgcmVzcGVjdGl2ZWx5LgorICovCitpbnQgc3VibW9kdWxlX21vdmVfaGVhZChjb25zdCBjaGFyICpwYXRoLAorCQkJIGNvbnN0IGNoYXIgKm9sZF9oZWFkLAorCQkJIGNvbnN0IGNoYXIgKm5ld19oZWFkLAorCQkJIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKwlpbnQgKmVycm9yX2NvZGVfcHRyLCBlcnJvcl9jb2RlOworCisJaWYgKCFpc19zdWJtb2R1bGVfYWN0aXZlKHRoZV9yZXBvc2l0b3J5LCBwYXRoKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmxhZ3MgJiBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFKQorCQkvKgorCQkgKiBQYXNzIG5vbiBOVUxMIHBvaW50ZXIgdG8gaXNfc3VibW9kdWxlX3BvcHVsYXRlZF9nZW50bHkKKwkJICogdG8gcHJldmVudCBkaWUoKS1pbmcuIFdlJ2xsIHVzZSBjb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2RpcgorCQkgKiB0byBmaXh1cCB0aGUgc3VibW9kdWxlIGluIHRoZSBmb3JjZSBjYXNlIGxhdGVyLgorCQkgKi8KKwkJZXJyb3JfY29kZV9wdHIgPSAmZXJyb3JfY29kZTsKKwllbHNlCisJCWVycm9yX2NvZGVfcHRyID0gTlVMTDsKKworCWlmIChvbGRfaGVhZCAmJiAhaXNfc3VibW9kdWxlX3BvcHVsYXRlZF9nZW50bHkocGF0aCwgZXJyb3JfY29kZV9wdHIpKQorCQlyZXR1cm4gMDsKKworCXN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgcGF0aCk7CisKKwlpZiAoIXN1YikKKwkJQlVHKCJjb3VsZCBub3QgZ2V0IHN1Ym1vZHVsZSBpbmZvcm1hdGlvbiBmb3IgJyVzJyIsIHBhdGgpOworCisJaWYgKG9sZF9oZWFkICYmICEoZmxhZ3MgJiBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFKSkgeworCQkvKiBDaGVjayBpZiB0aGUgc3VibW9kdWxlIGhhcyBhIGRpcnR5IGluZGV4LiAqLworCQlpZiAoc3VibW9kdWxlX2hhc19kaXJ0eV9pbmRleChzdWIpKQorCQkJcmV0dXJuIGVycm9yKF8oInN1Ym1vZHVsZSAnJXMnIGhhcyBkaXJ0eSBpbmRleCIpLCBwYXRoKTsKKwl9CisKKwlpZiAoIShmbGFncyAmIFNVQk1PRFVMRV9NT1ZFX0hFQURfRFJZX1JVTikpIHsKKwkJaWYgKG9sZF9oZWFkKSB7CisJCQlpZiAoIXN1Ym1vZHVsZV91c2VzX2dpdGZpbGUocGF0aCkpCisJCQkJYWJzb3JiX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QocGF0aCwKKwkJCQkJQUJTT1JCX0dJVERJUl9SRUNVUlNFX1NVQk1PRFVMRVMpOworCQl9IGVsc2UgeworCQkJY2hhciAqZ2l0ZGlyID0geHN0cmZtdCgiJXMvbW9kdWxlcy8lcyIsCisJCQkJICAgIGdldF9naXRfZGlyKCksIHN1Yi0+bmFtZSk7CisJCQljb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2RpcihwYXRoLCBnaXRkaXIsIDApOworCQkJZnJlZShnaXRkaXIpOworCisJCQkvKiBtYWtlIHN1cmUgdGhlIGluZGV4IGlzIGNsZWFuIGFzIHdlbGwgKi8KKwkJCXN1Ym1vZHVsZV9yZXNldF9pbmRleChwYXRoKTsKKwkJfQorCisJCWlmIChvbGRfaGVhZCAmJiAoZmxhZ3MgJiBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFKSkgeworCQkJY2hhciAqZ2l0ZGlyID0geHN0cmZtdCgiJXMvbW9kdWxlcy8lcyIsCisJCQkJICAgIGdldF9naXRfZGlyKCksIHN1Yi0+bmFtZSk7CisJCQljb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2RpcihwYXRoLCBnaXRkaXIsIDEpOworCQkJZnJlZShnaXRkaXIpOworCQl9CisJfQorCisJcHJlcGFyZV9zdWJtb2R1bGVfcmVwb19lbnYoJmNwLmVudl9hcnJheSk7CisKKwljcC5naXRfY21kID0gMTsKKwljcC5ub19zdGRpbiA9IDE7CisJY3AuZGlyID0gcGF0aDsKKworCWFyZ3ZfYXJyYXlfcHVzaGYoJmNwLmFyZ3MsICItLXN1cGVyLXByZWZpeD0lcyVzLyIsCisJCQlnZXRfc3VwZXJfcHJlZml4X29yX2VtcHR5KCksIHBhdGgpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJyZWFkLXRyZWUiLCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiLCBOVUxMKTsKKworCWlmIChmbGFncyAmIFNVQk1PRFVMRV9NT1ZFX0hFQURfRFJZX1JVTikKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLW4iKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi11Iik7CisKKwlpZiAoZmxhZ3MgJiBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLXJlc2V0Iik7CisJZWxzZQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItbSIpOworCisJaWYgKCEoZmxhZ3MgJiBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFKSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBvbGRfaGVhZCA/IG9sZF9oZWFkIDogZW1wdHlfdHJlZV9vaWRfaGV4KCkpOworCisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBuZXdfaGVhZCA/IG5ld19oZWFkIDogZW1wdHlfdHJlZV9vaWRfaGV4KCkpOworCisJaWYgKHJ1bl9jb21tYW5kKCZjcCkpIHsKKwkJcmV0ID0gZXJyb3IoXygiU3VibW9kdWxlICclcycgY291bGQgbm90IGJlIHVwZGF0ZWQuIiksIHBhdGgpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIShmbGFncyAmIFNVQk1PRFVMRV9NT1ZFX0hFQURfRFJZX1JVTikpIHsKKwkJaWYgKG5ld19oZWFkKSB7CisJCQljaGlsZF9wcm9jZXNzX2luaXQoJmNwKTsKKwkJCS8qIGFsc28gc2V0IHRoZSBIRUFEIGFjY29yZGluZ2x5ICovCisJCQljcC5naXRfY21kID0gMTsKKwkJCWNwLm5vX3N0ZGluID0gMTsKKwkJCWNwLmRpciA9IHBhdGg7CisKKwkJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCQkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInVwZGF0ZS1yZWYiLCAiSEVBRCIsCisJCQkJCSAiLS1uby1kZXJlZiIsIG5ld19oZWFkLCBOVUxMKTsKKworCQkJaWYgKHJ1bl9jb21tYW5kKCZjcCkpIHsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQkJc3RyYnVmX2FkZGYoJnNiLCAiJXMvLmdpdCIsIHBhdGgpOworCQkJdW5saW5rX29yX3dhcm4oc2IuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkJCWlmIChpc19lbXB0eV9kaXIocGF0aCkpCisJCQkJcm1kaXJfb3Jfd2FybihwYXRoKTsKKworCQkJc3VibW9kdWxlX3Vuc2V0X2NvcmVfd29ya3RyZWUoc3ViKTsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdmFsaWRhdGVfc3VibW9kdWxlX2dpdF9kaXIoY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqc3VibW9kdWxlX25hbWUpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihnaXRfZGlyKSwgc3VmZml4X2xlbiA9IHN0cmxlbihzdWJtb2R1bGVfbmFtZSk7CisJY2hhciAqcDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChsZW4gPD0gc3VmZml4X2xlbiB8fCAocCA9IGdpdF9kaXIgKyBsZW4gLSBzdWZmaXhfbGVuKVstMV0gIT0gJy8nIHx8CisJICAgIHN0cmNtcChwLCBzdWJtb2R1bGVfbmFtZSkpCisJCUJVRygic3VibW9kdWxlIG5hbWUgJyVzJyBub3QgYSBzdWZmaXggb2YgZ2l0IGRpciAnJXMnIiwKKwkJICAgIHN1Ym1vZHVsZV9uYW1lLCBnaXRfZGlyKTsKKworCS8qCisJICogV2UgcHJldmVudCB0aGUgY29udGVudHMgb2Ygc2libGluZyBzdWJtb2R1bGVzJyBnaXQgZGlyZWN0b3JpZXMgdG8KKwkgKiBjbGFzaC4KKwkgKgorCSAqIEV4YW1wbGU6IGhhdmluZyBhIHN1Ym1vZHVsZSBuYW1lZCBgaGlwcG9gIGFuZCBhbm90aGVyIG9uZSBuYW1lZAorCSAqIGBoaXBwby9ob29rc2Agd291bGQgcmVzdWx0IGluIHRoZSBnaXQgZGlyZWN0b3JpZXMKKwkgKiBgLmdpdC9tb2R1bGVzL2hpcHBvL2AgYW5kIGAuZ2l0L21vZHVsZXMvaGlwcG8vaG9va3MvYCwgcmVzcGVjdGl2ZWx5LAorCSAqIGJ1dCB0aGUgbGF0dGVyIGRpcmVjdG9yeSBpcyBhbHJlYWR5IGRlc2lnbmF0ZWQgdG8gY29udGFpbiB0aGUgaG9va3MKKwkgKiBvZiB0aGUgZm9ybWVyLgorCSAqLworCWZvciAoOyAqcDsgcCsrKSB7CisJCWlmIChpc19kaXJfc2VwKCpwKSkgeworCQkJY2hhciBjID0gKnA7CisKKwkJCSpwID0gJ1wwJzsKKwkJCWlmIChpc19naXRfZGlyZWN0b3J5KGdpdF9kaXIpKQorCQkJCXJldCA9IC0xOworCQkJKnAgPSBjOworCisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gZXJyb3IoXygic3VibW9kdWxlIGdpdCBkaXIgJyVzJyBpcyAiCisJCQkJCSAgICAgICAiaW5zaWRlIGdpdCBkaXIgJyUuKnMnIiksCisJCQkJCSAgICAgZ2l0X2RpciwKKwkJCQkJICAgICAoaW50KShwIC0gZ2l0X2RpciksIGdpdF9kaXIpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFbWJlZHMgYSBzaW5nbGUgc3VibW9kdWxlcyBnaXQgZGlyZWN0b3J5IGludG8gdGhlIHN1cGVycHJvamVjdHMgZ2l0IGRpciwKKyAqIG5vbiByZWN1cnNpdmVseS4KKyAqLworc3RhdGljIHZvaWQgcmVsb2NhdGVfc2luZ2xlX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpvbGRfZ2l0X2RpciA9IE5VTEwsICpyZWFsX29sZF9naXRfZGlyID0gTlVMTCwgKnJlYWxfbmV3X2dpdF9kaXIgPSBOVUxMOworCWNoYXIgKm5ld19naXRfZGlyOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKworCWlmIChzdWJtb2R1bGVfdXNlc193b3JrdHJlZXMocGF0aCkpCisJCWRpZShfKCJyZWxvY2F0ZV9naXRkaXIgZm9yIHN1Ym1vZHVsZSAnJXMnIHdpdGggIgorCQkgICAgICAibW9yZSB0aGFuIG9uZSB3b3JrdHJlZSBub3Qgc3VwcG9ydGVkIiksIHBhdGgpOworCisJb2xkX2dpdF9kaXIgPSB4c3RyZm10KCIlcy8uZ2l0IiwgcGF0aCk7CisJaWYgKHJlYWRfZ2l0ZmlsZShvbGRfZ2l0X2RpcikpCisJCS8qIElmIGl0IGlzIGFuIGFjdHVhbCBnaXRmaWxlLCBpdCBkb2Vzbid0IG5lZWQgbWlncmF0aW9uLiAqLworCQlyZXR1cm47CisKKwlyZWFsX29sZF9naXRfZGlyID0gcmVhbF9wYXRoZHVwKG9sZF9naXRfZGlyLCAxKTsKKworCXN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgcGF0aCk7CisJaWYgKCFzdWIpCisJCWRpZShfKCJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIiksIHBhdGgpOworCisJbmV3X2dpdF9kaXIgPSBnaXRfcGF0aGR1cCgibW9kdWxlcy8lcyIsIHN1Yi0+bmFtZSk7CisJaWYgKHZhbGlkYXRlX3N1Ym1vZHVsZV9naXRfZGlyKG5ld19naXRfZGlyLCBzdWItPm5hbWUpIDwgMCkKKwkJZGllKF8oInJlZnVzaW5nIHRvIG1vdmUgJyVzJyBpbnRvIGFuIGV4aXN0aW5nIGdpdCBkaXIiKSwKKwkJICAgIHJlYWxfb2xkX2dpdF9kaXIpOworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KG5ld19naXRfZGlyKSA8IDApCisJCWRpZShfKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiksIG5ld19naXRfZGlyKTsKKwlyZWFsX25ld19naXRfZGlyID0gcmVhbF9wYXRoZHVwKG5ld19naXRfZGlyLCAxKTsKKwlmcmVlKG5ld19naXRfZGlyKTsKKworCWZwcmludGYoc3RkZXJyLCBfKCJNaWdyYXRpbmcgZ2l0IGRpcmVjdG9yeSBvZiAnJXMlcycgZnJvbVxuJyVzJyB0b1xuJyVzJ1xuIiksCisJCWdldF9zdXBlcl9wcmVmaXhfb3JfZW1wdHkoKSwgcGF0aCwKKwkJcmVhbF9vbGRfZ2l0X2RpciwgcmVhbF9uZXdfZ2l0X2Rpcik7CisKKwlyZWxvY2F0ZV9naXRkaXIocGF0aCwgcmVhbF9vbGRfZ2l0X2RpciwgcmVhbF9uZXdfZ2l0X2Rpcik7CisKKwlmcmVlKG9sZF9naXRfZGlyKTsKKwlmcmVlKHJlYWxfb2xkX2dpdF9kaXIpOworCWZyZWUocmVhbF9uZXdfZ2l0X2Rpcik7Cit9CisKKy8qCisgKiBNaWdyYXRlIHRoZSBnaXQgZGlyZWN0b3J5IG9mIHRoZSBzdWJtb2R1bGUgZ2l2ZW4gYnkgcGF0aCBmcm9tCisgKiBoYXZpbmcgaXRzIGdpdCBkaXJlY3Rvcnkgd2l0aGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGdpdCBkaXIgbmVzdGVkCisgKiBpbiBpdHMgc3VwZXJwcm9qZWN0cyBnaXQgZGlyIHVuZGVyIG1vZHVsZXMvLgorICovCit2b2lkIGFic29yYl9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICAgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IGVycl9jb2RlOworCWNvbnN0IGNoYXIgKnN1Yl9naXRfZGlyOworCXN0cnVjdCBzdHJidWYgZ2l0ZGlyID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJmdpdGRpciwgIiVzLy5naXQiLCBwYXRoKTsKKwlzdWJfZ2l0X2RpciA9IHJlc29sdmVfZ2l0ZGlyX2dlbnRseShnaXRkaXIuYnVmLCAmZXJyX2NvZGUpOworCisJLyogTm90IHBvcHVsYXRlZD8gKi8KKwlpZiAoIXN1Yl9naXRfZGlyKSB7CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKworCQlpZiAoZXJyX2NvZGUgPT0gUkVBRF9HSVRGSUxFX0VSUl9TVEFUX0ZBSUxFRCkgeworCQkJLyogdW5wb3B1bGF0ZWQgYXMgZXhwZWN0ZWQgKi8KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZnaXRkaXIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGVycl9jb2RlICE9IFJFQURfR0lURklMRV9FUlJfTk9UX0FfUkVQTykKKwkJCS8qIFdlIGRvbid0IGtub3cgd2hhdCBicm9rZSBoZXJlLiAqLworCQkJcmVhZF9naXRmaWxlX2Vycm9yX2RpZShlcnJfY29kZSwgcGF0aCwgTlVMTCk7CisKKwkJLyoKKwkJKiBNYXliZSBwb3B1bGF0ZWQsIGJ1dCBubyBnaXQgZGlyZWN0b3J5IHdhcyBmb3VuZD8KKwkJKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHN1cGVycHJvamVjdCBpcyBhIHN1Ym1vZHVsZQorCQkqIGl0c2VsZiBhbmQgd2FzIGp1c3QgYWJzb3JiZWQuIFRoZSBhYnNvcnB0aW9uIG9mIHRoZQorCQkqIHN1cGVycHJvamVjdCBkaWQgbm90IHJld3JpdGUgdGhlIGdpdCBmaWxlIGxpbmtzIHlldCwKKwkJKiBmaXggaXQgbm93LgorCQkqLworCQlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIHBhdGgpOworCQlpZiAoIXN1YikKKwkJCWRpZShfKCJjb3VsZCBub3QgbG9va3VwIG5hbWUgZm9yIHN1Ym1vZHVsZSAnJXMnIiksIHBhdGgpOworCQljb25uZWN0X3dvcmtfdHJlZV9hbmRfZ2l0X2RpcihwYXRoLAorCQkJZ2l0X3BhdGgoIm1vZHVsZXMvJXMiLCBzdWItPm5hbWUpLCAwKTsKKwl9IGVsc2UgeworCQkvKiBJcyBpdCBhbHJlYWR5IGFic29yYmVkIGludG8gdGhlIHN1cGVycHJvamVjdHMgZ2l0IGRpcj8gKi8KKwkJY2hhciAqcmVhbF9zdWJfZ2l0X2RpciA9IHJlYWxfcGF0aGR1cChzdWJfZ2l0X2RpciwgMSk7CisJCWNoYXIgKnJlYWxfY29tbW9uX2dpdF9kaXIgPSByZWFsX3BhdGhkdXAoZ2V0X2dpdF9jb21tb25fZGlyKCksIDEpOworCisJCWlmICghc3RhcnRzX3dpdGgocmVhbF9zdWJfZ2l0X2RpciwgcmVhbF9jb21tb25fZ2l0X2RpcikpCisJCQlyZWxvY2F0ZV9zaW5nbGVfZ2l0X2Rpcl9pbnRvX3N1cGVycHJvamVjdChwYXRoKTsKKworCQlmcmVlKHJlYWxfc3ViX2dpdF9kaXIpOworCQlmcmVlKHJlYWxfY29tbW9uX2dpdF9kaXIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZ2l0ZGlyKTsKKworCWlmIChmbGFncyAmIEFCU09SQl9HSVRESVJfUkVDVVJTRV9TVUJNT0RVTEVTKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGZsYWdzICYgfkFCU09SQl9HSVRESVJfUkVDVVJTRV9TVUJNT0RVTEVTKQorCQkJQlVHKCJ3ZSBkb24ndCBrbm93IGhvdyB0byBwYXNzIHRoZSBmbGFncyBkb3duPyIpOworCisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBnZXRfc3VwZXJfcHJlZml4X29yX2VtcHR5KCkpOworCQlzdHJidWZfYWRkc3RyKCZzYiwgcGF0aCk7CisJCXN0cmJ1Zl9hZGRjaCgmc2IsICcvJyk7CisKKwkJY3AuZGlyID0gcGF0aDsKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWNwLm5vX3N0ZGluID0gMTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgIi0tc3VwZXItcHJlZml4Iiwgc2IuYnVmLAorCQkJCQkgICAic3VibW9kdWxlLS1oZWxwZXIiLAorCQkJCQkgICAiYWJzb3JiLWdpdC1kaXJzIiwgTlVMTCk7CisJCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCQlpZiAocnVuX2NvbW1hbmQoJmNwKSkKKwkJCWRpZShfKCJjb3VsZCBub3QgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSAnJXMnIiksIHBhdGgpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorfQorCitjb25zdCBjaGFyICpnZXRfc3VwZXJwcm9qZWN0X3dvcmtpbmdfdHJlZSh2b2lkKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpvbmVfdXAgPSByZWFsX3BhdGhfaWZfdmFsaWQoIi4uLyIpOworCWNvbnN0IGNoYXIgKmN3ZCA9IHhnZXRjd2QoKTsKKwljb25zdCBjaGFyICpyZXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnN1YnBhdGg7CisJaW50IGNvZGU7CisJc3NpemVfdCBsZW47CisKKwlpZiAoIWlzX2luc2lkZV93b3JrX3RyZWUoKSkKKwkJLyoKKwkJICogRklYTUU6CisJCSAqIFdlIG1pZ2h0IGhhdmUgYSBzdXBlcnByb2plY3QsIGJ1dCBpdCBpcyBoYXJkZXIKKwkJICogdG8gZGV0ZXJtaW5lLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIW9uZV91cCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdWJwYXRoID0gcmVsYXRpdmVfcGF0aChjd2QsIG9uZV91cCwgJnNiKTsKKworCXByZXBhcmVfc3VibW9kdWxlX3JlcG9fZW52KCZjcC5lbnZfYXJyYXkpOworCWFyZ3ZfYXJyYXlfcG9wKCZjcC5lbnZfYXJyYXkpOworCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgIi0tbGl0ZXJhbC1wYXRoc3BlY3MiLCAiLUMiLCAiLi4iLAorCQkJImxzLWZpbGVzIiwgIi16IiwgIi0tc3RhZ2UiLCAiLS1mdWxsLW5hbWUiLCAiLS0iLAorCQkJc3VicGF0aCwgTlVMTCk7CisJc3RyYnVmX3Jlc2V0KCZzYik7CisKKwljcC5ub19zdGRpbiA9IDE7CisJY3Aubm9fc3RkZXJyID0gMTsKKwljcC5vdXQgPSAtMTsKKwljcC5naXRfY21kID0gMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZjcCkpCisJCWRpZShfKCJjb3VsZCBub3Qgc3RhcnQgbHMtZmlsZXMgaW4gLi4iKSk7CisKKwlsZW4gPSBzdHJidWZfcmVhZCgmc2IsIGNwLm91dCwgUEFUSF9NQVgpOworCWNsb3NlKGNwLm91dCk7CisKKwlpZiAoc3RhcnRzX3dpdGgoc2IuYnVmLCAiMTYwMDAwIikpIHsKKwkJaW50IHN1cGVyX3N1Yl9sZW47CisJCWludCBjd2RfbGVuID0gc3RybGVuKGN3ZCk7CisJCWNoYXIgKnN1cGVyX3N1YiwgKnN1cGVyX3d0OworCisJCS8qCisJCSAqIFRoZXJlIGlzIGEgc3VwZXJwcm9qZWN0IGhhdmluZyB0aGlzIHJlcG8gYXMgYSBzdWJtb2R1bGUuCisJCSAqIFRoZSBmb3JtYXQgaXMgPG1vZGU+IFNQIDxoYXNoPiBTUCA8c3RhZ2U+IFRBQiA8ZnVsbCBuYW1lPiBcMCwKKwkJICogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBuYW1lIGFmdGVyIHRoZSB0YWIuCisJCSAqLworCQlzdXBlcl9zdWIgPSBzdHJjaHIoc2IuYnVmLCAnXHQnKSArIDE7CisJCXN1cGVyX3N1Yl9sZW4gPSBzdHJsZW4oc3VwZXJfc3ViKTsKKworCQlpZiAoc3VwZXJfc3ViX2xlbiA+IGN3ZF9sZW4gfHwKKwkJICAgIHN0cmNtcCgmY3dkW2N3ZF9sZW4gLSBzdXBlcl9zdWJfbGVuXSwgc3VwZXJfc3ViKSkKKwkJCUJVRygicmV0dXJuZWQgcGF0aCBzdHJpbmcgZG9lc24ndCBtYXRjaCBjd2Q/Iik7CisKKwkJc3VwZXJfd3QgPSB4c3RyZHVwKGN3ZCk7CisJCXN1cGVyX3d0W2N3ZF9sZW4gLSBzdXBlcl9zdWJfbGVuXSA9ICdcMCc7CisKKwkJcmV0ID0gcmVhbF9wYXRoKHN1cGVyX3d0KTsKKwkJZnJlZShzdXBlcl93dCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwljb2RlID0gZmluaXNoX2NvbW1hbmQoJmNwKTsKKworCWlmIChjb2RlID09IDEyOCkKKwkJLyogJy4uLycgaXMgbm90IGEgZ2l0IHJlcG9zaXRvcnkgKi8KKwkJcmV0dXJuIE5VTEw7CisJaWYgKGNvZGUgPT0gMCAmJiBsZW4gPT0gMCkKKwkJLyogVGhlcmUgaXMgYW4gdW5yZWxhdGVkIGdpdCByZXBvc2l0b3J5IGF0ICcuLi8nICovCisJCXJldHVybiBOVUxMOworCWlmIChjb2RlKQorCQlkaWUoXygibHMtdHJlZSByZXR1cm5lZCB1bmV4cGVjdGVkIHJldHVybiBjb2RlICVkIiksIGNvZGUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFB1dCB0aGUgZ2l0ZGlyIGZvciBhIHN1Ym1vZHVsZSAoZ2l2ZW4gcmVsYXRpdmUgdG8gdGhlIG1haW4KKyAqIHJlcG9zaXRvcnkgd29ya3RyZWUpIGludG8gYGJ1ZmAsIG9yIHJldHVybiAtMSBvbiBlcnJvci4KKyAqLworaW50IHN1Ym1vZHVsZV90b19naXRkaXIoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpzdWJtb2R1bGUpCit7CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViOworCWNvbnN0IGNoYXIgKmdpdF9kaXI7CisJaW50IHJldCA9IDA7CisKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkc3RyKGJ1Ziwgc3VibW9kdWxlKTsKKwlzdHJidWZfY29tcGxldGUoYnVmLCAnLycpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiLmdpdCIpOworCisJZ2l0X2RpciA9IHJlYWRfZ2l0ZmlsZShidWYtPmJ1Zik7CisJaWYgKGdpdF9kaXIpIHsKKwkJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBnaXRfZGlyKTsKKwl9CisJaWYgKCFpc19naXRfZGlyZWN0b3J5KGJ1Zi0+YnVmKSkgeworCQlzdWIgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LCAmbnVsbF9vaWQsIHN1Ym1vZHVsZSk7CisJCWlmICghc3ViKSB7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlzdHJidWZfcmVzZXQoYnVmKTsKKwkJc3RyYnVmX2dpdF9wYXRoKGJ1ZiwgIiVzLyVzIiwgIm1vZHVsZXMiLCBzdWItPm5hbWUpOworCX0KKworY2xlYW51cDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLmggYi9zdWJtb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFlYzFhCi0tLSAvZGV2L251bGwKKysrIGIvc3VibW9kdWxlLmgKQEAgLTAsMCArMSwxNTkgQEAKKyNpZm5kZWYgU1VCTU9EVUxFX0gKKyNkZWZpbmUgU1VCTU9EVUxFX0gKKworc3RydWN0IGFyZ3ZfYXJyYXk7CitzdHJ1Y3QgY2FjaGVfZW50cnk7CitzdHJ1Y3QgZGlmZl9vcHRpb25zOworc3RydWN0IGluZGV4X3N0YXRlOworc3RydWN0IG9iamVjdF9pZDsKK3N0cnVjdCBvaWRfYXJyYXk7CitzdHJ1Y3QgcGF0aHNwZWM7CitzdHJ1Y3QgcmVtb3RlOworc3RydWN0IHJlcG9zaXRvcnk7CitzdHJ1Y3Qgc3RyaW5nX2xpc3Q7CitzdHJ1Y3Qgc3RyYnVmOworCitlbnVtIHsKKwlSRUNVUlNFX1NVQk1PRFVMRVNfT05MWSA9IC01LAorCVJFQ1VSU0VfU1VCTU9EVUxFU19DSEVDSyA9IC00LAorCVJFQ1VSU0VfU1VCTU9EVUxFU19FUlJPUiA9IC0zLAorCVJFQ1VSU0VfU1VCTU9EVUxFU19OT05FID0gLTIsCisJUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCA9IC0xLAorCVJFQ1VSU0VfU1VCTU9EVUxFU19PRkYgPSAwLAorCVJFQ1VSU0VfU1VCTU9EVUxFU19ERUZBVUxUID0gMSwKKwlSRUNVUlNFX1NVQk1PRFVMRVNfT04gPSAyCit9OworCitlbnVtIHN1Ym1vZHVsZV91cGRhdGVfdHlwZSB7CisJU01fVVBEQVRFX1VOU1BFQ0lGSUVEID0gMCwKKwlTTV9VUERBVEVfQ0hFQ0tPVVQsCisJU01fVVBEQVRFX1JFQkFTRSwKKwlTTV9VUERBVEVfTUVSR0UsCisJU01fVVBEQVRFX05PTkUsCisJU01fVVBEQVRFX0NPTU1BTkQKK307CisKK3N0cnVjdCBzdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5IHsKKwllbnVtIHN1Ym1vZHVsZV91cGRhdGVfdHlwZSB0eXBlOworCWNvbnN0IGNoYXIgKmNvbW1hbmQ7Cit9OworI2RlZmluZSBTVUJNT0RVTEVfVVBEQVRFX1NUUkFURUdZX0lOSVQge1NNX1VQREFURV9VTlNQRUNJRklFRCwgTlVMTH0KKworaW50IGlzX2dpdG1vZHVsZXNfdW5tZXJnZWQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworaW50IGlzX3dyaXRpbmdfZ2l0bW9kdWxlc19vayh2b2lkKTsKK2ludCBpc19zdGFnaW5nX2dpdG1vZHVsZXNfb2soc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworaW50IHVwZGF0ZV9wYXRoX2luX2dpdG1vZHVsZXMoY29uc3QgY2hhciAqb2xkcGF0aCwgY29uc3QgY2hhciAqbmV3cGF0aCk7CitpbnQgcmVtb3ZlX3BhdGhfZnJvbV9naXRtb2R1bGVzKGNvbnN0IGNoYXIgKnBhdGgpOwordm9pZCBzdGFnZV91cGRhdGVkX2dpdG1vZHVsZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOwordm9pZCBzZXRfZGlmZm9wdF9mbGFnc19mcm9tX3N1Ym1vZHVsZV9jb25maWcoc3RydWN0IGRpZmZfb3B0aW9ucyAqLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGdpdF9kZWZhdWx0X3N1Ym1vZHVsZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworCitzdHJ1Y3Qgb3B0aW9uOworaW50IG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXNfd29ya3RyZWVfdXBkYXRlcihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCQkgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KTsKK2ludCBpc19zdWJtb2R1bGVfYWN0aXZlKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKTsKKy8qCisgKiBEZXRlcm1pbmUgaWYgYSBzdWJtb2R1bGUgaGFzIGJlZW4gcG9wdWxhdGVkIGF0IGEgZ2l2ZW4gJ3BhdGgnIGJ5IGNoZWNraW5nIGlmCisgKiB0aGUgPHBhdGg+Ly5naXQgcmVzb2x2ZXMgdG8gYSB2YWxpZCBnaXQgcmVwb3NpdG9yeS4KKyAqIElmIHJldHVybl9lcnJvcl9jb2RlIGlzIE5VTEwsIGRpZSBvbiBlcnJvci4KKyAqIE90aGVyd2lzZSB0aGUgcmV0dXJuIGVycm9yIGNvZGUgaXMgdGhlIHNhbWUgYXMgb2YgcmVzb2x2ZV9naXRkaXJfZ2VudGx5LgorICovCitpbnQgaXNfc3VibW9kdWxlX3BvcHVsYXRlZF9nZW50bHkoY29uc3QgY2hhciAqcGF0aCwgaW50ICpyZXR1cm5fZXJyb3JfY29kZSk7Cit2b2lkIGRpZV9pbl91bnBvcHVsYXRlZF9zdWJtb2R1bGUoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICBjb25zdCBjaGFyICpwcmVmaXgpOwordm9pZCBkaWVfcGF0aF9pbnNpZGVfc3VibW9kdWxlKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpOworZW51bSBzdWJtb2R1bGVfdXBkYXRlX3R5cGUgcGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV90eXBlKGNvbnN0IGNoYXIgKnZhbHVlKTsKK2ludCBwYXJzZV9zdWJtb2R1bGVfdXBkYXRlX3N0cmF0ZWd5KGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJCSAgICBzdHJ1Y3Qgc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSAqZHN0KTsKK2NvbnN0IGNoYXIgKnN1Ym1vZHVsZV9zdHJhdGVneV90b19zdHJpbmcoY29uc3Qgc3RydWN0IHN1Ym1vZHVsZV91cGRhdGVfc3RyYXRlZ3kgKnMpOwordm9pZCBoYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQgc2hvd19zdWJtb2R1bGVfc3VtbWFyeShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgIHN0cnVjdCBvYmplY3RfaWQgKm9uZSwgc3RydWN0IG9iamVjdF9pZCAqdHdvLAorCQkJICAgIHVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSk7Cit2b2lkIHNob3dfc3VibW9kdWxlX2lubGluZV9kaWZmKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJc3RydWN0IG9iamVjdF9pZCAqb25lLCBzdHJ1Y3Qgb2JqZWN0X2lkICp0d28sCisJCQkJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKTsKKy8qIENoZWNrIGlmIHdlIHdhbnQgdG8gdXBkYXRlIGFueSBzdWJtb2R1bGUuKi8KK2ludCBzaG91bGRfdXBkYXRlX3N1Ym1vZHVsZXModm9pZCk7CisvKgorICogUmV0dXJucyB0aGUgc3VibW9kdWxlIHN0cnVjdCBpZiB0aGUgZ2l2ZW4gY2UgZW50cnkgaXMgYSBzdWJtb2R1bGUKKyAqIGFuZCBpdCBzaG91bGQgYmUgdXBkYXRlZC4gUmV0dXJucyBOVUxMIG90aGVyd2lzZS4KKyAqLworY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlX2Zyb21fY2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSk7Cit2b2lkIGNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHMoc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK2ludCBmZXRjaF9wb3B1bGF0ZWRfc3VibW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3B0aW9ucywKKwkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgICAgaW50IGNvbW1hbmRfbGluZV9vcHRpb24sCisJCQkgICAgICAgaW50IGRlZmF1bHRfb3B0aW9uLAorCQkJICAgICAgIGludCBxdWlldCwgaW50IG1heF9wYXJhbGxlbF9qb2JzKTsKK3Vuc2lnbmVkIGlzX3N1Ym1vZHVsZV9tb2RpZmllZChjb25zdCBjaGFyICpwYXRoLCBpbnQgaWdub3JlX3VudHJhY2tlZCk7CitpbnQgc3VibW9kdWxlX3VzZXNfZ2l0ZmlsZShjb25zdCBjaGFyICpwYXRoKTsKKworI2RlZmluZSBTVUJNT0RVTEVfUkVNT1ZBTF9ESUVfT05fRVJST1IgKDE8PDApCisjZGVmaW5lIFNVQk1PRFVMRV9SRU1PVkFMX0lHTk9SRV9VTlRSQUNLRUQgKDE8PDEpCisjZGVmaW5lIFNVQk1PRFVMRV9SRU1PVkFMX0lHTk9SRV9JR05PUkVEX1VOVFJBQ0tFRCAoMTw8MikKK2ludCBiYWRfdG9fcmVtb3ZlX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBmbGFncyk7CisKK2ludCBhZGRfc3VibW9kdWxlX29kYihjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIENoZWNrcyBpZiB0aGVyZSBhcmUgc3VibW9kdWxlIGNoYW5nZXMgaW4gYS4uYi4gSWYgYSBpcyB0aGUgbnVsbCBPSUQsCisgKiBjaGVja3MgYiBhbmQgYWxsIGl0cyBhbmNlc3RvcnMgaW5zdGVhZC4KKyAqLworaW50IHN1Ym1vZHVsZV90b3VjaGVzX2luX3JhbmdlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICAgIHN0cnVjdCBvYmplY3RfaWQgKmEsCisJCQkgICAgICAgc3RydWN0IG9iamVjdF9pZCAqYik7CitpbnQgZmluZF91bnB1c2hlZF9zdWJtb2R1bGVzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgICBzdHJ1Y3Qgb2lkX2FycmF5ICpjb21taXRzLAorCQkJICAgICBjb25zdCBjaGFyICpyZW1vdGVzX25hbWUsCisJCQkgICAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqbmVlZHNfcHVzaGluZyk7CitzdHJ1Y3QgcmVmc3BlYzsKK2ludCBwdXNoX3VucHVzaGVkX3N1Ym1vZHVsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgIHN0cnVjdCBvaWRfYXJyYXkgKmNvbW1pdHMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCByZW1vdGUgKnJlbW90ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJzLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnB1c2hfb3B0aW9ucywKKwkJCSAgICAgaW50IGRyeV9ydW4pOworLyoKKyAqIEdpdmVuIGEgc3VibW9kdWxlIHBhdGggKGFzIGluIHRoZSBpbmRleCksIHJldHVybiB0aGUgcmVwb3NpdG9yeQorICogcGF0aCBvZiB0aGF0IHN1Ym1vZHVsZSBpbiAnYnVmJy4gUmV0dXJuIC0xIG9uIGVycm9yIG9yIHdoZW4gdGhlCisgKiBzdWJtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLgorICovCitpbnQgc3VibW9kdWxlX3RvX2dpdGRpcihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSk7CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCBubyBzdWJtb2R1bGUncyBnaXQgZGlyIGlzIG5lc3RlZCBpbiBhIHNpYmxpbmcgc3VibW9kdWxlJ3MuCisgKi8KK2ludCB2YWxpZGF0ZV9zdWJtb2R1bGVfZ2l0X2RpcihjaGFyICpnaXRfZGlyLCBjb25zdCBjaGFyICpzdWJtb2R1bGVfbmFtZSk7CisKKyNkZWZpbmUgU1VCTU9EVUxFX01PVkVfSEVBRF9EUllfUlVOICgxPDwwKQorI2RlZmluZSBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFICAgKDE8PDEpCitpbnQgc3VibW9kdWxlX21vdmVfaGVhZChjb25zdCBjaGFyICpwYXRoLAorCQkJY29uc3QgY2hhciAqb2xkLAorCQkJY29uc3QgY2hhciAqbmV3X2hlYWQsCisJCQl1bnNpZ25lZCBmbGFncyk7CisKK3ZvaWQgc3VibW9kdWxlX3Vuc2V0X2NvcmVfd29ya3RyZWUoY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViKTsKKworLyoKKyAqIFByZXBhcmUgdGhlICJlbnZfYXJyYXkiIHBhcmFtZXRlciBvZiBhICJzdHJ1Y3QgY2hpbGRfcHJvY2VzcyIgZm9yIGV4ZWN1dGluZworICogYSBzdWJtb2R1bGUgYnkgY2xlYXJpbmcgYW55IHJlcG8tc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBidXQKKyAqIHJldGFpbmluZyBhbnkgY29uZmlnIGluIHRoZSBlbnZpcm9ubWVudC4KKyAqLwordm9pZCBwcmVwYXJlX3N1Ym1vZHVsZV9yZXBvX2VudihzdHJ1Y3QgYXJndl9hcnJheSAqb3V0KTsKKworI2RlZmluZSBBQlNPUkJfR0lURElSX1JFQ1VSU0VfU1VCTU9EVUxFUyAoMTw8MCkKK3ZvaWQgYWJzb3JiX2dpdF9kaXJfaW50b19zdXBlcnByb2plY3QoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgICB1bnNpZ25lZCBmbGFncyk7CisKKy8qCisgKiBSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHdvcmtpbmcgdHJlZSBvZiB0aGUgc3VwZXJwcm9qZWN0LCB3aGljaCB0aGlzCisgKiBwcm9qZWN0IGlzIGEgc3VibW9kdWxlIG9mLiBJZiB0aGlzIHJlcG9zaXRvcnkgaXMgbm90IGEgc3VibW9kdWxlIG9mCisgKiBhbm90aGVyIHJlcG9zaXRvcnksIHJldHVybiBOVUxMLgorICovCitjb25zdCBjaGFyICpnZXRfc3VwZXJwcm9qZWN0X3dvcmtpbmdfdHJlZSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zeW1saW5rcy5jIGIvc3ltbGlua3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQ0NThhCi0tLSAvZGV2L251bGwKKysrIGIvc3ltbGlua3MuYwpAQCAtMCwwICsxLDMyMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBpbnQgdGhyZWFkZWRfY2hlY2tfbGVhZGluZ19wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK3N0YXRpYyBpbnQgdGhyZWFkZWRfaGFzX2RpcnNfb25seV9wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbik7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggKG9uIGEgcGF0aCBjb21wb25lbnQgYmFzaXMpIG9mIHRoZSBsb25nZXN0CisgKiBjb21tb24gcHJlZml4IG1hdGNoIG9mICduYW1lX2EnIGFuZCAnbmFtZV9iJy4KKyAqLworc3RhdGljIGludCBsb25nZXN0X3BhdGhfbWF0Y2goY29uc3QgY2hhciAqbmFtZV9hLCBpbnQgbGVuX2EsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lX2IsIGludCBsZW5fYiwKKwkJCSAgICAgIGludCAqcHJldmlvdXNfc2xhc2gpCit7CisJaW50IG1heF9sZW4sIG1hdGNoX2xlbiA9IDAsIG1hdGNoX2xlbl9wcmV2ID0gMCwgaSA9IDA7CisKKwltYXhfbGVuID0gbGVuX2EgPCBsZW5fYiA/IGxlbl9hIDogbGVuX2I7CisJd2hpbGUgKGkgPCBtYXhfbGVuICYmIG5hbWVfYVtpXSA9PSBuYW1lX2JbaV0pIHsKKwkJaWYgKG5hbWVfYVtpXSA9PSAnLycpIHsKKwkJCW1hdGNoX2xlbl9wcmV2ID0gbWF0Y2hfbGVuOworCQkJbWF0Y2hfbGVuID0gaTsKKwkJfQorCQlpKys7CisJfQorCS8qCisJICogSXMgJ25hbWVfYicgYSBzdWJzdHJpbmcgb2YgJ25hbWVfYScsIHRoZSBvdGhlciB3YXkgYXJvdW5kLAorCSAqIG9yIGlzICduYW1lX2EnIGFuZCAnbmFtZV9iJyB0aGUgZXhhY3Qgc2FtZSBzdHJpbmc/CisJICovCisJaWYgKGkgPj0gbWF4X2xlbiAmJiAoKGxlbl9hID4gbGVuX2IgJiYgbmFtZV9hW2xlbl9iXSA9PSAnLycpIHx8CisJCQkgICAgIChsZW5fYSA8IGxlbl9iICYmIG5hbWVfYltsZW5fYV0gPT0gJy8nKSB8fAorCQkJICAgICAobGVuX2EgPT0gbGVuX2IpKSkgeworCQltYXRjaF9sZW5fcHJldiA9IG1hdGNoX2xlbjsKKwkJbWF0Y2hfbGVuID0gaTsKKwl9CisJKnByZXZpb3VzX3NsYXNoID0gbWF0Y2hfbGVuX3ByZXY7CisJcmV0dXJuIG1hdGNoX2xlbjsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9kZWYgZGVmYXVsdF9jYWNoZSA9IENBQ0hFX0RFRl9JTklUOworCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfbHN0YXRfY2FjaGUoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUpCit7CisJc3RyYnVmX3Jlc2V0KCZjYWNoZS0+cGF0aCk7CisJY2FjaGUtPmZsYWdzID0gMDsKKwkvKgorCSAqIFRoZSB0cmFja19mbGFncyBhbmQgcHJlZml4X2xlbl9zdGF0X2Z1bmMgbWVtYmVycyBpcyBvbmx5CisJICogc2V0IGJ5IHRoZSBzYWZlZ3VhcmQgcnVsZSBpbnNpZGUgbHN0YXRfY2FjaGUoKQorCSAqLworfQorCisjZGVmaW5lIEZMX0RJUiAgICAgICgxIDw8IDApCisjZGVmaW5lIEZMX05PRU5UICAgICgxIDw8IDEpCisjZGVmaW5lIEZMX1NZTUxJTksgICgxIDw8IDIpCisjZGVmaW5lIEZMX0xTVEFURVJSICgxIDw8IDMpCisjZGVmaW5lIEZMX0VSUiAgICAgICgxIDw8IDQpCisjZGVmaW5lIEZMX0ZVTExQQVRIICgxIDw8IDUpCisKKy8qCisgKiBDaGVjayBpZiBuYW1lICduYW1lJyBvZiBsZW5ndGggJ2xlbicgaGFzIGEgc3ltbGluayBsZWFkaW5nCisgKiBjb21wb25lbnQsIG9yIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyByZWFsLCBvciBub3QuCisgKgorICogVG8gc3BlZWQgdXAgdGhlIGNoZWNrLCBzb21lIGluZm9ybWF0aW9uIGlzIGFsbG93ZWQgdG8gYmUgY2FjaGVkLgorICogVGhpcyBjYW4gYmUgaW5kaWNhdGVkIGJ5IHRoZSAndHJhY2tfZmxhZ3MnIGFyZ3VtZW50LCB3aGljaCBhbHNvIGNhbgorICogYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBjaGVjayB0aGUgZnVsbCBwYXRoLgorICoKKyAqIFRoZSAncHJlZml4X2xlbl9zdGF0X2Z1bmMnIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGxlbmd0aAorICogb2YgdGhlIHByZWZpeCwgd2hlcmUgdGhlIGNhY2hlIHNob3VsZCB1c2UgdGhlIHN0YXQoKSBmdW5jdGlvbgorICogaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggcGF0aCBjb21wb25lbnQuCisgKi8KK3N0YXRpYyBpbnQgbHN0YXRfY2FjaGVfbWF0Y2hsZW4oc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUsCisJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCQlpbnQgKnJldF9mbGFncywgaW50IHRyYWNrX2ZsYWdzLAorCQkJCWludCBwcmVmaXhfbGVuX3N0YXRfZnVuYykKK3sKKwlpbnQgbWF0Y2hfbGVuLCBsYXN0X3NsYXNoLCBsYXN0X3NsYXNoX2RpciwgcHJldmlvdXNfc2xhc2g7CisJaW50IHNhdmVfZmxhZ3MsIHJldDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChjYWNoZS0+dHJhY2tfZmxhZ3MgIT0gdHJhY2tfZmxhZ3MgfHwKKwkgICAgY2FjaGUtPnByZWZpeF9sZW5fc3RhdF9mdW5jICE9IHByZWZpeF9sZW5fc3RhdF9mdW5jKSB7CisJCS8qCisJCSAqIEFzIGEgc2FmZWd1YXJkIHJ1bGUgd2UgY2xlYXIgdGhlIGNhY2hlIGlmIHRoZQorCQkgKiB2YWx1ZXMgb2YgdHJhY2tfZmxhZ3MgYW5kL29yIHByZWZpeF9sZW5fc3RhdF9mdW5jCisJCSAqIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGxhc3Qgc3VwcGxpZWQgdmFsdWVzLgorCQkgKi8KKwkJcmVzZXRfbHN0YXRfY2FjaGUoY2FjaGUpOworCQljYWNoZS0+dHJhY2tfZmxhZ3MgPSB0cmFja19mbGFnczsKKwkJY2FjaGUtPnByZWZpeF9sZW5fc3RhdF9mdW5jID0gcHJlZml4X2xlbl9zdGF0X2Z1bmM7CisJCW1hdGNoX2xlbiA9IGxhc3Rfc2xhc2ggPSAwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgbWF0Y2ggZnJvbSB0aGUgY2FjaGUgZm9yCisJCSAqIHRoZSAyICJleGNsdWRpbmciIHBhdGggdHlwZXMuCisJCSAqLworCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0KKwkJCWxvbmdlc3RfcGF0aF9tYXRjaChuYW1lLCBsZW4sIGNhY2hlLT5wYXRoLmJ1ZiwKKwkJCQkJICAgY2FjaGUtPnBhdGgubGVuLCAmcHJldmlvdXNfc2xhc2gpOworCQkqcmV0X2ZsYWdzID0gY2FjaGUtPmZsYWdzICYgdHJhY2tfZmxhZ3MgJiAoRkxfTk9FTlR8RkxfU1lNTElOSyk7CisKKwkJaWYgKCEodHJhY2tfZmxhZ3MgJiBGTF9GVUxMUEFUSCkgJiYgbWF0Y2hfbGVuID09IGxlbikKKwkJCW1hdGNoX2xlbiA9IGxhc3Rfc2xhc2ggPSBwcmV2aW91c19zbGFzaDsKKworCQlpZiAoKnJldF9mbGFncyAmJiBtYXRjaF9sZW4gPT0gY2FjaGUtPnBhdGgubGVuKQorCQkJcmV0dXJuIG1hdGNoX2xlbjsKKwkJLyoKKwkJICogSWYgd2Ugbm93IGhhdmUgbWF0Y2hfbGVuID4gMCwgd2Ugd291bGQga25vdyB0aGF0CisJCSAqIHRoZSBtYXRjaGVkIHBhcnQgd2lsbCBhbHdheXMgYmUgYSBkaXJlY3RvcnkuCisJCSAqCisJCSAqIEFsc28sIGlmIHdlIGFyZSB0cmFja2luZyBkaXJlY3RvcmllcyBhbmQgJ25hbWUnIGlzCisJCSAqIGEgc3Vic3RyaW5nIG9mIHRoZSBjYWNoZSBvbiBhIHBhdGggY29tcG9uZW50IGJhc2lzLAorCQkgKiB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJKnJldF9mbGFncyA9IHRyYWNrX2ZsYWdzICYgRkxfRElSOworCQlpZiAoKnJldF9mbGFncyAmJiBsZW4gPT0gbWF0Y2hfbGVuKQorCQkJcmV0dXJuIG1hdGNoX2xlbjsKKwl9CisKKwkvKgorCSAqIE9rYXksIG5vIG1hdGNoIGZyb20gdGhlIGNhY2hlIHNvIGZhciwgc28gbm93IHdlIGhhdmUgdG8KKwkgKiBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcGF0aCBjb21wb25lbnRzLgorCSAqLworCSpyZXRfZmxhZ3MgPSBGTF9ESVI7CisJbGFzdF9zbGFzaF9kaXIgPSBsYXN0X3NsYXNoOworCWlmIChsZW4gPiBjYWNoZS0+cGF0aC5sZW4pCisJCXN0cmJ1Zl9ncm93KCZjYWNoZS0+cGF0aCwgbGVuIC0gY2FjaGUtPnBhdGgubGVuKTsKKwl3aGlsZSAobWF0Y2hfbGVuIDwgbGVuKSB7CisJCWRvIHsKKwkJCWNhY2hlLT5wYXRoLmJ1ZlttYXRjaF9sZW5dID0gbmFtZVttYXRjaF9sZW5dOworCQkJbWF0Y2hfbGVuKys7CisJCX0gd2hpbGUgKG1hdGNoX2xlbiA8IGxlbiAmJiBuYW1lW21hdGNoX2xlbl0gIT0gJy8nKTsKKwkJaWYgKG1hdGNoX2xlbiA+PSBsZW4gJiYgISh0cmFja19mbGFncyAmIEZMX0ZVTExQQVRIKSkKKwkJCWJyZWFrOworCQlsYXN0X3NsYXNoID0gbWF0Y2hfbGVuOworCQljYWNoZS0+cGF0aC5idWZbbGFzdF9zbGFzaF0gPSAnXDAnOworCisJCWlmIChsYXN0X3NsYXNoIDw9IHByZWZpeF9sZW5fc3RhdF9mdW5jKQorCQkJcmV0ID0gc3RhdChjYWNoZS0+cGF0aC5idWYsICZzdCk7CisJCWVsc2UKKwkJCXJldCA9IGxzdGF0KGNhY2hlLT5wYXRoLmJ1ZiwgJnN0KTsKKworCQlpZiAocmV0KSB7CisJCQkqcmV0X2ZsYWdzID0gRkxfTFNUQVRFUlI7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCSpyZXRfZmxhZ3MgfD0gRkxfTk9FTlQ7CisJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJbGFzdF9zbGFzaF9kaXIgPSBsYXN0X3NsYXNoOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJKnJldF9mbGFncyA9IEZMX1NZTUxJTks7CisJCX0gZWxzZSB7CisJCQkqcmV0X2ZsYWdzID0gRkxfRVJSOworCQl9CisJCWJyZWFrOworCX0KKworCS8qCisJICogQXQgdGhlIGVuZCB1cGRhdGUgdGhlIGNhY2hlLiAgTm90ZSB0aGF0IG1heCAzIGRpZmZlcmVudAorCSAqIHBhdGggdHlwZXMsIEZMX05PRU5ULCBGTF9TWU1MSU5LIGFuZCBGTF9ESVIsIGNhbiBiZSBjYWNoZWQKKwkgKiBmb3IgdGhlIG1vbWVudCEKKwkgKi8KKwlzYXZlX2ZsYWdzID0gKnJldF9mbGFncyAmIHRyYWNrX2ZsYWdzICYgKEZMX05PRU5UfEZMX1NZTUxJTkspOworCWlmIChzYXZlX2ZsYWdzICYmIGxhc3Rfc2xhc2ggPiAwKSB7CisJCWNhY2hlLT5wYXRoLmJ1ZltsYXN0X3NsYXNoXSA9ICdcMCc7CisJCWNhY2hlLT5wYXRoLmxlbiA9IGxhc3Rfc2xhc2g7CisJCWNhY2hlLT5mbGFncyA9IHNhdmVfZmxhZ3M7CisJfSBlbHNlIGlmICgodHJhY2tfZmxhZ3MgJiBGTF9ESVIpICYmIGxhc3Rfc2xhc2hfZGlyID4gMCkgeworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2VwYXJhdGUgdGVzdCBmb3IgdGhlIGRpcmVjdG9yeSBjYXNlLAorCQkgKiBzaW5jZSBpdCBjb3VsZCBiZSB0aGF0IHdlIGhhdmUgZm91bmQgYSBzeW1saW5rIG9yIGEKKwkJICogbm9uLWV4aXN0aW5nIGRpcmVjdG9yeSBhbmQgdGhlIHRyYWNrX2ZsYWdzIHNheXMKKwkJICogdGhhdCB3ZSBjYW5ub3QgY2FjaGUgdGhpcyBmYWN0LCBzbyB0aGUgY2FjaGUgd291bGQKKwkJICogdGhlbiBoYXZlIGJlZW4gbGVmdCBlbXB0eSBpbiB0aGlzIGNhc2UuCisJCSAqCisJCSAqIEJ1dCBpZiB3ZSBhcmUgYWxsb3dlZCB0byB0cmFjayByZWFsIGRpcmVjdG9yaWVzLCB3ZQorCQkgKiBjYW4gc3RpbGwgY2FjaGUgdGhlIHBhdGggY29tcG9uZW50cyBiZWZvcmUgdGhlIGxhc3QKKwkJICogb25lICh0aGUgZm91bmQgc3ltbGluayBvciBub24tZXhpc3RpbmcgY29tcG9uZW50KS4KKwkJICovCisJCWNhY2hlLT5wYXRoLmJ1ZltsYXN0X3NsYXNoX2Rpcl0gPSAnXDAnOworCQljYWNoZS0+cGF0aC5sZW4gPSBsYXN0X3NsYXNoX2RpcjsKKwkJY2FjaGUtPmZsYWdzID0gRkxfRElSOworCX0gZWxzZSB7CisJCXJlc2V0X2xzdGF0X2NhY2hlKGNhY2hlKTsKKwl9CisJcmV0dXJuIG1hdGNoX2xlbjsKK30KKworc3RhdGljIGludCBsc3RhdF9jYWNoZShzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJICAgICAgIGludCB0cmFja19mbGFncywgaW50IHByZWZpeF9sZW5fc3RhdF9mdW5jKQoreworCWludCBmbGFnczsKKwkodm9pZClsc3RhdF9jYWNoZV9tYXRjaGxlbihjYWNoZSwgbmFtZSwgbGVuLCAmZmxhZ3MsIHRyYWNrX2ZsYWdzLAorCQkJcHJlZml4X2xlbl9zdGF0X2Z1bmMpOworCXJldHVybiBmbGFnczsKK30KKworI2RlZmluZSBVU0VfT05MWV9MU1RBVCAgMAorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQKKyAqLworaW50IHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlyZXR1cm4gbHN0YXRfY2FjaGUoY2FjaGUsIG5hbWUsIGxlbiwgRkxfU1lNTElOS3xGTF9ESVIsIFVTRV9PTkxZX0xTVEFUKSAmIEZMX1NZTUxJTks7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgcGF0aCAnbmFtZScgaGFzIGEgbGVhZGluZyBzeW1saW5rIGNvbXBvbmVudAorICovCitpbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aCgmZGVmYXVsdF9jYWNoZSwgbmFtZSwgbGVuKTsKK30KKworLyoKKyAqIFJldHVybiB6ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQgb3IKKyAqIGlmIHNvbWUgbGVhZGluZyBwYXRoIGNvbXBvbmVudCBkb2VzIG5vdCBleGlzdHMuCisgKgorICogUmV0dXJuIC0xIGlmIGxlYWRpbmcgcGF0aCBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5LgorICoKKyAqIFJldHVybiBwYXRoIGxlbmd0aCBpZiBsZWFkaW5nIHBhdGggZXhpc3RzIGFuZCBpcyBuZWl0aGVyIGEKKyAqIGRpcmVjdG9yeSBub3IgYSBzeW1saW5rLgorICovCitpbnQgY2hlY2tfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIHRocmVhZGVkX2NoZWNrX2xlYWRpbmdfcGF0aCgmZGVmYXVsdF9jYWNoZSwgbmFtZSwgbGVuKTsKK30KKworLyoKKyAqIFJldHVybiB6ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQgb3IKKyAqIGlmIHNvbWUgbGVhZGluZyBwYXRoIGNvbXBvbmVudCBkb2VzIG5vdCBleGlzdHMuCisgKgorICogUmV0dXJuIC0xIGlmIGxlYWRpbmcgcGF0aCBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5LgorICoKKyAqIFJldHVybiBwYXRoIGxlbmd0aCBpZiBsZWFkaW5nIHBhdGggZXhpc3RzIGFuZCBpcyBuZWl0aGVyIGEKKyAqIGRpcmVjdG9yeSBub3IgYSBzeW1saW5rLgorICovCitzdGF0aWMgaW50IHRocmVhZGVkX2NoZWNrX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlpbnQgZmxhZ3M7CisJaW50IG1hdGNoX2xlbiA9IGxzdGF0X2NhY2hlX21hdGNobGVuKGNhY2hlLCBuYW1lLCBsZW4sICZmbGFncywKKwkJCSAgIEZMX1NZTUxJTkt8RkxfTk9FTlR8RkxfRElSLCBVU0VfT05MWV9MU1RBVCk7CisJaWYgKGZsYWdzICYgRkxfTk9FTlQpCisJCXJldHVybiAwOworCWVsc2UgaWYgKGZsYWdzICYgRkxfRElSKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gbWF0Y2hfbGVuOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIGFsbCBwYXRoIGNvbXBvbmVudHMgb2YgJ25hbWUnIGV4aXN0cyBhcyBhCisgKiBkaXJlY3RvcnkuICBJZiBwcmVmaXhfbGVuID4gMCwgd2Ugd2lsbCB0ZXN0IHdpdGggdGhlIHN0YXQoKQorICogZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbiBmb3IgYSBwcmVmaXggbGVuZ3RoIG9mCisgKiAncHJlZml4X2xlbicsIHRodXMgd2UgdGhlbiBhbGxvdyBmb3Igc3ltbGlua3MgaW4gdGhlIHByZWZpeCBwYXJ0IGFzCisgKiBsb25nIGFzIHRob3NlIHBvaW50cyB0byByZWFsIGV4aXN0aW5nIGRpcmVjdG9yaWVzLgorICovCitpbnQgaGFzX2RpcnNfb25seV9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIGludCBwcmVmaXhfbGVuKQoreworCXJldHVybiB0aHJlYWRlZF9oYXNfZGlyc19vbmx5X3BhdGgoJmRlZmF1bHRfY2FjaGUsIG5hbWUsIGxlbiwgcHJlZml4X2xlbik7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgYWxsIHBhdGggY29tcG9uZW50cyBvZiAnbmFtZScgZXhpc3RzIGFzIGEKKyAqIGRpcmVjdG9yeS4gIElmIHByZWZpeF9sZW4gPiAwLCB3ZSB3aWxsIHRlc3Qgd2l0aCB0aGUgc3RhdCgpCisgKiBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBsc3RhdCgpIGZ1bmN0aW9uIGZvciBhIHByZWZpeCBsZW5ndGggb2YKKyAqICdwcmVmaXhfbGVuJywgdGh1cyB3ZSB0aGVuIGFsbG93IGZvciBzeW1saW5rcyBpbiB0aGUgcHJlZml4IHBhcnQgYXMKKyAqIGxvbmcgYXMgdGhvc2UgcG9pbnRzIHRvIHJlYWwgZXhpc3RpbmcgZGlyZWN0b3JpZXMuCisgKi8KK3N0YXRpYyBpbnQgdGhyZWFkZWRfaGFzX2RpcnNfb25seV9wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbikKK3sKKwlyZXR1cm4gbHN0YXRfY2FjaGUoY2FjaGUsIG5hbWUsIGxlbiwKKwkJCSAgIEZMX0RJUnxGTF9GVUxMUEFUSCwgcHJlZml4X2xlbikgJgorCQlGTF9ESVI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHJlbW92YWwgPSBTVFJCVUZfSU5JVDsKKworc3RhdGljIHZvaWQgZG9fcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKGludCBuZXdfbGVuKQoreworCXdoaWxlIChyZW1vdmFsLmxlbiA+IG5ld19sZW4pIHsKKwkJcmVtb3ZhbC5idWZbcmVtb3ZhbC5sZW5dID0gJ1wwJzsKKwkJaWYgKHJtZGlyKHJlbW92YWwuYnVmKSkKKwkJCWJyZWFrOworCQlkbyB7CisJCQlyZW1vdmFsLmxlbi0tOworCQl9IHdoaWxlIChyZW1vdmFsLmxlbiA+IG5ld19sZW4gJiYKKwkJCSByZW1vdmFsLmJ1ZltyZW1vdmFsLmxlbl0gIT0gJy8nKTsKKwl9CisJcmVtb3ZhbC5sZW4gPSBuZXdfbGVuOworfQorCit2b2lkIHNjaGVkdWxlX2Rpcl9mb3JfcmVtb3ZhbChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCWludCBtYXRjaF9sZW4sIGxhc3Rfc2xhc2gsIGksIHByZXZpb3VzX3NsYXNoOworCisJbWF0Y2hfbGVuID0gbGFzdF9zbGFzaCA9IGkgPQorCQlsb25nZXN0X3BhdGhfbWF0Y2gobmFtZSwgbGVuLCByZW1vdmFsLmJ1ZiwgcmVtb3ZhbC5sZW4sCisJCQkJICAgJnByZXZpb3VzX3NsYXNoKTsKKwkvKiBGaW5kIGxhc3Qgc2xhc2ggaW5zaWRlICduYW1lJyAqLworCXdoaWxlIChpIDwgbGVuKSB7CisJCWlmIChuYW1lW2ldID09ICcvJykKKwkJCWxhc3Rfc2xhc2ggPSBpOworCQlpKys7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgYWJvdXQgdG8gZ28gZG93biB0aGUgZGlyZWN0b3J5IHRyZWUsIHdlIGNoZWNrIGlmCisJICogd2UgbXVzdCBmaXJzdCBnbyB1cHdhcmRzIHRoZSB0cmVlLCBzdWNoIHRoYXQgd2UgdGhlbiBjYW4KKwkgKiByZW1vdmUgcG9zc2libGUgZW1wdHkgZGlyZWN0b3JpZXMgYXMgd2UgZ28gdXB3YXJkcy4KKwkgKi8KKwlpZiAobWF0Y2hfbGVuIDwgbGFzdF9zbGFzaCAmJiBtYXRjaF9sZW4gPCByZW1vdmFsLmxlbikKKwkJZG9fcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKG1hdGNoX2xlbik7CisJLyoKKwkgKiBJZiB3ZSBnbyBkZWVwZXIgZG93biB0aGUgZGlyZWN0b3J5IHRyZWUsIHdlIG9ubHkgbmVlZCB0bworCSAqIHNhdmUgdGhlIG5ldyBwYXRoIGNvbXBvbmVudHMgYXMgd2UgZ28gZG93bi4KKwkgKi8KKwlpZiAobWF0Y2hfbGVuIDwgbGFzdF9zbGFzaCkKKwkJc3RyYnVmX2FkZCgmcmVtb3ZhbCwgJm5hbWVbbWF0Y2hfbGVuXSwgbGFzdF9zbGFzaCAtIG1hdGNoX2xlbik7Cit9CisKK3ZvaWQgcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKHZvaWQpCit7CisJZG9fcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKDApOworfQpkaWZmIC0tZ2l0IGEvdC8uZ2l0YXR0cmlidXRlcyBiL3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwNTQzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSwyNSBAQAordFswLTldWzAtOV1bMC05XVswLTldLyogLXdoaXRlc3BhY2UKKy9jaGFpbmxpbnQvKi5leHBlY3QgZW9sPWxmCisvZGlmZi1saWIvKiBlb2w9bGYKKy90MDExMC91cmwtKiBiaW5hcnkKKy90MzIwNi8qIGVvbD1sZgorL3QzOTAwLyoudHh0IGVvbD1sZgorL3QzOTAxLyoudHh0IGVvbD1sZgorL3Q0MDM0LyovKiBlb2w9bGYKKy90NDAxMy8qIGVvbD1sZgorL3Q0MDE4LyogZW9sPWxmCisvdDQwNTEvKiBlb2w9bGYKKy90NDEwMC8qIGVvbD1sZgorL3Q0MTAxLyogZW9sPWxmCisvdDQxMDkvKiBlb2w9bGYKKy90NDExMC8qIGVvbD1sZgorL3Q0MTM1LyogZW9sPWxmCisvdDQyMTEvKiBlb2w9bGYKKy90NDI1Mi8qIGVvbD1sZgorL3Q0MjU2LzEvKiBlb2w9bGYKKy90NTEwMC8qIGVvbD1sZgorL3Q1NTE1LyogZW9sPWxmCisvdDU1NnhfY29tbW9uIGVvbD1sZgorL3Q3NTAwLyogZW9sPWxmCisvdDgwMDUvKi50eHQgZW9sPWxmCisvdDkqLyouZHVtcCBlb2w9bGYKZGlmZiAtLWdpdCBhL3QvLmdpdGlnbm9yZSBiL3QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNmNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNSBAQAorL3RyYXNoIGRpcmVjdG9yeSoKKy90ZXN0LXJlc3VsdHMKKy8ucHJvdmUKKy9jaGFpbmxpbnR0bXAKKy9vdXQvCmRpZmYgLS1naXQgYS90L0dpdC1TVk4vMDBjb21waWxlLnQgYi90L0dpdC1TVk4vMDBjb21waWxlLnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzkyZmVlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi8wMGNvbXBpbGUudApAQCAtMCwwICsxLDE0IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDc7CisKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOJzsKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOOjpVdGlscyc7CityZXF1aXJlX29rICdHaXQ6OlNWTjo6UmEnOworcmVxdWlyZV9vayAnR2l0OjpTVk46OkxvZyc7CityZXF1aXJlX29rICdHaXQ6OlNWTjo6TWlncmF0aW9uJzsKK3JlcXVpcmVfb2sgJ0dpdDo6SW5kZXhJbmZvJzsKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOOjpHbG9iU3BlYyc7CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvYWRkX3BhdGhfdG9fdXJsLnQgYi90L0dpdC1TVk4vVXRpbHMvYWRkX3BhdGhfdG9fdXJsLnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmZiZDg3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi9VdGlscy9hZGRfcGF0aF90b191cmwudApAQCAtMCwwICsxLDI3IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlhZGRfcGF0aF90b191cmwKKyk7CisKKyMgQSByZWZlcmVuY2UgY2Fubm90IGJlIGEgaGFzaCBrZXksIHNvIHdlIHVzZSBhbiBhcnJheS4KK215IEB0ZXN0cyA9ICgKKwlbImh0dHA6Ly94LmNvbSIsICJiYXIiXQkJCT0+ICdodHRwOi8veC5jb20vYmFyJywKKwlbImh0dHA6Ly94LmNvbSIsICIiXQkJCT0+ICdodHRwOi8veC5jb20nLAorCVsiaHR0cDovL3guY29tL2Zvby8iLCB1bmRlZl0JCT0+ICdodHRwOi8veC5jb20vZm9vLycsCisJWyJodHRwOi8veC5jb20vZm9vLyIsICIvYmFyL2Jhei8iXQk9PiAnaHR0cDovL3guY29tL2Zvby9iYXIvYmF6LycsCisJWyJodHRwOi8veC5jb20iLCAncGVyJWNlbnQnXQkJPT4gJ2h0dHA6Ly94LmNvbS9wZXIlMjVjZW50JywKKyk7CisKK3doaWxlKEB0ZXN0cykgeworCW15KCRoYXZlLCAkd2FudCkgPSBzcGxpY2UgQHRlc3RzLCAwLCAyOworCisJbXkgJGFyZ3MgPSBqb2luICIsICIsIG1hcCB7IHFxWyckXyddIH0gbWFwIHsgZGVmaW5lZCgkXykgPyAkXyA6ICd1bmRlZicgfSBAJGhhdmU7CisJbXkgJG5hbWUgPSAiYWRkX3BhdGhfdG9fdXJsKCRhcmdzKSBlcSAkd2FudCI7CisJaXMgYWRkX3BhdGhfdG9fdXJsKEAkaGF2ZSksICR3YW50LCAkbmFtZTsKK30KZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jYW5fY29tcHJlc3MudCBiL3QvR2l0LVNWTi9VdGlscy9jYW5fY29tcHJlc3MudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kN2I0OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2Nhbl9jb21wcmVzcy50CkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgVGVzdDo6TW9yZSAnbm9fcGxhbic7CisKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoY2FuX2NvbXByZXNzKTsKKworIyAhISBpcyB0aGUgImNvbnZlcnQgdGhpcyB0byBib29sZWFuIiBvcGVyYXRvci4KK2lzICEhY2FuX2NvbXByZXNzKCksICEhZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWIgfTsKZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jYW5vbmljYWxpemVfdXJsLnQgYi90L0dpdC1TVk4vVXRpbHMvY2Fub25pY2FsaXplX3VybC50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1Nzk1YWIKLS0tIC9kZXYvbnVsbAorKysgYi90L0dpdC1TVk4vVXRpbHMvY2Fub25pY2FsaXplX3VybC50CkBAIC0wLDAgKzEsMjYgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyBUZXN0IG91ciBvd24gaG9tZSByb2xsZWQgVVJMIGNhbm9uaWNhbGl6ZXIuICBUZXN0IHRoZSBwcml2YXRlIG9uZQorIyBkaXJlY3RseSBiZWNhdXNlIHdlIGNhbid0IHByZWRpY3Qgd2hhdCB0aGUgU1ZOIEFQSSBpcyBkb2luZyB0byBkby4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6Ok1vcmUgJ25vX3BsYW4nOworCit1c2UgR2l0OjpTVk46OlV0aWxzOworbXkgJGNhbm9uaWNhbGl6ZV91cmwgPSBcJkdpdDo6U1ZOOjpVdGlsczo6X2Nhbm9uaWNhbGl6ZV91cmxfb3Vyc2VsdmVzOworCitteSAldGVzdHMgPSAoCisJImh0dHA6Ly94LmNvbSIJCQk9PiAiaHR0cDovL3guY29tIiwKKwkiaHR0cDovL3guY29tLyIJCQk9PiAiaHR0cDovL3guY29tIiwKKwkiaHR0cDovL3guY29tL2Zvby9iYXIiCQk9PiAiaHR0cDovL3guY29tL2Zvby9iYXIiLAorCSJodHRwOi8veC5jb20vL2Zvby8vYmFyLy8iCT0+ICJodHRwOi8veC5jb20vZm9vL2JhciIsCisJImh0dHA6Ly94LmNvbS8gIC8lLyIJCT0+ICJodHRwOi8veC5jb20vJTIwJTIwLyUyNSIsCispOworCitmb3IgbXkgJGFyZyAoa2V5cyAldGVzdHMpIHsKKwlteSAkd2FudCA9ICR0ZXN0c3skYXJnfTsKKworCWlzICRjYW5vbmljYWxpemVfdXJsLT4oJGFyZyksICR3YW50LCAiY2Fub25pY2FsaXplX3VybCgnJGFyZycpID0+ICR3YW50IjsKK30KZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jb2xsYXBzZV9kb3Rkb3QudCBiL3QvR2l0LVNWTi9VdGlscy9jb2xsYXBzZV9kb3Rkb3QudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZGExY2NlCi0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2NvbGxhcHNlX2RvdGRvdC50CkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6Ok1vcmUgJ25vX3BsYW4nOworCit1c2UgR2l0OjpTVk46OlV0aWxzOworbXkgJGNvbGxhcHNlX2RvdGRvdCA9IFwmR2l0OjpTVk46OlV0aWxzOjpfY29sbGFwc2VfZG90ZG90OworCitteSAldGVzdHMgPSAoCisJImZvby9iYXIvYmF6IgkJCT0+ICJmb28vYmFyL2JheiIsCisJIi4uIgkJCQk9PiAiLi4iLAorCSJmb28vLi4iCQkJPT4gIiIsCisJIi9mb28vYmFyLy4uLy4uL2JheiIJCT0+ICIvYmF6IiwKKwkiZGVlcGx5Ly4uLy4vZGVlcGx5L25lc3RlZCIJPT4gIi4vZGVlcGx5L25lc3RlZCIsCispOworCitmb3IgbXkgJGFyZyAoa2V5cyAldGVzdHMpIHsKKwlteSAkd2FudCA9ICR0ZXN0c3skYXJnfTsKKworCWlzICRjb2xsYXBzZV9kb3Rkb3QtPigkYXJnKSwgJHdhbnQsICJfY29sbGFwc2VfZG90ZG90KCckYXJnJykgPT4gJHdhbnQiOworfQpkaWZmIC0tZ2l0IGEvdC9HaXQtU1ZOL1V0aWxzL2ZhdGFsLnQgYi90L0dpdC1TVk4vVXRpbHMvZmF0YWwudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OWUxNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2ZhdGFsLnQKQEAgLTAsMCArMSwzNCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKworQkVHSU4geworCSMgT3ZlcnJpZGUgZXhpdCBhdCBCRUdJTiB0aW1lIGJlZm9yZSBHaXQ6OlNWTjo6VXRpbHMgaXMgbG9hZGVkCisJIyBzbyBpdCB3aWxsIHNlZSBvdXIgbG9jYWwgZXhpdCBsYXRlci4KKwkqQ09SRTo6R0xPQkFMOjpleGl0ID0gc3ViKDskKSB7CisJcmV0dXJuIEBfID8gQ09SRTo6ZXhpdCgkX1swXSkgOiBDT1JFOjpleGl0KCk7CisJfTsKK30KKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdyhmYXRhbCk7CisKKyMgZmF0YWwoKQoreworCSMgQ2FwdHVyZSB0aGUgZXhpdCBjb2RlIGFuZCBwcmV2ZW50IGV4aXQuCisJbXkgJGV4aXRfc3RhdHVzOworCW5vIHdhcm5pbmdzICdyZWRlZmluZSc7CisJbG9jYWwgKkNPUkU6OkdMT0JBTDo6ZXhpdCA9IHN1YiB7ICRleGl0X3N0YXR1cyA9ICRfWzBdIHx8IDAgfTsKKworCSMgVHJhcCBmYXRhbCdzIG1lc3NhZ2UgdG8gU1RERVJSCisJbXkgJHN0ZGVycjsKKwljbG9zZSBTVERFUlI7CisJb2sgb3BlbiBTVERFUlIsICI+IiwgXCRzdGRlcnI7CisKKwlmYXRhbCAiU29tZSIsICJTdHVmZiIsICJIYXBwZW5lZCI7CisKKwlpcyAkc3RkZXJyLCAiU29tZSBTdHVmZiBIYXBwZW5lZFxuIjsKKwlpcyAkZXhpdF9zdGF0dXMsIDE7Cit9CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvam9pbl9wYXRocy50IGIvdC9HaXQtU1ZOL1V0aWxzL2pvaW5fcGF0aHMudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNDQ4OGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2pvaW5fcGF0aHMudApAQCAtMCwwICsxLDMyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlqb2luX3BhdGhzCispOworCisjIEEgcmVmZXJlbmNlIGNhbm5vdCBiZSBhIGhhc2gga2V5LCBzbyB3ZSB1c2UgYW4gYXJyYXkuCitteSBAdGVzdHMgPSAoCisJW10JCQkJCT0+ICcnLAorCVsiL3guY29tIiwgImJhciJdCQkJPT4gJy94LmNvbS9iYXInLAorCVsieC5jb20iLCAiIl0JCQkJPT4gJ3guY29tJywKKwlbIi94LmNvbS9mb28vIiwgdW5kZWYsICJiYXIiXQkJPT4gJy94LmNvbS9mb28vYmFyJywKKwlbInguY29tL2Zvby8iLCAiL2Jhci9iYXovIl0JCT0+ICd4LmNvbS9mb28vYmFyL2Jhei8nLAorCVsiZm9vIiwgImJhciJdCQkJCT0+ICdmb28vYmFyJywKKwlbIi9mb28vYmFyIiwgImJheiIsICIvYmlmZiJdCQk9PiAnL2Zvby9iYXIvYmF6L2JpZmYnLAorCVsiIiwgdW5kZWYsICIuIl0JCQk9PiAnLicsCisJW10JCQkJCT0+ICcnLAorCispOworCit3aGlsZShAdGVzdHMpIHsKKwlteSgkaGF2ZSwgJHdhbnQpID0gc3BsaWNlIEB0ZXN0cywgMCwgMjsKKworCW15ICRhcmdzID0gam9pbiAiLCAiLCBtYXAgeyBxcVsnJF8nXSB9IG1hcCB7IGRlZmluZWQoJF8pID8gJF8gOiAndW5kZWYnIH0gQCRoYXZlOworCW15ICRuYW1lID0gImpvaW5fcGF0aHMoJGFyZ3MpIGVxICckd2FudCciOworCWlzIGpvaW5fcGF0aHMoQCRoYXZlKSwgJHdhbnQsICRuYW1lOworfQpkaWZmIC0tZ2l0IGEvdC9NYWtlZmlsZSBiL3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzZmQxOAotLS0gL2Rldi9udWxsCisrKyBiL3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMjIgQEAKKyMgUnVuIHRlc3RzCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCistaW5jbHVkZSAuLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uL2NvbmZpZy5tYWsKKworI0dJVF9URVNUX09QVFMgPSAtLXZlcmJvc2UgLS1kZWJ1ZworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorVEVTVF9TSEVMTF9QQVRIID89ICQoU0hFTExfUEFUSCkKK1BFUkxfUEFUSCA/PSAvdXNyL2Jpbi9wZXJsCitUQVIgPz0gJChUQVIpCitSTSA/PSBybSAtZgorUFJPVkUgPz0gcHJvdmUKK0RFRkFVTFRfVEVTVF9UQVJHRVQgPz0gdGVzdAorVEVTVF9MSU5UID89IHRlc3QtbGludAorCitpZmRlZiBURVNUX09VVFBVVF9ESVJFQ1RPUlkKK1RFU1RfUkVTVUxUU19ESVJFQ1RPUlkgPSAkKFRFU1RfT1VUUFVUX0RJUkVDVE9SWSkvdGVzdC1yZXN1bHRzCitDSEFJTkxJTlRUTVAgPSAkKFRFU1RfT1VUUFVUX0RJUkVDVE9SWSkvY2hhaW5saW50dG1wCitlbHNlCitURVNUX1JFU1VMVFNfRElSRUNUT1JZID0gdGVzdC1yZXN1bHRzCitDSEFJTkxJTlRUTVAgPSBjaGFpbmxpbnR0bXAKK2VuZGlmCisKKyMgU2hlbGwgcXVvdGU7CitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKK1RFU1RfU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoVEVTVF9TSEVMTF9QQVRIKSkKK1BFUkxfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkKK1RFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRFU1RfUkVTVUxUU19ESVJFQ1RPUlkpKQorQ0hBSU5MSU5UVE1QX1NRID0gJChzdWJzdCAnLCdcJycsJChDSEFJTkxJTlRUTVApKQorCitUID0gJChzb3J0ICQod2lsZGNhcmQgdFswLTldWzAtOV1bMC05XVswLTldLSouc2gpKQorVEdJVFdFQiA9ICQoc29ydCAkKHdpbGRjYXJkIHQ5NVswLTldWzAtOV0tKi5zaCkpCitUSEVMUEVSUyA9ICQoc29ydCAkKGZpbHRlci1vdXQgJChUKSwkKHdpbGRjYXJkICouc2gpKSkKK0NIQUlOTElOVFRFU1RTID0gJChzb3J0ICQocGF0c3Vic3QgY2hhaW5saW50LyUudGVzdCwlLCQod2lsZGNhcmQgY2hhaW5saW50LyoudGVzdCkpKQorQ0hBSU5MSU5UID0gc2VkIC1mIGNoYWlubGludC5zZWQKKworYWxsOiAkKERFRkFVTFRfVEVTVF9UQVJHRVQpCisKK3Rlc3Q6IHByZS1jbGVhbiBjaGVjay1jaGFpbmxpbnQgJChURVNUX0xJTlQpCisJJChNQUtFKSBhZ2dyZWdhdGUtcmVzdWx0cy1hbmQtY2xlYW51cAorCitmYWlsZWQ6CisJQGZhaWxlZD0kJChjZCAnJChURVNUX1JFU1VMVFNfRElSRUNUT1JZX1NRKScgJiYgXAorCQlncmVwIC1sICdeZmFpbGVkIFsxLTldJyAqLmNvdW50cyB8IFwKKwkJc2VkIC1uICdzL1wuY291bnRzJCQvLnNoL3AnKSAmJiBcCisJdGVzdCAteiAiJCRmYWlsZWQiIHx8ICQoTUFLRSkgJCRmYWlsZWQKKworcHJvdmU6IHByZS1jbGVhbiBjaGVjay1jaGFpbmxpbnQgJChURVNUX0xJTlQpCisJQGVjaG8gIioqKiBwcm92ZSAqKioiOyAkKFBST1ZFKSAtLWV4ZWMgJyQoVEVTVF9TSEVMTF9QQVRIX1NRKScgJChHSVRfUFJPVkVfT1BUUykgJChUKSA6OiAkKEdJVF9URVNUX09QVFMpCisJJChNQUtFKSBjbGVhbi1leGNlcHQtcHJvdmUtY2FjaGUKKworJChUKToKKwlAZWNobyAiKioqICRAICoqKiI7ICckKFRFU1RfU0hFTExfUEFUSF9TUSknICRAICQoR0lUX1RFU1RfT1BUUykKKworcHJlLWNsZWFuOgorCSQoUk0pIC1yICckKFRFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EpJworCitjbGVhbi1leGNlcHQtcHJvdmUtY2FjaGU6IGNsZWFuLWNoYWlubGludAorCSQoUk0pIC1yICd0cmFzaCBkaXJlY3RvcnknLiogJyQoVEVTVF9SRVNVTFRTX0RJUkVDVE9SWV9TUSknCisJJChSTSkgLXIgdmFsZ3JpbmQvYmluCisKK2NsZWFuOiBjbGVhbi1leGNlcHQtcHJvdmUtY2FjaGUKKwkkKFJNKSAucHJvdmUKKworY2xlYW4tY2hhaW5saW50OgorCSQoUk0pIC1yICckKENIQUlOTElOVFRNUF9TUSknCisKK2NoZWNrLWNoYWlubGludDoKKwlAbWtkaXIgLXAgJyQoQ0hBSU5MSU5UVE1QX1NRKScgJiYgXAorCWVycj0wICYmIFwKKwlmb3IgaSBpbiAkKENIQUlOTElOVFRFU1RTKTsgZG8gXAorCQkkKENIQUlOTElOVCkgPGNoYWlubGludC8kJGkudGVzdCB8IFwKKwkJc2VkIC1lICcvXiMgTElOVDogL2QnID4nJChDSEFJTkxJTlRUTVBfU1EpJy8kJGkuYWN0dWFsICYmIFwKKwkJZGlmZiAtdSBjaGFpbmxpbnQvJCRpLmV4cGVjdCAnJChDSEFJTkxJTlRUTVBfU1EpJy8kJGkuYWN0dWFsIHx8IGVycj0xOyBcCisJZG9uZSAmJiBleGl0ICQkZXJyCisKK3Rlc3QtbGludDogdGVzdC1saW50LWR1cGxpY2F0ZXMgdGVzdC1saW50LWV4ZWN1dGFibGUgdGVzdC1saW50LXNoZWxsLXN5bnRheCBcCisJdGVzdC1saW50LWZpbGVuYW1lcworCit0ZXN0LWxpbnQtZHVwbGljYXRlczoKKwlAZHVwcz1gZWNobyAkKFQpIHwgdHIgJyAnICdcbicgfCBzZWQgJ3MvLS4qLy8nIHwgc29ydCB8IHVuaXEgLWRgICYmIFwKKwkJdGVzdCAteiAiJCRkdXBzIiB8fCB7IFwKKwkJZWNobyA+JjIgImR1cGxpY2F0ZSB0ZXN0IG51bWJlcnM6IiAkJGR1cHM7IGV4aXQgMTsgfQorCit0ZXN0LWxpbnQtZXhlY3V0YWJsZToKKwlAYmFkPWBmb3IgaSBpbiAkKFQpOyBkbyB0ZXN0IC14ICIkJGkiIHx8IGVjaG8gJCRpOyBkb25lYCAmJiBcCisJCXRlc3QgLXogIiQkYmFkIiB8fCB7IFwKKwkJZWNobyA+JjIgIm5vbi1leGVjdXRhYmxlIHRlc3RzOiIgJCRiYWQ7IGV4aXQgMTsgfQorCit0ZXN0LWxpbnQtc2hlbGwtc3ludGF4OgorCUAnJChQRVJMX1BBVEhfU1EpJyBjaGVjay1ub24tcG9ydGFibGUtc2hlbGwucGwgJChUKSAkKFRIRUxQRVJTKQorCit0ZXN0LWxpbnQtZmlsZW5hbWVzOgorCUAjIFdlIGRvICpub3QqIHBhc3MgYSBnbG9iIHRvIGxzLWZpbGVzIGJ1dCB1c2UgZ3JlcCBpbnN0ZWFkLCB0byBjYXRjaAorCUAjIG5vbi1BU0NJSSBjaGFyYWN0ZXJzICh3aGljaCBhcmUgcXVvdGVkIHdpdGhpbiBkb3VibGUtcXVvdGVzKQorCUBiYWQ9IiQkKGdpdCAtYyBjb3JlLnF1b3RlcGF0aD10cnVlIGxzLWZpbGVzIDI+L2Rldi9udWxsIHwgXAorCQkJZ3JlcCAnWyIqOjw+P1xcfF0nKSI7IFwKKwkJdGVzdCAteiAiJCRiYWQiIHx8IHsgXAorCQllY2hvID4mMiAibm9uLXBvcnRhYmxlIGZpbGUgbmFtZShzKTogJCRiYWQiOyBleGl0IDE7IH0KKworYWdncmVnYXRlLXJlc3VsdHMtYW5kLWNsZWFudXA6ICQoVCkKKwkkKE1BS0UpIGFnZ3JlZ2F0ZS1yZXN1bHRzCisJJChNQUtFKSBjbGVhbgorCithZ2dyZWdhdGUtcmVzdWx0czoKKwlmb3IgZiBpbiAnJChURVNUX1JFU1VMVFNfRElSRUNUT1JZX1NRKScvdCotKi5jb3VudHM7IGRvIFwKKwkJZWNobyAiJCRmIjsgXAorCWRvbmUgfCAnJChTSEVMTF9QQVRIX1NRKScgLi9hZ2dyZWdhdGUtcmVzdWx0cy5zaAorCitnaXR3ZWItdGVzdDoKKwkkKE1BS0UpICQoVEdJVFdFQikKKwordmFsZ3JpbmQ6CisJJChNQUtFKSBHSVRfVEVTVF9PUFRTPSIkKEdJVF9URVNUX09QVFMpIC0tdmFsZ3JpbmQiCisKK3BlcmY6CisJJChNQUtFKSAtQyBwZXJmLyBhbGwKKworLlBIT05ZOiBwcmUtY2xlYW4gJChUKSBhZ2dyZWdhdGUtcmVzdWx0cyBjbGVhbiB2YWxncmluZCBwZXJmIGNoZWNrLWNoYWlubGludCBjbGVhbi1jaGFpbmxpbnQKZGlmZiAtLWdpdCBhL3QvUkVBRE1FIGIvdC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmZDYxZQotLS0gL2Rldi9udWxsCisrKyBiL3QvUkVBRE1FCkBAIC0wLDAgKzEsMTE0MSBAQAorQ29yZSBHSVQgVGVzdHMKKz09PT09PT09PT09PT09CisKK1RoaXMgZGlyZWN0b3J5IGhvbGRzIG1hbnkgdGVzdCBzY3JpcHRzIGZvciBjb3JlIEdJVCB0b29scy4gIFRoZQorZmlyc3QgcGFydCBvZiB0aGlzIHNob3J0IGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gcnVuIHRoZSB0ZXN0cworYW5kIHJlYWQgdGhlaXIgb3V0cHV0LgorCitXaGVuIGZpeGluZyB0aGUgdG9vbHMgb3IgYWRkaW5nIGVuaGFuY2VtZW50cywgeW91IGFyZSBzdHJvbmdseQorZW5jb3VyYWdlZCB0byBhZGQgdGVzdHMgaW4gdGhpcyBkaXJlY3RvcnkgdG8gY292ZXIgd2hhdCB5b3UgYXJlCit0cnlpbmcgdG8gZml4IG9yIGVuaGFuY2UuICBUaGUgbGF0ZXIgcGFydCBvZiB0aGlzIHNob3J0IGRvY3VtZW50CitkZXNjcmliZXMgaG93IHlvdXIgdGVzdCBzY3JpcHRzIHNob3VsZCBiZSBvcmdhbml6ZWQuCisKKworUnVubmluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gcnVuIHRlc3RzIGlzIHRvIHNheSAibWFrZSIuICBUaGlzIHJ1bnMgYWxsCit0aGUgdGVzdHMuCisKKyAgICAqKiogdDAwMDAtYmFzaWMuc2ggKioqCisgICAgb2sgMSAtIC5naXQvb2JqZWN0cyBzaG91bGQgYmUgZW1wdHkgYWZ0ZXIgZ2l0IGluaXQgaW4gYW4gZW1wdHkgcmVwby4KKyAgICBvayAyIC0gLmdpdC9vYmplY3RzIHNob3VsZCBoYXZlIDMgc3ViZGlyZWN0b3JpZXMuCisgICAgb2sgMyAtIHN1Y2Nlc3MgaXMgcmVwb3J0ZWQgbGlrZSB0aGlzCisgICAgLi4uCisgICAgb2sgNDMgLSB2ZXJ5IGxvbmcgbmFtZSBpbiB0aGUgaW5kZXggaGFuZGxlZCBzYW5lbHkKKyAgICAjIGZpeGVkIDEga25vd24gYnJlYWthZ2UocykKKyAgICAjIHN0aWxsIGhhdmUgMSBrbm93biBicmVha2FnZShzKQorICAgICMgcGFzc2VkIGFsbCByZW1haW5pbmcgNDIgdGVzdChzKQorICAgIDEuLjQzCisgICAgKioqIHQwMDAxLWluaXQuc2ggKioqCisgICAgb2sgMSAtIHBsYWluCisgICAgb2sgMiAtIHBsYWluIHdpdGggR0lUX1dPUktfVFJFRQorICAgIG9rIDMgLSBwbGFpbiBiYXJlCisKK1NpbmNlIHRoZSB0ZXN0cyBhbGwgb3V0cHV0IFRBUCAoc2VlIGh0dHA6Ly90ZXN0YW55dGhpbmcub3JnKSB0aGV5IGNhbgorYmUgcnVuIHdpdGggYW55IFRBUCBoYXJuZXNzLiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBwYXJhbGxlbCB0ZXN0aW5nCitwb3dlcmVkIGJ5IGEgcmVjZW50IHZlcnNpb24gb2YgcHJvdmUoMSk6CisKKyAgICAkIHByb3ZlIC0tdGltZXIgLS1qb2JzIDE1IC4vdFswLTldKi5zaAorICAgIFsxOToxNzozM10gLi90MDAwNS1zaWduYWxzLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIG9rICAgICAgIDM2IG1zCisgICAgWzE5OjE3OjMzXSAuL3QwMDIyLWNybGYtcmVuYW1lLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gb2sgICAgICAgNjkgbXMKKyAgICBbMTk6MTc6MzNdIC4vdDAwMjQtY3JsZi1hcmNoaXZlLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBvayAgICAgIDE1NCBtcworICAgIFsxOToxNzozM10gLi90MDAwNC11bndyaXRhYmxlLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIG9rICAgICAgMjg5IG1zCisgICAgWzE5OjE3OjMzXSAuL3QwMDAyLWdpdGZpbGUuc2ggLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gb2sgICAgICA0ODAgbXMKKyAgICA9PT0oICAgICAxMDI7MCAgMjUvPyAgNi8/ICA1Lz8gIDE2Lz8gIDEvPyAgNC8/ICAyLz8gIDEvPyAgMy8/ICAxLi4uICk9PT0KKworcHJvdmUgYW5kIG90aGVyIGhhcm5lc3NlcyBjb21lIHdpdGggYSBsb3Qgb2YgdXNlZnVsIG9wdGlvbnMuIFRoZQorLS1zdGF0ZSBvcHRpb24gaW4gcGFydGljdWxhciBpcyB2ZXJ5IHVzZWZ1bDoKKworICAgICMgUmVwZWF0IHVudGlsIG5vIG1vcmUgZmFpbHVyZXMKKyAgICAkIHByb3ZlIC1qIDE1IC0tc3RhdGU9ZmFpbGVkLHNhdmUgLi90WzAtOV0qLnNoCisKK1lvdSBjYW4gZ2l2ZSBERUZBVUxUX1RFU1RfVEFSR0VUPXByb3ZlIG9uIHRoZSBtYWtlIGNvbW1hbmQgKG9yIGRlZmluZSBpdAoraW4gY29uZmlnLm1haykgdG8gY2F1c2UgIm1ha2UgdGVzdCIgdG8gcnVuIHRlc3RzIHVuZGVyIHByb3ZlLgorR0lUX1BST1ZFX09QVFMgY2FuIGJlIHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMsIGUuZy4KKworICAgICQgbWFrZSBERUZBVUxUX1RFU1RfVEFSR0VUPXByb3ZlIEdJVF9QUk9WRV9PUFRTPSctLXRpbWVyIC0tam9icyAxNicgdGVzdAorCitZb3UgY2FuIGFsc28gcnVuIGVhY2ggdGVzdCBpbmRpdmlkdWFsbHkgZnJvbSBjb21tYW5kIGxpbmUsIGxpa2UgdGhpczoKKworICAgICQgc2ggLi90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKKyAgICBvayAxIC0gZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0byBhZGQgdmFyaW91cyBwYXRocy4KKyAgICBvayAyIC0gZ2l0IGxzLWZpbGVzIC1rIHRvIHNob3cga2lsbGVkIGZpbGVzLgorICAgIG9rIDMgLSB2YWxpZGF0ZSBnaXQgbHMtZmlsZXMgLWsgb3V0cHV0LgorICAgIG9rIDQgLSBnaXQgbHMtZmlsZXMgLW0gdG8gc2hvdyBtb2RpZmllZCBmaWxlcy4KKyAgICBvayA1IC0gdmFsaWRhdGUgZ2l0IGxzLWZpbGVzIC1tIG91dHB1dC4KKyAgICAjIHBhc3NlZCBhbGwgNSB0ZXN0KHMpCisgICAgMS4uNQorCitZb3UgY2FuIHBhc3MgLS12ZXJib3NlIChvciAtdiksIC0tZGVidWcgKG9yIC1kKSwgYW5kIC0taW1tZWRpYXRlCisob3IgLWkpIGNvbW1hbmQgbGluZSBhcmd1bWVudCB0byB0aGUgdGVzdCwgb3IgYnkgc2V0dGluZyBHSVRfVEVTVF9PUFRTCithcHByb3ByaWF0ZWx5IGJlZm9yZSBydW5uaW5nICJtYWtlIi4KKworLXY6OgorLS12ZXJib3NlOjoKKwlUaGlzIG1ha2VzIHRoZSB0ZXN0IG1vcmUgdmVyYm9zZS4gIFNwZWNpZmljYWxseSwgdGhlCisJY29tbWFuZCBiZWluZyBydW4gYW5kIHRoZWlyIG91dHB1dCBpZiBhbnkgYXJlIGFsc28KKwlvdXRwdXQuCisKKy0tdmVyYm9zZS1vbmx5PTxwYXR0ZXJuPjo6CisJTGlrZSAtLXZlcmJvc2UsIGJ1dCB0aGUgZWZmZWN0IGlzIGxpbWl0ZWQgdG8gdGVzdHMgd2l0aAorCW51bWJlcnMgbWF0Y2hpbmcgPHBhdHRlcm4+LiAgVGhlIG51bWJlciBtYXRjaGVkIGFnYWluc3QgaXMKKwlzaW1wbHkgdGhlIHJ1bm5pbmcgY291bnQgb2YgdGhlIHRlc3Qgd2l0aGluIHRoZSBmaWxlLgorCisteDo6CisJVHVybiBvbiBzaGVsbCB0cmFjaW5nIChpLmUuLCBgc2V0IC14YCkgZHVyaW5nIHRoZSB0ZXN0cworCXRoZW1zZWx2ZXMuIEltcGxpZXMgYC0tdmVyYm9zZWAuCisJSWdub3JlZCBpbiB0ZXN0IHNjcmlwdHMgdGhhdCBzZXQgdGhlIHZhcmlhYmxlICd0ZXN0X3VudHJhY2VhYmxlJworCXRvIGEgbm9uLWVtcHR5IHZhbHVlLCB1bmxlc3MgaXQncyBydW4gd2l0aCBhIEJhc2ggdmVyc2lvbgorCXN1cHBvcnRpbmcgQkFTSF9YVFJBQ0VGRCwgaS5lLiB2NC4xIG9yIGxhdGVyLgorCistZDo6CistLWRlYnVnOjoKKwlUaGlzIG1heSBoZWxwIHRoZSBwZXJzb24gd2hvIGlzIGRldmVsb3BpbmcgYSBuZXcgdGVzdC4KKwlJdCBjYXVzZXMgdGhlIGNvbW1hbmQgZGVmaW5lZCB3aXRoIHRlc3RfZGVidWcgdG8gcnVuLgorCVRoZSAidHJhc2giIGRpcmVjdG9yeSAodXNlZCB0byBzdG9yZSBhbGwgdGVtcG9yYXJ5IGRhdGEKKwlkdXJpbmcgdGVzdGluZykgaXMgbm90IGRlbGV0ZWQgZXZlbiBpZiB0aGVyZSBhcmUgbm8KKwlmYWlsZWQgdGVzdHMgc28gdGhhdCB5b3UgY2FuIGluc3BlY3QgaXRzIGNvbnRlbnRzIGFmdGVyCisJdGhlIHRlc3QgZmluaXNoZWQuCisKKy1pOjoKKy0taW1tZWRpYXRlOjoKKwlUaGlzIGNhdXNlcyB0aGUgdGVzdCB0byBpbW1lZGlhdGVseSBleGl0IHVwb24gdGhlIGZpcnN0CisJZmFpbGVkIHRlc3QuIENsZWFudXAgY29tbWFuZHMgcmVxdWVzdGVkIHdpdGgKKwl0ZXN0X3doZW5fZmluaXNoZWQgYXJlIG5vdCBleGVjdXRlZCBpZiB0aGUgdGVzdCBmYWlsZWQsCisJaW4gb3JkZXIgdG8ga2VlcCB0aGUgc3RhdGUgZm9yIGluc3BlY3Rpb24gYnkgdGhlIHRlc3RlcgorCXRvIGRpYWdub3NlIHRoZSBidWcuCisKKy1sOjoKKy0tbG9uZy10ZXN0czo6CisJVGhpcyBjYXVzZXMgYWRkaXRpb25hbCBsb25nLXJ1bm5pbmcgdGVzdHMgdG8gYmUgcnVuICh3aGVyZQorCWF2YWlsYWJsZSksIGZvciBtb3JlIGV4aGF1c3RpdmUgdGVzdGluZy4KKworLXI6OgorLS1ydW49PHRlc3Qtc2VsZWN0b3I+OjoKKwlSdW4gb25seSB0aGUgc3Vic2V0IG9mIHRlc3RzIGluZGljYXRlZCBieQorCTx0ZXN0LXNlbGVjdG9yPi4gIFNlZSBzZWN0aW9uICJTa2lwcGluZyBUZXN0cyIgYmVsb3cgZm9yCisJPHRlc3Qtc2VsZWN0b3I+IHN5bnRheC4KKworLS12YWxncmluZD08dG9vbD46OgorCUV4ZWN1dGUgYWxsIEdpdCBiaW5hcmllcyB1bmRlciB2YWxncmluZCB0b29sIDx0b29sPiBhbmQgZXhpdAorCXdpdGggc3RhdHVzIDEyNiBvbiBlcnJvcnMgKGp1c3QgbGlrZSByZWd1bGFyIHRlc3RzLCB0aGlzIHdpbGwKKwlvbmx5IHN0b3AgdGhlIHRlc3Qgc2NyaXB0IHdoZW4gcnVubmluZyB1bmRlciAtaSkuCisKKwlTaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byBydW4gdGhlIHRlc3RzIHdpdGggLS12YWxncmluZCBhbmQKKwlub3Qgc2VlIGFueSBvdXRwdXQsIHRoaXMgb3B0aW9uIGltcGxpZXMgLS12ZXJib3NlLiAgRm9yCisJY29udmVuaWVuY2UsIGl0IGFsc28gaW1wbGllcyAtLXRlZS4KKworCTx0b29sPiBkZWZhdWx0cyB0byAnbWVtY2hlY2snLCBqdXN0IGxpa2UgdmFsZ3JpbmQgaXRzZWxmLgorCU90aGVyIHBhcnRpY3VsYXJseSB1c2VmdWwgY2hvaWNlcyBpbmNsdWRlICdoZWxncmluZCcgYW5kCisJJ2RyZCcsIGJ1dCB5b3UgbWF5IHVzZSBhbnkgdG9vbCByZWNvZ25pemVkIGJ5IHlvdXIgdmFsZ3JpbmQKKwlpbnN0YWxsYXRpb24uCisKKwlBcyBhIHNwZWNpYWwgY2FzZSwgPHRvb2w+IGNhbiBiZSAnbWVtY2hlY2stZmFzdCcsIHdoaWNoIHVzZXMKKwltZW1jaGVjayBidXQgZGlzYWJsZXMgLS10cmFjay1vcmlnaW5zLiAgVXNlIHRoaXMgaWYgeW91IGFyZQorCXJ1bm5pbmcgdGVzdHMgaW4gYnVsaywgdG8gc2VlIGlmIHRoZXJlIGFyZSBfYW55XyBtZW1vcnkKKwlpc3N1ZXMuCisKKwlOb3RlIHRoYXQgbWVtY2hlY2sgaXMgcnVuIHdpdGggdGhlIG9wdGlvbiAtLWxlYWstY2hlY2s9bm8sCisJYXMgdGhlIGdpdCBwcm9jZXNzIGlzIHNob3J0LWxpdmVkIGFuZCBzb21lIGVycm9ycyBhcmUgbm90CisJaW50ZXJlc3RpbmcuIEluIG9yZGVyIHRvIHJ1biBhIHNpbmdsZSBjb21tYW5kIHVuZGVyIHRoZSBzYW1lCisJY29uZGl0aW9ucyBtYW51YWxseSwgeW91IHNob3VsZCBzZXQgR0lUX1ZBTEdSSU5EIHRvIHBvaW50IHRvCisJdGhlICd0L3ZhbGdyaW5kLycgZGlyZWN0b3J5IGFuZCB1c2UgdGhlIGNvbW1hbmRzIHVuZGVyCisJJ3QvdmFsZ3JpbmQvYmluLycuCisKKy0tdmFsZ3JpbmQtb25seT08cGF0dGVybj46OgorCUxpa2UgLS12YWxncmluZCwgYnV0IHRoZSBlZmZlY3QgaXMgbGltaXRlZCB0byB0ZXN0cyB3aXRoCisJbnVtYmVycyBtYXRjaGluZyA8cGF0dGVybj4uICBUaGUgbnVtYmVyIG1hdGNoZWQgYWdhaW5zdCBpcworCXNpbXBseSB0aGUgcnVubmluZyBjb3VudCBvZiB0aGUgdGVzdCB3aXRoaW4gdGhlIGZpbGUuCisKKy0tdGVlOjoKKwlJbiBhZGRpdGlvbiB0byBwcmludGluZyB0aGUgdGVzdCBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsLAorCXdyaXRlIGl0IHRvIGZpbGVzIG5hbWVkICd0L3Rlc3QtcmVzdWx0cy8kVEVTVF9OQU1FLm91dCcuCisJQXMgdGhlIG5hbWVzIGRlcGVuZCBvbiB0aGUgdGVzdHMnIGZpbGUgbmFtZXMsIGl0IGlzIHNhZmUgdG8KKwlydW4gdGhlIHRlc3RzIHdpdGggdGhpcyBvcHRpb24gaW4gcGFyYWxsZWwuCisKKy1WOjoKKy0tdmVyYm9zZS1sb2c6OgorCVdyaXRlIHZlcmJvc2Ugb3V0cHV0IHRvIHRoZSBzYW1lIGxvZ2ZpbGUgYXMgYC0tdGVlYCwgYnV0IGRvCisJX25vdF8gd3JpdGUgaXQgdG8gc3Rkb3V0LiBVbmxpa2UgYC0tdGVlIC0tdmVyYm9zZWAsIHRoaXMgb3B0aW9uCisJaXMgc2FmZSB0byB1c2Ugd2hlbiBzdGRvdXQgaXMgYmVpbmcgY29uc3VtZWQgYnkgYSBUQVAgcGFyc2VyCisJbGlrZSBgcHJvdmVgLiBJbXBsaWVzIGAtLXRlZWAgYW5kIGAtLXZlcmJvc2VgLgorCistLXdpdGgtZGFzaGVzOjoKKwlCeSBkZWZhdWx0IHRlc3RzIGFyZSBydW4gd2l0aG91dCBkYXNoZWQgZm9ybXMgb2YKKwljb21tYW5kcyAobGlrZSBnaXQtY29tbWl0KSBpbiB0aGUgUEFUSCAoaXQgb25seSB1c2VzCisJd3JhcHBlcnMgZnJvbSAuLi9iaW4td3JhcHBlcnMpLiAgVXNlIHRoaXMgb3B0aW9uIHRvIGluY2x1ZGUKKwl0aGUgYnVpbGQgZGlyZWN0b3J5ICguLikgaW4gdGhlIFBBVEgsIHdoaWNoIGNvbnRhaW5zIGFsbAorCXRoZSBkYXNoZWQgZm9ybXMgb2YgY29tbWFuZHMuICBUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkKKwlpbXBsaWVkIGJ5IG90aGVyIG9wdGlvbnMgbGlrZSAtLXZhbGdyaW5kIGFuZAorCUdJVF9URVNUX0lOU1RBTExFRC4KKworLS1uby1iaW4td3JhcHBlcnM6OgorCUJ5IGRlZmF1bHQsIHRoZSB0ZXN0IHN1aXRlIHVzZXMgdGhlIHdyYXBwZXJzIGluCisJYC4uL2Jpbi13cmFwcGVycy9gIHRvIGV4ZWN1dGUgYGdpdGAgYW5kIGZyaWVuZHMuIFdpdGggdGhpcyBvcHRpb24sCisJYC4uL2dpdGAgYW5kIGZyaWVuZHMgYXJlIHJ1biBkaXJlY3RseS4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQKKwlpbiBnZW5lcmFsLCBhcyB0aGUgd3JhcHBlcnMgY29udGFpbiBzYWZlZ3VhcmRzIHRvIGVuc3VyZSB0aGF0IG5vCisJZmlsZXMgZnJvbSBhbiBpbnN0YWxsZWQgR2l0IGFyZSB1c2VkLCBidXQgY2FuIHNwZWVkIHVwIHRlc3QgcnVucworCWVzcGVjaWFsbHkgb24gcGxhdGZvcm1zIHdoZXJlIHJ1bm5pbmcgc2hlbGwgc2NyaXB0cyBpcyBleHBlbnNpdmUKKwkobW9zdCBub3RhYmx5LCBXaW5kb3dzKS4KKworLS1yb290PTxkaXJlY3Rvcnk+OjoKKwlDcmVhdGUgInRyYXNoIiBkaXJlY3RvcmllcyB1c2VkIHRvIHN0b3JlIGFsbCB0ZW1wb3JhcnkgZGF0YSBkdXJpbmcKKwl0ZXN0aW5nIHVuZGVyIDxkaXJlY3Rvcnk+LCBpbnN0ZWFkIG9mIHRoZSB0LyBkaXJlY3RvcnkuCisJVXNpbmcgdGhpcyBvcHRpb24gd2l0aCBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIChzdWNoIGFzIHRtcGZzKQorCWNhbiBtYXNzaXZlbHkgc3BlZWQgdXAgdGhlIHRlc3Qgc3VpdGUuCisKKy0tY2hhaW4tbGludDo6CistLW5vLWNoYWluLWxpbnQ6OgorCUlmIC0tY2hhaW4tbGludCBpcyBlbmFibGVkLCB0aGUgdGVzdCBoYXJuZXNzIHdpbGwgY2hlY2sgZWFjaAorCXRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgaXQgcHJvcGVybHkgIiYmLWNoYWlucyIgYWxsIGNvbW1hbmRzIChzbworCXRoYXQgYSBmYWlsdXJlIGluIHRoZSBtaWRkbGUgZG9lcyBub3QgZ28gdW5ub3RpY2VkIGJ5IHRoZSBmaW5hbAorCWV4aXQgY29kZSBvZiB0aGUgdGVzdCkuIFRoaXMgY2hlY2sgaXMgcGVyZm9ybWVkIGluIGFkZGl0aW9uIHRvCisJcnVubmluZyB0aGUgdGVzdHMgdGhlbXNlbHZlcy4gWW91IG1heSBhbHNvIGVuYWJsZSBvciBkaXNhYmxlCisJdGhpcyBmZWF0dXJlIGJ5IHNldHRpbmcgdGhlIEdJVF9URVNUX0NIQUlOX0xJTlQgZW52aXJvbm1lbnQKKwl2YXJpYWJsZSB0byAiMSIgb3IgIjAiLCByZXNwZWN0aXZlbHkuCisKKy0tc3RyZXNzOjoKKwlSdW4gdGhlIHRlc3Qgc2NyaXB0IHJlcGVhdGVkbHkgaW4gbXVsdGlwbGUgcGFyYWxsZWwgam9icyB1bnRpbAorCW9uZSBvZiB0aGVtIGZhaWxzLiAgVXNlZnVsIGZvciByZXByb2R1Y2luZyByYXJlIGZhaWx1cmVzIGluCisJZmxha3kgdGVzdHMuICBUaGUgbnVtYmVyIG9mIHBhcmFsbGVsIGpvYnMgaXMsIGluIG9yZGVyIG9mCisJcHJlY2VkZW5jZTogdGhlIHZhbHVlIG9mIHRoZSBHSVRfVEVTVF9TVFJFU1NfTE9BRAorCWVudmlyb25tZW50IHZhcmlhYmxlLCBvciB0d2ljZSB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZQorCXByb2Nlc3NvcnMgKGFzIHNob3duIGJ5IHRoZSAnZ2V0Y29uZicgdXRpbGl0eSksCW9yIDguCisJSW1wbGllcyBgLS12ZXJib3NlIC14IC0taW1tZWRpYXRlYCB0byBnZXQgdGhlIG1vc3QgaW5mb3JtYXRpb24KKwlhYm91dCB0aGUgZmFpbHVyZS4gIE5vdGUgdGhhdCB0aGUgdmVyYm9zZSBvdXRwdXQgb2YgZWFjaCB0ZXN0CisJam9iIGlzIHNhdmVkIHRvICd0L3Rlc3QtcmVzdWx0cy8kVEVTVF9OQU1FLnN0cmVzcy08bnI+Lm91dCcsCisJYW5kIG9ubHkgdGhlIG91dHB1dCBvZiB0aGUgZmFpbGVkIHRlc3Qgam9iIGlzIHNob3duIG9uIHRoZQorCXRlcm1pbmFsLiAgVGhlIG5hbWVzIG9mIHRoZSB0cmFzaCBkaXJlY3RvcmllcyBnZXQgYQorCScuc3RyZXNzLTxucj4nIHN1ZmZpeCwgYW5kIHRoZSB0cmFzaCBkaXJlY3Rvcnkgb2YgdGhlIGZhaWxlZAorCXRlc3Qgam9iIGlzIHJlbmFtZWQgdG8gZW5kIHdpdGggYSAnLnN0cmVzcy1mYWlsZWQnIHN1ZmZpeC4KKworLS1zdHJlc3Mtam9icz08Tj46OgorCU92ZXJyaWRlIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgam9icy4gSW1wbGllcyBgLS1zdHJlc3NgLgorCistLXN0cmVzcy1saW1pdD08Tj46OgorCVdoZW4gY29tYmluZWQgd2l0aCAtLXN0cmVzcyBydW4gdGhlIHRlc3Qgc2NyaXB0IHJlcGVhdGVkbHkKKwl0aGlzIG1hbnkgdGltZXMgaW4gZWFjaCBvZiB0aGUgcGFyYWxsZWwgam9icyBvciB1bnRpbCBvbmUgb2YKKwl0aGVtIGZhaWxzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuIEltcGxpZXMgYC0tc3RyZXNzYC4KKworWW91IGNhbiBhbHNvIHNldCB0aGUgR0lUX1RFU1RfSU5TVEFMTEVEIGVudmlyb25tZW50IHZhcmlhYmxlIHRvCit0aGUgYmluZGlyIG9mIGFuIGV4aXN0aW5nIGdpdCBpbnN0YWxsYXRpb24gdG8gdGVzdCB0aGF0IGluc3RhbGxhdGlvbi4KK1lvdSBzdGlsbCBuZWVkIHRvIGhhdmUgYnVpbHQgdGhpcyBnaXQgc2FuZGJveCwgZnJvbSB3aGljaCB2YXJpb3VzCit0ZXN0LSogc3VwcG9ydCBwcm9ncmFtcywgdGVtcGxhdGVzLCBhbmQgcGVybCBsaWJyYXJpZXMgYXJlIHVzZWQuCitJZiB5b3VyIGluc3RhbGxlZCBnaXQgaXMgaW5jb21wbGV0ZSwgaXQgd2lsbCBzaWxlbnRseSB0ZXN0IHBhcnRzIG9mCit5b3VyIGJ1aWx0IHZlcnNpb24gaW5zdGVhZC4KKworV2hlbiB1c2luZyBHSVRfVEVTVF9JTlNUQUxMRUQsIHlvdSBjYW4gYWxzbyBzZXQgR0lUX1RFU1RfRVhFQ19QQVRIIHRvCitvdmVycmlkZSB0aGUgbG9jYXRpb24gb2YgdGhlIGRhc2hlZC1mb3JtIHN1YmNvbW1hbmRzICh3aGF0CitHSVRfRVhFQ19QQVRIIHdvdWxkIGJlIHVzZWQgZm9yIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uKS4KK0dJVF9URVNUX0VYRUNfUEFUSCBkZWZhdWx0cyB0byBgJEdJVF9URVNUX0lOU1RBTExFRC9naXQgLS1leGVjLXBhdGhgLgorCisKK1NraXBwaW5nIFRlc3RzCistLS0tLS0tLS0tLS0tLQorCitJbiBzb21lIGVudmlyb25tZW50cywgY2VydGFpbiB0ZXN0cyBoYXZlIG5vIHdheSBvZiBzdWNjZWVkaW5nCitkdWUgdG8gcGxhdGZvcm0gbGltaXRhdGlvbiwgc3VjaCBhcyBsYWNrIG9mICd1bnppcCcgcHJvZ3JhbSwgb3IKK2ZpbGVzeXN0ZW0gdGhhdCBkbyBub3QgYWxsb3cgYXJiaXRyYXJ5IHNlcXVlbmNlIG9mIG5vbi1OVUwgYnl0ZXMKK2FzIHBhdGhuYW1lcy4KKworWW91IHNob3VsZCBiZSBhYmxlIHRvIHNheSBzb21ldGhpbmcgbGlrZQorCisgICAgJCBHSVRfU0tJUF9URVNUUz10OTIwMC44IHNoIC4vdDkyMDAtZ2l0LWN2c2V4cG9ydC1jb21taXQuc2gKKworYW5kIGV2ZW46CisKKyAgICAkIEdJVF9TS0lQX1RFU1RTPSd0WzAtNF0/Pz8gdDkxPz8gdDkyMDAuOCcgbWFrZQorCit0byBvbWl0IHN1Y2ggdGVzdHMuICBUaGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGEKK1NQIHNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIHRoYXQgdGVsbHMgd2hpY2ggdGVzdHMgdG8gc2tpcCwKK2FuZCBlaXRoZXIgY2FuIG1hdGNoIHRoZSAidFswLTldezR9IiBwYXJ0IHRvIHNraXAgdGhlIHdob2xlCit0ZXN0LCBvciB0WzAtOV17NH0gZm9sbG93ZWQgYnkgIi4kbnVtYmVyIiB0byBzYXkgd2hpY2gKK3BhcnRpY3VsYXIgdGVzdCB0byBza2lwLgorCitGb3IgYW4gaW5kaXZpZHVhbCB0ZXN0IHN1aXRlIC0tcnVuIGNvdWxkIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGF0Citvbmx5IHNvbWUgdGVzdHMgc2hvdWxkIGJlIHJ1biBvciB0aGF0IHNvbWUgdGVzdHMgc2hvdWxkIGJlCitleGNsdWRlZCBmcm9tIGEgcnVuLgorCitUaGUgYXJndW1lbnQgZm9yIC0tcnVuIGlzIGEgbGlzdCBvZiBpbmRpdmlkdWFsIHRlc3QgbnVtYmVycyBvcgorcmFuZ2VzIHdpdGggYW4gb3B0aW9uYWwgbmVnYXRpb24gcHJlZml4IHRoYXQgZGVmaW5lIHdoYXQgdGVzdHMgaW4KK2EgdGVzdCBzdWl0ZSB0byBpbmNsdWRlIGluIHRoZSBydW4uICBBIHJhbmdlIGlzIHR3byBudW1iZXJzCitzZXBhcmF0ZWQgd2l0aCBhIGRhc2ggYW5kIG1hdGNoZXMgYSByYW5nZSBvZiB0ZXN0cyB3aXRoIGJvdGggZW5kcworYmVlbiBpbmNsdWRlZC4gIFlvdSBtYXkgb21pdCB0aGUgZmlyc3Qgb3IgdGhlIHNlY29uZCBudW1iZXIgdG8KK21lYW4gImZyb20gdGhlIGZpcnN0IHRlc3QiIG9yICJ1cCB0byB0aGUgdmVyeSBsYXN0IHRlc3QiCityZXNwZWN0aXZlbHkuCisKK09wdGlvbmFsIHByZWZpeCBvZiAnIScgbWVhbnMgdGhhdCB0aGUgdGVzdCBvciBhIHJhbmdlIG9mIHRlc3RzCitzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgcnVuLgorCitJZiAtLXJ1biBzdGFydHMgd2l0aCBhbiB1bnByZWZpeGVkIG51bWJlciBvciByYW5nZSB0aGUgaW5pdGlhbAorc2V0IG9mIHRlc3RzIHRvIHJ1biBpcyBlbXB0eS4gSWYgdGhlIGZpcnN0IGl0ZW0gc3RhcnRzIHdpdGggJyEnCithbGwgdGhlIHRlc3RzIGFyZSBhZGRlZCB0byB0aGUgaW5pdGlhbCBzZXQuICBBZnRlciBpbml0aWFsIHNldCBpcworZGV0ZXJtaW5lZCBldmVyeSB0ZXN0IG51bWJlciBvciByYW5nZSBpcyBhZGRlZCBvciBleGNsdWRlZCBmcm9tCit0aGUgc2V0IG9uZSBieSBvbmUsIGZyb20gbGVmdCB0byByaWdodC4KKworSW5kaXZpZHVhbCBudW1iZXJzIG9yIHJhbmdlcyBjb3VsZCBiZSBzZXBhcmF0ZWQgZWl0aGVyIGJ5IGEgc3BhY2UKK29yIGEgY29tbWEuCisKK0ZvciBleGFtcGxlLCB0byBydW4gb25seSB0ZXN0cyB1cCB0byBhIHNwZWNpZmljIHRlc3QgKDIxKSwgb25lCitjb3VsZCBkbyB0aGlzOgorCisgICAgJCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoIC0tcnVuPScxLTIxJworCitvciB0aGlzOgorCisgICAgJCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoIC0tcnVuPSctMjEnCisKK0NvbW1vbiBjYXNlIGlzIHRvIHJ1biBzZXZlcmFsIHNldHVwIHRlc3RzICgxLCAyLCAzKSBhbmQgdGhlbiBhCitzcGVjaWZpYyB0ZXN0ICgyMSkgdGhhdCByZWxpZXMgb24gdGhhdCBzZXR1cDoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nMSAyIDMgMjEnCisKK29yOgorCisgICAgJCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoIC0tcnVuPTEsMiwzLDIxCisKK29yOgorCisgICAgJCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoIC0tcnVuPSctMyAyMScKKworQXMgbm90ZWQgYWJvdmUsIHRoZSB0ZXN0IHNldCBpcyBidWlsdCBieSBnb2luZyB0aHJvdWdoIHRoZSBpdGVtcworZnJvbSBsZWZ0IHRvIHJpZ2h0LCBzbyB0aGlzOgorCisgICAgJCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoIC0tcnVuPScxLTQgITMnCisKK3dpbGwgcnVuIHRlc3RzIDEsIDIsIGFuZCA0LiAgSXRlbXMgdGhhdCBjb21lIGxhdGVyIGhhdmUgaGlnaGVyCitwcmVjZWRlbmNlLiAgSXQgbWVhbnMgdGhhdCB0aGlzOgorCisgICAgJCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoIC0tcnVuPSchMyAxLTQnCisKK3dvdWxkIGp1c3QgcnVuIHRlc3RzIGZyb20gMSB0byA0LCBpbmNsdWRpbmcgMy4KKworWW91IG1heSB1c2UgbmVnYXRpb24gd2l0aCByYW5nZXMuICBUaGUgZm9sbG93aW5nIHdpbGwgcnVuIGFsbAordGVzdCBpbiB0aGUgdGVzdCBzdWl0ZSBleGNlcHQgZnJvbSA3IHVwIHRvIDExOgorCisgICAgJCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoIC0tcnVuPSchNy0xMScKKworU29tZSB0ZXN0cyBpbiBhIHRlc3Qgc3VpdGUgcmVseSBvbiB0aGUgcHJldmlvdXMgdGVzdHMgcGVyZm9ybWluZworY2VydGFpbiBhY3Rpb25zLCBzcGVjaWZpY2FsbHkgc29tZSB0ZXN0cyBhcmUgZGVzaWduYXRlZCBhcworInNldHVwIiB0ZXN0LCBzbyB5b3UgY2Fubm90IF9hcmJpdHJhcmlseV8gZGlzYWJsZSBvbmUgdGVzdCBhbmQKK2V4cGVjdCB0aGUgcmVzdCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCisKKy0tcnVuIGlzIG1vc3RseSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBmb2N1cyBvbiBhIHNwZWNpZmljIHRlc3QKK2FuZCBrbm93IHdoYXQgc2V0dXAgaXMgbmVlZGVkIGZvciBpdC4gIE9yIHdoZW4geW91IHdhbnQgdG8gcnVuCitldmVyeXRoaW5nIHVwIHRvIGEgY2VydGFpbiB0ZXN0LgorCisKK1J1bm5pbmcgdGVzdHMgd2l0aCBzcGVjaWFsIHNldHVwcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB3aG9sZSB0ZXN0IHN1aXRlIGNvdWxkIGJlIHJ1biB0byB0ZXN0IHNvbWUgc3BlY2lhbCBmZWF0dXJlcwordGhhdCBjYW5ub3QgYmUgZWFzaWx5IGNvdmVyZWQgYnkgYSBmZXcgc3BlY2lmaWMgdGVzdCBjYXNlcy4gVGhlc2UKK2NvdWxkIGJlIGVuYWJsZWQgYnkgcnVubmluZyB0aGUgdGVzdCBzdWl0ZSB3aXRoIGNvcnJlY3QgR0lUX1RFU1RfCitlbnZpcm9ubWVudCBzZXQuCisKK0dJVF9URVNUX0ZBSUxfUFJFUkVRUz08Ym9vbGVhbj4gZmFpbHMgYWxsIHByZXJlcXVpc2l0ZXMuIFRoaXMgaXMKK3VzZWZ1bCBmb3IgZGlzY292ZXJpbmcgaXNzdWVzIHdpdGggdGhlIHRlc3RzIHdoZXJlIHNheSBhIGxhdGVyIHRlc3QKK2ltcGxpY2l0bHkgZGVwZW5kcyBvbiBhbiBvcHRpb25hbCBlYXJsaWVyIHRlc3QuCisKK1RoZXJlJ3MgYSAiRkFJTF9QUkVSRVFTIiBwcmVyZXF1aXNpdGUgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGZvcgord2hldGhlciB0aGlzIG1vZGUgaXMgYWN0aXZlLCBhbmQgZS5nLiBza2lwIHNvbWUgdGVzdHMgdGhhdCBhcmUgaGFyZCB0bworcmVmYWN0b3IgdG8gZGVhbCB3aXRoIGl0LiBUaGUgIlNZTUxJTktTIiBwcmVyZXF1aXNpdGUgaXMgY3VycmVudGx5CitleGNsdWRlZCBhcyBzbyBtdWNoIHJlbGllcyBvbiBpdCwgYnV0IHRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuCisKK0dJVF9URVNUX0dFVFRFWFRfUE9JU09OPTxib29sZWFuPiB0dXJucyBhbGwgc3RyaW5ncyBtYXJrZWQgZm9yCit0cmFuc2xhdGlvbiBpbnRvIGdpYmJlcmlzaCBpZiB0cnVlLiBVc2VkIGZvciBzcG90dGluZyB0aG9zZSB0ZXN0cyB0aGF0CituZWVkIHRvIGJlIG1hcmtlZCB3aXRoIGEgQ19MT0NBTEVfT1VUUFVUIHByZXJlcXVpc2l0ZSB3aGVuIGFkZGluZyBtb3JlCitzdHJpbmdzIGZvciB0cmFuc2xhdGlvbi4gU2VlICJUZXN0aW5nIG1hcmtlZCBzdHJpbmdzIiBpbiBwby9SRUFETUUgZm9yCitkZXRhaWxzLgorCitHSVRfVEVTVF9TUExJVF9JTkRFWD08Ym9vbGVhbj4gZm9yY2VzIHNwbGl0LWluZGV4IG1vZGUgb24gdGhlIHdob2xlCit0ZXN0IHN1aXRlLiBBY2NlcHQgYW55IGJvb2xlYW4gdmFsdWVzIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IGdpdC1jb25maWcuCisKK0dJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049PG4+LCB3aGVuIHNldCwgbWFrZXMgJ3Byb3RvY29sLnZlcnNpb24nCitkZWZhdWx0IHRvIG4uCisKK0dJVF9URVNUX0ZVTExfSU5fUEFDS19BUlJBWT08Ym9vbGVhbj4gZXhlcmNpc2VzIHRoZSB1bmNvbW1vbgorcGFjay1vYmplY3RzIGNvZGUgcGF0aCB3aGVyZSB0aGVyZSBhcmUgbW9yZSB0aGFuIDEwMjQgcGFja3MgZXZlbiBpZgordGhlIGFjdHVhbCBudW1iZXIgb2YgcGFja3MgaW4gcmVwb3NpdG9yeSBpcyBiZWxvdyB0aGlzIGxpbWl0LiBBY2NlcHQKK2FueSBib29sZWFuIHZhbHVlcyB0aGF0IGFyZSBhY2NlcHRlZCBieSBnaXQtY29uZmlnLgorCitHSVRfVEVTVF9PRV9TSVpFPTxuPiBleGVyY2lzZXMgdGhlIHVuY29tbW9uIHBhY2stb2JqZWN0cyBjb2RlIHBhdGgKK3doZXJlIHdlIGRvIG5vdCBjYWNoZSBvYmplY3Qgc2l6ZSBpbiBtZW1vcnkgYW5kIHJlYWQgaXQgZnJvbSBleGlzdGluZworcGFja3Mgb24gZGVtYW5kLiBUaGlzIG5vcm1hbGx5IG9ubHkgaGFwcGVucyB3aGVuIHRoZSBvYmplY3Qgc2l6ZSBpcworb3ZlciAyR0IuIFRoaXMgdmFyaWFibGUgZm9yY2VzIHRoZSBjb2RlIHBhdGggb24gYW55IG9iamVjdCBsYXJnZXIgdGhhbgorPG4+IGJ5dGVzLgorCitHSVRfVEVTVF9PRV9ERUxUQV9TSVpFPTxuPiBleGVyY2lzZXMgdGhlIHVuY29tbW9uIHBhY2stb2JqZWN0cyBjb2RlCitwYXRoIHdoZXJlIGRlbHRhcyBsYXJnZXIgdGhhbiB0aGlzIGxpbWl0IHJlcXVpcmUgZXh0cmEgbWVtb3J5CithbGxvY2F0aW9uIGZvciBib29ra2VlcGluZy4KKworR0lUX1RFU1RfVkFMSURBVEVfSU5ERVhfQ0FDSEVfRU5UUklFUz08Ym9vbGVhbj4gY2hlY2tzIHRoYXQgY2FjaGUtdHJlZQorcmVjb3JkcyBhcmUgdmFsaWQgd2hlbiB0aGUgaW5kZXggaXMgd3JpdHRlbiBvdXQgb3IgYWZ0ZXIgYSBtZXJnZS4gVGhpcworaXMgbW9zdGx5IHRvIGNhdGNoIG1pc3NpbmcgaW52YWxpZGF0aW9uLiBEZWZhdWx0IGlzIHRydWUuCisKK0dJVF9URVNUX0NPTU1JVF9HUkFQSD08Ym9vbGVhbj4sIHdoZW4gdHJ1ZSwgZm9yY2VzIHRoZSBjb21taXQtZ3JhcGggdG8KK2JlIHdyaXR0ZW4gYWZ0ZXIgZXZlcnkgJ2dpdCBjb21taXQnIGNvbW1hbmQsIGFuZCBvdmVycmlkZXMgdGhlCisnY29yZS5jb21taXRHcmFwaCcgc2V0dGluZyB0byB0cnVlLgorCitHSVRfVEVTVF9GU01PTklUT1I9JFBXRC90NzUxOS9mc21vbml0b3ItYWxsIGV4ZXJjaXNlcyB0aGUgZnNtb25pdG9yCitjb2RlIHBhdGggZm9yIHV0aWxpemluZyBhIGZpbGUgc3lzdGVtIG1vbml0b3IgdG8gc3BlZWQgdXAgZGV0ZWN0aW5nCituZXcgb3IgY2hhbmdlZCBmaWxlcy4KKworR0lUX1RFU1RfSU5ERVhfVkVSU0lPTj08bj4gZXhlcmNpc2VzIHRoZSBpbmRleCByZWFkL3dyaXRlIGNvZGUgcGF0aAorZm9yIHRoZSBpbmRleCB2ZXJzaW9uIHNwZWNpZmllZC4gIENhbiBiZSBzZXQgdG8gYW55IHZhbGlkIHZlcnNpb24KKyhjdXJyZW50bHkgMiwgMywgb3IgNCkuCisKK0dJVF9URVNUX1BBQ0tfU1BBUlNFPTxib29sZWFuPiBpZiBlbmFibGVkIHdpbGwgZGVmYXVsdCB0aGUgcGFjay1vYmplY3RzCitidWlsdGluIHRvIHVzZSB0aGUgc3BhcnNlIG9iamVjdCB3YWxrLiBUaGlzIGNhbiBzdGlsbCBiZSBvdmVycmlkZGVuIGJ5Cit0aGUgLS1uby1zcGFyc2UgY29tbWFuZC1saW5lIGFyZ3VtZW50LgorCitHSVRfVEVTVF9QUkVMT0FEX0lOREVYPTxib29sZWFuPiBleGVyY2lzZXMgdGhlIHByZWxvYWQtaW5kZXggY29kZSBwYXRoCitieSBvdmVycmlkaW5nIHRoZSBtaW5pbXVtIG51bWJlciBvZiBjYWNoZSBlbnRyaWVzIHJlcXVpcmVkIHBlciB0aHJlYWQuCisKK0dJVF9URVNUX1NUQVNIX1VTRV9CVUlMVElOPTxib29sZWFuPiwgd2hlbiBmYWxzZSwgZGlzYWJsZXMgdGhlCitidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdC1zdGFzaC4gU2VlICdzdGFzaC51c2VCdWlsdGluJyBpbgorZ2l0LWNvbmZpZygxKS4KKworR0lUX1RFU1RfQUREX0lfVVNFX0JVSUxUSU49PGJvb2xlYW4+LCB3aGVuIHRydWUsIGVuYWJsZXMgdGhlCitidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdCBhZGQgLWkuIFNlZSAnYWRkLmludGVyYWN0aXZlLnVzZUJ1aWx0aW4nIGluCitnaXQtY29uZmlnKDEpLgorCitHSVRfVEVTVF9JTkRFWF9USFJFQURTPTxuPiBlbmFibGVzIGV4ZXJjaXNpbmcgdGhlIG11bHRpLXRocmVhZGVkIGxvYWRpbmcKK29mIHRoZSBpbmRleCBmb3IgdGhlIHdob2xlIHRlc3Qgc3VpdGUgYnkgYnlwYXNzaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvZgorY2FjaGUgZW50cmllcyBhbmQgdGhyZWFkIG1pbmltdW1zLiBTZXR0aW5nIHRoaXMgdG8gMSB3aWxsIG1ha2UgdGhlCitpbmRleCBsb2FkaW5nIHNpbmdsZSB0aHJlYWRlZC4KKworR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWD08Ym9vbGVhbj4sIHdoZW4gdHJ1ZSwgZm9yY2VzIHRoZSBtdWx0aS1wYWNrLQoraW5kZXggdG8gYmUgd3JpdHRlbiBhZnRlciBldmVyeSAnZ2l0IHJlcGFjaycgY29tbWFuZCwgYW5kIG92ZXJyaWRlcyB0aGUKKydjb3JlLm11bHRpUGFja0luZGV4JyBzZXR0aW5nIHRvIHRydWUuCisKK0dJVF9URVNUX1NJREVCQU5EX0FMTD08Ym9vbGVhbj4sIHdoZW4gdHJ1ZSwgb3ZlcnJpZGVzIHRoZQorJ3VwbG9hZHBhY2suYWxsb3dTaWRlYmFuZEFsbCcgc2V0dGluZyB0byB0cnVlLCBhbmQgd2hlbiBmYWxzZSwgZm9yY2VzCitmZXRjaC1wYWNrIHRvIG5vdCByZXF1ZXN0IHNpZGViYW5kLWFsbCAoZXZlbiBpZiB0aGUgc2VydmVyIGFkdmVydGlzZXMKK3NpZGViYW5kLWFsbCkuCisKK0dJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9PGJvb2xlYW4+LCB3aGVuIHRydWUgKHdoaWNoIGlzCit0aGUgZGVmYXVsdCB3aGVuIHJ1bm5pbmcgdGVzdHMpLCBlcnJvcnMgb3V0IHdoZW4gYW4gYWJicmV2aWF0ZWQgb3B0aW9uCitpcyB1c2VkLgorCitOYW1pbmcgVGVzdHMKKy0tLS0tLS0tLS0tLQorCitUaGUgdGVzdCBmaWxlcyBhcmUgbmFtZWQgYXM6CisKKwl0Tk5OTi1jb21tYW5kbmFtZS1kZXRhaWxzLnNoCisKK3doZXJlIE4gaXMgYSBkZWNpbWFsIGRpZ2l0LgorCitGaXJzdCBkaWdpdCB0ZWxscyB0aGUgZmFtaWx5OgorCisJMCAtIHRoZSBhYnNvbHV0ZSBiYXNpY3MgYW5kIGdsb2JhbCBzdHVmZgorCTEgLSB0aGUgYmFzaWMgY29tbWFuZHMgY29uY2VybmluZyBkYXRhYmFzZQorCTIgLSB0aGUgYmFzaWMgY29tbWFuZHMgY29uY2VybmluZyB0aGUgd29ya2luZyB0cmVlCisJMyAtIHRoZSBvdGhlciBiYXNpYyBjb21tYW5kcyAoZS5nLiBscy1maWxlcykKKwk0IC0gdGhlIGRpZmYgY29tbWFuZHMKKwk1IC0gdGhlIHB1bGwgYW5kIGV4cG9ydGluZyBjb21tYW5kcworCTYgLSB0aGUgcmV2aXNpb24gdHJlZSBjb21tYW5kcyAoZXZlbiBlLmcuIG1lcmdlLWJhc2UpCisJNyAtIHRoZSBwb3JjZWxhaW5pc2ggY29tbWFuZHMgY29uY2VybmluZyB0aGUgd29ya2luZyB0cmVlCisJOCAtIHRoZSBwb3JjZWxhaW5pc2ggY29tbWFuZHMgY29uY2VybmluZyBmb3JlbnNpY3MKKwk5IC0gdGhlIGdpdCB0b29scworCitTZWNvbmQgZGlnaXQgdGVsbHMgdGhlIHBhcnRpY3VsYXIgY29tbWFuZCB3ZSBhcmUgdGVzdGluZy4KKworVGhpcmQgZGlnaXQgKG9wdGlvbmFsbHkpIHRlbGxzIHRoZSBwYXJ0aWN1bGFyIHN3aXRjaCBvciBncm91cCBvZiBzd2l0Y2hlcword2UgYXJlIHRlc3RpbmcuCisKK0lmIHlvdSBjcmVhdGUgZmlsZXMgdW5kZXIgdC8gZGlyZWN0b3J5IChpLmUuIGhlcmUpIHRoYXQgaXMgbm90Cit0aGUgdG9wLWxldmVsIHRlc3Qgc2NyaXB0LCBuZXZlciBuYW1lIHRoZSBmaWxlIHRvIG1hdGNoIHRoZSBhYm92ZQorcGF0dGVybi4gIFRoZSBNYWtlZmlsZSBoZXJlIGNvbnNpZGVycyBhbGwgc3VjaCBmaWxlcyBhcyB0aGUKK3RvcC1sZXZlbCB0ZXN0IHNjcmlwdCBhbmQgdHJpZXMgdG8gcnVuIGFsbCBvZiB0aGVtLiAgQ2FyZSBpcworZXNwZWNpYWxseSBuZWVkZWQgaWYgeW91IGFyZSBjcmVhdGluZyBhIGNvbW1vbiB0ZXN0IGxpYnJhcnkKK2ZpbGUsIHNpbWlsYXIgdG8gdGVzdC1saWIuc2gsIGJlY2F1c2Ugc3VjaCBhIGxpYnJhcnkgZmlsZSBtYXkKK25vdCBiZSBzdWl0YWJsZSBmb3Igc3RhbmRhbG9uZSBleGVjdXRpb24uCisKKworV3JpdGluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgdGVzdCBzY3JpcHQgaXMgd3JpdHRlbiBhcyBhIHNoZWxsIHNjcmlwdC4gIEl0IHNob3VsZCBzdGFydAord2l0aCB0aGUgc3RhbmRhcmQgIiMhL2Jpbi9zaCIsIGFuZCBhbgorYXNzaWdubWVudCB0byB2YXJpYWJsZSAndGVzdF9kZXNjcmlwdGlvbicsIGxpa2UgdGhpczoKKworCSMhL2Jpbi9zaAorCisJdGVzdF9kZXNjcmlwdGlvbj0neHh4IHRlc3QgKG9wdGlvbiAtLWZyb3R6KQorCisJVGhpcyB0ZXN0IHJlZ2lzdGVycyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgY2FjaGUKKwlhbmQgdHJpZXMgdG8gcnVuIGdpdC1scy1maWxlcyB3aXRoIG9wdGlvbiAtLWZyb3R6LicKKworCitTb3VyY2UgJ3Rlc3QtbGliLnNoJworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgYXNzaWduaW5nIHRlc3RfZGVzY3JpcHRpb24sIHRoZSB0ZXN0IHNjcmlwdCBzaG91bGQgc291cmNlCit0ZXN0LWxpYi5zaCBsaWtlIHRoaXM6CisKKwkuIC4vdGVzdC1saWIuc2gKKworVGhpcyB0ZXN0IGhhcm5lc3MgbGlicmFyeSBkb2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgorCisgLSBJZiB0aGUgc2NyaXB0IGlzIGludm9rZWQgd2l0aCBjb21tYW5kIGxpbmUgYXJndW1lbnQgLS1oZWxwCisgICAob3IgLWgpLCBpdCBzaG93cyB0aGUgdGVzdF9kZXNjcmlwdGlvbiBhbmQgZXhpdHMuCisKKyAtIENyZWF0ZXMgYW4gZW1wdHkgdGVzdCBkaXJlY3Rvcnkgd2l0aCBhbiBlbXB0eSAuZ2l0L29iamVjdHMgZGF0YWJhc2UKKyAgIGFuZCBjaGRpcigyKSBpbnRvIGl0LiAgVGhpcyBkaXJlY3RvcnkgaXMgJ3QvdHJhc2gKKyAgIGRpcmVjdG9yeS4kdGVzdF9uYW1lX3dpdGhvdXRfZG90c2gnLCB3aXRoIHQvIHN1YmplY3QgdG8gY2hhbmdlIGJ5CisgICB0aGUgLS1yb290IG9wdGlvbiBkb2N1bWVudGVkIGFib3ZlLCBhbmQgYSAnLnN0cmVzcy08Tj4nIHN1ZmZpeAorICAgYXBwZW5kZWQgYnkgdGhlIC0tc3RyZXNzIG9wdGlvbi4KKworIC0gRGVmaW5lcyBzdGFuZGFyZCB0ZXN0IGhlbHBlciBmdW5jdGlvbnMgZm9yIHlvdXIgc2NyaXB0cyB0bworICAgdXNlLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGFsbCBzY3JpcHRzIGJlaGF2ZQorICAgY29uc2lzdGVudGx5IHdoZW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAtLXZlcmJvc2UgKG9yIC12KSwKKyAgIC0tZGVidWcgKG9yIC1kKSwgYW5kIC0taW1tZWRpYXRlIChvciAtaSkgaXMgZ2l2ZW4uCisKK0RvJ3MgJiBkb24ndHMKKy0tLS0tLS0tLS0tLS0KKworSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXMgb2YgdGhpbmdzIHlvdSBwcm9iYWJseSBzaG91bGQgYW5kIHNob3VsZG4ndCBkbword2hlbiB3cml0aW5nIHRlc3RzLgorCitIZXJlIGFyZSB0aGUgImRvJ3M6IgorCisgLSBQdXQgYWxsIGNvZGUgaW5zaWRlIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgYW5kIG90aGVyIGFzc2VydGlvbnMuCisKKyAgIEV2ZW4gY29kZSB0aGF0IGlzbid0IGEgdGVzdCBwZXIgc2UsIGJ1dCBtZXJlbHkgc29tZSBzZXR1cCBjb2RlCisgICBzaG91bGQgYmUgaW5zaWRlIGEgdGVzdCBhc3NlcnRpb24uCisKKyAtIENoYWluIHlvdXIgdGVzdCBhc3NlcnRpb25zCisKKyAgIFdyaXRlIHRlc3QgY29kZSBsaWtlIHRoaXM6CisKKwlnaXQgbWVyZ2UgZm9vICYmCisJZ2l0IHB1c2ggYmFyICYmCisJdGVzdCAuLi4KKworICAgSW5zdGVhZCBvZjoKKworCWdpdCBtZXJnZSBobGEKKwlnaXQgcHVzaCBnaAorCXRlc3QgLi4uCisKKyAgIFRoYXQgd2F5IGFsbCBvZiB0aGUgY29tbWFuZHMgaW4geW91ciB0ZXN0cyB3aWxsIHN1Y2NlZWQgb3IgZmFpbC4gSWYKKyAgIHlvdSBtdXN0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNvbWV0aGluZywgY29uc2lkZXIgdXNpbmcgYQorICAgaGVscGVyIGZ1bmN0aW9uIChlLmcuIHVzZSBzYW5lX3Vuc2V0IGluc3RlYWQgb2YgdW5zZXQsIGluIG9yZGVyCisgICB0byBhdm9pZCB1bnBvcnRhYmxlIHJldHVybiB2YWx1ZSBmb3IgdW5zZXR0aW5nIGEgdmFyaWFibGUgdGhhdCB3YXMKKyAgIGFscmVhZHkgdW5zZXQpLCBvciBwcmVwZW5kaW5nIHRoZSBjb21tYW5kIHdpdGggdGVzdF9taWdodF9mYWlsIG9yCisgICB0ZXN0X211c3RfZmFpbC4KKworIC0gQ2hlY2sgdGhlIHRlc3QgY292ZXJhZ2UgZm9yIHlvdXIgdGVzdHMuIFNlZSB0aGUgIlRlc3QgY292ZXJhZ2UiCisgICBiZWxvdy4KKworICAgRG9uJ3QgYmxpbmRseSBmb2xsb3cgdGVzdCBjb3ZlcmFnZSBtZXRyaWNzOyBpZiBhIG5ldyBmdW5jdGlvbiB5b3UgYWRkZWQKKyAgIGRvZXNuJ3QgaGF2ZSBhbnkgY292ZXJhZ2UsIHRoZW4geW91J3JlIHByb2JhYmx5IGRvaW5nIHNvbWV0aGluZyB3cm9uZywKKyAgIGJ1dCBoYXZpbmcgMTAwJSBjb3ZlcmFnZSBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB5b3UgdGVzdGVkCisgICBldmVyeXRoaW5nLgorCisgICBUZXN0cyB0aGF0IGFyZSBsaWtlbHkgdG8gc21va2Ugb3V0IGZ1dHVyZSByZWdyZXNzaW9ucyBhcmUgYmV0dGVyCisgICB0aGFuIHRlc3RzIHRoYXQganVzdCBpbmZsYXRlIHRoZSBjb3ZlcmFnZSBtZXRyaWNzLgorCisgLSBXaGVuIGEgdGVzdCBjaGVja3MgZm9yIGFuIGFic29sdXRlIHBhdGggdGhhdCBhIGdpdCBjb21tYW5kIGdlbmVyYXRlZCwKKyAgIGNvbnN0cnVjdCB0aGUgZXhwZWN0ZWQgdmFsdWUgdXNpbmcgJChwd2QpIHJhdGhlciB0aGFuICRQV0QsCisgICAkVEVTVF9ESVJFQ1RPUlksIG9yICRUUkFTSF9ESVJFQ1RPUlkuIEl0IG1ha2VzIGEgZGlmZmVyZW5jZSBvbgorICAgV2luZG93cywgd2hlcmUgdGhlIHNoZWxsIChNU1lTIGJhc2gpIG1hbmdsZXMgYWJzb2x1dGUgcGF0aCBuYW1lcy4KKyAgIEZvciBkZXRhaWxzLCBzZWUgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIDQxMTQxNTZhZTkuCisKKyAtIFJlbWVtYmVyIHRoYXQgaW5zaWRlIHRoZSA8c2NyaXB0PiBwYXJ0LCB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZAorICAgc3RhbmRhcmQgZXJyb3Igc3RyZWFtcyBhcmUgZGlzY2FyZGVkLCBhbmQgdGhlIHRlc3QgaGFybmVzcyBvbmx5CisgICByZXBvcnRzICJvayIgb3IgIm5vdCBvayIgdG8gdGhlIGVuZCB1c2VyIHJ1bm5pbmcgdGhlIHRlc3RzLiBVbmRlcgorICAgLS12ZXJib3NlLCB0aGV5IGFyZSBzaG93biB0byBoZWxwIGRlYnVnIHRoZSB0ZXN0cy4KKworQW5kIGhlcmUgYXJlIHRoZSAiZG9uJ3RzOiIKKworIC0gRG9uJ3QgZXhpdCgpIHdpdGhpbiBhIDxzY3JpcHQ+IHBhcnQuCisKKyAgIFRoZSBoYXJuZXNzIHdpbGwgY2F0Y2ggdGhpcyBhcyBhIHByb2dyYW1taW5nIGVycm9yIG9mIHRoZSB0ZXN0LgorICAgVXNlIHRlc3RfZG9uZSBpbnN0ZWFkIGlmIHlvdSBuZWVkIHRvIHN0b3AgdGhlIHRlc3RzIGVhcmx5IChzZWUKKyAgICJTa2lwcGluZyB0ZXN0cyIgYmVsb3cpLgorCisgLSBEb24ndCB1c2UgJyEgZ2l0IGNtZCcgd2hlbiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGdpdCBjb21tYW5kCisgICBleGl0cyB3aXRoIGZhaWx1cmUgaW4gYSBjb250cm9sbGVkIHdheSBieSBjYWxsaW5nICJkaWUoKSIuICBJbnN0ZWFkLAorICAgdXNlICd0ZXN0X211c3RfZmFpbCBnaXQgY21kJy4gIFRoaXMgd2lsbCBzaWduYWwgYSBmYWlsdXJlIGlmIGdpdAorICAgZGllcyBpbiBhbiB1bmV4cGVjdGVkIHdheSAoZS5nLiBzZWdmYXVsdCkuCisKKyAgIE9uIHRoZSBvdGhlciBoYW5kLCBkb24ndCB1c2UgdGVzdF9tdXN0X2ZhaWwgZm9yIHJ1bm5pbmcgcmVndWxhcgorICAgcGxhdGZvcm0gY29tbWFuZHM7IGp1c3QgdXNlICchIGNtZCcuICBXZSBhcmUgbm90IGluIHRoZSBidXNpbmVzcworICAgb2YgdmVyaWZ5aW5nIHRoYXQgdGhlIHdvcmxkIGdpdmVuIHRvIHVzIHNhbmVseSB3b3Jrcy4KKworIC0gRG9uJ3QgZmVlZCB0aGUgb3V0cHV0IG9mIGEgZ2l0IGNvbW1hbmQgdG8gYSBwaXBlLCBhcyBpbjoKKworICAgICBnaXQgLUMgcmVwbyBscy1maWxlcyB8CisgICAgIHhhcmdzIC1uIDEgYmFzZW5hbWUgfAorICAgICBncmVwIGZvbworCisgICB3aGljaCB3aWxsIGRpc2NhcmQgZ2l0J3MgZXhpdCBjb2RlIGFuZCBtYXkgbWFzayBhIGNyYXNoLiBJbiB0aGUKKyAgIGFib3ZlIGV4YW1wbGUsIGFsbCBleGl0IGNvZGVzIGFyZSBpZ25vcmVkIGV4Y2VwdCBncmVwJ3MuCisKKyAgIEluc3RlYWQsIHdyaXRlIHRoZSBvdXRwdXQgb2YgdGhhdCBjb21tYW5kIHRvIGEgdGVtcG9yYXJ5CisgICBmaWxlIHdpdGggIj4iIG9yIGFzc2lnbiBpdCB0byBhIHZhcmlhYmxlIHdpdGggIng9JChnaXQgLi4uKSIgcmF0aGVyCisgICB0aGFuIHBpcGUgaXQuCisKKyAtIERvbid0IHVzZSBjb21tYW5kIHN1YnN0aXR1dGlvbiBpbiBhIHdheSB0aGF0IGRpc2NhcmRzIGdpdCdzIGV4aXQKKyAgIGNvZGUuIFdoZW4gYXNzaWduaW5nIHRvIGEgdmFyaWFibGUsIHRoZSBleGl0IGNvZGUgaXMgbm90IGRpc2NhcmRlZCwKKyAgIGUuZy46CisKKyAgICAgeD0kKGdpdCBjYXQtZmlsZSAtcCAkc2hhKSAmJgorICAgICAuLi4KKworICAgaXMgT0sgYmVjYXVzZSBhIGNyYXNoIGluICJnaXQgY2F0LWZpbGUiIHdpbGwgY2F1c2UgdGhlICImJiIgY2hhaW4KKyAgIHRvIGZhaWwsIGJ1dDoKKworICAgICB0ZXN0ICJyZWZzL2hlYWRzL2ZvbyIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorCisgICBpcyBub3QgT0sgYW5kIGEgY3Jhc2ggaW4gZ2l0IGNvdWxkIGdvIHVuZGV0ZWN0ZWQuCisKKyAtIERvbid0IHVzZSBwZXJsIHdpdGhvdXQgc3BlbGxpbmcgaXQgYXMgIiRQRVJMX1BBVEgiLiBUaGlzIGlzIHRvIGhlbHAKKyAgIG91ciBmcmllbmRzIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIHBsYXRmb3JtIFBlcmwgb2Z0ZW4gYWRkcyBDUiBiZWZvcmUKKyAgIHRoZSBlbmQgb2YgbGluZSwgYW5kIHRoZXkgYnVuZGxlIEdpdCB3aXRoIGEgdmVyc2lvbiBvZiBQZXJsIHRoYXQKKyAgIGRvZXMgbm90IGRvIHNvLCB3aG9zZSBwYXRoIGlzIHNwZWNpZmllZCB3aXRoICRQRVJMX1BBVEguIE5vdGUgdGhhdCB3ZQorICAgcHJvdmlkZSBhICJwZXJsIiBmdW5jdGlvbiB3aGljaCB1c2VzICRQRVJMX1BBVEggdW5kZXIgdGhlIGhvb2QsIHNvCisgICB5b3UgZG8gbm90IG5lZWQgdG8gd29ycnkgd2hlbiBzaW1wbHkgcnVubmluZyBwZXJsIGluIHRoZSB0ZXN0IHNjcmlwdHMKKyAgIChidXQgeW91IGRvLCBmb3IgZXhhbXBsZSwgb24gYSBzaGViYW5nIGxpbmUgb3IgaW4gYSBzdWIgc2NyaXB0CisgICBjcmVhdGVkIHZpYSAid3JpdGVfc2NyaXB0IikuCisKKyAtIERvbid0IHVzZSBzaCB3aXRob3V0IHNwZWxsaW5nIGl0IGFzICIkU0hFTExfUEFUSCIsIHdoZW4gdGhlIHNjcmlwdAorICAgY2FuIGJlIG1pc2ludGVycHJldGVkIGJ5IGJyb2tlbiBwbGF0Zm9ybSBzaGVsbCAoZS5nLiBTb2xhcmlzKS4KKworIC0gRG9uJ3QgY2hkaXIgYXJvdW5kIGluIHRlc3RzLiAgSXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gY2hkaXIgdG8KKyAgIHNvbWV3aGVyZSBhbmQgdGhlbiBjaGRpciBiYWNrIHRvIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBsYXRlciBpbgorICAgdGhlIHRlc3QsIGFzIGFueSBpbnRlcm1lZGlhdGUgc3RlcCBjYW4gZmFpbCBhbmQgYWJvcnQgdGhlIHRlc3QsCisgICBjYXVzaW5nIHRoZSBuZXh0IHRlc3QgdG8gc3RhcnQgaW4gYW4gdW5leHBlY3RlZCBkaXJlY3RvcnkuICBEbyBzbworICAgaW5zaWRlIGEgc3Vic2hlbGwgaWYgbmVjZXNzYXJ5LgorCisgLSBEb24ndCBzYXZlIGFuZCB2ZXJpZnkgdGhlIHN0YW5kYXJkIGVycm9yIG9mIGNvbXBvdW5kIGNvbW1hbmRzLCBpLmUuCisgICBncm91cCBjb21tYW5kcywgc3Vic2hlbGxzLCBhbmQgc2hlbGwgZnVuY3Rpb25zIChleGNlcHQgdGVzdCBoZWxwZXIKKyAgIGZ1bmN0aW9ucyBsaWtlICd0ZXN0X211c3RfZmFpbCcpIGxpa2UgdGhpczoKKworICAgICAoIGNkIGRpciAmJiBnaXQgY21kICkgMj5lcnJvciAmJgorICAgICB0ZXN0X2NtcCBleHBlY3QgZXJyb3IKKworICAgV2hlbiBydW5uaW5nIHRoZSB0ZXN0IHdpdGggJy14JyB0cmFjaW5nLCB0aGVuIHRoZSB0cmFjZSBvZiBjb21tYW5kcworICAgZXhlY3V0ZWQgaW4gdGhlIGNvbXBvdW5kIGNvbW1hbmQgd2lsbCBiZSBpbmNsdWRlZCBpbiBzdGFuZGFyZCBlcnJvcgorICAgYXMgd2VsbCwgcXVpdGUgcG9zc2libHkgdGhyb3dpbmcgb2ZmIHRoZSBzdWJzZXF1ZW50IGNoZWNrcyBleGFtaW5pbmcKKyAgIHRoZSBvdXRwdXQuICBJbnN0ZWFkLCBzYXZlIG9ubHkgdGhlIHJlbGV2YW50IGdpdCBjb21tYW5kJ3Mgc3RhbmRhcmQKKyAgIGVycm9yOgorCisgICAgICggY2QgZGlyICYmIGdpdCBjbWQgMj4uLi9lcnJvciApICYmCisgICAgIHRlc3RfY21wIGV4cGVjdCBlcnJvcgorCisgLSBEb24ndCBicmVhayB0aGUgVEFQIG91dHB1dAorCisgICBUaGUgcmF3IG91dHB1dCBmcm9tIHlvdXIgdGVzdCBtYXkgYmUgaW50ZXJwcmV0ZWQgYnkgYSBUQVAgaGFybmVzcy4gVEFQCisgICBoYXJuZXNzZXMgd2lsbCBpZ25vcmUgZXZlcnl0aGluZyB0aGV5IGRvbid0IGtub3cgYWJvdXQsIGJ1dCBkb24ndCBzdGVwCisgICBvbiB0aGVpciB0b2VzIGluIHRoZXNlIGFyZWFzOgorCisgICAtIERvbid0IHByaW50IGxpbmVzIGxpa2UgIiR4Li4keSIgd2hlcmUgJHggYW5kICR5IGFyZSBpbnRlZ2Vycy4KKworICAgLSBEb24ndCBwcmludCBsaW5lcyB0aGF0IGJlZ2luIHdpdGggIm9rIiBvciAibm90IG9rIi4KKworICAgVEFQIGhhcm5lc3NlcyBleHBlY3QgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggZWl0aGVyICJvayIgYW5kICJub3QKKyAgIG9rIiB0byBzaWduYWwgYSB0ZXN0IHBhc3NlZCBvciBmYWlsZWQgKGFuZCBvdXIgaGFybmVzcyBhbHJlYWR5CisgICBwcm9kdWNlcyBzdWNoIGxpbmVzKSwgc28geW91ciBzY3JpcHQgc2hvdWxkbid0IGVtaXQgc3VjaCBsaW5lcyB0bworICAgdGhlaXIgb3V0cHV0LgorCisgICBZb3UgY2FuIGdsZWFuIHNvbWUgZnVydGhlciBwb3NzaWJsZSBpc3N1ZXMgZnJvbSB0aGUgVEFQIGdyYW1tYXIKKyAgIChzZWUgaHR0cHM6Ly9tZXRhY3Bhbi5vcmcvcG9kL1RBUDo6UGFyc2VyOjpHcmFtbWFyI1RBUC1HUkFNTUFSKQorICAgYnV0IHRoZSBiZXN0IGluZGljYXRpb24gaXMgdG8ganVzdCBydW4gdGhlIHRlc3RzIHdpdGggcHJvdmUoMSksCisgICBpdCdsbCBjb21wbGFpbiBpZiBhbnl0aGluZyBpcyBhbWlzcy4KKworCitTa2lwcGluZyB0ZXN0cworLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG5lZWQgdG8gc2tpcCB0ZXN0cyB5b3Ugc2hvdWxkIGRvIHNvIGJ5IHVzaW5nIHRoZSB0aHJlZS1hcmcgZm9ybQorb2YgdGhlIHRlc3RfKiBmdW5jdGlvbnMgKHNlZSB0aGUgIlRlc3QgaGFybmVzcyBsaWJyYXJ5IiBzZWN0aW9uCitiZWxvdyksIGUuZy46CisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ0kgbmVlZCBQZXJsJyAnCisgICAgICAgIHBlcmwgLWUgImhsYWdoKCkgaWYgdW5mX3VuZigpIgorICAgICcKKworVGhlIGFkdmFudGFnZSBvZiBza2lwcGluZyB0ZXN0cyBsaWtlIHRoaXMgaXMgdGhhdCBwbGF0Zm9ybXMgdGhhdCBkb24ndAoraGF2ZSB0aGUgUEVSTCBhbmQgb3RoZXIgb3B0aW9uYWwgZGVwZW5kZW5jaWVzIGdldCBhbiBpbmRpY2F0aW9uIG9mIGhvdworbWFueSB0ZXN0cyB0aGV5J3JlIG1pc3NpbmcuCisKK0lmIHRoZSB0ZXN0IGNvZGUgaXMgdG9vIGhhaXJ5IGZvciB0aGF0IChpLmUuIGRvZXMgYSBsb3Qgb2Ygc2V0dXAgd29yaworb3V0c2lkZSB0ZXN0IGFzc2VydGlvbnMpIHlvdSBjYW4gYWxzbyBza2lwIGFsbCByZW1haW5pbmcgdGVzdHMgYnkKK3NldHRpbmcgc2tpcF9hbGwgYW5kIGltbWVkaWF0ZWx5IGNhbGwgdGVzdF9kb25lOgorCisJaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKKwl0aGVuCisJICAgIHNraXBfYWxsPSdza2lwcGluZyBwZXJsIGludGVyZmFjZSB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCSAgICB0ZXN0X2RvbmUKKwlmaQorCitUaGUgc3RyaW5nIHlvdSBnaXZlIHRvIHNraXBfYWxsIHdpbGwgYmUgdXNlZCBhcyBhbiBleHBsYW5hdGlvbiBmb3Igd2h5Cit0aGUgdGVzdCB3YXMgc2tpcHBlZC4KKworRW5kIHdpdGggdGVzdF9kb25lCistLS0tLS0tLS0tLS0tLS0tLS0KKworWW91ciBzY3JpcHQgd2lsbCBiZSBhIHNlcXVlbmNlIG9mIHRlc3RzLCB1c2luZyBoZWxwZXIgZnVuY3Rpb25zCitmcm9tIHRoZSB0ZXN0IGhhcm5lc3MgbGlicmFyeS4gIEF0IHRoZSBlbmQgb2YgdGhlIHNjcmlwdCwgY2FsbAorJ3Rlc3RfZG9uZScuCisKKworVGVzdCBoYXJuZXNzIGxpYnJhcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBhIGhhbmRmdWwgaGVscGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSB0ZXN0IGhhcm5lc3MKK2xpYnJhcnkgZm9yIHlvdXIgc2NyaXB0IHRvIHVzZS4KKworIC0gdGVzdF9leHBlY3Rfc3VjY2VzcyBbPHByZXJlcT5dIDxtZXNzYWdlPiA8c2NyaXB0PgorCisgICBVc3VhbGx5IHRha2VzIHR3byBzdHJpbmdzIGFzIHBhcmFtZXRlcnMsIGFuZCBldmFsdWF0ZXMgdGhlCisgICA8c2NyaXB0Pi4gIElmIGl0IHlpZWxkcyBzdWNjZXNzLCB0ZXN0IGlzIGNvbnNpZGVyZWQKKyAgIHN1Y2Nlc3NmdWwuICA8bWVzc2FnZT4gc2hvdWxkIHN0YXRlIHdoYXQgaXQgaXMgdGVzdGluZy4KKworICAgRXhhbXBsZToKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSAgICAnZ2l0LXdyaXRlLXRyZWUgc2hvdWxkIGJlIGFibGUgdG8gd3JpdGUgYW4gZW1wdHkgdHJlZS4nIFwKKwkgICAgJ3RyZWU9JChnaXQtd3JpdGUtdHJlZSknCisKKyAgIElmIHlvdSBzdXBwbHkgdGhyZWUgcGFyYW1ldGVycyB0aGUgZmlyc3Qgd2lsbCBiZSB0YWtlbiB0byBiZSBhCisgICBwcmVyZXF1aXNpdGU7IHNlZSB0aGUgdGVzdF9zZXRfcHJlcmVxIGFuZCB0ZXN0X2hhdmVfcHJlcmVxCisgICBkb2N1bWVudGF0aW9uIGJlbG93OgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCAtLXBhZ2luYXRlIHJldi1saXN0IHVzZXMgYSBwYWdlcicgXAorCSAgICAnIC4uLiAnCisKKyAgIFlvdSBjYW4gYWxzbyBzdXBwbHkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwcmVyZXF1aXNpdGVzLCBpbiB0aGUKKyAgIHJhcmUgY2FzZSB3aGVyZSB5b3VyIHRlc3QgZGVwZW5kcyBvbiBtb3JlIHRoYW4gb25lOgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMLFBZVEhPTiAneW8gZGF3ZycgXAorCSAgICAnIHRlc3QgJChwZXJsIC1FICdwcmludCBldmFsICIxICsiIC4gcXhbcHl0aG9uIC1jICJwcmludCAyIl0nKSA9PSAiNCIgJworCisgLSB0ZXN0X2V4cGVjdF9mYWlsdXJlIFs8cHJlcmVxPl0gPG1lc3NhZ2U+IDxzY3JpcHQ+CisKKyAgIFRoaXMgaXMgTk9UIHRoZSBvcHBvc2l0ZSBvZiB0ZXN0X2V4cGVjdF9zdWNjZXNzLCBidXQgaXMgdXNlZAorICAgdG8gbWFyayBhIHRlc3QgdGhhdCBkZW1vbnN0cmF0ZXMgYSBrbm93biBicmVha2FnZS4gIFVubGlrZQorICAgdGhlIHVzdWFsIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgdGVzdHMsIHdoaWNoIHNheSAib2siIG9uCisgICBzdWNjZXNzIGFuZCAiRkFJTCIgb24gZmFpbHVyZSwgdGhpcyB3aWxsIHNheSAiRklYRUQiIG9uCisgICBzdWNjZXNzIGFuZCAic3RpbGwgYnJva2VuIiBvbiBmYWlsdXJlLiAgRmFpbHVyZXMgZnJvbSB0aGVzZQorICAgdGVzdHMgd29uJ3QgY2F1c2UgLWkgKGltbWVkaWF0ZSkgdG8gc3RvcC4KKworICAgTGlrZSB0ZXN0X2V4cGVjdF9zdWNjZXNzIHRoaXMgZnVuY3Rpb24gY2FuIG9wdGlvbmFsbHkgdXNlIGEgdGhyZWUKKyAgIGFyZ3VtZW50IGludm9jYXRpb24gd2l0aCBhIHByZXJlcXVpc2l0ZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisKKyAtIHRlc3RfZGVidWcgPHNjcmlwdD4KKworICAgVGhpcyB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCwgPHNjcmlwdD4sIGFuZCBldmFsdWF0ZXMgaXQgb25seQorICAgd2hlbiB0aGUgdGVzdCBzY3JpcHQgaXMgc3RhcnRlZCB3aXRoIC0tZGVidWcgY29tbWFuZCBsaW5lCisgICBhcmd1bWVudC4gIFRoaXMgaXMgcHJpbWFyaWx5IG1lYW50IGZvciB1c2UgZHVyaW5nIHRoZQorICAgZGV2ZWxvcG1lbnQgb2YgYSBuZXcgdGVzdCBzY3JpcHQuCisKKyAtIGRlYnVnIDxnaXQtY29tbWFuZD4KKworICAgUnVuIGEgZ2l0IGNvbW1hbmQgaW5zaWRlIGEgZGVidWdnZXIuIFRoaXMgaXMgcHJpbWFyaWx5IG1lYW50IGZvcgorICAgdXNlIHdoZW4gZGVidWdnaW5nIGEgZmFpbGluZyB0ZXN0IHNjcmlwdC4KKworIC0gdGVzdF9kb25lCisKKyAgIFlvdXIgdGVzdCBzY3JpcHQgbXVzdCBoYXZlIHRlc3RfZG9uZSBhdCB0aGUgZW5kLiAgSXRzIHB1cnBvc2UKKyAgIGlzIHRvIHN1bW1hcml6ZSBzdWNjZXNzZXMgYW5kIGZhaWx1cmVzIGluIHRoZSB0ZXN0IHNjcmlwdCBhbmQKKyAgIGV4aXQgd2l0aCBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLgorCisgLSB0ZXN0X3RpY2sKKworICAgTWFrZSBjb21taXQgYW5kIHRhZyBuYW1lcyBjb25zaXN0ZW50IGJ5IHNldHRpbmcgdGhlIGF1dGhvciBhbmQKKyAgIGNvbW1pdHRlciB0aW1lcyB0byBkZWZpbmVkIHN0YXRlLiAgU3Vic2VxdWVudCBjYWxscyB3aWxsCisgICBhZHZhbmNlIHRoZSB0aW1lcyBieSBhIGZpeGVkIGFtb3VudC4KKworIC0gdGVzdF9jb21taXQgPG1lc3NhZ2U+IFs8ZmlsZW5hbWU+IFs8Y29udGVudHM+XV0KKworICAgQ3JlYXRlcyBhIGNvbW1pdCB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLCBjb21taXR0aW5nIHRoZSBnaXZlbgorICAgZmlsZSB3aXRoIHRoZSBnaXZlbiBjb250ZW50cyAoZGVmYXVsdCBmb3IgYm90aCBpcyB0byByZXVzZSB0aGUKKyAgIG1lc3NhZ2Ugc3RyaW5nKSwgYW5kIGFkZHMgYSB0YWcgKGFnYWluIHJldXNpbmcgdGhlIG1lc3NhZ2UKKyAgIHN0cmluZyBhcyBuYW1lKS4gIENhbGxzIHRlc3RfdGljayB0byBtYWtlIHRoZSBTSEEtMXMKKyAgIHJlcHJvZHVjaWJsZS4KKworIC0gdGVzdF9tZXJnZSA8bWVzc2FnZT4gPGNvbW1pdC1vci10YWc+CisKKyAgIE1lcmdlcyB0aGUgZ2l2ZW4gcmV2IHVzaW5nIHRoZSBnaXZlbiBtZXNzYWdlLiAgTGlrZSB0ZXN0X2NvbW1pdCwKKyAgIGNyZWF0ZXMgYSB0YWcgYW5kIGNhbGxzIHRlc3RfdGljayBiZWZvcmUgY29tbWl0dGluZy4KKworIC0gdGVzdF9zZXRfcHJlcmVxIDxwcmVyZXE+CisKKyAgIFNldCBhIHRlc3QgcHJlcmVxdWlzaXRlIHRvIGJlIHVzZWQgbGF0ZXIgd2l0aCB0ZXN0X2hhdmVfcHJlcmVxLiBUaGUKKyAgIHRlc3QtbGliIHdpbGwgc2V0IHNvbWUgcHJlcmVxdWlzaXRlcyBmb3IgeW91LCBzZWUgdGhlCisgICAiUHJlcmVxdWlzaXRlcyIgc2VjdGlvbiBiZWxvdyBmb3IgYSBmdWxsIGxpc3Qgb2YgdGhlc2UuCisKKyAgIE90aGVycyB5b3UgY2FuIHNldCB5b3Vyc2VsZiBhbmQgdXNlIGxhdGVyIHdpdGggZWl0aGVyCisgICB0ZXN0X2hhdmVfcHJlcmVxIGRpcmVjdGx5LCBvciB0aGUgdGhyZWUgYXJndW1lbnQgaW52b2NhdGlvbiBvZgorICAgdGVzdF9leHBlY3Rfc3VjY2VzcyBhbmQgdGVzdF9leHBlY3RfZmFpbHVyZS4KKworIC0gdGVzdF9oYXZlX3ByZXJlcSA8cHJlcmVxPgorCisgICBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlcmVxdWlzaXRlIHByZXZpb3VzbHkgc2V0IHdpdGggdGVzdF9zZXRfcHJlcmVxLgorICAgVGhlIG1vc3QgY29tbW9uIHdheSB0byB1c2UgdGhpcyBleHBsaWNpdGx5IChhcyBvcHBvc2VkIHRvIHRoZQorICAgaW1wbGljaXQgdXNlIHdoZW4gYW4gYXJndW1lbnQgaXMgcGFzc2VkIHRvIHRlc3RfZXhwZWN0XyopIGlzIHRvIHNraXAKKyAgIGFsbCB0aGUgdGVzdHMgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0ZXN0IHNjcmlwdCBpZiB3ZSBkb24ndCBoYXZlIHNvbWUKKyAgIGVzc2VudGlhbCBwcmVyZXF1aXNpdGU6CisKKwlpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAorCXRoZW4KKwkgICAgc2tpcF9hbGw9J3NraXBwaW5nIHBlcmwgaW50ZXJmYWNlIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJICAgIHRlc3RfZG9uZQorCWZpCisKKyAtIHRlc3RfZXh0ZXJuYWwgWzxwcmVyZXE+XSA8bWVzc2FnZT4gPGV4dGVybmFsPiA8c2NyaXB0PgorCisgICBFeGVjdXRlIGEgPHNjcmlwdD4gd2l0aCBhbiA8ZXh0ZXJuYWw+IGludGVycHJldGVyIChsaWtlIHBlcmwpLiBUaGlzCisgICB3YXMgYWRkZWQgZm9yIHRlc3RzIGxpa2UgdDk3MDAtcGVybC1naXQuc2ggd2hpY2ggZG8gbW9zdCBvZiB0aGVpcgorICAgd29yayBpbiBhbiBleHRlcm5hbCB0ZXN0IHNjcmlwdC4KKworCXRlc3RfZXh0ZXJuYWwgXAorCSAgICAnR2l0d2ViQ2FjaGU6OipGaWxlQ2FjaGUqJyBcCisJICAgIHBlcmwgIiRURVNUX0RJUkVDVE9SWSIvdDk1MDMvdGVzdF9jYWNoZV9pbnRlcmZhY2UucGwKKworICAgSWYgdGhlIHRlc3QgaXMgb3V0cHV0dGluZyBpdHMgb3duIFRBUCB5b3Ugc2hvdWxkIHNldCB0aGUKKyAgIHRlc3RfZXh0ZXJuYWxfaGFzX3RhcCB2YXJpYWJsZSBzb21ld2hlcmUgYmVmb3JlIGNhbGxpbmcgdGhlIGZpcnN0CisgICB0ZXN0X2V4dGVybmFsKiBmdW5jdGlvbi4gU2VlIHQ5NzAwLXBlcmwtZ2l0LnNoIGZvciBhbiBleGFtcGxlLgorCisJIyBUaGUgZXh0ZXJuYWwgdGVzdCB3aWxsIG91dHB1dHMgaXRzIG93biBwbGFuCisJdGVzdF9leHRlcm5hbF9oYXNfdGFwPTEKKworIC0gdGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciBbPHByZXJlcT5dIDxtZXNzYWdlPiA8ZXh0ZXJuYWw+IDxzY3JpcHQ+CisKKyAgIExpa2UgdGVzdF9leHRlcm5hbCBidXQgZmFpbCBpZiB0aGVyZSdzIGFueSBvdXRwdXQgb24gc3RkZXJyLAorICAgaW5zdGVhZCBvZiBjaGVja2luZyB0aGUgZXhpdCBjb2RlLgorCisJdGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciBcCisJICAgICdQZXJsIEFQSScgXAorCSAgICBwZXJsICIkVEVTVF9ESVJFQ1RPUlkiL3Q5NzAwL3Rlc3QucGwKKworIC0gdGVzdF9leHBlY3RfY29kZSA8ZXhpdC1jb2RlPiA8Y29tbWFuZD4KKworICAgUnVuIGEgY29tbWFuZCBhbmQgZW5zdXJlIHRoYXQgaXQgZXhpdHMgd2l0aCB0aGUgZ2l2ZW4gZXhpdCBjb2RlLgorICAgRm9yIGV4YW1wbGU6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSB3aXRoIGQvZiBjb25mbGljdHMnICcKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZSAibWVyZ2UgbXNnIiBCIG1hc3RlcgorCScKKworIC0gdGVzdF9tdXN0X2ZhaWwgWzxvcHRpb25zPl0gPGdpdC1jb21tYW5kPgorCisgICBSdW4gYSBnaXQgY29tbWFuZCBhbmQgZW5zdXJlIGl0IGZhaWxzIGluIGEgY29udHJvbGxlZCB3YXkuICBVc2UKKyAgIHRoaXMgaW5zdGVhZCBvZiAiISA8Z2l0LWNvbW1hbmQ+Ii4gIFdoZW4gZ2l0LWNvbW1hbmQgZGllcyBkdWUgdG8gYQorICAgc2VnZmF1bHQsIHRlc3RfbXVzdF9mYWlsIGRpYWdub3NlcyBpdCBhcyBhbiBlcnJvcjsgIiEgPGdpdC1jb21tYW5kPiIKKyAgIHRyZWF0cyBpdCBhcyBqdXN0IGFub3RoZXIgZXhwZWN0ZWQgZmFpbHVyZSwgd2hpY2ggd291bGQgbGV0IHN1Y2ggYQorICAgYnVnIGdvIHVubm90aWNlZC4KKworICAgQWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAgICAgb2s9PHNpZ25hbC1uYW1lPlssPC4uLj5dOgorICAgICAgIERvbid0IHRyZWF0IGFuIGV4aXQgY2F1c2VkIGJ5IHRoZSBnaXZlbiBzaWduYWwgYXMgZXJyb3IuCisgICAgICAgTXVsdGlwbGUgc2lnbmFscyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuCisgICAgICAgQ3VycmVudGx5IHJlY29nbml6ZWQgc2lnbmFsIG5hbWVzIGFyZTogc2lncGlwZSwgc3VjY2Vzcy4KKyAgICAgICAoRG9uJ3QgdXNlICdzdWNjZXNzJywgdXNlICd0ZXN0X21pZ2h0X2ZhaWwnIGluc3RlYWQuKQorCisgLSB0ZXN0X21pZ2h0X2ZhaWwgWzxvcHRpb25zPl0gPGdpdC1jb21tYW5kPgorCisgICBTaW1pbGFyIHRvIHRlc3RfbXVzdF9mYWlsLCBidXQgdG9sZXJhdGUgc3VjY2VzcywgdG9vLiAgVXNlIHRoaXMKKyAgIGluc3RlYWQgb2YgIjxnaXQtY29tbWFuZD4gfHwgOiIgdG8gY2F0Y2ggZmFpbHVyZXMgZHVlIHRvIHNlZ3YuCisKKyAgIEFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhcyB0ZXN0X211c3RfZmFpbC4KKworIC0gdGVzdF9jbXAgPGV4cGVjdGVkPiA8YWN0dWFsPgorCisgICBDaGVjayB3aGV0aGVyIHRoZSBjb250ZW50IG9mIHRoZSA8YWN0dWFsPiBmaWxlIG1hdGNoZXMgdGhlCisgICA8ZXhwZWN0ZWQ+IGZpbGUuICBUaGlzIGJlaGF2ZXMgbGlrZSAiY21wIiBidXQgcHJvZHVjZXMgbW9yZQorICAgaGVscGZ1bCBvdXRwdXQgd2hlbiB0aGUgdGVzdCBpcyBydW4gd2l0aCAiLXYiIG9wdGlvbi4KKworIC0gdGVzdF9jbXBfcmV2IDxleHBlY3RlZD4gPGFjdHVhbD4KKworICAgQ2hlY2sgd2hldGhlciB0aGUgPGV4cGVjdGVkPiByZXYgcG9pbnRzIHRvIHRoZSBzYW1lIGNvbW1pdCBhcyB0aGUKKyAgIDxhY3R1YWw+IHJldi4KKworIC0gdGVzdF9saW5lX2NvdW50ICg9IHwgLWx0IHwgLWdlIHwgLi4uKSA8bGVuZ3RoPiA8ZmlsZT4KKworICAgQ2hlY2sgd2hldGhlciBhIGZpbGUgaGFzIHRoZSBsZW5ndGggaXQgaXMgZXhwZWN0ZWQgdG8uCisKKyAtIHRlc3RfcGF0aF9pc19maWxlIDxwYXRoPiBbPGRpYWdub3Npcz5dCisgICB0ZXN0X3BhdGhfaXNfZGlyIDxwYXRoPiBbPGRpYWdub3Npcz5dCisgICB0ZXN0X3BhdGhfaXNfbWlzc2luZyA8cGF0aD4gWzxkaWFnbm9zaXM+XQorCisgICBDaGVjayBpZiB0aGUgbmFtZWQgcGF0aCBpcyBhIGZpbGUsIGlmIHRoZSBuYW1lZCBwYXRoIGlzIGEKKyAgIGRpcmVjdG9yeSwgb3IgaWYgdGhlIG5hbWVkIHBhdGggZG9lcyBub3QgZXhpc3QsIHJlc3BlY3RpdmVseSwKKyAgIGFuZCBmYWlsIG90aGVyd2lzZSwgc2hvd2luZyB0aGUgPGRpYWdub3Npcz4gdGV4dC4KKworIC0gdGVzdF93aGVuX2ZpbmlzaGVkIDxzY3JpcHQ+CisKKyAgIFByZXBlbmQgPHNjcmlwdD4gdG8gYSBsaXN0IG9mIGNvbW1hbmRzIHRvIHJ1biB0byBjbGVhbiB1cAorICAgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCB0ZXN0LiAgSWYgc29tZSBjbGVhbi11cCBjb21tYW5kCisgICBmYWlscywgdGhlIHRlc3Qgd2lsbCBub3QgcGFzcy4KKworICAgRXhhbXBsZToKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCBwb2ludGluZyB0byBub24tY29tbWl0JyAnCisJCWdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0gPi5naXQvcmVmcy9oZWFkcy9pbnZhbGlkICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9pbnZhbGlkIiAmJgorCQkuLi4KKwknCisKKyAtIHRlc3RfYXRleGl0IDxzY3JpcHQ+CisKKyAgIFByZXBlbmQgPHNjcmlwdD4gdG8gYSBsaXN0IG9mIGNvbW1hbmRzIHRvIHJ1biB1bmNvbmRpdGlvbmFsbHkgdG8KKyAgIGNsZWFuIHVwIGJlZm9yZSB0aGUgdGVzdCBzY3JpcHQgZXhpdHMsIGUuZy4gdG8gc3RvcCBhIGRhZW1vbjoKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZ2l0IGRhZW1vbicgJworCQlnaXQgZGFlbW9uICYKKwkJZGFlbW9uX3BpZD0kISAmJgorCQl0ZXN0X2F0ZXhpdCAna2lsbCAkZGFlbW9uX3BpZCcgJiYKKwkJaGVsbG8gd29ybGQKKwknCisKKyAgIFRoZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdHJhc2ggZGlyZWN0b3J5IGlzIHJlbW92ZWQsCisgICBpLmUuIHRoZSBhdGV4aXQgY29tbWFuZHMgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGFjY2VzcyBhbnkgcGlkZmlsZXMgb3IKKyAgIHNvY2tldCBmaWxlcy4KKworICAgTm90ZSB0aGF0IHRoZXNlIGNvbW1hbmRzIHdpbGwgYmUgcnVuIGV2ZW4gd2hlbiBhIHRlc3Qgc2NyaXB0IHJ1bgorICAgd2l0aCAnLS1pbW1lZGlhdGUnIGZhaWxzLiAgQmUgY2FyZWZ1bCB3aXRoIHlvdXIgYXRleGl0IGNvbW1hbmRzIHRvCisgICBtaW5pbWl6ZSBhbnkgY2hhbmdlcyB0byB0aGUgZmFpbGVkIHN0YXRlLgorCisgLSB0ZXN0X3dyaXRlX2xpbmVzIDxsaW5lcz4KKworICAgV3JpdGUgPGxpbmVzPiBvbiBzdGFuZGFyZCBvdXRwdXQsIG9uZSBsaW5lIHBlciBhcmd1bWVudC4KKyAgIFVzZWZ1bCB0byBwcmVwYXJlIG11bHRpLWxpbmUgZmlsZXMgaW4gYSBjb21wYWN0IGZvcm0uCisKKyAgIEV4YW1wbGU6CisKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgYiBjIGQgZSBmIGcgPmZvbworCisgICBJcyBhIG1vcmUgY29tcGFjdCBlcXVpdmFsZW50IG9mOgorCWNhdCA+Zm9vIDw8LUVPRgorCWEKKwliCisJYworCWQKKwllCisJZgorCWcKKwlFT0YKKworCisgLSB0ZXN0X3BhdXNlCisKKwlUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIGZvciB3cml0aW5nIGFuZCBkZWJ1Z2dpbmcgdGVzdHMgYW5kIG11c3QgYmUKKwlyZW1vdmVkIGJlZm9yZSBzdWJtaXR0aW5nLiBJdCBoYWx0cyB0aGUgZXhlY3V0aW9uIG9mIHRoZSB0ZXN0IGFuZAorCXNwYXducyBhIHNoZWxsIGluIHRoZSB0cmFzaCBkaXJlY3RvcnkuIEV4aXQgdGhlIHNoZWxsIHRvIGNvbnRpbnVlCisJdGhlIHRlc3QuIEV4YW1wbGU6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0JyAnCisJCWdpdCBkby1zb21ldGhpbmcgPmFjdHVhbCAmJgorCQl0ZXN0X3BhdXNlICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworIC0gdGVzdF9sbl9zX2FkZCA8cGF0aDE+IDxwYXRoMj4KKworICAgVGhpcyBmdW5jdGlvbiBoZWxwcyBzeXN0ZW1zIHdob3NlIGZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBzeW1ib2xpYworICAgbGlua3MuIFVzZSBpdCB0byBhZGQgYSBzeW1ib2xpYyBsaW5rIGVudHJ5IHRvIHRoZSBpbmRleCB3aGVuIGl0IGlzIG5vdAorICAgaW1wb3J0YW50IHRoYXQgdGhlIGZpbGUgc3lzdGVtIGVudHJ5IGlzIGEgc3ltYm9saWMgbGluaywgaS5lLiwgaW5zdGVhZAorICAgb2YgdGhlIHNlcXVlbmNlCisKKwlsbiAtcyBmb28gYmFyICYmCisJZ2l0IGFkZCBiYXIKKworICAgU29tZXRpbWVzIGl0IGlzIHBvc3NpYmxlIHRvIHNwbGl0IGEgdGVzdCBpbiBhIHBhcnQgdGhhdCBkb2VzIG5vdCBuZWVkCisgICB0aGUgc3ltYm9saWMgbGluayBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIGEgcGFydCB0aGF0IGRvZXM7IHRoZW4gb25seQorICAgdGhlIGxhdHRlciBwYXJ0IG5lZWQgYmUgcHJvdGVjdGVkIGJ5IGEgU1lNTElOS1MgcHJlcmVxdWlzaXRlIChzZWUgYmVsb3cpLgorCisgLSB0ZXN0X29pZF9pbml0CisKKyAgIFRoaXMgZnVuY3Rpb24gbG9hZHMgZmFjdHMgYW5kIHVzZWZ1bCBvYmplY3QgSURzIHJlbGF0ZWQgdG8gdGhlIGhhc2gKKyAgIGFsZ29yaXRobShzKSBpbiB1c2UgZnJvbSB0aGUgZmlsZXMgaW4gdC9vaWQtaW5mby4KKworIC0gdGVzdF9vaWRfY2FjaGUKKworICAgVGhpcyBmdW5jdGlvbiByZWFkcyBwZXItaGFzaCBhbGdvcml0aG0gaW5mb3JtYXRpb24gZnJvbSBzdGFuZGFyZAorICAgaW5wdXQgKHVzdWFsbHkgYSBoZXJlZG9jKSBpbiB0aGUgZm9ybWF0IGRlc2NyaWJlZCBpbgorICAgdC9vaWQtaW5mby9SRUFETUUuICBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdC1zcGVjaWZpYyB2YWx1ZXMsIHN1Y2ggYXMKKyAgIG9iamVjdCBJRHMsIHdoaWNoIG11c3QgdmFyeSBiYXNlZCBvbiB0aGUgaGFzaCBhbGdvcml0aG0uCisKKyAgIENlcnRhaW4gZml4ZWQgdmFsdWVzLCBzdWNoIGFzIGhhc2ggc2l6ZXMgYW5kIGNvbW1vbiBwbGFjZWhvbGRlcgorICAgb2JqZWN0IElEcywgY2FuIGJlIGxvYWRlZCB3aXRoIHRlc3Rfb2lkX2luaXQgKGRlc2NyaWJlZCBhYm92ZSkuCisKKyAtIHRlc3Rfb2lkIDxrZXk+CisKKyAgIFRoaXMgZnVuY3Rpb24gbG9va3MgdXAgYSB2YWx1ZSBmb3IgdGhlIGhhc2ggYWxnb3JpdGhtIGluIHVzZSwgYmFzZWQKKyAgIG9uIHRoZSBrZXkgZ2l2ZW4uICBUaGUgdmFsdWUgbXVzdCBoYXZlIGJlZW4gbG9hZGVkIHVzaW5nCisgICB0ZXN0X29pZF9pbml0IG9yIHRlc3Rfb2lkX2NhY2hlLiAgUHJvdmlkaW5nIGFuIHVua25vd24ga2V5IGlzIGFuCisgICBlcnJvci4KKworIC0geWVzIFs8c3RyaW5nPl0KKworICAgVGhpcyBpcyBvZnRlbiBzZWVuIGluIG1vZGVybiBVTklYIGJ1dCBzb21lIHBsYXRmb3JtcyBsYWNrIGl0LCBzbworICAgdGhlIHRlc3QgaGFybmVzcyBvdmVycmlkZXMgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIHdpdGggYQorICAgbW9yZSBsaW1pdGVkIG9uZS4gIFVzZSB0aGlzIG9ubHkgd2hlbiBmZWVkaW5nIGEgaGFuZGZ1bCBsaW5lcyBvZgorICAgb3V0cHV0IHRvIHRoZSBkb3duc3RyZWFtLS0tdW5saWtlIHRoZSByZWFsIHZlcnNpb24sIGl0IGdlbmVyYXRlcworICAgb25seSB1cCB0byA5OSBsaW5lcy4KKworIC0gdGVzdF9ib29sX2VudiA8ZW52LXZhcmlhYmxlLW5hbWU+IDxkZWZhdWx0LXZhbHVlPgorCisgICBHaXZlbiB0aGUgbmFtZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGEgYm9vbCB2YWx1ZSwKKyAgIG5vcm1hbGl6ZSBpdHMgdmFsdWUgdG8gYSAwICh0cnVlKSBvciAxIChmYWxzZSBvciBlbXB0eSBzdHJpbmcpCisgICByZXR1cm4gY29kZS4gIFJldHVybiB3aXRoIGNvZGUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZGVmYXVsdAorICAgdmFsdWUgaWYgdGhlIHZhcmlhYmxlIGlzIHVuc2V0LgorICAgQWJvcnQgdGhlIHRlc3Qgc2NyaXB0IGlmIGVpdGhlciB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIG9yIHRoZQorICAgZGVmYXVsdCBhcmUgbm90IHZhbGlkIGJvb2wgdmFsdWVzLgorCisKK1ByZXJlcXVpc2l0ZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlc2UgYXJlIHRoZSBwcmVyZXF1aXNpdGVzIHRoYXQgdGhlIHRlc3QgbGlicmFyeSBwcmVkZWZpbmVzIHdpdGgKK3Rlc3RfaGF2ZV9wcmVyZXEuCisKK1NlZSB0aGUgcHJlcmVxIGFyZ3VtZW50IHRvIHRoZSB0ZXN0XyogZnVuY3Rpb25zIGluIHRoZSAiVGVzdCBoYXJuZXNzCitsaWJyYXJ5IiBzZWN0aW9uIGFib3ZlIGFuZCB0aGUgInRlc3RfaGF2ZV9wcmVyZXEiIGZ1bmN0aW9uIGZvciBob3cgdG8KK3VzZSB0aGVzZSwgYW5kICJ0ZXN0X3NldF9wcmVyZXEiIGZvciBob3cgdG8gZGVmaW5lIHlvdXIgb3duLgorCisgLSBQWVRIT04KKworICAgR2l0IHdhc24ndCBjb21waWxlZCB3aXRoIE5PX1BZVEhPTj1ZZXNQbGVhc2UuIFdyYXAgYW55IHRlc3RzIHRoYXQKKyAgIG5lZWQgUHl0aG9uIHdpdGggdGhpcy4KKworIC0gUEVSTAorCisgICBHaXQgd2Fzbid0IGNvbXBpbGVkIHdpdGggTk9fUEVSTD1ZZXNQbGVhc2UuCisKKyAgIEV2ZW4gd2l0aG91dCB0aGUgUEVSTCBwcmVyZXF1aXNpdGUsIHRlc3RzIGNhbiBhc3N1bWUgdGhlcmUgaXMgYQorICAgdXNhYmxlIHBlcmwgaW50ZXJwcmV0ZXIgYXQgJFBFUkxfUEFUSCwgdGhvdWdoIGl0IG5lZWQgbm90IGJlCisgICBwYXJ0aWN1bGFybHkgbW9kZXJuLgorCisgLSBQT1NJWFBFUk0KKworICAgVGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgUE9TSVggc3R5bGUgcGVybWlzc2lvbiBiaXRzLgorCisgLSBCU0xBU0hQU1BFQworCisgICBCYWNrc2xhc2hlcyBpbiBwYXRoc3BlYyBhcmUgbm90IGRpcmVjdG9yeSBzZXBhcmF0b3JzLiBUaGlzIGlzIG5vdAorICAgc2V0IG9uIFdpbmRvd3MuIFNlZSA2ZmQxMTA2YSBmb3IgZGV0YWlscy4KKworIC0gRVhFQ0tFRVBTUElECisKKyAgIFRoZSBwcm9jZXNzIHJldGFpbnMgdGhlIHNhbWUgcGlkIGFjcm9zcyBleGVjKDIpLiBTZWUgZmI5YTJiZWEgZm9yCisgICBkZXRhaWxzLgorCisgLSBQSVBFCisKKyAgIFRoZSBmaWxlc3lzdGVtIHdlJ3JlIG9uIHN1cHBvcnRzIGNyZWF0aW9uIG9mIEZJRk9zIChuYW1lZCBwaXBlcykKKyAgIHZpYSBta2ZpZm8oMSkuCisKKyAtIFNZTUxJTktTCisKKyAgIFRoZSBmaWxlc3lzdGVtIHdlJ3JlIG9uIHN1cHBvcnRzIHN5bWJvbGljIGxpbmtzLiBFLmcuIGEgRkFUCisgICBmaWxlc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCB0aGVzZS4gU2VlIDcwNGEzMTQzIGZvciBkZXRhaWxzLgorCisgLSBTQU5JVFkKKworICAgVGVzdCBpcyBub3QgcnVuIGJ5IHJvb3QgdXNlciwgYW5kIGFuIGF0dGVtcHQgdG8gd3JpdGUgdG8gYW4KKyAgIHVud3JpdGFibGUgZmlsZSBpcyBleHBlY3RlZCB0byBmYWlsIGNvcnJlY3RseS4KKworIC0gUENSRQorCisgICBHaXQgd2FzIGNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgUENSRS4gV3JhcCBhbnkgdGVzdHMKKyAgIHRoYXQgdXNlIGdpdC1ncmVwIC0tcGVybC1yZWdleHAgb3IgZ2l0LWdyZXAgLVAgaW4gdGhlc2UuCisKKyAtIExJQlBDUkUxCisKKyAgIEdpdCB3YXMgY29tcGlsZWQgd2l0aCBQQ1JFIHYxIHN1cHBvcnQgdmlhCisgICBVU0VfTElCUENSRTE9WWVzUGxlYXNlLiBXcmFwIGFueSBQQ1JFIHVzaW5nIHRlc3RzIHRoYXQgZm9yIHNvbWUKKyAgIHJlYXNvbiBuZWVkIHYxIG9mIHRoZSBQQ1JFIGxpYnJhcnkgaW5zdGVhZCBvZiB2MiBpbiB0aGVzZS4KKworIC0gTElCUENSRTIKKworICAgR2l0IHdhcyBjb21waWxlZCB3aXRoIFBDUkUgdjIgc3VwcG9ydCB2aWEKKyAgIFVTRV9MSUJQQ1JFMj1ZZXNQbGVhc2UuIFdyYXAgYW55IFBDUkUgdXNpbmcgdGVzdHMgdGhhdCBmb3Igc29tZQorICAgcmVhc29uIG5lZWQgdjIgb2YgdGhlIFBDUkUgbGlicmFyeSBpbnN0ZWFkIG9mIHYxIGluIHRoZXNlLgorCisgLSBDQVNFX0lOU0VOU0lUSVZFX0ZTCisKKyAgIFRlc3QgaXMgcnVuIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbS4KKworIC0gVVRGOF9ORkRfVE9fTkZDCisKKyAgIFRlc3QgaXMgcnVuIG9uIGEgZmlsZXN5c3RlbSB3aGljaCBjb252ZXJ0cyBkZWNvbXBvc2VkIHV0Zi04IChuZmQpCisgICB0byBwcmVjb21wb3NlZCB1dGYtOCAobmZjKS4KKworIC0gUFRIUkVBRFMKKworICAgR2l0IHdhc24ndCBjb21waWxlZCB3aXRoIE5PX1BUSFJFQURTPVllc1BsZWFzZS4KKworVGlwcyBmb3IgV3JpdGluZyBUZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB3aXRoIGFueSBwcm9ncmFtbWluZyBwcm9qZWN0cywgZXhpc3RpbmcgcHJvZ3JhbXMgYXJlIHRoZSBiZXN0Citzb3VyY2Ugb2YgdGhlIGluZm9ybWF0aW9uLiAgSG93ZXZlciwgZG8gX25vdF8gZW11bGF0ZQordDAwMDAtYmFzaWMuc2ggd2hlbiB3cml0aW5nIHlvdXIgdGVzdHMuICBUaGUgdGVzdCBpcyBzcGVjaWFsIGluCit0aGF0IGl0IHRyaWVzIHRvIHZhbGlkYXRlIHRoZSB2ZXJ5IGNvcmUgb2YgR0lULiAgRm9yIGV4YW1wbGUsIGl0Citrbm93cyB0aGF0IHRoZXJlIHdpbGwgYmUgMjU2IHN1YmRpcmVjdG9yaWVzIHVuZGVyIC5naXQvb2JqZWN0cy8sCithbmQgaXQga25vd3MgdGhhdCB0aGUgb2JqZWN0IElEIG9mIGFuIGVtcHR5IHRyZWUgaXMgYSBjZXJ0YWluCis0MC1ieXRlIHN0cmluZy4gIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IGRvbmUgc28gaW4gdDAwMDAtYmFzaWMuc2gKK2JlY2F1c2UgdGhlIHRoaW5ncyB0aGUgdmVyeSBiYXNpYyBjb3JlIHRlc3QgdHJpZXMgdG8gYWNoaWV2ZSBpcwordG8gc2VydmUgYXMgYSBiYXNpcyBmb3IgcGVvcGxlIHdobyBhcmUgY2hhbmdpbmcgdGhlIEdJVCBpbnRlcm5hbAorZHJhc3RpY2FsbHkuICBGb3IgdGhlc2UgcGVvcGxlLCBhZnRlciBtYWtpbmcgY2VydGFpbiBjaGFuZ2VzLAorbm90IHNlZWluZyBmYWlsdXJlcyBmcm9tIHRoZSBiYXNpYyB0ZXN0IF9pc18gYSBmYWlsdXJlLiAgQW5kCitzdWNoIGRyYXN0aWMgY2hhbmdlcyB0byB0aGUgY29yZSBHSVQgdGhhdCBldmVuIGNoYW5nZXMgdGhlc2UKK290aGVyd2lzZSBzdXBwb3NlZGx5IHN0YWJsZSBvYmplY3QgSURzIHNob3VsZCBiZSBhY2NvbXBhbmllZCBieQorYW4gdXBkYXRlIHRvIHQwMDAwLWJhc2ljLnNoLgorCitIb3dldmVyLCBvdGhlciB0ZXN0cyB0aGF0IHNpbXBseSByZWx5IG9uIGJhc2ljIHBhcnRzIG9mIHRoZSBjb3JlCitHSVQgd29ya2luZyBwcm9wZXJseSBzaG91bGQgbm90IGhhdmUgdGhhdCBsZXZlbCBvZiBpbnRpbWF0ZQora25vd2xlZGdlIG9mIHRoZSBjb3JlIEdJVCBpbnRlcm5hbHMuICBJZiBhbGwgdGhlIHRlc3Qgc2NyaXB0cworaGFyZGNvZGVkIHRoZSBvYmplY3QgSURzIGxpa2UgdDAwMDAtYmFzaWMuc2ggZG9lcywgdGhhdCBkZWZlYXRzCit0aGUgcHVycG9zZSBvZiB0MDAwMC1iYXNpYy5zaCwgd2hpY2ggaXMgdG8gaXNvbGF0ZSB0aGF0IGxldmVsIG9mCit2YWxpZGF0aW9uIGluIG9uZSBwbGFjZS4gIFlvdXIgdGVzdCBhbHNvIGVuZHMgdXAgbmVlZGluZwordXBkYXRpbmcgd2hlbiBzdWNoIGEgY2hhbmdlIHRvIHRoZSBpbnRlcm5hbCBoYXBwZW5zLCBzbyBkbyBfbm90XworZG8gaXQgYW5kIGxlYXZlIHRoZSBsb3cgbGV2ZWwgb2YgdmFsaWRhdGlvbiB0byB0MDAwMC1iYXNpYy5zaC4KKworVGVzdCBjb3ZlcmFnZQorLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHVzZSB0aGUgY292ZXJhZ2UgdGVzdHMgdG8gZmluZCBjb2RlIHBhdGhzIHRoYXQgYXJlIG5vdCBiZWluZwordXNlZCBvciBwcm9wZXJseSBleGVyY2lzZWQgeWV0LgorCitUbyBkbyB0aGF0LCBydW4gdGhlIGNvdmVyYWdlIHRhcmdldCBhdCB0aGUgdG9wLWxldmVsIChub3QgaW4gdGhlIHQvCitkaXJlY3RvcnkpOgorCisgICAgbWFrZSBjb3ZlcmFnZQorCitUaGF0J2xsIGNvbXBpbGUgR2l0IHdpdGggR0NDJ3MgY292ZXJhZ2UgYXJndW1lbnRzLCBhbmQgZ2VuZXJhdGUgYSB0ZXN0CityZXBvcnQgd2l0aCBnY292IGFmdGVyIHRoZSB0ZXN0cyBmaW5pc2guIFJ1bm5pbmcgdGhlIGNvdmVyYWdlIHRlc3RzCitjYW4gdGFrZSBhIHdoaWxlLCBzaW5jZSBydW5uaW5nIHRoZSB0ZXN0cyBpbiBwYXJhbGxlbCBpcyBpbmNvbXBhdGlibGUKK3dpdGggR0NDJ3MgY292ZXJhZ2UgbW9kZS4KKworQWZ0ZXIgdGhlIHRlc3RzIGhhdmUgcnVuIHlvdSBjYW4gZ2VuZXJhdGUgYSBsaXN0IG9mIHVudGVzdGVkCitmdW5jdGlvbnM6CisKKyAgICBtYWtlIGNvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucworCitZb3UgY2FuIGFsc28gZ2VuZXJhdGUgYSBkZXRhaWxlZCBwZXItZmlsZSBIVE1MIHJlcG9ydCB1c2luZyB0aGUKK0RldmVsOjpDb3ZlciBtb2R1bGUuIFRvIGluc3RhbGwgaXQgZG86CisKKyAgICMgT24gRGViaWFuIG9yIFVidW50dToKKyAgIHN1ZG8gYXB0aXR1ZGUgaW5zdGFsbCBsaWJkZXZlbC1jb3Zlci1wZXJsCisKKyAgICMgRnJvbSB0aGUgQ1BBTiB3aXRoIGNwYW5taW51cworICAgY3VybCAtTCBodHRwOi8vY3Bhbm1pbi51cyB8IHBlcmwgLSAtLXN1ZG8gLS1zZWxmLXVwZ3JhZGUKKyAgIGNwYW5tIC0tc3VkbyBEZXZlbDo6Q292ZXIKKworVGhlbiwgYXQgdGhlIHRvcC1sZXZlbDoKKworICAgIG1ha2UgY292ZXJfZGJfaHRtbAorCitUaGF0J2xsIGdlbmVyYXRlIGEgZGV0YWlsZWQgY292ZXIgcmVwb3J0IGluIHRoZSAiY292ZXJfZGJfaHRtbCIKK2RpcmVjdG9yeSwgd2hpY2ggeW91IGNhbiB0aGVuIGNvcHkgdG8gYSB3ZWJzZXJ2ZXIsIG9yIGluc3BlY3QgbG9jYWxseQoraW4gYSBicm93c2VyLgpkaWZmIC0tZ2l0IGEvdC9hZ2dyZWdhdGUtcmVzdWx0cy5zaCBiL3QvYWdncmVnYXRlLXJlc3VsdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzkxM2UyMAotLS0gL2Rldi9udWxsCisrKyBiL3QvYWdncmVnYXRlLXJlc3VsdHMuc2gKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisKK2ZhaWxlZF90ZXN0cz0KK2ZpeGVkPTAKK3N1Y2Nlc3M9MAorZmFpbGVkPTAKK2Jyb2tlbj0wCit0b3RhbD0wCisKK3doaWxlIHJlYWQgZmlsZQorZG8KKwl3aGlsZSByZWFkIHR5cGUgdmFsdWUKKwlkbworCQljYXNlICR0eXBlIGluCisJCScnKQorCQkJY29udGludWUgOzsKKwkJZml4ZWQpCisJCQlmaXhlZD0kKCgkZml4ZWQgKyAkdmFsdWUpKSA7OworCQlzdWNjZXNzKQorCQkJc3VjY2Vzcz0kKCgkc3VjY2VzcyArICR2YWx1ZSkpIDs7CisJCWZhaWxlZCkKKwkJCWZhaWxlZD0kKCgkZmFpbGVkICsgJHZhbHVlKSkKKwkJCWlmIHRlc3QgJHZhbHVlICE9IDAKKwkJCXRoZW4KKwkJCQl0ZXN0bnVtPSQoZXhwciAiJGZpbGUiIDogJ3Rlc3QtcmVzdWx0cy9cKHRbMC05XSpcKS0nKQorCQkJCWZhaWxlZF90ZXN0cz0iJGZhaWxlZF90ZXN0cyAkdGVzdG51bSIKKwkJCWZpCisJCQk7OworCQlicm9rZW4pCisJCQlicm9rZW49JCgoJGJyb2tlbiArICR2YWx1ZSkpIDs7CisJCXRvdGFsKQorCQkJdG90YWw9JCgoJHRvdGFsICsgJHZhbHVlKSkgOzsKKwkJZXNhYworCWRvbmUgPCIkZmlsZSIKK2RvbmUKKworaWYgdGVzdCAtbiAiJGZhaWxlZF90ZXN0cyIKK3RoZW4KKwlwcmludGYgIlxuZmFpbGVkIHRlc3Qocyk6JGZhaWxlZF90ZXN0c1xuXG4iCitmaQorCitwcmludGYgIiUtOHMlZFxuIiBmaXhlZCAkZml4ZWQKK3ByaW50ZiAiJS04cyVkXG4iIHN1Y2Nlc3MgJHN1Y2Nlc3MKK3ByaW50ZiAiJS04cyVkXG4iIGZhaWxlZCAkZmFpbGVkCitwcmludGYgIiUtOHMlZFxuIiBicm9rZW4gJGJyb2tlbgorcHJpbnRmICIlLThzJWRcbiIgdG90YWwgJHRvdGFsCmRpZmYgLS1naXQgYS90L2Fubm90YXRlLXRlc3RzLnNoIGIvdC9hbm5vdGF0ZS10ZXN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTMzYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9hbm5vdGF0ZS10ZXN0cy5zaApAQCAtMCwwICsxLDU4NCBAQAorIyBUaGlzIGZpbGUgaXNuJ3QgdXNlZCBhcyBhIHRlc3Qgc2NyaXB0IGRpcmVjdGx5LCBpbnN0ZWFkIGl0IGlzCisjIHNvdXJjZWQgZnJvbSB0ODAwMS1hbm5vdGF0ZS5zaCBhbmQgdDgwMDItYmxhbWUuc2guCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgTUlOR1cKK3RoZW4KKyAgc2FuaXRpemVfTCAoKSB7CisJZWNobyAiJDEiIHwgc2VkICdzWFwoXi1MXHwsXClcXlw/L1gmXFw7KlhnJworICB9CitlbHNlCisgIHNhbml0aXplX0wgKCkgeworCWVjaG8gIiQxIgorICB9CitmaQorCitjaGVja19jb3VudCAoKSB7CisJaGVhZD0gJiYKKwlmaWxlPSdmaWxlJyAmJgorCW9wdGlvbnM9ICYmCisJd2hpbGUgOgorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktaCkgaGVhZD0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKKwkJLWYpIGZpbGU9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CisJCS1MKikgb3B0aW9ucz0iJG9wdGlvbnMgJChzYW5pdGl6ZV9MICIkMSIpIjsgc2hpZnQgOzsKKwkJLSopIG9wdGlvbnM9IiRvcHRpb25zICQxIjsgc2hpZnQgOzsKKwkJKikgYnJlYWsgOzsKKwkJZXNhYworCWRvbmUgJiYKKwllY2hvICIkUFJPRyAkb3B0aW9ucyAkZmlsZSAkaGVhZCIgPiY0ICYmCisJJFBST0cgJG9wdGlvbnMgJGZpbGUgJGhlYWQgPmFjdHVhbCAmJgorCXBlcmwgLWUgJworCQlteSAlZXhwZWN0ID0gKEBBUkdWKTsKKwkJbXkgJWNvdW50ID0gbWFwIHsgJF8gPT4gMCB9IGtleXMgJWV4cGVjdDsKKwkJd2hpbGUgKDxTVERJTj4pIHsKKwkJCWlmICgvXlswLTlhLWZdK1x0XCgoW15cdF0rKVx0LykgeworCQkJCW15ICRhdXRob3IgPSAkMTsKKwkJCQlmb3IgKCRhdXRob3IpIHsgcy9eXHMqLy87IHMvXHMqJC8vOyB9CisJCQkJJGNvdW50eyRhdXRob3J9Kys7CisJCQl9CisJCX0KKwkJbXkgJGJhZCA9IDA7CisJCXdoaWxlIChteSAoJGF1dGhvciwgJGNvdW50KSA9IGVhY2ggJWNvdW50KSB7CisJCQlteSAkb2s7CisJCQlteSAkdmFsdWUgPSAwOworCQkJJHZhbHVlID0gJGV4cGVjdHskYXV0aG9yfSBpZiBkZWZpbmVkICRleHBlY3R7JGF1dGhvcn07CisJCQlpZiAoJHZhbHVlICE9ICRjb3VudCkgeworCQkJCSRiYWQgPSAxOworCQkJCSRvayA9ICJiYWQiOworCQkJfQorCQkJZWxzZSB7CisJCQkJJG9rID0gImdvb2QiOworCQkJfQorCQkJcHJpbnQgU1RERVJSICJBdXRob3IgJGF1dGhvciAoZXhwZWN0ZWQgJHZhbHVlLCBhdHRyaWJ1dGVkICRjb3VudCkgJG9rXG4iOworCQl9CisJCWV4aXQoJGJhZCk7CisJJyAiJEAiIDxhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgQSBsaW5lcycgJworCWVjaG8gIjFBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSIgPmZpbGUgJiYKKwllY2hvICJsYXp5IGRvZyIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJBIiBHSVRfQVVUSE9SX0VNQUlMPSJBQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiSW5pdGlhbC4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIDEgYXV0aG9yJyAnCisJY2hlY2tfY291bnQgQSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGluIGEgYmFyZSByZXBvIHdpdGhvdXQgc3RhcnRpbmcgY29tbWl0JyAnCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUuZ2l0ICYmCisJKAorCQljZCBiYXJlLmdpdCAmJgorCQljaGVja19jb3VudCBBIDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGJ5IHRhZyBvYmplY3RzJyAnCisJZ2l0IHRhZyAtbSAidGVzdCB0YWciIHRlc3RUYWcgJiYKKwlnaXQgdGFnIC1tICJ0ZXN0IHRhZyAjMiIgdGVzdFRhZzIgdGVzdFRhZyAmJgorCWNoZWNrX2NvdW50IC1oIHRlc3RUYWcgQSAyICYmCisJY2hlY2tfY291bnQgLWggdGVzdFRhZzIgQSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIEIgbGluZXMnICcKKwllY2hvICIyQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUiID4+ZmlsZSAmJgorCWVjaG8gImxhenkgZG9nIiA+PmZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkIiIEdJVF9BVVRIT1JfRU1BSUw9IkJAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJTZWNvbmQuIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAyIGF1dGhvcnMnICcKKwljaGVja19jb3VudCBBIDIgQiAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIEIxIGxpbmVzIChicmFuY2gxKScgJworCWdpdCBjaGVja291dCAtYiBicmFuY2gxIG1hc3RlciAmJgorCWVjaG8gIjNBIHNsb3cgZ3JlZW4gZm94IGp1bXBzIGludG8gdGhlIiA+PmZpbGUgJiYKKwllY2hvICJ3ZWxsLiIgPj5maWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJCMSIgR0lUX0FVVEhPUl9FTUFJTD0iQjFAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJCcmFuY2gxLTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIDIgYXV0aG9ycyArIDEgYnJhbmNoMSBhdXRob3InICcKKwljaGVja19jb3VudCBBIDIgQiAyIEIxIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgQjIgbGluZXMgKGJyYW5jaDIpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDIgbWFzdGVyICYmCisJc2VkIC1lICJzLzJBIHF1aWNrIGJyb3duLzRBIHF1aWNrIGJyb3duIGxhenkgZG9nLyIgPGZpbGUgPmZpbGUubmV3ICYmCisJbXYgZmlsZS5uZXcgZmlsZSAmJgorCUdJVF9BVVRIT1JfTkFNRT0iQjIiIEdJVF9BVVRIT1JfRU1BSUw9IkIyQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiQnJhbmNoMi0xIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAyIGF1dGhvcnMgKyAxIGJyYW5jaDIgYXV0aG9yJyAnCisJY2hlY2tfY291bnQgQSAyIEIgMSBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGJyYW5jaDEgJiBicmFuY2gyJyAnCisJZ2l0IG1lcmdlIGJyYW5jaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgMiBhdXRob3JzICsgMiBtZXJnZWQtaW4gYXV0aG9ycycgJworCWNoZWNrX2NvdW50IEEgMiBCIDEgQjEgMiBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC0tZmlyc3QtcGFyZW50IGJsYW1lcyBtZXJnZSBmb3IgYnJhbmNoMScgJworCWNoZWNrX2NvdW50IC0tZmlyc3QtcGFyZW50IEEgMiBCIDEgIkEgVSBUaG9yIiAyIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgYW5jZXN0b3InICcKKwljaGVja19jb3VudCAtaCBtYXN0ZXIgQSAyIEIgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBncmVhdC1hbmNlc3RvcicgJworCWNoZWNrX2NvdW50IC1oIG1hc3Rlcl4gQSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV2aWwgbWVyZ2UnICcKKwllY2hvICJldmlsIG1lcmdlLiIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtLWFtZW5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGV2aWwgbWVyZ2UnICcKKwljaGVja19jb3VudCBBIDIgQiAxIEIxIDIgQjIgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgaHVnZSBncmFmdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IGJyYW5jaDIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2luZm8vZ3JhZnRzIiAmJgorCWdyYWZ0PSAmJgorCWZvciBpIGluIDAgMSAyCisJZG8KKwkJZm9yIGogaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuICIkaSRqIiAmJgorCQkJcHJpbnRmICIlc1xuIiAiJGkiICIkaiIgPmZpbGUgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJR0lUX0FVVEhPUl9OQU1FPSRpJGogR0lUX0FVVEhPUl9FTUFJTD0kaSRqQHRlc3QuZ2l0IFwKKwkJCWdpdCBjb21taXQgLWEgLW0gIiRpJGoiICYmCisJCQljb21taXQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJCQlncmFmdD0iJGdyYWZ0JGNvbW1pdCAiCisJCWRvbmUKKwlkb25lICYmCisJcHJpbnRmICIlcyAiICRncmFmdCA+LmdpdC9pbmZvL2dyYWZ0cyAmJgorCWNoZWNrX2NvdW50IC1oIDAwIDAxIDEgMTAgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBpbmNvbXBsZXRlIGxpbmUnICcKKwllY2hvICJpbmNvbXBsZXRlIiB8IHRyIC1kICJcXDAxMiIgPj5maWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJDIiBHSVRfQVVUSE9SX0VNQUlMPSJDQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiSW5jb21wbGV0ZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgaW5jb21wbGV0ZSBsaW5lJyAnCisJY2hlY2tfY291bnQgQSAyIEIgMSBCMSAyIEIyIDEgIkEgVSBUaG9yIiAxIEMgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBlZGl0cycgJworCW12IGZpbGUgZmlsZS5vcmlnICYmCisJeworCQljYXQgZmlsZS5vcmlnICYmCisJCWVjaG8KKwl9IHwgc2VkIC1lICJzL14zQS85OS8iIC1lICIvXjFBL2QiIC1lICIvXmluY29tcGxldGUvZCIgPmZpbGUgJiYKKwllY2hvICJpbmNvbXBsZXRlIiB8IHRyIC1kICJcXDAxMiIgPj5maWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJEIiBHSVRfQVVUSE9SX0VNQUlMPSJEQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiZWRpdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZWRpdHMnICcKKwljaGVja19jb3VudCBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvYmZ1c2NhdGVkIGVtYWlsJyAnCisJZWNobyAiTm8gcm9ib3RzIGFsbG93ZWQiID5maWxlLm5ldyAmJgorCWNhdCBmaWxlID4+ZmlsZS5uZXcgJiYKKwltdiBmaWxlLm5ldyBmaWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJFIiBHSVRfQVVUSE9SX0VNQUlMPSJFIGF0IHRlc3QgZG90IGdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIm5vcm9ib3RzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBvYmZ1c2NhdGVkIGVtYWlsJyAnCisJY2hlY2tfY291bnQgQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDEgKGFsbCknICcKKwljaGVja19jb3VudCAtTDEgQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MICwgKGFsbCknICcKKwljaGVja19jb3VudCAtTCwgQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFggKFggdG8gZW5kKScgJworCWNoZWNrX2NvdW50IC1MNSBCMSAxIEMgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsIChYIHRvIGVuZCknICcKKwljaGVja19jb3VudCAtTDUsIEIxIDEgQyAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLFkgKHVwIHRvIFkpJyAnCisJY2hlY2tfY291bnQgLUwsMyBBIDEgQjIgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCxYJyAnCisJY2hlY2tfY291bnQgLUwzLDMgQjIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLFknICcKKwljaGVja19jb3VudCAtTDMsNiBCIDEgQjEgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBZLFggKHVuZG9jdW1lbnRlZCknICcKKwljaGVja19jb3VudCAtTDYsMyBCIDEgQjEgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAtWCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MLTEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAwJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwwIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLDAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCwwIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLCswJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwsKzAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLCswJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLCswIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwrMScgJworCWNoZWNrX2NvdW50IC1MMywrMSBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsK04nICcKKwljaGVja19jb3VudCAtTDMsKzQgQiAxIEIxIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLC0wJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwsLTAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLC0wJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLC0wIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwtMScgJworCWNoZWNrX2NvdW50IC1MMywtMSBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsLU4nICcKKwljaGVja19jb3VudCAtTDYsLTQgQiAxIEIxIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyAoUkUgdG8gZW5kKScgJworCWNoZWNrX2NvdW50IC1ML2V2aWwvIEMgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLywvUkUyLycgJworCWNoZWNrX2NvdW50IC1ML3JvYm90LywvZ3JlZW4vIEEgMSBCIDEgQjIgMSBEIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsL1JFLycgJworCWNoZWNrX2NvdW50IC1MNSwvZXZpbC8gQjEgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8sWScgJworCWNoZWNrX2NvdW50IC1MLzk5Lyw3IEIxIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvLCtOJyAnCisJY2hlY2tfY291bnQgLUwvOTkvLCszIEIxIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvLC1OJyAnCisJY2hlY2tfY291bnQgLUwvOTkvLC0zIEIgMSBCMiAxIEQgMQorJworCisjICdmaWxlJyBlbmRzIHdpdGggYW4gaW5jb21wbGV0ZSBsaW5lLCBzbyAnd2MnIHJlcG9ydHMgb25lIGZld2VyIGxpbmVzIHRoYW4KKyMgZ2l0LWJsYW1lIHNlZXMsIGhlbmNlIHRoZSBsYXN0IGxpbmUgaXMgYWN0dWFsbHkgJCh3Yy4uLikrMS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFggKFggPT0gbmxpbmVzKScgJworCW49JChleHByICQod2MgLWwgPGZpbGUpICsgMSkgJiYKKwljaGVja19jb3VudCAtTCRuIEMgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYIChYID09IG5saW5lcyArIDEpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8ZmlsZSkgKyAyKSAmJgorCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MJG4gZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYIChYID4gbmxpbmVzKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMTIzNDUgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsWSAoWSA9PSBubGluZXMpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8ZmlsZSkgKyAxKSAmJgorCWNoZWNrX2NvdW50IC1MLCRuIEEgMSBCIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMSBDIDEgRCAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsWSAoWSA9PSBubGluZXMgKyAxKScgJworCW49JChleHByICQod2MgLWwgPGZpbGUpICsgMikgJiYKKwljaGVja19jb3VudCAtTCwkbiBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLFkgKFkgPiBubGluZXMpJyAnCisJY2hlY2tfY291bnQgLUwsMTIzNDUgQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIG11bHRpcGxlIChkaXNqb2ludCknICcKKwljaGVja19jb3VudCAtTDIsMyAtTDYsNyBBIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBtdWx0aXBsZSAoZGlzam9pbnQ6IHVub3JkZXJlZCknICcKKwljaGVja19jb3VudCAtTDYsNyAtTDIsMyBBIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBtdWx0aXBsZSAoYWRqYWNlbnQpJyAnCisJY2hlY2tfY291bnQgLUwyLDMgLUw0LDUgQSAxIEIgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBtdWx0aXBsZSAoYWRqYWNlbnQ6IHVub3JkZXJlZCknICcKKwljaGVja19jb3VudCAtTDQsNSAtTDIsMyBBIDEgQiAxIEIyIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIG11bHRpcGxlIChvdmVybGFwcGluZyknICcKKwljaGVja19jb3VudCAtTDIsNCAtTDMsNSBBIDEgQiAxIEIyIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIG11bHRpcGxlIChvdmVybGFwcGluZzogdW5vcmRlcmVkKScgJworCWNoZWNrX2NvdW50IC1MMyw1IC1MMiw0IEEgMSBCIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgbXVsdGlwbGUgKHN1cGVyc2V0L3N1YnNldCknICcKKwljaGVja19jb3VudCAtTDIsOCAtTDMsNSBBIDEgQiAxIEIxIDEgQjIgMSBDIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBtdWx0aXBsZSAoc3VwZXJzZXQvc3Vic2V0OiB1bm9yZGVyZWQpJyAnCisJY2hlY2tfY291bnQgLUwzLDUgLUwyLDggQSAxIEIgMSBCMSAxIEIyIDEgQyAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyAocmVsYXRpdmUpJyAnCisJY2hlY2tfY291bnQgLUwzLDMgLUwvZm94LyBCMSAxIEIyIDEgQyAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyAocmVsYXRpdmU6IG5vIHByZWNlZGluZyByYW5nZSknICcKKwljaGVja19jb3VudCAtTC9kb2cvIEEgMSBCIDEgQjEgMSBCMiAxIEMgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8gKHJlbGF0aXZlOiBhZGphY2VudCknICcKKwljaGVja19jb3VudCAtTDEsMSAtTC9kb2cvLCsxIEEgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyAocmVsYXRpdmU6IG5vdCBmb3VuZCknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDQsNCAtTC9kb2cvIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyAocmVsYXRpdmU6IGVuZC1vZi1maWxlKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MLCAtTC8kLyBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIF4vUkUvIChhYnNvbHV0ZSknICcKKwljaGVja19jb3VudCAtTDMsMyAtTF4vZG9nLywrMiBBIDEgQjIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBeL1JFLyAoYWJzb2x1dGU6IG5vIHByZWNlZGluZyByYW5nZSknICcKKwljaGVja19jb3VudCAtTF4vZG9nLywrMiBBIDEgQjIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBeL1JFLyAoYWJzb2x1dGU6IG5vdCBmb3VuZCknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDQsNCAtTF4vdGFtYm91cmluZS8gZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBeL1JFLyAoYWJzb2x1dGU6IGVuZC1vZi1maWxlKScgJworCW49JChleHByICQod2MgLWwgPGZpbGUpICsgMSkgJiYKKwljaGVja19jb3VudCAtTCRuIC1MXi8kLywrMiBBIDEgQyAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtTCA6cmVnZXgnICcKKwl0ciBRICJcXHQiID5oZWxsby5jIDw8LVxFT0YgJiYKKwlpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQorCXsKKwlRcHV0cygiaGVsbG8iKTsKKwl9CisJRU9GCisJZ2l0IGFkZCBoZWxsby5jICYmCisJR0lUX0FVVEhPUl9OQU1FPSJGIiBHSVRfQVVUSE9SX0VNQUlMPSJGQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtbSAiaGVsbG8iICYmCisKKwltdiBoZWxsby5jIGhlbGxvLm9yaWcgJiYKKwlzZWQgLWUgIi99LyB7eDsgcy8kL1FwdXRzKFwiZ29vZGJ5ZVwiKTsvOyBHO30iIDxoZWxsby5vcmlnIHwKKwl0ciBRICJcXHQiID5oZWxsby5jICYmCisJR0lUX0FVVEhPUl9OQU1FPSJHIiBHSVRfQVVUSE9SX0VNQUlMPSJHQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAiZ29vZGJ5ZSIgJiYKKworCW12IGhlbGxvLmMgaGVsbG8ub3JpZyAmJgorCWVjaG8gIiNpbmNsdWRlIDxzdGRpby5oPiIgPmhlbGxvLmMgJiYKKwljYXQgaGVsbG8ub3JpZyA+PmhlbGxvLmMgJiYKKwl0ciBRICJcXHQiID4+aGVsbG8uYyA8PC1cRU9GICYmCisJdm9pZCBtYWlsKCkKKwl7CisJUXB1dHMoIm1haWwiKTsKKwl9CisJRU9GCisJR0lUX0FVVEhPUl9OQU1FPSJIIiBHSVRfQVVUSE9SX0VNQUlMPSJIQHRlc3QuZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAibWFpbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgOmxpdGVyYWwnICcKKwljaGVja19jb3VudCAtZiBoZWxsby5jIC1MOm1haW4gRiA0IEcgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6cmVnZXgnICcKKwljaGVja19jb3VudCAtZiBoZWxsby5jICItTDptW2Etel1bYS16XWwiIEggNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6bm9tYXRjaCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MOm5vbWF0Y2ggaGVsbG8uYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6UkUgKHJlbGF0aXZlKScgJworCWNoZWNrX2NvdW50IC1mIGhlbGxvLmMgLUwzLDMgLUw6bWEuLiBGIDEgSCA0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDpSRSAocmVsYXRpdmU6IG5vIHByZWNlZGluZyByYW5nZSknICcKKwljaGVja19jb3VudCAtZiBoZWxsby5jIC1MOm1hLi4gRiA0IEcgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6UkUgKHJlbGF0aXZlOiBub3QgZm91bmQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwzLDMgLUw6dGFtYm91cmluZSBoZWxsby5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDpSRSAocmVsYXRpdmU6IGVuZC1vZi1maWxlKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MLCAtTDptYWluIGhlbGxvLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgXjpSRSAoYWJzb2x1dGUpJyAnCisJY2hlY2tfY291bnQgLWYgaGVsbG8uYyAtTDMsMyAtTF46bWEuLiBGIDQgRyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIF46UkUgKGFic29sdXRlOiBubyBwcmVjZWRpbmcgcmFuZ2UpJyAnCisJY2hlY2tfY291bnQgLWYgaGVsbG8uYyAtTF46bWEuLiBGIDQgRyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIF46UkUgKGFic29sdXRlOiBub3QgZm91bmQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUw0LDQgLUxeOnRhbWJvdXJpbmUgaGVsbG8uYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBeOlJFIChhYnNvbHV0ZTogZW5kLW9mLWZpbGUpJyAnCisJbj0kKHByaW50ZiAiJWQiICQod2MgLWwgPGhlbGxvLmMpKSAmJgorCWNoZWNrX2NvdW50IC1mIGhlbGxvLmMgLUwkbiAtTF46bWEuLiBGIDQgRyAxIEggMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBpbmNyZW1lbnRhbCcgJworCSgKKwlHSVRfQVVUSE9SX05BTUU9SSAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgJiYKKwlHSVRfQVVUSE9SX0VNQUlMPUlAdGVzdC5naXQgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTCAmJgorCT5pbmNyZW1lbnRhbCAmJgorCWdpdCBhZGQgaW5jcmVtZW50YWwgJiYKKwlnaXQgY29tbWl0IC1tICJzdGVwIDAiICYmCisJcHJpbnRmICJwYXJ0aWFsIiA+PmluY3JlbWVudGFsICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic3RlcCAwLjUiICYmCisJZWNobyA+PmluY3JlbWVudGFsICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic3RlcCAxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZW1wdHknICcKKwljaGVja19jb3VudCAtaCBIRUFEXl4gLWYgaW5jcmVtZW50YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMCBlbXB0eScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMCBpbmNyZW1lbnRhbCBIRUFEXl4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMSBlbXB0eScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMSBpbmNyZW1lbnRhbCBIRUFEXl4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMiBlbXB0eScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMiBpbmNyZW1lbnRhbCBIRUFEXl4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgaGFsZicgJworCWNoZWNrX2NvdW50IC1oIEhFQUReIC1mIGluY3JlbWVudGFsIEkgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAwIGhhbGYnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDAgaW5jcmVtZW50YWwgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMSBoYWxmJyAnCisJY2hlY2tfY291bnQgLWggSEVBRF4gLWYgaW5jcmVtZW50YWwgLUwxIEkgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAyIGhhbGYnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDIgaW5jcmVtZW50YWwgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMyBoYWxmJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwzIGluY3JlbWVudGFsIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGZ1bGwnICcKKwljaGVja19jb3VudCAtZiBpbmNyZW1lbnRhbCBJIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMCBmdWxsJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwwIGluY3JlbWVudGFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDEgZnVsbCcgJworCWNoZWNrX2NvdW50IC1mIGluY3JlbWVudGFsIC1MMSBJIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMiBmdWxsJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwyIGluY3JlbWVudGFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDMgZnVsbCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMyBpbmNyZW1lbnRhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwrJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLCsgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLC0nICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsLSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFggKG5vbi1udW1lcmljIFgpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUxYIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCxZIChub24tbnVtZXJpYyBZKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMSxZIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwrTiAobm9uLW51bWVyaWMgTiknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsK04gZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLC1OIChub24tbnVtZXJpYyBOKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMSwtTiBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MICxeL1JFLycgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMSxeLzk5LyBmaWxlCisnCmRpZmYgLS1naXQgYS90L2NoYWlubGludC5zZWQgYi90L2NoYWlubGludC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkZjQwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50LnNlZApAQCAtMCwwICsxLDM2OSBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZXRlY3QgYnJva2VuICYmLWNoYWlucyBpbiB0ZXN0cy4KKyMKKyMgQXQgcHJlc2VudCwgb25seSAmJi1jaGFpbnMgaW4gc3Vic2hlbGxzIGFyZSBleGFtaW5lZCBieSB0aGlzIGxpbnRlcjsKKyMgdG9wLWxldmVsICYmLWNoYWlucyBhcmUgaW5zdGVhZCBjaGVja2VkIGRpcmVjdGx5IGJ5IHRoZSB0ZXN0IGZyYW1ld29yay4gTGlrZQorIyB0aGUgdG9wLWxldmVsICYmLWNoYWluIGxpbnRlciwgdGhlIHN1YnNoZWxsIGxpbnRlciAoaW50ZW50aW9uYWxseSkgZG9lcyBub3QKKyMgY2hlY2sgJiYtY2hhaW5zIHdpdGhpbiB7Li4ufSBibG9ja3MuCisjCisjIENoZWNraW5nIGZvciAmJi1jaGFpbiBicmVha2FnZSBpcyBkb25lIGxpbmUtYnktbGluZSBieSBwdXJlIHRleHR1YWwKKyMgaW5zcGVjdGlvbi4KKyMKKyMgSW5jb21wbGV0ZSBsaW5lcyAodGhvc2UgZW5kaW5nIHdpdGggIlwiKSBhcmUgc3RpdGNoZWQgdG9nZXRoZXIgd2l0aCBmb2xsb3dpbmcKKyMgbGluZXMgdG8gc2ltcGxpZnkgcHJvY2Vzc2luZywgcGFydGljdWxhcmx5IG9mICJvbmUtbGluZXIiIHN0YXRlbWVudHMuCisjIFRvcC1sZXZlbCBoZXJlLWRvY3MgYXJlIHN3YWxsb3dlZCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgd2l0aGluIHRoZQorIyBoZXJlLWRvYyBib2R5LCBhbHRob3VnaCB0aGUgc3RhdGVtZW50IHRvIHdoaWNoIHRoZSBoZXJlLWRvYyBpcyBhdHRhY2hlZCBpcworIyByZXRhaW5lZC4KKyMKKyMgSGV1cmlzdGljcyBhcmUgdXNlZCB0byBkZXRlY3QgZW5kLW9mLXN1YnNoZWxsIHdoZW4gdGhlIGNsb3NpbmcgIikiIGlzIGN1ZGRsZWQKKyMgd2l0aCB0aGUgZmluYWwgc3Vic2hlbGwgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmU6CisjCisjICAgIChjZCBmb28gJiYKKyMgICAgICAgIGJhcikKKyMKKyMgaW4gb3JkZXIgdG8gYXZvaWQgbWlzaW50ZXJwcmV0aW5nIHRoZSAiKSIgaW4gY29uc3RydWN0cyBzdWNoIGFzICJ4PSQoLi4uKSIKKyMgYW5kICJjYXNlICR4IGluICopIiBhcyBlbmRpbmcgdGhlIHN1YnNoZWxsLgorIworIyBMaW5lcyBtaXNzaW5nIGEgZmluYWwgIiYmIiBhcmUgZmxhZ2dlZCB3aXRoICI/IUFNUD8hIiwgYW5kIGxpbmVzIHdoaWNoIGNoYWluCisjIGNvbW1hbmRzIHdpdGggIjsiIGludGVybmFsbHkgcmF0aGVyIHRoYW4gIiYmIiBhcmUgZmxhZ2dlZCAiPyFTRU1JPyEiLiBBIGxpbmUKKyMgbWF5IGJlIGZsYWdnZWQgZm9yIGJvdGggdmlvbGF0aW9ucy4KKyMKKyMgRGV0ZWN0aW9uIG9mIGEgbWlzc2luZyAmJi1saW5rIGluIGEgbXVsdGktbGluZSBzdWJzaGVsbCBpcyBjb21wbGljYXRlZCBieSB0aGUKKyMgZmFjdCB0aGF0IHRoZSBsYXN0IHN0YXRlbWVudCBiZWZvcmUgdGhlIGNsb3NpbmcgIikiIG11c3Qgbm90IGVuZCB3aXRoICImJiIuCisjIFNpbmNlIHByb2Nlc3NpbmcgaXMgbGluZS1ieS1saW5lLCBpdCBpcyBub3Qga25vd24gd2hldGhlciBhIG1pc3NpbmcgIiYmIiBpcworIyBsZWdpdGltYXRlIG9yIG5vdCB1bnRpbCB0aGUgX25leHRfIGxpbmUgaXMgc2Vlbi4gVG8gYWNjb21tb2RhdGUgdGhpcywgd2l0aGluCisjIG11bHRpLWxpbmUgc3Vic2hlbGxzLCBlYWNoIGxpbmUgaXMgc3RvcmVkIGluIHNlZCdzICJob2xkIiBhcmVhIHVudGlsIGFmdGVyCisjIHRoZSBuZXh0IGxpbmUgaXMgc2VlbiBhbmQgcHJvY2Vzc2VkLiBJZiB0aGUgbmV4dCBsaW5lIGlzIGEgc3RhbmQtYWxvbmUgIikiLAorIyB0aGVuIGEgbWlzc2luZyAiJiYiIG9uIHRoZSBwcmV2aW91cyBsaW5lIGlzIGxlZ2l0aW1hdGU7IG90aGVyd2lzZSBhIG1pc3NpbmcKKyMgIiYmIiBpcyBhIGJyZWFrIGluIHRoZSAmJi1jaGFpbi4KKyMKKyMgICAgKAorIyAgICAgICAgIGNkIGZvbyAmJgorIyAgICAgICAgIGJhcgorIyAgICApCisjCisjIEluIHByYWN0aWNhbCB0ZXJtcywgd2hlbiAiYmFyIiBpcyBlbmNvdW50ZXJlZCwgaXQgaXMgZmxhZ2dlZCB3aXRoICI/IUFNUD8hIiwKKyMgYnV0IHdoZW4gdGhlIHN0YW5kLWFsb25lICIpIiBsaW5lIGlzIHNlZW4gd2hpY2ggY2xvc2VzIHRoZSBzdWJzaGVsbCwgdGhlCisjICI/IUFNUD8hIiB2aW9sYXRpb24gaXMgcmVtb3ZlZCBmcm9tIHRoZSAiYmFyIiBsaW5lIChyZXRyaWV2ZWQgZnJvbSB0aGUgImhvbGQiCisjIGFyZWEpIHNpbmNlIHRoZSBmaW5hbCBzdGF0ZW1lbnQgb2YgYSBzdWJzaGVsbCBtdXN0IG5vdCBlbmQgd2l0aCAiJiYiLiBUaGUKKyMgZmluYWwgbGluZSBvZiBhIHN1YnNoZWxsIG1heSBzdGlsbCBicmVhayB0aGUgJiYtY2hhaW4gYnkgdXNpbmcgIjsiIGludGVybmFsbHkKKyMgdG8gY2hhaW4gY29tbWFuZHMgdG9nZXRoZXIgcmF0aGVyIHRoYW4gIiYmIiwgc28gIj8hU0VNST8hIiBpcyBuZXZlciByZW1vdmVkCisjIGZyb20gYSBsaW5lIChldmVuIHRob3VnaCAiPyFBTVA/ISIgbWlnaHQgYmUpLgorIworIyBDYXJlIGlzIHRha2VuIHRvIHJlY29nbml6ZSB0aGUgbGFzdCBfc3RhdGVtZW50XyBvZiBhIG11bHRpLWxpbmUgc3Vic2hlbGwsIG5vdAorIyBuZWNlc3NhcmlseSB0aGUgbGFzdCB0ZXh0dWFsIF9saW5lXyB3aXRoaW4gdGhlIHN1YnNoZWxsLCBzaW5jZSAmJi1jaGFpbmluZworIyBhcHBsaWVzIHRvIHN0YXRlbWVudHMsIG5vdCB0byBsaW5lcy4gQ29uc2VxdWVudGx5LCBibGFuayBsaW5lcywgY29tbWVudAorIyBsaW5lcywgYW5kIGhlcmUtZG9jcyBhcmUgc3dhbGxvd2VkIChidXQgbm90IHRoZSBjb21tYW5kIHRvIHdoaWNoIHRoZSBoZXJlLWRvYworIyBpcyBhdHRhY2hlZCksIGxlYXZpbmcgdGhlIGxhc3Qgc3RhdGVtZW50IGluIHRoZSAiaG9sZCIgYXJlYSwgbm90IHRoZSBsYXN0CisjIGxpbmUsIHRodXMgc2ltcGxpZnlpbmcgJiYtbGluayBjaGVja2luZy4KKyMKKyMgVGhlIGZpbmFsIHN0YXRlbWVudCBiZWZvcmUgImRvbmUiIGluIGZvci0gYW5kIHdoaWxlLWxvb3BzLCBhbmQgYmVmb3JlICJlbGlmIiwKKyMgImVsc2UiLCBhbmQgImZpIiBpbiBpZi10aGVuLWVsc2UgbGlrZXdpc2UgbXVzdCBub3QgZW5kIHdpdGggIiYmIiwgdGh1cworIyByZWNlaXZlcyBzaW1pbGFyIHRyZWF0bWVudC4KKyMKKyMgU3dhbGxvd2luZyBoZXJlLWRvY3Mgd2l0aCBhcmJpdHJhcnkgdGFncyByZXF1aXJlcyBhIGJpdCBvZiBmaW5lc3NlLiBXaGVuIGEKKyMgbGluZSBzdWNoIGFzICJjYXQgPDxFT0YgPm91dCIgaXMgc2VlbiwgdGhlIGhlcmUtZG9jIHRhZyBpcyBtb3ZlZCB0byB0aGUgZnJvbnQKKyMgb2YgdGhlIGxpbmUgZW5jbG9zZWQgaW4gYW5nbGUgYnJhY2tldHMgYXMgYSBzZW50aW5lbCwgZ2l2aW5nICI8RU9GPmNhdCA+b3V0Ii4KKyMgQXMgZWFjaCBzdWJzZXF1ZW50IGxpbmUgaXMgcmVhZCwgaXQgaXMgYXBwZW5kZWQgdG8gdGhlIHRhcmdldCBsaW5lIGFuZCBhCisjICh3aGl0ZXNwYWNlLWxvb3NlKSBiYWNrLXJlZmVyZW5jZSBtYXRjaCAvXjwoLiopPlxuXDEkLyBpcyBhdHRlbXB0ZWQgdG8gc2VlIGlmCisjIHRoZSBjb250ZW50IGluc2lkZSAiPC4uLj4iIG1hdGNoZXMgdGhlIGVudGlyZXR5IG9mIHRoZSBuZXdseS1yZWFkIGxpbmUuIEZvcgorIyBpbnN0YW5jZSwgaWYgdGhlIG5leHQgbGluZSByZWFkIGlzICJzb21lIGRhdGEiLCB3aGVuIGNvbmNhdGVuYXRlZCB3aXRoIHRoZQorIyB0YXJnZXQgbGluZSwgaXQgYmVjb21lcyAiPEVPRj5jYXQgPm91dFxuc29tZSBkYXRhIiwgYW5kIGEgbWF0Y2ggaXMgYXR0ZW1wdGVkCisjIHRvIHNlZSBpZiAiRU9GIiBtYXRjaGVzICJzb21lIGRhdGEiLiBTaW5jZSBpdCBkb2Vzbid0LCB0aGUgbmV4dCBsaW5lIGlzCisjIGF0dGVtcHRlZC4gV2hlbiBhIGxpbmUgY29uc2lzdGluZyBvZiBvbmx5ICJFT0YiIChhbmQgcG9zc2libGUgd2hpdGVzcGFjZSkgaXMKKyMgZW5jb3VudGVyZWQsIGl0IGlzIGFwcGVuZGVkIHRvIHRoZSB0YXJnZXQgbGluZSBnaXZpbmcgIjxFT0Y+Y2F0ID5vdXRcbkVPRiIsCisjIGluIHdoaWNoIGNhc2UgdGhlICJFT0YiIGluc2lkZSAiPC4uLj4iIGRvZXMgbWF0Y2ggdGhlIHRleHQgZm9sbG93aW5nIHRoZQorIyBuZXdsaW5lLCB0aHVzIHRoZSBjbG9zaW5nIGhlcmUtZG9jIHRhZyBoYXMgYmVlbiBmb3VuZC4gVGhlIGNsb3NpbmcgdGFnIGxpbmUKKyMgYW5kIHRoZSAiPC4uLj4iIHByZWZpeCBvbiB0aGUgdGFyZ2V0IGxpbmUgYXJlIHRoZW4gZGlzY2FyZGVkLCBsZWF2aW5nIGp1c3QKKyMgdGhlIHRhcmdldCBsaW5lICJjYXQgPm91dCIuCisjCisjIFRvIGZhY2lsaXRhdGUgcmVncmVzc2lvbiB0ZXN0aW5nIChhbmQgbWFudWFsIGRlYnVnZ2luZyksIGEgIj4iIGFubm90YXRpb24gaXMKKyMgYXBwbGllZCB0byB0aGUgbGluZSBjb250YWluaW5nICIpIiB3aGljaCBjbG9zZXMgYSBzdWJzaGVsbCwgIj4+IiB0byBhIGxpbmUKKyMgY2xvc2luZyBhIG5lc3RlZCBzdWJzaGVsbCwgYW5kICI+Pj4iIHRvIGEgbGluZSBjbG9zaW5nIGJvdGggYXQgb25jZS4gVGhpcworIyBtYWtlcyBpdCBlYXN5IHRvIGRldGVjdCB3aGV0aGVyIHRoZSBoZXVyaXN0aWNzIGNvcnJlY3RseSBpZGVudGlmeQorIyBlbmQtb2Ytc3Vic2hlbGwuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgaW5jb21wbGV0ZSBsaW5lIC0tIHNsdXJwIHVwIG5leHQgbGluZQorOnNxdWFzaAorL1xcJC8geworCU4KKwlzL1xcXG4vLworCWJzcXVhc2gKK30KKworIyBoZXJlLWRvYyAtLSBzd2FsbG93IGl0IHRvIGF2b2lkIGZhbHNlIGhpdHMgd2l0aGluIGl0cyBib2R5IChidXQga2VlcCB0aGUKKyMgY29tbWFuZCB0byB3aGljaCBpdCB3YXMgYXR0YWNoZWQpCisvPDxbIAldKlstXFwnIl0qW0EtWmEtejAtOV9dLyB7CisJcy9eXCguKlwpPDxbIAldKlstXFwnIl0qXChbQS1aYS16MC05X11bQS1aYS16MC05X10qXClbJyJdKi88XDI+XDE8PC8KKwlzL1sgCV0qPDwvLworCTpoZXJlZAorCU4KKwkvXjxcKFtePl0qXCk+LipcblsgCV0qXDFbIAldKiQvIXsKKwkJcy9cbi4qJC8vCisJCWJoZXJlZAorCX0KKwlzL148W14+XSo+Ly8KKwlzL1xuLiokLy8KK30KKworIyBvbmUtbGluZXIgIiguLi4pICYmIgorL15bIAldKiEqWyAJXSooLi4qKVsgCV0qJiZbIAldKiQvYm9uZWxpbmUKKworIyBzYW1lIGFzIGFib3ZlIGJ1dCB3aXRob3V0IHRyYWlsaW5nICImJiIKKy9eWyAJXSohKlsgCV0qKC4uKilbIAldKiQvYm9uZWxpbmUKKworIyBvbmUtbGluZXIgIiguLi4pID54IiAob3IgIjI+eCIgb3IgIjx4IiBvciAifHgiIG9yICImIgorL15bIAldKiEqWyAJXSooLi4qKVsgCV0qWzAtOV0qWzw+fCZdL2JvbmVsaW5lCisKKyMgbXVsdGktbGluZSAiKC4uLlxuLi4uKSIKKy9eWyAJXSooL2JzdWJzaGVsbAorCisjIGlubm9jdW91cyBsaW5lIC0tIHByaW50IGl0IGFuZCBhZHZhbmNlIHRvIG5leHQgbGluZQorYgorCisjIGZvdW5kIG9uZS1saW5lciAiKC4uLikiIC0tIG1hcmsgc3VzcGVjdCBpZiBpdCB1c2VzICI7IiBpbnRlcm5hbGx5IHJhdGhlciB0aGFuCisjICImJiIgKGJ1dCBub3QgIjsiIGluIGEgc3RyaW5nKQorOm9uZWxpbmUKKy87L3sKKwkvIlteIl0qO1teIl0qIi8hcy9eLz8hU0VNST8hLworfQorYgorCis6c3Vic2hlbGwKKyMgYmFyZSAiKCIgbGluZT8gLS0gc3Rhc2ggZm9yIGxhdGVyIHByaW50aW5nCisvXlsgCV0qKFsJXSokLyB7CisJaAorCWJuZXh0bGluZQorfQorIyAiKC4uLiIgbGluZSAtLSBzcGxpdCBvZmYgYW5kIHN0YXNoICIoIiwgdGhlbiBwcm9jZXNzICIuLi4iIGFzIGl0cyBvd24gbGluZQoreAorcy8uKi8oLworeAorcy8oLy8KK2JzbHVycAorCis6bmV4dGxpbmUKK04KK3MvLipcbi8vCisKKzpzbHVycAorIyBpbmNvbXBsZXRlIGxpbmUgIi4uLlwiCisvXFwkL2JpY21wbHRlCisjIG11bHRpLWxpbmUgcXVvdGVkIHN0cmluZyAiLi4uXG4uLi4iPworLyIvYmRxc3RyaW5nCisjIG11bHRpLWxpbmUgcXVvdGVkIHN0cmluZyAnLi4uXG4uLi4nPyAoYnV0IG5vdCBjb250cmFjdGlvbiBpbiBzdHJpbmcgIml0J3MiKQorLycveworCS8iW14nIl0qJ1teJyJdKiIvIWJzcXN0cmluZworfQorOmZvbGRlZAorIyBoZXJlLWRvYyAtLSBzd2FsbG93IGl0CisvPDxbIAldKlstXFwnIl0qW0EtWmEtejAtOV9dL2JoZXJlZG9jCisjIGNvbW1lbnQgb3IgZW1wdHkgbGluZSAtLSBkaXNjYXJkIHNpbmNlIGZpbmFsIG5vbi1jb21tZW50LCBub24tZW1wdHkgbGluZQorIyBiZWZvcmUgY2xvc2luZyAiKSIsICJkb25lIiwgImVsc2lmIiwgImVsc2UiLCBvciAiZmkiIHdpbGwgbmVlZCB0byBiZQorIyByZS12aXNpdGVkIHRvIGRyb3AgInN1c3BlY3QiIG1hcmtpbmcgc2luY2UgZmluYWwgbGluZSBvZiB0aG9zZSBjb25zdHJ1Y3RzCisjIGxlZ2l0aW1hdGVseSBsYWNrcyAiJiYiLCBzbyAic3VzcGVjdCIgbWFyayBtdXN0IGJlIHJlbW92ZWQKKy9eWyAJXSojL2JuZXh0bGluZQorL15bIAldKiQvYm5leHRsaW5lCisjIGluLWxpbmUgY29tbWVudCAtLSBzdHJpcCBpdCAoYnV0IG5vdCAiIyIgaW4gYSBzdHJpbmcsIEJhc2ggJHsjLi4ufSBhcnJheQorIyBsZW5ndGgsIG9yIFBlcmZvcmNlICIvL2RlcG90L3BhdGgjNDIiIHJldmlzaW9uIGluIGZpbGVzcGVjKQorL1sgCV0jL3sKKwkvIlteIl0qI1teIl0qIi8hcy9bIAldIy4qJC8vCit9CisjIG9uZS1saW5lciAiY2FzZSAuLi4gZXNhYyIKKy9eWyAJXSpjYXNlWyAJXSouLiplc2FjL2JjaGtjaG4KKyMgbXVsdGktbGluZSAiY2FzZSAuLi4gZXNhYyIKKy9eWyAJXSpjYXNlWyAJXS4uKlsgCV1pbi9iY2FzZQorIyBtdWx0aS1saW5lICJmb3IgLi4uIGRvbmUiIG9yICJ3aGlsZSAuLi4gZG9uZSIKKy9eWyAJXSpmb3JbIAldLi4qWyAJXWluL2Jjb250aW51ZQorL15bIAldKndoaWxlWyAJXS9iY29udGludWUKKy9eWyAJXSpkb1sgCV0vYmNvbnRpbnVlCisvXlsgCV0qZG9bIAldKiQvYmNvbnRpbnVlCisvO1sgCV0qZG8vYmNvbnRpbnVlCisvXlsgCV0qZG9uZVsgCV0qJiZbIAldKiQvYmRvbmUKKy9eWyAJXSpkb25lWyAJXSokL2Jkb25lCisvXlsgCV0qZG9uZVsgCV0qWzw+fF0vYmRvbmUKKy9eWyAJXSpkb25lWyAJXSopL2Jkb25lCisvfHxbIAldKmV4aXRbIAldL2Jjb250aW51ZQorL3x8WyAJXSpleGl0WyAJXSokL2Jjb250aW51ZQorIyBtdWx0aS1saW5lICJpZi4uLmVsc2lmLi4uZWxzZS4uLmZpIgorL15bIAldKmlmWyAJXS9iY29udGludWUKKy9eWyAJXSp0aGVuWyAJXS9iY29udGludWUKKy9eWyAJXSp0aGVuWyAJXSokL2Jjb250aW51ZQorLztbIAldKnRoZW4vYmNvbnRpbnVlCisvXlsgCV0qZWxpZlsgCV0vYmVsc2UKKy9eWyAJXSplbGlmWyAJXSokL2JlbHNlCisvXlsgCV0qZWxzZVsgCV0vYmVsc2UKKy9eWyAJXSplbHNlWyAJXSokL2JlbHNlCisvXlsgCV0qZmlbIAldKiYmWyAJXSokL2Jkb25lCisvXlsgCV0qZmlbIAldKiQvYmRvbmUKKy9eWyAJXSpmaVsgCV0qWzw+fF0vYmRvbmUKKy9eWyAJXSpmaVsgCV0qKS9iZG9uZQorIyBuZXN0ZWQgb25lLWxpbmVyICIoLi4uKSAmJiIKKy9eWyAJXSooLiopWyAJXSomJlsgCV0qJC9iY2hrY2huCisjIG5lc3RlZCBvbmUtbGluZXIgIiguLi4pIgorL15bIAldKiguKilbIAldKiQvYmNoa2NobgorIyBuZXN0ZWQgb25lLWxpbmVyICIoLi4uKSA+eCIgKG9yICIyPngiIG9yICI8eCIgb3IgInx4IikKKy9eWyAJXSooLiopWyAJXSpbMC05XSpbPD58XS9iY2hrY2huCisjIG5lc3RlZCBtdWx0aS1saW5lICIoLi4uXG4uLi4pIgorL15bIAldKigvYm5lc3QKKyMgbXVsdGktbGluZSAiey4uLlxuLi4ufSIKKy9eWyAJXSp7L2JibG9jaworIyBjbG9zaW5nICIpIiBvbiBvd24gbGluZSAtLSBleGl0IHN1YnNoZWxsCisvXlsgCV0qKS9iY2xzc29sbworIyAiJCgoLi4uKSkiIC0tIGFyaXRobWV0aWMgZXhwYW5zaW9uOyBub3QgY2xvc2luZyAiKSIKKy9cJCgoW14pXVteKV0qKSlbXildKiQvYmNoa2NobgorIyAiJCguLi4pIiAtLSBjb21tYW5kIHN1YnN0aXR1dGlvbjsgbm90IGNsb3NpbmcgIikiCisvXCQoW14pXVteKV0qKVteKV0qJC9iY2hrY2huCisjIG11bHRpLWxpbmUgIiQoLi4uXG4uLi4pIiAtLSBjb21tYW5kIHN1YnN0aXR1dGlvbjsgdHJlYXQgYXMgbmVzdGVkIHN1YnNoZWxsCisvXCQoW14pXSokL2JuZXN0CisjICI9KC4uLikiIC0tIEJhc2ggYXJyYXkgYXNzaWdubWVudDsgbm90IGNsb3NpbmcgIikiCisvPSgvYmNoa2NobgorIyBjbG9zaW5nICIuLi4pICYmIgorLylbIAldKiYmWyAJXSokL2JjbG9zZQorIyBjbG9zaW5nICIuLi4pIgorLylbIAldKiQvYmNsb3NlCisjIGNsb3NpbmcgIi4uLikgPngiIChvciAiMj54IiBvciAiPHgiIG9yICJ8eCIpCisvKVsgCV0qWzw+fF0vYmNsb3NlCis6Y2hrY2huCisjIG1hcmsgc3VzcGVjdCBpZiBsaW5lIHVzZXMgIjsiIGludGVybmFsbHkgcmF0aGVyIHRoYW4gIiYmIiAoYnV0IG5vdCAiOyIgaW4gYQorIyBzdHJpbmcgYW5kIG5vdCAiOzsiIGluIG9uZS1saW5lciAiY2FzZS4uLmVzYWMiKQorLzsveworCS87Oy8heworCQkvIlteIl0qO1teIl0qIi8hcy9eLz8hU0VNST8hLworCX0KK30KKyMgbGluZSBlbmRzIHdpdGggcGlwZSAiLi4ufCIgLS0gdmFsaWQ7IG5vdCBtaXNzaW5nICImJiIKKy98WyAJXSokL2Jjb250aW51ZQorIyBtaXNzaW5nIGVuZC1vZi1saW5lICImJiIgLS0gbWFyayBzdXNwZWN0CisvJiZbIAldKiQvIXMvXi8/IUFNUD8hLworOmNvbnRpbnVlCisjIHJldHJpZXZlIGFuZCBwcmludCBwcmV2aW91cyBsaW5lCit4CituCitic2x1cnAKKworIyBmb3VuZCBpbmNvbXBsZXRlIGxpbmUgIi4uLlwiIC0tIHNsdXJwIHVwIG5leHQgbGluZQorOmljbXBsdGUKK04KK3MvXFxcbi8vCitic2x1cnAKKworIyBjaGVjayBmb3IgbXVsdGktbGluZSBkb3VibGUtcXVvdGVkIHN0cmluZyAiLi4uXG4uLi4iIC0tIGZvbGQgdG8gb25lIGxpbmUKKzpkcXN0cmluZworIyByZW1vdmUgYWxsIHF1b3RlIHBhaXJzCitzLyJcKFteIl0qXCkiL0AhXDFAIS9nCisjIGRvbmUgaWYgbm8gZGFuZ2xpbmcgcXVvdGUKKy8iLyFiZHFkb25lCisjIG90aGVyd2lzZSwgc2x1cnAgbmV4dCBsaW5lIGFuZCB0cnkgYWdhaW4KK04KK3MvXG4vLworYmRxc3RyaW5nCis6ZHFkb25lCitzL0AhLyIvZworYmZvbGRlZAorCisjIGNoZWNrIGZvciBtdWx0aS1saW5lIHNpbmdsZS1xdW90ZWQgc3RyaW5nICcuLi5cbi4uLicgLS0gZm9sZCB0byBvbmUgbGluZQorOnNxc3RyaW5nCisjIHJlbW92ZSBhbGwgcXVvdGUgcGFpcnMKK3MvJ1woW14nXSpcKScvQCFcMUAhL2cKKyMgZG9uZSBpZiBubyBkYW5nbGluZyBxdW90ZQorLycvIWJzcWRvbmUKKyMgb3RoZXJ3aXNlLCBzbHVycCBuZXh0IGxpbmUgYW5kIHRyeSBhZ2FpbgorTgorcy9cbi8vCitic3FzdHJpbmcKKzpzcWRvbmUKK3MvQCEvJy9nCitiZm9sZGVkCisKKyMgZm91bmQgaGVyZS1kb2MgLS0gc3dhbGxvdyBpdCB0byBhdm9pZCBmYWxzZSBoaXRzIHdpdGhpbiBpdHMgYm9keSAoYnV0IGtlZXAKKyMgdGhlIGNvbW1hbmQgdG8gd2hpY2ggaXQgd2FzIGF0dGFjaGVkKQorOmhlcmVkb2MKK3MvXlwoLipcKTw8WyAJXSpbLVxcJyJdKlwoW0EtWmEtejAtOV9dW0EtWmEtejAtOV9dKlwpWyciXSovPFwyPlwxPDwvCitzL1sgCV0qPDwvLworOmhlcmVkc3ViCitOCisvXjxcKFtePl0qXCk+LipcblsgCV0qXDFbIAldKiQvIXsKKwlzL1xuLiokLy8KKwliaGVyZWRzdWIKK30KK3MvXjxbXj5dKj4vLworcy9cbi4qJC8vCitiZm9sZGVkCisKKyMgZm91bmQgImNhc2UgLi4uIGluIiAtLSBwYXNzIHRocm91Z2ggdW50b3VjaGVkCis6Y2FzZQoreAorbgorL15bIAldKmVzYWMvYnNsdXJwCitiY2FzZQorCisjIGZvdW5kICJlbHNlIiBvciAiZWxpZiIgLS0gZHJvcCAic3VzcGVjdCIgZnJvbSBmaW5hbCBsaW5lIGJlZm9yZSAiZWxzZSIgc2luY2UKKyMgdGhhdCBsaW5lIGxlZ2l0aW1hdGVseSBsYWNrcyAiJiYiCis6ZWxzZQoreAorcy8/IUFNUD8hLy8KK3gKK2Jjb250aW51ZQorCisjIGZvdW5kICJkb25lIiBjbG9zaW5nIGZvci1sb29wIG9yIHdoaWxlLWxvb3AsIG9yICJmaSIgY2xvc2luZyBpZi10aGVuIC0tIGRyb3AKKyMgInN1c3BlY3QiIGZyb20gZmluYWwgY29udGFpbmVkIGxpbmUgc2luY2UgdGhhdCBsaW5lIGxlZ2l0aW1hdGVseSBsYWNrcyAiJiYiCis6ZG9uZQoreAorcy8/IUFNUD8hLy8KK3gKKyMgaXMgJ2RvbmUnIG9yICdmaScgY3VkZGxlZCB3aXRoICIpIiB0byBjbG9zZSBzdWJzaGVsbD8KKy9kb25lLiopL2JjbG9zZQorL2ZpLiopL2JjbG9zZQorYmNoa2NobgorCisjIGZvdW5kIG5lc3RlZCBtdWx0aS1saW5lICIoLi4uXG4uLi4pIiAtLSBwYXNzIHRocm91Z2ggdW50b3VjaGVkCis6bmVzdAoreAorOm5zdHNsdXJwCituCisjIGNsb3NpbmcgIikiIG9uIG93biBsaW5lIC0tIHN0b3AgbmVzdGVkIHNsdXJwCisvXlsgCV0qKS9ibnN0Y2xvc2UKKyMgY29tbWVudCAtLSBub3QgY2xvc2luZyAiKSIgaWYgaW4gY29tbWVudAorL15bIAldKiMvYm5zdGNudAorIyAiJCgoLi4uKSkiIC0tIGFyaXRobWV0aWMgZXhwYW5zaW9uOyBub3QgY2xvc2luZyAiKSIKKy9cJCgoW14pXVteKV0qKSlbXildKiQvYm5zdGNudAorIyAiJCguLi4pIiAtLSBjb21tYW5kIHN1YnN0aXR1dGlvbjsgbm90IGNsb3NpbmcgIikiCisvXCQoW14pXVteKV0qKVteKV0qJC9ibnN0Y250CisjIGNsb3NpbmcgIi4uLikiIC0tIHN0b3AgbmVzdGVkIHNsdXJwCisvKS9ibnN0Y2xvc2UKKzpuc3RjbnQKK3gKK2Juc3RzbHVycAorOm5zdGNsb3NlCitzL14vPj4vCisjIGlzIGl0ICIpKSIgd2hpY2ggY2xvc2VzIG5lc3RlZCBhbmQgcGFyZW50IHN1YnNoZWxscz8KKy8pWyAJXSopL2JzbHVycAorYmNoa2NobgorCisjIGZvdW5kIG11bHRpLWxpbmUgInsuLi5cbi4uLn0iIGJsb2NrIC0tIHBhc3MgdGhyb3VnaCB1bnRvdWNoZWQKKzpibG9jaworeAorbgorIyBjbG9zaW5nICJ9IiAtLSBzdG9wIGJsb2NrIHNsdXJwCisvfS9iY2hrY2huCitiYmxvY2sKKworIyBmb3VuZCBjbG9zaW5nICIpIiBvbiBvd24gbGluZSAtLSBkcm9wICJzdXNwZWN0IiBmcm9tIGZpbmFsIGxpbmUgb2Ygc3Vic2hlbGwKKyMgc2luY2UgdGhhdCBsaW5lIGxlZ2l0aW1hdGVseSBsYWNrcyAiJiYiIGFuZCBleGl0IHN1YnNoZWxsIGxvb3AKKzpjbHNzb2xvCit4CitzLz8hQU1QPyEvLworcAoreAorcy9eLz4vCitiCisKKyMgZm91bmQgY2xvc2luZyAiLi4uKSIgLS0gZXhpdCBzdWJzaGVsbCBsb29wCis6Y2xvc2UKK3gKK3AKK3gKK3MvXi8+LworYgpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvYXJpdGhtZXRpYy1leHBhbnNpb24uZXhwZWN0IGIvdC9jaGFpbmxpbnQvYXJpdGhtZXRpYy1leHBhbnNpb24uZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDU3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9hcml0aG1ldGljLWV4cGFuc2lvbi5leHBlY3QKQEAgLTAsMCArMSw5IEBACisoCisJZm9vICYmCisJYmFyPSQoKDQyICsgMSkpICYmCisJYmF6Cis+KSAmJgorKAorPyFBTVA/IQliYXI9JCgoNDIgKyAxKSkKKwliYXoKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9hcml0aG1ldGljLWV4cGFuc2lvbi50ZXN0IGIvdC9jaGFpbmxpbnQvYXJpdGhtZXRpYy1leHBhbnNpb24udGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjIwNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvYXJpdGhtZXRpYy1leHBhbnNpb24udGVzdApAQCAtMCwwICsxLDExIEBACisoCisJZm9vICYmCisjIExJTlQ6IGNsb3NpbmcgIikiIG9mICQoKC4uLikpIG5vdCBtaXNpbnRlcnByZXRlZCBhcyBzdWJzaGVsbC1jbG9zaW5nICIpIgorCWJhcj0kKCg0MiArIDEpKSAmJgorCWJhegorKSAmJgorKAorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJCgoLi4uKSkKKwliYXI9JCgoNDIgKyAxKSkKKwliYXoKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Jhc2gtYXJyYXkuZXhwZWN0IGIvdC9jaGFpbmxpbnQvYmFzaC1hcnJheS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhODMwZAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Jhc2gtYXJyYXkuZXhwZWN0CkBAIC0wLDAgKzEsMTAgQEAKKygKKwlmb28gJiYKKwliYXI9KGd1bWJvIHN0dW1ibyB3dW1ibykgJiYKKwliYXoKKz4pICYmCisoCisJZm9vICYmCisJYmFyPSR7I2JhcltAXX0gJiYKKwliYXoKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9iYXNoLWFycmF5LnRlc3QgYi90L2NoYWlubGludC9iYXNoLWFycmF5LnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiYmI3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Jhc2gtYXJyYXkudGVzdApAQCAtMCwwICsxLDEyIEBACisoCisJZm9vICYmCisjIExJTlQ6ICIpIiBpbiBCYXNoIGFycmF5IGFzc2lnbm1lbnQgbm90IG1pc2ludGVycHJldGVkIGFzIHN1YnNoZWxsLWNsb3NpbmcgIikiCisJYmFyPShndW1ibyBzdHVtYm8gd3VtYm8pICYmCisJYmF6CispICYmCisoCisJZm9vICYmCisjIExJTlQ6IEJhc2ggYXJyYXkgbGVuZ3RoIG9wZXJhdG9yIG5vdCBtaXNpbnRlcnByZXRlZCBhcyBjb21tZW50CisJYmFyPSR7I2JhcltAXX0gJiYKKwliYXoKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2JsYW5rLWxpbmUuZXhwZWN0IGIvdC9jaGFpbmxpbnQvYmxhbmstbGluZS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlOTM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2JsYW5rLWxpbmUuZXhwZWN0CkBAIC0wLDAgKzEsNCBAQAorKAorCW5vdGhpbmcgJiYKKwlzb21ldGhpbmcKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9ibGFuay1saW5lLnRlc3QgYi90L2NoYWlubGludC9ibGFuay1saW5lLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkZDE0MwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2JsYW5rLWxpbmUudGVzdApAQCAtMCwwICsxLDEwIEBACisoCisKKwlub3RoaW5nICYmCisKKwlzb21ldGhpbmcKKyMgTElOVDogc3dhbGxvdyBibGFuayBsaW5lcyBzaW5jZSBmaW5hbCBfc3RhdGVtZW50XyBiZWZvcmUgc3Vic2hlbGwgZW5kIGlzCisjIExJTlQ6IHNpZ25pZmljYW50IHRvICImJiItY2hlY2ssIG5vdCBmaW5hbCBfbGluZV8gKHdoaWNoIG1pZ2h0IGJlIGJsYW5rKQorCisKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Jsb2NrLmV4cGVjdCBiL3QvY2hhaW5saW50L2Jsb2NrLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ3ZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvYmxvY2suZXhwZWN0CkBAIC0wLDAgKzEsMTIgQEAKKygKKwlmb28gJiYKKwl7CisJCWVjaG8gYQorCQllY2hvIGIKKwl9ICYmCisJYmFyICYmCisJeworCQllY2hvIGMKKz8hQU1QPyEJfQorCWJhegorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Jsb2NrLnRlc3QgYi90L2NoYWlubGludC9ibG9jay50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTkxNTEKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9ibG9jay50ZXN0CkBAIC0wLDAgKzEsMTUgQEAKKygKKyMgTElOVDogbWlzc2luZyAiJiYiIGluIGJsb2NrIG5vdCBjdXJyZW50bHkgZGV0ZWN0ZWQgKGZvciBjb25zaXN0ZW5jeSB3aXRoCisjIExJTlQ6IC0tY2hhaW4tbGludCBhdCB0b3AgbGV2ZWwgYW5kIHRvIHByb3ZpZGUgZXNjYXBlIGhhdGNoIGlmIG5lZWRlZCkKKwlmb28gJiYKKwl7CisJCWVjaG8gYQorCQllY2hvIGIKKwl9ICYmCisJYmFyICYmCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBhdCBjbG9zaW5nICJ9IgorCXsKKwkJZWNobyBjCisJfQorCWJhegorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvYnJva2VuLWNoYWluLmV4cGVjdCBiL3QvY2hhaW5saW50L2Jyb2tlbi1jaGFpbi5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViMGY0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Jyb2tlbi1jaGFpbi5leHBlY3QKQEAgLTAsMCArMSw2IEBACisoCisJZm9vICYmCis/IUFNUD8hCWJhcgorCWJheiAmJgorCXdvcAorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Jyb2tlbi1jaGFpbi50ZXN0IGIvdC9jaGFpbmxpbnQvYnJva2VuLWNoYWluLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjNjdiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Jyb2tlbi1jaGFpbi50ZXN0CkBAIC0wLDAgKzEsOCBAQAorKAorCWZvbyAmJgorIyBMSU5UOiBtaXNzaW5nICImJiIgZnJvbSAnYmFyJworCWJhcgorCWJheiAmJgorIyBMSU5UOiBmaW5hbCBzdGF0ZW1lbnQgYmVmb3JlIGNsb3NpbmcgIikiIGxlZ2l0aW1hdGVseSBsYWNrcyAiJiYiCisJd29wCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jYXNlLmV4cGVjdCBiL3QvY2hhaW5saW50L2Nhc2UuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZjEyMWYKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jYXNlLmV4cGVjdApAQCAtMCwwICsxLDE5IEBACisoCisJY2FzZSAiJHgiIGluCisJeCkgZm9vIDs7CisJKikgYmFyIDs7CisJZXNhYyAmJgorCWZvb2JhcgorPikgJiYKKygKKwljYXNlICIkeCIgaW4KKwl4KSBmb28gOzsKKwkqKSBiYXIgOzsKKz8hQU1QPyEJZXNhYworCWZvb2JhcgorPikgJiYKKygKKwljYXNlICIkeCIgaW4gMSkgdHJ1ZTs7IGVzYWMgJiYKKz8hQU1QPyEJY2FzZSAiJHkiIGluIDIpIGZhbHNlOzsgZXNhYworCWZvb2JhcgorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Nhc2UudGVzdCBiL3QvY2hhaW5saW50L2Nhc2UudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWY2ZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY2FzZS50ZXN0CkBAIC0wLDAgKzEsMjMgQEAKKygKKyMgTElOVDogIi4uLikiIGFybXMgaW4gJ2Nhc2UnIG5vdCBtaXNpbnRlcnByZXRlZCBhcyBzdWJzaGVsbC1jbG9zaW5nICIpIgorCWNhc2UgIiR4IiBpbgorCXgpIGZvbyA7OworCSopIGJhciA7OworCWVzYWMgJiYKKwlmb29iYXIKKykgJiYKKygKKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdlc2FjJworCWNhc2UgIiR4IiBpbgorCXgpIGZvbyA7OworCSopIGJhciA7OworCWVzYWMKKwlmb29iYXIKKykgJiYKKygKKyMgTElOVDogIi4uLikiIGFybSBpbiBvbmUtbGluZXIgJ2Nhc2UnIG5vdCBtaXNpbnRlcnByZXRlZCBhcyBjbG9zaW5nICIpIgorCWNhc2UgIiR4IiBpbiAxKSB0cnVlOzsgZXNhYyAmJgorIyBMSU5UOiBzYW1lIGJ1dCBtaXNzaW5nICImJiIKKwljYXNlICIkeSIgaW4gMikgZmFsc2U7OyBlc2FjCisJZm9vYmFyCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jbG9zZS1uZXN0ZWQtYW5kLXBhcmVudC10b2dldGhlci5leHBlY3QgYi90L2NoYWlubGludC9jbG9zZS1uZXN0ZWQtYW5kLXBhcmVudC10b2dldGhlci5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5MTBmOQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Nsb3NlLW5lc3RlZC1hbmQtcGFyZW50LXRvZ2V0aGVyLmV4cGVjdApAQCAtMCwwICsxLDQgQEAKKygKK2NkIGZvbyAmJgorCShiYXIgJiYKKz4+PgkJYmF6KSkKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Nsb3NlLW5lc3RlZC1hbmQtcGFyZW50LXRvZ2V0aGVyLnRlc3QgYi90L2NoYWlubGludC9jbG9zZS1uZXN0ZWQtYW5kLXBhcmVudC10b2dldGhlci50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDQ4MmYKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jbG9zZS1uZXN0ZWQtYW5kLXBhcmVudC10b2dldGhlci50ZXN0CkBAIC0wLDAgKzEsMyBAQAorKGNkIGZvbyAmJgorCShiYXIgJiYKKwkJYmF6KSkKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2Nsb3NlLXN1YnNoZWxsLmV4cGVjdCBiL3QvY2hhaW5saW50L2Nsb3NlLXN1YnNoZWxsLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODQ2ODg3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY2xvc2Utc3Vic2hlbGwuZXhwZWN0CkBAIC0wLDAgKzEsMjUgQEAKKygKKwlmb28KKz4pICYmCisoCisJYmFyCis+KSA+b3V0ICYmCisoCisJYmF6Cis+KSAyPmVyciAmJgorKAorCWJvbworPikgPGlucHV0ICYmCisoCisJYmlwCis+KSB8IHd1enpsZSAmJgorKAorCWJvcAorPikgfCBmYXp6IAlmb3p6ICYmCisoCisJYnVwCis+KSB8CitmdXp6bGUgJiYKKygKKwl5b3AKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jbG9zZS1zdWJzaGVsbC50ZXN0IGIvdC9jaGFpbmxpbnQvY2xvc2Utc3Vic2hlbGwudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhjYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY2xvc2Utc3Vic2hlbGwudGVzdApAQCAtMCwwICsxLDI3IEBACisjIExJTlQ6IGNsb3NpbmcgIikiIHdpdGggdmFyaW91cyBkZWNvcmF0aW9ucyAoIiYmIiwgIj4iLCAifCIsIGV0Yy4pCisoCisJZm9vCispICYmCisoCisJYmFyCispID5vdXQgJiYKKygKKwliYXoKKykgMj5lcnIgJiYKKygKKwlib28KKykgPGlucHV0ICYmCisoCisJYmlwCispIHwgd3V6emxlICYmCisoCisJYm9wCispIHwgZmF6eiBcCisJZm96eiAmJgorKAorCWJ1cAorKSB8CitmdXp6bGUgJiYKKygKKwl5b3AKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2NvbW1hbmQtc3Vic3RpdHV0aW9uLmV4cGVjdCBiL3QvY2hhaW5saW50L2NvbW1hbmQtc3Vic3RpdHV0aW9uLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQxMThlCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY29tbWFuZC1zdWJzdGl0dXRpb24uZXhwZWN0CkBAIC0wLDAgKzEsOSBAQAorKAorCWZvbyAmJgorCWJhcj0kKGdvYmJsZSkgJiYKKwliYXoKKz4pICYmCisoCis/IUFNUD8hCWJhcj0kKGdvYmJsZSBibG9ja3MpCisJYmF6Cis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY29tbWFuZC1zdWJzdGl0dXRpb24udGVzdCBiL3QvY2hhaW5saW50L2NvbW1hbmQtc3Vic3RpdHV0aW9uLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiYjAwMgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2NvbW1hbmQtc3Vic3RpdHV0aW9uLnRlc3QKQEAgLTAsMCArMSwxMSBAQAorKAorCWZvbyAmJgorIyBMSU5UOiBjbG9zaW5nICIpIiBvZiAkKC4uLikgbm90IG1pc2ludGVycHJldGVkIGFzIHN1YnNoZWxsLWNsb3NpbmcgIikiCisJYmFyPSQoZ29iYmxlKSAmJgorCWJhegorKSAmJgorKAorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJCguLi4pCisJYmFyPSQoZ29iYmxlIGJsb2NrcykKKwliYXoKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2NvbW1lbnQuZXhwZWN0IGIvdC9jaGFpbmxpbnQvY29tbWVudC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlOTM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2NvbW1lbnQuZXhwZWN0CkBAIC0wLDAgKzEsNCBAQAorKAorCW5vdGhpbmcgJiYKKwlzb21ldGhpbmcKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jb21tZW50LnRlc3QgYi90L2NoYWlubGludC9jb21tZW50LnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzYzBjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2NvbW1lbnQudGVzdApAQCAtMCwwICsxLDExIEBACisoCisjIExJTlQ6IHN3YWxsb3cgY29tbWVudCBsaW5lcworCSMgY29tbWVudCAxCisJbm90aGluZyAmJgorCSMgY29tbWVudCAyCisJc29tZXRoaW5nCisjIExJTlQ6IHN3YWxsb3cgY29tbWVudCBsaW5lcyBzaW5jZSBmaW5hbCBfc3RhdGVtZW50XyBiZWZvcmUgc3Vic2hlbGwgZW5kIGlzCisjIExJTlQ6IHNpZ25pZmljYW50IHRvICImJiItY2hlY2ssIG5vdCBmaW5hbCBfbGluZV8gKHdoaWNoIG1pZ2h0IGJlIGNvbW1lbnQpCisJIyBjb21tZW50IDMKKwkjIGNvbW1lbnQgNAorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY29tcGxleC1pZi1pbi1jdWRkbGVkLWxvb3AuZXhwZWN0IGIvdC9jaGFpbmxpbnQvY29tcGxleC1pZi1pbi1jdWRkbGVkLWxvb3AuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzRiODgKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jb21wbGV4LWlmLWluLWN1ZGRsZWQtbG9vcC5leHBlY3QKQEAgLTAsMCArMSwxMCBAQAorKAorZm9yIGkgaW4gYSBiIGM7IGRvCisgICBpZiB0ZXN0ICIkKGVjaG8gJCh3YWZmbGUgYmF0KSkiID0gImVsZXZlbnRlZW4iICYmCisgICAgIHRlc3QgIiR4IiA9ICIkeSI7IHRoZW4KKyAgICAgOgorICAgZWxzZQorICAgICBlY2hvID5maWxlCisgICBmaQorPiBkb25lKSAmJgordGVzdCAhIC1mIGZpbGUKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2NvbXBsZXgtaWYtaW4tY3VkZGxlZC1sb29wLnRlc3QgYi90L2NoYWlubGludC9jb21wbGV4LWlmLWluLWN1ZGRsZWQtbG9vcC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MWJiZDgKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jb21wbGV4LWlmLWluLWN1ZGRsZWQtbG9vcC50ZXN0CkBAIC0wLDAgKzEsMTEgQEAKKyMgTElOVDogJ2ZvcicgbG9vcCBjdWRkbGVkIHdpdGggIigiIGFuZCAiKSIgYW5kIG5lc3RlZCAnaWYnIHdpdGggY29tcGxleAorIyBMSU5UOiBtdWx0aS1saW5lIGNvbmRpdGlvbjsgaW5kZW50ZWQgd2l0aCBzcGFjZXMsIG5vdCB0YWJzCisoZm9yIGkgaW4gYSBiIGM7IGRvCisgICBpZiB0ZXN0ICIkKGVjaG8gJCh3YWZmbGUgYmF0KSkiID0gImVsZXZlbnRlZW4iICYmCisgICAgIHRlc3QgIiR4IiA9ICIkeSI7IHRoZW4KKyAgICAgOgorICAgZWxzZQorICAgICBlY2hvID5maWxlCisgICBmaQorIGRvbmUpICYmCit0ZXN0ICEgLWYgZmlsZQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY3VkZGxlZC1pZi10aGVuLWVsc2UuZXhwZWN0IGIvdC9jaGFpbmxpbnQvY3VkZGxlZC1pZi10aGVuLWVsc2UuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMmEwMjYKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jdWRkbGVkLWlmLXRoZW4tZWxzZS5leHBlY3QKQEAgLTAsMCArMSw3IEBACisoCitpZiB0ZXN0IC16ICIiOyB0aGVuCisgICAgZWNobyBlbXB0eQorIGVsc2UKKyAgICBlY2hvIGJpenp5Cis+IGZpKSAmJgorZWNobyBmb29iYXIKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2N1ZGRsZWQtaWYtdGhlbi1lbHNlLnRlc3QgYi90L2NoYWlubGludC9jdWRkbGVkLWlmLXRoZW4tZWxzZS50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZDc3NGEKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jdWRkbGVkLWlmLXRoZW4tZWxzZS50ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyBMSU5UOiAnaWYnIGN1ZGRsZWQgd2l0aCAiKCIgYW5kICIpIjsgaW5kZW50ZWQgd2l0aCBzcGFjZXMsIG5vdCB0YWJzCisoaWYgdGVzdCAteiAiIjsgdGhlbgorICAgIGVjaG8gZW1wdHkKKyBlbHNlCisgICAgZWNobyBiaXp6eQorIGZpKSAmJgorZWNobyBmb29iYXIKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2N1ZGRsZWQtbG9vcC5leHBlY3QgYi90L2NoYWlubGludC9jdWRkbGVkLWxvb3AuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDI2MGQKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jdWRkbGVkLWxvb3AuZXhwZWN0CkBAIC0wLDAgKzEsNSBAQAorKAorIHdoaWxlIHJlYWQgeAorICBkbyBmb29iYXIgYm9wIHx8IGV4aXQgMQorPiAgZG9uZSA8ZmlsZSApICYmCitvdXRzaWRlIHN1YnNoZWxsCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jdWRkbGVkLWxvb3AudGVzdCBiL3QvY2hhaW5saW50L2N1ZGRsZWQtbG9vcC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NDFkNzgKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9jdWRkbGVkLWxvb3AudGVzdApAQCAtMCwwICsxLDcgQEAKKyMgTElOVDogJ3doaWxlJyBsb29wIGN1ZGRsZWQgd2l0aCAiKCIgYW5kICIpIiwgd2l0aCBlbWJlZGRlZCAoYWxsb3dlZCkKKyMgTElOVDogInx8IGV4aXQge259IiB0byBleGl0IGxvb3AgZWFybHksIGFuZCB1c2luZyByZWRpcmVjdGlvbiAiPCIgdG8gZmVlZAorIyBMSU5UOiBsb29wOyBpbmRlbnRlZCB3aXRoIHNwYWNlcywgbm90IHRhYnMKKyggd2hpbGUgcmVhZCB4CisgIGRvIGZvb2JhciBib3AgfHwgZXhpdCAxCisgIGRvbmUgPGZpbGUgKSAmJgorb3V0c2lkZSBzdWJzaGVsbApkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvY3VkZGxlZC5leHBlY3QgYi90L2NoYWlubGludC9jdWRkbGVkLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTA2ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvY3VkZGxlZC5leHBlY3QKQEAgLTAsMCArMSwyMSBAQAorKAorY2QgZm9vICYmCisJYmFyCis+KSAmJgorCisoCis/IUFNUD8hY2QgZm9vCisJYmFyCis+KSAmJgorCisoCisJY2QgZm9vICYmCis+CWJhcikgJiYKKworKAorY2QgZm9vICYmCis+CWJhcikgJiYKKworKAorPyFBTVA/IWNkIGZvbworPgliYXIpCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9jdWRkbGVkLnRlc3QgYi90L2NoYWlubGludC9jdWRkbGVkLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5OWZhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2N1ZGRsZWQudGVzdApAQCAtMCwwICsxLDIzIEBACisjIExJTlQ6IGZpcnN0IHN1YnNoZWxsIHN0YXRlbWVudCBjdWRkbGVkIHdpdGggb3BlbmluZyAiKCI7IGZvciBpbXBsZW1lbnRhdGlvbgorIyBMSU5UOiBzaW1wbGljaXR5LCAiKC4uLiIgaXMgc3BsaXQgaW50byB0d28gbGluZXMsICIoIiBhbmQgIi4uLiIKKyhjZCBmb28gJiYKKwliYXIKKykgJiYKKworIyBMSU5UOiBzYW1lIHdpdGggbWlzc2luZyAiJiYiCisoY2QgZm9vCisJYmFyCispICYmCisKKyMgTElOVDogY2xvc2luZyAiKSIgY3VkZGxlZCB3aXRoIGZpbmFsIHN1YnNoZWxsIHN0YXRlbWVudAorKAorCWNkIGZvbyAmJgorCWJhcikgJiYKKworIyBMSU5UOiAiKCIgYW5kICIpIiBjdWRkbGVkIHdpdGggZmlyc3QgYW5kIGZpbmFsIHN1YnNoZWxsIHN0YXRlbWVudHMKKyhjZCBmb28gJiYKKwliYXIpICYmCisKKyMgTElOVDogc2FtZSB3aXRoIG1pc3NpbmcgIiYmIgorKGNkIGZvbworCWJhcikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2V4aXQtbG9vcC5leHBlY3QgYi90L2NoYWlubGludC9leGl0LWxvb3AuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDhiZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9leGl0LWxvb3AuZXhwZWN0CkBAIC0wLDAgKzEsMjQgQEAKKygKKwlmb3IgaSBpbiBhIGIgYworCWRvCisJCWZvbyB8fCBleGl0IDEKKwkJYmFyICYmCisJCWJhegorCWRvbmUKKz4pICYmCisoCisJd2hpbGUgdHJ1ZQorCWRvCisJCWZvbyB8fCBleGl0IDEKKwkJYmFyICYmCisJCWJhegorCWRvbmUKKz4pICYmCisoCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgMTAKKwlkbworCQllY2hvICRpIHx8IGV4aXQKKwkJaT0kKCgkaSArIDEpKQorCWRvbmUKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9leGl0LWxvb3AudGVzdCBiL3QvY2hhaW5saW50L2V4aXQtbG9vcC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMDM4MjAKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9leGl0LWxvb3AudGVzdApAQCAtMCwwICsxLDI3IEBACisoCisJZm9yIGkgaW4gYSBiIGMKKwlkbworIyBMSU5UOiAifHwgZXhpdCB7bn0iIHZhbGlkIGZvci1sb29wIGVzY2FwZSBpbiBzdWJzaGVsbDsgbm8gIiYmIiBuZWVkZWQKKwkJZm9vIHx8IGV4aXQgMQorCQliYXIgJiYKKwkJYmF6CisJZG9uZQorKSAmJgorKAorCXdoaWxlIHRydWUKKwlkbworIyBMSU5UOiAifHwgZXhpdCB7bn0iIHZhbGlkIHdoaWxlLWxvb3AgZXNjYXBlIGluIHN1YnNoZWxsOyBubyAiJiYiIG5lZWRlZAorCQlmb28gfHwgZXhpdCAxCisJCWJhciAmJgorCQliYXoKKwlkb25lCispICYmCisoCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgMTAKKwlkbworIyBMSU5UOiAifHwgZXhpdCIgKHNhbnMgZXhpdCBjb2RlKSB2YWxpZCBlc2NhcGUgaW4gc3Vic2hlbGw7IG5vICImJiIgbmVlZGVkCisJCWVjaG8gJGkgfHwgZXhpdAorCQlpPSQoKCRpICsgMSkpCisJZG9uZQorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvZXhpdC1zdWJzaGVsbC5leHBlY3QgYi90L2NoYWlubGludC9leGl0LXN1YnNoZWxsLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjc4NDU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvZXhpdC1zdWJzaGVsbC5leHBlY3QKQEAgLTAsMCArMSw1IEBACisoCisJZm9vIHx8IGV4aXQgMQorCWJhciAmJgorCWJhegorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2V4aXQtc3Vic2hlbGwudGVzdCBiL3QvY2hhaW5saW50L2V4aXQtc3Vic2hlbGwudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZhYjY5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvZXhpdC1zdWJzaGVsbC50ZXN0CkBAIC0wLDAgKzEsNiBAQAorKAorIyBMSU5UOiAifHwgZXhpdCB7bn0iIHZhbGlkIHN1YnNoZWxsIGVzY2FwZSB3aXRob3V0IGh1cnRpbmcgJiYtY2hhaW4KKwlmb28gfHwgZXhpdCAxCisJYmFyICYmCisJYmF6CispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9mb3ItbG9vcC5leHBlY3QgYi90L2NoYWlubGludC9mb3ItbG9vcC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzY2Y1NgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2Zvci1sb29wLmV4cGVjdApAQCAtMCwwICsxLDExIEBACisoCisJZm9yIGkgaW4gYSBiIGMKKwlkbworPyFBTVA/IQkJZWNobyAkaQorCQljYXQKKz8hQU1QPyEJZG9uZQorCWZvciBpIGluIGEgYiBjOyBkbworCQllY2hvICRpICYmCisJCWNhdCAkaQorCWRvbmUKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9mb3ItbG9vcC50ZXN0IGIvdC9jaGFpbmxpbnQvZm9yLWxvb3AudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGI3NjI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvZm9yLWxvb3AudGVzdApAQCAtMCwwICsxLDE5IEBACisoCisjIExJTlQ6ICdmb3InLCAnZG8nLCAnZG9uZScgZG8gbm90IG5lZWQgIiYmIgorCWZvciBpIGluIGEgYiBjCisJZG8KKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdlY2hvJworCQllY2hvICRpCisjIExJTlQ6IGxhc3Qgc3RhdGVtZW50IG9mIHdoaWxlIGRvZXMgbm90IG5lZWQgIiYmIgorCQljYXQgPDwtXEVPRgorCQliYXIKKwkJRU9GCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBvbiAnZG9uZScKKwlkb25lCisKKyMgTElOVDogJ2RvJyBvbiBzYW1lIGxpbmUgYXMgJ2ZvcicKKwlmb3IgaSBpbiBhIGIgYzsgZG8KKwkJZWNobyAkaSAmJgorCQljYXQgJGkKKwlkb25lCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9oZXJlLWRvYy1jbG9zZS1zdWJzaGVsbC5leHBlY3QgYi90L2NoYWlubGludC9oZXJlLWRvYy1jbG9zZS1zdWJzaGVsbC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxMWUzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2hlcmUtZG9jLWNsb3NlLXN1YnNoZWxsLmV4cGVjdApAQCAtMCwwICsxLDIgQEAKKygKKz4JY2F0KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaGVyZS1kb2MtY2xvc2Utc3Vic2hlbGwudGVzdCBiL3QvY2hhaW5saW50L2hlcmUtZG9jLWNsb3NlLXN1YnNoZWxsLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1N2ZmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2hlcmUtZG9jLWNsb3NlLXN1YnNoZWxsLnRlc3QKQEAgLTAsMCArMSw1IEBACisoCisjIExJTlQ6IGxpbmUgY29udGFpbnMgaGVyZS1kb2MgYW5kIGNsb3NlcyBuZXN0ZWQgc3Vic2hlbGwKKwljYXQgPDwtXElOUFVUKQorCWZpenoKKwlJTlBVVApkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1jb21tYW5kLXN1YnN0LmV4cGVjdCBiL3QvY2hhaW5saW50L2hlcmUtZG9jLW11bHRpLWxpbmUtY29tbWFuZC1zdWJzdC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYjc1MgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2hlcmUtZG9jLW11bHRpLWxpbmUtY29tbWFuZC1zdWJzdC5leHBlY3QKQEAgLTAsMCArMSw1IEBACisoCisJeD0kKGJvYmJsZSAmJgorPyFBTVA/IT4+CQl3aWZmbGUpCisJZWNobyAkeAorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2hlcmUtZG9jLW11bHRpLWxpbmUtY29tbWFuZC1zdWJzdC50ZXN0IGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1jb21tYW5kLXN1YnN0LnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5YmM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2hlcmUtZG9jLW11bHRpLWxpbmUtY29tbWFuZC1zdWJzdC50ZXN0CkBAIC0wLDAgKzEsOSBAQAorKAorIyBMSU5UOiBsaW5lIGNvbnRhaW5zIGhlcmUtZG9jIGFuZCBvcGVucyBtdWx0aS1saW5lICQoLi4uKQorCXg9JChib2JibGUgPDwtXEVORCAmJgorCQlmb3NzaWwKKwkJdmVnZXRhYmxlCisJCUVORAorCQl3aWZmbGUpCisJZWNobyAkeAorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1zdHJpbmcuZXhwZWN0IGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1zdHJpbmcuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMDM4YTAKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9oZXJlLWRvYy1tdWx0aS1saW5lLXN0cmluZy5leHBlY3QKQEAgLTAsMCArMSw0IEBACisoCis/IUFNUD8hCWNhdCAmJiBlY2hvICJtdWx0aS1saW5lCXN0cmluZyIKKwliYXAKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9oZXJlLWRvYy1tdWx0aS1saW5lLXN0cmluZy50ZXN0IGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1zdHJpbmcudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNlZGJjCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MtbXVsdGktbGluZS1zdHJpbmcudGVzdApAQCAtMCwwICsxLDggQEAKKygKKyMgTElOVDogbGluZSBjb250YWlucyBoZXJlLWRvYyBhbmQgb3BlbnMgbXVsdGktbGluZSBzdHJpbmcKKwljYXQgPDwtXFRYVCAmJiBlY2hvICJtdWx0aS1saW5lCisJc3RyaW5nIgorCWZpenpsZQorCVRYVAorCWJhcAorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaGVyZS1kb2MuZXhwZWN0IGIvdC9jaGFpbmxpbnQvaGVyZS1kb2MuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNGIwNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9oZXJlLWRvYy5leHBlY3QKQEAgLTAsMCArMSw5IEBACitib29kbGUgd29iYmEgICAgICAgIGdvcmdvIHNub290ICAgICAgICB3YWZ0YSBzbnVyYiAmJgorCitjYXQgPmZvbyAmJgorCitjYXQgPmJhciAmJgorCitjYXQgPmJvbyAmJgorCitob3J0aWN1bHR1cmUKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2hlcmUtZG9jLnRlc3QgYi90L2NoYWlubGludC9oZXJlLWRvYy50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNGNlOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9oZXJlLWRvYy50ZXN0CkBAIC0wLDAgKzEsMzcgQEAKKyMgTElOVDogc3RpdGNoIHRvZ2V0aGVyIGluY29tcGxldGUgXC1lbmRpbmcgbGluZXMKKyMgTElOVDogc3dhbGxvdyBoZXJlLWRvYyB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgaW4gY29udGVudAorYm9vZGxlIHdvYmJhIFwKKyAgICAgICBnb3JnbyBzbm9vdCBcCisgICAgICAgd2FmdGEgc251cmIgPDxFT0YgJiYKK3F1b3RoIHRoZSByYXZlbiwKK25ldmVybW9yZS4uLgorRU9GCisKKyMgTElOVDogc3dhbGxvdyBoZXJlLWRvYyB3aXRoIGFyYml0cmFyeSB0YWcKK2NhdCA8PC1BcmJpdHJhcnlfVGFnXzQyID5mb28gJiYKK3Nub3oKK2Jvegord296CitBcmJpdHJhcnlfVGFnXzQyCisKKyMgTElOVDogc3dhbGxvdyAncXVvdGVkJyBoZXJlLWRvYworY2F0IDw8J0ZVTVAnID5iYXIgJiYKK3Nub3oKK2Jvegord296CitGVU1QCisKKyMgTElOVDogc3dhbGxvdyAicXVvdGVkIiBoZXJlLWRvYworY2F0IDw8Inp1bXAiID5ib28gJiYKK3Nub3oKK2Jvegord296Cit6dW1wCisKKyMgTElOVDogc3dhbGxvdyBoZXJlLWRvYyAoRU9GIGlzIGxhc3QgbGluZSBvZiB0ZXN0KQoraG9ydGljdWx0dXJlIDw8XEVPRgorZ29tZXoKK21vcnRpY2lhCit3ZWRuZXNkYXkKK3B1Z3NseQorRU9GCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9pZi1pbi1sb29wLmV4cGVjdCBiL3QvY2hhaW5saW50L2lmLWluLWxvb3AuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDNjZWIKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9pZi1pbi1sb29wLmV4cGVjdApAQCAtMCwwICsxLDEyIEBACisoCisJZm9yIGkgaW4gYSBiIGMKKwlkbworCQlpZiBmYWxzZQorCQl0aGVuCis/IUFNUD8hCQkJZWNobyAiZXJyIgorCQkJZXhpdCAxCis/IUFNUD8hCQlmaQorCQlmb28KKz8hQU1QPyEJZG9uZQorCWJhcgorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2lmLWluLWxvb3AudGVzdCBiL3QvY2hhaW5saW50L2lmLWluLWxvb3AudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWYyMmRhCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaWYtaW4tbG9vcC50ZXN0CkBAIC0wLDAgKzEsMTUgQEAKKygKKwlmb3IgaSBpbiBhIGIgYworCWRvCisJCWlmIGZhbHNlCisJCXRoZW4KKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdlY2hvJworCQkJZWNobyAiZXJyIgorCQkJZXhpdCAxCisjIExJTlQ6IG1pc3NpbmcgIiYmIiBvbiAnZmknCisJCWZpCisJCWZvbworIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2RvbmUnCisJZG9uZQorCWJhcgorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaWYtdGhlbi1lbHNlLmV4cGVjdCBiL3QvY2hhaW5saW50L2lmLXRoZW4tZWxzZS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1M2M3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2lmLXRoZW4tZWxzZS5leHBlY3QKQEAgLTAsMCArMSwxOSBAQAorKAorCWlmIHRlc3QgLW4gIiIKKwl0aGVuCis/IUFNUD8hCQllY2hvIHZlcnkKKwkJZWNobyBlbXB0eQorCWVsaWYgdGVzdCAteiAiIgorCQllY2hvIGZvbworCWVsc2UKKwkJZWNobyBmb28gJiYKKwkJY2F0Cis/IUFNUD8hCWZpCisJZWNobyBwb29kbGUKKz4pICYmCisoCisJaWYgdGVzdCAtbiAiIjsgdGhlbgorCQllY2hvIHZlcnkgJiYKKz8hQU1QPyEJCWVjaG8gZW1wdHkKKwlpZgorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2lmLXRoZW4tZWxzZS50ZXN0IGIvdC9jaGFpbmxpbnQvaWYtdGhlbi1lbHNlLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkOGU5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2lmLXRoZW4tZWxzZS50ZXN0CkBAIC0wLDAgKzEsMjggQEAKKygKKyMgTElOVDogJ2lmJywgJ3RoZW4nLCAnZWxpZicsICdlbHNlJywgJ2ZpJyBkbyBub3QgbmVlZCAiJiYiCisJaWYgdGVzdCAtbiAiIgorCXRoZW4KKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdlY2hvJworCQllY2hvIHZlcnkKKyMgTElOVDogbGFzdCBzdGF0ZW1lbnQgYmVmb3JlICdlbGlmJyBkb2VzIG5vdCBuZWVkICImJiIKKwkJZWNobyBlbXB0eQorCWVsaWYgdGVzdCAteiAiIgorIyBMSU5UOiBsYXN0IHN0YXRlbWVudCBiZWZvcmUgJ2Vsc2UnIGRvZXMgbm90IG5lZWQgIiYmIgorCQllY2hvIGZvbworCWVsc2UKKwkJZWNobyBmb28gJiYKKyMgTElOVDogbGFzdCBzdGF0ZW1lbnQgYmVmb3JlICdmaScgZG9lcyBub3QgbmVlZCAiJiYiCisJCWNhdCA8PC1cRU9GCisJCWJhcgorCQlFT0YKKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdmaScKKwlmaQorCWVjaG8gcG9vZGxlCispICYmCisoCisjIExJTlQ6ICd0aGVuJyBvbiBzYW1lIGxpbmUgYXMgJ2lmJworCWlmIHRlc3QgLW4gIiI7IHRoZW4KKwkJZWNobyB2ZXJ5ICYmCisJCWVjaG8gZW1wdHkKKwlpZgorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvaW5jb21wbGV0ZS1saW5lLmV4cGVjdCBiL3QvY2hhaW5saW50L2luY29tcGxldGUtbGluZS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzZWJhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2luY29tcGxldGUtbGluZS5leHBlY3QKQEAgLTAsMCArMSw0IEBACitsaW5lIDEgbGluZSAyIGxpbmUgMyBsaW5lIDQgJiYKKygKKwlsaW5lIDUgCWxpbmUgNiAJbGluZSA3IAlsaW5lIDgKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9pbmNvbXBsZXRlLWxpbmUudGVzdCBiL3QvY2hhaW5saW50L2luY29tcGxldGUtbGluZS50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTY2NTgKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9pbmNvbXBsZXRlLWxpbmUudGVzdApAQCAtMCwwICsxLDEyIEBACisjIExJTlQ6IHN0aXRjaCB0b2dldGhlciBhbGwgaW5jb21wbGV0ZSBcLWVuZGluZyBsaW5lcworbGluZSAxIFwKK2xpbmUgMiBcCitsaW5lIDMgXAorbGluZSA0ICYmCisoCisjIExJTlQ6IHN0aXRjaCB0b2dldGhlciBhbGwgaW5jb21wbGV0ZSBcLWVuZGluZyBsaW5lcyAoc3Vic2hlbGwpCisJbGluZSA1IFwKKwlsaW5lIDYgXAorCWxpbmUgNyBcCisJbGluZSA4CispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9pbmxpbmUtY29tbWVudC5leHBlY3QgYi90L2NoYWlubGludC9pbmxpbmUtY29tbWVudC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5ZjI1MAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2lubGluZS1jb21tZW50LmV4cGVjdApAQCAtMCwwICsxLDkgQEAKKygKKwlmb29iYXIgJiYKKz8hQU1QPyEJYmFyZm9vCisJZmxpYmJsZSAibm90IGEgIyBjb21tZW50IgorPikgJiYKKworKAorY2QgZm9vICYmCis+CWZsaWJibGUgIm5vdCBhICMgY29tbWVudCIpCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9pbmxpbmUtY29tbWVudC50ZXN0IGIvdC9jaGFpbmxpbnQvaW5saW5lLWNvbW1lbnQudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjI2ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvaW5saW5lLWNvbW1lbnQudGVzdApAQCAtMCwwICsxLDEyIEBACisoCisjIExJTlQ6IHN3YWxsb3cgaW5saW5lIGNvbW1lbnQgKGxlYXZpbmcgY29tbWFuZCBpbnRhY3QpCisJZm9vYmFyICYmICMgY29tbWVudCAxCisjIExJTlQ6IG1pc3Bvc2l0aW9uZWQgIiYmIiAoY29ycmVjdGx5KSBzd2FsbG93ZWQgd2l0aCBjb21tZW50CisJYmFyZm9vICMgd3JvbmcgcG9zaXRpb24gZm9yICYmCisjIExJTlQ6ICIjIiBpbiBzdHJpbmcgbm90IG1pc2ludGVycHJldGVkIGFzIGNvbW1lbnQKKwlmbGliYmxlICJub3QgYSAjIGNvbW1lbnQiCispICYmCisKKyMgTElOVDogIiMiIGluIHN0cmluZyBpbiBjdWRkbGVkIHN1YnNoZWxsIG5vdCBtaXNpbnRlcnByZXRlZCBhcyBjb21tZW50CisoY2QgZm9vICYmCisJZmxpYmJsZSAibm90IGEgIyBjb21tZW50IikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L2xvb3AtaW4taWYuZXhwZWN0IGIvdC9jaGFpbmxpbnQvbG9vcC1pbi1pZi5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4ZTYyMgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L2xvb3AtaW4taWYuZXhwZWN0CkBAIC0wLDAgKzEsMTIgQEAKKygKKwlpZiB0cnVlCisJdGhlbgorCQl3aGlsZSB0cnVlCisJCWRvCis/IUFNUD8hCQkJZWNobyAicG9wIgorCQkJZWNobyAiZ2x1cCIKKz8hQU1QPyEJCWRvbmUKKwkJZm9vCis/IUFNUD8hCWZpCisJYmFyCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbG9vcC1pbi1pZi50ZXN0IGIvdC9jaGFpbmxpbnQvbG9vcC1pbi1pZi50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZThiYTgKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9sb29wLWluLWlmLnRlc3QKQEAgLTAsMCArMSwxNSBAQAorKAorCWlmIHRydWUKKwl0aGVuCisJCXdoaWxlIHRydWUKKwkJZG8KKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdlY2hvJworCQkJZWNobyAicG9wIgorCQkJZWNobyAiZ2x1cCIKKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdkb25lJworCQlkb25lCisJCWZvbworIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2ZpJworCWZpCisJYmFyCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9tdWx0aS1saW5lLW5lc3RlZC1jb21tYW5kLXN1YnN0aXR1dGlvbi5leHBlY3QgYi90L2NoYWlubGludC9tdWx0aS1saW5lLW5lc3RlZC1jb21tYW5kLXN1YnN0aXR1dGlvbi5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliNmM4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L211bHRpLWxpbmUtbmVzdGVkLWNvbW1hbmQtc3Vic3RpdHV0aW9uLmV4cGVjdApAQCAtMCwwICsxLDE4IEBACisoCisJZm9vICYmCisJeD0kKAorCQllY2hvIGJhciB8CisJCWNhdAorPj4JKSAmJgorCWVjaG8gb2sKKz4pIHwKK3NvcnQgJiYKKygKKwliYXIgJiYKKwl4PSQoZWNobyBiYXIgfAorCQljYXQKKz4+CSkgJiYKKwl5PSQoZWNobyBiYXogfAorPj4JCWZpcCkgJiYKKwllY2hvIGZhaWwKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9tdWx0aS1saW5lLW5lc3RlZC1jb21tYW5kLXN1YnN0aXR1dGlvbi50ZXN0IGIvdC9jaGFpbmxpbnQvbXVsdGktbGluZS1uZXN0ZWQtY29tbWFuZC1zdWJzdGl0dXRpb24udGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDAwNTgzCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbXVsdGktbGluZS1uZXN0ZWQtY29tbWFuZC1zdWJzdGl0dXRpb24udGVzdApAQCAtMCwwICsxLDE4IEBACisoCisJZm9vICYmCisJeD0kKAorCQllY2hvIGJhciB8CisJCWNhdAorCSkgJiYKKwllY2hvIG9rCispIHwKK3NvcnQgJiYKKygKKwliYXIgJiYKKwl4PSQoZWNobyBiYXIgfAorCQljYXQKKwkpICYmCisJeT0kKGVjaG8gYmF6IHwKKwkJZmlwKSAmJgorCWVjaG8gZmFpbAorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbXVsdGktbGluZS1zdHJpbmcuZXhwZWN0IGIvdC9jaGFpbmxpbnQvbXVsdGktbGluZS1zdHJpbmcuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MGNiNTkKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9tdWx0aS1saW5lLXN0cmluZy5leHBlY3QKQEAgLTAsMCArMSwxNSBAQAorKAorCXg9ImxpbmUgMQkJbGluZSAyCQlsaW5lIDMiICYmCis/IUFNUD8hCXk9J2xpbmUgMQkJbGluZTInCisJZm9vYmFyCis+KSAmJgorKAorCWVjaG8gInRoZXJlJ3Mgbm90aGluZyB0byBzZWUgaGVyZSIgJiYKKwlleGl0Cis+KSAmJgorKAorCWVjaG8gInh5eiIgImFiYwkJZGVmCQlnaGkiICYmCisJZWNobyAneHl6JyAnYWJjCQlkZWYJCWdoaScgJiYKKwllY2hvICd4eXonICJhYmMJCWRlZgkJZ2hpIiAmJgorCWJhcmZvbworPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L211bHRpLWxpbmUtc3RyaW5nLnRlc3QgYi90L2NoYWlubGludC9tdWx0aS1saW5lLXN0cmluZy50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4N2FiODkKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9tdWx0aS1saW5lLXN0cmluZy50ZXN0CkBAIC0wLDAgKzEsMjcgQEAKKygKKwl4PSJsaW5lIDEKKwkJbGluZSAyCisJCWxpbmUgMyIgJiYKKyMgTElOVDogbWlzc2luZyAiJiYiIG9uIGFzc2lnbm1lbnQKKwl5PSdsaW5lIDEKKwkJbGluZTInCisJZm9vYmFyCispICYmCisoCisjIExJTlQ6IGFwb3N0cm9waGUgKGluIGEgY29udHJhY3Rpb24pIHdpdGhpbiBzdHJpbmcgbm90IG1pc2ludGVycHJldGVkIGFzCisjIExJTlQ6IHN0YXJ0aW5nIG11bHRpLWxpbmUgc2luZ2xlLXF1b3RlZCBzdHJpbmcKKwllY2hvICJ0aGVyZSdzIG5vdGhpbmcgdG8gc2VlIGhlcmUiICYmCisJZXhpdAorKSAmJgorKAorCWVjaG8gInh5eiIgImFiYworCQlkZWYKKwkJZ2hpIiAmJgorCWVjaG8gJ3h5eicgJ2FiYworCQlkZWYKKwkJZ2hpJyAmJgorCWVjaG8gJ3h5eicgImFiYworCQlkZWYKKwkJZ2hpIiAmJgorCWJhcmZvbworKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVnYXRlZC1vbmUtbGluZXIuZXhwZWN0IGIvdC9jaGFpbmxpbnQvbmVnYXRlZC1vbmUtbGluZXIuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMTg0MjkKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9uZWdhdGVkLW9uZS1saW5lci5leHBlY3QKQEAgLTAsMCArMSw1IEBACishIChmb28gJiYgYmFyKSAmJgorISAoZm9vICYmIGJhcikgPmJheiAmJgorCis/IVNFTUk/ISEgKGZvbzsgYmFyKSAmJgorPyFTRU1JPyEhIChmb287IGJhcikgPmJhegpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVnYXRlZC1vbmUtbGluZXIudGVzdCBiL3QvY2hhaW5saW50L25lZ2F0ZWQtb25lLWxpbmVyLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1OThlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L25lZ2F0ZWQtb25lLWxpbmVyLnRlc3QKQEAgLTAsMCArMSw3IEBACisjIExJTlQ6IHRvcC1sZXZlbCBvbmUtbGluZXIgc3Vic2hlbGwKKyEgKGZvbyAmJiBiYXIpICYmCishIChmb28gJiYgYmFyKSA+YmF6ICYmCisKKyMgTElOVDogdG9wLWxldmVsIG9uZS1saW5lciBzdWJzaGVsbCBtaXNzaW5nIGludGVybmFsICImJiIKKyEgKGZvbzsgYmFyKSAmJgorISAoZm9vOyBiYXIpID5iYXoKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L25lc3RlZC1jdWRkbGVkLXN1YnNoZWxsLmV4cGVjdCBiL3QvY2hhaW5saW50L25lc3RlZC1jdWRkbGVkLXN1YnNoZWxsLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE1OWZmCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbmVzdGVkLWN1ZGRsZWQtc3Vic2hlbGwuZXhwZWN0CkBAIC0wLDAgKzEsMTkgQEAKKygKKwkoY2QgZm9vICYmCisJCWJhcgorPj4JKSAmJgorCShjZCBmb28gJiYKKwkJYmFyCis/IUFNUD8hPj4JKQorCSgKKwkJY2QgZm9vICYmCis+PgkJYmFyKSAmJgorCSgKKwkJY2QgZm9vICYmCis/IUFNUD8hPj4JCWJhcikKKwkoY2QgZm9vICYmCis+PgkJYmFyKSAmJgorCShjZCBmb28gJiYKKz8hQU1QPyE+PgkJYmFyKQorCWZvb2JhcgorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L25lc3RlZC1jdWRkbGVkLXN1YnNoZWxsLnRlc3QgYi90L2NoYWlubGludC9uZXN0ZWQtY3VkZGxlZC1zdWJzaGVsbC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDY1NmMKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9uZXN0ZWQtY3VkZGxlZC1zdWJzaGVsbC50ZXN0CkBAIC0wLDAgKzEsMzEgQEAKKygKKyMgTElOVDogb3BlbmluZyAiKCIgY3VkZGxlZCB3aXRoIGZpcnN0IG5lc3RlZCBzdWJzaGVsbCBzdGF0ZW1lbnQKKwkoY2QgZm9vICYmCisJCWJhcgorCSkgJiYKKworIyBMSU5UOiBzYW1lIGJ1dCAiJiYiIG1pc3NpbmcKKwkoY2QgZm9vICYmCisJCWJhcgorCSkKKworIyBMSU5UOiBjbG9zaW5nICIpIiBjdWRkbGVkIHdpdGggZmluYWwgbmVzdGVkIHN1YnNoZWxsIHN0YXRlbWVudAorCSgKKwkJY2QgZm9vICYmCisJCWJhcikgJiYKKworIyBMSU5UOiBzYW1lIGJ1dCAiJiYiIG1pc3NpbmcKKwkoCisJCWNkIGZvbyAmJgorCQliYXIpCisKKyMgTElOVDogIigiIGFuZCAiKSIgY3VkZGxlZCB3aXRoIGZpcnN0IGFuZCBmaW5hbCBzdWJzaGVsbCBzdGF0ZW1lbnRzCisJKGNkIGZvbyAmJgorCQliYXIpICYmCisKKyMgTElOVDogc2FtZSBidXQgIiYmIiBtaXNzaW5nCisJKGNkIGZvbyAmJgorCQliYXIpCisKKwlmb29iYXIKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L25lc3RlZC1oZXJlLWRvYy5leHBlY3QgYi90L2NoYWlubGludC9uZXN0ZWQtaGVyZS1kb2MuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOWVmMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9uZXN0ZWQtaGVyZS1kb2MuZXhwZWN0CkBAIC0wLDAgKzEsNyBAQAorY2F0ID5mb29wICYmCisKKygKKwljYXQgJiYKKz8hQU1QPyEJY2F0CisJZm9vYmFyCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVzdGVkLWhlcmUtZG9jLnRlc3QgYi90L2NoYWlubGludC9uZXN0ZWQtaGVyZS1kb2MudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzU0MDRiCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvbmVzdGVkLWhlcmUtZG9jLnRlc3QKQEAgLTAsMCArMSwzMyBAQAorIyBMSU5UOiBpbm5lciAiRU9GIiBub3QgbWlzaW50cmVwcmV0ZWQgYXMgY2xvc2luZyBBUkJJVFJBUlkgaGVyZS1kb2MKK2NhdCA8PEFSQklUUkFSWSA+Zm9vcCAmJgorbmFkZGxlCitmdWIgPDxFT0YKKwlub3p6bGUKKwlub29kbGUKK0VPRgorZm9ybXAKK0FSQklUUkFSWQorCisoCisjIExJTlQ6IGlubmVyICJFT0YiIG5vdCBtaXNpbnRyZXByZXRlZCBhcyBjbG9zaW5nIElOUFVUX0VORCBoZXJlLWRvYworCWNhdCA8PC1cSU5QVVRfRU5EICYmCisJZmlzaCBhcmUgbWljZQorCWJ1dCBnZWVzZSBnbyBzbG93CisJZGF0YSA8PEVPRgorCQlwZXJsIGlzIGxlcnAKKwkJYW5kIG5vdGhpbmcgZWxzZQorCUVPRgorCXRvaW5rCisJSU5QVVRfRU5ECisKKyMgTElOVDogc2FtZSBidXQgbWlzc2luZyAiJiYiCisJY2F0IDw8LVxFT1QKKwl0ZXh0IGdvZXMgaGVyZQorCWRhdGEgPDxFT0YKKwkJZGF0YSBnb2VzIGhlcmUKKwlFT0YKKwltb3JlIHRlc3QgaGVyZQorCUVPVAorCisJZm9vYmFyCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9uZXN0ZWQtc3Vic2hlbGwtY29tbWVudC5leHBlY3QgYi90L2NoYWlubGludC9uZXN0ZWQtc3Vic2hlbGwtY29tbWVudC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViNjhkNAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC1jb21tZW50LmV4cGVjdApAQCAtMCwwICsxLDExIEBACisoCisJZm9vICYmCisJKAorCQliYXIgJiYKKwkJIyBib3R0bGVzIHdvYmJsZSB3aGlsZSBmaWRkbGVzIGdvYmJsZQorCQkjIG1pbm9yIG51bWJlcnMgb2YgY293cyAob3IgZG8gdGhleT8pCisJCWJheiAmJgorCQlzbmFmZgorPyFBTVA/IT4+CSkKKwlmdXp6eQorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC1jb21tZW50LnRlc3QgYi90L2NoYWlubGludC9uZXN0ZWQtc3Vic2hlbGwtY29tbWVudC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjEzNmEKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9uZXN0ZWQtc3Vic2hlbGwtY29tbWVudC50ZXN0CkBAIC0wLDAgKzEsMTMgQEAKKygKKwlmb28gJiYKKwkoCisJCWJhciAmJgorIyBMSU5UOiAiKSIgaW4gY29tbWVudCBpbiBuZXN0ZWQgc3Vic2hlbGwgbm90IG1pc2ludGVycHJldGVkIGFzIGNsb3NpbmcgIikiCisJCSMgYm90dGxlcyB3b2JibGUgd2hpbGUgZmlkZGxlcyBnb2JibGUKKwkJIyBtaW5vciBudW1iZXJzIG9mIGNvd3MgKG9yIGRvIHRoZXk/KQorCQliYXogJiYKKwkJc25hZmYKKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICcpJworCSkKKwlmdXp6eQorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvbmVzdGVkLXN1YnNoZWxsLmV4cGVjdCBiL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxNjVhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC5leHBlY3QKQEAgLTAsMCArMSwxMiBAQAorKAorCWNkIGZvbyAmJgorCSgKKwkJZWNobyBhICYmCisJCWVjaG8gYgorPj4JKSA+ZmlsZSAmJgorCWNkIGZvbyAmJgorCSgKKwkJZWNobyBhCisJCWVjaG8gYgorPj4JKSA+ZmlsZQorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC50ZXN0IGIvdC9jaGFpbmxpbnQvbmVzdGVkLXN1YnNoZWxsLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4YjA1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L25lc3RlZC1zdWJzaGVsbC50ZXN0CkBAIC0wLDAgKzEsMTQgQEAKKygKKwljZCBmb28gJiYKKwkoCisJCWVjaG8gYSAmJgorCQllY2hvIGIKKwkpID5maWxlICYmCisKKwljZCBmb28gJiYKKwkoCisjIExJTlQ6IG5lc3RlZCBtdWx0aS1saW5lIHN1YnNoZWxsIG5vdCBwcmVzZW50bHkgY2hlY2tlZCBmb3IgbWlzc2luZyAiJiYiCisJCWVjaG8gYQorCQllY2hvIGIKKwkpID5maWxlCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9vbmUtbGluZXIuZXhwZWN0IGIvdC9jaGFpbmxpbnQvb25lLWxpbmVyLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzdmMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvb25lLWxpbmVyLmV4cGVjdApAQCAtMCwwICsxLDkgQEAKKyhmb28gJiYgYmFyKSAmJgorKGZvbyAmJiBiYXIpIHwKKyhmb28gJiYgYmFyKSA+YmF6ICYmCisKKz8hU0VNST8hKGZvbzsgYmFyKSAmJgorPyFTRU1JPyEoZm9vOyBiYXIpIHwKKz8hU0VNST8hKGZvbzsgYmFyKSA+YmF6CisKKyhmb28gImJhcjsgYmF6IikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L29uZS1saW5lci50ZXN0IGIvdC9jaGFpbmxpbnQvb25lLWxpbmVyLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5YWNiOQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L29uZS1saW5lci50ZXN0CkBAIC0wLDAgKzEsMTIgQEAKKyMgTElOVDogdG9wLWxldmVsIG9uZS1saW5lciBzdWJzaGVsbAorKGZvbyAmJiBiYXIpICYmCisoZm9vICYmIGJhcikgfAorKGZvbyAmJiBiYXIpID5iYXogJiYKKworIyBMSU5UOiB0b3AtbGV2ZWwgb25lLWxpbmVyIHN1YnNoZWxsIG1pc3NpbmcgaW50ZXJuYWwgIiYmIgorKGZvbzsgYmFyKSAmJgorKGZvbzsgYmFyKSB8CisoZm9vOyBiYXIpID5iYXoKKworIyBMSU5UOiAiOyIgaW4gc3RyaW5nIG5vdCBtaXNpbnRlcnByZXRlZCBhcyBicm9rZW4gJiYtY2hhaW4KKyhmb28gImJhcjsgYmF6IikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3A0LWZpbGVzcGVjLmV4cGVjdCBiL3QvY2hhaW5saW50L3A0LWZpbGVzcGVjLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGIzZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvcDQtZmlsZXNwZWMuZXhwZWN0CkBAIC0wLDAgKzEsNCBAQAorKAorCXA0IHByaW50IC0xIC8vZGVwb3QvZmlkZGxlIzQyID5maWxlICYmCisJZm9vYmFyCis+KQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvcDQtZmlsZXNwZWMudGVzdCBiL3QvY2hhaW5saW50L3A0LWZpbGVzcGVjLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkMmQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3A0LWZpbGVzcGVjLnRlc3QKQEAgLTAsMCArMSw1IEBACisoCisjIExJTlQ6IFBlcmZvcmNlIHJldnNwZWMgaW4gZmlsZXNwZWMgbm90IG1pc2ludGVycHJldGVkIGFzIGluLWxpbmUgY29tbWVudAorCXA0IHByaW50IC0xIC8vZGVwb3QvZmlkZGxlIzQyID5maWxlICYmCisJZm9vYmFyCispCmRpZmYgLS1naXQgYS90L2NoYWlubGludC9waXBlLmV4cGVjdCBiL3QvY2hhaW5saW50L3BpcGUuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWI5MDEKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9waXBlLmV4cGVjdApAQCAtMCwwICsxLDggQEAKKygKKwlmb28gfAorCWJhciB8CisJYmF6ICYmCisJZmlzaCB8Cis/IUFNUD8hCWNvdworCXN1bmRlcgorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3BpcGUudGVzdCBiL3QvY2hhaW5saW50L3BpcGUudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFmNGRlCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvcGlwZS50ZXN0CkBAIC0wLDAgKzEsMTIgQEAKKygKKyMgTElOVDogbm8gIiYmIiBuZWVkZWQgb24gbGluZSBlbmRpbmcgd2l0aCAifCIKKwlmb28gfAorCWJhciB8CisJYmF6ICYmCisKKyMgTElOVDogZmluYWwgbGluZSBvZiBwaXBlIHNlcXVlbmNlICgnY293JykgbGFja2luZyAiJiYiCisJZmlzaCB8CisJY293CisKKwlzdW5kZXIKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3NlbWljb2xvbi5leHBlY3QgYi90L2NoYWlubGludC9zZW1pY29sb24uZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzkzODQKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9zZW1pY29sb24uZXhwZWN0CkBAIC0wLDAgKzEsMjAgQEAKKygKKz8hQU1QPyE/IVNFTUk/IQljYXQgZm9vIDsgZWNobyBiYXIKKz8hU0VNST8hCWNhdCBmb28gOyBlY2hvIGJhcgorPikgJiYKKygKKz8hU0VNST8hCWNhdCBmb28gOyBlY2hvIGJhciAmJgorPyFTRU1JPyEJY2F0IGZvbyA7IGVjaG8gYmFyCis+KSAmJgorKAorCWVjaG8gImZvbzsgYmFyIiAmJgorPyFTRU1JPyEJY2F0IGZvbzsgZWNobyBiYXIKKz4pICYmCisoCis/IVNFTUk/IQlmb287Cis+KSAmJgorKAorY2QgZm9vICYmCisJZm9yIGkgaW4gYSBiIGM7IGRvCis/IVNFTUk/IQkJZWNobzsKKz4JZG9uZSkKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3NlbWljb2xvbi50ZXN0IGIvdC9jaGFpbmxpbnQvc2VtaWNvbG9uLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyYzhlYgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3NlbWljb2xvbi50ZXN0CkBAIC0wLDAgKzEsMjUgQEAKKygKKyMgTElOVDogbWlzc2luZyBpbnRlcm5hbCAiJiYiIGFuZCBlbmRpbmcgIiYmIgorCWNhdCBmb28gOyBlY2hvIGJhcgorIyBMSU5UOiBmaW5hbCBzdGF0ZW1lbnQgYmVmb3JlICIpIiBvbmx5IG1pc3NpbmcgaW50ZXJuYWwgIiYmIgorCWNhdCBmb28gOyBlY2hvIGJhcgorKSAmJgorKAorIyBMSU5UOiBtaXNzaW5nIGludGVybmFsICImJiIKKwljYXQgZm9vIDsgZWNobyBiYXIgJiYKKwljYXQgZm9vIDsgZWNobyBiYXIKKykgJiYKKygKKyMgTElOVDogbm90IGZvb2xlZCBieSBzZW1pY29sb24gaW4gc3RyaW5nCisJZWNobyAiZm9vOyBiYXIiICYmCisJY2F0IGZvbzsgZWNobyBiYXIKKykgJiYKKygKKyMgTElOVDogdW5uZWNlc3NhcnkgdGVybWluYXRpbmcgc2VtaWNvbG9uCisJZm9vOworKSAmJgorKGNkIGZvbyAmJgorCWZvciBpIGluIGEgYiBjOyBkbworIyBMSU5UOiB1bm5lY2Vzc2FyeSB0ZXJtaW5hdGluZyBzZW1pY29sb24KKwkJZWNobzsKKwlkb25lKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvc3Vic2hlbGwtaGVyZS1kb2MuZXhwZWN0IGIvdC9jaGFpbmxpbnQvc3Vic2hlbGwtaGVyZS1kb2MuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NzIzZTcKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9zdWJzaGVsbC1oZXJlLWRvYy5leHBlY3QKQEAgLTAsMCArMSwxMSBAQAorKAorCWVjaG8gd29iYmEgCSAgICAgICBnb3JnbyBzbm9vdCAJICAgICAgIHdhZnRhIHNudXJiICYmCis/IUFNUD8hCWNhdCA+YmlwCisJZWNobyA+Ym9wCis+KSAmJgorKAorCWNhdCA+YnVwICYmCisJY2F0ID5idXAyICYmCisJY2F0ID5idXAzICYmCisJbWVlcAorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3N1YnNoZWxsLWhlcmUtZG9jLnRlc3QgYi90L2NoYWlubGludC9zdWJzaGVsbC1oZXJlLWRvYy50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjNiYTQKLS0tIC9kZXYvbnVsbAorKysgYi90L2NoYWlubGludC9zdWJzaGVsbC1oZXJlLWRvYy50ZXN0CkBAIC0wLDAgKzEsMzkgQEAKKygKKyMgTElOVDogc3RpdGNoIHRvZ2V0aGVyIGluY29tcGxldGUgXC1lbmRpbmcgbGluZXMKKyMgTElOVDogc3dhbGxvdyBoZXJlLWRvYyB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgaW4gY29udGVudAorCWVjaG8gd29iYmEgXAorCSAgICAgICBnb3JnbyBzbm9vdCBcCisJICAgICAgIHdhZnRhIHNudXJiIDw8LUVPRiAmJgorCXF1b3RoIHRoZSByYXZlbiwKKwluZXZlcm1vcmUuLi4KKwlFT0YKKworIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2NhdCcKKwljYXQgPDxFT0YgPmJpcAorCWZpc2ggZmx5IGhpZ2gKKwlFT0YKKworIyBMSU5UOiBzd2FsbG93IGhlcmUtZG9jIChFT0YgaXMgbGFzdCBsaW5lIG9mIHN1YnNoZWxsKQorCWVjaG8gPDwtXEVPRiA+Ym9wCisJZ29tZXoKKwltb3J0aWNpYQorCXdlZG5lc2RheQorCXB1Z3NseQorCUVPRgorKSAmJgorKAorIyBMSU5UOiBzd2FsbG93IGhlcmUtZG9jIHdpdGggYXJiaXRyYXJ5IHRhZworCWNhdCA8PC1cQVJCSVRSQVJZID5idXAgJiYKKwlnbGluaworCUZJWloKKwlBUkJJVFJBUlkKKwljYXQgPDwtJ0FSQklUUkFSWTInID5idXAyICYmCisJZ2xpbmsKKwlGSVpaCisJQVJCSVRSQVJZMgorCWNhdCA8PC0iQVJCSVRSQVJZMyIgPmJ1cDMgJiYKKwlnbGluaworCUZJWloKKwlBUkJJVFJBUlkzCisJbWVlcAorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvc3Vic2hlbGwtb25lLWxpbmVyLmV4cGVjdCBiL3QvY2hhaW5saW50L3N1YnNoZWxsLW9uZS1saW5lci5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExNjI4MgotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3N1YnNoZWxsLW9uZS1saW5lci5leHBlY3QKQEAgLTAsMCArMSwxNCBAQAorKAorCShmb28gJiYgYmFyKSAmJgorCShmb28gJiYgYmFyKSB8CisJKGZvbyAmJiBiYXIpID5iYXogJiYKKz8hU0VNST8hCShmb287IGJhcikgJiYKKz8hU0VNST8hCShmb287IGJhcikgfAorPyFTRU1JPyEJKGZvbzsgYmFyKSA+YmF6ICYmCisJKGZvbyB8fCBleGl0IDEpICYmCisJKGZvbyB8fCBleGl0IDEpIHwKKwkoZm9vIHx8IGV4aXQgMSkgPmJheiAmJgorPyFBTVA/IQkoZm9vICYmIGJhcikKKz8hQU1QPyE/IVNFTUk/IQkoZm9vICYmIGJhcjsgYmF6KQorCWZvb2JhcgorPikKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3N1YnNoZWxsLW9uZS1saW5lci50ZXN0IGIvdC9jaGFpbmxpbnQvc3Vic2hlbGwtb25lLWxpbmVyLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmYTY0MwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3N1YnNoZWxsLW9uZS1saW5lci50ZXN0CkBAIC0wLDAgKzEsMjQgQEAKKygKKyMgTElOVDogbmVzdGVkIG9uZS1saW5lciBzdWJzaGVsbAorCShmb28gJiYgYmFyKSAmJgorCShmb28gJiYgYmFyKSB8CisJKGZvbyAmJiBiYXIpID5iYXogJiYKKworIyBMSU5UOiBuZXN0ZWQgb25lLWxpbmVyIHN1YnNoZWxsIG1pc3NpbmcgaW50ZXJuYWwgIiYmIgorCShmb287IGJhcikgJiYKKwkoZm9vOyBiYXIpIHwKKwkoZm9vOyBiYXIpID5iYXogJiYKKworIyBMSU5UOiBuZXN0ZWQgb25lLWxpbmVyIHN1YnNoZWxsIHdpdGggInx8IGV4aXQiCisJKGZvbyB8fCBleGl0IDEpICYmCisJKGZvbyB8fCBleGl0IDEpIHwKKwkoZm9vIHx8IGV4aXQgMSkgPmJheiAmJgorCisjIExJTlQ6IG5lc3RlZCBvbmUtbGluZXIgc3Vic2hlbGwgbGFja2luZyBlbmRpbmcgIiYmIgorCShmb28gJiYgYmFyKQorCisjIExJTlQ6IG5lc3RlZCBvbmUtbGluZXIgc3Vic2hlbGwgbWlzc2luZyBpbnRlcm5hbCAiJiYiIGFuZCBsYWNraW5nIGVuZGluZyAiJiYiCisJKGZvbyAmJiBiYXI7IGJheikKKworCWZvb2JhcgorKQpkaWZmIC0tZ2l0IGEvdC9jaGFpbmxpbnQvdDc5MDAtc3VidHJlZS5leHBlY3QgYi90L2NoYWlubGludC90NzkwMC1zdWJ0cmVlLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTkxMzQyCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGFpbmxpbnQvdDc5MDAtc3VidHJlZS5leHBlY3QKQEAgLTAsMCArMSwxMCBAQAorKAorCWNoa3M9InN1YjFzdWIyc3ViM3N1YjQiICYmCisJY2hrc19zdWI9JChjYXQgfCBzZWQgJ3MsXixzdWIgZGlyLywnCis+PikgJiYKKwljaGttcz0ibWFpbi1zdWIxbWFpbi1zdWIybWFpbi1zdWIzbWFpbi1zdWI0IiAmJgorCWNoa21zX3N1Yj0kKGNhdCB8IHNlZCAncyxeLHN1YiBkaXIvLCcKKz4+KSAmJgorCXN1YmZpbGVzPSQoZ2l0IGxzLWZpbGVzKSAmJgorCWNoZWNrX2VxdWFsICIkc3ViZmlsZXMiICIkY2hrbXMkY2hrcyIKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC90NzkwMC1zdWJ0cmVlLnRlc3QgYi90L2NoYWlubGludC90NzkwMC1zdWJ0cmVlLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3ZDgzNQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3Q3OTAwLXN1YnRyZWUudGVzdApAQCAtMCwwICsxLDIyIEBACisoCisJY2hrcz0ic3ViMQorc3ViMgorc3ViMworc3ViNCIgJiYKKwljaGtzX3N1Yj0kKGNhdCA8PFRYVCB8IHNlZCAncyxeLHN1YiBkaXIvLCcKKyRjaGtzCitUWFQKKykgJiYKKwljaGttcz0ibWFpbi1zdWIxCittYWluLXN1YjIKK21haW4tc3ViMworbWFpbi1zdWI0IiAmJgorCWNoa21zX3N1Yj0kKGNhdCA8PFRYVCB8IHNlZCAncyxeLHN1YiBkaXIvLCcKKyRjaGttcworVFhUCispICYmCisKKwlzdWJmaWxlcz0kKGdpdCBscy1maWxlcykgJiYKKwljaGVja19lcXVhbCAiJHN1YmZpbGVzIiAiJGNoa21zCiskY2hrcyIKKykKZGlmZiAtLWdpdCBhL3QvY2hhaW5saW50L3doaWxlLWxvb3AuZXhwZWN0IGIvdC9jaGFpbmxpbnQvd2hpbGUtbG9vcC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjZmYyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3doaWxlLWxvb3AuZXhwZWN0CkBAIC0wLDAgKzEsMTEgQEAKKygKKwl3aGlsZSB0cnVlCisJZG8KKz8hQU1QPyEJCWVjaG8gZm9vCisJCWNhdAorPyFBTVA/IQlkb25lCisJd2hpbGUgdHJ1ZTsgZG8KKwkJZWNobyBmb28gJiYKKwkJY2F0IGJhcgorCWRvbmUKKz4pCmRpZmYgLS1naXQgYS90L2NoYWlubGludC93aGlsZS1sb29wLnRlc3QgYi90L2NoYWlubGludC93aGlsZS1sb29wLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkZjA4NQotLS0gL2Rldi9udWxsCisrKyBiL3QvY2hhaW5saW50L3doaWxlLWxvb3AudGVzdApAQCAtMCwwICsxLDE5IEBACisoCisjIExJTlQ6ICd3aGlsZSwgJ2RvJywgJ2RvbmUnIGRvIG5vdCBuZWVkICImJiIKKwl3aGlsZSB0cnVlCisJZG8KKyMgTElOVDogbWlzc2luZyAiJiYiIG9uICdlY2hvJworCQllY2hvIGZvbworIyBMSU5UOiBsYXN0IHN0YXRlbWVudCBvZiB3aGlsZSBkb2VzIG5vdCBuZWVkICImJiIKKwkJY2F0IDw8LVxFT0YKKwkJYmFyCisJCUVPRgorIyBMSU5UOiBtaXNzaW5nICImJiIgb24gJ2RvbmUnCisJZG9uZQorCisjIExJTlQ6ICdkbycgb24gc2FtZSBsaW5lIGFzICd3aGlsZScKKwl3aGlsZSB0cnVlOyBkbworCQllY2hvIGZvbyAmJgorCQljYXQgYmFyCisJZG9uZQorKQpkaWZmIC0tZ2l0IGEvdC9jaGVjay1ub24tcG9ydGFibGUtc2hlbGwucGwgYi90L2NoZWNrLW5vbi1wb3J0YWJsZS1zaGVsbC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDMzMDM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9jaGVjay1ub24tcG9ydGFibGUtc2hlbGwucGwKQEAgLTAsMCArMSw1NSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgVGVzdCB0MDAwMC4udDk5OTkuc2ggZm9yIG5vbiBwb3J0YWJsZSBzaGVsbCBzY3JpcHRzCisjIFRoaXMgc2NyaXB0IGNhbiBiZSBjYWxsZWQgd2l0aCBvbmUgb3IgbW9yZSBmaWxlbmFtZXMgYXMgcGFyYW1ldGVycworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitteSAkZXhpdF9jb2RlPTA7CitteSAlZnVuYzsKKworc3ViIGVyciB7CisJbXkgJG1zZyA9IHNoaWZ0OworCXMvXlxzKy8vOworCXMvXHMrJC8vOworCXMvXHMrLyAvZzsKKwlwcmludCAiJEFSR1Y6JC46IGVycm9yOiAkbXNnOiAkX1xuIjsKKwkkZXhpdF9jb2RlID0gMTsKK30KKworIyBnbGVhbiBuYW1lcyBvZiBzaGVsbCBmdW5jdGlvbnMKK2ZvciBteSAkaSAoQEFSR1YpIHsKKwlvcGVuKG15ICRmLCAnPCcsICRpKSBvciBkaWUgIiQwOiAkaTogJCFcbiI7CisJd2hpbGUgKDwkZj4pIHsKKwkJJGZ1bmN7JDF9ID0gMSBpZiAvXlxzKihcdyspXHMqXChcKVxzKntccyokLzsKKwl9CisJY2xvc2UgJGY7Cit9CisKK215ICRsaW5lID0gJyc7Cit3aGlsZSAoPD4pIHsKKwljaG9tcDsKKwkkbGluZSAuPSAkXzsKKwkjIHN0aXRjaCB0b2dldGhlciBpbmNvbXBsZXRlIGxpbmVzICh0aG9zZSBlbmRpbmcgd2l0aCAiXCIpCisJbmV4dCBpZiAkbGluZSA9fiBzL1xcJC8vOworCisJJF8gPSAkbGluZTsKKwkvXGJjcFxzKy1hLyBhbmQgZXJyICdjcCAtYSBpcyBub3QgcG9ydGFibGUnOworCS9cYnNlZFxzKy1bXmVmbl1ccysvIGFuZCBlcnIgJ3NlZCBvcHRpb24gbm90IHBvcnRhYmxlICh1c2Ugb25seSAtbiwgLWUsIC1mKSc7CisJL1xiZWNob1xzKy1bbmVFXS8gYW5kIGVyciAnZWNobyB3aXRoIG9wdGlvbiBpcyBub3QgcG9ydGFibGUgKHVzZSBwcmludGYpJzsKKwkvXlxzKmRlY2xhcmVccysvIGFuZCBlcnIgJ2FycmF5cy9kZWNsYXJlIG5vdCBwb3J0YWJsZSc7CisJL15ccypbXiNdXHMqd2hpY2hccy8gYW5kIGVyciAnd2hpY2ggaXMgbm90IHBvcnRhYmxlICh1c2UgdHlwZSknOworCS9cYnRlc3RccytbXj1dKj09LyBhbmQgZXJyICcidGVzdCBhID09IGIiIGlzIG5vdCBwb3J0YWJsZSAodXNlID0pJzsKKwkvXGJ3YyAtbC4qIlxzKj0vIGFuZCBlcnIgJ2AiJCh3YyAtbCkiYCBpcyBub3QgcG9ydGFibGUgKHVzZSB0ZXN0X2xpbmVfY291bnQpJzsKKwkvXGJoZWFkXHMrLWNcYi8gYW5kIGVyciAnaGVhZCAtYyBpcyBub3QgcG9ydGFibGUgKHVzZSB0ZXN0X2NvcHlfYnl0ZXMgQllURVMgPGZpbGUgPm91dCknOworCS8oPzpcJFwoc2VxfF5ccypzZXFcYikvIGFuZCBlcnIgJ3NlcSBpcyBub3QgcG9ydGFibGUgKHVzZSB0ZXN0X3NlcSknOworCS9cYmdyZXBcYi4qLS1maWxlXGIvIGFuZCBlcnIgJ2dyZXAgLS1maWxlIEZJTEUgaXMgbm90IHBvcnRhYmxlICh1c2UgZ3JlcCAtZiBGSUxFKSc7CisJL1xiZXhwb3J0XHMrW0EtWmEtejAtOV9dKj0vIGFuZCBlcnIgJyJleHBvcnQgRk9PPWJhciIgaXMgbm90IHBvcnRhYmxlICh1c2UgRk9PPWJhciAmJiBleHBvcnQgRk9PKSc7CisJL15ccyooW0EtWjAtOV9dKz0oXHcqfChbIiddKS4qP1wzKVxzKykrKFx3KykvIGFuZCBleGlzdHMoJGZ1bmN7JDR9KSBhbmQKKwkJZXJyICciRk9PPWJhciBzaGVsbF9mdW5jIiBhc3NpZ25tZW50IGV4dGVuZHMgYmV5b25kICJzaGVsbF9mdW5jIic7CisJJGxpbmUgPSAnJzsKKwkjIHRoaXMgcmVzZXRzIG91ciAkLiBmb3IgZWFjaCBmaWxlCisJY2xvc2UgQVJHViBpZiBlb2Y7Cit9CitleGl0ICRleGl0X2NvZGU7CmRpZmYgLS1naXQgYS90L2RpZmYtbGliLnNoIGIvdC9kaWZmLWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGU4ODBmCi0tLSAvZGV2L251bGwKKysrIGIvdC9kaWZmLWxpYi5zaApAQCAtMCwwICsxLDM5IEBACis6CisKK3Nhbml0aXplX2RpZmZfcmF3PScvXjovcy8gJyJcKCRPSURfUkVHRVhcKSInICciXCgkT0lEX1JFR0VYXCkiJyBcKFtBLVpdXClbMC05XSoJLyBcMSBcMiBcMyMJLycKK2NvbXBhcmVfZGlmZl9yYXcgKCkgeworICAgICMgV2hlbiBoZXVyaXN0aWNzIGFyZSBpbXByb3ZlZCwgdGhlIHNjb3JlIG51bWJlcnMgd291bGQgY2hhbmdlLgorICAgICMgSWdub3JlIHRoZW0gd2hpbGUgY29tcGFyaW5nLgorICAgICMgQWxzbyB3ZSBkbyBub3QgY2hlY2sgU0hBMSBoYXNoIGdlbmVyYXRpb24gaW4gdGhpcyB0ZXN0LCB3aGljaAorICAgICMgaXMgYSBqb2IgZm9yIHQwMDAwLWJhc2ljLnNoCisKKyAgICBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3JhdyIgPCIkMSIgPi50bXAtMQorICAgIHNlZCAtZSAiJHNhbml0aXplX2RpZmZfcmF3IiA8IiQyIiA+LnRtcC0yCisgICAgdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCit9CisKK3Nhbml0aXplX2RpZmZfcmF3X3o9Jy9eOi9zLyAnIiRPSURfUkVHRVgiJyAnIiRPSURfUkVHRVgiJyBcKFtBLVpdXClbMC05XSokLyBYIFggXDEjLycKK2NvbXBhcmVfZGlmZl9yYXdfeiAoKSB7CisgICAgIyBXaGVuIGhldXJpc3RpY3MgYXJlIGltcHJvdmVkLCB0aGUgc2NvcmUgbnVtYmVycyB3b3VsZCBjaGFuZ2UuCisgICAgIyBJZ25vcmUgdGhlbSB3aGlsZSBjb21wYXJpbmcuCisgICAgIyBBbHNvIHdlIGRvIG5vdCBjaGVjayBTSEExIGhhc2ggZ2VuZXJhdGlvbiBpbiB0aGlzIHRlc3QsIHdoaWNoCisgICAgIyBpcyBhIGpvYiBmb3IgdDAwMDAtYmFzaWMuc2gKKworICAgIHBlcmwgLXBlICd5L1wwMDAvXDAxMi8nIDwiJDEiIHwgc2VkIC1lICIkc2FuaXRpemVfZGlmZl9yYXdfeiIgPi50bXAtMQorICAgIHBlcmwgLXBlICd5L1wwMDAvXDAxMi8nIDwiJDIiIHwgc2VkIC1lICIkc2FuaXRpemVfZGlmZl9yYXdfeiIgPi50bXAtMgorICAgIHRlc3RfY21wIC50bXAtMSAudG1wLTIgJiYgcm0gLWYgLnRtcC0xIC50bXAtMgorfQorCitjb21wYXJlX2RpZmZfcGF0Y2ggKCkgeworICAgICMgV2hlbiBoZXVyaXN0aWNzIGFyZSBpbXByb3ZlZCwgdGhlIHNjb3JlIG51bWJlcnMgd291bGQgY2hhbmdlLgorICAgICMgSWdub3JlIHRoZW0gd2hpbGUgY29tcGFyaW5nLgorICAgIHNlZCAtZSAnCisJL15bZGlzXSppbWlsYXJpdHkgaW5kZXggWzAtOV0qJSQvZAorCS9eaW5kZXggWzAtOWEtZl0qXC5cLlswLTlhLWZdL2QKKyAgICAnIDwiJDEiID4udG1wLTEKKyAgICBzZWQgLWUgJworCS9eW2Rpc10qaW1pbGFyaXR5IGluZGV4IFswLTldKiUkL2QKKwkvXmluZGV4IFswLTlhLWZdKlwuXC5bMC05YS1mXS9kCisgICAgJyA8IiQyIiA+LnRtcC0yCisgICAgdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCit9CmRpZmYgLS1naXQgYS90L2RpZmYtbGliL0NPUFlJTkcgYi90L2RpZmYtbGliL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmODdjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvZGlmZi1saWIvQ09QWUlORwpAQCAtMCwwICsxLDM2MSBAQAorCisgTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEdQTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CisgaXMgY29uY2VybmVkIGlzIF90aGlzXyBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgKGllIHYyLCBub3QKKyB2Mi4yIG9yIHYzLnggb3Igd2hhdGV2ZXIpLCB1bmxlc3MgZXhwbGljaXRseSBvdGhlcndpc2Ugc3RhdGVkLgorCisgSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCisgYSBnb29kIGlkZWEsIEkgYWxzbyBhc2sgdGhhdCBwZW9wbGUgaW52b2x2ZWQgd2l0aCB0aGUgcHJvamVjdCBtYWtlCisgdGhlaXIgcHJlZmVyZW5jZXMga25vd24uIEluIHBhcnRpY3VsYXIsIGlmIHlvdSB0cnVzdCBtZSB0byBtYWtlIHRoYXQKKyBkZWNpc2lvbiwgeW91IG1pZ2h0IG5vdGUgc28gaW4geW91ciBjb3B5cmlnaHQgbWVzc2FnZSwgaWUgc29tZXRoaW5nCisgbGlrZQorCisJVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgorCWF0IHRoZSBkaXNjcmV0aW9uIG9mIExpbnVzLgorCisgIG1pZ2h0IGF2b2lkIGlzc3Vlcy4gQnV0IHdlIGNhbiBhbHNvIGp1c3QgZGVjaWRlIHRvIHN5bmNocm9uaXplIGFuZAorICBjb250YWN0IGFsbCBjb3B5cmlnaHQgaG9sZGVycyBvbiByZWNvcmQgaWYvd2hlbiB0aGUgb2NjYXNpb24gYXJpc2VzLgorCisJCQlMaW51cyBUb3J2YWxkcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS90L2RpZmYtbGliL1JFQURNRSBiL3QvZGlmZi1saWIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODE0MmMKLS0tIC9kZXYvbnVsbAorKysgYi90L2RpZmYtbGliL1JFQURNRQpAQCAtMCwwICsxLDQ2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwlHSVQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyJnaXQiIGNhbiBtZWFuIGFueXRoaW5nLCBkZXBlbmRpbmcgb24geW91ciBtb29kLgorCisgLSByYW5kb20gdGhyZWUtbGV0dGVyIGNvbWJpbmF0aW9uIHRoYXQgaXMgcHJvbm91bmNlYWJsZSwgYW5kIG5vdAorICAgYWN0dWFsbHkgdXNlZCBieSBhbnkgY29tbW9uIFVOSVggY29tbWFuZC4gIFRoZSBmYWN0IHRoYXQgaXQgaXMgYQorICAgbWlzcHJvbnVuY2lhdGlvbiBvZiAiZ2V0IiBtYXkgb3IgbWF5IG5vdCBiZSByZWxldmFudC4KKyAtIHN0dXBpZC4gY29udGVtcHRpYmxlIGFuZCBkZXNwaWNhYmxlLiBzaW1wbGUuIFRha2UgeW91ciBwaWNrIGZyb20gdGhlCisgICBkaWN0aW9uYXJ5IG9mIHNsYW5nLgorIC0gImdsb2JhbCBpbmZvcm1hdGlvbiB0cmFja2VyIjogeW91J3JlIGluIGEgZ29vZCBtb29kLCBhbmQgaXQgYWN0dWFsbHkKKyAgIHdvcmtzIGZvciB5b3UuIEFuZ2VscyBzaW5nLCBhbmQgYSBsaWdodCBzdWRkZW5seSBmaWxscyB0aGUgcm9vbS4KKyAtICJnb2RkYW1uIGlkaW90aWMgdHJ1Y2tsb2FkIG9mIHNoKnQiOiB3aGVuIGl0IGJyZWFrcworCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworR2l0IGlzIGFuIE9wZW4gU291cmNlIHByb2plY3QgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitJdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIHdpdGggaGVscCBvZiBhIGdyb3VwIG9mCitoYWNrZXJzIGFyb3VuZCB0aGUgbmV0LiBJdCBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBKdW5pbyBDIEhhbWFuby4KKworUGxlYXNlIHJlYWQgdGhlIGZpbGUgSU5TVEFMTCBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KK1NlZSBEb2N1bWVudGF0aW9uL3R1dG9yaWFsLnR4dCB0byBnZXQgc3RhcnRlZCwgdGhlbiBzZWUKK0RvY3VtZW50YXRpb24vZXZlcnlkYXkudHh0IGZvciBhIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcywKK2FuZCAibWFuIGdpdC1jb21tYW5kbmFtZSIgZm9yIGRvY3VtZW50YXRpb24gb2YgZWFjaCBjb21tYW5kLgorQ1ZTIHVzZXJzIG1heSBhbHNvIHdhbnQgdG8gcmVhZCBEb2N1bWVudGF0aW9uL2N2cy1taWdyYXRpb24udHh0LgorCitNYW55IEdpdCBvbmxpbmUgcmVzb3VyY2VzIGFyZSBhY2Nlc3NpYmxlIGZyb20gaHR0cDovL2dpdC5vci5jei8KK2luY2x1ZGluZyBmdWxsIGRvY3VtZW50YXRpb24gYW5kIEdpdCByZWxhdGVkIHRvb2xzLgorCitUaGUgdXNlciBkaXNjdXNzaW9uIGFuZCBkZXZlbG9wbWVudCBvZiBHaXQgdGFrZSBwbGFjZSBvbiB0aGUgR2l0CittYWlsaW5nIGxpc3QgLS0gZXZlcnlvbmUgaXMgd2VsY29tZSB0byBwb3N0IGJ1ZyByZXBvcnRzLCBmZWF0dXJlCityZXF1ZXN0cywgY29tbWVudHMgYW5kIHBhdGNoZXMgdG8gZ2l0QHZnZXIua2VybmVsLm9yZy4gVG8gc3Vic2NyaWJlCit0byB0aGUgbGlzdCwgc2VuZCBhbiBlbWFpbCB3aXRoIGp1c3QgInN1YnNjcmliZSBnaXQiIGluIHRoZSBib2R5IHRvCittYWpvcmRvbW9Admdlci5rZXJuZWwub3JnLiBUaGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGFyZSBhdmFpbGFibGUgYXQKK2h0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9Z2l0IGFuZCBvdGhlciBhcmNoaXZhbCBzaXRlcy4KKworVGhlIG1lc3NhZ2VzIHRpdGxlZCAiQSBub3RlIGZyb20gdGhlIG1haW50YWluZXIiLCAiV2hhdCdzIGluCitnaXQuZ2l0IChzdGFibGUpIiBhbmQgIldoYXQncyBjb29raW5nIGluIGdpdC5naXQgKHRvcGljcykiIGFuZAordGhlIGRpc2N1c3Npb24gZm9sbG93aW5nIHRoZW0gb24gdGhlIG1haWxpbmcgbGlzdCBnaXZlIGEgZ29vZAorcmVmZXJlbmNlIGZvciBwcm9qZWN0IHN0YXR1cywgZGV2ZWxvcG1lbnQgZGlyZWN0aW9uIGFuZAorcmVtYWluaW5nIHRhc2tzLgpkaWZmIC0tZ2l0IGEvdC9naXR3ZWItbGliLnNoIGIvdC9naXR3ZWItbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzJjYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L2dpdHdlYi1saWIuc2gKQEAgLTAsMCArMSwxMjMgQEAKKyMgSW5pdGlhbGl6YXRpb24gYW5kIGhlbHBlcnMgZm9yIEdpdHdlYiB0ZXN0cywgd2hpY2ggc291cmNlIHRoaXMKKyMgc2hlbGwgbGlicmFyeSBpbnN0ZWFkIG9mIHRlc3QtbGliLnNoLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSmFrdWIgTmFyZWJza2kKKyMKKworZ2l0d2ViX2luaXQgKCkgeworCXNhZmVfcHdkPSIkKHBlcmwgLU1QT1NJWD1nZXRjd2QgLWUgJ3ByaW50IHF1b3RlbWV0YShnZXRjd2QpJykiCisJY2F0ID5naXR3ZWJfY29uZmlnLnBlcmwgPDxFT0YKKyMhL3Vzci9iaW4vcGVybAorCisjIGdpdHdlYiBjb25maWd1cmF0aW9uIGZvciB0ZXN0cworCitvdXIgXCR2ZXJzaW9uID0gJ2N1cnJlbnQnOworb3VyIFwkR0lUID0gJ2dpdCc7CitvdXIgXCRwcm9qZWN0cm9vdCA9ICIkc2FmZV9wd2QiOworb3VyIFwkcHJvamVjdF9tYXhkZXB0aCA9IDg7CitvdXIgXCRob21lX2xpbmtfc3RyID0gJ3Byb2plY3RzJzsKK291ciBcJHNpdGVfbmFtZSA9ICdbbG9jYWxob3N0XSc7CitvdXIgXCRzaXRlX2h0bWxfaGVhZF9zdHJpbmcgPSAnJzsKK291ciBcJHNpdGVfaGVhZGVyID0gJyc7CitvdXIgXCRzaXRlX2Zvb3RlciA9ICcnOworb3VyIFwkaG9tZV90ZXh0ID0gJ2luZGV4dGV4dC5odG1sJzsKK291ciBAc3R5bGVzaGVldHMgPSAoJ2ZpbGU6Ly8vJEdJVF9CVUlMRF9ESVIvZ2l0d2ViL3N0YXRpYy9naXR3ZWIuY3NzJyk7CitvdXIgXCRsb2dvID0gJ2ZpbGU6Ly8vJEdJVF9CVUlMRF9ESVIvZ2l0d2ViL3N0YXRpYy9naXQtbG9nby5wbmcnOworb3VyIFwkZmF2aWNvbiA9ICdmaWxlOi8vLyRHSVRfQlVJTERfRElSL2dpdHdlYi9zdGF0aWMvZ2l0LWZhdmljb24ucG5nJzsKK291ciBcJHByb2plY3RzX2xpc3QgPSAnJzsKK291ciBcJGV4cG9ydF9vayA9ICcnOworb3VyIFwkc3RyaWN0X2V4cG9ydCA9ICcnOworb3VyIFwkbWF4bG9hZCA9IHVuZGVmOworCitFT0YKKworCWNhdCA+LmdpdC9kZXNjcmlwdGlvbiA8PEVPRgorJDAgdGVzdCByZXBvc2l0b3J5CitFT0YKKworCSMgWW91IGNhbiBzZXQgdGhlIEdJVFdFQl9URVNUX0lOU1RBTExFRCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bworCSMgdGhlIGdpdHdlYmRpciAodGhlIGRpcmVjdG9yeSB3aGVyZSBnaXR3ZWIgaXMgaW5zdGFsbGVkIC8gZGVwbG95ZWQgdG8pCisJIyBvZiBhbiBleGlzdGluZyBnaXR3ZWIgaW5zdGFsbGF0aW9uIHRvIHRlc3QgdGhhdCBpbnN0YWxsYXRpb24sCisJIyBvciBzaW1wbHkgdG8gcGF0aG5hbWUgb2YgaW5zdGFsbGVkIGdpdHdlYiBzY3JpcHQuCisJaWYgdGVzdCAtbiAiJEdJVFdFQl9URVNUX0lOU1RBTExFRCIgOyB0aGVuCisJCWlmIHRlc3QgLWQgJEdJVFdFQl9URVNUX0lOU1RBTExFRDsgdGhlbgorCQkJU0NSSVBUX05BTUU9IiRHSVRXRUJfVEVTVF9JTlNUQUxMRUQvZ2l0d2ViLmNnaSIKKwkJZWxzZQorCQkJU0NSSVBUX05BTUU9IiRHSVRXRUJfVEVTVF9JTlNUQUxMRUQiCisJCWZpCisJCXRlc3QgLWYgIiRTQ1JJUFRfTkFNRSIgfHwKKwkJZXJyb3IgIkNhbm5vdCBmaW5kIGdpdHdlYiBhdCAkR0lUV0VCX1RFU1RfSU5TVEFMTEVELiIKKwkJc2F5ICIjIFRlc3RpbmcgJFNDUklQVF9OQU1FIgorCWVsc2UgIyBub3JtYWwgY2FzZSwgdXNlIHNvdXJjZSB2ZXJzaW9uIG9mIGdpdHdlYgorCQlTQ1JJUFRfTkFNRT0iJEdJVF9CVUlMRF9ESVIvZ2l0d2ViL2dpdHdlYi5wZXJsIgorCWZpCisJZXhwb3J0IFNDUklQVF9OQU1FCit9CisKK2dpdHdlYl9ydW4gKCkgeworCUdBVEVXQVlfSU5URVJGQUNFPSdDR0kvMS4xJworCUhUVFBfQUNDRVBUPScqLyonCisJUkVRVUVTVF9NRVRIT0Q9J0dFVCcKKwlRVUVSWV9TVFJJTkc9JDEKKwlQQVRIX0lORk89JDIKKwlSRVFVRVNUX1VSST0vZ2l0d2ViLmNnaSRQQVRIX0lORk8KKwlleHBvcnQgR0FURVdBWV9JTlRFUkZBQ0UgSFRUUF9BQ0NFUFQgUkVRVUVTVF9NRVRIT0QgXAorCQlRVUVSWV9TVFJJTkcgUEFUSF9JTkZPIFJFUVVFU1RfVVJJCisKKwlHSVRXRUJfQ09ORklHPSQocHdkKS9naXR3ZWJfY29uZmlnLnBlcmwKKwlleHBvcnQgR0lUV0VCX0NPTkZJRworCisJIyBzb21lIG9mIGdpdCBjb21tYW5kcyB3cml0ZSB0byBTVERFUlIgb24gZXJyb3IsIGJ1dCB0aGlzIGlzIG5vdAorCSMgd3JpdHRlbiB0byB3ZWIgc2VydmVyIGxvZ3MsIHNvIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGF0OgorCSMgd2UgYXJlIGludGVyZXN0ZWQgb25seSBpbiBwcm9wZXJseSBmb3JtYXR0ZWQgZXJyb3JzL3dhcm5pbmdzCisJcm0gLWYgZ2l0d2ViLmxvZyAmJgorCXBlcmwgLS0gIiRTQ1JJUFRfTkFNRSIgXAorCQk+Z2l0d2ViLm91dHB1dCAyPmdpdHdlYi5sb2cgJiYKKwlwZXJsIC13IC1lICcKKwkJb3BlbiBPLCAiPmdpdHdlYi5oZWFkZXJzIjsKKwkJd2hpbGUgKDw+KSB7CisJCQlwcmludCBPOworCQkJbGFzdCBpZiAoL15cciQvIHx8IC9eJC8pOworCQl9CisJCW9wZW4gTywgIj5naXR3ZWIuYm9keSI7CisJCXdoaWxlICg8PikgeworCQkJcHJpbnQgTzsKKwkJfQorCQljbG9zZSBPOworCScgZ2l0d2ViLm91dHB1dCAmJgorCWlmIGdyZXAgJ15bW10nIGdpdHdlYi5sb2cgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXRlc3RfZGVidWcgJ2NhdCBnaXR3ZWIubG9nID4mMicgJiYKKwkJZmFsc2UKKwllbHNlCisJCXRydWUKKwlmaQorCisJIyBnaXR3ZWIubG9nIGlzIGxlZnQgZm9yIGRlYnVnZ2luZworCSMgZ2l0d2ViLm91dHB1dCBpcyB1c2VkIHRvIHBhcnNlIEhUVFAgb3V0cHV0CisJIyBnaXR3ZWIuaGVhZGVycyBjb250YWlucyBvbmx5IEhUVFAgaGVhZGVycworCSMgZ2l0d2ViLmJvZHkgY29udGFpbnMgYm9keSBvZiBtZXNzYWdlLCB3aXRob3V0IGhlYWRlcnMKK30KKworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworcGVybCAtTUVuY29kZSAtZSAnJGU9IiI7ZGVjb2RlX3V0ZjgoJGUsIEVuY29kZTo6RkJfQ1JPQUspJyA+L2Rldi9udWxsIDI+JjEgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBnaXR3ZWIgdGVzdHMsIHBlcmwgdmVyc2lvbiBpcyB0b28gb2xkJworCXRlc3RfZG9uZQorfQorCitwZXJsIC1NQ0dJIC1NQ0dJOjpVdGlsIC1NQ0dJOjpDYXJwIC1lIDAgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0d2ViIHRlc3RzLCBDR0kgJiBDR0k6OlV0aWwgJiBDR0k6OkNhcnAgbW9kdWxlcyBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorfQorCitwZXJsIC1tVGltZTo6SGlSZXMgLWUgMCA+L2Rldi9udWxsIDI+JjEgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBnaXR3ZWIgdGVzdHMsIFRpbWU6OkhpUmVzIG1vZHVsZSBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorfQorCitnaXR3ZWJfaW5pdApkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvLmdpdGlnbm9yZSBiL3QvaGVscGVyLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjN2JiMGJiCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKKy90ZXN0LXRvb2wKKy90ZXN0LWZha2Utc3NoCisvdGVzdC1saW5lLWJ1ZmZlcgorL3Rlc3Qtc3ZuLWZlCmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWNobXRpbWUuYyBiL3QvaGVscGVyL3Rlc3QtY2htdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjJhZjQKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWNobXRpbWUuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBjYW4gZWl0aGVyIGNoYW5nZSBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZ2l2ZW4KKyAqIGZpbGUocykgb3IganVzdCBwcmludCBpdC4gVGhlIHByb2dyYW0gZG9lcyBub3QgY2hhbmdlIGF0aW1lIG9yCisgKiBjdGltZSAodGhlaXIgdmFsdWVzIGFyZSBleHBsaWNpdGx5IHByZXNlcnZlZCkuCisgKgorICogVGhlIG10aW1lIGNhbiBiZSBjaGFuZ2VkIHRvIGFuIGFic29sdXRlIHZhbHVlOgorICoKKyAqCXRlc3QtdG9vbCBjaG10aW1lID08c2Vjb25kcz4gZmlsZS4uLgorICoKKyAqIFJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRpbWUgYXMgcmV0dXJuZWQgYnkgdGltZSgzKToKKyAqCisgKgl0ZXN0LXRvb2wgY2htdGltZSA9KzxzZWNvbmRzPiAob3IgPS08c2Vjb25kcz4pIGZpbGUuLi4KKyAqCisgKiBPciByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBtdGltZSBvZiB0aGUgZmlsZToKKyAqCisgKgl0ZXN0LXRvb2wgY2htdGltZSA8c2Vjb25kcz4gZmlsZS4uLgorICoJdGVzdC10b29sIGNobXRpbWUgKzxzZWNvbmRzPiAob3IgLTxzZWNvbmRzPikgZmlsZS4uLgorICoKKyAqIEV4YW1wbGVzOgorICoKKyAqIFRvIHByaW50IHRoZSBtdGltZSBhbmQgdGhlIGZpbGUgbmFtZSB1c2UgLS12ZXJib3NlIGFuZCBzZXQKKyAqIHRoZSBmaWxlIG10aW1lIG9mZnNldCB0byAwOgorICoKKyAqCXRlc3QtdG9vbCBjaG10aW1lIC12ICswIGZpbGUKKyAqCisgKiBUbyBwcmludCBvbmx5IHRoZSBtdGltZSB1c2UgLS1nZXQ6CisgKgorICoJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgZmlsZQorICoKKyAqIFRvIHNldCB0aGUgbXRpbWUgdG8gY3VycmVudCB0aW1lOgorICoKKyAqCXRlc3QtdG9vbCBjaG10aW1lID0rMCBmaWxlCisgKgorICogVG8gc2V0IHRoZSBmaWxlIG10aW1lIG9mZnNldCB0byArMSBhbmQgcHJpbnQgdGhlIG5ldyB2YWx1ZToKKyAqCisgKgl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCArMSBmaWxlCisgKgorICovCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSA8dXRpbWUuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2Vfc3RyW10gPQorCSIoLXZ8LS12ZXJib3NlfC1nfC0tZ2V0KSAoK3w9fD0rfD0tfC0pPHNlY29uZHM+IDxmaWxlPi4uLiI7CisKK3N0YXRpYyBpbnQgdGltZXNwZWNfYXJnKGNvbnN0IGNoYXIgKmFyZywgbG9uZyBpbnQgKnNldF90aW1lLCBpbnQgKnNldF9lcSkKK3sKKwljaGFyICp0ZXN0OworCWNvbnN0IGNoYXIgKnRpbWVzcGVjID0gYXJnOworCSpzZXRfZXEgPSAoKnRpbWVzcGVjID09ICc9JykgPyAxIDogMDsKKwlpZiAoKnNldF9lcSkgeworCQl0aW1lc3BlYysrOworCQlpZiAoKnRpbWVzcGVjID09ICcrJykgeworCQkJKnNldF9lcSA9IDI7IC8qIHJlbGF0aXZlICJpbiB0aGUgZnV0dXJlIiAqLworCQkJdGltZXNwZWMrKzsKKwkJfQorCX0KKwkqc2V0X3RpbWUgPSBzdHJ0b2wodGltZXNwZWMsICZ0ZXN0LCAxMCk7CisJaWYgKCp0ZXN0KSB7CisJCXJldHVybiAwOworCX0KKwlpZiAoKCpzZXRfZXEgJiYgKnNldF90aW1lIDwgMCkgfHwgKnNldF9lcSA9PSAyKSB7CisJCXRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOworCQkqc2V0X3RpbWUgKz0gbm93OworCX0KKwlyZXR1cm4gMTsKK30KKworaW50IGNtZF9fY2htdGltZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RhdGljIGludCB2ZXJib3NlOworCXN0YXRpYyBpbnQgZ2V0OworCisJaW50IGkgPSAxOworCS8qIG5vIG10aW1lIGNoYW5nZSBieSBkZWZhdWx0ICovCisJaW50IHNldF9lcSA9IDA7CisJbG9uZyBpbnQgc2V0X3RpbWUgPSAwOworCisJaWYgKGFyZ2MgPCAzKQorCQlnb3RvIHVzYWdlOworCisJaWYgKHN0cmNtcChhcmd2W2ldLCAiLS1nZXQiKSA9PSAwIHx8IHN0cmNtcChhcmd2W2ldLCAiLWciKSA9PSAwKSB7CisJCWdldCA9IDE7CisJCSsraTsKKwl9IGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLS12ZXJib3NlIikgPT0gMCB8fCBzdHJjbXAoYXJndltpXSwgIi12IikgPT0gMCkgeworCQl2ZXJib3NlID0gMTsKKwkJKytpOworCX0KKworCWlmIChpID09IGFyZ2MpIHsKKwkJZ290byB1c2FnZTsKKwl9CisKKwlpZiAodGltZXNwZWNfYXJnKGFyZ3ZbaV0sICZzZXRfdGltZSwgJnNldF9lcSkpIHsKKwkJKytpOworCX0gZWxzZSB7CisJCWlmIChnZXQgPT0gMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJOb3QgYSBiYXNlLTEwIGludGVnZXI6ICVzXG4iLCBhcmd2W2ldICsgMSk7CisJCQlnb3RvIHVzYWdlOworCQl9CisJfQorCisJaWYgKGkgPT0gYXJnYykKKwkJZ290byB1c2FnZTsKKworCWZvciAoOyBpIDwgYXJnYzsgaSsrKSB7CisJCXN0cnVjdCBzdGF0IHNiOworCQlzdHJ1Y3QgdXRpbWJ1ZiB1dGI7CisJCXVpbnRtYXhfdCBtdGltZTsKKworCQlpZiAoc3RhdChhcmd2W2ldLCAmc2IpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc3RhdCAlczogJXNcbiIsCisJCQkgICAgICAgIGFyZ3ZbaV0sIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisjaWZkZWYgR0lUX1dJTkRPV1NfTkFUSVZFCisJCWlmICghKHNiLnN0X21vZGUgJiBTX0lXVVNSKSAmJgorCQkJCWNobW9kKGFyZ3ZbaV0sIHNiLnN0X21vZGUgfCBTX0lXVVNSKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgbWFrZSB1c2VyLXdyaXRhYmxlICVzOiAlcyIsCisJCQkJYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAxOworCQl9CisjZW5kaWYKKworCQl1dGIuYWN0aW1lID0gc2Iuc3RfYXRpbWU7CisJCXV0Yi5tb2R0aW1lID0gc2V0X2VxID8gc2V0X3RpbWUgOiBzYi5zdF9tdGltZSArIHNldF90aW1lOworCisJCW10aW1lID0gdXRiLm1vZHRpbWUgPCAwID8gMDogdXRiLm1vZHRpbWU7CisJCWlmIChnZXQpIHsKKwkJCXByaW50ZigiJSJQUkl1TUFYIlxuIiwgbXRpbWUpOworCQl9IGVsc2UgaWYgKHZlcmJvc2UpIHsKKwkJCXByaW50ZigiJSJQUkl1TUFYIlx0JXNcbiIsIG10aW1lLCBhcmd2W2ldKTsKKwkJfQorCisJCWlmICh1dGIubW9kdGltZSAhPSBzYi5zdF9tdGltZSAmJiB1dGltZShhcmd2W2ldLCAmdXRiKSA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG1vZGlmeSB0aW1lIG9uICVzOiAlc1xuIiwKKwkJCSAgICAgICAgYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK3VzYWdlOgorCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzICVzXG4iLCBhcmd2WzBdLCB1c2FnZV9zdHIpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1jb25maWcuYyBiL3QvaGVscGVyL3Rlc3QtY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0YzcyMgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtY29uZmlnLmMKQEAgLTAsMCArMSwxOTQgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKy8qCisgKiBUaGlzIHByb2dyYW0gZXhwb3NlcyB0aGUgQyBBUEkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtCisgKiBhcyBhIHNldCBvZiBzaW1wbGUgY29tbWFuZHMgaW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLgorICoKKyAqIFJlYWRzIHN0ZGluIGFuZCBwcmludHMgcmVzdWx0IG9mIGNvbW1hbmQgdG8gc3Rkb3V0OgorICoKKyAqIGdldF92YWx1ZSAtPiBwcmludHMgdGhlIHZhbHVlIHdpdGggaGlnaGVzdCBwcmlvcml0eSBmb3IgdGhlIGVudGVyZWQga2V5CisgKgorICogZ2V0X3ZhbHVlX211bHRpIC0+IHByaW50cyBhbGwgdmFsdWVzIGZvciB0aGUgZW50ZXJlZCBrZXkgaW4gaW5jcmVhc2luZyBvcmRlcgorICoJCSAgICAgb2YgcHJpb3JpdHkKKyAqCisgKiBnZXRfaW50IC0+IHByaW50IGludGVnZXIgdmFsdWUgZm9yIHRoZSBlbnRlcmVkIGtleSBvciBkaWUKKyAqCisgKiBnZXRfYm9vbCAtPiBwcmludCBib29sIHZhbHVlIGZvciB0aGUgZW50ZXJlZCBrZXkgb3IgZGllCisgKgorICogZ2V0X3N0cmluZyAtPiBwcmludCBzdHJpbmcgdmFsdWUgZm9yIHRoZSBlbnRlcmVkIGtleSBvciBkaWUKKyAqCisgKiBjb25maWdzZXRfZ2V0X3ZhbHVlIC0+IHJldHVybnMgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSBmb3IgdGhlIGVudGVyZWQga2V5CisgKiAJCQlmcm9tIGEgY29uZmlnX3NldCBjb25zdHJ1Y3RlZCBmcm9tIGZpbGVzIGVudGVyZWQgYXMgYXJndW1lbnRzLgorICoKKyAqIGNvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkgLT4gcmV0dXJucyB2YWx1ZV9saXN0IGZvciB0aGUgZW50ZXJlZCBrZXkgc29ydGVkIGluCisgKiAJCQkJYXNjZW5kaW5nIG9yZGVyIG9mIHByaW9yaXR5IGZyb20gYSBjb25maWdfc2V0CisgKiAJCQkJY29uc3RydWN0ZWQgZnJvbSBmaWxlcyBlbnRlcmVkIGFzIGFyZ3VtZW50cy4KKyAqCisgKiBpdGVyYXRlIC0+IGl0ZXJhdGUgb3ZlciBhbGwgdmFsdWVzIHVzaW5nIGdpdF9jb25maWcoKSwgYW5kIHByaW50IHNvbWUKKyAqICAgICAgICAgICAgZGF0YSBmb3IgZWFjaAorICoKKyAqIEV4YW1wbGVzOgorICoKKyAqIFRvIHByaW50IHRoZSB2YWx1ZSB3aXRoIGhpZ2hlc3QgcHJpb3JpdHkgZm9yIGtleSAiZm9vLmJBciBCYXoucm9jayI6CisgKiAJdGVzdC10b29sIGNvbmZpZyBnZXRfdmFsdWUgImZvby5iQXIgQmF6LnJvY2siCisgKgorICovCisKK3N0YXRpYyBpbnQgaXRlcmF0ZV9jYihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCXN0YXRpYyBpbnQgbnI7CisKKwlpZiAobnIrKykKKwkJcHV0Y2hhcignXG4nKTsKKworCXByaW50Zigia2V5PSVzXG4iLCB2YXIpOworCXByaW50ZigidmFsdWU9JXNcbiIsIHZhbHVlID8gdmFsdWUgOiAiKG51bGwpIik7CisJcHJpbnRmKCJvcmlnaW49JXNcbiIsIGN1cnJlbnRfY29uZmlnX29yaWdpbl90eXBlKCkpOworCXByaW50ZigibmFtZT0lc1xuIiwgY3VycmVudF9jb25maWdfbmFtZSgpKTsKKwlwcmludGYoImxubz0lZFxuIiwgY3VycmVudF9jb25maWdfbGluZSgpKTsKKwlwcmludGYoInNjb3BlPSVzXG4iLCBjb25maWdfc2NvcGVfbmFtZShjdXJyZW50X2NvbmZpZ19zY29wZSgpKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlYXJseV9jb25maWdfY2IoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqdmRhdGEpCit7CisJY29uc3QgY2hhciAqa2V5ID0gdmRhdGE7CisKKwlpZiAoIXN0cmNtcChrZXksIHZhcikpCisJCXByaW50ZigiJXNcbiIsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX19jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpLCB2YWw7CisJY29uc3QgY2hhciAqdjsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnN0cnB0cjsKKwlzdHJ1Y3QgY29uZmlnX3NldCBjczsKKworCWlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAicmVhZF9lYXJseV9jb25maWciKSkgeworCQlyZWFkX2Vhcmx5X2NvbmZpZyhlYXJseV9jb25maWdfY2IsICh2b2lkICopYXJndlsyXSk7CisJCXJldHVybiAwOworCX0KKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCWdpdF9jb25maWdzZXRfaW5pdCgmY3MpOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiUGxlYXNlLCBwcm92aWRlIGEgY29tbWFuZCBuYW1lIG9uIHRoZSBjb21tYW5kLWxpbmVcbiIpOworCQlnb3RvIGV4aXQxOworCX0gZWxzZSBpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgImdldF92YWx1ZSIpKSB7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoYXJndlsyXSwgJnYpKSB7CisJCQlpZiAoIXYpCisJCQkJcHJpbnRmKCIoTlVMTClcbiIpOworCQkJZWxzZQorCQkJCXByaW50ZigiJXNcbiIsIHYpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgImdldF92YWx1ZV9tdWx0aSIpKSB7CisJCXN0cnB0ciA9IGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKGFyZ3ZbMl0pOworCQlpZiAoc3RycHRyKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3RycHRyLT5ucjsgaSsrKSB7CisJCQkJdiA9IHN0cnB0ci0+aXRlbXNbaV0uc3RyaW5nOworCQkJCWlmICghdikKKwkJCQkJcHJpbnRmKCIoTlVMTClcbiIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCIlc1xuIiwgdik7CisJCQl9CisJCQlnb3RvIGV4aXQwOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJWYWx1ZSBub3QgZm91bmQgZm9yIFwiJXNcIlxuIiwgYXJndlsyXSk7CisJCQlnb3RvIGV4aXQxOworCQl9CisJfSBlbHNlIGlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAiZ2V0X2ludCIpKSB7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfaW50KGFyZ3ZbMl0sICZ2YWwpKSB7CisJCQlwcmludGYoIiVkXG4iLCB2YWwpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgImdldF9ib29sIikpIHsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF9ib29sKGFyZ3ZbMl0sICZ2YWwpKSB7CisJCQlwcmludGYoIiVkXG4iLCB2YWwpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgImdldF9zdHJpbmciKSkgeworCQlpZiAoIWdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdChhcmd2WzJdLCAmdikpIHsKKwkJCXByaW50ZigiJXNcbiIsIHYpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiY29uZmlnc2V0X2dldF92YWx1ZSIpKSB7CisJCWZvciAoaSA9IDM7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWludCBlcnI7CisJCQlpZiAoKGVyciA9IGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoJmNzLCBhcmd2W2ldKSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yICglZCkgcmVhZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXMuXG4iLCBlcnIsIGFyZ3ZbaV0pOworCQkJCWdvdG8gZXhpdDI7CisJCQl9CisJCX0KKwkJaWYgKCFnaXRfY29uZmlnc2V0X2dldF92YWx1ZSgmY3MsIGFyZ3ZbMl0sICZ2KSkgeworCQkJaWYgKCF2KQorCQkJCXByaW50ZigiKE5VTEwpXG4iKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiVzXG4iLCB2KTsKKwkJCWdvdG8gZXhpdDA7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCIlc1wiXG4iLCBhcmd2WzJdKTsKKwkJCWdvdG8gZXhpdDE7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImNvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkiKSkgeworCQlmb3IgKGkgPSAzOyBpIDwgYXJnYzsgaSsrKSB7CisJCQlpbnQgZXJyOworCQkJaWYgKChlcnIgPSBnaXRfY29uZmlnc2V0X2FkZF9maWxlKCZjcywgYXJndltpXSkpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciAoJWQpIHJlYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlICVzLlxuIiwgZXJyLCBhcmd2W2ldKTsKKwkJCQlnb3RvIGV4aXQyOworCQkJfQorCQl9CisJCXN0cnB0ciA9IGdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlX211bHRpKCZjcywgYXJndlsyXSk7CisJCWlmIChzdHJwdHIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBzdHJwdHItPm5yOyBpKyspIHsKKwkJCQl2ID0gc3RycHRyLT5pdGVtc1tpXS5zdHJpbmc7CisJCQkJaWYgKCF2KQorCQkJCQlwcmludGYoIihOVUxMKVxuIik7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiVzXG4iLCB2KTsKKwkJCX0KKwkJCWdvdG8gZXhpdDA7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCIlc1wiXG4iLCBhcmd2WzJdKTsKKwkJCWdvdG8gZXhpdDE7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIml0ZXJhdGUiKSkgeworCQlnaXRfY29uZmlnKGl0ZXJhdGVfY2IsIE5VTEwpOworCQlnb3RvIGV4aXQwOworCX0KKworCWRpZSgiJXM6IFBsZWFzZSBjaGVjayB0aGUgc3ludGF4IGFuZCB0aGUgZnVuY3Rpb24gbmFtZSIsIGFyZ3ZbMF0pOworCitleGl0MDoKKwlnaXRfY29uZmlnc2V0X2NsZWFyKCZjcyk7CisJcmV0dXJuIDA7CisKK2V4aXQxOgorCWdpdF9jb25maWdzZXRfY2xlYXIoJmNzKTsKKwlyZXR1cm4gMTsKKworZXhpdDI6CisJZ2l0X2NvbmZpZ3NldF9jbGVhcigmY3MpOworCXJldHVybiAyOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1jdHlwZS5jIGIvdC9oZWxwZXIvdGVzdC1jdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzRjMjMKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWN0eXBlLmMKQEAgLTAsMCArMSw0MyBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBpbnQgcmM7CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9lcnJvcihjb25zdCBjaGFyICpjbGFzcywgaW50IGNoKQoreworCXByaW50ZigiJXMgY2xhc3NpZmllcyBjaGFyICVkICgweCUwMngpIHdyb25nbHlcbiIsIGNsYXNzLCBjaCwgY2gpOworCXJjID0gMTsKK30KKworc3RhdGljIGludCBpc19pbihjb25zdCBjaGFyICpzLCBpbnQgY2gpCit7CisJLyogV2UgY2FuJ3QgZmluZCBOVUwgdXNpbmcgc3RyY2hyLiAgSXQncyBjbGFzc2xlc3MgYW55d2F5LiAqLworCWlmIChjaCA9PSAnXDAnKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gISFzdHJjaHIocywgY2gpOworfQorCisjZGVmaW5lIFRFU1RfQ0xBU1ModCxzKSB7CQkJXAorCWludCBpOwkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewkJXAorCQlpZiAoaXNfaW4ocywgaSkgIT0gdChpKSkJXAorCQkJcmVwb3J0X2Vycm9yKCN0LCBpKTsJXAorCX0JCQkJCVwKK30KKworI2RlZmluZSBESUdJVCAiMDEyMzQ1Njc4OSIKKyNkZWZpbmUgTE9XRVIgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorI2RlZmluZSBVUFBFUiAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisKK2ludCBjbWRfX2N0eXBlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlURVNUX0NMQVNTKGlzZGlnaXQsIERJR0lUKTsKKwlURVNUX0NMQVNTKGlzc3BhY2UsICIgXG5cclx0Iik7CisJVEVTVF9DTEFTUyhpc2FscGhhLCBMT1dFUiBVUFBFUik7CisJVEVTVF9DTEFTUyhpc2FsbnVtLCBMT1dFUiBVUFBFUiBESUdJVCk7CisJVEVTVF9DTEFTUyhpc19nbG9iX3NwZWNpYWwsICIqP1tcXCIpOworCVRFU1RfQ0xBU1MoaXNfcmVnZXhfc3BlY2lhbCwgIiQoKSorLj9bXFxee3wiKTsKKwlURVNUX0NMQVNTKGlzX3BhdGhzcGVjX21hZ2ljLCAiIVwiIyUmJywtLzo7PD0+QF9gfiIpOworCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kYXRlLmMgYi90L2hlbHBlci90ZXN0LWRhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTllZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1kYXRlLmMKQEAgLTAsMCArMSwxMzIgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2VfbXNnID0gIlxuIgorIiAgdGVzdC10b29sIGRhdGUgcmVsYXRpdmUgW3RpbWVfdF0uLi5cbiIKKyIgIHRlc3QtdG9vbCBkYXRlIGh1bWFuIFt0aW1lX3RdLi4uXG4iCisiICB0ZXN0LXRvb2wgZGF0ZSBzaG93Ojxmb3JtYXQ+IFt0aW1lX3RdLi4uXG4iCisiICB0ZXN0LXRvb2wgZGF0ZSBwYXJzZSBbZGF0ZV0uLi5cbiIKKyIgIHRlc3QtdG9vbCBkYXRlIGFwcHJveGlkYXRlIFtkYXRlXS4uLlxuIgorIiAgdGVzdC10b29sIGRhdGUgdGltZXN0YW1wIFtkYXRlXS4uLlxuIgorIiAgdGVzdC10b29sIGRhdGUgZ2V0bmFub3MgW3N0YXJ0LW5hbm9zXVxuIgorIiAgdGVzdC10b29sIGRhdGUgaXM2NGJpdFxuIgorIiAgdGVzdC10b29sIGRhdGUgdGltZV90LWlzNjRiaXRcbiI7CisKK3N0YXRpYyB2b2lkIHNob3dfcmVsYXRpdmVfZGF0ZXMoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCXRpbWVfdCB0ID0gYXRvaSgqYXJndik7CisJCXNob3dfZGF0ZV9yZWxhdGl2ZSh0LCAmYnVmKTsKKwkJcHJpbnRmKCIlcyAtPiAlc1xuIiwgKmFyZ3YsIGJ1Zi5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19odW1hbl9kYXRlcyhjb25zdCBjaGFyICoqYXJndikKK3sKKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgeworCQl0aW1lX3QgdCA9IGF0b2koKmFyZ3YpOworCQlwcmludGYoIiVzIC0+ICVzXG4iLCAqYXJndiwgc2hvd19kYXRlKHQsIDAsIERBVEVfTU9ERShIVU1BTikpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZGF0ZXMoY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlzdHJ1Y3QgZGF0ZV9tb2RlIG1vZGU7CisKKwlwYXJzZV9kYXRlX2Zvcm1hdChmb3JtYXQsICZtb2RlKTsKKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgeworCQljaGFyICphcmc7CisJCXRpbWVzdGFtcF90IHQ7CisJCWludCB0ejsKKworCQkvKgorCQkgKiBEbyBub3QgdXNlIG91ciBub3JtYWwgdGltZXN0YW1wIHBhcnNpbmcgaGVyZSwgYXMgdGhlIHBvaW50CisJCSAqIGlzIHRvIHRlc3QgdGhlIGZvcm1hdHRpbmcgY29kZSBpbiBpc29sYXRpb24uCisJCSAqLworCQl0ID0gcGFyc2VfdGltZXN0YW1wKCphcmd2LCAmYXJnLCAxMCk7CisJCXdoaWxlICgqYXJnID09ICcgJykKKwkJCWFyZysrOworCQl0eiA9IGF0b2koYXJnKTsKKworCQlwcmludGYoIiVzIC0+ICVzXG4iLCAqYXJndiwgc2hvd19kYXRlKHQsIHR6LCAmbW9kZSkpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfZGF0ZXMoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0cmJ1ZiByZXN1bHQgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCXRpbWVzdGFtcF90IHQ7CisJCWludCB0ejsKKworCQlzdHJidWZfcmVzZXQoJnJlc3VsdCk7CisJCXBhcnNlX2RhdGUoKmFyZ3YsICZyZXN1bHQpOworCQlpZiAoc3NjYW5mKHJlc3VsdC5idWYsICIlIlBSSXRpbWUiICVkIiwgJnQsICZ0eikgPT0gMikKKwkJCXByaW50ZigiJXMgLT4gJXNcbiIsCisJCQkgICAgICAgKmFyZ3YsIHNob3dfZGF0ZSh0LCB0eiwgREFURV9NT0RFKElTTzg2MDEpKSk7CisJCWVsc2UKKwkJCXByaW50ZigiJXMgLT4gYmFkXG4iLCAqYXJndik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hcHByb3hpZGF0ZShjb25zdCBjaGFyICoqYXJndikKK3sKKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgeworCQl0aW1lc3RhbXBfdCB0OworCQl0ID0gYXBwcm94aWRhdGVfcmVsYXRpdmUoKmFyZ3YpOworCQlwcmludGYoIiVzIC0+ICVzXG4iLCAqYXJndiwgc2hvd19kYXRlKHQsIDAsIERBVEVfTU9ERShJU084NjAxKSkpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfYXBwcm94X3RpbWVzdGFtcChjb25zdCBjaGFyICoqYXJndikKK3sKKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgeworCQl0aW1lc3RhbXBfdCB0OworCQl0ID0gYXBwcm94aWRhdGVfcmVsYXRpdmUoKmFyZ3YpOworCQlwcmludGYoIiVzIC0+ICUiUFJJdGltZSJcbiIsICphcmd2LCB0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldG5hbm9zKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWRvdWJsZSBzZWNvbmRzID0gZ2V0bmFub3RpbWUoKSAvIDEuMGU5OworCisJaWYgKCphcmd2KQorCQlzZWNvbmRzIC09IHN0cnRvZCgqYXJndiwgTlVMTCk7CisJcHJpbnRmKCIlbGZcbiIsIHNlY29uZHMpOworfQorCitpbnQgY21kX19kYXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp4OworCisJYXJndisrOworCWlmICghKmFyZ3YpCisJCXVzYWdlKHVzYWdlX21zZyk7CisJaWYgKCFzdHJjbXAoKmFyZ3YsICJyZWxhdGl2ZSIpKQorCQlzaG93X3JlbGF0aXZlX2RhdGVzKGFyZ3YrMSk7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgImh1bWFuIikpCisJCXNob3dfaHVtYW5fZGF0ZXMoYXJndisxKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeCgqYXJndiwgInNob3c6IiwgJngpKQorCQlzaG93X2RhdGVzKGFyZ3YrMSwgeCk7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgInBhcnNlIikpCisJCXBhcnNlX2RhdGVzKGFyZ3YrMSk7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgImFwcHJveGlkYXRlIikpCisJCXBhcnNlX2FwcHJveGlkYXRlKGFyZ3YrMSk7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgInRpbWVzdGFtcCIpKQorCQlwYXJzZV9hcHByb3hfdGltZXN0YW1wKGFyZ3YrMSk7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgImdldG5hbm9zIikpCisJCWdldG5hbm9zKGFyZ3YrMSk7CisJZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgImlzNjRiaXQiKSkKKwkJcmV0dXJuIHNpemVvZih0aW1lc3RhbXBfdCkgPT0gOCA/IDAgOiAxOworCWVsc2UgaWYgKCFzdHJjbXAoKmFyZ3YsICJ0aW1lX3QtaXM2NGJpdCIpKQorCQlyZXR1cm4gc2l6ZW9mKHRpbWVfdCkgPT0gOCA/IDAgOiAxOworCWVsc2UKKwkJdXNhZ2UodXNhZ2VfbXNnKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZGVsdGEuYyBiL3QvaGVscGVyL3Rlc3QtZGVsdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQ5YTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1kZWx0YS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiB0ZXN0LWRlbHRhLmM6IHRlc3QgY29kZSB0byBleGVyY2lzZSBkaWZmLWRlbHRhLmMgYW5kIHBhdGNoLWRlbHRhLmMKKyAqCisgKiAoQykgMjAwNSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgorICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2Vfc3RyW10gPQorCSJ0ZXN0LXRvb2wgZGVsdGEgKC1kfC1wKSA8ZnJvbV9maWxlPiA8ZGF0YV9maWxlPiA8b3V0X2ZpbGU+IjsKKworaW50IGNtZF9fZGVsdGEoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBmZDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl2b2lkICpmcm9tX2J1ZiwgKmRhdGFfYnVmLCAqb3V0X2J1ZjsKKwl1bnNpZ25lZCBsb25nIGZyb21fc2l6ZSwgZGF0YV9zaXplLCBvdXRfc2l6ZTsKKworCWlmIChhcmdjICE9IDUgfHwgKHN0cmNtcChhcmd2WzFdLCAiLWQiKSAmJiBzdHJjbXAoYXJndlsxXSwgIi1wIikpKSB7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzXG4iLCB1c2FnZV9zdHIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmZCA9IG9wZW4oYXJndlsyXSwgT19SRE9OTFkpOworCWlmIChmZCA8IDAgfHwgZnN0YXQoZmQsICZzdCkpIHsKKwkJcGVycm9yKGFyZ3ZbMl0pOworCQlyZXR1cm4gMTsKKwl9CisJZnJvbV9zaXplID0gc3Quc3Rfc2l6ZTsKKwlmcm9tX2J1ZiA9IHhtYWxsb2MoZnJvbV9zaXplKTsKKwlpZiAocmVhZF9pbl9mdWxsKGZkLCBmcm9tX2J1ZiwgZnJvbV9zaXplKSA8IDApIHsKKwkJcGVycm9yKGFyZ3ZbMl0pOworCQljbG9zZShmZCk7CisJCXJldHVybiAxOworCX0KKwljbG9zZShmZCk7CisKKwlmZCA9IG9wZW4oYXJndlszXSwgT19SRE9OTFkpOworCWlmIChmZCA8IDAgfHwgZnN0YXQoZmQsICZzdCkpIHsKKwkJcGVycm9yKGFyZ3ZbM10pOworCQlyZXR1cm4gMTsKKwl9CisJZGF0YV9zaXplID0gc3Quc3Rfc2l6ZTsKKwlkYXRhX2J1ZiA9IHhtYWxsb2MoZGF0YV9zaXplKTsKKwlpZiAocmVhZF9pbl9mdWxsKGZkLCBkYXRhX2J1ZiwgZGF0YV9zaXplKSA8IDApIHsKKwkJcGVycm9yKGFyZ3ZbM10pOworCQljbG9zZShmZCk7CisJCXJldHVybiAxOworCX0KKwljbG9zZShmZCk7CisKKwlpZiAoYXJndlsxXVsxXSA9PSAnZCcpCisJCW91dF9idWYgPSBkaWZmX2RlbHRhKGZyb21fYnVmLCBmcm9tX3NpemUsCisJCQkJICAgICBkYXRhX2J1ZiwgZGF0YV9zaXplLAorCQkJCSAgICAgJm91dF9zaXplLCAwKTsKKwllbHNlCisJCW91dF9idWYgPSBwYXRjaF9kZWx0YShmcm9tX2J1ZiwgZnJvbV9zaXplLAorCQkJCSAgICAgIGRhdGFfYnVmLCBkYXRhX3NpemUsCisJCQkJICAgICAgJm91dF9zaXplKTsKKwlpZiAoIW91dF9idWYpIHsKKwkJZnByaW50ZihzdGRlcnIsICJkZWx0YSBvcGVyYXRpb24gZmFpbGVkIChyZXR1cm5lZCBOVUxMKVxuIik7CisJCXJldHVybiAxOworCX0KKworCWZkID0gb3BlbiAoYXJndls0XSwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCAwNjY2KTsKKwlpZiAoZmQgPCAwIHx8IHdyaXRlX2luX2Z1bGwoZmQsIG91dF9idWYsIG91dF9zaXplKSA8IDApIHsKKwkJcGVycm9yKGFyZ3ZbNF0pOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZGlyLWl0ZXJhdG9yLmMgYi90L2hlbHBlci90ZXN0LWRpci1pdGVyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OWI2YmYKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWRpci1pdGVyYXRvci5jCkBAIC0wLDAgKzEsNjUgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJpdGVyYXRvci5oIgorI2luY2x1ZGUgImRpci1pdGVyYXRvci5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqZXJyb3JfbmFtZShpbnQgZXJyb3JfbnVtYmVyKQoreworCXN3aXRjaCAoZXJyb3JfbnVtYmVyKSB7CisJY2FzZSBFTk9FTlQ6IHJldHVybiAiRU5PRU5UIjsKKwljYXNlIEVOT1RESVI6IHJldHVybiAiRU5PVERJUiI7CisJZGVmYXVsdDogcmV0dXJuICJFU09NRVRISU5HRUxTRSI7CisJfQorfQorCisvKgorICogdXNhZ2U6CisgKiB0b29sLXRlc3QgZGlyLWl0ZXJhdG9yIFstLWZvbGxvdy1zeW1saW5rc10gWy0tcGVkYW50aWNdIGRpcmVjdG9yeV9wYXRoCisgKi8KK2ludCBjbWRfX2Rpcl9pdGVyYXRvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGRpcl9pdGVyYXRvciAqZGl0ZXI7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwlpbnQgaXRlcl9zdGF0dXM7CisKKwlmb3IgKCsrYXJndiwgLS1hcmdjOyAqYXJndiAmJiBzdGFydHNfd2l0aCgqYXJndiwgIi0tIik7ICsrYXJndiwgLS1hcmdjKSB7CisJCWlmIChzdHJjbXAoKmFyZ3YsICItLWZvbGxvdy1zeW1saW5rcyIpID09IDApCisJCQlmbGFncyB8PSBESVJfSVRFUkFUT1JfRk9MTE9XX1NZTUxJTktTOworCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsICItLXBlZGFudGljIikgPT0gMCkKKwkJCWZsYWdzIHw9IERJUl9JVEVSQVRPUl9QRURBTlRJQzsKKwkJZWxzZQorCQkJZGllKCJpbnZhbGlkIG9wdGlvbiAnJXMnIiwgKmFyZ3YpOworCX0KKworCWlmICghKmFyZ3YgfHwgYXJnYyAhPSAxKQorCQlkaWUoImRpci1pdGVyYXRvciBuZWVkcyBleGFjdGx5IG9uZSBub24tb3B0aW9uIGFyZ3VtZW50Iik7CisKKwlkaXRlciA9IGRpcl9pdGVyYXRvcl9iZWdpbigqYXJndiwgZmxhZ3MpOworCisJaWYgKCFkaXRlcikgeworCQlwcmludGYoImRpcl9pdGVyYXRvcl9iZWdpbiBmYWlsdXJlOiAlc1xuIiwgZXJyb3JfbmFtZShlcnJubykpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJd2hpbGUgKChpdGVyX3N0YXR1cyA9IGRpcl9pdGVyYXRvcl9hZHZhbmNlKGRpdGVyKSkgPT0gSVRFUl9PSykgeworCQlpZiAoU19JU0RJUihkaXRlci0+c3Quc3RfbW9kZSkpCisJCQlwcmludGYoIltkXSAiKTsKKwkJZWxzZSBpZiAoU19JU1JFRyhkaXRlci0+c3Quc3RfbW9kZSkpCisJCQlwcmludGYoIltmXSAiKTsKKwkJZWxzZSBpZiAoU19JU0xOSyhkaXRlci0+c3Quc3RfbW9kZSkpCisJCQlwcmludGYoIltzXSAiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJbP10gIik7CisKKwkJcHJpbnRmKCIoJXMpIFslc10gJXNcbiIsIGRpdGVyLT5yZWxhdGl2ZV9wYXRoLCBkaXRlci0+YmFzZW5hbWUsCisJCSAgICAgICBkaXRlci0+cGF0aC5idWYpOworCX0KKworCWlmIChpdGVyX3N0YXR1cyAhPSBJVEVSX0RPTkUpIHsKKwkJcHJpbnRmKCJkaXJfaXRlcmF0b3JfYWR2YW5jZSBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWRyb3AtY2FjaGVzLmMgYi90L2hlbHBlci90ZXN0LWRyb3AtY2FjaGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0Mjc4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtZHJvcC1jYWNoZXMuYwpAQCAtMCwwICsxLDE2MCBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorCisjaWYgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpCisjaW5jbHVkZSAibGF6eWxvYWQuaCIKKworc3RhdGljIGludCBjbWRfc3luYyh2b2lkKQoreworCWNoYXIgQnVmZmVyW01BWF9QQVRIXTsKKwlEV09SRCBkd1JldDsKKwljaGFyIHN6Vm9sdW1lQWNjZXNzUGF0aFtdID0gIlxcXFwuXFxYWFhYOiI7CisJSEFORExFIGhWb2xXcml0ZTsKKwlpbnQgc3VjY2VzcyA9IDAsIGRvc19kcml2ZV9wcmVmaXg7CisKKwlkd1JldCA9IEdldEN1cnJlbnREaXJlY3RvcnkoTUFYX1BBVEgsIEJ1ZmZlcik7CisJaWYgKCgwID09IGR3UmV0KSB8fCAoZHdSZXQgPiBNQVhfUEFUSCkpCisJCXJldHVybiBlcnJvcigiRXJyb3IgZ2V0dGluZyBjdXJyZW50IGRpcmVjdG9yeSIpOworCisJZG9zX2RyaXZlX3ByZWZpeCA9IGhhc19kb3NfZHJpdmVfcHJlZml4KEJ1ZmZlcik7CisJaWYgKCFkb3NfZHJpdmVfcHJlZml4KQorCQlyZXR1cm4gZXJyb3IoIiclcyc6IGludmFsaWQgZHJpdmUgbGV0dGVyIiwgQnVmZmVyKTsKKworCW1lbWNweShzelZvbHVtZUFjY2Vzc1BhdGgsIEJ1ZmZlciwgZG9zX2RyaXZlX3ByZWZpeCk7CisJc3pWb2x1bWVBY2Nlc3NQYXRoW2Rvc19kcml2ZV9wcmVmaXhdID0gJ1wwJzsKKworCWhWb2xXcml0ZSA9IENyZWF0ZUZpbGUoc3pWb2x1bWVBY2Nlc3NQYXRoLCBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLAorCQlGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFLCBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKKwlpZiAoSU5WQUxJRF9IQU5ETEVfVkFMVUUgPT0gaFZvbFdyaXRlKQorCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBvcGVuIHZvbHVtZSBmb3Igd3JpdGluZywgbmVlZCBhZG1pbiBhY2Nlc3MiKTsKKworCXN1Y2Nlc3MgPSBGbHVzaEZpbGVCdWZmZXJzKGhWb2xXcml0ZSk7CisJaWYgKCFzdWNjZXNzKQorCQllcnJvcigiVW5hYmxlIHRvIGZsdXNoIHZvbHVtZSIpOworCisJQ2xvc2VIYW5kbGUoaFZvbFdyaXRlKTsKKworCXJldHVybiAhc3VjY2VzczsKK30KKworI2RlZmluZSBTVEFUVVNfU1VDQ0VTUwkJCSgweDAwMDAwMDAwTCkKKyNkZWZpbmUgU1RBVFVTX1BSSVZJTEVHRV9OT1RfSEVMRAkoMHhDMDAwMDA2MUwpCisKK3R5cGVkZWYgZW51bSBfU1lTVEVNX0lORk9STUFUSU9OX0NMQVNTIHsKKwlTeXN0ZW1NZW1vcnlMaXN0SW5mb3JtYXRpb24gPSA4MCwKK30gU1lTVEVNX0lORk9STUFUSU9OX0NMQVNTOworCit0eXBlZGVmIGVudW0gX1NZU1RFTV9NRU1PUllfTElTVF9DT01NQU5EIHsKKwlNZW1vcnlDYXB0dXJlQWNjZXNzZWRCaXRzLAorCU1lbW9yeUNhcHR1cmVBbmRSZXNldEFjY2Vzc2VkQml0cywKKwlNZW1vcnlFbXB0eVdvcmtpbmdTZXRzLAorCU1lbW9yeUZsdXNoTW9kaWZpZWRMaXN0LAorCU1lbW9yeVB1cmdlU3RhbmRieUxpc3QsCisJTWVtb3J5UHVyZ2VMb3dQcmlvcml0eVN0YW5kYnlMaXN0LAorCU1lbW9yeUNvbW1hbmRNYXgKK30gU1lTVEVNX01FTU9SWV9MSVNUX0NPTU1BTkQ7CisKK3N0YXRpYyBCT09MIEdldFByaXZpbGVnZShIQU5ETEUgVG9rZW5IYW5kbGUsIExQQ1NUUiBscE5hbWUsIGludCBmbGFncykKK3sKKwlCT09MIGJSZXN1bHQ7CisJRFdPUkQgZHdCdWZmZXJMZW5ndGg7CisJTFVJRCBsdWlkOworCVRPS0VOX1BSSVZJTEVHRVMgdHBQcmV2aW91c1N0YXRlOworCVRPS0VOX1BSSVZJTEVHRVMgdHBOZXdTdGF0ZTsKKworCWR3QnVmZmVyTGVuZ3RoID0gMTY7CisJYlJlc3VsdCA9IExvb2t1cFByaXZpbGVnZVZhbHVlQSgwLCBscE5hbWUsICZsdWlkKTsKKwlpZiAoYlJlc3VsdCkgeworCQl0cE5ld1N0YXRlLlByaXZpbGVnZUNvdW50ID0gMTsKKwkJdHBOZXdTdGF0ZS5Qcml2aWxlZ2VzWzBdLkx1aWQgPSBsdWlkOworCQl0cE5ld1N0YXRlLlByaXZpbGVnZXNbMF0uQXR0cmlidXRlcyA9IDA7CisJCWJSZXN1bHQgPSBBZGp1c3RUb2tlblByaXZpbGVnZXMoVG9rZW5IYW5kbGUsIDAsICZ0cE5ld1N0YXRlLAorCQkJKERXT1JEKSgoTFBCWVRFKSYodHBOZXdTdGF0ZS5Qcml2aWxlZ2VzWzFdKSAtIChMUEJZVEUpJnRwTmV3U3RhdGUpLAorCQkJJnRwUHJldmlvdXNTdGF0ZSwgJmR3QnVmZmVyTGVuZ3RoKTsKKwkJaWYgKGJSZXN1bHQpIHsKKwkJCXRwUHJldmlvdXNTdGF0ZS5Qcml2aWxlZ2VDb3VudCA9IDE7CisJCQl0cFByZXZpb3VzU3RhdGUuUHJpdmlsZWdlc1swXS5MdWlkID0gbHVpZDsKKwkJCXRwUHJldmlvdXNTdGF0ZS5Qcml2aWxlZ2VzWzBdLkF0dHJpYnV0ZXMgPSBmbGFncyAhPSAwID8gMiA6IDA7CisJCQliUmVzdWx0ID0gQWRqdXN0VG9rZW5Qcml2aWxlZ2VzKFRva2VuSGFuZGxlLCAwLCAmdHBQcmV2aW91c1N0YXRlLAorCQkJCWR3QnVmZmVyTGVuZ3RoLCAwLCAwKTsKKwkJfQorCX0KKwlyZXR1cm4gYlJlc3VsdDsKK30KKworc3RhdGljIGludCBjbWRfZHJvcGNhY2hlcyh2b2lkKQoreworCUhBTkRMRSBoUHJvY2VzcyA9IEdldEN1cnJlbnRQcm9jZXNzKCk7CisJSEFORExFIGhUb2tlbjsKKwlERUNMQVJFX1BST0NfQUREUihudGRsbC5kbGwsIERXT1JELCBOdFNldFN5c3RlbUluZm9ybWF0aW9uLCBJTlQsIFBWT0lELCBVTE9ORyk7CisJU1lTVEVNX01FTU9SWV9MSVNUX0NPTU1BTkQgY29tbWFuZDsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFPcGVuUHJvY2Vzc1Rva2VuKGhQcm9jZXNzLCBUT0tFTl9RVUVSWSB8IFRPS0VOX0FESlVTVF9QUklWSUxFR0VTLCAmaFRva2VuKSkKKwkJcmV0dXJuIGVycm9yKCJDYW4ndCBvcGVuIGN1cnJlbnQgcHJvY2VzcyB0b2tlbiIpOworCisJaWYgKCFHZXRQcml2aWxlZ2UoaFRva2VuLCAiU2VQcm9maWxlU2luZ2xlUHJvY2Vzc1ByaXZpbGVnZSIsIDEpKQorCQlyZXR1cm4gZXJyb3IoIkNhbid0IGdldCBTZVByb2ZpbGVTaW5nbGVQcm9jZXNzUHJpdmlsZWdlIik7CisKKwlDbG9zZUhhbmRsZShoVG9rZW4pOworCisJaWYgKCFJTklUX1BST0NfQUREUihOdFNldFN5c3RlbUluZm9ybWF0aW9uKSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgZmluZCBOdFNldFN5c3RlbUluZm9ybWF0aW9uKCkgZnVuY3Rpb24iKTsKKworCWNvbW1hbmQgPSBNZW1vcnlQdXJnZVN0YW5kYnlMaXN0OworCXN0YXR1cyA9IE50U2V0U3lzdGVtSW5mb3JtYXRpb24oCisJCVN5c3RlbU1lbW9yeUxpc3RJbmZvcm1hdGlvbiwKKwkJJmNvbW1hbmQsCisJCXNpemVvZihTWVNURU1fTUVNT1JZX0xJU1RfQ09NTUFORCkKKwkpOworCWlmIChzdGF0dXMgPT0gU1RBVFVTX1BSSVZJTEVHRV9OT1RfSEVMRCkKKwkJZXJyb3IoIkluc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIHB1cmdlIHRoZSBzdGFuZGJ5IGxpc3QsIG5lZWQgYWRtaW4gYWNjZXNzIik7CisJZWxzZSBpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQllcnJvcigiVW5hYmxlIHRvIGV4ZWN1dGUgdGhlIG1lbW9yeSBsaXN0IGNvbW1hbmQgJWQiLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisKK3N0YXRpYyBpbnQgY21kX3N5bmModm9pZCkKK3sKKwlyZXR1cm4gc3lzdGVtKCJzeW5jIik7Cit9CisKK3N0YXRpYyBpbnQgY21kX2Ryb3BjYWNoZXModm9pZCkKK3sKKwlyZXR1cm4gc3lzdGVtKCJlY2hvIDMgfCBzdWRvIHRlZSAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMiKTsKK30KKworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisKK3N0YXRpYyBpbnQgY21kX3N5bmModm9pZCkKK3sKKwlyZXR1cm4gc3lzdGVtKCJzeW5jIik7Cit9CisKK3N0YXRpYyBpbnQgY21kX2Ryb3BjYWNoZXModm9pZCkKK3sKKwlyZXR1cm4gc3lzdGVtKCJzdWRvIHB1cmdlIik7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbnQgY21kX3N5bmModm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWRfZHJvcGNhY2hlcyh2b2lkKQoreworCXJldHVybiBlcnJvcigiZHJvcCBjYWNoZXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKK30KKworI2VuZGlmCisKK2ludCBjbWRfX2Ryb3BfY2FjaGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljbWRfc3luYygpOworCXJldHVybiBjbWRfZHJvcGNhY2hlcygpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kdW1wLWNhY2hlLXRyZWUuYyBiL3QvaGVscGVyL3Rlc3QtZHVtcC1jYWNoZS10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzZjg4ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtZHVtcC1jYWNoZS10cmVlLmMKQEAgLTAsMCArMSw2OSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKworCitzdGF0aWMgdm9pZCBkdW1wX29uZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIGNvbnN0IGNoYXIgKnBmeCwgY29uc3QgY2hhciAqeCkKK3sKKwlpZiAoaXQtPmVudHJ5X2NvdW50IDwgMCkKKwkJcHJpbnRmKCIlLTQwcyAlcyVzICglZCBzdWJ0cmVlcylcbiIsCisJCSAgICAgICAiaW52YWxpZCIsIHgsIHBmeCwgaXQtPnN1YnRyZWVfbnIpOworCWVsc2UKKwkJcHJpbnRmKCIlcyAlcyVzICglZCBlbnRyaWVzLCAlZCBzdWJ0cmVlcylcbiIsCisJCSAgICAgICBvaWRfdG9faGV4KCZpdC0+b2lkKSwgeCwgcGZ4LAorCQkgICAgICAgaXQtPmVudHJ5X2NvdW50LCBpdC0+c3VidHJlZV9ucik7Cit9CisKK3N0YXRpYyBpbnQgZHVtcF9jYWNoZV90cmVlKHN0cnVjdCBjYWNoZV90cmVlICppdCwKKwkJCSAgIHN0cnVjdCBjYWNoZV90cmVlICpyZWYsCisJCQkgICBjb25zdCBjaGFyICpwZngpCit7CisJaW50IGk7CisJaW50IGVycnMgPSAwOworCisJaWYgKCFpdCB8fCAhcmVmKQorCQkvKiBtaXNzaW5nIGluIGVpdGhlciAqLworCQlyZXR1cm4gMDsKKworCWlmIChpdC0+ZW50cnlfY291bnQgPCAwKSB7CisJCS8qIGludmFsaWQgKi8KKwkJZHVtcF9vbmUoaXQsIHBmeCwgIiIpOworCQlkdW1wX29uZShyZWYsIHBmeCwgIiMocmVmKSAiKTsKKwl9CisJZWxzZSB7CisJCWR1bXBfb25lKGl0LCBwZngsICIiKTsKKwkJaWYgKCFvaWRlcSgmaXQtPm9pZCwgJnJlZi0+b2lkKSB8fAorCQkgICAgcmVmLT5lbnRyeV9jb3VudCAhPSBpdC0+ZW50cnlfY291bnQgfHwKKwkJICAgIHJlZi0+c3VidHJlZV9uciAhPSBpdC0+c3VidHJlZV9ucikgeworCQkJLyogY2xhaW1zIHRvIGJlIHZhbGlkIGJ1dCBpcyBseWluZyAqLworCQkJZHVtcF9vbmUocmVmLCBwZngsICIjKHJlZikgIik7CisJCQllcnJzID0gMTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBpdC0+c3VidHJlZV9ucjsgaSsrKSB7CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqZG93biA9IGl0LT5kb3duW2ldOworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnJkd247CisKKwkJcmR3biA9IGNhY2hlX3RyZWVfc3ViKHJlZiwgZG93bi0+bmFtZSk7CisJCXhzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcyUuKnMvIiwgcGZ4LCBkb3duLT5uYW1lbGVuLCBkb3duLT5uYW1lKTsKKwkJaWYgKGR1bXBfY2FjaGVfdHJlZShkb3duLT5jYWNoZV90cmVlLCByZHduLT5jYWNoZV90cmVlLCBwYXRoKSkKKwkJCWVycnMgPSAxOworCX0KKwlyZXR1cm4gZXJyczsKK30KKworaW50IGNtZF9fZHVtcF9jYWNoZV90cmVlKGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSBpc3RhdGU7CisJc3RydWN0IGNhY2hlX3RyZWUgKmFub3RoZXIgPSBjYWNoZV90cmVlKCk7CisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKTsKKwlpc3RhdGUgPSB0aGVfaW5kZXg7CisJaXN0YXRlLmNhY2hlX3RyZWUgPSBhbm90aGVyOworCWNhY2hlX3RyZWVfdXBkYXRlKCZpc3RhdGUsIFdSSVRFX1RSRUVfRFJZX1JVTik7CisJcmV0dXJuIGR1bXBfY2FjaGVfdHJlZShhY3RpdmVfY2FjaGVfdHJlZSwgYW5vdGhlciwgIiIpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1kdW1wLWZzbW9uaXRvci5jIGIvdC9oZWxwZXIvdGVzdC1kdW1wLWZzbW9uaXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWYwYWMKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWR1bXAtZnNtb25pdG9yLmMKQEAgLTAsMCArMSwyMiBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBjbWRfX2R1bXBfZnNtb25pdG9yKGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gdGhlX3JlcG9zaXRvcnktPmluZGV4OworCWludCBpOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWlmIChkb19yZWFkX2luZGV4KGlzdGF0ZSwgdGhlX3JlcG9zaXRvcnktPmluZGV4X2ZpbGUsIDApIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIik7CisJaWYgKCFpc3RhdGUtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSkgeworCQlwcmludGYoIm5vIGZzbW9uaXRvclxuIik7CisJCXJldHVybiAwOworCX0KKwlwcmludGYoImZzbW9uaXRvciBsYXN0IHVwZGF0ZSAlc1xuIiwgaXN0YXRlLT5mc21vbml0b3JfbGFzdF91cGRhdGUpOworCisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykKKwkJcHJpbnRmKChpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkgPyAiKyIgOiAiLSIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWR1bXAtc3BsaXQtaW5kZXguYyBiL3QvaGVscGVyL3Rlc3QtZHVtcC1zcGxpdC1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzY4OWQKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWR1bXAtc3BsaXQtaW5kZXguYwpAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzcGxpdC1pbmRleC5oIgorI2luY2x1ZGUgImV3YWgvZXdvay5oIgorCitzdGF0aWMgdm9pZCBzaG93X2JpdChzaXplX3QgcG9zLCB2b2lkICpkYXRhKQoreworCXByaW50ZigiICVkIiwgKGludClwb3MpOworfQorCitpbnQgY21kX19kdW1wX3NwbGl0X2luZGV4KGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXN0cnVjdCBzcGxpdF9pbmRleCAqc2k7CisJaW50IGk7CisKKwlkb19yZWFkX2luZGV4KCZ0aGVfaW5kZXgsIGF2WzFdLCAxKTsKKwlwcmludGYoIm93biAlc1xuIiwgb2lkX3RvX2hleCgmdGhlX2luZGV4Lm9pZCkpOworCXNpID0gdGhlX2luZGV4LnNwbGl0X2luZGV4OworCWlmICghc2kpIHsKKwkJcHJpbnRmKCJub3QgYSBzcGxpdCBpbmRleFxuIik7CisJCXJldHVybiAwOworCX0KKwlwcmludGYoImJhc2UgJXNcbiIsIG9pZF90b19oZXgoJnNpLT5iYXNlX29pZCkpOworCWZvciAoaSA9IDA7IGkgPCB0aGVfaW5kZXguY2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gdGhlX2luZGV4LmNhY2hlW2ldOworCQlwcmludGYoIiUwNm8gJXMgJWRcdCVzXG4iLCBjZS0+Y2VfbW9kZSwKKwkJICAgICAgIG9pZF90b19oZXgoJmNlLT5vaWQpLCBjZV9zdGFnZShjZSksIGNlLT5uYW1lKTsKKwl9CisJcHJpbnRmKCJyZXBsYWNlbWVudHM6Iik7CisJaWYgKHNpLT5yZXBsYWNlX2JpdG1hcCkKKwkJZXdhaF9lYWNoX2JpdChzaS0+cmVwbGFjZV9iaXRtYXAsIHNob3dfYml0LCBOVUxMKTsKKwlwcmludGYoIlxuZGVsZXRpb25zOiIpOworCWlmIChzaS0+ZGVsZXRlX2JpdG1hcCkKKwkJZXdhaF9lYWNoX2JpdChzaS0+ZGVsZXRlX2JpdG1hcCwgc2hvd19iaXQsIE5VTEwpOworCXByaW50ZigiXG4iKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUuYyBiL3QvaGVscGVyL3Rlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjBmMmM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZS5jCkBAIC0wLDAgKzEsNjYgQEAKKyNkZWZpbmUgVVNFX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK3N0YXRpYyBpbnQgY29tcGFyZV91bnRyYWNrZWQoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IGNoYXIgKmNvbnN0ICphID0gYV87CisJY29uc3QgY2hhciAqY29uc3QgKmIgPSBiXzsKKwlyZXR1cm4gc3RyY21wKCphLCAqYik7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9kaXIoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpjb25zdCAqYSA9IGFfOworCWNvbnN0IHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpjb25zdCAqYiA9IGJfOworCXJldHVybiBzdHJjbXAoKCphKS0+bmFtZSwgKCpiKS0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXAoc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVjZCwgc3RydWN0IHN0cmJ1ZiAqYmFzZSkKK3sKKwlpbnQgaSwgbGVuOworCVFTT1JUKHVjZC0+dW50cmFja2VkLCB1Y2QtPnVudHJhY2tlZF9uciwgY29tcGFyZV91bnRyYWNrZWQpOworCVFTT1JUKHVjZC0+ZGlycywgdWNkLT5kaXJzX25yLCBjb21wYXJlX2Rpcik7CisJbGVuID0gYmFzZS0+bGVuOworCXN0cmJ1Zl9hZGRmKGJhc2UsICIlcy8iLCB1Y2QtPm5hbWUpOworCXByaW50ZigiJXMgJXMiLCBiYXNlLT5idWYsCisJICAgICAgIG9pZF90b19oZXgoJnVjZC0+ZXhjbHVkZV9vaWQpKTsKKwlpZiAodWNkLT5yZWN1cnNlKQorCQlmcHV0cygiIHJlY3Vyc2UiLCBzdGRvdXQpOworCWlmICh1Y2QtPmNoZWNrX29ubHkpCisJCWZwdXRzKCIgY2hlY2tfb25seSIsIHN0ZG91dCk7CisJaWYgKHVjZC0+dmFsaWQpCisJCWZwdXRzKCIgdmFsaWQiLCBzdGRvdXQpOworCXByaW50ZigiXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgdWNkLT51bnRyYWNrZWRfbnI7IGkrKykKKwkJcHJpbnRmKCIlc1xuIiwgdWNkLT51bnRyYWNrZWRbaV0pOworCWZvciAoaSA9IDA7IGkgPCB1Y2QtPmRpcnNfbnI7IGkrKykKKwkJZHVtcCh1Y2QtPmRpcnNbaV0sIGJhc2UpOworCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgbGVuKTsKK30KKworaW50IGNtZF9fZHVtcF91bnRyYWNrZWRfY2FjaGUoaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCit7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWM7CisJc3RydWN0IHN0cmJ1ZiBiYXNlID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBIYWNrIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUgdW50cmFja2VkIGNhY2hlIHdoZW4gd2UgcmVhZCBpdCAqLworCWlnbm9yZV91bnRyYWNrZWRfY2FjaGVfY29uZmlnID0gMTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIik7CisJdWMgPSB0aGVfaW5kZXgudW50cmFja2VkOworCWlmICghdWMpIHsKKwkJcHJpbnRmKCJubyB1bnRyYWNrZWQgY2FjaGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcHJpbnRmKCJpbmZvL2V4Y2x1ZGUgJXNcbiIsIG9pZF90b19oZXgoJnVjLT5zc19pbmZvX2V4Y2x1ZGUub2lkKSk7CisJcHJpbnRmKCJjb3JlLmV4Y2x1ZGVzZmlsZSAlc1xuIiwgb2lkX3RvX2hleCgmdWMtPnNzX2V4Y2x1ZGVzX2ZpbGUub2lkKSk7CisJcHJpbnRmKCJleGNsdWRlX3Blcl9kaXIgJXNcbiIsIHVjLT5leGNsdWRlX3Blcl9kaXIpOworCXByaW50ZigiZmxhZ3MgJTA4eFxuIiwgdWMtPmRpcl9mbGFncyk7CisJaWYgKHVjLT5yb290KQorCQlkdW1wKHVjLT5yb290LCAmYmFzZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWV4YW1wbGUtZGVjb3JhdGUuYyBiL3QvaGVscGVyL3Rlc3QtZXhhbXBsZS1kZWNvcmF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YTFjZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWV4YW1wbGUtZGVjb3JhdGUuYwpAQCAtMCwwICsxLDc1IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorCitpbnQgY21kX19leGFtcGxlX2RlY29yYXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgZGVjb3JhdGlvbiBuOworCXN0cnVjdCBvYmplY3RfaWQgb25lX29pZCA9IHsgezF9IH07CisJc3RydWN0IG9iamVjdF9pZCB0d29fb2lkID0geyB7Mn0gfTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRocmVlX29pZCA9IHsgezN9IH07CisJc3RydWN0IG9iamVjdCAqb25lLCAqdHdvLCAqdGhyZWU7CisKKwlpbnQgZGVjb3JhdGlvbl9hLCBkZWNvcmF0aW9uX2I7CisKKwl2b2lkICpyZXQ7CisKKwlpbnQgaSwgb2JqZWN0c19ub3RpY2VkID0gMDsKKworCS8qCisJICogVGhlIHN0cnVjdCBtdXN0IGJlIHplcm8taW5pdGlhbGl6ZWQuCisJICovCisJbWVtc2V0KCZuLCAwLCBzaXplb2YobikpOworCisJLyoKKwkgKiBBZGQgMiBvYmplY3RzLCBvbmUgd2l0aCBhIG5vbi1OVUxMIGRlY29yYXRpb24gYW5kIG9uZSB3aXRoIGEgTlVMTAorCSAqIGRlY29yYXRpb24uCisJICovCisJb25lID0gbG9va3VwX3Vua25vd25fb2JqZWN0KCZvbmVfb2lkKTsKKwl0d28gPSBsb29rdXBfdW5rbm93bl9vYmplY3QoJnR3b19vaWQpOworCXJldCA9IGFkZF9kZWNvcmF0aW9uKCZuLCBvbmUsICZkZWNvcmF0aW9uX2EpOworCWlmIChyZXQpCisJCUJVRygid2hlbiBhZGRpbmcgYSBicmFuZC1uZXcgb2JqZWN0LCBOVUxMIHNob3VsZCBiZSByZXR1cm5lZCIpOworCXJldCA9IGFkZF9kZWNvcmF0aW9uKCZuLCB0d28sIE5VTEwpOworCWlmIChyZXQpCisJCUJVRygid2hlbiBhZGRpbmcgYSBicmFuZC1uZXcgb2JqZWN0LCBOVUxMIHNob3VsZCBiZSByZXR1cm5lZCIpOworCisJLyoKKwkgKiBXaGVuIHJlLWFkZGluZyBhbiBhbHJlYWR5IGV4aXN0aW5nIG9iamVjdCwgdGhlIG9sZCBkZWNvcmF0aW9uIGlzCisJICogcmV0dXJuZWQuCisJICovCisJcmV0ID0gYWRkX2RlY29yYXRpb24oJm4sIG9uZSwgTlVMTCk7CisJaWYgKHJldCAhPSAmZGVjb3JhdGlvbl9hKQorCQlCVUcoIndoZW4gcmVhZGRpbmcgYW4gYWxyZWFkeSBleGlzdGluZyBvYmplY3QsIGV4aXN0aW5nIGRlY29yYXRpb24gc2hvdWxkIGJlIHJldHVybmVkIik7CisJcmV0ID0gYWRkX2RlY29yYXRpb24oJm4sIHR3bywgJmRlY29yYXRpb25fYik7CisJaWYgKHJldCkKKwkJQlVHKCJ3aGVuIHJlYWRkaW5nIGFuIGFscmVhZHkgZXhpc3Rpbmcgb2JqZWN0LCBleGlzdGluZyBkZWNvcmF0aW9uIHNob3VsZCBiZSByZXR1cm5lZCIpOworCisJLyoKKwkgKiBMb29rdXAgcmV0dXJucyB0aGUgYWRkZWQgZGVjbGFyYXRpb25zLCBvciBOVUxMIGlmIHRoZSBvYmplY3Qgd2FzCisJICogbmV2ZXIgYWRkZWQuCisJICovCisJcmV0ID0gbG9va3VwX2RlY29yYXRpb24oJm4sIG9uZSk7CisJaWYgKHJldCkKKwkJQlVHKCJsb29rdXAgc2hvdWxkIHJldHVybiBhZGRlZCBkZWNsYXJhdGlvbiIpOworCXJldCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZuLCB0d28pOworCWlmIChyZXQgIT0gJmRlY29yYXRpb25fYikKKwkJQlVHKCJsb29rdXAgc2hvdWxkIHJldHVybiBhZGRlZCBkZWNsYXJhdGlvbiIpOworCXRocmVlID0gbG9va3VwX3Vua25vd25fb2JqZWN0KCZ0aHJlZV9vaWQpOworCXJldCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZuLCB0aHJlZSk7CisJaWYgKHJldCkKKwkJQlVHKCJsb29rdXAgZm9yIHVua25vd24gb2JqZWN0IHNob3VsZCByZXR1cm4gTlVMTCIpOworCisJLyoKKwkgKiBUaGUgdXNlciBjYW4gYWxzbyBsb29wIHRocm91Z2ggYWxsIGVudHJpZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG4uc2l6ZTsgaSsrKSB7CisJCWlmIChuLmVudHJpZXNbaV0uYmFzZSkKKwkJCW9iamVjdHNfbm90aWNlZCsrOworCX0KKwlpZiAob2JqZWN0c19ub3RpY2VkICE9IDIpCisJCUJVRygic2hvdWxkIGhhdmUgMiBvYmplY3RzIik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZmFrZS1zc2guYyBiL3QvaGVscGVyL3Rlc3QtZmFrZS1zc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmJlZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1mYWtlLXNzaC5jCkBAIC0wLDAgKzEsMzAgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitpbnQgY21kX21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnRyYXNoX2RpcmVjdG9yeSA9IGdldGVudigiVFJBU0hfRElSRUNUT1JZIik7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmOworCWludCBpOworCWNvbnN0IGNoYXIgKmNoaWxkX2FyZ3ZbXSA9IHsgTlVMTCwgTlVMTCB9OworCisJLyogRmlyc3QsIHByaW50IGFsbCBwYXJhbWV0ZXJzIGludG8gJFRSQVNIX0RJUkVDVE9SWS9zc2gtb3V0cHV0ICovCisJaWYgKCF0cmFzaF9kaXJlY3RvcnkpCisJCWRpZSgiTmVlZCBhIFRSQVNIX0RJUkVDVE9SWSEiKTsKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMvc3NoLW91dHB1dCIsIHRyYXNoX2RpcmVjdG9yeSk7CisJZiA9IGZvcGVuKGJ1Zi5idWYsICJ3Iik7CisJaWYgKCFmKQorCQlkaWUoIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIsIGJ1Zi5idWYpOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCWZwcmludGYoZiwgIiVzJXMiLCBpID4gMCA/ICIgIiA6ICIiLCBpID4gMCA/IGFyZ3ZbaV0gOiAic3NoOiIpOworCWZwcmludGYoZiwgIlxuIik7CisJZmNsb3NlKGYpOworCisJLyogTm93LCBldmFsdWF0ZSB0aGUgKmxhc3QqIHBhcmFtZXRlciAqLworCWlmIChhcmdjIDwgMikKKwkJcmV0dXJuIDA7CisJY2hpbGRfYXJndlswXSA9IGFyZ3ZbYXJnYyAtIDFdOworCXJldHVybiBydW5fY29tbWFuZF92X29wdChjaGlsZF9hcmd2LCBSVU5fVVNJTkdfU0hFTEwpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1nZW5yYW5kb20uYyBiL3QvaGVscGVyL3Rlc3QtZ2VucmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliOGRjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtZ2VucmFuZG9tLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFNpbXBsZSByYW5kb20gZGF0YSBnZW5lcmF0b3IgdXNlZCB0byBjcmVhdGUgcmVwcm9kdWNpYmxlIHRlc3QgZmlsZXMuCisgKiBUaGlzIGlzIGluc3BpcmVkIGZyb20gUE9TSVguMS0yMDAxIGltcGxlbWVudGF0aW9uIGV4YW1wbGUgZm9yIHJhbmQoKS4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBOaWNvbGFzIFBpdHJlLCBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludCBjbWRfX2dlbnJhbmRvbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgbG9uZyBjb3VudCwgbmV4dCA9IDA7CisJdW5zaWduZWQgY2hhciAqYzsKKworCWlmIChhcmdjIDwgMiB8fCBhcmdjID4gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyA8c2VlZF9zdHJpbmc+IFs8c2l6ZT5dXG4iLCBhcmd2WzBdKTsKKwkJcmV0dXJuIDE7CisJfQorCisJYyA9ICh1bnNpZ25lZCBjaGFyICopIGFyZ3ZbMV07CisJZG8geworCQluZXh0ID0gbmV4dCAqIDExICsgKmM7CisJfSB3aGlsZSAoKmMrKyk7CisKKwljb3VudCA9IChhcmdjID09IDMpID8gc3RydG91bChhcmd2WzJdLCBOVUxMLCAwKSA6IC0xTDsKKworCXdoaWxlIChjb3VudC0tKSB7CisJCW5leHQgPSBuZXh0ICogMTEwMzUxNTI0NSArIDEyMzQ1OworCQlpZiAocHV0Y2hhcigobmV4dCA+PiAxNikgJiAweGZmKSA9PSBFT0YpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWdlbnplcm9zLmMgYi90L2hlbHBlci90ZXN0LWdlbnplcm9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzMmY1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtZ2VuemVyb3MuYwpAQCAtMCwwICsxLDIxIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludCBjbWRfX2dlbnplcm9zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlsb25nIGNvdW50OworCisJaWYgKGFyZ2MgPiAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIFs8Y291bnQ+XVxuIiwgYXJndlswXSk7CisJCXJldHVybiAxOworCX0KKworCWNvdW50ID0gYXJnYyA+IDEgPyBzdHJ0b2woYXJndlsxXSwgTlVMTCwgMCkgOiAtMUw7CisKKwl3aGlsZSAoY291bnQgPCAwIHx8IGNvdW50LS0pIHsKKwkJaWYgKHB1dGNoYXIoMCkgPT0gRU9GKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1oYXNoLXNwZWVkLmMgYi90L2hlbHBlci90ZXN0LWhhc2gtc3BlZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzIyMzNjCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1oYXNoLXNwZWVkLmMKQEAgLTAsMCArMSw2MSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKKyNkZWZpbmUgTlVNX1NFQ09ORFMgMworCitzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZV9oYXNoKGNvbnN0IHN0cnVjdCBnaXRfaGFzaF9hbGdvICphbGdvLCBnaXRfaGFzaF9jdHggKmN0eCwgdWludDhfdCAqZmluYWwsIGNvbnN0IHZvaWQgKnAsIHNpemVfdCBsZW4pCit7CisJYWxnby0+aW5pdF9mbihjdHgpOworCWFsZ28tPnVwZGF0ZV9mbihjdHgsIHAsIGxlbik7CisJYWxnby0+ZmluYWxfZm4oZmluYWwsIGN0eCk7Cit9CisKK2ludCBjbWRfX2hhc2hfc3BlZWQoaW50IGFjLCBjb25zdCBjaGFyICoqYXYpCit7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWl07CisJY2xvY2tfdCBpbml0aWFsLCBzdGFydCwgZW5kOworCXVuc2lnbmVkIGJ1ZnNpemVzW10gPSB7IDY0LCAyNTYsIDEwMjQsIDgxOTIsIDE2Mzg0IH07CisJaW50IGk7CisJdm9pZCAqcDsKKwljb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqYWxnbyA9IE5VTEw7CisKKwlpZiAoYWMgPT0gMikgeworCQlmb3IgKGkgPSAxOyBpIDwgR0lUX0hBU0hfTkFMR09TOyBpKyspIHsKKwkJCWlmICghc3RyY21wKGF2WzFdLCBoYXNoX2FsZ29zW2ldLm5hbWUpKSB7CisJCQkJYWxnbyA9ICZoYXNoX2FsZ29zW2ldOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWlmICghYWxnbykKKwkJZGllKCJ1c2FnZTogdGVzdC10b29sIGhhc2gtc3BlZWQgYWxnb19uYW1lIik7CisKKwkvKiBVc2UgdGhpcyBhcyBhbiBvZmZzZXQgdG8gbWFrZSBvdmVyZmxvdyBsZXNzIGxpa2VseS4gKi8KKwlpbml0aWFsID0gY2xvY2soKTsKKworCXByaW50ZigiYWxnbzogJXNcbiIsIGFsZ28tPm5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVmc2l6ZXMpOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBqLCBrYjsKKwkJZG91YmxlIGtiX3Blcl9zZWM7CisJCXAgPSB4Y2FsbG9jKDEsIGJ1ZnNpemVzW2ldKTsKKwkJc3RhcnQgPSBlbmQgPSBjbG9jaygpIC0gaW5pdGlhbDsKKwkJZm9yIChqID0gMDsgKChlbmQgLSBzdGFydCkgLyBDTE9DS1NfUEVSX1NFQykgPCBOVU1fU0VDT05EUzsgaisrKSB7CisJCQljb21wdXRlX2hhc2goYWxnbywgJmN0eCwgaGFzaCwgcCwgYnVmc2l6ZXNbaV0pOworCisJCQkvKgorCQkJICogT25seSBjaGVjayBlbGFwc2VkIHRpbWUgZXZlcnkgMTI4IGl0ZXJhdGlvbnMgdG8gYXZvaWQKKwkJCSAqIGRvbWluYXRpbmcgdGhlIHJ1bnRpbWUgd2l0aCBzeXN0ZW0gY2FsbHMuCisJCQkgKi8KKwkJCWlmICghKGogJiAxMjcpKQorCQkJCWVuZCA9IGNsb2NrKCkgLSBpbml0aWFsOworCQl9CisJCWtiID0gaiAqIGJ1ZnNpemVzW2ldOworCQlrYl9wZXJfc2VjID0ga2IgLyAoMTAyNCAqICgoZG91YmxlKWVuZCAtIHN0YXJ0KSAvIENMT0NLU19QRVJfU0VDKTsKKwkJcHJpbnRmKCJzaXplICV1OiAlbHUgaXRlcnM7ICVsdSBLaUI7ICUwLjJmIEtpQi9zXG4iLCBidWZzaXplc1tpXSwgaiwga2IsIGtiX3Blcl9zZWMpOworCQlmcmVlKHApOworCX0KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWhhc2guYyBiL3QvaGVscGVyL3Rlc3QtaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzFkZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LWhhc2guYwpAQCAtMCwwICsxLDU4IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGNtZF9oYXNoX2ltcGwoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGludCBhbGdvKQoreworCWdpdF9oYXNoX2N0eCBjdHg7CisJdW5zaWduZWQgY2hhciBoYXNoW0dJVF9NQVhfSEVYU1pdOworCXVuc2lnbmVkIGJ1ZnN6ID0gODE5MjsKKwlpbnQgYmluYXJ5ID0gMDsKKwljaGFyICpidWZmZXI7CisJY29uc3Qgc3RydWN0IGdpdF9oYXNoX2FsZ28gKmFsZ29wID0gJmhhc2hfYWxnb3NbYWxnb107CisKKwlpZiAoYWMgPT0gMikgeworCQlpZiAoIXN0cmNtcChhdlsxXSwgIi1iIikpCisJCQliaW5hcnkgPSAxOworCQllbHNlCisJCQlidWZzeiA9IHN0cnRvdWwoYXZbMV0sIE5VTEwsIDEwKSAqIDEwMjQgKiAxMDI0OworCX0KKworCWlmICghYnVmc3opCisJCWJ1ZnN6ID0gODE5MjsKKworCXdoaWxlICgoYnVmZmVyID0gbWFsbG9jKGJ1ZnN6KSkgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImJ1ZnN6ICV1IGlzIHRvbyBiaWcsIGhhbHZpbmcuLi5cbiIsIGJ1ZnN6KTsKKwkJYnVmc3ogLz0gMjsKKwkJaWYgKGJ1ZnN6IDwgMTAyNCkKKwkJCWRpZSgiT09QUyIpOworCX0KKworCWFsZ29wLT5pbml0X2ZuKCZjdHgpOworCisJd2hpbGUgKDEpIHsKKwkJc3NpemVfdCBzeiwgdGhpc19zejsKKwkJY2hhciAqY3AgPSBidWZmZXI7CisJCXVuc2lnbmVkIHJvb20gPSBidWZzejsKKwkJdGhpc19zeiA9IDA7CisJCXdoaWxlIChyb29tKSB7CisJCQlzeiA9IHhyZWFkKDAsIGNwLCByb29tKTsKKwkJCWlmIChzeiA9PSAwKQorCQkJCWJyZWFrOworCQkJaWYgKHN6IDwgMCkKKwkJCQlkaWVfZXJybm8oInRlc3QtaGFzaCIpOworCQkJdGhpc19zeiArPSBzejsKKwkJCWNwICs9IHN6OworCQkJcm9vbSAtPSBzejsKKwkJfQorCQlpZiAodGhpc19zeiA9PSAwKQorCQkJYnJlYWs7CisJCWFsZ29wLT51cGRhdGVfZm4oJmN0eCwgYnVmZmVyLCB0aGlzX3N6KTsKKwl9CisJYWxnb3AtPmZpbmFsX2ZuKGhhc2gsICZjdHgpOworCisJaWYgKGJpbmFyeSkKKwkJZndyaXRlKGhhc2gsIDEsIGFsZ29wLT5yYXdzeiwgc3Rkb3V0KTsKKwllbHNlCisJCXB1dHMoaGFzaF90b19oZXhfYWxnb3AoaGFzaCwgYWxnb3ApKTsKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1oYXNobWFwLmMgYi90L2hlbHBlci90ZXN0LWhhc2htYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzg3MDYyCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1oYXNobWFwLmMKQEAgLTAsMCArMSwyNjcgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0cnVjdCB0ZXN0X2VudHJ5Cit7CisJaW50IHBhZGRpbmc7IC8qIGhhc2htYXAgZW50cnkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJLyoga2V5IGFuZCB2YWx1ZSBhcyB0d28gXDAtdGVybWluYXRlZCBzdHJpbmdzICovCisJY2hhciBrZXlbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCB0ZXN0X2VudHJ5ICplKQoreworCXJldHVybiBlLT5rZXkgKyBzdHJsZW4oZS0+a2V5KSArIDE7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9lbnRyeV9jbXAoY29uc3Qgdm9pZCAqY21wX2RhdGEsCisJCQkgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplcHRyLAorCQkJICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnlfb3Jfa2V5LAorCQkJICBjb25zdCB2b2lkICprZXlkYXRhKQoreworCWNvbnN0IGludCBpZ25vcmVfY2FzZSA9IGNtcF9kYXRhID8gKigoaW50ICopY21wX2RhdGEpIDogMDsKKwljb25zdCBzdHJ1Y3QgdGVzdF9lbnRyeSAqZTEsICplMjsKKwljb25zdCBjaGFyICprZXkgPSBrZXlkYXRhOworCisJZTEgPSBjb250YWluZXJfb2YoZXB0ciwgY29uc3Qgc3RydWN0IHRlc3RfZW50cnksIGVudCk7CisJZTIgPSBjb250YWluZXJfb2YoZW50cnlfb3Jfa2V5LCBjb25zdCBzdHJ1Y3QgdGVzdF9lbnRyeSwgZW50KTsKKworCWlmIChpZ25vcmVfY2FzZSkKKwkJcmV0dXJuIHN0cmNhc2VjbXAoZTEtPmtleSwga2V5ID8ga2V5IDogZTItPmtleSk7CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGUxLT5rZXksIGtleSA/IGtleSA6IGUyLT5rZXkpOworfQorCitzdGF0aWMgc3RydWN0IHRlc3RfZW50cnkgKmFsbG9jX3Rlc3RfZW50cnkodW5zaWduZWQgaW50IGhhc2gsCisJCQkJCSAgIGNoYXIgKmtleSwgY2hhciAqdmFsdWUpCit7CisJc2l6ZV90IGtsZW4gPSBzdHJsZW4oa2V5KTsKKwlzaXplX3QgdmxlbiA9IHN0cmxlbih2YWx1ZSk7CisJc3RydWN0IHRlc3RfZW50cnkgKmVudHJ5ID0geG1hbGxvYyhzdF9hZGQ0KHNpemVvZigqZW50cnkpLCBrbGVuLCB2bGVuLCAyKSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyeS0+ZW50LCBoYXNoKTsKKwltZW1jcHkoZW50cnktPmtleSwga2V5LCBrbGVuICsgMSk7CisJbWVtY3B5KGVudHJ5LT5rZXkgKyBrbGVuICsgMSwgdmFsdWUsIHZsZW4gKyAxKTsKKwlyZXR1cm4gZW50cnk7Cit9CisKKyNkZWZpbmUgSEFTSF9NRVRIT0RfRk5WIDAKKyNkZWZpbmUgSEFTSF9NRVRIT0RfSSAxCisjZGVmaW5lIEhBU0hfTUVUSE9EX0lESVYxMCAyCisjZGVmaW5lIEhBU0hfTUVUSE9EXzAgMworI2RlZmluZSBIQVNIX01FVEhPRF9YMiA0CisjZGVmaW5lIFRFU1RfU1BBUlNFIDgKKyNkZWZpbmUgVEVTVF9BREQgMTYKKyNkZWZpbmUgVEVTVF9TSVpFIDEwMDAwMAorCitzdGF0aWMgdW5zaWduZWQgaW50IGhhc2godW5zaWduZWQgaW50IG1ldGhvZCwgdW5zaWduZWQgaW50IGksIGNvbnN0IGNoYXIgKmtleSkKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IDA7CisJc3dpdGNoIChtZXRob2QgJiAzKQorCXsKKwljYXNlIEhBU0hfTUVUSE9EX0ZOVjoKKwkJaGFzaCA9IHN0cmhhc2goa2V5KTsKKwkJYnJlYWs7CisJY2FzZSBIQVNIX01FVEhPRF9JOgorCQloYXNoID0gaTsKKwkJYnJlYWs7CisJY2FzZSBIQVNIX01FVEhPRF9JRElWMTA6CisJCWhhc2ggPSBpIC8gMTA7CisJCWJyZWFrOworCWNhc2UgSEFTSF9NRVRIT0RfMDoKKwkJaGFzaCA9IDA7CisJCWJyZWFrOworCX0KKworCWlmIChtZXRob2QgJiBIQVNIX01FVEhPRF9YMikKKwkJaGFzaCA9IDIgKiBoYXNoOworCXJldHVybiBoYXNoOworfQorCisvKgorICogVGVzdCBwZXJmb3JtYW5jZSBvZiBoYXNobWFwLltjaF0KKyAqIFVzYWdlOiB0aW1lIGVjaG8gInBlcmZoYXNobWFwIG1ldGhvZCByb3VuZHMiIHwgdGVzdC10b29sIGhhc2htYXAKKyAqLworc3RhdGljIHZvaWQgcGVyZl9oYXNobWFwKHVuc2lnbmVkIGludCBtZXRob2QsIHVuc2lnbmVkIGludCByb3VuZHMpCit7CisJc3RydWN0IGhhc2htYXAgbWFwOworCWNoYXIgYnVmWzE2XTsKKwlzdHJ1Y3QgdGVzdF9lbnRyeSAqKmVudHJpZXM7CisJdW5zaWduZWQgaW50ICpoYXNoZXM7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlBTExPQ19BUlJBWShlbnRyaWVzLCBURVNUX1NJWkUpOworCUFMTE9DX0FSUkFZKGhhc2hlcywgVEVTVF9TSVpFKTsKKwlmb3IgKGkgPSAwOyBpIDwgVEVTVF9TSVpFOyBpKyspIHsKKwkJeHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlaSIsIGkpOworCQllbnRyaWVzW2ldID0gYWxsb2NfdGVzdF9lbnRyeSgwLCBidWYsICIiKTsKKwkJaGFzaGVzW2ldID0gaGFzaChtZXRob2QsIGksIGVudHJpZXNbaV0tPmtleSk7CisJfQorCisJaWYgKG1ldGhvZCAmIFRFU1RfQUREKSB7CisJCS8qIHRlc3QgYWRkaW5nIHRvIHRoZSBtYXAgKi8KKwkJZm9yIChqID0gMDsgaiA8IHJvdW5kczsgaisrKSB7CisJCQloYXNobWFwX2luaXQoJm1hcCwgdGVzdF9lbnRyeV9jbXAsIE5VTEwsIDApOworCisJCQkvKiBhZGQgZW50cmllcyAqLworCQkJZm9yIChpID0gMDsgaSA8IFRFU1RfU0laRTsgaSsrKSB7CisJCQkJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyaWVzW2ldLT5lbnQsIGhhc2hlc1tpXSk7CisJCQkJaGFzaG1hcF9hZGQoJm1hcCwgJmVudHJpZXNbaV0tPmVudCk7CisJCQl9CisKKwkJCWhhc2htYXBfZnJlZSgmbWFwKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHRlc3QgbWFwIGxvb2t1cHMgKi8KKwkJaGFzaG1hcF9pbml0KCZtYXAsIHRlc3RfZW50cnlfY21wLCBOVUxMLCAwKTsKKworCQkvKiBmaWxsIHRoZSBtYXAgKHNwYXJzZWx5IGlmIHNwZWNpZmllZCkgKi8KKwkJaiA9IChtZXRob2QgJiBURVNUX1NQQVJTRSkgPyBURVNUX1NJWkUgLyAxMCA6IFRFU1RfU0laRTsKKwkJZm9yIChpID0gMDsgaSA8IGo7IGkrKykgeworCQkJaGFzaG1hcF9lbnRyeV9pbml0KCZlbnRyaWVzW2ldLT5lbnQsIGhhc2hlc1tpXSk7CisJCQloYXNobWFwX2FkZCgmbWFwLCAmZW50cmllc1tpXS0+ZW50KTsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCByb3VuZHM7IGorKykgeworCQkJZm9yIChpID0gMDsgaSA8IFRFU1RfU0laRTsgaSsrKSB7CisJCQkJaGFzaG1hcF9nZXRfZnJvbV9oYXNoKCZtYXAsIGhhc2hlc1tpXSwKKwkJCQkJCSAgICAgIGVudHJpZXNbaV0tPmtleSk7CisJCQl9CisJCX0KKworCQloYXNobWFwX2ZyZWUoJm1hcCk7CisJfQorfQorCisjZGVmaW5lIERFTElNICIgXHRcclxuIgorCisvKgorICogUmVhZCBzdGRpbiBsaW5lIGJ5IGxpbmUgYW5kIHByaW50IHJlc3VsdCBvZiBjb21tYW5kcyB0byBzdGRvdXQ6CisgKgorICogaGFzaCBrZXkgLT4gc3RyaGFzaChrZXkpIG1lbWhhc2goa2V5KSBzdHJpaGFzaChrZXkpIG1lbWloYXNoKGtleSkKKyAqIHB1dCBrZXkgdmFsdWUgLT4gTlVMTCAvIG9sZCB2YWx1ZQorICogZ2V0IGtleSAtPiBOVUxMIC8gdmFsdWUKKyAqIHJlbW92ZSBrZXkgLT4gTlVMTCAvIG9sZCB2YWx1ZQorICogaXRlcmF0ZSAtPiBrZXkxIHZhbHVlMVxua2V5MiB2YWx1ZTJcbi4uLgorICogc2l6ZSAtPiB0YWJsZXNpemUgbnVtZW50cmllcworICoKKyAqIHBlcmZoYXNobWFwIG1ldGhvZCByb3VuZHMgLT4gdGVzdCBoYXNobWFwLltjaF0gcGVyZm9ybWFuY2UKKyAqLworaW50IGNtZF9faGFzaG1hcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGhhc2htYXAgbWFwOworCWludCBpY2FzZTsKKworCS8qIGluaXQgaGFzaCBtYXAgKi8KKwlpY2FzZSA9IGFyZ2MgPiAxICYmICFzdHJjbXAoImlnbm9yZWNhc2UiLCBhcmd2WzFdKTsKKwloYXNobWFwX2luaXQoJm1hcCwgdGVzdF9lbnRyeV9jbXAsICZpY2FzZSwgMCk7CisKKwkvKiBwcm9jZXNzIGNvbW1hbmRzIGZyb20gc3RkaW4gKi8KKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluKSAhPSBFT0YpIHsKKwkJY2hhciAqY21kLCAqcDEgPSBOVUxMLCAqcDIgPSBOVUxMOworCQl1bnNpZ25lZCBpbnQgaGFzaCA9IDA7CisJCXN0cnVjdCB0ZXN0X2VudHJ5ICplbnRyeTsKKworCQkvKiBicmVhayBsaW5lIGludG8gY29tbWFuZCBhbmQgdXAgdG8gdHdvIHBhcmFtZXRlcnMgKi8KKwkJY21kID0gc3RydG9rKGxpbmUuYnVmLCBERUxJTSk7CisJCS8qIGlnbm9yZSBlbXB0eSBsaW5lcyAqLworCQlpZiAoIWNtZCB8fCAqY21kID09ICcjJykKKwkJCWNvbnRpbnVlOworCisJCXAxID0gc3RydG9rKE5VTEwsIERFTElNKTsKKwkJaWYgKHAxKSB7CisJCQloYXNoID0gaWNhc2UgPyBzdHJpaGFzaChwMSkgOiBzdHJoYXNoKHAxKTsKKwkJCXAyID0gc3RydG9rKE5VTEwsIERFTElNKTsKKwkJfQorCisJCWlmICghc3RyY21wKCJhZGQiLCBjbWQpICYmIHAxICYmIHAyKSB7CisKKwkJCS8qIGNyZWF0ZSBlbnRyeSB3aXRoIGtleSA9IHAxLCB2YWx1ZSA9IHAyICovCisJCQllbnRyeSA9IGFsbG9jX3Rlc3RfZW50cnkoaGFzaCwgcDEsIHAyKTsKKworCQkJLyogYWRkIHRvIGhhc2htYXAgKi8KKwkJCWhhc2htYXBfYWRkKCZtYXAsICZlbnRyeS0+ZW50KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoInB1dCIsIGNtZCkgJiYgcDEgJiYgcDIpIHsKKworCQkJLyogY3JlYXRlIGVudHJ5IHdpdGgga2V5ID0gcDEsIHZhbHVlID0gcDIgKi8KKwkJCWVudHJ5ID0gYWxsb2NfdGVzdF9lbnRyeShoYXNoLCBwMSwgcDIpOworCisJCQkvKiBhZGQgLyByZXBsYWNlIGVudHJ5ICovCisJCQllbnRyeSA9IGhhc2htYXBfcHV0X2VudHJ5KCZtYXAsIGVudHJ5LCBlbnQpOworCisJCQkvKiBwcmludCBhbmQgZnJlZSByZXBsYWNlZCBlbnRyeSwgaWYgYW55ICovCisJCQlwdXRzKGVudHJ5ID8gZ2V0X3ZhbHVlKGVudHJ5KSA6ICJOVUxMIik7CisJCQlmcmVlKGVudHJ5KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoImdldCIsIGNtZCkgJiYgcDEpIHsKKwkJCS8qIGxvb2t1cCBlbnRyeSBpbiBoYXNobWFwICovCisJCQllbnRyeSA9IGhhc2htYXBfZ2V0X2VudHJ5X2Zyb21faGFzaCgmbWFwLCBoYXNoLCBwMSwKKwkJCQkJCQlzdHJ1Y3QgdGVzdF9lbnRyeSwgZW50KTsKKworCQkJLyogcHJpbnQgcmVzdWx0ICovCisJCQlpZiAoIWVudHJ5KQorCQkJCXB1dHMoIk5VTEwiKTsKKwkJCWhhc2htYXBfZm9yX2VhY2hfZW50cnlfZnJvbSgmbWFwLCBlbnRyeSwgZW50KQorCQkJCXB1dHMoZ2V0X3ZhbHVlKGVudHJ5KSk7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJyZW1vdmUiLCBjbWQpICYmIHAxKSB7CisKKwkJCS8qIHNldHVwIHN0YXRpYyBrZXkgKi8KKwkJCXN0cnVjdCBoYXNobWFwX2VudHJ5IGtleTsKKwkJCXN0cnVjdCBoYXNobWFwX2VudHJ5ICpybTsKKwkJCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LCBoYXNoKTsKKworCQkJLyogcmVtb3ZlIGVudHJ5IGZyb20gaGFzaG1hcCAqLworCQkJcm0gPSBoYXNobWFwX3JlbW92ZSgmbWFwLCAma2V5LCBwMSk7CisJCQllbnRyeSA9IHJtID8gY29udGFpbmVyX29mKHJtLCBzdHJ1Y3QgdGVzdF9lbnRyeSwgZW50KQorCQkJCQk6IE5VTEw7CisKKwkJCS8qIHByaW50IHJlc3VsdCBhbmQgZnJlZSBlbnRyeSovCisJCQlwdXRzKGVudHJ5ID8gZ2V0X3ZhbHVlKGVudHJ5KSA6ICJOVUxMIik7CisJCQlmcmVlKGVudHJ5KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoIml0ZXJhdGUiLCBjbWQpKSB7CisJCQlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisKKwkJCWhhc2htYXBfZm9yX2VhY2hfZW50cnkoJm1hcCwgJml0ZXIsIGVudHJ5LAorCQkJCQkJZW50IC8qIG1lbWJlciBuYW1lICovKQorCQkJCXByaW50ZigiJXMgJXNcbiIsIGVudHJ5LT5rZXksIGdldF92YWx1ZShlbnRyeSkpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcCgic2l6ZSIsIGNtZCkpIHsKKworCQkJLyogcHJpbnQgdGFibGUgc2l6ZXMgKi8KKwkJCXByaW50ZigiJXUgJXVcbiIsIG1hcC50YWJsZXNpemUsCisJCQkgICAgICAgaGFzaG1hcF9nZXRfc2l6ZSgmbWFwKSk7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJpbnRlcm4iLCBjbWQpICYmIHAxKSB7CisKKwkJCS8qIHRlc3QgdGhhdCBzdHJpbnRlcm4gd29ya3MgKi8KKwkJCWNvbnN0IGNoYXIgKmkxID0gc3RyaW50ZXJuKHAxKTsKKwkJCWNvbnN0IGNoYXIgKmkyID0gc3RyaW50ZXJuKHAxKTsKKwkJCWlmIChzdHJjbXAoaTEsIHAxKSkKKwkJCQlwcmludGYoInN0cmludGVybiglcykgcmV0dXJucyAlc1xuIiwgcDEsIGkxKTsKKwkJCWVsc2UgaWYgKGkxID09IHAxKQorCQkJCXByaW50Zigic3RyaW50ZXJuKCVzKSByZXR1cm5zIGlucHV0IHBvaW50ZXJcbiIsIHAxKTsKKwkJCWVsc2UgaWYgKGkxICE9IGkyKQorCQkJCXByaW50Zigic3RyaW50ZXJuKCVzKSAhPSBzdHJpbnRlcm4oJXMpIiwgaTEsIGkyKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiVzXG4iLCBpMSk7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJwZXJmaGFzaG1hcCIsIGNtZCkgJiYgcDEgJiYgcDIpIHsKKworCQkJcGVyZl9oYXNobWFwKGF0b2kocDEpLCBhdG9pKHAyKSk7CisKKwkJfSBlbHNlIHsKKworCQkJcHJpbnRmKCJVbmtub3duIGNvbW1hbmQgJXNcbiIsIGNtZCk7CisKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwloYXNobWFwX2ZyZWVfZW50cmllcygmbWFwLCBzdHJ1Y3QgdGVzdF9lbnRyeSwgZW50KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtaW5kZXgtdmVyc2lvbi5jIGIvdC9oZWxwZXIvdGVzdC1pbmRleC12ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkMTA5NgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtaW5kZXgtdmVyc2lvbi5jCkBAIC0wLDAgKzEsMTUgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY21kX19pbmRleF92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY2FjaGVfaGVhZGVyIGhkcjsKKwlpbnQgdmVyc2lvbjsKKworCW1lbXNldCgmaGRyLDAsc2l6ZW9mKGhkcikpOworCWlmIChyZWFkKDAsICZoZHIsIHNpemVvZihoZHIpKSAhPSBzaXplb2YoaGRyKSkKKwkJcmV0dXJuIDA7CisJdmVyc2lvbiA9IG50b2hsKGhkci5oZHJfdmVyc2lvbik7CisJcHJpbnRmKCIlZFxuIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LWpzb24td3JpdGVyLmMgYi90L2hlbHBlci90ZXN0LWpzb24td3JpdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjNDUyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtanNvbi13cml0ZXIuYwpAQCAtMCwwICsxLDU2NSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAianNvbi13cml0ZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdF9vYmoxID0gIntcImFcIjpcImFiY1wiLFwiYlwiOjQyLFwiY1wiOnRydWV9IjsKK3N0YXRpYyBjb25zdCBjaGFyICpleHBlY3Rfb2JqMiA9ICJ7XCJhXCI6LTEsXCJiXCI6MjE0NzQ4MzY0NyxcImNcIjowfSI7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X29iajMgPSAie1wiYVwiOjAsXCJiXCI6NDI5NDk2NzI5NSxcImNcIjo5MjIzMzcyMDM2ODU0Nzc1ODA3fSI7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X29iajQgPSAie1widFwiOnRydWUsXCJmXCI6ZmFsc2UsXCJuXCI6bnVsbH0iOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdF9vYmo1ID0gIntcImFiY1xcdGRlZlwiOlwiYWJjXFxcXGRlZlwifSI7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X29iajYgPSAie1wiYVwiOjMuMTR9IjsKKworc3RhdGljIGNvbnN0IGNoYXIgKnByZXR0eV9vYmoxID0gKCJ7XG4iCisJCQkJICAiICBcImFcIjogXCJhYmNcIixcbiIKKwkJCQkgICIgIFwiYlwiOiA0MixcbiIKKwkJCQkgICIgIFwiY1wiOiB0cnVlXG4iCisJCQkJICAifSIpOworc3RhdGljIGNvbnN0IGNoYXIgKnByZXR0eV9vYmoyID0gKCJ7XG4iCisJCQkJICAiICBcImFcIjogLTEsXG4iCisJCQkJICAiICBcImJcIjogMjE0NzQ4MzY0NyxcbiIKKwkJCQkgICIgIFwiY1wiOiAwXG4iCisJCQkJICAifSIpOworc3RhdGljIGNvbnN0IGNoYXIgKnByZXR0eV9vYmozID0gKCJ7XG4iCisJCQkJICAiICBcImFcIjogMCxcbiIKKwkJCQkgICIgIFwiYlwiOiA0Mjk0OTY3Mjk1LFxuIgorCQkJCSAgIiAgXCJjXCI6IDkyMjMzNzIwMzY4NTQ3NzU4MDdcbiIKKwkJCQkgICJ9Iik7CitzdGF0aWMgY29uc3QgY2hhciAqcHJldHR5X29iajQgPSAoIntcbiIKKwkJCQkgICIgIFwidFwiOiB0cnVlLFxuIgorCQkJCSAgIiAgXCJmXCI6IGZhbHNlLFxuIgorCQkJCSAgIiAgXCJuXCI6IG51bGxcbiIKKwkJCQkgICJ9Iik7CisKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgb2JqMSA9IEpTT05fV1JJVEVSX0lOSVQ7CitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIG9iajIgPSBKU09OX1dSSVRFUl9JTklUOworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBvYmozID0gSlNPTl9XUklURVJfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgb2JqNCA9IEpTT05fV1JJVEVSX0lOSVQ7CitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIG9iajUgPSBKU09OX1dSSVRFUl9JTklUOworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBvYmo2ID0gSlNPTl9XUklURVJfSU5JVDsKKworc3RhdGljIHZvaWQgbWFrZV9vYmoxKGludCBwcmV0dHkpCit7CisJandfb2JqZWN0X2JlZ2luKCZvYmoxLCBwcmV0dHkpOworCXsKKwkJandfb2JqZWN0X3N0cmluZygmb2JqMSwgImEiLCAiYWJjIik7CisJCWp3X29iamVjdF9pbnRtYXgoJm9iajEsICJiIiwgNDIpOworCQlqd19vYmplY3RfdHJ1ZSgmb2JqMSwgImMiKTsKKwl9CisJandfZW5kKCZvYmoxKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9vYmoyKGludCBwcmV0dHkpCit7CisJandfb2JqZWN0X2JlZ2luKCZvYmoyLCBwcmV0dHkpOworCXsKKwkJandfb2JqZWN0X2ludG1heCgmb2JqMiwgImEiLCAtMSk7CisJCWp3X29iamVjdF9pbnRtYXgoJm9iajIsICJiIiwgMHg3ZmZmZmZmZik7CisJCWp3X29iamVjdF9pbnRtYXgoJm9iajIsICJjIiwgMCk7CisJfQorCWp3X2VuZCgmb2JqMik7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2Vfb2JqMyhpbnQgcHJldHR5KQoreworCWp3X29iamVjdF9iZWdpbigmb2JqMywgcHJldHR5KTsKKwl7CisJCWp3X29iamVjdF9pbnRtYXgoJm9iajMsICJhIiwgMCk7CisJCWp3X29iamVjdF9pbnRtYXgoJm9iajMsICJiIiwgMHhmZmZmZmZmZik7CisJCWp3X29iamVjdF9pbnRtYXgoJm9iajMsICJjIiwgMHg3ZmZmZmZmZmZmZmZmZmZmVUxMKTsKKwl9CisJandfZW5kKCZvYmozKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9vYmo0KGludCBwcmV0dHkpCit7CisJandfb2JqZWN0X2JlZ2luKCZvYmo0LCBwcmV0dHkpOworCXsKKwkJandfb2JqZWN0X3RydWUoJm9iajQsICJ0Iik7CisJCWp3X29iamVjdF9mYWxzZSgmb2JqNCwgImYiKTsKKwkJandfb2JqZWN0X251bGwoJm9iajQsICJuIik7CisJfQorCWp3X2VuZCgmb2JqNCk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2Vfb2JqNShpbnQgcHJldHR5KQoreworCWp3X29iamVjdF9iZWdpbigmb2JqNSwgcHJldHR5KTsKKwl7CisJCWp3X29iamVjdF9zdHJpbmcoJm9iajUsICJhYmMiICJceDA5IiAiZGVmIiwgImFiYyIgIlxcIiAiZGVmIik7CisJfQorCWp3X2VuZCgmb2JqNSk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2Vfb2JqNihpbnQgcHJldHR5KQoreworCWp3X29iamVjdF9iZWdpbigmb2JqNiwgcHJldHR5KTsKKwl7CisJCWp3X29iamVjdF9kb3VibGUoJm9iajYsICJhIiwgMiwgMy4xNDE1OSk7CisJfQorCWp3X2VuZCgmb2JqNik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpleHBlY3RfYXJyMSA9ICJbXCJhYmNcIiw0Mix0cnVlXSI7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X2FycjIgPSAiWy0xLDIxNDc0ODM2NDcsMF0iOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdF9hcnIzID0gIlswLDQyOTQ5NjcyOTUsOTIyMzM3MjAzNjg1NDc3NTgwN10iOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdF9hcnI0ID0gIlt0cnVlLGZhbHNlLG51bGxdIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKnByZXR0eV9hcnIxID0gKCJbXG4iCisJCQkJICAiICBcImFiY1wiLFxuIgorCQkJCSAgIiAgNDIsXG4iCisJCQkJICAiICB0cnVlXG4iCisJCQkJICAiXSIpOworc3RhdGljIGNvbnN0IGNoYXIgKnByZXR0eV9hcnIyID0gKCJbXG4iCisJCQkJICAiICAtMSxcbiIKKwkJCQkgICIgIDIxNDc0ODM2NDcsXG4iCisJCQkJICAiICAwXG4iCisJCQkJICAiXSIpOworc3RhdGljIGNvbnN0IGNoYXIgKnByZXR0eV9hcnIzID0gKCJbXG4iCisJCQkJICAiICAwLFxuIgorCQkJCSAgIiAgNDI5NDk2NzI5NSxcbiIKKwkJCQkgICIgIDkyMjMzNzIwMzY4NTQ3NzU4MDdcbiIKKwkJCQkgICJdIik7CitzdGF0aWMgY29uc3QgY2hhciAqcHJldHR5X2FycjQgPSAoIltcbiIKKwkJCQkgICIgIHRydWUsXG4iCisJCQkJICAiICBmYWxzZSxcbiIKKwkJCQkgICIgIG51bGxcbiIKKwkJCQkgICJdIik7CisKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgYXJyMSA9IEpTT05fV1JJVEVSX0lOSVQ7CitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIGFycjIgPSBKU09OX1dSSVRFUl9JTklUOworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBhcnIzID0gSlNPTl9XUklURVJfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgYXJyNCA9IEpTT05fV1JJVEVSX0lOSVQ7CisKK3N0YXRpYyB2b2lkIG1ha2VfYXJyMShpbnQgcHJldHR5KQoreworCWp3X2FycmF5X2JlZ2luKCZhcnIxLCBwcmV0dHkpOworCXsKKwkJandfYXJyYXlfc3RyaW5nKCZhcnIxLCAiYWJjIik7CisJCWp3X2FycmF5X2ludG1heCgmYXJyMSwgNDIpOworCQlqd19hcnJheV90cnVlKCZhcnIxKTsKKwl9CisJandfZW5kKCZhcnIxKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9hcnIyKGludCBwcmV0dHkpCit7CisJandfYXJyYXlfYmVnaW4oJmFycjIsIHByZXR0eSk7CisJeworCQlqd19hcnJheV9pbnRtYXgoJmFycjIsIC0xKTsKKwkJandfYXJyYXlfaW50bWF4KCZhcnIyLCAweDdmZmZmZmZmKTsKKwkJandfYXJyYXlfaW50bWF4KCZhcnIyLCAwKTsKKwl9CisJandfZW5kKCZhcnIyKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9hcnIzKGludCBwcmV0dHkpCit7CisJandfYXJyYXlfYmVnaW4oJmFycjMsIHByZXR0eSk7CisJeworCQlqd19hcnJheV9pbnRtYXgoJmFycjMsIDApOworCQlqd19hcnJheV9pbnRtYXgoJmFycjMsIDB4ZmZmZmZmZmYpOworCQlqd19hcnJheV9pbnRtYXgoJmFycjMsIDB4N2ZmZmZmZmZmZmZmZmZmZlVMTCk7CisJfQorCWp3X2VuZCgmYXJyMyk7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VfYXJyNChpbnQgcHJldHR5KQoreworCWp3X2FycmF5X2JlZ2luKCZhcnI0LCBwcmV0dHkpOworCXsKKwkJandfYXJyYXlfdHJ1ZSgmYXJyNCk7CisJCWp3X2FycmF5X2ZhbHNlKCZhcnI0KTsKKwkJandfYXJyYXlfbnVsbCgmYXJyNCk7CisJfQorCWp3X2VuZCgmYXJyNCk7Cit9CisKK3N0YXRpYyBjaGFyICpleHBlY3RfbmVzdDEgPQorCSJ7XCJvYmoxXCI6e1wiYVwiOlwiYWJjXCIsXCJiXCI6NDIsXCJjXCI6dHJ1ZX0sXCJhcnIxXCI6W1wiYWJjXCIsNDIsdHJ1ZV19IjsKKworc3RhdGljIHN0cnVjdCBqc29uX3dyaXRlciBuZXN0MSA9IEpTT05fV1JJVEVSX0lOSVQ7CisKK3N0YXRpYyB2b2lkIG1ha2VfbmVzdDEoaW50IHByZXR0eSkKK3sKKwlqd19vYmplY3RfYmVnaW4oJm5lc3QxLCBwcmV0dHkpOworCXsKKwkJandfb2JqZWN0X3N1Yl9qdygmbmVzdDEsICJvYmoxIiwgJm9iajEpOworCQlqd19vYmplY3Rfc3ViX2p3KCZuZXN0MSwgImFycjEiLCAmYXJyMSk7CisJfQorCWp3X2VuZCgmbmVzdDEpOworfQorCitzdGF0aWMgY2hhciAqZXhwZWN0X2lubGluZTEgPQorCSJ7XCJvYmoxXCI6e1wiYVwiOlwiYWJjXCIsXCJiXCI6NDIsXCJjXCI6dHJ1ZX0sXCJhcnIxXCI6W1wiYWJjXCIsNDIsdHJ1ZV19IjsKKworc3RhdGljIGNoYXIgKnByZXR0eV9pbmxpbmUxID0KKwkoIntcbiIKKwkgIiAgXCJvYmoxXCI6IHtcbiIKKwkgIiAgICBcImFcIjogXCJhYmNcIixcbiIKKwkgIiAgICBcImJcIjogNDIsXG4iCisJICIgICAgXCJjXCI6IHRydWVcbiIKKwkgIiAgfSxcbiIKKwkgIiAgXCJhcnIxXCI6IFtcbiIKKwkgIiAgICBcImFiY1wiLFxuIgorCSAiICAgIDQyLFxuIgorCSAiICAgIHRydWVcbiIKKwkgIiAgXVxuIgorCSAifSIpOworCitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIGlubGluZTEgPSBKU09OX1dSSVRFUl9JTklUOworCitzdGF0aWMgdm9pZCBtYWtlX2lubGluZTEoaW50IHByZXR0eSkKK3sKKwlqd19vYmplY3RfYmVnaW4oJmlubGluZTEsIHByZXR0eSk7CisJeworCQlqd19vYmplY3RfaW5saW5lX2JlZ2luX29iamVjdCgmaW5saW5lMSwgIm9iajEiKTsKKwkJeworCQkJandfb2JqZWN0X3N0cmluZygmaW5saW5lMSwgImEiLCAiYWJjIik7CisJCQlqd19vYmplY3RfaW50bWF4KCZpbmxpbmUxLCAiYiIsIDQyKTsKKwkJCWp3X29iamVjdF90cnVlKCZpbmxpbmUxLCAiYyIpOworCQl9CisJCWp3X2VuZCgmaW5saW5lMSk7CisJCWp3X29iamVjdF9pbmxpbmVfYmVnaW5fYXJyYXkoJmlubGluZTEsICJhcnIxIik7CisJCXsKKwkJCWp3X2FycmF5X3N0cmluZygmaW5saW5lMSwgImFiYyIpOworCQkJandfYXJyYXlfaW50bWF4KCZpbmxpbmUxLCA0Mik7CisJCQlqd19hcnJheV90cnVlKCZpbmxpbmUxKTsKKwkJfQorCQlqd19lbmQoJmlubGluZTEpOworCX0KKwlqd19lbmQoJmlubGluZTEpOworfQorCitzdGF0aWMgY2hhciAqZXhwZWN0X2lubGluZTIgPQorCSJbWzEsMl0sWzMsNF0se1wiYVwiOlwiYWJjXCJ9XSI7CisKK3N0YXRpYyBjaGFyICpwcmV0dHlfaW5saW5lMiA9CisJKCJbXG4iCisJICIgIFtcbiIKKwkgIiAgICAxLFxuIgorCSAiICAgIDJcbiIKKwkgIiAgXSxcbiIKKwkgIiAgW1xuIgorCSAiICAgIDMsXG4iCisJICIgICAgNFxuIgorCSAiICBdLFxuIgorCSAiICB7XG4iCisJICIgICAgXCJhXCI6IFwiYWJjXCJcbiIKKwkgIiAgfVxuIgorCSAiXSIpOworCitzdGF0aWMgc3RydWN0IGpzb25fd3JpdGVyIGlubGluZTIgPSBKU09OX1dSSVRFUl9JTklUOworCitzdGF0aWMgdm9pZCBtYWtlX2lubGluZTIoaW50IHByZXR0eSkKK3sKKwlqd19hcnJheV9iZWdpbigmaW5saW5lMiwgcHJldHR5KTsKKwl7CisJCWp3X2FycmF5X2lubGluZV9iZWdpbl9hcnJheSgmaW5saW5lMik7CisJCXsKKwkJCWp3X2FycmF5X2ludG1heCgmaW5saW5lMiwgMSk7CisJCQlqd19hcnJheV9pbnRtYXgoJmlubGluZTIsIDIpOworCQl9CisJCWp3X2VuZCgmaW5saW5lMik7CisJCWp3X2FycmF5X2lubGluZV9iZWdpbl9hcnJheSgmaW5saW5lMik7CisJCXsKKwkJCWp3X2FycmF5X2ludG1heCgmaW5saW5lMiwgMyk7CisJCQlqd19hcnJheV9pbnRtYXgoJmlubGluZTIsIDQpOworCQl9CisJCWp3X2VuZCgmaW5saW5lMik7CisJCWp3X2FycmF5X2lubGluZV9iZWdpbl9vYmplY3QoJmlubGluZTIpOworCQl7CisJCQlqd19vYmplY3Rfc3RyaW5nKCZpbmxpbmUyLCAiYSIsICJhYmMiKTsKKwkJfQorCQlqd19lbmQoJmlubGluZTIpOworCX0KKwlqd19lbmQoJmlubGluZTIpOworfQorCisvKgorICogV2hlbiBzdXBlciBpcyBjb21wYWN0LCB3ZSBleHBlY3Qgc3VicyB0byBiZSBjb21wYWN0ZWQgKGV2ZW4gaWYgb3JpZ2luYWxseQorICogcHJldHR5KS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdF9taXhlZDEgPQorCSgie1wib2JqMVwiOntcImFcIjpcImFiY1wiLFwiYlwiOjQyLFwiY1wiOnRydWV9LCIKKwkgIlwiYXJyMVwiOltcImFiY1wiLDQyLHRydWVdfSIpOworCisvKgorICogV2hlbiBzdXBlciBpcyBwcmV0dHksIGEgY29tcGFjdCBzdWIgKG9iajEpIGlzIGtlcHQgY29tcGFjdCBhbmQgYSBwcmV0dHkKKyAqIHN1YiAoYXJyMSkgaXMgcmUtaW5kZW50ZWQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwcmV0dHlfbWl4ZWQxID0KKwkoIntcbiIKKwkgIiAgXCJvYmoxXCI6IHtcImFcIjpcImFiY1wiLFwiYlwiOjQyLFwiY1wiOnRydWV9LFxuIgorCSAiICBcImFycjFcIjogW1xuIgorCSAiICAgIFwiYWJjXCIsXG4iCisJICIgICAgNDIsXG4iCisJICIgICAgdHJ1ZVxuIgorCSAiICBdXG4iCisJICJ9Iik7CisKK3N0YXRpYyBzdHJ1Y3QganNvbl93cml0ZXIgbWl4ZWQxID0gSlNPTl9XUklURVJfSU5JVDsKKworc3RhdGljIHZvaWQgbWFrZV9taXhlZDEoaW50IHByZXR0eSkKK3sKKwlqd19pbml0KCZvYmoxKTsKKwlqd19pbml0KCZhcnIxKTsKKworCW1ha2Vfb2JqMSgwKTsgLyogb2JqMSBpcyBjb21wYWN0ICovCisJbWFrZV9hcnIxKDEpOyAvKiBhcnIxIGlzIHByZXR0eSAqLworCisJandfb2JqZWN0X2JlZ2luKCZtaXhlZDEsIHByZXR0eSk7CisJeworCQlqd19vYmplY3Rfc3ViX2p3KCZtaXhlZDEsICJvYmoxIiwgJm9iajEpOworCQlqd19vYmplY3Rfc3ViX2p3KCZtaXhlZDEsICJhcnIxIiwgJmFycjEpOworCX0KKwlqd19lbmQoJm1peGVkMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNtcChjb25zdCBjaGFyICp0ZXN0LCBjb25zdCBzdHJ1Y3QganNvbl93cml0ZXIgKmp3LCBjb25zdCBjaGFyICpleHApCit7CisJaWYgKCFzdHJjbXAoanctPmpzb24uYnVmLCBleHApKQorCQlyZXR1cm47CisKKwlwcmludGYoImVycm9yWyVzXTogb2JzZXJ2ZWQgJyVzJyBleHBlY3RlZCAnJXMnXG4iLAorCSAgICAgICB0ZXN0LCBqdy0+anNvbi5idWYsIGV4cCk7CisJZXhpdCgxKTsKK30KKworI2RlZmluZSB0KHYpIGRvIHsgbWFrZV8jI3YoMCk7IGNtcCgjdiwgJnYsIGV4cGVjdF8jI3YpOyB9IHdoaWxlICgwKQorI2RlZmluZSBwKHYpIGRvIHsgbWFrZV8jI3YoMSk7IGNtcCgjdiwgJnYsIHByZXR0eV8jI3YpOyB9IHdoaWxlICgwKQorCisvKgorICogUnVuIHNvbWUgYmFzaWMgcmVncmVzc2lvbiB0ZXN0cyB3aXRoIHNvbWUga25vd24gcGF0dGVybnMuCisgKiBUaGVzZSB0ZXN0cyBhbHNvIGRlbW9uc3RyYXRlIGhvdyB0byB1c2UgdGhlIGp3XyBBUEkuCisgKi8KK3N0YXRpYyBpbnQgdW5pdF90ZXN0cyh2b2lkKQoreworCS8qIGNvbXB0YWN0IChjYW5vbmljYWwpIGZvcm1zICovCisJdChvYmoxKTsKKwl0KG9iajIpOworCXQob2JqMyk7CisJdChvYmo0KTsKKwl0KG9iajUpOworCXQob2JqNik7CisKKwl0KGFycjEpOworCXQoYXJyMik7CisJdChhcnIzKTsKKwl0KGFycjQpOworCisJdChuZXN0MSk7CisKKwl0KGlubGluZTEpOworCXQoaW5saW5lMik7CisKKwlqd19pbml0KCZvYmoxKTsKKwlqd19pbml0KCZvYmoyKTsKKwlqd19pbml0KCZvYmozKTsKKwlqd19pbml0KCZvYmo0KTsKKworCWp3X2luaXQoJmFycjEpOworCWp3X2luaXQoJmFycjIpOworCWp3X2luaXQoJmFycjMpOworCWp3X2luaXQoJmFycjQpOworCisJandfaW5pdCgmaW5saW5lMSk7CisJandfaW5pdCgmaW5saW5lMik7CisKKwkvKiBwcmV0dHkgZm9ybXMgKi8KKwlwKG9iajEpOworCXAob2JqMik7CisJcChvYmozKTsKKwlwKG9iajQpOworCisJcChhcnIxKTsKKwlwKGFycjIpOworCXAoYXJyMyk7CisJcChhcnI0KTsKKworCXAoaW5saW5lMSk7CisJcChpbmxpbmUyKTsKKworCS8qIG1peGVkIGZvcm1zICovCisJdChtaXhlZDEpOworCWp3X2luaXQoJm1peGVkMSk7CisJcChtaXhlZDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zKGludCBsaW5lX25yLCBjaGFyICoqc19pbikKK3sKKwkqc19pbiA9IHN0cnRvayhOVUxMLCAiICIpOworCWlmICghKnNfaW4pCisJCWRpZSgibGluZVslZF06IGV4cGVjdGVkOiA8cz4iLCBsaW5lX25yKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2koaW50IGxpbmVfbnIsIGludG1heF90ICpzX2luKQoreworCWNoYXIgKnM7CisJY2hhciAqZW5kcHRyOworCisJZ2V0X3MobGluZV9uciwgJnMpOworCisJKnNfaW4gPSBzdHJ0b2wocywgJmVuZHB0ciwgMTApOworCWlmICgqZW5kcHRyIHx8IGVycm5vID09IEVSQU5HRSkKKwkJZGllKCJsaW5lWyVkXTogaW52YWxpZCBpbnRlZ2VyIHZhbHVlIiwgbGluZV9ucik7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9kKGludCBsaW5lX25yLCBkb3VibGUgKnNfaW4pCit7CisJY2hhciAqczsKKwljaGFyICplbmRwdHI7CisKKwlnZXRfcyhsaW5lX25yLCAmcyk7CisKKwkqc19pbiA9IHN0cnRvZChzLCAmZW5kcHRyKTsKKwlpZiAoKmVuZHB0ciB8fCBlcnJubyA9PSBFUkFOR0UpCisJCWRpZSgibGluZVslZF06IGludmFsaWQgZmxvYXQgdmFsdWUiLCBsaW5lX25yKTsKK30KKworc3RhdGljIGludCBwcmV0dHk7CisKKyNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIICg2NCAqIDEwMjQpCisKK3N0YXRpYyBjaGFyICpnZXRfdHJpbW1lZF9saW5lKGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworCWludCBsZW47CisKKwlpZiAoIWZnZXRzKGJ1ZiwgYnVmX3NpemUsIHN0ZGluKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsZW4gPSBzdHJsZW4oYnVmKTsKKwl3aGlsZSAobGVuID4gMCkgeworCQljaGFyIGMgPSBidWZbbGVuIC0gMV07CisJCWlmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJyAnIHx8IGMgPT0gJ1x0JykKKwkJCWJ1ZlstLWxlbl0gPSAwOworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwl3aGlsZSAoKmJ1ZiA9PSAnICcgfHwgKmJ1ZiA9PSAnXHQnKQorCQlidWYrKzsKKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgc2NyaXB0ZWQodm9pZCkKK3sKKwlzdHJ1Y3QganNvbl93cml0ZXIgancgPSBKU09OX1dSSVRFUl9JTklUOworCWNoYXIgYnVmW01BWF9MSU5FX0xFTkdUSF07CisJY2hhciAqbGluZTsKKwlpbnQgbGluZV9uciA9IDA7CisKKwlsaW5lID0gZ2V0X3RyaW1tZWRfbGluZShidWYsIE1BWF9MSU5FX0xFTkdUSCk7CisJaWYgKCFsaW5lKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKGxpbmUsICJvYmplY3QiKSkKKwkJandfb2JqZWN0X2JlZ2luKCZqdywgcHJldHR5KTsKKwllbHNlIGlmICghc3RyY21wKGxpbmUsICJhcnJheSIpKQorCQlqd19hcnJheV9iZWdpbigmancsIHByZXR0eSk7CisJZWxzZQorCQlkaWUoImV4cGVjdGVkIGZpcnN0IGxpbmUgdG8gYmUgJ29iamVjdCcgb3IgJ2FycmF5JyIpOworCisJd2hpbGUgKChsaW5lID0gZ2V0X3RyaW1tZWRfbGluZShidWYsIE1BWF9MSU5FX0xFTkdUSCkpICE9IE5VTEwpIHsKKwkJY2hhciAqdmVyYjsKKwkJY2hhciAqa2V5OworCQljaGFyICpzX3ZhbHVlOworCQlpbnRtYXhfdCBpX3ZhbHVlOworCQlkb3VibGUgZF92YWx1ZTsKKworCQlsaW5lX25yKys7CisKKwkJdmVyYiA9IHN0cnRvayhsaW5lLCAiICIpOworCisJCWlmICghc3RyY21wKHZlcmIsICJlbmQiKSkgeworCQkJandfZW5kKCZqdyk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAib2JqZWN0LXN0cmluZyIpKSB7CisJCQlnZXRfcyhsaW5lX25yLCAma2V5KTsKKwkJCWdldF9zKGxpbmVfbnIsICZzX3ZhbHVlKTsKKwkJCWp3X29iamVjdF9zdHJpbmcoJmp3LCBrZXksIHNfdmFsdWUpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgIm9iamVjdC1pbnQiKSkgeworCQkJZ2V0X3MobGluZV9uciwgJmtleSk7CisJCQlnZXRfaShsaW5lX25yLCAmaV92YWx1ZSk7CisJCQlqd19vYmplY3RfaW50bWF4KCZqdywga2V5LCBpX3ZhbHVlKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJvYmplY3QtZG91YmxlIikpIHsKKwkJCWdldF9zKGxpbmVfbnIsICZrZXkpOworCQkJZ2V0X2kobGluZV9uciwgJmlfdmFsdWUpOworCQkJZ2V0X2QobGluZV9uciwgJmRfdmFsdWUpOworCQkJandfb2JqZWN0X2RvdWJsZSgmancsIGtleSwgaV92YWx1ZSwgZF92YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAib2JqZWN0LXRydWUiKSkgeworCQkJZ2V0X3MobGluZV9uciwgJmtleSk7CisJCQlqd19vYmplY3RfdHJ1ZSgmancsIGtleSk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAib2JqZWN0LWZhbHNlIikpIHsKKwkJCWdldF9zKGxpbmVfbnIsICZrZXkpOworCQkJandfb2JqZWN0X2ZhbHNlKCZqdywga2V5KTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJvYmplY3QtbnVsbCIpKSB7CisJCQlnZXRfcyhsaW5lX25yLCAma2V5KTsKKwkJCWp3X29iamVjdF9udWxsKCZqdywga2V5KTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJvYmplY3Qtb2JqZWN0IikpIHsKKwkJCWdldF9zKGxpbmVfbnIsICZrZXkpOworCQkJandfb2JqZWN0X2lubGluZV9iZWdpbl9vYmplY3QoJmp3LCBrZXkpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgIm9iamVjdC1hcnJheSIpKSB7CisJCQlnZXRfcyhsaW5lX25yLCAma2V5KTsKKwkJCWp3X29iamVjdF9pbmxpbmVfYmVnaW5fYXJyYXkoJmp3LCBrZXkpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgImFycmF5LXN0cmluZyIpKSB7CisJCQlnZXRfcyhsaW5lX25yLCAmc192YWx1ZSk7CisJCQlqd19hcnJheV9zdHJpbmcoJmp3LCBzX3ZhbHVlKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKHZlcmIsICJhcnJheS1pbnQiKSkgeworCQkJZ2V0X2kobGluZV9uciwgJmlfdmFsdWUpOworCQkJandfYXJyYXlfaW50bWF4KCZqdywgaV92YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAiYXJyYXktZG91YmxlIikpIHsKKwkJCWdldF9pKGxpbmVfbnIsICZpX3ZhbHVlKTsKKwkJCWdldF9kKGxpbmVfbnIsICZkX3ZhbHVlKTsKKwkJCWp3X2FycmF5X2RvdWJsZSgmancsIGlfdmFsdWUsIGRfdmFsdWUpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgImFycmF5LXRydWUiKSkKKwkJCWp3X2FycmF5X3RydWUoJmp3KTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAiYXJyYXktZmFsc2UiKSkKKwkJCWp3X2FycmF5X2ZhbHNlKCZqdyk7CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgImFycmF5LW51bGwiKSkKKwkJCWp3X2FycmF5X251bGwoJmp3KTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2ZXJiLCAiYXJyYXktb2JqZWN0IikpCisJCQlqd19hcnJheV9pbmxpbmVfYmVnaW5fb2JqZWN0KCZqdyk7CisJCWVsc2UgaWYgKCFzdHJjbXAodmVyYiwgImFycmF5LWFycmF5IikpCisJCQlqd19hcnJheV9pbmxpbmVfYmVnaW5fYXJyYXkoJmp3KTsKKwkJZWxzZQorCQkJZGllKCJ1bnJlY29nbml6ZWQgdG9rZW46ICclcyciLCB2ZXJiKTsKKwl9CisKKwlpZiAoIWp3X2lzX3Rlcm1pbmF0ZWQoJmp3KSkKKwkJZGllKCJqc29uIG5vdCB0ZXJtaW5hdGVkOiAnJXMnIiwgancuanNvbi5idWYpOworCisJcHJpbnRmKCIlc1xuIiwgancuanNvbi5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmp3Lmpzb24pOworCXJldHVybiAwOworfQorCitpbnQgY21kX19qc29uX3dyaXRlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJYXJnYy0tOyAvKiBza2lwIG92ZXIgImpzb24td3JpdGVyIiBhcmcgKi8KKwlhcmd2Kys7CisKKwlpZiAoYXJnYyA+IDAgJiYgYXJndlswXVswXSA9PSAnLScpIHsKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgIi11IikgfHwgIXN0cmNtcChhcmd2WzBdLCAiLS11bml0IikpCisJCQlyZXR1cm4gdW5pdF90ZXN0cygpOworCisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICItcCIpIHx8ICFzdHJjbXAoYXJndlswXSwgIi0tcHJldHR5IikpCisJCQlwcmV0dHkgPSAxOworCX0KKworCXJldHVybiBzY3JpcHRlZCgpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1sYXp5LWluaXQtbmFtZS1oYXNoLmMgYi90L2hlbHBlci90ZXN0LWxhenktaW5pdC1uYW1lLWhhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDFiNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1sYXp5LWluaXQtbmFtZS1oYXNoLmMKQEAgLTAsMCArMSwyNjEgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGludCBzaW5nbGU7CitzdGF0aWMgaW50IG11bHRpOworc3RhdGljIGludCBjb3VudCA9IDE7CitzdGF0aWMgaW50IGR1bXA7CitzdGF0aWMgaW50IHBlcmY7CitzdGF0aWMgaW50IGFuYWx5emU7CitzdGF0aWMgaW50IGFuYWx5emVfc3RlcDsKKworLyoKKyAqIER1bXAgdGhlIGNvbnRlbnRzIG9mIHRoZSAiZGlyIiBhbmQgIm5hbWUiIGhhc2ggdGFibGVzIHRvIHN0ZG91dC4KKyAqIElmIHlvdSBzb3J0IHRoZSByZXN1bHQsIHlvdSBjYW4gY29tcGFyZSBpdCB3aXRoIHRoZSBvdGhlciB0eXBlCisgKiBtb2RlIGFuZCB2ZXJpZnkgdGhhdCBib3RoIHNpbmdsZSBhbmQgbXVsdGkgcHJvZHVjZSB0aGUgc2FtZSBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGR1bXBfcnVuKHZvaWQpCit7CisJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyX2RpcjsKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXJfY2FjaGU7CisKKwkvKiBTdG9sZW4gZnJvbSBuYW1lLWhhc2guYyAqLworCXN0cnVjdCBkaXJfZW50cnkgeworCQlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJCXN0cnVjdCBkaXJfZW50cnkgKnBhcmVudDsKKwkJaW50IG5yOworCQl1bnNpZ25lZCBpbnQgbmFtZWxlbjsKKwkJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworCX07CisKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkaXI7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCXJlYWRfY2FjaGUoKTsKKwlpZiAoc2luZ2xlKSB7CisJCXRlc3RfbGF6eV9pbml0X25hbWVfaGFzaCgmdGhlX2luZGV4LCAwKTsKKwl9IGVsc2UgeworCQlpbnQgbnJfdGhyZWFkc191c2VkID0gdGVzdF9sYXp5X2luaXRfbmFtZV9oYXNoKCZ0aGVfaW5kZXgsIDEpOworCQlpZiAoIW5yX3RocmVhZHNfdXNlZCkKKwkJCWRpZSgibm9uLXRocmVhZGVkIGNvZGUgcGF0aCB1c2VkIik7CisJfQorCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmdGhlX2luZGV4LmRpcl9oYXNoLCAmaXRlcl9kaXIsIGRpciwKKwkJCQllbnQgLyogbWVtYmVyIG5hbWUgKi8pCisJCXByaW50ZigiZGlyICUwOHggJTdkICVzXG4iLCBkaXItPmVudC5oYXNoLCBkaXItPm5yLCBkaXItPm5hbWUpOworCisJaGFzaG1hcF9mb3JfZWFjaF9lbnRyeSgmdGhlX2luZGV4Lm5hbWVfaGFzaCwgJml0ZXJfY2FjaGUsIGNlLAorCQkJCWVudCAvKiBtZW1iZXIgbmFtZSAqLykKKwkJcHJpbnRmKCJuYW1lICUwOHggJXNcbiIsIGNlLT5lbnQuaGFzaCwgY2UtPm5hbWUpOworCisJZGlzY2FyZF9jYWNoZSgpOworfQorCisvKgorICogUnVuIHRoZSBzaW5nbGUgb3IgbXVsdGkgdGhyZWFkZWQgdmVyc2lvbiAiY291bnQiIHRpbWVzIGFuZAorICogcmVwb3J0IG9uIHRoZSB0aW1lIHRha2VuLgorICovCitzdGF0aWMgdWludDY0X3QgdGltZV9ydW5zKGludCB0cnlfdGhyZWFkZWQpCit7CisJdWludDY0X3QgdDAsIHQxLCB0MjsKKwl1aW50NjRfdCBzdW0gPSAwOworCXVpbnQ2NF90IGF2ZzsKKwlpbnQgbnJfdGhyZWFkc191c2VkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJdDAgPSBnZXRuYW5vdGltZSgpOworCQlyZWFkX2NhY2hlKCk7CisJCXQxID0gZ2V0bmFub3RpbWUoKTsKKwkJbnJfdGhyZWFkc191c2VkID0gdGVzdF9sYXp5X2luaXRfbmFtZV9oYXNoKCZ0aGVfaW5kZXgsIHRyeV90aHJlYWRlZCk7CisJCXQyID0gZ2V0bmFub3RpbWUoKTsKKworCQlzdW0gKz0gKHQyIC0gdDEpOworCisJCWlmICh0cnlfdGhyZWFkZWQgJiYgIW5yX3RocmVhZHNfdXNlZCkKKwkJCWRpZSgibm9uLXRocmVhZGVkIGNvZGUgcGF0aCB1c2VkIik7CisKKwkJaWYgKG5yX3RocmVhZHNfdXNlZCkKKwkJCXByaW50ZigiJWYgJWYgJWQgbXVsdGkgJWRcbiIsCisJCQkJICAgKChkb3VibGUpKHQxIC0gdDApKS8xMDAwMDAwMDAwLAorCQkJCSAgICgoZG91YmxlKSh0MiAtIHQxKSkvMTAwMDAwMDAwMCwKKwkJCQkgICB0aGVfaW5kZXguY2FjaGVfbnIsCisJCQkJICAgbnJfdGhyZWFkc191c2VkKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZiAlZiAlZCBzaW5nbGVcbiIsCisJCQkJICAgKChkb3VibGUpKHQxIC0gdDApKS8xMDAwMDAwMDAwLAorCQkJCSAgICgoZG91YmxlKSh0MiAtIHQxKSkvMTAwMDAwMDAwMCwKKwkJCQkgICB0aGVfaW5kZXguY2FjaGVfbnIpOworCQlmZmx1c2goc3Rkb3V0KTsKKworCQlkaXNjYXJkX2NhY2hlKCk7CisJfQorCisJYXZnID0gc3VtIC8gY291bnQ7CisJaWYgKGNvdW50ID4gMSkKKwkJcHJpbnRmKCJhdmcgJWYgJXNcbiIsCisJCQkgICAoZG91YmxlKWF2Zy8xMDAwMDAwMDAwLAorCQkJICAgKHRyeV90aHJlYWRlZCkgPyAibXVsdGkiIDogInNpbmdsZSIpOworCisJcmV0dXJuIGF2ZzsKK30KKworLyoKKyAqIFRyeSBhIHNlcmllcyBvZiBydW5zIHZhcnlpbmcgdGhlICJpc3RhdGUtPmNhY2hlX25yIiBhbmQKKyAqIHRyeSB0byBmaW5kIGEgZ29vZCB2YWx1ZSBmb3IgdGhlIG11bHRpLXRocmVhZGVkIGNyaXRlcmlhLgorICovCitzdGF0aWMgdm9pZCBhbmFseXplX3J1bih2b2lkKQoreworCXVpbnQ2NF90IHQxcywgdDFtLCB0MnMsIHQybTsKKwlpbnQgY2FjaGVfbnJfbGltaXQ7CisJaW50IG5yX3RocmVhZHNfdXNlZCA9IDA7CisJaW50IGk7CisJaW50IG5yOworCisJcmVhZF9jYWNoZSgpOworCWNhY2hlX25yX2xpbWl0ID0gdGhlX2luZGV4LmNhY2hlX25yOworCWRpc2NhcmRfY2FjaGUoKTsKKworCW5yID0gYW5hbHl6ZTsKKwl3aGlsZSAoMSkgeworCQl1aW50NjRfdCBzdW1fc2luZ2xlID0gMDsKKwkJdWludDY0X3Qgc3VtX211bHRpID0gMDsKKwkJdWludDY0X3QgYXZnX3NpbmdsZTsKKwkJdWludDY0X3QgYXZnX211bHRpOworCisJCWlmIChuciA+IGNhY2hlX25yX2xpbWl0KQorCQkJbnIgPSBjYWNoZV9ucl9saW1pdDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJcmVhZF9jYWNoZSgpOworCQkJdGhlX2luZGV4LmNhY2hlX25yID0gbnI7IC8qIGNoZWFwIHRydW5jYXRlIG9mIGluZGV4ICovCisJCQl0MXMgPSBnZXRuYW5vdGltZSgpOworCQkJdGVzdF9sYXp5X2luaXRfbmFtZV9oYXNoKCZ0aGVfaW5kZXgsIDApOworCQkJdDJzID0gZ2V0bmFub3RpbWUoKTsKKwkJCXN1bV9zaW5nbGUgKz0gKHQycyAtIHQxcyk7CisJCQl0aGVfaW5kZXguY2FjaGVfbnIgPSBjYWNoZV9ucl9saW1pdDsKKwkJCWRpc2NhcmRfY2FjaGUoKTsKKworCQkJcmVhZF9jYWNoZSgpOworCQkJdGhlX2luZGV4LmNhY2hlX25yID0gbnI7IC8qIGNoZWFwIHRydW5jYXRlIG9mIGluZGV4ICovCisJCQl0MW0gPSBnZXRuYW5vdGltZSgpOworCQkJbnJfdGhyZWFkc191c2VkID0gdGVzdF9sYXp5X2luaXRfbmFtZV9oYXNoKCZ0aGVfaW5kZXgsIDEpOworCQkJdDJtID0gZ2V0bmFub3RpbWUoKTsKKwkJCXN1bV9tdWx0aSArPSAodDJtIC0gdDFtKTsKKwkJCXRoZV9pbmRleC5jYWNoZV9uciA9IGNhY2hlX25yX2xpbWl0OworCQkJZGlzY2FyZF9jYWNoZSgpOworCisJCQlpZiAoIW5yX3RocmVhZHNfdXNlZCkKKwkJCQlwcmludGYoIiAgICBbc2l6ZSAlOGRdIFtzaW5nbGUgJWZdICAgbm9uLXRocmVhZGVkIGNvZGUgcGF0aCB1c2VkXG4iLAorCQkJCQkgICBuciwgKChkb3VibGUpKHQycyAtIHQxcykpLzEwMDAwMDAwMDApOworCQkJZWxzZQorCQkJCXByaW50ZigiICAgIFtzaXplICU4ZF0gW3NpbmdsZSAlZl0gJWMgW211bHRpICVmICVkXVxuIiwKKwkJCQkJICAgbnIsCisJCQkJCSAgICgoZG91YmxlKSh0MnMgLSB0MXMpKS8xMDAwMDAwMDAwLAorCQkJCQkgICAoKCh0MnMgLSB0MXMpIDwgKHQybSAtIHQxbSkpID8gJzwnIDogJz4nKSwKKwkJCQkJICAgKChkb3VibGUpKHQybSAtIHQxbSkpLzEwMDAwMDAwMDAsCisJCQkJCSAgIG5yX3RocmVhZHNfdXNlZCk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCQlpZiAoY291bnQgPiAxKSB7CisJCQlhdmdfc2luZ2xlID0gc3VtX3NpbmdsZSAvIGNvdW50OworCQkJYXZnX211bHRpID0gc3VtX211bHRpIC8gY291bnQ7CisJCQlpZiAoIW5yX3RocmVhZHNfdXNlZCkKKwkJCQlwcmludGYoImF2ZyBbc2l6ZSAlOGRdIFtzaW5nbGUgJWZdXG4iLAorCQkJCQkgICBuciwKKwkJCQkJICAgKGRvdWJsZSlhdmdfc2luZ2xlLzEwMDAwMDAwMDApOworCQkJZWxzZQorCQkJCXByaW50ZigiYXZnIFtzaXplICU4ZF0gW3NpbmdsZSAlZl0gJWMgW211bHRpICVmICVkXVxuIiwKKwkJCQkJICAgbnIsCisJCQkJCSAgIChkb3VibGUpYXZnX3NpbmdsZS8xMDAwMDAwMDAwLAorCQkJCQkgICAoYXZnX3NpbmdsZSA8IGF2Z19tdWx0aSA/ICc8JyA6ICc+JyksCisJCQkJCSAgIChkb3VibGUpYXZnX211bHRpLzEwMDAwMDAwMDAsCisJCQkJCSAgIG5yX3RocmVhZHNfdXNlZCk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCisJCWlmIChuciA+PSBjYWNoZV9ucl9saW1pdCkKKwkJCXJldHVybjsKKwkJbnIgKz0gYW5hbHl6ZV9zdGVwOworCX0KK30KKworaW50IGNtZF9fbGF6eV9pbml0X25hbWVfaGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKKwkJInRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoIC1kICgtcyB8IC1tKSIsCisJCSJ0ZXN0LXRvb2wgbGF6eS1pbml0LW5hbWUtaGFzaCAtcCBbLWMgY10iLAorCQkidGVzdC10b29sIGxhenktaW5pdC1uYW1lLWhhc2ggLWEgYSBbLS1zdGVwIHNdIFstYyBjXSIsCisJCSJ0ZXN0LXRvb2wgbGF6eS1pbml0LW5hbWUtaGFzaCAoLXMgfCAtbSkgWy1jIGNdIiwKKwkJInRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoIC1zIC1tIFstYyBjXSIsCisJCU5VTEwKKwl9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgncycsICJzaW5nbGUiLCAmc2luZ2xlLCAicnVuIHNpbmdsZS10aHJlYWRlZCBjb2RlIiksCisJCU9QVF9CT09MKCdtJywgIm11bHRpIiwgJm11bHRpLCAicnVuIG11bHRpLXRocmVhZGVkIGNvZGUiKSwKKwkJT1BUX0lOVEVHRVIoJ2MnLCAiY291bnQiLCAmY291bnQsICJudW1iZXIgb2YgcGFzc2VzIiksCisJCU9QVF9CT09MKCdkJywgImR1bXAiLCAmZHVtcCwgImR1bXAgaGFzaCB0YWJsZXMiKSwKKwkJT1BUX0JPT0woJ3AnLCAicGVyZiIsICZwZXJmLCAiY29tcGFyZSBzaW5nbGUgdnMgbXVsdGkiKSwKKwkJT1BUX0lOVEVHRVIoJ2EnLCAiYW5hbHl6ZSIsICZhbmFseXplLCAiYW5hbHl6ZSBkaWZmZXJlbnQgbXVsdGkgc2l6ZXMiKSwKKwkJT1BUX0lOVEVHRVIoMCwgInN0ZXAiLCAmYW5hbHl6ZV9zdGVwLCAiYW5hbHl6ZSBzdGVwIGZhY3RvciIpLAorCQlPUFRfRU5EKCksCisJfTsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJdWludDY0X3QgYXZnX3NpbmdsZSwgYXZnX211bHRpOworCisJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CisKKwkvKgorCSAqIGlzdGF0ZS0+ZGlyX2hhc2ggaXMgb25seSBjcmVhdGVkIHdoZW4gaWdub3JlX2Nhc2UgaXMgc2V0LgorCSAqLworCWlnbm9yZV9jYXNlID0gMTsKKworCWlmIChkdW1wKSB7CisJCWlmIChwZXJmIHx8IGFuYWx5emUgPiAwKQorCQkJZGllKCJjYW5ub3QgY29tYmluZSBkdW1wLCBwZXJmLCBvciBhbmFseXplIik7CisJCWlmIChjb3VudCA+IDEpCisJCQlkaWUoImNvdW50IG5vdCB2YWxpZCB3aXRoIGR1bXAiKTsKKwkJaWYgKHNpbmdsZSAmJiBtdWx0aSkKKwkJCWRpZSgiY2Fubm90IHVzZSBib3RoIHNpbmdsZSBhbmQgbXVsdGkgd2l0aCBkdW1wIik7CisJCWlmICghc2luZ2xlICYmICFtdWx0aSkKKwkJCWRpZSgiZHVtcCByZXF1aXJlcyBlaXRoZXIgc2luZ2xlIG9yIG11bHRpIik7CisJCWR1bXBfcnVuKCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChwZXJmKSB7CisJCWlmIChhbmFseXplID4gMCkKKwkJCWRpZSgiY2Fubm90IGNvbWJpbmUgZHVtcCwgcGVyZiwgb3IgYW5hbHl6ZSIpOworCQlpZiAoc2luZ2xlIHx8IG11bHRpKQorCQkJZGllKCJjYW5ub3QgdXNlIHNpbmdsZSBvciBtdWx0aSB3aXRoIHBlcmYiKTsKKwkJYXZnX3NpbmdsZSA9IHRpbWVfcnVucygwKTsKKwkJYXZnX211bHRpID0gdGltZV9ydW5zKDEpOworCQlpZiAoYXZnX211bHRpID4gYXZnX3NpbmdsZSkKKwkJCWRpZSgibXVsdGkgaXMgc2xvd2VyIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhbmFseXplKSB7CisJCWlmIChhbmFseXplIDwgNTAwKQorCQkJZGllKCJhbmFseXplIG11c3QgYmUgYXQgbGVhc3QgNTAwIik7CisJCWlmICghYW5hbHl6ZV9zdGVwKQorCQkJYW5hbHl6ZV9zdGVwID0gYW5hbHl6ZTsKKwkJaWYgKHNpbmdsZSB8fCBtdWx0aSkKKwkJCWRpZSgiY2Fubm90IHVzZSBzaW5nbGUgb3IgbXVsdGkgd2l0aCBhbmFseXplIik7CisJCWFuYWx5emVfcnVuKCk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc2luZ2xlICYmICFtdWx0aSkKKwkJZGllKCJyZXF1aXJlIGVpdGhlciAtcyBvciAtbSBvciBib3RoIik7CisKKwlpZiAoc2luZ2xlKQorCQl0aW1lX3J1bnMoMCk7CisJaWYgKG11bHRpKQorCQl0aW1lX3J1bnMoMSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtbGluZS1idWZmZXIuYyBiL3QvaGVscGVyL3Rlc3QtbGluZS1idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhkZDdlCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1saW5lLWJ1ZmZlci5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiB0ZXN0LWxpbmUtYnVmZmVyLmM6IGNvZGUgdG8gZXhlcmNpc2UgdGhlIHN2biBpbXBvcnRlcidzIGlucHV0IGhlbHBlcgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ2Y3Mtc3ZuL2xpbmVfYnVmZmVyLmgiCisKK3N0YXRpYyB1aW50MzJfdCBzdHJ0b3VpbnQzMihjb25zdCBjaGFyICpzKQoreworCWNoYXIgKmVuZDsKKwl1aW50bWF4X3QgbiA9IHN0cnRvdW1heChzLCAmZW5kLCAxMCk7CisJaWYgKCpzID09ICdcMCcgfHwgKmVuZCAhPSAnXDAnKQorCQlkaWUoImludmFsaWQgY291bnQ6ICVzIiwgcyk7CisJcmV0dXJuICh1aW50MzJfdCkgbjsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCwgY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlpZiAoc3RhcnRzX3dpdGgoY29tbWFuZCwgImJpbmFyeSAiKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRjaCgmc2IsICc+Jyk7CisJCWJ1ZmZlcl9yZWFkX2JpbmFyeShidWYsICZzYiwgc3RydG91aW50MzIoYXJnKSk7CisJCWZ3cml0ZShzYi5idWYsIDEsIHNiLmxlbiwgc3Rkb3V0KTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGNvbW1hbmQsICJjb3B5ICIpKSB7CisJCWJ1ZmZlcl9jb3B5X2J5dGVzKGJ1Ziwgc3RydG91aW50MzIoYXJnKSk7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChjb21tYW5kLCAic2tpcCAiKSkgeworCQlidWZmZXJfc2tpcF9ieXRlcyhidWYsIHN0cnRvdWludDMyKGFyZykpOworCX0gZWxzZSB7CisJCWRpZSgidW5yZWNvZ25pemVkIGNvbW1hbmQ6ICVzIiwgY29tbWFuZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbGluZShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgbGluZV9idWZmZXIgKnN0ZGluX2J1ZikKK3sKKwljb25zdCBjaGFyICphcmcgPSBzdHJjaHIobGluZSwgJyAnKTsKKwlpZiAoIWFyZykKKwkJZGllKCJubyBhcmd1bWVudCBpbiBsaW5lOiAlcyIsIGxpbmUpOworCWhhbmRsZV9jb21tYW5kKGxpbmUsIGFyZyArIDEsIHN0ZGluX2J1Zik7Cit9CisKK2ludCBjbWRfbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGxpbmVfYnVmZmVyIHN0ZGluX2J1ZiA9IExJTkVfQlVGRkVSX0lOSVQ7CisJc3RydWN0IGxpbmVfYnVmZmVyIGZpbGVfYnVmID0gTElORV9CVUZGRVJfSU5JVDsKKwlzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0ID0gJnN0ZGluX2J1ZjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljaGFyICpzOworCisJaWYgKGFyZ2MgPT0gMSkKKwkJZmlsZW5hbWUgPSBOVUxMOworCWVsc2UgaWYgKGFyZ2MgPT0gMikKKwkJZmlsZW5hbWUgPSBhcmd2WzFdOworCWVsc2UKKwkJdXNhZ2UoInRlc3QtbGluZS1idWZmZXIgW2ZpbGUgfCAmZmRdIDwgc2NyaXB0Iik7CisKKwlpZiAoYnVmZmVyX2luaXQoJnN0ZGluX2J1ZiwgTlVMTCkpCisJCWRpZV9lcnJubygib3BlbiBlcnJvciIpOworCWlmIChmaWxlbmFtZSkgeworCQlpZiAoKmZpbGVuYW1lID09ICcmJykgeworCQkJaWYgKGJ1ZmZlcl9mZGluaXQoJmZpbGVfYnVmLCBzdHJ0b3VpbnQzMihmaWxlbmFtZSArIDEpKSkKKwkJCQlkaWVfZXJybm8oImVycm9yIG9wZW5pbmcgZmQgJXMiLCBmaWxlbmFtZSArIDEpOworCQl9IGVsc2UgeworCQkJaWYgKGJ1ZmZlcl9pbml0KCZmaWxlX2J1ZiwgZmlsZW5hbWUpKQorCQkJCWRpZV9lcnJubygiZXJyb3Igb3BlbmluZyAlcyIsIGZpbGVuYW1lKTsKKwkJfQorCQlpbnB1dCA9ICZmaWxlX2J1ZjsKKwl9CisKKwl3aGlsZSAoKHMgPSBidWZmZXJfcmVhZF9saW5lKCZzdGRpbl9idWYpKSkKKwkJaGFuZGxlX2xpbmUocywgaW5wdXQpOworCisJaWYgKGZpbGVuYW1lICYmIGJ1ZmZlcl9kZWluaXQoJmZpbGVfYnVmKSkKKwkJZGllKCJlcnJvciByZWFkaW5nIGZyb20gJXMiLCBmaWxlbmFtZSk7CisJaWYgKGJ1ZmZlcl9kZWluaXQoJnN0ZGluX2J1ZikpCisJCWRpZSgiaW5wdXQgZXJyb3IiKTsKKwlpZiAoZmVycm9yKHN0ZG91dCkpCisJCWRpZSgib3V0cHV0IGVycm9yIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LW1hdGNoLXRyZWVzLmMgYi90L2hlbHBlci90ZXN0LW1hdGNoLXRyZWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmZDQyNwotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtbWF0Y2gtdHJlZXMuYwpAQCAtMCwwICsxLDI3IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisKK2ludCBjbWRfX21hdGNoX3RyZWVzKGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXN0cnVjdCBvYmplY3RfaWQgaGFzaDEsIGhhc2gyLCBzaGlmdGVkOworCXN0cnVjdCB0cmVlICpvbmUsICp0d287CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwlpZiAoZ2V0X29pZChhdlsxXSwgJmhhc2gxKSkKKwkJZGllKCJjYW5ub3QgcGFyc2UgJXMgYXMgYW4gb2JqZWN0IG5hbWUiLCBhdlsxXSk7CisJaWYgKGdldF9vaWQoYXZbMl0sICZoYXNoMikpCisJCWRpZSgiY2Fubm90IHBhcnNlICVzIGFzIGFuIG9iamVjdCBuYW1lIiwgYXZbMl0pOworCW9uZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoJmhhc2gxKTsKKwlpZiAoIW9uZSkKKwkJZGllKCJub3QgYSB0cmVlLWlzaCAlcyIsIGF2WzFdKTsKKwl0d28gPSBwYXJzZV90cmVlX2luZGlyZWN0KCZoYXNoMik7CisJaWYgKCF0d28pCisJCWRpZSgibm90IGEgdHJlZS1pc2ggJXMiLCBhdlsyXSk7CisKKwlzaGlmdF90cmVlKHRoZV9yZXBvc2l0b3J5LCAmb25lLT5vYmplY3Qub2lkLCAmdHdvLT5vYmplY3Qub2lkLCAmc2hpZnRlZCwgLTEpOworCXByaW50Zigic2hpZnRlZDogJXNcbiIsIG9pZF90b19oZXgoJnNoaWZ0ZWQpKTsKKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LW1lcmdlc29ydC5jIGIvdC9oZWxwZXIvdGVzdC1tZXJnZXNvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWNmZmFhCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1tZXJnZXNvcnQuYwpAQCAtMCwwICsxLDUzIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKworc3RydWN0IGxpbmUgeworCWNoYXIgKnRleHQ7CisJc3RydWN0IGxpbmUgKm5leHQ7Cit9OworCitzdGF0aWMgdm9pZCAqZ2V0X25leHQoY29uc3Qgdm9pZCAqYSkKK3sKKwlyZXR1cm4gKChjb25zdCBzdHJ1Y3QgbGluZSAqKWEpLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBzZXRfbmV4dCh2b2lkICphLCB2b2lkICpiKQoreworCSgoc3RydWN0IGxpbmUgKilhKS0+bmV4dCA9IGI7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9zdHJpbmdzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGxpbmUgKnggPSBhLCAqeSA9IGI7CisJcmV0dXJuIHN0cmNtcCh4LT50ZXh0LCB5LT50ZXh0KTsKK30KKworaW50IGNtZF9fbWVyZ2Vzb3J0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgbGluZSAqbGluZSwgKnAgPSBOVUxMLCAqbGluZXMgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoOzspIHsKKwkJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJnNiLCBzdGRpbiwgJ1xuJykpCisJCQlicmVhazsKKwkJbGluZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaW5lKSk7CisJCWxpbmUtPnRleHQgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJCWlmIChwKSB7CisJCQlsaW5lLT5uZXh0ID0gcC0+bmV4dDsKKwkJCXAtPm5leHQgPSBsaW5lOworCQl9IGVsc2UgeworCQkJbGluZS0+bmV4dCA9IE5VTEw7CisJCQlsaW5lcyA9IGxpbmU7CisJCX0KKwkJcCA9IGxpbmU7CisJfQorCisJbGluZXMgPSBsbGlzdF9tZXJnZXNvcnQobGluZXMsIGdldF9uZXh0LCBzZXRfbmV4dCwgY29tcGFyZV9zdHJpbmdzKTsKKworCXdoaWxlIChsaW5lcykgeworCQlwcmludGYoIiVzIiwgbGluZXMtPnRleHQpOworCQlsaW5lcyA9IGxpbmVzLT5uZXh0OworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtbWt0ZW1wLmMgYi90L2hlbHBlci90ZXN0LW1rdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTA2ODgKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LW1rdGVtcC5jCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiB0ZXN0LW1rdGVtcC5jOiBjb2RlIHRvIGV4ZXJjaXNlIHRoZSBjcmVhdGlvbiBvZiB0ZW1wb3JhcnkgZmlsZXMKKyAqLworI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorCitpbnQgY21kX19ta3RlbXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjICE9IDIpCisJCXVzYWdlKCJFeHBlY3RlZCAxIHBhcmFtZXRlciBkZWZpbmluZyB0aGUgdGVtcG9yYXJ5IGZpbGUgdGVtcGxhdGUiKTsKKworCXhta3N0ZW1wKHhzdHJkdXAoYXJndlsxXSkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LW9pZG1hcC5jIGIvdC9oZWxwZXIvdGVzdC1vaWRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWNmOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1vaWRtYXAuYwpAQCAtMCwwICsxLDExMiBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2lkbWFwLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKy8qIGtleSBpcyBhbiBvaWQgYW5kIHZhbHVlIGlzIGEgbmFtZSAoY291bGQgYmUgYSByZWZuYW1lIGZvciBleGFtcGxlKSAqLworc3RydWN0IHRlc3RfZW50cnkgeworCXN0cnVjdCBvaWRtYXBfZW50cnkgZW50cnk7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworI2RlZmluZSBERUxJTSAiIFx0XHJcbiIKKworLyoKKyAqIFJlYWQgc3RkaW4gbGluZSBieSBsaW5lIGFuZCBwcmludCByZXN1bHQgb2YgY29tbWFuZHMgdG8gc3Rkb3V0OgorICoKKyAqIGhhc2ggb2lka2V5IC0+IHNoYTFoYXNoKG9pZGtleSkKKyAqIHB1dCBvaWRrZXkgbmFtZXZhbHVlIC0+IE5VTEwgLyBvbGQgbmFtZXZhbHVlCisgKiBnZXQgb2lka2V5IC0+IE5VTEwgLyBuYW1ldmFsdWUKKyAqIHJlbW92ZSBvaWRrZXkgLT4gTlVMTCAvIG9sZCBuYW1ldmFsdWUKKyAqIGl0ZXJhdGUgLT4gb2lka2V5MSBuYW1ldmFsdWUxXG5vaWRrZXkyIG5hbWV2YWx1ZTJcbi4uLgorICoKKyAqLworaW50IGNtZF9fb2lkbWFwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2lkbWFwIG1hcCA9IE9JRE1BUF9JTklUOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJLyogaW5pdCBvaWRtYXAgKi8KKwlvaWRtYXBfaW5pdCgmbWFwLCAwKTsKKworCS8qIHByb2Nlc3MgY29tbWFuZHMgZnJvbSBzdGRpbiAqLworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgc3RkaW4pICE9IEVPRikgeworCQljaGFyICpjbWQsICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisJCXN0cnVjdCB0ZXN0X2VudHJ5ICplbnRyeTsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJLyogYnJlYWsgbGluZSBpbnRvIGNvbW1hbmQgYW5kIHVwIHRvIHR3byBwYXJhbWV0ZXJzICovCisJCWNtZCA9IHN0cnRvayhsaW5lLmJ1ZiwgREVMSU0pOworCQkvKiBpZ25vcmUgZW1wdHkgbGluZXMgKi8KKwkJaWYgKCFjbWQgfHwgKmNtZCA9PSAnIycpCisJCQljb250aW51ZTsKKworCQlwMSA9IHN0cnRvayhOVUxMLCBERUxJTSk7CisJCWlmIChwMSkKKwkJCXAyID0gc3RydG9rKE5VTEwsIERFTElNKTsKKworCQlpZiAoIXN0cmNtcCgicHV0IiwgY21kKSAmJiBwMSAmJiBwMikgeworCisJCQlpZiAoZ2V0X29pZChwMSwgJm9pZCkpIHsKKwkJCQlwcmludGYoIlVua25vd24gb2lkOiAlc1xuIiwgcDEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBjcmVhdGUgZW50cnkgd2l0aCBvaWRfa2V5ID0gcDEsIG5hbWVfdmFsdWUgPSBwMiAqLworCQkJRkxFWF9BTExPQ19TVFIoZW50cnksIG5hbWUsIHAyKTsKKwkJCW9pZGNweSgmZW50cnktPmVudHJ5Lm9pZCwgJm9pZCk7CisKKwkJCS8qIGFkZCAvIHJlcGxhY2UgZW50cnkgKi8KKwkJCWVudHJ5ID0gb2lkbWFwX3B1dCgmbWFwLCBlbnRyeSk7CisKKwkJCS8qIHByaW50IGFuZCBmcmVlIHJlcGxhY2VkIGVudHJ5LCBpZiBhbnkgKi8KKwkJCXB1dHMoZW50cnkgPyBlbnRyeS0+bmFtZSA6ICJOVUxMIik7CisJCQlmcmVlKGVudHJ5KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoImdldCIsIGNtZCkgJiYgcDEpIHsKKworCQkJaWYgKGdldF9vaWQocDEsICZvaWQpKSB7CisJCQkJcHJpbnRmKCJVbmtub3duIG9pZDogJXNcbiIsIHAxKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogbG9va3VwIGVudHJ5IGluIG9pZG1hcCAqLworCQkJZW50cnkgPSBvaWRtYXBfZ2V0KCZtYXAsICZvaWQpOworCisJCQkvKiBwcmludCByZXN1bHQgKi8KKwkJCXB1dHMoZW50cnkgPyBlbnRyeS0+bmFtZSA6ICJOVUxMIik7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJyZW1vdmUiLCBjbWQpICYmIHAxKSB7CisKKwkJCWlmIChnZXRfb2lkKHAxLCAmb2lkKSkgeworCQkJCXByaW50ZigiVW5rbm93biBvaWQ6ICVzXG4iLCBwMSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIHJlbW92ZSBlbnRyeSBmcm9tIG9pZG1hcCAqLworCQkJZW50cnkgPSBvaWRtYXBfcmVtb3ZlKCZtYXAsICZvaWQpOworCisJCQkvKiBwcmludCByZXN1bHQgYW5kIGZyZWUgZW50cnkqLworCQkJcHV0cyhlbnRyeSA/IGVudHJ5LT5uYW1lIDogIk5VTEwiKTsKKwkJCWZyZWUoZW50cnkpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcCgiaXRlcmF0ZSIsIGNtZCkpIHsKKworCQkJc3RydWN0IG9pZG1hcF9pdGVyIGl0ZXI7CisJCQlvaWRtYXBfaXRlcl9pbml0KCZtYXAsICZpdGVyKTsKKwkJCXdoaWxlICgoZW50cnkgPSBvaWRtYXBfaXRlcl9uZXh0KCZpdGVyKSkpCisJCQkJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleCgmZW50cnktPmVudHJ5Lm9pZCksIGVudHJ5LT5uYW1lKTsKKworCQl9IGVsc2UgeworCisJCQlwcmludGYoIlVua25vd24gY29tbWFuZCAlc1xuIiwgY21kKTsKKworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCW9pZG1hcF9mcmVlKCZtYXAsIDEpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1vbmxpbmUtY3B1cy5jIGIvdC9oZWxwZXIvdGVzdC1vbmxpbmUtY3B1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYjBkNTMKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LW9ubGluZS1jcHVzLmMKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisKK2ludCBjbWRfX29ubGluZV9jcHVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlwcmludGYoIiVkXG4iLCBvbmxpbmVfY3B1cygpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcGFyc2Utb3B0aW9ucy5jIGIvdC9oZWxwZXIvdGVzdC1wYXJzZS1vcHRpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1MWNlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCkBAIC0wLDAgKzEsMTkwIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ0cmFjZTIuaCIKKworc3RhdGljIGludCBib29sZWFuID0gMDsKK3N0YXRpYyBpbnQgaW50ZWdlciA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWduaXR1ZGUgPSAwOworc3RhdGljIHRpbWVzdGFtcF90IHRpbWVzdGFtcDsKK3N0YXRpYyBpbnQgYWJicmV2ID0gNzsKK3N0YXRpYyBpbnQgdmVyYm9zZSA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBkcnlfcnVuID0gMCwgcXVpZXQgPSAwOworc3RhdGljIGNoYXIgKnN0cmluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqZmlsZSA9IE5VTEw7CitzdGF0aWMgaW50IGFtYmlndW91czsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCBjYWxsZWQ7CisJY29uc3QgY2hhciAqYXJnOworCWludCB1bnNldDsKK30gbGVuZ3RoX2NiOworCitzdGF0aWMgaW50IGxlbmd0aF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWxlbmd0aF9jYi5jYWxsZWQgPSAxOworCWxlbmd0aF9jYi5hcmcgPSBhcmc7CisJbGVuZ3RoX2NiLnVuc2V0ID0gdW5zZXQ7CisKKwlpZiAodW5zZXQpCisJCXJldHVybiAxOyAvKiBkbyBub3Qgc3VwcG9ydCB1bnNldCAqLworCisJKihpbnQgKilvcHQtPnZhbHVlID0gc3RybGVuKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVtYmVyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQlVHX09OX09QVF9ORUcodW5zZXQpOworCSooaW50ICopb3B0LT52YWx1ZSA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb2xsZWN0X2V4cGVjdChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqZXhwZWN0OworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBzdHJidWYgbGFiZWwgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpjb2xvbjsKKworCWlmICghYXJnIHx8IHVuc2V0KQorCQlkaWUoIm1hbGZvcm1lZCAtLWV4cGVjdCBvcHRpb24iKTsKKworCWV4cGVjdCA9IChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKilvcHQtPnZhbHVlOworCWNvbG9uID0gc3RyY2hyKGFyZywgJzonKTsKKwlpZiAoIWNvbG9uKQorCQlkaWUoIm1hbGZvcm1lZCAtLWV4cGVjdCBvcHRpb24sIGxhY2tpbmcgYSBjb2xvbiIpOworCXN0cmJ1Zl9hZGQoJmxhYmVsLCBhcmcsIGNvbG9uIC0gYXJnKTsKKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KGV4cGVjdCwgc3RyYnVmX2RldGFjaCgmbGFiZWwsIE5VTEwpKTsKKwlpZiAoaXRlbS0+dXRpbCkKKwkJZGllKCJtYWxmb3JtZWQgLS1leHBlY3Qgb3B0aW9uLCBkdXBsaWNhdGUgJXMiLCBsYWJlbC5idWYpOworCWl0ZW0tPnV0aWwgPSAodm9pZCAqKWFyZzsKKwlyZXR1cm4gMDsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMyw0KSkpCitzdGF0aWMgdm9pZCBzaG93KHN0cnVjdCBzdHJpbmdfbGlzdCAqZXhwZWN0LCBpbnQgKnN0YXR1cywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFyZ3M7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCWlmICghZXhwZWN0LT5ucikKKwkJcHJpbnRmKCIlc1xuIiwgYnVmLmJ1Zik7CisJZWxzZSB7CisJCWNoYXIgKmNvbG9uID0gc3RyY2hyKGJ1Zi5idWYsICc6Jyk7CisJCWlmICghY29sb24pCisJCQlkaWUoIm1hbGZvcm1lZCBvdXRwdXQgZm9ybWF0LCBvdXRwdXQgbGFja2luZyBjb2xvbjogJXMiLCBmbXQpOworCQkqY29sb24gPSAnXDAnOworCQlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKGV4cGVjdCwgYnVmLmJ1Zik7CisJCSpjb2xvbiA9ICc6JzsKKwkJaWYgKCFpdGVtKQorCQkJOyAvKiBub3QgYW1vbmcgZW50cmllcyBiZWluZyBjaGVja2VkICovCisJCWVsc2UgeworCQkJaWYgKHN0cmNtcCgoY29uc3QgY2hhciAqKWl0ZW0tPnV0aWwsIGJ1Zi5idWYpKSB7CisJCQkJcHJpbnRmKCItJXNcbiIsIChjaGFyICopaXRlbS0+dXRpbCk7CisJCQkJcHJpbnRmKCIrJXNcbiIsIGJ1Zi5idWYpOworCQkJCSpzdGF0dXMgPSAxOworCQkJfQorCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitpbnQgY21kX19wYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpwcmVmaXggPSAicHJlZml4LyI7CisJY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKKwkJInRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIDxvcHRpb25zPiIsCisJCSIiLAorCQkiQSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBwYXJzZS1vcHRpb25zIEFQSS4iLAorCQlOVUxMCisJfTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhwZWN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInllcyIsICZib29sZWFuLCAiZ2V0IGEgYm9vbGVhbiIpLAorCQlPUFRfQk9PTCgnRCcsICJuby1kb3VidCIsICZib29sZWFuLCAiYmVnaW5zIHdpdGggJ25vLSciKSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgJ0InLCAibm8tZmVhciIsICZib29sZWFuLCBOVUxMLAorCQkgICJiZSBicmF2ZSIsIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgMSB9LAorCQlPUFRfQ09VTlRVUCgnYicsICJib29sZWFuIiwgJmJvb2xlYW4sICJpbmNyZW1lbnQgYnkgb25lIiksCisJCU9QVF9CSVQoJzQnLCAib3I0IiwgJmJvb2xlYW4sCisJCQkiYml0d2lzZS1vciBib29sZWFuIHdpdGggLi4uMDEwMCIsIDQpLAorCQlPUFRfTkVHQklUKDAsICJuZWctb3I0IiwgJmJvb2xlYW4sICJzYW1lIGFzIC0tbm8tb3I0IiwgNCksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9JTlRFR0VSKCdpJywgImludGVnZXIiLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIiKSwKKwkJT1BUX0lOVEVHRVIoJ2onLCBOVUxMLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIsIHRvbyIpLAorCQlPUFRfTUFHTklUVURFKCdtJywgIm1hZ25pdHVkZSIsICZtYWduaXR1ZGUsICJnZXQgYSBtYWduaXR1ZGUiKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNldDIzIiwgJmludGVnZXIsICJzZXQgaW50ZWdlciB0byAyMyIsIDIzKSwKKwkJT1BUX0NNRE1PREUoMCwgIm1vZGUxIiwgJmludGVnZXIsICJzZXQgaW50ZWdlciB0byAxIChjbWRtb2RlIG9wdGlvbikiLCAxKSwKKwkJT1BUX0NNRE1PREUoMCwgIm1vZGUyIiwgJmludGVnZXIsICJzZXQgaW50ZWdlciB0byAyIChjbWRtb2RlIG9wdGlvbikiLCAyKSwKKwkJT1BUX0NBTExCQUNLKCdMJywgImxlbmd0aCIsICZpbnRlZ2VyLCAic3RyIiwKKwkJCSJnZXQgbGVuZ3RoIG9mIDxzdHI+IiwgbGVuZ3RoX2NhbGxiYWNrKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmZmlsZSwgInNldCBmaWxlIHRvIDxmaWxlPiIpLAorCQlPUFRfR1JPVVAoIlN0cmluZyBvcHRpb25zIiksCisJCU9QVF9TVFJJTkcoJ3MnLCAic3RyaW5nIiwgJnN0cmluZywgInN0cmluZyIsICJnZXQgYSBzdHJpbmciKSwKKwkJT1BUX1NUUklORygwLCAic3RyaW5nMiIsICZzdHJpbmcsICJzdHIiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIiksCisJCU9QVF9TVFJJTkcoMCwgInN0IiwgJnN0cmluZywgInN0IiwgImdldCBhbm90aGVyIHN0cmluZyAocGVydmVydCBvcmRlcmluZykiKSwKKwkJT1BUX1NUUklORygnbycsIE5VTEwsICZzdHJpbmcsICJzdHIiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIiksCisJCU9QVF9OT09QX05PQVJHKDAsICJvYnNvbGV0ZSIpLAorCQlPUFRfU1RSSU5HX0xJU1QoMCwgImxpc3QiLCAmbGlzdCwgInN0ciIsICJhZGQgc3RyIHRvIGxpc3QiKSwKKwkJT1BUX0dST1VQKCJNYWdpYyBhcmd1bWVudHMiKSwKKwkJT1BUX0FSR1VNRU5UKCJxdXV4IiwgTlVMTCwgIm1lYW5zIC0tcXV1eCIpLAorCQlPUFRfTlVNQkVSX0NBTExCQUNLKCZpbnRlZ2VyLCAic2V0IGludGVnZXIgdG8gTlVNIiwKKwkJCW51bWJlcl9jYWxsYmFjayksCisJCXsgT1BUSU9OX0NPVU5UVVAsICcrJywgTlVMTCwgJmJvb2xlYW4sIE5VTEwsICJzYW1lIGFzIC1iIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9EQVNIIH0sCisJCXsgT1BUSU9OX0NPVU5UVVAsIDAsICJhbWJpZ3VvdXMiLCAmYW1iaWd1b3VzLCBOVUxMLAorCQkgICJwb3NpdGl2ZSBhbWJpZ3VpdHkiLCBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfSwKKwkJeyBPUFRJT05fQ09VTlRVUCwgMCwgIm5vLWFtYmlndW91cyIsICZhbWJpZ3VvdXMsIE5VTEwsCisJCSAgIm5lZ2F0aXZlIGFtYmlndWl0eSIsIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyB9LAorCQlPUFRfR1JPVVAoIlN0YW5kYXJkIG9wdGlvbnMiKSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgImJlIHZlcmJvc2UiKSwKKwkJT1BUX19EUllfUlVOKCZkcnlfcnVuLCAiZHJ5IHJ1biIpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwgImJlIHF1aWV0IiksCisJCU9QVF9DQUxMQkFDSygwLCAiZXhwZWN0IiwgJmV4cGVjdCwgInN0cmluZyIsCisJCQkgICAgICJleHBlY3RlZCBvdXRwdXQgaW4gdGhlIHZhcmlhYmxlIGR1bXAiLAorCQkJICAgICBjb2xsZWN0X2V4cGVjdCksCisJCU9QVF9HUk9VUCgiQWxpYXMiKSwKKwkJT1BUX1NUUklORygnQScsICJhbGlhcy1zb3VyY2UiLCAmc3RyaW5nLCAic3RyaW5nIiwgImdldCBhIHN0cmluZyIpLAorCQlPUFRfQUxJQVMoJ1onLCAiYWxpYXMtdGFyZ2V0IiwgImFsaWFzLXNvdXJjZSIpLAorCQlPUFRfRU5EKCksCisJfTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCXRyYWNlMl9jbWRfbmFtZSgiX3BhcnNlXyIpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgKGNvbnN0IGNoYXIgKiopYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwgMCk7CisKKwlpZiAobGVuZ3RoX2NiLmNhbGxlZCkgeworCQljb25zdCBjaGFyICphcmcgPSBsZW5ndGhfY2IuYXJnOworCQlpbnQgdW5zZXQgPSBsZW5ndGhfY2IudW5zZXQ7CisJCXNob3coJmV4cGVjdCwgJnJldCwgIkNhbGxiYWNrOiBcIiVzXCIsICVkIiwKKwkJICAgICAoYXJnID8gYXJnIDogIm5vdCBzZXQiKSwgdW5zZXQpOworCX0KKwlzaG93KCZleHBlY3QsICZyZXQsICJib29sZWFuOiAlZCIsIGJvb2xlYW4pOworCXNob3coJmV4cGVjdCwgJnJldCwgImludGVnZXI6ICVkIiwgaW50ZWdlcik7CisJc2hvdygmZXhwZWN0LCAmcmV0LCAibWFnbml0dWRlOiAlbHUiLCBtYWduaXR1ZGUpOworCXNob3coJmV4cGVjdCwgJnJldCwgInRpbWVzdGFtcDogJSJQUkl0aW1lLCB0aW1lc3RhbXApOworCXNob3coJmV4cGVjdCwgJnJldCwgInN0cmluZzogJXMiLCBzdHJpbmcgPyBzdHJpbmcgOiAiKG5vdCBzZXQpIik7CisJc2hvdygmZXhwZWN0LCAmcmV0LCAiYWJicmV2OiAlZCIsIGFiYnJldik7CisJc2hvdygmZXhwZWN0LCAmcmV0LCAidmVyYm9zZTogJWQiLCB2ZXJib3NlKTsKKwlzaG93KCZleHBlY3QsICZyZXQsICJxdWlldDogJWQiLCBxdWlldCk7CisJc2hvdygmZXhwZWN0LCAmcmV0LCAiZHJ5IHJ1bjogJXMiLCBkcnlfcnVuID8gInllcyIgOiAibm8iKTsKKwlzaG93KCZleHBlY3QsICZyZXQsICJmaWxlOiAlcyIsIGZpbGUgPyBmaWxlIDogIihub3Qgc2V0KSIpOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKKwkJc2hvdygmZXhwZWN0LCAmcmV0LCAibGlzdDogJXMiLCBsaXN0Lml0ZW1zW2ldLnN0cmluZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQlzaG93KCZleHBlY3QsICZyZXQsICJhcmcgJTAyZDogJXMiLCBpLCBhcmd2W2ldKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXBhcnNlLXBhdGhzcGVjLWZpbGUuYyBiL3QvaGVscGVyL3Rlc3QtcGFyc2UtcGF0aHNwZWMtZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjRjY2YKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXBhcnNlLXBhdGhzcGVjLWZpbGUuYwpAQCAtMCwwICsxLDMzIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorCitpbnQgY21kX19wYXJzZV9wYXRoc3BlY19maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJY29uc3QgY2hhciAqcGF0aHNwZWNfZnJvbV9maWxlID0gMDsKKwlpbnQgcGF0aHNwZWNfZmlsZV9udWwgPSAwLCBpOworCisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVzYWdlW10gPSB7CisJCSJ0ZXN0LXRvb2wgcGFyc2UtcGF0aHNwZWMtZmlsZSAtLXBhdGhzcGVjLWZyb20tZmlsZSBbLS1wYXRoc3BlYy1maWxlLW51bF0iLAorCQlOVUxMCisJfTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfUEFUSFNQRUNfRlJPTV9GSUxFKCZwYXRoc3BlY19mcm9tX2ZpbGUpLAorCQlPUFRfUEFUSFNQRUNfRklMRV9OVUwoJnBhdGhzcGVjX2ZpbGVfbnVsKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgMCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJcGFyc2VfcGF0aHNwZWNfZmlsZSgmcGF0aHNwZWMsIDAsIDAsIDAsIHBhdGhzcGVjX2Zyb21fZmlsZSwKKwkJCSAgICBwYXRoc3BlY19maWxlX251bCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMubnI7IGkrKykKKwkJcHJpbnRmKCIlc1xuIiwgcGF0aHNwZWMuaXRlbXNbaV0ub3JpZ2luYWwpOworCisJY2xlYXJfcGF0aHNwZWMoJnBhdGhzcGVjKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcGF0aC11dGlscy5jIGIvdC9oZWxwZXIvdGVzdC1wYXRoLXV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5MDM0YwotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcGF0aC11dGlscy5jCkBAIC0wLDAgKzEsNDc0IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworLyoKKyAqIEEgInN0cmluZ19saXN0X2VhY2hfZnVuY190IiBmdW5jdGlvbiB0aGF0IG5vcm1hbGl6ZXMgYW4gZW50cnkgZnJvbQorICogR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMuICBJZiB0aGUgcGF0aCBpcyB1bnVzYWJsZSBmb3Igc29tZSByZWFzb24sCisgKiBkaWUgd2l0aCBhbiBleHBsYW5hdGlvbi4KKyAqLworc3RhdGljIGludCBub3JtYWxpemVfY2VpbGluZ19lbnRyeShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqdW51c2VkKQoreworCWNoYXIgKmNlaWwgPSBpdGVtLT5zdHJpbmc7CisKKwlpZiAoISpjZWlsKQorCQlkaWUoIkVtcHR5IHBhdGggaXMgbm90IHN1cHBvcnRlZCIpOworCWlmICghaXNfYWJzb2x1dGVfcGF0aChjZWlsKSkKKwkJZGllKCJQYXRoIFwiJXNcIiBpcyBub3QgYWJzb2x1dGUiLCBjZWlsKTsKKwlpZiAobm9ybWFsaXplX3BhdGhfY29weShjZWlsLCBjZWlsKSA8IDApCisJCWRpZSgiUGF0aCBcIiVzXCIgY291bGQgbm90IGJlIG5vcm1hbGl6ZWQiLCBjZWlsKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbm9ybWFsaXplX2FyZ3Zfc3RyaW5nKGNvbnN0IGNoYXIgKip2YXIsIGNvbnN0IGNoYXIgKmlucHV0KQoreworCWlmICghc3RyY21wKGlucHV0LCAiPG51bGw+IikpCisJCSp2YXIgPSBOVUxMOworCWVsc2UgaWYgKCFzdHJjbXAoaW5wdXQsICI8ZW1wdHk+IikpCisJCSp2YXIgPSAiIjsKKwllbHNlCisJCSp2YXIgPSBpbnB1dDsKKworCWlmICgqdmFyICYmICgqKnZhciA9PSAnPCcgfHwgKip2YXIgPT0gJygnKSkKKwkJZGllKCJCYWQgdmFsdWU6ICVzXG4iLCBpbnB1dCk7Cit9CisKK3N0cnVjdCB0ZXN0X2RhdGEgeworCWNvbnN0IGNoYXIgKmZyb207ICAvKiBpbnB1dDogIHRyYW5zZm9ybSBmcm9tIHRoaXMgLi4uICovCisJY29uc3QgY2hhciAqdG87ICAgIC8qIG91dHB1dDogLi4uIHRvIHRoaXMuICAgICAgICAgICAgKi8KKwljb25zdCBjaGFyICphbHRlcm5hdGl2ZTsgLyogb3V0cHV0OiAuLi4gb3IgdGhpcy4gICAgICAqLworfTsKKworLyoKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlcnMgZm9yIE9wZW5CU0QsIHdob3NlIGJhc2VuYW1lKDMpIGFuZCBkaXJuYW1lKDMpCisgKiBoYXZlIGNvbnN0IHBhcmFtZXRlcnMuCisgKi8KK3N0YXRpYyBjaGFyICpwb3NpeF9iYXNlbmFtZShjaGFyICpwYXRoKQoreworCXJldHVybiBiYXNlbmFtZShwYXRoKTsKK30KKworc3RhdGljIGNoYXIgKnBvc2l4X2Rpcm5hbWUoY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gZGlybmFtZShwYXRoKTsKK30KKworc3RhdGljIGludCB0ZXN0X2Z1bmN0aW9uKHN0cnVjdCB0ZXN0X2RhdGEgKmRhdGEsIGNoYXIgKigqZnVuYykoY2hhciAqaW5wdXQpLAorCWNvbnN0IGNoYXIgKmZ1bmNuYW1lKQoreworCWludCBmYWlsZWQgPSAwLCBpOworCWNoYXIgYnVmZmVyWzEwMjRdOworCWNoYXIgKnRvOworCisJZm9yIChpID0gMDsgZGF0YVtpXS50bzsgaSsrKSB7CisJCWlmICghZGF0YVtpXS5mcm9tKQorCQkJdG8gPSBmdW5jKE5VTEwpOworCQllbHNlIHsKKwkJCXhzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMiLCBkYXRhW2ldLmZyb20pOworCQkJdG8gPSBmdW5jKGJ1ZmZlcik7CisJCX0KKwkJaWYgKCFzdHJjbXAodG8sIGRhdGFbaV0udG8pKQorCQkJY29udGludWU7CisJCWlmICghZGF0YVtpXS5hbHRlcm5hdGl2ZSkKKwkJCWVycm9yKCJGQUlMOiAlcyglcykgPT4gJyVzJyAhPSAnJXMnXG4iLAorCQkJCWZ1bmNuYW1lLCBkYXRhW2ldLmZyb20sIHRvLCBkYXRhW2ldLnRvKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh0bywgZGF0YVtpXS5hbHRlcm5hdGl2ZSkpCisJCQljb250aW51ZTsKKwkJZWxzZQorCQkJZXJyb3IoIkZBSUw6ICVzKCVzKSA9PiAnJXMnICE9ICclcycsICclcydcbiIsCisJCQkJZnVuY25hbWUsIGRhdGFbaV0uZnJvbSwgdG8sIGRhdGFbaV0udG8sCisJCQkJZGF0YVtpXS5hbHRlcm5hdGl2ZSk7CisJCWZhaWxlZCA9IDE7CisJfQorCXJldHVybiBmYWlsZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGVzdF9kYXRhIGJhc2VuYW1lX2RhdGFbXSA9IHsKKwkvKiAtLS0gUE9TSVggdHlwZSBwYXRocyAtLS0gKi8KKwl7IE5VTEwsICAgICAgICAgICAgICAiLiIgICAgfSwKKwl7ICIiLCAgICAgICAgICAgICAgICAiLiIgICAgfSwKKwl7ICIuIiwgICAgICAgICAgICAgICAiLiIgICAgfSwKKwl7ICIuLiIsICAgICAgICAgICAgICAiLi4iICAgfSwKKwl7ICIvIiwgICAgICAgICAgICAgICAiLyIgICAgfSwKKwl7ICIvLyIsICAgICAgICAgICAgICAiLyIsICIvLyIgfSwKKwl7ICIvLy8iLCAgICAgICAgICAgICAiLyIsICIvLyIgfSwKKwl7ICIvLy8vIiwgICAgICAgICAgICAiLyIsICIvLyIgfSwKKwl7ICJ1c3IiLCAgICAgICAgICAgICAidXNyIiAgfSwKKwl7ICIvdXNyIiwgICAgICAgICAgICAidXNyIiAgfSwKKwl7ICIvdXNyLyIsICAgICAgICAgICAidXNyIiAgfSwKKwl7ICIvdXNyLy8iLCAgICAgICAgICAidXNyIiAgfSwKKwl7ICIvdXNyL2xpYiIsICAgICAgICAibGliIiAgfSwKKwl7ICJ1c3IvbGliIiwgICAgICAgICAibGliIiAgfSwKKwl7ICJ1c3IvbGliLy8vIiwgICAgICAibGliIiAgfSwKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX01TQ19WRVIpCisJLyogLS0tIHdpbjMyIHR5cGUgcGF0aHMgLS0tICovCisJeyAiXFx1c3IiLCAgICAgICAgICAgInVzciIgIH0sCisJeyAiXFx1c3JcXCIsICAgICAgICAgInVzciIgIH0sCisJeyAiXFx1c3JcXFxcIiwgICAgICAgInVzciIgIH0sCisJeyAiXFx1c3JcXGxpYiIsICAgICAgImxpYiIgIH0sCisJeyAidXNyXFxsaWIiLCAgICAgICAgImxpYiIgIH0sCisJeyAidXNyXFxsaWJcXFxcXFwiLCAgImxpYiIgIH0sCisJeyAiQzovdXNyIiwgICAgICAgICAgInVzciIgIH0sCisJeyAiQzovdXNyIiwgICAgICAgICAgInVzciIgIH0sCisJeyAiQzovdXNyLyIsICAgICAgICAgInVzciIgIH0sCisJeyAiQzovdXNyLy8iLCAgICAgICAgInVzciIgIH0sCisJeyAiQzovdXNyL2xpYiIsICAgICAgImxpYiIgIH0sCisJeyAiQzp1c3IvbGliIiwgICAgICAgImxpYiIgIH0sCisJeyAiQzp1c3IvbGliLy8vIiwgICAgImxpYiIgIH0sCisJeyAiQzoiLCAgICAgICAgICAgICAgIi4iICAgIH0sCisJeyAiQzphIiwgICAgICAgICAgICAgImEiICAgIH0sCisJeyAiQzovIiwgICAgICAgICAgICAgIi8iICAgIH0sCisJeyAiQzovLy8iLCAgICAgICAgICAgIi8iICAgIH0sCisJeyAiXFwiLCAgICAgICAgICAgICAgIlxcIiwgIi8iIH0sCisJeyAiXFxcXCIsICAgICAgICAgICAgIlxcIiwgIi8iIH0sCisJeyAiXFxcXFxcIiwgICAgICAgICAgIlxcIiwgIi8iIH0sCisjZW5kaWYKKwl7IE5VTEwsICAgICAgICAgICAgICBOVUxMICAgfQorfTsKKworc3RhdGljIHN0cnVjdCB0ZXN0X2RhdGEgZGlybmFtZV9kYXRhW10gPSB7CisJLyogLS0tIFBPU0lYIHR5cGUgcGF0aHMgLS0tICovCisJeyBOVUxMLCAgICAgICAgICAgICAgIi4iICAgICAgfSwKKwl7ICIiLCAgICAgICAgICAgICAgICAiLiIgICAgICB9LAorCXsgIi4iLCAgICAgICAgICAgICAgICIuIiAgICAgIH0sCisJeyAiLi4iLCAgICAgICAgICAgICAgIi4iICAgICAgfSwKKwl7ICIvIiwgICAgICAgICAgICAgICAiLyIgICAgICB9LAorCXsgIi8vIiwgICAgICAgICAgICAgICIvIiwgIi8vIiB9LAorCXsgIi8vLyIsICAgICAgICAgICAgICIvIiwgIi8vIiB9LAorCXsgIi8vLy8iLCAgICAgICAgICAgICIvIiwgIi8vIiB9LAorCXsgInVzciIsICAgICAgICAgICAgICIuIiAgICAgIH0sCisJeyAiL3VzciIsICAgICAgICAgICAgIi8iICAgICAgfSwKKwl7ICIvdXNyLyIsICAgICAgICAgICAiLyIgICAgICB9LAorCXsgIi91c3IvLyIsICAgICAgICAgICIvIiAgICAgIH0sCisJeyAiL3Vzci9saWIiLCAgICAgICAgIi91c3IiICAgfSwKKwl7ICJ1c3IvbGliIiwgICAgICAgICAidXNyIiAgICB9LAorCXsgInVzci9saWIvLy8iLCAgICAgICJ1c3IiICAgIH0sCisKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorCS8qIC0tLSB3aW4zMiB0eXBlIHBhdGhzIC0tLSAqLworCXsgIlxcIiwgICAgICAgICAgICAgICJcXCIgICAgIH0sCisJeyAiXFxcXCIsICAgICAgICAgICAgIlxcXFwiICAgfSwKKwl7ICJcXHVzciIsICAgICAgICAgICAiXFwiICAgICB9LAorCXsgIlxcdXNyXFwiLCAgICAgICAgICJcXCIgICAgIH0sCisJeyAiXFx1c3JcXFxcIiwgICAgICAgIlxcIiAgICAgfSwKKwl7ICJcXHVzclxcbGliIiwgICAgICAiXFx1c3IiICB9LAorCXsgInVzclxcbGliIiwgICAgICAgICJ1c3IiICAgIH0sCisJeyAidXNyXFxsaWJcXFxcXFwiLCAgInVzciIgICAgfSwKKwl7ICJDOmEiLCAgICAgICAgICAgICAiQzouIiAgICB9LAorCXsgIkM6LyIsICAgICAgICAgICAgICJDOi8iICAgIH0sCisJeyAiQzovLy8iLCAgICAgICAgICAgIkM6LyIgICAgfSwKKwl7ICJDOi91c3IiLCAgICAgICAgICAiQzovIiAgICB9LAorCXsgIkM6L3Vzci8iLCAgICAgICAgICJDOi8iICAgIH0sCisJeyAiQzovdXNyLy8iLCAgICAgICAgIkM6LyIgICAgfSwKKwl7ICJDOi91c3IvbGliIiwgICAgICAiQzovdXNyIiB9LAorCXsgIkM6dXNyL2xpYiIsICAgICAgICJDOnVzciIgIH0sCisJeyAiQzp1c3IvbGliLy8vIiwgICAgIkM6dXNyIiAgfSwKKwl7ICJcXFxcXFwiLCAgICAgICAgICAiXFwiICAgICB9LAorCXsgIlxcXFxcXFxcIiwgICAgICAgICJcXCIgICAgIH0sCisJeyAiQzoiLCAgICAgICAgICAgICAgIkM6LiIsICIuIiB9LAorI2VuZGlmCisJeyBOVUxMLCAgICAgICAgICAgICAgTlVMTCAgICAgfQorfTsKKworc3RhdGljIGludCBpc19kb3RnaXRtb2R1bGVzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGlzX2hmc19kb3RnaXRtb2R1bGVzKHBhdGgpIHx8IGlzX250ZnNfZG90Z2l0bW9kdWxlcyhwYXRoKTsKK30KKworc3RhdGljIGludCBjbXBfYnlfc3Rfc2l6ZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWludHB0cl90IHggPSAoaW50cHRyX3QpKChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqKWEpLT51dGlsOworCWludHB0cl90IHkgPSAoaW50cHRyX3QpKChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqKWIpLT51dGlsOworCisJcmV0dXJuIHggPiB5ID8gLTEgOiAoeCA8IHkgPyArMSA6IDApOworfQorCisvKgorICogQSB2ZXJ5IHNpbXBsZSwgcmVwcm9kdWNpYmxlIHBzZXVkby1yYW5kb20gZ2VuZXJhdG9yLiBDb3BpZWQgZnJvbQorICogYHRlc3QtZ2VucmFuZG9tLmNgLgorICovCitzdGF0aWMgdWludDY0X3QgbXlfcmFuZG9tX3ZhbHVlID0gMTIzNDsKKworc3RhdGljIHVpbnQ2NF90IG15X3JhbmRvbSh2b2lkKQoreworCW15X3JhbmRvbV92YWx1ZSA9IG15X3JhbmRvbV92YWx1ZSAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKwlyZXR1cm4gbXlfcmFuZG9tX3ZhbHVlOworfQorCisvKgorICogQSBmYXN0IGFwcHJveGltYXRpb24gb2YgdGhlIHNxdWFyZSByb290LCB3aXRob3V0IHJlcXVpcmluZyBtYXRoLmguCisgKgorICogSXQgdXNlcyBOZXd0b24ncyBtZXRob2QgdG8gYXBwcm94aW1hdGUgdGhlIHNvbHV0aW9uIG9mIDAgPSB4XjIgLSB2YWx1ZS4KKyAqLworc3RhdGljIGRvdWJsZSBteV9zcXJ0KGRvdWJsZSB2YWx1ZSkKK3sKKwljb25zdCBkb3VibGUgZXBzaWxvbiA9IDFlLTY7CisJZG91YmxlIHggPSB2YWx1ZTsKKworCWlmICh2YWx1ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWZvciAoOzspIHsKKwkJZG91YmxlIGRlbHRhID0gKHZhbHVlIC8geCAtIHgpIC8gMjsKKwkJaWYgKGRlbHRhIDwgZXBzaWxvbiAmJiBkZWx0YSA+IC1lcHNpbG9uKQorCQkJcmV0dXJuIHggKyBkZWx0YTsKKwkJeCArPSBkZWx0YTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJvdGVjdF9udGZzX2hmc19iZW5jaG1hcmsoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXNpemVfdCBpLCBqLCBuciwgbWluX2xlbiA9IDMsIG1heF9sZW4gPSAyMDsKKwljaGFyICoqbmFtZXM7CisJaW50IHJlcGV0aXRpb25zID0gMTUsIGZpbGVfbW9kZSA9IDAxMDA2NDQ7CisJdWludDY0X3QgYmVnaW4sIGVuZDsKKwlkb3VibGUgbVszXVsyXSwgdlszXVsyXTsKKwl1aW50NjRfdCBjdW11bDsKKwlkb3VibGUgY3VtdWwyOworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgIi0td2l0aC1zeW1saW5rLW1vZGUiKSkgeworCQlmaWxlX21vZGUgPSAwMTIwMDAwOworCQlhcmdjLS07CisJCWFyZ3YrKzsKKwl9CisKKwluciA9IGFyZ2MgPiAxID8gc3RydG91bChhcmd2WzFdLCBOVUxMLCAwKSA6IDEwMDAwMDA7CisJQUxMT0NfQVJSQVkobmFtZXMsIG5yKTsKKworCWlmIChhcmdjID4gMikgeworCQltaW5fbGVuID0gc3RydG91bChhcmd2WzJdLCBOVUxMLCAwKTsKKwkJaWYgKGFyZ2MgPiAzKQorCQkJbWF4X2xlbiA9IHN0cnRvdWwoYXJndlszXSwgTlVMTCwgMCk7CisJCWlmIChtaW5fbGVuID4gbWF4X2xlbikKKwkJCWRpZSgibWluX2xlbiA+IG1heF9sZW4iKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlzaXplX3QgbGVuID0gbWluX2xlbiArIChteV9yYW5kb20oKSAlIChtYXhfbGVuICsgMSAtIG1pbl9sZW4pKTsKKworCQluYW1lc1tpXSA9IHhtYWxsb2N6KGxlbik7CisJCXdoaWxlIChsZW4gPiAwKQorCQkJbmFtZXNbaV1bLS1sZW5dID0gKGNoYXIpKCcgJyArIChteV9yYW5kb20oKSAlICgnXHg3ZicgLSAnICcpKSk7CisJfQorCisJZm9yIChwcm90ZWN0X250ZnMgPSAwOyBwcm90ZWN0X250ZnMgPCAyOyBwcm90ZWN0X250ZnMrKykKKwkJZm9yIChwcm90ZWN0X2hmcyA9IDA7IHByb3RlY3RfaGZzIDwgMjsgcHJvdGVjdF9oZnMrKykgeworCQkJY3VtdWwgPSAwOworCQkJY3VtdWwyID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCByZXBldGl0aW9uczsgaSsrKSB7CisJCQkJYmVnaW4gPSBnZXRuYW5vdGltZSgpOworCQkJCWZvciAoaiA9IDA7IGogPCBucjsgaisrKQorCQkJCQl2ZXJpZnlfcGF0aChuYW1lc1tqXSwgZmlsZV9tb2RlKTsKKwkJCQllbmQgPSBnZXRuYW5vdGltZSgpOworCQkJCXByaW50ZigicHJvdGVjdF9udGZzID0gJWQsIHByb3RlY3RfaGZzID0gJWQ6ICVsZm1zXG4iLCBwcm90ZWN0X250ZnMsIHByb3RlY3RfaGZzLCAoZW5kLWJlZ2luKSAvIChkb3VibGUpMWU2KTsKKwkJCQljdW11bCArPSBlbmQgLSBiZWdpbjsKKwkJCQljdW11bDIgKz0gKGVuZCAtIGJlZ2luKSAqIChlbmQgLSBiZWdpbik7CisJCQl9CisJCQltW3Byb3RlY3RfbnRmc11bcHJvdGVjdF9oZnNdID0gY3VtdWwgLyAoZG91YmxlKXJlcGV0aXRpb25zOworCQkJdltwcm90ZWN0X250ZnNdW3Byb3RlY3RfaGZzXSA9IG15X3NxcnQoY3VtdWwyIC8gKGRvdWJsZSlyZXBldGl0aW9ucyAtIG1bcHJvdGVjdF9udGZzXVtwcm90ZWN0X2hmc10gKiBtW3Byb3RlY3RfbnRmc11bcHJvdGVjdF9oZnNdKTsKKwkJCXByaW50ZigibWVhbjogJWxmbXMsIHN0ZGRldjogJWxmbXNcbiIsIG1bcHJvdGVjdF9udGZzXVtwcm90ZWN0X2hmc10gLyAoZG91YmxlKTFlNiwgdltwcm90ZWN0X250ZnNdW3Byb3RlY3RfaGZzXSAvIChkb3VibGUpMWU2KTsKKwkJfQorCisJZm9yIChwcm90ZWN0X250ZnMgPSAwOyBwcm90ZWN0X250ZnMgPCAyOyBwcm90ZWN0X250ZnMrKykKKwkJZm9yIChwcm90ZWN0X2hmcyA9IDA7IHByb3RlY3RfaGZzIDwgMjsgcHJvdGVjdF9oZnMrKykKKwkJCXByaW50ZigibnRmcz0lZC9oZnM9JWQ6ICVsZiUlIHNsb3dlclxuIiwgcHJvdGVjdF9udGZzLCBwcm90ZWN0X2hmcywgKG1bcHJvdGVjdF9udGZzXVtwcm90ZWN0X2hmc10gLSBtWzBdWzBdKSAqIDEwMCAvIG1bMF1bMF0pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfX3BhdGhfdXRpbHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAibm9ybWFsaXplX3BhdGhfY29weSIpKSB7CisJCWNoYXIgKmJ1ZiA9IHhtYWxsb2N6KHN0cmxlbihhcmd2WzJdKSk7CisJCWludCBydiA9IG5vcm1hbGl6ZV9wYXRoX2NvcHkoYnVmLCBhcmd2WzJdKTsKKwkJaWYgKHJ2KQorCQkJYnVmID0gIisrZmFpbGVkKysiOworCQlwdXRzKGJ1Zik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID49IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAicmVhbF9wYXRoIikpIHsKKwkJd2hpbGUgKGFyZ2MgPiAyKSB7CisJCQlwdXRzKHJlYWxfcGF0aChhcmd2WzJdKSk7CisJCQlhcmdjLS07CisJCQlhcmd2Kys7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJhYnNvbHV0ZV9wYXRoIikpIHsKKwkJd2hpbGUgKGFyZ2MgPiAyKSB7CisJCQlwdXRzKGFic29sdXRlX3BhdGgoYXJndlsyXSkpOworCQkJYXJnYy0tOworCQkJYXJndisrOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAibG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgiKSkgeworCQlpbnQgbGVuOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY2VpbGluZ19kaXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWNoYXIgKnBhdGggPSB4c3RyZHVwKGFyZ3ZbMl0pOworCisJCS8qCisJCSAqIFdlIGhhdmUgdG8gbm9ybWFsaXplIHRoZSBhcmd1bWVudHMgYmVjYXVzZSB1bmRlcgorCQkgKiBXaW5kb3dzLCBiYXNoIG1hbmdsZXMgYXJndW1lbnRzIHRoYXQgbG9vayBsaWtlCisJCSAqIGFic29sdXRlIFBPU0lYIHBhdGhzIG9yIGNvbG9uLXNlcGFyYXRlIGxpc3RzIG9mCisJCSAqIGFic29sdXRlIFBPU0lYIHBhdGhzIGludG8gRE9TIHBhdGhzIChlLmcuLAorCQkgKiAiL2ZvbzovZm9vL2JhciIgbWlnaHQgYmUgY29udmVydGVkIHRvCisJCSAqICJEOlxTcmNcbXN5c2dpdFxmb287RDpcU3JjXG1zeXNnaXRcZm9vXGJhciIpLAorCQkgKiB3aGVyZWFzIGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoKCkgcmVxdWlyZXMgcGF0aHMKKwkJICogdGhhdCB1c2UgZm9yd2FyZCBzbGFzaGVzLgorCQkgKi8KKwkJaWYgKG5vcm1hbGl6ZV9wYXRoX2NvcHkocGF0aCwgcGF0aCkpCisJCQlkaWUoIlBhdGggXCIlc1wiIGNvdWxkIG5vdCBiZSBub3JtYWxpemVkIiwgYXJndlsyXSk7CisJCXN0cmluZ19saXN0X3NwbGl0KCZjZWlsaW5nX2RpcnMsIGFyZ3ZbM10sIFBBVEhfU0VQLCAtMSk7CisJCWZpbHRlcl9zdHJpbmdfbGlzdCgmY2VpbGluZ19kaXJzLCAwLAorCQkJCSAgIG5vcm1hbGl6ZV9jZWlsaW5nX2VudHJ5LCBOVUxMKTsKKwkJbGVuID0gbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgocGF0aCwgJmNlaWxpbmdfZGlycyk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZjZWlsaW5nX2RpcnMsIDApOworCQlmcmVlKHBhdGgpOworCQlwcmludGYoIiVkXG4iLCBsZW4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA+PSA0ICYmICFzdHJjbXAoYXJndlsxXSwgInByZWZpeF9wYXRoIikpIHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gYXJndlsyXTsKKwkJaW50IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwkJaW50IG5vbmdpdF9vazsKKwkJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdF9vayk7CisJCXdoaWxlIChhcmdjID4gMykgeworCQkJcHV0cyhwcmVmaXhfcGF0aChwcmVmaXgsIHByZWZpeF9sZW4sIGFyZ3ZbM10pKTsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA9PSA0ICYmICFzdHJjbXAoYXJndlsxXSwgInN0cmlwX3BhdGhfc3VmZml4IikpIHsKKwkJY2hhciAqcHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoYXJndlsyXSwgYXJndlszXSk7CisJCXByaW50ZigiJXNcbiIsIHByZWZpeCA/IHByZWZpeCA6ICIobnVsbCkiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gMyAmJiAhc3RyY21wKGFyZ3ZbMV0sICJwcmludF9wYXRoIikpIHsKKwkJcHV0cyhhcmd2WzJdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gNCAmJiAhc3RyY21wKGFyZ3ZbMV0sICJyZWxhdGl2ZV9wYXRoIikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICppbiwgKnByZWZpeCwgKnJlbDsKKwkJbm9ybWFsaXplX2FyZ3Zfc3RyaW5nKCZpbiwgYXJndlsyXSk7CisJCW5vcm1hbGl6ZV9hcmd2X3N0cmluZygmcHJlZml4LCBhcmd2WzNdKTsKKwkJcmVsID0gcmVsYXRpdmVfcGF0aChpbiwgcHJlZml4LCAmc2IpOworCQlpZiAoIXJlbCkKKwkJCXB1dHMoIihudWxsKSIpOworCQllbHNlCisJCQlwdXRzKHN0cmxlbihyZWwpID4gMCA/IHJlbCA6ICIoZW1wdHkpIik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiYmFzZW5hbWUiKSkKKwkJcmV0dXJuIHRlc3RfZnVuY3Rpb24oYmFzZW5hbWVfZGF0YSwgcG9zaXhfYmFzZW5hbWUsIGFyZ3ZbMV0pOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJkaXJuYW1lIikpCisJCXJldHVybiB0ZXN0X2Z1bmN0aW9uKGRpcm5hbWVfZGF0YSwgcG9zaXhfZGlybmFtZSwgYXJndlsxXSk7CisKKwlpZiAoYXJnYyA+IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiaXNfZG90Z2l0bW9kdWxlcyIpKSB7CisJCWludCByZXMgPSAwLCBleHBlY3QgPSAxLCBpOworCQlmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKQorCQkJaWYgKCFzdHJjbXAoIi0tbm90IiwgYXJndltpXSkpCisJCQkJZXhwZWN0ID0gIWV4cGVjdDsKKwkJCWVsc2UgaWYgKGV4cGVjdCAhPSBpc19kb3RnaXRtb2R1bGVzKGFyZ3ZbaV0pKQorCQkJCXJlcyA9IGVycm9yKCInJXMnIGlzICVzLmdpdG1vZHVsZXMiLCBhcmd2W2ldLAorCQkJCQkgICAgZXhwZWN0ID8gIm5vdCAiIDogIiIpOworCQkJZWxzZQorCQkJCWZwcmludGYoc3RkZXJyLCAib2s6ICclcycgaXMgJXMuZ2l0bW9kdWxlc1xuIiwKKwkJCQkJYXJndltpXSwgZXhwZWN0ID8gIiIgOiAibm90ICIpOworCQlyZXR1cm4gISFyZXM7CisJfQorCisJaWYgKGFyZ2MgPiAyICYmICFzdHJjbXAoYXJndlsxXSwgImZpbGUtc2l6ZSIpKSB7CisJCWludCByZXMgPSAwLCBpOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKQorCQkJaWYgKHN0YXQoYXJndltpXSwgJnN0KSkKKwkJCQlyZXMgPSBlcnJvcl9lcnJubygiQ2Fubm90IHN0YXQgJyVzJyIsIGFyZ3ZbaV0pOworCQkJZWxzZQorCQkJCXByaW50ZigiJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdClzdC5zdF9zaXplKTsKKwkJcmV0dXJuICEhcmVzOworCX0KKworCWlmIChhcmdjID09IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAic2tpcC1uLWJ5dGVzIikpIHsKKwkJaW50IGZkID0gb3Blbihhcmd2WzJdLCBPX1JET05MWSksIG9mZnNldCA9IGF0b2koYXJndlszXSk7CisJCWNoYXIgYnVmZmVyWzY1NTM2XTsKKworCQlpZiAoZmQgPCAwKQorCQkJZGllX2Vycm5vKCJjb3VsZCBub3Qgb3BlbiAnJXMnIiwgYXJndlsyXSk7CisJCWlmIChsc2VlayhmZCwgb2Zmc2V0LCBTRUVLX1NFVCkgPCAwKQorCQkJZGllX2Vycm5vKCJjb3VsZCBub3Qgc2tpcCAlZCBieXRlcyIsIG9mZnNldCk7CisJCWZvciAoOzspIHsKKwkJCXNzaXplX3QgY291bnQgPSByZWFkKGZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwkJCWlmIChjb3VudCA8IDApCisJCQkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCAnJXMnIiwgYXJndlsyXSk7CisJCQlpZiAoIWNvdW50KQorCQkJCWJyZWFrOworCQkJaWYgKHdyaXRlKDEsIGJ1ZmZlciwgY291bnQpIDwgMCkKKwkJCQlkaWVfZXJybm8oImNvdWxkIG5vdCB3cml0ZSB0byBzdGRvdXQiKTsKKwkJfQorCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID4gNSAmJiAhc3RyY21wKGFyZ3ZbMV0sICJzbGljZS10ZXN0cyIpKSB7CisJCWludCByZXMgPSAwOworCQlsb25nIG9mZnNldCwgc3RyaWRlLCBpOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCW9mZnNldCA9IHN0cnRvbChhcmd2WzJdLCBOVUxMLCAxMCk7CisJCXN0cmlkZSA9IHN0cnRvbChhcmd2WzNdLCBOVUxMLCAxMCk7CisJCWlmIChzdHJpZGUgPCAxKQorCQkJc3RyaWRlID0gMTsKKwkJZm9yIChpID0gNDsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmIChzdGF0KGFyZ3ZbaV0sICZzdCkpCisJCQkJcmVzID0gZXJyb3JfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBhcmd2W2ldKTsKKwkJCWVsc2UKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3QsIGFyZ3ZbaV0pLT51dGlsID0KKwkJCQkJKHZvaWQgKikoaW50cHRyX3Qpc3Quc3Rfc2l6ZTsKKwkJUVNPUlQobGlzdC5pdGVtcywgbGlzdC5uciwgY21wX2J5X3N0X3NpemUpOworCQlmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsaXN0Lm5yOyBpKz0gc3RyaWRlKQorCQkJcHJpbnRmKCIlc1xuIiwgbGlzdC5pdGVtc1tpXS5zdHJpbmcpOworCisJCXJldHVybiAhIXJlczsKKwl9CisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAicHJvdGVjdF9udGZzX2hmcyIpKQorCQlyZXR1cm4gISFwcm90ZWN0X250ZnNfaGZzX2JlbmNobWFyayhhcmdjIC0gMSwgYXJndiArIDEpOworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgImlzX3ZhbGlkX3BhdGgiKSkgeworCQlpbnQgcmVzID0gMCwgZXhwZWN0ID0gMSwgaTsKKworCQlmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKQorCQkJaWYgKCFzdHJjbXAoIi0tbm90IiwgYXJndltpXSkpCisJCQkJZXhwZWN0ID0gMDsKKwkJCWVsc2UgaWYgKGV4cGVjdCAhPSBpc192YWxpZF9wYXRoKGFyZ3ZbaV0pKQorCQkJCXJlcyA9IGVycm9yKCInJXMnIGlzJXMgYSB2YWxpZCBwYXRoIiwKKwkJCQkJICAgIGFyZ3ZbaV0sIGV4cGVjdCA/ICIgbm90IiA6ICIiKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIiclcycgaXMlcyBhIHZhbGlkIHBhdGhcbiIsCisJCQkJCWFyZ3ZbaV0sIGV4cGVjdCA/ICIiIDogIiBub3QiKTsKKworCQlyZXR1cm4gISFyZXM7CisJfQorCisJZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBmdW5jdGlvbiBuYW1lOiAlc1xuIiwgYXJndlswXSwKKwkJYXJndlsxXSA/IGFyZ3ZbMV0gOiAiKHRoZXJlIHdhcyBub25lKSIpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1wa3QtbGluZS5jIGIvdC9oZWxwZXIvdGVzdC1wa3QtbGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MmQ1MzYKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXBrdC1saW5lLmMKQEAgLTAsMCArMSw5OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKworc3RhdGljIHZvaWQgcGFja19saW5lKGNvbnN0IGNoYXIgKmxpbmUpCit7CisJaWYgKCFzdHJjbXAobGluZSwgIjAwMDAiKSB8fCAhc3RyY21wKGxpbmUsICIwMDAwXG4iKSkKKwkJcGFja2V0X2ZsdXNoKDEpOworCWVsc2UgaWYgKCFzdHJjbXAobGluZSwgIjAwMDEiKSB8fCAhc3RyY21wKGxpbmUsICIwMDAxXG4iKSkKKwkJcGFja2V0X2RlbGltKDEpOworCWVsc2UKKwkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiJXMiLCBsaW5lKTsKK30KKworc3RhdGljIHZvaWQgcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MpIHsgLyogcmVhZCBmcm9tIGFyZ3YgKi8KKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCQlwYWNrX2xpbmUoYXJndltpXSk7CisJfSBlbHNlIHsgLyogcmVhZCBmcm9tIHN0ZGluICovCisJCWNoYXIgbGluZVtMQVJHRV9QQUNLRVRfTUFYXTsKKwkJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pKSB7CisJCQlwYWNrX2xpbmUobGluZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVucGFjayh2b2lkKQoreworCXN0cnVjdCBwYWNrZXRfcmVhZGVyIHJlYWRlcjsKKwlwYWNrZXRfcmVhZGVyX2luaXQoJnJlYWRlciwgMCwgTlVMTCwgMCwKKwkJCSAgIFBBQ0tFVF9SRUFEX0dFTlRMRV9PTl9FT0YgfAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSk7CisKKwl3aGlsZSAocGFja2V0X3JlYWRlcl9yZWFkKCZyZWFkZXIpICE9IFBBQ0tFVF9SRUFEX0VPRikgeworCQlzd2l0Y2ggKHJlYWRlci5zdGF0dXMpIHsKKwkJY2FzZSBQQUNLRVRfUkVBRF9FT0Y6CisJCQlicmVhazsKKwkJY2FzZSBQQUNLRVRfUkVBRF9OT1JNQUw6CisJCQlwcmludGYoIiVzXG4iLCByZWFkZXIubGluZSk7CisJCQlicmVhazsKKwkJY2FzZSBQQUNLRVRfUkVBRF9GTFVTSDoKKwkJCXByaW50ZigiMDAwMFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBQQUNLRVRfUkVBRF9ERUxJTToKKwkJCXByaW50ZigiMDAwMVxuIik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgdW5wYWNrX3NpZGViYW5kKHZvaWQpCit7CisJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCAwLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfR0VOVExFX09OX0VPRiB8CisJCQkgICBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FKTsKKworCXdoaWxlIChwYWNrZXRfcmVhZGVyX3JlYWQoJnJlYWRlcikgIT0gUEFDS0VUX1JFQURfRU9GKSB7CisJCWludCBiYW5kOworCQlpbnQgZmQ7CisKKwkJc3dpdGNoIChyZWFkZXIuc3RhdHVzKSB7CisJCWNhc2UgUEFDS0VUX1JFQURfRU9GOgorCQkJYnJlYWs7CisJCWNhc2UgUEFDS0VUX1JFQURfTk9STUFMOgorCQkJYmFuZCA9IHJlYWRlci5saW5lWzBdICYgMHhmZjsKKwkJCWlmIChiYW5kIDwgMSB8fCBiYW5kID4gMikKKwkJCQlkaWUoInVuZXhwZWN0ZWQgc2lkZSBiYW5kICVkIiwgYmFuZCk7CisJCQlmZCA9IGJhbmQ7CisKKwkJCXdyaXRlX29yX2RpZShmZCwgcmVhZGVyLmxpbmUgKyAxLCByZWFkZXIucGt0bGVuIC0gMSk7CisJCQlicmVhazsKKwkJY2FzZSBQQUNLRVRfUkVBRF9GTFVTSDoKKwkJCXJldHVybjsKKwkJY2FzZSBQQUNLRVRfUkVBRF9ERUxJTToKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitpbnQgY21kX19wa3RfbGluZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MgPCAyKQorCQlkaWUoInRvbyBmZXcgYXJndW1lbnRzIik7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAicGFjayIpKQorCQlwYWNrKGFyZ2MgLSAyLCBhcmd2ICsgMik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAidW5wYWNrIikpCisJCXVucGFjaygpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInVucGFjay1zaWRlYmFuZCIpKQorCQl1bnBhY2tfc2lkZWJhbmQoKTsKKwllbHNlCisJCWRpZSgiaW52YWxpZCBhcmd1bWVudCAnJXMnIiwgYXJndlsxXSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcHJpby1xdWV1ZS5jIGIvdC9oZWxwZXIvdGVzdC1wcmlvLXF1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwMjg0NAotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcHJpby1xdWV1ZS5jCkBAIC0wLDAgKzEsNTAgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKworc3RhdGljIGludCBpbnRjbXAoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiLCB2b2lkICpkYXRhKQoreworCWNvbnN0IGludCAqYSA9IHZhLCAqYiA9IHZiOworCXJldHVybiAqYSAtICpiOworfQorCitzdGF0aWMgdm9pZCBzaG93KGludCAqdikKK3sKKwlpZiAoIXYpCisJCXByaW50ZigiTlVMTFxuIik7CisJZWxzZQorCQlwcmludGYoIiVkXG4iLCAqdik7CisJZnJlZSh2KTsKK30KKworaW50IGNtZF9fcHJpb19xdWV1ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHByaW9fcXVldWUgcHEgPSB7IGludGNtcCB9OworCisJd2hpbGUgKCorK2FyZ3YpIHsKKwkJaWYgKCFzdHJjbXAoKmFyZ3YsICJnZXQiKSkgeworCQkJdm9pZCAqcGVlayA9IHByaW9fcXVldWVfcGVlaygmcHEpOworCQkJdm9pZCAqZ2V0ID0gcHJpb19xdWV1ZV9nZXQoJnBxKTsKKwkJCWlmIChwZWVrICE9IGdldCkKKwkJCQlCVUcoInBlZWsgYW5kIGdldCByZXN1bHRzIGRvIG5vdCBtYXRjaCIpOworCQkJc2hvdyhnZXQpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoKmFyZ3YsICJkdW1wIikpIHsKKwkJCXZvaWQgKnBlZWs7CisJCQl2b2lkICpnZXQ7CisJCQl3aGlsZSAoKHBlZWsgPSBwcmlvX3F1ZXVlX3BlZWsoJnBxKSkpIHsKKwkJCQlnZXQgPSBwcmlvX3F1ZXVlX2dldCgmcHEpOworCQkJCWlmIChwZWVrICE9IGdldCkKKwkJCQkJQlVHKCJwZWVrIGFuZCBnZXQgcmVzdWx0cyBkbyBub3QgbWF0Y2giKTsKKwkJCQlzaG93KGdldCk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgInN0YWNrIikpIHsKKwkJCXBxLmNvbXBhcmUgPSBOVUxMOworCQl9IGVsc2UgeworCQkJaW50ICp2ID0geG1hbGxvYyhzaXplb2YoKnYpKTsKKwkJCSp2ID0gYXRvaSgqYXJndik7CisJCQlwcmlvX3F1ZXVlX3B1dCgmcHEsIHYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXByb2dyZXNzLmMgYi90L2hlbHBlci90ZXN0LXByb2dyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiOTZjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcHJvZ3Jlc3MuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogQSB0ZXN0IGhlbHBlciB0byBleGVyY2lzZSB0aGUgcHJvZ3Jlc3MgZGlzcGxheS4KKyAqCisgKiBSZWFkcyBpbnN0cnVjdGlvbnMgZnJvbSBzdGFuZGFyZCBpbnB1dCwgb25lIGluc3RydWN0aW9uIHBlciBsaW5lOgorICoKKyAqICAgInByb2dyZXNzIDxpdGVtcz4iIC0gQ2FsbCBkaXNwbGF5X3Byb2dyZXNzKCkgd2l0aCB0aGUgZ2l2ZW4gaXRlbSBjb3VudAorICogICAgICAgICAgICAgICAgICAgICAgICBhcyBwYXJhbWV0ZXIuCisgKiAgICJ0aHJvdWdocHV0IDxieXRlcz4gPG1pbGxpcz4gLSBDYWxsIGRpc3BsYXlfdGhyb3VnaHB1dCgpIHdpdGggdGhlIGdpdmVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlIGNvdW50IGFzIHBhcmFtZXRlci4gIFRoZSAnbWlsbGlzJworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgdGltZSBlbGFwc2VkIHNpbmNlIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfcHJvZ3Jlc3MoKSBjYWxsLgorICogICAidXBkYXRlIiAtIFNldCB0aGUgJ3Byb2dyZXNzX3VwZGF0ZScgZmxhZy4KKyAqCisgKiBTZWUgJ3QwNTAwLXByb2dyZXNzLWRpc3BsYXkuc2gnIGZvciBleGFtcGxlcy4KKyAqLworI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworLyoKKyAqIFRoZXNlIGFyZSBkZWZpbmVkIGluICdwcm9ncmVzcy5jJywgYnV0IGFyZSBub3QgZXhwb3NlZCBpbiAncHJvZ3Jlc3MuaCcsCisgKiBiZWNhdXNlIHRoZXkgYXJlIGV4Y2x1c2l2ZWx5IGZvciB0ZXN0aW5nLgorICovCitleHRlcm4gaW50IHByb2dyZXNzX3Rlc3Rpbmc7CitleHRlcm4gdWludDY0X3QgcHJvZ3Jlc3NfdGVzdF9uczsKK3ZvaWQgcHJvZ3Jlc3NfdGVzdF9mb3JjZV91cGRhdGUodm9pZCk7CisKK2ludCBjbWRfX3Byb2dyZXNzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgdG90YWwgPSAwOworCWNvbnN0IGNoYXIgKnRpdGxlOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisKKwljb25zdCBjaGFyICp1c2FnZVtdID0geworCQkidGVzdC10b29sIHByb2dyZXNzIFstLXRvdGFsPTxuPl0gPHByb2dyZXNzLXRpdGxlPiIsCisJCU5VTEwKKwl9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfSU5URUdFUigwLCAidG90YWwiLCAmdG90YWwsICJ0b3RhbCBudW1iZXIgb2YgaXRlbXMiKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZSwgMCk7CisJaWYgKGFyZ2MgIT0gMSkKKwkJZGllKCJuZWVkIGEgdGl0bGUgZm9yIHRoZSBwcm9ncmVzcyBvdXRwdXQiKTsKKwl0aXRsZSA9IGFyZ3ZbMF07CisKKwlwcm9ncmVzc190ZXN0aW5nID0gMTsKKwlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKHRpdGxlLCB0b3RhbCk7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBzdGRpbikgIT0gRU9GKSB7CisJCWNoYXIgKmVuZDsKKworCQlpZiAoc2tpcF9wcmVmaXgobGluZS5idWYsICJwcm9ncmVzcyAiLCAoY29uc3QgY2hhciAqKikgJmVuZCkpIHsKKwkJCXVpbnQ2NF90IGl0ZW1fY291bnQgPSBzdHJ0b3VsbChlbmQsICZlbmQsIDEwKTsKKwkJCWlmICgqZW5kICE9ICdcMCcpCisJCQkJZGllKCJpbnZhbGlkIGlucHV0OiAnJXMnXG4iLCBsaW5lLmJ1Zik7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpdGVtX2NvdW50KTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChsaW5lLmJ1ZiwgInRocm91Z2hwdXQgIiwKKwkJCQkgICAgICAgKGNvbnN0IGNoYXIgKiopICZlbmQpKSB7CisJCQl1aW50NjRfdCBieXRlX2NvdW50LCB0ZXN0X21zOworCisJCQlieXRlX2NvdW50ID0gc3RydG91bGwoZW5kLCAmZW5kLCAxMCk7CisJCQlpZiAoKmVuZCAhPSAnICcpCisJCQkJZGllKCJpbnZhbGlkIGlucHV0OiAnJXMnXG4iLCBsaW5lLmJ1Zik7CisJCQl0ZXN0X21zID0gc3RydG91bGwoZW5kICsgMSwgJmVuZCwgMTApOworCQkJaWYgKCplbmQgIT0gJ1wwJykKKwkJCQlkaWUoImludmFsaWQgaW5wdXQ6ICclcydcbiIsIGxpbmUuYnVmKTsKKwkJCXByb2dyZXNzX3Rlc3RfbnMgPSB0ZXN0X21zICogMTAwMCAqIDEwMDA7CisJCQlkaXNwbGF5X3Rocm91Z2hwdXQocHJvZ3Jlc3MsIGJ5dGVfY291bnQpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobGluZS5idWYsICJ1cGRhdGUiKSkKKwkJCXByb2dyZXNzX3Rlc3RfZm9yY2VfdXBkYXRlKCk7CisJCWVsc2UKKwkJCWRpZSgiaW52YWxpZCBpbnB1dDogJyVzJ1xuIiwgbGluZS5idWYpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcmVhY2guYyBiL3QvaGVscGVyL3Rlc3QtcmVhY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDI3MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1yZWFjaC5jCkBAIC0wLDAgKzEsMTY4IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicmVmLWZpbHRlci5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAidGFnLmgiCisKK3N0YXRpYyB2b2lkIHByaW50X3NvcnRlZF9jb21taXRfaWRzKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzLCBvaWRfdG9faGV4KCZsaXN0LT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKworCXN0cmluZ19saXN0X3NvcnQoJnMpOworCisJZm9yIChpID0gMDsgaSA8IHMubnI7IGkrKykKKwkJcHJpbnRmKCIlc1xuIiwgcy5pdGVtc1tpXS5zdHJpbmcpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJnMsIDApOworfQorCitpbnQgY21kX19yZWFjaChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZF9BLCBvaWRfQjsKKwlzdHJ1Y3QgY29tbWl0ICpBLCAqQjsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKlgsICpZOworCXN0cnVjdCBvYmplY3RfYXJyYXkgWF9vYmogPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0ICoqWF9hcnJheSwgKipZX2FycmF5OworCWludCBYX25yLCBYX2FsbG9jLCBZX25yLCBZX2FsbG9jOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCWlmIChhYyA8IDIpCisJCWV4aXQoMSk7CisKKwlBID0gQiA9IE5VTEw7CisJWCA9IFkgPSBOVUxMOworCVhfbnIgPSBZX25yID0gMDsKKwlYX2FsbG9jID0gWV9hbGxvYyA9IDE2OworCUFMTE9DX0FSUkFZKFhfYXJyYXksIFhfYWxsb2MpOworCUFMTE9DX0FSUkFZKFlfYXJyYXksIFlfYWxsb2MpOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZidWYsIHN0ZGluKSAhPSBFT0YpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCXN0cnVjdCBvYmplY3QgKm9yaWc7CisJCXN0cnVjdCBvYmplY3QgKnBlZWxlZDsKKwkJc3RydWN0IGNvbW1pdCAqYzsKKwkJaWYgKGJ1Zi5sZW4gPCAzKQorCQkJY29udGludWU7CisKKwkJaWYgKGdldF9vaWRfY29tbWl0dGlzaChidWYuYnVmICsgMiwgJm9pZCkpCisJCQlkaWUoImZhaWxlZCB0byByZXNvbHZlICVzIiwgYnVmLmJ1ZiArIDIpOworCisJCW9yaWcgPSBwYXJzZV9vYmplY3QociwgJm9pZCk7CisJCXBlZWxlZCA9IGRlcmVmX3RhZ19ub3ZlcmlmeShvcmlnKTsKKworCQlpZiAoIXBlZWxlZCkKKwkJCWRpZSgiZmFpbGVkIHRvIGxvYWQgY29tbWl0IGZvciBpbnB1dCAlcyByZXN1bHRpbmcgaW4gb2lkICVzXG4iLAorCQkJICAgIGJ1Zi5idWYsIG9pZF90b19oZXgoJm9pZCkpOworCisJCWMgPSBvYmplY3RfYXNfdHlwZShyLCBwZWVsZWQsIE9CSl9DT01NSVQsIDApOworCisJCWlmICghYykKKwkJCWRpZSgiZmFpbGVkIHRvIGxvYWQgY29tbWl0IGZvciBpbnB1dCAlcyByZXN1bHRpbmcgaW4gb2lkICVzXG4iLAorCQkJICAgIGJ1Zi5idWYsIG9pZF90b19oZXgoJm9pZCkpOworCisJCXN3aXRjaCAoYnVmLmJ1ZlswXSkgeworCQkJY2FzZSAnQSc6CisJCQkJb2lkY3B5KCZvaWRfQSwgJm9pZCk7CisJCQkJQSA9IGM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ0InOgorCQkJCW9pZGNweSgmb2lkX0IsICZvaWQpOworCQkJCUIgPSBjOworCQkJCWJyZWFrOworCisJCQljYXNlICdYJzoKKwkJCQljb21taXRfbGlzdF9pbnNlcnQoYywgJlgpOworCQkJCUFMTE9DX0dST1coWF9hcnJheSwgWF9uciArIDEsIFhfYWxsb2MpOworCQkJCVhfYXJyYXlbWF9ucisrXSA9IGM7CisJCQkJYWRkX29iamVjdF9hcnJheShvcmlnLCBOVUxMLCAmWF9vYmopOworCQkJCWJyZWFrOworCisJCQljYXNlICdZJzoKKwkJCQljb21taXRfbGlzdF9pbnNlcnQoYywgJlkpOworCQkJCUFMTE9DX0dST1coWV9hcnJheSwgWV9uciArIDEsIFlfYWxsb2MpOworCQkJCVlfYXJyYXlbWV9ucisrXSA9IGM7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZGllKCJ1bmV4cGVjdGVkIHN0YXJ0IG9mIGxpbmU6ICVjIiwgYnVmLmJ1ZlswXSk7CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoIXN0cmNtcChhdlsxXSwgInJlZl9uZXdlciIpKQorCQlwcmludGYoIiVzKEEsQik6JWRcbiIsIGF2WzFdLCByZWZfbmV3ZXIoJm9pZF9BLCAmb2lkX0IpKTsKKwllbHNlIGlmICghc3RyY21wKGF2WzFdLCAiaW5fbWVyZ2VfYmFzZXMiKSkKKwkJcHJpbnRmKCIlcyhBLEIpOiVkXG4iLCBhdlsxXSwgaW5fbWVyZ2VfYmFzZXMoQSwgQikpOworCWVsc2UgaWYgKCFzdHJjbXAoYXZbMV0sICJpc19kZXNjZW5kYW50X29mIikpCisJCXByaW50ZigiJXMoQSxYKTolZFxuIiwgYXZbMV0sIGlzX2Rlc2NlbmRhbnRfb2YoQSwgWCkpOworCWVsc2UgaWYgKCFzdHJjbXAoYXZbMV0sICJnZXRfbWVyZ2VfYmFzZXNfbWFueSIpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IGdldF9tZXJnZV9iYXNlc19tYW55KEEsIFhfbnIsIFhfYXJyYXkpOworCQlwcmludGYoIiVzKEEsWCk6XG4iLCBhdlsxXSk7CisJCXByaW50X3NvcnRlZF9jb21taXRfaWRzKGxpc3QpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhdlsxXSwgInJlZHVjZV9oZWFkcyIpKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IHJlZHVjZV9oZWFkcyhYKTsKKwkJcHJpbnRmKCIlcyhYKTpcbiIsIGF2WzFdKTsKKwkJcHJpbnRfc29ydGVkX2NvbW1pdF9pZHMobGlzdCk7CisJfSBlbHNlIGlmICghc3RyY21wKGF2WzFdLCAiY2FuX2FsbF9mcm9tX3JlYWNoIikpIHsKKwkJcHJpbnRmKCIlcyhYLFkpOiVkXG4iLCBhdlsxXSwgY2FuX2FsbF9mcm9tX3JlYWNoKFgsIFksIDEpKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXZbMV0sICJjYW5fYWxsX2Zyb21fcmVhY2hfd2l0aF9mbGFnIikpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICppdGVyID0gWTsKKworCQl3aGlsZSAoaXRlcikgeworCQkJaXRlci0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IDI7CisJCQlpdGVyID0gaXRlci0+bmV4dDsKKwkJfQorCisJCXByaW50ZigiJXMoWCxfLF8sMCwwKTolZFxuIiwgYXZbMV0sIGNhbl9hbGxfZnJvbV9yZWFjaF93aXRoX2ZsYWcoJlhfb2JqLCAyLCA0LCAwLCAwKSk7CisJfSBlbHNlIGlmICghc3RyY21wKGF2WzFdLCAiY29tbWl0X2NvbnRhaW5zIikpIHsKKwkJc3RydWN0IHJlZl9maWx0ZXIgZmlsdGVyOworCQlzdHJ1Y3QgY29udGFpbnNfY2FjaGUgY2FjaGU7CisJCWluaXRfY29udGFpbnNfY2FjaGUoJmNhY2hlKTsKKworCQlpZiAoYWMgPiAyICYmICFzdHJjbXAoYXZbMl0sICItLXRhZyIpKQorCQkJZmlsdGVyLndpdGhfY29tbWl0X3RhZ19hbGdvID0gMTsKKwkJZWxzZQorCQkJZmlsdGVyLndpdGhfY29tbWl0X3RhZ19hbGdvID0gMDsKKworCQlwcmludGYoIiVzKF8sQSxYLF8pOiVkXG4iLCBhdlsxXSwgY29tbWl0X2NvbnRhaW5zKCZmaWx0ZXIsIEEsIFgsICZjYWNoZSkpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhdlsxXSwgImdldF9yZWFjaGFibGVfc3Vic2V0IikpIHsKKwkJY29uc3QgaW50IHJlYWNoYWJsZV9mbGFnID0gMTsKKwkJaW50IGksIGNvdW50ID0gMDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpjdXJyZW50OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBnZXRfcmVhY2hhYmxlX3N1YnNldChYX2FycmF5LCBYX25yLAorCQkJCQkJCQlZX2FycmF5LCBZX25yLAorCQkJCQkJCQlyZWFjaGFibGVfZmxhZyk7CisJCXByaW50ZigiZ2V0X3JlYWNoYWJsZV9zdWJzZXQoWCxZKVxuIik7CisJCWZvciAoY3VycmVudCA9IGxpc3Q7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KSB7CisJCQlpZiAoIShsaXN0LT5pdGVtLT5vYmplY3QuZmxhZ3MgJiByZWFjaGFibGVfZmxhZykpCisJCQkJZGllKF8oImNvbW1pdCAlcyBpcyBub3QgbWFya2VkIHJlYWNoYWJsZSIpLAorCQkJCSAgICBvaWRfdG9faGV4KCZsaXN0LT5pdGVtLT5vYmplY3Qub2lkKSk7CisJCQljb3VudCsrOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBZX25yOyBpKyspIHsKKwkJCWlmIChZX2FycmF5W2ldLT5vYmplY3QuZmxhZ3MgJiByZWFjaGFibGVfZmxhZykKKwkJCQljb3VudC0tOworCQl9CisKKwkJaWYgKGNvdW50IDwgMCkKKwkJCWRpZShfKCJ0b28gbWFueSBjb21taXRzIG1hcmtlZCByZWFjaGFibGUiKSk7CisKKwkJcHJpbnRfc29ydGVkX2NvbW1pdF9pZHMobGlzdCk7CisJfQorCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcmVhZC1jYWNoZS5jIGIvdC9oZWxwZXIvdGVzdC1yZWFkLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0OTc3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcmVhZC1jYWNoZS5jCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCitpbnQgY21kX19yZWFkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgY250ID0gMTsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKworCWlmIChhcmdjID4gMSAmJiBza2lwX3ByZWZpeChhcmd2WzFdLCAiLS1wcmludC1hbmQtcmVmcmVzaD0iLCAmbmFtZSkpIHsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJfQorCisJaWYgKGFyZ2MgPT0gMikKKwkJY250ID0gc3RydG9sKGFyZ3ZbMV0sIE5VTEwsIDApOworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCXJlYWRfY2FjaGUoKTsKKwkJaWYgKG5hbWUpIHsKKwkJCWludCBwb3M7CisKKwkJCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgUkVGUkVTSF9RVUlFVCwKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCXBvcyA9IGluZGV4X25hbWVfcG9zKCZ0aGVfaW5kZXgsIG5hbWUsIHN0cmxlbihuYW1lKSk7CisJCQlpZiAocG9zIDwgMCkKKwkJCQlkaWUoIiVzIG5vdCBpbiBpbmRleCIsIG5hbWUpOworCQkJcHJpbnRmKCIlcyBpcyVzIHVwIHRvIGRhdGVcbiIsIG5hbWUsCisJCQkgICAgICAgY2VfdXB0b2RhdGUodGhlX2luZGV4LmNhY2hlW3Bvc10pID8gIiIgOiAiIG5vdCIpOworCQkJd3JpdGVfZmlsZShuYW1lLCAiJWRcbiIsIGkpOworCQl9CisJCWRpc2NhcmRfY2FjaGUoKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYyBiL3QvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTQ2MTcKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJlYWQtZ3JhcGguYwpAQCAtMCwwICsxLDUzIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK2ludCBjbWRfX3JlYWRfZ3JhcGgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjb21taXRfZ3JhcGggKmdyYXBoID0gTlVMTDsKKwljaGFyICpncmFwaF9uYW1lOworCWludCBvcGVuX29rOworCWludCBmZDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCW9kYiA9IHRoZV9yZXBvc2l0b3J5LT5vYmplY3RzLT5vZGI7CisKKwlncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShvZGIpOworCisJb3Blbl9vayA9IG9wZW5fY29tbWl0X2dyYXBoKGdyYXBoX25hbWUsICZmZCwgJnN0KTsKKwlpZiAoIW9wZW5fb2spCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiBjb21taXQtZ3JhcGggJyVzJyIpLCBncmFwaF9uYW1lKTsKKworCWdyYXBoID0gbG9hZF9jb21taXRfZ3JhcGhfb25lX2ZkX3N0KGZkLCAmc3QsIG9kYik7CisJaWYgKCFncmFwaCkKKwkJcmV0dXJuIDE7CisKKwlGUkVFX0FORF9OVUxMKGdyYXBoX25hbWUpOworCisJcHJpbnRmKCJoZWFkZXI6ICUwOHggJWQgJWQgJWQgJWRcbiIsCisJCW50b2hsKCoodWludDMyX3QqKWdyYXBoLT5kYXRhKSwKKwkJKih1bnNpZ25lZCBjaGFyKikoZ3JhcGgtPmRhdGEgKyA0KSwKKwkJKih1bnNpZ25lZCBjaGFyKikoZ3JhcGgtPmRhdGEgKyA1KSwKKwkJKih1bnNpZ25lZCBjaGFyKikoZ3JhcGgtPmRhdGEgKyA2KSwKKwkJKih1bnNpZ25lZCBjaGFyKikoZ3JhcGgtPmRhdGEgKyA3KSk7CisJcHJpbnRmKCJudW1fY29tbWl0czogJXVcbiIsIGdyYXBoLT5udW1fY29tbWl0cyk7CisJcHJpbnRmKCJjaHVua3M6Iik7CisKKwlpZiAoZ3JhcGgtPmNodW5rX29pZF9mYW5vdXQpCisJCXByaW50ZigiIG9pZF9mYW5vdXQiKTsKKwlpZiAoZ3JhcGgtPmNodW5rX29pZF9sb29rdXApCisJCXByaW50ZigiIG9pZF9sb29rdXAiKTsKKwlpZiAoZ3JhcGgtPmNodW5rX2NvbW1pdF9kYXRhKQorCQlwcmludGYoIiBjb21taXRfbWV0YWRhdGEiKTsKKwlpZiAoZ3JhcGgtPmNodW5rX2V4dHJhX2VkZ2VzKQorCQlwcmludGYoIiBleHRyYV9lZGdlcyIpOworCXByaW50ZigiXG4iKTsKKworCVVOTEVBSyhncmFwaCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcmVhZC1taWR4LmMgYi90L2hlbHBlci90ZXN0LXJlYWQtbWlkeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWI1ODYKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJlYWQtbWlkeC5jCkBAIC0wLDAgKzEsNTEgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm1pZHguaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisKK3N0YXRpYyBpbnQgcmVhZF9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK3sKKwl1aW50MzJfdCBpOworCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptID0gbG9hZF9tdWx0aV9wYWNrX2luZGV4KG9iamVjdF9kaXIsIDEpOworCisJaWYgKCFtKQorCQlyZXR1cm4gMTsKKworCXByaW50ZigiaGVhZGVyOiAlMDh4ICVkICVkICVkXG4iLAorCSAgICAgICBtLT5zaWduYXR1cmUsCisJICAgICAgIG0tPnZlcnNpb24sCisJICAgICAgIG0tPm51bV9jaHVua3MsCisJICAgICAgIG0tPm51bV9wYWNrcyk7CisKKwlwcmludGYoImNodW5rczoiKTsKKworCWlmIChtLT5jaHVua19wYWNrX25hbWVzKQorCQlwcmludGYoIiBwYWNrLW5hbWVzIik7CisJaWYgKG0tPmNodW5rX29pZF9mYW5vdXQpCisJCXByaW50ZigiIG9pZC1mYW5vdXQiKTsKKwlpZiAobS0+Y2h1bmtfb2lkX2xvb2t1cCkKKwkJcHJpbnRmKCIgb2lkLWxvb2t1cCIpOworCWlmIChtLT5jaHVua19vYmplY3Rfb2Zmc2V0cykKKwkJcHJpbnRmKCIgb2JqZWN0LW9mZnNldHMiKTsKKwlpZiAobS0+Y2h1bmtfbGFyZ2Vfb2Zmc2V0cykKKwkJcHJpbnRmKCIgbGFyZ2Utb2Zmc2V0cyIpOworCisJcHJpbnRmKCJcbm51bV9vYmplY3RzOiAlZFxuIiwgbS0+bnVtX29iamVjdHMpOworCisJcHJpbnRmKCJwYWNrczpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fcGFja3M7IGkrKykKKwkJcHJpbnRmKCIlc1xuIiwgbS0+cGFja19uYW1lc1tpXSk7CisKKwlwcmludGYoIm9iamVjdC1kaXI6ICVzXG4iLCBtLT5vYmplY3RfZGlyKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX19yZWFkX21pZHgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjICE9IDIpCisJCXVzYWdlKCJyZWFkLW1pZHggPG9iamVjdC1kaXI+Iik7CisKKwlyZXR1cm4gcmVhZF9taWR4X2ZpbGUoYXJndlsxXSk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXJlZi1zdG9yZS5jIGIvdC9oZWxwZXIvdGVzdC1yZWYtc3RvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTlmYzAwCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1yZWYtc3RvcmUuYwpAQCAtMCwwICsxLDI5OSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqbm90bnVsbChjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFhcmcpCisJCWRpZSgiJXMgcmVxdWlyZWQiLCBuYW1lKTsKKwlyZXR1cm4gYXJnOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFyZ19mbGFncyhjb25zdCBjaGFyICphcmcsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGF0b2kobm90bnVsbChhcmcsIG5hbWUpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKipnZXRfc3RvcmUoY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCByZWZfc3RvcmUgKipyZWZzKQoreworCWNvbnN0IGNoYXIgKmdpdGRpcjsKKworCWlmICghYXJndlswXSkgeworCQlkaWUoInJlZiBzdG9yZSByZXF1aXJlZCIpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAibWFpbiIpKSB7CisJCSpyZWZzID0gZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZ3ZbMF0sICJzdWJtb2R1bGU6IiwgJmdpdGRpcikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlpbnQgcmV0OworCisJCXJldCA9IHN0cmJ1Zl9naXRfcGF0aF9zdWJtb2R1bGUoJnNiLCBnaXRkaXIsICJvYmplY3RzLyIpOworCQlpZiAocmV0KQorCQkJZGllKCJzdHJidWZfZ2l0X3BhdGhfc3VibW9kdWxlIGZhaWxlZDogJWQiLCByZXQpOworCQlhZGRfdG9fYWx0ZXJuYXRlc19tZW1vcnkoc2IuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCQkqcmVmcyA9IGdldF9zdWJtb2R1bGVfcmVmX3N0b3JlKGdpdGRpcik7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmd2WzBdLCAid29ya3RyZWU6IiwgJmdpdGRpcikpIHsKKwkJc3RydWN0IHdvcmt0cmVlICoqcCwgKip3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKDApOworCisJCWZvciAocCA9IHdvcmt0cmVlczsgKnA7IHArKykgeworCQkJc3RydWN0IHdvcmt0cmVlICp3dCA9ICpwOworCisJCQlpZiAoIXd0LT5pZCkgeworCQkJCS8qIHNwZWNpYWwgY2FzZSBmb3IgbWFpbiB3b3JrdHJlZSAqLworCQkJCWlmICghc3RyY21wKGdpdGRpciwgIm1haW4iKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoZ2l0ZGlyLCB3dC0+aWQpKQorCQkJCWJyZWFrOworCQl9CisJCWlmICghKnApCisJCQlkaWUoIm5vIHN1Y2ggd29ya3RyZWU6ICVzIiwgZ2l0ZGlyKTsKKworCQkqcmVmcyA9IGdldF93b3JrdHJlZV9yZWZfc3RvcmUoKnApOworCX0gZWxzZQorCQlkaWUoInVua25vd24gYmFja2VuZCAlcyIsIGFyZ3ZbMF0pOworCisJaWYgKCEqcmVmcykKKwkJZGllKCJubyByZWYgc3RvcmUiKTsKKworCS8qIGNvbnN1bWUgc3RvcmUtc3BlY2lmaWMgb3B0aW9uYWwgYXJndW1lbnRzIGlmIG5lZWRlZCAqLworCisJcmV0dXJuIGFyZ3YgKyAxOworfQorCisKK3N0YXRpYyBpbnQgY21kX3BhY2tfcmVmcyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBhcmdfZmxhZ3MoKmFyZ3YrKywgImZsYWdzIik7CisKKwlyZXR1cm4gcmVmc19wYWNrX3JlZnMocmVmcywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGNtZF9wZWVsX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpyZWZuYW1lID0gbm90bnVsbCgqYXJndisrLCAicmVmbmFtZSIpOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCByZXQ7CisKKwlyZXQgPSByZWZzX3BlZWxfcmVmKHJlZnMsIHJlZm5hbWUsICZvaWQpOworCWlmICghcmV0KQorCQlwdXRzKG9pZF90b19oZXgoJm9pZCkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21kX2NyZWF0ZV9zeW1yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKwljb25zdCBjaGFyICp0YXJnZXQgPSBub3RudWxsKCphcmd2KyssICJ0YXJnZXQiKTsKKwljb25zdCBjaGFyICpsb2dtc2cgPSAqYXJndisrOworCisJcmV0dXJuIHJlZnNfY3JlYXRlX3N5bXJlZihyZWZzLCByZWZuYW1lLCB0YXJnZXQsIGxvZ21zZyk7Cit9CisKK3N0YXRpYyBpbnQgY21kX2RlbGV0ZV9yZWZzKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IGFyZ19mbGFncygqYXJndisrLCAiZmxhZ3MiKTsKKwljb25zdCBjaGFyICptc2cgPSAqYXJndisrOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZuYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKKwl3aGlsZSAoKmFyZ3YpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmbmFtZXMsICphcmd2KyspOworCisJcmV0dXJuIHJlZnNfZGVsZXRlX3JlZnMocmVmcywgbXNnLCAmcmVmbmFtZXMsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjbWRfcmVuYW1lX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpvbGRyZWYgPSBub3RudWxsKCphcmd2KyssICJvbGRyZWYiKTsKKwljb25zdCBjaGFyICpuZXdyZWYgPSBub3RudWxsKCphcmd2KyssICJuZXdyZWYiKTsKKwljb25zdCBjaGFyICpsb2dtc2cgPSAqYXJndisrOworCisJcmV0dXJuIHJlZnNfcmVuYW1lX3JlZihyZWZzLCBvbGRyZWYsIG5ld3JlZiwgbG9nbXNnKTsKK30KKworc3RhdGljIGludCBlYWNoX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJcHJpbnRmKCIlcyAlcyAweCV4XG4iLCBvaWRfdG9faGV4KG9pZCksIHJlZm5hbWUsIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWRfZm9yX2VhY2hfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnByZWZpeCA9IG5vdG51bGwoKmFyZ3YrKywgInByZWZpeCIpOworCisJcmV0dXJuIHJlZnNfZm9yX2VhY2hfcmVmX2luKHJlZnMsIHByZWZpeCwgZWFjaF9yZWYsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGNtZF9yZXNvbHZlX3JlZihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpyZWZuYW1lID0gbm90bnVsbCgqYXJndisrLCAicmVmbmFtZSIpOworCWludCByZXNvbHZlX2ZsYWdzID0gYXJnX2ZsYWdzKCphcmd2KyssICJyZXNvbHZlLWZsYWdzIik7CisJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnJlZjsKKworCXJlZiA9IHJlZnNfcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZnMsIHJlZm5hbWUsIHJlc29sdmVfZmxhZ3MsCisJCQkJICAgICAgJm9pZCwgJmZsYWdzKTsKKwlwcmludGYoIiVzICVzIDB4JXhcbiIsIG9pZF90b19oZXgoJm9pZCksIHJlZiA/IHJlZiA6ICIobnVsbCkiLCBmbGFncyk7CisJcmV0dXJuIHJlZiA/IDAgOiAxOworfQorCitzdGF0aWMgaW50IGNtZF92ZXJpZnlfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSBub3RudWxsKCphcmd2KyssICJyZWZuYW1lIik7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVmc192ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUocmVmcywgcmVmbmFtZSwgTlVMTCwgTlVMTCwgJmVycik7CisJaWYgKGVyci5sZW4pCisJCXB1dHMoZXJyLmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWRfZm9yX2VhY2hfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZyhyZWZzLCBlYWNoX3JlZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgZWFjaF9yZWZsb2coc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmNvbW1pdHRlciwgdGltZXN0YW1wX3QgdGltZXN0YW1wLAorCQkgICAgICAgaW50IHR6LCBjb25zdCBjaGFyICptc2csIHZvaWQgKmNiX2RhdGEpCit7CisJcHJpbnRmKCIlcyAlcyAlcyAlIlBSSXRpbWUiICVkICVzXG4iLAorCSAgICAgICBvaWRfdG9faGV4KG9sZF9vaWQpLCBvaWRfdG9faGV4KG5ld19vaWQpLAorCSAgICAgICBjb21taXR0ZXIsIHRpbWVzdGFtcCwgdHosIG1zZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kX2Zvcl9lYWNoX3JlZmxvZ19lbnQoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnQocmVmcywgcmVmbmFtZSwgZWFjaF9yZWZsb2csIHJlZnMpOworfQorCitzdGF0aWMgaW50IGNtZF9mb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2Uoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKworCXJldHVybiByZWZzX2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShyZWZzLCByZWZuYW1lLCBlYWNoX3JlZmxvZywgcmVmcyk7Cit9CisKK3N0YXRpYyBpbnQgY21kX3JlZmxvZ19leGlzdHMoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKworCXJldHVybiAhcmVmc19yZWZsb2dfZXhpc3RzKHJlZnMsIHJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IGNtZF9jcmVhdGVfcmVmbG9nKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSBub3RudWxsKCphcmd2KyssICJyZWZuYW1lIik7CisJaW50IGZvcmNlX2NyZWF0ZSA9IGFyZ19mbGFncygqYXJndisrLCAiZm9yY2UtY3JlYXRlIik7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVmc19jcmVhdGVfcmVmbG9nKHJlZnMsIHJlZm5hbWUsIGZvcmNlX2NyZWF0ZSwgJmVycik7CisJaWYgKGVyci5sZW4pCisJCXB1dHMoZXJyLmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWRfZGVsZXRlX3JlZmxvZyhzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpyZWZuYW1lID0gbm90bnVsbCgqYXJndisrLCAicmVmbmFtZSIpOworCisJcmV0dXJuIHJlZnNfZGVsZXRlX3JlZmxvZyhyZWZzLCByZWZuYW1lKTsKK30KKworc3RhdGljIGludCBjbWRfcmVmbG9nX2V4cGlyZShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlkaWUoIm5vdCBzdXBwb3J0ZWQgeWV0Iik7Cit9CisKK3N0YXRpYyBpbnQgY21kX2RlbGV0ZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqbXNnID0gbm90bnVsbCgqYXJndisrLCAibXNnIik7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKwljb25zdCBjaGFyICpzaGExX2J1ZiA9IG5vdG51bGwoKmFyZ3YrKywgIm9sZC1zaGExIik7CisJdW5zaWduZWQgaW50IGZsYWdzID0gYXJnX2ZsYWdzKCphcmd2KyssICJmbGFncyIpOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKworCWlmIChnZXRfb2lkX2hleChzaGExX2J1ZiwgJm9sZF9vaWQpKQorCQlkaWUoIm5vdCBzaGEtMSIpOworCisJcmV0dXJuIHJlZnNfZGVsZXRlX3JlZihyZWZzLCBtc2csIHJlZm5hbWUsICZvbGRfb2lkLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgY21kX3VwZGF0ZV9yZWYoc3RydWN0IHJlZl9zdG9yZSAqcmVmcywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqbXNnID0gbm90bnVsbCgqYXJndisrLCAibXNnIik7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IG5vdG51bGwoKmFyZ3YrKywgInJlZm5hbWUiKTsKKwljb25zdCBjaGFyICpuZXdfc2hhMV9idWYgPSBub3RudWxsKCphcmd2KyssICJuZXctc2hhMSIpOworCWNvbnN0IGNoYXIgKm9sZF9zaGExX2J1ZiA9IG5vdG51bGwoKmFyZ3YrKywgIm9sZC1zaGExIik7CisJdW5zaWduZWQgaW50IGZsYWdzID0gYXJnX2ZsYWdzKCphcmd2KyssICJmbGFncyIpOworCXN0cnVjdCBvYmplY3RfaWQgb2xkX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG5ld19vaWQ7CisKKwlpZiAoZ2V0X29pZF9oZXgob2xkX3NoYTFfYnVmLCAmb2xkX29pZCkgfHwKKwkgICAgZ2V0X29pZF9oZXgobmV3X3NoYTFfYnVmLCAmbmV3X29pZCkpCisJCWRpZSgibm90IHNoYS0xIik7CisKKwlyZXR1cm4gcmVmc191cGRhdGVfcmVmKHJlZnMsIG1zZywgcmVmbmFtZSwKKwkJCSAgICAgICAmbmV3X29pZCwgJm9sZF9vaWQsCisJCQkgICAgICAgZmxhZ3MsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworfQorCitzdHJ1Y3QgY29tbWFuZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpmdW5jKShzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICoqYXJndik7Cit9OworCitzdGF0aWMgc3RydWN0IGNvbW1hbmQgY29tbWFuZHNbXSA9IHsKKwl7ICJwYWNrLXJlZnMiLCBjbWRfcGFja19yZWZzIH0sCisJeyAicGVlbC1yZWYiLCBjbWRfcGVlbF9yZWYgfSwKKwl7ICJjcmVhdGUtc3ltcmVmIiwgY21kX2NyZWF0ZV9zeW1yZWYgfSwKKwl7ICJkZWxldGUtcmVmcyIsIGNtZF9kZWxldGVfcmVmcyB9LAorCXsgInJlbmFtZS1yZWYiLCBjbWRfcmVuYW1lX3JlZiB9LAorCXsgImZvci1lYWNoLXJlZiIsIGNtZF9mb3JfZWFjaF9yZWYgfSwKKwl7ICJyZXNvbHZlLXJlZiIsIGNtZF9yZXNvbHZlX3JlZiB9LAorCXsgInZlcmlmeS1yZWYiLCBjbWRfdmVyaWZ5X3JlZiB9LAorCXsgImZvci1lYWNoLXJlZmxvZyIsIGNtZF9mb3JfZWFjaF9yZWZsb2cgfSwKKwl7ICJmb3ItZWFjaC1yZWZsb2ctZW50IiwgY21kX2Zvcl9lYWNoX3JlZmxvZ19lbnQgfSwKKwl7ICJmb3ItZWFjaC1yZWZsb2ctZW50LXJldmVyc2UiLCBjbWRfZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlIH0sCisJeyAicmVmbG9nLWV4aXN0cyIsIGNtZF9yZWZsb2dfZXhpc3RzIH0sCisJeyAiY3JlYXRlLXJlZmxvZyIsIGNtZF9jcmVhdGVfcmVmbG9nIH0sCisJeyAiZGVsZXRlLXJlZmxvZyIsIGNtZF9kZWxldGVfcmVmbG9nIH0sCisJeyAicmVmbG9nLWV4cGlyZSIsIGNtZF9yZWZsb2dfZXhwaXJlIH0sCisJLyoKKwkgKiBiYWNrZW5kIHRyYW5zYWN0aW9uIGZ1bmN0aW9ucyBjYW4ndCBiZSB0ZXN0ZWQgc2VwYXJhdGVseQorCSAqLworCXsgImRlbGV0ZS1yZWYiLCBjbWRfZGVsZXRlX3JlZiB9LAorCXsgInVwZGF0ZS1yZWYiLCBjbWRfdXBkYXRlX3JlZiB9LAorCXsgTlVMTCwgTlVMTCB9Cit9OworCitpbnQgY21kX19yZWZfc3RvcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCByZWZfc3RvcmUgKnJlZnM7CisJY29uc3QgY2hhciAqZnVuYzsKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJYXJndiA9IGdldF9zdG9yZShhcmd2ICsgMSwgJnJlZnMpOworCisJZnVuYyA9ICphcmd2Kys7CisJaWYgKCFmdW5jKQorCQlkaWUoInJlZiBmdW5jdGlvbiByZXF1aXJlZCIpOworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZC0+bmFtZTsgY21kKyspIHsKKwkJaWYgKCFzdHJjbXAoZnVuYywgY21kLT5uYW1lKSkKKwkJCXJldHVybiBjbWQtPmZ1bmMocmVmcywgYXJndik7CisJfQorCWRpZSgidW5rbm93biBmdW5jdGlvbiAlcyIsIGZ1bmMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1yZWdleC5jIGIvdC9oZWxwZXIvdGVzdC1yZWdleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjg0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJlZ2V4LmMKQEAgLTAsMCArMSw3NiBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKworc3RydWN0IHJlZ19mbGFnIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBmbGFnOworfTsKKworc3RhdGljIHN0cnVjdCByZWdfZmxhZyByZWdfZmxhZ3NbXSA9IHsKKwl7ICJFWFRFTkRFRCIsCSBSRUdfRVhURU5ERUQJfSwKKwl7ICJORVdMSU5FIiwJIFJFR19ORVdMSU5FCX0sCisJeyAiSUNBU0UiLAkgUkVHX0lDQVNFCX0sCisJeyAiTk9UQk9MIiwJIFJFR19OT1RCT0wJfSwKKyNpZmRlZiBSRUdfU1RBUlRFTkQKKwl7ICJTVEFSVEVORCIsCSBSRUdfU1RBUlRFTkQJfSwKKyNlbmRpZgorCXsgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgaW50IHRlc3RfcmVnZXhfYnVnKHZvaWQpCit7CisJY2hhciAqcGF0ID0gIltePXt9IFx0XSsiOworCWNoYXIgKnN0ciA9ICI9e31cbmZyZWQiOworCXJlZ2V4X3QgcjsKKwlyZWdtYXRjaF90IG1bMV07CisKKwlpZiAocmVnY29tcCgmciwgcGF0LCBSRUdfRVhURU5ERUQgfCBSRUdfTkVXTElORSkpCisJCWRpZSgiZmFpbGVkIHJlZ2NvbXAoKSBmb3IgcGF0dGVybiAnJXMnIiwgcGF0KTsKKwlpZiAocmVnZXhlYygmciwgc3RyLCAxLCBtLCAwKSkKKwkJZGllKCJubyBtYXRjaCBvZiBwYXR0ZXJuICclcycgdG8gc3RyaW5nICclcyciLCBwYXQsIHN0cik7CisKKwkvKiBodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTM5NTcgICovCisJaWYgKG1bMF0ucm1fc28gPT0gMykgLyogbWF0Y2hlcyAnXG4nIHdoZW4gaXQgc2hvdWxkIG5vdCAqLworCQlkaWUoInJlZ2V4IGJ1ZyBjb25maXJtZWQ6IHJlLWJ1aWxkIGdpdCB3aXRoIE5PX1JFR0VYPTEiKTsKKworCXJldHVybiAwOworfQorCitpbnQgY21kX19yZWdleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcGF0OworCWNvbnN0IGNoYXIgKnN0cjsKKwlpbnQgZmxhZ3MgPSAwOworCXJlZ2V4X3QgcjsKKwlyZWdtYXRjaF90IG1bMV07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi0tYnVnIikpCisJCXJldHVybiB0ZXN0X3JlZ2V4X2J1ZygpOworCWVsc2UgaWYgKGFyZ2MgPCAzKQorCQl1c2FnZSgidGVzdC10b29sIHJlZ2V4IC0tYnVnXG4iCisJCSAgICAgICJ0ZXN0LXRvb2wgcmVnZXggPHBhdHRlcm4+IDxzdHJpbmc+IFs8b3B0aW9ucz5dIik7CisKKwlhcmd2Kys7CisJcGF0ID0gKmFyZ3YrKzsKKwlzdHIgPSAqYXJndisrOworCXdoaWxlICgqYXJndikgeworCQlzdHJ1Y3QgcmVnX2ZsYWcgKnJmOworCQlmb3IgKHJmID0gcmVnX2ZsYWdzOyByZi0+bmFtZTsgcmYrKykKKwkJCWlmICghc3RyY21wKCphcmd2LCByZi0+bmFtZSkpIHsKKwkJCQlmbGFncyB8PSByZi0+ZmxhZzsKKwkJCQlicmVhazsKKwkJCX0KKwkJaWYgKCFyZi0+bmFtZSkKKwkJCWRpZSgiZG8gbm90IHJlY29nbml6ZSAlcyIsICphcmd2KTsKKwkJYXJndisrOworCX0KKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJaWYgKHJlZ2NvbXAoJnIsIHBhdCwgZmxhZ3MpKQorCQlkaWUoImZhaWxlZCByZWdjb21wKCkgZm9yIHBhdHRlcm4gJyVzJyIsIHBhdCk7CisJaWYgKHJlZ2V4ZWMoJnIsIHN0ciwgMSwgbSwgMCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXJlcG9zaXRvcnkuYyBiL3QvaGVscGVyL3Rlc3QtcmVwb3NpdG9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3Zjg2MTgKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJlcG9zaXRvcnkuYwpAQCAtMCwwICsxLDk4IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAidHJlZS5oIgorCitzdGF0aWMgdm9pZCB0ZXN0X3BhcnNlX2NvbW1pdF9pbl9ncmFwaChjb25zdCBjaGFyICpnaXRkaXIsIGNvbnN0IGNoYXIgKndvcmt0cmVlLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkKQoreworCXN0cnVjdCByZXBvc2l0b3J5IHI7CisJc3RydWN0IGNvbW1pdCAqYzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKworCXNldHVwX2dpdF9lbnYoZ2l0ZGlyKTsKKworCW1lbXNldCh0aGVfcmVwb3NpdG9yeSwgMCwgc2l6ZW9mKCp0aGVfcmVwb3NpdG9yeSkpOworCisJLyogVE9ETzogTmVlZGVkIGZvciB0ZW1wb3JhcnkgaGFjayBpbiBoYXNoY21wLCBzZWUgMTgzYTYzOGI3ZGEuICovCisJcmVwb19zZXRfaGFzaF9hbGdvKHRoZV9yZXBvc2l0b3J5LCBHSVRfSEFTSF9TSEExKTsKKworCWlmIChyZXBvX2luaXQoJnIsIGdpdGRpciwgd29ya3RyZWUpKQorCQlkaWUoIkNvdWxkbid0IGluaXQgcmVwbyIpOworCisJYyA9IGxvb2t1cF9jb21taXQoJnIsIGNvbW1pdF9vaWQpOworCisJaWYgKCFwYXJzZV9jb21taXRfaW5fZ3JhcGgoJnIsIGMpKQorCQlkaWUoIkNvdWxkbid0IHBhcnNlIGNvbW1pdCIpOworCisJcHJpbnRmKCIlIlBSSXRpbWUsIGMtPmRhdGUpOworCWZvciAocGFyZW50ID0gYy0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpCisJCXByaW50ZigiICVzIiwgb2lkX3RvX2hleCgmcGFyZW50LT5pdGVtLT5vYmplY3Qub2lkKSk7CisJcHJpbnRmKCJcbiIpOworCisJcmVwb19jbGVhcigmcik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoKGNvbnN0IGNoYXIgKmdpdGRpciwKKwkJCQkJICBjb25zdCBjaGFyICp3b3JrdHJlZSwKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkKQoreworCXN0cnVjdCByZXBvc2l0b3J5IHI7CisJc3RydWN0IGNvbW1pdCAqYzsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKworCXNldHVwX2dpdF9lbnYoZ2l0ZGlyKTsKKworCW1lbXNldCh0aGVfcmVwb3NpdG9yeSwgMCwgc2l6ZW9mKCp0aGVfcmVwb3NpdG9yeSkpOworCisJLyogVE9ETzogTmVlZGVkIGZvciB0ZW1wb3JhcnkgaGFjayBpbiBoYXNoY21wLCBzZWUgMTgzYTYzOGI3ZGEuICovCisJcmVwb19zZXRfaGFzaF9hbGdvKHRoZV9yZXBvc2l0b3J5LCBHSVRfSEFTSF9TSEExKTsKKworCWlmIChyZXBvX2luaXQoJnIsIGdpdGRpciwgd29ya3RyZWUpKQorCQlkaWUoIkNvdWxkbid0IGluaXQgcmVwbyIpOworCisJYyA9IGxvb2t1cF9jb21taXQoJnIsIGNvbW1pdF9vaWQpOworCisJLyoKKwkgKiBnZXRfY29tbWl0X3RyZWVfaW5fZ3JhcGggZG9lcyBub3QgYXV0b21hdGljYWxseSBwYXJzZSB0aGUgY29tbWl0LCBzbworCSAqIHBhcnNlIGl0IGZpcnN0LgorCSAqLworCWlmICghcGFyc2VfY29tbWl0X2luX2dyYXBoKCZyLCBjKSkKKwkJZGllKCJDb3VsZG4ndCBwYXJzZSBjb21taXQiKTsKKwl0cmVlID0gZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoKCZyLCBjKTsKKwlpZiAoIXRyZWUpCisJCWRpZSgiQ291bGRuJ3QgZ2V0IGNvbW1pdCB0cmVlIik7CisKKwlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KCZ0cmVlLT5vYmplY3Qub2lkKSk7CisKKwlyZXBvX2NsZWFyKCZyKTsKK30KKworaW50IGNtZF9fcmVwb3NpdG9yeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MgPCAyKQorCQlkaWUoIm11c3QgaGF2ZSBhdCBsZWFzdCAyIGFyZ3VtZW50cyIpOworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJwYXJzZV9jb21taXRfaW5fZ3JhcGgiKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJaWYgKGFyZ2MgPCA1KQorCQkJZGllKCJub3QgZW5vdWdoIGFyZ3VtZW50cyIpOworCQlpZiAocGFyc2Vfb2lkX2hleChhcmd2WzRdLCAmb2lkLCAmYXJndls0XSkpCisJCQlkaWUoImNhbm5vdCBwYXJzZSBvaWQgJyVzJyIsIGFyZ3ZbNF0pOworCQl0ZXN0X3BhcnNlX2NvbW1pdF9pbl9ncmFwaChhcmd2WzJdLCBhcmd2WzNdLCAmb2lkKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImdldF9jb21taXRfdHJlZV9pbl9ncmFwaCIpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpZiAoYXJnYyA8IDUpCisJCQlkaWUoIm5vdCBlbm91Z2ggYXJndW1lbnRzIik7CisJCWlmIChwYXJzZV9vaWRfaGV4KGFyZ3ZbNF0sICZvaWQsICZhcmd2WzRdKSkKKwkJCWRpZSgiY2Fubm90IHBhcnNlIG9pZCAnJXMnIiwgYXJndls0XSk7CisJCXRlc3RfZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoKGFyZ3ZbMl0sIGFyZ3ZbM10sICZvaWQpOworCX0gZWxzZSB7CisJCWRpZSgidW5yZWNvZ25pemVkICclcyciLCBhcmd2WzFdKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXJldmlzaW9uLXdhbGtpbmcuYyBiL3QvaGVscGVyL3Rlc3QtcmV2aXNpb24td2Fsa2luZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWIyZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXJldmlzaW9uLXdhbGtpbmcuYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogdGVzdC1yZXZpc2lvbi13YWxraW5nLmM6IHRlc3QgcmV2aXNpb24gd2Fsa2luZyBBUEkuCisgKgorICogKEMpIDIwMTIgSGVpa28gVm9pZ3QgPGh2b2lndEBodm9pZ3QubmV0PgorICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisKK3N0YXRpYyB2b2lkIHByaW50X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJY3R4LmRhdGVfbW9kZS50eXBlID0gREFURV9OT1JNQUw7CisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiAlbSAlcyIsICZzYiwgJmN0eCk7CisJcHJpbnRmKCIlc1xuIiwgc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgaW50IHJ1bl9yZXZpc2lvbl93YWxrKHZvaWQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwsICItLWFsbCIsIE5VTEx9OworCWludCBhcmdjID0gQVJSQVlfU0laRShhcmd2KSAtIDE7CisJaW50IGdvdF9yZXZpc2lvbiA9IDA7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBOVUxMKTsKKwlzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2KSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldikpICE9IE5VTEwpIHsKKwkJcHJpbnRfY29tbWl0KGNvbW1pdCk7CisJCWdvdF9yZXZpc2lvbiA9IDE7CisJfQorCisJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCXJldHVybiBnb3RfcmV2aXNpb247Cit9CisKK2ludCBjbWRfX3JldmlzaW9uX3dhbGtpbmcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjIDwgMikKKwkJcmV0dXJuIDE7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAicnVuLXR3aWNlIikpIHsKKwkJcHJpbnRmKCIxc3RcbiIpOworCQlpZiAoIXJ1bl9yZXZpc2lvbl93YWxrKCkpCisJCQlyZXR1cm4gMTsKKwkJcHJpbnRmKCIybmRcbiIpOworCQlpZiAoIXJ1bl9yZXZpc2lvbl93YWxrKCkpCisJCQlyZXR1cm4gMTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgImNoZWNrIHVzYWdlXG4iKTsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcnVuLWNvbW1hbmQuYyBiL3QvaGVscGVyL3Rlc3QtcnVuLWNvbW1hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjQ2YWEyCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1ydW4tY29tbWFuZC5jCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogdGVzdC1ydW4tY29tbWFuZC5jOiB0ZXN0IHJ1biBjb21tYW5kIEFQSS4KKyAqCisgKiAoQykgMjAwOSBJbGFyaSBMaXVzdmFhcmEgPGlsYXJpLmxpdXN2YWFyYUBlbGlzYW5ldC5maT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorI2luY2x1ZGUgIndpbGRtYXRjaC5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBpbnQgbnVtYmVyX2NhbGxiYWNrczsKK3N0YXRpYyBpbnQgcGFyYWxsZWxfbmV4dChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY3AsCisJCQkgc3RydWN0IHN0cmJ1ZiAqZXJyLAorCQkJIHZvaWQgKmNiLAorCQkJIHZvaWQgKip0YXNrX2NiKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpkID0gY2I7CisJaWYgKG51bWJlcl9jYWxsYmFja3MgPj0gNCkKKwkJcmV0dXJuIDA7CisKKwlhcmd2X2FycmF5X3B1c2h2KCZjcC0+YXJncywgZC0+YXJndik7CisJc3RyYnVmX2FkZHN0cihlcnIsICJwcmVsb2FkZWQgb3V0cHV0IG9mIGEgY2hpbGRcbiIpOworCW51bWJlcl9jYWxsYmFja3MrKzsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBub19qb2Ioc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNwLAorCQkgIHN0cnVjdCBzdHJidWYgKmVyciwKKwkJICB2b2lkICpjYiwKKwkJICB2b2lkICoqdGFza19jYikKK3sKKwlzdHJidWZfYWRkc3RyKGVyciwgIm5vIGZ1cnRoZXIgam9icyBhdmFpbGFibGVcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRhc2tfZmluaXNoZWQoaW50IHJlc3VsdCwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICplcnIsCisJCQkgdm9pZCAqcHBfY2IsCisJCQkgdm9pZCAqcHBfdGFza19jYikKK3sKKwlzdHJidWZfYWRkc3RyKGVyciwgImFza2luZyBmb3IgYSBxdWljayBzdG9wXG4iKTsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IHRlc3RzdWl0ZSB7CisJc3RydWN0IHN0cmluZ19saXN0IHRlc3RzLCBmYWlsZWQ7CisJaW50IG5leHQ7CisJaW50IHF1aWV0LCBpbW1lZGlhdGUsIHZlcmJvc2UsIHZlcmJvc2VfbG9nLCB0cmFjZSwgd3JpdGVfanVuaXRfeG1sOworfTsKKyNkZWZpbmUgVEVTVFNVSVRFX0lOSVQgXAorCXsgU1RSSU5HX0xJU1RfSU5JVF9EVVAsIFNUUklOR19MSVNUX0lOSVRfRFVQLCAtMSwgMCwgMCwgMCwgMCwgMCwgMCB9CisKK3N0YXRpYyBpbnQgbmV4dF90ZXN0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjcCwgc3RydWN0IHN0cmJ1ZiAqZXJyLCB2b2lkICpjYiwKKwkJICAgICB2b2lkICoqdGFza19jYikKK3sKKwlzdHJ1Y3QgdGVzdHN1aXRlICpzdWl0ZSA9IGNiOworCWNvbnN0IGNoYXIgKnRlc3Q7CisJaWYgKHN1aXRlLT5uZXh0ID49IHN1aXRlLT50ZXN0cy5ucikKKwkJcmV0dXJuIDA7CisKKwl0ZXN0ID0gc3VpdGUtPnRlc3RzLml0ZW1zW3N1aXRlLT5uZXh0KytdLnN0cmluZzsKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC0+YXJncywgInNoIiwgdGVzdCwgTlVMTCk7CisJaWYgKHN1aXRlLT5xdWlldCkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgIi0tcXVpZXQiKTsKKwlpZiAoc3VpdGUtPmltbWVkaWF0ZSkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgIi1pIik7CisJaWYgKHN1aXRlLT52ZXJib3NlKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCAiLXYiKTsKKwlpZiAoc3VpdGUtPnZlcmJvc2VfbG9nKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCAiLVYiKTsKKwlpZiAoc3VpdGUtPnRyYWNlKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLT5hcmdzLCAiLXgiKTsKKwlpZiAoc3VpdGUtPndyaXRlX2p1bml0X3htbCkKKwkJYXJndl9hcnJheV9wdXNoKCZjcC0+YXJncywgIi0td3JpdGUtanVuaXQteG1sIik7CisKKwlzdHJidWZfYWRkZihlcnIsICJPdXRwdXQgb2YgJyVzJzpcbiIsIHRlc3QpOworCSp0YXNrX2NiID0gKHZvaWQgKil0ZXN0OworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9maW5pc2hlZChpbnQgcmVzdWx0LCBzdHJ1Y3Qgc3RyYnVmICplcnIsIHZvaWQgKmNiLAorCQkJIHZvaWQgKnRhc2tfY2IpCit7CisJc3RydWN0IHRlc3RzdWl0ZSAqc3VpdGUgPSBjYjsKKwljb25zdCBjaGFyICpuYW1lID0gKGNvbnN0IGNoYXIgKil0YXNrX2NiOworCisJaWYgKHJlc3VsdCkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdWl0ZS0+ZmFpbGVkLCBuYW1lKTsKKworCXN0cmJ1Zl9hZGRmKGVyciwgIiVzOiAnJXMnXG4iLCByZXN1bHQgPyAiRkFJTCIgOiAiU1VDQ0VTUyIsIG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9mYWlsZWQoc3RydWN0IHN0cmJ1ZiAqb3V0LCB2b2lkICpjYiwgdm9pZCAqdGFza19jYikKK3sKKwlzdHJ1Y3QgdGVzdHN1aXRlICpzdWl0ZSA9IGNiOworCWNvbnN0IGNoYXIgKm5hbWUgPSAoY29uc3QgY2hhciAqKXRhc2tfY2I7CisKKwlzdHJpbmdfbGlzdF9hcHBlbmQoJnN1aXRlLT5mYWlsZWQsIG5hbWUpOworCXN0cmJ1Zl9hZGRmKG91dCwgIkZBSUxFRCBUTyBTVEFSVDogJyVzJ1xuIiwgbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXN0c3VpdGVfdXNhZ2VbXSA9IHsKKwkidGVzdC1ydW4tY29tbWFuZCB0ZXN0c3VpdGUgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPi4uLl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgdGVzdHN1aXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdGVzdHN1aXRlIHN1aXRlID0gVEVTVFNVSVRFX0lOSVQ7CisJaW50IG1heF9qb2JzID0gMSwgaSwgcmV0OworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmQ7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdpJywgImltbWVkaWF0ZSIsICZzdWl0ZS5pbW1lZGlhdGUsCisJCQkgInN0b3AgYXQgZmlyc3QgZmFpbGVkIHRlc3QgY2FzZShzKSIpLAorCQlPUFRfSU5URUdFUignaicsICJqb2JzIiwgJm1heF9qb2JzLCAicnVuIDxOPiBqb2JzIGluIHBhcmFsbGVsIiksCisJCU9QVF9CT09MKCdxJywgInF1aWV0IiwgJnN1aXRlLnF1aWV0LCAiYmUgdGVyc2UiKSwKKwkJT1BUX0JPT0woJ3YnLCAidmVyYm9zZSIsICZzdWl0ZS52ZXJib3NlLCAiYmUgdmVyYm9zZSIpLAorCQlPUFRfQk9PTCgnVicsICJ2ZXJib3NlLWxvZyIsICZzdWl0ZS52ZXJib3NlX2xvZywKKwkJCSAiYmUgdmVyYm9zZSwgcmVkaXJlY3RlZCB0byBhIGZpbGUiKSwKKwkJT1BUX0JPT0woJ3gnLCAidHJhY2UiLCAmc3VpdGUudHJhY2UsICJ0cmFjZSBzaGVsbCBjb21tYW5kcyIpLAorCQlPUFRfQk9PTCgwLCAid3JpdGUtanVuaXQteG1sIiwgJnN1aXRlLndyaXRlX2p1bml0X3htbCwKKwkJCSAid3JpdGUgSlVuaXQtc3R5bGUgWE1MIGZpbGVzIiksCisJCU9QVF9FTkQoKQorCX07CisKKwltZW1zZXQoJnN1aXRlLCAwLCBzaXplb2Yoc3VpdGUpKTsKKwlzdWl0ZS50ZXN0cy5zdHJkdXBfc3RyaW5ncyA9IHN1aXRlLmZhaWxlZC5zdHJkdXBfc3RyaW5ncyA9IDE7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLAorCQkJdGVzdHN1aXRlX3VzYWdlLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKworCWlmIChtYXhfam9icyA8PSAwKQorCQltYXhfam9icyA9IG9ubGluZV9jcHVzKCk7CisKKwlkaXIgPSBvcGVuZGlyKCIuIik7CisJaWYgKCFkaXIpCisJCWRpZSgiQ291bGQgbm90IG9wZW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5Iik7CisJd2hpbGUgKChkID0gcmVhZGRpcihkaXIpKSkgeworCQljb25zdCBjaGFyICpwID0gZC0+ZF9uYW1lOworCisJCWlmICgqcCAhPSAndCcgfHwgIWlzZGlnaXQocFsxXSkgfHwgIWlzZGlnaXQocFsyXSkgfHwKKwkJICAgICFpc2RpZ2l0KHBbM10pIHx8ICFpc2RpZ2l0KHBbNF0pIHx8IHBbNV0gIT0gJy0nIHx8CisJCSAgICAhZW5kc193aXRoKHAsICIuc2giKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE5vIHBhdHRlcm46IG1hdGNoIGFsbCAqLworCQlpZiAoIWFyZ2MpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3VpdGUudGVzdHMsIHApOworCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorCQkJaWYgKCF3aWxkbWF0Y2goYXJndltpXSwgcCwgMCkpIHsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN1aXRlLnRlc3RzLCBwKTsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisJY2xvc2VkaXIoZGlyKTsKKworCWlmICghc3VpdGUudGVzdHMubnIpCisJCWRpZSgiTm8gdGVzdHMgbWF0Y2ghIik7CisJaWYgKG1heF9qb2JzID4gc3VpdGUudGVzdHMubnIpCisJCW1heF9qb2JzID0gc3VpdGUudGVzdHMubnI7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlJ1bm5pbmcgJWQgdGVzdHMgKCVkIGF0IGEgdGltZSlcbiIsCisJCXN1aXRlLnRlc3RzLm5yLCBtYXhfam9icyk7CisKKwlyZXQgPSBydW5fcHJvY2Vzc2VzX3BhcmFsbGVsKG1heF9qb2JzLCBuZXh0X3Rlc3QsIHRlc3RfZmFpbGVkLAorCQkJCSAgICAgdGVzdF9maW5pc2hlZCwgJnN1aXRlKTsKKworCWlmIChzdWl0ZS5mYWlsZWQubnIgPiAwKSB7CisJCXJldCA9IDE7CisJCWZwcmludGYoc3RkZXJyLCAiJWQgdGVzdHMgZmFpbGVkOlxuXG4iLCBzdWl0ZS5mYWlsZWQubnIpOworCQlmb3IgKGkgPSAwOyBpIDwgc3VpdGUuZmFpbGVkLm5yOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcbiIsIHN1aXRlLmZhaWxlZC5pdGVtc1tpXS5zdHJpbmcpOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZzdWl0ZS50ZXN0cywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN1aXRlLmZhaWxlZCwgMCk7CisKKwlyZXR1cm4gISFyZXQ7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBteV9yYW5kb21fbmV4dCA9IDEyMzQ7CisKK3N0YXRpYyB1aW50NjRfdCBteV9yYW5kb20odm9pZCkKK3sKKwl1aW50NjRfdCByZXMgPSBteV9yYW5kb21fbmV4dDsKKwlteV9yYW5kb21fbmV4dCA9IG15X3JhbmRvbV9uZXh0ICogMTEwMzUxNTI0NSArIDEyMzQ1OworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgcXVvdGVfc3RyZXNzX3Rlc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCS8qCisJICogV2UgYXJlIHJ1bm5pbmcgYSBxdW90ZS1zdHJlc3MgdGVzdC4KKwkgKiBzcGF3biBhIHN1YnByb2Nlc3MgdGhhdCBydW5zIHF1b3RlLXN0cmVzcyB3aXRoIGEKKwkgKiBzcGVjaWFsIG9wdGlvbiB0aGF0IGVjaG9lcyBiYWNrIHRoZSBhcmd1bWVudHMgdGhhdAorCSAqIHdlcmUgcGFzc2VkIGluLgorCSAqLworCWNoYXIgc3BlY2lhbFtdID0gIi4/KlxcXl9cIidge30oKVtdPD5AfiYrOjskJSI7IC8vIFx0XHJcblxhIjsKKwlpbnQgaSwgaiwgaywgdHJpYWxzID0gMTAwLCBza2lwID0gMCwgbXN5czIgPSAwOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0lOVEVHRVIoJ24nLCAidHJpYWxzIiwgJnRyaWFscywgIk51bWJlciBvZiB0cmlhbHMiKSwKKwkJT1BUX0lOVEVHRVIoJ3MnLCAic2tpcCIsICZza2lwLCAiU2tpcCA8bj4gdHJpYWxzIiksCisJCU9QVF9CT09MKCdtJywgIm1zeXMyIiwgJm1zeXMyLCAiVGVzdCBxdW90aW5nIGZvciBNU1lTMidzIHNoIiksCisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlW10gPSB7CisJCSJ0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgcXVvdGUtc3RyZXNzLXRlc3QgPG9wdGlvbnM+IiwKKwkJTlVMTAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZSwgMCk7CisKKwlzZXRlbnYoIk1TWVNfTk9fUEFUSENPTlYiLCAiMSIsIDApOworCisJZm9yIChpID0gMDsgaSA8IHRyaWFsczsgaSsrKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQlzaXplX3QgYXJnX2NvdW50LCBhcmdfb2Zmc2V0OworCQlpbnQgcmV0ID0gMDsKKworCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwkJaWYgKG1zeXMyKQorCQkJYXJndl9hcnJheV9wdXNobCgmYXJncywgInNoIiwgIi1jIiwKKwkJCQkJICJwcmludGYgJXNcXFxcMCBcIiRAXCIiLCAic2tpcCIsIE5VTEwpOworCQllbHNlCisJCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAidGVzdC10b29sIiwgInJ1bi1jb21tYW5kIiwKKwkJCQkJICJxdW90ZS1lY2hvIiwgTlVMTCk7CisJCWFyZ19vZmZzZXQgPSBhcmdzLmFyZ2M7CisKKwkJaWYgKGFyZ2MgPiAwKSB7CisJCQl0cmlhbHMgPSAxOworCQkJYXJnX2NvdW50ID0gYXJnYzsKKwkJCWZvciAoaiA9IDA7IGogPCBhcmdfY291bnQ7IGorKykKKwkJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIGFyZ3Zbal0pOworCQl9IGVsc2UgeworCQkJYXJnX2NvdW50ID0gMSArIChteV9yYW5kb20oKSAlIDUpOworCQkJZm9yIChqID0gMDsgaiA8IGFyZ19jb3VudDsgaisrKSB7CisJCQkJY2hhciBidWZbMjBdOworCQkJCXNpemVfdCBtaW5fbGVuID0gMTsKKwkJCQlzaXplX3QgYXJnX2xlbiA9IG1pbl9sZW4gKworCQkJCQkobXlfcmFuZG9tKCkgJSAoQVJSQVlfU0laRShidWYpIC0gbWluX2xlbikpOworCisJCQkJZm9yIChrID0gMDsgayA8IGFyZ19sZW47IGsrKykKKwkJCQkJYnVmW2tdID0gc3BlY2lhbFtteV9yYW5kb20oKSAlCisJCQkJCQlBUlJBWV9TSVpFKHNwZWNpYWwpXTsKKwkJCQlidWZbYXJnX2xlbl0gPSAnXDAnOworCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBidWYpOworCQkJfQorCQl9CisKKwkJaWYgKGkgPCBza2lwKQorCQkJY29udGludWU7CisKKwkJY3AuYXJndiA9IGFyZ3MuYXJndjsKKwkJc3RyYnVmX3Jlc2V0KCZvdXQpOworCQlpZiAocGlwZV9jb21tYW5kKCZjcCwgTlVMTCwgMCwgJm91dCwgMCwgTlVMTCwgMCkgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJGYWlsZWQgdG8gc3Bhd24gY2hpbGQgcHJvY2VzcyIpOworCisJCWZvciAoaiA9IDAsIGsgPSAwOyBqIDwgYXJnX2NvdW50OyBqKyspIHsKKwkJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3MuYXJndltqICsgYXJnX29mZnNldF07CisKKwkJCWlmIChzdHJjbXAoYXJnLCBvdXQuYnVmICsgaykpCisJCQkJcmV0ID0gZXJyb3IoImluY29ycmVjdGx5IHF1b3RlZCBhcmc6ICclcycsICIKKwkJCQkJICAgICJlY2hvZWQgYmFjayBhcyAnJXMnIiwKKwkJCQkJICAgICBhcmcsIG91dC5idWYgKyBrKTsKKwkJCWsgKz0gc3RybGVuKG91dC5idWYgKyBrKSArIDE7CisJCX0KKworCQlpZiAoayAhPSBvdXQubGVuKQorCQkJcmV0ID0gZXJyb3IoImdvdCAlZCBieXRlcywgYnV0IGNvbnN1bWVkIG9ubHkgJWQiLAorCQkJCSAgICAgKGludClvdXQubGVuLCAoaW50KWspOworCisJCWlmIChyZXQpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVHJpYWwgIyVkIGZhaWxlZC4gQXJndW1lbnRzOlxuIiwgaSk7CisJCQlmb3IgKGogPSAwOyBqIDwgYXJnX2NvdW50OyBqKyspCisJCQkJZnByaW50ZihzdGRlcnIsICJhcmcgIyVkOiAnJXMnXG4iLAorCQkJCQkoaW50KWosIGFyZ3MuYXJndltqICsgYXJnX29mZnNldF0pOworCisJCQlzdHJidWZfcmVsZWFzZSgmb3V0KTsKKwkJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaWYgKGkgJiYgKGkgJSAxMDApID09IDApCisJCQlmcHJpbnRmKHN0ZGVyciwgIlRyaWFscyBjb21wbGV0ZWQ6ICVkXG4iLCAoaW50KWkpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXVvdGVfZWNobyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJd2hpbGUgKGFyZ2MgPiAxKSB7CisJCWZ3cml0ZShhcmd2WzFdLCBzdHJsZW4oYXJndlsxXSksIDEsIHN0ZG91dCk7CisJCWZwdXRjKCdcMCcsIHN0ZG91dCk7CisJCWFyZ3YrKzsKKwkJYXJnYy0tOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaGVyaXRfaGFuZGxlKGNvbnN0IGNoYXIgKmFyZ3YwKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJaW50IHRtcDsKKworCS8qIEZpcnN0LCBvcGVuIGFuIGluaGVyaXRhYmxlIGhhbmRsZSAqLworCXhzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICJvdXQtWFhYWFhYIik7CisJdG1wID0geG1rc3RlbXAocGF0aCk7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLAorCQkJICJ0ZXN0LXRvb2wiLCBhcmd2MCwgImluaGVyaXRlZC1oYW5kbGUtY2hpbGQiLCBOVUxMKTsKKwljcC5pbiA9IC0xOworCWNwLm5vX3N0ZG91dCA9IGNwLm5vX3N0ZGVyciA9IDE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSA8IDApCisJCWRpZSgiQ291bGQgbm90IHN0YXJ0IGNoaWxkIHByb2Nlc3MiKTsKKworCS8qIFRoZW4gY2xvc2UgaXQsIGFuZCB0cnkgdG8gZGVsZXRlIGl0LiAqLworCWNsb3NlKHRtcCk7CisJaWYgKHVubGluayhwYXRoKSkKKwkJZGllKCJDb3VsZCBub3QgZGVsZXRlICclcyciLCBwYXRoKTsKKworCWlmIChjbG9zZShjcC5pbikgPCAwIHx8IGZpbmlzaF9jb21tYW5kKCZjcCkgPCAwKQorCQlkaWUoIkNoaWxkIGRpZCBub3QgZmluaXNoIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbmhlcml0X2hhbmRsZV9jaGlsZCh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMCkgPCAwKQorCQlkaWUoIkNvdWxkIG5vdCByZWFkIHN0ZGluIik7CisJcHJpbnRmKCJSZWNlaXZlZCAlc1xuIiwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9fcnVuX2NvbW1hbmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGpvYnM7CisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAidGVzdHN1aXRlIikpCisJCWV4aXQodGVzdHN1aXRlKGFyZ2MgLSAxLCBhcmd2ICsgMSkpOworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJpbmhlcml0ZWQtaGFuZGxlIikpCisJCWV4aXQoaW5oZXJpdF9oYW5kbGUoYXJndlswXSkpOworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJpbmhlcml0ZWQtaGFuZGxlLWNoaWxkIikpCisJCWV4aXQoaW5oZXJpdF9oYW5kbGVfY2hpbGQoKSk7CisKKwlpZiAoYXJnYyA+PSAyICYmICFzdHJjbXAoYXJndlsxXSwgInF1b3RlLXN0cmVzcy10ZXN0IikpCisJCXJldHVybiAhIXF1b3RlX3N0cmVzc190ZXN0KGFyZ2MgLSAxLCBhcmd2ICsgMSk7CisKKwlpZiAoYXJnYyA+PSAyICYmICFzdHJjbXAoYXJndlsxXSwgInF1b3RlLWVjaG8iKSkKKwkJcmV0dXJuICEhcXVvdGVfZWNobyhhcmdjIC0gMSwgYXJndiArIDEpOworCisJaWYgKGFyZ2MgPCAzKQorCQlyZXR1cm4gMTsKKwl3aGlsZSAoIXN0cmNtcChhcmd2WzFdLCAiZW52IikpIHsKKwkJaWYgKCFhcmd2WzJdKQorCQkJZGllKCJlbnYgc3BlY2lmaWVyIHdpdGhvdXQgYSB2YWx1ZSIpOworCQlhcmd2X2FycmF5X3B1c2goJnByb2MuZW52X2FycmF5LCBhcmd2WzJdKTsKKwkJYXJndiArPSAyOworCQlhcmdjIC09IDI7CisJfQorCWlmIChhcmdjIDwgMykKKwkJcmV0dXJuIDE7CisJcHJvYy5hcmd2ID0gKGNvbnN0IGNoYXIgKiopYXJndiArIDI7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAic3RhcnQtY29tbWFuZC1FTk9FTlQiKSkgeworCQlpZiAoc3RhcnRfY29tbWFuZCgmcHJvYykgPCAwICYmIGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybiAwOworCQlmcHJpbnRmKHN0ZGVyciwgIkZBSUwgJXNcbiIsIGFyZ3ZbMV0pOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInJ1bi1jb21tYW5kIikpCisJCWV4aXQocnVuX2NvbW1hbmQoJnByb2MpKTsKKworCWpvYnMgPSBhdG9pKGFyZ3ZbMl0pOworCXByb2MuYXJndiA9IChjb25zdCBjaGFyICoqKWFyZ3YgKyAzOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgInJ1bi1jb21tYW5kLXBhcmFsbGVsIikpCisJCWV4aXQocnVuX3Byb2Nlc3Nlc19wYXJhbGxlbChqb2JzLCBwYXJhbGxlbF9uZXh0LAorCQkJCQkgICAgTlVMTCwgTlVMTCwgJnByb2MpKTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJydW4tY29tbWFuZC1hYm9ydCIpKQorCQlleGl0KHJ1bl9wcm9jZXNzZXNfcGFyYWxsZWwoam9icywgcGFyYWxsZWxfbmV4dCwKKwkJCQkJICAgIE5VTEwsIHRhc2tfZmluaXNoZWQsICZwcm9jKSk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAicnVuLWNvbW1hbmQtbm8tam9icyIpKQorCQlleGl0KHJ1bl9wcm9jZXNzZXNfcGFyYWxsZWwoam9icywgbm9fam9iLAorCQkJCQkgICAgTlVMTCwgdGFza19maW5pc2hlZCwgJnByb2MpKTsKKworCWZwcmludGYoc3RkZXJyLCAiY2hlY2sgdXNhZ2VcbiIpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zY3JhcC1jYWNoZS10cmVlLmMgYi90L2hlbHBlci90ZXN0LXNjcmFwLWNhY2hlLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTNmMTYwCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1zY3JhcC1jYWNoZS10cmVlLmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorCitpbnQgY21kX19zY3JhcF9jYWNoZV90cmVlKGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jayA9IExPQ0tfSU5JVDsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgTE9DS19ESUVfT05fRVJST1IpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKTsKKwlhY3RpdmVfY2FjaGVfdHJlZSA9IE5VTEw7CisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgQ09NTUlUX0xPQ0spKQorCQlkaWUoInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXNlcnZlLXYyLmMgYi90L2hlbHBlci90ZXN0LXNlcnZlLXYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlMzVlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtc2VydmUtdjIuYwpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic2VydmUuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBzZXJ2ZV91c2FnZVtdID0geworCU5fKCJ0ZXN0LXRvb2wgc2VydmUtdjIgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitpbnQgY21kX19zZXJ2ZV92MihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHNlcnZlX29wdGlvbnMgb3B0cyA9IFNFUlZFX09QVElPTlNfSU5JVDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAic3RhdGVsZXNzLXJwYyIsICZvcHRzLnN0YXRlbGVzc19ycGMsCisJCQkgTl8oInF1aXQgYWZ0ZXIgYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSIpKSwKKwkJT1BUX0JPT0woMCwgImFkdmVydGlzZS1jYXBhYmlsaXRpZXMiLCAmb3B0cy5hZHZlcnRpc2VfY2FwYWJpbGl0aWVzLAorCQkJIE5fKCJleGl0IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmVydGlzaW5nIGNhcGFiaWxpdGllcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyICpwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwkvKiBpZ25vcmUgYWxsIHVua25vd24gY21kbGluZSBzd2l0Y2hlcyBmb3Igbm93ICovCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBzZXJ2ZV91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKTsKKwlzZXJ2ZSgmb3B0cyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc2hhMS1hcnJheS5jIGIvdC9oZWxwZXIvdGVzdC1zaGExLWFycmF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1ZTY5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtc2hhMS1hcnJheS5jCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKworc3RhdGljIGludCBwcmludF9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCB2b2lkICpkYXRhKQoreworCXB1dHMob2lkX3RvX2hleChvaWQpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9fc2hhMV9hcnJheShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IG9pZF9hcnJheSBhcnJheSA9IE9JRF9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBzdGRpbikgIT0gRU9GKSB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJaWYgKHNraXBfcHJlZml4KGxpbmUuYnVmLCAiYXBwZW5kICIsICZhcmcpKSB7CisJCQlpZiAoZ2V0X29pZF9oZXgoYXJnLCAmb2lkKSkKKwkJCQlkaWUoIm5vdCBhIGhleGFkZWNpbWFsIFNIQTE6ICVzIiwgYXJnKTsKKwkJCW9pZF9hcnJheV9hcHBlbmQoJmFycmF5LCAmb2lkKTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChsaW5lLmJ1ZiwgImxvb2t1cCAiLCAmYXJnKSkgeworCQkJaWYgKGdldF9vaWRfaGV4KGFyZywgJm9pZCkpCisJCQkJZGllKCJub3QgYSBoZXhhZGVjaW1hbCBTSEExOiAlcyIsIGFyZyk7CisJCQlwcmludGYoIiVkXG4iLCBvaWRfYXJyYXlfbG9va3VwKCZhcnJheSwgJm9pZCkpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobGluZS5idWYsICJjbGVhciIpKQorCQkJb2lkX2FycmF5X2NsZWFyKCZhcnJheSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobGluZS5idWYsICJmb3JfZWFjaF91bmlxdWUiKSkKKwkJCW9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoJmFycmF5LCBwcmludF9vaWQsIE5VTEwpOworCQllbHNlCisJCQlkaWUoInVua25vd24gY29tbWFuZDogJXMiLCBsaW5lLmJ1Zik7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zaGExLmMgYi90L2hlbHBlci90ZXN0LXNoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODYwYzM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1zaGExLmMKQEAgLTAsMCArMSw3IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGNtZF9fc2hhMShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKK3sKKwlyZXR1cm4gY21kX2hhc2hfaW1wbChhYywgYXYsIEdJVF9IQVNIX1NIQTEpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zaGExLnNoIGIvdC9oZWxwZXIvdGVzdC1zaGExLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0NTk0ODgKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXNoYTEuc2gKQEAgLTAsMCArMSw4MyBAQAorIyEvYmluL3NoCisKK2RkIGlmPS9kZXYvemVybyBicz0xMDQ4NTc2IGNvdW50PTEwMCAyPi9kZXYvbnVsbCB8CisvdXNyL2Jpbi90aW1lIHQvaGVscGVyL3Rlc3QtdG9vbCBzaGExID4vZGV2L251bGwKKword2hpbGUgcmVhZCBleHBlY3QgY250IHBmeAorZG8KKwljYXNlICIkZXhwZWN0IiBpbiAnIycqKSBjb250aW51ZSA7OyBlc2FjCisJYWN0dWFsPSQoCisJCXsKKwkJCXRlc3QgLXogIiRwZngiIHx8IGVjaG8gIiRwZngiCisJCQlkZCBpZj0vZGV2L3plcm8gYnM9MTA0ODU3NiBjb3VudD0kY250IDI+L2Rldi9udWxsIHwKKwkJCXBlcmwgLXBlICd5L1wwMDAvZy8nCisJCX0gfCAuL3QvaGVscGVyL3Rlc3QtdG9vbCBzaGExICRjbnQKKwkpCisJaWYgdGVzdCAiJGV4cGVjdCIgPSAiJGFjdHVhbCIKKwl0aGVuCisJCWVjaG8gIk9LOiAkZXhwZWN0ICRjbnQgJHBmeCIKKwllbHNlCisJCWVjaG8gPiYyICJPT1BTOiAkY250IgorCQllY2hvID4mMiAiZXhwZWN0OiAkZXhwZWN0IgorCQllY2hvID4mMiAiYWN0dWFsOiAkYWN0dWFsIgorCQlleGl0IDEKKwlmaQorZG9uZSA8PEVPRgorZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSAwCiszZjc4Njg1MGUzODc1NTBmZGFiODM2ZWQ3ZTZkYzg4MWRlMjMwMDFiIDAgYQorNTI3N2NiYjQ1YTE1OTAyMTM3ZDMzMmQ5N2U4OWNmODEzNjU0NTQ4NSAwIGFiCiswM2NmZDc0MzY2MWYwNzk3NWZhMmYxMjIwYzUxOTRjYmFmZjQ4NDUxIDAgYWJjCiszMzMwYjQzNzM2NDBmOWU0NjA0OTkxZTczYzdlODZiZmQ4ZGEyZGMzIDAgYWJjZAorZWMxMTMxMjM4NmFkNTYxNjc0ZjcyNGI4Y2NhN2NmMTc5NmUyNmQxZCAwIGFiY2RlCitiZGMzN2MwNzRlYzRlZTYwNTBkNjhiYzEzM2M2YjkxMmYzNjQ3NGRmIDAgYWJjZGVmCis2OWJjYTk5YjkyMzg1OWYyZGM0ODZiNTViODdmNDk2ODliNzM1OGM3IDAgYWJjZGVmZworZTQxNGFmNzE2MWM5NTU0MDg5ZjQxMDZkNmYxNzk3ZWYxNGE3MzY2NiAwIGFiY2RlZmdoCiswNzA3ZjI5NzAwNDNmOWY3YzIyMDI5NDgyZGIyNzczM2RlYWVjMDI5IDAgYWJjZGVmZ2hpCithNGRkOGFhNzRhNTYzNjcyOGZlNTI0NTE2MzZlMmUxNzcyNjAzM2FhIDEKKzk5ODZiNDVlMmY0ZDcwODYzNzI1MzNiYjY5NTNhODY1MmZhMzY0NGEgMSBmcm90egorMjNkOGQ0Zjc4OGU4NTI2YjQ4Nzc1NDhhMzI1Nzc1NDNjYmFhZjUxZiAxMAorOGNkMjNmODIyYWI0NGM3ZjQ4MWI4YzkyZDU5MWY2ZDFmY2FkNDMxYyAxMCBmcm90egorZjNiNTYwNGE0ZTYwNDg5OWMxMjMzZWRiM2JmMWNjMGVkZTRkOGMzMiA1MTIKK2IwOTViZDgzN2EzNzE1OTMwNDgxMzZlNDI5ZTlhYzRiNDc2ZTFiYjMgNTEyIGZyb3R6CiswOGZhODFkNjE5MDk0OGRlNWNjY2EzOTY2MzQwY2M0OGMxMGNjZWFjIDEyMDAgeHl6enkKK2UzM2EyOTFmNDJjMzBhMTU5NzMzZGQ5OGI4YjNlNGZmMzQxNThjYTAgNDA5MCA0RworI2EzYmY3ODNiYzIwY2FhOTU4ZjZjYjI0ZGQxNDBhN2IyMTk4NDgzOGQgOTk5OSBuaXRmb2wKK0VPRgorCitleGl0CisKKyMgZ2VuZXJhdGluZyB0ZXN0IHZlY3RvcnMKKyMgaW5wdXRzIGFyZSBudW1iZXIgb2YgbWVnYWJ5dGVzIGZvbGxvd2VkIGJ5IHNvbWUgcmFuZG9tIHN0cmluZyB0byBwcmVmaXguCisKK3doaWxlIHJlYWQgY250IHBmeAorZG8KKwlhY3R1YWw9JCgKKwkJeworCQkJdGVzdCAteiAiJHBmeCIgfHwgZWNobyAiJHBmeCIKKwkJCWRkIGlmPS9kZXYvemVybyBicz0xMDQ4NTc2IGNvdW50PSRjbnQgMj4vZGV2L251bGwgfAorCQkJcGVybCAtcGUgJ3kvXDAwMC9nLycKKwkJfSB8IHNoYTFzdW0gfAorCQlzZWQgLWUgJ3MvIC4qLy8nCisJKQorCWVjaG8gIiRhY3R1YWwgJGNudCAkcGZ4IgorZG9uZSA8PEVPRgorMAorMCBhCiswIGFiCiswIGFiYworMCBhYmNkCiswIGFiY2RlCiswIGFiY2RlZgorMCBhYmNkZWZnCiswIGFiY2RlZmdoCiswIGFiY2RlZmdoaQorMQorMSBmcm90egorMTAKKzEwIGZyb3R6Cis1MTIKKzUxMiBmcm90egorMTIwMCB4eXp6eQorNDA5MCA0RworOTk5OSBuaXRmb2wKK0VPRgpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zaGEyNTYuYyBiL3QvaGVscGVyL3Rlc3Qtc2hhMjU2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjNmE5OQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtc2hhMjU2LmMKQEAgLTAsMCArMSw3IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGNtZF9fc2hhMjU2KGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXJldHVybiBjbWRfaGFzaF9pbXBsKGFjLCBhdiwgR0lUX0hBU0hfU0hBMjU2KTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc2lnY2hhaW4uYyBiL3QvaGVscGVyL3Rlc3Qtc2lnY2hhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDEzYmNjCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1zaWdjaGFpbi5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKKyNkZWZpbmUgWChmKSBcCitzdGF0aWMgdm9pZCBmKGludCBzaWcpIHsgXAorCXB1dHMoI2YpOyBcCisJZmZsdXNoKHN0ZG91dCk7IFwKKwlzaWdjaGFpbl9wb3Aoc2lnKTsgXAorCXJhaXNlKHNpZyk7IFwKK30KK1gob25lKQorWCh0d28pCitYKHRocmVlKQorI3VuZGVmIFgKKworaW50IGNtZF9fc2lnY2hhaW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXNpZ2NoYWluX3B1c2goU0lHVEVSTSwgb25lKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1RFUk0sIHR3byk7CisJc2lnY2hhaW5fcHVzaChTSUdURVJNLCB0aHJlZSk7CisJcmFpc2UoU0lHVEVSTSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXN0cmNtcC1vZmZzZXQuYyBiL3QvaGVscGVyL3Rlc3Qtc3RyY21wLW9mZnNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTRhNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXN0cmNtcC1vZmZzZXQuYwpAQCAtMCwwICsxLDIzIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGNtZF9fc3RyY21wX29mZnNldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IHJlc3VsdDsKKwlzaXplX3Qgb2Zmc2V0OworCisJaWYgKCFhcmd2WzFdIHx8ICFhcmd2WzJdKQorCQlkaWUoInVzYWdlOiAlcyA8c3RyaW5nMT4gPHN0cmluZzI+IiwgYXJndlswXSk7CisKKwlyZXN1bHQgPSBzdHJjbXBfb2Zmc2V0KGFyZ3ZbMV0sIGFyZ3ZbMl0sICZvZmZzZXQpOworCisJLyoKKwkgKiBCZWNhdXNlIGRpZmZlcmVudCBDUlRzIGJlaGF2ZSBkaWZmZXJlbnRseSwgb25seSByZWx5IG9uIHNpZ25zCisJICogb2YgdGhlIHJlc3VsdCB2YWx1ZXMuCisJICovCisJcmVzdWx0ID0gKHJlc3VsdCA8IDAgPyAtMSA6CisJCQkgIHJlc3VsdCA+IDAgPyAxIDoKKwkJCSAgMCk7CisJcHJpbnRmKCIlZCAlIlBSSXVNQVgiXG4iLCByZXN1bHQsICh1aW50bWF4X3Qpb2Zmc2V0KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtc3RyaW5nLWxpc3QuYyBiL3QvaGVscGVyL3Rlc3Qtc3RyaW5nLWxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIzZGRhCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1zdHJpbmctbGlzdC5jCkBAIC0wLDAgKzEsMTI5IEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCisvKgorICogUGFyc2UgYW4gYXJndW1lbnQgaW50byBhIHN0cmluZyBsaXN0LiAgYXJnIHNob3VsZCBlaXRoZXIgYmUgYQorICogJzonLXNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MsIG9yICItIiB0byBpbmRpY2F0ZSBhbiBlbXB0eSBzdHJpbmcKKyAqIGxpc3QgKGFzIG9wcG9zZWQgdG8gIiIsIHdoaWNoIGluZGljYXRlcyBhIHN0cmluZyBsaXN0IGNvbnRhaW5pbmcgYQorICogc2luZ2xlIGVtcHR5IHN0cmluZykuICBsaXN0LT5zdHJkdXBfc3RyaW5ncyBtdXN0IGJlIHNldC4KKyAqLworc3RhdGljIHZvaWQgcGFyc2Vfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFzdHJjbXAoYXJnLCAiLSIpKQorCQlyZXR1cm47CisKKwkodm9pZClzdHJpbmdfbGlzdF9zcGxpdChsaXN0LCBhcmcsICc6JywgLTEpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9saXN0KGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJcHJpbnRmKCJbJWRdOiBcIiVzXCJcbiIsIGksIGxpc3QtPml0ZW1zW2ldLnN0cmluZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2xpc3RfY29tcGFjdChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGk7CisJaWYgKCFsaXN0LT5ucikKKwkJcHJpbnRmKCItXG4iKTsKKwllbHNlIHsKKwkJcHJpbnRmKCIlcyIsIGxpc3QtPml0ZW1zWzBdLnN0cmluZyk7CisJCWZvciAoaSA9IDE7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJcHJpbnRmKCI6JXMiLCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQlwcmludGYoIlxuIik7CisJfQorfQorCitzdGF0aWMgaW50IHByZWZpeF9jYihzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwljb25zdCBjaGFyICpwcmVmaXggPSAoY29uc3QgY2hhciAqKWNiX2RhdGE7CisJcmV0dXJuIHN0YXJ0c193aXRoKGl0ZW0tPnN0cmluZywgcHJlZml4KTsKK30KKworaW50IGNtZF9fc3RyaW5nX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjID09IDUgJiYgIXN0cmNtcChhcmd2WzFdLCAic3BsaXQiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQlpbnQgaTsKKwkJY29uc3QgY2hhciAqcyA9IGFyZ3ZbMl07CisJCWludCBkZWxpbSA9ICphcmd2WzNdOworCQlpbnQgbWF4c3BsaXQgPSBhdG9pKGFyZ3ZbNF0pOworCisJCWkgPSBzdHJpbmdfbGlzdF9zcGxpdCgmbGlzdCwgcywgZGVsaW0sIG1heHNwbGl0KTsKKwkJcHJpbnRmKCIlZFxuIiwgaSk7CisJCXdyaXRlX2xpc3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDUgJiYgIXN0cmNtcChhcmd2WzFdLCAic3BsaXRfaW5fcGxhY2UiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJCWludCBpOworCQljaGFyICpzID0geHN0cmR1cChhcmd2WzJdKTsKKwkJaW50IGRlbGltID0gKmFyZ3ZbM107CisJCWludCBtYXhzcGxpdCA9IGF0b2koYXJndls0XSk7CisKKwkJaSA9IHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCZsaXN0LCBzLCBkZWxpbSwgbWF4c3BsaXQpOworCQlwcmludGYoIiVkXG4iLCBpKTsKKwkJd3JpdGVfbGlzdCgmbGlzdCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJZnJlZShzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gNCAmJiAhc3RyY21wKGFyZ3ZbMV0sICJmaWx0ZXIiKSkgeworCQkvKgorCQkgKiBSZXRhaW4gb25seSB0aGUgaXRlbXMgdGhhdCBoYXZlIHRoZSBzcGVjaWZpZWQgcHJlZml4LgorCQkgKiBBcmd1bWVudHM6IGxpc3R8LSBwcmVmaXgKKwkJICovCisJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9IGFyZ3ZbM107CisKKwkJcGFyc2Vfc3RyaW5nX2xpc3QoJmxpc3QsIGFyZ3ZbMl0pOworCQlmaWx0ZXJfc3RyaW5nX2xpc3QoJmxpc3QsIDAsIHByZWZpeF9jYiwgKHZvaWQgKilwcmVmaXgpOworCQl3cml0ZV9saXN0X2NvbXBhY3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAicmVtb3ZlX2R1cGxpY2F0ZXMiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJCXBhcnNlX3N0cmluZ19saXN0KCZsaXN0LCBhcmd2WzJdKTsKKwkJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJmxpc3QsIDApOworCQl3cml0ZV9saXN0X2NvbXBhY3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAic29ydCIpKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlzdHJidWZfcmVhZCgmc2IsIDAsIDApOworCisJCS8qCisJCSAqIFNwbGl0IGJ5IG5ld2xpbmUsIGJ1dCBkb24ndCBjcmVhdGUgYSBzdHJpbmdfbGlzdCBpdGVtCisJCSAqIGZvciB0aGUgZW1wdHkgc3RyaW5nIGFmdGVyIHRoZSBsYXN0IHNlcGFyYXRvci4KKwkJICovCisJCWlmIChzYi5sZW4gJiYgc2IuYnVmW3NiLmxlbiAtIDFdID09ICdcbicpCisJCQlzdHJidWZfc2V0bGVuKCZzYiwgc2IubGVuIC0gMSk7CisJCXN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCZsaXN0LCBzYi5idWYsICdcbicsIC0xKTsKKworCQlzdHJpbmdfbGlzdF9zb3J0KCZsaXN0KTsKKworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZsaXN0KQorCQkJcHV0cyhpdGVtLT5zdHJpbmcpOworCisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBmdW5jdGlvbiBuYW1lOiAlc1xuIiwgYXJndlswXSwKKwkJYXJndlsxXSA/IGFyZ3ZbMV0gOiAiKHRoZXJlIHdhcyBub25lKSIpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1zdWJtb2R1bGUtY29uZmlnLmMgYi90L2hlbHBlci90ZXN0LXN1Ym1vZHVsZS1jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjY5Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1zdWJtb2R1bGUtY29uZmlnLmMKQEAgLTAsMCArMSw3MyBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorCitzdGF0aWMgdm9pZCBkaWVfdXNhZ2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICptc2cpCit7CisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbPGNvbW1pdD4gPHN1Ym1vZHVsZXBhdGg+XSAuLi5cbiIsIGFyZ3ZbMF0pOworCWV4aXQoMSk7Cit9CisKK2ludCBjbWRfX3N1Ym1vZHVsZV9jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKiphcmcgPSBhcmd2OworCWludCBteV9hcmdjID0gYXJnYzsKKwlpbnQgb3V0cHV0X3VybCA9IDA7CisJaW50IGxvb2t1cF9uYW1lID0gMDsKKworCWFyZysrOworCW15X2FyZ2MtLTsKKwl3aGlsZSAoYXJnWzBdICYmIHN0YXJ0c193aXRoKGFyZ1swXSwgIi0tIikpIHsKKwkJaWYgKCFzdHJjbXAoYXJnWzBdLCAiLS11cmwiKSkKKwkJCW91dHB1dF91cmwgPSAxOworCQlpZiAoIXN0cmNtcChhcmdbMF0sICItLW5hbWUiKSkKKwkJCWxvb2t1cF9uYW1lID0gMTsKKwkJYXJnKys7CisJCW15X2FyZ2MtLTsKKwl9CisKKwlpZiAobXlfYXJnYyAlIDIgIT0gMCkKKwkJZGllX3VzYWdlKGFyZ2MsIGFyZ3YsICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiIpOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJd2hpbGUgKCphcmcpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBjb21taXRfb2lkOworCQljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGU7CisJCWNvbnN0IGNoYXIgKmNvbW1pdDsKKwkJY29uc3QgY2hhciAqcGF0aF9vcl9uYW1lOworCisJCWNvbW1pdCA9IGFyZ1swXTsKKwkJcGF0aF9vcl9uYW1lID0gYXJnWzFdOworCisJCWlmIChjb21taXRbMF0gPT0gJ1wwJykKKwkJCW9pZGNscigmY29tbWl0X29pZCk7CisJCWVsc2UgaWYgKGdldF9vaWQoY29tbWl0LCAmY29tbWl0X29pZCkgPCAwKQorCQkJZGllX3VzYWdlKGFyZ2MsIGFyZ3YsICJDb21taXQgbm90IGZvdW5kLiIpOworCisJCWlmIChsb29rdXBfbmFtZSkgeworCQkJc3VibW9kdWxlID0gc3VibW9kdWxlX2Zyb21fbmFtZSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkmY29tbWl0X29pZCwgcGF0aF9vcl9uYW1lKTsKKwkJfSBlbHNlCisJCQlzdWJtb2R1bGUgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJCSZjb21taXRfb2lkLCBwYXRoX29yX25hbWUpOworCQlpZiAoIXN1Ym1vZHVsZSkKKwkJCWRpZV91c2FnZShhcmdjLCBhcmd2LCAiU3VibW9kdWxlIG5vdCBmb3VuZC4iKTsKKworCQlpZiAob3V0cHV0X3VybCkKKwkJCXByaW50ZigiU3VibW9kdWxlIHVybDogJyVzJyBmb3IgcGF0aCAnJXMnXG4iLAorCQkJCQlzdWJtb2R1bGUtPnVybCwgc3VibW9kdWxlLT5wYXRoKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJTdWJtb2R1bGUgbmFtZTogJyVzJyBmb3IgcGF0aCAnJXMnXG4iLAorCQkJCQlzdWJtb2R1bGUtPm5hbWUsIHN1Ym1vZHVsZS0+cGF0aCk7CisKKwkJYXJnICs9IDI7CisJfQorCisJc3VibW9kdWxlX2ZyZWUodGhlX3JlcG9zaXRvcnkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXN1Ym1vZHVsZS1uZXN0ZWQtcmVwby1jb25maWcuYyBiL3QvaGVscGVyL3Rlc3Qtc3VibW9kdWxlLW5lc3RlZC1yZXBvLWNvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOTc5MjkKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXN1Ym1vZHVsZS1uZXN0ZWQtcmVwby1jb25maWcuYwpAQCAtMCwwICsxLDMyIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorCitzdGF0aWMgdm9pZCBkaWVfdXNhZ2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICptc2cpCit7CisJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8c3VibW9kdWxlcGF0aD4gPGNvbmZpZyBuYW1lPlxuIiwgYXJndlswXSk7CisJZXhpdCgxKTsKK30KKworaW50IGNtZF9fc3VibW9kdWxlX25lc3RlZF9yZXBvX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgc3VicmVwbzsKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CisKKwlpZiAoYXJnYyA8IDMpCisJCWRpZV91c2FnZShhcmdjLCBhcmd2LCAiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCXN1YiA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgodGhlX3JlcG9zaXRvcnksICZudWxsX29pZCwgYXJndlsxXSk7CisJaWYgKHJlcG9fc3VibW9kdWxlX2luaXQoJnN1YnJlcG8sIHRoZV9yZXBvc2l0b3J5LCBzdWIpKSB7CisJCWRpZV91c2FnZShhcmdjLCBhcmd2LCAiU3VibW9kdWxlIG5vdCBmb3VuZC4iKTsKKwl9CisKKwkvKiBSZWFkIHRoZSBjb25maWcgb2YgX2NoaWxkXyBzdWJtb2R1bGVzLiAqLworCXByaW50X2NvbmZpZ19mcm9tX2dpdG1vZHVsZXMoJnN1YnJlcG8sIGFyZ3ZbMl0pOworCisJc3VibW9kdWxlX2ZyZWUodGhlX3JlcG9zaXRvcnkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXN1YnByb2Nlc3MuYyBiL3QvaGVscGVyL3Rlc3Qtc3VicHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjY5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXN1YnByb2Nlc3MuYwpAQCAtMCwwICsxLDIwIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCitpbnQgY21kX19zdWJwcm9jZXNzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgbm9naXQgPSAwOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vZ2l0KTsKKwlpZiAobm9naXQpCisJCWRpZSgiTm8gZ2l0IHJlcG8gZm91bmQiKTsKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcChhcmd2WzFdLCAiLS1zZXR1cC13b3JrLXRyZWUiKSkgeworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJYXJndisrOworCX0KKwljcC5naXRfY21kID0gMTsKKwljcC5hcmd2ID0gKGNvbnN0IGNoYXIgKiopYXJndiArIDE7CisJcmV0dXJuIHJ1bl9jb21tYW5kKCZjcCk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXN2bi1mZS5jIGIvdC9oZWxwZXIvdGVzdC1zdm4tZmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjY3YzA4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC1zdm4tZmUuYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogdGVzdC1zdm4tZmU6IENvZGUgdG8gZXhlcmNpc2UgdGhlIHN2biBpbXBvcnQgbGliCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInZjcy1zdm4vc3ZuZHVtcC5oIgorI2luY2x1ZGUgInZjcy1zdm4vc3ZuZGlmZi5oIgorI2luY2x1ZGUgInZjcy1zdm4vc2xpZGluZ193aW5kb3cuaCIKKyNpbmNsdWRlICJ2Y3Mtc3ZuL2xpbmVfYnVmZmVyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHRlc3Rfc3ZuZmVfdXNhZ2VbXSA9CisJInRlc3Qtc3ZuLWZlICg8ZHVtcGZpbGU+IHwgWy1kXSA8cHJlaW1hZ2U+IDxkZWx0YT4gPGxlbj4pIjsKKworc3RhdGljIGludCBhcHBseV9kZWx0YShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGxpbmVfYnVmZmVyIHByZWltYWdlID0gTElORV9CVUZGRVJfSU5JVDsKKwlzdHJ1Y3QgbGluZV9idWZmZXIgZGVsdGEgPSBMSU5FX0JVRkZFUl9JTklUOworCXN0cnVjdCBzbGlkaW5nX3ZpZXcgcHJlaW1hZ2VfdmlldyA9IFNMSURJTkdfVklFV19JTklUKCZwcmVpbWFnZSwgLTEpOworCisJaWYgKGFyZ2MgIT0gNSkKKwkJdXNhZ2UodGVzdF9zdm5mZV91c2FnZSk7CisKKwlpZiAoYnVmZmVyX2luaXQoJnByZWltYWdlLCBhcmd2WzJdKSkKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBwcmVpbWFnZSIpOworCWlmIChidWZmZXJfaW5pdCgmZGVsdGEsIGFyZ3ZbM10pKQorCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIGRlbHRhIik7CisJaWYgKHN2bmRpZmYwX2FwcGx5KCZkZWx0YSwgKG9mZl90KSBzdHJ0b3VtYXgoYXJndls0XSwgTlVMTCwgMCksCisJCQkJCSZwcmVpbWFnZV92aWV3LCBzdGRvdXQpKQorCQlyZXR1cm4gMTsKKwlpZiAoYnVmZmVyX2RlaW5pdCgmcHJlaW1hZ2UpKQorCQlkaWVfZXJybm8oImNhbm5vdCBjbG9zZSBwcmVpbWFnZSIpOworCWlmIChidWZmZXJfZGVpbml0KCZkZWx0YSkpCisJCWRpZV9lcnJubygiY2Fubm90IGNsb3NlIGRlbHRhIik7CisJc3RyYnVmX3JlbGVhc2UoJnByZWltYWdlX3ZpZXcuYnVmKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpZiAoYXJnYyA9PSAyKSB7CisJCWlmIChzdm5kdW1wX2luaXQoYXJndlsxXSkpCisJCQlyZXR1cm4gMTsKKwkJc3ZuZHVtcF9yZWFkKE5VTEwsICJyZWZzL2hlYWRzL21hc3RlciIsICJyZWZzL25vdGVzL3N2bi9yZXZzIik7CisJCXN2bmR1bXBfZGVpbml0KCk7CisJCXN2bmR1bXBfcmVzZXQoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItZCIpKQorCQlyZXR1cm4gYXBwbHlfZGVsdGEoYXJnYywgYXJndik7CisJdXNhZ2UodGVzdF9zdm5mZV91c2FnZSk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXRvb2wuYyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YTIzMmQKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXRvb2wuYwpAQCAtMCwwICsxLDExOSBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgInRyYWNlMi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXN0X3Rvb2xfdXNhZ2VbXSA9IHsKKwkidGVzdC10b29sIFstQyA8ZGlyZWN0b3J5Pl0gPGNvbW1hbmQgWzxhcmd1bWVudHM+Li4uXV0iLAorCU5VTEwKK307CisKK3N0cnVjdCB0ZXN0X2NtZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpmbikoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGVzdF9jbWQgY21kc1tdID0geworCXsgImNobXRpbWUiLCBjbWRfX2NobXRpbWUgfSwKKwl7ICJjb25maWciLCBjbWRfX2NvbmZpZyB9LAorCXsgImN0eXBlIiwgY21kX19jdHlwZSB9LAorCXsgImRhdGUiLCBjbWRfX2RhdGUgfSwKKwl7ICJkZWx0YSIsIGNtZF9fZGVsdGEgfSwKKwl7ICJkaXItaXRlcmF0b3IiLCBjbWRfX2Rpcl9pdGVyYXRvciB9LAorCXsgImRyb3AtY2FjaGVzIiwgY21kX19kcm9wX2NhY2hlcyB9LAorCXsgImR1bXAtY2FjaGUtdHJlZSIsIGNtZF9fZHVtcF9jYWNoZV90cmVlIH0sCisJeyAiZHVtcC1mc21vbml0b3IiLCBjbWRfX2R1bXBfZnNtb25pdG9yIH0sCisJeyAiZHVtcC1zcGxpdC1pbmRleCIsIGNtZF9fZHVtcF9zcGxpdF9pbmRleCB9LAorCXsgImR1bXAtdW50cmFja2VkLWNhY2hlIiwgY21kX19kdW1wX3VudHJhY2tlZF9jYWNoZSB9LAorCXsgImV4YW1wbGUtZGVjb3JhdGUiLCBjbWRfX2V4YW1wbGVfZGVjb3JhdGUgfSwKKwl7ICJnZW5yYW5kb20iLCBjbWRfX2dlbnJhbmRvbSB9LAorCXsgImdlbnplcm9zIiwgY21kX19nZW56ZXJvcyB9LAorCXsgImhhc2htYXAiLCBjbWRfX2hhc2htYXAgfSwKKwl7ICJoYXNoLXNwZWVkIiwgY21kX19oYXNoX3NwZWVkIH0sCisJeyAiaW5kZXgtdmVyc2lvbiIsIGNtZF9faW5kZXhfdmVyc2lvbiB9LAorCXsgImpzb24td3JpdGVyIiwgY21kX19qc29uX3dyaXRlciB9LAorCXsgImxhenktaW5pdC1uYW1lLWhhc2giLCBjbWRfX2xhenlfaW5pdF9uYW1lX2hhc2ggfSwKKwl7ICJtYXRjaC10cmVlcyIsIGNtZF9fbWF0Y2hfdHJlZXMgfSwKKwl7ICJtZXJnZXNvcnQiLCBjbWRfX21lcmdlc29ydCB9LAorCXsgIm1rdGVtcCIsIGNtZF9fbWt0ZW1wIH0sCisJeyAib2lkbWFwIiwgY21kX19vaWRtYXAgfSwKKwl7ICJvbmxpbmUtY3B1cyIsIGNtZF9fb25saW5lX2NwdXMgfSwKKwl7ICJwYXJzZS1vcHRpb25zIiwgY21kX19wYXJzZV9vcHRpb25zIH0sCisJeyAicGFyc2UtcGF0aHNwZWMtZmlsZSIsIGNtZF9fcGFyc2VfcGF0aHNwZWNfZmlsZSB9LAorCXsgInBhdGgtdXRpbHMiLCBjbWRfX3BhdGhfdXRpbHMgfSwKKwl7ICJwa3QtbGluZSIsIGNtZF9fcGt0X2xpbmUgfSwKKwl7ICJwcmlvLXF1ZXVlIiwgY21kX19wcmlvX3F1ZXVlIH0sCisJeyAicHJvZ3Jlc3MiLCBjbWRfX3Byb2dyZXNzIH0sCisJeyAicmVhY2giLCBjbWRfX3JlYWNoIH0sCisJeyAicmVhZC1jYWNoZSIsIGNtZF9fcmVhZF9jYWNoZSB9LAorCXsgInJlYWQtZ3JhcGgiLCBjbWRfX3JlYWRfZ3JhcGggfSwKKwl7ICJyZWFkLW1pZHgiLCBjbWRfX3JlYWRfbWlkeCB9LAorCXsgInJlZi1zdG9yZSIsIGNtZF9fcmVmX3N0b3JlIH0sCisJeyAicmVnZXgiLCBjbWRfX3JlZ2V4IH0sCisJeyAicmVwb3NpdG9yeSIsIGNtZF9fcmVwb3NpdG9yeSB9LAorCXsgInJldmlzaW9uLXdhbGtpbmciLCBjbWRfX3JldmlzaW9uX3dhbGtpbmcgfSwKKwl7ICJydW4tY29tbWFuZCIsIGNtZF9fcnVuX2NvbW1hbmQgfSwKKwl7ICJzY3JhcC1jYWNoZS10cmVlIiwgY21kX19zY3JhcF9jYWNoZV90cmVlIH0sCisJeyAic2VydmUtdjIiLCBjbWRfX3NlcnZlX3YyIH0sCisJeyAic2hhMSIsIGNtZF9fc2hhMSB9LAorCXsgInNoYTEtYXJyYXkiLCBjbWRfX3NoYTFfYXJyYXkgfSwKKwl7ICJzaGEyNTYiLCBjbWRfX3NoYTI1NiB9LAorCXsgInNpZ2NoYWluIiwgY21kX19zaWdjaGFpbiB9LAorCXsgInN0cmNtcC1vZmZzZXQiLCBjbWRfX3N0cmNtcF9vZmZzZXQgfSwKKwl7ICJzdHJpbmctbGlzdCIsIGNtZF9fc3RyaW5nX2xpc3QgfSwKKwl7ICJzdWJtb2R1bGUtY29uZmlnIiwgY21kX19zdWJtb2R1bGVfY29uZmlnIH0sCisJeyAic3VibW9kdWxlLW5lc3RlZC1yZXBvLWNvbmZpZyIsIGNtZF9fc3VibW9kdWxlX25lc3RlZF9yZXBvX2NvbmZpZyB9LAorCXsgInN1YnByb2Nlc3MiLCBjbWRfX3N1YnByb2Nlc3MgfSwKKwl7ICJ0cmFjZTIiLCBjbWRfX3RyYWNlMiB9LAorCXsgInVybG1hdGNoLW5vcm1hbGl6YXRpb24iLCBjbWRfX3VybG1hdGNoX25vcm1hbGl6YXRpb24gfSwKKwl7ICJ4bWwtZW5jb2RlIiwgY21kX194bWxfZW5jb2RlIH0sCisJeyAid2lsZG1hdGNoIiwgY21kX193aWxkbWF0Y2ggfSwKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwl7ICJ3aW5kb3dzLW5hbWVkLXBpcGUiLCBjbWRfX3dpbmRvd3NfbmFtZWRfcGlwZSB9LAorI2VuZGlmCisJeyAid3JpdGUtY2FjaGUiLCBjbWRfX3dyaXRlX2NhY2hlIH0sCit9OworCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfdXNhZ2Uodm9pZCkKK3sKKwlzaXplX3QgaTsKKworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IHRlc3QtdG9vbCA8dG9vbG5hbWU+IFthcmdzXVxuIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY21kcyk7IGkrKykKKwkJZnByaW50ZihzdGRlcnIsICIgICVzXG4iLCBjbWRzW2ldLm5hbWUpOworCWV4aXQoMTI4KTsKK30KKworaW50IGNtZF9tYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICp3b3JraW5nX2RpcmVjdG9yeSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoJ0MnLCBOVUxMLCAmd29ya2luZ19kaXJlY3RvcnksICJkaXJlY3RvcnkiLAorCQkJICAgImNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkiKSwKKwkJT1BUX0VORCgpCisJfTsKKworCUJVR19leGl0X2NvZGUgPSA5OTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB0ZXN0X3Rvb2xfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04gfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisKKwlpZiAoYXJnYyA8IDIpCisJCWRpZV91c2FnZSgpOworCisJaWYgKHdvcmtpbmdfZGlyZWN0b3J5ICYmIGNoZGlyKHdvcmtpbmdfZGlyZWN0b3J5KSA8IDApCisJCWRpZSgiQ291bGQgbm90IGNkIHRvICclcyciLCB3b3JraW5nX2RpcmVjdG9yeSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbWRzKTsgaSsrKSB7CisJCWlmICghc3RyY21wKGNtZHNbaV0ubmFtZSwgYXJndlsxXSkpIHsKKwkJCWFyZ3YrKzsKKwkJCWFyZ2MtLTsKKwkJCXRyYWNlMl9jbWRfbmFtZShjbWRzW2ldLm5hbWUpOworCQkJdHJhY2UyX2NtZF9saXN0X2NvbmZpZygpOworCQkJcmV0dXJuIGNtZHNbaV0uZm4oYXJnYywgYXJndik7CisJCX0KKwl9CisJZXJyb3IoInRoZXJlIGlzIG5vIHRvb2wgbmFtZWQgJyVzJyIsIGFyZ3ZbMV0pOworCWRpZV91c2FnZSgpOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC10b29sLmggYi90L2hlbHBlci90ZXN0LXRvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODU0OWZkCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC10b29sLmgKQEAgLTAsMCArMSw2OCBAQAorI2lmbmRlZiBURVNUX1RPT0xfSAorI2RlZmluZSBURVNUX1RPT0xfSAorCisjZGVmaW5lIFVTRV9USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworaW50IGNtZF9fY2htdGltZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19jdHlwZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZGVsdGEoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2Rpcl9pdGVyYXRvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZHJvcF9jYWNoZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2R1bXBfY2FjaGVfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fZHVtcF9mc21vbml0b3IoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2R1bXBfc3BsaXRfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2R1bXBfdW50cmFja2VkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19leGFtcGxlX2RlY29yYXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19nZW5yYW5kb20oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX2dlbnplcm9zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19oYXNobWFwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19oYXNoX3NwZWVkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19pbmRleF92ZXJzaW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19qc29uX3dyaXRlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fbGF6eV9pbml0X25hbWVfaGFzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fbWF0Y2hfdHJlZXMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX21lcmdlc29ydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fbWt0ZW1wKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19vaWRtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX29ubGluZV9jcHVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19wYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19wYXJzZV9wYXRoc3BlY19maWxlKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndik7CitpbnQgY21kX19wYXRoX3V0aWxzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19wa3RfbGluZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fcHJpb19xdWV1ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fcHJvZ3Jlc3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JlYWNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19yZWFkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19yZWFkX2dyYXBoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19yZWFkX21pZHgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JlZl9zdG9yZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fcmVnZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JlcG9zaXRvcnkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JldmlzaW9uX3dhbGtpbmcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3J1bl9jb21tYW5kKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19zY3JhcF9jYWNoZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19zZXJ2ZV92MihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fc2hhMShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fc2hhMV9hcnJheShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fc2hhMjU2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitpbnQgY21kX19zaWdjaGFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fc3RyY21wX29mZnNldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fc3RyaW5nX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3N1Ym1vZHVsZV9jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3N1Ym1vZHVsZV9uZXN0ZWRfcmVwb19jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3N1YnByb2Nlc3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3RyYWNlMihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fdXJsbWF0Y2hfbm9ybWFsaXphdGlvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9feG1sX2VuY29kZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworaW50IGNtZF9fd2lsZG1hdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisjaWZkZWYgR0lUX1dJTkRPV1NfTkFUSVZFCitpbnQgY21kX193aW5kb3dzX25hbWVkX3BpcGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKyNlbmRpZgoraW50IGNtZF9fd3JpdGVfY2FjaGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKworaW50IGNtZF9oYXNoX2ltcGwoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGludCBhbGdvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXRyYWNlMi5jIGIvdC9oZWxwZXIvdGVzdC10cmFjZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc4MTljCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC10cmFjZTIuYwpAQCAtMCwwICsxLDI3MyBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiZXhlYy1jbWQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKwordHlwZWRlZiBpbnQoZm5fdW5pdF90ZXN0KShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworCitzdHJ1Y3QgdW5pdF90ZXN0IHsKKwlmbl91bml0X3Rlc3QgKnV0X2ZuOworCWNvbnN0IGNoYXIgKnV0X25hbWU7CisJY29uc3QgY2hhciAqdXRfdXNhZ2U7Cit9OworCisjZGVmaW5lIE15T2sgMAorI2RlZmluZSBNeUVycm9yIDEKKworc3RhdGljIGludCBnZXRfaShpbnQgKnBfdmFsdWUsIGNvbnN0IGNoYXIgKmRhdGEpCit7CisJY2hhciAqZW5kcHRyOworCisJaWYgKCFkYXRhIHx8ICEqZGF0YSkKKwkJcmV0dXJuIE15RXJyb3I7CisKKwkqcF92YWx1ZSA9IHN0cnRvbChkYXRhLCAmZW5kcHRyLCAxMCk7CisJaWYgKCplbmRwdHIgfHwgZXJybm8gPT0gRVJBTkdFKQorCQlyZXR1cm4gTXlFcnJvcjsKKworCXJldHVybiBNeU9rOworfQorCisvKgorICogQ2F1c2UgcHJvY2VzcyB0byBleGl0IHdpdGggdGhlIHJlcXVlc3RlZCB2YWx1ZSB2aWEgInJldHVybiIuCisgKgorICogUmVseSBvbiB0ZXN0LXRvb2wuYzpjbWRfbWFpbigpIHRvIGNhbGwgdHJhY2UyX2NtZF9leGl0KCkKKyAqIHdpdGggb3VyIHJlc3VsdC4KKyAqCisgKiBUZXN0IGhhcm5lc3MgY2FuIGNvbmZpcm06CisgKiBbXSB0aGUgcHJvY2Vzcy1leGl0IHZhbHVlLgorICogW10gdGhlICJjb2RlIiBmaWVsZCBpbiB0aGUgImV4aXQiIHRyYWNlMiBldmVudC4KKyAqIFtdIHRoZSAiY29kZSIgZmllbGQgaW4gdGhlICJhdGV4aXQiIHRyYWNlMiBldmVudC4KKyAqIFtdIHRoZSAibmFtZSIgZmllbGQgaW4gdGhlICJjbWRfbmFtZSIgdHJhY2UyIGV2ZW50LgorICogW10gImRlZl9wYXJhbSIgZXZlbnRzIGZvciBhbGwgb2YgdGhlICJpbnRlcmVzdGluZyIgcHJlLWRlZmluZWQKKyAqIGNvbmZpZyBzZXR0aW5ncy4KKyAqLworc3RhdGljIGludCB1dF8wMDFyZXR1cm4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCByYzsKKworCWlmIChnZXRfaSgmcmMsIGFyZ3ZbMF0pKQorCQlkaWUoImV4cGVjdCA8ZXhpdF9jb2RlPiIpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ2F1c2UgdGhlIHByb2Nlc3MgdG8gZXhpdCB3aXRoIHRoZSByZXF1ZXN0ZWQgdmFsdWUgdmlhICJleGl0KCkiLgorICoKKyAqIFRlc3QgaGFybmVzcyBjYW4gY29uZmlybToKKyAqIFtdIHRoZSAiY29kZSIgZmllbGQgaW4gdGhlICJleGl0IiB0cmFjZTIgZXZlbnQuCisgKiBbXSB0aGUgImNvZGUiIGZpZWxkIGluIHRoZSAiYXRleGl0IiB0cmFjZTIgZXZlbnQuCisgKiBbXSB0aGUgIm5hbWUiIGZpZWxkIGluIHRoZSAiY21kX25hbWUiIHRyYWNlMiBldmVudC4KKyAqIFtdICJkZWZfcGFyYW0iIGV2ZW50cyBmb3IgYWxsIG9mIHRoZSAiaW50ZXJlc3RpbmciIHByZS1kZWZpbmVkCisgKiBjb25maWcgc2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgdXRfMDAyZXhpdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IHJjOworCisJaWYgKGdldF9pKCZyYywgYXJndlswXSkpCisJCWRpZSgiZXhwZWN0IDxleGl0X2NvZGU+Iik7CisKKwlleGl0KHJjKTsKK30KKworLyoKKyAqIFNlbmQgYW4gImVycm9yIiBldmVudCB3aXRoIGVhY2ggdmFsdWUgaW4gYXJndi4gIE5vcm1hbGx5LCBnaXQgb25seSBpc3N1ZXMKKyAqIGEgc2luZ2xlICJlcnJvciIgZXZlbnQgaW1tZWRpYXRlbHkgYmVmb3JlIGlzc3VpbmcgYW4gImV4aXQiIGV2ZW50IChzdWNoCisgKiBhcyBpbiBkaWUoKSBvciBCVUcoKSksIGJ1dCBtdWx0aXBsZSAiZXJyb3IiIGV2ZW50cyBhcmUgYWxsb3dlZC4KKyAqCisgKiBUZXN0IGhhcm5lc3MgY2FuIGNvbmZpcm06CisgKiBbXSBhIHRyYWNlMiAiZXJyb3IiIGV2ZW50IGZvciBlYWNoIHZhbHVlIGluIGFyZ3YuCisgKiBbXSB0aGUgIm5hbWUiIGZpZWxkIGluIHRoZSAiY21kX25hbWUiIHRyYWNlMiBldmVudC4KKyAqIFtdIChvcHRpb25hbCkgdGhlIGZpbGU6bGluZSBpbiB0aGUgImV4aXQiIGV2ZW50IHJlZmVycyB0byB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IHV0XzAwM2Vycm9yKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgazsKKworCWlmICghYXJndlswXSB8fCAhKmFyZ3ZbMF0pCisJCWRpZSgiZXhwZWN0IDxlcnJvcl9tZXNzYWdlPiIpOworCisJZm9yIChrID0gMDsgayA8IGFyZ2M7IGsrKykKKwkJZXJyb3IoIiVzIiwgYXJndltrXSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJ1biBhIGNoaWxkIHByb2Nlc3MgYW5kIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBhbmQgZXhpdCB3aXRoIGl0cyByZXR1cm4gY29kZS4KKyAqIHRlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQgWzxjaGlsZC1jb21tYW5kLWxpbmU+XQorICoKKyAqIEZvciBleGFtcGxlOgorICogdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZCBnaXQgdmVyc2lvbgorICogdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZCB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwCisgKiB0ZXN0LXRvb2wgdHJhY2UyIDAwNGNoaWxkIHRlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQgdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZAorICogdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZCBnaXQgLWMgYWxpYXMueHl6PXZlcnNpb24geHl6CisgKgorICogVGVzdCBoYXJuZXNzIGNhbiBjb25maXJtOgorICogW10gdGhlICJuYW1lIiBmaWVsZCBpbiB0aGUgImNtZF9uYW1lIiB0cmFjZTIgZXZlbnQuCisgKiBbXSB0aGF0IHRoZSBvdXRlciBwcm9jZXNzIGhhcyBhIHNpbmdsZSBjb21wb25lbnQgU0lEIChvciBkZXB0aCAiZDAiIGluCisgKiAgICB0aGUgUEVSRiBzdHJlYW0pLgorICogW10gdGhhdCAiY2hpbGRfc3RhcnQiIGFuZCAiY2hpbGRfZXhpdCIgZXZlbnRzIGFyZSBnZW5lcmF0ZWQgZm9yIHRoZSBjaGlsZC4KKyAqIFtdIGlmIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGFuIGluc3RydW1lbnRlZCBleGVjdXRhYmxlOgorICogICAgW10gdGhhdCAidmVyc2lvbiIsICJzdGFydCIsIC4uLiwgImV4aXQiLCBhbmQgImF0ZXhpdCIgZXZlbnRzIGFyZQorICogICAgICAgZ2VuZXJhdGVkIGJ5IHRoZSBjaGlsZCBwcm9jZXNzLgorICogICAgW10gdGhhdCB0aGUgY2hpbGQgcHJvY2VzcyBldmVudHMgaGF2ZSBhIG11bHRpcGxlIGNvbXBvbmVudCBTSUQgKG9yCisgKiAgICAgICBkZXB0aCAiZE4rMSIgaW4gdGhlIFBFUkYgc3RyZWFtKS4KKyAqIFtdIHRoYXQgdGhlIGNoaWxkIGV4aXQgY29kZSBpcyBwcm9wYWdhdGVkIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyAiZXhpdCIKKyAqICAgIGFuZCAiYXRleGl0IiBldmVudHMuLgorICogW10gKG9wdGlvbmFsKSB0aGF0IHRoZSAidF9hYnMiIGZpZWxkIGluIHRoZSBjaGlsZCBwcm9jZXNzICJhdGV4aXQiIGV2ZW50CisgKiAgICBpcyBsZXNzIHRoYW4gdGhlICJ0X3JlbCIgZmllbGQgaW4gdGhlICJjaGlsZF9leGl0IiBldmVudCBvZiB0aGUgcGFyZW50CisgKiAgICBwcm9jZXNzLgorICogW10gaWYgdGhlIGNoaWxkIHByb2Nlc3MgaXMgbGlrZSB0aGUgYWxpYXMgZXhhbXBsZSBhYm92ZSwKKyAqICAgIFtdIChvcHRpb25hbCkgdGhlIGNoaWxkIHByb2Nlc3MgYXR0ZW1wdHMgdG8gcnVuICJnaXQteHl4IiBhcyBhIGRhc2hlZAorICogICAgICAgY29tbWFuZC4KKyAqICAgIFtdIHRoZSBjaGlsZCBwcm9jZXNzIGVtaXRzIGFuICJhbGlhcyIgZXZlbnQgd2l0aCAieHl6IiA9PiAidmVyc2lvbiIKKyAqICAgIFtdIHRoZSBjaGlsZCBwcm9jZXNzIHJ1bnMgImdpdCB2ZXJzaW9uIiBhcyBhIGNoaWxkIHByb2Nlc3MuCisgKiAgICBbXSB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgYSAzIGNvbXBvbmVudCBTSUQgKG9yIGRlcHRoICJkMiIgaW4gdGhlIFBFUkYKKyAqICAgICAgIHN0cmVhbSkuCisgKi8KK3N0YXRpYyBpbnQgdXRfMDA0Y2hpbGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCByZXN1bHQ7CisKKwkvKgorCSAqIEFsbG93IGVtcHR5IDxjaGlsZF9jb21tYW5kX2xpbmU+IHNvIHdlIGNhbiBkbyBhcmJpdHJhcmlseSBkZWVwCisJICogY29tbWFuZCBuZXN0aW5nIGFuZCBsZXQgdGhlIGxhc3Qgb25lIGJlIG51bGwuCisJICovCisJaWYgKCFhcmdjKQorCQlyZXR1cm4gMDsKKworCXJlc3VsdCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIDApOworCWV4aXQocmVzdWx0KTsKK30KKworLyoKKyAqIEV4ZWMgYSBnaXQgY29tbWFuZC4gIFRoaXMgbWF5IGVpdGhlciBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzIChXaW5kb3dzKQorICogb3IgcmVwbGFjZSB0aGUgZXhpc3RpbmcgcHJvY2Vzcy4KKyAqIHRlc3QtdG9vbCB0cmFjZTIgMDA1ZXhlYyA8Z2l0X2NvbW1hbmRfYXJncz4KKyAqCisgKiBGb3IgZXhhbXBsZToKKyAqIHRlc3QtdG9vbCB0cmFjZTIgMDA1ZXhlYyB2ZXJzaW9uCisgKgorICogVGVzdCBoYXJuZXNzIGNhbiBjb25maXJtIChvbiBXaW5kb3dzKToKKyAqIFtdIHRoZSAibmFtZSIgZmllbGQgaW4gdGhlICJjbWRfbmFtZSIgdHJhY2UyIGV2ZW50LgorICogW10gdGhhdCB0aGUgb3V0ZXIgcHJvY2VzcyBoYXMgYSBzaW5nbGUgY29tcG9uZW50IFNJRCAob3IgZGVwdGggImQwIiBpbgorICogICAgdGhlIFBFUkYgc3RyZWFtKS4KKyAqIFtdIHRoYXQgImV4ZWMiIGFuZCAiZXhlY19yZXN1bHQiIGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGZvciB0aGUgY2hpbGQKKyAqICAgIHByb2Nlc3MgKHNpbmNlIHRoZSBXaW5kb3dzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZmFrZXMgYW4gZXhlYygpIHdpdGgKKyAqICAgIGEgQ3JlYXRlUHJvY2VzcygpLCBXYWl0Rm9yU2luZ2xlT2JqZWN0KCksIGFuZCBleGl0KCkpLgorICogW10gdGhhdCB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgbXVsdGlwbGUgY29tcG9uZW50IFNJRCAob3IgZGVwdGggImROKzEiCisgKiAgICBpbiB0aGUgUEVSRiBzdHJlYW0pLgorICoKKyAqIFRlc3QgaGFybmVzcyBjYW4gY29uZmlybSAob24gcGxhdGZvcm1zIHdpdGggYSByZWFsIGV4ZWMoKSBmdW5jdGlvbik6CisgKiBbXSBUT0RPIHRhbGsgYWJvdXQgcHJvY2VzcyByZXBsYWNlbWVudCBhbmQgaG93IGl0IGFmZmVjdHMgU0lELgorICovCitzdGF0aWMgaW50IHV0XzAwNWV4ZWMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCByZXN1bHQ7CisKKwlpZiAoIWFyZ2MpCisJCXJldHVybiAwOworCisJcmVzdWx0ID0gZXhlY3ZfZ2l0X2NtZChhcmd2KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHV0XzAwNmRhdGEoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnVzYWdlX2Vycm9yID0KKwkJImV4cGVjdCA8Y2F0MD4gPGswPiA8djA+IFs8Y2F0MT4gPGsxPiA8djE+IFsuLi5dXSI7CisKKwlpZiAoYXJnYyAlIDMgIT0gMCkKKwkJZGllKCIlcyIsIHVzYWdlX2Vycm9yKTsKKworCXdoaWxlIChhcmdjKSB7CisJCWlmICghYXJndlswXSB8fCAhKmFyZ3ZbMF0gfHwgIWFyZ3ZbMV0gfHwgISphcmd2WzFdIHx8CisJCSAgICAhYXJndlsyXSB8fCAhKmFyZ3ZbMl0pCisJCQlkaWUoIiVzIiwgdXNhZ2VfZXJyb3IpOworCisJCXRyYWNlMl9kYXRhX3N0cmluZyhhcmd2WzBdLCB0aGVfcmVwb3NpdG9yeSwgYXJndlsxXSwgYXJndlsyXSk7CisJCWFyZ3YgKz0gMzsKKwkJYXJnYyAtPSAzOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVXNhZ2U6CisgKiAgICAgdGVzdC10b29sIHRyYWNlMiA8dXRfbmFtZV8xPiA8dXRfdXNhZ2VfMT4KKyAqICAgICB0ZXN0LXRvb2wgdHJhY2UyIDx1dF9uYW1lXzI+IDx1dF91c2FnZV8yPgorICogICAgIC4uLgorICovCisjZGVmaW5lIFVTQUdFX1BSRUZJWCAidGVzdC10b29sIHRyYWNlMiIKKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHN0cnVjdCB1bml0X3Rlc3QgdXRfdGFibGVbXSA9IHsKKwl7IHV0XzAwMXJldHVybiwgICAiMDAxcmV0dXJuIiwgIjxleGl0X2NvZGU+IiB9LAorCXsgdXRfMDAyZXhpdCwgICAgICIwMDJleGl0IiwgICAiPGV4aXRfY29kZT4iIH0sCisJeyB1dF8wMDNlcnJvciwgICAgIjAwM2Vycm9yIiwgICI8ZXJyb3JfbWVzc2FnZT4rIiB9LAorCXsgdXRfMDA0Y2hpbGQsICAgICIwMDRjaGlsZCIsICAiWzxjaGlsZF9jb21tYW5kX2xpbmU+XSIgfSwKKwl7IHV0XzAwNWV4ZWMsICAgICAiMDA1ZXhlYyIsICAgIjxnaXRfY29tbWFuZF9hcmdzPiIgfSwKKwl7IHV0XzAwNmRhdGEsICAgICAiMDA2ZGF0YSIsICAgIls8Y2F0ZWdvcnk+IDxrZXk+IDx2YWx1ZT5dKyIgfSwKK307CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworI2RlZmluZSBmb3JfZWFjaF91dChrLCB1dF9rKQkJCVwKKwlmb3IgKGsgPSAwLCB1dF9rID0gJnV0X3RhYmxlW2tdOwlcCisJICAgICBrIDwgQVJSQVlfU0laRSh1dF90YWJsZSk7CQlcCisJICAgICBrKyssIHV0X2sgPSAmdXRfdGFibGVba10pCisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKworc3RhdGljIGludCBwcmludF91c2FnZSh2b2lkKQoreworCWludCBrOworCXN0cnVjdCB1bml0X3Rlc3QgKnV0X2s7CisKKwlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOlxuIik7CisJZm9yX2VhY2hfdXQgKGssIHV0X2spCisJCWZwcmludGYoc3RkZXJyLCAiXHQlcyAlcyAlc1xuIiwgVVNBR0VfUFJFRklYLCB1dF9rLT51dF9uYW1lLAorCQkJdXRfay0+dXRfdXNhZ2UpOworCisJcmV0dXJuIDEyOTsKK30KKworLyoKKyAqIElzc3VlIHZhcmlvdXMgdHJhY2UyIGV2ZW50cyBmb3IgdGVzdGluZy4KKyAqCisgKiBXZSBhc3N1bWUgdGhhdCB0aGVzZSB0cmFjZTIgcm91dGluZXMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQ6CisgKiAgICBbXSB0cmFjZTJfaW5pdGlhbGl6ZSgpICAgICAgW2NvbW1vbi1tYWluLmM6bWFpbigpXQorICogICAgW10gdHJhY2UyX2NtZF9zdGFydCgpICAgICAgIFtjb21tb24tbWFpbi5jOm1haW4oKV0KKyAqICAgIFtdIHRyYWNlMl9jbWRfbmFtZSgpICAgICAgICBbdGVzdC10b29sLmM6Y21kX21haW4oKV0KKyAqICAgIFtdIHRyYWNkMl9jbWRfbGlzdF9jb25maWcoKSBbdGVzdC10b29sLmM6Y21kX21haW4oKV0KKyAqIFNvIHRoYXQ6CisgKiAgICBbXSB0aGUgdmFyaW91cyB0cmFjZTIgc3RyZWFtcyBhcmUgb3Blbi4KKyAqICAgIFtdIHRoZSBwcm9jZXNzIFNJRCBoYXMgYmVlbiBjcmVhdGVkLgorICogICAgW10gdGhlICJ2ZXJzaW9uIiBldmVudCBoYXMgYmVlbiBnZW5lcmF0ZWQuCisgKiAgICBbXSB0aGUgInN0YXJ0IiBldmVudCBoYXMgYmVlbiBnZW5lcmF0ZWQuCisgKiAgICBbXSB0aGUgImNtZF9uYW1lIiBldmVudCBoYXMgYmVlbiBnZW5lcmF0ZWQuCisgKiAgICBbXSB0aGlzIHdyaXRlcyB2YXJpb3VzICJkZWZfcGFyYW0iIGV2ZW50cyBmb3IgaW50ZXJlc3RpbmcgY29uZmlnIHZhbHVlcy4KKyAqCisgKiBXZSBmdXJ0aGVyIGFzc3VtZSB0aGF0IGlmIHdlIHJldHVybiAocmF0aGVyIHRoYW4gZXhpdCgpKSwgdHJhY2UyX2NtZF9leGl0KCkKKyAqIHdpbGwgYmUgY2FsbGVkIGJ5IHRlc3QtdG9vbC5jOmNtZF9tYWluKCkuCisgKi8KK2ludCBjbWRfX3RyYWNlMihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGs7CisJc3RydWN0IHVuaXRfdGVzdCAqdXRfazsKKworCWFyZ2MtLTsgLyogc2tpcCBvdmVyICJ0cmFjZTIiIGFyZyAqLworCWFyZ3YrKzsKKworCWlmIChhcmdjKQorCQlmb3JfZWFjaF91dCAoaywgdXRfaykKKwkJCWlmICghc3RyY21wKGFyZ3ZbMF0sIHV0X2stPnV0X25hbWUpKQorCQkJCXJldHVybiB1dF9rLT51dF9mbihhcmdjIC0gMSwgYXJndiArIDEpOworCisJcmV0dXJuIHByaW50X3VzYWdlKCk7Cit9CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24uYyBiL3QvaGVscGVyL3Rlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNGQ2N2UKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24uYwpAQCAtMCwwICsxLDUxIEBACisjaW5jbHVkZSAidGVzdC10b29sLmgiCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidXJsbWF0Y2guaCIKKworaW50IGNtZF9fdXJsbWF0Y2hfbm9ybWFsaXphdGlvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciB1c2FnZVtdID0gInRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIFstcCB8IC1sXSA8dXJsMT4gfCA8dXJsMT4gPHVybDI+IjsKKwljaGFyICp1cmwxLCAqdXJsMjsKKwlpbnQgb3B0X3AgPSAwLCBvcHRfbCA9IDA7CisKKwkvKgorCSAqIEZvciBvbmUgdXJsLCBzdWNjZWVkIGlmIHVybF9ub3JtYWxpemUgc3VjY2VlZHMgb24gaXQsIGZhaWwgb3RoZXJ3aXNlLgorCSAqIEZvciB0d28gdXJscywgc3VjY2VlZCBvbmx5IGlmIHVybF9ub3JtYWxpemUgc3VjY2VlZHMgb24gYm90aCBhbmQKKwkgKiB0aGUgcmVzdWx0cyBjb21wYXJlIGVxdWFsIHdpdGggc3RyY21wLiAgSWYgLXAgaXMgZ2l2ZW4gKG9uZSB1cmwgb25seSkKKwkgKiBhbmQgdXJsX25vcm1hbGl6ZSBzdWNjZWVkcywgcHJpbnQgdGhlIHJlc3VsdCBmb2xsb3dlZCBieSAiXG4iLiAgSWYKKwkgKiAtbCBpcyBnaXZlbiAob25lIHVybCBvbmx5KSBhbmQgdXJsX25vcm1hbGl6ZSBzdWNjZWVkcywgcHJpbnQgdGhlCisJICogcmV0dXJuZWQgbGVuZ3RoIGluIGRlY2ltYWwgZm9sbG93ZWQgYnkgIlxuIi4KKwkgKi8KKworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItcCIpKSB7CisJCW9wdF9wID0gMTsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJfSBlbHNlIGlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItbCIpKSB7CisJCW9wdF9sID0gMTsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJfQorCisJaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiAzKQorCQlkaWUoIiVzIiwgdXNhZ2UpOworCisJaWYgKGFyZ2MgPT0gMikgeworCQlzdHJ1Y3QgdXJsX2luZm8gaW5mbzsKKwkJdXJsMSA9IHVybF9ub3JtYWxpemUoYXJndlsxXSwgJmluZm8pOworCQlpZiAoIXVybDEpCisJCQlyZXR1cm4gMTsKKwkJaWYgKG9wdF9wKQorCQkJcHJpbnRmKCIlc1xuIiwgdXJsMSk7CisJCWlmIChvcHRfbCkKKwkJCXByaW50ZigiJXVcbiIsICh1bnNpZ25lZClpbmZvLnVybF9sZW4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAob3B0X3AgfHwgb3B0X2wpCisJCWRpZSgiJXMiLCB1c2FnZSk7CisKKwl1cmwxID0gdXJsX25vcm1hbGl6ZShhcmd2WzFdLCBOVUxMKTsKKwl1cmwyID0gdXJsX25vcm1hbGl6ZShhcmd2WzJdLCBOVUxMKTsKKwlyZXR1cm4gKHVybDEgJiYgdXJsMiAmJiAhc3RyY21wKHVybDEsIHVybDIpKSA/IDAgOiAxOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC13aWxkbWF0Y2guYyBiL3QvaGVscGVyL3Rlc3Qtd2lsZG1hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxMDNkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3Qtd2lsZG1hdGNoLmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBjbWRfX3dpbGRtYXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoYXJndltpXVswXSA9PSAnLycpCisJCQlkaWUoIkZvcndhcmQgc2xhc2ggaXMgbm90IGFsbG93ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiIKKwkJCSAgICAicGF0dGVybiBiZWNhdXNlIFdpbmRvd3MgZG9lcyBub3QgbGlrZSBpdC4gVXNlIGBYWFgvJyBpbnN0ZWFkLiIpOworCQllbHNlIGlmICghc3RybmNtcChhcmd2W2ldLCAiWFhYLyIsIDQpKQorCQkJYXJndltpXSArPSAzOworCX0KKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAid2lsZG1hdGNoIikpCisJCXJldHVybiAhIXdpbGRtYXRjaChhcmd2WzNdLCBhcmd2WzJdLCBXTV9QQVRITkFNRSk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiaXdpbGRtYXRjaCIpKQorCQlyZXR1cm4gISF3aWxkbWF0Y2goYXJndlszXSwgYXJndlsyXSwgV01fUEFUSE5BTUUgfCBXTV9DQVNFRk9MRCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicGF0aG1hdGNoIikpCisJCXJldHVybiAhIXdpbGRtYXRjaChhcmd2WzNdLCBhcmd2WzJdLCAwKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJpcGF0aG1hdGNoIikpCisJCXJldHVybiAhIXdpbGRtYXRjaChhcmd2WzNdLCBhcmd2WzJdLCBXTV9DQVNFRk9MRCk7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3Qtd2luZG93cy1uYW1lZC1waXBlLmMgYi90L2hlbHBlci90ZXN0LXdpbmRvd3MtbmFtZWQtcGlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTIxODMKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXdpbmRvd3MtbmFtZWQtcGlwZS5jCkBAIC0wLDAgKzEsNzIgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQorc3RhdGljIGNvbnN0IGNoYXIgKnVzYWdlX3N0cmluZyA9ICI8cGlwZS1maWxlbmFtZT4iOworCisjZGVmaW5lIFRFU1RfQlVGU0laRSAoNDA5NikKKworaW50IGNtZF9fd2luZG93c19uYW1lZF9waXBlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGhuYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IGVycjsKKwlIQU5ETEUgaDsKKwlCT09MIGNvbm5lY3RlZDsKKwljaGFyIGJ1ZltURVNUX0JVRlNJWkUgKyAxXTsKKworCWlmIChhcmdjIDwgMikKKwkJZ290byBwcmludF91c2FnZTsKKwlmaWxlbmFtZSA9IGFyZ3ZbMV07CisJaWYgKHN0cnBicmsoZmlsZW5hbWUsICIvXFwiKSkKKwkJZ290byBwcmludF91c2FnZTsKKwlzdHJidWZfYWRkZigmcGF0aG5hbWUsICIvLy4vcGlwZS8lcyIsIGZpbGVuYW1lKTsKKworCS8qCisJICogQ3JlYXRlIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBzZXJ2ZXIgc2lkZSBvZiB0aGUgbmFtZWQgcGlwZS4KKwkgKiBUaGlzIHdpbGwgYWxsb3cgZXhhY3RseSBvbmUgY2xpZW50IGluc3RhbmNlIHRvIGNvbm5lY3QgdG8gaXQuCisJICovCisJaCA9IENyZWF0ZU5hbWVkUGlwZUEoCisJCXBhdGhuYW1lLmJ1ZiwKKwkJUElQRV9BQ0NFU1NfSU5CT1VORCB8IEZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFLAorCQlQSVBFX1RZUEVfTUVTU0FHRSB8IFBJUEVfUkVBRE1PREVfTUVTU0FHRSB8IFBJUEVfV0FJVCwKKwkJUElQRV9VTkxJTUlURURfSU5TVEFOQ0VTLAorCQlURVNUX0JVRlNJWkUsIFRFU1RfQlVGU0laRSwgMCwgTlVMTCk7CisJaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJZXJyID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCWZwcmludGYoc3RkZXJyLCAiQ3JlYXRlTmFtZWRQaXBlIGZhaWxlZDogJXNcbiIsCisJCQlzdHJlcnJvcihlcnIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljb25uZWN0ZWQgPSBDb25uZWN0TmFtZWRQaXBlKGgsIE5VTEwpCisJCT8gVFJVRQorCQk6IChHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9QSVBFX0NPTk5FQ1RFRCk7CisJaWYgKCFjb25uZWN0ZWQpIHsKKwkJZXJyID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCWZwcmludGYoc3RkZXJyLCAiQ29ubmVjdE5hbWVkUGlwZSBmYWlsZWQ6ICVzXG4iLAorCQkJc3RyZXJyb3IoZXJyKSk7CisJCUNsb3NlSGFuZGxlKGgpOworCQlyZXR1cm4gZXJyOworCX0KKworCXdoaWxlICgxKSB7CisJCURXT1JEIG5icjsKKwkJQk9PTCBzdWNjZXNzID0gUmVhZEZpbGUoaCwgYnVmLCBURVNUX0JVRlNJWkUsICZuYnIsIE5VTEwpOworCQlpZiAoIXN1Y2Nlc3MgfHwgbmJyID09IDApCisJCQlicmVhazsKKwkJYnVmW25icl0gPSAwOworCisJCXdyaXRlKDEsIGJ1ZiwgbmJyKTsKKwl9CisKKwlEaXNjb25uZWN0TmFtZWRQaXBlKGgpOworCUNsb3NlSGFuZGxlKGgpOworCXJldHVybiAwOworCitwcmludF91c2FnZToKKwlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyAlc1xuIiwgYXJndlswXSwgdXNhZ2Vfc3RyaW5nKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC13cml0ZS1jYWNoZS5jIGIvdC9oZWxwZXIvdGVzdC13cml0ZS1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Mzc3MTcKLS0tIC9kZXYvbnVsbAorKysgYi90L2hlbHBlci90ZXN0LXdyaXRlLWNhY2hlLmMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKworaW50IGNtZF9fd3JpdGVfY2FjaGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jayA9IExPQ0tfSU5JVDsKKwlpbnQgaSwgY250ID0gMTsKKwlpZiAoYXJnYyA9PSAyKQorCQljbnQgPSBzdHJ0b2woYXJndlsxXSwgTlVMTCwgMCk7CisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCXJlYWRfY2FjaGUoKTsKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIExPQ0tfRElFX09OX0VSUk9SKTsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgQ09NTUlUX0xPQ0spKQorCQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC14bWwtZW5jb2RlLmMgYi90L2hlbHBlci90ZXN0LXhtbC1lbmNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjQ4YmJkCi0tLSAvZGV2L251bGwKKysrIGIvdC9oZWxwZXIvdGVzdC14bWwtZW5jb2RlLmMKQEAgLTAsMCArMSw4MCBAQAorI2luY2x1ZGUgInRlc3QtdG9vbC5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqdXRmOF9yZXBsYWNlX2NoYXJhY3RlciA9ICImI3hmZmZkOyI7CisKKy8qCisgKiBFbmNvZGVzIChwb3NzaWJseSBpbmNvcnJlY3QpIFVURi04IG9uIDxzdGRpbj4gdG8gPHN0ZG91dD4sIHRvIGJlIGVtYmVkZGVkCisgKiBpbiBhbiBYTUwgZmlsZS4KKyAqLworaW50IGNtZF9feG1sX2VuY29kZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgY2hhciBidWZbMTAyNF0sIHRtcFs0XSwgKnRtcDIgPSBOVUxMOworCXNzaXplX3QgY3VyID0gMCwgbGVuID0gMSwgcmVtYWluaW5nID0gMDsKKwl1bnNpZ25lZCBjaGFyIGNoOworCisJZm9yICg7OykgeworCQlpZiAoKytjdXIgPT0gbGVuKSB7CisJCQlsZW4gPSB4cmVhZCgwLCBidWYsIHNpemVvZihidWYpKTsKKwkJCWlmICghbGVuKQorCQkJCXJldHVybiAwOworCQkJaWYgKGxlbiA8IDApCisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgcmVhZCA8c3RkaW4+Iik7CisJCQljdXIgPSAwOworCQl9CisJCWNoID0gYnVmW2N1cl07CisKKwkJaWYgKHRtcDIpIHsKKwkJCWlmICgoY2ggJiAweGMwKSAhPSAweDgwKSB7CisJCQkJZnB1dHModXRmOF9yZXBsYWNlX2NoYXJhY3Rlciwgc3Rkb3V0KTsKKwkJCQl0bXAyID0gTlVMTDsKKwkJCQljdXItLTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCSp0bXAyID0gY2g7CisJCQl0bXAyKys7CisJCQlpZiAoLS1yZW1haW5pbmcgPT0gMCkgeworCQkJCWZ3cml0ZSh0bXAsIHRtcDIgLSB0bXAsIDEsIHN0ZG91dCk7CisJCQkJdG1wMiA9IE5VTEw7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghKGNoICYgMHg4MCkpIHsKKwkJCS8qIDB4eHh4eHh4ICovCisJCQlpZiAoY2ggPT0gJyYnKQorCQkJCWZwdXRzKCImYW1wOyIsIHN0ZG91dCk7CisJCQllbHNlIGlmIChjaCA9PSAnXCcnKQorCQkJCWZwdXRzKCImYXBvczsiLCBzdGRvdXQpOworCQkJZWxzZSBpZiAoY2ggPT0gJyInKQorCQkJCWZwdXRzKCImcXVvdDsiLCBzdGRvdXQpOworCQkJZWxzZSBpZiAoY2ggPT0gJzwnKQorCQkJCWZwdXRzKCImbHQ7Iiwgc3Rkb3V0KTsKKwkJCWVsc2UgaWYgKGNoID09ICc+JykKKwkJCQlmcHV0cygiJmd0OyIsIHN0ZG91dCk7CisJCQllbHNlIGlmIChjaCA+PSAweDIwKQorCQkJCWZwdXRjKGNoLCBzdGRvdXQpOworCQkJZWxzZSBpZiAoY2ggPT0gMHgwOSB8fCBjaCA9PSAweDBhIHx8IGNoID09IDB4MGQpCisJCQkJZnByaW50ZihzdGRvdXQsICImI3glMDJ4OyIsIGNoKTsKKwkJCWVsc2UKKwkJCQlmcHV0cyh1dGY4X3JlcGxhY2VfY2hhcmFjdGVyLCBzdGRvdXQpOworCQl9IGVsc2UgaWYgKChjaCAmIDB4ZTApID09IDB4YzApIHsKKwkJCS8qIDExMFhYWFh4IDEweHh4eHh4ICovCisJCQl0bXBbMF0gPSBjaDsKKwkJCXJlbWFpbmluZyA9IDE7CisJCQl0bXAyID0gdG1wICsgMTsKKwkJfSBlbHNlIGlmICgoY2ggJiAweGYwKSA9PSAweGUwKSB7CisJCQkvKiAxMTEwWFhYWCAxMFh4eHh4eCAxMHh4eHh4eCAqLworCQkJdG1wWzBdID0gY2g7CisJCQlyZW1haW5pbmcgPSAyOworCQkJdG1wMiA9IHRtcCArIDE7CisJCX0gZWxzZSBpZiAoKGNoICYgMHhmOCkgPT0gMHhmMCkgeworCQkJLyogMTExMTBYWFggMTBYWHh4eHggMTB4eHh4eHggMTB4eHh4eHggKi8KKwkJCXRtcFswXSA9IGNoOworCQkJcmVtYWluaW5nID0gMzsKKwkJCXRtcDIgPSB0bXAgKyAxOworCQl9IGVsc2UKKwkJCWZwdXRzKHV0ZjhfcmVwbGFjZV9jaGFyYWN0ZXIsIHN0ZG91dCk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90L2ludGVyb3AvLmdpdGlnbm9yZSBiL3QvaW50ZXJvcC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Yzc4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L2ludGVyb3AvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKKy90cmFzaCBkaXJlY3RvcnkqLworL3Rlc3QtcmVzdWx0cy8KKy8ucHJvdmUvCisvYnVpbGQvCmRpZmYgLS1naXQgYS90L2ludGVyb3AvTWFrZWZpbGUgYi90L2ludGVyb3AvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhNGJiYwotLS0gL2Rldi9udWxsCisrKyBiL3QvaW50ZXJvcC9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrCitleHBvcnQgR0lUX1RFU1RfT1BUSU9OUworCitTSEVMTF9QQVRIID89ICQoU0hFTEwpCitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKK1QgPSAkKHNvcnQgJCh3aWxkY2FyZCBpWzAtOV1bMC05XVswLTldWzAtOV0tKi5zaCkpCisKK2FsbDogJChUKQorCiskKFQpOgorCUBlY2hvICIqKiogJEAgKioqIjsgJyQoU0hFTExfUEFUSF9TUSknICRAICQoR0lUX1RFU1RfT1BUUykKKworY2xlYW46CisJcm0gLXJmIGJ1aWxkICJ0cmFzaCBkaXJlY3RvcnkiLiogdGVzdC1yZXN1bHRzCisKKy5QSE9OWTogYWxsIGNsZWFuICQoVCkKZGlmZiAtLWdpdCBhL3QvaW50ZXJvcC9SRUFETUUgYi90L2ludGVyb3AvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDQyYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L2ludGVyb3AvUkVBRE1FCkBAIC0wLDAgKzEsODUgQEAKK0dpdCB2ZXJzaW9uIGludGVyb3BlcmFiaWxpdHkgdGVzdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgaGFzIGludGVyb3BlcmFiaWxpdHkgdGVzdHMgZm9yIGdpdC4gRWFjaCBzY3JpcHQgaXMKK3NpbWlsYXIgdG8gdGhlIG5vcm1hbCB0ZXN0IHNjcmlwdHMgZm91bmQgaW4gdC8sIGJ1dCB3aXRoIHRoZSBhZGRlZCB0d2lzdAordGhhdCB0d28gc3BlY2lhbCB2ZXJzaW9ucyBvZiBnaXQsICJnaXQuYSIgYW5kICJnaXQuYiIsIGFyZSBhdmFpbGFibGUgaW4KK3RoZSBQQVRILiBJbmRpdmlkdWFsIHRlc3RzIGNhbiB0aGVuIGNoZWNrIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZQordHdvIHZlcnNpb25zLgorCitXaGVuIHlvdSBhZGQgYSBmZWF0dXJlIHRoYXQgaGFuZGxlcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGdpdAordmVyc2lvbnMsIGl0J3MgZW5jb3VyYWdlZCB0byBhZGQgYSB0ZXN0IGhlcmUgdG8gbWFrZSBzdXJlIGl0IGJlaGF2ZXMgYXMKK3lvdSBleHBlY3QuCisKKworUnVubmluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gcnVuIHRlc3RzIGlzIHRvIHNheSAibWFrZSIuICBUaGlzIHJ1bnMgYWxsCit0aGUgdGVzdHMgYWdhaW5zdCB0aGVpciBkZWZhdWx0IHZlcnNpb25zLgorCitZb3UgY2FuIHJ1biBhIHNpbmdsZSB0ZXN0IGxpa2U6CisKKyAgICAkIC4vaTAwMDAtYmFzaWMuc2gKKyAgICBvayAxIC0gYmFyZSBnaXQgaXMgZm9yYmlkZGVuCisgICAgb2sgMiAtIGdpdC5hIHZlcnNpb24gKHYxLjYuNi4zKQorICAgIG9rIDMgLSBnaXQuYiB2ZXJzaW9uICh2Mi4xMS4xKQorICAgICMgcGFzc2VkIGFsbCAzIHRlc3QocykKKyAgICAxLi4zCisKK0VhY2ggdGVzdCBjb250YWlucyBkZWZhdWx0IHZlcnNpb25zIHRvIHJ1biBhZ2FpbnN0LiBZb3UgbWF5IG92ZXJyaWRlCit0aGVzZSBieSBzZXR0aW5nIGBHSVRfVEVTVF9WRVJTSU9OX0FgIGFuZCBgR0lUX1RFU1RfVkVSU0lPTl9CYCBpbiB0aGUKK2Vudmlyb25tZW50LiBOb3RlIHRoYXQgbm90IGFsbCBjb21iaW5hdGlvbnMgd2lsbCBnaXZlIHNlbnNpYmxlIG91dGNvbWVzCitmb3IgYWxsIHRlc3RzIChlLmcuLCBhIHRlc3QgY2hlY2tpbmcgZm9yIGEgc3BlY2lmaWMgb2xkL25ldyBpbnRlcmFjdGlvbgorbWF5IHdhbnQgc29tZXRoaW5nICJvbGQiIGVub3VnaCIgYW5kIHNvbWV0aGluZyAibmV3IiBlbm91Z2g7IHNlZQoraW5kaXZpZHVhbCB0ZXN0cyBmb3IgZGV0YWlscykuCisKK1ZlcnNpb24gbmFtZXMgc2hvdWxkIGJlIHJlc29sdmFibGUgYXMgcmV2aXNpb25zIGluIHRoZSBjdXJyZW50CityZXBvc2l0b3J5LiBUaGV5IHdpbGwgYmUgZXhwb3J0ZWQgYW5kIGJ1aWx0IGFzIG5lZWRlZCB1c2luZyB0aGUKK2NvbmZpZy5tYWsgZmlsZXMgZm91bmQgYXQgdGhlIHJvb3Qgb2YgeW91ciB3b3JraW5nIHRyZWUuCisKK1RoZSBleGNlcHRpb24gaXMgdGhlIHNwZWNpYWwgdmVyc2lvbiAiLiIgd2hpY2ggdXNlcyB0aGUgY3VycmVudGx5LWJ1aWx0Citjb250ZW50cyBvZiB5b3VyIHdvcmtpbmcgdHJlZS4KKworWW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgKGluIHRoZSBlbnZpcm9ubWVudCBvciBpbiB5b3VyIGNvbmZpZy5tYWspOgorCisgICAgR0lUX0lOVEVST1BfTUFLRV9PUFRTCisJT3B0aW9ucyB0byBwYXNzIHRvIGBtYWtlYCB3aGVuIGJ1aWxkaW5nIGEgZ2l0IHZlcnNpb24gKGUuZy4sCisJYC1qOGApLgorCitZb3UgY2FuIGFsc28gcGFzcyBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMgdGFrZW4gYnkgb3JkaW5hcnkgZ2l0IHRlc3RzIChlLmcuLAorIi12IikuCisKKworTmFtaW5nIFRlc3RzCistLS0tLS0tLS0tLS0KKworVGhlIGludGVyb3AgdGVzdCBmaWxlcyBhcmUgbmFtZWQgbGlrZToKKworCWlOTk5OLXNob3J0LWRlc2NyaXB0aW9uLnNoCisKK3doZXJlIE4gaXMgYSBkZWNpbWFsIGRpZ2l0LiAgVGhlIHNhbWUgY29udmVudGlvbnMgZm9yIGNob29zaW5nIE5OTk4gYXMKK2ZvciBub3JtYWwgdGVzdHMgYXBwbHkuCisKKworV3JpdGluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitBbiBpbnRlcm9wIHRlc3Qgc2NyaXB0IHN0YXJ0cyBsaWtlIGEgbm9ybWFsIHNjcmlwdCwgZGVjbGFyaW5nIGEgZmV3Cit2YXJpYWJsZXMgYW5kIHRoZW4gaW5jbHVkaW5nIGludGVyb3AtbGliLnNoICh3aGljaCBpbmNsdWRlcyB0ZXN0LWxpYi5zaCkuCitCZXNpZGVzIHRlc3RfZGVzY3JpcHRpb24sIHlvdSBzaG91bGQgYWxzbyBzZXQgdGhlICRWRVJTSU9OX0EgYW5kICRWRVJTSU9OX0IKK3ZhcmlhYmxlcyB0byBnaXZlIHRoZSBkZWZhdWx0IHZlcnNpb25zIHRvIHRlc3QgYWdhaW5zdC4gU2VlIHQwMDAwLWJhc2ljLnNoIGZvcgorYW4gZXhhbXBsZS4KKworWW91IGNhbiB0aGVuIHVzZSB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFzIHVzdWFsLCB3aXRoIGEgZmV3IGRpZmZlcmVuY2VzOgorCisgIDEuIFRoZSBzcGVjaWFsIGNvbW1hbmRzICJnaXQuYSIgYW5kICJnaXQuYiIgY29ycmVzcG9uZCB0byB0aGUKKyAgICAgdHdvIHZlcnNpb25zLgorCisgIDIuIFlvdSBjYW5ub3QgY2FsbCBhIGJhcmUgImdpdCIuIFRoaXMgaXMgdG8gcHJldmVudCBhY2NpZGVudHMgd2hlcmUKKyAgICAgeW91IG1lYW50ICJnaXQuYSIgb3IgImdpdC5iIi4KKworICAzLiBUaGUgdHJhc2ggZGlyZWN0b3J5IGlzIF9ub3RfIGEgZ2l0IHJlcG9zaXRvcnkgYnkgZGVmYXVsdC4gWW91CisgICAgIHNob3VsZCBjcmVhdGUgb25lIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZlcnNpb24gb2YgZ2l0LgorCitBdCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQsIGNhbGwgdGVzdF9kb25lIGFzIHVzdWFsLgpkaWZmIC0tZ2l0IGEvdC9pbnRlcm9wL2kwMDAwLWJhc2ljLnNoIGIvdC9pbnRlcm9wL2kwMDAwLWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwM2U5MTkKLS0tIC9kZXYvbnVsbAorKysgYi90L2ludGVyb3AvaTAwMDAtYmFzaWMuc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKyMgTm90ZSB0aGF0IHRoaXMgdGVzdCBvbmx5IHdvcmtzIG9uIHJlYWwgdmVyc2lvbiBudW1iZXJzLAorIyBhcyBpdCBkZXBlbmRzIG9uIG1hdGNoaW5nIHRoZSBvdXRwdXQgdG8gImdpdCB2ZXJzaW9uIi4KK1ZFUlNJT05fQT12MS42LjYuMworVkVSU0lPTl9CPXYyLjExLjEKKwordGVzdF9kZXNjcmlwdGlvbj0nc2FuaXR5IHRlc3QgaW50ZXJvcCBsaWJyYXJ5JworLiAuL2ludGVyb3AtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmUgZ2l0IGlzIGZvcmJpZGRlbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJzaW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdC5hIHZlcnNpb24gKCRWRVJTSU9OX0EpIiAnCisJZWNobyBnaXQgdmVyc2lvbiAke1ZFUlNJT05fQSN2fSA+ZXhwZWN0ICYmCisJZ2l0LmEgdmVyc2lvbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQuYiB2ZXJzaW9uICgkVkVSU0lPTl9CKSIgJworCWVjaG8gZ2l0IHZlcnNpb24gJHtWRVJTSU9OX0Ijdn0gPmV4cGVjdCAmJgorCWdpdC5iIHZlcnNpb24gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L2ludGVyb3AvaTU1MDAtZ2l0LWRhZW1vbi5zaCBiL3QvaW50ZXJvcC9pNTUwMC1naXQtZGFlbW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkMjJlNDIKLS0tIC9kZXYvbnVsbAorKysgYi90L2ludGVyb3AvaTU1MDAtZ2l0LWRhZW1vbi5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKworVkVSU0lPTl9BPS4KK1ZFUlNJT05fQj12MS4wLjAKKworOiAke0xJQl9HSVRfREFFTU9OX1BPUlQ6PTU1MDB9CitMSUJfR0lUX0RBRU1PTl9DT01NQU5EPSdnaXQuYSBkYWVtb24nCisKK3Rlc3RfZGVzY3JpcHRpb249J2Nsb25lIGFuZCBmZXRjaCBieSBvbGRlciBjbGllbnQnCisuIC4vaW50ZXJvcC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdpdC1kYWVtb24uc2gKKworc3RhcnRfZ2l0X2RhZW1vbiAtLWV4cG9ydC1hbGwKKworcmVwbz0kR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgcmVwbyBzZXJ2ZWQgYnkgJFZFUlNJT05fQSIgJworCWdpdC5hIGluaXQgIiRyZXBvIiAmJgorCWdpdC5hIC1DICIkcmVwbyIgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHdpdGggJFZFUlNJT05fQiIgJworCWdpdC5iIGNsb25lICIkR0lUX0RBRU1PTl9VUkwvcmVwbyIgY2hpbGQgJiYKKwllY2hvIG9uZSA+ZXhwZWN0ICYmCisJZ2l0LmEgLUMgY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIHdpdGggJFZFUlNJT05fQiIgJworCWdpdC5hIC1DICIkcmVwbyIgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHdvICYmCisJKAorCQljZCBjaGlsZCAmJgorCQlnaXQuYiBmZXRjaAorCSkgJiYKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJZ2l0LmEgLUMgY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzIEZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L2ludGVyb3AvaTU3MDAtcHJvdG9jb2wtdHJhbnNpdGlvbi5zaCBiL3QvaW50ZXJvcC9pNTcwMC1wcm90b2NvbC10cmFuc2l0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3ZThlNTgKLS0tIC9kZXYvbnVsbAorKysgYi90L2ludGVyb3AvaTU3MDAtcHJvdG9jb2wtdHJhbnNpdGlvbi5zaApAQCAtMCwwICsxLDY4IEBACisjIS9iaW4vc2gKKworVkVSU0lPTl9BPS4KK1ZFUlNJT05fQj12Mi4wLjAKKworOiAke0xJQl9HSVRfREFFTU9OX1BPUlQ6PTU3MDB9CitMSUJfR0lUX0RBRU1PTl9DT01NQU5EPSdnaXQuYiBkYWVtb24nCisKK3Rlc3RfZGVzY3JpcHRpb249J2Nsb25lIGFuZCBmZXRjaCBieSBjbGllbnQgd2hvIGlzIHRyeWluZyB0byB1c2UgYSBuZXcgcHJvdG9jb2wnCisuIC4vaW50ZXJvcC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdpdC1kYWVtb24uc2gKKworc3RhcnRfZ2l0X2RhZW1vbiAtLWV4cG9ydC1hbGwKKworcmVwbz0kR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgcmVwbyBzZXJ2ZWQgYnkgJFZFUlNJT05fQiIgJworCWdpdC5iIGluaXQgIiRyZXBvIiAmJgorCWdpdC5iIC1DICIkcmVwbyIgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdDovLyBjbG9uZSB3aXRoICRWRVJTSU9OX0EgYW5kIHByb3RvY29sIHYxIiAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdC5hIC1jIHByb3RvY29sLnZlcnNpb249MSBjbG9uZSAiJEdJVF9EQUVNT05fVVJML3JlcG8iIGNoaWxkIDI+bG9nICYmCisJZ2l0LmEgLUMgY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQuYiAtQyAiJHJlcG8iIGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdyZXAgInZlcnNpb249MSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdDovLyBmZXRjaCB3aXRoICRWRVJTSU9OX0EgYW5kIHByb3RvY29sIHYxIiAnCisJZ2l0LmIgLUMgIiRyZXBvIiBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28gJiYKKwlnaXQuYiAtQyAiJHJlcG8iIGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0LmEgLUMgY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIGZldGNoIDI+bG9nICYmCisJZ2l0LmEgLUMgY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzIEZFVENIX0hFQUQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdyZXAgInZlcnNpb249MSIgbG9nICYmCisJISBncmVwICJ2ZXJzaW9uIDEiIGxvZworJworCitzdG9wX2dpdF9kYWVtb24KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIHJlcG8gc2VydmVkIGJ5ICRWRVJTSU9OX0IiICcKKwlnaXQuYiBpbml0IHBhcmVudCAmJgorCWdpdC5iIC1DIHBhcmVudCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmlsZTovLyBjbG9uZSB3aXRoICRWRVJTSU9OX0EgYW5kIHByb3RvY29sIHYxIiAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdC5hIC1jIHByb3RvY29sLnZlcnNpb249MSBjbG9uZSAtLXVwbG9hZC1wYWNrPSJnaXQuYiB1cGxvYWQtcGFjayIgcGFyZW50IGNoaWxkMiAyPmxvZyAmJgorCWdpdC5hIC1DIGNoaWxkMiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdC5iIC1DIHBhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkhIGdyZXAgInZlcnNpb24gMSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZpbGU6Ly8gZmV0Y2ggd2l0aCAkVkVSU0lPTl9BIGFuZCBwcm90b2NvbCB2MSIgJworCWdpdC5iIC1DIHBhcmVudCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28gJiYKKwlnaXQuYiAtQyBwYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQuYSAtQyBjaGlsZDIgLWMgcHJvdG9jb2wudmVyc2lvbj0xIGZldGNoIC0tdXBsb2FkLXBhY2s9ImdpdC5iIHVwbG9hZC1wYWNrIiAyPmxvZyAmJgorCWdpdC5hIC1DIGNoaWxkMiBsb2cgLTEgLS1mb3JtYXQ9JXMgRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJISBncmVwICJ2ZXJzaW9uIDEiIGxvZworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvaW50ZXJvcC9pbnRlcm9wLWxpYi5zaCBiL3QvaW50ZXJvcC9pbnRlcm9wLWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTBhMjkxCi0tLSAvZGV2L251bGwKKysrIGIvdC9pbnRlcm9wL2ludGVyb3AtbGliLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMgSW50ZXJvcGVyYWJpbGl0eSB0ZXN0aW5nIGZyYW1ld29yay4gRWFjaCBzY3JpcHQgc2hvdWxkIHNvdXJjZQorIyB0aGlzIGFmdGVyIHNldHRpbmcgZGVmYXVsdCAkVkVSU0lPTl9BIGFuZCAkVkVSU0lPTl9CIHZhcmlhYmxlcy4KKworLiAuLi8uLi9HSVQtQlVJTEQtT1BUSU9OUworSU5URVJPUF9ST09UPSQocHdkKQorQlVJTERfUk9PVD0kSU5URVJPUF9ST09UL2J1aWxkCisKK2J1aWxkX3ZlcnNpb24gKCkgeworCWlmIHRlc3QgLXogIiQxIgorCXRoZW4KKwkJZWNobyA+JjIgImVycm9yOiB0ZXN0IHNjcmlwdCBkaWQgbm90IHNldCBkZWZhdWx0IHZlcnNpb25zIgorCQlyZXR1cm4gMQorCWZpCisKKwlpZiB0ZXN0ICIkMSIgPSAiLiIKKwl0aGVuCisJCWdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsCisJCXJldHVybiAwCisJZmkKKworCXNoYTE9JChnaXQgcmV2LXBhcnNlICIkMV57dHJlZX0iKSB8fCByZXR1cm4gMQorCWRpcj0kQlVJTERfUk9PVC8kc2hhMQorCisJaWYgdGVzdCAtZSAiJGRpci8uYnVpbHQiCisJdGhlbgorCQllY2hvICIkZGlyIgorCQlyZXR1cm4gMAorCWZpCisKKwllY2hvID4mMiAiPT0+IEJ1aWxkaW5nICQxLi4uIgorCisJbWtkaXIgLXAgIiRkaXIiIHx8IHJldHVybiAxCisKKwkoY2QgIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cCkiICYmIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAiJHNoYTEiKSB8CisJKGNkICIkZGlyIiAmJiB0YXIgeCkgfHwKKwlyZXR1cm4gMQorCisJZm9yIGNvbmZpZyBpbiBjb25maWcubWFrIGNvbmZpZy5tYWsuYXV0b2dlbiBjb25maWcuc3RhdHVzCisJZG8KKwkJaWYgdGVzdCAtZSAiJElOVEVST1BfUk9PVC8uLi8uLi8kY29uZmlnIgorCQl0aGVuCisJCQljcCAiJElOVEVST1BfUk9PVC8uLi8uLi8kY29uZmlnIiAiJGRpci8iIHx8IHJldHVybiAxCisJCWZpCisJZG9uZQorCisJKAorCQljZCAiJGRpciIgJiYKKwkJbWFrZSAkR0lUX0lOVEVST1BfTUFLRV9PUFRTID4mMiAmJgorCQl0b3VjaCAuYnVpbHQKKwkpIHx8IHJldHVybiAxCisKKwllY2hvICIkZGlyIgorfQorCisjIE9sZCB2ZXJzaW9ucyBvZiBnaXQgZG9uJ3QgaGF2ZSBiaW4td3JhcHBlcnMsIHNvIGxldCdzIGdpdmUgYSByb3VnaCBlbXVsYXRpb24uCit3cmFwX2dpdCAoKSB7CisJd3JpdGVfc2NyaXB0ICIkMSIgPDwtRU9GCisJR0lUX0VYRUNfUEFUSD0iJDIiCisJZXhwb3J0IEdJVF9FWEVDX1BBVEgKKwlQQVRIPSIkMjpcJFBBVEgiCisJZXhwb3J0IEdJVF9FWEVDX1BBVEgKKwlleGVjIGdpdCAiXCRAIgorCUVPRgorfQorCitnZW5lcmF0ZV93cmFwcGVycyAoKSB7CisJbWtkaXIgLXAgLmJpbiAmJgorCXdyYXBfZ2l0IC5iaW4vZ2l0LmEgIiRESVJfQSIgJiYKKwl3cmFwX2dpdCAuYmluL2dpdC5iICIkRElSX0IiICYmCisJd3JpdGVfc2NyaXB0IC5iaW4vZ2l0IDw8LVxFT0YgJiYKKwllY2hvID4mMiBmYXRhbDogdGVzdCB0cmllZCB0byBydW4gZ2VuZXJpYyBnaXQKKwlleGl0IDEKKwlFT0YKKwlQQVRIPSQocHdkKS8uYmluOiRQQVRICit9CisKK1ZFUlNJT05fQT0ke0dJVF9URVNUX1ZFUlNJT05fQTotJFZFUlNJT05fQX0KK1ZFUlNJT05fQj0ke0dJVF9URVNUX1ZFUlNJT05fQjotJFZFUlNJT05fQn0KKworaWYgISBESVJfQT0kKGJ1aWxkX3ZlcnNpb24gIiRWRVJTSU9OX0EiKSB8fAorICAgISBESVJfQj0kKGJ1aWxkX3ZlcnNpb24gIiRWRVJTSU9OX0IiKQordGhlbgorCWVjaG8gPiYyICJmYXRhbDogdW5hYmxlIHRvIGJ1aWxkIGdpdCB2ZXJzaW9ucyIKKwlleGl0IDEKK2ZpCisKK1RFU1RfRElSRUNUT1JZPSRJTlRFUk9QX1JPT1QvLi4KK1RFU1RfT1VUUFVUX0RJUkVDVE9SWT0kSU5URVJPUF9ST09UCitURVNUX05PX0NSRUFURV9SRVBPPXQKKy4gIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1saWIuc2gKKworZ2VuZXJhdGVfd3JhcHBlcnMgfHwgZGllICJ1bmFibGUgdG8gc2V0IHVwIGludGVyb3AgdGVzdCBlbnZpcm9ubWVudCIKZGlmZiAtLWdpdCBhL3QvbGliLWJhc2guc2ggYi90L2xpYi1iYXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYjYwNjAKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1iYXNoLnNoCkBAIC0wLDAgKzEsMTkgQEAKKyMgU2hlbGwgbGlicmFyeSBzb3VyY2VkIGluc3RlYWQgb2YgLi90ZXN0LWxpYi5zaCBieSB0ZXN0cyB0aGF0IG5lZWQKKyMgdG8gcnVuIHVuZGVyIEJhc2g7IHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGVzdHMgb2YgdGhlIGNvbXBsZXRpb24KKyMgc2NyaXB0LgorCitpZiB0ZXN0IC1uICIkQkFTSCIgJiYgdGVzdCAteiAiJFBPU0lYTFlfQ09SUkVDVCIKK3RoZW4KKwkjIHdlIGFyZSBpbiBmdWxsLW9uIGJhc2ggbW9kZQorCXRydWUKK2VsaWYgdHlwZSBiYXNoID4vZGV2L251bGwgMj4mMQordGhlbgorCSMgZXhlY3V0ZSBpbiBmdWxsLW9uIGJhc2ggbW9kZQorCXVuc2V0IFBPU0lYTFlfQ09SUkVDVAorCWV4ZWMgYmFzaCAiJDAiICIkQCIKK2Vsc2UKKwllY2hvICcxLi4wICNTS0lQIHNraXBwaW5nIGJhc2ggY29tcGxldGlvbiB0ZXN0czsgYmFzaCBub3QgYXZhaWxhYmxlJworCWV4aXQgMAorZmkKKworLiAuL3Rlc3QtbGliLnNoCmRpZmYgLS1naXQgYS90L2xpYi1jcmVkZW50aWFsLnNoIGIvdC9saWItY3JlZGVudGlhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MzdiODMxCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItY3JlZGVudGlhbC5zaApAQCAtMCwwICsxLDMwNiBAQAorIyEvYmluL3NoCisKKyMgVHJ5IGEgc2V0IG9mIGNyZWRlbnRpYWwgaGVscGVyczsgdGhlIGV4cGVjdGVkIHN0ZGluLAorIyBzdGRvdXQgYW5kIHN0ZGVyciBzaG91bGQgYmUgcHJvdmlkZWQgb24gc3RkaW4sCisjIHNlcGFyYXRlZCBieSAiLS0iLgorY2hlY2soKSB7CisJY3JlZGVudGlhbF9vcHRzPQorCWNyZWRlbnRpYWxfY21kPSQxCisJc2hpZnQKKwlmb3IgYXJnIGluICIkQCI7IGRvCisJCWNyZWRlbnRpYWxfb3B0cz0iJGNyZWRlbnRpYWxfb3B0cyAtYyBjcmVkZW50aWFsLmhlbHBlcj0nJGFyZyciCisJZG9uZQorCXJlYWRfY2h1bmsgPnN0ZGluICYmCisJcmVhZF9jaHVuayA+ZXhwZWN0LXN0ZG91dCAmJgorCXJlYWRfY2h1bmsgPmV4cGVjdC1zdGRlcnIgJiYKKwlpZiAhIGV2YWwgImdpdCAkY3JlZGVudGlhbF9vcHRzIGNyZWRlbnRpYWwgJGNyZWRlbnRpYWxfY21kIDxzdGRpbiA+c3Rkb3V0IDI+c3RkZXJyIjsgdGhlbgorCQllY2hvICJnaXQgY3JlZGVudGlhbCBmYWlsZWQgd2l0aCBjb2RlICQ/IiAmJgorCQljYXQgc3RkZXJyICYmCisJCWZhbHNlCisJZmkgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtc3Rkb3V0IHN0ZG91dCAmJgorCXRlc3RfY21wIGV4cGVjdC1zdGRlcnIgc3RkZXJyCit9CisKK3JlYWRfY2h1bmsoKSB7CisJd2hpbGUgcmVhZCBsaW5lOyBkbworCQljYXNlICIkbGluZSIgaW4KKwkJLS0pIGJyZWFrIDs7CisJCSopIGVjaG8gIiRsaW5lIiA7OworCQllc2FjCisJZG9uZQorfQorCisjIENsZWFyIGFueSByZXNpZHVhbCBkYXRhIGZyb20gcHJldmlvdXMgdGVzdHMuIFdlIG9ubHkKKyMgbmVlZCB0aGlzIHdoZW4gdGVzdGluZyB0aGlyZC1wYXJ0eSBoZWxwZXJzIHdoaWNoIHJlYWQgYW5kCisjIHdyaXRlIG91dHNpZGUgb2Ygb3VyIHRyYXNoLWRpcmVjdG9yeSBzYW5kYm94LgorIworIyBEb24ndCBib3RoZXIgY2hlY2tpbmcgZm9yIHN1Y2Nlc3MgaGVyZSwgYXMgaXQgaXMKKyMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGVzdHMgYW5kIHJlcHJlc2VudHMgYSBiZXN0IGVmZm9ydCB0bworIyBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuCitoZWxwZXJfdGVzdF9jbGVhbigpIHsKKwlyZWplY3QgJDEgaHR0cHMgZXhhbXBsZS5jb20gc3RvcmUtdXNlcgorCXJlamVjdCAkMSBodHRwcyBleGFtcGxlLmNvbSB1c2VyMQorCXJlamVjdCAkMSBodHRwcyBleGFtcGxlLmNvbSB1c2VyMgorCXJlamVjdCAkMSBodHRwIHBhdGgudGxkIHVzZXIKKwlyZWplY3QgJDEgaHR0cHMgdGltZW91dC50bGQgdXNlcgorCXJlamVjdCAkMSBodHRwcyBzc28udGxkCit9CisKK3JlamVjdCgpIHsKKwkoCisJCWVjaG8gcHJvdG9jb2w9JDIKKwkJZWNobyBob3N0PSQzCisJCWVjaG8gdXNlcm5hbWU9JDQKKwkpIHwgZ2l0IC1jIGNyZWRlbnRpYWwuaGVscGVyPSQxIGNyZWRlbnRpYWwgcmVqZWN0Cit9CisKK2hlbHBlcl90ZXN0KCkgeworCUhFTFBFUj0kMQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBoYXMgbm8gZXhpc3RpbmcgZGF0YSIgJworCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cHM6Ly9leGFtcGxlLmNvbSdcJyc6CisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9hc2twYXNzLXVzZXJuYW1lQGV4YW1wbGUuY29tJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBzdG9yZXMgcGFzc3dvcmQiICcKKwkJY2hlY2sgYXBwcm92ZSAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1zdG9yZS11c2VyCisJCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBjYW4gcmV0cmlldmUgcGFzc3dvcmQiICcKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXN0b3JlLXVzZXIKKwkJcGFzc3dvcmQ9c3RvcmUtcGFzcworCQktLQorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHJlcXVpcmVzIG1hdGNoaW5nIHByb3RvY29sIiAnCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHAKKwkJaG9zdD1leGFtcGxlLmNvbQorCQktLQorCQlwcm90b2NvbD1odHRwCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cDovL2V4YW1wbGUuY29tJ1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwOi8vYXNrcGFzcy11c2VybmFtZUBleGFtcGxlLmNvbSdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgcmVxdWlyZXMgbWF0Y2hpbmcgaG9zdCIgJworCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PW90aGVyLnRsZAorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PW90aGVyLnRsZAorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwczovL290aGVyLnRsZCdcJyc6CisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9hc2twYXNzLXVzZXJuYW1lQG90aGVyLnRsZCdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgcmVxdWlyZXMgbWF0Y2hpbmcgdXNlcm5hbWUiICcKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1vdGhlcgorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPW90aGVyCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL290aGVyQGV4YW1wbGUuY29tJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSByZXF1aXJlcyBtYXRjaGluZyBwYXRoIiAnCisJCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwudXNlaHR0cHBhdGggdHJ1ZSAmJgorCQljaGVjayBhcHByb3ZlICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwCisJCWhvc3Q9cGF0aC50bGQKKwkJcGF0aD1mb28uZ2l0CisJCXVzZXJuYW1lPXVzZXIKKwkJcGFzc3dvcmQ9cGFzcworCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cAorCQlob3N0PXBhdGgudGxkCisJCXBhdGg9YmFyLmdpdAorCQktLQorCQlwcm90b2NvbD1odHRwCisJCWhvc3Q9cGF0aC50bGQKKwkJcGF0aD1iYXIuZ2l0CisJCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHA6Ly9wYXRoLnRsZC9iYXIuZ2l0J1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwOi8vYXNrcGFzcy11c2VybmFtZUBwYXRoLnRsZC9iYXIuZ2l0J1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBjYW4gZm9yZ2V0IGhvc3QiICcKKwkJY2hlY2sgcmVqZWN0ICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCUVPRgorCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cHM6Ly9leGFtcGxlLmNvbSdcJyc6CisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9hc2twYXNzLXVzZXJuYW1lQGV4YW1wbGUuY29tJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBjYW4gc3RvcmUgbXVsdGlwbGUgdXNlcnMiICcKKwkJY2hlY2sgYXBwcm92ZSAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMQorCQlwYXNzd29yZD1wYXNzMQorCQlFT0YKKwkJY2hlY2sgYXBwcm92ZSAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMgorCQlwYXNzd29yZD1wYXNzMgorCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMQorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCXBhc3N3b3JkPXBhc3MxCisJCUVPRgorCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIyCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjIKKwkJcGFzc3dvcmQ9cGFzczIKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSBjYW4gZm9yZ2V0IHVzZXIiICcKKwkJY2hlY2sgcmVqZWN0ICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCUVPRgorCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjEKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vdXNlcjFAZXhhbXBsZS5jb20nXCcnOgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHJlbWVtYmVycyBvdGhlciB1c2VyIiAnCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjIKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMgorCQlwYXNzd29yZD1wYXNzMgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIGNhbiBzdG9yZSBlbXB0eSB1c2VybmFtZSIgJworCQljaGVjayBhcHByb3ZlICRIRUxQRVIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PXNzby50bGQKKwkJdXNlcm5hbWU9CisJCXBhc3N3b3JkPQorCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1zc28udGxkCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9c3NvLnRsZAorCQl1c2VybmFtZT0KKwkJcGFzc3dvcmQ9CisJCUVPRgorCScKK30KKworaGVscGVyX3Rlc3RfdGltZW91dCgpIHsKKwlIRUxQRVI9IiQqIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSB0aW1lcyBvdXQiICcKKwkJY2hlY2sgYXBwcm92ZSAiJEhFTFBFUiIgPDwtXEVPRiAmJgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PXRpbWVvdXQudGxkCisJCXVzZXJuYW1lPXVzZXIKKwkJcGFzc3dvcmQ9cGFzcworCQlFT0YKKwkJc2xlZXAgMiAmJgorCQljaGVjayBmaWxsICIkSEVMUEVSIiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9dGltZW91dC50bGQKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD10aW1lb3V0LnRsZAorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwczovL3RpbWVvdXQudGxkJ1wnJzoKKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Fza3Bhc3MtdXNlcm5hbWVAdGltZW91dC50bGQnXCcnOgorCQlFT0YKKwknCit9CisKK3dyaXRlX3NjcmlwdCBhc2twYXNzIDw8XEVPRgorZWNobyA+JjIgYXNrcGFzczogJCoKK3doYXQ9JChlY2hvICQxIHwgY3V0IC1kIiAiIC1mMSB8IHRyIEEtWiBhLXogfCB0ciAtY2QgYS16KQorZWNobyAiYXNrcGFzcy0kd2hhdCIKK0VPRgorR0lUX0FTS1BBU1M9IiRQV0QvYXNrcGFzcyIKK2V4cG9ydCBHSVRfQVNLUEFTUwpkaWZmIC0tZ2l0IGEvdC9saWItY3ZzLnNoIGIvdC9saWItY3ZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmJjZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1jdnMuc2gKQEAgLTAsMCArMSw3OCBAQAorIyBTaGVsbCBsaWJyYXJ5IHNvdXJjZWQgaW5zdGVhZCBvZiAuL3Rlc3QtbGliLnNoIGJ5IGN2c2ltcG9ydCB0ZXN0cy4KKworLiAuL3Rlc3QtbGliLnNoCisKK3Vuc2V0IENWU19TRVJWRVIKKworaWYgISB0eXBlIGN2cyA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgY3ZzaW1wb3J0IHRlc3RzLCBjdnMgbm90IGZvdW5kJworCXRlc3RfZG9uZQorZmkKKworQ1ZTPSJjdnMgLWYiCitleHBvcnQgQ1ZTCisKK2N2c3BzX3ZlcnNpb249JChjdnNwcyAtaCAyPiYxIHwgc2VkIC1uZSAncy9jdnNwcyB2ZXJzaW9uIC8vcCcpCitjYXNlICIkY3ZzcHNfdmVyc2lvbiIgaW4KKzIuMSB8IDIuMiopCisJOzsKKycnKQorCXNraXBfYWxsPSdza2lwcGluZyBjdnNpbXBvcnQgdGVzdHMsIGN2c3BzIG5vdCBmb3VuZCcKKwl0ZXN0X2RvbmUKKwk7OworKikKKwlza2lwX2FsbD0nc2tpcHBpbmcgY3ZzaW1wb3J0IHRlc3RzLCB1bnN1cHBvcnRlZCBjdnNwcyB2ZXJzaW9uJworCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3NldHVwX2N2c190ZXN0X3JlcG9zaXRvcnkgKCkgeworCUNWU1JPT1Q9IiQocHdkKS8uY3Zzcm9vdCIgJiYKKwljcCAtciAiJFRFU1RfRElSRUNUT1JZLyQxL2N2c3Jvb3QiICIkQ1ZTUk9PVCIgJiYKKwlleHBvcnQgQ1ZTUk9PVAorfQorCit0ZXN0X2N2c19jbyAoKSB7CisJIyBVc2FnZTogdGVzdF9jdnNfY28gQlJBTkNIX05BTUUKKwlybSAtcmYgbW9kdWxlLWN2cy0iJDEiCisJaWYgWyAiJDEiID0gIm1hc3RlciIgXQorCXRoZW4KKwkJJENWUyBjbyAtUCAtZCBtb2R1bGUtY3ZzLSIkMSIgLUEgbW9kdWxlCisJZWxzZQorCQkkQ1ZTIGNvIC1QIC1kIG1vZHVsZS1jdnMtIiQxIiAtciAiJDEiIG1vZHVsZQorCWZpCit9CisKK3Rlc3RfZ2l0X2NvICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2dpdF9jbyBCUkFOQ0hfTkFNRQorCShjZCBtb2R1bGUtZ2l0ICYmIGdpdCBjaGVja291dCAiJDEiKQorfQorCit0ZXN0X2NtcF9icmFuY2hfZmlsZSAoKSB7CisJIyBVc2FnZTogdGVzdF9jbXBfYnJhbmNoX2ZpbGUgQlJBTkNIX05BTUUgUEFUSAorCSMgVGhlIGJyYW5jaCBtdXN0IGFscmVhZHkgYmUgY2hlY2tlZCBvdXQgb2YgQ1ZTIGFuZCBnaXQuCisJdGVzdF9jbXAgbW9kdWxlLWN2cy0iJDEiLyIkMiIgbW9kdWxlLWdpdC8iJDIiCit9CisKK3Rlc3RfY21wX2JyYW5jaF90cmVlICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2NtcF9icmFuY2hfdHJlZSBCUkFOQ0hfTkFNRQorCSMgQ2hlY2sgQlJBTkNIX05BTUUgb3V0IG9mIENWUyBhbmQgZ2l0IGFuZCBtYWtlIHN1cmUgdGhhdCBhbGwKKwkjIG9mIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJlIGlkZW50aWNhbC4KKworCXRlc3RfY3ZzX2NvICIkMSIgJiYKKwl0ZXN0X2dpdF9jbyAiJDEiICYmCisJKAorCQljZCBtb2R1bGUtY3ZzLSIkMSIKKwkJZmluZCAuIC10eXBlIGQgLW5hbWUgQ1ZTIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludAorCSkgfCBzb3J0ID5tb2R1bGUtY3ZzLSIkMSIubGlzdCAmJgorCSgKKwkJY2QgbW9kdWxlLWdpdAorCQlmaW5kIC4gLXR5cGUgZCAtbmFtZSAuZ2l0IC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludAorCSkgfCBzb3J0ID5tb2R1bGUtZ2l0LSIkMSIubGlzdCAmJgorCXRlc3RfY21wIG1vZHVsZS1jdnMtIiQxIi5saXN0IG1vZHVsZS1naXQtIiQxIi5saXN0ICYmCisJY2F0IG1vZHVsZS1jdnMtIiQxIi5saXN0IHwgd2hpbGUgcmVhZCBmCisJZG8KKwkJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgIiQxIiAiJGYiIHx8IHJldHVybiAxCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvdC9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaCBiL3QvbGliLWRpZmYtYWx0ZXJuYXRpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxZTQwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWRpZmYtYWx0ZXJuYXRpdmUuc2gKQEAgLTAsMCArMSwxNzAgQEAKKyMgSGVscGVycyBzaGFyZWQgYnkgdGhlIHRlc3Qgc2NyaXB0cyBmb3IgZGlmZiBhbGdvcml0aG1zIChwYXRpZW5jZSwKKyMgaGlzdG9ncmFtLCBldGMpLgorCit0ZXN0X2RpZmZfZnJvYm5pdHooKSB7CisJY2F0ID5maWxlMSA8PFxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvLyBGcm9icyBmb28gaGVhcnRpbHkKK2ludCBmcm9ibml0eihpbnQgZm9vKQoreworICAgIGludCBpOworICAgIGZvcihpID0gMDsgaSA8IDEwOyBpKyspCisgICAgeworICAgICAgICBwcmludGYoIllvdXIgYW5zd2VyIGlzOiAiKTsKKyAgICAgICAgcHJpbnRmKCIlZFxuIiwgZm9vKTsKKyAgICB9Cit9CisKK2ludCBmYWN0KGludCBuKQoreworICAgIGlmKG4gPiAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhY3Qobi0xKSAqIG47CisgICAgfQorICAgIHJldHVybiAxOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZnJvYm5pdHooZmFjdCgxMCkpOworfQorRU9GCisKKwljYXQgPmZpbGUyIDw8XEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBmaWIoaW50IG4pCit7CisgICAgaWYobiA+IDIpCisgICAgeworICAgICAgICByZXR1cm4gZmliKG4tMSkgKyBmaWIobi0yKTsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKKy8vIEZyb2JzIGZvbyBoZWFydGlseQoraW50IGZyb2JuaXR6KGludCBmb28pCit7CisgICAgaW50IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50ZigiJWRcbiIsIGZvbyk7CisgICAgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgZnJvYm5pdHooZmliKDEwKSk7Cit9CitFT0YKKworCWZpbGUxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSkKKwlmaWxlMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBmaWxlMikpCisJY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUyCitpbmRleCAkZmlsZTEuLiRmaWxlMiAxMDA2NDQKKy0tLSBhL2ZpbGUxCisrKysgYi9maWxlMgorQEAgLTEsMjYgKzEsMjUgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKytpbnQgZmliKGludCBuKQorK3sKKysgICAgaWYobiA+IDIpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKyAvLyBGcm9icyBmb28gaGVhcnRpbHkKKyBpbnQgZnJvYm5pdHooaW50IGZvbykKKyB7CisgICAgIGludCBpOworICAgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgICB7CistICAgICAgICBwcmludGYoIllvdXIgYW5zd2VyIGlzOiAiKTsKKyAgICAgICAgIHByaW50ZigiJWRcbiIsIGZvbyk7CisgICAgIH0KKyB9CisgCistaW50IGZhY3QoaW50IG4pCisteworLSAgICBpZihuID4gMSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZhY3Qobi0xKSAqIG47CistICAgIH0KKy0gICAgcmV0dXJuIDE7CistfQorLQorIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CistICAgIGZyb2JuaXR6KGZhY3QoMTApKTsKKysgICAgZnJvYm5pdHooZmliKDEwKSk7CisgfQorRU9GCisKKwlTVFJBVEVHWT0kMQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJFNUUkFURUdZIGRpZmYiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAiLS0kU1RSQVRFR1kiIGZpbGUxIGZpbGUyID4gb3V0cHV0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkU1RSQVRFR1kgZGlmZiBvdXRwdXQgaXMgdmFsaWQiICcKKwkJbXYgZmlsZTIgZXhwZWN0ICYmCisJCWdpdCBhcHBseSA8IG91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKKwknCit9CisKK3Rlc3RfZGlmZl91bmlxdWUoKSB7CisJY2F0ID51bmlxMSA8PFxFT0YKKzEKKzIKKzMKKzQKKzUKKzYKK0VPRgorCisJY2F0ID51bmlxMiA8PFxFT0YKK2EKK2IKK2MKK2QKK2UKK2YKK0VPRgorCisJdW5pcTE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgdW5pcTEpKQorCXVuaXEyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHVuaXEyKSkKKwljYXQgPmV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL3VuaXExIGIvdW5pcTIKK2luZGV4ICR1bmlxMS4uJHVuaXEyIDEwMDY0NAorLS0tIGEvdW5pcTEKKysrKyBiL3VuaXEyCitAQCAtMSw2ICsxLDYgQEAKKy0xCistMgorLTMKKy00CistNQorLTYKKythCisrYgorK2MKKytkCisrZQorK2YKK0VPRgorCisJU1RSQVRFR1k9JDEKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsZXRlbHkgZGlmZmVyZW50IGZpbGVzJyAnCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggIi0tJFNUUkFURUdZIiB1bmlxMSB1bmlxMiA+IG91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJJworfQorCmRpZmYgLS1naXQgYS90L2xpYi1nZXR0ZXh0LnNoIGIvdC9saWItZ2V0dGV4dC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTM5YjQyCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2V0dGV4dC5zaApAQCAtMCwwICsxLDYzIEBACisjIEluaXRpYWxpemF0aW9uIGFuZCBJY2VsYW5kaWMgbG9jYWxlIGZvciBiYXNpYyBnaXQgaTE4biB0ZXN0cywKKyMgd2hpY2ggc291cmNlIHRoaXMgc2NyaXB0bGV0IGluc3RlYWQgb2YgLi90ZXN0LWxpYi5zaC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKKy4gLi90ZXN0LWxpYi5zaAorCitHSVRfVEVYVERPTUFJTkRJUj0iJEdJVF9CVUlMRF9ESVIvcG8vYnVpbGQvbG9jYWxlIgorR0lUX1BPX1BBVEg9IiRHSVRfQlVJTERfRElSL3BvIgorZXhwb3J0IEdJVF9URVhURE9NQUlORElSIEdJVF9QT19QQVRICisKK2lmIHRlc3QgLW4gIiRHSVRfVEVTVF9JTlNUQUxMRUQiCit0aGVuCisJLiAiJChnaXQgLS1leGVjLXBhdGgpIi9naXQtc2gtaTE4bgorZWxzZQorCS4gIiRHSVRfQlVJTERfRElSIi9naXQtc2gtaTE4bgorZmkKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBHRVRURVhUICYmIHRlc3RfaGF2ZV9wcmVyZXEgQ19MT0NBTEVfT1VUUFVUCit0aGVuCisJIyBpc19JUy5VVEYtOCBvbiBTb2xhcmlzIGFuZCBGcmVlQlNELCBpc19JUy51dGY4IG9uIERlYmlhbgorCWlzX0lTX2xvY2FsZT0kKGxvY2FsZSAtYSAyPi9kZXYvbnVsbCB8CisJCXNlZCAtbiAnL15pc19JU1wuW3VVXVt0VF1bZkZdLSo4JC97CisJCXAKKwkJcQorCX0nKQorCSMgaXNfSVMuSVNPODg1OS0xIG9uIFNvbGFyaXMgYW5kIEZyZWVCU0QsIGlzX0lTLmlzbzg4NTkxIG9uIERlYmlhbgorCWlzX0lTX2lzb19sb2NhbGU9JChsb2NhbGUgLWEgMj4vZGV2L251bGwgfAorCQlzZWQgLW4gJy9eaXNfSVNcLltpSV1bc1NdW29PXTg4NTktKjEkL3sKKwkJcAorCQlxCisJfScpCisKKwkjIEV4cG9ydCB0aGVtIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIHRoZSB0MDIwMi90ZXN0LnBsIFBlcmwKKwkjIHRlc3QgY2FuIHVzZSBpdCB0b28KKwlleHBvcnQgaXNfSVNfbG9jYWxlIGlzX0lTX2lzb19sb2NhbGUKKworCWlmIHRlc3QgLW4gIiRpc19JU19sb2NhbGUiICYmCisJCXRlc3QgJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSAhPSAiZmFsbHRocm91Z2giCisJdGhlbgorCQkjIFNvbWUgb2YgdGhlIHRlc3RzIG5lZWQgdGhlIHJlZmVyZW5jZSBJY2VsYW5kaWMgbG9jYWxlCisJCXRlc3Rfc2V0X3ByZXJlcSBHRVRURVhUX0xPQ0FMRQorCisJCSMgRXhwb3J0aW5nIGZvciB0MDIwMi90ZXN0LnBsCisJCUdFVFRFWFRfTE9DQUxFPTEKKwkJZXhwb3J0IEdFVFRFWFRfTE9DQUxFCisJCXNheSAiIyBsaWItZ2V0dGV4dDogRm91bmQgJyRpc19JU19sb2NhbGUnIGFzIGFuIGlzX0lTIFVURi04IGxvY2FsZSIKKwllbHNlCisJCXNheSAiIyBsaWItZ2V0dGV4dDogTm8gaXNfSVMgVVRGLTggbG9jYWxlIGF2YWlsYWJsZSIKKwlmaQorCisJaWYgdGVzdCAtbiAiJGlzX0lTX2lzb19sb2NhbGUiICYmCisJCXRlc3QgJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSAhPSAiZmFsbHRocm91Z2giCisJdGhlbgorCQkjIFNvbWUgb2YgdGhlIHRlc3RzIG5lZWQgdGhlIHJlZmVyZW5jZSBJY2VsYW5kaWMgbG9jYWxlCisJCXRlc3Rfc2V0X3ByZXJlcSBHRVRURVhUX0lTT19MT0NBTEUKKworCQlzYXkgIiMgbGliLWdldHRleHQ6IEZvdW5kICckaXNfSVNfaXNvX2xvY2FsZScgYXMgYW4gaXNfSVMgSVNPLTg4NTktMSBsb2NhbGUiCisJZWxzZQorCQlzYXkgIiMgbGliLWdldHRleHQ6IE5vIGlzX0lTIElTTy04ODU5LTEgbG9jYWxlIGF2YWlsYWJsZSIKKwlmaQorZmkKZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1kYWVtb24uc2ggYi90L2xpYi1naXQtZGFlbW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjU2OTIKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1naXQtZGFlbW9uLnNoCkBAIC0wLDAgKzEsMTIwIEBACisjIFNoZWxsIGxpYnJhcnkgdG8gcnVuIGdpdC1kYWVtb24gaW4gdGVzdHMuICBFbmRzIHRoZSB0ZXN0IGVhcmx5IGlmCisjIEdJVF9URVNUX0dJVF9EQUVNT04gaXMgbm90IHNldC4KKyMKKyMgVXNhZ2U6CisjCisjCS4gLi90ZXN0LWxpYi5zaAorIwkuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1naXQtZGFlbW9uLnNoCisjCXN0YXJ0X2dpdF9kYWVtb24KKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4uJyAnCisjCQkuLi4KKyMJJworIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzIC4uLgorIworIwl0ZXN0X2RvbmUKKworaWYgISB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0dJVF9EQUVNT04gdHJ1ZQordGhlbgorCXNraXBfYWxsPSJnaXQtZGFlbW9uIHRlc3RpbmcgZGlzYWJsZWQgKHVuc2V0IEdJVF9URVNUX0dJVF9EQUVNT04gdG8gZW5hYmxlKSIKKwl0ZXN0X2RvbmUKK2ZpCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgIVBJUEUKK3RoZW4KKwl0ZXN0X3NraXBfb3JfZGllIEdJVF9URVNUX0dJVF9EQUVNT04gImZpbGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgRklGT3MiCitmaQorCit0ZXN0X3NldF9wb3J0IExJQl9HSVRfREFFTU9OX1BPUlQKKworR0lUX0RBRU1PTl9QSUQ9CitHSVRfREFFTU9OX1BJREZJTEU9IiRQV0QiL2RhZW1vbi5waWQKK0dJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIPSIkUFdEIi9yZXBvCitHSVRfREFFTU9OX0hPU1RfUE9SVD0xMjcuMC4wLjE6JExJQl9HSVRfREFFTU9OX1BPUlQKK0dJVF9EQUVNT05fVVJMPWdpdDovLyRHSVRfREFFTU9OX0hPU1RfUE9SVAorCityZWdpc3RlcmVkX3N0b3BfZ2l0X2RhZW1vbl9hdGV4aXRfaGFuZGxlcj0KK3N0YXJ0X2dpdF9kYWVtb24oKSB7CisJaWYgdGVzdCAtbiAiJEdJVF9EQUVNT05fUElEIgorCXRoZW4KKwkJZXJyb3IgInN0YXJ0X2dpdF9kYWVtb24gYWxyZWFkeSBjYWxsZWQiCisJZmkKKworCW1rZGlyIC1wICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiCisKKwkjIE9uZSBvZiB0aGUgdGVzdCBzY3JpcHRzIHN0b3BzIGFuZCB0aGVuIHJlLXN0YXJ0cyAnZ2l0IGRhZW1vbicuCisJIyBEb24ndCByZWdpc3RlciBhbmQgdGhlbiBydW4gdGhlIHNhbWUgYXRleGl0IGhhbmRsZXJzIHNldmVyYWwgdGltZXMuCisJaWYgdGVzdCAteiAiJHJlZ2lzdGVyZWRfc3RvcF9naXRfZGFlbW9uX2F0ZXhpdF9oYW5kbGVyIgorCXRoZW4KKwkJdGVzdF9hdGV4aXQgJ3N0b3BfZ2l0X2RhZW1vbicKKwkJcmVnaXN0ZXJlZF9zdG9wX2dpdF9kYWVtb25fYXRleGl0X2hhbmRsZXI9QWxyZWFkeURvbmUKKwlmaQorCisJc2F5ID4mMyAiU3RhcnRpbmcgZ2l0IGRhZW1vbiAuLi4iCisJbWtmaWZvIGdpdF9kYWVtb25fb3V0cHV0CisJJHtMSUJfR0lUX0RBRU1PTl9DT01NQU5EOi1naXQgZGFlbW9ufSBcCisJCS0tbGlzdGVuPTEyNy4wLjAuMSAtLXBvcnQ9IiRMSUJfR0lUX0RBRU1PTl9QT1JUIiBcCisJCS0tcmV1c2VhZGRyIC0tdmVyYm9zZSAtLXBpZC1maWxlPSIkR0lUX0RBRU1PTl9QSURGSUxFIiBcCisJCS0tYmFzZS1wYXRoPSIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiIFwKKwkJIiRAIiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIiBcCisJCT4mMyAyPmdpdF9kYWVtb25fb3V0cHV0ICYKKwlHSVRfREFFTU9OX1BJRD0kIQorCXsKKwkJcmVhZCAtciBsaW5lIDwmNworCQlwcmludGYgIiVzXG4iICIkbGluZSIgPiY0CisJCWNhdCA8JjcgPiY0ICYKKwl9IDc8Z2l0X2RhZW1vbl9vdXRwdXQgJiYKKworCSMgQ2hlY2sgZXhwZWN0ZWQgb3V0cHV0CisJaWYgdGVzdCB4IiQoZXhwciAiJGxpbmUiIDogIlxbWzAtOV0qXF0gXCguKlwpIikiICE9IHgiUmVhZHkgdG8gcnVtYmxlIgorCXRoZW4KKwkJa2lsbCAiJEdJVF9EQUVNT05fUElEIgorCQl3YWl0ICIkR0lUX0RBRU1PTl9QSUQiCisJCXVuc2V0IEdJVF9EQUVNT05fUElECisJCXRlc3Rfc2tpcF9vcl9kaWUgR0lUX1RFU1RfR0lUX0RBRU1PTiBcCisJCQkiZ2l0IGRhZW1vbiBmYWlsZWQgdG8gc3RhcnQiCisJZmkKK30KKworc3RvcF9naXRfZGFlbW9uKCkgeworCWlmIHRlc3QgLXogIiRHSVRfREFFTU9OX1BJRCIKKwl0aGVuCisJCXJldHVybgorCWZpCisKKwkjIGtpbGwgZ2l0LWRhZW1vbiBjaGlsZCBvZiBnaXQKKwlzYXkgPiYzICJTdG9wcGluZyBnaXQgZGFlbW9uIC4uLiIKKwlraWxsICIkR0lUX0RBRU1PTl9QSUQiCisJd2FpdCAiJEdJVF9EQUVNT05fUElEIiA+JjMgMj4mNAorCXJldD0kPworCWlmICEgdGVzdF9tYXRjaF9zaWduYWwgMTUgJHJldAorCXRoZW4KKwkJZXJyb3IgImdpdCBkYWVtb24gZXhpdGVkIHdpdGggc3RhdHVzOiAkcmV0IgorCWZpCisJa2lsbCAiJChjYXQgIiRHSVRfREFFTU9OX1BJREZJTEUiKSIgMj4vZGV2L251bGwKKwlHSVRfREFFTU9OX1BJRD0KKwlybSAtZiBnaXRfZGFlbW9uX291dHB1dCAiJEdJVF9EQUVNT05fUElERklMRSIKK30KKworIyBBIHN0cmlwcGVkLWRvd24gdmVyc2lvbiBvZiBhIG5ldGNhdCBjbGllbnQsIHRoYXQgY29ubmVjdHMgdG8gYSAiaG9zdDpwb3J0IgorIyBnaXZlbiBpbiAkMSwgc2VuZHMgaXRzIHN0ZGluIGZvbGxvd2VkIGJ5IEVPRiwgdGhlbiBkdW1wcyB0aGUgcmVzcG9uc2UgKHVudGlsCisjIEVPRikgdG8gc3Rkb3V0LgorZmFrZV9uYygpIHsKKwlpZiAhIHRlc3RfZGVjbGFyZWRfcHJlcmVxIEZBS0VOQworCXRoZW4KKwkJZWNobyA+JjQgImZha2VfbmM6IG5lZWQgdG8gZGVjbGFyZSBGQUtFTkMgcHJlcmVxdWlzaXRlIgorCQlyZXR1cm4gMTI3CisJZmkKKwlwZXJsIC1Nc3RyaWN0IC1NSU86OlNvY2tldDo6SU5FVCAtZSAnCisJCW15ICRzID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KHNoaWZ0KQorCQkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiBzb2NrZXQ6ICQhIjsKKwkJcHJpbnQgJHMgPFNURElOPjsKKwkJJHMtPnNodXRkb3duKDEpOworCQlwcmludCA8JHM+OworCScgIiRAIgorfQorCit0ZXN0X2xhenlfcHJlcmVxIEZBS0VOQyAnCisJcGVybCAtTUlPOjpTb2NrZXQ6OklORVQgLWUgImV4aXQgMCIKKycKZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1wNC5zaCBiL3QvbGliLWdpdC1wNC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWZmMmFiCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2l0LXA0LnNoCkBAIC0wLDAgKzEsMjI0IEBACisjCisjIExpYnJhcnkgY29kZSBmb3IgZ2l0IHA0IHRlc3RzCisjCisKKyMgcDQgdGVzdHMgbmV2ZXIgdXNlIHRoZSB0b3AtbGV2ZWwgcmVwbzsgYWx3YXlzIGJ1aWxkL2Nsb25lIGludG8KKyMgYSBzdWJkaXJlY3RvcnkgY2FsbGVkICIkZ2l0IgorVEVTVF9OT19DUkVBVEVfUkVQTz1Ob1RoYW5rcworCisjIFNvbWUgb3BlcmF0aW9ucyByZXF1aXJlIG11bHRpcGxlIGF0dGVtcHRzIHRvIGJlIHN1Y2Nlc3NmdWwuIERlZmluZQorIyBoZXJlIHRoZSBtYXhpbWFsIHJldHJ5IHRpbWVvdXQgaW4gc2Vjb25kcy4KK1JFVFJZX1RJTUVPVVQ9NjAKKworIyBTb21ldGltZXMgcDRkIHNlZW1zIHRvIGhhbmcuIFRlcm1pbmF0ZSB0aGUgcDRkIHByb2Nlc3MgYXV0b21hdGljYWxseSBhZnRlcgorIyB0aGUgZGVmaW5lZCB0aW1lb3V0IGluIHNlY29uZHMuCitQNERfVElNRU9VVD0zMDAKKworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQWVRIT04KK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IHA0IHRlc3RzOyBweXRob24gbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisoIHA0IC1oICYmIHA0ZCAtaCApID4vZGV2L251bGwgMj4mMSB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBwNCB0ZXN0czsgbm8gcDQgb3IgcDRkJworCXRlc3RfZG9uZQorfQorCisjIE9uIGN5Z3dpbiwgdGhlIE5UIHZlcnNpb24gb2YgUGVyZm9yY2UgY2FuIGJlIHVzZWQuICBXaGVuIGdpdmluZworIyBpdCBwYXRocywgZWl0aGVyIG9uIHRoZSBjb21tYW5kLWxpbmUgb3IgaW4gY2xpZW50IHNwZWNpZmljYXRpb25zLAorIyBiZSBzdXJlIHRvIHVzZSB0aGUgbmF0aXZlIHdpbmRvd3MgZm9ybS4KKyMKKyMgT2xkZXIgdmVyc2lvbnMgb2YgcGVyZm9yY2Ugd2VyZSBhdmFpbGFibGUgY29tcGlsZWQgbmF0aXZlbHkgZm9yCisjIGN5Z3dpbi4gIFRob3NlIGRvIG5vdCBhY2NlcHQgbmF0aXZlIHdpbmRvd3MgcGF0aHMsIHNvIG1ha2Ugc3VyZQorIyBub3QgdG8gY29udmVydCBmb3IgdGhlbS4KK25hdGl2ZV9wYXRoICgpIHsKKwlwYXRoPSIkMSIgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIENZR1dJTiAmJiAhIHA0IC1WIHwgZ3JlcCAtcSBDWUdXSU4KKwl0aGVuCisJCXBhdGg9JChjeWdwYXRoIC0td2luZG93cyAiJHBhdGgiKQorCWVsc2UKKwkJcGF0aD0kKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiJHBhdGgiKQorCWZpICYmCisJZWNobyAiJHBhdGgiCit9CisKK3Rlc3Rfc2V0X3BvcnQgUDREUE9SVAorCitQNFBPUlQ9bG9jYWxob3N0OiRQNERQT1JUCitQNENMSUVOVD1jbGllbnQKK1A0VVNFUj1hdXRob3IKK1A0RURJVE9SPXRydWUKK3Vuc2V0IFA0Q0hBUlNFVAorZXhwb3J0IFA0UE9SVCBQNENMSUVOVCBQNFVTRVIgUDRFRElUT1IgUDRDSEFSU0VUCisKK2RiPSIkVFJBU0hfRElSRUNUT1JZL2RiIgorY2xpPSIkVFJBU0hfRElSRUNUT1JZL2NsaSIKK2dpdD0iJFRSQVNIX0RJUkVDVE9SWS9naXQiCitwaWRmaWxlPSIkVFJBU0hfRElSRUNUT1JZL3A0ZC5waWQiCisKK3N0b3BfcDRkX2FuZF93YXRjaGRvZyAoKSB7CisJa2lsbCAtOSAkcDRkX3BpZCAkd2F0Y2hkb2dfcGlkCit9CisKKyMgZ2l0IHA0IHN1Ym1pdCBnZW5lcmF0ZXMgYSB0ZW1wIGZpbGUsIHdoaWNoIHdpbGwKKyMgbm90IGdldCBjbGVhbmVkIHVwIGlmIHRoZSBzdWJtaXNzaW9uIGZhaWxzLiAgRG9uJ3QKKyMgY2x1dHRlciB1cCAvdG1wIG9uIHRoZSB0ZXN0IG1hY2hpbmUuCitUTVBESVI9IiRUUkFTSF9ESVJFQ1RPUlkiCitleHBvcnQgVE1QRElSCisKK3JlZ2lzdGVyZWRfc3RvcF9wNGRfYXRleGl0X2hhbmRsZXI9CitzdGFydF9wNGQgKCkgeworCSMgT25lIG9mIHRoZSB0ZXN0IHNjcmlwdHMgc3RvcHMgYW5kIHRoZW4gcmUtc3RhcnRzIHA0ZC4KKwkjIERvbid0IHJlZ2lzdGVyIGFuZCB0aGVuIHJ1biB0aGUgc2FtZSBhdGV4aXQgaGFuZGxlcnMgc2V2ZXJhbCB0aW1lcy4KKwlpZiB0ZXN0IC16ICIkcmVnaXN0ZXJlZF9zdG9wX3A0ZF9hdGV4aXRfaGFuZGxlciIKKwl0aGVuCisJCXRlc3RfYXRleGl0ICdzdG9wX3A0ZF9hbmRfd2F0Y2hkb2cnCisJCXJlZ2lzdGVyZWRfc3RvcF9wNGRfYXRleGl0X2hhbmRsZXI9QWxyZWFkeURvbmUKKwlmaQorCisJbWtkaXIgLXAgIiRkYiIgIiRjbGkiICIkZ2l0IiAmJgorCXJtIC1mICIkcGlkZmlsZSIgJiYKKwkoCisJCWNkICIkZGIiICYmCisJCXsKKwkJCXA0ZCAtcSAtcCAkUDREUE9SVCAiJEAiICYKKwkJCWVjaG8gJCEgPiIkcGlkZmlsZSIKKwkJfQorCSkgJiYKKwlwNGRfcGlkPSQoY2F0ICIkcGlkZmlsZSIpCisKKwkjIFRoaXMgZ2l2ZXMgcDRkIGEgbG9uZyB0aW1lIHRvIHN0YXJ0IHVwLCBhcyBpdCBjYW4gYmUKKwkjIHF1aXRlIHNsb3cgZGVwZW5kaW5nIG9uIHRoZSBtYWNoaW5lLiAgU2V0IHRoaXMgZW52aXJvbm1lbnQKKwkjIHZhcmlhYmxlIHRvIHNvbWV0aGluZyBzbWFsbGVyIHRvIGZhaWwgZmFzdGVyIGluLCBzYXksCisJIyBhbiBhdXRvbWF0ZWQgdGVzdCBzZXR1cC4gIElmIHRoZSBwNGQgcHJvY2VzcyBkaWVzLCB0aGF0CisJIyB3aWxsIGJlIGNhdWdodCB3aXRoIHRoZSAia2lsbCAtMCIgY2hlY2sgYmVsb3cuCisJaT0ke1A0RF9TVEFSVF9QQVRJRU5DRTotMzAwfQorCisJbnJfdHJpZXNfbGVmdD0kUDREX1RJTUVPVVQKKwl3aGlsZSB0cnVlCisJZG8KKwkJaWYgdGVzdCAkbnJfdHJpZXNfbGVmdCAtZXEgMAorCQl0aGVuCisJCQlraWxsIC05ICRwNGRfcGlkCisJCQlleGl0IDEKKwkJZmkKKwkJc2xlZXAgMQorCQlucl90cmllc19sZWZ0PSQoKCRucl90cmllc19sZWZ0IC0gMSkpCisJZG9uZSAyPi9kZXYvbnVsbCA0PiYyICYKKwl3YXRjaGRvZ19waWQ9JCEKKworCXJlYWR5PQorCXdoaWxlIHRlc3QgJGkgLWd0IDAKKwlkbworCQkjIHN1Y2NlZWQgd2hlbiBwNCBjbGllbnQgY29tbWFuZHMgc3RhcnQgdG8gd29yaworCQlpZiBwNCBpbmZvID4vZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQlyZWFkeT10cnVlCisJCQlicmVhaworCQlmaQorCQkjIGZhaWwgaWYgcDRkIGRpZWQKKwkJa2lsbCAtMCAkcDRkX3BpZCAyPi9kZXYvbnVsbCB8fCBicmVhaworCQllY2hvIHdhaXRpbmcgZm9yIHA0ZCB0byBzdGFydAorCQlzbGVlcCAxCisJCWk9JCgoICRpIC0gMSApKQorCWRvbmUKKworCWlmIHRlc3QgLXogIiRyZWFkeSIKKwl0aGVuCisJCSMgcDRkIGZhaWxlZCB0byBzdGFydAorCQlyZXR1cm4gMQorCWZpCisKKwkjIGJ1aWxkIGEgcDQgdXNlciBzbyBhdXRob3JAZXhhbXBsZS5jb20gaGFzIGFuIGVudHJ5CisJcDRfYWRkX3VzZXIgYXV0aG9yCisKKwkjIGJ1aWxkIGEgY2xpZW50CisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKworCXJldHVybiAwCit9CisKK3A0X2FkZF91c2VyICgpIHsKKwluYW1lPSQxICYmCisJcDQgdXNlciAtZiAtaSA8PC1FT0YKKwlVc2VyOiAkbmFtZQorCUVtYWlsOiAkbmFtZUBleGFtcGxlLmNvbQorCUZ1bGxOYW1lOiBEci4gJG5hbWUKKwlFT0YKK30KKworcDRfYWRkX2pvYiAoKSB7CisJcDQgam9iIC1mIC1pIDw8LUVPRgorCUpvYjogJDEKKwlTdGF0dXM6IG9wZW4KKwlVc2VyOiBkdW1teQorCURlc2NyaXB0aW9uOgorCUVPRgorfQorCityZXRyeV91bnRpbF9zdWNjZXNzICgpIHsKKwlucl90cmllc19sZWZ0PSRSRVRSWV9USU1FT1VUCisJdW50aWwgIiRAIiAyPi9kZXYvbnVsbCB8fCB0ZXN0ICRucl90cmllc19sZWZ0IC1lcSAwCisJZG8KKwkJc2xlZXAgMQorCQlucl90cmllc19sZWZ0PSQoKCRucl90cmllc19sZWZ0IC0gMSkpCisJZG9uZQorfQorCitzdG9wX2FuZF9jbGVhbnVwX3A0ZCAoKSB7CisJa2lsbCAtOSAkcDRkX3BpZCAkd2F0Y2hkb2dfcGlkCisJd2FpdCAkcDRkX3BpZAorCXJtIC1yZiAiJGRiIiAiJGNsaSIgIiRwaWRmaWxlIgorfQorCitjbGVhbnVwX2dpdCAoKSB7CisJcmV0cnlfdW50aWxfc3VjY2VzcyBybSAtciAiJGdpdCIKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJGdpdCIgJiYKKwlyZXRyeV91bnRpbF9zdWNjZXNzIG1rZGlyICIkZ2l0IgorfQorCittYXJzaGFsX2R1bXAgKCkgeworCXdoYXQ9JDEgJiYKKwlsaW5lPSR7MjotMX0gJiYKKwljYXQgPiIkVFJBU0hfRElSRUNUT1JZL21hcnNoYWwtZHVtcC5weSIgPDwtRU9GICYmCisJaW1wb3J0IG1hcnNoYWwKKwlpbXBvcnQgc3lzCisJaW5zdHJlYW0gPSBnZXRhdHRyKHN5cy5zdGRpbiwgJ2J1ZmZlcicsIHN5cy5zdGRpbikKKwlmb3IgaSBpbiByYW5nZSgkbGluZSk6CisJICAgIGQgPSBtYXJzaGFsLmxvYWQoaW5zdHJlYW0pCisJcHJpbnQoZFtiJyR3aGF0J10uZGVjb2RlKCd1dGYtOCcpKQorCUVPRgorCSIkUFlUSE9OX1BBVEgiICIkVFJBU0hfRElSRUNUT1JZL21hcnNoYWwtZHVtcC5weSIKK30KKworIworIyBDb25zdHJ1Y3QgYSBjbGllbnQgd2l0aCB0aGlzIGxpc3Qgb2YgVmlldyBsaW5lcworIworY2xpZW50X3ZpZXcgKCkgeworCSgKKwkJY2F0IDw8LUVPRiAmJgorCQlDbGllbnQ6ICRQNENMSUVOVAorCQlEZXNjcmlwdGlvbjogJFA0Q0xJRU5UCisJCVJvb3Q6ICRjbGkKKwkJQWx0Um9vdHM6ICQobmF0aXZlX3BhdGggIiRjbGkiKQorCQlMaW5lRW5kOiB1bml4CisJCVZpZXc6CisJCUVPRgorCQlwcmludGYgIlx0JXNcbiIgIiRAIgorCSkgfCBwNCBjbGllbnQgLWkKK30KKworaXNfY2xpX2ZpbGVfd3JpdGVhYmxlICgpIHsKKwkjIGN5Z3dpbiB2ZXJzaW9uIG9mIHA0IGRvZXMgbm90IHNldCByZWFkLW9ubHkgYXR0ciwKKwkjIHdpbGwgYmUgbWFya2VkIDQ0NCBidXQgLXcgaXMgdHJ1ZQorCWZpbGU9IiQxIiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgQ1lHV0lOICYmIHA0IC1WIHwgZ3JlcCAtcSBDWUdXSU4KKwl0aGVuCisJCXN0YXQ9JChzdGF0IC0tZm9ybWF0PSVhICIkZmlsZSIpICYmCisJCXRlc3QgJHN0YXQgPSA2NDQKKwllbHNlCisJCXRlc3QgLXcgIiRmaWxlIgorCWZpCit9CmRpZmYgLS1naXQgYS90L2xpYi1naXQtc3ZuLnNoIGIvdC9saWItZ2l0LXN2bi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDI0OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2l0LXN2bi5zaApAQCAtMCwwICsxLDEzMiBAQAorLiAuL3Rlc3QtbGliLnNoCisKK2lmIHRlc3QgLW4gIiROT19TVk5fVEVTVFMiCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIE5PX1NWTl9URVNUUyBkZWZpbmVkJworCXRlc3RfZG9uZQorZmkKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK0dJVF9ESVI9JFBXRC8uZ2l0CitHSVRfU1ZOX0RJUj0kR0lUX0RJUi9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4KK1NWTl9UUkVFPSRHSVRfU1ZOX0RJUi9zdm4tdHJlZQordGVzdF9zZXRfcG9ydCBTVk5TRVJWRV9QT1JUCisKK3N2biA+L2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgJD8gLW5lIDEKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IHN2biB0ZXN0cywgc3ZuIG5vdCBmb3VuZCcKKwl0ZXN0X2RvbmUKK2ZpCisKK3N2bnJlcG89JFBXRC9zdm5yZXBvCitleHBvcnQgc3ZucmVwbworc3ZuY29uZj0kUFdEL3N2bmNvbmYKK2V4cG9ydCBzdm5jb25mCisKK3BlcmwgLXcgLWUgIgordXNlIFNWTjo6Q29yZTsKK3VzZSBTVk46OlJlcG9zOworXCRTVk46OkNvcmU6OlZFUlNJT04gZ3QgJzEuMS4wJyBvciBleGl0KDQyKTsKK3N5c3RlbShxdy9zdm5hZG1pbiBjcmVhdGUgLS1mcy10eXBlIGZzZnMvLCBcJEVOVntzdm5yZXBvfSkgPT0gMCBvciBleGl0KDQxKTsKKyIgPiYzIDI+JjQKK3g9JD8KK2lmIHRlc3QgJHggLW5lIDAKK3RoZW4KKwlpZiB0ZXN0ICR4IC1lcSA0MjsgdGhlbgorCQlza2lwX2FsbD0nUGVybCBTVk4gbGlicmFyaWVzIG11c3QgYmUgPj0gMS4xLjAnCisJZWxpZiB0ZXN0ICR4IC1lcSA0MTsgdGhlbgorCQlza2lwX2FsbD0nc3ZuYWRtaW4gZmFpbGVkIHRvIGNyZWF0ZSBmc2ZzIHJlcG9zaXRvcnknCisJZWxzZQorCQlza2lwX2FsbD0nUGVybCBTVk4gbGlicmFyaWVzIG5vdCBmb3VuZCBvciB1bnVzYWJsZScKKwlmaQorCXRlc3RfZG9uZQorZmkKKworcmF3c3ZucmVwbz0iJHN2bnJlcG8iCitzdm5yZXBvPSJmaWxlOi8vJHN2bnJlcG8iCisKK3Bva2UoKSB7CisJdGVzdC10b29sIGNobXRpbWUgKzEgIiQxIgorfQorCisjIFdlIG5lZWQgdGhpcywgYmVjYXVzZSB3ZSBzaG91bGQgcGFzcyBlbXB0eSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSB0bworIyB0aGUgJ3N2biBjb21taXQnIHRvIGF2b2lkIGF1dG9tYXRlZCBwcm9wZXJ0eSBjaGFuZ2VzIGFuZCBvdGhlciBzdHVmZgorIyB0aGF0IGNvdWxkIGJlIHNldCBmcm9tIHVzZXIncyBjb25maWd1cmF0aW9uIGZpbGVzIGluIH4vLnN1YnZlcnNpb24uCitzdm5fY21kICgpIHsKKwlbIC1kICIkc3ZuY29uZiIgXSB8fCBta2RpciAiJHN2bmNvbmYiCisJb3JpZ19zdm5jbWQ9IiQxIjsgc2hpZnQKKwlpZiBbIC16ICIkb3JpZ19zdm5jbWQiIF07IHRoZW4KKwkJc3ZuCisJCXJldHVybgorCWZpCisJc3ZuICIkb3JpZ19zdm5jbWQiIC0tY29uZmlnLWRpciAiJHN2bmNvbmYiICIkQCIKK30KKworbWF5YmVfc3RhcnRfaHR0cGQgKCkgeworCWxvYz0kezEtc3ZufQorCisJaWYgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9TVk5fSFRUUEQgZmFsc2UKKwl0aGVuCisJCS4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCisJCUxJQl9IVFRQRF9TVk49IiRsb2MiCisJCXN0YXJ0X2h0dHBkCisJZmkKK30KKworY29udmVydF90b19yZXZfZGIgKCkgeworCXBlcmwgLXcgLS0gLSAiJEAiIDw8XEVPRgordXNlIHN0cmljdDsKK0BBUkdWID09IDIgb3IgZGllICJ1c2FnZTogY29udmVydF90b19yZXZfZGIgPGlucHV0PiA8b3V0cHV0PiI7CitvcGVuIG15ICR3ciwgJys+JywgJEFSR1ZbMV0gb3IgZGllICIkITogY291bGRuJ3Qgb3BlbjogJEFSR1ZbMV0iOworb3BlbiBteSAkcmQsICc8JywgJEFSR1ZbMF0gb3IgZGllICIkITogY291bGRuJ3Qgb3BlbjogJEFSR1ZbMF0iOworbXkgJHNpemUgPSAoc3RhdCgkcmQpKVs3XTsKKygkc2l6ZSAlIDI0KSA9PSAwIG9yIGRpZSAiSW5jb25zaXN0ZW50IHNpemU6ICRzaXplIjsKK3doaWxlIChzeXNyZWFkKCRyZCwgbXkgJGJ1ZiwgMjQpID09IDI0KSB7CisJbXkgKCRyLCAkYykgPSB1bnBhY2soJ05INDAnLCAkYnVmKTsKKwlteSAkb2Zmc2V0ID0gJHIgKiA0MTsKKwlzZWVrICR3ciwgMCwgMiBvciBkaWUgJCE7CisJbXkgJHBvcyA9IHRlbGwgJHdyOworCWlmICgkcG9zIDwgJG9mZnNldCkgeworCQlmb3IgKDEgLi4gKCgkb2Zmc2V0IC0gJHBvcykgLyA0MSkpIHsKKwkJCXByaW50ICR3ciAoKCcwJyB4IDQwKSwiXG4iKSBvciBkaWUgJCE7CisJCX0KKwl9CisJc2VlayAkd3IsICRvZmZzZXQsIDAgb3IgZGllICQhOworCXByaW50ICR3ciAkYywiXG4iIG9yIGRpZSAkITsKK30KK2Nsb3NlICR3ciBvciBkaWUgJCE7CitjbG9zZSAkcmQgb3IgZGllICQhOworRU9GCit9CisKK3JlcXVpcmVfc3Zuc2VydmUgKCkgeworCWlmICEgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9TVk5TRVJWRSBmYWxzZQorCXRoZW4KKwkJc2tpcF9hbGw9J3NraXBwaW5nIHN2bnNlcnZlIHRlc3QuIChzZXQgJEdJVF9URVNUX1NWTlNFUlZFIHRvIGVuYWJsZSknCisJCXRlc3RfZG9uZQorCWZpCit9CisKK3N0YXJ0X3N2bnNlcnZlICgpIHsKKwlzdm5zZXJ2ZSAtLWxpc3Rlbi1wb3J0ICRTVk5TRVJWRV9QT1JUIFwKKwkJIC0tcm9vdCAiJHJhd3N2bnJlcG8iIFwKKwkJIC0tbGlzdGVuLW9uY2UgXAorCQkgLS1saXN0ZW4taG9zdCAxMjcuMC4wLjEgJgorfQorCitwcmVwYXJlX2FfdXRmOF9sb2NhbGUgKCkgeworCWFfdXRmOF9sb2NhbGU9JChsb2NhbGUgLWEgfCBzZWQgLW4gJy9cLlt1VV1bdFRdW2ZGXS0qOCQveworCXAKKwlxCit9JykKKwlpZiB0ZXN0IC1uICIkYV91dGY4X2xvY2FsZSIKKwl0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBVVEY4CisJZWxzZQorCQlzYXkgIiMgVVRGLTggbG9jYWxlIG5vdCBhdmFpbGFibGUsIHNvbWUgdGVzdHMgYXJlIHNraXBwZWQiCisJZmkKK30KZGlmZiAtLWdpdCBhL3QvbGliLWdwZy5zaCBiL3QvbGliLWdwZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDI4NjUyCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ3BnLnNoCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCitncGdfdmVyc2lvbj0kKGdwZyAtLXZlcnNpb24gMj4mMSkKK2lmIHRlc3QgJD8gIT0gMTI3Cit0aGVuCisJIyBBcyBzYWlkIGhlcmU6IGh0dHA6Ly93d3cuZ251cGcub3JnL2RvY3VtZW50YXRpb24vZmFxcy5odG1sI3E2LjE5CisJIyB0aGUgZ3BnIHZlcnNpb24gMS4wLjYgZGlkbid0IHBhcnNlIHRydXN0IHBhY2tldHMgY29ycmVjdGx5LCBzbyBmb3IKKwkjIHRoYXQgdmVyc2lvbiwgY3JlYXRpb24gb2Ygc2lnbmVkIHRhZ3MgdXNpbmcgdGhlIGdlbmVyYXRlZCBrZXkgZmFpbHMuCisJY2FzZSAiJGdwZ192ZXJzaW9uIiBpbgorCSdncGcgKEdudVBHKSAxLjAuNicqKQorCQlzYXkgIllvdXIgdmVyc2lvbiBvZiBncGcgKDEuMC42KSBpcyB0b28gYnVnZ3kgZm9yIHRlc3RpbmciCisJCTs7CisJKikKKwkJIyBBdmFpbGFibGUga2V5IGluZm86CisJCSMgKiBUeXBlIERTQSBhbmQgRWxnYW1hbCwgc2l6ZSAyMDQ4IGJpdHMsIG5vIGV4cGlyYXRpb24gZGF0ZSwKKwkJIyAgIG5hbWUgYW5kIGVtYWlsOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJCSMgKiBUeXBlIFJTQSwgc2l6ZSAyMDQ4IGJpdHMsIG5vIGV4cGlyYXRpb24gZGF0ZSwKKwkJIyAgIG5hbWUgYW5kIGVtYWlsOiBFcmlzIERpc2NvcmRpYSA8ZGlzY29yZEBleGFtcGxlLm5ldD4KKwkJIyBObyBwYXNzd29yZCBnaXZlbiwgdG8gZW5hYmxlIG5vbi1pbnRlcmFjdGl2ZSBvcGVyYXRpb24uCisJCSMgVG8gZ2VuZXJhdGUgbmV3IGtleToKKwkJIwlncGcgLS1ob21lZGlyIC90bXAvZ3BnaG9tZSAtLWdlbi1rZXkKKwkJIyBUbyB3cml0ZSBhcm1vcmVkIGV4cG9ydGVkIGtleSB0byBrZXlyaW5nOgorCQkjCWdwZyAtLWhvbWVkaXIgL3RtcC9ncGdob21lIC0tZXhwb3J0LXNlY3JldC1rZXlzIFwKKwkJIwkJLS1hcm1vciAweERFQURCRUVGID4+IGxpYi1ncGcva2V5cmluZy5ncGcKKwkJIwlncGcgLS1ob21lZGlyIC90bXAvZ3BnaG9tZSAtLWV4cG9ydCBcCisJCSMJCS0tYXJtb3IgMHhERUFEQkVFRiA+PiBsaWItZ3BnL2tleXJpbmcuZ3BnCisJCSMgVG8gZXhwb3J0IG93bmVydHJ1c3Q6CisJCSMJZ3BnIC0taG9tZWRpciAvdG1wL2dwZ2hvbWUgLS1leHBvcnQtb3duZXJ0cnVzdCBcCisJCSMJCT4gbGliLWdwZy9vd25lcnRydXN0CisJCW1rZGlyIC4vZ3BnaG9tZSAmJgorCQljaG1vZCAwNzAwIC4vZ3BnaG9tZSAmJgorCQlHTlVQR0hPTUU9IiQocHdkKS9ncGdob21lIiAmJgorCQlleHBvcnQgR05VUEdIT01FICYmCisJCShncGdjb25mIC0ta2lsbCBncGctYWdlbnQgPi9kZXYvbnVsbCAyPiYxIHx8IDogKSAmJgorCQlncGcgLS1ob21lZGlyICIke0dOVVBHSE9NRX0iIDI+L2Rldi9udWxsIC0taW1wb3J0IFwKKwkJCSIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1ncGcva2V5cmluZy5ncGcgJiYKKwkJZ3BnIC0taG9tZWRpciAiJHtHTlVQR0hPTUV9IiAyPi9kZXYvbnVsbCAtLWltcG9ydC1vd25lcnRydXN0IFwKKwkJCSIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1ncGcvb3duZXJ0cnVzdCAmJgorCQlncGcgLS1ob21lZGlyICIke0dOVVBHSE9NRX0iIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxIFwKKwkJCS0tc2lnbiAtdSBjb21taXR0ZXJAZXhhbXBsZS5jb20gJiYKKwkJdGVzdF9zZXRfcHJlcmVxIEdQRyAmJgorCQkjIEF2YWlsYWJsZSBrZXkgaW5mbzoKKwkJIyAqIHNlZSB0L2xpYi1ncGcvZ3Bnc20tZ2VuLWtleS5pbgorCQkjIFRvIGdlbmVyYXRlIG5ldyBjZXJ0aWZpY2F0ZToKKwkJIyAgKiBubyBwYXNzcGhyYXNlCisJCSMJZ3Bnc20gLS1ob21lZGlyIC90bXAvZ3BnaG9tZS8gXAorCQkjCQktbyAvdG1wL2dwZ3NtLmNydC51c2VyIFwKKwkJIwkJLS1nZW5lcmF0ZS1rZXkgXAorCQkjCQktLWJhdGNoIHQvbGliLWdwZy9ncGdzbS1nZW4ta2V5LmluCisJCSMgVG8gaW1wb3J0IGNlcnRpZmljYXRlOgorCQkjCWdwZ3NtIC0taG9tZWRpciAvdG1wL2dwZ2hvbWUvIFwKKwkJIwkJLS1pbXBvcnQgL3RtcC9ncGdzbS5jcnQudXNlcgorCQkjIFRvIGV4cG9ydCBpbnRvIGEgLnAxMiB3ZSBjYW4gbGF0ZXIgaW1wb3J0OgorCQkjCWdwZ3NtIC0taG9tZWRpciAvdG1wL2dwZ2hvbWUvIFwKKwkJIwkJLW8gdC9saWItZ3BnL2dwZ3NtX2NlcnQucDEyIFwKKwkJIwkJLS1leHBvcnQtc2VjcmV0LWtleS1wMTIgImNvbW1pdHRlckBleGFtcGxlLmNvbSIKKwkJZWNobyB8IGdwZ3NtIC0taG9tZWRpciAiJHtHTlVQR0hPTUV9IiAyPi9kZXYvbnVsbCBcCisJCQktLXBhc3NwaHJhc2UtZmQgMCAtLXBpbmVudHJ5LW1vZGUgbG9vcGJhY2sgXAorCQkJLS1pbXBvcnQgIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy9ncGdzbV9jZXJ0LnAxMiAmJgorCisJCWdwZ3NtIC0taG9tZWRpciAiJHtHTlVQR0hPTUV9IiAyPi9kZXYvbnVsbCAtSyB8CisJCWdyZXAgZmluZ2VycHJpbnQ6IHwKKwkJY3V0IC1kIiAiIC1mNCB8CisJCXRyIC1kICdcbicgPiIke0dOVVBHSE9NRX0vdHJ1c3RsaXN0LnR4dCIgJiYKKworCQllY2hvICIgUyByZWxheCIgPj4iJHtHTlVQR0hPTUV9L3RydXN0bGlzdC50eHQiICYmCisJCWVjaG8gaGVsbG8gfCBncGdzbSAtLWhvbWVkaXIgIiR7R05VUEdIT01FfSIgPi9kZXYvbnVsbCBcCisJCQktdSBjb21taXR0ZXJAZXhhbXBsZS5jb20gLW8gL2Rldi9udWxsIC0tc2lnbiAtIDI+JjEgJiYKKwkJdGVzdF9zZXRfcHJlcmVxIEdQR1NNCisJCTs7CisJZXNhYworZmkKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBHUEcgJiYKKyAgICBlY2hvIHwgZ3BnIC0taG9tZWRpciAiJHtHTlVQR0hPTUV9IiAtYiAtLXJmYzE5OTEgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIFJGQzE5OTEKK2ZpCisKK3Nhbml0aXplX3BncCgpIHsKKwlwZXJsIC1uZSAnCisJCS9eLS0tLS1FTkQgUEdQLyBhbmQgJGluX3BncCA9IDA7CisJCXByaW50IHVubGVzcyAkaW5fcGdwOworCQkvXi0tLS0tQkVHSU4gUEdQLyBhbmQgJGluX3BncCA9IDE7CisJJworfQpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL2dwZ3NtLWdlbi1rZXkuaW4gYi90L2xpYi1ncGcvZ3Bnc20tZ2VuLWtleS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZkODdjCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ3BnL2dwZ3NtLWdlbi1rZXkuaW4KQEAgLTAsMCArMSw4IEBACitLZXktVHlwZTogUlNBCitLZXktTGVuZ3RoOiAyMDQ4CitLZXktVXNhZ2U6IHNpZ24KK1NlcmlhbDogcmFuZG9tCitOYW1lLUROOiBDTj1DIE8gTWl0dGVyLCBPPUV4YW1wbGUsIFNOPUMgTywgR049TWl0dGVyCitOYW1lLUVtYWlsOiBjb21taXR0ZXJAZXhhbXBsZS5jb20KK05vdC1CZWZvcmU6IDE5NzAtMDEtMDEgMDA6MDA6MDAKK05vdC1BZnRlcjogMzAwMC0wMS0wMSAwMDowMDowMApkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL2dwZ3NtX2NlcnQucDEyIGIvdC9saWItZ3BnL2dwZ3NtX2NlcnQucDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZmZhZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcvZ3Bnc21fY2VydC5wMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnL2tleXJpbmcuZ3BnIGIvdC9saWItZ3BnL2tleXJpbmcuZ3BnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOGRmY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcva2V5cmluZy5ncGcKQEAgLTAsMCArMSwxOTIgQEAKKy0tLS0tQkVHSU4gUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS0KK1ZlcnNpb246IEdudVBHIHYxCisKK2xRRzdCRVpueXlrUkJBQ3pDUGpJcFRZTkw3WTJ0UXFsRUdUVERsdlpjV05MakY1ZjdaenV5T3FOT2lkTFVnRkQKKzM2cWNoMUxaTFNaa1NoZFIzR2FlK2Jzb2x5anhybEZ1RlAwZVhSUE10cUsyMGFMdzdXWnZQRnBFVjFUaE1uZSsKK1BSSmpZcnZnaFd3M0wwVlZJQUlaOEdYd3JWQnVVOTl1RWpIRUkwb2pZbG9PdkZjMmpWUGdTYW9CdndDZzQ4VGoKK2ZvbDJmb1NvSmE3WFV1OXlBTDhzemc4RC9SVXNUek5GK0k5aFNSSGw3TVlLRk1Zb0tFWTlCRGdyZ0F1anA3WVkKKzhxZEdzaVViMEdneXpwMmtSalpGdDRscGN2S2hHZkhuNUdFam10aytmUmJENXFQZk1xS0ZXK1QwTlBmWWxZbUwKK0pKNGZzNHFaOEx4N3g2aUc2WDUxdStZTndzUXVJR2pNQ0MzQ2VOaTNGN29yNjUxa2tOWUFTYmFRMU5ST2tDSU4KK051ZHlBLzBhYXN2b1pVb05KQWMyY1A1SWZzNldoWE1XTGZNUjJwMlhiZkt3S05ZbmVlYzYwdXNuU0NvbWNLcWgKK3NKVmswR3l0dnIzRk9ZVmhSa1huS0FieCswVzJ1ckZQOE9GVkJURUtPNlRzMlZ5Z1dHZ25lUVlvSG5xendsVUUKK3lqT2pscitseWY3dTJzL0tBeHBLQTZqbnR0RWRSWkFteldraHVveDF3d0FVa3IyNy9RQUFuM1RFektSMXB4eFIKKytSM2RIdUZwbm5mYXRNSURDNU8wSWtNZ1R5Qk5hWFIwWlhJZ1BHTnZiVzFwZEhSbGNrQmxlR0Z0Y0d4bExtTnYKK2JUNklYZ1FURVFJQUhnVUNSbWZMS1FJYkF3WUxDUWdIQXdJREZRSURBeFlDQVFJZUFRSVhnQUFLQ1JBVHR2VWUKK3pkNUREWFFkQUtDOTJmK3dPclRrYm1QRWYrdStxQS9HdjZCeFF3Q2ZRMTI4SlhDaTNNcE1COHRJMkttbzE1dFkKK2dubWRBajBFUm1mTFRoQUlBTTY1ZVQ5VDYrZ2cwZkpuK1F4aHMzRkZEUGp4SzZBT0JTM1NpZVdXbVhPNnN0WloKK3BsdmI3cjIrc1hZcDhITUhudG5PWDNUUlBvbEl4MWRzZGt2M1czdzh5VXpmOUxtbzJYTVBzWjMvaXNXZEViT0kKK0Ewck8zQjF4d2JRTzd2RW9XSGVCN3V5WUlGNllzSUgwcE1xeGtJbWNpd0IxdG5KUEI5T3hxUEhsRC9IeXlIcjIKK3ZvajZubUVHYVBRV2o4L2RrZnllblhtNlhtTlpVWkwvc2xrNnRSaE53djRjVzNRUUxoMzluYml6OXJxdlpNS0YKK1hYOHdrWTRGZFFrSmpDR3dxekcrN3lKY3lIdmVtMjkvaXEvL2pSTFpnZGlOOEJ3VjNNQ1RKeURwOC9XYi9kOXkKK2paY1VtMVJkdHdSaXdmaGZRK3ptcHlzcG03T3hJTmZINjVyZjdmOEFCQTBJQUxSaU1Scy9lT0Q1OWpyWVhtUFMKK1pRVWJpQUxsYkpKdHVQMmM5TjNXWjVPZ3JoRGlBVytTRElOK2hnRHluSjliN0MyZEUzeE5hdWQ0emFYQUFGNDQKK0o0SjBiQW8yWnRab0phancrR1h3YVpmaDRaN25QTkh3RWNiRkQ0L3VYUENqOWpQa2NMT0pxR21VWTFhWGR5Z28KK3QzSG41VS96bzhKeFBRODNZYkpRaGt6QU9aL0hHb3dMTnFLZ0drTExIbjFYOXFheTBDeGxmVFFlRU41Ulp5bDMKK2I0cVJ6R2dHQUxGdm9oZXlaSVV3MVRialJwYm4za3FsSm9vRVFZMDJWd1hGWGZMSS9Md3pnbGlsSDZzU2NrdnMKKzBXSEtMWiswTDZiM0NnSkhOMlJzWjdReHdDQmkxYWVtc3ZyNjVGZUVYcC9BWXhhRzVkdVVic3VnRzhQZ29KMDYKK2JzRUFBVlFOUU8zY1hXcHVpSi9uTkxMbld1UHVuQktKVWx1cmtCZGYyR0QrbSttdUYwVnB3RGNoaHFxYlRPNGUKK0ZxT0lTUVFZRVFJQUNRVUNSbWZMVGdJYkRBQUtDUkFUdHZVZXpkNUREY0hzQUtEUWNvQXREV0pGdXBWUnFsZUIKK0Nleng0UTJraEFDY0NzKy9MdEU4TGI5aEMrMmN2cjN1SDVwODJBST0KKz1hRWlVCistLS0tLUVORCBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQorLS0tLS1CRUdJTiBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQorCitsUU9ZQkZGTWxrY0JDQURKaS94bkFGOHlJMzRQSGlsU0NiTTdWdE9GTzE3b0ZNa3B1NGNnTjJRcFB1TTVNVmp5CitjdnJ6S1NndVpGdlBDREx6ZUFGSlcxdVB4TDRTSGFIU2tpc0NyRmhpakg3T0pXY09QTlBTRkN3dStpbkFvQXN2CitIbTRuczZwZkRaeVJqVlRIU1k0cmRNSVNxS0ZSb3phWHU4dkhlQlJ6SWhGbnViQkNlcEtaVzA3b0tQbnJuRUxWCitUVlVTVVZJKzZlbDhKRm1KSVd4eExOTGhmUlJTUEYwdjRNRFhQRi8vaUNXaVpESStKMXBMdlE1Vi9mN1l0ZnNECitHVjBvUFk2Nko3MkJGSkc1NTVlS0J0dG5OWTkwMUxtSTNvY241UDVpVm5YRGFxTUVsdzdGS3BuQU5YdWNnWTNICis0a0x5TmtJM3MzSjBDR2JYSTdiM01CV3RqY3R1aFd2MXEyRzVBQkVCQUFFQUIvd0xpdXphL3FFZnYxQ2ZqN0ZRCit5dEFYcHoxWW9BY3JjTS81M1RlUlFocmJ2SWVlNVpOR2hMZENreW90ODFRZXVKclNhWE8wRTlDeFJ5bnJqUVE3CitpYllxTjdIeTB1dTFrQWJRUUpqbVZkUVhUS25LSjdXbTdvTTRoWWhOc1ZDS05YYysxKzVBZkRZR2c0blpvYjM2CitxcWdIdGMrQXJkbDVWZlVnN3VGK2Vacm5TTXlualpBTmdpa0tiUHRFMDlES1Z0Vk90VUU0eFREOWlqa3BnbjY1CitnbHNaRHFiN0o0UVZnVGVFaUNES0pzUXZpbjNTd3JQQnFCeEJSVUxGMlRJYU1iT3dlNmRIaWlhSTg1cnN2QVdTCitWR3pvblVCM0lVMTQ3MFAyU0RJVmN6YlhZVUsvbkRTR3g2Wlowd0x1OVpjQ3lVUHZ4VkV5a3VoMlA0VVdIbGErCituSExSQkFETUxhdmNmanNDSTVDUlVzZHVyWXBnRThZM2JFYmNEcHZ6QXU1alQ1RDI1cDNZUERPRE9YRDNBS1R0CitQelZNQVJWdHY4dHdrYmdBeVdhb0Rldkp6OE90bW9Td3NXamRGbzRZdnNZdzlqVjdZZjNHd3pEM1lhMVpuVzMyCitKV1FyNmNYOHFjSzBBdWtBRDdVWmtWeWhVMktCdkIwMnQ4bEtITGJTY0hYVFlWcXJ5d1FBL0xOVVh3bUhqaSs2Citvc25TUUFDOFg5Z2dNT0VzOWRHbzdRbGs0SmdmR0FIMTdDRkkzUzN1YnNhVkVkeHozWXd6T2tEOFNObUViTHlXCithN0NaL1JucGRBWlUwbkI3a1NmYmZabDdhamhQYmdLQk1zYVYyeXZhRGRKZW9yNG01ZUtkWGZmUmswU2tzeGpMCitaLzRQMXRUSXVMOFd6ZXRHQi9hRGNXREZnc2VTQUFzRUFMem1mNTc5cHRsU21EeUdSQUtRcXViK21qNFYzRVVaCisxR1ZHY2ZCWTg2dzNCWlZEc2FSaUN0Y05qay9sY1A0QVoxVmJiNDJSTTZqazhuTHNFTlJjN3JmMnhhN1pQZjBUCis2bjVGNlcrdms3RUc3NlJvRmhLVnRHWm5nR0tpREdWYXZ4azNGVC95ZjhsS3JUM3dZaVQwM1NaRHVaMHBXdmt1CitGaUpHRXllc0FDOFdSejYwSkVWeWFYTWdSR2x6WTI5eVpHbGhJRHhrYVhOamIzSmtRR1Y0WVcxd2JHVXVibVYwCitQb2tCT0FRVEFRSUFJZ1VDVVV5V1J3SWJBd1lMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0QUFDZ2tRCitZUWt1aGJjaWNZbFlvd2Y3QitmK0ZEY0xWZnc4WHpHbEtrdTFGNlBJMXlHQ3Q3QU1PMi9Ka21PNExsZ0h1SWdGCitwcWU1Yi9YaktsMElzUmNiVkxpdHFpSW9rYzh1KzdIOHlZVTY3RERsaXE3dDFncUJ5K3FUaFNIY2duNldNS1RhCitxQ3FPRTJqekh5cXVsSUF6UXNKUStjNVNSb2ZFWkFLVDRRYTJEeStuc3FXRHBJRTc4YUpkMFZua2s5VTZIMlZ1CitBQnZVZU4vSU1ndnhQcjUyNW8rckJEN0xVNEozQ3RPemZWK3NPNiszM2RhK0JtOVVoa1I0dEM0SC9uMWRETjFKCitZdXhCUWJneFRxL2g4bUtlNC83L1l2eSs1V3NZZDk2WlJMRTJaRldlV1h0S2t3bVliUTQyRzNTWlVYYVo4UjhPCit0YlR5VXJqYkZLaXBPNHd2WHdoeWp1MWw5Y3hBc3JjYTZ4YlNDSjBEbUFSUlRKWkhBUWdBcVR0UEZjVFhxTStVCitvN2JPb28rZGNIaThYRGYvOFhTRW1aZk1LYy9VNXBTVEJrN2gxZ1NLdUd6akYybjN3UW02QTgrMTAxdlRMYVE2CitQb0ZERlc4dVFCMDBtanltR3JSRFlGZ3o4YmpobmFla1puQTRYVGhyMVJPamZmZ01oczN1VHBDZWJkVitsTDhLCiswb0pUSGMzOVRQTFRnMjNERmNSU0ROKzNBUkpKUzcrQ1JCSWJ0OUw1Z09icGdBNEhVYXAvbzZON08wNHJRT1BVCis4M01BcW53bzJKVE8vRGVkMHpvYWQwVm8zMU5tazRGK0t2RUU1MmZ0R0hiZDd5cUlVR0tCdDJTZVRBaDg1MGFjCitMZU5aUCtWMVk3YXRCQ3I3L3ptK0pwSFdxOU9INy9Ob21sRUlreEw4V0R0OEdmQUtvcVpncWVmTCtBQ0VuTGJBCit0MWR1M2YwRnN3QVJBUUFCQUFmOERjbGFJUURmUE01a1lvM3krWVZQb3lrQzExUnNrbVFXcFZpYmRsQ0xISm0vCisvSVNTbTFmVllUN2xwVE9wemwwWGZWWC9qdzlzL2N2aVB0TlMvcjBHL0l3a2krZ2k5QXY1YlREaVVtL29XV3FkCisxd2FQWVBER3dCNFFkS092aVkvZk9TRkk5dE9zc3p0NUN6czR3RFhXeTkwQVpEV2Q3ZmtIWWlzYmdvZlYxc2pLCitROGJZUVBhYmNlcGNaMkp5RVQrRXBaQkVtVUhIcVE3NmJUaXFqTitWejZrMU9GbHNFQnpHa0UrV0lha0Foa1EyCis1N29VclJnRmUraDZDaDdtZUIvdjZ2VmZJUlNzTHBaZTE4M3VjNFNpZ3F0ZnNnamJHOVBxT2NBSk9xb3ZEbmNCCitTY2czcXZwV0ZPQWtUQTNSZSt5QlBVZDJISGw5V0YvVFBhMmtCRENUMlFRQXhjSlplVUN1VWdEZ0NpenFFZ2ZzCitLem02ZHk0Ry9PSmRXMHE5bTlwc0hxRDFYV0xkN1pMRTQrZVRTMWN4a3RKaUdjR05kR29aRDBFdGd4a1YwOXVNCisxMlFZQ09CRXJGSnp2NC80b2xlZEhlRWhUYVJSL21GRkdScCtrV1R6MkFpL3pOcVVkM0QrK0RZVWU4ZzRtVlFKCis2SlAwMTRYaHZvUm5hQ2ZUOGNIOVpkMEVBTnNTTDcwV0dkaWZjVm9XS0E5akZKaGFoYzBzU0c2SVp2TU9jN2JzCitjU2JoQnFMRW5oZU9ia2FyQlArQSt6Z2xscUlmK3NiQ2Fzc01YamNWNTJtbmw5dGgzSjVSV3I3c2NyUUxKOVpYCitJdnozdW9QODV2d2xVSTk4ZEk5cm9ZSzBPcEttRzRoTkZwcEFjZ2lDVk5Wam5RbGh1US9Ib2V4Ukh4Um1ubWNiCiszOGpQQS9zRUhQQ0ZiTENHT1NCK0hRTkt4LzVXZjZWcEZYLzRvQk5iSVVpWW94Y1JsMGpwWVQ3TGMwemJjOFNvCitIdGhqUGZXaFhoS3pZdkVEQzVZZ0FTRXkxY05iR01VSmNHeXVBSW53SVFqcTQ0RlN3Uk1rSTNJU1NIbmJ2MWlICiswd0JWSlV6cGx1TWViRUFlc2RaVXoxRGNaV1ZmNmVWSkQwZGhaeEQ2RG9HN1hqMW05VGhVaVFFZkJCZ0JBZ0FKCitCUUpSVEpaSEFoc01BQW9KRUdFSkxvVzNJbkdKN0hFSUFNWGtNZjRjT1dtbkF1dnZjU20zS3BMZ2h1V2lrOWR5CitmbjFzWS9JRzVhdG9LSyt5cG1WL1RsQmxNWnFGUXp1UElKUVQ4VkxibXh0TGxEaEpHMDRMYkk2YzhheElaeE9PCitaS0x5NW5UVFN5MTZ6dHFFZVM3ZWlmSExQWmcxVUZGeUVFSVExWFcwQ05EQWV1V0toOTBFUmp5bDRDZzdQbldTCitaOUVpK3pqNkpENVBjZGkzQkpoUW85V09MT1ZFSjBOSG1ld1RZcWs5UVZYSC8wdjFIZGw0TE1KdGdjYmRiRFdrCis0VVRrWGJnOXBuM3VtQ2drTkozVnM4ZlduSVdPOUl6ZHIyL3dyRlkySnZVVDdZdmwrd3NOSVdhdHZPRXpHeTduCitCT1c3OFdVeHpodTBZSlRMS3kraUtDamc1SFM1ZHg2T0MrZTRhRUVnZmhOUENNa2J2RHNKanRTZEE1Z0VXOTY3CiszQUVJQUtqc2VUMHNUUWp5TjM5Zk9uMGZ6eFdwODlSRU1VVUtnTGlnYjAxTUt1dU5JM2NlZEJac3ozaHBGT0tWCitjaWk1cmxkdzh1ZjN5UzNPa2h0MkRmSFBTRDROckd6TEdFelNUcFExMFM4TjJxMERVWXd5TFU2QzBVOEhuTVptCisvbitsQ0dCYlVveHZucnVvaEF2S0FqcEhPM3JtSjhENERlOWhsV2cvZndkQXhRUTBTdmUwa044VndrMnAxR3VPCitPV1FLVjFTVTljK2tCaW91N2Rld1FtYmlsUFJhbkttUDVaU1U0ZW1ocFRPTWxKRlhGK2ttWVNPRFFrMWNNdldXCitPYjN0dGxsMmxsWDBHdWw3U2pmK2hhcS9GY1J5Ums3VHc1TUh3WmpyNWFXaUNueTAvMCtieXZmRjZTQklmenlFCitxbHlXVVJRMmdIWlVxU2lHM1FQTVppWXIwNGNBRVFFQUFRQUgvQW00cnYvb1FGNndvZGd6NXk0emM2SkppVERBCis0K25LZEl1UjdPS3FVeGsxb283ZVpqSk1ML3h2TXVteWdOeVV2Sjlub2RsMVNsTUtpbE9oZEFzd2ZrS2o5Z0pZCitCZERKTG0xT3VmaFczcEp3eTZhaGJqZXFFZ3dKRlZFTnRTUEYwemt1eUVEOWtFbHJwYkQyWlRHZnp3ZE0wZTlECisxMFpERld0T0RDdzhyek9GY2lqdWpnSThvaWxMdHhTTnJra1RLVysyNVdKRlJOUFNIZ0lrTUltOFVsUEFHK3JqCiszWWo5VXFvZGVYVFN2WHdHMnpjZU94akZKYWRWNzdzT0ZKRGd3V3NsTjZKOEVsNCtHY2d3RlZlcEp4b1pFajdlCitjS2ttVnIwRGM5L1EwNEQ1ZFdBVGMxRlljSWhaYlR1M29JbUNBaDQ1ZXA0dTlXWUxVVjVQR3llTXZpRUVBTXdvCittSmJZQnhXdVBqcE5hNzIySFFjYnZNVWlaV1dEd0hmTENpYi9TYVAwQWdmRGFoaWQ4L1BjWnd4T1BIUEJ5QnJtCitHRGkwejdpYm4vcGdKcjA3a3BwMUNpYzludGZjMkZ2a0kwUU16RzBFdWlla3pReVBFbnpqb0RIRitWNG5KSWoyCitHV1ZqTFlZcWxaV0VtaHNmS3QxQ25sUFhCdW5Lb0RKMzBBQlBjSEovQkFEVDBXeEFJVktGNGxPMkhsckRWUDQ0CitidWZCRUc5Q3Q3ZGwvRzA4UXZlNEFnM1ZFWnBUODJ2RUZwMEx6WDBtVENESVVLSlVZQVlMeEFJUGhQN0l2SWZjCitFWlhyd3lEVXhVN1lTZ0tUSE1LbzluRkM2ZkljMUdlR1BSYWxJRjFnbVRZMzJxbFlKQzZ5NUJURGhaTlY1eWRHCit1OFFMMlAvb3JQN1h1UnJKeWV5SytRUC9YVGVrci9EUzZKa2N0ODI2TVBBNTJjaUlrV1ZnWUxhdEg1Zk80SENxCitzc0RVOHZ6N0ZiYnZHczBHMVhuN0dBNG05ZE5ZVk9adEt3WCsrM25mMklFT3BnUGlaVlRuL25QMnUzSHV0cEpiCisvSE1MbGNmWkdpR2R4UzZuL3ZkejZ3c0VvYkpvaTZTVGtIa0ErVkZOT1NabWRzdzZlS2wzWDkxMXRwQ1RZZk9HCisyVTQ3L0lrQ2JBUVlBUWdBSUJZaEJOUytJakVhMHhNZVh0b3BwR0VKTG9XM0luR0pCUUpiM3J2Y0Foc0NBVUFKCitFR0VKTG9XM0luR0p3SFFnQkJrQkNBQWRGaUVFK0RaS1dlQi8vcDlOWXdCYVphRHVvQzR3eXRjRkFsdmV1OXdBCitDZ2tRWmFEdW9DNHd5dGNEOWdmL1dpZ3RIbDdsRnlsOFJhRS91cVJPRkVlbFp5TTAwdjFoNTVmZC9JR1JHODhFCit0TjBMcjRGYXFCcVBrTVpqVS9MTjlVTUJhVGQrNzQ4dkhsSGF3ZVpxbGpYSnU5OUNPOUlkN1k0dzdXekYzQzNZCit5UXNHWjkyRUd4dGhzUEswK3JoSFYwTWJhSU51cEkxb085Z0FURmdsU3hxMTdvODNGSmF0R1JqYVhDWmF1OGpyCis1Ny9CeTFNR3RqaytJcTFOa3pHa3JYNzc4TGRSUUdMS0R3MlFhN2xzZEhZOGQzbFVQQUg4bWJiOTdFTG1JYzl0CitQRzJhTTdBVEpMN25CbUZ1VEhvNmhtRWNJdzMyRWk5S0sxenhNMFp5bEVZa2pCakhBbGtsV21LYjlNaWF5TUM1Cit1SFc3SXloamwrTmJnYklFcjJKVGFtVy85dEw2VXJJSXhpREVkcWFITmZDYUIvOUQrVjMxVXBjb2hjOWF6d0I0CitBRjhkaVF3dDVuZmlWcG5WZUYvVzgrZVMxQnkyVzZRcndMTnRoTlJhYllGbnVTZjlVU0hBWTZhdERXZStlZ0lkCitNTEl2NGNlMGkzeWtvY3pTdTBvTW9VQ014ZGw5a1Fyc05IWkNxV1gvT2lERExTYjA1dS9QLzNoZTkwMHk2dFNCCisxNU1iSVBBNmk1QncvNjkzbkhndXF4UzFBU2JCQi9MaUl1M3ZDWGRGRXM5Uk12SUorcWtQM3hRQTk2b0ltUWlLCitSM1U2T0d2NTkzZU9OS2lqVUlOTnFIUnE2K1V4SXlKK09DQWkrTDJRVGlkQWhKTFJDcDZFWkQ5NnUwMmN0aFlxCis4S0E4ajErcng5QmNiZWFjVlZIZXBlRzFKc2d4c1hYOEJUSjdadVM1VlZuZFpPamFnOFVSVy85bkpNZjAxdy9oCitlbDY0Cis9SXY3VworLS0tLS1FTkQgUEdQIFBSSVZBVEUgS0VZIEJMT0NLLS0tLS0KKy0tLS0tQkVHSU4gUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQorCittUUdpQkVabnl5a1JCQUN6Q1BqSXBUWU5MN1kydFFxbEVHVFREbHZaY1dOTGpGNWY3Wnp1eU9xTk9pZExVZ0ZECiszNnFjaDFMWkxTWmtTaGRSM0dhZStic29seWp4cmxGdUZQMGVYUlBNdHFLMjBhTHc3V1p2UEZwRVYxVGhNbmUrCitQUkpqWXJ2Z2hXdzNMMFZWSUFJWjhHWHdyVkJ1VTk5dUVqSEVJMG9qWWxvT3ZGYzJqVlBnU2FvQnZ3Q2c0OFRqCitmb2wyZm9Tb0phN1hVdTl5QUw4c3pnOEQvUlVzVHpORitJOWhTUkhsN01ZS0ZNWW9LRVk5QkRncmdBdWpwN1lZCis4cWRHc2lVYjBHZ3l6cDJrUmpaRnQ0bHBjdktoR2ZIbjVHRWptdGsrZlJiRDVxUGZNcUtGVytUME5QZllsWW1MCitKSjRmczRxWjhMeDd4NmlHNlg1MXUrWU53c1F1SUdqTUNDM0NlTmkzRjdvcjY1MWtrTllBU2JhUTFOUk9rQ0lOCitOdWR5QS8wYWFzdm9aVW9OSkFjMmNQNUlmczZXaFhNV0xmTVIycDJYYmZLd0tOWW5lZWM2MHVzblNDb21jS3FoCitzSlZrMEd5dHZyM0ZPWVZoUmtYbktBYngrMFcydXJGUDhPRlZCVEVLTzZUczJWeWdXR2duZVFZb0hucXp3bFVFCit5ak9qbHIrbHlmN3Uycy9LQXhwS0E2am50dEVkUlpBbXpXa2h1b3gxd3dBVWtyMjcvYlFpUXlCUElFMXBkSFJsCitjaUE4WTI5dGJXbDBkR1Z5UUdWNFlXMXdiR1V1WTI5dFBvaGVCQk1SQWdBZUJRSkdaOHNwQWhzREJnc0pDQWNECitBZ01WQWdNREZnSUJBaDRCQWhlQUFBb0pFQk8yOVI3TjNrTU5kQjBBb0wzWi83QTZ0T1J1WThSLzY3Nm9EOGEvCitvSEZEQUo5RFhid2xjS0xjeWt3SHkwallxYWpYbTFpQ2Via0NEUVJHWjh0T0VBZ0F6cmw1UDFQcjZDRFI4bWY1CitER0d6Y1VVTStQRXJvQTRGTGRLSjVaYVpjN3F5MWxtbVc5dnV2YjZ4ZGlud2N3ZWUyYzVmZE5FK2lVakhWMngyCitTL2RiZkR6SlROLzB1YWpaY3creG5mK0t4WjBSczRnRFNzN2NIWEhCdEE3dThTaFlkNEh1N0pnZ1hwaXdnZlNrCit5ckdRaVp5TEFIVzJjazhIMDdHbzhlVVA4ZkxJZXZhK2lQcWVZUVpvOUJhUHo5MlIvSjZkZWJwZVkxbFJrdit5CitXVHExR0UzQy9oeGJkQkF1SGYyZHVMUDJ1cTlrd29WZGZ6Q1JqZ1YxQ1FtTUliQ3JNYjd2SWx6SWU5NmJiMytLCityLytORXRtQjJJM3dIQlhjd0pNbklPbno5WnY5MzNLTmx4U2JWRjIzQkdMQitGOUQ3T2FuS3ltYnM3RWcxOGZyCittdC90L3dBRURRZ0F0R0l4R3o5NDRQbjJPdGhlWTlKbEJSdUlBdVZza20yNC9aejAzZFpuazZDdUVPSUJiNUlNCitnMzZHQVBLY24xdnNMWjBUZkUxcTUzak5wY0FBWGpnbmduUnNDalptMW1nbHFQRDRaZkJwbCtIaG51YzgwZkFSCit4c1VQais1YzhLUDJNK1J3czRtb2FaUmpWcGQzS0NpM2NlZmxUL09qd25FOUR6ZGhzbENHVE1BNW44Y2FqQXMyCitvcUFhUXNzZWZWZjJwckxRTEdWOU5CNFEzbEZuS1hkdmlwSE1hQVlBc1craUY3SmtoVERWTnVOR2x1ZmVTcVVtCitpZ1JCalRaWEJjVmQ4c2o4dkRPQ1dLVWZxeEp5Uyt6Ulljb3RuN1F2cHZjS0FrYzNaR3hudERIQUlHTFZwNmF5CisrdnJrVjRSZW44QmpGb2JsMjVSdXk2QWJ3K0NnblRwdXdZaEpCQmdSQWdBSkJRSkdaOHRPQWhzTUFBb0pFQk8yCis5UjdOM2tNTndld0FvTkJ5Z0MwTllrVzZsVkdxVjRFSjdQSGhEYVNFQUp3S3o3OHUwVHd0djJFTDdaeSt2ZTRmCittbnpZQXBrQkRRUlJUSlpIQVFnQXlZdjhad0JmTWlOK0R4NHBVZ216TzFiVGhUdGU2QlRKS2J1SElEZGtLVDdqCitPVEZZOG5MNjh5a29MbVJiendneTgzZ0JTVnRiajhTK0VoMmgwcElyQXF4WVlveCt6aVZuRGp6VDBoUXNMdm9wCit3S0FMTHg1dUo3T3FYdzJja1kxVXgwbU9LM1RDRXFpaFVhTTJsN3ZMeDNnVWN5SVJaN213UW5xU21WdE82Q2o1Cis2NXhDMVUxVkVsRlNQdW5wZkNSWmlTRnNjU3pTNFgwVVVqeGRMK0RBMXp4Zi80Z2xvbVF5UGlkYVM3ME9WZjMrCisyTFg3QXhsZEtEMk91aWU5Z1JTUnVlZVhpZ2JiWnpXUGROUzVpTjZISitUK1lsWjF3MnFqQkpjT3hTcVp3RFY3CituSUdOeCtKQzhqWkNON055ZEFobTF5TzI5ekFWclkzTGJvVnI5YXRodVFBUkFRQUJ0Q1JGY21seklFUnBjMk52CitjbVJwWVNBOFpHbHpZMjl5WkVCbGVHRnRjR3hsTG01bGRENkpBVGdFRXdFQ0FDSUZBbEZNbGtjQ0d3TUdDd2tJCitCd01DQmhVSUFna0tDd1FXQWdNQkFoNEJBaGVBQUFvSkVHRUpMb1czSW5HSldLTUgrd2ZuL2hRM0MxWDhQRjh4CitwU3BMdFJlanlOY2hncmV3RER0dnlaSmp1QzVZQjdpSUJhYW51Vy8xNHlwZENMRVhHMVM0cmFvaUtKSFBMdnV4CisvTW1GT3V3dzVZcXU3ZFlLZ2N2cWs0VWgzSUorbGpDazJxZ3FqaE5vOHg4cXJwU0FNMExDVVBuT1VrYUh4R1FDCitrK0VHdGc4dnA3S2xnNlNCTy9HaVhkRlo1SlBWT2g5bGJnQWIxSGpmeURJTDhUNitkdWFQcXdRK3kxT0Nkd3JUCitzMzFmckR1dnQ5M1d2Z1p2VklaRWVMUXVCLzU5WFF6ZFNXTHNRVUc0TVU2djRmSmludVArLzJMOHZ1VnJHSGZlCittVVN4Tm1SVm5sbDdTcE1KbUcwT05odDBtVkYybWZFZkRyVzA4bEs0MnhTb3FUdU1MMThJY283dFpmWE1RTEszCitHdXNXMGdpNUFRMEVVVXlXUndFSUFLazdUeFhFMTZqUGxLTzJ6cUtQblhCNHZGdzMvL0YwaEptWHpDblAxT2FVCitrd1pPNGRZRWlyaHM0eGRwOThFSnVnUFB0ZE5iMHkya09qNkJReFZ2TGtBZE5KbzhwaHEwUTJCWU0vRzQ0WjJuCitwR1p3T0YwNGE5VVRvMzM0REliTjdrNlFubTNWZnBTL0N0S0NVeDNOL1V6eTA0TnR3eFhFVWd6ZnR3RVNTVXUvCitna1FTRzdmUytZRG02WUFPQjFHcWY2T2plenRPSzBEajFQTnpBS3A4S05pVXp2dzNuZE02R25kRmFOOVRacE9CCitmaXJ4Qk9kbjdSaDIzZThxaUZCaWdiZGtua3dJZk9kR25DM2pXVC9sZFdPMnJRUXErLzg1dmlhUjFxdlRoKy96CithSnBSQ0pNUy9GZzdmQm53Q3FLbVlLbm55L2dBaEp5MndMZFhidDM5QmJNQUVRRUFBWWtCSHdRWUFRSUFDUVVDCitVVXlXUndJYkRBQUtDUkJoQ1M2RnR5SnhpZXh4Q0FERjVESCtIRGxwcHdMcjczRXB0eXFTNElibG9wUFhjbjU5CitiR1B5QnVXcmFDaXZzcVpsZjA1UVpUR2FoVU03anlDVUUvRlMyNXNiUzVRNFNSdE9DMnlPblBHc1NHY1RqbVNpCis4dVowMDBzdGVzN2FoSGt1M29ueHl6MllOVkJSY2hCQ0VOVjF0QWpRd0hybGlvZmRCRVk4cGVBb096NTFrbWZSCitJdnM0K2lRK1QzSFl0d1NZVUtQVmppemxSQ2REUjVuc0UyS3BQVUZWeC85TDlSM1plQ3pDYllIRzNXdzFwT0ZFCis1RjI0UGFaOTdwZ29KRFNkMWJQSDFweUZqdlNNM2E5djhLeFdOaWIxRSsyTDVmc0xEU0ZtcmJ6aE14c3U1d1RsCit1L0ZsTWM0YnRHQ1V5eXN2b2lnbzRPUjB1WGNlamd2bnVHaEJJSDRUVHdqSkc3dzdDWTdVdVFFTkJGdmV1OXdCCitDQUNvN0hrOUxFMEk4amQvWHpwOUg4OFZxZlBVUkRGRkNvQzRvRzlOVENycmpTTjNIblFXYk05NGFSVGlsWElvCit1YTVYY1BMbjk4a3R6cEliZGczeHowZytEYXhzeXhoTTBrNlVOZEV2RGRxdEExR01NaTFPZ3RGUEI1ekdadjUvCitwUWhnVzFLTWI1NjdxSVFMeWdJNlJ6dDY1aWZBK0EzdllaVm9QMzhIUU1VRU5FcjN0SkRmRmNKTnFkUnJqamxrCitDbGRVbFBYUHBBWXFMdTNYc0VKbTRwVDBXcHlwaitXVWxPSHBvYVV6akpTUlZ4ZnBKbUVqZzBKTlhETDFsam05Cis3YlpaZHBaVjlCcnBlMG8zL29XcXZ4WEVja1pPMDhPVEI4R1k2K1dsb2dwOHRQOVBtOHIzeGVrZ1NIODhoS3BjCitsbEVVTm9CMlZLa29odDBEekdZbUs5T0hBQkVCQUFHSkFtd0VHQUVJQUNBV0lRVFV2aUl4R3RNVEhsN2FLYVJoCitDUzZGdHlKeGlRVUNXOTY3M0FJYkFnRkFDUkJoQ1M2RnR5SnhpY0IwSUFRWkFRZ0FIUlloQlBnMlNsbmdmLzZmCitUV01BV21XZzdxQXVNTXJYQlFKYjNydmNBQW9KRUdXZzdxQXVNTXJYQS9ZSC8xb29MUjVlNVJjcGZFV2hQN3FrCitUaFJIcFdjak5OTDlZZWVYM2Z5QmtSdlBCTFRkQzYrQldxZ2FqNURHWTFQeXpmVkRBV2szZnUrUEx4NVIyc0htCithcFkxeWJ2ZlFqdlNIZTJPTU8xc3hkd3QyTWtMQm1mZGhCc2JZYkR5dFBxNFIxZERHMmlEYnFTTmFEdllBRXhZCitKVXNhdGU2UE54U1dyUmtZMmx3bVdydkk2K2Uvd2N0VEJyWTVQaUt0VFpNeHBLMSsrL0MzVVVCaXlnOE5rR3U1CitiSFIyUEhkNVZEd0IvSm0yL2V4QzVpSFBiVHh0bWpPd0V5Uys1d1poYmt4Nk9vWmhIQ01OOWhJdlNpdGM4VE5HCitjcFJHSkl3WXh3SlpKVnBpbS9USW1zakF1YmgxdXlNb1k1ZmpXNEd5Qks5aVUycGx2L2JTK2xLeUNNWWd4SGFtCitoelh3bWdmL1EvbGQ5VktYS0lYUFdzOEFlQUJmSFlrTUxlWjM0bGFaMVhoZjF2UG5rdFFjdGx1a0s4Q3piWVRVCitXbTJCWjdrbi9WRWh3R09tclExbnZub0NIVEN5TCtISHRJdDhwS0hNMHJ0S0RLRkFqTVhaZlpFSzdEUjJRcWxsCisvem9nd3kwbTlPYnZ6Lzk0WHZkTk11clVnZGVUR3lEd09vdVFjUCt2ZDV4NExxc1V0UUVtd1FmeTRpTHQ3d2wzCitSUkxQVVRMeUNmcXBEOThVQVBlcUNKa0lpa2QxT2pocitmZDNqalNvbzFDRFRhaDBhdXZsTVNNaWZqZ2dJdmk5CitrRTRuUUlTUzBRcWVoR1EvZXJ0Tm5MWVdLdkNnUEk5ZnE4ZlFYRzNtbkZWUjNxWGh0U2JJTWJGMS9BVXllMmJrCit1VlZaM1dUbzJvUEZFVnYvWnlUSDlOY1A0WHBldUE9PQorPUtSeVQKKy0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KZGlmZiAtLWdpdCBhL3QvbGliLWdwZy9vd25lcnRydXN0IGIvdC9saWItZ3BnL293bmVydHJ1c3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlM2M0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWdwZy9vd25lcnRydXN0CkBAIC0wLDAgKzEsNCBAQAorIyBMaXN0IG9mIGFzc2lnbmVkIHRydXN0dmFsdWVzLCBjcmVhdGVkIFRodSAxMSBEZWMgMjAxNCAwMToyNjoyOCBQTSBDRVQKKyMgKFVzZSAiZ3BnIC0taW1wb3J0LW93bmVydHJ1c3QiIHRvIHJlc3RvcmUgdGhlbSkKKzczRDc1ODc0NEJFNzIxNjk4RUM1NEU4NzEzQjZGNTFFQ0RERTQzMEQ6NjoKK0Q0QkUyMjMxMUFEMzEzMUU1RURBMjlBNDYxMDkyRTg1QjcyMjcxODk6MzoKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkLnNoIGIvdC9saWItaHR0cGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0OWVlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWh0dHBkLnNoCkBAIC0wLDAgKzEsMzA4IEBACisjIFNoZWxsIGxpYnJhcnkgdG8gcnVuIGFuIEhUVFAgc2VydmVyIGZvciB1c2UgaW4gdGVzdHMuCisjIEVuZHMgdGhlIHRlc3QgZWFybHkgaWYgaHR0cGQgdGVzdHMgc2hvdWxkIG5vdCBiZSBydW4sCisjIGZvciBleGFtcGxlIGJlY2F1c2UgdGhlIHVzZXIgaGFzIG5vdCBlbmFibGVkIHRoZW0uCisjCisjIFVzYWdlOgorIworIwkuIC4vdGVzdC1saWIuc2gKKyMJLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKKyMJc3RhcnRfaHR0cGQKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4uJyAnCisjCQkuLi4KKyMJJworIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzIC4uLgorIworIwl0ZXN0X2RvbmUKKyMKKyMgQ2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMuCisjCisjICAgIEdJVF9URVNUX0hUVFBEICAgICAgICAgICAgICBlbmFibGUgSFRUUEQgdGVzdHMKKyMgICAgTElCX0hUVFBEX1BBVEggICAgICAgICAgICAgIHdlYiBzZXJ2ZXIgcGF0aAorIyAgICBMSUJfSFRUUERfTU9EVUxFX1BBVEggICAgICAgd2ViIHNlcnZlciBtb2R1bGVzIHBhdGgKKyMgICAgTElCX0hUVFBEX1BPUlQgICAgICAgICAgICAgIGxpc3RlbmluZyBwb3J0CisjICAgIExJQl9IVFRQRF9EQVYgICAgICAgICAgICAgICBlbmFibGUgREFWCisjICAgIExJQl9IVFRQRF9TVk4gICAgICAgICAgICAgICBlbmFibGUgU1ZOIGF0IGdpdmVuIGxvY2F0aW9uIChlLmcuICJzdm4iKQorIyAgICBMSUJfSFRUUERfU1NMICAgICAgICAgICAgICAgZW5hYmxlIFNTTAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2xlbWVucyBCdWNoYWNoZXIgPGRyaXp6ZEBhb24uYXQ+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+CmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9hcHBseS1vbmUtdGltZS1wZXJsLnNoIGIvdC9saWItaHR0cGQvYXBwbHktb25lLXRpbWUtcGVybC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWEwYWJkCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvYXBwbHktb25lLXRpbWUtcGVybC5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworIyBJZiAib25lLXRpbWUtcGVybCIgZXhpc3RzIGluICRIVFRQRF9ST09UX1BBVEgsIHJ1biBwZXJsIG9uIHRoZSBIVFRQIHJlc3BvbnNlLAorIyB1c2luZyB0aGUgY29udGVudHMgb2YgIm9uZS10aW1lLXBlcmwiIGFzIHRoZSBwZXJsIGNvbW1hbmQgdG8gYmUgcnVuLiBJZiB0aGUKKyMgcmVzcG9uc2Ugd2FzIG1vZGlmaWVkIGFzIGEgcmVzdWx0LCBkZWxldGUgIm9uZS10aW1lLXBlcmwiIHNvIHRoYXQgc3Vic2VxdWVudAorIyBIVFRQIHJlc3BvbnNlcyBhcmUgbm8gbG9uZ2VyIG1vZGlmaWVkLgorIworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIHRoZSBlZmZlY3RzIG9mIHRoZSByZXBvc2l0b3J5IGNoYW5naW5nIGluCisjIGJldHdlZW4gSFRUUCByZXF1ZXN0LXJlc3BvbnNlIHBhaXJzLgoraWYgdGVzdCAtZiBvbmUtdGltZS1wZXJsCit0aGVuCisJTENfQUxMPUMKKwlleHBvcnQgTENfQUxMCisKKwkiJEdJVF9FWEVDX1BBVEgvZ2l0LWh0dHAtYmFja2VuZCIgPm91dAorCXBlcmwgLXBlICIkKGNhdCBvbmUtdGltZS1wZXJsKSIgb3V0ID5vdXRfbW9kaWZpZWQKKworCWlmIGNtcCAtcyBvdXQgb3V0X21vZGlmaWVkCisJdGhlbgorCQljYXQgb3V0CisJZWxzZQorCQljYXQgb3V0X21vZGlmaWVkCisJCXJtIG9uZS10aW1lLXBlcmwKKwlmaQorZWxzZQorCSIkR0lUX0VYRUNfUEFUSC9naXQtaHR0cC1iYWNrZW5kIgorZmkKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL2Jyb2tlbi1zbWFydC1odHRwLnNoIGIvdC9saWItaHR0cGQvYnJva2VuLXNtYXJ0LWh0dHAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjYzYxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWh0dHBkL2Jyb2tlbi1zbWFydC1odHRwLnNoCkBAIC0wLDAgKzEsMTAgQEAKK3ByaW50ZiAiQ29udGVudC1UeXBlOiB0ZXh0LyVzXG4iICJodG1sIgorZWNobworcHJpbnRmICIlc1xuIiAiMDAxZSMgc2VydmljZT1naXQtdXBsb2FkLXBhY2siCitwcmludGYgIiVzIiAgICIwMDAwIgorcHJpbnRmICIlcyVjJXMlc1xuIiBcCisJIjAwYTU4NjgxZDlmMjg2YTQ4YjA4ZjM3YjNhMDk1MzMwZGExNjY4OWUzNjkzIEhFQUQiIFwKKwkwIFwKKwkiIGluY2x1ZGUtdGFnIG11bHRpX2Fja19kZXRhaWxlZCBtdWx0aV9hY2sgb2ZzLWRlbHRhIiBcCisJIiBzaWRlLWJhbmQgc2lkZS1iYW5kLTY0ayB0aGluLXBhY2sgbm8tcHJvZ3Jlc3Mgc2hhbGxvdyBuby1kb25lICIKK3ByaW50ZiAiJXMiICAgIjAwMDAiCmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9lcnJvci1zbWFydC1odHRwLnNoIGIvdC9saWItaHR0cGQvZXJyb3Itc21hcnQtaHR0cC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjVkNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvZXJyb3Itc21hcnQtaHR0cC5zaApAQCAtMCwwICsxLDMgQEAKK2VjaG8gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stYWR2ZXJ0aXNlbWVudCIKK2VjaG8KK3ByaW50ZiAiJXMiICIwMDE5RVJSIHNlcnZlci1zaWRlIGVycm9yIgpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQvZXJyb3Iuc2ggYi90L2xpYi1odHRwZC9lcnJvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNzdiOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvZXJyb3Iuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKK3ByaW50ZiAiU3RhdHVzOiA1MDAgSW50ZW50aW9uYWwgQnJlYWthZ2VcbiIKKworcHJpbnRmICJDb250ZW50LVR5cGU6ICIKK2NoYXJzZXQ9aXNvLTg4NTktMQorY2FzZSAiJFBBVEhfSU5GTyIgaW4KKypodG1sKikKKwlwcmludGYgInRleHQvaHRtbCIKKwk7OworKnRleHQqKQorCXByaW50ZiAidGV4dC9wbGFpbiIKKwk7OworKmNoYXJzZXQqKQorCXByaW50ZiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIKKwljaGFyc2V0PXV0Zi04CisJOzsKKyp1dGYxNiopCisJcHJpbnRmICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi0xNiIKKwljaGFyc2V0PXV0Zi0xNgorCTs7Cisqb2RkLXNwYWNpbmcqKQorCXByaW50ZiAidGV4dC9wbGFpbjsgZm9vPWJhciA7Y2hhcnNldD11dGYtMTY7IG90aGVyPW5vbnNlbnNlIgorCWNoYXJzZXQ9dXRmLTE2CisJOzsKK2VzYWMKK3ByaW50ZiAiXG4iCisKK3ByaW50ZiAiXG4iCitwcmludGYgInRoaXMgaXMgdGhlIGVycm9yIG1lc3NhZ2VcbiIgfAoraWNvbnYgLWYgdXMtYXNjaWkgLXQgJGNoYXJzZXQKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL3Bhc3N3ZCBiL3QvbGliLWh0dHBkL3Bhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWEzNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvcGFzc3dkCkBAIC0wLDAgKzEgQEAKK3VzZXJAaG9zdDp4YjRFOHBxRDgxS1FzCmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9zc2wuY25mIGIvdC9saWItaHR0cGQvc3NsLmNuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFiMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvc3NsLmNuZgpAQCAtMCwwICsxLDggQEAKK1JBTkRGSUxFICAgICAgICAgICAgICAgID0gJEVOVjo6UkFOREZJTEVfUEFUSAorCitbIHJlcSBdCitkZWZhdWx0X2JpdHMgICAgICAgICAgICA9IDEwMjQKK2Rpc3Rpbmd1aXNoZWRfbmFtZSAgICAgID0gcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZQorcHJvbXB0ICAgICAgICAgICAgICAgICAgPSBubworWyByZXFfZGlzdGluZ3Vpc2hlZF9uYW1lIF0KK2NvbW1vbk5hbWUgICAgICAgICAgICAgID0gMTI3LjAuMC4xCmRpZmYgLS1naXQgYS90L2xpYi1sb2ctZ3JhcGguc2ggYi90L2xpYi1sb2ctZ3JhcGguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTE4NGNjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWxvZy1ncmFwaC5zaApAQCAtMCwwICsxLDI4IEBACisjIEhlbHBzIHNoYXJlZCBieSB0aGUgdGVzdCBzY3JpcHRzIGZvciBjb21wYXJpbmcgbG9nIGdyYXBocy4KKworc2FuaXRpemVfbG9nX291dHB1dCAoKSB7CisJc2VkIC1lICdzLyAqJC8vJyBcCisJICAgIC1lICdzL2NvbW1pdCBbMC05YS1mXSokL2NvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUvJyBcCisJICAgIC1lICdzL01lcmdlOiBbIDAtOWEtZl0qJC9NZXJnZTogTUVSR0VfUEFSRU5UUy8nIFwKKwkgICAgLWUgJ3MvTWVyZ2UgdGFnLiovTWVyZ2UgSEVBRFMgREVTQ1JJUFRJT04vJyBcCisJICAgIC1lICdzL01lcmdlIGNvbW1pdC4qL01lcmdlIEhFQURTIERFU0NSSVBUSU9OLycgXAorCSAgICAtZSAncy9pbmRleCBbMC05YS1mXSpcLlwuWzAtOWEtZl0qL2luZGV4IEJFRk9SRS4uQUZURVIvJworfQorCitsaWJfdGVzdF9jbXBfZ3JhcGggKCkgeworCWdpdCBsb2cgLS1ncmFwaCAiJEAiID5vdXRwdXQgJiYKKwlzZWQgJ3MvICokLy8nID5vdXRwdXQuc2FuaXRpemVkIDxvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dC5zYW5pdGl6ZWQKK30KKworbGliX3Rlc3RfY21wX3Nob3J0X2dyYXBoICgpIHsKKwlnaXQgbG9nIC0tZ3JhcGggLS1wcmV0dHk9c2hvcnQgIiRAIiA+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+YWN0dWFsIDw8LUVPRgorCUVESVRPUj0kRURJVE9SCisJRkFLRV9DT01NSVRfQU1FTkQ9JEZBS0VfQ09NTUlUX0FNRU5ECisJRkFLRV9DT01NSVRfTUVTU0FHRT0kRkFLRV9DT01NSVRfTUVTU0FHRQorCUZBS0VfTElORVM9JEZBS0VfTElORVMKKwlHSVRfRURJVE9SPSRHSVRfRURJVE9SCisJR0lUX1NFUVVFTkNFX0VESVRPUj0kR0lUX1NFUVVFTkNFX0VESVRPUgorCWNvcmUuZWRpdG9yPSQoZ2l0IGNvbmZpZyBjb3JlLmVkaXRvcikKKwlzZXF1ZW5jZS5lZGl0b3I9JChnaXQgY29uZmlnIHNlcXVlbmNlLmVkaXRvcikKKwlFT0YnCisJY2F0ID5leHBlY3QgPDwtXEVPRgorCUVESVRPUj06CisJRkFLRV9DT01NSVRfQU1FTkQ9CisJRkFLRV9DT01NSVRfTUVTU0FHRT0KKwlGQUtFX0xJTkVTPQorCUdJVF9FRElUT1I9CisJR0lUX1NFUVVFTkNFX0VESVRPUj0KKwljb3JlLmVkaXRvcj0KKwlzZXF1ZW5jZS5lZGl0b3I9CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQpkaWZmIC0tZ2l0IGEvdC9saWItc3VibW9kdWxlLXVwZGF0ZS5zaCBiL3QvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWRkMTdmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKQEAgLTAsMCArMSwxMDM0IEBACisjIENyZWF0ZSBhIHN1Ym1vZHVsZSBsYXlvdXQgdXNlZCBmb3IgYWxsIHRlc3RzIGJlbG93LgorIworIyBUaGUgZm9sbG93aW5nIHVzZSBjYXNlcyBhcmUgY292ZXJlZDoKKyMgLSBOZXcgc3VibW9kdWxlIChub19zdWJtb2R1bGUgPT4gYWRkX3N1YjEpCisjIC0gUmVtb3ZlZCBzdWJtb2R1bGUgKGFkZF9zdWIxID0+IHJlbW92ZV9zdWIxKQorIyAtIFVwZGF0ZWQgc3VibW9kdWxlIChhZGRfc3ViMSA9PiBtb2RpZnlfc3ViMSkKKyMgLSBVcGRhdGVkIHN1Ym1vZHVsZSByZWN1cnNpdmVseSAoYWRkX25lc3RlZF9zdWIgPT4gbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkpCisjIC0gU3VibW9kdWxlIHVwZGF0ZWQgdG8gaW52YWxpZCBjb21taXQgKGFkZF9zdWIxID0+IGludmFsaWRfc3ViMSkKKyMgLSBTdWJtb2R1bGUgdXBkYXRlZCBmcm9tIGludmFsaWQgY29tbWl0IChpbnZhbGlkX3N1YjEgPT4gdmFsaWRfc3ViMSkKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlcyBpbiBkaXJlY3RvcnkgKGFkZF9zdWIxID0+CisjICAgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5KQorIyAtIERpcmVjdG9yeSBjb250YWluaW5nIHRyYWNrZWQgZmlsZXMgcmVwbGFjZWQgYnkgc3VibW9kdWxlCisjICAgKHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSA9PiByZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEpCisjIC0gU3VibW9kdWxlIHJlcGxhY2VkIGJ5IHRyYWNrZWQgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgKGFkZF9zdWIxID0+CisjICAgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSkKKyMgLSBUcmFja2VkIGZpbGUgcmVwbGFjZWQgYnkgc3VibW9kdWxlIChyZXBsYWNlX3N1YjFfd2l0aF9maWxlID0+CisjICAgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSkKKyMKKyMgICAgICAgICAgICAgICAgICAgICAtLS0tTworIyAgICAgICAgICAgICAgICAgICAgLyAgICBeCisjICAgICAgICAgICAgICAgICAgIC8gICAgIHJlbW92ZV9zdWIxCisjICAgICAgICAgICAgICAgICAgLworIyAgICAgICBhZGRfc3ViMSAgLy0tLS0tLS1PLS0tLS0tLS0tTy0tLS0tLS0tTyAgbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkKKyMgICAgICAgICAgICAgfCAgLyAgICAgICAgXiAgICAgICAgIGFkZF9uZXN0ZWRfc3ViCisjICAgICAgICAgICAgIHwgLyAgICAgICAgIG1vZGlmeV9zdWIxCisjICAgICAgICAgICAgIHYvCisjICAgICAgTy0tLS0tLU8tLS0tLS0tLS0tLU8tLS0tLS0tLS1PCisjICAgICAgXiAgICAgICBcICAgICAgICAgIF4gICAgICAgICByZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEKKyMgICAgICB8ICAgICAgICBcICAgICAgICAgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5CisjIG5vX3N1Ym1vZHVsZSAgIFwKKyMgICAgICAgICAgICAgICAgIC0tLS0tLS0tTy0tLS0tLS0tLU8KKyMgICAgICAgICAgICAgICAgICBcICAgICAgXiAgICAgICAgIHJlcGxhY2VfZmlsZV93aXRoX3N1YjEKKyMgICAgICAgICAgICAgICAgICAgXCAgICAgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZQorIyAgICAgICAgICAgICAgICAgICAgXAorIyAgICAgICAgICAgICAgICAgICAgIC0tLS1PLS0tLS0tLS0tTworIyAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgdmFsaWRfc3ViMQorIyAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkX3N1YjEKKyMKKworY3JlYXRlX2xpYl9zdWJtb2R1bGVfcmVwbyAoKSB7CisJZ2l0IGluaXQgc3VibW9kdWxlX3VwZGF0ZV9zdWIxICYmCisJKAorCQljZCBzdWJtb2R1bGVfdXBkYXRlX3N1YjEgJiYKKwkJZWNobyAiZXhwZWN0IiA+Pi5naXRpZ25vcmUgJiYKKwkJZWNobyAiYWN0dWFsIiA+Pi5naXRpZ25vcmUgJiYKKwkJZWNobyAieCIgPmZpbGUxICYmCisJCWVjaG8gInkiID5maWxlMiAmJgorCQlnaXQgYWRkIC5naXRpZ25vcmUgZmlsZTEgZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQmFzZSBpbnNpZGUgZmlyc3Qgc3VibW9kdWxlIiAmJgorCQlnaXQgYnJhbmNoICJub19zdWJtb2R1bGUiCisJKSAmJgorCWdpdCBpbml0IHN1Ym1vZHVsZV91cGRhdGVfc3ViMiAmJgorCSgKKwkJY2Qgc3VibW9kdWxlX3VwZGF0ZV9zdWIyCisJCWVjaG8gImV4cGVjdCIgPj4uZ2l0aWdub3JlICYmCisJCWVjaG8gImFjdHVhbCIgPj4uZ2l0aWdub3JlICYmCisJCWVjaG8gIngiID5maWxlMSAmJgorCQllY2hvICJ5IiA+ZmlsZTIgJiYKKwkJZ2l0IGFkZCAuZ2l0aWdub3JlIGZpbGUxIGZpbGUyICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZCBzdWJtb2R1bGUgYmFzZSIgJiYKKwkJZ2l0IGJyYW5jaCAibm9fc3VibW9kdWxlIgorCSkgJiYKKwlnaXQgaW5pdCBzdWJtb2R1bGVfdXBkYXRlX3JlcG8gJiYKKwkoCisJCWNkIHN1Ym1vZHVsZV91cGRhdGVfcmVwbyAmJgorCQllY2hvICJleHBlY3QiID4+LmdpdGlnbm9yZSAmJgorCQllY2hvICJhY3R1YWwiID4+LmdpdGlnbm9yZSAmJgorCQllY2hvICJ4IiA+ZmlsZTEgJiYKKwkJZWNobyAieSIgPmZpbGUyICYmCisJCWdpdCBhZGQgLmdpdGlnbm9yZSBmaWxlMSBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJCYXNlIiAmJgorCQlnaXQgYnJhbmNoICJub19zdWJtb2R1bGUiICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iICJhZGRfc3ViMSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlX3VwZGF0ZV9zdWIxIHN1YjEgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlX3VwZGF0ZV9zdWIxIHVuaW5pdGlhbGl6ZWRfc3ViICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1YjEuaWdub3JlIGFsbCAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIxLmlnbm9yZSBhbGwgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgc3ViMSIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgcmVtb3ZlX3N1YjEgYWRkX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIG1vZGlmeV9zdWIxIGFkZF9zdWIxICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJCSgKKwkJCWNkIHN1YjEgJiYKKwkJCWdpdCBmZXRjaCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1iICJtb2RpZmljYXRpb25zIiAmJgorCQkJZWNobyAieiIgPmZpbGUyICYmCisJCQllY2hvICJ4IiA+ZmlsZTMgJiYKKwkJCWdpdCBhZGQgZmlsZTIgZmlsZTMgJiYKKwkJCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGZpbGUyIGFuZCBhZGRlZCBmaWxlMyIgJiYKKwkJCWdpdCBwdXNoIG9yaWdpbiBtb2RpZmljYXRpb25zCisJCSkgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLW0gIk1vZGlmeSBzdWIxIiAmJgorCisJCWdpdCBjaGVja291dCAtYiBhZGRfbmVzdGVkX3N1YiBtb2RpZnlfc3ViMSAmJgorCQlnaXQgLUMgc3ViMSBjaGVja291dCAtYiAiYWRkX25lc3RlZF9zdWIiICYmCisJCWdpdCAtQyBzdWIxIHN1Ym1vZHVsZSBhZGQgLS1icmFuY2ggbm9fc3VibW9kdWxlIC4uL3N1Ym1vZHVsZV91cGRhdGVfc3ViMiBzdWIyICYmCisJCWdpdCAtQyBzdWIxIGNvbW1pdCAtYSAtbSAiYWRkIGEgbmVzdGVkIHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZSBzdWJtb2R1bGUsIHRoYXQgdXBkYXRlcyBhIG5lc3RlZCBzdWJtb2R1bGUiICYmCisJCWdpdCBjaGVja291dCAtYiBtb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQlnaXQgLUMgc3ViMSBjaGVja291dCAtYiBtb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQlnaXQgLUMgc3ViMS9zdWIyIGNoZWNrb3V0IC1iIG1vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5ICYmCisJCWVjaG8gY2hhbmdlID5zdWIxL3N1YjIvZmlsZTMgJiYKKwkJZ2l0IC1DIHN1YjEvc3ViMiBhZGQgZmlsZTMgJiYKKwkJZ2l0IC1DIHN1YjEvc3ViMiBjb21taXQgLW0gIm1ha2UgYSBjaGFuZ2UgaW4gbmVzdGVkIHN1YiIgJiYKKwkJZ2l0IC1DIHN1YjEgYWRkIHN1YjIgJiYKKwkJZ2l0IC1DIHN1YjEgY29tbWl0IC1tICJ1cGRhdGUgbmVzdGVkIHN1YiIgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLW0gInVwZGF0ZSBzdWIxLCB0aGF0IHVwZGF0ZXMgbmVzdGVkIHN1YiIgJiYKKwkJZ2l0IC1DIHN1YjEgcHVzaCBvcmlnaW4gbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkgJiYKKwkJZ2l0IC1DIHN1YjEvc3ViMiBwdXNoIG9yaWdpbiBtb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQlnaXQgLUMgc3ViMSBzdWJtb2R1bGUgZGVpbml0IC1mIC0tYWxsICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSBhZGRfc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQlnaXQgLUMgc3ViMSBjaGVja291dCBtb2RpZmljYXRpb25zICYmCisJCWdpdCBybSAtLWNhY2hlZCBzdWIxICYmCisJCXJtIHN1YjEvLmdpdCogJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbW92ZS1zZWN0aW9uICJzdWJtb2R1bGUuc3ViMSIgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyBzdWIxLyogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVwbGFjZSBzdWIxIHdpdGggZGlyZWN0b3J5IiAmJgorCisJCWdpdCBjaGVja291dCAtYiByZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgYWRkX3N1YjEgJiYKKwkJZ2l0IHJtIHN1YjEgJiYKKwkJZWNobyAiY29udGVudCIgPnN1YjEgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLW0gIlJlcGxhY2Ugc3ViMSB3aXRoIGZpbGUiICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlcGxhY2VfZmlsZV93aXRoX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIGludmFsaWRfc3ViMSBhZGRfc3ViMSAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAkKHRlc3Rfb2lkIG51bWVyaWMpIHN1YjEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiSW52YWxpZCBzdWIxIGNvbW1pdCIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHZhbGlkX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSBnaXRmaWxlIHdpdGggLmdpdCBkaXJlY3RvcnkKK3JlcGxhY2VfZ2l0ZmlsZV93aXRoX2dpdF9kaXIgKCkgeworCSgKKwkJY2QgIiQxIiAmJgorCQlnaXRfZGlyPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSIgJiYKKwkJcm0gLWYgLmdpdCAmJgorCQljcCAtUiAiJGdpdF9kaXIiIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKQorfQorCisjIFRlc3QgdGhhdCB0aGUgLmdpdCBkaXJlY3RvcnkgaW4gdGhlIHN1Ym1vZHVsZSBpcyB1bmNoYW5nZWQgKGV4Y2VwdCBmb3IgdGhlCisjIGNvcmUud29ya3RyZWUgc2V0dGluZywgd2hpY2ggYXBwZWFycyBvbmx5IGluICRHSVRfRElSL21vZHVsZXMvJDEvY29uZmlnKS4KKyMgQ2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSB0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IGFzIHRoZSBsYXR0ZXIgbWlnaHQKKyMgd3JpdGUgdGhlIGluZGV4IGZpbGUgbGVhZGluZyB0byBmYWxzZSBwb3NpdGl2ZSBpbmRleCBkaWZmZXJlbmNlcy4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgb25seSBzdXBwb3J0cyBzdWJtb2R1bGVzIGF0IHRoZSByb290IGxldmVsIG9mIHRoZQorIyBzdXBlcnByb2plY3QsIHdpdGggdGhlIGRlZmF1bHQgbmFtZSwgaS5lLiBzYW1lIGFzIGl0cyBwYXRoLgordGVzdF9naXRfZGlyZWN0b3J5X2lzX3VuY2hhbmdlZCAoKSB7CisJKAorCQljZCAiLmdpdC9tb2R1bGVzLyQxIiAmJgorCQkjIGRvZXMgY29yZS53b3JrdHJlZSBwb2ludCBhdCB0aGUgcmlnaHQgcGxhY2U/CisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlKSIgPSAiLi4vLi4vLi4vJDEiICYmCisJCSMgcmVtb3ZlIGl0IHRlbXBvcmFyaWx5IGJlZm9yZSBjb21wYXJpbmcsIGFzCisJCSMgIiQxLy5naXQvY29uZmlnIiBsYWNrcyBpdC4uLgorCQlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZQorCSkgJiYKKwlkaWZmIC1yICIuZ2l0L21vZHVsZXMvJDEiICIkMS8uZ2l0IiAmJgorCSgKKwkJIyAuLi4gYW5kIHRoZW4gcmVzdG9yZS4KKwkJY2QgIi5naXQvbW9kdWxlcy8kMSIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlICIuLi8uLi8uLi8kMSIKKwkpCit9CisKK3Rlc3RfZ2l0X2RpcmVjdG9yeV9leGlzdHMoKSB7CisJdGVzdCAtZSAiLmdpdC9tb2R1bGVzLyQxIiAmJgorCWlmIHRlc3QgLWYgc3ViMS8uZ2l0CisJdGhlbgorCQkjIGRvZXMgY29yZS53b3JrdHJlZSBwb2ludCBhdCB0aGUgcmlnaHQgcGxhY2U/CisJCXRlc3QgIiQoZ2l0IC1DIC5naXQvbW9kdWxlcy8kMSBjb25maWcgY29yZS53b3JrdHJlZSkiID0gIi4uLy4uLy4uLyQxIgorCWZpCit9CisKKyMgSGVscGVyIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGF0IHRoZSBzdGFydCBvZiBldmVyeSB0ZXN0IGJlbG93LCBpdCBzZXRzIHVwCisjIHRoZSBzdWJtb2R1bGUgcmVwbyBpZiBpdCBkb2Vzbid0IGV4aXN0IGFuZCBjb25maWd1cmVzIHRoZSBtb3N0IHByb2JsZW1hdGljCisjIHNldHRpbmdzIGZvciBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMuCitwcm9sb2cgKCkgeworCXRlc3Rfb2lkX2luaXQgJiYKKwkodGVzdCAtZCBzdWJtb2R1bGVfdXBkYXRlX3JlcG8gfHwgY3JlYXRlX2xpYl9zdWJtb2R1bGVfcmVwbykgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGFsbCAmJgorCXRlc3RfY29uZmlnIGRpZmYuaWdub3JlU3VibW9kdWxlcyBhbGwKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gYnJpbmcgd29yayB0cmVlIGJhY2sgaW50byB0aGUgc3RhdGUgZ2l2ZW4gYnkgdGhlCisjIGNvbW1pdC4gVGhpcyBpbmNsdWRlcyB0cnlpbmcgdG8gcG9wdWxhdGUgc3ViMSBhY2NvcmRpbmdseSBpZiBpdCBleGlzdHMgYW5kCisjIHNob3VsZCBiZSB1cGRhdGVkIHRvIGFuIGV4aXN0aW5nIGNvbW1pdC4KK3Jlc2V0X3dvcmtfdHJlZV90byAoKSB7CisJcm0gLXJmIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwlnaXQgY2xvbmUgc3VibW9kdWxlX3VwZGF0ZV9yZXBvIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJcm0gLXJmIHN1YjEgJiYKKwkJZ2l0IGNoZWNrb3V0IC1mICIkMSIgJiYKKwkJZ2l0IHN0YXR1cyAtdSAtcyA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwkJaGFzaD0kKGdpdCByZXYtcGFyc2UgLS1yZXZzLW9ubHkgSEVBRDpzdWIxKSAmJgorCQlpZiB0ZXN0IC1uICIkaGFzaCIgJiYKKwkJICAgdGVzdCAkKGNkICIuLi9zdWJtb2R1bGVfdXBkYXRlX3N1YjEiICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRoYXNoXntjb21taXR9IikKKwkJdGhlbgorCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICJzdWIxIgorCQlmaQorCSkKK30KKworcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgKCkgeworCXJlc2V0X3dvcmtfdHJlZV90byAkMSAmJgorCSMgbWFrZSB0aGUgc3VibW9kdWxlIGdpdCBkaXJzIGF2YWlsYWJsZQorCWlmICEgdGVzdCAtZCBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcy9zdWIxCisJdGhlbgorCQlta2RpciAtcCBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcyAmJgorCQljcCAtciBzdWJtb2R1bGVfdXBkYXRlX3JlcG8vLmdpdC9tb2R1bGVzL3N1YjEgc3VibW9kdWxlX3VwZGF0ZS8uZ2l0L21vZHVsZXMvc3ViMQorCQlHSVRfV09SS19UUkVFPS4gZ2l0IC1DIHN1Ym1vZHVsZV91cGRhdGUvLmdpdC9tb2R1bGVzL3N1YjEgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZQorCWZpICYmCisJaWYgISB0ZXN0IC1kIHN1Ym1vZHVsZV91cGRhdGUvLmdpdC9tb2R1bGVzL3N1YjEvbW9kdWxlcy9zdWIyCisJdGhlbgorCQlta2RpciAtcCBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMgJiYKKwkJY3AgLXIgc3VibW9kdWxlX3VwZGF0ZV9yZXBvLy5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMvc3ViMiBzdWJtb2R1bGVfdXBkYXRlLy5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMvc3ViMgorCQkjIGNvcmUud29ya3RyZWUgaXMgdW5zZXQgZm9yIHN1YjIgYXMgaXQgaXMgbm90IGNoZWNrZWQgb3V0CisJZmkgJiYKKwkjIGluZGljYXRlIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBzdWJtb2R1bGU6CisJZ2l0IC1DIHN1Ym1vZHVsZV91cGRhdGUgY29uZmlnIHN1Ym1vZHVsZS5zdWIxLnVybCAiYm9ndXMiICYmCisJIyBzdWIxIG1pZ2h0IG5vdCBiZSBjaGVja2VkIG91dCwgc28gdXNlIHRoZSBnaXQgZGlyCisJZ2l0IC1DIHN1Ym1vZHVsZV91cGRhdGUvLmdpdC9tb2R1bGVzL3N1YjEgY29uZmlnIHN1Ym1vZHVsZS5zdWIyLnVybCAiYm9ndXMiCit9CisKKyMgVGVzdCB0aGF0IHRoZSBzdXBlcnByb2plY3QgY29udGFpbnMgdGhlIGNvbnRlbnQgYWNjb3JkaW5nIHRvIGNvbW1pdCAiJDEiCisjICh0aGUgd29yayB0cmVlIG11c3QgbWF0Y2ggdGhlIGluZGV4IGZvciBldmVyeXRoaW5nIGJ1dCBzdWJtb2R1bGVzIGJ1dCB0aGUKKyMgaW5kZXggbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBnaXZlbiBjb21taXQgaW5jbHVkaW5nIGFueSBzdWJtb2R1bGUgU0hBLTFzKS4KK3Rlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgKCkgeworCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICIkMSIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwlnaXQgZGlmZi1maWxlcyAtLWlnbm9yZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCit9CisKKyMgVGVzdCB0aGF0IHRoZSBnaXZlbiBzdWJtb2R1bGUgYXQgcGF0aCAiJDEiIGNvbnRhaW5zIHRoZSBjb250ZW50IGFjY29yZGluZworIyB0byB0aGUgc3VibW9kdWxlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0J3MgY29tbWl0ICIkMiIKK3Rlc3Rfc3VibW9kdWxlX2NvbnRlbnQgKCkgeworCWlmIHRlc3QgeCIkMSIgPSAieC1DIgorCXRoZW4KKwkJY2QgIiQyIgorCQlzaGlmdDsgc2hpZnQ7CisJZmkKKwlpZiB0ZXN0ICQjICE9IDIKKwl0aGVuCisJCWVjaG8gInRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgbmVlZHMgdHdvIGFyZ3VtZW50cyIKKwkJcmV0dXJuIDEKKwlmaSAmJgorCXN1Ym1vZHVsZT0iJDEiICYmCisJY29tbWl0PSIkMiIgJiYKKwl0ZXN0IC1kICIkc3VibW9kdWxlIi8gJiYKKwlpZiAhIHRlc3QgLWYgIiRzdWJtb2R1bGUiLy5naXQgJiYgISB0ZXN0IC1kICIkc3VibW9kdWxlIi8uZ2l0CisJdGhlbgorCQllY2hvICJTdWJtb2R1bGUgJHN1Ym1vZHVsZSBpcyBub3QgcG9wdWxhdGVkIgorCQlyZXR1cm4gMQorCWZpICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRjb21taXQ6JHN1Ym1vZHVsZSIpICYmCisJaWYgdGVzdCAteiAiJHNoYTEiCisJdGhlbgorCQllY2hvICJDb3VsZG4ndCByZXRyaWV2ZSBTSEEtMSBvZiAkc3VibW9kdWxlIGZvciAkY29tbWl0IgorCQlyZXR1cm4gMQorCWZpICYmCisJKAorCQljZCAiJHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IHN0YXR1cyAtdSAtcyA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwkJZ2l0IGRpZmYgIiRzaGExIiA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkpCit9CisKKyMgVGVzdCB0aGF0IHRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnMgYXJlIGNvcnJlY3RseSBoYW5kbGVkOgorIyAtIFVwZGF0ZWQgc3VibW9kdWxlCisjIC0gTmV3IHN1Ym1vZHVsZQorIyAtIFJlbW92ZWQgc3VibW9kdWxlCisjIC0gRGlyZWN0b3J5IGNvbnRhaW5pbmcgdHJhY2tlZCBmaWxlcyByZXBsYWNlZCBieSBzdWJtb2R1bGUKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlcyBpbiBkaXJlY3RvcnkKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZQorIyAtIHRyYWNrZWQgZmlsZSByZXBsYWNlZCBieSBzdWJtb2R1bGUKKyMKKyMgVGhlIGRlZmF1bHQgaXMgdGhhdCBzdWJtb2R1bGUgY29udGVudHMgYXJlbid0IGNoYW5nZWQgdW50aWwgImdpdCBzdWJtb2R1bGUKKyMgdXBkYXRlIiBpcyBydW4uIEFuZCBldmVuIHRoZW4gdGhhdCBjb21tYW5kIGRvZXNuJ3QgZGVsZXRlIHRoZSB3b3JrIHRyZWUgb2YKKyMgYSByZW1vdmVkIHN1Ym1vZHVsZS4KKyMKKyMgUmVtb3ZpbmcgYSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IG11c3QgZmFpbCBldmVuIHdoZW4gZm9yY2VkCisjIHRvIHByb3RlY3QgdGhlIGhpc3RvcnkhCisjCisKKyMgSW50ZXJuYWwgZnVuY3Rpb247IHVzZSB0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2goKSBvcgorIyB0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoKCkgaW5zdGVhZC4KK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaF9jb21tb24oKSB7CisJY29tbWFuZD0iJDEiCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBcHBlYXJpbmcgc3VibW9kdWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFN3aXRjaGluZyB0byBhIGNvbW1pdCBsZXR0aW5nIGEgc3VibW9kdWxlIGFwcGVhciBjcmVhdGVzIGVtcHR5IGRpciAuLi4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9TVEFTSF9ET0VTX0lHTk9SRV9TVUJNT0RVTEVfQ0hBTkdFUyIgPSAxCisJdGhlbgorCQkjIFJlc3RvcmluZyBzdGFzaCBmYWlscyB0byByZXN0b3JlIHN1Ym1vZHVsZSBpbmRleCBlbnRyeQorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogYWRkZWQgc3VibW9kdWxlIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3J5IiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgLi4uIGFuZCBkb2Vzbid0IGNhcmUgaWYgaXQgYWxyZWFkeSBleGlzdHMuCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBsZWF2ZXMgZXhpc3RpbmcgZW1wdHkgZGlyZWN0b3J5IGFsb25lIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCW1rZGlyIHN1YjEgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgUmVwbGFjaW5nIGEgdHJhY2tlZCBmaWxlIHdpdGggYSBzdWJtb2R1bGUgcHJvZHVjZXMgYW4gZW1wdHkKKwkjIGRpcmVjdG9yeSAuLi4KKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVwbGFjZSB0cmFja2VkIGZpbGUgd2l0aCBzdWJtb2R1bGUgY3JlYXRlcyBlbXB0eSBkaXJlY3RvcnkiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSBvcmlnaW4vcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJdGVzdF9kaXJfaXNfZW1wdHkgc3ViMSAmJgorCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL3JlcGxhY2VfZmlsZV93aXRoX3N1YjEKKwkJKQorCScKKwkjIC4uLiBhcyBkb2VzIHJlbW92aW5nIGEgZGlyZWN0b3J5IHdpdGggdHJhY2tlZCBmaWxlcyB3aXRoIGEKKwkjIHN1Ym1vZHVsZS4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0RPRVNOVF9DUkVBVEVfRU1QVFlfU1VCTU9EVUxFX0RJUiIgPSAxCisJdGhlbgorCQkjIE5vbiBmYXN0LWZvcndhcmQgbWVyZ2VzIGZhaWwgd2l0aCAiRGlyZWN0b3J5IHN1YjEgZG9lc24ndAorCQkjIGV4aXN0LiBzdWIxIiBiZWNhdXNlIHRoZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5IGlzIG5vdAorCQkjIGNyZWF0ZWQKKwkJUkVTVUxUPSJmYWlsdXJlIgorCWVsc2UKKwkJUkVTVUxUPSJzdWNjZXNzIgorCWZpCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IHJlcGxhY2UgZGlyZWN0b3J5IHdpdGggc3VibW9kdWxlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxIG9yaWdpbi9yZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxICYmCisJCQl0ZXN0X2Rpcl9pc19lbXB0eSBzdWIxICYmCisJCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxCisJCSkKKwknCisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGlzYXBwZWFyaW5nIHN1Ym1vZHVsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgUmVtb3ZpbmcgYSBzdWJtb2R1bGUgZG9lc24ndCByZW1vdmUgaXRzIHdvcmsgdHJlZSAuLi4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9TVEFTSF9ET0VTX0lHTk9SRV9TVUJNT0RVTEVfQ0hBTkdFUyIgPSAxCisJdGhlbgorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgbGVhdmVzIHN1Ym1vZHVsZSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cyBpbiBwbGFjZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVtb3ZlX3N1YjEgb3JpZ2luL3JlbW92ZV9zdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIC4uLiBlc3BlY2lhbGx5IHdoZW4gaXQgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgbGVhdmVzIHN1Ym1vZHVsZSBjb250YWluaW5nIGEgLmdpdCBkaXJlY3RvcnkgYWxvbmUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlbW92ZV9zdWIxIG9yaWdpbi9yZW1vdmVfc3ViMSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9pc191bmNoYW5nZWQgc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgUmVwbGFjaW5nIGEgc3VibW9kdWxlIHdpdGggZmlsZXMgaW4gYSBkaXJlY3RvcnkgbXVzdCBmYWlsIGFzIHRoZQorCSMgc3VibW9kdWxlIHdvcmsgdHJlZSBpc24ndCByZW1vdmVkIC4uLgorCWlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfQVRURU1QVFNfVE9fTUVSR0VfUkVNT1ZFRF9TVUJNT0RVTEVfRklMRVMiID0gMQorCXRoZW4KKwkJIyBOb24gZmFzdC1mb3J3YXJkIG1lcmdlcyBhdHRlbXB0IHRvIG1lcmdlIHRoZSBmb3JtZXIKKwkJIyBzdWJtb2R1bGUgZmlsZXMgd2l0aCB0aGUgbmV3bHkgY2hlY2tlZCBvdXQgb25lcyBpbiB0aGUKKwkJIyBkaXJlY3Rvcnkgb2YgdGhlIHNhbWUgbmFtZSB3aGlsZSBpdCBzaG91bGRuJ3QuCisJCVJFU1VMVD0iZmFpbHVyZSIKKwllbGlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX0ZPUkNFRF9TV0lUQ0hfVEVTVFMiID0gMQorCXRoZW4KKwkJIyBBbGwgZXhpc3RpbmcgdGVzdHMgdGhhdCB1c2UgdGVzdF9zdWJtb2R1bGVfZm9yY2VkX3N3aXRjaCgpCisJCSMgcmVxdWlyZSB0aGlzLgorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgd2l0aCBhIGRpcmVjdG9yeSBtdXN0IGZhaWwiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisJIyAuLi4gZXNwZWNpYWxseSB3aGVuIGl0IGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkuCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIGNvbnRhaW5pbmcgYSAuZ2l0IGRpcmVjdG9yeSB3aXRoIGEgZGlyZWN0b3J5IG11c3QgZmFpbCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXJlcGxhY2VfZ2l0ZmlsZV93aXRoX2dpdF9kaXIgc3ViMSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9naXRfZGlyZWN0b3J5X2lzX3VuY2hhbmdlZCBzdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisJIyBSZXBsYWNpbmcgaXQgd2l0aCBhIGZpbGUgbXVzdCBmYWlsIGFzIGl0IGNvdWxkIHRocm93IGF3YXkgYW55IGxvY2FsCisJIyB3b3JrIHRyZWUgY2hhbmdlcyAuLi4KKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgd2l0aCBhIGZpbGUgbXVzdCBmYWlsIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9maWxlIG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgLi4uIG9yIGV2ZW4gZGVzdHJveSB1bnB1c2hlZCBwYXJ0cyBvZiBzdWJtb2R1bGUgaGlzdG9yeSBpZiB0aGF0CisJIyBzdGlsbCB1c2VzIGEgLmdpdCBkaXJlY3RvcnkuCisJdGVzdF9leHBlY3RfZmFpbHVyZSAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIGNvbnRhaW5pbmcgYSAuZ2l0IGRpcmVjdG9yeSB3aXRoIGEgZmlsZSBtdXN0IGZhaWwiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXJlcGxhY2VfZ2l0ZmlsZV93aXRoX2dpdF9kaXIgc3ViMSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9pc191bmNoYW5nZWQgc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTW9kaWZpZWQgc3VibW9kdWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIHNoYTEgZG9lc24ndCB1cGRhdGUgdGhlIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZQorCWlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX0NIRVJSWV9QSUNLX1NFRVNfRU1QVFlfQ09NTUlUIiA9IDEKKwl0aGVuCisJCSMgV2hlbiBjaGVycnkgcGlja2luZyBhIFNIQS0xIHVwZGF0ZSBmb3IgYW4gaWdub3JlZCBzdWJtb2R1bGUKKwkJIyB0aGUgY29tbWl0IGluY29ycmVjdGx5IGZhaWxzIHdpdGggIlRoZSBwcmV2aW91cyBjaGVycnktcGljaworCQkjIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uIgorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogbW9kaWZpZWQgc3VibW9kdWxlIGRvZXMgbm90IHVwZGF0ZSBzdWJtb2R1bGUgd29yayB0cmVlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBtb2RpZnlfc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCSRjb21tYW5kIG1vZGlmeV9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9tb2RpZnlfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEKKwkJKQorCScKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIHRvIGFuIGludmFsaWQgc2hhMSBkb2Vzbid0IHVwZGF0ZSB0aGUKKwkjIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZSwgc3Vic2VxdWVudCB1cGRhdGUgd2lsbCBmYWlsCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IG1vZGlmaWVkIHN1Ym1vZHVsZSBkb2VzIG5vdCB1cGRhdGUgc3VibW9kdWxlIHdvcmsgdHJlZSB0byBpbnZhbGlkIGNvbW1pdCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgaW52YWxpZF9zdWIxIG9yaWdpbi9pbnZhbGlkX3N1YjEgJiYKKwkJCSRjb21tYW5kIGludmFsaWRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vaW52YWxpZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgVXBkYXRpbmcgYSBzdWJtb2R1bGUgZnJvbSBhbiBpbnZhbGlkIHNoYTEgZG9lc24ndCB1cGRhdGUgdGhlCisJIyBzdWJtb2R1bGUncyB3b3JrIHRyZWUsIHN1YnNlcXVlbnQgdXBkYXRlIHdpbGwgc3VjY2VlZAorCXRlc3RfZXhwZWN0XyRSRVNVTFQgIiRjb21tYW5kOiBtb2RpZmllZCBzdWJtb2R1bGUgZG9lcyBub3QgdXBkYXRlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgZnJvbSBpbnZhbGlkIGNvbW1pdCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGludmFsaWRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHZhbGlkX3N1YjEgb3JpZ2luL3ZhbGlkX3N1YjEgJiYKKwkJCSRjb21tYW5kIHZhbGlkX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL3ZhbGlkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi92YWxpZF9zdWIxCisJCSkKKwknCit9CisKKyMgRGVjbGFyZXMgYW5kIGludm9rZXMgc2V2ZXJhbCB0ZXN0cyB0aGF0LCBpbiB2YXJpb3VzIHNpdHVhdGlvbnMsIGNoZWNrcyB0aGF0CisjIHRoZSBwcm92aWRlZCB0cmFuc2l0aW9uIGZ1bmN0aW9uOgorIyAgLSBzdWNjZWVkcyBpbiB1cGRhdGluZyB0aGUgd29ya3RyZWUgYW5kIGluZGV4IG9mIGEgc3VwZXJwcm9qZWN0IHRvIGEgdGFyZ2V0CisjICAgIGNvbW1pdCwgb3IgZmFpbHMgYXRvbWljYWxseSAoZGVwZW5kaW5nIG9uIHRoZSB0ZXN0IHNpdHVhdGlvbikKKyMgIC0gaWYgc3VjY2VlZHMsIHRoZSBjb250ZW50cyBvZiBzdWJtb2R1bGUgZGlyZWN0b3JpZXMgYXJlIHVuY2hhbmdlZAorIyAgLSBpZiBzdWNjZWVkcywgb25jZSAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGlzIGludm9rZWQsIHRoZSBjb250ZW50cyBvZgorIyAgICBzdWJtb2R1bGUgZGlyZWN0b3JpZXMgYXJlIHVwZGF0ZWQKKyMKKyMgSWYgdGhlIGNvbW1hbmQgdW5kZXIgdGVzdCBpcyBrbm93biB0byBub3Qgd29yayB3aXRoIHN1Ym1vZHVsZXMgaW4gY2VydGFpbgorIyBjb25kaXRpb25zLCBzZXQgdGhlIGFwcHJvcHJpYXRlIEtOT1dOX0ZBSUxVUkVfKiB2YXJpYWJsZSB1c2VkIGluIHRoZSB0ZXN0cworIyBiZWxvdyB0byAxLgorIworIyBVc2UgYXMgZm9sbG93czoKKyMKKyMgbXlfZnVuYyAoKSB7CisjICAgdGFyZ2V0PSQxCisjICAgIyBEbyBzb21ldGhpbmcgaGVyZSB0aGF0IHVwZGF0ZXMgdGhlIHdvcmt0cmVlIGFuZCBpbmRleCB0byBtYXRjaCB0YXJnZXQsCisjICAgIyBidXQgbm90IGFueSBzdWJtb2R1bGUgZGlyZWN0b3JpZXMuCisjIH0KKyMgdGVzdF9zdWJtb2R1bGVfc3dpdGNoICJteV9mdW5jIgordGVzdF9zdWJtb2R1bGVfc3dpdGNoICgpIHsKKwljb21tYW5kPSIkMSIKKwl0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2hfY29tbW9uICIkY29tbWFuZCIKKworCSMgQW4gZW1wdHkgZGlyZWN0b3J5IGRvZXMgbm90IHByZXZlbnQgdGhlIGNyZWF0aW9uIG9mIGEgc3VibW9kdWxlIG9mCisJIyB0aGUgc2FtZSBuYW1lLCBidXQgYSBmaWxlIGRvZXMuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBkb2Vzbid0IHJlbW92ZSB1bnRyYWNrZWQgdW5pZ25vcmVkIGZpbGUgd2l0aCBzYW1lIG5hbWUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBub19zdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBhZGRfc3ViMSBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCT5zdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbm9fc3VibW9kdWxlICYmCisJCQl0ZXN0X211c3RfYmVfZW1wdHkgc3ViMQorCQkpCisJJworfQorCisjIFNhbWUgYXMgdGVzdF9zdWJtb2R1bGVfc3dpdGNoKCksIGV4Y2VwdCB0aGF0IHRocm93aW5nIGF3YXkgbG9jYWwgY2hhbmdlcyBpbgorIyB0aGUgc3VwZXJwcm9qZWN0IGlzIGFsbG93ZWQuCit0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoICgpIHsKKwljb21tYW5kPSIkMSIKKwlLTk9XTl9GQUlMVVJFX0ZPUkNFRF9TV0lUQ0hfVEVTVFM9MQorCXRlc3Rfc3VibW9kdWxlX3N3aXRjaF9jb21tb24gIiRjb21tYW5kIgorCisJIyBXaGVuIGZvcmNlZCwgYSBmaWxlIGluIHRoZSBzdXBlcnByb2plY3QgZG9lcyBub3QgcHJldmVudCBjcmVhdGluZyBhCisJIyBzdWJtb2R1bGUgb2YgdGhlIHNhbWUgbmFtZS4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogYWRkZWQgc3VibW9kdWxlIGRvZXMgcmVtb3ZlIHVudHJhY2tlZCB1bmlnbm9yZWQgZmlsZSB3aXRoIHNhbWUgbmFtZSB3aGVuIGZvcmNlZCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIG5vX3N1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IGFkZF9zdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJPnN1YjEgJiYKKwkJCSRjb21tYW5kIGFkZF9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9kaXJfaXNfZW1wdHkgc3ViMQorCQkpCisJJworfQorCisjIFRlc3QgdGhhdCBzdWJtb2R1bGUgY29udGVudHMgYXJlIGNvcnJlY3RseSB1cGRhdGVkIHdoZW4gc3dpdGNoaW5nCisjIGJldHdlZW4gY29tbWl0cyB0aGF0IGNoYW5nZSBhIHN1Ym1vZHVsZS4KKyMgVGVzdCB0aGF0IHRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnMgYXJlIGNvcnJlY3RseSBoYW5kbGVkOgorIyAoVGhlc2UgdGVzdHMgYXJlIGFsc28gYWJvdmUgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgZXhwZWN0IG5vIGNoYW5nZQorIyAgaW4gdGhlIHN1Ym1vZHVsZSkKKyMgLSBVcGRhdGVkIHN1Ym1vZHVsZQorIyAtIE5ldyBzdWJtb2R1bGUKKyMgLSBSZW1vdmVkIHN1Ym1vZHVsZQorIyAtIERpcmVjdG9yeSBjb250YWluaW5nIHRyYWNrZWQgZmlsZXMgcmVwbGFjZWQgYnkgc3VibW9kdWxlCisjIC0gU3VibW9kdWxlIHJlcGxhY2VkIGJ5IHRyYWNrZWQgZmlsZXMgaW4gZGlyZWN0b3J5CisjIC0gU3VibW9kdWxlIHJlcGxhY2VkIGJ5IHRyYWNrZWQgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUKKyMgLSB0cmFja2VkIGZpbGUgcmVwbGFjZWQgYnkgc3VibW9kdWxlCisjCisjIE5ldyB0ZXN0IGNhc2VzCisjIC0gUmVtb3ZpbmcgYSBzdWJtb2R1bGUgd2l0aCBhIGdpdCBkaXJlY3RvcnkgYWJzb3JicyB0aGUgc3VibW9kdWxlcworIyAgIGdpdCBkaXJlY3RvcnkgZmlyc3QgaW50byB0aGUgc3VwZXJwcm9qZWN0LgorCisjIEludGVybmFsIGZ1bmN0aW9uOyB1c2UgdGVzdF9zdWJtb2R1bGVfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MoKSBvcgorIyB0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MoKSBpbnN0ZWFkLgordGVzdF9zdWJtb2R1bGVfcmVjdXJzaW5nX3dpdGhfYXJnc19jb21tb24oKSB7CisJY29tbWFuZD0iJDEiCisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFwcGVhcmluZyBzdWJtb2R1bGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgU3dpdGNoaW5nIHRvIGEgY29tbWl0IGxldHRpbmcgYSBzdWJtb2R1bGUgYXBwZWFyIGNoZWNrcyBpdCBvdXQgLi4uCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBpcyBjaGVja2VkIG91dCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIC4uLiBpZ25vcmluZyBhbiBlbXB0eSBleGlzdGluZyBkaXJlY3RvcnkuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBpcyBjaGVja2VkIG91dCBpbiBlbXB0eSBkaXIiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIG5vX3N1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlta2RpciBzdWIxICYmCisJCQlnaXQgYnJhbmNoIC10IGFkZF9zdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJJGNvbW1hbmQgYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHN1Ym1vZHVsZSBicmFuY2ggaXMgbm90IGNoYW5nZWQsIGRldGFjaCBIRUFEIGluc3RlYWQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCAtQyBzdWIxIGNoZWNrb3V0IC1iIGtlZXBfYnJhbmNoICYmCisJCQlnaXQgLUMgc3ViMSByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJCQlnaXQgYnJhbmNoIC10IG1vZGlmeV9zdWIxIG9yaWdpbi9tb2RpZnlfc3ViMSAmJgorCQkJJGNvbW1hbmQgbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQlnaXQgLUMgc3ViMSByZXYtcGFyc2Uga2VlcF9icmFuY2ggPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1YjEgc3ltYm9saWMtcmVmIEhFQUQKKwkJKQorCScKKworCSMgUmVwbGFjaW5nIGEgdHJhY2tlZCBmaWxlIHdpdGggYSBzdWJtb2R1bGUgcHJvZHVjZXMgYSBjaGVja2VkIG91dCBzdWJtb2R1bGUKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVwbGFjZSB0cmFja2VkIGZpbGUgd2l0aCBzdWJtb2R1bGUgY2hlY2tzIG91dCBzdWJtb2R1bGUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX2ZpbGVfd2l0aF9zdWIxIG9yaWdpbi9yZXBsYWNlX2ZpbGVfd2l0aF9zdWIxICYmCisJCQkkY29tbWFuZCByZXBsYWNlX2ZpbGVfd2l0aF9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZXBsYWNlX2ZpbGVfd2l0aF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL3JlcGxhY2VfZmlsZV93aXRoX3N1YjEKKwkJKQorCScKKwkjIC4uLiBhcyBkb2VzIHJlbW92aW5nIGEgZGlyZWN0b3J5IHdpdGggdHJhY2tlZCBmaWxlcyB3aXRoIGEgc3VibW9kdWxlLgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiByZXBsYWNlIGRpcmVjdG9yeSB3aXRoIHN1Ym1vZHVsZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxIG9yaWdpbi9yZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL3JlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMQorCQkpCisJJworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERpc2FwcGVhcmluZyBzdWJtb2R1bGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFJlbW92aW5nIGEgc3VibW9kdWxlIHJlbW92ZXMgaXRzIHdvcmsgdHJlZSAuLi4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgcmVtb3ZlcyBzdWJtb2R1bGVzIHdvcmtpbmcgdHJlZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZW1vdmVfc3ViMSBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCSRjb21tYW5kIHJlbW92ZV9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZW1vdmVfc3ViMSAmJgorCQkJISB0ZXN0IC1lIHN1YjEgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdC9tb2R1bGVzL3N1YjEvY29uZmlnIGNvcmUud29ya3RyZWUKKwkJKQorCScKKwkjIC4uLiBhYnNvcmJpbmcgYSAuZ2l0IGRpcmVjdG9yeSBhbG9uZyB0aGUgd2F5LgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiByZW1vdmVkIHN1Ym1vZHVsZSBhYnNvcmJzIHN1Ym1vZHVsZXMgLmdpdCBkaXJlY3RvcnkiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVtb3ZlX3N1YjEgb3JpZ2luL3JlbW92ZV9zdWIxICYmCisJCQlyZXBsYWNlX2dpdGZpbGVfd2l0aF9naXRfZGlyIHN1YjEgJiYKKwkJCXJtIC1yZiAuZ2l0L21vZHVsZXMgJiYKKwkJCSRjb21tYW5kIHJlbW92ZV9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZW1vdmVfc3ViMSAmJgorCQkJISB0ZXN0IC1lIHN1YjEgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9leGlzdHMgc3ViMQorCQkpCisJJworCisJIyBSZXBsYWNpbmcgaXQgd2l0aCBhIGZpbGUgLi4uCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIHdpdGggYSBmaWxlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXRlc3QgLWYgc3ViMQorCQkpCisJJworCVJFU1VMVERTPXN1Y2Nlc3MKKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9ESVJFQ1RPUllfU1VCTU9EVUxFX0NPTkZMSUNUUyIgPSAxCisJdGhlbgorCQlSRVNVTFREUz1mYWlsdXJlCisJZmkKKwkjIC4uLiBtdXN0IGNoZWNrIGl0cyBsb2NhbCB3b3JrIHRyZWUgZm9yIHVudHJhY2tlZCBmaWxlcworCXRlc3RfZXhwZWN0XyRSRVNVTFREUyAiJGNvbW1hbmQ6IHJlcGxhY2Ugc3VibW9kdWxlIHdpdGggYSBmaWxlIG11c3QgZmFpbCB3aXRoIHVudHJhY2tlZCBmaWxlcyIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9maWxlIG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQk6ID5zdWIxL3VudHJhY2tlZGZpbGUgJiYKKwkJCXRlc3RfbXVzdF9mYWlsICRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0IC1mIHN1YjEvdW50cmFja2VkX2ZpbGUKKwkJKQorCScKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1vZGlmaWVkIHN1Ym1vZHVsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBVcGRhdGluZyBhIHN1Ym1vZHVsZSBzaGExIHVwZGF0ZXMgdGhlIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiBtb2RpZmllZCBzdWJtb2R1bGUgdXBkYXRlcyBzdWJtb2R1bGUgd29yayB0cmVlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IG1vZGlmeV9zdWIxIG9yaWdpbi9tb2RpZnlfc3ViMSAmJgorCQkJJGNvbW1hbmQgbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL21vZGlmeV9zdWIxCisJCSkKKwknCisJIyBVcGRhdGluZyBhIHN1Ym1vZHVsZSB0byBhbiBpbnZhbGlkIHNoYTEgZG9lc24ndCB1cGRhdGUgdGhlCisJIyBzdXBlcnByb2plY3Qgbm9yIHRoZSBzdWJtb2R1bGUncyB3b3JrIHRyZWUuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHVwZGF0aW5nIHRvIGEgbWlzc2luZyBzdWJtb2R1bGUgY29tbWl0IGZhaWxzIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IGludmFsaWRfc3ViMSBvcmlnaW4vaW52YWxpZF9zdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCBpbnZhbGlkX3N1YjEgMj5lcnIgJiYKKwkJCXRlc3RfaTE4bmdyZXAgc3ViMSBlcnIgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCit9CisKKyMgRGVjbGFyZXMgYW5kIGludm9rZXMgc2V2ZXJhbCB0ZXN0cyB0aGF0LCBpbiB2YXJpb3VzIHNpdHVhdGlvbnMsIGNoZWNrcyB0aGF0CisjIHRoZSBwcm92aWRlZCBHaXQgY29tbWFuZCwgd2hlbiBpbnZva2VkIHdpdGggLS1yZWN1cnNlLXN1Ym1vZHVsZXM6CisjICAtIHN1Y2NlZWRzIGluIHVwZGF0aW5nIHRoZSB3b3JrdHJlZSBhbmQgaW5kZXggb2YgYSBzdXBlcnByb2plY3QgdG8gYSB0YXJnZXQKKyMgICAgY29tbWl0LCBvciBmYWlscyBhdG9taWNhbGx5IChkZXBlbmRpbmcgb24gdGhlIHRlc3Qgc2l0dWF0aW9uKQorIyAgLSBpZiBzdWNjZWVkcywgdGhlIGNvbnRlbnRzIG9mIHN1Ym1vZHVsZSBkaXJlY3RvcmllcyBhcmUgdXBkYXRlZAorIworIyBTcGVjaWZ5IHRoZSBHaXQgY29tbWFuZCBzbyB0aGF0ICJnaXQgJEdJVF9DT01NQU5EIC0tcmVjdXJzZS1zdWJtb2R1bGVzIgorIyB3b3Jrcy4KKyMKKyMgSWYgdGhlIGNvbW1hbmQgdW5kZXIgdGVzdCBpcyBrbm93biB0byBub3Qgd29yayB3aXRoIHN1Ym1vZHVsZXMgaW4gY2VydGFpbgorIyBjb25kaXRpb25zLCBzZXQgdGhlIGFwcHJvcHJpYXRlIEtOT1dOX0ZBSUxVUkVfKiB2YXJpYWJsZSB1c2VkIGluIHRoZSB0ZXN0cworIyBiZWxvdyB0byAxLgorIworIyBVc2UgYXMgZm9sbG93czoKKyMKKyMgdGVzdF9zdWJtb2R1bGVfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MgIiRHSVRfQ09NTUFORCIKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaF9yZWN1cnNpbmdfd2l0aF9hcmdzICgpIHsKKwljbWRfYXJncz0iJDEiCisJY29tbWFuZD0iZ2l0ICRjbWRfYXJncyAtLXJlY3Vyc2Utc3VibW9kdWxlcyIKKwl0ZXN0X3N1Ym1vZHVsZV9yZWN1cnNpbmdfd2l0aF9hcmdzX2NvbW1vbiAiJGNvbW1hbmQiCisKKwlSRVNVTFREUz1zdWNjZXNzCisJaWYgdGVzdCAiJEtOT1dOX0ZBSUxVUkVfRElSRUNUT1JZX1NVQk1PRFVMRV9DT05GTElDVFMiID0gMQorCXRoZW4KKwkJUkVTVUxURFM9ZmFpbHVyZQorCWZpCisJUkVTVUxUT0k9c3VjY2VzcworCWlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX1NVQk1PRFVMRV9PVkVSV1JJVEVfSUdOT1JFRF9VTlRSQUNLRUQiID0gMQorCXRoZW4KKwkJUkVTVUxUT0k9ZmFpbHVyZQorCWZpCisJIyBTd2l0Y2hpbmcgdG8gYSBjb21taXQgbGV0dGluZyBhIHN1Ym1vZHVsZSBhcHBlYXIgY2Fubm90IG92ZXJyaWRlIGFuCisJIyB1bnRyYWNrZWQgZmlsZS4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogYWRkZWQgc3VibW9kdWxlIGRvZXNuJ3QgcmVtb3ZlIHVudHJhY2tlZCBmaWxlIHdpdGggc2FtZSBuYW1lIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBub19zdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBhZGRfc3ViMSBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCTogPnN1YjEgJiYKKwkJCXRlc3RfbXVzdF9mYWlsICRjb21tYW5kIGFkZF9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9ub19zdWJtb2R1bGUgJiYKKwkJCXRlc3RfbXVzdF9iZV9lbXB0eSBzdWIxCisJCSkKKwknCisJIyAuLi4gYnV0IGFuIGlnbm9yZWQgZmlsZSBpcyBmaW5lLgorCXRlc3RfZXhwZWN0XyRSRVNVTFRPSSAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSByZW1vdmVzIGFuIHVudHJhY2tlZCBpZ25vcmVkIGZpbGUiICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBzdWJtb2R1bGVfdXBkYXRlLy5naXQvaW5mby9leGNsdWRlIiAmJgorCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQk6ID5zdWIxICYmCisJCQllY2hvIHN1YjEgPi5naXQvaW5mby9leGNsdWRlICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKworCSMgUmVwbGFjaW5nIGEgc3VibW9kdWxlIHdpdGggZmlsZXMgaW4gYSBkaXJlY3RvcnkgbXVzdCBzdWNjZWVkcworCSMgd2hlbiB0aGUgc3VibW9kdWxlIGlzIGNsZWFuCisJdGVzdF9leHBlY3RfJFJFU1VMVERTICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgd2l0aCBhIGRpcmVjdG9yeSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3Rvcnkgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5CisJCSkKKwknCisJIyAuLi4gYWJzb3JiaW5nIGEgLmdpdCBkaXJlY3RvcnkuCisJdGVzdF9leHBlY3RfJFJFU1VMVERTICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IHdpdGggYSBkaXJlY3RvcnkgbXVzdCBhYnNvcmIgdGhlIGdpdCBkaXIiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXJlcGxhY2VfZ2l0ZmlsZV93aXRoX2dpdF9kaXIgc3ViMSAmJgorCQkJcm0gLXJmIC5naXQvbW9kdWxlcyAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9leGlzdHMgc3ViMQorCQkpCisJJworCisJIyAuLi4gYW5kIGlnbm9yZWQgZmlsZXMgYXJlIGlnbm9yZWQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgd2l0aCBhIGZpbGUgd29ya3MgaWdub3JlcyBpZ25vcmVkIGZpbGVzIGluIHN1Ym1vZHVsZSIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHN1Ym1vZHVsZV91cGRhdGUvLmdpdC9tb2R1bGVzL3N1YjEvaW5mby9leGNsdWRlIiAmJgorCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9maWxlIG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQllY2hvIGlnbm9yZWQgPi5naXQvbW9kdWxlcy9zdWIxL2luZm8vZXhjbHVkZSAmJgorCQkJOiA+c3ViMS9pZ25vcmVkICYmCisJCQkkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0IC1mIHN1YjEKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCAtYyBzdWJtb2R1bGUucmVjdXJzZT10cnVlICRjbWRfYXJnczogbW9kaWZpZWQgc3VibW9kdWxlIHVwZGF0ZXMgc3VibW9kdWxlIHdvcmsgdHJlZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBtb2RpZnlfc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCWdpdCAtYyBzdWJtb2R1bGUucmVjdXJzZT10cnVlICRjbWRfYXJncyBtb2RpZnlfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEKKwkJKQorCScKKworCSMgcmVjdXJzaW5nIGRlZXBlciB0aGFuIG9uZSBsZXZlbCBkb2Vzbid0IHdvcmsgeWV0LgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiBtb2RpZmllZCBzdWJtb2R1bGUgdXBkYXRlcyBzdWJtb2R1bGUgcmVjdXJzaXZlbHkiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGFkZF9uZXN0ZWRfc3ViICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkgb3JpZ2luL21vZGlmeV9zdWIxX3JlY3Vyc2l2ZWx5ICYmCisJCQkkY29tbWFuZCBtb2RpZnlfc3ViMV9yZWN1cnNpdmVseSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjFfcmVjdXJzaXZlbHkgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgLUMgc3ViMSBzdWIyIG9yaWdpbi9tb2RpZnlfc3ViMV9yZWN1cnNpdmVseQorCQkpCisJJworfQorCisjIFNhbWUgYXMgdGVzdF9zdWJtb2R1bGVfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MoKSwgZXhjZXB0IHRoYXQgdGhyb3dpbmcKKyMgYXdheSBsb2NhbCBjaGFuZ2VzIGluIHRoZSBzdXBlcnByb2plY3QgaXMgYWxsb3dlZC4KK3Rlc3Rfc3VibW9kdWxlX2ZvcmNlZF9zd2l0Y2hfcmVjdXJzaW5nX3dpdGhfYXJncyAoKSB7CisJY21kX2FyZ3M9IiQxIgorCWNvbW1hbmQ9ImdpdCAkY21kX2FyZ3MgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiCisJdGVzdF9zdWJtb2R1bGVfcmVjdXJzaW5nX3dpdGhfYXJnc19jb21tb24gIiRjb21tYW5kIgorCisJUkVTVUxUPXN1Y2Nlc3MKKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9ESVJFQ1RPUllfU1VCTU9EVUxFX0NPTkZMSUNUUyIgPSAxCisJdGhlbgorCQlSRVNVTFQ9ZmFpbHVyZQorCWZpCisJIyBTd2l0Y2hpbmcgdG8gYSBjb21taXQgbGV0dGluZyBhIHN1Ym1vZHVsZSBhcHBlYXIgZG9lcyBub3QgY2FyZSBhYm91dAorCSMgYW4gdW50cmFja2VkIGZpbGUuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBkb2VzIHJlbW92ZSB1bnRyYWNrZWQgdW5pZ25vcmVkIGZpbGUgd2l0aCBzYW1lIG5hbWUgd2hlbiBmb3JjZWQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIG5vX3N1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IGFkZF9zdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJPnN1YjEgJiYKKwkJCSRjb21tYW5kIGFkZF9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCisJIyBSZXBsYWNpbmcgYSBzdWJtb2R1bGUgd2l0aCBmaWxlcyBpbiBhIGRpcmVjdG9yeSAuLi4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgd2l0aCBhIGRpcmVjdG9yeSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3Rvcnkgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkKKwkJKQorCScKKwkjIC4uLiBhYnNvcmJpbmcgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IHdpdGggYSBkaXJlY3RvcnkgbXVzdCBmYWlsIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQlyZXBsYWNlX2dpdGZpbGVfd2l0aF9naXRfZGlyIHN1YjEgJiYKKwkJCXJtIC1yZiAuZ2l0L21vZHVsZXMvc3ViMSAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9leGlzdHMgc3ViMQorCQkpCisJJworCisJIyAuLi4gZXZlbiBpZiB0aGUgc3VibW9kdWxlIGNvbnRhaW5zIGlnbm9yZWQgZmlsZXMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgd2l0aCBhIGZpbGUgaWdub3JpbmcgaWdub3JlZCBmaWxlcyIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9maWxlIG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQk6ID5zdWIxL2V4cGVjdCAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZmlsZQorCQkpCisJJworCisJIyBVcGRhdGluZyBhIHN1Ym1vZHVsZSBmcm9tIGFuIGludmFsaWQgc2hhMSB1cGRhdGVzCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IG1vZGlmaWVkIHN1Ym1vZHVsZSBkb2VzIHVwZGF0ZSBzdWJtb2R1bGUgd29yayB0cmVlIGZyb20gaW52YWxpZCBjb21taXQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90b19pbnRlcmVzdGVkIGludmFsaWRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHZhbGlkX3N1YjEgb3JpZ2luL3ZhbGlkX3N1YjEgJiYKKwkJCSRjb21tYW5kIHZhbGlkX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL3ZhbGlkX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vdmFsaWRfc3ViMQorCQkpCisJJworCisJIyBPbGQgdmVyc2lvbnMgb2YgR2l0IHdlcmUgYnVnZ3kgd3JpdGluZyB0aGUgLmdpdCBsaW5rIGZpbGUKKwkjIChlLmcuIGJlZm9yZSBmOGVhYTBiYTk4YiBhbmQgdGhlbiBtb3ZpbmcgdGhlIHN1cGVycHJvamVjdCByZXBvCisJIyB3aG9zZSBzdWJtb2R1bGVzIGNvbnRhaW5lZCBhYnNvbHV0ZSBwYXRocykKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogdXBkYXRpbmcgc3VibW9kdWxlcyBmaXhlcyAuZ2l0IGxpbmtzIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG9faW50ZXJlc3RlZCBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IG1vZGlmeV9zdWIxIG9yaWdpbi9tb2RpZnlfc3ViMSAmJgorCQkJZWNobyAiZ2l0ZGlyOiBib2d1cy9wYXRoIiA+c3ViMS8uZ2l0ICYmCisJCQkkY29tbWFuZCBtb2RpZnlfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vbW9kaWZ5X3N1YjEKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiBjaGFuZ2VkIHN1Ym1vZHVsZSB3b3JrdHJlZSBpcyByZXNldCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvX2ludGVyZXN0ZWQgYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJcm0gc3ViMS9maWxlMSAmJgorCQkJOiA+c3ViMS9uZXdfZmlsZSAmJgorCQkJZ2l0IC1DIHN1YjEgYWRkIG5ld19maWxlICYmCisJCQkkY29tbWFuZCBIRUFEICYmCisJCQl0ZXN0X3BhdGhfaXNfZmlsZSBzdWIxL2ZpbGUxICYmCisJCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWIxL25ld19maWxlCisJCSkKKwknCit9CmRpZmYgLS1naXQgYS90L2xpYi10NjAwMC5zaCBiL3QvbGliLXQ2MDAwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZWQ0NzYKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi10NjAwMC5zaApAQCAtMCwwICsxLDEzNyBAQAorOiBpbmNsdWRlZCBmcm9tIDYwMDIgYW5kIG90aGVycworCitta2RpciAtcCAuZ2l0L3JlZnMvdGFncworCis+c2VkLnNjcmlwdAorCisjIEFuc3dlciB0aGUgc2hhMSBoYXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuIFRoZSB0YWcgbXVzdCBleGlzdCB1bmRlciByZWZzL3RhZ3MKK3RhZyAoKSB7CisJX3RhZz0kMQorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgInJlZnMvdGFncy8kX3RhZyIgfHwKKwllcnJvciAidGFnOiBcIiRfdGFnXCIgZG9lcyBub3QgZXhpc3QiCit9CisKKyMgR2VuZXJhdGUgYSBjb21taXQgdXNpbmcgdGhlIHRleHQgc3BlY2lmaWVkIHRvIG1ha2UgaXQgdW5pcXVlIGFuZCB0aGUgdHJlZQorIyBuYW1lZCBieSB0aGUgdGFnIHNwZWNpZmllZC4KK3VuaXF1ZV9jb21taXQgKCkgeworCV90ZXh0PSQxCisJX3RyZWU9JDIKKwlzaGlmdCAyCisJZWNobyAiJF90ZXh0IiB8IGdpdCBjb21taXQtdHJlZSAkKHRhZyAiJF90cmVlIikgIiRAIgorfQorCisjIFNhdmUgdGhlIG91dHB1dCBvZiBhIGNvbW1hbmQgaW50byB0aGUgdGFnIHNwZWNpZmllZC4gUHJlcGVuZAorIyBhIHN1YnN0aXR1dGlvbiBzY3JpcHQgZm9yIHRoZSB0YWcgb250byB0aGUgZnJvbnQgb2Ygc2VkLnNjcmlwdAorc2F2ZV90YWcgKCkgeworCV90YWc9JDEKKwl0ZXN0IC1uICIkX3RhZyIgfHwgZXJyb3IgInVzYWdlOiBzYXZlX3RhZyB0YWcgY29tbWl0LWFyZ3MgLi4uIgorCXNoaWZ0IDEKKwkiJEAiID4iLmdpdC9yZWZzL3RhZ3MvJF90YWciCisKKwllY2hvICJzLyQodGFnICRfdGFnKS8kX3RhZy9nIiA+c2VkLnNjcmlwdC50bXAKKwljYXQgc2VkLnNjcmlwdCA+PnNlZC5zY3JpcHQudG1wCisJcm0gc2VkLnNjcmlwdAorCW12IHNlZC5zY3JpcHQudG1wIHNlZC5zY3JpcHQKK30KKworIyBSZXBsYWNlIHVuaGVscGZ1bCBzaGExIGhhc2hlcyB3aXRoIHRoZWlyIHN5bWJvbGljIGVxdWl2YWxlbnRzCitlbnRhZyAoKSB7CisJc2VkIC1mIHNlZC5zY3JpcHQKK30KKworIyBFeGVjdXRlIGEgY29tbWFuZCBhZnRlciBmaXJzdCBzYXZpbmcsIHRoZW4gc2V0dGluZyB0aGUgR0lUX0FVVEhPUl9FTUFJTAorIyB0YWcgdG8gYSBzcGVjaWZpZWQgdmFsdWUuIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlIG9uIHJldHVybi4KK2FzX2F1dGhvciAoKSB7CisJX2F1dGhvcj0kMQorCXNoaWZ0IDEKKwlfc2F2ZT0kR0lUX0FVVEhPUl9FTUFJTAorCisJR0lUX0FVVEhPUl9FTUFJTD0iJF9hdXRob3IiCisJZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKKwkiJEAiCisJaWYgdGVzdCAteiAiJF9zYXZlIgorCXRoZW4KKwkJdW5zZXQgR0lUX0FVVEhPUl9FTUFJTAorCWVsc2UKKwkJR0lUX0FVVEhPUl9FTUFJTD0iJF9zYXZlIgorCQlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTAorCWZpCit9CisKK2NvbW1pdF9kYXRlICgpIHsKKwlfY29tbWl0PSQxCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAkX2NvbW1pdCB8CisJc2VkIC1uICJzL15jb21taXR0ZXIgLio+IFwoWzAtOV0qXCkgLiovXDEvcCIKK30KKworIyBBc3NpZ24gdGhlIHZhbHVlIG9mIGZha2UgZGF0ZSB0byBhIHZhcmlhYmxlLCBidXQKKyMgYWxsb3cgZmFpcmx5IGNvbW1vbiAiMTk3MS0wOC0xNiAwMDowMCIgdG8gYmUgb21pdHRkCithc3NpZ25fZmFrZV9kYXRlICgpIHsKKwljYXNlICIkMiIgaW4KKwk/Pzo/Pzo/PykJZXZhbCAiJDE9JzE5NzEtMDgtMTYgJDInIiA7OworCT8/Oj8/KQkJZXZhbCAiJDE9JzE5NzEtMDgtMTYgMDA6JDInIiA7OworCT8/KQkJZXZhbCAiJDE9JzE5NzEtMDgtMTYgMDA6MDA6JDInIiA7OworCSopCQlldmFsICIkMT0nJDInIiA7OworCWVzYWMKK30KKworb25fY29tbWl0dGVyX2RhdGUgKCkgeworCWFzc2lnbl9mYWtlX2RhdGUgR0lUX0NPTU1JVFRFUl9EQVRFICIkMSIKKwlleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFCisJc2hpZnQgMQorCSIkQCIKK30KKworb25fZGF0ZXMgKCkgeworCWFzc2lnbl9mYWtlX2RhdGUgR0lUX0NPTU1JVFRFUl9EQVRFICIkMSIKKwlhc3NpZ25fZmFrZV9kYXRlIEdJVF9BVVRIT1JfREFURSAiJDIiCisJZXhwb3J0IEdJVF9DT01NSVRURVJfREFURSBHSVRfQVVUSE9SX0RBVEUKKwlzaGlmdCAyCisJIiRAIgorfQorCisjIEV4ZWN1dGUgYSBjb21tYW5kIGFuZCBzdXBwcmVzcyBhbnkgZXJyb3Igb3V0cHV0LgoraGlkZV9lcnJvciAoKSB7CisJIiRAIiAyPi9kZXYvbnVsbAorfQorCitjaGVja19vdXRwdXQgKCkgeworCV9uYW1lPSQxCisJc2hpZnQgMQorCWlmIGV2YWwgIiQqIiB8IGVudGFnID4iJF9uYW1lLmFjdHVhbCIKKwl0aGVuCisJCXRlc3RfY21wICIkX25hbWUuZXhwZWN0ZWQiICIkX25hbWUuYWN0dWFsIgorCWVsc2UKKwkJcmV0dXJuIDEKKwlmaQorfQorCisjIFR1cm4gYSByZWFzb25hYmxlIHRlc3QgZGVzY3JpcHRpb24gaW50byBhIHJlYXNvbmFibGUgdGVzdCBuYW1lLgorIyBBbGwgYWxwaGFudW1zIHRyYW5zbGF0ZWQgaW50byAtJ3Mgd2hpY2ggYXJlIHRoZW4gY29tcHJlc3NlZCBhbmQgc3RyaXBwZWQKKyMgZnJvbSBmcm9udCBhbmQgYmFjay4KK25hbWVfZnJvbV9kZXNjcmlwdGlvbiAoKSB7CisJcGVybCAtcGUgJworCQlzL1teQS1aYS16MC05Ll0vLS9nOworCQlzLy0rLy0vZzsKKwkJcy8tJC8vOworCQlzL14tLy87CisJCXkvQS1aL2Etei87CisJJworfQorCisKKyMgRXhlY3V0ZSB0aGUgdGVzdCBkZXNjcmliZWQgYnkgdGhlIGZpcnN0IGFyZ3VtZW50LCBieSBldmFsJ2luZworIyBjb21tYW5kIGxpbmUgc3BlY2lmaWVkIGluIHRoZSAybmQgYXJndW1lbnQuIENoZWNrIHRoZSBzdGF0dXMgY29kZQorIyBpcyB6ZXJvIGFuZCB0aGF0IHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGUgc3RyZWFtIHJlYWQgZnJvbQorIyBzdGRpbi4KK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzKCkKK3sKKwlfZGVzY3JpcHRpb249JDEKKwlfdGVzdD0kMgorCXRlc3QgJCMgLWVxIDIgfHwKKwllcnJvciAidXNhZ2U6IHRlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzIGRlc2NyaXB0aW9uIHRlc3QgPDxFT0YgLi4uIEVPRiIKKworCV9uYW1lPSQoZWNobyAkX2Rlc2NyaXB0aW9uIHwgbmFtZV9mcm9tX2Rlc2NyaXB0aW9uKQorCWNhdCA+IiRfbmFtZS5leHBlY3RlZCIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkX2Rlc2NyaXB0aW9uIiAiY2hlY2tfb3V0cHV0ICRfbmFtZSBcIiRfdGVzdFwiIgorfQpkaWZmIC0tZ2l0IGEvdC9saWItdGVybWluYWwuc2ggYi90L2xpYi10ZXJtaW5hbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzgwOWRjCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItdGVybWluYWwuc2gKQEAgLTAsMCArMSwzNiBAQAorIyBIZWxwZXJzIGZvciB0ZXJtaW5hbCBvdXRwdXQgdGVzdHMuCisKKyMgQ2F0Y2ggdGVzdHMgd2hpY2ggc2hvdWxkIGRlcGVuZCBvbiBUVFkgYnV0IGZvcmdvdCB0by4gVGhlcmUncyBubyBuZWVkCisjIHRvIGFkZGl0aW9uYWxseSBjaGVjayB0aGF0IHRoZSBUVFkgcHJlcmVxIGlzIHNldCBoZXJlLiAgSWYgdGhlIHRlc3QgZGVjbGFyZWQKKyMgaXQgYW5kIHdlIGFyZSBydW5uaW5nIHRoZSB0ZXN0LCB0aGVuIGl0IG11c3QgaGF2ZSBiZWVuIHNldC4KK3Rlc3RfdGVybWluYWwgKCkgeworCWlmICEgdGVzdF9kZWNsYXJlZF9wcmVyZXEgVFRZCisJdGhlbgorCQllY2hvID4mNCAidGVzdF90ZXJtaW5hbDogbmVlZCB0byBkZWNsYXJlIFRUWSBwcmVyZXF1aXNpdGUiCisJCXJldHVybiAxMjcKKwlmaQorCXBlcmwgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC10ZXJtaW5hbC5wZXJsICIkQCIgMj4mNworfSA3PiYyIDI+JjQKKwordGVzdF9sYXp5X3ByZXJlcSBUVFkgJworCXRlc3RfaGF2ZV9wcmVyZXEgUEVSTCAmJgorCisJIyBSZWFkaW5nIGZyb20gdGhlIHB0eSBtYXN0ZXIgc2VlbXMgdG8gZ2V0IHN0dWNrIF9zb21ldGltZXNfCisJIyBvbiBNYWMgT1MgWCAxMC41LjAsIHVzaW5nIFBlcmwgNS4xMC4wIG9yIDUuOC45LgorCSMKKwkjIFJlcHJvZHVjdGlvbiByZWNpcGU6IHJ1bgorCSMKKwkjCWk9MAorCSMJd2hpbGUgLi90ZXN0LXRlcm1pbmFsLnBlcmwgZWNobyBoaSAkaQorCSMJZG8KKwkjCQk6ICQoKGkgPSAkaSArIDEpKQorCSMJZG9uZQorCSMKKwkjIEFmdGVyIDIwMDAgaXRlcmF0aW9ucyBvciBzbyBpdCBoYW5ncy4KKwkjIGh0dHBzOi8vcnQuY3Bhbi5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD02NTY5MgorCSMKKwl0ZXN0ICIkKHVuYW1lIC1zKSIgIT0gRGFyd2luICYmCisKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtdGVybWluYWwucGVybCBcCisJCXNoIC1jICJ0ZXN0IC10IDEgJiYgdGVzdCAtdCAyIgorJwpkaWZmIC0tZ2l0IGEvdC9vaWQtaW5mby9SRUFETUUgYi90L29pZC1pbmZvL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Y4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdC9vaWQtaW5mby9SRUFETUUKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdmFyaW91cyBwZXItaGFzaCB2YWx1ZXMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgdGVzdHN1aXRlLgorCitFYWNoIGZpbGUgY29udGFpbnMgbGluZXMgY29udGFpbmluZyBhIGtleS12YWx1ZSBwYWlyOyBibGFuayBsaW5lcyBhbmQgbGluZXMKK3N0YXJ0aW5nIHdpdGggYCNgIGFyZSBpZ25vcmVkLiAgVGhlIGtleSBhbmQgdmFsdWUgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlCisoc3BlY2lmaWNhbGx5LCB0aG9zZSB3aGl0ZXNwYWNlIGluIHRoZSBkZWZhdWx0IGAkSUZTYCkuICBUaGUga2V5IGNvbnNpc3RzIG9ubHkKK29mIHNoZWxsIGlkZW50aWZpZXIgY2hhcmFjdGVycywgYW5kIHRoZSB2YWx1ZSBjb25zaXN0cyBvZiBhIGhhc2ggYWxnb3JpdGhtLAorY29sb24sIGFuZCB2YWx1ZS4gIFRoZSBoYXNoIGFsZ29yaXRobSBhbHNvIGNvbnNpc3RzIG9ubHkgb2Ygc2hlbGwgaWRlbnRpZmllcgorY2hhcmFjdGVyczsgaXQgc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBpbiBzaGExLWZpbGUuYy4KKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbGluZXMgbWFwIHRoZSBrZXkgInJhd3N6IiB0byAiMjAiIGlmIFNIQS0xIGlzIGluIHVzZQorYW5kIHRvICIzMiIgaWYgU0hBLTI1NiBpcyBpbiB1c2U6CisKKy0tLS0KK3Jhd3N6IHNoYTE6MjAKK3Jhd3N6IHNoYTI1NjozMgorLS0tLQorCitUaGUga2V5cyBhbmQgdmFsdWVzIHVzZWQgaGVyZSBhcmUgbG9hZGVkIGJ5IGB0ZXN0X29pZF9pbml0YCAoc2VlIHRoZSBSRUFETUUgZmlsZQoraW4gdGhlICJ0IiBkaXJlY3RvcnkpIGFuZCBhcmUgdXNlZCBieSBjYWxsaW5nIGB0ZXN0X29pZGAuCmRpZmYgLS1naXQgYS90L29pZC1pbmZvL2hhc2gtaW5mbyBiL3Qvb2lkLWluZm8vaGFzaC1pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzM2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90L29pZC1pbmZvL2hhc2gtaW5mbwpAQCAtMCwwICsxLDE3IEBACityYXdzeiBzaGExOjIwCityYXdzeiBzaGEyNTY6MzIKKworaGV4c3ogc2hhMTo0MAoraGV4c3ogc2hhMjU2OjY0CisKK3plcm8gc2hhMTowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCit6ZXJvIHNoYTI1NjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2FsZ28gc2hhMTpzaGExCithbGdvIHNoYTI1NjpzaGEyNTYKKworZW1wdHlfYmxvYiBzaGExOmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKK2VtcHR5X2Jsb2Igc2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMKKworZW1wdHlfdHJlZSBzaGExOjRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKK2VtcHR5X3RyZWUgc2hhMjU2OjZlZjE5YjQxMjI1YzUzNjlmMWMxMDRkNDVkOGQ4NWVmYTliMDU3YjUzYjE0YjRiOWI5MzlkZDc0ZGVjYzUzMjEKZGlmZiAtLWdpdCBhL3Qvb2lkLWluZm8vb2lkIGIvdC9vaWQtaW5mby9vaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1NDk3MAotLS0gL2Rldi9udWxsCisrKyBiL3Qvb2lkLWluZm8vb2lkCkBAIC0wLDAgKzEsMjkgQEAKKyMgVGhlc2UgYXJlIHNvbWUgY29tbW9uIGludmFsaWQgYW5kIHBhcnRpYWwgb2JqZWN0IElEcyB1c2VkIGluIHRlc3RzLgorMDAxCXNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorMDAxCXNoYTI1NjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCiswMDIJc2hhMTowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCiswMDIJc2hhMjU2OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzAwMwlzaGExOjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzAwMwlzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworMDA0CXNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorMDA0CXNoYTI1NjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CiswMDUJc2hhMTowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CiswMDUJc2hhMjU2OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzAwNglzaGExOjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzAwNglzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorMDA3CXNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworMDA3CXNoYTI1NjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CisjIEFsbCB6ZXJvcyBvciBGcyBtaXNzaW5nIG9uZSBvciB0d28gaGV4IHNlZ21lbnRzLgoremVyb18xCQlzaGExOjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoremVyb18xCQlzaGEyNTY6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCit6ZXJvXzIJCXNoYTE6MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK3plcm9fMgkJc2hhMjU2OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitmZl8xCQlzaGExOmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorZmZfMQkJc2hhMjU2OmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorZmZfMgkJc2hhMTpmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorZmZfMgkJc2hhMjU2OmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCisjIE1vcmUgdmFyaW91cyBpbnZhbGlkIE9JRHMuCitudW1lcmljCQlzaGExOjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKK251bWVyaWMJCXNoYTI1NjowMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkZWFkYmVlZglzaGExOmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWYKK2RlYWRiZWVmCXNoYTI1NjpkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmCmRpZmYgLS1naXQgYS90L3BlcmYvLmdpdGlnbm9yZSBiL3QvcGVyZi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MmViOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKy9idWlsZC8KKy90ZXN0LXJlc3VsdHMvCisvdHJhc2ggZGlyZWN0b3J5Ki8KZGlmZiAtLWdpdCBhL3QvcGVyZi9NYWtlZmlsZSBiL3QvcGVyZi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzQ3MTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKy1pbmNsdWRlIC4uLy4uL2NvbmZpZy5tYWsKK2V4cG9ydCBHSVRfVEVTVF9PUFRJT05TCisKK2FsbDogcGVyZgorCitwZXJmOiBwcmUtY2xlYW4KKwkuL3J1bgorCitwcmUtY2xlYW46CisJcm0gLXJmIHRlc3QtcmVzdWx0cworCitjbGVhbjoKKwlybSAtcmYgYnVpbGQgInRyYXNoIGRpcmVjdG9yeSIuKiB0ZXN0LXJlc3VsdHMKKworLlBIT05ZOiBhbGwgcGVyZiBwcmUtY2xlYW4gY2xlYW4KZGlmZiAtLWdpdCBhL3QvcGVyZi9SRUFETUUgYi90L3BlcmYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YjcwZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvUkVBRE1FCkBAIC0wLDAgKzEsMTk1IEBACitHaXQgcGVyZm9ybWFuY2UgdGVzdHMKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRpcmVjdG9yeSBob2xkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nIHNjcmlwdHMgZm9yIGdpdCB0b29scy4gIFRoZQorZmlyc3QgcGFydCBvZiB0aGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdmFyaW91cyB3YXlzIGluIHdoaWNoIHlvdQorY2FuIHJ1biB0aGVtLgorCitXaGVuIGZpeGluZyB0aGUgdG9vbHMgb3IgYWRkaW5nIGVuaGFuY2VtZW50cywgeW91IGFyZSBzdHJvbmdseQorZW5jb3VyYWdlZCB0byBhZGQgdGVzdHMgaW4gdGhpcyBkaXJlY3RvcnkgdG8gY292ZXIgd2hhdCB5b3UgYXJlCit0cnlpbmcgdG8gZml4IG9yIGVuaGFuY2UuICBUaGUgbGF0ZXIgcGFydCBvZiB0aGlzIHNob3J0IGRvY3VtZW50CitkZXNjcmliZXMgaG93IHlvdXIgdGVzdCBzY3JpcHRzIHNob3VsZCBiZSBvcmdhbml6ZWQuCisKKworUnVubmluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gcnVuIHRlc3RzIGlzIHRvIHNheSAibWFrZSIuICBUaGlzIHJ1bnMgYWxsCit0aGUgdGVzdHMgb24gdGhlIGN1cnJlbnQgZ2l0IHJlcG9zaXRvcnkuCisKKyAgICA9PT0gUnVubmluZyAyIHRlc3RzIGluIHRoaXMgdHJlZSA9PT0KKyAgICBbLi4uXQorICAgIFRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB0cmVlCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgMDAwMS4xOiByZXYtbGlzdCAtLWFsbCAgICAgICAgICAgICAgICAgICAwLjU0KDAuNTErMC4wMikKKyAgICAwMDAxLjI6IHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyAgICAgICAgIDYuMTQoNS45OSswLjExKQorICAgIDc4MTAuMTogZ3JlcCB3b3JrdHJlZSwgY2hlYXAgcmVnZXggICAgICAgMC4xNigwLjE2KzAuMzUpCisgICAgNzgxMC4yOiBncmVwIHdvcmt0cmVlLCBleHBlbnNpdmUgcmVnZXggICA3LjkwKDI5Ljc1KzAuMzcpCisgICAgNzgxMC4zOiBncmVwIC0tY2FjaGVkLCBjaGVhcCByZWdleCAgICAgICAzLjA3KDMuMDIrMC4yNSkKKyAgICA3ODEwLjQ6IGdyZXAgLS1jYWNoZWQsIGV4cGVuc2l2ZSByZWdleCAgIDkuMzkoMzAuNTcrMC4yNCkKKworWW91IGNhbiBjb21wYXJlIG11bHRpcGxlIHJlcG9zaXRvcmllcyBhbmQgZXZlbiBnaXQgcmV2aXNpb25zIHdpdGggdGhlCisncnVuJyBzY3JpcHQ6CisKKyAgICAkIC4vcnVuIC4gb3JpZ2luL25leHQgL3BhdGgvdG8vZ2l0LXRyZWUgcDAwMDEtcmV2LWxpc3Quc2gKKword2hlcmUgLiBzdGFuZHMgZm9yIHRoZSBjdXJyZW50IGdpdCB0cmVlLiAgVGhlIGZ1bGwgaW52b2NhdGlvbiBpcworCisgICAgLi9ydW4gWzxyZXZpc2lvbnxkaXJlY3Rvcnk+Li4uXSBbLS1dIFs8dGVzdC1zY3JpcHQ+Li4uXQorCitBICcuJyBhcmd1bWVudCBpcyBpbXBsaWVkIGlmIHlvdSBkbyBub3QgcGFzcyBhbnkgb3RoZXIKK3JldmlzaW9ucy9kaXJlY3Rvcmllcy4KKworWW91IGNhbiBhbHNvIG1hbnVhbGx5IHRlc3QgdGhpcyBvciBhbm90aGVyIGdpdCBidWlsZCB0cmVlLCBhbmQgdGhlbgorY2FsbCB0aGUgYWdncmVnYXRpb24gc2NyaXB0IHRvIHN1bW1hcml6ZSB0aGUgcmVzdWx0czoKKworICAgICQgLi9wMDAwMS1yZXYtbGlzdC5zaAorICAgIFsuLi5dCisgICAgJCAuL3J1biAvcGF0aC90by9vdGhlci9naXQgLS0gLi9wMDAwMS1yZXYtbGlzdC5zaAorICAgIFsuLi5dCisgICAgJCAuL2FnZ3JlZ2F0ZS5wZXJsIC4gL3BhdGgvdG8vb3RoZXIvZ2l0IC4vcDAwMDEtcmV2LWxpc3Quc2gKKworYWdncmVnYXRlLnBlcmwgaGFzIHRoZSBzYW1lIGludm9jYXRpb24gYXMgJ3J1bicsIGl0IGp1c3QgZG9lcyBub3QgcnVuCithbnl0aGluZyBiZWZvcmVoYW5kLgorCitZb3UgY2FuIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyAoYWxzbyBpbiB5b3VyIGNvbmZpZy5tYWspOgorCisgICAgR0lUX1BFUkZfUkVQRUFUX0NPVU5UCisJTnVtYmVyIG9mIHRpbWVzIGEgdGVzdCBzaG91bGQgYmUgcmVwZWF0ZWQgZm9yIGJlc3Qtb2YtTgorCW1lYXN1cmVtZW50cy4gIERlZmF1bHRzIHRvIDMuCisKKyAgICBHSVRfUEVSRl9NQUtFX09QVFMKKwlPcHRpb25zIHRvIHVzZSB3aGVuIGF1dG9tYXRpY2FsbHkgYnVpbGRpbmcgYSBnaXQgdHJlZSBmb3IKKwlwZXJmb3JtYW5jZSB0ZXN0aW5nLiBFLmcuLCAtajYgd291bGQgYmUgdXNlZnVsLiBQYXNzZWQKKwlkaXJlY3RseSB0byBtYWtlIGFzICJtYWtlICRHSVRfUEVSRl9NQUtFX09QVFMiLgorCisgICAgR0lUX1BFUkZfTUFLRV9DT01NQU5ECisJQW4gYXJiaXRyYXJ5IGNvbW1hbmQgdGhhdCdsbCBiZSBydW4gaW4gcGxhY2Ugb2YgdGhlIG1ha2UKKwljb21tYW5kLCBpZiBzZXQgdGhlIEdJVF9QRVJGX01BS0VfT1BUUyB2YXJpYWJsZSBpcworCWlnbm9yZWQuIFVzZWZ1bCBpbiBjYXNlcyB3aGVyZSBzb3VyY2UgdHJlZSBjaGFuZ2VzIG1pZ2h0CisJcmVxdWlyZSBpc3N1aW5nIGEgZGlmZmVyZW50IG1ha2UgY29tbWFuZCB0byBkaWZmZXJlbnQKKwlyZXZpc2lvbnMuCisKKwlUaGlzIGNhbiBiZSAoYWIpdXNlZCB0byBtb25rZXlwYXRjaCBvciBvdGhlcndpc2UgY2hhbmdlIHRoZQorCXRyZWUgYWJvdXQgdG8gYmUgYnVpbHQuIE5vdGUgdGhhdCB0aGUgYnVpbGQgZGlyZWN0b3J5IGNhbiBiZQorCXJlLXVzZWQgZm9yIHN1YnNlcXVlbnQgcnVucyBzbyB0aGUgbWFrZSBjb21tYW5kIG1pZ2h0IGdldAorCWV4ZWN1dGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIHRyZWUsIGJ1dCBkb24ndCBjb3VudCBvbgorCWFueSBvZiB0aGF0LCB0aGF0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHRoYXQgbWlnaHQgY2hhbmdlCisJaW4gdGhlIGZ1dHVyZS4KKworICAgIEdJVF9QRVJGX1JFUE8KKyAgICBHSVRfUEVSRl9MQVJHRV9SRVBPCisJUmVwb3NpdG9yaWVzIHRvIGNvcHkgZm9yIHRoZSBwZXJmb3JtYW5jZSB0ZXN0cy4gIFRoZSBub3JtYWwKKwlyZXBvIHNob3VsZCBiZSBhdCBsZWFzdCBnaXQuZ2l0IHNpemUuICBUaGUgbGFyZ2UgcmVwbyBzaG91bGQKKwlwcm9iYWJseSBiZSBhYm91dCBsaW51eC5naXQgc2l6ZSBmb3Igb3B0aW1hbCByZXN1bHRzLgorCUJvdGggZGVmYXVsdCB0byB0aGUgZ2l0LmdpdCB5b3UgYXJlIHJ1bm5pbmcgZnJvbS4KKworWW91IGNhbiBhbHNvIHBhc3MgdGhlIG9wdGlvbnMgdGFrZW4gYnkgb3JkaW5hcnkgZ2l0IHRlc3RzOyB0aGUgbW9zdAordXNlZnVsIG9uZSBpczoKKworLS1yb290PTxkaXJlY3Rvcnk+OjoKKwlDcmVhdGUgInRyYXNoIiBkaXJlY3RvcmllcyB1c2VkIHRvIHN0b3JlIGFsbCB0ZW1wb3JhcnkgZGF0YSBkdXJpbmcKKwl0ZXN0aW5nIHVuZGVyIDxkaXJlY3Rvcnk+LCBpbnN0ZWFkIG9mIHRoZSB0LyBkaXJlY3RvcnkuCisJVXNpbmcgdGhpcyBvcHRpb24gd2l0aCBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIChzdWNoIGFzIHRtcGZzKQorCWNhbiBtYXNzaXZlbHkgc3BlZWQgdXAgdGhlIHRlc3Qgc3VpdGUuCisKKworTmFtaW5nIFRlc3RzCistLS0tLS0tLS0tLS0KKworVGhlIHBlcmZvcm1hbmNlIHRlc3QgZmlsZXMgYXJlIG5hbWVkIGFzOgorCisJcE5OTk4tY29tbWFuZG5hbWUtZGV0YWlscy5zaAorCit3aGVyZSBOIGlzIGEgZGVjaW1hbCBkaWdpdC4gIFRoZSBzYW1lIGNvbnZlbnRpb25zIGZvciBjaG9vc2luZyBOTk5OIGFzCitmb3Igbm9ybWFsIHRlc3RzIGFwcGx5LgorCisKK1dyaXRpbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0KKworVGhlIHBlcmYgc2NyaXB0IHN0YXJ0cyBtdWNoIGxpa2UgYSBub3JtYWwgdGVzdCBzY3JpcHQsIGV4Y2VwdCBpdAorc291cmNlcyBwZXJmLWxpYi5zaDoKKworCSMhL2Jpbi9zaAorCSMKKwkjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworCSMKKworCXRlc3RfZGVzY3JpcHRpb249J3h4eCBwZXJmb3JtYW5jZSB0ZXN0JworCS4gLi9wZXJmLWxpYi5zaAorCitBZnRlciB0aGF0IHlvdSB3aWxsIHdhbnQgdG8gdXNlIHNvbWUgb2YgdGhlIGZvbGxvd2luZzoKKworCXRlc3RfcGVyZl9mcmVzaF9yZXBvICAgICMgc2V0cyB1cCBhbiBlbXB0eSByZXBvc2l0b3J5CisJdGVzdF9wZXJmX2RlZmF1bHRfcmVwbyAgIyBzZXRzIHVwIGEgIm5vcm1hbCIgcmVwb3NpdG9yeQorCXRlc3RfcGVyZl9sYXJnZV9yZXBvICAgICMgc2V0cyB1cCBhICJsYXJnZSIgcmVwb3NpdG9yeQorCisJdGVzdF9wZXJmX2RlZmF1bHRfcmVwbyBzdWIgICMgZGl0dG8sIGluIGEgc3ViZGlyICJzdWIiCisKKyAgICAgICAgdGVzdF9jaGVja291dF93b3JrdHJlZSAgIyBpZiB5b3UgbmVlZCB0aGUgd29ya3RyZWUgdG9vCisKK0F0IGxlYXN0IG9uZSBvZiB0aGUgZmlyc3QgdHdvIGlzIHJlcXVpcmVkIQorCitZb3UgY2FuIHVzZSB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFzIHVzdWFsLiBJbiBib3RoIHRlc3RfZXhwZWN0X3N1Y2Nlc3MKK2FuZCBpbiB0ZXN0X3BlcmYsIHJ1bm5pbmcgImdpdCIgcG9pbnRzIHRvIHRoZSB2ZXJzaW9uIHRoYXQgaXMgYmVpbmcKK3BlcmYtdGVzdGVkLiBUaGUgJE1PREVSTl9HSVQgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBnaXQgd3JhcHBlciBmb3IgdGhlCitjdXJyZW50bHkgY2hlY2tlZC1vdXQgdmVyc2lvbiAoaS5lLiwgdGhlIG9uZSB0aGF0IG1hdGNoZXMgdGhlIHQvcGVyZgorc2NyaXB0cyB5b3UgYXJlIHJ1bm5pbmcpLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91ciBzZXR1cCB1c2VzIGNvbW1hbmRzCit0aGF0IG9ubHkgd29yayB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGdpdCB0aGFuIHdoYXQgeW91IG1pZ2h0IHdhbnQgdG8KK3Rlc3QgKGJ1dCBvYnZpb3VzbHkgeW91ciBuZXcgY29tbWFuZHMgbXVzdCBzdGlsbCBjcmVhdGUgYSBzdGF0ZSB0aGF0IGNhbgorYmUgdXNlZCBieSB0aGUgb2xkZXIgdmVyc2lvbiBvZiBnaXQgeW91IGFyZSB0ZXN0aW5nKS4KKworRm9yIGFjdHVhbCBwZXJmb3JtYW5jZSB0ZXN0cywgdXNlCisKKwl0ZXN0X3BlcmYgJ2Rlc2NyaXB0aXZlIHN0cmluZycgJworCQljb21tYW5kMSAmJgorCQljb21tYW5kMgorCScKKwordGVzdF9wZXJmIHNwYXducyBhIHN1YnNoZWxsLCBmb3IgbGFjayBvZiBiZXR0ZXIgb3B0aW9ucy4gIFRoaXMgbWVhbnMKK3RoYXQKKworKiB5b3UgX211c3RfIGV4cG9ydCBhbGwgdmFyaWFibGVzIHRoYXQgeW91IG5lZWQgaW4gdGhlIHN1YnNoZWxsCisKKyogeW91IF9tdXN0XyBmbGFnIGFsbCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBwZXJzaXN0IGZyb20gdGhlCisgIHN1YnNoZWxsIHdpdGggJ3Rlc3RfZXhwb3J0JzoKKworCXRlc3RfcGVyZiAnZGVzY3JpcHRpdmUgc3RyaW5nJyAnCisJCWZvbz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdF9leHBvcnQgZm9vCisJJworCisgIFRoZSBzby1leHBvcnRlZCB2YXJpYWJsZXMgYXJlIGF1dG9tYXRpY2FsbHkgbWFya2VkIGZvciBleHBvcnQgaW4gdGhlCisgIHNoZWxsIGV4ZWN1dGluZyB0aGUgcGVyZiB0ZXN0LiAgRm9yIHlvdXIgY29udmVuaWVuY2UsIHRlc3RfZXhwb3J0IGlzCisgIHRoZSBzYW1lIGFzIGV4cG9ydCBpbiB0aGUgbWFpbiBzaGVsbC4KKworICBUaGlzIGZlYXR1cmUgcmVsaWVzIG9uIGEgYml0IG9mIG1hZ2ljIHVzaW5nICdzZXQnIGFuZCAnc291cmNlJy4KKyAgV2hpbGUgd2UgaGF2ZSB0cmllZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBjYW4gY29wZSB3aXRoIGVtYmVkZGVkCisgIHdoaXRlc3BhY2UgYW5kIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycywgaXQgd2lsbCBub3Qgd29yayB3aXRoCisgIG11bHRpLWxpbmUgZGF0YS4KKworUmF0aGVyIHRoYW4gdHJhY2tpbmcgdGhlIHBlcmZvcm1hbmNlIGJ5IHJ1bi10aW1lIGFzIGB0ZXN0X3BlcmZgIGRvZXMsIHlvdQorbWF5IGFsc28gdHJhY2sgb3V0cHV0IHNpemUgYnkgdXNpbmcgYHRlc3Rfc2l6ZWAuIFRoZSBzdGRvdXQgb2YgdGhlCitmdW5jdGlvbiBzaG91bGQgYmUgYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSwgd2hpY2ggd2lsbCBiZSBjYXB0dXJlZCBhbmQKK3Nob3duIGluIHRoZSBhZ2dyZWdhdGVkIG91dHB1dC4gRm9yIGV4YW1wbGU6CisKKwl0ZXN0X3BlcmYgJ3RpbWUgZm9vJyAnCisJCS4vZm9vID5mb28ub3V0CisJJworCisJdGVzdF9zaXplICdvdXRwdXQgc2l6ZScKKwkJd2MgLWMgPGZvby5vdXQKKwknCisKK21pZ2h0IHByb2R1Y2Ugb3V0cHV0IGxpa2U6CisKKwlUZXN0ICAgICAgICAgICAgICAgIG9yaWdpbiAgICAgICAgICAgSEVBRAorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkxMjM0LjEgdGltZSBmb28gICAgIDAuMzcoMC43OSswLjAyKSAgMC4yNigwLjUxKzAuMDIpIC0yOS43JQorCTEyMzQuMiBvdXRwdXQgc2l6ZSAgICAgICAgICAgICA0LjNNICAgICAgICAgICAgIDMuNk0gLTE0LjclCisKK1RoZSBpdGVtIGJlaW5nIG1lYXN1cmVkIChhbmQgaXRzIHVuaXRzKSBpcyB1cCB0byB0aGUgdGVzdDsgdGhlIGNvbnRleHQKK2FuZCB0aGUgdGVzdCB0aXRsZSBzaG91bGQgbWFrZSBpdCBjbGVhciB0byB0aGUgdXNlciB3aGV0aGVyIGJpZ2dlciBvcgorc21hbGxlciBudW1iZXJzIGFyZSBiZXR0ZXIuIFVubGlrZSB0ZXN0X3BlcmYsIHRoZSB0ZXN0IGNvZGUgd2lsbCBvbmx5IGJlCitydW4gb25jZSwgc2luY2Ugb3V0cHV0IHNpemVzIHRlbmQgdG8gYmUgbW9yZSBkZXRlcm1pbmlzdGljIHRoYW4gdGltaW5ncy4KZGlmZiAtLWdpdCBhL3QvcGVyZi9hZ2dyZWdhdGUucGVybCBiL3QvcGVyZi9hZ2dyZWdhdGUucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNGU0Y2RhCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL2FnZ3JlZ2F0ZS5wZXJsCkBAIC0wLDAgKzEsMzU2IEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIGxpYiAnLi4vLi4vcGVybC9idWlsZC9saWInOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgQ3dkIHF3KHJlYWxwYXRoKTsKKworc3ViIGdldF90aW1lcyB7CisJbXkgJG5hbWUgPSBzaGlmdDsKKwlvcGVuIG15ICRmaCwgIjwiLCAkbmFtZSBvciByZXR1cm4gdW5kZWY7CisJbXkgJGxpbmUgPSA8JGZoPjsKKwlyZXR1cm4gdW5kZWYgaWYgbm90IGRlZmluZWQgJGxpbmU7CisJY2xvc2UgJGZoIG9yIGRpZSAiY2Fubm90IGNsb3NlICRuYW1lOiAkISI7CisJIyB0aW1lcworCWlmICgkbGluZSA9fiAvXig/OihcZCspOik/KFxkKyk6KFxkKyg/OlwuXGQrKT8pIChcZCsoPzpcLlxkKyk/KSAoXGQrKD86XC5cZCspPykkLykgeworCQlteSAkcnQgPSAoKGRlZmluZWQgJDEgPyAkMSA6IDAuMCkqNjArJDIpKjYwKyQzOworCQlyZXR1cm4gKCRydCwgJDQsICQ1KTsKKwkjIHNpemUKKwl9IGVsc2lmICgkbGluZSA9fiAvXlxkKyQvKSB7CisJCXJldHVybiAkJjsKKwl9IGVsc2UgeworCQlkaWUgImJhZCBpbnB1dCBsaW5lOiAkbGluZSI7CisJfQorfQorCitzdWIgcmVsYXRpdmVfY2hhbmdlIHsKKwlteSAoJHIsICRmaXJzdHIpID0gQF87CisJaWYgKCRmaXJzdHIgPiAwKSB7CisJCXJldHVybiBzcHJpbnRmICIlKy4xZiUlIiwgMTAwLjAqKCRyLSRmaXJzdHIpLyRmaXJzdHI7CisJfSBlbHNpZiAoJHIgPT0gMCkgeworCQlyZXR1cm4gIj0iOworCX0gZWxzZSB7CisJCXJldHVybiAiK2luZiI7CisJfQorfQorCitzdWIgZm9ybWF0X3RpbWVzIHsKKwlteSAoJHIsICR1LCAkcywgJGZpcnN0cikgPSBAXzsKKwkjIG5vIHZhbHVlIG1lYW5zIHdlIGRpZCBub3QgZmluaXNoIHRoZSB0ZXN0CisJaWYgKCFkZWZpbmVkICRyKSB7CisJCXJldHVybiAiPG1pc3Npbmc+IjsKKwl9CisJIyBhIHNpbmdsZSB2YWx1ZSBtZWFucyB3ZSBoYXZlIGEgc2l6ZSwgbm90IHRpbWVzCisJaWYgKCFkZWZpbmVkICR1KSB7CisJCXJldHVybiBmb3JtYXRfc2l6ZSgkciwgJGZpcnN0cik7CisJfQorCSMgb3RoZXJ3aXNlLCB3ZSBoYXZlIHJlYWwvdXNlci9zeXN0ZW0gdGltZXMKKwlteSAkb3V0ID0gc3ByaW50ZiAiJS4yZiglLjJmKyUuMmYpIiwgJHIsICR1LCAkczsKKwkkb3V0IC49ICcgJyAuIHJlbGF0aXZlX2NoYW5nZSgkciwgJGZpcnN0cikgaWYgZGVmaW5lZCAkZmlyc3RyOworCXJldHVybiAkb3V0OworfQorCitzdWIgdXNhZ2UgeworCXByaW50IDw8RU9UOworLi9hZ2dyZWdhdGUucGVybCBbb3B0aW9uc10gWy0tXSBbPGRpcl9vcl9yZXY+Li4uXSBbLS1dIFs8dGVzdF9zY3JpcHQ+Li4uXSA+CisKKyAgT3B0aW9uczoKKyAgICAtLWNvZGVzcGVlZCAgICAgICAgICAqIEZvcm1hdCBvdXRwdXQgZm9yIENvZGVzcGVlZAorICAgIC0tcmVwb25hbWUgICAgPHN0cj4gICogU2VuZCBnaXZlbiByZXBvbmFtZSB0byBjb2Rlc3BlZWQKKyAgICAtLXNvcnQtYnkgICAgIDxzdHI+ICAqIFNvcnQgb3V0cHV0IChvbmx5ICJyZWdyZXNzaW9uIiBjcml0ZXJpYSBpcyBzdXBwb3J0ZWQpCisgICAgLS1zdWJzZWN0aW9uICA8c3RyPiAgKiBVc2UgcmVzdWx0cyBmcm9tIGdpdmVuIHN1YnNlY3Rpb24KKworRU9UCisJZXhpdCgxKTsKK30KKworc3ViIGh1bWFuX3NpemUgeworCW15ICRuID0gc2hpZnQ7CisJbXkgQHVuaXRzID0gKCcnLCBxdyhLIE0gRykpOworCXdoaWxlICgkbiA+IDkwMCAmJiBAdW5pdHMgPiAxKSB7CisJCSRuIC89IDEwMDA7CisJCXNoaWZ0IEB1bml0czsKKwl9CisJcmV0dXJuICRuIHVubGVzcyBsZW5ndGggJHVuaXRzWzBdOworCXJldHVybiBzcHJpbnRmICclLjFmJXMnLCAkbiwgJHVuaXRzWzBdOworfQorCitzdWIgZm9ybWF0X3NpemUgeworCW15ICgkc2l6ZSwgJGZpcnN0KSA9IEBfOworCSMgbWF0Y2ggdGhlIHdpZHRoIG9mIGEgdGltZTogMC4wMCgwLjAwKzAuMDApCisJbXkgJG91dCA9IHNwcmludGYgJyUxNXMnLCBodW1hbl9zaXplKCRzaXplKTsKKwkkb3V0IC49ICcgJyAuIHJlbGF0aXZlX2NoYW5nZSgkc2l6ZSwgJGZpcnN0KSBpZiBkZWZpbmVkICRmaXJzdDsKKwlyZXR1cm4gJG91dDsKK30KKworc3ViIHNhbmVfYmFja3RpY2tzIHsKKwlvcGVuKG15ICRmaCwgJy18JywgQF8pOworCXJldHVybiA8JGZoPjsKK30KKworbXkgKEBkaXJzLCAlZGlybmFtZXMsICVkaXJhYmJyZXZzLCAlcHJlZml4ZXMsIEB0ZXN0cywKKyAgICAkY29kZXNwZWVkLCAkc29ydGJ5LCAkc3Vic2VjdGlvbiwgJHJlcG9uYW1lKTsKKworR2V0b3B0OjpMb25nOjpDb25maWd1cmUgcXcvIHJlcXVpcmVfb3JkZXIgLzsKKworbXkgJHJjID0gR2V0T3B0aW9ucygiY29kZXNwZWVkIiAgICAgPT4gXCRjb2Rlc3BlZWQsCisJCSAgICAicmVwb25hbWU9cyIgICAgPT4gXCRyZXBvbmFtZSwKKwkJICAgICJzb3J0LWJ5PXMiICAgICA9PiBcJHNvcnRieSwKKwkJICAgICJzdWJzZWN0aW9uPXMiICA9PiBcJHN1YnNlY3Rpb24pOwordXNhZ2UoKSB1bmxlc3MgJHJjOworCit3aGlsZSAoc2NhbGFyIEBBUkdWKSB7CisJbXkgJGFyZyA9ICRBUkdWWzBdOworCW15ICRkaXI7CisJbXkgJHByZWZpeCA9ICcnOworCWxhc3QgaWYgLWYgJGFyZyBvciAkYXJnIGVxICItLSI7CisJaWYgKCEgLWQgJGFyZykgeworCQlteSAkcmV2ID0gc2FuZV9iYWNrdGlja3MocXcoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSksICRhcmcpOworCQljaG9tcCAkcmV2OworCQkkZGlyID0gImJ1aWxkLyIuJHJldjsKKwl9IGVsc2lmICgkYXJnIGVxICcuJykgeworCQkkZGlyID0gJy4nOworCX0gZWxzZSB7CisJCSRkaXIgPSByZWFscGF0aCgkYXJnKTsKKwkJJGRpcm5hbWVzeyRkaXJ9ID0gJGRpcjsKKwkJJHByZWZpeCAuPSAnYmluZGlyJzsKKwl9CisJcHVzaCBAZGlycywgJGRpcjsKKwkkZGlybmFtZXN7JGRpcn0gfHw9ICRhcmc7CisJJHByZWZpeCAuPSAkZGlyOworCSRwcmVmaXggPX4gdHIvXmEtekEtWjAtOS9fL2M7CisJJHByZWZpeGVzeyRkaXJ9ID0gJHByZWZpeCAuICcuJzsKKwlzaGlmdCBAQVJHVjsKK30KKworaWYgKG5vdCBAZGlycykgeworCUBkaXJzID0gKCcuJyk7Cit9CiskZGlybmFtZXN7Jy4nfSA9ICRkaXJhYmJyZXZzeycuJ30gPSAidGhpcyB0cmVlIjsKKyRwcmVmaXhlc3snLid9ID0gJyc7CisKK3NoaWZ0IEBBUkdWIGlmIHNjYWxhciBAQVJHViBhbmQgJEFSR1ZbMF0gZXEgIi0tIjsKKworQHRlc3RzID0gQEFSR1Y7CitpZiAobm90IEB0ZXN0cykgeworCUB0ZXN0cyA9IGdsb2IgInA/Pz8/LSouc2giOworfQorCitteSAkcmVzdWx0c2RpciA9ICJ0ZXN0LXJlc3VsdHMiOworCitpZiAoISAkc3Vic2VjdGlvbiBhbmQKKyAgICBleGlzdHMgJEVOVntHSVRfUEVSRl9TVUJTRUNUSU9OfSBhbmQKKyAgICAkRU5We0dJVF9QRVJGX1NVQlNFQ1RJT059IG5lICIiKSB7CisJJHN1YnNlY3Rpb24gPSAkRU5We0dJVF9QRVJGX1NVQlNFQ1RJT059OworfQorCitpZiAoJHN1YnNlY3Rpb24pIHsKKwkkcmVzdWx0c2RpciAuPSAiLyIgLiAkc3Vic2VjdGlvbjsKK30KKworbXkgQHN1YnRlc3RzOworbXkgJXNob3J0dGVzdHM7Citmb3IgbXkgJHQgKEB0ZXN0cykgeworCSR0ID1+IHN7KD86LiovKT8ocChcZCspLVteL10rKVwuc2gkfXskMX0gb3IgZGllICJiYWQgdGVzdCBuYW1lOiAkdCI7CisJbXkgJG4gPSAkMjsKKwlteSAkZm5hbWUgPSAiJHJlc3VsdHNkaXIvJHQuc3VidGVzdHMiOworCW9wZW4gbXkgJGZwLCAiPCIsICRmbmFtZSBvciBkaWUgImNhbm5vdCBvcGVuICRmbmFtZTogJCEiOworCWZvciAoPCRmcD4pIHsKKwkJY2hvbXA7CisJCS9eKFxkKykkLyBvciBkaWUgIm1hbGZvcm1lZCBzdWJ0ZXN0IGxpbmU6ICRfIjsKKwkJcHVzaCBAc3VidGVzdHMsICIkdC4kMSI7CisJCSRzaG9ydHRlc3RzeyIkdC4kMSJ9ID0gIiRuLiQxIjsKKwl9CisJY2xvc2UgJGZwIG9yIGRpZSAiY2Fubm90IGNsb3NlICRmbmFtZTogJCEiOworfQorCitzdWIgcmVhZF9kZXNjciB7CisJbXkgJG5hbWUgPSBzaGlmdDsKKwlvcGVuIG15ICRmaCwgIjwiLCAkbmFtZSBvciByZXR1cm4gIjxlcnJvciByZWFkaW5nIGRlc2NyaXB0aW9uPiI7CisJYmlubW9kZSAkZmgsICI6dXRmOCIgb3IgZGllICJQQU5JQyBvbiBiaW5tb2RlOiAkISI7CisJbXkgJGxpbmUgPSA8JGZoPjsKKwljbG9zZSAkZmggb3IgZGllICJjYW5ub3QgY2xvc2UgJG5hbWUiOworCWNob21wICRsaW5lOworCXJldHVybiAkbGluZTsKK30KKworc3ViIGhhdmVfZHVwbGljYXRlIHsKKwlteSAlc2VlbjsKKwlmb3IgKEBfKSB7CisJCXJldHVybiAxIGlmIGV4aXN0cyAkc2VlbnskX307CisJCSRzZWVueyRffSA9IDE7CisJfQorCXJldHVybiAwOworfQorc3ViIGhhdmVfc2xhc2ggeworCWZvciAoQF8pIHsKKwkJcmV0dXJuIDEgaWYgbXsvfTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YiBkaXNwbGF5X2RpciB7CisJbXkgKCRkKSA9IEBfOworCXJldHVybiBleGlzdHMgJGRpcmFiYnJldnN7JGR9ID8gJGRpcmFiYnJldnN7JGR9IDogJGRpcm5hbWVzeyRkfTsKK30KKworc3ViIHByaW50X2RlZmF1bHRfcmVzdWx0cyB7CisJbXkgJWRlc2NyczsKKwlteSAkZGVzY3JsZW4gPSA0OyAjICJUZXN0IgorCWZvciBteSAkdCAoQHN1YnRlc3RzKSB7CisJCSRkZXNjcnN7JHR9ID0gJHNob3J0dGVzdHN7JHR9LiI6ICIucmVhZF9kZXNjcigiJHJlc3VsdHNkaXIvJHQuZGVzY3IiKTsKKwkJJGRlc2NybGVuID0gbGVuZ3RoICRkZXNjcnN7JHR9IGlmIGxlbmd0aCAkZGVzY3JzeyR0fT4kZGVzY3JsZW47CisJfQorCisJbXkgJW5ld2RpcmFiYnJldnMgPSAlZGlyYWJicmV2czsKKwl3aGlsZSAoIWhhdmVfZHVwbGljYXRlKHZhbHVlcyAlbmV3ZGlyYWJicmV2cykpIHsKKwkJJWRpcmFiYnJldnMgPSAlbmV3ZGlyYWJicmV2czsKKwkJbGFzdCBpZiAhaGF2ZV9zbGFzaCh2YWx1ZXMgJWRpcmFiYnJldnMpOworCQklbmV3ZGlyYWJicmV2cyA9ICVkaXJhYmJyZXZzOworCQlmb3IgKHZhbHVlcyAlbmV3ZGlyYWJicmV2cykgeworCQkJc3teW14vXSovfXt9OworCQl9CisJfQorCisJbXkgJXRpbWVzOworCW15IEBjb2x3aWR0aCA9ICgoMCl4QGRpcnMpOworCWZvciBteSAkaSAoMC4uJCNkaXJzKSB7CisJCW15ICR3ID0gbGVuZ3RoIGRpc3BsYXlfZGlyKCRkaXJzWyRpXSk7CisJCSRjb2x3aWR0aFskaV0gPSAkdyBpZiAkdyA+ICRjb2x3aWR0aFskaV07CisJfQorCWZvciBteSAkdCAoQHN1YnRlc3RzKSB7CisJCW15ICRmaXJzdHI7CisJCWZvciBteSAkaSAoMC4uJCNkaXJzKSB7CisJCQlteSAkZCA9ICRkaXJzWyRpXTsKKwkJCW15ICRiYXNlID0gIiRyZXN1bHRzZGlyLyRwcmVmaXhlc3skZH0kdCI7CisJCQkkdGltZXN7JHByZWZpeGVzeyRkfS4kdH0gPSBbZ2V0X3RpbWVzKCIkYmFzZS5yZXN1bHQiKV07CisJCQlteSAoJHIsJHUsJHMpID0gQHskdGltZXN7JHByZWZpeGVzeyRkfS4kdH19OworCQkJbXkgJHcgPSBsZW5ndGggZm9ybWF0X3RpbWVzKCRyLCR1LCRzLCRmaXJzdHIpOworCQkJJGNvbHdpZHRoWyRpXSA9ICR3IGlmICR3ID4gJGNvbHdpZHRoWyRpXTsKKwkJCSRmaXJzdHIgPSAkciB1bmxlc3MgZGVmaW5lZCAkZmlyc3RyOworCQl9CisJfQorCW15ICR0b3RhbHdpZHRoID0gMypAZGlycyskZGVzY3JsZW47CisJJHRvdGFsd2lkdGggKz0gJF8gZm9yIChAY29sd2lkdGgpOworCisJcHJpbnRmICIlLSR7ZGVzY3JsZW59cyIsICJUZXN0IjsKKwlmb3IgbXkgJGkgKDAuLiQjZGlycykgeworCQlwcmludGYgIiAgICUtJGNvbHdpZHRoWyRpXXMiLCBkaXNwbGF5X2RpcigkZGlyc1skaV0pOworCX0KKwlwcmludCAiXG4iOworCXByaW50ICItIngkdG90YWx3aWR0aCwgIlxuIjsKKwlmb3IgbXkgJHQgKEBzdWJ0ZXN0cykgeworCQlwcmludGYgIiUtJHtkZXNjcmxlbn1zIiwgJGRlc2Nyc3skdH07CisJCW15ICRmaXJzdHI7CisJCWZvciBteSAkaSAoMC4uJCNkaXJzKSB7CisJCQlteSAkZCA9ICRkaXJzWyRpXTsKKwkJCW15ICgkciwkdSwkcykgPSBAeyR0aW1lc3skcHJlZml4ZXN7JGR9LiR0fX07CisJCQlwcmludGYgIiAgICUtJGNvbHdpZHRoWyRpXXMiLCBmb3JtYXRfdGltZXMoJHIsJHUsJHMsJGZpcnN0cik7CisJCQkkZmlyc3RyID0gJHIgdW5sZXNzIGRlZmluZWQgJGZpcnN0cjsKKwkJfQorCQlwcmludCAiXG4iOworCX0KK30KKworc3ViIHByaW50X3NvcnRlZF9yZXN1bHRzIHsKKwlteSAoJHNvcnRieSkgPSBAXzsKKworCWlmICgkc29ydGJ5IG5lICJyZWdyZXNzaW9uIikgeworCQlwcmludCAiT25seSAncmVncmVzc2lvbicgaXMgc3VwcG9ydGVkIGFzICctLXNvcnQtYnknIGFyZ3VtZW50XG4iOworCQl1c2FnZSgpOworCX0KKworCW15IEBldm9sdXRpb25zOworCWZvciBteSAkdCAoQHN1YnRlc3RzKSB7CisJCW15ICgkcHJldnIsICRwcmV2dSwgJHByZXZzLCAkcHJldnJldik7CisJCWZvciBteSAkaSAoMC4uJCNkaXJzKSB7CisJCQlteSAkZCA9ICRkaXJzWyRpXTsKKwkJCW15ICgkciwgJHUsICRzKSA9IGdldF90aW1lcygiJHJlc3VsdHNkaXIvJHByZWZpeGVzeyRkfSR0LnJlc3VsdCIpOworCQkJaWYgKCRpID4gMCBhbmQgZGVmaW5lZCAkciBhbmQgZGVmaW5lZCAkcHJldnIgYW5kICRwcmV2ciA+IDApIHsKKwkJCQlteSAkcGVyY2VudCA9IDEwMC4wICogKCRyIC0gJHByZXZyKSAvICRwcmV2cjsKKwkJCQlwdXNoIEBldm9sdXRpb25zLCB7ICJwZXJjZW50IiAgPT4gJHBlcmNlbnQsCisJCQkJCQkgICAgInRlc3QiICAgICA9PiAkdCwKKwkJCQkJCSAgICAicHJldnJldiIgID0+ICRwcmV2cmV2LAorCQkJCQkJICAgICJyZXYiICAgICAgPT4gJGQsCisJCQkJCQkgICAgInByZXZyIiAgICA9PiAkcHJldnIsCisJCQkJCQkgICAgInIiICAgICAgICA9PiAkciwKKwkJCQkJCSAgICAicHJldnUiICAgID0+ICRwcmV2dSwKKwkJCQkJCSAgICAidSIgICAgICAgID0+ICR1LAorCQkJCQkJICAgICJwcmV2cyIgICAgPT4gJHByZXZzLAorCQkJCQkJICAgICJzIiAgICAgICAgPT4gJHN9OworCQkJfQorCQkJKCRwcmV2ciwgJHByZXZ1LCAkcHJldnMsICRwcmV2cmV2KSA9ICgkciwgJHUsICRzLCAkZCk7CisJCX0KKwl9CisKKwlteSBAc29ydGVkX2V2b2x1dGlvbnMgPSBzb3J0IHsgJGItPntwZXJjZW50fSA8PT4gJGEtPntwZXJjZW50fSB9IEBldm9sdXRpb25zOworCisJZm9yIG15ICRlIChAc29ydGVkX2V2b2x1dGlvbnMpIHsKKwkJcHJpbnRmICIlKy4xZiUlIiwgJGUtPntwZXJjZW50fTsKKwkJcHJpbnQgIiAiIC4gJGUtPnt0ZXN0fTsKKwkJcHJpbnQgIiAiIC4gZm9ybWF0X3RpbWVzKCRlLT57cHJldnJ9LCAkZS0+e3ByZXZ1fSwgJGUtPntwcmV2c30pOworCQlwcmludCAiICIgLiBmb3JtYXRfdGltZXMoJGUtPntyfSwgJGUtPnt1fSwgJGUtPntzfSk7CisJCXByaW50ICIgIiAuIGRpc3BsYXlfZGlyKCRlLT57cHJldnJldn0pOworCQlwcmludCAiICIgLiBkaXNwbGF5X2RpcigkZS0+e3Jldn0pOworCQlwcmludCAiXG4iOworCX0KK30KKworc3ViIHByaW50X2NvZGVzcGVlZF9yZXN1bHRzIHsKKwlteSAoJHN1YnNlY3Rpb24pID0gQF87CisKKwlteSAkcHJvamVjdCA9ICJHaXQiOworCisJbXkgJGV4ZWN1dGFibGUgPSBgdW5hbWUgLXMgLW1gOworCWNob21wICRleGVjdXRhYmxlOworCisJaWYgKCRzdWJzZWN0aW9uKSB7CisJCSRleGVjdXRhYmxlIC49ICIsICIgLiAkc3Vic2VjdGlvbjsKKwl9CisKKwlteSAkZW52aXJvbm1lbnQ7CisJaWYgKCRyZXBvbmFtZSkgeworCQkkZW52aXJvbm1lbnQgPSAkcmVwb25hbWU7CisJfSBlbHNpZiAoZXhpc3RzICRFTlZ7R0lUX1BFUkZfUkVQT19OQU1FfSBhbmQgJEVOVntHSVRfUEVSRl9SRVBPX05BTUV9IG5lICIiKSB7CisJCSRlbnZpcm9ubWVudCA9ICRFTlZ7R0lUX1BFUkZfUkVQT19OQU1FfTsKKwl9IGVsc2UgeworCQkkZW52aXJvbm1lbnQgPSBgdW5hbWUgLXJgOworCQljaG9tcCAkZW52aXJvbm1lbnQ7CisJfQorCisJbXkgQGRhdGE7CisKKwlmb3IgbXkgJHQgKEBzdWJ0ZXN0cykgeworCQlmb3IgbXkgJGQgKEBkaXJzKSB7CisJCQlteSAkY29tbWl0aWQgPSAkcHJlZml4ZXN7JGR9OworCQkJJGNvbW1pdGlkID1+IHMvXmJ1aWxkXy8vOworCQkJJGNvbW1pdGlkID1+IHMvXC4kLy87CisJCQlteSAoJHJlc3VsdF92YWx1ZSwgJHUsICRzKSA9IGdldF90aW1lcygiJHJlc3VsdHNkaXIvJHByZWZpeGVzeyRkfSR0LnJlc3VsdCIpOworCisJCQlteSAldmFscyA9ICgKKwkJCQkiY29tbWl0aWQiID0+ICRjb21taXRpZCwKKwkJCQkicHJvamVjdCIgPT4gJHByb2plY3QsCisJCQkJImJyYW5jaCIgPT4gJGRpcm5hbWVzeyRkfSwKKwkJCQkiZXhlY3V0YWJsZSIgPT4gJGV4ZWN1dGFibGUsCisJCQkJImJlbmNobWFyayIgPT4gJHNob3J0dGVzdHN7JHR9IC4gIiAiIC4gcmVhZF9kZXNjcigiJHJlc3VsdHNkaXIvJHQuZGVzY3IiKSwKKwkJCQkiZW52aXJvbm1lbnQiID0+ICRlbnZpcm9ubWVudCwKKwkJCQkicmVzdWx0X3ZhbHVlIiA9PiAkcmVzdWx0X3ZhbHVlLAorCQkJICAgICk7CisJCQlwdXNoIEBkYXRhLCBcJXZhbHM7CisJCX0KKwl9CisKKwlyZXF1aXJlIEpTT047CisJcHJpbnQgSlNPTjo6dG9fanNvbihcQGRhdGEsIHt1dGY4ID0+IDEsIHByZXR0eSA9PiAxLCBjYW5vbmljYWwgPT4gMX0pLCAiXG4iOworfQorCitiaW5tb2RlIFNURE9VVCwgIjp1dGY4IiBvciBkaWUgIlBBTklDIG9uIGJpbm1vZGU6ICQhIjsKKworaWYgKCRjb2Rlc3BlZWQpIHsKKwlwcmludF9jb2Rlc3BlZWRfcmVzdWx0cygkc3Vic2VjdGlvbik7Cit9IGVsc2lmIChkZWZpbmVkICRzb3J0YnkpIHsKKwlwcmludF9zb3J0ZWRfcmVzdWx0cygkc29ydGJ5KTsKK30gZWxzZSB7CisJcHJpbnRfZGVmYXVsdF9yZXN1bHRzKCk7Cit9CmRpZmYgLS1naXQgYS90L3BlcmYvYmlzZWN0X3JlZ3Jlc3Npb24gYi90L3BlcmYvYmlzZWN0X3JlZ3Jlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2U0N2UxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9iaXNlY3RfcmVncmVzc2lvbgpAQCAtMCwwICsxLDczIEBACisjIS9iaW4vc2gKKworIyBSZWFkIGEgbGluZSBjb21pbmcgZnJvbSBgLi9hZ2dyZWdhdGUucGVybCAtLXNvcnQtYnkgcmVncmVzc2lvbiAuLi5gCisjIGFuZCBhdXRvbWF0aWNhbGx5IGJpc2VjdCB0byBmaW5kIHRoZSBjb21taXQgcmVzcG9uc2libGUgZm9yIHRoZQorIyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uLgorIworIyBMaW5lcyBmcm9tIGAuL2FnZ3JlZ2F0ZS5wZXJsIC0tc29ydC1ieSByZWdyZXNzaW9uIC4uLmAgbG9vayBsaWtlOgorIworIyArMTAwLjAlIHA3ODIxLWdyZXAtZW5naW5lcy1maXhlZC4xIDAuMDQoMC4xMCswLjAzKSAwLjA4KDAuMTErMC4wOCkgdjIuMTQuMyB2Mi4xNS4xCisjICszMy4zJSBwNzgyMC1ncmVwLWVuZ2luZXMuMSAwLjAzKDAuMDgrMC4wMikgMC4wNCgwLjA4KzAuMDIpIHYyLjE0LjMgdjIuMTUuMQorIworCitkaWUgKCkgeworCWVjaG8gPiYyICJlcnJvcjogJCoiCisJZXhpdCAxCit9CisKK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKwlhcmc9IiQxIgorCWNhc2UgIiRhcmciIGluCisJLS1oZWxwKQorCQllY2hvICJ1c2FnZTogJDAgWy0tY29uZmlnIGZpbGVdIFstLXN1YnNlY3Rpb24gc3Vic2VjdGlvbl0iCisJCWV4aXQgMAorCQk7OworCS0tY29uZmlnKQorCQlzaGlmdAorCQlHSVRfUEVSRl9DT05GSUdfRklMRT0kKGNkICIkKGRpcm5hbWUgIiQxIikiOyBwd2QpLyQoYmFzZW5hbWUgIiQxIikKKwkJZXhwb3J0IEdJVF9QRVJGX0NPTkZJR19GSUxFCisJCXNoaWZ0IDs7CisJLS1zdWJzZWN0aW9uKQorCQlzaGlmdAorCQlHSVRfUEVSRl9TVUJTRUNUSU9OPSIkMSIKKwkJZXhwb3J0IEdJVF9QRVJGX1NVQlNFQ1RJT04KKwkJc2hpZnQgOzsKKwktLSopCisJCWRpZSAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRhcmcnIiA7OworCSopCisJCWRpZSAidW5rbm93biBhcmd1bWVudCAnJGFyZyciCisJCTs7CisJZXNhYworZG9uZQorCityZWFkIC1yIHJlZ3Jlc3Npb24gc3VidGVzdCBvbGR0aW1lIG5ld3RpbWUgb2xkcmV2IG5ld3JldgorCit0ZXN0X3NjcmlwdD0kKGVjaG8gIiRzdWJ0ZXN0IiB8IHNlZCAtZSAncy9cKC4qXClcLlswLTldKiQvXDEuc2gvJykKK3Rlc3RfbnVtYmVyPSQoZWNobyAiJHN1YnRlc3QiIHwgc2VkIC1lICdzLy4qXC5cKFswLTldKlwpJC9cMS8nKQorCisjIG9sZHRpbWUgYW5kIG5ld3RpbWUgYXJlIGRlY2ltYWwgbnVtYmVyLCBub3QgaW50ZWdlcnMKKworb2xkdGltZT0kKGVjaG8gIiRvbGR0aW1lIiB8IHNlZCAtZSAncy9eXChbMC05XVwrXC5bMC05XVwrXCkuKiQvXDEvJykKK25ld3RpbWU9JChlY2hvICIkbmV3dGltZSIgfCBzZWQgLWUgJ3MvXlwoWzAtOV1cK1wuWzAtOV1cK1wpLiokL1wxLycpCisKK3Rlc3QgJChlY2hvICIkbmV3dGltZSIgIiRvbGR0aW1lIiB8IGF3ayAneyBwcmludCAoJDEgPiAkMikgfScpID0gMSB8fAorCWRpZSAiTmV3IHRpbWUgJyRuZXd0aW1lJyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9sZCB0aW1lICckb2xkdGltZSciCisKK3RtcGRpcj0kKG1rdGVtcCAtZCAtdCBiaXNlY3RfcmVncmVzc2lvbl9YWFhYWFgpIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wIGRpcmVjdG9yeSIKK2VjaG8gIiRvbGR0aW1lIiA+IiR0bXBkaXIvb2xkdGltZSIgfHwgZGllICJGYWlsZWQgdG8gd3JpdGUgdG8gJyR0bXBkaXIvb2xkdGltZSciCitlY2hvICIkbmV3dGltZSIgPiIkdG1wZGlyL25ld3RpbWUiIHx8IGRpZSAiRmFpbGVkIHRvIHdyaXRlIHRvICckdG1wZGlyL25ld3RpbWUnIgorCisjIEJpc2VjdGluZyBtdXN0IGJlIHBlcmZvcm1lZCBmcm9tIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IChldmVuIHdpdGggLS1uby1jaGVja291dCkKKygKKwl0b3BsZXZlbF9kaXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkgfHwgZGllICJGYWlsZWQgdG8gZmluZCB0b3AgbGV2ZWwgZGlyZWN0b3J5IgorCWNkICIkdG9wbGV2ZWxfZGlyIiB8fCBkaWUgIkZhaWxlZCB0byBjZCBpbnRvIHRvcCBsZXZlbCBkaXJlY3RvcnkgJyR0b3BsZXZlbF9kaXInIgorCisJZ2l0IGJpc2VjdCBzdGFydCAtLW5vLWNoZWNrb3V0ICIkbmV3cmV2IiAiJG9sZHJldiIgfHwgZGllICJGYWlsZWQgdG8gc3RhcnQgYmlzZWN0aW5nIgorCisJZ2l0IGJpc2VjdCBydW4gdC9wZXJmL2Jpc2VjdF9ydW5fc2NyaXB0ICIkdGVzdF9zY3JpcHQiICIkdGVzdF9udW1iZXIiICIkdG1wZGlyIgorCXJlcz0iJD8iCisKKwlnaXQgYmlzZWN0IHJlc2V0CisKKwlleGl0ICIkcmVzIgorKQpkaWZmIC0tZ2l0IGEvdC9wZXJmL2Jpc2VjdF9ydW5fc2NyaXB0IGIvdC9wZXJmL2Jpc2VjdF9ydW5fc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlYmFmMTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvYmlzZWN0X3J1bl9zY3JpcHQKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3NjcmlwdD0iJDEiCit0ZXN0X251bWJlcj0iJDIiCitpbmZvX2Rpcj0iJDMiCisKKyMgVGhpcyBhYm9ydHMgdGhlIGJpc2VjdGlvbiBpbW1lZGlhdGVseQorZGllICgpIHsKKwllY2hvID4mMiAiZXJyb3I6ICQqIgorCWV4aXQgMjU1Cit9CisKK2Jpc2VjdF9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBCSVNFQ1RfSEVBRCkgfHwgZGllICJGYWlsZWQgdG8gZmluZCBCSVNFQ1RfSEVBRCByZWYiCisKK3NjcmlwdF9udW1iZXI9JChlY2hvICIkc2NyaXB0IiB8IHNlZCAtZSAicy9ecFwoWzAtOV0qXCkuKlwkL1wxLyIpIHx8IGRpZSAiRmFpbGVkIHRvIGdldCBzY3JpcHQgbnVtYmVyIGZvciAnJHNjcmlwdCciCisKK29sZHRpbWU9JChjYXQgIiRpbmZvX2Rpci9vbGR0aW1lIikgfHwgZGllICJGYWlsZWQgdG8gYWNjZXNzICckaW5mb19kaXIvb2xkdGltZSciCituZXd0aW1lPSQoY2F0ICIkaW5mb19kaXIvbmV3dGltZSIpIHx8IGRpZSAiRmFpbGVkIHRvIGFjY2VzcyAnJGluZm9fZGlyL25ld3RpbWUnIgorCitjZCB0L3BlcmYgfHwgZGllICJGYWlsZWQgdG8gY2QgaW50byAndC9wZXJmJyIKKworcmVzdWx0X2ZpbGU9IiRpbmZvX2Rpci9wZXJmXyR7c2NyaXB0X251bWJlcn1fJHtiaXNlY3RfaGVhZH1fcmVzdWx0cy50eHQiCisKK0dJVF9QRVJGX0RJUlNfT1JfUkVWUz0iJGJpc2VjdF9oZWFkIgorZXhwb3J0IEdJVF9QRVJGX0RJUlNfT1JfUkVWUworCisjIERvbid0IHVzZSBjb2Rlc3BlZWQKK0dJVF9QRVJGX0NPREVTUEVFRF9PVVRQVVQ9CitHSVRfUEVSRl9TRU5EX1RPX0NPREVTUEVFRD0KK2V4cG9ydCBHSVRfUEVSRl9DT0RFU1BFRURfT1VUUFVUCitleHBvcnQgR0lUX1BFUkZfU0VORF9UT19DT0RFU1BFRUQKKworLi9ydW4gIiRzY3JpcHQiID4iJHJlc3VsdF9maWxlIiAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIHJ1biBwZXJmIHRlc3QgJyRzY3JpcHQnIgorCitydGltZT0kKHNlZCAtbiAicy9eJHNjcmlwdF9udW1iZXJcLiR0ZXN0X251bWJlcjouKlwoWzAtOV1cK1wuWzAtOV1cK1wpKC4qKS4qXCQvXDEvcCIgIiRyZXN1bHRfZmlsZSIpCisKK2VjaG8gIm5ld3RpbWU6ICRuZXd0aW1lIgorZWNobyAicnRpbWU6ICRydGltZSIKK2VjaG8gIm9sZHRpbWU6ICRvbGR0aW1lIgorCisjIENvbXBhcmUgKCRuZXd0aW1lIC0gJHJ0aW1lKSB3aXRoICgkcnRpbWUgLSAkb2xkdGltZSkKKyMgVGltZXMgYXJlIGRlY2ltYWwgbnVtYmVyLCBub3QgaW50ZWdlcnMKKworaWYgdGVzdCAkKGVjaG8gIiRuZXd0aW1lIiAiJHJ0aW1lIiAiJG9sZHRpbWUiIHwgYXdrICd7IHByaW50ICgkMSAtICQyID4gJDIgLSAkMykgfScpID0gMQordGhlbgorCSMgQ3VycmVudCBjb21taXQgaXMgY29uc2lkZXJlZCAiZ29vZC9vbGQiCisJZWNobyAiJHJ0aW1lIiA+IiRpbmZvX2Rpci9vbGR0aW1lIgorCWV4aXQgMAorZWxzZQorCSMgQ3VycmVudCBjb21taXQgaXMgY29uc2lkZXJlZCAiYmFkL25ldyIKKwllY2hvICIkcnRpbWUiID4iJGluZm9fZGlyL25ld3RpbWUiCisJZXhpdCAxCitmaQpkaWZmIC0tZ2l0IGEvdC9wZXJmL2xpYi1wYWNrLnNoIGIvdC9wZXJmL2xpYi1wYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODY1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvbGliLXBhY2suc2gKQEAgLTAsMCArMSwyNSBAQAorIyBIZWxwZXJzIGZvciBkZWFsaW5nIHdpdGggbGFyZ2UgbnVtYmVycyBvZiBwYWNrcy4KKworIyBjcmVhdGUgJDEgbm9uc2Vuc2UgcGFja3MsIGVhY2ggd2l0aCBhIHNpbmdsZSBibG9iCitjcmVhdGVfcGFja3MgKCkgeworCXBlcmwgLWxlICcKKwkJbXkgKCRuKSA9IEBBUkdWOworCQlmb3IgKDEuLiRuKSB7CisJCQlwcmludCAiYmxvYiI7CisJCQlwcmludCAiZGF0YSA8PEVPRiI7CisJCQlwcmludCAiJF8iOworCQkJcHJpbnQgIkVPRiI7CisJCQlwcmludCAiY2hlY2twb2ludCIKKwkJfQorCScgIiRAIiB8CisJZ2l0IGZhc3QtaW1wb3J0Cit9CisKKyMgY3JlYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIHBhY2tzLCBkaXNhYmxpbmcgYW55IGdjIHdoaWNoIG1pZ2h0CisjIGNhdXNlIHVzIHRvIHJlcGFjayB0aGVtCitzZXR1cF9tYW55X3BhY2tzICgpIHsKKwlnaXQgY29uZmlnIGdjLmF1dG8gMCAmJgorCWdpdCBjb25maWcgZ2MuYXV0b3BhY2tsaW1pdCAwICYmCisJZ2l0IGNvbmZpZyBmYXN0aW1wb3J0LnVucGFja2xpbWl0IDAgJiYKKwljcmVhdGVfcGFja3MgNTAwCit9CmRpZmYgLS1naXQgYS90L3BlcmYvbWluX3RpbWUucGVybCBiL3QvcGVyZi9taW5fdGltZS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxYTI3MTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvbWluX3RpbWUucGVybApAQCAtMCwwICsxLDIxIEBACisjIS91c3IvYmluL3BlcmwKKworbXkgJG1pbnJ0ID0gMWUxMDA7CitteSAkbWluOworCit3aGlsZSAoPD4pIHsKKwkjIFtoOl1tOnMueHggVS54eCBTLnh4CisJL14oPzooXGQrKTopPyhcZCspOihcZCsoPzpcLlxkKyk/KSAoXGQrKD86XC5cZCspPykgKFxkKyg/OlwuXGQrKT8pJC8KKwkJb3IgZGllICJiYWQgaW5wdXQgbGluZTogJF8iOworCW15ICRydCA9ICgoZGVmaW5lZCAkMSA/ICQxIDogMC4wKSo2MCskMikqNjArJDM7CisJaWYgKCRydCA8ICRtaW5ydCkgeworCQkkbWluID0gJF87CisJCSRtaW5ydCA9ICRydDsKKwl9Cit9CisKK2lmICghZGVmaW5lZCAkbWluKSB7CisJZGllICJubyBpbnB1dCBmb3VuZCI7Cit9CisKK3ByaW50ICRtaW47CmRpZmYgLS1naXQgYS90L3BlcmYvcDAwMDAtcGVyZi1saWItc2FuaXR5LnNoIGIvdC9wZXJmL3AwMDAwLXBlcmYtbGliLXNhbml0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDJjMjFlCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMDAwLXBlcmYtbGliLXNhbml0eS5zaApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgd2hldGhlciBwZXJmLWxpYiBmYWNpbGl0aWVzIHdvcmsnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X3BlcmYgJ3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8gd29ya3MnICcKKwlmb289JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9leHBvcnQgZm9vCisnCisKK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKwordGVzdF9wZXJmICd0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlIHdvcmtzJyAnCisJd3Q9JChmaW5kIC4gfCB3YyAtbCkgJiYKKwlpZHg9JChnaXQgbHMtZmlsZXMgfCB3YyAtbCkgJiYKKwl0ZXN0ICR3dCAtZ3QgJGlkeAorJworCitiYXo9YmF6Cit0ZXN0X2V4cG9ydCBiYXoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9leHBvcnQgd29ya3MnICcKKwllY2hvICIkZm9vIiAmJgorCXRlc3QgIiRmb28iID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwllY2hvICIkYmF6IiAmJgorCXRlc3QgIiRiYXoiID0gYmF6CisnCisKK3Rlc3RfcGVyZiAnZXhwb3J0IGEgd2VpcmQgdmFyJyAnCisJYmFyPSJ3ZWlyZCAjIHZhcmlhYmxlIiAmJgorCXRlc3RfZXhwb3J0IGJhcgorJworCit0ZXN0X3BlcmYgJ8Op4bi/w63hupcgxYTDtsWELcOBxZrEhsONw40gxIfhuKfDocWVw6HEh+G6l8OpxZXFmycgJ3RydWUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RfZXhwb3J0IHdvcmtzIHdpdGggd2VpcmQgdmFycycgJworCWVjaG8gIiRiYXIiICYmCisJdGVzdCAiJGJhciIgPSAid2VpcmQgIyB2YXJpYWJsZSIKKycKKwordGVzdF9wZXJmICdpbXBvcnRhbnQgdmFyaWFibGVzIGF2YWlsYWJsZSBpbiBzdWJzaGVsbHMnICcKKwl0ZXN0IC1uICIkSE9NRSIgJiYKKwl0ZXN0IC1uICIkVEVTVF9ESVJFQ1RPUlkiICYmCisJdGVzdCAtbiAiJFRSQVNIX0RJUkVDVE9SWSIgJiYKKwl0ZXN0IC1uICIkR0lUX0JVSUxEX0RJUiIKKycKKwordGVzdF9wZXJmICd0ZXN0LWxpYi1mdW5jdGlvbnMgY29ycmVjdGx5IGxvYWRlZCBpbiBzdWJzaGVsbHMnICcKKwk6ID5hICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYSAmJgorCTogPmIgJiYKKwl0ZXN0X2NtcCBhIGIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDAwMDEtcmV2LWxpc3Quc2ggYi90L3BlcmYvcDAwMDEtcmV2LWxpc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzA0MmE4NQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDAwMS1yZXYtbGlzdC5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgaGlzdG9yeSB3YWxraW5nIHBlcmZvcm1hbmNlIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X3BlcmYgJ3Jldi1saXN0IC0tYWxsJyAnCisJZ2l0IHJldi1saXN0IC0tYWxsID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdyZXYtbGlzdCAtLWFsbCAtLW9iamVjdHMnICcKKwlnaXQgcmV2LWxpc3QgLS1hbGwgLS1vYmplY3RzID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdyZXYtbGlzdCAtLXBhcmVudHMnICcKKwlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZHVtbXkgZmlsZScgJworCWVjaG8gdW5saWtlbHktdG8tYWxyZWFkeS1iZS10aGVyZSA+ZHVtbXkgJiYKKwlnaXQgYWRkIGR1bW15ICYmCisJZ2l0IGNvbW1pdCAtbSBkdW1teQorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0IC0tIGR1bW15JyAnCisJZ2l0IHJldi1saXN0IEhFQUQgLS0gZHVtbXkKKycKKwordGVzdF9wZXJmICdyZXYtbGlzdCAtLXBhcmVudHMgLS0gZHVtbXknICcKKwlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQgLS0gZHVtbXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5ldyB1bnJlZmVyZW5jZWQgY29tbWl0JyAnCisJY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlIEhFQURee3RyZWV9IC1wIEhFQUQpICYmCisJdGVzdF9leHBvcnQgY29tbWl0CisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgJGNvbW1pdCAtLW5vdCAtLWFsbCcgJworCWdpdCByZXYtbGlzdCAkY29tbWl0IC0tbm90IC0tYWxsID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdyZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdCAtLW5vdCAtLWFsbCcgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdCAtLW5vdCAtLWFsbCA+L2Rldi9udWxsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDAyLXJlYWQtY2FjaGUuc2ggYi90L3BlcmYvcDAwMDItcmVhZC1jYWNoZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZGQxMDVhCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMDAyLXJlYWQtY2FjaGUuc2gKQEAgLTAsMCArMSwxNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIHBlcmZvcm1hbmNlIG9mIHJlYWRpbmcgdGhlIGluZGV4IgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCitjb3VudD0xMDAwCit0ZXN0X3BlcmYgInJlYWRfY2FjaGUvZGlzY2FyZF9jYWNoZSAkY291bnQgdGltZXMiICIKKwl0ZXN0LXRvb2wgcmVhZC1jYWNoZSAkY291bnQKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDAwMDMtZGVsdGEtYmFzZS1jYWNoZS5zaCBiL3QvcGVyZi9wMDAwMy1kZWx0YS1iYXNlLWNhY2hlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyMzY5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDAwMDMtZGVsdGEtYmFzZS1jYWNoZS5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBvcGVyYXRpb25zIHRoYXQgZW1waGFzaXplIHRoZSBkZWx0YSBiYXNlIGNhY2hlLgorCitXZSBsb29rIGF0IGJvdGggImxvZyAtLXJhdyIsIHdoaWNoIHNob3VsZCBwdXQgb25seSB0cmVlcyBpbnRvIHRoZSBkZWx0YSBjYWNoZSwKK2FuZCAibG9nIC1TZm9vIC0tcmF3Iiwgd2hpY2ggc2hvdWxkIGxvb2sgYXQgYm90aCB0cmVlcyBhbmQgYmxvYnMuCisKK0FueSBlZmZlY3RzIHdpbGwgYmUgZW1waGFzaXplZCBpZiB0aGUgdGVzdCByZXBvc2l0b3J5IGlzIGZ1bGx5IHBhY2tlZCAobG9vc2UKK29iamVjdHMgb2J2aW91c2x5IGRvIG5vdCB1c2UgdGhlIGRlbHRhIGJhc2UgY2FjaGUgYXQgYWxsKS4gSXQgaXMgYWxzbworZW1waGFzaXplZCBpZiB0aGUgcGFjayBoYXMgbG9uZyBkZWx0YSBjaGFpbnMgKGUuZy4sIGFzIHByb2R1Y2VkIGJ5ICJnYworLS1hZ2dyZXNzaXZlIiksIHRob3VnaCBjYWNoZSBpcyBzdGlsbCBxdWl0ZSBub3RpY2VhYmxlIGV2ZW4gd2l0aCB0aGUgZGVmYXVsdAorZGVwdGggb2YgNTAuCisKK1RoZSBzZXR0aW5nIG9mIGNvcmUuZGVsdGFCYXNlQ2FjaGVMaW1pdCBpbiB0aGUgc291cmNlIHJlcG9zaXRvcnkgaXMgYWxzbworcmVsZXZhbnQgKGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB5b3VyIHRlc3QgcmVwbyksIHNvIGJlIHN1cmUgaXQgaXMgY29uc2lzdGVudAorYmV0d2VlbiBydW5zLgorJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCisKKyMgcHV0cyBtb3N0bHkgdHJlZXMgaW50byB0aGUgZGVsdGEgYmFzZSBjYWNoZQordGVzdF9wZXJmICdsb2cgLS1yYXcnICcKKwlnaXQgbG9nIC0tcmF3ID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdsb2cgLVMnICcKKwlnaXQgbG9nIC0tcmF3IC1TZm9vID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDAwMDQtbGF6eS1pbml0LW5hbWUtaGFzaC5zaCBiL3QvcGVyZi9wMDAwNC1sYXp5LWluaXQtbmFtZS1oYXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhZmMwOGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDAwMDQtbGF6eS1pbml0LW5hbWUtaGFzaC5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgbXVsdGktdGhyZWFkZWQgbGF6eV9pbml0X25hbWVfaGFzaCcKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbwordGVzdF9jaGVja291dF93b3JrdHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYm90aCBtZXRob2RzIGJ1aWxkIHRoZSBzYW1lIGhhc2htYXBzJyAnCisJdGVzdC10b29sIGxhenktaW5pdC1uYW1lLWhhc2ggLS1kdW1wIC0tc2luZ2xlID5vdXQuc2luZ2xlICYmCisJaWYgdGVzdC10b29sIGxhenktaW5pdC1uYW1lLWhhc2ggLS1kdW1wIC0tbXVsdGkgPm91dC5tdWx0aQorCXRoZW4KKwkJdGVzdF9zZXRfcHJlcmVxIFJFUE9fQklHX0VOT1VHSF9GT1JfTVVMVEkgJiYKKwkJc29ydCA8b3V0LnNpbmdsZSA+c29ydGVkLnNpbmdsZSAmJgorCQlzb3J0IDxvdXQubXVsdGkgPnNvcnRlZC5tdWx0aSAmJgorCQl0ZXN0X2NtcCBzb3J0ZWQuc2luZ2xlIHNvcnRlZC5tdWx0aQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbGlicmF0ZScgJworCWVudHJpZXM9JCh3YyAtbCA8b3V0LnNpbmdsZSkgJiYKKworCWNhc2UgJGVudHJpZXMgaW4KKwk/KSBjb3VudD0xMDAwMDAwIDs7CisJPz8pIGNvdW50PTEwMDAwMCA7OworCT8/PykgY291bnQ9MTAwMDAgOzsKKwk/Pz8/KSBjb3VudD0xMDAwIDs7CisJPz8/Pz8pIGNvdW50PTEwMCA7OworCT8/Pz8/PykgY291bnQ9MTAgOzsKKwkqKSBjb3VudD0xIDs7CisJZXNhYyAmJgorCWV4cG9ydCBjb3VudCAmJgorCisJY2FzZSAkZW50cmllcyBpbgorCTEpIGVudHJpZXNfZGVzYz0iMSBlbnRyeSIgOzsKKwkqKSBlbnRyaWVzX2Rlc2M9IiRlbnRyaWVzIGVudHJpZXMiIDs7CisJZXNhYyAmJgorCisJY2FzZSAkY291bnQgaW4KKwkxKSBjb3VudF9kZXNjPSIxIHJvdW5kIiA7OworCSopIGNvdW50X2Rlc2M9IiRjb3VudCByb3VuZHMiIDs7CisJZXNhYyAmJgorCisJZGVzYz0iJGVudHJpZXNfZGVzYywgJGNvdW50X2Rlc2MiICYmCisJZXhwb3J0IGRlc2MKKycKKwordGVzdF9wZXJmICJzaW5nbGUtdGhyZWFkZWQsICRkZXNjIiAiCisJdGVzdC10b29sIGxhenktaW5pdC1uYW1lLWhhc2ggLS1zaW5nbGUgLS1jb3VudD0kY291bnQKKyIKKwordGVzdF9wZXJmIFJFUE9fQklHX0VOT1VHSF9GT1JfTVVMVEkgIm11bHRpLXRocmVhZGVkLCAkZGVzYyIgIgorCXRlc3QtdG9vbCBsYXp5LWluaXQtbmFtZS1oYXNoIC0tbXVsdGkgLS1jb3VudD0kY291bnQKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDAwMDUtc3RhdHVzLnNoIGIvdC9wZXJmL3AwMDA1LXN0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYjBhYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMDA1LXN0YXR1cy5zaApAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyB0ZXN0IG1lYXN1cmVzIHRoZSBwZXJmb3JtYW5jZSBvZiB2YXJpb3VzIHJlYWQtdHJlZQorIyBhbmQgc3RhdHVzIG9wZXJhdGlvbnMuICBJdCBpcyBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbgorIyB0aGUgYWxnb3JpdGhtaWMgY29zdHMgb2YgaW5kZXggb3BlcmF0aW9ucyBhbmQgcmVjdXJzaXZlCisjIHRyZWUgdHJhdmVyc2FsIC0tIGFuZCBOT1QgZGlzayBJL08gb24gdGhvdXNhbmRzIG9mIGZpbGVzLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBwZXJmb3JtYW5jZSBvZiByZWFkLXRyZWUiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKKyMgSWYgdGhlIHRlc3QgcmVwbyB3YXMgZ2VuZXJhdGVkIGJ5IC4vcmVwb3MvbWFueS1maWxlcy5zaAorIyB0aGVuIHdlIGtub3cgc29tZXRoaW5nIGFib3V0IHRoZSBkYXRhIHNoYXBlIGFuZCBicmFuY2hlcywKKyMgc28gd2UgY2FuIGlzb2xhdGUgdGVzdGluZyB0byB0aGUgYmFsbGFzdC1yZWxhdGVkIGNvbW1pdHMKKyMgYW5kIHNldHVwIHNwYXJzZS1jaGVja291dCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvcHVsYXRlCisjIHRoZSBiYWxsYXN0IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyMKKyMgT3RoZXJ3aXNlLCB3ZSBtYWtlIHNvbWUgZ2VuZXJhbCBhc3N1bXB0aW9ucyBhYm91dCB0aGUKKyMgcmVwbyBhbmQgY29uc2lkZXIgdGhlIGVudGlyZSBoaXN0b3J5IG9mIHRoZSBjdXJyZW50CisjIGJyYW5jaCB0byBiZSB0aGUgYmFsbGFzdC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgcmVwbyIgJworCWlmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9wMDAwNi1iYWxsYXN0Xntjb21taXR9CisJdGhlbgorCQllY2hvIEFzc3VtaW5nIHN5bnRoZXRpYyByZXBvIGZyb20gbWFueS1maWxlcy5zaAorCQlnaXQgYnJhbmNoIGJyX2Jhc2UgICAgICAgICAgICBtYXN0ZXIKKwkJZ2l0IGJyYW5jaCBicl9iYWxsYXN0ICAgICAgICAgcDAwMDYtYmFsbGFzdAorCQlnaXQgY29uZmlnIC0tbG9jYWwgY29yZS5zcGFyc2VjaGVja291dCAxCisJCWNhdCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1FT0YKKwkJLyoKKwkJIWJhbGxhc3QvKgorCQlFT0YKKwllbHNlCisJCWVjaG8gQXNzdW1pbmcgbm9uLXN5bnRoZXRpYyByZXBvLi4uCisJCWdpdCBicmFuY2ggYnJfYmFzZSAgICAgICAgICAgICQoZ2l0IHJldi1saXN0IEhFQUQgfCB0YWlsIC1uIDEpCisJCWdpdCBicmFuY2ggYnJfYmFsbGFzdCAgICAgICAgIEhFQUQKKwlmaSAmJgorCWdpdCBjaGVja291dCAtcSBicl9iYWxsYXN0ICYmCisJbnJfZmlsZXM9JChnaXQgbHMtZmlsZXMgfCB3YyAtbCkKKycKKwordGVzdF9wZXJmICJyZWFkLXRyZWUgc3RhdHVzIGJyX2JhbGxhc3QgKCRucl9maWxlcykiICcKKwlnaXQgcmVhZC10cmVlIEhFQUQgJiYKKwlnaXQgc3RhdHVzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDA2LXJlYWQtdHJlZS1jaGVja291dC5zaCBiL3QvcGVyZi9wMDAwNi1yZWFkLXRyZWUtY2hlY2tvdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzhjYzIzZgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDAwNi1yZWFkLXRyZWUtY2hlY2tvdXQuc2gKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgdGVzdCBtZWFzdXJlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdmFyaW91cyByZWFkLXRyZWUKKyMgYW5kIGNoZWNrb3V0IG9wZXJhdGlvbnMuICBJdCBpcyBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbgorIyB0aGUgYWxnb3JpdGhtaWMgY29zdHMgb2YgaW5kZXggb3BlcmF0aW9ucyBhbmQgcmVjdXJzaXZlCisjIHRyZWUgdHJhdmVyc2FsIC0tIGFuZCBOT1QgZGlzayBJL08gb24gdGhvdXNhbmRzIG9mIGZpbGVzLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBwZXJmb3JtYW5jZSBvZiByZWFkLXRyZWUiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKKyMgSWYgdGhlIHRlc3QgcmVwbyB3YXMgZ2VuZXJhdGVkIGJ5IC4vcmVwb3MvbWFueS1maWxlcy5zaAorIyB0aGVuIHdlIGtub3cgc29tZXRoaW5nIGFib3V0IHRoZSBkYXRhIHNoYXBlIGFuZCBicmFuY2hlcywKKyMgc28gd2UgY2FuIGlzb2xhdGUgdGVzdGluZyB0byB0aGUgYmFsbGFzdC1yZWxhdGVkIGNvbW1pdHMKKyMgYW5kIHNldHVwIHNwYXJzZS1jaGVja291dCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvcHVsYXRlCisjIHRoZSBiYWxsYXN0IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyMKKyMgT3RoZXJ3aXNlLCB3ZSBtYWtlIHNvbWUgZ2VuZXJhbCBhc3N1bXB0aW9ucyBhYm91dCB0aGUKKyMgcmVwbyBhbmQgY29uc2lkZXIgdGhlIGVudGlyZSBoaXN0b3J5IG9mIHRoZSBjdXJyZW50CisjIGJyYW5jaCB0byBiZSB0aGUgYmFsbGFzdC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgcmVwbyIgJworCWlmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9wMDAwNi1iYWxsYXN0Xntjb21taXR9CisJdGhlbgorCQllY2hvIEFzc3VtaW5nIHN5bnRoZXRpYyByZXBvIGZyb20gbWFueS1maWxlcy5zaAorCQlnaXQgYnJhbmNoIGJyX2Jhc2UgICAgICAgICAgICBtYXN0ZXIKKwkJZ2l0IGJyYW5jaCBicl9iYWxsYXN0ICAgICAgICAgcDAwMDYtYmFsbGFzdF4KKwkJZ2l0IGJyYW5jaCBicl9iYWxsYXN0X2FsaWFzICAgcDAwMDYtYmFsbGFzdF4KKwkJZ2l0IGJyYW5jaCBicl9iYWxsYXN0X3BsdXNfMSAgcDAwMDYtYmFsbGFzdAorCQlnaXQgY29uZmlnIC0tbG9jYWwgY29yZS5zcGFyc2VjaGVja291dCAxCisJCWNhdCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1FT0YKKwkJLyoKKwkJIWJhbGxhc3QvKgorCQlFT0YKKwllbHNlCisJCWVjaG8gQXNzdW1pbmcgbm9uLXN5bnRoZXRpYyByZXBvLi4uCisJCWdpdCBicmFuY2ggYnJfYmFzZSAgICAgICAgICAgICQoZ2l0IHJldi1saXN0IEhFQUQgfCB0YWlsIC1uIDEpCisJCWdpdCBicmFuY2ggYnJfYmFsbGFzdCAgICAgICAgIEhFQUReIHx8IGVycm9yICJubyBhbmNlc3RvciBjb21taXQgZnJvbSBjdXJyZW50IGhlYWQiCisJCWdpdCBicmFuY2ggYnJfYmFsbGFzdF9hbGlhcyAgIEhFQUReCisJCWdpdCBicmFuY2ggYnJfYmFsbGFzdF9wbHVzXzEgIEhFQUQKKwlmaSAmJgorCWdpdCBjaGVja291dCAtcSBicl9iYWxsYXN0ICYmCisJbnJfZmlsZXM9JChnaXQgbHMtZmlsZXMgfCB3YyAtbCkKKycKKwordGVzdF9wZXJmICJyZWFkLXRyZWUgYnJfYmFzZSBicl9iYWxsYXN0ICgkbnJfZmlsZXMpIiAnCisJZ2l0IHJlYWQtdHJlZSAtbSBicl9iYXNlIGJyX2JhbGxhc3QgLW4KKycKKwordGVzdF9wZXJmICJzd2l0Y2ggYmV0d2VlbiBicl9iYXNlIGJyX2JhbGxhc3QgKCRucl9maWxlcykiICcKKwlnaXQgY2hlY2tvdXQgLXEgYnJfYmFzZSAmJgorCWdpdCBjaGVja291dCAtcSBicl9iYWxsYXN0CisnCisKK3Rlc3RfcGVyZiAic3dpdGNoIGJldHdlZW4gYnJfYmFsbGFzdCBicl9iYWxsYXN0X3BsdXNfMSAoJG5yX2ZpbGVzKSIgJworCWdpdCBjaGVja291dCAtcSBicl9iYWxsYXN0X3BsdXNfMSAmJgorCWdpdCBjaGVja291dCAtcSBicl9iYWxsYXN0CisnCisKK3Rlc3RfcGVyZiAic3dpdGNoIGJldHdlZW4gYWxpYXNlcyAoJG5yX2ZpbGVzKSIgJworCWdpdCBjaGVja291dCAtcSBicl9iYWxsYXN0X2FsaWFzICYmCisJZ2l0IGNoZWNrb3V0IC1xIGJyX2JhbGxhc3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDAwMDctd3JpdGUtY2FjaGUuc2ggYi90L3BlcmYvcDAwMDctd3JpdGUtY2FjaGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDk1OTUyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDAwNy13cml0ZS1jYWNoZS5zaApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgcGVyZm9ybWFuY2Ugb2Ygd3JpdGluZyB0aGUgaW5kZXgiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHJlcG8iICcKKwlpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcDAwMDYtYmFsbGFzdF57Y29tbWl0fQorCXRoZW4KKwkJZWNobyBBc3N1bWluZyBzeW50aGV0aWMgcmVwbyBmcm9tIG1hbnktZmlsZXMuc2gKKwkJZ2l0IGNvbmZpZyAtLWxvY2FsIGNvcmUuc3BhcnNlY2hlY2tvdXQgMQorCQljYXQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtRU9GCisJCS8qCisJCSFiYWxsYXN0LyoKKwkJRU9GCisJZWxzZQorCQllY2hvIEFzc3VtaW5nIG5vbi1zeW50aGV0aWMgcmVwby4uLgorCWZpICYmCisJbnJfZmlsZXM9JChnaXQgbHMtZmlsZXMgfCB3YyAtbCkKKycKKworY291bnQ9MwordGVzdF9wZXJmICJ3cml0ZV9sb2NrZWRfaW5kZXggJGNvdW50IHRpbWVzICgkbnJfZmlsZXMgZmlsZXMpIiAiCisJdGVzdC10b29sIHdyaXRlLWNhY2hlICRjb3VudAorIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wMDA3MS1zb3J0LnNoIGIvdC9wZXJmL3AwMDcxLXNvcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmU5MjRmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDA3MS1zb3J0LnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdCYXNpYyBzb3J0IHBlcmZvcm1hbmNlIHRlc3RzJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAiKi5bY2hdIiAiKi5zaCIgfAorCWN1dCAtZjIgLWQiICIgfAorCWdpdCBjYXQtZmlsZSAtLWJhdGNoID51bnNvcnRlZAorJworCit0ZXN0X3BlcmYgJ3NvcnQoMSknICcKKwlzb3J0IDx1bnNvcnRlZCA+ZXhwZWN0CisnCisKK3Rlc3RfcGVyZiAnc3RyaW5nX2xpc3Rfc29ydCgpJyAnCisJdGVzdC10b29sIHN0cmluZy1saXN0IHNvcnQgPHVuc29ydGVkID5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyaW5nX2xpc3Rfc29ydCgpIHNvcnRzIGxpa2Ugc29ydCgxKScgJworCXRlc3RfY21wX2JpbiBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMTAwLWdsb2JiaW5nLnNoIGIvdC9wZXJmL3AwMTAwLWdsb2JiaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRkMThhOWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDAxMDAtZ2xvYmJpbmcuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIHBhdGhvbG9naWNhbCBnbG9iYmluZyBwZXJmb3JtYW5jZQorCitTaG93cyBob3cgR2l0J3MgZ2xvYmJpbmcgcGVyZm9ybWFuY2UgcGVyZm9ybXMgd2hlbiBnaXZlbiB0aGUgc29ydCBvZgorcGF0aG9sb2dpY2FsIHBhdHRlcm5zIGRlc2NyaWJlZCBpbiBhdCBodHRwczovL3Jlc2VhcmNoLnN3dGNoLmNvbS9nbG9iCisiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X2dsb2JzX2JpZz0nMTAgMjUgNTAgNzUgMTAwJwordGVzdF9nbG9ic19zbWFsbD0nMSAyIDMgNCA1IDYnCisKK3Rlc3RfcGVyZl9mcmVzaF9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDEwMCkKKwlkbworCQlwcmludGYgImEiID4+cmVmbmFtZSAmJgorCQlmb3IgaiBpbiAkKHRlc3Rfc2VxIDEgJGkpCisJCWRvCisJCQlwcmludGYgImEqIiA+PnJlZmdsb2IuJGkKKwkJZG9uZSAmJgorCQllY2hvIGIgPj5yZWZnbG9iLiRpCisJZG9uZSAmJgorCXRlc3RfY29tbWl0IHRlc3QgJChjYXQgcmVmbmFtZSkudCAiIiAkKGNhdCByZWZuYW1lKS50CisnCisKK2ZvciBpIGluICR0ZXN0X2dsb2JzX3NtYWxsCitkbworCXRlc3RfcGVyZiAicmVmZ2xvYigoYSopXm5iKSBhZ2FpbnN0IHRhZyAoYV4xMDApLnQ7IG4gPSAkaSIgJworCQlnaXQgZm9yLWVhY2gtcmVmICJyZWZzL3RhZ3MvJChjYXQgcmVmZ2xvYi4nJGknKWIiCisJJworZG9uZQorCitmb3IgaSBpbiAkdGVzdF9nbG9ic19zbWFsbAorZG8KKwl0ZXN0X3BlcmYgImZpbGVnbG9iKChhKilebmIpIGFnYWluc3QgZmlsZSAoYV4xMDApLnQ7IG4gPSAkaSIgJworCQlnaXQgbHMtZmlsZXMgIiQoY2F0IHJlZmdsb2IuJyRpJyliIgorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDE0NTAtZnNjay5zaCBiL3QvcGVyZi9wMTQ1MC1mc2NrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlMWI4NDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDE0NTAtZnNjay5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBmc2NrIHBlcmZvcm1hbmNlJworCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KKwordGVzdF9wZXJmICdmc2NrJyAnCisJZ2l0IGZzY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDE0NTEtZnNjay1za2lwLWxpc3Quc2ggYi90L3BlcmYvcDE0NTEtZnNjay1za2lwLWxpc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzJiOTdkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMTQ1MS1mc2NrLXNraXAtbGlzdC5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBmc2NrIHNraXBMaXN0IHBlcmZvcm1hbmNlJworCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2ZyZXNoX3JlcG8KKworbj0xMDAwMDAwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwICRuIGJhZCBjb21taXRzIiAnCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxICRuKQorCWRvCisJCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL21hc3RlciIgJiYKKwkJZWNobyAiY29tbWl0dGVyIEMgPGNAZXhhbXBsZS5jb20+IDEyMzQ1Njc4OTAgKzAwMDAiICYmCisJCWVjaG8gImRhdGEgPDxFT0YiICYmCisJCWVjaG8gIiRpLlEuIiAmJgorCQllY2hvICJFT0YiCisJZG9uZSB8IHFfdG9fbnVsIHwgZ2l0IGZhc3QtaW1wb3J0CisnCisKK3NraXA9MAord2hpbGUgdGVzdCAkc2tpcCAtbGUgJG4KK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIHNraXBMaXN0IGZvciAkc2tpcCBiYWQgY29tbWl0cyIgJworCQlnaXQgbG9nIC0tZm9ybWF0PSVIIC0tbWF4LWNvdW50PSRza2lwIHwKKwkJc29ydCA+c2tpcGxpc3QKKwknCisKKwl0ZXN0X3BlcmYgImZzY2sgd2l0aCAkc2tpcCBza2lwcGVkIGJhZCBjb21taXRzIiAnCisJCWdpdCAtYyBmc2NrLnNraXBMaXN0PXNraXBsaXN0IGZzY2sKKwknCisKKwljYXNlICRza2lwIGluCisJMCkgc2tpcD0xIDs7CisJKikgc2tpcD0ke3NraXB9MCA7OworCWVzYWMKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDM0MDAtcmViYXNlLnNoIGIvdC9wZXJmL3AzNDAwLXJlYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMjAyYWFlCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AzNDAwLXJlYmFzZS5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgcmViYXNlIHBlcmZvcm1hbmNlJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmViYXNpbmcgb24gdG9wIG9mIGEgbG90IG9mIGNoYW5nZXMnICcKKwlnaXQgY2hlY2tvdXQgLWYgLUIgYmFzZSAmJgorCWdpdCBjaGVja291dCAtQiB0by1yZWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLUIgdXBzdHJlYW0gJiYKKwlmb3IgaSBpbiAkKHNlcSAxMDApCisJZG8KKwkJIyBzaW11bGF0ZSBodWdlIGRpZmZzCisJCWVjaG8gY2hhbmdlJGkgPnVucmVsYXRlZC1maWxlJGkgJiYKKwkJc2VxIDEwMDAgPj51bnJlbGF0ZWQtZmlsZSRpICYmCisJCWdpdCBhZGQgdW5yZWxhdGVkLWZpbGUkaSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBjb21taXQkaSB1bnJlbGF0ZWQtZmlsZSRpICYmCisJCWVjaG8gY2hhbmdlJGkgPnVucmVsYXRlZC1maWxlJGkgJiYKKwkJc2VxIDEwMDAgfCB0YWMgPj51bnJlbGF0ZWQtZmlsZSRpICYmCisJCWdpdCBhZGQgdW5yZWxhdGVkLWZpbGUkaSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBjb21taXQkaS1yZXZlcnNlIHVucmVsYXRlZC1maWxlJGkgfHwKKwkJYnJlYWsKKwlkb25lICYmCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCXRlc3RfY29tbWl0IG91ci1wYXRjaCBpbnRlcmVzdGluZy1maWxlCisnCisKK3Rlc3RfcGVyZiAncmViYXNlIG9uIHRvcCBvZiBhIGxvdCBvZiB1bnJlbGF0ZWQgY2hhbmdlcycgJworCWdpdCByZWJhc2UgLS1vbnRvIHVwc3RyZWFtIEhFQUReICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gYmFzZSBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZWJhc2luZyBtYW55IGNoYW5nZXMgd2l0aG91dCBzcGxpdC1pbmRleCcgJworCWdpdCBjb25maWcgY29yZS5zcGxpdEluZGV4IGZhbHNlICYmCisJZ2l0IGNoZWNrb3V0IC1CIHVwc3RyZWFtMiB0by1yZWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLUIgdG8tcmViYXNlMiB1cHN0cmVhbQorJworCit0ZXN0X3BlcmYgJ3JlYmFzZSBhIGxvdCBvZiB1bnJlbGF0ZWQgY2hhbmdlcyB3aXRob3V0IHNwbGl0LWluZGV4JyAnCisJZ2l0IHJlYmFzZSAtLW9udG8gdXBzdHJlYW0yIGJhc2UgJiYKKwlnaXQgcmViYXNlIC0tb250byBiYXNlIHVwc3RyZWFtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZWJhc2luZyBtYW55IGNoYW5nZXMgd2l0aCBzcGxpdC1pbmRleCcgJworCWdpdCBjb25maWcgY29yZS5zcGxpdEluZGV4IHRydWUKKycKKwordGVzdF9wZXJmICdyZWJhc2UgYSBsb3Qgb2YgdW5yZWxhdGVkIGNoYW5nZXMgd2l0aCBzcGxpdC1pbmRleCcgJworCWdpdCByZWJhc2UgLS1vbnRvIHVwc3RyZWFtMiBiYXNlICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gYmFzZSB1cHN0cmVhbTIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoIGIvdC9wZXJmL3AzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGY0N2RlCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgcmViYXNlIC1pIHBlcmZvcm1hbmNlJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKworIyBUaGlzIGNvbW1pdCBtZXJnZXMgYSBzdWZmaWNpZW50bHkgbG9uZyB0b3BpYyBicmFuY2ggZm9yIHJlYXNvbmFibGUKKyMgcGVyZm9ybWFuY2UgdGVzdGluZworYnJhbmNoX21lcmdlPWJhNTMxMmRhMTljNmZkYjZjNjc0N2Q0NzlmNTg5MzJhYWU2ZTkwMGNee2NvbW1pdH0KK2V4cG9ydCBicmFuY2hfbWVyZ2UKKworZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkYnJhbmNoX21lcmdlID4vZGV2L251bGwgMj4mMSB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGJlY2F1c2UgJGJyYW5jaF9tZXJnZSB3YXMgbm90IGZvdW5kJworCXRlc3RfZG9uZQorfQorCit3cml0ZV9zY3JpcHQgc3dhcC1maXJzdC10d28uc2ggPDxcRU9GCitjYXNlICIkMSIgaW4KKyovQ09NTUlUX0VESVRNU0cpCisJbXYgIiQxIiAiJDEiLmJhayAmJgorCXNlZCAtZSAnMXtoO2R9JyAtZSAyRyA8IiQxIi5iYWsgPiIkMSIKKwk7OworZXNhYworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmVkaXRvciAiXCIkUFdEIi9zd2FwLWZpcnN0LXR3by5zaFwiICYmCisJZ2l0IGNoZWNrb3V0IC1mICRicmFuY2hfbWVyZ2VeMgorJworCit0ZXN0X3BlcmYgJ3JlYmFzZSAtaScgJworCWdpdCByZWJhc2UgLWkgJGJyYW5jaF9tZXJnZV4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDQwMDAtZGlmZi1hbGdvcml0aG1zLnNoIGIvdC9wZXJmL3A0MDAwLWRpZmYtYWxnb3JpdGhtcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZTAwYzlkCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A0MDAwLWRpZmYtYWxnb3JpdGhtcy5zaApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgZGlmZiBnZW5lcmF0aW9uIHBlcmZvcm1hbmNlIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X3BlcmYgJ2xvZyAtMzAwMCAoYmFzZWxpbmUpJyAnCisJZ2l0IGxvZyAtMzAwMCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnbG9nIC0tcmF3IC0zMDAwICh0cmVlLW9ubHkpJyAnCisJZ2l0IGxvZyAtLXJhdyAtMzAwMCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnbG9nIC1wIC0zMDAwIChNeWVycyknICcKKwlnaXQgbG9nIC1wIC0zMDAwID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdsb2cgLXAgLTMwMDAgLS1oaXN0b2dyYW0nICcKKwlnaXQgbG9nIC1wIC0zMDAwIC0taGlzdG9ncmFtID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdsb2cgLXAgLTMwMDAgLS1wYXRpZW5jZScgJworCWdpdCBsb2cgLXAgLTMwMDAgLS1wYXRpZW5jZSA+L2Rldi9udWxsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A0MDAxLWRpZmYtbm8taW5kZXguc2ggYi90L3BlcmYvcDQwMDEtZGlmZi1uby1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ODNiZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A0MDAxLWRpZmYtbm8taW5kZXguc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3QgZGlmZiAtLW5vLWluZGV4IHBlcmZvcm1hbmNlIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKworZmlsZTE9JChnaXQgbHMtZmlsZXMgfCB0YWlsIC1uIDIgfCBoZWFkIC0xKQorZmlsZTI9JChnaXQgbHMtZmlsZXMgfCB0YWlsIC1uIDEgfCBoZWFkIC0xKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJlbXB0eSBmaWxlcywgc28gdGhleSB0YWtlIG5vIHRpbWUgdG8gZGlmZiIgIgorCWVjaG8gPiRmaWxlMSAmJgorCWVjaG8gPiRmaWxlMgorIgorCit0ZXN0X3BlcmYgImRpZmYgLS1uby1pbmRleCIgIgorCWdpdCBkaWZmIC0tbm8taW5kZXggJGZpbGUxICRmaWxlMiA+L2Rldi9udWxsCisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaCBiL3QvcGVyZi9wNDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2MyNmY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHRoZSBwZXJmb3JtYW5jZSBvZiB2YXJpb3VzIHByZXR0eSBmb3JtYXQgcGxhY2Vob2xkZXJzJworCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCitmb3IgZm9ybWF0IGluICVIICVoICVUICV0ICVQICVwICVoLSVoLSVoCitkbworCXRlc3RfcGVyZiAibG9nIHdpdGggJGZvcm1hdCIgIgorCQlnaXQgbG9nIC0tZm9ybWF0PVwiJGZvcm1hdFwiID4vZGV2L251bGwKKwkiCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A0MjExLWxpbmUtbG9nLnNoIGIvdC9wZXJmL3A0MjExLWxpbmUtbG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM5MmJjYzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDQyMTEtbGluZS1sb2cuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGxvZyAtTCBwZXJmb3JtYW5jZScKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKKyMgUGljayBhIGZpbGUgdG8gbG9nIHBzZXVkby1yYW5kb21seS4gIFRoZSBzb3J0IGtleSBpcyB0aGUgYmxvYiBoYXNoLAorIyBzbyBpdCBpcyBzdGFibGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWxlY3QgYSBmaWxlJyAnCisJZ2l0IGxzLXRyZWUgSEVBRCB8IGdyZXAgXjEwMDY0NCB8CisJc29ydCAtayAzIHwgaGVhZCAtMSB8IGN1dCAtZiAyID5maWxlbGlzdAorJworCitmaWxlPSQoY2F0IGZpbGVsaXN0KQorZXhwb3J0IGZpbGUKKwordGVzdF9wZXJmICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIChiYXNlbGluZSknICcKKwlnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIEhFQUQgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2dpdCBsb2cgLS1mb2xsb3cgKGJhc2VsaW5lIGZvciAtTSknICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLWZvbGxvdyAtLSAiJGZpbGUiID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdnaXQgbG9nIC1MIChyZW5hbWVzIG9mZiknICcKKwlnaXQgbG9nIC0tbm8tcmVuYW1lcyAtTCAxOiIkZmlsZSIgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2dpdCBsb2cgLUwgKHJlbmFtZXMgb24pJyAnCisJZ2l0IGxvZyAtTSAtTCAxOiIkZmlsZSIgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2dpdCBsb2cgLS1vbmVsaW5lIC0tcmF3IC0tcGFyZW50cycgJworCWdpdCBsb2cgLS1vbmVsaW5lIC0tcmF3IC0tcGFyZW50cyA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnZ2l0IGxvZyAtLW9uZWxpbmUgLS1yYXcgLS1wYXJlbnRzIC0xMDAwJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1yYXcgLS1wYXJlbnRzIC0xMDAwID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDQyMjAtbG9nLWdyZXAtZW5naW5lcy5zaCBiL3QvcGVyZi9wNDIyMC1sb2ctZ3JlcC1lbmdpbmVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiYzQ3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDQyMjAtbG9nLWdyZXAtZW5naW5lcy5zaApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iQ29tcGFyaXNvbiBvZiBnaXQtbG9nJ3MgLS1ncmVwIHJlZ2V4IGVuZ2luZXMKKworU2V0IEdJVF9QRVJGXzQyMjBfTE9HX09QVFMgaW4gdGhlIGVudmlyb25tZW50IHRvIHBhc3Mgb3B0aW9ucyB0bworZ2l0LWdyZXAuIE1ha2Ugc3VyZSB0byBpbmNsdWRlIGEgbGVhZGluZyBzcGFjZSwKK2UuZy4gR0lUX1BFUkZfNDIyMF9MT0dfT1BUUz0nIC1pJy4gU29tZSBvcHRpb25zIHRvIHRyeToKKworCS1pCisJLS1pbnZlcnQtZ3JlcAorCS1pIC0taW52ZXJ0LWdyZXAKKyIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK2ZvciBwYXR0ZXJuIGluIFwKKwknaG93LnRvJyBcCisJJ15ob3cgdG8nIFwKKwknW2hvd10gdG8nIFwKKwknXChlLnRbXiBdKlx8di5yeVwpIHJhcmUnIFwKKwknbVwow7pcfHVcKWx0LmJcKMOmXHx5XCl0ZScKK2RvCisJZm9yIGVuZ2luZSBpbiBiYXNpYyBleHRlbmRlZCBwZXJsCisJZG8KKwkJaWYgdGVzdCAkZW5naW5lICE9ICJiYXNpYyIKKwkJdGhlbgorCQkJIyBQb29yIG1hbidzIGJhc2ljIC0+IGV4dGVuZGVkIGNvbnZlcnRlci4KKwkJCXBhdHRlcm49JChlY2hvICRwYXR0ZXJuIHwgc2VkICdzL1xcLy9nJykKKwkJZmkKKwkJaWYgdGVzdCAkZW5naW5lID0gInBlcmwiICYmICEgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCXRoZW4KKwkJCXByZXJlcT0iUENSRSIKKwkJZWxzZQorCQkJcHJlcmVxPSIiCisJCWZpCisJCXRlc3RfcGVyZiAkcHJlcmVxICIkZW5naW5lIGxvZyRHSVRfUEVSRl80MjIwX0xPR19PUFRTIC0tZ3JlcD0nJHBhdHRlcm4nIiAiCisJCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLXByZXR0eT1mb3JtYXQ6JWgkR0lUX1BFUkZfNDIyMF9MT0dfT1BUUyAtLWdyZXA9JyRwYXR0ZXJuJyA+J291dC4kZW5naW5lJyB8fCA6CisJCSIKKwlkb25lCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhc3NlcnQgdGhhdCBhbGwgZW5naW5lcyBmb3VuZCB0aGUgc2FtZSBmb3IkR0lUX1BFUkZfNDIyMF9MT0dfT1BUUyAnJHBhdHRlcm4nIiAnCisJCXRlc3RfY21wIG91dC5iYXNpYyBvdXQuZXh0ZW5kZWQgJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCXRoZW4KKwkJCXRlc3RfY21wIG91dC5iYXNpYyBvdXQucGVybAorCQlmaQorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDQyMjEtbG9nLWdyZXAtZW5naW5lcy1maXhlZC5zaCBiL3QvcGVyZi9wNDIyMS1sb2ctZ3JlcC1lbmdpbmVzLWZpeGVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2MDk3MTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDQyMjEtbG9nLWdyZXAtZW5naW5lcy1maXhlZC5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iQ29tcGFyaXNvbiBvZiBnaXQtbG9nJ3MgLS1ncmVwIHJlZ2V4IGVuZ2luZXMgd2l0aCAtRgorCitTZXQgR0lUX1BFUkZfNDIyMV9MT0dfT1BUUyBpbiB0aGUgZW52aXJvbm1lbnQgdG8gcGFzcyBvcHRpb25zIHRvCitnaXQtZ3JlcC4gTWFrZSBzdXJlIHRvIGluY2x1ZGUgYSBsZWFkaW5nIHNwYWNlLAorZS5nLiBHSVRfUEVSRl80MjIxX0xPR19PUFRTPScgLWknLiBTb21lIG9wdGlvbnMgdG8gdHJ5OgorCisJLWkKKwktLWludmVydC1ncmVwCisJLWkgLS1pbnZlcnQtZ3JlcAorIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKworZm9yIHBhdHRlcm4gaW4gJ2ludCcgJ3VuY29tbW9uJyAnw6YnCitkbworCWZvciBlbmdpbmUgaW4gZml4ZWQgYmFzaWMgZXh0ZW5kZWQgcGVybAorCWRvCisJCWlmIHRlc3QgJGVuZ2luZSA9ICJwZXJsIiAmJiAhIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQl0aGVuCisJCQlwcmVyZXE9IlBDUkUiCisJCWVsc2UKKwkJCXByZXJlcT0iIgorCQlmaQorCQl0ZXN0X3BlcmYgJHByZXJlcSAiJGVuZ2luZSBsb2ckR0lUX1BFUkZfNDIyMV9MT0dfT1BUUyAtLWdyZXA9JyRwYXR0ZXJuJyIgIgorCQkJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9JGVuZ2luZSBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVoJEdJVF9QRVJGXzQyMjFfTE9HX09QVFMgLS1ncmVwPSckcGF0dGVybicgPidvdXQuJGVuZ2luZScgfHwgOgorCQkiCisJZG9uZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYXNzZXJ0IHRoYXQgYWxsIGVuZ2luZXMgZm91bmQgdGhlIHNhbWUgZm9yJEdJVF9QRVJGXzQyMjFfTE9HX09QVFMgJyRwYXR0ZXJuJyIgJworCQl0ZXN0X2NtcCBvdXQuZml4ZWQgb3V0LmJhc2ljICYmCisJCXRlc3RfY21wIG91dC5maXhlZCBvdXQuZXh0ZW5kZWQgJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCXRoZW4KKwkJCXRlc3RfY21wIG91dC5maXhlZCBvdXQucGVybAorCQlmaQorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDUzMDItcGFjay1pbmRleC5zaCBiL3QvcGVyZi9wNTMwMi1wYWNrLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE5YjNlMTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDUzMDItcGFjay1pbmRleC5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgaW5kZXgtcGFjayBwZXJmb3JtYW5jZSIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjaycgJworCWdpdCByZXBhY2sgLWFkICYmCisJUEFDSz0kKGxzIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjayB8IGhlYWQgLW4xKSAmJgorCXRlc3QgLWYgIiRQQUNLIiAmJgorCWV4cG9ydCBQQUNLCisnCisKK3Rlc3RfcGVyZiAnaW5kZXgtcGFjayAwIHRocmVhZHMnICcKKwlybSAtcmYgcmVwby5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVwby5naXQgJiYKKwlHSVRfRElSPXJlcG8uZ2l0IGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz0xIC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgMSB0aHJlYWQgJyAnCisJcm0gLXJmIHJlcG8uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8uZ2l0ICYmCisJR0lUX0RJUj1yZXBvLmdpdCBHSVRfRk9SQ0VfVEhSRUFEUz0xIGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz0xIC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgMiB0aHJlYWRzJyAnCisJcm0gLXJmIHJlcG8uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8uZ2l0ICYmCisJR0lUX0RJUj1yZXBvLmdpdCBnaXQgaW5kZXgtcGFjayAtLXRocmVhZHM9MiAtLXN0ZGluIDwgJFBBQ0sKKycKKwordGVzdF9wZXJmICdpbmRleC1wYWNrIDQgdGhyZWFkcycgJworCXJtIC1yZiByZXBvLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSByZXBvLmdpdCAmJgorCUdJVF9ESVI9cmVwby5naXQgZ2l0IGluZGV4LXBhY2sgLS10aHJlYWRzPTQgLS1zdGRpbiA8ICRQQUNLCisnCisKK3Rlc3RfcGVyZiAnaW5kZXgtcGFjayA4IHRocmVhZHMnICcKKwlybSAtcmYgcmVwby5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVwby5naXQgJiYKKwlHSVRfRElSPXJlcG8uZ2l0IGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz04IC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgZGVmYXVsdCBudW1iZXIgb2YgdGhyZWFkcycgJworCXJtIC1yZiByZXBvLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSByZXBvLmdpdCAmJgorCUdJVF9ESVI9cmVwby5naXQgZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiA8ICRQQUNLCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A1MzAzLW1hbnktcGFja3Muc2ggYi90L3BlcmYvcDUzMDMtbWFueS1wYWNrcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZWU3OTE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1MzAzLW1hbnktcGFja3Muc2gKQEAgLTAsMCArMSwxMDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwZXJmb3JtYW5jZSB3aXRoIGxhcmdlIG51bWJlcnMgb2YgcGFja3MnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KKworIyBBIHJlYWwgbWFueS1wYWNrIHNpdHVhdGlvbiB3b3VsZCBwcm9iYWJseSBjb21lIGZyb20gaGF2aW5nIGEgbG90IG9mIHB1c2hlcworIyBvdmVyIHRpbWUuIFdlIGRvbid0IGtub3cgaG93IGJpZyBlYWNoIHB1c2ggd291bGQgYmUsIGJ1dCB3ZSBjYW4gZmFrZSBpdCBieQorIyBqdXN0IHdhbGtpbmcgdGhlIGZpcnN0LXBhcmVudCBjaGFpbiBhbmQgaGF2aW5nIGV2ZXJ5IDUgY29tbWl0cyBiZSB0aGVpciBvd24KKyMgInB1c2giLiBUaGlzIGlzbid0IF9lbnRpcmVseV8gYWNjdXJhdGUsIGFzIHJlYWwgcHVzaGVzIHdvdWxkIGhhdmUgc29tZQorIyBkdXBsaWNhdGUgb2JqZWN0cyBkdWUgdG8gdGhpbi1wYWNrIGZpeGluZywgYnV0IGl0J3MgYSByZWFzb25hYmxlCisjIGFwcHJveGltYXRpb24uCisjCisjIEFuZCB0aGVuIGFsbCBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0cyBjYW4gZ28gaW4gYSBzaW5nbGUgcGFja2ZpbGUgdGhhdAorIyByZXByZXNlbnRzIHRoZSBzdGF0ZSBiZWZvcmUgYW55IG9mIHRob3NlIHB1c2hlcyAoYWN0dWFsbHksIHdlJ2xsIGdlbmVyYXRlCisjIHRoYXQgZmlyc3QgYmVjYXVzZSBpbiBzdWNoIGEgc2V0dXAgaXQgd291bGQgYmUgdGhlIG9sZGVzdCBwYWNrLCBhbmQgd2Ugc29ydAorIyB0aGUgcGFja3MgYnkgcmV2ZXJzZSBtdGltZSBpbnNpZGUgZ2l0KS4KK3JlcGFja19pbnRvX24gKCkgeworCXJtIC1yZiBzdGFnaW5nICYmCisJbWtkaXIgc3RhZ2luZyAmJgorCisJZ2l0IHJldi1saXN0IC0tZmlyc3QtcGFyZW50IEhFQUQgfAorCXNlZCAtbiAnMX41cCcgfAorCWhlYWQgLW4gIiQxIiB8CisJcGVybCAtZSAncHJpbnQgcmV2ZXJzZSA8PicgXAorCT5wdXNoZXMKKworCSMgY3JlYXRlIGJhc2UgcGFja2ZpbGUKKwloZWFkIC1uIDEgcHVzaGVzIHwKKwlnaXQgcGFjay1vYmplY3RzIC0tZGVsdGEtYmFzZS1vZmZzZXQgLS1yZXZzIHN0YWdpbmcvcGFjaworCisJIyBhbmQgdGhlbiBpbmNyZW1lbnRhbHMgYmV0d2VlbiBlYWNoIHBhaXIgb2YgY29tbWl0cworCWxhc3Q9ICYmCisJd2hpbGUgcmVhZCByZXYKKwlkbworCQlpZiB0ZXN0IC1uICIkbGFzdCI7IHRoZW4KKwkJCXsKKwkJCQllY2hvICIkcmV2IiAmJgorCQkJCWVjaG8gIl4kbGFzdCIKKwkJCX0gfAorCQkJZ2l0IHBhY2stb2JqZWN0cyAtLWRlbHRhLWJhc2Utb2Zmc2V0IC0tcmV2cyBcCisJCQkJc3RhZ2luZy9wYWNrIHx8IHJldHVybiAxCisJCWZpCisJCWxhc3Q9JHJldgorCWRvbmUgPHB1c2hlcyAmJgorCisJIyBhbmQgaW5zdGFsbCB0aGUgd2hvbGUgdGhpbmcKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisJbXYgc3RhZ2luZy8qIC5naXQvb2JqZWN0cy9wYWNrLworfQorCisjIFByZXRlbmQgd2UganVzdCBoYXZlIGEgc2luZ2xlIGJyYW5jaCBhbmQgbm8gcmVmbG9ncywgYW5kIHRoYXQgZXZlcnl0aGluZyBpcworIyBpbiBvYmplY3RzL3BhY2s7IHRoYXQgbWFrZXMgb3VyIGZha2UgcGFjay1idWlsZGluZyB2aWEgcmVwYWNrX2ludG9fbigpCisjIG11Y2ggc2ltcGxlci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsaWZ5IHJlYWNoYWJpbGl0eScgJworCXRpcD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSJvcHRpb24gbm8tZGVyZWYlMGFkZWxldGUgJShyZWZuYW1lKSIgfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gJiYKKwlybSAtcmYgLmdpdC9sb2dzICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJHRpcCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCByZXBhY2sgLWFkCisnCisKK2ZvciBucl9wYWNrcyBpbiAxIDUwIDEwMDAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlICRucl9wYWNrcy1wYWNrIHNjZW5hcmlvIiAnCisJCXJlcGFja19pbnRvX24gJG5yX3BhY2tzCisJJworCisJdGVzdF9wZXJmICJyZXYtbGlzdCAoJG5yX3BhY2tzKSIgJworCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tYWxsID4vZGV2L251bGwKKwknCisKKwkjIFRoaXMgc2ltdWxhdGVzIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSByZXBhY2ssIHdoaWNoIGlzIHRoZQorCSMgYWN0dWFsIHBhY2sgZ2VuZXJhdGlvbiwgd2l0aG91dCBzbXVkZ2luZyB0aGUgb24tZGlzayBzZXR1cAorCSMgYmV0d2VlbiB0cmlhbHMuCisJdGVzdF9wZXJmICJyZXBhY2sgKCRucl9wYWNrcykiICcKKwkJR0lUX1RFU1RfRlVMTF9JTl9QQUNLX0FSUkFZPTEgXAorCQlnaXQgcGFjay1vYmplY3RzIC0ta2VlcC10cnVlLXBhcmVudHMgXAorCQkgIC0taG9ub3ItcGFjay1rZWVwIC0tbm9uLWVtcHR5IC0tYWxsIFwKKwkJICAtLXJlZmxvZyAtLWluZGV4ZWQtb2JqZWN0cyAtLWRlbHRhLWJhc2Utb2Zmc2V0IFwKKwkJICAtLXN0ZG91dCA8L2Rldi9udWxsID4vZGV2L251bGwKKwknCitkb25lCisKKyMgTWVhc3VyZSBwYWNrIGxvYWRpbmcgd2l0aCAxMCwwMDAgcGFja3MuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZW5lcmF0ZSBsb3RzIG9mIHBhY2tzJyAnCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxMDAwMCk7IGRvCisJCWVjaG8gImJsb2IiCisJCWVjaG8gImRhdGEgPDxFT0YiCisJCWVjaG8gImJsb2IgJGkiCisJCWVjaG8gIkVPRiIKKwkJZWNobyAiY2hlY2twb2ludCIKKwlkb25lIHwKKwlnaXQgLWMgZmFzdGltcG9ydC51bnBhY2tMaW1pdD0wIGZhc3QtaW1wb3J0CisnCisKKyMgVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIGV2YWx1YXRlIGxvYWQgdGltZSBmb3IgYSBsYXJnZSBudW1iZXIKKyMgb2YgcGFja3Mgd2hpbGUgZG9pbmcgYXMgbGl0dGxlIG90aGVyIHdvcmsgYXMgcG9zc2libGUuCit0ZXN0X3BlcmYgImxvYWQgMTAsMDAwIHBhY2tzIiAnCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiSEVBRF57Y29tbWl0fSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDUzMDQtcHJ1bmUuc2ggYi90L3BlcmYvcDUzMDQtcHJ1bmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNiYWVkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNTMwNC1wcnVuZS5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyZm9ybWFuY2UgdGVzdHMgb2YgcHJ1bmUnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmVhY2hhYmxlIGxvb3NlIG9iamVjdHMnICcKKwlnaXQgcmVwYWNrIC1hZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0cycgJworCWdpdCBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maXJtIHRoZXJlIGFyZSBubyBsb29zZSBvYmplY3RzJyAnCisJZ2l0IGNvdW50LW9iamVjdHMgfCBncmVwIF4wCisnCisKK3Rlc3RfcGVyZiAncHJ1bmUgd2l0aCBubyBvYmplY3RzJyAnCisJZ2l0IHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayB3aXRoIGJpdG1hcHMnICcKKwlnaXQgcmVwYWNrIC1hZGIKKycKKworIyBXZSBoYXZlIHRvIGNyZWF0ZSB0aGUgb2JqZWN0IGluIGVhY2ggdHJpYWwgcnVuLCBzaW5jZSBvdGhlcndpc2UKKyMgcnVucyBhZnRlciB0aGUgZmlyc3Qgc2VlIG5vIG9iamVjdCBhbmQganVzdCBza2lwIHRoZSB0cmF2ZXJzYWwgZW50aXJlbHkhCit0ZXN0X3BlcmYgJ3BydW5lIHdpdGggYml0bWFwcycgJworCWVjaG8gInByb2JhYmx5IG5vdCBwcmVzZW50IGluIHJlcG8iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gJiYKKwlnaXQgcHJ1bmUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDUzMTAtcGFjay1iaXRtYXBzLnNoIGIvdC9wZXJmL3A1MzEwLXBhY2stYml0bWFwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NzQzZjRmCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1MzEwLXBhY2stYml0bWFwcy5zaApAQCAtMCwwICsxLDkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgcGFjayBwZXJmb3JtYW5jZSB1c2luZyBiaXRtYXBzJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCisKKyMgbm90ZSB0aGF0IHdlIGRvIGV2ZXJ5dGhpbmcgdGhyb3VnaCBjb25maWcsCisjIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBjb21wYXJlIGJpdG1hcC1hd2FyZQorIyBnaXQgdmVyc3VzIG5vbi1iaXRtYXAgZ2l0CisjCisjIFdlIGludGVudGlvbmFsbHkgdXNlIHRoZSBkZXByZWNhdGVkIHBhY2sud3JpdGViaXRtYXBzCisjIGNvbmZpZyBzbyB0aGF0IHdlIGNhbiB0ZXN0IGFnYWluc3Qgb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYml0bWFwIGNvbmZpZycgJworCWdpdCBjb25maWcgcGFjay53cml0ZWJpdG1hcHMgdHJ1ZQorJworCit0ZXN0X3BlcmYgJ3JlcGFjayB0byBkaXNrJyAnCisJZ2l0IHJlcGFjayAtYWQKKycKKwordGVzdF9wZXJmICdzaW11bGF0ZWQgY2xvbmUnICcKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tYWxsIDwvZGV2L251bGwgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3NpbXVsYXRlZCBmZXRjaCcgJworCWhhdmU9JChnaXQgcmV2LWxpc3QgSEVBRH4xMDAgLTEpICYmCisJeworCQllY2hvIEhFQUQgJiYKKwkJZWNobyBeJGhhdmUKKwl9IHwgZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3BhY2sgdG8gZmlsZScgJworCWdpdCBwYWNrLW9iamVjdHMgLS1hbGwgcGFjazEgPC9kZXYvbnVsbCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncGFjayB0byBmaWxlIChiaXRtYXApJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXVzZS1iaXRtYXAtaW5kZXggLS1hbGwgcGFjazFiIDwvZGV2L251bGwgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0IChjb21taXRzKScgJworCWdpdCByZXYtbGlzdCAtLWFsbCAtLXVzZS1iaXRtYXAtaW5kZXggPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0IChvYmplY3RzKScgJworCWdpdCByZXYtbGlzdCAtLWFsbCAtLXVzZS1iaXRtYXAtaW5kZXggLS1vYmplY3RzID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdyZXYtbGlzdCBjb3VudCB3aXRoIGJsb2I6bm9uZScgJworCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggLS1jb3VudCAtLW9iamVjdHMgLS1hbGwgXAorCQktLWZpbHRlcj1ibG9iOm5vbmUgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0IGNvdW50IHdpdGggYmxvYjpsaW1pdD0xaycgJworCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggLS1jb3VudCAtLW9iamVjdHMgLS1hbGwgXAorCQktLWZpbHRlcj1ibG9iOmxpbWl0PTFrID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdzaW11bGF0ZWQgcGFydGlhbCBjbG9uZScgJworCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1hbGwgLS1maWx0ZXI9YmxvYjpub25lIDwvZGV2L251bGwgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFydGlhbCBiaXRtYXAgc3RhdGUnICcKKwkjIHBpY2sgYSBjb21taXQgdG8gcmVwcmVzZW50IHRoZSByZXBvIHRpcCBpbiB0aGUgcGFzdAorCWN1dG9mZj0kKGdpdCByZXYtbGlzdCBIRUFEfjEwMCAtMSkgJiYKKwlvcmlnX3RpcD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCSMgbm93IGtpbGwgb2ZmIGFsbCBvZiB0aGUgcmVmcyBhbmQgcHJldGVuZCB3ZSBoYWQKKwkjIGp1c3QgdGhlIG9uZSB0aXAKKwlybSAtcmYgLmdpdC9sb2dzIC5naXQvcmVmcy8qIC5naXQvcGFja2VkLXJlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRjdXRvZmYgJiYKKworCSMgYW5kIHRoZW4gcmVwYWNrLCB3aGljaCB3aWxsIGxlYXZlIHVzIHdpdGggYSBuaWNlCisJIyBiaWcgYml0bWFwIHBhY2sgb2YgdGhlICJvbGQiIGhpc3RvcnksIGFuZCBhbGwgb2YKKwkjIHRoZSBuZXcgaGlzdG9yeSB3aWxsIGJlIGxvb3NlLCBhcyBpZiBpdCBoYWQgYmVlbiBwdXNoZWQKKwkjIHVwIGluY3JlbWVudGFsbHkgYW5kIGV4cGxvZGVkIHZpYSB1bnBhY2stb2JqZWN0cworCWdpdCByZXBhY2sgLUFkICYmCisKKwkjIGFuZCBub3cgcmVzdG9yZSBvdXIgb3JpZ2luYWwgdGlwLCBhcyBpZiB0aGUgcHVzaGVzCisJIyBoYWQgaGFwcGVuZWQKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRvcmlnX3RpcAorJworCit0ZXN0X3BlcmYgJ2Nsb25lIChwYXJ0aWFsIGJpdG1hcCknICcKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tYWxsIDwvZGV2L251bGwgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3BhY2sgdG8gZmlsZSAocGFydGlhbCBiaXRtYXApJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXVzZS1iaXRtYXAtaW5kZXggLS1hbGwgcGFjazJiIDwvZGV2L251bGwgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNTMxMS1wYWNrLWJpdG1hcHMtZmV0Y2guc2ggYi90L3BlcmYvcDUzMTEtcGFjay1iaXRtYXBzLWZldGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3YzNmZDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDUzMTEtcGFjay1iaXRtYXBzLWZldGNoLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwZXJmb3JtYW5jZSBvZiBmZXRjaGVzIGZyb20gYml0bWFwcGVkIHBhY2tzJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGJpdG1hcHBlZCBzZXJ2ZXIgcmVwbycgJworCWdpdCBjb25maWcgcGFjay53cml0ZWJpdG1hcHMgdHJ1ZSAmJgorCWdpdCByZXBhY2sgLWFkCisnCisKKyMgc2ltdWxhdGUgYSBmZXRjaCBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IGxhc3QgZmV0Y2hlZCBOIGRheXMgYWdvLCBmb3IKKyMgdmFyaW91cyB2YWx1ZXMgb2YgTi4gV2UgZG8gc28gYnkgZm9sbG93aW5nIHRoZSBmaXJzdC1wYXJlbnQgY2hhaW4sCisjIGFuZCBhc3N1bWUgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBjaGFpbiB0aGF0IGlzIE4gZGF5cyBvbGRlciB0aGFuIHRoZSBjdXJyZW50CisjIEhFQUQgaXMgd2hlcmUgdGhlIEhFQUQgd291bGQgaGF2ZSBiZWVuIHRoZW4uCitmb3IgZGF5cyBpbiAxIDIgNCA4IDE2IDMyIDY0IDEyODsgZG8KKwl0aXRsZT0kKHByaW50ZiAnJTEwcycgIigkZGF5cyBkYXlzKSIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgcmV2cyBmcm9tICRkYXlzIGRheXMgYWdvIiAnCisJCW5vdz0kKGdpdCBsb2cgLTEgLS1mb3JtYXQ9JWN0IEhFQUQpICYmCisJCXRoZW49JCgoJG5vdyAtICgkZGF5cyAqIDg2NDAwKSkpICYmCisJCXRpcD0kKGdpdCByZXYtbGlzdCAtMSAtLWZpcnN0LXBhcmVudCAtLXVudGlsPSR0aGVuIEhFQUQpICYmCisJCXsKKwkJCWVjaG8gSEVBRCAmJgorCQkJZWNobyBeJHRpcAorCQl9ID5yZXZzCisJJworCisJdGVzdF9wZXJmICJzZXJ2ZXIgJHRpdGxlIiAnCisJCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1yZXZzIFwKKwkJCQkgLS10aGluIC0tZGVsdGEtYmFzZS1vZmZzZXQgXAorCQkJCSA8cmV2cyA+dG1wLnBhY2sKKwknCisKKwl0ZXN0X3NpemUgInNpemUgICAkdGl0bGUiICcKKwkJd2MgLWMgPHRtcC5wYWNrCisJJworCisJdGVzdF9wZXJmICJjbGllbnQgJHRpdGxlIiAnCisJCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gLS1maXgtdGhpbiA8dG1wLnBhY2sKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A1NTUwLWZldGNoLXRhZ3Muc2ggYi90L3BlcmYvcDU1NTAtZmV0Y2gtdGFncy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMGUwZTAxCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A1NTUwLWZldGNoLXRhZ3Muc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BlcmZvcm1hbmNlIG9mIHRhZy1mb2xsb3dpbmcgd2l0aCBtYW55IHRhZ3MKKworVGhpcyB0ZXN0cyBhIGZhaXJseSBwYXRob2xvZ2ljYWwgY2FzZSwgc28gcmF0aGVyIHRoYW4gcmVseSBvbiBhIHJlYWwtd29ybGQKK2Nhc2UsIHdlIHdpbGwgY29uc3RydWN0IG91ciBvd24gcmVwb3NpdG9yeS4gVGhlIHNpdHVhdGlvbiBpcyByb3VnaGx5IGFzCitmb2xsb3dzLgorCitUaGUgcGFyZW50IHJlcG9zaXRvcnkgaGFzIGEgbGFyZ2UgbnVtYmVyIG9mIHRhZ3Mgd2hpY2ggYXJlIGRpc2Nvbm5lY3RlZCBmcm9tCit0aGUgcmVzdCBvZiBoaXN0b3J5LiBUaGF0IG1ha2VzIHRoZW0gY2FuZGlkYXRlcyBmb3IgdGFnLWZvbGxvd2luZywgYnV0IHdlIG5ldmVyCithY3R1YWxseSBncmFiIHRoZW0gKGFuZCB0aHVzIHRoZXkgd2lsbCBpbXBhY3QgZWFjaCBzdWJzZXF1ZW50IGZldGNoKS4KKworVGhlIGNoaWxkIHJlcG9zaXRvcnkgaXMgYSBjbG9uZSBvZiBwYXJlbnQsIHdpdGhvdXQgdGhlIHRhZ3MsIGFuZCBpcyBhdCBsZWFzdAorb25lIGNvbW1pdCBiZWhpbmQgdGhlIHBhcmVudCAobWVhbmluZyB0aGF0IHdlIHdpbGwgZmV0Y2ggb25lIG9iamVjdCBhbmQgdGhlbgorZXhhbWluZSB0aGUgdGFncyB0byBzZWUgaWYgdGhleSBuZWVkIGZvbGxvd2VkKS4gRnVydGhlcm1vcmUsIGl0IGhhcyBhIGxhcmdlCitudW1iZXIgb2YgcGFja3MuCisKK1RoZSBleGFjdCB2YWx1ZXMgb2YgImxhcmdlIiBoZXJlIGFyZSBzb21ld2hhdCBhcmJpdHJhcnk7IEkgcGlja2VkIHZhbHVlcyB0aGF0CitzdGFydCB0byBzaG93IGEgbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBwcm9ibGVtIG9uIG15IG1hY2hpbmUsIGJ1dCB3aXRob3V0Cit0YWtpbmcgdG9vIGxvbmcgdG8gc2V0IHVwIGFuZCBydW4gdGhlIHRlc3RzLgorJworLiAuL3BlcmYtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvcGVyZi9saWItcGFjay5zaCIKKworIyBtYWtlIGEgbG9uZyBub25zZW5zZSBoaXN0b3J5IG9uIGJyYW5jaCAkMSwgY29uc2lzdGluZyBvZiAkMiBjb21taXRzLCBlYWNoCisjIHdpdGggYSB1bmlxdWUgZmlsZSBwb2ludGluZyB0byB0aGUgYmxvYiBhdCAkMi4KK2NyZWF0ZV9oaXN0b3J5ICgpIHsKKwlwZXJsIC1sZSAnCisJCW15ICgkYnJhbmNoLCAkbiwgJGJsb2IpID0gQEFSR1Y7CisJCWZvciAoMS4uJG4pIHsKKwkJCXByaW50ICJjb21taXQgcmVmcy9oZWFkcy8kYnJhbmNoIjsKKwkJCXByaW50ICJjb21taXR0ZXIgbm9ib2R5IDxub2JvZHlAZXhhbXBsZS5jb20+IG5vdyI7CisJCQlwcmludCAiZGF0YSA0IjsKKwkJCXByaW50ICJmb28iOworCQkJcHJpbnQgIk0gMTAwNjQ0ICRibG9iICRfIjsKKwkJfQorCScgIiRAIiB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tZGF0ZS1mb3JtYXQ9bm93Cit9CisKKyMgbWFrZSBhIHNlcmllcyBvZiB0YWdzLCBvbmUgcGVyIGNvbW1pdCBpbiB0aGUgcmV2aXNpb24gcmFuZ2UgZ2l2ZW4gYnkgJEAKK2NyZWF0ZV90YWdzICgpIHsKKwlnaXQgcmV2LWxpc3QgIiRAIiB8CisJcGVybCAtbG5lICdwcmludCAiY3JlYXRlIHJlZnMvdGFncy8kLiAkXyInIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYXJlbnQgYW5kIGNoaWxkJyAnCisJZ2l0IGluaXQgcGFyZW50ICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBiYXNlICYmCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZCAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHJpZ2dlci1mZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3B1bGF0ZSBwYXJlbnQgdGFncycgJworCSgKKwkJY2QgcGFyZW50ICYmCisJCWJsb2I9JChlY2hvIGNvbnRlbnQgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJY3JlYXRlX2hpc3RvcnkgY3J1ZnQgMzAwMCAkYmxvYiAmJgorCQljcmVhdGVfdGFncyBjcnVmdCAmJgorCQlnaXQgYnJhbmNoIC1EIGNydWZ0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY2hpbGQgcGFja3MnICcKKwkoCisJCWNkIGNoaWxkICYmCisJCXNldHVwX21hbnlfcGFja3MKKwkpCisnCisKK3Rlc3RfcGVyZiAnZmV0Y2gnICcKKwkjIG1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZmV0Y2ggb24gZWFjaCBpdGVyYXRpb24KKwlnaXQgLUMgY2hpbGQgdXBkYXRlLXJlZiAtZCByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCWdpdCAtQyBjaGlsZCBmZXRjaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNTU1MS1mZXRjaC1yZXNjYW4uc2ggYi90L3BlcmYvcDU1NTEtZmV0Y2gtcmVzY2FuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI5OWRjMjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDU1NTEtZmV0Y2gtcmVzY2FuLnNoCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaCBwZXJmb3JtYW5jZSB3aXRoIG1hbnkgcGFja3MKKworSXQgaXMgY29tbW9uIGZvciBmZXRjaCB0byBjb25zaWRlciBvYmplY3RzIHRoYXQgd2UgbWlnaHQgbm90IGhhdmUsIGFuZCBpdCBpcyBhbgorZWFzeSBtaXN0YWtlIGZvciB0aGUgY29kZSB0byB1c2UgYSBmdW5jdGlvbiBsaWtlIGBwYXJzZV9vYmplY3RgIHRoYXQgbWlnaHQKK2dpdmUgdGhlIGNvcnJlY3QgX2Fuc3dlcl8gb24gc3VjaCBhbiBvYmplY3QsIGJ1dCBkbyBzbyBzbG93bHkgKGR1ZSB0bworcmUtc2Nhbm5pbmcgdGhlIHBhY2sgZGlyZWN0b3J5IGZvciBsb29rdXAgZmFpbHVyZXMpLgorCitUaGUgcmVzdWx0aW5nIHBlcmZvcm1hbmNlIGRyb3AgY2FuIGJlIGhhcmQgdG8gbm90aWNlIGluIGEgcmVhbCByZXBvc2l0b3J5LCBidXQKK2JlY29tZXMgcXVpdGUgbGFyZ2UgaW4gYSByZXBvc2l0b3J5IHdpdGggYSBsYXJnZSBudW1iZXIgb2YgcGFja3MuIFNvIHRoaXMKK3Rlc3QgY3JlYXRlcyBhIG1vcmUgcGF0aG9sb2dpY2FsIGNhc2UsIHNpbmNlIGFueSBtaXN0YWtlcyB3b3VsZCBwcm9kdWNlIGEgbW9yZQorbm90aWNlYWJsZSBzbG93ZG93bi4KKycKKy4gLi9wZXJmLWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9wZXJmL2xpYi1wYWNrLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYXJlbnQgYW5kIGNoaWxkJyAnCisJZ2l0IGluaXQgcGFyZW50ICYmCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZWZzIGluIHRoZSBwYXJlbnQnICcKKwkoCisJCWNkIHBhcmVudCAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vICYmCisJCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXRlc3Rfc2VxIDEwMDAgfAorCQlzZWQgInMsLiosdXBkYXRlIHJlZnMvaGVhZHMvJiAkaGVhZCwiIHwKKwkJJE1PREVSTl9HSVQgdXBkYXRlLXJlZiAtLXN0ZGluCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbWFueSBwYWNrcyBpbiB0aGUgY2hpbGQnICcKKwkoCisJCWNkIGNoaWxkICYmCisJCXNldHVwX21hbnlfcGFja3MKKwkpCisnCisKK3Rlc3RfcGVyZiAnZmV0Y2gnICcKKwkjIHN0YXJ0IGF0IHRoZSBzYW1lIHN0YXRlIGZvciBlYWNoIGl0ZXJhdGlvbgorCW9iaj0kKCRNT0RFUk5fR0lUIC1DIHBhcmVudCByZXYtcGFyc2UgSEVBRCkgJiYKKwkoCisJCWNkIGNoaWxkICYmCisJCSRNT0RFUk5fR0lUIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iZGVsZXRlICUocmVmbmFtZSkiIHJlZnMvcmVtb3RlcyB8CisJCSRNT0RFUk5fR0lUIHVwZGF0ZS1yZWYgLS1zdGRpbiAmJgorCQlybSAtdmYgLmdpdC9vYmplY3RzLyQoZWNobyAkb2JqIHwgc2VkICJzfF4uLnwmL3wiKSAmJgorCisJCWdpdCBmZXRjaAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDU2MDAtcGFydGlhbC1jbG9uZS5zaCBiL3QvcGVyZi9wNTYwMC1wYXJ0aWFsLWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlMDRiZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDU2MDAtcGFydGlhbC1jbG9uZS5zaApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyZm9ybWFuY2Ugb2YgcGFydGlhbCBjbG9uZXMnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgc2VydmVyLXNpZGUgY29uZmlnJyAnCisJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93RmlsdGVyIHRydWUgJiYKKwlnaXQgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dBbnlTSEExSW5XYW50IHRydWUKKycKKwordGVzdF9wZXJmICdjbG9uZSB3aXRob3V0IGJsb2JzJyAnCisJcm0gLXJmIGJhcmUuZ2l0ICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIC0tZmlsdGVyPWJsb2I6bm9uZSAuIGJhcmUuZ2l0CisnCisKK3Rlc3RfcGVyZiAnY2hlY2tvdXQgb2YgcmVzdWx0JyAnCisJcm0gLXJmIHdvcmt0cmVlICYmCisJbWtkaXIgLXAgd29ya3RyZWUvLmdpdCAmJgorCXRhciAtQyBiYXJlLmdpdCAtY2YgLSAuIHwgdGFyIC1DIHdvcmt0cmVlLy5naXQgLXhmIC0gJiYKKwlnaXQgLUMgd29ya3RyZWUgY29uZmlnIGNvcmUuYmFyZSBmYWxzZSAmJgorCWdpdCAtQyB3b3JrdHJlZSBjaGVja291dCAtZgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNTYwMS1jbG9uZS1yZWZlcmVuY2Uuc2ggYi90L3BlcmYvcDU2MDEtY2xvbmUtcmVmZXJlbmNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4ZmVkNjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDU2MDEtY2xvbmUtcmVmZXJlbmNlLnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGVlZCBvZiBjbG9uZSAtLXJlZmVyZW5jZScKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzaGFyZWFibGUgcmVwb3NpdG9yeScgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBzaGFyZWQuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkdmFuY2UgYmFzZSByZXBvc2l0b3J5JyAnCisJIyBEbyBub3QgdXNlIHRlc3RfY29tbWl0IGhlcmU7IGl0cyB0ZXN0X3RpY2sgd2lsbAorCSMgdXNlIHNvbWUgYW5jaWVudCBoYXJkLWNvZGVkIGRhdGUuIFRoZSByZXN1bHRpbmcgY2xvY2sKKwkjIHNrZXcgd2lsbCBjYXVzZSBwYWNrLW9iamVjdHMgdG8gdHJhdmVyc2UgaW4gYSB2ZXJ5CisJIyBzdWItb3B0aW1hbCBvcmRlciwgc2tld2luZyB0aGUgcmVzdWx0cy4KKwllY2hvIGNvbnRlbnQgPm5ldy1maWxlLXRoYXQtZG9lcy1ub3QtZXhpc3QgJiYKKwlnaXQgYWRkIG5ldy1maWxlLXRoYXQtZG9lcy1ub3QtZXhpc3QgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgY29tbWl0IgorJworCit0ZXN0X3BlcmYgJ2Nsb25lIC0tcmVmZXJlbmNlJyAnCisJcm0gLXJmIGRzdC5naXQgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgLS1yZWZlcmVuY2Ugc2hhcmVkLmdpdCAuIGRzdC5naXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDcwMDAtZmlsdGVyLWJyYW5jaC5zaCBiL3QvcGVyZi9wNzAwMC1maWx0ZXItYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwMjk1ODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDcwMDAtZmlsdGVyLWJyYW5jaC5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyZm9ybWFuY2Ugb2YgZmlsdGVyLWJyYW5jaCcKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hcmsgYmFzZXMgZm9yIHRlc3RzJyAnCisJZ2l0IHRhZyAtZiB0aXAgJiYKKwlnaXQgdGFnIC1mIGJhc2UgSEVBRH4xMDAKKycKKwordGVzdF9wZXJmICdub29wIGZpbHRlcicgJworCWdpdCBjaGVja291dCAtLWRldGFjaCB0aXAgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiBiYXNlLi5IRUFECisnCisKK3Rlc3RfcGVyZiAnbm9vcCBwcnVuZS1lbXB0eScgJworCWdpdCBjaGVja291dCAtLWRldGFjaCB0aXAgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXBydW5lLWVtcHR5IGJhc2UuLkhFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDczMDAtY2xlYW4uc2ggYi90L3BlcmYvcDczMDAtY2xlYW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2MxODg4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNzMwMC1jbGVhbi5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdCBnaXQtY2xlYW4gcGVyZm9ybWFuY2UiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCBtYW55IHN1YiBkaXJzJyAnCisJcm0gLXJmIDUwMF9zdWJfZGlycyAxMDAwMDBfc3ViX2RpcnMgY2xlYW5fdGVzdF9kaXIgJiYKKwlta2RpciA1MDBfc3ViX2RpcnMgMTAwMDAwX3N1Yl9kaXJzIGNsZWFuX3Rlc3RfZGlyICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDUwMCkKKwlkbworCQlta2RpciA1MDBfc3ViX2RpcnMvZGlyJGkgfHwgcmV0dXJuICQ/CisJZG9uZSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAyMDApCisJZG8KKwkJY3AgLXIgNTAwX3N1Yl9kaXJzIDEwMDAwMF9zdWJfZGlycy9kaXIkaSB8fCByZXR1cm4gJD8KKwlkb25lCisnCisKK3Rlc3RfcGVyZiAnY2xlYW4gbWFueSB1bnRyYWNrZWQgc3ViIGRpcnMsIGNoZWNrIGZvciBuZXN0ZWQgZ2l0JyAnCisJZ2l0IGNsZWFuIC1uIC1xIC1mIC1kIDEwMDAwMF9zdWJfZGlycy8KKycKKwordGVzdF9wZXJmICdjbGVhbiBtYW55IHVudHJhY2tlZCBzdWIgZGlycywgaWdub3JlIG5lc3RlZCBnaXQnICcKKwlnaXQgY2xlYW4gLW4gLXEgLWYgLWYgLWQgMTAwMDAwX3N1Yl9kaXJzLworJworCit0ZXN0X3BlcmYgJ2xzLWZpbGVzIC1vJyAnCisJZ2l0IGxzLWZpbGVzIC1vCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A3NTE5LWZzbW9uaXRvci5zaCBiL3QvcGVyZi9wNzUxOS1mc21vbml0b3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGVmN2VjZAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNzUxOS1mc21vbml0b3Iuc2gKQEAgLTAsMCArMSwxODMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0IGNvcmUuZnNtb25pdG9yIgorCisuIC4vcGVyZi1saWIuc2gKKworIworIyBQZXJmb3JtYW5jZSB0ZXN0IGZvciB0aGUgZnNtb25pdG9yIGZlYXR1cmUgd2hpY2ggZW5hYmxlcyBnaXQgdG8gdGFsayB0byBhCisjIGZpbGUgc3lzdGVtIGNoYW5nZSBtb25pdG9yIGFuZCBhdm9pZCBoYXZpbmcgdG8gc2NhbiB0aGUgd29ya2luZyBkaXJlY3RvcnkKKyMgZm9yIG5ldyBvciBtb2RpZmllZCBmaWxlcy4KKyMKKyMgQnkgZGVmYXVsdCwgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgd2lsbCB1dGlsaXplIHRoZSBXYXRjaG1hbiBmaWxlIHN5c3RlbQorIyBtb25pdG9yIGlmIGl0IGlzIGluc3RhbGxlZC4gIElmIFdhdGNobWFuIGlzIG5vdCBpbnN0YWxsZWQsIGl0IHdpbGwgdXNlIGEKKyMgZHVtbXkgaW50ZWdyYXRpb24gc2NyaXB0IHRoYXQgZG9lcyBub3QgcmVwb3J0IGFueSBuZXcgb3IgbW9kaWZpZWQgZmlsZXMuCisjIFRoZSBkdW1teSBzY3JpcHQgaGFzIHZlcnkgbGl0dGxlIG92ZXJoZWFkIHdoaWNoIHByb3ZpZGVzIG9wdGltaXN0aWMgcmVzdWx0cy4KKyMKKyMgVGhlIHBlcmZvcm1hbmNlIHRlc3Qgd2lsbCBhbHNvIHVzZSB0aGUgdW50cmFja2VkIGNhY2hlIGZlYXR1cmUgaWYgaXQgaXMKKyMgYXZhaWxhYmxlIGFzIGZzbW9uaXRvciB1c2VzIGl0IHRvIHNwZWVkIHVwIHNjYW5uaW5nIGZvciB1bnRyYWNrZWQgZmlsZXMuCisjCisjIFRoZXJlIGFyZSAzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFsdGVyIHRoZSBkZWZhdWx0CisjIGJlaGF2aW9yIG9mIHRoZSBwZXJmb3JtYW5jZSB0ZXN0OgorIworIyBHSVRfUEVSRl83NTE5X1VOVFJBQ0tFRF9DQUNIRTogdXNlZCB0byBjb25maWd1cmUgY29yZS51bnRyYWNrZWRDYWNoZQorIyBHSVRfUEVSRl83NTE5X1NQTElUX0lOREVYOiB1c2VkIHRvIGNvbmZpZ3VyZSBjb3JlLnNwbGl0SW5kZXgKKyMgR0lUX1BFUkZfNzUxOV9GU01PTklUT1I6IHVzZWQgdG8gY29uZmlndXJlIGNvcmUuZnNNb25pdG9yCisjCisjIFRoZSBiaWcgd2luIGZvciB1c2luZyBmc21vbml0b3IgaXMgdGhlIGVsaW1pbmF0aW9uIG9mIHRoZSBuZWVkIHRvIHNjYW4gdGhlCisjIHdvcmtpbmcgZGlyZWN0b3J5IGxvb2tpbmcgZm9yIGNoYW5nZWQgYW5kIHVudHJhY2tlZCBmaWxlcy4gSWYgdGhlIGZpbGUKKyMgaW5mb3JtYXRpb24gaXMgYWxsIGNhY2hlZCBpbiBSQU0sIHRoZSBiZW5lZml0cyBhcmUgcmVkdWNlZC4KKyMKKyMgR0lUX1BFUkZfNzUxOV9EUk9QX0NBQ0hFOiBpZiBzZXQsIHRoZSBPUyBjYWNoZXMgYXJlIGRyb3BwZWQgYmV0d2VlbiB0ZXN0cworIworCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbwordGVzdF9jaGVja291dF93b3JrdHJlZQorCit0ZXN0X2xhenlfcHJlcmVxIFVOVFJBQ0tFRF9DQUNIRSAnCisJeyBnaXQgdXBkYXRlLWluZGV4IC0tdGVzdC11bnRyYWNrZWQtY2FjaGU7IHJldD0kPzsgfSAmJgorCXRlc3QgJHJldCAtbmUgMQorJworCit0ZXN0X2xhenlfcHJlcmVxIFdBVENITUFOICcKKwljb21tYW5kIC12IHdhdGNobWFuCisnCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgV0FUQ0hNQU4KK3RoZW4KKwkjIENvbnZlcnQgdW5peCBzdHlsZSBwYXRocyB0byBlc2NhcGVkIFdpbmRvd3Mgc3R5bGUgcGF0aHMgZm9yIFdhdGNobWFuCisJY2FzZSAiJCh1bmFtZSAtcykiIGluCisJTVNZU19OVCopCisJICBHSVRfV09SS19UUkVFPSIkKGN5Z3BhdGggLWF3ICIkUFdEIiB8IHNlZCAncyxcXCwvLGcnKSIKKwkgIDs7CisJKikKKwkgIEdJVF9XT1JLX1RSRUU9IiRQV0QiCisJICA7OworCWVzYWMKK2ZpCisKK2lmIHRlc3QgLW4gIiRHSVRfUEVSRl83NTE5X0RST1BfQ0FDSEUiCit0aGVuCisJIyBXaGVuIHVzaW5nIEdJVF9QRVJGXzc1MTlfRFJPUF9DQUNIRSwgR0lUX1BFUkZfUkVQRUFUX0NPVU5UIG11c3QgYmUgMSB0bworCSMgZ2VuZXJhdGUgdmFsaWQgcmVzdWx0cy4gT3RoZXJ3aXNlIHRoZSBjYWNoaW5nIHRoYXQgaGFwcGVucyBmb3IgdGhlIG50aAorCSMgcnVuIHdpbGwgbmVnYXRlIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29tcGFyaXNvbnMuCisJaWYgdGVzdCAiJEdJVF9QRVJGX1JFUEVBVF9DT1VOVCIgLW5lIDEKKwl0aGVuCisJCWVjaG8gIndhcm5pbmc6IFNldHRpbmcgR0lUX1BFUkZfUkVQRUFUX0NPVU5UPTEiID4mMgorCQlHSVRfUEVSRl9SRVBFQVRfQ09VTlQ9MQorCWZpCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBmb3IgZnNtb25pdG9yIiAnCisJIyBzZXQgdW50cmFja2VkQ2FjaGUgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudAorCWlmIHRlc3QgLW4gIiRHSVRfUEVSRl83NTE5X1VOVFJBQ0tFRF9DQUNIRSIKKwl0aGVuCisJCWdpdCBjb25maWcgY29yZS51bnRyYWNrZWRDYWNoZSAiJEdJVF9QRVJGXzc1MTlfVU5UUkFDS0VEX0NBQ0hFIgorCWVsc2UKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSBVTlRSQUNLRURfQ0FDSEUKKwkJdGhlbgorCQkJZ2l0IGNvbmZpZyBjb3JlLnVudHJhY2tlZENhY2hlIHRydWUKKwkJZWxzZQorCQkJZ2l0IGNvbmZpZyBjb3JlLnVudHJhY2tlZENhY2hlIGZhbHNlCisJCWZpCisJZmkgJiYKKworCSMgc2V0IGNvcmUuc3BsaXRpbmRleCBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50CisJaWYgdGVzdCAtbiAiJEdJVF9QRVJGXzc1MTlfU1BMSVRfSU5ERVgiCisJdGhlbgorCQlnaXQgY29uZmlnIGNvcmUuc3BsaXRJbmRleCAiJEdJVF9QRVJGXzc1MTlfU1BMSVRfSU5ERVgiCisJZmkgJiYKKworCSMgc2V0IElOVEVHUkFUSU9OX1NDUklQVCBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50CisJaWYgdGVzdCAtbiAiJEdJVF9QRVJGXzc1MTlfRlNNT05JVE9SIgorCXRoZW4KKwkJSU5URUdSQVRJT05fU0NSSVBUPSIkR0lUX1BFUkZfNzUxOV9GU01PTklUT1IiCisJZWxzZQorCQkjCisJCSMgQ2hvb3NlIGludGVncmF0aW9uIHNjcmlwdCBiYXNlZCBvbiBleGlzdGVuY2Ugb2YgV2F0Y2htYW4uCisJCSMgSWYgV2F0Y2htYW4gZXhpc3RzLCB3YXRjaCB0aGUgd29yayB0cmVlIGFuZCBhdHRlbXB0IGEgcXVlcnkuCisJCSMgSWYgZXZlcnl0aGluZyBzdWNjZWVkcywgdXNlIFdhdGNobWFuIGludGVncmF0aW9uIHNjcmlwdCwKKwkJIyBlbHNlIGZhbGwgYmFjayB0byBhbiBlbXB0eSBpbnRlZ3JhdGlvbiBzY3JpcHQuCisJCSMKKwkJbWtkaXIgLmdpdC9ob29rcyAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxIFdBVENITUFOCisJCXRoZW4KKwkJCUlOVEVHUkFUSU9OX1NDUklQVD0iLmdpdC9ob29rcy9mc21vbml0b3Itd2F0Y2htYW4iICYmCisJCQljcCAiJFRFU1RfRElSRUNUT1JZLy4uL3RlbXBsYXRlcy9ob29rcy0tZnNtb25pdG9yLXdhdGNobWFuLnNhbXBsZSIgIiRJTlRFR1JBVElPTl9TQ1JJUFQiICYmCisJCQl3YXRjaG1hbiB3YXRjaCAiJEdJVF9XT1JLX1RSRUUiICYmCisJCQl3YXRjaG1hbiB3YXRjaC1saXN0IHwgZ3JlcCAtcSAtRiAiJEdJVF9XT1JLX1RSRUUiCisJCWVsc2UKKwkJCUlOVEVHUkFUSU9OX1NDUklQVD0iLmdpdC9ob29rcy9mc21vbml0b3ItZW1wdHkiICYmCisJCQl3cml0ZV9zY3JpcHQgIiRJTlRFR1JBVElPTl9TQ1JJUFQiPDwtXEVPRgorCQkJRU9GCisJCWZpCisJZmkgJiYKKworCWdpdCBjb25maWcgY29yZS5mc21vbml0b3IgIiRJTlRFR1JBVElPTl9TQ1JJUFQiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvcgorJworCitpZiB0ZXN0IC1uICIkR0lUX1BFUkZfNzUxOV9EUk9QX0NBQ0hFIjsgdGhlbgorCXRlc3QtdG9vbCBkcm9wLWNhY2hlcworZmkKKwordGVzdF9wZXJmICJzdGF0dXMgKGZzbW9uaXRvcj0kSU5URUdSQVRJT05fU0NSSVBUKSIgJworCWdpdCBzdGF0dXMKKycKKworaWYgdGVzdCAtbiAiJEdJVF9QRVJGXzc1MTlfRFJPUF9DQUNIRSI7IHRoZW4KKwl0ZXN0LXRvb2wgZHJvcC1jYWNoZXMKK2ZpCisKK3Rlc3RfcGVyZiAic3RhdHVzIC11bm8gKGZzbW9uaXRvcj0kSU5URUdSQVRJT05fU0NSSVBUKSIgJworCWdpdCBzdGF0dXMgLXVubworJworCitpZiB0ZXN0IC1uICIkR0lUX1BFUkZfNzUxOV9EUk9QX0NBQ0hFIjsgdGhlbgorCXRlc3QtdG9vbCBkcm9wLWNhY2hlcworZmkKKwordGVzdF9wZXJmICJzdGF0dXMgLXVhbGwgKGZzbW9uaXRvcj0kSU5URUdSQVRJT05fU0NSSVBUKSIgJworCWdpdCBzdGF0dXMgLXVhbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgd2l0aG91dCBmc21vbml0b3IiICcKKwl1bnNldCBJTlRFR1JBVElPTl9TQ1JJUFQgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5mc21vbml0b3IgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yCisnCisKK2lmIHRlc3QgLW4gIiRHSVRfUEVSRl83NTE5X0RST1BfQ0FDSEUiOyB0aGVuCisJdGVzdC10b29sIGRyb3AtY2FjaGVzCitmaQorCit0ZXN0X3BlcmYgInN0YXR1cyAoZnNtb25pdG9yPSRJTlRFR1JBVElPTl9TQ1JJUFQpIiAnCisJZ2l0IHN0YXR1cworJworCitpZiB0ZXN0IC1uICIkR0lUX1BFUkZfNzUxOV9EUk9QX0NBQ0hFIjsgdGhlbgorCXRlc3QtdG9vbCBkcm9wLWNhY2hlcworZmkKKwordGVzdF9wZXJmICJzdGF0dXMgLXVubyAoZnNtb25pdG9yPSRJTlRFR1JBVElPTl9TQ1JJUFQpIiAnCisJZ2l0IHN0YXR1cyAtdW5vCisnCisKK2lmIHRlc3QgLW4gIiRHSVRfUEVSRl83NTE5X0RST1BfQ0FDSEUiOyB0aGVuCisJdGVzdC10b29sIGRyb3AtY2FjaGVzCitmaQorCit0ZXN0X3BlcmYgInN0YXR1cyAtdWFsbCAoZnNtb25pdG9yPSRJTlRFR1JBVElPTl9TQ1JJUFQpIiAnCisJZ2l0IHN0YXR1cyAtdWFsbAorJworCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFdBVENITUFOCit0aGVuCisJd2F0Y2htYW4gd2F0Y2gtZGVsICIkR0lUX1dPUktfVFJFRSIgPi9kZXYvbnVsbCAyPiYxICYmCisKKwkjIFdvcmsgYXJvdW5kIFdhdGNobWFuIGJ1ZyBvbiBXaW5kb3dzIHdoZXJlIGl0IGhvbGRzIG9uIHRvIGhhbmRsZXMKKwkjIHByZXZlbnRpbmcgdGhlIHJlbW92YWwgb2YgdGhlIHRyYXNoIGRpcmVjdG9yeQorCXdhdGNobWFuIHNodXRkb3duLXNlcnZlciA+L2Rldi9udWxsIDI+JjEKK2ZpCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A3ODEwLWdyZXAuc2ggYi90L3BlcmYvcDc4MTAtZ3JlcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZjRhZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A3ODEwLWdyZXAuc2gKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249ImdpdC1ncmVwIHBlcmZvcm1hbmNlIGluIHZhcmlvdXMgbW9kZXMiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbwordGVzdF9jaGVja291dF93b3JrdHJlZQorCit0ZXN0X3BlcmYgJ2dyZXAgd29ya3RyZWUsIGNoZWFwIHJlZ2V4JyAnCisJZ2l0IGdyZXAgc29tZV9ub25leGlzdGVudF9zdHJpbmcgfHwgOgorJwordGVzdF9wZXJmICdncmVwIHdvcmt0cmVlLCBleHBlbnNpdmUgcmVnZXgnICcKKwlnaXQgZ3JlcCAiXi4qICpzb21lX25vbmV4aXN0ZW50X3N0cmluZyQiIHx8IDoKKycKK3Rlc3RfcGVyZiAnZ3JlcCAtLWNhY2hlZCwgY2hlYXAgcmVnZXgnICcKKwlnaXQgZ3JlcCAtLWNhY2hlZCBzb21lX25vbmV4aXN0ZW50X3N0cmluZyB8fCA6CisnCit0ZXN0X3BlcmYgJ2dyZXAgLS1jYWNoZWQsIGV4cGVuc2l2ZSByZWdleCcgJworCWdpdCBncmVwIC0tY2FjaGVkICJeLiogKnNvbWVfbm9uZXhpc3RlbnRfc3RyaW5nJCIgfHwgOgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNzgyMC1ncmVwLWVuZ2luZXMuc2ggYi90L3BlcmYvcDc4MjAtZ3JlcC1lbmdpbmVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMDljNWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDc4MjAtZ3JlcC1lbmdpbmVzLnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJDb21wYXJpc29uIG9mIGdpdC1ncmVwJ3MgcmVnZXggZW5naW5lcworCitTZXQgR0lUX1BFUkZfNzgyMF9HUkVQX09QVFMgaW4gdGhlIGVudmlyb25tZW50IHRvIHBhc3Mgb3B0aW9ucyB0bworZ2l0LWdyZXAuIE1ha2Ugc3VyZSB0byBpbmNsdWRlIGEgbGVhZGluZyBzcGFjZSwKK2UuZy4gR0lUX1BFUkZfNzgyMF9HUkVQX09QVFM9JyAtaScuIFNvbWUgb3B0aW9ucyB0byB0cnk6CisKKwktaQorCS13CisJLXYKKwktdmkKKwktdncKKwktdml3CisKK0lmIEdJVF9QRVJGX0dSRVBfVEhSRUFEUyBpcyBzZXQgdG8gYSBsaXN0IG9mIHRocmVhZHMgKGUuZy4gJzEgNCA4JworZXRjLikgd2Ugd2lsbCB0ZXN0IHRoZSBwYXR0ZXJucyB1bmRlciB0aG9zZSBudW1iZXJzIG9mIHRocmVhZHMuCisiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbwordGVzdF9jaGVja291dF93b3JrdHJlZQorCitpZiB0ZXN0IC1uICIkR0lUX1BFUkZfR1JFUF9USFJFQURTIgordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBQRVJGX0dSRVBfRU5HSU5FU19USFJFQURTCitmaQorCitmb3IgcGF0dGVybiBpbiBcCisJJ2hvdy50bycgXAorCSdeaG93IHRvJyBcCisJJ1tob3ddIHRvJyBcCisJJ1woZS50W14gXSpcfHYucnlcKSByYXJlJyBcCisJJ21cKMO6XHx1XClsdC5iXCjDplx8eVwpdGUnCitkbworCWZvciBlbmdpbmUgaW4gYmFzaWMgZXh0ZW5kZWQgcGVybAorCWRvCisJCWlmIHRlc3QgJGVuZ2luZSAhPSAiYmFzaWMiCisJCXRoZW4KKwkJCSMgUG9vciBtYW4ncyBiYXNpYyAtPiBleHRlbmRlZCBjb252ZXJ0ZXIuCisJCQlwYXR0ZXJuPSQoZWNobyAiJHBhdHRlcm4iIHwgc2VkICdzL1xcLy9nJykKKwkJZmkKKwkJaWYgdGVzdCAkZW5naW5lID0gInBlcmwiICYmICEgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCXRoZW4KKwkJCXByZXJlcT0iUENSRSIKKwkJZWxzZQorCQkJcHJlcmVxPSIiCisJCWZpCisJCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJGX0dSRVBfRU5HSU5FU19USFJFQURTCisJCXRoZW4KKwkJCXRlc3RfcGVyZiAkcHJlcmVxICIkZW5naW5lIGdyZXAkR0lUX1BFUkZfNzgyMF9HUkVQX09QVFMgJyRwYXR0ZXJuJyIgIgorCQkJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgZ3JlcCRHSVRfUEVSRl83ODIwX0dSRVBfT1BUUyAtLSAnJHBhdHRlcm4nID4nb3V0LiRlbmdpbmUnIHx8IDoKKwkJCSIKKwkJZWxzZQorCQkJZm9yIHRocmVhZHMgaW4gJEdJVF9QRVJGX0dSRVBfVEhSRUFEUworCQkJZG8KKwkJCQl0ZXN0X3BlcmYgUFRIUkVBRFMsJHByZXJlcSAiJGVuZ2luZSBncmVwJEdJVF9QRVJGXzc4MjBfR1JFUF9PUFRTICckcGF0dGVybicgd2l0aCAkdGhyZWFkcyB0aHJlYWRzIiAiCisJCQkJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgLWMgZ3JlcC50aHJlYWRzPSR0aHJlYWRzIGdyZXAkR0lUX1BFUkZfNzgyMF9HUkVQX09QVFMgLS0gJyRwYXR0ZXJuJyA+J291dC4kZW5naW5lLiR0aHJlYWRzJyB8fCA6CisJCQkJIgorCQkJZG9uZQorCQlmaQorCWRvbmUKKworCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJGX0dSRVBfRU5HSU5FU19USFJFQURTCisJdGhlbgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhc3NlcnQgdGhhdCBhbGwgZW5naW5lcyBmb3VuZCB0aGUgc2FtZSBmb3IkR0lUX1BFUkZfNzgyMF9HUkVQX09QVFMgJyRwYXR0ZXJuJyIgJworCQkJdGVzdF9jbXAgb3V0LmJhc2ljIG91dC5leHRlbmRlZCAmJgorCQkJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCQl0aGVuCisJCQkJdGVzdF9jbXAgb3V0LmJhc2ljIG91dC5wZXJsCisJCQlmaQorCQknCisJZWxzZQorCQlmb3IgdGhyZWFkcyBpbiAkR0lUX1BFUkZfR1JFUF9USFJFQURTCisJCWRvCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBUSFJFQURTICJhc3NlcnQgdGhhdCBhbGwgZW5naW5lcyBmb3VuZCB0aGUgc2FtZSBmb3IkR0lUX1BFUkZfNzgyMF9HUkVQX09QVFMgJyRwYXR0ZXJuJyB1bmRlciB0aHJlYWRpbmciICIKKwkJCQl0ZXN0X2NtcCBvdXQuYmFzaWMuJHRocmVhZHMgb3V0LmV4dGVuZGVkLiR0aHJlYWRzICYmCisJCQkJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCQkJdGhlbgorCQkJCQl0ZXN0X2NtcCBvdXQuYmFzaWMuJHRocmVhZHMgb3V0LnBlcmwuJHRocmVhZHMKKwkJCQlmaQorCQkJIgorCQlkb25lCisJZmkKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDc4MjEtZ3JlcC1lbmdpbmVzLWZpeGVkLnNoIGIvdC9wZXJmL3A3ODIxLWdyZXAtZW5naW5lcy1maXhlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MWU0MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3A3ODIxLWdyZXAtZW5naW5lcy1maXhlZC5zaApAQCAtMCwwICsxLDc0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iQ29tcGFyaXNvbiBvZiBnaXQtZ3JlcCdzIHJlZ2V4IGVuZ2luZXMgd2l0aCAtRgorCitTZXQgR0lUX1BFUkZfNzgyMV9HUkVQX09QVFMgaW4gdGhlIGVudmlyb25tZW50IHRvIHBhc3Mgb3B0aW9ucyB0bworZ2l0LWdyZXAuIE1ha2Ugc3VyZSB0byBpbmNsdWRlIGEgbGVhZGluZyBzcGFjZSwKK2UuZy4gR0lUX1BFUkZfNzgyMV9HUkVQX09QVFM9JyAtdycuIFNlZSBwNzgyMC1ncmVwLWVuZ2luZXMuc2ggZm9yIG1vcmUKK29wdGlvbnMgdG8gdHJ5LgorCitJZiBHSVRfUEVSRl83ODIxX1RIUkVBRFMgaXMgc2V0IHRvIGEgbGlzdCBvZiB0aHJlYWRzIChlLmcuICcxIDQgOCcKK2V0Yy4pIHdlIHdpbGwgdGVzdCB0aGUgcGF0dGVybnMgdW5kZXIgdGhvc2UgbnVtYmVycyBvZiB0aHJlYWRzLgorIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKworaWYgdGVzdCAtbiAiJEdJVF9QRVJGX0dSRVBfVEhSRUFEUyIKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgUEVSRl9HUkVQX0VOR0lORVNfVEhSRUFEUworZmkKKworZm9yIHBhdHRlcm4gaW4gJ2ludCcgJ3VuY29tbW9uJyAnw6YnCitkbworCWZvciBlbmdpbmUgaW4gZml4ZWQgYmFzaWMgZXh0ZW5kZWQgcGVybAorCWRvCisJCWlmIHRlc3QgJGVuZ2luZSA9ICJwZXJsIiAmJiAhIHRlc3RfaGF2ZV9wcmVyZXEgUENSRQorCQl0aGVuCisJCQlwcmVyZXE9IlBDUkUiCisJCWVsc2UKKwkJCXByZXJlcT0iIgorCQlmaQorCQlpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSRl9HUkVQX0VOR0lORVNfVEhSRUFEUworCQl0aGVuCisJCQl0ZXN0X3BlcmYgJHByZXJlcSAiJGVuZ2luZSBncmVwJEdJVF9QRVJGXzc4MjFfR1JFUF9PUFRTICRwYXR0ZXJuIiAiCisJCQkJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9JGVuZ2luZSBncmVwJEdJVF9QRVJGXzc4MjFfR1JFUF9PUFRTICRwYXR0ZXJuID4nb3V0LiRlbmdpbmUnIHx8IDoKKwkJCSIKKwkJZWxzZQorCQkJZm9yIHRocmVhZHMgaW4gJEdJVF9QRVJGX0dSRVBfVEhSRUFEUworCQkJZG8KKwkJCQl0ZXN0X3BlcmYgUFRIUkVBRFMsJHByZXJlcSAiJGVuZ2luZSBncmVwJEdJVF9QRVJGXzc4MjFfR1JFUF9PUFRTICRwYXR0ZXJuIHdpdGggJHRocmVhZHMgdGhyZWFkcyIgIgorCQkJCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIC1jIGdyZXAudGhyZWFkcz0kdGhyZWFkcyBncmVwJEdJVF9QRVJGXzc4MjFfR1JFUF9PUFRTICRwYXR0ZXJuID4nb3V0LiRlbmdpbmUuJHRocmVhZHMnIHx8IDoKKwkJCQkiCisJCQlkb25lCisJCWZpCisJZG9uZQorCisJaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkZfR1JFUF9FTkdJTkVTX1RIUkVBRFMKKwl0aGVuCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFzc2VydCB0aGF0IGFsbCBlbmdpbmVzIGZvdW5kIHRoZSBzYW1lIGZvciRHSVRfUEVSRl83ODIxX0dSRVBfT1BUUyAkcGF0dGVybiIgJworCQkJdGVzdF9jbXAgb3V0LmZpeGVkIG91dC5iYXNpYyAmJgorCQkJdGVzdF9jbXAgb3V0LmZpeGVkIG91dC5leHRlbmRlZCAmJgorCQkJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCQl0aGVuCisJCQkJdGVzdF9jbXAgb3V0LmZpeGVkIG91dC5wZXJsCisJCQlmaQorCQknCisJZWxzZQorCQlmb3IgdGhyZWFkcyBpbiAkR0lUX1BFUkZfR1JFUF9USFJFQURTCisJCWRvCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBUSFJFQURTICJhc3NlcnQgdGhhdCBhbGwgZW5naW5lcyBmb3VuZCB0aGUgc2FtZSBmb3IkR0lUX1BFUkZfNzgyMV9HUkVQX09QVFMgJHBhdHRlcm4gdW5kZXIgdGhyZWFkaW5nIiAiCisJCQkJdGVzdF9jbXAgb3V0LmZpeGVkLiR0aHJlYWRzIG91dC5iYXNpYy4kdGhyZWFkcyAmJgorCQkJCXRlc3RfY21wIG91dC5maXhlZC4kdGhyZWFkcyBvdXQuZXh0ZW5kZWQuJHRocmVhZHMgJiYKKwkJCQlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwkJCQl0aGVuCisJCQkJCXRlc3RfY21wIG91dC5maXhlZC4kdGhyZWFkcyBvdXQucGVybC4kdGhyZWFkcworCQkJCWZpCisJCQkiCisJCWRvbmUKKwlmaQorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wZXJmLWxpYi5zaCBiL3QvcGVyZi9wZXJmLWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2UzODkzCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3BlcmYtbGliLnNoCkBAIC0wLDAgKzEsMjQ3IEBACisjIFBlcmZvcm1hbmNlIHRlc3RpbmcgZnJhbWV3b3JrLiAgRWFjaCBwZXJmIHNjcmlwdCBzdGFydHMgbXVjaCBsaWtlCisjIGEgbm9ybWFsIHRlc3Qgc2NyaXB0LCBleGNlcHQgaXQgc291cmNlcyB0aGlzIGxpYnJhcnkgaW5zdGVhZCBvZgorIyB0ZXN0LWxpYi5zaC4gIFNlZSB0L3BlcmYvUkVBRE1FIGZvciBkb2N1bWVudGF0aW9uLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhvbWFzIFJhc3QKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIC4KKworIyBUaGVzZSB2YXJpYWJsZXMgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBpbmNsdXNpb24gb2YgdGVzdC1saWIuc2ggYmVsb3csCisjIGJlY2F1c2UgaXQgd2lsbCBjaGFuZ2Ugb3VyIHdvcmtpbmcgZGlyZWN0b3J5LgorVEVTVF9ESVJFQ1RPUlk9JChwd2QpLy4uCitURVNUX09VVFBVVF9ESVJFQ1RPUlk9JChwd2QpCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89dAorVEVTVF9OT19NQUxMT0NfQ0hFQ0s9dAorCisuIC4uL3Rlc3QtbGliLnNoCisKK2lmIHRlc3QgLW4gIiRHSVRfVEVTVF9JTlNUQUxMRUQiIC1hIC16ICIkUEVSRl9TRVRfR0lUX1RFU1RfSU5TVEFMTEVEIgordGhlbgorCWVycm9yICJEbyBub3QgdXNlIEdJVF9URVNUX0lOU1RBTExFRCB3aXRoIHRoZSBwZXJmIHRlc3RzLgorCitJbnN0ZWFkIHVzZToKKworICAgIC4vcnVuIDxwYXRoLXRvLWdpdD4gLS0gPHRlc3RzPgorCitTZWUgdC9wZXJmL1JFQURNRSBmb3IgZGV0YWlscy4iCitmaQorCisjIFZhcmlhYmxlcyBmcm9tIHRlc3QtbGliIHRoYXQgYXJlIG5vcm1hbGx5IGludGVybmFsIHRvIHRoZSB0ZXN0czsgd2UKKyMgbmVlZCB0byBleHBvcnQgdGhlbSBmb3IgdGVzdF9wZXJmIHN1YnNoZWxscworZXhwb3J0IFRFU1RfRElSRUNUT1JZIFRSQVNIX0RJUkVDVE9SWSBHSVRfQlVJTERfRElSIEdJVF9URVNUX0NNUAorCitNT0RFUk5fR0lUPSRHSVRfQlVJTERfRElSL2Jpbi13cmFwcGVycy9naXQKK2V4cG9ydCBNT0RFUk5fR0lUCisKK3BlcmZfcmVzdWx0c19kaXI9JFRFU1RfT1VUUFVUX0RJUkVDVE9SWS90ZXN0LXJlc3VsdHMKK3Rlc3QgLW4gIiRHSVRfUEVSRl9TVUJTRUNUSU9OIiAmJiBwZXJmX3Jlc3VsdHNfZGlyPSIkcGVyZl9yZXN1bHRzX2Rpci8kR0lUX1BFUkZfU1VCU0VDVElPTiIKK21rZGlyIC1wICIkcGVyZl9yZXN1bHRzX2RpciIKK3JtIC1mICIkcGVyZl9yZXN1bHRzX2RpciIvJChiYXNlbmFtZSAiJDAiIC5zaCkuc3VidGVzdHMKKworZGllX2lmX2J1aWxkX2Rpcl9ub3RfcmVwbyAoKSB7CisJaWYgISAoIGNkICIkVEVTVF9ESVJFQ1RPUlkvLi4iICYmCisJCSAgICBnaXQgcmV2LXBhcnNlIC0tYnVpbGQtZGlyID4vZGV2L251bGwgMj4mMSApOyB0aGVuCisJCWVycm9yICJObyAkMSBkZWZpbmVkLCBhbmQgeW91ciBidWlsZCBkaXJlY3RvcnkgaXMgbm90IGEgcmVwbyIKKwlmaQorfQorCitpZiB0ZXN0IC16ICIkR0lUX1BFUkZfUkVQTyI7IHRoZW4KKwlkaWVfaWZfYnVpbGRfZGlyX25vdF9yZXBvICckR0lUX1BFUkZfUkVQTycKKwlHSVRfUEVSRl9SRVBPPSRURVNUX0RJUkVDVE9SWS8uLgorZmkKK2lmIHRlc3QgLXogIiRHSVRfUEVSRl9MQVJHRV9SRVBPIjsgdGhlbgorCWRpZV9pZl9idWlsZF9kaXJfbm90X3JlcG8gJyRHSVRfUEVSRl9MQVJHRV9SRVBPJworCUdJVF9QRVJGX0xBUkdFX1JFUE89JFRFU1RfRElSRUNUT1JZLy4uCitmaQorCit0ZXN0X3BlcmZfZG9fcmVwb19zeW1saW5rX2NvbmZpZ18gKCkgeworCXRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MgfHwgZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIGZhbHNlCit9CisKK3Rlc3RfcGVyZl9jcmVhdGVfcmVwb19mcm9tICgpIHsKKwl0ZXN0ICIkIyIgPSAyIHx8CisJQlVHICJub3QgMiBwYXJhbWV0ZXJzIHRvIHRlc3QtY3JlYXRlLXJlcG8iCisJcmVwbz0iJDEiCisJc291cmNlPSIkMiIKKwlzb3VyY2VfZ2l0PSIkKCIkTU9ERVJOX0dJVCIgLUMgIiRzb3VyY2UiIHJldi1wYXJzZSAtLWdpdC1kaXIpIgorCW9iamVjdHNfZGlyPSIkKCIkTU9ERVJOX0dJVCIgLUMgIiRzb3VyY2UiIHJldi1wYXJzZSAtLWdpdC1wYXRoIG9iamVjdHMpIgorCW1rZGlyIC1wICIkcmVwby8uZ2l0IgorCSgKKwkJY2QgIiRzb3VyY2UiICYmCisJCXsgY3AgLVJsICIkb2JqZWN0c19kaXIiICIkcmVwby8uZ2l0LyIgMj4vZGV2L251bGwgfHwKKwkJCWNwIC1SICIkb2JqZWN0c19kaXIiICIkcmVwby8uZ2l0LyI7IH0gJiYKKwkJZm9yIHN0dWZmIGluICIkc291cmNlX2dpdCIvKjsgZG8KKwkJCWNhc2UgIiRzdHVmZiIgaW4KKwkJCQkqL29iamVjdHN8Ki9ob29rc3wqL2NvbmZpZ3wqL2NvbW1vbmRpcikKKwkJCQkJOzsKKwkJCQkqKQorCQkJCQljcCAtUiAiJHN0dWZmIiAiJHJlcG8vLmdpdC8iIHx8IGV4aXQgMQorCQkJCQk7OworCQkJZXNhYworCQlkb25lCisJKSAmJgorCSgKKwkJY2QgIiRyZXBvIiAmJgorCQkiJE1PREVSTl9HSVQiIGluaXQgLXEgJiYKKwkJdGVzdF9wZXJmX2RvX3JlcG9fc3ltbGlua19jb25maWdfICYmCisJCW12IC5naXQvaG9va3MgLmdpdC9ob29rcy1kaXNhYmxlZCAyPi9kZXYvbnVsbCAmJgorCQlpZiB0ZXN0IC1mIC5naXQvaW5kZXgubG9jaworCQl0aGVuCisJCQkjIFdlIG1heSBiZSBjb3B5aW5nIGEgcmVwbyB0aGF0IGNhbid0IHJ1biAiZ2l0CisJCQkjIHN0YXR1cyIgZHVlIHRvIGEgbG9ja2VkIGluZGV4LiBTaW5jZSB3ZSBoYXZlCisJCQkjIGEgY29weSBpdCdzIGZpbmUgdG8gcmVtb3ZlIHRoZSBsb2NrLgorCQkJcm0gLmdpdC9pbmRleC5sb2NrCisJCWZpCisJKSB8fCBlcnJvciAiZmFpbGVkIHRvIGNvcHkgcmVwb3NpdG9yeSAnJHNvdXJjZScgdG8gJyRyZXBvJyIKK30KKworIyBjYWxsIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSB0byBlc3RhYmxpc2ggYW4gYXBwcm9wcmlhdGVseS1zaXplZCByZXBvc2l0b3J5Cit0ZXN0X3BlcmZfZnJlc2hfcmVwbyAoKSB7CisJcmVwbz0iJHsxOi0kVFJBU0hfRElSRUNUT1JZfSIKKwkiJE1PREVSTl9HSVQiIGluaXQgLXEgIiRyZXBvIiAmJgorCSgKKwkJY2QgIiRyZXBvIiAmJgorCQl0ZXN0X3BlcmZfZG9fcmVwb19zeW1saW5rX2NvbmZpZ18KKwkpCit9CisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8gKCkgeworCXRlc3RfcGVyZl9jcmVhdGVfcmVwb19mcm9tICIkezE6LSRUUkFTSF9ESVJFQ1RPUll9IiAiJEdJVF9QRVJGX1JFUE8iCit9Cit0ZXN0X3BlcmZfbGFyZ2VfcmVwbyAoKSB7CisJaWYgdGVzdCAiJEdJVF9QRVJGX0xBUkdFX1JFUE8iID0gIiRHSVRfQlVJTERfRElSIjsgdGhlbgorCQllY2hvICJ3YXJuaW5nOiBcJEdJVF9QRVJGX0xBUkdFX1JFUE8gaXMgXCRHSVRfQlVJTERfRElSLiIgPiYyCisJCWVjaG8gIndhcm5pbmc6IFRoaXMgd2lsbCB3b3JrLCBidXQgbWF5IG5vdCBiZSBhIHN1ZmZpY2llbnRseSBsYXJnZSByZXBvIiA+JjIKKwkJZWNobyAid2FybmluZzogZm9yIHJlcHJlc2VudGF0aXZlIG1lYXN1cmVtZW50cy4iID4mMgorCWZpCisJdGVzdF9wZXJmX2NyZWF0ZV9yZXBvX2Zyb20gIiR7MTotJFRSQVNIX0RJUkVDVE9SWX0iICIkR0lUX1BFUkZfTEFSR0VfUkVQTyIKK30KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUgKCkgeworCWdpdCBjaGVja291dC1pbmRleCAtdSAtYSB8fAorCWVycm9yICJnaXQgY2hlY2tvdXQtaW5kZXggZmFpbGVkIgorfQorCisjIFBlcmZvcm1hbmNlIHRlc3RzIHNob3VsZCBuZXZlciBmYWlsLiAgSWYgdGhleSBkbywgc3RvcCBpbW1lZGlhdGVseQoraW1tZWRpYXRlPXQKKworIyBQZXJmIHRlc3RzIHJlcXVpcmUgR05VIHRpbWUKK2Nhc2UgIiQodW5hbWUgLXMpIiBpbiBEYXJ3aW4pIEdUSU1FPSIke0dUSU1FOi1ndGltZX0iOzsgZXNhYworR1RJTUU9IiR7R1RJTUU6LS91c3IvYmluL3RpbWV9IgorCit0ZXN0X3J1bl9wZXJmXyAoKSB7CisJdGVzdF9jbGVhbnVwPToKKwl0ZXN0X2V4cG9ydF89InRlc3RfY2xlYW51cCIKKwlleHBvcnQgdGVzdF9jbGVhbnVwIHRlc3RfZXhwb3J0XworCSIkR1RJTUUiIC1mICIlRSAlVSAlUyIgLW8gdGVzdF90aW1lLiRpICIkU0hFTEwiIC1jICcKKy4gJyIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCcKK3Rlc3RfZXhwb3J0ICgpIHsKKwlbICQjICE9IDAgXSB8fCByZXR1cm4gMAorCXRlc3RfZXhwb3J0Xz0iJHRlc3RfZXhwb3J0X1xcfCQxIgorCXNoaWZ0CisJdGVzdF9leHBvcnQgIiRAIgorfQorJyIkMSInCityZXQ9JD8KK3NldCB8IHNlZCAtbiAicyciLycvJ1xcXFwnJy9nIic7cy9eXFwoJHRlc3RfZXhwb3J0X1xcKS9leHBvcnQgJyInJiciJy9wIiA+dGVzdF92YXJzCitleGl0ICRyZXQnID4mMyAyPiY0CisJZXZhbF9yZXQ9JD8KKworCWlmIHRlc3QgJGV2YWxfcmV0ID0gMCB8fCB0ZXN0IC1uICIkZXhwZWN0aW5nX2ZhaWx1cmUiCisJdGhlbgorCQl0ZXN0X2V2YWxfICIkdGVzdF9jbGVhbnVwIgorCQkuIC4vdGVzdF92YXJzIHx8IGVycm9yICJmYWlsZWQgdG8gbG9hZCB1cGRhdGVkIGVudmlyb25tZW50IgorCWZpCisJaWYgdGVzdCAiJHZlcmJvc2UiID0gInQiICYmIHRlc3QgLW4gIiRIQVJORVNTX0FDVElWRSI7IHRoZW4KKwkJZWNobyAiIgorCWZpCisJcmV0dXJuICIkZXZhbF9yZXQiCit9CisKK3Rlc3Rfd3JhcHBlcl8gKCkgeworCXRlc3Rfd3JhcHBlcl9mdW5jXz0kMTsgc2hpZnQKKwl0ZXN0X3N0YXJ0XworCXRlc3QgIiQjIiA9IDMgJiYgeyB0ZXN0X3ByZXJlcT0kMTsgc2hpZnQ7IH0gfHwgdGVzdF9wcmVyZXE9CisJdGVzdCAiJCMiID0gMiB8fAorCUJVRyAibm90IDIgb3IgMyBwYXJhbWV0ZXJzIHRvIHRlc3QtZXhwZWN0LXN1Y2Nlc3MiCisJZXhwb3J0IHRlc3RfcHJlcmVxCisJaWYgISB0ZXN0X3NraXAgIiRAIgorCXRoZW4KKwkJYmFzZT0kKGJhc2VuYW1lICIkMCIgLnNoKQorCQllY2hvICIkdGVzdF9jb3VudCIgPj4iJHBlcmZfcmVzdWx0c19kaXIiLyRiYXNlLnN1YnRlc3RzCisJCWVjaG8gIiQxIiA+IiRwZXJmX3Jlc3VsdHNfZGlyIi8kYmFzZS4kdGVzdF9jb3VudC5kZXNjcgorCQliYXNlPSIkcGVyZl9yZXN1bHRzX2RpciIvIiRQRVJGX1JFU1VMVFNfUFJFRklYJChiYXNlbmFtZSAiJDAiIC5zaCkiLiIkdGVzdF9jb3VudCIKKwkJIiR0ZXN0X3dyYXBwZXJfZnVuY18iICIkQCIKKwlmaQorCisJdGVzdF9maW5pc2hfCit9CisKK3Rlc3RfcGVyZl8gKCkgeworCWlmIHRlc3QgLXogIiR2ZXJib3NlIjsgdGhlbgorCQlwcmludGYgIiVzIiAicGVyZiAkdGVzdF9jb3VudCAtICQxOiIKKwllbHNlCisJCWVjaG8gInBlcmYgJHRlc3RfY291bnQgLSAkMToiCisJZmkKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgJEdJVF9QRVJGX1JFUEVBVF9DT1VOVCk7IGRvCisJCXNheSA+JjMgInJ1bm5pbmc6ICQyIgorCQlpZiB0ZXN0X3J1bl9wZXJmXyAiJDIiCisJCXRoZW4KKwkJCWlmIHRlc3QgLXogIiR2ZXJib3NlIjsgdGhlbgorCQkJCXByaW50ZiAiICVzIiAiJGkiCisJCQllbHNlCisJCQkJZWNobyAiKiB0aW1pbmcgcnVuICRpLyRHSVRfUEVSRl9SRVBFQVRfQ09VTlQ6IgorCQkJZmkKKwkJZWxzZQorCQkJdGVzdCAteiAiJHZlcmJvc2UiICYmIGVjaG8KKwkJCXRlc3RfZmFpbHVyZV8gIiRAIgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAteiAiJHZlcmJvc2UiOyB0aGVuCisJCWVjaG8gIiBvayIKKwllbHNlCisJCXRlc3Rfb2tfICIkMSIKKwlmaQorCSIkVEVTVF9ESVJFQ1RPUlkiL3BlcmYvbWluX3RpbWUucGVybCB0ZXN0X3RpbWUuKiA+IiRiYXNlIi5yZXN1bHQKK30KKwordGVzdF9wZXJmICgpIHsKKwl0ZXN0X3dyYXBwZXJfIHRlc3RfcGVyZl8gIiRAIgorfQorCit0ZXN0X3NpemVfICgpIHsKKwlzYXkgPiYzICJydW5uaW5nOiAkMiIKKwlpZiB0ZXN0X2V2YWxfICIkMiIgMz4iJGJhc2UiLnJlc3VsdDsgdGhlbgorCQl0ZXN0X29rXyAiJDEiCisJZWxzZQorCQl0ZXN0X2ZhaWx1cmVfICIkQCIKKwlmaQorfQorCit0ZXN0X3NpemUgKCkgeworCXRlc3Rfd3JhcHBlcl8gdGVzdF9zaXplXyAiJEAiCit9CisKKyMgV2UgZXh0ZW5kIHRlc3RfZG9uZSB0byBwcmludCB0aW1pbmdzIGF0IHRoZSBlbmQgKC4vcnVuIGRpc2FibGVzIHRoaXMKKyMgYW5kIGRvZXMgaXQgYWZ0ZXIgcnVubmluZyBldmVyeXRoaW5nKQordGVzdF9hdF9lbmRfaG9va18gKCkgeworCWlmIHRlc3QgLXogIiRHSVRfUEVSRl9BR0dSRUdBVElOR19MQVRFUiI7IHRoZW4KKwkJKCBjZCAiJFRFU1RfRElSRUNUT1JZIi9wZXJmICYmIC4vYWdncmVnYXRlLnBlcmwgJChiYXNlbmFtZSAiJDAiKSApCisJZmkKK30KKwordGVzdF9leHBvcnQgKCkgeworCWV4cG9ydCAiJEAiCit9CmRpZmYgLS1naXQgYS90L3BlcmYvcmVwb3MvLmdpdGlnbm9yZSBiL3QvcGVyZi9yZXBvcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTNkYzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcmVwb3MvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitnZW4tKi8KZGlmZiAtLWdpdCBhL3QvcGVyZi9yZXBvcy9pbmZsYXRlLXJlcG8uc2ggYi90L3BlcmYvcmVwb3MvaW5mbGF0ZS1yZXBvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjZmM5OTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcmVwb3MvaW5mbGF0ZS1yZXBvLnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorIyBJbmZsYXRlIHRoZSBzaXplIG9mIGFuIEVYSVNUSU5HIHJlcG8uCisjCisjIFRoaXMgc2NyaXB0IHNob3VsZCBiZSBydW4gaW5zaWRlIHRoZSB3b3JrdHJlZSBvZiBhIFRFU1QgcmVwby4KKyMgSXQgd2lsbCB1c2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IEhFQUQgdG8gZ2VuZXJhdGUgYQorIyBjb21taXQgY29udGFpbmluZyBjb3BpZXMgb2YgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3VjaCB0aGF0IHRoZQorIyB0b3RhbCBzaXplIG9mIHRoZSBjb21taXQgaGFzIGF0IGxlYXN0IDx0YXJnZXRfc2l6ZT4gZmlsZXMuCisjCisjIFVzYWdlOiBbLXQgdGFyZ2V0X3NpemVdIFstYiBicmFuY2hfbmFtZV0KKworc2V0IC1lCisKK3RhcmdldF9zaXplPTEwMDAwCiticmFuY2hfbmFtZT1wMDAwNi1iYWxsYXN0CitiYWxsYXN0PWJhbGxhc3QKKword2hpbGUgdGVzdCAiJCMiIC1uZSAwCitkbworICAgIGNhc2UgIiQxIiBpbgorCS1iKQorCSAgICBzaGlmdDsKKwkgICAgdGVzdCAiJCMiIC1uZSAwIHx8IHsgZWNobyAnZXJyb3I6IC1iIHJlcXVpcmVzIGFuIGFyZ3VtZW50JyA+JjI7IGV4aXQgMTsgfQorCSAgICBicmFuY2hfbmFtZT0kMTsKKwkgICAgc2hpZnQgOzsKKwktdCkKKwkgICAgc2hpZnQ7CisJICAgIHRlc3QgIiQjIiAtbmUgMCB8fCB7IGVjaG8gJ2Vycm9yOiAtdCByZXF1aXJlcyBhbiBhcmd1bWVudCcgPiYyOyBleGl0IDE7IH0KKwkgICAgdGFyZ2V0X3NpemU9JDE7CisJICAgIHNoaWZ0IDs7CisJKikKKwkgICAgZWNobyAiZXJyb3I6IHVua25vd24gb3B0aW9uICckMSciID4mMjsgZXhpdCAxIDs7CisgICAgZXNhYworZG9uZQorCitnaXQgbHMtdHJlZSAtciBIRUFEID5HRU5fc3JjX2xpc3QKK25yX3NyY19maWxlcz0kKGNhdCBHRU5fc3JjX2xpc3QgfCB3YyAtbCkKKworc3JjX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLS1zaG9ydCBIRUFEKQorCitlY2hvICJCcmFuY2ggJHNyY19icmFuY2ggaW5pdGlhbGx5IGhhcyAkbnJfc3JjX2ZpbGVzIGZpbGVzLiIKKworaWYgdGVzdCAkdGFyZ2V0X3NpemUgLWxlICRucl9zcmNfZmlsZXMKK3RoZW4KKyAgICBlY2hvICJSZXBvc2l0b3J5IGFscmVhZHkgZXhjZWVkcyB0YXJnZXQgc2l6ZSAkdGFyZ2V0X3NpemUuIgorICAgIHJtIEdFTl9zcmNfbGlzdAorICAgIGV4aXQgMQorZmkKKworIyBDcmVhdGUgd2VsbC1rbm93biBicmFuY2ggYW5kIGFkZCAxIGZpbGUgY2hhbmdlIHRvIHN0YXJ0CisjIGlmIG9mZiBiZWZvcmUgdGhlIGJhbGxhc3QuCitnaXQgY2hlY2tvdXQgLWIgJGJyYW5jaF9uYW1lIEhFQUQKK2VjaG8gIiR0YXJnZXRfc2l6ZSIgPiBpbmZsYXRlLXJlcG8ucGFyYW1zCitnaXQgYWRkIGluZmxhdGUtcmVwby5wYXJhbXMKK2dpdCBjb21taXQgLXEgLW0gcGFyYW1zCisKKyMgQ3JlYXRlIGJhbGxhc3QgZm9yIGluIG91ciBicmFuY2guCitjb3B5PTEKK25yX2ZpbGVzPSRucl9zcmNfZmlsZXMKK3doaWxlIHRlc3QgJG5yX2ZpbGVzIC1sdCAkdGFyZ2V0X3NpemUKK2RvCisgICAgc2VkIC1lICJzfAl8CSRiYWxsYXN0LyRjb3B5L3wiIDxHRU5fc3JjX2xpc3QgfAorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvCisKKyAgICBucl9maWxlcz0kKGV4cHIgJG5yX2ZpbGVzICsgJG5yX3NyY19maWxlcykKKyAgICBjb3B5PSQoZXhwciAkY29weSArIDEpCitkb25lCitybSBHRU5fc3JjX2xpc3QKK2dpdCBjb21taXQgLXEgLW0gImJhbGxhc3QiCisKKyMgTW9kaWZ5IDEgZmlsZSBhbmQgY29tbWl0LgorZWNobyAiJHRhcmdldF9zaXplIiA+PiBpbmZsYXRlLXJlcG8ucGFyYW1zCitnaXQgYWRkIGluZmxhdGUtcmVwby5wYXJhbXMKK2dpdCBjb21taXQgLXEgLW0gImJhbGxhc3QgcGx1cyAxIgorCitucl9maWxlcz0kKGdpdCBscy1maWxlcyB8IHdjIC1sKQorCisjIENoZWNrb3V0IG1hc3RlciB0byBwdXQgcmVwbyBpbiBjYW5vbmljYWwgc3RhdGUgKGJlY2F1c2UKKyMgdGhlIHBlcmYgdGVzdCBtYXkgbmVlZCB0byBjbG9uZSBhbmQgZW5hYmxlIHNwYXJzZS1jaGVja291dAorIyBiZWZvcmUgYXR0ZW1wdGluZyB0byBjaGVja291dCBhIGNvbW1pdCB3aXRoIHRoZSBiYWxsYXN0CisjIChiZWNhdXNlIGl0IG1heSBjb250YWluIDEwMEsgZGlyZWN0b3JpZXMgYW5kIDFNIGZpbGVzKSkuCitnaXQgY2hlY2tvdXQgJHNyY19icmFuY2gKKworZWNobyAiUmVwb3NpdG9yeSBpbmZsYXRlZC4gQnJhbmNoICRicmFuY2hfbmFtZSBoYXMgJG5yX2ZpbGVzIGZpbGVzLiIKKworZXhpdCAwCmRpZmYgLS1naXQgYS90L3BlcmYvcmVwb3MvbWFueS1maWxlcy5zaCBiL3QvcGVyZi9yZXBvcy9tYW55LWZpbGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4NzIwZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcmVwb3MvbWFueS1maWxlcy5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisjIEdlbmVyYXRlIHRlc3QgZGF0YSByZXBvc2l0b3J5IHVzaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorIyBXaGVuIG9taXR0ZWQsIHdlIGNyZWF0ZSAiZ2VuLW1hbnktZmlsZXMtZC13LWYuZ2l0Ii4KKyMKKyMgVXNhZ2U6IFstciByZXBvXSBbLWQgZGVwdGhdIFstdyB3aWR0aF0gWy1mIGZpbGVzXQorIworIyAtciByZXBvOiBwYXRoIHRvIHRoZSBuZXcgcmVwbyB0byBiZSBnZW5lcmF0ZWQKKyMgLWQgZGVwdGg6IHRoZSBkZXB0aCBvZiBzdWItZGlyZWN0b3JpZXMKKyMgLXcgd2lkdGg6IHRoZSBudW1iZXIgb2Ygc3ViLWRpcmVjdG9yaWVzIGF0IGVhY2ggbGV2ZWwKKyMgLWYgZmlsZXM6IHRoZSBudW1iZXIgb2YgZmlsZXMgY3JlYXRlZCBpbiBlYWNoIGRpcmVjdG9yeQorIworIyBOb3RlIHRoYXQgYWxsIGZpbGVzIHdpbGwgaGF2ZSB0aGUgc2FtZSBTSEEtMSBhbmQgZWFjaAorIyBkaXJlY3RvcnkgYXQgYSBsZXZlbCB3aWxsIGhhdmUgdGhlIHNhbWUgU0hBLTEsIHNvIHdlCisjIHdpbGwgcG90ZW50aWFsbHkgaGF2ZSBhIGxhcmdlIGluZGV4LCBidXQgbm90IGEgbGFyZ2UKKyMgT0RCLgorIworIyBCYWxsYXN0IHdpbGwgYmUgY3JlYXRlZCB1bmRlciAiYmFsbGFzdC8iLgorCitFTVBUWV9CTE9CPWU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKKworc2V0IC1lCisKKyMgKDUsIDEwLCA5KSB3aWxsIGNyZWF0ZSA5OTksOTk5IGJhbGxhc3QgZmlsZXMuCisjICg0LCAxMCwgOSkgd2lsbCBjcmVhdGUgIDk5LDk5OSBiYWxsYXN0IGZpbGVzLgorZGVwdGg9NQord2lkdGg9MTAKK2ZpbGVzPTkKKword2hpbGUgdGVzdCAiJCMiIC1uZSAwCitkbworICAgIGNhc2UgIiQxIiBpbgorCS1yKQorCSAgICBzaGlmdDsKKwkgICAgdGVzdCAiJCMiIC1uZSAwIHx8IHsgZWNobyAnZXJyb3I6IC1yIHJlcXVpcmVzIGFuIGFyZ3VtZW50JyA+JjI7IGV4aXQgMTsgfQorCSAgICByZXBvPSQxOworCSAgICBzaGlmdCA7OworCS1kKQorCSAgICBzaGlmdDsKKwkgICAgdGVzdCAiJCMiIC1uZSAwIHx8IHsgZWNobyAnZXJyb3I6IC1kIHJlcXVpcmVzIGFuIGFyZ3VtZW50JyA+JjI7IGV4aXQgMTsgfQorCSAgICBkZXB0aD0kMTsKKwkgICAgc2hpZnQgOzsKKwktdykKKwkgICAgc2hpZnQ7CisJICAgIHRlc3QgIiQjIiAtbmUgMCB8fCB7IGVjaG8gJ2Vycm9yOiAtdyByZXF1aXJlcyBhbiBhcmd1bWVudCcgPiYyOyBleGl0IDE7IH0KKwkgICAgd2lkdGg9JDE7CisJICAgIHNoaWZ0IDs7CisJLWYpCisJICAgIHNoaWZ0OworCSAgICB0ZXN0ICIkIyIgLW5lIDAgfHwgeyBlY2hvICdlcnJvcjogLWYgcmVxdWlyZXMgYW4gYXJndW1lbnQnID4mMjsgZXhpdCAxOyB9CisJICAgIGZpbGVzPSQxOworCSAgICBzaGlmdCA7OworCSopCisJICAgIGVjaG8gImVycm9yOiB1bmtub3duIG9wdGlvbiAnJDEnIiA+JjI7IGV4aXQgMSA7OworCWVzYWMKK2RvbmUKKworIyBJbmZsYXRlIHRoZSBpbmRleCB3aXRoIHRob3VzYW5kcyBvZiBlbXB0eSBmaWxlcy4KKyMgdXNhZ2U6IGRpciBkZXB0aCB3aWR0aCBmaWxlcworZmlsbF9pbmRleCgpIHsKKwlhd2sgLXYgYXJnX2Rpcj0kMSAtdiBhcmdfZGVwdGg9JDIgLXYgYXJnX3dpZHRoPSQzIC12IGFyZ19maWxlcz0kNCAnCisJCWZ1bmN0aW9uIG1ha2VfcGF0aHMoZGlyLCBkZXB0aCwgd2lkdGgsIGZpbGVzLCBmLCB3KSB7CisJCQlmb3IgKGYgPSAxOyBmIDw9IGZpbGVzOyBmKyspIHsKKwkJCQlwcmludCBkaXIgIi9maWxlIiBmCisJCQl9CisJCQlpZiAoZGVwdGggPiAwKSB7CisJCQkJZm9yICh3ID0gMTsgdyA8PSB3aWR0aDsgdysrKSB7CisJCQkJCW1ha2VfcGF0aHMoZGlyICIvZGlyIiB3LCBkZXB0aCAtIDEsIHdpZHRoLCBmaWxlcykKKwkJCQl9CisJCQl9CisJCX0KKwkJRU5EIHsgbWFrZV9wYXRocyhhcmdfZGlyLCBhcmdfZGVwdGgsIGFyZ193aWR0aCwgYXJnX2ZpbGVzKSB9CisJCScgPC9kZXYvbnVsbCB8CisJc2VkICJzL14vMTAwNjQ0ICRFTVBUWV9CTE9CCS8iIHwKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbworCXJldHVybiAwCit9CisKK1sgLXogIiRyZXBvIiBdICYmIHJlcG89Z2VuLW1hbnktZmlsZXMtJGRlcHRoLiR3aWR0aC4kZmlsZXMuZ2l0CisKK21rZGlyICRyZXBvCitjZCAkcmVwbworZ2l0IGluaXQgLgorCisjIENyZWF0ZSBhbiBpbml0aWFsIGNvbW1pdCBqdXN0IHRvIGRlZmluZSBtYXN0ZXIuCit0b3VjaCBtYW55LWZpbGVzLmVtcHR5CitlY2hvICIkZGVwdGggJHdpZHRoICRmaWxlcyIgPm1hbnktZmlsZXMucGFyYW1zCitnaXQgYWRkIG1hbnktZmlsZXMuKgorZ2l0IGNvbW1pdCAtcSAtbSBwYXJhbXMKKworIyBDcmVhdGUgYmFsbGFzdCBmb3IgcDAwMDYgYmFzZWQgdXBvbiB0aGUgZ2l2ZW4gcGFyYW1zIGFuZAorIyBpbmZsYXRlIHRoZSBpbmRleCB3aXRoIHRob3VzYW5kcyBvZiBlbXB0eSBmaWxlcyBhbmQgY29tbWl0LgorZ2l0IGNoZWNrb3V0IC1iIHAwMDA2LWJhbGxhc3QKK2ZpbGxfaW5kZXggImJhbGxhc3QiICRkZXB0aCAkd2lkdGggJGZpbGVzCitnaXQgY29tbWl0IC1xIC1tICJiYWxsYXN0IgorCitucl9maWxlcz0kKGdpdCBscy1maWxlcyB8IHdjIC1sKQorCisjIE1vZGlmeSAxIGZpbGUgYW5kIGNvbW1pdC4KK2VjaG8gIiRkZXB0aCAkd2lkdGggJGZpbGVzIiA+Pm1hbnktZmlsZXMucGFyYW1zCitnaXQgYWRkIG1hbnktZmlsZXMucGFyYW1zCitnaXQgY29tbWl0IC1xIC1tICJiYWxsYXN0IHBsdXMgMSIKKworIyBDaGVja291dCBtYXN0ZXIgdG8gcHV0IHJlcG8gaW4gY2Fub25pY2FsIHN0YXRlIChiZWNhdXNlCisjIHRoZSBwZXJmIHRlc3QgbWF5IG5lZWQgdG8gY2xvbmUgYW5kIGVuYWJsZSBzcGFyc2UtY2hlY2tvdXQKKyMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY2hlY2tvdXQgYSBjb21taXQgd2l0aCB0aGUgYmFsbGFzdAorIyAoYmVjYXVzZSBpdCBtYXkgY29udGFpbiAxMDBLIGRpcmVjdG9yaWVzIGFuZCAxTSBmaWxlcykpLgorZ2l0IGNoZWNrb3V0IG1hc3RlcgorCitlY2hvICJSZXBvc2l0b3J5ICIkcmVwbyIgKCRkZXB0aCwgJHdpZHRoLCAkZmlsZXMpIGNyZWF0ZWQuICBCYWxsYXN0ICRucl9maWxlcy4iCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvcGVyZi9ydW4gYi90L3BlcmYvcnVuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3Yjg2MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcnVuCkBAIC0wLDAgKzEsMjQ3IEBACisjIS9iaW4vc2gKKworZGllICgpIHsKKwllY2hvID4mMiAiZXJyb3I6ICQqIgorCWV4aXQgMQorfQorCit3aGlsZSBbICQjIC1ndCAwIF07IGRvCisJYXJnPSIkMSIKKwljYXNlICIkYXJnIiBpbgorCS0tKQorCQlicmVhayA7OworCS0taGVscCkKKwkJZWNobyAidXNhZ2U6ICQwIFstLWNvbmZpZyBmaWxlXSBbLS1zdWJzZWN0aW9uIHN1YnNlY10gW290aGVyX2dpdF90cmVlLi4uXSBbLS1dIFt0ZXN0X3NjcmlwdHNdIgorCQlleGl0IDAgOzsKKwktLWNvbmZpZykKKwkJc2hpZnQKKwkJR0lUX1BFUkZfQ09ORklHX0ZJTEU9JChjZCAiJChkaXJuYW1lICIkMSIpIjsgcHdkKS8kKGJhc2VuYW1lICIkMSIpCisJCWV4cG9ydCBHSVRfUEVSRl9DT05GSUdfRklMRQorCQlzaGlmdCA7OworCS0tc3Vic2VjdGlvbikKKwkJc2hpZnQKKwkJR0lUX1BFUkZfU1VCU0VDVElPTj0iJDEiCisJCWV4cG9ydCBHSVRfUEVSRl9TVUJTRUNUSU9OCisJCXNoaWZ0IDs7CisJLS0qKQorCQlkaWUgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIgOzsKKwkqKQorCQlicmVhayA7OworCWVzYWMKK2RvbmUKKworcnVuX29uZV9kaXIgKCkgeworCWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKwkJc2V0IC0tIHA/Pz8/LSouc2gKKwlmaQorCWVjaG8gIj09PSBSdW5uaW5nICQjIHRlc3RzIGluICR7R0lUX1RFU1RfSU5TVEFMTEVEOi10aGlzIHRyZWV9ID09PSIKKwlmb3IgdCBpbiAiJEAiOyBkbworCQkuLyR0ICRHSVRfVEVTVF9PUFRTCisJZG9uZQorfQorCit1bnBhY2tfZ2l0X3JldiAoKSB7CisJcmV2PSQxCisJZWNobyAiPT09IFVucGFja2luZyAkcmV2IGluIGJ1aWxkLyRyZXYgPT09IgorCW1rZGlyIC1wIGJ1aWxkLyRyZXYKKwkoY2QgIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cCkiICYmIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAkcmV2KSB8CisJKGNkIGJ1aWxkLyRyZXYgJiYgdGFyIHgpCit9CisKK2J1aWxkX2dpdF9yZXYgKCkgeworCXJldj0kMQorCW5hbWU9IiQyIgorCWZvciBjb25maWcgaW4gY29uZmlnLm1hayBjb25maWcubWFrLmF1dG9nZW4gY29uZmlnLnN0YXR1cworCWRvCisJCWlmIHRlc3QgLWUgIi4uLy4uLyRjb25maWciCisJCXRoZW4KKwkJCWNwICIuLi8uLi8kY29uZmlnIiAiYnVpbGQvJHJldi8iCisJCWZpCisJZG9uZQorCWVjaG8gIj09PSBCdWlsZGluZyAkcmV2ICgkbmFtZSkgPT09IgorCSgKKwkJY2QgYnVpbGQvJHJldiAmJgorCQlpZiB0ZXN0IC1uICIkR0lUX1BFUkZfTUFLRV9DT01NQU5EIgorCQl0aGVuCisJCQlzaCAtYyAiJEdJVF9QRVJGX01BS0VfQ09NTUFORCIKKwkJZWxzZQorCQkJbWFrZSAkR0lUX1BFUkZfTUFLRV9PUFRTCisJCWZpCisJKSB8fCBkaWUgImZhaWxlZCB0byBidWlsZCByZXZpc2lvbiAnJG15ZGlyJyIKK30KKworc2V0X2dpdF90ZXN0X2luc3RhbGxlZCAoKSB7CisJbXlkaXI9JDEKKworCW15ZGlyX2Ficz0kKGNkICRteWRpciAmJiBwd2QpCisJbXlkaXJfYWJzX3dyYXBwZXJzPSIkbXlkaXJfYWJzX3dyYXBwZXJzL2Jpbi13cmFwcGVycyIKKwlpZiB0ZXN0IC1kICIkbXlkaXJfYWJzX3dyYXBwZXJzIgorCXRoZW4KKwkJR0lUX1RFU1RfSU5TVEFMTEVEPSRteWRpcl9hYnNfd3JhcHBlcnMKKwllbHNlCisJCSMgT2xkZXIgdmVyc2lvbnMgb2YgZ2l0IGxhY2tlZCBiaW4td3JhcHBlcnM7CisJCSMgZmFsbGJhY2sgdG8gdGhlIGZpbGVzIGluIHRoZSByb290LgorCQlHSVRfVEVTVF9JTlNUQUxMRUQ9JG15ZGlyX2FicworCWZpCisJZXhwb3J0IEdJVF9URVNUX0lOU1RBTExFRAorCVBFUkZfU0VUX0dJVF9URVNUX0lOU1RBTExFRD10cnVlCisJZXhwb3J0IFBFUkZfU0VUX0dJVF9URVNUX0lOU1RBTExFRAorfQorCitydW5fZGlyc19oZWxwZXIgKCkgeworCW15ZGlyPSR7MSUvfQorCXNoaWZ0CisJd2hpbGUgdGVzdCAkIyAtZ3QgMCAtYSAiJDEiICE9IC0tIC1hICEgLWYgIiQxIjsgZG8KKwkJc2hpZnQKKwlkb25lCisJaWYgdGVzdCAkIyAtZ3QgMCAtYSAiJDEiID0gLS07IHRoZW4KKwkJc2hpZnQKKwlmaQorCisJUEVSRl9SRVNVTFRTX1BSRUZJWD0KKwlpZiB0ZXN0ICIkbXlkaXIiID0gIi4iCisJdGhlbgorCQl1bnNldCBHSVRfVEVTVF9JTlNUQUxMRUQKKwllbGlmIHRlc3QgLWQgIiRteWRpciIKKwl0aGVuCisJCVBFUkZfUkVTVUxUU19QUkVGSVg9YmluZGlyJChjZCAkbXlkaXIgJiYgcHJpbnRmICIlcyIgIiQocHdkKSIgfCB0ciAtYyAiW2EtekEtWjAtOV0iICJfIikuCisJCXNldF9naXRfdGVzdF9pbnN0YWxsZWQgIiRteWRpciIKKwllbHNlCisJCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRteWRpciIgMj4vZGV2L251bGwpIHx8CisJCWRpZSAiJyRteWRpcicgaXMgbmVpdGhlciBhIGRpcmVjdG9yeSBub3IgYSB2YWxpZCByZXZpc2lvbiIKKwkJaWYgWyAhIC1kIGJ1aWxkLyRyZXYgXTsgdGhlbgorCQkJdW5wYWNrX2dpdF9yZXYgJHJldgorCQlmaQorCQlidWlsZF9naXRfcmV2ICRyZXYgIiRteWRpciIKKwkJbXlkaXI9YnVpbGQvJHJldgorCisJCVBFUkZfUkVTVUxUU19QUkVGSVg9YnVpbGRfJHJldi4KKwkJc2V0X2dpdF90ZXN0X2luc3RhbGxlZCAiJG15ZGlyIgorCWZpCisJZXhwb3J0IFBFUkZfUkVTVUxUU19QUkVGSVgKKworCXJ1bl9vbmVfZGlyICIkQCIKK30KKworcnVuX2RpcnMgKCkgeworCXdoaWxlIHRlc3QgJCMgLWd0IDAgLWEgIiQxIiAhPSAtLSAtYSAhIC1mICIkMSI7IGRvCisJCXJ1bl9kaXJzX2hlbHBlciAiJEAiCisJCXNoaWZ0CisJZG9uZQorfQorCitnZXRfc3Vic2VjdGlvbnMgKCkgeworCXNlY3Rpb249IiQxIgorCXRlc3QgLXogIiRHSVRfUEVSRl9DT05GSUdfRklMRSIgJiYgcmV0dXJuCisJZ2l0IGNvbmZpZyAtZiAiJEdJVF9QRVJGX0NPTkZJR19GSUxFIiAtLW5hbWUtb25seSAtLWdldC1yZWdleCAiJHNlY3Rpb25cLi4qXC5bXi5dKyIgfAorCXNlZCAtZSAicy8kc2VjdGlvblwuXCguKlwpXC4uKi9cMS8iIHwgc29ydCB8IHVuaXEKK30KKworZ2V0X3Zhcl9mcm9tX2Vudl9vcl9jb25maWcgKCkgeworCWVudl92YXI9IiQxIgorCWNvbmZfc2VjPSIkMiIKKwljb25mX3Zhcj0iJDMiCisJY29uZl9vcHRzPSIkNCIgIyBvcHRpb25hbAorCisJIyBEbyBub3RoaW5nIGlmIHRoZSBlbnYgdmFyaWFibGUgaXMgYWxyZWFkeSBzZXQKKwlldmFsICJ0ZXN0IC16IFwiXCR7JGVudl92YXIreH1cIiIgfHwgcmV0dXJuCisKKwl0ZXN0IC16ICIkR0lUX1BFUkZfQ09ORklHX0ZJTEUiICYmIHJldHVybgorCisJIyBDaGVjayBpZiB0aGUgdmFyaWFibGUgaXMgaW4gdGhlIGNvbmZpZyBmaWxlCisJaWYgdGVzdCAtbiAiJEdJVF9QRVJGX1NVQlNFQ1RJT04iCisJdGhlbgorCQl2YXI9IiRjb25mX3NlYy4kR0lUX1BFUkZfU1VCU0VDVElPTi4kY29uZl92YXIiCisJCWNvbmZfdmFsdWU9JChnaXQgY29uZmlnICRjb25mX29wdHMgLWYgIiRHSVRfUEVSRl9DT05GSUdfRklMRSIgIiR2YXIiKSAmJgorCQlldmFsICIkZW52X3Zhcj1cIiRjb25mX3ZhbHVlXCIiICYmIHJldHVybgorCWZpCisJdmFyPSIkY29uZl9zZWMuJGNvbmZfdmFyIgorCWNvbmZfdmFsdWU9JChnaXQgY29uZmlnICRjb25mX29wdHMgLWYgIiRHSVRfUEVSRl9DT05GSUdfRklMRSIgIiR2YXIiKSAmJgorCWV2YWwgIiRlbnZfdmFyPVwiJGNvbmZfdmFsdWVcIiIKK30KKworcnVuX3N1YnNlY3Rpb24gKCkgeworCWdldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9SRVBFQVRfQ09VTlQiICJwZXJmIiAicmVwZWF0Q291bnQiICItLWludCIKKwk6ICR7R0lUX1BFUkZfUkVQRUFUX0NPVU5UOj0zfQorCWV4cG9ydCBHSVRfUEVSRl9SRVBFQVRfQ09VTlQKKworCWdldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9ESVJTX09SX1JFVlMiICJwZXJmIiAiZGlyc09yUmV2cyIKKwlzZXQgLS0gJEdJVF9QRVJGX0RJUlNfT1JfUkVWUyAiJEAiCisKKwlnZXRfdmFyX2Zyb21fZW52X29yX2NvbmZpZyAiR0lUX1BFUkZfTUFLRV9DT01NQU5EIiAicGVyZiIgIm1ha2VDb21tYW5kIgorCWdldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9NQUtFX09QVFMiICJwZXJmIiAibWFrZU9wdHMiCisKKwlnZXRfdmFyX2Zyb21fZW52X29yX2NvbmZpZyAiR0lUX1BFUkZfUkVQT19OQU1FIiAicGVyZiIgInJlcG9OYW1lIgorCWV4cG9ydCBHSVRfUEVSRl9SRVBPX05BTUUKKworCUdJVF9QRVJGX0FHR1JFR0FUSU5HX0xBVEVSPXQKKwlleHBvcnQgR0lUX1BFUkZfQUdHUkVHQVRJTkdfTEFURVIKKworCWlmIHRlc3QgJCMgPSAwIC1vICIkMSIgPSAtLSAtbyAtZiAiJDEiOyB0aGVuCisJCXNldCAtLSAuICIkQCIKKwlmaQorCisJY29kZXNwZWVkX29wdD0KKwl0ZXN0ICIkR0lUX1BFUkZfQ09ERVNQRUVEX09VVFBVVCIgPSAidHJ1ZSIgJiYgY29kZXNwZWVkX29wdD0iLS1jb2Rlc3BlZWQiCisKKwlydW5fZGlycyAiJEAiCisKKwlpZiB0ZXN0IC16ICIkR0lUX1BFUkZfU0VORF9UT19DT0RFU1BFRUQiCisJdGhlbgorCQkuL2FnZ3JlZ2F0ZS5wZXJsICRjb2Rlc3BlZWRfb3B0ICIkQCIKKwllbHNlCisJCWpzb25fcmVzX2ZpbGU9InRlc3QtcmVzdWx0cy8kR0lUX1BFUkZfU1VCU0VDVElPTi9hZ2dyZWdhdGUuanNvbiIKKwkJLi9hZ2dyZWdhdGUucGVybCAtLWNvZGVzcGVlZCAiJEAiIHwgdGVlICIkanNvbl9yZXNfZmlsZSIKKwkJc2VuZF9kYXRhX3VybD0iJEdJVF9QRVJGX1NFTkRfVE9fQ09ERVNQRUVEL3Jlc3VsdC9hZGQvanNvbi8iCisJCWN1cmwgLXYgLS1yZXF1ZXN0IFBPU1QgLS1kYXRhLXVybGVuY29kZSAianNvbj0kKGNhdCAiJGpzb25fcmVzX2ZpbGUiKSIgIiRzZW5kX2RhdGFfdXJsIgorCWZpCit9CisKK2dldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9DT0RFU1BFRURfT1VUUFVUIiAicGVyZiIgImNvZGVzcGVlZE91dHB1dCIgIi0tYm9vbCIKK2dldF92YXJfZnJvbV9lbnZfb3JfY29uZmlnICJHSVRfUEVSRl9TRU5EX1RPX0NPREVTUEVFRCIgInBlcmYiICJzZW5kVG9Db2Rlc3BlZWQiCisKK2NkICIkKGRpcm5hbWUgJDApIgorLiAuLi8uLi9HSVQtQlVJTEQtT1BUSU9OUworCitta2RpciAtcCB0ZXN0LXJlc3VsdHMKK2dldF9zdWJzZWN0aW9ucyAicGVyZiIgPnRlc3QtcmVzdWx0cy9ydW5fc3Vic2VjdGlvbnMubmFtZXMKKworaWYgdGVzdCAkKHdjIC1sIDx0ZXN0LXJlc3VsdHMvcnVuX3N1YnNlY3Rpb25zLm5hbWVzKSAtZXEgMAordGhlbgorCWlmIHRlc3QgLW4gIiRHSVRfUEVSRl9TVUJTRUNUSU9OIgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJEdJVF9QRVJGX0NPTkZJR19GSUxFIgorCQl0aGVuCisJCQlkaWUgIm5vIHN1YnNlY3Rpb25zIGFyZSBkZWZpbmVkIGluIGNvbmZpZyBmaWxlICckR0lUX1BFUkZfQ09ORklHX0ZJTEUnIgorCQllbHNlCisJCQlkaWUgInN1YnNlY3Rpb24gJyRHSVRfUEVSRl9TVUJTRUNUSU9OJyBkZWZpbmVkIHdpdGhvdXQgYSBjb25maWcgZmlsZSIKKwkJZmkKKwlmaQorCSgKKwkJcnVuX3N1YnNlY3Rpb24gIiRAIgorCSkKK2VsaWYgdGVzdCAtbiAiJEdJVF9QRVJGX1NVQlNFQ1RJT04iCit0aGVuCisJZWdyZXAgIl4kR0lUX1BFUkZfU1VCU0VDVElPTlwkIiB0ZXN0LXJlc3VsdHMvcnVuX3N1YnNlY3Rpb25zLm5hbWVzID4vZGV2L251bGwgfHwKKwkJZGllICJzdWJzZWN0aW9uICckR0lUX1BFUkZfU1VCU0VDVElPTicgbm90IGZvdW5kIGluICckR0lUX1BFUkZfQ09ORklHX0ZJTEUnIgorCisJZWdyZXAgIl4kR0lUX1BFUkZfU1VCU0VDVElPTlwkIiB0ZXN0LXJlc3VsdHMvcnVuX3N1YnNlY3Rpb25zLm5hbWVzIHwgd2hpbGUgcmVhZCAtciBzdWJzZWMKKwlkbworCQkoCisJCQlHSVRfUEVSRl9TVUJTRUNUSU9OPSIkc3Vic2VjIgorCQkJZXhwb3J0IEdJVF9QRVJGX1NVQlNFQ1RJT04KKwkJCWVjaG8gIj09PT09PT09IFJ1biBmb3Igc3Vic2VjdGlvbiAnJEdJVF9QRVJGX1NVQlNFQ1RJT04nID09PT09PT09IgorCQkJcnVuX3N1YnNlY3Rpb24gIiRAIgorCQkpCisJZG9uZQorZWxzZQorCXdoaWxlIHJlYWQgLXIgc3Vic2VjCisJZG8KKwkJKAorCQkJR0lUX1BFUkZfU1VCU0VDVElPTj0iJHN1YnNlYyIKKwkJCWV4cG9ydCBHSVRfUEVSRl9TVUJTRUNUSU9OCisJCQllY2hvICI9PT09PT09PSBSdW4gZm9yIHN1YnNlY3Rpb24gJyRHSVRfUEVSRl9TVUJTRUNUSU9OJyA9PT09PT09PSIKKwkJCXJ1bl9zdWJzZWN0aW9uICIkQCIKKwkJKQorCWRvbmUgPHRlc3QtcmVzdWx0cy9ydW5fc3Vic2VjdGlvbnMubmFtZXMKK2ZpCmRpZmYgLS1naXQgYS90L3QwMDAwLWJhc2ljLnNoIGIvdC90MDAwMC1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZTQ0MGMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwMC1iYXNpYy5zaApAQCAtMCwwICsxLDEyNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgdmVyeSBiYXNpY3MgcGFydCAjMS4KKworVGhlIHJlc3Qgb2YgdGhlIHRlc3Qgc3VpdGUgZG9lcyBub3QgY2hlY2sgdGhlIGJhc2ljIG9wZXJhdGlvbiBvZiBnaXQKK3BsdW1iaW5nIGNvbW1hbmRzIHRvIHdvcmsgdmVyeSBjYXJlZnVsbHkuICBUaGVpciBqb2IgaXMgdG8gY29uY2VudHJhdGUKK29uIHRyaWNreSBmZWF0dXJlcyB0aGF0IGNhdXNlZCBidWdzIGluIHRoZSBwYXN0IHRvIGRldGVjdCByZWdyZXNzaW9uLgorCitUaGlzIHRlc3QgcnVucyB2ZXJ5IGJhc2ljIGZlYXR1cmVzLCBsaWtlIHJlZ2lzdGVyaW5nIHRoaW5ncyBpbiBjYWNoZSwKK3dyaXRpbmcgdHJlZSwgZXRjLgorCitOb3RlIHRoYXQgdGhpcyB0ZXN0ICpkZWxpYmVyYXRlbHkqIGhhcmQtY29kZXMgbWFueSBleHBlY3RlZCBvYmplY3QKK0lEcy4gIFdoZW4gb2JqZWN0IElEIGNvbXB1dGF0aW9uIGNoYW5nZXMsIGxpa2UgaW4gdGhlIHByZXZpb3VzIGNhc2Ugb2YKK3N3YXBwaW5nIGNvbXByZXNzaW9uIGFuZCBoYXNoaW5nIG9yZGVyLCB0aGUgcGVyc29uIHdobyBpcyBtYWtpbmcgdGhlCittb2RpZmljYXRpb24gKnNob3VsZCogdGFrZSBub3RpY2UgYW5kIHVwZGF0ZSB0aGUgdGVzdCB2ZWN0b3JzIGhlcmUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0cnlfbG9jYWxfeHkgKCkgeworCWxvY2FsIHg9ImxvY2FsIiB5PSJhbHNvbG9jYWwiICYmCisJZWNobyAiJHggJHkiCit9CisKKyMgQ2hlY2sgd2hldGhlciB0aGUgc2hlbGwgc3VwcG9ydHMgdGhlICJsb2NhbCIga2V5d29yZC4gImxvY2FsIiBpcyBub3QKKyMgUE9TSVgtc3RhbmRhcmQsIGJ1dCBpdCBpcyB2ZXJ5IHdpZGVseSBzdXBwb3J0ZWQgYnkgUE9TSVgtY29tcGxpYW50CisjIHNoZWxscywgYW5kIHdlIHJlbHkgb24gaXQgd2l0aGluIEdpdCdzIHRlc3QgZnJhbWV3b3JrLgorIworIyBJZiB5b3VyIHNoZWxsIGZhaWxzIHRoaXMgdGVzdCwgdGhlIHJlc3VsdHMgb2Ygb3RoZXIgdGVzdHMgbWF5IGJlCisjIHVucmVsaWFibGUuIFlvdSBtYXkgd2lzaCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8gdGhlIEdpdCBtYWlsaW5nCisjIGxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LCBhcyBpdCBjb3VsZCBjYXVzZSB1cyB0byByZWNvbnNpZGVyCisjIHJlbHlpbmcgb24gImxvY2FsIi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IHRoZSBydW5uaW5nIHNoZWxsIHN1cHBvcnRzICJsb2NhbCInICcKKwl4PSJub3Rsb2NhbCIgJiYKKwl5PSJhbHNvbm90bG9jYWwiICYmCisJZWNobyAibG9jYWwgYWxzb2xvY2FsIiA+ZXhwZWN0ZWQxICYmCisJdHJ5X2xvY2FsX3h5ID5hY3R1YWwxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQxIGFjdHVhbDEgJiYKKwllY2hvICJub3Rsb2NhbCBhbHNvbm90bG9jYWwiID5leHBlY3RlZDIgJiYKKwllY2hvICIkeCAkeSIgPmFjdHVhbDIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgYWN0dWFsMgorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGdpdCBpbml0IGhhcyBiZWVuIGRvbmUgaW4gYW4gZW1wdHkgcmVwb3NpdG9yeS4KKyMgbWFrZSBzdXJlIGl0IGlzIGVtcHR5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L29iamVjdHMgc2hvdWxkIGJlIGVtcHR5IGFmdGVyIGdpdCBpbml0IGluIGFuIGVtcHR5IHJlcG8nICcKKwlmaW5kIC5naXQvb2JqZWN0cyAtdHlwZSBmIC1wcmludCA+c2hvdWxkLWJlLWVtcHR5ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBzaG91bGQtYmUtZW1wdHkKKycKKworIyBhbHNvIGl0IHNob3VsZCBoYXZlIDIgc3ViZGlyZWN0b3JpZXM7IG5vIGZhbi1vdXQgYW55bW9yZSwgcGFjaywgYW5kIGluZm8uCisjIDMgaXMgY291bnRpbmcgIm9iamVjdHMiIGl0c2VsZgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdC9vYmplY3RzIHNob3VsZCBoYXZlIDMgc3ViZGlyZWN0b3JpZXMnICcKKwlmaW5kIC5naXQvb2JqZWN0cyAtdHlwZSBkIC1wcmludCA+ZnVsbC1vZi1kaXJlY3RvcmllcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgZnVsbC1vZi1kaXJlY3RvcmllcworJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgaGFybmVzcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2VzcyBpcyByZXBvcnRlZCBsaWtlIHRoaXMnICcKKwk6CisnCisKK19ydW5fc3ViX3Rlc3RfbGliX3Rlc3RfY29tbW9uICgpIHsKKwluZWc9IiQxIiBuYW1lPSIkMiIgZGVzY3I9IiQzIiAjIHN0ZGluIGlzIHRoZSBib2R5IG9mIHRoZSB0ZXN0IGNvZGUKKwlzaGlmdCAzCisJbWtkaXIgIiRuYW1lIiAmJgorCSgKKwkJIyBQcmV0ZW5kIHdlJ3JlIG5vdCBydW5uaW5nIHVuZGVyIGEgdGVzdCBoYXJuZXNzLCB3aGV0aGVyIHdlCisJCSMgYXJlIG9yIG5vdC4gVGhlIHRlc3QtbGliIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mCisJCSMgdGhpcyB2YXJpYWJsZSwgc28gd2UgbmVlZCBhIHN0YWJsZSBzZXR0aW5nIHVuZGVyIHdoaWNoIHRvIHJ1bgorCQkjIHRoZSBzdWItdGVzdC4KKwkJc2FuZV91bnNldCBIQVJORVNTX0FDVElWRSAmJgorCQljZCAiJG5hbWUiICYmCisJCWNhdCA+IiRuYW1lLnNoIiA8PC1FT0YgJiYKKwkJIyEkU0hFTExfUEFUSAorCisJCXRlc3RfZGVzY3JpcHRpb249JyRkZXNjciAocnVuIGluIHN1YiB0ZXN0LWxpYikKKworCQlUaGlzIGlzIHJ1biBpbiBhIHN1YiB0ZXN0LWxpYiBzbyB0aGF0IHdlIGRvIG5vdCBnZXQgaW5jb3JyZWN0CisJCXBhc3NpbmcgbWV0cmljcworCQknCisKKwkJIyBUZWxsIHRoZSBmcmFtZXdvcmsgdGhhdCB3ZSBhcmUgc2VsZi10ZXN0aW5nIHRvIG1ha2Ugc3VyZQorCQkjIGl0IHlpZWxkcyBhIHN0YWJsZSByZXN1bHQuCisJCUdJVF9URVNUX0ZSQU1FV09SS19TRUxGVEVTVD10ICYmCisKKwkJIyBQb2ludCB0byB0aGUgdC90ZXN0LWxpYi5zaCwgd2hpY2ggaXNuJ3QgaW4gLi4vIGFzIHVzdWFsCisJCS4gIlwkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtbGliLnNoCisJCUVPRgorCQljYXQgPj4iJG5hbWUuc2giICYmCisJCWNobW9kICt4ICIkbmFtZS5zaCIgJiYKKwkJZXhwb3J0IFRFU1RfRElSRUNUT1JZICYmCisJCVRFU1RfT1VUUFVUX0RJUkVDVE9SWT0kKHB3ZCkgJiYKKwkJZXhwb3J0IFRFU1RfT1VUUFVUX0RJUkVDVE9SWSAmJgorCQlpZiB0ZXN0IC16ICIkbmVnIgorCQl0aGVuCisJCQkuLyIkbmFtZS5zaCIgIiRAIiA+b3V0IDI+ZXJyCisJCWVsc2UKKwkJCSEgIC4vIiRuYW1lLnNoIiAiJEAiID5vdXQgMj5lcnIKKwkJZmkKKwkpCit9CisKK3J1bl9zdWJfdGVzdF9saWJfdGVzdCAoKSB7CisJX3J1bl9zdWJfdGVzdF9saWJfdGVzdF9jb21tb24gJycgIiRAIgorfQorCitydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyICgpIHsKKwlfcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2NvbW1vbiAnIScgIiRAIgorfQorCitjaGVja19zdWJfdGVzdF9saWJfdGVzdCAoKSB7CisJbmFtZT0iJDEiICMgc3RkaW4gaXMgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIHRoZSB0ZXN0CisJKAorCQljZCAiJG5hbWUiICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwkJc2VkIC1lICdzL14+IC8vJyAtZSAncy9aJC8vJyA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXQKKwkpCit9CisKK2NoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciAoKSB7CisJbmFtZT0iJDEiICMgc3RkaW4gaXMgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIHRoZSB0ZXN0CisJIyBleHBlY3RlZCBlcnJvciBvdXRwdXQgaXMgaW4gZGVzY3JpcHRvciAzCisJKAorCQljZCAiJG5hbWUiICYmCisJCXNlZCAtZSAncy9ePiAvLycgLWUgJ3MvWiQvLycgPmV4cGVjdC5vdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0Lm91dCBvdXQgJiYKKwkJc2VkIC1lICdzL14+IC8vJyAtZSAncy9aJC8vJyA8JjMgPmV4cGVjdC5lcnIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LmVyciBlcnIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXRlbmQgd2UgaGF2ZSBhIGZ1bGx5IHBhc3NpbmcgdGVzdCBzdWl0ZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBmdWxsLXBhc3MgJzMgcGFzc2luZyB0ZXN0cycgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMworCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBmdWxsLXBhc3MgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwk+ICMgcGFzc2VkIGFsbCAzIHRlc3QocykKKwk+IDEuLjMKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGEgcGFydGlhbGx5IHBhc3NpbmcgdGVzdCBzdWl0ZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgXAorCQlwYXJ0aWFsLXBhc3MgJzIvMyB0ZXN0cyBwYXNzaW5nJyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bhc3NpbmcgdGVzdCAjMScgJ3RydWUnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGluZyB0ZXN0ICMyJyAnZmFsc2UnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0ICMzJyAndHJ1ZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBwYXJ0aWFsLXBhc3MgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG5vdCBvayAyIC0gZmFpbGluZyB0ZXN0ICMyCisJIwlmYWxzZQorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCT4gIyBmYWlsZWQgMSBhbW9uZyAzIHRlc3QocykKKwk+IDEuLjMKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZmFpbGluZy10b2RvICdBIGZhaWxpbmcgVE9ETyB0ZXN0JyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bhc3NpbmcgdGVzdCcgJ3RydWUnCisJdGVzdF9leHBlY3RfZmFpbHVyZSAncHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UnICdmYWxzZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBmYWlsaW5nLXRvZG8gPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QKKwk+IG5vdCBvayAyIC0gcHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UgIyBUT0RPIGtub3duIGJyZWFrYWdlCisJPiAjIHN0aWxsIGhhdmUgMSBrbm93biBicmVha2FnZShzKQorCT4gIyBwYXNzZWQgYWxsIHJlbWFpbmluZyAxIHRlc3QocykKKwk+IDEuLjIKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGZpeGVkIGEga25vd24gYnJlYWthZ2UnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcGFzc2luZy10b2RvICdBIHBhc3NpbmcgVE9ETyB0ZXN0JyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlJyAndHJ1ZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBwYXNzaW5nLXRvZG8gPDwtXFxFT0YKKwk+IG9rIDEgLSBwcmV0ZW5kIHdlIGhhdmUgZml4ZWQgYSBrbm93biBicmVha2FnZSAjIFRPRE8ga25vd24gYnJlYWthZ2UgdmFuaXNoZWQKKwk+ICMgMSBrbm93biBicmVha2FnZShzKSB2YW5pc2hlZDsgcGxlYXNlIHVwZGF0ZSB0ZXN0KHMpCisJPiAxLi4xCisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXRlbmQgd2UgaGF2ZSBmaXhlZCBvbmUgb2YgdHdvIGtub3duIGJyZWFrYWdlcyAocnVuIGluIHN1YiB0ZXN0LWxpYiknICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcGFydGlhbGx5LXBhc3NpbmctdG9kb3MgXAorCQknMiBUT0RPIHRlc3RzLCBvbmUgcGFzc2luZycgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZScgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXRlbmQgd2UgaGF2ZSBhIHBhc3NpbmcgdGVzdCcgJ3RydWUnCisJdGVzdF9leHBlY3RfZmFpbHVyZSAncHJldGVuZCB3ZSBoYXZlIGZpeGVkIGFub3RoZXIga25vd24gYnJlYWthZ2UnICd0cnVlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHBhcnRpYWxseS1wYXNzaW5nLXRvZG9zIDw8LVxcRU9GCisJPiBub3Qgb2sgMSAtIHByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZQorCT4gb2sgMiAtIHByZXRlbmQgd2UgaGF2ZSBhIHBhc3NpbmcgdGVzdAorCT4gb2sgMyAtIHByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhbm90aGVyIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZSB2YW5pc2hlZAorCT4gIyAxIGtub3duIGJyZWFrYWdlKHMpIHZhbmlzaGVkOyBwbGVhc2UgdXBkYXRlIHRlc3QocykKKwk+ICMgc3RpbGwgaGF2ZSAxIGtub3duIGJyZWFrYWdlKHMpCisJPiAjIHBhc3NlZCBhbGwgcmVtYWluaW5nIDEgdGVzdChzKQorCT4gMS4uMworCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0ZW5kIHdlIGhhdmUgYSBwYXNzLCBmYWlsLCBhbmQga25vd24gYnJlYWthZ2UnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIFwKKwkJbWl4ZWQtcmVzdWx0czEgJ21peGVkIHJlc3VsdHMgIzEnIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0JyAndHJ1ZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsaW5nIHRlc3QnICdmYWxzZScKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZScgJ2ZhbHNlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IG1peGVkLXJlc3VsdHMxIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0CisJPiBub3Qgb2sgMiAtIGZhaWxpbmcgdGVzdAorCT4gIwlmYWxzZQorCT4gbm90IG9rIDMgLSBwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZSAjIFRPRE8ga25vd24gYnJlYWthZ2UKKwk+ICMgc3RpbGwgaGF2ZSAxIGtub3duIGJyZWFrYWdlKHMpCisJPiAjIGZhaWxlZCAxIGFtb25nIHJlbWFpbmluZyAyIHRlc3QocykKKwk+IDEuLjMKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGEgbWl4IG9mIGFsbCBwb3NzaWJsZSByZXN1bHRzJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBcCisJCW1peGVkLXJlc3VsdHMyICdtaXhlZCByZXN1bHRzICMyJyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bhc3NpbmcgdGVzdCcgJ3RydWUnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0JyAndHJ1ZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXNzaW5nIHRlc3QnICd0cnVlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bhc3NpbmcgdGVzdCcgJ3RydWUnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGluZyB0ZXN0JyAnZmFsc2UnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGluZyB0ZXN0JyAnZmFsc2UnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGluZyB0ZXN0JyAnZmFsc2UnCisJdGVzdF9leHBlY3RfZmFpbHVyZSAncHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UnICdmYWxzZScKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZScgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlJyAndHJ1ZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBtaXhlZC1yZXN1bHRzMiA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdAorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdAorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdAorCT4gb2sgNCAtIHBhc3NpbmcgdGVzdAorCT4gbm90IG9rIDUgLSBmYWlsaW5nIHRlc3QKKwk+ICMJZmFsc2UKKwk+IG5vdCBvayA2IC0gZmFpbGluZyB0ZXN0CisJPiAjCWZhbHNlCisJPiBub3Qgb2sgNyAtIGZhaWxpbmcgdGVzdAorCT4gIwlmYWxzZQorCT4gbm90IG9rIDggLSBwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZSAjIFRPRE8ga25vd24gYnJlYWthZ2UKKwk+IG5vdCBvayA5IC0gcHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UgIyBUT0RPIGtub3duIGJyZWFrYWdlCisJPiBvayAxMCAtIHByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZSB2YW5pc2hlZAorCT4gIyAxIGtub3duIGJyZWFrYWdlKHMpIHZhbmlzaGVkOyBwbGVhc2UgdXBkYXRlIHRlc3QocykKKwk+ICMgc3RpbGwgaGF2ZSAyIGtub3duIGJyZWFrYWdlKHMpCisJPiAjIGZhaWxlZCAzIGFtb25nIHJlbWFpbmluZyA3IHRlc3QocykKKwk+IDEuLjEwCisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICd0ZXN0IC0tdmVyYm9zZScgJworCXJ1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgXAorCQl0MTIzNC12ZXJib3NlICJ0ZXN0IHZlcmJvc2UiIC0tdmVyYm9zZSA8PC1cRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicGFzc2luZyB0ZXN0IiB0cnVlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCB3aXRoIG91dHB1dCIgImVjaG8gZm9vIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWxpbmcgdGVzdCIgZmFsc2UKKwl0ZXN0X2RvbmUKKwlFT0YKKwltdiB0MTIzNC12ZXJib3NlL291dCB0MTIzNC12ZXJib3NlL291dCsgJiYKKwlncmVwIC12ICJeSW5pdGlhbGl6ZWQgZW1wdHkiIHQxMjM0LXZlcmJvc2Uvb3V0KyA+dDEyMzQtdmVyYm9zZS9vdXQgJiYKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCB0MTIzNC12ZXJib3NlIDw8LVxFT0YKKwk+IGV4cGVjdGluZyBzdWNjZXNzIG9mIDEyMzQuMSAnXCcncGFzc2luZyB0ZXN0J1wnJzogdHJ1ZQorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdAorCT4gWgorCT4gZXhwZWN0aW5nIHN1Y2Nlc3Mgb2YgMTIzNC4yICdcJyd0ZXN0IHdpdGggb3V0cHV0J1wnJzogZWNobyBmb28KKwk+IGZvbworCT4gb2sgMiAtIHRlc3Qgd2l0aCBvdXRwdXQKKwk+IFoKKwk+IGV4cGVjdGluZyBzdWNjZXNzIG9mIDEyMzQuMyAnXCcnZmFpbGluZyB0ZXN0J1wnJzogZmFsc2UKKwk+IG5vdCBvayAzIC0gZmFpbGluZyB0ZXN0CisJPiAjCWZhbHNlCisJPiBaCisJPiAjIGZhaWxlZCAxIGFtb25nIDMgdGVzdChzKQorCT4gMS4uMworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tdmVyYm9zZS1vbmx5JyAnCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBcCisJCXQyMzQ1LXZlcmJvc2Utb25seS0yICJ0ZXN0IHZlcmJvc2Utb25seT0yIiBcCisJCS0tdmVyYm9zZS1vbmx5PTIgPDwtXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInBhc3NpbmcgdGVzdCIgdHJ1ZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInRlc3Qgd2l0aCBvdXRwdXQiICJlY2hvIGZvbyIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYWlsaW5nIHRlc3QiIGZhbHNlCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgdDIzNDUtdmVyYm9zZS1vbmx5LTIgPDwtXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdAorCT4gWgorCT4gZXhwZWN0aW5nIHN1Y2Nlc3Mgb2YgMjM0NS4yICdcJyd0ZXN0IHdpdGggb3V0cHV0J1wnJzogZWNobyBmb28KKwk+IGZvbworCT4gb2sgMiAtIHRlc3Qgd2l0aCBvdXRwdXQKKwk+IFoKKwk+IG5vdCBvayAzIC0gZmFpbGluZyB0ZXN0CisJPiAjCWZhbHNlCisJPiAjIGZhaWxlZCAxIGFtb25nIDMgdGVzdChzKQorCT4gMS4uMworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfU0tJUF9URVNUUycgIgorCSgKKwkJR0lUX1NLSVBfVEVTVFM9J2dpdC4yJyAmJiBleHBvcnQgR0lUX1NLSVBfVEVTVFMgJiYKKwkJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IGdpdC1za2lwLXRlc3RzLWJhc2ljIFwKKwkJCSdHSVRfU0tJUF9URVNUUycgPDwtXFxFT0YgJiYKKwkJZm9yIGkgaW4gMSAyIDMKKwkJZG8KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCQlkb25lCisJCXRlc3RfZG9uZQorCQlFT0YKKwkJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtYmFzaWMgPDwtXFxFT0YKKwkJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJCT4gb2sgMiAjIHNraXAgcGFzc2luZyB0ZXN0ICMyIChHSVRfU0tJUF9URVNUUykKKwkJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJCT4gIyBwYXNzZWQgYWxsIDMgdGVzdChzKQorCQk+IDEuLjMKKwkJRU9GCisJKQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfU0tJUF9URVNUUyBzZXZlcmFsIHRlc3RzJyAiCisJKAorCQlHSVRfU0tJUF9URVNUUz0nZ2l0LjIgZ2l0LjUnICYmIGV4cG9ydCBHSVRfU0tJUF9URVNUUyAmJgorCQlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtc2V2ZXJhbCBcCisJCQknR0lUX1NLSVBfVEVTVFMgc2V2ZXJhbCB0ZXN0cycgPDwtXFxFT0YgJiYKKwkJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwkJZG8KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCQlkb25lCisJCXRlc3RfZG9uZQorCQlFT0YKKwkJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtc2V2ZXJhbCA8PC1cXEVPRgorCQk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwkJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwkJPiBvayA0IC0gcGFzc2luZyB0ZXN0ICM0CisJCT4gb2sgNSAjIHNraXAgcGFzc2luZyB0ZXN0ICM1IChHSVRfU0tJUF9URVNUUykKKwkJPiBvayA2IC0gcGFzc2luZyB0ZXN0ICM2CisJCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCQk+IDEuLjYKKwkJRU9GCisJKQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfU0tJUF9URVNUUyBzaCBwYXR0ZXJuJyAiCisJKAorCQlHSVRfU0tJUF9URVNUUz0nZ2l0LlsyLTVdJyAmJiBleHBvcnQgR0lUX1NLSVBfVEVTVFMgJiYKKwkJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IGdpdC1za2lwLXRlc3RzLXNoLXBhdHRlcm4gXAorCQkJJ0dJVF9TS0lQX1RFU1RTIHNoIHBhdHRlcm4nIDw8LVxcRU9GICYmCisJCWZvciBpIGluIDEgMiAzIDQgNSA2CisJCWRvCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwkJZG9uZQorCQl0ZXN0X2RvbmUKKwkJRU9GCisJCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IGdpdC1za2lwLXRlc3RzLXNoLXBhdHRlcm4gPDwtXFxFT0YKKwkJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJCT4gb2sgMiAjIHNraXAgcGFzc2luZyB0ZXN0ICMyIChHSVRfU0tJUF9URVNUUykKKwkJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDQgIyBza2lwIHBhc3NpbmcgdGVzdCAjNCAoR0lUX1NLSVBfVEVTVFMpCisJCT4gb2sgNSAjIHNraXAgcGFzc2luZyB0ZXN0ICM1IChHSVRfU0tJUF9URVNUUykKKwkJPiBvayA2IC0gcGFzc2luZyB0ZXN0ICM2CisJCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCQk+IDEuLjYKKwkJRU9GCisJKQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfU0tJUF9URVNUUyBlbnRpcmUgc3VpdGUnICIKKwkoCisJCUdJVF9TS0lQX1RFU1RTPSdnaXQnICYmIGV4cG9ydCBHSVRfU0tJUF9URVNUUyAmJgorCQlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtZW50aXJlLXN1aXRlIFwKKwkJCSdHSVRfU0tJUF9URVNUUyBlbnRpcmUgc3VpdGUnIDw8LVxcRU9GICYmCisJCWZvciBpIGluIDEgMiAzCisJCWRvCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwkJZG9uZQorCQl0ZXN0X2RvbmUKKwkJRU9GCisJCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IGdpdC1za2lwLXRlc3RzLWVudGlyZS1zdWl0ZSA8PC1cXEVPRgorCQk+IDEuLjAgIyBTS0lQIHNraXAgYWxsIHRlc3RzIGluIGdpdAorCQlFT0YKKwkpCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TS0lQX1RFU1RTIGRvZXMgbm90IHNraXAgdW5tYXRjaGVkIHN1aXRlJyAiCisJKAorCQlHSVRfU0tJUF9URVNUUz0nbm90Z2l0JyAmJiBleHBvcnQgR0lUX1NLSVBfVEVTVFMgJiYKKwkJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IGdpdC1za2lwLXRlc3RzLXVubWF0Y2hlZC1zdWl0ZSBcCisJCQknR0lUX1NLSVBfVEVTVFMgZG9lcyBub3Qgc2tpcCB1bm1hdGNoZWQgc3VpdGUnIDw8LVxcRU9GICYmCisJCWZvciBpIGluIDEgMiAzCisJCWRvCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwkJZG9uZQorCQl0ZXN0X2RvbmUKKwkJRU9GCisJCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IGdpdC1za2lwLXRlc3RzLXVubWF0Y2hlZC1zdWl0ZSA8PC1cXEVPRgorCQk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwkJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCQk+ICMgcGFzc2VkIGFsbCAzIHRlc3QocykKKwkJPiAxLi4zCisJCUVPRgorCSkKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gYmFzaWMnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWJhc2ljIFwKKwkJJy0tcnVuIGJhc2ljJyAtLXJ1bj0nMSAzIDUnIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWJhc2ljIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKC0tcnVuKQorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCT4gb2sgNCAjIHNraXAgcGFzc2luZyB0ZXN0ICM0ICgtLXJ1bikKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIHdpdGggYSByYW5nZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tcmFuZ2UgXAorCQknLS1ydW4gd2l0aCBhIHJhbmdlJyAtLXJ1bj0nMS0zJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1yYW5nZSA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCT4gb2sgNCAjIHNraXAgcGFzc2luZyB0ZXN0ICM0ICgtLXJ1bikKKwk+IG9rIDUgIyBza2lwIHBhc3NpbmcgdGVzdCAjNSAoLS1ydW4pCisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biB3aXRoIHR3byByYW5nZXMnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXR3by1yYW5nZXMgXAorCQknLS1ydW4gd2l0aCB0d28gcmFuZ2VzJyAtLXJ1bj0nMS0yIDUtNicgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tdHdvLXJhbmdlcyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAjIHNraXAgcGFzc2luZyB0ZXN0ICMzICgtLXJ1bikKKwk+IG9rIDQgIyBza2lwIHBhc3NpbmcgdGVzdCAjNCAoLS1ydW4pCisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2IC0gcGFzc2luZyB0ZXN0ICM2CisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIHdpdGggYSBsZWZ0IG9wZW4gcmFuZ2UnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWxlZnQtb3Blbi1yYW5nZSBcCisJCSctLXJ1biB3aXRoIGEgbGVmdCBvcGVuIHJhbmdlJyAtLXJ1bj0nLTMnIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWxlZnQtb3Blbi1yYW5nZSA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCT4gb2sgNCAjIHNraXAgcGFzc2luZyB0ZXN0ICM0ICgtLXJ1bikKKwk+IG9rIDUgIyBza2lwIHBhc3NpbmcgdGVzdCAjNSAoLS1ydW4pCisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biB3aXRoIGEgcmlnaHQgb3BlbiByYW5nZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tcmlnaHQtb3Blbi1yYW5nZSBcCisJCSctLXJ1biB3aXRoIGEgcmlnaHQgb3BlbiByYW5nZScgLS1ydW49JzQtJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1yaWdodC1vcGVuLXJhbmdlIDw8LVxcRU9GCisJPiBvayAxICMgc2tpcCBwYXNzaW5nIHRlc3QgIzEgKC0tcnVuKQorCT4gb2sgMiAjIHNraXAgcGFzc2luZyB0ZXN0ICMyICgtLXJ1bikKKwk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoLS1ydW4pCisJPiBvayA0IC0gcGFzc2luZyB0ZXN0ICM0CisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2IC0gcGFzc2luZyB0ZXN0ICM2CisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIHdpdGggYmFzaWMgbmVnYXRpb24nICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWJhc2ljLW5lZyBcCisJCSctLXJ1biB3aXRoIGJhc2ljIG5lZ2F0aW9uJyAtLXJ1bj0nIichMyciJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1iYXNpYy1uZWcgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoLS1ydW4pCisJPiBvayA0IC0gcGFzc2luZyB0ZXN0ICM0CisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2IC0gcGFzc2luZyB0ZXN0ICM2CisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIHdpdGggdHdvIG5lZ2F0aW9ucycgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tdHdvLW5lZyBcCisJCSctLXJ1biB3aXRoIHR3byBuZWdhdGlvbnMnIC0tcnVuPSciJyEzICE2JyInIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXR3by1uZWcgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoLS1ydW4pCisJPiBvayA0IC0gcGFzc2luZyB0ZXN0ICM0CisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBhIHJhbmdlIGFuZCBuZWdhdGlvbicgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tcmFuZ2UtYW5kLW5lZyBcCisJCSctLXJ1biBhIHJhbmdlIGFuZCBuZWdhdGlvbicgLS1ydW49JyInLTQgITInIicgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tcmFuZ2UtYW5kLW5lZyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAjIHNraXAgcGFzc2luZyB0ZXN0ICMyICgtLXJ1bikKKwk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwk+IG9rIDUgIyBza2lwIHBhc3NpbmcgdGVzdCAjNSAoLS1ydW4pCisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biByYW5nZSBuZWdhdGlvbicgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tcmFuZ2UtbmVnIFwKKwkJJy0tcnVuIHJhbmdlIG5lZ2F0aW9uJyAtLXJ1bj0nIichMS0zJyInIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXJhbmdlLW5lZyA8PC1cXEVPRgorCT4gb2sgMSAjIHNraXAgcGFzc2luZyB0ZXN0ICMxICgtLXJ1bikKKwk+IG9rIDIgIyBza2lwIHBhc3NpbmcgdGVzdCAjMiAoLS1ydW4pCisJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKC0tcnVuKQorCT4gb2sgNCAtIHBhc3NpbmcgdGVzdCAjNAorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAtIHBhc3NpbmcgdGVzdCAjNgorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBpbmNsdWRlLCBleGNsdWRlIGFuZCBpbmNsdWRlJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1pbmMtbmVnLWluYyBcCisJCSctLXJ1biBpbmNsdWRlLCBleGNsdWRlIGFuZCBpbmNsdWRlJyBcCisJCS0tcnVuPSciJzEtNSAhMS0zIDInIicgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4taW5jLW5lZy1pbmMgPDwtXFxFT0YKKwk+IG9rIDEgIyBza2lwIHBhc3NpbmcgdGVzdCAjMSAoLS1ydW4pCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKC0tcnVuKQorCT4gb2sgNCAtIHBhc3NpbmcgdGVzdCAjNAorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gaW5jbHVkZSwgZXhjbHVkZSBhbmQgaW5jbHVkZSwgY29tbWEgc2VwYXJhdGVkJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1pbmMtbmVnLWluYy1jb21tYSBcCisJCSctLXJ1biBpbmNsdWRlLCBleGNsdWRlIGFuZCBpbmNsdWRlLCBjb21tYSBzZXBhcmF0ZWQnIFwKKwkJLS1ydW49MS01LFwhMS0zLDIgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4taW5jLW5lZy1pbmMtY29tbWEgPDwtXFxFT0YKKwk+IG9rIDEgIyBza2lwIHBhc3NpbmcgdGVzdCAjMSAoLS1ydW4pCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKC0tcnVuKQorCT4gb2sgNCAtIHBhc3NpbmcgdGVzdCAjNAorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gZXhjbHVkZSBhbmQgaW5jbHVkZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tbmVnLWluYyBcCisJCSctLXJ1biBleGNsdWRlIGFuZCBpbmNsdWRlJyBcCisJCS0tcnVuPSciJyEzLSA1JyInIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLW5lZy1pbmMgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoLS1ydW4pCisJPiBvayA0ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzQgKC0tcnVuKQorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gZW1wdHkgc2VsZWN0b3JzJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1lbXB0eS1zZWwgXAorCQknLS1ydW4gZW1wdHkgc2VsZWN0b3JzJyBcCisJCS0tcnVuPScxLCwzLCwsNScgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tZW1wdHktc2VsIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKC0tcnVuKQorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCT4gb2sgNCAjIHNraXAgcGFzc2luZyB0ZXN0ICM0ICgtLXJ1bikKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGludmFsaWQgcmFuZ2Ugc3RhcnQnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIHJ1bi1pbnYtcmFuZ2Utc3RhcnQgXAorCQknLS1ydW4gaW52YWxpZCByYW5nZSBzdGFydCcgXAorCQktLXJ1bj0nYS01JyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgIzFcIiAndHJ1ZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdF9lcnIgcnVuLWludi1yYW5nZS1zdGFydCBcCisJCTw8LVxcRU9GX09VVCAzPDwtXFxFT0ZfRVJSCisJPiBGQVRBTDogVW5leHBlY3RlZCBleGl0IHdpdGggY29kZSAxCisJRU9GX09VVAorCT4gZXJyb3I6IC0tcnVuOiBpbnZhbGlkIG5vbi1udW1lcmljIGluIHJhbmdlIHN0YXJ0OiAnYS01JworCUVPRl9FUlIKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gaW52YWxpZCByYW5nZSBlbmQnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIHJ1bi1pbnYtcmFuZ2UtZW5kIFwKKwkJJy0tcnVuIGludmFsaWQgcmFuZ2UgZW5kJyBcCisJCS0tcnVuPScxLXonIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjMVwiICd0cnVlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBydW4taW52LXJhbmdlLWVuZCBcCisJCTw8LVxcRU9GX09VVCAzPDwtXFxFT0ZfRVJSCisJPiBGQVRBTDogVW5leHBlY3RlZCBleGl0IHdpdGggY29kZSAxCisJRU9GX09VVAorCT4gZXJyb3I6IC0tcnVuOiBpbnZhbGlkIG5vbi1udW1lcmljIGluIHJhbmdlIGVuZDogJzEteicKKwlFT0ZfRVJSCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGludmFsaWQgc2VsZWN0b3InICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIHJ1bi1pbnYtc2VsZWN0b3IgXAorCQknLS1ydW4gaW52YWxpZCBzZWxlY3RvcicgXAorCQktLXJ1bj0nMT8nIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjMVwiICd0cnVlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBydW4taW52LXNlbGVjdG9yIFwKKwkJPDwtXFxFT0ZfT1VUIDM8PC1cXEVPRl9FUlIKKwk+IEZBVEFMOiBVbmV4cGVjdGVkIGV4aXQgd2l0aCBjb2RlIDEKKwlFT0ZfT1VUCisJPiBlcnJvcjogLS1ydW46IGludmFsaWQgbm9uLW51bWVyaWMgaW4gdGVzdCBzZWxlY3RvcjogJzE/JworCUVPRl9FUlIKKyIKKworCit0ZXN0X3NldF9wcmVyZXEgSEFWRUlUCitoYXZlaXQ9bm8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSEFWRUlUICd0ZXN0IHJ1bnMgaWYgcHJlcmVxdWlzaXRlIGlzIHNhdGlzZmllZCcgJworCXRlc3RfaGF2ZV9wcmVyZXEgSEFWRUlUICYmCisJaGF2ZWl0PXllcworJworZG9udGhhdmVpdD15ZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRE9OVEhBVkVJVCAndW5tZXQgcHJlcmVxdWlzaXRlIGNhdXNlcyB0ZXN0IHRvIGJlIHNraXBwZWQnICcKKwlkb250aGF2ZWl0PW5vCisnCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMIiAtYSAkaGF2ZWl0JGRvbnRoYXZlaXQgIT0geWVzeWVzCit0aGVuCisJc2F5ICJidWcgaW4gdGVzdCBmcmFtZXdvcms6IHByZXJlcXVpc2l0ZSB0YWdzIGRvIG5vdCB3b3JrIHJlbGlhYmx5IgorCWV4aXQgMQorZmkKKwordGVzdF9zZXRfcHJlcmVxIEhBVkVUSElTCitoYXZlaXQ9bm8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSEFWRVRISVMsSEFWRUlUICd0ZXN0IHJ1bnMgaWYgcHJlcmVxdWlzaXRlcyBhcmUgc2F0aXNmaWVkJyAnCisJdGVzdF9oYXZlX3ByZXJlcSBIQVZFSVQgJiYKKwl0ZXN0X2hhdmVfcHJlcmVxIEhBVkVUSElTICYmCisJaGF2ZWl0PXllcworJworZG9udGhhdmVpdD15ZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSEFWRUlULERPTlRIQVZFSVQgJ3VubWV0IHByZXJlcXVpc2l0ZXMgY2F1c2VzIHRlc3QgdG8gYmUgc2tpcHBlZCcgJworCWRvbnRoYXZlaXQ9bm8KKycKK2RvbnRoYXZlaXRlaXRoZXI9eWVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERPTlRIQVZFSVQsSEFWRUlUICd1bm1ldCBwcmVyZXF1aXNpdGVzIGNhdXNlcyB0ZXN0IHRvIGJlIHNraXBwZWQnICcKKwlkb250aGF2ZWl0ZWl0aGVyPW5vCisnCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMIiAtYSAkaGF2ZWl0JGRvbnRoYXZlaXQkZG9udGhhdmVpdGVpdGhlciAhPSB5ZXN5ZXN5ZXMKK3RoZW4KKwlzYXkgImJ1ZyBpbiB0ZXN0IGZyYW1ld29yazogbXVsdGlwbGUgcHJlcmVxdWlzaXRlIHRhZ3MgZG8gbm90IHdvcmsgcmVsaWFibHkiCisJZXhpdCAxCitmaQorCit0ZXN0X2xhenlfcHJlcmVxIExBWllfVFJVRSB0cnVlCitoYXZldHJ1ZT1ubwordGVzdF9leHBlY3Rfc3VjY2VzcyBMQVpZX1RSVUUgJ3Rlc3QgcnVucyBpZiBsYXp5IHByZXJlcSBpcyBzYXRpc2ZpZWQnICcKKwloYXZldHJ1ZT15ZXMKKycKK2RvbnRoYXZldHJ1ZT15ZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUxBWllfVFJVRSAnbWlzc2luZyBsYXp5IHByZXJlcXMgc2tpcCB0ZXN0cycgJworCWRvbnRoYXZldHJ1ZT1ubworJworCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMIiAtYSAiJGhhdmV0cnVlJGRvbnRoYXZldHJ1ZSIgIT0geWVzeWVzCit0aGVuCisJc2F5ICdidWcgaW4gdGVzdCBmcmFtZXdvcms6IGxhenkgcHJlcmVxdWlzaXRlcyBkbyBub3Qgd29yaycKKwlleGl0IDEKK2ZpCisKK3Rlc3RfbGF6eV9wcmVyZXEgTEFaWV9GQUxTRSBmYWxzZQorbm90aGF2ZWZhbHNlPW5vCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFMQVpZX0ZBTFNFICduZWdhdGl2ZSBsYXp5IHByZXJlcXMgY2hlY2tlZCcgJworCW5vdGhhdmVmYWxzZT15ZXMKKycKK2hhdmVmYWxzZT15ZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTEFaWV9GQUxTRSAnbWlzc2luZyBuZWdhdGl2ZSBsYXp5IHByZXJlcXMgd2lsbCBza2lwJyAnCisJaGF2ZWZhbHNlPW5vCisnCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUwiIC1hICIkbm90aGF2ZWZhbHNlJGhhdmVmYWxzZSIgIT0geWVzeWVzCit0aGVuCisJc2F5ICdidWcgaW4gdGVzdCBmcmFtZXdvcms6IG5lZ2F0aXZlIGxhenkgcHJlcmVxdWlzaXRlcyBkbyBub3Qgd29yaycKKwlleGl0IDEKK2ZpCisKK2NsZWFuPW5vCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0cyBjbGVhbiB1cCBhZnRlciB0aGVtc2VsdmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFuPXllcworJworCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMIiAtYSAkY2xlYW4gIT0geWVzCit0aGVuCisJc2F5ICJidWcgaW4gdGVzdCBmcmFtZXdvcms6IGJhc2ljIGNsZWFudXAgY29tbWFuZCBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5IgorCWV4aXQgMQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdHMgY2xlYW4gdXAgZXZlbiBvbiBmYWlsdXJlcycgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgXAorCQlmYWlsaW5nLWNsZWFudXAgJ0ZhaWxpbmcgdGVzdHMgd2l0aCBjbGVhbnVwIGNvbW1hbmRzJyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RzIGNsZWFuIHVwIGV2ZW4gYWZ0ZXIgYSBmYWlsdXJlJyAnCisJCXRvdWNoIGNsZWFuLWFmdGVyLWZhaWx1cmUgJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIGNsZWFuLWFmdGVyLWZhaWx1cmUgJiYKKwkJKGV4aXQgMSkKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHVyZSB0byBjbGVhbiB1cCBjYXVzZXMgdGhlIHRlc3QgdG8gZmFpbCcgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgXCIoZXhpdCAyKVwiCisJJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IGZhaWxpbmctY2xlYW51cCA8PC1cXEVPRgorCT4gbm90IG9rIDEgLSB0ZXN0cyBjbGVhbiB1cCBldmVuIGFmdGVyIGEgZmFpbHVyZQorCT4gIwlaCisJPiAjCXRvdWNoIGNsZWFuLWFmdGVyLWZhaWx1cmUgJiYKKwk+ICMJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIGNsZWFuLWFmdGVyLWZhaWx1cmUgJiYKKwk+ICMJKGV4aXQgMSkKKwk+ICMJWgorCT4gbm90IG9rIDIgLSBmYWlsdXJlIHRvIGNsZWFuIHVwIGNhdXNlcyB0aGUgdGVzdCB0byBmYWlsCisJPiAjCVoKKwk+ICMJdGVzdF93aGVuX2ZpbmlzaGVkIFwiKGV4aXQgMilcIgorCT4gIwlaCisJPiAjIGZhaWxlZCAyIGFtb25nIDIgdGVzdChzKQorCT4gMS4uMgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0X2F0ZXhpdCBpcyBydW4nICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIFwKKwkJYXRleGl0LWNsZWFudXAgJ1J1biBhdGV4aXQgY29tbWFuZHMnIC1pIDw8LVxcRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdHMgY2xlYW4gdXAgZXZlbiBhZnRlciBhIGZhaWx1cmUnICcKKwkJPiAuLi8uLi9jbGVhbi1hdGV4aXQgJiYKKwkJdGVzdF9hdGV4aXQgcm0gLi4vLi4vY2xlYW4tYXRleGl0ICYmCisJCT4gLi4vLi4vYWxzby1jbGVhbi1hdGV4aXQgJiYKKwkJdGVzdF9hdGV4aXQgcm0gLi4vLi4vYWxzby1jbGVhbi1hdGV4aXQgJiYKKwkJPiAuLi8uLi9kb250LWNsZWFuLWF0ZXhpdCAmJgorCQkoZXhpdCAxKQorCScKKwl0ZXN0X2RvbmUKKwlFT0YKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkb250LWNsZWFuLWF0ZXhpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGNsZWFuLWF0ZXhpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFsc28tY2xlYW4tYXRleGl0CisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Rfb2lkIHNldHVwJyAnCisJdGVzdF9vaWRfaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0X29pZCBwcm92aWRlcyBzYW5lIGluZm8gYnkgZGVmYXVsdCcgJworCXRlc3Rfb2lkIHplcm8gPmFjdHVhbCAmJgorCWdyZXAgIl4wMCpcJCIgYWN0dWFsICYmCisJcmF3c3o9IiQodGVzdF9vaWQgcmF3c3opIiAmJgorCWhleHN6PSIkKHRlc3Rfb2lkIGhleHN6KSIgJiYKKwl0ZXN0ICIkaGV4c3oiIC1lcSAkKHdjIC1jIDxhY3R1YWwpICYmCisJdGVzdCAkKCggJHJhd3N6ICogMikpIC1lcSAiJGhleHN6IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0X29pZCBjYW4gbG9vayB1cCBkYXRhIGZvciBTSEEtMScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9kZXRlY3RfaGFzaCIgJiYKKwl0ZXN0X3NldF9oYXNoIHNoYTEgJiYKKwl0ZXN0X29pZCB6ZXJvID5hY3R1YWwgJiYKKwlncmVwICJeMDAqXCQiIGFjdHVhbCAmJgorCXJhd3N6PSIkKHRlc3Rfb2lkIHJhd3N6KSIgJiYKKwloZXhzej0iJCh0ZXN0X29pZCBoZXhzeikiICYmCisJdGVzdCAkKHdjIC1jIDxhY3R1YWwpIC1lcSA0MCAmJgorCXRlc3QgIiRyYXdzeiIgLWVxIDIwICYmCisJdGVzdCAiJGhleHN6IiAtZXEgNDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9vaWQgY2FuIGxvb2sgdXAgZGF0YSBmb3IgU0hBLTI1NicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9kZXRlY3RfaGFzaCIgJiYKKwl0ZXN0X3NldF9oYXNoIHNoYTI1NiAmJgorCXRlc3Rfb2lkIHplcm8gPmFjdHVhbCAmJgorCWdyZXAgIl4wMCpcJCIgYWN0dWFsICYmCisJcmF3c3o9IiQodGVzdF9vaWQgcmF3c3opIiAmJgorCWhleHN6PSIkKHRlc3Rfb2lkIGhleHN6KSIgJiYKKwl0ZXN0ICQod2MgLWMgPGFjdHVhbCkgLWVxIDY0ICYmCisJdGVzdCAiJHJhd3N6IiAtZXEgMzIgJiYKKwl0ZXN0ICIkaGV4c3oiIC1lcSA2NAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0X2Jvb2xfZW52JyAnCisJKAorCQlzYW5lX3Vuc2V0IGVudnZhciAmJgorCisJCXRlc3RfYm9vbF9lbnYgZW52dmFyIHRydWUgJiYKKwkJISB0ZXN0X2Jvb2xfZW52IGVudnZhciBmYWxzZSAmJgorCisJCWVudnZhcj0gJiYKKwkJZXhwb3J0IGVudnZhciAmJgorCQkhIHRlc3RfYm9vbF9lbnYgZW52dmFyIHRydWUgJiYKKwkJISB0ZXN0X2Jvb2xfZW52IGVudnZhciBmYWxzZSAmJgorCisJCWVudnZhcj10cnVlICYmCisJCXRlc3RfYm9vbF9lbnYgZW52dmFyIHRydWUgJiYKKwkJdGVzdF9ib29sX2VudiBlbnZ2YXIgZmFsc2UgJiYKKworCQllbnZ2YXI9ZmFsc2UgJiYKKwkJISB0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICYmCisJCSEgdGVzdF9ib29sX2VudiBlbnZ2YXIgZmFsc2UgJiYKKworCQllbnZ2YXI9aW52YWxpZCAmJgorCQkjIFdoZW4gZW5jb3VudGVyaW5nIGFuIGludmFsaWQgYm9vbCB2YWx1ZSwgdGVzdF9ib29sX2VudgorCQkjIHByaW50cyBpdHMgZXJyb3IgbWVzc2FnZSB0byB0aGUgb3JpZ2luYWwgc3RkZXJyIG9mIHRoZQorCQkjIHRlc3Qgc2NyaXB0LCBoZW5jZSB0aGUgcmVkaXJlY3Rpb24gb2YgZmQgNywgYW5kIGFib3J0cworCQkjIHdpdGggImV4aXQgMSIsIGhlbmNlIHRoZSBzdWJzaGVsbC4KKwkJISAoIHRlc3RfYm9vbF9lbnYgZW52dmFyIHRydWUgKSA3PmVyciAmJgorCQlncmVwICJlcnJvcjogdGVzdF9ib29sX2VudiByZXF1aXJlcyBib29sIHZhbHVlcyIgZXJyICYmCisKKwkJZW52dmFyPXRydWUgJiYKKwkJISAoIHRlc3RfYm9vbF9lbnYgZW52dmFyIGludmFsaWQgKSA3PmVyciAmJgorCQlncmVwICJlcnJvcjogdGVzdF9ib29sX2VudiByZXF1aXJlcyBib29sIHZhbHVlcyIgZXJyCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJhc2ljcyBvZiB0aGUgYmFzaWNzCisKK3Rlc3Rfb2lkX2NhY2hlIDw8XEVPRgorcGF0aDBmIHNoYTE6Zjg3MjkwZjhlYjJjYmJlYTc4NTcyMTQ0NTlhMDczOTkyN2VhYjE1NAorcGF0aDBmIHNoYTI1Njo2MzgxMDZhZjdjMzhiZTA1NmYzMjEyY2JkN2FjNjViYzFiYWM3NGY0MjBjYTVhNDM2ZmYwMDZhOWQwMjVkMTdkCisKK3BhdGgwcyBzaGExOjE1YTk4NDMzYWUzMzExNGIwODVmM2ViM2JiMDNiODMyYjMxODBhMDEKK3BhdGgwcyBzaGEyNTY6M2EyNGNjNTNjZjY4ZWRkZGFjNDkwYmJmOTRhNDE4YTUyOTMyMTMwNTQxMzYxZjY4NWRmNjg1ZTQxZGQ2YzM2MworCitwYXRoMmYgc2hhMTozZmVmZjk0OWVkMDBhNjJkOWY3YWY5N2MxNWNkOGEzMDU5NWU3YWM3CitwYXRoMmYgc2hhMjU2OjJhN2YzNjU3MWM2ZmRiYWYwZTNmNjI3NTFhMGIyNWEzZjRjNTRkMmQxMTM3YjNmNGFmOWNiNzk0YmI0OThlNWYKKworcGF0aDJzIHNoYTE6ZDhjZTE2MWFkZGM1MTczODY3YTNjM2M3MzA5MjQzODhkYWVkYmMzOAorcGF0aDJzIHNoYTI1NjoxOGZkNjExYjc4N2MyZTkzOGRkY2MyNDhmYWJlNGQ2NmExNTBmOTM2NDc2M2U5ZWMxMzNkZDAxZDViYjdjNjVhCisKK3BhdGgyZCBzaGExOjU4YTA5YzIzZTJjYTE1MjE5M2YyNzg2ZTA2OTg2YjdiNjcxMmJkYmUKK3BhdGgyZCBzaGEyNTY6MDBlNGIzMmI5NmU3ZTNkNjVkNzkxMTJkY2JlYTUzMjM4YTIyNzE1Zjg5NjkzM2E2MmI4MTEzNzdlMjY1MGMxNworCitwYXRoM2Ygc2hhMTowYWEzNGNhZTY4ZDA4Nzg1NzhhZDExOWM4NmNhMmI1ZWQ1YjI4Mzc2CitwYXRoM2Ygc2hhMjU2OjA5ZjU4NjE2Yjk1MWJkNTcxYjhjYjlkYzc2ZDM3MmZiYjA5YWI5OWRiMjM5M2Y1YWIzMTg5ZDI2YzQ1MDk5YWQKKworcGF0aDNzIHNoYTE6ODU5OTEwMzk2OWI0M2FmZjdlNDMwZWZlYTc5Y2E0NjM2NDY2Nzk0ZgorcGF0aDNzIHNoYTI1NjpmY2UxYWVkMDg3YzA1MzMwNmYzZjc0YzMyYzFhODM4YzY2MmJiYzQ1NTFhN2FjMjQyMGY1ZDZlYjA2MTM3NGQwCisKK3BhdGgzZCBzaGExOjIxYWU4MjY5Y2FjYmU1N2FlMDkxMzhkY2MzYTI4ODdmOTA0ZDAyYjMKK3BhdGgzZCBzaGEyNTY6OWI2MDQ5N2JlOTU5Y2I4MzBiZjNmMGRjODJiY2M5YWQ5ZTkyNWEyNGU0ODA4MzdhZGU0NmIyMjk1ZTQ3ZWZlMQorCitzdWJwM2Ygc2hhMTowMGZiNTkwOGNiOTdjMjU2NGE5NzgzYzBjNjQwODczMzNiM2I0NjRmCitzdWJwM2Ygc2hhMjU2OmExYTllMTY5OThjOTg4NDUzZjE4MzEzZDEwMzc1ZWUxZDBkZGVmZTc1N2U3MTBkY2FlMGQ2NmFhMWUwYzU4YjMKKworc3VicDNzIHNoYTE6NjY0OWExZWJlOWU5ZjFjNTUzYjY2ZjVhNmU3NDEzNmEwN2NjYzU3Yworc3VicDNzIHNoYTI1Njo4MTc1OWQ5ZjVlOTNjNjU0NmVjZmNhZGI1NjBjMWZmMDU3MzE0YjA5ZjkzZmU4ZWMwNmUyZDg2MTBkMzRlZjEwCisKK3N1YnAzZCBzaGExOjNjNWU1Mzk5ZjNhMzMzZWRkZWNjZTdhOWI5NDY1YjYzZjY1ZjUxZTIKK3N1YnAzZCBzaGEyNTY6NzZiNGVmNDgyZDRmYTFjNzU0MzkwMzQ0Y2YzODUxYzdmODgzYjI3Y2Y5YmM5OTljNjU0NzkyOGM0NmFlYWZiNworCityb290IHNoYTE6MDg3NzA0YTk2YmFmMWMyZDFjODY5YThiMDg0NDgxZTEyMWM4OGI1Ygorcm9vdCBzaGEyNTY6OTQ4MWI1MmFiYWIxYjJmZmVlZGJmOWRlNjNjZTQyMmI5MjlmMTc5YzFiOThmZjdiZWU1ZjhmMWJjMDcxMDc1MQorCitzaW1wbGV0cmVlIHNoYTE6N2JiOTQzNTU5YTMwNWJkZDZiZGVlMmNlZjZlNWRmMjQxM2MzZDMwYQorc2ltcGxldHJlZSBzaGEyNTY6MTcxMGMwN2E2Yzg2ZjlhM2M3Mzc2MzY0ZGYwNGM0N2VlMzllNWE1ZTIyMWZjZGQ4NGI3NDNiYzliYjdlMmJjNQorRU9GCisKKyMgdXBkYXRpbmcgYSBuZXcgZmlsZSB3aXRob3V0IC0tYWRkIHNob3VsZCBmYWlsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCB3aXRob3V0IC0tYWRkIHNob3VsZCBmYWlsIGFkZGluZycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggc2hvdWxkLWJlLWVtcHR5CisnCisKKyMgYW5kIHdpdGggLS1hZGQgaXQgc2hvdWxkIHN1Y2NlZWQsIGV2ZW4gaWYgaXQgaXMgZW1wdHkgKGl0IHVzZWQgdG8gZmFpbCkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdXBkYXRlLWluZGV4IHdpdGggLS1hZGQgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHNob3VsZC1iZS1lbXB0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHRyZWUgb3V0IHdpdGggZ2l0IHdyaXRlLXRyZWUnICcKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCisnCisKKyMgd2Uga25vdyB0aGUgc2hhcGUgYW5kIGNvbnRlbnRzIG9mIHRoZSB0cmVlIGFuZCBrbm93IHRoZSBvYmplY3QgSUQgZm9yIGl0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIG9mIGEga25vd24gdHJlZScgJworCXRlc3QgIiR0cmVlIiA9ICIkKHRlc3Rfb2lkIHNpbXBsZXRyZWUpIgorICAgICcKKworIyBSZW1vdmluZyBwYXRocy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggd2l0aG91dCAtLXJlbW92ZSBzaG91bGQgZmFpbCByZW1vdmluZycgJworCXJtIC1mIHNob3VsZC1iZS1lbXB0eSBmdWxsLW9mLWRpcmVjdG9yaWVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCBzaG91bGQtYmUtZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCB3aXRoIC0tcmVtb3ZlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgc2hvdWxkLWJlLWVtcHR5CisnCisKKyMgRW1wdHkgdHJlZSBjYW4gYmUgd3JpdHRlbiB3aXRoIHJlY2VudCB3cml0ZS10cmVlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHdyaXRlLXRyZWUgc2hvdWxkIGJlIGFibGUgdG8gd3JpdGUgYW4gZW1wdHkgdHJlZScgJworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIG9mIGEga25vd24gdHJlZScgJworCXRlc3QgIiR0cmVlIiA9ICRFTVBUWV9UUkVFCisnCisKKyMgVmFyaW91cyB0eXBlcyBvZiBvYmplY3RzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGluZyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMgd2l0aCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkJyAnCisJbWtkaXIgcGF0aDIgcGF0aDMgcGF0aDMvc3VicDMgJiYKKwlwYXRocz0icGF0aDAgcGF0aDIvZmlsZTIgcGF0aDMvZmlsZTMgcGF0aDMvc3VicDMvZmlsZTMiICYmCisJKAorCQlmb3IgcCBpbiAkcGF0aHMKKwkJZG8KKwkJCWVjaG8gImhlbGxvICRwIiA+JHAgfHwgZXhpdCAxCisJCQl0ZXN0X2xuX3NfYWRkICJoZWxsbyAkcCIgJHtwfXN5bSB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwlmaW5kIHBhdGgqICEgLXR5cGUgZCAtcHJpbnQgfCB4YXJncyBnaXQgdXBkYXRlLWluZGV4IC0tYWRkCisnCisKKyMgU2hvdyB0aGVtIGFuZCBzZWUgdGhhdCBtYXRjaGVzIHdoYXQgd2UgZXhwZWN0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyBzdGFnZSB3aXRoIGdpdCBscy1maWxlcyAtLXN0YWdlJyAnCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgZ2l0IGxzLWZpbGVzIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkxMDA2NDQgJCh0ZXN0X29pZCBwYXRoMGYpIDAJcGF0aDAKKwkxMjAwMDAgJCh0ZXN0X29pZCBwYXRoMHMpIDAJcGF0aDBzeW0KKwkxMDA2NDQgJCh0ZXN0X29pZCBwYXRoMmYpIDAJcGF0aDIvZmlsZTIKKwkxMjAwMDAgJCh0ZXN0X29pZCBwYXRoMnMpIDAJcGF0aDIvZmlsZTJzeW0KKwkxMDA2NDQgJCh0ZXN0X29pZCBwYXRoM2YpIDAJcGF0aDMvZmlsZTMKKwkxMjAwMDAgJCh0ZXN0X29pZCBwYXRoM3MpIDAJcGF0aDMvZmlsZTNzeW0KKwkxMDA2NDQgJCh0ZXN0X29pZCBzdWJwM2YpIDAJcGF0aDMvc3VicDMvZmlsZTMKKwkxMjAwMDAgJCh0ZXN0X29pZCBzdWJwM3MpIDAJcGF0aDMvc3VicDMvZmlsZTNzeW0KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZScgJworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkdHJlZSIgPSAiJCh0ZXN0X29pZCByb290KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0cmVlIHdpdGggZ2l0IGxzLXRyZWUnICcKKyAgICBnaXQgbHMtdHJlZSAkdHJlZSA+Y3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtdHJlZSBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJMTAwNjQ0IGJsb2IgJCh0ZXN0X29pZCBwYXRoMGYpCXBhdGgwCisJMTIwMDAwIGJsb2IgJCh0ZXN0X29pZCBwYXRoMHMpCXBhdGgwc3ltCisJMDQwMDAwIHRyZWUgJCh0ZXN0X29pZCBwYXRoMmQpCXBhdGgyCisJMDQwMDAwIHRyZWUgJCh0ZXN0X29pZCBwYXRoM2QpCXBhdGgzCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCisjIFRoaXMgY2hhbmdlZCBpbiBscy10cmVlIHBhdGhzcGVjIGNoYW5nZSAtLSByZWN1cnNpdmUgZG9lcworIyBub3Qgc2hvdyB0cmVlIG5vZGVzIGFueW1vcmUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHRyZWUgd2l0aCBnaXQgbHMtdHJlZSAtcicgJworCWdpdCBscy10cmVlIC1yICR0cmVlID5jdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy10cmVlIC1yIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIHBhdGgwZikJcGF0aDAKKwkxMjAwMDAgYmxvYiAkKHRlc3Rfb2lkIHBhdGgwcykJcGF0aDBzeW0KKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIHBhdGgyZikJcGF0aDIvZmlsZTIKKwkxMjAwMDAgYmxvYiAkKHRlc3Rfb2lkIHBhdGgycykJcGF0aDIvZmlsZTJzeW0KKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIHBhdGgzZikJcGF0aDMvZmlsZTMKKwkxMjAwMDAgYmxvYiAkKHRlc3Rfb2lkIHBhdGgzcykJcGF0aDMvZmlsZTNzeW0KKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIHN1YnAzZikJcGF0aDMvc3VicDMvZmlsZTMKKwkxMjAwMDAgYmxvYiAkKHRlc3Rfb2lkIHN1YnAzcykJcGF0aDMvc3VicDMvZmlsZTNzeW0KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKKyMgQnV0IHdpdGggLXIgLXQgd2UgY2FuIGhhdmUgYm90aC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgdHJlZSB3aXRoIGdpdCBscy10cmVlIC1yIC10JyAnCisJZ2l0IGxzLXRyZWUgLXIgLXQgJHRyZWUgPmN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLXRyZWUgLXIgb3V0cHV0IGZvciBhIGtub3duIHRyZWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICQodGVzdF9vaWQgcGF0aDBmKQlwYXRoMAorCTEyMDAwMCBibG9iICQodGVzdF9vaWQgcGF0aDBzKQlwYXRoMHN5bQorCTA0MDAwMCB0cmVlICQodGVzdF9vaWQgcGF0aDJkKQlwYXRoMgorCTEwMDY0NCBibG9iICQodGVzdF9vaWQgcGF0aDJmKQlwYXRoMi9maWxlMgorCTEyMDAwMCBibG9iICQodGVzdF9vaWQgcGF0aDJzKQlwYXRoMi9maWxlMnN5bQorCTA0MDAwMCB0cmVlICQodGVzdF9vaWQgcGF0aDNkKQlwYXRoMworCTEwMDY0NCBibG9iICQodGVzdF9vaWQgcGF0aDNmKQlwYXRoMy9maWxlMworCTEyMDAwMCBibG9iICQodGVzdF9vaWQgcGF0aDNzKQlwYXRoMy9maWxlM3N5bQorCTA0MDAwMCB0cmVlICQodGVzdF9vaWQgc3VicDNkKQlwYXRoMy9zdWJwMworCTEwMDY0NCBibG9iICQodGVzdF9vaWQgc3VicDNmKQlwYXRoMy9zdWJwMy9maWxlMworCTEyMDAwMCBibG9iICQodGVzdF9vaWQgc3VicDNzKQlwYXRoMy9zdWJwMy9maWxlM3N5bQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBwYXJ0aWFsIHRyZWUgb3V0IHdpdGggZ2l0IHdyaXRlLXRyZWUgLS1wcmVmaXgnICcKKwlwdHJlZT0kKGdpdCB3cml0ZS10cmVlIC0tcHJlZml4PXBhdGgzKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBvYmplY3QgSUQgZm9yIGEga25vd24gdHJlZScgJworCXRlc3QgIiRwdHJlZSIgPSAkKHRlc3Rfb2lkIHBhdGgzZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBwYXJ0aWFsIHRyZWUgb3V0IHdpdGggZ2l0IHdyaXRlLXRyZWUgLS1wcmVmaXgnICcKKwlwdHJlZT0kKGdpdCB3cml0ZS10cmVlIC0tcHJlZml4PXBhdGgzL3N1YnAzKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBvYmplY3QgSUQgZm9yIGEga25vd24gdHJlZScgJworCXRlc3QgIiRwdHJlZSIgPSAkKHRlc3Rfb2lkIHN1YnAzZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0IGludmFsaWQgb2JqZWN0cyBpbnRvIHRoZSBpbmRleCcgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlzdWZmaXg9JChlY2hvICRaRVJPX09JRCB8IHNlZCAtZSAicy9eLi8vIikgJiYKKwljYXQgPmJhZG9iamVjdHMgPDwtRU9GICYmCisJMTAwNjQ0IGJsb2IgJCh0ZXN0X29pZCAwMDEpCWRpci9maWxlMQorCTEwMDY0NCBibG9iICQodGVzdF9vaWQgMDAyKQlkaXIvZmlsZTIKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIDAwMykJZGlyL2ZpbGUzCisJMTAwNjQ0IGJsb2IgJCh0ZXN0X29pZCAwMDQpCWRpci9maWxlNAorCTEwMDY0NCBibG9iICQodGVzdF9vaWQgMDA1KQlkaXIvZmlsZTUKKwlFT0YKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8YmFkb2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHRoaXMgdHJlZSB3aXRob3V0IC0tbWlzc2luZy1vaycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3cml0ZS10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgdGhpcyB0cmVlIHdpdGggLS1taXNzaW5nLW9rJyAnCisJZ2l0IHdyaXRlLXRyZWUgLS1taXNzaW5nLW9rCisnCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYWQtdHJlZSBmb2xsb3dlZCBieSB3cml0ZS10cmVlIHNob3VsZCBiZSBpZGVtcG90ZW50JyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCByZWFkLXRyZWUgJHRyZWUgJiYKKwl0ZXN0IC1mIC5naXQvaW5kZXggJiYKKwluZXd0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJdGVzdCAiJG5ld3RyZWUiID0gIiR0cmVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBnaXQgZGlmZi1maWxlcyBvdXRwdXQgZm9yIGEga25vdyBjYWNoZS93b3JrIHRyZWUgc3RhdGUnICcKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIHBhdGgwZikgJFpFUk9fT0lEIE0JcGF0aDAKKzoxMjAwMDAgMTIwMDAwICQodGVzdF9vaWQgcGF0aDBzKSAkWkVST19PSUQgTQlwYXRoMHN5bQorOjEwMDY0NCAxMDA2NDQgJCh0ZXN0X29pZCBwYXRoMmYpICRaRVJPX09JRCBNCXBhdGgyL2ZpbGUyCis6MTIwMDAwIDEyMDAwMCAkKHRlc3Rfb2lkIHBhdGgycykgJFpFUk9fT0lEIE0JcGF0aDIvZmlsZTJzeW0KKzoxMDA2NDQgMTAwNjQ0ICQodGVzdF9vaWQgcGF0aDNmKSAkWkVST19PSUQgTQlwYXRoMy9maWxlMworOjEyMDAwMCAxMjAwMDAgJCh0ZXN0X29pZCBwYXRoM3MpICRaRVJPX09JRCBNCXBhdGgzL2ZpbGUzc3ltCis6MTAwNjQ0IDEwMDY0NCAkKHRlc3Rfb2lkIHN1YnAzZikgJFpFUk9fT0lEIE0JcGF0aDMvc3VicDMvZmlsZTMKKzoxMjAwMDAgMTIwMDAwICQodGVzdF9vaWQgc3VicDNzKSAkWkVST19PSUQgTQlwYXRoMy9zdWJwMy9maWxlM3N5bQorRU9GCisJZ2l0IGRpZmYtZmlsZXMgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZGlmZiBhZnRlciBjaGVja291dCBhbmQgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gnICcKKwlnaXQgZGlmZi1maWxlcyA+Y3VycmVudCAmJgorCWNtcCAtcyBjdXJyZW50IC9kZXYvbnVsbAorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitQPSQodGVzdF9vaWQgcm9vdCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdC10cmVlIHJlY29yZHMgdGhlIGNvcnJlY3QgdHJlZSBpbiBhIGNvbW1pdCcgJworCWNvbW1pdDA9JChlY2hvIE5PIHwgZ2l0IGNvbW1pdC10cmVlICRQKSAmJgorCXRyZWU9JChnaXQgc2hvdyAtLXByZXR0eT1yYXcgJGNvbW1pdDAgfAorCQkgc2VkIC1uIC1lICJzL150cmVlIC8vcCIgLWUgIi9eYXV0aG9yIC9xIikgJiYKKwl0ZXN0ICJ6JHRyZWUiID0gInokUCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdC10cmVlIHJlY29yZHMgdGhlIGNvcnJlY3QgcGFyZW50IGluIGEgY29tbWl0JyAnCisJY29tbWl0MT0kKGVjaG8gTk8gfCBnaXQgY29tbWl0LXRyZWUgJFAgLXAgJGNvbW1pdDApICYmCisJcGFyZW50PSQoZ2l0IHNob3cgLS1wcmV0dHk9cmF3ICRjb21taXQxIHwKKwkJc2VkIC1uIC1lICJzL15wYXJlbnQgLy9wIiAtZSAiL15hdXRob3IgL3EiKSAmJgorCXRlc3QgInokY29tbWl0MCIgPSAieiRwYXJlbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQtdHJlZSBvbWl0cyBkdXBsaWNhdGVkIHBhcmVudCBpbiBhIGNvbW1pdCcgJworCWNvbW1pdDI9JChlY2hvIE5PIHwgZ2l0IGNvbW1pdC10cmVlICRQIC1wICRjb21taXQwIC1wICRjb21taXQwKSAmJgorCSAgICAgcGFyZW50PSQoZ2l0IHNob3cgLS1wcmV0dHk9cmF3ICRjb21taXQyIHwKKwkJc2VkIC1uIC1lICJzL15wYXJlbnQgLy9wIiAtZSAiL15hdXRob3IgL3EiIHwKKwkJc29ydCAtdSkgJiYKKwl0ZXN0ICJ6JGNvbW1pdDAiID0gInokcGFyZW50IiAmJgorCW51bXBhcmVudD0kKGdpdCBzaG93IC0tcHJldHR5PXJhdyAkY29tbWl0MiB8CisJCXNlZCAtbiAtZSAicy9ecGFyZW50IC8vcCIgLWUgIi9eYXV0aG9yIC9xIiB8CisJCXdjIC1sKSAmJgorCXRlc3QgJG51bXBhcmVudCA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IEQvRiBjb25mbGljdCcgJworCW12IHBhdGgwIHRtcCAmJgorCW12IHBhdGgyIHBhdGgwICYmCisJbXYgdG1wIHBhdGgyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlcGxhY2UgcGF0aDIgcGF0aDAvZmlsZTIgJiYKKwludW1wYXRoMD0kKGdpdCBscy1maWxlcyBwYXRoMCB8IHdjIC1sKSAmJgorCXRlc3QgJG51bXBhdGgwID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJ5IGxvbmcgbmFtZSBpbiB0aGUgaW5kZXggaGFuZGxlZCBzYW5lbHknICcKKworCWE9YSAmJiAjIDEKKwlhPSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhICYmICMgMTYKKwlhPSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhICYmICMgMjU2CisJYT0kYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSAmJiAjIDQwOTYKKwlhPSR7YX1xICYmCisKKwk+cGF0aDQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGg0ICYmCisJKAorCQlnaXQgbHMtZmlsZXMgLXMgcGF0aDQgfAorCQlzZWQgLWUgInMvCS4qLwkvIiB8CisJCXRyIC1kICJcMDEyIiAmJgorCQllY2hvICIkYSIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlsZW49JChnaXQgbHMtZmlsZXMgImEqIiB8IHdjIC1jKSAmJgorCXRlc3QgJGxlbiA9IDQwOTgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDAxLWluaXQuc2ggYi90L3QwMDAxLWluaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjZmODIwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDEtaW5pdC5zaApAQCAtMCwwICsxLDQ3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBpbml0JworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfY29uZmlnICgpIHsKKwlpZiB0ZXN0IC1kICIkMSIgJiYgdGVzdCAtZiAiJDEvY29uZmlnIiAmJiB0ZXN0IC1kICIkMS9yZWZzIgorCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiZXhwZWN0ZWQgYSBkaXJlY3RvcnkgJDEsIGEgZmlsZSAkMS9jb25maWcgYW5kICQxL3JlZnMiCisJCXJldHVybiAxCisJZmkKKworCWlmIHRlc3RfaGF2ZV9wcmVyZXEgUE9TSVhQRVJNICYmIHRlc3QgLXggIiQxL2NvbmZpZyIKKwl0aGVuCisJCWVjaG8gIiQxL2NvbmZpZyBpcyBleGVjdXRhYmxlPyIKKwkJcmV0dXJuIDEKKwlmaQorCisJYmFyZT0kKGNkICIkMSIgJiYgZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5iYXJlKQorCXdvcmt0cmVlPSQoY2QgIiQxIiAmJiBnaXQgY29uZmlnIGNvcmUud29ya3RyZWUpIHx8CisJd29ya3RyZWU9dW5zZXQKKworCXRlc3QgIiRiYXJlIiA9ICIkMiIgJiYgdGVzdCAiJHdvcmt0cmVlIiA9ICIkMyIgfHwgeworCQllY2hvICJleHBlY3RlZCBiYXJlPSQyIHdvcmt0cmVlPSQzIgorCQllY2hvICIgICAgIGdvdCBiYXJlPSRiYXJlIHdvcmt0cmVlPSR3b3JrdHJlZSIKKwkJcmV0dXJuIDEKKwl9Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluJyAnCisJZ2l0IGluaXQgcGxhaW4gJiYKKwljaGVja19jb25maWcgcGxhaW4vLmdpdCBmYWxzZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiBuZXN0ZWQgaW4gYmFyZScgJworCSgKKwkJZ2l0IGluaXQgLS1iYXJlIGJhcmUtYW5jZXN0b3IuZ2l0ICYmCisJCWNkIGJhcmUtYW5jZXN0b3IuZ2l0ICYmCisJCW1rZGlyIHBsYWluLW5lc3RlZCAmJgorCQljZCBwbGFpbi1uZXN0ZWQgJiYKKwkJZ2l0IGluaXQKKwkpICYmCisJY2hlY2tfY29uZmlnIGJhcmUtYW5jZXN0b3IuZ2l0L3BsYWluLW5lc3RlZC8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIHRocm91Z2ggYWxpYXNlZCBjb21tYW5kLCBvdXRzaWRlIGFueSBnaXQgcmVwbycgJworCSgKKwkJSE9NRT0kKHB3ZCkvYWxpYXMtY29uZmlnICYmCisJCWV4cG9ydCBIT01FICYmCisJCW1rZGlyIGFsaWFzLWNvbmZpZyAmJgorCQllY2hvICJbYWxpYXNdIGFsaWFzZWRpbml0ID0gaW5pdCIgPmFsaWFzLWNvbmZpZy8uZ2l0Y29uZmlnICYmCisKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9JChwd2QpICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCisJCW1rZGlyIHBsYWluLWFsaWFzZWQgJiYKKwkJY2QgcGxhaW4tYWxpYXNlZCAmJgorCQlnaXQgYWxpYXNlZGluaXQKKwkpICYmCisJY2hlY2tfY29uZmlnIHBsYWluLWFsaWFzZWQvLmdpdCBmYWxzZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiBuZXN0ZWQgdGhyb3VnaCBhbGlhc2VkIGNvbW1hbmQnICcKKwkoCisJCWdpdCBpbml0IHBsYWluLWFuY2VzdG9yLWFsaWFzZWQgJiYKKwkJY2QgcGxhaW4tYW5jZXN0b3ItYWxpYXNlZCAmJgorCQllY2hvICJbYWxpYXNdIGFsaWFzZWRpbml0ID0gaW5pdCIgPj4uZ2l0L2NvbmZpZyAmJgorCQlta2RpciBwbGFpbi1uZXN0ZWQgJiYKKwkJY2QgcGxhaW4tbmVzdGVkICYmCisJCWdpdCBhbGlhc2VkaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgcGxhaW4tYW5jZXN0b3ItYWxpYXNlZC9wbGFpbi1uZXN0ZWQvLmdpdCBmYWxzZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiBuZXN0ZWQgaW4gYmFyZSB0aHJvdWdoIGFsaWFzZWQgY29tbWFuZCcgJworCSgKKwkJZ2l0IGluaXQgLS1iYXJlIGJhcmUtYW5jZXN0b3ItYWxpYXNlZC5naXQgJiYKKwkJY2QgYmFyZS1hbmNlc3Rvci1hbGlhc2VkLmdpdCAmJgorCQllY2hvICJbYWxpYXNdIGFsaWFzZWRpbml0ID0gaW5pdCIgPj5jb25maWcgJiYKKwkJbWtkaXIgcGxhaW4tbmVzdGVkICYmCisJCWNkIHBsYWluLW5lc3RlZCAmJgorCQlnaXQgYWxpYXNlZGluaXQKKwkpICYmCisJY2hlY2tfY29uZmlnIGJhcmUtYW5jZXN0b3ItYWxpYXNlZC5naXQvcGxhaW4tbmVzdGVkLy5naXQgZmFsc2UgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTm8gZXh0cmEgR0lUXyogb24gYWxpYXMgc2NyaXB0cycgJworCXdyaXRlX3NjcmlwdCBzY3JpcHQgPDwtXEVPRiAmJgorCWVudiB8CisJCXNlZCAtbiBcCisJCQktZSAiL15HSVRfUFJFRklYPS9kIiBcCisJCQktZSAiL15HSVRfVEVYVERPTUFJTkRJUj0vZCIgXAorCQkJLWUgIi9eR0lUX1RSQUNFMl9QQVJFTlQvZCIgXAorCQkJLWUgIi9eR0lUXy9zLz0uKi8vcCIgfAorCQlzb3J0CisJRU9GCisJLi9zY3JpcHQgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBhbGlhcy5zY3JpcHQgXCEuL3NjcmlwdCAmJgorCSggbWtkaXIgc3ViICYmIGNkIHN1YiAmJiBnaXQgc2NyaXB0ID4uLi9hY3R1YWwgKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiB3aXRoIEdJVF9XT1JLX1RSRUUnICcKKwlta2RpciBwbGFpbi13dCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfV09SS19UUkVFPSIkKHB3ZCkvcGxhaW4td3QiIGdpdCBpbml0IHBsYWluLXd0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIGJhcmUnICcKKwlnaXQgLS1iYXJlIGluaXQgcGxhaW4tYmFyZS0xICYmCisJY2hlY2tfY29uZmlnIHBsYWluLWJhcmUtMSB0cnVlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIGJhcmUgd2l0aCBHSVRfV09SS19UUkVFJyAnCisJbWtkaXIgcGxhaW4tYmFyZS0yICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQllbnYgR0lUX1dPUktfVFJFRT0iJChwd2QpL3BsYWluLWJhcmUtMiIgXAorCQlnaXQgLS1iYXJlIGluaXQgcGxhaW4tYmFyZS0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgYmFyZScgJworCW1rZGlyIGdpdC1kaXItYmFyZS5naXQgJiYKKwlHSVRfRElSPWdpdC1kaXItYmFyZS5naXQgZ2l0IGluaXQgJiYKKwljaGVja19jb25maWcgZ2l0LWRpci1iYXJlLmdpdCB0cnVlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgLS1iYXJlJyAnCisJZ2l0IGluaXQgLS1iYXJlIGluaXQtYmFyZS5naXQgJiYKKwljaGVja19jb25maWcgaW5pdC1iYXJlLmdpdCB0cnVlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgbm9uLWJhcmUnICcKKworCSgKKwkJbWtkaXIgbm9uLWJhcmUgJiYKKwkJY2Qgbm9uLWJhcmUgJiYKKwkJR0lUX0RJUj0uZ2l0IGdpdCBpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBub24tYmFyZS8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgJiBHSVRfV09SS19UUkVFICgxKScgJworCisJKAorCQlta2RpciBnaXQtZGlyLXd0LTEuZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9JChwd2QpIEdJVF9ESVI9Z2l0LWRpci13dC0xLmdpdCBnaXQgaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgZ2l0LWRpci13dC0xLmdpdCBmYWxzZSAiJChwd2QpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSICYgR0lUX1dPUktfVFJFRSAoMiknICcKKwlta2RpciBnaXQtZGlyLXd0LTIuZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IFwKKwkJR0lUX1dPUktfVFJFRT0iJChwd2QpIiBcCisJCUdJVF9ESVI9Z2l0LWRpci13dC0yLmdpdCBcCisJCWdpdCAtLWJhcmUgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWluaXQnICcKKworCSgKKwkJbWtkaXIgYWdhaW4gJiYKKwkJY2QgYWdhaW4gJiYKKwkJZ2l0IGluaXQgPm91dDEgMj5lcnIxICYmCisJCWdpdCBpbml0ID5vdXQyIDI+ZXJyMgorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJJbml0aWFsaXplZCBlbXB0eSIgYWdhaW4vb3V0MSAmJgorCXRlc3RfaTE4bmdyZXAgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciIGFnYWluL291dDIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWdhaW4vZXJyMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhZ2Fpbi9lcnIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCAtLXRlbXBsYXRlJyAnCisJbWtkaXIgdGVtcGxhdGUtc291cmNlICYmCisJZWNobyBjb250ZW50ID50ZW1wbGF0ZS1zb3VyY2UvZmlsZSAmJgorCWdpdCBpbml0IC0tdGVtcGxhdGU9dGVtcGxhdGUtc291cmNlIHRlbXBsYXRlLWN1c3RvbSAmJgorCXRlc3RfY21wIHRlbXBsYXRlLXNvdXJjZS9maWxlIHRlbXBsYXRlLWN1c3RvbS8uZ2l0L2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRoIC0tdGVtcGxhdGUgKGJsYW5rKScgJworCWdpdCBpbml0IHRlbXBsYXRlLXBsYWluICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdGVtcGxhdGUtcGxhaW4vLmdpdC9pbmZvL2V4Y2x1ZGUgJiYKKwlnaXQgaW5pdCAtLXRlbXBsYXRlPSB0ZW1wbGF0ZS1ibGFuayAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlbXBsYXRlLWJsYW5rLy5naXQvaW5mby9leGNsdWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCBpbml0LnRlbXBsYXRlZGlyIHNldCcgJworCW1rZGlyIHRlbXBsYXRlZGlyLXNvdXJjZSAmJgorCWVjaG8gQ29udGVudCA+dGVtcGxhdGVkaXItc291cmNlL2ZpbGUgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgaW5pdC50ZW1wbGF0ZWRpciAiJHtIT01FfS90ZW1wbGF0ZWRpci1zb3VyY2UiICYmCisJKAorCQlta2RpciB0ZW1wbGF0ZWRpci1zZXQgJiYKKwkJY2QgdGVtcGxhdGVkaXItc2V0ICYmCisJCXNhbmVfdW5zZXQgR0lUX1RFTVBMQVRFX0RJUiAmJgorCQlOT19TRVRfR0lUX1RFTVBMQVRFX0RJUj10ICYmCisJCWV4cG9ydCBOT19TRVRfR0lUX1RFTVBMQVRFX0RJUiAmJgorCQlnaXQgaW5pdAorCSkgJiYKKwl0ZXN0X2NtcCB0ZW1wbGF0ZWRpci1zb3VyY2UvZmlsZSB0ZW1wbGF0ZWRpci1zZXQvLmdpdC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgLS1iYXJlLy0tc2hhcmVkIG92ZXJyaWRlcyBzeXN0ZW0vZ2xvYmFsIGNvbmZpZycgJworCXRlc3RfY29uZmlnX2dsb2JhbCBjb3JlLmJhcmUgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgY29yZS5zaGFyZWRSZXBvc2l0b3J5IDA2NDAgJiYKKwlnaXQgaW5pdCAtLWJhcmUgLS1zaGFyZWQ9MDY2NiBpbml0LWJhcmUtc2hhcmVkLW92ZXJyaWRlICYmCisJY2hlY2tfY29uZmlnIGluaXQtYmFyZS1zaGFyZWQtb3ZlcnJpZGUgdHJ1ZSB1bnNldCAmJgorCXRlc3QgeDA2NjYgPSBcCisJeCQoZ2l0IGNvbmZpZyAtZiBpbml0LWJhcmUtc2hhcmVkLW92ZXJyaWRlL2NvbmZpZyBjb3JlLnNoYXJlZFJlcG9zaXRvcnkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgaG9ub3JzIGdsb2JhbCBjb3JlLnNoYXJlZFJlcG9zaXRvcnknICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgY29yZS5zaGFyZWRSZXBvc2l0b3J5IDA2NjYgJiYKKwlnaXQgaW5pdCBzaGFyZWQtaG9ub3ItZ2xvYmFsICYmCisJdGVzdCB4MDY2NiA9IFwKKwl4JChnaXQgY29uZmlnIC1mIHNoYXJlZC1ob25vci1nbG9iYWwvLmdpdC9jb25maWcgY29yZS5zaGFyZWRSZXBvc2l0b3J5KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFsbG93cyBpbnNhbmVseSBsb25nIC0tdGVtcGxhdGUnICcKKwlnaXQgaW5pdCAtLXRlbXBsYXRlPSQocHJpbnRmICJ4JTA5OTk5ZHgiIDEpIHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGRpcmVjdG9yeScgJworCXJtIC1mciBuZXdkaXIgJiYKKwlnaXQgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci8uZ2l0L3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGJhcmUgZGlyZWN0b3J5JyAnCisJcm0gLWZyIG5ld2RpciAmJgorCWdpdCBpbml0IC0tYmFyZSBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgcmVjcmVhdGVzIGEgZGlyZWN0b3J5JyAnCisJcm0gLWZyIG5ld2RpciAmJgorCW1rZGlyIG5ld2RpciAmJgorCWdpdCBpbml0IG5ld2RpciAmJgorCXRlc3RfcGF0aF9pc19kaXIgbmV3ZGlyLy5naXQvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHJlY3JlYXRlcyBhIG5ldyBiYXJlIGRpcmVjdG9yeScgJworCXJtIC1mciBuZXdkaXIgJiYKKwlta2RpciBuZXdkaXIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgbmV3ZGlyICYmCisJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGNyZWF0ZXMgYSBuZXcgZGVlcCBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJZ2l0IGluaXQgbmV3ZGlyL2EvYi9jICYmCisJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvYS9iL2MvLmdpdC9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdpbml0IGNyZWF0ZXMgYSBuZXcgZGVlcCBkaXJlY3RvcnkgKHVtYXNrIHZzLiBzaGFyZWQpJyAnCisJcm0gLWZyIG5ld2RpciAmJgorCSgKKwkJIyBMZWFkaW5nIGRpcmVjdG9yaWVzIHNob3VsZCBob25vciB1bWFzayB3aGlsZQorCQkjIHRoZSByZXBvc2l0b3J5IGl0c2VsZiBzaG91bGQgZm9sbG93ICJzaGFyZWQiCisJCW1rZGlyIG5ld2RpciAmJgorCQkjIFJlbW92ZSBhIGRlZmF1bHQgQUNMIGlmIHBvc3NpYmxlLgorCQkoc2V0ZmFjbCAtayBuZXdkaXIgMj4vZGV2L251bGwgfHwgdHJ1ZSkgJiYKKwkJdW1hc2sgMDAyICYmCisJCWdpdCBpbml0IC0tYmFyZSAtLXNoYXJlZD0wNjYwIG5ld2Rpci9hL2IvYyAmJgorCQl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci9hL2IvYy9yZWZzICYmCisJCWxzIC1sZCBuZXdkaXIvYSBuZXdkaXIvYS9iID4gbHNhYi5vdXQgJiYKKwkJISBncmVwIC12ICJeZHJ3eHJ3W3N4XXIteCIgbHNhYi5vdXQgJiYKKwkJbHMgLWxkIG5ld2Rpci9hL2IvYyA+IGxzYy5vdXQgJiYKKwkJISBncmVwIC12ICJeZHJ3eHJ3W3N4XS0tLSIgbHNjLm91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBub3RpY2VzIEVFWElTVCAoMSknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJPm5ld2RpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbml0IG5ld2RpciAmJgorCXRlc3RfcGF0aF9pc19maWxlIG5ld2RpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IG5vdGljZXMgRUVYSVNUICgyKScgJworCXJtIC1mciBuZXdkaXIgJiYKKwlta2RpciBuZXdkaXIgJiYKKwk+bmV3ZGlyL2EgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5pdCBuZXdkaXIvYS9iICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbmV3ZGlyL2EKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdpbml0IG5vdGljZXMgRVBFUk0nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kICt3IG5ld2RpciIgJiYKKwlybSAtZnIgbmV3ZGlyICYmCisJbWtkaXIgbmV3ZGlyICYmCisJY2htb2QgLXcgbmV3ZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluaXQgbmV3ZGlyL2EvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGNyZWF0ZXMgYSBuZXcgYmFyZSBkaXJlY3Rvcnkgd2l0aCBnbG9iYWwgLS1iYXJlJyAnCisJcm0gLXJmIG5ld2RpciAmJgorCWdpdCAtLWJhcmUgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgcHJlZmVycyBjb21tYW5kIGxpbmUgdG8gR0lUX0RJUicgJworCXJtIC1yZiBuZXdkaXIgJiYKKwlta2RpciBvdGhlcmRpciAmJgorCUdJVF9ESVI9b3RoZXJkaXIgZ2l0IC0tYmFyZSBpbml0IG5ld2RpciAmJgorCXRlc3RfcGF0aF9pc19kaXIgbmV3ZGlyL3JlZnMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBvdGhlcmRpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCBzZXBhcmF0ZSBnaXRkaXInICcKKwlybSAtcmYgbmV3ZGlyICYmCisJZ2l0IGluaXQgLS1zZXBhcmF0ZS1naXQtZGlyIHJlYWxnaXRkaXIgbmV3ZGlyICYmCisJbmV3ZGlyX2dpdD0iJChjYXQgbmV3ZGlyLy5naXQpIiAmJgorCXRlc3RfY21wX2ZzcGF0aCAiJChwd2QpL3JlYWxnaXRkaXIiICIke25ld2Rpcl9naXQjZ2l0ZGlyOiB9IiAmJgorCXRlc3RfcGF0aF9pc19kaXIgcmVhbGdpdGRpci9yZWZzCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgR0VUQ1dEX0lHTk9SRVNfUEVSTVMgJworCWJhc2U9R0VUQ1dEX1RFU1RfQkFTRV9ESVIgJiYKKwlta2RpciAtcCAkYmFzZS9kaXIgJiYKKwljaG1vZCAxMDAgJGJhc2UgfHwKKwlCVUcgImNhbm5vdCBwcmVwYXJlICRiYXNlIgorCisJKGNkICRiYXNlL2RpciAmJiAvYmluL3B3ZCAtUCkKKwlzdGF0dXM9JD8KKworCWNobW9kIDcwMCAkYmFzZSAmJgorCXJtIC1yZiAkYmFzZSB8fAorCUJVRyAiY2Fubm90IGNsZWFuICRiYXNlIgorCXJldHVybiAkc3RhdHVzCisnCisKK2NoZWNrX2xvbmdfYmFzZV9wYXRoICgpIHsKKwkjIGV4Y2VlZCBpbml0aWFsIGJ1ZmZlciBzaXplIG9mIHN0cmJ1Zl9nZXRjd2QoKQorCWNvbXBvbmVudD0xMjM0NTY3ODlhYmNkZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDA3MDAgJGNvbXBvbmVudDsgcm0gLXJmICRjb21wb25lbnQiICYmCisJcDMxPSRjb21wb25lbnQvJGNvbXBvbmVudCAmJgorCXAxMjc9JHAzMS8kcDMxLyRwMzEvJHAzMSAmJgorCW1rZGlyIC1wICRwMTI3ICYmCisJaWYgdGVzdCAkIyA9IDEKKwl0aGVuCisJCWNobW9kICQxICRjb21wb25lbnQKKwlmaSAmJgorCSgKKwkJY2QgJHAxMjcgJiYKKwkJZ2l0IGluaXQgbmV3ZGlyCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGluIGxvbmcgYmFzZSBwYXRoJyAnCisJY2hlY2tfbG9uZ19iYXNlX3BhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRDV0RfSUdOT1JFU19QRVJNUyAnaW5pdCBpbiBsb25nIHJlc3RyaWN0ZWQgYmFzZSBwYXRoJyAnCisJY2hlY2tfbG9uZ19iYXNlX3BhdGggMDExMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1pbml0IG9uIC5naXQgZmlsZScgJworCSggY2QgbmV3ZGlyICYmIGdpdCBpbml0ICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtaW5pdCB0byB1cGRhdGUgZ2l0IGxpbmsnICcKKwlnaXQgLUMgbmV3ZGlyIGluaXQgLS1zZXBhcmF0ZS1naXQtZGlyIC4uL3N1cnJlYWxnaXRkaXIgJiYKKwluZXdkaXJfZ2l0PSIkKGNhdCBuZXdkaXIvLmdpdCkiICYmCisJdGVzdF9jbXBfZnNwYXRoICIkKHB3ZCkvc3VycmVhbGdpdGRpciIgIiR7bmV3ZGlyX2dpdCNnaXRkaXI6IH0iICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdXJyZWFsZ2l0ZGlyL3JlZnMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyByZWFsZ2l0ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtaW5pdCB0byBtb3ZlIGdpdGRpcicgJworCXJtIC1yZiBuZXdkaXIgcmVhbGdpdGRpciBzdXJyZWFsZ2l0ZGlyICYmCisJZ2l0IGluaXQgbmV3ZGlyICYmCisJZ2l0IC1DIG5ld2RpciBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciAuLi9yZWFsZ2l0ZGlyICYmCisJbmV3ZGlyX2dpdD0iJChjYXQgbmV3ZGlyLy5naXQpIiAmJgorCXRlc3RfY21wX2ZzcGF0aCAiJChwd2QpL3JlYWxnaXRkaXIiICIke25ld2Rpcl9naXQjZ2l0ZGlyOiB9IiAmJgorCXRlc3RfcGF0aF9pc19kaXIgcmVhbGdpdGRpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JlLWluaXQgdG8gbW92ZSBnaXRkaXIgc3ltbGluaycgJworCXJtIC1yZiBuZXdkaXIgcmVhbGdpdGRpciAmJgorCWdpdCBpbml0IG5ld2RpciAmJgorCSgKKwljZCBuZXdkaXIgJiYKKwltdiAuZ2l0IGhlcmUgJiYKKwlsbiAtcyBoZXJlIC5naXQgJiYKKwlnaXQgaW5pdCAtLXNlcGFyYXRlLWdpdC1kaXIgLi4vcmVhbGdpdGRpcgorCSkgJiYKKwllY2hvICJnaXRkaXI6ICQocHdkKS9yZWFsZ2l0ZGlyIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBuZXdkaXIvLmdpdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5ld2Rpci9oZXJlICYmCisJdGVzdF9wYXRoX2lzX2RpciByZWFsZ2l0ZGlyL3JlZnMKKycKKworIyBUZXN0cyBmb3IgdGhlIGhpZGRlbiBmaWxlIGF0dHJpYnV0ZSBvbiB3aW5kb3dzCitpc19oaWRkZW4gKCkgeworCSMgVXNlIHRoZSBvdXRwdXQgb2YgYGF0dHJpYmAsIGlnbm9yZSB0aGUgYWJzb2x1dGUgcGF0aAorCWNhc2UgIiQoYXR0cmliICIkMSIpIiBpbiAqSCo/OiopIHJldHVybiAwOzsgZXNhYworCXJldHVybiAxCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJy5naXQgaGlkZGVuJyAnCisJcm0gLXJmIG5ld2RpciAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJbWtkaXIgbmV3ZGlyICYmCisJCWNkIG5ld2RpciAmJgorCQlnaXQgaW5pdCAmJgorCQlpc19oaWRkZW4gLmdpdAorCSkgJiYKKwljaGVja19jb25maWcgbmV3ZGlyLy5naXQgZmFsc2UgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAnYmFyZSBnaXQgZGlyIG5vdCBoaWRkZW4nICcKKwlybSAtcmYgbmV3ZGlyICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSBHSVRfQ09ORklHICYmCisJCW1rZGlyIG5ld2RpciAmJgorCQljZCBuZXdkaXIgJiYKKwkJZ2l0IC0tYmFyZSBpbml0CisJKSAmJgorCSEgaXNfaGlkZGVuIG5ld2RpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgaW5pdCBmcm9tIGRvZXMgbm90IHVzZSBjb25maWcgZnJvbSBjd2QnICcKKwlybSAtcmYgbmV3ZGlyICYmCisJdGVzdF9jb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIHRydWUgJiYKKwlnaXQgaW5pdCBuZXdkaXIgJiYKKwllY2hvIHRydWUgPmV4cGVjdCAmJgorCWdpdCAtQyBuZXdkaXIgY29uZmlnIC0tYm9vbCBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtaW5pdCBmcm9tIGEgbGlua2VkIHdvcmt0cmVlJyAnCisJZ2l0IGluaXQgbWFpbi13b3JrdHJlZSAmJgorCSgKKwkJY2QgbWFpbi13b3JrdHJlZSAmJgorCQl0ZXN0X2NvbW1pdCBmaXJzdCAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC4uL2xpbmtlZC13b3JrdHJlZSAmJgorCQltdiAuZ2l0L2luZm8vZXhjbHVkZSBleHBlY3RlZC1leGNsdWRlICYmCisJCWNwIC5naXQvY29uZmlnIGV4cGVjdGVkLWNvbmZpZyAmJgorCQlmaW5kIC5naXQvd29ya3RyZWVzIC1wcmludCB8IHNvcnQgPmV4cGVjdGVkICYmCisJCWdpdCAtQyAuLi9saW5rZWQtd29ya3RyZWUgaW5pdCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC1leGNsdWRlIC5naXQvaW5mby9leGNsdWRlICYmCisJCXRlc3RfY21wIGV4cGVjdGVkLWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQlmaW5kIC5naXQvd29ya3RyZWVzIC1wcmludCB8IHNvcnQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2NvcmUuaGlkZWRvdGZpbGVzID0gZmFsc2UnICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIGNvcmUuaGlkZWRvdGZpbGVzIGZhbHNlICYmCisJcm0gLXJmIG5ld2RpciAmJgorCW1rZGlyIG5ld2RpciAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgR0lUX0NPTkZJRyAmJgorCQlnaXQgLUMgbmV3ZGlyIGluaXQKKwkpICYmCisJISBpc19oaWRkZW4gbmV3ZGlyLy5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAncmVkaXJlY3Qgc3RkIGhhbmRsZXMnICcKKwlHSVRfUkVESVJFQ1RfU1RET1VUPW91dHB1dC50eHQgZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgJiYKKwl0ZXN0IC5naXQgPSAiJChjYXQgb3V0cHV0LnR4dCkiICYmCisJdGVzdCAteiAiJChHSVRfUkVESVJFQ1RfU1RET1VUPW9mZiBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikiICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IFwKKwkJR0lUX1JFRElSRUNUX1NURE9VVD1vdXRwdXQudHh0IFwKKwkJR0lUX1JFRElSRUNUX1NUREVSUj0iMj4mMSIgXAorCQlnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAtLXZlcmlmeSByZWZzL2ludmFsaWQgJiYKKwlncmVwICJeXFwuZ2l0XCQiIG91dHB1dC50eHQgJiYKKwlncmVwICJOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24iIG91dHB1dC50eHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDAyLWdpdGZpbGUuc2ggYi90L3QwMDAyLWdpdGZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGFhOTkwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDItZ2l0ZmlsZS5zaApAQCAtMCwwICsxLDEzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy5naXQgZmlsZQorCitWZXJpZnkgdGhhdCBwbHVtYmluZyBjb21tYW5kcyB3b3JrIHdoZW4gLmdpdCBpcyBhIGZpbGUKKycKKy4gLi90ZXN0LWxpYi5zaAorCitvYmpwYXRoKCkgeworCWVjaG8gIiQxIiB8IHNlZCAtZSAnc3xcKC4uXCl8XDEvfCcKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBzZXR1cCcgJworCVJFQUw9IiQocHdkKS8ucmVhbCIgJiYKKwltdiAuZ2l0ICIkUkVBTCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIHNldHVwOiBpbnZhbGlkIC5naXQgZmlsZSBmb3JtYXQnICcKKwllY2hvICJnaXRkaXIgJFJFQUwiID4uZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAyPi5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpbnZhbGlkIGdpdGZpbGUgZm9ybWF0IiAuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhZCBzZXR1cDogaW52YWxpZCAuZ2l0IGZpbGUgcGF0aCcgJworCWVjaG8gImdpdGRpcjogJFJFQUwubm90IiA+LmdpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgMj4uZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibm90IGEgZ2l0IHJlcG9zaXRvcnkiIC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWwgc2V0dXAgKyBjaGVjayByZXYtcGFyc2UgLS1naXQtZGlyJyAnCisJZWNobyAiZ2l0ZGlyOiAkUkVBTCIgPi5naXQgJiYKKwl0ZXN0ICIkUkVBTCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGhhc2gtb2JqZWN0JyAnCisJZWNobyAiZm9vIiA+YmFyICYmCisJU0hBPSQoY2F0IGJhciB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkUkVBTC9vYmplY3RzLyQob2JqcGF0aCAkU0hBKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY2F0LWZpbGUnICcKKwlnaXQgY2F0LWZpbGUgYmxvYiAkU0hBID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBiYXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVwZGF0ZS1pbmRleCcgJworCXRlc3RfcGF0aF9pc19taXNzaW5nICIkUkVBTC9pbmRleCIgJiYKKwlybSAtZiAiJFJFQUwvb2JqZWN0cy8kKG9ianBhdGggJFNIQSkiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBiYXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJFJFQUwvaW5kZXgiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRSRUFML29iamVjdHMvJChvYmpwYXRoICRTSEEpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3cml0ZS10cmVlJyAnCisJU0hBPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRSRUFML29iamVjdHMvJChvYmpwYXRoICRTSEEpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb21taXQtdHJlZScgJworCVNIQT0kKGVjaG8gImNvbW1pdCBiYXIiIHwgZ2l0IGNvbW1pdC10cmVlICRTSEEpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRSRUFML29iamVjdHMvJChvYmpwYXRoICRTSEEpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZXYtbGlzdCcgJworCWVjaG8gJFNIQSA+IiRSRUFML0hFQUQiICYmCisJdGVzdCAiJFNIQSIgPSAiJChnaXQgcmV2LWxpc3QgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwX2dpdF9kaXIgdHdpY2UgaW4gc3ViZGlyJyAnCisJZ2l0IGluaXQgc2dkICYmCisJKAorCQljZCBzZ2QgJiYKKwkJZ2l0IGNvbmZpZyBhbGlhcy5sc2ZpIGxzLWZpbGVzICYmCisJCW12IC5naXQgLnJlYWxnaXQgJiYKKwkJZWNobyAiZ2l0ZGlyOiAucmVhbGdpdCIgPi5naXQgJiYKKwkJbWtkaXIgc3ViZGlyICYmCisJCWNkIHN1YmRpciAmJgorCQk+Zm9vICYmCisJCWdpdCBhZGQgZm9vICYmCisJCWdpdCBsc2ZpID5hY3R1YWwgJiYKKwkJZWNobyBmb28gPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW50ZXJfcmVwbyBub24tc3RyaWN0IG1vZGUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGVudGVyX3JlcG8gJiYKKwkoCisJCWNkIGVudGVyX3JlcG8gJiYKKwkJdGVzdF90aWNrICYmCisJCXRlc3RfY29tbWl0IGZvbyAmJgorCQltdiAuZ2l0IC5yZWFsZ2l0ICYmCisJCWVjaG8gImdpdGRpcjogLnJlYWxnaXQiID4uZ2l0CisJKSAmJgorCWhlYWQ9JChnaXQgLUMgZW50ZXJfcmVwbyByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgbHMtcmVtb3RlIGVudGVyX3JlcG8gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJJGhlYWQJSEVBRAorCSRoZWFkCXJlZnMvaGVhZHMvbWFzdGVyCisJJGhlYWQJcmVmcy90YWdzL2ZvbworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbnRlcl9yZXBvIGxpbmtlZCBjaGVja291dCcgJworCSgKKwkJY2QgZW50ZXJfcmVwbyAmJgorCQlnaXQgd29ya3RyZWUgYWRkICAuLi9mb28gcmVmcy90YWdzL2ZvbworCSkgJiYKKwloZWFkPSQoZ2l0IC1DIGVudGVyX3JlcG8gcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGxzLXJlbW90ZSBmb28gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJJGhlYWQJSEVBRAorCSRoZWFkCXJlZnMvaGVhZHMvbWFzdGVyCisJJGhlYWQJcmVmcy90YWdzL2ZvbworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbnRlcl9yZXBvIHN0cmljdCBtb2RlJyAnCisJaGVhZD0kKGdpdCAtQyBlbnRlcl9yZXBvIHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBscy1yZW1vdGUgLS11cGxvYWQtcGFjaz0iZ2l0IHVwbG9hZC1wYWNrIC0tc3RyaWN0IiBmb28vLmdpdCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkkaGVhZAlIRUFECisJJGhlYWQJcmVmcy9oZWFkcy9tYXN0ZXIKKwkkaGVhZAlyZWZzL3RhZ3MvZm9vCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwMy1hdHRyaWJ1dGVzLnNoIGIvdC90MDAwMy1hdHRyaWJ1dGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2NjA1OTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDAzLWF0dHJpYnV0ZXMuc2gKQEAgLTAsMCArMSwzNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPWdpdGF0dHJpYnV0ZXMKKworLiAuL3Rlc3QtbGliLnNoCisKK2F0dHJfY2hlY2sgKCkgeworCXBhdGg9IiQxIiBleHBlY3Q9IiQyIiBnaXRfb3B0cz0iJDMiICYmCisKKwlnaXQgJGdpdF9vcHRzIGNoZWNrLWF0dHIgdGVzdCAtLSAiJHBhdGgiID5hY3R1YWwgMj5lcnIgJiYKKwllY2hvICIkcGF0aDogdGVzdDogJGV4cGVjdCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCit9CisKK2F0dHJfY2hlY2tfcXVvdGUgKCkgeworCXBhdGg9IiQxIiBxdW90ZWRfcGF0aD0iJDIiIGV4cGVjdD0iJDMiICYmCisKKwlnaXQgY2hlY2stYXR0ciB0ZXN0IC0tICIkcGF0aCIgPmFjdHVhbCAmJgorCWVjaG8gIlwiJHF1b3RlZF9wYXRoXCI6IHRlc3Q6ICRleHBlY3QiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3Blbi1xdW90ZWQgcGF0aG5hbWUnICcKKwllY2hvICJcImEgdGVzdD1hIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlhdHRyX2NoZWNrIGEgdW5zcGVjaWZpZWQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIC1wIGEvYi9kIGEvYyBiICYmCisJKAorCQllY2hvICJbYXR0cl1ub3Rlc3QgIXRlc3QiICYmCisJCWVjaG8gIlwiIGQgXCIJdGVzdD1kIiAmJgorCQllY2hvICIgZQl0ZXN0PWUiICYmCisJCWVjaG8gIiBlXCIJdGVzdD1lIiAmJgorCQllY2hvICJmCXRlc3Q9ZiIgJiYKKwkJZWNobyAiYS9pIHRlc3Q9YS9pIiAmJgorCQllY2hvICJvbm9mZiB0ZXN0IC10ZXN0IiAmJgorCQllY2hvICJvZmZvbiAtdGVzdCB0ZXN0IiAmJgorCQllY2hvICJubyBub3Rlc3QiICYmCisJCWVjaG8gIkEvZS9GIHRlc3Q9QS9lL0YiCisJKSA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkoCisJCWVjaG8gImcgdGVzdD1hL2ciICYmCisJCWVjaG8gImIvZyB0ZXN0PWEvYi9nIgorCSkgPmEvLmdpdGF0dHJpYnV0ZXMgJiYKKwkoCisJCWVjaG8gImggdGVzdD1hL2IvaCIgJiYKKwkJZWNobyAiZC8qIHRlc3Q9YS9iL2QvKiIgJiYKKwkJZWNobyAiZC95ZXMgbm90ZXN0IgorCSkgPmEvYi8uZ2l0YXR0cmlidXRlcyAmJgorCSgKKwkJZWNobyAiZ2xvYmFsIHRlc3Q9Z2xvYmFsIgorCSkgPiIkSE9NRSIvZ2xvYmFsLWdpdGF0dHJpYnV0ZXMgJiYKKwljYXQgPDwtRU9GID5leHBlY3QtYWxsCisJZjogdGVzdDogZgorCWEvZjogdGVzdDogZgorCWEvYy9mOiB0ZXN0OiBmCisJYS9nOiB0ZXN0OiBhL2cKKwlhL2IvZzogdGVzdDogYS9iL2cKKwliL2c6IHRlc3Q6IHVuc3BlY2lmaWVkCisJYS9iL2g6IHRlc3Q6IGEvYi9oCisJYS9iL2QvZzogdGVzdDogYS9iL2QvKgorCW9ub2ZmOiB0ZXN0OiB1bnNldAorCW9mZm9uOiB0ZXN0OiBzZXQKKwlubzogbm90ZXN0OiBzZXQKKwlubzogdGVzdDogdW5zcGVjaWZpZWQKKwlhL2IvZC9ubzogbm90ZXN0OiBzZXQKKwlhL2IvZC9ubzogdGVzdDogYS9iL2QvKgorCWEvYi9kL3llczogbm90ZXN0OiBzZXQKKwlhL2IvZC95ZXM6IHRlc3Q6IHVuc3BlY2lmaWVkCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgbGluZSBjaGVja3MnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyIC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgdGVzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyIHRlc3QgLS0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLSBmICYmCisJZWNobyAiZiIgfCB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLXN0ZGluICYmCisJZWNobyAiZiIgfCB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLXN0ZGluIC0tIGYgJiYKKwllY2hvICJmIiB8IHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyIC0tc3RkaW4gdGVzdCAtLSBmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgIiIgLS0gZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgdGVzdCcgJworCisJYXR0cl9jaGVjayAiIGQgIiBkICYmCisJYXR0cl9jaGVjayBlIGUgJiYKKwlhdHRyX2NoZWNrX3F1b3RlIGVcIiBlXFxcIiBlICYmCisKKwlhdHRyX2NoZWNrIGYgZiAmJgorCWF0dHJfY2hlY2sgYS9mIGYgJiYKKwlhdHRyX2NoZWNrIGEvYy9mIGYgJiYKKwlhdHRyX2NoZWNrIGEvZyBhL2cgJiYKKwlhdHRyX2NoZWNrIGEvYi9nIGEvYi9nICYmCisJYXR0cl9jaGVjayBiL2cgdW5zcGVjaWZpZWQgJiYKKwlhdHRyX2NoZWNrIGEvYi9oIGEvYi9oICYmCisJYXR0cl9jaGVjayBhL2IvZC9nICJhL2IvZC8qIiAmJgorCWF0dHJfY2hlY2sgb25vZmYgdW5zZXQgJiYKKwlhdHRyX2NoZWNrIG9mZm9uIHNldCAmJgorCWF0dHJfY2hlY2sgbm8gdW5zcGVjaWZpZWQgJiYKKwlhdHRyX2NoZWNrIGEvYi9kL25vICJhL2IvZC8qIiAmJgorCWF0dHJfY2hlY2sgYS9iL2QveWVzIHVuc3BlY2lmaWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSBtYXRjaGluZyBpcyBjYXNlIHNlbnNpdGl2ZSB3aGVuIGNvcmUuaWdub3JlY2FzZT0wJyAnCisKKwlhdHRyX2NoZWNrIEYgdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgYS9GIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvYy9GIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIGEvRyB1bnNwZWNpZmllZCAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJYXR0cl9jaGVjayBhL0IvZyBhL2cgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgYS9iL0cgdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgYS9iL0ggdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgYS9iL0QvZyBhL2cgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgb05vRmYgdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgb0ZmT24gdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgTk8gdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgYS9iL0QvTk8gdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgYS9iL2QvWUVTIGEvYi9kLyogIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCWF0dHJfY2hlY2sgYS9FL2YgZiAiLWMgY29yZS5pZ25vcmVjYXNlPTAiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlIG1hdGNoaW5nIGlzIGNhc2UgaW5zZW5zaXRpdmUgd2hlbiBjb3JlLmlnbm9yZWNhc2U9MScgJworCisJYXR0cl9jaGVjayBGIGYgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9GIGYgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9jL0YgZiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL0cgYS9nICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvQi9nIGEvYi9nICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvYi9HIGEvYi9nICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvYi9IIGEvYi9oICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvYi9EL2cgImEvYi9kLyoiICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIG9Ob0ZmIHVuc2V0ICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIG9GZk9uIHNldCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBOTyB1bnNwZWNpZmllZCAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2IvRC9OTyAiYS9iL2QvKiIgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9iL2QvWUVTIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvRS9mICJBL2UvRiIgIi1jIGNvcmUuaWdub3JlY2FzZT0xIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0FTRV9JTlNFTlNJVElWRV9GUyAnYWRkaXRpb25hbCBjYXNlIGluc2Vuc2l0aXZpdHkgdGVzdHMnICcKKwlhdHRyX2NoZWNrIGEvQi9EL2cgYS9nICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIEEvQi9EL05PIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIEEvYi9oIGEvYi9oICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvQi9EL2cgImEvYi9kLyoiICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIEEvQi9EL05PICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vubm9ybWFsaXplZCBwYXRocycgJworCWF0dHJfY2hlY2sgLi9mIGYgJiYKKwlhdHRyX2NoZWNrIC4vYS9nIGEvZyAmJgorCWF0dHJfY2hlY2sgYS8uL2cgYS9nICYmCisJYXR0cl9jaGVjayBhL2MvLi4vYi9nIGEvYi9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIHBhdGhzJyAnCisJKGNkIGEgJiYgYXR0cl9jaGVjayAuLi9mIGYpICYmCisJKGNkIGEgJiYgYXR0cl9jaGVjayBmIGYpICYmCisJKGNkIGEgJiYgYXR0cl9jaGVjayBpIGEvaSkgJiYKKwkoY2QgYSAmJiBhdHRyX2NoZWNrIGcgYS9nKSAmJgorCShjZCBhICYmIGF0dHJfY2hlY2sgYi9nIGEvYi9nKSAmJgorCShjZCBiICYmIGF0dHJfY2hlY2sgLi4vYS9mIGYpICYmCisJKGNkIGIgJiYgYXR0cl9jaGVjayAuLi9hL2cgYS9nKSAmJgorCShjZCBiICYmIGF0dHJfY2hlY2sgLi4vYS9iL2cgYS9iL2cpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZpeGVzIGFyZSBub3QgY29uZnVzZWQgd2l0aCBsZWFkaW5nIGRpcmVjdG9yaWVzJyAnCisJYXR0cl9jaGVjayBhX3BsdXMvZyB1bnNwZWNpZmllZCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlhL2c6IHRlc3Q6IGEvZworCWFfcGx1cy9nOiB0ZXN0OiB1bnNwZWNpZmllZAorCUVPRgorCWdpdCBjaGVjay1hdHRyIHRlc3QgYS9nIGFfcGx1cy9nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUuYXR0cmlidXRlc2ZpbGUnICcKKwlhdHRyX2NoZWNrIGdsb2JhbCB1bnNwZWNpZmllZCAmJgorCWdpdCBjb25maWcgY29yZS5hdHRyaWJ1dGVzZmlsZSAiJEhPTUUvZ2xvYmFsLWdpdGF0dHJpYnV0ZXMiICYmCisJYXR0cl9jaGVjayBnbG9iYWwgZ2xvYmFsICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF0dHJpYnV0ZXNmaWxlICJ+L2dsb2JhbC1naXRhdHRyaWJ1dGVzIiAmJgorCWF0dHJfY2hlY2sgZ2xvYmFsIGdsb2JhbCAmJgorCWVjaG8gImdsb2JhbCB0ZXN0PXByZWNlZGVuY2UiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlhdHRyX2NoZWNrIGdsb2JhbCBwcmVjZWRlbmNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSB0ZXN0OiByZWFkIHBhdGhzIGZyb20gc3RkaW4nICcKKwlncmVwIC12IG5vdGVzdCA8ZXhwZWN0LWFsbCA+ZXhwZWN0ICYmCisJc2VkIC1lICJzLzouKi8vIiA8ZXhwZWN0IHwgZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiB0ZXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSB0ZXN0OiAtLWFsbCBvcHRpb24nICcKKwlncmVwIC12IHVuc3BlY2lmaWVkIDxleHBlY3QtYWxsIHwgc29ydCA+c3BlY2lmaWVkLWFsbCAmJgorCXNlZCAtZSAicy86LiovLyIgPGV4cGVjdC1hbGwgfCB1bmlxID5zdGRpbi1hbGwgJiYKKwlnaXQgY2hlY2stYXR0ciAtLXN0ZGluIC0tYWxsIDxzdGRpbi1hbGwgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBzcGVjaWZpZWQtYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgdGVzdDogLS1jYWNoZWQgb3B0aW9uJyAnCisJZ2l0IGNoZWNrLWF0dHIgLS1jYWNoZWQgLS1zdGRpbiAtLWFsbCA8c3RkaW4tYWxsIHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgYS8uZ2l0YXR0cmlidXRlcyBhL2IvLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2stYXR0ciAtLWNhY2hlZCAtLXN0ZGluIC0tYWxsIDxzdGRpbi1hbGwgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBzcGVjaWZpZWQtYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IHN1YmRpciBhdHRyaWJ1dGUgdGVzdCcgJworCWF0dHJfY2hlY2sgYS9pIGEvaSAmJgorCWF0dHJfY2hlY2sgc3ViZGlyL2EvaSB1bnNwZWNpZmllZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWdhdGl2ZSBwYXR0ZXJucycgJworCWVjaG8gIiFmIHRlc3Q9YmFyIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2stYXR0ciB0ZXN0IC0tICciJyInIWYnIiciJyAyPmVycm9ycyAmJgorCXRlc3RfaTE4bmdyZXAgIk5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBpZ25vcmVkIiBlcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0dGVybnMgc3RhcnRpbmcgd2l0aCBleGNsYW1hdGlvbicgJworCWVjaG8gIlwhZiB0ZXN0PWZvbyIgPi5naXRhdHRyaWJ1dGVzICYmCisJYXR0cl9jaGVjayAiIWYiIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciKioiIHRlc3QnICcKKwllY2hvICIqKi9mIGZvbz1iYXIiID4uZ2l0YXR0cmlidXRlcyAmJgorCWNhdCA8PFxFT0YgPmV4cGVjdCAmJgorZjogZm9vOiBiYXIKK2EvZjogZm9vOiBiYXIKK2EvYi9mOiBmb286IGJhcgorYS9iL2MvZjogZm9vOiBiYXIKK0VPRgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiZiIgPmFjdHVhbCAyPmVyciAmJgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiYS9mIiA+PmFjdHVhbCAyPj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImEvYi9mIiA+PmFjdHVhbCAyPj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImEvYi9jL2YiID4+YWN0dWFsIDI+PmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyIqKiIgd2l0aCBubyBzbGFzaGVzIHRlc3QnICcKKwllY2hvICJhKipmIGZvbz1iYXIiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiZiIgPmFjdHVhbCAmJgorCWNhdCA8PFxFT0YgPmV4cGVjdCAmJgorZjogZm9vOiB1bnNwZWNpZmllZAorYWY6IGZvbzogYmFyCitheGY6IGZvbzogYmFyCithL2Y6IGZvbzogdW5zcGVjaWZpZWQKK2EvYi9mOiBmb286IHVuc3BlY2lmaWVkCithL2IvYy9mOiBmb286IHVuc3BlY2lmaWVkCitFT0YKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImYiID5hY3R1YWwgMj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImFmIiA+PmFjdHVhbCAyPmVyciAmJgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiYXhmIiA+PmFjdHVhbCAyPmVyciAmJgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiYS9mIiA+PmFjdHVhbCAyPj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImEvYi9mIiA+PmFjdHVhbCAyPj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImEvYi9jL2YiID4+YWN0dWFsIDI+PmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIC0tZ2l0LWRpciBhbmQgLS13b3JrLXRyZWUnICcKKwlta2RpciB1bnJlYWwgcmVhbCAmJgorCWdpdCBpbml0IHJlYWwgJiYKKwllY2hvICJmaWxlIHRlc3Q9aW4tcmVhbCIgPnJlYWwvLmdpdGF0dHJpYnV0ZXMgJiYKKwkoCisJCWNkIHVucmVhbCAmJgorCQlhdHRyX2NoZWNrIGZpbGUgaW4tcmVhbCAiLS1naXQtZGlyIC4uL3JlYWwvLmdpdCAtLXdvcmstdHJlZSAuLi9yZWFsIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZScgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG9zaXRvcnk6IGNoZWNrIHRoYXQgLmdpdGF0dHJpYnV0ZSBpcyBpZ25vcmVkJyAnCisJKAorCQljZCBiYXJlLmdpdCAmJgorCQkoCisJCQllY2hvICJmCXRlc3Q9ZiIgJiYKKwkJCWVjaG8gImEvaSB0ZXN0PWEvaSIKKwkJKSA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJYXR0cl9jaGVjayBmIHVuc3BlY2lmaWVkICYmCisJCWF0dHJfY2hlY2sgYS9mIHVuc3BlY2lmaWVkICYmCisJCWF0dHJfY2hlY2sgYS9jL2YgdW5zcGVjaWZpZWQgJiYKKwkJYXR0cl9jaGVjayBhL2kgdW5zcGVjaWZpZWQgJiYKKwkJYXR0cl9jaGVjayBzdWJkaXIvYS9pIHVuc3BlY2lmaWVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG9zaXRvcnk6IGNoZWNrIHRoYXQgLS1jYWNoZWQgaG9ub3JzIGluZGV4JyAnCisJKAorCQljZCBiYXJlLmdpdCAmJgorCQlHSVRfSU5ERVhfRklMRT0uLi8uZ2l0L2luZGV4IFwKKwkJZ2l0IGNoZWNrLWF0dHIgLS1jYWNoZWQgLS1zdGRpbiAtLWFsbCA8Li4vc3RkaW4tYWxsIHwKKwkJc29ydCA+YWN0dWFsICYmCisJCXRlc3RfY21wIC4uL3NwZWNpZmllZC1hbGwgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG9zaXRvcnk6IHRlc3QgaW5mby9hdHRyaWJ1dGVzJyAnCisJKAorCQljZCBiYXJlLmdpdCAmJgorCQkoCisJCQllY2hvICJmCXRlc3Q9ZiIgJiYKKwkJCWVjaG8gImEvaSB0ZXN0PWEvaSIKKwkJKSA+aW5mby9hdHRyaWJ1dGVzICYmCisJCWF0dHJfY2hlY2sgZiBmICYmCisJCWF0dHJfY2hlY2sgYS9mIGYgJiYKKwkJYXR0cl9jaGVjayBhL2MvZiBmICYmCisJCWF0dHJfY2hlY2sgYS9pIGEvaSAmJgorCQlhdHRyX2NoZWNrIHN1YmRpci9hL2kgdW5zcGVjaWZpZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpbmFyeSBtYWNybyBleHBhbmRlZCBieSAtYScgJworCWVjaG8gImZpbGUgYmluYXJ5IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZTogYmluYXJ5OiBzZXQKKwlmaWxlOiBkaWZmOiB1bnNldAorCWZpbGU6IG1lcmdlOiB1bnNldAorCWZpbGU6IHRleHQ6IHVuc2V0CisJRU9GCisJZ2l0IGNoZWNrLWF0dHIgLWEgZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1ZXJ5IGJpbmFyeSBtYWNybyBkaXJlY3RseScgJworCWVjaG8gImZpbGUgYmluYXJ5IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvIGZpbGU6IGJpbmFyeTogc2V0ID5leHBlY3QgJiYKKwlnaXQgY2hlY2stYXR0ciBiaW5hcnkgZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDQtdW53cml0YWJsZS5zaCBiL3QvdDAwMDQtdW53cml0YWJsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzEzN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwNC11bndyaXRhYmxlLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkZXRlY3QgdW53cml0YWJsZSByZXBvc2l0b3J5IGFuZCBmYWlsIGNvcnJlY3RseScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICd3cml0ZS10cmVlIHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCA3NzUgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyIgJiYKKwljaG1vZCBhLXcgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3cml0ZS10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnY29tbWl0IHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCA3NzUgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyIgJiYKKwljaG1vZCBhLXcgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAndXBkYXRlLWluZGV4IHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCA3NzUgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyIgJiYKKwllY2hvIDZPID5maWxlICYmCisJY2htb2QgYS13IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdhZGQgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/IiAmJgorCWVjaG8gYiA+ZmlsZSAmJgorCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBmaWxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNS1zaWduYWxzLnNoIGIvdC90MDAwNS1zaWduYWxzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjMjE0YmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA1LXNpZ25hbHMuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NpZ25hbHMgd29yayBhcyB3ZSBleHBlY3QnCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5leHBlY3QgPDxFT0YKK3RocmVlCit0d28KK29uZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ2NoYWluIHdvcmtzJyAnCisJeyB0ZXN0LXRvb2wgc2lnY2hhaW4gPmFjdHVhbDsgcmV0PSQ/OyB9ICYmCisJeworCQkjIFNpZ25hbCBkZWF0aCBieSByYWlzZSgpIG9uIFdpbmRvd3MgYWN0cyBsaWtlIGV4aXQoMyksCisJCSMgcmVnYXJkbGVzcyBvZiB0aGUgc2lnbmFsIG51bWJlci4gU28gd2UgbXVzdCBhbGxvdyB0aGF0CisJCSMgYXMgd2VsbCBhcyB0aGUgbm9ybWFsIHNpZ25hbCBjaGVjay4KKwkJdGVzdF9tYXRjaF9zaWduYWwgMTUgIiRyZXQiIHx8CisJCXRlc3QgIiRyZXQiID0gMworCX0gJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdzaWduYWxzIGFyZSBwcm9wYWdhdGVkIHVzaW5nIHNoZWxsIGNvbnZlbnRpb24nICcKKwkjIHdlIHVzZSBleGVjIGhlcmUgdG8gYXZvaWQgYW55IHN1Yi1zaGVsbCBpbnRlcnByZXRhdGlvbgorCSMgb2YgdGhlIGV4aXQgY29kZQorCWdpdCBjb25maWcgYWxpYXMuc2lndGVybSAiIWV4ZWMgdGVzdC10b29sIHNpZ2NoYWluIiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTQzIGdpdCBzaWd0ZXJtCisnCisKK2xhcmdlX2dpdCAoKSB7CisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDEwMCkKKwlkbworCQlnaXQgZGlmZiAtLWNhY2hlZCAtLWJpbmFyeSB8fCByZXR1cm4KKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBibG9iJyAnCisJdGVzdC10b29sIGdlbnJhbmRvbSBmb28gMTYzODQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2EgY29uc3RpcGF0ZWQgZ2l0IGRpZXMgd2l0aCBTSUdQSVBFJyAnCisJT1VUPSQoICgobGFyZ2VfZ2l0OyBlY2hvICQ/IDE+JjMpIHwgOikgMz4mMSApICYmCisJdGVzdF9tYXRjaF9zaWduYWwgMTMgIiRPVVQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdhIGNvbnN0aXBhdGVkIGdpdCBkaWVzIHdpdGggU0lHUElQRSBldmVuIGlmIHBhcmVudCBpZ25vcmVzIGl0JyAnCisJT1VUPSQoICgodHJhcCAiIiBQSVBFOyBsYXJnZV9naXQ7IGVjaG8gJD8gMT4mMykgfCA6KSAzPiYxICkgJiYKKwl0ZXN0X21hdGNoX3NpZ25hbCAxMyAiJE9VVCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA2LWRhdGUuc2ggYi90L3QwMDA2LWRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDlmY2M4MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDYtZGF0ZS5zaApAQCAtMCwwICsxLDE0OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGF0ZSBwYXJzaW5nIGFuZCBwcmludGluZycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGFyYml0cmFyeSByZWZlcmVuY2UgdGltZTogMjAwOS0wOC0zMCAxOToyMDowMAorR0lUX1RFU1RfREFURV9OT1c9MTI1MTY2MDAwMDsgZXhwb3J0IEdJVF9URVNUX0RBVEVfTk9XCisKK2NoZWNrX3JlbGF0aXZlKCkgeworCXQ9JCgoJEdJVF9URVNUX0RBVEVfTk9XIC0gJDEpKQorCWVjaG8gIiR0IC0+ICQyIiA+ZXhwZWN0CisJdGVzdF9leHBlY3RfJHszOi1zdWNjZXNzfSAicmVsYXRpdmUgZGF0ZSAoJDIpIiAiCisJdGVzdC10b29sIGRhdGUgcmVsYXRpdmUgJHQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCitjaGVja19yZWxhdGl2ZSA1ICc1IHNlY29uZHMgYWdvJworY2hlY2tfcmVsYXRpdmUgMzAwICc1IG1pbnV0ZXMgYWdvJworY2hlY2tfcmVsYXRpdmUgMTgwMDAgJzUgaG91cnMgYWdvJworY2hlY2tfcmVsYXRpdmUgNDMyMDAwICc1IGRheXMgYWdvJworY2hlY2tfcmVsYXRpdmUgMTcyODAwMCAnMyB3ZWVrcyBhZ28nCitjaGVja19yZWxhdGl2ZSAxMzAwMDAwMCAnNSBtb250aHMgYWdvJworY2hlY2tfcmVsYXRpdmUgMzc1MDAwMDAgJzEgeWVhciwgMiBtb250aHMgYWdvJworY2hlY2tfcmVsYXRpdmUgNTUxODgwMDAgJzEgeWVhciwgOSBtb250aHMgYWdvJworY2hlY2tfcmVsYXRpdmUgNjMwMDAwMDAwICcyMCB5ZWFycyBhZ28nCitjaGVja19yZWxhdGl2ZSAzMTQ0OTYwMCAnMTIgbW9udGhzIGFnbycKK2NoZWNrX3JlbGF0aXZlIDYyOTg1NjAwICcyIHllYXJzIGFnbycKKworY2hlY2tfc2hvdyAoKSB7CisJZm9ybWF0PSQxCisJdGltZT0kMgorCWV4cGVjdD0kMworCXByZXJlcXM9JDQKKwl6b25lPSQ1CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxcyAic2hvdyBkYXRlICgkZm9ybWF0OiR0aW1lKSIgJworCQllY2hvICIkdGltZSAtPiAkZXhwZWN0IiA+ZXhwZWN0ICYmCisJCVRaPSR7em9uZTotJFRafSB0ZXN0LXRvb2wgZGF0ZSBzaG93OiIkZm9ybWF0IiAiJHRpbWUiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK30KKworIyBhcmJpdHJhcnkgYnV0IHNlbnNpYmxlIHRpbWUgZm9yIGV4YW1wbGVzCitUSU1FPScxNDY2MDAwMDAwICswMjAwJworY2hlY2tfc2hvdyBpc284NjAxICIkVElNRSIgJzIwMTYtMDYtMTUgMTY6MTM6MjAgKzAyMDAnCitjaGVja19zaG93IGlzbzg2MDEtc3RyaWN0ICIkVElNRSIgJzIwMTYtMDYtMTVUMTY6MTM6MjArMDI6MDAnCitjaGVja19zaG93IHJmYzI4MjIgIiRUSU1FIiAnV2VkLCAxNSBKdW4gMjAxNiAxNjoxMzoyMCArMDIwMCcKK2NoZWNrX3Nob3cgc2hvcnQgIiRUSU1FIiAnMjAxNi0wNi0xNScKK2NoZWNrX3Nob3cgZGVmYXVsdCAiJFRJTUUiICdXZWQgSnVuIDE1IDE2OjEzOjIwIDIwMTYgKzAyMDAnCitjaGVja19zaG93IHJhdyAiJFRJTUUiICcxNDY2MDAwMDAwICswMjAwJworY2hlY2tfc2hvdyB1bml4ICIkVElNRSIgJzE0NjYwMDAwMDAnCitjaGVja19zaG93IGlzby1sb2NhbCAiJFRJTUUiICcyMDE2LTA2LTE1IDE0OjEzOjIwICswMDAwJworY2hlY2tfc2hvdyByYXctbG9jYWwgIiRUSU1FIiAnMTQ2NjAwMDAwMCArMDAwMCcKK2NoZWNrX3Nob3cgdW5peC1sb2NhbCAiJFRJTUUiICcxNDY2MDAwMDAwJworCitjaGVja19zaG93ICdmb3JtYXQ6JXonICIkVElNRSIgJyswMjAwJworY2hlY2tfc2hvdyAnZm9ybWF0LWxvY2FsOiV6JyAiJFRJTUUiICcrMDAwMCcKK2NoZWNrX3Nob3cgJ2Zvcm1hdDolWicgIiRUSU1FIiAnJworY2hlY2tfc2hvdyAnZm9ybWF0LWxvY2FsOiVaJyAiJFRJTUUiICdVVEMnCitjaGVja19zaG93ICdmb3JtYXQ6JSV6JyAiJFRJTUUiICcleicKK2NoZWNrX3Nob3cgJ2Zvcm1hdC1sb2NhbDolJXonICIkVElNRSIgJyV6JworCitjaGVja19zaG93ICdmb3JtYXQ6JVktJW0tJWQgJUg6JU06JVMnICIkVElNRSIgJzIwMTYtMDYtMTUgMTY6MTM6MjAnCitjaGVja19zaG93ICdmb3JtYXQtbG9jYWw6JVktJW0tJWQgJUg6JU06JVMnICIkVElNRSIgJzIwMTYtMDYtMTUgMDk6MTM6MjAnICcnIEVTVDUKKworIyBhcmJpdHJhcnkgdGltZSBhYnN1cmRseSBmYXIgaW4gdGhlIGZ1dHVyZQorRlVUVVJFPSI1NzU4MTIyMjk2IC0wNDAwIgorY2hlY2tfc2hvdyBpc28gICAgICAgIiRGVVRVUkUiICIyMTUyLTA2LTE5IDE4OjI0OjU2IC0wNDAwIiBUSU1FX0lTXzY0QklULFRJTUVfVF9JU182NEJJVAorY2hlY2tfc2hvdyBpc28tbG9jYWwgIiRGVVRVUkUiICIyMTUyLTA2LTE5IDIyOjI0OjU2ICswMDAwIiBUSU1FX0lTXzY0QklULFRJTUVfVF9JU182NEJJVAorCitjaGVja19wYXJzZSgpIHsKKwllY2hvICIkMSAtPiAkMiIgPmV4cGVjdAorCXRlc3RfZXhwZWN0XyR7NDotc3VjY2Vzc30gInBhcnNlIGRhdGUgKCQxJHszOisgVFo9JDN9KSIgIgorCVRaPSR7MzotJFRafSB0ZXN0LXRvb2wgZGF0ZSBwYXJzZSAnJDEnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCitjaGVja19wYXJzZSAyMDA4IGJhZAorY2hlY2tfcGFyc2UgMjAwOC0wMiBiYWQKK2NoZWNrX3BhcnNlIDIwMDgtMDItMTQgYmFkCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NScgJzIwMDgtMDItMTQgMjA6MzA6NDUgKzAwMDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDUwMCcgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA1MDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDAxNScgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTAwMTUnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtNScgJzIwMDgtMDItMTQgMjA6MzA6NDUgKzAwMDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtNTonICcyMDA4LTAyLTE0IDIwOjMwOjQ1ICswMDAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA1JyAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDUwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC06MzAnICcyMDA4LTAyLTE0IDIwOjMwOjQ1ICswMDAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTA1OjAwJyAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDUwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1JyAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDUwMCcgRVNUNQorCitjaGVja19hcHByb3hpZGF0ZSgpIHsKKwllY2hvICIkMSAtPiAkMiArMDAwMCIgPmV4cGVjdAorCXRlc3RfZXhwZWN0XyR7Mzotc3VjY2Vzc30gInBhcnNlIGFwcHJveGlkYXRlICgkMSkiICIKKwl0ZXN0LXRvb2wgZGF0ZSBhcHByb3hpZGF0ZSAnJDEnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCitjaGVja19hcHByb3hpZGF0ZSBub3cgJzIwMDktMDgtMzAgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnNSBzZWNvbmRzIGFnbycgJzIwMDktMDgtMzAgMTk6MTk6NTUnCitjaGVja19hcHByb3hpZGF0ZSA1LnNlY29uZHMuYWdvICcyMDA5LTA4LTMwIDE5OjE5OjU1JworY2hlY2tfYXBwcm94aWRhdGUgMTAubWludXRlcy5hZ28gJzIwMDktMDgtMzAgMTk6MTA6MDAnCitjaGVja19hcHByb3hpZGF0ZSB5ZXN0ZXJkYXkgJzIwMDktMDgtMjkgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAzLmRheXMuYWdvICcyMDA5LTA4LTI3IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMy53ZWVrcy5hZ28gJzIwMDktMDgtMDkgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAzLm1vbnRocy5hZ28gJzIwMDktMDUtMzAgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAyLnllYXJzLjMubW9udGhzLmFnbyAnMjAwNy0wNS0zMCAxOToyMDowMCcKKworY2hlY2tfYXBwcm94aWRhdGUgJzZhbSB5ZXN0ZXJkYXknICcyMDA5LTA4LTI5IDA2OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzZwbSB5ZXN0ZXJkYXknICcyMDA5LTA4LTI5IDE4OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzM6MDAnICcyMDA5LTA4LTMwIDAzOjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzE1OjAwJyAnMjAwOS0wOC0zMCAxNTowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICdub29uIHRvZGF5JyAnMjAwOS0wOC0zMCAxMjowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICdub29uIHllc3RlcmRheScgJzIwMDktMDgtMjkgMTI6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnSmFudWFyeSA1dGggbm9vbiBwbScgJzIwMDktMDEtMDUgMTI6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnMTBhbSBub29uJyAnMjAwOS0wOC0yOSAxMjowMDowMCcKKworY2hlY2tfYXBwcm94aWRhdGUgJ2xhc3QgdHVlc2RheScgJzIwMDktMDgtMjUgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnSnVseSA1dGgnICcyMDA5LTA3LTA1IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzA2LzA1LzIwMDknICcyMDA5LTA2LTA1IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzA2LjA1LjIwMDknICcyMDA5LTA1LTA2IDE5OjIwOjAwJworCitjaGVja19hcHByb3hpZGF0ZSAnSnVuIDYsIDVBTScgJzIwMDktMDYtMDYgMDU6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnNUFNIEp1biA2JyAnMjAwOS0wNi0wNiAwNTowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICc2QU0sIEp1bmUgNywgMjAwOScgJzIwMDktMDYtMDcgMDY6MDA6MDAnCisKK2NoZWNrX2FwcHJveGlkYXRlICcyMDA4LTEyLTAxJyAnMjAwOC0xMi0wMSAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcyMDA5LTEyLTAxJyAnMjAwOS0xMi0wMSAxOToyMDowMCcKKworY2hlY2tfZGF0ZV9mb3JtYXRfaHVtYW4oKSB7CisJdD0kKCgkR0lUX1RFU1RfREFURV9OT1cgLSAkMSkpCisJZWNobyAiJHQgLT4gJDIiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJodW1hbiBkYXRlICR0IiAnCisJCXRlc3QtdG9vbCBkYXRlIGh1bWFuICR0ID5hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKK30KKworY2hlY2tfZGF0ZV9mb3JtYXRfaHVtYW4gMTgwMDAgIjUgaG91cnMgYWdvIiAjIDUgaG91cnMgYWdvCitjaGVja19kYXRlX2Zvcm1hdF9odW1hbiA0MzIwMDAgIlR1ZSBBdWcgMjUgMTk6MjAiICMgNSBkYXlzIGFnbworY2hlY2tfZGF0ZV9mb3JtYXRfaHVtYW4gMTcyODAwMCAiTW9uIEF1ZyAxMCAxOToyMCIgIyAzIHdlZWtzIGFnbworY2hlY2tfZGF0ZV9mb3JtYXRfaHVtYW4gMTMwMDAwMDAgIlRodSBBcHIgMiAwODoxMyIgIyA1IG1vbnRocyBhZ28KK2NoZWNrX2RhdGVfZm9ybWF0X2h1bWFuIDMxNDQ5NjAwICJBdWcgMzEgMjAwOCIgIyAxMiBtb250aHMgYWdvCitjaGVja19kYXRlX2Zvcm1hdF9odW1hbiAzNzUwMDAwMCAiSnVuIDIyIDIwMDgiICMgMSB5ZWFyLCAyIG1vbnRocyBhZ28KK2NoZWNrX2RhdGVfZm9ybWF0X2h1bWFuIDU1MTg4MDAwICJEZWMgMSAyMDA3IiAjIDEgeWVhciwgOSBtb250aHMgYWdvCitjaGVja19kYXRlX2Zvcm1hdF9odW1hbiA2MzAwMDAwMDAgIlNlcCAxMyAxOTg5IiAjIDIwIHllYXJzIGFnbworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDctZ2l0LXZhci5zaCBiL3QvdDAwMDctZ2l0LXZhci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZjYwMGUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwNy1naXQtdmFyLnNoCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyBzYW5pdHkgY2hlY2tzIGZvciBnaXQgdmFyJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBHSVRfQVVUSE9SX0lERU5UJyAnCisJdGVzdF90aWNrICYmCisJZWNobyAiJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+ICRHSVRfQVVUSE9SX0RBVEUiID5leHBlY3QgJiYKKwlnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IEdJVF9DT01NSVRURVJfSURFTlQnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICIkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURSIgPmV4cGVjdCAmJgorCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFGQUlMX1BSRVJFUVMsIUFVVE9JREVOVCAncmVxdWVzdGVkIGlkZW50aXRlcyBhcmUgc3RyaWN0JyAnCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfTkFNRSAmJgorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UCisJKQorJworCisjIEZvciBnaXQgdmFyIC1sLCB3ZSBjaGVjayBvbmx5IGEgcmVwcmVzZW50YXRpdmUgdmFyaWFibGU7CisjIHRlc3RpbmcgdGhlIHdob2xlIG91dHB1dCB3b3VsZCBtYWtlIG91ciB0ZXN0IHRvbyBicml0dGxlIHdpdGgKKyMgcmVzcGVjdCB0byB1bnJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgdGVzdCBzdWl0ZSdzIGVudmlyb25tZW50LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHZhciAtbCBsaXN0cyB2YXJpYWJsZXMnICcKKwlnaXQgdmFyIC1sID5hY3R1YWwgJiYKKwllY2hvICIkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gJEdJVF9BVVRIT1JfREFURSIgPmV4cGVjdCAmJgorCXNlZCAtbiBzL0dJVF9BVVRIT1JfSURFTlQ9Ly9wIDxhY3R1YWwgPmFjdHVhbC5hdXRob3IgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmF1dGhvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdmFyIC1sIGxpc3RzIGNvbmZpZycgJworCWdpdCB2YXIgLWwgPmFjdHVhbCAmJgorCWVjaG8gZmFsc2UgPmV4cGVjdCAmJgorCXNlZCAtbiBzL2NvcmVcXC5iYXJlPS8vcCA8YWN0dWFsID5hY3R1YWwuYmFyZSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuYmFyZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGFuZCBhc2tpbmcgZm9yIHZhcmlhYmxlcyBhcmUgZXhjbHVzaXZlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZhciAtbCBHSVRfQ09NTUlUVEVSX0lERU5UCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwOC1pZ25vcmVzLnNoIGIvdC90MDAwOC1pZ25vcmVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3MGEzODkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA4LWlnbm9yZXMuc2gKQEAgLTAsMCArMSw4NjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPWNoZWNrLWlnbm9yZQorCisuIC4vdGVzdC1saWIuc2gKKworaW5pdF92YXJzICgpIHsKKwlnbG9iYWxfZXhjbHVkZXM9Imdsb2JhbC1leGNsdWRlcyIKK30KKworZW5hYmxlX2dsb2JhbF9leGNsdWRlcyAoKSB7CisJaW5pdF92YXJzICYmCisJZ2l0IGNvbmZpZyBjb3JlLmV4Y2x1ZGVzZmlsZSAiJGdsb2JhbF9leGNsdWRlcyIKK30KKworZXhwZWN0X2luICgpIHsKKwlkZXN0PSIkSE9NRS9leHBlY3RlZC0kMSIgdGV4dD0iJDIiCisJaWYgdGVzdCAteiAiJHRleHQiCisJdGhlbgorCQk+IiRkZXN0IiAjIGF2b2lkIG5ld2xpbmUKKwllbHNlCisJCWVjaG8gIiR0ZXh0IiA+IiRkZXN0IgorCWZpCit9CisKK2V4cGVjdCAoKSB7CisJZXhwZWN0X2luIHN0ZG91dCAiJDEiCit9CisKK2V4cGVjdF9mcm9tX3N0ZGluICgpIHsKKwljYXQgPiIkSE9NRS9leHBlY3RlZC1zdGRvdXQiCit9CisKK3Rlc3Rfc3RkZXJyICgpIHsKKwlleHBlY3RlZD0iJDEiCisJZXhwZWN0X2luIHN0ZGVyciAiJDEiICYmCisJdGVzdF9pMThuY21wICIkSE9NRS9leHBlY3RlZC1zdGRlcnIiICIkSE9NRS9zdGRlcnIiCit9CisKK2Jyb2tlbl9jX3VucXVvdGUgKCkgeworCSIkUEVSTF9QQVRIIiAtcGUgJ3MvXiIvLzsgcy9cXC8vOyBzLyIkLy87IHRyL1xuL1wwLycgIiRAIgorfQorCiticm9rZW5fY191bnF1b3RlX3ZlcmJvc2UgKCkgeworCSIkUEVSTF9QQVRIIiAtcGUgJ3MvCSIvCS87IHMvXFwvLzsgcy8iJC8vOyB0ci86XHRcbi9cMC8nICIkQCIKK30KKworc3RkZXJyX2NvbnRhaW5zICgpIHsKKwlyZWdleHA9IiQxIgorCWlmIHRlc3RfaTE4bmdyZXAgIiRyZWdleHAiICIkSE9NRS9zdGRlcnIiCisJdGhlbgorCQlyZXR1cm4gMAorCWVsc2UKKwkJZWNobyAiZGlkbid0IGZpbmQgLyRyZWdleHAvIGluICRIT01FL3N0ZGVyciIKKwkJY2F0ICIkSE9NRS9zdGRlcnIiCisJCXJldHVybiAxCisJZmkKK30KKworc3RkZXJyX2VtcHR5X29uX3N1Y2Nlc3MgKCkgeworCWV4cGVjdF9jb2RlPSIkMSIKKwlpZiB0ZXN0ICRleHBlY3RfY29kZSA9IDAKKwl0aGVuCisJCXRlc3Rfc3RkZXJyICIiCisJZWxzZQorCQkjIElmIHdlIGV4cGVjdCBmYWlsdXJlIHRoZW4gc3RkZXJyIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBlbXB0eQorCQkjIGR1ZSB0byAtLXF1aWV0IC0gdGhlIGNhbGxlciBjYW4gY2hlY2sgaXRzIGNvbnRlbnRzCisJCXJldHVybiAwCisJZmkKK30KKwordGVzdF9jaGVja19pZ25vcmUgKCkgeworCWFyZ3M9IiQxIiBleHBlY3RfY29kZT0iJHsyOi0wfSIgZ2xvYmFsX2FyZ3M9IiQzIgorCisJaW5pdF92YXJzICYmCisJcm0gLWYgIiRIT01FL3N0ZG91dCIgIiRIT01FL3N0ZGVyciIgIiRIT01FL2NtZCIgJiYKKwllY2hvIGdpdCAkZ2xvYmFsX2FyZ3MgY2hlY2staWdub3JlICRxdWlldF9vcHQgJHZlcmJvc2Vfb3B0ICRub25fbWF0Y2hpbmdfb3B0ICRub19pbmRleF9vcHQgJGFyZ3MgXAorCQk+IiRIT01FL2NtZCIgJiYKKwllY2hvICIkZXhwZWN0X2NvZGUiID4iJEhPTUUvZXhwZWN0ZWQtZXhpdC1jb2RlIiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgIiRleHBlY3RfY29kZSIgXAorCQlnaXQgJGdsb2JhbF9hcmdzIGNoZWNrLWlnbm9yZSAkcXVpZXRfb3B0ICR2ZXJib3NlX29wdCAkbm9uX21hdGNoaW5nX29wdCAkbm9faW5kZXhfb3B0ICRhcmdzIFwKKwkJPiIkSE9NRS9zdGRvdXQiIDI+IiRIT01FL3N0ZGVyciIgJiYKKwl0ZXN0X2NtcCAiJEhPTUUvZXhwZWN0ZWQtc3Rkb3V0IiAiJEhPTUUvc3Rkb3V0IiAmJgorCXN0ZGVycl9lbXB0eV9vbl9zdWNjZXNzICIkZXhwZWN0X2NvZGUiCit9CisKKyMgUnVucyB0aGUgc2FtZSBjb2RlIHdpdGggNCBkaWZmZXJlbnQgbGV2ZWxzIG9mIG91dHB1dCB2ZXJib3NpdHk6CisjCisjICAgMS4gd2l0aCAtcSAvIC0tcXVpZXQKKyMgICAyLiB3aXRoIGRlZmF1bHQgdmVyYm9zaXR5CisjICAgMy4gd2l0aCAtdiAvIC0tdmVyYm9zZQorIyAgIDQuIHdpdGggLXYgLyAtLXZlcmJvc2UsICphbmQqIC1uIC8gLS1ub24tbWF0Y2hpbmcKKyMKKyMgZXhwZWN0aW5nIHN1Y2Nlc3MgZWFjaCB0aW1lLiAgVGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQKKyMgY2hlY2staWdub3JlIC0tdmVyYm9zZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgbm9ybWFsIG91dHB1dCBleGNlcHQKKyMgZm9yIHRoZSBleHRyYSBmaXJzdCBjb2x1bW4uCisjCisjIEEgcGFyYW1ldGVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0ZXN0cyBhcmUgcnVuIHdpdGggdGhlCisjIG5vcm1hbCBjYXNlICh1c2luZyB0aGUgaW5kZXgpLCBvciB3aXRoIHRoZSAtLW5vLWluZGV4IG9wdGlvbi4KKyMKKyMgQXJndW1lbnRzOgorIyAgIC0gKG9wdGlvbmFsKSBwcmVyZXFzIGZvciB0aGlzIHRlc3QsIGUuZy4gJ1NZTUxJTktTJworIyAgIC0gdGVzdCBuYW1lCisjICAgLSBvdXRwdXQgdG8gZXhwZWN0IGZyb20gdGhlIGZvdXJ0aCB2ZXJib3NpdHkgbW9kZSAodGhlIG91dHB1dAorIyAgICAgZnJvbSB0aGUgb3RoZXIgdmVyYm9zaXR5IG1vZGVzIGlzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQKKyMgICAgIGZyb20gdGhpcyB2YWx1ZSkKKyMgICAtIGNvZGUgdG8gcnVuIChzaG91bGQgaW52b2tlIHRlc3RfY2hlY2tfaWdub3JlKQorIyAgIC0gaW5kZXggb3B0aW9uOiAtLWluZGV4IG9yIC0tbm8taW5kZXgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGlwbGUgKCkgeworCXByZXJlcT0KKwlpZiB0ZXN0ICQjIC1lcSA1CisJdGhlbgorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwlmaQorCWlmIHRlc3QgIiQ0IiA9ICItLWluZGV4IgorCXRoZW4KKwkJbm9faW5kZXhfb3B0PQorCWVsc2UKKwkJbm9faW5kZXhfb3B0PSQ0CisJZmkKKwl0ZXN0bmFtZT0iJDEiIGV4cGVjdF9hbGw9IiQyIiBjb2RlPSIkMyIKKworCWV4cGVjdF92ZXJib3NlPSQoIGVjaG8gIiRleHBlY3RfYWxsIiB8IGdyZXAgLXYgJ146OgknICkKKwlleHBlY3Q9JCggZWNobyAiJGV4cGVjdF92ZXJib3NlIiB8IHNlZCAtZSAncy8uKgkvLycgKQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICIkdGVzdG5hbWUke25vX2luZGV4X29wdDorIHdpdGggJG5vX2luZGV4X29wdH0iICcKKwkJZXhwZWN0ICIkZXhwZWN0IiAmJgorCQlldmFsICIkY29kZSIKKwknCisKKwkjIC0tcXVpZXQgaXMgb25seSB2YWxpZCB3aGVuIGEgc2luZ2xlIHBhdHRlcm4gaXMgcGFzc2VkCisJaWYgdGVzdCAkKCBlY2hvICIkZXhwZWN0X2FsbCIgfCB3YyAtbCApID0gMQorCXRoZW4KKwkJZm9yIHF1aWV0X29wdCBpbiAnLXEnICctLXF1aWV0JworCQlkbworCQkJb3B0cz0iJHtub19pbmRleF9vcHQ6KyRub19pbmRleF9vcHQgfSRxdWlldF9vcHQiCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgIiR0ZXN0bmFtZSR7b3B0czorIHdpdGggJG9wdHN9IiAiCisJCQlleHBlY3QgJycgJiYKKwkJCSRjb2RlCisJCSIKKwkJZG9uZQorCQlxdWlldF9vcHQ9CisJZmkKKworCWZvciB2ZXJib3NlX29wdCBpbiAnLXYnICctLXZlcmJvc2UnCisJZG8KKwkJZm9yIG5vbl9tYXRjaGluZ19vcHQgaW4gJycgJy1uJyAnLS1ub24tbWF0Y2hpbmcnCisJCWRvCisJCQlpZiB0ZXN0IC1uICIkbm9uX21hdGNoaW5nX29wdCIKKwkJCXRoZW4KKwkJCQlteV9leHBlY3Q9IiRleHBlY3RfYWxsIgorCQkJZWxzZQorCQkJCW15X2V4cGVjdD0iJGV4cGVjdF92ZXJib3NlIgorCQkJZmkKKworCQkJdGVzdF9jb2RlPSIKKwkJCQlleHBlY3QgJyRteV9leHBlY3QnICYmCisJCQkJJGNvZGUKKwkJCSIKKwkJCW9wdHM9IiR7bm9faW5kZXhfb3B0Oiskbm9faW5kZXhfb3B0IH0kdmVyYm9zZV9vcHQke25vbl9tYXRjaGluZ19vcHQ6KyAkbm9uX21hdGNoaW5nX29wdH0iCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgIiR0ZXN0bmFtZSR7b3B0czorIHdpdGggJG9wdHN9IiAiJHRlc3RfY29kZSIKKwkJZG9uZQorCWRvbmUKKwl2ZXJib3NlX29wdD0KKwlub25fbWF0Y2hpbmdfb3B0PQorCW5vX2luZGV4X29wdD0KK30KKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aXBsZSAiJEAiICItLWluZGV4IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzX25vX2luZGV4X211bHRpICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpcGxlICIkQCIgIi0tbm8taW5kZXgiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJaW5pdF92YXJzICYmCisJbWtkaXIgLXAgYS9iL2lnbm9yZWQtZGlyIGEvc3VibW9kdWxlIGIgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCisJdGhlbgorCQlsbiAtcyBiIGEvc3ltbGluaworCWZpICYmCisJKAorCQljZCBhL3N1Ym1vZHVsZSAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGEgPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0iY29tbWl0IGluIHN1Ym1vZHVsZSIKKwkpICYmCisJZ2l0IGFkZCBhL3N1Ym1vZHVsZSAmJgorCWNhdCA8PC1cRU9GID4uZ2l0aWdub3JlICYmCisJCW9uZQorCQlpZ25vcmVkLSoKKwkJdG9wLWxldmVsLWRpci8KKwlFT0YKKwlmb3IgZGlyIGluIC4gYQorCWRvCisJCTogPiRkaXIvbm90LWlnbm9yZWQgJiYKKwkJOiA+JGRpci9pZ25vcmVkLWFuZC11bnRyYWNrZWQgJiYKKwkJOiA+JGRpci9pZ25vcmVkLWJ1dC1pbi1pbmRleAorCWRvbmUgJiYKKwlnaXQgYWRkIC1mIGlnbm9yZWQtYnV0LWluLWluZGV4IGEvaWdub3JlZC1idXQtaW4taW5kZXggJiYKKwljYXQgPDwtXEVPRiA+YS8uZ2l0aWdub3JlICYmCisJCXR3byoKKwkJKnRocmVlCisJRU9GCisJY2F0IDw8LVxFT0YgPmEvYi8uZ2l0aWdub3JlICYmCisJCWZvdXIKKwkJZml2ZQorCQkjIHRoaXMgY29tbWVudCBzaG91bGQgYWZmZWN0IHRoZSBsaW5lIG51bWJlcnMKKwkJc2l4CisJCWlnbm9yZWQtZGlyLworCQkjIGFuZCBzbyBzaG91bGQgdGhpcyBibGFuayBsaW5lOgorCisJCSFvbioKKwkJIXR3bworCUVPRgorCWVjaG8gInNldmVuIiA+YS9iL2lnbm9yZWQtZGlyLy5naXRpZ25vcmUgJiYKKwl0ZXN0IC1uICIkSE9NRSIgJiYKKwljYXQgPDwtXEVPRiA+IiRnbG9iYWxfZXhjbHVkZXMiICYmCisJCWdsb2JhbG9uZQorCQkhZ2xvYmFsdHdvCisJCWdsb2JhbHRocmVlCisJRU9GCisJY2F0IDw8LVxFT0YgPj4uZ2l0L2luZm8vZXhjbHVkZQorCQlwZXItcmVwbworCUVPRgorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHRlc3QgaW52YWxpZCBpbnB1dHMKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLiBjb3JuZXItY2FzZScgJzo6CS4nICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAuIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnZW1wdHkgY29tbWFuZCBsaW5lJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIiIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogbm8gcGF0aCBzcGVjaWZpZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgJy0tc3RkaW4gd2l0aCBlbXB0eSBTVERJTicgJycgJworCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIiAxIDwvZGV2L251bGwgJiYKKwl0ZXN0X3N0ZGVyciAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctcSB3aXRoIG11bHRpcGxlIGFyZ3MnICcKKwlleHBlY3QgIiIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXEgb25lIHR3byIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpZXQgd2l0aCBtdWx0aXBsZSBhcmdzJyAnCisJZXhwZWN0ICIiICYmCisJdGVzdF9jaGVja19pZ25vcmUgIi0tcXVpZXQgb25lIHR3byIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCisnCisKK2ZvciB2ZXJib3NlX29wdCBpbiAnLXYnICctLXZlcmJvc2UnCitkbworCWZvciBxdWlldF9vcHQgaW4gJy1xJyAnLS1xdWlldCcKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkcXVpZXRfb3B0ICR2ZXJib3NlX29wdCIgIgorCQkJZXhwZWN0ICcnICYmCisJCQl0ZXN0X2NoZWNrX2lnbm9yZSAnJHF1aWV0X29wdCAkdmVyYm9zZV9vcHQgZm9vJyAxMjggJiYKKwkJCXN0ZGVycl9jb250YWlucyAnZmF0YWw6IGNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlJworCQkiCisJZG9uZQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aWV0IHdpdGggbXVsdGlwbGUgYXJncycgJworCWV4cGVjdCAiIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItLXF1aWV0IG9uZSB0d28iIDEyOCAmJgorCXN0ZGVycl9jb250YWlucyAiZmF0YWw6IC0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICdlcnJvbmVvdXMgdXNlIG9mIC0tJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIi0tIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiBubyBwYXRoIHNwZWNpZmllZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLS1zdGRpbiB3aXRoIHN1cGVyZmx1b3VzIGFyZycgJycgJworCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIGZvbyIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLS1zdGRpbiAteiB3aXRoIHN1cGVyZmx1b3VzIGFyZycgJycgJworCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIC16IGZvbyIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLXogd2l0aG91dCAtLXN0ZGluJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIi16IiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiAteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLXogd2l0aG91dCAtLXN0ZGluIGFuZCBzdXBlcmZsdW91cyBhcmcnICcnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXogZm9vIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiAteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnbmVlZHMgd29yayB0cmVlJyAnJyAnCisJKAorCQljZCAuZ2l0ICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICJmb28iIDEyOAorCSkgJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiB0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IHN0YW5kYXJkIGlnbm9yZXMKKworIyBGaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgYSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUKKyMgZG9lcyBub3QgaW1wYWN0IHJlc3VsdHMsIGJ1dCB0aGF0IHRoZSBwcmVzZW5jZSBvZiBhIGZpbGUgaW4gdGhlCisjIGluZGV4IGRvZXMgdW5sZXNzIHRoZSAtLW5vLWluZGV4IG9wdGlvbiBpcyB1c2VkLgorCitmb3Igc3ViZGlyIGluICcnICdhLycKK2RvCisJaWYgdGVzdCAteiAiJHN1YmRpciIKKwl0aGVuCisJCXdoZXJlPSJhdCB0b3AtbGV2ZWwiCisJZWxzZQorCQl3aGVyZT0iaW4gc3ViZGlyICRzdWJkaXIiCisJZmkKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgIm5vbi1leGlzdGVudCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgXAorCQkiOjoJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50IiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9bm9uLWV4aXN0ZW50JyAxIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAibm9uLWV4aXN0ZW50IGZpbGUgJHdoZXJlIG5vdCBpZ25vcmVkIiBcCisJCSI6Ogkke3N1YmRpcn1ub24tZXhpc3RlbnQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1ub24tZXhpc3RlbnQnIDEiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICJub24tZXhpc3RlbnQgZmlsZSAkd2hlcmUgaWdub3JlZCIgXAorCQkiLmdpdGlnbm9yZToxOm9uZQkke3N1YmRpcn1vbmUiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1vbmUnIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAibm9uLWV4aXN0ZW50IGZpbGUgJHdoZXJlIGlnbm9yZWQiIFwKKwkJIi5naXRpZ25vcmU6MTpvbmUJJHtzdWJkaXJ9b25lIiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9b25lJyIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgImV4aXN0aW5nIHVudHJhY2tlZCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgXAorCQkiOjoJJHtzdWJkaXJ9bm90LWlnbm9yZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1ub3QtaWdub3JlZCcgMSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3Nfbm9faW5kZXhfbXVsdGkgImV4aXN0aW5nIHVudHJhY2tlZCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgXAorCQkiOjoJJHtzdWJkaXJ9bm90LWlnbm9yZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1ub3QtaWdub3JlZCcgMSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgImV4aXN0aW5nIHRyYWNrZWQgZmlsZSAkd2hlcmUgbm90IGlnbm9yZWQiIFwKKwkJIjo6CSR7c3ViZGlyfWlnbm9yZWQtYnV0LWluLWluZGV4IiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgnIDEiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX25vX2luZGV4X211bHRpICJleGlzdGluZyB0cmFja2VkIGZpbGUgJHdoZXJlIHNob3duIGFzIGlnbm9yZWQiIFwKKwkJIi5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleCciCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICJleGlzdGluZyB1bnRyYWNrZWQgZmlsZSAkd2hlcmUgaWdub3JlZCIgXAorCQkiLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQnIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAiZXhpc3RpbmcgdW50cmFja2VkIGZpbGUgJHdoZXJlIGlnbm9yZWQiIFwKKwkJIi5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkIiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkJyIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgIm1peCBvZiBmaWxlIHR5cGVzICR3aGVyZSIgXAorIjo6CSR7c3ViZGlyfW5vbi1leGlzdGVudAorLmdpdGlnbm9yZToxOm9uZQkke3N1YmRpcn1vbmUKKzo6CSR7c3ViZGlyfW5vdC1pZ25vcmVkCis6Ogkke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleAorLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcKKwkJCSR7c3ViZGlyfW5vbi1leGlzdGVudAorCQkJJHtzdWJkaXJ9b25lCisJCQkke3N1YmRpcn1ub3QtaWdub3JlZAorCQkJJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgKKwkJCSR7c3ViZGlyfWlnbm9yZWQtYW5kLXVudHJhY2tlZCcKKwkJIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAibWl4IG9mIGZpbGUgdHlwZXMgJHdoZXJlIiBcCisiOjoJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50CisuZ2l0aWdub3JlOjE6b25lCSR7c3ViZGlyfW9uZQorOjoJJHtzdWJkaXJ9bm90LWlnbm9yZWQKKy5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgKKy5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkIiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnCisJCQkke3N1YmRpcn1ub24tZXhpc3RlbnQKKwkJCSR7c3ViZGlyfW9uZQorCQkJJHtzdWJkaXJ9bm90LWlnbm9yZWQKKwkJCSR7c3ViZGlyfWlnbm9yZWQtYnV0LWluLWluZGV4CisJCQkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQnCisJCSIKK2RvbmUKKworIyBIYXZpbmcgZXN0YWJsaXNoZWQgdGhlIGFib3ZlLCBmcm9tIG5vdyBvbiB3ZSBtb3N0bHkgdGVzdCBhZ2FpbnN0CisjIGZpbGVzIHdoaWNoIGRvIG5vdCBleGlzdCBpbiB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWItZGlyZWN0b3J5IGxvY2FsIGlnbm9yZScgJworCWV4cGVjdCAiYS8zLXRocmVlIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICJhLzMtdGhyZWUgYS90aHJlZS1ub3QtdGhpcy1vbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Yi1kaXJlY3RvcnkgbG9jYWwgaWdub3JlIHdpdGggLS12ZXJib3NlJyAgJworCWV4cGVjdCAiYS8uZ2l0aWdub3JlOjI6KnRocmVlCWEvMy10aHJlZSIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLS12ZXJib3NlIGEvMy10aHJlZSBhL3RocmVlLW5vdC10aGlzLW9uZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgaWdub3JlIGluc2lkZSBhIHN1Yi1kaXJlY3RvcnknICcKKwlleHBlY3QgIjMtdGhyZWUiICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICIzLXRocmVlIHRocmVlLW5vdC10aGlzLW9uZSIKKwkpCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBpZ25vcmUgaW5zaWRlIGEgc3ViLWRpcmVjdG9yeSB3aXRoIC0tdmVyYm9zZScgJworCWV4cGVjdCAiYS8uZ2l0aWdub3JlOjI6KnRocmVlCTMtdGhyZWUiICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICItLXZlcmJvc2UgMy10aHJlZSB0aHJlZS1ub3QtdGhpcy1vbmUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgaW5jbHVkZSBvZiBuZWdhdGVkIHBhdHRlcm4nICcKKwlleHBlY3QgIiIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9iL29uZSIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgaW5jbHVkZSBvZiBuZWdhdGVkIHBhdHRlcm4gd2l0aCAtcScgJworCWV4cGVjdCAiIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItcSBhL2Ivb25lIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBpbmNsdWRlIG9mIG5lZ2F0ZWQgcGF0dGVybiB3aXRoIC12JyAnCisJZXhwZWN0ICJhL2IvLmdpdGlnbm9yZTo4OiFvbioJYS9iL29uZSIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXYgYS9iL29uZSIgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgaW5jbHVkZSBvZiBuZWdhdGVkIHBhdHRlcm4gd2l0aCAtdiAtbicgJworCWV4cGVjdCAiYS9iLy5naXRpZ25vcmU6ODohb24qCWEvYi9vbmUiICYmCisJdGVzdF9jaGVja19pZ25vcmUgIi12IC1uIGEvYi9vbmUiIDAKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IGlnbm9yZWQgc3ViLWRpcmVjdG9yaWVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgJ2lnbm9yZWQgc3ViLWRpcmVjdG9yeScgXAorCSdhL2IvLmdpdGlnbm9yZTo1Omlnbm9yZWQtZGlyLwlhL2IvaWdub3JlZC1kaXInICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9iL2lnbm9yZWQtZGlyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBmaWxlcyBpbnNpZGUgaWdub3JlZCBzdWItZGlyZWN0b3J5JyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtXEVPRiAmJgorCQlhL2IvaWdub3JlZC1kaXIvZm9vCisJCWEvYi9pZ25vcmVkLWRpci90d29vb28KKwkJYS9iL2lnbm9yZWQtZGlyL3NldmVuCisJRU9GCisJdGVzdF9jaGVja19pZ25vcmUgImEvYi9pZ25vcmVkLWRpci9mb28gYS9iL2lnbm9yZWQtZGlyL3R3b29vbyBhL2IvaWdub3JlZC1kaXIvc2V2ZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGZpbGVzIGluc2lkZSBpZ25vcmVkIHN1Yi1kaXJlY3Rvcnkgd2l0aCAtdicgJworCWV4cGVjdF9mcm9tX3N0ZGluIDw8LVxFT0YgJiYKKwkJYS9iLy5naXRpZ25vcmU6NTppZ25vcmVkLWRpci8JYS9iL2lnbm9yZWQtZGlyL2ZvbworCQlhL2IvLmdpdGlnbm9yZTo1Omlnbm9yZWQtZGlyLwlhL2IvaWdub3JlZC1kaXIvdHdvb29vCisJCWEvYi8uZ2l0aWdub3JlOjU6aWdub3JlZC1kaXIvCWEvYi9pZ25vcmVkLWRpci9zZXZlbgorCUVPRgorCXRlc3RfY2hlY2tfaWdub3JlICItdiBhL2IvaWdub3JlZC1kaXIvZm9vIGEvYi9pZ25vcmVkLWRpci90d29vb28gYS9iL2lnbm9yZWQtZGlyL3NldmVuIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZCB0byBpZ25vcmVkIHN1Yi1kaXJlY3RvcnknICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8PC1cRU9GICYmCisJCWZvbworCQl0d29vb28KKwkJc2V2ZW4KKwkJLi4vLi4vb25lCisJRU9GCisJKAorCQljZCBhL2IvaWdub3JlZC1kaXIgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgImZvbyB0d29vb28gLi4vb25lIHNldmVuIC4uLy4uL29uZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NkIHRvIGlnbm9yZWQgc3ViLWRpcmVjdG9yeSB3aXRoIC12JyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtXEVPRiAmJgorCQlhL2IvLmdpdGlnbm9yZTo1Omlnbm9yZWQtZGlyLwlmb28KKwkJYS9iLy5naXRpZ25vcmU6NTppZ25vcmVkLWRpci8JdHdvb29vCisJCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgkuLi9vbmUKKwkJYS9iLy5naXRpZ25vcmU6NTppZ25vcmVkLWRpci8Jc2V2ZW4KKwkJLmdpdGlnbm9yZToxOm9uZQkuLi8uLi9vbmUKKwlFT0YKKwkoCisJCWNkIGEvYi9pZ25vcmVkLWRpciAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAiLXYgZm9vIHR3b29vbyAuLi9vbmUgc2V2ZW4gLi4vLi4vb25lIgorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IGhhbmRsaW5nIG9mIHN5bWxpbmtzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgU1lNTElOS1MgJ3N5bWxpbmsnICc6OglhL3N5bWxpbmsnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9zeW1saW5rIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgU1lNTElOS1MgJ2JleW9uZCBhIHN5bWxpbmsnICcnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9zeW1saW5rL2ZvbyIgMTI4ICYmCisJdGVzdF9zdGRlcnIgImZhdGFsOiBwYXRoc3BlYyAnXCcnYS9zeW1saW5rL2ZvbydcJycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSBTWU1MSU5LUyAnYmV5b25kIGEgc3ltbGluayBmcm9tIHN1YmRpcmVjdG9yeScgJycgJworCSgKKwkJY2QgYSAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAic3ltbGluay9mb28iIDEyOAorCSkgJiYKKwl0ZXN0X3N0ZGVyciAiZmF0YWw6IHBhdGhzcGVjICdcJydzeW1saW5rL2ZvbydcJycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IGhhbmRsaW5nIG9mIHN1Ym1vZHVsZXMKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnc3VibW9kdWxlJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgImEvc3VibW9kdWxlL29uZSIgMTI4ICYmCisJdGVzdF9zdGRlcnIgImZhdGFsOiBQYXRoc3BlYyAnXCcnYS9zdWJtb2R1bGUvb25lJ1wnJyBpcyBpbiBzdWJtb2R1bGUgJ1wnJ2Evc3VibW9kdWxlJ1wnJyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnc3VibW9kdWxlIGZyb20gc3ViZGlyZWN0b3J5JyAnJyAnCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICJzdWJtb2R1bGUvb25lIiAxMjgKKwkpICYmCisJdGVzdF9zdGRlcnIgImZhdGFsOiBQYXRoc3BlYyAnXCcnc3VibW9kdWxlL29uZSdcJycgaXMgaW4gc3VibW9kdWxlICdcJydhL3N1Ym1vZHVsZSdcJyciCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgdGVzdCBoYW5kbGluZyBvZiBnbG9iYWwgaWdub3JlIGZpbGVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dsb2JhbCBpZ25vcmUgbm90IHlldCBlbmFibGVkJyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtXEVPRiAmJgorCQkuZ2l0L2luZm8vZXhjbHVkZTo3OnBlci1yZXBvCXBlci1yZXBvCisJCWEvLmdpdGlnbm9yZToyOip0aHJlZQlhL2dsb2JhbHRocmVlCisJCS5naXQvaW5mby9leGNsdWRlOjc6cGVyLXJlcG8JYS9wZXItcmVwbworCUVPRgorCXRlc3RfY2hlY2tfaWdub3JlICItdiBnbG9iYWxvbmUgcGVyLXJlcG8gYS9nbG9iYWx0aHJlZSBhL3Blci1yZXBvIG5vdC1pZ25vcmVkIGEvZ2xvYmFsdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbG9iYWwgaWdub3JlJyAnCisJZW5hYmxlX2dsb2JhbF9leGNsdWRlcyAmJgorCWV4cGVjdF9mcm9tX3N0ZGluIDw8LVxFT0YgJiYKKwkJZ2xvYmFsb25lCisJCXBlci1yZXBvCisJCWdsb2JhbHRocmVlCisJCWEvZ2xvYmFsdGhyZWUKKwkJYS9wZXItcmVwbworCUVPRgorCXRlc3RfY2hlY2tfaWdub3JlICJnbG9iYWxvbmUgcGVyLXJlcG8gZ2xvYmFsdGhyZWUgYS9nbG9iYWx0aHJlZSBhL3Blci1yZXBvIG5vdC1pZ25vcmVkIGdsb2JhbHR3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2xvYmFsIGlnbm9yZSB3aXRoIC12JyAnCisJZW5hYmxlX2dsb2JhbF9leGNsdWRlcyAmJgorCWV4cGVjdF9mcm9tX3N0ZGluIDw8LUVPRiAmJgorCQkkZ2xvYmFsX2V4Y2x1ZGVzOjE6Z2xvYmFsb25lCWdsb2JhbG9uZQorCQkuZ2l0L2luZm8vZXhjbHVkZTo3OnBlci1yZXBvCXBlci1yZXBvCisJCSRnbG9iYWxfZXhjbHVkZXM6MzpnbG9iYWx0aHJlZQlnbG9iYWx0aHJlZQorCQlhLy5naXRpZ25vcmU6MjoqdGhyZWUJYS9nbG9iYWx0aHJlZQorCQkuZ2l0L2luZm8vZXhjbHVkZTo3OnBlci1yZXBvCWEvcGVyLXJlcG8KKwkJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JZ2xvYmFsdHdvCisJRU9GCisJdGVzdF9jaGVja19pZ25vcmUgIi12IGdsb2JhbG9uZSBwZXItcmVwbyBnbG9iYWx0aHJlZSBhL2dsb2JhbHRocmVlIGEvcGVyLXJlcG8gbm90LWlnbm9yZWQgZ2xvYmFsdHdvIgorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHRlc3QgLS1zdGRpbgorCitjYXQgPDwtXEVPRiA+c3RkaW4KKwlvbmUKKwlub3QtaWdub3JlZAorCWEvb25lCisJYS9ub3QtaWdub3JlZAorCWEvYi9vbgorCWEvYi9vbmUKKwlhL2Ivb25lIG9uZQorCSJhL2Ivb25lIHR3byIKKwkiYS9iL29uZVwidGhyZWUiCisJYS9iL25vdC1pZ25vcmVkCisJYS9iL3R3bworCWEvYi90d29vbworCWdsb2JhbHR3bworCWEvZ2xvYmFsdHdvCisJYS9iL2dsb2JhbHR3bworCWIvZ2xvYmFsdHdvCitFT0YKK2NhdCA8PC1cRU9GID5leHBlY3RlZC1kZWZhdWx0CisJb25lCisJYS9vbmUKKwlhL2IvdHdvb28KK0VPRgorY2F0IDw8LUVPRiA+ZXhwZWN0ZWQtdmVyYm9zZQorCS5naXRpZ25vcmU6MTpvbmUJb25lCisJLmdpdGlnbm9yZToxOm9uZQlhL29uZQorCWEvYi8uZ2l0aWdub3JlOjg6IW9uKglhL2Ivb24KKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJYS9iL29uZQorCWEvYi8uZ2l0aWdub3JlOjg6IW9uKglhL2Ivb25lIG9uZQorCWEvYi8uZ2l0aWdub3JlOjg6IW9uKglhL2Ivb25lIHR3bworCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgkiYS9iL29uZVxcInRocmVlIgorCWEvYi8uZ2l0aWdub3JlOjk6IXR3bwlhL2IvdHdvCisJYS8uZ2l0aWdub3JlOjE6dHdvKglhL2IvdHdvb28KKwkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwlnbG9iYWx0d28KKwkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwlhL2dsb2JhbHR3bworCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWEvYi9nbG9iYWx0d28KKwkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwliL2dsb2JhbHR3bworRU9GCisKK2Jyb2tlbl9jX3VucXVvdGUgc3RkaW4gPnN0ZGluMAorCiticm9rZW5fY191bnF1b3RlIGV4cGVjdGVkLWRlZmF1bHQgPmV4cGVjdGVkLWRlZmF1bHQwCisKK2Jyb2tlbl9jX3VucXVvdGVfdmVyYm9zZSBleHBlY3RlZC12ZXJib3NlID5leHBlY3RlZC12ZXJib3NlMAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0ZGluJyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLWRlZmF1bHQgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLS1zdGRpbiIgPHN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4gLXEnICcKKwlleHBlY3QgIiIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXEgLS1zdGRpbiIgPHN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4gLXYnICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtdmVyYm9zZSAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItdiAtLXN0ZGluIiA8c3RkaW4KKycKKworZm9yIG9wdHMgaW4gJy0tc3RkaW4gLXonICcteiAtLXN0ZGluJworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0cyIgIgorCQlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtZGVmYXVsdDAgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgJyRvcHRzJyA8c3RkaW4wCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdHMgLXEiICIKKwkJZXhwZWN0ICIiICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICctcSAkb3B0cycgPHN0ZGluMAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvcHRzIC12IiAiCisJCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC12ZXJib3NlMCAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAnLXYgJG9wdHMnIDxzdGRpbjAKKwkiCitkb25lCisKK2NhdCA8PC1cRU9GID5zdGRpbgorCS4uL29uZQorCS4uL25vdC1pZ25vcmVkCisJb25lCisJbm90LWlnbm9yZWQKKwliL29uCisJYi9vbmUKKwliL29uZSBvbmUKKwkiYi9vbmUgdHdvIgorCSJiL29uZVwidGhyZWUiCisJYi90d28KKwliL25vdC1pZ25vcmVkCisJYi90d29vbworCS4uL2dsb2JhbHR3bworCWdsb2JhbHR3bworCWIvZ2xvYmFsdHdvCisJLi4vYi9nbG9iYWx0d28KKwljL25vdC1pZ25vcmVkCitFT0YKKyMgTi5CLiB3ZSBkZWxpYmVyYXRlbHkgZW5kIFNURElOIHdpdGggYSBub24tbWF0Y2hpbmcgcGF0dGVybiBpbiBvcmRlcgorIyB0byB0ZXN0IHRoYXQgdGhlIGV4aXQgY29kZSBpbmRpY2F0ZXMgdGhhdCBvbmUgb3IgbW9yZSBvZiB0aGUKKyMgcHJvdmlkZWQgcGF0aHMgaXMgaWdub3JlZCAtIGluIG90aGVyIHdvcmRzLCB0aGF0IGl0IHJlcHJlc2VudHMgYW4KKyMgYWdncmVnYXRpb24gb2YgYWxsIHRoZSByZXN1bHRzLCBub3QganVzdCB0aGUgZmluYWwgcmVzdWx0LgorCitjYXQgPDwtRU9GID5leHBlY3RlZC1hbGwKKwkuZ2l0aWdub3JlOjE6b25lCS4uL29uZQorCTo6CS4uL25vdC1pZ25vcmVkCisJLmdpdGlnbm9yZToxOm9uZQlvbmUKKwk6Oglub3QtaWdub3JlZAorCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgliL29uCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWIvb25lCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWIvb25lIG9uZQorCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgliL29uZSB0d28KKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJImIvb25lXFwidGhyZWUiCisJYS9iLy5naXRpZ25vcmU6OTohdHdvCWIvdHdvCisJOjoJYi9ub3QtaWdub3JlZAorCWEvLmdpdGlnbm9yZToxOnR3byoJYi90d29vbworCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCS4uL2dsb2JhbHR3bworCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWdsb2JhbHR3bworCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWIvZ2xvYmFsdHdvCisJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JLi4vYi9nbG9iYWx0d28KKwk6OgljL25vdC1pZ25vcmVkCitFT0YKK2NhdCA8PC1FT0YgPmV4cGVjdGVkLWRlZmF1bHQKKy4uL29uZQorb25lCitiL3R3b29vCitFT0YKK2dyZXAgLXYgJ146OgknIGV4cGVjdGVkLWFsbCA+ZXhwZWN0ZWQtdmVyYm9zZQorCiticm9rZW5fY191bnF1b3RlIHN0ZGluID5zdGRpbjAKKworYnJva2VuX2NfdW5xdW90ZSBleHBlY3RlZC1kZWZhdWx0ID5leHBlY3RlZC1kZWZhdWx0MAorCiticm9rZW5fY191bnF1b3RlX3ZlcmJvc2UgZXhwZWN0ZWQtdmVyYm9zZSA+ZXhwZWN0ZWQtdmVyYm9zZTAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdGRpbiBmcm9tIHN1YmRpcmVjdG9yeScgJworCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC1kZWZhdWx0ICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIiA8Li4vc3RkaW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4gZnJvbSBzdWJkaXJlY3Rvcnkgd2l0aCAtdicgJworCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC12ZXJib3NlICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIC12IiA8Li4vc3RkaW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4gZnJvbSBzdWJkaXJlY3Rvcnkgd2l0aCAtdiAtbicgJworCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC1hbGwgJiYKKwkoCisJCWNkIGEgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgIi0tc3RkaW4gLXYgLW4iIDwuLi9zdGRpbgorCSkKKycKKworZm9yIG9wdHMgaW4gJy0tc3RkaW4gLXonICcteiAtLXN0ZGluJworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0cyBmcm9tIHN1YmRpcmVjdG9yeSIgJworCQlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtZGVmYXVsdDAgJiYKKwkJKAorCQkJY2QgYSAmJgorCQkJdGVzdF9jaGVja19pZ25vcmUgIiciJG9wdHMiJyIgPC4uL3N0ZGluMAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdHMgZnJvbSBzdWJkaXJlY3Rvcnkgd2l0aCAtdiIgJworCQlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtdmVyYm9zZTAgJiYKKwkJKAorCQkJY2QgYSAmJgorCQkJdGVzdF9jaGVja19pZ25vcmUgIiciJG9wdHMiJyAtdiIgPC4uL3N0ZGluMAorCQkpCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ3N0cmVhbWluZyBzdXBwb3J0IGZvciAtLXN0ZGluJyAnCisJbWtmaWZvIGluIG91dCAmJgorCShnaXQgY2hlY2staWdub3JlIC1uIC12IC0tc3RkaW4gPGluID5vdXQgJikgJiYKKworCSMgV2UgY2Fubm90IGp1c3QgImVjaG8gPmluIiBiZWNhdXNlIGNoZWNrLWlnbm9yZSB3b3VsZCBnZXQgRU9GCisJIyBhZnRlciBlY2hvIGV4aXRlZDsgaW5zdGVhZCB3ZSBvcGVuIHRoZSBkZXNjcmlwdG9yIGluIG91cgorCSMgc2hlbGwsIGFuZCB0aGVuIGVjaG8gdG8gdGhlIGZkLiBXZSBtYWtlIHN1cmUgdG8gY2xvc2UgaXQgYXQKKwkjIHRoZSBlbmQsIHNvIHRoYXQgdGhlIHN1YnByb2Nlc3MgZG9lcyBnZXQgRU9GIGFuZCBkaWVzCisJIyBwcm9wZXJseS4KKwkjCisJIyBTaW1pbGFybHksIHdlIG11c3Qga2VlcCAib3V0IiBvcGVuIHNvIHRoYXQgY2hlY2staWdub3JlIGRvZXMKKwkjIG5vdCBldmVyIGdldCBTSUdQSVBFIHRyeWluZyB0byB3cml0ZSB0byB1cy4gTm90IG9ubHkgd291bGQgdGhhdAorCSMgcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0cywgYnV0IHRoZW4gdGhlcmUgd291bGQgYmUgbm8gd3JpdGVyIG9uIHRoZQorCSMgb3RoZXIgZW5kIG9mIHRoZSBwaXBlLCBhbmQgd2Ugd291bGQgcG90ZW50aWFsbHkgYmxvY2sgZm9yZXZlciB0cnlpbmcKKwkjIHRvIG9wZW4gaXQuCisJZXhlYyA5PmluICYmCisJZXhlYyA4PG91dCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZXhlYyA5PiYtIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZXhlYyA4PCYtIiAmJgorCWVjaG8gPiY5IG9uZSAmJgorCXJlYWQgcmVzcG9uc2UgPCY4ICYmCisJZWNobyAiJHJlc3BvbnNlIiB8IGdyZXAgIl5cLmdpdGlnbm9yZToxOm9uZQlvbmUiICYmCisJZWNobyA+JjkgdHdvICYmCisJcmVhZCByZXNwb25zZSA8JjggJiYKKwllY2hvICIkcmVzcG9uc2UiIHwgZ3JlcCAiXjo6CXR3byIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3RpbmcgZmlsZSBhbmQgZGlyZWN0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBvbmUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybWRpciB0b3AtbGV2ZWwtZGlyIiAmJgorCT5vbmUgJiYKKwlta2RpciB0b3AtbGV2ZWwtZGlyICYmCisJZ2l0IGNoZWNrLWlnbm9yZSBvbmUgdG9wLWxldmVsLWRpciA+YWN0dWFsICYmCisJZ3JlcCBvbmUgYWN0dWFsICYmCisJZ3JlcCB0b3AtbGV2ZWwtZGlyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBkaXJlY3RvcnkgYW5kIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIG9uZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtZGlyIHRvcC1sZXZlbC1kaXIiICYmCisJPm9uZSAmJgorCW1rZGlyIHRvcC1sZXZlbC1kaXIgJiYKKwlnaXQgY2hlY2staWdub3JlIHRvcC1sZXZlbC1kaXIgb25lID5hY3R1YWwgJiYKKwlncmVwIG9uZSBhY3R1YWwgJiYKKwlncmVwIHRvcC1sZXZlbC1kaXIgYWN0dWFsCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgdGVzdCB3aGl0ZXNwYWNlIGhhbmRsaW5nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCcgJworCW1rZGlyIHdoaXRlc3BhY2UgJiYKKwk+d2hpdGVzcGFjZS90cmFpbGluZyAmJgorCT53aGl0ZXNwYWNlL3VudHJhY2tlZCAmJgorCWVjaG8gIndoaXRlc3BhY2UvdHJhaWxpbmcgICAiID5pZ25vcmUgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgord2hpdGVzcGFjZS91bnRyYWNrZWQKK0VPRgorCWdpdCBscy1maWxlcyAtbyAtWCBpZ25vcmUgd2hpdGVzcGFjZSA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3F1b3RpbmcgYWxsb3dzIHRyYWlsaW5nIHdoaXRlc3BhY2UnICcKKwlybSAtcmYgd2hpdGVzcGFjZSAmJgorCW1rZGlyIHdoaXRlc3BhY2UgJiYKKwk+IndoaXRlc3BhY2UvdHJhaWxpbmcgICIgJiYKKwk+d2hpdGVzcGFjZS91bnRyYWNrZWQgJiYKKwllY2hvICJ3aGl0ZXNwYWNlL3RyYWlsaW5nXFwgXFwgIiA+aWdub3JlICYmCisJZWNobyB3aGl0ZXNwYWNlL3VudHJhY2tlZCA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIC1YIGlnbm9yZSB3aGl0ZXNwYWNlID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVywhQ1lHV0lOICdjb3JyZWN0IGhhbmRsaW5nIG9mIGJhY2tzbGFzaGVzJyAnCisJcm0gLXJmIHdoaXRlc3BhY2UgJiYKKwlta2RpciB3aGl0ZXNwYWNlICYmCisJPiJ3aGl0ZXNwYWNlL3RyYWlsaW5nIDEgICIgJiYKKwk+IndoaXRlc3BhY2UvdHJhaWxpbmcgMiBcXFxcIiAmJgorCT4id2hpdGVzcGFjZS90cmFpbGluZyAzIFxcXFwiICYmCisJPiJ3aGl0ZXNwYWNlL3RyYWlsaW5nIDQgICBcXCAiICYmCisJPiJ3aGl0ZXNwYWNlL3RyYWlsaW5nIDUgXFwgXFwgIiAmJgorCT4id2hpdGVzcGFjZS90cmFpbGluZyA2IFxcYVxcIiAmJgorCT53aGl0ZXNwYWNlL3VudHJhY2tlZCAmJgorCXNlZCAtZSAicy9aJC8vIiA+aWdub3JlIDw8LVxFT0YgJiYKKwl3aGl0ZXNwYWNlL3RyYWlsaW5nIDEgXCAgICBaCisJd2hpdGVzcGFjZS90cmFpbGluZyAyIFxcXFxaCisJd2hpdGVzcGFjZS90cmFpbGluZyAzIFxcXFwgWgorCXdoaXRlc3BhY2UvdHJhaWxpbmcgNCAgIFxcXCAgICBaCisJd2hpdGVzcGFjZS90cmFpbGluZyA1IFxcIFxcXCAgIFoKKwl3aGl0ZXNwYWNlL3RyYWlsaW5nIDYgXFxhXFxaCisJRU9GCisJZWNobyB3aGl0ZXNwYWNlL3VudHJhY2tlZCA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIC1YIGlnbm9yZSB3aGl0ZXNwYWNlID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvL2V4Y2x1ZGUgdHJ1bXBzIGNvcmUuZXhjbHVkZXNmaWxlJyAnCisJZWNobyA+Pmdsb2JhbC1leGNsdWRlcyB1c3VhbGx5LWlnbm9yZWQgJiYKKwllY2hvID4+LmdpdC9pbmZvL2V4Y2x1ZGUgIiF1c3VhbGx5LWlnbm9yZWQiICYmCisJPnVzdWFsbHktaWdub3JlZCAmJgorCWVjaG8gIj8/IHVzdWFsbHktaWdub3JlZCIgPmV4cGVjdCAmJgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiB1c3VhbGx5LWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA5LXByaW8tcXVldWUuc2ggYi90L3QwMDA5LXByaW8tcXVldWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzk0MWFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDktcHJpby1xdWV1ZS5zaApAQCAtMCwwICsxLDY0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgdGVzdHMgZm9yIHByaW9yaXR5IHF1ZXVlIGltcGxlbWVudGF0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKzEKKzIKKzMKKzQKKzUKKzUKKzYKKzcKKzgKKzkKKzEwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIG9yZGVyaW5nJyAnCisJdGVzdC10b29sIHByaW8tcXVldWUgMiA2IDMgMTAgOSA1IDcgNCA1IDggMSBkdW1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKzIKKzMKKzQKKzEKKzUKKzYKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4ZWQgcHV0IGFuZCBnZXQnICcKKwl0ZXN0LXRvb2wgcHJpby1xdWV1ZSA2IDIgNCBnZXQgNSAzIGdldCBnZXQgMSBkdW1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKzEKKzIKK05VTEwKKzEKKzIKK05VTEwKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aWNlIGVtcHR5IHF1ZXVlJyAnCisJdGVzdC10b29sIHByaW8tcXVldWUgMSAyIGdldCBnZXQgZ2V0IDEgMiBnZXQgZ2V0IGdldCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCiszCisyCis2Cis0Cis1CisxCis4CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YWNrIG9yZGVyJyAnCisJdGVzdC10b29sIHByaW8tcXVldWUgc3RhY2sgOCAxIDUgNCA2IDIgMyBkdW1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxMC1yYWN5LWdpdC5zaCBiL3QvdDAwMTAtcmFjeS1naXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTY1N2M1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMTAtcmFjeS1naXQuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JhY3kgR0lUJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGlzIHRlc3QgY2FuIGdpdmUgZmFsc2Ugc3VjY2VzcyBpZiB5b3VyIG1hY2hpbmUgaXMgc3VmZmljaWVudGx5CisjIHNsb3cgb3IgeW91ciB0cmlhbCBoYXBwZW5lZCB0byBoYXBwZW4gb24gc2Vjb25kIGJvdW5kYXJ5LgorCitmb3IgdHJpYWwgaW4gMCAxIDIgMyA0CitkbworCXJtIC1mIC5naXQvaW5kZXgKKwllY2hvIGZyb3R6ID5pbmZvY29tCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBpbmZvY29tCisJZWNobyB4eXp6eSA+aW5mb2NvbQorCisJZmlsZXM9JChnaXQgZGlmZi1maWxlcyAtcCkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiUmFjeSBHSVQgdHJpYWwgIyR0cmlhbCBwYXJ0IEEiIFwKKwkndGVzdCAiIiAhPSAiJGZpbGVzIicKKworCXNsZWVwIDEKKwllY2hvIHh5enp5ID5jb3JuZXJzdG9uZQorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgY29ybmVyc3RvbmUKKworCWZpbGVzPSQoZ2l0IGRpZmYtZmlsZXMgLXApCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJIlJhY3kgR0lUIHRyaWFsICMkdHJpYWwgcGFydCBCIiBcCisJJ3Rlc3QgIiIgIT0gIiRmaWxlcyInCisKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDExLWhhc2htYXAuc2ggYi90L3QwMDExLWhhc2htYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTM0M2ZmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMTEtaGFzaG1hcC5zaApAQCAtMCwwICsxLDI1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgaGFzaG1hcCBhbmQgc3RyaW5nIGhhc2ggZnVuY3Rpb25zJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfaGFzaG1hcCgpIHsKKwllY2hvICIkMSIgfCB0ZXN0LXRvb2wgaGFzaG1hcCAkMyA+IGFjdHVhbCAmJgorCWVjaG8gIiQyIiA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0JyAnCisKK3Rlc3RfaGFzaG1hcCAicHV0IGtleTEgdmFsdWUxCitwdXQga2V5MiB2YWx1ZTIKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTMKK3B1dCBmb29iYXJmcm90eiB2YWx1ZTQKK3NpemUiICJOVUxMCitOVUxMCitOVUxMCitOVUxMCis2NCA0IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1dCAoY2FzZSBpbnNlbnNpdGl2ZSknICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkyIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworc2l6ZSIgIk5VTEwKK05VTEwKK05VTEwKKzY0IDMiIGlnbm9yZWNhc2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlJyAnCisKK3Rlc3RfaGFzaG1hcCAicHV0IGtleTEgdmFsdWUxCitwdXQga2V5MSB2YWx1ZTIKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTMKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTQKK3NpemUiICJOVUxMCit2YWx1ZTEKK05VTEwKK3ZhbHVlMworNjQgMiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlIChjYXNlIGluc2Vuc2l0aXZlKScgJworCit0ZXN0X2hhc2htYXAgInB1dCBrZXkxIHZhbHVlMQorcHV0IEtleTEgdmFsdWUyCitwdXQgZm9vQmFyRnJvdHogdmFsdWUzCitwdXQgZm9vYmFyZnJvdHogdmFsdWU0CitzaXplIiAiTlVMTAordmFsdWUxCitOVUxMCit2YWx1ZTMKKzY0IDIiIGlnbm9yZWNhc2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQnICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkyIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworcHV0IGZvb2JhcmZyb3R6IHZhbHVlNAorZ2V0IGtleTEKK2dldCBrZXkyCitnZXQgZm9vQmFyRnJvdHoKK2dldCBub3RJbk1hcCIgIk5VTEwKK05VTEwKK05VTEwKK05VTEwKK3ZhbHVlMQordmFsdWUyCit2YWx1ZTMKK05VTEwiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IChjYXNlIGluc2Vuc2l0aXZlKScgJworCit0ZXN0X2hhc2htYXAgInB1dCBrZXkxIHZhbHVlMQorcHV0IGtleTIgdmFsdWUyCitwdXQgZm9vQmFyRnJvdHogdmFsdWUzCitnZXQgS2V5MQorZ2V0IGtlWTIKK2dldCBmb29iYXJmcm90egorZ2V0IG5vdEluTWFwIiAiTlVMTAorTlVMTAorTlVMTAordmFsdWUxCit2YWx1ZTIKK3ZhbHVlMworTlVMTCIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCcgJworCit0ZXN0X2hhc2htYXAgImFkZCBrZXkxIHZhbHVlMQorYWRkIGtleTEgdmFsdWUyCithZGQgZm9vQmFyRnJvdHogdmFsdWUzCithZGQgZm9vQmFyRnJvdHogdmFsdWU0CitnZXQga2V5MQorZ2V0IGZvb0JhckZyb3R6CitnZXQgbm90SW5NYXAiICJ2YWx1ZTIKK3ZhbHVlMQordmFsdWU0Cit2YWx1ZTMKK05VTEwiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIChjYXNlIGluc2Vuc2l0aXZlKScgJworCit0ZXN0X2hhc2htYXAgImFkZCBrZXkxIHZhbHVlMQorYWRkIEtleTEgdmFsdWUyCithZGQgZm9vQmFyRnJvdHogdmFsdWUzCithZGQgZm9vYmFyZnJvdHogdmFsdWU0CitnZXQga2V5MQorZ2V0IEZvb2JhcmZyb3R6CitnZXQgbm90SW5NYXAiICJ2YWx1ZTIKK3ZhbHVlMQordmFsdWU0Cit2YWx1ZTMKK05VTEwiIGlnbm9yZWNhc2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUnICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkyIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworcmVtb3ZlIGtleTEKK3JlbW92ZSBrZXkyCityZW1vdmUgbm90SW5NYXAKK3NpemUiICJOVUxMCitOVUxMCitOVUxMCit2YWx1ZTEKK3ZhbHVlMgorTlVMTAorNjQgMSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisKK3Rlc3RfaGFzaG1hcCAicHV0IGtleTEgdmFsdWUxCitwdXQga2V5MiB2YWx1ZTIKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTMKK3JlbW92ZSBLZXkxCityZW1vdmUga2VZMgorcmVtb3ZlIG5vdEluTWFwCitzaXplIiAiTlVMTAorTlVMTAorTlVMTAordmFsdWUxCit2YWx1ZTIKK05VTEwKKzY0IDEiIGlnbm9yZWNhc2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpdGVyYXRlJyAnCisJdGVzdC10b29sIGhhc2htYXAgPmFjdHVhbC5yYXcgPDwtXEVPRiAmJgorCXB1dCBrZXkxIHZhbHVlMQorCXB1dCBrZXkyIHZhbHVlMgorCXB1dCBmb29CYXJGcm90eiB2YWx1ZTMKKwlpdGVyYXRlCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTlVMTAorCU5VTEwKKwlOVUxMCisJZm9vQmFyRnJvdHogdmFsdWUzCisJa2V5MSB2YWx1ZTEKKwlrZXkyIHZhbHVlMgorCUVPRgorCisJc29ydCA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpdGVyYXRlIChjYXNlIGluc2Vuc2l0aXZlKScgJworCXRlc3QtdG9vbCBoYXNobWFwIGlnbm9yZWNhc2UgPmFjdHVhbC5yYXcgPDwtXEVPRiAmJgorCXB1dCBrZXkxIHZhbHVlMQorCXB1dCBrZXkyIHZhbHVlMgorCXB1dCBmb29CYXJGcm90eiB2YWx1ZTMKKwlpdGVyYXRlCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTlVMTAorCU5VTEwKKwlOVUxMCisJZm9vQmFyRnJvdHogdmFsdWUzCisJa2V5MSB2YWx1ZTEKKwlrZXkyIHZhbHVlMgorCUVPRgorCisJc29ydCA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncm93IC8gc2hyaW5rJyAnCisKKwlybSAtZiBpbiAmJgorCXJtIC1mIGV4cGVjdCAmJgorCWZvciBuIGluICQodGVzdF9zZXEgNTEpCisJZG8KKwkJZWNobyBwdXQga2V5JG4gdmFsdWUkbiA+PiBpbiAmJgorCQllY2hvIE5VTEwgPj4gZXhwZWN0CisJZG9uZSAmJgorCWVjaG8gc2l6ZSA+PiBpbiAmJgorCWVjaG8gNjQgNTEgPj4gZXhwZWN0ICYmCisJZWNobyBwdXQga2V5NTIgdmFsdWU1MiA+PiBpbiAmJgorCWVjaG8gTlVMTCA+PiBleHBlY3QgJiYKKwllY2hvIHNpemUgPj4gaW4gJiYKKwllY2hvIDI1NiA1MiA+PiBleHBlY3QgJiYKKwlmb3IgbiBpbiAkKHRlc3Rfc2VxIDEyKQorCWRvCisJCWVjaG8gcmVtb3ZlIGtleSRuID4+IGluICYmCisJCWVjaG8gdmFsdWUkbiA+PiBleHBlY3QKKwlkb25lICYmCisJZWNobyBzaXplID4+IGluICYmCisJZWNobyAyNTYgNDAgPj4gZXhwZWN0ICYmCisJZWNobyByZW1vdmUga2V5NDAgPj4gaW4gJiYKKwllY2hvIHZhbHVlNDAgPj4gZXhwZWN0ICYmCisJZWNobyBzaXplID4+IGluICYmCisJZWNobyA2NCAzOSA+PiBleHBlY3QgJiYKKwljYXQgaW4gfCB0ZXN0LXRvb2wgaGFzaG1hcCA+IG91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJpbmcgaW50ZXJuaW5nJyAnCisKK3Rlc3RfaGFzaG1hcCAiaW50ZXJuIHZhbHVlMQoraW50ZXJuIFZhbHVlMQoraW50ZXJuIHZhbHVlMgoraW50ZXJuIHZhbHVlMgorIiAidmFsdWUxCitWYWx1ZTEKK3ZhbHVlMgordmFsdWUyIgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxMi1oZWxwLnNoIGIvdC90MDAxMi1oZWxwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4ZWY3MzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDEyLWhlbHAuc2gKQEAgLTAsMCArMSw4OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2hlbHAnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb25maWd1cmVfaGVscCAoKSB7CisJdGVzdF9jb25maWcgaGVscC5mb3JtYXQgaHRtbCAmJgorCisJIyBVbmxlc3MgdGhlIHBhdGggaGFzICI6Ly8iIGluIGl0LCBHaXQgdHJpZXMgdG8gbWFrZSBzdXJlCisJIyB0aGUgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkgbG9jYWxseSBleGlzdHMuIEF2b2lkIGl0IGFzCisJIyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHNlZWluZyBhbiBhdHRlbXB0IHRvIGNvcnJlY3RseQorCSMgaW52b2tlIGEgaGVscCBicm93c2VyIGluIHRoaXMgdGVzdC4KKwl0ZXN0X2NvbmZpZyBoZWxwLmh0bWxwYXRoIHRlc3Q6Ly9odG1sICYmCisKKwkjIE5hbWUgYSBjdXN0b20gYnJvd3NlcgorCXRlc3RfY29uZmlnIGJyb3dzZXIudGVzdC5jbWQgLi90ZXN0LWJyb3dzZXIgJiYKKwl0ZXN0X2NvbmZpZyBoZWxwLmJyb3dzZXIgdGVzdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCIgJworCSMgSnVzdCB3cml0ZSBvdXQgd2hpY2ggcGFnZSBnZXRzIHJlcXVlc3RlZAorCXdyaXRlX3NjcmlwdCB0ZXN0LWJyb3dzZXIgPDwtXEVPRgorCWVjaG8gIiQqIiA+dGVzdC1icm93c2VyLmxvZworCUVPRgorJworCisjIG1ha2Ugc3VyZSB0byBleGVyY2lzZSB0aGVzZSBjb2RlIHBhdGhzLCB0aGUgb3V0cHV0IGlzIGEgYml0IHRyaWNreQorIyB0byB2ZXJpZnkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGhlbHAgY29tbWFuZHMnICcKKwlnaXQgaGVscCA+L2Rldi9udWxsICYmCisJZ2l0IGhlbHAgLWEgLS1uby12ZXJib3NlID4vZGV2L251bGwgJiYKKwlnaXQgaGVscCAtZyA+L2Rldi9udWxsICYmCisJZ2l0IGhlbHAgLWEgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ3b3JrcyBmb3IgY29tbWFuZHMgYW5kIGd1aWRlcyBieSBkZWZhdWx0IiAnCisJY29uZmlndXJlX2hlbHAgJiYKKwlnaXQgaGVscCBzdGF0dXMgJiYKKwllY2hvICJ0ZXN0Oi8vaHRtbC9naXQtc3RhdHVzLmh0bWwiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdGVzdC1icm93c2VyLmxvZyAmJgorCWdpdCBoZWxwIHJldmlzaW9ucyAmJgorCWVjaG8gInRlc3Q6Ly9odG1sL2dpdHJldmlzaW9ucy5odG1sIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHRlc3QtYnJvd3Nlci5sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1leGNsdWRlLWd1aWRlcyBkb2VzIG5vdCB3b3JrIGZvciBndWlkZXMiICcKKwk+dGVzdC1icm93c2VyLmxvZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBoZWxwIC0tZXhjbHVkZS1ndWlkZXMgcmV2aXNpb25zICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHRlc3QtYnJvd3Nlci5sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1oZWxwIGRvZXMgbm90IHdvcmsgZm9yIGd1aWRlcyIgIgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQlnaXQ6ICdyZXZpc2lvbnMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLgorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZpc2lvbnMgLS1oZWxwIDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGhlbHAnICcKKwlnaXQgaGVscCA+aGVscC5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeICAgY2xvbmUgICIgaGVscC5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeICAgYWRkICAgICIgaGVscC5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeICAgbG9nICAgICIgaGVscC5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeICAgY29tbWl0ICIgaGVscC5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeICAgZmV0Y2ggICIgaGVscC5vdXRwdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBoZWxwIC1nJyAnCisJZ2l0IGhlbHAgLWcgPmhlbHAub3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXiAgIGF0dHJpYnV0ZXMgIiBoZWxwLm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl4gICBldmVyeWRheSAgICIgaGVscC5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeICAgdHV0b3JpYWwgICAiIGhlbHAub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dlbmVyYXRlIGJ1aWx0aW4gbGlzdCcgJworCWdpdCAtLWxpc3QtY21kcz1idWlsdGlucyA+YnVpbHRpbnMKKycKKword2hpbGUgcmVhZCBidWlsdGluCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRidWlsdGluIGNhbiBoYW5kbGUgLWgiICcKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0ICRidWlsdGluIC1oID5vdXRwdXQgMj4mMSAmJgorCQl0ZXN0X2kxOG5ncmVwIHVzYWdlIG91dHB1dAorCScKK2RvbmUgPGJ1aWx0aW5zCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxMy1zaGExZGMuc2ggYi90L3QwMDEzLXNoYTFkYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTlmMzFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxMy1zaGExZGMuc2gKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc2hhMSBjb2xsaXNpb24gZGV0ZWN0aW9uJworLiAuL3Rlc3QtbGliLnNoCitURVNUX0RBVEE9IiRURVNUX0RJUkVDVE9SWS90MDAxMyIKKworaWYgdGVzdCAteiAiJERDX1NIQTEiCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHNoYTEgY29sbGlzaW9uIHRlc3RzLCBEQ19TSEExIG5vdCBzZXQnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0LXNoYTEgZGV0ZWN0cyBzaGF0dGVyZWQgcGRmJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHNoYTEgPCIkVEVTVF9EQVRBL3NoYXR0ZXJlZC0xLnBkZiIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGNvbGxpc2lvbiBlcnIgJiYKKwlncmVwIDM4NzYyY2Y3ZjU1OTM0YjM0ZDE3OWFlNmE0YzgwY2FkY2NiYjdmMGEgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxMy9zaGF0dGVyZWQtMS5wZGYgYi90L3QwMDEzL3NoYXR0ZXJlZC0xLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTlhYWExCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxMy9zaGF0dGVyZWQtMS5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MDAxNC1hbGlhcy5zaCBiL3QvdDAwMTQtYWxpYXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGQzZDkxNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMTQtYWxpYXMuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb21tYW5kIGFsaWFzaW5nJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGFsaWFzZXMgLSBpbnRlcm5hbCBleGVjdXRpb24nICcKKwlnaXQgY29uZmlnIGFsaWFzLm5lc3RlZC1pbnRlcm5hbC0xIG5lc3RlZC1pbnRlcm5hbC0yICYmCisJZ2l0IGNvbmZpZyBhbGlhcy5uZXN0ZWQtaW50ZXJuYWwtMiBzdGF0dXMgJiYKKwlnaXQgbmVzdGVkLWludGVybmFsLTEgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl5PbiBicmFuY2ggIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGFsaWFzZXMgLSBtaXhlZCBleGVjdXRpb24nICcKKwlnaXQgY29uZmlnIGFsaWFzLm5lc3RlZC1leHRlcm5hbC0xIG5lc3RlZC1leHRlcm5hbC0yICYmCisJZ2l0IGNvbmZpZyBhbGlhcy5uZXN0ZWQtZXh0ZXJuYWwtMiAiIWdpdCBuZXN0ZWQtZXh0ZXJuYWwtMyIgJiYKKwlnaXQgY29uZmlnIGFsaWFzLm5lc3RlZC1leHRlcm5hbC0zIHN0YXR1cyAmJgorCWdpdCBuZXN0ZWQtZXh0ZXJuYWwtMSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXk9uIGJyYW5jaCAiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29waW5nIGFsaWFzZXMgLSBpbnRlcm5hbCBleGVjdXRpb24nICcKKwlnaXQgY29uZmlnIGFsaWFzLmxvb3AtaW50ZXJuYWwtMSBsb29wLWludGVybmFsLTIgJiYKKwlnaXQgY29uZmlnIGFsaWFzLmxvb3AtaW50ZXJuYWwtMiBsb29wLWludGVybmFsLTMgJiYKKwlnaXQgY29uZmlnIGFsaWFzLmxvb3AtaW50ZXJuYWwtMyBsb29wLWludGVybmFsLTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9vcC1pbnRlcm5hbC0xIDI+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiXmZhdGFsOiBhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YiIG91dHB1dAorJworCisjIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCB1bnRpbCBleHRlcm5hbCBsb29wcyBhcmUgZml4ZWQsIGJlY2F1c2Ugd291bGQgYmxvY2sKKyMgdGhlIHRlc3Qgc3VpdGUgZm9yIGEgZnVsbCBtaW51dGUuCisjCisjdGVzdF9leHBlY3RfZmFpbHVyZSAnbG9vcGluZyBhbGlhc2VzIC0gbWl4ZWQgZXhlY3V0aW9uJyAnCisjCWdpdCBjb25maWcgYWxpYXMubG9vcC1taXhlZC0xIGxvb3AtbWl4ZWQtMiAmJgorIwlnaXQgY29uZmlnIGFsaWFzLmxvb3AtbWl4ZWQtMiAiIWdpdCBsb29wLW1peGVkLTEiICYmCisjCXRlc3RfbXVzdF9mYWlsIGdpdCBsb29wLW1peGVkLTEgMj5vdXRwdXQgJiYKKyMJdGVzdF9pMThuZ3JlcCAiXmZhdGFsOiBhbGlhcyBsb29wIGRldGVjdGVkOiBleHBhbnNpb24gb2YiIG91dHB1dAorIycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuLWNvbW1hbmQgZm9ybWF0cyBlbXB0eSBhcmdzIHByb3Blcmx5JyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9UUkFDRT0xIGdpdCBmcm90eiBhICIiIGIgIiAiIGMgMj5hY3R1YWwucmF3ICYmCisgICAgc2VkIC1uZSAiL3J1bl9jb21tYW5kOi9zLy4qdHJhY2U6IHJ1bl9jb21tYW5kOiAvL3AiIGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorICAgIGVjaG8gImdpdC1mcm90eiBhICdcJycnXCcnIGIgJ1wnJyAnXCcnIGMiID5leHBlY3QgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAxNS1oYXNoLnNoIGIvdC90MDAxNS1oYXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5MWU5MDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDE1LWhhc2guc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgYmFzaWMgaGFzaCBpbXBsZW1lbnRhdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYmFzaWMgU0hBLTEgaGFzaCB2YWx1ZXMnICcKKwl0ZXN0LXRvb2wgc2hhMSA8L2Rldi9udWxsID5hY3R1YWwgJiYKKwlncmVwIGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkgYWN0dWFsICYmCisJcHJpbnRmICJhIiB8IHRlc3QtdG9vbCBzaGExID5hY3R1YWwgJiYKKwlncmVwIDg2ZjdlNDM3ZmFhNWE3ZmNlMTVkMWRkY2I5ZWFlYWVhMzc3NjY3YjggYWN0dWFsICYmCisJcHJpbnRmICJhYmMiIHwgdGVzdC10b29sIHNoYTEgPmFjdHVhbCAmJgorCWdyZXAgYTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1MGMyNmM5Y2QwZDg5ZCBhY3R1YWwgJiYKKwlwcmludGYgIm1lc3NhZ2UgZGlnZXN0IiB8IHRlc3QtdG9vbCBzaGExID5hY3R1YWwgJiYKKwlncmVwIGMxMjI1MmNlZGE4YmU4OTk0ZDVmYTAyOTBhNDcyMzFjMWQxNmFhZTMgYWN0dWFsICYmCisJcHJpbnRmICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgfCB0ZXN0LXRvb2wgc2hhMSA+YWN0dWFsICYmCisJZ3JlcCAzMmQxMGM3YjhjZjk2NTcwY2EwNGNlMzdmMmExOWQ4NDI0MGQzYTg5IGFjdHVhbCAmJgorCXBlcmwgLWUgIiR8ID0gMTsgcHJpbnQgcXthYWFhYWFhYWFhfSBmb3IgMS4uMTAwMDAwOyIgfCBcCisJCXRlc3QtdG9vbCBzaGExID5hY3R1YWwgJiYKKwlncmVwIDM0YWE5NzNjZDRjNGRhYTRmNjFlZWIyYmRiYWQyNzMxNjUzNDAxNmYgYWN0dWFsICYmCisJcHJpbnRmICJibG9iIDBcMCIgfCB0ZXN0LXRvb2wgc2hhMSA+YWN0dWFsICYmCisJZ3JlcCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIGFjdHVhbCAmJgorCXByaW50ZiAiYmxvYiAzXDBhYmMiIHwgdGVzdC10b29sIHNoYTEgPmFjdHVhbCAmJgorCWdyZXAgZjJiYThmODRhYjVjMWJjZTg0YTdiNDQxY2IxOTU5Y2ZjNzA5M2I3ZiBhY3R1YWwgJiYKKwlwcmludGYgInRyZWUgMFwwIiB8IHRlc3QtdG9vbCBzaGExID5hY3R1YWwgJiYKKwlncmVwIDRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYmFzaWMgU0hBLTI1NiBoYXNoIHZhbHVlcycgJworCXRlc3QtdG9vbCBzaGEyNTYgPC9kZXYvbnVsbCA+YWN0dWFsICYmCisJZ3JlcCBlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1IGFjdHVhbCAmJgorCXByaW50ZiAiYSIgfCB0ZXN0LXRvb2wgc2hhMjU2ID5hY3R1YWwgJiYKKwlncmVwIGNhOTc4MTEyY2ExYmJkY2FmYWMyMzFiMzlhMjNkYzRkYTc4NmVmZjgxNDdjNGU3MmI5ODA3Nzg1YWZlZTQ4YmIgYWN0dWFsICYmCisJcHJpbnRmICJhYmMiIHwgdGVzdC10b29sIHNoYTI1NiA+YWN0dWFsICYmCisJZ3JlcCBiYTc4MTZiZjhmMDFjZmVhNDE0MTQwZGU1ZGFlMjIyM2IwMDM2MWEzOTYxNzdhOWNiNDEwZmY2MWYyMDAxNWFkIGFjdHVhbCAmJgorCXByaW50ZiAibWVzc2FnZSBkaWdlc3QiIHwgdGVzdC10b29sIHNoYTI1NiA+YWN0dWFsICYmCisJZ3JlcCBmNzg0NmY1NWNmMjNlMTRlZWJlYWI1YjRlMTU1MGNhZDViNTA5ZTMzNDhmYmM0ZWZhM2ExNDEzZDM5M2NiNjUwIGFjdHVhbCAmJgorCXByaW50ZiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiIHwgdGVzdC10b29sIHNoYTI1NiA+YWN0dWFsICYmCisJZ3JlcCA3MWM0ODBkZjkzZDZhZTJmMWVmYWQxNDQ3YzY2Yzk1MjVlMzE2MjE4Y2Y1MWZjOGQ5ZWQ4MzJmMmRhZjE4YjczIGFjdHVhbCAmJgorCSMgVHJ5IHRvIGV4ZXJjaXNlIHRoZSBjaHVua2luZyBjb2RlIGJ5IHR1cm5pbmcgYXV0b2ZsdXNoIG9uLgorCXBlcmwgLWUgIiR8ID0gMTsgcHJpbnQgcXthYWFhYWFhYWFhfSBmb3IgMS4uMTAwMDAwOyIgfCBcCisJCXRlc3QtdG9vbCBzaGEyNTYgPmFjdHVhbCAmJgorCWdyZXAgY2RjNzZlNWM5OTE0ZmI5MjgxYTFjN2UyODRkNzNlNjdmMTgwOWE0OGE0OTcyMDBlMDQ2ZDM5Y2NjNzExMmNkMCBhY3R1YWwgJiYKKwlwZXJsIC1lICIkfCA9IDE7IHByaW50IHF7YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp9IGZvciAxLi4xMDAwMDA7IiB8IFwKKwkJdGVzdC10b29sIHNoYTI1NiA+YWN0dWFsICYmCisJZ3JlcCBlNDA2YmEzMjFjYTcxMmFkMzVhNjk4YmYwYWY4ZDYxZmM0ZGM0MGVjYTZiZGNlYTQ2OTc5NjI3MjRjY2JkZTM1IGFjdHVhbCAmJgorCXByaW50ZiAiYmxvYiAwXDAiIHwgdGVzdC10b29sIHNoYTI1NiA+YWN0dWFsICYmCisJZ3JlcCA0NzNhMGY0YzNiZThhOTM2ODFhMjY3ZTNiMWU5YTdkY2RhMTE4NTQzNmZlMTQxZjc3NDkxMjBhMzAzNzIxODEzIGFjdHVhbCAmJgorCXByaW50ZiAiYmxvYiAzXDBhYmMiIHwgdGVzdC10b29sIHNoYTI1NiA+YWN0dWFsICYmCisJZ3JlcCBjMWNmNmU0NjUwNzc5MzBlODhkYzUxMzY2NDFkNDAyZjcyYTIyOWRkZDk5NmY2MjdkNjBlOTYzOWVhYmEzNWE2IGFjdHVhbCAmJgorCXByaW50ZiAidHJlZSAwXDAiIHwgdGVzdC10b29sIHNoYTI1NiA+YWN0dWFsICYmCisJZ3JlcCA2ZWYxOWI0MTIyNWM1MzY5ZjFjMTA0ZDQ1ZDhkODVlZmE5YjA1N2I1M2IxNGI0YjliOTM5ZGQ3NGRlY2M1MzIxIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMTYtb2lkbWFwLnNoIGIvdC90MDAxNi1vaWRtYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzFmODI3NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMTYtb2lkbWFwLnNoCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBvaWRtYXAnCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGlzIHB1cnBvc2VmdWxseSBpcyB2ZXJ5IHNpbWlsYXIgdG8gdDAwMTEtaGFzaG1hcC5zaAorCit0ZXN0X29pZG1hcCAoKSB7CisJZWNobyAiJDEiIHwgdGVzdC10b29sIG9pZG1hcCAkMyA+YWN0dWFsICYmCisJZWNobyAiJDIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJdGVzdF9jb21taXQgZm91cgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1dCcgJworCit0ZXN0X29pZG1hcCAicHV0IG9uZSAxCitwdXQgdHdvIDIKK3B1dCBpbnZhbGlkT2lkIDQKK3B1dCB0aHJlZSAzIiAiTlVMTAorTlVMTAorVW5rbm93biBvaWQ6IGludmFsaWRPaWQKK05VTEwiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZScgJworCit0ZXN0X29pZG1hcCAicHV0IG9uZSAxCitwdXQgdHdvIDIKK3B1dCB0aHJlZSAzCitwdXQgaW52YWxpZE9pZCA0CitwdXQgdHdvIGRldXgKK3B1dCBvbmUgdW4iICJOVUxMCitOVUxMCitOVUxMCitVbmtub3duIG9pZDogaW52YWxpZE9pZAorMgorMSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQnICcKKwordGVzdF9vaWRtYXAgInB1dCBvbmUgMQorcHV0IHR3byAyCitwdXQgdGhyZWUgMworZ2V0IHR3bworZ2V0IGZvdXIKK2dldCBpbnZhbGlkT2lkCitnZXQgb25lIiAiTlVMTAorTlVMTAorTlVMTAorMgorTlVMTAorVW5rbm93biBvaWQ6IGludmFsaWRPaWQKKzEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlJyAnCisKK3Rlc3Rfb2lkbWFwICJwdXQgb25lIDEKK3B1dCB0d28gMgorcHV0IHRocmVlIDMKK3JlbW92ZSBvbmUKK3JlbW92ZSB0d28KK3JlbW92ZSBpbnZhbGlkT2lkCityZW1vdmUgZm91ciIgIk5VTEwKK05VTEwKK05VTEwKKzEKKzIKK1Vua25vd24gb2lkOiBpbnZhbGlkT2lkCitOVUxMIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2l0ZXJhdGUnICcKKwl0ZXN0LXRvb2wgb2lkbWFwID5hY3R1YWwucmF3IDw8LVxFT0YgJiYKKwlwdXQgb25lIDEKKwlwdXQgdHdvIDIKKwlwdXQgdGhyZWUgMworCWl0ZXJhdGUKKwlFT0YKKworCSMgc29ydCAiZXhwZWN0IiB0b28gc28gd2UgZG8gbm90IHJlbHkgb24gdGhlIG9yZGVyIG9mIHBhcnRpY3VsYXIgb2lkcworCXNvcnQgPmV4cGVjdCA8PC1FT0YgJiYKKwlOVUxMCisJTlVMTAorCU5VTEwKKwkkKGdpdCByZXYtcGFyc2Ugb25lKSAxCisJJChnaXQgcmV2LXBhcnNlIHR3bykgMgorCSQoZ2l0IHJldi1wYXJzZSB0aHJlZSkgMworCUVPRgorCisJc29ydCA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMTctZW52LWhlbHBlci5zaCBiL3QvdDAwMTctZW52LWhlbHBlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMWVjZjZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxNy1lbnYtaGVscGVyLnNoCkBAIC0wLDAgKzEsOTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGVudi0taGVscGVyJworCisuIC4vdGVzdC1saWIuc2gKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbnYtLWhlbHBlciB1c2FnZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS1kZWZhdWx0eHl6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vudi0taGVscGVyIGJhZCBkZWZhdWx0IHZhbHVlcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MXh5eiBNSVNTSU5HICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT11bG9uZyAtLWRlZmF1bHQ9MXh5eiBNSVNTSU5HCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vudi0taGVscGVyIC0tdHlwZT1ib29sJyAnCisJIyBUZXN0IHZhcmlvdXMgLS1kZWZhdWx0IGJvb2wgdmFsdWVzCisJZWNobyB0cnVlID5leHBlY3RlZCAmJgorCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MSBNSVNTSU5HID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PXllcyBNSVNTSU5HID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PXRydWUgTUlTU0lORyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZWNobyBmYWxzZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PTAgTUlTU0lORyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD1ubyBNSVNTSU5HID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PWZhbHNlIE1JU1NJTkcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJIyBObyBvdXRwdXQgd2l0aCAtLWV4aXQtY29kZQorCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9dHJ1ZSAtLWV4aXQtY29kZSBNSVNTSU5HID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PWZhbHNlIC0tZXhpdC1jb2RlIE1JU1NJTkcgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCisJIyBFeGlzdGluZyB2YXJpYWJsZQorCUVYSVNUUz10cnVlIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9ZmFsc2UgLS1leGl0LWNvZGUgRVhJU1RTID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBcCisJCWVudiBFWElTVFM9ZmFsc2UgXAorCQlnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PXRydWUgLS1leGl0LWNvZGUgRVhJU1RTID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW52LS1oZWxwZXIgLS10eXBlPXVsb25nJyAnCisJZWNobyAxMjM0NTY3ODkwID5leHBlY3RlZCAmJgorCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcgLS1kZWZhdWx0PTEyMzQ1Njc4OTAgTUlTU0lORyA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIgJiYKKworCWVjaG8gMCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPXVsb25nIC0tZGVmYXVsdD0wIE1JU1NJTkcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT11bG9uZyAtLWRlZmF1bHQ9MTIzNDU2Nzg5MCAtLWV4aXQtY29kZSBNSVNTSU5HID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIgJiYKKworCUVYSVNUUz0xMjM0NTY3ODkwIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9dWxvbmcgLS1kZWZhdWx0PTAgRVhJU1RTIC0tZXhpdC1jb2RlID5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIgJiYKKworCWVjaG8gMTIzNDU2Nzg5MCA+ZXhwZWN0ZWQgJiYKKwlFWElTVFM9MTIzNDU2Nzg5MCBnaXQgZW52LS1oZWxwZXIgLS10eXBlPXVsb25nIC0tZGVmYXVsdD0wIEVYSVNUUyA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW52LS1oZWxwZXIgcmVhZHMgY29uZmlnIHRoYW5rcyB0byB0cmFjZTInICcKKwlta2RpciBob21lICYmCisJZ2l0IGNvbmZpZyAtZiBob21lLy5naXRjb25maWcgaW5jbHVkZS5wYXRoIGN5Y2xlICYmCisJZ2l0IGNvbmZpZyAtZiBob21lL2N5Y2xlIGluY2x1ZGUucGF0aCAuZ2l0Y29uZmlnICYmCisKKwl0ZXN0X211c3RfZmFpbCBcCisJCWVudiBIT01FPSIkKHB3ZCkvaG9tZSIgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049ZmFsc2UgXAorCQlnaXQgY29uZmlnIC1sIDI+ZXJyICYmCisJZ3JlcCAiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIFwKKwkJZW52IEhPTUU9IiQocHdkKS9ob21lIiBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj10cnVlIFwKKwkJZ2l0IC1DIGN5Y2xlIGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0wIC0tZXhpdC1jb2RlIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OIDI+ZXJyICYmCisJZ3JlcCAiIyBHRVRURVhUIFBPSVNPTiAjIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDE5LWpzb24td3JpdGVyLnNoIGIvdC90MDAxOS1qc29uLXdyaXRlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjBjMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxOS1qc29uLXdyaXRlci5zaApAQCAtMCwwICsxLDMzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QganNvbi13cml0ZXIgSlNPTiBnZW5lcmF0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuaXQgdGVzdCBvZiBqc29uLXdyaXRlciByb3V0aW5lcycgJworCXRlc3QtdG9vbCBqc29uLXdyaXRlciAtdQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cml2aWFsIG9iamVjdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7fQorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCW9iamVjdAorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJpdmlhbCBhcnJheScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlbXQorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCWFycmF5CisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgb2JqZWN0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXsiYSI6ImFiYyIsImIiOjQyLCJjIjozLjE0LCJkIjp0cnVlLCJlIjpmYWxzZSwiZiI6bnVsbH0KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlvYmplY3QKKwkJb2JqZWN0LXN0cmluZyBhIGFiYworCQlvYmplY3QtaW50IGIgNDIKKwkJb2JqZWN0LWRvdWJsZSBjIDIgMy4xNDAKKwkJb2JqZWN0LXRydWUgZAorCQlvYmplY3QtZmFsc2UgZQorCQlvYmplY3QtbnVsbCBmCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgYXJyYXknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJWyJhYmMiLDQyLDMuMTQsdHJ1ZSxmYWxzZSxudWxsXQorCUVPRgorCWNhdCA+aW5wdXQgPDwtXEVPRiAmJgorCWFycmF5CisJCWFycmF5LXN0cmluZyBhYmMKKwkJYXJyYXktaW50IDQyCisJCWFycmF5LWRvdWJsZSAyIDMuMTQwCisJCWFycmF5LXRydWUKKwkJYXJyYXktZmFsc2UKKwkJYXJyYXktbnVsbAorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXNjYXBlIHF1b3Rpbmcgc3RyaW5nJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXsiYSI6ImFiY1xcZGVmIn0KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlvYmplY3QKKwkJb2JqZWN0LXN0cmluZyBhIGFiY1xkZWYKKwllbmQKKwlFT0YKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VzY2FwZSBxdW90aW5nIHN0cmluZyAyJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXsiYSI6ImFiY1wiZGVmIn0KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlvYmplY3QKKwkJb2JqZWN0LXN0cmluZyBhIGFiYyJkZWYKKwllbmQKKwlFT0YKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBpbmxpbmUgb2JqZWN0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXsiYSI6ImFiYyIsImIiOjQyLCJzdWIxIjp7ImMiOjMuMTQsImQiOnRydWUsInN1YjIiOnsiZSI6ZmFsc2UsImYiOm51bGx9fX0KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlvYmplY3QKKwkJb2JqZWN0LXN0cmluZyBhIGFiYworCQlvYmplY3QtaW50IGIgNDIKKwkJb2JqZWN0LW9iamVjdCBzdWIxCisJCQlvYmplY3QtZG91YmxlIGMgMiAzLjE0MAorCQkJb2JqZWN0LXRydWUgZAorCQkJb2JqZWN0LW9iamVjdCBzdWIyCisJCQkJb2JqZWN0LWZhbHNlIGUKKwkJCQlvYmplY3QtbnVsbCBmCisJCQllbmQKKwkJZW5kCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgaW5saW5lIGFycmF5JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVsiYWJjIiw0MixbMy4xNCx0cnVlLFtmYWxzZSxudWxsXV1dCisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJYXJyYXkKKwkJYXJyYXktc3RyaW5nIGFiYworCQlhcnJheS1pbnQgNDIKKwkJYXJyYXktYXJyYXkKKwkJCWFycmF5LWRvdWJsZSAyIDMuMTQwCisJCQlhcnJheS10cnVlCisJCQlhcnJheS1hcnJheQorCQkJCWFycmF5LWZhbHNlCisJCQkJYXJyYXktbnVsbAorCQkJZW5kCisJCWVuZAorCWVuZAorCUVPRgorCXRlc3QtdG9vbCBqc29uLXdyaXRlciA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGlubGluZSBvYmplY3QgYW5kIGFycmF5JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXsiYSI6ImFiYyIsImIiOjQyLCJzdWIxIjp7ImMiOjMuMTQsImQiOnRydWUsInN1YjIiOltmYWxzZSxudWxsXX19CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LWludCBiIDQyCisJCW9iamVjdC1vYmplY3Qgc3ViMQorCQkJb2JqZWN0LWRvdWJsZSBjIDIgMy4xNDAKKwkJCW9iamVjdC10cnVlIGQKKwkJCW9iamVjdC1hcnJheSBzdWIyCisJCQkJYXJyYXktZmFsc2UKKwkJCQlhcnJheS1udWxsCisJCQllbmQKKwkJZW5kCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgaW5saW5lIG9iamVjdCBhbmQgYXJyYXkgMicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl7ImEiOiJhYmMiLCJiIjo0Miwic3ViMSI6eyJjIjozLjE0LCJkIjp0cnVlLCJzdWIyIjpbZmFsc2UseyJnIjowLCJoIjoxfSxudWxsXX19CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LWludCBiIDQyCisJCW9iamVjdC1vYmplY3Qgc3ViMQorCQkJb2JqZWN0LWRvdWJsZSBjIDIgMy4xNDAKKwkJCW9iamVjdC10cnVlIGQKKwkJCW9iamVjdC1hcnJheSBzdWIyCisJCQkJYXJyYXktZmFsc2UKKwkJCQlhcnJheS1vYmplY3QKKwkJCQkJb2JqZWN0LWludCBnIDAKKwkJCQkJb2JqZWN0LWludCBoIDEKKwkJCQllbmQKKwkJCQlhcnJheS1udWxsCisJCQllbmQKKwkJZW5kCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgbmVzdGVkIGlubGluZSBvYmplY3QgYW5kIGFycmF5IDInICcKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PC1cRU9GICYmCisJfHsKKwl8ICAiYSI6ICJhYmMiLAorCXwgICJiIjogNDIsCisJfCAgInN1YjEiOiB7CisJfCAgICAiYyI6IDMuMTQsCisJfCAgICAiZCI6IHRydWUsCisJfCAgICAic3ViMiI6IFsKKwl8ICAgICAgZmFsc2UsCisJfCAgICAgIHsKKwl8ICAgICAgICAiZyI6IDAsCisJfCAgICAgICAgImgiOiAxCisJfCAgICAgIH0sCisJfCAgICAgIG51bGwKKwl8ICAgIF0KKwl8ICB9CisJfH0KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlvYmplY3QKKwkJb2JqZWN0LXN0cmluZyBhIGFiYworCQlvYmplY3QtaW50IGIgNDIKKwkJb2JqZWN0LW9iamVjdCBzdWIxCisJCQlvYmplY3QtZG91YmxlIGMgMiAzLjE0MAorCQkJb2JqZWN0LXRydWUgZAorCQkJb2JqZWN0LWFycmF5IHN1YjIKKwkJCQlhcnJheS1mYWxzZQorCQkJCWFycmF5LW9iamVjdAorCQkJCQlvYmplY3QtaW50IGcgMAorCQkJCQlvYmplY3QtaW50IGggMQorCQkJCWVuZAorCQkJCWFycmF5LW51bGwKKwkJCWVuZAorCQllbmQKKwllbmQKKwlFT0YKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgLXAgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lubGluZSBvYmplY3Qgd2l0aCBubyBtZW1iZXJzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXsiYSI6ImFiYyIsImVtcHR5Ijp7fSwiYiI6NDJ9CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LW9iamVjdCBlbXB0eQorCQllbmQKKwkJb2JqZWN0LWludCBiIDQyCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmxpbmUgYXJyYXkgd2l0aCBubyBtZW1iZXJzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXsiYSI6ImFiYyIsImVtcHR5IjpbXSwiYiI6NDJ9CisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LWFycmF5IGVtcHR5CisJCWVuZAorCQlvYmplY3QtaW50IGIgNDIKKwllbmQKKwlFT0YKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhcmdlciBlbXB0eSBleGFtcGxlJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXsiYSI6ImFiYyIsImVtcHR5Ijpbe30se30se30sW10se31dLCJiIjo0Mn0KKwlFT0YKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlvYmplY3QKKwkJb2JqZWN0LXN0cmluZyBhIGFiYworCQlvYmplY3QtYXJyYXkgZW1wdHkKKwkJCWFycmF5LW9iamVjdAorCQkJZW5kCisJCQlhcnJheS1vYmplY3QKKwkJCWVuZAorCQkJYXJyYXktb2JqZWN0CisJCQllbmQKKwkJCWFycmF5LWFycmF5CisJCQllbmQKKwkJCWFycmF5LW9iamVjdAorCQkJZW5kCisJCWVuZAorCQlvYmplY3QtaW50IGIgNDIKKwllbmQKKwlFT0YKKwl0ZXN0LXRvb2wganNvbi13cml0ZXIgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgUEVSTEpTT04gJworCXBlcmwgLU1KU09OIC1lICJleGl0IDAiCisnCisKKyMgQXMgYSBzYW5pdHkgY2hlY2ssIGFzayBQZXJsIHRvIHBhcnNlIG91ciBnZW5lcmF0ZWQgSlNPTiBhbmQgcmVjdXJzaXZlbHkKKyMgZHVtcCB0aGUgcmVzdWx0aW5nIGRhdGEgaW4gc29ydGVkIG9yZGVyLiAgQ29uZmlybSB0aGF0IHRoYXQgbWF0Y2hlcyBvdXIKKyMgZXhwZWN0YXRpb25zLgordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMSlNPTiAncGFyc2UgSlNPTiB1c2luZyBQZXJsJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXJvd1swXS5hIGFiYworCXJvd1swXS5iIDQyCisJcm93WzBdLnN1YjEgaGFzaAorCXJvd1swXS5zdWIxLmMgMy4xNAorCXJvd1swXS5zdWIxLmQgMQorCXJvd1swXS5zdWIxLnN1YjIgYXJyYXkKKwlyb3dbMF0uc3ViMS5zdWIyWzBdIDAKKwlyb3dbMF0uc3ViMS5zdWIyWzFdIGhhc2gKKwlyb3dbMF0uc3ViMS5zdWIyWzFdLmcgMAorCXJvd1swXS5zdWIxLnN1YjJbMV0uaCAxCisJcm93WzBdLnN1YjEuc3ViMlsyXSBudWxsCisJRU9GCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJb2JqZWN0CisJCW9iamVjdC1zdHJpbmcgYSBhYmMKKwkJb2JqZWN0LWludCBiIDQyCisJCW9iamVjdC1vYmplY3Qgc3ViMQorCQkJb2JqZWN0LWRvdWJsZSBjIDIgMy4xNDAKKwkJCW9iamVjdC10cnVlIGQKKwkJCW9iamVjdC1hcnJheSBzdWIyCisJCQkJYXJyYXktZmFsc2UKKwkJCQlhcnJheS1vYmplY3QKKwkJCQkJb2JqZWN0LWludCBnIDAKKwkJCQkJb2JqZWN0LWludCBoIDEKKwkJCQllbmQKKwkJCQlhcnJheS1udWxsCisJCQllbmQKKwkJZW5kCisJZW5kCisJRU9GCisJdGVzdC10b29sIGpzb24td3JpdGVyIDxpbnB1dCA+b3V0cHV0Lmpzb24gJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkiL3QwMDE5L3BhcnNlX2pzb24ucGVybCA8b3V0cHV0Lmpzb24gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDE5L3BhcnNlX2pzb24ucGVybCBiL3QvdDAwMTkvcGFyc2VfanNvbi5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTg3ZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDE5L3BhcnNlX2pzb24ucGVybApAQCAtMCwwICsxLDU1IEBACisjIS91c3IvYmluL3BlcmwKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSlNPTjsKKworc3ViIGR1bXBfYXJyYXkgeworICAgIG15ICgkbGFiZWxfaW4sICRhcnlfcmVmKSA9IEBfOworICAgIG15IEBhcnkgPSBAJGFyeV9yZWY7CisKKyAgICBmb3IgKCBteSAkaSA9IDA7ICRpIDw9ICQjeyAkYXJ5X3JlZiB9OyAkaSsrICkKKyAgICB7CisJbXkgJGxhYmVsID0gIiRsYWJlbF9pblxbJGlcXSI7CisJZHVtcF9pdGVtKCRsYWJlbCwgJGFyeVskaV0pOworICAgIH0KK30KKworc3ViIGR1bXBfaGFzaCB7CisgICAgbXkgKCRsYWJlbF9pbiwgJG9ial9yZWYpID0gQF87CisgICAgbXkgJW9iaiA9ICUkb2JqX3JlZjsKKworICAgIGZvcmVhY2ggbXkgJGsgKHNvcnQga2V5cyAlb2JqKSB7CisJbXkgJGxhYmVsID0gKGxlbmd0aCgkbGFiZWxfaW4pID4gMCkgPyAiJGxhYmVsX2luLiRrIiA6ICIkayI7CisJbXkgJHZhbHVlID0gJG9ianska307CisKKwlkdW1wX2l0ZW0oJGxhYmVsLCAkdmFsdWUpOworICAgIH0KK30KKworc3ViIGR1bXBfaXRlbSB7CisgICAgbXkgKCRsYWJlbF9pbiwgJHZhbHVlKSA9IEBfOworICAgIGlmIChyZWYoJHZhbHVlKSBlcSAnQVJSQVknKSB7CisJcHJpbnQgIiRsYWJlbF9pbiBhcnJheVxuIjsKKwlkdW1wX2FycmF5KCRsYWJlbF9pbiwgJHZhbHVlKTsKKyAgICB9IGVsc2lmIChyZWYoJHZhbHVlKSBlcSAnSEFTSCcpIHsKKwlwcmludCAiJGxhYmVsX2luIGhhc2hcbiI7CisJZHVtcF9oYXNoKCRsYWJlbF9pbiwgJHZhbHVlKTsKKyAgICB9IGVsc2lmIChyZWYgJHZhbHVlKSB7CisJbXkgJGJvb2wgPSAkdmFsdWUgPyAxIDogMDsKKwlwcmludCAiJGxhYmVsX2luICRib29sXG4iOworICAgIH0gZWxzaWYgKGRlZmluZWQgJHZhbHVlKSB7CisJcHJpbnQgIiRsYWJlbF9pbiAkdmFsdWVcbiI7CisgICAgfSBlbHNlIHsKKwlwcmludCAiJGxhYmVsX2luIG51bGxcbiI7CisgICAgfQorfQorCitteSAkcm93ID0gMDsKK3doaWxlICg8PikgeworICAgIG15ICRkYXRhID0gZGVjb2RlX2pzb24oICRfICk7CisgICAgbXkgJGxhYmVsID0gInJvd1skcm93XSI7CisKKyAgICBkdW1wX2hhc2goJGxhYmVsLCAkZGF0YSk7CisgICAgJHJvdysrOworfQorCmRpZmYgLS1naXQgYS90L3QwMDIwLWNybGYuc2ggYi90L3QwMDIwLWNybGYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjYzYmE2MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjAtY3JsZi5zaApAQCAtMCwwICsxLDM5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0NSTEYgY29udmVyc2lvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK2hhc19jcigpIHsKKwl0ciAnXDAxNScgUSA8IiQxIiB8IGdyZXAgUSA+L2Rldi9udWxsCit9CisKKyMgYWRkIG9yIHJlbW92ZSBDUnMgdG8gZGlzayBmaWxlIGluLXBsYWNlCisjIHVzYWdlOiBtdW5nZV9jciA8YXBwZW5kfHJlbW92ZT4gPGZpbGU+CittdW5nZV9jciAoKSB7CisJIiR7MX1fY3IiIDwiJDIiID50bXAgJiYKKwltdiB0bXAgIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCisJZm9yIHcgaW4gSGVsbG8gd29ybGQgaG93IGFyZSB5b3U7IGRvIGVjaG8gJHc7IGRvbmUgPm9uZSAmJgorCW1rZGlyIGRpciAmJgorCWZvciB3IGluIEkgYW0gdmVyeSB2ZXJ5IGZpbmUgdGhhbmsgeW91OyBkbyBlY2hvICR3OyBkb25lID5kaXIvdHdvICYmCisJZm9yIHcgaW4gT2ggaGVyZSBpcyBOVUxRaW4gdGV4dCBoZXJlOyBkbyBlY2hvICR3OyBkb25lIHwgcV90b19udWwgPnRocmVlICYmCisJZ2l0IGFkZCAuICYmCisKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRDpvbmUpICYmCisJZGlyPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmRpcikgJiYKKwl0d289JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZGlyL3R3bykgJiYKKwl0aHJlZT0kKGdpdCByZXYtcGFyc2UgSEVBRDp0aHJlZSkgJiYKKworCWZvciB3IGluIFNvbWUgZXh0cmEgbGluZXMgaGVyZTsgZG8gZWNobyAkdzsgZG9uZSA+Pm9uZSAmJgorCWdpdCBkaWZmID5wYXRjaC5maWxlICYmCisJcGF0Y2hlZD0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxvbmUpICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IGF1dG9jcmxmPWlucHV0LCBhbGwgQ1JMRicgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKworCWZvciB3IGluIEkgYW0gYWxsIENSTEY7IGRvIGVjaG8gJHc7IGRvbmUgfCBhcHBlbmRfY3IgPmFsbGNybGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGFsbGNybGYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IGF1dG9jcmxmPWlucHV0LCBtaXhlZCBMRi9DUkxGJyAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgdHJ1ZSAmJgorCisJZm9yIHcgaW4gT2ggaGVyZSBpcyBDUkxGUSBpbiB0ZXh0OyBkbyBlY2hvICR3OyBkb25lIHwgcV90b19jciA+bWl4ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIG1peGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBhdXRvY3JsZj10cnVlLCBhbGwgTEYnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKworCWZvciB3IGluIEkgYW0gYWxsIExGOyBkbyBlY2hvICR3OyBkb25lID5hbGxsZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgYWxsbGYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IGF1dG9jcmxmPXRydWUgbWl4ZWQgTEYvQ1JMRicgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgdHJ1ZSAmJgorCisJZm9yIHcgaW4gT2ggaGVyZSBpcyBDUkxGUSBpbiB0ZXh0OyBkbyBlY2hvICR3OyBkb25lIHwgcV90b19jciA+bWl4ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIG1peGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBwcmludCB3YXJuaW5nIG9ubHkgb25jZScgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHdhcm4gJiYKKworCWZvciB3IGluIEkgYW0gYWxsIExGOyBkbyBlY2hvICR3OyBkb25lID5kb3VibGV3YXJuICYmCisJZ2l0IGFkZCBkb3VibGV3YXJuICYmCisJZ2l0IGNvbW1pdCAtbSAibm93YXJuIiAmJgorCWZvciB3IGluIE9oIGhlcmUgaXMgQ1JMRlEgaW4gdGV4dDsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fY3IgPmRvdWJsZXdhcm4gJiYKKwlnaXQgYWRkIGRvdWJsZXdhcm4gMj5lcnIgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIENfTE9DQUxFX09VVFBVVAorCXRoZW4KKwkJdGVzdCAkKGdyZXAgIkNSTEYgd2lsbCBiZSByZXBsYWNlZCBieSBMRiIgZXJyIHwgd2MgLWwpID0gMQorCWZpCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IGdpdCBkaWZmIGRlbW90ZXMgc2FmZWNybGY9dHJ1ZSB0byB3YXJuJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKwlnaXQgZGlmZiBIRUFECisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FmZWNybGY6IG5vIHdhcm5pbmcgd2l0aCBzYWZlY3JsZj1mYWxzZScgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiBmYWxzZSAmJgorCisJZm9yIHcgaW4gSSBhbSBhbGwgQ1JMRjsgZG8gZWNobyAkdzsgZG9uZSB8IGFwcGVuZF9jciA+YWxsY3JsZiAmJgorCWdpdCBhZGQgYWxsY3JsZiAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggb2ZmIGF1dG9jcmxmLCBzYWZlY3JsZiwgcmVzZXQgSEVBRCcgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiBmYWxzZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHdpdGggYXV0b2NybGY9aW5wdXQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJbXVuZ2VfY3IgYXBwZW5kIG9uZSAmJgorCW11bmdlX2NyIGFwcGVuZCBkaXIvdHdvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLSBvbmUgZGlyL3R3byAmJgorCWRpZmZlcnM9JChnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEKSAmJgorCXZlcmJvc2UgdGVzdCAteiAiJGRpZmZlcnMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHdpdGggYXV0b2NybGY9dHJ1ZScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCW11bmdlX2NyIGFwcGVuZCBvbmUgJiYKKwltdW5nZV9jciBhcHBlbmQgZGlyL3R3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS0gb25lIGRpci90d28gJiYKKwlkaWZmZXJzPSQoZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCkgJiYKKwl2ZXJib3NlIHRlc3QgLXogIiRkaWZmZXJzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYXV0b2NybGY9dHJ1ZScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCW11bmdlX2NyIHJlbW92ZSBvbmUgJiYKKwltdW5nZV9jciByZW1vdmUgZGlyL3R3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS0gb25lIGRpci90d28gJiYKKwl0ZXN0ICIkb25lIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG9uZSkgJiYKKwl0ZXN0ICIkdHdvIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPGRpci90d28pICYmCisJZGlmZmVycz0kKGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQpICYmCisJdmVyYm9zZSB0ZXN0IC16ICIkZGlmZmVycyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBhdXRvY3JsZj1pbnB1dCcgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwkhIGhhc19jciBvbmUgJiYKKwkhIGhhc19jciBkaXIvdHdvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLSBvbmUgZGlyL3R3byAmJgorCXRlc3QgIiRvbmUiID0gJChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8b25lKSAmJgorCXRlc3QgIiR0d28iID0gJChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8ZGlyL3R3bykgJiYKKwlkaWZmZXJzPSQoZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCkgJiYKKwl2ZXJib3NlIHRlc3QgLXogIiRkaWZmZXJzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAoYXV0b2NybGY9aW5wdXQpJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IHBhdGNoLmZpbGUgJiYKKwl2ZXJib3NlIHRlc3QgIiRwYXRjaGVkIiA9ICIkKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxvbmUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWNhY2hlZCAoYXV0b2NybGY9aW5wdXQpJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IC0tY2FjaGVkIHBhdGNoLmZpbGUgJiYKKwl2ZXJib3NlIHRlc3QgIiRwYXRjaGVkIiA9ICQoZ2l0IHJldi1wYXJzZSA6b25lKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWluZGV4IChhdXRvY3JsZj1pbnB1dCknICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaC5maWxlICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAkKGdpdCByZXYtcGFyc2UgOm9uZSkgJiYKKwl2ZXJib3NlIHRlc3QgIiRwYXRjaGVkIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG9uZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggKGF1dG9jcmxmPXRydWUpJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwlnaXQgYXBwbHkgcGF0Y2guZmlsZSAmJgorCXZlcmJvc2UgdGVzdCAiJHBhdGNoZWQiID0gIiQocmVtb3ZlX2NyIDxvbmUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHBhdGNoIC0tY2FjaGVkIChhdXRvY3JsZj10cnVlKScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IC0tY2FjaGVkIHBhdGNoLmZpbGUgJiYKKwl2ZXJib3NlIHRlc3QgIiRwYXRjaGVkIiA9ICQoZ2l0IHJldi1wYXJzZSA6b25lKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWluZGV4IChhdXRvY3JsZj10cnVlKScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2guZmlsZSAmJgorCXZlcmJvc2UgdGVzdCAiJHBhdGNoZWQiID0gJChnaXQgcmV2LXBhcnNlIDpvbmUpICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAiJChyZW1vdmVfY3IgPG9uZSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGF0dHJpYnV0ZXMgc2F5cyB0d28gaXMgYmluYXJ5JyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwllY2hvICJ0d28gLWNybGYiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCSEgaGFzX2NyIGRpci90d28gJiYKKwl2ZXJib3NlIGhhc19jciBvbmUgJiYKKwkhIGhhc19jciB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBzYXlzIHR3byBpcyBpbnB1dCcgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZWNobyAidHdvIGNybGY9aW5wdXQiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwkhIGhhc19jciBkaXIvdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRhdHRyaWJ1dGVzIHNheXMgdHdvIGFuZCB0aHJlZSBhcmUgdGV4dCcgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZWNobyAidCogY3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCXZlcmJvc2UgaGFzX2NyIGRpci90d28gJiYKKwl2ZXJib3NlIGhhc19jciB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi10cmVlIC5naXRhdHRyaWJ1dGVzICgxKScgJworCisJZWNobyAib25lIC1jcmxmIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb21taXQgLW0gIkFkZCAuZ2l0YXR0cmlidXRlcyIgJiYKKworCXJtIC1yZiB0bXAgb25lIGRpciAuZ2l0YXR0cmlidXRlcyBwYXRjaC5maWxlIHRocmVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCSEgaGFzX2NyIG9uZSAmJgorCXZlcmJvc2UgaGFzX2NyIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLXRyZWUgLmdpdGF0dHJpYnV0ZXMgKDIpJyAnCisKKwlybSAtcmYgdG1wIG9uZSBkaXIgLmdpdGF0dHJpYnV0ZXMgcGF0Y2guZmlsZSB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1xIC11IC1hICYmCisKKwkhIGhhc19jciBvbmUgJiYKKwl2ZXJib3NlIGhhc19jciB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi10cmVlIC5naXRhdHRyaWJ1dGVzICgzKScgJworCisJcm0gLXJmIHRtcCBvbmUgZGlyIC5naXRhdHRyaWJ1dGVzIHBhdGNoLmZpbGUgdGhyZWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSBvbmUgZGlyL3R3byB0aHJlZSAmJgorCisJISBoYXNfY3Igb25lICYmCisJdmVyYm9zZSBoYXNfY3IgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tdHJlZSAuZ2l0YXR0cmlidXRlcyAoNCknICcKKworCXJtIC1yZiB0bXAgb25lIGRpciAuZ2l0YXR0cmlidXRlcyBwYXRjaC5maWxlIHRocmVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLXUgLmdpdGF0dHJpYnV0ZXMgJiYKKworCSEgaGFzX2NyIG9uZSAmJgorCXZlcmJvc2UgaGFzX2NyIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggZXhpc3RpbmcgLmdpdGF0dHJpYnV0ZXMnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuc2FmZWNybGYgJiYKKwllY2hvICIuZmlsZTIgLWNybGZRIiB8IHFfdG9fY3IgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyAiLmZpbGUgLWNybGZRIiB8IHFfdG9fY3IgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJjb250ZW50cyIgPiAuZmlsZSAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgLmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcn4xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2hlbiBkZWxldGluZyAuZ2l0YXR0cmlidXRlcycgJworCisJZ2l0IHJtIC5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiY29udGVudHNRIiB8IHFfdG9fY3IgPiAuZmlsZTIgJiYKKwlnaXQgYWRkIC5maWxlMiAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXJ+MSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwloYXNfY3IgLmZpbGUyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCAuZ2l0YXR0cmlidXRlcyAobXVzdCBub3QgY3Jhc2gpJyAnCisKKwllY2hvICJ0aHJlZSArY3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBkaWZmCisKKycKKyMgU29tZSBtb3JlIHRlc3RzIGhlcmUgdG8gYWRkIG5ldyBhdXRvY3JsZiBmdW5jdGlvbmFsaXR5LgorIyBXZSB3YW50IHRvIGhhdmUgYSBrbm93biBzdGF0ZSBoZXJlLCBzbyBzdGFydCBhIGJpdCBmcm9tIHNjcmF0Y2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dGluZyB1cCBmb3IgbmV3IGF1dG9jcmxmIHRlc3RzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIGZhbHNlICYmCisJcm0gLXJmIC4/Pz8/KiAqICYmCisJZm9yIHcgaW4gSSBhbSBhbGwgTEY7IGRvIGVjaG8gJHc7IGRvbmUgPmFsbGxmICYmCisJZm9yIHcgaW4gT2ggaGVyZSBpcyBDUkxGUSBpbiB0ZXh0OyBkbyBlY2hvICR3OyBkb25lIHwgcV90b19jciA+bWl4ZWQgJiYKKwlmb3IgdyBpbiBJIGFtIGFsbCBDUkxGOyBkbyBlY2hvICR3OyBkb25lIHwgYXBwZW5kX2NyID5hbGxjcmxmICYmCisJZ2l0IGFkZCAtQSAuICYmCisJZ2l0IGNvbW1pdCAtbSAiYWxsbGYsIGFsbGNybGYgYW5kIG1peGVkIG9ubHkiICYmCisJZ2l0IHRhZyAtYSAtbSAibWVzc2FnZSIgYXV0b2NybGYtY2hlY2twb2ludAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBvcnQgbm8gY2hhbmdlIGFmdGVyIHNldHRpbmcgYXV0b2NybGYnICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCXRvdWNoICogJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlcyBhcmUgY2xlYW4gYWZ0ZXIgY2hlY2tvdXQnICcKKwlybSAqICYmCisJZ2l0IGNoZWNrb3V0IC1mICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKworY3JfdG9fUV9ub19OTCAoKSB7CisgICAgdHIgJ1wwMTUnIFEgfCB0ciAtZCAnXDAxMicKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTEYgb25seSBmaWxlIGdldHMgQ1JMRiB3aXRoIGF1dG9jcmxmJyAnCisJdGVzdCAiJChjcl90b19RX25vX05MIDwgYWxsbGYpIiA9ICJJUWFtUWFsbFFMRlEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01peGVkIGZpbGUgaXMgc3RpbGwgbWl4ZWQgd2l0aCBhdXRvY3JsZicgJworCXRlc3QgIiQoY3JfdG9fUV9ub19OTCA8IG1peGVkKSIgPSAiT2hoZXJlaXNDUkxGUWludGV4dCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1JMRiBvbmx5IGZpbGUgaGFzIENSTEYgd2l0aCBhdXRvY3JsZicgJworCXRlc3QgIiQoY3JfdG9fUV9ub19OTCA8IGFsbGNybGYpIiA9ICJJUWFtUWFsbFFDUkxGUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTmV3IENSTEYgZmlsZSBnZXRzIExGIGluIHJlcG8nICcKKwl0ciAtZCAiXDAxNSIgPCBhbGxsZiB8IGFwcGVuZF9jciA+IGFsbGxmMiAmJgorCWdpdCBhZGQgYWxsbGYyICYmCisJZ2l0IGNvbW1pdCAtbSAiYWxsbGYyIGFkZGVkIiAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCXJtICogJiYKKwlnaXQgY2hlY2tvdXQgLWYgJiYKKwl0ZXN0X2NtcCBhbGxsZiBhbGxsZjIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDIxLWNvbnZlcnNpb24uc2ggYi90L3QwMDIxLWNvbnZlcnNpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM2NjRkYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjEtY29udmVyc2lvbi5zaApAQCAtMCwwICsxLDgyMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jsb2IgY29udmVyc2lvbiB2aWEgZ2l0YXR0cmlidXRlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK1RFU1RfUk9PVD0iJFBXRCIKK1BBVEg9JFRFU1RfUk9PVDokUEFUSAorCit3cml0ZV9zY3JpcHQgPDxcRU9GICIkVEVTVF9ST09UL3JvdDEzLnNoIgordHIgXAorICAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgXAorICAnbm9wcXJzdHV2d3h5emFiY2RlZmdoaWprbG1OT1BRUlNUVVZXWFlaQUJDREVGR0hJSktMTScKK0VPRgorCit3cml0ZV9zY3JpcHQgcm90MTMtZmlsdGVyLnBsICIkUEVSTF9QQVRIIiBcCisJPCIkVEVTVF9ESVJFQ1RPUlkiL3QwMDIxL3JvdDEzLWZpbHRlci5wbAorCitnZW5lcmF0ZV9yYW5kb21fY2hhcmFjdGVycyAoKSB7CisJTEVOPSQxCisJTkFNRT0kMgorCXRlc3QtdG9vbCBnZW5yYW5kb20gc29tZS1zZWVkICRMRU4gfAorCQlwZXJsIC1wZSAicy8uL2Nocigob3JkKCQmKSAlIDI2KSArIG9yZCgnYScpKS9zZ2UiID4iJFRFU1RfUk9PVC8kTkFNRSIKK30KKworZmlsZV9zaXplICgpIHsKKwl0ZXN0LXRvb2wgcGF0aC11dGlscyBmaWxlLXNpemUgIiQxIgorfQorCitmaWx0ZXJfZ2l0ICgpIHsKKwlybSAtZiAqLmxvZyAmJgorCWdpdCAiJEAiCit9CisKKyMgQ29tcGFyZSB0d28gZmlsZXMgYW5kIGVuc3VyZSB0aGF0IGBjbGVhbmAgYW5kIGBzbXVkZ2VgIHJlc3BlY3RpdmVseSBhcmUKKyMgY2FsbGVkIGF0IGxlYXN0IG9uY2UgaWYgc3BlY2lmaWVkIGluIHRoZSBgZXhwZWN0YCBmaWxlLiBUaGUgYWN0dWFsCisjIGludm9jYXRpb24gY291bnQgaXMgbm90IHJlbGV2YW50IGJlY2F1c2UgdGhlaXIgbnVtYmVyIGNhbiB2YXJ5LgorIyBjLmYuIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L3htcXFzaHYxOGk4aS5mc2ZAZ2l0c3Rlci5tdHYuY29ycC5nb29nbGUuY29tLwordGVzdF9jbXBfY291bnQgKCkgeworCWV4cGVjdD0kMQorCWFjdHVhbD0kMgorCWZvciBGSUxFIGluICIkZXhwZWN0IiAiJGFjdHVhbCIKKwlkbworCQlzb3J0ICIkRklMRSIgfCB1bmlxIC1jIHwKKwkJc2VkIC1lICJzL14gKlswLTldWzAtOV0qWyAJXSpJTjogL3ggSU46IC8iID4iJEZJTEUudG1wIgorCWRvbmUgJiYKKwl0ZXN0X2NtcCAiJGV4cGVjdC50bXAiICIkYWN0dWFsLnRtcCIgJiYKKwlybSAiJGV4cGVjdC50bXAiICIkYWN0dWFsLnRtcCIKK30KKworIyBDb21wYXJlIHR3byBmaWxlcyBidXQgZXhjbHVkZSBhbGwgYGNsZWFuYCBpbnZvY2F0aW9ucyBiZWNhdXNlIEdpdCBjYW4KKyMgY2FsbCBgY2xlYW5gIHplcm8gb3IgbW9yZSB0aW1lcy4KKyMgYy5mLiBodHRwOi8vbG9yZS5rZXJuZWwub3JnL2dpdC94bXFxc2h2MThpOGkuZnNmQGdpdHN0ZXIubXR2LmNvcnAuZ29vZ2xlLmNvbS8KK3Rlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gKCkgeworCWV4cGVjdD0kMQorCWFjdHVhbD0kMgorCWZvciBGSUxFIGluICIkZXhwZWN0IiAiJGFjdHVhbCIKKwlkbworCQlncmVwIC12ICJJTjogY2xlYW4iICIkRklMRSIgPiIkRklMRS50bXAiCisJZG9uZSAmJgorCXRlc3RfY21wICIkZXhwZWN0LnRtcCIgIiRhY3R1YWwudG1wIiAmJgorCXJtICIkZXhwZWN0LnRtcCIgIiRhY3R1YWwudG1wIgorfQorCisjIENoZWNrIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHR3byBmaWxlcyBhcmUgZXF1YWwgYW5kIHRoYXQgdGhlaXIgcm90MTMgdmVyc2lvbgorIyBpcyBlcXVhbCB0byB0aGUgY29tbWl0dGVkIGNvbnRlbnQuCit0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgKCkgeworCXRlc3RfY21wICIkMSIgIiQyIiAmJgorCXJvdDEzLnNoIDwiJDEiID5leHBlY3RlZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDoiJDIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBmaWx0ZXIucm90MTMuc211ZGdlIC4vcm90MTMuc2ggJiYKKwlnaXQgY29uZmlnIGZpbHRlci5yb3QxMy5jbGVhbiAuL3JvdDEzLnNoICYmCisKKwl7CisJICAgIGVjaG8gIioudCBmaWx0ZXI9cm90MTMiCisJICAgIGVjaG8gIiouaSBpZGVudCIKKwl9ID4uZ2l0YXR0cmlidXRlcyAmJgorCisJeworCSAgICBlY2hvIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0KKwkgICAgZWNobyBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6CisJICAgIGVjaG8gJ1wnJyRJZCQnXCcnCisJfSA+dGVzdCAmJgorCWNhdCB0ZXN0ID50ZXN0LnQgJiYKKwljYXQgdGVzdCA+dGVzdC5vICYmCisJY2F0IHRlc3QgPnRlc3QuaSAmJgorCWdpdCBhZGQgdGVzdCB0ZXN0LnQgdGVzdC5pICYmCisJcm0gLWYgdGVzdCB0ZXN0LnQgdGVzdC5pICYmCisJZ2l0IGNoZWNrb3V0IC0tIHRlc3QgdGVzdC50IHRlc3QuaSAmJgorCisJZWNobyAiY29udGVudC10ZXN0MiIgPnRlc3QyLm8gJiYKKwllY2hvICJjb250ZW50LXRlc3QzIC0gZmlsZW5hbWUgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMiID4idGVzdDMgJ1wnJ3NxJ1wnJyxcJHg9Lm8iCisnCisKK3NjcmlwdD0ncy9eXCRJZDogXChbMC05YS1mXSpcKSBcJC9cMS9wJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGNoZWNrICcKKworCXRlc3RfY21wIHRlc3QubyB0ZXN0ICYmCisJdGVzdF9jbXAgdGVzdC5vIHRlc3QudCAmJgorCisJIyBpZGVudCBzaG91bGQgYmUgc3RyaXBwZWQgaW4gdGhlIHJlcG9zaXRvcnkKKwlnaXQgZGlmZiAtLXJhdyAtLWV4aXQtY29kZSA6dGVzdCA6dGVzdC5pICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDp0ZXN0KSAmJgorCWVtYmVkZGVkPSQoc2VkIC1uZSAiJHNjcmlwdCIgdGVzdC5pKSAmJgorCXRlc3QgInokaWQiID0gInokZW1iZWRkZWQiICYmCisKKwlnaXQgY2F0LWZpbGUgYmxvYiA6dGVzdC50ID50ZXN0LnIgJiYKKworCS4vcm90MTMuc2ggPHRlc3QubyA+dGVzdC50ICYmCisJdGVzdF9jbXAgdGVzdC5yIHRlc3QudAorJworCisjIElmIGFuIGV4cGFuZGVkIGlkZW50IGV2ZXIgZ2V0cyBpbnRvIHRoZSByZXBvc2l0b3J5LCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0CisjIGl0IGlzIGNvbGxhcHNlZCBiZWZvcmUgYmVpbmcgZXhwYW5kZWQgYWdhaW4gb24gY2hlY2tvdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgZXhwYW5kZWRfaW5fcmVwbyAnCisJeworCQllY2hvICJGaWxlIHdpdGggZXhwYW5kZWQga2V5d29yZHMiCisJCWVjaG8gIlwkSWRcJCIKKwkJZWNobyAiXCRJZDpcJCIKKwkJZWNobyAiXCRJZDogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBcJCIKKwkJZWNobyAiXCRJZDogTm9TcGFjZUF0RW5kXCQiCisJCWVjaG8gIlwkSWQ6Tm9TcGFjZUF0RnJvbnQgXCQiCisJCWVjaG8gIlwkSWQ6Tm9TcGFjZUF0RWl0aGVyRW5kXCQiCisJCWVjaG8gIlwkSWQ6IE5vVGVybWluYXRpbmdTeW1ib2wiCisJCWVjaG8gIlwkSWQ6IEZvcmVpZ24gQ29tbWl0IFdpdGggU3BhY2VzIFwkIgorCX0gPmV4cGFuZGVkLWtleXdvcmRzLjAgJiYKKworCXsKKwkJY2F0IGV4cGFuZGVkLWtleXdvcmRzLjAgJiYKKwkJcHJpbnRmICJcJElkOiBOb1Rlcm1pbmF0aW5nU3ltYm9sQXRFT0YiCisJfSA+ZXhwYW5kZWQta2V5d29yZHMgJiYKKwljYXQgZXhwYW5kZWQta2V5d29yZHMgPmV4cGFuZGVkLWtleXdvcmRzLWNybGYgJiYKKwlnaXQgYWRkIGV4cGFuZGVkLWtleXdvcmRzIGV4cGFuZGVkLWtleXdvcmRzLWNybGYgJiYKKwlnaXQgY29tbWl0IC1tICJGaWxlIHdpdGgga2V5d29yZHMgZXhwYW5kZWQiICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpleHBhbmRlZC1rZXl3b3JkcykgJiYKKworCXsKKwkJZWNobyAiRmlsZSB3aXRoIGV4cGFuZGVkIGtleXdvcmRzIgorCQllY2hvICJcJElkOiAkaWQgXCQiCisJCWVjaG8gIlwkSWQ6ICRpZCBcJCIKKwkJZWNobyAiXCRJZDogJGlkIFwkIgorCQllY2hvICJcJElkOiAkaWQgXCQiCisJCWVjaG8gIlwkSWQ6ICRpZCBcJCIKKwkJZWNobyAiXCRJZDogJGlkIFwkIgorCQllY2hvICJcJElkOiBOb1Rlcm1pbmF0aW5nU3ltYm9sIgorCQllY2hvICJcJElkOiBGb3JlaWduIENvbW1pdCBXaXRoIFNwYWNlcyBcJCIKKwl9ID5leHBlY3RlZC1vdXRwdXQuMCAmJgorCXsKKwkJY2F0IGV4cGVjdGVkLW91dHB1dC4wICYmCisJCXByaW50ZiAiXCRJZDogTm9UZXJtaW5hdGluZ1N5bWJvbEF0RU9GIgorCX0gPmV4cGVjdGVkLW91dHB1dCAmJgorCXsKKwkJYXBwZW5kX2NyIDxleHBlY3RlZC1vdXRwdXQuMCAmJgorCQlwcmludGYgIlwkSWQ6IE5vVGVybWluYXRpbmdTeW1ib2xBdEVPRiIKKwl9ID5leHBlY3RlZC1vdXRwdXQtY3JsZiAmJgorCXsKKwkJZWNobyAiZXhwYW5kZWQta2V5d29yZHMgaWRlbnQiCisJCWVjaG8gImV4cGFuZGVkLWtleXdvcmRzLWNybGYgaWRlbnQgdGV4dCBlb2w9Y3JsZiIKKwl9ID4+LmdpdGF0dHJpYnV0ZXMgJiYKKworCXJtIC1mIGV4cGFuZGVkLWtleXdvcmRzIGV4cGFuZGVkLWtleXdvcmRzLWNybGYgJiYKKworCWdpdCBjaGVja291dCAtLSBleHBhbmRlZC1rZXl3b3JkcyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLW91dHB1dCBleHBhbmRlZC1rZXl3b3JkcyAmJgorCisJZ2l0IGNoZWNrb3V0IC0tIGV4cGFuZGVkLWtleXdvcmRzLWNybGYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1vdXRwdXQtY3JsZiBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmCisnCisKKyMgVGhlIHVzZSBvZiAlZiBpbiBhIGZpbHRlciBkZWZpbml0aW9uIGlzIGV4cGFuZGVkIHRvIHRoZSBwYXRoIHRvCisjIHRoZSBmaWxlbmFtZSBiZWluZyBzbXVkZ2VkIG9yIGNsZWFuZWQuICBJdCBtdXN0IGJlIHNoZWxsIGVzY2FwZWQuCisjIEZpcnN0LCBzZXQgdXAgc29tZSBpbnRlcmVzdGluZyBmaWxlIG5hbWVzIGFuZCBwZXQgdGhlbSBpbgorIyAuZ2l0YXR0cmlidXRlcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlciBzaGVsbC1lc2NhcGVkIGZpbGVuYW1lcycgJworCWNhdCA+YXJnYy5zaCA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJY2F0ID4vZGV2L251bGwKKwllY2hvIGFyZ2M6IFwkIyAiXCRAIgorCUVPRgorCW5vcm1hbD1uYW1lLW5vLW1hZ2ljICYmCisJc3BlY2lhbD0ibmFtZSAgd2l0aCAnXCcnc3EnXCcnIGFuZCBcJHgiICYmCisJZWNobyBzb21lIHRlc3QgdGV4dCA+IiRub3JtYWwiICYmCisJZWNobyBzb21lIHRlc3QgdGV4dCA+IiRzcGVjaWFsIiAmJgorCWdpdCBhZGQgIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJhZGQgZmlsZXMiICYmCisJZWNobyAibmFtZSogZmlsdGVyPWFyZ2MiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJIyBkZWxldGUgdGhlIGZpbGVzIGFuZCBjaGVjayB0aGVtIG91dCBhZ2FpbiwgdXNpbmcgYSBzbXVkZ2UgZmlsdGVyCisJIyB0aGF0IHdpbGwgY291bnQgdGhlIGFyZ3MgYW5kIGVjaG8gdGhlIGNvbW1hbmQtbGluZSBiYWNrIHRvIHVzCisJdGVzdF9jb25maWcgZmlsdGVyLmFyZ2Muc211ZGdlICJzaCAuL2FyZ2Muc2ggJWYiICYmCisJcm0gIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKwlnaXQgY2hlY2tvdXQgLS0gIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKworCSMgbWFrZSBzdXJlIGFyZ2Muc2ggY291bnRlZCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3MKKwllY2hvICJhcmdjOiAxICRub3JtYWwiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRub3JtYWwiICYmCisJZWNobyAiYXJnYzogMSAkc3BlY2lhbCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAiJHNwZWNpYWwiICYmCisKKwkjIGRvIHRoZSBzYW1lIHRoaW5nLCBidXQgd2l0aCBtb3JlIGFyZ3MgaW4gdGhlIGZpbHRlciBleHByZXNzaW9uCisJdGVzdF9jb25maWcgZmlsdGVyLmFyZ2Muc211ZGdlICJzaCAuL2FyZ2Muc2ggJWYgLS1teS1leHRyYS1hcmciICYmCisJcm0gIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKwlnaXQgY2hlY2tvdXQgLS0gIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKworCSMgbWFrZSBzdXJlIGFyZ2Muc2ggY291bnRlZCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3MKKwllY2hvICJhcmdjOiAyICRub3JtYWwgLS1teS1leHRyYS1hcmciID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRub3JtYWwiICYmCisJZWNobyAiYXJnYzogMiAkc3BlY2lhbCAtLW15LWV4dHJhLWFyZyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAiJHNwZWNpYWwiICYmCisJOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXF1aXJlZCBmaWx0ZXIgc2hvdWxkIGZpbHRlciBkYXRhJyAnCisJdGVzdF9jb25maWcgZmlsdGVyLnJlcXVpcmVkLnNtdWRnZSAuL3JvdDEzLnNoICYmCisJdGVzdF9jb25maWcgZmlsdGVyLnJlcXVpcmVkLmNsZWFuIC4vcm90MTMuc2ggJiYKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIucmVxdWlyZWQucmVxdWlyZWQgdHJ1ZSAmJgorCisJZWNobyAiKi5yIGZpbHRlcj1yZXF1aXJlZCIgPi5naXRhdHRyaWJ1dGVzICYmCisKKwljYXQgdGVzdC5vID50ZXN0LnIgJiYKKwlnaXQgYWRkIHRlc3QuciAmJgorCisJcm0gLWYgdGVzdC5yICYmCisJZ2l0IGNoZWNrb3V0IC0tIHRlc3QuciAmJgorCXRlc3RfY21wIHRlc3QubyB0ZXN0LnIgJiYKKworCS4vcm90MTMuc2ggPHRlc3QubyA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6dGVzdC5yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWlyZWQgZmlsdGVyIHNtdWRnZSBmYWlsdXJlJyAnCisJdGVzdF9jb25maWcgZmlsdGVyLmZhaWxzbXVkZ2Uuc211ZGdlIGZhbHNlICYmCisJdGVzdF9jb25maWcgZmlsdGVyLmZhaWxzbXVkZ2UuY2xlYW4gY2F0ICYmCisJdGVzdF9jb25maWcgZmlsdGVyLmZhaWxzbXVkZ2UucmVxdWlyZWQgdHJ1ZSAmJgorCisJZWNobyAiKi5mcyBmaWx0ZXI9ZmFpbHNtdWRnZSIgPi5naXRhdHRyaWJ1dGVzICYmCisKKwllY2hvIHRlc3QgPnRlc3QuZnMgJiYKKwlnaXQgYWRkIHRlc3QuZnMgJiYKKwlybSAtZiB0ZXN0LmZzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tIHRlc3QuZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWlyZWQgZmlsdGVyIGNsZWFuIGZhaWx1cmUnICcKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuZmFpbGNsZWFuLnNtdWRnZSBjYXQgJiYKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuZmFpbGNsZWFuLmNsZWFuIGZhbHNlICYmCisJdGVzdF9jb25maWcgZmlsdGVyLmZhaWxjbGVhbi5yZXF1aXJlZCB0cnVlICYmCisKKwllY2hvICIqLmZjIGZpbHRlcj1mYWlsY2xlYW4iID4uZ2l0YXR0cmlidXRlcyAmJgorCisJZWNobyB0ZXN0ID50ZXN0LmZjICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCB0ZXN0LmZjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlcmluZyBsYXJnZSBpbnB1dCB0byBzbWFsbCBvdXRwdXQgc2hvdWxkIHVzZSBsaXR0bGUgbWVtb3J5JyAnCisJdGVzdF9jb25maWcgZmlsdGVyLmRldm51bGwuY2xlYW4gImNhdCA+L2Rldi9udWxsIiAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5kZXZudWxsLnJlcXVpcmVkIHRydWUgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMzApOyBkbyBwcmludGYgIiUxMDQ4NTc2ZCIgMTsgZG9uZSA+MzBNQiAmJgorCWVjaG8gIjMwTUIgZmlsdGVyPWRldm51bGwiID4uZ2l0YXR0cmlidXRlcyAmJgorCUdJVF9NTUFQX0xJTUlUPTFtIEdJVF9BTExPQ19MSU1JVD0xbSBnaXQgYWRkIDMwTUIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyIHRoYXQgZG9lcyBub3QgcmVhZCBpcyBmaW5lJyAnCisJdGVzdC10b29sIGdlbnJhbmRvbSBmb28gJCgoMTI4ICogMTAyNCArIDEpKSA+YmlnICYmCisJZWNobyAiYmlnIGZpbHRlcj1lcGlwZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9jb25maWcgZmlsdGVyLmVwaXBlLmNsZWFuICJlY2hvIHh5enp5IiAmJgorCWdpdCBhZGQgYmlnICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOmJpZyA+YWN0dWFsICYmCisJZWNobyB4eXp6eSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYUEVOU0lWRSAnZmlsdGVyIGxhcmdlIGZpbGUnICcKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIubGFyZ2VmaWxlLnNtdWRnZSBjYXQgJiYKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIubGFyZ2VmaWxlLmNsZWFuIGNhdCAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAyMDQ4KTsgZG8gcHJpbnRmICIlMTA0ODU3NmQiIDE7IGRvbmUgPjJHQiAmJgorCWVjaG8gIjJHQiBmaWx0ZXI9bGFyZ2VmaWxlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIDJHQiAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwlybSAtZiAyR0IgJiYKKwlnaXQgY2hlY2tvdXQgLS0gMkdCIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmaWx0ZXI6IGNsZWFuIGVtcHR5IGZpbGUiICcKKwl0ZXN0X2NvbmZpZyBmaWx0ZXIuaW4tcmVwby1oZWFkZXIuY2xlYW4gICJlY2hvIGNsZWFuZWQgJiYgY2F0IiAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5pbi1yZXBvLWhlYWRlci5zbXVkZ2UgInNlZCAxZCIgJiYKKworCWVjaG8gImVtcHR5LWluLXdvcmt0cmVlICAgIGZpbHRlcj1pbi1yZXBvLWhlYWRlciIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCT5lbXB0eS1pbi13b3JrdHJlZSAmJgorCisJZWNobyBjbGVhbmVkID5leHBlY3RlZCAmJgorCWdpdCBhZGQgZW1wdHktaW4td29ya3RyZWUgJiYKKwlnaXQgc2hvdyA6ZW1wdHktaW4td29ya3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmaWx0ZXI6IHNtdWRnZSBlbXB0eSBmaWxlIiAnCisJdGVzdF9jb25maWcgZmlsdGVyLmVtcHR5LWluLXJlcG8uY2xlYW4gImNhdCA+L2Rldi9udWxsIiAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5lbXB0eS1pbi1yZXBvLnNtdWRnZSAiZWNobyBzbXVkZ2VkICYmIGNhdCIgJiYKKworCWVjaG8gImVtcHR5LWluLXJlcG8gZmlsdGVyPWVtcHR5LWluLXJlcG8iID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvIGRlYWQgZGF0YSB3YWxraW5nID5lbXB0eS1pbi1yZXBvICYmCisJZ2l0IGFkZCBlbXB0eS1pbi1yZXBvICYmCisKKwllY2hvIHNtdWRnZWQgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PWZpbHRlcmVkLSBlbXB0eS1pbi1yZXBvICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsdGVyZWQtZW1wdHktaW4tcmVwbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIGZpbHRlciB3aXRoIGVtcHR5IG92ZXJyaWRlJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5kaXNhYmxlLnNtdWRnZSBmYWxzZSAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuZGlzYWJsZS5jbGVhbiBmYWxzZSAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5kaXNhYmxlLnNtdWRnZSBmYWxzZSAmJgorCXRlc3RfY29uZmlnIGZpbHRlci5kaXNhYmxlLmNsZWFuIGZhbHNlICYmCisKKwllY2hvICIqLmRpc2FibGUgZmlsdGVyPWRpc2FibGUiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJZWNobyB0ZXN0ID50ZXN0LmRpc2FibGUgJiYKKwlnaXQgLWMgZmlsdGVyLmRpc2FibGUuY2xlYW49IGFkZCB0ZXN0LmRpc2FibGUgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJcm0gLWYgdGVzdC5kaXNhYmxlICYmCisJZ2l0IC1jIGZpbHRlci5kaXNhYmxlLnNtdWRnZT0gY2hlY2tvdXQgLS0gdGVzdC5kaXNhYmxlIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGRvZXMgbm90IHJldXNlIHdvcmt0cmVlIGZpbGVzIHRoYXQgbmVlZCBjbGVhbmluZycgJworCXRlc3RfY29uZmlnIGZpbHRlci5jb3VudGVyLmNsZWFuICJlY2hvIC4gPj5jb3VudDsgc2VkIHMvXi9jbGVhbjovIiAmJgorCWVjaG8gImZpbGUgZmlsdGVyPWNvdW50ZXIiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfY29tbWl0IG9uZSBmaWxlICYmCisJdGVzdF9jb21taXQgdHdvIGZpbGUgJiYKKworCT5jb3VudCAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY291bnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZXF1aXJlZCBwcm9jZXNzIGZpbHRlciBzaG91bGQgZmlsdGVyIGRhdGEnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBkZWJ1Zy5sb2cgY2xlYW4gc211ZGdlIiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucmVxdWlyZWQgdHJ1ZSAmJgorCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCisJCWVjaG8gIiouciBmaWx0ZXI9cHJvdG9jb2wiID4uZ2l0YXR0cmlidXRlcyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdCBjb21taXQgMSIgJiYKKwkJZ2l0IGJyYW5jaCBlbXB0eS1icmFuY2ggJiYKKworCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Mi5vIiB0ZXN0Mi5yICYmCisJCW1rZGlyIHRlc3RzdWJkaXIgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdDMgJ1wnJ3NxJ1wnJyxcJHg9Lm8iICJ0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yIiAmJgorCQk+dGVzdDQtZW1wdHkuciAmJgorCisJCVM9JChmaWxlX3NpemUgdGVzdC5yKSAmJgorCQlTMj0kKGZpbGVfc2l6ZSB0ZXN0Mi5yKSAmJgorCQlTMz0kKGZpbGVfc2l6ZSAidGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciIpICYmCisKKwkJZmlsdGVyX2dpdCBhZGQgLiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IGNsZWFuIHRlc3QuciAkUyBbT0tdIC0tIE9VVDogJFMgLiBbT0tdCisJCQlJTjogY2xlYW4gdGVzdDIuciAkUzIgW09LXSAtLSBPVVQ6ICRTMiAuIFtPS10KKwkJCUlOOiBjbGVhbiB0ZXN0NC1lbXB0eS5yIDAgW09LXSAtLSBPVVQ6IDAgIFtPS10KKwkJCUlOOiBjbGVhbiB0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yICRTMyBbT0tdIC0tIE9VVDogJFMzIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfY291bnQgZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCWdpdCBjb21taXQgLW0gInRlc3QgY29tbWl0IDIiICYmCisJCXJtIC1mIHRlc3QyLnIgInRlc3RzdWJkaXIvdGVzdDMgJ1wnJ3NxJ1wnJyxcJHg9LnIiICYmCisKKwkJZmlsdGVyX2dpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgLiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yICRTMyBbT0tdIC0tIE9VVDogJFMzIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfZXhjbHVkZV9jbGVhbiBleHBlY3RlZC5sb2cgZGVidWcubG9nICYmCisKKwkJIyBNYWtlIHN1cmUgdGhhdCB0aGUgZmlsZSBhcHBlYXJzIGRpcnR5LCBzbyBjaGVja291dCBiZWxvdyBoYXMgdG8KKwkJIyBydW4gdGhlIGNvbmZpZ3VyZWQgZmlsdGVyLgorCQl0b3VjaCB0ZXN0LnIgJiYKKwkJZmlsdGVyX2dpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgZW1wdHktYnJhbmNoICYmCisJCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCQkJU1RBUlQKKwkJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCQlJTjogY2xlYW4gdGVzdC5yICRTIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCWZpbHRlcl9naXQgY2hlY2tvdXQgLS1xdWlldCAtLW5vLXByb2dyZXNzIG1hc3RlciAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IHNtdWRnZSB0ZXN0LnIgJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0NC1lbXB0eS5yIDAgW09LXSAtLSBPVVQ6IDAgIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdHN1YmRpci90ZXN0MyAnXCcnc3EnXCcnLFwkeD0uciAkUzMgW09LXSAtLSBPVVQ6ICRTMyAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdDIubyIgdGVzdDIuciAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdDMgJ1wnJ3NxJ1wnJyxcJHg9Lm8iICJ0ZXN0c3ViZGlyL3Rlc3QzICdcJydzcSdcJycsXCR4PS5yIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZXF1aXJlZCBwcm9jZXNzIGZpbHRlciB0YWtlcyBwcmVjZWRlbmNlJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5jbGVhbiBmYWxzZSAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucHJvY2VzcyAicm90MTMtZmlsdGVyLnBsIGRlYnVnLmxvZyBjbGVhbiIgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnJlcXVpcmVkIHRydWUgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LnIgJiYKKwkJUz0kKGZpbGVfc2l6ZSB0ZXN0LnIpICYmCisKKwkJIyBDaGVjayB0aGF0IHRoZSBwcm9jZXNzIGZpbHRlciBpcyBpbnZva2VkIGhlcmUKKwkJZmlsdGVyX2dpdCBhZGQgLiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IGNsZWFuIHRlc3QuciAkUyBbT0tdIC0tIE9VVDogJFMgLiBbT0tdCisJCQlTVE9QCisJCUVPRgorCQl0ZXN0X2NtcF9jb3VudCBleHBlY3RlZC5sb2cgZGVidWcubG9nCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3JlcXVpcmVkIHByb2Nlc3MgZmlsdGVyIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yICJjbGVhbiIgb3BlcmF0aW9uIG9ubHknICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBkZWJ1Zy5sb2cgY2xlYW4iICYmCisJcm0gLXJmIHJlcG8gJiYKKwlta2RpciByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisKKwkJZWNobyAiKi5yIGZpbHRlcj1wcm90b2NvbCIgPi5naXRhdHRyaWJ1dGVzICYmCisJCWNwICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5yICYmCisJCVM9JChmaWxlX3NpemUgdGVzdC5yKSAmJgorCisJCWZpbHRlcl9naXQgYWRkIC4gJiYKKwkJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBjbGVhbiB0ZXN0LnIgJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfY291bnQgZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCXJtIHRlc3QuciAmJgorCisJCWZpbHRlcl9naXQgY2hlY2tvdXQgLS1xdWlldCAtLW5vLXByb2dyZXNzIC4gJiYKKwkJIyBJZiB0aGUgZmlsdGVyIHdvdWxkIGJlIHVzZWQgZm9yICJzbXVkZ2UiLCB0b28sIHdlIHdvdWxkIHNlZQorCQkjICJJTjogc211ZGdlIHRlc3QuciA1NyBbT0tdIC0tIE9VVDogNTcgLiBbT0tdIiBoZXJlCisJCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCQkJU1RBUlQKKwkJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCQlTVE9QCisJCUVPRgorCQl0ZXN0X2NtcF9leGNsdWRlX2NsZWFuIGV4cGVjdGVkLmxvZyBkZWJ1Zy5sb2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncmVxdWlyZWQgcHJvY2VzcyBmaWx0ZXIgc2hvdWxkIHByb2Nlc3MgbXVsdGlwbGUgcGFja2V0cycgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucHJvY2VzcyAicm90MTMtZmlsdGVyLnBsIGRlYnVnLmxvZyBjbGVhbiBzbXVkZ2UiICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5yZXF1aXJlZCB0cnVlICYmCisKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQkjIEdlbmVyYXRlIGRhdGEgcmVxdWlyaW5nIDEsIDIsIDMgcGFja2V0cworCQlTPTY1NTE2ICYmICMgUEtUTElORV9EQVRBX01BWExFTiAtPiBNYXhpbWFsIHNpemUgb2YgYSBwYWNrZXQKKwkJZ2VuZXJhdGVfcmFuZG9tX2NoYXJhY3RlcnMgJCgoJFMgICAgKSkgMXBrdF8xX18uZmlsZSAmJgorCQlnZW5lcmF0ZV9yYW5kb21fY2hhcmFjdGVycyAkKCgkUyAgKzEpKSAycGt0XzErMS5maWxlICYmCisJCWdlbmVyYXRlX3JhbmRvbV9jaGFyYWN0ZXJzICQoKCRTKjItMSkpIDJwa3RfMi0xLmZpbGUgJiYKKwkJZ2VuZXJhdGVfcmFuZG9tX2NoYXJhY3RlcnMgJCgoJFMqMiAgKSkgMnBrdF8yX18uZmlsZSAmJgorCQlnZW5lcmF0ZV9yYW5kb21fY2hhcmFjdGVycyAkKCgkUyoyKzEpKSAzcGt0XzIrMS5maWxlICYmCisKKwkJZm9yIEZJTEUgaW4gIiRURVNUX1JPT1QiLyouZmlsZQorCQlkbworCQkJY3AgIiRGSUxFIiAuICYmCisJCQlyb3QxMy5zaCA8IiRGSUxFIiA+IiRGSUxFLnJvdDEzIgorCQlkb25lICYmCisKKwkJZWNobyAiKi5maWxlIGZpbHRlcj1wcm90b2NvbCIgPi5naXRhdHRyaWJ1dGVzICYmCisJCWZpbHRlcl9naXQgYWRkICouZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IGNsZWFuIDFwa3RfMV9fLmZpbGUgJCgoJFMgICAgKSkgW09LXSAtLSBPVVQ6ICQoKCRTICAgICkpIC4gW09LXQorCQkJSU46IGNsZWFuIDJwa3RfMSsxLmZpbGUgJCgoJFMgICsxKSkgW09LXSAtLSBPVVQ6ICQoKCRTICArMSkpIC4uIFtPS10KKwkJCUlOOiBjbGVhbiAycGt0XzItMS5maWxlICQoKCRTKjItMSkpIFtPS10gLS0gT1VUOiAkKCgkUyoyLTEpKSAuLiBbT0tdCisJCQlJTjogY2xlYW4gMnBrdF8yX18uZmlsZSAkKCgkUyoyICApKSBbT0tdIC0tIE9VVDogJCgoJFMqMiAgKSkgLi4gW09LXQorCQkJSU46IGNsZWFuIDNwa3RfMisxLmZpbGUgJCgoJFMqMisxKSkgW09LXSAtLSBPVVQ6ICQoKCRTKjIrMSkpIC4uLiBbT0tdCisJCQlTVE9QCisJCUVPRgorCQl0ZXN0X2NtcF9jb3VudCBleHBlY3RlZC5sb2cgZGVidWcubG9nICYmCisKKwkJcm0gLWYgKi5maWxlICYmCisKKwkJZmlsdGVyX2dpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgLS0gKi5maWxlICYmCisJCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCQkJU1RBUlQKKwkJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCQlJTjogc211ZGdlIDFwa3RfMV9fLmZpbGUgJCgoJFMgICAgKSkgW09LXSAtLSBPVVQ6ICQoKCRTICAgICkpIC4gW09LXQorCQkJSU46IHNtdWRnZSAycGt0XzErMS5maWxlICQoKCRTICArMSkpIFtPS10gLS0gT1VUOiAkKCgkUyAgKzEpKSAuLiBbT0tdCisJCQlJTjogc211ZGdlIDJwa3RfMi0xLmZpbGUgJCgoJFMqMi0xKSkgW09LXSAtLSBPVVQ6ICQoKCRTKjItMSkpIC4uIFtPS10KKwkJCUlOOiBzbXVkZ2UgMnBrdF8yX18uZmlsZSAkKCgkUyoyICApKSBbT0tdIC0tIE9VVDogJCgoJFMqMiAgKSkgLi4gW09LXQorCQkJSU46IHNtdWRnZSAzcGt0XzIrMS5maWxlICQoKCRTKjIrMSkpIFtPS10gLS0gT1VUOiAkKCgkUyoyKzEpKSAuLi4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfZXhjbHVkZV9jbGVhbiBleHBlY3RlZC5sb2cgZGVidWcubG9nICYmCisKKwkJZm9yIEZJTEUgaW4gKi5maWxlCisJCWRvCisJCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvJEZJTEUiICRGSUxFCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncmVxdWlyZWQgcHJvY2VzcyBmaWx0ZXIgd2l0aCBjbGVhbiBlcnJvciBzaG91bGQgZmFpbCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucHJvY2VzcyAicm90MTMtZmlsdGVyLnBsIGRlYnVnLmxvZyBjbGVhbiBzbXVkZ2UiICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5yZXF1aXJlZCB0cnVlICYmCisJcm0gLXJmIHJlcG8gJiYKKwlta2RpciByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisKKwkJZWNobyAiKi5yIGZpbHRlcj1wcm90b2NvbCIgPi5naXRhdHRyaWJ1dGVzICYmCisKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LnIgJiYKKwkJZWNobyAidGhpcyBpcyBnb2luZyB0byBmYWlsIiA+Y2xlYW4td3JpdGUtZmFpbC5yICYmCisJCWVjaG8gImNvbnRlbnQtdGVzdDMtc3ViZGlyIiA+dGVzdDMuciAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwcm9jZXNzIGZpbHRlciBzaG91bGQgcmVzdGFydCBhZnRlciB1bmV4cGVjdGVkIHdyaXRlIGZhaWx1cmUnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBkZWJ1Zy5sb2cgY2xlYW4gc211ZGdlIiAmJgorCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCisJCWVjaG8gIiouciBmaWx0ZXI9cHJvdG9jb2wiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJCWNwICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5yICYmCisJCWNwICIkVEVTVF9ST09UL3Rlc3QyLm8iIHRlc3QyLnIgJiYKKwkJZWNobyAidGhpcyBpcyBnb2luZyB0byBmYWlsIiA+c211ZGdlLXdyaXRlLWZhaWwubyAmJgorCQljcCBzbXVkZ2Utd3JpdGUtZmFpbC5vIHNtdWRnZS13cml0ZS1mYWlsLnIgJiYKKworCQlTPSQoZmlsZV9zaXplIHRlc3QucikgJiYKKwkJUzI9JChmaWxlX3NpemUgdGVzdDIucikgJiYKKwkJU0Y9JChmaWxlX3NpemUgc211ZGdlLXdyaXRlLWZhaWwucikgJiYKKworCQlnaXQgYWRkIC4gJiYKKwkJcm0gLWYgKi5yICYmCisKKwkJcm0gLWYgZGVidWcubG9nICYmCisJCWdpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgLiAyPmdpdC1zdGRlcnIubG9nICYmCisKKwkJZ3JlcCAic211ZGdlIHdyaXRlIGVycm9yIGF0IiBnaXQtc3RkZXJyLmxvZyAmJgorCQl0ZXN0X2kxOG5ncmVwICJlcnJvcjogZXh0ZXJuYWwgZmlsdGVyIiBnaXQtc3RkZXJyLmxvZyAmJgorCisJCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCQkJU1RBUlQKKwkJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCQlJTjogc211ZGdlIHNtdWRnZS13cml0ZS1mYWlsLnIgJFNGIFtPS10gLS0gW1dSSVRFIEZBSUxdCisJCQlTVEFSVAorCQkJaW5pdCBoYW5kc2hha2UgY29tcGxldGUKKwkJCUlOOiBzbXVkZ2UgdGVzdC5yICRTIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJCUlOOiBzbXVkZ2UgdGVzdDIuciAkUzIgW09LXSAtLSBPVVQ6ICRTMiAuIFtPS10KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdDIubyIgdGVzdDIuciAmJgorCisJCSMgU211ZGdlIGZhaWxlZAorCQkhIHRlc3RfY21wIHNtdWRnZS13cml0ZS1mYWlsLm8gc211ZGdlLXdyaXRlLWZhaWwuciAmJgorCQlyb3QxMy5zaCA8c211ZGdlLXdyaXRlLWZhaWwubyA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgOnNtdWRnZS13cml0ZS1mYWlsLnIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncHJvY2VzcyBmaWx0ZXIgc2hvdWxkIG5vdCBiZSByZXN0YXJ0ZWQgaWYgaXQgc2lnbmFscyBhbiBlcnJvcicgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucHJvY2VzcyAicm90MTMtZmlsdGVyLnBsIGRlYnVnLmxvZyBjbGVhbiBzbXVkZ2UiICYmCisJcm0gLXJmIHJlcG8gJiYKKwlta2RpciByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisKKwkJZWNobyAiKi5yIGZpbHRlcj1wcm90b2NvbCIgPi5naXRhdHRyaWJ1dGVzICYmCisKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LnIgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdDIubyIgdGVzdDIuciAmJgorCQllY2hvICJ0aGlzIHdpbGwgY2F1c2UgYW4gZXJyb3IiID5lcnJvci5vICYmCisJCWNwIGVycm9yLm8gZXJyb3IuciAmJgorCisJCVM9JChmaWxlX3NpemUgdGVzdC5yKSAmJgorCQlTMj0kKGZpbGVfc2l6ZSB0ZXN0Mi5yKSAmJgorCQlTRT0kKGZpbGVfc2l6ZSBlcnJvci5yKSAmJgorCisJCWdpdCBhZGQgLiAmJgorCQlybSAtZiAqLnIgJiYKKworCQlmaWx0ZXJfZ2l0IGNoZWNrb3V0IC0tcXVpZXQgLS1uby1wcm9ncmVzcyAuICYmCisJCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCQkJU1RBUlQKKwkJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCQlJTjogc211ZGdlIGVycm9yLnIgJFNFIFtPS10gLS0gW0VSUk9SXQorCQkJSU46IHNtdWRnZSB0ZXN0LnIgJFMgW09LXSAtLSBPVVQ6ICRTIC4gW09LXQorCQkJSU46IHNtdWRnZSB0ZXN0Mi5yICRTMiBbT0tdIC0tIE9VVDogJFMyIC4gW09LXQorCQkJU1RPUAorCQlFT0YKKwkJdGVzdF9jbXBfZXhjbHVkZV9jbGVhbiBleHBlY3RlZC5sb2cgZGVidWcubG9nICYmCisKKwkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5yICYmCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Mi5vIiB0ZXN0Mi5yICYmCisJCXRlc3RfY21wIGVycm9yLm8gZXJyb3IucgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwcm9jZXNzIGZpbHRlciBhYm9ydCBzdG9wcyBwcm9jZXNzaW5nIG9mIGFsbCBmdXJ0aGVyIGZpbGVzJyAnCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5wcm90b2NvbC5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgZGVidWcubG9nIGNsZWFuIHNtdWRnZSIgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Mi5vIiB0ZXN0Mi5yICYmCisJCWVjaG8gImVycm9yIHRoaXMgYmxvYiBhbmQgYWxsIGZ1dHVyZSBibG9icyIgPmFib3J0Lm8gJiYKKwkJY3AgYWJvcnQubyBhYm9ydC5yICYmCisKKwkJU0E9JChmaWxlX3NpemUgYWJvcnQucikgJiYKKworCQlnaXQgYWRkIC4gJiYKKwkJcm0gLWYgKi5yICYmCisKKwkJIyBOb3RlOiBUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IEdpdCBmaWx0ZXJzIGZpbGVzIGluIGFscGhhYmV0aWNhbAorCQkjIG9yZGVyICgiYWJvcnQuciIgYmVmb3JlICJ0ZXN0LnIiKS4KKwkJZmlsdGVyX2dpdCBjaGVja291dCAtLXF1aWV0IC0tbm8tcHJvZ3Jlc3MgLiAmJgorCQljYXQgPmV4cGVjdGVkLmxvZyA8PC1FT0YgJiYKKwkJCVNUQVJUCisJCQlpbml0IGhhbmRzaGFrZSBjb21wbGV0ZQorCQkJSU46IHNtdWRnZSBhYm9ydC5yICRTQSBbT0tdIC0tIFtBQk9SVF0KKwkJCVNUT1AKKwkJRU9GCisJCXRlc3RfY21wX2V4Y2x1ZGVfY2xlYW4gZXhwZWN0ZWQubG9nIGRlYnVnLmxvZyAmJgorCisJCXRlc3RfY21wICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC5yICYmCisJCXRlc3RfY21wICIkVEVTVF9ST09UL3Rlc3QyLm8iIHRlc3QyLnIgJiYKKwkJdGVzdF9jbXAgYWJvcnQubyBhYm9ydC5yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ludmFsaWQgcHJvY2VzcyBmaWx0ZXIgbXVzdCBmYWlsIChhbmQgbm90IGhhbmchKScgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIucHJvdG9jb2wucHJvY2VzcyBjYXQgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLnByb3RvY29sLnJlcXVpcmVkIHRydWUgJiYKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKworCQllY2hvICIqLnIgZmlsdGVyPXByb3RvY29sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC4gMj5naXQtc3RkZXJyLmxvZyAmJgorCQlncmVwICJleHBlY3RlZCBnaXQtZmlsdGVyLXNlcnZlciIgZ2l0LXN0ZGVyci5sb2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGVsYXllZCBjaGVja291dCBpbiBwcm9jZXNzIGZpbHRlcicgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuYS5wcm9jZXNzICJyb3QxMy1maWx0ZXIucGwgYS5sb2cgY2xlYW4gc211ZGdlIGRlbGF5IiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuYS5yZXF1aXJlZCB0cnVlICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5iLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBiLmxvZyBjbGVhbiBzbXVkZ2UgZGVsYXkiICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGZpbHRlci5iLnJlcXVpcmVkIHRydWUgJiYKKworCXJtIC1yZiByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvICIqLmEgZmlsdGVyPWEiID4uZ2l0YXR0cmlidXRlcyAmJgorCQllY2hvICIqLmIgZmlsdGVyPWIiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LmEgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTAuYSAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QtZGVsYXkxMS5hICYmCisJCWNwICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC1kZWxheTIwLmEgJiYKKwkJY3AgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTAuYiAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdCBjb21taXQiCisJKSAmJgorCisJUz0kKGZpbGVfc2l6ZSAiJFRFU1RfUk9PVC90ZXN0Lm8iKSAmJgorCWNhdCA+YS5leHAgPDwtRU9GICYmCisJCVNUQVJUCisJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCUlOOiBzbXVkZ2UgdGVzdC5hICRTIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJSU46IHNtdWRnZSB0ZXN0LWRlbGF5MTAuYSAkUyBbT0tdIC0tIFtERUxBWUVEXQorCQlJTjogc211ZGdlIHRlc3QtZGVsYXkxMS5hICRTIFtPS10gLS0gW0RFTEFZRURdCisJCUlOOiBzbXVkZ2UgdGVzdC1kZWxheTIwLmEgJFMgW09LXSAtLSBbREVMQVlFRF0KKwkJSU46IGxpc3RfYXZhaWxhYmxlX2Jsb2JzIHRlc3QtZGVsYXkxMC5hIHRlc3QtZGVsYXkxMS5hIFtPS10KKwkJSU46IHNtdWRnZSB0ZXN0LWRlbGF5MTAuYSAwIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJSU46IHNtdWRnZSB0ZXN0LWRlbGF5MTEuYSAwIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJSU46IGxpc3RfYXZhaWxhYmxlX2Jsb2JzIHRlc3QtZGVsYXkyMC5hIFtPS10KKwkJSU46IHNtdWRnZSB0ZXN0LWRlbGF5MjAuYSAwIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJSU46IGxpc3RfYXZhaWxhYmxlX2Jsb2JzIFtPS10KKwkJU1RPUAorCUVPRgorCWNhdCA+Yi5leHAgPDwtRU9GICYmCisJCVNUQVJUCisJCWluaXQgaGFuZHNoYWtlIGNvbXBsZXRlCisJCUlOOiBzbXVkZ2UgdGVzdC1kZWxheTEwLmIgJFMgW09LXSAtLSBbREVMQVlFRF0KKwkJSU46IGxpc3RfYXZhaWxhYmxlX2Jsb2JzIHRlc3QtZGVsYXkxMC5iIFtPS10KKwkJSU46IHNtdWRnZSB0ZXN0LWRlbGF5MTAuYiAwIFtPS10gLS0gT1VUOiAkUyAuIFtPS10KKwkJSU46IGxpc3RfYXZhaWxhYmxlX2Jsb2JzIFtPS10KKwkJU1RPUAorCUVPRgorCisJcm0gLXJmIHJlcG8tY2xvbmVkICYmCisJZmlsdGVyX2dpdCBjbG9uZSByZXBvIHJlcG8tY2xvbmVkICYmCisJdGVzdF9jbXBfY291bnQgYS5leHAgcmVwby1jbG9uZWQvYS5sb2cgJiYKKwl0ZXN0X2NtcF9jb3VudCBiLmV4cCByZXBvLWNsb25lZC9iLmxvZyAmJgorCisJKAorCQljZCByZXBvLWNsb25lZCAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LmEgJiYKKwkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC1kZWxheTEwLmEgJiYKKwkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC1kZWxheTExLmEgJiYKKwkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC1kZWxheTIwLmEgJiYKKwkJdGVzdF9jbXBfY29tbWl0dGVkX3JvdDEzICIkVEVTVF9ST09UL3Rlc3QubyIgdGVzdC1kZWxheTEwLmIgJiYKKworCQlybSAqLmEgKi5iICYmCisJCWZpbHRlcl9naXQgY2hlY2tvdXQgLiAmJgorCQl0ZXN0X2NtcF9jb3VudCAuLi9hLmV4cCBhLmxvZyAmJgorCQl0ZXN0X2NtcF9jb3VudCAuLi9iLmV4cCBiLmxvZyAmJgorCisJCXRlc3RfY21wX2NvbW1pdHRlZF9yb3QxMyAiJFRFU1RfUk9PVC90ZXN0Lm8iIHRlc3QuYSAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTAuYSAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTEuYSAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MjAuYSAmJgorCQl0ZXN0X2NtcF9jb21taXR0ZWRfcm90MTMgIiRURVNUX1JPT1QvdGVzdC5vIiB0ZXN0LWRlbGF5MTAuYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdtaXNzaW5nIGZpbGUgaW4gZGVsYXllZCBjaGVja291dCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuYnVnLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBidWcubG9nIGNsZWFuIHNtdWRnZSBkZWxheSIgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLmJ1Zy5yZXF1aXJlZCB0cnVlICYmCisKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAiKi5hIGZpbHRlcj1idWciID4uZ2l0YXR0cmlidXRlcyAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIG1pc3NpbmctZGVsYXkuYSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdCBjb21taXQiCisJKSAmJgorCisJcm0gLXJmIHJlcG8tY2xvbmVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHJlcG8gcmVwby1jbG9uZWQgMj5naXQtc3RkZXJyLmxvZyAmJgorCWdyZXAgImVycm9yOiAubWlzc2luZy1kZWxheVwuYS4gd2FzIG5vdCBmaWx0ZXJlZCBwcm9wZXJseSIgZ2l0LXN0ZGVyci5sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbnZhbGlkIGZpbGUgaW4gZGVsYXllZCBjaGVja291dCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCBmaWx0ZXIuYnVnLnByb2Nlc3MgInJvdDEzLWZpbHRlci5wbCBidWcubG9nIGNsZWFuIHNtdWRnZSBkZWxheSIgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgZmlsdGVyLmJ1Zy5yZXF1aXJlZCB0cnVlICYmCisKKwlybSAtcmYgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAiKi5hIGZpbHRlcj1idWciID4uZ2l0YXR0cmlidXRlcyAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIGludmFsaWQtZGVsYXkuYSAmJgorCQljcCAiJFRFU1RfUk9PVC90ZXN0Lm8iIHVuZmlsdGVyZWQgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gInRlc3QgY29tbWl0IgorCSkgJiYKKworCXJtIC1yZiByZXBvLWNsb25lZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSByZXBvIHJlcG8tY2xvbmVkIDI+Z2l0LXN0ZGVyci5sb2cgJiYKKwlncmVwICJlcnJvcjogZXh0ZXJuYWwgZmlsdGVyIC4qIHNpZ25hbGVkIHRoYXQgLnVuZmlsdGVyZWQuIGlzIG5vdyBhdmFpbGFibGUgYWx0aG91Z2ggaXQgaGFzIG5vdCBiZWVuIGRlbGF5ZWQgZWFybGllciIgZ2l0LXN0ZGVyci5sb2cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDIxL3JvdDEzLWZpbHRlci5wbCBiL3QvdDAwMjEvcm90MTMtZmlsdGVyLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDEwNzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDIxL3JvdDEzLWZpbHRlci5wbApAQCAtMCwwICsxLDIyNiBAQAorIworIyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgR2l0IGZpbHRlciBwcm90b2NvbCB2ZXJzaW9uIDIKKyMgU2VlIERvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQsIHNlY3Rpb24gIkZpbHRlciBQcm90b2NvbCIKKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IGRlZmluZXMgYSBkZWJ1ZyBsb2cgZmlsZSB0aGF0IHRoZSBzY3JpcHQgd3JpdGUgdG8uCisjIEFsbCByZW1haW5pbmcgYXJndW1lbnRzIGRlZmluZSBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29sCisjIGNhcGFiaWxpdGllcyAoImNsZWFuIiwgInNtdWRnZSIsIGV0YykuCisjCisjIFRoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgc3BlY2lhbCB0ZXN0IGNhc2VzOgorIyAoMSkgSWYgZGF0YSB3aXRoIHRoZSBwYXRobmFtZSAiY2xlYW4td3JpdGUtZmFpbC5yIiBpcyBwcm9jZXNzZWQgd2l0aAorIyAgICAgYSAiY2xlYW4iIG9wZXJhdGlvbiB0aGVuIHRoZSB3cml0ZSBvcGVyYXRpb24gd2lsbCBkaWUuCisjICgyKSBJZiBkYXRhIHdpdGggdGhlIHBhdGhuYW1lICJzbXVkZ2Utd3JpdGUtZmFpbC5yIiBpcyBwcm9jZXNzZWQgd2l0aAorIyAgICAgYSAic211ZGdlIiBvcGVyYXRpb24gdGhlbiB0aGUgd3JpdGUgb3BlcmF0aW9uIHdpbGwgZGllLgorIyAoMykgSWYgZGF0YSB3aXRoIHRoZSBwYXRobmFtZSAiZXJyb3IuciIgaXMgcHJvY2Vzc2VkIHdpdGggYW55CisjICAgICBvcGVyYXRpb24gdGhlbiB0aGUgZmlsdGVyIHNpZ25hbHMgdGhhdCBpdCBjYW5ub3Qgb3IgZG9lcyBub3Qgd2FudAorIyAgICAgdG8gcHJvY2VzcyB0aGUgZmlsZS4KKyMgKDQpIElmIGRhdGEgd2l0aCB0aGUgcGF0aG5hbWUgImFib3J0LnIiIGlzIHByb2Nlc3NlZCB3aXRoIGFueQorIyAgICAgb3BlcmF0aW9uIHRoZW4gdGhlIGZpbHRlciBzaWduYWxzIHRoYXQgaXQgY2Fubm90IG9yIGRvZXMgbm90IHdhbnQKKyMgICAgIHRvIHByb2Nlc3MgdGhlIGZpbGUgYW5kIGFueSBmaWxlIGFmdGVyIHRoYXQgaXMgcHJvY2Vzc2VkIHdpdGggdGhlCisjICAgICBzYW1lIGNvbW1hbmQuCisjICg1KSBJZiBkYXRhIHdpdGggYSBwYXRobmFtZSB0aGF0IGlzIGEga2V5IGluIHRoZSBERUxBWSBoYXNoIGlzCisjICAgICByZXF1ZXN0ZWQgKGUuZy4gInRlc3QtZGVsYXkxMC5hIikgdGhlbiB0aGUgZmlsdGVyIHJlc3BvbmRzIHdpdGgKKyMgICAgIGEgImRlbGF5IiBzdGF0dXMgYW5kIHNldHMgdGhlICJyZXF1ZXN0ZWQiIGZpZWxkIGluIHRoZSBERUxBWSBoYXNoLgorIyAgICAgVGhlIGZpbHRlciB3aWxsIHNpZ25hbCB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgb2JqZWN0IGFmdGVyCisjICAgICAiY291bnQiIChmaWVsZCBpbiBERUxBWSBoYXNoKSAibGlzdF9hdmFpbGFibGVfYmxvYnMiIGNvbW1hbmRzLgorIyAoNikgSWYgZGF0YSB3aXRoIHRoZSBwYXRobmFtZSAibWlzc2luZy1kZWxheS5hIiBpcyBwcm9jZXNzZWQgdGhhdCB0aGUKKyMgICAgIGZpbHRlciB3aWxsIGRyb3AgdGhlIHBhdGggZnJvbSB0aGUgImxpc3RfYXZhaWxhYmxlX2Jsb2JzIiByZXNwb25zZS4KKyMgKDcpIElmIGRhdGEgd2l0aCB0aGUgcGF0aG5hbWUgImludmFsaWQtZGVsYXkuYSIgaXMgcHJvY2Vzc2VkIHRoYXQgdGhlCisjICAgICBmaWx0ZXIgd2lsbCBhZGQgdGhlIHBhdGggInVuZmlsdGVyZWQiIHdoaWNoIHdhcyBub3QgZGVsYXllZCBiZWZvcmUKKyMgICAgIHRvIHRoZSAibGlzdF9hdmFpbGFibGVfYmxvYnMiIHJlc3BvbnNlLgorIworCit1c2UgNS4wMDg7CitzdWIgZ2l0cGVybGxpYiB7CisJIyBHaXQgYXNzdW1lcyB0aGF0IGFsbCBwYXRoIGxpc3RzIGFyZSBVbml4LXkgY29sb24tc2VwYXJhdGVkIG9uZXMuIEJ1dAorCSMgd2hlbiB0aGUgR2l0IGZvciBXaW5kb3dzIGV4ZWN1dGVzIHRoZSB0ZXN0IHN1aXRlLCBpdHMgTVNZUzIgQmFzaAorCSMgY2FsbHMgZ2l0LmV4ZSwgYW5kIGNvbG9uLXNlcGFyYXRlZCBwYXRoIGxpc3RzIGFyZSBjb252ZXJ0ZWQgaW50bworCSMgV2luZG93cy15IHNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdHMgb2YgKldpbmRvd3MqIHBhdGhzICh3aGljaAorCSMgbmF0dXJhbGx5IGNvbnRhaW4gYSBjb2xvbiBhZnRlciB0aGUgZHJpdmUgbGV0dGVyLCBzbyBzcGxpdHRpbmcgYnkKKwkjIGNvbG9ucyBzaW1wbHkgZG9lcyBub3QgY3V0IGl0KS4KKwkjCisJIyBEZXRlY3Qgc2VtaWNvbG9uLXNlcGFyYXRlZCBwYXRoIGxpc3QgYW5kIGhhbmRsZSB0aGVtIGFwcHJvcHJpYXRlbHkuCisKKwlpZiAoJEVOVntHSVRQRVJMTElCfSA9fiAvOy8pIHsKKwkJcmV0dXJuIHNwbGl0KC87LywgJEVOVntHSVRQRVJMTElCfSk7CisJfQorCXJldHVybiBzcGxpdCgvOi8sICRFTlZ7R0lUUEVSTExJQn0pOworfQordXNlIGxpYiAoZ2l0cGVybGxpYigpKTsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSU86OkZpbGU7Cit1c2UgR2l0OjpQYWNrZXQ7CisKK215ICRNQVhfUEFDS0VUX0NPTlRFTlRfU0laRSA9IDY1NTE2OworbXkgJGxvZ19maWxlICAgICAgICAgICAgICAgID0gc2hpZnQgQEFSR1Y7CitteSBAY2FwYWJpbGl0aWVzICAgICAgICAgICAgPSBAQVJHVjsKKworb3BlbiBteSAkZGVidWcsICI+PiIsICRsb2dfZmlsZSBvciBkaWUgImNhbm5vdCBvcGVuIGxvZyBmaWxlOiAkISI7CisKK215ICVERUxBWSA9ICgKKwkndGVzdC1kZWxheTEwLmEnID0+IHsgInJlcXVlc3RlZCIgPT4gMCwgImNvdW50IiA9PiAxIH0sCisJJ3Rlc3QtZGVsYXkxMS5hJyA9PiB7ICJyZXF1ZXN0ZWQiID0+IDAsICJjb3VudCIgPT4gMSB9LAorCSd0ZXN0LWRlbGF5MjAuYScgPT4geyAicmVxdWVzdGVkIiA9PiAwLCAiY291bnQiID0+IDIgfSwKKwkndGVzdC1kZWxheTEwLmInID0+IHsgInJlcXVlc3RlZCIgPT4gMCwgImNvdW50IiA9PiAxIH0sCisJJ21pc3NpbmctZGVsYXkuYScgPT4geyAicmVxdWVzdGVkIiA9PiAwLCAiY291bnQiID0+IDEgfSwKKwknaW52YWxpZC1kZWxheS5hJyA9PiB7ICJyZXF1ZXN0ZWQiID0+IDAsICJjb3VudCIgPT4gMSB9LAorKTsKKworc3ViIHJvdDEzIHsKKwlteSAkc3RyID0gc2hpZnQ7CisJJHN0ciA9fiB5L0EtWmEtei9OLVpBLU1uLXphLW0vOworCXJldHVybiAkc3RyOworfQorCitwcmludCAkZGVidWcgIlNUQVJUXG4iOworJGRlYnVnLT5mbHVzaCgpOworCitwYWNrZXRfaW5pdGlhbGl6ZSgiZ2l0LWZpbHRlciIsIDIpOworCitteSAlcmVtb3RlX2NhcHMgPSBwYWNrZXRfcmVhZF9hbmRfY2hlY2tfY2FwYWJpbGl0aWVzKCJjbGVhbiIsICJzbXVkZ2UiLCAiZGVsYXkiKTsKK3BhY2tldF9jaGVja19hbmRfd3JpdGVfY2FwYWJpbGl0aWVzKFwlcmVtb3RlX2NhcHMsIEBjYXBhYmlsaXRpZXMpOworCitwcmludCAkZGVidWcgImluaXQgaGFuZHNoYWtlIGNvbXBsZXRlXG4iOworJGRlYnVnLT5mbHVzaCgpOworCit3aGlsZSAoMSkgeworCW15ICggJHJlcywgJGNvbW1hbmQgKSA9IHBhY2tldF9rZXlfdmFsX3JlYWQoImNvbW1hbmQiKTsKKwlpZiAoICRyZXMgPT0gLTEgKSB7CisJCXByaW50ICRkZWJ1ZyAiU1RPUFxuIjsKKwkJZXhpdCgpOworCX0KKwlwcmludCAkZGVidWcgIklOOiAkY29tbWFuZCI7CisJJGRlYnVnLT5mbHVzaCgpOworCisJaWYgKCAkY29tbWFuZCBlcSAibGlzdF9hdmFpbGFibGVfYmxvYnMiICkgeworCQkjIEZsdXNoCisJCXBhY2tldF9jb21wYXJlX2xpc3RzKFsxLCAiIl0sIHBhY2tldF9iaW5fcmVhZCgpKSB8fAorCQkJZGllICJiYWQgbGlzdF9hdmFpbGFibGVfYmxvYnMgZW5kIjsKKworCQlmb3JlYWNoIG15ICRwYXRobmFtZSAoIHNvcnQga2V5cyAlREVMQVkgKSB7CisJCQlpZiAoICRERUxBWXskcGF0aG5hbWV9eyJyZXF1ZXN0ZWQifSA+PSAxICkgeworCQkJCSRERUxBWXskcGF0aG5hbWV9eyJjb3VudCJ9ID0gJERFTEFZeyRwYXRobmFtZX17ImNvdW50In0gLSAxOworCQkJCWlmICggJHBhdGhuYW1lIGVxICJpbnZhbGlkLWRlbGF5LmEiICkgeworCQkJCQkjIFNlbmQgR2l0IGEgcGF0aG5hbWUgdGhhdCB3YXMgbm90IGRlbGF5ZWQgZWFybGllcgorCQkJCQlwYWNrZXRfdHh0X3dyaXRlKCJwYXRobmFtZT11bmZpbHRlcmVkIik7CisJCQkJfQorCQkJCWlmICggJHBhdGhuYW1lIGVxICJtaXNzaW5nLWRlbGF5LmEiICkgeworCQkJCQkjIERvIG5vdCBzaWduYWwgR2l0IHRoYXQgdGhpcyBmaWxlIGlzIGF2YWlsYWJsZQorCQkJCX0gZWxzaWYgKCAkREVMQVl7JHBhdGhuYW1lfXsiY291bnQifSA9PSAwICkgeworCQkJCQlwcmludCAkZGVidWcgIiAkcGF0aG5hbWUiOworCQkJCQlwYWNrZXRfdHh0X3dyaXRlKCJwYXRobmFtZT0kcGF0aG5hbWUiKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlwYWNrZXRfZmx1c2goKTsKKworCQlwcmludCAkZGVidWcgIiBbT0tdXG4iOworCQkkZGVidWctPmZsdXNoKCk7CisJCXBhY2tldF90eHRfd3JpdGUoInN0YXR1cz1zdWNjZXNzIik7CisJCXBhY2tldF9mbHVzaCgpOworCX0gZWxzZSB7CisJCW15ICggJHJlcywgJHBhdGhuYW1lICkgPSBwYWNrZXRfa2V5X3ZhbF9yZWFkKCJwYXRobmFtZSIpOworCQlpZiAoICRyZXMgPT0gLTEgKSB7CisJCQlkaWUgInVuZXhwZWN0ZWQgRU9GIHdoaWxlIGV4cGVjdGluZyBwYXRobmFtZSI7CisJCX0KKwkJcHJpbnQgJGRlYnVnICIgJHBhdGhuYW1lIjsKKwkJJGRlYnVnLT5mbHVzaCgpOworCisJCSMgUmVhZCB1bnRpbCBmbHVzaAorCQlteSAoICRkb25lLCAkYnVmZmVyICkgPSBwYWNrZXRfdHh0X3JlYWQoKTsKKwkJd2hpbGUgKCAkYnVmZmVyIG5lICcnICkgeworCQkJaWYgKCAkYnVmZmVyIGVxICJjYW4tZGVsYXk9MSIgKSB7CisJCQkJaWYgKCBleGlzdHMgJERFTEFZeyRwYXRobmFtZX0gYW5kICRERUxBWXskcGF0aG5hbWV9eyJyZXF1ZXN0ZWQifSA9PSAwICkgeworCQkJCQkkREVMQVl7JHBhdGhuYW1lfXsicmVxdWVzdGVkIn0gPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZGllICJVbmtub3duIG1lc3NhZ2UgJyRidWZmZXInIjsKKwkJCX0KKworCQkJKCAkZG9uZSwgJGJ1ZmZlciApID0gcGFja2V0X3R4dF9yZWFkKCk7CisJCX0KKwkJaWYgKCAkZG9uZSA9PSAtMSApIHsKKwkJCWRpZSAidW5leHBlY3RlZCBFT0YgYWZ0ZXIgcGF0aG5hbWUgJyRwYXRobmFtZSciOworCQl9CisKKwkJbXkgJGlucHV0ID0gIiI7CisJCXsKKwkJCWJpbm1vZGUoU1RESU4pOworCQkJbXkgJGJ1ZmZlcjsKKwkJCW15ICRkb25lID0gMDsKKwkJCXdoaWxlICggISRkb25lICkgeworCQkJCSggJGRvbmUsICRidWZmZXIgKSA9IHBhY2tldF9iaW5fcmVhZCgpOworCQkJCSRpbnB1dCAuPSAkYnVmZmVyOworCQkJfQorCQkJaWYgKCAkZG9uZSA9PSAtMSApIHsKKwkJCQlkaWUgInVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgaW5wdXQgZm9yICckcGF0aG5hbWUnIjsKKwkJCX0JCQkKKwkJCXByaW50ICRkZWJ1ZyAiICIgLiBsZW5ndGgoJGlucHV0KSAuICIgW09LXSAtLSAiOworCQkJJGRlYnVnLT5mbHVzaCgpOworCQl9CisKKwkJbXkgJG91dHB1dDsKKwkJaWYgKCBleGlzdHMgJERFTEFZeyRwYXRobmFtZX0gYW5kIGV4aXN0cyAkREVMQVl7JHBhdGhuYW1lfXsib3V0cHV0In0gKSB7CisJCQkkb3V0cHV0ID0gJERFTEFZeyRwYXRobmFtZX17Im91dHB1dCJ9CisJCX0gZWxzaWYgKCAkcGF0aG5hbWUgZXEgImVycm9yLnIiIG9yICRwYXRobmFtZSBlcSAiYWJvcnQuciIgKSB7CisJCQkkb3V0cHV0ID0gIiI7CisJCX0gZWxzaWYgKCAkY29tbWFuZCBlcSAiY2xlYW4iIGFuZCBncmVwKCAvXmNsZWFuJC8sIEBjYXBhYmlsaXRpZXMgKSApIHsKKwkJCSRvdXRwdXQgPSByb3QxMygkaW5wdXQpOworCQl9IGVsc2lmICggJGNvbW1hbmQgZXEgInNtdWRnZSIgYW5kIGdyZXAoIC9ec211ZGdlJC8sIEBjYXBhYmlsaXRpZXMgKSApIHsKKwkJCSRvdXRwdXQgPSByb3QxMygkaW5wdXQpOworCQl9IGVsc2UgeworCQkJZGllICJiYWQgY29tbWFuZCAnJGNvbW1hbmQnIjsKKwkJfQorCisJCWlmICggJHBhdGhuYW1lIGVxICJlcnJvci5yIiApIHsKKwkJCXByaW50ICRkZWJ1ZyAiW0VSUk9SXVxuIjsKKwkJCSRkZWJ1Zy0+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+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaCBiL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDgzYjcyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsNDI3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nb3VyIG93biBvcHRpb24gcGFyc2VyJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5leHBlY3QgPDxcRU9GCit1c2FnZTogdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgPG9wdGlvbnM+CisKKyAgICBBIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHBhcnNlLW9wdGlvbnMgQVBJLgorCisgICAgLS15ZXMgICAgICAgICAgICAgICAgIGdldCBhIGJvb2xlYW4KKyAgICAtRCwgLS1uby1kb3VidCAgICAgICAgYmVnaW5zIHdpdGggJ25vLScKKyAgICAtQiwgLS1uby1mZWFyICAgICAgICAgYmUgYnJhdmUKKyAgICAtYiwgLS1ib29sZWFuICAgICAgICAgaW5jcmVtZW50IGJ5IG9uZQorICAgIC00LCAtLW9yNCAgICAgICAgICAgICBiaXR3aXNlLW9yIGJvb2xlYW4gd2l0aCAuLi4wMTAwCisgICAgLS1uZWctb3I0ICAgICAgICAgICAgIHNhbWUgYXMgLS1uby1vcjQKKworICAgIC1pLCAtLWludGVnZXIgPG4+ICAgICBnZXQgYSBpbnRlZ2VyCisgICAgLWogPG4+ICAgICAgICAgICAgICAgIGdldCBhIGludGVnZXIsIHRvbworICAgIC1tLCAtLW1hZ25pdHVkZSA8bj4gICBnZXQgYSBtYWduaXR1ZGUKKyAgICAtLXNldDIzICAgICAgICAgICAgICAgc2V0IGludGVnZXIgdG8gMjMKKyAgICAtLW1vZGUxICAgICAgICAgICAgICAgc2V0IGludGVnZXIgdG8gMSAoY21kbW9kZSBvcHRpb24pCisgICAgLS1tb2RlMiAgICAgICAgICAgICAgIHNldCBpbnRlZ2VyIHRvIDIgKGNtZG1vZGUgb3B0aW9uKQorICAgIC1MLCAtLWxlbmd0aCA8c3RyPiAgICBnZXQgbGVuZ3RoIG9mIDxzdHI+CisgICAgLUYsIC0tZmlsZSA8ZmlsZT4gICAgIHNldCBmaWxlIHRvIDxmaWxlPgorCitTdHJpbmcgb3B0aW9ucworICAgIC1zLCAtLXN0cmluZyA8c3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgYSBzdHJpbmcKKyAgICAtLXN0cmluZzIgPHN0cj4gICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1zdCA8c3Q+ICAgICAgICAgICAgIGdldCBhbm90aGVyIHN0cmluZyAocGVydmVydCBvcmRlcmluZykKKyAgICAtbyA8c3RyPiAgICAgICAgICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1saXN0IDxzdHI+ICAgICAgICAgIGFkZCBzdHIgdG8gbGlzdAorCitNYWdpYyBhcmd1bWVudHMKKyAgICAtLXF1dXggICAgICAgICAgICAgICAgbWVhbnMgLS1xdXV4CisgICAgLU5VTSAgICAgICAgICAgICAgICAgIHNldCBpbnRlZ2VyIHRvIE5VTQorICAgICsgICAgICAgICAgICAgICAgICAgICBzYW1lIGFzIC1iCisgICAgLS1hbWJpZ3VvdXMgICAgICAgICAgIHBvc2l0aXZlIGFtYmlndWl0eQorICAgIC0tbm8tYW1iaWd1b3VzICAgICAgICBuZWdhdGl2ZSBhbWJpZ3VpdHkKKworU3RhbmRhcmQgb3B0aW9ucworICAgIC0tYWJicmV2Wz08bj5dICAgICAgICB1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcworICAgIC12LCAtLXZlcmJvc2UgICAgICAgICBiZSB2ZXJib3NlCisgICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIGRyeSBydW4KKyAgICAtcSwgLS1xdWlldCAgICAgICAgICAgYmUgcXVpZXQKKyAgICAtLWV4cGVjdCA8c3RyaW5nPiAgICAgZXhwZWN0ZWQgb3V0cHV0IGluIHRoZSB2YXJpYWJsZSBkdW1wCisKK0FsaWFzCisgICAgLUEsIC0tYWxpYXMtc291cmNlIDxzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBhIHN0cmluZworICAgIC1aLCAtLWFsaWFzLXRhcmdldCA8c3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgYSBzdHJpbmcKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgaGVscCcgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC1oID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCittdiBleHBlY3QgZXhwZWN0LmVycgorCitjaGVjayAoKSB7CisJd2hhdD0iJDEiICYmCisJc2hpZnQgJiYKKwlleHBlY3Q9IiQxIiAmJgorCXNoaWZ0ICYmCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9IiR3aGF0ICRleHBlY3QiICIkQCIKK30KKworY2hlY2tfdW5rbm93bl9pMThuKCkgeworCWNhc2UgIiQxIiBpbgorCS0tKikKKwkJZWNobyBlcnJvcjogdW5rbm93biBvcHRpb24gXGAkezEjLS19XCcgPmV4cGVjdCA7OworCS0qKQorCQllY2hvIGVycm9yOiB1bmtub3duIHN3aXRjaCBcYCR7MSMtfVwnID5leHBlY3QgOzsKKwllc2FjICYmCisJY2F0IGV4cGVjdC5lcnIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAkKiA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dC5lcnIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSAjMScgJ2NoZWNrIGJvb2xlYW46IDEgLS15ZXMnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpICMyJyAnY2hlY2sgYm9vbGVhbjogMSAtLW5vLWRvdWJ0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSAjMycgJ2NoZWNrIGJvb2xlYW46IDEgLUQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpICM0JyAnY2hlY2sgYm9vbGVhbjogMSAtLW5vLWZlYXInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpICM1JyAnY2hlY2sgYm9vbGVhbjogMSAtQicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBpcyBpZGVtcG90ZW50ICMxJyAnY2hlY2sgYm9vbGVhbjogMSAtLXllcyAtLXllcycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgaXMgaWRlbXBvdGVudCAjMicgJ2NoZWNrIGJvb2xlYW46IDEgLURCJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIG5lZ2F0aW9uICMxJyAnY2hlY2sgYm9vbGVhbjogMCAtRCAtLW5vLXllcycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgbmVnYXRpb24gIzInICdjaGVjayBib29sZWFuOiAwIC1EIC0tbm8tbm8tZG91YnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgbm8gbmVnYXRpb24gIzEnICdjaGVja191bmtub3duX2kxOG4gLS1mZWFyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBubyBuZWdhdGlvbiAjMicgJ2NoZWNrX3Vua25vd25faTE4biAtLW5vLW5vLWZlYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgcG9zaXRpdmF0aW9uJyAnY2hlY2sgYm9vbGVhbjogMCAtRCAtLWRvdWJ0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfSU5UKCkgbmVnYXRpdmUnICdjaGVjayBpbnRlZ2VyOiAtMjM0NSAtaSAtMjM0NScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX01BR05JVFVERSgpIHNpbXBsZScgJworCWNoZWNrIG1hZ25pdHVkZTogMjM0NTY3OCAtbSAyMzQ1Njc4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9NQUdOSVRVREUoKSBraWxvJyAnCisJY2hlY2sgbWFnbml0dWRlOiAyMzk2MTYgLW0gMjM0aworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTUFHTklUVURFKCkgbWVnYScgJworCWNoZWNrIG1hZ25pdHVkZTogMTA0ODU3NjAwIC1tIDEwMG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX01BR05JVFVERSgpIGdpZ2EnICcKKwljaGVjayBtYWduaXR1ZGU6IDEwNzM3NDE4MjQgLW0gMWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX01BR05JVFVERSgpIDNnaWdhJyAnCisJY2hlY2sgbWFnbml0dWRlOiAzMjIxMjI1NDcyIC1tIDNnCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorYm9vbGVhbjogMgoraW50ZWdlcjogMTcyOQorbWFnbml0dWRlOiAxNjM4NAordGltZXN0YW1wOiAwCitzdHJpbmc6IDEyMworYWJicmV2OiA3Cit2ZXJib3NlOiAyCitxdWlldDogMAorZHJ5IHJ1bjogeWVzCitmaWxlOiBwcmVmaXgvbXkuZmlsZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IG9wdGlvbnMnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtczEyMyAtYiAtaSAxNzI5IC1tIDE2ayAtYiAtdnYgLW4gLUYgbXkuZmlsZSBcCisJPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitib29sZWFuOiAyCitpbnRlZ2VyOiAxNzI5CittYWduaXR1ZGU6IDE2Mzg0Cit0aW1lc3RhbXA6IDAKK3N0cmluZzogMzIxCithYmJyZXY6IDEwCit2ZXJib3NlOiAyCitxdWlldDogMAorZHJ5IHJ1bjogbm8KK2ZpbGU6IHByZWZpeC9maS5sZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgb3B0aW9ucycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tYm9vbGVhbiAtLWludGVnZXIgMTcyOSAtLW1hZ25pdHVkZSAxNmsgXAorCQktLWJvb2xlYW4gLS1zdHJpbmcyPTMyMSAtLXZlcmJvc2UgLS12ZXJib3NlIC0tbm8tZHJ5LXJ1biBcCisJCS0tYWJicmV2PTEwIC0tZmlsZSBmaS5sZSAtLW9ic29sZXRlIFwKKwkJPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyByZXF1aXJlZCB2YWx1ZScgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI5IHRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC1zICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjkgdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1zdHJpbmcgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSB0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWZpbGUKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitib29sZWFuOiAxCitpbnRlZ2VyOiAxMworbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogMTIzCithYmJyZXY6IDcKK3ZlcmJvc2U6IC0xCitxdWlldDogMAorZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorYXJnIDAwOiBhMQorYXJnIDAxOiBiMQorYXJnIDAyOiAtLWJvb2xlYW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcm1pbmdsZWQgYXJndW1lbnRzJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgYTEgLS1zdHJpbmcgMTIzIGIxIC0tYm9vbGVhbiAtaiAxMyAtLSAtLWJvb2xlYW4gXAorCQk+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Jvb2xlYW46IDAKK2ludGVnZXI6IDIKK21hZ25pdHVkZTogMAordGltZXN0YW1wOiAwCitzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAtMQorcXVpZXQ6IDAKK2RyeSBydW46IG5vCitmaWxlOiAobm90IHNldCkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmFtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbicgJworCUdJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9ZmFsc2UgXAorCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0taW50IDIgLS1ib29sZWFuIC0tbm8tYm8gPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5hbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24gd2l0aCAiPSInICcKKwlHSVRfVEVTVF9ESVNBTExPV19BQkJSRVZJQVRFRF9PUFRJT05TPWZhbHNlIFwKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0iaW50ZWdlcjogMiIgLS1pbnQ9MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24nICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBlbnYgR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUz1mYWxzZSBcCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1zdHJpbiAxMjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGFtYmlndW91cyBvcHRpb24gKGFmdGVyIHR3byBvcHRpb25zIGl0IGFiYnJldmlhdGVzKScgJworCUdJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9ZmFsc2UgXAorCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZXhwZWN0PSJzdHJpbmc6IDEyMyIgLS1zdCAxMjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWxpYXMgb3B0aW9ucyBkbyBub3QgY29udHJpYnV0ZSB0byBhYmJyZXZpYXRpb24nICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWFsaWFzLXNvdXJjZSAxMjMgPm91dHB1dCAmJgorCWdyZXAgIl5zdHJpbmc6IDEyMyIgb3V0cHV0ICYmCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1hbGlhcy10YXJnZXQgMTIzID5vdXRwdXQgJiYKKwlncmVwICJec3RyaW5nOiAxMjMiIG91dHB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tYWxpYXMgJiYKKwlHSVRfVEVTVF9ESVNBTExPV19BQkJSRVZJQVRFRF9PUFRJT05TPWZhbHNlIFwKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWFsaWFzIDEyMyA+b3V0cHV0ICYmCisJZ3JlcCAiXnN0cmluZzogMTIzIiBvdXRwdXQKKycKKworY2F0ID50eXBvLmVyciA8PFxFT0YKK2Vycm9yOiBkaWQgeW91IG1lYW4gYC0tYm9vbGVhbmAgKHdpdGggdHdvIGRhc2hlcyk/CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHBvc3NpYmxlIHR5cG9zJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLWJvb2xlYW4gPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIHR5cG8uZXJyIG91dHB1dC5lcnIKKycKKworY2F0ID50eXBvLmVyciA8PFxFT0YKK2Vycm9yOiBkaWQgeW91IG1lYW4gYC0tYW1iaWd1b3VzYCAod2l0aCB0d28gZGFzaGVzKT8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgcG9zc2libGUgdHlwb3MnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtYW1iaWd1b3VzID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCB0eXBvLmVyciBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tlZXAgc29tZSBvcHRpb25zIGFzIGFyZ3VtZW50cycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZXhwZWN0PSJhcmcgMDA6IC0tcXV1eCIgLS1xdXV4CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQ2FsbGJhY2s6ICJmb3VyIiwgMAorYm9vbGVhbjogNQoraW50ZWdlcjogNAorbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IC0xCitxdWlldDogMAorZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9DQUxMQkFDSygpIGFuZCBPUFRfQklUKCkgd29yaycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tbGVuZ3RoPWZvdXIgLWIgLTQgPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NBTExCQUNLKCkgYW5kIGNhbGxiYWNrIGVycm9ycyB3b3JrJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1uby1sZW5ndGggPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitib29sZWFuOiAxCitpbnRlZ2VyOiAyMworbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IC0xCitxdWlldDogMAorZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CSVQoKSBhbmQgT1BUX1NFVF9JTlQoKSB3b3JrJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1zZXQyMyAtYmJiYmIgLS1uby1vcjQgPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX05FR0JJVCgpIGFuZCBPUFRfU0VUX0lOVCgpIHdvcmsnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLXNldDIzIC1iYmJiYiAtLW5lZy1vcjQgPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JJVCgpIHdvcmtzJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9ImJvb2xlYW46IDYiIC1iYiAtLW9yNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTkVHQklUKCkgd29ya3MnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0iYm9vbGVhbjogNiIgLWJiIC0tbm8tbmVnLW9yNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQ01ETU9ERSgpIHdvcmtzJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9ImludGVnZXI6IDEiIC0tbW9kZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NNRE1PREUoKSBkZXRlY3RzIGluY29tcGF0aWJpbGl0eScgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tbW9kZTEgLS1tb2RlMiA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJpbmNvbXBhdGlibGUgd2l0aCAtLW1vZGUiIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NNRE1PREUoKSBkZXRlY3RzIGluY29tcGF0aWJpbGl0eSB3aXRoIHNvbWV0aGluZyBlbHNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1zZXQyMyAtLW1vZGUyID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImluY29tcGF0aWJsZSB3aXRoIHNvbWV0aGluZyBlbHNlIiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9DT1VOVFVQKCkgd2l0aCBQQVJTRV9PUFRfTk9EQVNIIHdvcmtzJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9ImJvb2xlYW46IDYiICsgKyArICsgKyArCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9OVU1CRVJfQ0FMTEJBQ0soKSB3b3JrcycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZXhwZWN0PSJpbnRlZ2VyOiAxMjM0NSIgLTEyMzQ1CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMAorbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IC0xCitxdWlldDogMAorZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lZ2F0aW9uIG9mIE9QVF9OT05FRyBmbGFncyBpcyBub3QgYW1iaWd1b3VzJyAnCisJR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUz1mYWxzZSBcCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1uby1hbWJpZyA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPj5leHBlY3QgPDxcRU9GCitsaXN0OiBmb28KK2xpc3Q6IGJhcgorbGlzdDogYmF6CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbGlzdCBrZWVwcyBsaXN0IG9mIHN0cmluZ3MnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWxpc3QgZm9vIC0tbGlzdD1iYXIgLS1saXN0PWJheiA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLWxpc3QgcmVzZXRzIGxpc3QnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWxpc3Q9b3RoZXIgLS1saXN0PWlycmVsZXZhbnQgLS1saXN0PW9wdGlvbnMgXAorCQktLW5vLWxpc3QgLS1saXN0PWZvbyAtLWxpc3Q9YmFyIC0tbGlzdD1iYXogPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgcXVpZXQgbGV2ZWxzJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9InF1aWV0OiAzIiAtcSAtcSAtcQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSB2ZXJib3NlIGxldmVscycgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZXhwZWN0PSJ2ZXJib3NlOiAzIiAtdiAtdiAtdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXF1aWV0IHNldHMgLS1xdWlldCB0byAwJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9InF1aWV0OiAwIiAtLW5vLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tcXVpZXQgcmVzZXRzIG11bHRpcGxlIC1xIHRvIDAnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLWV4cGVjdD0icXVpZXQ6IDAiIC1xIC1xIC1xIC0tbm8tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJib3NlIHNldHMgdmVyYm9zZSB0byAwJyAnCisJdGVzdC10b29sIHBhcnNlLW9wdGlvbnMgLS1leHBlY3Q9InZlcmJvc2U6IDAiIC0tbm8tdmVyYm9zZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmJvc2UgcmVzZXRzIG11bHRpcGxlIHZlcmJvc2UgdG8gMCcgJworCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0tZXhwZWN0PSJ2ZXJib3NlOiAwIiAtdiAtdiAtdiAtLW5vLXZlcmJvc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1RFU1RfRElTQUxMT1dfQUJCUkVWSUFURURfT1BUSU9OUyB3b3JrcycgJworCUdJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9ZmFsc2UgXAorCQl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyAtLXllICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9dHJ1ZSBcCisJCXRlc3QtdG9vbCBwYXJzZS1vcHRpb25zIC0teWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1lbmQtb2Ytb3B0aW9ucyB0cmVhdHMgcmVtYWluZGVyIGFzIGFyZ3MnICcKKwl0ZXN0LXRvb2wgcGFyc2Utb3B0aW9ucyBcCisJICAgIC0tZXhwZWN0PSJ2ZXJib3NlOiAtMSIgXAorCSAgICAtLWV4cGVjdD0iYXJnIDAwOiAtLXZlcmJvc2UiIFwKKwkgICAgLS1lbmQtb2Ytb3B0aW9ucyAtLXZlcmJvc2UKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDQxLXVzYWdlLnNoIGIvdC90MDA0MS11c2FnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YjkyN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA0MS11c2FnZS5zaApAQCAtMCwwICsxLDEwNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY29tbWFuZHMgYmVoYXZpb3Igd2hlbiBnaXZlbiBpbnZhbGlkIGFyZ3VtZW50IHZhbHVlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgJyAnCisJdGVzdF9jb21taXQgInYxLjAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyAtLWNvbnRhaW5zIDxleGlzdGVudF90YWc+JyAnCisJZ2l0IHRhZyAtLWNvbnRhaW5zICJ2MS4wIiA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCWdyZXAgInYxLjAiIGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgLS1jb250YWlucyA8aW5leGlzdGVudF90YWc+JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLWNvbnRhaW5zICJub3RhZyIgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIiBhY3R1YWwuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJ1c2FnZSIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgLS1uby1jb250YWlucyA8ZXhpc3RlbnRfdGFnPicgJworCWdpdCB0YWcgLS1uby1jb250YWlucyAidjEuMCIgPmFjdHVhbCAyPmFjdHVhbC5lcnIgICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIC0tbm8tY29udGFpbnMgPGluZXhpc3RlbnRfdGFnPicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLS1uby1jb250YWlucyAibm90YWciID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciIgYWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAidXNhZ2UiIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHVzYWdlIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLW5vb3B0ID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1c2FnZSIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1jb250YWlucyA8ZXhpc3RlbnRfY29tbWl0PicgJworCWdpdCBicmFuY2ggLS1jb250YWlucyAibWFzdGVyIiA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm1hc3RlciIgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLWNvbnRhaW5zIDxpbmV4aXN0ZW50X2NvbW1pdD4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tbm8tY29udGFpbnMgIm5vY29tbWl0IiA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IiIGFjdHVhbC5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgInVzYWdlIiBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLW5vLWNvbnRhaW5zIDxleGlzdGVudF9jb21taXQ+JyAnCisJZ2l0IGJyYW5jaCAtLW5vLWNvbnRhaW5zICJtYXN0ZXIiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbm8tY29udGFpbnMgPGluZXhpc3RlbnRfY29tbWl0PicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1uby1jb250YWlucyAibm9jb21taXQiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciIgYWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAidXNhZ2UiIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHVzYWdlIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLW5vb3B0ID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1c2FnZSIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3ItZWFjaC1yZWYgLS1jb250YWlucyA8ZXhpc3RlbnRfb2JqZWN0PicgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1jb250YWlucyAibWFzdGVyIiA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvci1lYWNoLXJlZiAtLWNvbnRhaW5zIDxpbmV4aXN0ZW50X29iamVjdD4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tbm8tY29udGFpbnMgIm5vb2JqZWN0IiA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IiIGFjdHVhbC5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgInVzYWdlIiBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvci1lYWNoLXJlZiAtLW5vLWNvbnRhaW5zIDxleGlzdGVudF9vYmplY3Q+JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLW5vLWNvbnRhaW5zICJtYXN0ZXIiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yLWVhY2gtcmVmIC0tbm8tY29udGFpbnMgPGluZXhpc3RlbnRfb2JqZWN0PicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1uby1jb250YWlucyAibm9vYmplY3QiID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciIgYWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAidXNhZ2UiIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yLWVhY2gtcmVmIHVzYWdlIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLW5vb3B0ID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1c2FnZSIgYWN0dWFsLmVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNTAtZmlsZXN5c3RlbS5zaCBiL3QvdDAwNTAtZmlsZXN5c3RlbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MDg2NzNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDA1MC1maWxlc3lzdGVtLnNoCkBAIC0wLDAgKzEsMTU0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVmFyaW91cyBmaWxlc3lzdGVtIGlzc3VlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK2F1bWw9JChwcmludGYgJ1wzMDNcMjQ0JykKK2F1bWxjZGlhcj0kKHByaW50ZiAnXDE0MVwzMTRcMjEwJykKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBDQVNFX0lOU0VOU0lUSVZFX0ZTCit0aGVuCisJc2F5ICJ3aWxsIHRlc3Qgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0iCisJdGVzdF9jYXNlPXRlc3RfZXhwZWN0X2ZhaWx1cmUKK2Vsc2UKKwl0ZXN0X2Nhc2U9dGVzdF9leHBlY3Rfc3VjY2VzcworZmkKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBVVEY4X05GRF9UT19ORkMKK3RoZW4KKwlzYXkgIndpbGwgdGVzdCBvbiBhIHVuaWNvZGUgY29ycnVwdGluZyBmaWxlc3lzdGVtIgorCXRlc3RfdW5pY29kZT10ZXN0X2V4cGVjdF9mYWlsdXJlCitlbHNlCisJdGVzdF91bmljb2RlPXRlc3RfZXhwZWN0X3N1Y2Nlc3MKK2ZpCisKK3Rlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MgfHwKKwlzYXkgIndpbGwgdGVzdCBvbiBhIGZpbGVzeXN0ZW0gbGFja2luZyBzeW1ib2xpYyBsaW5rcyIKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBDQVNFX0lOU0VOU0lUSVZFX0ZTCit0aGVuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXRlY3Rpb24gb2YgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGR1cmluZyByZXBvIGluaXQiICcKKwl0ZXN0ICQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5pZ25vcmVjYXNlKSA9IHRydWUKKycKK2Vsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRldGVjdGlvbiBvZiBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gZHVyaW5nIHJlcG8gaW5pdCIgJworCXsKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5pZ25vcmVjYXNlID4vZGV2L251bGwgfHwKKwkJCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UpID0gZmFsc2UKKwl9CisnCitmaQorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXRlY3Rpb24gb2YgZmlsZXN5c3RlbSB3L28gc3ltbGluayBzdXBwb3J0IGR1cmluZyByZXBvIGluaXQiICcKKwl7CisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ib29sIGNvcmUuc3ltbGlua3MgfHwKKwkJdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLnN5bWxpbmtzKSIgPSB0cnVlCisJfQorJworZWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmsgc3VwcG9ydCBkdXJpbmcgcmVwbyBpbml0IiAnCisJdj0kKGdpdCBjb25maWcgLS1ib29sIGNvcmUuc3ltbGlua3MpICYmCisJdGVzdCAiJHYiID0gZmFsc2UKKycKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIGNhc2UgdGVzdHMiICcKKwlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSB0cnVlICYmCisJdG91Y2ggY2FtZWxjYXNlICYmCisJZ2l0IGFkZCBjYW1lbGNhc2UgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCAtYiB0b3BpYyAmJgorCWdpdCBtdiBjYW1lbGNhc2UgdG1wICYmCisJZ2l0IG12IHRtcCBDYW1lbENhc2UgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUiICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgKGNhc2UgY2hhbmdlKScgJworCWdpdCBtdiBjYW1lbGNhc2UgQ2FtZWxDYXNlICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAoY2FzZSBjaGFuZ2UpJyAnCisJcm0gLWYgQ2FtZWxDYXNlICYmCisJcm0gLWYgY2FtZWxjYXNlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IG1lcmdlIHRvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0FTRV9JTlNFTlNJVElWRV9GUyAnYWRkIGRpcmVjdG9yeSAod2l0aCBkaWZmZXJlbnQgY2FzZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlta2RpciAtcCBkaXIxL2RpcjIgJiYKKwllY2hvID5kaXIxL2RpcjIvYSAmJgorCWVjaG8gPmRpcjEvZGlyMi9iICYmCisJZ2l0IGFkZCBkaXIxL2RpcjIvYSAmJgorCWdpdCBhZGQgZGlyMS9ESVIyL2IgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQljYW1lbGNhc2UKKwkJZGlyMS9kaXIyL2EKKwkJZGlyMS9kaXIyL2IKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBDQVNFX0lOU0VOU0lUSVZFX0ZTICdhZGQgKHdpdGggZGlmZmVyZW50IGNhc2UpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJcm0gY2FtZWxjYXNlICYmCisJZWNobyAxID5DYW1lbENhc2UgJiYKKwlnaXQgYWRkIENhbWVsQ2FzZSAmJgorCWNhbWVsPSQoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAtaSBjYW1lbGNhc2UpICYmCisJdGVzdCAkKGVjaG8gIiRjYW1lbCIgfCB3YyAtbCkgPSAxICYmCisJdGVzdCAieiQoZ2l0IGNhdC1maWxlIGJsb2IgOiRjYW1lbCkiID0gejEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgdW5pY29kZSBub3JtYWxpemF0aW9uIHRlc3RzIiAnCisJdGVzdF9jcmVhdGVfcmVwbyB1bmljb2RlICYmCisJY2QgdW5pY29kZSAmJgorCWdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSBmYWxzZSAmJgorCXRvdWNoICIkYXVtbGNkaWFyIiAmJgorCWdpdCBhZGQgIiRhdW1sY2RpYXIiICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljICYmCisJZ2l0IG12ICRhdW1sY2RpYXIgdG1wICYmCisJZ2l0IG12IHRtcCAiJGF1bWwiICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKKyR0ZXN0X3VuaWNvZGUgJ3JlbmFtZSAoc2lsZW50IHVuaWNvZGUgbm9ybWFsaXphdGlvbiknICcKKwlnaXQgbXYgIiRhdW1sY2RpYXIiICIkYXVtbCIgJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZQorJworCiskdGVzdF91bmljb2RlICdtZXJnZSAoc2lsZW50IHVuaWNvZGUgbm9ybWFsaXphdGlvbiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgbWVyZ2UgdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDQVNFX0lOU0VOU0lUSVZFX0ZTICdjaGVja291dCB3aXRoIG5vIHBhdGhzcGVjIGFuZCBhIGNhc2UgaW5zZW5zaXRpdmUgZnMnICcKKwlnaXQgaW5pdCByZXBvICYmCisJKAorCQljZCByZXBvICYmCisKKwkJPkdpdHdlYiAmJgorCQlnaXQgYWRkIEdpdHdlYiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgR2l0d2ViIiAmJgorCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiB0b2RvICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJbWtkaXIgLXAgZ2l0d2ViL3N1YmRpciAmJgorCQk+Z2l0d2ViL3N1YmRpci9maWxlICYmCisJCWdpdCBhZGQgZ2l0d2ViICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBnaXR3ZWIvc3ViZGlyL2ZpbGUiICYmCisKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDUxLXdpbmRvd3MtbmFtZWQtcGlwZS5zaCBiL3QvdDAwNTEtd2luZG93cy1uYW1lZC1waXBlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwYWM5MmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDUxLXdpbmRvd3MtbmFtZWQtcGlwZS5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nV2luZG93cyBuYW1lZCBwaXBlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ29fYXBwZW5kIHdyaXRlIHRvIG5hbWVkIHBpcGUnICcKKwlHSVRfVFJBQ0U9IiQocHdkKS9leHBlY3QiIGdpdCBzdGF0dXMgPi9kZXYvbnVsbCAyPiYxICYmCisJeyB0ZXN0LXRvb2wgd2luZG93cy1uYW1lZC1waXBlIHQwMDUxID5hY3R1YWwgMj4mMSAmIH0gJiYKKwlwaWQ9JCEgJiYKKwlzbGVlcCAxICYmCisJR0lUX1RSQUNFPS8vLi9waXBlL3QwMDUxIGdpdCBzdGF0dXMgPi9kZXYvbnVsbCAyPndhcm5pbmcgJiYKKwl3YWl0ICRwaWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA1NS1iZXlvbmQtc3ltbGlua3Muc2ggYi90L3QwMDU1LWJleW9uZC1zeW1saW5rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzZmZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA1NS1iZXlvbmQtc3ltbGlua3Muc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3VwZGF0ZS1pbmRleCBhbmQgYWRkIHJlZnVzZSB0byBhZGQgYmV5b25kIHN5bWxpbmtzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCisJPmEgJiYKKwlta2RpciBiICYmCisJbG4gLXMgYiBjICYmCisJPmMvZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSBiL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndXBkYXRlLWluZGV4IC0tYWRkIGJleW9uZCBzeW1saW5rcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYy9kICYmCisJISAoIGdpdCBscy1maWxlcyB8IGdyZXAgYy9kICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYWRkIGJleW9uZCBzeW1saW5rcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgYy9kICYmCisJISAoIGdpdCBscy1maWxlcyB8IGdyZXAgYy9kICkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDU2LWdpdC1DLnNoIGIvdC90MDA1Ni1naXQtQy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjMwZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA1Ni1naXQtQy5zaApAQCAtMCwwICsxLDk0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nIi1DIDxwYXRoPiIgb3B0aW9uIGFuZCBpdHMgZWZmZWN0cyBvbiBvdGhlciBwYXRoLXJlbGF0ZWQgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgLUMgPHBhdGg+IiBydW5zIGdpdCBmcm9tIHRoZSBkaXJlY3RvcnkgPHBhdGg+JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBkaXIxICYmCisJZWNobyAxID5kaXIxL2EudHh0ICYmCisJbXNnPSJpbml0aWFsIGluIGRpcjEiICYmCisJKGNkIGRpcjEgJiYgZ2l0IGFkZCBhLnR4dCAmJiBnaXQgY29tbWl0IC1tICIkbXNnIikgJiYKKwllY2hvICIkbXNnIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgZGlyMSBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IC1DIDxwYXRoPiIgd2l0aCBhbiBlbXB0eSA8cGF0aD4gaXMgYSBuby1vcCcgJworCSgKKwkJbWtkaXIgLXAgZGlyMS9zdWJkaXIgJiYKKwkJY2QgZGlyMS9zdWJkaXIgJiYKKwkJZ2l0IC1DICIiIHJldi1wYXJzZSAtLXNob3ctcHJlZml4ID5hY3R1YWwgJiYKKwkJZWNobyBzdWJkaXIvID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTXVsdGlwbGUgLUMgb3B0aW9uczogIi1DIGRpcjEgLUMgZGlyMiIgaXMgZXF1aXZhbGVudCB0byAiLUMgZGlyMS9kaXIyIicgJworCXRlc3RfY3JlYXRlX3JlcG8gZGlyMS9kaXIyICYmCisJZWNobyAxID5kaXIxL2RpcjIvYi50eHQgJiYKKwlnaXQgLUMgZGlyMS9kaXIyIGFkZCBiLnR4dCAmJgorCW1zZz0iaW5pdGlhbCBpbiBkaXIxL2RpcjIiICYmCisJZWNobyAiJG1zZyIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGRpcjEvZGlyMiBjb21taXQgLW0gIiRtc2ciICYmCisJZ2l0IC1DIGRpcjEgLUMgZGlyMiBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFZmZlY3Qgb24gLS1naXQtZGlyIG9wdGlvbjogIi1DIGMgLS1naXQtZGlyPWEuZ2l0IiBpcyBlcXVpdmFsZW50IHRvICItLWdpdC1kaXIgYy9hLmdpdCInICcKKwlta2RpciBjICYmCisJbWtkaXIgYy9hICYmCisJbWtkaXIgYy9hLmdpdCAmJgorCShjZCBjL2EuZ2l0ICYmIGdpdCBpbml0IC0tYmFyZSkgJiYKKwllY2hvIDEgPmMvYS9hLnR4dCAmJgorCWdpdCAtLWdpdC1kaXIgYy9hLmdpdCAtLXdvcmstdHJlZT1jL2EgYWRkIGEudHh0ICYmCisJZ2l0IC0tZ2l0LWRpciBjL2EuZ2l0IC0td29yay10cmVlPWMvYSBjb21taXQgLW0gImluaXRpYWwiICYmCisJZ2l0IC0tZ2l0LWRpcj1jL2EuZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgYyAtLWdpdC1kaXI9YS5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT3JkZXIgc2hvdWxkIG5vdCBtYXR0ZXI6ICItLWdpdC1kaXI9YS5naXQgLUMgYyIgaXMgZXF1aXZhbGVudCB0byAiLUMgYyAtLWdpdC1kaXI9YS5naXQiJyAnCisJZ2l0IC1DIGMgLS1naXQtZGlyPWEuZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ZWQgJiYKKwlnaXQgLS1naXQtZGlyPWEuZ2l0IC1DIGMgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRWZmZWN0IG9uIC0td29yay10cmVlIG9wdGlvbjogIi1DIGMvYS5naXQgLS13b3JrLXRyZWU9Li4vYSIgIGlzIGVxdWl2YWxlbnQgdG8gIi0td29yay10cmVlPWMvYSAtLWdpdC1kaXI9Yy9hLmdpdCInICcKKwlybSBjL2EvYS50eHQgJiYKKwlnaXQgLS1naXQtZGlyPWMvYS5naXQgLS13b3JrLXRyZWU9Yy9hIHN0YXR1cyA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgYy9hLmdpdCAtLXdvcmstdHJlZT0uLi9hIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09yZGVyIHNob3VsZCBub3QgbWF0dGVyOiAiLS13b3JrLXRyZWU9Li4vYSAtQyBjL2EuZ2l0IiBpcyBlcXVpdmFsZW50IHRvICItQyBjL2EuZ2l0IC0td29yay10cmVlPS4uL2EiJyAnCisJZ2l0IC1DIGMvYS5naXQgLS13b3JrLXRyZWU9Li4vYSBzdGF0dXMgPmV4cGVjdGVkICYmCisJZ2l0IC0td29yay10cmVlPS4uL2EgLUMgYy9hLmdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFZmZlY3Qgb24gLS1naXQtZGlyIGFuZCAtLXdvcmstdHJlZSBvcHRpb25zIC0gIi1DIGMgLS1naXQtZGlyPWEuZ2l0IC0td29yay10cmVlPWEiIGlzIGVxdWl2YWxlbnQgdG8gIi0tZ2l0LWRpcj1jL2EuZ2l0IC0td29yay10cmVlPWMvYSInICcKKwlnaXQgLS1naXQtZGlyPWMvYS5naXQgLS13b3JrLXRyZWU9Yy9hIHN0YXR1cyA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPcmRlciBzaG91bGQgbm90IG1hdHRlcjogIi1DIGMgLS1naXQtZGlyPWEuZ2l0IC0td29yay10cmVlPWEiIGlzIGVxdWl2YWxlbnQgdG8gIi0tZ2l0LWRpcj1hLmdpdCAtQyBjIC0td29yay10cmVlPWEiJyAnCisJZ2l0IC1DIGMgLS1naXQtZGlyPWEuZ2l0IC0td29yay10cmVlPWEgc3RhdHVzID5leHBlY3RlZCAmJgorCWdpdCAtLWdpdC1kaXI9YS5naXQgLUMgYyAtLXdvcmstdHJlZT1hIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09yZGVyIHNob3VsZCBub3QgbWF0dGVyOiAiLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSIgaXMgZXF1aXZhbGVudCB0byAiLS1naXQtZGlyPWEuZ2l0IC0td29yay10cmVlPWEgLUMgYyInICcKKwlnaXQgLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSBzdGF0dXMgPmV4cGVjdGVkICYmCisJZ2l0IC0tZ2l0LWRpcj1hLmdpdCAtLXdvcmstdHJlZT1hIC1DIGMgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVsYXRpdmUgZm9sbG93ZWQgYnkgZnVsbHBhdGg6ICItQyAuL2hlcmUgLUMgL3RoZXJlIiBpcyBlcXVpdmFsZW50IHRvICItQyAvdGhlcmUiJyAnCisJZWNobyAiaW5pdGlhbCBpbiBkaXIxL2RpcjIiID5leHBlY3RlZCAmJgorCWdpdCAtQyBkaXIxIC1DICIkKHB3ZCkvZGlyMS9kaXIyIiBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjAtcGF0aC11dGlscy5zaCBiL3QvdDAwNjAtcGF0aC11dGlscy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZWEyZDAwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2MC1wYXRoLXV0aWxzLnNoCkBAIC0wLDAgKzEsNDk2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIFJlaXNzCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdmFyaW91cyBwYXRoIHV0aWxpdGllcycKKworLiAuL3Rlc3QtbGliLnNoCisKK25vcm1fcGF0aCgpIHsKKwlleHBlY3RlZD0kKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHByaW50X3BhdGggIiQyIikKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICQzICJub3JtYWxpemUgcGF0aDogJDEgPT4gJDIiIFwKKwkidGVzdCBcIlwkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIG5vcm1hbGl6ZV9wYXRoX2NvcHkgJyQxJylcIiA9ICckZXhwZWN0ZWQnIgorfQorCityZWxhdGl2ZV9wYXRoKCkgeworCWV4cGVjdGVkPSQodGVzdC10b29sIHBhdGgtdXRpbHMgcHJpbnRfcGF0aCAiJDMiKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJDQgInJlbGF0aXZlIHBhdGg6ICQxICQyID0+ICQzIiBcCisJInRlc3QgXCJcJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWxhdGl2ZV9wYXRoICckMScgJyQyJylcIiA9ICckZXhwZWN0ZWQnIgorfQorCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsOiAkMSAkMiAkMyA9PiAkNCIgIgorCQlhY3R1YWw9XCQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIHJlc29sdmUtcmVsYXRpdmUtdXJsLXRlc3QgJyQxJyAnJDInICckMycpICYmCisJCXRlc3QgXCJcJGFjdHVhbFwiID0gJyQ0JworCSIKK30KKwordGVzdF9naXRfcGF0aCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQtcGF0aCAkMSAkMiA9PiAkMyIgIgorCQkkMSBnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggJDIgPmFjdHVhbCAmJgorCQllY2hvICQzID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKworIyBPbiBXaW5kb3dzLCB3ZSBhcmUgdXNpbmcgTVNZUydzIGJhc2gsIHdoaWNoIG1hbmdsZXMgdGhlIHBhdGhzLgorIyBBYnNvbHV0ZSBwYXRocyBhcmUgYW5jaG9yZWQgYXQgdGhlIE1TWVMgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwKKyMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgcGF0aCAvIGFjY291bnRzIGZvciB0aGlzIG1hbnkgY2hhcmFjdGVyczoKK3Jvb3RvZmY9JCh0ZXN0LXRvb2wgcGF0aC11dGlscyBub3JtYWxpemVfcGF0aF9jb3B5IC8gfCB3YyAtYykKKyMgQWNjb3VudCBmb3IgdGhlIHRyYWlsaW5nIExGOgoraWYgdGVzdCAkcm9vdG9mZiA9IDI7IHRoZW4KKwlyb290b2ZmPQkjIHdlIGFyZSBvbiBVbml4CitlbHNlCisJcm9vdG9mZj0kKCgkcm9vdG9mZi0xKSkKKwkjIEluIE1TWVMyLCB0aGUgcm9vdCBkaXJlY3RvcnkgIi8iIGlzIHRyYW5zbGF0ZWQgaW50byBhIFdpbmRvd3MKKwkjIGRpcmVjdG9yeSAqd2l0aCogdHJhaWxpbmcgc2xhc2guIExldCdzIHRlc3QgZm9yIHRoYXQgYW5kIGFkanVzdAorCSMgb3VyIGV4cGVjdGVkIGxvbmdlc3QgYW5jZXN0b3IgbGVuZ3RoIGFjY29yZGluZ2x5LgorCWNhc2UgIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcHJpbnRfcGF0aCAvKSIgaW4KKwkqLykgcm9vdHNsYXNoPTE7OworCSopIHJvb3RzbGFzaD0wOzsKKwllc2FjCitmaQorCithbmNlc3RvcigpIHsKKwkjIFdlIGRvIHNvbWUgbWF0aCB3aXRoIHRoZSBleHBlY3RlZCBhbmNlc3RvciBsZW5ndGguCisJZXhwZWN0ZWQ9JDMKKwlpZiB0ZXN0IC1uICIkcm9vdG9mZiIgJiYgdGVzdCAieCRleHBlY3RlZCIgIT0geC0xOyB0aGVuCisJCWV4cGVjdGVkPSQoKCRleHBlY3RlZC0kcm9vdHNsYXNoKSkKKwkJdGVzdCAkZXhwZWN0ZWQgLWx0IDAgfHwKKwkJZXhwZWN0ZWQ9JCgoJGV4cGVjdGVkKyRyb290b2ZmKSkKKwlmaQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImxvbmdlc3QgYW5jZXN0b3I6ICQxICQyID0+ICRleHBlY3RlZCIgXAorCSJhY3R1YWw9XCQodGVzdC10b29sIHBhdGgtdXRpbHMgbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGggJyQxJyAnJDInKSAmJgorCSB0ZXN0IFwiXCRhY3R1YWxcIiA9ICckZXhwZWN0ZWQnIgorfQorCisjIFNvbWUgYWJzb2x1dGUgcGF0aCB0ZXN0cyBzaG91bGQgYmUgc2tpcHBlZCBvbiBXaW5kb3dzIGR1ZSB0byBwYXRoIG1hbmdsaW5nCisjIG9uIFBPU0lYLXN0eWxlIGFic29sdXRlIHBhdGhzCitjYXNlICQodW5hbWUgLXMpIGluCisqTUlOR1cqKQorCTs7CisqQ1lHV0lOKikKKwk7OworKikKKwl0ZXN0X3NldF9wcmVyZXEgUE9TSVgKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGJhc2VuYW1lICd0ZXN0LXRvb2wgcGF0aC11dGlscyBiYXNlbmFtZScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgZGlybmFtZSAndGVzdC10b29sIHBhdGgtdXRpbHMgZGlybmFtZScKKworbm9ybV9wYXRoICIiICIiCitub3JtX3BhdGggLiAiIgorbm9ybV9wYXRoIC4vICIiCitub3JtX3BhdGggLi8uICIiCitub3JtX3BhdGggLi8uLiArK2ZhaWxlZCsrCitub3JtX3BhdGggLi4vLiArK2ZhaWxlZCsrCitub3JtX3BhdGggLi8uLi8uLy8gKytmYWlsZWQrKworbm9ybV9wYXRoIGRpci8uLiAiIgorbm9ybV9wYXRoIGRpci9zdWIvLi4vLi4gIiIKK25vcm1fcGF0aCBkaXIvc3ViLy4uLy4uLy4uICsrZmFpbGVkKysKK25vcm1fcGF0aCBkaXIgZGlyCitub3JtX3BhdGggZGlyLy8gZGlyLworbm9ybV9wYXRoIC4vZGlyIGRpcgorbm9ybV9wYXRoIGRpci8uIGRpci8KK25vcm1fcGF0aCBkaXIvLy8uLyBkaXIvCitub3JtX3BhdGggZGlyLy9zdWIvLi4gZGlyLworbm9ybV9wYXRoIGRpci9zdWIvLi4vIGRpci8KK25vcm1fcGF0aCBkaXIvc3ViLy4uLy4gZGlyLworbm9ybV9wYXRoIGRpci9zMS8uLi9zMi8gZGlyL3MyLworbm9ybV9wYXRoIGQxL3MxLy8vczIvLi4vLy4uL3MzLyBkMS9zMy8KK25vcm1fcGF0aCBkMS9zMS8vLi4vczIvLi4vLi4vZDIgZDIKK25vcm1fcGF0aCBkMS8uLi4vZDIgZDEvLi4uL2QyCitub3JtX3BhdGggZDEvLi4uLy4vLi4vZDIgZDEvZDIKKworbm9ybV9wYXRoIC8gLworbm9ybV9wYXRoIC8vIC8gUE9TSVgKK25vcm1fcGF0aCAvLy8gLyBQT1NJWAorbm9ybV9wYXRoIC8uIC8KK25vcm1fcGF0aCAvLi8gLyBQT1NJWAorbm9ybV9wYXRoIC8uLy4uICsrZmFpbGVkKysgUE9TSVgKK25vcm1fcGF0aCAvLi4vLiArK2ZhaWxlZCsrCitub3JtX3BhdGggLy4vLi4vLi8vICsrZmFpbGVkKysgUE9TSVgKK25vcm1fcGF0aCAvZGlyLy4uIC8gUE9TSVgKK25vcm1fcGF0aCAvZGlyL3N1Yi8uLi8uLiAvIFBPU0lYCitub3JtX3BhdGggL2Rpci9zdWIvLi4vLi4vLi4gKytmYWlsZWQrKyBQT1NJWAorbm9ybV9wYXRoIC9kaXIgL2Rpcgorbm9ybV9wYXRoIC9kaXIvLyAvZGlyLworbm9ybV9wYXRoIC8uL2RpciAvZGlyCitub3JtX3BhdGggL2Rpci8uIC9kaXIvCitub3JtX3BhdGggL2Rpci8vLy4vIC9kaXIvCitub3JtX3BhdGggL2Rpci8vc3ViLy4uIC9kaXIvCitub3JtX3BhdGggL2Rpci9zdWIvLi4vIC9kaXIvCitub3JtX3BhdGggLy9kaXIvc3ViLy4uLy4gL2Rpci8gUE9TSVgKK25vcm1fcGF0aCAvZGlyL3MxLy4uL3MyLyAvZGlyL3MyLworbm9ybV9wYXRoIC9kMS9zMS8vL3MyLy4uLy8uLi9zMy8gL2QxL3MzLworbm9ybV9wYXRoIC9kMS9zMS8vLi4vczIvLi4vLi4vZDIgL2QyCitub3JtX3BhdGggL2QxLy4uLi9kMiAvZDEvLi4uL2QyCitub3JtX3BhdGggL2QxLy4uLi8uLy4uL2QyIC9kMS9kMgorCithbmNlc3RvciAvIC8gLTEKK2FuY2VzdG9yIC9mb28gLyAwCithbmNlc3RvciAvZm9vIC9mbyAtMQorYW5jZXN0b3IgL2ZvbyAvZm9vIC0xCithbmNlc3RvciAvZm9vIC9iYXIgLTEKK2FuY2VzdG9yIC9mb28gL2Zvby9iYXIgLTEKK2FuY2VzdG9yIC9mb28gL2ZvbzovYmFyIC0xCithbmNlc3RvciAvZm9vIC86L2ZvbzovYmFyIDAKK2FuY2VzdG9yIC9mb28gL2ZvbzovOi9iYXIgMAorYW5jZXN0b3IgL2ZvbyAvOi9iYXI6L2ZvbyAwCithbmNlc3RvciAvZm9vL2JhciAvIDAKK2FuY2VzdG9yIC9mb28vYmFyIC9mbyAtMQorYW5jZXN0b3IgL2Zvby9iYXIgL2ZvbyA0CithbmNlc3RvciAvZm9vL2JhciAvZm9vL2JhIC0xCithbmNlc3RvciAvZm9vL2JhciAvOi9mbyAwCithbmNlc3RvciAvZm9vL2JhciAvZm9vOi9mb28vYmEgNAorYW5jZXN0b3IgL2Zvby9iYXIgL2JhciAtMQorYW5jZXN0b3IgL2Zvby9iYXIgL2ZvIC0xCithbmNlc3RvciAvZm9vL2JhciAvZm9vOi9iYXIgNAorYW5jZXN0b3IgL2Zvby9iYXIgLzovZm9vOi9iYXIgNAorYW5jZXN0b3IgL2Zvby9iYXIgL2ZvbzovOi9iYXIgNAorYW5jZXN0b3IgL2Zvby9iYXIgLzovYmFyOi9mbyAwCithbmNlc3RvciAvZm9vL2JhciAvOi9iYXIgMAorYW5jZXN0b3IgL2Zvby9iYXIgL2ZvbyA0CithbmNlc3RvciAvZm9vL2JhciAvZm9vOi9iYXIgNAorYW5jZXN0b3IgL2Zvby9iYXIgL2JhciAtMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJpcF9wYXRoX3N1ZmZpeCcgJworCXRlc3QgYzovbXN5c2dpdCA9ICQodGVzdC10b29sIHBhdGgtdXRpbHMgc3RyaXBfcGF0aF9zdWZmaXggXAorCQljOi9tc3lzZ2l0L2xpYmV4ZWMvL2dpdC1jb3JlIGxpYmV4ZWMvZ2l0LWNvcmUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29sdXRlIHBhdGggcmVqZWN0cyB0aGUgZW1wdHkgc3RyaW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhdGgtdXRpbHMgYWJzb2x1dGVfcGF0aCAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICc8ZHJpdmUtbGV0dGVyPjpcXGFiYyBpcyBhbiBhYnNvbHV0ZSBwYXRoJyAnCisJZm9yIGxldHRlciBpbiA6IFwiIEMgWiAxIMOkCisJZG8KKwkJcGF0aD0kbGV0dGVyOlxcYWJjICYmCisJCWFic29sdXRlPSIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIGFic29sdXRlX3BhdGggIiRwYXRoIikiICYmCisJCXRlc3QgIiRwYXRoIiA9ICIkYWJzb2x1dGUiIHx8IHJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsIHBhdGggcmVqZWN0cyB0aGUgZW1wdHkgc3RyaW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVggJ3JlYWwgcGF0aCB3b3JrcyBvbiBhYnNvbHV0ZSBwYXRocyAxJyAnCisJbm9wYXRoPSJob3BlZnVsbHktYWJzZW50LXBhdGgiICYmCisJdGVzdCAiLyIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIi8iKSIgJiYKKwl0ZXN0ICIvJG5vcGF0aCIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIi8kbm9wYXRoIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWwgcGF0aCB3b3JrcyBvbiBhYnNvbHV0ZSBwYXRocyAyJyAnCisJbm9wYXRoPSJob3BlZnVsbHktYWJzZW50LXBhdGgiICYmCisJIyBGaW5kIGFuIGV4aXN0aW5nIHRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIHRoZSByZW1haW5pbmcgdGVzdHM6CisJZD0kKHB3ZCAtUCB8IHNlZCAtZSAic3xeXChbXi9dKi9bXi9dKlwpLy4qfFwxfCIpICYmCisJdGVzdCAiJGQiID0gIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIkZCIpIiAmJgorCXRlc3QgIiRkLyRub3BhdGgiID0gIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIkZC8kbm9wYXRoIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVggJ3JlYWwgcGF0aCByZW1vdmVzIGV4dHJhIGxlYWRpbmcgc2xhc2hlcycgJworCW5vcGF0aD0iaG9wZWZ1bGx5LWFic2VudC1wYXRoIiAmJgorCXRlc3QgIi8iID0gIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIvLy8iKSIgJiYKKwl0ZXN0ICIvJG5vcGF0aCIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIi8vLyRub3BhdGgiKSIgJiYKKwkjIEZpbmQgYW4gZXhpc3RpbmcgdG9wLWxldmVsIGRpcmVjdG9yeSBmb3IgdGhlIHJlbWFpbmluZyB0ZXN0czoKKwlkPSQocHdkIC1QIHwgc2VkIC1lICJzfF5cKFteL10qL1teL10qXCkvLip8XDF8IikgJiYKKwl0ZXN0ICIkZCIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIi8vJGQiKSIgJiYKKwl0ZXN0ICIkZC8kbm9wYXRoIiA9ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiLy8kZC8kbm9wYXRoIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWwgcGF0aCByZW1vdmVzIG90aGVyIGV4dHJhIHNsYXNoZXMnICcKKwlub3BhdGg9ImhvcGVmdWxseS1hYnNlbnQtcGF0aCIgJiYKKwkjIEZpbmQgYW4gZXhpc3RpbmcgdG9wLWxldmVsIGRpcmVjdG9yeSBmb3IgdGhlIHJlbWFpbmluZyB0ZXN0czoKKwlkPSQocHdkIC1QIHwgc2VkIC1lICJzfF5cKFteL10qL1teL10qXCkvLip8XDF8IikgJiYKKwl0ZXN0ICIkZCIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRkLy8vIikiICYmCisJdGVzdCAiJGQvJG5vcGF0aCIgPSAiJCh0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRkLy8vJG5vcGF0aCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdyZWFsIHBhdGggd29ya3Mgb24gc3ltbGlua3MnICcKKwlta2RpciBmaXJzdCAmJgorCWxuIC1zIC4uLy5naXQgZmlyc3QvLmdpdCAmJgorCW1rZGlyIHNlY29uZCAmJgorCWxuIC1zIC4uL2ZpcnN0IHNlY29uZC9vdGhlciAmJgorCW1rZGlyIHRoaXJkICYmCisJZGlyPSIkKGNkIC5naXQ7IHB3ZCAtUCkiICYmCisJZGlyMj10aGlyZC8uLi9zZWNvbmQvb3RoZXIvLmdpdCAmJgorCXRlc3QgIiRkaXIiID0gIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICRkaXIyKSIgJiYKKwlmaWxlPSIkZGlyIi9pbmRleCAmJgorCXRlc3QgIiRmaWxlIiA9ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAkZGlyMi9pbmRleCkiICYmCisJYmFzZW5hbWU9Ymx1YiAmJgorCXRlc3QgIiRkaXIvJGJhc2VuYW1lIiA9ICIkKGNkIC5naXQgJiYgdGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIkYmFzZW5hbWUiKSIgJiYKKwlsbiAtcyAuLi9maXJzdC9maWxlIC5naXQvc3ltbCAmJgorCXN5bT0iJChjZCBmaXJzdDsgcHdkIC1QKSIvZmlsZSAmJgorCXRlc3QgIiRzeW0iID0gIiQodGVzdC10b29sIHBhdGgtdXRpbHMgcmVhbF9wYXRoICIkZGlyMi9zeW1sIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3ByZWZpeF9wYXRoIHdvcmtzIHdpdGggYWJzb2x1dGUgcGF0aHMgdG8gd29yayB0cmVlIHN5bWxpbmtzJyAnCisJbG4gLXMgdGFyZ2V0IHN5bWxpbmsgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCBwYXRoLXV0aWxzIHByZWZpeF9wYXRoIHByZWZpeCAiJChwd2QpL3N5bWxpbmsiKSIgPSAic3ltbGluayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlZml4X3BhdGggd29ya3Mgd2l0aCBvbmx5IGFic29sdXRlIHBhdGggdG8gd29yayB0cmVlJyAnCisJZWNobyAiIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0LXRvb2wgcGF0aC11dGlscyBwcmVmaXhfcGF0aCBwcmVmaXggIiQocHdkKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmaXhfcGF0aCByZWplY3RzIGFic29sdXRlIHBhdGggdG8gZGlyIHdpdGggc2FtZSBiZWdpbm5pbmcgYXMgd29yayB0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHBhdGgtdXRpbHMgcHJlZml4X3BhdGggcHJlZml4ICIkKHB3ZClhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwcmVmaXhfcGF0aCB3b3JrcyB3aXRoIGFic29sdXRlIHBhdGggdG8gYSBzeW1saW5rIHRvIHdvcmsgdHJlZSBoYXZpbmcgIHNhbWUgYmVnaW5uaW5nIGFzIHdvcmsgdHJlZScgJworCWdpdCBpbml0IHJlcG8gJiYKKwlsbiAtcyByZXBvIHJlcG9saW5rICYmCisJdGVzdCAiYSIgPSAiJChjZCByZXBvICYmIHRlc3QtdG9vbCBwYXRoLXV0aWxzIHByZWZpeF9wYXRoIHByZWZpeCAiJChwd2QpLy4uL3JlcG9saW5rL2EiKSIKKycKKworcmVsYXRpdmVfcGF0aCAvZm9vL2EvYi9jLwkvZm9vL2EvYi8JYy8KK3JlbGF0aXZlX3BhdGggL2Zvby9hL2IvYy8JL2Zvby9hL2IJYy8KK3JlbGF0aXZlX3BhdGggL2Zvby9hLy9iLy9jLwkvLy9mb28vYS9iLy8JYy8JCVBPU0lYCityZWxhdGl2ZV9wYXRoIC9mb28vYS9iCQkvZm9vL2EvYgkuLworcmVsYXRpdmVfcGF0aCAvZm9vL2EvYi8JCS9mb28vYS9iCS4vCityZWxhdGl2ZV9wYXRoIC9mb28vYQkJL2Zvby9hL2IJLi4vCityZWxhdGl2ZV9wYXRoIC8JCQkvZm9vL2EvYi8JLi4vLi4vLi4vCityZWxhdGl2ZV9wYXRoIC9mb28vYS9jCQkvZm9vL2EvYi8JLi4vYworcmVsYXRpdmVfcGF0aCAvZm9vL2EvYwkJL2Zvby9hL2IJLi4vYworcmVsYXRpdmVfcGF0aCAvZm9vL3gveQkJL2Zvby9hL2IvCS4uLy4uL3gveQorcmVsYXRpdmVfcGF0aCAvZm9vL2EvYgkJIjxlbXB0eT4iCS9mb28vYS9iCityZWxhdGl2ZV9wYXRoIC9mb28vYS9iIAkJIjxudWxsPiIJL2Zvby9hL2IKK3JlbGF0aXZlX3BhdGggZm9vL2EvYi9jLwlmb28vYS9iLwljLworcmVsYXRpdmVfcGF0aCBmb28vYS9iL2MvCWZvby9hL2IJCWMvCityZWxhdGl2ZV9wYXRoIGZvby9hL2IvL2MJZm9vL2EvL2IJYworcmVsYXRpdmVfcGF0aCBmb28vYS9iLwkJZm9vL2EvYi8JLi8KK3JlbGF0aXZlX3BhdGggZm9vL2EvYi8JCWZvby9hL2IJCS4vCityZWxhdGl2ZV9wYXRoIGZvby9hCQlmb28vYS9iCQkuLi8KK3JlbGF0aXZlX3BhdGggZm9vL3gveQkJZm9vL2EvYgkJLi4vLi4veC95CityZWxhdGl2ZV9wYXRoIGZvby9hL2MJCWZvby9hL2IJCS4uL2MKK3JlbGF0aXZlX3BhdGggZm9vL2EvYgkJL2Zvby94L3kJZm9vL2EvYgorcmVsYXRpdmVfcGF0aCAvZm9vL2EvYgkJZm9vL3gveQkJL2Zvby9hL2IKK3JlbGF0aXZlX3BhdGggZDovYS9iCQlEOi9hL2MJCS4uL2IJCU1JTkdXCityZWxhdGl2ZV9wYXRoIEM6L2EvYgkJRDovYS9jCQlDOi9hL2IJCU1JTkdXCityZWxhdGl2ZV9wYXRoIGZvby9hL2IJCSI8ZW1wdHk+Iglmb28vYS9iCityZWxhdGl2ZV9wYXRoIGZvby9hL2IgCQkiPG51bGw+Iglmb28vYS9iCityZWxhdGl2ZV9wYXRoICI8ZW1wdHk+IgkJL2Zvby9hL2IJLi8KK3JlbGF0aXZlX3BhdGggIjxlbXB0eT4iCQkiPGVtcHR5PiIJLi8KK3JlbGF0aXZlX3BhdGggIjxlbXB0eT4iCQkiPG51bGw+IgkuLworcmVsYXRpdmVfcGF0aCAiPG51bGw+IgkJIjxlbXB0eT4iCS4vCityZWxhdGl2ZV9wYXRoICI8bnVsbD4iCQkiPG51bGw+IgkuLworcmVsYXRpdmVfcGF0aCAiPG51bGw+IgkJL2Zvby9hL2IJLi8KKwordGVzdF9naXRfcGF0aCBBPUIgICAgICAgICAgICAgICAgaW5mby9ncmFmdHMgLmdpdC9pbmZvL2dyYWZ0cwordGVzdF9naXRfcGF0aCBHSVRfR1JBRlRfRklMRT1mb28gaW5mby9ncmFmdHMgZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9HUkFGVF9GSUxFPWZvbyBpbmZvLy8vLy9ncmFmdHMgZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9JTkRFWF9GSUxFPWZvbyBpbmRleCBmb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0lOREVYX0ZJTEU9Zm9vIGluZGV4L2ZvbyAuZ2l0L2luZGV4L2ZvbwordGVzdF9naXRfcGF0aCBHSVRfSU5ERVhfRklMRT1mb28gaW5kZXgyIC5naXQvaW5kZXgyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmYWtlIG9iamVjdHMgZGlyZWN0b3J5IGZvbycgJ21rZGlyIGZvbycKK3Rlc3RfZ2l0X3BhdGggR0lUX09CSkVDVF9ESVJFQ1RPUlk9Zm9vIG9iamVjdHMgZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9PQkpFQ1RfRElSRUNUT1JZPWZvbyBvYmplY3RzL2ZvbyBmb28vZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9PQkpFQ1RfRElSRUNUT1JZPWZvbyBvYmplY3RzMiAuZ2l0L29iamVjdHMyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21tb24gcmVwb3NpdG9yeScgJ2dpdCAtLWdpdC1kaXI9YmFyIGluaXQnCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBpbmRleCAgICAgICAgICAgICAgICAgICAgLmdpdC9pbmRleAordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgaW5kZXgubG9jayAgICAgICAgICAgICAgIC5naXQvaW5kZXgubG9jawordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgSEVBRCAgICAgICAgICAgICAgICAgICAgIC5naXQvSEVBRAordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9IRUFEICAgICAgICAgICAgICAgIC5naXQvbG9ncy9IRUFECit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL0hFQUQubG9jayAgICAgICAgICAgLmdpdC9sb2dzL0hFQUQubG9jawordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2Jpc2VjdC9mb28gICAgIC5naXQvbG9ncy9yZWZzL2Jpc2VjdC9mb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcyAgICAgICAgICAgICAgICBiYXIvbG9ncy9yZWZzCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvICAgICAgICAgICAgICAgYmFyL2xvZ3MvcmVmcy8KK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9iaXNlYy9mb28gICAgICBiYXIvbG9ncy9yZWZzL2Jpc2VjL2ZvbwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2Jpc2VjICAgICAgICAgIGJhci9sb2dzL3JlZnMvYmlzZWMKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9iaXNlY3Rmb28gICAgICBiYXIvbG9ncy9yZWZzL2Jpc2VjdGZvbwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgb2JqZWN0cyAgICAgICAgICAgICAgICAgIGJhci9vYmplY3RzCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBvYmplY3RzL2JhciAgICAgICAgICAgICAgYmFyL29iamVjdHMvYmFyCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBpbmZvL2V4Y2x1ZGUgICAgICAgICAgICAgYmFyL2luZm8vZXhjbHVkZQordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgaW5mby9ncmFmdHMgICAgICAgICAgICAgIGJhci9pbmZvL2dyYWZ0cwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgaW5mby9zcGFyc2UtY2hlY2tvdXQgICAgIC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGluZm8vL3NwYXJzZS1jaGVja291dCAgICAuZ2l0L2luZm8vL3NwYXJzZS1jaGVja291dAordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgcmVtb3Rlcy9iYXIgICAgICAgICAgICAgIGJhci9yZW1vdGVzL2JhcgordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgYnJhbmNoZXMvYmFyICAgICAgICAgICAgIGJhci9icmFuY2hlcy9iYXIKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgICBiYXIvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgcmVmcy9oZWFkcy9tYXN0ZXIgICAgICAgIGJhci9yZWZzL2hlYWRzL21hc3RlcgordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgcmVmcy9iaXNlY3QvZm9vICAgICAgICAgIC5naXQvcmVmcy9iaXNlY3QvZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBob29rcy9tZSAgICAgICAgICAgICAgICAgYmFyL2hvb2tzL21lCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBjb25maWcgICAgICAgICAgICAgICAgICAgYmFyL2NvbmZpZwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgcGFja2VkLXJlZnMgICAgICAgICAgICAgIGJhci9wYWNrZWQtcmVmcwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgc2hhbGxvdyAgICAgICAgICAgICAgICAgIGJhci9zaGFsbG93Cit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBjb21tb24gICAgICAgICAgICAgICAgICAgYmFyL2NvbW1vbgordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgY29tbW9uL2ZpbGUgICAgICAgICAgICAgIGJhci9jb21tb24vZmlsZQorCisjIEluIHRoZSB0ZXN0cyBiZWxvdywgJChwd2QpIG11c3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIGEgbmF0aXZlIHBhdGggb24KKyMgV2luZG93cyBhbmQgYXZvaWRzIE1TWVMncyBwYXRoIG1hbmdsaW5nICh3aGljaCBzaW1wbGlmaWVzICJmb28vLi4vYmFyIiBhbmQKKyMgc3RyaXBzIHRoZSBkb3QgZnJvbSB0cmFpbGluZyAiLy4iKS4KKwordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIuLi8iICIuLi9mb28iICIuLi9zdWJtb2R1bGUiICIuLi8uLi9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIi4uLyIgIi4uL2Zvby9iYXIiICIuLi9zdWJtb2R1bGUiICIuLi8uLi9mb28vc3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIuLi8iICIuLi9mb28vc3VibW9kdWxlIiAiLi4vc3VibW9kdWxlIiAiLi4vLi4vZm9vL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiLi4vIiAiLi9mb28iICIuLi9zdWJtb2R1bGUiICIuLi9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIi4uLyIgIi4vZm9vL2JhciIgIi4uL3N1Ym1vZHVsZSIgIi4uL2Zvby9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIi4uLy4uLy4uLyIgIi4uL2Zvby9iYXIiICIuLi9zdWIvYS9iL2MiICIuLi8uLi8uLi8uLi9mb28vc3ViL2EvYi9jIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIuLi8iICIkKHB3ZCkvYWRkdGVzdCIgIi4uL3JlcG8iICIkKHB3ZCkvcmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiLi4vIiAiZm9vL2JhciIgIi4uL3N1Ym1vZHVsZSIgIi4uL2Zvby9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIi4uLyIgImZvbyIgIi4uL3N1Ym1vZHVsZSIgIi4uL3N1Ym1vZHVsZSIKKwordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIuLi9mb28vYmFyIiAiLi4vc3ViL2EvYi9jIiAiLi4vZm9vL3N1Yi9hL2IvYyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiLi4vZm9vL2JhciIgIi4uL3N1Yi9hL2IvYy8iICIuLi9mb28vc3ViL2EvYi9jIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIuLi9mb28vYmFyLyIgIi4uL3N1Yi9hL2IvYyIgIi4uL2Zvby9zdWIvYS9iL2MiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIi4uL2Zvby9iYXIiICIuLi9zdWJtb2R1bGUiICIuLi9mb28vc3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIuLi9mb28vc3VibW9kdWxlIiAiLi4vc3VibW9kdWxlIiAiLi4vZm9vL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiLi4vZm9vIiAiLi4vc3VibW9kdWxlIiAiLi4vc3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIuL2Zvby9iYXIiICIuLi9zdWJtb2R1bGUiICJmb28vc3VibW9kdWxlIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIuL2ZvbyIgIi4uL3N1Ym1vZHVsZSIgInN1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiLy9zb21ld2hlcmUgZWxzZS9yZXBvIiAiLi4vc3VicmVwbyIgIi8vc29tZXdoZXJlIGVsc2Uvc3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiLy9zb21ld2hlcmUgZWxzZS9yZXBvIiAiLi4vLi4vc3VicmVwbyIgIi8vc3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiLy9zb21ld2hlcmUgZWxzZS9yZXBvIiAiLi4vLi4vLi4vc3VicmVwbyIgIi9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIvL3NvbWV3aGVyZSBlbHNlL3JlcG8iICIuLi8uLi8uLi8uLi9zdWJyZXBvIiAic3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpL3N1YnN1cGVyX3VwZGF0ZV9yIiAiLi4vc3Vic3Vic3VwZXJfdXBkYXRlX3IiICIkKHB3ZCkvc3Vic3Vic3VwZXJfdXBkYXRlX3IiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIiQocHdkKS9zdXBlcl91cGRhdGVfcjIiICIuLi9zdWJzdXBlcl91cGRhdGVfciIgIiQocHdkKS9zdWJzdXBlcl91cGRhdGVfciIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpLy4iICIuLi8uIiAiJChwd2QpLy4iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIiQocHdkKSIgIi4vLiIgIiQocHdkKS8uIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICIkKHB3ZCkvYWRkdGVzdCIgIi4uL3JlcG8iICIkKHB3ZCkvcmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpIiAiLi/DpSDDpMO2IiAiJChwd2QpL8OlIMOkw7YiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIiQocHdkKS8uIiAiLi4vc3VibW9kdWxlIiAiJChwd2QpL3N1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiJChwd2QpL3N1Ym1vZHVsZSIgIi4uL3N1Ym1vZHVsZSIgIiQocHdkKS9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIiQocHdkKS9ob21lMi8uLi9yZW1vdGUiICIuLi9idW5kbGUxIiAiJChwd2QpL2hvbWUyLy4uL2J1bmRsZTEiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgIiQocHdkKS9zdWJtb2R1bGVfdXBkYXRlX3JlcG8iICIuLy4iICIkKHB3ZCkvc3VibW9kdWxlX3VwZGF0ZV9yZXBvLy4iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgImZpbGU6Ly8vdG1wL3JlcG8iICIuLi9zdWJyZXBvIiAiZmlsZTovLy90bXAvc3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiZm9vL2JhciIgIi4uL3N1Ym1vZHVsZSIgImZvby9zdWJtb2R1bGUiCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgImZvbyIgIi4uL3N1Ym1vZHVsZSIgInN1Ym1vZHVsZSIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAiaGVscGVyOjovL2hvc3RuYW1lL3JlcG8iICIuLi9zdWJyZXBvIiAiaGVscGVyOjovL2hvc3RuYW1lL3N1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgImhlbHBlcjo6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vc3VicmVwbyIgImhlbHBlcjo6Ly9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJoZWxwZXI6Oi8vaG9zdG5hbWUvcmVwbyIgIi4uLy4uLy4uL3N1YnJlcG8iICJoZWxwZXI6Oi9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJoZWxwZXI6Oi8vaG9zdG5hbWUvcmVwbyIgIi4uLy4uLy4uLy4uL3N1YnJlcG8iICJoZWxwZXI6OnN1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgImhlbHBlcjo6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vLi4vLi4vLi4vc3VicmVwbyIgImhlbHBlcjpzdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJoZWxwZXI6Oi8vaG9zdG5hbWUvcmVwbyIgIi4uLy4uLy4uLy4uLy4uLy4uL3N1YnJlcG8iICIuOnN1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgInNzaDovL2hvc3RuYW1lL3JlcG8iICIuLi9zdWJyZXBvIiAic3NoOi8vaG9zdG5hbWUvc3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAic3NoOi8vaG9zdG5hbWUvcmVwbyIgIi4uLy4uL3N1YnJlcG8iICJzc2g6Ly9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJzc2g6Ly9ob3N0bmFtZS9yZXBvIiAiLi4vLi4vLi4vc3VicmVwbyIgInNzaDovc3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAic3NoOi8vaG9zdG5hbWUvcmVwbyIgIi4uLy4uLy4uLy4uL3N1YnJlcG8iICJzc2g6c3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAic3NoOi8vaG9zdG5hbWUvcmVwbyIgIi4uLy4uLy4uLy4uLy4uL3N1YnJlcG8iICIuOnN1YnJlcG8iCit0ZXN0X3N1Ym1vZHVsZV9yZWxhdGl2ZV91cmwgIihudWxsKSIgInNzaDovL2hvc3RuYW1lOjIyL3JlcG8iICIuLi9zdWJyZXBvIiAic3NoOi8vaG9zdG5hbWU6MjIvc3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAidXNlckBob3N0OnBhdGgvdG8vcmVwbyIgIi4uL3N1YnJlcG8iICJ1c2VyQGhvc3Q6cGF0aC90by9zdWJyZXBvIgordGVzdF9zdWJtb2R1bGVfcmVsYXRpdmVfdXJsICIobnVsbCkiICJ1c2VyQGhvc3Q6cmVwbyIgIi4uL3N1YnJlcG8iICJ1c2VyQGhvc3Q6c3VicmVwbyIKK3Rlc3Rfc3VibW9kdWxlX3JlbGF0aXZlX3VybCAiKG51bGwpIiAidXNlckBob3N0OnJlcG8iICIuLi8uLi9zdWJyZXBvIiAiLjpzdWJyZXBvIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCAuZ2l0bW9kdWxlcycgJworCXRlc3QtdG9vbCBwYXRoLXV0aWxzIGlzX2RvdGdpdG1vZHVsZXMgXAorCQkuZ2l0bW9kdWxlcyBcCisJCVwKKwkJLmdpdCR7dTIwMGN9bW9kdWxlcyBcCisJCVwKKwkJLkdpdG1vZHVsZXMgXAorCQkuZ2l0bW9kdWxlUyBcCisJCVwKKwkJIi5naXRtb2R1bGVzICIgXAorCQkiLmdpdG1vZHVsZXMuIiBcCisJCSIuZ2l0bW9kdWxlcyAgIiBcCisJCSIuZ2l0bW9kdWxlcy4gIiBcCisJCSIuZ2l0bW9kdWxlcyAuIiBcCisJCSIuZ2l0bW9kdWxlcy4uIiBcCisJCSIuZ2l0bW9kdWxlcyAgICIgXAorCQkiLmdpdG1vZHVsZXMuICAiIFwKKwkJIi5naXRtb2R1bGVzIC4gIiBcCisJCSIuZ2l0bW9kdWxlcyAgLiIgXAorCQlcCisJCSIuR2l0bW9kdWxlcyAiIFwKKwkJIi5HaXRtb2R1bGVzLiIgXAorCQkiLkdpdG1vZHVsZXMgICIgXAorCQkiLkdpdG1vZHVsZXMuICIgXAorCQkiLkdpdG1vZHVsZXMgLiIgXAorCQkiLkdpdG1vZHVsZXMuLiIgXAorCQkiLkdpdG1vZHVsZXMgICAiIFwKKwkJIi5HaXRtb2R1bGVzLiAgIiBcCisJCSIuR2l0bW9kdWxlcyAuICIgXAorCQkiLkdpdG1vZHVsZXMgIC4iIFwKKwkJXAorCQlHSVRNT0R+MSBcCisJCWdpdG1vZH4xIFwKKwkJR0lUTU9EfjIgXAorCQlnaXRtb2R+MyBcCisJCUdJVE1PRH40IFwKKwkJXAorCQkiR0lUTU9EfjEgIiBcCisJCSJnaXRtb2R+Mi4iIFwKKwkJIkdJVE1PRH4zICAiIFwKKwkJImdpdG1vZH40LiAiIFwKKwkJIkdJVE1PRH4xIC4iIFwKKwkJImdpdG1vZH4yICAgIiBcCisJCSJHSVRNT0R+My4gICIgXAorCQkiZ2l0bW9kfjQgLiAiIFwKKwkJXAorCQlHSTdFQkF+MSBcCisJCWdpN2ViYX45IFwKKwkJXAorCQlHSTdFQn4xMCBcCisJCUdJN0VCfjExIFwKKwkJR0k3RUJ+OTkgXAorCQlHSTdFQn4xMCBcCisJCUdJN0V+MTAwIFwKKwkJR0k3RX4xMDEgXAorCQlHSTdFfjk5OSBcCisJCX4xMDAwMDAwIFwKKwkJfjk5OTk5OTkgXAorCQlcCisJCS5naXRtb2R1bGVzOlwkREFUQSBcCisJCSJnaXRtb2R+NCAuIDpcJERBVEEiIFwKKwkJXAorCQktLW5vdCBcCisJCSIuZ2l0bW9kdWxlcyB4IiAgXAorCQkiLmdpdG1vZHVsZXMgLngiIFwKKwkJXAorCQkiIC5naXRtb2R1bGVzIiBcCisJCVwKKwkJLi5naXRtb2R1bGVzIFwKKwkJXAorCQlnaXRtb2R1bGVzIFwKKwkJXAorCQkuZ2l0bW9kdWxlIFwKKwkJXAorCQkiLmdpdG1vZHVsZXMgeCAiIFwKKwkJIi5naXRtb2R1bGVzIC54IiBcCisJCVwKKwkJR0k3RUJBfiBcCisJCUdJN0VCQX4wIFwKKwkJR0k3RUJBfn4xIFwKKwkJR0k3RUJBflggXAorCQlHeDdFQkF+MSBcCisJCUdJN0VCWH4xIFwKKwkJXAorCQlHSTdFQn4xIFwKKwkJR0k3RUJ+MDEgXAorCQlHSTdFQn4xWCBcCisJCVwKKwkJLmdpdG1vZHVsZXMsOlwkREFUQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdpc192YWxpZF9wYXRoKCkgb24gV2luZG93cycgJworCXRlc3QtdG9vbCBwYXRoLXV0aWxzIGlzX3ZhbGlkX3BhdGggXAorCQl3aW4zMiBcCisJCSJ3aW4zMiB4IiBcCisJCS4uL2hlbGxvLnR4dCBcCisJCUM6XFxnaXQgXAorCQljb21tIFwKKwkJY29ub3V0LmMgXAorCQlscHROIFwKKwkJXAorCQktLW5vdCBcCisJCSJ3aW4zMiAiICBcCisJCSJ3aW4zMiAveCAiICBcCisJCSJ3aW4zMi4iICBcCisJCSJ3aW4zMiAuIC4iIFwKKwkJLi4uL2hlbGxvLnR4dCBcCisJCWNvbG9uOnRlc3QgXAorCQkiQVVYLmMiIFwKKwkJImFiYy9jb25PdXRcJCAgLnh5ei90ZXN0IiBcCisJCWxwdDggXAorCQkibHB0KiIgXAorCQlOdWwgXAorCQkiUFJOLi9hYmMiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2MS1ydW4tY29tbWFuZC5zaCBiL3QvdDAwNjEtcnVuLWNvbW1hbmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2Q1OTk2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNjEtcnVuLWNvbW1hbmQuc2gKQEAgLTAsMCArMSwyMzYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSWxhcmkgTGl1c3ZhYXJhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcnVuIGNvbW1hbmQnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmhlbGxvLXNjcmlwdCA8PC1FT0YKKwkjISRTSEVMTF9QQVRICisJY2F0IGhlbGxvLXNjcmlwdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ3N1YnByb2Nlc3MgaW5oZXJpdHMgb25seSBzdGQgaGFuZGxlcycgJworCXRlc3QtdG9vbCBydW4tY29tbWFuZCBpbmhlcml0ZWQtaGFuZGxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0X2NvbW1hbmQgcmVwb3J0cyBFTk9FTlQgKHNsYXNoKScgJworCXRlc3QtdG9vbCBydW4tY29tbWFuZCBzdGFydC1jb21tYW5kLUVOT0VOVCAuL2RvZXMtbm90LWV4aXN0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiXC4vZG9lcy1ub3QtZXhpc3QiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydF9jb21tYW5kIHJlcG9ydHMgRU5PRU5UIChubyBzbGFzaCknICcKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgc3RhcnQtY29tbWFuZC1FTk9FTlQgZG9lcy1ub3QtZXhpc3QgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJkb2VzLW5vdC1leGlzdCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bl9jb21tYW5kIGNhbiBydW4gYSBjb21tYW5kJyAnCisJY2F0IGhlbGxvLXNjcmlwdCA+aGVsbG8uc2ggJiYKKwljaG1vZCAreCBoZWxsby5zaCAmJgorCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZCAuL2hlbGxvLnNoID5hY3R1YWwgMj5lcnIgJiYKKworCXRlc3RfY21wIGhlbGxvLXNjcmlwdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKKwordGVzdF9sYXp5X3ByZXJlcSBSVU5TX0NPTU1BTkRTX0ZST01fUFdEICcKKwl3cml0ZV9zY3JpcHQgcnVucy1jb21tYW5kcy1mcm9tLXB3ZCA8PC1cRU9GICYmCisJdHJ1ZQorCUVPRgorCXJ1bnMtY29tbWFuZHMtZnJvbS1wd2QgPi9kZXYvbnVsbCAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIVJVTlNfQ09NTUFORFNfRlJPTV9QV0QgJ3J1bl9jb21tYW5kIGlzIHJlc3RyaWN0ZWQgdG8gUEFUSCcgJworCXdyaXRlX3NjcmlwdCBzaG91bGQtbm90LXJ1biA8PC1cRU9GICYmCisJZWNobyB5aWtlcworCUVPRgorCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZCBzaG91bGQtbm90LXJ1biAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInNob3VsZC1ub3QtcnVuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3J1bl9jb21tYW5kIGNhbiBydW4gYSBzY3JpcHQgd2l0aG91dCBhICMhIGxpbmUnICcKKwljYXQgPmhlbGxvIDw8LVxFT0YgJiYKKwljYXQgaGVsbG8tc2NyaXB0CisJRU9GCisJY2htb2QgK3ggaGVsbG8gJiYKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgcnVuLWNvbW1hbmQgLi9oZWxsbyA+YWN0dWFsIDI+ZXJyICYmCisKKwl0ZXN0X2NtcCBoZWxsby1zY3JpcHQgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5fY29tbWFuZCBkb2VzIG5vdCB0cnkgdG8gZXhlY3V0ZSBhIGRpcmVjdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGJpbjEgYmluMiIgJiYKKwlta2RpciAtcCBiaW4xL2dyZWV0IGJpbjIgJiYKKwl3cml0ZV9zY3JpcHQgYmluMi9ncmVldCA8PC1cRU9GICYmCisJY2F0IGJpbjIvZ3JlZXQKKwlFT0YKKworCVBBVEg9JFBXRC9iaW4xOiRQV0QvYmluMjokUEFUSCBcCisJCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZCBncmVldCA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9jbXAgYmluMi9ncmVldCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdydW5fY29tbWFuZCBwYXNzZXMgb3ZlciBub24tZXhlY3V0YWJsZSBmaWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgYmluMSBiaW4yIiAmJgorCW1rZGlyIC1wIGJpbjEgYmluMiAmJgorCXdyaXRlX3NjcmlwdCBiaW4xL2dyZWV0IDw8LVxFT0YgJiYKKwljYXQgYmluMS9ncmVldAorCUVPRgorCWNobW9kIC14IGJpbjEvZ3JlZXQgJiYKKwl3cml0ZV9zY3JpcHQgYmluMi9ncmVldCA8PC1cRU9GICYmCisJY2F0IGJpbjIvZ3JlZXQKKwlFT0YKKworCVBBVEg9JFBXRC9iaW4xOiRQV0QvYmluMjokUEFUSCBcCisJCXRlc3QtdG9vbCBydW4tY29tbWFuZCBydW4tY29tbWFuZCBncmVldCA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9jbXAgYmluMi9ncmVldCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdydW5fY29tbWFuZCByZXBvcnRzIEVBQ0NFUycgJworCWNhdCBoZWxsby1zY3JpcHQgPmhlbGxvLnNoICYmCisJY2htb2QgLXggaGVsbG8uc2ggJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgcnVuLWNvbW1hbmQgLi9oZWxsby5zaCAyPmVyciAmJgorCisJZ3JlcCAiZmF0YWw6IGNhbm5vdCBleGVjLipoZWxsby5zaCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAndW5yZWFkYWJsZSBkaXJlY3RvcnkgaW4gUEFUSCcgJworCW1rZGlyIGxvY2FsLWNvbW1hbmQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIHUrcnd4IGxvY2FsLWNvbW1hbmQgJiYgcm0gLWZyIGxvY2FsLWNvbW1hbmQiICYmCisJZ2l0IGNvbmZpZyBhbGlhcy5uaXRmb2wgIiFlY2hvIGZyb3R6IiAmJgorCWNobW9kIGEtcnggbG9jYWwtY29tbWFuZCAmJgorCSgKKwkJUEFUSD0uL2xvY2FsLWNvbW1hbmQ6JFBBVEggJiYKKwkJZ2l0IG5pdGZvbCA+YWN0dWFsCisJKSAmJgorCWVjaG8gZnJvdHogPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwtRU9GCitwcmVsb2FkZWQgb3V0cHV0IG9mIGEgY2hpbGQKK0hlbGxvCitXb3JsZAorcHJlbG9hZGVkIG91dHB1dCBvZiBhIGNoaWxkCitIZWxsbworV29ybGQKK3ByZWxvYWRlZCBvdXRwdXQgb2YgYSBjaGlsZAorSGVsbG8KK1dvcmxkCitwcmVsb2FkZWQgb3V0cHV0IG9mIGEgY2hpbGQKK0hlbGxvCitXb3JsZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bl9jb21tYW5kIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCBtb3JlIGpvYnMgYXZhaWxhYmxlIHRoYW4gdGFza3MnICcKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgcnVuLWNvbW1hbmQtcGFyYWxsZWwgNSBzaCAtYyAicHJpbnRmIFwiJXNcbiVzXG5cIiBIZWxsbyBXb3JsZCIgMj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bl9jb21tYW5kIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCBhcyBtYW55IGpvYnMgYXMgdGFza3MnICcKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgcnVuLWNvbW1hbmQtcGFyYWxsZWwgNCBzaCAtYyAicHJpbnRmIFwiJXNcbiVzXG5cIiBIZWxsbyBXb3JsZCIgMj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bl9jb21tYW5kIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCBtb3JlIHRhc2tzIHRoYW4gam9icyBhdmFpbGFibGUnICcKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgcnVuLWNvbW1hbmQtcGFyYWxsZWwgMyBzaCAtYyAicHJpbnRmIFwiJXNcbiVzXG5cIiBIZWxsbyBXb3JsZCIgMj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8LUVPRgorcHJlbG9hZGVkIG91dHB1dCBvZiBhIGNoaWxkCithc2tpbmcgZm9yIGEgcXVpY2sgc3RvcAorcHJlbG9hZGVkIG91dHB1dCBvZiBhIGNoaWxkCithc2tpbmcgZm9yIGEgcXVpY2sgc3RvcAorcHJlbG9hZGVkIG91dHB1dCBvZiBhIGNoaWxkCithc2tpbmcgZm9yIGEgcXVpY2sgc3RvcAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bl9jb21tYW5kIGlzIGFza2VkIHRvIGFib3J0IGdyYWNlZnVsbHknICcKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgcnVuLWNvbW1hbmQtYWJvcnQgMyBmYWxzZSAyPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwtRU9GCitubyBmdXJ0aGVyIGpvYnMgYXZhaWxhYmxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuX2NvbW1hbmQgb3V0cHV0cyAnICcKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgcnVuLWNvbW1hbmQtbm8tam9icyAzIHNoIC1jICJwcmludGYgXCIlc1xuJXNcblwiIEhlbGxvIFdvcmxkIiAyPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF90cmFjZSAoKSB7CisJZXhwZWN0PSIkMSIKKwlzaGlmdAorCUdJVF9UUkFDRT0xIHRlc3QtdG9vbCBydW4tY29tbWFuZCAiJEAiIHJ1bi1jb21tYW5kIHRydWUgMj4mMSA+L2Rldi9udWxsIHwgXAorCQlzZWQgLWUgJ3MvLiogcnVuX2NvbW1hbmQ6IC8vJyAtZSAnL3RyYWNlOiAuKi9kJyBcCisJCQktZSAnL1JVTlRJTUVfUFJFRklYIHJlcXVlc3RlZC9kJyA+YWN0dWFsICYmCisJZWNobyAiJGV4cGVjdCB0cnVlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfVFJBQ0Ugd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnICcKKwl0ZXN0X3RyYWNlICJhYmM9MSBkZWY9MiIgZW52IGFiYz0xIGVudiBkZWY9MiAmJgorCXRlc3RfdHJhY2UgImFiYz0yIiBlbnYgYWJjIGVudiBhYmM9MSBlbnYgYWJjPTIgJiYKKwl0ZXN0X3RyYWNlICJhYmM9MiIgZW52IGFiYyBlbnYgYWJjPTIgJiYKKwkoCisJCWFiYz0xICYmIGV4cG9ydCBhYmMgJiYKKwkJdGVzdF90cmFjZSAiZGVmPTEiIGVudiBhYmM9MSBlbnYgZGVmPTEKKwkpICYmCisJKAorCQlhYmM9MSAmJiBleHBvcnQgYWJjICYmCisJCXRlc3RfdHJhY2UgImRlZj0xIiBlbnYgYWJjIGVudiBhYmM9MSBlbnYgZGVmPTEKKwkpICYmCisJdGVzdF90cmFjZSAiZGVmPTEiIGVudiBub24tZXhpc3QgZW52IGRlZj0xICYmCisJdGVzdF90cmFjZSAiYWJjPTIiIGVudiBhYmM9MSBlbnYgYWJjIGVudiBhYmM9MiAmJgorCSgKKwkJYWJjPTEgZGVmPTIgJiYgZXhwb3J0IGFiYyBkZWYgJiYKKwkJdGVzdF90cmFjZSAidW5zZXQgYWJjIGRlZjsiIGVudiBhYmMgZW52IGRlZgorCSkgJiYKKwkoCisJCWFiYz0xIGRlZj0yICYmIGV4cG9ydCBhYmMgZGVmICYmCisJCXRlc3RfdHJhY2UgInVuc2V0IGRlZjsgYWJjPTMiIGVudiBhYmMgZW52IGRlZiBlbnYgYWJjPTMKKwkpICYmCisJKAorCQlhYmM9MSAmJiBleHBvcnQgYWJjICYmCisJCXRlc3RfdHJhY2UgInVuc2V0IGFiYzsiIGVudiBhYmM9MiBlbnYgYWJjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICd2ZXJpZnkgY3VybGllcyBhcmUgcXVvdGVkIHByb3Blcmx5JyAnCisJOiBmb3JjZSB0aGUgcmV2LXBhcnNlIHRocm91Z2ggdGhlIE1TWVMyIEJhc2ggJiYKKwlnaXQgLWMgYWxpYXMucj0iIWdpdCByZXYtcGFyc2UiIHIgLS0gYXtifWMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwktLQorCWF7Yn1jCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdjYW4gc3Bhd24gLmJhdCB3aXRoIGFyZ3ZbMF0gY29udGFpbmluZyBzcGFjZXMnICcKKwliYXQ9IiRUUkFTSF9ESVJFQ1RPUlkvYmF0IHdpdGggc3BhY2VzIGluIG5hbWUuYmF0IiAmJgorCisJIyBFdmVyeSAuYmF0IGludm9jYXRpb24gd2lsbCBsb2cgaXRzIGFyZ3VtZW50cyB0byBmaWxlICJvdXQiCisJcm0gLWYgb3V0ICYmCisJZWNobyAiZWNobyAlKiA+Pm91dCIgPiIkYmF0IiAmJgorCisJIyBBc2sgZ2l0IHRvIGludm9rZSAuYmF0OyBjbG9uZSB3aWxsIGZhaWwgZHVlIHRvIGZha2UgU1NIIGhlbHBlcgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfU1NIPSIkYmF0IiBnaXQgY2xvbmUgbXlob3N0OnNyYyBzc2gtY2xvbmUgJiYKKworCSMgU3Bhd25pbmcgLmJhdCBjYW4gZmFpbCBpZiB0aGVyZSBhcmUgdHdvIHF1b3RlZCBjbWQuZXhlIGFyZ3VtZW50cy4KKwkjIC5iYXQgaXRzZWxmIGlzIGZpcnN0IChkdWUgdG8gc3BhY2VzIGluIG5hbWUpLCBzbyBqdXN0IG9uZSBtb3JlIGlzCisJIyBuZWVkZWQgdG8gdmVyaWZ5LiBHSVRfU1NIIHdpbGwgaW52b2tlIC5iYXQgbXVsdGlwbGUgdGltZXM6CisJIyAxKSAtRyBteWhvc3QKKwkjIDIpIG15aG9zdCAiZ2l0LXVwbG9hZC1wYWNrIHNyYyIKKwkjIEZpcnN0IGludm9jYXRpb24gd2lsbCBhbHdheXMgc3VjY2VlZC4gVGVzdCB0aGUgc2Vjb25kIG9uZS4KKwlncmVwICJnaXQtdXBsb2FkLXBhY2siIG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjItcmV2aXNpb24td2Fsa2luZy5zaCBiL3QvdDAwNjItcmV2aXNpb24td2Fsa2luZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTIxNTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2Mi1yZXZpc2lvbi13YWxraW5nLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgSGVpa28gVm9pZ3QKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZXZpc2lvbiB3YWxraW5nIGFwaScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+cnVuX3R3aWNlX2V4cGVjdGVkIDw8LUVPRgorMXN0CisgPiBhZGQgYgorID4gYWRkIGEKKzJuZAorID4gYWRkIGIKKyA+IGFkZCBhCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGEgPiBhICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGEiICYmCisJZWNobyBiID4gYiAmJgorCWdpdCBhZGQgYiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZpc2lvbiB3YWxraW5nIGNhbiBiZSBkb25lIHR3aWNlJyAnCisJdGVzdC10b29sIHJldmlzaW9uLXdhbGtpbmcgcnVuLXR3aWNlID5ydW5fdHdpY2VfYWN0dWFsICYmCisJdGVzdF9jbXAgcnVuX3R3aWNlX2V4cGVjdGVkIHJ1bl90d2ljZV9hY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDYzLXN0cmluZy1saXN0LnNoIGIvdC90MDA2My1zdHJpbmctbGlzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNmVlOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2My1zdHJpbmctbGlzdC5zaApAQCAtMCwwICsxLDkxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIE1pY2hhZWwgSGFnZ2VydHkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzdHJpbmcgbGlzdCBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9zcGxpdCAoKSB7CisJY2F0ID5leHBlY3RlZCAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNwbGl0ICQxIGF0ICQyLCBtYXggJDMiICIKKwkJdGVzdC10b29sIHN0cmluZy1saXN0IHNwbGl0ICckMScgJyQyJyAnJDMnID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCXRlc3QtdG9vbCBzdHJpbmctbGlzdCBzcGxpdF9pbl9wbGFjZSAnJDEnICckMicgJyQzJyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSIKK30KKwordGVzdF9zcGxpdCAiZm9vOmJhcjpiYXoiICI6IiAiLTEiIDw8RU9GCiszCitbMF06ICJmb28iCitbMV06ICJiYXIiCitbMl06ICJiYXoiCitFT0YKKwordGVzdF9zcGxpdCAiZm9vOmJhcjpiYXoiICI6IiAiMCIgPDxFT0YKKzEKK1swXTogImZvbzpiYXI6YmF6IgorRU9GCisKK3Rlc3Rfc3BsaXQgImZvbzpiYXI6YmF6IiAiOiIgIjEiIDw8RU9GCisyCitbMF06ICJmb28iCitbMV06ICJiYXI6YmF6IgorRU9GCisKK3Rlc3Rfc3BsaXQgImZvbzpiYXI6YmF6IiAiOiIgIjIiIDw8RU9GCiszCitbMF06ICJmb28iCitbMV06ICJiYXIiCitbMl06ICJiYXoiCitFT0YKKwordGVzdF9zcGxpdCAiZm9vOmJhcjoiICI6IiAiLTEiIDw8RU9GCiszCitbMF06ICJmb28iCitbMV06ICJiYXIiCitbMl06ICIiCitFT0YKKwordGVzdF9zcGxpdCAiIiAiOiIgIi0xIiA8PEVPRgorMQorWzBdOiAiIgorRU9GCisKK3Rlc3Rfc3BsaXQgIjoiICI6IiAiLTEiIDw8RU9GCisyCitbMF06ICIiCitbMV06ICIiCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCBmaWx0ZXJfc3RyaW5nX2xpc3QiICcKKwl0ZXN0ICJ4LSIgPSAieCQodGVzdC10b29sIHN0cmluZy1saXN0IGZpbHRlciAtIHkpIiAmJgorCXRlc3QgIngtIiA9ICJ4JCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgZmlsdGVyIG5vIHkpIiAmJgorCXRlc3QgeWVzID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IGZpbHRlciB5ZXMgeSkiICYmCisJdGVzdCB5ZXMgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgZmlsdGVyIG5vOnllcyB5KSIgJiYKKwl0ZXN0IHllcyA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCBmaWx0ZXIgeWVzOm5vIHkpIiAmJgorCXRlc3QgeTE6eTIgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgZmlsdGVyIHkxOnkyIHkpIiAmJgorCXRlc3QgeTI6eTEgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgZmlsdGVyIHkyOnkxIHkpIiAmJgorCXRlc3QgIngtIiA9ICJ4JCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgZmlsdGVyIHgxOngyIHkpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0ZXN0IHJlbW92ZV9kdXBsaWNhdGVzIiAnCisJdGVzdCAieC0iID0gIngkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyAtKSIgJiYKKwl0ZXN0ICJ4IiA9ICJ4JCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgIiIpIiAmJgorCXRlc3QgYSA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhKSIgJiYKKwl0ZXN0IGEgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTphKSIgJiYKKwl0ZXN0IGEgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTphOmE6YTphKSIgJiYKKwl0ZXN0IGE6YiA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmIpIiAmJgorCXRlc3QgYTpiID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YTpiKSIgJiYKKwl0ZXN0IGE6YiA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmI6YikiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmI6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmE6YjpjKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC10b29sIHN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YjpiOmMpIiAmJgorCXRlc3QgYTpiOmMgPSAiJCh0ZXN0LXRvb2wgc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTpiOmM6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmE6YjpiOmM6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3QtdG9vbCBzdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmE6YTpiOmI6YjpjOmM6YykiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2NC1zaGExLWFycmF5LnNoIGIvdC90MDA2NC1zaGExLWFycmF5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkZGE1NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDY0LXNoYTEtYXJyYXkuc2gKQEAgLTAsMCArMSw5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHRlc3RzIGZvciB0aGUgU0hBMSBhcnJheSBpbXBsZW1lbnRhdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCitlY2hvaWQgKCkgeworCXByZWZpeD0iJHsxOiskMSB9IgorCXNoaWZ0CisJd2hpbGUgdGVzdCAkIyAtZ3QgMAorCWRvCisJCWVjaG8gIiRwcmVmaXgkWkVST19PSUQiIHwgc2VkIC1lICJzLzAwLyQxL2ciCisJCXNoaWZ0CisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvcmRlcmVkIGVudW1lcmF0aW9uJyAnCisJZWNob2lkICIiIDQ0IDU1IDg4IGFhID5leHBlY3QgJiYKKwl7CisJCWVjaG9pZCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNobyBmb3JfZWFjaF91bmlxdWUKKwl9IHwgdGVzdC10b29sIHNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3JkZXJlZCBlbnVtZXJhdGlvbiB3aXRoIGR1cGxpY2F0ZSBzdXBwcmVzc2lvbicgJworCWVjaG9pZCAiIiA0NCA1NSA4OCBhYSA+ZXhwZWN0ICYmCisJeworCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG9pZCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNobyBmb3JfZWFjaF91bmlxdWUKKwl9IHwgdGVzdC10b29sIHNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwJyAnCisJeworCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG9pZCBsb29rdXAgNTUKKwl9IHwgdGVzdC10b29sIHNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCW49JChjYXQgYWN0dWFsKSAmJgorCXRlc3QgIiRuIiAtZXEgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29rdXAgbm9uLWV4aXN0aW5nIGVudHJ5JyAnCisJeworCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG9pZCBsb29rdXAgMzMKKwl9IHwgdGVzdC10b29sIHNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCW49JChjYXQgYWN0dWFsKSAmJgorCXRlc3QgIiRuIiAtbHQgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29rdXAgd2l0aCBkdXBsaWNhdGVzJyAnCisJeworCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG9pZCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNob2lkIGxvb2t1cCA1NQorCX0gfCB0ZXN0LXRvb2wgc2hhMS1hcnJheSA+YWN0dWFsICYmCisJbj0kKGNhdCBhY3R1YWwpICYmCisJdGVzdCAiJG4iIC1nZSAyICYmCisJdGVzdCAiJG4iIC1sZSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb2t1cCBub24tZXhpc3RpbmcgZW50cnkgd2l0aCBkdXBsaWNhdGVzJyAnCisJeworCQllY2hvaWQgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG9pZCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNob2lkIGxvb2t1cCA2NgorCX0gfCB0ZXN0LXRvb2wgc2hhMS1hcnJheSA+YWN0dWFsICYmCisJbj0kKGNhdCBhY3R1YWwpICYmCisJdGVzdCAiJG4iIC1sdCAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb2t1cCB3aXRoIGFsbW9zdCBkdXBsaWNhdGUgdmFsdWVzJyAnCisJIyBuLTEgNXMKKwlyb290PSQoZWNob2lkICIiIDU1KSAmJgorCXJvb3Q9JHtyb290JTV9ICYmCisJeworCQlpZDE9IiR7cm9vdH01IiAmJgorCQlpZDI9IiR7cm9vdH1mIiAmJgorCQllY2hvICJhcHBlbmQgJGlkMSIgJiYKKwkJZWNobyAiYXBwZW5kICRpZDIiICYmCisJCWVjaG9pZCBsb29rdXAgNTUKKwl9IHwgdGVzdC10b29sIHNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCW49JChjYXQgYWN0dWFsKSAmJgorCXRlc3QgIiRuIiAtZXEgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29rdXAgd2l0aCBzaW5nbGUgZHVwbGljYXRlIHZhbHVlJyAnCisJeworCQllY2hvaWQgYXBwZW5kIDU1IDU1ICYmCisJCWVjaG9pZCBsb29rdXAgNTUKKwl9IHwgdGVzdC10b29sIHNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCW49JChjYXQgYWN0dWFsKSAmJgorCXRlc3QgIiRuIiAtZ2UgMCAmJgorCXRlc3QgIiRuIiAtbGUgMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjUtc3RyY21wLW9mZnNldC5zaCBiL3QvdDAwNjUtc3RyY21wLW9mZnNldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MWZhNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2NS1zdHJjbXAtb2Zmc2V0LnNoCkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHN0cmNtcF9vZmZzZXQgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3doaWxlIHJlYWQgczEgczIgZXhwZWN0CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0cmNtcF9vZmZzZXQoJHMxLCAkczIpIiAnCisJCWVjaG8gIiRleHBlY3QiID5leHBlY3QgJiYKKwkJdGVzdC10b29sIHN0cmNtcC1vZmZzZXQgIiRzMSIgIiRzMiIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworZG9uZSA8PC1FT0YKK2FiYyBhYmMgMCAzCithYmMgZGVmIC0xIDAKK2FiYyBhYnogLTEgMgorYWJjIGFiY2RlZiAtMSAzCitFT0YKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDY2LWRpci1pdGVyYXRvci5zaCBiL3QvdDAwNjYtZGlyLWl0ZXJhdG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyOTEwZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDY2LWRpci1pdGVyYXRvci5zaApAQCAtMCwwICsxLDE0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIGRpci1pdGVyYXRvciBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciAtcCBkaXIgJiYKKwlta2RpciAtcCBkaXIvYS9iL2MvICYmCisJPmRpci9iICYmCisJPmRpci9jICYmCisJbWtkaXIgLXAgZGlyL2QvZS9kLyAmJgorCT5kaXIvYS9iL2MvZCAmJgorCT5kaXIvYS9lICYmCisJPmRpci9kL2UvZC9hICYmCisKKwlta2RpciAtcCBkaXIyL2EvYi9jLyAmJgorCT5kaXIyL2EvYi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyLWl0ZXJhdG9yIHNob3VsZCBpdGVyYXRlIHRocm91Z2ggYWxsIGZpbGVzJyAnCisJY2F0ID5leHBlY3RlZC1pdGVyYXRpb24tc29ydGVkLW91dHB1dCA8PC1FT0YgJiYKKwlbZF0gKGEpIFthXSAuL2Rpci9hCisJW2RdIChhL2IpIFtiXSAuL2Rpci9hL2IKKwlbZF0gKGEvYi9jKSBbY10gLi9kaXIvYS9iL2MKKwlbZF0gKGQpIFtkXSAuL2Rpci9kCisJW2RdIChkL2UpIFtlXSAuL2Rpci9kL2UKKwlbZF0gKGQvZS9kKSBbZF0gLi9kaXIvZC9lL2QKKwlbZl0gKGEvYi9jL2QpIFtkXSAuL2Rpci9hL2IvYy9kCisJW2ZdIChhL2UpIFtlXSAuL2Rpci9hL2UKKwlbZl0gKGIpIFtiXSAuL2Rpci9iCisJW2ZdIChjKSBbY10gLi9kaXIvYworCVtmXSAoZC9lL2QvYSkgW2FdIC4vZGlyL2QvZS9kL2EKKwlFT0YKKworCXRlc3QtdG9vbCBkaXItaXRlcmF0b3IgLi9kaXIgPm91dCAmJgorCXNvcnQgb3V0ID4uL2FjdHVhbC1pdGVyYXRpb24tc29ydGVkLW91dHB1dCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQtaXRlcmF0aW9uLXNvcnRlZC1vdXRwdXQgYWN0dWFsLWl0ZXJhdGlvbi1zb3J0ZWQtb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpci1pdGVyYXRvciBzaG91bGQgbGlzdCBmaWxlcyBpbiB0aGUgY29ycmVjdCBvcmRlcicgJworCWNhdCA+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+YWZ0ZXIgJiYKKwkJdGVzdF9jbXAgYmVmb3JlIGFmdGVyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAxMDAtcHJldmlvdXMuc2ggYi90L3QwMTAwLXByZXZpb3VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4YzBiN2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMTAwLXByZXZpb3VzLnNoCkBAIC0wLDAgKzEsNjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwcmV2aW91cyBicmFuY2ggc3ludGF4IEB7LW59JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIEB7LTF9JyAnCisJdGVzdF9jb21taXQgQSAmJgorCWdpdCBjaGVja291dCAtYiBqdW5rICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1kIEB7LTF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2p1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIEB7LTEyfSB3aGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3dpdGNoZXMgeWV0JyAnCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9bm93ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGp1bmsyICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1kIEB7LTEyfSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgQHstMX0nICcKKwlnaXQgY2hlY2tvdXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwlnaXQgY2hlY2tvdXQgQSAmJgorCXRlc3RfY29tbWl0IEMgJiYKKwl0ZXN0X2NvbW1pdCBEICYmCisJZ2l0IGJyYW5jaCAtZiBtYXN0ZXIgQiAmJgorCWdpdCBicmFuY2ggLWYgb3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIEB7LTF9ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAiTWVyZ2UgYnJhbmNoICdcJydvdGhlcidcJyciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEB7LTF9fjEnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBCICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBAey0xfX4xICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5hY3R1YWwgJiYKKwlncmVwICJNZXJnZSBicmFuY2ggJ1wnJ290aGVyJ1wnJyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEB7LTEwMH0gYmVmb3JlIGNoZWNraW5nIG91dCB0aGF0IG1hbnkgYnJhbmNoZXMgeWV0JyAnCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9bm93ICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgQiAmJgorCWdpdCBicmFuY2ggLWYgb3RoZXIgQyAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQHstMTAwfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLWcgQHstMX0nICcKKwlnaXQgY2hlY2tvdXQgLWIgbGFzdF9icmFuY2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3X2JyYW5jaCAmJgorCWVjaG8gImxhc3RfYnJhbmNoQHswfSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JWdkIEB7LTF9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QwMTAxLWF0LXN5bnRheC5zaCBiL3QvdDAxMDEtYXQtc3ludGF4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExOTk4YjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMTAxLWF0LXN5bnRheC5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndmFyaW91cyBAe3doYXRldmVyfSBzeW50YXggdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28KKycKKworY2hlY2tfYXQoKSB7CisJZWNobyAiJDIiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzICIkMSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHswfSBzaG93cyBjdXJyZW50JyAnCisJY2hlY2tfYXQgQHswfSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHsxfSBzaG93cyBvbGQnICcKKwljaGVja19hdCBAezF9IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe25vd30gc2hvd3MgY3VycmVudCcgJworCWNoZWNrX2F0IEB7bm93fSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHsyMDAxLTA5LTE3fSAoYmVmb3JlIHRoZSBmaXJzdCBjb21taXQpIHNob3dzIG9sZCcgJworCWNoZWNrX2F0IEB7MjAwMS0wOS0xN30gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbGx5IGFwcHJveGlkYXRlcyB3b3JrJyAnCisJY2hlY2tfYXQgQHszLmhvdC5kb2dzLm9uLjIwMDEtMDktMTd9IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RpY2UgbWlzc3BlbGxlZCB1cHN0cmVhbScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgQHt1c3B0cmVhbX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxhaW4gYWJvdXQgdG90YWwgbm9uc2Vuc2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0xIC0tZm9ybWF0PSVzIEB7dXR0ZXIuYm9nb3NpdHl9CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDExMC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLnNoIGIvdC90MDExMC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5OTUyOWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMTEwLXVybG1hdGNoLW5vcm1hbGl6YXRpb24uc2gKQEAgLTAsMCArMSwxODAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1cmxtYXRjaCBVUkwgbm9ybWFsaXphdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoZSBiYXNlIG5hbWUgb2YgdGhlIHRlc3QgdXJsIGZpbGVzCit0dT0iJFRFU1RfRElSRUNUT1JZL3QwMTEwL3VybCIKKworIyBOb3RlIHRoYXQgb25seSBmaWxlOiBVUkxzIHNob3VsZCBiZSBhbGxvd2VkIHdpdGhvdXQgYSBob3N0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBzY2hlbWUnICcKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICIiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiXyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWUiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOiIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6LyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZSIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOiIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImZpbGU6Ly8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiOi8vYWNtZS5jbyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4X3Rlc3Q6Ly9hY21lLmNvIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gIi10ZXN0Oi8vYWNtZS5jbyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICIwdGVzdDovL2FjbWUuY28iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiK3Rlc3Q6Ly9hY21lLmNvIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gIi50ZXN0Oi8vYWNtZS5jbyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbSU2ZTovLyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieC1UZXN0K3YxLjA6Ly9hY21lLmNvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIkFiQ2RlRjovL3guWSIpIiA9ICJhYmNkZWY6Ly94LnkvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgYXV0aG9yaXR5JyAnCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vdXNlcjpwYXNzQCIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8/IiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovLyMiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vLyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly86IiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovLzo1NTUiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImZpbGU6Ly91c2VyOnBhc3NAIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vPyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZTovLyMiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImZpbGU6Ly8vIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vOiIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vOjU1NSIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vdXNlcjpwYXNzQGhvc3QiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL0Bob3N0IiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8lMDBAaG9zdCIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8lJUBob3N0IiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2hvc3RfIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly91c2VyOnBhc3NAaG9zdC8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL0Bob3N0LyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vaG9zdC8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2hvc3Q/eCIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vaG9zdCN4IiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0L0AiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2hvc3Q/QHgiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2hvc3QjQHgiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL1s6OjFdIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9bOjoxXS8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vaG9zJTQxLyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vW2ludmFsaWQuLi4uOi8iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2ludmFsaWQuLi4uOl0vIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2ludmFsaWQuLi4uOlsvIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2ludmFsaWQuLi4uOlsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBwb3J0IGNoZWNrcycgJworCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9xQHNvbWUuaG9zdDoiICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjQ1Ni8iICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MCIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9xQHNvbWUuaG9zdDowMDAwMDAwIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9xQHNvbWUuaG9zdDowMDAwMDAxPyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MDY1NTM1IyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6NjU1MzUiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6NjU1MzYiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6OTk5OTkiICYmCisJISB0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MTAwMDAwIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjEwMDAwMSIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cDovL3FAc29tZS5ob3N0OjgwIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwczovL3FAc29tZS5ob3N0OjQ0MyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cDovL3FAc29tZS5ob3N0OjgwLyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9xQHNvbWUuaG9zdDo0NDM/IiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHA6Ly9xQDo4MDA4IiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHA6Ly86ODA4MCIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwOi8vOiIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6NDU2LyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06NDU2LyIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06LyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9bOjoxXTowMDAvIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL1s6OjFdOjAlMzAwLyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9bOjoxXToweDgwLyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9bOjoxXTo0Mjk0OTY3Mjk3LyIgJiYKKwkhIHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9bOjoxXTowMzBmLyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIHBvcnQgbm9ybWFsaXphdGlvbicgJworCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjgwMCIpIiA9ICJodHRwOi8veDo4MDAvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjA4MDAiKSIgPSAiaHR0cDovL3g6ODAwLyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwOi8veDowMDAwMDgwMCIpIiA9ICJodHRwOi8veDo4MDAvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjA2NTUzNSIpIiA9ICJodHRwOi8veDo2NTUzNS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cDovL3g6MSIpIiA9ICJodHRwOi8veDoxLyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwOi8veDo4MCIpIiA9ICJodHRwOi8veC8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cDovL3g6MDgwIikiID0gImh0dHA6Ly94LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwOi8veDowMDAwMDAwODAiKSIgPSAiaHR0cDovL3gvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHBzOi8veDo0NDMiKSIgPSAiaHR0cHM6Ly94LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwczovL3g6MDQ0MyIpIiA9ICJodHRwczovL3gvIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHBzOi8veDowMDAwMDA0NDMiKSIgPSAiaHR0cHM6Ly94LyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIGdlbmVyYWwgZXNjYXBlcycgJworCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHA6Ly94Lnk/JWZnIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIlg6Ly9XLyU3ZSU0MV4lM2EiKSIgPSAieDovL3cvfkElNUUlM0EiICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiWDovL1cvOi8/I1tdQCIpIiA9ICJ4Oi8vdy86Lz8jW11AIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIlg6Ly9XLyQmKCkqKyw7PSIpIiA9ICJ4Oi8vdy8kJigpKissOz0iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiWDovL1cvJ1wnJyIpIiA9ICJ4Oi8vdy8nXCcnIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIlg6Ly9XPydcISciKSIgPSAieDovL3cvPydcISciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICd1cmwgaGlnaC1iaXQgZXNjYXBlcycgJworCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtMSIpIikiID0gIng6Ly9xLyUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwRSUwRiUxMCUxMSUxMiIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTIiKSIpIiA9ICJ4Oi8vcS8lMTMlMTQlMTUlMTYlMTclMTglMTklMUIlMUMlMUQlMUUlMUYlN0YiICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS0zIikiKSIgPSAieDovL3EvJTgwJTgxJTgyJTgzJTg0JTg1JTg2JTg3JTg4JTg5JThBJThCJThDJThEJThFJThGIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtNCIpIikiID0gIng6Ly9xLyU5MCU5MSU5MiU5MyU5NCU5NSU5NiU5NyU5OCU5OSU5QSU5QiU5QyU5RCU5RSU5RiIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTUiKSIpIiA9ICJ4Oi8vcS8lQTAlQTElQTIlQTMlQTQlQTUlQTYlQTclQTglQTklQUElQUIlQUMlQUQlQUUlQUYiICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS02IikiKSIgPSAieDovL3EvJUIwJUIxJUIyJUIzJUI0JUI1JUI2JUI3JUI4JUI5JUJBJUJCJUJDJUJEJUJFJUJGIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtNyIpIikiID0gIng6Ly9xLyVDMCVDMSVDMiVDMyVDNCVDNSVDNiVDNyVDOCVDOSVDQSVDQiVDQyVDRCVDRSVDRiIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTgiKSIpIiA9ICJ4Oi8vcS8lRDAlRDElRDIlRDMlRDQlRDUlRDYlRDclRDglRDklREElREIlREMlREQlREUlREYiICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS05IikiKSIgPSAieDovL3EvJUUwJUUxJUUyJUUzJUU0JUU1JUU2JUU3JUU4JUU5JUVBJUVCJUVDJUVEJUVFJUVGIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtMTAiKSIpIiA9ICJ4Oi8vcS8lRjAlRjElRjIlRjMlRjQlRjUlRjYlRjclRjglRjklRkElRkIlRkMlRkQlRkUlRkYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCB1dGYtOCBlc2NhcGVzJyAnCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS0xMSIpIikiID0gIng6Ly9xLyVDMiU4MCVERiVCRiVFMCVBMCU4MCVFRiVCRiVCRCVGMCU5MCU4MCU4MCVGMCVBRiVCRiVCRCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIHVzZXJuYW1lL3Bhc3N3b3JkIGVzY2FwZXMnICcKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8vJTQxJTYyKF4pOiU3MCtkQGZvbyIpIiA9ICJ4Oi8vQWIoJTVFKTpwK2RAZm9vLyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIG5vcm1hbGl6ZWQgbGVuZ3RocycgJworCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLWwgIkh0dHA6Ly8lNGQlNjU6JTRkXiU3MEBUaGUuSG9zdCIpIiA9IDI1ICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtbCAiaHR0cDovLyU0MTolNDJAeC55LyU2MS8iKSIgPSAxNyAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLWwgImh0dHA6Ly9AeC55L14iKSIgPSAxNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgLiBhbmQgLi4gc2VnbWVudHMnICcKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8uIikiID0gIng6Ly95LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8uLyIpIiA9ICJ4Oi8veS8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uIikiID0gIng6Ly95L2EiICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uLyIpIiA9ICJ4Oi8veS9hLyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8uPyIpIiA9ICJ4Oi8veS8/IiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95Ly4vPyIpIiA9ICJ4Oi8veS8/IiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLj8iKSIgPSAieDovL3kvYT8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uLz8iKSIgPSAieDovL3kvYS8/IiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLi9iLy4uLy4vLi4vYyIpIiA9ICJ4Oi8veS9jIiAmJgorCXRlc3QgIiQodGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLi9iLy4uLy4uLy4vYy8iKSIgPSAieDovL3kvYy8iICYmCisJdGVzdCAiJCh0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uL2IvLi4vLi8uLi9jLy4vLi8uLi8uLy4iKSIgPSAieDovL3kvIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gIng6Ly95L2EvLi9iLy4uLy4vLi4vYy8uLy4vLi4vLi8uLiIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9hLy4vPy8uLy4vLi4iKSIgPSAieDovL3kvYS8/Ly4vLi8uLiIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8lMmUvIikiID0gIng6Ly95LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8lMkUvIikiID0gIng6Ly95LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9hLyUyZS4vIikiID0gIng6Ly95LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9iLy4lMkUvIikiID0gIng6Ly95LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9jLyUyZSUyRS8iKSIgPSAieDovL3kvIgorJworCisjIGh0dHA6Ly9AZm9vIHNwZWNpZmllcyBhbiBlbXB0eSB1c2VyIG5hbWUgYnV0IGRvZXMgbm90IHNwZWNpZnkgYSBwYXNzd29yZAorIyBodHRwOi8vZm9vICBzcGVjaWZpZXMgbmVpdGhlciBhIHVzZXIgbmFtZSBub3IgYSBwYXNzd29yZAorIyBTbyB0aGV5IHNob3VsZCBub3QgYmUgZXF1aXZhbGVudAordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIGVxdWl2YWxlbnRzJyAnCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dFA6Ly94IiAiSHR0cDovL1gvIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJIdHRwOi8vJTRkJTY1OiU0ZF4lNzBAVGhlLkhvc3QiICJoVFRQOi8vTWU6JTREXnBAdGhlLkhPU1Q6ODAvIiAmJgorCSEgdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHBzOi8vQHgueS9eIiAiaHR0cFM6Ly94Lnk6NDQzL14iICYmCisJdGVzdC10b29sIHVybG1hdGNoLW5vcm1hbGl6YXRpb24gImh0dHBzOi8vQHgueS9eIiAiaHR0cFM6Ly9AeC55OjA0NDMvXiIgJiYKKwl0ZXN0LXRvb2wgdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9AeC55L14vLi4vYWJjIiAiaHR0cFM6Ly9AeC55OjA0NDMvYWJjIiAmJgorCXRlc3QtdG9vbCB1cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwczovL0B4LnkvXi8uLiIgImh0dHBTOi8vQHgueTowNDQzLyIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMTEwL1JFQURNRSBiL3QvdDAxMTAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNGE1MGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMTEwL1JFQURNRQpAQCAtMCwwICsxLDkgQEAKK1RoZSB1cmwgZGF0YSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBjb250YWluIFVSTHMgd2l0aCBjaGFyYWN0ZXJzCitpbiB0aGUgcmFuZ2UgMHgwMS0weDFmIGFuZCAweDdmLTB4ZmYgdG8gdGVzdCB0aGUgcHJvcGVyIG5vcm1hbGl6YXRpb24KK29mIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMuCisKK0Egc2VsZWN0IGZldyBjaGFyYWN0ZXJzIGluIHRoZSAweDAxLTB4MWYgcmFuZ2UgYXJlIHNraXBwZWQgdG8gaGVscAorYXZvaWQgcHJvYmxlbXMgcnVubmluZyB0aGUgdGVzdCBpdHNlbGYuCisKK1RoZSB1cmxzIGFyZSBpbiB0ZXN0IGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IHJhdGhlciB0aGFuIGJlaW5nCitlbWJlZGRlZCBpbiB0aGUgdGVzdCBzY3JpcHQgZm9yIHBvcnRhYmlsaXR5LgpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtMSBiL3QvdDAxMTAvdXJsLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5MDE5YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTEKQEAgLTAsMCArMSBAQAoreDovL3EvAQIDBAUGBwgODxAREgpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtMTAgYi90L3QwMTEwL3VybC0xMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTk2NWRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtMTAKQEAgLTAsMCArMSBAQAoreDovL3Ev8PHy8/T19vf4+fr7/P3+/wpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtMTEgYi90L3QwMTEwL3VybC0xMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGE1MGYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtMTEKQEAgLTAsMCArMSBAQAoreDovL3EvwoDfv+CggO+/vfCQgIDwr7+9CmRpZmYgLS1naXQgYS90L3QwMTEwL3VybC0yIGIvdC90MDExMC91cmwtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzMzNGIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtMgpAQCAtMCwwICsxIEBACit4Oi8vcS8TFBUWFxgZGxwdHh9/CmRpZmYgLS1naXQgYS90L3QwMTEwL3VybC0zIGIvdC90MDExMC91cmwtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzc4YzdiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtMwpAQCAtMCwwICsxIEBACit4Oi8vcS+AgYKDhIWGh4iJiouMjY6PCmRpZmYgLS1naXQgYS90L3QwMTEwL3VybC00IGIvdC90MDExMC91cmwtNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjBiMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtNApAQCAtMCwwICsxIEBACit4Oi8vcS+QkZKTlJWWl5iZmpucnZ6fCmRpZmYgLS1naXQgYS90L3QwMTEwL3VybC01IGIvdC90MDExMC91cmwtNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2NkOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtNQpAQCAtMCwwICsxIEBACit4Oi8vcS+goaKjpKWmp6ipqqusra6vCmRpZmYgLS1naXQgYS90L3QwMTEwL3VybC02IGIvdC90MDExMC91cmwtNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI4M2FhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtNgpAQCAtMCwwICsxIEBACit4Oi8vcS+wsbKztLW2t7i5uru8vb6/CmRpZmYgLS1naXQgYS90L3QwMTEwL3VybC03IGIvdC90MDExMC91cmwtNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdjMTBiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtNwpAQCAtMCwwICsxIEBACit4Oi8vcS/AwcLDxMXGx8jJysvMzc7PCmRpZmYgLS1naXQgYS90L3QwMTEwL3VybC04IGIvdC90MDExMC91cmwtOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWEwYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtOApAQCAtMCwwICsxIEBACit4Oi8vcS/Q0dLT1NXW19jZ2tvc3d7fCmRpZmYgLS1naXQgYS90L3QwMTEwL3VybC05IGIvdC90MDExMC91cmwtOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ0YmVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC91cmwtOQpAQCAtMCwwICsxIEBACit4Oi8vcS/g4eLj5OXm5+jp6uvs7e7vCmRpZmYgLS1naXQgYS90L3QwMjAwLWdldHRleHQtYmFzaWMuc2ggYi90L3QwMjAwLWdldHRleHQtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODg1M2Q4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDAtZ2V0dGV4dC1iYXNpYy5zaApAQCAtMCwwICsxLDEwOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdHZXR0ZXh0IHN1cHBvcnQgZm9yIEdpdCcKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNhbml0eTogXCRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgaXMgc2V0ICh0byAkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FKSIgJworICAgIHRlc3QgLW4gIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nhbml0eTogJFRFWFRET01BSU4gaXMgZ2l0JyAnCisgICAgdGVzdCAkVEVYVERPTUFJTiA9ICJnaXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3hnZXR0ZXh0IHNhbml0eTogUGVybCBfKCkgc3RyaW5ncyBhcmUgbm90IGV4dHJhY3RlZCcgJworICAgICEgZ3JlcCAiQSBQZXJsIHN0cmluZyB4Z2V0dGV4dCB3aWxsIG5vdCBnZXQiICIkR0lUX1BPX1BBVEgiL2lzLnBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3hnZXR0ZXh0IHNhbml0eTogQ29tbWVudCBleHRyYWN0aW9uIHdpdGggLS1hZGQtY29tbWVudHMnICcKKyAgICBncmVwICJUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QiICIkVEVTVF9ESVJFQ1RPUlkiL3QwMjAwLyogfCB3YyAtbCA+ZXhwZWN0ICYmCisgICAgZ3JlcCAiVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0IiAiJEdJVF9QT19QQVRIIi9pcy5wbyAgfCB3YyAtbCA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd4Z2V0dGV4dCBzYW5pdHk6IENvbW1lbnQgZXh0cmFjdGlvbiB3aXRoIC0tYWRkLWNvbW1lbnRzIHN0b3BzIGF0IHN0YXRlbWVudHMnICcKKyAgICAhIGdyZXAgIlRoaXMgaXMgYSBwaG9ueSIgIiRHSVRfUE9fUEFUSCIvaXMucG8gJiYKKyAgICAhIGdyZXAgInRoZSBhYm92ZSBjb21tZW50IiAiJEdJVF9QT19QQVRIIi9pcy5wbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFQgJ3Nhbml0eTogJFRFWFRET01BSU5ESVIgZXhpc3RzIHdpdGhvdXQgTk9fR0VUVEVYVD1ZZXNQbGVhc2UnICcKKyAgICB0ZXN0IC1kICIkVEVYVERPTUFJTkRJUiIgJiYKKyAgICB0ZXN0ICIkVEVYVERPTUFJTkRJUiIgPSAiJEdJVF9URVhURE9NQUlORElSIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFQgJ3Nhbml0eTogSWNlbGFuZGljIGxvY2FsZSB3YXMgY29tcGlsZWQnICcKKyAgICB0ZXN0IC1mICIkVEVYVERPTUFJTkRJUi9pcy9MQ19NRVNTQUdFUy9naXQubW8iCisnCisKKyMgVE9ETzogV2hlbiB3ZSBoYXZlIG1vcmUgbG9jYWxlcywgZ2VuZXJhbGl6ZSB0aGlzIHRvIHRlc3QgdGhlbQorIyBhbGwuIE1heWJlIHdlJ2xsIG5lZWQgYSBkaXItPmxvY2FsZSBtYXAgZm9yIHRoYXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdzYW5pdHk6IGdldHRleHQoIiIpIG1ldGFkYXRhIGlzIE9LJyAnCisgICAgIyBSZXR1cm4gdmFsdWUgbWF5IGJlIG5vbi16ZXJvCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICIiID56ZXJvLWV4cGVjdCAmJgorICAgIGdyZXAgIlByb2plY3QtSWQtVmVyc2lvbjogR2l0IiB6ZXJvLWV4cGVjdCAmJgorICAgIGdyZXAgIkdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+IiB6ZXJvLWV4cGVjdCAmJgorICAgIGdyZXAgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgemVyby1leHBlY3QgJiYKKyAgICBncmVwICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0IiB6ZXJvLWV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdzYW5pdHk6IGdldHRleHQodW5rbm93bikgaXMgcGFzc2VkIHRocm91Z2gnICcKKyAgICBwcmludGYgIlRoaXMgaXMgbm90IGEgdHJhbnNsYXRpb24gc3RyaW5nIiAgPmV4cGVjdCAmJgorICAgIGdldHRleHQgIlRoaXMgaXMgbm90IGEgdHJhbnNsYXRpb24gc3RyaW5nIiA+YWN0dWFsICYmCisgICAgZXZhbF9nZXR0ZXh0ICJUaGlzIGlzIG5vdCBhIHRyYW5zbGF0aW9uIHN0cmluZyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB4Z2V0dGV4dCBmcm9tIEMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ3hnZXR0ZXh0OiBDIGV4dHJhY3Rpb24gb2YgXygpIGFuZCBOXygpIHN0cmluZ3MnICcKKyAgICBwcmludGYgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiXG4iID4+ZXhwZWN0ICYmCisgICAgcHJpbnRmICJTasOhICdcJydnaXQgaGVscCBTS0lQVU4nXCcnIHRpbCBhw7Agc2rDoSBoasOhbHAgZnlyaXIgdGlsdGVrbmEgc2tpcHVuLiIgPj5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyIgPmFjdHVhbCAmJgorICAgIHByaW50ZiAiXG4iID4+YWN0dWFsICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJTZWUgJ1wnJ2dpdCBoZWxwIENPTU1BTkQnXCcnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iID4+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogQyBleHRyYWN0aW9uIHdpdGggJXMnICcKKyAgICBwcmludGYgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciAlJXMiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyAlcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB4Z2V0dGV4dCBmcm9tIFNoZWxsCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogU2hlbGwgZXh0cmFjdGlvbicgJworICAgIHByaW50ZiAiVElMUkFVTjogU2tlbGphcnRpbHJhdW5hc3RyZW5ndXIiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgU2hlbGwgdGVzdCBzdHJpbmciID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ3hnZXR0ZXh0OiBTaGVsbCBleHRyYWN0aW9uIHdpdGggJHZhcmlhYmxlJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBTa2VsamFydGlscmF1bmFzdHJlbmd1ciBtZcOwIGJyZXl0dW5uaSBhIHZhciBpIGFibGUiID54LWV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgdmFyaWFibGU9ImEgdmFyIGkgYWJsZSIgZXZhbF9nZXR0ZXh0ICJURVNUOiBBIFNoZWxsIHRlc3QgXCR2YXJpYWJsZSIgPngtYWN0dWFsICYmCisgICAgdGVzdF9jbXAgeC1leHBlY3QgeC1hY3R1YWwKKycKKworIyB4Z2V0dGV4dCBmcm9tIFBlcmwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ3hnZXR0ZXh0OiBQZXJsIGV4dHJhY3Rpb24nICcKKyAgICBwcmludGYgIlRJTFJBVU46IFBlcmwgdGlscmF1bmFzdHJlbmd1ciIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiVEVTVDogQSBQZXJsIHRlc3Qgc3RyaW5nIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogUGVybCBleHRyYWN0aW9uIHdpdGggJXMnICcKKyAgICBwcmludGYgIlRJTFJBVU46IFBlcmwgdGlscmF1bmFzdHJlbmd1ciBtZcOwIGJyZXl0dW5uaSAlJXMiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgUGVybCB0ZXN0IHZhcmlhYmxlICVzIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdzYW5pdHk6IFNvbWUgZ2V0dGV4dCgiIikgZGF0YSBmb3IgcmVhbCBsb2NhbGUnICcKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIiIgPnJlYWwtbG9jYWxlICYmCisgICAgdGVzdCAtcyByZWFsLWxvY2FsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAyMDAvdGVzdC5jIGIvdC90MDIwMC90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0ZDQ1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDAvdGVzdC5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qIFRoaXMgaXMgYSBwaG9ueSBDIHByb2dyYW0gdGhhdCdzIG9ubHkgaGVyZSB0byB0ZXN0IHhnZXR0ZXh0IG1lc3NhZ2UgZXh0cmFjdGlvbiAqLworCitjb25zdCBjaGFyIGhlbHBbXSA9CisJLyogVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuICovCisJTl8oIlNlZSAnZ2l0IGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIpOworCitpbnQgbWFpbih2b2lkKQoreworCS8qIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LiAqLworCXB1dHMoXygiVEVTVDogQSBDIHRlc3Qgc3RyaW5nIikpOworCisJLyogVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuICovCisJcHJpbnRmKF8oIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyAlcyIpLCAidmFyaWFibGUiKTsKKworCS8qIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LiAqLworCXByaW50ZihfKCJURVNUOiBIZWxsbyBXb3JsZCEiKSk7CisKKwkvKiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4gKi8KKwlwcmludGYoXygiVEVTVDogT2xkIEVuZ2xpc2ggUnVuZXMiKSk7CisKKwkvKiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4gKi8KKwlwcmludGYoXygiVEVTVDog4oCYc2luZ2xl4oCZIGFuZCDigJxkb3VibGXigJ0gcXVvdGVzIikpOworfQpkaWZmIC0tZ2l0IGEvdC90MDIwMC90ZXN0LnBlcmwgYi90L3QwMjAwL3Rlc3QucGVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZiYTM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwMC90ZXN0LnBlcmwKQEAgLTAsMCArMSwxNCBAQAorIyBUaGlzIGlzIGEgcGhvbnkgUGVybCBwcm9ncmFtIHRoYXQncyBvbmx5IGhlcmUgdG8gdGVzdCB4Z2V0dGV4dAorIyBtZXNzYWdlIGV4dHJhY3Rpb24KKworIyBzbyB0aGUgYWJvdmUgY29tbWVudCB3b24ndCBiZSBmb2xkZWQgaW50byB0aGUgbmV4dCBvbmUgYnkgeGdldHRleHQKKzE7CisKKyMgVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCitwcmludCBfXygiVEVTVDogQSBQZXJsIHRlc3Qgc3RyaW5nIik7CisKKyMgVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCitwcmludGYgX18oIlRFU1Q6IEEgUGVybCB0ZXN0IHZhcmlhYmxlICVzIiksICJtb28iOworCisjIFRSQU5TTEFUT1JTOiBJZiB5b3Ugc2VlIHRoaXMsIEdpdCBoYXMgYSBidWcKK3ByaW50IF8iVEVTVDogQSBQZXJsIHN0cmluZyB4Z2V0dGV4dCB3aWxsIG5vdCBnZXQiOwpkaWZmIC0tZ2l0IGEvdC90MDIwMC90ZXN0LnNoIGIvdC90MDIwMC90ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMmQ2MDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAwL3Rlc3Quc2gKQEAgLTAsMCArMSwxNCBAQAorIyBUaGlzIGlzIGEgcGhvbnkgU2hlbGwgcHJvZ3JhbSB0aGF0J3Mgb25seSBoZXJlIHRvIHRlc3QgeGdldHRleHQKKyMgbWVzc2FnZSBleHRyYWN0aW9uCisKKyMgc28gdGhlIGFib3ZlIGNvbW1lbnQgd29uJ3QgYmUgZm9sZGVkIGludG8gdGhlIG5leHQgb25lIGJ5IHhnZXR0ZXh0CitlY2hvCisKKyMgVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCitnZXR0ZXh0ICJURVNUOiBBIFNoZWxsIHRlc3Qgc3RyaW5nIgorCisjIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorZXZhbF9nZXR0ZXh0ICJURVNUOiBBIFNoZWxsIHRlc3QgXCR2YXJpYWJsZSIKKworIyBUUkFOU0xBVE9SUzogSWYgeW91IHNlZSB0aGlzLCBHaXQgaGFzIGEgYnVnCitfKCJURVNUOiBBIFNoZWxsIHN0cmluZyB4Z2V0dGV4dCB3b24ndCBnZXQiKQpkaWZmIC0tZ2l0IGEvdC90MDIwMS1nZXR0ZXh0LWZhbGxiYWNrcy5zaCBiL3QvdDAyMDEtZ2V0dGV4dC1mYWxsYmFja3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTBkYTFjNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDEtZ2V0dGV4dC1mYWxsYmFja3Muc2gKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdHZXR0ZXh0IFNoZWxsIGZhbGxiYWNrcycKKworR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1M9WWVzUGxlYXNlCitleHBvcnQgR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1MKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNhbml0eTogXCRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgaXMgc2V0ICh0byAkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FKSIgJworICAgIHRlc3QgLW4gIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nhbml0eTogJEdJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTIGlzIHNldCcgJworICAgIHRlc3QgLW4gIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9URVNUX0ZBTExCQUNLUyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3Nhbml0eTogJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSIgaXMgZmFsbHRocm91Z2gnICcKKyAgICBlY2hvIGZhbGx0aHJvdWdoID5leHBlY3QgJiYKKyAgICBlY2hvICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0dGV4dDogb3VyIGdldHRleHQoKSBmYWxsYmFjayBoYXMgcGFzcy10aHJvdWdoIHNlbWFudGljcycgJworICAgIHByaW50ZiAidGVzdCIgPmV4cGVjdCAmJgorICAgIGdldHRleHQgInRlc3QiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgIHByaW50ZiAidGVzdCBtb3JlIHdvcmRzIiA+ZXhwZWN0ICYmCisgICAgZ2V0dGV4dCAidGVzdCBtb3JlIHdvcmRzIiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXZhbF9nZXR0ZXh0OiBvdXIgZXZhbF9nZXR0ZXh0KCkgZmFsbGJhY2sgaGFzIHBhc3MtdGhyb3VnaCBzZW1hbnRpY3MnICcKKyAgICBwcmludGYgInRlc3QiID5leHBlY3QgJiYKKyAgICBldmFsX2dldHRleHQgInRlc3QiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgIHByaW50ZiAidGVzdCBtb3JlIHdvcmRzIiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJ0ZXN0IG1vcmUgd29yZHMiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBjYW4gaW50ZXJwb2xhdGUgdmFyaWFibGVzJyAnCisgICAgcHJpbnRmICJ0ZXN0IFllc1BsZWFzZSIgPmV4cGVjdCAmJgorICAgIEdJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTPVllc1BsZWFzZSBldmFsX2dldHRleHQgInRlc3QgXCRHSVRfSU5URVJOQUxfR0VUVEVYVF9URVNUX0ZBTExCQUNLUyIgPmFjdHVhbCAmJgorICAgIHRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V2YWxfZ2V0dGV4dDogb3VyIGV2YWxfZ2V0dGV4dCgpIGZhbGxiYWNrIGNhbiBpbnRlcnBvbGF0ZSB2YXJpYWJsZXMgd2l0aCBzcGFjZXMnICcKKyAgICBjbWRsaW5lPSJnaXQgYW0iICYmCisgICAgZXhwb3J0IGNtZGxpbmUgJiYKKyAgICBwcmludGYgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gZ2l0IGFtIC0tcmVzb2x2ZWQuIiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwkY21kbGluZSAtLXJlc29sdmVkLiIgPmFjdHVhbCAmJgorICAgIHRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V2YWxfZ2V0dGV4dDogb3VyIGV2YWxfZ2V0dGV4dCgpIGZhbGxiYWNrIGNhbiBpbnRlcnBvbGF0ZSB2YXJpYWJsZXMgd2l0aCBzcGFjZXMgYW5kIHF1b3RlcycgJworICAgIGNtZGxpbmU9ImdpdCBhbSIgJiYKKyAgICBleHBvcnQgY21kbGluZSAmJgorICAgIHByaW50ZiAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcImdpdCBhbSAtLXJlc29sdmVkXCIuIiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiXCRjbWRsaW5lIC0tcmVzb2x2ZWRcIi4iID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAyMDItZ2V0dGV4dC1wZXJsLnNoIGIvdC90MDIwMi1nZXR0ZXh0LXBlcmwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTI5ZDE2NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDItZ2V0dGV4dC1wZXJsLnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nUGVybCBnZXR0ZXh0IGludGVyZmFjZSAoR2l0OjpJMThOKScKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHBlcmwgaW50ZXJmYWNlIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCitwZXJsIC1NVGVzdDo6TW9yZSAtZSAwIDI+L2Rldi9udWxsIHx8IHsKKwlza2lwX2FsbD0iUGVybCBUZXN0OjpNb3JlIHVuYXZhaWxhYmxlLCBza2lwcGluZyB0ZXN0IgorCXRlc3RfZG9uZQorfQorCisjIFRoZSBleHRlcm5hbCB0ZXN0IHdpbGwgb3V0cHV0cyBpdHMgb3duIHBsYW4KK3Rlc3RfZXh0ZXJuYWxfaGFzX3RhcD0xCisKK3Rlc3RfZXh0ZXJuYWxfd2l0aG91dF9zdGRlcnIgXAorICAgICdQZXJsIEdpdDo6STE4TiBBUEknIFwKKyAgICBwZXJsICIkVEVTVF9ESVJFQ1RPUlkiL3QwMjAyL3Rlc3QucGwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjAyL3Rlc3QucGwgYi90L3QwMjAyL3Rlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmNiZjdiOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDIvdGVzdC5wbApAQCAtMCwwICsxLDEyMiBAQAorIyEvdXNyL2Jpbi9wZXJsCit1c2UgNS4wMDg7Cit1c2UgbGliIChzcGxpdCgvOi8sICRFTlZ7R0lUUEVSTExJQn0pKTsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUE9TSVggcXcoOmxvY2FsZV9oKTsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDEzOwordXNlIEdpdDo6STE4TjsKKworbXkgJGhhc19nZXR0ZXh0X2xpYnJhcnkgPSAkR2l0OjpJMThOOjpfX0hBU19MSUJSQVJZOworCitvaygxLCAiVGVzdGluZyBHaXQ6OkkxOE4gd2l0aCAiIC4KKwkgKCRoYXNfZ2V0dGV4dF9saWJyYXJ5CisJICA/IChkZWZpbmVkICRMb2NhbGU6Ok1lc3NhZ2VzOjpWRVJTSU9OCisJCSA/ICJMb2NhbGU6Ok1lc3NhZ2VzIHZlcnNpb24gJExvY2FsZTo6TWVzc2FnZXM6OlZFUlNJT04iCisJCSAjIFZlcnNpb25zIG9mIExvY2FsZTo6TWVzc2FnZXMgYmVmb3JlIDEuMTcgZGlkbid0IGhhdmUgYQorCQkgIyAkVkVSU0lPTiB2YXJpYWJsZS4KKwkJIDogIkxvY2FsZTo6TWVzc2FnZXMgdmVyc2lvbiA8MS4xNyIpCisJICA6ICJOTyBQZXJsIGdldHRleHQgbGlicmFyeSIpKTsKK29rKDEsICJHaXQ6OkkxOE4gaXMgbG9jYXRlZCBhdCAkSU5DeydHaXQvSTE4Ti5wbSd9Iik7CisKK3sKKwlteSAkZXhwb3J0cyA9IEBHaXQ6OkkxOE46OkVYUE9SVDsKKwlvaygkZXhwb3J0cywgInNhbml0eTogR2l0OjpJMThOIGhhcyAkZXhwb3J0cyBleHBvcnQocykiKTsKK30KK2lzX2RlZXBseShcQEdpdDo6STE4Tjo6RVhQT1JULCBcQEdpdDo6STE4Tjo6RVhQT1JUX09LLCAic2FuaXR5OiBHaXQ6OkkxOE4gZXhwb3J0cyBldmVyeXRoaW5nIGJ5IGRlZmF1bHQiKTsKKworIyBwcm90b3R5cGVzCit7CisJIyBBZGQgcHJvdG90eXBlcyBoZXJlIHdoZW4gbW9kaWZ5aW5nIHRoZSBwdWJsaWMgaW50ZXJmYWNlIHRvIGFkZAorCSMgbW9yZSBnZXR0ZXh0IHdyYXBwZXIgZnVuY3Rpb25zLgorCW15ICVwcm90b3R5cGVzID0gKHF3KAorCQlfXwkkCisJCV9fbgkkJCQKKwkJTl9fCSQKKwkpKTsKKwl3aGlsZSAobXkgKCRzdWIsICRwcm90bykgPSBlYWNoICVwcm90b3R5cGVzKSB7CisJCWlzKHByb3RvdHlwZShcJnsiR2l0OjpJMThOOjokc3ViIn0pLCAkcHJvdG8sICJzYW5pdHk6ICRzdWIgaGFzIGEgJHByb3RvIHByb3RvdHlwZSIpOworCX0KK30KKworIyBUZXN0IGJhc2ljIHBhc3N0aHJvdWdoIGluIHRoZSBDIGxvY2FsZQoreworCWxvY2FsICRFTlZ7TEFOR1VBR0V9ID0gJ0MnOworCWxvY2FsICRFTlZ7TENfQUxMfSAgID0gJ0MnOworCWxvY2FsICRFTlZ7TEFOR30gICAgID0gJ0MnOworCisJbXkgKCRnb3QsICRleHBlY3QpID0gKCgnVEVTVDogQSBQZXJsIHRlc3Qgc3RyaW5nJykgeCAyKTsKKworCWlzKF9fKCRnb3QpLCAkZXhwZWN0LCAiUGFzc2luZyBhIHN0cmluZyB0aHJvdWdoIF9fKCkgaW4gdGhlIEMgbG9jYWxlIHdvcmtzIik7CisKKwlteSAoJGdvdF9zaW5ndWxhciwgJGdvdF9wbHVyYWwsICRleHBlY3Rfc2luZ3VsYXIsICRleHBlY3RfcGx1cmFsKSA9CisJCSgoJ1RFU1Q6IDEgZmlsZScsICdURVNUOiBuIGZpbGVzJykgeCAyKTsKKworCWlzKF9fbigkZ290X3Npbmd1bGFyLCAkZ290X3BsdXJhbCwgMSksICRleHBlY3Rfc2luZ3VsYXIsCisJCSJHZXQgc2luZ3VsYXIgc3RyaW5nIHRocm91Z2ggX19uKCkgaW4gQyBsb2NhbGUiKTsKKwlpcyhfX24oJGdvdF9zaW5ndWxhciwgJGdvdF9wbHVyYWwsIDIpLCAkZXhwZWN0X3BsdXJhbCwKKwkJIkdldCBwbHVyYWwgc3RyaW5nIHRocm91Z2ggX19uKCkgaW4gQyBsb2NhbGUiKTsKKworCWlzKE5fXygkZ290KSwgJGV4cGVjdCwgIlBhc3NpbmcgYSBzdHJpbmcgdGhyb3VnaCBOX18oKSBpbiB0aGUgQyBsb2NhbGUgd29ya3MiKTsKK30KKworIyBUZXN0IGEgYmFzaWMgbWVzc2FnZSBvbiBkaWZmZXJlbnQgbG9jYWxlcworU0tJUDogeworCXVubGVzcyAoJEVOVntHRVRURVhUX0xPQ0FMRX0pIHsKKwkJIyBDYW4ndCByZWxpYWJseSB0ZXN0IF9fKCkgd2l0aCBhIG5vbi1DIGxvY2FsZXMgYmVjYXVzZSB0aGUKKwkJIyByZXF1aXJlZCBsb2NhbGVzIG1heSBub3QgYmUgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCisJCSMKKwkJIyBXZSB0ZXN0IGZvciB0aGVzZSBhbnl3YXkgYXMgcGFydCBvZiB0aGUgc2hlbGwKKwkJIyB0ZXN0cy4gU2tpcHBpbmcgdGhlc2UgaGVyZSB3aWxsIGVsaW1pbmF0ZSBmYWlsdXJlcyBvbiBvZGQKKwkJIyBwbGF0Zm9ybXMgd2l0aCBpbmNvbXBsZXRlIGxvY2FsZSBkYXRhLgorCisJCXNraXAgIkdFVFRFWFRfTE9DQUxFIG11c3QgYmUgc2V0IGJ5IGxpYi1nZXR0ZXh0LnNoIGZvciBleGhhdXN0aXZlIEdpdDo6STE4TiB0ZXN0cyIsIDI7CisJfQorCisJIyBUaGUgaXNfSVMgVVRGLTggbG9jYWxlIHBhc3NlZCBmcm9tIGxpYi1nZXR0ZXh0LnNoCisJbXkgJGlzX0lTX2xvY2FsZSA9ICRFTlZ7aXNfSVNfbG9jYWxlfTsKKworCW15ICR0ZXN0ID0gc3ViIHsKKwkJbXkgKCRnb3QsICRleHBlY3QsICRtc2csICRsb2NhbGUpID0gQF87CisJCSMgTWF5YmUgdGhpcyBzeXN0ZW0gZG9lc24ndCBoYXZlIHRoZSBsb2NhbGUgd2UncmUgdHJ5aW5nIHRvCisJCSMgdGVzdC4KKwkJbXkgJGxvY2FsZV9vayA9IHNldGxvY2FsZShMQ19BTEwsICRsb2NhbGUpOworCQlpcyhfXygkZ290KSwgJGV4cGVjdCwgIiRtc2cgYSBnZXR0ZXh0IGxpYnJhcnkgKyA8JGxvY2FsZT4gbG9jYWxlIDwkZ290PiB0dXJucyBpbnRvIDwkZXhwZWN0PiIpOworCX07CisKKwlteSAkZW52X0MgPSBzdWIgeworCQkkRU5We0xBTkdVQUdFfSA9ICdDJzsKKwkJJEVOVntMQ19BTEx9ICAgPSAnQyc7CisJfTsKKworCW15ICRlbnZfaXMgPSBzdWIgeworCQkkRU5We0xBTkdVQUdFfSA9ICdpcyc7CisJCSRFTlZ7TENfQUxMfSAgID0gJGlzX0lTX2xvY2FsZTsKKwl9OworCisJIyBUcmFuc2xhdGlvbidzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbAorCW15ICgkZ290LCAkZXhwZWN0KSA9ICgoJ1RFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZycpIHggMik7CisKKwlpZiAoJGhhc19nZXR0ZXh0X2xpYnJhcnkpIHsKKwkJeworCQkJbG9jYWwgJUVOVjsgJGVudl9DLT4oKTsKKwkJCSR0ZXN0LT4oJGdvdCwgJGV4cGVjdCwgIldpdGgiLCAnQycpOworCQl9CisKKwkJeworCQkJbXkgKCRnb3QsICRleHBlY3QpID0gKCRnb3QsICdUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXInKTsKKwkJCWxvY2FsICVFTlY7ICRlbnZfaXMtPigpOworCQkJJHRlc3QtPigkZ290LCAkZXhwZWN0LCAiV2l0aCIsICRpc19JU19sb2NhbGUpOworCQl9CisJfSBlbHNlIHsKKwkJeworCQkJbG9jYWwgJUVOVjsgJGVudl9DLT4oKTsKKwkJCSR0ZXN0LT4oJGdvdCwgJGV4cGVjdCwgIldpdGhvdXQiLCAnQycpOworCQl9CisKKwkJeworCQkJbG9jYWwgJUVOVjsgJGVudl9pcy0+KCk7CisJCQkkdGVzdC0+KCRnb3QsICRleHBlY3QsICJXaXRob3V0IiwgJ2lzJyk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS90L3QwMjAzLWdldHRleHQtc2V0bG9jYWxlLXNhbml0eS5zaCBiL3QvdDAyMDMtZ2V0dGV4dC1zZXRsb2NhbGUtc2FuaXR5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjZTFmMjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAzLWdldHRleHQtc2V0bG9jYWxlLXNhbml0eS5zaApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249IlRoZSBHaXQgQyBmdW5jdGlvbnMgYXJlbid0IGJyb2tlbiBieSBzZXRsb2NhbGUoMykiCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdyBhIElTTy04ODU5LTEgY29tbWl0IHVuZGVyIEMgbG9jYWxlJyAnCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisJdGVzdF9jb21taXQgImlzby1jLWNvbW1pdCIgaXNvLXVuZGVyLWMgJiYKKwlnaXQgc2hvdyA+b3V0IDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCWdyZXAgLXEgImlzby1jLWNvbW1pdCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ2dpdCBzaG93IGEgSVNPLTg4NTktMSBjb21taXQgdW5kZXIgYSBVVEYtOCBsb2NhbGUnICcKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLzg4NTktMS50eHQgJiYKKwl0ZXN0X2NvbW1pdCAiaXNvLXV0ZjgtY29tbWl0IiBpc28tdW5kZXItdXRmOCAmJgorCUxBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2l0IHNob3cgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwlncmVwIC1xICJpc28tdXRmOC1jb21taXQiIG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAyMDQtZ2V0dGV4dC1yZWVuY29kZS1zYW5pdHkuc2ggYi90L3QwMjA0LWdldHRleHQtcmVlbmNvZGUtc2FuaXR5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0MzdlNTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjA0LWdldHRleHQtcmVlbmNvZGUtc2FuaXR5LnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0iR2V0dGV4dCByZWVuY29kaW5nIG9mIG91ciAqLnBvLyoubW8gZmlsZXMgd29ya3MiCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCisjIFRoZSBjb25zdGFudHMgdXNlZCBpbiBhIHRyaWNreSBvYnNlcnZhdGlvbiBmb3IgdW5kZWZpbmVkIGJlaGF2aW91cgorUlVORVM9IlRJTFJBVU46IOGau+GbliDhmrPhmrnhmqvhmqYg4Zqm4Zqr4ZuPIOGau+GbliDhm5LhmqLhm57hm5Yg4Zqp4Zq+IOGapuGaq+GblyDhm5rhmqrhmr7hm57hm5Yg4Zq+4Zqp4Zqx4Zqm4Zq54ZuW4Zqq4Zqx4Zue4Zqi4ZuXIOGaueGbgeGapiDhmqbhmqog4Zq54ZuW4Zul4ZqrIgorUFVOVFM9IlRJTFJBVU46ID8/ID8/Pz8gPz8/ID8/ID8/Pz8gPz8gPz8/ID8/Pz8/ID8/Pz8/Pz8/Pz8/ID8/PyA/PyA/Pz8/IgorTVNHS0VZPSJURVNUOiBPbGQgRW5nbGlzaCBSdW5lcyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnZ2V0dGV4dDogRW1pdHRpbmcgVVRGLTggZnJvbSBvdXIgVVRGLTggKi5tbyBmaWxlcyAvIEljZWxhbmRpYycgJworICAgIHByaW50ZiAiVElMUkFVTjogSGFsbMOzIEhlaW11ciEiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEhlbGxvIFdvcmxkISIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnZ2V0dGV4dDogRW1pdHRpbmcgVVRGLTggZnJvbSBvdXIgVVRGLTggKi5tbyBmaWxlcyAvIFJ1bmVzJyAnCisgICAgcHJpbnRmICIlcyIgIiRSVU5FUyIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiJE1TR0tFWSIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0lTT19MT0NBTEUgJ2dldHRleHQ6IEVtaXR0aW5nIElTTy04ODU5LTEgZnJvbSBvdXIgVVRGLTggKi5tbyBmaWxlcyAvIEljZWxhbmRpYycgJworICAgIHByaW50ZiAiVElMUkFVTjogSGFsbMOzIEhlaW11ciEiIHwgaWNvbnYgLWYgVVRGLTggLXQgSVNPODg1OS0xID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19pc29fbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBIZWxsbyBXb3JsZCEiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9JU09fTE9DQUxFICdnZXR0ZXh0OiBpbXBvc3NpYmxlIElTTy04ODU5LTEgb3V0cHV0JyAnCisJTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfaXNvX2xvY2FsZSIgZ2V0dGV4dCAiJE1TR0tFWSIgPnJ1bmVzICYmCisJY2FzZSAiJChjYXQgcnVuZXMpIiBpbgorCSIkTVNHS0VZIikKKwkJc2F5ICJZb3VyIHN5c3RlbSBnaXZlcyBiYWNrIHRoZSBrZXkgdG8gbWVzc2FnZSBjYXRhbG9nIgorCQk7OworCSIkUFVOVFMiKQorCQlzYXkgIllvdXIgc3lzdGVtIHJlcGxhY2VzIGFuIGltcG9zc2libGUgY2hhcmFjdGVyIHdpdGggPyIKKwkJOzsKKwkiJFJVTkVTIikKKwkJc2F5ICJZb3VyIHN5c3RlbSBnaXZlcyBiYWNrIHRoZSByYXcgbWVzc2FnZSBmb3IgYW4gaW1wb3NzaWJsZSByZXF1ZXN0IgorCQk7OworCSopCisJCXNheSAiV2UgbmV2ZXIgc2F3IHRoZSBlcnJvciBiZWhhdmlvdXIgeW91ciBzeXN0ZW0gZXhoaWJpdHMiCisJCWZhbHNlCisJCTs7CisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdnZXR0ZXh0OiBGZXRjaGluZyBhIFVURi04IG1zZ2lkIC0+IFVURi04JyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiDigJplaW5mYWxkYXLigJggb2cg4oCedHbDtmZhbGRhcuKAnCBnw6ZzYWxhcHBpciIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiVEVTVDog4oCYc2luZ2xl4oCZIGFuZCDigJxkb3VibGXigJ0gcXVvdGVzIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEhvdyB0aGVzZSBxdW90ZXMgZ2V0IHRyYW5zbGl0ZXJhdGVkIGRlcGVuZHMgb24gdGhlIGdldHRleHQgaW1wbGVtZW50YXRpb246CisjCisjICAgRGViaWFuOiAgLGVpbmZhbGRhcicgb2cgLCx0dsO2ZmFsZGFyIiBbR05VIGxpYmludGxdCisjICAgRnJlZUJTRDogYGVpbmZhbGRhcmAgb2cgInR2w7ZmYWxkYXIiICBbR05VIGxpYmludGxdCisjICAgU29sYXJpczogP2VpbmZhbGRhcj8gb2cgP3R2w7ZmYWxkYXI/ICBbU29sYXJpcyBsaWJpbnRsXQorIworIyBKdXN0IG1ha2Ugc3VyZSB0aGUgY29udGVudHMgYXJlIHRyYW5zbGl0ZXJhdGVkLCBhbmQgZG9uJ3QgdXNlIGdyZXAgLXEKKyMgc28gdGhhdCB0aGVzZSBkaWZmZXJlbmNlcyBhcmUgZW1pdHRlZCB1bmRlciAtLXZlcmJvc2UgZm9yIGN1cmlvdXMKKyMgZXllcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9JU09fTE9DQUxFICdnZXR0ZXh0OiBGZXRjaGluZyBhIFVURi04IG1zZ2lkIC0+IElTTy04ODU5LTEnICcKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19pc29fbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiDigJhzaW5nbGXigJkgYW5kIOKAnGRvdWJsZeKAnSBxdW90ZXMiID5hY3R1YWwgJiYKKyAgICBncmVwICJlaW5mYWxkYXIiIGFjdHVhbCAmJgorICAgIGdyZXAgIiQoZWNobyB0dsO2ZmFsZGFyIHwgaWNvbnYgLWYgVVRGLTggLXQgSVNPODg1OS0xKSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ2dldHRleHQuYzogZ2l0IGluaXQgVVRGLTggLT4gVVRGLTgnICcKKyAgICBwcmludGYgIkJqw7MgdGlsIHTDs21hIEdpdCBsaW5kIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnaXQgaW5pdCByZXBvID5hY3R1YWwgJiYKKyAgICB0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiByZXBvIiAmJgorICAgIGdyZXAgIl4kKGNhdCBleHBlY3QpICIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9JU09fTE9DQUxFICdnZXR0ZXh0LmM6IGdpdCBpbml0IFVURi04IC0+IElTTy04ODU5LTEnICcKKyAgICBwcmludGYgIkJqw7MgdGlsIHTDs21hIEdpdCBsaW5kIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfaXNvX2xvY2FsZSIgZ2l0IGluaXQgcmVwbyA+YWN0dWFsICYmCisgICAgdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcmVwbyIgJiYKKyAgICBncmVwICJeJChjYXQgZXhwZWN0IHwgaWNvbnYgLWYgVVRGLTggLXQgSVNPODg1OS0xKSAiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAyMDUtZ2V0dGV4dC1wb2lzb24uc2ggYi90L3QwMjA1LWdldHRleHQtcG9pc29uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5ZmExNmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjA1LWdldHRleHQtcG9pc29uLnNoCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nR2V0dGV4dCBTaGVsbCBwb2lzb24nCisKK0dJVF9URVNUX0dFVFRFWFRfUE9JU09OPXRydWUKK2V4cG9ydCBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTgorLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nhbml0eTogJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSIgaXMgcG9pc29uJyAnCisgICAgdGVzdCAiJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSIgPSAicG9pc29uIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXR0ZXh0OiBvdXIgZ2V0dGV4dCgpIGZhbGxiYWNrIGhhcyBwb2lzb24gc2VtYW50aWNzJyAnCisgICAgcHJpbnRmICIjIEdFVFRFWFQgUE9JU09OICMiID5leHBlY3QgJiYKKyAgICBnZXR0ZXh0ICJ0ZXN0IiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgIHByaW50ZiAiIyBHRVRURVhUIFBPSVNPTiAjIiA+ZXhwZWN0ICYmCisgICAgZ2V0dGV4dCAidGVzdCBtb3JlIHdvcmRzIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBoYXMgcG9pc29uIHNlbWFudGljcycgJworICAgIHByaW50ZiAiIyBHRVRURVhUIFBPSVNPTiAjIiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJ0ZXN0IiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgIHByaW50ZiAiIyBHRVRURVhUIFBPSVNPTiAjIiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJ0ZXN0IG1vcmUgd29yZHMiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdldHRleHQ6IGludmFsaWQgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04gdmFsdWUgZG9lc24ndCBpbmZpbml0ZWx5IGxvb3AiICIKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049eHl6IGdpdCB2ZXJzaW9uIDI+ZXJyb3IgJiYKKwlncmVwIFwiZmF0YWw6IGJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAneHl6JyBmb3IgJ0dJVF9URVNUX0dFVFRFWFRfUE9JU09OJzogaW52YWxpZCB1bml0XCIgZXJyb3IKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjEwLXRyYWNlMi1ub3JtYWwuc2ggYi90L3QwMjEwLXRyYWNlMi1ub3JtYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2U3NTc0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMTAtdHJhY2UyLW5vcm1hbC5zaApAQCAtMCwwICsxLDE4OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdHJhY2UyIGZhY2lsaXR5IChub3JtYWwgdGFyZ2V0KScKKy4gLi90ZXN0LWxpYi5zaAorCisjIFR1cm4gb2ZmIGFueSBpbmhlcml0ZWQgdHJhY2UyIHNldHRpbmdzIGZvciB0aGlzIHRlc3QuCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTIgR0lUX1RSQUNFMl9QRVJGIEdJVF9UUkFDRTJfRVZFTlQKK3NhbmVfdW5zZXQgR0lUX1RSQUNFMl9CUklFRgorc2FuZV91bnNldCBHSVRfVFJBQ0UyX0NPTkZJR19QQVJBTVMKKworIyBBZGQgdC9oZWxwZXIgZGlyZWN0b3J5IHRvIFBBVEggc28gdGhhdCB3ZSBjYW4gdXNlIGEgcmVsYXRpdmUKKyMgcGF0aCB0byBydW4gbmVzdGVkIGluc3RhbmNlcyBvZiB0ZXN0LXRvb2wuZXhlIChzZWUgMDA0Y2hpbGQpLgorIyBUaGlzIGhlbHBzIHdpdGggSEVSRURPQyBjb21wYXJpc29ucyBsYXRlci4KK1RURElSPSIkR0lUX0JVSUxEX0RJUi90L2hlbHBlci8iICYmIGV4cG9ydCBUVERJUgorUEFUSD0iJFRURElSOiRQQVRIIiAmJiBleHBvcnQgUEFUSAorCisjIFdhcm5pbmc6IHVzZSBvZiAndGVzdF9jbXAnIG1heSBydW4gdGVzdC10b29sLmV4ZSBhbmQvb3IgZ2l0LmV4ZQorIyBXYXJuaW5nOiB0byBkbyB0aGUgYWN0dWFsIGRpZmYvY29tcGFyaXNvbiwgc28gdGhlIEhFUkVET0NzIGhlcmUKKyMgV2FybmluZzogb25seSBjb3ZlciBvdXIgYWN0dWFsIGNhbGxzIHRvIHRlc3QtdG9vbCBhbmQvb3IgZ2l0LgorIyBXYXJuaW5nOiBTbyB5b3UgbWF5IHNlZSBleHRyYSBsaW5lcyBpbiBhcnRpZmFjdCBmaWxlcyB3aGVuCisjIFdhcm5pbmc6IGludGVyYWN0aXZlbHkgZGVidWdnaW5nLgorCitWPSQoZ2l0IHZlcnNpb24gfCBzZWQgLWUgJ3MvXmdpdCB2ZXJzaW9uIC8vJykgJiYgZXhwb3J0IFYKKworIyBUaGVyZSBhcmUgbXVsdGlwbGUgdHJhY2UyIHRhcmdldHM6IG5vcm1hbCwgcGVyZiwgYW5kIGV2ZW50LgorIyBUcmFjZTIgZXZlbnRzIHdpbGwvY2FuIGJlIHdyaXR0ZW4gdG8gZWFjaCBhY3RpdmUgdGFyZ2V0IChzdWJqZWN0CisjIHRvIHdoYXRldmVyIGZpbHRlcmluZyB0aGF0IHRhcmdldCBkZWNpZGVzIHRvIGRvKS4KKyMgVGhpcyBzY3JpcHQgdGVzdHMgdGhlIG5vcm1hbCB0YXJnZXQgaW4gaXNvbGF0aW9uLgorIworIyBEZWZlciBzZXR0aW5nIEdJVF9UUkFDRTIgdW50aWwgdGhlIGFjdHVhbCBjb21tYW5kIGxpbmUgd2Ugd2FudCB0byB0ZXN0CisjIGJlY2F1c2UgaGlkZGVuIGdpdCBhbmQgdGVzdC10b29sIGNvbW1hbmRzIHJ1biBieSB0aGUgdGVzdCBoYXJuZXNzCisjIGNhbiBjb250YW1pbmF0ZSBvdXIgb3V0cHV0LgorCisjIEVuYWJsZSAiYnJpZWYiIGZlYXR1cmUgd2hpY2ggdHVybnMgb2ZmICI8Y2xvY2s+IDxmaWxlPjo8bGluZT4gIiBwcmVmaXguCitHSVRfVFJBQ0UyX0JSSUVGPTEgJiYgZXhwb3J0IEdJVF9UUkFDRTJfQlJJRUYKKworIyBCYXNpYyB0ZXN0cyBvZiB0aGUgdHJhY2UyIG5vcm1hbCBzdHJlYW0uICBTaW5jZSB0aGlzIHN0cmVhbSBpcyB1c2VkCisjIHByaW1hcmlseSB3aXRoIHByaW50Zi1zdHlsZSBkZWJ1Z2dpbmcvdHJhY2luZywgd2UgZG8gbGltaXRlZCB0ZXN0aW5nCisjIGhlcmUuCisjCisjIFdlIGRvIGNvbmZpcm0gdGhlIGZvbGxvd2luZyBBUEkgZmVhdHVyZXM6CisjIFtdIHRoZSAndmVyc2lvbiA8dj4nIGV2ZW50CisjIFtdIHRoZSAnc3RhcnQgPGFyZ3Y+JyBldmVudAorIyBbXSB0aGUgJ2NtZF9uYW1lIDxuYW1lPicgZXZlbnQKKyMgW10gdGhlICdleGl0IDx0aW1lPiBjb2RlOjxjb2RlPicgZXZlbnQKKyMgW10gdGhlICdhdGV4aXQgPHRpbWU+IGNvZGU6PGNvZGU+JyBldmVudAorIworIyBGaWVsZHMgb2YgdGhlIGZvcm0gX0ZJRUxEXyBhcmUgdG9rZW5zIHRoYXQgaGF2ZSBiZWVuIHJlcGxhY2VkIChzdWNoCisjIGFzIHRoZSBlbGFwc2VkIHRpbWUpLgorCisjIFZlcmIgMDAxcmV0dXJuCisjCisjIEltcGxpY2l0IHJldHVybiBmcm9tIGNtZF88dmVyYj4gZnVuY3Rpb24gcHJvcGFnYXRlcyA8Y29kZT4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vcm1hbCBzdHJlYW0sIHJldHVybiBjb2RlIDAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLm5vcm1hbCBhY3R1YWwgZXhwZWN0IiAmJgorCUdJVF9UUkFDRTI9IiQocHdkKS90cmFjZS5ub3JtYWwiIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTAvc2NydWJfbm9ybWFsLnBlcmwiIDx0cmFjZS5ub3JtYWwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQl2ZXJzaW9uICRWCisJCXN0YXJ0IF9FWEVfIHRyYWNlMiAwMDFyZXR1cm4gMAorCQljbWRfbmFtZSB0cmFjZTIgKHRyYWNlMikKKwkJZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwkJYXRleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9ybWFsIHN0cmVhbSwgcmV0dXJuIGNvZGUgMScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2Uubm9ybWFsIGFjdHVhbCBleHBlY3QiICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9UUkFDRTI9IiQocHdkKS90cmFjZS5ub3JtYWwiIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDEgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTAvc2NydWJfbm9ybWFsLnBlcmwiIDx0cmFjZS5ub3JtYWwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQl2ZXJzaW9uICRWCisJCXN0YXJ0IF9FWEVfIHRyYWNlMiAwMDFyZXR1cm4gMQorCQljbWRfbmFtZSB0cmFjZTIgKHRyYWNlMikKKwkJZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjEKKwkJYXRleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b21hdGljIGZpbGVuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtciB0cmFjZXMgYWN0dWFsIGV4cGVjdCIgJiYKKwlta2RpciB0cmFjZXMgJiYKKwlHSVRfVFJBQ0UyPSIkKHB3ZCkvdHJhY2VzIiB0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEwL3NjcnViX25vcm1hbC5wZXJsIiA8IiQobHMgdHJhY2VzLyopIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCXZlcnNpb24gJFYKKwkJc3RhcnQgX0VYRV8gdHJhY2UyIDAwMXJldHVybiAwCisJCWNtZF9uYW1lIHRyYWNlMiAodHJhY2UyKQorCQlleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MAorCQlhdGV4aXQgZWxhcHNlZDpfVElNRV8gY29kZTowCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFZlcmIgMDAyZXhpdAorIworIyBFeHBsaWNpdCBleGl0KGNvZGUpIGZyb20gd2l0aGluIGNtZF88dmVyYj4gcHJvcGFnYXRlcyA8Y29kZT4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vcm1hbCBzdHJlYW0sIGV4aXQgY29kZSAwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ub3JtYWwgYWN0dWFsIGV4cGVjdCIgJiYKKwlHSVRfVFJBQ0UyPSIkKHB3ZCkvdHJhY2Uubm9ybWFsIiB0ZXN0LXRvb2wgdHJhY2UyIDAwMmV4aXQgMCAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMC9zY3J1Yl9ub3JtYWwucGVybCIgPHRyYWNlLm5vcm1hbCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCXZlcnNpb24gJFYKKwkJc3RhcnQgX0VYRV8gdHJhY2UyIDAwMmV4aXQgMAorCQljbWRfbmFtZSB0cmFjZTIgKHRyYWNlMikKKwkJZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwkJYXRleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9ybWFsIHN0cmVhbSwgZXhpdCBjb2RlIDEnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLm5vcm1hbCBhY3R1YWwgZXhwZWN0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVFJBQ0UyPSIkKHB3ZCkvdHJhY2Uubm9ybWFsIiB0ZXN0LXRvb2wgdHJhY2UyIDAwMmV4aXQgMSAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMC9zY3J1Yl9ub3JtYWwucGVybCIgPHRyYWNlLm5vcm1hbCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCXZlcnNpb24gJFYKKwkJc3RhcnQgX0VYRV8gdHJhY2UyIDAwMmV4aXQgMQorCQljbWRfbmFtZSB0cmFjZTIgKHRyYWNlMikKKwkJZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjEKKwkJYXRleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBWZXJiIDAwM2Vycm9yCisjCisjIFRvIHRoZSBhYm92ZSwgYWRkIG11bHRpcGxlICdlcnJvciA8bXNnPicgZXZlbnRzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vcm1hbCBzdHJlYW0sIGVycm9yIGV2ZW50JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ub3JtYWwgYWN0dWFsIGV4cGVjdCIgJiYKKwlHSVRfVFJBQ0UyPSIkKHB3ZCkvdHJhY2Uubm9ybWFsIiB0ZXN0LXRvb2wgdHJhY2UyIDAwM2Vycm9yICJoZWxsbyB3b3JsZCIgInRoaXMgaXMgYSB0ZXN0IiAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMC9zY3J1Yl9ub3JtYWwucGVybCIgPHRyYWNlLm5vcm1hbCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCXZlcnNpb24gJFYKKwkJc3RhcnQgX0VYRV8gdHJhY2UyIDAwM2Vycm9yICdcJydoZWxsbyB3b3JsZCdcJycgJ1wnJ3RoaXMgaXMgYSB0ZXN0J1wnJworCQljbWRfbmFtZSB0cmFjZTIgKHRyYWNlMikKKwkJZXJyb3IgaGVsbG8gd29ybGQKKwkJZXJyb3IgdGhpcyBpcyBhIHRlc3QKKwkJZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwkJYXRleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworc2FuZV91bnNldCBHSVRfVFJBQ0UyX0JSSUVGCisKKyMgTm93IHRlc3Qgd2l0aG91dCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGdldCBhbGwgVHJhY2UyIHNldHRpbmdzCisjIGZyb20gdGhlIGdsb2JhbCBjb25maWcuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGdsb2JhbCBjb25maWcsIG5vcm1hbCBzdHJlYW0sIHJldHVybiBjb2RlIDAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLm5vcm1hbCBhY3R1YWwgZXhwZWN0IiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCB0cmFjZTIubm9ybWFsQnJpZWYgMSAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCB0cmFjZTIubm9ybWFsVGFyZ2V0ICIkKHB3ZCkvdHJhY2Uubm9ybWFsIiAmJgorCXRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTAvc2NydWJfbm9ybWFsLnBlcmwiIDx0cmFjZS5ub3JtYWwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQl2ZXJzaW9uICRWCisJCXN0YXJ0IF9FWEVfIHRyYWNlMiAwMDFyZXR1cm4gMAorCQljbWRfbmFtZSB0cmFjZTIgKHRyYWNlMikKKwkJZXhpdCBlbGFwc2VkOl9USU1FXyBjb2RlOjAKKwkJYXRleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgZ2xvYmFsIGNvbmZpZyB3aXRoIGluY2x1ZGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLm5vcm1hbCBhY3R1YWwgZXhwZWN0IHJlYWwuZ2l0Y29uZmlnIiAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCB0cmFjZTIubm9ybWFsQnJpZWYgMSAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCB0cmFjZTIubm9ybWFsVGFyZ2V0ICIkKHB3ZCkvdHJhY2Uubm9ybWFsIiAmJgorCW12ICIkKHB3ZCkvLmdpdGNvbmZpZyIgIiQocHdkKS9yZWFsLmdpdGNvbmZpZyIgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgaW5jbHVkZS5wYXRoICIkKHB3ZCkvcmVhbC5naXRjb25maWciICYmCisJdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMCAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMC9zY3J1Yl9ub3JtYWwucGVybCIgPHRyYWNlLm5vcm1hbCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCXZlcnNpb24gJFYKKwkJc3RhcnQgX0VYRV8gdHJhY2UyIDAwMXJldHVybiAwCisJCWNtZF9uYW1lIHRyYWNlMiAodHJhY2UyKQorCQlleGl0IGVsYXBzZWQ6X1RJTUVfIGNvZGU6MAorCQlhdGV4aXQgZWxhcHNlZDpfVElNRV8gY29kZTowCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAyMTAvc2NydWJfbm9ybWFsLnBlcmwgYi90L3QwMjEwL3NjcnViX25vcm1hbC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWQxYTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjEwL3NjcnViX25vcm1hbC5wZXJsCkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBTY3J1YiB0aGUgdmFyaWFibGUgZmllbGRzIGZyb20gdGhlIG5vcm1hbCB0cmFjZTIgb3V0cHV0IHRvCisjIG1ha2UgdGVzdGluZyBlYXNpZXIuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK215ICRmbG9hdCA9ICdbMC05XSpcLlswLTldKyhbZUVdWy0rXT9bMC05XSspPyc7CisKKyMgVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdHJhY2UyIGRhdGEgd2FzIHdyaXR0ZW4gd2l0aCBiYXJlCisjIHR1cm5lZCBvbiAod2hpY2ggb21pdHMgdGhlICI8Y2xvY2s+IDxmaWxlPjo8bGluZT4iIHByZWZpeC4KKword2hpbGUgKDw+KSB7CisgICAgIyBWYXJpb3VzIG1lc3NhZ2VzIGluY2x1ZGUgYW4gZWxhcHNlZCB0aW1lIGluIHRoZSBtaWRkbGUKKyAgICAjIG9mIHRoZSBtZXNzYWdlLiAgUmVwbGFjZSB0aGUgdGltZSB3aXRoIGEgcGxhY2Vob2xkZXIgdG8KKyAgICAjIHNpbXBsaWZ5IG91ciBIRVJFRE9DIGluIHRoZSB0ZXN0IHNjcmlwdC4KKyAgICBzL2VsYXBzZWQ6JGZsb2F0L2VsYXBzZWQ6X1RJTUVfL2c7CisKKyAgICBteSAkbGluZSA9ICRfOworCisgICAgIyB3ZSBleHBlY3Q6CisgICAgIyAgICBzdGFydCA8YXJndjA+IFs8YXJndjE+IFs8YXJndjI+IFsuLi5dXV0KKyAgICAjCisgICAgIyB3aGVyZSBhcmd2MCBtaWdodCBiZSBhIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGgsIHdpdGgKKyAgICAjIG9yIHdpdGhvdXQgcXVvdGVzLCBhbmQgcGxhdGZvcm0gZGVwZW5kZW50LiAgUmVwbGFjZSBhcmd2MAorICAgICMgd2l0aCBhIHRva2VuIGZvciBIRVJFRE9DIG1hdGNoaW5nIGluIHRoZSB0ZXN0IHNjcmlwdC4KKworICAgIGlmICgkbGluZSA9fiBtL15zdGFydC8pIHsKKwkkbGluZSA9fiAvXnN0YXJ0XHMrKC4qKS87CisJbXkgJGFyZ3YgPSAkMTsKKwkkYXJndiA9fiBtLyhcJ1teXCddKlwnfFteIF0rKVxzKyguKikvOworCW15ICRhcmd2XzAgPSAkMTsKKwlteSAkYXJndl9yZXN0ID0gJDI7CisKKwlwcmludCAic3RhcnQgX0VYRV8gJGFyZ3ZfcmVzdFxuIjsKKyAgICB9CisgICAgZWxzaWYgKCRsaW5lID1+IG0vXmNtZF9wYXRoLykgeworCSMgTGlrZXdpc2UsIHRoZSAnY21kX3BhdGgnIG1lc3NhZ2UgYnJlYWtzIG91dCBhcmd2WzBdLgorCSMKKwkjIFRoaXMgbGluZSBpcyBvbmx5IGVtaXR0ZWQgd2hlbiBSVU5USU1FX1BSRUZJWCBpcyBkZWZpbmVkLAorCSMgc28ganVzdCBvbWl0IGl0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSMgcHJpbnQgImNtZF9wYXRoIF9FWEVfXG4iOworICAgIH0KKyAgICBlbHNlIHsKKwlwcmludCAiJGxpbmUiOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3QvdDAyMTEtdHJhY2UyLXBlcmYuc2ggYi90L3QwMjExLXRyYWNlMi1wZXJmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlZThlZTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjExLXRyYWNlMi1wZXJmLnNoCkBAIC0wLDAgKzEsMTc0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0cmFjZTIgZmFjaWxpdHkgKHBlcmYgdGFyZ2V0KScKKy4gLi90ZXN0LWxpYi5zaAorCisjIFR1cm4gb2ZmIGFueSBpbmhlcml0ZWQgdHJhY2UyIHNldHRpbmdzIGZvciB0aGlzIHRlc3QuCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTIgR0lUX1RSQUNFMl9QRVJGIEdJVF9UUkFDRTJfRVZFTlQKK3NhbmVfdW5zZXQgR0lUX1RSQUNFMl9QRVJGX0JSSUVGCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTJfQ09ORklHX1BBUkFNUworCisjIEFkZCB0L2hlbHBlciBkaXJlY3RvcnkgdG8gUEFUSCBzbyB0aGF0IHdlIGNhbiB1c2UgYSByZWxhdGl2ZQorIyBwYXRoIHRvIHJ1biBuZXN0ZWQgaW5zdGFuY2VzIG9mIHRlc3QtdG9vbC5leGUgKHNlZSAwMDRjaGlsZCkuCisjIFRoaXMgaGVscHMgd2l0aCBIRVJFRE9DIGNvbXBhcmlzb25zIGxhdGVyLgorVFRESVI9IiRHSVRfQlVJTERfRElSL3QvaGVscGVyLyIgJiYgZXhwb3J0IFRURElSCitQQVRIPSIkVFRESVI6JFBBVEgiICYmIGV4cG9ydCBQQVRICisKKyMgV2FybmluZzogdXNlIG9mICd0ZXN0X2NtcCcgbWF5IHJ1biB0ZXN0LXRvb2wuZXhlIGFuZC9vciBnaXQuZXhlCisjIFdhcm5pbmc6IHRvIGRvIHRoZSBhY3R1YWwgZGlmZi9jb21wYXJpc29uLCBzbyB0aGUgSEVSRURPQ3MgaGVyZQorIyBXYXJuaW5nOiBvbmx5IGNvdmVyIG91ciBhY3R1YWwgY2FsbHMgdG8gdGVzdC10b29sIGFuZC9vciBnaXQuCisjIFdhcm5pbmc6IFNvIHlvdSBtYXkgc2VlIGV4dHJhIGxpbmVzIGluIGFydGlmYWN0IGZpbGVzIHdoZW4KKyMgV2FybmluZzogaW50ZXJhY3RpdmVseSBkZWJ1Z2dpbmcuCisKK1Y9JChnaXQgdmVyc2lvbiB8IHNlZCAtZSAncy9eZ2l0IHZlcnNpb24gLy8nKSAmJiBleHBvcnQgVgorCisjIFRoZXJlIGFyZSBtdWx0aXBsZSB0cmFjZTIgdGFyZ2V0czogbm9ybWFsLCBwZXJmLCBhbmQgZXZlbnQuCisjIFRyYWNlMiBldmVudHMgd2lsbC9jYW4gYmUgd3JpdHRlbiB0byBlYWNoIGFjdGl2ZSB0YXJnZXQgKHN1YmplY3QKKyMgdG8gd2hhdGV2ZXIgZmlsdGVyaW5nIHRoYXQgdGFyZ2V0IGRlY2lkZXMgdG8gZG8pLgorIyBUZXN0IGVhY2ggdGFyZ2V0IGluZGVwZW5kZW50bHkuCisjCisjIERlZmVyIHNldHRpbmcgR0lUX1RSQUNFMl9QRVJGIHVudGlsIHRoZSBhY3R1YWwgY29tbWFuZCB3ZSB3YW50IHRvCisjIHRlc3QgYmVjYXVzZSBoaWRkZW4gZ2l0IGFuZCB0ZXN0LXRvb2wgY29tbWFuZHMgaW4gdGhlIHRlc3QKKyMgaGFybmVzcyBjYW4gY29udGFtaW5hdGUgb3VyIG91dHB1dC4KKworIyBFbmFibGUgImJyaWVmIiBmZWF0dXJlIHdoaWNoIHR1cm5zIG9mZiB0aGUgcHJlZml4OgorIyAgICAgIjxjbG9jaz4gPGZpbGU+OjxsaW5lPiB8IDxucl9wYXJlbnRzPiB8ICIKK0dJVF9UUkFDRTJfUEVSRl9CUklFRj0xICYmIGV4cG9ydCBHSVRfVFJBQ0UyX1BFUkZfQlJJRUYKKworIyBSZXBlYXQgc29tZSBvZiB0aGUgdDAyMTAgdGVzdHMgdXNpbmcgdGhlIHBlcmYgdGFyZ2V0IHN0cmVhbSBpbnN0ZWFkIG9mCisjIHRoZSBub3JtYWwgc3RyZWFtLgorIworIyBUb2tlbnMgaGVyZSBvZiB0aGUgZm9ybSBfRklFTERfIGhhdmUgYmVlbiByZXBsYWNlZCBpbiB0aGUgb2JzZXJ2ZWQgb3V0cHV0LgorCisjIFZlcmIgMDAxcmV0dXJuCisjCisjIEltcGxpY2l0IHJldHVybiBmcm9tIGNtZF88dmVyYj4gZnVuY3Rpb24gcHJvcGFnYXRlcyA8Y29kZT4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlcmYgc3RyZWFtLCByZXR1cm4gY29kZSAwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5wZXJmIGFjdHVhbCBleHBlY3QiICYmCisJR0lUX1RSQUNFMl9QRVJGPSIkKHB3ZCkvdHJhY2UucGVyZiIgdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMCAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMS9zY3J1Yl9wZXJmLnBlcmwiIDx0cmFjZS5wZXJmID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJZDB8bWFpbnx2ZXJzaW9ufHx8fHwkVgorCQlkMHxtYWlufHN0YXJ0fHxfVF9BQlNffHx8X0VYRV8gdHJhY2UyIDAwMXJldHVybiAwCisJCWQwfG1haW58Y21kX25hbWV8fHx8fHRyYWNlMiAodHJhY2UyKQorCQlkMHxtYWlufGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwkJZDB8bWFpbnxhdGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlcmYgc3RyZWFtLCByZXR1cm4gY29kZSAxJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5wZXJmIGFjdHVhbCBleHBlY3QiICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9UUkFDRTJfUEVSRj0iJChwd2QpL3RyYWNlLnBlcmYiIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDEgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTEvc2NydWJfcGVyZi5wZXJsIiA8dHJhY2UucGVyZiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWQwfG1haW58dmVyc2lvbnx8fHx8JFYKKwkJZDB8bWFpbnxzdGFydHx8X1RfQUJTX3x8fF9FWEVfIHRyYWNlMiAwMDFyZXR1cm4gMQorCQlkMHxtYWlufGNtZF9uYW1lfHx8fHx0cmFjZTIgKHRyYWNlMikKKwkJZDB8bWFpbnxleGl0fHxfVF9BQlNffHx8Y29kZToxCisJCWQwfG1haW58YXRleGl0fHxfVF9BQlNffHx8Y29kZToxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFZlcmIgMDAzZXJyb3IKKyMKKyMgVG8gdGhlIGFib3ZlLCBhZGQgbXVsdGlwbGUgJ2Vycm9yIDxtc2c+JyBldmVudHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVyZiBzdHJlYW0sIGVycm9yIGV2ZW50JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5wZXJmIGFjdHVhbCBleHBlY3QiICYmCisJR0lUX1RSQUNFMl9QRVJGPSIkKHB3ZCkvdHJhY2UucGVyZiIgdGVzdC10b29sIHRyYWNlMiAwMDNlcnJvciAiaGVsbG8gd29ybGQiICJ0aGlzIGlzIGEgdGVzdCIgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTEvc2NydWJfcGVyZi5wZXJsIiA8dHJhY2UucGVyZiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWQwfG1haW58dmVyc2lvbnx8fHx8JFYKKwkJZDB8bWFpbnxzdGFydHx8X1RfQUJTX3x8fF9FWEVfIHRyYWNlMiAwMDNlcnJvciAnXCcnaGVsbG8gd29ybGQnXCcnICdcJyd0aGlzIGlzIGEgdGVzdCdcJycKKwkJZDB8bWFpbnxjbWRfbmFtZXx8fHx8dHJhY2UyICh0cmFjZTIpCisJCWQwfG1haW58ZXJyb3J8fHx8fGhlbGxvIHdvcmxkCisJCWQwfG1haW58ZXJyb3J8fHx8fHRoaXMgaXMgYSB0ZXN0CisJCWQwfG1haW58ZXhpdHx8X1RfQUJTX3x8fGNvZGU6MAorCQlkMHxtYWlufGF0ZXhpdHx8X1RfQUJTX3x8fGNvZGU6MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBWZXJiIDAwNGNoaWxkCisjCisjIFRlc3QgbmVzdGVkIHNwYXduaW5nIG9mIGNoaWxkIHByb2Nlc3Nlcy4KKyMKKyMgQ29uY2VwdHVhbGx5LCB0aGlzIGxvb2tzIGxpa2U6CisjICAgIFAxOiBUVCB0cmFjZTIgMDA0Y2hpbGQKKyMgICAgUDI6IHwtLS0gVFQgdHJhY2UyIDAwNGNoaWxkCisjICAgIFAzOiAgICAgIHwtLS0gVFQgdHJhY2UyIDAwMXJldHVybiAwCisjCisjIFdoaWNoIHNob3VsZCBnZW5lcmF0ZSBldmVudHM6CisjICAgIFAxOiB2ZXJzaW9uCisjICAgIFAxOiBzdGFydAorIyAgICBQMTogY21kX25hbWUKKyMgICAgUDE6IGNoaWxkX3N0YXJ0CisjICAgICAgICBQMjogdmVyc2lvbgorIyAgICAgICAgUDI6IHN0YXJ0CisjICAgICAgICBQMjogY21kX25hbWUKKyMgICAgICAgIFAyOiBjaGlsZF9zdGFydAorIyAgICAgICAgICAgIFAzOiB2ZXJzaW9uCisjICAgICAgICAgICAgUDM6IHN0YXJ0CisjICAgICAgICAgICAgUDM6IGNtZF9uYW1lCisjICAgICAgICAgICAgUDM6IGV4aXQKKyMgICAgICAgICAgICBQMzogYXRleGl0CisjICAgICAgICBQMjogY2hpbGRfZXhpdAorIyAgICAgICAgUDI6IGV4aXQKKyMgICAgICAgIFAyOiBhdGV4aXQKKyMgICAgUDE6IGNoaWxkX2V4aXQKKyMgICAgUDE6IGV4aXQKKyMgICAgUDE6IGF0ZXhpdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZXJmIHN0cmVhbSwgY2hpbGQgcHJvY2Vzc2VzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5wZXJmIGFjdHVhbCBleHBlY3QiICYmCisJR0lUX1RSQUNFMl9QRVJGPSIkKHB3ZCkvdHJhY2UucGVyZiIgdGVzdC10b29sIHRyYWNlMiAwMDRjaGlsZCB0ZXN0LXRvb2wgdHJhY2UyIDAwNGNoaWxkIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTEvc2NydWJfcGVyZi5wZXJsIiA8dHJhY2UucGVyZiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWQwfG1haW58dmVyc2lvbnx8fHx8JFYKKwkJZDB8bWFpbnxzdGFydHx8X1RfQUJTX3x8fF9FWEVfIHRyYWNlMiAwMDRjaGlsZCB0ZXN0LXRvb2wgdHJhY2UyIDAwNGNoaWxkIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAKKwkJZDB8bWFpbnxjbWRfbmFtZXx8fHx8dHJhY2UyICh0cmFjZTIpCisJCWQwfG1haW58Y2hpbGRfc3RhcnR8fF9UX0FCU198fHxbY2gwXSBjbGFzczo/IGFyZ3Y6W3Rlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQgdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMF0KKwkJZDF8bWFpbnx2ZXJzaW9ufHx8fHwkVgorCQlkMXxtYWlufHN0YXJ0fHxfVF9BQlNffHx8X0VYRV8gdHJhY2UyIDAwNGNoaWxkIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAKKwkJZDF8bWFpbnxjbWRfbmFtZXx8fHx8dHJhY2UyICh0cmFjZTIvdHJhY2UyKQorCQlkMXxtYWlufGNoaWxkX3N0YXJ0fHxfVF9BQlNffHx8W2NoMF0gY2xhc3M6PyBhcmd2Olt0ZXN0LXRvb2wgdHJhY2UyIDAwMXJldHVybiAwXQorCQlkMnxtYWlufHZlcnNpb258fHx8fCRWCisJCWQyfG1haW58c3RhcnR8fF9UX0FCU198fHxfRVhFXyB0cmFjZTIgMDAxcmV0dXJuIDAKKwkJZDJ8bWFpbnxjbWRfbmFtZXx8fHx8dHJhY2UyICh0cmFjZTIvdHJhY2UyL3RyYWNlMikKKwkJZDJ8bWFpbnxleGl0fHxfVF9BQlNffHx8Y29kZTowCisJCWQyfG1haW58YXRleGl0fHxfVF9BQlNffHx8Y29kZTowCisJCWQxfG1haW58Y2hpbGRfZXhpdHx8X1RfQUJTX3xfVF9SRUxffHxbY2gwXSBwaWQ6X1BJRF8gY29kZTowCisJCWQxfG1haW58ZXhpdHx8X1RfQUJTX3x8fGNvZGU6MAorCQlkMXxtYWlufGF0ZXhpdHx8X1RfQUJTX3x8fGNvZGU6MAorCQlkMHxtYWlufGNoaWxkX2V4aXR8fF9UX0FCU198X1RfUkVMX3x8W2NoMF0gcGlkOl9QSURfIGNvZGU6MAorCQlkMHxtYWlufGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwkJZDB8bWFpbnxhdGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3NhbmVfdW5zZXQgR0lUX1RSQUNFMl9QRVJGX0JSSUVGCisKKyMgTm93IHRlc3Qgd2l0aG91dCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGdldCBhbGwgVHJhY2UyIHNldHRpbmdzCisjIGZyb20gdGhlIGdsb2JhbCBjb25maWcuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGdsb2JhbCBjb25maWcsIHBlcmYgc3RyZWFtLCByZXR1cm4gY29kZSAwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5wZXJmIGFjdHVhbCBleHBlY3QiICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIHRyYWNlMi5wZXJmQnJpZWYgMSAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCB0cmFjZTIucGVyZlRhcmdldCAiJChwd2QpL3RyYWNlLnBlcmYiICYmCisJdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMCAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMS9zY3J1Yl9wZXJmLnBlcmwiIDx0cmFjZS5wZXJmID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJZDB8bWFpbnx2ZXJzaW9ufHx8fHwkVgorCQlkMHxtYWlufHN0YXJ0fHxfVF9BQlNffHx8X0VYRV8gdHJhY2UyIDAwMXJldHVybiAwCisJCWQwfG1haW58Y21kX25hbWV8fHx8fHRyYWNlMiAodHJhY2UyKQorCQlkMHxtYWlufGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwkJZDB8bWFpbnxhdGV4aXR8fF9UX0FCU198fHxjb2RlOjAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDIxMS9zY3J1Yl9wZXJmLnBlcmwgYi90L3QwMjExL3NjcnViX3BlcmYucGVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTFhZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDIxMS9zY3J1Yl9wZXJmLnBlcmwKQEAgLTAsMCArMSw3NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIFNjcnViIHRoZSB2YXJpYWJsZSBmaWVsZHMgZnJvbSB0aGUgcGVyZiB0cmFjZTIgb3V0cHV0IHRvCisjIG1ha2UgdGVzdGluZyBlYXNpZXIuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK215ICRxcGF0aCA9ICdcJ1teXCddKlwnfFteIF0qJzsKKworbXkgJGNvbF9kZXB0aD0wOworbXkgJGNvbF90aHJlYWQ9MTsKK215ICRjb2xfZXZlbnQ9MjsKK215ICRjb2xfcmVwbz0zOworbXkgJGNvbF90X2Ficz00OworbXkgJGNvbF90X3JlbD01OworbXkgJGNvbF9jYXRlZ29yeT02OworbXkgJGNvbF9yZXN0PTc7CisKKyMgVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdHJhY2UyIGRhdGEgd2FzIHdyaXR0ZW4gd2l0aCBiYXJlCisjIHR1cm5lZCBvbiAod2hpY2ggb21pdHMgdGhlICI8Y2xvY2s+IDxmaWxlPjo8bGluZT4gfCA8cGFyZW50cz4iCisjIHByZWZpeC4KKword2hpbGUgKDw+KSB7CisgICAgbXkgQHRva2VucyA9IHNwbGl0IC9cfC87CisKKyAgICBmb3JlYWNoIG15ICRjb2wgKEB0b2tlbnMpIHsgJGNvbCA9fiBzL15ccyt8XHMrJC8vZzsgfQorCisgICAgaWYgKCR0b2tlbnNbJGNvbF9ldmVudF0gPX4gbS9ec3RhcnQvKSB7CisJIyBUaGUgJ3N0YXJ0JyBtZXNzYWdlIGxpc3RzIHRoZSBjb250ZW50cyBvZiBhcmd2IGluICRjb2xfcmVzdC4KKwkjIE9uIHNvbWUgcGxhdGZvcm1zIChXaW5kb3dzKSwgYXJndlswXSBpcyAqc29tZXRpbWVzKiBhIGNhbm9uaWNhbAorCSMgYWJzb2x1dGUgcGF0aCB0byB0aGUgRVhFIHJhdGhlciB0aGFuIHRoZSB2YWx1ZSBwYXNzZWQgaW4gdGhlCisJIyBzaGVsbCBzY3JpcHQuICBSZXBsYWNlIGl0IHdpdGggYSBwbGFjZWhvbGRlciB0byBzaW1wbGlmeSBvdXIKKwkjIEhFUkVET0MgaW4gdGhlIHRlc3Qgc2NyaXB0LgorCW15ICRhcmd2MDsKKwlteSAkYXJndlJlc3Q7CisJJHRva2Vuc1skY29sX3Jlc3RdID1+IHMvXigkcXBhdGgpXFcqKC4qKS9fRVhFXyAkMi87CisgICAgfQorICAgIGVsc2lmICgkdG9rZW5zWyRjb2xfZXZlbnRdID1+IG0vY21kX3BhdGgvKSB7CisJIyBMaWtld2lzZSwgdGhlICdjbWRfcGF0aCcgbWVzc2FnZSBicmVha3Mgb3V0IGFyZ3ZbMF0uCisJIworCSMgVGhpcyBsaW5lIGlzIG9ubHkgZW1pdHRlZCB3aGVuIFJVTlRJTUVfUFJFRklYIGlzIGRlZmluZWQsCisJIyBzbyBqdXN0IG9taXQgaXQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisJIyAkdG9rZW5zWyRjb2xfcmVzdF0gPSAiX0VYRV8iOworCWdvdG8gU0tJUF9MSU5FOworICAgIH0KKyAgICBlbHNpZiAoJHRva2Vuc1skY29sX2V2ZW50XSA9fiBtL2NoaWxkX2V4aXQvKSB7CisJJHRva2Vuc1skY29sX3Jlc3RdID1+IHMvIHBpZDpcZCogLyBwaWQ6X1BJRF8gLzsKKyAgICB9CisgICAgZWxzaWYgKCR0b2tlbnNbJGNvbF9ldmVudF0gPX4gbS9kYXRhLykgeworCWlmICgkdG9rZW5zWyRjb2xfY2F0ZWdvcnldID1+IG0vcHJvY2Vzcy8pIHsKKwkgICAgIyAnZGF0YScgYW5kICdkYXRhX2pzb24nIGV2ZW50cyBjb250YWluaW5nICdwcm9jZXNzJworCSAgICAjIGNhdGVnb3J5IGRhdGEgYXJlIGFzc3VtZWQgdG8gYmUgcGxhdGZvcm0tc3BlY2lmaWMKKwkgICAgIyBhbmQgaGlnaGx5IHZhcmlhYmxlLiAgSnVzdCBvbWl0IHRoZW0uCisJICAgIGdvdG8gU0tJUF9MSU5FOworCX0KKyAgICB9CisKKyAgICAjIHRfYWJzIGFuZCB0X3JlbCBhcmUgZWl0aGVyIGJsYW5rIG9yIGEgZmxvYXQuICBSZXBsYWNlIHRoZSBmbG9hdAorICAgICMgd2l0aCBhIGNvbnN0YW50IGZvciBtYXRjaGluZyB0aGUgSEVSRURPQyBpbiB0aGUgdGVzdCBzY3JpcHQuCisgICAgaWYgKCR0b2tlbnNbJGNvbF90X2Fic10gPX4gbS9cZC8pIHsKKwkkdG9rZW5zWyRjb2xfdF9hYnNdID0gIl9UX0FCU18iOworICAgIH0KKyAgICBpZiAoJHRva2Vuc1skY29sX3RfcmVsXSA9fiBtL1xkLykgeworCSR0b2tlbnNbJGNvbF90X3JlbF0gPSAiX1RfUkVMXyI7CisgICAgfQorCisgICAgbXkgJG91dDsKKworICAgICRvdXQgPSBqb2luKCd8JywgQHRva2Vucyk7CisgICAgcHJpbnQgIiRvdXRcbiI7CisKKyAgU0tJUF9MSU5FOgorfQorCisKZGlmZiAtLWdpdCBhL3QvdDAyMTItdHJhY2UyLWV2ZW50LnNoIGIvdC90MDIxMi10cmFjZTItZXZlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzA2NWExYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMTItdHJhY2UyLWV2ZW50LnNoCkBAIC0wLDAgKzEsMjg3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0cmFjZTIgZmFjaWxpdHknCisuIC4vdGVzdC1saWIuc2gKKworIyBUdXJuIG9mZiBhbnkgaW5oZXJpdGVkIHRyYWNlMiBzZXR0aW5ncyBmb3IgdGhpcyB0ZXN0Lgorc2FuZV91bnNldCBHSVRfVFJBQ0UyIEdJVF9UUkFDRTJfUEVSRiBHSVRfVFJBQ0UyX0VWRU5UCitzYW5lX3Vuc2V0IEdJVF9UUkFDRTJfQkFSRQorc2FuZV91bnNldCBHSVRfVFJBQ0UyX0NPTkZJR19QQVJBTVMKKworcGVybCAtTUpTT046OlBQIC1lIDAgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3Rfc2V0X3ByZXJlcSBKU09OX1BQCisKKyMgQWRkIHQvaGVscGVyIGRpcmVjdG9yeSB0byBQQVRIIHNvIHRoYXQgd2UgY2FuIHVzZSBhIHJlbGF0aXZlCisjIHBhdGggdG8gcnVuIG5lc3RlZCBpbnN0YW5jZXMgb2YgdGVzdC10b29sLmV4ZSAoc2VlIDAwNGNoaWxkKS4KKyMgVGhpcyBoZWxwcyB3aXRoIEhFUkVET0MgY29tcGFyaXNvbnMgbGF0ZXIuCitUVERJUj0iJEdJVF9CVUlMRF9ESVIvdC9oZWxwZXIvIiAmJiBleHBvcnQgVFRESVIKK1BBVEg9IiRUVERJUjokUEFUSCIgJiYgZXhwb3J0IFBBVEgKKworIyBXYXJuaW5nOiB1c2Ugb2YgJ3Rlc3RfY21wJyBtYXkgcnVuIHRlc3QtdG9vbC5leGUgYW5kL29yIGdpdC5leGUKKyMgV2FybmluZzogdG8gZG8gdGhlIGFjdHVhbCBkaWZmL2NvbXBhcmlzb24sIHNvIHRoZSBIRVJFRE9DcyBoZXJlCisjIFdhcm5pbmc6IG9ubHkgY292ZXIgb3VyIGFjdHVhbCBjYWxscyB0byB0ZXN0LXRvb2wgYW5kL29yIGdpdC4KKyMgV2FybmluZzogU28geW91IG1heSBzZWUgZXh0cmEgbGluZXMgaW4gYXJ0aWZhY3QgZmlsZXMgd2hlbgorIyBXYXJuaW5nOiBpbnRlcmFjdGl2ZWx5IGRlYnVnZ2luZy4KKworVj0kKGdpdCB2ZXJzaW9uIHwgc2VkIC1lICdzL15naXQgdmVyc2lvbiAvLycpICYmIGV4cG9ydCBWCisKKyMgVGhlcmUgYXJlIG11bHRpcGxlIHRyYWNlMiB0YXJnZXRzOiBub3JtYWwsIHBlcmYsIGFuZCBldmVudC4KKyMgVHJhY2UyIGV2ZW50cyB3aWxsL2NhbiBiZSB3cml0dGVuIHRvIGVhY2ggYWN0aXZlIHRhcmdldCAoc3ViamVjdAorIyB0byB3aGF0ZXZlciBmaWx0ZXJpbmcgdGhhdCB0YXJnZXQgZGVjaWRlcyB0byBkbykuCisjIFRlc3QgZWFjaCB0YXJnZXQgaW5kZXBlbmRlbnRseS4KKyMKKyMgRGVmZXIgc2V0dGluZyBHSVRfVFJBQ0UyX1BFUkYgdW50aWwgdGhlIGFjdHVhbCBjb21tYW5kIHdlIHdhbnQgdG8KKyMgdGVzdCBiZWNhdXNlIGhpZGRlbiBnaXQgYW5kIHRlc3QtdG9vbCBjb21tYW5kcyBpbiB0aGUgdGVzdAorIyBoYXJuZXNzIGNhbiBjb250YW1pbmF0ZSBvdXIgb3V0cHV0LgorCisjIFdlIGRvbid0IGJvdGhlciByZXBlYXRpbmcgdGhlIDAwMXJldHVybiBhbmQgMDAyZXhpdCB0ZXN0cywgc2luY2UgdGhleQorIyBoYXZlIGNvdmVyYWdlIGluIHRoZSBub3JtYWwgYW5kIHBlcmYgdGFyZ2V0cy4KKworIyBWZXJiIDAwM2Vycm9yCisjCisjIFRvIHRoZSBhYm92ZSwgYWRkIG11bHRpcGxlICdlcnJvciA8bXNnPicgZXZlbnRzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSlNPTl9QUCAnZXZlbnQgc3RyZWFtLCBlcnJvciBldmVudCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gdHJhY2UuZXZlbnQgYWN0dWFsIGV4cGVjdCIgJiYKKwlHSVRfVFJBQ0UyX0VWRU5UPSIkKHB3ZCkvdHJhY2UuZXZlbnQiIHRlc3QtdG9vbCB0cmFjZTIgMDAzZXJyb3IgImhlbGxvIHdvcmxkIiAidGhpcyBpcyBhIHRlc3QiICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEyL3BhcnNlX2V2ZW50cy5wZXJsIiA8dHJhY2UuZXZlbnQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8LUVPRiAmJgorCXxWQVIxID0geworCXwgICJfU0lEMF8iOnsKKwl8ICAgICJhcmd2IjpbCisJfCAgICAgICJfRVhFXyIsCisJfCAgICAgICJ0cmFjZTIiLAorCXwgICAgICAiMDAzZXJyb3IiLAorCXwgICAgICAiaGVsbG8gd29ybGQiLAorCXwgICAgICAidGhpcyBpcyBhIHRlc3QiCisJfCAgICBdLAorCXwgICAgImVycm9ycyI6WworCXwgICAgICAiJXMiLAorCXwgICAgICAiJXMiCisJfCAgICBdLAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIiLAorCXwgICAgIm5hbWUiOiJ0cmFjZTIiLAorCXwgICAgInZlcnNpb24iOiIkViIKKwl8ICB9CisJfH07CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFZlcmIgMDA0Y2hpbGQKKyMKKyMgVGVzdCBuZXN0ZWQgc3Bhd25pbmcgb2YgY2hpbGQgcHJvY2Vzc2VzLgorIworIyBDb25jZXB0dWFsbHksIHRoaXMgbG9va3MgbGlrZToKKyMgICAgUDE6IFRUIHRyYWNlMiAwMDRjaGlsZAorIyAgICBQMjogfC0tLSBUVCB0cmFjZTIgMDA0Y2hpbGQKKyMgICAgUDM6ICAgICAgfC0tLSBUVCB0cmFjZTIgMDAxcmV0dXJuIDAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBKU09OX1BQICdldmVudCBzdHJlYW0sIHJldHVybiBjb2RlIDAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLmV2ZW50IGFjdHVhbCBleHBlY3QiICYmCisJR0lUX1RSQUNFMl9FVkVOVD0iJChwd2QpL3RyYWNlLmV2ZW50IiB0ZXN0LXRvb2wgdHJhY2UyIDAwNGNoaWxkIHRlc3QtdG9vbCB0cmFjZTIgMDA0Y2hpbGQgdGVzdC10b29sIHRyYWNlMiAwMDFyZXR1cm4gMCAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMi9wYXJzZV9ldmVudHMucGVybCIgPHRyYWNlLmV2ZW50ID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PC1FT0YgJiYKKwl8VkFSMSA9IHsKKwl8ICAiX1NJRDBfIjp7CisJfCAgICAiYXJndiI6WworCXwgICAgICAiX0VYRV8iLAorCXwgICAgICAidHJhY2UyIiwKKwl8ICAgICAgIjAwNGNoaWxkIiwKKwl8ICAgICAgInRlc3QtdG9vbCIsCisJfCAgICAgICJ0cmFjZTIiLAorCXwgICAgICAiMDA0Y2hpbGQiLAorCXwgICAgICAidGVzdC10b29sIiwKKwl8ICAgICAgInRyYWNlMiIsCisJfCAgICAgICIwMDFyZXR1cm4iLAorCXwgICAgICAiMCIKKwl8ICAgIF0sCisJfCAgICAiY2hpbGQiOnsKKwl8ICAgICAgIjAiOnsKKwl8ICAgICAgICAiY2hpbGRfYXJndiI6WworCXwgICAgICAgICAgIl9FWEVfIiwKKwl8ICAgICAgICAgICJ0cmFjZTIiLAorCXwgICAgICAgICAgIjAwNGNoaWxkIiwKKwl8ICAgICAgICAgICJ0ZXN0LXRvb2wiLAorCXwgICAgICAgICAgInRyYWNlMiIsCisJfCAgICAgICAgICAiMDAxcmV0dXJuIiwKKwl8ICAgICAgICAgICIwIgorCXwgICAgICAgIF0sCisJfCAgICAgICAgImNoaWxkX2NsYXNzIjoiPyIsCisJfCAgICAgICAgImNoaWxkX2NvZGUiOjAsCisJfCAgICAgICAgInVzZV9zaGVsbCI6MAorCXwgICAgICB9CisJfCAgICB9LAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIiLAorCXwgICAgIm5hbWUiOiJ0cmFjZTIiLAorCXwgICAgInZlcnNpb24iOiIkViIKKwl8ICB9LAorCXwgICJfU0lEMF8vX1NJRDFfIjp7CisJfCAgICAiYXJndiI6WworCXwgICAgICAiX0VYRV8iLAorCXwgICAgICAidHJhY2UyIiwKKwl8ICAgICAgIjAwNGNoaWxkIiwKKwl8ICAgICAgInRlc3QtdG9vbCIsCisJfCAgICAgICJ0cmFjZTIiLAorCXwgICAgICAiMDAxcmV0dXJuIiwKKwl8ICAgICAgIjAiCisJfCAgICBdLAorCXwgICAgImNoaWxkIjp7CisJfCAgICAgICIwIjp7CisJfCAgICAgICAgImNoaWxkX2FyZ3YiOlsKKwl8ICAgICAgICAgICJfRVhFXyIsCisJfCAgICAgICAgICAidHJhY2UyIiwKKwl8ICAgICAgICAgICIwMDFyZXR1cm4iLAorCXwgICAgICAgICAgIjAiCisJfCAgICAgICAgXSwKKwl8ICAgICAgICAiY2hpbGRfY2xhc3MiOiI/IiwKKwl8ICAgICAgICAiY2hpbGRfY29kZSI6MCwKKwl8ICAgICAgICAidXNlX3NoZWxsIjowCisJfCAgICAgIH0KKwl8ICAgIH0sCisJfCAgICAiZXhpdF9jb2RlIjowLAorCXwgICAgImhpZXJhcmNoeSI6InRyYWNlMi90cmFjZTIiLAorCXwgICAgIm5hbWUiOiJ0cmFjZTIiLAorCXwgICAgInZlcnNpb24iOiIkViIKKwl8ICB9LAorCXwgICJfU0lEMF8vX1NJRDFfL19TSUQyXyI6eworCXwgICAgImFyZ3YiOlsKKwl8ICAgICAgIl9FWEVfIiwKKwl8ICAgICAgInRyYWNlMiIsCisJfCAgICAgICIwMDFyZXR1cm4iLAorCXwgICAgICAiMCIKKwl8ICAgIF0sCisJfCAgICAiZXhpdF9jb2RlIjowLAorCXwgICAgImhpZXJhcmNoeSI6InRyYWNlMi90cmFjZTIvdHJhY2UyIiwKKwl8ICAgICJuYW1lIjoidHJhY2UyIiwKKwl8ICAgICJ2ZXJzaW9uIjoiJFYiCisJfCAgfQorCXx9OworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUZXN0IGxpc3Rpbmcgb2YgYWxsICJpbnRlcmVzdGluZyIgY29uZmlnIHNldHRpbmdzLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpTT05fUFAgJ2V2ZW50IHN0cmVhbSwgbGlzdCBjb25maWcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLmV2ZW50IGFjdHVhbCBleHBlY3QiICYmCisJZ2l0IGNvbmZpZyAtLWxvY2FsIHQwMjEyLmFiYyAxICYmCisJZ2l0IGNvbmZpZyAtLWxvY2FsIHQwMjEyLmRlZiAiaGVsbG8gd29ybGQiICYmCisJR0lUX1RSQUNFMl9FVkVOVD0iJChwd2QpL3RyYWNlLmV2ZW50IiBHSVRfVFJBQ0UyX0NPTkZJR19QQVJBTVM9InQwMjEyLioiIHRlc3QtdG9vbCB0cmFjZTIgMDAxcmV0dXJuIDAgJiYKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkvdDAyMTIvcGFyc2VfZXZlbnRzLnBlcmwiIDx0cmFjZS5ldmVudCA+YWN0dWFsICYmCisJc2VkIC1lICJzL158Ly8iID5leHBlY3QgPDwtRU9GICYmCisJfFZBUjEgPSB7CisJfCAgIl9TSUQwXyI6eworCXwgICAgImFyZ3YiOlsKKwl8ICAgICAgIl9FWEVfIiwKKwl8ICAgICAgInRyYWNlMiIsCisJfCAgICAgICIwMDFyZXR1cm4iLAorCXwgICAgICAiMCIKKwl8ICAgIF0sCisJfCAgICAiZXhpdF9jb2RlIjowLAorCXwgICAgImhpZXJhcmNoeSI6InRyYWNlMiIsCisJfCAgICAibmFtZSI6InRyYWNlMiIsCisJfCAgICAicGFyYW1zIjpbCisJfCAgICAgIHsKKwl8ICAgICAgICAicGFyYW0iOiJ0MDIxMi5hYmMiLAorCXwgICAgICAgICJ2YWx1ZSI6IjEiCisJfCAgICAgIH0sCisJfCAgICAgIHsKKwl8ICAgICAgICAicGFyYW0iOiJ0MDIxMi5kZWYiLAorCXwgICAgICAgICJ2YWx1ZSI6ImhlbGxvIHdvcmxkIgorCXwgICAgICB9CisJfCAgICBdLAorCXwgICAgInZlcnNpb24iOiIkViIKKwl8ICB9CisJfH07CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpTT05fUFAgJ2Jhc2ljIHRyYWNlMl9kYXRhJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSB0cmFjZS5ldmVudCBhY3R1YWwgZXhwZWN0IiAmJgorCUdJVF9UUkFDRTJfRVZFTlQ9IiQocHdkKS90cmFjZS5ldmVudCIgdGVzdC10b29sIHRyYWNlMiAwMDZkYXRhIHRlc3RfY2F0ZWdvcnkgazEgdjEgdGVzdF9jYXRlZ29yeSBrMiB2MiAmJgorCXBlcmwgIiRURVNUX0RJUkVDVE9SWS90MDIxMi9wYXJzZV9ldmVudHMucGVybCIgPHRyYWNlLmV2ZW50ID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PC1FT0YgJiYKKwl8VkFSMSA9IHsKKwl8ICAiX1NJRDBfIjp7CisJfCAgICAiYXJndiI6WworCXwgICAgICAiX0VYRV8iLAorCXwgICAgICAidHJhY2UyIiwKKwl8ICAgICAgIjAwNmRhdGEiLAorCXwgICAgICAidGVzdF9jYXRlZ29yeSIsCisJfCAgICAgICJrMSIsCisJfCAgICAgICJ2MSIsCisJfCAgICAgICJ0ZXN0X2NhdGVnb3J5IiwKKwl8ICAgICAgImsyIiwKKwl8ICAgICAgInYyIgorCXwgICAgXSwKKwl8ICAgICJkYXRhIjp7CisJfCAgICAgICJ0ZXN0X2NhdGVnb3J5Ijp7CisJfCAgICAgICAgImsxIjoidjEiLAorCXwgICAgICAgICJrMiI6InYyIgorCXwgICAgICB9CisJfCAgICB9LAorCXwgICAgImV4aXRfY29kZSI6MCwKKwl8ICAgICJoaWVyYXJjaHkiOiJ0cmFjZTIiLAorCXwgICAgIm5hbWUiOiJ0cmFjZTIiLAorCXwgICAgInZlcnNpb24iOiIkViIKKwl8ICB9CisJfH07CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIE5vdyB0ZXN0IHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBnZXQgYWxsIFRyYWNlMiBzZXR0aW5ncworIyBmcm9tIHRoZSBnbG9iYWwgY29uZmlnLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpTT05fUFAgJ3VzaW5nIGdsb2JhbCBjb25maWcsIGV2ZW50IHN0cmVhbSwgZXJyb3IgZXZlbnQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHRyYWNlLmV2ZW50IGFjdHVhbCBleHBlY3QiICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIHRyYWNlMi5ldmVudFRhcmdldCAiJChwd2QpL3RyYWNlLmV2ZW50IiAmJgorCXRlc3QtdG9vbCB0cmFjZTIgMDAzZXJyb3IgImhlbGxvIHdvcmxkIiAidGhpcyBpcyBhIHRlc3QiICYmCisJcGVybCAiJFRFU1RfRElSRUNUT1JZL3QwMjEyL3BhcnNlX2V2ZW50cy5wZXJsIiA8dHJhY2UuZXZlbnQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9efC8vIiA+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+eyd2YWx1ZSd9OworCSAgICAkcHJvY2Vzc2VzLT57JHNpZH0tPnsnZGF0YSd9LT57JGNhdH0tPnska2V5fSA9ICR2YWx1ZTsKKwl9CisgICAgfQorCisgICAgIyBUaGlzIHRyYWNlMiB0YXJnZXQgZG9lcyBub3QgZW1pdCAncHJpbnRmJyBldmVudHMuCisgICAgIworICAgICMgZWxzaWYgKCRldmVudCBlcSAncHJpbnRmJykgeworICAgICMgfQorfQorCisjIER1bXAgdGhlIHJlc3VsdGluZyBoYXNoIGludG8gc29tZXRoaW5nIHRoYXQgd2UgY2FuIGNvbXBhcmUgYWdhaW5zdAorIyBpbiB0aGUgdGVzdCBzY3JpcHQuICBUaGVzZSBvcHRpb25zIG1ha2UgRHVtcGVyIG91dHB1dCBsb29rIGEgbGl0dGxlCisjIGJpdCBsaWtlIEpTT04uICBBbHNvIGNvbnZlcnQgdmFyaWFibGUgcmVmZXJlbmNlcyBvZiB0aGUgZm9ybSAiJFZBUioiCisjIHNvIHRoYXQgdGhlIG1hdGNoaW5nIEhFUkVET0MgZG9lc24ndCBuZWVkIHRvIGVzY2FwZSBpdC4KKworJERhdGE6OkR1bXBlcjo6U29ydGtleXMgPSAxOworJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMTsKKyREYXRhOjpEdW1wZXI6OlB1cml0eSA9IDE7CiskRGF0YTo6RHVtcGVyOjpQYWlyID0gJzonOworCitteSAkb3V0ID0gRHVtcGVyKCRwcm9jZXNzZXMpOworJG91dCA9fiBzLycvIi9nOworJG91dCA9fiBzL1wkVkFSL1ZBUi9nOworCisjIEZpbmFsbHksIGlmIHdlJ3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgdG8gZ2VuZXJhdGUgKG1hbnVhbGx5IGNvbmZpcm1lZCkKKyMgZGF0YSB0byBhZGQgdG8gdGhlIHRlc3Qgc2NyaXB0LCBndWFyZCB0aGUgaW5kZW50YXRpb24uCisKK2lmICgkZ2VuX2hlcmVkb2MgPT0gMSkgeworICAgICRvdXQgPX4gcy9eL1x0XHwvZ21zOworfQorCitwcmludCAkb3V0OwpkaWZmIC0tZ2l0IGEvdC90MDMwMC1jcmVkZW50aWFscy5zaCBiL3QvdDAzMDAtY3JlZGVudGlhbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzlmMDk3ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAzMDAtY3JlZGVudGlhbHMuc2gKQEAgLTAsMCArMSw0MzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyBjcmVkZW50aWFsIGhlbHBlciB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItY3JlZGVudGlhbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBoZWxwZXIgc2NyaXB0cycgJworCWNhdCA+ZHVtcCA8PC1cRU9GICYmCisJd2hvYW1pPSQoZWNobyAkMCB8IHNlZCBzLy4qZ2l0LWNyZWRlbnRpYWwtLy8pCisJZWNobyA+JjIgIiR3aG9hbWk6ICQqIgorCU9JRlM9JElGUworCUlGUz09CisJd2hpbGUgcmVhZCBrZXkgdmFsdWU7IGRvCisJCWVjaG8gPiYyICIkd2hvYW1pOiAka2V5PSR2YWx1ZSIKKwkJZXZhbCAiJGtleT0kdmFsdWUiCisJZG9uZQorCUlGUz0kT0lGUworCUVPRgorCisJd3JpdGVfc2NyaXB0IGdpdC1jcmVkZW50aWFsLXVzZWxlc3MgPDwtXEVPRiAmJgorCS4gLi9kdW1wCisJZXhpdCAwCisJRU9GCisKKwl3cml0ZV9zY3JpcHQgZ2l0LWNyZWRlbnRpYWwtdmVyYmF0aW0gPDwtXEVPRiAmJgorCXVzZXI9JDE7IHNoaWZ0CisJcGFzcz0kMTsgc2hpZnQKKwkuIC4vZHVtcAorCXRlc3QgLXogIiR1c2VyIiB8fCBlY2hvIHVzZXJuYW1lPSR1c2VyCisJdGVzdCAteiAiJHBhc3MiIHx8IGVjaG8gcGFzc3dvcmQ9JHBhc3MKKwlFT0YKKworCVBBVEg9IiRQV0Q6JFBBVEgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWxfZmlsbCBpbnZva2VzIGhlbHBlcicgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIGZvbyBiYXIiIDw8LVxFT0YKKwktLQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2ZpbGwgaW52b2tlcyBtdWx0aXBsZSBoZWxwZXJzJyAnCisJY2hlY2sgZmlsbCB1c2VsZXNzICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GCisJLS0KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCXVzZWxlc3M6IGdldAorCXZlcmJhdGltOiBnZXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9maWxsIHN0b3BzIHdoZW4gd2UgZ2V0IGEgZnVsbCByZXNwb25zZScgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIG9uZSB0d28iICJ2ZXJiYXRpbSB0aHJlZSBmb3VyIiA8PC1cRU9GCisJLS0KKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10d28KKwktLQorCXZlcmJhdGltOiBnZXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9maWxsIGNvbnRpbnVlcyB0aHJvdWdoIHBhcnRpYWwgcmVzcG9uc2UnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBvbmUgXCJcIiIgInZlcmJhdGltIHR3byB0aHJlZSIgPDwtXEVPRgorCS0tCisJdXNlcm5hbWU9dHdvCisJcGFzc3dvcmQ9dGhyZWUKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHVzZXJuYW1lPW9uZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2ZpbGwgcGFzc2VzIGFsb25nIG1ldGFkYXRhJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gb25lIHR3byIgPDwtXEVPRgorCXByb3RvY29sPWZ0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwktLQorCXByb3RvY29sPWZ0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10d28KKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9ZnRwCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwl2ZXJiYXRpbTogcGF0aD1mb28uZ2l0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWxfYXBwcm92ZSBjYWxscyBhbGwgaGVscGVycycgJworCWNoZWNrIGFwcHJvdmUgdXNlbGVzcyAidmVyYmF0aW0gb25lIHR3byIgPDwtXEVPRgorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJLS0KKwl1c2VsZXNzOiBzdG9yZQorCXVzZWxlc3M6IHVzZXJuYW1lPWZvbworCXVzZWxlc3M6IHBhc3N3b3JkPWJhcgorCXZlcmJhdGltOiBzdG9yZQorCXZlcmJhdGltOiB1c2VybmFtZT1mb28KKwl2ZXJiYXRpbTogcGFzc3dvcmQ9YmFyCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBib3RoZXIgc3RvcmluZyBwYXNzd29yZC1sZXNzIGNyZWRlbnRpYWwnICcKKwljaGVjayBhcHByb3ZlIHVzZWxlc3MgPDwtXEVPRgorCXVzZXJuYW1lPWZvbworCS0tCisJLS0KKwlFT0YKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX3JlamVjdCBjYWxscyBhbGwgaGVscGVycycgJworCWNoZWNrIHJlamVjdCB1c2VsZXNzICJ2ZXJiYXRpbSBvbmUgdHdvIiA8PC1cRU9GCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwktLQorCXVzZWxlc3M6IGVyYXNlCisJdXNlbGVzczogdXNlcm5hbWU9Zm9vCisJdXNlbGVzczogcGFzc3dvcmQ9YmFyCisJdmVyYmF0aW06IGVyYXNlCisJdmVyYmF0aW06IHVzZXJuYW1lPWZvbworCXZlcmJhdGltOiBwYXNzd29yZD1iYXIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlcm5hbWVzIGNhbiBiZSBwcmVzZXJ2ZWQnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBcIlwiIHRocmVlIiA8PC1cRU9GCisJdXNlcm5hbWU9b25lCisJLS0KKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10aHJlZQorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiB1c2VybmFtZT1vbmUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlcm5hbWVzIGNhbiBiZSBvdmVycmlkZGVuJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gdHdvIHRocmVlIiA8PC1cRU9GCisJdXNlcm5hbWU9b25lCisJLS0KKwl1c2VybmFtZT10d28KKwlwYXNzd29yZD10aHJlZQorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiB1c2VybmFtZT1vbmUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGJvdGhlciBjb21wbGV0aW5nIGFscmVhZHktZnVsbCBjcmVkZW50aWFsJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gdGhyZWUgZm91ciIgPDwtXEVPRgorCXVzZXJuYW1lPW9uZQorCXBhc3N3b3JkPXR3bworCS0tCisJdXNlcm5hbWU9b25lCisJcGFzc3dvcmQ9dHdvCisJLS0KKwlFT0YKKycKKworIyBXZSBjYW4ndCB0ZXN0IHRoZSBiYXNpYyB0ZXJtaW5hbCBwYXNzd29yZCBwcm9tcHQgaGVyZSBiZWNhdXNlCisjIGdldHBhc3MoKSB0cmllcyB0b28gaGFyZCB0byBmaW5kIHRoZSByZWFsIHRlcm1pbmFsLiBCdXQgaWYgb3VyCisjIGFza3Bhc3MgaGVscGVyIGlzIHJ1biwgd2Uga25vdyB0aGUgaW50ZXJuYWwgZ2V0cGFzcyBpcyB3b3JraW5nLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgaGVscGVyIGxpc3QgZmFsbHMgYmFjayB0byBpbnRlcm5hbCBnZXRwYXNzJyAnCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJLS0KKwl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCS0tCisJYXNrcGFzczogVXNlcm5hbWU6CisJYXNrcGFzczogUGFzc3dvcmQ6CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVybmFsIGdldHBhc3MgZG9lcyBub3QgYXNrIGZvciBrbm93biB1c2VybmFtZScgJworCWNoZWNrIGZpbGwgPDwtXEVPRgorCXVzZXJuYW1lPWZvbworCS0tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCS0tCisJYXNrcGFzczogUGFzc3dvcmQ6CisJRU9GCisnCisKK0hFTFBFUj0iIWYoKSB7CisJCWNhdCA+L2Rldi9udWxsCisJCWVjaG8gdXNlcm5hbWU9Zm9vCisJCWVjaG8gcGFzc3dvcmQ9YmFyCisJfTsgZiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgY29uZmlndXJlZCBjcmVkZW50aWFscycgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICIkSEVMUEVSIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCS0tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggY29uZmlndXJlZCBjcmVkZW50aWFsJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLmhlbHBlciAiJEhFTFBFUiIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPXJlcG8uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgbWF0Y2ggY29uZmlndXJlZCBjcmVkZW50aWFsJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2Zvby5oZWxwZXIgIiRIRUxQRVIiICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWJhcgorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWJhcgorCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJLS0KKwlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHBzOi8vYmFyJ1wnJzoKKwlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vYXNrcGFzcy11c2VybmFtZUBiYXInXCcnOgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBtdWx0aXBsZSBjb25maWd1cmVkIGhlbHBlcnMnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAidmVyYmF0aW0gXCJcIiBcIlwiIiAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS5oZWxwZXIgIiRIRUxQRVIiICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1yZXBvLmdpdAorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHBzCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggbXVsdGlwbGUgY29uZmlndXJlZCBoZWxwZXJzIHdpdGggVVJMcycgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdC5oZWxwZXIgInZlcmJhdGltIFwiXCIgXCJcIiIgJiYKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20uaGVscGVyICIkSEVMUEVSIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXBhdGg9cmVwby5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIHBlcmNlbnQtZW5jb2RlZCB2YWx1ZXMnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20vJTI1NjYuZ2l0LmhlbHBlciAiJEhFTFBFUiIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwl1cmw9aHR0cHM6Ly9leGFtcGxlLmNvbS8lMjU2Ni5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgdXNlcm5hbWUgZnJvbSBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20udXNlcm5hbWUgZm9vICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJLS0KKwlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vZm9vQGV4YW1wbGUuY29tJ1wnJzoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9ub3JzIHVzZXJuYW1lIGZyb20gVVJMIG92ZXIgaGVscGVyIChVUkwpJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLnVzZXJuYW1lIGJvYiAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS5oZWxwZXIgInZlcmJhdGltIFwiXCIgYmFyIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXVybD1odHRwczovL2FsaWNlQGV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1hbGljZQorCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHVzZXJuYW1lPWFsaWNlCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvbm9ycyB1c2VybmFtZSBmcm9tIFVSTCBvdmVyIGhlbHBlciAoY29tcG9uZW50cyknICcKKwl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20udXNlcm5hbWUgYm9iICYmCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLmhlbHBlciAidmVyYmF0aW0gXCJcIiBiYXIiICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9YWxpY2UKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWFsaWNlCisJcGFzc3dvcmQ9YmFyCisJLS0KKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHByb3RvY29sPWh0dHBzCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwl2ZXJiYXRpbTogdXNlcm5hbWU9YWxpY2UKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCBtYXRjaGluZyB1c2VybmFtZSB3aW5zJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tL3BhdGguZ2l0LnVzZXJuYW1lIGJvYiAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS51c2VybmFtZSBhbGljZSAmJgorCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaHR0cHM6Ly9leGFtcGxlLmNvbS5oZWxwZXIgInZlcmJhdGltIFwiXCIgYmFyIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXVybD1odHRwczovL2V4YW1wbGUuY29tL3BhdGguZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1hbGljZQorCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJdmVyYmF0aW06IHVzZXJuYW1lPWFsaWNlCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgcGF0aHMgY2FuIGJlIHBhcnQgb2YgY29udGV4dCcgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIGZvbyBiYXIiIDw8LVxFT0YgJiYKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJRU9GCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLnVzZUh0dHBQYXRoIHRydWUgJiYKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1mb28uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cHMKKwl2ZXJiYXRpbTogaG9zdD1leGFtcGxlLmNvbQorCXZlcmJhdGltOiBwYXRoPWZvby5naXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29udGV4dCB1c2VzIHVybG1hdGNoJyAnCisJdGVzdF9jb25maWcgImNyZWRlbnRpYWwuaHR0cHM6Ly8qLm9yZy51c2VIdHRwUGF0aCIgdHJ1ZSAmJgorCWNoZWNrIGZpbGwgInZlcmJhdGltIGZvbyBiYXIiIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5vcmcKKwlwYXRoPWZvby5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLm9yZworCXBhdGg9Zm9vLmdpdAorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUub3JnCisJdmVyYmF0aW06IHBhdGg9Zm9vLmdpdAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoZWxwZXJzIGNhbiBhYm9ydCB0aGUgcHJvY2VzcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBcCisJCS1jIGNyZWRlbnRpYWwuaGVscGVyPSIhZigpIHsgZWNobyBxdWl0PTE7IH07IGYiIFwKKwkJLWMgY3JlZGVudGlhbC5oZWxwZXI9InZlcmJhdGltIGZvbyBiYXIiIFwKKwkJY3JlZGVudGlhbCBmaWxsID5zdGRvdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGhlbHBlciBzcGVjIHJlc2V0cyBoZWxwZXIgbGlzdCcgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICJ2ZXJiYXRpbSBmaWxlIGZpbGUiICYmCisJY2hlY2sgZmlsbCAiIiAidmVyYmF0aW0gY21kbGluZSBjbWRsaW5lIiA8PC1cRU9GCisJLS0KKwl1c2VybmFtZT1jbWRsaW5lCisJcGFzc3dvcmQ9Y21kbGluZQorCS0tCisJdmVyYmF0aW06IGdldAorCUVPRgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAzMDEtY3JlZGVudGlhbC1jYWNoZS5zaCBiL3QvdDAzMDEtY3JlZGVudGlhbC1jYWNoZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYmQ1ZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDMwMS1jcmVkZW50aWFsLWNhY2hlLnNoCkBAIC0wLDAgKzEsMTExIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY3JlZGVudGlhbC1jYWNoZSB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItY3JlZGVudGlhbC5zaAorCit0ZXN0IC16ICIkTk9fVU5JWF9TT0NLRVRTIiB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGNyZWRlbnRpYWwtY2FjaGUgdGVzdHMsIHVuaXggc29ja2V0cyBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorfQorCisjIGRvbid0IGxlYXZlIGEgc3RhbGUgZGFlbW9uIHJ1bm5pbmcKK3Rlc3RfYXRleGl0ICdnaXQgY3JlZGVudGlhbC1jYWNoZSBleGl0JworCisjIHRlc3QgdGhhdCB0aGUgZGFlbW9uIHdvcmtzIHdpdGggbm8gc3BlY2lhbCBzZXR1cAoraGVscGVyX3Rlc3QgY2FjaGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc29ja2V0IGRlZmF1bHRzIHRvIH4vLmNhY2hlL2dpdC9jcmVkZW50aWFsL3NvY2tldCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCBjcmVkZW50aWFsLWNhY2hlIGV4aXQgJiYKKwkJcm1kaXIgLXAgLmNhY2hlL2dpdC9jcmVkZW50aWFsLworCSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEhPTUUvLmdpdC1jcmVkZW50aWFsLWNhY2hlIiAmJgorCXRlc3QgLVMgIiRIT01FLy5jYWNoZS9naXQvY3JlZGVudGlhbC9zb2NrZXQiCisnCisKK1hER19DQUNIRV9IT01FPSIkSE9NRS94ZGciCitleHBvcnQgWERHX0NBQ0hFX0hPTUUKKyMgdGVzdCBiZWhhdmlvciB3aGVuIFhER19DQUNIRV9IT01FIGlzIHNldAoraGVscGVyX3Rlc3QgY2FjaGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidXNlIGN1c3RvbSBYREdfQ0FDSEVfSE9NRSBpZiBzZXQgYW5kIGRlZmF1bHQgc29ja2V0cyBhcmUgbm90IGNyZWF0ZWQiICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjcmVkZW50aWFsLWNhY2hlIGV4aXQiICYmCisJdGVzdCAtUyAiJFhER19DQUNIRV9IT01FL2dpdC9jcmVkZW50aWFsL3NvY2tldCIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEhPTUUvLmdpdC1jcmVkZW50aWFsLWNhY2hlL3NvY2tldCIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEhPTUUvLmNhY2hlL2dpdC9jcmVkZW50aWFsL3NvY2tldCIKKycKK3Vuc2V0IFhER19DQUNIRV9IT01FCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWwtY2FjaGUgLS1zb2NrZXQgb3B0aW9uIG92ZXJyaWRlcyBkZWZhdWx0IGxvY2F0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNyZWRlbnRpYWwtY2FjaGUgZXhpdCAtLXNvY2tldCBcIlwkSE9NRS9kaXIvc29ja2V0XCIgJiYKKwkJcm1kaXIgXCJcJEhPTUUvZGlyXCIKKwkiICYmCisJY2hlY2sgYXBwcm92ZSAiY2FjaGUgLS1zb2NrZXQgXCJcJEhPTUUvZGlyL3NvY2tldFwiIiA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9c3RvcmUtdXNlcgorCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwlFT0YKKwl0ZXN0IC1TICIkSE9NRS9kaXIvc29ja2V0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ1c2UgY3VzdG9tIFhER19DQUNIRV9IT01FIGV2ZW4gaWYgeGRnIHNvY2tldCBleGlzdHMiICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgY3JlZGVudGlhbC1jYWNoZSBleGl0ICYmCisJCXNhbmVfdW5zZXQgWERHX0NBQ0hFX0hPTUUKKwkiICYmCisJY2hlY2sgYXBwcm92ZSBjYWNoZSA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9c3RvcmUtdXNlcgorCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwlFT0YKKwl0ZXN0IC1TICIkSE9NRS8uY2FjaGUvZ2l0L2NyZWRlbnRpYWwvc29ja2V0IiAmJgorCVhER19DQUNIRV9IT01FPSIkSE9NRS94ZGciICYmCisJZXhwb3J0IFhER19DQUNIRV9IT01FICYmCisJY2hlY2sgYXBwcm92ZSBjYWNoZSA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9c3RvcmUtdXNlcgorCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwlFT0YKKwl0ZXN0IC1TICIkWERHX0NBQ0hFX0hPTUUvZ2l0L2NyZWRlbnRpYWwvc29ja2V0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgdXNlciBzb2NrZXQgaWYgdXNlciBkaXJlY3RvcnkgZXhpc3RzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNyZWRlbnRpYWwtY2FjaGUgZXhpdCAmJgorCQlybWRpciBcIlwkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUvXCIKKwkiICYmCisJbWtkaXIgLXAgLW0gNzAwICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWwtY2FjaGUvIiAmJgorCWNoZWNrIGFwcHJvdmUgY2FjaGUgPDwtXEVPRiAmJgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPXN0b3JlLXVzZXIKKwlwYXNzd29yZD1zdG9yZS1wYXNzCisJRU9GCisJdGVzdCAtUyAiJEhPTUUvLmdpdC1jcmVkZW50aWFsLWNhY2hlL3NvY2tldCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndXNlIHVzZXIgc29ja2V0IGlmIHVzZXIgZGlyZWN0b3J5IGlzIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCBjcmVkZW50aWFsLWNhY2hlIGV4aXQgJiYKKwkJcm1kaXIgXCJcJEhPTUUvZGlyL1wiICYmCisJCXJtIFwiXCRIT01FLy5naXQtY3JlZGVudGlhbC1jYWNoZVwiCisJIiAmJgorCW1rZGlyIC1wIC1tIDcwMCAiJEhPTUUvZGlyLyIgJiYKKwlsbiAtcyAiJEhPTUUvZGlyIiAiJEhPTUUvLmdpdC1jcmVkZW50aWFsLWNhY2hlIiAmJgorCWNoZWNrIGFwcHJvdmUgY2FjaGUgPDwtXEVPRiAmJgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPXN0b3JlLXVzZXIKKwlwYXNzd29yZD1zdG9yZS1wYXNzCisJRU9GCisJdGVzdCAtUyAiJEhPTUUvLmdpdC1jcmVkZW50aWFsLWNhY2hlL3NvY2tldCIKKycKKworaGVscGVyX3Rlc3RfdGltZW91dCBjYWNoZSAtLXRpbWVvdXQ9MQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAzMDItY3JlZGVudGlhbC1zdG9yZS5zaCBiL3QvdDAzMDItY3JlZGVudGlhbC1zdG9yZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNmI1NGU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDMwMi1jcmVkZW50aWFsLXN0b3JlLnNoCkBAIC0wLDAgKzEsMTIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY3JlZGVudGlhbC1zdG9yZSB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItY3JlZGVudGlhbC5zaAorCitoZWxwZXJfdGVzdCBzdG9yZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIHhkZyBmaWxlIGRvZXMgbm90IGV4aXN0LCB4ZGcgZmlsZSBub3QgY3JlYXRlZCcgJworCXRlc3RfcGF0aF9pc19taXNzaW5nICIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwl0ZXN0IC1zICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB4ZGcgZmlsZScgJworCXJtIC1mICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS8uY29uZmlnL2dpdCIgJiYKKwk+IiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIgorJworCitoZWxwZXJfdGVzdCBzdG9yZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIHhkZyBmaWxlIGV4aXN0cywgaG9tZSBmaWxlIG5vdCBjcmVhdGVkJyAnCisJdGVzdCAtcyAiJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGN1c3RvbSB4ZGcgZmlsZScgJworCXJtIC1mICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCXJtIC1mICIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwlta2RpciAtcCAiJEhPTUUveGRnL2dpdCIgJiYKKwk+IiRIT01FL3hkZy9naXQvY3JlZGVudGlhbHMiCisnCisKK1hER19DT05GSUdfSE9NRT0iJEhPTUUveGRnIgorZXhwb3J0IFhER19DT05GSUdfSE9NRQoraGVscGVyX3Rlc3Qgc3RvcmUKK3Vuc2V0IFhER19DT05GSUdfSE9NRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZiBjdXN0b20geGRnIGZpbGUgZXhpc3RzLCBob21lIGFuZCB4ZGcgZmlsZXMgbm90IGNyZWF0ZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJEhPTUUveGRnL2dpdC9jcmVkZW50aWFsc1wiIiAmJgorCXRlc3QgLXMgIiRIT01FL3hkZy9naXQvY3JlZGVudGlhbHMiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQ6IHVzZSBob21lIGZpbGUgaWYgYm90aCBob21lIGFuZCB4ZGcgZmlsZXMgaGF2ZSBtYXRjaGVzJyAnCisJZWNobyAiaHR0cHM6Ly9ob21lLXVzZXI6aG9tZS1wYXNzQGV4YW1wbGUuY29tIiA+IiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJbWtkaXIgLXAgIiRIT01FLy5jb25maWcvZ2l0IiAmJgorCWVjaG8gImh0dHBzOi8veGRnLXVzZXI6eGRnLXBhc3NAZXhhbXBsZS5jb20iID4iJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiICYmCisJY2hlY2sgZmlsbCBzdG9yZSA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1ob21lLXVzZXIKKwlwYXNzd29yZD1ob21lLXBhc3MKKwktLQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQ6IHVzZSB4ZGcgZmlsZSBpZiBob21lIGZpbGUgaGFzIG5vIG1hdGNoZXMnICcKKwk+IiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJbWtkaXIgLXAgIiRIT01FLy5jb25maWcvZ2l0IiAmJgorCWVjaG8gImh0dHBzOi8veGRnLXVzZXI6eGRnLXBhc3NAZXhhbXBsZS5jb20iID4iJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiICYmCisJY2hlY2sgZmlsbCBzdG9yZSA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT14ZGctdXNlcgorCXBhc3N3b3JkPXhkZy1wYXNzCisJLS0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdnZXQ6IHVzZSB4ZGcgZmlsZSBpZiBob21lIGZpbGUgaXMgdW5yZWFkYWJsZScgJworCWVjaG8gImh0dHBzOi8vaG9tZS11c2VyOmhvbWUtcGFzc0BleGFtcGxlLmNvbSIgPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCWNobW9kIC1yICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS8uY29uZmlnL2dpdCIgJiYKKwllY2hvICJodHRwczovL3hkZy11c2VyOnhkZy1wYXNzQGV4YW1wbGUuY29tIiA+IiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCWNoZWNrIGZpbGwgc3RvcmUgPDwtXEVPRgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9eGRnLXVzZXIKKwlwYXNzd29yZD14ZGctcGFzcworCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3JlOiBpZiBib3RoIHhkZyBhbmQgaG9tZSBmaWxlcyBleGlzdCwgb25seSBzdG9yZSBpbiBob21lIGZpbGUnICcKKwk+IiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJbWtkaXIgLXAgIiRIT01FLy5jb25maWcvZ2l0IiAmJgorCT4iJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiICYmCisJY2hlY2sgYXBwcm92ZSBzdG9yZSA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9c3RvcmUtdXNlcgorCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwlFT0YKKwllY2hvICJodHRwczovL3N0b3JlLXVzZXI6c3RvcmUtcGFzc0BleGFtcGxlLmNvbSIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcmFzZTogZXJhc2UgbWF0Y2hpbmcgY3JlZGVudGlhbHMgZnJvbSBib3RoIHhkZyBhbmQgaG9tZSBmaWxlcycgJworCWVjaG8gImh0dHBzOi8vaG9tZS11c2VyOmhvbWUtcGFzc0BleGFtcGxlLmNvbSIgPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS8uY29uZmlnL2dpdCIgJiYKKwllY2hvICJodHRwczovL3hkZy11c2VyOnhkZy1wYXNzQGV4YW1wbGUuY29tIiA+IiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCWNoZWNrIHJlamVjdCBzdG9yZSA8PC1cRU9GICYmCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJRU9GCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDMwMy1jcmVkZW50aWFsLWV4dGVybmFsLnNoIGIvdC90MDMwMy1jcmVkZW50aWFsLWV4dGVybmFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMjhmZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMzAzLWNyZWRlbnRpYWwtZXh0ZXJuYWwuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4dGVybmFsIGNyZWRlbnRpYWwgaGVscGVyIHRlc3RzCisKK1RoaXMgaXMgYSB0b29sIGZvciBhdXRob3JzIG9mIGV4dGVybmFsIGhlbHBlciB0b29scyB0byBzYW5pdHktY2hlY2sKK3RoZWlyIGhlbHBlcnMuIElmIHlvdSBoYXZlIHdyaXR0ZW4gdGhlICJnaXQtY3JlZGVudGlhbC1mb28iIGhlbHBlciwKK3lvdSBjaGVjayBpdCB3aXRoOgorCisgIG1ha2UgR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVI9Zm9vIHQwMzAzLWNyZWRlbnRpYWwtZXh0ZXJuYWwuc2gKKworVGhpcyBhc3N1bWVzIHRoYXQgeW91ciBoZWxwZXIgaXMgY2FwYWJsZSBvZiBib3RoIHN0b3JpbmcgYW5kCityZXRyaWV2aW5nIGNyZWRlbnRpYWxzIChzb21lIGhlbHBlcnMgbWF5IGJlIHJlYWQtb25seSwgYW5kIHRoZXkgd2lsbAorZmFpbCB0aGVzZSB0ZXN0cykuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlIGluZGl2aWR1YWwgdGVzdHMgZG8gbm90IHZlcmlmeSBhbGwgb2YgdGhlCitwcmVjb25kaXRpb25zIHRoZW1zZWx2ZXMsIGJ1dCByYXRoZXIgYnVpbGQgb24gZWFjaCBvdGhlci4gQSBmYWlsaW5nCit0ZXN0IG1lYW5zIHRoYXQgdGVzdHMgbGF0ZXIgaW4gdGhlIHNlcXVlbmNlIGNhbiByZXR1cm4gZmFsc2UgIk9LIgorcmVzdWx0cy4KKworSWYgeW91ciBoZWxwZXIgc3VwcG9ydHMgdGltZS1iYXNlZCBleHBpcmF0aW9uIHdpdGggYSBjb25maWd1cmFibGUKK3RpbWVvdXQsIHlvdSBjYW4gdGVzdCB0aGF0IGZlYXR1cmUgd2l0aDoKKworICBtYWtlIEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSPWZvbyBcCisgICAgICAgR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfVElNRU9VVD0iZm9vIC0tdGltZW91dD0xIiBcCisgICAgICAgdDAzMDMtY3JlZGVudGlhbC1leHRlcm5hbC5zaAorCitJZiB5b3VyIGhlbHBlciByZXF1aXJlcyBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSB0aGUgdGVzdHMgYXJlIHN0YXJ0ZWQsCit5b3UgY2FuIHNldCBHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9TRVRVUCB0byBhIHNlcXVlbmNlIG9mIHNoZWxsCitjb21tYW5kcy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1jcmVkZW50aWFsLnNoCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUiI7IHRoZW4KKwlza2lwX2FsbD0idXNlZCB0byB0ZXN0IGV4dGVybmFsIGNyZWRlbnRpYWwgaGVscGVycyIKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3QgLXogIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9TRVRVUCIgfHwKKwlldmFsICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfU0VUVVAiCisKKyMgY2xlYW4gYmVmb3JlIHRoZSB0ZXN0IGluIGNhc2UgdGhlcmUgaXMgY3J1ZnQgbGVmdAorIyBvdmVyIGZyb20gYSBwcmV2aW91cyBydW4gdGhhdCB3b3VsZCBpbXBhY3QgcmVzdWx0cworaGVscGVyX3Rlc3RfY2xlYW4gIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUiIKKworaGVscGVyX3Rlc3QgIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUiIKKworaWYgdGVzdCAteiAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1RJTUVPVVQiOyB0aGVuCisJc2F5ICIjIHNraXBwaW5nIHRpbWVvdXQgdGVzdHMgKEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1RJTUVPVVQgbm90IHNldCkiCitlbHNlCisJaGVscGVyX3Rlc3RfdGltZW91dCAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1RJTUVPVVQiCitmaQorCisjIGNsZWFuIGFmdGVyd2FyZHMgc28gdGhhdCB3ZSBhcmUgZ29vZCBjaXRpemVucworIyBhbmQgZG9uJ3QgbGVhdmUgY3J1ZnQgaW4gdGhlIGhlbHBlcidzIHN0b3JhZ2UsIHdoaWNoCisjIG1pZ2h0IGJlIGxvbmctdGVybSBzeXN0ZW0gc3RvcmFnZQoraGVscGVyX3Rlc3RfY2xlYW4gIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUiIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwNDEwLXBhcnRpYWwtY2xvbmUuc2ggYi90L3QwNDEwLXBhcnRpYWwtY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTM5ODhiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDA0MTAtcGFydGlhbC1jbG9uZS5zaApAQCAtMCwwICsxLDYwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhcnRpYWwgY2xvbmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCitkZWxldGVfb2JqZWN0ICgpIHsKKwlybSAkMS8uZ2l0L29iamVjdHMvJChlY2hvICQyIHwgc2VkIC1lICdzfF4uLnwmL3wnKQorfQorCitwYWNrX2FzX2Zyb21fcHJvbWlzb3IgKCkgeworCUhBU0g9JChnaXQgLUMgcmVwbyBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjaykgJiYKKwk+cmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSRIQVNILnByb21pc29yICYmCisJZWNobyAkSEFTSAorfQorCitwcm9taXNlX2FuZF9kZWxldGUgKCkgeworCUhBU0g9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgIiQxIikgJiYKKwlnaXQgLUMgcmVwbyB0YWcgLWEgLW0gbWVzc2FnZSBteV9hbm5vdGF0ZWRfdGFnICIkSEFTSCIgJiYKKwlnaXQgLUMgcmVwbyByZXYtcGFyc2UgbXlfYW5ub3RhdGVkX3RhZyB8IHBhY2tfYXNfZnJvbV9wcm9taXNvciAmJgorCSMgdGFnIC1kIHByaW50cyBhIG1lc3NhZ2UgdG8gc3Rkb3V0LCBzbyByZWRpcmVjdCBpdAorCWdpdCAtQyByZXBvIHRhZyAtZCBteV9hbm5vdGF0ZWRfdGFnID4vZGV2L251bGwgJiYKKwlkZWxldGVfb2JqZWN0IHJlcG8gIiRIQVNIIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRlbnNpb25zLnBhcnRpYWxjbG9uZSB3aXRob3V0IGZpbHRlcicgJworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJZ2l0IGNsb25lIC0tZmlsdGVyPSJibG9iOm5vbmUiICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisJZ2l0IC1DIGNsaWVudCBjb25maWcgLS11bnNldCByZW1vdGUub3JpZ2luLnBhcnRpYWxjbG9uZWZpbHRlciAmJgorCWdpdCAtQyBjbGllbnQgZmV0Y2ggb3JpZ2luCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgcmVmbG9nIG9iamVjdCwgYnV0IHByb21pc2VkIGJ5IGEgY29tbWl0LCBwYXNzZXMgZnNjaycgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBteV9jb21taXQgJiYKKworCUE9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBhIEhFQURee3RyZWV9KSAmJgorCUM9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBjIC1wICRBIEhFQURee3RyZWV9KSAmJgorCisJIyBSZWZlcmVuY2UgJEEgb25seSBmcm9tIHJlZmxvZywgYW5kIGRlbGV0ZSBpdAorCWdpdCAtQyByZXBvIGJyYW5jaCBteV9icmFuY2ggIiRBIiAmJgorCWdpdCAtQyByZXBvIGJyYW5jaCAtZiBteV9icmFuY2ggbXlfY29tbWl0ICYmCisJZGVsZXRlX29iamVjdCByZXBvICIkQSIgJiYKKworCSMgU3RhdGUgdGhhdCB3ZSBnb3QgJEMsIHdoaWNoIHJlZmVycyB0byAkQSwgZnJvbSBwcm9taXNvcgorCXByaW50ZiAiJENcbiIgfCBwYWNrX2FzX2Zyb21fcHJvbWlzb3IgJiYKKworCSMgTm9ybWFsbHksIGl0IGZhaWxzCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlcG8gZnNjayAmJgorCisJIyBCdXQgd2l0aCB0aGUgZXh0ZW5zaW9uLCBpdCBzdWNjZWVkcworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisJZ2l0IC1DIHJlcG8gZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHJlZmxvZyBvYmplY3QsIGJ1dCBwcm9taXNlZCBieSBhIHRhZywgcGFzc2VzIGZzY2snICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gbXlfY29tbWl0ICYmCisKKwlBPSQoZ2l0IC1DIHJlcG8gY29tbWl0LXRyZWUgLW0gYSBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgLUMgcmVwbyB0YWcgLWEgLW0gZCBteV90YWdfbmFtZSAkQSAmJgorCVQ9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgbXlfdGFnX25hbWUpICYmCisJZ2l0IC1DIHJlcG8gdGFnIC1kIG15X3RhZ19uYW1lICYmCisKKwkjIFJlZmVyZW5jZSAkQSBvbmx5IGZyb20gcmVmbG9nLCBhbmQgZGVsZXRlIGl0CisJZ2l0IC1DIHJlcG8gYnJhbmNoIG15X2JyYW5jaCAiJEEiICYmCisJZ2l0IC1DIHJlcG8gYnJhbmNoIC1mIG15X2JyYW5jaCBteV9jb21taXQgJiYKKwlkZWxldGVfb2JqZWN0IHJlcG8gIiRBIiAmJgorCisJIyBTdGF0ZSB0aGF0IHdlIGdvdCAkVCwgd2hpY2ggcmVmZXJzIHRvICRBLCBmcm9tIHByb21pc29yCisJcHJpbnRmICIkVFxuIiB8IHBhY2tfYXNfZnJvbV9wcm9taXNvciAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgcmVmbG9nIG9iamVjdCBhbG9uZSBmYWlscyBmc2NrLCBldmVuIHdpdGggZXh0ZW5zaW9uIHNldCcgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBteV9jb21taXQgJiYKKworCUE9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBhIEhFQURee3RyZWV9KSAmJgorCUI9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBiIEhFQURee3RyZWV9KSAmJgorCisJIyBSZWZlcmVuY2UgJEEgb25seSBmcm9tIHJlZmxvZywgYW5kIGRlbGV0ZSBpdAorCWdpdCAtQyByZXBvIGJyYW5jaCBteV9icmFuY2ggIiRBIiAmJgorCWdpdCAtQyByZXBvIGJyYW5jaCAtZiBteV9icmFuY2ggbXlfY29tbWl0ICYmCisJZGVsZXRlX29iamVjdCByZXBvICIkQSIgJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlcG8gZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHJlZiBvYmplY3QsIGJ1dCBwcm9taXNlZCwgcGFzc2VzIGZzY2snICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gbXlfY29tbWl0ICYmCisKKwlBPSQoZ2l0IC1DIHJlcG8gY29tbWl0LXRyZWUgLW0gYSBIRUFEXnt0cmVlfSkgJiYKKworCSMgUmVmZXJlbmNlICRBIG9ubHkgZnJvbSByZWYKKwlnaXQgLUMgcmVwbyBicmFuY2ggbXlfYnJhbmNoICIkQSIgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRBIiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb2JqZWN0LCBidXQgcHJvbWlzZWQsIHBhc3NlcyBmc2NrJyAnCisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIDEgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIDIgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIDMgJiYKKwlnaXQgLUMgcmVwbyB0YWcgLWEgYW5ub3RhdGVkX3RhZyAtbSAiYW5ub3RhdGVkIHRhZyIgJiYKKworCUM9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgMSkgJiYKKwlUPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIDJee3RyZWV9KSAmJgorCUI9JChnaXQgaGFzaC1vYmplY3QgcmVwby8zLnQpICYmCisJQVQ9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgYW5ub3RhdGVkX3RhZykgJiYKKworCXByb21pc2VfYW5kX2RlbGV0ZSAiJEMiICYmCisJcHJvbWlzZV9hbmRfZGVsZXRlICIkVCIgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRCIiAmJgorCXByb21pc2VfYW5kX2RlbGV0ZSAiJEFUIiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgQ0xJIG9iamVjdCwgYnV0IHByb21pc2VkLCBwYXNzZXMgZnNjaycgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBteV9jb21taXQgJiYKKworCUE9JChnaXQgLUMgcmVwbyBjb21taXQtdHJlZSAtbSBhIEhFQURee3RyZWV9KSAmJgorCXByb21pc2VfYW5kX2RlbGV0ZSAiJEEiICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCWdpdCAtQyByZXBvIGZzY2sgIiRBIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBvZiBtaXNzaW5nIG9iamVjdHMnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIGZvbyAmJgorCWdpdCAtQyBzZXJ2ZXIgcmVwYWNrIC1hIC1kIC0td3JpdGUtYml0bWFwLWluZGV4ICYmCisKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiByZXBvICYmCisJSEFTSD0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSBmb28pICYmCisJcm0gLXJmIHJlcG8vLmdpdC9vYmplY3RzLyogJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgIm9yaWdpbiIgJiYKKwlnaXQgLUMgcmVwbyBjYXQtZmlsZSAtcCAiJEhBU0giICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSAucHJvbWlzb3IgZmlsZSBpcyB3cml0dGVuLCBhbmQgY2hlY2sgdGhhdCBpdHMKKwkjIGFzc29jaWF0ZWQgcGFja2ZpbGUgY29udGFpbnMgdGhlIG9iamVjdAorCWxzIHJlcG8vLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnByb21pc29yID5wcm9taXNvcmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHByb21pc29ybGlzdCAmJgorCUlEWD0kKHNlZCAicy9wcm9taXNvciQvaWR4LyIgcHJvbWlzb3JsaXN0KSAmJgorCWdpdCB2ZXJpZnktcGFjayAtLXZlcmJvc2UgIiRJRFgiID5vdXQgJiYKKwlncmVwICIkSEFTSCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG9mIG1pc3Npbmcgb2JqZWN0cyB3b3JrcyB3aXRoIHJlZi1pbi13YW50IGVuYWJsZWQnICcKKwkjIHJlZi1pbi13YW50IHJlcXVpcmVzIHByb3RvY29sIHZlcnNpb24gMgorCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHByb3RvY29sLnZlcnNpb24gMiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dyZWZpbndhbnQgMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKworCXJtIC1yZiByZXBvLy5naXQvb2JqZWN0cy8qICYmCisJcm0gLWYgdHJhY2UgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyByZXBvIGNhdC1maWxlIC1wICIkSEFTSCIgJiYKKwlncmVwICJnaXQ8IGZldGNoPS4qcmVmLWluLXdhbnQiIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG9mIG1pc3Npbmcgb2JqZWN0cyBmcm9tIGFub3RoZXIgcHJvbWlzb3IgcmVtb3RlJyAnCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgc2VydmVyMiAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlcjIgYmFyICYmCisJZ2l0IC1DIHNlcnZlcjIgcmVwYWNrIC1hIC1kIC0td3JpdGUtYml0bWFwLWluZGV4ICYmCisJSEFTSDI9JChnaXQgLUMgc2VydmVyMiByZXYtcGFyc2UgYmFyKSAmJgorCisJZ2l0IC1DIHJlcG8gcmVtb3RlIGFkZCBzZXJ2ZXIyICJmaWxlOi8vJChwd2QpL3NlcnZlcjIiICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIHJlbW90ZS5zZXJ2ZXIyLnByb21pc29yIHRydWUgJiYKKwlnaXQgLUMgcmVwbyBjYXQtZmlsZSAtcCAiJEhBU0gyIiAmJgorCisJZ2l0IC1DIHJlcG8gZmV0Y2ggc2VydmVyMiAmJgorCXJtIC1yZiByZXBvLy5naXQvb2JqZWN0cy8qICYmCisJZ2l0IC1DIHJlcG8gY2F0LWZpbGUgLXAgIiRIQVNIMiIgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIC5wcm9taXNvciBmaWxlIGlzIHdyaXR0ZW4sIGFuZCBjaGVjayB0aGF0IGl0cworCSMgYXNzb2NpYXRlZCBwYWNrZmlsZSBjb250YWlucyB0aGUgb2JqZWN0CisJbHMgcmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucHJvbWlzb3IgPnByb21pc29ybGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcHJvbWlzb3JsaXN0ICYmCisJSURYPSQoc2VkICJzL3Byb21pc29yJC9pZHgvIiBwcm9taXNvcmxpc3QpICYmCisJZ2l0IHZlcmlmeS1wYWNrIC0tdmVyYm9zZSAiJElEWCIgPm91dCAmJgorCWdyZXAgIiRIQVNIMiIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG9mIG1pc3Npbmcgb2JqZWN0cyBjb25maWd1cmVzIGEgcHJvbWlzb3IgcmVtb3RlJyAnCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgc2VydmVyMyAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlcjMgYmF6ICYmCisJZ2l0IC1DIHNlcnZlcjMgcmVwYWNrIC1hIC1kIC0td3JpdGUtYml0bWFwLWluZGV4ICYmCisJSEFTSDM9JChnaXQgLUMgc2VydmVyMyByZXYtcGFyc2UgYmF6KSAmJgorCWdpdCAtQyBzZXJ2ZXIzIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKworCXJtIHJlcG8vLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnByb21pc29yICYmCisKKwlnaXQgLUMgcmVwbyByZW1vdGUgYWRkIHNlcnZlcjMgImZpbGU6Ly8kKHB3ZCkvc2VydmVyMyIgJiYKKwlnaXQgLUMgcmVwbyBmZXRjaCAtLWZpbHRlcj0iYmxvYjpub25lIiBzZXJ2ZXIzICRIQVNIMyAmJgorCisJdGVzdF9jbXBfY29uZmlnIC1DIHJlcG8gdHJ1ZSByZW1vdGUuc2VydmVyMy5wcm9taXNvciAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgLnByb21pc29yIGZpbGUgaXMgd3JpdHRlbiwgYW5kIGNoZWNrIHRoYXQgaXRzCisJIyBhc3NvY2lhdGVkIHBhY2tmaWxlIGNvbnRhaW5zIHRoZSBvYmplY3QKKwlscyByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wcm9taXNvciA+cHJvbWlzb3JsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwcm9taXNvcmxpc3QgJiYKKwlJRFg9JChzZWQgInMvcHJvbWlzb3IkL2lkeC8iIHByb21pc29ybGlzdCkgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLS12ZXJib3NlICIkSURYIiA+b3V0ICYmCisJZ3JlcCAiJEhBU0gzIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgb2YgbWlzc2luZyBibG9icyB3b3JrcycgJworCXJtIC1yZiBzZXJ2ZXIgc2VydmVyMiByZXBvICYmCisJcm0gLXJmIHNlcnZlciBzZXJ2ZXIzIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBmb28gJiYKKwlnaXQgLUMgc2VydmVyIHJlcGFjayAtYSAtZCAtLXdyaXRlLWJpdG1hcC1pbmRleCAmJgorCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgcmVwbyAmJgorCWdpdCBoYXNoLW9iamVjdCByZXBvL2Zvby50ID5ibG9iaGFzaCAmJgorCXJtIC1yZiByZXBvLy5naXQvb2JqZWN0cy8qICYmCisKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAib3JpZ2luIiAmJgorCisJZ2l0IC1DIHJlcG8gY2F0LWZpbGUgLXAgJChjYXQgYmxvYmhhc2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG9mIG1pc3NpbmcgdHJlZXMgZG9lcyBub3QgZmV0Y2ggYmxvYnMnICcKKwlybSAtcmYgc2VydmVyIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBmb28gJiYKKwlnaXQgLUMgc2VydmVyIHJlcGFjayAtYSAtZCAtLXdyaXRlLWJpdG1hcC1pbmRleCAmJgorCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgcmVwbyAmJgorCWdpdCAtQyByZXBvIHJldi1wYXJzZSBmb29ee3RyZWV9ID50cmVlaGFzaCAmJgorCWdpdCBoYXNoLW9iamVjdCByZXBvL2Zvby50ID5ibG9iaGFzaCAmJgorCXJtIC1yZiByZXBvLy5naXQvb2JqZWN0cy8qICYmCisKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAib3JpZ2luIiAmJgorCWdpdCAtQyByZXBvIGNhdC1maWxlIC1wICQoY2F0IHRyZWVoYXNoKSAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgdHJlZSwgYnV0IG5vdCB0aGUgYmxvYiwgaXMgZmV0Y2hlZAorCWdpdCAtQyByZXBvIHJldi1saXN0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgJChjYXQgdHJlZWhhc2gpID5vYmplY3RzICYmCisJZ3JlcCAiXiQoY2F0IHRyZWVoYXNoKSIgb2JqZWN0cyAmJgorCWdyZXAgIl5bP10kKGNhdCBibG9iaGFzaCkiIG9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgc3RvcHMgdHJhdmVyc2FsIGF0IG1pc3NpbmcgYW5kIHByb21pc2VkIGNvbW1pdCcgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBmb28gJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIGJhciAmJgorCisJRk9PPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvbykgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRGT08iICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCUdJVF9URVNUX0NPTU1JVF9HUkFQSD0wIGdpdCAtQyByZXBvIC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgcmV2LWxpc3QgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgLS1vYmplY3RzIGJhciA+b3V0ICYmCisJZ3JlcCAkKGdpdCAtQyByZXBvIHJldi1wYXJzZSBiYXIpIG91dCAmJgorCSEgZ3JlcCAkRk9PIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHRyZWUgb2JqZWN0cyB3aXRoIC0tbWlzc2luZz1hbGxvdy1wcm9taXNvciBhbmQgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gZm9vICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBiYXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIGJheiAmJgorCisJcHJvbWlzZV9hbmRfZGVsZXRlICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGJhcl57dHJlZX0pICYmCisJcHJvbWlzZV9hbmRfZGVsZXRlICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvb157dHJlZX0pICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCisJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1taXNzaW5nPWFsbG93LXByb21pc29yIC0tb2JqZWN0cyBIRUFEID5vYmpzIDI+cmV2X2xpc3RfZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJldl9saXN0X2VyciAmJgorCSMgMyBjb21taXRzLCAzIGJsb2JzLCBhbmQgMSB0cmVlCisJdGVzdF9saW5lX2NvdW50ID0gNyBvYmpzICYmCisKKwkjIERvIHRoZSBzYW1lIGZvciAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cywgYnV0IHdpdGggYWxsIHRyZWVzIGdvbmUuCisJcHJvbWlzZV9hbmRfZGVsZXRlICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGJhel57dHJlZX0pICYmCisJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgLS1vYmplY3RzIEhFQUQgPm9ianMgMj5yZXZfbGlzdF9lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmV2X2xpc3RfZXJyICYmCisJIyAzIGNvbW1pdHMsIG5vIGJsb2JzIG9yIHRyZWVzCisJdGVzdF9saW5lX2NvdW50ID0gMyBvYmpzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgbm9uLXJvb3QgdHJlZSBvYmplY3QgYW5kIHJldi1saXN0JyAnCisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwlta2RpciByZXBvL2RpciAmJgorCWVjaG8gZm9vID5yZXBvL2Rpci9mb28gJiYKKwlnaXQgLUMgcmVwbyBhZGQgZGlyL2ZvbyAmJgorCWdpdCAtQyByZXBvIGNvbW1pdCAtbSAiY29tbWl0IGRpci9mb28iICYmCisKKwlwcm9taXNlX2FuZF9kZWxldGUgJChnaXQgLUMgcmVwbyByZXYtcGFyc2UgSEVBRDpkaXIpICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCisJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1taXNzaW5nPWFsbG93LWFueSAtLW9iamVjdHMgSEVBRCA+b2JqcyAyPnJldl9saXN0X2VyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXZfbGlzdF9lcnIgJiYKKwkjIDEgY29tbWl0IGFuZCAxIHRyZWUKKwl0ZXN0X2xpbmVfY291bnQgPSAyIG9ianMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgc3RvcHMgdHJhdmVyc2FsIGF0IG1pc3NpbmcgYW5kIHByb21pc2VkIHRyZWUnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gZm9vICYmCisJbWtkaXIgcmVwby9hX2RpciAmJgorCWVjaG8gc29tZXRoaW5nID5yZXBvL2FfZGlyL3NvbWV0aGluZyAmJgorCWdpdCAtQyByZXBvIGFkZCBhX2Rpci9zb21ldGhpbmcgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLW0gYmFyICYmCisKKwkjIGZvb157dHJlZX0gKHRyZWUgcmVmZXJlbmNlZCBmcm9tIGNvbW1pdCkKKwlUUkVFPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvb157dHJlZX0pICYmCisKKwkjIGEgdHJlZSByZWZlcmVuY2VkIGJ5IEhFQURee3RyZWV9ICh0cmVlIHJlZmVyZW5jZWQgZnJvbSB0cmVlKQorCVRSRUUyPSQoZ2l0IC1DIHJlcG8gbHMtdHJlZSBIRUFEXnt0cmVlfSB8IGdyZXAgIiB0cmVlICIgfCBoZWFkIC0xIHwgY3V0IC1iMTMtNTIpICYmCisKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRUUkVFIiAmJgorCXByb21pc2VfYW5kX2RlbGV0ZSAiJFRSRUUyIiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyByZXYtbGlzdCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAtLW9iamVjdHMgSEVBRCA+b3V0ICYmCisJZ3JlcCAkKGdpdCAtQyByZXBvIHJldi1wYXJzZSBmb28pIG91dCAmJgorCSEgZ3JlcCAkVFJFRSBvdXQgJiYKKwlncmVwICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIEhFQUQpIG91dCAmJgorCSEgZ3JlcCAkVFJFRTIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IHN0b3BzIHRyYXZlcnNhbCBhdCBtaXNzaW5nIGFuZCBwcm9taXNlZCBibG9iJyAnCisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwllY2hvIHNvbWV0aGluZyA+cmVwby9zb21ldGhpbmcgJiYKKwlnaXQgLUMgcmVwbyBhZGQgc29tZXRoaW5nICYmCisJZ2l0IC1DIHJlcG8gY29tbWl0IC1tIGZvbyAmJgorCisJQkxPQj0kKGdpdCAtQyByZXBvIGhhc2gtb2JqZWN0IC13IHNvbWV0aGluZykgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgIiRCTE9CIiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyByZXYtbGlzdCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAtLW9iamVjdHMgSEVBRCA+b3V0ICYmCisJZ3JlcCAkKGdpdCAtQyByZXBvIHJldi1wYXJzZSBIRUFEKSBvdXQgJiYKKwkhIGdyZXAgJEJMT0Igb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IHN0b3BzIHRyYXZlcnNhbCBhdCBwcm9taXNvciBjb21taXQsIHRyZWUsIGFuZCBibG9iJyAnCisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIGZvbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gYmFyICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBiYXogJiYKKworCUNPTU1JVD0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSBmb28pICYmCisJVFJFRT0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSBiYXJee3RyZWV9KSAmJgorCUJMT0I9JChnaXQgaGFzaC1vYmplY3QgcmVwby9iYXoudCkgJiYKKwlwcmludGYgIiVzXG4lc1xuJXNcbiIgJENPTU1JVCAkVFJFRSAkQkxPQiB8IHBhY2tfYXNfZnJvbV9wcm9taXNvciAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKwlnaXQgLUMgcmVwbyByZXYtbGlzdCAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAtLW9iamVjdHMgSEVBRCA+b3V0ICYmCisJISBncmVwICRDT01NSVQgb3V0ICYmCisJISBncmVwICRUUkVFIG91dCAmJgorCSEgZ3JlcCAkQkxPQiBvdXQgJiYKKwlncmVwICQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGJhcikgb3V0ICAjIHNhbml0eSBjaGVjayB0aGF0IHNvbWUgd2Fsa2luZyB3YXMgZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBkaWVzIGZvciBtaXNzaW5nIG9iamVjdHMgb24gY21kIGxpbmUnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gZm9vICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBiYXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIGJheiAmJgorCisJQ09NTUlUPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvbykgJiYKKwlUUkVFPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGJhcl57dHJlZX0pICYmCisJQkxPQj0kKGdpdCBoYXNoLW9iamVjdCByZXBvL2Jhei50KSAmJgorCisJcHJvbWlzZV9hbmRfZGVsZXRlICRDT01NSVQgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgJFRSRUUgJiYKKwlwcm9taXNlX2FuZF9kZWxldGUgJEJMT0IgJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisKKwlmb3IgT0JKIGluICIkQ09NTUlUIiAiJFRSRUUiICIkQkxPQiI7IGRvCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByZXBvIHJldi1saXN0IC0tb2JqZWN0cyBcCisJCQktLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAiJE9CSiIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSBcCisJCQktLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAiJE9CSiIgJiYKKworCQkjIERvIG5vdCBkaWUgb3IgY3Jhc2ggd2hlbiAtLWlnbm9yZS1taXNzaW5nIGlzIHBhc3NlZC4KKwkJZ2l0IC1DIHJlcG8gcmV2LWxpc3QgLS1pZ25vcmUtbWlzc2luZyAtLW9iamVjdHMgXAorCQkJLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgIiRPQkoiICYmCisJCWdpdCAtQyByZXBvIHJldi1saXN0IC0taWdub3JlLW1pc3NpbmcgLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSBcCisJCQktLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyAiJE9CSiIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBwcm9taXNvciByZW1vdGUgY2FuIGJlIHJlLWluaXRpYWxpemVkIGdyYWNlZnVsbHknICcKKwkjIGVuc3VyZSBvbmUgcHJvbWlzb3IgaXMgaW4gdGhlIHByb21pc29ycyBsaXN0CisJcm0gLXJmIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIG90aGVyICYmCisJZ2l0IC1DIHJlcG8gcmVtb3RlIGFkZCBmb28gImZpbGU6Ly8kKHB3ZCkvb3RoZXIiICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIHJlbW90ZS5mb28ucHJvbWlzb3IgdHJ1ZSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSBmb28gJiYKKworCSMgcmVpbml0aWFsaXplIHRoZSBwcm9taXNvcnMgbGlzdAorCWdpdCAtQyByZXBvIGZldGNoIC0tZmlsdGVyPWJsb2I6bm9uZSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgcmVwYWNrcyBwcm9taXNvciBvYmplY3RzIHNlcGFyYXRlbHkgZnJvbSBub24tcHJvbWlzb3Igb2JqZWN0cycgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBvbmUgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvIHR3byAmJgorCisJVFJFRV9PTkU9JChnaXQgLUMgcmVwbyByZXYtcGFyc2Ugb25lXnt0cmVlfSkgJiYKKwlwcmludGYgIiRUUkVFX09ORVxuIiB8IHBhY2tfYXNfZnJvbV9wcm9taXNvciAmJgorCVRSRUVfVFdPPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIHR3b157dHJlZX0pICYmCisJcHJpbnRmICIkVFJFRV9UV09cbiIgfCBwYWNrX2FzX2Zyb21fcHJvbWlzb3IgJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisJZ2l0IC1DIHJlcG8gZ2MgJiYKKworCSMgRW5zdXJlIHRoYXQgZXhhY3RseSBvbmUgcHJvbWlzb3IgcGFja2ZpbGUgZXhpc3RzLCBhbmQgdGhhdCBpdAorCSMgY29udGFpbnMgdGhlIHRyZWVzIGJ1dCBub3QgdGhlIGNvbW1pdHMKKwlscyByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wcm9taXNvciA+cHJvbWlzb3JsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwcm9taXNvcmxpc3QgJiYKKwlQUk9NSVNPUl9QQUNLRklMRT0kKHNlZCAicy8ucHJvbWlzb3IvLnBhY2svIiA8cHJvbWlzb3JsaXN0KSAmJgorCWdpdCB2ZXJpZnktcGFjayAkUFJPTUlTT1JfUEFDS0ZJTEUgLXYgPm91dCAmJgorCWdyZXAgIiRUUkVFX09ORSIgb3V0ICYmCisJZ3JlcCAiJFRSRUVfVFdPIiBvdXQgJiYKKwkhIGdyZXAgIiQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIG9uZSkiIG91dCAmJgorCSEgZ3JlcCAiJChnaXQgLUMgcmVwbyByZXYtcGFyc2UgdHdvKSIgb3V0ICYmCisKKwkjIFJlbW92ZSB0aGUgcHJvbWlzb3IgcGFja2ZpbGUgYW5kIGFzc29jaWF0ZWQgZmlsZXMKKwlybSAkKHNlZCAicy8ucHJvbWlzb3IvLyIgPHByb21pc29ybGlzdCkuKiAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgc2luZ2xlIG90aGVyIHBhY2sgY29udGFpbnMgdGhlIGNvbW1pdHMsIGJ1dCBub3QgdGhlCisJIyB0cmVlcworCWxzIHJlcG8vLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2sgPnBhY2tsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwYWNrbGlzdCAmJgorCWdpdCB2ZXJpZnktcGFjayByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrIC12ID5vdXQgJiYKKwlncmVwICIkKGdpdCAtQyByZXBvIHJldi1wYXJzZSBvbmUpIiBvdXQgJiYKKwlncmVwICIkKGdpdCAtQyByZXBvIHJldi1wYXJzZSB0d28pIiBvdXQgJiYKKwkhIGdyZXAgIiRUUkVFX09ORSIgb3V0ICYmCisJISBncmVwICIkVFJFRV9UV08iIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyBkb2VzIG5vdCByZXBhY2sgcHJvbWlzb3Igb2JqZWN0cyBpZiB0aGVyZSBhcmUgbm9uZScgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBvbmUgJiYKKworCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisJZ2l0IC1DIHJlcG8gZ2MgJiYKKworCSMgRW5zdXJlIHRoYXQgb25seSBvbmUgcGFjayBleGlzdHMKKwlscyByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrID5wYWNrbGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcGFja2xpc3QKKycKKworcmVwYWNrX2FuZF9jaGVjayAoKSB7CisJcm0gLXJmIHJlcG8yICYmCisJY3AgLXIgcmVwbyByZXBvMiAmJgorCWdpdCAtQyByZXBvMiByZXBhY2sgJDEgLWQgJiYKKwlnaXQgLUMgcmVwbzIgZnNjayAmJgorCisJZ2l0IC1DIHJlcG8yIGNhdC1maWxlIC1lICQyICYmCisJZ2l0IC1DIHJlcG8yIGNhdC1maWxlIC1lICQzCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayAtZCBkb2VzIG5vdCBpcnJldmVyc2libHkgZGVsZXRlIHByb21pc29yIG9iamVjdHMnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDEgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgZXh0ZW5zaW9ucy5wYXJ0aWFsY2xvbmUgImFyYml0cmFyeSBzdHJpbmciICYmCisKKwlnaXQgLUMgcmVwbyBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28gJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0aHJlZSAmJgorCWdpdCAtQyByZXBvIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvdXIgJiYKKwlPTkU9JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgSEVBRF5eXikgJiYKKwlUV089JChnaXQgLUMgcmVwbyByZXYtcGFyc2UgSEVBRF5eKSAmJgorCVRIUkVFPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIEhFQUReKSAmJgorCisJcHJpbnRmICIkVFdPXG4iIHwgcGFja19hc19mcm9tX3Byb21pc29yICYmCisJcHJpbnRmICIkVEhSRUVcbiIgfCBwYWNrX2FzX2Zyb21fcHJvbWlzb3IgJiYKKwlkZWxldGVfb2JqZWN0IHJlcG8gIiRPTkUiICYmCisKKwlyZXBhY2tfYW5kX2NoZWNrIC1hICIkVFdPIiAiJFRIUkVFIiAmJgorCXJlcGFja19hbmRfY2hlY2sgLUEgIiRUV08iICIkVEhSRUUiICYmCisJcmVwYWNrX2FuZF9jaGVjayAtbCAiJFRXTyIgIiRUSFJFRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2Mgc3RvcHMgdHJhdmVyc2FsIHdoZW4gYSBtaXNzaW5nIGJ1dCBwcm9taXNlZCBvYmplY3QgaXMgcmVhY2hlZCcgJworCXJtIC1yZiByZXBvICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBteV9jb21taXQgJiYKKworCVRSRUVfSEFTSD0kKGdpdCAtQyByZXBvIHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwlIQVNIPSQocHJvbWlzZV9hbmRfZGVsZXRlICRUUkVFX0hBU0gpICYmCisKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiAxICYmCisJZ2l0IC1DIHJlcG8gY29uZmlnIGV4dGVuc2lvbnMucGFydGlhbGNsb25lICJhcmJpdHJhcnkgc3RyaW5nIiAmJgorCWdpdCAtQyByZXBvIGdjICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBwcm9taXNvciBwYWNrZmlsZSBzdGlsbCBleGlzdHMsIGFuZCByZW1vdmUgaXQKKwl0ZXN0IC1lIHJlcG8vLmdpdC9vYmplY3RzL3BhY2svcGFjay0kSEFTSC5wYWNrICYmCisJcm0gcmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSRIQVNILiogJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIHNpbmdsZSBvdGhlciBwYWNrIGNvbnRhaW5zIHRoZSBjb21taXQsIGJ1dCBub3QgdGhlIHRyZWUKKwlscyByZXBvLy5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrID5wYWNrbGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcGFja2xpc3QgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgcmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjayAtdiA+b3V0ICYmCisJZ3JlcCAiJChnaXQgLUMgcmVwbyByZXYtcGFyc2UgSEVBRCkiIG91dCAmJgorCSEgZ3JlcCAiJFRSRUVfSEFTSCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBmZXRjaCB3aGVuIGNoZWNraW5nIGV4aXN0ZW5jZSBvZiB0cmVlIHdlIGNvbnN0cnVjdCBvdXJzZWx2ZXMnICcKKwlybSAtcmYgcmVwbyAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gYmFzZSAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gc2lkZTEgJiYKKwlnaXQgLUMgcmVwbyBjaGVja291dCBiYXNlICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyBzaWRlMiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAiYXJiaXRyYXJ5IHN0cmluZyIgJiYKKworCWdpdCAtQyByZXBvIGNoZXJyeS1waWNrIHNpZGUxCisnCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBvZiBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbiBIVFRQIHNlcnZlcicgJworCXJtIC1yZiByZXBvICYmCisJU0VSVkVSPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NlcnZlciIgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkU0VSVkVSIiAmJgorCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBmb28gJiYKKwlnaXQgLUMgIiRTRVJWRVIiIHJlcGFjayAtYSAtZCAtLXdyaXRlLWJpdG1hcC1pbmRleCAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvc2VydmVyIHJlcG8gJiYKKwlIQVNIPSQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIGZvbykgJiYKKwlybSAtcmYgcmVwby8uZ2l0L29iamVjdHMvKiAmJgorCisJZ2l0IC1DIHJlcG8gY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gMSAmJgorCWdpdCAtQyByZXBvIGNvbmZpZyBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSAib3JpZ2luIiAmJgorCWdpdCAtQyByZXBvIGNhdC1maWxlIC1wICIkSEFTSCIgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIC5wcm9taXNvciBmaWxlIGlzIHdyaXR0ZW4sIGFuZCBjaGVjayB0aGF0IGl0cworCSMgYXNzb2NpYXRlZCBwYWNrZmlsZSBjb250YWlucyB0aGUgb2JqZWN0CisJbHMgcmVwby8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucHJvbWlzb3IgPnByb21pc29ybGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcHJvbWlzb3JsaXN0ICYmCisJSURYPSQoc2VkICJzL3Byb21pc29yJC9pZHgvIiBwcm9taXNvcmxpc3QpICYmCisJZ2l0IHZlcmlmeS1wYWNrIC0tdmVyYm9zZSAiJElEWCIgPm91dCAmJgorCWdyZXAgIiRIQVNIIiBvdXQKKycKKworIyBETyBOT1QgYWRkIG5vbi1odHRwZC1zcGVjaWZpYyB0ZXN0cyBoZXJlLCBiZWNhdXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhpcworIyB0ZXN0IHNjcmlwdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaHR0cGQgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaCBiL3QvdDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMmQwODhkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDUwMC1wcm9ncmVzcy1kaXNwbGF5LnNoCkBAIC0wLDAgKzEsMjg2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJvZ3Jlc3MgZGlzcGxheScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Nob3dfY3IgKCkgeworCXRyICdcMDE1JyBRIHwgc2VkIC1lICJzL1EvPENSPlxcJExGL2ciCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBwcm9ncmVzcyBkaXNwbGF5JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVdvcmtpbmcgaGFyZDogMTxDUj4KKwlXb3JraW5nIGhhcmQ6IDI8Q1I+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+c3RkZXJyICYmCisKKwlzaG93X2NyIDxzdGRlcnIgPm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoIGIvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxM2M1YTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2gKQEAgLTAsMCArMSw1MTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGhyZWUgd2F5IG1lcmdlIHdpdGggcmVhZC10cmVlIC1tCisKK1RoaXMgdGVzdCB0cmllcyB0aHJlZS13YXkgbWVyZ2Ugd2l0aCByZWFkLXRyZWUgLW0KKworVGhlcmUgaXMgb25lIGFuY2VzdG9yIChjYWxsZWQgTyBmb3IgT3JpZ2luYWwpIGFuZCB0d28gYnJhbmNoZXMgQQorYW5kIEIgZGVyaXZlZCBmcm9tIGl0LiAgV2Ugd2FudCB0byBkbyBhIDMtd2F5IG1lcmdlIGJldHdlZW4gQSBhbmQKK0IsIHVzaW5nIE8gYXMgdGhlIGNvbW1vbiBhbmNlc3Rvci4KKworICAgIG1lcmdlIEEgTyBCCisKK0RlY2lzaW9ucyBhcmUgbWFkZSBieSBjb21wYXJpbmcgY29udGVudHMgb2YgTywgQSBhbmQgQiBwYXRobmFtZQorYnkgcGF0aG5hbWUuICBUaGUgcmVzdWx0IGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBndWlkaW5nCitwcmluY2lwbGU6CisKKyAtIElmIG9ubHkgQSBkb2VzIHNvbWV0aGluZyB0byBpdCBhbmQgQiBkb2VzIG5vdCB0b3VjaCBpdCwgdGFrZQorICAgd2hhdGV2ZXIgQSBkb2VzLgorCisgLSBJZiBvbmx5IEIgZG9lcyBzb21ldGhpbmcgdG8gaXQgYW5kIEEgZG9lcyBub3QgdG91Y2ggaXQsIHRha2UKKyAgIHdoYXRldmVyIEIgZG9lcy4KKworIC0gSWYgYm90aCBBIGFuZCBCIGRvZXMgc29tZXRoaW5nIGJ1dCBpbiB0aGUgc2FtZSB3YXksIHRha2UKKyAgIHdoYXRldmVyIHRoZXkgZG8uCisKKyAtIElmIEEgYW5kIEIgZG9lcyBzb21ldGhpbmcgYnV0IGRpZmZlcmVudCB0aGluZ3MsIHdlIG5lZWQgYQorICAgMy13YXkgbWVyZ2U6CisKKyAgIC0gV2UgY2Fubm90IGRvIGFueXRoaW5nIGFib3V0IHRoZSBmb2xsb3dpbmcgY2FzZXM6CisKKyAgICAgKiBPIGRvZXMgbm90IGhhdmUgaXQuICBBIGFuZCBCIGJvdGggbXVzdCBiZSBhZGRpbmcgdG8gdGhlCisgICAgICAgc2FtZSBwYXRoIGluZGVwZW5kZW50bHkuCisKKyAgICAgKiBBIGRlbGV0ZXMgaXQuICBCIG11c3QgYmUgbW9kaWZ5aW5nLgorCisgICAtIE90aGVyd2lzZSwgQSBhbmQgQiBhcmUgbW9kaWZ5aW5nLiAgUnVuIDMtd2F5IG1lcmdlLgorCitGaXJzdCwgdGhlIGNhc2UgbWF0cml4LgorCisgLSBWZXJ0aWNhbCBheGlzIGlzIGZvciBBJ1wnJ3MgYWN0aW9ucy4KKyAtIEhvcml6b250YWwgYXhpcyBpcyBmb3IgQidcJydzIGFjdGlvbnMuCisKKy4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBBICAgICAgICBCIHwgTm8gQWN0aW9uICB8ICAgRGVsZXRlICAgfCAgIE1vZGlmeSAgIHwgICAgQWRkICAgICB8Cit8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLXwKK3wgTm8gQWN0aW9uICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfAorfCAgICAgICAgICAgIHwgc2VsZWN0IE8gICB8IGRlbGV0ZSAgICAgfCBzZWxlY3QgQiAgIHwgc2VsZWN0IEIgICB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tfAorfCBEZWxldGUgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAqKioqKioqKioqIHwgICAgY2FuICAgICB8Cit8ICAgICAgICAgICAgfCBkZWxldGUgICAgIHwgZGVsZXRlICAgICB8IG1lcmdlICAgICAgfCAgICBub3QgICAgIHwKK3wgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICBoYXBwZW4gICAgfAorfC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS18Cit8IE1vZGlmeSAgICAgfCAgICAgICAgICAgIHwgKioqKioqKioqKiB8ID8/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+YWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoIGIvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViNDRiYWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDExLXJlYWQtdHJlZS1zcGFyc2UtY2hlY2tvdXQuc2gKQEAgLTAsMCArMSwyNzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGFyc2UgY2hlY2tvdXQgdGVzdHMKKworKiAodGFnOiByZW1vdmVkLCBtYXN0ZXIpIHJlbW92ZWQKK3wgRAlzdWIvYWRkZWQKKyogKEhFQUQsIHRhZzogdG9wKSBtb2RpZmllZCBhbmQgYWRkZWQKK3wgTQlpbml0LnQKK3wgQQlzdWIvYWRkZWQKKyogKHRhZzogaW5pdCkgaW5pdAorICBBCWluaXQudAorJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQgJiYKKwllY2hvIG1vZGlmaWVkID4+aW5pdC50ICYmCisKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCBpbml0LnQpIDAJaW5pdC50CisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3ViL2FkZGVkCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3ViL2FkZGVkdG9vCisJMTAwNjQ0ICRFTVBUWV9CTE9CIDAJc3Vic3ViL2FkZGVkCisJRU9GCisJY2F0ID5leHBlY3RlZC5zd3QgPDwtXEVPRiAmJgorCUggaW5pdC50CisJSCBzdWIvYWRkZWQKKwlIIHN1Yi9hZGRlZHRvbworCUggc3Vic3ViL2FkZGVkCisJRU9GCisKKwlta2RpciBzdWIgc3Vic3ViICYmCisJdG91Y2ggc3ViL2FkZGVkIHN1Yi9hZGRlZHRvbyBzdWJzdWIvYWRkZWQgJiYKKwlnaXQgYWRkIGluaXQudCBzdWIvYWRkZWQgc3ViL2FkZGVkdG9vIHN1YnN1Yi9hZGRlZCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGFuZCBhZGRlZCIgJiYKKwlnaXQgdGFnIHRvcCAmJgorCWdpdCBybSBzdWIvYWRkZWQgJiYKKwlnaXQgY29tbWl0IC1tIHJlbW92ZWQgJiYKKwlnaXQgdGFnIHJlbW92ZWQgJiYKKwlnaXQgY2hlY2tvdXQgdG9wICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgd2l0aG91dCAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0JyAnCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB3aXRoIC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgYnV0IGRpc2FibGVkJyAnCisJZWNobyA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLS1uby1zcGFyc2UtY2hlY2tvdXQgd2l0aCBlbXB0eSAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IGFuZCBlbmFibGVkJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNwYXJzZWNoZWNrb3V0IHRydWUgJiYKKwllY2hvID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tbm8tc3BhcnNlLWNoZWNrb3V0IC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB3aXRoIGVtcHR5IC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQnICcKKwlnaXQgY29uZmlnIGNvcmUuc3BhcnNlY2hlY2tvdXQgdHJ1ZSAmJgorCWVjaG8gPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X2ZhaWwgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIGRpcmVjdG9yaWVzIHdpdGggdHJhaWxpbmcgc2xhc2gnICcKKwljYXQgPmV4cGVjdGVkLnN3dC1ub2luaXQgPDwtXEVPRiAmJgorCVMgaW5pdC50CisJSCBzdWIvYWRkZWQKKwlIIHN1Yi9hZGRlZHRvbworCVMgc3Vic3ViL2FkZGVkCisJRU9GCisKKwllY2hvIHN1Yi8gPiAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3Qtbm9pbml0IHJlc3VsdCAmJgorCXRlc3QgISAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBkaXJlY3RvcmllcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoJyAnCisJZWNobyBzdWIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5vaW5pdCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggZGlyZWN0b3JpZXMgd2l0aCBuZWdhdGVkIHBhdHRlcm5zJyAnCisJY2F0ID5leHBlY3RlZC5zd3QtbmVnYXRpb24gPDxcRU9GICYmCitTIGluaXQudAorUyBzdWIvYWRkZWQKK0ggc3ViL2FkZGVkdG9vCitTIHN1YnN1Yi9hZGRlZAorRU9GCisKKwljYXQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDxcRU9GICYmCitzdWIKKyFzdWIvYWRkZWQKK0VPRgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uIHJlc3VsdCAmJgorCXRlc3QgISAtZiBpbml0LnQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkICYmCisJdGVzdCAtZiBzdWIvYWRkZWR0b28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggZGlyZWN0b3JpZXMgd2l0aCBuZWdhdGVkIHBhdHRlcm5zICgyKScgJworCWNhdCA+ZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uMiA8PFxFT0YgJiYKK0ggaW5pdC50CitIIHN1Yi9hZGRlZAorUyBzdWIvYWRkZWR0b28KK0ggc3Vic3ViL2FkZGVkCitFT0YKKworCWNhdCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PFxFT0YgJiYKKy8qCishc3ViCitzdWIvYWRkZWQKK0VPRgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uMiByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZHRvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBkaXJlY3RvcnkgcGF0dGVybicgJworCWVjaG8gInM/YiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5vaW5pdCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYXJlYSBjaGFuZ2VzJyAnCisJY2F0ID5leHBlY3RlZC5zd3Qtbm9zdWIgPDwtXEVPRiAmJgorCUggaW5pdC50CisJUyBzdWIvYWRkZWQKKwlTIHN1Yi9hZGRlZHRvbworCVMgc3Vic3ViL2FkZGVkCisJRU9GCisKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3Qtbm9zdWIgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB1cGRhdGVzIHdvcmt0cmVlLCBhYnNlbnQgY2FzZScgJworCWVjaG8gc3ViL2FkZGVkID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEXiAmJgorCXRlc3QgISAtZiBpbml0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHVwZGF0ZXMgd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwllY2hvIHN1Yi9hZGRlZCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwllY2hvIGRpcnR5ID5pbml0LnQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IGluaXQudCAmJgorCXJtIGluaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgcmVtb3ZlcyB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWVjaG8gZGlydHkgPmFkZGVkICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBhZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgYWRkcyB0byB3b3JrdHJlZSwgYWJzZW50IGNhc2UnICcKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiByZW1vdmVkICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC11IC1tIEhFQUReICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgYWRkcyB0byB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHJlbW92ZWQgJiYKKwlta2RpciBzdWIgJiYKKwllY2hvIGRpcnR5ID5zdWIvYWRkZWQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLXUgLW0gSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCByZW1vdmFsIGFuZCB3b3JrdHJlZSBuYXJyb3dpbmcgYXQgdGhlIHNhbWUgdGltZScgJworCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZWNobyBzdWIvYWRkZWQgPj4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IHJlbW92ZWQgJiYKKwlnaXQgbHMtZmlsZXMgc3ViL2FkZGVkID5yZXN1bHQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLS1yZXNldCByZW1vdmVzIG91dHNpZGUgd29ya3RyZWUnICcKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHJlbW92ZWQgJiYKKwlnaXQgbHMtZmlsZXMgc3ViL2FkZGVkID5yZXN1bHQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByaW50IGVycm9ycyB3aGVuIGZhaWxlZCB0byB1cGRhdGUgd29ya3RyZWUnICcKKwllY2hvIHN1YiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiBpbml0ICYmCisJbWtkaXIgc3ViICYmCisJdG91Y2ggc3ViL2FkZGVkIHN1Yi9hZGRlZHRvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCB0b3AgMj5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorZXJyb3I6IFRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoKKwlzdWIvYWRkZWQKKwlzdWIvYWRkZWR0b28KK1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLgorQWJvcnRpbmcKK0VPRgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aG91dCAtLWlnbm9yZS1za2lwLXdvcmt0cmVlLWJpdHMnICcKKwllY2hvICIqIiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBpbml0LnQgJiYKKwllY2hvIHN1YiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAmJgorCWVjaG8gbW9kaWZpZWQgPj4gc3ViL2FkZGVkICYmCisJZ2l0IGNoZWNrb3V0IC4gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBpbml0LnQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzJyAnCisJZWNobyAiKiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgaW5pdC50ICYmCisJZWNobyBzdWIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgJiYKKwllY2hvIG1vZGlmaWVkID4+IHN1Yi9hZGRlZCAmJgorCWdpdCBjaGVja291dCAtLWlnbm9yZS1za2lwLXdvcmt0cmVlLWJpdHMgLiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGluaXQudCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDEyLXJlYWQtdHJlZS1kZi5zaCBiL3QvdDEwMTItcmVhZC10cmVlLWRmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3ZjA3NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEyLXJlYWQtdHJlZS1kZi5zaApAQCAtMCwwICsxLDEwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYWQtdHJlZSBEL0YgY29uZmxpY3QgY29ybmVyIGNhc2VzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCittYWtldHJlZSAoKSB7CisJKAorCQlybSAtZiAuZ2l0L2luZGV4IC5naXQvaW5kZXgubG9jayAmJgorCQlnaXQgY2xlYW4gLWQgLWYgLWYgLXEgLXggJiYKKwkJbmFtZT0iJDEiICYmCisJCXNoaWZ0ICYmCisJCWZvciBpdAorCQlkbworCQkJcGF0aD0kKGV4cHIgIiRpdCIgOiAnXChbXjpdKlwpJykgJiYKKwkJCW1rZGlyIC1wICQoZGlybmFtZSAiJHBhdGgiKSAmJgorCQkJZWNobyAiJGl0IiA+IiRwYXRoIiAmJgorCQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAiJHBhdGgiIHx8IGV4aXQKKwkJZG9uZSAmJgorCQlnaXQgdGFnICIkbmFtZSIgJChnaXQgd3JpdGUtdHJlZSkKKwkpCit9CisKK3NldHRyZWUgKCkgeworCXJtIC1mIC5naXQvaW5kZXggLmdpdC9pbmRleC5sb2NrICYmCisJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14ICYmCisJZ2l0IHJlYWQtdHJlZSAiJDEiICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1xIC11IC1hICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKK30KKworY2hlY2tpbmRleCAoKSB7CisJZ2l0IGxzLWZpbGVzIC1zIHwKKwlzZWQgInN8XlswLTddWzAtN10qICRPSURfUkVHRVggXChbMC0zXVwpCXxcMSB8IiA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWFrZXRyZWUgTy0wMDAgYS9iLTIvYy9kIGEvYi9jL2QgYS94ICYmCisJbWFrZXRyZWUgQS0wMDAgYS9iLTIvYy9kIGEvYi9jL2QgYS94ICYmCisJbWFrZXRyZWUgQS0wMDEgYS9iLTIvYy9kIGEvYi9jL2QgYS9iL2MvZSBhL3ggJiYKKwltYWtldHJlZSBCLTAwMCBhL2ItMi9jL2QgYS9iICAgICBhL3ggJiYKKworCW1ha2V0cmVlIE8tMDEwIHQtMCAgICAgdC8xICB0LzIgdD0zICYmCisJbWFrZXRyZWUgQS0wMTAgdC0wIHQgICAgICAgICAgICB0PTMgJiYKKwltYWtldHJlZSBCLTAxMCAgICAgICAgIHQvMTogICAgIHQ9MzogJiYKKworCW1ha2V0cmVlIE8tMDIwIGRzL2RtYS9pb2F0LmMgZHMvZG1hL2lvYXRfZGNhLmMgJiYKKwltYWtldHJlZSBBLTAyMCBkcy9kbWEvaW9hdC9NYWtlZmlsZSBkcy9kbWEvaW9hdC9yZWdpc3RlcnMuaCAmJgorCToKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMy13YXkgKDEpJyAnCisJc2V0dHJlZSBBLTAwMCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBPLTAwMCBBLTAwMCBCLTAwMCAmJgorCWNoZWNraW5kZXggPDwtRU9GCisJMyBhL2IKKwkwIGEvYi0yL2MvZAorCTEgYS9iL2MvZAorCTIgYS9iL2MvZAorCTAgYS94CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5ICgyKScgJworCXNldHRyZWUgQS0wMDEgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgTy0wMDAgQS0wMDEgQi0wMDAgJiYKKwljaGVja2luZGV4IDw8LUVPRgorCTMgYS9iCisJMCBhL2ItMi9jL2QKKwkxIGEvYi9jL2QKKwkyIGEvYi9jL2QKKwkyIGEvYi9jL2UKKwkwIGEveAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSAoMyknICcKKwlzZXR0cmVlIEEtMDEwICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IE8tMDEwIEEtMDEwIEItMDEwICYmCisJY2hlY2tpbmRleCA8PC1FT0YKKwkyIHQKKwkxIHQtMAorCTIgdC0wCisJMSB0LzEKKwkzIHQvMQorCTEgdC8yCisJMCB0PTMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMi13YXkgKDEpJyAnCisJc2V0dHJlZSBPLTAyMCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBPLTAyMCBBLTAyMCAmJgorCWNoZWNraW5kZXggPDwtRU9GCisJMCBkcy9kbWEvaW9hdC9NYWtlZmlsZQorCTAgZHMvZG1hL2lvYXQvcmVnaXN0ZXJzLmgKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDEzLXJlYWQtdHJlZS1zdWJtb2R1bGUuc2ggYi90L3QxMDEzLXJlYWQtdHJlZS1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTFhNmZhZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMTMtcmVhZC10cmVlLXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVhZC10cmVlIGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK0tOT1dOX0ZBSUxVUkVfRElSRUNUT1JZX1NVQk1PRFVMRV9DT05GTElDVFM9MQorS05PV05fRkFJTFVSRV9TVUJNT0RVTEVfT1ZFUldSSVRFX0lHTk9SRURfVU5UUkFDS0VEPTEKKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MgInJlYWQtdHJlZSAtdSAtbSIKKwordGVzdF9zdWJtb2R1bGVfZm9yY2VkX3N3aXRjaF9yZWN1cnNpbmdfd2l0aF9hcmdzICJyZWFkLXRyZWUgLXUgLS1yZXNldCIKKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXQgcmVhZC10cmVlIC11IC1tIgorCit0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoICJnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxNC1yZWFkLXRyZWUtY29uZnVzaW5nLnNoIGIvdC90MTAxNC1yZWFkLXRyZWUtY29uZnVzaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhMzM3NmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDE0LXJlYWQtdHJlZS1jb25mdXNpbmcuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIHRoYXQgcmVhZC10cmVlIHJlamVjdHMgY29uZnVzaW5nIHBhdGhzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBiYXNlIHRyZWUnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlibG9iPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUpICYmCisJdHJlZT0kKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSBjb3JlLnByb3RlY3RIRlMgZm9yIHJlamVjdGlvbiB0ZXN0cycgJworCWdpdCBjb25maWcgY29yZS5wcm90ZWN0SEZTIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGNvcmUucHJvdGVjdE5URlMgZm9yIHJlamVjdGlvbiB0ZXN0cycgJworCWdpdCBjb25maWcgY29yZS5wcm90ZWN0TlRGUyB0cnVlCisnCisKK3doaWxlIHJlYWQgcGF0aCBwcmV0dHk7IGRvCisJOiAke3ByZXR0eTo9JHBhdGh9CisJY2FzZSAiJHBhdGgiIGluCisJKlNQQUNFKQorCQlwYXRoPSIke3BhdGglU1BBQ0V9ICIKKwkJOzsKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVqZWN0ICRwcmV0dHkgYXQgZW5kIG9mIHBhdGgiICcKKwkJcHJpbnRmICIxMDA2NDQgYmxvYiAlc1x0JXMiICIkYmxvYiIgIiRwYXRoIiA+dHJlZSAmJgorCQlib2d1cz0kKGdpdCBta3RyZWUgPHRyZWUpICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgJGJvZ3VzCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVqZWN0ICRwcmV0dHkgYXMgc3VidHJlZSIgJworCQlwcmludGYgIjA0MDAwMCB0cmVlICVzXHQlcyIgIiR0cmVlIiAiJHBhdGgiID50cmVlICYmCisJCWJvZ3VzPSQoZ2l0IG1rdHJlZSA8dHJlZSkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAkYm9ndXMKKwknCitkb25lIDw8LUVPRgorLgorLi4KKy5naXQKKy5HSVQKKyR7dTIwMGN9LkdpdCB7dTIwMGN9LkdpdAorLmdJJHt1MjAwY31UIC5nSXt1MjAwY31UCisuR2lUJHt1MjAwY30gLkdpVHt1MjAwY30KK2dpdH4xCisuZ2l0LlNQQUNFIC5naXQue3NwYWNlfQorLlxcXFwuR0lUXFxcXGZvb2JhciBiYWNrc2xhc2hlcworLmdpdFxcXFxmb29iYXIgYmFja3NsYXNoZXMyCisuZ2l0Li4uOmFsdGVybmF0ZS1zdHJlYW0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1dGYtOCBwYXRocyBhbGxvd2VkIHdpdGggY29yZS5wcm90ZWN0SEZTIG9mZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYWQtdHJlZSBIRUFEIiAmJgorCXRlc3RfY29uZmlnIGNvcmUucHJvdGVjdEhGUyBmYWxzZSAmJgorCXByaW50ZiAiMTAwNjQ0IGJsb2IgJXNcdCVzIiAiJGJsb2IiICIuZ2kke3UyMDBjfXQiID50cmVlICYmCisJb2s9JChnaXQgbWt0cmVlIDx0cmVlKSAmJgorCWdpdCByZWFkLXRyZWUgJG9rCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxNS1yZWFkLWluZGV4LXVubWVyZ2VkLnNoIGIvdC90MTAxNS1yZWFkLWluZGV4LXVubWVyZ2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1ZDIyZGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDE1LXJlYWQtaW5kZXgtdW5tZXJnZWQuc2gKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHZhcmlvdXMgY2FsbGVycyBvZiByZWFkX2luZGV4X3VubWVyZ2VkJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1vZGlmeS9kZWxldGUgKyBkaXJlY3RvcnkvZmlsZSBjb25mbGljdCcgJworCXRlc3RfY3JlYXRlX3JlcG8gZGZfcGx1c19tb2RpZnlfZGVsZXRlICYmCisJKAorCQljZCBkZl9wbHVzX21vZGlmeV9kZWxldGUgJiYKKworCQl0ZXN0X3dyaXRlX2xpbmVzIGEgYiBjIGQgZSBmIGcgaCA+bGV0dGVycyAmJgorCQlnaXQgYWRkIGxldHRlcnMgJiYKKwkJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIG1vZGlmeSAmJgorCQkjIFRocm93IGluIGxldHRlcnMudHh0IGZvciBzb3J0aW5nIG9yZGVyIGZ1bgorCQkjICgibGV0dGVycy50eHQiIHNvcnRzIGJldHdlZW4gImxldHRlcnMiIGFuZCAibGV0dGVycy9maWxlIikKKwkJZWNobyBpID4+bGV0dGVycyAmJgorCQllY2hvICJ2ZXJzaW9uIDIiID5sZXR0ZXJzLnR4dCAmJgorCQlnaXQgYWRkIGxldHRlcnMgbGV0dGVycy50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSBtb2RpZmllZCAmJgorCisJCWdpdCBjaGVja291dCAtYiBkZWxldGUgSEVBRF4gJiYKKwkJZ2l0IHJtIGxldHRlcnMgJiYKKwkJbWtkaXIgbGV0dGVycyAmJgorCQk+bGV0dGVycy9maWxlICYmCisJCWVjaG8gInZlcnNpb24gMSIgPmxldHRlcnMudHh0ICYmCisJCWdpdCBhZGQgbGV0dGVycyBsZXR0ZXJzLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tIGRlbGV0ZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtLXJlc2V0IGNsZWFucyB1bm1lcmdlZCBlbnRyaWVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGZfcGx1c19tb2RpZnlfZGVsZXRlIGNsZWFuIC1mIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRmX3BsdXNfbW9kaWZ5X2RlbGV0ZSByZXNldCAtLWhhcmQiICYmCisJKAorCQljZCBkZl9wbHVzX21vZGlmeV9kZWxldGUgJiYKKworCQlnaXQgY2hlY2tvdXQgZGVsZXRlXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1vZGlmeSAmJgorCisJCWdpdCByZWFkLXRyZWUgLS1yZXNldCBIRUFEICYmCisJCWdpdCBscy1maWxlcyAtdSA+Y29uZmxpY3RzICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBjb25mbGljdHMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09uZSByZXNldCAtLWhhcmQgY2xlYW5zIHVubWVyZ2VkIGVudHJpZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkZl9wbHVzX21vZGlmeV9kZWxldGUgY2xlYW4gLWYiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGZfcGx1c19tb2RpZnlfZGVsZXRlIHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCWNkIGRmX3BsdXNfbW9kaWZ5X2RlbGV0ZSAmJgorCisJCWdpdCBjaGVja291dCBkZWxldGVeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbW9kaWZ5ICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5jb25mbGljdHMgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGNvbmZsaWN0cworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3QgKyBzaW1wbGUgZWRpdC9lZGl0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBkZl9wbHVzX2VkaXRfZWRpdCAmJgorCSgKKwkJY2QgZGZfcGx1c19lZGl0X2VkaXQgJiYKKworCQl0ZXN0X3NlcSAxIDEwID5udW1iZXJzICYmCisJCWdpdCBhZGQgbnVtYmVycyAmJgorCQlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgZC1lZGl0ICYmCisJCW1rZGlyIGZvbyAmJgorCQllY2hvIGNvbnRlbnQgPmZvby9iYXIgJiYKKwkJZ2l0IGFkZCBmb28gJiYKKwkJZWNobyAxMSA+Pm51bWJlcnMgJiYKKwkJZ2l0IGFkZCBudW1iZXJzICYmCisJCWdpdCBjb21taXQgLW0gImRpcmVjdG9yeSBhbmQgZWRpdCIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgZi1lZGl0IGQtZWRpdF4xICYmCisJCWVjaG8gY29udGVudCA+Zm9vICYmCisJCWdpdCBhZGQgZm9vICYmCisJCWVjaG8gZWxldmVuID4+bnVtYmVycyAmJgorCQlnaXQgYWRkIG51bWJlcnMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZmlsZSBhbmQgZWRpdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtZXJnZSAtLWFib3J0IHN1Y2NlZWRzIGRlc3BpdGUgRC9GIGNvbmZsaWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGZfcGx1c19lZGl0X2VkaXQgY2xlYW4gLWYiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGZfcGx1c19lZGl0X2VkaXQgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJY2QgZGZfcGx1c19lZGl0X2VkaXQgJiYKKworCQlnaXQgY2hlY2tvdXQgZi1lZGl0XjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGQtZWRpdF4wICYmCisKKwkJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJCWdpdCBscy1maWxlcyAtdSA+Y29uZmxpY3RzICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBjb25mbGljdHMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhbSAtLXNraXAgc3VjY2VlZHMgZGVzcGl0ZSBEL0YgY29uZmxpY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkZl9wbHVzX2VkaXRfZWRpdCBjbGVhbiAtZiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkZl9wbHVzX2VkaXRfZWRpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQljZCBkZl9wbHVzX2VkaXRfZWRpdCAmJgorCisJCWdpdCBjaGVja291dCBmLWVkaXReMCAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xIGQtZWRpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgMDAwMSoucGF0Y2ggJiYKKworCQlnaXQgYW0gLS1za2lwICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJCWdpdCBscy1maWxlcyAtdSA+Y29uZmxpY3RzICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBjb25mbGljdHMKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2ggYi90L3QxMDIwLXN1YmRpcmVjdG9yeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMmRmNzVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKQEAgLTAsMCArMSwxOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVHJ5IHZhcmlvdXMgY29yZS1sZXZlbCBjb21tYW5kcyBpbiBzdWJkaXJlY3RvcnkuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmVhZC10cmVlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWxvbmc9ImEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiIgJiYKKwlmb3IgYyBpbiAkbG9uZzsgZG8gZWNobyAkYzsgZG9uZSA+b25lICYmCisJbWtkaXIgZGlyICYmCisJZm9yIGMgaW4geCB5IHogJGxvbmcgYSBiIGM7IGRvIGVjaG8gJGM7IGRvbmUgPmRpci90d28gJiYKKwljcCBvbmUgb3JpZ2luYWwub25lICYmCisJY3AgZGlyL3R3byBvcmlnaW5hbC50d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IGFuZCBscy1maWxlcycgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lICYmCisJY2FzZSAiJChnaXQgbHMtZmlsZXMpIiBpbgorCW9uZSkgZWNobyBwYXNzIG9uZSA7OworCSopIGVjaG8gYmFkIG9uZTsgZXhpdCAxIDs7CisJZXNhYyAmJgorCSgKKwkJY2QgZGlyICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdHdvICYmCisJCWNhc2UgIiQoZ2l0IGxzLWZpbGVzKSIgaW4KKwkJdHdvKSBlY2hvIHBhc3MgdHdvIDs7CisJCSopIGVjaG8gYmFkIHR3bzsgZXhpdCAxIDs7CisJCWVzYWMKKwkpICYmCisJY2FzZSAiJChnaXQgbHMtZmlsZXMpIiBpbgorCWRpci90d28iJExGIm9uZSkgZWNobyBwYXNzIGJvdGggOzsKKwkqKSBlY2hvIGJhZDsgZXhpdCAxIDs7CisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZScgJworCXR3bz0kKGdpdCBscy1maWxlcyAtcyBkaXIvdHdvKSAmJgorCXR3bz0kKGV4cHIgIiR0d28iIDogIlswLTddKiBcXChbMC05YS1mXSpcXCkiKSAmJgorCWVjaG8gIiR0d28iICYmCisJZ2l0IGNhdC1maWxlIC1wICIkdHdvIiA+YWN0dWFsICYmCisJY21wIGRpci90d28gYWN0dWFsICYmCisJKAorCQljZCBkaXIgJiYKKwkJZ2l0IGNhdC1maWxlIC1wICIkdHdvIiA+YWN0dWFsICYmCisJCWNtcCB0d28gYWN0dWFsCisJKQorJworcm0gLWYgYWN0dWFsIGRpci9hY3R1YWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcycgJworCWVjaG8gYSA+Pm9uZSAmJgorCWVjaG8gZCA+PmRpci90d28gJiYKKwljYXNlICIkKGdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5KSIgaW4KKwlkaXIvdHdvIiRMRiJvbmUpIGVjaG8gcGFzcyB0b3AgOzsKKwkqKSBlY2hvIGJhZCB0b3A7IGV4aXQgMSA7OworCWVzYWMgJiYKKwkjIGRpZmYgc2hvdWxkIG5vdCBvbWl0IGxlYWRpbmcgcGF0aHMKKwkoCisJCWNkIGRpciAmJgorCQljYXNlICIkKGdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5KSIgaW4KKwkJZGlyL3R3byIkTEYib25lKSBlY2hvIHBhc3Mgc3ViZGlyIDs7CisJCSopIGVjaG8gYmFkIHN1YmRpcjsgZXhpdCAxIDs7CisJCWVzYWMgJiYKKwkJY2FzZSAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSAuKSIgaW4KKwkJZGlyL3R3bykgZWNobyBwYXNzIHN1YmRpciBsaW1pdGVkIDs7CisJCSopIGVjaG8gYmFkIHN1YmRpciBsaW1pdGVkOyBleGl0IDEgOzsKKwkJZXNhYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUtdHJlZScgJworCXRvcD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWVjaG8gJHRvcCAmJgorCSgKKwkJY2QgZGlyICYmCisJCXN1Yj0kKGdpdCB3cml0ZS10cmVlKSAmJgorCQllY2hvICRzdWIgJiYKKwkJdGVzdCAieiR0b3AiID0gInokc3ViIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQtaW5kZXgnICcKKwlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgb25lICYmCisJY21wIG9uZSBvcmlnaW5hbC5vbmUgJiYKKwkoCisJCWNkIGRpciAmJgorCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgdHdvICYmCisJCWNtcCB0d28gLi4vb3JpZ2luYWwudHdvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUnICcKKwlybSAtZiBvbmUgZGlyL3R3byAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAiJHRyZWUiICYmCisJY21wIG9uZSBvcmlnaW5hbC5vbmUgJiYKKwljbXAgZGlyL3R3byBvcmlnaW5hbC50d28gJiYKKwkoCisJCWNkIGRpciAmJgorCQlybSAtZiB0d28gJiYKKwkJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgIiR0cmVlIiAmJgorCQljbXAgdHdvIC4uL29yaWdpbmFsLnR3byAmJgorCQljbXAgLi4vb25lIC4uL29yaWdpbmFsLm9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgZXhwYW5zaW9uJyAnCisJKAorCQlnaXQgY29uZmlnIGFsaWFzLnRlc3Qtc3RhdHVzLWFsaWFzIHN0YXR1cyAmJgorCQljZCBkaXIgJiYKKwkJZ2l0IHN0YXR1cyAmJgorCQlnaXQgdGVzdC1zdGF0dXMtYWxpYXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICchYWxpYXMgZXhwYW5zaW9uJyAnCisJcHdkID5leHBlY3QgJiYKKwkoCisJCWdpdCBjb25maWcgYWxpYXMudGVzdC1hbGlhcy1kaXJlY3RvcnkgIXB3ZCAmJgorCQljZCBkaXIgJiYKKwkJZ2l0IHRlc3QtYWxpYXMtZGlyZWN0b3J5ID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfUFJFRklYIGZvciAhYWxpYXMnICcKKwlwcmludGYgImRpci8iID5leHBlY3QgJiYKKwkoCisJCWdpdCBjb25maWcgYWxpYXMudGVzdC1hbGlhcy1kaXJlY3RvcnkgIiFzaCAtYyBcInByaW50ZiBcJEdJVF9QUkVGSVhcIiIgJiYKKwkJY2QgZGlyICYmCisJCWdpdCB0ZXN0LWFsaWFzLWRpcmVjdG9yeSA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1BSRUZJWCBmb3IgYnVpbHQtaW5zJyAnCisJIyBVc2UgR0lUX0VYVEVSTkFMX0RJRkYgdG8gdGVzdCB0aGF0IHRoZSAiZGlmZiIgYnVpbHQtaW4KKwkjIHJlY2VpdmVzIHRoZSBHSVRfUFJFRklYIHZhcmlhYmxlLgorCWVjaG8gImRpci8iID5leHBlY3QgJiYKKwl3cml0ZV9zY3JpcHQgZGlmZiA8PC1cRU9GICYmCisJcHJpbnRmICIlc1xuIiAiJEdJVF9QUkVGSVgiCisJRU9GCisJKAorCQljZCBkaXIgJiYKKwkJZWNobyAiY2hhbmdlIiA+dHdvICYmCisJCUdJVF9FWFRFUk5BTF9ESUZGPS4vZGlmZiBnaXQgZGlmZiA+Li4vYWN0dWFsICYmCisJCWdpdCBjaGVja291dCAtLSB0d28KKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBmaWxlL3JldiBhbWJpZ3VpdHkgY2hlY2sgaW5zaWRlIC5naXQnICcKKwlnaXQgY29tbWl0IC1hIC1tIDEgJiYKKwkoCisJCWNkIC5naXQgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1iaWd1aXR5IGNoZWNrIGluc2lkZSBhIGJhcmUgcmVwbyAoZXhwbGljaXQgR0lUX0RJUiknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBmb28uZ2l0IiAmJgorCWdpdCBjbG9uZSAtcyAtLWJhcmUgLmdpdCBmb28uZ2l0ICYmCisJKAorCQljZCBmb28uZ2l0ICYmCisJCSMgb2xkZXIgR2l0IG5lZWRlZCBoZWxwIGJ5IGV4cG9ydGluZyBHSVRfRElSPS4KKwkJIyB0byByZWFsaXplIHRoYXQgaXQgaXMgaW5zaWRlIGEgYmFyZSByZXBvc2l0b3J5LgorCQkjIFdlIGtlZXAgdGhpcyB0ZXN0IGFyb3VuZCBmb3IgcmVncmVzc2lvbiB0ZXN0aW5nLgorCQlHSVRfRElSPS4gZ2l0IHNob3cgLXMgSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1iaWd1aXR5IGNoZWNrIGluc2lkZSBhIGJhcmUgcmVwbycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIGZvby5naXQiICYmCisJZ2l0IGNsb25lIC1zIC0tYmFyZSAuZ2l0IGZvby5naXQgJiYKKwkoCisJCWNkIGZvby5naXQgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGV0ZWN0aW9uIHNob3VsZCBub3QgYmUgZm9vbGVkIGJ5IGEgc3ltbGluaycgJworCWdpdCBjbG9uZSAtcyAuZ2l0IGFub3RoZXIgJiYKKwlsbiAtcyBhbm90aGVyIHlldGFub3RoZXIgJiYKKwkoCisJCWNkIHlldGFub3RoZXIvLmdpdCAmJgorCQlnaXQgc2hvdyAtcyBIRUFECisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMjEtcmVyZXJlLWluLXdvcmtkaXIuc2ggYi90L3QxMDIxLXJlcmVyZS1pbi13b3JrZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwMWUwNzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDIxLXJlcmVyZS1pbi13b3JrZGlyLnNoCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXJlcmUgcnVuIGluIGEgd29ya2RpcicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIHNldHVwICcKKwlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKwk+d29ybGQgJiYKKwlnaXQgYWRkIHdvcmxkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwllY2hvIGhlbGxvID53b3JsZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gaGVsbG8gJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJZWNobyBnb29kYnllID53b3JsZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gZ29vZGJ5ZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdyZXJlcmUgaW4gd29ya2RpcicgJworCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJIiRTSEVMTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZLy4uL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIiIC4gd29yayAmJgorCSgKKwkJY2Qgd29yayAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZSAmJgorCQlnaXQgcmVyZXJlIHN0YXR1cyA+YWN0dWFsICYmCisJCWVjaG8gd29ybGQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRoaXMgZmFpbHMgYmVjYXVzZSB3ZSBkb24ndCByZXNvbHZlIHJlbGF0aXZlIHN5bWxpbmsgaW4gbWtkaXJfaW5fZ2l0ZGlyKCkKKyMgRm9yIHRoZSBwdXJwb3NlIG9mIGhlbHBpbmcgY29udHJpYi93b3JrZGlyL2dpdC1uZXctd29ya2RpciB1c2Vycywgd2UgZG8gbm90CisjIGhhdmUgdG8gc3VwcG9ydCByZWxhdGl2ZSBzeW1saW5rcywgYnV0IGl0IG1pZ2h0IGJlIG5pY2VyIHRvIG1ha2UgdGhpcyB3b3JrCisjIHdpdGggYSByZWxhdGl2ZSBzeW1ib2xpYyBsaW5rIHNvbWVkYXkuCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFNZTUxJTktTICdyZXJlcmUgaW4gd29ya2RpciAocmVsYXRpdmUpJyAnCisJcm0gLXJmIC5naXQvcnItY2FjaGUgJiYKKwkiJFNIRUxMX1BBVEgiICIkVEVTVF9ESVJFQ1RPUlkvLi4vY29udHJpYi93b3JrZGlyL2dpdC1uZXctd29ya2RpciIgLiBrcm93ICYmCisJKAorCQljZCBrcm93ICYmCisJCXJtIC1mIC5naXQvcnItY2FjaGUgJiYKKwkJbG4gLXMgLi4vLmdpdC9yci1jYWNoZSAuZ2l0L3JyLWNhY2hlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlICYmCisJCWdpdCByZXJlcmUgc3RhdHVzID5hY3R1YWwgJiYKKwkJZWNobyB3b3JsZCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTA1MC1sYXJnZS5zaCBiL3QvdDEwNTAtbGFyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTg0YjQ3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwNTAtbGFyZ2Uuc2gKQEAgLTAsMCArMSwyMTYgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuCisKK3Rlc3RfZGVzY3JpcHRpb249J2FkZGluZyBhbmQgY2hlY2tpbmcgb3V0IGxhcmdlIGJsb2JzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byB0ZXN0LWxpYi5zaCB0b2dldGhlciB3aXRoIHRoZQorIyBjb3B5IGluIHQwMDIxIGFmdGVyIGJvdGggdG9waWNzIGhhdmUgZ3JhZHVhdGVkIHRvICdtYXN0ZXInLgorZmlsZV9zaXplICgpIHsKKwl0ZXN0LXRvb2wgcGF0aC11dGlscyBmaWxlLXNpemUgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwkjIGNsb25lIGRvZXMgbm90IGFsbG93IHVzIHRvIHBhc3MgY29yZS5iaWdmaWxldGhyZXNob2xkIHRvCisJIyBuZXcgcmVwb3MsIHNvIHNldCBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgZ2xvYmFsbHkKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAyMDBrICYmCisJcHJpbnRmICIlMjAwMDAwMHMiIFggPmxhcmdlMSAmJgorCWNwIGxhcmdlMSBsYXJnZTIgJiYKKwljcCBsYXJnZTEgbGFyZ2UzICYmCisJcHJpbnRmICIlMjUwMDAwMHMiIFkgPmh1Z2UgJiYKKwlHSVRfQUxMT0NfTElNSVQ9MTUwMGsgJiYKKwlleHBvcnQgR0lUX0FMTE9DX0xJTUlUCisnCisKKyMgYWRkIGEgbGFyZ2UgZmlsZSB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncword2hpbGUgcmVhZCBleHBlY3QgY29uZmlnCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFkZCB3aXRoICRjb25maWciICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSouKiAuZ2l0L2luZGV4IiAmJgorCQlnaXQgJGNvbmZpZyBhZGQgbGFyZ2UxICYmCisJCXN6PSQoZmlsZV9zaXplIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrKSAmJgorCQljYXNlICIkZXhwZWN0IiBpbgorCQlzbWFsbCkgdGVzdCAiJHN6IiAtbGUgMTAwMDAwIDs7CisJCWxhcmdlKSB0ZXN0ICIkc3oiIC1nZSAxMDAwMDAgOzsKKwkJZXNhYworCScKK2RvbmUgPDxcRU9GCitsYXJnZSAtYyBjb3JlLmNvbXByZXNzaW9uPTAKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249OQorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj0wIC1jIHBhY2suY29tcHJlc3Npb249MAorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj05IC1jIHBhY2suY29tcHJlc3Npb249MAorc21hbGwgLWMgY29yZS5jb21wcmVzc2lvbj0wIC1jIHBhY2suY29tcHJlc3Npb249OQorc21hbGwgLWMgY29yZS5jb21wcmVzc2lvbj05IC1jIHBhY2suY29tcHJlc3Npb249OQorbGFyZ2UgLWMgcGFjay5jb21wcmVzc2lvbj0wCitzbWFsbCAtYyBwYWNrLmNvbXByZXNzaW9uPTkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBsYXJnZSBmaWxlIG9yIHR3bycgJworCWdpdCBhZGQgbGFyZ2UxIGh1Z2UgbGFyZ2UyICYmCisJIyBtYWtlIHN1cmUgd2UgZ290IGEgc2luZ2xlIHBhY2tmaWxlIGFuZCBubyBsb29zZSBvYmplY3RzCisJYmFkPSBjb3VudD0wIGlkeD0gJiYKKwlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjaworCWRvCisJCWNvdW50PSQoKCAkY291bnQgKyAxICkpCisJCWlmIHRlc3RfcGF0aF9pc19maWxlICIkcCIgJiYKKwkJICAgaWR4PSR7cCUucGFja30uaWR4ICYmIHRlc3RfcGF0aF9pc19maWxlICIkaWR4IgorCQl0aGVuCisJCQljb250aW51ZQorCQlmaQorCQliYWQ9dAorCWRvbmUgJiYKKwl0ZXN0IC16ICIkYmFkIiAmJgorCXRlc3QgJGNvdW50ID0gMSAmJgorCWNudD0kKGdpdCBzaG93LWluZGV4IDwiJGlkeCIgfCB3YyAtbCkgJiYKKwl0ZXN0ICRjbnQgPSAyICYmCisJZm9yIGwgaW4gLmdpdC9vYmplY3RzLz8/Lz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/CisJZG8KKwkJdGVzdF9wYXRoX2lzX2ZpbGUgIiRsIiB8fCBjb250aW51ZQorCQliYWQ9dAorCWRvbmUgJiYKKwl0ZXN0IC16ICIkYmFkIiAmJgorCisJIyBhdHRlbXB0IHRvIGFkZCBhbm90aGVyIGNvcHkgb2YgdGhlIHNhbWUKKwlnaXQgYWRkIGxhcmdlMyAmJgorCWJhZD0gY291bnQ9MCAmJgorCWZvciBwIGluIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrCisJZG8KKwkJY291bnQ9JCgoICRjb3VudCArIDEgKSkKKwkJaWYgdGVzdF9wYXRoX2lzX2ZpbGUgIiRwIiAmJgorCQkgICBpZHg9JHtwJS5wYWNrfS5pZHggJiYgdGVzdF9wYXRoX2lzX2ZpbGUgIiRpZHgiCisJCXRoZW4KKwkJCWNvbnRpbnVlCisJCWZpCisJCWJhZD10CisJZG9uZSAmJgorCXRlc3QgLXogIiRiYWQiICYmCisJdGVzdCAkY291bnQgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGEgbGFyZ2UgZmlsZScgJworCWxhcmdlMT0kKGdpdCByZXYtcGFyc2UgOmxhcmdlMSkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkbGFyZ2UxIGFub3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgYW5vdGhlciAmJgorCXRlc3RfY21wIGxhcmdlMSBhbm90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tzaXplIGxpbWl0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBtaWQgJiYKKwkoCisJCWNkIG1pZCAmJgorCQlnaXQgY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCA2NGsgJiYKKwkJZ2l0IGNvbmZpZyBwYWNrLnBhY2tzaXplbGltaXQgMjU2ayAmJgorCisJCSMgbWlkMSBhbmQgbWlkMiB3aWxsIGZpdCB3aXRoaW4gMjU2ayBsaW1pdCBidXQKKwkJIyBhcHBlbmRpbmcgbWlkMyB3aWxsIGJ1c3QgdGhlIGxpbWl0IGFuZCB3aWxsCisJCSMgcmVzdWx0IGluIGEgc2VwYXJhdGUgcGFja2ZpbGUuCisJCXRlc3QtdG9vbCBnZW5yYW5kb20gImEiICQoKCA2NiAqIDEwMjQgKSkgPm1pZDEgJiYKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAiYiIgJCgoIDgwICogMTAyNCApKSA+bWlkMiAmJgorCQl0ZXN0LXRvb2wgZ2VucmFuZG9tICJjIiAkKCggMTI4ICogMTAyNCApKSA+bWlkMyAmJgorCQlnaXQgYWRkIG1pZDEgbWlkMiBtaWQzICYmCisKKwkJY291bnQ9MCAmJgorCQlmb3IgcGkgaW4gLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLmlkeAorCQlkbworCQkJdGVzdF9wYXRoX2lzX2ZpbGUgIiRwaSIgJiYgY291bnQ9JCgoICRjb3VudCArIDEgKSkKKwkJZG9uZSAmJgorCQl0ZXN0ICRjb3VudCA9IDIgJiYKKworCQkoCisJCQlnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8bWlkMSAmJgorCQkJZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG1pZDIgJiYKKwkJCWdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxtaWQzCisJCSkgfAorCQlzb3J0ID5leHBlY3QgJiYKKworCQlmb3IgcGkgaW4gLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLmlkeAorCQlkbworCQkJZ2l0IHNob3ctaW5kZXggPCIkcGkiCisJCWRvbmUgfAorCQlzZWQgLWUgInMvXlswLTldKiBcKFswLTlhLWZdKlwpIC4qL1wxLyIgfAorCQlzb3J0ID5hY3R1YWwgJiYKKworCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tcmF3JyAnCisJZ2l0IGNvbW1pdCAtcSAtbSBpbml0aWFsICYmCisJZWNobyBtb2RpZmllZCA+PmxhcmdlMSAmJgorCWdpdCBhZGQgbGFyZ2UxICYmCisJZ2l0IGNvbW1pdCAtcSAtbSBtb2RpZmllZCAmJgorCWdpdCBkaWZmIC0tcmF3IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1zdGF0JyAnCisJZ2l0IGRpZmYgLS1zdGF0IEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZicgJworCWdpdCBkaWZmIEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCWdyZXAgIkJpbmFyeSBmaWxlcy4qZGlmZmVyIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNhY2hlZCcgJworCWdpdCBkaWZmIC0tY2FjaGVkIEhFQUReID5hY3R1YWwgJiYKKwlncmVwICJCaW5hcnkgZmlsZXMuKmRpZmZlciIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhc2gtb2JqZWN0JyAnCisJZ2l0IGhhc2gtb2JqZWN0IGxhcmdlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSBhIGxhcmdlIGZpbGUnICcKKwlnaXQgY2F0LWZpbGUgYmxvYiA6bGFyZ2UxID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgYSBsYXJnZSBmaWxlIGZyb20gYSB0YWcnICcKKwlnaXQgdGFnIC1tIGxhcmdlZmlsZSBsYXJnZWZpbGV0YWcgOmxhcmdlMSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGxhcmdlZmlsZXRhZyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1zaG93IGEgbGFyZ2UgZmlsZScgJworCWdpdCBzaG93IDpsYXJnZTEgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2snICcKKwlnaXQgY2xvbmUgZmlsZTovLyIkKHB3ZCkiLy5naXQgZm9vICYmCisJR0lUX0RJUj1ub24tZXhpc3RlbnQgZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgLS12ZXJpZnkgZm9vLy5naXQvb2JqZWN0cy9wYWNrLyoucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2snICcKKwlnaXQgcmVwYWNrIC1hZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLW9iamVjdHMgd2l0aCBsYXJnZSBsb29zZSBvYmplY3QnICcKKwlTSEExPSQoZ2l0IGhhc2gtb2JqZWN0IGh1Z2UpICYmCisJdGVzdF9jcmVhdGVfcmVwbyBsb29zZSAmJgorCWVjaG8gJFNIQTEgfCBnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IHwKKwkJR0lUX0FMTE9DX0xJTUlUPTAgR0lUX0RJUj1sb29zZS8uZ2l0IGdpdCB1bnBhY2stb2JqZWN0cyAmJgorCWVjaG8gJFNIQTEgfCBHSVRfRElSPWxvb3NlLy5naXQgZ2l0IHBhY2stb2JqZWN0cyBwYWNrICYmCisJdGVzdF9jcmVhdGVfcmVwbyBwYWNrZWQgJiYKKwltdiBwYWNrLSogcGFja2VkLy5naXQvb2JqZWN0cy9wYWNrICYmCisJR0lUX0RJUj1wYWNrZWQvLmdpdCBnaXQgY2F0LWZpbGUgYmxvYiAkU0hBMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgaHVnZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFyIGFyY2hpdmluZycgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciBIRUFEID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnemlwIGFyY2hpdmluZywgc3RvcmUgb25seScgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtMCBIRUFEID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnemlwIGFyY2hpdmluZywgZGVmbGF0ZScgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBsYXJnZSBibG9icycgJworCWdpdCBmc2NrIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwNTEtbGFyZ2UtY29udmVyc2lvbi5zaCBiL3QvdDEwNTEtbGFyZ2UtY29udmVyc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Yjc2NDBiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTA1MS1sYXJnZS1jb252ZXJzaW9uLnNoCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNvbnZlcnNpb24gZmlsdGVycyBvbiBsYXJnZSBmaWxlcycKKy4gLi90ZXN0LWxpYi5zaAorCitzZXRfYXR0cigpIHsKKwl0ZXN0X3doZW5fZmluaXNoZWQgJ3JtIC1mIC5naXRhdHRyaWJ1dGVzJyAmJgorCWVjaG8gIiogJCoiID4uZ2l0YXR0cmlidXRlcworfQorCitjaGVja19pbnB1dCgpIHsKKwlnaXQgcmVhZC10cmVlIC0tZW1wdHkgJiYKKwlnaXQgYWRkIHNtYWxsIGxhcmdlICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOnNtYWxsID5zbWFsbC5pbmRleCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDpsYXJnZSB8IGhlYWQgLW4gMSA+bGFyZ2UuaW5kZXggJiYKKwl0ZXN0X2NtcCBzbWFsbC5pbmRleCBsYXJnZS5pbmRleAorfQorCitjaGVja19vdXRwdXQoKSB7CisJcm0gLWYgc21hbGwgbGFyZ2UgJiYKKwlnaXQgY2hlY2tvdXQgc21hbGwgbGFyZ2UgJiYKKwloZWFkIC1uIDEgbGFyZ2UgPmxhcmdlLmhlYWQgJiYKKwl0ZXN0X2NtcCBzbWFsbCBsYXJnZS5oZWFkCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGlucHV0IHRlc3RzJyAnCisJcHJpbnRmICJcJElkOiBmb29cJFxcclxcbiIgPnNtYWxsICYmCisJY2F0IHNtYWxsIHNtYWxsID5sYXJnZSAmJgorCWdpdCBjb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDIwICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIudGVzdC5jbGVhbiAic2VkIHMvLiovQ0xFQU4vIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY3JsZj10cnVlIGNvbnZlcnRzIG9uIGlucHV0JyAnCisJdGVzdF9jb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJY2hlY2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW9sPWNybGYgY29udmVydHMgb24gaW5wdXQnICcKKwlzZXRfYXR0ciBlb2w9Y3JsZiAmJgorCWNoZWNrX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lkZW50IGNvbnZlcnRzIG9uIGlucHV0JyAnCisJc2V0X2F0dHIgaWRlbnQgJiYKKwljaGVja19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2VyLWRlZmluZWQgZmlsdGVycyBjb252ZXJ0IG9uIGlucHV0JyAnCisJc2V0X2F0dHIgZmlsdGVyPXRlc3QgJiYKKwljaGVja19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvdXRwdXQgdGVzdHMnICcKKwllY2hvICJcJElkXCQiID5zbWFsbCAmJgorCWNhdCBzbWFsbCBzbWFsbCA+bGFyZ2UgJiYKKwlnaXQgYWRkIHNtYWxsIGxhcmdlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgNyAmJgorCWdpdCBjb25maWcgZmlsdGVyLnRlc3Quc211ZGdlICJzZWQgcy8uKi9TTVVER0UvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY3JsZj10cnVlIGNvbnZlcnRzIG9uIG91dHB1dCcgJworCXRlc3RfY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWNoZWNrX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9Y3JsZiBjb252ZXJ0cyBvbiBvdXRwdXQnICcKKwlzZXRfYXR0ciBlb2w9Y3JsZiAmJgorCWNoZWNrX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2VyLWRlZmluZWQgZmlsdGVycyBjb252ZXJ0IG9uIG91dHB1dCcgJworCXNldF9hdHRyIGZpbHRlcj10ZXN0ICYmCisJY2hlY2tfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lkZW50IGNvbnZlcnRzIG9uIG91dHB1dCcgJworCXNldF9hdHRyIGlkZW50ICYmCisJcm0gLWYgc21hbGwgbGFyZ2UgJiYKKwlnaXQgY2hlY2tvdXQgc21hbGwgbGFyZ2UgJiYKKwlzZWQgLW4gInMvSWQ6IC4qL0lkOiBTSEEvcCIgPHNtYWxsID5zbWFsbC5jbGVhbiAmJgorCWhlYWQgLW4gMSBsYXJnZSA+bGFyZ2UuaGVhZCAmJgorCXNlZCAtbiAicy9JZDogLiovSWQ6IFNIQS9wIiA8bGFyZ2UuaGVhZCA+bGFyZ2UuY2xlYW4gJiYKKwl0ZXN0X2NtcCBzbWFsbC5jbGVhbiBsYXJnZS5jbGVhbgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwNjAtb2JqZWN0LWNvcnJ1cHRpb24uc2ggYi90L3QxMDYwLW9iamVjdC1jb3JydXB0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjODkzNzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDYwLW9iamVjdC1jb3JydXB0aW9uLnNoCkBAIC0wLDAgKzEsMTQwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2VlIGhvdyB3ZSBoYW5kbGUgdmFyaW91cyBmb3JtcyBvZiBjb3JydXB0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKKyMgY29udmVydCAiMTIzNGFiY2QiIHRvICIuZ2l0L29iamVjdHMvMTIvMzRhYmNkIgorb2JqX3RvX2ZpbGUoKSB7CisJZWNobyAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvb2JqZWN0cy8kKGdpdCByZXYtcGFyc2UgIiQxIiB8IHNlZCAncywuLiwmLywnKSIKK30KKworIyBDb252ZXJ0IGJ5dGUgYXQgb2Zmc2V0ICIkMiIgb2Ygb2JqZWN0ICIkMSIgaW50byAnXDAnCitjb3JydXB0X2J5dGUoKSB7CisJb2JqX2ZpbGU9JChvYmpfdG9fZmlsZSAiJDEiKSAmJgorCWNobW9kICt3ICIkb2JqX2ZpbGUiICYmCisJcHJpbnRmICdcMCcgfCBkZCBvZj0iJG9ial9maWxlIiBicz0xIHNlZWs9IiQyIiBjb252PW5vdHJ1bmMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29ycnVwdCByZXBvJyAnCisJZ2l0IGluaXQgYml0LWVycm9yICYmCisJKAorCQljZCBiaXQtZXJyb3IgJiYKKwkJdGVzdF9jb21taXQgY29udGVudCAmJgorCQljb3JydXB0X2J5dGUgSEVBRDpjb250ZW50LnQgMTAKKwkpICYmCisJZ2l0IGluaXQgbm8tYml0LWVycm9yICYmCisJKAorCQkjIGRpc3RpbmN0IGNvbW1pdCBmcm9tIGJpdC1lcnJvciwgYnV0IGNvbnRhaW5pbmcgYQorCQkjIG5vbi1jb3JydXB0ZWQgdmVyc2lvbiBvZiB0aGUgc2FtZSBibG9iCisJCWNkIG5vLWJpdC1lcnJvciAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJdGVzdF9jb21taXQgY29udGVudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbyB3aXRoIG1pc3Npbmcgb2JqZWN0JyAnCisJZ2l0IGluaXQgbWlzc2luZyAmJgorCSgKKwkJY2QgbWlzc2luZyAmJgorCQl0ZXN0X2NvbW1pdCBjb250ZW50ICYmCisJCXJtIC1mICIkKG9ial90b19maWxlIEhFQUQ6Y29udGVudC50KSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBtaXNuYW1lZCBvYmplY3QnICcKKwlnaXQgaW5pdCBtaXNuYW1lZCAmJgorCSgKKwkJY2QgbWlzbmFtZWQgJiYKKwkJdGVzdF9jb21taXQgY29udGVudCAmJgorCQlnb29kPSQob2JqX3RvX2ZpbGUgSEVBRDpjb250ZW50LnQpICYmCisJCWJsb2I9JChlY2hvIGNvcnJ1cHQgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJYmFkPSQob2JqX3RvX2ZpbGUgJGJsb2IpICYmCisJCXJtIC1mICIkZ29vZCIgJiYKKwkJbXYgIiRiYWQiICIkZ29vZCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmVhbWluZyBhIGNvcnJ1cHQgYmxvYiBmYWlscycgJworCSgKKwkJY2QgYml0LWVycm9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6Y29udGVudC50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXR0aW5nIHR5cGUgb2YgYSBjb3JydXB0IGJsb2IgZmFpbHMnICcKKwkoCisJCWNkIGJpdC1lcnJvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLXMgSEVBRDpjb250ZW50LnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtdSBkZXRlY3RzIGJpdC1lcnJvcnMgaW4gYmxvYnMnICcKKwkoCisJCWNkIGJpdC1lcnJvciAmJgorCQlybSAtZiBjb250ZW50LnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtdSBkZXRlY3RzIG1pc3Npbmcgb2JqZWN0cycgJworCSgKKwkJY2QgbWlzc2luZyAmJgorCQlybSAtZiBjb250ZW50LnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQKKwkpCisnCisKKyMgV2UgdXNlIC0tYmFyZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdHJhbnNwb3J0IGRldGVjdHMgaXQsIG5vdCB0aGUgY2hlY2tvdXQKKyMgcGhhc2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBkZXRlY3RzIGNvcnJ1cHRpb24nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgYml0LWVycm9yIGNvcnJ1cHQtdHJhbnNwb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbm8tbG9jYWwgLS1iYXJlIGRldGVjdHMgbWlzc2luZyBvYmplY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgbWlzc2luZyBtaXNzaW5nLXRyYW5zcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBkZXRlY3RzIG1pc25hbWVkIG9iamVjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBtaXNuYW1lZCBtaXNuYW1lZC10cmFuc3BvcnQKKycKKworIyBXZSBkbyBub3QgZXhwZWN0IC0tbG9jYWwgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gYXQgdGhlIHRyYW5zcG9ydCBsYXllciwKKyMgc28gd2UgYXJlIHJlYWxseSBjaGVja2luZyB0aGUgY2hlY2tvdXQoKSBjb2RlIHBhdGguCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWxvY2FsIGRldGVjdHMgY29ycnVwdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLWxvY2FsIGJpdC1lcnJvciBjb3JydXB0LWNoZWNrb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGRldGVjdGVkIGR1cmluZyBjaGVja291dCBsZWF2ZXMgcmVwbyBpbnRhY3QnICcKKwl0ZXN0X3BhdGhfaXNfZGlyIGNvcnJ1cHQtY2hlY2tvdXQvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWxvY2FsIGRldGVjdHMgbWlzc2luZyBvYmplY3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tbG9jYWwgbWlzc2luZyBtaXNzaW5nLWNoZWNrb3V0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2Nsb25lIC0tbG9jYWwgZGV0ZWN0cyBtaXNuYW1lZCBvYmplY3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tbG9jYWwgbWlzbmFtZWQgbWlzbmFtZWQtY2hlY2tvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggaW50byBjb3JydXB0ZWQgcmVwbyB3aXRoIGluZGV4LXBhY2snICcKKwljcCAtUiBiaXQtZXJyb3IgYml0LWVycm9yLWNwICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgYml0LWVycm9yLWNwIiAmJgorCSgKKwkJY2QgYml0LWVycm9yLWNwICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyB0cmFuc2Zlci51bnBhY2tMaW1pdD0xIFwKKwkJCWZldGNoIC4uL25vLWJpdC1lcnJvciAyPnN0ZGVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICEgLWkgY29sbGlzaW9uIHN0ZGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJuYWwgdHJlZSBvYmplY3RzIGFyZSBub3QgIm1pc3NpbmciJyAnCisJZ2l0IGluaXQgbWlzc2luZy1lbXB0eSAmJgorCSgKKwkJY2QgbWlzc2luZy1lbXB0eSAmJgorCQllbXB0eV90cmVlPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRyZWUgL2Rldi9udWxsKSAmJgorCQljb21taXQ9JChlY2hvIGZvbyB8IGdpdCBjb21taXQtdHJlZSAkZW1wdHlfdHJlZSkgJiYKKwkJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkY29tbWl0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwOTAtc3BhcnNlLWNoZWNrb3V0LXNjb3BlLnNoIGIvdC90MTA5MC1zcGFyc2UtY2hlY2tvdXQtc2NvcGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDBjYzAwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwOTAtc3BhcnNlLWNoZWNrb3V0LXNjb3BlLnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGFyc2UgY2hlY2tvdXQgc2NvcGUgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gImluaXRpYWwiID5hICYmCisJZWNobyAiaW5pdGlhbCIgPmIgJiYKKwllY2hvICJpbml0aWFsIiA+YyAmJgorCWdpdCBhZGQgYSBiIGMgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZlYXR1cmUgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGZlYXR1cmUgJiYKKwllY2hvICJtb2RpZmllZCIgPmIgJiYKKwllY2hvICJtb2RpZmllZCIgPmMgJiYKKwlnaXQgYWRkIGIgYyAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWNhdGlvbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVyZm9ybSBzcGFyc2UgY2hlY2tvdXQgb2YgbWFzdGVyJyAnCisJZ2l0IGNvbmZpZyAtLWxvY2FsIC0tYm9vbCBjb3JlLnNwYXJzZWNoZWNrb3V0IHRydWUgJiYKKwllY2hvICIhLyoiID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZWNobyAiL2EiID4+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWVjaG8gIi9jIiA+Pi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZlYXR1cmUgYnJhbmNoIGludG8gc3BhcnNlIGNoZWNrb3V0IG9mIG1hc3RlcicgJworCWdpdCBtZXJnZSBmZWF0dXJlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBjICYmCisJdGVzdCAiJChjYXQgYykiID0gIm1vZGlmaWVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXR1cm4gdG8gZnVsbCBjaGVja291dCBvZiBtYXN0ZXInICcKKwlnaXQgY2hlY2tvdXQgZmVhdHVyZSAmJgorCWVjaG8gIi8qIiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBhICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGMgJiYKKwl0ZXN0ICIkKGNhdCBiKSIgPSAibW9kaWZpZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luIHBhcnRpYWwgY2xvbmUsIHNwYXJzZSBjaGVja291dCBvbmx5IGZldGNoZXMgbmVlZGVkIGJsb2JzJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKworCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCWVjaG8gYSA+c2VydmVyL2EgJiYKKwllY2hvIGJiID5zZXJ2ZXIvYiAmJgorCW1rZGlyIHNlcnZlci9jICYmCisJZWNobyBjY2MgPnNlcnZlci9jL2MgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBhIGIgYy9jICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0gbWVzc2FnZSAmJgorCisJdGVzdF9jb25maWcgLUMgY2xpZW50IGNvcmUuc3BhcnNlY2hlY2tvdXQgMSAmJgorCXRlc3RfY29uZmlnIC1DIGNsaWVudCBleHRlbnNpb25zLnBhcnRpYWxjbG9uZSBvcmlnaW4gJiYKKwllY2hvICIhLyoiID5jbGllbnQvLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWVjaG8gIi9hIiA+PmNsaWVudC8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IC1DIGNsaWVudCBmZXRjaCAtLWZpbHRlcj1ibG9iOm5vbmUgb3JpZ2luICYmCisJZ2l0IC1DIGNsaWVudCBjaGVja291dCBGRVRDSF9IRUFEICYmCisKKwlnaXQgLUMgY2xpZW50IHJldi1saXN0IEhFQUQgXAorCQktLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgPnVuc29ydGVkX2FjdHVhbCAmJgorCSgKKwkJcHJpbnRmICI/IiAmJgorCQlnaXQgaGFzaC1vYmplY3Qgc2VydmVyL2IgJiYKKwkJcHJpbnRmICI/IiAmJgorCQlnaXQgaGFzaC1vYmplY3Qgc2VydmVyL2MvYworCSkgPnVuc29ydGVkX2V4cGVjdCAmJgorCXNvcnQgdW5zb3J0ZWRfYWN0dWFsID5hY3R1YWwgJiYKKwlzb3J0IHVuc29ydGVkX2V4cGVjdCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwOTEtc3BhcnNlLWNoZWNrb3V0LWJ1aWx0aW4uc2ggYi90L3QxMDkxLXNwYXJzZS1jaGVja291dC1idWlsdGluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0YTkxMjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDkxLXNwYXJzZS1jaGVja291dC1idWlsdGluLnNoCkBAIC0wLDAgKzEsNTI0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3BhcnNlIGNoZWNrb3V0IGJ1aWx0aW4gdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitsaXN0X2ZpbGVzKCkgeworCSMgRG8gbm90IHJlcGxhY2UgdGhpcyB3aXRoICdscyAiJDEiJywgYXMgImxzIiB3aXRoIEJTRC1saW5lYWdlCisJIyBlbmFibGVzICItQSIgYnkgZGVmYXVsdCBmb3Igcm9vdCBhbmQgZW5kcyB1cCBpbmNsdWRpbmcgIi5naXQiIGFuZAorCSMgc3VjaCBpbiBpdHMgb3V0cHV0LiAoTm90ZSwgdGhvdWdoLCB0aGF0IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUgYXMKKwkjIHJvb3QgaXMgZ2VuZXJhbGx5IG5vdCByZWNvbW1lbmRlZC4pCisJKGNkICIkMSIgJiYgcHJpbnRmICclc1xuJyAqKQorfQorCitjaGVja19maWxlcygpIHsKKwlsaXN0X2ZpbGVzICIkMSIgPmFjdHVhbCAmJgorCXNoaWZ0ICYmCisJcHJpbnRmICIlc1xuIiAkQCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBpbml0IHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZWNobyAiaW5pdGlhbCIgPmEgJiYKKwkJbWtkaXIgZm9sZGVyMSBmb2xkZXIyIGRlZXAgJiYKKwkJbWtkaXIgZGVlcC9kZWVwZXIxIGRlZXAvZGVlcGVyMiAmJgorCQlta2RpciBkZWVwL2RlZXBlcjEvZGVlcGVzdCAmJgorCQljcCBhIGZvbGRlcjEgJiYKKwkJY3AgYSBmb2xkZXIyICYmCisJCWNwIGEgZGVlcCAmJgorCQljcCBhIGRlZXAvZGVlcGVyMSAmJgorCQljcCBhIGRlZXAvZGVlcGVyMiAmJgorCQljcCBhIGRlZXAvZGVlcGVyMS9kZWVwZXN0ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzcGFyc2UtY2hlY2tvdXQgbGlzdCAoZW1wdHkpJyAnCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGxpc3QgPmxpc3QgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbGlzdCAmJgorCXRlc3RfaTE4bmdyZXAgInRoaXMgd29ya3RyZWUgaXMgbm90IHNwYXJzZSAoc3BhcnNlLWNoZWNrb3V0IGZpbGUgbWF5IG5vdCBleGlzdCkiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3BhcnNlLWNoZWNrb3V0IGxpc3QgKHBvcHVsYXRlZCknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLWYgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2F0ID5yZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtXEVPRiAmJgorCS9mb2xkZXIxLyoKKwkvZGVlcC8KKwkqKi9hCisJISpiaW4qCisJRU9GCisJY3AgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IGV4cGVjdCAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBsaXN0ID5saXN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNwYXJzZS1jaGVja291dCBpbml0JyAnCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGluaXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyByZXBvIHRydWUgY29yZS5zcGFyc2VjaGVja291dCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3BhcnNlLWNoZWNrb3V0IGxpc3QgYWZ0ZXIgaW5pdCcgJworCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBsaXN0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggZXhpc3Rpbmcgc3BhcnNlLWNoZWNrb3V0JyAnCisJZWNobyAiKmZvbGRlcioiID4+IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBpbml0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCSpmb2xkZXIqCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gYSBmb2xkZXIxIGZvbGRlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1zcGFyc2UnICcKKwlnaXQgY2xvbmUgLS1zcGFyc2UgImZpbGU6Ly8kKHB3ZCkvcmVwbyIgY2xvbmUgJiYKKwlnaXQgLUMgY2xvbmUgc3BhcnNlLWNoZWNrb3V0IGxpc3QgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJY2hlY2tfZmlsZXMgY2xvbmUgYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgZW5hYmxlcyBjb25maWcnICcKKwlnaXQgaW5pdCBlbXB0eS1jb25maWcgJiYKKwkoCisJCWNkIGVtcHR5LWNvbmZpZyAmJgorCQl0ZXN0X2NvbW1pdCB0ZXN0IGZpbGUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9jb25maWcud29ya3RyZWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgbm90aGluZyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2NvbmZpZy53b3JrdHJlZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGNvcmUuc3BhcnNlQ2hlY2tvdXQgJiYKKwkJZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgIi8qIiAmJgorCQl0ZXN0X2NtcF9jb25maWcgdHJ1ZSBjb3JlLnNwYXJzZUNoZWNrb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgc3BhcnNlLWNoZWNrb3V0IHVzaW5nIGJ1aWx0aW4nICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0ICIvKiIgIiEvKi8iICIqZm9sZGVyKiIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJKmZvbGRlcioKKwlFT0YKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvIGEgZm9sZGVyMSBmb2xkZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCBzcGFyc2UtY2hlY2tvdXQgdXNpbmcgLS1zdGRpbicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkvZm9sZGVyMS8KKwkvZm9sZGVyMi8KKwlFT0YKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IC0tc3RkaW4gPGV4cGVjdCAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBsaXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gImEgZm9sZGVyMSBmb2xkZXIyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdG8gc3BhcnNlLWNoZWNrb3V0JyAnCisJY2F0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA+ZXhwZWN0ICYmCisJY2F0ID5hZGQgPDwtXEVPRiAmJgorCXBhdHRlcm4xCisJL2ZvbGRlcjEvCisJcGF0dGVybjIKKwlFT0YKKwljYXQgYWRkID4+ZXhwZWN0ICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGFkZCAtLXN0ZGluIDxhZGQgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvICJhIGZvbGRlcjEgZm9sZGVyMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZSBtb2RlOiBtYXRjaCBwYXR0ZXJucycgJworCWdpdCAtQyByZXBvIGNvbmZpZyAtLXdvcmt0cmVlIGNvcmUuc3BhcnNlQ2hlY2tvdXRDb25lIHRydWUgJiYKKwlybSAtcmYgcmVwby9hIHJlcG8vZm9sZGVyMSByZXBvL2ZvbGRlcjIgJiYKKwlnaXQgLUMgcmVwbyByZWFkLXRyZWUgLW11IEhFQUQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgImRpc2FibGluZyBjb25lIHBhdHRlcm5zIiBlcnIgJiYKKwlnaXQgLUMgcmVwbyByZXNldCAtLWhhcmQgJiYKKwljaGVja19maWxlcyByZXBvIGEgZm9sZGVyMSBmb2xkZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogd2FybiBvbiBiYWQgcGF0dGVybicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBtdiBzcGFyc2UtY2hlY2tvdXQgcmVwby8uZ2l0L2luZm8vICYmCisJY3AgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IC4gJiYKKwllY2hvICIhL2RlZXAvZGVlcGVyLyoiID4+cmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IC1DIHJlcG8gcmVhZC10cmVlIC1tdSBIRUFEIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidW5yZWNvZ25pemVkIG5lZ2F0aXZlIHBhdHRlcm4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGFyc2UtY2hlY2tvdXQgZGlzYWJsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGRpc2FibGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgLS1saXN0ID5jb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGNvcmUuc3BhcnNlQ2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvIGEgZGVlcCBmb2xkZXIxIGZvbGRlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZSBtb2RlOiBpbml0IGFuZCBzZXQnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgaW5pdCAtLWNvbmUgJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgLS1saXN0ID5jb25maWcgJiYKKwl0ZXN0X2kxOG5ncmVwICJjb3JlLnNwYXJzZWNoZWNrb3V0Y29uZT10cnVlIiBjb25maWcgJiYKKwlsaXN0X2ZpbGVzIHJlcG8gPmRpciAgJiYKKwllY2hvIGEgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBkaXIgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAvZGVlcGVyMS9kZWVwZXN0LyAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwljaGVja19maWxlcyByZXBvIGEgZGVlcCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8vZGVlcCBhIGRlZXBlcjEgJiYKKwljaGVja19maWxlcyByZXBvL2RlZXAvZGVlcGVyMSBhIGRlZXBlc3QgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2RlZXAvCisJIS9kZWVwLyovCisJL2RlZXAvZGVlcGVyMS8KKwkhL2RlZXAvZGVlcGVyMS8qLworCS9kZWVwL2RlZXBlcjEvZGVlcGVzdC8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IHNldCAtLXN0ZGluIDI+ZXJyIDw8LVxFT0YgJiYKKwlmb2xkZXIxCisJZm9sZGVyMgorCUVPRgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwljaGVja19maWxlcyByZXBvIGEgZm9sZGVyMSBmb2xkZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogbGlzdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb2xkZXIxCisJZm9sZGVyMgorCUVPRgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBzZXQgLS1zdGRpbiA8ZXhwZWN0ICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGxpc3QgPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogc2V0IHdpdGggbmVzdGVkIGZvbGRlcnMnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAgZGVlcC9kZWVwZXIxL2RlZXBlc3QgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVyciAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkvZGVlcC8KKwlFT0YKKwl0ZXN0X2NtcCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogYWRkIGluZGVwZW5kZW50IHBhdGgnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAvZGVlcGVyMSAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBhZGQgZm9sZGVyMSAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkvZGVlcC8KKwkhL2RlZXAvKi8KKwkvZGVlcC9kZWVwZXIxLworCS9mb2xkZXIxLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvIGEgZGVlcCBmb2xkZXIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogYWRkIHNpYmxpbmcgcGF0aCcgJworCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBzZXQgZGVlcC9kZWVwZXIxICYmCisJZ2l0IC1DIHJlcG8gc3BhcnNlLWNoZWNrb3V0IGFkZCBkZWVwL2RlZXBlcjIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2RlZXAvCisJIS9kZWVwLyovCisJL2RlZXAvZGVlcGVyMS8KKwkvZGVlcC9kZWVwZXIyLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyByZXBvIGEgZGVlcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25lIG1vZGU6IGFkZCBwYXJlbnQgcGF0aCcgJworCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBzZXQgZGVlcC9kZWVwZXIxIGZvbGRlcjEgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgYWRkIGRlZXAgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2RlZXAvCisJL2ZvbGRlcjEvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gYSBkZWVwIGZvbGRlcjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IHRvIG9sZCBzcGFyc2UtY2hlY2tvdXQgb24gYmFkIHVwZGF0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgLUMgcmVwbyByZXNldCAtLWhhcmQgJiYKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAgJiYKKwllY2hvIHVwZGF0ZSA+cmVwby9kZWVwL2RlZXBlcjIvYSAmJgorCWNwIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAvZGVlcGVyMSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNhbm5vdCBzZXQgc3BhcnNlLWNoZWNrb3V0IHBhdHRlcm5zIiBlcnIgJiYKKwl0ZXN0X2NtcCByZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgZXhwZWN0ICYmCisJY2hlY2tfZmlsZXMgcmVwby9kZWVwIGEgZGVlcGVyMSBkZWVwZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCB0byBvbGQgc3BhcnNlLWNoZWNrb3V0IG9uIGVtcHR5IHVwZGF0ZScgJworCWdpdCBpbml0IGVtcHR5LXRlc3QgJiYKKwkoCisJCWVjaG8gPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gInRlc3QiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzcGFyc2UtY2hlY2tvdXQgc2V0IG5vdGhpbmcgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiU3BhcnNlIGNoZWNrb3V0IGxlYXZlcyBubyBlbnRyeSBvbiB3b3JraW5nIGRpcmVjdG9yeSIgZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgISAiLmdpdC9pbmRleC5sb2NrIiBlcnIgJiYKKwkJZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB3aGVuIGxvY2sgaXMgdGFrZW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dC5sb2NrICYmCisJdG91Y2ggcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0LmxvY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJVbmFibGUgdG8gY3JlYXRlIC4qXC5sb2NrIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGlnbm9yZSBzaG91bGQgbm90IHdhcm4gYWJvdXQgY29uZSBtb2RlJyAnCisJZ2l0IC1DIHJlcG8gY29uZmlnIC0td29ya3RyZWUgY29yZS5zcGFyc2VDaGVja291dENvbmUgdHJ1ZSAmJgorCWVjaG8gIioqL2Jpbi8qIiA+cmVwby8uZ2l0aWdub3JlICYmCisJZ2l0IC1DIHJlcG8gcmVzZXQgLS1oYXJkIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJucyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYXJzZS1jaGVja291dCAoaW5pdHxzZXR8ZGlzYWJsZSkgZmFpbHMgd2l0aCBkaXJ0eSBzdGF0dXMnICcKKwlnaXQgY2xvbmUgcmVwbyBkaXJ0eSAmJgorCWVjaG8gZGlydHkgPmRpcnR5L2ZvbGRlcjEvYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgc2V0IC9mb2xkZXIyLyogL2RlZXAvZGVlcGVyMS8qICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGRpcnR5IHNwYXJzZS1jaGVja291dCBkaXNhYmxlICYmCisJZ2l0IC1DIGRpcnR5IHJlc2V0IC0taGFyZCAmJgorCWdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgaW5pdCAmJgorCWdpdCAtQyBkaXJ0eSBzcGFyc2UtY2hlY2tvdXQgc2V0IC9mb2xkZXIyLyogL2RlZXAvZGVlcGVyMS8qICYmCisJZ2l0IC1DIGRpcnR5IHNwYXJzZS1jaGVja291dCBkaXNhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmUgbW9kZTogc2V0IHdpdGggY29yZS5pZ25vcmVDYXNlPXRydWUnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgaW5pdCAtLWNvbmUgJiYKKwlnaXQgLUMgcmVwbyAtYyBjb3JlLmlnbm9yZUNhc2U9dHJ1ZSBzcGFyc2UtY2hlY2tvdXQgc2V0IGZvbGRlcjEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2ZvbGRlcjEvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gYSBmb2xkZXIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyYWN0aW9uIHdpdGggc3VibW9kdWxlcycgJworCWdpdCBjbG9uZSByZXBvIHN1cGVyICYmCisJKAorCQljZCBzdXBlciAmJgorCQlta2RpciBtb2R1bGVzICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3JlcG8gbW9kdWxlcy9jaGlsZCAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IHNwYXJzZS1jaGVja291dCBpbml0IC0tY29uZSAmJgorCQlnaXQgc3BhcnNlLWNoZWNrb3V0IHNldCBmb2xkZXIxCisJKSAmJgorCWNoZWNrX2ZpbGVzIHN1cGVyIGEgZm9sZGVyMSBtb2R1bGVzICYmCisJY2hlY2tfZmlsZXMgc3VwZXIvbW9kdWxlcy9jaGlsZCBhIGRlZXAgZm9sZGVyMSBmb2xkZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZlcmVudCBzcGFyc2UtY2hlY2tvdXRzIHdpdGggd29ya3RyZWVzJyAnCisJZ2l0IC1DIHJlcG8gd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL3dvcmt0cmVlICYmCisJY2hlY2tfZmlsZXMgd29ya3RyZWUgImEgZGVlcCBmb2xkZXIxIGZvbGRlcjIiICYmCisJZ2l0IC1DIHdvcmt0cmVlIHNwYXJzZS1jaGVja291dCBpbml0IC0tY29uZSAmJgorCWdpdCAtQyByZXBvIHNwYXJzZS1jaGVja291dCBzZXQgZm9sZGVyMSAmJgorCWdpdCAtQyB3b3JrdHJlZSBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXAvZGVlcGVyMSAmJgorCWNoZWNrX2ZpbGVzIHJlcG8gYSBmb2xkZXIxICYmCisJY2hlY2tfZmlsZXMgd29ya3RyZWUgYSBkZWVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1c2luZyBmaWxlbmFtZSBrZWVwcyBmaWxlIG9uLWRpc2snICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGEgZGVlcCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkvYS8KKwkvZGVlcC8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGRlZXAKKycKKworY2hlY2tfcmVhZF90cmVlX2Vycm9ycyAoKSB7CisJUkVQTz0kMQorCUZJTEVTPSQyCisJRVJST1JTPSQzCisJZ2l0IC1DICRSRVBPIC1jIGNvcmUuc3BhcnNlQ2hlY2tvdXRDb25lPWZhbHNlIHJlYWQtdHJlZSAtbXUgSEVBRCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwljaGVja19maWxlcyAkUkVQTyAiJEZJTEVTIiAmJgorCWdpdCAtQyAkUkVQTyByZWFkLXRyZWUgLW11IEhFQUQgMj5lcnIgJiYKKwlpZiB0ZXN0IC16ICIkRVJST1JTIgorCXRoZW4KKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorCWVsc2UKKwkJdGVzdF9pMThuZ3JlcCAiJEVSUk9SUyIgZXJyCisJZmkgJiYKKwljaGVja19maWxlcyAkUkVQTyAkRklMRVMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0dGVybi1jaGVja3M6IC9BLyoqJyAnCisJY2F0ID5yZXBvLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9mb2xkZXIxLyoqCisJRU9GCisJY2hlY2tfcmVhZF90cmVlX2Vycm9ycyByZXBvICJhIGZvbGRlcjEiICJkaXNhYmxpbmcgY29uZSBwYXR0ZXJuIG1hdGNoaW5nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXR0ZXJuLWNoZWNrczogL0EvKiovQi8nICcKKwljYXQgPnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2RlZXAvKiovZGVlcGVzdAorCUVPRgorCWNoZWNrX3JlYWRfdHJlZV9lcnJvcnMgcmVwbyAiYSBkZWVwIiAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIgJiYKKwljaGVja19maWxlcyByZXBvL2RlZXAgImRlZXBlcjEiICYmCisJY2hlY2tfZmlsZXMgcmVwby9kZWVwL2RlZXBlcjEgImRlZXBlc3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdHRlcm4tY2hlY2tzOiB0b28gc2hvcnQnICcKKwljYXQgPnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJLworCUVPRgorCWNoZWNrX3JlYWRfdHJlZV9lcnJvcnMgcmVwbyAiYSIgImRpc2FibGluZyBjb25lIHBhdHRlcm4gbWF0Y2hpbmciCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXR0ZXJuLWNoZWNrczogbm90IHRvbyBzaG9ydCcgJworCWNhdCA+cmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkvYi8KKwlFT0YKKwlnaXQgLUMgcmVwbyByZWFkLXRyZWUgLW11IEhFQUQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdHRlcm4tY2hlY2tzOiB0cmFpbGluZyAiKiInICcKKwljYXQgPnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2EqCisJRU9GCisJY2hlY2tfcmVhZF90cmVlX2Vycm9ycyByZXBvICJhIiAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0dGVybi1jaGVja3M6IHN0YXJ0aW5nICIqIicgJworCWNhdCA+cmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IDw8LVxFT0YgJiYKKwkvKgorCSEvKi8KKwkqZWVwLworCUVPRgorCWNoZWNrX3JlYWRfdHJlZV9lcnJvcnMgcmVwbyAiYSBkZWVwIiAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0dGVybi1jaGVja3M6IGNvbnRhaW5lZCBnbG9iIGNoYXJhY3RlcnMnICcKKwlmb3IgYyBpbiAiW2FdIiAiXFwiICI/IiAiKiIKKwlkbworCQljYXQgPnJlcG8vLmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1FT0YgJiYKKwkJLyoKKwkJIS8qLworCQlzb21ldGhpbmckYy1lbHNlLworCQlFT0YKKwkJY2hlY2tfcmVhZF90cmVlX2Vycm9ycyByZXBvICJhIiAiZGlzYWJsaW5nIGNvbmUgcGF0dGVybiBtYXRjaGluZyIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQlNMQVNIUFNQRUMgJ3BhdHRlcm4tY2hlY2tzOiBlc2NhcGVkIGNoYXJhY3RlcnMnICcKKwlnaXQgY2xvbmUgcmVwbyBlc2NhcGVkICYmCisJVFJFRU9JRD0kKGdpdCAtQyBlc2NhcGVkIHJldi1wYXJzZSBIRUFEOmZvbGRlcjEpICYmCisJTkVXVFJFRT0kKGdpdCAtQyBlc2NhcGVkIG1rdHJlZSA8PC1FT0YKKwkkKGdpdCAtQyBlc2NhcGVkIGxzLXRyZWUgSEVBRCkKKwkwNDAwMDAgdHJlZSAkVFJFRU9JRAl6YmFkXFxkaXIKKwkwNDAwMDAgdHJlZSAkVFJFRU9JRAl6ZG9lcypleGlzdAorCTA0MDAwMCB0cmVlICRUUkVFT0lECXpnbG9iWyFhXT8KKwlFT0YKKwkpICYmCisJQ09NTUlUPSQoZ2l0IC1DIGVzY2FwZWQgY29tbWl0LXRyZWUgJE5FV1RSRUUgLXAgSEVBRCkgJiYKKwlnaXQgLUMgZXNjYXBlZCByZXNldCAtLWhhcmQgJENPTU1JVCAmJgorCWNoZWNrX2ZpbGVzIGVzY2FwZWQgImEgZGVlcCBmb2xkZXIxIGZvbGRlcjIgemJhZFxcZGlyIHpkb2VzKmV4aXN0IiB6Z2xvYlshYV0/ICYmCisJZ2l0IC1DIGVzY2FwZWQgc3BhcnNlLWNoZWNrb3V0IGluaXQgLS1jb25lICYmCisJZ2l0IC1DIGVzY2FwZWQgc3BhcnNlLWNoZWNrb3V0IHNldCB6YmFkXFxkaXIvYm9ndXMgInpkb2VzKm5vdCpleGlzdCIgInpkb2VzKmV4aXN0IiAiemdsb2JbIWFdPyIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL3piYWRcXGRpci8KKwkhL3piYWRcXGRpci8qLworCS96YmFkXFxkaXIvYm9ndXMvCisJL3pkb2VzXCpleGlzdC8KKwkvemRvZXNcKm5vdFwqZXhpc3QvCisJL3pnbG9iXFshYV1cPy8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgZXNjYXBlZC8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2hlY2tfcmVhZF90cmVlX2Vycm9ycyBlc2NhcGVkICJhIHpiYWRcXGRpciB6ZG9lcypleGlzdCB6Z2xvYlshYV0/IiAmJgorCWdpdCAtQyBlc2NhcGVkIGxzLXRyZWUgLWQgLS1uYW1lLW9ubHkgSEVBRCA+bGlzdC1leHBlY3QgJiYKKwlnaXQgLUMgZXNjYXBlZCBzcGFyc2UtY2hlY2tvdXQgc2V0IC0tc3RkaW4gPGxpc3QtZXhwZWN0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS8qCisJIS8qLworCS9kZWVwLworCS9mb2xkZXIxLworCS9mb2xkZXIyLworCS96YmFkXFxkaXIvCisJL3pkb2VzXCpleGlzdC8KKwkvemdsb2JcWyFhXVw/LworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBlc2NhcGVkLy5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwljaGVja19maWxlcyBlc2NhcGVkICJhIGRlZXAgZm9sZGVyMSBmb2xkZXIyIHpiYWRcXGRpciB6ZG9lcypleGlzdCIgemdsb2JbIWFdPyAmJgorCWdpdCAtQyBlc2NhcGVkIHNwYXJzZS1jaGVja291dCBsaXN0ID5saXN0LWFjdHVhbCAmJgorCXRlc3RfY21wIGxpc3QtZXhwZWN0IGxpc3QtYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2NvbmUgbW9kZSByZXBsYWNlcyBiYWNrc2xhc2hlcyB3aXRoIHNsYXNoZXMnICcKKwlnaXQgLUMgcmVwbyBzcGFyc2UtY2hlY2tvdXQgc2V0IGRlZXBcXGRlZXBlcjEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLyoKKwkhLyovCisJL2RlZXAvCisJIS9kZWVwLyovCisJL2RlZXAvZGVlcGVyMS8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgcmVwby8uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJY2hlY2tfZmlsZXMgcmVwbyBhIGRlZXAgJiYKKwljaGVja19maWxlcyByZXBvL2RlZXAgYSBkZWVwZXIxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTEwMC1jb21taXQtdHJlZS1vcHRpb25zLnNoIGIvdC90MTEwMC1jb21taXQtdHJlZS1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlNjZiYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMTAwLWNvbW1pdC10cmVlLW9wdGlvbnMuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAwNSBSZW5lIFNjaGFyZmUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1pdC10cmVlIG9wdGlvbnMgdGVzdAorCitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgZ2l0IGNvbW1pdC10cmVlIGNhbiBjcmVhdGUgYSBzcGVjaWZpYyBjb21taXQKK29iamVjdCBieSBkZWZpbmluZyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgaXQgdW5kZXJzdGFuZHMuCisKK0Fsc28gbWFrZSBzdXJlIHRoYXQgY29tbWFuZCBsaW5lIHBhcnNlciB1bmRlcnN0YW5kcyB0aGUgbm9ybWFsCisiZmxhZ3MgZmlyc3QgYW5kIHRoZW4gbm9uIGZsYWcgYXJndW1lbnRzIiBjb21tYW5kIGxpbmUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdGVkIDw8RU9GCit0cmVlICRFTVBUWV9UUkVFCithdXRob3IgQXV0aG9yIE5hbWUgPGF1dGhvckBlbWFpbD4gMTExNzE0ODQwMCArMDAwMAorY29tbWl0dGVyIENvbW1pdHRlciBOYW1lIDxjb21taXR0ZXJAZW1haWw+IDExMTcxNTAyMDAgKzAwMDAKKworY29tbWVudCB0ZXh0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3Rlc3QgcHJlcGFyYXRpb246IHdyaXRlIGVtcHR5IHRyZWUnIFwKKyAgICAnZ2l0IHdyaXRlLXRyZWUgPnRyZWVpZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbnN0cnVjdCBjb21taXQnIFwKKyAgICAnZWNobyBjb21tZW50IHRleHQgfAorICAgICBHSVRfQVVUSE9SX05BTUU9IkF1dGhvciBOYW1lIiBcCisgICAgIEdJVF9BVVRIT1JfRU1BSUw9ImF1dGhvckBlbWFpbCIgXAorICAgICBHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6MDAiIFwKKyAgICAgR0lUX0NPTU1JVFRFUl9OQU1FPSJDb21taXR0ZXIgTmFtZSIgXAorICAgICBHSVRfQ09NTUlUVEVSX0VNQUlMPSJjb21taXR0ZXJAZW1haWwiIFwKKyAgICAgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisgICAgIFRaPUdNVCBnaXQgY29tbWl0LXRyZWUgJChjYXQgdHJlZWlkKSA+Y29tbWl0aWQgMj4vZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZWFkIGNvbW1pdCcgXAorICAgICdnaXQgY2F0LWZpbGUgY29tbWl0ICQoY2F0IGNvbW1pdGlkKSA+Y29tbWl0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29tcGFyZSBjb21taXQnIFwKKyAgICAndGVzdF9jbXAgZXhwZWN0ZWQgY29tbWl0JworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZsYWdzIGFuZCB0aGVuIG5vbiBmbGFncycgJworCXRlc3RfdGljayAmJgorCWVjaG8gY29tbWVudCB0ZXh0IHwKKwlnaXQgY29tbWl0LXRyZWUgJChjYXQgdHJlZWlkKSA+Y29tbWl0aWQgJiYKKwllY2hvIGNvbW1lbnQgdGV4dCB8CisJZ2l0IGNvbW1pdC10cmVlICQoY2F0IHRyZWVpZCkgLXAgJChjYXQgY29tbWl0aWQpID5jaGlsZGlkLTEgJiYKKwllY2hvIGNvbW1lbnQgdGV4dCB8CisJZ2l0IGNvbW1pdC10cmVlIC1wICQoY2F0IGNvbW1pdGlkKSAkKGNhdCB0cmVlaWQpID5jaGlsZGlkLTIgJiYKKwl0ZXN0X2NtcCBjaGlsZGlkLTEgY2hpbGRpZC0yICYmCisJZ2l0IGNvbW1pdC10cmVlICQoY2F0IHRyZWVpZCkgLW0gZm9vID5jaGlsZGlkLTMgJiYKKwlnaXQgY29tbWl0LXRyZWUgLW0gZm9vICQoY2F0IHRyZWVpZCkgPmNoaWxkaWQtNCAmJgorCXRlc3RfY21wIGNoaWxkaWQtMyBjaGlsZGlkLTQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzAwLWNvbmZpZy5zaCBiL3QvdDEzMDAtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3ZWJmZTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzAwLWNvbmZpZy5zaApAQCAtMCwwICsxLDE5MTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBjb25maWcgaW4gZGlmZmVyZW50IHNldHRpbmdzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYXIgZGVmYXVsdCBjb25maWcnICcKKwlybSAtZiAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCcgJworCWdpdCBjb25maWcgY29yZS5wZW5ndWluICJsaXR0bGUgYmx1ZSIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2NvcmVdCisJcGVuZ3VpbiA9IGxpdHRsZSBibHVlCisJTW92aWUgPSBCYWRQaHlzaWNzCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkIGNhc2UnICcKKwlnaXQgY29uZmlnIENvcmUuTW92aWUgQmFkUGh5c2ljcyAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKKwlNb3ZpZSA9IEJhZFBoeXNpY3MKK1tDb3Jlc10KKwlXaGF0RXZlciA9IFNlY29uZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1pbGFyIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIENvcmVzLldoYXRFdmVyIFNlY29uZCAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKKwlNb3ZpZSA9IEJhZFBoeXNpY3MKKwlVUFBFUkNBU0UgPSB0cnVlCitbQ29yZXNdCisJV2hhdEV2ZXIgPSBTZWNvbmQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBwZXJjYXNlIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIENPUkUuVVBQRVJDQVNFIHRydWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSB3aXRoIG5vbi1tYXRjaCcgJworCWdpdCBjb25maWcgY29yZS5wZW5ndWluIGtpbmdwaW4gIWJsdWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSB3aXRoIG5vbi1tYXRjaCAoYWN0dWFsbHkgbWF0Y2hpbmcpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnBlbmd1aW4gInZlcnkgYmx1ZSIgIWtpbmdwaW4KKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2NvcmVdCisJcGVuZ3VpbiA9IHZlcnkgYmx1ZQorCU1vdmllID0gQmFkUGh5c2ljcworCVVQUEVSQ0FTRSA9IHRydWUKKwlwZW5ndWluID0ga2luZ3BpbgorW0NvcmVzXQorCVdoYXRFdmVyID0gU2Vjb25kCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLW1hdGNoIHJlc3VsdCcgJ3Rlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBtaXhlZC1jYXNlIGtleSBieSBjYW5vbmljYWwgbmFtZScgJworCXRlc3RfY21wX2NvbmZpZyBTZWNvbmQgY29yZXMud2hhdGV2ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBtaXhlZC1jYXNlIGtleSBieSBub24tY2Fub25pY2FsIG5hbWUnICcKKwl0ZXN0X2NtcF9jb25maWcgU2Vjb25kIENvUmVTLldoQXRFdkVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YnNlY3Rpb25zIGFyZSBub3QgY2Fub25pY2FsaXplZCBieSBnaXQtY29uZmlnJyAnCisJY2F0ID4+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtzZWN0aW9uLlN1YlNlY3Rpb25dCisJa2V5ID0gb25lCisJW3NlY3Rpb24gIlN1YlNlY3Rpb24iXQorCWtleSA9IHR3bworCUVPRgorCXRlc3RfY21wX2NvbmZpZyBvbmUgc2VjdGlvbi5zdWJzZWN0aW9uLmtleSAmJgorCXRlc3RfY21wX2NvbmZpZyB0d28gc2VjdGlvbi5TdWJTZWN0aW9uLmtleQorJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PFxFT0YKK1thbHBoYV0KK2JhciA9IGZvbworW2JldGFdCitiYXogPSBtdWx0aXBsZSBcCitsaW5lcworZm9vID0gYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQgd2l0aCBjb250LiBsaW5lcycgJworCWdpdCBjb25maWcgLS11bnNldCBiZXRhLmJhegorJworCitjYXQgPiBleHBlY3QgPDxcRU9GCitbYWxwaGFdCitiYXIgPSBmb28KK1tiZXRhXQorZm9vID0gYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQgd2l0aCBjb250LiBsaW5lcyBpcyBjb3JyZWN0JyAndGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKKwkJaGFoYSAgID0iYmV0YSIgIyBsYXN0IHNpbGx5IGNvbW1lbnQKK2hhaGEgPSBoZWxsbworCWhhaGEgPSBiZWxsbworW25leHRTZWN0aW9uXSBub05ld2xpbmUgPSBvdWNoCitFT0YKKworY3AgLmdpdC9jb25maWcgLmdpdC9jb25maWcyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHVuc2V0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBiZXRhLmhhaGEKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorW25leHRTZWN0aW9uXSBub05ld2xpbmUgPSBvdWNoCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgdW5zZXQgaXMgY29ycmVjdCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjcCAuZ2l0L2NvbmZpZzIgLmdpdC9jb25maWcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXBsYWNlLWFsbCBtaXNzaW5nIHZhbHVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGJldGEuaGFoYSAmJgorCXRlc3RfY21wIC5naXQvY29uZmlnMiAuZ2l0L2NvbmZpZworJworCitybSAuZ2l0L2NvbmZpZzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXBsYWNlLWFsbCcgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBiZXRhLmhhaGEgZ2FtbWEKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorCWhhaGEgPSBnYW1tYQorW25leHRTZWN0aW9uXSBub05ld2xpbmUgPSBvdWNoCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIHJlcGxhY2VkJyAnCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKKwloYWhhID0gYWxwaGEKK1tuZXh0U2VjdGlvbl0gbm9OZXdsaW5lID0gb3VjaAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsbHkgbWVhbiB0ZXN0JyAnCisJZ2l0IGNvbmZpZyBiZXRhLmhhaGEgYWxwaGEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorCWhhaGEgPSBhbHBoYQorW25leHRTZWN0aW9uXQorCW5vbmV3bGluZSA9IHdvdworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsbHkgcmVhbGx5IG1lYW4gdGVzdCcgJworCWdpdCBjb25maWcgbmV4dHNlY3Rpb24ubm9uZXdsaW5lIHdvdyAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFsdWUnICcKKwl0ZXN0X2NtcF9jb25maWcgYWxwaGEgYmV0YS5oYWhhCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKK1tuZXh0U2VjdGlvbl0KKwlub25ld2xpbmUgPSB3b3cKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYmV0YS5oYWhhICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKK1tuZXh0U2VjdGlvbl0KKwlub25ld2xpbmUgPSB3b3cKKwlOb05ld0xpbmUgPSB3b3cyIGZvciBtZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXZhcicgJworCWdpdCBjb25maWcgbmV4dHNlY3Rpb24uTm9OZXdMaW5lICJ3b3cyIGZvciBtZSIgImZvciBtZSQiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaCcgJworCWdpdCBjb25maWcgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICFmb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLW1hdGNoIHZhbHVlJyAnCisJdGVzdF9jbXBfY29uZmlnIHdvdyAtLWdldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUgIWZvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS12YWx1ZWQgZ2V0IHJldHVybnMgZmluYWwgb25lJyAnCisJdGVzdF9jbXBfY29uZmlnICJ3b3cyIGZvciBtZSIgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLXZhbHVlZCBnZXQtYWxsIHJldHVybnMgYWxsJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXdvdworCXdvdzIgZm9yIG1lCisJRU9GCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgbmV4dHNlY3Rpb24ubm9uZXdsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKK1tuZXh0U2VjdGlvbl0KKwlub25ld2xpbmUgPSB3b3czCisJTm9OZXdMaW5lID0gd293MiBmb3IgbWUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGl2YXIgcmVwbGFjZScgJworCWdpdCBjb25maWcgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICJ3b3czIiAid293JCIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIHVuc2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHVuc2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IHNvbWVzZWN0aW9uLm5vbmV3bGluZQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJTm9OZXdMaW5lID0gd293MiBmb3IgbWUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXZhciB1bnNldCcgJworCWdpdCBjb25maWcgLS11bnNldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUgIndvdzMkIiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIGtleScgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgaW52YWwuMmtleSBibGFibGEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3Qga2V5JyAnZ2l0IGNvbmZpZyAxMjM0NTYuYTEyMyA5ODcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hpZXJhcmNoaWNhbCBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyBWZXJzaW9uLjEuMi4zZVguQWxwaGEgYmV0YQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJTm9OZXdMaW5lID0gd293MiBmb3IgbWUKK1sxMjM0NTZdCisJYTEyMyA9IDk4NworW1ZlcnNpb24gIjEuMi4zZVgiXQorCUFscGhhID0gYmV0YQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hpZXJhcmNoaWNhbCBzZWN0aW9uIHZhbHVlJyAnCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2JldGEubm9pbmRlbnQ9c2lsbHlWYWx1ZQorbmV4dHNlY3Rpb24ubm9uZXdsaW5lPXdvdzIgZm9yIG1lCisxMjM0NTYuYTEyMz05ODcKK3ZlcnNpb24uMS4yLjNlWC5hbHBoYT1iZXRhCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29ya2luZyAtLWxpc3QnICcKKwlnaXQgY29uZmlnIC0tbGlzdCA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbGlzdCB3aXRob3V0IHJlcG8gcHJvZHVjZXMgZW1wdHkgb3V0cHV0JyAnCisJZ2l0IC0tZ2l0LWRpcj1ub25leGlzdGVudCBjb25maWcgLS1saXN0ID5vdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2JldGEubm9pbmRlbnQKK25leHRzZWN0aW9uLm5vbmV3bGluZQorMTIzNDU2LmExMjMKK3ZlcnNpb24uMS4yLjNlWC5hbHBoYQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbmFtZS1vbmx5IC0tbGlzdCcgJworCWdpdCBjb25maWcgLS1uYW1lLW9ubHkgLS1saXN0ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2JldGEubm9pbmRlbnQgc2lsbHlWYWx1ZQorbmV4dHNlY3Rpb24ubm9uZXdsaW5lIHdvdzIgZm9yIG1lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1nZXQtcmVnZXhwJyAnCisJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgaW4gPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorYmV0YS5ub2luZGVudAorbmV4dHNlY3Rpb24ubm9uZXdsaW5lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uYW1lLW9ubHkgLS1nZXQtcmVnZXhwJyAnCisJZ2l0IGNvbmZpZyAtLW5hbWUtb25seSAtLWdldC1yZWdleHAgaW4gPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgord293MiBmb3IgbWUKK3dvdzQgZm9yIHlvdQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWRkJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBuZXh0c2VjdGlvbi5ub25ld2xpbmUgIndvdzQgZm9yIHlvdSIgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBuZXh0c2VjdGlvbi5ub25ld2xpbmUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IC5naXQvY29uZmlnIDw8IEVPRgorW25vdmFsdWVdCisJdmFyaWFibGUKK1tlbXB0eXZhbHVlXQorCXZhcmlhYmxlID0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFyaWFibGUgd2l0aCBubyB2YWx1ZScgJworCWdpdCBjb25maWcgLS1nZXQgbm92YWx1ZS52YXJpYWJsZSBeJAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFyaWFibGUgd2l0aCBlbXB0eSB2YWx1ZScgJworCWdpdCBjb25maWcgLS1nZXQgZW1wdHl2YWx1ZS52YXJpYWJsZSBeJAorJworCitlY2hvIG5vdmFsdWUudmFyaWFibGUgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXJlZ2V4cCB2YXJpYWJsZSB3aXRoIG5vIHZhbHVlJyAnCisJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgbm92YWx1ZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworZWNobyAnbm92YWx1ZS52YXJpYWJsZSB0cnVlJyA+IGV4cGVjdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQtcmVnZXhwIC0tYm9vbCB2YXJpYWJsZSB3aXRoIG5vIHZhbHVlJyAnCisJZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtcmVnZXhwIG5vdmFsdWUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2VjaG8gJ2VtcHR5dmFsdWUudmFyaWFibGUgJyA+IGV4cGVjdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQtcmVnZXhwIHZhcmlhYmxlIHdpdGggZW1wdHkgdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCBlbXB0eXZhbHVlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitlY2hvIHRydWUgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IGJvb2wgdmFyaWFibGUgd2l0aCBubyB2YWx1ZScgJworCWdpdCBjb25maWcgLS1ib29sIG5vdmFsdWUudmFyaWFibGUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2VjaG8gZmFsc2UgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IGJvb2wgdmFyaWFibGUgd2l0aCBlbXB0eSB2YWx1ZScgJworCWdpdCBjb25maWcgLS1ib29sIGVtcHR5dmFsdWUudmFyaWFibGUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGFyZ3VtZW50cywgYnV0IG5vIGNyYXNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwIHVzYWdlIG91dHB1dAorJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PCBFT0YKK1thLmJdCisJYyA9IGQKK0VPRgorCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYS5iXQorCWMgPSBkCitbYV0KKwl4ID0geQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBzZWN0aW9uIGlzIHBhcnRpYWwgbWF0Y2ggb2YgYW5vdGhlcicgJworCWdpdCBjb25maWcgYS54IHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2EuYl0KKwljID0gZAorW2FdCisJeCA9IHkKKwliID0gYworW2JdCisJeCA9IHkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgdmFyaWFibGUgaW5zZXJ0cyBpbnRvIHByb3BlciBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyBiLnggeSAmJgorCWdpdCBjb25maWcgYS5iIGMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx0ZXJuYXRpdmUgLS1maWxlIChub24tZXhpc3RpbmcgZmlsZSBzaG91bGQgZmFpbCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZmlsZSBub24tZXhpc3RpbmctY29uZmlnIC1sCisnCisKK2NhdCA+IG90aGVyLWNvbmZpZyA8PCBFT0YKK1tlaW5dCisJYmFobiA9IHN0cmFzc2UKK0VPRgorCitjYXQgPiBleHBlY3QgPDwgRU9GCitlaW4uYmFobj1zdHJhc3NlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx0ZXJuYXRpdmUgR0lUX0NPTkZJRycgJworCUdJVF9DT05GSUc9b3RoZXItY29uZmlnIGdpdCBjb25maWcgLS1saXN0ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsdGVybmF0aXZlIEdJVF9DT05GSUcgKC0tZmlsZSknICcKKwlnaXQgY29uZmlnIC0tZmlsZSBvdGhlci1jb25maWcgLS1saXN0ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsdGVybmF0aXZlIEdJVF9DT05GSUcgKC0tZmlsZT0tKScgJworCWdpdCBjb25maWcgLS1maWxlIC0gLS1saXN0IDxvdGhlci1jb25maWcgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dGluZyBhIHZhbHVlIGluIHN0ZGluIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGUgLSBzb21lLnZhbHVlIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0aW5nIHN0ZGluIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGUgLSAtLWVkaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXIgY29uZmlnIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJbWtkaXIgeCAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyB4IHN0cmFzc2UgLS1nZXQgLS1maWxlIC4uL290aGVyLWNvbmZpZyBlaW4uYmFobgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZlciBjb25maWcgZnJvbSBzdWJkaXJlY3RvcnkgdmlhIC0tZmlsZScgJworCXRlc3RfY21wX2NvbmZpZyAtQyB4IHN0cmFzc2UgLS1maWxlPS4uL290aGVyLWNvbmZpZyAtLWdldCBlaW4uYmFobgorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbZWluXQorCWJhaG4gPSBzdHJhc3NlCitbYW53b2huZXJdCisJcGFyayA9IGF1c3dlaXMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldCBpbiBhbHRlcm5hdGl2ZSBmaWxlJyAnCisJZ2l0IGNvbmZpZyAtLWZpbGU9b3RoZXItY29uZmlnIGFud29obmVyLnBhcmsgYXVzd2VpcyAmJgorCXRlc3RfY21wIGV4cGVjdCBvdGhlci1jb25maWcKKycKKworY2F0ID4gLmdpdC9jb25maWcgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJlaW5zIl0KKwl4ID0gMQorW2JyYW5jaC5laW5zXQorCXkgPSAxCisJW2JyYW5jaCAiMSAyMzQgYmxhYmwvYSJdCit3ZWlyZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC5laW5zIGJyYW5jaC56d2VpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyMgSGFsbG8KKwkjQmVsbG8KK1ticmFuY2ggInp3ZWkiXQorCXggPSAxCitbYnJhbmNoICJ6d2VpIl0KKwl5ID0gMQorCVticmFuY2ggIjEgMjM0IGJsYWJsL2EiXQord2VpcmQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgc3VjY2VlZGVkJyAnCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBub24tZXhpc3Rpbmcgc2VjdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBcCisJCWJyYW5jaC4id29ybGQgZG9taW5hdGlvbiIgYnJhbmNoLmRyZWkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHN1Y2NlZWRlZCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYW5vdGhlciBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC4iMSAyMzQgYmxhYmwvYSIgYnJhbmNoLmRyZWkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIyBIYWxsbworCSNCZWxsbworW2JyYW5jaCAiendlaSJdCisJeCA9IDEKK1ticmFuY2ggInp3ZWkiXQorCXkgPSAxCitbYnJhbmNoICJkcmVpIl0KK3dlaXJkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHN1Y2NlZWRlZCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPj4gLmdpdC9jb25maWcgPDwgRU9GCitbYnJhbmNoICJ2aWVyIl0geiA9IDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYSBzZWN0aW9uIHdpdGggYSB2YXIgb24gdGhlIHNhbWUgbGluZScgJworCWdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2gudmllciBicmFuY2guendlaQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJ6d2VpIl0KKwl4ID0gMQorW2JyYW5jaCAiendlaSJdCisJeSA9IDEKK1ticmFuY2ggImRyZWkiXQord2VpcmQKK1ticmFuY2ggInp3ZWkiXQorCXogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHN1Y2NlZWRlZCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWluZyBlbXB0eSBzZWN0aW9uIG5hbWUgaXMgcmVqZWN0ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gYnJhbmNoLnp3ZWkgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1pbmcgdG8gYm9ndXMgc2VjdGlvbiBpcyByZWplY3RlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guendlaSAiYm9ndXMgbmFtZSIKKycKKworY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgorICBbYnJhbmNoICJ6d2VpIl0gYSA9IDEgW2JyYW5jaCAidmllciJdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gYnJhbmNoLnp3ZWkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIyBIYWxsbworCSNCZWxsbworW2JyYW5jaCAiZHJlaSJdCit3ZWlyZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY3Rpb24gd2FzIHJlbW92ZWQgcHJvcGVybHknICcKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2dpdGN2c10KKwllbmFibGVkID0gdHJ1ZQorCWRibmFtZSA9ICVHZ2l0Y3ZzMi4lYS4lbS5zcWxpdGUKK1tnaXRjdnMgImV4dCJdCisJZGJuYW1lID0gJUdnaXRjdnMxLiVhLiVtLnNxbGl0ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY3Rpb24gZW5kaW5nJyAnCisJcm0gLWYgLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKKwlnaXQgY29uZmlnIGdpdGN2cy5leHQuZGJuYW1lICVHZ2l0Y3ZzMS4lYS4lbS5zcWxpdGUgJiYKKwlnaXQgY29uZmlnIGdpdGN2cy5kYm5hbWUgJUdnaXRjdnMyLiVhLiVtLnNxbGl0ZSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgbnVtYmVycyAnCisJZ2l0IGNvbmZpZyBraWxvLmdyYW0gMWsgJiYKKwlnaXQgY29uZmlnIG1lZ2EudG9uIDFtICYmCisJZWNobyAxMDI0ID5leHBlY3QgJiYKKwllY2hvIDEwNDg1NzYgPj5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0taW50IC0tZ2V0IGtpbG8uZ3JhbSA+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWludCAtLWdldCBtZWdhLnRvbiA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pbnQgaXMgYXQgbGVhc3QgNjQgYml0cycgJworCWdpdCBjb25maWcgZ2lnYS53YXR0cyAxMjFnICYmCisJZWNobyAgPmV4cGVjdCAmJgorCXRlc3RfY21wX2NvbmZpZyAxMjk5MjI3NjA3MDQgLS1pbnQgLS1nZXQgZ2lnYS53YXR0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHVuaXQnICcKKwlnaXQgY29uZmlnIGFuaW52YWxpZC51bml0ICIxYXV0byIgJiYKKwl0ZXN0X2NtcF9jb25maWcgMWF1dG8gYW5pbnZhbGlkLnVuaXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0taW50IC0tZ2V0IGFuaW52YWxpZC51bml0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlIC4xYXV0by4gZm9yIC5hbmludmFsaWQudW5pdC4gaW4gZmlsZSAuZ2l0L2NvbmZpZzogaW52YWxpZCB1bml0IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGluZSBudW1iZXIgaXMgcmVwb3J0ZWQgY29ycmVjdGx5JyAnCisJcHJpbnRmICJbYm9vbF1cblx0dmFyXG4iID5pbnZhbGlkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiBpbnZhbGlkIC0tcGF0aCBib29sLnZhciAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImxpbmUgMiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgc3RkaW4gY29uZmlnJyAnCisJZWNobyAiW2Jyb2tlbiIgfCB0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tbGlzdCAtLWZpbGUgLSA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgY29uZmlnIGxpbmUgMSBpbiBzdGFuZGFyZCBpbnB1dCIgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK3RydWUKK2ZhbHNlCit0cnVlCitmYWxzZQordHJ1ZQorZmFsc2UKK3RydWUKK2ZhbHNlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBib29sICcKKworCWdpdCBjb25maWcgYm9vbC50cnVlMSAwMSAmJgorCWdpdCBjb25maWcgYm9vbC50cnVlMiAtMSAmJgorCWdpdCBjb25maWcgYm9vbC50cnVlMyBZZVMgJiYKKwlnaXQgY29uZmlnIGJvb2wudHJ1ZTQgdHJ1ZSAmJgorCWdpdCBjb25maWcgYm9vbC5mYWxzZTEgMDAwICYmCisJZ2l0IGNvbmZpZyBib29sLmZhbHNlMiAiIiAmJgorCWdpdCBjb25maWcgYm9vbC5mYWxzZTMgbk8gJiYKKwlnaXQgY29uZmlnIGJvb2wuZmFsc2U0IEZBTFNFICYmCisJcm0gLWYgcmVzdWx0ICYmCisJZm9yIGkgaW4gMSAyIDMgNAorCWRvCisJICAgIGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGJvb2wudHJ1ZSRpID4+cmVzdWx0CisJICAgIGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGJvb2wuZmFsc2UkaSA+PnJlc3VsdAorCWRvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVzdWx0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIGJvb2wgKC0tZ2V0KScgJworCisJZ2l0IGNvbmZpZyBib29sLm5vYm9vbCBmb29iYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBib29sLm5vYm9vbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBib29sIChzZXQpJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYm9vbCBib29sLm5vYm9vbCBmb29iYXInCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKK1tib29sXQorCXRydWUxID0gdHJ1ZQorCXRydWUyID0gdHJ1ZQorCXRydWUzID0gdHJ1ZQorCXRydWU0ID0gdHJ1ZQorCWZhbHNlMSA9IGZhbHNlCisJZmFsc2UyID0gZmFsc2UKKwlmYWxzZTMgPSBmYWxzZQorCWZhbHNlNCA9IGZhbHNlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0tYm9vbCcgJworCisJcm0gLWYgLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBib29sLnRydWUxIDAxICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC50cnVlMiAtMSAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wudHJ1ZTMgWWVTICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC50cnVlNCB0cnVlICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC5mYWxzZTEgMDAwICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC5mYWxzZTIgIiIgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBib29sLmZhbHNlMyBuTyAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wuZmFsc2U0IEZBTFNFICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnJworCitjYXQgPiBleHBlY3QgPDxcRU9GCitbaW50XQorCXZhbDEgPSAxCisJdmFsMiA9IC0xCisJdmFsMyA9IDUyNDI4ODAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgLS1pbnQnICcKKworCXJtIC1mIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLWludCBpbnQudmFsMSAwMSAmJgorCWdpdCBjb25maWcgLS1pbnQgaW50LnZhbDIgLTEgJiYKKwlnaXQgY29uZmlnIC0taW50IGludC52YWwzIDVtICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAtLWJvb2wtb3ItaW50JyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2Jvb2xdCisJdHJ1ZTEKKwl0cnVlMiA9IHRydWUKKwlmYWxzZSA9IGZhbHNlCisJW2ludF0KKwlpbnQxID0gMAorCWludDIgPSAxCisJaW50MyA9IC0xCisJRU9GCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXRydWUKKwl0cnVlCisJZmFsc2UKKwkwCisJMQorCS0xCisJRU9GCisJeworCQlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC50cnVlMSAmJgorCQlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC50cnVlMiAmJgorCQlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZSAmJgorCQlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDEgJiYKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQyICYmCisJCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MworCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitbYm9vbF0KKwl0cnVlMSA9IHRydWUKKwlmYWxzZTEgPSBmYWxzZQorCXRydWUyID0gdHJ1ZQorCWZhbHNlMiA9IGZhbHNlCitbaW50XQorCWludDEgPSAwCisJaW50MiA9IDEKKwlpbnQzID0gLTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgLS1ib29sLW9yLWludCcgJworCXJtIC1mIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTEgdHJ1ZSAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLmZhbHNlMSBmYWxzZSAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLnRydWUyIHllcyAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLmZhbHNlMiBubyAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MSAwICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQyIDEgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitbcGF0aF0KKwlob21lID0gfi8KKwlub3JtYWwgPSAvZGV2L251bGwKKwl0cmFpbGluZ3RpbGRlID0gZm9vfgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdzZXQgLS1wYXRoJyAnCisJcm0gLWYgLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIC0tcGF0aCBwYXRoLmhvbWUgIn4vIiAmJgorCWdpdCBjb25maWcgLS1wYXRoIHBhdGgubm9ybWFsICIvZGV2L251bGwiICYmCisJZ2l0IGNvbmZpZyAtLXBhdGggcGF0aC50cmFpbGluZ3RpbGRlICJmb29+IiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZycKKworaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1cgJiYgdGVzdCAiJHtIT01FK3NldH0iCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIEhPTUVWQVIKK2ZpCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskSE9NRS8KKy9kZXYvbnVsbAorZm9vfgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSE9NRVZBUiAnZ2V0IC0tcGF0aCcgJworCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGguaG9tZSA+IHJlc3VsdCAmJgorCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGgubm9ybWFsID4+IHJlc3VsdCAmJgorCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGgudHJhaWxpbmd0aWxkZSA+PiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVzdWx0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorL2Rldi9udWxsCitmb29+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2dldCAtLXBhdGggY29wZXMgd2l0aCB1bnNldCAkSE9NRScgJworCSgKKwkJc2FuZV91bnNldCBIT01FICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGguaG9tZSBcCisJCQk+cmVzdWx0IDI+bXNnICYmCisJCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGgubm9ybWFsID4+cmVzdWx0ICYmCisJCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGgudHJhaWxpbmd0aWxkZSA+PnJlc3VsdAorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbRmZdYWlsZWQgdG8gZXhwYW5kLip+LyIgbXNnICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgLS1wYXRoIGJhcmZzIG9uIGJvb2xlYW4gdmFyaWFibGUnICcKKwllY2hvICJbcGF0aF1ib29sIiA+LmdpdC9jb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLmJvb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IC0tZXhwaXJ5LWRhdGUnICcKKwlyZWw9IjMud2Vla3MuNS5kYXlzLjAwOjAwIiAmJgorCXJlbF9vdXQ9IiRyZWwgLT4iICYmCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2RhdGVdCisJdmFsaWQxID0gIjMud2Vla3MuNS5kYXlzIDAwOjAwIgorCXZhbGlkMiA9ICJGcmkgSnVuIDQgMTU6NDY6NTUgMjAxMCIKKwl2YWxpZDMgPSAiMjAxNy8xMS8xMSAxMToxMToxMVBNIgorCXZhbGlkNCA9ICIyMDE3LzExLzEwIDA5OjA4OjA3IFBNIgorCXZhbGlkNSA9ICJuZXZlciIKKwlpbnZhbGlkMSA9ICJhYmMiCisJRU9GCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJCh0ZXN0LXRvb2wgZGF0ZSB0aW1lc3RhbXAgJHJlbCkKKwkxMjc1NjY2NDE1CisJMTUxMDQ0MTg3MQorCTE1MTAzNDgwODcKKwkwCisJRU9GCisJOiAid29yayBhcm91bmQgaGVyZWRvYyBwYXJzaW5nIGJ1ZyBmaXhlZCBpbiBkYXNoIDAuNS43IChpbiBlYzJjODRkKSIgJiYKKwl7CisJCWVjaG8gIiRyZWxfb3V0ICQoZ2l0IGNvbmZpZyAtLWV4cGlyeS1kYXRlIGRhdGUudmFsaWQxKSIKKwkJZ2l0IGNvbmZpZyAtLWV4cGlyeS1kYXRlIGRhdGUudmFsaWQyICYmCisJCWdpdCBjb25maWcgLS1leHBpcnktZGF0ZSBkYXRlLnZhbGlkMyAmJgorCQlnaXQgY29uZmlnIC0tZXhwaXJ5LWRhdGUgZGF0ZS52YWxpZDQgJiYKKwkJZ2l0IGNvbmZpZyAtLWV4cGlyeS1kYXRlIGRhdGUudmFsaWQ1CisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1leHBpcnktZGF0ZSBkYXRlLmludmFsaWQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAtLXR5cGU9Y29sb3InICcKKwlybSAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgZm9vLmNvbG9yICJyZWQiICYmCisJZ2l0IGNvbmZpZyAtLWdldCAtLXR5cGU9Y29sb3IgZm9vLmNvbG9yID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWVjaG8gIjxSRUQ+IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCBFT0YKK1tmb29dCisJY29sb3IgPSByZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgLS10eXBlPWNvbG9yJyAnCisJcm0gLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIC0tdHlwZT1jb2xvciBmb28uY29sb3IgInJlZCIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IC0tdHlwZT1jb2xvciBiYXJmcyBvbiBub24tY29sb3InICcKKwllY2hvICJbZm9vXWJhcj1ub3QtYS1jb2xvciIgPi5naXQvY29uZmlnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldCAtLXR5cGU9Y29sb3IgZm9vLmJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgLS10eXBlPWNvbG9yIGJhcmZzIG9uIG5vbi1jb2xvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS10eXBlPWNvbG9yIGZvby5jb2xvciAibm90LWEtY29sb3IiIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJjYW5ub3QgcGFyc2UgY29sb3IiIGVycm9yCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1txdW90ZV0KKwlsZWFkaW5nID0gIiB0ZXN0IgorCWVuZGluZyA9ICJ0ZXN0ICIKKwlzZW1pY29sb24gPSAidGVzdDt0ZXN0IgorCWhhc2ggPSAidGVzdCN0ZXN0IgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90aW5nJyAnCisJcm0gLWYgLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIHF1b3RlLmxlYWRpbmcgIiB0ZXN0IiAmJgorCWdpdCBjb25maWcgcXVvdGUuZW5kaW5nICJ0ZXN0ICIgJiYKKwlnaXQgY29uZmlnIHF1b3RlLnNlbWljb2xvbiAidGVzdDt0ZXN0IiAmJgorCWdpdCBjb25maWcgcXVvdGUuaGFzaCAidGVzdCN0ZXN0IiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgd2l0aCBuZXdsaW5lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAia2V5LndpdGgKK25ld2xpbmUiIDEyMycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsdWUgd2l0aCBuZXdsaW5lJyAnZ2l0IGNvbmZpZyBrZXkuc3ViIHZhbHVlLndpdGhcXFwKK25ld2xpbmUnCisKK2NhdCA+IC5naXQvY29uZmlnIDw8XEVPRgorW3NlY3Rpb25dCisJOyBjb21tZW50IFwKKwljb250aW51ZWQgPSBjb250XAoraW51ZWQKKwlub25jb250ICAgPSBub3QgY29udGludWVkIDsgXAorCXF1b3RlY29udCA9ICJjb250O1wKK2ludWVkIgorRU9GCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKK3NlY3Rpb24uY29udGludWVkPWNvbnRpbnVlZAorc2VjdGlvbi5ub25jb250PW5vdCBjb250aW51ZWQKK3NlY3Rpb24ucXVvdGVjb250PWNvbnQ7aW51ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWx1ZSBjb250aW51ZWQgb24gbmV4dCBsaW5lJyAnCisJZ2l0IGNvbmZpZyAtLWxpc3QgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVzdWx0CisnCisKK2NhdCA+IC5naXQvY29uZmlnIDw8XEVPRgorW3NlY3Rpb24gInN1Yj1zZWN0aW9uIl0KKwl2YWwxID0gZm9vPWJhcgorCXZhbDIgPSBmb29cbmJhcgorCXZhbDMgPSBcblxuCisJdmFsNCA9CisJdmFsNQorRU9GCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKK3NlY3Rpb24uc3ViPXNlY3Rpb24udmFsMQorZm9vPWJhclFzZWN0aW9uLnN1Yj1zZWN0aW9uLnZhbDIKK2ZvbworYmFyUXNlY3Rpb24uc3ViPXNlY3Rpb24udmFsMworCisKK1FzZWN0aW9uLnN1Yj1zZWN0aW9uLnZhbDQKK1FzZWN0aW9uLnN1Yj1zZWN0aW9uLnZhbDVRCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbnVsbCAtLWxpc3QnICcKKwlnaXQgY29uZmlnIC0tbnVsbCAtLWxpc3QgPnJlc3VsdC5yYXcgJiYKKwludWxfdG9fcSA8cmVzdWx0LnJhdyA+cmVzdWx0ICYmCisJZWNobyA+PnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1udWxsIC0tZ2V0LXJlZ2V4cCcgJworCWdpdCBjb25maWcgLS1udWxsIC0tZ2V0LXJlZ2V4cCAidmFsWzAtOV0iID5yZXN1bHQucmF3ICYmCisJbnVsX3RvX3EgPHJlc3VsdC5yYXcgPnJlc3VsdCAmJgorCWVjaG8gPj5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lubmVyIHdoaXRlc3BhY2Uga2VwdCB2ZXJiYXRpbScgJworCWdpdCBjb25maWcgc2VjdGlvbi52YWwgImZvbyAJICBiYXIiICYmCisJdGVzdF9jbXBfY29uZmlnICJmb28gCSAgYmFyIiBzZWN0aW9uLnZhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rZWQgY29uZmlndXJhdGlvbicgJworCWxuIC1zIG5vdHlldCBteWNvbmZpZyAmJgorCWdpdCBjb25maWcgLS1maWxlPW15Y29uZmlnIHRlc3QuZnJvdHogbml0Zm9sICYmCisJdGVzdCAtaCBteWNvbmZpZyAmJgorCXRlc3QgLWYgbm90eWV0ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyAtLWZpbGU9bm90eWV0IHRlc3QuZnJvdHopIiA9IHpuaXRmb2wgJiYKKwlnaXQgY29uZmlnIC0tZmlsZT1teWNvbmZpZyB0ZXN0Lnh5enp5IHJlenJvdiAmJgorCXRlc3QgLWggbXljb25maWcgJiYKKwl0ZXN0IC1mIG5vdHlldCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwluaXRmb2wKKwlyZXpyb3YKKwlFT0YKKwl7CisJCWdpdCBjb25maWcgLS1maWxlPW5vdHlldCB0ZXN0LmZyb3R6ICYmCisJCWdpdCBjb25maWcgLS1maWxlPW5vdHlldCB0ZXN0Lnh5enp5CisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCBjb25maWd1cmF0aW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGU9ZG9lc25vdGV4aXN0IC0tbGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlPWRvZXNub3RleGlzdCB0ZXN0Lnh5enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmsgdG8gbm9uZXhpc3RlbnQgY29uZmlndXJhdGlvbicgJworCWxuIC1zIGRvZXNub3RleGlzdCBsaW5rdG9uYWRhICYmCisJbG4gLXMgbGlua3RvbmFkYSBsaW5rdG9saW5rdG9uYWRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGU9bGlua3RvbmFkYSAtLWxpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZmlsZT1saW5rdG9saW5rdG9uYWRhIC0tbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGxpdF9jbWRsaW5lIHJldHVybicgIgorCWdpdCBjb25maWcgYWxpYXMuc3BsaXQtY21kbGluZS1maXggJ2VjaG8gXCInICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNwbGl0LWNtZGxpbmUtZml4ICYmCisJZWNobyBmb28gPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gJ2luaXRpYWwgY29tbWl0JyAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgJ2VjaG8gXCInICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgImtleT12YWx1ZSIgc3VwcG9ydCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl2YWx1ZQorCXZhbHVlCisJdHJ1ZQorCUVPRgorCXsKKwkJZ2l0IC1jIGNvcmUubmFtZT12YWx1ZSBjb25maWcgY29yZS5uYW1lICYmCisJCWdpdCAtYyBmb28uQ2FtZWxDYXNlPXZhbHVlIGNvbmZpZyBmb28uY2FtZWxjYXNlICYmCisJCWdpdCAtYyBmb28uZmxhZyBjb25maWcgLS1ib29sIGZvby5mbGFnCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBuYW1lPXZhbHVlIGNvbmZpZyBjb3JlLm5hbWUKKycKKworIyBXZSBqdXN0IG5lZWQgYSB0eXBlLXNwZWNpZmllciBoZXJlIHRoYXQgY2FyZXMgYWJvdXQgdGhlCisjIGRpc3RpbmN0aW9uIGludGVybmFsbHkgYmV0d2VlbiBhIE5VTEwgYm9vbGVhbiBhbmQgYSByZWFsCisjIHN0cmluZyAoYmVjYXVzZSBtb3N0IG9mIGdpdCdzIGludGVybmFsIHBhcnNlcnMgZG8gY2FyZSkuCisjIFVzaW5nICItLXBhdGgiIHdvcmtzLCBidXQgd2UgZG8gbm90IG90aGVyd2lzZSBjYXJlIGFib3V0CisjIGl0cyBzZW1hbnRpY3MuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgY2FuIHJlcHJlc2VudCBlbXB0eSBzdHJpbmcnICcKKwllY2hvID5leHBlY3QgJiYKKwlnaXQgLWMgZm9vLmVtcHR5PSBjb25maWcgLS1wYXRoIGZvby5lbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgc2FuaXR5LWNoZWNraW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb289YmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb289LmJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgZm9vLmJhPXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGZvby4xYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb28uImJhCisJCQkJeiIuYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuZm9vIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb28uIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuZm9vLiBmYWxzZSAmJgorCWdpdCBjb25maWcgZm9vLmJhciB0cnVlICYmCisJZ2l0IGNvbmZpZyBmb28uImJhID16Ii5iYXIgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIHdvcmtzIHdpdGggYWxpYXNlcyBvZiBidWlsdGlucycgJworCWdpdCBjb25maWcgYWxpYXMuY2hlY2tjb25maWcgIi1jIGZvby5jaGVjaz1iYXIgY29uZmlnIGZvby5jaGVjayIgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrY29uZmlnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzZXMgY2FuIGJlIENhbWVsQ2FzZWQnICcKKwl0ZXN0X2NvbmZpZyBhbGlhcy5DYW1lbENhc2VkICJyZXYtcGFyc2UgSEVBRCIgJiYKKwlnaXQgQ2FtZWxDYXNlZCA+b3V0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyBkb2VzIG5vdCBzcGxpdCB2YWx1ZXMgb24gZXF1YWxzJyAnCisJZWNobyAidmFsdWUgd2l0aCA9IGluIGl0IiA+ZXhwZWN0ICYmCisJZ2l0IC1jIGNvcmUuZm9vPSJ2YWx1ZSB3aXRoID0gaW4gaXQiIGNvbmZpZyBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgZGllcyBvbiBib2d1cyBjb25maWcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29yZS5iYXJlPWZvbyByZXYtcGFyc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIGNvbXBsYWlucyBhYm91dCBlbXB0eSBrZXknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgIj1mb28iIHJldi1wYXJzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgY29tcGxhaW5zIGFib3V0IGVtcHR5IGtleSBhbmQgdmFsdWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgIiIgcmV2LXBhcnNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGdpdCAtYyBhcHBlbmRzIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGFsaWFzLnggIiFnaXQgLWMgeC50d289MiBjb25maWcgLS1nZXQtcmVnZXhwIF54XC4qIiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl4Lm9uZSAxCisJeC50d28gMgorCUVPRgorCWdpdCAtYyB4Lm9uZT0xIHggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCBvbmUgd2luczogdHdvIGxldmVsIHZhcnMnICcKKworCSMgc2VjLnZhciBhbmQgc2VjLlZBUiBhcmUgdGhlIHNhbWUgdmFyaWFibGUsIGFzIHRoZSBmaXJzdAorCSMgYW5kIHRoZSBsYXN0IGxldmVsIG9mIGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lIGlzCisJIyBjYXNlIGluc2Vuc2l0aXZlLgorCisJZWNobyBWQUwgPmV4cGVjdCAmJgorCisJZ2l0IC1jIHNlYy52YXI9dmFsIC1jIHNlYy5WQVI9VkFMIGNvbmZpZyAtLWdldCBzZWMudmFyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1jIFNFQy52YXI9dmFsIC1jIHNlYy52YXI9VkFMIGNvbmZpZyAtLWdldCBzZWMudmFyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgLWMgc2VjLnZhcj12YWwgLWMgc2VjLlZBUj1WQUwgY29uZmlnIC0tZ2V0IFNFQy52YXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLWMgU0VDLnZhcj12YWwgLWMgc2VjLnZhcj1WQUwgY29uZmlnIC0tZ2V0IHNlYy5WQVIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCBvbmUgd2luczogdGhyZWUgbGV2ZWwgdmFycycgJworCisJIyB2LmEuciBhbmQgdi5BLnIgYXJlIG5vdCB0aGUgc2FtZSB2YXJpYWJsZSwgYXMgdGhlIG1pZGRsZQorCSMgbGV2ZWwgb2YgYSB0aHJlZS1sZXZlbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWUgaXMKKwkjIGNhc2Ugc2Vuc2l0aXZlLgorCisJZWNobyB2YWwgPmV4cGVjdCAmJgorCWdpdCAtYyB2LmEucj12YWwgLWMgdi5BLnI9VkFMIGNvbmZpZyAtLWdldCB2LmEuciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCAtYyB2LmEucj12YWwgLWMgdi5BLnI9VkFMIGNvbmZpZyAtLWdldCBWLmEuUiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyB2LmEuciBhbmQgVi5hLlIgYXJlIHRoZSBzYW1lIHZhcmlhYmxlLCBhcyB0aGUgZmlyc3QKKwkjIGFuZCB0aGUgbGFzdCBsZXZlbCBvZiBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZSBpcworCSMgY2FzZSBpbnNlbnNpdGl2ZS4KKworCWVjaG8gVkFMID5leHBlY3QgJiYKKwlnaXQgLWMgdi5hLnI9dmFsIC1jIHYuYS5SPVZBTCBjb25maWcgLS1nZXQgdi5hLnIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLWMgdi5hLnI9dmFsIC1jIFYuYS5yPVZBTCBjb25maWcgLS1nZXQgdi5hLnIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLWMgdi5hLnI9dmFsIC1jIHYuYS5SPVZBTCBjb25maWcgLS1nZXQgVi5hLlIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLWMgdi5hLnI9dmFsIC1jIFYuYS5yPVZBTCBjb25maWcgLS1nZXQgVi5hLlIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2xkLWZhc2hpb25lZCBzZXR0aW5ncyBhcmUgY2FzZSBpbnNlbnNpdGl2ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgdGVzdENvbmZpZyB0ZXN0Q29uZmlnX2V4cGVjdCB0ZXN0Q29uZmlnX2FjdHVhbCIgJiYKKworCWNhdCA+dGVzdENvbmZpZ19hY3R1YWwgPDwtRU9GICYmCisJW1YuQV0KKwlyID0gdmFsdWUxCisJRU9GCisJcV90b190YWIgPnRlc3RDb25maWdfZXhwZWN0IDw8LUVPRiAmJgorCVtWLkFdCisJUXIgPSB2YWx1ZTIKKwlFT0YKKwlnaXQgY29uZmlnIC1mIHRlc3RDb25maWdfYWN0dWFsICJ2LmEuciIgdmFsdWUyICYmCisJdGVzdF9jbXAgdGVzdENvbmZpZ19leHBlY3QgdGVzdENvbmZpZ19hY3R1YWwgJiYKKworCWNhdCA+dGVzdENvbmZpZ19hY3R1YWwgPDwtRU9GICYmCisJW1YuQV0KKwlyID0gdmFsdWUxCisJRU9GCisJcV90b190YWIgPnRlc3RDb25maWdfZXhwZWN0IDw8LUVPRiAmJgorCVtWLkFdCisJUVIgPSB2YWx1ZTIKKwlFT0YKKwlnaXQgY29uZmlnIC1mIHRlc3RDb25maWdfYWN0dWFsICJWLmEuUiIgdmFsdWUyICYmCisJdGVzdF9jbXAgdGVzdENvbmZpZ19leHBlY3QgdGVzdENvbmZpZ19hY3R1YWwgJiYKKworCWNhdCA+dGVzdENvbmZpZ19hY3R1YWwgPDwtRU9GICYmCisJW1YuQV0KKwlyID0gdmFsdWUxCisJRU9GCisJcV90b190YWIgPnRlc3RDb25maWdfZXhwZWN0IDw8LUVPRiAmJgorCVtWLkFdCisJciA9IHZhbHVlMQorCVFyID0gdmFsdWUyCisJRU9GCisJZ2l0IGNvbmZpZyAtZiB0ZXN0Q29uZmlnX2FjdHVhbCAiVi5BLnIiIHZhbHVlMiAmJgorCXRlc3RfY21wIHRlc3RDb25maWdfZXhwZWN0IHRlc3RDb25maWdfYWN0dWFsICYmCisKKwljYXQgPnRlc3RDb25maWdfYWN0dWFsIDw8LUVPRiAmJgorCVtWLkFdCisJciA9IHZhbHVlMQorCUVPRgorCXFfdG9fdGFiID50ZXN0Q29uZmlnX2V4cGVjdCA8PC1FT0YgJiYKKwlbVi5BXQorCXIgPSB2YWx1ZTEKKwlRciA9IHZhbHVlMgorCUVPRgorCWdpdCBjb25maWcgLWYgdGVzdENvbmZpZ19hY3R1YWwgInYuQS5yIiB2YWx1ZTIgJiYKKwl0ZXN0X2NtcCB0ZXN0Q29uZmlnX2V4cGVjdCB0ZXN0Q29uZmlnX2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR0aW5nIGRpZmZlcmVudCBjYXNlIHNlbnNpdGl2ZSBzdWJzZWN0aW9ucyAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHRlc3RDb25maWcgdGVzdENvbmZpZ19leHBlY3QgdGVzdENvbmZpZ19hY3R1YWwiICYmCisKKwljYXQgPnRlc3RDb25maWdfYWN0dWFsIDw8LUVPRiAmJgorCVtWICJBIl0KKwlSID0gdjEKKwlbSyAiRSJdCisJWSA9IHYxCisJW2EgImIiXQorCWMgPSB2MQorCVtkICJlIl0KKwlmID0gdjEKKwlFT0YKKwlxX3RvX3RhYiA+dGVzdENvbmZpZ19leHBlY3QgPDwtRU9GICYmCisJW1YgIkEiXQorCVFyID0gdjIKKwlbSyAiRSJdCisJUXkgPSB2MgorCVthICJiIl0KKwlRYyA9IHYyCisJW2QgImUiXQorCWYgPSB2MQorCVtkICJFIl0KKwlRZiA9IHYyCisJRU9GCisJIyBleGFjdCBtYXRjaAorCWdpdCBjb25maWcgLWYgdGVzdENvbmZpZ19hY3R1YWwgYS5iLmMgdjIgJiYKKwkjIG1hdGNoIHNlY3Rpb24gYW5kIHN1YnNlY3Rpb24sIGtleSBpcyBjYXNlZCBkaWZmZXJlbnRseS4KKwlnaXQgY29uZmlnIC1mIHRlc3RDb25maWdfYWN0dWFsIEsuRS55IHYyICYmCisJIyBzZWN0aW9uIGFuZCBrZXkgYXJlIG1hdGNoZWQgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IHN1YnNlY3Rpb24gbmVlZHMKKwkjIHRvIG1hdGNoOyBXaGVuIHdyaXRpbmcgb3V0IG5ldyB2YWx1ZXMgb25seSB0aGUga2V5IGlzIGFkanVzdGVkCisJZ2l0IGNvbmZpZyAtZiB0ZXN0Q29uZmlnX2FjdHVhbCB2LkEuciB2MiAmJgorCSMgc3Vic2VjdGlvbiBpcyBub3QgbWF0Y2hlZDoKKwlnaXQgY29uZmlnIC1mIHRlc3RDb25maWdfYWN0dWFsIGQuRS5mIHYyICYmCisJdGVzdF9jbXAgdGVzdENvbmZpZ19leHBlY3QgdGVzdENvbmZpZ19hY3R1YWwKKycKKworZm9yIFZBUiBpbiBhIC5hIGEuIGEuMGIgYS4iYiBjIi4gYS4iYiBjIi4wZAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgLWMgJFZBUj1WQUwgcmVqZWN0cyBpbnZhbGlkICckVkFSJyIgJworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgIiRWQVI9VkFMIiBjb25maWcgLWwKKwknCitkb25lCisKK2ZvciBWQVIgaW4gYS5iIGEuImIgYyIuZAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgLWMgJFZBUj1WQUwgd29ya3Mgd2l0aCB2YWxpZCAnJFZBUiciICcKKwkJZWNobyBWQUwgPmV4cGVjdCAmJgorCQlnaXQgLWMgIiRWQVI9VkFMIiBjb25maWcgLS1nZXQgIiRWQVIiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIGlzIG5vdCBjb25mdXNlZCBieSBlbXB0eSBlbnZpcm9ubWVudCcgJworCUdJVF9DT05GSUdfUEFSQU1FVEVSUz0iIiBnaXQgLWMgeC5vbmU9MSBjb25maWcgLS1saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBib2d1cyBHSVRfQ09ORklHX1BBUkFNRVRFUlMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZW52Lm9uZSBvbmUKKwllbnYudHdvIHR3bworCUVPRgorCUdJVF9DT05GSUdfUEFSQU1FVEVSUz0iJHtTUX1lbnYub25lPW9uZSR7U1F9ICR7U1F9ZW52LnR3bz10d28ke1NRfSIgXAorCQlnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAiZW52LioiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwllbnYub25lIG9uZSR7U1F9CisJZW52LnR3byB0d28KKwlFT0YKKwlHSVRfQ09ORklHX1BBUkFNRVRFUlM9IiR7U1F9ZW52Lm9uZT1vbmUke1NRfVxcJFNRJFNRJFNRICR7U1F9ZW52LnR3bz10d28ke1NRfSIgXAorCQlnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAiZW52LioiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBlbnYgXAorCQlHSVRfQ09ORklHX1BBUkFNRVRFUlM9IiR7U1F9ZW52Lm9uZT1vbmUke1NRfVxcJFNRICR7U1F9ZW52LnR3bz10d28ke1NRfSIgXAorCQlnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAiZW52LioiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgLS1lZGl0IHdvcmtzJyAnCisJZ2l0IGNvbmZpZyAtZiB0bXAgdGVzdC52YWx1ZSBubyAmJgorCWVjaG8gdGVzdC52YWx1ZT15ZXMgPmV4cGVjdCAmJgorCUdJVF9FRElUT1I9ImVjaG8gW3Rlc3RddmFsdWU9eWVzID4iIGdpdCBjb25maWcgLWYgdG1wIC0tZWRpdCAmJgorCWdpdCBjb25maWcgLWYgdG1wIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIC0tZWRpdCByZXNwZWN0cyBjb3JlLmVkaXRvcicgJworCWdpdCBjb25maWcgLWYgdG1wIHRlc3QudmFsdWUgbm8gJiYKKwllY2hvIHRlc3QudmFsdWU9eWVzID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLmVkaXRvciAiZWNobyBbdGVzdF12YWx1ZT15ZXMgPiIgJiYKKwlnaXQgY29uZmlnIC1mIHRtcCAtLWVkaXQgJiYKKwlnaXQgY29uZmlnIC1mIHRtcCAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBtYWxmb3JtZWQgY29uZmlndXJhdGlvbiBmaWxlcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZiBvbiBzeW50YXggZXJyb3InICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwkjIGJyb2tlbiBzZWN0aW9uIGxpbmUKKwlbc2VjdGlvbl0KKwlrZXkgZ2FyYmFnZQorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiIGxpbmUgMyAiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmYgb24gaW5jb21wbGV0ZSBzZWN0aW9uIGhlYWRlcicgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCSMgYnJva2VuIHNlY3Rpb24gbGluZQorCVtzZWN0aW9uCisJa2V5ID0gdmFsdWUKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IHNlY3Rpb24ua2V5ID5hY3R1YWwgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIiBsaW5lIDIgIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJmIG9uIGluY29tcGxldGUgc3RyaW5nJyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJIyBicm9rZW4gc2VjdGlvbiBsaW5lCisJW3NlY3Rpb25dCisJa2V5ID0gInZhbHVlIHN0cmluZworCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiIGxpbmUgMyAiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybG1hdGNoJyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2h0dHBdCisJCXNzbFZlcmlmeQorCVtodHRwICJodHRwczovL3dlYWsuZXhhbXBsZS5jb20iXQorCQlzc2xWZXJpZnkgPSBmYWxzZQorCQljb29raWVGaWxlID0gL3RtcC9jb29raWUudHh0CisJRU9GCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtdXJsbWF0Y2ggZG9lc250LmV4aXN0IGh0dHBzOi8vZ29vZC5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCAtLWdldC11cmxtYXRjaCBodHRwLlNTTHZlcmlmeSBodHRwczovL2dvb2QuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gZmFsc2UgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXVybG1hdGNoIGh0dHAuc3NsdmVyaWZ5IGh0dHBzOi8vd2Vhay5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJeworCQllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL2Nvb2tpZS50eHQgJiYKKwkJZWNobyBodHRwLnNzbHZlcmlmeSBmYWxzZQorCX0gPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL3dlYWsuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsbWF0Y2ggZmF2b3JzIG1vcmUgc3BlY2lmaWMgVVJMcycgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtodHRwICJodHRwczovL2V4YW1wbGUuY29tLyJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL3Jvb3QudHh0CisJW2h0dHAgImh0dHBzOi8vZXhhbXBsZS5jb20vc3ViZGlyZWN0b3J5Il0KKwkJY29va2llRmlsZSA9IC90bXAvc3ViZGlyZWN0b3J5LnR4dAorCVtodHRwICJodHRwczovL3VzZXJAZXhhbXBsZS5jb20vIl0KKwkJY29va2llRmlsZSA9IC90bXAvdXNlci50eHQKKwlbaHR0cCAiaHR0cHM6Ly9hdmVyeWxvbmd1c2VyQGV4YW1wbGUuY29tLyJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL2F2ZXJ5bG9uZ3VzZXIudHh0CisJW2h0dHAgImh0dHBzOi8vcHJlY2VkaW5nLmV4YW1wbGUuY29tIl0KKwkJY29va2llRmlsZSA9IC90bXAvcHJlY2VkaW5nLnR4dAorCVtodHRwICJodHRwczovLyouZXhhbXBsZS5jb20iXQorCQljb29raWVGaWxlID0gL3RtcC93aWxkY2FyZC50eHQKKwlbaHR0cCAiaHR0cHM6Ly8qLmV4YW1wbGUuY29tL3dpbGRjYXJkd2l0aHN1YmRvbWFpbiJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL3dpbGRjYXJkd2l0aHN1YmRvbWFpbi50eHQKKwlbaHR0cCAiaHR0cHM6Ly8qLmV4YW1wbGUuKiJdCisJCWNvb2tpZUZpbGUgPSAvdG1wL211bHRpd2lsZGNhcmQudHh0CisJW2h0dHAgImh0dHBzOi8vdHJhaWxpbmcuZXhhbXBsZS5jb20iXQorCQljb29raWVGaWxlID0gL3RtcC90cmFpbGluZy50eHQKKwlbaHR0cCAiaHR0cHM6Ly91c2VyQCouZXhhbXBsZS5jb20vIl0KKwkJY29va2llRmlsZSA9IC90bXAvd2lsZGNhcmR3aXRodXNlci50eHQKKwlbaHR0cCAiaHR0cHM6Ly9zdWIuZXhhbXBsZS5jb20vIl0KKwkJY29va2llRmlsZSA9IC90bXAvc3ViLnR4dAorCUVPRgorCisJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC9yb290LnR4dCA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCBIVFRQIGh0dHBzOi8vZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvc3ViZGlyZWN0b3J5LnR4dCA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCBIVFRQIGh0dHBzOi8vZXhhbXBsZS5jb20vc3ViZGlyZWN0b3J5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL3N1YmRpcmVjdG9yeS50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL2V4YW1wbGUuY29tL3N1YmRpcmVjdG9yeS9uZXN0ZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvdXNlci50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL3VzZXJAZXhhbXBsZS5jb20vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL3N1YmRpcmVjdG9yeS50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL2F2ZXJ5bG9uZ3VzZXJAZXhhbXBsZS5jb20vc3ViZGlyZWN0b3J5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL3ByZWNlZGluZy50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL3ByZWNlZGluZy5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC93aWxkY2FyZC50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL3dpbGRjYXJkLmV4YW1wbGUuY29tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvIGh0dHAuY29va2llZmlsZSAvdG1wL3N1Yi50eHQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggSFRUUCBodHRwczovL3N1Yi5leGFtcGxlLmNvbS93aWxkY2FyZHdpdGhzdWJkb21haW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvdHJhaWxpbmcudHh0ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly90cmFpbGluZy5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC9zdWIudHh0ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIEhUVFAgaHR0cHM6Ly91c2VyQHN1Yi5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBodHRwLmNvb2tpZWZpbGUgL3RtcC9tdWx0aXdpbGRjYXJkLnR4dCA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCBIVFRQIGh0dHBzOi8vd2lsZGNhcmQuZXhhbXBsZS5vcmcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsbWF0Y2ggd2l0aCB3aWxkY2FyZCcgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtodHRwXQorCQlzc2xWZXJpZnkKKwlbaHR0cCAiaHR0cHM6Ly8qLmV4YW1wbGUuY29tIl0KKwkJc3NsVmVyaWZ5ID0gZmFsc2UKKwkJY29va2llRmlsZSA9IC90bXAvY29va2llLnR4dAorCUVPRgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXVybG1hdGNoIGRvZXNudC5leGlzdCBodHRwczovL2dvb2QuZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCWVjaG8gdHJ1ZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5TU0x2ZXJpZnkgaHR0cHM6Ly9leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCAtLWdldC11cmxtYXRjaCBodHRwLlNTTHZlcmlmeSBodHRwczovL2dvb2QtZXhhbXBsZS5jb20gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gdHJ1ZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5zc2x2ZXJpZnkgaHR0cHM6Ly9kZWVwLm5lc3RlZC5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBmYWxzZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5zc2x2ZXJpZnkgaHR0cHM6Ly9nb29kLmV4YW1wbGUuY29tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl7CisJCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvY29va2llLnR4dCAmJgorCQllY2hvIGh0dHAuc3NsdmVyaWZ5IGZhbHNlCisJfSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCBIVFRQIGh0dHBzOi8vZ29vZC5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBodHRwLnNzbHZlcmlmeSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCBIVFRQIGh0dHBzOi8vbW9yZS5leGFtcGxlLmNvbS5hdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIGdvb2Qgc2VjdGlvbiBoeWdpZW5lCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVuc2V0IGxhc3Qga2V5IHJlbW92ZXMgc2VjdGlvbiAoZXhjZXB0IGlmIGNvbW1lbnRlZCknICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwkjIHNvbWUgZ2VuZXJpYyBjb21tZW50IG9uIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXRzZWxmCisJIyBhIGNvbW1lbnQgc3BlY2lmaWMgdG8gdGhpcyAic2VjdGlvbiIgc2VjdGlvbi4KKwlbc2VjdGlvbl0KKwkjIHNvbWUgaW50ZXJ2ZW5pbmcgbGluZXMKKwkjIHRoYXQgc2hvdWxkIGFsc28gYmUgZHJvcHBlZAorCisJa2V5ID0gdmFsdWUKKwkjIHBsZWFzZSBiZSBjYXJlZnVsIHdoZW4geW91IHVwZGF0ZSB0aGUgYWJvdmUgdmFyaWFibGUKKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkjIHNvbWUgZ2VuZXJpYyBjb21tZW50IG9uIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXRzZWxmCisJIyBhIGNvbW1lbnQgc3BlY2lmaWMgdG8gdGhpcyAic2VjdGlvbiIgc2VjdGlvbi4KKwlbc2VjdGlvbl0KKwkjIHNvbWUgaW50ZXJ2ZW5pbmcgbGluZXMKKwkjIHRoYXQgc2hvdWxkIGFsc28gYmUgZHJvcHBlZAorCisJIyBwbGVhc2UgYmUgY2FyZWZ1bCB3aGVuIHlvdSB1cGRhdGUgdGhlIGFib3ZlIHZhcmlhYmxlCisJRU9GCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VjdGlvbi5rZXkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcgJiYKKworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtzZWN0aW9uXQorCWtleSA9IHZhbHVlCisJW25leHQtc2VjdGlvbl0KKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlbbmV4dC1zZWN0aW9uXQorCUVPRgorCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHNlY3Rpb24ua2V5ICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnICYmCisKKwlxX3RvX3RhYiA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtvbmVdCisJUWtleSA9ICJtdWx0aWxpbmUgXAorCVFRIyB3aXRoIGNvbW1lbnQiCisJW3R3b10KKwlrZXkgPSB0cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHR3by5rZXkgJiYKKwkhIGdyZXAgdHdvIC5naXQvY29uZmlnICYmCisKKwlxX3RvX3RhYiA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtvbmVdCisJUWtleSA9ICJtdWx0aWxpbmUgXAorCVFRIyB3aXRoIGNvbW1lbnQiCisJW29uZV0KKwlrZXkgPSB0cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBvbmUua2V5ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCAuZ2l0L2NvbmZpZyAmJgorCisJcV90b190YWIgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbb25lXQorCVFrZXkgPSB0cnVlCisJUSMgYSBjb21tZW50IG5vdCBhdCB0aGUgc3RhcnQKKwlbdHdvXQorCVFrZXkgPSB0cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHR3by5rZXkgJiYKKwlncmVwIHR3byAuZ2l0L2NvbmZpZyAmJgorCisJcV90b190YWIgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbb25lXQorCVFrZXkgPSBub3QgW3R3byAic3Vic2VjdGlvbiJdCisJW3R3byAic3Vic2VjdGlvbiJdCisJW3R3byAic3Vic2VjdGlvbiJdCisJUWtleSA9IHRydWUKKwlbVFdPICJzdWJzZWN0aW9uIl0KKwlbb25lXQorCUVPRgorCWdpdCBjb25maWcgLS11bnNldCB0d28uc3Vic2VjdGlvbi5rZXkgJiYKKwl0ZXN0ICJub3QgW3R3byBzdWJzZWN0aW9uXSIgPSAiJChnaXQgY29uZmlnIG9uZS5rZXkpIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS11bnNldC1hbGwgcmVtb3ZlcyBzZWN0aW9uIGlmIGVtcHR5ICYgdW5jb21tZW50ZWQnICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbc2VjdGlvbl0KKwlrZXkgPSB2YWx1ZTEKKwlrZXkgPSB2YWx1ZTIKKwlFT0YKKworCWdpdCBjb25maWcgLS11bnNldC1hbGwgc2VjdGlvbi5rZXkgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGluZyBhIGtleSBpbnRvIGFuIGVtcHR5IHNlY3Rpb24gcmV1c2VzIGhlYWRlcicgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtzZWN0aW9uXQorCUVPRgorCisJcV90b190YWIgPmV4cGVjdCA8PC1cRU9GICYmCisJW3NlY3Rpb25dCisJUWtleSA9IHZhbHVlCisJRU9GCisKKwlnaXQgY29uZmlnIHNlY3Rpb24ua2V5IHZhbHVlICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFBFUkwgJ3ByZXNlcnZlcyBleGlzdGluZyBwZXJtaXNzaW9ucycgJworCWNobW9kIDA2MDAgLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIGltYXAucGFzcyBIdW50ZXIyICYmCisJcGVybCAtZSBcCisJICAiZGllIHEoYmFkc2V0KSBpZiAoKHN0YXQocSguZ2l0L2NvbmZpZykpKVsyXSAmIDA3Nzc3KSAhPSAwNjAwIiAmJgorCWdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBpbWFwIHBvcCAmJgorCXBlcmwgLWUgXAorCSAgImRpZSBxKGJhZHJlbmFtZSkgaWYgKChzdGF0KHEoLmdpdC9jb25maWcpKSlbMl0gJiAwNzc3NykgIT0gMDYwMCIKKycKKworISB0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXIHx8CitIT01FPSIkKHB3ZCkiICMgY29udmVydCB0byBXaW5kb3dzIHBhdGgKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIC0tc2hvdy1vcmlnaW4gdGVzdHMnICcKKwlJTkNMVURFX0RJUj0iJEhPTUUvaW5jbHVkZSIgJiYKKwlta2RpciAtcCAiJElOQ0xVREVfRElSIiAmJgorCWNhdCA+IiRJTkNMVURFX0RJUiIvYWJzb2x1dGUuaW5jbHVkZSA8PC1cRU9GICYmCisJW3VzZXJdCisJCWFic29sdXRlID0gaW5jbHVkZQorCUVPRgorCWNhdCA+IiRJTkNMVURFX0RJUiIvcmVsYXRpdmUuaW5jbHVkZSA8PC1cRU9GICYmCisJW3VzZXJdCisJCXJlbGF0aXZlID0gaW5jbHVkZQorCUVPRgorCWNhdCA+IiRIT01FIi8uZ2l0Y29uZmlnIDw8LUVPRiAmJgorCVt1c2VyXQorCQlnbG9iYWwgPSB0cnVlCisJCW92ZXJyaWRlID0gZ2xvYmFsCisJW2luY2x1ZGVdCisJCXBhdGggPSAiJElOQ0xVREVfRElSL2Fic29sdXRlLmluY2x1ZGUiCisJRU9GCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GCisJW3VzZXJdCisJCWxvY2FsID0gdHJ1ZQorCQlvdmVycmlkZSA9IGxvY2FsCisJW2luY2x1ZGVdCisJCXBhdGggPSAuLi9pbmNsdWRlL3JlbGF0aXZlLmluY2x1ZGUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW9yaWdpbiB3aXRoIC0tbGlzdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZpbGU6JEhPTUUvLmdpdGNvbmZpZwl1c2VyLmdsb2JhbD10cnVlCisJZmlsZTokSE9NRS8uZ2l0Y29uZmlnCXVzZXIub3ZlcnJpZGU9Z2xvYmFsCisJZmlsZTokSE9NRS8uZ2l0Y29uZmlnCWluY2x1ZGUucGF0aD0kSU5DTFVERV9ESVIvYWJzb2x1dGUuaW5jbHVkZQorCWZpbGU6JElOQ0xVREVfRElSL2Fic29sdXRlLmluY2x1ZGUJdXNlci5hYnNvbHV0ZT1pbmNsdWRlCisJZmlsZTouZ2l0L2NvbmZpZwl1c2VyLmxvY2FsPXRydWUKKwlmaWxlOi5naXQvY29uZmlnCXVzZXIub3ZlcnJpZGU9bG9jYWwKKwlmaWxlOi5naXQvY29uZmlnCWluY2x1ZGUucGF0aD0uLi9pbmNsdWRlL3JlbGF0aXZlLmluY2x1ZGUKKwlmaWxlOi5naXQvLi4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlCXVzZXIucmVsYXRpdmU9aW5jbHVkZQorCWNvbW1hbmQgbGluZToJdXNlci5jbWRsaW5lPXRydWUKKwlFT0YKKwlnaXQgLWMgdXNlci5jbWRsaW5lPXRydWUgY29uZmlnIC0tbGlzdCAtLXNob3ctb3JpZ2luID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1vcmlnaW4gd2l0aCAtLWxpc3QgLS1udWxsJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZmlsZTokSE9NRS8uZ2l0Y29uZmlnUXVzZXIuZ2xvYmFsCisJdHJ1ZVFmaWxlOiRIT01FLy5naXRjb25maWdRdXNlci5vdmVycmlkZQorCWdsb2JhbFFmaWxlOiRIT01FLy5naXRjb25maWdRaW5jbHVkZS5wYXRoCisJJElOQ0xVREVfRElSL2Fic29sdXRlLmluY2x1ZGVRZmlsZTokSU5DTFVERV9ESVIvYWJzb2x1dGUuaW5jbHVkZVF1c2VyLmFic29sdXRlCisJaW5jbHVkZVFmaWxlOi5naXQvY29uZmlnUXVzZXIubG9jYWwKKwl0cnVlUWZpbGU6LmdpdC9jb25maWdRdXNlci5vdmVycmlkZQorCWxvY2FsUWZpbGU6LmdpdC9jb25maWdRaW5jbHVkZS5wYXRoCisJLi4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlUWZpbGU6LmdpdC8uLi9pbmNsdWRlL3JlbGF0aXZlLmluY2x1ZGVRdXNlci5yZWxhdGl2ZQorCWluY2x1ZGVRY29tbWFuZCBsaW5lOlF1c2VyLmNtZGxpbmUKKwl0cnVlUQorCUVPRgorCWdpdCAtYyB1c2VyLmNtZGxpbmU9dHJ1ZSBjb25maWcgLS1udWxsIC0tbGlzdCAtLXNob3ctb3JpZ2luID5vdXRwdXQucmF3ICYmCisJbnVsX3RvX3EgPG91dHB1dC5yYXcgPm91dHB1dCAmJgorCSMgVGhlIGhlcmUtZG9jIGFib3ZlIGFkZHMgYSBuZXdsaW5lIHRoYXQgdGhlIC0tbnVsbCBvdXRwdXQgd291bGQgbm90CisJIyBpbmNsdWRlLiBBZGQgaXQgaGVyZSB0byBtYWtlIHRoZSB0d28gY29tcGFyYWJsZS4KKwllY2hvID4+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctb3JpZ2luIHdpdGggc2luZ2xlIGZpbGUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZTouZ2l0L2NvbmZpZwl1c2VyLmxvY2FsPXRydWUKKwlmaWxlOi5naXQvY29uZmlnCXVzZXIub3ZlcnJpZGU9bG9jYWwKKwlmaWxlOi5naXQvY29uZmlnCWluY2x1ZGUucGF0aD0uLi9pbmNsdWRlL3JlbGF0aXZlLmluY2x1ZGUKKwlFT0YKKwlnaXQgY29uZmlnIC0tbG9jYWwgLS1saXN0IC0tc2hvdy1vcmlnaW4gPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW9yaWdpbiB3aXRoIC0tZ2V0LXJlZ2V4cCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZpbGU6JEhPTUUvLmdpdGNvbmZpZwl1c2VyLmdsb2JhbCB0cnVlCisJZmlsZTouZ2l0L2NvbmZpZwl1c2VyLmxvY2FsIHRydWUKKwlFT0YKKwlnaXQgY29uZmlnIC0tc2hvdy1vcmlnaW4gLS1nZXQtcmVnZXhwICJ1c2VyXC5bZ3xsXS4qIiA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctb3JpZ2luIGdldHRpbmcgYSBzaW5nbGUga2V5JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGU6LmdpdC9jb25maWcJbG9jYWwKKwlFT0YKKwlnaXQgY29uZmlnIC0tc2hvdy1vcmlnaW4gdXNlci5vdmVycmlkZSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgY3VzdG9tIGNvbmZpZyBmaWxlJyAnCisJQ1VTVE9NX0NPTkZJR19GSUxFPSJjdXN0b20uY29uZiIgJiYKKwljYXQgPiIkQ1VTVE9NX0NPTkZJR19GSUxFIiA8PC1cRU9GCisJW3VzZXJdCisJCWN1c3RvbSA9IHRydWUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3NldCB1cCBjdXN0b20gY29uZmlnIGZpbGUgd2l0aCBzcGVjaWFsIG5hbWUgY2hhcmFjdGVycycgJworCVdFSVJETFlfTkFNRURfRklMRT0iZmlsZVwiIChkcSkgYW5kIHNwYWNlcy5jb25mIiAmJgorCWNwICIkQ1VTVE9NX0NPTkZJR19GSUxFIiAiJFdFSVJETFlfTkFNRURfRklMRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJy0tc2hvdy1vcmlnaW4gZXNjYXBlIHNwZWNpYWwgZmlsZSBuYW1lIGNoYXJhY3RlcnMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZToiZmlsZVwiIChkcSkgYW5kIHNwYWNlcy5jb25mIgl1c2VyLmN1c3RvbT10cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLWZpbGUgIiRXRUlSRExZX05BTUVEX0ZJTEUiIC0tc2hvdy1vcmlnaW4gLS1saXN0ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1vcmlnaW4gc3RkaW4nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJc3RhbmRhcmQgaW5wdXQ6CXVzZXIuY3VzdG9tPXRydWUKKwlFT0YKKwlnaXQgY29uZmlnIC0tZmlsZSAtIC0tc2hvdy1vcmlnaW4gLS1saXN0IDwiJENVU1RPTV9DT05GSUdfRklMRSIgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW9yaWdpbiBzdGRpbiB3aXRoIGZpbGUgaW5jbHVkZScgJworCWNhdCA+IiRJTkNMVURFX0RJUiIvc3RkaW4uaW5jbHVkZSA8PC1FT0YgJiYKKwlbdXNlcl0KKwkJc3RkaW4gPSBpbmNsdWRlCisJRU9GCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZmlsZTokSU5DTFVERV9ESVIvc3RkaW4uaW5jbHVkZQlpbmNsdWRlCisJRU9GCisJZWNobyAiW2luY2x1ZGVdcGF0aD1cIiRJTkNMVURFX0RJUlwiL3N0ZGluLmluY2x1ZGUiIHwKKwlnaXQgY29uZmlnIC0tc2hvdy1vcmlnaW4gLS1pbmNsdWRlcyAtLWZpbGUgLSB1c2VyLnN0ZGluID5vdXRwdXQgJiYKKworCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW9yaWdpbiBibG9iJyAnCisJYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAtdyAiJENVU1RPTV9DT05GSUdfRklMRSIpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYmxvYjokYmxvYgl1c2VyLmN1c3RvbT10cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLWJsb2I9JGJsb2IgLS1zaG93LW9yaWdpbiAtLWxpc3QgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW9yaWdpbiBibG9iIHJlZicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlibG9iOm1hc3RlcjpjdXN0b20uY29uZgl1c2VyLmN1c3RvbT10cnVlCisJRU9GCisJZ2l0IGFkZCAiJENVU1RPTV9DT05GSUdfRklMRSIgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgY29uZmlnIGZpbGUiICYmCisJZ2l0IGNvbmZpZyAtLWJsb2I9bWFzdGVyOiIkQ1VTVE9NX0NPTkZJR19GSUxFIiAtLXNob3ctb3JpZ2luIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctc2NvcGUgd2l0aCAtLWxpc3QnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlnbG9iYWwJdXNlci5nbG9iYWw9dHJ1ZQorCWdsb2JhbAl1c2VyLm92ZXJyaWRlPWdsb2JhbAorCWdsb2JhbAlpbmNsdWRlLnBhdGg9JElOQ0xVREVfRElSL2Fic29sdXRlLmluY2x1ZGUKKwlnbG9iYWwJdXNlci5hYnNvbHV0ZT1pbmNsdWRlCisJbG9jYWwJdXNlci5sb2NhbD10cnVlCisJbG9jYWwJdXNlci5vdmVycmlkZT1sb2NhbAorCWxvY2FsCWluY2x1ZGUucGF0aD0uLi9pbmNsdWRlL3JlbGF0aXZlLmluY2x1ZGUKKwlsb2NhbAl1c2VyLnJlbGF0aXZlPWluY2x1ZGUKKwljb21tYW5kCXVzZXIuY21kbGluZT10cnVlCisJRU9GCisJZ2l0IC1jIHVzZXIuY21kbGluZT10cnVlIGNvbmZpZyAtLWxpc3QgLS1zaG93LXNjb3BlID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICctLXNob3ctc2NvcGUgd2l0aCAtLWJsb2InICcKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13ICIkQ1VTVE9NX0NPTkZJR19GSUxFIikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21tYW5kCXVzZXIuY3VzdG9tPXRydWUKKwlFT0YKKwlnaXQgY29uZmlnIC0tYmxvYj0kYmxvYiAtLXNob3ctc2NvcGUgLS1saXN0ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1zY29wZSB3aXRoIC0tbG9jYWwnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbG9jYWwJdXNlci5sb2NhbD10cnVlCisJbG9jYWwJdXNlci5vdmVycmlkZT1sb2NhbAorCWxvY2FsCWluY2x1ZGUucGF0aD0uLi9pbmNsdWRlL3JlbGF0aXZlLmluY2x1ZGUKKwlFT0YKKwlnaXQgY29uZmlnIC0tbG9jYWwgLS1saXN0IC0tc2hvdy1zY29wZSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctc2NvcGUgZ2V0dGluZyBhIHNpbmdsZSB2YWx1ZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlsb2NhbAl0cnVlCisJRU9GCisJZ2l0IGNvbmZpZyAtLXNob3ctc2NvcGUgLS1nZXQgdXNlci5sb2NhbCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctc2NvcGUgd2l0aCAtLXNob3ctb3JpZ2luJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZ2xvYmFsCWZpbGU6JEhPTUUvLmdpdGNvbmZpZwl1c2VyLmdsb2JhbD10cnVlCisJZ2xvYmFsCWZpbGU6JEhPTUUvLmdpdGNvbmZpZwl1c2VyLm92ZXJyaWRlPWdsb2JhbAorCWdsb2JhbAlmaWxlOiRIT01FLy5naXRjb25maWcJaW5jbHVkZS5wYXRoPSRJTkNMVURFX0RJUi9hYnNvbHV0ZS5pbmNsdWRlCisJZ2xvYmFsCWZpbGU6JElOQ0xVREVfRElSL2Fic29sdXRlLmluY2x1ZGUJdXNlci5hYnNvbHV0ZT1pbmNsdWRlCisJbG9jYWwJZmlsZTouZ2l0L2NvbmZpZwl1c2VyLmxvY2FsPXRydWUKKwlsb2NhbAlmaWxlOi5naXQvY29uZmlnCXVzZXIub3ZlcnJpZGU9bG9jYWwKKwlsb2NhbAlmaWxlOi5naXQvY29uZmlnCWluY2x1ZGUucGF0aD0uLi9pbmNsdWRlL3JlbGF0aXZlLmluY2x1ZGUKKwlsb2NhbAlmaWxlOi5naXQvLi4vaW5jbHVkZS9yZWxhdGl2ZS5pbmNsdWRlCXVzZXIucmVsYXRpdmU9aW5jbHVkZQorCWNvbW1hbmQJY29tbWFuZCBsaW5lOgl1c2VyLmNtZGxpbmU9dHJ1ZQorCUVPRgorCWdpdCAtYyB1c2VyLmNtZGxpbmU9dHJ1ZSBjb25maWcgLS1saXN0IC0tc2hvdy1vcmlnaW4gLS1zaG93LXNjb3BlID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbG9jYWwgcmVxdWlyZXMgYSByZXBvJyAnCisJIyB3ZSBleHBlY3QgMTI4IHRvIGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBzaW1wbHkKKwkjIGZhaWwgdG8gZmluZCBhbnl0aGluZyBhbmQgcmV0dXJuIGNvZGUgIjEiCisJdGVzdF9leHBlY3RfY29kZSAxMjggbm9uZ2l0IGdpdCBjb25maWcgLS1sb2NhbCBmb28uYmFyCisnCisKK2NhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorW2NvcmVdCitmb28gPSB0cnVlCitudW1iZXIgPSAxMAorYmlnID0gMU0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZGVudGljYWwgbW9kZXJuIC0tdHlwZSBzcGVjaWZpZXJzIGFyZSBhbGxvd2VkJyAnCisJdGVzdF9jbXBfY29uZmlnIDEwNDg1NzYgLS10eXBlPWludCAtLXR5cGU9aW50IGNvcmUuYmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lkZW50aWNhbCBsZWdhY3kgLS10eXBlIHNwZWNpZmllcnMgYXJlIGFsbG93ZWQnICcKKwl0ZXN0X2NtcF9jb25maWcgMTA0ODU3NiAtLWludCAtLWludCBjb3JlLmJpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZGVudGljYWwgbWl4ZWQgLS10eXBlIHNwZWNpZmllcnMgYXJlIGFsbG93ZWQnICcKKwl0ZXN0X2NtcF9jb25maWcgMTA0ODU3NiAtLWludCAtLXR5cGU9aW50IGNvcmUuYmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1pZGVudGljYWwgbW9kZXJuIC0tdHlwZSBzcGVjaWZpZXJzIGFyZSBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS10eXBlPWludCAtLXR5cGU9Ym9vbCBjb3JlLmJpZyAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAib25seSBvbmUgdHlwZSBhdCBhIHRpbWUiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1pZGVudGljYWwgbGVnYWN5IC0tdHlwZSBzcGVjaWZpZXJzIGFyZSBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1pbnQgLS1ib29sIGNvcmUuYmlnIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWlkZW50aWNhbCBtaXhlZCAtLXR5cGUgc3BlY2lmaWVycyBhcmUgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tdHlwZT1pbnQgLS1ib29sIGNvcmUuYmlnIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJvbmx5IG9uZSB0eXBlIGF0IGEgdGltZSIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS10eXBlIGFsbG93cyB2YWxpZCB0eXBlIHNwZWNpZmllcnMnICcKKwl0ZXN0X2NtcF9jb25maWcgdHJ1ZSAgLS10eXBlPWJvb2wgY29yZS5mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby10eXBlIHVuc2V0cyB0eXBlIHNwZWNpZmllcnMnICcKKwl0ZXN0X2NtcF9jb25maWcgMTAgLS10eXBlPWJvb2wgLS1uby10eXBlIGNvcmUubnVtYmVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2V0IHR5cGUgc3BlY2lmaWVycyBtYXkgYmUgcmVzZXQgdG8gY29uZmxpY3Rpbmcgb25lcycgJworCXRlc3RfY21wX2NvbmZpZyAxMDQ4NTc2IC0tdHlwZT1ib29sIC0tbm8tdHlwZSAtLXR5cGU9aW50IGNvcmUuYmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tdHlwZSByZWplY3RzIHVua25vd24gc3BlY2lmaWVycycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS10eXBlPW5vbnNlbnNlIGNvcmUuZm9vIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1bnJlY29nbml6ZWQgLS10eXBlIGFyZ3VtZW50IiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlcGxhY2UtYWxsIGRvZXMgbm90IGludmVudCBuZXdsaW5lcycgJworCXFfdG9fdGFiID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2FiY11rZXkKKwlRa2VlcFNlY3Rpb24KKwlbeHl6XQorCVFrZXkgPSAxCisJW2FiY10KKwlRa2V5ID0gYQorCUVPRgorCXFfdG9fdGFiID5leHBlY3QgPDwtXEVPRiAmJgorCVthYmNdCisJUWtlZXBTZWN0aW9uCisJW3h5el0KKwlRa2V5ID0gMQorCVthYmNdCisJUWtleSA9IGIKKwlFT0YKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgYWJjLmtleSBiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMS1zaGFyZWQtcmVwby5zaCBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmRjODUzZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKQEAgLTAsMCArMSwyMTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHNoYXJlZCByZXBvc2l0b3J5IGluaXRpYWxpemF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBSZW1vdmUgYSBkZWZhdWx0IEFDTCBmcm9tIHRoZSB0ZXN0IGRpciBpZiBwb3NzaWJsZS4KK3NldGZhY2wgLWsgLiAyPi9kZXYvbnVsbAorCisjIFVzZXIgbXVzdCBoYXZlIHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIHJlcG8gLT4gZmFpbHVyZSBvbiAtLXNoYXJlZD0wNDAwCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQgPSAwNDAwIChmYXVsdHkgcGVybWlzc2lvbiB1LXcpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3ViIiAmJgorCW1rZGlyIHN1YiAmJiAoCisJCWNkIHN1YiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgaW5pdCAtLXNoYXJlZD0wNDAwCisJKQorJworCitmb3IgdSBpbiAwMDIgMDIyCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICJzaGFyZWQ9MSBkb2VzIG5vdCBjbGVhciBiaXRzIHByZXNldCBieSB1bWFzayAkdSIgJworCQlta2RpciBzdWIgJiYgKAorCQkJY2Qgc3ViICYmCisJCQl1bWFzayAkdSAmJgorCQkJZ2l0IGluaXQgLS1zaGFyZWQ9MSAmJgorCQkJdGVzdCAxID0gIiQoZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkpIgorCQkpICYmCisJCWFjdHVhbD0kKGxzIC1sIHN1Yi8uZ2l0L0hFQUQpICYmCisJCWNhc2UgIiRhY3R1YWwiIGluCisJCS1ydy1ydy1yLS0qKQorCQkJOiBoYXBweQorCQkJOzsKKwkJKikKKwkJCWVjaG8gT29wcywgLmdpdC9IRUFEIGlzIG5vdCAwNjY0IGJ1dCAkYWN0dWFsCisJCQlmYWxzZQorCQkJOzsKKwkJZXNhYworCScKKwlybSAtcmYgc3ViCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZD1hbGwnICcKKwlta2RpciBzdWIgJiYKKwljZCBzdWIgJiYKKwlnaXQgaW5pdCAtLXNoYXJlZD1hbGwgJiYKKwl0ZXN0IDIgPSAkKGdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAndXBkYXRlLXNlcnZlci1pbmZvIGhvbm9ycyBjb3JlLnNoYXJlZFJlcG9zaXRvcnknICcKKwk6ID4gYTEgJiYKKwlnaXQgYWRkIGExICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBhMSAmJgorCXVtYXNrIDAyNzcgJiYKKwlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJYWN0dWFsPSIkKGxzIC1sIC5naXQvaW5mby9yZWZzKSIgJiYKKwljYXNlICIkYWN0dWFsIiBpbgorCS1yLS1yLS1yLS0qKQorCQk6IGhhcHB5CisJCTs7CisJKikKKwkJZWNobyBPb3BzLCAuZ2l0L2luZm8vcmVmcyBpcyBub3QgMDQ0NAorCQlmYWxzZQorCQk7OworCWVzYWMKKycKKworZm9yIHUgaW4JMDY2MDpydy1ydy0tLS0gXAorCQkwNjQwOnJ3LXItLS0tLSBcCisJCTA2MDA6cnctLS0tLS0tIFwKKwkJMDY2Njpydy1ydy1ydy0gXAorCQkwNjY0OnJ3LXJ3LXItLQorZG8KKwl4PSQoZXhwciAiJHUiIDogIi4qOlwoW3J3LV0qXCkiKSAmJgorCXk9JChlY2hvICIkeCIgfCBzZWQgLWUgInMvdy8tL2ciKSAmJgorCXU9JChleHByICIkdSIgOiAiXChbMC03XSpcKSIpICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgIiR1IiAmJgorCXVtYXNrIDAyNzcgJiYKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICJzaGFyZWQgPSAkdSAoJHkpIHJvIiAnCisKKwkJcm0gLWYgLmdpdC9pbmZvL3JlZnMgJiYKKwkJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCQlhY3R1YWw9IiQodGVzdF9tb2RlYml0cyAuZ2l0L2luZm8vcmVmcykiICYmCisJCXZlcmJvc2UgdGVzdCAieCRhY3R1YWwiID0gIngtJHkiCisKKwknCisKKwl1bWFzayAwNzcgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAic2hhcmVkID0gJHUgKCR4KSBydyIgJworCisJCXJtIC1mIC5naXQvaW5mby9yZWZzICYmCisJCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwkJYWN0dWFsPSIkKHRlc3RfbW9kZWJpdHMgLmdpdC9pbmZvL3JlZnMpIiAmJgorCQl2ZXJib3NlIHRlc3QgIngkYWN0dWFsIiA9ICJ4LSR4IgorCisJJworCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdpbmZvL3JlZnMgcmVzcGVjdHMgdW1hc2sgaW4gdW5zaGFyZWQgcmVwbycgJworCXJtIC1mIC5naXQvaW5mby9yZWZzICYmCisJdGVzdF91bmNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgJiYKKwl1bWFzayAwMDIgJiYKKwlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJZWNobyAiLXJ3LXJ3LXItLSIgPmV4cGVjdCAmJgorCXRlc3RfbW9kZWJpdHMgLmdpdC9pbmZvL3JlZnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ2dpdCByZWZsb2cgZXhwaXJlIGhvbm9ycyBjb3JlLnNoYXJlZFJlcG9zaXRvcnknICcKKwl1bWFzayAwNzcgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBncm91cCAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tYWxsICYmCisJYWN0dWFsPSIkKGxzIC1sIC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcikiICYmCisJY2FzZSAiJGFjdHVhbCIgaW4KKwktcnctcnctKikKKwkJOiBoYXBweQorCQk7OworCSopCisJCWVjaG8gT29vcHMsIC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBpcyBub3QgMDY2MiBbJGFjdHVhbF0KKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdmb3JjZWQgbW9kZXMnICcKKwlta2RpciAtcCB0ZW1wbGF0ZXMvaG9va3MgJiYKKwllY2hvIHVwZGF0ZS1zZXJ2ZXItaW5mbyA+dGVtcGxhdGVzL2hvb2tzL3Bvc3QtdXBkYXRlICYmCisJY2htb2QgK3ggdGVtcGxhdGVzL2hvb2tzL3Bvc3QtdXBkYXRlICYmCisJZWNobyA6ID5yYW5kb20tZmlsZSAmJgorCW1rZGlyIG5ldyAmJgorCSgKKwkJY2QgbmV3ICYmCisJCXVtYXNrIDAwMiAmJgorCQlnaXQgaW5pdCAtLXNoYXJlZD0wNjYwIC0tdGVtcGxhdGU9dGVtcGxhdGVzICYmCisJCT5mcm90eiAmJgorCQlnaXQgYWRkIGZyb3R6ICYmCisJCWdpdCBjb21taXQgLWEgLW0gaW5pdGlhbCAmJgorCQlnaXQgcmVwYWNrCisJKSAmJgorCSMgTGlzdCByZXBvc2l0b3J5IGZpbGVzIG1lYW50IHRvIGJlIHByb3RlY3RlZDsgbm90ZSB0aGF0CisJIyBDT01NSVRfRURJVE1TRyBkb2VzIG5vdCBtYXR0ZXItLS0wbW9kZSBpcyBub3QgYWJvdXQgYQorCSMgcmVwb3NpdG9yeSB3aXRoIGEgd29yayB0cmVlLgorCWZpbmQgbmV3Ly5naXQgLXR5cGUgZiAtbmFtZSBDT01NSVRfRURJVE1TRyAtcHJ1bmUgLW8gLXByaW50IHwKKwl4YXJncyBscyAtbGQgPmFjdHVhbCAmJgorCisJIyBFdmVyeXRoaW5nIG11c3QgYmUgdW5hY2Nlc3NpYmxlIHRvIG90aGVycworCXRlc3QgLXogIiQoc2VkIC1lICIvXi4uLi4uLi4tLS0vZCIgYWN0dWFsKSIgJiYKKworCSMgQWxsIGRpcmVjdG9yaWVzIG11c3QgaGF2ZSBlaXRoZXIgMjc3MCBvciA3NzAKKwl0ZXN0IC16ICIkKHNlZCAtbiAtZSAiL15kcnd4cndbc3hdLS0tL2QiIC1lICIvXmQvcCIgYWN0dWFsKSIgJiYKKworCSMgcG9zdC11cGRhdGUgaG9vayBtdXN0IGJlIDA3NzAKKwl0ZXN0IC16ICIkKHNlZCAtbiAtZSAiL3Bvc3QtdXBkYXRlL3sKKwkJL14tcnd4cnd4LS0tL2QKKwkJcAorCX0iIGFjdHVhbCkiICYmCisKKwkjIEFsbCBmaWxlcyBpbnNpZGUgb2JqZWN0cyBtdXN0IGJlIGFjY2Vzc2libGUgYnkgdXMKKwl0ZXN0IC16ICIkKHNlZCAtbiAtZSAiL29iamVjdHNcLy97CisJCS9eZC9kCisJCS9eLXIuLXIuLS0tLS9kCisJCXAKKwl9IiBhY3R1YWwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAncmVtb3RlIGluaXQgZG9lcyBub3QgdXNlIGNvbmZpZyBmcm9tIGN3ZCcgJworCWdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5IDA2NjYgJiYKKwl1bWFzayAwMDIyICYmCisJZ2l0IGluaXQgLS1iYXJlIGNoaWxkLmdpdCAmJgorCWVjaG8gIi1ydy1yLS1yLS0iID5leHBlY3QgJiYKKwl0ZXN0X21vZGViaXRzIGNoaWxkLmdpdC9jb25maWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3JlLWluaXQgcmVzcGVjdHMgY29yZS5zaGFyZWRyZXBvc2l0b3J5IChsb2NhbCknICcKKwlnaXQgY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSAwNjY2ICYmCisJdW1hc2sgMDAyMiAmJgorCWVjaG8gd2hhdGV2ZXIgPnRlbXBsYXRlcy9mb28gJiYKKwlnaXQgaW5pdCAtLXRlbXBsYXRlPXRlbXBsYXRlcyAmJgorCWVjaG8gIi1ydy1ydy1ydy0iID5leHBlY3QgJiYKKwl0ZXN0X21vZGViaXRzIC5naXQvZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdyZS1pbml0IHJlc3BlY3RzIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSAocmVtb3RlKScgJworCXJtIC1yZiBjaGlsZC5naXQgJiYKKwl1bWFzayAwMDIyICYmCisJZ2l0IGluaXQgLS1iYXJlIC0tc2hhcmVkPTA2NjYgY2hpbGQuZ2l0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgY2hpbGQuZ2l0L2ZvbyAmJgorCWdpdCBpbml0IC0tYmFyZSAtLXRlbXBsYXRlPXRlbXBsYXRlcyBjaGlsZC5naXQgJiYKKwllY2hvICItcnctcnctcnctIiA+ZXhwZWN0ICYmCisJdGVzdF9tb2RlYml0cyBjaGlsZC5naXQvZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd0ZW1wbGF0ZSBjYW4gc2V0IGNvcmUuc2hhcmVkcmVwb3NpdG9yeScgJworCXJtIC1yZiBjaGlsZC5naXQgJiYKKwl1bWFzayAwMDIyICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgMDY2NiAmJgorCWNwIC5naXQvY29uZmlnIHRlbXBsYXRlcy9jb25maWcgJiYKKwlnaXQgaW5pdCAtLWJhcmUgLS10ZW1wbGF0ZT10ZW1wbGF0ZXMgY2hpbGQuZ2l0ICYmCisJZWNobyAiLXJ3LXJ3LXJ3LSIgPmV4cGVjdCAmJgorCXRlc3RfbW9kZWJpdHMgY2hpbGQuZ2l0L0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzAyLXJlcG8tdmVyc2lvbi5zaCBiL3QvdDEzMDItcmVwby12ZXJzaW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlNGNmZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzAyLXJlcG8tdmVyc2lvbi5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcmVwb3NpdG9yeSB2ZXJzaW9uIGNoZWNrJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPnRlc3QucGF0Y2ggPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS90ZXN0LnR4dCBiL3Rlc3QudHh0CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwktLS0gL2Rldi9udWxsCisJKysrIGIvdGVzdC50eHQKKwlAQCAtMCwwICsxIEBACisJKzEyMworCUVPRgorCisJdGVzdF9jcmVhdGVfcmVwbyAidGVzdCIgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICJ0ZXN0MiIgJiYKKwlnaXQgY29uZmlnIC0tZmlsZT10ZXN0Mi8uZ2l0L2NvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIDk5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciBzZWxlY3Rpb24gb24gbm9ybWFsIHJlcG9zJyAnCisJZWNobyAwID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gPmFjdHVhbCAmJgorCWdpdCAtQyB0ZXN0IGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uID5hY3R1YWwyICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGRpciBzZWxlY3Rpb24gb24gdW5zdXBwb3J0ZWQgcmVwbycgJworCSMgTWFrZSBzdXJlIGl0IHdvdWxkIHN0b3AgYXQgdGVzdDIsIG5vdCB0cmFzaAorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgLUMgdGVzdDIgY29uZmlnIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gPmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgbm90IHJlcXVpcmVkIG1vZGUnICcKKwlnaXQgYXBwbHkgLS1zdGF0IHRlc3QucGF0Y2ggJiYKKwlnaXQgLUMgdGVzdCBhcHBseSAtLXN0YXQgLi4vdGVzdC5wYXRjaCAmJgorCWdpdCAtQyB0ZXN0MiBhcHBseSAtLXN0YXQgLi4vdGVzdC5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgcmVxdWlyZWQgbW9kZScgJworCWdpdCBhcHBseSAtLWNoZWNrIC0taW5kZXggdGVzdC5wYXRjaCAmJgorCWdpdCAtQyB0ZXN0IGFwcGx5IC0tY2hlY2sgLS1pbmRleCAuLi90ZXN0LnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHRlc3QyIGFwcGx5IC0tY2hlY2sgLS1pbmRleCAuLi90ZXN0LnBhdGNoCisnCisKK2NoZWNrX2FsbG93ICgpIHsKKwlnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciA+YWN0dWFsICYmCisJZWNobyAuZ2l0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK2NoZWNrX2Fib3J0ICgpIHsKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcgorfQorCisjIGF2b2lkIGdpdC1jb25maWcsIHNpbmNlIGl0IGNhbm5vdCBiZSB0cnVzdGVkIHRvIHJ1bgorIyBpbiBhIHJlcG9zaXRvcnkgd2l0aCBhIGJyb2tlbiB2ZXJzaW9uCitta2NvbmZpZyAoKSB7CisJZWNobyAnW2NvcmVdJyAmJgorCWVjaG8gInJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uID0gJDEiICYmCisJc2hpZnQgJiYKKworCWlmIHRlc3QgJCMgLWd0IDA7IHRoZW4KKwkJZWNobyAnW2V4dGVuc2lvbnNdJyAmJgorCQlmb3IgaSBpbiAiJEAiOyBkbworCQkJZWNobyAiJGkiCisJCWRvbmUKKwlmaQorfQorCit3aGlsZSByZWFkIG91dGNvbWUgdmVyc2lvbiBleHRlbnNpb25zOyBkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvdXRjb21lIHZlcnNpb249JHZlcnNpb24gJGV4dGVuc2lvbnMiICIKKwkJbWtjb25maWcgJHZlcnNpb24gJGV4dGVuc2lvbnMgPi5naXQvY29uZmlnICYmCisJCWNoZWNrXyR7b3V0Y29tZX0KKwkiCitkb25lIDw8XEVPRgorYWxsb3cgMAorYWxsb3cgMQorYWxsb3cgMSBub29wCithYm9ydCAxIG5vLXN1Y2gtZXh0ZW5zaW9uCithbGxvdyAwIG5vLXN1Y2gtZXh0ZW5zaW9uCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlY2lvdXMtb2JqZWN0cyBhbGxvd2VkJyAnCisJbWtjb25maWcgMSBwcmVjaW91c09iamVjdHMgPi5naXQvY29uZmlnICYmCisJY2hlY2tfYWxsb3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlY2lvdXMtb2JqZWN0cyBibG9ja3MgZGVzdHJ1Y3RpdmUgcmVwYWNrJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGFjayAtYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3RoZXIgcmVwYWNrcyBhcmUgT0snICcKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwlnaXQgcmVwYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWNpb3VzLW9iamVjdHMgYmxvY2tzIHBydW5lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIHJ1bnMgd2l0aG91dCBjb21wbGFpbnQnICcKKwlnaXQgZ2MKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaCBiL3QvdDEzMDMtd2Fja3ktY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwMDBlNjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaApAQCAtMCwwICsxLDEzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgd2Fja3kgaW5wdXQgdG8gZ2l0IGNvbmZpZycKKy4gLi90ZXN0LWxpYi5zaAorCisjIExlYXZpbmcgb2ZmIHRoZSBuZXdsaW5lIGlzIGludGVudGlvbmFsIQorc2V0dXAoKSB7CisJKHByaW50ZiAiW3NlY3Rpb25dXG4iICYmCisJcHJpbnRmICIgIGtleSA9IGZvbyIpID4uZ2l0L2NvbmZpZworfQorCisjICdjaGVjayBzZWN0aW9uLmtleSB2YWx1ZScgdmVyaWZpZXMgdGhhdCB0aGUgZW50cnkgZm9yIHNlY3Rpb24ua2V5IGlzCisjICd2YWx1ZScKK2NoZWNrKCkgeworCWVjaG8gIiQyIiA+ZXhwZWN0ZWQKKwlnaXQgY29uZmlnIC0tZ2V0ICIkMSIgPmFjdHVhbCAyPiYxCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKKyMgJ2NoZWNrIHNlY3Rpb24ua2V5IHJlZ2V4IHZhbHVlJyB2ZXJpZmllcyB0aGF0IHRoZSBlbnRyeSBmb3IKKyMgc2VjdGlvbi5rZXkgKnRoYXQgbWF0Y2hlcyAncmVnZXgnKiBpcyAndmFsdWUnCitjaGVja19yZWdleCgpIHsKKwllY2hvICIkMyIgPmV4cGVjdGVkCisJZ2l0IGNvbmZpZyAtLWdldCAiJDEiICIkMiIgPmFjdHVhbCAyPiYxCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmeSBzYW1lIGtleScgJworCXNldHVwICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uLmtleSBiYXIgJiYKKwljaGVjayBzZWN0aW9uLmtleSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGtleSBpbiBzYW1lIHNlY3Rpb24nICcKKwlzZXR1cCAmJgorCWdpdCBjb25maWcgc2VjdGlvbi5vdGhlciBiYXIgJiYKKwljaGVjayBzZWN0aW9uLmtleSBmb28gJiYKKwljaGVjayBzZWN0aW9uLm90aGVyIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQga2V5IGluIGRpZmZlcmVudCBzZWN0aW9uJyAnCisJc2V0dXAgJiYKKwlnaXQgY29uZmlnIHNlY3Rpb24yLmtleSBiYXIgJiYKKwljaGVjayBzZWN0aW9uLmtleSBmb28gJiYKKwljaGVjayBzZWN0aW9uMi5rZXkgYmFyCisnCisKK1NFQ1RJT049InRlc3QucVwic1xcc3Enc3AgZS5rZXkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgZ2l0IGNvbmZpZyBlc2NhcGVzIHNlY3Rpb24gbmFtZXMgcHJvcGVybHknICcKKwlnaXQgY29uZmlnICIkU0VDVElPTiIgYmFyICYmCisJY2hlY2sgIiRTRUNUSU9OIiBiYXIKKycKKworTE9OR19WQUxVRT0kKHByaW50ZiAieCUwMTAyMWR4IGEiIDcpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgY3Jhc2ggb24gc3BlY2lhbCBsb25nIGNvbmZpZyBsaW5lJyAnCisJc2V0dXAgJiYKKwlnaXQgY29uZmlnIHNlY3Rpb24ua2V5ICIkTE9OR19WQUxVRSIgJiYKKwljaGVjayBzZWN0aW9uLmtleSAiJExPTkdfVkFMVUUiCisnCisKK3NldHVwX21hbnkoKSB7CisJc2V0dXAgJiYKKwkjIFRoaXMgdGltZSB3ZSB3YW50IHRoZSBuZXdsaW5lIHNvIHRoYXQgd2UgY2FuIHRhY2sgb24gbW9yZQorCSMgZW50cmllcy4KKwllY2hvID4+LmdpdC9jb25maWcgJiYKKwkjIFNlbWktZWZmaWNpZW50IHdheSBvZiBjb25jYXRlbmF0aW5nIDVeNSA9IDMxMjUgbGluZXMuIE5vdGUKKwkjIHRoYXQgYmVjYXVzZSAnc2V0dXAnIGFscmVhZHkgcHV0IG9uZSBsaW5lLCB0aGlzIG1lYW5zIDMxMjYKKwkjIGVudHJpZXMgZm9yIHNlY3Rpb24ua2V5IGluIHRoZSBjb25maWcgZmlsZS4KKwljYXQgPjV0bzEgPDwtXEVPRiAmJgorCSAga2V5ID0gZm9vCisJICBrZXkgPSBmb28KKwkgIGtleSA9IGZvbworCSAga2V5ID0gZm9vCisJICBrZXkgPSBmb28KKwlFT0YKKwljYXQgNXRvMSA1dG8xIDV0bzEgNXRvMSA1dG8xID41dG8yICYmCSAgICMgMjUKKwljYXQgNXRvMiA1dG8yIDV0bzIgNXRvMiA1dG8yID41dG8zICYmCSAgICMgMTI1CisJY2F0IDV0bzMgNXRvMyA1dG8zIDV0bzMgNXRvMyA+NXRvNCAmJgkgICAjIDYzNQorCWNhdCA1dG80IDV0bzQgNXRvNCA1dG80IDV0bzQgPj4uZ2l0L2NvbmZpZyAjIDMxMjUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IG1hbnkgZW50cmllcycgJworCXNldHVwX21hbnkgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzZWN0aW9uLmtleSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMzEyNiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IG1hbnkgZW50cmllcyBieSByZWdleCcgJworCXNldHVwX21hbnkgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic2VjLiprZS4iID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzMTI2IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYW5kIHJlcGxhY2Ugb25lIG9mIG1hbnkgZW50cmllcycgJworCXNldHVwX21hbnkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHNlY3Rpb24ua2V5IGJhciAmJgorCWNoZWNrX3JlZ2V4IHNlY3Rpb24ua2V5ICJiLipyIiBiYXIgJiYKKwlnaXQgY29uZmlnIHNlY3Rpb24ua2V5IGJlZXIgImIuKnIiICYmCisJY2hlY2tfcmVnZXggc2VjdGlvbi5rZXkgImIuKnIiIGJlZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSBtYW55IGVudHJpZXMnICcKKwlzZXR1cF9tYW55ICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHNlY3Rpb24ua2V5IGJhciAmJgorCWNoZWNrIHNlY3Rpb24ua2V5IGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnNldCBtYW55IGVudHJpZXMnICcKKwlzZXR1cF9tYW55ICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBzZWN0aW9uLmtleSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgc2VjdGlvbi5rZXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hZGQgYXBwZW5kcyBuZXcgdmFsdWUgYWZ0ZXIgZXhpc3RpbmcgZW1wdHkgdmFsdWUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisKKworCWZvb2wKKwlyb2xsCisJRU9GCisJY3AgLmdpdC9jb25maWcgLmdpdC9jb25maWcub2xkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiAuZ2l0L2NvbmZpZy5vbGQgLmdpdC9jb25maWciICYmCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2Zvb10KKwkJYmF6CisJCWJheiA9CisJCWJheiA9IGZvb2wKKwlFT0YKKwlnaXQgY29uZmlnIC0tYWRkIGZvby5iYXogcm9sbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIGZvby5iYXogPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzA0LWRlZmF1bHQtYWNsLnNoIGIvdC90MTMwNC1kZWZhdWx0LWFjbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMzVkM2YzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwNC1kZWZhdWx0LWFjbC5zaApAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIE1hdHRoaWV1IE1veQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlcG9zaXRvcnkgd2l0aCBkZWZhdWx0IEFDTCcKKworIyBDcmVhdGUgdGhlIHRlc3QgcmVwbyB3aXRoIHJlc3RyaWN0aXZlIHVtYXNrCisjID0+IHRoaXMgbXVzdCBjb21lIGJlZm9yZSAuIC4vdGVzdC1saWIuc2gKK3VtYXNrIDA3NworCisuIC4vdGVzdC1saWIuc2gKKworIyBXZSBuZWVkIGFuIGFyYml0cmFyeSBvdGhlciB1c2VyIGdpdmUgcGVybWlzc2lvbiB0byB1c2luZyBBQ0xzLiByb290CisjIGlzIGEgZ29vZCBjYW5kaWRhdGU6IGV4aXN0cyBvbiBhbGwgdW5pY2VzLCBhbmQgaXQgaGFzIHBlcm1pc3Npb24KKyMgYW55d2F5LCBzbyB3ZSBkb24ndCBjcmVhdGUgYSBzZWN1cml0eSBob2xlIHJ1bm5pbmcgdGhlIHRlc3RzdWl0ZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIGZvciBhIHdvcmtpbmcgYWNsIHNldHVwJyAnCisJaWYgc2V0ZmFjbCAtbSBkOm06cnd4IC1tIHU6cm9vdDpyd3ggLiAmJgorCSAgIGdldGZhY2wgLiB8IGdyZXAgdXNlcjpyb290OnJ3eCAmJgorCSAgIHRvdWNoIHNob3VsZC1oYXZlLXJlYWRhYmxlLWFjbCAmJgorCSAgIGdldGZhY2wgc2hvdWxkLWhhdmUtcmVhZGFibGUtYWNsIHwgZWdyZXAgIm1hc2s6Oj9ydy0iCisJdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgU0VURkFDTAorCWZpCisnCisKK2lmIHRlc3QgLXogIiRMT0dOQU1FIgordGhlbgorCUxPR05BTUU9IiR7VVNFUjotJChpZCAtdSAtbil9IgorZmkKKworY2hlY2tfcGVybXNfYW5kX2FjbCAoKSB7CisJdGVzdCAtciAiJDEiICYmCisJZ2V0ZmFjbCAiJDEiID4gYWN0dWFsICYmCisJZ3JlcCAtcSAidXNlcjpyb290OnJ3eCIgYWN0dWFsICYmCisJZ3JlcCAtcSAidXNlcjoke0xPR05BTUV9OnJ3eCIgYWN0dWFsICYmCisJZWdyZXAgIm1hc2s6Oj9yLS0iIGFjdHVhbCA+IC9kZXYvbnVsbCAyPiYxICYmCisJZ3JlcCAtcSAiZ3JvdXA6Oi0tLSIgYWN0dWFsIHx8IGZhbHNlCit9CisKK2RpcnNfdG9fc2V0PSIuLyAuZ2l0LyAuZ2l0L29iamVjdHMvIC5naXQvb2JqZWN0cy9wYWNrLyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTRVRGQUNMICdTZXR1cCB0ZXN0IHJlcG8nICcKKwlzZXRmYWNsIC1tIGQ6dTo6cnd4LGQ6Zzo6LS0tLGQ6bzotLS0sZDptOnJ3eCAkZGlyc190b19zZXQgJiYKKwlzZXRmYWNsIC1tIG06cnd4ICAgICAgICAgICAgICAgJGRpcnNfdG9fc2V0ICYmCisJc2V0ZmFjbCAtbSB1OnJvb3Q6cnd4ICAgICAgICAgICRkaXJzX3RvX3NldCAmJgorCXNldGZhY2wgLW0gZDp1OiIkTE9HTkFNRSI6cnd4ICAkZGlyc190b19zZXQgJiYKKwlzZXRmYWNsIC1tIGQ6dTpyb290OnJ3eCAgICAgICAgJGRpcnNfdG9fc2V0ICYmCisKKwl0b3VjaCBmaWxlLnR4dCAmJgorCWdpdCBhZGQgZmlsZS50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNFVEZBQ0wgJ09iamVjdHMgY3JlYXRpb24gZG9lcyBub3QgYnJlYWsgQUNMcyB3aXRoIHJlc3RyaWN0aXZlIHVtYXNrJyAnCisJIyBTSEExIGZvciBlbXB0eSBibG9iCisJY2hlY2tfcGVybXNfYW5kX2FjbCAuZ2l0L29iamVjdHMvJChlY2hvICRFTVBUWV9CTE9CIHwgc2VkIC1lICJzLF5cKC4uXCksXDEvLCIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0VURkFDTCAnZ2l0IGdjIGRvZXMgbm90IGJyZWFrIEFDTHMgd2l0aCByZXN0cmljdGl2ZSB1bWFzaycgJworCWdpdCBnYyAmJgorCWNoZWNrX3Blcm1zX2FuZF9hY2wgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwNS1jb25maWctaW5jbHVkZS5zaCBiL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjFlMWIyOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKQEAgLTAsMCArMSwzNjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNvbmZpZyBmaWxlIGluY2x1ZGUgZGlyZWN0aXZlcycKKy4gLi90ZXN0LWxpYi5zaAorCisjIEZvcmNlIHNldHVwX2V4cGxpY2l0X2dpdF9kaXIoKSB0byBydW4gdW50aWwgdGhlIGVuZC4gVGhpcyBpcyBuZWVkZWQKKyMgYnkgc29tZSB0ZXN0cyB0byBtYWtlIHN1cmUgcmVhbF9wYXRoKCkgaXMgY2FsbGVkIG9uICRHSVRfRElSLiBUaGUKKyMgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBnaXQgY29tbWFuZHMgYXJlIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5CisjIHRob3VnaCBvciByZWFsX3BhdGgoKSB3aWxsIG5vdCBiZSBjYWxsZWQuCitmb3JjZV9zZXR1cF9leHBsaWNpdF9naXRfZGlyKCkgeworICAgIEdJVF9ESVI9IiQocHdkKS8uZ2l0IgorICAgIEdJVF9XT1JLX1RSRUU9IiQocHdkKSIKKyAgICBleHBvcnQgR0lUX0RJUiBHSVRfV09SS19UUkVFCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY2x1ZGUgZmlsZSBieSBhYnNvbHV0ZSBwYXRoJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBcIiQocHdkKS9vbmVcIiIgPi5naXRjb25maWcgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBmaWxlIGJ5IHJlbGF0aXZlIHBhdGgnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhaW5lZCByZWxhdGl2ZSBwYXRocycgJworCW1rZGlyIHN1YmRpciAmJgorCWVjaG8gIlt0ZXN0XXRocmVlID0gMyIgPnN1YmRpci90aHJlZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSB0aHJlZSIgPnN1YmRpci90d28gJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gc3ViZGlyL3R3byIgPi5naXRjb25maWcgJiYKKwllY2hvIDMgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgdGVzdC50aHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNsdWRlIHBhdGhzIGdldCB0aWxkZS1leHBhbnNpb24nICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IH4vb25lIiA+LmdpdGNvbmZpZyAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNsdWRlIG9wdGlvbnMgY2FuIHN0aWxsIGJlIGV4YW1pbmVkJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgaW5jbHVkZS5wYXRoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgaW5jbHVkZXMgb3B0aW9uIGFuZCBleHBhbnNpb24nICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJaW5jbHVkZS5wYXRoPW9uZQorCXRlc3Qub25lPTEKKwlFT0YKKwlnaXQgY29uZmlnIC0tbGlzdCA+YWN0dWFsLmZ1bGwgJiYKKwlncmVwIC12IC1lIF5jb3JlIC1lIF5leHRlbnNpb25zIGFjdHVhbC5mdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBmaWxlIGxvb2t1cCBkb2VzIG5vdCBleHBhbmQgaW5jbHVkZXMgYnkgZGVmYXVsdCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gb25lIiA+LmdpdGNvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdGNvbmZpZyB0ZXN0Lm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nbG9iYWwgdGVzdC5vbmUgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1pbmNsdWRlcyAtZiAuZ2l0Y29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBmaWxlIGxpc3QgZG9lcyBub3QgZXhwYW5kIGluY2x1ZGVzIGJ5IGRlZmF1bHQnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwllY2hvICJpbmNsdWRlLnBhdGg9b25lIiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0Y29uZmlnIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIGNvbmZpZyBmaWxlIGRvZXMgbm90IGV4cGFuZCBpbmNsdWRlcycgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gb25lIiA+LmdpdGNvbmZpZyAmJgorCWdpdCBjb25maWcgdGVzdC50d28gMiAmJgorCWVjaG8gMiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLW5vLWluY2x1ZGVzIHRlc3QudHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLW5vLWluY2x1ZGVzIHRlc3Qub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyBtb2RpZmljYXRpb24gZG9lcyBub3QgYWZmZWN0IGluY2x1ZGVzJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJZ2l0IGNvbmZpZyB0ZXN0Lm9uZSAyICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC1mIG9uZSB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkxCisJMgorCUVPRgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgaW5jbHVkZSBmaWxlcyBhcmUgaWdub3JlZCcgJworCWNhdCA+LmdpdGNvbmZpZyA8PC1cRU9GICYmCisJW2luY2x1ZGVdcGF0aCA9IG5vbi1leGlzdGVudAorCVt0ZXN0XXZhbHVlID0geWVzCisJRU9GCisJZWNobyB5ZXMgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgdGVzdC52YWx1ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvbHV0ZSBpbmNsdWRlcyBmcm9tIGNvbW1hbmQgbGluZSB3b3JrJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IC1jIGluY2x1ZGUucGF0aD0iJChwd2QpL29uZSIgY29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIGluY2x1ZGVzIGZyb20gY29tbWFuZCBsaW5lIGZhaWwnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGluY2x1ZGUucGF0aD1vbmUgY29uZmlnIHRlc3Qub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29sdXRlIGluY2x1ZGVzIGZyb20gYmxvYnMgd29yaycgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoPSQocHdkKS9vbmUiID5ibG9iICYmCisJYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAtdyBibG9iKSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJsb2I9JGJsb2IgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgaW5jbHVkZXMgZnJvbSBibG9icyBmYWlsJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGg9b25lIiA+YmxvYiAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgYmxvYikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj0kYmxvYiB0ZXN0Lm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvbHV0ZSBpbmNsdWRlcyBmcm9tIHN0ZGluIHdvcmsnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAxID5leHBlY3QgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoPVwiJChwd2QpL29uZVwiIiB8CisJZ2l0IGNvbmZpZyAtLWZpbGUgLSB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBpbmNsdWRlcyBmcm9tIHN0ZGluIGxpbmUgZmFpbCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoPW9uZSIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlIC0gdGVzdC5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgYm90aCB1bmFuY2hvcmVkJyAnCisJZ2l0IGluaXQgZm9vICYmCisJKAorCQljZCBmb28gJiYKKwkJZWNobyAiW2luY2x1ZGVJZiBcImdpdGRpcjpmb28vXCJdcGF0aD1iYXIiID4+LmdpdC9jb25maWcgJiYKKwkJZWNobyAiW3Rlc3Rdb25lPTEiID4uZ2l0L2JhciAmJgorCQllY2hvIDEgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgJEhPTUUgZXhwYW5zaW9uJyAnCisJKAorCQljZCBmb28gJiYKKwkJZWNobyAiW2luY2x1ZGVJZiBcImdpdGRpcjp+L2Zvby9cIl1wYXRoPWJhcjIiID4+LmdpdC9jb25maWcgJiYKKwkJZWNobyAiW3Rlc3RddHdvPTIiID4uZ2l0L2JhcjIgJiYKKwkJZWNobyAyID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyB0ZXN0LnR3byA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIGZ1bGwgcGF0dGVybicgJworCSgKKwkJY2QgZm9vICYmCisJCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXI6KiovZm9vLyoqXCJdcGF0aD1iYXIzIiA+Pi5naXQvY29uZmlnICYmCisJCWVjaG8gIlt0ZXN0XXRocmVlPTMiID4uZ2l0L2JhcjMgJiYKKwkJZWNobyAzID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyB0ZXN0LnRocmVlID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgcmVsYXRpdmUgcGF0aCcgJworCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXI6Li9mb28vLmdpdFwiXXBhdGg9YmFyNCIgPj4uZ2l0Y29uZmlnICYmCisJZWNobyAiW3Rlc3RdZm91cj00IiA+YmFyNCAmJgorCSgKKwkJY2QgZm9vICYmCisJCWVjaG8gNCA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgdGVzdC5mb3VyID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgYm90aCB1bmFuY2hvcmVkLCBpY2FzZScgJworCSgKKwkJY2QgZm9vICYmCisJCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXIvaTpGT08vXCJdcGF0aD1iYXI1IiA+Pi5naXQvY29uZmlnICYmCisJCWVjaG8gIlt0ZXN0XWZpdmU9NSIgPi5naXQvYmFyNSAmJgorCQllY2hvIDUgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIHRlc3QuZml2ZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIGVhcmx5IGNvbmZpZyByZWFkaW5nJyAnCisJKAorCQljZCBmb28gJiYKKwkJZWNobyAiW2luY2x1ZGVJZiBcImdpdGRpcjpmb28vXCJdcGF0aD1iYXI2IiA+Pi5naXQvY29uZmlnICYmCisJCWVjaG8gIlt0ZXN0XXNpeD02IiA+LmdpdC9iYXI2ICYmCisJCWVjaG8gNiA+ZXhwZWN0ICYmCisJCXRlc3QtdG9vbCBjb25maWcgcmVhZF9lYXJseV9jb25maWcgdGVzdC5zaXggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25kaXRpb25hbCBpbmNsdWRlIHdpdGggLyoqLycgJworCVJFUE89Zm9vL2Jhci9yZXBvICYmCisJZ2l0IGluaXQgJFJFUE8gJiYKKwljYXQgPj4kUkVQTy8uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2luY2x1ZGVJZiAiZ2l0ZGlyOioqL2Zvby8qKi9iYXIvKioiXQorCXBhdGg9YmFyNworCUVPRgorCWVjaG8gIlt0ZXN0XXNldmVuPTciID4kUkVQTy8uZ2l0L2JhcjcgJiYKKwllY2hvIDcgPmV4cGVjdCAmJgorCWdpdCAtQyAkUkVQTyBjb25maWcgdGVzdC5zZXZlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjb25kaXRpb25hbCBpbmNsdWRlLCBzZXQgdXAgc3ltbGlua2VkICRIT01FJyAnCisJbWtkaXIgcmVhbC1ob21lICYmCisJbG4gLXMgcmVhbC1ob21lIGhvbWUgJiYKKwkoCisJCUhPTUU9IiRUUkFTSF9ESVJFQ1RPUlkvaG9tZSIgJiYKKwkJZXhwb3J0IEhPTUUgJiYKKwkJY2QgIiRIT01FIiAmJgorCisJCWdpdCBpbml0IGZvbyAmJgorCQljZCBmb28gJiYKKwkJbWtkaXIgc3ViCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjb25kaXRpb25hbCBpbmNsdWRlLCAkSE9NRSBleHBhbnNpb24gd2l0aCBzeW1saW5rcycgJworCSgKKwkJSE9NRT0iJFRSQVNIX0RJUkVDVE9SWS9ob21lIiAmJgorCQlleHBvcnQgSE9NRSAmJgorCQljZCAiJEhPTUUiL2ZvbyAmJgorCisJCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXI6fi9mb28vXCJdcGF0aD1iYXIyIiA+Pi5naXQvY29uZmlnICYmCisJCWVjaG8gIlt0ZXN0XXR3bz0yIiA+LmdpdC9iYXIyICYmCisJCWVjaG8gMiA+ZXhwZWN0ICYmCisJCWZvcmNlX3NldHVwX2V4cGxpY2l0X2dpdF9kaXIgJiYKKwkJZ2l0IC1DIHN1YiBjb25maWcgdGVzdC50d28gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjb25kaXRpb25hbCBpbmNsdWRlLCByZWxhdGl2ZSBwYXRoIHdpdGggc3ltbGlua3MnICcKKwllY2hvICJbaW5jbHVkZUlmIFwiZ2l0ZGlyOi4vZm9vLy5naXRcIl1wYXRoPWJhcjQiID5ob21lLy5naXRjb25maWcgJiYKKwllY2hvICJbdGVzdF1mb3VyPTQiID5ob21lL2JhcjQgJiYKKwkoCisJCUhPTUU9IiRUUkFTSF9ESVJFQ1RPUlkvaG9tZSIgJiYKKwkJZXhwb3J0IEhPTUUgJiYKKwkJY2QgIiRIT01FIi9mb28gJiYKKworCQllY2hvIDQgPmV4cGVjdCAmJgorCQlmb3JjZV9zZXR1cF9leHBsaWNpdF9naXRfZGlyICYmCisJCWdpdCAtQyBzdWIgY29uZmlnIHRlc3QuZm91ciA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIGdpdGRpciBtYXRjaGluZyBzeW1saW5rJyAnCisJbG4gLXMgZm9vIGJhciAmJgorCSgKKwkJY2QgYmFyICYmCisJCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXI6YmFyL1wiXXBhdGg9YmFyNyIgPj4uZ2l0L2NvbmZpZyAmJgorCQllY2hvICJbdGVzdF1zZXZlbj03IiA+LmdpdC9iYXI3ICYmCisJCWVjaG8gNyA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgdGVzdC5zZXZlbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NvbmRpdGlvbmFsIGluY2x1ZGUsIGdpdGRpciBtYXRjaGluZyBzeW1saW5rLCBpY2FzZScgJworCSgKKwkJY2QgYmFyICYmCisJCWVjaG8gIltpbmNsdWRlSWYgXCJnaXRkaXIvaTpCQVIvXCJdcGF0aD1iYXI4IiA+Pi5naXQvY29uZmlnICYmCisJCWVjaG8gIlt0ZXN0XWVpZ2h0PTgiID4uZ2l0L2JhcjggJiYKKwkJZWNobyA4ID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyB0ZXN0LmVpZ2h0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZGl0aW9uYWwgaW5jbHVkZSwgb25icmFuY2gnICcKKwllY2hvICJbaW5jbHVkZUlmIFwib25icmFuY2g6Zm9vLWJyYW5jaFwiXXBhdGg9YmFyOSIgPj4uZ2l0L2NvbmZpZyAmJgorCWVjaG8gIlt0ZXN0XW5pbmU9OSIgPi5naXQvYmFyOSAmJgorCWdpdCBjaGVja291dCAtYiBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHRlc3QubmluZSAmJgorCWdpdCBjaGVja291dCAtYiBmb28tYnJhbmNoICYmCisJZWNobyA5ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3QubmluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25kaXRpb25hbCBpbmNsdWRlLCBvbmJyYW5jaCwgd2lsZGNhcmQnICcKKwllY2hvICJbaW5jbHVkZUlmIFwib25icmFuY2g6P29vLSovKipcIl1wYXRoPWJhcjEwIiA+Pi5naXQvY29uZmlnICYmCisJZWNobyAiW3Rlc3RddGVuPTEwIiA+LmdpdC9iYXIxMCAmJgorCWdpdCBjaGVja291dCAtYiBub3QtZm9vLWJyYW5jaC9hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyB0ZXN0LnRlbiAmJgorCisJZWNobyAxMCA+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvby1icmFuY2gvYS9iL2MgJiYKKwlnaXQgY29uZmlnIHRlc3QudGVuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbW9vLWJhci9hICYmCisJZ2l0IGNvbmZpZyB0ZXN0LnRlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25kaXRpb25hbCBpbmNsdWRlLCBvbmJyYW5jaCwgaW1wbGljaXQgLyoqIGZvciAvJyAnCisJZWNobyAiW2luY2x1ZGVJZiBcIm9uYnJhbmNoOmZvby1kaXIvXCJdcGF0aD1iYXIxMSIgPj4uZ2l0L2NvbmZpZyAmJgorCWVjaG8gIlt0ZXN0XWVsZXZlbj0xMSIgPi5naXQvYmFyMTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm90LWZvby1kaXIvYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgdGVzdC5lbGV2ZW4gJiYKKworCWVjaG8gMTEgPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCAtYiBmb28tZGlyL2EvYi9jICYmCisJZ2l0IGNvbmZpZyB0ZXN0LmVsZXZlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNsdWRlIGN5Y2xlcyBhcmUgZGV0ZWN0ZWQnICcKKwlnaXQgaW5pdCAtLWJhcmUgY3ljbGUgJiYKKwlnaXQgLUMgY3ljbGUgY29uZmlnIGluY2x1ZGUucGF0aCBjeWNsZSAmJgorCWdpdCBjb25maWcgLWYgY3ljbGUvY3ljbGUgaW5jbHVkZS5wYXRoIGNvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZW52IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OPWZhbHNlIFwKKwkJZ2l0IC1DIGN5Y2xlIGNvbmZpZyAtLWdldC1hbGwgdGVzdC52YWx1ZSAyPnN0ZGVyciAmJgorCWdyZXAgImV4Y2VlZGVkIG1heGltdW0gaW5jbHVkZSBkZXB0aCIgc3RkZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwNi14ZGctZmlsZXMuc2ggYi90L3QxMzA2LXhkZy1maWxlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDg3YjQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwNi14ZGctZmlsZXMuc2gKQEAgLTAsMCArMSwxOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgVmFsZW50aW4gRHVwZXJyYXksIEx1Y2llbiBLb25nLCBGcmFuY2sgSm9uYXMsCisjCQkgICAgIFRob21hcyBOZ3V5LCBLaG9pIE5ndXllbgorIwkJICAgICBHcmVub2JsZSBJTlAgRW5zaW1hZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdDb21wYXRpYmlsaXR5IHdpdGggJFhER19DT05GSUdfSE9NRS9naXQvIGZpbGVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCBjb25maWc6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGRvZXNuJ1wnJ3QnICcKKwlta2RpciAtcCAuY29uZmlnL2dpdCAmJgorCWVjaG8gIlthbGlhc10iID4uY29uZmlnL2dpdC9jb25maWcgJiYKKwllY2hvICIJbXlhbGlhcyA9ICFlY2hvIGluX2NvbmZpZyIgPj4uY29uZmlnL2dpdC9jb25maWcgJiYKKwllY2hvIGluX2NvbmZpZyA+ZXhwZWN0ZWQgJiYKKwlnaXQgbXlhbGlhcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCBjb25maWc6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGV4aXN0cycgJworCT4uZ2l0Y29uZmlnICYmCisJZWNobyAiW2FsaWFzXSIgPi5naXRjb25maWcgJiYKKwllY2hvICIJbXlhbGlhcyA9ICFlY2hvIGluX2dpdGNvbmZpZyIgPj4uZ2l0Y29uZmlnICYmCisJZWNobyBpbl9naXRjb25maWcgPmV4cGVjdGVkICYmCisJZ2l0IG15YWxpYXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgd2l0aCAtLWdldDogeGRnIGZpbGUgZXhpc3RzIGFuZCB+Ly5naXRjb25maWcgZG9lc24nXCcndCcgJworCXJtIC5naXRjb25maWcgJiYKKwllY2hvICJbdXNlcl0iID4uY29uZmlnL2dpdC9jb25maWcgJiYKKwllY2hvICIJbmFtZSA9IHJlYWRfY29uZmlnIiA+Pi5jb25maWcvZ2l0L2NvbmZpZyAmJgorCWVjaG8gcmVhZF9jb25maWcgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciJFhER19DT05GSUdfSE9NRSBvdmVycmlkZXMgJEhPTUUvLmNvbmZpZy9naXQnICcKKwlta2RpciAtcCAiJEhPTUUiL3hkZy9naXQgJiYKKwllY2hvICJbdXNlcl1uYW1lID0gaW5feGRnIiA+IiRIT01FIi94ZGcvZ2l0L2NvbmZpZyAmJgorCWVjaG8gaW5feGRnID5leHBlY3RlZCAmJgorCVhER19DT05GSUdfSE9NRT0iJEhPTUUiL3hkZyBnaXQgY29uZmlnIC0tZ2V0LWFsbCB1c2VyLm5hbWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIHdpdGggLS1nZXQ6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGV4aXN0cycgJworCT4uZ2l0Y29uZmlnICYmCisJZWNobyAiW3VzZXJdIiA+LmdpdGNvbmZpZyAmJgorCWVjaG8gIgluYW1lID0gcmVhZF9naXRjb25maWciID4+LmdpdGNvbmZpZyAmJgorCWVjaG8gcmVhZF9naXRjb25maWcgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgd2l0aCAtLWxpc3Q6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGRvZXNuJ1wnJ3QnICcKKwlybSAuZ2l0Y29uZmlnICYmCisJZWNobyB1c2VyLm5hbWU9cmVhZF9jb25maWcgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgd2l0aCAtLWxpc3Q6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGV4aXN0cycgJworCT4uZ2l0Y29uZmlnICYmCisJZWNobyAiW3VzZXJdIiA+LmdpdGNvbmZpZyAmJgorCWVjaG8gIgluYW1lID0gcmVhZF9naXRjb25maWciID4+LmdpdGNvbmZpZyAmJgorCWVjaG8gdXNlci5uYW1lPXJlYWRfZ2l0Y29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS1saXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCcgJworCWdpdCBpbml0IGdpdCAmJgorCWNkIGdpdCAmJgorCWVjaG8gZm9vID50b19iZV9leGNsdWRlZAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0V4Y2x1c2lvbiBvZiBhIGZpbGUgaW4gdGhlIFhERyBpZ25vcmUgZmlsZScgJworCW1rZGlyIC1wICIkSE9NRSIvLmNvbmZpZy9naXQvICYmCisJZWNobyB0b19iZV9leGNsdWRlZCA+IiRIT01FIi8uY29uZmlnL2dpdC9pZ25vcmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIHRvX2JlX2V4Y2x1ZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyRYREdfQ09ORklHX0hPTUUgb3ZlcnJpZGVzICRIT01FLy5jb25maWcvZ2l0L2lnbm9yZScgJworCW1rZGlyIC1wICIkSE9NRSIveGRnL2dpdCAmJgorCWVjaG8gY29udGVudCA+ZXhjbHVkZWRfYnlfeGRnX29ubHkgJiYKKwllY2hvIGV4Y2x1ZGVkX2J5X3hkZ19vbmx5ID4iJEhPTUUiL3hkZy9naXQvaWdub3JlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVhZC10cmVlIC0tZW1wdHkiICYmCisJKFhER19DT05GSUdfSE9NRT0iJEhPTUUveGRnIiAmJgorCSBleHBvcnQgWERHX0NPTkZJR19IT01FICYmCisJIGdpdCBhZGQgdG9fYmVfZXhjbHVkZWQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBleGNsdWRlZF9ieV94ZGdfb25seQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRXhjbHVzaW9uIGluIGJvdGggWERHIGFuZCBsb2NhbCBpZ25vcmUgZmlsZXMnICcKKwllY2hvIHRvX2JlX2V4Y2x1ZGVkID4uZ2l0aWdub3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCB0b19iZV9leGNsdWRlZAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0V4Y2x1c2lvbiBpbiBhIG5vbi1YREcgZ2xvYmFsIGlnbm9yZSBmaWxlJyAnCisJcm0gLmdpdGlnbm9yZSAmJgorCWVjaG8gPiIkSE9NRSIvLmNvbmZpZy9naXQvaWdub3JlICYmCisJZWNobyB0b19iZV9leGNsdWRlZCA+IiRIT01FIi9teV9naXRpZ25vcmUgJiYKKwlnaXQgY29uZmlnIGNvcmUuZXhjbHVkZXNmaWxlICIkSE9NRSIvbXlfZ2l0aWdub3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCB0b19iZV9leGNsdWRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVja2luZyBYREcgaWdub3JlIGZpbGUgd2hlbiBIT01FIGlzIHVuc2V0JyAnCisJKHNhbmVfdW5zZXQgSE9NRSAmJgorCSBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5leGNsdWRlc2ZpbGUgJiYKKwkgZ2l0IGxzLWZpbGVzIC0tZXhjbHVkZS1zdGFuZGFyZCAtLWlnbm9yZWQgPmFjdHVhbCkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNraW5nIGF0dHJpYnV0ZXMgaW4gdGhlIFhERyBhdHRyaWJ1dGVzIGZpbGUnICcKKwllY2hvIGZvbyA+ZiAmJgorCWdpdCBjaGVjay1hdHRyIC1hIGYgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCAtZXEgMCBhY3R1YWwgJiYKKwllY2hvICJmIGF0dHJfZiIgPiIkSE9NRSIvLmNvbmZpZy9naXQvYXR0cmlidXRlcyAmJgorCWVjaG8gImY6IGF0dHJfZjogc2V0IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2tpbmcgWERHIGF0dHJpYnV0ZXMgd2hlbiBIT01FIGlzIHVuc2V0JyAnCisJKHNhbmVfdW5zZXQgSE9NRSAmJgorCSBnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckWERHX0NPTkZJR19IT01FIG92ZXJyaWRlcyAkSE9NRS8uY29uZmlnL2dpdC9hdHRyaWJ1dGVzJyAnCisJbWtkaXIgLXAgIiRIT01FIi94ZGcvZ2l0ICYmCisJZWNobyAiZiBhdHRyX2Y9eGRnIiA+IiRIT01FIi94ZGcvZ2l0L2F0dHJpYnV0ZXMgJiYKKwllY2hvICJmOiBhdHRyX2Y6IHhkZyIgPmV4cGVjdGVkICYmCisJWERHX0NPTkZJR19IT01FPSIkSE9NRS94ZGciIGdpdCBjaGVjay1hdHRyIC1hIGYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVja2luZyBhdHRyaWJ1dGVzIGluIGJvdGggWERHIGFuZCBsb2NhbCBhdHRyaWJ1dGVzIGZpbGVzJyAnCisJZWNobyAiZiAtYXR0cl9mIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmOiBhdHRyX2Y6IHVuc2V0IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVja2luZyBhdHRyaWJ1dGVzIGluIGEgbm9uLVhERyBnbG9iYWwgYXR0cmlidXRlcyBmaWxlJyAnCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmIGF0dHJfZj10ZXN0IiA+IiRIT01FIi9teV9naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF0dHJpYnV0ZXNmaWxlICIkSE9NRSIvbXlfZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImY6IGF0dHJfZjogdGVzdCIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrLWF0dHIgLWEgZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGU6IHhkZyBmaWxlIGV4aXN0cyBhbmQgfi8uZ2l0Y29uZmlnIGRvZXNuJ1wnJ3QnICcKKwlta2RpciAtcCAiJEhPTUUiLy5jb25maWcvZ2l0ICYmCisJPiIkSE9NRSIvLmNvbmZpZy9naXQvY29uZmlnICYmCisJcm0gLWYgIiRIT01FIi8uZ2l0Y29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgIndyaXRlX2NvbmZpZyIgJiYKKwllY2hvICJbdXNlcl0iID5leHBlY3RlZCAmJgorCWVjaG8gIgluYW1lID0gd3JpdGVfY29uZmlnIiA+PmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRIT01FIi8uY29uZmlnL2dpdC9jb25maWcKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZTogeGRnIGZpbGUgZXhpc3RzIGFuZCB+Ly5naXRjb25maWcgZXhpc3RzJyAnCisJPiIkSE9NRSIvLmdpdGNvbmZpZyAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICJ3cml0ZV9naXRjb25maWciICYmCisJZWNobyAiW3VzZXJdIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICIJbmFtZSA9IHdyaXRlX2dpdGNvbmZpZyIgPj5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkSE9NRSIvLmdpdGNvbmZpZworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlOiB+Ly5jb25maWcvZ2l0LyBleGlzdHMgYW5kIGNvbmZpZyBmaWxlIGRvZXNuJ1wnJ3QnICcKKwlybSAtZiAiJEhPTUUiLy5naXRjb25maWcgJiYKKwlybSAtZiAiJEhPTUUiLy5jb25maWcvZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICJ3cml0ZV9naXRjb25maWciICYmCisJZWNobyAiW3VzZXJdIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICIJbmFtZSA9IHdyaXRlX2dpdGNvbmZpZyIgPj5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkSE9NRSIvLmdpdGNvbmZpZworJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwNy1jb25maWctYmxvYi5zaCBiL3QvdDEzMDctY29uZmlnLWJsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDAyZTZkMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDctY29uZmlnLWJsb2Iuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3N1cHBvcnQgZm9yIHJlYWRpbmcgY29uZmlnIGZyb20gYSBibG9iJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBjb25maWcgYmxvYicgJworCWNhdCA+Y29uZmlnIDw8LVxFT0YgJiYKKwlbc29tZV0KKwkJdmFsdWUgPSAxCisJRU9GCisJZ2l0IGFkZCBjb25maWcgJiYKKwlnaXQgY29tbWl0IC1tIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IGNvbmZpZyBibG9iIGNvbnRlbnRzJyAnCisJZWNobyBzb21lLnZhbHVlPTEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB2YWx1ZSBmcm9tIGJsb2InICcKKwllY2hvIHRydWUgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIC0tYm9vbCBzb21lLnZhbHVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgbm9uLWV4aXN0aW5nIHZhbHVlIGZyb20gYmxvYiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIG5vbi5leGlzdGluZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkaW5nIGZyb20gYmxvYiBhbmQgZmlsZSBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIC0tc3lzdGVtIC0tbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkaW5nIGZyb20gbWlzc2luZyByZWYgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmRvZXNub3RleGlzdCAtLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBmcm9tIG5vbi1ibG9iIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRCAtLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dGluZyBhIHZhbHVlIGluIGEgYmxvYiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIHNvbWUudmFsdWUgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIGEgdmFsdWUgaW4gYSBibG9iIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgLS11bnNldCBzb21lLnZhbHVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXRpbmcgYSBibG9iIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgLS1lZGl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnNlIGVycm9ycyBpbiBibG9icyBhcmUgcHJvcGVybHkgYXR0cmlidXRlZCcgJworCWNhdCA+Y29uZmlnIDw8LVxFT0YgJiYKKwlbc29tZV0KKwkJdmFsdWUgPSAiCisJRU9GCisJZ2l0IGFkZCBjb25maWcgJiYKKwlnaXQgY29tbWl0IC1tIGJyb2tlbiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgc29tZS52YWx1ZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkhFQUQ6Y29uZmlnIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIHBhcnNlIGJsb2IgZW5kaW5nIHdpdGggQ1InICcKKwlwcmludGYgIltzb21lXWtleSA9IHZhbHVlXFxyIiA+Y29uZmlnICYmCisJZ2l0IGFkZCBjb25maWcgJiYKKwlnaXQgY29tbWl0IC1tIENSICYmCisJZWNobyB2YWx1ZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpjb25maWcgc29tZS5rZXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIC0tYmxvYiBvdXRzaWRlIG9mIGEgcmVwb3NpdG9yeSBpcyBhbiBlcnJvcicgJworCW5vbmdpdCB0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1mb28gLS1saXN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwOC1jb25maWctc2V0LnNoIGIvdC90MTMwOC1jb25maWctc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhNTI3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzA4LWNvbmZpZy1zZXQuc2gKQEAgLTAsMCArMSwyODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBjb25maWctc2V0IEFQSSBpbiBkaWZmZXJlbnQgc2V0dGluZ3MnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjICdjaGVja19jb25maWcgZ2V0Xyogc2VjdGlvbi5rZXkgdmFsdWUnIHZlcmlmaWVzIHRoYXQgdGhlIGVudHJ5IGZvcgorIyBzZWN0aW9uLmtleSBpcyAndmFsdWUnCitjaGVja19jb25maWcgKCkgeworCWlmIHRlc3QgIiQxIiA9IGV4cGVjdF9jb2RlCisJdGhlbgorCQlleHBlY3RfY29kZT0iJDIiICYmIHNoaWZ0ICYmIHNoaWZ0CisJZWxzZQorCQlleHBlY3RfY29kZT0wCisJZmkgJiYKKwlvcD0kMSBrZXk9JDIgJiYgc2hpZnQgJiYgc2hpZnQgJiYKKwlpZiB0ZXN0ICQjICE9IDAKKwl0aGVuCisJCXByaW50ZiAiJXNcbiIgIiRAIgorCWZpID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlICRleHBlY3RfY29kZSB0ZXN0LXRvb2wgY29uZmlnICIkb3AiICIka2V5IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkZWZhdWx0IGNvbmZpZycgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRgorCVtjYXNlXQorCQlwZW5ndWluID0gdmVyeSBibHVlCisJCU1vdmllID0gQmFkUGh5c2ljcworCQlVUFBFUkNBU0UgPSB0cnVlCisJCU1peGVkQ2FzZSA9IHRydWUKKwkJbXkgPQorCQlmb28KKwkJYmF6ID0gc2FtCisJW0NvcmVzXQorCQlXaGF0RXZlciA9IFNlY29uZAorCQliYXogPSBiYXIKKwlbY29yZXNdCisJCWJheiA9IGJhdAorCVtDT1JFU10KKwkJYmF6ID0gYmFsbAorCVtteSAiRm9vIGJBciJdCisJCWhpID0gbWl4ZWQtY2FzZQorCVtteSAiRk9PIEJBUiJdCisJCWhpID0gdXBwZXItY2FzZQorCVtteSAiZm9vIGJhciJdCisJCWhpID0gbG93ZXItY2FzZQorCVtjYXNlXQorCQliYXogPSBiYXQKKwkJYmF6ID0gaGFzaworCVtsYW1iXQorCQljaG9wID0gNjUKKwkJaGVhZCA9IG5vbmUKKwlbZ29hdF0KKwkJbGVncyA9IDQKKwkJaGVhZCA9IHRydWUKKwkJc2tpbiA9IGZhbHNlCisJCW5vc2UgPSAxCisJCWhvcm5zCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCB2YWx1ZSBmb3IgYSBzaW1wbGUga2V5JyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjYXNlLnBlbmd1aW4gInZlcnkgYmx1ZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhbHVlIGZvciBhIGtleSB3aXRoIHZhbHVlIGFzIGFuIGVtcHR5IHN0cmluZycgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5teSAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFsdWUgZm9yIGEga2V5IHdpdGggdmFsdWUgYXMgTlVMTCcgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5mb28gIihOVUxMKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBwZXIgY2FzZSBrZXknICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UuVVBQRVJDQVNFICJ0cnVlIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS51cHBlcmNhc2UgInRydWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkIGNhc2Uga2V5JyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjYXNlLk1peGVkQ2FzZSAidHJ1ZSIgJiYKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UuTUlYRURDQVNFICJ0cnVlIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5taXhlZGNhc2UgInRydWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tleSBhbmQgdmFsdWUgd2l0aCBtaXhlZCBjYXNlJyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjYXNlLk1vdmllICJCYWRQaHlzaWNzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgd2l0aCBjYXNlIHNlbnNpdGl2ZSBzdWJzZWN0aW9uJyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSAibXkuRm9vIGJBci5oaSIgIm1peGVkLWNhc2UiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSAibXkuRk9PIEJBUi5oaSIgInVwcGVyLWNhc2UiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSAibXkuZm9vIGJhci5oaSIgImxvd2VyLWNhc2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tleSB3aXRoIGNhc2UgaW5zZW5zaXRpdmUgc2VjdGlvbiBoZWFkZXInICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNvcmVzLmJheiAiYmFsbCIgJiYKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIENvcmVzLmJheiAiYmFsbCIgJiYKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIENPUkVTLmJheiAiYmFsbCIgJiYKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNvcmVTLmJheiAiYmFsbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2V5IHdpdGggY2FzZSBpbnNlbnNpdGl2ZSBzZWN0aW9uIGhlYWRlciAmIHZhcmlhYmxlJyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBDT1JFUy5CQVogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjb3Jlcy5iYXogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjb3Jlcy5CYVogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjT3JlUy5iQXogImJhbGwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgdmFsdWUgd2l0aCBtaXNzcGVsbGVkIGtleScgJworCWNoZWNrX2NvbmZpZyBleHBlY3RfY29kZSAxIGdldF92YWx1ZSAibXkuZk9vIEJhci5oaSIgIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCJteS5mT28gQmFyLmhpXCIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5iYXogImhhc2siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgaW50ZWdlciB2YWx1ZSBmb3IgYSBrZXknICcKKwljaGVja19jb25maWcgZ2V0X2ludCBsYW1iLmNob3AgNjUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBzdHJpbmcgdmFsdWUgZm9yIGEga2V5JyAnCisJY2hlY2tfY29uZmlnIGdldF9zdHJpbmcgY2FzZS5iYXogaGFzayAmJgorCWNoZWNrX2NvbmZpZyBleHBlY3RfY29kZSAxIGdldF9zdHJpbmcgY2FzZS5iYSAiVmFsdWUgbm90IGZvdW5kIGZvciBcImNhc2UuYmFcIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbGluZSBlcnJvciB3aGVuIE5VTEwgc3RyaW5nIGlzIHF1ZXJpZWQnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCB0ZXN0LXRvb2wgY29uZmlnIGdldF9zdHJpbmcgY2FzZS5mb28gMj5yZXN1bHQgJiYKKwl0ZXN0X2kxOG5ncmVwICJmYXRhbDogLipjYXNlXC5mb28uKlwuZ2l0L2NvbmZpZy4qbGluZSA3IiByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBpbnRlZ2VyIGlmIHZhbHVlIGlzIG5vbiBwYXJzZS1hYmxlJyAnCisJY2hlY2tfY29uZmlnIGV4cGVjdF9jb2RlIDEyOCBnZXRfaW50IGxhbWIuaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIGJvb2wgdmFsdWUgZm9yIHRoZSBlbnRlcmVkIGtleScgJworCWNoZWNrX2NvbmZpZyBnZXRfYm9vbCBnb2F0LmhlYWQgMSAmJgorCWNoZWNrX2NvbmZpZyBnZXRfYm9vbCBnb2F0LnNraW4gMCAmJgorCWNoZWNrX2NvbmZpZyBnZXRfYm9vbCBnb2F0Lm5vc2UgMSAmJgorCWNoZWNrX2NvbmZpZyBnZXRfYm9vbCBnb2F0Lmhvcm5zIDEgJiYKKwljaGVja19jb25maWcgZ2V0X2Jvb2wgZ29hdC5sZWdzIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBtdWx0aXBsZSB2YWx1ZXMnICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlX211bHRpIGNhc2UuYmF6IHNhbSBiYXQgaGFzaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHZhbHVlIGZyb20gYSBjb25maWdzZXQnICcKKwljYXQgPmNvbmZpZzIgPDwtXEVPRiAmJgorCVtjYXNlXQorCQliYXogPSBsYW1hCisJW215XQorCQluZXcgPSBzaWxrCisJW2Nhc2VdCisJCWJheiA9IGJhbGwKKwlFT0YKKwllY2hvIHNpbGsgPmV4cGVjdCAmJgorCXRlc3QtdG9vbCBjb25maWcgY29uZmlnc2V0X2dldF92YWx1ZSBteS5uZXcgY29uZmlnMiAuZ2l0L2NvbmZpZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHZhbHVlIHdpdGggaGlnaGVzdCBwcmlvcml0eSBmcm9tIGEgY29uZmlnc2V0JyAnCisJZWNobyBoYXNrID5leHBlY3QgJiYKKwl0ZXN0LXRvb2wgY29uZmlnIGNvbmZpZ3NldF9nZXRfdmFsdWUgY2FzZS5iYXogY29uZmlnMiAuZ2l0L2NvbmZpZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHZhbHVlX2xpc3QgZm9yIGEga2V5IGZyb20gYSBjb25maWdzZXQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbGFtYQorCWJhbGwKKwlzYW0KKwliYXQKKwloYXNrCisJRU9GCisJdGVzdC10b29sIGNvbmZpZyBjb25maWdzZXRfZ2V0X3ZhbHVlX211bHRpIGNhc2UuYmF6IGNvbmZpZzIgLmdpdC9jb25maWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGVycm9yIG9uIG5vbi1leGlzdGVudCBmaWxlcycgJworCWVjaG8gIkVycm9yICgtMSkgcmVhZGluZyBjb25maWd1cmF0aW9uIGZpbGUgbm9uLWV4aXN0ZW50LWZpbGUuIiA+ZXhwZWN0ICYmCisJdGVzdF9leHBlY3RfY29kZSAyIHRlc3QtdG9vbCBjb25maWcgY29uZmlnc2V0X2dldF92YWx1ZSBmb28uYmFyIG5vbi1leGlzdGVudC1maWxlIDI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXIgZXJyb3Igb24gZGlyZWN0b3J5ICJmaWxlcyInICcKKwllY2hvICJFcnJvciAoLTEpIHJlYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlIGEtZGlyZWN0b3J5LiIgPmV4cGVjdCAmJgorCW1rZGlyIGEtZGlyZWN0b3J5ICYmCisJdGVzdF9leHBlY3RfY29kZSAyIHRlc3QtdG9vbCBjb25maWcgY29uZmlnc2V0X2dldF92YWx1ZSBmb28uYmFyIGEtZGlyZWN0b3J5IDI+b3V0cHV0ICYmCisJZ3JlcCAiXndhcm5pbmc6IiBvdXRwdXQgJiYKKwlncmVwICJeRXJyb3IiIG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3Byb3BlciBlcnJvciBvbiBub24tYWNjZXNzaWJsZSBmaWxlcycgJworCWNobW9kIC1yIC5naXQvY29uZmlnICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCArciAuZ2l0L2NvbmZpZyIgJiYKKwllY2hvICJFcnJvciAoLTEpIHJlYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlIC5naXQvY29uZmlnLiIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiB0ZXN0LXRvb2wgY29uZmlnIGNvbmZpZ3NldF9nZXRfdmFsdWUgZm9vLmJhciAuZ2l0L2NvbmZpZyAyPm91dHB1dCAmJgorCWdyZXAgIl53YXJuaW5nOiIgb3V0cHV0ICYmCisJZ3JlcCAiXkVycm9yIiBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGVycm9yIG9uIGVycm9yIGluIGRlZmF1bHQgY29uZmlnIGZpbGVzJyAnCisJY3AgLmdpdC9jb25maWcgLmdpdC9jb25maWcub2xkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiAuZ2l0L2NvbmZpZy5vbGQgLmdpdC9jb25maWciICYmCisJZWNobyAiWyIgPj4uZ2l0L2NvbmZpZyAmJgorCWVjaG8gImZhdGFsOiBiYWQgY29uZmlnIGxpbmUgMzQgaW4gZmlsZSAuZ2l0L2NvbmZpZyIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IHRlc3QtdG9vbCBjb25maWcgZ2V0X3ZhbHVlIGZvby5iYXIgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXIgZXJyb3Igb24gZXJyb3IgaW4gY3VzdG9tIGNvbmZpZyBmaWxlcycgJworCWVjaG8gIlsiID4+c3ludGF4LWVycm9yICYmCisJZWNobyAiZmF0YWw6IGJhZCBjb25maWcgbGluZSAxIGluIGZpbGUgc3ludGF4LWVycm9yIiA+ZXhwZWN0ICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggdGVzdC10b29sIGNvbmZpZyBjb25maWdzZXRfZ2V0X3ZhbHVlIGZvby5iYXIgc3ludGF4LWVycm9yIDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbGluZSBlcnJvcnMgZm9yIG1hbGZvcm1lZCB2YWx1ZXMnICcKKwltdiAuZ2l0L2NvbmZpZyAuZ2l0L2NvbmZpZy5vbGQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IC5naXQvY29uZmlnLm9sZCAuZ2l0L2NvbmZpZyIgJiYKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbYWxpYXNdCisJCWJyCisJRU9GCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGJyIDI+cmVzdWx0ICYmCisJdGVzdF9pMThuZ3JlcCAibWlzc2luZyB2YWx1ZSBmb3IgLmFsaWFzXC5iciIgcmVzdWx0ICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IC4qXC5naXQvY29uZmlnIiByZXN1bHQgJiYKKwl0ZXN0X2kxOG5ncmVwICJmYXRhbDogLipsaW5lIDIiIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBvbiBtb2RpZnlpbmcgcmVwbyBjb25maWcgd2l0aG91dCByZXBvJyAnCisJbm9uZ2l0IHRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYS5iIGMgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgaW4gYSBnaXQgZGlyZWN0b3J5IiBlcnIKKycKKworY21kbGluZV9jb25maWc9Iidmb28uYmFyPWZyb20tY21kbGluZSciCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpdGVyYXRpb24gc2hvd3MgY29ycmVjdCBvcmlnaW5zJyAnCisJcHJpbnRmICJbaWdub3JlXVxuXHR0aGlzID0gcGxlYXNlXG5bZm9vXWJhciA9IGZyb20tcmVwb1xuIiA+LmdpdC9jb25maWcgJiYKKwlwcmludGYgIltmb29dXG5cdGJhciA9IGZyb20taG9tZVxuIiA+LmdpdGNvbmZpZyAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgTUlOR1cKKwl0aGVuCisJCSMgVXNlIFdpbmRvd3MgcGF0aCAoaS5lLiAqbm90KiAkSE9NRSkKKwkJSE9NRV9HSVRDT05GSUc9JChwd2QpLy5naXRjb25maWcKKwllbHNlCisJCSMgRG8gbm90IGdldCBmb29sZWQgYnkgc3ltYm9saWMgbGlua3MsIGkuZS4gJEhPTUUgIT0gJChwd2QpCisJCUhPTUVfR0lUQ09ORklHPSRIT01FLy5naXRjb25maWcKKwlmaSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWtleT1mb28uYmFyCisJdmFsdWU9ZnJvbS1ob21lCisJb3JpZ2luPWZpbGUKKwluYW1lPSRIT01FX0dJVENPTkZJRworCWxubz0yCisJc2NvcGU9Z2xvYmFsCisKKwlrZXk9aWdub3JlLnRoaXMKKwl2YWx1ZT1wbGVhc2UKKwlvcmlnaW49ZmlsZQorCW5hbWU9LmdpdC9jb25maWcKKwlsbm89MgorCXNjb3BlPWxvY2FsCisKKwlrZXk9Zm9vLmJhcgorCXZhbHVlPWZyb20tcmVwbworCW9yaWdpbj1maWxlCisJbmFtZT0uZ2l0L2NvbmZpZworCWxubz0zCisJc2NvcGU9bG9jYWwKKworCWtleT1mb28uYmFyCisJdmFsdWU9ZnJvbS1jbWRsaW5lCisJb3JpZ2luPWNvbW1hbmQgbGluZQorCW5hbWU9CisJbG5vPS0xCisJc2NvcGU9Y29tbWFuZAorCUVPRgorCUdJVF9DT05GSUdfUEFSQU1FVEVSUz0kY21kbGluZV9jb25maWcgdGVzdC10b29sIGNvbmZpZyBpdGVyYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwOS1lYXJseS1jb25maWcuc2ggYi90L3QxMzA5LWVhcmx5LWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYmI4ZTFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwOS1lYXJseS1jb25maWcuc2gKQEAgLTAsMCArMSwxMDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlYWRfZWFybHlfY29uZmlnKCknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIGVhcmx5IGNvbmZpZycgJworCXRlc3RfY29uZmlnIGVhcmx5LmNvbmZpZyBjb3JyZWN0ICYmCisJdGVzdC10b29sIGNvbmZpZyByZWFkX2Vhcmx5X2NvbmZpZyBlYXJseS5jb25maWcgPm91dHB1dCAmJgorCXRlc3QgY29ycmVjdCA9ICIkKGNhdCBvdXRwdXQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbiBhIHN1Yi1kaXJlY3RvcnknICcKKwl0ZXN0X2NvbmZpZyBlYXJseS5jb25maWcgc3ViICYmCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJdGVzdC10b29sIGNvbmZpZyByZWFkX2Vhcmx5X2NvbmZpZyBlYXJseS5jb25maWcKKwkpID5vdXRwdXQgJiYKKwl0ZXN0IHN1YiA9ICIkKGNhdCBvdXRwdXQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZWlsaW5nJyAnCisJdGVzdF9jb25maWcgZWFybHkuY29uZmlnIGNlaWxpbmcgJiYKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkUFdEIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgc3ViICYmCisJCXRlc3QtdG9vbCBjb25maWcgcmVhZF9lYXJseV9jb25maWcgZWFybHkuY29uZmlnCisJKSA+b3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZWlsaW5nICMyJyAnCisJbWtkaXIgLXAgeGRnL2dpdCAmJgorCWdpdCBjb25maWcgLWYgeGRnL2dpdC9jb25maWcgZWFybHkuY29uZmlnIHhkZyAmJgorCXRlc3RfY29uZmlnIGVhcmx5LmNvbmZpZyBjZWlsaW5nICYmCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQlYREdfQ09ORklHX0hPTUU9IiRQV0QiL3hkZyAmJgorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFBXRCIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTIFhER19DT05GSUdfSE9NRSAmJgorCQljZCBzdWIgJiYKKwkJdGVzdC10b29sIGNvbmZpZyByZWFkX2Vhcmx5X2NvbmZpZyBlYXJseS5jb25maWcKKwkpID5vdXRwdXQgJiYKKwl0ZXN0IHhkZyA9ICIkKGNhdCBvdXRwdXQpIgorJworCitjbWRsaW5lX2NvbmZpZz0iJ3Rlc3Quc291cmNlPWNtZGxpbmUnIgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCBjb25maWcgZmlsZSBpbiByaWdodCBvcmRlcicgJworCWVjaG8gIlt0ZXN0XXNvdXJjZSA9IGhvbWUiID4+LmdpdGNvbmZpZyAmJgorCWdpdCBpbml0IGZvbyAmJgorCSgKKwkJY2QgZm9vICYmCisJCWVjaG8gIlt0ZXN0XXNvdXJjZSA9IHJlcG8iID4+LmdpdC9jb25maWcgJiYKKwkJR0lUX0NPTkZJR19QQVJBTUVURVJTPSRjbWRsaW5lX2NvbmZpZyB0ZXN0LXRvb2wgY29uZmlnIFwKKwkJCXJlYWRfZWFybHlfY29uZmlnIHRlc3Quc291cmNlID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCWhvbWUKKwkJcmVwbworCQljbWRsaW5lCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3Rfd2l0aF9jb25maWcgKCkgeworCXJtIC1yZiB0aHJvd2F3YXkgJiYKKwlnaXQgaW5pdCB0aHJvd2F3YXkgJiYKKwkoCisJCWNkIHRocm93YXdheSAmJgorCQllY2hvICIkKiIgPi5naXQvY29uZmlnICYmCisJCXRlc3QtdG9vbCBjb25maWcgcmVhZF9lYXJseV9jb25maWcgZWFybHkuY29uZmlnCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUgLmdpdC8gd2l0aCBpbmNvbXBhdGlibGUgcmVwb3NpdG9yeSB2ZXJzaW9uJyAnCisJdGVzdF93aXRoX2NvbmZpZyAiW2NvcmVdcmVwb3NpdG9yeWZvcm1hdHZlcnNpb24gPSA5OTk5OTkiIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAid2FybmluZzouKiBFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9IFsxLTldIiBlcnIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnaWdub3JlIC5naXQvIHdpdGggaW52YWxpZCByZXBvc2l0b3J5IHZlcnNpb24nICcKKwl0ZXN0X3dpdGhfY29uZmlnICJbY29yZV1yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA9IGludmFsaWQiCisnCisKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnaWdub3JlIC5naXQvIHdpdGggaW52YWxpZCBjb25maWcnICcKKwl0ZXN0X3dpdGhfY29uZmlnICJbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlYXJseSBjb25maWcgYW5kIG9uYnJhbmNoJyAnCisJZWNobyAiW2Jyb2tlbiIgPmJyb2tlbiAmJgorCXRlc3Rfd2l0aF9jb25maWcgIltpbmNsdWRlaWYgXCJvbmJyYW5jaDptYXN0ZXJcIl1wYXRoPS4uL2Jyb2tlbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25icmFuY2ggY29uZmlnIG91dHNpZGUgb2YgZ2l0IHJlcG8nICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgaW5jbHVkZUlmLm9uYnJhbmNoOm1hc3Rlci5wYXRoIG5vbi1leGlzdGVudCAmJgorCW5vbmdpdCBnaXQgaGVscAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMTAtY29uZmlnLWRlZmF1bHQuc2ggYi90L3QxMzEwLWNvbmZpZy1kZWZhdWx0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNDlkOTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzEwLWNvbmZpZy1kZWZhdWx0LnNoCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBjb25maWcgaW4gZGlmZmVyZW50IHNldHRpbmdzICh3aXRoIC0tZGVmYXVsdCknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2VzIC0tZGVmYXVsdCB3aGVuIGVudHJ5IG1pc3NpbmcnICcKKwllY2hvIHF1dXggPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLWYgY29uZmlnIC0tZGVmYXVsdD1xdXV4IGNvcmUuZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvZXMgbm90IHVzZSAtLWRlZmF1bHQgd2hlbiBlbnRyeSBwcmVzZW50JyAnCisJZWNobyBiYXIgPmV4cGVjdCAmJgorCWdpdCAtYyBjb3JlLmZvbz1iYXIgY29uZmlnIC0tZGVmYXVsdD1iYXogY29yZS5mb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fub25pY2FsaXplcyAtLWRlZmF1bHQgd2l0aCBhcHByb3ByaWF0ZSB0eXBlJyAnCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC1mIGNvbmZpZyAtLWRlZmF1bHQ9eWVzIC0tYm9vbCBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWVzIHdoZW4gLS1kZWZhdWx0IGNhbm5vdCBiZSBwYXJzZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIGNvbmZpZyAtLXR5cGU9ZXhwaXJ5LWRhdGUgLS1kZWZhdWx0PXggLS1nZXQgXAorCQlub3QuYS5zZWN0aW9uIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJmYWlsZWQgdG8gZm9ybWF0IGRlZmF1bHQgY29uZmlnIHZhbHVlIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb2VzIG5vdCBhbGxvdyAtLWRlZmF1bHQgd2l0aG91dCAtLWdldCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1kZWZhdWx0PXF1dXggLS11bnNldCBhLnNlY3Rpb24gPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiXC1cLWRlZmF1bHQgaXMgb25seSBhcHBsaWNhYmxlIHRvIiBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzUwLWNvbmZpZy1ob29rcy1wYXRoLnNoIGIvdC90MTM1MC1jb25maWctaG9va3MtcGF0aC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMWY5YWVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTM1MC1jb25maWctaG9va3MtcGF0aC5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgY29yZS5ob29rc1BhdGggY29uZmlndXJhdGlvbiB2YXJpYWJsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhIHByZS1jb21taXQgaG9vayBpbiBjb3JlLmhvb2tzUGF0aCcgJworCW1rZGlyIC1wIC5naXQvY3VzdG9tLWhvb2tzIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9jdXN0b20taG9va3MvcHJlLWNvbW1pdCA8PC1cRU9GICYmCisJZWNobyBDVVNUT00gPj5hY3R1YWwKKwlFT0YKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wcmUtY29tbWl0IDw8LVxFT0YKKwllY2hvIE5PUk1BTCA+PmFjdHVhbAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB0aGF0IHZhcmlvdXMgZm9ybXMgb2Ygc3BlY2lmeWluZyBjb3JlLmhvb2tzUGF0aCB3b3JrJyAnCisJdGVzdF9jb21taXQgbm9fY3VzdG9tX2hvb2sgJiYKKwlnaXQgY29uZmlnIGNvcmUuaG9va3NQYXRoIC5naXQvY3VzdG9tLWhvb2tzICYmCisJdGVzdF9jb21taXQgaGF2ZV9jdXN0b21faG9vayAmJgorCWdpdCBjb25maWcgY29yZS5ob29rc1BhdGggLmdpdC9jdXN0b20taG9va3MvICYmCisJdGVzdF9jb21taXQgaGF2ZV9jdXN0b21faG9va190cmFpbGluZ19zbGFzaCAmJgorCWdpdCBjb25maWcgY29yZS5ob29rc1BhdGggIiRQV0QvLmdpdC9jdXN0b20taG9va3MiICYmCisJdGVzdF9jb21taXQgaGF2ZV9jdXN0b21faG9va19hYnNfcGF0aCAmJgorCWdpdCBjb25maWcgY29yZS5ob29rc1BhdGggIiRQV0QvLmdpdC9jdXN0b20taG9va3MvIiAmJgorCXRlc3RfY29tbWl0IGhhdmVfY3VzdG9tX2hvb2tfYWJzX3BhdGhfdHJhaWxpbmdfc2xhc2ggJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTk9STUFMCisJQ1VTVE9NCisJQ1VTVE9NCisJQ1VTVE9NCisJQ1VTVE9NCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggaG9va3MnICcKKwlnaXQgY29uZmlnIGNvcmUuaG9va3NQYXRoIC5naXQvY3VzdG9tLWhvb2tzICYmCisJZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGhvb2tzL2FiYyA+YWN0dWFsICYmCisJdGVzdCAuZ2l0L2N1c3RvbS1ob29rcy9hYmMgPSAiJChjYXQgYWN0dWFsKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAwLXVwZGF0ZS1yZWYuc2ggYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTYyMjRlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDAtdXBkYXRlLXJlZi5zaApAQCAtMCwwICsxLDE0MDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHVwZGF0ZS1yZWYgYW5kIGJhc2ljIHJlZiBsb2dnaW5nJworLiAuL3Rlc3QtbGliLnNoCisKK1o9JFpFUk9fT0lECisKK209cmVmcy9oZWFkcy9tYXN0ZXIKK25fZGlyPXJlZnMvaGVhZHMvZ3UKK249JG5fZGlyL2ZpeGVzCitvdXRzaWRlPXJlZnMvZm9vCitiYXJlPWJhcmUtcmVwbworCitjcmVhdGVfdGVzdF9jb21taXRzICgpCit7CisJcHJmeD0iJDEiCisJZm9yIG5hbWUgaW4gQSBCIEMgRCBFIEYKKwlkbworCQl0ZXN0X3RpY2sgJiYKKwkJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCQlzaGExPSQoZWNobyAkbmFtZSB8IGdpdCBjb21taXQtdHJlZSAkVCkgJiYKKwkJZXZhbCAkcHJmeCRuYW1lPSRzaGExCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljcmVhdGVfdGVzdF9jb21taXRzICIiICYmCisJbWtkaXIgJGJhcmUgJiYKKwljZCAkYmFyZSAmJgorCWdpdCBpbml0IC0tYmFyZSAmJgorCWNyZWF0ZV90ZXN0X2NvbW1pdHMgImJhcmUiICYmCisJY2QgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgJG0iICcKKwlnaXQgdXBkYXRlLXJlZiAkbSAkQSAmJgorCXRlc3QgJEEgPSAkKGNhdCAuZ2l0LyRtKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlICRtIHdpdGggb2xkdmFsdWUgdmVyaWZpY2F0aW9uIiAnCisJZ2l0IHVwZGF0ZS1yZWYgJG0gJEIgJEEgJiYKKwl0ZXN0ICRCID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWwgdG8gZGVsZXRlICRtIHdpdGggc3RhbGUgcmVmIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgJG0gJEEgJiYKKwl0ZXN0ICRCID0gIiQoY2F0IC5naXQvJG0pIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlICRtIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIiAmJgorCWdpdCB1cGRhdGUtcmVmIC1kICRtICRCICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC8kbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWxldGUgJG0gd2l0aG91dCBvbGR2YWx1ZSB2ZXJpZmljYXRpb24iICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJG0iICYmCisJZ2l0IHVwZGF0ZS1yZWYgJG0gJEEgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC8kbSkgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCAkbSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvJG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmFpbCB0byBjcmVhdGUgJG4iICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJG5fZGlyIiAmJgorCXRvdWNoIC5naXQvJG5fZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgJG4gJEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlICRtIChieSBIRUFEKSIgJworCWdpdCB1cGRhdGUtcmVmIEhFQUQgJEEgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSAkbSAoYnkgSEVBRCkgd2l0aCBvbGR2YWx1ZSB2ZXJpZmljYXRpb24iICcKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRCICRBICYmCisJdGVzdCAkQiA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYWlsIHRvIGRlbGV0ZSAkbSAoYnkgSEVBRCkgd2l0aCBzdGFsZSByZWYiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtZCBIRUFEICRBICYmCisJdGVzdCAkQiA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWxldGUgJG0gKGJ5IEhFQUQpIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIiAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIEhFQUQgJEIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0LyRtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0aW5nIGN1cnJlbnQgYnJhbmNoIGFkZHMgbWVzc2FnZSB0byBIRUFEJ3MgbG9nIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIiAmJgorCWdpdCB1cGRhdGUtcmVmICRtICRBICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICRtICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gZGVsZXRlLSRtIC1kICRtICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC8kbSAmJgorCWdyZXAgImRlbGV0ZS0kbSQiIC5naXQvbG9ncy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0aW5nIGJ5IEhFQUQgYWRkcyBtZXNzYWdlIHRvIEhFQUQncyBsb2ciICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJG0iICYmCisJZ2l0IHVwZGF0ZS1yZWYgJG0gJEEgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgJG0gJiYKKwlnaXQgdXBkYXRlLXJlZiAtbSBkZWxldGUtYnktaGVhZCAtZCBIRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC8kbSAmJgorCWdyZXAgImRlbGV0ZS1ieS1oZWFkJCIgLmdpdC9sb2dzL0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiBkb2VzIG5vdCBjcmVhdGUgcmVmbG9ncyBieSBkZWZhdWx0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCAkb3V0c2lkZSIgJiYKKwlnaXQgdXBkYXRlLXJlZiAkb3V0c2lkZSAkQSAmJgorCWdpdCByZXYtcGFyc2UgJEEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJG91dHNpZGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyAkb3V0c2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIGNyZWF0ZXMgcmVmbG9ncyB3aXRoIC0tY3JlYXRlLXJlZmxvZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJG91dHNpZGUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1jcmVhdGUtcmVmbG9nICRvdXRzaWRlICRBICYmCisJZ2l0IHJldi1wYXJzZSAkQSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkb3V0c2lkZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZWZsb2cgZXhpc3RzICRvdXRzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZXMgbm8gcmVmbG9nIGluIGJhcmUgcmVwb3NpdG9yeScgJworCWdpdCAtQyAkYmFyZSB1cGRhdGUtcmVmICRtICRiYXJlQSAmJgorCWdpdCAtQyAkYmFyZSByZXYtcGFyc2UgJGJhcmVBID5leHBlY3QgJiYKKwlnaXQgLUMgJGJhcmUgcmV2LXBhcnNlICRtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DICRiYXJlIHJlZmxvZyBleGlzdHMgJG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS5sb2dBbGxSZWZVcGRhdGVzPXRydWUgY3JlYXRlcyByZWZsb2cgaW4gYmFyZSByZXBvc2l0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgJGJhcmUgY29uZmlnIC0tdW5zZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzICYmIFwKKwkJcm0gJGJhcmUvbG9ncy8kbSIgJiYKKwlnaXQgLUMgJGJhcmUgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyB0cnVlICYmCisJZ2l0IC1DICRiYXJlIHVwZGF0ZS1yZWYgJG0gJGJhcmVCICYmCisJZ2l0IC1DICRiYXJlIHJldi1wYXJzZSAkYmFyZUIgPmV4cGVjdCAmJgorCWdpdCAtQyAkYmFyZSByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLUMgJGJhcmUgcmVmbG9nIGV4aXN0cyAkbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JlLmxvZ0FsbFJlZlVwZGF0ZXM9dHJ1ZSBkb2VzIG5vdCBjcmVhdGUgcmVmbG9nIGJ5IGRlZmF1bHQnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJG91dHNpZGUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgJG91dHNpZGUgJEEgJiYKKwlnaXQgcmV2LXBhcnNlICRBID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRvdXRzaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleGlzdHMgJG91dHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS5sb2dBbGxSZWZVcGRhdGVzPWFsd2F5cyBjcmVhdGVzIHJlZmxvZyBieSBkZWZhdWx0JyAnCisJdGVzdF9jb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIGFsd2F5cyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJG91dHNpZGUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgJG91dHNpZGUgJEEgJiYKKwlnaXQgcmV2LXBhcnNlICRBID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRvdXRzaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgJG91dHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29yZS5sb2dBbGxSZWZVcGRhdGVzPWFsd2F5cyBjcmVhdGVzIG5vIHJlZmxvZyBmb3IgT1JJR19IRUFEJyAnCisJdGVzdF9jb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIGFsd2F5cyAmJgorCWdpdCB1cGRhdGUtcmVmIE9SSUdfSEVBRCAkQSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhpc3RzIE9SSUdfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLWNyZWF0ZS1yZWZsb2cgb3ZlcnJpZGVzIGNvcmUubG9nQWxsUmVmVXBkYXRlcz1hbHdheXMnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJG91dHNpZGUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1jcmVhdGUtcmVmbG9nICRvdXRzaWRlICRBICYmCisJZ2l0IHJldi1wYXJzZSAkQSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkb3V0c2lkZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhpc3RzICRvdXRzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSAkbSAoYnkgSEVBRCkiICcKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRBICYmCisJdGVzdCAkQSA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHJlZnMnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtb3ZlICRtIChieSBIRUFEKSIgJworCWdpdCB1cGRhdGUtcmVmIEhFQUQgJEIgJEEgJiYKKwl0ZXN0ICRCID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0ZSAkbSAoYnkgSEVBRCkgc2hvdWxkIHJlbW92ZSBib3RoIHBhY2tlZCBhbmQgbG9vc2UgJG0iICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJG0iICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgSEVBRCAkQiAmJgorCSEgZ3JlcCAiJG0iIC5naXQvcGFja2VkLXJlZnMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0LyRtCisnCisKK2NwIC1mIC5naXQvSEVBRCAuZ2l0L0hFQUQub3JpZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIHN5bXJlZiB3aXRob3V0IGRlcmVmZXJlbmNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjcCAtZiAuZ2l0L0hFQUQub3JpZyAuZ2l0L0hFQUQiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCBIRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBzeW1yZWYgd2l0aG91dCBkZXJlZmVyZW5jZSB3aGVuIHRoZSByZWZlcnJlZCByZWYgaXMgcGFja2VkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjcCAtZiAuZ2l0L0hFQUQub3JpZyAuZ2l0L0hFQUQiICYmCisJZWNobyBmb28gPmZvby5jICYmCisJZ2l0IGFkZCBmb28uYyAmJgorCWdpdCBjb21taXQgLW0gZm9vICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvSEVBRAorJworCitnaXQgdXBkYXRlLXJlZiAtZCAkbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC1kIGlzIG5vdCBjb25mdXNlZCBieSBzZWxmLXJlZmVyZW5jZScgJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9zZWxmIHJlZnMvaGVhZHMvc2VsZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL3NlbGYiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3NlbGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL3NlbGYgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvc2VsZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgY2FuIGRlbGV0ZSBzZWxmLXJlZmVyZW5jZScgJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9zZWxmIHJlZnMvaGVhZHMvc2VsZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL3NlbGYiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3NlbGYgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIHJlZnMvaGVhZHMvc2VsZiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9zZWxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCBjYW4gZGVsZXRlIHJlZmVyZW5jZSB0byBiYWQgcmVmJyAnCisJPi5naXQvcmVmcy9oZWFkcy9iYWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9iYWQiICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3JlZi10by1iYWQgcmVmcy9oZWFkcy9iYWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9yZWYtdG8tYmFkIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9yZWYtdG8tYmFkICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCByZWZzL2hlYWRzL3JlZi10by1iYWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvcmVmLXRvLWJhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcobm90KSBjcmVhdGUgSEVBRCB3aXRoIG9sZCBzaGExJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQSAkQgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiKG5vdCkgcHJpb3IgY3JlYXRlZCAuZ2l0LyRtIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRtIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvJG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIEhFQUQnICcKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRBCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcobm90KSBjaGFuZ2UgSEVBRCB3aXRoIHdyb25nIFNIQTEnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiBIRUFEICRCICRaCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIobm90KSBjaGFuZ2VkIC5naXQvJG0iICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJG0iICYmCisJISB0ZXN0ICRCID0gJChjYXQgLmdpdC8kbSkKKycKKworcm0gLWYgLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgJG0gKGxvZ2dlZCBieSB0b3VjaCkiICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgZmFsc2UgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzAiIFwKKwlnaXQgdXBkYXRlLXJlZiAtLWNyZWF0ZS1yZWZsb2cgSEVBRCAkQSAtbSAiSW5pdGlhbCBDcmVhdGlvbiIgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInVwZGF0ZSAkbSAobG9nZ2VkIGJ5IHRvdWNoKSIgJworCXRlc3RfY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBmYWxzZSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMSIgXAorCWdpdCB1cGRhdGUtcmVmIEhFQUQgJEIgJEEgLW0gIlN3aXRjaCIgJiYKKwl0ZXN0ICRCID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldCAkbSAobG9nZ2VkIGJ5IHRvdWNoKSIgJworCXRlc3RfY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBmYWxzZSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzo0MSIgXAorCWdpdCB1cGRhdGUtcmVmIEhFQUQgJEEgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC8kbSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHJlbW92YWwnICcKKwlnaXQgYnJhbmNoIGQxL2QyL3IxIEhFQUQgJiYKKwlnaXQgYnJhbmNoIGQxL3IyIEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZDEvZDIvcjEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9kMS9kMi9yMSAmJgorCWdpdCBicmFuY2ggLWQgZDEvZDIvcjEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvZDEvZDIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9kMS9kMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9kMS9yMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbG9ncy9yZWZzL2hlYWRzL2QxL3IyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bXJlZiBlbXB0eSBkaXJlY3RvcnkgcmVtb3ZhbCcgJworCWdpdCBicmFuY2ggZTEvZTIvcjEgSEVBRCAmJgorCWdpdCBicmFuY2ggZTEvcjIgSEVBRCAmJgorCWdpdCBjaGVja291dCBlMS9lMi9yMSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZTEvZTIvcjEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9lMS9lMi9yMSAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvZTEvZTIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9lMS9lMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9lMS9yMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbG9ncy9yZWZzL2hlYWRzL2UxL3IyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9sb2dzL0hFQUQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyRaICRBICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMjAwICswMDAwCUluaXRpYWwgQ3JlYXRpb24KKyRBICRCICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMjYwICswMDAwCVN3aXRjaAorJEIgJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA4NjAgKzAwMDAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAidmVyaWZ5aW5nICRtJ3MgbG9nIChsb2dnZWQgYnkgdG91Y2gpIiAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgLmdpdC8kbSAuZ2l0L2xvZ3MgZXhwZWN0IiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvJG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlICRtIChsb2dnZWQgYnkgY29uZmlnKSIgJworCXRlc3RfY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyB0cnVlICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMyIiBcCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQSAtbSAiSW5pdGlhbCBDcmVhdGlvbiIgJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInVwZGF0ZSAkbSAobG9nZ2VkIGJ5IGNvbmZpZykiICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMyIgXAorCWdpdCB1cGRhdGUtcmVmIEhFQUQnIiAkQiAkQSAiJy1tICJTd2l0Y2giICYmCisJdGVzdCAkQiA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXQgJG0gKGxvZ2dlZCBieSBjb25maWcpIiAnCisJdGVzdF9jb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIHRydWUgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDMiIFwKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRBICYmCisJdGVzdCAkQSA9ICQoY2F0IC5naXQvJG0pCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskWiAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDMyMCArMDAwMAlJbml0aWFsIENyZWF0aW9uCiskQSAkQiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDM4MCArMDAwMAlTd2l0Y2gKKyRCICRBICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwOTgwICswMDAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZlcmlmeWluZyAkbSdzIGxvZyAobG9nZ2VkIGJ5IGNvbmZpZykiICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJG0gLmdpdC9sb2dzLyRtIGV4cGVjdCIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9sb2dzLyRtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmb3IgcXVlcnlpbmcgdGhlIHJlZmxvZycgJworCWdpdCB1cGRhdGUtcmVmICRtICREICYmCisJY2F0ID4uZ2l0L2xvZ3MvJG0gPDwtRU9GCisJJFogJEMgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzMjAgLTA1MDAKKwkkQyAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDM1MCAtMDUwMAorCSRBICRCICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzgwIC0wNTAwCisJJEYgJFogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA2ODAgLTA1MDAKKwkkWiAkRSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDk4MCAtMDUwMAorCUVPRgorJworCitlZD0iVGh1LCAyNiBNYXkgMjAwNSAxODozMjowMCAtMDUwMCIKK2dkPSJUaHUsIDI2IE1heSAyMDA1IDE4OjMzOjAwIC0wNTAwIgorbGQ9IlRodSwgMjYgTWF5IDIwMDUgMTg6NDM6MDAgLTA1MDAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHtNYXkgMjUgMjAwNX0iIChiZWZvcmUgaGlzdG9yeSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNSAyMDA1fSIgPm8gMj5lICYmCisJZWNobyAiJEMiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbyAmJgorCWVjaG8gIndhcm5pbmc6IGxvZyBmb3IgJ1wnJ21hc3RlcidcJycgb25seSBnb2VzIGJhY2sgdG8gJGVkIiA+ZXhwZWN0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSBtYXN0ZXJAezIwMDUtMDUtMjV9IChiZWZvcmUgaGlzdG9yeSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7MjAwNS0wNS0yNX0gPm8gMj5lICYmCisJZWNobyAiJEMiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbyAmJgorCWVjaG8gIndhcm5pbmc6IGxvZyBmb3IgJ1wnJ21hc3RlcidcJycgb25seSBnb2VzIGJhY2sgdG8gJGVkIiA+ZXhwZWN0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMTo1OX0iICgxIHNlY29uZCBiZWZvcmUgaGlzdG9yeSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMxOjU5fSIgPm8gMj5lICYmCisJZWNobyAiJEMiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbyAmJgorCWVjaG8gIndhcm5pbmc6IGxvZyBmb3IgJ1wnJ21hc3RlcidcJycgb25seSBnb2VzIGJhY2sgdG8gJGVkIiA+ZXhwZWN0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMjowMH0iIChleGFjdGx5IGhpc3Rvcnkgc3RhcnQpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMjowMH0iID5vIDI+ZSAmJgorCWVjaG8gIiRDIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG8gJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MzB9IiAoZmlyc3Qgbm9uLWNyZWF0aW9uIGNoYW5nZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMyOjMwfSIgPm8gMj5lICYmCisJZWNobyAiJEEiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjMzOjAxfSIgKG1pZGRsZSBvZiBoaXN0b3J5IHdpdGggZ2FwKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbyBlIiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzozMzowMX0iID5vIDI+ZSAmJgorCWVjaG8gIiRCIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG8gJiYKKwl0ZXN0X2kxOG5ncmVwIC1GICJ3YXJuaW5nOiBsb2cgZm9yIHJlZiAkbSBoYXMgZ2FwIGFmdGVyICRnZCIgZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzozODowMH0iIChtaWRkbGUgb2YgaGlzdG9yeSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6Mzg6MDB9IiA+byAyPmUgJiYKKwllY2hvICIkWiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGUKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1ZXJ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6NDM6MDB9IiAoZXhhY3QgZW5kIG9mIGhpc3RvcnkpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjQzOjAwfSIgPm8gMj5lICYmCisJZWNobyAiJEUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHsyMDA1LTA1LTI4fSIgKHBhc3QgZW5kIG9mIGhpc3RvcnkpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHsyMDA1LTA1LTI4fSIgPm8gMj5lICYmCisJZWNobyAiJEQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbyAmJgorCXRlc3RfaTE4bmdyZXAgLUYgIndhcm5pbmc6IGxvZyBmb3IgcmVmICRtIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAkbGQiIGUKKycKKworcm0gLWYgLmdpdC8kbSAuZ2l0L2xvZ3MvJG0gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGluaXRpYWwgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLWYgTSAmJgorCWVjaG8gVEVTVCA+RiAmJgorCWdpdCBhZGQgRiAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNS0wNS0yNiAyMzozMCIgXAorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMCIgZ2l0IGNvbW1pdCAtbSBhZGQgLWEgJiYKKwloX1RFU1Q9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZWNobyBUaGUgb3RoZXIgZGF5IHRoaXMgZGlkIG5vdCB3b3JrLiA+TSAmJgorCWVjaG8gQW5kIHRoZW4gQm9iIHRvbGQgbWUgaG93IHRvIGZpeCBpdC4gPj5NICYmCisJZWNobyBPVEhFUiA+RiAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNS0wNS0yNiAyMzo0MSIgXAorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzo0MSIgZ2l0IGNvbW1pdCAtRiBNIC1hICYmCisJaF9PVEhFUj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDQiIFwKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDQiIGdpdCBjb21taXQgLS1hbWVuZCAmJgorCWhfRklYRUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZWNobyBNZXJnZWQgaW5pdGlhbCBjb21taXQgYW5kIGEgbGF0ZXIgY29tbWl0LiA+TSAmJgorCWVjaG8gJGhfVEVTVCA+LmdpdC9NRVJHRV9IRUFEICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQ1IiBcCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQ1IiBnaXQgY29tbWl0IC1GIE0gJiYKKwloX01FUkdFRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyRaICRoX1RFU1QgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAyMDAgKzAwMDAJY29tbWl0IChpbml0aWFsKTogYWRkCiskaF9URVNUICRoX09USEVSICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwODYwICswMDAwCWNvbW1pdDogVGhlIG90aGVyIGRheSB0aGlzIGRpZCBub3Qgd29yay4KKyRoX09USEVSICRoX0ZJWEVEICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUxMDQwICswMDAwCWNvbW1pdCAoYW1lbmQpOiBUaGUgb3RoZXIgZGF5IHRoaXMgZGlkIG5vdCB3b3JrLgorJGhfRklYRUQgJGhfTUVSR0VEICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUxMTAwICswMDAwCWNvbW1pdCAobWVyZ2UpOiBNZXJnZWQgaW5pdGlhbCBjb21taXQgYW5kIGEgbGF0ZXIgY29tbWl0LgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0IGxvZ2dlZCB1cGRhdGVzJyAnCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy8kbQorJwordW5zZXQgaF9URVNUIGhfT1RIRVIgaF9GSVhFRCBoX01FUkdFRAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6RiAoZXhwZWN0IE9USEVSKScgJworCXRlc3QgT1RIRVIgPSAkKGdpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpGKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyQHsyMDA1LTA1LTI2IDIzOjMwfTpGIChleHBlY3QgVEVTVCknICcKKwl0ZXN0IFRFU1QgPSAkKGdpdCBjYXQtZmlsZSBibG9iICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6MzB9OkYiKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyQHsyMDA1LTA1LTI2IDIzOjQyfTpGIChleHBlY3QgT1RIRVIpJyAnCisJdGVzdCBPVEhFUiA9ICQoZ2l0IGNhdC1maWxlIGJsb2IgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzo0Mn06RiIpCisnCisKKyMgVGVzdCBhZGRpbmcgYW5kIGRlbGV0aW5nIHBzZXVkb3JlZnMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2ZW4gb2xkIHZhbHVlIGZvciBtaXNzaW5nIHBzZXVkb3JlZiwgZG8gbm90IGNyZWF0ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIFBTRVVET1JFRiAkQSAkQiAyPmVyciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvUFNFVURPUkVGICYmCisJdGVzdF9pMThuZ3JlcCAiY291bGQgbm90IHJlYWQgcmVmIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBzZXVkb3JlZicgJworCWdpdCB1cGRhdGUtcmVmIFBTRVVET1JFRiAkQSAmJgorCXRlc3QgJEEgPSAkKGNhdCAuZ2l0L1BTRVVET1JFRikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcndyaXRlIHBzZXVkb3JlZiB3aXRoIG5vIG9sZCB2YWx1ZSBnaXZlbicgJworCWdpdCB1cGRhdGUtcmVmIFBTRVVET1JFRiAkQiAmJgorCXRlc3QgJEIgPSAkKGNhdCAuZ2l0L1BTRVVET1JFRikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcndyaXRlIHBzZXVkb3JlZiB3aXRoIGNvcnJlY3Qgb2xkIHZhbHVlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgUFNFVURPUkVGICRDICRCICYmCisJdGVzdCAkQyA9ICQoY2F0IC5naXQvUFNFVURPUkVGKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3Qgb3ZlcndyaXRlIHBzZXVkb3JlZiB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIFBTRVVET1JFRiAkRCAkRSAyPmVyciAmJgorCXRlc3QgJEMgPSAkKGNhdCAuZ2l0L1BTRVVET1JFRikgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1bmV4cGVjdGVkIG9iamVjdCBJRCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBwc2V1ZG9yZWYnICcKKwlnaXQgdXBkYXRlLXJlZiAtZCBQU0VVRE9SRUYgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L1BTRVVET1JFRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgZGVsZXRlIHBzZXVkb3JlZiB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCWdpdCB1cGRhdGUtcmVmIFBTRVVET1JFRiAkQSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kIFBTRVVET1JFRiAkQiAyPmVyciAmJgorCXRlc3QgJEEgPSAkKGNhdCAuZ2l0L1BTRVVET1JFRikgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1bmV4cGVjdGVkIG9iamVjdCBJRCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBwc2V1ZG9yZWYgd2l0aCBjb3JyZWN0IG9sZCB2YWx1ZScgJworCWdpdCB1cGRhdGUtcmVmIC1kIFBTRVVET1JFRiAkQSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvUFNFVURPUkVGCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwc2V1ZG9yZWYgd2l0aCBvbGQgT0lEIHplcm8nICcKKwlnaXQgdXBkYXRlLXJlZiBQU0VVRE9SRUYgJEEgJFogJiYKKwl0ZXN0ICRBID0gJChjYXQgLmdpdC9QU0VVRE9SRUYpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBvdmVyd3JpdGUgcHNldWRvcmVmIHdpdGggb2xkIE9JRCB6ZXJvJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCB1cGRhdGUtcmVmIC1kIFBTRVVET1JFRiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIFBTRVVET1JFRiAkQiAkWiAyPmVyciAmJgorCXRlc3QgJEEgPSAkKGNhdCAuZ2l0L1BTRVVET1JFRikgJiYKKwl0ZXN0X2kxOG5ncmVwICJhbHJlYWR5IGV4aXN0cyIgZXJyCisnCisKKyMgVGVzdCAtLXN0ZGluCisKK2E9cmVmcy9oZWFkcy9hCitiPXJlZnMvaGVhZHMvYgorYz1yZWZzL2hlYWRzL2MKK0U9JyIiJworRj0nJXNcMCcKK3B3cz0ncGF0aCB3aXRoIHNwYWNlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB0ZXN0IHNldHVwJyAnCisJZWNobyAiJHB3cyIgPiIkcHdzIiAmJgorCWdpdCBhZGQgLS0gIiRwd3MiICYmCisJZ2l0IGNvbW1pdCAtbSAiJHB3cyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLXogZmFpbHMgd2l0aG91dCAtLXN0ZGluJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogJG0gJG0gJG0gMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1c2FnZTogZ2l0IHVwZGF0ZS1yZWYiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB3b3JrcyB3aXRoIG5vIGlucHV0JyAnCisJPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIG9uIGVtcHR5IGxpbmUnICcKKwllY2hvICIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGVtcHR5IGNvbW1hbmQgaW4gaW5wdXQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBvbiBvbmx5IHdoaXRlc3BhY2UnICcKKwllY2hvICIgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB3aGl0ZXNwYWNlIGJlZm9yZSBjb21tYW5kOiAgIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgb24gbGVhZGluZyB3aGl0ZXNwYWNlJyAnCisJZWNobyAiIGNyZWF0ZSAkYSAkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogd2hpdGVzcGFjZSBiZWZvcmUgY29tbWFuZDogIGNyZWF0ZSAkYSAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIG9uIHVua25vd24gY29tbWFuZCcgJworCWVjaG8gInVua25vd24gJGEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVua25vd24gY29tbWFuZDogdW5rbm93biAkYSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIG9uIHVuYmFsYW5jZWQgcXVvdGVzJyAnCisJZWNobyAiY3JlYXRlICRhIFwibWFzdGVyIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBiYWRseSBxdW90ZWQgYXJndW1lbnQ6IFxcXCJtYXN0ZXIiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBvbiBpbnZhbGlkIGVzY2FwZScgJworCWVjaG8gImNyZWF0ZSAkYSBcIm1hXHp0ZXJcIiIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogYmFkbHkgcXVvdGVkIGFyZ3VtZW50OiBcXFwibWFcXFxcenRlclxcXCIiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBvbiBqdW5rIGFmdGVyIHF1b3RlZCBhcmd1bWVudCcgJworCWVjaG8gImNyZWF0ZSBcIiRhXCJtYXN0ZXIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHF1b3RlZCBhcmd1bWVudDogXFxcIiRhXFxcIm1hc3RlciIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIGNyZWF0ZSB3aXRoIG5vIHJlZicgJworCWVjaG8gImNyZWF0ZSAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZTogbWlzc2luZyA8cmVmPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIGNyZWF0ZSB3aXRoIG5vIG5ldyB2YWx1ZScgJworCWVjaG8gImNyZWF0ZSAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlICRhOiBtaXNzaW5nIDxuZXd2YWx1ZT4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBjcmVhdGUgd2l0aCB0b28gbWFueSBhcmd1bWVudHMnICcKKwllY2hvICJjcmVhdGUgJGEgJG0gJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYTogZXh0cmEgaW5wdXQ6ICAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIHVwZGF0ZSB3aXRoIG5vIHJlZicgJworCWVjaG8gInVwZGF0ZSAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVwZGF0ZTogbWlzc2luZyA8cmVmPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIHVwZGF0ZSB3aXRoIG5vIG5ldyB2YWx1ZScgJworCWVjaG8gInVwZGF0ZSAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRhOiBtaXNzaW5nIDxuZXd2YWx1ZT4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyB1cGRhdGUgd2l0aCB0b28gbWFueSBhcmd1bWVudHMnICcKKwllY2hvICJ1cGRhdGUgJGEgJG0gJG0gJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVwZGF0ZSAkYTogZXh0cmEgaW5wdXQ6ICAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIGRlbGV0ZSB3aXRoIG5vIHJlZicgJworCWVjaG8gImRlbGV0ZSAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGRlbGV0ZTogbWlzc2luZyA8cmVmPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIGRlbGV0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCWVjaG8gImRlbGV0ZSAkYSAkbSAkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogZGVsZXRlICRhOiBleHRyYSBpbnB1dDogICRtIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgdmVyaWZ5IHdpdGggdG9vIG1hbnkgYXJndW1lbnRzJyAnCisJZWNobyAidmVyaWZ5ICRhICRtICRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB2ZXJpZnkgJGE6IGV4dHJhIGlucHV0OiAgJG0iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBvcHRpb24gd2l0aCB1bmtub3duIG5hbWUnICcKKwllY2hvICJvcHRpb24gdW5rbm93biIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogb3B0aW9uIHVua25vd246IHVua25vd24iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyB3aXRoIGR1cGxpY2F0ZSByZWZzJyAnCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwljcmVhdGUgJGEgJG0KKwljcmVhdGUgJGIgJG0KKwljcmVhdGUgJGEgJG0KKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiBtdWx0aXBsZSB1cGRhdGVzIGZvciByZWYgJyInIickYSciJyInIG5vdCBhbGxvd2VkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlIHJlZiB3b3JrcycgJworCWVjaG8gImNyZWF0ZSAkYSAkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGRvZXMgbm90IGNyZWF0ZSByZWZsb2dzIGJ5IGRlZmF1bHQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kICRvdXRzaWRlIiAmJgorCWVjaG8gImNyZWF0ZSAkb3V0c2lkZSAkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRvdXRzaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleGlzdHMgJG91dHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlcyByZWZsb2dzIHdpdGggLS1jcmVhdGUtcmVmbG9nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCAkb3V0c2lkZSIgJiYKKwllY2hvICJjcmVhdGUgJG91dHNpZGUgJG0iID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tY3JlYXRlLXJlZmxvZyAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJG91dHNpZGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyAkb3V0c2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBzdWNjZWVkcyB3aXRoIHF1b3RlZCBhcmd1bWVudCcgJworCWdpdCB1cGRhdGUtcmVmIC1kICRhICYmCisJZWNobyAiY3JlYXRlICRhIFwiJG1cIiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHN1Y2NlZWRzIHdpdGggZXNjYXBlZCBjaGFyYWN0ZXInICcKKwlnaXQgdXBkYXRlLXJlZiAtZCAkYSAmJgorCWVjaG8gImNyZWF0ZSAkYSBcIm1hXFwxNjN0ZXJcIiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHVwZGF0ZSByZWYgY3JlYXRlcyB3aXRoIHplcm8gb2xkIHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRiICRtICRaIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCAkYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmIGNyZWF0ZXMgd2l0aCBlbXB0eSBvbGQgdmFsdWUnICcKKwllY2hvICJ1cGRhdGUgJGIgJG0gJEUiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBjcmVhdGUgcmVmIHdvcmtzIHdpdGggcGF0aCB3aXRoIHNwYWNlIHRvIGJsb2InICcKKwllY2hvICJjcmVhdGUgcmVmcy9ibG9icy9wd3MgXCIkbTokcHdzXCIiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAiJG06JHB3cyIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9ibG9icy9wd3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2Jsb2JzL3B3cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmIGZhaWxzIHdpdGggd3Jvbmcgb2xkIHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRjICRtICRtfjEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAnIiciJyRjJyInIiciIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdXBkYXRlIHJlZiBmYWlscyB3aXRoIGJhZCBvbGQgdmFsdWUnICcKKwllY2hvICJ1cGRhdGUgJGMgJG0gZG9lcy1ub3QtZXhpc3QiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHVwZGF0ZSAkYzogaW52YWxpZCA8b2xkdmFsdWU+OiBkb2VzLW5vdC1leGlzdCIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBjcmVhdGUgcmVmIGZhaWxzIHdpdGggYmFkIG5ldyB2YWx1ZScgJworCWVjaG8gImNyZWF0ZSAkYyBkb2VzLW5vdC1leGlzdCIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlICRjOiBpbnZhbGlkIDxuZXd2YWx1ZT46IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGNyZWF0ZSByZWYgZmFpbHMgd2l0aCB6ZXJvIG5ldyB2YWx1ZScgJworCWVjaG8gImNyZWF0ZSAkYyAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYzogemVybyA8bmV3dmFsdWU+IiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHVwZGF0ZSByZWYgd29ya3Mgd2l0aCByaWdodCBvbGQgdmFsdWUnICcKKwllY2hvICJ1cGRhdGUgJGIgJG1+MSAkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtfjEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZGVsZXRlIHJlZiBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCWVjaG8gImRlbGV0ZSAkYSAkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjYW5ub3QgbG9jayByZWYgJyInIickYSciJyInIiBlcnIgJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGRlbGV0ZSByZWYgZmFpbHMgd2l0aCB6ZXJvIG9sZCB2YWx1ZScgJworCWVjaG8gImRlbGV0ZSAkYSAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGRlbGV0ZSAkYTogemVybyA8b2xkdmFsdWU+IiBlcnIgJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHVwZGF0ZSBzeW1yZWYgd29ya3Mgb3B0aW9uIG5vLWRlcmVmJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBURVNUU1lNUkVGICRiICYmCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwlvcHRpb24gbm8tZGVyZWYKKwl1cGRhdGUgVEVTVFNZTVJFRiAkYSAkYgorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSBURVNUU1lNUkVGID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkbX4xID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGRlbGV0ZSBzeW1yZWYgd29ya3Mgb3B0aW9uIG5vLWRlcmVmJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBURVNUU1lNUkVGICRiICYmCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwlvcHRpb24gbm8tZGVyZWYKKwlkZWxldGUgVEVTVFNZTVJFRiAkYgorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSBURVNUU1lNUkVGICYmCisJZ2l0IHJldi1wYXJzZSAkbX4xID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHVwZGF0ZSBzeW1yZWYgd29ya3MgZmxhZyAtLW5vLWRlcmVmJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBURVNUU1lNUkVGT05FICRiICYmCisJZ2l0IHN5bWJvbGljLXJlZiBURVNUU1lNUkVGVFdPICRiICYmCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwl1cGRhdGUgVEVTVFNZTVJFRk9ORSAkYSAkYgorCXVwZGF0ZSBURVNUU1lNUkVGVFdPICRhICRiCisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgVEVTVFNZTVJFRk9ORSBURVNUU1lNUkVGVFdPID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkbX4xID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGRlbGV0ZSBzeW1yZWYgd29ya3MgZmxhZyAtLW5vLWRlcmVmJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBURVNUU1lNUkVGT05FICRiICYmCisJZ2l0IHN5bWJvbGljLXJlZiBURVNUU1lNUkVGVFdPICRiICYmCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwlkZWxldGUgVEVTVFNZTVJFRk9ORSAkYgorCWRlbGV0ZSBURVNUU1lNUkVGVFdPICRiCisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgVEVTVFNZTVJFRk9ORSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgVEVTVFNZTVJFRlRXTyAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBkZWxldGUgcmVmIHdvcmtzIHdpdGggcmlnaHQgb2xkIHZhbHVlJyAnCisJZWNobyAiZGVsZXRlICRiICRtfjEiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUvY3JlYXRlL3ZlcmlmeSBjb21iaW5hdGlvbiB3b3JrcycgJworCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJdXBkYXRlICRhICRtCisJY3JlYXRlICRiICRtCisJdmVyaWZ5ICRjCisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IHN1Y2NlZWRzIGZvciBjb3JyZWN0IHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZWNobyAidmVyaWZ5ICRtICRtIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IHN1Y2NlZWRzIGZvciBtaXNzaW5nIHJlZmVyZW5jZScgJworCWVjaG8gInZlcmlmeSByZWZzL2hlYWRzL21pc3NpbmcgJFoiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSByZWZzL2hlYWRzL21pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IHRyZWF0cyBubyB2YWx1ZSBhcyBtaXNzaW5nJyAnCisJZWNobyAidmVyaWZ5IHJlZnMvaGVhZHMvbWlzc2luZyIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvbWlzc2luZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB2ZXJpZnkgZmFpbHMgZm9yIHdyb25nIHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZWNobyAidmVyaWZ5ICRtICRtfjEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB2ZXJpZnkgZmFpbHMgZm9yIG1pc3Rha2VuIG51bGwgdmFsdWUnICcKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwllY2hvICJ2ZXJpZnkgJG0gJFoiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB2ZXJpZnkgZmFpbHMgZm9yIG1pc3Rha2VuIGVtcHR5IHZhbHVlJyAnCisJTT0kKGdpdCByZXYtcGFyc2UgJG0pICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAkbSAkTSIgJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwllY2hvICJ2ZXJpZnkgJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmcyB3b3JrcyB3aXRoIGlkZW50aXR5IHVwZGF0ZXMnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXVwZGF0ZSAkYSAkbSAkbQorCXVwZGF0ZSAkYiAkbSAkbQorCXVwZGF0ZSAkYyAkWiAkRQorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHVwZGF0ZSByZWZzIGZhaWxzIHdpdGggd3Jvbmcgb2xkIHZhbHVlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgJGMgJG0gJiYKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXVwZGF0ZSAkYSAkbSAkbQorCXVwZGF0ZSAkYiAkbSAkbQorCXVwZGF0ZSAkYyAgJycKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjYW5ub3QgbG9jayByZWYgJyInIickYyciJyInIiBlcnIgJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZGVsZXRlIHJlZnMgd29ya3Mgd2l0aCBwYWNrZWQgYW5kIGxvb3NlIHJlZnMnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgJGMgJG1+MSAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJZGVsZXRlICRhICRtCisJdXBkYXRlICRiICRaICRtCisJdXBkYXRlICRjICRFICRtfjEKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB3b3JrcyBvbiBlbXB0eSBpbnB1dCcgJworCT5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiBlbXB0eSBsaW5lJyAnCisJZWNobyAiIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB3aGl0ZXNwYWNlIGJlZm9yZSBjb21tYW5kOiAiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiBlbXB0eSBjb21tYW5kJyAnCisJcHJpbnRmICRGICIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGVtcHR5IGNvbW1hbmQgaW4gaW5wdXQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiBvbmx5IHdoaXRlc3BhY2UnICcKKwlwcmludGYgJEYgIiAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHdoaXRlc3BhY2UgYmVmb3JlIGNvbW1hbmQ6ICAiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiBsZWFkaW5nIHdoaXRlc3BhY2UnICcKKwlwcmludGYgJEYgIiBjcmVhdGUgJGEiICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogd2hpdGVzcGFjZSBiZWZvcmUgY29tbWFuZDogIGNyZWF0ZSAkYSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIG9uIHVua25vd24gY29tbWFuZCcgJworCXByaW50ZiAkRiAidW5rbm93biAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiB1bmtub3duICRhIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgY3JlYXRlIHdpdGggbm8gcmVmJyAnCisJcHJpbnRmICRGICJjcmVhdGUgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjcmVhdGU6IG1pc3NpbmcgPHJlZj4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBjcmVhdGUgd2l0aCBubyBuZXcgdmFsdWUnICcKKwlwcmludGYgJEYgImNyZWF0ZSAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG5ld3ZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIGNyZWF0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCXByaW50ZiAkRiAiY3JlYXRlICRhIiAiJG0iICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIG5vIHJlZicgJworCXByaW50ZiAkRiAidXBkYXRlICIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlOiBtaXNzaW5nIDxyZWY+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgdXBkYXRlIHdpdGggdG9vIGZldyBhcmdzJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGVtaXRzIHdhcm5pbmcgd2l0aCBlbXB0eSBuZXcgdmFsdWUnICcKKwlnaXQgdXBkYXRlLXJlZiAkYSAkbSAmJgorCXByaW50ZiAkRiAidXBkYXRlICRhIiAiIiAiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgIndhcm5pbmc6IHVwZGF0ZSAkYTogbWlzc2luZyA8bmV3dmFsdWU+LCB0cmVhdGluZyBhcyB6ZXJvIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIG5vIG5ldyB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRhIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1cGRhdGUgJGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IHdoZW4gcmVhZGluZyA8bmV3dmFsdWU+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgdXBkYXRlIHdpdGggbm8gb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCXByaW50ZiAkRiAidXBkYXRlICRhIiAiJG0iICIkbSIgIiRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1bmtub3duIGNvbW1hbmQ6ICRtIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgZGVsZXRlIHdpdGggbm8gcmVmJyAnCisJcHJpbnRmICRGICJkZWxldGUgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBkZWxldGU6IG1pc3NpbmcgPHJlZj4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBkZWxldGUgd2l0aCBubyBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgImRlbGV0ZSAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogZGVsZXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIGRlbGV0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCXByaW50ZiAkRiAiZGVsZXRlICRhIiAiJG0iICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHZlcmlmeSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCXByaW50ZiAkRiAidmVyaWZ5ICRhIiAiJG0iICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHZlcmlmeSB3aXRoIG5vIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidmVyaWZ5ICRhIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB2ZXJpZnkgJGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IHdoZW4gcmVhZGluZyA8b2xkdmFsdWU+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgb3B0aW9uIHdpdGggdW5rbm93biBuYW1lJyAnCisJcHJpbnRmICRGICJvcHRpb24gdW5rbm93biIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogb3B0aW9uIHVua25vd246IHVua25vd24iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyB3aXRoIGR1cGxpY2F0ZSByZWZzJyAnCisJcHJpbnRmICRGICJjcmVhdGUgJGEiICIkbSIgImNyZWF0ZSAkYiIgIiRtIiAiY3JlYXRlICRhIiAiJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IG11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnIiciJyRhJyInIicgbm90IGFsbG93ZWQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBjcmVhdGUgcmVmIHdvcmtzJyAnCisJcHJpbnRmICRGICJjcmVhdGUgJGEiICIkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZSByZWYgY3JlYXRlcyB3aXRoIHplcm8gb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGIiICIkbSIgIiRaIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCAkYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgcmVmIGNyZWF0ZXMgd2l0aCBlbXB0eSBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYiIgIiRtIiAiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogY3JlYXRlIHJlZiB3b3JrcyB3aXRoIHBhdGggd2l0aCBzcGFjZSB0byBibG9iJyAnCisJcHJpbnRmICRGICJjcmVhdGUgcmVmcy9ibG9icy9wd3MiICIkbTokcHdzIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgIiRtOiRwd3MiID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvYmxvYnMvcHdzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9ibG9icy9wd3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdXBkYXRlIHJlZiBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRjIiAiJG0iICIkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjYW5ub3QgbG9jayByZWYgJyInIickYyciJyInIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZSByZWYgZmFpbHMgd2l0aCBiYWQgb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGMiICIkbSIgImRvZXMtbm90LWV4aXN0IiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1cGRhdGUgJGM6IGludmFsaWQgPG9sZHZhbHVlPjogZG9lcy1ub3QtZXhpc3QiIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogY3JlYXRlIHJlZiBmYWlscyB3aGVuIHJlZiBleGlzdHMnICcKKwlnaXQgdXBkYXRlLXJlZiAkYyAkbSAmJgorCWdpdCByZXYtcGFyc2UgIiRjIiA+ZXhwZWN0ICYmCisJcHJpbnRmICRGICJjcmVhdGUgJGMiICIkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjYW5ub3QgbG9jayByZWYgJyInIickYyciJyInIiBlcnIgJiYKKwlnaXQgcmV2LXBhcnNlICIkYyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogY3JlYXRlIHJlZiBmYWlscyB3aXRoIGJhZCBuZXcgdmFsdWUnICcKKwlnaXQgdXBkYXRlLXJlZiAtZCAiJGMiICYmCisJcHJpbnRmICRGICJjcmVhdGUgJGMiICJkb2VzLW5vdC1leGlzdCIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlICRjOiBpbnZhbGlkIDxuZXd2YWx1ZT46IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGNyZWF0ZSByZWYgZmFpbHMgd2l0aCBlbXB0eSBuZXcgdmFsdWUnICcKKwlwcmludGYgJEYgImNyZWF0ZSAkYyIgIiIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlICRjOiBtaXNzaW5nIDxuZXd2YWx1ZT4iIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdXBkYXRlIHJlZiB3b3JrcyB3aXRoIHJpZ2h0IG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRiIiAiJG1+MSIgIiRtIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBkZWxldGUgcmVmIGZhaWxzIHdpdGggd3Jvbmcgb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJkZWxldGUgJGEiICIkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjYW5ub3QgbG9jayByZWYgJyInIickYSciJyInIiBlcnIgJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGRlbGV0ZSByZWYgZmFpbHMgd2l0aCB6ZXJvIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAiZGVsZXRlICRhIiAiJFoiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGRlbGV0ZSAkYTogemVybyA8b2xkdmFsdWU+IiBlcnIgJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZSBzeW1yZWYgd29ya3Mgb3B0aW9uIG5vLWRlcmVmJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBURVNUU1lNUkVGICRiICYmCisJcHJpbnRmICRGICJvcHRpb24gbm8tZGVyZWYiICJ1cGRhdGUgVEVTVFNZTVJFRiIgIiRhIiAiJGIiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSBURVNUU1lNUkVGID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkbX4xID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGRlbGV0ZSBzeW1yZWYgd29ya3Mgb3B0aW9uIG5vLWRlcmVmJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBURVNUU1lNUkVGICRiICYmCisJcHJpbnRmICRGICJvcHRpb24gbm8tZGVyZWYiICJkZWxldGUgVEVTVFNZTVJFRiIgIiRiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgVEVTVFNZTVJFRiAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBkZWxldGUgcmVmIHdvcmtzIHdpdGggcmlnaHQgb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJkZWxldGUgJGIiICIkbX4xIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdXBkYXRlL2NyZWF0ZS92ZXJpZnkgY29tYmluYXRpb24gd29ya3MnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYSIgIiRtIiAiIiAiY3JlYXRlICRiIiAiJG0iICJ2ZXJpZnkgJGMiICIiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHZlcmlmeSBzdWNjZWVkcyBmb3IgY29ycmVjdCB2YWx1ZScgJworCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCXByaW50ZiAkRiAidmVyaWZ5ICRtIiAiJG0iID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB2ZXJpZnkgc3VjY2VlZHMgZm9yIG1pc3NpbmcgcmVmZXJlbmNlJyAnCisJcHJpbnRmICRGICJ2ZXJpZnkgcmVmcy9oZWFkcy9taXNzaW5nIiAiJFoiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSByZWZzL2hlYWRzL21pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdmVyaWZ5IHRyZWF0cyBubyB2YWx1ZSBhcyBtaXNzaW5nJyAnCisJcHJpbnRmICRGICJ2ZXJpZnkgcmVmcy9oZWFkcy9taXNzaW5nIiAiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy9taXNzaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHZlcmlmeSBmYWlscyBmb3Igd3JvbmcgdmFsdWUnICcKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlwcmludGYgJEYgInZlcmlmeSAkbSIgIiRtfjEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB2ZXJpZnkgZmFpbHMgZm9yIG1pc3Rha2VuIG51bGwgdmFsdWUnICcKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlwcmludGYgJEYgInZlcmlmeSAkbSIgIiRaIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdmVyaWZ5IGZhaWxzIGZvciBtaXN0YWtlbiBlbXB0eSB2YWx1ZScgJworCU09JChnaXQgcmV2LXBhcnNlICRtKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgJG0gJE0iICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJcHJpbnRmICRGICJ2ZXJpZnkgJG0iICIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgcmVmcyB3b3JrcyB3aXRoIGlkZW50aXR5IHVwZGF0ZXMnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYSIgIiRtIiAiJG0iICJ1cGRhdGUgJGIiICIkbSIgIiRtIiAidXBkYXRlICRjIiAiJFoiICIiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZSByZWZzIGZhaWxzIHdpdGggd3Jvbmcgb2xkIHZhbHVlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgJGMgJG0gJiYKKwlwcmludGYgJEYgInVwZGF0ZSAkYSIgIiRtIiAiJG0iICJ1cGRhdGUgJGIiICIkbSIgIiRtIiAidXBkYXRlICRjIiAiJG0iICIkWiIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGMnIiciJyIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGRlbGV0ZSByZWZzIHdvcmtzIHdpdGggcGFja2VkIGFuZCBsb29zZSByZWZzJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCB1cGRhdGUtcmVmICRjICRtfjEgJiYKKwlwcmludGYgJEYgImRlbGV0ZSAkYSIgIiRtIiAidXBkYXRlICRiIiAiJFoiICIkbSIgInVwZGF0ZSAkYyIgIiIgIiRtfjEiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHdpdGggZHVwbGljYXRlIEhFQUQgdXBkYXRlJyAnCisJZ2l0IGJyYW5jaCB0YXJnZXQxICRBICYmCisJZ2l0IGNoZWNrb3V0IHRhcmdldDEgJiYKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXVwZGF0ZSByZWZzL2hlYWRzL3RhcmdldDEgJEMKKwlvcHRpb24gbm8tZGVyZWYKKwl1cGRhdGUgSEVBRCAkQgorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IG11bHRpcGxlIHVwZGF0ZXMgZm9yICdcJydIRUFEJ1wnJyAoaW5jbHVkaW5nIG9uZSB2aWEgaXRzIHJlZmVyZW50IC5yZWZzL2hlYWRzL3RhcmdldDEuKSBhcmUgbm90IGFsbG93ZWQiIGVyciAmJgorCWVjaG8gInJlZnMvaGVhZHMvdGFyZ2V0MSIgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gIiRBIiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL3RhcmdldDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aCBkdXBsaWNhdGUgcmVmIHVwZGF0ZSB2aWEgc3ltcmVmJyAnCisJZ2l0IGJyYW5jaCB0YXJnZXQyICRBICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3N5bXJlZjIgcmVmcy9oZWFkcy90YXJnZXQyICYmCisJY2F0ID5zdGRpbiA8PC1FT0YgJiYKKwl1cGRhdGUgcmVmcy9oZWFkcy90YXJnZXQyICRDCisJdXBkYXRlIHJlZnMvaGVhZHMvc3ltcmVmMiAkQgorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IG11bHRpcGxlIHVwZGF0ZXMgZm9yICdcJydyZWZzL2hlYWRzL3RhcmdldDInXCcnIChpbmNsdWRpbmcgb25lIHZpYSBzeW1yZWYgLnJlZnMvaGVhZHMvc3ltcmVmMi4pIGFyZSBub3QgYWxsb3dlZCIgZXJyICYmCisJZWNobyAicmVmcy9oZWFkcy90YXJnZXQyIiA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3N5bXJlZjIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICIkQSIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy90YXJnZXQyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3J1bl93aXRoX2xpbWl0ZWRfb3Blbl9maWxlcyAoKSB7CisJKHVsaW1pdCAtbiAzMiAmJiAiJEAiKQorfQorCit0ZXN0X2xhenlfcHJlcmVxIFVMSU1JVF9GSUxFX0RFU0NSSVBUT1JTICcKKwl0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOICYmCisJcnVuX3dpdGhfbGltaXRlZF9vcGVuX2ZpbGVzIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTElNSVRfRklMRV9ERVNDUklQVE9SUyAnbGFyZ2UgdHJhbnNhY3Rpb24gY3JlYXRpbmcgYnJhbmNoZXMgZG9lcyBub3QgYnVyc3Qgb3BlbiBmaWxlIGxpbWl0JyAnCisoCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAzMykKKwlkbworCQllY2hvICJjcmVhdGUgcmVmcy9oZWFkcy8kaSBIRUFEIgorCWRvbmUgPmxhcmdlX2lucHV0ICYmCisJcnVuX3dpdGhfbGltaXRlZF9vcGVuX2ZpbGVzIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPGxhcmdlX2lucHV0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSByZWZzL2hlYWRzLzMzCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVUxJTUlUX0ZJTEVfREVTQ1JJUFRPUlMgJ2xhcmdlIHRyYW5zYWN0aW9uIGRlbGV0aW5nIGJyYW5jaGVzIGRvZXMgbm90IGJ1cnN0IG9wZW4gZmlsZSBsaW1pdCcgJworKAorCWZvciBpIGluICQodGVzdF9zZXEgMzMpCisJZG8KKwkJZWNobyAiZGVsZXRlIHJlZnMvaGVhZHMvJGkgSEVBRCIKKwlkb25lID5sYXJnZV9pbnB1dCAmJgorCXJ1bl93aXRoX2xpbWl0ZWRfb3Blbl9maWxlcyBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxsYXJnZV9pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy8zMworKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGUgcGVyLXdvcmt0cmVlIHJlZnMgaW4gcmVmcy9iaXNlY3QnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLWIgYnJhbmNoIHdvcmt0cmVlICYmCisJKAorCQljZCB3b3JrdHJlZSAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gInRlc3QgY29tbWl0IiAgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiA+Zm9yLWVhY2gtcmVmLm91dCAmJgorCQkhIGdyZXAgcmVmcy9iaXNlY3QgZm9yLWVhY2gtcmVmLm91dCAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL2Jpc2VjdC9zb21ldGhpbmcgSEVBRCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvYmlzZWN0L3NvbWV0aGluZyA+Li4vd29ya3RyZWUtaGVhZCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHwgZ3JlcCByZWZzL2Jpc2VjdC9zb21ldGhpbmcKKwkpICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2Jpc2VjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9iaXNlY3Qvc29tZXRoaW5nICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9iaXNlY3Qvc29tZXRoaW5nIEhFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvYmlzZWN0L3NvbWV0aGluZyA+bWFpbi1oZWFkICYmCisJISB0ZXN0X2NtcCBtYWluLWhlYWQgd29ya3RyZWUtaGVhZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDEtc3ltYm9saWMtcmVmLnNoIGIvdC90MTQwMS1zeW1ib2xpYy1yZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTRlYmIwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDEtc3ltYm9saWMtcmVmLnNoCkBAIC0wLDAgKzEsMTYzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgc3ltYm9saWMtcmVmIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgSWYgdGhlIHRlc3RzIG11bmdpbmcgSEVBRCBmYWlsLCB0aGV5IGNhbiBicmVhayBkZXRlY3Rpb24gb2YKKyMgdGhlIGdpdCByZXBvLCBtZWFuaW5nIHRoYXQgZnVydGhlciB0ZXN0cyB3aWxsIG9wZXJhdGUgb24KKyMgdGhlIHN1cnJvdW5kaW5nIGdpdCByZXBvIGluc3RlYWQgb2YgdGhlIHRyYXNoIGRpcmVjdG9yeS4KK3Jlc2V0X3RvX3NhbmUoKSB7CisJZWNobyByZWY6IHJlZnMvaGVhZHMvZm9vID4uZ2l0L0hFQUQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIHdyaXRlcyBIRUFEJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvZm9vICYmCisJZWNobyByZWY6IHJlZnMvaGVhZHMvZm9vID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWFkcyBIRUFEJyAnCisJZWNobyByZWZzL2hlYWRzL2ZvbyA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWZ1c2VzIG5vbi1yZWYgZm9yIEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgZm9vCisnCityZXNldF90b19zYW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWZ1c2VzIGJhcmUgc2hhMScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCityZXNldF90b19zYW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hFQUQgY2Fubm90IGJlIHJlbW92ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIC1kIEhFQUQKKycKKworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgY2FuIGJlIGRlbGV0ZWQnICcKKwlnaXQgc3ltYm9saWMtcmVmIE5PVEhFQUQgcmVmcy9oZWFkcy9mb28gJiYKKwlnaXQgc3ltYm9saWMtcmVmIC1kIE5PVEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RIRUFECisnCityZXNldF90b19zYW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiBjYW4gZGVsZXRlIGRhbmdsaW5nIHN5bXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgTk9USEVBRCByZWZzL2hlYWRzL21pc3NpbmcgJiYKKwlnaXQgc3ltYm9saWMtcmVmIC1kIE5PVEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvbWlzc2luZyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9USEVBRAorJworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgZmFpbHMgdG8gZGVsZXRlIG1pc3NpbmcgRk9PJyAnCisJZWNobyAiZmF0YWw6IENhbm5vdCBkZWxldGUgRk9PLCBub3QgYSBzeW1ib2xpYyByZWYiID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIC1kIEZPTyA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCityZXNldF90b19zYW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiBmYWlscyB0byBkZWxldGUgcmVhbCByZWYnICcKKwllY2hvICJmYXRhbDogQ2Fubm90IGRlbGV0ZSByZWZzL2hlYWRzL2Zvbywgbm90IGEgc3ltYm9saWMgcmVmIiA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiAtZCByZWZzL2hlYWRzL2ZvbyA+YWN0dWFsIDI+JjEgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbGFyZ2UgcmVmIG5hbWUnICcKKwkjIG1ha2UgMjU2KyBjaGFyYWN0ZXIgcmVmOyBzb21lIHN5c3RlbXMgbWF5IG5vdCBoYW5kbGUgdGhhdCwKKwkjIHNvIGJlIGdlbnRsZQorCWxvbmc9MDEyMzQ1Njc4OWFiY2RlZiAmJgorCWxvbmc9JGxvbmcvJGxvbmcvJGxvbmcvJGxvbmcgJiYKKwlsb25nPSRsb25nLyRsb25nLyRsb25nLyRsb25nICYmCisJbG9uZ19yZWY9cmVmcy9oZWFkcy8kbG9uZyAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQ9JChlY2hvIGZvbyB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwlpZiBnaXQgdXBkYXRlLXJlZiAkbG9uZ19yZWYgJGNvbW1pdDsgdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgTE9OR19SRUYKKwllbHNlCisJCWVjaG8gPiYyICJsb25nIHJlZnMgbm90IHN1cHBvcnRlZCIKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExPTkdfUkVGICdzeW1ib2xpYy1yZWYgY2FuIHBvaW50IHRvIGxhcmdlIHJlZiBuYW1lJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICRsb25nX3JlZiAmJgorCWVjaG8gJGxvbmdfcmVmID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMT05HX1JFRiAnd2UgY2FuIHBhcnNlIGxvbmcgc3ltYm9saWMgcmVmJyAnCisJZWNobyAkY29tbWl0ID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIHJlcG9ydHMgZmFpbHVyZSBpbiBleGl0IGNvZGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvSEVBRC5sb2NrIiAmJgorCT4uZ2l0L0hFQUQubG9jayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL3doYXRldmVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiB3cml0ZXMgcmVmbG9nIGVudHJ5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIGxvZzEgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9nMiAgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuICYmCisJZ2l0IHN5bWJvbGljLXJlZiAtbSBjcmVhdGUgSEVBRCByZWZzL2hlYWRzL2xvZzEgJiYKKwlnaXQgc3ltYm9saWMtcmVmIC1tIHVwZGF0ZSBIRUFEIHJlZnMvaGVhZHMvbG9nMiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl1cGRhdGUKKwljcmVhdGUKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVncyAtZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgZG9lcyBub3QgY3JlYXRlIHJlZiBkL2YgY29uZmxpY3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRmICYmCisJdGVzdF9jb21taXQgZGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvZGYvY29uZmxpY3QgcmVmcy9oZWFkcy9kZiAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9kZi9jb25mbGljdCByZWZzL2hlYWRzL2RmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiBjYW4gb3ZlcndyaXRlIHBvaW50ZXIgdG8gaW52YWxpZCBuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJlc2V0X3RvX3NhbmUgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL291dGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL291dGVyL2lubmVyIiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvb3V0ZXIvaW5uZXIgJGhlYWQgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy91bnJlbGF0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIGNhbiByZXNvbHZlIGQvZiBuYW1lIChFSVNESVIpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJlc2V0X3RvX3NhbmUgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL291dGVyL2lubmVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL291dGVyIiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvb3V0ZXIgJGhlYWQgJiYKKwllY2hvIHJlZnMvaGVhZHMvb3V0ZXIvaW5uZXIgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgY2FuIHJlc29sdmUgZC9mIG5hbWUgKEVOT1RESVIpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJlc2V0X3RvX3NhbmUgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL291dGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL291dGVyL2lubmVyIiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvb3V0ZXIvaW5uZXIgJGhlYWQgJiYKKwllY2hvIHJlZnMvaGVhZHMvb3V0ZXIgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDItY2hlY2stcmVmLWZvcm1hdC5zaCBiL3QvdDE0MDItY2hlY2stcmVmLWZvcm1hdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OGU0YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwMi1jaGVjay1yZWYtZm9ybWF0LnNoCkBAIC0wLDAgKzEsMjE4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgY2hlY2stcmVmLWZvcm1hdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3ZhbGlkX3JlZigpIHsKKwlwcmVyZXE9CisJY2FzZSAkMSBpbgorCVtBLVohXSopCisJCXByZXJlcT0kMQorCQlzaGlmdAorCWVzYWMKKwlkZXNjPSJyZWYgbmFtZSAnJDEnIGlzIHZhbGlkJHsyOisgd2l0aCBvcHRpb25zICQyfSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgIiRkZXNjIiAiCisJCWdpdCBjaGVjay1yZWYtZm9ybWF0ICQyICckMScKKwkiCit9CitpbnZhbGlkX3JlZigpIHsKKwlwcmVyZXE9CisJY2FzZSAkMSBpbgorCVtBLVohXSopCisJCXByZXJlcT0kMQorCQlzaGlmdAorCWVzYWMKKwlkZXNjPSJyZWYgbmFtZSAnJDEnIGlzIGludmFsaWQkezI6KyB3aXRoIG9wdGlvbnMgJDJ9IgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByZXJlcSAiJGRlc2MiICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLXJlZi1mb3JtYXQgJDIgJyQxJworCSIKK30KKworaW52YWxpZF9yZWYgJycKK2ludmFsaWRfcmVmICFNSU5HVyAnLycKK2ludmFsaWRfcmVmICFNSU5HVyAnLycgLS1hbGxvdy1vbmVsZXZlbAoraW52YWxpZF9yZWYgIU1JTkdXICcvJyAtLW5vcm1hbGl6ZQoraW52YWxpZF9yZWYgIU1JTkdXICcvJyAnLS1hbGxvdy1vbmVsZXZlbCAtLW5vcm1hbGl6ZScKK3ZhbGlkX3JlZiAnZm9vL2Jhci9iYXonCit2YWxpZF9yZWYgJ2Zvby9iYXIvYmF6JyAtLW5vcm1hbGl6ZQoraW52YWxpZF9yZWYgJ3JlZnMvLy9oZWFkcy9mb28nCit2YWxpZF9yZWYgJ3JlZnMvLy9oZWFkcy9mb28nIC0tbm9ybWFsaXplCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLycKK2ludmFsaWRfcmVmICFNSU5HVyAnL2hlYWRzL2ZvbycKK3ZhbGlkX3JlZiAhTUlOR1cgJy9oZWFkcy9mb28nIC0tbm9ybWFsaXplCitpbnZhbGlkX3JlZiAnLy8vaGVhZHMvZm9vJwordmFsaWRfcmVmICcvLy9oZWFkcy9mb28nIC0tbm9ybWFsaXplCitpbnZhbGlkX3JlZiAnLi9mb28nCitpbnZhbGlkX3JlZiAnLi9mb28vYmFyJworaW52YWxpZF9yZWYgJ2Zvby8uL2JhcicKK2ludmFsaWRfcmVmICdmb28vYmFyLy4nCitpbnZhbGlkX3JlZiAnLnJlZnMvZm9vJworaW52YWxpZF9yZWYgJ3JlZnMvaGVhZHMvZm9vLicKK2ludmFsaWRfcmVmICdoZWFkcy9mb28uLmJhcicKK2ludmFsaWRfcmVmICdoZWFkcy9mb28/YmFyJwordmFsaWRfcmVmICdmb28uL2JhcicKK2ludmFsaWRfcmVmICdoZWFkcy9mb28ubG9jaycKK2ludmFsaWRfcmVmICdoZWFkcy8vL2Zvby5sb2NrJworaW52YWxpZF9yZWYgJ2Zvby5sb2NrL2JhcicKK2ludmFsaWRfcmVmICdmb28ubG9jay8vL2JhcicKK3ZhbGlkX3JlZiAnaGVhZHMvZm9vQGJhcicKK2ludmFsaWRfcmVmICdoZWFkcy92QHthdGlvbicKK2ludmFsaWRfcmVmICdoZWFkcy9mb29cYmFyJworaW52YWxpZF9yZWYgIiQocHJpbnRmICdoZWFkcy9mb29cdCcpIgoraW52YWxpZF9yZWYgIiQocHJpbnRmICdoZWFkcy9mb29cMTc3JykiCit2YWxpZF9yZWYgIiQocHJpbnRmICdoZWFkcy9mdVwzMDNcMjM3JykiCit2YWxpZF9yZWYgJ2hlYWRzLypmb28vYmFyJyAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICdoZWFkcy9mb28qL2JhcicgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAnaGVhZHMvZipvL2JhcicgLS1yZWZzcGVjLXBhdHRlcm4KK2ludmFsaWRfcmVmICdoZWFkcy9mKm8qL2JhcicgLS1yZWZzcGVjLXBhdHRlcm4KK2ludmFsaWRfcmVmICdoZWFkcy9mb28qL2JhcionIC0tcmVmc3BlYy1wYXR0ZXJuCisKK3JlZj0nZm9vJworaW52YWxpZF9yZWYgIiRyZWYiCit2YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK2ludmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKK2ludmFsaWRfcmVmICIkcmVmIiAtLW5vcm1hbGl6ZQordmFsaWRfcmVmICIkcmVmIiAnLS1hbGxvdy1vbmVsZXZlbCAtLW5vcm1hbGl6ZScKKworcmVmPSdmb28vYmFyJwordmFsaWRfcmVmICIkcmVmIgordmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCit2YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCit2YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJwordmFsaWRfcmVmICIkcmVmIiAtLW5vcm1hbGl6ZQorCityZWY9J2Zvby8qJworaW52YWxpZF9yZWYgIiRyZWYiCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1hbGxvdy1vbmVsZXZlbAordmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKKworcmVmPScqL2ZvbycKK2ludmFsaWRfcmVmICIkcmVmIgoraW52YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK3ZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1ub3JtYWxpemUKK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tbm9ybWFsaXplJworCityZWY9J2Zvby8qL2JhcicKK2ludmFsaWRfcmVmICIkcmVmIgoraW52YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK3ZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nKicKK2ludmFsaWRfcmVmICIkcmVmIgoraW52YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK2ludmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKKworcmVmPSdmb28vKi8qJworaW52YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nKi9mb28vKicKK2ludmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgoraW52YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworCityZWY9JyovKi9mb28nCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK2ludmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKKworcmVmPScvZm9vJworaW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIgoraW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCitpbnZhbGlkX3JlZiAhTUlOR1cgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAhTUlOR1cgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworaW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAtLW5vcm1hbGl6ZQordmFsaWRfcmVmICFNSU5HVyAiJHJlZiIgJy0tYWxsb3ctb25lbGV2ZWwgLS1ub3JtYWxpemUnCitpbnZhbGlkX3JlZiAhTUlOR1cgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLW5vcm1hbGl6ZScKK3ZhbGlkX3JlZiAhTUlOR1cgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsIC0tbm9ybWFsaXplJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9IiAnCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXNoYTE9JChlY2hvIEEgfCBnaXQgY29tbWl0LXRyZWUgJFQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJHNoYTEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAkc2hhMSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlyZWZuYW1lPSQoZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggQHstMX0pICYmCisJdGVzdCAiJHJlZm5hbWUiID0gIiRzaGExIiAmJgorCXJlZm5hbWUyPSQoZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggQHstMn0pICYmCisJdGVzdCAiJHJlZm5hbWUyIiA9IG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCAtbmFzdGVyJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggLW5hc3RlciA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIGZyb20gc3ViZGlyJyAnCisJbWtkaXIgc3ViZGlyICYmCisKKwlUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJc2hhMT0kKGVjaG8gQSB8IGdpdCBjb21taXQtdHJlZSAkVCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkc2hhMSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICRzaGExICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBvcmlnaW4vbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXJlZm5hbWU9JCgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9CisJKSAmJgorCXRlc3QgIiRyZWZuYW1lIiA9ICIkc2hhMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfSBmcm9tIG5vbi1yZXBvJyAnCisJbm9uZ2l0IHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggbWFzdGVyIGZyb20gbm9uLXJlcG8nICcKKwllY2hvIG1hc3RlciA+ZXhwZWN0ICYmCisJbm9uZ2l0IGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit2YWxpZF9yZWZfbm9ybWFsaXplZCgpIHsKKwlwcmVyZXE9CisJY2FzZSAkMSBpbgorCVtBLVohXSopCisJCXByZXJlcT0kMQorCQlzaGlmdAorCWVzYWMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgInJlZiBuYW1lICckMScgc2ltcGxpZmllcyB0byAnJDInIiAiCisJCXJlZm5hbWU9XCQoZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1ub3JtYWxpemUgJyQxJykgJiYKKwkJdGVzdCBcIlwkcmVmbmFtZVwiID0gJyQyJworCSIKK30KK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQoKSB7CisJcHJlcmVxPQorCWNhc2UgJDEgaW4KKwlbQS1aIV0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICJjaGVjay1yZWYtZm9ybWF0IC0tbm9ybWFsaXplIHJlamVjdHMgJyQxJyIgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stcmVmLWZvcm1hdCAtLW5vcm1hbGl6ZSAnJDEnCisJIgorfQorCit2YWxpZF9yZWZfbm9ybWFsaXplZCAnaGVhZHMvZm9vJyAnaGVhZHMvZm9vJwordmFsaWRfcmVmX25vcm1hbGl6ZWQgJ3JlZnMvLy9oZWFkcy9mb28nICdyZWZzL2hlYWRzL2ZvbycKK3ZhbGlkX3JlZl9ub3JtYWxpemVkICFNSU5HVyAnL2hlYWRzL2ZvbycgJ2hlYWRzL2ZvbycKK3ZhbGlkX3JlZl9ub3JtYWxpemVkICcvLy9oZWFkcy9mb28nICdoZWFkcy9mb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdmb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICFNSU5HVyAnL2ZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzL2Zvby8uLi9iYXInCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdoZWFkcy8uL2ZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzXGZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzL2Zvby5sb2NrJworaW52YWxpZF9yZWZfbm9ybWFsaXplZCAnaGVhZHMvLy9mb28ubG9jaycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2Zvby5sb2NrL2JhcicKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2Zvby5sb2NrLy8vYmFyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDMtc2hvdy1yZWYuc2ggYi90L3QxNDAzLXNob3ctcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkOTU1YzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAzLXNob3ctcmVmLnNoCkBAIC0wLDAgKzEsMTk3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2hvdy1yZWYnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCWdpdCB0YWcgLWYgLWEgLW0gImFubm90YXRlZCBBIiBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IHRhZyAtZiAtYSAtbSAiYW5ub3RhdGVkIEIiIEIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBicmFuY2ggQiBBXjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYnICcKKwllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQSkgcmVmcy90YWdzL0EgPmV4cGVjdCAmJgorCisJZ2l0IHNob3ctcmVmIEEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiB0YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiByZWZzL3RhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIEQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLXEnICcKKwlnaXQgc2hvdy1yZWYgLXEgQSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1xIHRhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1xIHJlZnMvdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLXEgRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LXJlZiAtLXZlcmlmeScgJworCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BKSByZWZzL3RhZ3MvQSA+ZXhwZWN0ICYmCisKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy90YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSBBID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LXJlZiAtLXZlcmlmeSAtcScgJworCWdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSByZWZzL3RhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIEEgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSB0YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSBEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctcmVmIC1kJyAnCisJeworCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQSkgcmVmcy90YWdzL0EgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0FeMCkgInJlZnMvdGFncy9BXnt9IgorCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQykgcmVmcy90YWdzL0MKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLWQgQSBDID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc2hvdy1yZWYgLWQgdGFncy9BIHRhZ3MvQyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1kIHJlZnMvdGFncy9BIHJlZnMvdGFncy9DID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLWQgcmVmcy90YWdzL0EgcmVmcy90YWdzL0MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IHNob3ctcmVmIC1kIG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1kIGhlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1kIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc2hvdy1yZWYgLWQgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtZCAtLXZlcmlmeSBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtZCAtLXZlcmlmeSBoZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtZCBBIEMgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtZCB0YWdzL0EgdGFncy9DID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLS1oZWFkcywgLS10YWdzLCAtLWhlYWQsIHBhdHRlcm4nICcKKwlmb3IgYnJhbmNoIGluIEIgbWFzdGVyIHNpZGUKKwlkbworCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzLyRicmFuY2gpIHJlZnMvaGVhZHMvJGJyYW5jaAorCWRvbmUgPmV4cGVjdC5oZWFkcyAmJgorCWdpdCBzaG93LXJlZiAtLWhlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuaGVhZHMgYWN0dWFsICYmCisKKwlmb3IgdGFnIGluIEEgQiBDCisJZG8KKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzLyR0YWcpIHJlZnMvdGFncy8kdGFnCisJZG9uZSA+ZXhwZWN0LnRhZ3MgJiYKKwlnaXQgc2hvdy1yZWYgLS10YWdzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGFncyBhY3R1YWwgJiYKKworCWNhdCBleHBlY3QuaGVhZHMgZXhwZWN0LnRhZ3MgPmV4cGVjdCAmJgorCWdpdCBzaG93LXJlZiAtLWhlYWRzIC0tdGFncyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJeworCQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBIRUFEICYmCisJCWNhdCBleHBlY3QuaGVhZHMgZXhwZWN0LnRhZ3MKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLS1oZWFkcyAtLXRhZ3MgLS1oZWFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl7CisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9CKSByZWZzL2hlYWRzL0IKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0IpIHJlZnMvdGFncy9CCisJfSA+ZXhwZWN0ICYmCisJZ2l0IHNob3ctcmVmIC0taGVhZCBCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl7CisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9CKSByZWZzL2hlYWRzL0IKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0IpIHJlZnMvdGFncy9CCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9CXjApICJyZWZzL3RhZ3MvQl57fSIKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLS1oZWFkIC1kIEIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLS12ZXJpZnkgSEVBRCcgJworCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQgPmV4cGVjdCAmJgorCWdpdCBzaG93LXJlZiAtLXZlcmlmeSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LXJlZiAtLXZlcmlmeSB3aXRoIGRhbmdsaW5nIHJlZicgJworCXNoYTFfZmlsZSgpIHsKKwkJZWNobyAiJCoiIHwgc2VkICJzIy4uIy5naXQvb2JqZWN0cy8mLyMiCisJfSAmJgorCisJcmVtb3ZlX29iamVjdCgpIHsKKwkJZmlsZT0kKHNoYTFfZmlsZSAiJCoiKSAmJgorCQl0ZXN0IC1lICIkZmlsZSIgJiYKKwkJcm0gLWYgIiRmaWxlIgorCX0gJiYKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRhbmdsaW5nIiAmJgorCSgKKwkJZ2l0IGluaXQgZGFuZ2xpbmcgJiYKKwkJY2QgZGFuZ2xpbmcgJiYKKwkJdGVzdF9jb21taXQgZGFuZ2xpbmcgJiYKKwkJc2hhPSQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvZGFuZ2xpbmcpICYmCisJCXJlbW92ZV9vYmplY3QgJHNoYSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy90YWdzL2RhbmdsaW5nCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDQtdXBkYXRlLXJlZi1lcnJvcnMuc2ggYi90L3QxNDA0LXVwZGF0ZS1yZWYtZXJyb3JzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkMTQyZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDA0LXVwZGF0ZS1yZWYtZXJyb3JzLnNoCkBAIC0wLDAgKzEsNjM1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgdXBkYXRlLXJlZiBlcnJvciBoYW5kbGluZycKKy4gLi90ZXN0LWxpYi5zaAorCisjIENyZWF0ZSBzb21lIHJlZmVyZW5jZXMsIHBlcmhhcHMgcnVuIHBhY2stcmVmcyAtLWFsbCwgdGhlbiB0cnkgdG8KKyMgY3JlYXRlIHNvbWUgbW9yZSByZWZlcmVuY2VzLiBFbnN1cmUgdGhhdCB0aGUgc2Vjb25kIGNyZWF0aW9uIGZhaWxzCisjIHdpdGggdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZS4KKyMgVXNhZ2U6IHRlc3RfdXBkYXRlX3JlamVjdGVkIDxiZWZvcmU+IDxwYWNrPiA8Y3JlYXRlPiA8ZXJyb3I+CisjICAgPGJlZm9yZT4gaXMgYSB3cy1zZXBhcmF0ZWQgbGlzdCBvZiByZWZzIHRvIGNyZWF0ZSBiZWZvcmUgdGhlIHRlc3QKKyMgICA8cGFjaz4gKHRydWUgb3IgZmFsc2UpIHRlbGxzIHdoZXRoZXIgdG8gcGFjayB0aGUgcmVmcyBiZWZvcmUgdGhlIHRlc3QKKyMgICA8Y3JlYXRlPiBpcyBhIGxpc3Qgb2YgdmFyaWFibGVzIHRvIGF0dGVtcHQgY3JlYXRpbmcKKyMgICA8ZXJyb3I+IGlzIGEgc3RyaW5nIHRvIGxvb2sgZm9yIGluIHRoZSBzdGRlcnIgb2YgdXBkYXRlLXJlZi4KKyMgQWxsIHJlZmVyZW5jZXMgYXJlIGNyZWF0ZWQgaW4gdGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQKKyMgdmFsdWUgb2YgJHByZWZpeC4KK3Rlc3RfdXBkYXRlX3JlamVjdGVkICgpIHsKKwliZWZvcmU9IiQxIiAmJgorCXBhY2s9IiQyIiAmJgorCWNyZWF0ZT0iJDMiICYmCisJZXJyb3I9IiQ0IiAmJgorCXByaW50ZiAiY3JlYXRlICRwcmVmaXgvJXMgJENcbiIgJGJlZm9yZSB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAmJgorCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+dW5jaGFuZ2VkICYmCisJaWYgJHBhY2sKKwl0aGVuCisJCWdpdCBwYWNrLXJlZnMgLS1hbGwKKwlmaSAmJgorCXByaW50ZiAiY3JlYXRlICRwcmVmaXgvJXMgJENcbiIgJGNyZWF0ZSA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxpbnB1dCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1GICIkZXJyb3IiIG91dHB1dC5lcnIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmICRwcmVmaXggPmFjdHVhbCAmJgorCXRlc3RfY21wIHVuY2hhbmdlZCBhY3R1YWwKK30KKworIyBUZXN0IGFkZGluZyBhbmQgZGVsZXRpbmcgRC9GLWNvbmZsaWN0aW5nIHJlZmVyZW5jZXMgaW4gYSBzaW5nbGUKKyMgdHJhbnNhY3Rpb24uCitkZl90ZXN0KCkgeworCXByZWZpeD0iJDEiCisJcGFjaz06IHN5bWFkZD1mYWxzZSBzeW1kZWw9ZmFsc2UgYWRkX2RlbD1mYWxzZSBhZGRyZWY9IGRlbHJlZj0KKwlzaGlmdAorCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLS1wYWNrKQorCQkJcGFjaz0iZ2l0IHBhY2stcmVmcyAtLWFsbCIKKwkJCXNoaWZ0CisJCQk7OworCQktLXN5bS1hZGQpCisJCQkjIFBlcmZvcm0gdGhlIGFkZCB2aWEgYSBzeW1ib2xpYyByZWZlcmVuY2UKKwkJCXN5bWFkZD10cnVlCisJCQlzaGlmdAorCQkJOzsKKwkJLS1zeW0tZGVsKQorCQkJIyBQZXJmb3JtIHRoZSBkZWwgdmlhIGEgc3ltYm9saWMgcmVmZXJlbmNlCisJCQlzeW1kZWw9dHJ1ZQorCQkJc2hpZnQKKwkJCTs7CisJCS0tZGVsLWFkZCkKKwkJCSMgRGVsZXRlIGZpcnN0IHJlZmVyZW5jZSB0aGVuIGFkZCBzZWNvbmQKKwkJCWFkZF9kZWw9ZmFsc2UKKwkJCWRlbHJlZj0iJHByZWZpeC9yLyQyIgorCQkJYWRkcmVmPSIkcHJlZml4L3IvJDMiCisJCQlzaGlmdCAzCisJCQk7OworCQktLWFkZC1kZWwpCisJCQkjIEFkZCBmaXJzdCByZWZlcmVuY2UgdGhlbiBkZWxldGUgc2Vjb25kCisJCQlhZGRfZGVsPXRydWUKKwkJCWFkZHJlZj0iJHByZWZpeC9yLyQyIgorCQkJZGVscmVmPSIkcHJlZml4L3IvJDMiCisJCQlzaGlmdCAzCisJCQk7OworCQkqKQorCQkJZWNobyAxPiYyICJFeHRyYSBhcmdzIHRvIGRmX3Rlc3Q6ICQqIgorCQkJcmV0dXJuIDEKKwkJCTs7CisJCWVzYWMKKwlkb25lCisJZ2l0IHVwZGF0ZS1yZWYgIiRkZWxyZWYiICRDICYmCisJaWYgJHN5bWFkZAorCXRoZW4KKwkJYWRkbmFtZT0iJHByZWZpeC9zL3N5bWFkZCIgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiAiJGFkZG5hbWUiICIkYWRkcmVmIgorCWVsc2UKKwkJYWRkbmFtZT0iJGFkZHJlZiIKKwlmaSAmJgorCWlmICRzeW1kZWwKKwl0aGVuCisJCWRlbG5hbWU9IiRwcmVmaXgvcy9zeW1kZWwiICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgIiRkZWxuYW1lIiAiJGRlbHJlZiIKKwllbHNlCisJCWRlbG5hbWU9IiRkZWxyZWYiCisJZmkgJiYKKwljYXQgPmV4cGVjdGVkLWVyciA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRhZGRuYW1lJFNROiAkU1EkZGVscmVmJFNRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkU1EkYWRkcmVmJFNRCisJRU9GCisJJHBhY2sgJiYKKwlpZiAkYWRkX2RlbAorCXRoZW4KKwkJcHJpbnRmICIlc1xuIiAiY3JlYXRlICRhZGRuYW1lICREIiAiZGVsZXRlICRkZWxuYW1lIgorCWVsc2UKKwkJcHJpbnRmICIlc1xuIiAiZGVsZXRlICRkZWxuYW1lIiAiY3JlYXRlICRhZGRuYW1lICREIgorCWZpID5jb21tYW5kcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPGNvbW1hbmRzIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZC1lcnIgb3V0cHV0LmVyciAmJgorCXByaW50ZiAiJXNcbiIgIiRDICRkZWxyZWYiID5leHBlY3RlZC1yZWZzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSAlKHJlZm5hbWUpIiAkcHJlZml4L3IgPmFjdHVhbC1yZWZzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtcmVmcyBhY3R1YWwtcmVmcworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIEluaXRpYWwgJiYKKwlDPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBTZWNvbmQgJiYKKwlEPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBUaGlyZCAmJgorCUU9JChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIGxvb3NlIHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgbmV3JyAnCisKKwlwcmVmaXg9cmVmcy8xbCAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICJhIGMgZSIgZmFsc2UgImIgYy94IGQiIFwKKwkJIiRTUSRwcmVmaXgvYyRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJHByZWZpeC9jL3gkU1EiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3RpbmcgcGFja2VkIHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgbmV3JyAnCisKKwlwcmVmaXg9cmVmcy8xcCAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICJhIGMgZSIgdHJ1ZSAiYiBjL3ggZCIgXAorCQkiJFNRJHByZWZpeC9jJFNRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkU1EkcHJlZml4L2MveCRTUSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBsb29zZSByZWYgaXMgYSBkZWVwZXIgcHJlZml4IG9mIG5ldycgJworCisJcHJlZml4PXJlZnMvMmwgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjIGUiIGZhbHNlICJiIGMveC95IGQiIFwKKwkJIiRTUSRwcmVmaXgvYyRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJHByZWZpeC9jL3gveSRTUSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBwYWNrZWQgcmVmIGlzIGEgZGVlcGVyIHByZWZpeCBvZiBuZXcnICcKKworCXByZWZpeD1yZWZzLzJwICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgImEgYyBlIiB0cnVlICJiIGMveC95IGQiIFwKKwkJIiRTUSRwcmVmaXgvYyRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJHByZWZpeC9jL3gveSRTUSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgcmVmIGlzIGEgc2ltcGxlIHByZWZpeCBvZiBleGlzdGluZyBsb29zZScgJworCisJcHJlZml4PXJlZnMvM2wgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjL3ggZSIgZmFsc2UgImIgYyBkIiBcCisJCSIkU1EkcHJlZml4L2MveCRTUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFNRJHByZWZpeC9jJFNRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIGV4aXN0aW5nIHBhY2tlZCcgJworCisJcHJlZml4PXJlZnMvM3AgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBjL3ggZSIgdHJ1ZSAiYiBjIGQiIFwKKwkJIiRTUSRwcmVmaXgvYy94JFNRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkU1EkcHJlZml4L2MkU1EiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIGRlZXBlciBwcmVmaXggb2YgZXhpc3RpbmcgbG9vc2UnICcKKworCXByZWZpeD1yZWZzLzRsICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgImEgYy94L3kgZSIgZmFsc2UgImIgYyBkIiBcCisJCSIkU1EkcHJlZml4L2MveC95JFNRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkU1EkcHJlZml4L2MkU1EiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIGRlZXBlciBwcmVmaXggb2YgZXhpc3RpbmcgcGFja2VkJyAnCisKKwlwcmVmaXg9cmVmcy80cCAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICJhIGMveC95IGUiIHRydWUgImIgYyBkIiBcCisJCSIkU1EkcHJlZml4L2MveC95JFNRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkU1EkcHJlZml4L2MkU1EiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lIG5ldyByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIGFub3RoZXInICcKKworCXByZWZpeD1yZWZzLzUgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAiYSBlIiBmYWxzZSAiYiBjIGMveCBkIiBcCisJCSJjYW5ub3QgcHJvY2VzcyAkU1EkcHJlZml4L2MkU1EgYW5kICRTUSRwcmVmaXgvYy94JFNRIGF0IHRoZSBzYW1lIHRpbWUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHNob3VsZCBub3QgZm9vbCByZXYtcGFyc2UnICcKKwlwcmVmaXg9cmVmcy9lLXJldi1wYXJzZSAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyL2JheiAmJgorCWVjaG8gIiRDIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlICRwcmVmaXgvZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHNob3VsZCBub3QgZm9vbCBmb3ItZWFjaC1yZWYnICcKKwlwcmVmaXg9cmVmcy9lLWZvci1lYWNoLXJlZiAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID5leHBlY3RlZCAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlta2RpciAtcCAuZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXogJiYKKwlnaXQgZm9yLWVhY2gtcmVmICRwcmVmaXggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBmb29sIGNyZWF0ZScgJworCXByZWZpeD1yZWZzL2UtY3JlYXRlICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6ICYmCisJcHJpbnRmICJjcmVhdGUgJXMgJENcbiIgJHByZWZpeC9mb28gfAorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3J5IHNob3VsZCBub3QgZm9vbCB2ZXJpZnknICcKKwlwcmVmaXg9cmVmcy9lLXZlcmlmeSAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyL2JheiAmJgorCXByaW50ZiAidmVyaWZ5ICVzICRDXG4iICRwcmVmaXgvZm9vIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSBzaG91bGQgbm90IGZvb2wgMS1hcmcgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvZS11cGRhdGUtMSAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyL2JheiAmJgorCXByaW50ZiAidXBkYXRlICVzICREXG4iICRwcmVmaXgvZm9vIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSBzaG91bGQgbm90IGZvb2wgMi1hcmcgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvZS11cGRhdGUtMiAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyL2JheiAmJgorCXByaW50ZiAidXBkYXRlICVzICREICRDXG4iICRwcmVmaXgvZm9vIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSBzaG91bGQgbm90IGZvb2wgMC1hcmcgZGVsZXRlJyAnCisJcHJlZml4PXJlZnMvZS1kZWxldGUtMCAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyL2JheiAmJgorCXByaW50ZiAiZGVsZXRlICVzXG4iICRwcmVmaXgvZm9vIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yeSBzaG91bGQgbm90IGZvb2wgMS1hcmcgZGVsZXRlJyAnCisJcHJlZml4PXJlZnMvZS1kZWxldGUtMSAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyL2JheiAmJgorCXByaW50ZiAiZGVsZXRlICVzICRDXG4iICRwcmVmaXgvZm9vIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBhZGQgbG9uZyArIGRlbGV0ZSBzaG9ydCcgJworCWRmX3Rlc3QgcmVmcy9kZi1hbC1kcyAtLWFkZC1kZWwgZm9vL2JhciBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGFkZCBzaG9ydCArIGRlbGV0ZSBsb25nJyAnCisJZGZfdGVzdCByZWZzL2RmLWFzLWRsIC0tYWRkLWRlbCBmb28gZm9vL2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgZGVsZXRlIGxvbmcgKyBhZGQgc2hvcnQnICcKKwlkZl90ZXN0IHJlZnMvZGYtZGwtYXMgLS1kZWwtYWRkIGZvby9iYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBkZWxldGUgc2hvcnQgKyBhZGQgbG9uZycgJworCWRmX3Rlc3QgcmVmcy9kZi1kcy1hbCAtLWRlbC1hZGQgZm9vIGZvby9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGFkZCBsb25nICsgZGVsZXRlIHNob3J0IHBhY2tlZCcgJworCWRmX3Rlc3QgcmVmcy9kZi1hbC1kc3AgLS1wYWNrIC0tYWRkLWRlbCBmb28vYmFyIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgYWRkIHNob3J0ICsgZGVsZXRlIGxvbmcgcGFja2VkJyAnCisJZGZfdGVzdCByZWZzL2RmLWFzLWRscCAtLXBhY2sgLS1hZGQtZGVsIGZvbyBmb28vYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBkZWxldGUgbG9uZyBwYWNrZWQgKyBhZGQgc2hvcnQnICcKKwlkZl90ZXN0IHJlZnMvZGYtZGxwLWFzIC0tcGFjayAtLWRlbC1hZGQgZm9vL2JhciBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGRlbGV0ZSBzaG9ydCBwYWNrZWQgKyBhZGQgbG9uZycgJworCWRmX3Rlc3QgcmVmcy9kZi1kc3AtYWwgLS1wYWNrIC0tZGVsLWFkZCBmb28gZm9vL2JhcgorJworCisjIFRyeSBzb21lIGNvbWJpbmF0aW9ucyBpbnZvbHZpbmcgc3ltYm9saWMgcmVmcy4uLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgaW5kaXJlY3QgYWRkIGxvbmcgKyBkZWxldGUgc2hvcnQnICcKKwlkZl90ZXN0IHJlZnMvZGYtaWFsLWRzIC0tc3ltLWFkZCAtLWFkZC1kZWwgZm9vL2JhciBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGluZGlyZWN0IGFkZCBsb25nICsgaW5kaXJlY3QgZGVsZXRlIHNob3J0JyAnCisJZGZfdGVzdCByZWZzL2RmLWlhbC1pZHMgLS1zeW0tYWRkIC0tc3ltLWRlbCAtLWFkZC1kZWwgZm9vL2JhciBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGluZGlyZWN0IGFkZCBzaG9ydCArIGluZGlyZWN0IGRlbGV0ZSBsb25nJyAnCisJZGZfdGVzdCByZWZzL2RmLWlhcy1pZGwgLS1zeW0tYWRkIC0tc3ltLWRlbCAtLWFkZC1kZWwgZm9vIGZvby9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGluZGlyZWN0IGRlbGV0ZSBsb25nICsgaW5kaXJlY3QgYWRkIHNob3J0JyAnCisJZGZfdGVzdCByZWZzL2RmLWlkbC1pYXMgLS1zeW0tYWRkIC0tc3ltLWRlbCAtLWRlbC1hZGQgZm9vL2JhciBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GIGNvbmZsaWN0IHByZXZlbnRzIGluZGlyZWN0IGFkZCBsb25nICsgZGVsZXRlIHNob3J0IHBhY2tlZCcgJworCWRmX3Rlc3QgcmVmcy9kZi1pYWwtZHNwIC0tc3ltLWFkZCAtLXBhY2sgLS1hZGQtZGVsIGZvby9iYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBpbmRpcmVjdCBhZGQgbG9uZyArIGluZGlyZWN0IGRlbGV0ZSBzaG9ydCBwYWNrZWQnICcKKwlkZl90ZXN0IHJlZnMvZGYtaWFsLWlkc3AgLS1zeW0tYWRkIC0tc3ltLWRlbCAtLXBhY2sgLS1hZGQtZGVsIGZvby9iYXIgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiBjb25mbGljdCBwcmV2ZW50cyBhZGQgbG9uZyArIGluZGlyZWN0IGRlbGV0ZSBzaG9ydCBwYWNrZWQnICcKKwlkZl90ZXN0IHJlZnMvZGYtYWwtaWRzcCAtLXN5bS1kZWwgLS1wYWNrIC0tYWRkLWRlbCBmb28vYmFyIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgY29uZmxpY3QgcHJldmVudHMgaW5kaXJlY3QgZGVsZXRlIGxvbmcgcGFja2VkICsgaW5kaXJlY3QgYWRkIHNob3J0JyAnCisJZGZfdGVzdCByZWZzL2RmLWlkbHAtaWFzIC0tc3ltLWFkZCAtLXN5bS1kZWwgLS1wYWNrIC0tZGVsLWFkZCBmb28vYmFyIGZvbworJworCisjIFRlc3QgdmFyaW91cyBlcnJvcnMgd2hlbiByZWFkaW5nIHRoZSBvbGQgdmFsdWVzIG9mIHJlZmVyZW5jZXMuLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBvbGQgdmFsdWUgYmxvY2tzIHVwZGF0ZScgJworCXByZWZpeD1yZWZzL21pc3NpbmctdXBkYXRlICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvZm9vJFNROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1EKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9mb28gJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LXVwZGF0ZSAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvZm9vJFNROiBpcyBhdCAkQyBidXQgZXhwZWN0ZWQgJEQKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9mb28gJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3Rpbmcgb2xkIHZhbHVlIGJsb2NrcyBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9leGlzdGluZy1jcmVhdGUgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L2ZvbyRTUTogcmVmZXJlbmNlIGFscmVhZHkgZXhpc3RzCisJRU9GCisJcHJpbnRmICIlc1xuIiAiY3JlYXRlICRwcmVmaXgvZm9vICRFIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBvbGQgdmFsdWUgYmxvY2tzIGRlbGV0ZScgJworCXByZWZpeD1yZWZzL2luY29ycmVjdC1kZWxldGUgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L2ZvbyRTUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAiZGVsZXRlICRwcmVmaXgvZm9vICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCB1cGRhdGUnICcKKwlwcmVmaXg9cmVmcy9taXNzaW5nLWluZGlyZWN0LXVwZGF0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9zeW1yZWYkU1E6IHVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAkU1EkcHJlZml4L2ZvbyRTUQorCUVPRgorCXByaW50ZiAiJXNcbiIgInVwZGF0ZSAkcHJlZml4L3N5bXJlZiAkRSAkRCIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3Qgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCB1cGRhdGUnICcKKwlwcmVmaXg9cmVmcy9pbmNvcnJlY3QtaW5kaXJlY3QtdXBkYXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiBpcyBhdCAkQyBidXQgZXhwZWN0ZWQgJEQKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3Rpbmcgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9leGlzdGluZy1pbmRpcmVjdC1jcmVhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJZ2l0IHVwZGF0ZS1yZWYgJHByZWZpeC9mb28gJEMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9zeW1yZWYkU1E6IHJlZmVyZW5jZSBhbHJlYWR5IGV4aXN0cworCUVPRgorCXByaW50ZiAiJXNcbiIgImNyZWF0ZSAkcHJlZml4L3N5bXJlZiAkRSIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3Qgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCBkZWxldGUnICcKKwlwcmVmaXg9cmVmcy9pbmNvcnJlY3QtaW5kaXJlY3QtZGVsZXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiBpcyBhdCAkQyBidXQgZXhwZWN0ZWQgJEQKKwlFT0YKKwlwcmludGYgIiVzXG4iICJkZWxldGUgJHByZWZpeC9zeW1yZWYgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBvbGQgdmFsdWUgYmxvY2tzIGluZGlyZWN0IG5vLWRlcmVmIHVwZGF0ZScgJworCXByZWZpeD1yZWZzL21pc3Npbmctbm9kZXJlZi11cGRhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiByZWZlcmVuY2UgaXMgbWlzc2luZyBidXQgZXhwZWN0ZWQgJEQKKwlFT0YKKwlwcmludGYgIiVzXG4iICJvcHRpb24gbm8tZGVyZWYiICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IG9sZCB2YWx1ZSBibG9ja3MgaW5kaXJlY3Qgbm8tZGVyZWYgdXBkYXRlJyAnCisJcHJlZml4PXJlZnMvaW5jb3JyZWN0LW5vZGVyZWYtdXBkYXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiBpcyBhdCAkQyBidXQgZXhwZWN0ZWQgJEQKKwlFT0YKKwlwcmludGYgIiVzXG4iICJvcHRpb24gbm8tZGVyZWYiICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEUgJEQiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3Rpbmcgb2xkIHZhbHVlIGJsb2NrcyBpbmRpcmVjdCBuby1kZXJlZiBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9leGlzdGluZy1ub2RlcmVmLWNyZWF0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L3N5bXJlZiRTUTogcmVmZXJlbmNlIGFscmVhZHkgZXhpc3RzCisJRU9GCisJcHJpbnRmICIlc1xuIiAib3B0aW9uIG5vLWRlcmVmIiAiY3JlYXRlICRwcmVmaXgvc3ltcmVmICRFIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBvbGQgdmFsdWUgYmxvY2tzIGluZGlyZWN0IG5vLWRlcmVmIGRlbGV0ZScgJworCXByZWZpeD1yZWZzL2luY29ycmVjdC1ub2RlcmVmLWRlbGV0ZSAmJgorCWdpdCBzeW1ib2xpYy1yZWYgJHByZWZpeC9zeW1yZWYgJHByZWZpeC9mb28gJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L3N5bXJlZiRTUTogaXMgYXQgJEMgYnV0IGV4cGVjdGVkICRECisJRU9GCisJcHJpbnRmICIlc1xuIiAib3B0aW9uIG5vLWRlcmVmIiAiZGVsZXRlICRwcmVmaXgvc3ltcmVmICREIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1lbXB0eSBkaXJlY3RvcnkgYmxvY2tzIGNyZWF0ZScgJworCXByZWZpeD1yZWZzL25lLWNyZWF0ZSAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeC9mb28vYmFyICYmCisJOiA+LmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6LmxvY2sgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJHByZWZpeC9mb28vYmFyL2Jhei5sb2NrIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAkU1EkcHJlZml4L2ZvbyRTUTogdGhlcmUgaXMgYSBub24tZW1wdHkgZGlyZWN0b3J5ICRTUS5naXQvJHByZWZpeC9mb28kU1EgYmxvY2tpbmcgcmVmZXJlbmNlICRTUSRwcmVmaXgvZm9vJFNRCisJRU9GCisJcHJpbnRmICIlc1xuIiAidXBkYXRlICRwcmVmaXgvZm9vICRDIiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQuZXJyICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvZm9vJFNROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1EKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9mb28gJEQgJEMiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJva2VuIHJlZmVyZW5jZSBibG9ja3MgY3JlYXRlJyAnCisJcHJlZml4PXJlZnMvYnJva2VuLWNyZWF0ZSAmJgorCW1rZGlyIC1wIC5naXQvJHByZWZpeCAmJgorCWVjaG8gImdvYmJsZWRpZ29vayIgPi5naXQvJHByZWZpeC9mb28gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJHByZWZpeC9mb28iICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvZm9vJFNROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1E6IHJlZmVyZW5jZSBicm9rZW4KKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9mb28gJEMiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9mb28kU1E6IHVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAkU1EkcHJlZml4L2ZvbyRTUTogcmVmZXJlbmNlIGJyb2tlbgorCUVPRgorCXByaW50ZiAiJXNcbiIgInVwZGF0ZSAkcHJlZml4L2ZvbyAkRCAkQyIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZW1wdHkgZGlyZWN0b3J5IGJsb2NrcyBpbmRpcmVjdCBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9uZS1pbmRpcmVjdC1jcmVhdGUgJiYKKwlnaXQgc3ltYm9saWMtcmVmICRwcmVmaXgvc3ltcmVmICRwcmVmaXgvZm9vICYmCisJbWtkaXIgLXAgLmdpdC8kcHJlZml4L2Zvby9iYXIgJiYKKwk6ID4uZ2l0LyRwcmVmaXgvZm9vL2Jhci9iYXoubG9jayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kcHJlZml4L2Zvby9iYXIvYmF6LmxvY2siICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiB0aGVyZSBpcyBhIG5vbi1lbXB0eSBkaXJlY3RvcnkgJFNRLmdpdC8kcHJlZml4L2ZvbyRTUSBibG9ja2luZyByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1EKKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEMiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9zeW1yZWYkU1E6IHVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAkU1EkcHJlZml4L2ZvbyRTUQorCUVPRgorCXByaW50ZiAiJXNcbiIgInVwZGF0ZSAkcHJlZml4L3N5bXJlZiAkRCAkQyIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicm9rZW4gcmVmZXJlbmNlIGJsb2NrcyBpbmRpcmVjdCBjcmVhdGUnICcKKwlwcmVmaXg9cmVmcy9icm9rZW4taW5kaXJlY3QtY3JlYXRlICYmCisJZ2l0IHN5bWJvbGljLXJlZiAkcHJlZml4L3N5bXJlZiAkcHJlZml4L2ZvbyAmJgorCWVjaG8gImdvYmJsZWRpZ29vayIgPi5naXQvJHByZWZpeC9mb28gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJHByZWZpeC9mb28iICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlmYXRhbDogY2Fubm90IGxvY2sgcmVmICRTUSRwcmVmaXgvc3ltcmVmJFNROiB1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJFNRJHByZWZpeC9mb28kU1E6IHJlZmVyZW5jZSBicm9rZW4KKwlFT0YKKwlwcmludGYgIiVzXG4iICJ1cGRhdGUgJHByZWZpeC9zeW1yZWYgJEMiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dC5lcnIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBjYW5ub3QgbG9jayByZWYgJFNRJHByZWZpeC9zeW1yZWYkU1E6IHVuYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZSAkU1EkcHJlZml4L2ZvbyRTUTogcmVmZXJlbmNlIGJyb2tlbgorCUVPRgorCXByaW50ZiAiJXNcbiIgInVwZGF0ZSAkcHJlZml4L3N5bXJlZiAkRCAkQyIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gMj5vdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBib2d1cyBpbnRlcm1lZGlhdGUgdmFsdWVzIGR1cmluZyBkZWxldGUnICcKKwlwcmVmaXg9cmVmcy9zbG93LXRyYW5zYWN0aW9uICYmCisJIyBTZXQgdXAgYSByZWZlcmVuY2Ugd2l0aCBkaWZmZXJpbmcgbG9vc2UgYW5kIHBhY2tlZCB2ZXJzaW9uczoKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkRCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+dW5jaGFuZ2VkICYmCisJIyBOb3cgdHJ5IHRvIHVwZGF0ZSB0aGUgcmVmZXJlbmNlLCBidXQgaG9sZCB0aGUgYHBhY2tlZC1yZWZzYCBsb2NrCisJIyBmb3IgYSB3aGlsZSB0byBzZWUgd2hhdCBoYXBwZW5zIHdoaWxlIHRoZSBwcm9jZXNzIGlzIGJsb2NrZWQ6CisJOiA+LmdpdC9wYWNrZWQtcmVmcy5sb2NrICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3BhY2tlZC1yZWZzLmxvY2siICYmCisJeworCQkjIE5vdGU6IHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpcyBpbnRlbnRpb25hbGx5IHJ1biBpbiB0aGUKKwkJIyBiYWNrZ3JvdW5kLiBXZSBpbmNyZWFzZSB0aGUgdGltZW91dCBzbyB0aGF0IGB1cGRhdGUtcmVmYAorCQkjIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIGBwYWNrZWQtcmVmc2AgbG9jayBmb3IgbXVjaCBsb25nZXIKKwkJIyB0aGFuIGl0IHRha2VzIGZvciB1cyB0byBkbyB0aGUgY2hlY2sgdGhlbiBkZWxldGUgaXQ6CisJCWdpdCAtYyBjb3JlLnBhY2tlZHJlZnN0aW1lb3V0PTMwMDAwIHVwZGF0ZS1yZWYgLWQgJHByZWZpeC9mb28gJgorCX0gJiYKKwlwaWQyPSQhICYmCisJIyBHaXZlIHVwZGF0ZS1yZWYgcGxlbnR5IG9mIHRpbWUgdG8gZ2V0IHRvIHRoZSBwb2ludCB3aGVyZSBpdCB0cmllcworCSMgdG8gbG9jayBwYWNrZWQtcmVmczoKKwlzbGVlcCAxICYmCisJIyBNYWtlIHN1cmUgdGhhdCB1cGRhdGUtcmVmIGRpZCBub3QgY29tcGxldGUgZGVzcGl0ZSB0aGUgbG9jazoKKwlraWxsIC0wICRwaWQyICYmCisJIyBWZXJpZnkgdGhhdCB0aGUgcmVmZXJlbmNlIHN0aWxsIGhhcyBpdHMgb2xkIHZhbHVlOgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgJHByZWZpeC9mb28gfHwgZWNobyB1bmRlZmluZWQpICYmCisJY2FzZSAiJHNoYTEiIGluCisJJEQpCisJCSMgVGhpcyBpcyB3aGF0IHdlIGhvcGUgZm9yOyBpdCBtZWFucyB0aGF0IG5vdGhpbmcKKwkJIyB1c2VyLXZpc2libGUgaGFzIGNoYW5nZWQgeWV0LgorCQk6IDs7CisJdW5kZWZpbmVkKQorCQkjIFRoaXMgaXMgbm90IGNvcnJlY3Q7IGl0IG1lYW5zIHRoZSBkZWxldGlvbiBoYXMgaGFwcGVuZWQKKwkJIyBhbHJlYWR5IGV2ZW4gdGhvdWdoIHVwZGF0ZS1yZWYgc2hvdWxkIG5vdCBoYXZlIGJlZW4KKwkJIyBhYmxlIHRvIGFjcXVpcmUgdGhlIGxvY2sgeWV0LgorCQllY2hvICIkcHJlZml4L2ZvbyBkZWxldGVkIHByZW1hdHVyZWx5IiAmJgorCQlicmVhaworCQk7OworCSRDKQorCQkjIFRoaXMgdmFsdWUgc2hvdWxkIG5ldmVyIGJlIHNlZW4uIFByb2JhYmx5IHRoZSBsb29zZQorCQkjIHJlZmVyZW5jZSBoYXMgYmVlbiBkZWxldGVkIGJ1dCB0aGUgcGFja2VkIHJlZmVyZW5jZQorCQkjIGlzIHN0aWxsIHRoZXJlOgorCQllY2hvICIkcHJlZml4L2ZvbyBpbmNvcnJlY3RseSBvYnNlcnZlZCB0byBiZSBDIiAmJgorCQlicmVhaworCQk7OworCSopCisJCSMgV1RGPworCQllY2hvICJ1bmV4cGVjdGVkIHZhbHVlIG9ic2VydmVkIGZvciAkcHJlZml4L2ZvbzogJHNoYTEiICYmCisJCWJyZWFrCisJCTs7CisJZXNhYyA+b3V0ICYmCisJcm0gLWYgLmdpdC9wYWNrZWQtcmVmcy5sb2NrICYmCisJd2FpdCAkcGlkMiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgJHByZWZpeC9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIGZhaWxzIGNsZWFubHkgaWYgcGFja2VkLXJlZnMgZmlsZSBpcyBsb2NrZWQnICcKKwlwcmVmaXg9cmVmcy9sb2NrZWQtcGFja2VkLXJlZnMgJiYKKwkjIFNldCB1cCBhIHJlZmVyZW5jZSB3aXRoIGRpZmZlcmluZyBsb29zZSBhbmQgcGFja2VkIHZlcnNpb25zOgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICRDICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCB1cGRhdGUtcmVmICRwcmVmaXgvZm9vICREICYmCisJZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID51bmNoYW5nZWQgJiYKKwkjIE5vdyB0cnkgdG8gZGVsZXRlIGl0IHdoaWxlIHRoZSBgcGFja2VkLXJlZnNgIGxvY2sgaXMgaGVsZDoKKwk6ID4uZ2l0L3BhY2tlZC1yZWZzLmxvY2sgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcGFja2VkLXJlZnMubG9jayIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtZCAkcHJlZml4L2ZvbyA+b3V0IDI+ZXJyICYmCisJZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJVbmFibGUgdG8gY3JlYXRlICRTUS4qcGFja2VkLXJlZnMubG9jayRTUTogIiBlcnIgJiYKKwl0ZXN0X2NtcCB1bmNoYW5nZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBmYWlscyBjbGVhbmx5IGlmIHBhY2tlZC1yZWZzLm5ldyB3cml0ZSBmYWlscycgJworCSMgU2V0dXAgYW5kIGV4cGVjdGF0aW9ucyBhcmUgc2ltaWxhciB0byB0aGUgdGVzdCBhYm92ZS4KKwlwcmVmaXg9cmVmcy9mYWlsZWQtcGFja2VkLXJlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkQyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLXJlZiAkcHJlZml4L2ZvbyAkRCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+dW5jaGFuZ2VkICYmCisJIyBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGluIHByYWN0aWNlLCBidXQgaXQgaXMgYW4gZWFzeSB3YXkgdG8gZ2V0IGEKKwkjIHJlbGlhYmxlIGVycm9yICh3ZSBvcGVuIHdpdGggY3JlYXRlX3RlbXBmaWxlKCksIHdoaWNoIHVzZXMgT19FWENMKS4KKwk6ID4uZ2l0L3BhY2tlZC1yZWZzLm5ldyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9wYWNrZWQtcmVmcy5uZXciICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgJHByZWZpeC9mb28gJiYKKwlnaXQgZm9yLWVhY2gtcmVmICRwcmVmaXggPmFjdHVhbCAmJgorCXRlc3RfY21wIHVuY2hhbmdlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDA1LW1haW4tcmVmLXN0b3JlLnNoIGIvdC90MTQwNS1tYWluLXJlZi1zdG9yZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMzE4OTlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwNS1tYWluLXJlZi1zdG9yZS5zaApAQCAtMCwwICsxLDEyOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbWFpbiByZWYgc3RvcmUgYXBpJworCisuIC4vdGVzdC1saWIuc2gKKworUlVOPSJ0ZXN0LXRvb2wgcmVmLXN0b3JlIG1haW4iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tfcmVmcyhQQUNLX1JFRlNfQUxMIHwgUEFDS19SRUZTX1BSVU5FKScgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCU49YGZpbmQgLmdpdC9yZWZzIC10eXBlIGYgfCB3YyAtbGAgJiYKKwl0ZXN0ICIkTiIgIT0gMCAmJgorCSRSVU4gcGFjay1yZWZzIDMgJiYKKwlOPWBmaW5kIC5naXQvcmVmcyAtdHlwZSBmIHwgd2MgLWxgCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlZWxfcmVmKG5ldy10YWcpJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3RlZCAmJgorCWdpdCB0YWcgLWEgLW0gbmV3LXRhZyBuZXctdGFnIEhFQUQgJiYKKwkkUlVOIHBlZWwtcmVmIHJlZnMvdGFncy9uZXctdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlX3N5bXJlZihGT08sIHJlZnMvaGVhZHMvbWFzdGVyKScgJworCSRSVU4gY3JlYXRlLXN5bXJlZiBGT08gcmVmcy9oZWFkcy9tYXN0ZXIgbm90aGluZyAmJgorCWVjaG8gcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdGVkICYmCisJZ2l0IHN5bWJvbGljLXJlZiBGT08gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVfcmVmcyhGT08sIHJlZnMvdGFncy9uZXctdGFnKScgJworCWdpdCByZXYtcGFyc2UgRk9PIC0tICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvbmV3LXRhZyAtLSAmJgorCSRSVU4gZGVsZXRlLXJlZnMgMCBub3RoaW5nIEZPTyByZWZzL3RhZ3MvbmV3LXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgRk9PIC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvbmV3LXRhZyAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWVfcmVmcyhtYXN0ZXIsIG5ldy1tYXN0ZXIpJyAnCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmV4cGVjdGVkICYmCisJJFJVTiByZW5hbWUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIHJlZnMvaGVhZHMvbmV3LW1hc3RlciAmJgorCWdpdCByZXYtcGFyc2UgbmV3LW1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jb21taXQgcmVjcmVhdGUtbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcl9lYWNoX3JlZihyZWZzL2hlYWRzLyknICcKKwkkUlVOIGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyB8IGN1dCAtZCIgIiAtZiAyLSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJbWFzdGVyIDB4MAorCW5ldy1tYXN0ZXIgMHgwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcl9lYWNoX3JlZigpIGlzIHNvcnRlZCcgJworCSRSVU4gZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHwgY3V0IC1kIiAiIC1mIDItID5hY3R1YWwgJiYKKwlzb3J0IGFjdHVhbCA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmVfcmVmKG5ldy1tYXN0ZXIpJyAnCisJU0hBMT1gZ2l0IHJldi1wYXJzZSBuZXctbWFzdGVyYCAmJgorCWVjaG8gIiRTSEExIHJlZnMvaGVhZHMvbmV3LW1hc3RlciAweDAiID5leHBlY3RlZCAmJgorCSRSVU4gcmVzb2x2ZS1yZWYgcmVmcy9oZWFkcy9uZXctbWFzdGVyIDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnlfcmVmKG5ldy1tYXN0ZXIpJyAnCisJJFJVTiB2ZXJpZnktcmVmIHJlZnMvaGVhZHMvbmV3LW1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWZsb2coKScgJworCSRSVU4gZm9yLWVhY2gtcmVmbG9nIHwgc29ydCAtazIgfCBjdXQgLWQiICIgLWYgMi0gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUhFQUQgMHgxCisJcmVmcy9oZWFkcy9tYXN0ZXIgMHgwCisJcmVmcy9oZWFkcy9uZXctbWFzdGVyIDB4MAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWZsb2dfZW50KCknICcKKwkkUlVOIGZvci1lYWNoLXJlZmxvZy1lbnQgSEVBRCA+YWN0dWFsICYmCisJaGVhZCAtbjEgYWN0dWFsIHwgZ3JlcCBvbmUgJiYKKwl0YWlsIC1uMiBhY3R1YWwgfCBoZWFkIC1uMSB8IGdyZXAgcmVjcmVhdGUtbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZSgpJyAnCisJJFJVTiBmb3ItZWFjaC1yZWZsb2ctZW50LXJldmVyc2UgSEVBRCA+YWN0dWFsICYmCisJaGVhZCAtbjEgYWN0dWFsIHwgZ3JlcCByZWNyZWF0ZS1tYXN0ZXIgJiYKKwl0YWlsIC1uMiBhY3R1YWwgfCBoZWFkIC1uMSB8IGdyZXAgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZ19leGlzdHMoSEVBRCknICcKKwkkUlVOIHJlZmxvZy1leGlzdHMgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVfcmVmbG9nKEhFQUQpJyAnCisJJFJVTiBkZWxldGUtcmVmbG9nIEhFQUQgJiYKKwkhIHRlc3QgLWYgLmdpdC9sb2dzL0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlLXJlZmxvZyhIRUFEKScgJworCSRSVU4gY3JlYXRlLXJlZmxvZyBIRUFEIDEgJiYKKwl0ZXN0IC1mIC5naXQvbG9ncy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZV9yZWYocmVmcy9oZWFkcy9mb28pJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGZvbyAmJgorCUZPT19TSEExPWBnaXQgcmV2LXBhcnNlIGZvb2AgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwl0ZXN0X2NvbW1pdCBiYXItY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJhciAmJgorCUJBUl9TSEExPWBnaXQgcmV2LXBhcnNlIGJhcmAgJiYKKwkkUlVOIHVwZGF0ZS1yZWYgdXBkYXRpbmcgcmVmcy9oZWFkcy9mb28gJEJBUl9TSEExICRGT09fU0hBMSAwICYmCisJZWNobyAkQkFSX1NIQTEgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2ZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZV9yZWYocmVmcy9oZWFkcy9mb28pJyAnCisJU0hBMT1gZ2l0IHJldi1wYXJzZSBmb29gICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICYmCisJJFJVTiBkZWxldGUtcmVmIG1zZyByZWZzL2hlYWRzL2ZvbyAkU0hBMSAwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2ZvbyAtLQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDYtc3VibW9kdWxlLXJlZi1zdG9yZS5zaCBiL3QvdDE0MDYtc3VibW9kdWxlLXJlZi1zdG9yZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNmI3ZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwNi1zdWJtb2R1bGUtcmVmLXN0b3JlLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzdWJtb2R1bGUgcmVmIHN0b3JlIGFwaScKKworLiAuL3Rlc3QtbGliLnNoCisKK1JVTj0idGVzdC10b29sIHJlZi1zdG9yZSBzdWJtb2R1bGU6c3ViIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBpbml0IHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCXRlc3RfY29tbWl0IGZpcnN0ICYmCisJCWdpdCBjaGVja291dCAtYiBuZXctbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrX3JlZnMoKSBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsICRSVU4gcGFjay1yZWZzIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVlbF9yZWYobmV3LXRhZyknICcKKwlnaXQgLUMgc3ViIHJldi1wYXJzZSBIRUFEID5leHBlY3RlZCAmJgorCWdpdCAtQyBzdWIgdGFnIC1hIC1tIG5ldy10YWcgbmV3LXRhZyBIRUFEICYmCisJJFJVTiBwZWVsLXJlZiByZWZzL3RhZ3MvbmV3LXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZV9zeW1yZWYoKSBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsICRSVU4gY3JlYXRlLXN5bXJlZiBGT08gcmVmcy9oZWFkcy9tYXN0ZXIgbm90aGluZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVfcmVmcygpIG5vdCBhbGxvd2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFJVTiBkZWxldGUtcmVmcyAwIG5vdGhpbmcgRk9PIHJlZnMvdGFncy9uZXctdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZV9yZWZzKCkgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCAkUlVOIHJlbmFtZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgcmVmcy9oZWFkcy9uZXctbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcl9lYWNoX3JlZihyZWZzL2hlYWRzLyknICcKKwkkUlVOIGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyB8IGN1dCAtZCIgIiAtZiAyLSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJbWFzdGVyIDB4MAorCW5ldy1tYXN0ZXIgMHgwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcl9lYWNoX3JlZigpIGlzIHNvcnRlZCcgJworCSRSVU4gZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHwgY3V0IC1kIiAiIC1mIDItID5hY3R1YWwgJiYKKwlzb3J0IGFjdHVhbCA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmVfcmVmKG1hc3RlciknICcKKwlTSEExPWBnaXQgLUMgc3ViIHJldi1wYXJzZSBtYXN0ZXJgICYmCisJZWNobyAiJFNIQTEgcmVmcy9oZWFkcy9tYXN0ZXIgMHgwIiA+ZXhwZWN0ZWQgJiYKKwkkUlVOIHJlc29sdmUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnlfcmVmKG5ldy1tYXN0ZXIpJyAnCisJJFJVTiB2ZXJpZnktcmVmIHJlZnMvaGVhZHMvbmV3LW1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JfZWFjaF9yZWZsb2coKScgJworCSRSVU4gZm9yLWVhY2gtcmVmbG9nIHwgc29ydCB8IGN1dCAtZCIgIiAtZiAyLSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJSEVBRCAweDEKKwlyZWZzL2hlYWRzL21hc3RlciAweDAKKwlyZWZzL2hlYWRzL25ldy1tYXN0ZXIgMHgwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcl9lYWNoX3JlZmxvZ19lbnQoKScgJworCSRSVU4gZm9yLWVhY2gtcmVmbG9nLWVudCBIRUFEID5hY3R1YWwgJiYKKwloZWFkIC1uMSBhY3R1YWwgfCBncmVwIGZpcnN0ICYmCisJdGFpbCAtbjIgYWN0dWFsIHwgaGVhZCAtbjEgfCBncmVwIG1hc3Rlci50by5uZXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlKCknICcKKwkkUlVOIGZvci1lYWNoLXJlZmxvZy1lbnQtcmV2ZXJzZSBIRUFEID5hY3R1YWwgJiYKKwloZWFkIC1uMSBhY3R1YWwgfCBncmVwIG1hc3Rlci50by5uZXcgJiYKKwl0YWlsIC1uMiBhY3R1YWwgfCBoZWFkIC1uMSB8IGdyZXAgZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nX2V4aXN0cyhIRUFEKScgJworCSRSVU4gcmVmbG9nLWV4aXN0cyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZV9yZWZsb2coKSBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsICRSVU4gZGVsZXRlLXJlZmxvZyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZS1yZWZsb2coKSBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsICRSVU4gY3JlYXRlLXJlZmxvZyBIRUFEIDEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDA3LXdvcmt0cmVlLXJlZi1zdG9yZS5zaCBiL3QvdDE0MDctd29ya3RyZWUtcmVmLXN0b3JlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhODQ4NTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDA3LXdvcmt0cmVlLXJlZi1zdG9yZS5zaApAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB3b3JrdHJlZSByZWYgc3RvcmUgYXBpJworCisuIC4vdGVzdC1saWIuc2gKKworUldUPSJ0ZXN0LXRvb2wgcmVmLXN0b3JlIHdvcmt0cmVlOnd0IgorUk1BSU49InRlc3QtdG9vbCByZWYtc3RvcmUgd29ya3RyZWU6bWFpbiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBmaXJzdCAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLWIgd3QtbWFzdGVyIHd0ICYmCisJKAorCQljZCB3dCAmJgorCQl0ZXN0X2NvbW1pdCBzZWNvbmQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmVfcmVmKDxzaGFyZWQtcmVmPiknICcKKwlTSEExPWBnaXQgcmV2LXBhcnNlIG1hc3RlcmAgJiYKKwllY2hvICIkU0hBMSByZWZzL2hlYWRzL21hc3RlciAweDAiID5leHBlY3RlZCAmJgorCSRSV1QgcmVzb2x2ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJJFJNQUlOIHJlc29sdmUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlX3JlZig8cGVyLXdvcmt0cmVlLXJlZj4pJyAnCisJU0hBMT1gZ2l0IC1DIHd0IHJldi1wYXJzZSBIRUFEYCAmJgorCWVjaG8gIiRTSEExIHJlZnMvaGVhZHMvd3QtbWFzdGVyIDB4MSIgPmV4cGVjdGVkICYmCisJJFJXVCByZXNvbHZlLXJlZiBIRUFEIDAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJU0hBMT1gZ2l0IHJldi1wYXJzZSBIRUFEYCAmJgorCWVjaG8gIiRTSEExIHJlZnMvaGVhZHMvbWFzdGVyIDB4MSIgPmV4cGVjdGVkICYmCisJJFJNQUlOIHJlc29sdmUtcmVmIEhFQUQgMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZV9zeW1yZWYoRk9PLCByZWZzL2hlYWRzL21hc3RlciknICcKKwkkUldUIGNyZWF0ZS1zeW1yZWYgRk9PIHJlZnMvaGVhZHMvbWFzdGVyIG5vdGhpbmcgJiYKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3RlZCAmJgorCWdpdCAtQyB3dCBzeW1ib2xpYy1yZWYgRk9PID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCSRSTUFJTiBjcmVhdGUtc3ltcmVmIEZPTyByZWZzL2hlYWRzL3d0LW1hc3RlciBub3RoaW5nICYmCisJZWNobyByZWZzL2hlYWRzL3d0LW1hc3RlciA+ZXhwZWN0ZWQgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEZPTyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcl9lYWNoX3JlZmxvZygpJyAnCisJZWNobyAkWkVST19PSUQgPiAuZ2l0L2xvZ3MvUFNFVURPLU1BSU4gJiYKKwlta2RpciAtcCAgICAgLmdpdC9sb2dzL3JlZnMvYmlzZWN0ICYmCisJZWNobyAkWkVST19PSUQgPiAuZ2l0L2xvZ3MvcmVmcy9iaXNlY3QvcmFuZG9tICYmCisKKwllY2hvICRaRVJPX09JRCA+IC5naXQvd29ya3RyZWVzL3d0L2xvZ3MvUFNFVURPLVdUICYmCisJbWtkaXIgLXAgICAgIC5naXQvd29ya3RyZWVzL3d0L2xvZ3MvcmVmcy9iaXNlY3QgJiYKKwllY2hvICRaRVJPX09JRCA+IC5naXQvd29ya3RyZWVzL3d0L2xvZ3MvcmVmcy9iaXNlY3Qvd3QtcmFuZG9tICYmCisKKwkkUldUIGZvci1lYWNoLXJlZmxvZyB8IGN1dCAtZCIgIiAtZiAyLSB8IHNvcnQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUhFQUQgMHgxCisJUFNFVURPLVdUIDB4MAorCXJlZnMvYmlzZWN0L3d0LXJhbmRvbSAweDAKKwlyZWZzL2hlYWRzL21hc3RlciAweDAKKwlyZWZzL2hlYWRzL3d0LW1hc3RlciAweDAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCSRSTUFJTiBmb3ItZWFjaC1yZWZsb2cgfCBjdXQgLWQiICIgLWYgMi0gfCBzb3J0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlIRUFEIDB4MQorCVBTRVVETy1NQUlOIDB4MAorCXJlZnMvYmlzZWN0L3JhbmRvbSAweDAKKwlyZWZzL2hlYWRzL21hc3RlciAweDAKKwlyZWZzL2hlYWRzL3d0LW1hc3RlciAweDAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDA4LXBhY2tlZC1yZWZzLnNoIGIvdC90MTQwOC1wYWNrZWQtcmVmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZTQ0YTE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwOC1wYWNrZWQtcmVmcy5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGFja2VkLXJlZnMgZW50cmllcyBhcmUgY292ZXJlZCBieSBsb29zZSByZWZzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG9uZSAmJgorCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmID5hY3R1YWwgJiYKKwllY2hvICIkb25lIGNvbW1pdAlyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgZm9yLWVhY2gtcmVmID5hY3R1YWwgJiYKKwllY2hvICIkb25lIGNvbW1pdAlyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBjaGVja291dCAtLW9ycGhhbiBhbm90aGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCXR3bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBhbm90aGVyICYmCisKKwlnaXQgZm9yLWVhY2gtcmVmID5hY3R1YWwgJiYKKwllY2hvICIkdHdvIGNvbW1pdAlyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAtLWFsbCAmJgorCWdpdCBwcnVuZSAmJgorCWdpdCB0YWcgLW0gdjEuMCB2MS4wIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBlcnJvciBmcm9tIHN0YWxlIGVudHJ5IGluIHBhY2tlZC1yZWZzJyAnCisJZ2l0IGRlc2NyaWJlIG1hc3RlciA+YWN0dWFsIDI+JjEgJiYKKwllY2hvICJ2MS4wIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDktYXZvaWQtcGFja2luZy1yZWZzLnNoIGIvdC90MTQwOS1hdm9pZC1wYWNraW5nLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmUxMmZiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDktYXZvaWQtcGFja2luZy1yZWZzLnNoCkBAIC0wLDAgKzEsMTE4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXZvaWQgcmV3cml0aW5nIHBhY2tlZC1yZWZzIHVubmVjZXNzYXJpbHknCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIEFkZCBhbiBpZGVudGlmeWluZyBtYXJrIHRvIHRoZSBwYWNrZWQtcmVmcyBmaWxlIGhlYWRlciBsaW5lLiBUaGlzCisjIHNob3VsZG4ndCB1cHNldCByZWFkZXJzLCBhbmQgaXQgc2hvdWxkIGJlIG9taXR0ZWQgaWYgdGhlIGZpbGUgaXMKKyMgZXZlciByZXdyaXR0ZW4uCittYXJrX3BhY2tlZF9yZWZzICgpIHsKKwlzZWQgLWUgInMvXlwoIy4qXCkvXDEgdDE0MDkgLyIgLmdpdC9wYWNrZWQtcmVmcyA+LmdpdC9wYWNrZWQtcmVmcy5uZXcgJiYKKwltdiAuZ2l0L3BhY2tlZC1yZWZzLm5ldyAuZ2l0L3BhY2tlZC1yZWZzCit9CisKKyMgVmVyaWZ5IHRoYXQgdGhlIHBhY2tlZC1yZWZzIGZpbGUgaXMgc3RpbGwgbWFya2VkLgorY2hlY2tfcGFja2VkX3JlZnNfbWFya2VkICgpIHsKKwlncmVwIC1xICdeIy4qIHQxNDA5ICcgLmdpdC9wYWNrZWQtcmVmcworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQ29tbWl0IEEiICYmCisJQT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkNvbW1pdCBCIiAmJgorCUI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJDb21taXQgQyIgJiYKKwlDPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgY3JlYXRlIHBhY2tlZC1yZWZzIGZpbGUgZ3JhdHVpdG91c2x5JyAnCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9wYWNrZWQtcmVmcyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZm9vICRBICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9wYWNrZWQtcmVmcyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZm9vICRCICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9wYWNrZWQtcmVmcyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZm9vICRDICRCICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9wYWNrZWQtcmVmcyAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9wYWNrZWQtcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0aGF0IG1hcmtpbmcgdGhlIHBhY2tlZC1yZWZzIGZpbGUgd29ya3MnICcKKwlnaXQgZm9yLWVhY2gtcmVmID5leHBlY3RlZCAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwltYXJrX3BhY2tlZF9yZWZzICYmCisJY2hlY2tfcGFja2VkX3JlZnNfbWFya2VkICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCSEgY2hlY2tfcGFja2VkX3JlZnNfbWFya2VkICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+YWN0dWFsMiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVhdmUgcGFja2VkLXJlZnMgdW50b3VjaGVkIG9uIHVwZGF0ZSBvZiBwYWNrZWQnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3BhY2tlZC11cGRhdGUgJEEgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWFya19wYWNrZWRfcmVmcyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvcGFja2VkLXVwZGF0ZSAkQiAmJgorCWNoZWNrX3BhY2tlZF9yZWZzX21hcmtlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWF2ZSBwYWNrZWQtcmVmcyB1bnRvdWNoZWQgb24gY2hlY2tlZCB1cGRhdGUgb2YgcGFja2VkJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9wYWNrZWQtY2hlY2tlZC11cGRhdGUgJEEgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJbWFya19wYWNrZWRfcmVmcyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvcGFja2VkLWNoZWNrZWQtdXBkYXRlICRCICRBICYmCisJY2hlY2tfcGFja2VkX3JlZnNfbWFya2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlYXZlIHBhY2tlZC1yZWZzIHVudG91Y2hlZCBvbiB2ZXJpZnkgb2YgcGFja2VkJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9wYWNrZWQtdmVyaWZ5ICRBICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCW1hcmtfcGFja2VkX3JlZnMgJiYKKwllY2hvICJ2ZXJpZnkgcmVmcy9oZWFkcy9wYWNrZWQtdmVyaWZ5ICRBIiB8IGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gJiYKKwljaGVja19wYWNrZWRfcmVmc19tYXJrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG91Y2ggcGFja2VkLXJlZnMgb24gZGVsZXRlIG9mIHBhY2tlZCcgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvcGFja2VkLWRlbGV0ZSAkQSAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwltYXJrX3BhY2tlZF9yZWZzICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9wYWNrZWQtZGVsZXRlICYmCisJISBjaGVja19wYWNrZWRfcmVmc19tYXJrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVhdmUgcGFja2VkLXJlZnMgdW50b3VjaGVkIG9uIHVwZGF0ZSBvZiBsb29zZScgJworCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2xvb3NlLXVwZGF0ZSAkQSAmJgorCW1hcmtfcGFja2VkX3JlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2xvb3NlLXVwZGF0ZSAkQiAmJgorCWNoZWNrX3BhY2tlZF9yZWZzX21hcmtlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWF2ZSBwYWNrZWQtcmVmcyB1bnRvdWNoZWQgb24gY2hlY2tlZCB1cGRhdGUgb2YgbG9vc2UnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9sb29zZS1jaGVja2VkLXVwZGF0ZSAkQSAmJgorCW1hcmtfcGFja2VkX3JlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2xvb3NlLWNoZWNrZWQtdXBkYXRlICRCICRBICYmCisJY2hlY2tfcGFja2VkX3JlZnNfbWFya2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlYXZlIHBhY2tlZC1yZWZzIHVudG91Y2hlZCBvbiB2ZXJpZnkgb2YgbG9vc2UnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9sb29zZS12ZXJpZnkgJEEgJiYKKwltYXJrX3BhY2tlZF9yZWZzICYmCisJZWNobyAidmVyaWZ5IHJlZnMvaGVhZHMvbG9vc2UtdmVyaWZ5ICRBIiB8IGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gJiYKKwljaGVja19wYWNrZWRfcmVmc19tYXJrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVhdmUgcGFja2VkLXJlZnMgdW50b3VjaGVkIG9uIGRlbGV0ZSBvZiBsb29zZScgJworCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2xvb3NlLWRlbGV0ZSAkQSAmJgorCW1hcmtfcGFja2VkX3JlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2xvb3NlLWRlbGV0ZSAmJgorCWNoZWNrX3BhY2tlZF9yZWZzX21hcmtlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MTAtcmVmbG9nLnNoIGIvdC90MTQxMC1yZWZsb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzZkOWI3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MTAtcmVmbG9nLnNoCkBAIC0wLDAgKzEsMzk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcHJ1bmUgYW5kIHJlZmxvZyBleHBpcmF0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX2hhdmUgKCkgeworCWdhYWg9ICYmCisJZm9yIE4gaW4gIiRAIgorCWRvCisJCWV2YWwgIm89XCQkTiIgJiYgZ2l0IGNhdC1maWxlIC10ICRvIHx8IHsKKwkJCWVjaG8gR2FhaCAkTgorCQkJZ2FhaD0kTgorCQkJYnJlYWsKKwkJfQorCWRvbmUgJiYKKwl0ZXN0IC16ICIkZ2FhaCIKK30KKworY2hlY2tfZnNjayAoKSB7CisJZ2l0IGZzY2sgLS1mdWxsID5mc2NrLm91dHB1dAorCWNhc2UgIiQxIiBpbgorCScnKQorCQl0ZXN0X211c3RfYmVfZW1wdHkgZnNjay5vdXRwdXQgOzsKKwkqKQorCQl0ZXN0X2kxOG5ncmVwICIkMSIgZnNjay5vdXRwdXQgOzsKKwllc2FjCit9CisKK2NvcnJ1cHQgKCkgeworCW12IC5naXQvb2JqZWN0cy8kKHRlc3Rfb2lkX3RvX3BhdGggJDEpIC5naXQvJDEKK30KKworcmVjb3ZlciAoKSB7CisJYWE9JChlY2hvICQxIHwgY3V0IC1jIDEtMikKKwlta2RpciAtcCAuZ2l0L29iamVjdHMvJGFhCisJbXYgLmdpdC8kMSAuZ2l0L29iamVjdHMvJCh0ZXN0X29pZF90b19wYXRoICQxKQorfQorCitjaGVja19kb250X2hhdmUgKCkgeworCWdhYWg9ICYmCisJZm9yIE4gaW4gIiRAIgorCWRvCisJCWV2YWwgIm89XCQkTiIKKwkJZ2l0IGNhdC1maWxlIC10ICRvICYmIHsKKwkJCWVjaG8gR2FhaCAkTgorCQkJZ2FhaD0kTgorCQkJYnJlYWsKKwkJfQorCWRvbmUKKwl0ZXN0IC16ICIkZ2FhaCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9vaWRfaW5pdCAmJgorCW1rZGlyIC1wIEEvQiAmJgorCWVjaG8gcmF0ID5DICYmCisJZWNobyBveCA+QS9EICYmCisJZWNobyB0aWdlciA+QS9CL0UgJiYKKwlnaXQgYWRkIC4gJiYKKworCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIHJhYmJpdCAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJQT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBKSAmJgorCUI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QS9CKSAmJgorCUM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QykgJiYKKwlEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkEvRCkgJiYKKwlFPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkEvQi9FKSAmJgorCWNoZWNrX2ZzY2sgJiYKKworCXRlc3RfY2htb2QgK3ggQyAmJgorCWdpdCBhZGQgQyAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGRyYWdvbiAmJgorCUw9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2hlY2tfZnNjayAmJgorCisJcm0gLWYgQyBBL0IvRSAmJgorCWVjaG8gc25ha2UgPkYgJiYKKwllY2hvIGhvcnNlID5BL0cgJiYKKwlnaXQgYWRkIEYgQS9HICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gc2hlZXAgJiYKKwlGPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkYpICYmCisJRz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBL0cpICYmCisJST0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBKSAmJgorCUo9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2hlY2tfZnNjayAmJgorCisJcm0gLWYgQS9HICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gbW9ua2V5ICYmCisJSz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwljaGVja19mc2NrICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMICYmCisKKwlnaXQgcHJ1bmUgJiYKKworCWNoZWNrX2hhdmUgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgJiYKKworCWNoZWNrX2ZzY2sgJiYKKworCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcmV3aW5kICcKKwl0ZXN0X3RpY2sgJiYgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwl0ZXN0IC1mIEMgJiYKKwl0ZXN0IC1mIEEvQi9FICYmCisJISB0ZXN0IC1mIEYgJiYKKwkhIHRlc3QgLWYgQS9HICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMICYmCisKKwlnaXQgcHJ1bmUgJiYKKworCWNoZWNrX2hhdmUgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgJiYKKworCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgYW5kIGNoZWNrJyAnCisKKwljb3JydXB0ICRGICYmCisJY2hlY2tfZnNjayAibWlzc2luZyBibG9iICRGIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBleHBpcmUgLS1kcnktcnVuIHNob3VsZCBub3QgdG91Y2ggcmVmbG9nJyAnCisKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWRyeS1ydW4gXAorCQktLWV4cGlyZT0kKCgkdGVzdF90aWNrIC0gMTAwMDApKSBcCisJCS0tZXhwaXJlLXVucmVhY2hhYmxlPSQoKCR0ZXN0X3RpY2sgLSAxMDAwMCkpIFwKKwkJLS1zdGFsZS1maXggXAorCQktLWFsbCAmJgorCisJZ2l0IHJlZmxvZyByZWZzL2hlYWRzL21hc3RlciA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBvdXRwdXQgJiYKKworCWNoZWNrX2ZzY2sgIm1pc3NpbmcgYmxvYiAkRiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGV4cGlyZScgJworCisJZ2l0IHJlZmxvZyBleHBpcmUgLS12ZXJib3NlIFwKKwkJLS1leHBpcmU9JCgoJHRlc3RfdGljayAtIDEwMDAwKSkgXAorCQktLWV4cGlyZS11bnJlYWNoYWJsZT0kKCgkdGVzdF90aWNrIC0gMTAwMDApKSBcCisJCS0tc3RhbGUtZml4IFwKKwkJLS1hbGwgJiYKKworCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0cHV0ICYmCisKKwljaGVja19mc2NrICJkYW5nbGluZyBjb21taXQgJEsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIGFuZCBmc2NrJyAnCisKKwlnaXQgcHJ1bmUgJiYKKwljaGVja19mc2NrICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBIIEwgJiYKKwljaGVja19kb250X2hhdmUgRiBHIEkgSiBLCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjb3ZlciBhbmQgY2hlY2snICcKKworCXJlY292ZXIgJEYgJiYKKwljaGVja19mc2NrICJkYW5nbGluZyBibG9iICRGIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZScgJworCWVjaG8gMSA+IEMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJhdCBDICYmCisKKwllY2hvIDIgPiBDICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBveCBDICYmCisKKwllY2hvIDMgPiBDICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aWdlciBDICYmCisKKwlIRUFEX2VudHJ5X2NvdW50PSQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgorCW1hc3Rlcl9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgfCB3YyAtbCkgJiYKKworCXRlc3QgJEhFQURfZW50cnlfY291bnQgPSA1ICYmCisJdGVzdCAkbWFzdGVyX2VudHJ5X2NvdW50ID0gNSAmJgorCisKKwlnaXQgcmVmbG9nIGRlbGV0ZSBtYXN0ZXJAezF9ICYmCisJZ2l0IHJlZmxvZyBzaG93IG1hc3RlciA+IG91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICQoKCRtYXN0ZXJfZW50cnlfY291bnQgLSAxKSkgb3V0cHV0ICYmCisJdGVzdCAkSEVBRF9lbnRyeV9jb3VudCA9ICQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgorCSEgZ3JlcCBveCA8IG91dHB1dCAmJgorCisJbWFzdGVyX2VudHJ5X2NvdW50PSQod2MgLWwgPCBvdXRwdXQpICYmCisKKwlnaXQgcmVmbG9nIGRlbGV0ZSBIRUFEQHsxfSAmJgorCXRlc3QgJCgoJEhFQURfZW50cnlfY291bnQgLTEpKSA9ICQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgorCXRlc3QgJG1hc3Rlcl9lbnRyeV9jb3VudCA9ICQoZ2l0IHJlZmxvZyBzaG93IG1hc3RlciB8IHdjIC1sKSAmJgorCisJSEVBRF9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKworCWdpdCByZWZsb2cgZGVsZXRlIG1hc3RlckB7MDcuMDQuMjAwNS4xNToxNTowMC4tMDcwMH0gJiYKKwlnaXQgcmVmbG9nIHNob3cgbWFzdGVyID4gb3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gJCgoJG1hc3Rlcl9lbnRyeV9jb3VudCAtIDEpKSBvdXRwdXQgJiYKKwkhIGdyZXAgZHJhZ29uIDwgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3aW5kMicgJworCisJdGVzdF90aWNrICYmIGdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJZ2l0IHJlZmxvZyByZWZzL2hlYWRzL21hc3RlciA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1leHBpcmU9bmV2ZXInICcKKworCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSBcCisJCS0tZXhwaXJlPW5ldmVyIFwKKwkJLS1leHBpcmUtdW5yZWFjaGFibGU9bmV2ZXIgXAorCQktLWFsbCAmJgorCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djLnJlZmxvZ2V4cGlyZT1uZXZlcicgJworCXRlc3RfY29uZmlnIGdjLnJlZmxvZ2V4cGlyZSBuZXZlciAmJgorCXRlc3RfY29uZmlnIGdjLnJlZmxvZ2V4cGlyZXVucmVhY2hhYmxlIG5ldmVyICYmCisKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLXZlcmJvc2UgLS1hbGwgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDkgb3V0cHV0ICYmCisKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYy5yZWZsb2dleHBpcmU9ZmFsc2UnICcKKwl0ZXN0X2NvbmZpZyBnYy5yZWZsb2dleHBpcmUgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZSBmYWxzZSAmJgorCisJZ2l0IHJlZmxvZyBleHBpcmUgLS12ZXJib3NlIC0tYWxsICYmCisJZ2l0IHJlZmxvZyByZWZzL2hlYWRzL21hc3RlciA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVmbG9nIGV4cGlyZSB1bmtub3duIHJlZmVyZW5jZScgJworCXRlc3RfY29uZmlnIGdjLnJlZmxvZ2V4cGlyZSBuZXZlciAmJgorCXRlc3RfY29uZmlnIGdjLnJlZmxvZ2V4cGlyZXVucmVhY2hhYmxlIG5ldmVyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4cGlyZSBtYXN0ZXJAezEyM30gMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJwb2ludHMgbm93aGVyZSIgc3RkZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleHBpcmUgZG9lcy1ub3QtZXhpc3QgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJwb2ludHMgbm93aGVyZSIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHNob3VsZCBub3QgZGVsZXRlIGxvZyBmb3IgcGFja2VkIHJlZicgJworCXRlc3QgJChnaXQgcmVmbG9nIG1hc3RlciB8IHdjIC1sKSA9IDQgJiYKKwlnaXQgYnJhbmNoIGZvbyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgY2hlY2tvdXQgZm9vICYmCisJdGVzdCAkKGdpdCByZWZsb2cgbWFzdGVyIHwgd2MgLWwpID0gNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFsZSBkaXJzIGRvIG5vdCBjYXVzZSBkL2YgY29uZmxpY3RzIChyZWZsb2dzIG9uKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtZCBvbmUgfHwgZ2l0IGJyYW5jaCAtZCBvbmUvdHdvIiAmJgorCisJZ2l0IGJyYW5jaCBvbmUvdHdvIG1hc3RlciAmJgorCWVjaG8gIm9uZS90d29AezB9IGJyYW5jaDogQ3JlYXRlZCBmcm9tIG1hc3RlciIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVnZCAlZ3MiIG9uZS90d28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgYnJhbmNoIC1kIG9uZS90d28gJiYKKworCSMgbm93IGxvZ3MvcmVmcy9oZWFkcy9vbmUgaXMgYSBzdGFsZSBkaXJlY3RvcnksIGJ1dAorCSMgd2Ugc2hvdWxkIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkgdG8gY3JlYXRlICJvbmUiIHJlZmxvZworCWdpdCBicmFuY2ggb25lIG1hc3RlciAmJgorCWVjaG8gIm9uZUB7MH0gYnJhbmNoOiBDcmVhdGVkIGZyb20gbWFzdGVyIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgb25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YWxlIGRpcnMgZG8gbm90IGNhdXNlIGQvZiBjb25mbGljdHMgKHJlZmxvZ3Mgb2ZmKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtZCBvbmUgfHwgZ2l0IGJyYW5jaCAtZCBvbmUvdHdvIiAmJgorCisJZ2l0IGJyYW5jaCBvbmUvdHdvIG1hc3RlciAmJgorCWVjaG8gIm9uZS90d29AezB9IGJyYW5jaDogQ3JlYXRlZCBmcm9tIG1hc3RlciIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVnZCAlZ3MiIG9uZS90d28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgYnJhbmNoIC1kIG9uZS90d28gJiYKKworCSMgc2FtZSBhcyBiZWZvcmUsIGJ1dCB3ZSBvbmx5IGNyZWF0ZSBhIHJlZmxvZyBmb3IgIm9uZSIgaWYKKwkjIGl0IGFscmVhZHkgZXhpc3RzLCB3aGljaCBpdCBkb2VzIG5vdAorCWdpdCAtYyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXM9ZmFsc2UgYnJhbmNoIG9uZSBtYXN0ZXIgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiBvbmUgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKworIyBUcmlnZ2VyaW5nIHRoZSBidWcgZGV0ZWN0ZWQgYnkgdGhpcyB0ZXN0IHJlcXVpcmVzIGEgbmV3bGluZSB0byBmYWxsCisjIGV4YWN0bHkgQlVGU0laLTEgYnl0ZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBmaWxlLiBXZSBkb24ndCBrbm93CisjIHdoYXQgdGhhdCB2YWx1ZSBpcywgc2luY2UgaXQncyBwbGF0Zm9ybSBkZXBlbmRlbnQuIEhvd2V2ZXIsIGlmCisjIHdlIGNob29zZSBzb21lIHZhbHVlIE4sIHdlIGFsc28gY2F0Y2ggYW55IEQgd2hpY2ggZGl2aWRlcyBOIGV2ZW5seQorIyAoc2luY2Ugd2Ugd2lsbCByZWFkIGJhY2t3YXJkcyBpbiBjaHVua3Mgb2YgRCkuIFNvIHdlIGNob29zZSA4SywKKyMgd2hpY2ggY2F0Y2hlcyBnbGliYyAod2l0aCBhbiA4SyBCVUZTSVopIGFuZCAqQlNEICgxSykuCisjCisjIEVhY2ggbGluZSBpcyAxMTQgY2hhcmFjdGVycywgc28gd2UgbmVlZCA3NSB0byBzdGlsbCBoYXZlIGEgZmV3IGJlZm9yZSB0aGUKKyMgbGFzdCA4Sy4gVGhlIDg5LWNoYXJhY3RlciBwYWRkaW5nIG9uIHRoZSBmaW5hbCBlbnRyeSBsaW5lcyB1cCBvdXIKKyMgbmV3bGluZSBleGFjdGx5LgordGVzdF9leHBlY3Rfc3VjY2VzcyBTSEExICdwYXJzaW5nIHJldmVyc2UgcmVmbG9ncyBhdCBCVUZTSVogYm91bmRhcmllcycgJworCWdpdCBjaGVja291dCAtYiByZWZsb2dza2lwICYmCisJemY9JCh0ZXN0X29pZCB6ZXJvXzIpICYmCisJaWRlbnQ9ImFiYyA8eHl6PiAwMDAwMDAwMDAxICswMDAwIiAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSA3NSk7IGRvCisJCXByaW50ZiAiJHpmJTAyZCAkemYlMDJkICVzXHQiICRpICQoKCRpKzEpKSAiJGlkZW50IiAmJgorCQlpZiB0ZXN0ICRpID0gNzU7IHRoZW4KKwkJCWZvciBqIGluICQodGVzdF9zZXEgMSA4OSk7IGRvCisJCQkJcHJpbnRmIFgKKwkJCWRvbmUKKwkJZWxzZQorCQkJcHJpbnRmIFgKKwkJZmkgJiYKKwkJcHJpbnRmICJcbiIKKwlkb25lID4uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9yZWZsb2dza2lwICYmCisJZ2l0IHJldi1wYXJzZSByZWZsb2dza2lwQHs3M30gPmFjdHVhbCAmJgorCWVjaG8gJHt6Zn0wMyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBzZWdmYXVsdHMgZm9yIHJlZmxvZyBjb250YWluaW5nIG5vbi1jb21taXQgc2hhMXMnICcKKwlnaXQgdXBkYXRlLXJlZiAtLWNyZWF0ZS1yZWZsb2cgLW0gIkNyZWF0aW5nIHJlZiIgXAorCQlyZWZzL3Rlc3RzL3RyZWUtaW4tcmVmbG9nIEhFQUQgJiYKKwlnaXQgdXBkYXRlLXJlZiAtbSAiRm9yY2luZyB0cmVlIiByZWZzL3Rlc3RzL3RyZWUtaW4tcmVmbG9nIEhFQURee3RyZWV9ICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIlJlc3RvcmluZyB0byBjb21taXQiIHJlZnMvdGVzdHMvdHJlZS1pbi1yZWZsb2cgSEVBRCAmJgorCWdpdCByZWZsb2cgcmVmcy90ZXN0cy90cmVlLWluLXJlZmxvZworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZWZsb2cgd2l0aCBub24tY29tbWl0IGVudHJpZXMgZGlzcGxheXMgYWxsIGVudHJpZXMnICcKKwlnaXQgcmVmbG9nIHJlZnMvdGVzdHMvdHJlZS1pbi1yZWZsb2cgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBleHBpcmUgb3BlcmF0ZXMgb24gc3ltcmVmIG5vdCByZWZlcnJlbnQnICcKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyB0aGVfc3ltcmVmICYmCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgcmVmZXJyZW50ICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmZXJyZW50IEhFQUQgJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvdGhlX3N5bXJlZiByZWZzL2hlYWRzL3JlZmVycmVudCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL3JlZmVycmVudC5sb2NrIiAmJgorCXRvdWNoIC5naXQvcmVmcy9oZWFkcy9yZWZlcnJlbnQubG9jayAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCB0aGVfc3ltcmVmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbnRpbnVlIHdhbGtpbmcgcGFzdCByb290IGNvbW1pdHMnICcKKwlnaXQgaW5pdCBvcnBoYW5hZ2UgJiYKKwkoCisJCWNkIG9ycGhhbmFnZSAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCUhFQURAezB9IGNvbW1pdCAoaW5pdGlhbCk6IG9ycGhhbjItMQorCQlIRUFEQHsxfSBjb21taXQ6IG9ycGhhbjEtMgorCQlIRUFEQHsyfSBjb21taXQgKGluaXRpYWwpOiBvcnBoYW4xLTEKKwkJSEVBREB7M30gY29tbWl0IChpbml0aWFsKTogaW5pdGlhbAorCQlFT0YKKwkJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuMSAmJgorCQl0ZXN0X2NvbW1pdCBvcnBoYW4xLTEgJiYKKwkJdGVzdF9jb21taXQgb3JwaGFuMS0yICYmCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiBvcnBoYW4yICYmCisJCXRlc3RfY29tbWl0IG9ycGhhbjItMSAmJgorCQlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSB3aXRoIG11bHRpcGxlIHdvcmt0cmVlcycgJworCWdpdCBpbml0IG1haW4td3QgJiYKKwkoCisJCWNkIG1haW4td3QgJiYKKwkJdGVzdF90aWNrICYmCisJCXRlc3RfY29tbWl0IGZvbyAmJgorCQlnaXQgIHdvcmt0cmVlIGFkZCBsaW5rLXd0ICYmCisJCXRlc3RfdGljayAmJgorCQl0ZXN0X2NvbW1pdCAtQyBsaW5rLXd0IGZvb2JhciAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IHJlZmxvZyBleHBpcmUgLS12ZXJib3NlIC0tYWxsIC0tZXhwaXJlPSR0ZXN0X3RpY2sgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IC5naXQvd29ya3RyZWVzL2xpbmstd3QvbG9ncy9IRUFECisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MTEtcmVmbG9nLXNob3cuc2ggYi90L3QxNDExLXJlZmxvZy1zaG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4NWRhZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDExLXJlZmxvZy1zaG93LnNoCkBAIC0wLDAgKzEsMTc0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZWZsb2cgZGlzcGxheSByb3V0aW5lcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorY2F0ID5leHBlY3QgPDwnRU9GJworUmVmbG9nOiBIRUFEQHswfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1nIHNob3dzIHJlZmxvZyBoZWFkZXJzJyAnCisJZ2l0IGxvZyAtZyAtMSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyRjb21taXQgSEVBREB7MH06IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmVsaW5lIHJlZmxvZyBmb3JtYXQnICcKKwlnaXQgbG9nIC1nIC0xIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgZGVmYXVsdCBmb3JtYXQnICcKKwlnaXQgcmVmbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitjb21taXQgJGNvbW1pdAorUmVmbG9nOiBIRUFEQHswfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKworICAgIG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSByZWZsb2cgZGVmYXVsdCBmb3JtYXQnICcKKwlnaXQgcmVmbG9nIC0tZm9ybWF0PXNob3J0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1JlZmxvZzogSEVBREB7VGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDB9IChDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+KQorUmVmbG9nIG1lc3NhZ2U6IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBAe25vd30gc3ludGF4IHNob3dzIHJlZmxvZyBkYXRlIChtdWx0aWxpbmUpJyAnCisJZ2l0IGxvZyAtZyAtMSBIRUFEQHtub3d9ID50bXAgJiYKKwlncmVwIF5SZWZsb2cgPHRtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorJGNvbW1pdCBIRUFEQHtUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMH06IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBAe25vd30gc3ludGF4IHNob3dzIHJlZmxvZyBkYXRlIChvbmVsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgLS1vbmVsaW5lIEhFQURAe25vd30gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworSEVBREB7VGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDB9CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIEB7bm93fSBzeW50YXggc2hvd3MgcmVmbG9nIGRhdGUgKGZvcm1hdD0lZ2QpJyAnCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgSEVBREB7bm93fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitSZWZsb2c6IEhFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1kYXRlPSBzaG93cyByZWZsb2cgZGF0ZSAobXVsdGlsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgLS1kYXRlPWRlZmF1bHQgPnRtcCAmJgorCWdyZXAgXlJlZmxvZyA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskY29tbWl0IEhFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIC0tZGF0ZT0gc2hvd3MgcmVmbG9nIGRhdGUgKG9uZWxpbmUpJyAnCisJZ2l0IGxvZyAtZyAtMSAtLW9uZWxpbmUgLS1kYXRlPWRlZmF1bHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworSEVBREB7MTExMjkxMTk5MyAtMDcwMH0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1kYXRlPSBzaG93cyByZWZsb2cgZGF0ZSAoZm9ybWF0PSVnZCknICcKKwlnaXQgbG9nIC1nIC0xIC0tZm9ybWF0PSVnZCAtLWRhdGU9cmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1JlZmxvZzogSEVBREB7MH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCitSZWZsb2cgbWVzc2FnZTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5kYXRlIGRvZXMgbm90IGludm9rZSAiLS1kYXRlIiBtYWdpYyAobXVsdGlsaW5lKScgJworCXRlc3RfY29uZmlnIGxvZy5kYXRlIHJhdyAmJgorCWdpdCBsb2cgLWcgLTEgPnRtcCAmJgorCWdyZXAgXlJlZmxvZyA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskY29tbWl0IEhFQURAezB9OiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLmRhdGUgZG9lcyBub3QgaW52b2tlICItLWRhdGUiIG1hZ2ljIChvbmVsaW5lKScgJworCXRlc3RfY29uZmlnIGxvZy5kYXRlIHJhdyAmJgorCWdpdCBsb2cgLWcgLTEgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0hFQURAezB9CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5kYXRlIGRvZXMgbm90IGludm9rZSAiLS1kYXRlIiBtYWdpYyAoZm9ybWF0PSVnZCknICcKKwl0ZXN0X2NvbmZpZyBsb2cuZGF0ZSByYXcgJiYKKwlnaXQgbG9nIC1nIC0xIC0tZm9ybWF0PSVnZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitIRUFEQHswfQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRhdGUgbWFnaWMgZG9lcyBub3Qgb3ZlcnJpZGUgZXhwbGljaXQgQHswfSBzeW50YXgnICcKKwlnaXQgbG9nIC1nIC0xIC0tZm9ybWF0PSVnZCAtLWRhdGU9cmF3IEhFQURAezB9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHJlZmxvZyBmaWxlJyAnCisJZ2l0IGJyYW5jaCBlbXB0eSAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCByZWZzL2hlYWRzL2VtcHR5ICYmCisKKwlnaXQgbG9nIC1nIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKKyMgVGhpcyBndWFyZHMgYWdhaW5zdCB0aGUgYWx0ZXJuYXRpdmUgb2Ygc2hvd2luZyB0aGUgZGlmZnMgdnMuIHRoZQorIyByZWZsb2cgYW5jZXN0b3IuICBUaGUgcmVmbG9nIHVzZWQgaXMgZGVzaWduZWQgdG8gbGlzdCB0aGUgY29tbWl0cworIyBtb3JlIHRoYW4gb25jZSwgc28gYXMgdG8gZXhlcmNpc2UgdGhlIGNvcnJlc3BvbmRpbmcgbG9naWMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC1nIC1wIHNob3dzIGRpZmZzIHZzLiBwYXJlbnRzJyAnCisJdGVzdF9jb21taXQgdHdvICYmCisJZ2l0IGJyYW5jaCBmbGlwZmxvcCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZmxpcGZsb3AgLW0gZmxpcDEgSEVBRF4gJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZsaXBmbG9wIC1tIGZsb3AxIEhFQUQgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZsaXBmbG9wIC1tIGZsaXAyIEhFQUReICYmCisJZ2l0IGxvZyAtZyAtcCBmbGlwZmxvcCA+cmVmbG9nICYmCisJZ3JlcCAtdiBeUmVmbG9nIHJlZmxvZyA+YWN0dWFsICYmCisJZ2l0IGxvZyAtMSAtcCBIRUFEXiA+bG9nLm9uZSAmJgorCWdpdCBsb2cgLTEgLXAgSEVBRCA+bG9nLnR3byAmJgorCSgKKwkJY2F0IGxvZy5vbmUgJiYgZWNobyAmJgorCQljYXQgbG9nLnR3byAmJiBlY2hvICYmCisJCWNhdCBsb2cub25lICYmIGVjaG8gJiYKKwkJY2F0IGxvZy50d28KKwkpID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBleGlzdHMgd29ya3MnICcKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL21hc3RlciAmJgorCSEgZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9ub25leGlzdGVudAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MTItcmVmbG9nLWxvb3Auc2ggYi90L3QxNDEyLXJlZmxvZy1sb29wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhY2Q4OTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDEyLXJlZmxvZy1sb29wLnNoCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWZsb2cgd2FsayBzaG93cyByZXBlYXRlZCBjb21taXRzIGFnYWluJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdHMnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJZ2l0IHRhZyBvbmUgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCWdpdCB0YWcgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlZmxvZyB3aXRoIGFsdGVybmF0aW5nIGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwlnaXQgcmVzZXQgb25lICYmCisJZ2l0IHJlc2V0IHR3byAmJgorCWdpdCByZXNldCBvbmUgJiYKKwlnaXQgcmVzZXQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBzaG93cyBhbGwgZW50cmllcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJdG9waWNAezB9IHJlc2V0OiBtb3ZpbmcgdG8gdHdvCisJCXRvcGljQHsxfSByZXNldDogbW92aW5nIHRvIG9uZQorCQl0b3BpY0B7Mn0gcmVzZXQ6IG1vdmluZyB0byB0d28KKwkJdG9waWNAezN9IHJlc2V0OiBtb3ZpbmcgdG8gb25lCisJCXRvcGljQHs0fSBicmFuY2g6IENyZWF0ZWQgZnJvbSBIRUFECisJRU9GCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgdG9waWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDEzLXJlZmxvZy1kZXRhY2guc2ggYi90L3QxNDEzLXJlZmxvZy1kZXRhY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzczMDYwMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MTMtcmVmbG9nLWRldGFjaC5zaApAQCAtMCwwICsxLDcwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZWZsb2cgaW50ZXJhY3Rpb24gd2l0aCBkZXRhY2hlZCBIRUFEJworLiAuL3Rlc3QtbGliLnNoCisKK3Jlc2V0X3N0YXRlICgpIHsKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJY3Agc2F2ZWRfcmVmbG9nIC5naXQvbG9ncy9IRUFECit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNlY29uZCAmJgorCWNhdCAuZ2l0L2xvZ3MvSEVBRCA+c2F2ZWRfcmVmbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYmFzZWxpbmUgJworCXJlc2V0X3N0YXRlICYmCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgbWFzdGVyXiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gYnJhbmNoJyAnCisJcmVzZXRfc3RhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIHNpZGUgbWFzdGVyIG1hc3Rlcl4gPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRhY2ggdG8gb3RoZXInICcKKwlyZXNldF9zdGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyIHNpZGUgbWFzdGVyIG1hc3Rlcl4gPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRhY2ggdG8gc2VsZicgJworCXJlc2V0X3N0YXRlICYmCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgbWFzdGVyIG1hc3Rlcl4gPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0YWNoIHRvIHNlbGYnICcKKwlyZXNldF9zdGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyIG1hc3RlciBtYXN0ZXIgbWFzdGVyXiA+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0YWNoIHRvIG90aGVyJyAnCisJcmVzZXRfc3RhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIHNpZGUgbWFzdGVyIG1hc3RlciBtYXN0ZXJeID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDE0LXJlZmxvZy13YWxrLnNoIGIvdC90MTQxNC1yZWZsb2ctd2Fsay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTgxYTlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTQxNC1yZWZsb2ctd2Fsay5zaApAQCAtMCwwICsxLDEzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ZhcmlvdXMgdGVzdHMgb2YgcmVmbG9nIHdhbGsgKGxvZyAtZykgYmVoYXZpb3InCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHNvbWUgcmVmbG9nIGVudHJpZXMnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IG1hc3RlciAmJgorCWVjaG8gZXZpbC1tZXJnZS1jb250ZW50ID4+b25lLnQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tbm8tZWRpdCAtYQorJworCitkb193YWxrICgpIHsKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBleHBlY3RlZCByZWZsb2cnICcKKwljYXQgPmV4cGVjdC5hbGwgPDwtRU9GCisJSEVBREB7MH0gY29tbWl0IChtZXJnZSk6IE1lcmdlIGJyYW5jaCAke1NRfW1hc3RlciR7U1F9IGludG8gc2lkZQorCUhFQURAezF9IGNvbW1pdDogdGhyZWUKKwlIRUFEQHsyfSBjaGVja291dDogbW92aW5nIGZyb20gbWFzdGVyIHRvIHNpZGUKKwlIRUFEQHszfSBjb21taXQ6IHR3bworCUhFQURAezR9IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgd2FsayBzaG93cyBleHBlY3RlZCBsb2dzJyAnCisJZG9fd2FsayA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmFsbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGNhbiBsaW1pdCB3aXRoIC0tbm8tbWVyZ2VzJyAnCisJZ3JlcCAtdiBtZXJnZSBleHBlY3QuYWxsID5leHBlY3QgJiYKKwlkb193YWxrIC0tbm8tbWVyZ2VzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBjYW4gbGltaXQgd2l0aCBwYXRoc3BlY3MnICcKKwlncmVwIHR3byBleHBlY3QuYWxsID5leHBlY3QgJiYKKwlkb193YWxrIC0tIHR3by50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzcGVjIGxpbWl0aW5nIGhhbmRsZXMgbWVyZ2VzJyAnCisJIyB3ZSBwaWNrIHVwOgorCSMgICAtIHRoZSBpbml0aWFsIGNvbW1pdCBvZiBvbmUKKwkjICAgLSB0aGUgY2hlY2tvdXQgYmFjayB0byBjb21taXQgb25lCisJIyAgIC0gdGhlIGV2aWwgbWVyZ2Ugd2hpY2ggdG91Y2hlZCBvbmUKKwlzZWQgLW4gIjFwOzNwOzVwIiBleHBlY3QuYWxsID5leHBlY3QgJiYKKwlkb193YWxrIC0tIG9uZS50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGFyZW50cyBzaG93cyB0cnVlIHBhcmVudHMnICcKKwkjIGNvbnZlcnQgbmV3bGluZXMgdG8gc3BhY2VzCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRCBIRUFEXjEgSEVBRF4yKSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC1nIC0tcGFyZW50cyAtMSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhbGtpbmcgbXVsdGlwbGUgcmVmbG9ncyBzaG93cyBhbGwnICcKKwkjIFdlIGV4cGVjdCB0byBzZWUgYWxsIGVudHJpZXMgZm9yIGFsbCByZWZsb2dzLCBidXQgaW50ZXJsZWF2ZWQgYnkKKwkjIGRhdGUsIHdpdGggb3JkZXIgb24gdGhlIGNvbW1hbmQgbGluZSBicmVha2luZyB0aWVzLiBXZQorCSMgY2FuIHVzZSAic29ydCIgb24gdGhlIHNlcGFyYXRlIGxpc3RzIHRvIGdlbmVyYXRlIHRoaXMsCisJIyBidXQgbm90ZSB0d28gdHJpY2tzOgorCSMKKwkjICAgMS4gV2UgdXNlICJ7IiBhcyB0aGUgZGVsaW1pdGVyLCB3aGljaCBsZXRzIHVzIHNraXAgdG8gdGhlIHJlZmxvZworCSMgICAgICBkYXRlIHNwZWNpZmllciBhcyBvdXIgc2Vjb25kIGZpZWxkLCBhbmQgdGhlbiBvdXIgIi1uIiBudW1lcmljCisJIyAgICAgIHNvcnQgaWdub3JlcyB0aGUgYml0cyBhZnRlciB0aGUgdGltZXN0YW1wLgorCSMKKwkjICAgMi4gUE9TSVggbGVhdmVzIHVuZGVmaW5lZCB3aGV0aGVyIHRoaXMgaXMgYSBzdGFibGUgc29ydCBvciBub3QuIFNvCisJIyAgICAgIHdlIHVzZSAiLWsgMSIgdG8gZW5zdXJlIHRoYXQgd2Ugc2VlIEhFQUQgYmVmb3JlIG1hc3RlciBiZWZvcmUKKwkjICAgICAgc2lkZSB3aGVuIGJyZWFraW5nIHRpZXMuCisJeworCQlkb193YWxrIC0tZGF0ZT11bml4IEhFQUQgJiYKKwkJZG9fd2FsayAtLWRhdGU9dW5peCBzaWRlICYmCisJCWRvX3dhbGsgLS1kYXRlPXVuaXggbWFzdGVyCisJfSA+ZXhwZWN0LnJhdyAmJgorCXNvcnQgLXQgInsiIC1rIDJuciAtayAxIDxleHBlY3QucmF3ID5leHBlY3QgJiYKKwlkb193YWxrIC0tZGF0ZT11bml4IEhFQUQgbWFzdGVyIHNpZGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGF0ZS1saW1pdGluZyBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aCBvdGhlciBsb2dzJyAnCisJZG9fd2FsayBIRUFEQHsxOTc5LTAxLTAxfSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaW4vbWF4IGFnZSB1c2VzIGVudHJ5IGRhdGUgdG8gbGltaXQnICcKKwkjIEZsaXAgYmV0d2VlbiBjb21taXRzIG9uZSBhbmQgdHdvIHNvIGVhY2ggcmVmIHVwZGF0ZSBhY3R1YWxseQorCSMgZG9lcyBzb21ldGhpbmcgKGFuZCBkb2VzIG5vdCBnZXQgb3B0aW1pemVkIG91dCkuIFdlIGtub3cKKwkjIHRoYXQgdGhlIHRpbWVzdGFtcHMgb2YgdGhvc2UgY29tbWl0cyB3aWxsIGJlIGJlZm9yZSBvdXIgIm1pbiIuCisKKwlnaXQgdXBkYXRlLXJlZiAtbSBiZWZvcmUgcmVmcy9oZWFkcy9taW5tYXggb25lICYmCisKKwl0ZXN0X3RpY2sgJiYKKwltaW49JHRlc3RfdGljayAmJgorCWdpdCB1cGRhdGUtcmVmIC1tIG1pbiByZWZzL2hlYWRzL21pbm1heCB0d28gJiYKKworCXRlc3RfdGljayAmJgorCW1heD0kdGVzdF90aWNrICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gbWF4IHJlZnMvaGVhZHMvbWlubWF4IG9uZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gYWZ0ZXIgcmVmcy9oZWFkcy9taW5tYXggdHdvICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWF4CisJbWluCisJRU9GCisJZ2l0IGxvZyAtZyAtLXNpbmNlPSRtaW4gLS11bnRpbD0kbWF4IC0tZm9ybWF0PSVncyBtaW5tYXggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FsayBwcmVmZXJzIHJlZmxvZyB0byByZWYgdGlwJyAnCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlvbmU9JChnaXQgcmV2LXBhcnNlIG9uZSkgJiYKKwlpZGVudD0iJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUiICYmCisJZWNobyAiJGhlYWQgJG9uZSAkaWRlbnQJYnJva2VuIHJlZmxvZyBlbnRyeSIgPj4uZ2l0L2xvZ3MvSEVBRCAmJgorCisJZWNobyAkb25lID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSVIIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC1nIGNvbXBsYWlucyB3aGVuIHRoZXJlIGFyZSBubyByZWZsb2dzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC1nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQxNS13b3JrdHJlZS1yZWZzLnNoIGIvdC90MTQxNS13b3JrdHJlZS1yZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiMmM3NTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDE1LXdvcmt0cmVlLXJlZnMuc2gKQEAgLTAsMCArMSwxMTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwZXItd29ya3RyZWUgcmVmcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0IHd0MSAmJgorCXRlc3RfY29tbWl0IHd0MiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgd3QxIHd0MSAmJgorCWdpdCB3b3JrdHJlZSBhZGQgd3QyIHd0MiAmJgorCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy93b3JrdHJlZS9mb28gSEVBRCAmJgorCWdpdCAtQyB3dDEgdXBkYXRlLXJlZiByZWZzL3dvcmt0cmVlL2ZvbyBIRUFEICYmCisJZ2l0IC1DIHd0MiB1cGRhdGUtcmVmIHJlZnMvd29ya3RyZWUvZm9vIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcy93b3JrdHJlZSBtdXN0IG5vdCBiZSBwYWNrZWQnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL3RhZ3Mvd3QxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL3dvcmt0cmVlL2ZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvd29ya3RyZWVzL3d0MS9yZWZzL3dvcmt0cmVlL2ZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvd29ya3RyZWVzL3d0Mi9yZWZzL3dvcmt0cmVlL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzL3dvcmt0cmVlIGFyZSBwZXItd29ya3RyZWUnICcKKwl0ZXN0X2NtcF9yZXYgd29ya3RyZWUvZm9vIGluaXRpYWwgJiYKKwkoIGNkIHd0MSAmJiB0ZXN0X2NtcF9yZXYgd29ya3RyZWUvZm9vIHd0MSApICYmCisJKCBjZCB3dDIgJiYgdGVzdF9jbXBfcmV2IHdvcmt0cmVlL2ZvbyB3dDIgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlIG1haW4td29ya3RyZWUvSEVBRCcgJworCXRlc3RfY21wX3JldiBtYWluLXdvcmt0cmVlL0hFQUQgaW5pdGlhbCAmJgorCSggY2Qgd3QxICYmIHRlc3RfY21wX3JldiBtYWluLXdvcmt0cmVlL0hFQUQgaW5pdGlhbCApICYmCisJKCBjZCB3dDIgJiYgdGVzdF9jbXBfcmV2IG1haW4td29ya3RyZWUvSEVBRCBpbml0aWFsICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIG1haW4td29ya3RyZWUvSEVBRCcgJworCW1rZGlyIC1wIC5naXQvcmVmcy9oZWFkcy9tYWluLXdvcmt0cmVlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIC5naXQvcmVmcy9oZWFkcy9tYWluLXdvcmt0cmVlL0hFQUQgJiYKKwljcCAuZ2l0L0hFQUQgLmdpdC9yZWZzL2hlYWRzL21haW4td29ya3RyZWUvSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgbWFpbi13b3JrdHJlZS9IRUFEIDI+d2FybiAmJgorCWdyZXAgIm1haW4td29ya3RyZWUvSEVBRC4qYW1iaWd1b3VzIiB3YXJuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmUgd29ya3RyZWVzL3h4L0hFQUQnICcKKwl0ZXN0X2NtcF9yZXYgd29ya3RyZWVzL3d0MS9IRUFEIHd0MSAmJgorCSggY2Qgd3QxICYmIHRlc3RfY21wX3JldiB3b3JrdHJlZXMvd3QxL0hFQUQgd3QxICkgJiYKKwkoIGNkIHd0MiAmJiB0ZXN0X2NtcF9yZXYgd29ya3RyZWVzL3d0MS9IRUFEIHd0MSApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyB3b3JrdHJlZXMveHgvSEVBRCcgJworCW1rZGlyIC1wIC5naXQvcmVmcy9oZWFkcy93b3JrdHJlZXMvd3QxICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIC5naXQvcmVmcy9oZWFkcy93b3JrdHJlZXMvd3QxL0hFQUQgJiYKKwljcCAuZ2l0L0hFQUQgLmdpdC9yZWZzL2hlYWRzL3dvcmt0cmVlcy93dDEvSEVBRCAmJgorCWdpdCByZXYtcGFyc2Ugd29ya3RyZWVzL3d0MS9IRUFEIDI+d2FybiAmJgorCWdyZXAgIndvcmt0cmVlcy93dDEvSEVBRC4qYW1iaWd1b3VzIiB3YXJuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBvZiBtYWluLXdvcmt0cmVlL0hFQUQnICcKKwlnaXQgcmVmbG9nIEhFQUQgfCBzZWQgInMvSEVBRC9tYWluLXdvcmt0cmVlXC9IRUFELyIgPmV4cGVjdGVkICYmCisJZ2l0IHJlZmxvZyBtYWluLXdvcmt0cmVlL0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCAtQyB3dDEgcmVmbG9nIG1haW4td29ya3RyZWUvSEVBRCA+YWN0dWFsLnd0MSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC53dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIG9mIHdvcmt0cmVlcy94eC9IRUFEJyAnCisJZ2l0IC1DIHd0MiByZWZsb2cgSEVBRCB8IHNlZCAicy9IRUFEL3dvcmt0cmVlc1wvd3QyXC9IRUFELyIgPmV4cGVjdGVkICYmCisJZ2l0IHJlZmxvZyB3b3JrdHJlZXMvd3QyL0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCAtQyB3dDEgcmVmbG9nIHdvcmt0cmVlcy93dDIvSEVBRCA+YWN0dWFsLnd0MSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC53dDEgJiYKKwlnaXQgLUMgd3QyIHJlZmxvZyB3b3JrdHJlZXMvd3QyL0hFQUQgPmFjdHVhbC53dDIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwud3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvci1lYWNoLXJlZiBmcm9tIG1haW4gcmVwbycgJworCW1rZGlyIGZlcjEgJiYKKwlnaXQgLUMgZmVyMSBpbml0IHJlcG8gJiYKKwl0ZXN0X2NvbW1pdCAtQyBmZXIxL3JlcG8gaW5pdGlhbCAmJgorCWdpdCAtQyBmZXIxL3JlcG8gd29ya3RyZWUgYWRkIC4uL3NlY29uZCAmJgorCWdpdCAtQyBmZXIxL3JlcG8gdXBkYXRlLXJlZiByZWZzL2Jpc2VjdC9tYWluIEhFQUQgJiYKKwlnaXQgLUMgZmVyMS9yZXBvIHVwZGF0ZS1yZWYgcmVmcy9yZXdyaXR0ZW4vbWFpbiBIRUFEICYmCisJZ2l0IC1DIGZlcjEvcmVwbyB1cGRhdGUtcmVmIHJlZnMvd29ya3RyZWUvbWFpbiBIRUFEICYmCisJZ2l0IC1DIGZlcjEvcmVwbyBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIHwgZ3JlcCBtYWluID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlyZWZzL2Jpc2VjdC9tYWluCisJcmVmcy9yZXdyaXR0ZW4vbWFpbgorCXJlZnMvd29ya3RyZWUvbWFpbgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3ItZWFjaC1yZWYgZnJvbSBsaW5rZWQgcmVwbycgJworCW1rZGlyIGZlcjIgJiYKKwlnaXQgLUMgZmVyMiBpbml0IHJlcG8gJiYKKwl0ZXN0X2NvbW1pdCAtQyBmZXIyL3JlcG8gaW5pdGlhbCAmJgorCWdpdCAtQyBmZXIyL3JlcG8gd29ya3RyZWUgYWRkIC4uL3NlY29uZCAmJgorCWdpdCAtQyBmZXIyL3NlY29uZCB1cGRhdGUtcmVmIHJlZnMvYmlzZWN0L3NlY29uZCBIRUFEICYmCisJZ2l0IC1DIGZlcjIvc2Vjb25kIHVwZGF0ZS1yZWYgcmVmcy9yZXdyaXR0ZW4vc2Vjb25kIEhFQUQgJiYKKwlnaXQgLUMgZmVyMi9zZWNvbmQgdXBkYXRlLXJlZiByZWZzL3dvcmt0cmVlL3NlY29uZCBIRUFEICYmCisJZ2l0IC1DIGZlcjIvc2Vjb25kIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgfCBncmVwIHNlY29uZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJcmVmcy9iaXNlY3Qvc2Vjb25kCisJcmVmcy9oZWFkcy9zZWNvbmQKKwlyZWZzL3Jld3JpdHRlbi9zZWNvbmQKKwlyZWZzL3dvcmt0cmVlL3NlY29uZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MjAtbG9zdC1mb3VuZC5zaCBiL3QvdDE0MjAtbG9zdC1mb3VuZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzllNDAyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTQyMC1sb3N0LWZvdW5kLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGZzY2sgLS1sb3N0LWZvdW5kJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIDAgJiYKKwk6ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyAxID4gZmlsZTEgJiYKKwllY2hvIDIgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWVjaG8gMyA+IGZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb3N0IGFuZCBmb3VuZCBzb21ldGhpbmcnICcKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPiBsb3N0LWNvbW1pdCAmJgorCWdpdCByZXYtcGFyc2UgOmZpbGUzID4gbG9zdC1vdGhlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgZnNjayAtLWxvc3QtZm91bmQgJiYKKwl0ZXN0IDIgPSAkKGxzIC5naXQvbG9zdC1mb3VuZC8qLyogfCB3YyAtbCkgJiYKKwl0ZXN0IC1mIC5naXQvbG9zdC1mb3VuZC9jb21taXQvJChjYXQgbG9zdC1jb21taXQpICYmCisJdGVzdCAtZiAuZ2l0L2xvc3QtZm91bmQvb3RoZXIvJChjYXQgbG9zdC1vdGhlcikKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDMwLWJhZC1yZWYtbmFtZS5zaCBiL3QvdDE0MzAtYmFkLXJlZi1uYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3ODc4YTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDMwLWJhZC1yZWYtbmFtZS5zaApAQCAtMCwwICsxLDM3NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgaGFuZGxpbmcgb2YgcmVmIG5hbWVzIHRoYXQgY2hlY2stcmVmLWZvcm1hdCByZWplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWltcG9ydDogZmFpbCBvbiBpbnZhbGlkIGJyYW5jaCBuYW1lICIuYmFkYnJhbmNobmFtZSInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrXyogLmdpdC9vYmplY3RzL2luZGV4XyoiICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwkJY29tbWl0IC5iYWRicmFuY2huYW1lCisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCWNvcnJ1cHQKKwkJQ09NTUlUCisKKwkJZnJvbSByZWZzL2hlYWRzL21hc3RlcgorCisJSU5QVVRfRU5ECisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWltcG9ydDogZmFpbCBvbiBpbnZhbGlkIGJyYW5jaCBuYW1lICJiYWRbYnJhbmNoXW5hbWUiJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFja18qIC5naXQvb2JqZWN0cy9pbmRleF8qIiAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJCWNvbW1pdCBiYWRbYnJhbmNoXW5hbWUKKwkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCWRhdGEgPDxDT01NSVQKKwkJY29ycnVwdAorCQlDT01NSVQKKworCQlmcm9tIHJlZnMvaGVhZHMvbWFzdGVyCisKKwlJTlBVVF9FTkQKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggc2hvd3MgYmFkbHkgbmFtZWQgcmVmIGFzIHdhcm5pbmcnICcKKwljcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSByZWZzL2hlYWRzL2Jyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBjYW4gZGVsZXRlIGJhZGx5IG5hbWVkIHJlZicgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlnaXQgYnJhbmNoIC1kIGJyb2tlbi4uLnJlZiAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLUQgY2FuIGRlbGV0ZSBiYWRseSBuYW1lZCByZWYnICcKKwljcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJZ2l0IGJyYW5jaCAtRCBicm9rZW4uLi5yZWYgJiYKKwlnaXQgYnJhbmNoID5vdXRwdXQgMj5lcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBlcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1EIGNhbm5vdCBkZWxldGUgbm9uLXJlZiBpbiAuZ2l0IGRpcicgJworCWVjaG8gcHJlY2lvdXMgPi5naXQvbXktcHJpdmF0ZS1maWxlICYmCisJZWNobyBwcmVjaW91cyA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtRCAuLi8uLi9teS1wcml2YXRlLWZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9teS1wcml2YXRlLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1EIGNhbm5vdCBkZWxldGUgcmVmIGluIC5naXQgZGlyJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEID4uZ2l0L215LXByaXZhdGUtZmlsZSAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IGJyYW5jaCBmb28vbGVnaXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1EIGZvby8vLy8uLy4vLi8uLi8uLi8uLi9teS1wcml2YXRlLWZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9teS1wcml2YXRlLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1EIGNhbm5vdCBkZWxldGUgYWJzb2x1dGUgcGF0aCcgJworCWdpdCBicmFuY2ggLWYgZXh0cmEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1EICIkKHB3ZCkvLmdpdC9yZWZzL2hlYWRzL2V4dHJhIiAmJgorCXRlc3RfY21wX3JldiBIRUFEIGV4dHJhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggY2Fubm90IGNyZWF0ZSBhIGJhZGx5IG5hbWVkIHJlZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGJyb2tlbi4uLnJlZiAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLW0gY2Fubm90IHJlbmFtZSB0byBhIGJhZCByZWYgbmFtZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBnb29kcmVmICYmCisJZ2l0IGJyYW5jaCBnb29kcmVmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSBnb29kcmVmIGJyb2tlbi4uLnJlZiAmJgorCXRlc3RfY21wX3JldiBtYXN0ZXIgZ29vZHJlZiAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdicmFuY2ggLW0gY2FuIHJlbmFtZSBmcm9tIGEgYmFkIHJlZiBuYW1lJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCBicmFuY2ggLW0gYnJva2VuLi4ucmVmIHJlbmFtZWQgJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyIHJlbmFtZWQgJiYKKwlnaXQgYnJhbmNoID5vdXRwdXQgMj5lcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBlcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBjYW5ub3QgY3JlYXRlIGEgYmFkbHkgbmFtZWQgcmVmJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoICJmaWxlOi8vJChwd2QpIiBIRUFEOnJlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgQ19MT0NBTEVfT1VUUFVUICdwdXNoIC0tbWlycm9yIGNhbiBkZWxldGUgYmFkbHkgbmFtZWQgcmVmJyAnCisJdG9wPSQocHdkKSAmJgorCWdpdCBpbml0IHNyYyAmJgorCWdpdCBpbml0IGRlc3QgJiYKKworCSgKKwkJY2Qgc3JjICYmCisJCXRlc3RfY29tbWl0IG9uZQorCSkgJiYKKwkoCisJCWNkIGRlc3QgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBjaGVja291dCAtLWRldGFjaCAmJgorCQljcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYKKwkpICYmCisJZ2l0IC1DIHNyYyBwdXNoIC0tbWlycm9yICJmaWxlOi8vJHRvcC9kZXN0IiAmJgorCWdpdCAtQyBkZXN0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSBza2lwcyBzeW1yZWYgcG9pbnRpbmcgdG8gYnJva2VuIG5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJZ2l0IGJyYW5jaCBzaGFkb3cgb25lICYmCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJcHJpbnRmICJyZWY6IHJlZnMvaGVhZHMvYnJva2VuLi4ucmVmXG4iID4uZ2l0L3JlZnMvdGFncy9zaGFkb3cgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy90YWdzL3NoYWRvdyIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG9uZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzaGFkb3cgPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgcmVmcy90YWdzL3NoYWRvdyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvci1lYWNoLXJlZiBlbWl0cyB3YXJuaW5ncyBmb3IgYnJva2VuIG5hbWVzJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCXByaW50ZiAicmVmOiByZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZlxuIiA+LmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9iYWRuYW1lIiAmJgorCXByaW50ZiAicmVmOiByZWZzL2hlYWRzL21hc3RlclxuIiA+LmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmID5vdXRwdXQgMj5lcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQgJiYKKwkhIGdyZXAgLWUgImJhZG5hbWUiIG91dHB1dCAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwuc3ltcmVmIiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSByZWZzL2hlYWRzL2Jyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJpZ25vcmluZyBicm9rZW4gcmVmIHJlZnMvaGVhZHMvYmFkbmFtZSIgZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJpZ25vcmluZyByZWYgd2l0aCBicm9rZW4gbmFtZSByZWZzL2hlYWRzL2Jyb2tlblwuXC5cLnN5bXJlZiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtZCBjYW4gZGVsZXRlIGJyb2tlbiBuYW1lJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYnJva2VuLi4ucmVmID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwlnaXQgYnJhbmNoID5vdXRwdXQgMj5lcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBlcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIGNhbiBkZWxldGUgYnJva2VuIG5hbWUnICcKKwljcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJZ2l0IGJyYW5jaCAtZCBicm9rZW4uLi5yZWYgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiRGVsZXRlZCBicmFuY2ggYnJva2VuLi4ucmVmICh3YXMgYnJva2VuKSIgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCBjYW4gZGVsZXRlIHN5bXJlZiB0byBicm9rZW4gbmFtZScgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9icm9rZW4uLi5yZWZcbiIgPi5naXQvcmVmcy9oZWFkcy9iYWRuYW1lICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIHJlZnMvaGVhZHMvYmFkbmFtZSA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIGNhbiBkZWxldGUgc3ltcmVmIHRvIGJyb2tlbiBuYW1lJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCXByaW50ZiAicmVmOiByZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZlxuIiA+LmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9iYWRuYW1lIiAmJgorCWdpdCBicmFuY2ggLWQgYmFkbmFtZSA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3RfaTE4bmdyZXAgIkRlbGV0ZWQgYnJhbmNoIGJhZG5hbWUgKHdhcyByZWZzL2hlYWRzL2Jyb2tlblwuXC5cLnJlZikiIG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgY2FuIGRlbGV0ZSBkYW5nbGluZyBzeW1yZWYgdG8gYnJva2VuIG5hbWUnICcKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9icm9rZW4uLi5yZWZcbiIgPi5naXQvcmVmcy9oZWFkcy9iYWRuYW1lICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIHJlZnMvaGVhZHMvYmFkbmFtZSA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIGNhbiBkZWxldGUgZGFuZ2xpbmcgc3ltcmVmIHRvIGJyb2tlbiBuYW1lJyAnCisJcHJpbnRmICJyZWY6IHJlZnMvaGVhZHMvYnJva2VuLi4ucmVmXG4iID4uZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUiICYmCisJZ2l0IGJyYW5jaCAtZCBiYWRuYW1lID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9iYWRuYW1lICYmCisJdGVzdF9pMThuZ3JlcCAiRGVsZXRlZCBicmFuY2ggYmFkbmFtZSAod2FzIHJlZnMvaGVhZHMvYnJva2VuXC5cLlwucmVmKSIgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLWQgY2FuIGRlbGV0ZSBicm9rZW4gbmFtZSB0aHJvdWdoIHN5bXJlZicgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9icm9rZW4uLi5yZWZcbiIgPi5naXQvcmVmcy9oZWFkcy9iYWRuYW1lICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYmFkbmFtZSIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JhZG5hbWUgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIGNhbiBkZWxldGUgc3ltcmVmIHdpdGggYnJva2VuIG5hbWUnICcKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9tYXN0ZXJcbiIgPi5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCByZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4uc3ltcmVmICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgY2FuIGRlbGV0ZSBzeW1yZWYgd2l0aCBicm9rZW4gbmFtZScgJworCXByaW50ZiAicmVmOiByZWZzL2hlYWRzL21hc3RlclxuIiA+LmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiIgJiYKKwlnaXQgYnJhbmNoIC1kIGJyb2tlbi4uLnN5bXJlZiA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4uc3ltcmVmICYmCisJdGVzdF9pMThuZ3JlcCAiRGVsZXRlZCBicmFuY2ggYnJva2VuLi4uc3ltcmVmICh3YXMgcmVmcy9oZWFkcy9tYXN0ZXIpIiBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIGNhbiBkZWxldGUgZGFuZ2xpbmcgc3ltcmVmIHdpdGggYnJva2VuIG5hbWUnICcKKwlwcmludGYgInJlZjogcmVmcy9oZWFkcy9pZG9ub3RleGlzdFxuIiA+LmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIHJlZnMvaGVhZHMvYnJva2VuLi4uc3ltcmVmID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtZCBjYW4gZGVsZXRlIGRhbmdsaW5nIHN5bXJlZiB3aXRoIGJyb2tlbiBuYW1lJyAnCisJcHJpbnRmICJyZWY6IHJlZnMvaGVhZHMvaWRvbm90ZXhpc3RcbiIgPi5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5zeW1yZWYiICYmCisJZ2l0IGJyYW5jaCAtZCBicm9rZW4uLi5zeW1yZWYgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnN5bXJlZiAmJgorCXRlc3RfaTE4bmdyZXAgIkRlbGV0ZWQgYnJhbmNoIGJyb2tlbi4uLnN5bXJlZiAod2FzIHJlZnMvaGVhZHMvaWRvbm90ZXhpc3QpIiBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtZCBjYW5ub3QgZGVsZXRlIG5vbi1yZWYgaW4gLmdpdCBkaXInICcKKwllY2hvIHByZWNpb3VzID4uZ2l0L215LXByaXZhdGUtZmlsZSAmJgorCWVjaG8gcHJlY2lvdXMgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kIG15LXByaXZhdGUtZmlsZSA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAtZSAicmVmdXNpbmcgdG8gdXBkYXRlIHJlZiB3aXRoIGJhZCBuYW1lIiBlcnJvciAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L215LXByaXZhdGUtZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC1kIGNhbm5vdCBkZWxldGUgYWJzb2x1dGUgcGF0aCcgJworCWdpdCBicmFuY2ggLWYgZXh0cmEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtZCAiJChwd2QpLy5naXQvcmVmcy9oZWFkcy9leHRyYSIgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBleHRyYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tc3RkaW4gZmFpbHMgY3JlYXRlIHdpdGggYmFkIHJlZiBuYW1lJyAnCisJZWNobyAiY3JlYXRlIH5hIHJlZnMvaGVhZHMvbWFzdGVyIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBpbnZhbGlkIHJlZiBmb3JtYXQ6IH5hIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLXN0ZGluIGZhaWxzIHVwZGF0ZSB3aXRoIGJhZCByZWYgbmFtZScgJworCWVjaG8gInVwZGF0ZSB+YSByZWZzL2hlYWRzL21hc3RlciIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogaW52YWxpZCByZWYgZm9ybWF0OiB+YSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1zdGRpbiBmYWlscyBkZWxldGUgd2l0aCBiYWQgcmVmIG5hbWUnICcKKwllY2hvICJkZWxldGUgfmEgcmVmcy9oZWFkcy9tYXN0ZXIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGludmFsaWQgcmVmIGZvcm1hdDogfmEiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tc3RkaW4gLXogZmFpbHMgY3JlYXRlIHdpdGggYmFkIHJlZiBuYW1lJyAnCisJcHJpbnRmICIlc1wwIiAiY3JlYXRlIH5hICIgcmVmcy9oZWFkcy9tYXN0ZXIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogaW52YWxpZCByZWYgZm9ybWF0OiB+YSAiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tc3RkaW4gLXogZmFpbHMgdXBkYXRlIHdpdGggYmFkIHJlZiBuYW1lJyAnCisJcHJpbnRmICIlc1wwIiAidXBkYXRlIH5hIiByZWZzL2hlYWRzL21hc3RlciAiIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBpbnZhbGlkIHJlZiBmb3JtYXQ6IH5hIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLXN0ZGluIC16IGZhaWxzIGRlbGV0ZSB3aXRoIGJhZCByZWYgbmFtZScgJworCXByaW50ZiAiJXNcMCIgImRlbGV0ZSB+YSIgcmVmcy9oZWFkcy9tYXN0ZXIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogaW52YWxpZCByZWYgZm9ybWF0OiB+YSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCByZWplY3RzIEhFQUQgYXMgYSBicmFuY2ggbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggSEVBRCBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgcmVqZWN0cyBIRUFEIGFzIGEgYnJhbmNoIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLUIgSEVBRCBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiBjYW4gb3BlcmF0ZSBvbiByZWZzL2hlYWRzL0hFQUQnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL0hFQUQgSEVBRF4gJiYKKwlnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9IRUFEICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgY2FuIHJlbW92ZSByZWZzL2hlYWRzL0hFQUQnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL0hFQUQgSEVBRF4gJiYKKwlnaXQgYnJhbmNoIC1kIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtbSBjYW4gcmVuYW1lIHJlZnMvaGVhZHMvSEVBRCcgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvSEVBRCBIRUFEXiAmJgorCWdpdCBicmFuY2ggLW0gSEVBRCB0YWlsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvSEVBRCAmJgorCWdpdCBzaG93LXJlZiByZWZzL2hlYWRzL3RhaWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIGNhbiByZW1vdmUgcmVmcy9oZWFkcy8tZGFzaCcgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvLWRhc2ggSEVBRF4gJiYKKwlnaXQgYnJhbmNoIC1kIC0tIC1kYXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvLWRhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1tIGNhbiByZW5hbWUgcmVmcy9oZWFkcy8tZGFzaCcgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvLWRhc2ggSEVBRF4gJiYKKwlnaXQgYnJhbmNoIC1tIC0tIC1kYXNoIGRhc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy8tZGFzaCAmJgorCWdpdCBzaG93LXJlZiByZWZzL2hlYWRzL2Rhc2gKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDUwLWZzY2suc2ggYi90L3QxNDUwLWZzY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDA5ZWZmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0NTAtZnNjay5zaApAQCAtMCwwICsxLDgxOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBmc2NrIHJhbmRvbSBjb2xsZWN0aW9uIG9mIHRlc3RzCisKKyogKEhFQUQpIEIKKyogKG1hc3RlcikgQQorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9vaWRfaW5pdCAmJgorCWdpdCBjb25maWcgZ2MuYXV0byAwICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwl0ZXN0X2NvbW1pdCBBIGZpbGVBIG9uZSAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCXRlc3RfY29tbWl0IEIgZmlsZUIgdHdvICYmCisJZ2l0IHRhZyAtZCBBIEIgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9vc2Ugb2JqZWN0cyBib3Jyb3dlZCBmcm9tIGFsdGVybmF0ZSBhcmUgbm90IG1pc3NpbmcnICcKKwlta2RpciBhbm90aGVyICYmCisJKAorCQljZCBhbm90aGVyICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gLi4vLi4vLi4vLmdpdC9vYmplY3RzID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3RfY29tbWl0IEMgZmlsZUMgb25lICYmCisJCWdpdCBmc2NrIC0tbm8tZGFuZ2xpbmcgPi4uL2FjdHVhbCAyPiYxCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSEVBRCBpcyBwYXJ0IG9mIHJlZnMsIHZhbGlkIG9iamVjdHMgYXBwZWFyIHZhbGlkJyAnCisJZ2l0IGZzY2sgPmFjdHVhbCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCisjIENvcnJ1cHRpb24gdGVzdHMgZm9sbG93LiAgTWFrZSBzdXJlIHRvIHJlbW92ZSBhbGwgdHJhY2VzIG9mIHRoZQorIyBzcGVjaWZpYyBjb3JydXB0aW9uIHlvdSB0ZXN0IGFmdGVyd2FyZHMsIGxlc3QgYSBsYXRlciB0ZXN0IHRyaXAgb3ZlcgorIyBpdC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGhlbHBlcnMgZm9yIGNvcnJ1cHRpb24gdGVzdHMnICcKKwlzaGExX2ZpbGUoKSB7CisJCXJlbWFpbmRlcj0kezEjPz99ICYmCisJCWZpcnN0dHdvPSR7MSUkcmVtYWluZGVyfSAmJgorCQllY2hvICIuZ2l0L29iamVjdHMvJGZpcnN0dHdvLyRyZW1haW5kZXIiCisJfSAmJgorCisJcmVtb3ZlX29iamVjdCgpIHsKKwkJcm0gIiQoc2hhMV9maWxlICIkMSIpIgorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2JqZWN0IHdpdGggYmFkIHNoYTEnICcKKwlzaGE9JChlY2hvIGJsb2IgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlvbGQ9JCh0ZXN0X29pZF90b19wYXRoICIkc2hhIikgJiYKKwluZXc9JChkaXJuYW1lICRvbGQpLyQodGVzdF9vaWQgZmZfMikgJiYKKwlzaGE9IiQoZGlybmFtZSAkbmV3KSQoYmFzZW5hbWUgJG5ldykiICYmCisJbXYgLmdpdC9vYmplY3RzLyRvbGQgLmdpdC9vYmplY3RzLyRuZXcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkc2hhIGZvbyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQiICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdHJlZSIgJiYKKwljbXQ9JChlY2hvIGJvZ3VzIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkY210IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgJGNtdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiJHNoYS4qY29ycnVwdCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCBwb2ludGluZyB0byBub24tY29tbWl0JyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+LmdpdC9yZWZzL2hlYWRzL2ludmFsaWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhIGNvbW1pdCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hFQUQgbGluayBwb2ludGluZyBhdCBhIGZ1bm55IG9iamVjdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9TQVZFRF9IRUFEIC5naXQvSEVBRCIgJiYKKwltdiAuZ2l0L0hFQUQgLmdpdC9TQVZFRF9IRUFEICYmCisJZWNobyAkWkVST19PSUQgPi5naXQvSEVBRCAmJgorCSMgYXZvaWQgY29ycnVwdC9icm9rZW4gSEVBRCBmcm9tIGludGVyZmVyaW5nIHdpdGggcmVwbyBkaXNjb3ZlcnkKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0RJUj0uZ2l0IGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZGV0YWNoZWQgSEVBRCBwb2ludHMiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIRUFEIGxpbmsgcG9pbnRpbmcgYXQgYSBmdW5ueSBwbGFjZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9TQVZFRF9IRUFEIC5naXQvSEVBRCIgJiYKKwltdiAuZ2l0L0hFQUQgLmdpdC9TQVZFRF9IRUFEICYmCisJZWNobyAicmVmOiByZWZzL2Z1bm55L3BsYWNlIiA+LmdpdC9IRUFEICYmCisJIyBhdm9pZCBjb3JydXB0L2Jyb2tlbiBIRUFEIGZyb20gaW50ZXJmZXJpbmcgd2l0aCByZXBvIGRpc2NvdmVyeQorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRElSPS5naXQgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJIRUFEIHBvaW50cyB0byBzb21ldGhpbmcgc3RyYW5nZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hFQUQgbGluayBwb2ludGluZyBhdCBhIGZ1bm55IG9iamVjdCAoZnJvbSBkaWZmZXJlbnQgd3QpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiAuZ2l0L1NBVkVEX0hFQUQgLmdpdC9IRUFEIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIC5naXQvd29ya3RyZWVzIHd0IiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgd3QgJiYKKwltdiAuZ2l0L0hFQUQgLmdpdC9TQVZFRF9IRUFEICYmCisJZWNobyAkWkVST19PSUQgPi5naXQvSEVBRCAmJgorCSMgYXZvaWQgY29ycnVwdC9icm9rZW4gSEVBRCBmcm9tIGludGVyZmVyaW5nIHdpdGggcmVwbyBkaXNjb3ZlcnkKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgd3QgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1haW4td29ya3RyZWUvSEVBRDogZGV0YWNoZWQgSEVBRCBwb2ludHMiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdGhlciB3b3JrdHJlZSBIRUFEIGxpbmsgcG9pbnRpbmcgYXQgYSBmdW5ueSBvYmplY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiAuZ2l0L3dvcmt0cmVlcyBvdGhlciIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIG90aGVyICYmCisJZWNobyAkWkVST19PSUQgPi5naXQvd29ya3RyZWVzL290aGVyL0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIndvcmt0cmVlcy9vdGhlci9IRUFEOiBkZXRhY2hlZCBIRUFEIHBvaW50cyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ290aGVyIHdvcmt0cmVlIEhFQUQgbGluayBwb2ludGluZyBhdCBtaXNzaW5nIG9iamVjdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIC5naXQvd29ya3RyZWVzIG90aGVyIiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgb3RoZXIgJiYKKwllY2hvICJDb250ZW50cyBtaXNzaW5nIGZyb20gcmVwbyIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA+LmdpdC93b3JrdHJlZXMvb3RoZXIvSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAid29ya3RyZWVzL290aGVyL0hFQUQ6IGludmFsaWQgc2hhMSBwb2ludGVyIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3RoZXIgd29ya3RyZWUgSEVBRCBsaW5rIHBvaW50aW5nIGF0IGEgZnVubnkgcGxhY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiAuZ2l0L3dvcmt0cmVlcyBvdGhlciIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIG90aGVyICYmCisJZWNobyAicmVmOiByZWZzL2Z1bm55L3BsYWNlIiA+LmdpdC93b3JrdHJlZXMvb3RoZXIvSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAid29ya3RyZWVzL290aGVyL0hFQUQgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1haWwgd2l0aG91dCBAIGlzIG9rYXknICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzL0AvQVQvIiBiYXNpcyA+b2theSAmJgorCW5ldz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8b2theSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwlnaXQgZnNjayAyPm91dCAmJgorCSEgZ3JlcCAiY29tbWl0ICRuZXciIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbWFpbCB3aXRoIGVtYmVkZGVkID4gaXMgbm90IG9rYXknICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzL0BbYS16XS8mPi8iIGJhc2lzID5iYWQtZW1haWwgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPGJhZC1lbWFpbCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIGNvbW1pdCAkbmV3IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyA8IGVtYWlsIGRlbGltaXRlciBpcyByZXBvcnRlZCBuaWNlbHknICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzLzwvLyIgYmFzaXMgPmJhZC1lbWFpbC0yICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxiYWQtZW1haWwtMikgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIGNvbW1pdCAkbmV3LiogLSBiYWQgbmFtZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgZW1haWwgaXMgcmVwb3J0ZWQgbmljZWx5JyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9bYS16XSogPFtePl0qPi8vIiBiYXNpcyA+YmFkLWVtYWlsLTMgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPGJhZC1lbWFpbC0zKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IgaW4gY29tbWl0ICRuZXcuKiAtIG1pc3NpbmcgZW1haWwiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc+IGluIG5hbWUgaXMgcmVwb3J0ZWQnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzLyA8Lz4gPC8iIGJhc2lzID5iYWQtZW1haWwtNCAmJgorCW5ldz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8YmFkLWVtYWlsLTQpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiBjb21taXQgJG5ldyIgb3V0CisnCisKKyMgZGF0ZSBpcyAyXjY0ICsgMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZWdlciBvdmVyZmxvdyBpbiB0aW1lc3RhbXBzIGlzIHJlcG9ydGVkJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9eXFwoYXV0aG9yIC4qPlxcKSBbMC05XSovXFwxIDE4NDQ2NzQ0MDczNzA5NTUxNjE3LyIgXAorCQk8YmFzaXMgPmJhZC10aW1lc3RhbXAgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPGJhZC10aW1lc3RhbXApICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBpbiBjb21taXQgJG5ldy4qaW50ZWdlciBvdmVyZmxvdyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIE5VTCBpbiBoZWFkZXInICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzL2F1dGhvciAuL2F1dGhvciBRLyIgPGJhc2lzIHwgcV90b19udWwgPmNvbW1pdC1OVUwtaGVhZGVyICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxjb21taXQtTlVMLWhlYWRlcikgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIGNvbW1pdCAkbmV3Lip1bnRlcm1pbmF0ZWQgaGVhZGVyOiBOVUwgYXQgb2Zmc2V0IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZSBvYmplY3Qgd2l0aCBkdXBsaWNhdGUgZW50cmllcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZm9yIGkgaW4gXCRUOyBkbyByZW1vdmVfb2JqZWN0IFwkaTsgZG9uZSIgJiYKKwlUPSQoCisJCUdJVF9JTkRFWF9GSUxFPXRlc3QtaW5kZXggJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCXJtIC1mIHRlc3QtaW5kZXggJiYKKwkJPnggJiYKKwkJZ2l0IGFkZCB4ICYmCisJCWdpdCByZXYtcGFyc2UgOnggJiYKKwkJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCQllY2hvICRUICYmCisJCSgKKwkJCWdpdCBjYXQtZmlsZSB0cmVlICRUICYmCisJCQlnaXQgY2F0LWZpbGUgdHJlZSAkVAorCQkpIHwKKwkJZ2l0IGhhc2gtb2JqZWN0IC13IC10IHRyZWUgLS1zdGRpbgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIHRyZWUgLipjb250YWlucyBkdXBsaWNhdGUgZmlsZSBlbnRyaWVzIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYXJzZWFibGUgdHJlZSBvYmplY3QnICcKKwl0ZXN0X29pZF9jYWNoZSA8PC1cRU9GICYmCisJanVuayBzaGExOnR3ZW50eS1ieXRlcy1vZi1qdW5rCisJanVuayBzaGEyNTY6dHdlbnR5LWJ5dGVzLW9mLWp1bmstdHdlbHZlLW1vcmUKKwlFT0YKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy93cm9uZyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgXCR0cmVlX3NoYTEiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0IFwkY29tbWl0X3NoYTEiICYmCisJanVuaz0kKHRlc3Rfb2lkIGp1bmspICYmCisJdHJlZV9zaGExPSQocHJpbnRmICIxMDA2NDQgXDAkanVuayIgfCBnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAtLXN0ZGluIC13IC0tbGl0ZXJhbGx5KSAmJgorCWNvbW1pdF9zaGExPSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlX3NoYTEpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy93cm9uZyAkY29tbWl0X3NoYTEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yOiBlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICIkdHJlZV9zaGExIiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICEgImZhdGFsOiBlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZSBlbnRyeSB3aXRoIHR5cGUgbWlzbWF0Y2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgXCRibG9iIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCBcJHRyZWUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0IFwkY29tbWl0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy90eXBlX21pc21hdGNoIiAmJgorCWJsb2I9JChlY2hvIGJsb2IgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlibG9iX2Jpbj0kKGVjaG8gJGJsb2IgfCBoZXgyb2N0KSAmJgorCXRyZWU9JCgKKwkJcHJpbnRmICI0MDAwMCBkaXJcMCR7YmxvYl9iaW59MTAwNjQ0IGZpbGVcMCR7YmxvYl9iaW59IiB8CisJCWdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIC0tc3RkaW4gLXcgLS1saXRlcmFsbHkKKwkpICYmCisJY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdHlwZV9taXNtYXRjaCAkY29tbWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgPm91dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiaXMgYSBibG9iLCBub3QgYSB0cmVlIiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICEgImRhbmdsaW5nIGJsb2IiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgcG9pbnRpbmcgdG8gbm9uZXhpc3RlbnQnICcKKwliYWRvaWQ9JCh0ZXN0X29pZCBkZWFkYmVlZikgJiYKKwljYXQgPmludmFsaWQtdGFnIDw8LUVPRiAmJgorCW9iamVjdCAkYmFkb2lkCisJdHlwZSBjb21taXQKKwl0YWcgaW52YWxpZAorCXRhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjM0NTY3ODkwIC0wMDAwCisKKwlUaGlzIGlzIGFuIGludmFsaWQgdGFnLgorCUVPRgorCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyAtLXN0ZGluIDxpbnZhbGlkLXRhZykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRhZyIgJiYKKwllY2hvICR0YWcgPi5naXQvcmVmcy90YWdzL2ludmFsaWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvdGFncy9pbnZhbGlkIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tdGFncyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiYnJva2VuIGxpbmsiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgcG9pbnRpbmcgdG8gc29tZXRoaW5nIGVsc2UgdGhhbiBpdHMgdHlwZScgJworCXNoYT0kKGVjaG8gYmxvYiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkc2hhIiAmJgorCWNhdCA+d3JvbmctdGFnIDw8LUVPRiAmJgorCW9iamVjdCAkc2hhCisJdHlwZSBjb21taXQKKwl0YWcgd3JvbmcKKwl0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIzNDU2Nzg5MCAtMDAwMAorCisJVGhpcyBpcyBhbiBpbnZhbGlkIHRhZy4KKwlFT0YKKworCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdCB0YWcgLXcgLS1zdGRpbiA8d3JvbmctdGFnKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdGFnIiAmJgorCWVjaG8gJHRhZyA+LmdpdC9yZWZzL3RhZ3Mvd3JvbmcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvdGFncy93cm9uZyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLXRhZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHdpdGggaW5jb3JyZWN0IHRhZyBuYW1lICYgbWlzc2luZyB0YWdnZXInICcKKwlzaGE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID53cm9uZy10YWcgPDwtRU9GICYmCisJb2JqZWN0ICRzaGEKKwl0eXBlIGNvbW1pdAorCXRhZyB3cm9uZyBuYW1lIGZvcm1hdAorCisJVGhpcyBpcyBhbiBpbnZhbGlkIHRhZy4KKwlFT0YKKworCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdCB0YWcgLXcgLS1zdGRpbiA8d3JvbmctdGFnKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdGFnIiAmJgorCWVjaG8gJHRhZyA+LmdpdC9yZWZzL3RhZ3Mvd3JvbmcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvdGFncy93cm9uZyIgJiYKKwlnaXQgZnNjayAtLXRhZ3MgMj5vdXQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXdhcm5pbmcgaW4gdGFnICR0YWc6IGJhZFRhZ05hbWU6IGludmFsaWQgJ1wnJ3RhZydcJycgbmFtZTogd3JvbmcgbmFtZSBmb3JtYXQKKwl3YXJuaW5nIGluIHRhZyAkdGFnOiBtaXNzaW5nVGFnZ2VyRW50cnk6IGludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ1wnJ3RhZ2dlcidcJycgbGluZQorCUVPRgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyB3aXRoIGJhZCB0YWdnZXInICcKKwlzaGE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID53cm9uZy10YWcgPDwtRU9GICYmCisJb2JqZWN0ICRzaGEKKwl0eXBlIGNvbW1pdAorCXRhZyBub3QtcXVpdGUtd3JvbmcKKwl0YWdnZXIgQmFkIFRhZ2dlciBOYW1lCisKKwlUaGlzIGlzIGFuIGludmFsaWQgdGFnLgorCUVPRgorCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC0tbGl0ZXJhbGx5IC10IHRhZyAtdyAtLXN0ZGluIDx3cm9uZy10YWcpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICR0YWciICYmCisJZWNobyAkdGFnID4uZ2l0L3JlZnMvdGFncy93cm9uZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy90YWdzL3dyb25nIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tdGFncyAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIHRhZyAuKjogaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHdpdGggTlVMIGluIGhlYWRlcicgJworCXNoYT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlxX3RvX251bCA+dGFnLU5VTC1oZWFkZXIgPDwtRU9GICYmCisJb2JqZWN0ICRzaGEKKwl0eXBlIGNvbW1pdAorCXRhZyBjb250YWlucy1RLWluLWhlYWRlcgorCXRhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjM0NTY3ODkwIC0wMDAwCisKKwlUaGlzIGlzIGFuIGludmFsaWQgdGFnLgorCUVPRgorCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC0tbGl0ZXJhbGx5IC10IHRhZyAtdyAtLXN0ZGluIDx0YWctTlVMLWhlYWRlcikgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRhZyIgJiYKKwllY2hvICR0YWcgPi5naXQvcmVmcy90YWdzL3dyb25nICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3RhZ3Mvd3JvbmciICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS10YWdzIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IgaW4gdGFnICR0YWcuKnVudGVybWluYXRlZCBoZWFkZXI6IE5VTCBhdCBvZmZzZXQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbmVkIHVwJyAnCisJZ2l0IGZzY2sgPmFjdHVhbCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLXZlcmlmeS1vYmplY3RzJyAnCisJZ2l0IHJldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMgLS1hbGwgPi9kZXYvbnVsbCAyPm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS12ZXJpZnktb2JqZWN0cyB3aXRoIGJhZCBzaGExJyAnCisJc2hhPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2xkPSQodGVzdF9vaWRfdG9fcGF0aCAkc2hhKSAmJgorCW5ldz0kKGRpcm5hbWUgJG9sZCkvJCh0ZXN0X29pZCBmZl8yKSAmJgorCXNoYT0iJChkaXJuYW1lICRuZXcpJChiYXNlbmFtZSAkbmV3KSIgJiYKKwltdiAuZ2l0L29iamVjdHMvJG9sZCAuZ2l0L29iamVjdHMvJG5ldyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkc2hhIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICRzaGEgZm9vICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCIgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICR0cmVlIiAmJgorCWNtdD0kKGVjaG8gYm9ndXMgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRjbXQiICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAkY210ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCisJdGVzdF9taWdodF9mYWlsIGdpdCByZXYtbGlzdCAtLXZlcmlmeS1vYmplY3RzIHJlZnMvaGVhZHMvYm9ndXMgPi9kZXYvbnVsbCAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImVycm9yOiBoYXNoIG1pc21hdGNoICQoZGlybmFtZSAkbmV3KSQodGVzdF9vaWQgZmZfMikiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZSBmc2NrIHRvIGlnbm9yZSBkb3VibGUgYXV0aG9yJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9eYXV0aG9yIC4qLyYsJi8iIDxiYXNpcyB8IHRyICwgXFxuID5tdWx0aXBsZS1hdXRob3JzICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxtdWx0aXBsZS1hdXRob3JzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrICYmCisJZ2l0IC1jIGZzY2subXVsdGlwbGVBdXRob3JzPWlnbm9yZSBmc2NrCisnCisKK19iej0nXDAnCitfYnpvaWQ9JChwcmludGYgJFpFUk9fT0lEIHwgc2VkIC1lICdzLzAwL1xcMC9nJykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIGJsb2IgZW50cnkgcG9pbnRpbmcgdG8gbnVsbCBzaGExJyAnCisJKGdpdCBpbml0IG51bGwtYmxvYiAmJgorCSBjZCBudWxsLWJsb2IgJiYKKwkgc2hhPSQocHJpbnRmICIxMDA2NDQgZmlsZSRfYnokX2J6b2lkIiB8CisJICAgICAgIGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIC10IHRyZWUpICYmCisJICBnaXQgZnNjayAyPm91dCAmJgorCSAgdGVzdF9pMThuZ3JlcCAid2FybmluZy4qbnVsbCBzaGExIiBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBzdWJtb2R1bGUgZW50cnkgcG9pbnRpbmcgdG8gbnVsbCBzaGExJyAnCisJKGdpdCBpbml0IG51bGwtY29tbWl0ICYmCisJIGNkIG51bGwtY29tbWl0ICYmCisJIHNoYT0kKHByaW50ZiAiMTYwMDAwIHN1Ym1vZHVsZSRfYnokX2J6b2lkIiB8CisJICAgICAgIGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIC10IHRyZWUpICYmCisJICBnaXQgZnNjayAyPm91dCAmJgorCSAgdGVzdF9pMThuZ3JlcCAid2FybmluZy4qbnVsbCBzaGExIiBvdXQKKwkpCisnCisKK3doaWxlIHJlYWQgbmFtZSBwYXRoIHByZXR0eTsgZG8KKwl3aGlsZSByZWFkIG1vZGUgdHlwZTsgZG8KKwkJOiAke3ByZXR0eTo9JHBhdGh9CisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZzY2sgbm90aWNlcyAkcHJldHR5IGFzICR0eXBlIiAnCisJCSgKKwkJCWdpdCBpbml0ICRuYW1lLSR0eXBlICYmCisJCQljZCAkbmFtZS0kdHlwZSAmJgorCQkJZ2l0IGNvbmZpZyBjb3JlLnByb3RlY3ROVEZTIGZhbHNlICYmCisJCQllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwkJCWdpdCBhZGQgZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJCQlibG9iPSQoZ2l0IHJldi1wYXJzZSA6ZmlsZSkgJiYKKwkJCXRyZWU9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCQkJdmFsdWU9JChldmFsICJlY2hvIFwkJHR5cGUiKSAmJgorCQkJcHJpbnRmICIkbW9kZSAkdHlwZSAlc1x0JXMiICIkdmFsdWUiICIkcGF0aCIgPmJhZCAmJgorCQkJYmFkX3RyZWU9JChnaXQgbWt0cmVlIDxiYWQpICYmCisJCQlnaXQgZnNjayAyPm91dCAmJgorCQkJdGVzdF9pMThuZ3JlcCAid2FybmluZy4qdHJlZSAkYmFkX3RyZWUiIG91dAorCQkpJworCWRvbmUgPDwtXEVPRgorCTEwMDY0NCBibG9iCisJMDQwMDAwIHRyZWUKKwlFT0YKK2RvbmUgPDwtRU9GCitkb3QgLgorZG90ZG90IC4uCitkb3RnaXQgLmdpdAorZG90Z2l0LWNhc2UgLkdJVAorZG90Z2l0LXVuaWNvZGUgLmdJJHt1MjAwY31UIC5nSXt1MjAwY31UCitkb3RnaXQtY2FzZTIgLkdpdAorZ2l0LXRpbGRlMSBnaXR+MQorZG90Z2l0ZG90IC5naXQuCitkb3QtYmFja3NsYXNoLWNhc2UgLlxcXFwuR0lUXFxcXGZvb2JhcgorZG90Z2l0LWNhc2UtYmFja3NsYXNoIC5naXRcXFxcZm9vYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBhbGxvd3MgLsWHaXQnICcKKwkoCisJCWdpdCBpbml0IG5vdC1kb3RnaXQgJiYKKwkJY2Qgbm90LWRvdGdpdCAmJgorCQllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCQlibG9iPSQoZ2l0IHJldi1wYXJzZSA6ZmlsZSkgJiYKKwkJcHJpbnRmICIxMDA2NDQgYmxvYiAkYmxvYlx0LlxcMzA1XFwyMDdpdCIgPnRyZWUgJiYKKwkJdHJlZT0kKGdpdCBta3RyZWUgPHRyZWUpICYmCisJCWdpdCBmc2NrIDI+ZXJyICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgaW4gY29tbWl0JyAnCisJcm0gLWZyIG51bC1pbi1jb21taXQgJiYKKwlnaXQgaW5pdCBudWwtaW4tY29tbWl0ICYmCisJKAorCQljZCBudWwtaW4tY29tbWl0ICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiaW5pdGlhbCBjb21taXRRTlVMIGFmdGVyIG1lc3NhZ2UiICYmCisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+b3JpZ2luYWwgJiYKKwkJcV90b19udWwgPG9yaWdpbmFsID5tdW5nZWQgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCAtLXN0ZGluIDxtdW5nZWQgPm5hbWUgJiYKKwkJZ2l0IGJyYW5jaCBiYWQgJChjYXQgbmFtZSkgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZnNjay5udWxJbkNvbW1pdD1lcnJvciBmc2NrIDI+d2Fybi4xICYmCisJCXRlc3RfaTE4bmdyZXAgbnVsSW5Db21taXQgd2Fybi4xICYmCisJCWdpdCBmc2NrIDI+d2Fybi4yICYmCisJCXRlc3RfaTE4bmdyZXAgbnVsSW5Db21taXQgd2Fybi4yCisJKQorJworCisjIGNyZWF0ZSBhIHN0YXRpYyB0ZXN0IHJlcG8gd2hpY2ggaXMgYnJva2VuIGJ5IG9taXR0aW5nCisjIG9uZSBwYXJ0aWN1bGFyIG9iamVjdCAoJDEsIHdoaWNoIGlzIGxvb2tlZCB1cCB2aWEgcmV2LXBhcnNlCisjIGluIHRoZSBuZXcgcmVwb3NpdG9yeSkuCitjcmVhdGVfcmVwb19taXNzaW5nICgpIHsKKwlybSAtcmYgbWlzc2luZyAmJgorCWdpdCBpbml0IG1pc3NpbmcgJiYKKwkoCisJCWNkIG1pc3NpbmcgJiYKKwkJZ2l0IGNvbW1pdCAtbSBvbmUgLS1hbGxvdy1lbXB0eSAmJgorCQlta2RpciBzdWJkaXIgJiYKKwkJZWNobyBjb250ZW50ID5zdWJkaXIvZmlsZSAmJgorCQlnaXQgYWRkIHN1YmRpci9maWxlICYmCisJCWdpdCBjb21taXQgLW0gdHdvICYmCisJCXVucmVsYXRlZD0kKGVjaG8gdW5yZWxhdGVkIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJCWdpdCB0YWcgLW0gZm9vIHRhZyAkdW5yZWxhdGVkICYmCisJCXNoYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIpICYmCisJCXBhdGg9JChlY2hvICRzaGExIHwgc2VkICdzfC4ufCYvfCcpICYmCisJCXJtIC5naXQvb2JqZWN0cy8kcGF0aAorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIG1pc3NpbmcgYmxvYicgJworCWNyZWF0ZV9yZXBvX21pc3NpbmcgSEVBRDpzdWJkaXIvZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNzaW5nIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIG1pc3Npbmcgc3VidHJlZScgJworCWNyZWF0ZV9yZXBvX21pc3NpbmcgSEVBRDpzdWJkaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbWlzc2luZyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBtaXNzaW5nIHJvb3QgdHJlZScgJworCWNyZWF0ZV9yZXBvX21pc3NpbmcgSEVBRF57dHJlZX0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbWlzc2luZyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBtaXNzaW5nIHBhcmVudCcgJworCWNyZWF0ZV9yZXBvX21pc3NpbmcgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbWlzc2luZyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBtaXNzaW5nIHRhZ2dlZCBvYmplY3QnICcKKwljcmVhdGVfcmVwb19taXNzaW5nIHRhZ157YmxvYn0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbWlzc2luZyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyByZWYgcG9pbnRpbmcgdG8gbWlzc2luZyBjb21taXQnICcKKwljcmVhdGVfcmVwb19taXNzaW5nIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbWlzc2luZyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyByZWYgcG9pbnRpbmcgdG8gbWlzc2luZyB0YWcnICcKKwljcmVhdGVfcmVwb19taXNzaW5nIHRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNzaW5nIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayAtLWNvbm5lY3Rpdml0eS1vbmx5JyAnCisJcm0gLXJmIGNvbm5lY3Rpdml0eS1vbmx5ICYmCisJZ2l0IGluaXQgY29ubmVjdGl2aXR5LW9ubHkgJiYKKwkoCisJCWNkIGNvbm5lY3Rpdml0eS1vbmx5ICYmCisJCXRvdWNoIGVtcHR5ICYmCisJCWdpdCBhZGQgZW1wdHkgJiYKKwkJdGVzdF9jb21taXQgZW1wdHkgJiYKKworCQkjIERyb3AgdGhlIGluZGV4IG5vdzsgd2Ugd2FudCB0byBiZSBzdXJlIHRoYXQgd2UKKwkJIyByZWN1cnNpdmVseSBub3RpY2UgdGhlIGJyb2tlbiBvYmplY3RzCisJCSMgYmVjYXVzZSB0aGV5IGFyZSByZWFjaGFibGUgZnJvbSByZWZzLCBub3QgYmVjYXVzZQorCQkjIHRoZXkgYXJlIGluIHRoZSBpbmRleC4KKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCisJCSMgY29ycnVwdCB0aGUgYmxvYiwgYnV0IGluIGEgd2F5IHRoYXQgd2UgY2FuIHN0aWxsIGlkZW50aWZ5CisJCSMgaXRzIHR5cGUuIFRoYXQgbGV0cyB1cyBzZWUgdGhhdCAtLWNvbm5lY3Rpdml0eS1vbmx5IGlzCisJCSMgbm90IGFjdHVhbGx5IGxvb2tpbmcgYXQgdGhlIGNvbnRlbnRzLCBidXQgbGVhdmVzIGl0CisJCSMgZnJlZSB0byBleGFtaW5lIHRoZSB0eXBlIGlmIGl0IGNob29zZXMuCisJCWVtcHR5PS5naXQvb2JqZWN0cy8kKHRlc3Rfb2lkX3RvX3BhdGggJEVNUFRZX0JMT0IpICYmCisJCWJsb2I9JChlY2hvIHVucmVsYXRlZCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQltdiAtZiAkKHNoYTFfZmlsZSAkYmxvYikgJGVtcHR5ICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1zdHJpY3QgJiYKKwkJZ2l0IGZzY2sgLS1zdHJpY3QgLS1jb25uZWN0aXZpdHktb25seSAmJgorCQl0cmVlPSQoZ2l0IHJldi1wYXJzZSBIRUFEOikgJiYKKwkJc3VmZml4PSR7dHJlZSM/P30gJiYKKwkJdHJlZT0uZ2l0L29iamVjdHMvJHt0cmVlJSRzdWZmaXh9LyRzdWZmaXggJiYKKwkJcm0gLWYgJHRyZWUgJiYKKwkJZWNobyBpbnZhbGlkID4kdHJlZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLXN0cmljdCAtLWNvbm5lY3Rpdml0eS1vbmx5CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIC0tY29ubmVjdGl2aXR5LW9ubHkgd2l0aCBleHBsaWNpdCBoZWFkJyAnCisJcm0gLXJmIGNvbm5lY3Rpdml0eS1vbmx5ICYmCisJZ2l0IGluaXQgY29ubmVjdGl2aXR5LW9ubHkgJiYKKwkoCisJCWNkIGNvbm5lY3Rpdml0eS1vbmx5ICYmCisJCXRlc3RfY29tbWl0IGZvbyAmJgorCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCXRyZWU9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCQlyZW1vdmVfb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmZvby50KSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLWNvbm5lY3Rpdml0eS1vbmx5ICR0cmVlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIC0tbmFtZS1vYmplY3RzJyAnCisJcm0gLXJmIG5hbWUtb2JqZWN0cyAmJgorCWdpdCBpbml0IG5hbWUtb2JqZWN0cyAmJgorCSgKKwkJY2QgbmFtZS1vYmplY3RzICYmCisJCXRlc3RfY29tbWl0IGp1bGl1cyBjYWVzYXIudCAmJgorCQl0ZXN0X2NvbW1pdCBhdWd1c3R1cyAmJgorCQl0ZXN0X2NvbW1pdCBjYWVzYXIgJiYKKwkJcmVtb3ZlX29iamVjdCAkKGdpdCByZXYtcGFyc2UganVsaXVzOmNhZXNhci50KSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLW5hbWUtb2JqZWN0cyA+b3V0ICYmCisJCXRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGp1bGl1czopICYmCisJCXRlc3RfaTE4bmdyZXAgIiR0cmVlIChyZWZzL3RhZ3MvanVsaXVzOiIgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGUgb2JqZWN0cyBhcmUgY29ycmVjdGx5IGJsYW1lZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGFsdC5naXQgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIgJiYKKwluYW1lPSQodGVzdF9vaWQgbnVtZXJpYykgJiYKKwlwYXRoPSQodGVzdF9vaWRfdG9fcGF0aCAiJG5hbWUiKSAmJgorCWdpdCBpbml0IC0tYmFyZSBhbHQuZ2l0ICYmCisJZWNobyAiLi4vLi4vYWx0LmdpdC9vYmplY3RzIiA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCW1rZGlyIGFsdC5naXQvb2JqZWN0cy8kKGRpcm5hbWUgJHBhdGgpICYmCisJPmFsdC5naXQvb2JqZWN0cy8kKGRpcm5hbWUgJHBhdGgpLyQoYmFzZW5hbWUgJHBhdGgpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgPm91dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCBhbHQuZ2l0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGVycm9ycyBpbiBwYWNrZWQgb2JqZWN0cycgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwlzZWQgInMvPC9vbmUvIiBiYXNpcyA+b25lICYmCisJc2VkICJzLzwvZm9vLyIgYmFzaXMgPnR3byAmJgorCW9uZT0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgb25lKSAmJgorCXR3bz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgdHdvKSAmJgorCXBhY2s9JCgKKwkJeworCQkJZWNobyAkb25lICYmCisJCQllY2hvICR0d28KKwkJfSB8IGdpdCBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjaworCSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHBhY2suKiIgJiYKKwlyZW1vdmVfb2JqZWN0ICRvbmUgJiYKKwlyZW1vdmVfb2JqZWN0ICR0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImVycm9yIGluIGNvbW1pdCAkb25lLiogLSBiYWQgbmFtZSIgb3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3IgaW4gY29tbWl0ICR0d28uKiAtIGJhZCBuYW1lIiBvdXQgJiYKKwkhIGdyZXAgY29ycnVwdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBmYWlscyBvbiBjb3JydXB0IHBhY2tmaWxlJyAnCisJaHNoPSQoZ2l0IGNvbW1pdC10cmVlIC1tIG15Y29tbWl0IEhFQURee3RyZWV9KSAmJgorCXBhY2s9JChlY2hvICRoc2ggfCBnaXQgcGFjay1vYmplY3RzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2spICYmCisKKwkjIENvcnJ1cHQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZpcnN0IG9iamVjdC4gKEl0IGNvbnRhaW5zIDMgdHlwZSBiaXRzLAorCSMgYXQgbGVhc3Qgb25lIG9mIHdoaWNoIGlzIG5vdCB6ZXJvLCBzbyBzZXR0aW5nIHRoZSBmaXJzdCBieXRlIHRvIDAgaXMKKwkjIHN1ZmZpY2llbnQuKQorCWNobW9kIGErdyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSRwYWNrLnBhY2sgJiYKKwlwcmludGYgJ1wwJyB8IGRkIG9mPS5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHBhY2sucGFjayBicz0xIGNvbnY9bm90cnVuYyBzZWVrPTEyICYmCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHBhY2suKiIgJiYKKwlyZW1vdmVfb2JqZWN0ICRoc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImNoZWNrc3VtIG1pc21hdGNoIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBmaW5kcyBwcm9ibGVtcyBpbiBkdXBsaWNhdGUgbG9vc2Ugb2JqZWN0cycgJworCXJtIC1yZiBicm9rZW4tZHVwbGljYXRlICYmCisJZ2l0IGluaXQgYnJva2VuLWR1cGxpY2F0ZSAmJgorCSgKKwkJY2QgYnJva2VuLWR1cGxpY2F0ZSAmJgorCQl0ZXN0X2NvbW1pdCBkdXBsaWNhdGUgJiYKKwkJIyBubyAiLWQiIGhlcmUsIHNvIHdlIGVuZCB1cCB3aXRoIGR1cGxpY2F0ZXMKKwkJZ2l0IHJlcGFjayAmJgorCQkjIG5vdyBjb3JydXB0IHRoZSBsb29zZSBjb3B5CisJCWZpbGU9JChzaGExX2ZpbGUgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIpICYmCisJCXJtICIkZmlsZSIgJiYKKwkJZWNobyBicm9rZW4gPiIkZmlsZSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZGV0ZWN0cyB0cmFpbGluZyBsb29zZSBnYXJiYWdlIChjb21taXQpJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCWVjaG8gYnVtcC1jb21taXQtc2hhMSA+PmJhc2lzICYmCisJY29tbWl0PSQoZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBiYXNpcykgJiYKKwlmaWxlPSQoc2hhMV9maWxlICRjb21taXQpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRjb21taXQiICYmCisJY2htb2QgK3cgIiRmaWxlIiAmJgorCWVjaG8gZ2FyYmFnZSA+PiIkZmlsZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgImdhcmJhZ2UuKiRjb21taXQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGRldGVjdHMgdHJhaWxpbmcgbG9vc2UgZ2FyYmFnZSAobGFyZ2UgYmxvYiknICcKKwlibG9iPSQoZWNobyB0cmFpbGluZyB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWZpbGU9JChzaGExX2ZpbGUgJGJsb2IpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRibG9iIiAmJgorCWNobW9kICt3ICIkZmlsZSIgJiYKKwllY2hvIGdhcmJhZ2UgPj4iJGZpbGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvcmUuYmlnZmlsZXRocmVzaG9sZD01IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJnYXJiYWdlLiokYmxvYiIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZGV0ZWN0cyB0cnVuY2F0ZWQgbG9vc2Ugb2JqZWN0JyAnCisJIyBtYWtlIGl0IGJpZyBlbm91Z2ggdGhhdCB3ZSBrbm93IHdlIHdpbGwgdHJ1bmNhdGUgaW4gdGhlIGRhdGEKKwkjIHBvcnRpb24sIG5vdCB0aGUgaGVhZGVyCisJdGVzdC10b29sIGdlbnJhbmRvbSB0cnVuY2F0ZSA0MDk2ID5maWxlICYmCisJYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAtdyBmaWxlKSAmJgorCWZpbGU9JChzaGExX2ZpbGUgJGJsb2IpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRibG9iIiAmJgorCXRlc3RfY29weV9ieXRlcyAxMDI0IDwiJGZpbGUiID50bXAgJiYKKwlybSAiJGZpbGUiICYmCisJbXYgLWYgdG1wICIkZmlsZSIgJiYKKworCSMgY2hlY2sgYm90aCByZWd1bGFyIGFuZCBzdHJlYW1pbmcgY29kZSBwYXRocworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCBjb3JydXB0LiokYmxvYiBvdXQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQ9MTI4IGZzY2sgMj5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIGNvcnJ1cHQuKiRibG9iIG91dAorJworCisjIGZvciBlYWNoIG9mIHR5cGUsIHdlIGhhdmUgb25lIHZlcnNpb24gd2hpY2ggaXMgcmVmZXJlbmNlZCBieSBhbm90aGVyIG9iamVjdAorIyAoYW5kIHNvIHdoaWxlIHVucmVhY2hhYmxlLCBub3QgZGFuZ2xpbmcpLCBhbmQgYW5vdGhlciB2YXJpYW50IHdoaWNoIHJlYWxseSBpcworIyBkYW5nbGluZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBkYW5nbGluZy1vYmplY3QgcmVwb3NpdG9yeScgJworCWdpdCBpbml0IGRhbmdsaW5nICYmCisJKAorCQljZCBkYW5nbGluZyAmJgorCQlibG9iPSQoZWNobyBub3QtZGFuZ2xpbmcgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJZGJsb2I9JChlY2hvIGRhbmdsaW5nIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJCXRyZWU9JChwcmludGYgIjEwMDY0NCBibG9iICVzXHQlc1xuIiAkYmxvYiBvbmUgfCBnaXQgbWt0cmVlKSAmJgorCQlkdHJlZT0kKHByaW50ZiAiMTAwNjQ0IGJsb2IgJXNcdCVzXG4iICRibG9iIHR3byB8IGdpdCBta3RyZWUpICYmCisJCWNvbW1pdD0kKGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwkJZGNvbW1pdD0kKGdpdCBjb21taXQtdHJlZSAtcCAkY29tbWl0ICR0cmVlKSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRgorCQlkYW5nbGluZyBibG9iICRkYmxvYgorCQlkYW5nbGluZyBjb21taXQgJGRjb21taXQKKwkJZGFuZ2xpbmcgdHJlZSAkZHRyZWUKKwkJRU9GCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgZGFuZ2xpbmcgb2JqZWN0cycgJworCSgKKwkJY2QgZGFuZ2xpbmcgJiYKKwkJZ2l0IGZzY2sgPmFjdHVhbCAmJgorCQkjIHRoZSBvdXRwdXQgb3JkZXIgaXMgbm9uLWRldGVybWluaXN0aWMsIGFzIGl0IGNvbWVzIGZyb20gYSBoYXNoCisJCXNvcnQgPGFjdHVhbCA+YWN0dWFsLnNvcnRlZCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbC5zb3J0ZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgLS1jb25uZWN0aXZpdHktb25seSBub3RpY2VzIGRhbmdsaW5nIG9iamVjdHMnICcKKwkoCisJCWNkIGRhbmdsaW5nICYmCisJCWdpdCBmc2NrIC0tY29ubmVjdGl2aXR5LW9ubHkgPmFjdHVhbCAmJgorCQkjIHRoZSBvdXRwdXQgb3JkZXIgaXMgbm9uLWRldGVybWluaXN0aWMsIGFzIGl0IGNvbWVzIGZyb20gYSBoYXNoCisJCXNvcnQgPGFjdHVhbCA+YWN0dWFsLnNvcnRlZCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbC5zb3J0ZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgJG5hbWUgbm90aWNlcyBib2d1cyAkbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIGJvZ3VzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgJFpFUk9fT0lECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JvZ3VzIGhlYWQgZG9lcyBub3QgZmFsbGJhY2sgdG8gYWxsIGhlYWRzJyAnCisJIyBzZXQgdXAgYSBjYXNlIHRoYXQgd2lsbCBjYXVzZSBhIHJlYWNoYWJpbGl0eSBjb21wbGFpbnQKKwllY2hvIHRvLWJlLWRlbGV0ZWQgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJYmxvYj0kKGdpdCByZXYtcGFyc2UgOmZvbykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBybSAtLWNhY2hlZCBmb28iICYmCisJcmVtb3ZlX29iamVjdCAkYmxvYiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrICRaRVJPX09JRCA+b3V0IDI+JjEgJiYKKwkhIGdyZXAgJGJsb2Igb3V0CisnCisKKyMgQ29ycnVwdCB0aGUgY2hlY2tzdW0gb24gdGhlIGluZGV4LgorIyBBZGQgMSB0byB0aGUgbGFzdCBieXRlIGluIHRoZSBTSEEuCitjb3JydXB0X2luZGV4X2NoZWNrc3VtICgpIHsKKyAgICBwZXJsIC13IC1lICcKKwl1c2UgRmNudGwgIjpzZWVrIjsKKwlvcGVuIG15ICRmaCwgIis8IiwgIi5naXQvaW5kZXgiIG9yIGRpZSAib3BlbjogJCEiOworCWJpbm1vZGUgJGZoOworCXNlZWsgJGZoLCAtMSwgU0VFS19FTkQgb3IgZGllICJzZWVrOiAkISI7CisJcmVhZCAkZmgsIG15ICRpbl9ieXRlLCAxIG9yIGRpZSAicmVhZDogJCEiOworCisJJGluX3ZhbHVlID0gdW5wYWNrKCJDIiwgJGluX2J5dGUpOworCSRvdXRfdmFsdWUgPSAoJGluX3ZhbHVlICsgMSkgJiAyNTU7CisKKwkkb3V0X2J5dGUgPSBwYWNrKCJDIiwgJG91dF92YWx1ZSk7CisKKwlzZWVrICRmaCwgLTEsIFNFRUtfRU5EIG9yIGRpZSAic2VlazogJCEiOworCXByaW50ICRmaCAkb3V0X2J5dGU7CisJY2xvc2UgJGZoIG9yIGRpZSAiY2xvc2U6ICQhIjsKKyAgICAnCit9CisKKyMgQ29ycnVwdCB0aGUgY2hlY2tzdW0gb24gdGhlIGluZGV4IGFuZCB0aGVuCisjIHZlcmlmeSB0aGF0IG9ubHkgZnNjayBub3RpY2VzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGNvcnJ1cHQgaW5kZXggZmlsZSBpbiBmc2NrJyAnCisJY3AgLmdpdC9pbmRleCAuZ2l0L2luZGV4LmJhY2t1cCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9pbmRleC5iYWNrdXAgLmdpdC9pbmRleCIgJiYKKwljb3JydXB0X2luZGV4X2NoZWNrc3VtICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1jYWNoZSAyPmVycm9ycyAmJgorCXRlc3RfaTE4bmdyZXAgImJhZCBpbmRleCBmaWxlIiBlcnJvcnMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTAwLXJldi1wYXJzZS5zaCBiL3QvdDE1MDAtcmV2LXBhcnNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwMzAxOWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTAwLXJldi1wYXJzZS5zaApAQCAtMCwwICsxLDE4OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1wYXJzZScKKy4gLi90ZXN0LWxpYi5zaAorCisjIHVzYWdlOiBbb3B0aW9uc10gbGFiZWwgaXMtYmFyZSBpcy1pbnNpZGUtZ2l0IGlzLWluc2lkZS13b3JrIHByZWZpeCBnaXQtZGlyIGFic29sdXRlLWdpdC1kaXIKK3Rlc3RfcmV2X3BhcnNlICgpIHsKKwlkPQorCWJhcmU9CisJZ2l0ZGlyPQorCXdoaWxlIDoKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLUMpIGQ9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CisJCS1iKSBjYXNlICIkMiIgaW4KKwkJICAgIFt0ZnVdKikgYmFyZT0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKKwkJICAgICopIGVycm9yICJ0ZXN0X3Jldl9wYXJzZTogYm9ndXMgY29yZS5iYXJlIHZhbHVlICckMiciIDs7CisJCSAgICBlc2FjIDs7CisJCS1nKSBnaXRkaXI9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CisJCS0qKSBlcnJvciAidGVzdF9yZXZfcGFyc2U6IHVucmVjb2duaXplZCBvcHRpb24gJyQxJyIgOzsKKwkJKikgYnJlYWsgOzsKKwkJZXNhYworCWRvbmUKKworCW5hbWU9JDEKKwlzaGlmdAorCisJZm9yIG8gaW4gLS1pcy1iYXJlLXJlcG9zaXRvcnkgXAorCQkgLS1pcy1pbnNpZGUtZ2l0LWRpciBcCisJCSAtLWlzLWluc2lkZS13b3JrLXRyZWUgXAorCQkgLS1zaG93LXByZWZpeCBcCisJCSAtLWdpdC1kaXIgXAorCQkgLS1hYnNvbHV0ZS1naXQtZGlyCisJZG8KKwkJdGVzdCAkIyAtZXEgMCAmJiBicmVhaworCQlleHBlY3Q9IiQxIgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZTogJG8iICcKKwkJCWlmIHRlc3QgLW4gIiRnaXRkaXIiCisJCQl0aGVuCisJCQkJdGVzdF93aGVuX2ZpbmlzaGVkICJ1bnNldCBHSVRfRElSIiAmJgorCQkJCUdJVF9ESVI9IiRnaXRkaXIiICYmCisJCQkJZXhwb3J0IEdJVF9ESVIKKwkJCWZpICYmCisKKwkJCWNhc2UgIiRiYXJlIiBpbgorCQkJdCopIHRlc3RfY29uZmlnICR7ZDorLUN9ICR7ZDorIiRkIn0gY29yZS5iYXJlIHRydWUgOzsKKwkJCWYqKSB0ZXN0X2NvbmZpZyAke2Q6Ky1DfSAke2Q6KyIkZCJ9IGNvcmUuYmFyZSBmYWxzZSA7OworCQkJdSopIHRlc3RfdW5jb25maWcgJHtkOistQ30gJHtkOisiJGQifSBjb3JlLmJhcmUgOzsKKwkJCWVzYWMgJiYKKworCQkJZWNobyAiJGV4cGVjdCIgPmV4cGVjdCAmJgorCQkJZ2l0ICR7ZDorLUN9ICR7ZDorIiRkIn0gcmV2LXBhcnNlICRvID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkJJworCQlzaGlmdAorCWRvbmUKK30KKworUk9PVD0kKHB3ZCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X29pZF9pbml0ICYmCisJbWtkaXIgLXAgc3ViL2RpciB3b3JrICYmCisJY3AgLVIgLmdpdCByZXBvLmdpdAorJworCit0ZXN0X3Jldl9wYXJzZSB0b3BsZXZlbCBmYWxzZSBmYWxzZSB0cnVlICcnIC5naXQgIiRST09ULy5naXQiCisKK3Rlc3RfcmV2X3BhcnNlIC1DIC5naXQgLmdpdC8gZmFsc2UgdHJ1ZSBmYWxzZSAnJyAuICIkUk9PVC8uZ2l0IgordGVzdF9yZXZfcGFyc2UgLUMgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8gZmFsc2UgdHJ1ZSBmYWxzZSAnJyAiJFJPT1QvLmdpdCIgIiRST09ULy5naXQiCisKK3Rlc3RfcmV2X3BhcnNlIC1DIHN1Yi9kaXIgc3ViZGlyZWN0b3J5IGZhbHNlIGZhbHNlIHRydWUgc3ViL2Rpci8gIiRST09ULy5naXQiICIkUk9PVC8uZ2l0IgorCit0ZXN0X3Jldl9wYXJzZSAtYiB0ICdjb3JlLmJhcmUgPSB0cnVlJyB0cnVlIGZhbHNlIGZhbHNlCisKK3Rlc3RfcmV2X3BhcnNlIC1iIHUgJ2NvcmUuYmFyZSB1bmRlZmluZWQnIGZhbHNlIGZhbHNlIHRydWUKKworCit0ZXN0X3Jldl9wYXJzZSAtQyB3b3JrIC1nIC4uLy5naXQgLWIgZiAnR0lUX0RJUj0uLi8uZ2l0LCBjb3JlLmJhcmUgPSBmYWxzZScgZmFsc2UgZmFsc2UgdHJ1ZSAnJyAiLi4vLmdpdCIgIiRST09ULy5naXQiCisKK3Rlc3RfcmV2X3BhcnNlIC1DIHdvcmsgLWcgLi4vLmdpdCAtYiB0ICdHSVRfRElSPS4uLy5naXQsIGNvcmUuYmFyZSA9IHRydWUnIHRydWUgZmFsc2UgZmFsc2UgJycKKwordGVzdF9yZXZfcGFyc2UgLUMgd29yayAtZyAuLi8uZ2l0IC1iIHUgJ0dJVF9ESVI9Li4vLmdpdCwgY29yZS5iYXJlIHVuZGVmaW5lZCcgZmFsc2UgZmFsc2UgdHJ1ZSAnJworCisKK3Rlc3RfcmV2X3BhcnNlIC1DIHdvcmsgLWcgLi4vcmVwby5naXQgLWIgZiAnR0lUX0RJUj0uLi9yZXBvLmdpdCwgY29yZS5iYXJlID0gZmFsc2UnIGZhbHNlIGZhbHNlIHRydWUgJycgIi4uL3JlcG8uZ2l0IiAiJFJPT1QvcmVwby5naXQiCisKK3Rlc3RfcmV2X3BhcnNlIC1DIHdvcmsgLWcgLi4vcmVwby5naXQgLWIgdCAnR0lUX0RJUj0uLi9yZXBvLmdpdCwgY29yZS5iYXJlID0gdHJ1ZScgdHJ1ZSBmYWxzZSBmYWxzZSAnJworCit0ZXN0X3Jldl9wYXJzZSAtQyB3b3JrIC1nIC4uL3JlcG8uZ2l0IC1iIHUgJ0dJVF9ESVI9Li4vcmVwby5naXQsIGNvcmUuYmFyZSB1bmRlZmluZWQnIGZhbHNlIGZhbHNlIHRydWUgJycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWNvbW1vbi1kaXIgZnJvbSB3b3JrdHJlZSByb290JyAnCisJZWNobyAuZ2l0ID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWNvbW1vbi1kaXIgaW5zaWRlIHN1Yi1kaXInICcKKwlta2RpciAtcCBwYXRoL3RvL2NoaWxkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcGF0aCIgJiYKKwllY2hvICIkKGdpdCAtQyBwYXRoL3RvL2NoaWxkIHJldi1wYXJzZSAtLXNob3ctY2R1cCkuZ2l0IiA+ZXhwZWN0ICYmCisJZ2l0IC1DIHBhdGgvdG8vY2hpbGQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LXBhdGggZnJvbSB3b3JrdHJlZSByb290JyAnCisJZWNobyAuZ2l0L29iamVjdHMgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBvYmplY3RzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1wYXRoIGluc2lkZSBzdWItZGlyJyAnCisJbWtkaXIgLXAgcGF0aC90by9jaGlsZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHBhdGgiICYmCisJZWNobyAiJChnaXQgLUMgcGF0aC90by9jaGlsZCByZXYtcGFyc2UgLS1zaG93LWNkdXApLmdpdC9vYmplY3RzIiA+ZXhwZWN0ICYmCisJZ2l0IC1DIHBhdGgvdG8vY2hpbGQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggb2JqZWN0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1pcy1zaGFsbG93LXJlcG9zaXRvcnkgaW4gc2hhbGxvdyByZXBvJyAnCisJdGVzdF9jb21taXQgdGVzdF9jb21taXQgJiYKKwllY2hvIHRydWUgPmV4cGVjdCAmJgorCWdpdCBjbG9uZSAtLWRlcHRoIDEgLS1uby1sb2NhbCAuIHNoYWxsb3cgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzaGFsbG93IiAmJgorCWdpdCAtQyBzaGFsbG93IHJldi1wYXJzZSAtLWlzLXNoYWxsb3ctcmVwb3NpdG9yeSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1pcy1zaGFsbG93LXJlcG9zaXRvcnkgaW4gbm9uLXNoYWxsb3cgcmVwbycgJworCWVjaG8gZmFsc2UgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1pcy1zaGFsbG93LXJlcG9zaXRvcnkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0IGluIHJlcG8nICcKKwllY2hvICIkKHRlc3Rfb2lkIGFsZ28pIiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3ctb2JqZWN0LWZvcm1hdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9c3RvcmFnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PW91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9c3F1ZWFtaXNoLW9zc2lmcmFnZSAyPmVyciAmJgorCWdyZXAgInVua25vd24gbW9kZSBmb3IgLS1zaG93LW9iamVjdC1mb3JtYXQ6IHNxdWVhbWlzaC1vc3NpZnJhZ2UiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctdG9wbGV2ZWwgZnJvbSBzdWJkaXIgb2Ygd29ya2luZyB0cmVlJyAnCisJcHdkID5leHBlY3QgJiYKKwlnaXQgLUMgc3ViL2RpciByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy10b3BsZXZlbCBmcm9tIGluc2lkZSAuZ2l0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIC5naXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHRoZSBzdXBlcnByb2plY3QgY29ycmVjdGx5JyAnCisJZ2l0IHJldi1wYXJzZSAtLXNob3ctc3VwZXJwcm9qZWN0LXdvcmtpbmctdHJlZSA+b3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBzdXBlciAmJgorCXRlc3RfY29tbWl0IC1DIHN1cGVyIHRlc3RfY29tbWl0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyBzdWIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWIgdGVzdF9jb21taXQgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIGFkZCAuLi9zdWIgZGlyL3N1YiAmJgorCWVjaG8gJChwd2QpL3N1cGVyID5leHBlY3QgICYmCisJZ2l0IC1DIHN1cGVyL2Rpci9zdWIgcmV2LXBhcnNlIC0tc2hvdy1zdXBlcnByb2plY3Qtd29ya2luZy10cmVlID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0ICYmCisKKwl0ZXN0X2NvbW1pdCAtQyBzdXBlciBzdWJtb2R1bGVfYWRkICYmCisJZ2l0IC1DIHN1cGVyIGNoZWNrb3V0IC1iIGJyYW5jaDEgJiYKKwlnaXQgLUMgc3VwZXIvZGlyL3N1YiBjaGVja291dCAtYiBicmFuY2gxICYmCisJdGVzdF9jb21taXQgLUMgc3VwZXIvZGlyL3N1YiBicmFuY2gxX2NvbW1pdCAmJgorCWdpdCAtQyBzdXBlciBhZGQgZGlyL3N1YiAmJgorCXRlc3RfY29tbWl0IC1DIHN1cGVyIGJyYW5jaDFfY29tbWl0ICYmCisJZ2l0IC1DIHN1cGVyIGNoZWNrb3V0IC1iIGJyYW5jaDIgbWFzdGVyICYmCisJZ2l0IC1DIHN1cGVyL2Rpci9zdWIgY2hlY2tvdXQgLWIgYnJhbmNoMiBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdXBlci9kaXIvc3ViIGJyYW5jaDJfY29tbWl0ICYmCisJZ2l0IC1DIHN1cGVyIGFkZCBkaXIvc3ViICYmCisJdGVzdF9jb21taXQgLUMgc3VwZXIgYnJhbmNoMl9jb21taXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgbWVyZ2UgYnJhbmNoMSAmJgorCisJZ2l0IC1DIHN1cGVyL2Rpci9zdWIgcmV2LXBhcnNlIC0tc2hvdy1zdXBlcnByb2plY3Qtd29ya2luZy10cmVlID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwMS13b3JrLXRyZWUuc2ggYi90L3QxNTAxLXdvcmstdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzU1NTgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwMS13b3JrLXRyZWUuc2gKQEAgLTAsMCArMSw0NDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHNlcGFyYXRlIHdvcmsgdHJlZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCUVNUFRZX1RSRUU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlFTVBUWV9CTE9CPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS1zdGRpbiA8L2Rldi9udWxsKSAmJgorCUNIQU5HRURfQkxPQj0kKGVjaG8gY2hhbmdlZCB8IGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tc3RkaW4pICYmCisJRU1QVFlfQkxPQjc9JChlY2hvICRFTVBUWV9CTE9CIHwgc2VkICJzL1woLi4uLi4uLlwpLiovXDEvIikgJiYKKwlDSEFOR0VEX0JMT0I3PSQoZWNobyAkQ0hBTkdFRF9CTE9CIHwgc2VkICJzL1woLi4uLi4uLlwpLiovXDEvIikgJiYKKworCW1rZGlyIC1wIHdvcmsvc3ViL2RpciAmJgorCW1rZGlyIC1wIHdvcmsyICYmCisJbXYgLmdpdCByZXBvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogaGVscGVyIGZvciB0ZXN0aW5nIHJldi1wYXJzZScgJworCXRlc3RfcmV2X3BhcnNlKCkgeworCQllY2hvICQxID5leHBlY3RlZC5iYXJlICYmCisJCWVjaG8gJDIgPmV4cGVjdGVkLmluc2lkZS1naXQgJiYKKwkJZWNobyAkMyA+ZXhwZWN0ZWQuaW5zaWRlLXdvcmt0cmVlICYmCisJCWlmIHRlc3QgJCMgLWdlIDQKKwkJdGhlbgorCQkJZWNobyAkNCA+ZXhwZWN0ZWQucHJlZml4CisJCWZpICYmCisKKwkJZ2l0IHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSA+YWN0dWFsLmJhcmUgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS1naXQtZGlyID5hY3R1YWwuaW5zaWRlLWdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLXdvcmstdHJlZSA+YWN0dWFsLmluc2lkZS13b3JrdHJlZSAmJgorCQlpZiB0ZXN0ICQjIC1nZSA0CisJCXRoZW4KKwkJCWdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeCA+YWN0dWFsLnByZWZpeAorCQlmaSAmJgorCisJCXRlc3RfY21wIGV4cGVjdGVkLmJhcmUgYWN0dWFsLmJhcmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuaW5zaWRlLWdpdCBhY3R1YWwuaW5zaWRlLWdpdCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC5pbnNpZGUtd29ya3RyZWUgYWN0dWFsLmluc2lkZS13b3JrdHJlZSAmJgorCQlpZiB0ZXN0ICQjIC1nZSA0CisJCXRoZW4KKwkJCSMgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggc2hvdWxkIG91dHB1dAorCQkJIyBhIHNpbmdsZSBuZXdsaW5lIHdoZW4gYXQgdGhlIHRvcCBvZiB0aGUgd29yayB0cmVlLAorCQkJIyBidXQgd2UgdGVzdCBmb3IgdGhhdCBzZXBhcmF0ZWx5LgorCQkJdGVzdCAteiAiJDQiICYmIHRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwucHJlZml4IHx8CisJCQl0ZXN0X2NtcCBleHBlY3RlZC5wcmVmaXggYWN0dWFsLnByZWZpeAorCQlmaQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvcmUud29ya3RyZWUgPSByZWxhdGl2ZSBwYXRoJyAnCisJc2FuZV91bnNldCBHSVRfV09SS19UUkVFICYmCisJR0lUX0RJUj1yZXBvLmdpdCAmJgorCUdJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnICYmCisJZXhwb3J0IEdJVF9ESVIgR0lUX0NPTkZJRyAmJgorCWdpdCBjb25maWcgY29yZS53b3JrdHJlZSAuLi93b3JrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHNpZGUnICcKKwl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnNpZGUgd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9ESVI9Li4vcmVwby5naXQgJiYKKwkJR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSAiIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgcHJlZml4IGlzIGFjdHVhbGx5IHdyaXR0ZW4gb3V0JyAnCisJZWNobyA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJR0lUX0RJUj0uLi9yZXBvLmdpdCAmJgorCQlHSVRfQ09ORklHPSIkKHB3ZCkiLyRHSVRfRElSL2NvbmZpZyAmJgorCQlnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIG9mIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yay9zdWIvZGlyICYmCisJCUdJVF9ESVI9Li4vLi4vLi4vcmVwby5naXQgJiYKKwkJR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSBzdWIvZGlyLworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvcmUud29ya3RyZWUgPSBhYnNvbHV0ZSBwYXRoJyAnCisJc2FuZV91bnNldCBHSVRfV09SS19UUkVFICYmCisJR0lUX0RJUj0kKHB3ZCkvcmVwby5naXQgJiYKKwlHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZyAmJgorCWV4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcgJiYKKwlnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgIiQocHdkKS93b3JrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRzaWRlJyAnCisJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgZmFsc2UgJiYKKwkoCisJCWNkIHdvcmsyICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnNpZGUgd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIHRydWUgIiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBvZiB3b3JrIHRyZWUnICcKKwkoCisJCWNkIHdvcmsvc3ViL2RpciAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSB0cnVlIHN1Yi9kaXIvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogR0lUX1dPUktfVFJFRT1yZWxhdGl2ZSAob3ZlcnJpZGUgY29yZS53b3JrdHJlZSknICcKKwlHSVRfRElSPSQocHdkKS9yZXBvLmdpdCAmJgorCUdJVF9DT05GSUc9JEdJVF9ESVIvY29uZmlnICYmCisJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlIG5vbi1leGlzdGVudCAmJgorCUdJVF9XT1JLX1RSRUU9d29yayAmJgorCWV4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcgR0lUX1dPUktfVFJFRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRzaWRlJyAnCisJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgZmFsc2UgJiYKKwkoCisJCWNkIHdvcmsyICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnNpZGUgd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9XT1JLX1RSRUU9LiAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSB0cnVlICIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgb2Ygd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrL3N1Yi9kaXIgJiYKKwkJR0lUX1dPUktfVFJFRT0uLi8uLiAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSB0cnVlIHN1Yi9kaXIvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogR0lUX1dPUktfVFJFRT1hYnNvbHV0ZSwgYmVsb3cgZ2l0IGRpcicgJworCW12IHdvcmsgcmVwby5naXQvd29yayAmJgorCW12IHdvcmsyIHJlcG8uZ2l0L3dvcmsyICYmCisJR0lUX0RJUj0kKHB3ZCkvcmVwby5naXQgJiYKKwlHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZyAmJgorCUdJVF9XT1JLX1RSRUU9JChwd2QpL3JlcG8uZ2l0L3dvcmsgJiYKKwlleHBvcnQgR0lUX0RJUiBHSVRfQ09ORklHIEdJVF9XT1JLX1RSRUUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0c2lkZScgJworCWVjaG8gb3V0c2lkZSAmJgorCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luIHJlcG8uZ2l0JyAnCisJKAorCQljZCByZXBvLmdpdCAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSB0cnVlIGZhbHNlCisJKSAmJgorCSgKKwkJY2QgcmVwby5naXQvb2JqZWN0cyAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSB0cnVlIGZhbHNlCisJKSAmJgorCSgKKwkJY2QgcmVwby5naXQvd29yazIgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSBmYWxzZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIHdvcmsgdHJlZScgJworCSgKKwkJY2QgcmVwby5naXQvd29yayAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSB0cnVlIHRydWUgIiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBvZiB3b3JrIHRyZWUnICcKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsvc3ViL2RpciAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSB0cnVlIHRydWUgc3ViL2Rpci8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgd29yayB0cmVlIGZyb20gcmVwbycgJworCWVjaG8gc3ViL2Rpci91bnRyYWNrZWQgPmV4cGVjdGVkICYmCisJY2F0IDw8LVxFT0YgPnJlcG8uZ2l0L3dvcmsvLmdpdGlnbm9yZSAmJgorCWV4cGVjdGVkLioKKwlhY3R1YWwuKgorCS5naXRpZ25vcmUKKwlFT0YKKwk+cmVwby5naXQvd29yay9zdWIvZGlyL3VudHJhY2tlZCAmJgorCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHdvcmsgdHJlZSBmcm9tIHdvcmsgdHJlZScgJworCWVjaG8gc3ViL2Rpci90cmFja2VkID5leHBlY3RlZCAmJgorCT5yZXBvLmdpdC93b3JrL3N1Yi9kaXIvdHJhY2tlZCAmJgorCSgKKwkJY2QgcmVwby5naXQvd29yay9zdWIvZGlyICYmCisJCWdpdCAtLWdpdC1kaXI9Li4vLi4vLi4gYWRkIHRyYWNrZWQKKwkpICYmCisJKAorCQljZCByZXBvLmdpdCAmJgorCQlnaXQgbHMtZmlsZXMgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX2dlbnRseSgpIGdyb2tzIHJlbGF0aXZlIEdJVF9ESVIgJiBHSVRfV09SS19UUkVFJyAnCisJKAorCQljZCByZXBvLmdpdC93b3JrL3N1Yi9kaXIgJiYKKwkJR0lUX0RJUj0uLi8uLi8uLiAmJgorCQlHSVRfV09SS19UUkVFPS4uLy4uICYmCisJCUdJVF9QQUdFUj0gJiYKKwkJZXhwb3J0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSBHSVRfUEFHRVIgJiYKKworCQlnaXQgZGlmZiAtLWV4aXQtY29kZSB0cmFja2VkICYmCisJCWVjaG8gY2hhbmdlZCA+dHJhY2tlZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSB0cmFja2VkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IHJlc3BlY3RzIHdvcmsgdHJlZSB1bmRlciAuZ2l0IGRpcicgJworCWNhdCA+ZGlmZi1pbmRleC1jYWNoZWQuZXhwZWN0ZWQgPDwtRU9GICYmCisJOjAwMDAwMCAxMDA2NDQgJFpFUk9fT0lEICRFTVBUWV9CTE9CIEEJc3ViL2Rpci90cmFja2VkCisJRU9GCisJY2F0ID5kaWZmLWluZGV4LmV4cGVjdGVkIDw8LUVPRiAmJgorCTowMDAwMDAgMTAwNjQ0ICRaRVJPX09JRCAkWkVST19PSUQgQQlzdWIvZGlyL3RyYWNrZWQKKwlFT0YKKworCSgKKwkJR0lUX0RJUj1yZXBvLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPXJlcG8uZ2l0L3dvcmsgJiYKKwkJZXhwb3J0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCQlnaXQgZGlmZi1pbmRleCAkRU1QVFlfVFJFRSA+ZGlmZi1pbmRleC5hY3R1YWwgJiYKKwkJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJEVNUFRZX1RSRUUgPmRpZmYtaW5kZXgtY2FjaGVkLmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmLWluZGV4LmV4cGVjdGVkIGRpZmYtaW5kZXguYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1pbmRleC1jYWNoZWQuZXhwZWN0ZWQgZGlmZi1pbmRleC1jYWNoZWQuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgcmVzcGVjdHMgd29yayB0cmVlIHVuZGVyIC5naXQgZGlyJyAnCisJY2F0ID5kaWZmLWZpbGVzLmV4cGVjdGVkIDw8LUVPRiAmJgorCToxMDA2NDQgMTAwNjQ0ICRFTVBUWV9CTE9CICRaRVJPX09JRCBNCXN1Yi9kaXIvdHJhY2tlZAorCUVPRgorCisJKAorCQlHSVRfRElSPXJlcG8uZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9cmVwby5naXQvd29yayAmJgorCQlleHBvcnQgR0lUX0RJUiBHSVRfV09SS19UUkVFICYmCisJCWdpdCBkaWZmLWZpbGVzID5kaWZmLWZpbGVzLmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmLWZpbGVzLmV4cGVjdGVkIGRpZmYtZmlsZXMuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIHJlc3BlY3RzIHdvcmsgdHJlZSB1bmRlciAuZ2l0IGRpcicgJworCWNhdCA+ZGlmZi1UUkVFLmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zdWIvZGlyL3RyYWNrZWQgYi9zdWIvZGlyL3RyYWNrZWQKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiRDSEFOR0VEX0JMT0I3CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3N1Yi9kaXIvdHJhY2tlZAorCUBAIC0wLDAgKzEgQEAKKwkrY2hhbmdlZAorCUVPRgorCWNhdCA+ZGlmZi1UUkVFLWNhY2hlZC5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc3ViL2Rpci90cmFja2VkIGIvc3ViL2Rpci90cmFja2VkCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kRU1QVFlfQkxPQjcKKwlFT0YKKwljYXQgPmRpZmYtRklMRVMuZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3N1Yi9kaXIvdHJhY2tlZCBiL3N1Yi9kaXIvdHJhY2tlZAorCWluZGV4ICRFTVBUWV9CTE9CNy4uJENIQU5HRURfQkxPQjcgMTAwNjQ0CisJLS0tIGEvc3ViL2Rpci90cmFja2VkCisJKysrIGIvc3ViL2Rpci90cmFja2VkCisJQEAgLTAsMCArMSBAQAorCStjaGFuZ2VkCisJRU9GCisKKwkoCisJCUdJVF9ESVI9cmVwby5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT1yZXBvLmdpdC93b3JrICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IGRpZmYgJEVNUFRZX1RSRUUgPmRpZmYtVFJFRS5hY3R1YWwgJiYKKwkJZ2l0IGRpZmYgLS1jYWNoZWQgJEVNUFRZX1RSRUUgPmRpZmYtVFJFRS1jYWNoZWQuYWN0dWFsICYmCisJCWdpdCBkaWZmID5kaWZmLUZJTEVTLmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmLVRSRUUuZXhwZWN0ZWQgZGlmZi1UUkVFLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtVFJFRS1jYWNoZWQuZXhwZWN0ZWQgZGlmZi1UUkVFLWNhY2hlZC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmLUZJTEVTLmV4cGVjdGVkIGRpZmYtRklMRVMuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwJyAnCisJZWNobyBkaXIvdHJhY2tlZCA+ZXhwZWN0ZWQuZ3JlcCAmJgorCSgKKwkJY2QgcmVwby5naXQvd29yay9zdWIgJiYKKwkJR0lUX0RJUj0uLi8uLiAmJgorCQlHSVRfV09SS19UUkVFPS4uICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IGdyZXAgLWwgY2hhbmdlZCA+Li4vLi4vLi4vYWN0dWFsLmdyZXAKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuZ3JlcCBhY3R1YWwuZ3JlcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0JyAnCisJKAorCQljZCByZXBvLmdpdCAmJgorCQlHSVRfRElSPS4gR0lUX1dPUktfVFJFRT13b3JrIGdpdCBjb21taXQgLWEgLW0gZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgcGF0aHNwZWMgc2hvdWxkIGZhaWwgZ3JhY2VmdWxseScgJworCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgSEVBRCAtLSAvaG9tZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZV9yZWxhdGl2ZV9wYXRoIGhhbmRsZXMgZG91YmxlIHNsYXNoZXMgaW4gR0lUX0RJUicgJworCT5kdW1teV9maWxlICYmCisJZWNobyBnaXQgLS1naXQtZGlyPSIkKHB3ZCkvL3JlcG8uZ2l0IiAtLXdvcmstdHJlZT0iJChwd2QpIiBhZGQgZHVtbXlfZmlsZSAmJgorCWdpdCAtLWdpdC1kaXI9IiQocHdkKS8vcmVwby5naXQiIC0td29yay10cmVlPSIkKHB3ZCkiIGFkZCBkdW1teV9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlICRHSVRfV09SS19UUkVFIGFuZCBnaXQgc3VicHJvY2Vzc2VzJyAnCisJR0lUX0RJUj1yZXBvLmdpdCBHSVRfV09SS19UUkVFPXJlcG8uZ2l0L3dvcmsgXAorCXRlc3QtdG9vbCBzdWJwcm9jZXNzIC0tc2V0dXAtd29yay10cmVlIHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwgPmFjdHVhbCAmJgorCWVjaG8gIiQocHdkKS9yZXBvLmdpdC93b3JrIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTXVsdGktd29ya3RyZWUgc2V0dXAnICcKKwlta2RpciB3b3JrICYmCisJbWtkaXIgLXAgcmVwby5naXQvcmVwb3MvZm9vICYmCisJY3AgcmVwby5naXQvSEVBRCByZXBvLmdpdC9pbmRleCByZXBvLmdpdC9yZXBvcy9mb28gJiYKKwl7IGNwIHJlcG8uZ2l0L3NoYXJlZGluZGV4LiogcmVwby5naXQvcmVwb3MvZm9vIHx8IDo7IH0gJiYKKwlzYW5lX3Vuc2V0IEdJVF9ESVIgR0lUX0NPTkZJRyBHSVRfV09SS19UUkVFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgc2V0ICgxKScgJworCWVjaG8gImdpdGRpcjogcmVwby5naXQvcmVwb3MvZm9vIiA+Z2l0ZmlsZSAmJgorCWVjaG8gLi4vLi4gPnJlcG8uZ2l0L3JlcG9zL2Zvby9jb21tb25kaXIgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJR0lUX0RJUj0uLi9naXRmaWxlIGdpdCByZXYtcGFyc2UgLS1naXQtY29tbW9uLWRpciA+YWN0dWFsICYmCisJCXRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiJFRSQVNIX0RJUkVDVE9SWS9yZXBvLmdpdCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSIHNldCAoMiknICcKKwllY2hvICJnaXRkaXI6IHJlcG8uZ2l0L3JlcG9zL2ZvbyIgPmdpdGZpbGUgJiYKKwllY2hvICIkKHB3ZCkvcmVwby5naXQiID5yZXBvLmdpdC9yZXBvcy9mb28vY29tbW9uZGlyICYmCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9ESVI9Li4vZ2l0ZmlsZSBnaXQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbCAmJgorCQl0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRUUkFTSF9ESVJFQ1RPUlkvcmVwby5naXQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQXV0byBkaXNjb3ZlcnknICcKKwllY2hvICJnaXRkaXI6IHJlcG8uZ2l0L3JlcG9zL2ZvbyIgPi5naXQgJiYKKwllY2hvIC4uLy4uID5yZXBvLmdpdC9yZXBvcy9mb28vY29tbW9uZGlyICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCByZXYtcGFyc2UgLS1naXQtY29tbW9uLWRpciA+YWN0dWFsICYmCisJCXRlc3QtdG9vbCBwYXRoLXV0aWxzIHJlYWxfcGF0aCAiJFRSQVNIX0RJUkVDVE9SWS9yZXBvLmdpdCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWVjaG8gaGFoYSA+ZGF0YTEgJiYKKwkJZ2l0IGFkZCBkYXRhMSAmJgorCQlnaXQgbHMtZmlsZXMgLS1mdWxsLW5hbWUgOi8gfCBncmVwIGRhdGExID5hY3R1YWwgJiYKKwkJZWNobyB3b3JrL2RhdGExID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJEdJVF9ESVIvY29tbW9uIG92ZXJyaWRlcyBjb3JlLndvcmt0cmVlJyAnCisJbWtkaXIgZWxzZXdoZXJlICYmCisJZ2l0IC0tZ2l0LWRpcj1yZXBvLmdpdCBjb25maWcgY29yZS53b3JrdHJlZSAiJFRSQVNIX0RJUkVDVE9SWS9lbHNld2hlcmUiICYmCisJZWNobyAiZ2l0ZGlyOiByZXBvLmdpdC9yZXBvcy9mb28iID4uZ2l0ICYmCisJZWNobyAuLi8uLiA+cmVwby5naXQvcmVwb3MvZm9vL2NvbW1vbmRpciAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbCAmJgorCQl0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiRUUkFTSF9ESVJFQ1RPUlkvcmVwby5naXQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQllY2hvIGhhaGEgPmRhdGEyICYmCisJCWdpdCBhZGQgZGF0YTIgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tZnVsbC1uYW1lIDovIHwgZ3JlcCBkYXRhMiA+YWN0dWFsICYmCisJCWVjaG8gd29yay9kYXRhMiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyRHSVRfV09SS19UUkVFIG92ZXJyaWRlcyAkR0lUX0RJUi9jb21tb24nICcKKwllY2hvICJnaXRkaXI6IHJlcG8uZ2l0L3JlcG9zL2ZvbyIgPi5naXQgJiYKKwllY2hvIC4uLy4uID5yZXBvLmdpdC9yZXBvcy9mb28vY29tbW9uZGlyICYmCisJKAorCQljZCB3b3JrICYmCisJCWVjaG8gaGFoYSA+ZGF0YTMgJiYKKwkJZ2l0IC0tZ2l0LWRpcj0uLi8uZ2l0IC0td29yay10cmVlPS4gYWRkIGRhdGEzICYmCisJCWdpdCBscy1maWxlcyAtLWZ1bGwtbmFtZSAtLSA6LyB8IGdyZXAgZGF0YTMgPmFjdHVhbCAmJgorCQllY2hvIGRhdGEzID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IGdyYWNlZnVsbHkgb24gaW52YWxpZCAkR0lUX1dPUktfVFJFRScgJworCSgKKwkJR0lUX1dPUktfVFJFRT0vLmludmFsaWQvd29yay90cmVlICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCByZXYtcGFyc2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMgd29yayB3aXRoIHJlbGF0aXZlIGdpdGRpciBhbmQgd29yayB0cmVlJyAnCisJZ2l0IGluaXQgcmVsYXRpdmUgJiYKKwlnaXQgLUMgcmVsYXRpdmUgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lICYmCisJZ2l0IC1DIHJlbGF0aXZlIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCisJR0lUX0RJUj1yZWxhdGl2ZS8uZ2l0IEdJVF9XT1JLX1RSRUU9cmVsYXRpdmUgZ2l0IHJlc2V0IEhFQUReICYmCisKKwlnaXQgLUMgcmVsYXRpdmUgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwllY2hvIG9uZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDItcmV2LXBhcnNlLXBhcnNlb3B0LnNoIGIvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTg1OWFiZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDItcmV2LXBhcnNlLXBhcnNlb3B0LnNoCkBAIC0wLDAgKzEsMjg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb3B0aW9uc3BlYycgJworCXNlZCAtZSAicy9efC8vIiA+b3B0aW9uc3BlYyA8PFxFT0YKK3xzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorfAorfHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorfC0tCit8aCxoZWxwICAgIHNob3cgdGhlIGhlbHAKK3wKK3xmb28gICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KK3xiYXI9ICAgICAgc29tZSBjb29sIG9wdGlvbiAtLWJhciB3aXRoIGFuIGFyZ3VtZW50Cit8YixiYXogICAgIGEgc2hvcnQgYW5kIGxvbmcgb3B0aW9uCit8Cit8IEFuIG9wdGlvbiBncm91cCBIZWFkZXIKK3xDPyAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfGQsZGF0YT8gICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfAorfCBBcmd1bWVudCBoaW50cworfEI9YXJnICAgICBzaG9ydCBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3xiYXIyPWFyZyAgbG9uZyBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3xlLGZ1ej13aXRoLXNwYWNlICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3xzP3NvbWUgICAgc2hvcnQgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8bG9uZz9kYXRhIGxvbmcgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8ZyxmbHVmP3BhdGggICAgIHNob3J0IGFuZCBsb25nIG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfGxvbmdlc3Q9dmVyeS1sb25nLWFyZ3VtZW50LWhpbnQgIGEgdmVyeSBsb25nIGFyZ3VtZW50IGhpbnQKK3xwYWlyPWtleT12YWx1ZSAgd2l0aCBhbiBlcXVhbHMgc2lnbiBpbiB0aGUgaGludAorfGFzd2l0Y2ggaGVscCB0ZT10IGNvbnRhaW5zPyBmbCpnIGNoYXJhY3RlcnMhYAorfGJzd2l0Y2g9aGludAkgaGludCBoYXMgdHJhaWxpbmcgdGFiIGNoYXJhY3RlcgorfGNzd2l0Y2gJIHN3aXRjaCBoYXMgdHJhaWxpbmcgdGFiIGNoYXJhY3RlcgorfHNob3J0LWhpbnQ9YSAgICB3aXRoIGEgb25lIHN5bWJvbCBoaW50Cit8Cit8RXh0cmFzCit8ZXh0cmExICAgIGxpbmUgYWJvdmUgdXNlZCB0byBjYXVzZSBhIHNlZ2ZhdWx0IGJ1dCBubyBsb25nZXIgZG9lcworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9wdGlvbnNwZWMtbm8tc3dpdGNoZXMnICcKKwlzZWQgLWUgInMvXnwvLyIgPm9wdGlvbnNwZWNfbm9fc3dpdGNoZXMgPDxcRU9GCit8c29tZS1jb21tYW5kIFtvcHRpb25zXSA8YXJncz4uLi4KK3wKK3xzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKK3wtLQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9wdGlvbnNwZWMtb25seS1oaWRkZW4tc3dpdGNoZXMnICcKKwlzZWQgLWUgInMvXnwvLyIgPm9wdGlvbnNwZWNfb25seV9oaWRkZW5fc3dpdGNoZXMgPDxcRU9GCit8c29tZS1jb21tYW5kIFtvcHRpb25zXSA8YXJncz4uLi4KK3wKK3xzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKK3wtLQorfGhpZGRlbjEqIEEgaGlkZGVuIHN3aXRjaAorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCBoZWxwIG91dHB1dCcgJworCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8XEVORF9FWFBFQ1QgJiYKK3xjYXQgPDxcRU9GCit8dXNhZ2U6IHNvbWUtY29tbWFuZCBbb3B0aW9uc10gPGFyZ3M+Li4uCit8Cit8ICAgIHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorfAorfCAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGUgaGVscAorfCAgICAtLWZvbyAgICAgICAgICAgICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KK3wgICAgLS1iYXIgLi4uICAgICAgICAgICAgIHNvbWUgY29vbCBvcHRpb24gLS1iYXIgd2l0aCBhbiBhcmd1bWVudAorfCAgICAtYiwgLS1iYXogICAgICAgICAgICAgYSBzaG9ydCBhbmQgbG9uZyBvcHRpb24KK3wKK3xBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCit8ICAgIC1DWy4uLl0gICAgICAgICAgICAgICBvcHRpb24gQyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC1kLCAtLWRhdGFbPS4uLl0gICAgICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfAorfEFyZ3VtZW50IGhpbnRzCit8ICAgIC1CIDxhcmc+ICAgICAgICAgICAgICBzaG9ydCBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3wgICAgLS1iYXIyIDxhcmc+ICAgICAgICAgIGxvbmcgb3B0aW9uIHJlcXVpcmVkIGFyZ3VtZW50Cit8ICAgIC1lLCAtLWZ1eiA8d2l0aC1zcGFjZT4KK3wgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGFuZCBsb25nIG9wdGlvbiByZXF1aXJlZCBhcmd1bWVudAorfCAgICAtc1s8c29tZT5dICAgICAgICAgICAgc2hvcnQgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC0tbG9uZ1s9PGRhdGE+XSAgICAgICBsb25nIG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtZywgLS1mbHVmWz08cGF0aD5dICAgc2hvcnQgYW5kIGxvbmcgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC0tbG9uZ2VzdCA8dmVyeS1sb25nLWFyZ3VtZW50LWhpbnQ+Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICBhIHZlcnkgbG9uZyBhcmd1bWVudCBoaW50Cit8ICAgIC0tcGFpciA8a2V5PXZhbHVlPiAgICB3aXRoIGFuIGVxdWFscyBzaWduIGluIHRoZSBoaW50Cit8ICAgIC0tYXN3aXRjaCAgICAgICAgICAgICBoZWxwIHRlPXQgY29udGFpbnM/IGZsKmcgY2hhcmFjdGVycyFgCit8ICAgIC0tYnN3aXRjaCA8aGludD4gICAgICBoaW50IGhhcyB0cmFpbGluZyB0YWIgY2hhcmFjdGVyCit8ICAgIC0tY3N3aXRjaCAgICAgICAgICAgICBzd2l0Y2ggaGFzIHRyYWlsaW5nIHRhYiBjaGFyYWN0ZXIKK3wgICAgLS1zaG9ydC1oaW50IDxhPiAgICAgIHdpdGggYSBvbmUgc3ltYm9sIGhpbnQKK3wKK3xFeHRyYXMKK3wgICAgLS1leHRyYTEgICAgICAgICAgICAgIGxpbmUgYWJvdmUgdXNlZCB0byBjYXVzZSBhIHNlZ2ZhdWx0IGJ1dCBubyBsb25nZXIgZG9lcworfAorfEVPRgorRU5EX0VYUEVDVAorCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtaCA+IG91dHB1dCA8IG9wdGlvbnNwZWMgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgaGVscCBvdXRwdXQgbm8gc3dpdGNoZXMnICcKKwlzZWQgLWUgInMvXnwvLyIgPmV4cGVjdCA8PFxFTkRfRVhQRUNUICYmCit8Y2F0IDw8XEVPRgorfHVzYWdlOiBzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorfAorfCAgICBzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKK3wKK3xFT0YKK0VORF9FWFBFQ1QKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLWggPiBvdXRwdXQgPCBvcHRpb25zcGVjX25vX3N3aXRjaGVzICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IGhlbHAgb3V0cHV0IGhpZGRlbiBzd2l0Y2hlcycgJworCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8XEVORF9FWFBFQ1QgJiYKK3xjYXQgPDxcRU9GCit8dXNhZ2U6IHNvbWUtY29tbWFuZCBbb3B0aW9uc10gPGFyZ3M+Li4uCit8Cit8ICAgIHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorfAorfEVPRgorRU5EX0VYUEVDVAorCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtaCA+IG91dHB1dCA8IG9wdGlvbnNwZWNfb25seV9oaWRkZW5fc3dpdGNoZXMgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgaGVscC1hbGwgb3V0cHV0IGhpZGRlbiBzd2l0Y2hlcycgJworCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8XEVORF9FWFBFQ1QgJiYKK3xjYXQgPDxcRU9GCit8dXNhZ2U6IHNvbWUtY29tbWFuZCBbb3B0aW9uc10gPGFyZ3M+Li4uCit8Cit8ICAgIHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorfAorfCAgICAtLWhpZGRlbjEgICAgICAgICAgICAgQSBoaWRkZW4gc3dpdGNoCit8Cit8RU9GCitFTkRfRVhQRUNUCisJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC0taGVscC1hbGwgPiBvdXRwdXQgPCBvcHRpb25zcGVjX29ubHlfaGlkZGVuX3N3aXRjaGVzICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IGludmFsaWQgc3dpdGNoIGhlbHAgb3V0cHV0JyAnCisJc2VkIC1lICJzL158Ly8iID5leHBlY3QgPDxcRU5EX0VYUEVDVCAmJgorfGVycm9yOiB1bmtub3duIG9wdGlvbiBgZG9lcy1ub3QtZXhpc3QnXCcnCit8dXNhZ2U6IHNvbWUtY29tbWFuZCBbb3B0aW9uc10gPGFyZ3M+Li4uCit8Cit8ICAgIHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorfAorfCAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGUgaGVscAorfCAgICAtLWZvbyAgICAgICAgICAgICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KK3wgICAgLS1iYXIgLi4uICAgICAgICAgICAgIHNvbWUgY29vbCBvcHRpb24gLS1iYXIgd2l0aCBhbiBhcmd1bWVudAorfCAgICAtYiwgLS1iYXogICAgICAgICAgICAgYSBzaG9ydCBhbmQgbG9uZyBvcHRpb24KK3wKK3xBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCit8ICAgIC1DWy4uLl0gICAgICAgICAgICAgICBvcHRpb24gQyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC1kLCAtLWRhdGFbPS4uLl0gICAgICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfAorfEFyZ3VtZW50IGhpbnRzCit8ICAgIC1CIDxhcmc+ICAgICAgICAgICAgICBzaG9ydCBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3wgICAgLS1iYXIyIDxhcmc+ICAgICAgICAgIGxvbmcgb3B0aW9uIHJlcXVpcmVkIGFyZ3VtZW50Cit8ICAgIC1lLCAtLWZ1eiA8d2l0aC1zcGFjZT4KK3wgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGFuZCBsb25nIG9wdGlvbiByZXF1aXJlZCBhcmd1bWVudAorfCAgICAtc1s8c29tZT5dICAgICAgICAgICAgc2hvcnQgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC0tbG9uZ1s9PGRhdGE+XSAgICAgICBsb25nIG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtZywgLS1mbHVmWz08cGF0aD5dICAgc2hvcnQgYW5kIGxvbmcgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC0tbG9uZ2VzdCA8dmVyeS1sb25nLWFyZ3VtZW50LWhpbnQ+Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICBhIHZlcnkgbG9uZyBhcmd1bWVudCBoaW50Cit8ICAgIC0tcGFpciA8a2V5PXZhbHVlPiAgICB3aXRoIGFuIGVxdWFscyBzaWduIGluIHRoZSBoaW50Cit8ICAgIC0tYXN3aXRjaCAgICAgICAgICAgICBoZWxwIHRlPXQgY29udGFpbnM/IGZsKmcgY2hhcmFjdGVycyFgCit8ICAgIC0tYnN3aXRjaCA8aGludD4gICAgICBoaW50IGhhcyB0cmFpbGluZyB0YWIgY2hhcmFjdGVyCit8ICAgIC0tY3N3aXRjaCAgICAgICAgICAgICBzd2l0Y2ggaGFzIHRyYWlsaW5nIHRhYiBjaGFyYWN0ZXIKK3wgICAgLS1zaG9ydC1oaW50IDxhPiAgICAgIHdpdGggYSBvbmUgc3ltYm9sIGhpbnQKK3wKK3xFeHRyYXMKK3wgICAgLS1leHRyYTEgICAgICAgICAgICAgIGxpbmUgYWJvdmUgdXNlZCB0byBjYXVzZSBhIHNlZ2ZhdWx0IGJ1dCBubyBsb25nZXIgZG9lcworfAorRU5EX0VYUEVDVAorCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWRvZXMtbm90LWV4aXN0IDE+L2Rldi9udWxsIDI+b3V0cHV0IDwgb3B0aW9uc3BlYyAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdC4xJyAiCisJY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS1iYXIgJ2hhbScgLWIgLS1hc3dpdGNoIC0tICdhcmcnCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0JyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC0tZm9vIC0tYmFyPWhhbSAtLWJheiAtLWFzd2l0Y2ggYXJnIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IHdpdGggbWl4ZWQgb3B0aW9ucyBhbmQgYXJndW1lbnRzJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC0tZm9vIGFyZyAtLWJhcj1oYW0gLS1iYXogLS1hc3dpdGNoIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0LjInICIKKwljYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLSAnYXJnJyAnLS1iYXI9aGFtJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCB3aXRoIC0tJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC0tZm9vIC0tIGFyZyAtLWJhcj1oYW0gPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1zdG9wLWF0LW5vbi1vcHRpb24nICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdG9wLWF0LW5vbi1vcHRpb24gLS0gLS1mb28gYXJnIC0tYmFyPWhhbSA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdC4zJyAiCisJY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJy0tJyAnYXJnJyAnLS1iYXI9aGFtJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2gnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoIC0tIC0tZm9vIC0tIGFyZyAtLWJhcj1oYW0gPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QuNCcgIgorCWNhdCA+ZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJy0tJyAnYXJnJyAnLS1zcGFtPWhhbScKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoIC0tc3RvcC1hdC1ub24tb3B0aW9uIHdpdGggLS0nICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoIC0tc3RvcC1hdC1ub24tb3B0aW9uIC0tIC0tZm9vIC0tIGFyZyAtLXNwYW09aGFtIDxvcHRpb25zcGVjID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdC41JyAiCisJY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS0gJ2FyZycgJy0tc3BhbT1oYW0nCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCAtLXN0b3AtYXQtbm9uLW9wdGlvbiB3aXRob3V0IC0tJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCAtLXN0b3AtYXQtbm9uLW9wdGlvbiAtLSAtLWZvbyBhcmcgLS1zcGFtPWhhbSA8b3B0aW9uc3BlYyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QuNicgIgorCWNhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tYmFyPSd6JyAtLWJheiAtQydaJyAtLWRhdGE9J0EnIC0tICdhcmcnCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0tc3R1Y2stbG9uZycgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0dWNrLWxvbmcgLS0gLS1mb28gLS1iYXI9eiAtYiBhcmcgLUNaIC1kQSA8b3B0aW9uc3BlYyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QuNycgIgorCWNhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZGF0YT0nJyAtQyAtLWJheiAtLSAnYXJnJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLXN0dWNrLWxvbmcgYW5kIGVtcHR5IG9wdGlvbmFsIGFyZ3VtZW50JyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3R1Y2stbG9uZyAtLSAtLWRhdGE9IGFyZyAtQyAtYiA8b3B0aW9uc3BlYyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QuOCcgIgorCWNhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZGF0YSAtLWJheiAtLSAnYXJnJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLXN0dWNrLWxvbmcgYW5kIGxvbmcgb3B0aW9uIHdpdGggdW5zZXQgb3B0aW9uYWwgYXJndW1lbnQnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdHVjay1sb25nIC0tIC0tZGF0YSBhcmcgLWIgPG9wdGlvbnNwZWMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0tc3R1Y2stbG9uZyBhbmQgc2hvcnQgb3B0aW9uIHdpdGggdW5zZXQgb3B0aW9uYWwgYXJndW1lbnQnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdHVjay1sb25nIC0tIC1kIGFyZyAtYiA8b3B0aW9uc3BlYyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDMtcmV2LXBhcnNlLXZlcmlmeS5zaCBiL3QvdDE1MDMtcmV2LXBhcnNlLXZlcmlmeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OTJlZGZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwMy1yZXYtcGFyc2UtdmVyaWZ5LnNoCkBAIC0wLDAgKzEsMTQ3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENocmlzdGlhbiBDb3VkZXIKKyMKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeScKKworZXhlYyA8L2Rldi9udWxsCisKKy4gLi90ZXN0LWxpYi5zaAorCithZGRfbGluZV9pbnRvX2ZpbGUoKQoreworICAgIF9saW5lPSQxCisgICAgX2ZpbGU9JDIKKworICAgIGlmIFsgLWYgIiRfZmlsZSIgXTsgdGhlbgorICAgICAgICBlY2hvICIkX2xpbmUiID4+ICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgTVNHPSJBZGQgPCRfbGluZT4gaW50byA8JF9maWxlPi4iCisgICAgZWxzZQorICAgICAgICBlY2hvICIkX2xpbmUiID4gJF9maWxlIHx8IHJldHVybiAkPworICAgICAgICBnaXQgYWRkICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgTVNHPSJDcmVhdGUgZmlsZSA8JF9maWxlPiB3aXRoIDwkX2xpbmU+IGluc2lkZS4iCisgICAgZmkKKworICAgIHRlc3RfdGljaworICAgIGdpdCBjb21taXQgLS1xdWlldCAtbSAiJE1TRyIgJF9maWxlCit9CisKK0hBU0gxPQorSEFTSDI9CitIQVNIMz0KK0hBU0g0PQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYmFzaWMgcmVwbyB3aXRoIDEgZmlsZSAoaGVsbG8pIGFuZCA0IGNvbW1pdHMnICcKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjE6IEhlbGxvIFdvcmxkIiBoZWxsbyAmJgorCUhBU0gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMjogQSBuZXcgZGF5IGZvciBnaXQiIGhlbGxvICYmCisJSEFTSDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICIzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKKwlIQVNIMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjQ6IENpYW8gZm9yIG5vdyIgaGVsbG8gJiYKKwlIQVNIND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29ya3Mgd2l0aCBvbmUgZ29vZCByZXYnICcKKwlyZXZfaGFzaDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMSkgJiYKKwl0ZXN0ICIkcmV2X2hhc2gxIiA9ICIkSEFTSDEiICYmCisJcmV2X2hhc2gyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDIpICYmCisJdGVzdCAiJHJldl9oYXNoMiIgPSAiJEhBU0gyIiAmJgorCXJldl9oYXNoMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gzKSAmJgorCXRlc3QgIiRyZXZfaGFzaDMiID0gIiRIQVNIMyIgJiYKKwlyZXZfaGFzaDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNINCkgJiYKKwl0ZXN0ICIkcmV2X2hhc2g0IiA9ICIkSEFTSDQiICYmCisJcmV2X21hc3Rlcj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiRyZXZfbWFzdGVyIiA9ICIkSEFTSDQiICYmCisJcmV2X2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHJldl9oZWFkIiA9ICIkSEFTSDQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHdpdGggYW55IGJhZCByZXYgb3IgbWFueSBnb29kIHJldnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBmb28gMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgYmFyIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiYXogSEVBRCAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gyIEhFQUQgMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgc2lsZW50bHkgd2hlbiB1c2luZyAtcScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSBmb28gMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCBiYXIgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSBiYXogSEVBRCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAkSEFTSDIgSEVBRCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHNpbGVudGx5IHdoZW4gdXNpbmcgLXEgd2l0aCBkZWxldGVkIHJlZmxvZ3MnICcKKwlyZWY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1jcmVhdGUtcmVmbG9nIC1tICJtZXNzYWdlIGZvciByZWZzL3Rlc3QiIHJlZnMvdGVzdCAiJHJlZiIgJiYKKwlnaXQgcmVmbG9nIGRlbGV0ZSAtLXVwZGF0ZXJlZiAtLXJld3JpdGUgcmVmcy90ZXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgcmVmcy90ZXN0QHswfSA+ZXJyb3IgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyBzaWxlbnRseSB3aGVuIHVzaW5nIC1xIHdpdGggbm90IGVub3VnaCByZWZsb2dzJyAnCisJcmVmPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtcmVmIC0tY3JlYXRlLXJlZmxvZyAtbSAibWVzc2FnZSBmb3IgcmVmcy90ZXN0MiIgcmVmcy90ZXN0MiAiJHJlZiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IHJlZnMvdGVzdDJAezk5OX0gPmVycm9yIDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2VlZHMgc2lsZW50bHkgd2l0aCAtcSBhbmQgcmVmbG9ncyB0aGF0IGRvIG5vdCBnbyBmYXIgYmFjayBlbm91Z2ggaW4gdGltZScgJworCXJlZj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLWNyZWF0ZS1yZWZsb2cgLW0gIm1lc3NhZ2UgZm9yIHJlZnMvdGVzdDMiIHJlZnMvdGVzdDMgIiRyZWYiICYmCisJZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSByZWZzL3Rlc3QzQHsxLnllYXIuYWdvfSA+YWN0dWFsIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwllY2hvICIkcmVmIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBzdGRvdXQgb3V0cHV0IG9uIGVycm9yJyAnCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5KSIgJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZm9vKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmF6IEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIGJhcikiICYmCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tZGVmYXVsdCcgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IG1hc3RlciAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IG1hc3RlciBIRUFEICYmCisJZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgbWFzdGVyIC0tdmVyaWZ5ICYmCisJZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgbWFzdGVyIC0tdmVyaWZ5IEhFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgLS1kZWZhdWx0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZm9vIC0tZGVmYXVsdCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBIRUFEIC0tdmVyaWZ5IGJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IEhFQUQgYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgZm9vIC0tdmVyaWZ5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlckB7bn0gZm9yIHZhcmlvdXMgbicgJworCU49JChnaXQgcmVmbG9nIHwgd2MgLWwpICYmCisJTm0xPSQoKCROLTEpKSAmJgorCU5wMT0kKCgkTisxKSkgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7MH0gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7MX0gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7JE5tMX0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7JE59ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAeyROcDF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JlZiByZXNvbHV0aW9uIG5vdCBjb25mdXNlZCBieSBicm9rZW4gc3ltbGlua3MnICcKKwlsbiAtcyBkb2VzLW5vdC1leGlzdCAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicm9rZW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA0LWNlaWxpbmctZGlycy5zaCBiL3QvdDE1MDQtY2VpbGluZy1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkNTE2MTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA0LWNlaWxpbmctZGlycy5zaApAQCAtMCwwICsxLDE4MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9wcmVmaXgoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDEiIFwKKwkidGVzdCAnJDInID0gXCJcJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpXCIiCit9CisKK3Rlc3RfZmFpbCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMTogcHJlZml4IiAnCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeAorCScKK30KKworVFJBU0hfUk9PVD0iJFBXRCIKK1JPT1RfUEFSRU5UPSQoZGlybmFtZSAiJFRSQVNIX1JPT1QiKQorCisKK3Vuc2V0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCit0ZXN0X3ByZWZpeCBub19jZWlsICIiCisKK2V4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iIgordGVzdF9wcmVmaXggY2VpbF9lbXB0eSAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFJPT1RfUEFSRU5UIgordGVzdF9wcmVmaXggY2VpbF9hdF9wYXJlbnQgIiIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRST09UX1BBUkVOVC8iCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3BhcmVudF9zbGFzaCAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QiCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3RyYXNoICIiCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC8iCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3RyYXNoX3NsYXNoICIiCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIiCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3N1YiAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViLyIKK3Rlc3RfcHJlZml4IGNlaWxfYXRfc3ViX3NsYXNoICIiCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlsbiAtcyBzdWIgdG9wCitmaQorCitta2RpciAtcCBzdWIvZGlyIHx8IGV4aXQgMQorY2Qgc3ViL2RpciB8fCBleGl0IDEKKwordW5zZXQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMKK3Rlc3RfcHJlZml4IHN1YmRpcl9ub19jZWlsICJzdWIvZGlyLyIKKworZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIiCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9lbXB0eSAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVCIKK3Rlc3RfZmFpbCBzdWJkaXJfY2VpbF9hdF90cmFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QvIgordGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3RyYXNoX3NsYXNoCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIiCit0ZXN0X2ZhaWwgc3ViZGlyX2NlaWxfYXRfc3ViCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIvIgordGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3N1Yl9zbGFzaAorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3RvcCIKKwl0ZXN0X2ZhaWwgc3ViZGlyX2NlaWxfYXRfdG9wCisJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3RvcC8iCisJdGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3RvcF9zbGFzaAorCisJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IjokVFJBU0hfUk9PVC90b3AiCisJdGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfdG9wX25vX3Jlc29sdmUgInN1Yi9kaXIvIgorCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSI6JFRSQVNIX1JPT1QvdG9wLyIKKwl0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF90b3Bfc2xhc2hfbm9fcmVzb2x2ZSAic3ViL2Rpci8iCitmaQorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViL2RpciIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1YmRpciAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIvZGlyLyIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1YmRpcl9zbGFzaCAic3ViL2Rpci8iCisKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1IgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfc3UgInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3UvIgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfc3Vfc2xhc2ggInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViL2RpIgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfc3ViX2RpICJzdWIvZGlyLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1Yi9kaSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1Yl9kaV9zbGFzaCAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWJkaSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1YmRpICJzdWIvZGlyLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1YmRpIgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfc3ViZGlfc2xhc2ggInN1Yi9kaXIvIgorCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIvZm9vOiRUUkFTSF9ST09UL3N1YiIKK3Rlc3RfZmFpbCBzZWNvbmRfb2ZfdHdvCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWI6L2JhciIKK3Rlc3RfZmFpbCBmaXJzdF9vZl90d28KKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9Ii9mb286JFRSQVNIX1JPT1Qvc3ViOi9iYXIiCit0ZXN0X2ZhaWwgc2Vjb25kX29mX3RocmVlCisKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1YiIKK0dJVF9ESVI9Li4vLi4vLmdpdAorZXhwb3J0IEdJVF9ESVIKK3Rlc3RfcHJlZml4IGdpdF9kaXJfc3BlY2lmaWVkICIiCit1bnNldCBHSVRfRElSCisKKworY2QgLi4vLi4gfHwgZXhpdCAxCitta2RpciAtcCBzL2QgfHwgZXhpdCAxCitjZCBzL2QgfHwgZXhpdCAxCisKK3Vuc2V0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCit0ZXN0X3ByZWZpeCBzZF9ub19jZWlsICJzL2QvIgorCitleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfZW1wdHkgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVCIKK3Rlc3RfZmFpbCBzZF9jZWlsX2F0X3RyYXNoCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC8iCit0ZXN0X2ZhaWwgc2RfY2VpbF9hdF90cmFzaF9zbGFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QvcyIKK3Rlc3RfZmFpbCBzZF9jZWlsX2F0X3MKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvIgordGVzdF9mYWlsIHNkX2NlaWxfYXRfc19zbGFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvcy9kIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zZCAicy9kLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvZC8iCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NkX3NsYXNoICJzL2QvIgorCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdSIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfYXRfc3UgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdS8iCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3N1X3NsYXNoICJzL2QvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvcy9kaSIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfYXRfc19kaSAicy9kLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvZGkiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NfZGlfc2xhc2ggInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zZGkiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NkaSAicy9kLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3NkaSIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfYXRfc2RpX3NsYXNoICJzL2QvIgorCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwNS1yZXYtcGFyc2UtbGFzdC5zaCBiL3QvdDE1MDUtcmV2LXBhcnNlLWxhc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDk2OWVkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDUtcmV2LXBhcnNlLWxhc3Quc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgQHstTn0gc3ludGF4JworCisuIC4vdGVzdC1saWIuc2gKKworCittYWtlX2NvbW1pdCAoKSB7CisJZWNobyAiJDEiID4gIiQxIiAmJgorCWdpdCBhZGQgIiQxIiAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwltYWtlX2NvbW1pdCAxICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJbWFrZV9jb21taXQgMiAmJgorCW1ha2VfY29tbWl0IDMgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCW1ha2VfY29tbWl0IDQgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCisnCisKKyMgMSAtLSAyIC0tIDMgbWFzdGVyCisjICBcICAgICAgICAgXAorIyAgIFwgICAgICAgICBcCisjICAgIC0tLSA0IC0tLSA1IHNpZGUKKyMKKyMgYW5kICdzaWRlJyBzaG91bGQgYmUgdGhlIGxhc3QgYnJhbmNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9IHdvcmtzJyAnCisJdGVzdF9jbXBfcmV2IHNpZGUgQHstMX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHstMX1+MiB3b3JrcycgJworCXRlc3RfY21wX3JldiBzaWRlfjIgQHstMX1+MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0xfV4yIHdvcmtzJyAnCisJdGVzdF9jbXBfcmV2IHNpZGVeMiBAey0xfV4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9QHsxfSB3b3JrcycgJworCXRlc3RfY21wX3JldiBzaWRlQHsxfSBAey0xfUB7MX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHstMn0gd29ya3MnICcKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyIEB7LTJ9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTN9IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBAey0zfQorJworCit0ZXN0X2RvbmUKKworCmRpZmYgLS1naXQgYS90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2ggYi90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTJlZGNiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDYtcmV2LXBhcnNlLWRpYWdub3Npcy5zaApAQCAtMCwwICsxLDIzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1wYXJzZSBkaWFnbm9zaXMgZm9yIGludmFsaWQgYXJndW1lbnQnCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9kaWRfeW91X21lYW4gKCkKK3sKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBwYXRoICckMiQzJyAkNCwgYnV0IG5vdCAkezU6LSRTUSQzJFNRfQorCWhpbnQ6IERpZCB5b3UgbWVhbiAnJDE6JDIkMyckezI6KyBha2EgJFNRJDE6Li8kMyRTUX0/CisJRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGVycm9yCit9CisKK0hBU0hfZmlsZT0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8nICcKKwllY2hvIG9uZSA+IGZpbGUudHh0ICYmCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyB0d28gPiBzdWJkaXIvZmlsZS50eHQgJiYKKwllY2hvIHRocmVlID4gc3ViZGlyL2ZpbGUyLnR4dCAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gaW5pdCAmJgorCWVjaG8gZm91ciA+IGluZGV4LW9ubHkudHh0ICYmCisJZ2l0IGFkZCBpbmRleC1vbmx5LnR4dCAmJgorCWVjaG8gZml2ZSA+IGRpc2stb25seS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBmaWxlIG9iamVjdHMnICcKKwlIQVNIX2ZpbGU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZS50eHQpICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOnN1YmRpci9maWxlLnR4dCAmJgorCWdpdCByZXYtcGFyc2UgOmluZGV4LW9ubHkudHh0ICYmCisJKGNkIHN1YmRpciAmJgorCSBnaXQgcmV2LXBhcnNlIEhFQUQ6c3ViZGlyL2ZpbGUyLnR4dCAmJgorCSB0ZXN0ICRIQVNIX2ZpbGUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlLnR4dCkgJiYKKwkgdGVzdCAkSEFTSF9maWxlID0gJChnaXQgcmV2LXBhcnNlIDpmaWxlLnR4dCkgJiYKKwkgdGVzdCAkSEFTSF9maWxlID0gJChnaXQgcmV2LXBhcnNlIDowOmZpbGUudHh0KSApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgwKScgJworCWdpdCByZXYtcGFyc2UgOmZpbGUudHh0ID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWdpdCByZXYtcGFyc2UgOjA6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgxKScgJworCWdpdCByZXYtcGFyc2UgSEVBRDpmaWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgyKScgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRDouLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDMpJyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEOi4uL3N1YmRpci8uLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDQpJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEOnN1YmRpci9maWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQ6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDUpJyAnCisJZ2l0IHJldi1wYXJzZSA6c3ViZGlyL2ZpbGUudHh0ID5leHBlY3RlZCAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCByZXYtcGFyc2UgOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3RlZCByZXN1bHQgJiYKKwkJZ2l0IHJldi1wYXJzZSA6MDouL2ZpbGUudHh0ID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgcmVzdWx0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IHJlbGF0aXZlIGZpbGUgb2JqZWN0cyAoNiknICcKKwlnaXQgcmV2LXBhcnNlIDpmaWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIDouLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdCAmJgorCQlnaXQgcmV2LXBhcnNlIDowOi4uL2ZpbGUudHh0ID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgcmVzdWx0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgcmV2aXNpb24gaWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZvb2JhcjpmaWxlLnR4dCAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaW52YWxpZCBvYmplY3QgbmFtZSAuZm9vYmFyLiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZvb2JhciAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAidW5rbm93biByZXZpc2lvbiBvciBwYXRoIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlLiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IGZpbGUgaW4gc2hhMTpwYXRoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOm5vdGhpbmcudHh0IDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJwYXRoIC5ub3RoaW5nLnR4dC4gZG9lcyBub3QgZXhpc3QgaW4gLkhFQUQuIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDppbmRleC1vbmx5LnR4dCAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAicGF0aCAuaW5kZXgtb25seS50eHQuIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluIC5IRUFELiIgZXJyb3IgJiYKKwkoY2Qgc3ViZGlyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlMi50eHQgMj5lcnJvciAmJgorCSB0ZXN0X2RpZF95b3VfbWVhbiBIRUFEIHN1YmRpci8gZmlsZTIudHh0IGV4aXN0cyApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBmaWxlIGluIDpwYXRoIGFuZCA6TjpwYXRoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6bm90aGluZy50eHQgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInBhdGggLm5vdGhpbmcudHh0LiBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6bm90aGluZy50eHQgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInBhdGggLm5vdGhpbmcudHh0LiBkb2VzIG5vdCBleGlzdCAobmVpdGhlciBvbiBkaXNrIG5vciBpbiB0aGUgaW5kZXgpIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6ZmlsZS50eHQgMj5lcnJvciAmJgorCXRlc3RfZGlkX3lvdV9tZWFuICI6MCIgIiIgZmlsZS50eHQgImlzIGluIHRoZSBpbmRleCIgImF0IHN0YWdlIDEiICYmCisJKGNkIHN1YmRpciAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoxOmZpbGUudHh0IDI+ZXJyb3IgJiYKKwkgdGVzdF9kaWRfeW91X21lYW4gIjowIiAiIiBmaWxlLnR4dCAiaXMgaW4gdGhlIGluZGV4IiAiYXQgc3RhZ2UgMSIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6ZmlsZTIudHh0IDI+ZXJyb3IgJiYKKwkgdGVzdF9kaWRfeW91X21lYW4gIjowIiBzdWJkaXIvIGZpbGUyLnR4dCAiaXMgaW4gdGhlIGluZGV4IiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoyOmZpbGUyLnR4dCAyPmVycm9yICYmCisJIHRlc3RfZGlkX3lvdV9tZWFuIDowIHN1YmRpci8gZmlsZTIudHh0ICJpcyBpbiB0aGUgaW5kZXgiKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOmRpc2stb25seS50eHQgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInBhdGggLmRpc2stb25seS50eHQuIGV4aXN0cyBvbiBkaXNrLCBidXQgbm90IGluIHRoZSBpbmRleCIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBAe259IHJlZmVyZW5jZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyQHs5OTk5OX0gPm91dHB1dCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImxvZyBmb3IgW14gXSogb25seSBoYXMgWzAtOV1bMC05XSogZW50cmllcyIgZXJyb3IgICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAezk5OTk5fSA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibG9nIGZvciBbXiBdKiBvbmx5IGhhcyBbMC05XVswLTldKiBlbnRyaWVzIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIG5vdCBmb3VuZCcgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDouL25vbmV4aXN0ZW50LnR4dCAyPmVycm9yICYmCisJCXRlc3RfaTE4bmdyZXAgc3ViZGlyL25vbmV4aXN0ZW50LnR4dCBlcnJvcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgcGF0aCBvdXRzaWRlIHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOi4uL2ZpbGUudHh0ID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJvdXRzaWRlIHJlcG9zaXRvcnkiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIHBhdGggd2hlbiBjd2QgaXMgb3V0c2lkZSB3b3JrdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9LmdpdCAtLXdvcmstdHJlZT1zdWJkaXIgcmV2LXBhcnNlIEhFQUQ6Li9maWxlLnR4dCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuLnQgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZSIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnPGNvbW1pdD46ZmlsZSBjb3JyZWN0bHkgZGlhZ25vc2VkIGFmdGVyIGEgcGF0aG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZpbGUudHh0IEhFQUQ6ZmlsZS50eHQgMT5hY3R1YWwgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgISAiZXhpc3RzIG9uIGRpc2siIGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAibm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUiIGVycm9yICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGUudHh0CisJSEVBRDpmaWxlLnR4dAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG90ZG90IGlzIG5vdCBhbiBlbXB0eSBzZXQnICcKKwkoIEg9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmIGVjaG8gJEggJiYgZWNobyBeJEggKSA+ZXhwZWN0ICYmCisKKwlnaXQgcmV2LXBhcnNlIEhFQUQuLiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHJldi1wYXJzZSAuLkhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gLi4gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLi4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJnIGJlZm9yZSBkYXNoZGFzaCBtdXN0IGJlIGEgcmV2aXNpb24gKG1pc3NpbmcpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmb29iYXIgLS0gMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgcmV2aXNpb24iIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmcgYmVmb3JlIGRhc2hkYXNoIG11c3QgYmUgYSByZXZpc2lvbiAoZmlsZSknICcKKwk+Zm9vYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmb29iYXIgLS0gMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgcmV2aXNpb24iIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmcgYmVmb3JlIGRhc2hkYXNoIG11c3QgYmUgYSByZXZpc2lvbiAoYW1iaWd1b3VzKScgJworCT5mb29iYXIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2Zvb2JhciBIRUFEICYmCisJeworCQkjIHdlIGRvIG5vdCB3YW50IHRvIHVzZSByZXYtcGFyc2UgaGVyZSwgYmVjYXVzZQorCQkjIHdlIGFyZSB0ZXN0aW5nIGl0CisJCWNhdCAuZ2l0L3JlZnMvaGVhZHMvZm9vYmFyICYmCisJCXByaW50ZiAiJXNcbiIgLS0KKwl9ID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIGZvb2JhciAtLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgTnRoIHBhcmVudCBpZiBOIGlzIHRvbyBoaWdoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEXjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgTnRoIGFuY2VzdG9yIGlmIE4gaXMgdG9vIGhpZ2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUR+MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzcGVjcyB3aXRoIHdpbGRjYXJkcyBhcmUgbm90IGFtYmlndW91cycgJworCWVjaG8gIiouYyIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgIiouYyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFja3NsYXNoIGRvZXMgbm90IHRyaWdnZXIgd2lsZGNhcmQgcnVsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgImZvb1xcYmFyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlc2NhcGVkIGNoYXIgZG9lcyBub3QgdHJpZ2dlciB3aWxkY2FyZCBydWxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAiZm9vXFwqYmFyIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoIGIvdC90MTUwNy1yZXYtcGFyc2UtdXBzdHJlYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZjMGQ5NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoCkBAIC0wLDAgKzEsMjY5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCA8YnJhbmNoPkB7dXBzdHJlYW19IHN5bnRheCcKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCXRlc3RfY29tbWl0IDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCXRlc3RfY29tbWl0IDIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNsb25lIC4gY2xvbmUgJiYKKwl0ZXN0X2NvbW1pdCAzICYmCisJKGNkIGNsb25lICYmCisJIHRlc3RfY29tbWl0IDQgJiYKKwkgZ2l0IGJyYW5jaCAtLXRyYWNrIG15LXNpZGUgb3JpZ2luL3NpZGUgJiYKKwkgZ2l0IGJyYW5jaCAtLXRyYWNrIGxvY2FsLW1hc3RlciBtYXN0ZXIgJiYKKwkgZ2l0IGJyYW5jaCAtLXRyYWNrIGZ1bkBueSBvcmlnaW4vc2lkZSAmJgorCSBnaXQgYnJhbmNoIC0tdHJhY2sgQGZ1bm55IG9yaWdpbi9zaWRlICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBmdW5ueUAgb3JpZ2luL3NpZGUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgLXQgbWFzdGVyIG1hc3Rlci1vbmx5IC4uICYmCisJIGdpdCBmZXRjaCBtYXN0ZXItb25seSAmJgorCSBnaXQgYnJhbmNoIGJhZC11cHN0cmVhbSAmJgorCSBnaXQgY29uZmlnIGJyYW5jaC5iYWQtdXBzdHJlYW0ucmVtb3RlIG1hc3Rlci1vbmx5ICYmCisJIGdpdCBjb25maWcgYnJhbmNoLmJhZC11cHN0cmVhbS5tZXJnZSByZWZzL2hlYWRzL3NpZGUKKwkpCisnCisKK2NvbW1pdF9zdWJqZWN0ICgpIHsKKwkoY2QgY2xvbmUgJiYKKwkgZ2l0IHNob3cgLXMgLS1wcmV0dHk9dGZvcm1hdDolcyAiJEAiKQorfQorCitlcnJvcl9tZXNzYWdlICgpIHsKKwkoY2QgY2xvbmUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJEAiIDI+Li4vZXJyb3IpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dXBzdHJlYW19IHJlc29sdmVzIHRvIGNvcnJlY3QgZnVsbCBuYW1lJyAnCisJZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAe3Vwc3RyZWFtfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCAtQyBjbG9uZSByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgQHtVUFNUUkVBTX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7VXBTVFJlYW19ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gcmVzb2x2ZXMgdG8gY29ycmVjdCBmdWxsIG5hbWUnICcKKwllY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7dX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7VX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXktc2lkZUB7dXBzdHJlYW19IHJlc29sdmVzIHRvIGNvcnJlY3QgZnVsbCBuYW1lJyAnCisJZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgPmV4cGVjdCAmJgorCWdpdCAtQyBjbG9uZSByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgbXktc2lkZUB7dX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBzdHJlYW0gb2YgYnJhbmNoIHdpdGggQCBpbiBtaWRkbGUnICcKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIGZ1bkBueUB7dX0gPmFjdHVhbCAmJgorCWVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBmdW5AbnlAe1V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vwc3RyZWFtIG9mIGJyYW5jaCB3aXRoIEAgYXQgc3RhcnQnICcKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEBmdW5ueUB7dX0gPmFjdHVhbCAmJgorCWVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vwc3RyZWFtIG9mIGJyYW5jaCB3aXRoIEAgYXQgZW5kJyAnCisJZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBmdW5ueUBAe3V9ID5hY3R1YWwgJiYKKwllY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzL2hlYWRzL215LXNpZGVAe3Vwc3RyZWFtfSBkb2VzIG5vdCByZXNvbHZlIHRvIG15LXNpZGV7dXBzdHJlYW19JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGNsb25lIHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSByZWZzL2hlYWRzL215LXNpZGVAe3Vwc3RyZWFtfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdteS1zaWRlQHt1fSByZXNvbHZlcyB0byBjb3JyZWN0IGNvbW1pdCcgJworCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF9jb21taXQgNSAmJgorCShjZCBjbG9uZSAmJiBnaXQgZmV0Y2gpICYmCisJZWNobyAyID5leHBlY3QgJiYKKwljb21taXRfc3ViamVjdCBteS1zaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyA1ID5leHBlY3QgJiYKKwljb21taXRfc3ViamVjdCBteS1zaWRlQHt1fSA+YWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdC10cmFja2luZ0B7dX0gZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIG5vbi10cmFja2luZ0B7dX0gJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IGNoZWNrb3V0IC0tbm8tdHJhY2sgLWIgbm9uLXRyYWNraW5nKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBjbG9uZSByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgbm9uLXRyYWNraW5nQHt1fQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc8YnJhbmNoPkB7dX1AezF9IHJlc29sdmVzIGNvcnJlY3RseScgJworCXRlc3RfY29tbWl0IDYgJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IGZldGNoKSAmJgorCWVjaG8gNSA+ZXhwZWN0ICYmCisJY29tbWl0X3N1YmplY3QgbXktc2lkZUB7dX1AezF9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJY29tbWl0X3N1YmplY3QgbXktc2lkZUB7VX1AezF9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gd2l0aG91dCBzcGVjaWZ5aW5nIGJyYW5jaCBmYWlscyBvbiBhIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBAe3V9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBAe1V9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIG5ldyBteS1zaWRlQHt1fSBmb3JrcyBmcm9tIHRoZSBzYW1lJyAnCisoCisJY2QgY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3IG15LXNpZGVAe3V9ICYmCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBteS1zaWRlQHt1fSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBuZXdAe3V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG15LXNpZGVAe3V9IHJlY29yZHMgdGhlIGNvcnJlY3QgbmFtZScgJworKAorCWNkIGNsb25lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIG5ldyAmJgorCWdpdCBicmFuY2ggLXQgbmV3IG15LXNpZGVAe3V9ICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgbmV3QHt1fSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCWVjaG8gIk1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJHtTUX1vcmlnaW4vc2lkZSR7U1F9IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgb3RoZXJAe3V9JyAnCisJZ2l0IGNoZWNrb3V0IC10IC1iIG90aGVyIG1hc3RlciAmJgorCWdpdCBicmFuY2ggLWQgQHt1fSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb3RoZXJAe3V9JyAnCisJZ2l0IGJyYW5jaCAtZiBtYXN0ZXIgSEVBRCAmJgorCWdpdCBjaGVja291dCAtdCAtYiBhbm90aGVyIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBAe3V9ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaEB7dX0gd29ya3Mgd2hlbiB0cmFja2luZyBhIGxvY2FsIGJyYW5jaCcgJworCWVjaG8gcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCAtQyBjbG9uZSByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgbG9jYWwtbWFzdGVyQHt1fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IGVycm9yIG1lc3NhZ2Ugd2hlbiBubyB1cHN0cmVhbScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZhdGFsOiBubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJHtTUX1ub24tdHJhY2tpbmcke1NRfQorCUVPRgorCWVycm9yX21lc3NhZ2Ugbm9uLXRyYWNraW5nQHt1fSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHt1fSBlcnJvciBtZXNzYWdlIHdoZW4gbm8gdXBzdHJlYW0nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmYXRhbDogbm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICR7U1F9bWFzdGVyJHtTUX0KKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEB7dX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IGVycm9yIG1lc3NhZ2Ugd2l0aCBtaXNzcGVsdCBicmFuY2gnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmYXRhbDogbm8gc3VjaCBicmFuY2g6ICR7U1F9bm8tc3VjaC1icmFuY2gke1NRfQorCUVPRgorCWVycm9yX21lc3NhZ2Ugbm8tc3VjaC1icmFuY2hAe3V9ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IGVycm9yIG1lc3NhZ2Ugd2hlbiBub3Qgb24gYSBicmFuY2gnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmYXRhbDogSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaAorCUVPRgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEB7dX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IGVycm9yIG1lc3NhZ2UgaWYgdXBzdHJlYW0gYnJhbmNoIG5vdCBmZXRjaGVkJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZmF0YWw6IHVwc3RyZWFtIGJyYW5jaCAke1NRfXJlZnMvaGVhZHMvc2lkZSR7U1F9IG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCisJRU9GCisJZXJyb3JfbWVzc2FnZSBiYWQtdXBzdHJlYW1Ae3V9ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHdvcmtzIHdoZW4gdHJhY2tpbmcgYSBsb2NhbCBicmFuY2gnICcKKygKKwljZCBjbG9uZSAmJgorCWdpdCBjaGVja291dCBsb2NhbC1tYXN0ZXIgJiYKKwlnaXQgcHVsbAorKQorJworCisjIG1ha2VzIHNlbnNlIGlmIHRoZSBwcmV2aW91cyBvbmUgc3VjY2VlZGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IHdvcmtzIHdoZW4gdHJhY2tpbmcgYSBsb2NhbCBicmFuY2gnICcKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7dX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1nIG90aGVyQHt1fScgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJGNvbW1pdAorCVJlZmxvZzogbWFzdGVyQHswfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKKwlSZWZsb2cgbWVzc2FnZTogYnJhbmNoOiBDcmVhdGVkIGZyb20gSEVBRAorCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlEYXRlOiAgIFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisKKwkgICAgMworCUVPRgorCWdpdCBsb2cgLTEgLWcgb3RoZXJAe3V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtZyBvdGhlckB7dX1Ae25vd30nICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICRjb21taXQKKwlSZWZsb2c6IG1hc3RlckB7VGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDB9IChDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+KQorCVJlZmxvZyBtZXNzYWdlOiBicmFuY2g6IENyZWF0ZWQgZnJvbSBIRUFECisJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCURhdGU6ICAgVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKworCSAgICAzCisJRU9GCisJZ2l0IGxvZyAtMSAtZyBvdGhlckB7dX1Ae25vd30gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtyZWZsb2d9LXBhcnNpbmcgZG9lcyBub3QgbG9vayBiZXlvbmQgY29sb24nICcKKwllY2hvIGNvbnRlbnQgPkB7eWVzdGVyZGF5fSAmJgorCWdpdCBhZGQgQHt5ZXN0ZXJkYXl9ICYmCisJZ2l0IGNvbW1pdCAtbSAiZnVubnkgcmVmbG9nIGZpbGUiICYmCisJZ2l0IGhhc2gtb2JqZWN0IEB7eWVzdGVyZGF5fSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOkB7eWVzdGVyZGF5fSA+YWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dXBzdHJlYW19LXBhcnNpbmcgZG9lcyBub3QgbG9vayBiZXlvbmQgY29sb24nICcKKwllY2hvIGNvbnRlbnQgPkB7dXBzdHJlYW19ICYmCisJZ2l0IGFkZCBAe3Vwc3RyZWFtfSAmJgorCWdpdCBjb21taXQgLW0gImZ1bm55IHVwc3RyZWFtIGZpbGUiICYmCisJZ2l0IGhhc2gtb2JqZWN0IEB7dXBzdHJlYW19ID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6QHt1cHN0cmVhbX0gPmFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDgtYXQtY29tYmluYXRpb25zLnNoIGIvdC90MTUwOC1hdC1jb21iaW5hdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGE5OTY0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDgtYXQtY29tYmluYXRpb25zLnNoCkBAIC0wLDAgKzEsMTAyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB2YXJpb3VzIEB7WH0gc3ludGF4IGNvbWJpbmF0aW9ucyB0b2dldGhlcicKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVjaygpIHsKKwl0ZXN0X2V4cGVjdF8kezQ6LXN1Y2Nlc3N9ICIkMSA9ICQzIiAiCisJCWVjaG8gJyQzJyA+ZXhwZWN0ICYmCisJCWlmIHRlc3QgJyQyJyA9ICdjb21taXQnCisJCXRoZW4KKwkJCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgJyQxJyA+YWN0dWFsCisJCWVsaWYgdGVzdCAnJDInID0gJ3JlZicKKwkJdGhlbgorCQkJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSAnJDEnID5hY3R1YWwKKwkJZWxzZQorCQkJZ2l0IGNhdC1maWxlIC1wICckMScgPmFjdHVhbAorCQlmaSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCitub25zZW5zZSgpIHsKKwl0ZXN0X2V4cGVjdF8kezI6LXN1Y2Nlc3N9ICIkMSBpcyBub25zZW5zaWNhbCIgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICckMScKKwkiCit9CisKK2ZhaWwoKSB7CisJIiRAIiBmYWlsdXJlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgbWFzdGVyLW9uZSAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci10d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgdXBzdHJlYW0tYnJhbmNoICYmCisJdGVzdF9jb21taXQgdXBzdHJlYW0tb25lICYmCisJdGVzdF9jb21taXQgdXBzdHJlYW0tdHdvICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1cKKwl0aGVuCisJCWdpdCBjaGVja291dCAtYiBAL2F0LXRlc3QKKwlmaSAmJgorCWdpdCBjaGVja291dCAtYiBAQC9hdC10ZXN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIEBhdC10ZXN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9sZC1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBvbGQtb25lICYmCisJdGVzdF9jb21taXQgb2xkLXR3byAmJgorCWdpdCBjaGVja291dCAtYiBuZXctYnJhbmNoICYmCisJdGVzdF9jb21taXQgbmV3LW9uZSAmJgorCXRlc3RfY29tbWl0IG5ldy10d28gJiYKKwlnaXQgYnJhbmNoIC11IG1hc3RlciBvbGQtYnJhbmNoICYmCisJZ2l0IGJyYW5jaCAtdSB1cHN0cmVhbS1icmFuY2ggbmV3LWJyYW5jaAorJworCitjaGVjayBIRUFEIHJlZiByZWZzL2hlYWRzL25ldy1icmFuY2gKK2NoZWNrICJAezF9IiBjb21taXQgbmV3LW9uZQorY2hlY2sgIkhFQURAezF9IiBjb21taXQgbmV3LW9uZQorY2hlY2sgIkB7bm93fSIgY29tbWl0IG5ldy10d28KK2NoZWNrICJIRUFEQHtub3d9IiBjb21taXQgbmV3LXR3bworY2hlY2sgIkB7LTF9IiByZWYgcmVmcy9oZWFkcy9vbGQtYnJhbmNoCitjaGVjayAiQHstMX1AezB9IiBjb21taXQgb2xkLXR3bworY2hlY2sgIkB7LTF9QHsxfSIgY29tbWl0IG9sZC1vbmUKK2NoZWNrICJAe3V9IiByZWYgcmVmcy9oZWFkcy91cHN0cmVhbS1icmFuY2gKK2NoZWNrICJIRUFEQHt1fSIgcmVmIHJlZnMvaGVhZHMvdXBzdHJlYW0tYnJhbmNoCitjaGVjayAiQHt1fUB7MX0iIGNvbW1pdCB1cHN0cmVhbS1vbmUKK2NoZWNrICJAey0xfUB7dX0iIHJlZiByZWZzL2hlYWRzL21hc3RlcgorY2hlY2sgIkB7LTF9QHt1fUB7MX0iIGNvbW1pdCBtYXN0ZXItb25lCitjaGVjayAiQCIgY29tbWl0IG5ldy10d28KK2NoZWNrICJAQHt1fSIgcmVmIHJlZnMvaGVhZHMvdXBzdHJlYW0tYnJhbmNoCitjaGVjayAiQEAvYXQtdGVzdCIgcmVmIHJlZnMvaGVhZHMvQEAvYXQtdGVzdAordGVzdF9oYXZlX3ByZXJlcSBNSU5HVyB8fAorY2hlY2sgIkAvYXQtdGVzdCIgcmVmIHJlZnMvaGVhZHMvQC9hdC10ZXN0CitjaGVjayAiQGF0LXRlc3QiIHJlZiByZWZzL2hlYWRzL0BhdC10ZXN0Citub25zZW5zZSAiQHt1fUB7LTF9Igorbm9uc2Vuc2UgIkB7MH1AezB9Igorbm9uc2Vuc2UgIkB7MX1Ae3V9Igorbm9uc2Vuc2UgIkhFQURAey0xfSIKK25vbnNlbnNlICJAey0xfUB7LTF9IgorCisjIEB7Tn0gdmVyc3VzIEhFQURAe059CisKK2NoZWNrICJIRUFEQHszfSIgY29tbWl0IG9sZC10d28KK25vbnNlbnNlICJAezN9IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gb2xkLWJyYW5jaCcgJworCWdpdCBjaGVja291dCBvbGQtYnJhbmNoCisnCisKK2NoZWNrIEhFQUQgcmVmIHJlZnMvaGVhZHMvb2xkLWJyYW5jaAorY2hlY2sgIkhFQURAezF9IiBjb21taXQgbmV3LXR3bworY2hlY2sgIkB7MX0iIGNvbW1pdCBvbGQtb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYXRoIHdpdGggQCcgJworCWVjaG8gY29udGVudCA+bm9ybWFsICYmCisJZWNobyBjb250ZW50ID5mdW5AbnkgJiYKKwlnaXQgYWRkIG5vcm1hbCBmdW5AbnkgJiYKKwlnaXQgY29tbWl0IC1tICJmdW5ueSBwYXRoIgorJworCitjaGVjayAiQDpub3JtYWwiIGJsb2IgY29udGVudAorY2hlY2sgIkA6ZnVuQG55IiBibG9iIGNvbnRlbnQKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA5LXJvb3Qtd29yay10cmVlLnNoIGIvdC90MTUwOS1yb290LXdvcmstdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NTNhM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwOS1yb290LXdvcmstdHJlZS5zaApAQCAtMCwwICsxLDI1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgR2l0IHdoZW4gZ2l0IHJlcG9zaXRvcnkgaXMgbG9jYXRlZCBhdCByb290CisKK1RoaXMgdGVzdCByZXF1aXJlcyB3cml0ZSBhY2Nlc3MgaW4gcm9vdC4gRG8gbm90IGJvdGhlciBpZiB5b3UgZG8gbm90CitoYXZlIGEgdGhyb3dhd2F5IGNocm9vdCBvciBWTS4KKworU2NyaXB0IHQxNTA5L3ByZXBhcmUtY2hyb290LnNoIG1heSBoZWxwIHlvdSBzZXR1cCBjaHJvb3QsIHRoZW4geW91CitjYW4gY2hyb290IGluIGFuZCBleGVjdXRlIHRoaXMgdGVzdCBmcm9tIHRoZXJlLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9jbXBfdmFsKCkgeworCWVjaG8gIiQxIiA+IGV4cGVjdGVkCisJZWNobyAiJDIiID4gcmVzdWx0CisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0Cit9CisKK3Rlc3RfdmFycygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMTogZ2l0ZGlyIiAnCisJCXRlc3RfY21wX3ZhbCAiJyIkMiInIiAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDE6IHdvcmt0cmVlIiAnCisJCXRlc3RfY21wX3ZhbCAiJyIkMyInIiAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDE6IHByZWZpeCIgJworCQl0ZXN0X2NtcF92YWwgIiciJDQiJyIgIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KSIKKwknCit9CisKK3Rlc3RfZm9vYmFyX3Jvb3QoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlbGF0aXZlJyAnCisJCXRlc3QgLXogIiQoY2QgLyAmJiBnaXQgbHMtZmlsZXMpIiAmJgorCQlnaXQgYWRkIGZvby9mb29tZSAmJgorCQlnaXQgYWRkIGZvby9iYXIvYmFybWUgJiYKKwkJZ2l0IGFkZCBtZSAmJgorCQkoIGNkIC8gJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKSA+IHJlc3VsdCAmJgorCQl0ZXN0X2NtcCAvbHMuZXhwZWN0ZWQgcmVzdWx0ICYmCisJCXJtICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9pbmRleCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYWJzb2x1dGUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgL2Zvby9mb29tZSAmJgorCQlnaXQgYWRkIC9mb28vYmFyL2Jhcm1lICYmCisJCWdpdCBhZGQgL21lICYmCisJCSggY2QgLyAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZSApID4gcmVzdWx0ICYmCisJCXRlc3RfY21wIC9scy5leHBlY3RlZCByZXN1bHQgJiYKKwkJcm0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2luZGV4IgorCScKKworfQorCit0ZXN0X2Zvb2Jhcl9mb28oKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlbGF0aXZlJyAnCisJCXRlc3QgLXogIiQoY2QgLyAmJiBnaXQgbHMtZmlsZXMpIiAmJgorCQlnaXQgYWRkIGZvb21lICYmCisJCWdpdCBhZGQgYmFyL2Jhcm1lICYmCisJCWdpdCBhZGQgLi4vbWUgJiYKKwkJKCBjZCAvICYmIGdpdCBscy1maWxlcyAtLXN0YWdlICkgPiByZXN1bHQgJiYKKwkJdGVzdF9jbXAgL2xzLmV4cGVjdGVkIHJlc3VsdCAmJgorCQlybSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaW5kZXgiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFic29sdXRlJyAnCisJCXRlc3QgLXogIiQoY2QgLyAmJiBnaXQgbHMtZmlsZXMpIiAmJgorCQlnaXQgYWRkIC9mb28vZm9vbWUgJiYKKwkJZ2l0IGFkZCAvZm9vL2Jhci9iYXJtZSAmJgorCQlnaXQgYWRkIC9tZSAmJgorCQkoIGNkIC8gJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKSA+IHJlc3VsdCAmJgorCQl0ZXN0X2NtcCAvbHMuZXhwZWN0ZWQgcmVzdWx0ICYmCisJCXJtICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9pbmRleCIKKwknCit9CisKK3Rlc3RfZm9vYmFyX2Zvb2JhcigpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVsYXRpdmUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgLi4vZm9vbWUgJiYKKwkJZ2l0IGFkZCBiYXJtZSAmJgorCQlnaXQgYWRkIC4uLy4uL21lICYmCisJCSggY2QgLyAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZSApID4gcmVzdWx0ICYmCisJCXRlc3RfY21wIC9scy5leHBlY3RlZCByZXN1bHQgJiYKKwkJcm0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2luZGV4IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhYnNvbHV0ZScgJworCQl0ZXN0IC16ICIkKGNkIC8gJiYgZ2l0IGxzLWZpbGVzKSIgJiYKKwkJZ2l0IGFkZCAvZm9vL2Zvb21lICYmCisJCWdpdCBhZGQgL2Zvby9iYXIvYmFybWUgJiYKKwkJZ2l0IGFkZCAvbWUgJiYKKwkJKCBjZCAvICYmIGdpdCBscy1maWxlcyAtLXN0YWdlICkgPiByZXN1bHQgJiYKKwkJdGVzdF9jbXAgL2xzLmV4cGVjdGVkIHJlc3VsdCAmJgorCQlybSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaW5kZXgiCisJJworfQorCitpZiAhIHRlc3QgLXcgLwordGhlbgorCXNraXBfYWxsPSJUZXN0IHJlcXVpcmluZyB3cml0YWJsZSAvIHNraXBwZWQuIFJlYWQgdGhpcyB0ZXN0IGlmIHlvdSB3YW50IHRvIHJ1biBpdCIKKwl0ZXN0X2RvbmUKK2ZpCisKK2lmICB0ZXN0IC1lIC9yZWZzIHx8IHRlc3QgLWUgL29iamVjdHMgfHwgdGVzdCAtZSAvaW5mbyB8fCB0ZXN0IC1lIC9ob29rcyB8fAorICAgIHRlc3QgLWUgLy5naXQgfHwgdGVzdCAtZSAvZm9vIHx8IHRlc3QgLWUgL21lCit0aGVuCisJc2tpcF9hbGw9IlNraXAgdGVzdCB0aGF0IGNsb2JiZXJzIGV4aXN0aW5nIGZpbGVzIGluIC8iCisJdGVzdF9kb25lCitmaQorCitpZiBbICIkSUtOT1dXSEFUSUFNRE9JTkciICE9ICJZRVMiIF07IHRoZW4KKwlza2lwX2FsbD0iWW91IG11c3Qgc2V0IGVudiB2YXIgSUtOT1dXSEFUSUFNRE9JTkc9WUVTIGluIG9yZGVyIHRvIHJ1biB0aGlzIHRlc3QiCisJdGVzdF9kb25lCitmaQorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgTk9UX1JPT1QKK3RoZW4KKwlza2lwX2FsbD0iTm8geW91IGNhbid0IHJ1biB0aGlzIGFzIHJvb3QiCisJdGVzdF9kb25lCitmaQorCitPTkVfU0hBMT1kMDA0OTFmZDdlNWJiNmZhMjhjNTE3YTBiYjMyYjhiNTA2NTM5ZDRkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJcm0gLXJmIC9mb28gJiYKKwlta2RpciAvZm9vICYmCisJbWtkaXIgL2Zvby9iYXIgJiYKKwllY2hvIDEgPiAvZm9vL2Zvb21lICYmCisJZWNobyAxID4gL2Zvby9iYXIvYmFybWUgJiYKKwllY2hvIDEgPiAvbWUKKycKKworc2F5ICJHSVRfRElSIGFic29sdXRlLCBHSVRfV09SS19UUkVFIHNldCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gLycgJ2NkIC8nCisKK2NhdCA+bHMuZXhwZWN0ZWQgPDxFT0YKKzEwMDY0NCAkT05FX1NIQTEgMAlmb28vYmFyL2Jhcm1lCisxMDA2NDQgJE9ORV9TSEExIDAJZm9vL2Zvb21lCisxMDA2NDQgJE9ORV9TSEExIDAJbWUKK0VPRgorCitHSVRfRElSPSIkVFJBU0hfRElSRUNUT1JZLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS8gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdhYnMgZ2l0ZGlyLCByb290JyAiJEdJVF9ESVIiICIvIiAiIgordGVzdF9mb29iYXJfcm9vdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvZm9vJyAnY2QgL2ZvbycKKwordGVzdF92YXJzICdhYnMgZ2l0ZGlyLCBmb28nICIkR0lUX0RJUiIgIi8iICJmb28vIgordGVzdF9mb29iYXJfZm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28vYmFyJyAnY2QgL2Zvby9iYXInCisKK3Rlc3RfdmFycyAnYWJzIGdpdGRpciwgZm9vL2JhcicgIiRHSVRfRElSIiAiLyIgImZvby9iYXIvIgordGVzdF9mb29iYXJfZm9vYmFyCisKK3NheSAiR0lUX0RJUiByZWxhdGl2ZSwgR0lUX1dPUktfVFJFRSBzZXQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC8nICdjZCAvJworCitHSVRfRElSPSIkKGVjaG8gJFRSQVNIX0RJUkVDVE9SWXxzZWQgJ3MsXi8sLCcpLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS8gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdyZWwgZ2l0ZGlyLCByb290JyAiJEdJVF9ESVIiICIvIiAiIgordGVzdF9mb29iYXJfcm9vdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvZm9vJyAnY2QgL2ZvbycKKworR0lUX0RJUj0iLi4vJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAmJiBleHBvcnQgR0lUX0RJUgorR0lUX1dPUktfVFJFRT0vICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCisKK3Rlc3RfdmFycyAncmVsIGdpdGRpciwgZm9vJyAiJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAiLyIgImZvby8iCit0ZXN0X2Zvb2Jhcl9mb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2Zvby9iYXInICdjZCAvZm9vL2JhcicKKworR0lUX0RJUj0iLi4vLi4vJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAmJiBleHBvcnQgR0lUX0RJUgorR0lUX1dPUktfVFJFRT0vICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCisKK3Rlc3RfdmFycyAncmVsIGdpdGRpciwgZm9vL2JhcicgIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgIi8iICJmb28vYmFyLyIKK3Rlc3RfZm9vYmFyX2Zvb2JhcgorCitzYXkgIkdJVF9ESVIgcmVsYXRpdmUsIEdJVF9XT1JLX1RSRUUgcmVsYXRpdmUiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC8nICdjZCAvJworCitHSVRfRElSPSIkKGVjaG8gJFRSQVNIX0RJUkVDVE9SWXxzZWQgJ3MsXi8sLCcpLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS4gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdyZWwgZ2l0ZGlyLCByb290JyAiJEdJVF9ESVIiICIvIiAiIgordGVzdF9mb29iYXJfcm9vdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvJyAnY2QgL2ZvbycKKworR0lUX0RJUj0iLi4vJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAmJiBleHBvcnQgR0lUX0RJUgorR0lUX1dPUktfVFJFRT0uLiAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIGZvbycgIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgIi8iICJmb28vIgordGVzdF9mb29iYXJfZm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28vYmFyJyAnY2QgL2Zvby9iYXInCisKK0dJVF9ESVI9Ii4uLy4uLyRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9Li4vLi4gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdyZWwgZ2l0ZGlyLCBmb28vYmFyJyAiJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAiLyIgImZvby9iYXIvIgordGVzdF9mb29iYXJfZm9vYmFyCisKK3NheSAiLmdpdCBhdCByb290IgorCit1bnNldCBHSVRfRElSCit1bnNldCBHSVRfV09SS19UUkVFCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC8nICdjZCAvJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlybSAtcmYgLy5naXQgJiYKKwllY2hvICJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAvLmdpdC8iID4gZXhwZWN0ZWQgJiYKKwlnaXQgaW5pdCA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCByb290JyAiLmdpdCIgIi8iICIiCit0ZXN0X2Zvb2Jhcl9yb290CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28nICdjZCAvZm9vJwordGVzdF92YXJzICdhdXRvIGdpdGRpciwgZm9vJyAiLy5naXQiICIvIiAiZm9vLyIKK3Rlc3RfZm9vYmFyX2ZvbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvZm9vL2JhcicgJ2NkIC9mb28vYmFyJwordGVzdF92YXJzICdhdXRvIGdpdGRpciwgZm9vL2JhcicgIi8uZ2l0IiAiLyIgImZvby9iYXIvIgordGVzdF9mb29iYXJfZm9vYmFyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAnICdybSAtcmYgLy5naXQnCisKK3NheSAiYXV0byBiYXJlIGdpdGRpciIKKworIyBERVNUUk9ZWVlZWSEhISEhCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXJtIC1yZiAvcmVmcyAvb2JqZWN0cyAvaW5mbyAvaG9va3MgJiYKKwlybSAtZiAvZXhwZWN0ZWQgL2xzLmV4cGVjdGVkIC9tZSAvcmVzdWx0ICYmCisJY2QgLyAmJgorCWVjaG8gIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC8iID4gZXhwZWN0ZWQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF92YXJzICdhdXRvIGdpdGRpciwgcm9vdCcgIi4iICIiICIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28nICdjZCAvZm9vJworCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCByb290JyAiLyIgIiIgIiIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA5L2V4Y2x1ZGVzIGIvdC90MTUwOS9leGNsdWRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGQyMWQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwOS9leGNsdWRlcwpAQCAtMCwwICsxLDE0IEBACisqLm8KKyp+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+PiIkVEVTVF9GSUxFIiAmJgorCWdpdCBhZGQgIiRURVNUX0ZJTEUiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIENvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gY3JlYXRlcyBhIG5ldyBvcnBoYW4gYnJhbmNoIGZyb20gSEVBRCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBhbHBoYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAmJgorCXRlc3QgInJlZnMvaGVhZHMvYWxwaGEiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJUaGlyZCBDb21taXQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXiAmJgorCWdpdCBkaWZmLXRyZWUgLS1xdWlldCBtYXN0ZXIgYWxwaGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gY3JlYXRlcyBhIG5ldyBvcnBoYW4gYnJhbmNoIGZyb20gPHN0YXJ0X3BvaW50PicgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYmV0YSBtYXN0ZXJeICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEICYmCisJdGVzdCAicmVmcy9oZWFkcy9iZXRhIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiRm91cnRoIENvbW1pdCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReICYmCisJZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IG1hc3Rlcl4gYmV0YQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBtdXN0IGJlIHJlamVjdGVkIHdpdGggLWInICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ldyAtYiBuZXdlciAmJgorCXRlc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBtdXN0IGJlIHJlamVjdGVkIHdpdGggLXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ldyAtdCBtYXN0ZXIgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gaWdub3JlcyBicmFuY2guYXV0b3NldHVwbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgYWx3YXlzICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGdhbW1hICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5nYW1tYS5tZXJnZSkiICYmCisJdGVzdCByZWZzL2hlYWRzL2dhbW1hID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIG1ha2VzIHJlZmxvZyBieSBkZWZhdWx0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gZGVsdGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGRlbHRhQHswfSAmJgorCWdpdCBjb21taXQgLW0gRGVsdGEgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGRlbHRhQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBkb2VzIG5vdCBtYWtlIHJlZmxvZyB3aGVuIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIGZhbHNlICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGVwc2lsb24gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGVwc2lsb25AezB9ICYmCisJZ2l0IGNvbW1pdCAtbSBFcHNpbG9uICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBlcHNpbG9uQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiB3aXRoIC1sIG1ha2VzIHJlZmxvZyB3aGVuIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtbCAtLW9ycGhhbiB6ZXRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB6ZXRhQHswfSAmJgorCWdpdCBjb21taXQgLW0gWmV0YSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgemV0YUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2aW5nIHVwIC0tb3JwaGFuIG5vdCBjb21taXR0ZWQgd2hlbiAtbCBhbmQgY29yZS5sb2dBbGxSZWZVcGRhdGVzID0gZmFsc2UgZGVsZXRlcyByZWZsb2cnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1sIC0tb3JwaGFuIGV0YSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXRhQHswfSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGV0YUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gaXMgcmVqZWN0ZWQgd2l0aCBhbiBleGlzdGluZyBuYW1lJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLW9ycGhhbiBtYXN0ZXIgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gcmVmdXNlcyB0byBzd2l0Y2ggaWYgYSBtZXJnZSBpcyBuZWVkZWQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gbG9jYWwgPj4iJFRFU1RfRklMRSIgJiYKKwljYXQgIiRURVNUX0ZJTEUiID4iJFRFU1RfRklMRS5zYXZlZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3IG1hc3Rlcl4gJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRklMRSIgIiRURVNUX0ZJTEUuc2F2ZWQiICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgLS1kZXRhY2ggb24gYW4gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tZGV0YWNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxOC1jaGVja291dC1icmFuY2guc2ggYi90L3QyMDE4LWNoZWNrb3V0LWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYmNhN2VmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxOC1jaGVja291dC1icmFuY2guc2gKQEAgLTAsMCArMSwyNDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQXJndW1lbnRzOiBbIV0gPGJyYW5jaD4gPG9pZD4gWzxjaGVja291dCBvcHRpb25zPl0KKyMKKyMgUnVucyAiZ2l0IGNoZWNrb3V0IiB0byBzd2l0Y2ggdG8gPGJyYW5jaD4sIHRlc3RpbmcgdGhhdAorIworIyAgIDEpIHdlIGFyZSBvbiB0aGUgc3BlY2lmaWVkIGJyYW5jaCwgPGJyYW5jaD47CisjICAgMikgSEVBRCBpcyA8b2lkPjsgaWYgPG9pZD4gaXMgbm90IHNwZWNpZmllZCwgdGhlIG9sZCBIRUFEIGlzIHVzZWQuCisjCisjIElmIDxjaGVja291dCBvcHRpb25zPiBpcyBub3Qgc3BlY2lmaWVkLCAiZ2l0IGNoZWNrb3V0IiBpcyBydW4gd2l0aCAtYi4KKyMKKyMgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGAhYCwgImdpdCBjaGVja291dCIgaXMgZXhwZWN0ZWQgdG8gZmFpbCB3aGVuCisjIGl0IGlzIHJ1bi4KK2RvX2NoZWNrb3V0ICgpIHsKKwlzaG91bGRfZmFpbD0gJiYKKwlpZiB0ZXN0ICJ4JDEiID0gInghIgorCXRoZW4KKwkJc2hvdWxkX2ZhaWw9eWVzICYmCisJCXNoaWZ0CisJZmkgJiYKKwlleHBfYnJhbmNoPSQxICYmCisJZXhwX3JlZj0icmVmcy9oZWFkcy8kZXhwX2JyYW5jaCIgJiYKKworCSMgaWYgPG9pZD4gaXMgbm90IHNwZWNpZmllZCwgdXNlIEhFQUQuCisJZXhwX29pZD0kezI6LSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKX0gJiYKKworCSMgZGVmYXVsdCBvcHRpb25zIGZvciBnaXQgY2hlY2tvdXQ6IC1iCisJaWYgdGVzdCAteiAiJDMiCisJdGhlbgorCQlvcHRzPSItYiIKKwllbHNlCisJCW9wdHM9IiQzIgorCWZpCisKKwlpZiB0ZXN0IC1uICIkc2hvdWxkX2ZhaWwiCisJdGhlbgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgJG9wdHMgJGV4cF9icmFuY2ggJGV4cF9vaWQKKwllbHNlCisJCWdpdCBjaGVja291dCAkb3B0cyAkZXhwX2JyYW5jaCAkZXhwX29pZCAmJgorCQllY2hvICIkZXhwX3JlZiIgPnJlZi5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBIRUFEID5yZWYuYWN0dWFsICYmCisJCXRlc3RfY21wIHJlZi5leHBlY3QgcmVmLmFjdHVhbCAmJgorCQllY2hvICIkZXhwX29pZCIgPm9pZC5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5vaWQuYWN0dWFsICYmCisJCXRlc3RfY21wIG9pZC5leHBlY3Qgb2lkLmFjdHVhbAorCWZpCit9CisKK3Rlc3RfZGlydHlfdW5tZXJnZWFibGUgKCkgeworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLWV4aXQtY29kZQorfQorCit0ZXN0X2RpcnR5X3VubWVyZ2VhYmxlX2Rpc2NhcmRzX2NoYW5nZXMgKCkgeworCWdpdCBkaWZmIC0tZXhpdC1jb2RlCit9CisKK3NldHVwX2RpcnR5X3VubWVyZ2VhYmxlICgpIHsKKwllY2hvID4+ZmlsZTEgY2hhbmdlMgorfQorCit0ZXN0X2RpcnR5X21lcmdlYWJsZSAoKSB7CisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCit9CisKK3Rlc3RfZGlydHlfbWVyZ2VhYmxlX2Rpc2NhcmRzX2NoYW5nZXMgKCkgeworCWdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCit9CisKK3NldHVwX2RpcnR5X21lcmdlYWJsZSAoKSB7CisJZWNobyA+ZmlsZTIgZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCBmaWxlMSAmJgorCUhFQUQxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJdGVzdF9jb21taXQgY2hhbmdlMSBmaWxlMSAmJgorCUhFQUQyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJZ2l0IGJyYW5jaCAtbSBicmFuY2gxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGEgbmV3IGJyYW5jaCwgc2V0IHRvIEhFQUQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBicmFuY2gyIiAmJgorCWRvX2NoZWNrb3V0IGJyYW5jaDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYSBtZXJnZSBiYXNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYnJhbmNoMiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBicmFuY2gxLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGEgbmV3IGJyYW5jaCwgc2V0IHRvIGFuIGV4cGxpY2l0IHJlZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGJyYW5jaDIiICYmCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYSBuZXcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBmYWlscycgJworCXNldHVwX2RpcnR5X3VubWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgISBicmFuY2gyICRIRUFEMSAmJgorCXRlc3RfZGlydHlfdW5tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLWIgdG8gYSBuZXcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBkaXNjYXJkcyBjaGFuZ2VzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYnJhbmNoMiIgJiYKKworCSMgc3RpbGwgZGlydHkgYW5kIG9uIGJyYW5jaDEKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAiLWYgLWIiICYmCisJdGVzdF9kaXJ0eV91bm1lcmdlYWJsZV9kaXNjYXJkc19jaGFuZ2VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGEgbmV3IGJyYW5jaCBwcmVzZXJ2ZXMgbWVyZ2VhYmxlIGNoYW5nZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGJyYW5jaDIiICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAmJgorCXRlc3RfZGlydHlfbWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1mIC1iIHRvIGEgbmV3IGJyYW5jaCB3aXRoIG1lcmdlYWJsZSBjaGFuZ2VzIGRpc2NhcmRzIGNoYW5nZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJc2V0dXBfZGlydHlfbWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEgIi1mIC1iIiAmJgorCXRlc3RfZGlydHlfbWVyZ2VhYmxlX2Rpc2NhcmRzX2NoYW5nZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIGZhaWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWRvX2NoZWNrb3V0ICEgYnJhbmNoMiAkSEVBRDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gQHstMX0gZmFpbHMgd2l0aCB0aGUgcmlnaHQgYnJhbmNoIG5hbWUnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZWNobyAgPmV4cGVjdCAiZmF0YWw6IEEgYnJhbmNoIG5hbWVkICdcJydicmFuY2gxJ1wnJyBhbHJlYWR5IGV4aXN0cy4iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1iIEB7LTF9IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHJlc2V0cyBicmFuY2ggdG8gSEVBRCcgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlkb19jaGVja291dCBicmFuY2gyICIiIC1CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIGEgbWVyZ2UgYmFzZScgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlnaXQgY2hlY2tvdXQgLUIgYnJhbmNoMiBicmFuY2gxLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIGFuIGV4aXN0aW5nIGJyYW5jaCBmcm9tIGRldGFjaGVkIEhFQUQgcmVzZXRzIGJyYW5jaCB0byBIRUFEJyAnCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgIiRoZWFkIiAmJgorCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAiIiAtQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtQiB0byBhbiBleGlzdGluZyBicmFuY2ggd2l0aCBhbiBleHBsaWNpdCByZWYgcmVzZXRzIGJyYW5jaCB0byB0aGF0IHJlZicgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAtQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtQiB0byBhbiBleGlzdGluZyBicmFuY2ggd2l0aCB1bm1lcmdlYWJsZSBjaGFuZ2VzIGZhaWxzJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCXNldHVwX2RpcnR5X3VubWVyZ2VhYmxlICYmCisJZG9fY2hlY2tvdXQgISBicmFuY2gyICRIRUFEMSAtQiAmJgorCXRlc3RfZGlydHlfdW5tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBkaXNjYXJkcyBjaGFuZ2VzJyAnCisJIyBzdGlsbCBkaXJ0eSBhbmQgb24gYnJhbmNoMQorCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxICItZiAtQiIgJiYKKwl0ZXN0X2RpcnR5X3VubWVyZ2VhYmxlX2Rpc2NhcmRzX2NoYW5nZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHByZXNlcnZlcyBtZXJnZWFibGUgY2hhbmdlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCXNldHVwX2RpcnR5X21lcmdlYWJsZSAmJgorCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxIC1CICYmCisJdGVzdF9kaXJ0eV9tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHdpdGggbWVyZ2VhYmxlIGNoYW5nZXMgZGlzY2FyZHMgY2hhbmdlcycgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAiLWYgLUIiICYmCisJdGVzdF9kaXJ0eV9tZXJnZWFibGVfZGlzY2FyZHNfY2hhbmdlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiA8ZGVzY3JpYmU+JyAnCisJZ2l0IHRhZyAtZiAtbSAiRmlyc3QgY29tbWl0IiBpbml0aWFsIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWYgY2hhbmdlMSAmJgorCW5hbWU9JChnaXQgZGVzY3JpYmUpICYmCisJZ2l0IGNoZWNrb3V0IC1iICRuYW1lICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgY2hhbmdlMSAmJgorCWVjaG8gInJlZnMvaGVhZHMvJG5hbWUiID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwlnaXQgY2hlY2tvdXQgLUIgYnJhbmNoMS1zY3JhdGNoICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlnaXQgY2hlY2tvdXQgLUIgYnJhbmNoMS1zY3JhdGNoIGluaXRpYWwgJiYKKwl0ZXN0X2RpcnR5X21lcmdlYWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBhZnRlciBjbG9uZSAtLW5vLWNoZWNrb3V0IGRvZXMgYSBjaGVja291dCBvZiBIRUFEJyAnCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIGEgJiYKKwlyZXY9IiQoZ2l0IC1DIHNyYyByZXYtcGFyc2UgSEVBRCkiICYmCisJZ2l0IGNsb25lIC0tbm8tY2hlY2tvdXQgc3JjIGRlc3QgJiYKKwlnaXQgLUMgZGVzdCBjaGVja291dCAiJHJldiIgLWIgYnJhbmNoICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGVzdC9hLnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE5LWNoZWNrb3V0LWFtYmlndW91cy1yZWYuc2ggYi90L3QyMDE5LWNoZWNrb3V0LWFtYmlndW91cy1yZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjk5ZDUxOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTktY2hlY2tvdXQtYW1iaWd1b3VzLXJlZi5zaApAQCAtMCwwICsxLDU5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgaGFuZGxpbmcgb2YgYW1iaWd1b3VzIChicmFuY2gvdGFnKSByZWZzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFtYmlndW91cyByZWZzJyAnCisJdGVzdF9jb21taXQgYnJhbmNoIGZpbGUgJiYKKwlnaXQgYnJhbmNoIGFtYmlndWl0eSAmJgorCWdpdCBicmFuY2ggdmFndWVuZXNzICYmCisJdGVzdF9jb21taXQgdGFnIGZpbGUgJiYKKwlnaXQgdGFnIGFtYmlndWl0eSAmJgorCWdpdCB0YWcgdmFndWVuZXNzIEhFQUQ6ZmlsZSAmJgorCXRlc3RfY29tbWl0IG90aGVyIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYW1iaWd1b3VzIHJlZiBzdWNjZWVkcycgJworCWdpdCBjaGVja291dCBhbWJpZ3VpdHkgPnN0ZG91dCAyPnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBwcm9kdWNlcyBhbWJpZ3VpdHkgd2FybmluZycgJworCWdyZXAgIndhcm5pbmcuKmFtYmlndW91cyIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGNob29zZXMgYnJhbmNoIG92ZXIgdGFnJyAnCisJZWNobyByZWZzL2hlYWRzL2FtYmlndWl0eSA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHJlcG9ydHMgc3dpdGNoIHRvIGJyYW5jaCcgJworCXRlc3RfaTE4bmdyZXAgIlN3aXRjaGVkIHRvIGJyYW5jaCIgc3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJeSEVBRCBpcyBub3cgYXQiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB2YWd1ZSByZWYgc3VjY2VlZHMnICcKKwlnaXQgY2hlY2tvdXQgdmFndWVuZXNzID5zdGRvdXQgMj5zdGRlcnIgJiYKKwl0ZXN0X3NldF9wcmVyZXEgVkFHVUVORVNTX1NVQ0NFU1MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBWQUdVRU5FU1NfU1VDQ0VTUyAnY2hlY2tvdXQgcHJvZHVjZXMgYW1iaWd1aXR5IHdhcm5pbmcnICcKKwlncmVwICJ3YXJuaW5nLiphbWJpZ3VvdXMiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFZBR1VFTkVTU19TVUNDRVNTICdjaGVja291dCBjaG9vc2VzIGJyYW5jaCBvdmVyIHRhZycgJworCWVjaG8gcmVmcy9oZWFkcy92YWd1ZW5lc3MgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFZBR1VFTkVTU19TVUNDRVNTICdjaGVja291dCByZXBvcnRzIHN3aXRjaCB0byBicmFuY2gnICcKKwl0ZXN0X2kxOG5ncmVwICJTd2l0Y2hlZCB0byBicmFuY2giIHN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiXkhFQUQgaXMgbm93IGF0IiBzdGRlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDIwLWNoZWNrb3V0LWRldGFjaC5zaCBiL3QvdDIwMjAtY2hlY2tvdXQtZGV0YWNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3NDhkYjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDIwLWNoZWNrb3V0LWRldGFjaC5zaApAQCAtMCwwICsxLDMzMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IGludG8gZGV0YWNoZWQgSEVBRCBzdGF0ZScKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19kZXRhY2hlZCAoKSB7CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEID4vZGV2L251bGwKK30KKworY2hlY2tfbm90X2RldGFjaGVkICgpIHsKKwlnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQgPi9kZXYvbnVsbAorfQorCitQUkVWX0hFQURfREVTQz0nUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMnCitjaGVja19vcnBoYW5fd2FybmluZygpIHsKKwl0ZXN0X2kxOG5ncmVwICJ5b3UgYXJlIGxlYXZpbmcgJDIgYmVoaW5kIiAiJDEiICYmCisJdGVzdF9pMThuZ3JlcCAhICIkUFJFVl9IRUFEX0RFU0MiICIkMSIKK30KK2NoZWNrX25vX29ycGhhbl93YXJuaW5nKCkgeworCXRlc3RfaTE4bmdyZXAgISAieW91IGFyZSBsZWF2aW5nIC4qIGNvbW1pdC4qYmVoaW5kIiAiJDEiICYmCisJdGVzdF9pMThuZ3JlcCAiJFBSRVZfSEVBRF9ERVNDIiAiJDEiCit9CisKK3Jlc2V0ICgpIHsKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJY2hlY2tfbm90X2RldGFjaGVkCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYgZ2l0IHRhZyAtZCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYgZ2l0IHRhZyAtZCBmb3VyICYmCisJZ2l0IGJyYW5jaCBicmFuY2ggJiYKKwlnaXQgdGFnIHRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBicmFuY2ggZG9lcyBub3QgZGV0YWNoJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgYnJhbmNoICYmCisJY2hlY2tfbm90X2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRhZyBkZXRhY2hlcycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IHRhZyAmJgorCWNoZWNrX2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGJyYW5jaCBieSBmdWxsIG5hbWUgZGV0YWNoZXMnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCByZWZzL2hlYWRzL2JyYW5jaCAmJgorCWNoZWNrX2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG5vbi1yZWYgZGV0YWNoZXMnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCBicmFuY2heICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgcmVmXjAgZGV0YWNoZXMnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCBicmFuY2heMCAmJgorCWNoZWNrX2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tZGV0YWNoIGRldGFjaGVzJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggYnJhbmNoICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2ggd2l0aG91dCBicmFuY2ggbmFtZScgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2ggZXJyb3JzIG91dCBmb3Igbm9uLWNvbW1pdCcgJworCXJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIG9uZV57dHJlZX0gJiYKKwljaGVja19ub3RfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2ggZXJyb3JzIG91dCBmb3IgZXh0cmEgYXJndW1lbnQnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1kZXRhY2ggdGFnIG9uZS50ICYmCisJY2hlY2tfbm90X2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tZGV0YWNoZWQgYW5kIC1iIGFyZSBpbmNvbXBhdGlibGUnICcKKwlyZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLWRldGFjaCAtYiBuZXdicmFuY2ggdGFnICYmCisJY2hlY2tfbm90X2RldGFjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tZGV0YWNoIG1vdmVzIEhFQUQnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggdHdvICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3YXJucyBvbiBvcnBoYW4gY29tbWl0cycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIHR3byAmJgorCWVjaG8gY29udGVudCA+b3JwaGFuICYmCisJZ2l0IGFkZCBvcnBoYW4gJiYKKwlnaXQgY29tbWl0IC1hIC1tIG9ycGhhbjEgJiYKKwllY2hvIG5ldyBjb250ZW50ID5vcnBoYW4gJiYKKwlnaXQgY29tbWl0IC1hIC1tIG9ycGhhbjIgJiYKKwlvcnBoYW4yPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgMj5zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2FybnMgb24gb3JwaGFuIGNvbW1pdHM6IG91dHB1dCcgJworCWNoZWNrX29ycGhhbl93YXJuaW5nIHN0ZGVyciAiMiBjb21taXRzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3YXJucyBvcnBoYW5pbmcgMSBvZiAyIGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgIiRvcnBoYW4yIiAmJgorCWdpdCBjaGVja291dCBIRUFEXiAyPnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3YXJucyBvcnBoYW5pbmcgMSBvZiAyIGNvbW1pdHM6IG91dHB1dCcgJworCWNoZWNrX29ycGhhbl93YXJuaW5nIHN0ZGVyciAiMSBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IHdhcm4gbGVhdmluZyByZWYgdGlwJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggdHdvICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAyPnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBkb2VzIG5vdCB3YXJuIGxlYXZpbmcgcmVmIHRpcCcgJworCWNoZWNrX25vX29ycGhhbl93YXJuaW5nIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBkb2VzIG5vdCB3YXJuIGxlYXZpbmcgcmVhY2hhYmxlIGNvbW1pdCcgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIEhFQUReICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAyPnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBkb2VzIG5vdCB3YXJuIGxlYXZpbmcgcmVhY2hhYmxlIGNvbW1pdCcgJworCWNoZWNrX25vX29ycGhhbl93YXJuaW5nIHN0ZGVycgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJ21hc3RlcicgYnkgMSBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuCisgICh1c2UgImdpdCBwdWxsIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWNraW5nIGNvdW50IGlzIGFjY3VyYXRlIGFmdGVyIG9ycGhhbiBjaGVjaycgJworCXJlc2V0ICYmCisJZ2l0IGJyYW5jaCBjaGlsZCBtYXN0ZXJeICYmCisJZ2l0IGNvbmZpZyBicmFuY2guY2hpbGQucmVtb3RlIC4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5jaGlsZC5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBjaGVja291dCBjaGlsZF4gJiYKKwlnaXQgY2hlY2tvdXQgY2hpbGQgPnN0ZG91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGFkdmljZSBnaXZlbiBmb3IgZXhwbGljaXQgZGV0YWNoZWQgaGVhZCBzdGF0ZScgJworCSMgYmFzZWxpbmUKKwl0ZXN0X2NvbmZpZyBhZHZpY2UuZGV0YWNoZWRIZWFkIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgY2hpbGQgJiYgZ2l0IGNoZWNrb3V0IEhFQUReMCA+ZXhwZWN0LmFkdmljZSAyPiYxICYmCisJdGVzdF9jb25maWcgYWR2aWNlLmRldGFjaGVkSGVhZCBmYWxzZSAmJgorCWdpdCBjaGVja291dCBjaGlsZCAmJiBnaXQgY2hlY2tvdXQgSEVBRF4wID5leHBlY3Qubm8tYWR2aWNlIDI+JjEgJiYKKwl0ZXN0X3VuY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgJiYKKwkjIHdpdGhvdXQgY29uZmlndXJhdGlvbiwgdGhlIGFkdmljZS4qIHZhcmlhYmxlcyBkZWZhdWx0IHRvIHRydWUKKwlnaXQgY2hlY2tvdXQgY2hpbGQgJiYgZ2l0IGNoZWNrb3V0IEhFQUReMCA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYWR2aWNlIGFjdHVhbCAmJgorCisJIyB3aXRoIGV4cGxpY2l0IC0tZGV0YWNoCisJIyBubyBjb25maWd1cmF0aW9uCisJdGVzdF91bmNvbmZpZyBhZHZpY2UuZGV0YWNoZWRIZWFkICYmCisJZ2l0IGNoZWNrb3V0IGNoaWxkICYmIGdpdCBjaGVja291dCAtLWRldGFjaCBIRUFEXjAgPmFjdHVhbCAyPiYxICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5vLWFkdmljZSBhY3R1YWwgJiYKKworCSMgZXhwbGljaXRseSBkZWNsaW5lIGFkdmljZQorCXRlc3RfY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgZmFsc2UgJiYKKwlnaXQgY2hlY2tvdXQgY2hpbGQgJiYgZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIEhFQUReMCA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm8tYWR2aWNlIGFjdHVhbAorJworCisjIERldGFjaGVkIEhFQUQgdGVzdHMgZm9yIEdJVF9QUklOVF9TSEExX0VMTElQU0lTIChuZXcgZm9ybWF0KQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmVfZGV0YWNoZWRfaGVhZCBwcmludHMgbm8gU0hBLTEgZWxsaXBzaXMgd2hlbiBub3QgYXNrZWQgdG8nICIKKworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMiBtYXN0ZXJeKSAmJgorCWNvbW1pdDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MTIgbWFzdGVyfjIpICYmCisJY29tbWl0Mz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMiBtYXN0ZXJ+MykgJiYKKworCSMgVGhlIGZpcnN0IGRldGFjaCBvcGVyYXRpb24gaXMgbW9yZSBjaGF0dHkgdGhhbiB0aGUgZm9sbG93aW5nIG9uZXMuCisJY2F0ID4xc3RfZGV0YWNoIDw8LUVPRiAmJgorCU5vdGU6IHN3aXRjaGluZyB0byAnSEVBRF4nLgorCisJWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsCisJY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0sIGFuZCB5b3UgY2FuIGRpc2NhcmQgYW55IGNvbW1pdHMgeW91IG1ha2UgaW4gdGhpcworCXN0YXRlIHdpdGhvdXQgaW1wYWN0aW5nIGFueSBicmFuY2hlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhIGJyYW5jaC4KKworCUlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggdG8gcmV0YWluIGNvbW1pdHMgeW91IGNyZWF0ZSwgeW91IG1heQorCWRvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1jIHdpdGggdGhlIHN3aXRjaCBjb21tYW5kLiBFeGFtcGxlOgorCisJICBnaXQgc3dpdGNoIC1jIDxuZXctYnJhbmNoLW5hbWU+CisKKwlPciB1bmRvIHRoaXMgb3BlcmF0aW9uIHdpdGg6CisKKwkgIGdpdCBzd2l0Y2ggLQorCisJVHVybiBvZmYgdGhpcyBhZHZpY2UgYnkgc2V0dGluZyBjb25maWcgdmFyaWFibGUgYWR2aWNlLmRldGFjaGVkSGVhZCB0byBmYWxzZQorCisJSEVBRCBpcyBub3cgYXQgXCRjb21taXQgdGhyZWUKKwlFT0YKKworCSMgVGhlIHJlbWFpbmluZyBvbmVzIGp1c3Qgc2hvdyBpbmZvIGFib3V0IHByZXZpb3VzIGFuZCBjdXJyZW50IEhFQURzLgorCWNhdCA+Mm5kX2RldGFjaCA8PC1FT0YgJiYKKwlQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyBcJGNvbW1pdCB0aHJlZQorCUhFQUQgaXMgbm93IGF0IFwkY29tbWl0MiB0d28KKwlFT0YKKworCWNhdCA+M3JkX2RldGFjaCA8PC1FT0YgJiYKKwlQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyBcJGNvbW1pdDIgdHdvCisJSEVBRCBpcyBub3cgYXQgXCRjb21taXQzIG9uZQorCUVPRgorCisJcmVzZXQgJiYKKwljaGVja19ub3RfZGV0YWNoZWQgJiYKKworCSMgVmFyaW91cyB3YXlzIG9mICpub3QqIGFza2luZyBmb3IgZWxsaXBzZXMKKworCXNhbmVfdW5zZXQgR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVMgJiYKKwlnaXQgLWMgJ2NvcmUuYWJicmV2PTEyJyBjaGVja291dCBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwljaGVja19kZXRhY2hlZCAmJgorCXRlc3RfaTE4bmNtcCAxc3RfZGV0YWNoIGFjdHVhbCAmJgorCisJR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVM9Im5vIiBnaXQgLWMgJ2NvcmUuYWJicmV2PTEyJyBjaGVja291dCBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwljaGVja19kZXRhY2hlZCAmJgorCXRlc3RfaTE4bmNtcCAybmRfZGV0YWNoIGFjdHVhbCAmJgorCisJR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVM9IGdpdCAtYyAnY29yZS5hYmJyZXY9MTInIGNoZWNrb3V0IEhFQUReID5hY3R1YWwgMj4mMSAmJgorCWNoZWNrX2RldGFjaGVkICYmCisJdGVzdF9pMThuY21wIDNyZF9kZXRhY2ggYWN0dWFsICYmCisKKwlzYW5lX3Vuc2V0IEdJVF9QUklOVF9TSEExX0VMTElQU0lTICYmCisKKwkjIFdlIG9ubHkgaGF2ZSBmb3VyIGNvbW1pdHMsIGJ1dCB3ZSBjYW4gcmUtdXNlIHRoZW0KKwlyZXNldCAmJgorCWNoZWNrX25vdF9kZXRhY2hlZCAmJgorCisJIyBNYWtlIG5vIG1lbnRpb24gb2YgdGhlIGVudiB2YXIgYXQgYWxsCisJZ2l0IC1jICdjb3JlLmFiYnJldj0xMicgY2hlY2tvdXQgSEVBRF4gPmFjdHVhbCAyPiYxICYmCisJY2hlY2tfZGV0YWNoZWQgJiYKKwl0ZXN0X2kxOG5jbXAgMXN0X2RldGFjaCBhY3R1YWwgJiYKKworCUdJVF9QUklOVF9TSEExX0VMTElQU0lTPSdub3BlJyAmJgorCWdpdCAtYyAnY29yZS5hYmJyZXY9MTInIGNoZWNrb3V0IEhFQUReID5hY3R1YWwgMj4mMSAmJgorCWNoZWNrX2RldGFjaGVkICYmCisJdGVzdF9pMThuY21wIDJuZF9kZXRhY2ggYWN0dWFsICYmCisKKwlHSVRfUFJJTlRfU0hBMV9FTExJUFNJUz1uZWluICYmCisJZ2l0IC1jICdjb3JlLmFiYnJldj0xMicgY2hlY2tvdXQgSEVBRF4gPmFjdHVhbCAyPiYxICYmCisJY2hlY2tfZGV0YWNoZWQgJiYKKwl0ZXN0X2kxOG5jbXAgM3JkX2RldGFjaCBhY3R1YWwgJiYKKworCXRydWUKKyIKKworIyBEZXRhY2hlZCBIRUFEIHRlc3RzIGZvciBHSVRfUFJJTlRfU0hBMV9FTExJUFNJUyAob2xkIGZvcm1hdCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlX2RldGFjaGVkX2hlYWQgZG9lcyBwcmludCBTSEEtMSBlbGxpcHNpcyB3aGVuIGFza2VkIHRvJyAiCisKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MTIgbWFzdGVyXikgJiYKKwljb21taXQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTEyIG1hc3Rlcn4yKSAmJgorCWNvbW1pdDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MTIgbWFzdGVyfjMpICYmCisKKwkjIFRoZSBmaXJzdCBkZXRhY2ggb3BlcmF0aW9uIGlzIG1vcmUgY2hhdHR5IHRoYW4gdGhlIGZvbGxvd2luZyBvbmVzLgorCWNhdCA+MXN0X2RldGFjaCA8PC1FT0YgJiYKKwlOb3RlOiBzd2l0Y2hpbmcgdG8gJ0hFQUReJy4KKworCVlvdSBhcmUgaW4gJ2RldGFjaGVkIEhFQUQnIHN0YXRlLiBZb3UgY2FuIGxvb2sgYXJvdW5kLCBtYWtlIGV4cGVyaW1lbnRhbAorCWNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXMKKwlzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgc3dpdGNoaW5nIGJhY2sgdG8gYSBicmFuY2guCisKKwlJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXkKKwlkbyBzbyAobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYyB3aXRoIHRoZSBzd2l0Y2ggY29tbWFuZC4gRXhhbXBsZToKKworCSAgZ2l0IHN3aXRjaCAtYyA8bmV3LWJyYW5jaC1uYW1lPgorCisJT3IgdW5kbyB0aGlzIG9wZXJhdGlvbiB3aXRoOgorCisJICBnaXQgc3dpdGNoIC0KKworCVR1cm4gb2ZmIHRoaXMgYWR2aWNlIGJ5IHNldHRpbmcgY29uZmlnIHZhcmlhYmxlIGFkdmljZS5kZXRhY2hlZEhlYWQgdG8gZmFsc2UKKworCUhFQUQgaXMgbm93IGF0IFwkY29tbWl0Li4uIHRocmVlCisJRU9GCisKKwkjIFRoZSByZW1haW5pbmcgb25lcyBqdXN0IHNob3cgaW5mbyBhYm91dCBwcmV2aW91cyBhbmQgY3VycmVudCBIRUFEcy4KKwljYXQgPjJuZF9kZXRhY2ggPDwtRU9GICYmCisJUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMgXCRjb21taXQuLi4gdGhyZWUKKwlIRUFEIGlzIG5vdyBhdCBcJGNvbW1pdDIuLi4gdHdvCisJRU9GCisKKwljYXQgPjNyZF9kZXRhY2ggPDwtRU9GICYmCisJUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMgXCRjb21taXQyLi4uIHR3bworCUhFQUQgaXMgbm93IGF0IFwkY29tbWl0My4uLiBvbmUKKwlFT0YKKworCXJlc2V0ICYmCisJY2hlY2tfbm90X2RldGFjaGVkICYmCisKKwkjIFZhcmlvdXMgd2F5cyBvZiBhc2tpbmcgZm9yIGVsbGlwc2VzLi4uCisJIyBUaGUgdXNlciBjYW4ganVzdCB1c2UgYW55IGtpbmQgb2YgcXVvdGluZyAoaW5jbHVkaW5nIG5vbmUpLgorCisJR0lUX1BSSU5UX1NIQTFfRUxMSVBTSVM9eWVzIGdpdCAtYyAnY29yZS5hYmJyZXY9MTInIGNoZWNrb3V0IEhFQUReID5hY3R1YWwgMj4mMSAmJgorCWNoZWNrX2RldGFjaGVkICYmCisJdGVzdF9pMThuY21wIDFzdF9kZXRhY2ggYWN0dWFsICYmCisKKwlHSVRfUFJJTlRfU0hBMV9FTExJUFNJUz1ZZXMgZ2l0IC1jICdjb3JlLmFiYnJldj0xMicgY2hlY2tvdXQgSEVBRF4gPmFjdHVhbCAyPiYxICYmCisJY2hlY2tfZGV0YWNoZWQgJiYKKwl0ZXN0X2kxOG5jbXAgMm5kX2RldGFjaCBhY3R1YWwgJiYKKworCUdJVF9QUklOVF9TSEExX0VMTElQU0lTPVlFUyBnaXQgLWMgJ2NvcmUuYWJicmV2PTEyJyBjaGVja291dCBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwljaGVja19kZXRhY2hlZCAmJgorCXRlc3RfaTE4bmNtcCAzcmRfZGV0YWNoIGFjdHVhbCAmJgorCisJdHJ1ZQorIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjEtY2hlY2tvdXQtb3ZlcndyaXRlLnNoIGIvdC90MjAyMS1jaGVja291dC1vdmVyd3JpdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzJhZGE3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMjEtY2hlY2tvdXQtb3ZlcndyaXRlLnNoCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBtdXN0IG5vdCBvdmVyd3JpdGUgYW4gdW50cmFja2VkIG9iamVjdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIC1wIGEvYi9jICYmCisJPmEvYi9jL2QgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHRhZyBzdGFydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYSBjb21taXQgd2hlcmUgZGlyIGEvYiBjaGFuZ2VkIHRvIGZpbGUnICcKKworCWdpdCBjaGVja291dCAtYiBmaWxlICYmCisJcm0gLXJmIGEvYiAmJgorCT5hL2IgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiZGlyIHRvIGZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGNvbW1pdCB3aXRoIGRpciBtdXN0IG5vdCByZW1vdmUgdW50cmFja2VkIGEvYicgJworCisJZ2l0IHJtIC0tY2FjaGVkIGEvYiAmJgorCWdpdCBjb21taXQgLW0gInVuLXRyYWNrIHRoZSBmaWxlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBzdGFydCAmJgorCXRlc3QgLWYgYS9iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhIGNvbW1pdCB3aGVyZSBkaXIgYS9iIGNoYW5nZWQgdG8gc3ltbGluaycgJworCisJcm0gLXJmIGEvYiAmJgkjIGNsZWFudXAgaWYgcHJldmlvdXMgdGVzdCBmYWlsZWQKKwlnaXQgY2hlY2tvdXQgLWYgLWIgc3ltbGluayBzdGFydCAmJgorCXJtIC1yZiBhL2IgJiYKKwlnaXQgYWRkIC1BICYmCisJdGVzdF9sbl9zX2FkZCBmb28gYS9iICYmCisJZ2l0IGNvbW1pdCAtbSAiZGlyIHRvIHN5bWxpbmsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGNvbW1pdCB3aXRoIGRpciBtdXN0IG5vdCByZW1vdmUgdW50cmFja2VkIGEvYicgJworCisJZ2l0IHJtIC0tY2FjaGVkIGEvYiAmJgorCWdpdCBjb21taXQgLW0gInVuLXRyYWNrIHRoZSBzeW1saW5rIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBzdGFydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd0aGUgc3ltbGluayByZW1haW5lZCcgJworCisJdGVzdCAtaCBhL2IKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDIyLWNoZWNrb3V0LXBhdGhzLnNoIGIvdC90MjAyMi1jaGVja291dC1wYXRocy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ODQ0YWZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyMi1jaGVja291dC1wYXRocy5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgJHRyZWUgLS0gJHBhdGhzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGRpciAmJgorCT5kaXIvbWFzdGVyICYmCisJZWNobyBjb21tb24gPmRpci9jb21tb24gJiYKKwlnaXQgYWRkIGRpci9tYXN0ZXIgZGlyL2NvbW1vbiAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJtYXN0ZXIgaGFzIGRpci9tYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5leHQgJiYKKwlnaXQgbXYgZGlyL21hc3RlciBkaXIvbmV4dDAgJiYKKwllY2hvIG5leHQgPmRpci9uZXh0MSAmJgorCWdpdCBhZGQgZGlyICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIm5leHQgaGFzIGRpci9uZXh0IGJ1dCBub3QgZGlyL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgb3V0IHBhdGhzIG91dCBvZiBhIHRyZWUgZG9lcyBub3QgY2xvYmJlciB1bnJlbGF0ZWQgcGF0aHMnICcKKwlnaXQgY2hlY2tvdXQgbmV4dCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSBkaXIvbmV4dDAgJiYKKwljYXQgZGlyL2NvbW1vbiA+ZXhwZWN0LmNvbW1vbiAmJgorCWVjaG8gbW9kaWZpZWQgPmV4cGVjdC5uZXh0MSAmJgorCWNhdCBleHBlY3QubmV4dDEgPmRpci9uZXh0MSAmJgorCWVjaG8gdW50cmFja2VkID5leHBlY3QubmV4dDIgJiYKKwljYXQgZXhwZWN0Lm5leHQyID5kaXIvbmV4dDIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgZGlyICYmCisKKwl0ZXN0X2NtcCBleHBlY3QuY29tbW9uIGRpci9jb21tb24gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIvbWFzdGVyICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyIGRpci9tYXN0ZXIgJiYKKworCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpci9uZXh0MCAmJgorCXRlc3RfY21wIGV4cGVjdC5uZXh0MSBkaXIvbmV4dDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIvbmV4dDIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGRpci9uZXh0MiAmJgorCXRlc3RfY21wIGV4cGVjdC5uZXh0MiBkaXIvbmV4dDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHRvdWNoIHVubWVyZ2VkIGVudHJpZXMgbWF0Y2hpbmcgJHBhdGggYnV0IG5vdCBpbiAkdHJlZScgJworCWdpdCBjaGVja291dCBuZXh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJY2F0IGRpci9jb21tb24gPmV4cGVjdC5jb21tb24gJiYKKwlFTVBUWV9TSEExPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPC9kZXYvbnVsbCkgJiYKKwlnaXQgcm0gZGlyL25leHQwICYmCisJY2F0ID5leHBlY3QubmV4dDAgPDwtRU9GICYmCisJMTAwNjQ0ICRFTVBUWV9TSEExIDEJZGlyL25leHQwCisJMTAwNjQ0ICRFTVBUWV9TSEExIDIJZGlyL25leHQwCisJRU9GCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGV4cGVjdC5uZXh0MCAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciBkaXIgJiYKKworCXRlc3RfY21wIGV4cGVjdC5jb21tb24gZGlyL2NvbW1vbiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpci9tYXN0ZXIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIgZGlyL21hc3RlciAmJgorCWdpdCBscy1maWxlcyAtcyBkaXIvbmV4dDAgPmFjdHVhbC5uZXh0MCAmJgorCXRlc3RfY21wIGV4cGVjdC5uZXh0MCBhY3R1YWwubmV4dDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHRvdWNoIGZpbGVzIHRoYXQgYXJlIGFscmVhZHkgdXAtdG8tZGF0ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIG9uZSA+ZmlsZTEgJiYKKwllY2hvIHR3byA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZWNobyBtb2RpZmllZCA+ZmlsZTEgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9MTAwMDAwMDAwMCBmaWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gZmlsZTEgZmlsZTIgJiYKKwllY2hvIG9uZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUxICYmCisJZWNobyAiMTAwMDAwMDAwMCIgPmV4cGVjdCAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IEhFQUQgYWRkcyBkZWxldGVkIGludGVudC10by1hZGQgZmlsZSBiYWNrIHRvIGluZGV4JyAnCisJZWNobyAibm9uZW1wdHkiID5ub25lbXB0eSAmJgorCT5lbXB0eSAmJgorCWdpdCBhZGQgbm9uZW1wdHkgZW1wdHkgJiYKKwlnaXQgY29tbWl0IC1tICJjcmVhdGUgZmlsZXMgdG8gYmUgZGVsZXRlZCIgJiYKKwlnaXQgcm0gLS1jYWNoZWQgbm9uZW1wdHkgZW1wdHkgJiYKKwlnaXQgYWRkIC1OIG5vbmVtcHR5IGVtcHR5ICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgbm9uZW1wdHkgZW1wdHkgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLWV4aXQtY29kZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjMtY2hlY2tvdXQtbS5zaCBiL3QvdDIwMjMtY2hlY2tvdXQtbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mY2EzZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyMy1jaGVja291dC1tLnNoCkBAIC0wLDAgKzEsNzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCAtbSAtLSA8Y29uZmxpY3RlZCBwYXRoPgorCitFbnN1cmVzIHRoYXQgY2hlY2tvdXQgLW0gb24gYSByZXNvbHZlZCBmaWxlIHJlc3RvcmVzIHRoZSBjb25mbGljdGVkIGZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NvbW1pdCBib3RoLnR4dCBib3RoLnR4dCBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCB0b3BpYyAmJgorCXRlc3RfY29tbWl0IG1vZGlmaWVkX2luX21hc3RlciBib3RoLnR4dCBpbl9tYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBhZGRlZF9pbl9tYXN0ZXIgZWFjaC50eHQgaW5fbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJdGVzdF9jb21taXQgbW9kaWZpZWRfaW5fdG9waWMgYm90aC50eHQgaW5fdG9waWMgJiYKKwl0ZXN0X2NvbW1pdCBhZGRlZF9pbl90b3BpYyBlYWNoLnR4dCBpbl90b3BpYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbWVyZ2UgbWFzdGVyJyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcgorJworCitjbGVhbl9icmFuY2huYW1lcyAoKSB7CisJIyBSZW1vdmUgYnJhbmNoIG5hbWVzIGFmdGVyIGNvbmZsaWN0IGxpbmVzCisJc2VkICdzL15cKFs8Pl1cezUsXH1cKSAuKiQvXDEvJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSByZXN0b3JlcyAyLXdheSBjb25mbGljdGVkK3Jlc29sdmVkIGZpbGUnICcKKwljcCBlYWNoLnR4dCBlYWNoLnR4dC5jb25mbGljdGVkICYmCisJZWNobyByZXNvbHZlZCA+ZWFjaC50eHQgJiYKKwlnaXQgYWRkIGVhY2gudHh0ICYmCisJZ2l0IGNoZWNrb3V0IC1tIC0tIGVhY2gudHh0ICYmCisJY2xlYW5fYnJhbmNobmFtZXMgPGVhY2gudHh0ID5lYWNoLnR4dC5jbGVhbmVkICYmCisJY2xlYW5fYnJhbmNobmFtZXMgPGVhY2gudHh0LmNvbmZsaWN0ZWQgPmVhY2gudHh0LmNvbmZsaWN0ZWQuY2xlYW5lZCAmJgorCXRlc3RfY21wIGVhY2gudHh0LmNvbmZsaWN0ZWQuY2xlYW5lZCBlYWNoLnR4dC5jbGVhbmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIHJlc3RvcmVzIDMtd2F5IGNvbmZsaWN0ZWQrcmVzb2x2ZWQgZmlsZScgJworCWNwIGJvdGgudHh0IGJvdGgudHh0LmNvbmZsaWN0ZWQgJiYKKwllY2hvIHJlc29sdmVkID5ib3RoLnR4dCAmJgorCWdpdCBhZGQgYm90aC50eHQgJiYKKwlnaXQgY2hlY2tvdXQgLW0gLS0gYm90aC50eHQgJiYKKwljbGVhbl9icmFuY2huYW1lcyA8Ym90aC50eHQgPmJvdGgudHh0LmNsZWFuZWQgJiYKKwljbGVhbl9icmFuY2huYW1lcyA8Ym90aC50eHQuY29uZmxpY3RlZCA+Ym90aC50eHQuY29uZmxpY3RlZC5jbGVhbmVkICYmCisJdGVzdF9jbXAgYm90aC50eHQuY29uZmxpY3RlZC5jbGVhbmVkIGJvdGgudHh0LmNsZWFuZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2UgY2hlY2tvdXQgYSBjb25mbGljdCBmaWxlIGNyZWF0ZXMgc3RhZ2UgemVybyBlbnRyeScgJworCWdpdCBpbml0IGNvLWZvcmNlICYmCisJKAorCQljZCBjby1mb3JjZSAmJgorCQllY2hvIGEgPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLWFtYSAmJgorCQlBX09CSj0kKGdpdCByZXYtcGFyc2UgOmEpICYmCisJCWdpdCBicmFuY2ggdG9waWMgJiYKKwkJZWNobyBiID5hICYmCisJCWdpdCBjb21taXQgLWFtYiAmJgorCQlCX09CSj0kKGdpdCByZXYtcGFyc2UgOmEpICYmCisJCWdpdCBjaGVja291dCB0b3BpYyAmJgorCQllY2hvIGMgPmEgJiYKKwkJQ19PQko9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKwkJZ2l0IGNoZWNrb3V0IC1tIG1hc3RlciAmJgorCQl0ZXN0X2NtcF9yZXYgOjE6YSAkQV9PQkogJiYKKwkJdGVzdF9jbXBfcmV2IDoyOmEgJEJfT0JKICYmCisJCXRlc3RfY21wX3JldiA6MzphICRDX09CSiAmJgorCQlnaXQgY2hlY2tvdXQgLWYgdG9waWMgJiYKKwkJdGVzdF9jbXBfcmV2IDowOmEgJEFfT0JKCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjQtY2hlY2tvdXQtZHdpbS5zaCBiL3QvdDIwMjQtY2hlY2tvdXQtZHdpbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hY2NmYTlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyNC1jaGVja291dC1kd2ltLnNoCkBAIC0wLDAgKzEsMzM2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgPGJyYW5jaD4KKworRW5zdXJlcyB0aGF0IGNoZWNrb3V0IG9uIGFuIHVuYm9ybiBicmFuY2ggZG9lcyB3aGF0IHRoZSB1c2VyIGV4cGVjdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIElzIHRoZSBjdXJyZW50IGJyYW5jaCAicmVmcy9oZWFkcy8kMSI/Cit0ZXN0X2JyYW5jaCAoKSB7CisJcHJpbnRmICIlc1xuIiAicmVmcy9oZWFkcy8kMSIgPmV4cGVjdC5IRUFEICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwuSEVBRCAmJgorCXRlc3RfY21wIGV4cGVjdC5IRUFEIGFjdHVhbC5IRUFECit9CisKKyMgSXMgYnJhbmNoICJyZWZzL2hlYWRzLyQxIiBzZXQgdG8gcHVsbCBmcm9tICIkMi8kMyI/Cit0ZXN0X2JyYW5jaF91cHN0cmVhbSAoKSB7CisJcHJpbnRmICIlc1xuIiAiJDIiICJyZWZzL2hlYWRzLyQzIiA+ZXhwZWN0LnVwc3RyZWFtICYmCisJeworCQlnaXQgY29uZmlnICJicmFuY2guJDEucmVtb3RlIiAmJgorCQlnaXQgY29uZmlnICJicmFuY2guJDEubWVyZ2UiCisJfSA+YWN0dWFsLnVwc3RyZWFtICYmCisJdGVzdF9jbXAgZXhwZWN0LnVwc3RyZWFtIGFjdHVhbC51cHN0cmVhbQorfQorCitzdGF0dXNfdW5vX2lzX2NsZWFuICgpIHsKKwlnaXQgc3RhdHVzIC11bm8gLS1wb3JjZWxhaW4gPnN0YXR1cy5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3RhdHVzLmFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG15X21hc3RlciAmJgorCWdpdCBpbml0IHJlcG9fYSAmJgorCSgKKwkJY2QgcmVwb19hICYmCisJCXRlc3RfY29tbWl0IGFfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBmb28gJiYKKwkJdGVzdF9jb21taXQgYV9mb28gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGJhciAmJgorCQl0ZXN0X2NvbW1pdCBhX2JhciAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZSAmJgorCQl0ZXN0X2NvbW1pdCBhX2FtYmlndW91c19icmFuY2hfYW5kX2ZpbGUKKwkpICYmCisJZ2l0IGluaXQgcmVwb19iICYmCisJKAorCQljZCByZXBvX2IgJiYKKwkJdGVzdF9jb21taXQgYl9tYXN0ZXIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGZvbyAmJgorCQl0ZXN0X2NvbW1pdCBiX2ZvbyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYmF6ICYmCisJCXRlc3RfY29tbWl0IGJfYmF6ICYmCisJCWdpdCBjaGVja291dCAtYiBhbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlICYmCisJCXRlc3RfY29tbWl0IGJfYW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZQorCSkgJiYKKwlnaXQgcmVtb3RlIGFkZCByZXBvX2EgcmVwb19hICYmCisJZ2l0IHJlbW90ZSBhZGQgcmVwb19iIHJlcG9fYiAmJgorCWdpdCBjb25maWcgcmVtb3RlLnJlcG9fYi5mZXRjaCBcCisJCSIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vdGhlcl9iLyoiICYmCisJZ2l0IGZldGNoIC0tYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIG5vbi1leGlzdGluZyBicmFuY2ggZmFpbHMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgeHl6enkgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCB4eXp6eSAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMveHl6enkgJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyBmYWlscyAjMScgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBmb28gJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBmb28gJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfYnJhbmNoIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIGFyZyBtYXRjaGVzIG11bHRpcGxlIHJlbW90ZXMsIGRvIG5vdCBmYWxsYmFjayB0byBpbnRlcnByZXRpbmcgYXMgcGF0aHNwZWMnICcKKwkjIGNyZWF0ZSBhIGZpbGUgd2l0aCBuYW1lIG1hdGNoaW5nIHJlbW90ZSBicmFuY2ggbmFtZQorCWdpdCBjaGVja291dCAtYiB0X2FtYmlndW91c19icmFuY2hfYW5kX2ZpbGUgJiYKKwk+YW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZSAmJgorCWdpdCBhZGQgYW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFtYmlndW91c19icmFuY2hfYW5kX2ZpbGUiICYmCisKKwkjIG1vZGlmeSBmaWxlIHRvIHZlcmlmeSB0aGF0IGl0IHdpbGwgbm90IGJlIHRvdWNoZWQgYnkgY2hlY2tvdXQKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtLSBhbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlIiAmJgorCWVjaG8gImZpbGUgY29udGVudHMiID5hbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlICYmCisJY3AgYW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZSBleHBlY3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBhbWJpZ3VvdXNfYnJhbmNoX2FuZF9maWxlIDI+ZXJyICYmCisKKwl0ZXN0X2kxOG5ncmVwICJtYXRjaGVkIG11bHRpcGxlICgyKSByZW1vdGUgdHJhY2tpbmcgYnJhbmNoZXMiIGVyciAmJgorCisJIyBmaWxlIG11c3Qgbm90IGJlIGFsdGVyZWQKKwl0ZXN0X2NtcCBleHBlY3QgYW1iaWd1b3VzX2JyYW5jaF9hbmRfZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIGZhaWxzIHdpdGggYWR2aWNlJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBmb28gMj5zdGRlcnIgJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9pMThuZ3JlcCAiXmhpbnQ6ICIgc3RkZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGFkdmljZS5jaGVja291dEFtYmlndW91c1JlbW90ZUJyYW5jaE5hbWU9ZmFsc2UgXAorCQljaGVja291dCBmb28gMj5zdGRlcnIgJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9pMThuZ3JlcCAhICJeaGludDogIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVja291dCAtcCB3aXRoIG11bHRpcGxlIHJlbW90ZXMgZG9lcyBub3QgcHJpbnQgYWR2aWNlJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGZvbyAmJgorCisJZ2l0IGNoZWNrb3V0IC1wIGZvbyAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiXmhpbnQ6ICIgc3RkZXJyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIHN1Y2NlZWRzIHdpdGggY2hlY2tvdXQuZGVmYXVsdFJlbW90ZSAjMScgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgZm9vICYmCisKKwlnaXQgLWMgY2hlY2tvdXQuZGVmYXVsdFJlbW90ZT1yZXBvX2EgY2hlY2tvdXQgZm9vICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfYnJhbmNoIGZvbyAmJgorCXRlc3RfY21wX3JldiByZW1vdGVzL3JlcG9fYS9mb28gSEVBRCAmJgorCXRlc3RfYnJhbmNoX3Vwc3RyZWFtIGZvbyByZXBvX2EgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIGEgc2luZ2xlIHJlbW90ZSBzdWNjZWVkcyAjMScgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBiYXIgJiYKKworCWdpdCBjaGVja291dCBiYXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9icmFuY2ggYmFyICYmCisJdGVzdF9jbXBfcmV2IHJlbW90ZXMvcmVwb19hL2JhciBIRUFEICYmCisJdGVzdF9icmFuY2hfdXBzdHJlYW0gYmFyIHJlcG9fYSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gYSBzaW5nbGUgcmVtb3RlIHN1Y2NlZWRzICMyJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGJheiAmJgorCisJZ2l0IGNoZWNrb3V0IGJheiAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X2JyYW5jaCBiYXogJiYKKwl0ZXN0X2NtcF9yZXYgcmVtb3Rlcy9vdGhlcl9iL2JheiBIRUFEICYmCisJdGVzdF9icmFuY2hfdXBzdHJlYW0gYmF6IHJlcG9fYiBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1ndWVzcyBzdXBwcmVzc2VzIGJyYW5jaCBhdXRvLXZpdmlmaWNhdGlvbicgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmFyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1uby1ndWVzcyBiYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYmFyICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1vcmUgcmVtb3RlcyB3aXRoIHVuY29udmVudGlvbmFsIHJlZnNwZWNzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwlnaXQgaW5pdCByZXBvX2MgJiYKKwkoCisJCWNkIHJlcG9fYyAmJgorCQl0ZXN0X2NvbW1pdCBjX21hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYmFyICYmCisJCXRlc3RfY29tbWl0IGNfYmFyICYmCisJCWdpdCBjaGVja291dCAtYiBzcGFtICYmCisJCXRlc3RfY29tbWl0IGNfc3BhbQorCSkgJiYKKwlnaXQgaW5pdCByZXBvX2QgJiYKKwkoCisJCWNkIHJlcG9fZCAmJgorCQl0ZXN0X2NvbW1pdCBkX21hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYmF6ICYmCisJCXRlc3RfY29tbWl0IGRfYmF6ICYmCisJCWdpdCBjaGVja291dCAtYiBlZ2dzICYmCisJCXRlc3RfY29tbWl0IGRfZWdncworCSkgJiYKKwlnaXQgcmVtb3RlIGFkZCByZXBvX2MgcmVwb19jICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucmVwb19jLmZldGNoIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2V4dHJhX2Rpci9yZXBvX2MvZXh0cmFfZGlyLyoiICYmCisJZ2l0IHJlbW90ZSBhZGQgcmVwb19kIHJlcG9fZCAmJgorCWdpdCBjb25maWcgcmVtb3RlLnJlcG9fZC5mZXRjaCBcCisJCSIrcmVmcy9oZWFkcy8qOnJlZnMvcmVwb19kLyoiICYmCisJZ2l0IGZldGNoIC0tYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMgZmFpbHMgIzInICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGJhciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGJhciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYmFyICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMgZmFpbHMgIzMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGJheiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGJheiAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYmF6ICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIGEgc2luZ2xlIHJlbW90ZSBzdWNjZWVkcyAjMycgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgc3BhbSAmJgorCisJZ2l0IGNoZWNrb3V0IHNwYW0gJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9icmFuY2ggc3BhbSAmJgorCXRlc3RfY21wX3JldiByZWZzL3JlbW90ZXMvZXh0cmFfZGlyL3JlcG9fYy9leHRyYV9kaXIvc3BhbSBIRUFEICYmCisJdGVzdF9icmFuY2hfdXBzdHJlYW0gc3BhbSByZXBvX2Mgc3BhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBhIHNpbmdsZSByZW1vdGUgc3VjY2VlZHMgIzQnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGVnZ3MgJiYKKworCWdpdCBjaGVja291dCBlZ2dzICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfYnJhbmNoIGVnZ3MgJiYKKwl0ZXN0X2NtcF9yZXYgcmVmcy9yZXBvX2QvZWdncyBIRUFEICYmCisJdGVzdF9icmFuY2hfdXBzdHJlYW0gZWdncyByZXBvX2QgZWdncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggd2l0aCBhIGZpbGUgaGF2aW5nIHRoZSBzYW1lIG5hbWUgZmFpbHMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIHNwYW0gJiYKKworCT5zcGFtICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHNwYW0gJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NwYW0gJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIHdpdGggYSBmaWxlIGluIHN1YmRpciBoYXZpbmcgdGhlIHNhbWUgbmFtZSBmYWlscycgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlzdGF0dXNfdW5vX2lzX2NsZWFuICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgc3BhbSAmJgorCisJPnNwYW0gJiYKKwlta2RpciBzdWIgJiYKKwltdiBzcGFtIHN1Yi9zcGFtICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1YiBjaGVja291dCBzcGFtICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zcGFtICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IDxicmFuY2g+IC0tIHN1Y2NlZWRzLCBldmVuIGlmIGEgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBzcGFtICYmCisKKwk+c3BhbSAmJgorCWdpdCBjaGVja291dCBzcGFtIC0tICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCXRlc3RfYnJhbmNoIHNwYW0gJiYKKwl0ZXN0X2NtcF9yZXYgcmVmcy9yZW1vdGVzL2V4dHJhX2Rpci9yZXBvX2MvZXh0cmFfZGlyL3NwYW0gSEVBRCAmJgorCXRlc3RfYnJhbmNoX3Vwc3RyZWFtIHNwYW0gcmVwb19jIHNwYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9vc2VseSBkZWZpbmVkIGxvY2FsIGJhc2UgYnJhbmNoIGlzIHJlcG9ydGVkIGNvcnJlY3RseScgJworCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwlnaXQgYnJhbmNoIHN0cmljdCAmJgorCWdpdCBicmFuY2ggbG9vc2UgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImEgYml0IG1vcmUiICYmCisKKwl0ZXN0X2NvbmZpZyBicmFuY2guc3RyaWN0LnJlbW90ZSAuICYmCisJdGVzdF9jb25maWcgYnJhbmNoLmxvb3NlLnJlbW90ZSAuICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnN0cmljdC5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5sb29zZS5tZXJnZSBtYXN0ZXIgJiYKKworCWdpdCBjaGVja291dCBzdHJpY3QgfCBzZWQgLWUgInMvc3RyaWN0L0JSQU5DSE5BTUUvZyIgPmV4cGVjdCAmJgorCXN0YXR1c191bm9faXNfY2xlYW4gJiYKKwlnaXQgY2hlY2tvdXQgbG9vc2UgfCBzZWQgLWUgInMvbG9vc2UvQlJBTkNITkFNRS9nIiA+YWN0dWFsICYmCisJc3RhdHVzX3Vub19pc19jbGVhbiAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3Qgd2hlbiBhcmcgY291bGQgYmUgcGFydCBvZiBkd2ltIGJyYW5jaCcgJworCWdpdCByZW1vdGUgYWRkIGZvbyBmaWxlOi8vbm9uLWV4aXN0ZW50LXBsYWNlICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL2Zvby9kd2ltLWFyZyBIRUFEICYmCisJZWNobyBmb28gPmR3aW0tYXJnICYmCisJZ2l0IGFkZCBkd2ltLWFyZyAmJgorCWVjaG8gYmFyID5kd2ltLWFyZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBkd2ltLWFyZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9kd2ltLWFyZyAtLSAmJgorCWdyZXAgYmFyIGR3aW0tYXJnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSBkd2ltIGJyYW5jaCBhbmQgY2hlY2tvdXQgcGF0aCAoMSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvZm9vL2R3aW0tYXJnMSBIRUFEICYmCisJZWNobyBmb28gPmR3aW0tYXJnMSAmJgorCWdpdCBhZGQgZHdpbS1hcmcxICYmCisJZWNobyBiYXIgPmR3aW0tYXJnMSAmJgorCWdpdCBjaGVja291dCAtLSBkd2ltLWFyZzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvZHdpbS1hcmcxIC0tICYmCisJZ3JlcCBmb28gZHdpbS1hcmcxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSBkd2ltIGJyYW5jaCBhbmQgY2hlY2tvdXQgcGF0aCAoMiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvZm9vL2R3aW0tYXJnMiBIRUFEICYmCisJZWNobyBmb28gPmR3aW0tYXJnMiAmJgorCWdpdCBhZGQgZHdpbS1hcmcyICYmCisJZWNobyBiYXIgPmR3aW0tYXJnMiAmJgorCWdpdCBjaGVja291dCBkd2ltLWFyZzIgLS0gJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvZHdpbS1hcmcyIC0tICYmCisJZ3JlcCBiYXIgZHdpbS1hcmcyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAyNS1jaGVja291dC1uby1vdmVybGF5LnNoIGIvdC90MjAyNS1jaGVja291dC1uby1vdmVybGF5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2MzMwY2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDI1LWNoZWNrb3V0LW5vLW92ZXJsYXkuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IC0tbm8tb3ZlcmxheSA8dHJlZS1pc2g+IC0tIDxwYXRoc3BlYz4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiaW5pdGlhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1uby1vdmVybGF5IGRlbGV0ZXMgZmlsZXMgbm90IGluIDx0cmVlLWlzaD4nICcKKwk+ZmlsZSAmJgorCW1rZGlyIGRpciAmJgorCT5kaXIvZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUgZGlyL2ZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IC0tbm8tb3ZlcmxheSBIRUFEIC0tIGZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyL2ZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tbm8tb3ZlcmxheSByZW1vdmluZyBsYXN0IGZpbGUgZnJvbSBkaXJlY3RvcnknICcKKwlnaXQgY2hlY2tvdXQgLS1uby1vdmVybGF5IEhFQUQgLS0gZGlyL2ZpbGUxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1wIC0tb3ZlcmxheSBpcyBkaXNhbGxvd2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1wIC0tb3ZlcmxheSBIRUFEIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IC1wIGFuZCAtLW92ZXJsYXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tb3ZlcmxheSAtLXRoZWlycyB3aXRoIEQvRiBjb25mbGljdCBkZWxldGVzIGZpbGUnICcKKwl0ZXN0X2NvbW1pdCBmaWxlMSBmaWxlMSAmJgorCXRlc3RfY29tbWl0IGZpbGUyIGZpbGUyICYmCisJZ2l0IHJtIC0tY2FjaGVkIGZpbGUxICYmCisJZWNobyAxMjM0ID5maWxlMSAmJgorCUYxPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUxKSAmJgorCUYyPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUyKSAmJgorCXsKKwkJZWNobyAiMTAwNjQ0ICRGMSAxCWZpbGUxIiAmJgorCQllY2hvICIxMDA2NDQgJEYyIDIJZmlsZTEiCisJfSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgLS10aGVpcnMgLS1uby1vdmVybGF5IC0tIGZpbGUxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDI2LWNoZWNrb3V0LXBhdGhzcGVjLWZpbGUuc2ggYi90L3QyMDI2LWNoZWNrb3V0LXBhdGhzcGVjLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDNkMzFkNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMjYtY2hlY2tvdXQtcGF0aHNwZWMtZmlsZS5zaApAQCAtMCwwICsxLDE2MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZpbGUwICYmCisKKwllY2hvIDEgPmZpbGVBLnQgJiYKKwllY2hvIDEgPmZpbGVCLnQgJiYKKwllY2hvIDEgPmZpbGVDLnQgJiYKKwllY2hvIDEgPmZpbGVELnQgJiYKKwlnaXQgYWRkIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlcyAxIiAmJgorCisJZWNobyAyID5maWxlQS50ICYmCisJZWNobyAyID5maWxlQi50ICYmCisJZWNobyAyID5maWxlQy50ICYmCisJZWNobyAyID5maWxlRC50ICYmCisJZ2l0IGFkZCBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlsZXMgMiIgJiYKKworCWdpdCB0YWcgY2hlY2twb2ludAorJworCityZXN0b3JlX2NoZWNrcG9pbnQgKCkgeworCWdpdCByZXNldCAtLWhhcmQgY2hlY2twb2ludAorfQorCit2ZXJpZnlfZXhwZWN0ICgpIHsKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tdW50cmFja2VkLWZpbGVzPW5vIC0tIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgZnJvbSBzdGRpbicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZWNobyBmaWxlQS50IHwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gSEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTSAgZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgZnJvbSBmaWxlJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKwlnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCBIRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNICBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XDBmaWxlQi50XDAiIHwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1wYXRoc3BlYy1maWxlLW51bCBIRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNICBmaWxlQS50CisJTSAgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XG5maWxlQi50XG4iIHwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gSEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTSAgZmlsZUEudAorCU0gIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRyYWlsaW5nIGRlbGltaXRlcicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XG5maWxlQi50IiB8IGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVBLnQKKwlNICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxyXG5maWxlQi50XHJcbiIgfCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSBIRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNICBmaWxlQS50CisJTSAgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmxpc3QgPDwtXEVPRiAmJgorCSJmaWxlXDEwMS50IgorCUVPRgorCisJZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgSEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJTSAgZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzIG5vdCBjb21wYXRpYmxlIHdpdGggLS1wYXRoc3BlYy1maWxlLW51bCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0aHNwZWMtZmlsZS1udWwgSEVBRF4xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgdG91Y2hlcyB3aGF0IHdhcyBsaXN0ZWQnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUIudFxuZmlsZUMudFxuIiB8IGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIEhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU0gIGZpbGVCLnQKKwlNICBmaWxlQy50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBjb25kaXRpb25zJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLWRldGFjaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tZGV0YWNoIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0Y2ggMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tIGZpbGVBLnQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tcGF0aHNwZWMtZmlsZS1udWwgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDMwLXVucmVzb2x2ZS1pbmZvLnNoIGIvdC90MjAzMC11bnJlc29sdmUtaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDkxOTliCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAzMC11bnJlc29sdmUtaW5mby5zaApAQCAtMCwwICsxLDE5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3VuZG9pbmcgcmVzb2x1dGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX3Jlc29sdmVfdW5kbyAoKSB7CisJbXNnPSQxCisJc2hpZnQKKwl3aGlsZSBjYXNlICQjIGluCisJMCkJYnJlYWsgOzsKKwkxfDJ8MykJZGllICJCdWcgaW4gY2hlY2stcmVzb2x2ZS11bmRvIHRlc3QiIDs7CisJZXNhYworCWRvCisJCXBhdGg9JDEKKwkJc2hpZnQKKwkJZm9yIHN0YWdlIGluIDEgMiAzCisJCWRvCisJCQlzaGExPSQxCisJCQlzaGlmdAorCQkJY2FzZSAiJHNoYTEiIGluCisJCQknJykgY29udGludWUgOzsKKwkJCWVzYWMKKwkJCXNoYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkc2hhMSIpCisJCQlwcmludGYgIjEwMDY0NCAlcyAlc1x0JXNcbiIgJHNoYTEgJHN0YWdlICRwYXRoCisJCWRvbmUKKwlkb25lID4iJG1zZy5leHBlY3QiICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVzb2x2ZS11bmRvID4iJG1zZy5hY3R1YWwiICYmCisJdGVzdF9jbXAgIiRtc2cuZXhwZWN0IiAiJG1zZy5hY3R1YWwiCit9CisKK3ByaW1lX3Jlc29sdmVfdW5kbyAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0aGlyZF4wICYmCisJZWNobyBtZXJnZSBkb2VzIG5vdCBsZWF2ZSBhbnl0aGluZyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBlbXB0eSAmJgorCWVjaG8gZGlmZmVyZW50ID5maS9sZSAmJgorCWdpdCBhZGQgZmkvbGUgJiYKKwllY2hvIHJlc29sdmluZyByZWNvcmRzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIHJlY29yZGVkIGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGZpICYmCisJcHJpbnRmICJhXDBhIiA+YmluYXJ5ICYmCisJZ2l0IGFkZCBiaW5hcnkgJiYKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZpL2xlIGZpcnN0ICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZ2l0IGJyYW5jaCBhbm90aGVyICYmCisJcHJpbnRmICJhXDBiIiA+YmluYXJ5ICYmCisJZ2l0IGFkZCBiaW5hcnkgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgZmkvbGUgc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCB0aGlyZCBmaS9sZSB0aGlyZCAmJgorCWdpdCBicmFuY2ggYWRkLWFkZCAmJgorCWdpdCBjaGVja291dCBhbm90aGVyICYmCisJdGVzdF9jb21taXQgZm91cnRoIGZpL2xlIGZvdXJ0aCAmJgorCWdpdCBjaGVja291dCBhZGQtYWRkICYmCisJdGVzdF9jb21taXQgZmlmdGggYWRkLWRpZmZlcmVudGx5ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVjb3JkcyBzd2l0Y2ggY2xlYXJzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgJiYKKwllY2hvIGNvbW1pdHRpbmcga2VlcHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCWVjaG8gc3dpdGNoaW5nIGNsZWFycyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBjbGVhcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlY29yZHMgcmVzZXQgY2xlYXJzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgJiYKKwllY2hvIGNvbW1pdHRpbmcga2VlcHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCisJZWNobyBtZXJnZSBjbGVhcnMgdXBmcm9udCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmb3VydGheMCAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBudWtlZCAmJgorCisJZ2l0IHJtIC1mIGZpL2xlICYmCisJZWNobyByZXNvbHZpbmcgcmVjb3JkcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyByZWNvcmRlZCBmaS9sZSBpbml0aWFsOmZpL2xlIEhFQUQ6ZmkvbGUgZm91cnRoOmZpL2xlICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyByZXNldHRpbmcgZGlzY2FyZHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8gZGlzY2FyZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsdW1iaW5nIGNsZWFycycgJworCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbWVyZ2VkICYmCisJZWNobyBjb21taXR0aW5nIGtlZXBzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGtlcHQgZmkvbGUgaW5pdGlhbDpmaS9sZSBzZWNvbmQ6ZmkvbGUgdGhpcmQ6ZmkvbGUgJiYKKworCWVjaG8gcGx1bWJpbmcgY2xlYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2xlYXItcmVzb2x2ZS11bmRvICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGNsZWFyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlY29yZHMgY2hlY2tvdXQgLW0gdW5kb2VzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJZ2l0IGRpZmYgSEVBRCAmJgorCWdpdCBjaGVja291dCAtLWNvbmZsaWN0PW1lcmdlIGZpL2xlICYmCisJZWNobyBjaGVja291dCB1c2VkIHRoZSByZWNvcmQgYW5kIHJlbW92ZWQgaXQgJiYKKwljaGVja19yZXNvbHZlX3VuZG8gcmVtb3ZlZCAmJgorCWVjaG8gdGhlIGluZGV4IGFuZCB0aGUgd29yayB0cmVlIGlzIHVubWVyZ2VkIGFnYWluICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCWdyZXAgIl4rKzw8PDw8PDwiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bm1lcmdlIHdpdGggcGx1bWJpbmcnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW5yZXNvbHZlIGZpL2xlICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgYW5kIHJlcmVyZSBmb3JnZXQnICcKKwlta2RpciAuZ2l0L3JyLWNhY2hlICYmCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJZWNobyByZWNvcmQgdGhlIHJlc29sdXRpb24gJiYKKwlnaXQgcmVyZXJlICYmCisJcmVyZXJlX2lkPSQoY2QgLmdpdC9yci1jYWNoZSAmJiBlY2hvICovcG9zdGltYWdlKSAmJgorCXJlcmVyZV9pZD0ke3JlcmVyZV9pZCUvcG9zdGltYWdlfSAmJgorCXRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCWdpdCBjaGVja291dCAtbSBmaS9sZSAmJgorCWVjaG8gcmVzdXJyZWN0IHRoZSBjb25mbGljdCAmJgorCWdyZXAgIl49PT09PT09IiBmaS9sZSAmJgorCWVjaG8gcmVyZXNvbHZlIHRoZSBjb25mbGljdCAmJgorCWdpdCByZXJlcmUgJiYKKwl0ZXN0ICJ6JChjYXQgZmkvbGUpIiA9IHpkaWZmZXJlbnQgJiYKKwllY2hvIHJlZ2lzdGVyIHRoZSByZXNvbHV0aW9uIGFnYWluICYmCisJZ2l0IGFkZCBmaS9sZSAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCWdpdCByZXJlcmUgZm9yZ2V0IGZpL2xlICYmCisJISB0ZXN0IC1mIC5naXQvcnItY2FjaGUvJHJlcmVyZV9pZC9wb3N0aW1hZ2UgJiYKKwl0ciAiXDAiICJcbiIgPC5naXQvTUVSR0VfUlIgPmFjdHVhbCAmJgorCWVjaG8gIiRyZXJlcmVfaWQJZmkvbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBhbmQgcmVyZXJlIGZvcmdldCAoc3ViZGlyZWN0b3J5KScgJworCXJtIC1mciAuZ2l0L3JyLWNhY2hlICYmCisJbWtkaXIgLmdpdC9yci1jYWNoZSAmJgorCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCWVjaG8gcmVjb3JkIHRoZSByZXNvbHV0aW9uICYmCisJKGNkIGZpICYmIGdpdCByZXJlcmUpICYmCisJcmVyZXJlX2lkPSQoY2QgLmdpdC9yci1jYWNoZSAmJiBlY2hvICovcG9zdGltYWdlKSAmJgorCXJlcmVyZV9pZD0ke3JlcmVyZV9pZCUvcG9zdGltYWdlfSAmJgorCXRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCShjZCBmaSAmJiBnaXQgY2hlY2tvdXQgLW0gbGUpICYmCisJZWNobyByZXN1cnJlY3QgdGhlIGNvbmZsaWN0ICYmCisJZ3JlcCAiXj09PT09PT0iIGZpL2xlICYmCisJZWNobyByZXJlc29sdmUgdGhlIGNvbmZsaWN0ICYmCisJKGNkIGZpICYmIGdpdCByZXJlcmUpICYmCisJdGVzdCAieiQoY2F0IGZpL2xlKSIgPSB6ZGlmZmVyZW50ICYmCisJZWNobyByZWdpc3RlciB0aGUgcmVzb2x1dGlvbiBhZ2FpbiAmJgorCShjZCBmaSAmJiBnaXQgYWRkIGxlKSAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCShjZCBmaSAmJiBnaXQgcmVyZXJlIGZvcmdldCBsZSkgJiYKKwkhIHRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCXRyICJcMCIgIlxuIiA8LmdpdC9NRVJHRV9SUiA+YWN0dWFsICYmCisJZWNobyAiJHJlcmVyZV9pZAlmaS9sZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGZvcmdldCAoYmluYXJ5KScgJworCWdpdCBjaGVja291dCAtZiBzaWRlICYmCisJcHJpbnRmICJhXDBjIiA+YmluYXJ5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBiaW5hcnkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2Vjb25kICYmCisJZ2l0IHJlcmVyZSBmb3JnZXQgYmluYXJ5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBmb3JnZXQgKGFkZC1hZGQgY29uZmxpY3QpJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWVjaG8gbWFzdGVyID5hZGQtZGlmZmVyZW50bHkgJiYKKwlnaXQgYWRkIGFkZC1kaWZmZXJlbnRseSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBkaWZmZXJlbnRseSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlmdGggJiYKKwlnaXQgcmVyZXJlIGZvcmdldCBhZGQtZGlmZmVyZW50bHkgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJubyByZW1lbWJlcmVkIiBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDUwLWdpdC1kaXItcmVsYXRpdmUuc2ggYi90L3QyMDUwLWdpdC1kaXItcmVsYXRpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjFmNDY1OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwNTAtZ2l0LWRpci1yZWxhdGl2ZS5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgcHJvYmxlbXMgd2l0aCByZWxhdGl2ZSBHSVRfRElSCisKK1RoaXMgdGVzdCBjcmVhdGVzIGEgd29ya2luZyB0cmVlIHN0YXRlIHdpdGggYSBmaWxlIGFuZCBzdWJkaXI6CisKKyAgdG9wIChjb21taXR0ZWQgc2V2ZXJhbCB0aW1lcykKKyAgc3ViZGlyIChhIHN1YmRpcmVjdG9yeSkKKworSXQgY3JlYXRlcyBhIGNvbW1pdC1ob29rIGFuZCB0ZXN0cyBpdCwgdGhlbiBtb3ZlcyAuZ2l0CitpbnRvIHRoZSBzdWJkaXIgd2hpbGUga2VlcGluZyB0aGUgd29ya3RyZWUgbG9jYXRpb24sCithbmQgdHJpZXMgY29tbWl0cyBmcm9tIHRoZSB0b3AgYW5kIHRoZSBzdWJkaXIsIGNoZWNraW5nCit0aGF0IHRoZSBjb21taXQtaG9vayBzdGlsbCBnZXRzIGNhbGxlZC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitDT01NSVRfRklMRT0iJChwd2QpL291dHB1dCIKK2V4cG9ydCBDT01NSVRfRklMRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR0aW5nIHVwIHBvc3QtY29tbWl0IGhvb2snICcKK21rZGlyIC1wIC5naXQvaG9va3MgJiYKK2VjaG8gPi5naXQvaG9va3MvcG9zdC1jb21taXQgIiMhL2Jpbi9zaAordG91Y2ggXCJcJHtDT01NSVRfRklMRX1cIgorZWNobyBQb3N0IGNvbW1pdCBob29rIHdhcyBjYWxsZWQuIiAmJgorY2htb2QgK3ggLmdpdC9ob29rcy9wb3N0LWNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQgaG9vayB1c2VkIG9yZGluYXJpbHknICcKK2VjaG8gaW5pdGlhbCA+dG9wICYmCitnaXQgYWRkIHRvcCAmJgorZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCit0ZXN0IC1yICIke0NPTU1JVF9GSUxFfSIKKycKKworcm0gLXJmICIke0NPTU1JVF9GSUxFfSIKK21rZGlyIHN1YmRpcgorbXYgLmdpdCBzdWJkaXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQtaG9vayBjcmVhdGVkIGFuZCB1c2VkIGZyb20gdG9wIGRpcicgJworZWNobyBjaGFuZ2VkID50b3AgJiYKK2dpdCAtLWdpdC1kaXIgc3ViZGlyLy5naXQgYWRkIHRvcCAmJgorZ2l0IC0tZ2l0LWRpciBzdWJkaXIvLmdpdCBjb21taXQgLW0gdG9wY29tbWl0ICYmCit0ZXN0IC1yICIke0NPTU1JVF9GSUxFfSIKKycKKworcm0gLXJmICIke0NPTU1JVF9GSUxFfSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQtaG9vayBmcm9tIHN1YiBkaXInICcKK2VjaG8gY2hhbmdlZCBhZ2FpbiA+dG9wICYmCitjZCBzdWJkaXIgJiYKK2dpdCAtLWdpdC1kaXIgLmdpdCAtLXdvcmstdHJlZSAuLiBhZGQgLi4vdG9wICYmCitnaXQgLS1naXQtZGlyIC5naXQgLS13b3JrLXRyZWUgLi4gY29tbWl0IC1tIHN1YmNvbW1pdCAmJgordGVzdCAtciAiJHtDT01NSVRfRklMRX0iCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjA2MC1zd2l0Y2guc2ggYi90L3QyMDYwLXN3aXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOWVmYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjA2MC1zd2l0Y2guc2gKQEAgLTAsMCArMSw5NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3N3aXRjaCBiYXNpYyBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBmaXJzdCAmJgorCWdpdCBicmFuY2ggZmlyc3QtYnJhbmNoICYmCisJdGVzdF9jb21taXQgc2Vjb25kICYmCisJdGVzdF9jb21taXQgdGhpcmQgJiYKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gbm9ob3N0Oi9ub3BhdGggJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2ZvbyBmaXJzdC1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGJyYW5jaCBubyBhcmd1bWVudHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3dpdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBicmFuY2gnICcKKwlnaXQgc3dpdGNoIGZpcnN0LWJyYW5jaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHNlY29uZC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBhbmQgZGV0YWNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBzd2l0Y2ggbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN3aXRjaCBtYXN0ZXJee2NvbW1pdH0gJiYKKwlnaXQgc3dpdGNoIC0tZGV0YWNoIG1hc3Rlcl57Y29tbWl0fSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggYW5kIGRldGFjaCBjdXJyZW50IGJyYW5jaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgc3dpdGNoIG1hc3RlciAmJgorCWdpdCBzd2l0Y2ggbWFzdGVyICYmCisJZ2l0IHN3aXRjaCAtLWRldGFjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggYW5kIGNyZWF0ZSBicmFuY2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHN3aXRjaCBtYXN0ZXIgJiYKKwlnaXQgc3dpdGNoIC1jIHRlbXAgbWFzdGVyXiAmJgorCXRlc3RfY21wX3JldiBtYXN0ZXJeIHJlZnMvaGVhZHMvdGVtcCAmJgorCWVjaG8gcmVmcy9oZWFkcy90ZW1wID5leHBlY3RlZC1icmFuY2ggJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbC1icmFuY2ggJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1icmFuY2ggYWN0dWFsLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZSBjcmVhdGUgYnJhbmNoIGZyb20gSEVBRCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgc3dpdGNoIG1hc3RlciAmJgorCWdpdCBzd2l0Y2ggLS1kZXRhY2ggbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN3aXRjaCAtYyB0ZW1wICYmCisJZ2l0IHN3aXRjaCAtQyB0ZW1wICYmCisJdGVzdF9jbXBfcmV2IG1hc3RlciByZWZzL2hlYWRzL3RlbXAgJiYKKwllY2hvIHJlZnMvaGVhZHMvdGVtcCA+ZXhwZWN0ZWQtYnJhbmNoICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwtYnJhbmNoICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtYnJhbmNoIGFjdHVhbC1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IG9ycGhhbiBicmFuY2ggZnJvbSBlbXB0eScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgc3dpdGNoIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzd2l0Y2ggLS1vcnBoYW4gbmV3LW9ycGhhbiBIRUFEICYmCisJZ2l0IHN3aXRjaCAtLW9ycGhhbiBuZXctb3JwaGFuICYmCisJdGVzdF9jb21taXQgb3JwaGFuICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL2hlYWRzL25ldy1vcnBoYW4gPmNvbW1pdCAmJgorCSEgZ3JlcCBecGFyZW50IGNvbW1pdCAmJgorCWdpdCBscy1maWxlcyA+dHJhY2tlZC1maWxlcyAmJgorCWVjaG8gb3JwaGFuLnQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgdHJhY2tlZC1maWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2hpbmcgaWdub3JlcyBmaWxlIG9mIHNhbWUgYnJhbmNoIG5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHN3aXRjaCBtYXN0ZXIgJiYKKwk6ID5maXJzdC1icmFuY2ggJiYKKwlnaXQgc3dpdGNoIGZpcnN0LWJyYW5jaCAmJgorCWVjaG8gcmVmcy9oZWFkcy9maXJzdC1icmFuY2ggPmV4cGVjdGVkICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3Vlc3MgYW5kIGNyZWF0ZSBicmFuY2ggJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBzd2l0Y2ggbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN3aXRjaCAtLW5vLWd1ZXNzIGZvbyAmJgorCWdpdCBzd2l0Y2ggZm9vICYmCisJZWNobyByZWZzL2hlYWRzL2ZvbyA+ZXhwZWN0ZWQgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3Qgc3dpdGNoaW5nIHdoZW4gc29tZXRoaW5nIGlzIGluIHByb2dyZXNzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMgZmFrZSBhIG1lcmdlLWluLXByb2dyZXNzCisJY3AgLmdpdC9IRUFEIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzd2l0Y2ggLWQgQF4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDcwLXJlc3RvcmUuc2ggYi90L3QyMDcwLXJlc3RvcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDc2ZDBkZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwNzAtcmVzdG9yZS5zaApAQCAtMCwwICsxLDEyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc3RvcmUgYmFzaWMgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgZmlyc3QgJiYKKwllY2hvIGZpcnN0LWFuZC1hLWhhbGYgPj5maXJzdC50ICYmCisJZ2l0IGFkZCBmaXJzdC50ICYmCisJdGVzdF9jb21taXQgc2Vjb25kICYmCisJZWNobyBvbmUgPm9uZSAmJgorCWVjaG8gdHdvID50d28gJiYKKwllY2hvIHVudHJhY2tlZCA+dW50cmFja2VkICYmCisJZWNobyBpZ25vcmVkID5pZ25vcmVkICYmCisJZWNobyAvaWdub3JlZCA+LmdpdGlnbm9yZSAmJgorCWdpdCBhZGQgb25lIHR3byAuZ2l0aWdub3JlICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9vbmUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgd2l0aG91dCBwYXRoc3BlYyBpcyBub3Qgb2snICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzdG9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXN0b3JlIC0tc291cmNlPWZpcnN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgYSBmaWxlLCBpZ25vcmluZyBicmFuY2ggb2Ygc2FtZSBuYW1lJyAnCisJY2F0IG9uZSA+ZXhwZWN0ZWQgJiYKKwllY2hvIGRpcnR5ID4+b25lICYmCisJZ2l0IHJlc3RvcmUgb25lICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgYSBmaWxlIG9uIHdvcmt0cmVlIGZyb20gYW5vdGhlciByZWYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGZpcnN0Oi4vZmlyc3QudCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVzdG9yZSAtLXNvdXJjZT1maXJzdCBmaXJzdC50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlyc3QudCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6Li9maXJzdC50ID5leHBlY3RlZCAmJgorCWdpdCBzaG93IDpmaXJzdC50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSBhIGZpbGUgaW4gdGhlIGluZGV4IGZyb20gYW5vdGhlciByZWYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGZpcnN0Oi4vZmlyc3QudCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVzdG9yZSAtLXNvdXJjZT1maXJzdCAtLXN0YWdlZCBmaXJzdC50ICYmCisJZ2l0IHNob3cgOmZpcnN0LnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6Li9maXJzdC50ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpcnN0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSBhIGZpbGUgaW4gYm90aCB0aGUgaW5kZXggYW5kIHdvcmt0cmVlIGZyb20gYW5vdGhlciByZWYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGZpcnN0Oi4vZmlyc3QudCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVzdG9yZSAtLXNvdXJjZT1maXJzdCAtLXN0YWdlZCAtLXdvcmt0cmVlIGZpcnN0LnQgJiYKKwlnaXQgc2hvdyA6Zmlyc3QudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlyc3QudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIC0tc3RhZ2VkIHVzZXMgSEVBRCBhcyBzb3VyY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDouL2ZpcnN0LnQgPmV4cGVjdGVkICYmCisJZWNobyBpbmRleC1kaXJ0eSA+PmZpcnN0LnQgJiYKKwlnaXQgYWRkIGZpcnN0LnQgJiYKKwlnaXQgcmVzdG9yZSAtLXN0YWdlZCBmaXJzdC50ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOi4vZmlyc3QudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgLS1pZ25vcmUtdW5tZXJnZWQgaWdub3JlcyB1bm1lcmdlZCBlbnRyaWVzJyAnCisJZ2l0IGluaXQgdW5tZXJnZWQgJiYKKwkoCisJCWNkIHVubWVyZ2VkICYmCisJCWVjaG8gb25lID51bm1lcmdlZCAmJgorCQllY2hvIG9uZSA+Y29tbW9uICYmCisJCWdpdCBhZGQgdW5tZXJnZWQgY29tbW9uICYmCisJCWdpdCBjb21taXQgLW0gY29tbW9uICYmCisJCWdpdCBzd2l0Y2ggLWMgZmlyc3QgJiYKKwkJZWNobyBmaXJzdCA+dW5tZXJnZWQgJiYKKwkJZ2l0IGNvbW1pdCAtYW0gZmlyc3QgJiYKKwkJZ2l0IHN3aXRjaCAtYyBzZWNvbmQgbWFzdGVyICYmCisJCWVjaG8gc2Vjb25kID51bm1lcmdlZCAmJgorCQlnaXQgY29tbWl0IC1hbSBzZWNvbmQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisKKwkJZWNobyBkaXJ0eSA+PmNvbW1vbiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmVzdG9yZSAuICYmCisKKwkJZ2l0IHJlc3RvcmUgLS1pZ25vcmUtdW5tZXJnZWQgLS1xdWlldCAuID5vdXRwdXQgMj4mMSAmJgorCQlnaXQgZGlmZiBjb21tb24gPmRpZmYtb3V0cHV0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGRpZmYtb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIC0tc3RhZ2VkIGFkZHMgZGVsZXRlZCBpbnRlbnQtdG8tYWRkIGZpbGUgYmFjayB0byBpbmRleCcgJworCWVjaG8gIm5vbmVtcHR5IiA+bm9uZW1wdHkgJiYKKwk+ZW1wdHkgJiYKKwlnaXQgYWRkIG5vbmVtcHR5IGVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAiY3JlYXRlIGZpbGVzIHRvIGJlIGRlbGV0ZWQiICYmCisJZ2l0IHJtIC0tY2FjaGVkIG5vbmVtcHR5IGVtcHR5ICYmCisJZ2l0IGFkZCAtTiBub25lbXB0eSBlbXB0eSAmJgorCWdpdCByZXN0b3JlIC0tc3RhZ2VkIG5vbmVtcHR5IGVtcHR5ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdG9yZSAtLXN0YWdlZCBpbnZhbGlkYXRlcyBjYWNoZSB0cmVlIGZvciBkZWxldGlvbnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5uZXcxICYmCisJPm5ldzIgJiYKKwlnaXQgYWRkIG5ldzEgbmV3MiAmJgorCisJIyBJdCBpcyBpbXBvcnRhbnQgdG8gY29tbWl0IGFuZCB0aGVuIHJlc2V0IGhlcmUsIHNvIHRoYXQgdGhlIGluZGV4CisJIyBjb250YWlucyBhIHZhbGlkIGNhY2hlLXRyZWUgZm9yIHRoZSAiYm90aCIgdHJlZS4KKwlnaXQgY29tbWl0IC1tIGJvdGggJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUReICYmCisKKwlnaXQgcmVzdG9yZSAtLXN0YWdlZCBuZXcxICYmCisJZ2l0IGNvbW1pdCAtbSAianVzdCBuZXcyIiAmJgorCWdpdCByZXYtcGFyc2UgSEVBRDpuZXcyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOm5ldzEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDcxLXJlc3RvcmUtcGF0Y2guc2ggYi90L3QyMDcxLXJlc3RvcmUtcGF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOThiMjQ3NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwNzEtcmVzdG9yZS1wYXRjaC5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXN0b3JlIC0tcGF0Y2gnCisKKy4gLi9saWItcGF0Y2gtbW9kZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwJyAnCisJbWtkaXIgZGlyICYmCisJZWNobyBwYXJlbnQgPmRpci9mb28gJiYKKwllY2hvIGR1bW15ID5iYXIgJiYKKwlnaXQgYWRkIGJhciBkaXIvZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGRpci9mb28gaGVhZCAmJgorCXNldF9hbmRfc2F2ZV9zdGF0ZSBiYXIgYmFyX3dvcmsgYmFyX2luZGV4ICYmCisJc2F2ZV9oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncmVzdG9yZSAtcCB3aXRob3V0IHBhdGhzcGVjIGlzIGZpbmUnICcKKwllY2hvIHEgPmNtZCAmJgorCWdpdCByZXN0b3JlIC1wIDxjbWQKKycKKworIyBub3RlOiBiYXIgc29ydHMgYmVmb3JlIGRpci9mb28sIHNvIHRoZSBmaXJzdCAnbicgaXMgYWx3YXlzIHRvIHNraXAgJ2JhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzYXlpbmcgIm4iIGRvZXMgbm90aGluZycgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiBuIHwgZ2l0IHJlc3RvcmUgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzdG9yZSAtcCcgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiB5IHwgZ2l0IHJlc3RvcmUgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc3RvcmUgLXAgd2l0aCBzdGFnZWQgY2hhbmdlcycgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG4geSB8IGdpdCByZXN0b3JlIC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGluZGV4IGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc3RvcmUgLXAgLS1zb3VyY2U9SEVBRCcgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJdGVzdF93cml0ZV9saW5lcyBuIHkgbiB8IGdpdCByZXN0b3JlIC1wIC0tc291cmNlPUhFQUQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXN0b3JlIC1wIC0tc291cmNlPUhFQUReJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCSMgdGhlIHRoaXJkIG4gaXMgdG8gZ2V0IG91dCBpbiBjYXNlIGl0IG1pc3Rha2VubHkgZG9lcyBub3QgYXBwbHkKKwl0ZXN0X3dyaXRlX2xpbmVzIG4geSBuIHwgZ2l0IHJlc3RvcmUgLXAgLS1zb3VyY2U9SEVBRF4gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gcGFyZW50IGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc3RvcmUgLXAgaGFuZGxlcyBkZWxldGlvbicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwlybSBkaXIvZm9vICYmCisJdGVzdF93cml0ZV9saW5lcyBuIHkgfCBnaXQgcmVzdG9yZSAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBpbmRleCBpbmRleAorJworCisjIFRoZSBpZGVhIGluIHRoZSByZXN0IGlzIHRoYXQgYmFyIHNvcnRzIGZpcnN0LCBzbyB3ZSBhbHdheXMgc2F5ICd5JworIyBmaXJzdCBhbmQgaWYgdGhlIHBhdGggbGltaXRlciBmYWlscyBpdCdsbCBhcHBseSB0byBiYXIgaW5zdGVhZCBvZgorIyBkaXIvZm9vLiAgVGhlcmUncyBhbHdheXMgYW4gZXh0cmEgJ24nIHRvIHJlamVjdCBlZGl0cyB0byBkaXIvZm9vIGluCisjIHRoZSBmYWlsdXJlIGNhc2UgKGFuZCB0aHVzIGdldCBvdXQgb2YgdGhlIGxvb3ApLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhdGggbGltaXRpbmcgd29ya3M6IGRpcicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIHwgZ2l0IHJlc3RvcmUgLXAgZGlyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhdGggbGltaXRpbmcgd29ya3M6IC0tIGRpcicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIHwgZ2l0IHJlc3RvcmUgLXAgLS0gZGlyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhdGggbGltaXRpbmcgd29ya3M6IEhFQUReIC0tIGRpcicgJworCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCSMgdGhlIHRoaXJkIG4gaXMgdG8gZ2V0IG91dCBpbiBjYXNlIGl0IG1pc3Rha2VubHkgZG9lcyBub3QgYXBwbHkKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiBuIHwgZ2l0IHJlc3RvcmUgLXAgLS1zb3VyY2U9SEVBRF4gLS0gZGlyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHBhcmVudCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogZm9vIGluc2lkZSBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJdGVzdF93cml0ZV9saW5lcyB5IG4gbiB8IChjZCBkaXIgJiYgZ2l0IHJlc3RvcmUgLXAgZm9vKSAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdub25lIG9mIHRoaXMgbW92ZWQgSEVBRCcgJworCXZlcmlmeV9zYXZlZF9oZWFkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjA3Mi1yZXN0b3JlLXBhdGhzcGVjLWZpbGUuc2ggYi90L3QyMDcyLXJlc3RvcmUtcGF0aHNwZWMtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZDQ3OTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjA3Mi1yZXN0b3JlLXBhdGhzcGVjLWZpbGUuc2gKQEAgLTAsMCArMSwxNjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZpbGUwICYmCisKKwllY2hvIDEgPmZpbGVBLnQgJiYKKwllY2hvIDEgPmZpbGVCLnQgJiYKKwllY2hvIDEgPmZpbGVDLnQgJiYKKwllY2hvIDEgPmZpbGVELnQgJiYKKwlnaXQgYWRkIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlcyAxIiAmJgorCisJZWNobyAyID5maWxlQS50ICYmCisJZWNobyAyID5maWxlQi50ICYmCisJZWNobyAyID5maWxlQy50ICYmCisJZWNobyAyID5maWxlRC50ICYmCisJZ2l0IGFkZCBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlsZXMgMiIgJiYKKworCWdpdCB0YWcgY2hlY2twb2ludAorJworCityZXN0b3JlX2NoZWNrcG9pbnQgKCkgeworCWdpdCByZXNldCAtLWhhcmQgY2hlY2twb2ludAorfQorCit2ZXJpZnlfZXhwZWN0ICgpIHsKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tdW50cmFja2VkLWZpbGVzPW5vIC0tIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgZnJvbSBzdGRpbicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZWNobyBmaWxlQS50IHwgZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXNvdXJjZT1IRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIGZpbGUnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCWdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1zb3VyY2U9SEVBRF4xICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFwwZmlsZUIudFwwIiB8IGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLS1wYXRoc3BlYy1maWxlLW51bCAtLXNvdXJjZT1IRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBmaWxlQS50CisJIE0gZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTEYgZGVsaW1pdGVycycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XG5maWxlQi50XG4iIHwgZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXNvdXJjZT1IRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBmaWxlQS50CisJIE0gZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gdHJhaWxpbmcgZGVsaW1pdGVyJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnQiIHwgZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXNvdXJjZT1IRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBmaWxlQS50CisJIE0gZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1JMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcclxuZmlsZUIudFxyXG4iIHwgZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXNvdXJjZT1IRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBmaWxlQS50CisJIE0gZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVvdGVzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmxpc3QgPDwtXEVPRiAmJgorCSJmaWxlXDEwMS50IgorCUVPRgorCisJZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLXNvdXJjZT1IRUFEXjEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMgbm90IGNvbXBhdGlibGUgd2l0aCAtLXBhdGhzcGVjLWZpbGUtbnVsJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmxpc3QgPDwtXEVPRiAmJgorCSJmaWxlXDEwMS50IgorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLXBhdGhzcGVjLWZpbGUtbnVsIC0tc291cmNlPUhFQUReMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IHRvdWNoZXMgd2hhdCB3YXMgbGlzdGVkJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVCLnRcbmZpbGVDLnRcbiIgfCBnaXQgcmVzdG9yZSAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC0tc291cmNlPUhFQUReMSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBNIGZpbGVCLnQKKwkgTSBmaWxlQy50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBjb25kaXRpb25zJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisJPmVtcHR5X2xpc3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRjaCAtLXNvdXJjZT1IRUFEXjEgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1zb3VyY2U9SEVBRF4xIC0tIGZpbGVBLnQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc3RvcmUgLS1wYXRoc3BlYy1maWxlLW51bCAtLXNvdXJjZT1IRUFEXjEgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXN0b3JlIC0tcGF0aHNwZWMtZnJvbS1maWxlPWVtcHR5X2xpc3QgLS1zb3VyY2U9SEVBRF4xIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAieW91IG11c3Qgc3BlY2lmeSBwYXRoKHMpIHRvIHJlc3RvcmUiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDAtdXBkYXRlLWNhY2hlLWJhZHBhdGguc2ggYi90L3QyMTAwLXVwZGF0ZS1jYWNoZS1iYWRwYXRoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkZjNmZGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTAwLXVwZGF0ZS1jYWNoZS1iYWRwYXRoLnNoCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHVwZGF0ZS1pbmRleCBub25zZW5zZS1wYXRoIHRlc3QuCisKK1RoaXMgdGVzdCBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBjYWNoZToKKworICAgIHBhdGgwICAgICAgIC0gYSBmaWxlCisgICAgcGF0aDEgICAgICAgLSBhIHN5bWxpbmsKKyAgICBwYXRoMi9maWxlMiAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgzL2ZpbGUzIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisKK2FuZCB0cmllcyB0byBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRoZSBmb2xsb3dpbmc6CisKKyAgICBwYXRoMC9maWxlMCAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgxL2ZpbGUxIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDIgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMyAgICAgICAtIGEgc3ltbGluaworCitBbGwgb2YgdGhlIGF0dGVtcHRzIHNob3VsZCBmYWlsLgorJworCisuIC4vdGVzdC1saWIuc2gKKworbWtkaXIgcGF0aDIgcGF0aDMKK2RhdGUgPnBhdGgwCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJbG4gLXMgeHl6enkgcGF0aDEKK2Vsc2UKKwlkYXRlID4gcGF0aDEKK2ZpCitkYXRlID5wYXRoMi9maWxlMgorZGF0ZSA+cGF0aDMvZmlsZTMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgdG8gYWRkIHZhcmlvdXMgcGF0aHMuJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gcGF0aDAgcGF0aDEgcGF0aDIvZmlsZTIgcGF0aDMvZmlsZTMnCisKK3JtIC1mciBwYXRoPworCitta2RpciBwYXRoMCBwYXRoMQorZGF0ZSA+cGF0aDIKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlsbiAtcyBmcm90eiBwYXRoMworZWxzZQorCWRhdGUgPiBwYXRoMworZmkKK2RhdGUgPnBhdGgwL2ZpbGUwCitkYXRlID5wYXRoMS9maWxlMQorCitmb3IgcCBpbiBwYXRoMC9maWxlMCBwYXRoMS9maWxlMSBwYXRoMiBwYXRoMworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkgICAgImdpdCB1cGRhdGUtaW5kZXggdG8gYWRkIGNvbmZsaWN0aW5nIHBhdGggJHAgc2hvdWxkIGZhaWwuIiBcCisJICAgICJ0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tICRwIgorZG9uZQordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTAxLXVwZGF0ZS1pbmRleC1yZXVwZGF0ZS5zaCBiL3QvdDIxMDEtdXBkYXRlLWluZGV4LXJldXBkYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjMzJkNDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTAxLXVwZGF0ZS1pbmRleC1yZXVwZGF0ZS5zaApAQCAtMCwwICsxLDkxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggLS1hZ2FpbiB0ZXN0LgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tYWRkJyAnCisJZWNobyBoZWxsbyB3b3JsZCA+ZmlsZTEgJiYKKwllY2hvIGdvb2RieWUgcGVvcGxlID5maWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTEgZmlsZTIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgMAlmaWxlMQorCTEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCBmaWxlMikgMAlmaWxlMgorCUVPRgorCWNtcCBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLWFnYWluJyAnCisJcm0gLWYgZmlsZTEgJiYKKwllY2hvIGhlbGxvIGV2ZXJ5Ym9keSA+ZmlsZTIgJiYKKwlpZiBnaXQgdXBkYXRlLWluZGV4IC0tYWdhaW4KKwl0aGVuCisJCWVjaG8gc2hvdWxkIGhhdmUgcmVmdXNlZCB0byByZW1vdmUgZmlsZTEKKwkJZXhpdCAxCisJZWxzZQorCQllY2hvIGhhcHB5IC0gZmFpbGVkIGFzIGV4cGVjdGVkCisJZmkgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQgJiYKKwljbXAgY3VycmVudCBleHBlY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1hZ2FpbicgJworCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1hZ2FpbiAmJgorCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJMTAwNjQ0ICQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUyKSAwCWZpbGUyCisJRU9GCisJY21wIGN1cnJlbnQgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgY29tbWl0JyAnZ2l0IGNvbW1pdCAtbSBpbml0aWFsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggYWdhaW4nICcKKwlta2RpciAtcCBkaXIxICYmCisJZWNobyBoZWxsbyB3b3JsZCA+ZGlyMS9maWxlMyAmJgorCWVjaG8gZ29vZGJ5ZSBwZW9wbGUgPmZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMiBkaXIxL2ZpbGUzICYmCisJZWNobyBoZWxsbyBldmVyeWJvZHkgPmZpbGUyICYmCisJZWNobyBoYXBweSA+ZGlyMS9maWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZ2FpbiAmJgorCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJMTAwNjQ0ICQoZ2l0IGhhc2gtb2JqZWN0IGRpcjEvZmlsZTMpIDAJZGlyMS9maWxlMworCTEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCBmaWxlMikgMAlmaWxlMgorCUVPRgorCWNtcCBjdXJyZW50IGV4cGVjdGVkCisnCisKK2ZpbGUyPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUyKQordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tdXBkYXRlIGZyb20gc3ViZGlyJyAnCisJZWNobyBub3Qgc28gaGFwcHkgPmZpbGUyICYmCisJKGNkIGRpcjEgJiYKKwljYXQgLi4vZmlsZTIgPmZpbGUzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluCisJKSAmJgorCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJMTAwNjQ0ICQoZ2l0IGhhc2gtb2JqZWN0IGRpcjEvZmlsZTMpIDAJZGlyMS9maWxlMworCTEwMDY0NCAkZmlsZTIgMAlmaWxlMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tdXBkYXRlIHdpdGggcGF0aHNwZWMnICcKKwllY2hvIHZlcnkgaGFwcHkgPmZpbGUyICYmCisJY2F0IGZpbGUyID5kaXIxL2ZpbGUzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluIGRpcjEvICYmCisJZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkxMDA2NDQgJChnaXQgaGFzaC1vYmplY3QgZGlyMS9maWxlMykgMAlkaXIxL2ZpbGUzCisJMTAwNjQ0ICRmaWxlMiAwCWZpbGUyCisJRU9GCisJY21wIGN1cnJlbnQgZXhwZWN0ZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTAyLXVwZGF0ZS1pbmRleC1zeW1saW5rcy5zaCBiL3QvdDIxMDItdXBkYXRlLWluZGV4LXN5bWxpbmtzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyZjJjNzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTAyLXVwZGF0ZS1pbmRleC1zeW1saW5rcy5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIFNpeHQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHVwZGF0ZS1pbmRleCBvbiBmaWxlc3lzdGVtIHcvbyBzeW1saW5rcyB0ZXN0LgorCitUaGlzIHRlc3RzIHRoYXQgZ2l0IHVwZGF0ZS1pbmRleCBrZWVwcyB0aGUgc3ltYm9saWMgbGluayBwcm9wZXJ0eQorZXZlbiBpZiBhIHBsYWluIGZpbGUgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBpZiBjb3JlLnN5bWxpbmtzIGlzIGZhbHNlLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3ByZXBhcmF0aW9uJyAnCitnaXQgY29uZmlnIGNvcmUuc3ltbGlua3MgZmFsc2UgJiYKK2w9JChwcmludGYgZmlsZSB8IGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IC0tc3RkaW4pICYmCitlY2hvICIxMjAwMDAgJGwJc3ltbGluayIgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnbW9kaWZ5IHRoZSBzeW1ib2xpYyBsaW5rJyAnCitwcmludGYgbmV3LWZpbGUgPiBzeW1saW5rICYmCitnaXQgdXBkYXRlLWluZGV4IHN5bWxpbmsnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3RoZSBpbmRleCBlbnRyeSBtdXN0IHN0aWxsIGJlIGEgc3ltYm9saWMgbGluaycgJworY2FzZSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLWNhY2hlZCBzeW1saW5rKSIgaW4KKzEyMDAwMCIgIipzeW1saW5rKSBlY2hvIHBhc3M7OworKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLWNhY2hlZCBzeW1saW5rOyAoZXhpdCAxKTs7Citlc2FjJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoIGIvdC90MjEwMy11cGRhdGUtaW5kZXgtaWdub3JlLW1pc3Npbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDExNGYwNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1cGRhdGUtaW5kZXggd2l0aCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBiYXNpY3MgJworCT5vbmUgJiYKKwk+dHdvICYmCisJPnRocmVlICYmCisKKwkjIG5lZWQgLS1hZGQgd2hlbiBhZGRpbmcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IG9uZSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgorCXRlc3Qgem9uZSA9ICJ6JChnaXQgbHMtZmlsZXMpIiAmJgorCisJIyB1cGRhdGUtaW5kZXggaXMgYXRvbWljCisJZWNobyAxID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IG9uZSB0d28gJiYKKwllY2hvICJNCW9uZSIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lIHR3byB0aHJlZSAmJgorCWZvciBpIGluIG9uZSB0aHJlZSB0d287IGRvIGVjaG8gJGk7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF90aWNrICYmCisJKAorCQl0ZXN0X2NyZWF0ZV9yZXBvIHh5enp5ICYmCisJCWNkIHh5enp5ICYmCisJCT5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJzdWIgaW5pdGlhbCIKKwkpICYmCisJZ2l0IGFkZCB4eXp6eSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyAyID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWVjaG8gMSA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlybSAtZiB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVubWVyZ2VkIC0tcmVmcmVzaCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWluZm89JChnaXQgbHMtZmlsZXMgLXMgb25lIHwgc2VkIC1lICJzLyAwCS8gMQkvIikgJiYKKwlnaXQgcm0gLS1jYWNoZWQgb25lICYmCisJZWNobyAiJGluZm8iIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS11bm1lcmdlZCAtLXJlZnJlc2ggJiYKKwllY2hvIDIgPnR3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS11bm1lcmdlZCAtLXJlZnJlc2ggPmFjdHVhbCAmJgorCWdyZXAgdHdvIGFjdHVhbCAmJgorCSEgZ3JlcCBvbmUgYWN0dWFsICYmCisJISBncmVwIHRocmVlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCAoMSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlybSAtZiB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoICgyKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgeHl6enkgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIHNlY29uZCIgLS1hbGxvdy1lbXB0eQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwNC11cGRhdGUtaW5kZXgtc2tpcC13b3JrdHJlZS5zaCBiL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2UyZTdkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3NraXAtd29ya3RyZWUgYml0IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitzYW5lX3Vuc2V0IEdJVF9URVNUX1NQTElUX0lOREVYCisKK3Rlc3Rfc2V0X2luZGV4X3ZlcnNpb24gMworCitjYXQgPmV4cGVjdC5mdWxsIDw8RU9GCitIIDEKK0ggMgorSCBzdWIvMQorSCBzdWIvMgorRU9GCisKK2NhdCA+ZXhwZWN0LnNraXAgPDxFT0YKK1MgMQorSCAyCitTIHN1Yi8xCitIIHN1Yi8yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBzdWIgJiYKKwl0b3VjaCAuLzEgLi8yIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IGFkZCAxIDIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgbHMtZmlsZXMgLXQgfCB0ZXN0X2NtcCBleHBlY3QuZnVsbCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IGlzIGF0IHZlcnNpb24gMicgJworCXRlc3QgIiQodGVzdC10b29sIGluZGV4LXZlcnNpb24gPCAuZ2l0L2luZGV4KSIgPSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxIHN1Yi8xICYmCisJZ2l0IGxzLWZpbGVzIC10IHwgdGVzdF9jbXAgZXhwZWN0LnNraXAgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBpcyBhdCB2ZXJzaW9uIDMgYWZ0ZXIgaGF2aW5nIHNvbWUgc2tpcC13b3JrdHJlZSBlbnRyaWVzJyAnCisJdGVzdCAiJCh0ZXN0LXRvb2wgaW5kZXgtdmVyc2lvbiA8IC5naXQvaW5kZXgpIiA9IDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLXQnICcKKwlnaXQgbHMtZmlsZXMgLXQgfCB0ZXN0X2NtcCBleHBlY3Quc2tpcCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSAxIHN1Yi8xICYmCisJZ2l0IGxzLWZpbGVzIC10IHwgdGVzdF9jbXAgZXhwZWN0LmZ1bGwgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCB2ZXJzaW9uIGlzIGJhY2sgdG8gMiB3aGVuIHRoZXJlIGlzIG5vIHNraXAtd29ya3RyZWUgZW50cnknICcKKwl0ZXN0ICIkKHRlc3QtdG9vbCBpbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDUtdXBkYXRlLWluZGV4LWdpdGZpbGUuc2ggYi90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3ZjNkNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQnJhZCBLaW5nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggZm9yIGdpdGxpbmsgdG8gLmdpdCBmaWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggYWJzb2x1dGUgLmdpdCBmaWxlJyAnCisJbWtkaXIgc3ViMSAmJgorCShjZCBzdWIxICYmCisJIGdpdCBpbml0ICYmCisJIFJFQUw9IiQocHdkKS8ucmVhbCIgJiYKKwkgbXYgLmdpdCAiJFJFQUwiICYmCisJIGVjaG8gImdpdGRpcjogJFJFQUwiID4uZ2l0ICYmCisJIHRlc3RfY29tbWl0IGZpcnN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZ2l0bGluayB0byBhYnNvbHV0ZSAuZ2l0IGZpbGUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHN1YjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggcmVsYXRpdmUgLmdpdCBmaWxlJyAnCisJbWtkaXIgc3ViMiAmJgorCShjZCBzdWIyICYmCisJIGdpdCBpbml0ICYmCisJIG12IC5naXQgLnJlYWwgJiYKKwkgZWNobyAiZ2l0ZGlyOiAucmVhbCIgPi5naXQgJiYKKwkgdGVzdF9jb21taXQgZmlyc3QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBnaXRsaW5rIHRvIHJlbGF0aXZlIC5naXQgZmlsZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gc3ViMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDYtdXBkYXRlLWluZGV4LWFzc3VtZS11bmNoYW5nZWQuc2ggYi90L3QyMTA2LXVwZGF0ZS1pbmRleC1hc3N1bWUtdW5jaGFuZ2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5ZDg1OGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA2LXVwZGF0ZS1pbmRleC1hc3N1bWUtdW5jaGFuZ2VkLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCB0ZXN0LgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnIFwKKwknOiA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJIGdpdCBicmFuY2ggb3RoZXIgJiYKKwkgZWNobyB1cHN0cmVhbSA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSB1cHN0cmVhbScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHN3aXRjaCBicmFuY2hlcyB3aXRoIGRpcnR5IGZpbGUnIFwKKwknZ2l0IHJlc2V0IC0taGFyZCAmJgorCSBnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwkgZWNobyBkaXJ0ID5maWxlICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIGZpbGUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IG1hc3RlcicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTA3LXVwZGF0ZS1pbmRleC1iYXNpYy5zaCBiL3QvdDIxMDctdXBkYXRlLWluZGV4LWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzMGI3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA3LXVwZGF0ZS1pbmRleC1iYXNpYy5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgdXBkYXRlLWluZGV4IHRlc3RzCisKK1Rlc3RzIGZvciBjb21tYW5kLWxpbmUgcGFyc2luZyBhbmQgYmFzaWMgb3BlcmF0aW9uLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgMj5tc2cgJiYKKwl0ZXN0IC1zIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1ub25zZW5zZSBkdW1wcyB1c2FnZScgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCB1cGRhdGUtaW5kZXggLS1ub25zZW5zZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgdXBkYXRlLWluZGV4IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC1oIHdpdGggY29ycnVwdCBpbmRleCcgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCT4uZ2l0L2luZGV4ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCB1cGRhdGUtaW5kZXggLWggPnVzYWdlIDI+JjEKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2U6IGdpdCB1cGRhdGUtaW5kZXgiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNhY2hlaW5mbyBjb21wbGFpbnMgb2YgbWlzc2luZyBhcmd1bWVudHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2FjaGVpbmZvIGRvZXMgbm90IGFjY2VwdCBibG9iIG51bGwgc2hhMScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCByZXYtcGFyc2UgOmZpbGUgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTAwNjQ0ICRaRVJPX09JRCBmaWxlICYmCisJZ2l0IHJldi1wYXJzZSA6ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNhY2hlaW5mbyBkb2VzIG5vdCBhY2NlcHQgZ2l0bGluayBudWxsIHNoYTEnICcKKwlnaXQgaW5pdCBzdWJtb2R1bGUgJiYKKwkoY2Qgc3VibW9kdWxlICYmIHRlc3RfY29tbWl0IGZvbykgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCByZXYtcGFyc2UgOnN1Ym1vZHVsZSA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJFpFUk9fT0lEIHN1Ym1vZHVsZSAmJgorCWdpdCByZXYtcGFyc2UgOnN1Ym1vZHVsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNhY2hlaW5mbyBtb2RlLHNoYTEscGF0aCAobmV3IHN5bnRheCknICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8ZmlsZSA+ZXhwZWN0ICYmCisKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAiJChjYXQgZXhwZWN0KSIgZmlsZSAmJgorCWdpdCByZXYtcGFyc2UgOmZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gIjEwMDY0NCwkKGNhdCBleHBlY3QpLGVsaWYiICYmCisJZ2l0IHJldi1wYXJzZSA6ZWxpZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcubG9jayBmaWxlcyBjbGVhbmVkIHVwJyAnCisJbWtkaXIgY2xlYW51cCAmJgorCSgKKwljZCBjbGVhbnVwICYmCisJbWtkaXIgd29ya3RyZWUgJiYKKwlnaXQgaW5pdCByZXBvICYmCisJY2QgcmVwbyAmJgorCWdpdCBjb25maWcgY29yZS53b3JrdHJlZSAuLi8uLi93b3JrdHJlZSAmJgorCSMgLS1yZWZyZXNoIHRyaWdnZXJzIGxhdGUgc2V0dXBfd29ya190cmVlLAorCSMgYWN0aXZlX2NhY2hlX2NoYW5nZWQgaXMgemVybywgcm9sbGJhY2tfbG9ja19maWxlIGZhaWxzCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkhIHRlc3QgLWYgLmdpdC9pbmRleC5sb2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNobW9kPSt4IGFuZCBjaG1vZD0teCBpbiB0aGUgc2FtZSBhcmd1bWVudCBsaXN0JyAnCisJPkEgJiYKKwk+QiAmJgorCWdpdCBhZGQgQSBCICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNobW9kPSt4IEEgLS1jaG1vZD0teCBCICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTAwNzU1ICRFTVBUWV9CTE9CIDAJQQorCTEwMDY0NCAkRU1QVFlfQkxPQiAwCUIKKwlFT0YKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSBBIEIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMjAwLWFkZC11cGRhdGUuc2ggYi90L3QyMjAwLWFkZC11cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjc2NGI3ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaApAQCAtMCwwICsxLDE4NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhZGQgLXUKKworVGhpcyB0ZXN0IGNyZWF0ZXMgYSB3b3JraW5nIHRyZWUgc3RhdGUgd2l0aCB0aHJlZSBmaWxlczoKKworICB0b3AgKHByZXZpb3VzbHkgY29tbWl0dGVkLCBtb2RpZmllZCkKKyAgZGlyL3N1YiAocHJldmlvdXNseSBjb21taXR0ZWQsIG1vZGlmaWVkKQorICBkaXIvb3RoZXIgKHVudHJhY2tlZCkKKworYW5kIGlzc3VlcyBhIGdpdCBhZGQgLXUgd2l0aCBwYXRoIGxpbWl0aW5nIG9uICJkaXIiIHRvIGFkZAorb25seSB0aGUgdXBkYXRlcyB0byBkaXIvc3ViLgorCitBbHNvIHRlc3RlZCBhcmUgImdpdCBhZGQgLXUiIHdpdGhvdXQgbGltaXRpbmcsIGFuZCAiZ2l0IGFkZCAtdSIKK3dpdGhvdXQgY29udGVudHMgY2hhbmdlcywgYW5kIG90aGVyIGNvbmRpdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGluaXRpYWwgPmNoZWNrICYmCisJZWNobyBpbml0aWFsID50b3AgJiYKKwllY2hvIGluaXRpYWwgPmZvbyAmJgorCW1rZGlyIGRpcjEgZGlyMiAmJgorCWVjaG8gaW5pdGlhbCA+ZGlyMS9zdWIxICYmCisJZWNobyBpbml0aWFsID5kaXIxL3N1YjIgJiYKKwllY2hvIGluaXRpYWwgPmRpcjIvc3ViMyAmJgorCWdpdCBhZGQgY2hlY2sgZGlyMSBkaXIyIHRvcCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWVjaG8gY2hhbmdlZCA+Y2hlY2sgJiYKKwllY2hvIGNoYW5nZWQgPnRvcCAmJgorCWVjaG8gY2hhbmdlZCA+ZGlyMi9zdWIzICYmCisJcm0gLWYgZGlyMS9zdWIxICYmCisJZWNobyBvdGhlciA+ZGlyMi9vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHVwZGF0ZSAnCisJZ2l0IGFkZCAtdSBkaXIxIGRpcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIG5vdGljZWQgYSByZW1vdmFsJyAnCisJdGVzdCAiJChnaXQgbHMtZmlsZXMgZGlyMS9zdWIxKSIgPSAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgdG91Y2hlZCBjb3JyZWN0IHBhdGgnICcKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgZGlyMi9zdWIzKSIgPSAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZGlkIG5vdCB0b3VjaCBvdGhlciB0cmFja2VkIGZpbGVzJyAnCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzIGNoZWNrKSIgPSAiTQljaGVjayIgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgdG9wKSIgPSAiTQl0b3AiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBkaWQgbm90IHRvdWNoIHVudHJhY2tlZCBmaWxlcycgJworCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIGRpcjIvb3RoZXIpIiA9ICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhY2hlIHRyZWUgaGFzIG5vdCBiZWVuIGNvcnJ1cHRlZCcgJworCisJZ2l0IGxzLWZpbGVzIC1zIHwKKwlzZWQgLWUgInMvIDAJLwkvIiA+ZXhwZWN0ICYmCisJZ2l0IGxzLXRyZWUgLXIgJChnaXQgd3JpdGUtdHJlZSkgfAorCXNlZCAtZSAicy8gYmxvYiAvIC8iID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZnJvbSBhIHN1YmRpcmVjdG9yeScgJworCSgKKwkJY2QgZGlyMSAmJgorCQllY2hvIG1vcmUgPnN1YjIgJiYKKwkJZ2l0IGFkZCAtdSBzdWIyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2UgZ2V0cyBub3RpY2VkJyAnCisKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgZGlyMSkiID0gIiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tcXVhbGlmaWVkIHVwZGF0ZSBpbiBzdWJkaXIgdXBkYXRlcyBmcm9tIHRoZSByb290JyAnCisJKAorCQljZCBkaXIxICYmCisJCWVjaG8gZXZlbiBtb3JlID4+c3ViMiAmJgorCQlnaXQgLS1saXRlcmFsLXBhdGhzcGVjcyBhZGQgLXUgJiYKKwkJZWNobyBldmVuIG1vcmUgPj5zdWIyICYmCisJCWdpdCBhZGQgLXUKKwkpICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSBhIGZpbGUgd2l0aCBhIHN5bWxpbmsnICcKKworCXJtIGZvbyAmJgorCXRlc3RfbG5fc19hZGQgdG9wIGZvbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBldmVyeXRoaW5nIGNoYW5nZWQnICcKKworCWdpdCBhZGQgLXUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b3VjaCBhbmQgdGhlbiBhZGQgLXUnICcKKworCXRvdWNoIGNoZWNrICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYtZmlsZXMpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvdWNoIGFuZCB0aGVuIGFkZCBleHBsaWNpdGx5JyAnCisKKwl0b3VjaCBjaGVjayAmJgorCWdpdCBhZGQgY2hlY2sgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLW4gLXUgc2hvdWxkIG5vdCBhZGQgYnV0IGp1c3QgcmVwb3J0JyAnCisKKwkoCisJCWVjaG8gImFkZCAnXCcnY2hlY2snXCcnIiAmJgorCQllY2hvICJyZW1vdmUgJ1wnJ3RvcCdcJyciCisJKSA+ZXhwZWN0ICYmCisJYmVmb3JlPSQoZ2l0IGxzLWZpbGVzIC1zIGNoZWNrIHRvcCkgJiYKKwllY2hvIGNoYW5nZWQgPj5jaGVjayAmJgorCXJtIC1mIHRvcCAmJgorCWdpdCBhZGQgLW4gLXUgPmFjdHVhbCAmJgorCWFmdGVyPSQoZ2l0IGxzLWZpbGVzIC1zIGNoZWNrIHRvcCkgJiYKKworCXRlc3QgIiRiZWZvcmUiID0gIiRhZnRlciIgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtdSByZXNvbHZlcyB1bm1lcmdlZCBwYXRocycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlvbmU9JChlY2hvIDEgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl0d289JChlY2hvIDIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl0aHJlZT0kKGVjaG8gMyB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXsKKwkJZm9yIHBhdGggaW4gcGF0aDEgcGF0aDIKKwkJZG8KKwkJCWVjaG8gIjEwMDY0NCAkb25lIDEJJHBhdGgiCisJCQllY2hvICIxMDA2NDQgJHR3byAyCSRwYXRoIgorCQkJZWNobyAiMTAwNjQ0ICR0aHJlZSAzCSRwYXRoIgorCQlkb25lCisJCWVjaG8gIjEwMDY0NCAkb25lIDEJcGF0aDMiCisJCWVjaG8gIjEwMDY0NCAkb25lIDEJcGF0aDQiCisJCWVjaG8gIjEwMDY0NCAkb25lIDMJcGF0aDUiCisJCWVjaG8gIjEwMDY0NCAkb25lIDMJcGF0aDYiCisJfSB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwllY2hvIDMgPnBhdGgxICYmCisJZWNobyAyID5wYXRoMyAmJgorCWVjaG8gMiA+cGF0aDUgJiYKKworCSMgRmFpbCB0byBleHBsaWNpdGx5IHJlc29sdmUgcmVtb3ZlZCBwYXRocyB3aXRoICJnaXQgYWRkIgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1uby1hbGwgcGF0aDQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tbm8tYWxsIHBhdGg2ICYmCisKKwkjICJhZGQgLXUiIHNob3VsZCBub3RpY2UgcmVtb3ZhbHMgbm8gbWF0dGVyIHdoYXQgc3RhZ2VzCisJIyB0aGUgaW5kZXggZW50cmllcyBhcmUgaW4uCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBscy1maWxlcyAtcyBwYXRoMSBwYXRoMiBwYXRoMyBwYXRoNCBwYXRoNSBwYXRoNiA+YWN0dWFsICYmCisJeworCQllY2hvICIxMDA2NDQgJHRocmVlIDAJcGF0aDEiCisJCWVjaG8gIjEwMDY0NCAkdHdvIDAJcGF0aDMiCisJCWVjaG8gIjEwMDY0NCAkdHdvIDAJcGF0aDUiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIC11IG5vbi1leGlzdGVudCIgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC11IG5vbi1leGlzdGVudCAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIm5vbi1leGlzdGVudCIpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwMS1hZGQtdXBkYXRlLXR5cGVjaGFuZ2Uuc2ggYi90L3QyMjAxLWFkZC11cGRhdGUtdHlwZWNoYW5nZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNGVlYzBhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjIwMS1hZGQtdXBkYXRlLXR5cGVjaGFuZ2Uuc2gKQEAgLTAsMCArMSwxNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtb3JlIGdpdCBhZGQgLXUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+eHl6enkgJiYKKwlfZW1wdHk9JChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8eHl6enkpICYmCisJPnlvbWluICYmCisJPmNhc2tseSAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJbG4gLXMgZnJvdHogbml0Zm9sICYmCisJCVRfbGV0dGVyPVQKKwllbHNlCisJCXByaW50ZiAlcyBmcm90eiA+IG5pdGZvbCAmJgorCQlUX2xldHRlcj1NCisJZmkgJiYKKwlta2RpciByZXpyb3YgJiYKKwk+cmV6cm92L2JvemJhciAmJgorCWdpdCBhZGQgY2Fza2x5IHh5enp5IHlvbWluIG5pdGZvbCByZXpyb3YvYm96YmFyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG1vZGlmeSAnCisJcm0gLWYgeHl6enkgeW9taW4gbml0Zm9sIGNhc2tseSAmJgorCSMgY2Fza2x5IGRpc2FwcGVhcnMgKG5vdCBhIHN1Ym1vZHVsZSkKKwlta2RpciBjYXNrbHkgJiYKKwkjIG5pdGZvbCBjaGFuZ2VzIGZyb20gc3ltbGluayB0byByZWd1bGFyCisJPm5pdGZvbCAmJgorCSMgcmV6cm92L2JvemJhciBkaXNhcHBlYXJzCisJcm0gLWZyIHJlenJvdiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1M7IHRoZW4KKwkJbG4gLXMgeHl6enkgcmV6cm92CisJZWxzZQorCQlwcmludGYgJXMgeHl6enkgPiByZXpyb3YKKwlmaSAmJgorCSMgeHl6enkgZGlzYXBwZWFycyAobm90IGEgc3VibW9kdWxlKQorCW1rZGlyIHh5enp5ICYmCisJZWNobyBnbnVzdG8gPnh5enp5L2JvemJhciAmJgorCSMgeW9taW4gZ2V0cyByZXBsYWNlZCB3aXRoIGEgc3VibW9kdWxlCisJbWtkaXIgeW9taW4gJiYKKwk+eW9taW4veW9taW4gJiYKKwkoCisJCWNkIHlvbWluICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhZGQgeW9taW4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIGluaXRpYWwiCisJKSAmJgorCXlvbWluPSQoR0lUX0RJUj15b21pbi8uZ2l0IGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkjIHlvbmsgaXMgYWRkZWQgYW5kIHRoZW4gdHVybmVkIGludG8gYSBzdWJtb2R1bGUKKwkjIHRoaXMgc2hvdWxkIGFwcGVhciBhcyBUIGluIGRpZmYtZmlsZXMgYW5kIGFzIEEgaW4gZGlmZi1pbmRleAorCT55b25rICYmCisJZ2l0IGFkZCB5b25rICYmCisJcm0gLWYgeW9uayAmJgorCW1rZGlyIHlvbmsgJiYKKwk+eW9uay95b25rICYmCisJKAorCQljZCB5b25rICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhZGQgeW9uayAmJgorCQlnaXQgY29tbWl0IC1tICJzdWIgaW5pdGlhbCIKKwkpICYmCisJeW9uaz0kKEdJVF9ESVI9eW9uay8uZ2l0IGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkjIHppZm1pYSBpcyBhZGRlZCBhbmQgdGhlbiByZW1vdmVkCisJIyB0aGlzIHNob3VsZCBhcHBlYXIgaW4gZGlmZi1maWxlcyBidXQgbm90IGluIGRpZmYtaW5kZXguCisJPnppZm1pYSAmJgorCWdpdCBhZGQgemlmbWlhICYmCisJcm0gLWYgemlmbWlhICYmCisJbWtkaXIgemlmbWlhICYmCisJeworCQlnaXQgbHMtdHJlZSAtciBIRUFEIHwKKwkJc2VkIC1lICJzL14vOi8iIC1lICIKKwkJCS8JY2Fza2x5L3sKKwkJCQlzLwljYXNrbHkvICRaRVJPX09JRCBEJi8KKwkJCQlzL2Jsb2IvMDAwMDAwLworCQkJfQorCQkJLwluaXRmb2wveworCQkJCXMvCW5pdGZvbC8gJFpFUk9fT0lEICRUX2xldHRlciYvCisJCQkJcy9ibG9iLzEwMDY0NC8KKwkJCX0KKwkJCS8JcmV6cm92LmJvemJhci97CisJCQkJcy8JcmV6cm92LmJvemJhci8gJFpFUk9fT0lEIEQmLworCQkJCXMvYmxvYi8wMDAwMDAvCisJCQl9CisJCQkvCXh5enp5L3sKKwkJCQlzLwl4eXp6eS8gJFpFUk9fT0lEIEQmLworCQkJCXMvYmxvYi8wMDAwMDAvCisJCQl9CisJCQkvCXlvbWluL3sKKwkJCSAgICBzLwl5b21pbi8gJFpFUk9fT0lEIFQmLworCQkJCXMvYmxvYi8xNjAwMDAvCisJCQl9CisJCSIKKwl9ID5leHBlY3QgJiYKKwl7CisJCWNhdCBleHBlY3QKKwkJZWNobyAiOjEwMDY0NCAxNjAwMDAgJF9lbXB0eSAkWkVST19PSUQgVAl5b25rIgorCQllY2hvICI6MTAwNjQ0IDAwMDAwMCAkX2VtcHR5ICRaRVJPX09JRCBECXppZm1pYSIKKwl9ID5leHBlY3QtZmlsZXMgJiYKKwl7CisJCWNhdCBleHBlY3QKKwkJZWNobyAiOjAwMDAwMCAxNjAwMDAgJFpFUk9fT0lEICRaRVJPX09JRCBBCXlvbmsiCisJfSA+ZXhwZWN0LWluZGV4ICYmCisJeworCQllY2hvICIxMDA2NDQgJF9lbXB0eSAwCW5pdGZvbCIKKwkJZWNobyAiMTYwMDAwICR5b21pbiAwCXlvbWluIgorCQllY2hvICIxNjAwMDAgJHlvbmsgMAl5b25rIgorCX0gPmV4cGVjdC1maW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGRpZmYtZmlsZXMgJworCWdpdCBkaWZmLWZpbGVzIC0tcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtZmlsZXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgZGlmZi1pbmRleCAnCisJZ2l0IGRpZmYtaW5kZXggLS1yYXcgSEVBRCAtLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWluZGV4IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLXUnICcKKwlybSAtZiAiLmdpdC9zYXZlZC1pbmRleCIgJiYKKwljcCAtcCAiLmdpdC9pbmRleCIgIi5naXQvc2F2ZWQtaW5kZXgiICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWZpbmFsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLWEnICcKKwlpZiB0ZXN0IC1mICIuZ2l0L3NhdmVkLWluZGV4IgorCXRoZW4KKwkJcm0gLWYgIi5naXQvaW5kZXgiICYmCisJCW12ICIuZ2l0L3NhdmVkLWluZGV4IiAiLmdpdC9pbmRleCIKKwlmaSAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCIgLWEgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1maW5hbCBhY3R1YWwgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtZmluYWwgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwMi1hZGQtYWRkcmVtb3ZlLnNoIGIvdC90MjIwMi1hZGQtYWRkcmVtb3ZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllZTY1OTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMjAyLWFkZC1hZGRyZW1vdmUuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhZGQgLS1hbGwnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwkoCisJCWVjaG8gLmdpdGlnbm9yZSAmJgorCQllY2hvIHdpbGwtcmVtb3ZlCisJKSA+ZXhwZWN0ICYmCisJKAorCQllY2hvIGFjdHVhbCAmJgorCQllY2hvIGV4cGVjdCAmJgorCQllY2hvIGlnbm9yZWQKKwkpID4uZ2l0aWdub3JlICYmCisJZ2l0IC0tbGl0ZXJhbC1wYXRoc3BlY3MgYWRkIC0tYWxsICYmCisJPndpbGwtcmVtb3ZlICYmCisJZ2l0IGFkZCAtLWFsbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0tYWxsJyAnCisJKAorCQllY2hvIC5naXRpZ25vcmUgJiYKKwkJZWNobyBub3QtaWdub3JlZCAmJgorCQllY2hvICJNCS5naXRpZ25vcmUiICYmCisJCWVjaG8gIkEJbm90LWlnbm9yZWQiICYmCisJCWVjaG8gIkQJd2lsbC1yZW1vdmUiCisJKSA+ZXhwZWN0ICYmCisJPmlnbm9yZWQgJiYKKwk+bm90LWlnbm9yZWQgJiYKKwllY2hvIG1vZGlmaWNhdGlvbiA+Pi5naXRpZ25vcmUgJiYKKwlybSAtZiB3aWxsLXJlbW92ZSAmJgorCWdpdCBhZGQgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJZ2l0IGRpZmYtaW5kZXggLS1uYW1lLXN0YXR1cyAtLWNhY2hlZCBIRUFEID4+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdKdXN0ICJnaXQgYWRkIiBpcyBhIG5vLW9wJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPndpbGwtcmVtb3ZlICYmCisJPndpbGwtbm90LWJlLWFkZGVkICYmCisJZ2l0IGFkZCAmJgorCWdpdCBkaWZmLWluZGV4IC0tbmFtZS1zdGF0dXMgLS1jYWNoZWQgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDMtYWRkLWludGVudC5zaCBiL3QvdDIyMDMtYWRkLWludGVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YmJlOGRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjIwMy1hZGQtaW50ZW50LnNoCkBAIC0wLDAgKzEsMjc4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nSW50ZW50IHRvIGFkZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVudCB0byBhZGQnICcKKwl0ZXN0X2NvbW1pdCAxICYmCisJZ2l0IHJtIDEudCAmJgorCWVjaG8gaGVsbG8gPjEudCAmJgorCWVjaG8gaGVsbG8gPmZpbGUgJiYKKwllY2hvIGhlbGxvID5lbGlmICYmCisJZ2l0IGFkZCAtTiBmaWxlICYmCisJZ2l0IGFkZCBlbGlmICYmCisJZ2l0IGFkZCAtTiAxLnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXR1cycgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gfCBncmVwIC12IGFjdHVhbCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCURBIDEudAorCUEgIGVsaWYKKwkgQSBmaWxlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3RhdHVzIHdpdGggcG9yY2VsYWluIHYyJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiB8IGdyZXAgLXYgIl4/IiA+YWN0dWFsICYmCisJbmFtMT0kKGVjaG8gMSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCW5hbTI9JChnaXQgaGFzaC1vYmplY3QgZWxpZikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxIERBIE4uLi4gMTAwNjQ0IDAwMDAwMCAxMDA2NDQgJG5hbTEgJFpFUk9fT0lEIDEudAorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJG5hbTIgZWxpZgorCTEgLkEgTi4uLiAwMDAwMDAgMDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJFpFUk9fT0lEIGZpbGUKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHJlc3VsdCBvZiAiYWRkIC1OIicgJworCWdpdCBscy1maWxlcyAtcyBmaWxlID5hY3R1YWwgJiYKKwllbXB0eT0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwvZGV2L251bGwpICYmCisJZWNobyAiMTAwNjQ0ICRlbXB0eSAwCWZpbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVudCB0byBhZGQgaXMganVzdCBhbiBvcmRpbmFyeSBlbXB0eSBibG9iJyAnCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBscy1maWxlcyAtcyBmaWxlID5hY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZWxpZiB8IHNlZCAtZSAicy9lbGlmL2ZpbGUvIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlbnQgdG8gYWRkIGRvZXMgbm90IGNsb2JiZXIgZXhpc3RpbmcgcGF0aHMnICcKKwlnaXQgYWRkIC1OIGZpbGUgZWxpZiAmJgorCWVtcHR5PSQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPC9kZXYvbnVsbCkgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSEgZ3JlcCAiJGVtcHR5IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaS10LWEgZW50cnkgaXMgc2ltcGx5IGlnbm9yZWQnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGluaXRpYWwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvIHh5enp5ID5yZXpyb3YgJiYKKwllY2hvIGZyb3R6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIHJlenJvdiAmJgorCWdpdCBhZGQgLU4gbml0Zm9sICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwl0ZXN0ICQoZ2l0IGxzLXRyZWUgSEVBRCAtLSBuaXRmb2wgfCB3YyAtbCkgPSAwICYmCisJdGVzdCAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUQgLS0gbml0Zm9sIHwgd2MgLWwpID0gMSAmJgorCXRlc3QgJChnaXQgZGlmZiAtLW5hbWUtb25seSAtLSBuaXRmb2wgfCB3YyAtbCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBjb21taXQgd2l0aCBhbiB1bnJlbGF0ZWQgaS10LWEgZW50cnkgaW4gaW5kZXgnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBib3piYXIgPnJlenJvdiAmJgorCWVjaG8gZnJvdHogPm5pdGZvbCAmJgorCWdpdCBhZGQgcmV6cm92ICYmCisJZ2l0IGFkZCAtTiBuaXRmb2wgJiYKKwlnaXQgY29tbWl0IC1tIHBhcnRpYWwgcmV6cm92CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiAiY29tbWl0IC1hIiB3aXRoIGFuIGktdC1hIGVudHJ5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCTogPm5pdGZvbCAmJgorCWdpdCBhZGQgLU4gbml0Zm9sICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FjaGUtdHJlZSBpbnZhbGlkYXRlcyBpLXQtYSBwYXRocycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlta2RpciBkaXIgJiYKKwk6ID5kaXIvZm9vICYmCisJZ2l0IGFkZCBkaXIvZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBmb28gJiYKKworCTogPmRpci9iYXIgJiYKKwlnaXQgYWRkIC1OIGRpci9iYXIgJiYKKwlnaXQgZGlmZiAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJZWNobyBkaXIvYmFyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgd3JpdGUtdHJlZSA+L2Rldi9udWxsICYmCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJZWNobyBkaXIvYmFyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhY2hlLXRyZWUgZG9lcyBub3QgaWdub3JlIGRpciB0aGF0IGhhcyBpLXQtYSBlbnRyaWVzJyAnCisJZ2l0IGluaXQgaXRhLWluLWRpciAmJgorCSgKKwkJY2QgaXRhLWluLWRpciAmJgorCQlta2RpciAyICYmCisJCWZvciBmIGluIDEgMi8xIDIvMiAzCisJCWRvCisJCQllY2hvICIkZiIgPiIkZiIKKwkJZG9uZSAmJgorCQlnaXQgYWRkIDEgMi8yIDMgJiYKKwkJZ2l0IGFkZCAtTiAyLzEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBjb21taXR0ZWQgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgSEVBRCA+YWN0dWFsICYmCisJCWdyZXAgMi8yIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FjaGUtdHJlZSBkb2VzIHNraXAgZGlyIHRoYXQgYmVjb21lcyBlbXB0eScgJworCXJtIC1mciBpdGEtaW4tZGlyICYmCisJZ2l0IGluaXQgaXRhLWluLWRpciAmJgorCSgKKwkJY2QgaXRhLWluLWRpciAmJgorCQlta2RpciAtcCAxLzIvMyAmJgorCQllY2hvIDQgPjEvMi8zLzQgJiYKKwkJZ2l0IGFkZCAtTiAxLzIvMy80ICYmCisJCWdpdCB3cml0ZS10cmVlID5hY3R1YWwgJiYKKwkJZWNobyAkRU1QVFlfVFJFRSA+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQ6IGl0YSBlbnRyaWVzIGlnbm9yZWQgaW4gZW1wdHkgaW5pdGlhbCBjb21taXQgY2hlY2snICcKKwlnaXQgaW5pdCBlbXB0eS1pbml0aWFsLWNvbW1pdCAmJgorCSgKKwkJY2QgZW1wdHktaW5pdGlhbC1jb21taXQgJiYKKwkJOiA+b25lICYmCisJCWdpdCBhZGQgLU4gb25lICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gbm90aGluZy1uZXctaGVyZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0OiBpdGEgZW50cmllcyBpZ25vcmVkIGluIGVtcHR5IGNvbW1pdCBjaGVjaycgJworCWdpdCBpbml0IGVtcHR5LXN1YnNlcXVlbnQtY29tbWl0ICYmCisJKAorCQljZCBlbXB0eS1zdWJzZXF1ZW50LWNvbW1pdCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJOiA+dHdvICYmCisJCWdpdCBhZGQgLU4gdHdvICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gbm90aGluZy1uZXctaGVyZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGRldGVjdGlvbiBmaW5kcyB0aGUgcmlnaHQgbmFtZXMnICcKKwlnaXQgaW5pdCByZW5hbWUtZGV0ZWN0aW9uICYmCisJKAorCQljZCByZW5hbWUtZGV0ZWN0aW9uICYmCisJCWVjaG8gY29udGVudHMgPmZpcnN0ICYmCisJCWdpdCBhZGQgZmlyc3QgJiYKKwkJZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgorCQltdiBmaXJzdCB0aGlyZCAmJgorCQlnaXQgYWRkIC1OIHRoaXJkICYmCisKKwkJZ2l0IHN0YXR1cyB8IGdyZXAgLXYgIl4/IiA+YWN0dWFsLjEgJiYKKwkJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDogKmZpcnN0IC0+IHRoaXJkIiBhY3R1YWwuMSAmJgorCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gfCBncmVwIC12ICJePyIgPmFjdHVhbC4yICYmCisJCWNhdCA+ZXhwZWN0ZWQuMiA8PC1cRU9GICYmCisJCSBSIGZpcnN0IC0+IHRoaXJkCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3RlZC4yIGFjdHVhbC4yICYmCisKKwkJaGFzaD0kKGdpdCBoYXNoLW9iamVjdCB0aGlyZCkgJiYKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiB8IGdyZXAgLXYgIl4/IiA+YWN0dWFsLjMgJiYKKwkJY2F0ID5leHBlY3RlZC4zIDw8LUVPRiAmJgorCQkyIC5SIE4uLi4gMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJGhhc2ggJGhhc2ggUjEwMCB0aGlyZAlmaXJzdAorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuMyBhY3R1YWwuMyAmJgorCisJCWdpdCBkaWZmIC0tc3RhdCA+YWN0dWFsLjQgJiYKKwkJY2F0ID5leHBlY3RlZC40IDw8LUVPRiAmJgorCQkgZmlyc3QgPT4gdGhpcmQgfCAwCisJCSAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuNCBhY3R1YWwuNCAmJgorCisJCWdpdCBkaWZmIC0tY2FjaGVkIC0tc3RhdCA+YWN0dWFsLjUgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC41CisKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvdWJsZSByZW5hbWUgZGV0ZWN0aW9uIGluIHN0YXR1cycgJworCWdpdCBpbml0IHJlbmFtZS1kZXRlY3Rpb24tMiAmJgorCSgKKwkJY2QgcmVuYW1lLWRldGVjdGlvbi0yICYmCisJCWVjaG8gY29udGVudHMgPmZpcnN0ICYmCisJCWdpdCBhZGQgZmlyc3QgJiYKKwkJZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgorCQlnaXQgbXYgZmlyc3Qgc2Vjb25kICYmCisJCW12IHNlY29uZCB0aGlyZCAmJgorCQlnaXQgYWRkIC1OIHRoaXJkICYmCisKKwkJZ2l0IHN0YXR1cyB8IGdyZXAgLXYgIl4/IiA+YWN0dWFsLjEgJiYKKwkJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDogKmZpcnN0IC0+IHNlY29uZCIgYWN0dWFsLjEgJiYKKwkJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDogKnNlY29uZCAtPiB0aGlyZCIgYWN0dWFsLjEgJiYKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgZ3JlcCAtdiAiXj8iID5hY3R1YWwuMiAmJgorCQljYXQgPmV4cGVjdGVkLjIgPDwtXEVPRiAmJgorCQlSICBmaXJzdCAtPiBzZWNvbmQKKwkJIFIgc2Vjb25kIC0+IHRoaXJkCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3RlZC4yIGFjdHVhbC4yICYmCisKKwkJaGFzaD0kKGdpdCBoYXNoLW9iamVjdCB0aGlyZCkgJiYKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiB8IGdyZXAgLXYgIl4/IiA+YWN0dWFsLjMgJiYKKwkJY2F0ID5leHBlY3RlZC4zIDw8LUVPRiAmJgorCQkyIFIuIE4uLi4gMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJGhhc2ggJGhhc2ggUjEwMCBzZWNvbmQJZmlyc3QKKwkJMiAuUiBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRoYXNoICRoYXNoIFIxMDAgdGhpcmQJc2Vjb25kCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3RlZC4zIGFjdHVhbC4zCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzL2RpZmYtY2FjaGVkIHNob3dzIGl0YSBhcyBuZXcvbm90LW5ldyBmaWxlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIG5ldyA+bmV3LWl0YSAmJgorCWdpdCBhZGQgLU4gbmV3LWl0YSAmJgorCWdpdCBkaWZmIC0tc3VtbWFyeSA+YWN0dWFsICYmCisJZWNobyAiIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXctaXRhIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLXN1bW1hcnkgPmFjdHVhbDIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsMgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJkaWZmIEhFQUQiIGluY2x1ZGVzIGl0YSBhcyBuZXcgZmlsZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBuZXcgPm5ldy1pdGEgJiYKKwlvaWQ9JChnaXQgaGFzaC1vYmplY3QgbmV3LWl0YSkgJiYKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJG9pZCkgJiYKKwlnaXQgYWRkIC1OIG5ldy1pdGEgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9uZXctaXRhIGIvbmV3LWl0YQorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uJG9pZAorCS0tLSAvZGV2L251bGwKKwkrKysgYi9uZXctaXRhCisJQEAgLTAsMCArMSBAQAorCStuZXcKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbnRlbnQtdG8tYWRkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gbmV3ID5uZXctaXRhICYmCisJZ2l0IGFkZCAtTiBuZXctaXRhICYmCisJZ2l0IGRpZmYgPmV4cGVjdGVkICYmCisJZ3JlcCAibmV3IGZpbGUiIGV4cGVjdGVkICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWludGVudC10by1hZGQgZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwNC1hZGQtaWdub3JlZC5zaCBiL3QvdDIyMDQtYWRkLWlnbm9yZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmUwNzM2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIyMDQtYWRkLWlnbm9yZWQuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdmluZyBpZ25vcmVkIHBhdGhzIHRvIGdpdCBhZGQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBzdWIgZGlyIGRpci9zdWIgJiYKKwllY2hvIHN1YiA+LmdpdGlnbm9yZSAmJgorCWVjaG8gaWduID4+LmdpdGlnbm9yZSAmJgorCWZvciBwIGluIC4gc3ViIGRpciBkaXIvc3ViCisJZG8KKwkJPiIkcC9pZ24iICYmCisJCT4iJHAvZmlsZSIgfHwgZXhpdCAxCisJZG9uZQorJworCitmb3IgaSBpbiBmaWxlIGRpci9maWxlIGRpciAnZConCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm5vIGNvbXBsYWludHMgZm9yIHVuaWdub3JlZCAkaSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCWdpdCBhZGQgIiRpIiAmJgorCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCXRlc3QgLXMgb3V0CisJJworZG9uZQorCitmb3IgaSBpbiBpZ24gZGlyL2lnbiBkaXIvc3ViIGRpci9zdWIvKmlnbiBzdWIvZmlsZSBzdWIgc3ViLyoKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIG91dHB1dCIgJworCQl0ZXN0X2kxOG5ncmVwIC1lICJVc2UgLWYgaWYiIGVycgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgd2l0aCB1bmlnbm9yZWQgZmlsZSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiBmaWxlIDI+ZXJyICYmCisJCWdpdCBscy1maWxlcyAiJGkiID5vdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIHdpdGggdW5pZ25vcmVkIGZpbGUgb3V0cHV0IiAnCisJCXRlc3RfaTE4bmdyZXAgLWUgIlVzZSAtZiBpZiIgZXJyCisJJworZG9uZQorCitmb3IgaSBpbiBzdWIgc3ViLyoKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBkaXIiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQkoCisJCQljZCBkaXIgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBkaXIgb3V0cHV0IiAnCisJCSgKKwkJCWNkIGRpciAmJgorCQkJdGVzdF9pMThuZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIKKwkJKQorCScKK2RvbmUKKworZm9yIGkgaW4gaWduIGZpbGUKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBzdWIiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQkoCisJCQljZCBzdWIgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBzdWIgb3V0cHV0IiAnCisJCSgKKwkJCWNkIHN1YiAmJgorCQkJdGVzdF9pMThuZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIKKwkJKQorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoIGIvdC90MjMwMC1jZC10by10b3BsZXZlbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOGRlNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjMwMC1jZC10by10b3BsZXZlbC5zaApAQCAtMCwwICsxLDQ2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2RfdG9fdG9wbGV2ZWwnCisKKy4gLi90ZXN0LWxpYi5zaAorCitFWEVDX1BBVEg9IiQoZ2l0IC0tZXhlYy1wYXRoKSIKK3Rlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXIHx8CitjYXNlICIkRVhFQ19QQVRIIiBpbgorW0EtWmEtel06LyopCisJRVhFQ19QQVRIPSIvJHtFWEVDX1BBVEglJToqfSR7RVhFQ19QQVRIIz86fSIKKwk7OworZXNhYworCit0ZXN0X2NkX3RvX3RvcGxldmVsICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICQzICIkMiIgJworCQkoCisJCQljZCAnIickMSciJyAmJgorCQkJUEFUSD0iJEVYRUNfUEFUSDokUEFUSCIgJiYKKwkJCS4gZ2l0LXNoLXNldHVwICYmCisJCQljZF90b190b3BsZXZlbCAmJgorCQkJWyAiJChwd2QgLVApIiA9ICIkVE9QTEVWRUwiIF0KKwkJKQorCScKK30KKworVE9QTEVWRUw9IiQocHdkIC1QKS9yZXBvIgorbWtkaXIgLXAgcmVwby9zdWIvZGlyCittdiAuZ2l0IHJlcG8vCitTVUJESVJFQ1RPUllfT0s9MQorCit0ZXN0X2NkX3RvX3RvcGxldmVsIHJlcG8gJ2F0IHBoeXNpY2FsIHJvb3QnCisKK3Rlc3RfY2RfdG9fdG9wbGV2ZWwgcmVwby9zdWIvZGlyICdhdCBwaHlzaWNhbCBzdWJkaXInCisKK2xuIC1zIHJlcG8gc3ltcmVwbyAyPi9kZXYvbnVsbAordGVzdF9jZF90b190b3BsZXZlbCBzeW1yZXBvICdhdCBzeW1ib2xpYyByb290JyBTWU1MSU5LUworCitsbiAtcyByZXBvL3N1Yi9kaXIgc3ViZGlyLWxpbmsgMj4vZGV2L251bGwKK3Rlc3RfY2RfdG9fdG9wbGV2ZWwgc3ViZGlyLWxpbmsgJ2F0IHN5bWJvbGljIHN1YmRpcicgU1lNTElOS1MKKworY2QgcmVwbworbG4gLXMgc3ViL2RpciBpbnRlcm5hbC1saW5rIDI+L2Rldi9udWxsCit0ZXN0X2NkX3RvX3RvcGxldmVsIGludGVybmFsLWxpbmsgJ2F0IGludGVybmFsIHN5bWJvbGljIHN1YmRpcicgU1lNTElOS1MKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyNDAwLXdvcmt0cmVlLWFkZC5zaCBiL3QvdDI0MDAtd29ya3RyZWUtYWRkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhNzQ5NTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyNDAwLXdvcmt0cmVlLWFkZC5zaApAQCAtMCwwICsxLDYyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHdvcmt0cmVlIGFkZCcKKworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgYW4gZXhpc3Rpbmcgd29ya3RyZWUnICcKKwlta2RpciAtcCBleGlzdGluZy9zdWJ0cmVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBleGlzdGluZyBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgYW4gZXhpc3RpbmcgZW1wdHkgd29ya3RyZWUnICcKKwlta2RpciBleGlzdGluZ19lbXB0eSAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZXhpc3RpbmdfZW1wdHkgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHVzaW5nIHNob3J0aGFuZCAtIGZhaWxzIHdoZW4gbm8gcHJldmlvdXMgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCBleGlzdGluZ19zaG9ydCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHVzaW5nIC0gc2hvcnRoYW5kJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG5ld2JyYW5jaCAmJgorCWVjaG8gaGVsbG8gPm15d29ybGQgJiYKKwlnaXQgYWRkIG15d29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIG15d29ybGQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHdvcmt0cmVlIGFkZCBzaG9ydC1oYW5kIC0gJiYKKwllY2hvIHJlZnMvaGVhZHMvbmV3YnJhbmNoID5leHBlY3QgJiYKKwlnaXQgLUMgc2hvcnQtaGFuZCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiByZWZ1c2VzIHRvIGNoZWNrb3V0IGxvY2tlZCBicmFuY2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIHplcmUgbWFzdGVyICYmCisJISB0ZXN0IC1kIHplcmUgJiYKKwkhIHRlc3QgLWQgLmdpdC93b3JrdHJlZXMvemVyZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBvdXQgcGF0aHMgbm90IGNvbXBsYWluaW5nIGFib3V0IGxpbmtlZCBjaGVja291dHMnICcKKwkoCisJY2QgZXhpc3RpbmdfZW1wdHkgJiYKKwllY2hvIGRpcnR5ID4+aW5pdC50ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAtLSBpbml0LnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdvcmt0cmVlJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGhlcmUgbWFzdGVyICYmCisJKAorCQljZCBoZXJlICYmCisJCXRlc3RfY21wIC4uL2luaXQudCBpbml0LnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IGZzY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdvcmt0cmVlIHdpdGggbG9jaycgJworCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCAtLWxvY2sgaGVyZS13aXRoLWxvY2sgbWFzdGVyICYmCisJdGVzdCAtZiAuZ2l0L3dvcmt0cmVlcy9oZXJlLXdpdGgtbG9jay9sb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd29ya3RyZWUgZnJvbSBhIHN1YmRpcicgJworCSgKKwkJbWtkaXIgc3ViICYmCisJCWNkIHN1YiAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGhlcmUgbWFzdGVyICYmCisJCWNkIGhlcmUgJiYKKwkJdGVzdF9jbXAgLi4vLi4vaW5pdC50IGluaXQudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgZnJvbSBhIGxpbmtlZCBjaGVja291dCcgJworCSgKKwkJY2QgaGVyZSAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIG5lc3RlZC1oZXJlIG1hc3RlciAmJgorCQljZCBuZXN0ZWQtaGVyZSAmJgorCQlnaXQgZnNjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd29ya3RyZWUgY3JlYXRpbmcgbmV3IGJyYW5jaCcgJworCWdpdCB3b3JrdHJlZSBhZGQgLWIgbmV3bWFzdGVyIHRoZXJlIG1hc3RlciAmJgorCSgKKwkJY2QgdGhlcmUgJiYKKwkJdGVzdF9jbXAgLi4vaW5pdC50IGluaXQudCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCQllY2hvIHJlZnMvaGVhZHMvbmV3bWFzdGVyID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgZnNjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGllIHRoZSBzYW1lIGJyYW5jaCBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0JyAnCisJKAorCQljZCBoZXJlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBuZXdtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpZSB0aGUgc2FtZSBicmFuY2ggaXMgYWxyZWFkeSBjaGVja2VkIG91dCAoc3ltbGluayknICcKKwloZWFkPSQoZ2l0IC1DIHRoZXJlIHJldi1wYXJzZSAtLWdpdC1wYXRoIEhFQUQpICYmCisJcmVmPSQoZ2l0IC1DIHRoZXJlIHN5bWJvbGljLXJlZiBIRUFEKSAmJgorCXJtICIkaGVhZCIgJiYKKwlsbiAtcyAiJHJlZiIgIiRoZWFkIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBoZXJlIGNoZWNrb3V0IG5ld21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgZGllIHRoZSBzYW1lIGJyYW5jaCBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0JyAnCisJKAorCQljZCBoZXJlICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLS1mb3JjZSBhbm90aGVybmV3bWFzdGVyIG5ld21hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IGRpZSBvbiByZS1jaGVja2luZyBvdXQgY3VycmVudCBicmFuY2gnICcKKwkoCisJCWNkIHRoZXJlICYmCisJCWdpdCBjaGVja291dCBuZXdtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGZyb20gYSBiYXJlIHJlcG8nICcKKwkoCisJCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlICYmCisJCWNkIGJhcmUgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAtYiBiYXJlLW1hc3RlciAuLi90aGVyZTIgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBmcm9tIGEgYmFyZSByZXBvIHdpdGhvdXQgImFkZCInICcKKwkoCisJCWNkIGJhcmUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgZGVmYXVsdCBicmFuY2ggb2YgYSBiYXJlIHJlcG8nICcKKwkoCisJCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlMiAmJgorCQljZCBiYXJlMiAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC4uL3RoZXJlMyBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggZ3JhZnRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC5naXQvaW5mby9ncmFmdHMgJiYKKwl0ZXN0X2NvbW1pdCBhYmMgJiYKKwlTSEExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfY29tbWl0IGRlZiAmJgorCXRlc3RfY29tbWl0IHh5eiAmJgorCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSAkU0hBMSIgPi5naXQvaW5mby9ncmFmdHMgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwl4eXoKKwlhYmMKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGdyYWZ0ZWQgbWFzdGVyICYmCisJZ2l0IC0tZ2l0LWRpcj1ncmFmdGVkLy5naXQgbG9nIC0tZm9ybWF0PSVzIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgZnJvbSByZWxhdGl2ZSBIRUFEJyAnCisJdGVzdF9jb21taXQgYSAmJgorCXRlc3RfY29tbWl0IGIgJiYKKwl0ZXN0X2NvbW1pdCBjICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEfjEgPmV4cGVjdGVkICYmCisJZ2l0IHdvcmt0cmVlIGFkZCByZWxoZWFkIEhFQUR+MSAmJgorCWdpdCAtQyByZWxoZWFkIHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCAtYiIgd2l0aCA8YnJhbmNoPiBvbWl0dGVkJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCAtYiBidXJibGUgZmxvcm5rICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgYnVyYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQgLS1kZXRhY2giIHdpdGggPGJyYW5jaD4gb21pdHRlZCcgJworCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZmlzaGhvb2sgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGZpc2hob29rIHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZmlzaGhvb2sgc3ltYm9saWMtcmVmIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCA8YnJhbmNoPiBvbWl0dGVkJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCB3aWZmbGUvYmF0ICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgYmF0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGNoZWNrcyBvdXQgZXhpc3RpbmcgYnJhbmNoIG9mIGR3aW1kIG5hbWUnICcKKwlnaXQgYnJhbmNoIGR3aW0gSEVBRH4xICYmCisJZ2l0IHdvcmt0cmVlIGFkZCBkd2ltICYmCisJdGVzdF9jbXBfcmV2IEhFQUR+MSBkd2ltICYmCisJKAorCQljZCBkd2ltICYmCisJCXRlc3RfY21wX3JldiBIRUFEIGR3aW0KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQgPHBhdGg+IiBkd2ltIGZhaWxzIHdpdGggY2hlY2tlZCBvdXQgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QtYnJhbmNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCB0ZXN0LWJyYW5jaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlc3QtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQgLS1mb3JjZSIgd2l0aCBleGlzdGluZyBkd2ltZCBuYW1lIGRvZXNudCBkaWUnICcKKwlnaXQgY2hlY2tvdXQgdGVzdC1icmFuY2ggJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZm9yY2UgdGVzdC1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgbm8gYXV0by12aXZpZnkgd2l0aCAtLWRldGFjaCBhbmQgPGJyYW5jaD4gb21pdHRlZCcgJworCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggbWlzaC9tYXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBtYXNoIC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG1pc2gvbWFzaCBzeW1ib2xpYy1yZWYgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiAtYi8tQiBtdXR1YWxseSBleGNsdXNpdmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIC1iIHBvb2RsZSAtQiBwb29kbGUgYmFtYm9vIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiAtYi8tLWRldGFjaCBtdXR1YWxseSBleGNsdXNpdmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIC1iIHBvb2RsZSAtLWRldGFjaCBiYW1ib28gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIC1CLy0tZGV0YWNoIG11dHVhbGx5IGV4Y2x1c2l2ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgLUIgcG9vZGxlIC0tZGV0YWNoIGJhbWJvbyBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCAtQiIgZmFpbHMgaWYgdGhlIGJyYW5jaCBpcyBjaGVja2VkIG91dCcgJworCWdpdCByZXYtcGFyc2UgbmV3bWFzdGVyID5iZWZvcmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIC1CIG5ld21hc3RlciBiYW1ib28gbWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSBuZXdtYXN0ZXIgPmFmdGVyICYmCisJdGVzdF9jbXAgYmVmb3JlIGFmdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtQicgJworCWdpdCB3b3JrdHJlZSBhZGQgLUIgcG9vZGxlIGJhbWJvbzIgbWFzdGVyXiAmJgorCWdpdCAtQyBiYW1ib28yIHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwllY2hvIHJlZnMvaGVhZHMvcG9vZGxlID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wX3JldiBtYXN0ZXJeIHBvb2RsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1xdWlldCcgJworCWdpdCB3b3JrdHJlZSBhZGQgLS1xdWlldCBhbm90aGVyLXdvcmt0cmVlIG1hc3RlciAyPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY2xvbmUgZnJvbSBsaW5rZWQgY2hlY2tvdXQnICcKKwlnaXQgY2xvbmUgLS1sb2NhbCBoZXJlIGhlcmUtY2xvbmUgJiYKKwkoIGNkIGhlcmUtY2xvbmUgJiYgZ2l0IGZzY2sgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBjbG9uZSAtLXNoYXJlZCBmcm9tIGxpbmtlZCBjaGVja291dCcgJworCWdpdCAtQyBiYXJlIHdvcmt0cmVlIGFkZCAtLWRldGFjaCAuLi9iYXJldHJlZSAmJgorCWdpdCBjbG9uZSAtLWxvY2FsIC0tc2hhcmVkIGJhcmV0cmVlIGJhcmUtY2xvbmUgJiYKKwlncmVwIC9iYXJlLyBiYXJlLWNsb25lLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd29ya3RyZWUgd2l0aCAtLW5vLWNoZWNrb3V0JyAnCisJZ2l0IHdvcmt0cmVlIGFkZCAtLW5vLWNoZWNrb3V0IC1iIHN3YW1wIHN3YW1wICYmCisJISB0ZXN0IC1lIHN3YW1wL2luaXQudCAmJgorCWdpdCAtQyBzd2FtcCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2NtcCBpbml0LnQgc3dhbXAvaW5pdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdvcmt0cmVlIHdpdGggLS1jaGVja291dCcgJworCWdpdCB3b3JrdHJlZSBhZGQgLS1jaGVja291dCAtYiBzd21hcDIgc3dhbXAyICYmCisJdGVzdF9jbXAgaW5pdC50IHN3YW1wMi9pbml0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0IGEgd29ya3RyZWUgdW5kZXIgcmViYXNlJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCB1bmRlci1yZWJhc2UgJiYKKwkoCisJCWNkIHVuZGVyLXJlYmFzZSAmJgorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJCWdpdCB3b3JrdHJlZSBsaXN0IHwgZ3JlcCAidW5kZXItcmViYXNlLipkZXRhY2hlZCBIRUFEIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgd29ya3RyZWUsIGNoZWNraW5nIG91dCBhIHJlYmFzZWQgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCBuZXctcmViYXNlIHVuZGVyLXJlYmFzZSAmJgorCSEgdGVzdCAtZCBuZXctcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIG91dCBhIHJlYmFzZWQgYnJhbmNoIGZyb20gYW5vdGhlciB3b3JrdHJlZScgJworCWdpdCB3b3JrdHJlZSBhZGQgbmV3LXBsYWNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG5ldy1wbGFjZSBjaGVja291dCB1bmRlci1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IGFsbG93IHRvIGRlbGV0ZSBhIGJyYW5jaCB1bmRlciByZWJhc2UnICcKKwkoCisJCWNkIHVuZGVyLXJlYmFzZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1EIHVuZGVyLXJlYmFzZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgYnJhbmNoIHVuZGVyIHJlYmFzZSBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLU0gdW5kZXItcmViYXNlIHJlYmFzZS13aXRoLW5ldy1uYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG91dCBmcm9tIGN1cnJlbnQgd29ya3RyZWUgYnJhbmNoIG9rJyAnCisJKAorCQljZCB1bmRlci1yZWJhc2UgJiYKKwkJZ2l0IGNoZWNrb3V0IHVuZGVyLXJlYmFzZSAmJgorCQlnaXQgY2hlY2tvdXQgLSAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGEgYnJhbmNoIHVuZGVyIGJpc2VjdCcgJworCWdpdCB3b3JrdHJlZSBhZGQgdW5kZXItYmlzZWN0ICYmCisJKAorCQljZCB1bmRlci1iaXNlY3QgJiYKKwkJZ2l0IGJpc2VjdCBzdGFydCAmJgorCQlnaXQgYmlzZWN0IGJhZCAmJgorCQlnaXQgYmlzZWN0IGdvb2QgSEVBRH4yICYmCisJCWdpdCB3b3JrdHJlZSBsaXN0IHwgZ3JlcCAidW5kZXItYmlzZWN0LipkZXRhY2hlZCBIRUFEIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIG5ldy1iaXNlY3QgdW5kZXItYmlzZWN0ICYmCisJCSEgdGVzdCAtZCBuZXctYmlzZWN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYSBicmFuY2ggdW5kZXIgYmlzZWN0IG5vdCBhbGxvd2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtTSB1bmRlci1iaXNlY3QgYmlzZWN0LXdpdGgtbmV3LW5hbWUKKycKKyMgSXMgYnJhbmNoICJyZWZzL2hlYWRzLyQxIiBzZXQgdG8gcHVsbCBmcm9tICIkMi8kMyI/Cit0ZXN0X2JyYW5jaF91cHN0cmVhbSAoKSB7CisJcHJpbnRmICIlc1xuIiAiJDIiICJyZWZzL2hlYWRzLyQzIiA+ZXhwZWN0LnVwc3RyZWFtICYmCisJeworCQlnaXQgY29uZmlnICJicmFuY2guJDEucmVtb3RlIiAmJgorCQlnaXQgY29uZmlnICJicmFuY2guJDEubWVyZ2UiCisJfSA+YWN0dWFsLnVwc3RyZWFtICYmCisJdGVzdF9jbXAgZXhwZWN0LnVwc3RyZWFtIGFjdHVhbC51cHN0cmVhbQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXRyYWNrIHNldHMgdXAgdHJhY2tpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHRyYWNrICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLXRyYWNrIC1iIHRyYWNrIHRyYWNrIG1hc3RlciAmJgorCXRlc3RfYnJhbmNoX3Vwc3RyZWFtIHRyYWNrIC4gbWFzdGVyCisnCisKKyMgc2V0dXAgcmVtb3RlIHJlcG9zaXRvcnkgJDEgYW5kIHJlcG9zaXRvcnkgJDIgd2l0aCAkMSBzZXQgdXAgYXMKKyMgcmVtb3RlLiAgVGhlIHJlbW90ZSBoYXMgdHdvIGJyYW5jaGVzLCBtYXN0ZXIgYW5kIGZvby4KK3NldHVwX3JlbW90ZV9yZXBvICgpIHsKKwlnaXQgaW5pdCAkMSAmJgorCSgKKwkJY2QgJDEgJiYKKwkJdGVzdF9jb21taXQgJDFfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBmb28gJiYKKwkJdGVzdF9jb21taXQgdXBzdHJlYW1fZm9vCisJKSAmJgorCWdpdCBpbml0ICQyICYmCisJKAorCQljZCAkMiAmJgorCQl0ZXN0X2NvbW1pdCAkMl9tYXN0ZXIgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgJDEgLi4vJDEgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuJDEuZmV0Y2ggXAorCQkJInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvJDEvKiIgJiYKKwkJZ2l0IGZldGNoIC0tYWxsCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXRyYWNrIGF2b2lkcyBzZXR0aW5nIHVwIHRyYWNraW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiByZXBvX3Vwc3RyZWFtIHJlcG9fbG9jYWwgZm9vICYmCisJc2V0dXBfcmVtb3RlX3JlcG8gcmVwb191cHN0cmVhbSByZXBvX2xvY2FsICYmCisJKAorCQljZCByZXBvX2xvY2FsICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLS1uby10cmFjayAtYiBmb28gLi4vZm9vIHJlcG9fdXBzdHJlYW0vZm9vCisJKSAmJgorCSgKKwkJY2QgZm9vICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgImJyYW5jaC5mb28ucmVtb3RlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJicmFuY2guZm9vLm1lcmdlIiAmJgorCQl0ZXN0X2NtcF9yZXYgcmVmcy9yZW1vdGVzL3JlcG9fdXBzdHJlYW0vZm9vIHJlZnMvaGVhZHMvZm9vCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiA8cGF0aD4gPG5vbi1leGlzdGVudC1icmFuY2g+IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCBmb28gbm9uLWV4aXN0ZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIDxwYXRoPiA8YnJhbmNoPiBkd2ltcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgcmVwb191cHN0cmVhbSByZXBvX2R3aW0gZm9vICYmCisJc2V0dXBfcmVtb3RlX3JlcG8gcmVwb191cHN0cmVhbSByZXBvX2R3aW0gJiYKKwlnaXQgaW5pdCByZXBvX2R3aW0gJiYKKwkoCisJCWNkIHJlcG9fZHdpbSAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC4uL2ZvbyBmb28KKwkpICYmCisJKAorCQljZCBmb28gJiYKKwkJdGVzdF9icmFuY2hfdXBzdHJlYW0gZm9vIHJlcG9fdXBzdHJlYW0gZm9vICYmCisJCXRlc3RfY21wX3JldiByZWZzL3JlbW90ZXMvcmVwb191cHN0cmVhbS9mb28gcmVmcy9oZWFkcy9mb28KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIDxwYXRoPiA8YnJhbmNoPiBkd2ltcyB3aXRoIGNoZWNrb3V0LmRlZmF1bHRSZW1vdGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG9fdXBzdHJlYW0gcmVwb19kd2ltIGZvbyAmJgorCXNldHVwX3JlbW90ZV9yZXBvIHJlcG9fdXBzdHJlYW0gcmVwb19kd2ltICYmCisJZ2l0IGluaXQgcmVwb19kd2ltICYmCisJKAorCQljZCByZXBvX2R3aW0gJiYKKwkJZ2l0IHJlbW90ZSBhZGQgcmVwb191cHN0cmVhbTIgLi4vcmVwb191cHN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggcmVwb191cHN0cmVhbTIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAuLi9mb28gZm9vICYmCisJCWdpdCAtYyBjaGVja291dC5kZWZhdWx0UmVtb3RlPXJlcG9fdXBzdHJlYW0gd29ya3RyZWUgYWRkIC4uL2ZvbyBmb28gJiYKKwkJZ2l0IHN0YXR1cyAtdW5vIC0tcG9yY2VsYWluID5zdGF0dXMuYWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBzdGF0dXMuYWN0dWFsCisJKSAmJgorCSgKKwkJY2QgZm9vICYmCisJCXRlc3RfYnJhbmNoX3Vwc3RyZWFtIGZvbyByZXBvX3Vwc3RyZWFtIGZvbyAmJgorCQl0ZXN0X2NtcF9yZXYgcmVmcy9yZW1vdGVzL3JlcG9fdXBzdHJlYW0vZm9vIHJlZnMvaGVhZHMvZm9vCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd29ya3RyZWUgYWRkIGRvZXMgbm90IG1hdGNoIHJlbW90ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgcmVwb19hIHJlcG9fYiBmb28gJiYKKwlzZXR1cF9yZW1vdGVfcmVwbyByZXBvX2EgcmVwb19iICYmCisJKAorCQljZCByZXBvX2IgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAuLi9mb28KKwkpICYmCisJKAorCQljZCBmb28gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAiYnJhbmNoLmZvby5yZW1vdGUiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgImJyYW5jaC5mb28ubWVyZ2UiICYmCisJCXRlc3RfY21wX3JldiAhIHJlZnMvcmVtb3Rlcy9yZXBvX2EvZm9vIHJlZnMvaGVhZHMvZm9vCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd29ya3RyZWUgYWRkIC0tZ3Vlc3MtcmVtb3RlIHNldHMgdXAgdHJhY2tpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG9fYSByZXBvX2IgZm9vICYmCisJc2V0dXBfcmVtb3RlX3JlcG8gcmVwb19hIHJlcG9fYiAmJgorCSgKKwkJY2QgcmVwb19iICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLS1ndWVzcy1yZW1vdGUgLi4vZm9vCisJKSAmJgorCSgKKwkJY2QgZm9vICYmCisJCXRlc3RfYnJhbmNoX3Vwc3RyZWFtIGZvbyByZXBvX2EgZm9vICYmCisJCXRlc3RfY21wX3JldiByZWZzL3JlbW90ZXMvcmVwb19hL2ZvbyByZWZzL2hlYWRzL2ZvbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHdvcmt0cmVlIGFkZCB3aXRoIHdvcmt0cmVlLmd1ZXNzUmVtb3RlIHNldHMgdXAgdHJhY2tpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcG9fYSByZXBvX2IgZm9vICYmCisJc2V0dXBfcmVtb3RlX3JlcG8gcmVwb19hIHJlcG9fYiAmJgorCSgKKwkJY2QgcmVwb19iICYmCisJCWdpdCBjb25maWcgd29ya3RyZWUuZ3Vlc3NSZW1vdGUgdHJ1ZSAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC4uL2ZvbworCSkgJiYKKwkoCisJCWNkIGZvbyAmJgorCQl0ZXN0X2JyYW5jaF91cHN0cmVhbSBmb28gcmVwb19hIGZvbyAmJgorCQl0ZXN0X2NtcF9yZXYgcmVmcy9yZW1vdGVzL3JlcG9fYS9mb28gcmVmcy9oZWFkcy9mb28KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB3b3JrdHJlZSAtLW5vLWd1ZXNzLXJlbW90ZSBvcHRpb24gb3ZlcnJpZGVzIGNvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgcmVwb19hIHJlcG9fYiBmb28gJiYKKwlzZXR1cF9yZW1vdGVfcmVwbyByZXBvX2EgcmVwb19iICYmCisJKAorCQljZCByZXBvX2IgJiYKKwkJZ2l0IGNvbmZpZyB3b3JrdHJlZS5ndWVzc1JlbW90ZSB0cnVlICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLS1uby1ndWVzcy1yZW1vdGUgLi4vZm9vCisJKSAmJgorCSgKKwkJY2QgZm9vICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgImJyYW5jaC5mb28ucmVtb3RlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJicmFuY2guZm9vLm1lcmdlIiAmJgorCQl0ZXN0X2NtcF9yZXYgISByZWZzL3JlbW90ZXMvcmVwb19hL2ZvbyByZWZzL2hlYWRzL2ZvbworCSkKKycKKworcG9zdF9jaGVja291dF9ob29rICgpIHsKKwlnaXRkaXI9JHsxOi0uZ2l0fQorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgJGdpdGRpci9ob29rcy9wb3N0LWNoZWNrb3V0IiAmJgorCW1rZGlyIC1wICRnaXRkaXIvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgJGdpdGRpci9ob29rcy9wb3N0LWNoZWNrb3V0IDw8LVxFT0YKKwl7CisJCWVjaG8gJCoKKwkJZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgLS1zaG93LXRvcGxldmVsCisJfSA+aG9vay5hY3R1YWwKKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgaW52b2tlcyBwb3N0LWNoZWNrb3V0IGhvb2sgKGJyYW5jaCknICcKKwlwb3N0X2NoZWNrb3V0X2hvb2sgJiYKKwl7CisJCWVjaG8gJFpFUk9fT0lEICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAxICYmCisJCWVjaG8gJChwd2QpLy5naXQvd29ya3RyZWVzL2d1bWJ5ICYmCisJCWVjaG8gJChwd2QpL2d1bWJ5CisJfSA+aG9vay5leHBlY3QgJiYKKwlnaXQgd29ya3RyZWUgYWRkIGd1bWJ5ICYmCisJdGVzdF9jbXAgaG9vay5leHBlY3QgZ3VtYnkvaG9vay5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgaW52b2tlcyBwb3N0LWNoZWNrb3V0IGhvb2sgKGRldGFjaGVkKScgJworCXBvc3RfY2hlY2tvdXRfaG9vayAmJgorCXsKKwkJZWNobyAkWkVST19PSUQgJChnaXQgcmV2LXBhcnNlIEhFQUQpIDEgJiYKKwkJZWNobyAkKHB3ZCkvLmdpdC93b3JrdHJlZXMvZ3J1bXB5ICYmCisJCWVjaG8gJChwd2QpL2dydW1weQorCX0gPmhvb2suZXhwZWN0ICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBncnVtcHkgJiYKKwl0ZXN0X2NtcCBob29rLmV4cGVjdCBncnVtcHkvaG9vay5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCAtLW5vLWNoZWNrb3V0IiBzdXBwcmVzc2VzIHBvc3QtY2hlY2tvdXQgaG9vaycgJworCXBvc3RfY2hlY2tvdXRfaG9vayAmJgorCXJtIC1mIGhvb2suYWN0dWFsICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLW5vLWNoZWNrb3V0IGdsb29weSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGdsb29weS9ob29rLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBpbiBvdGhlciB3b3JrdHJlZSBpbnZva2VzIHBvc3QtY2hlY2tvdXQgaG9vaycgJworCXBvc3RfY2hlY2tvdXRfaG9vayAmJgorCXsKKwkJZWNobyAkWkVST19PSUQgJChnaXQgcmV2LXBhcnNlIEhFQUQpIDEgJiYKKwkJZWNobyAkKHB3ZCkvLmdpdC93b3JrdHJlZXMvZ3VwcHkgJiYKKwkJZWNobyAkKHB3ZCkvZ3VwcHkKKwl9ID5ob29rLmV4cGVjdCAmJgorCWdpdCAtQyBnbG9vcHkgd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL2d1cHB5ICYmCisJdGVzdF9jbXAgaG9vay5leHBlY3QgZ3VwcHkvaG9vay5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgaW4gYmFyZSByZXBvIGludm9rZXMgcG9zdC1jaGVja291dCBob29rJyAnCisJcm0gLXJmIGJhcmUgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZSAmJgorCXsKKwkJZWNobyAkWkVST19PSUQgJChnaXQgLS1naXQtZGlyPWJhcmUgcmV2LXBhcnNlIEhFQUQpIDEgJiYKKwkJZWNobyAkKHB3ZCkvYmFyZS93b3JrdHJlZXMvZ29venkgJiYKKwkJZWNobyAkKHB3ZCkvZ29venkKKwl9ID5ob29rLmV4cGVjdCAmJgorCXBvc3RfY2hlY2tvdXRfaG9vayBiYXJlICYmCisJZ2l0IC1DIGJhcmUgd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL2dvb3p5ICYmCisJdGVzdF9jbXAgaG9vay5leHBlY3QgZ29venkvaG9vay5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgYW4gZXhpc3RpbmcgYnV0IG1pc3Npbmcgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIHBuZXUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIHBuZXUgJiYKKwlybSAtZnIgcG5ldSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggcG5ldSAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1mb3JjZSAtLWRldGFjaCBwbmV1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIGFuIGV4aXN0aW5nIGxvY2tlZCBidXQgbWlzc2luZyB3b3JrdHJlZScgJworCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZ25vbyAmJgorCWdpdCB3b3JrdHJlZSBsb2NrIGdub28gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgZ25vbyB8fCA6IiAmJgorCXJtIC1mciBnbm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBnbm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtLWZvcmNlIC0tZGV0YWNoIGdub28gJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZm9yY2UgLS1mb3JjZSAtLWRldGFjaCBnbm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIG5vdCB0cmlwcGVkIHVwIGJ5IG1hZ2ljIHdvcmt0cmVlIG1hdGNoaW5nIicgJworCSMgaWYgd29ya3RyZWUgInN1YjEvYmFyIiBleGlzdHMsICJnaXQgd29ya3RyZWUgYWRkIGJhciIgaW4gZGlzdGluY3QKKwkjIGRpcmVjdG9yeSBgc3ViMmAgc2hvdWxkIG5vdCBtaXN0YWtlbmx5IGNvbXBsYWluIHRoYXQgYGJhcmAgaXMgYW4KKwkjIGFscmVhZHktcmVnaXN0ZXJlZCB3b3JrdHJlZQorCW1rZGlyIHN1YjEgc3ViMiAmJgorCWdpdCAtQyBzdWIxIC0tZ2l0LWRpcj0uLi8uZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBib3pvICYmCisJZ2l0IC1DIHN1YjIgLS1naXQtZGlyPS4uLy5naXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGJvem8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICdzYW5pdGl6ZSBnZW5lcmF0ZWQgd29ya3RyZWUgbmFtZScgJworCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggIi4gIHdlaXJkKi4uPy5sb2NrLmxvY2siICYmCisJdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy8tLS13ZWlyZC0uLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBzaG91bGQgbm90IGZhaWwgYmVjYXVzZSBvZiBhbm90aGVyIGJhZCB3b3JrdHJlZScgJworCWdpdCBpbml0IGFkZC1mYWlsICYmCisJKAorCQljZCBhZGQtZmFpbCAmJgorCQl0ZXN0X2NvbW1pdCBmaXJzdCAmJgorCQlta2RpciBzdWIgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCBzdWIvdG8tYmUtZGVsZXRlZCAmJgorCQlybSAtcmYgc3ViICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgc2Vjb25kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3aXRoIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlIHVuc2V0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzdWJtb2R1bGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWJtb2R1bGUgZmlyc3QgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHByb2plY3QgJiYKKwlnaXQgLUMgcHJvamVjdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSAmJgorCWdpdCAtQyBwcm9qZWN0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgLUMgcHJvamVjdCBjb21taXQgLW0gYWRkX3N1YiAmJgorCWdpdCBjbG9uZSBwcm9qZWN0IHByb2plY3QtY2xvbmUgJiYKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSB3b3JrdHJlZSBhZGQgLi4vcHJvamVjdC0yCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3aXRoIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlIHNldCcgJworCWdpdCAtQyBwcm9qZWN0LWNsb25lIC1jIHN1Ym1vZHVsZS5yZWN1cnNlIHdvcmt0cmVlIGFkZCAuLi9wcm9qZWN0LTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCBpbml0aWFsaXplZCBzdWJtb2R1bGUsIHdpdGggc3VibW9kdWxlLnJlY3Vyc2UgdW5zZXQnICcKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWdpdCAtQyBwcm9qZWN0LWNsb25lIHdvcmt0cmVlIGFkZCAuLi9wcm9qZWN0LTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCBpbml0aWFsaXplZCBzdWJtb2R1bGUsIHdpdGggc3VibW9kdWxlLnJlY3Vyc2Ugc2V0JyAnCisJZ2l0IC1DIHByb2plY3QtY2xvbmUgLWMgc3VibW9kdWxlLnJlY3Vyc2Ugd29ya3RyZWUgYWRkIC4uL3Byb2plY3QtNQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDI0MDEtd29ya3RyZWUtcHJ1bmUuc2ggYi90L3QyNDAxLXdvcmt0cmVlLXBydW5lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3ZDZkNWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyNDAxLXdvcmt0cmVlLXBydW5lLnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwcnVuZSAkR0lUX0RJUi93b3JrdHJlZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGluaXRpYWxpemUgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmt0cmVlIHBydW5lIG9uIG5vcm1hbCByZXBvJyAnCisJZ2l0IHdvcmt0cmVlIHBydW5lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIHBydW5lIGFiYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBmaWxlcyBpbnNpZGUgJEdJVF9ESVIvd29ya3RyZWVzJyAnCisJbWtkaXIgLmdpdC93b3JrdHJlZXMgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9hYmMgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUgLS12ZXJib3NlID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorUmVtb3Zpbmcgd29ya3RyZWVzL2FiYzogbm90IGEgdmFsaWQgZGlyZWN0b3J5CitFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSEgdGVzdCAtZiAuZ2l0L3dvcmt0cmVlcy9hYmMgJiYKKwkhIHRlc3QgLWQgLmdpdC93b3JrdHJlZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgZGlyZWN0b3JpZXMgd2l0aG91dCBnaXRkaXInICcKKwlta2RpciAtcCAuZ2l0L3dvcmt0cmVlcy9kZWYvYWJjICYmCisJOiA+LmdpdC93b3JrdHJlZXMvZGVmL2RlZiAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitSZW1vdmluZyB3b3JrdHJlZXMvZGVmOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdAorRU9GCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkhIHRlc3QgLWQgLmdpdC93b3JrdHJlZXMvZGVmICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0FOSVRZICdwcnVuZSBkaXJlY3RvcmllcyB3aXRoIHVucmVhZGFibGUgZ2l0ZGlyJyAnCisJbWtkaXIgLXAgLmdpdC93b3JrdHJlZXMvZGVmL2FiYyAmJgorCTogPi5naXQvd29ya3RyZWVzL2RlZi9kZWYgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9kZWYvZ2l0ZGlyICYmCisJY2htb2QgdS1yIC5naXQvd29ya3RyZWVzL2RlZi9naXRkaXIgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUgLS12ZXJib3NlID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJSZW1vdmluZyB3b3JrdHJlZXMvZGVmOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSIgYWN0dWFsICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzL2RlZiAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBkaXJlY3RvcmllcyB3aXRoIGludmFsaWQgZ2l0ZGlyJyAnCisJbWtkaXIgLXAgLmdpdC93b3JrdHJlZXMvZGVmL2FiYyAmJgorCTogPi5naXQvd29ya3RyZWVzL2RlZi9kZWYgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9kZWYvZ2l0ZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiUmVtb3Zpbmcgd29ya3RyZWVzL2RlZjogaW52YWxpZCBnaXRkaXIgZmlsZSIgYWN0dWFsICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzL2RlZiAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBkaXJlY3RvcmllcyB3aXRoIGdpdGRpciBwb2ludGluZyB0byBub3doZXJlJyAnCisJbWtkaXIgLXAgLmdpdC93b3JrdHJlZXMvZGVmL2FiYyAmJgorCTogPi5naXQvd29ya3RyZWVzL2RlZi9kZWYgJiYKKwllY2hvICIkKHB3ZCkiL25vd2hlcmUgPi5naXQvd29ya3RyZWVzL2RlZi9naXRkaXIgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUgLS12ZXJib3NlID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJSZW1vdmluZyB3b3JrdHJlZXMvZGVmOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIiBhY3R1YWwgJiYKKwkhIHRlc3QgLWQgLmdpdC93b3JrdHJlZXMvZGVmICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBwcnVuZSBsb2NrZWQgY2hlY2tvdXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXIgLmdpdC93b3JrdHJlZXMgJiYKKwlta2RpciAtcCAuZ2l0L3dvcmt0cmVlcy9naGkgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9naGkvbG9ja2VkICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lICYmCisJdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy9naGkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IHBydW5lIHJlY2VudCBjaGVja291dHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXIgLmdpdC93b3JrdHJlZXMgJiYKKwlnaXQgd29ya3RyZWUgYWRkIGpsbSBIRUFEICYmCisJdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy9qbG0gJiYKKwlybSAtcmYgamxtICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSAtLWV4cGlyZT0yLmRheXMuYWdvICYmCisJdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy9qbG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IHBydW5lIHByb3BlciBjaGVja291dHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXIgLmdpdC93b3JrdHJlZXMgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoICIkUFdEL25vcCIgbWFzdGVyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lICYmCisJdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy9ub3AKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyNDAyLXdvcmt0cmVlLWxpc3Quc2ggYi90L3QyNDAyLXdvcmt0cmVlLWxpc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjlmZmU4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDI0MDItd29ya3RyZWUtbGlzdC5zaApAQCAtMCwwICsxLDE2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHdvcmt0cmVlIGxpc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgb24gbWFpbiB3b3JrdHJlZScgJworCWdpdCByZXYtcGFyc2UgLS1naXQtY29tbW9uLWRpciA+YWN0dWFsICYmCisJZWNobyAuZ2l0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCW1rZGlyIHN1YiAmJgorCWdpdCAtQyBzdWIgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbDIgJiYKKwllY2hvIC4uLy5naXQgPmV4cGVjdGVkMiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMiBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdpdC1wYXRoIG9iamVjdHMgbGlua2VkIHdvcmt0cmVlJyAnCisJZWNobyAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkvLmdpdC9vYmplY3RzIiA+ZXhwZWN0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbGlua2VkLXRyZWUgYWN0dWFsIGV4cGVjdCAmJiBnaXQgd29ya3RyZWUgcHJ1bmUiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBsaW5rZWQtdHJlZSBtYXN0ZXIgJiYKKwlnaXQgLUMgbGlua2VkLXRyZWUgcmV2LXBhcnNlIC0tZ2l0LXBhdGggb2JqZWN0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibGlzdCIgYWxsIHdvcmt0cmVlcyBmcm9tIG1haW4nICcKKwllY2hvICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSBbJChnaXQgc3ltYm9saWMtcmVmIC0tc2hvcnQgSEVBRCldIiA+ZXhwZWN0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgaGVyZSBvdXQgYWN0dWFsIGV4cGVjdCAmJiBnaXQgd29ya3RyZWUgcHJ1bmUiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBoZXJlIG1hc3RlciAmJgorCWVjaG8gIiQoZ2l0IC1DIGhlcmUgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgKGRldGFjaGVkIEhFQUQpIiA+PmV4cGVjdCAmJgorCWdpdCB3b3JrdHJlZSBsaXN0ID5vdXQgJiYKKwlzZWQgInMvICAqLyAvZyIgPG91dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibGlzdCIgYWxsIHdvcmt0cmVlcyBmcm9tIGxpbmtlZCcgJworCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpIFskKGdpdCBzeW1ib2xpYy1yZWYgLS1zaG9ydCBIRUFEKV0iID5leHBlY3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBoZXJlIG91dCBhY3R1YWwgZXhwZWN0ICYmIGdpdCB3b3JrdHJlZSBwcnVuZSIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGhlcmUgbWFzdGVyICYmCisJZWNobyAiJChnaXQgLUMgaGVyZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAoZGV0YWNoZWQgSEVBRCkiID4+ZXhwZWN0ICYmCisJZ2l0IC1DIGhlcmUgd29ya3RyZWUgbGlzdCA+b3V0ICYmCisJc2VkICJzLyAgKi8gL2ciIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgLS1wb3JjZWxhaW4nICcKKwllY2hvICJ3b3JrdHJlZSAkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSIgPmV4cGVjdCAmJgorCWVjaG8gIkhFQUQgJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA+PmV4cGVjdCAmJgorCWVjaG8gImJyYW5jaCAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID4+ZXhwZWN0ICYmCisJZWNobyA+PmV4cGVjdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGhlcmUgYWN0dWFsIGV4cGVjdCAmJiBnaXQgd29ya3RyZWUgcHJ1bmUiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBoZXJlIG1hc3RlciAmJgorCWVjaG8gIndvcmt0cmVlICQoZ2l0IC1DIGhlcmUgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkiID4+ZXhwZWN0ICYmCisJZWNobyAiSEVBRCAkKGdpdCByZXYtcGFyc2UgSEVBRCkiID4+ZXhwZWN0ICYmCisJZWNobyAiZGV0YWNoZWQiID4+ZXhwZWN0ICYmCisJZWNobyA+PmV4cGVjdCAmJgorCWdpdCB3b3JrdHJlZSBsaXN0IC0tcG9yY2VsYWluID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmUgcmVwbyBzZXR1cCcgJworCWdpdCBpbml0IC0tYmFyZSBiYXJlMSAmJgorCWVjaG8gImRhdGEiID5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIkZpbGUxOiBhZGQgZGF0YSIgJiYKKwlnaXQgcHVzaCBiYXJlMSBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJsaXN0IiBhbGwgd29ya3RyZWVzIGZyb20gYmFyZSBtYWluJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgdGhlcmUgb3V0IGFjdHVhbCBleHBlY3QgJiYgZ2l0IC1DIGJhcmUxIHdvcmt0cmVlIHBydW5lIiAmJgorCWdpdCAtQyBiYXJlMSB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggLi4vdGhlcmUgbWFzdGVyICYmCisJZWNobyAiJChwd2QpL2JhcmUxIChiYXJlKSIgPmV4cGVjdCAmJgorCWVjaG8gIiQoZ2l0IC1DIHRoZXJlIHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpICQoZ2l0IC1DIHRoZXJlIHJldi1wYXJzZSAtLXNob3J0IEhFQUQpIChkZXRhY2hlZCBIRUFEKSIgPj5leHBlY3QgJiYKKwlnaXQgLUMgYmFyZTEgd29ya3RyZWUgbGlzdCA+b3V0ICYmCisJc2VkICJzLyAgKi8gL2ciIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgLS1wb3JjZWxhaW4gZnJvbSBiYXJlIG1haW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0aGVyZSBhY3R1YWwgZXhwZWN0ICYmIGdpdCAtQyBiYXJlMSB3b3JrdHJlZSBwcnVuZSIgJiYKKwlnaXQgLUMgYmFyZTEgd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL3RoZXJlIG1hc3RlciAmJgorCWVjaG8gIndvcmt0cmVlICQocHdkKS9iYXJlMSIgPmV4cGVjdCAmJgorCWVjaG8gImJhcmUiID4+ZXhwZWN0ICYmCisJZWNobyA+PmV4cGVjdCAmJgorCWVjaG8gIndvcmt0cmVlICQoZ2l0IC1DIHRoZXJlIHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpIiA+PmV4cGVjdCAmJgorCWVjaG8gIkhFQUQgJChnaXQgLUMgdGhlcmUgcmV2LXBhcnNlIEhFQUQpIiA+PmV4cGVjdCAmJgorCWVjaG8gImRldGFjaGVkIiA+PmV4cGVjdCAmJgorCWVjaG8gPj5leHBlY3QgJiYKKwlnaXQgLUMgYmFyZTEgd29ya3RyZWUgbGlzdCAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibGlzdCIgYWxsIHdvcmt0cmVlcyBmcm9tIGxpbmtlZCB3aXRoIGEgYmFyZSBtYWluJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgdGhlcmUgb3V0IGFjdHVhbCBleHBlY3QgJiYgZ2l0IC1DIGJhcmUxIHdvcmt0cmVlIHBydW5lIiAmJgorCWdpdCAtQyBiYXJlMSB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggLi4vdGhlcmUgbWFzdGVyICYmCisJZWNobyAiJChwd2QpL2JhcmUxIChiYXJlKSIgPmV4cGVjdCAmJgorCWVjaG8gIiQoZ2l0IC1DIHRoZXJlIHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpICQoZ2l0IC1DIHRoZXJlIHJldi1wYXJzZSAtLXNob3J0IEhFQUQpIChkZXRhY2hlZCBIRUFEKSIgPj5leHBlY3QgJiYKKwlnaXQgLUMgdGhlcmUgd29ya3RyZWUgbGlzdCA+b3V0ICYmCisJc2VkICJzLyAgKi8gL2ciIDxvdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZSByZXBvIGNsZWFudXAnICcKKwlybSAtcmYgYmFyZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJva2VuIG1haW4gd29ya3RyZWUgc3RpbGwgYXQgdGhlIHRvcCcgJworCWdpdCBpbml0IGJyb2tlbi1tYWluICYmCisJKAorCQljZCBicm9rZW4tbWFpbiAmJgorCQl0ZXN0X2NvbW1pdCBuZXcgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCBsaW5rZWQgJiYKKwkJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkJd29ya3RyZWUgJChwd2QpCisJCUhFQUQgJFpFUk9fT0lECisKKwkJRU9GCisJCWNkIGxpbmtlZCAmJgorCQllY2hvICJ3b3JrdHJlZSAkKHB3ZCkiID5leHBlY3RlZCAmJgorCQllY2hvICJyZWY6IC5icm9rZW4iID4uLi8uZ2l0L0hFQUQgJiYKKwkJZ2l0IHdvcmt0cmVlIGxpc3QgLS1wb3JjZWxhaW4gPm91dCAmJgorCQloZWFkIC1uIDMgb3V0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCB3b3JrdHJlZSBsaXN0ID5vdXQgJiYKKwkJaGVhZCAtbiAxIG91dCA+YWN0dWFsLjIgJiYKKwkJZ3JlcCAtRiAiKGVycm9yKSIgYWN0dWFsLjIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpbmtlZCB3b3JrdHJlZXMgYXJlIHNvcnRlZCcgJworCW1rZGlyIHNvcnRlZCAmJgorCWdpdCBpbml0IHNvcnRlZC9tYWluICYmCisJKAorCQljZCBzb3J0ZWQvbWFpbiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJdGVzdF9jb21taXQgbmV3ICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLi4vZmlyc3QgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAuLi9zZWNvbmQgJiYKKwkJZ2l0IHdvcmt0cmVlIGxpc3QgLS1wb3JjZWxhaW4gPm91dCAmJgorCQlncmVwIF53b3JrdHJlZSBvdXQgPmFjdHVhbAorCSkgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXdvcmt0cmVlICQocHdkKS9zb3J0ZWQvbWFpbgorCXdvcmt0cmVlICQocHdkKS9zb3J0ZWQvZmlyc3QKKwl3b3JrdHJlZSAkKHB3ZCkvc29ydGVkL3NlY29uZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIHNvcnRlZC9tYWluL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JrdHJlZSBwYXRoIHdoZW4gY2FsbGVkIGluIC5naXQgZGlyZWN0b3J5JyAnCisJZ2l0IHdvcmt0cmVlIGxpc3QgPmxpc3QxJiYKKwlnaXQgLUMgLmdpdCB3b3JrdHJlZSBsaXN0ID5saXN0MiAmJgorCXRlc3RfY21wIGxpc3QxIGxpc3QyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjQwMy13b3JrdHJlZS1tb3ZlLnNoIGIvdC90MjQwMy13b3JrdHJlZS1tb3ZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzOWQxOGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyNDAzLXdvcmt0cmVlLW1vdmUuc2gKQEAgLTAsMCArMSwyMjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCB3b3JrdHJlZSBtb3ZlLCByZW1vdmUsIGxvY2sgYW5kIHVubG9jaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdCAmJgorCWdpdCB3b3JrdHJlZSBhZGQgc291cmNlICYmCisJZ2l0IHdvcmt0cmVlIGxpc3QgLS1wb3JjZWxhaW4gPm91dCAmJgorCWdyZXAgIl53b3JrdHJlZSIgb3V0ID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCXdvcmt0cmVlICQocHdkKQorCXdvcmt0cmVlICQocHdkKS9zb3VyY2UKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jayBtYWluIHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGxvY2sgLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NrIGxpbmtlZCB3b3JrdHJlZScgJworCWdpdCB3b3JrdHJlZSBsb2NrIC0tcmVhc29uIGhhaGFoYSBzb3VyY2UgJiYKKwllY2hvIGhhaGFoYSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAuZ2l0L3dvcmt0cmVlcy9zb3VyY2UvbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2sgbGlua2VkIHdvcmt0cmVlIGZyb20gYW5vdGhlciB3b3JrdHJlZScgJworCXJtIC5naXQvd29ya3RyZWVzL3NvdXJjZS9sb2NrZWQgJiYKKwlnaXQgd29ya3RyZWUgYWRkIGVsc2V3aGVyZSAmJgorCWdpdCAtQyBlbHNld2hlcmUgd29ya3RyZWUgbG9jayAtLXJlYXNvbiBoYWhhaGEgLi4vc291cmNlICYmCisJZWNobyBoYWhhaGEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgLmdpdC93b3JrdHJlZXMvc291cmNlL2xvY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NrIHdvcmt0cmVlIHR3aWNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGxvY2sgc291cmNlICYmCisJZWNobyBoYWhhaGEgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgLmdpdC93b3JrdHJlZXMvc291cmNlL2xvY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NrIHdvcmt0cmVlIHR3aWNlIChmcm9tIHRoZSBsb2NrZWQgd29ya3RyZWUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHNvdXJjZSB3b3JrdHJlZSBsb2NrIC4gJiYKKwllY2hvIGhhaGFoYSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAuZ2l0L3dvcmt0cmVlcy9zb3VyY2UvbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VubG9jayBtYWluIHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIHVubG9jayAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VubG9jayBsaW5rZWQgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgdW5sb2NrIHNvdXJjZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvd29ya3RyZWVzL3NvdXJjZS9sb2NrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5sb2NrIHdvcmt0cmVlIHR3aWNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIHVubG9jayBzb3VyY2UgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3dvcmt0cmVlcy9zb3VyY2UvbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgbm9uLXdvcmt0cmVlJyAnCisJbWtkaXIgYWJjICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIG1vdmUgYWJjIGRlZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZlIGxvY2tlZCB3b3JrdHJlZScgJworCWdpdCB3b3JrdHJlZSBsb2NrIHNvdXJjZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHdvcmt0cmVlIHVubG9jayBzb3VyY2UiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIG1vdmUgc291cmNlIGRlc3RpbmF0aW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgbW92ZSBzb3VyY2UgZGVzdGluYXRpb24gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzb3VyY2UgJiYKKwlnaXQgd29ya3RyZWUgbGlzdCAtLXBvcmNlbGFpbiA+b3V0ICYmCisJZ3JlcCAiXndvcmt0cmVlLiovZGVzdGluYXRpb24kIiBvdXQgJiYKKwkhIGdyZXAgIl53b3JrdHJlZS4qL3NvdXJjZSQiIG91dCAmJgorCWdpdCAtQyBkZXN0aW5hdGlvbiBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbDIgJiYKKwllY2hvIGluaXQgPmV4cGVjdGVkMiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMiBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgbWFpbiB3b3JrdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBtb3ZlIC4gZGVmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgd29ya3RyZWUgdG8gYW5vdGhlciBkaXInICcKKwlta2RpciBzb21lLWRpciAmJgorCWdpdCB3b3JrdHJlZSBtb3ZlIGRlc3RpbmF0aW9uIHNvbWUtZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgd29ya3RyZWUgbW92ZSBzb21lLWRpci9kZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkZXN0aW5hdGlvbiAmJgorCWdpdCB3b3JrdHJlZSBsaXN0IC0tcG9yY2VsYWluID5vdXQgJiYKKwlncmVwICJed29ya3RyZWUuKi9zb21lLWRpci9kZXN0aW5hdGlvbiQiIG91dCAmJgorCWdpdCAtQyBzb21lLWRpci9kZXN0aW5hdGlvbiBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbDIgJiYKKwllY2hvIGluaXQgPmV4cGVjdGVkMiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMiBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgbG9ja2VkIHdvcmt0cmVlIChmb3JjZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgd29ya3RyZWUgdW5sb2NrIGZsdW1wIHx8IDoKKwkJZ2l0IHdvcmt0cmVlIHJlbW92ZSBmbHVtcCB8fCA6CisJCWdpdCB3b3JrdHJlZSB1bmxvY2sgcGxvb2YgfHwgOgorCQlnaXQgd29ya3RyZWUgcmVtb3ZlIHBsb29mIHx8IDoKKwkJIiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZmx1bXAgJiYKKwlnaXQgd29ya3RyZWUgbG9jayBmbHVtcCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBtb3ZlIGZsdW1wIHBsb29mIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBtb3ZlIC0tZm9yY2UgZmx1bXAgcGxvb2YiICYmCisJZ2l0IHdvcmt0cmVlIG1vdmUgLS1mb3JjZSAtLWZvcmNlIGZsdW1wIHBsb29mCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgYSByZXBvIHdpdGggdW5pbml0aWFsaXplZCBzdWJtb2R1bGUnICcKKwlnaXQgaW5pdCB3aXRoc3ViICYmCisJKAorCQljZCB3aXRoc3ViICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRQV0QiLy5naXQgc3ViICYmCisJCWdpdCBjb21taXQgLW0gd2l0aHN1YiAmJgorCQlnaXQgd29ya3RyZWUgYWRkIHNlY29uZCBIRUFEICYmCisJCWdpdCB3b3JrdHJlZSBtb3ZlIHNlY29uZCB0aGlyZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IG1vdmUgYSByZXBvIHdpdGggaW5pdGlhbGl6ZWQgc3VibW9kdWxlJyAnCisJKAorCQljZCB3aXRoc3ViICYmCisJCWdpdCAtQyB0aGlyZCBzdWJtb2R1bGUgdXBkYXRlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBtb3ZlIHRoaXJkIGZvcnRoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbWFpbiB3b3JrdHJlZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSByZW1vdmUgLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbG9ja2VkIHdvcmt0cmVlJyAnCisJZ2l0IHdvcmt0cmVlIGxvY2sgZGVzdGluYXRpb24gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgZGVzdGluYXRpb24iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIHJlbW92ZSBkZXN0aW5hdGlvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgd29ya3RyZWUgd2l0aCBkaXJ0eSB0cmFja2VkIGZpbGUnICcKKwllY2hvIGRpcnR5ID4+ZGVzdGluYXRpb24vaW5pdC50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGVzdGluYXRpb24gY2hlY2tvdXQgaW5pdC50IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSByZW1vdmUgZGVzdGluYXRpb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHdvcmt0cmVlIHdpdGggdW50cmFja2VkIGZpbGUnICcKKwk6ID5kZXN0aW5hdGlvbi91bnRyYWNrZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgcmVtb3ZlIGRlc3RpbmF0aW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlIHJlbW92ZSB3b3JrdHJlZSB3aXRoIHVudHJhY2tlZCBmaWxlJyAnCisJZ2l0IHdvcmt0cmVlIHJlbW92ZSAtLWZvcmNlIGRlc3RpbmF0aW9uICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGVzdGluYXRpb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIG1pc3Npbmcgd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgYWRkIHRvLWJlLWdvbmUgJiYKKwl0ZXN0IC1kIC5naXQvd29ya3RyZWVzL3RvLWJlLWdvbmUgJiYKKwltdiB0by1iZS1nb25lIGdvbmUgJiYKKwlnaXQgd29ya3RyZWUgcmVtb3ZlIHRvLWJlLWdvbmUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3dvcmt0cmVlcy90by1iZS1nb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05PVCByZW1vdmUgbWlzc2luZy1idXQtbG9ja2VkIHdvcmt0cmVlJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCBnb25lLWJ1dC1sb2NrZWQgJiYKKwlnaXQgd29ya3RyZWUgbG9jayBnb25lLWJ1dC1sb2NrZWQgJiYKKwl0ZXN0IC1kIC5naXQvd29ya3RyZWVzL2dvbmUtYnV0LWxvY2tlZCAmJgorCW12IGdvbmUtYnV0LWxvY2tlZCByZWFsbHktZ29uZS1ub3cgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgcmVtb3ZlIGdvbmUtYnV0LWxvY2tlZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC93b3JrdHJlZXMvZ29uZS1idXQtbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3BlciBlcnJvciB3aGVuIHdvcmt0cmVlIG5vdCBmb3VuZCcgJworCWZvciBpIGluIG5vb2RsZSBub29kbGUvYm9yaworCWRvCisJCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBsb2NrICRpIDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIm5vdCBhIHdvcmtpbmcgdHJlZSIgZXJyIHx8IHJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbG9ja2VkIHdvcmt0cmVlIChmb3JjZSknICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGd1bWJ5ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgd29ya3RyZWUgcmVtb3ZlIGd1bWJ5IHx8IDoiICYmCisJZ2l0IHdvcmt0cmVlIGxvY2sgZ3VtYnkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB3b3JrdHJlZSB1bmxvY2sgZ3VtYnkgfHwgOiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgcmVtb3ZlIGd1bWJ5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIHJlbW92ZSAtLWZvcmNlIGd1bWJ5ICYmCisJZ2l0IHdvcmt0cmVlIHJlbW92ZSAtLWZvcmNlIC0tZm9yY2UgZ3VtYnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGNsZWFucyB1cCAuZ2l0L3dvcmt0cmVlcyB3aGVuIGVtcHR5JyAnCisJZ2l0IGluaXQgbW9vZyAmJgorCSgKKwkJY2QgbW9vZyAmJgorCQl0ZXN0X2NvbW1pdCBiaW0gJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBnb29tICYmCisJCXRlc3RfcGF0aF9leGlzdHMgLmdpdC93b3JrdHJlZXMgJiYKKwkJZ2l0IHdvcmt0cmVlIHJlbW92ZSBnb29tICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvd29ya3RyZWVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgYSByZXBvIHdpdGggdW5pbml0aWFsaXplZCBzdWJtb2R1bGUnICcKKwkoCisJCWNkIHdpdGhzdWIgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCB0by1yZW1vdmUgSEVBRCAmJgorCQlnaXQgd29ya3RyZWUgcmVtb3ZlIHRvLXJlbW92ZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IHJlbW92ZSBhIHJlcG8gd2l0aCBpbml0aWFsaXplZCBzdWJtb2R1bGUnICcKKwkoCisJCWNkIHdpdGhzdWIgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCB0by1yZW1vdmUgSEVBRCAmJgorCQlnaXQgLUMgdG8tcmVtb3ZlIHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIHJlbW92ZSB0by1yZW1vdmUKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjQwNC13b3JrdHJlZS1jb25maWcuc2ggYi90L3QyNDA0LXdvcmt0cmVlLWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yODYxMjFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjQwNC13b3JrdHJlZS1jb25maWcuc2gKQEAgLTAsMCArMSw3OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249ImNvbmZpZyBmaWxlIGluIG11bHRpIHdvcmt0cmVlIgorCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBzdGFydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgLS13b3JrdHJlZSBpbiBzaW5nbGUgd29ya3RyZWUnICcKKwlnaXQgY29uZmlnIC0td29ya3RyZWUgZm9vLmJhciB0cnVlICYmCisJdGVzdF9jbXBfY29uZmlnIHRydWUgZm9vLmJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgd29ya3RyZWVzJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCB3dDEgJiYKKwlnaXQgd29ya3RyZWUgYWRkIHd0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgLS13b3JrdHJlZSB3aXRob3V0IGV4dGVuc2lvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS13b3JrdHJlZSBmb28uYmFyIGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSB3b3JrdHJlZUNvbmZpZyBleHRlbnNpb24nICcKKwlnaXQgY29uZmlnIGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcgdHJ1ZSAmJgorCXRlc3RfY21wX2NvbmZpZyB0cnVlIGV4dGVuc2lvbnMud29ya3RyZWVDb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIGlzIHNoYXJlZCBhcyBiZWZvcmUnICcKKwlnaXQgY29uZmlnIHRoaXMuaXMgc2hhcmVkICYmCisJdGVzdF9jbXBfY29uZmlnIHNoYXJlZCB0aGlzLmlzICYmCisJdGVzdF9jbXBfY29uZmlnIC1DIHd0MSBzaGFyZWQgdGhpcy5pcyAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyB3dDIgc2hhcmVkIHRoaXMuaXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIGlzIHNoYXJlZCAoc2V0IGZyb20gYW5vdGhlciB3b3JrdHJlZSknICcKKwlnaXQgLUMgd3QxIGNvbmZpZyB0aGF0LmlzIGFsc28tc2hhcmVkICYmCisJdGVzdF9jbXBfY29uZmlnIGFsc28tc2hhcmVkIHRoYXQuaXMgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgd3QxIGFsc28tc2hhcmVkIHRoYXQuaXMgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgd3QyIGFsc28tc2hhcmVkIHRoYXQuaXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIHByaXZhdGUgdG8gbWFpbiB3b3JrdHJlZScgJworCWdpdCBjb25maWcgLS13b3JrdHJlZSB0aGlzLmlzIGZvci1tYWluICYmCisJdGVzdF9jbXBfY29uZmlnIGZvci1tYWluIHRoaXMuaXMgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgd3QxIHNoYXJlZCB0aGlzLmlzICYmCisJdGVzdF9jbXBfY29uZmlnIC1DIHd0MiBzaGFyZWQgdGhpcy5pcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgcHJpdmF0ZSB0byBsaW5rZWQgd29ya3RyZWUnICcKKwlnaXQgLUMgd3QxIGNvbmZpZyAtLXdvcmt0cmVlIHRoaXMuaXMgZm9yLXd0MSAmJgorCXRlc3RfY21wX2NvbmZpZyBmb3ItbWFpbiB0aGlzLmlzICYmCisJdGVzdF9jbXBfY29uZmlnIC1DIHd0MSBmb3Itd3QxIHRoaXMuaXMgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgd3QyIHNoYXJlZCB0aGlzLmlzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUuYmFyZSBubyBsb25nZXIgZm9yIG1haW4gb25seScgJworCXRlc3RfY29uZmlnIGNvcmUuYmFyZSB0cnVlICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5KSIgPSB0cnVlICYmCisJdGVzdCAiJChnaXQgLUMgd3QxIHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiID0gdHJ1ZSAmJgorCXRlc3QgIiQoZ2l0IC1DIHd0MiByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVyLXdvcmt0cmVlIGNvcmUuYmFyZSBpcyBwaWNrZWQgdXAnICcKKwlnaXQgLUMgd3QxIGNvbmZpZyAtLXdvcmt0cmVlIGNvcmUuYmFyZSB0cnVlICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5KSIgPSBmYWxzZSAmJgorCXRlc3QgIiQoZ2l0IC1DIHd0MSByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkpIiA9IHRydWUgJiYKKwl0ZXN0ICIkKGdpdCAtQyB3dDIgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5KSIgPSBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcud29ya3RyZWUgbm8gbG9uZ2VyIHJlYWQgd2l0aG91dCBleHRlbnNpb24nICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgZXh0ZW5zaW9ucy53b3JrdHJlZUNvbmZpZyAmJgorCXRlc3RfY21wX2NvbmZpZyBzaGFyZWQgdGhpcy5pcyAmJgorCXRlc3RfY21wX2NvbmZpZyAtQyB3dDEgc2hhcmVkIHRoaXMuaXMgJiYKKwl0ZXN0X2NtcF9jb25maWcgLUMgd3QyIHNoYXJlZCB0aGlzLmlzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjQwNS13b3JrdHJlZS1zdWJtb2R1bGUuc2ggYi90L3QyNDA1LXdvcmt0cmVlLXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMWIyYmZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjQwNS13b3JrdHJlZS1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0NvbWJpbmF0aW9uIG9mIHN1Ym1vZHVsZXMgYW5kIG11bHRpcGxlIHdvcmt0cmVlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK2Jhc2VfcGF0aD0kKHB3ZCAtUCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNyZWF0ZSBvcmlnaW4gcmVwb3MnICAnCisJZ2l0IGluaXQgb3JpZ2luL3N1YiAmJgorCXRlc3RfY29tbWl0IC1DIG9yaWdpbi9zdWIgZmlsZTEgJiYKKwlnaXQgaW5pdCBvcmlnaW4vbWFpbiAmJgorCXRlc3RfY29tbWl0IC1DIG9yaWdpbi9tYWluIGZpcnN0ICYmCisJZ2l0IC1DIG9yaWdpbi9tYWluIHN1Ym1vZHVsZSBhZGQgLi4vc3ViICYmCisJZ2l0IC1DIG9yaWdpbi9tYWluIGNvbW1pdCAtbSAiYWRkIHN1YiIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBvcmlnaW4vc3ViICJmaWxlMSB1cGRhdGVkIiBmaWxlMSBmaWxlMXVwZGF0ZWQgZmlsZTF1cGRhdGVkICYmCisJZ2l0IC1DIG9yaWdpbi9tYWluL3N1YiBwdWxsICYmCisJZ2l0IC1DIG9yaWdpbi9tYWluIGFkZCBzdWIgJiYKKwlnaXQgLUMgb3JpZ2luL21haW4gY29tbWl0IC1tICJzdWIgdXBkYXRlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNsb25lIHN1cGVycHJvamVjdCB0byBjcmVhdGUgbWFpbiB3b3JrdHJlZScgJworCWdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSAiJGJhc2VfcGF0aC9vcmlnaW4vbWFpbiIgbWFpbgorJworCityZXYxX2hhc2hfbWFpbj0kKGdpdCAtLWdpdC1kaXI9b3JpZ2luL21haW4vLmdpdCBzaG93IC0tcHJldHR5PWZvcm1hdDolaCAtcSAiSEVBRH4xIikKK3JldjFfaGFzaF9zdWI9JChnaXQgLS1naXQtZGlyPW9yaWdpbi9zdWIvLmdpdCBzaG93IC0tcHJldHR5PWZvcm1hdDolaCAtcSAiSEVBRH4xIikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHN1cGVycHJvamVjdCB3b3JrdHJlZScgJworCWdpdCAtQyBtYWluIHdvcmt0cmVlIGFkZCAiJGJhc2VfcGF0aC93b3JrdHJlZSIgIiRyZXYxX2hhc2hfbWFpbiIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc3VibW9kdWxlIGlzIGNoZWNrZWQgb3V0IGp1c3QgYWZ0ZXIgd29ya3RyZWUgYWRkJyAnCisJZ2l0IC1DIHdvcmt0cmVlIGRpZmYgLS1zdWJtb2R1bGUgbWFzdGVyIl4hIiA+b3V0ICYmCisJZ3JlcCAiZmlsZTEgdXBkYXRlZCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdXBlcnByb2plY3Qgd29ya3RyZWUgYW5kIGluaXRpYWxpemUgc3VibW9kdWxlcycgJworCWdpdCAtQyBtYWluIHdvcmt0cmVlIGFkZCAiJGJhc2VfcGF0aC93b3JrdHJlZS1zdWJtb2R1bGUtdXBkYXRlIiAiJHJldjFfaGFzaF9tYWluIiAmJgorCWdpdCAtQyB3b3JrdHJlZS1zdWJtb2R1bGUtdXBkYXRlIHN1Ym1vZHVsZSB1cGRhdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGlzIGNoZWNrZWQgb3V0IGp1c3QgYWZ0ZXIgc3VibW9kdWxlIHVwZGF0ZSBpbiBsaW5rZWQgd29ya3RyZWUnICcKKwlnaXQgLUMgd29ya3RyZWUtc3VibW9kdWxlLXVwZGF0ZSBkaWZmIC0tc3VibW9kdWxlIG1hc3RlciJeISIgPm91dCAmJgorCWdyZXAgImZpbGUxIHVwZGF0ZWQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3VwZXJwcm9qZWN0IHdvcmt0cmVlIGFuZCBtYW51YWxseSBhZGQgc3VibW9kdWxlIHdvcmt0cmVlJyAnCisJZ2l0IC1DIG1haW4gd29ya3RyZWUgYWRkICIkYmFzZV9wYXRoL2xpbmtlZF9zdWJtb2R1bGUiICIkcmV2MV9oYXNoX21haW4iICYmCisJZ2l0IC1DIG1haW4vc3ViIHdvcmt0cmVlIGFkZCAiJGJhc2VfcGF0aC9saW5rZWRfc3VibW9kdWxlL3N1YiIgIiRyZXYxX2hhc2hfc3ViIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaXMgY2hlY2tlZCBvdXQgYWZ0ZXIgbWFudWFsbHkgYWRkaW5nIHN1Ym1vZHVsZSB3b3JrdHJlZScgJworCWdpdCAtQyBsaW5rZWRfc3VibW9kdWxlIGRpZmYgLS1zdWJtb2R1bGUgbWFzdGVyIl4hIiA+b3V0ICYmCisJZ3JlcCAiZmlsZTEgdXBkYXRlZCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIHVzZXMgJEdJVF9ESVIgZm9yIHN1Ym1vZHVsZXMgaW4gYSBsaW5rZWQgd29ya3RyZWUnICcKKwlnaXQgLUMgbWFpbiB3b3JrdHJlZSBhZGQgIiRiYXNlX3BhdGgvY2hlY2tvdXQtcmVjdXJzZSIgLS1kZXRhY2ggICYmCisJZ2l0IC1DIGNoZWNrb3V0LXJlY3Vyc2Ugc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwllY2hvICJnaXRkaXI6IC4uLy4uL21haW4vLmdpdC93b3JrdHJlZXMvY2hlY2tvdXQtcmVjdXJzZS9tb2R1bGVzL3N1YiIgPmV4cGVjdC1naXRmaWxlICYmCisJY2F0IGNoZWNrb3V0LXJlY3Vyc2Uvc3ViLy5naXQgPmFjdHVhbC1naXRmaWxlICYmCisJdGVzdF9jbXAgZXhwZWN0LWdpdGZpbGUgYWN0dWFsLWdpdGZpbGUgJiYKKwlnaXQgLUMgbWFpbi9zdWIgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdC1oZWFkLW1haW4gJiYKKwlnaXQgLUMgY2hlY2tvdXQtcmVjdXJzZSBjaGVja291dCAtLXJlY3Vyc2Utc3VibW9kdWxlcyBIRUFEfjEgJiYKKwljYXQgY2hlY2tvdXQtcmVjdXJzZS9zdWIvLmdpdCA+YWN0dWFsLWdpdGZpbGUgJiYKKwlnaXQgLUMgbWFpbi9zdWIgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbC1oZWFkLW1haW4gJiYKKwl0ZXN0X2NtcCBleHBlY3QtZ2l0ZmlsZSBhY3R1YWwtZ2l0ZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdC1oZWFkLW1haW4gYWN0dWFsLWhlYWQtbWFpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JlLndvcmt0cmVlIGlzIHJlbW92ZWQgaW4gJEdJVF9ESVIvbW9kdWxlcy88bmFtZT4vY29uZmlnLCBub3QgaW4gJEdJVF9DT01NT05fRElSL21vZHVsZXMvPG5hbWU+L2NvbmZpZycgJworCWVjaG8gIi4uLy4uLy4uL3N1YiIgPmV4cGVjdC1tYWluICYmCisJZ2l0IC1DIG1haW4vc3ViIGNvbmZpZyAtLWdldCBjb3JlLndvcmt0cmVlID5hY3R1YWwtbWFpbiAmJgorCXRlc3RfY21wIGV4cGVjdC1tYWluIGFjdHVhbC1tYWluICYmCisJZWNobyAiLi4vLi4vLi4vLi4vLi4vLi4vY2hlY2tvdXQtcmVjdXJzZS9zdWIiID5leHBlY3QtbGlua2VkICYmCisJZ2l0IC1DIGNoZWNrb3V0LXJlY3Vyc2Uvc3ViIGNvbmZpZyAtLWdldCBjb3JlLndvcmt0cmVlID5hY3R1YWwtbGlua2VkICYmCisJdGVzdF9jbXAgZXhwZWN0LWxpbmtlZCBhY3R1YWwtbGlua2VkICYmCisJZ2l0IC1DIGNoZWNrb3V0LXJlY3Vyc2UgY2hlY2tvdXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgZmlyc3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IC1DIG1haW4vLmdpdC93b3JrdHJlZXMvY2hlY2tvdXQtcmVjdXJzZS9tb2R1bGVzL3N1YiBjb25maWcgLS1nZXQgY29yZS53b3JrdHJlZSA+bGlua2VkLWNvbmZpZyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBsaW5rZWQtY29uZmlnICYmCisJZ2l0IC1DIG1haW4vc3ViIGNvbmZpZyAtLWdldCBjb3JlLndvcmt0cmVlID5hY3R1YWwtbWFpbiAmJgorCXRlc3RfY21wIGV4cGVjdC1tYWluIGFjdHVhbC1tYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2V0dGluZyBjb3JlLndvcmt0cmVlIGRvZXMgbm90IHByZXZlbnQgcnVubmluZyBjb21tYW5kcyBkaXJlY3RseSBhZ2FpbnN0IHRoZSBzdWJtb2R1bGUgcmVwb3NpdG9yeScgJworCWdpdCAtQyBtYWluLy5naXQvd29ya3RyZWVzL2NoZWNrb3V0LXJlY3Vyc2UvbW9kdWxlcy9zdWIgbG9nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMC1scy1maWxlcy1vdGhlcnMuc2ggYi90L3QzMDAwLWxzLWZpbGVzLW90aGVycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYWVmYWRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwMC1scy1maWxlcy1vdGhlcnMuc2gKQEAgLTAsMCArMSw5NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyB0ZXN0cyBmb3IgbHMtZmlsZXMgLS1vdGhlcnMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdGhlIGZvbGxvd2luZyBvbiB0aGUKK2ZpbGVzeXN0ZW0uCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxCS0gYSBzeW1saW5rCisgICAgcGF0aDIvZmlsZTIgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy1qdW5rICAtIGEgZmlsZSB0byBjb25mdXNlIHRoaW5ncworICAgIHBhdGgzL2ZpbGUzIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDQgICAgICAgLSBhbiBlbXB0eSBkaXJlY3RvcnkKKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKKwlkYXRlID5wYXRoMCAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zIHh5enp5IHBhdGgxCisJZWxzZQorCQlkYXRlID5wYXRoMQorCWZpICYmCisJbWtkaXIgcGF0aDIgcGF0aDMgcGF0aDQgJiYKKwlkYXRlID5wYXRoMi9maWxlMiAmJgorCWRhdGUgPnBhdGgyLWp1bmsgJiYKKwlkYXRlID5wYXRoMy9maWxlMyAmJgorCWRhdGUgPnBhdGgzLWp1bmsgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgzLWp1bmsgcGF0aDMvZmlsZTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGV4cGVjdGVkIG91dHB1dCcgJworCWNhdCA+ZXhwZWN0ZWQxIDw8LVxFT0YgJiYKKwlleHBlY3RlZDEKKwlleHBlY3RlZDIKKwlleHBlY3RlZDMKKwlvdXRwdXQKKwlwYXRoMAorCXBhdGgxCisJcGF0aDItanVuaworCXBhdGgyL2ZpbGUyCisJRU9GCisKKwlzZWQgLWUgInN8cGF0aDIvZmlsZTJ8cGF0aDIvfCIgPGV4cGVjdGVkMSA+ZXhwZWN0ZWQyICYmCisJY3AgZXhwZWN0ZWQyIGV4cGVjdGVkMyAmJgorCWVjaG8gcGF0aDQvID4+ZXhwZWN0ZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tb3RoZXJzJyAnCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDEgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5JyAnCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tZW1wdHktZGlyZWN0b3J5IGhpZGVzIGVtcHR5IGRpcmVjdG9yeScgJworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQzIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLW90aGVycyBoYW5kbGVzIG5vbi1zdWJtb2R1bGUgLmdpdCcgJworCW1rZGlyIG5vdC1hLXN1Ym1vZHVsZSAmJgorCWVjaG8gZm9vID5ub3QtYS1zdWJtb2R1bGUvLmdpdCAmJgorCWdpdCBscy1maWxlcyAtbyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQxIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdscy1maWxlcyAtLW90aGVycyB3aXRoIHN5bWxpbmtlZCBzdWJtb2R1bGUnICcKKwlnaXQgaW5pdCBzdXBlciAmJgorCWdpdCBpbml0IHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCT5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIHN1YiAmJgorCQlnaXQgcGFjay1yZWZzIC0tYWxsCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJIiRTSEVMTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZLy4uL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIiIC4uL3N1YiBzdWIgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCA+Li4vYWN0dWFsCisJKSAmJgorCWVjaG8gc3ViLyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2ggYi90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlYzdjYjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCkBAIC0wLDAgKzEsMzAxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIGFuZCB0ZXN0cyAtLWV4Y2x1ZGUgcGF0dGVybnMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitybSAtZnIgb25lIHRocmVlCitmb3IgZGlyIGluIC4gb25lIG9uZS90d28gdGhyZWUKK2RvCisgIG1rZGlyIC1wICRkaXIgJiYKKyAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4CisgIGRvCisgICAgPiRkaXIvYS4kaQorICBkb25lCitkb25lCis+IiNpZ25vcmUxIgorPiIjaWdub3JlMiIKKz4iI2hpZGRlbiIKKworY2F0ID5leHBlY3QgPDxFT0YKK2EuMgorYS40CithLjUKK2EuOAorb25lL2EuMworb25lL2EuNAorb25lL2EuNQorb25lL2EuNworb25lL3R3by9hLjIKK29uZS90d28vYS4zCitvbmUvdHdvL2EuNQorb25lL3R3by9hLjcKK29uZS90d28vYS44Cit0aHJlZS9hLjIKK3RocmVlL2EuMwordGhyZWUvYS40Cit0aHJlZS9hLjUKK3RocmVlL2EuOAorRU9GCisKK2VjaG8gJy5naXRpZ25vcmUKK1wjaWdub3JlMQorXCNpZ25vcmUyKgorXCNoaWQqbgorb3V0cHV0CitleHBlY3QKKy5naXRpZ25vcmUKKyouNworISouOCcgPi5naXQvaWdub3JlCisKK2VjaG8gJyouMQorLyouMworISouNicgPi5naXRpZ25vcmUKK2VjaG8gJyouMgordHdvLyouNAorISouNworKi44JyA+b25lLy5naXRpZ25vcmUKK2VjaG8gJyEqLjIKKyEqLjgnID5vbmUvdHdvLy5naXRpZ25vcmUKKworYWxsaWdub3Jlcz0nLmdpdGlnbm9yZSBvbmUvLmdpdGlnbm9yZSBvbmUvdHdvLy5naXRpZ25vcmUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCB2YXJpb3VzIGV4Y2x1ZGUgb3B0aW9ucy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIFwKKyAgICAgICAtLWV4Y2x1ZGU9XCouNiBcCisgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCisgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAorICAgICAgID5vdXRwdXQgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKKworIyBUZXN0IFxyXG4gKE1TRE9TLWxpa2Ugc3lzdGVtcykKK3ByaW50ZiAnKi4xXHJcbi8qLjNcclxuISouNlxyXG4nID4uZ2l0aWdub3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCBcclxuIGxpbmUgZW5kaW5ncy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIFwKKyAgICAgICAtLWV4Y2x1ZGU9XCouNiBcCisgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCisgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAorICAgICAgID5vdXRwdXQgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2tpcC13b3JrdHJlZSBnaXRpZ25vcmUnICcKKwlnaXQgYWRkICRhbGxpZ25vcmVzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgJGFsbGlnbm9yZXMgJiYKKwlybSAkYWxsaWdub3JlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdmFyaW91cyBleGNsdWRlIG9wdGlvbnMuJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyBcCisgICAgICAgLS1leGNsdWRlPVwqLjYgXAorICAgICAgIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUgXAorICAgICAgIC0tZXhjbHVkZS1mcm9tPS5naXQvaWdub3JlIFwKKyAgICAgICA+b3V0cHV0ICYmCisgICAgIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgZ2l0aWdub3JlJyAnCisJZ2l0IGNoZWNrb3V0IC0taWdub3JlLXNraXAtd29ya3RyZWUtYml0cyAkYWxsaWdub3JlcyAmJgorCXJtIC5naXQvaW5kZXgKKycKKworY2F0ID4gZXhjbHVkZXMtZmlsZSA8PFxFT0YKKyouWzEtOF0KK2UqCitcIyoKK0VPRgorCitnaXQgY29uZmlnIGNvcmUuZXhjbHVkZXNGaWxlIGV4Y2x1ZGVzLWZpbGUKKworZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD10cnVlIHN0YXR1cyB8IGdyZXAgIl4jCSIgPiBvdXRwdXQKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIwkuZ2l0aWdub3JlCisjCWEuNgorIwlvbmUvCisjCW91dHB1dAorIwl0aHJlZS8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3RhdHVzIGhvbm9ycyBjb3JlLmV4Y2x1ZGVzZmlsZScgXAorCSd0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBzbGFzaCBpbiBleGNsdWRlIGFsbG93cyBkaXJlY3RvcnkgbWF0Y2goMSknICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9b25lLyA+b3V0cHV0ICYmCisJaWYgZ3JlcCAiXm9uZS8iIG91dHB1dAorCXRoZW4KKwkJZWNobyBPb29wcworCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgc2xhc2ggaW4gZXhjbHVkZSBhbGxvd3MgZGlyZWN0b3J5IG1hdGNoICgyKScgJworCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZT1vbmUvdHdvLyA+b3V0cHV0ICYmCisJaWYgZ3JlcCAiXm9uZS90d28vIiBvdXRwdXQKKwl0aGVuCisJCWVjaG8gT29vcHMKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHNsYXNoIGluIGV4Y2x1ZGUgZm9yY2VzIGRpcmVjdG9yeSBtYXRjaCAoMSknICcKKworCT50d28gJiYKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPXR3by8gPm91dHB1dCAmJgorCWdyZXAgIl50d28iIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHNsYXNoIGluIGV4Y2x1ZGUgZm9yY2VzIGRpcmVjdG9yeSBtYXRjaCAoMiknICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9b25lL2EuMS8gPm91dHB1dCAmJgorCWdyZXAgIl5vbmUvYS4xIiBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWdhdGVkIGV4Y2x1ZGUgbWF0Y2hlcyBjYW4gb3ZlcnJpZGUgcHJldmlvdXMgb25lcycgJworCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZT0iYS4qIiAtLWV4Y2x1ZGU9IiFhLjEiID5vdXRwdXQgJiYKKwlncmVwICJeYS4xIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjbHVkZWQgZGlyZWN0b3J5IG92ZXJyaWRlcyBjb250ZW50IHBhdHRlcm5zJyAnCisKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPSJvbmUiIC0tZXhjbHVkZT0iIW9uZS9hLjEiID5vdXRwdXQgJiYKKwlpZiBncmVwICJeb25lL2EuMSIgb3V0cHV0CisJdGhlbgorCQlmYWxzZQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lZ2F0ZWQgZGlyZWN0b3J5IGRvZXNuJ1wnJ3QgYWZmZWN0IGNvbnRlbnQgcGF0dGVybnMnICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9IiFvbmUiIC0tZXhjbHVkZT0ib25lL2EuMSIgPm91dHB1dCAmJgorCWlmIGdyZXAgIl5vbmUvYS4xIiBvdXRwdXQKKwl0aGVuCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAoc2V0dXApJyAnCisJbWtkaXIgLXAgdG9wL2wxL2wyICYmCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAvLmdpdGlnbm9yZSA+LmdpdGlnbm9yZSAmJgorCQllY2hvIGwxID4+LmdpdGlnbm9yZSAmJgorCQllY2hvIGwyID5sMS8uZ2l0aWdub3JlICYmCisJCT5sMS9sMi9sMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAodG9wbGV2ZWwpJyAnCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZAorCSkgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAobDEvbDIpJyAnCisJKAorCQljZCB0b3AvbDEvbDIgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZAorCSkgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAobDEpJyAnCisJKAorCQljZCB0b3AvbDEgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZAorCSkgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy9oaWRlIGVtcHR5IGlnbm9yZWQgZGlyZWN0b3J5IChzZXR1cCknICcKKwlybSB0b3AvbDEvbDIvbDEgJiYKKwlybSB0b3AvbDEvLmdpdGlnbm9yZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGVtcHR5IGlnbm9yZWQgZGlyZWN0b3J5IHdpdGggLS1kaXJlY3RvcnknICcKKwkoCisJCWNkIHRvcCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLWkgLS1leGNsdWRlIGwxIC0tZGlyZWN0b3J5CisJKSA+YWN0dWFsICYmCisJZWNobyBsMS8gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGlkZSBlbXB0eSBpZ25vcmVkIGRpcmVjdG9yeSB3aXRoIC0tbm8tZW1wdHktZGlyZWN0b3J5JyAnCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC1pIC0tZXhjbHVkZSBsMSAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeQorCSkgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy9oaWRlIGVtcHR5IGlnbm9yZWQgc3ViLWRpcmVjdG9yeSAoc2V0dXApJyAnCisJPiB0b3AvbDEvdHJhY2tlZCAmJgorCSgKKwkJY2QgdG9wICYmCisJCWdpdCBhZGQgLWYgbDEvdHJhY2tlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBlbXB0eSBpZ25vcmVkIHN1Yi1kaXJlY3Rvcnkgd2l0aCAtLWRpcmVjdG9yeScgJworCSgKKwkJY2QgdG9wICYmCisJCWdpdCBscy1maWxlcyAtbyAtaSAtLWV4Y2x1ZGUgbDEgLS1kaXJlY3RvcnkKKwkpID5hY3R1YWwgJiYKKwllY2hvIGwxL2wyLyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoaWRlIGVtcHR5IGlnbm9yZWQgc3ViLWRpcmVjdG9yeSB3aXRoIC0tbm8tZW1wdHktZGlyZWN0b3J5JyAnCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC1pIC0tZXhjbHVkZSBsMSAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeQorCSkgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0dGVybiBtYXRjaGVzIHByZWZpeCBjb21wbGV0ZWx5JyAnCisJZ2l0IGxzLWZpbGVzIC1pIC1vIC0tZXhjbHVkZSAiL3RocmVlL2EuM1thYmNdIiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyB3aXRoICIqKiIgcGF0dGVybnMnICcKKwljYXQgPDxcRU9GID5leHBlY3QgJiYKK2EuMQorb25lL2EuMQorb25lL3R3by9hLjEKK3RocmVlL2EuMQorRU9GCisJZ2l0IGxzLWZpbGVzIC1vIC1pIC0tZXhjbHVkZSAiKiovYS4xIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHdpdGggIioqIiBwYXR0ZXJucyBhbmQgbm8gc2xhc2hlcycgJworCWdpdCBscy1maWxlcyAtbyAtaSAtLWV4Y2x1ZGUgIm9uZSoqYS4xIiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2ggYi90L3QzMDAyLWxzLWZpbGVzLWRhc2hwYXRoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3MDRiMDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAyLWxzLWZpbGVzLWRhc2hwYXRoLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIHRlc3QgKC0tIHRvIHRlcm1pbmF0ZSB0aGUgcGF0aCBsaXN0KS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdGhlIGZvbGxvd2luZyBvbiB0aGUKK2ZpbGVzeXN0ZW0uCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIC1mb28JLSBhIGZpbGUgd2l0aCBhIGZ1bm55IG5hbWUuCisgICAgLS0JCS0gYW5vdGhlciBmaWxlIHdpdGggYSBmdW5ueSBuYW1lLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCXNldHVwIFwKKwknZWNobyBmcm90eiA+cGF0aDAgJiYKKwllY2hvIGZyb3R6ID4uLy1mb28gJiYKKwllY2hvIGZyb3R6ID4uLy0tJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIHdpdGhvdXQgcGF0aCByZXN0cmljdGlvbi4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzID5vdXRwdXQgJiYKKyAgICAgdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKKy0tCistZm9vCitvdXRwdXQKK3BhdGgwCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyB3aXRoIHBhdGggcmVzdHJpY3Rpb24uJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyBwYXRoMCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKK3BhdGgwCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyB3aXRoIHBhdGggcmVzdHJpY3Rpb24gd2l0aCAtLS4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tIHBhdGgwID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgorcGF0aDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbiB3aXRoIC0tIC0tLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS0gLS0gPm91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCistLQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgd2l0aCBubyBwYXRoIHJlc3RyaWN0aW9uLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS0gPm91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCistLQorLWZvbworb3V0cHV0CitwYXRoMAorRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMy1scy1maWxlcy1leGNsdWRlLnNoIGIvdC90MzAwMy1scy1maWxlcy1leGNsdWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1ZWMzMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAzLWxzLWZpbGVzLWV4Y2x1ZGUuc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2xzLWZpbGVzIC0tZXhjbHVkZSBkb2VzIG5vdCBhZmZlY3QgaW5kZXggZmlsZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gd2l0aCBmaWxlJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBmaWxlICYmCisJZWNobyBtb2RpZmljYXRpb24gPmZpbGUKKycKKworY2hlY2tfb3V0cHV0KCkgewordGVzdF9leHBlY3Rfc3VjY2VzcyAibHMtZmlsZXMgb3V0cHV0IGNvbnRhaW5zIGZpbGUgKCQxKSIgIgorCWVjaG8gJyQyJyA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXhjbHVkZS1zdGFuZGFyZCAtLSQxID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisiCit9CisKK2NoZWNrX2FsbF9vdXRwdXQoKSB7CisJY2hlY2tfb3V0cHV0ICdjYWNoZWQnICdmaWxlJworCWNoZWNrX291dHB1dCAnbW9kaWZpZWQnICdmaWxlJworfQorCitjaGVja19hbGxfb3V0cHV0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlsZSB0byBnaXRpZ25vcmUnICcKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUKKycKK2NoZWNrX2FsbF9vdXRwdXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLWkgbGlzdHMgb25seSB0cmFja2VkLWJ1dC1pZ25vcmVkIGZpbGVzJyAnCisJZWNobyBjb250ZW50ID5vdGhlci1maWxlICYmCisJZ2l0IGFkZCBvdGhlci1maWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLWkgLS1leGNsdWRlLXN0YW5kYXJkID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwNC1scy1maWxlcy1iYXNpYy5zaCBiL3QvdDMwMDQtbHMtZmlsZXMtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWZkNWExZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDQtbHMtZmlsZXMtYmFzaWMuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIGxzLWZpbGVzIHRlc3RzCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy1maWxlcyB3aXRoIHZhcmlvdXMgdW51c3VhbCBvciBtYWxmb3JtZWQKK2NvbW1hbmQtbGluZSBhcmd1bWVudHMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBpbiBlbXB0eSByZXBvc2l0b3J5JyAnCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHdpdGggbm9uZXhpc3RlbnQgcGF0aCcgJworCWdpdCBscy1maWxlcyBkb2Vzbm90ZXhpc3QgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgd2l0aCBub25zZW5zZSBvcHRpb24nICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgbHMtZmlsZXMgLS1ub25zZW5zZSAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgbHMtZmlsZXMiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtaCBpbiBjb3JydXB0IHJlcG9zaXRvcnknICcKKwlta2RpciBicm9rZW4gJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQk+LmdpdC9pbmRleCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgbHMtZmlsZXMgLWggPnVzYWdlIDI+JjEKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2U6IGdpdCBscy1maWxlcyAiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdscy1maWxlcyB3aXRoIGFic29sdXRlIHBhdGhzIHRvIHN5bWxpbmtzJyAnCisJbWtkaXIgc3VicyAmJgorCWxuIC1zIG5vc3VjaCBsaW5rICYmCisJbG4gLXMgLi4vbm9zdWNoIHN1YnMvbGluayAmJgorCWdpdCBhZGQgbGluayBzdWJzL2xpbmsgJiYKKwlnaXQgbHMtZmlsZXMgLXMgbGluayBzdWJzL2xpbmsgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtcyAiJChwd2QpL2xpbmsiICIkKHB3ZCkvc3Vicy9saW5rIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJKAorCQljZCBzdWJzICYmCisJCWdpdCBscy1maWxlcyAtcyBsaW5rID4uLi9leHBlY3QgJiYKKwkJZ2l0IGxzLWZpbGVzIC1zICIkKHB3ZCkvbGluayIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwNS1scy1maWxlcy1yZWxhdGl2ZS5zaCBiL3QvdDMwMDUtbHMtZmlsZXMtcmVsYXRpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmVjNjlhOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDUtbHMtZmlsZXMtcmVsYXRpdmUuc2gKQEAgLTAsMCArMSw2OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2xzLWZpbGVzIHRlc3RzIHdpdGggcmVsYXRpdmUgcGF0aHMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIHdpdGggdmFyaW91cyByZWxhdGl2ZSBwYXRoIGFyZ3VtZW50cy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUnICcKKwk6ID5uZXZlci1taW5kLW1lICYmCisJZ2l0IGFkZCBuZXZlci1taW5kLW1lICYmCisJbWtkaXIgdG9wICYmCisJKAorCQljZCB0b3AgJiYKKwkJbWtkaXIgc3ViICYmCisJCXg9InggeGEgeGJjIHhkZWYgeGdoaWogeGtsbW5vIiAmJgorCQl5PSQoZWNobyAiJHgiIHwgdHIgeCB5KSAmJgorCQl0b3VjaCAkeCAmJgorCQl0b3VjaCAkeSAmJgorCQljZCBzdWIgJiYKKwkJZ2l0IGFkZCAuLi94KgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgd2l0aCBtaXhlZCBsZXZlbHMnICcKKwkoCisJCWNkIHRvcC9zdWIgJiYKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCS4uLy4uL25ldmVyLW1pbmQtbWUKKwkJLi4veAorCQlFT0YKKwkJZ2l0IGxzLWZpbGVzICQoY2F0IGV4cGVjdCkgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtYycgJworCSgKKwkJY2QgdG9wL3N1YiAmJgorCQlmb3IgZiBpbiAuLi95KgorCQlkbworCQkJZWNobyAiZXJyb3I6IHBhdGhzcGVjICRTUSRmJFNRIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IgorCQlkb25lID5leHBlY3QuZXJyICYmCisJCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvICR7U1F9Z2l0IGFkZCR7U1F9PyIgPj5leHBlY3QuZXJyICYmCisJCWxzIC4uL3gqID5leHBlY3Qub3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtYyAtLWVycm9yLXVubWF0Y2ggLi4vW3h5XSogPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtbycgJworCSgKKwkJY2QgdG9wL3N1YiAmJgorCQlmb3IgZiBpbiAuLi94KgorCQlkbworCQkJZWNobyAiZXJyb3I6IHBhdGhzcGVjICRTUSRmJFNRIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IgorCQlkb25lID5leHBlY3QuZXJyICYmCisJCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvICR7U1F9Z2l0IGFkZCR7U1F9PyIgPj5leHBlY3QuZXJyICYmCisJCWxzIC4uL3kqID5leHBlY3Qub3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtbyAtLWVycm9yLXVubWF0Y2ggLi4vW3h5XSogPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDYtbHMtZmlsZXMtbG9uZy5zaCBiL3QvdDMwMDYtbHMtZmlsZXMtbG9uZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMTA5YzNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwNi1scy1maWxlcy1sb25nLnNoCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdvdmVybHkgbG9uZyBwYXRocycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlwPWZpbGVmaWxlZmlsZWZpbGVmaWxlZmlsZWZpbGVmaWxlICYmCisJcD0kcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCAmJgorCXA9JHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAgJiYKKworCXBhdGhfYT0ke3B9X2EgJiYKKwlwYXRoX3o9JHtwfV96ICYmCisKKwlibG9iX2E9JChlY2hvIGZyb3R6IHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJYmxvYl96PSQoZWNobyBuaXRmb2wgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKworCXBhdD0iMTAwNjQ0ICVzIDBcdCVzXG4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJseS1sb25nIHBhdGggYnkgaXRzZWxmIGlzIG5vdCBhIHByb2JsZW0nICcKKwlwcmludGYgIiRwYXQiICIkYmxvYl9hIiAiJHBhdGhfYSIgfAorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1pbmRleC1pbmZvICYmCisJZWNobyAiJHBhdGhfYSIgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybHktbG9uZyBwYXRoIGRvZXMgbm90IHJlcGxhY2UgYW5vdGhlciBieSBtaXN0YWtlJyAnCisJcHJpbnRmICIkcGF0IiAiJGJsb2JfYSIgIiRwYXRoX2EiICIkYmxvYl96IiAiJHBhdGhfeiIgfAorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1pbmRleC1pbmZvICYmCisJKAorCQllY2hvICIkcGF0aF9hIiAmJgorCQllY2hvICIkcGF0aF96IgorCSkgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDctbHMtZmlsZXMtcmVjdXJzZS1zdWJtb2R1bGVzLnNoIGIvdC90MzAwNy1scy1maWxlcy1yZWN1cnNlLXN1Ym1vZHVsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGEwODAwMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDctbHMtZmlsZXMtcmVjdXJzZS1zdWJtb2R1bGVzLnNoCkBAIC0wLDAgKzEsMjk5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBscy1maWxlcyByZWN1cnNlLXN1Ym1vZHVsZXMgZmVhdHVyZQorCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIHJlY3Vyc2Utc3VibW9kdWxlcyBmZWF0dXJlIGNvcnJlY3RseSBsaXN0cyBmaWxlcyBmcm9tCitzdWJtb2R1bGVzLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgc3VibW9kdWxlcycgJworCWVjaG8gYSA+YSAmJgorCW1rZGlyIGIgJiYKKwllY2hvIGIgPmIvYiAmJgorCWdpdCBhZGQgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgYW5kIGIiICYmCisJZ2l0IGluaXQgc3VibW9kdWxlICYmCisJZWNobyBjID5zdWJtb2R1bGUvYyAmJgorCWdpdCAtQyBzdWJtb2R1bGUgYWRkIGMgJiYKKwlnaXQgLUMgc3VibW9kdWxlIGNvbW1pdCAtbSAiYWRkIGMiICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9zdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBzdWJtb2R1bGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIGNvcnJlY3RseSBvdXRwdXRzIGZpbGVzIGluIHN1Ym1vZHVsZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuZ2l0bW9kdWxlcworCWEKKwliL2IKKwlzdWJtb2R1bGUvYworCUVPRgorCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIGNvcnJlY3RseSBvdXRwdXRzIGZpbGVzIGluIHN1Ym1vZHVsZSB3aXRoIC16JyAnCisJbGZfdG9fbnVsID5leHBlY3QgPDwtXEVPRiAmJgorCS5naXRtb2R1bGVzCisJYQorCWIvYgorCXN1Ym1vZHVsZS9jCisJRU9GCisKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLXogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgZG9lcyBub3Qgb3V0cHV0IGZpbGVzIG5vdCBhZGRlZCB0byBhIHJlcG8nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLmdpdG1vZHVsZXMKKwlhCisJYi9iCisJc3VibW9kdWxlL2MKKwlFT0YKKworCWVjaG8gYSA+bm90X2FkZGVkICYmCisJZWNobyBiID5iL25vdF9hZGRlZCAmJgorCWVjaG8gYyA+c3VibW9kdWxlL25vdF9hZGRlZCAmJgorCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyByZWN1cnNlcyBtb3JlIHRoYW4gMSBsZXZlbCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuZ2l0bW9kdWxlcworCWEKKwliL2IKKwlzdWJtb2R1bGUvLmdpdG1vZHVsZXMKKwlzdWJtb2R1bGUvYworCXN1Ym1vZHVsZS9zdWJzdWIvZAorCUVPRgorCisJZ2l0IGluaXQgc3VibW9kdWxlL3N1YnN1YiAmJgorCWVjaG8gZCA+c3VibW9kdWxlL3N1YnN1Yi9kICYmCisJZ2l0IC1DIHN1Ym1vZHVsZS9zdWJzdWIgYWRkIGQgJiYKKwlnaXQgLUMgc3VibW9kdWxlL3N1YnN1YiBjb21taXQgLW0gImFkZCBkIiAmJgorCWdpdCAtQyBzdWJtb2R1bGUgc3VibW9kdWxlIGFkZCAuL3N1YnN1YiAmJgorCWdpdCAtQyBzdWJtb2R1bGUgY29tbWl0IC1tICJhZGRlZCBzdWJzdWIiICYmCisJZ2l0IHN1Ym1vZHVsZSBhYnNvcmJnaXRkaXJzICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHdvcmtzIHdpdGggR0lUX0RJUicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuZ2l0bW9kdWxlcworCWMKKwlzdWJzdWIvZAorCUVPRgorCisJZ2l0IC0tZ2l0LWRpcj1zdWJtb2R1bGUvLmdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlY3Vyc2Utc3VibW9kdWxlcyBhbmQgcGF0aHNwZWNzIHNldHVwJyAnCisJZWNobyBlID5zdWJtb2R1bGUvc3Vic3ViL2UudHh0ICYmCisJZ2l0IC1DIHN1Ym1vZHVsZS9zdWJzdWIgYWRkIGUudHh0ICYmCisJZ2l0IC1DIHN1Ym1vZHVsZS9zdWJzdWIgY29tbWl0IC1tICJhZGRpbmcgZS50eHQiICYmCisJZWNobyBmID5zdWJtb2R1bGUvZi5UWFQgJiYKKwllY2hvIGcgPnN1Ym1vZHVsZS9nLnR4dCAmJgorCWdpdCAtQyBzdWJtb2R1bGUgYWRkIGYuVFhUIGcudHh0ICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBjb21taXQgLW0gImFkZCBmIGFuZCBnIiAmJgorCWVjaG8gaCA+aC50eHQgJiYKKwlta2RpciBzaWIgJiYKKwllY2hvIHNpYiA+c2liL2ZpbGUgJiYKKwlnaXQgYWRkIGgudHh0IHNpYi9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGggYW5kIHNpYi9maWxlIiAmJgorCWdpdCBpbml0IHN1YiAmJgorCWVjaG8gc3ViID5zdWIvZmlsZSAmJgorCWdpdCAtQyBzdWIgYWRkIGZpbGUgJiYKKwlnaXQgLUMgc3ViIGNvbW1pdCAtbSAiYWRkIGZpbGUiICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9zdWIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBzdWIiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLmdpdG1vZHVsZXMKKwlhCisJYi9iCisJaC50eHQKKwlzaWIvZmlsZQorCXN1Yi9maWxlCisJc3VibW9kdWxlLy5naXRtb2R1bGVzCisJc3VibW9kdWxlL2MKKwlzdWJtb2R1bGUvZi5UWFQKKwlzdWJtb2R1bGUvZy50eHQKKwlzdWJtb2R1bGUvc3Vic3ViL2QKKwlzdWJtb2R1bGUvc3Vic3ViL2UudHh0CisJRU9GCisKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgIioiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luYWN0aXZlIHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLWJvb2wgc3VibW9kdWxlLnN1Ym1vZHVsZS5hY3RpdmUgdHJ1ZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdWJtb2R1bGUgY29uZmlnIC0tYm9vbCBzdWJtb2R1bGUuc3Vic3ViLmFjdGl2ZSB0cnVlIiAmJgorCWdpdCBjb25maWcgLS1ib29sIHN1Ym1vZHVsZS5zdWJtb2R1bGUuYWN0aXZlICJmYWxzZSIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuZ2l0bW9kdWxlcworCWEKKwliL2IKKwloLnR4dAorCXNpYi9maWxlCisJc3ViL2ZpbGUKKwlzdWJtb2R1bGUKKwlFT0YKKworCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IGNvbmZpZyAtLWJvb2wgc3VibW9kdWxlLnN1Ym1vZHVsZS5hY3RpdmUgInRydWUiICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSBjb25maWcgLS1ib29sIHN1Ym1vZHVsZS5zdWJzdWIuYWN0aXZlICJmYWxzZSIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkuZ2l0bW9kdWxlcworCWEKKwliL2IKKwloLnR4dAorCXNpYi9maWxlCisJc3ViL2ZpbGUKKwlzdWJtb2R1bGUvLmdpdG1vZHVsZXMKKwlzdWJtb2R1bGUvYworCXN1Ym1vZHVsZS9mLlRYVAorCXN1Ym1vZHVsZS9nLnR4dAorCXN1Ym1vZHVsZS9zdWJzdWIKKwlFT0YKKworCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlY3Vyc2Utc3VibW9kdWxlcyBhbmQgcGF0aHNwZWNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWgudHh0CisJc3VibW9kdWxlL2cudHh0CisJc3VibW9kdWxlL3N1YnN1Yi9lLnR4dAorCUVPRgorCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICIqLnR4dCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWN1cnNlLXN1Ym1vZHVsZXMgYW5kIHBhdGhzcGVjcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwloLnR4dAorCXN1Ym1vZHVsZS9mLlRYVAorCXN1Ym1vZHVsZS9nLnR4dAorCXN1Ym1vZHVsZS9zdWJzdWIvZS50eHQKKwlFT0YKKworCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAiOihpY2FzZSkqLnR4dCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWN1cnNlLXN1Ym1vZHVsZXMgYW5kIHBhdGhzcGVjcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwloLnR4dAorCXN1Ym1vZHVsZS9mLlRYVAorCXN1Ym1vZHVsZS9nLnR4dAorCUVPRgorCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICI6KGljYXNlKSoudHh0IiAiOihleGNsdWRlKXN1Ym1vZHVsZS9zdWJzdWIvKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWN1cnNlLXN1Ym1vZHVsZXMgYW5kIHBhdGhzcGVjcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlzdWIvZmlsZQorCUVPRgorCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICJzdWIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICJzdWIvIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAic3ViL2ZpbGUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICJzdSovZmlsZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgInN1Py9maWxlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlY3Vyc2Utc3VibW9kdWxlcyBhbmQgcGF0aHNwZWNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXNpYi9maWxlCisJc3ViL2ZpbGUKKwlFT0YKKworCWdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAicz8/L2ZpbGUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzICJzPz8/ZmlsZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgInMqZmlsZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWN1cnNlLXN1Ym1vZHVsZXMgYW5kIHJlbGF0aXZlIHBhdGhzJyAnCisJIyBGcm9tIHN1YmRpcgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwliCisJRU9GCisJZ2l0IC1DIGIgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgUmVsYXRpdmUgcGF0aCB0byB0b3AKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLi4vLmdpdG1vZHVsZXMKKwkuLi9hCisJYgorCS4uL2gudHh0CisJLi4vc2liL2ZpbGUKKwkuLi9zdWIvZmlsZQorCS4uL3N1Ym1vZHVsZS8uZ2l0bW9kdWxlcworCS4uL3N1Ym1vZHVsZS9jCisJLi4vc3VibW9kdWxlL2YuVFhUCisJLi4vc3VibW9kdWxlL2cudHh0CisJLi4vc3VibW9kdWxlL3N1YnN1Yi9kCisJLi4vc3VibW9kdWxlL3N1YnN1Yi9lLnR4dAorCUVPRgorCWdpdCAtQyBiIGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tIC4uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFJlbGF0aXZlIHBhdGggdG8gc3VibW9kdWxlCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS4uL3N1Ym1vZHVsZS8uZ2l0bW9kdWxlcworCS4uL3N1Ym1vZHVsZS9jCisJLi4vc3VibW9kdWxlL2YuVFhUCisJLi4vc3VibW9kdWxlL2cudHh0CisJLi4vc3VibW9kdWxlL3N1YnN1Yi9kCisJLi4vc3VibW9kdWxlL3N1YnN1Yi9lLnR4dAorCUVPRgorCWdpdCAtQyBiIGxzLWZpbGVzIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tIC4uL3N1Ym1vZHVsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlY3Vyc2Utc3VibW9kdWxlcyBkb2VzIG5vdCBzdXBwb3J0IC0tZXJyb3ItdW5tYXRjaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLWVycm9yLXVubWF0Y2ggMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJkb2VzIG5vdCBzdXBwb3J0IC0tZXJyb3ItdW5tYXRjaCIgYWN0dWFsCisnCisKK3Rlc3RfaW5jb21wYXRpYmxlX3dpdGhfcmVjdXJzZV9zdWJtb2R1bGVzICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICItLXJlY3Vyc2Utc3VibW9kdWxlcyBhbmQgJDEgYXJlIGluY29tcGF0aWJsZSIgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgJDEgMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAndW5zdXBwb3J0ZWQgbW9kZScgYWN0dWFsCisJIgorfQorCit0ZXN0X2luY29tcGF0aWJsZV93aXRoX3JlY3Vyc2Vfc3VibW9kdWxlcyAtLWRlbGV0ZWQKK3Rlc3RfaW5jb21wYXRpYmxlX3dpdGhfcmVjdXJzZV9zdWJtb2R1bGVzIC0tbW9kaWZpZWQKK3Rlc3RfaW5jb21wYXRpYmxlX3dpdGhfcmVjdXJzZV9zdWJtb2R1bGVzIC0tb3RoZXJzCit0ZXN0X2luY29tcGF0aWJsZV93aXRoX3JlY3Vyc2Vfc3VibW9kdWxlcyAtLXN0YWdlCit0ZXN0X2luY29tcGF0aWJsZV93aXRoX3JlY3Vyc2Vfc3VibW9kdWxlcyAtLWtpbGxlZAordGVzdF9pbmNvbXBhdGlibGVfd2l0aF9yZWN1cnNlX3N1Ym1vZHVsZXMgLS11bm1lcmdlZAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDgtbHMtZmlsZXMtbGF6eS1pbml0LW5hbWUtaGFzaC5zaCBiL3QvdDMwMDgtbHMtZmlsZXMtbGF6eS1pbml0LW5hbWUtaGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NWYzNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwOC1scy1maWxlcy1sYXp5LWluaXQtbmFtZS1oYXNoLnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBsYXp5IGluaXQgbmFtZSBoYXNoIHdpdGggdmFyaW91cyBmb2xkZXIgc3RydWN0dXJlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK2lmIHRlc3QgMSAtZXEgJCh0ZXN0LXRvb2wgb25saW5lLWNwdXMpCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGxhenktaW5pdCB0ZXN0cywgc2luZ2xlIGNwdScKKwl0ZXN0X2RvbmUKK2ZpCisKK0xBWllfVEhSRUFEX0NPU1Q9MjAwMAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBidWZmZXIgb3ZlcmZsb3cgaW4gbGF6eV9pbml0X25hbWVfaGFzaCcgJworCSgKKwkgICAgdGVzdF9zZXEgJExBWllfVEhSRUFEX0NPU1QgfCBzZWQgInMvXi9hXy8iICYmCisJICAgIGVjaG8gYi9iL2IgJiYKKwkgICAgdGVzdF9zZXEgJExBWllfVEhSRUFEX0NPU1QgfCBzZWQgInMvXi9jXy8iICYmCisJICAgIHRlc3Rfc2VxIDUwIHwgc2VkICJzL14vZF8vIiB8IHRyICJcbiIgIi8iICYmIGVjaG8gZAorCSkgfAorCXNlZCAicy9eLzEwMDY0NCAkRU1QVFlfQkxPQgkvIiB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwl0ZXN0LXRvb2wgbGF6eS1pbml0LW5hbWUtaGFzaCAtbQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDktbHMtZmlsZXMtb3RoZXJzLW5vbnN1Ym1vZHVsZS5zaCBiL3QvdDMwMDktbHMtZmlsZXMtb3RoZXJzLW5vbnN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjNmMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwOS1scy1maWxlcy1vdGhlcnMtbm9uc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCBscy1maWxlcyAtLW90aGVycyB3aXRoIG5vbi1zdWJtb2R1bGUgcmVwb3NpdG9yaWVzCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy1maWxlcyAtLW90aGVycyB3aXRoIHRoZSBmb2xsb3dpbmcgd29ya2luZyB0cmVlOgorCisgICAgbm9ucmVwby1uby1maWxlcy8KKyAgICAgIHBsYWluIGRpcmVjdG9yeSB3aXRoIG5vIGZpbGVzCisgICAgbm9ucmVwby11bnRyYWNrZWQtZmlsZS8KKyAgICAgIHBsYWluIGRpcmVjdG9yeSB3aXRoIGFuIHVudHJhY2tlZCBmaWxlCisgICAgcmVwby1uby1jb21taXQtbm8tZmlsZXMvCisgICAgICBnaXQgcmVwb3NpdG9yeSB3aXRob3V0IGEgY29tbWl0IG9yIGEgZmlsZQorICAgIHJlcG8tbm8tY29tbWl0LXVudHJhY2tlZC1maWxlLworICAgICAgZ2l0IHJlcG9zaXRvcnkgd2l0aG91dCBhIGNvbW1pdCBidXQgd2l0aCBhbiB1bnRyYWNrZWQgZmlsZQorICAgIHJlcG8td2l0aC1jb21taXQtbm8tZmlsZXMvCisgICAgICBnaXQgcmVwb3NpdG9yeSB3aXRoIGEgY29tbWl0IGFuZCBubyB1bnRyYWNrZWQgZmlsZXMKKyAgICByZXBvLXdpdGgtY29tbWl0LXVudHJhY2tlZC1maWxlLworICAgICAgZ2l0IHJlcG9zaXRvcnkgd2l0aCBhIGNvbW1pdCBhbmQgYW4gdW50cmFja2VkIGZpbGUKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBkaXJlY3RvcmllcycgJworCW1rZGlyIG5vbnJlcG8tbm8tZmlsZXMvICYmCisJbWtkaXIgbm9ucmVwby11bnRyYWNrZWQtZmlsZSAmJgorCTogPm5vbnJlcG8tdW50cmFja2VkLWZpbGUvdW50cmFja2VkICYmCisJZ2l0IGluaXQgcmVwby1uby1jb21taXQtbm8tZmlsZXMgJiYKKwlnaXQgaW5pdCByZXBvLW5vLWNvbW1pdC11bnRyYWNrZWQtZmlsZSAmJgorCTogPnJlcG8tbm8tY29tbWl0LXVudHJhY2tlZC1maWxlL3VudHJhY2tlZCAmJgorCWdpdCBpbml0IHJlcG8td2l0aC1jb21taXQtbm8tZmlsZXMgJiYKKwlnaXQgLUMgcmVwby13aXRoLWNvbW1pdC1uby1maWxlcyBjb21taXQgLS1hbGxvdy1lbXB0eSAtbW1zZyAmJgorCWdpdCBpbml0IHJlcG8td2l0aC1jb21taXQtdW50cmFja2VkLWZpbGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyByZXBvLXdpdGgtY29tbWl0LXVudHJhY2tlZC1maWxlIG1zZyAmJgorCTogPnJlcG8td2l0aC1jb21taXQtdW50cmFja2VkLWZpbGUvdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tb3RoZXJzIGhhbmRsZXMgdW50cmFja2VkIGdpdCByZXBvc2l0b3JpZXMnICcKKwlnaXQgbHMtZmlsZXMgLW8gPm91dHB1dCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCW5vbnJlcG8tdW50cmFja2VkLWZpbGUvdW50cmFja2VkCisJb3V0cHV0CisJcmVwby1uby1jb21taXQtbm8tZmlsZXMvCisJcmVwby1uby1jb21taXQtdW50cmFja2VkLWZpbGUvCisJcmVwby13aXRoLWNvbW1pdC1uby1maWxlcy8KKwlyZXBvLXdpdGgtY29tbWl0LXVudHJhY2tlZC1maWxlLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC1tb2RpZmllZC5zaCBiL3QvdDMwMTAtbHMtZmlsZXMta2lsbGVkLW1vZGlmaWVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4MGUxNTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC1tb2RpZmllZC5zaApAQCAtMCwwICsxLDEyNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtZmlsZXMgLWsgYW5kIC1tIGZsYWdzIHRlc3QuCisKK1RoaXMgdGVzdCBwcmVwYXJlcyB0aGUgZm9sbG93aW5nIGluIHRoZSBjYWNoZToKKworICAgIHBhdGgwICAgICAgIC0gYSBmaWxlCisgICAgcGF0aDEgICAgICAgLSBhIHN5bWxpbmsKKyAgICBwYXRoMi9maWxlMiAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgzL2ZpbGUzIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aHgvanUgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBzdWJtb2QxLwktIGEgc3VibW9kdWxlCisgICAgc3VibW9kMi8JLSBhbm90aGVyIHN1Ym1vZHVsZQorCithbmQgdGhlIGZvbGxvd2luZyBvbiB0aGUgZmlsZXN5c3RlbToKKworICAgIHBhdGgwL2ZpbGUwIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDEvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMiAgICAgICAtIGEgZmlsZQorICAgIHBhdGgzICAgICAgIC0gYSBzeW1saW5rCisgICAgcGF0aDQJLSBhIGZpbGUKKyAgICBwYXRoNQktIGEgc3ltbGluaworICAgIHBhdGg2L2ZpbGU2IC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aHgvanUvbmsgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkgdG8gYmUga2lsbGVkCisgICAgc3VibW9kMS8JLSBhIHN1Ym1vZHVsZSAobW9kaWZpZWQgZnJvbSB0aGUgY2FjaGUpCisgICAgc3VibW9kMi8JLSBhIHN1Ym1vZHVsZSAobWF0Y2hlcyB0aGUgY2FjaGUpCisKK2dpdCBscy1maWxlcyAtayBzaG91bGQgcmVwb3J0IHRoYXQgZXhpc3RpbmcgZmlsZXN5c3RlbSBvYmplY3RzCitwYXRoMC8qLCBwYXRoMS8qLCBwYXRoMiBhbmQgcGF0aDMgdG8gYmUga2lsbGVkLgorCitBbHNvIGZvciBtb2RpZmljYXRpb24gdGVzdCwgdGhlIGNhY2hlIGFuZCB3b3JraW5nIHRyZWUgaGF2ZToKKworICAgIHBhdGg3ICAgICAgIC0gYW4gZW1wdHkgZmlsZSwgbW9kaWZpZWQgdG8gYSBub24tZW1wdHkgZmlsZS4KKyAgICBwYXRoOCAgICAgICAtIGEgbm9uLWVtcHR5IGZpbGUsIG1vZGlmaWVkIHRvIGFuIGVtcHR5IGZpbGUuCisgICAgcGF0aDkJLSBhbiBlbXB0eSBmaWxlLCBjYWNoZSBkaXJ0aWVkLgorICAgIHBhdGgxMAktIGEgbm9uLWVtcHR5IGZpbGUsIGNhY2hlIGRpcnRpZWQuCisKK1dlIHNob3VsZCByZXBvcnQgcGF0aDAsIHBhdGgxLCBwYXRoMi9maWxlMiwgcGF0aDMvZmlsZTMsIHBhdGg3IGFuZCBwYXRoOAorbW9kaWZpZWQgd2l0aG91dCByZXBvcnRpbmcgcGF0aDkgYW5kIHBhdGgxMC4gIHN1Ym1vZDEgaXMgYWxzbyBtb2RpZmllZC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRvIGFkZCB2YXJpb3VzIHBhdGhzLicgJworCWRhdGUgPnBhdGgwICYmCisJdGVzdF9sbl9zX2FkZCB4eXp6eSBwYXRoMSAmJgorCW1rZGlyIHBhdGgyIHBhdGgzIHBhdGh4ICYmCisJZGF0ZSA+cGF0aDIvZmlsZTIgJiYKKwlkYXRlID5wYXRoMy9maWxlMyAmJgorCT5wYXRoeC9qdSAmJgorCTogPnBhdGg3ICYmCisJZGF0ZSA+cGF0aDggJiYKKwk6ID5wYXRoOSAmJgorCWRhdGUgPnBhdGgxMCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gcGF0aDAgcGF0aD8vZmlsZT8gcGF0aHgvanUgcGF0aDcgcGF0aDggcGF0aDkgcGF0aDEwICYmCisJZ2l0IGluaXQgc3VibW9kMSAmJgorCWdpdCAtQyBzdWJtb2QxIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJlbXB0eSAxIiAmJgorCWdpdCBpbml0IHN1Ym1vZDIgJiYKKwlnaXQgLUMgc3VibW9kMiBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkgMiIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHN1Ym1vZFsxMl0gJiYKKwkoCisJCWNkIHN1Ym1vZDEgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJlbXB0eSAxICh1cGRhdGVkKSIKKwkpICYmCisJcm0gLWZyIHBhdGg/CSMgbGVhdmUgcGF0aDEwIGFsb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtayB0byBzaG93IGtpbGxlZCBmaWxlcy4nICcKKwlkYXRlID5wYXRoMiAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zIGZyb3R6IHBhdGgzICYmCisJCWxuIC1zIG5pdGZvbCBwYXRoNQorCWVsc2UKKwkJZGF0ZSA+cGF0aDMgJiYKKwkJZGF0ZSA+cGF0aDUKKwlmaSAmJgorCW1rZGlyIC1wIHBhdGgwIHBhdGgxIHBhdGg2IHBhdGh4L2p1ICYmCisJZGF0ZSA+cGF0aDAvZmlsZTAgJiYKKwlkYXRlID5wYXRoMS9maWxlMSAmJgorCWRhdGUgPnBhdGg2L2ZpbGU2ICYmCisJZGF0ZSA+cGF0aDcgJiYKKwk6ID5wYXRoOCAmJgorCTogPnBhdGg5ICYmCisJdG91Y2ggcGF0aDEwICYmCisJPnBhdGh4L2p1L25rICYmCisJY2F0ID4uZXhwZWN0ZWQgPDwtXEVPRgorCXBhdGgwL2ZpbGUwCisJcGF0aDEvZmlsZTEKKwlwYXRoMgorCXBhdGgzCisJcGF0aHgvanUvbmsKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1rIG91dHB1dCAody9vIGljYXNlKScgJworCWdpdCBscy1maWxlcyAtayA+Lm91dHB1dCAmJgorCXRlc3RfY21wIC5leHBlY3RlZCAub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtayBvdXRwdXQgKHcvIGljYXNlKScgJworCWdpdCAtYyBjb3JlLmlnbm9yZWNhc2U9dHJ1ZSBscy1maWxlcyAtayA+Lm91dHB1dCAmJgorCXRlc3RfY21wIC5leHBlY3RlZCAub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbSB0byBzaG93IG1vZGlmaWVkIGZpbGVzLicgJworCWdpdCBscy1maWxlcyAtbSA+Lm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBnaXQgbHMtZmlsZXMgLW0gb3V0cHV0LicgJworCWNhdCA+LmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlwYXRoMAorCXBhdGgxCisJcGF0aDIvZmlsZTIKKwlwYXRoMy9maWxlMworCXBhdGg3CisJcGF0aDgKKwlwYXRoeC9qdQorCXN1Ym1vZDEKKwlFT0YKKwl0ZXN0X2NtcCAuZXhwZWN0ZWQgLm91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMTEtY29tbW9uLXByZWZpeGVzLWFuZC1kaXJlY3RvcnktdHJhdmVyc2FsLnNoIGIvdC90MzAxMS1jb21tb24tcHJlZml4ZXMtYW5kLWRpcmVjdG9yeS10cmF2ZXJzYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2RhNWIyYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMTEtY29tbW9uLXByZWZpeGVzLWFuZC1kaXJlY3RvcnktdHJhdmVyc2FsLnNoCkBAIC0wLDAgKzEsMjA5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlyZWN0b3J5IHRyYXZlcnNhbCBoYW5kbGluZywgZXNwZWNpYWxseSB3aXRoIGNvbW1vbiBwcmVmaXhlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaGVsbG8gJiYKKworCT5lbXB0eSAmJgorCW1rZGlyIHVudHJhY2tlZF9kaXIgJiYKKwk+dW50cmFja2VkX2Rpci9lbXB0eSAmJgorCWdpdCBpbml0IHVudHJhY2tlZF9yZXBvICYmCisJPnVudHJhY2tlZF9yZXBvL2VtcHR5ICYmCisKKwljYXQgPDwtRU9GID4uZ2l0aWdub3JlICYmCisJaWdub3JlZAorCWFuX2lnbm9yZWRfZGlyLworCUVPRgorCW1rZGlyIGFuX2lnbm9yZWRfZGlyICYmCisJbWtkaXIgYW5fdW50cmFja2VkX2RpciAmJgorCT5hbl9pZ25vcmVkX2Rpci9pZ25vcmVkICYmCisJPmFuX2lnbm9yZWRfZGlyL3VudHJhY2tlZCAmJgorCT5hbl91bnRyYWNrZWRfZGlyL2lnbm9yZWQgJiYKKwk+YW5fdW50cmFja2VkX2Rpci91bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1vIHNob3dzIHRoZSByaWdodCBlbnRyaWVzJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJLmdpdGlnbm9yZQorCWFjdHVhbAorCWFuX2lnbm9yZWRfZGlyL2lnbm9yZWQKKwlhbl9pZ25vcmVkX2Rpci91bnRyYWNrZWQKKwlhbl91bnRyYWNrZWRfZGlyL2lnbm9yZWQKKwlhbl91bnRyYWNrZWRfZGlyL3VudHJhY2tlZAorCWVtcHR5CisJZXhwZWN0CisJdW50cmFja2VkX2Rpci9lbXB0eQorCXVudHJhY2tlZF9yZXBvLworCUVPRgorCWdpdCBscy1maWxlcyAtbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkIHNob3dzIHRoZSByaWdodCBlbnRyaWVzJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJLmdpdGlnbm9yZQorCWFjdHVhbAorCWFuX3VudHJhY2tlZF9kaXIvdW50cmFja2VkCisJZW1wdHkKKwlleHBlY3QKKwl1bnRyYWNrZWRfZGlyL2VtcHR5CisJdW50cmFja2VkX3JlcG8vCisJRU9GCisJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX2RpciByZWN1cnNlcycgJworCWVjaG8gdW50cmFja2VkX2Rpci9lbXB0eSA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIHVudHJhY2tlZF9kaXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1vIHVudHJhY2tlZF9kaXIvIHJlY3Vyc2VzJyAnCisJZWNobyB1bnRyYWNrZWRfZGlyL2VtcHR5ID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX2Rpci8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHVudHJhY2tlZF9kaXIgZG9lcyBub3QgcmVjdXJzZScgJworCWVjaG8gdW50cmFja2VkX2Rpci8gPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSB1bnRyYWNrZWRfZGlyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSB1bnRyYWNrZWRfZGlyLyBkb2VzIG5vdCByZWN1cnNlJyAnCisJZWNobyB1bnRyYWNrZWRfZGlyLyA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHVudHJhY2tlZF9kaXIvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfcmVwbyBkb2VzIG5vdCByZWN1cnNlJyAnCisJZWNobyB1bnRyYWNrZWRfcmVwby8gPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfcmVwbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX3JlcG8vIGRvZXMgbm90IHJlY3Vyc2UnICcKKwllY2hvIHVudHJhY2tlZF9yZXBvLyA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIHVudHJhY2tlZF9yZXBvLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX2RpciB1bnRyYWNrZWRfcmVwbyByZWN1cnNlcyBpbnRvIHVudHJhY2tlZF9kaXIgb25seScgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCXVudHJhY2tlZF9kaXIvZW1wdHkKKwl1bnRyYWNrZWRfcmVwby8KKwlFT0YKKwlnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX2RpciB1bnRyYWNrZWRfcmVwbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkX2Rpci8gdW50cmFja2VkX3JlcG8vIHJlY3Vyc2VzIGludG8gdW50cmFja2VkX2RpciBvbmx5JyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJdW50cmFja2VkX2Rpci9lbXB0eQorCXVudHJhY2tlZF9yZXBvLworCUVPRgorCWdpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfZGlyLyB1bnRyYWNrZWRfcmVwby8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHVudHJhY2tlZF9kaXIgdW50cmFja2VkX3JlcG8gZG9lcyBub3QgcmVjdXJzZScgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCXVudHJhY2tlZF9kaXIvCisJdW50cmFja2VkX3JlcG8vCisJRU9GCisJZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHVudHJhY2tlZF9kaXIgdW50cmFja2VkX3JlcG8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHVudHJhY2tlZF9kaXIvIHVudHJhY2tlZF9yZXBvLyBkb2VzIG5vdCByZWN1cnNlJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJdW50cmFja2VkX2Rpci8KKwl1bnRyYWNrZWRfcmVwby8KKwlFT0YKKwlnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkX2Rpci8gdW50cmFja2VkX3JlcG8vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtbyAuZ2l0IHNob3dzIG5vdGhpbmcnICcKKwlnaXQgbHMtZmlsZXMgLW8gLmdpdCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gLmdpdC8gc2hvd3Mgbm90aGluZycgJworCWdpdCBscy1maWxlcyAtbyAuZ2l0LyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ2dpdCBscy1maWxlcyAtbyB1bnRyYWNrZWRfKiByZWN1cnNlcyBhcHByb3ByaWF0ZWx5JyAnCisJbWtkaXIgInVudHJhY2tlZF8qIiAmJgorCT4idW50cmFja2VkXyovZW1wdHkiICYmCisKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwl1bnRyYWNrZWRfKi9lbXB0eQorCXVudHJhY2tlZF9kaXIvZW1wdHkKKwl1bnRyYWNrZWRfcmVwby8KKwlFT0YKKwlnaXQgbHMtZmlsZXMgLW8gInVudHJhY2tlZF8qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEl0IHR1cm5zIG91dCBmaWxsX2RpcmVjdG9yeSByZXR1cm5zIHRoZSByaWdodCBwYXRocywgYnV0IGxzLWZpbGVzJyBwb3N0LWNhbGwKKyMgZmlsdGVyaW5nIGluIHNob3dfZGlyX2VudHJ5KCkgdmlhIGNhbGxpbmcgZGlyX3BhdGhfbWF0Y2goKSB3aGljaCBlbmRzIHVwCisjIGluIGdpdF9mbm1hdGNoKCkgaGFzIGxvZ2ljIGZvciBQQVRIU1BFQ19PTkVTVEFSIHRoYXQgYXNzdW1lcyB0aGUgcGF0aHNwZWMKKyMgbXVzdCBtYXRjaCB0aGUgZnVsbCBwYXRoOyBpdCBkb2Vzbid0IGNoZWNrIGl0IGZvciBtYXRjaGluZyBhIGxlYWRpbmcKKyMgZGlyZWN0b3J5LgordGVzdF9leHBlY3RfZmFpbHVyZSBGVU5OWU5BTUVTICdnaXQgbHMtZmlsZXMgLW8gdW50cmFja2VkXyovIHJlY3Vyc2VzIGFwcHJvcHJpYXRlbHknICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwl1bnRyYWNrZWRfKi9lbXB0eQorCXVudHJhY2tlZF9kaXIvZW1wdHkKKwl1bnRyYWNrZWRfcmVwby8KKwlFT0YKKwlnaXQgbHMtZmlsZXMgLW8gInVudHJhY2tlZF8qLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICdnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkXyogZG9lcyBub3QgcmVjdXJzZScgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCXVudHJhY2tlZF8qLworCXVudHJhY2tlZF9kaXIvCisJdW50cmFja2VkX3JlcG8vCisJRU9GCisJZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5ICJ1bnRyYWNrZWRfKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICdnaXQgbHMtZmlsZXMgLW8gLS1kaXJlY3RvcnkgdW50cmFja2VkXyovIGRvZXMgbm90IHJlY3Vyc2UnICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwl1bnRyYWNrZWRfKi8KKwl1bnRyYWNrZWRfZGlyLworCXVudHJhY2tlZF9yZXBvLworCUVPRgorCWdpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSAidW50cmFja2VkXyovIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW8gY29uc2lzdGVudCBiZXR3ZWVuIG9uZSBvciB0d28gZGlycycgJworCWdpdCBscy1maWxlcyAtbyAtLWV4Y2x1ZGUtc3RhbmRhcmQgYW5faWdub3JlZF9kaXIvIGFuX3VudHJhY2tlZF9kaXIvID50bXAgJiYKKwkhIGdyZXAgXmFuX2lnbm9yZWRfZGlyLyB0bXAgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtbyAtLWV4Y2x1ZGUtc3RhbmRhcmQgYW5faWdub3JlZF9kaXIvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgbHMtZmlsZXMgZG9lc24ndCBoYXZlIGEgd2F5IHRvIHJlcXVlc3Qgc2hvd2luZyBib3RoIHVudHJhY2tlZCBhbmQgaWdub3JlZAorIyBmaWxlcyBhdCB0aGUgc2FtZSB0aW1lLCBzbyB1c2UgYGdpdCBzdGF0dXMgLS1pZ25vcmVkYAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXR1cyAtLWlnbm9yZWQgc2hvd3Mgc2FtZSBmaWxlcyB1bmRlciBkaXIgd2l0aCBvciB3aXRob3V0IHBhdGhzcGVjJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJPz8gYW5fdW50cmFja2VkX2Rpci8KKwkhISBhbl91bnRyYWNrZWRfZGlyL2lnbm9yZWQKKwlFT0YKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+b3V0cHV0ICYmCisJZ3JlcCBhbl91bnRyYWNrZWRfZGlyIG91dHB1dCA+ZXhwZWN0ICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgYW5fdW50cmFja2VkX2Rpci8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDIwLWxzLWZpbGVzLWVycm9yLXVubWF0Y2guc2ggYi90L3QzMDIwLWxzLWZpbGVzLWVycm9yLXVubWF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTI0ZTczYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMjAtbHMtZmlsZXMtZXJyb3ItdW5tYXRjaC5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IENhcmwgRC4gV29ydGgKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIHRlc3QgZm9yIC0tZXJyb3ItdW5tYXRjaCBvcHRpb24KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCB0byBlbnN1cmUgaXQgY29ycmVjdGx5CityZXR1cm5zIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcGF0aCBpcyBwcm92aWRlZCBvbiB0aGUgY29tbWFuZAorbGluZS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRvdWNoIGZvbyBiYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZm9vIGJhciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggc2hvdWxkIGZhaWwgd2l0aCB1bm1hdGNoZWQgcGF0aC4nIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gYmFyLWRvZXMtbm90LW1hdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzaG91bGQgc3VjY2VlZCB3aXRoIG1hdGNoZWQgcGF0aHMuJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vIGJhcicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaCBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0OGQyMTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaApAQCAtMCwwICsxLDc3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZSBiYWNrZW5kIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAxJyAnCisKKwllY2hvIGhlbGxvID5hICYmCisJbzA9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKwljcCBhIGIgJiYKKwljcCBhIGMgJiYKKwlta2RpciBkICYmCisJY3AgYSBkL2UgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBhZGQgYSBiIGMgZC9lICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJYzA9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZ2l0IGJyYW5jaCBkZi0xICYmCisJZ2l0IGJyYW5jaCBkZi0yICYmCisJZ2l0IGJyYW5jaCBkZi0zICYmCisJZ2l0IGJyYW5jaCByZW1vdmUgJiYKKwlnaXQgYnJhbmNoIHN1Ym1vZCAmJgorCWdpdCBicmFuY2ggY29weSAmJgorCWdpdCBicmFuY2ggcmVuYW1lICYmCisJZ2l0IGJyYW5jaCByZW5hbWUtbG4gJiYKKworCWVjaG8gaGVsbG8gPj5hICYmCisJY3AgYSBkL2UgJiYKKwlvMT0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCisJZ2l0IGFkZCBhIGQvZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWFzdGVyIG1vZGlmaWVzIGEgYW5kIGQvZSIgJiYKKwljMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8xCWEiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8xCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAyJyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWEiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJZWNobyBnb29kYnllID4+YSAmJgorCW8yPSQoZ2l0IGhhc2gtb2JqZWN0IGEpICYmCisKKwlnaXQgYWRkIGEgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNpZGUgbW9kaWZpZXMgYSIgJiYKKwljMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8yCWEiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMiAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAzJyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IGRmLTEgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWEiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJcm0gLWYgYiAmJiBta2RpciBiICYmIGVjaG8gZGYtMSA+Yi9jICYmIGdpdCBhZGQgYi9jICYmCisJbzM9JChnaXQgaGFzaC1vYmplY3QgYi9jKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZGYtMSBtYWtlcyBiL2MiICYmCisJYzM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEICYmIGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzMJYi9jIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzMgMAliL2MiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDQnICcKKworCXJtIC1yZiBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgZGYtMiAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZiBhICYmIG1rZGlyIGEgJiYgZWNobyBkZi0yID5hL2MgJiYgZ2l0IGFkZCBhL2MgJiYKKwlvND0kKGdpdCBoYXNoLW9iamVjdCBhL2MpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJkZi0yIG1ha2VzIGEvYyIgJiYKKwljND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG80CWEvYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG80IDAJYS9jIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNScgJworCisJcm0gLXJmIFthYmNkXSAmJgorCWdpdCBjaGVja291dCByZW1vdmUgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWEiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJcm0gLWYgYiAmJgorCWVjaG8gcmVtb3ZlLWNvbmZsaWN0ID5hICYmCisKKwlnaXQgYWRkIGEgJiYKKwlnaXQgcm0gYiAmJgorCW81PSQoZ2l0IGhhc2gtb2JqZWN0IGEpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgcmVtb3ZlcyBiIGFuZCBtb2RpZmllcyBhIiAmJgorCWM1PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzUJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzUgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDYnICcKKworCXJtIC1yZiBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgZGYtMyAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZnIgZCAmJiBlY2hvIGRmLTMgPmQgJiYgZ2l0IGFkZCBkICYmCisJbzY9JChnaXQgaGFzaC1vYmplY3QgZCkgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImRmLTMgbWFrZXMgZCIgJiYKKwljNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWEiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG82CWQiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzYgMAlkIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDcnICcKKworCWdpdCBjaGVja291dCBzdWJtb2QgJiYKKwlnaXQgcm0gZC9lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGQvZSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDE2MDAwMCAkYzEgZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIm1ha2UgZC8gYSBzdWJtb2R1bGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDgnICcKKwlnaXQgY2hlY2tvdXQgcmVuYW1lICYmCisJZ2l0IG12IGEgZSAmJgorCWdpdCBhZGQgZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZSBhLT5lIiAmJgorCWM3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBjaGVja291dCByZW5hbWUtbG4gJiYKKwlnaXQgbXYgYSBlICYmCisJdGVzdF9sbl9zX2FkZCBlIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgYS0+ZSwgc3ltbGluayBhLT5lIiAmJgorCW9sbj0kKHByaW50ZiBlIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDknICcKKwlnaXQgY2hlY2tvdXQgY29weSAmJgorCWNwIGEgZSAmJgorCWdpdCBhZGQgZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvcHkgYS0+ZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHNpbXBsZScgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCBjaGVja291dCAtZiAiJGMyIiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjMiIgIiRjMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8yIDIJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAzCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgdGhlIGluZGV4IGhhcyB1bnJlc29sdmVkIGVudHJpZXMnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjMSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcyIgb3V0ICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UiIG91dCAmJgorCXJtIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtb3ZlIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGMxIiAiJGM1IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtb3ZlIGNvbmZsaWN0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMCAxCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMglhIiAmJgorCQllY2hvICIxMDA2NDQgJG81IDMJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIHNpbXBsZScgJworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzEiICIkYzMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWIvYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtZiAiJGMxIiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjMSIgIiRjNCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAyCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgdGhlIG90aGVyIHdheScgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjNCIgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzQiICIkYzEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0IHRoZSBvdGhlciB3YXknICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAzCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGMxIiAiJGM2IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0IHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzYgMwlkIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDEJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDIJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCcgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjNiIgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzYiICIkYzEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvNiAyCWQiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMwlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaXIgaW4gd29ya2luZyB0cmVlIHdpdGggc3ltbGluayBhbmNlc3RvciBkb2VzIG5vdCBwcm9kdWNlIGQvZiBjb25mbGljdCcgJworCWdpdCBpbml0IHN5bSAmJgorCSgKKwkJY2Qgc3ltICYmCisJCWxuIC1zIC4gZm9vICYmCisJCW1rZGlyIGJhciAmJgorCQk+YmFyL2ZpbGUgJiYKKwkJZ2l0IGFkZCBmb28gYmFyL2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZm9vIHN5bWxpbmsiICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJlbXB0eSBjb21taXQiICYmCisKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcm0gZm9vICYmCisJCW1rZGlyIGZvbyAmJgorCQk+Zm9vL2JhciAmJgorCQlnaXQgYWRkIGZvby9iYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVwbGFjZSBmb28gc3ltbGluayB3aXRoIHJlYWwgZm9vIGRpciBhbmQgZm9vL2JhciBmaWxlIiAmJgorCisJCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwkJZ2l0IGNoZXJyeS1waWNrIG1hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfZGlyIGZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmb28vYmFyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBhbmQgMy13YXkgbWVyZ2UnICcKKworCWdpdCByZXNldCAtLWhhcmQgIiRjMiIgJiYKKwlnaXQgcmVhZC10cmVlIC1tICIkYzAiICIkYzIiICIkYzEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgYW5kIGJpbmQgbWVyZ2UnICcKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD1NLyBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PWExLyBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWExL2EiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhMS9iIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYTEvYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWExL2QvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PXovIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9hIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9iIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9jIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9kL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJYTEvYSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWExL2IiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhMS9jIiAmJgorCQllY2hvICIxMDA2NDQgJG8xIDAJYTEvZC9lIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAl6L2EiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAl6L2IiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAl6L2MiICYmCisJCWVjaG8gIjEwMDY0NCAkbzEgMAl6L2QvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSB3LyBlbXB0eSB3b3JrIHRyZWUgLSBvdXJzIGhhcyByZW5hbWUnICcKKwkoCisJCUdJVF9XT1JLX1RSRUU9IiRQV0Qvb3Vycy1oYXMtcmVuYW1lLXdvcmsiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCUdJVF9JTkRFWF9GSUxFPSIkUFdEL291cnMtaGFzLXJlbmFtZS1pbmRleCIgJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCW1rZGlyICIkR0lUX1dPUktfVFJFRSIgJiYKKwkJZ2l0IHJlYWQtdHJlZSAtaSAtbSAkYzcgMj5hY3R1YWwtZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtZXJyICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2ggMj5hY3R1YWwtZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtZXJyICYmCisJCWdpdCBtZXJnZS1yZWN1cnNpdmUgJGMwIC0tICRjNyAkYzMgMj5hY3R1YWwtZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwtZXJyICYmCisJCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsLWZpbGVzIDI+YWN0dWFsLWVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLWVycgorCSkgJiYKKwljYXQgPmV4cGVjdGVkLWZpbGVzIDw8LUVPRiAmJgorCTEwMDY0NCAkbzMgMAliL2MKKwkxMDA2NDQgJG8wIDAJYworCTEwMDY0NCAkbzAgMAlkL2UKKwkxMDA2NDQgJG8wIDAJZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkLWZpbGVzIGFjdHVhbC1maWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgdy8gZW1wdHkgd29yayB0cmVlIC0gdGhlaXJzIGhhcyByZW5hbWUnICcKKwkoCisJCUdJVF9XT1JLX1RSRUU9IiRQV0QvdGhlaXJzLWhhcy1yZW5hbWUtd29yayIgJiYKKwkJZXhwb3J0IEdJVF9XT1JLX1RSRUUgJiYKKwkJR0lUX0lOREVYX0ZJTEU9IiRQV0QvdGhlaXJzLWhhcy1yZW5hbWUtaW5kZXgiICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlta2RpciAiJEdJVF9XT1JLX1RSRUUiICYmCisJCWdpdCByZWFkLXRyZWUgLWkgLW0gJGMzIDI+YWN0dWFsLWVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLWVyciAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoIDI+YWN0dWFsLWVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLWVyciAmJgorCQlnaXQgbWVyZ2UtcmVjdXJzaXZlICRjMCAtLSAkYzMgJGM3IDI+YWN0dWFsLWVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLWVyciAmJgorCQlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbC1maWxlcyAyPmFjdHVhbC1lcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC1lcnIKKwkpICYmCisJY2F0ID5leHBlY3RlZC1maWxlcyA8PC1FT0YgJiYKKwkxMDA2NDQgJG8zIDAJYi9jCisJMTAwNjQ0ICRvMCAwCWMKKwkxMDA2NDQgJG8wIDAJZC9lCisJMTAwNjQ0ICRvMCAwCWUKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZC1maWxlcyBhY3R1YWwtZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcmVtb3ZlcyBlbXB0eSBkaXJlY3RvcmllcycgJworCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcm0gJiYKKwlnaXQgcm0gZC9lICYmCisJZ2l0IGNvbW1pdCAtbXJlbW92ZWQtZC9lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgcm0gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBzaW1wbGUgdy9zdWJtb2R1bGUnICcKKworCWdpdCBjaGVja291dCBzdWJtb2QgJiYKKwlnaXQgbWVyZ2UgcmVtb3ZlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBzaW1wbGUgdy9zdWJtb2R1bGUgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvNSAwCWEiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIiAmJgorCQllY2hvICIxNjAwMDAgJGMxIDAJZCIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgY29weSB2cy4gcmVuYW1lJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYKKwlnaXQgbWVyZ2UgcmVuYW1lICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEICYmIGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWUiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWUiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWVyZ2UtcmVjdXJzaXZlIHJlbmFtZSB2cy4gcmVuYW1lL3N5bWxpbmsnICcKKworCWdpdCBjaGVja291dCAtZiByZW5hbWUgJiYKKwlnaXQgbWVyZ2UgcmVuYW1lLWxuICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEICYmIGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEyMDAwMCBibG9iICRvbG4JYSIgJiYKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiICYmCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIiAmJgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZSIgJiYKKwkJZWNobyAiMTIwMDAwICRvbG4gMAlhIiAmJgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiICYmCisJCWVjaG8gIjEwMDY0NCAkbzAgMAllIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdpbmcgd2l0aCB0cmlwbGUgcmVuYW1lIGFjcm9zcyBEL0YgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFpbiAmJgorCWdpdCBybSAtcmYgLiAmJgorCisJZWNobyAianVzdCBhIGZpbGUiID5zdWIxICYmCisJbWtkaXIgLXAgc3ViMiAmJgorCWVjaG8gY29udGVudDEgPnN1YjIvZmlsZTEgJiYKKwllY2hvIGNvbnRlbnQyID5zdWIyL2ZpbGUyICYmCisJZWNobyBjb250ZW50MyA+c3ViMi9maWxlMyAmJgorCW1rZGlyIHNpbXBsZSAmJgorCWVjaG8gYmFzZSA+c2ltcGxlL2JhciAmJgorCWdpdCBhZGQgLUEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCWdpdCBjaGVja291dCAtYiBvdGhlciAmJgorCWVjaG8gbW9yZSA+PnNpbXBsZS9iYXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGNoYW5nZXNpbXBsZWZpbGUgJiYKKworCWdpdCBjaGVja291dCBtYWluICYmCisJZ2l0IHJtIHN1YjEgJiYKKwlnaXQgbXYgc3ViMiBzdWIxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBjaGFuZ2VmaWxldG9kaXIgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtZW1iZXJzIHRoZSBuYW1lcyBvZiBhbGwgYmFzZSB0cmVlcycgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCisJIyBtYWtlIHRoZSBpbmRleCBtYXRjaCAkYzEgc28gdGhhdCBtZXJnZS1yZWN1cnNpdmUgYmVsb3cgZG9lcyBub3QKKwkjIGZhaWwgZWFybHkKKwlnaXQgZGlmZiAtLWJpbmFyeSBIRUFEICRjMSAtLSB8IGdpdCBhcHBseSAtLWNhY2hlZCAmJgorCisJIyBtb3JlIHRyZWVzIHRoYW4gc3RhdGljIHNsb3RzIHVzZWQgYnkgb2lkX3RvX2hleCgpCisJZm9yIGNvbW1pdCBpbiAkYzAgJGMyICRjNCAkYzUgJGM2ICRjNworCWRvCisJCWdpdCByZXYtcGFyc2UgIiRjb21taXRee3RyZWV9IgorCWRvbmUgPnRyZWVzICYmCisKKwkjIGlnbm9yZSB0aGUgcmV0dXJuIGNvZGU7IGl0IG9ubHkgZmFpbHMgYmVjYXVzZSB0aGUgaW5wdXQgaXMgd2VpcmQuLi4KKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UudmVyYm9zaXR5PTUgbWVyZ2UtcmVjdXJzaXZlICQoY2F0IHRyZWVzKSAtLSAkYzEgJGMzID5vdXQgJiYKKworCSMgLi4uYnV0IG1ha2Ugc3VyZSBpdCBmYWlscyBpbiB0aGUgZXhwZWN0ZWQgd2F5CisJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4qcmVuYW1lL3JlbmFtZSBvdXQgJiYKKworCSMgbWVyZ2UtcmVjdXJzaXZlIHByaW50cyBpbiByZXZlcnNlIG9yZGVyLCBidXQgd2UgZG8gbm90IGNhcmUKKwlzb3J0IDx0cmVlcyA+ZXhwZWN0ICYmCisJc2VkIC1uICJzL152aXJ0dWFsIC8vcCIgb3V0IHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgaW50ZXJuYWwgbWVyZ2UgcmVzb2x2ZXMgdG8gdGhlIHNhbWVuZXNzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisKKwkjIFdlIGFyZSBnb2luZyB0byBjcmVhdGUgYSBoaXN0b3J5IGxlYWRpbmcgdG8gdHdvIGNyaXNzLWNyb3NzCisJIyBicmFuY2hlcyBBIGFuZCBCLiAgVGhlIGNvbW1vbiBhbmNlc3RvciBhdCB0aGUgYm90dG9tLCBPMCwKKwkjIGhhcyB0d28gY2hpbGQgY29tbWl0cyBPMSBhbmQgTzIsIGJvdGggb2Ygd2hpY2ggd2lsbCBiZSBtZXJnZQorCSMgYmFzZSBiZXR3ZWVuIEEgYW5kIEIsIGxpa2Ugc286CisJIworCSMgICAgICAgTzEtLS1BCisJIyAgICAgIC8gIFwgLworCSMgICAgTzAgICAgLgorCSMgICAgICBcICAvIFwKKwkjICAgICAgIE8yLS0tQgorCSMKKwkjIFRoZSByZWNlbnRseSBhZGRlZCAiY2hlY2sgdG8gc2VlIGlmIHRoZSBpbmRleCBpcyBkaWZmZXJlbnQgZnJvbQorCSMgdGhlIHRyZWUgaW50byB3aGljaCBzb21ldGhpbmcgZWxzZSBpcyBnZXR0aW5nIG1lcmdlZCIgY2hlY2sgbXVzdAorCSMgTk9UIGtpY2sgaW4gd2hlbiBhbiBpbm5lciBtZXJnZSBiZXR3ZWVuIE8xIGFuZCBPMiBpcyBtYWRlLiAgQm90aAorCSMgTzEgYW5kIE8yIGhhcHBlbiB0byBoYXZlIHRoZSBzYW1lIHRyZWUgYXMgTzAgaW4gdGhpcyB0ZXN0IHRvCisJIyB0cmlnZ2VyIHRoZSBidWctLS13aGV0aGVyIHRoZSBpbm5lciBtZXJnZSBpcyBtYWRlIGJ5IG1lcmdpbmcgTzIKKwkjIGludG8gTzEgb3IgTzEgaW50byBPMiwgdGhlaXIgY29tbW9uIGFuY2VzdG9yIE8wIGFuZCB0aGUgYnJhbmNoCisJIyBiZWluZyBtZXJnZWQgaGF2ZSB0aGUgc2FtZSB0cmVlLiAgV2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIHRoZSAiaXMKKwkjIHRoZSBpbmRleCBkaXJ0eT8iIGNoZWNrIGluIHRoaXMgY2FzZS4KKworCWVjaG8gInplcm8iID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiTzAiICYmCisJTzA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIk8xIiAmJgorCU8xPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCAkTzAgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIk8yIiAmJgorCU8yPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgJE8xICYmCisJQj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJE8xICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgJE8yICYmCisJQT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCWdpdCBtZXJnZSAkQgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMzEtbWVyZ2UtY3Jpc2Nyb3NzLnNoIGIvdC90MzAzMS1tZXJnZS1jcmlzY3Jvc3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzgyNDc1NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMzEtbWVyZ2UtY3Jpc2Nyb3NzLnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZS1yZWN1cnNpdmUgYmFja2VuZCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKworIyAgICAgICAgIEEgICAgICA8LSBjcmVhdGUgc29tZSBmaWxlcworIyAgICAgICAgLyBcCisjICAgICAgIEIgICBDICAgIDwtIGNhdXNlIHJlbmFtZS9kZWxldGUgY29uZmxpY3RzIGJldHdlZW4gQiBhbmQgQworIyAgICAgIC8gICAgIFwKKyMgICAgIHxcICAgICAvfAorIyAgICAgfCBEICAgRSB8CisjICAgICB8ICBcIC8gIHwKKyMgICAgIHwgICBYICAgfAorIyAgICAgfCAgLyBcICB8CisjICAgICB8IC8gICBcIHwKKyMgICAgIHwvICAgICBcfAorIyAgICAgRiAgICAgICBHICA8LSBtZXJnZSBFIGludG8gQiwgRCBpbnRvIEMKKyMgICAgICBcICAgICAvCisjICAgICAgIFwgICAvCisjICAgICAgICBcIC8KKyMgICAgICAgICBIICAgICAgPC0gcmVjdXJzaXZlIG1lcmdlIGNyYXNoZXMKKyMKKworIyBpbml0aWFsaXplCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvIHdpdGggY3Jpc3MtY3Jvc3MgaGlzdG9yeScgJworCW1rZGlyIGRhdGEgJiYKKworCSMgY3JlYXRlIGEgYnVuY2ggb2YgZmlsZXMKKwluPTEgJiYKKwl3aGlsZSB0ZXN0ICRuIC1sZSAxMAorCWRvCisJCWVjaG8gJG4gPiBkYXRhLyRuICYmCisJCW49JCgoJG4rMSkpIHx8CisJCXJldHVybiAxCisJZG9uZSAmJgorCisJIyBjaGVjayB0aGVtIGluCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IGJyYW5jaCBBICYmCisKKwkjIGEgZmlsZSBpbiBvbmUgYnJhbmNoCisJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCWdpdCBybSBkYXRhLzkgJiYKKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCSMgd2l0aCBhIGJyYW5jaCBvZmYgb2YgaXQKKwlnaXQgYnJhbmNoIEQgJiYKKworCSMgcHV0IHNvbWUgY29tbWl0cyBvbiBECisJZ2l0IGNoZWNrb3V0IEQgJiYKKwllY2hvIHRlc3REID4gZGF0YS90ZXN0RCAmJgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gRCAmJgorCisJIyBiYWNrIHVwIHRvIHRoZSB0b3AsIGNyZWF0ZSBhbm90aGVyIGJyYW5jaCBhbmQgY2F1c2UKKwkjIGEgcmVuYW1lIGNvbmZsaWN0IHdpdGggdGhlIGZpbGUgd2UgZGVsZXRlZCBlYXJsaWVyCisJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCWdpdCBtdiBkYXRhLzkgZGF0YS9uZXctOSAmJgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCisJIyB3aXRoIGEgYnJhbmNoIG9mZiBvZiBpdAorCWdpdCBicmFuY2ggRSAmJgorCisJIyBwdXQgYSBjb21taXQgb24gRQorCWdpdCBjaGVja291dCBFICYmCisJZWNobyB0ZXN0RSA+IGRhdGEvdGVzdEUgJiYKKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEUgJiYKKworCSMgbm93LCBtZXJnZSBFIGludG8gQgorCWdpdCBjaGVja291dCBCICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwkjIGZvcmNlLXJlc29sdmUKKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEYgJiYKKwlnaXQgYnJhbmNoIEYgJiYKKworCSMgYW5kIG1lcmdlIEQgaW50byBDCisJZ2l0IGNoZWNrb3V0IEMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRCAmJgorCSMgZm9yY2UtcmVzb2x2ZQorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gRyAmJgorCWdpdCBicmFuY2ggRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgbWVyZ2UgYmV0d2VlbiBGIGFuZCBHIGRvZXMgbm90IGNhdXNlIHNlZ2ZhdWx0JyAnCisJZ2l0IG1lcmdlIEYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDMyLW1lcmdlLXJlY3Vyc2l2ZS1zcGFjZS1vcHRpb25zLnNoIGIvdC90MzAzMi1tZXJnZS1yZWN1cnNpdmUtc3BhY2Utb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNTYxODBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAzMi1tZXJnZS1yZWN1cnNpdmUtc3BhY2Utb3B0aW9ucy5zaApAQCAtMCwwICsxLDIwNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZSBzcGFjZSBvcHRpb25zCisKKyogW21hc3Rlcl0gQ2xhcmlmeQorICEgW3JlbW90ZV0gUmVtb3ZlIGNydWZ0CistLQorICsgW3JlbW90ZV0gUmVtb3ZlIGNydWZ0CisqICBbbWFzdGVyXSBDbGFyaWZ5CisqKyBbcmVtb3RlXl0gSW5pdGlhbCByZXZpc2lvbgorKiAgIG9rIDE6IHNldHVwCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2hhdmVfcHJlcmVxIFNFRF9TVFJJUFNfQ1IgJiYgU0VEX09QVElPTlM9LWIKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgR1JFUF9TVFJJUFNfQ1IKK3RoZW4KKwlHUkVQX09QVElPTlM9LVUKKwlleHBvcnQgR1JFUF9PUFRJT05TCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNvbmZsaWN0X2h1bmtzICgpIHsKKwkJc2VkICRTRURfT1BUSU9OUyAtbiAtZSAiCisJCQkvXjw8PDwvIGIgY29uZmxpY3QKKwkJCWIKKwkJCTogY29uZmxpY3QKKwkJCXAKKwkJCS9ePj4+Pi8gYgorCQkJbgorCQkJYiBjb25mbGljdAorCQkiICIkQCIKKwl9ICYmCisKKwljYXQgPDwtXEVPRiA+dGV4dC50eHQgJiYKKwkgICAgSG9wZSwgaGUgc2F5cywgY2hlcmlzaGVzIHRoZSBzb3VsIG9mIGhpbSB3aG8gbGl2ZXMgaW4KKwkgICAganVzdGljZSBhbmQgaG9saW5lc3MgYW5kIGlzIHRoZSBudXJzZSBvZiBoaXMgYWdlIGFuZCB0aGUKKwkgICAgY29tcGFuaW9uIG9mIGhpcyBqb3VybmV5Oy0taG9wZSB3aGljaCBpcyBtaWdodGllc3QgdG8gc3dheQorCSAgICB0aGUgcmVzdGxlc3Mgc291bCBvZiBtYW4uCisKKwlIb3cgYWRtaXJhYmxlIGFyZSBoaXMgd29yZHMhICBBbmQgdGhlIGdyZWF0IGJsZXNzaW5nIG9mIHJpY2hlcywgSSBkbworCW5vdCBzYXkgdG8gZXZlcnkgbWFuLCBidXQgdG8gYSBnb29kIG1hbiwgaXMsIHRoYXQgaGUgaGFzIGhhZCBubworCW9jY2FzaW9uIHRvIGRlY2VpdmUgb3IgdG8gZGVmcmF1ZCBvdGhlcnMsIGVpdGhlciBpbnRlbnRpb25hbGx5IG9yCisJdW5pbnRlbnRpb25hbGx5OyBhbmQgd2hlbiBoZSBkZXBhcnRzIHRvIHRoZSB3b3JsZCBiZWxvdyBoZSBpcyBub3QgaW4KKwlhbnkgYXBwcmVoZW5zaW9uIGFib3V0IG9mZmVyaW5ncyBkdWUgdG8gdGhlIGdvZHMgb3IgZGVidHMgd2hpY2ggaGUgb3dlcworCXRvIG1lbi4gIE5vdyB0byB0aGlzIHBlYWNlIG9mIG1pbmQgdGhlIHBvc3Nlc3Npb24gb2Ygd2VhbHRoIGdyZWF0bHkKKwljb250cmlidXRlczsgYW5kIHRoZXJlZm9yZSBJIHNheSwgdGhhdCwgc2V0dGluZyBvbmUgdGhpbmcgYWdhaW5zdAorCWFub3RoZXIsIG9mIHRoZSBtYW55IGFkdmFudGFnZXMgd2hpY2ggd2VhbHRoIGhhcyB0byBnaXZlLCB0byBhIG1hbiBvZgorCXNlbnNlIHRoaXMgaXMgaW4gbXkgb3BpbmlvbiB0aGUgZ3JlYXRlc3QuCisKKwlXZWxsIHNhaWQsIENlcGhhbHVzLCBJIHJlcGxpZWQ7IGJ1dCBhcyBjb25jZXJuaW5nIGp1c3RpY2UsIHdoYXQgaXMKKwlpdD8tLXRvIHNwZWFrIHRoZSB0cnV0aCBhbmQgdG8gcGF5IHlvdXIgZGVidHMtLW5vIG1vcmUgdGhhbiB0aGlzPyAgQW5kCisJZXZlbiB0byB0aGlzIGFyZSB0aGVyZSBub3QgZXhjZXB0aW9ucz8gIFN1cHBvc2UgdGhhdCBhIGZyaWVuZCB3aGVuIGluCisJaGlzIHJpZ2h0IG1pbmQgaGFzIGRlcG9zaXRlZCBhcm1zIHdpdGggbWUgYW5kIGhlIGFza3MgZm9yIHRoZW0gd2hlbiBoZQorCWlzIG5vdCBpbiBoaXMgcmlnaHQgbWluZCwgb3VnaHQgSSB0byBnaXZlIHRoZW0gYmFjayB0byBoaW0/ICBObyBvbmUKKwl3b3VsZCBzYXkgdGhhdCBJIG91Z2h0IG9yIHRoYXQgSSBzaG91bGQgYmUgcmlnaHQgaW4gZG9pbmcgc28sIGFueSBtb3JlCisJdGhhbiB0aGV5IHdvdWxkIHNheSB0aGF0IEkgb3VnaHQgYWx3YXlzIHRvIHNwZWFrIHRoZSB0cnV0aCB0byBvbmUgd2hvCisJaXMgaW4gaGlzIGNvbmRpdGlvbi4KKworCVlvdSBhcmUgcXVpdGUgcmlnaHQsIGhlIHJlcGxpZWQuCisKKwlCdXQgdGhlbiwgSSBzYWlkLCBzcGVha2luZyB0aGUgdHJ1dGggYW5kIHBheWluZyB5b3VyIGRlYnRzIGlzIG5vdCBhCisJY29ycmVjdCBkZWZpbml0aW9uIG9mIGp1c3RpY2UuCisKKwlDRVBIQUxVUyAtIFNPQ1JBVEVTIC0gUE9MRU1BUkNIVVMKKworCVF1aXRlIGNvcnJlY3QsIFNvY3JhdGVzLCBpZiBTaW1vbmlkZXMgaXMgdG8gYmUgYmVsaWV2ZWQsIHNhaWQKKwlQb2xlbWFyY2h1cyBpbnRlcnBvc2luZy4KKworCUkgZmVhciwgc2FpZCBDZXBoYWx1cywgdGhhdCBJIG11c3QgZ28gbm93LCBmb3IgSSBoYXZlIHRvIGxvb2sgYWZ0ZXIgdGhlCisJc2FjcmlmaWNlcywgYW5kIEkgaGFuZCBvdmVyIHRoZSBhcmd1bWVudCB0byBQb2xlbWFyY2h1cyBhbmQgdGhlIGNvbXBhbnkuCisJRU9GCisJZ2l0IGFkZCB0ZXh0LnR4dCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgcmV2aXNpb24iICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVtb3RlICYmCisJc2VkIC1lICIKKwkJCXMvXC4gIC9cLiAvZworCQkJcy9bP10gIC8/IC9nCisJCQlzLyAgICAvCS9nCisJCQlzLy0tLy0tLS9nCisJCQlzL2J1dCBhcyBjb25jZXJuaW5nL2J1dCBhcyBjb24gY2VybmluZy8KKwkJCS9DRVBIQUxVUyAtIFNPQ1JBVEVTIC0gUE9MRU1BUkNIVVMvIGQKKwkJIiB0ZXh0LnR4dCA+dGV4dC50eHQrICYmCisJbXYgdGV4dC50eHQrIHRleHQudHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmVtb3ZlIGNydWZ0IiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXNlZCAtZSAiCisJCQlzL1wobm90IGluIGhpcyByaWdodCBtaW5kXCksXCguKlwpL1wxO1wyUS8KKwkJCXMvUXVpdGUgY29ycmVjdFwoLipcKS9JdCBpcyB0b28gY29ycmVjdFwxUS8KKwkJCXMvdW5pbnRlbnRpb25hbGx5L3VuIGludGVudGlvbmFsbHkvCisJCQkvdW4gaW50ZW50aW9uYWxseS8gcy8kL1EvCisJCQlzL1BvbGVtYXJjaHVzIGludGVycG9zaW5nLi9Qb2xlbWFyY2h1cywgaW50ZXJwb3NpbmcuUS8KKwkJCS9qdXN0aWNlIGFuZCBob2xpbmVzcy8gcy8kL1EvCisJCQkvcGF5IHlvdXIgZGVidHMvIHMvJC9RLworCQkiIHRleHQudHh0IHwgcV90b19jciA+dGV4dC50eHQrICYmCisJbXYgdGV4dC50eHQrIHRleHQudHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ2xhcmlmeSIgJiYKKwlnaXQgc2hvdy1icmFuY2ggLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFpdmUgbWVyZ2UgZmFpbHMnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdyZXAgIjw8PDw8PCIgdGV4dC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3BhY2UtY2hhbmdlIG1ha2VzIG1lcmdlIHN1Y2NlZWQnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIEhFQUReIC0tIEhFQUQgcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25haXZlIGNoZXJyeS1waWNrIGZhaWxzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1uby1jb21taXQgcmVtb3RlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcmVtb3RlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlncmVwICI8PDw8PDwiIHRleHQudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1YaWdub3JlLXNwYWNlLWNoYW5nZSBtYWtlcyBjaGVycnktcGljayBzdWNjZWVkJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1uby1jb21taXQgLVhpZ25vcmUtc3BhY2UtY2hhbmdlIHJlbW90ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1jaGFuZ2U6IG91ciB3L3Mtb25seSBjaGFuZ2Ugd2lucycgJworCXFfdG9fY3IgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwkgICAganVzdGljZSBhbmQgaG9saW5lc3MgYW5kIGlzIHRoZSBudXJzZSBvZiBoaXMgYWdlIGFuZCB0aGVRCisJRU9GCisKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIEhFQUReIC0tIEhFQUQgcmVtb3RlICYmCisJZ3JlcCAianVzdGljZSBhbmQgaG9saW5lc3MiIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3BhY2UtY2hhbmdlOiB0aGVpciByZWFsIGNoYW5nZSB3aW5zIG92ZXIgdy9zJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJaXQ/LS0tdG8gc3BlYWsgdGhlIHRydXRoIGFuZCB0byBwYXkgeW91ciBkZWJ0cy0tLW5vIG1vcmUgdGhhbiB0aGlzPyBBbmQKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJwYXkgeW91ciBkZWJ0cyIgdGV4dC50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zcGFjZS1jaGFuZ2U6IGRvZXMgbm90IGlnbm9yZSBuZXcgc3BhY2VzJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkMSAmJgorCVdlbGwgc2FpZCwgQ2VwaGFsdXMsIEkgcmVwbGllZDsgYnV0IGFzIGNvbiBjZXJuaW5nIGp1c3RpY2UsIHdoYXQgaXMKKwlFT0YKKwlxX3RvX2NyIDw8LVxFT0YgPmV4cGVjdGVkMiAmJgorCXVuIGludGVudGlvbmFsbHk7IGFuZCB3aGVuIGhlIGRlcGFydHMgdG8gdGhlIHdvcmxkIGJlbG93IGhlIGlzIG5vdCBpblEKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJXZWxsIHNhaWQiIHRleHQudHh0ID5hY3R1YWwxICYmCisJZ3JlcCAid2hlbiBoZSBkZXBhcnRzIiB0ZXh0LnR4dCA+YWN0dWFsMiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMSBhY3R1YWwxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQyIGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtYWxsLXNwYWNlIGRyb3BzIHRoZWlyIG5ldyBzcGFjZXMnICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlXZWxsIHNhaWQsIENlcGhhbHVzLCBJIHJlcGxpZWQ7IGJ1dCBhcyBjb25jZXJuaW5nIGp1c3RpY2UsIHdoYXQgaXMKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1hbGwtc3BhY2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJXZWxsIHNhaWQiIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtYWxsLXNwYWNlIGtlZXBzIG91ciBuZXcgc3BhY2VzJyAnCisJcV90b19jciA8PC1cRU9GID5leHBlY3RlZCAmJgorCXVuIGludGVudGlvbmFsbHk7IGFuZCB3aGVuIGhlIGRlcGFydHMgdG8gdGhlIHdvcmxkIGJlbG93IGhlIGlzIG5vdCBpblEKKwlFT0YKKworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWlnbm9yZS1hbGwtc3BhY2UgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwlncmVwICJ3aGVuIGhlIGRlcGFydHMiIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3BhY2UtYXQtZW9sJyAnCisJcV90b19jciA8PC1cRU9GID5leHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWlzIG5vdCBpbiBoaXMgcmlnaHQgbWluZDsgb3VnaHQgSSB0byBnaXZlIHRoZW0gYmFjayB0byBoaW0/ICBObyBvbmVRCisJPT09PT09PQorCWlzIG5vdCBpbiBoaXMgcmlnaHQgbWluZCwgb3VnaHQgSSB0byBnaXZlIHRoZW0gYmFjayB0byBoaW0/IE5vIG9uZQorCT4+Pj4+Pj4gcmVtb3RlCisJRU9GCisKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIFwKKwkJCQkJCSBIRUFEXiAtLSBIRUFEIHJlbW90ZSAmJgorCWNvbmZsaWN0X2h1bmtzIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDMzLW1lcmdlLXRvcGxldmVsLnNoIGIvdC90MzAzMy1tZXJnZS10b3BsZXZlbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMzE0NTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAzMy1tZXJnZS10b3BsZXZlbC5zaApAQCAtMCwwICsxLDE1MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249JyJnaXQgbWVyZ2UiIHRvcC1sZXZlbCBmcm9udGVuZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3QzMDMzX3Jlc2V0ICgpIHsKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyIHR3byAmJgorCWdpdCBicmFuY2ggLWYgbGVmdCB0aHJlZSAmJgorCWdpdCBicmFuY2ggLWYgcmlnaHQgZm91cgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlnaXQgYnJhbmNoIGxlZnQgJiYKKwlnaXQgYnJhbmNoIHJpZ2h0ICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJZ2l0IGNoZWNrb3V0IGxlZnQgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCByaWdodCAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3cm9vdCAmJgorCXRlc3RfY29tbWl0IGZpdmUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKKyMgTG9jYWwgYnJhbmNoZXMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW4gb2N0b3B1cyBpbnRvIHZvaWQnICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiB0ZXN0ICYmCisJZ2l0IHJtIC1mciAuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGxlZnQgcmlnaHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgJiYKKwlnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFuIG9jdG9wdXMsIGZhc3QtZm9yd2FyZCAoZmYpJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9uZSAmJgorCWdpdCBtZXJnZSBsZWZ0IHJpZ2h0ICYmCisJIyBvbmUgaXMgYW5jZXN0b3Igb2YgdGhyZWUgKGxlZnQpIGFuZCBmb3VyIChyaWdodCkKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReMyAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xIEhFQUReMiB8IHNvcnQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgdGhyZWUgZm91ciB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2N0b3B1cywgbm9uLWZhc3QtZm9yd2FyZCAoZmYpJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9uZSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIGxlZnQgcmlnaHQgJiYKKwkjIG9uZSBpcyBhbmNlc3RvciBvZiB0aHJlZSAobGVmdCkgYW5kIGZvdXIgKHJpZ2h0KQorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF40ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgSEVBRF4yIEhFQUReMyB8IHNvcnQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2Ugb25lIHRocmVlIGZvdXIgfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9jdG9wdXMsIGZhc3QtZm9yd2FyZCAoZG9lcyBub3QgZmYpJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgbWVyZ2UgbGVmdCByaWdodCAmJgorCSMgdHdvIChtYXN0ZXIpIGlzIG5vdCBhbiBhbmNlc3RvciBvZiB0aHJlZSAobGVmdCkgYW5kIGZvdXIgKHJpZ2h0KQorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF40ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgSEVBRF4yIEhFQUReMyB8IHNvcnQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgdHdvIHRocmVlIGZvdXIgfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9jdG9wdXMsIG5vbi1mYXN0LWZvcndhcmQnICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIGxlZnQgcmlnaHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReNCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xIEhFQUReMiBIRUFEXjMgfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIHR3byB0aHJlZSBmb3VyIHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRoZSBzYW1lIHNldCB3aXRoIEZFVENIX0hFQUQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgRkVUQ0hfSEVBRCBvY3RvcHVzIGludG8gdm9pZCcgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHRlc3QgJiYKKwlnaXQgcm0gLWZyIC4gJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEZFVENIX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgJiYKKwlnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEZFVENIX0hFQUQgb2N0b3B1cyBmYXN0LWZvcndhcmQgKGZmKScgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvbmUgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IG1lcmdlIEZFVENIX0hFQUQgJiYKKwkjIG9uZSBpcyBhbmNlc3RvciBvZiB0aHJlZSAobGVmdCkgYW5kIGZvdXIgKHJpZ2h0KQorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4zICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgSEVBRF4yIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSB0aHJlZSBmb3VyIHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBGRVRDSF9IRUFEIG9jdG9wdXMgbm9uLWZhc3QtZm9yd2FyZCAoZmYpJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9uZSAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBGRVRDSF9IRUFEICYmCisJIyBvbmUgaXMgYW5jZXN0b3Igb2YgdGhyZWUgKGxlZnQpIGFuZCBmb3VyIChyaWdodCkKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReNCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xIEhFQUReMiBIRUFEXjMgfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIG9uZSB0aHJlZSBmb3VyIHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBGRVRDSF9IRUFEIG9jdG9wdXMgZmFzdC1mb3J3YXJkIChkb2VzIG5vdCBmZiknICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlnaXQgbWVyZ2UgRkVUQ0hfSEVBRCAmJgorCSMgdHdvIChtYXN0ZXIpIGlzIG5vdCBhbiBhbmNlc3RvciBvZiB0aHJlZSAobGVmdCkgYW5kIGZvdXIgKHJpZ2h0KQorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF40ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgSEVBRF4yIEhFQUReMyB8IHNvcnQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgdHdvIHRocmVlIGZvdXIgfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEZFVENIX0hFQUQgb2N0b3B1cyBub24tZmFzdC1mb3J3YXJkJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgRkVUQ0hfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF40ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgSEVBRF4yIEhFQUReMyB8IHNvcnQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgdHdvIHRocmVlIGZvdXIgfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgdHdvLXByb2plY3QgbWVyZ2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0d28tcHJvamVjdCBtZXJnZSBieSBkZWZhdWx0JyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZvdXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZml2ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28tcHJvamVjdCBtZXJnZSB3aXRoIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcycgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmb3VyICYmCisJZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBmaXZlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZml2ZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMzQtbWVyZ2UtcmVjdXJzaXZlLXJlbmFtZS1vcHRpb25zLnNoIGIvdC90MzAzNC1tZXJnZS1yZWN1cnNpdmUtcmVuYW1lLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2Q5ZmFlNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMzQtbWVyZ2UtcmVjdXJzaXZlLXJlbmFtZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsMzMwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UtcmVjdXJzaXZlIHJlbmFtZSBvcHRpb25zCisKK1Rlc3QgcmVuYW1lIGRldGVjdGlvbiBieSBleGFtaW5pbmcgcmVuYW1lL2RlbGV0ZSBjb25mbGljdHMuCisKKyogKEhFQUQgLT4gcmVuYW1lKSByZW5hbWUKK3wgKiAobWFzdGVyKSBkZWxldGUKK3wvCisqIGJhc2UKKworZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyBiYXNlIG1hc3RlcgorRAkwLW9sZAorRAkxLW9sZAorRAkyLW9sZAorRAkzLW9sZAorCitnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIC1NMDEgYmFzZSByZW5hbWUKK1IwMjUgICAgMC1vbGQgICAwLW5ldworUjA1MCAgICAxLW9sZCAgIDEtbmV3CitSMDc1ICAgIDItb2xkICAgMi1uZXcKK1IxMDAgICAgMy1vbGQgICAzLW5ldworCitBY3R1YWwgc2ltaWxhcml0eSBpbmRpY2VzIGFyZSBwYXJzZWQgZnJvbSBkaWZmIG91dHB1dC4gV2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0Cit0aGV5IGFyZSByb3VuZGVkIGRvd24gKHNlZSwgZS5nLiwgRG9jdW1lbnRhdGlvbi9kaWZmLWdlbmVyYXRlLXBhdGNoLnR4dCwgd2hpY2gKK21lbnRpb25zIHRoaXMgaW4gYSBkaWZmZXJlbnQgY29udGV4dCkuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitnZXRfZXhwZWN0ZWRfc3RhZ2VzICgpIHsKKwlnaXQgY2hlY2tvdXQgcmVuYW1lIC0tICQxLW5ldyAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlICQxLW5ldyA+ZXhwZWN0ZWQtc3RhZ2VzLXVuZGV0ZWN0ZWQtJDEgJiYKKwlzZWQgInMvIDAJLyAyCS8iIDxleHBlY3RlZC1zdGFnZXMtdW5kZXRlY3RlZC0kMSBcCisJCT5leHBlY3RlZC1zdGFnZXMtZGV0ZWN0ZWQtJDEgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRAorfQorCityZW5hbWVfZGV0ZWN0ZWQgKCkgeworCWdpdCBscy1maWxlcyAtLXN0YWdlICQxLW9sZCAkMS1uZXcgPnN0YWdlcy1hY3R1YWwtJDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zdGFnZXMtZGV0ZWN0ZWQtJDEgc3RhZ2VzLWFjdHVhbC0kMQorfQorCityZW5hbWVfdW5kZXRlY3RlZCAoKSB7CisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgJDEtb2xkICQxLW5ldyA+c3RhZ2VzLWFjdHVhbC0kMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXN0YWdlcy11bmRldGVjdGVkLSQxIHN0YWdlcy1hY3R1YWwtJDEKK30KKworY2hlY2tfY29tbW9uICgpIHsKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+c3RhZ2VzLWFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgc3RhZ2VzLWFjdHVhbAorfQorCitjaGVja190aHJlc2hvbGRfMCAoKSB7CisJY2hlY2tfY29tbW9uICYmCisJcmVuYW1lX2RldGVjdGVkIDAgJiYKKwlyZW5hbWVfZGV0ZWN0ZWQgMSAmJgorCXJlbmFtZV9kZXRlY3RlZCAyICYmCisJcmVuYW1lX2RldGVjdGVkIDMKK30KKworY2hlY2tfdGhyZXNob2xkXzEgKCkgeworCWNoZWNrX2NvbW1vbiAmJgorCXJlbmFtZV91bmRldGVjdGVkIDAgJiYKKwlyZW5hbWVfZGV0ZWN0ZWQgMSAmJgorCXJlbmFtZV9kZXRlY3RlZCAyICYmCisJcmVuYW1lX2RldGVjdGVkIDMKK30KKworY2hlY2tfdGhyZXNob2xkXzIgKCkgeworCWNoZWNrX2NvbW1vbiAmJgorCXJlbmFtZV91bmRldGVjdGVkIDAgJiYKKwlyZW5hbWVfdW5kZXRlY3RlZCAxICYmCisJcmVuYW1lX2RldGVjdGVkIDIgJiYKKwlyZW5hbWVfZGV0ZWN0ZWQgMworfQorCitjaGVja19leGFjdF9yZW5hbWVzICgpIHsKKwljaGVja19jb21tb24gJiYKKwlyZW5hbWVfdW5kZXRlY3RlZCAwICYmCisJcmVuYW1lX3VuZGV0ZWN0ZWQgMSAmJgorCXJlbmFtZV91bmRldGVjdGVkIDIgJiYKKwlyZW5hbWVfZGV0ZWN0ZWQgMworfQorCitjaGVja19ub19yZW5hbWVzICgpIHsKKwljaGVja19jb21tb24gJiYKKwlyZW5hbWVfdW5kZXRlY3RlZCAwICYmCisJcmVuYW1lX3VuZGV0ZWN0ZWQgMSAmJgorCXJlbmFtZV91bmRldGVjdGVkIDIgJiYKKwlyZW5hbWVfdW5kZXRlY3RlZCAzCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8nICcKKwljYXQgPDwtXEVPRiA+My1vbGQgJiYKKwkzM2EKKwkzM2IKKwkzM2MKKwkzM2QKKwlFT0YKKwlzZWQgcy8zMy8yMi8gPDMtb2xkID4yLW9sZCAmJgorCXNlZCBzLzMzLzExLyA8My1vbGQgPjEtb2xkICYmCisJc2VkIHMvMzMvMDAvIDwzLW9sZCA+MC1vbGQgJiYKKwlnaXQgYWRkIFswLTNdLW9sZCAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCBybSBbMC0zXS1vbGQgJiYKKwlnaXQgY29tbWl0IC1tIGRlbGV0ZSAmJgorCWdpdCBjaGVja291dCAtYiByZW5hbWUgSEVBRF4gJiYKKwljcCAzLW9sZCAzLW5ldyAmJgorCXNlZCAxLDFzLy4veC8gPDItb2xkID4yLW5ldyAmJgorCXNlZCAxLDJzLy4veC8gPDEtb2xkID4xLW5ldyAmJgorCXNlZCAxLDNzLy4veC8gPDAtb2xkID4wLW5ldyAmJgorCWdpdCBhZGQgWzAtM10tbmV3ICYmCisJZ2l0IHJtIFswLTNdLW9sZCAmJgorCWdpdCBjb21taXQgLW0gcmVuYW1lICYmCisJZ2V0X2V4cGVjdGVkX3N0YWdlcyAwICYmCisJZ2V0X2V4cGVjdGVkX3N0YWdlcyAxICYmCisJZ2V0X2V4cGVjdGVkX3N0YWdlcyAyICYmCisJZ2V0X2V4cGVjdGVkX3N0YWdlcyAzICYmCisJY2hlY2tfNTA9ImZhbHNlIiAmJgorCXRhaWw9IkhFQUReIC0tIEhFQUQgbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0aHJlc2hvbGRzJyAnCisJZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAtTTAxIEhFQUReIEhFQUQgPmRpZmYtb3V0cHV0ICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGRpZmYtb3V0cHV0IiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgZGlmZi1vdXRwdXQgJiYKKwlncmVwICJSWzAtOV1bMC05XVswLTldCVwoWzAtM11cKS1vbGQJXDEtbmV3IiBkaWZmLW91dHB1dCBcCisJCT5ncmVwLW91dHB1dCAmJgorCXRlc3RfY21wIGRpZmYtb3V0cHV0IGdyZXAtb3V0cHV0ICYmCisJdGgwPSQoc2VkIC1uICJzL1JcKC4uLlwpCTAtb2xkCTAtbmV3L1wxL3AiIDxkaWZmLW91dHB1dCkgJiYKKwl0aDE9JChzZWQgLW4gInMvUlwoLi4uXCkJMS1vbGQJMS1uZXcvXDEvcCIgPGRpZmYtb3V0cHV0KSAmJgorCXRoMj0kKHNlZCAtbiAicy9SXCguLi5cKQkyLW9sZAkyLW5ldy9cMS9wIiA8ZGlmZi1vdXRwdXQpICYmCisJdGgzPSQoc2VkIC1uICJzL1JcKC4uLlwpCTMtb2xkCTMtbmV3L1wxL3AiIDxkaWZmLW91dHB1dCkgJiYKKwl0ZXN0ICIkdGgwIiAtbHQgIiR0aDEiICYmCisJdGVzdCAiJHRoMSIgLWx0ICIkdGgyIiAmJgorCXRlc3QgIiR0aDIiIC1sdCAiJHRoMyIgJiYKKwl0ZXN0ICIkdGgzIiA9IDEwMCAmJgorCWlmIHRlc3QgNTAgLWxlICIkdGgwIgorCXRoZW4KKwkJY2hlY2tfNTA9Y2hlY2tfdGhyZXNob2xkXzAKKwllbGlmIHRlc3QgNTAgLWxlICIkdGgxIgorCXRoZW4KKwkJY2hlY2tfNTA9Y2hlY2tfdGhyZXNob2xkXzEKKwllbGlmIHRlc3QgNTAgLWxlICIkdGgyIgorCXRoZW4KKwkJY2hlY2tfNTA9Y2hlY2tfdGhyZXNob2xkXzIKKwlmaSAmJgorCXRoMD0iJHRoMCUiICYmCisJdGgxPSIkdGgxJSIgJiYKKwl0aDI9IiR0aDIlIiAmJgorCXRoMz0iJHRoMyUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fzc3VtcHRpb24gZm9yIHRlc3RzOiByZW5hbWUgZGV0ZWN0aW9uIHdpdGggZGlmZicgJworCWdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLU0kdGgwIC0tZGlmZi1maWx0ZXI9UiBIRUFEXiBIRUFEIFwKKwkJPmRpZmYtb3V0cHV0LTAgJiYKKwlnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIC1NJHRoMSAtLWRpZmYtZmlsdGVyPVIgSEVBRF4gSEVBRCBcCisJCT5kaWZmLW91dHB1dC0xICYmCisJZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAtTSR0aDIgLS1kaWZmLWZpbHRlcj1SIEhFQUReIEhFQUQgXAorCQk+ZGlmZi1vdXRwdXQtMiAmJgorCWdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLU0xMDAlIC0tZGlmZi1maWx0ZXI9UiBIRUFEXiBIRUFEIFwKKwkJPmRpZmYtb3V0cHV0LTMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IGRpZmYtb3V0cHV0LTAgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGRpZmYtb3V0cHV0LTEgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGRpZmYtb3V0cHV0LTIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGRpZmYtb3V0cHV0LTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBzaW1pbGFyaXR5IHRocmVzaG9sZCBpcyA1MCUnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgJHRhaWwgJiYKKwkkY2hlY2tfNTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG93IHJlbmFtZSB0aHJlc2hvbGQnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgLS1maW5kLXJlbmFtZXM9JHRoMCAkdGFpbCAmJgorCWNoZWNrX3RocmVzaG9sZF8wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lZGl1bSByZW5hbWUgdGhyZXNob2xkJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tZmluZC1yZW5hbWVzPSR0aDEgJHRhaWwgJiYKKwljaGVja190aHJlc2hvbGRfMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoaWdoIHJlbmFtZSB0aHJlc2hvbGQnICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgLS1maW5kLXJlbmFtZXM9JHRoMiAkdGFpbCAmJgorCWNoZWNrX3RocmVzaG9sZF8yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4YWN0IHJlbmFtZXMgb25seScgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWZpbmQtcmVuYW1lcz0xMDAlICR0YWlsICYmCisJY2hlY2tfZXhhY3RfcmVuYW1lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgdGhyZXNob2xkIGlzIHRydW5jYXRlZCcgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWZpbmQtcmVuYW1lcz0yMDAlICR0YWlsICYmCisJY2hlY2tfZXhhY3RfcmVuYW1lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlZCByZW5hbWUgZGV0ZWN0aW9uJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tbm8tcmVuYW1lcyAkdGFpbCAmJgorCWNoZWNrX25vX3JlbmFtZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCB3aW5zIGluIC0tZmluZC1yZW5hbWVzPTxtPiAtLWZpbmQtcmVuYW1lcz08bj4nICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgXAorCQktLWZpbmQtcmVuYW1lcz0kdGgwIC0tZmluZC1yZW5hbWVzPSR0aDIgJHRhaWwgJiYKKwljaGVja190aHJlc2hvbGRfMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZpbmQtcmVuYW1lcyByZXNldHMgdGhyZXNob2xkJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIFwKKwkJLS1maW5kLXJlbmFtZXM9JHRoMCAtLWZpbmQtcmVuYW1lcyAkdGFpbCAmJgorCSRjaGVja181MAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXN0IHdpbnMgaW4gLS1uby1yZW5hbWVzIC0tZmluZC1yZW5hbWVzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tbm8tcmVuYW1lcyAtLWZpbmQtcmVuYW1lcyAkdGFpbCAmJgorCSRjaGVja181MAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXN0IHdpbnMgaW4gLS1maW5kLXJlbmFtZXMgLS1uby1yZW5hbWVzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tZmluZC1yZW5hbWVzIC0tbm8tcmVuYW1lcyAkdGFpbCAmJgorCWNoZWNrX25vX3JlbmFtZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXNzdW1wdGlvbiBmb3IgZnVydGhlciB0ZXN0czogdHJpdmlhbCBtZXJnZSBzdWNjZWVkcycgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBIRUFEIC0tIEhFQUQgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tZmluZC1yZW5hbWVzPSR0aDAgSEVBRCAtLSBIRUFEIEhFQUQgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IC0tY2FjaGVkICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWZpbmQtcmVuYW1lcz0kdGgyIEhFQUQgLS0gSEVBRCBIRUFEICYmCisJZ2l0IGRpZmYgLS1xdWlldCAtLWNhY2hlZCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1maW5kLXJlbmFtZXM9MTAwJSBIRUFEIC0tIEhFQUQgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tbm8tcmVuYW1lcyBIRUFEIC0tIEhFQUQgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1maW5kLXJlbmFtZXMgcmVqZWN0cyBuZWdhdGl2ZSBhcmd1bWVudCcgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWZpbmQtcmVuYW1lcz0tMjUgXAorCQlIRUFEIC0tIEhFQUQgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1maW5kLXJlbmFtZXMgcmVqZWN0cyBub24tbnVtYmVycycgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLWZpbmQtcmVuYW1lcz0weGYgXAorCQlIRUFEIC0tIEhFQUQgSEVBRCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lLXRocmVzaG9sZD08bj4gaXMgYSBzeW5vbnltIGZvciBmaW5kLXJlbmFtZXM9PG4+JyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tcmVuYW1lLXRocmVzaG9sZD0kdGgwICR0YWlsICYmCisJY2hlY2tfdGhyZXNob2xkXzAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCB3aW5zIGluIC0tbm8tcmVuYW1lcyAtLXJlbmFtZS10aHJlc2hvbGQ9PG4+JyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0tbm8tcmVuYW1lcyAtLXJlbmFtZS10aHJlc2hvbGQ9JHRoMCAkdGFpbCAmJgorCWNoZWNrX3RocmVzaG9sZF8wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3Qgd2lucyBpbiAtLXJlbmFtZS10aHJlc2hvbGQ9PG4+IC0tbm8tcmVuYW1lcycgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLXJlbmFtZS10aHJlc2hvbGQ9JHRoMCAtLW5vLXJlbmFtZXMgJHRhaWwgJiYKKwljaGVja19ub19yZW5hbWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVuYW1lLXRocmVzaG9sZD08bj4gcmVqZWN0cyBuZWdhdGl2ZSBhcmd1bWVudCcgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLXJlbmFtZS10aHJlc2hvbGQ9LTI1IFwKKwkJSEVBRCAtLSBIRUFEIEhFQUQgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IC0tY2FjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVuYW1lLXRocmVzaG9sZD08bj4gcmVqZWN0cyBub24tbnVtYmVycycgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAtLXJlbmFtZS10aHJlc2hvbGQ9MHhmIFwKKwkJSEVBRCAtLSBIRUFEIEhFQUQgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IC0tY2FjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3Qgd2lucyBpbiAtLXJlbmFtZS10aHJlc2hvbGQ9PG0+IC0tZmluZC1yZW5hbWVzPTxuPicgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBcCisJCS0tcmVuYW1lLXRocmVzaG9sZD0kdGgwIC0tZmluZC1yZW5hbWVzPSR0aDIgJHRhaWwgJiYKKwljaGVja190aHJlc2hvbGRfMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXN0IHdpbnMgaW4gLS1maW5kLXJlbmFtZXM9PG0+IC0tcmVuYW1lLXRocmVzaG9sZD08bj4nICcKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgXAorCQktLWZpbmQtcmVuYW1lcz0kdGgyIC0tcmVuYW1lLXRocmVzaG9sZD0kdGgwICR0YWlsICYmCisJY2hlY2tfdGhyZXNob2xkXzAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UucmVuYW1lcyBkaXNhYmxlcyByZW5hbWUgZGV0ZWN0aW9uJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgLWMgbWVyZ2UucmVuYW1lcz1mYWxzZSBtZXJnZS1yZWN1cnNpdmUgJHRhaWwgJiYKKwljaGVja19ub19yZW5hbWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLnJlbmFtZXMgZGVmYXVsdHMgdG8gZGlmZi5yZW5hbWVzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgLWMgZGlmZi5yZW5hbWVzPWZhbHNlIG1lcmdlLXJlY3Vyc2l2ZSAkdGFpbCAmJgorCWNoZWNrX25vX3JlbmFtZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UucmVuYW1lcyBvdmVycmlkZXMgZGlmZi5yZW5hbWVzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZGlmZi5yZW5hbWVzPWZhbHNlIC1jIG1lcmdlLnJlbmFtZXM9dHJ1ZSBtZXJnZS1yZWN1cnNpdmUgJHRhaWwgJiYKKwkkY2hlY2tfNTAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDM1LW1lcmdlLXNwYXJzZS5zaCBiL3QvdDMwMzUtbWVyZ2Utc3BhcnNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0NTYyZTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDM1LW1lcmdlLXNwYXJzZS5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2Ugd2l0aCBzcGFyc2UgZmlsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIHRlc3RfZmlsZSAkZmlsZW5hbWUgJGNvbnRlbnQKK3Rlc3RfZmlsZSAoKSB7CisJZWNobyAiJDIiID4gIiQxIiAmJgorCWdpdCBhZGQgIiQxIgorfQorCisjIHRlc3RfY29tbWl0X3RoaXMgJG1lc3NhZ2VfYW5kX3RhZwordGVzdF9jb21taXRfdGhpcyAoKSB7CisJZ2l0IGNvbW1pdCAtbSAiJDEiICYmCisJZ2l0IHRhZyAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9maWxlIGNoZWNrZWQtb3V0IGluaXQgJiYKKwl0ZXN0X2ZpbGUgbW9kaWZ5X2RlbGV0ZSBtb2RpZnlfZGVsZXRlX2luaXQgJiYKKwl0ZXN0X2NvbW1pdF90aGlzIGluaXQgJiYKKwl0ZXN0X2ZpbGUgbW9kaWZ5X2RlbGV0ZSBtb2RpZnlfZGVsZXRlX3RoZWlycyAmJgorCXRlc3RfY29tbWl0X3RoaXMgdGhlaXJzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0ICYmCisJZ2l0IHJtIG1vZGlmeV9kZWxldGUgJiYKKwl0ZXN0X2NvbW1pdF90aGlzIG91cnMgJiYKKwlnaXQgY29uZmlnIGNvcmUuc3BhcnNlQ2hlY2tvdXQgdHJ1ZSAmJgorCWVjaG8gIi9jaGVja2VkLW91dCIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRoZWlycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgd29ya3MgYWZ0ZXIgdGhlIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpcyByZXNldCBwcm9wZXJseScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS0gbW9kaWZ5X2RlbGV0ZSA+b3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG1vZGlmeV9kZWxldGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvbmZsaWN0IGJhY2snICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGhlaXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lcmdlIGFib3J0IHdvcmtzIGFmdGVyIHRoZSBjb25mbGljdCcgJworCWdpdCBtZXJnZSAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzIGFib3J0ZWQgcHJvcGVybHknICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tIG1vZGlmeV9kZWxldGUgPm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtb2RpZnlfZGVsZXRlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzA0MC1zdWJwcm9qZWN0cy1iYXNpYy5zaCBiL3QvdDMwNDAtc3VicHJvamVjdHMtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjgxZWI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwNDAtc3VicHJvamVjdHMtYmFzaWMuc2gKQEAgLTAsMCArMSw4NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0Jhc2ljIHN1YnByb2plY3QgZnVuY3Rpb25hbGl0eScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY3JlYXRlIHN1cGVycHJvamVjdCcgJworCTogPk1ha2VmaWxlICYmCisJZ2l0IGFkZCBNYWtlZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIlN1cGVycHJvamVjdCBjcmVhdGVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY3JlYXRlIHN1YnByb2plY3RzJyAnCisJbWtkaXIgc3ViMSAmJgorCSggY2Qgc3ViMSAmJiBnaXQgaW5pdCAmJiA6ID5NYWtlZmlsZSAmJiBnaXQgYWRkICogJiYKKwlnaXQgY29tbWl0IC1xIC1tICJzdWJwcm9qZWN0IDEiICkgJiYKKwlta2RpciBzdWIyICYmCisJKCBjZCBzdWIyICYmIGdpdCBpbml0ICYmIDogPk1ha2VmaWxlICYmIGdpdCBhZGQgKiAmJgorCWdpdCBjb21taXQgLXEgLW0gInN1YnByb2plY3QgMiIgKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgc3ViMSAmJgorCWdpdCBhZGQgc3ViMiAmJgorCWdpdCBjb21taXQgLXEgLW0gInN1YnByb2plY3RzIGFkZGVkIiAmJgorCUdJVF9QUklOVF9TSEExX0VMTElQU0lTPSJ5ZXMiIGdpdCBkaWZmLXRyZWUgLS1hYmJyZXY9NSBIRUFEXiBIRUFEIHxjdXQgLWQiICIgLWYtMyw1LSA+Y3VycmVudCAmJgorCWdpdCBicmFuY2ggc2F2ZSBIRUFEICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJOjAwMDAwMCAxNjAwMDAgMDAwMDAuLi4gQQlzdWIxCisJOjAwMDAwMCAxNjAwMDAgMDAwMDAuLi4gQQlzdWIyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBmc2NrIGlnbm9yZXMgdGhlIHN1YnByb2plY3RzJyAnCisJZ2l0IGZzY2sgLS1mdWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGNvbW1pdCBpbiBhIHN1YnByb2plY3QgZGV0ZWN0ZWQnICcKKwkoIGNkIHN1YjEgJiYKKwllY2hvICJhbGw6IiA+Pk1ha2VmaWxlICYmCisJZWNobyAiCXRydWUiID4+TWFrZWZpbGUgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tICJtYWtlIGFsbCIgKSAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBhIGNoYW5nZWQgc3VicHJvamVjdCBIRUFEIGNhbiBiZSBjb21taXR0ZWQnICcKKwlnaXQgY29tbWl0IC1xIC1hIC1tICJzdWIxIGNoYW5nZWQiICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1leGl0LWNvZGUgSEVBRF4gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBkaWZmLWluZGV4IHdvcmtzIGZvciBzdWJwcm9qZWN0IGVsZW1lbnRzJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIHNhdmUgLS0gc3ViMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBkaWZmLXRyZWUgd29ya3MgZm9yIHN1YnByb2plY3QgZWxlbWVudHMnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFEIC0tIHN1YjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgZ2l0IGRpZmYgd29ya3MgZm9yIHN1YnByb2plY3QgZWxlbWVudHMnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRF4gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBjbG9uZSB3b3JrcycgJworCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2xvbmUgLWwgLXMgLiBjbG9uZWQgJiYKKwkoIGNkIGNsb25lZCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZpbmcgYW5kIGFkZGluZyBzdWJwcm9qZWN0JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAtLSBzdWIyICYmCisJbXYgc3ViMiBzdWIzICYmCisJZ2l0IGFkZCBzdWIzICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAicmVuYW1pbmcgYSBzdWJwcm9qZWN0IiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtTSAtLW5hbWUtc3RhdHVzIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKycKKworIyB0aGUgaW5kZXggbXVzdCBjb250YWluIHRoZSBvYmplY3QgbmFtZSB0aGUgSEVBRCBvZiB0aGUKKyMgc3VicHJvamVjdCBzdWIxIHdhcyBhdCB0aGUgcG9pbnQgInNhdmUiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBpbiBzdXBlcnByb2plY3QnICcKKwlnaXQgY2hlY2tvdXQgc2F2ZSAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tcmF3IC0tY2FjaGVkIHNhdmUgLS0gc3ViMQorJworCisjIGp1c3QgaW50ZXJlc3Rpbmcgd2hhdCBoYXBwZW5lZC4uLgorIyBnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIC1NIHNhdmUgbWFzdGVyCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzA1MC1zdWJwcm9qZWN0cy1mZXRjaC5zaCBiL3QvdDMwNTAtc3VicHJvamVjdHMtZmV0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjFmMDlhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwNTAtc3VicHJvamVjdHMtZmV0Y2guc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoaW5nIGFuZCBwdXNoaW5nIHByb2plY3Qgd2l0aCBzdWJwcm9qZWN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF90aWNrICYmCisJbWtkaXIgLXAgc3ViICYmICgKKwkJY2Qgc3ViICYmCisJCWdpdCBpbml0ICYmCisJCT5zdWJmaWxlICYmCisJCWdpdCBhZGQgc3ViZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJwcm9qZWN0IGNvbW1pdCAjMSIKKwkpICYmCisJPm1haW5maWxlICYmCisJZ2l0IGFkZCBzdWIgbWFpbmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzdXBlcnByb2plY3QgY29tbWl0ICMxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGNsb25lICcKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvLmdpdCIgY2xvbmVkICYmCisJKGdpdCByZXYtcGFyc2UgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMpID5leHBlY3RlZCAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCShnaXQgcmV2LXBhcnNlIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zKSA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGFkdmFuY2UgJworCWVjaG8gbW9yZSA+bWFpbmZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIHN1YiAmJgorCW12IHN1Yi8uZ2l0IHN1Yi8uZ2l0LWRpc2FibGVkICYmCisJZ2l0IGFkZCBzdWIvc3ViZmlsZSBtYWluZmlsZSAmJgorCW12IHN1Yi8uZ2l0LWRpc2FibGVkIHN1Yi8uZ2l0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3VwZXJwcm9qZWN0IGNvbW1pdCAjMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBmZXRjaCAnCisJKGdpdCByZXYtcGFyc2UgSEVBRCAmJiBnaXQgbHMtZmlsZXMgLXMpID5leHBlY3RlZCAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBwdWxsICYmCisJCShnaXQgcmV2LXBhcnNlIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zKSA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwNjAtbHMtZmlsZXMtd2l0aC10cmVlLnNoIGIvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTJlZDY2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwNjAtbHMtZmlsZXMtd2l0aC10cmVlLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybCBELiBXb3J0aAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtZmlsZXMgdGVzdCAoLS13aXRoLXRyZWUpLgorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgLS13aXRoLXRyZWUgYW5kIGluIHBhcnRpY3VsYXIgaW4KK2Egc2NlbmFyaW8ga25vd24gdG8gdHJpZ2dlciBhIGNyYXNoIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBnaXQuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwkjIFRoZSBidWcgd2UgYXJlIGV4ZXJjaXNpbmcgcmVxdWlyZXMgYSBmYWlyIG51bWJlciBvZiBlbnRyaWVzCisJIyBpbiBhIHN1Yi1kaXJlY3Rvcnkgc28gdGhhdCBhZGRfaW5kZXhfZW50cnkgd2lsbCB0cmlnZ2VyIGEKKwkjIHJlYWxsb2MuCisKKwllY2hvIGZpbGUgPmV4cGVjdGVkICYmCisJbWtkaXIgc3ViICYmCisJZm9yIG4gaW4gMCAxIDIgMyA0IDUKKwlkbworCQlmb3IgbSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5CisJCWRvCisJCQludW09MDAkbiRtICYmCisJCQk+c3ViL2ZpbGUtJG51bSAmJgorCQkJZWNobyBmaWxlLSRudW0gPj5leHBlY3RlZCB8fAorCQkJcmV0dXJuIDEKKwkJZG9uZQorCWRvbmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYSBidW5jaCBvZiBmaWxlcyIgJiYKKworCSMgV2UgcmVtb3ZlIHRoZW0gYWxsIHNvIHRoYXQgd2Ugd2lsbCBoYXZlIHNvbWV0aGluZyB0byBhZGQKKwkjIGJhY2sgd2l0aCAtLXdpdGgtdHJlZSBhbmQgc28gdGhhdCB3ZSB3aWxsIGRlZmluaXRlbHkgYmUKKwkjIHVuZGVyIHRoZSByZWFsbG9jIHNpemUgdG8gdHJpZ2dlciB0aGUgYnVnLgorCXJtIC1yZiBzdWIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJyZW1vdmUgdGhlbSBhbGwiICYmCisKKwkjIFRoZSBidWcgYWxzbyByZXF1aXJlcyBzb21lIGVudHJ5IGJlZm9yZSBvdXIgZGlyZWN0b3J5IHNvIHRoYXQKKwkjIHBydW5lX3BhdGggd2lsbCBtb2RpZnkgdGhlX2luZGV4LmNhY2hlCisKKwlta2RpciBhX2RpcmVjdG9yeV90aGF0X3NvcnRzX2JlZm9yZV9zdWIgJiYKKwk+YV9kaXJlY3RvcnlfdGhhdF9zb3J0c19iZWZvcmVfc3ViL2ZpbGUgJiYKKwlta2RpciBzdWIgJiYKKwk+c3ViL2ZpbGUgJiYKKwlnaXQgYWRkIC4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC0td2l0aC10cmVlIHNob3VsZCBzdWNjZWVkIGZyb20gc3ViZGlyJyAnCisJIyBXZSBoYXZlIHRvIHJ1biBmcm9tIGEgc3ViLWRpcmVjdG9yeSB0byB0cmlnZ2VyIHBydW5lX3BhdGgKKwkjIFRoZW4gd2UgZmluYWxseSBnZXQgdG8gcnVuIG91ciAtLXdpdGgtdHJlZSB0ZXN0CisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGxzLWZpbGVzIC0td2l0aC10cmVlPUhFQUR+MSA+Li4vb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0td2l0aC10cmVlIHNob3VsZCBhZGQgZW50cmllcyBmcm9tIG5hbWVkIHRyZWUuJyBcCisgICAgJ3Rlc3RfY21wIGV4cGVjdGVkIG91dHB1dCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDcwLXdpbGRtYXRjaC5zaCBiL3QvdDMwNzAtd2lsZG1hdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5MWQ0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDcwLXdpbGRtYXRjaC5zaApAQCAtMCwwICsxLDQzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3dpbGRtYXRjaCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Nob3VsZF9jcmVhdGVfdGVzdF9maWxlKCkgeworCWZpbGU9JDEKKworCWNhc2UgJGZpbGUgaW4KKwkjIGB0b3VjaCAuYCB3aWxsIHN1Y2NlZWQgYnV0IG9idmlvdXNseSBub3QgZG8gd2hhdCB3ZSBpbnRlbmQKKwkjIGhlcmUuCisJIi4iKQorCQlyZXR1cm4gMQorCQk7OworCSMgV2UgY2Fubm90IGNyZWF0ZSBhIGZpbGUgd2l0aCBhbiBlbXB0eSBmaWxlbmFtZS4KKwkiIikKKwkJcmV0dXJuIDEKKwkJOzsKKwkjIFRoZSB0ZXN0cyB0aGF0IGFyZSB0ZXN0aW5nIHRoYXQgZS5nLiBmb28vL2JhciBpcyBtYXRjaGVkIGJ5CisJIyBmb28vKi9iYXIgY2FuJ3QgYmUgdGVzdGVkIG9uIGZpbGVzeXN0ZW1zIHNpbmNlIHRoZXJlJ3Mgbm8KKwkjIHdheSB3ZSdyZSBnZXR0aW5nIGEgZG91YmxlIHNsYXNoLgorCSovLyopCisJCXJldHVybiAxCisJCTs7CisJIyBXaGVuIHRlc3RpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBmb28vYmFyIGFuZCBmb28vYmFyLyB3ZQorCSMgY2FuJ3QgdGVzdCB0aGUgbGF0dGVyLgorCSovKQorCQlyZXR1cm4gMQorCQk7OworCSMgT24gV2luZG93cywgXCBpbiBwYXRocyBpcyBzaWxlbnRseSBjb252ZXJ0ZWQgdG8gLywgd2hpY2gKKwkjIHdvdWxkIHJlc3VsdCBpbiB0aGUgInRvdWNoIiBiZWxvdyB3b3JraW5nLCBidXQgdGhlIHRlc3QKKwkjIGl0c2VsZiBmYWlsaW5nLiBTZWUgNmZkMTEwNmFhNCAoInQzNzAwOiBTa2lwIGEgdGVzdCB3aXRoCisJIyBiYWNrc2xhc2hlcyBpbiBwYXRoc3BlYyIsIDIwMDktMDMtMTMpIGZvciBwcmlvciBhcnQgYW5kCisJIyBkZXRhaWxzLgorCSpcXCopCisJCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBCU0xBU0hQU1BFQworCQl0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCQkjIE5PVEU6IFRoZSA7OyYgYmFzaCBleHRlbnNpb24gaXMgbm90IHBvcnRhYmxlLCBzbworCQkjIHRoaXMgdGVzdCBuZWVkcyB0byBiZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuCisJCSMgbGlzdC4KKwkJIworCQkjIElmIHdlIHdhbnQgdG8gYWRkIG1vcmUgY29uZGl0aW9uYWwgcmV0dXJucyB3ZSBlaXRoZXIKKwkJIyBuZWVkIGEgbmV3IGNhc2Ugc3RhdGVtZW50LCBvciB0dXJuIHRoaXMgd2hvbGUgdGhpbmcKKwkJIyBpbnRvIGEgc2VyaWVzIG9mICJpZiIgdGVzdHMuCisJCTs7CisJZXNhYworCisKKwkjIE9uIFdpbmRvd3MgcHJvcGVyIChpLmUuIG5vdCBDeWd3aW4pIG1hbnkgZmlsZSBuYW1lcyB3aGljaAorCSMgdW5kZXIgQ3lnd2luIHdvdWxkIGJlIGVtdWxhdGVkIGRvbid0IHdvcmsuCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVworCXRoZW4KKwkJY2FzZSAkZmlsZSBpbgorCQkiICIpCisJCQkjIEZpbGVzIGNhbGxlZCAiICIgYXJlIGZvcmJpZGRlbiBvbiBXaW5kb3dzCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJKlw8KnwqXD4qfCo6KnwqXCIqfCpcfCp8Klw/KnwqXCoqKQorCQkJIyBGaWxlcyB3aXRoIHZhcmlvdXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZW4ndAorCQkJIyBhbGxvd2VkIG9uIFdpbmRvd3MuIFNvdXJjZWQgZnJvbQorCQkJIyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE5NzYwNjAKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZmkKKworCXJldHVybiAwCit9CisKK21hdGNoX3dpdGhfZnVuY3Rpb24oKSB7CisJdGV4dD0kMQorCXBhdHRlcm49JDIKKwltYXRjaF9leHBlY3Q9JDMKKwltYXRjaF9mdW5jdGlvbj0kNAorCisJaWYgdGVzdCAiJG1hdGNoX2V4cGVjdCIgPSAxCisJdGhlbgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbWF0Y2hfZnVuY3Rpb246IG1hdGNoICckdGV4dCcgJyRwYXR0ZXJuJyIgIgorCQkJdGVzdC10b29sIHdpbGRtYXRjaCAkbWF0Y2hfZnVuY3Rpb24gJyR0ZXh0JyAnJHBhdHRlcm4nCisJCSIKKwllbGlmIHRlc3QgIiRtYXRjaF9leHBlY3QiID0gMAorCXRoZW4KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG1hdGNoX2Z1bmN0aW9uOiBubyBtYXRjaCAnJHRleHQnICckcGF0dGVybiciICIKKwkJCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCB3aWxkbWF0Y2ggJG1hdGNoX2Z1bmN0aW9uICckdGV4dCcgJyRwYXR0ZXJuJworCQkiCisJZWxzZQorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJQQU5JQzogVGVzdCBmcmFtZXdvcmsgZXJyb3IuIFVua25vd24gbWF0Y2hlcyB2YWx1ZSAkbWF0Y2hfZXhwZWN0IiAnZmFsc2UnCisJZmkKKworfQorCittYXRjaF93aXRoX2xzX2ZpbGVzKCkgeworCXRleHQ9JDEKKwlwYXR0ZXJuPSQyCisJbWF0Y2hfZXhwZWN0PSQzCisJbWF0Y2hfZnVuY3Rpb249JDQKKwlsc19maWxlc19hcmdzPSQ1CisKKwltYXRjaF9zdGRvdXRfc3RkZXJyX2NtcD0iCisJCXRyIC1kICdcMCcgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsIgorCisJaWYgdGVzdCAiJG1hdGNoX2V4cGVjdCIgPSAnRScKKwl0aGVuCisJCWlmIHRlc3QgLWUgLmdpdC9jcmVhdGVkX3Rlc3RfZmlsZQorCQl0aGVuCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYUEVOU0lWRV9PTl9XSU5ET1dTICIkbWF0Y2hfZnVuY3Rpb24gKHZpYSBscy1maWxlcyk6IG1hdGNoIGRpZXMgb24gJyRwYXR0ZXJuJyAnJHRleHQnIiAiCisJCQkJcHJpbnRmICclcycgJyR0ZXh0JyA+ZXhwZWN0ICYmCisJCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0JGxzX2ZpbGVzX2FyZ3MgbHMtZmlsZXMgLXogLS0gJyRwYXR0ZXJuJworCQkJIgorCQllbHNlCisJCQl0ZXN0X2V4cGVjdF9mYWlsdXJlIEVYUEVOU0lWRV9PTl9XSU5ET1dTICIkbWF0Y2hfZnVuY3Rpb24gKHZpYSBscy1maWxlcyk6IG1hdGNoIHNraXAgJyRwYXR0ZXJuJyAnJHRleHQnIiAnZmFsc2UnCisJCWZpCisJZWxpZiB0ZXN0ICIkbWF0Y2hfZXhwZWN0IiA9IDEKKwl0aGVuCisJCWlmIHRlc3QgLWUgLmdpdC9jcmVhdGVkX3Rlc3RfZmlsZQorCQl0aGVuCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYUEVOU0lWRV9PTl9XSU5ET1dTICIkbWF0Y2hfZnVuY3Rpb24gKHZpYSBscy1maWxlcyk6IG1hdGNoICckcGF0dGVybicgJyR0ZXh0JyIgIgorCQkJCXByaW50ZiAnJXMnICckdGV4dCcgPmV4cGVjdCAmJgorCQkJCWdpdCRsc19maWxlc19hcmdzIGxzLWZpbGVzIC16IC0tICckcGF0dGVybicgPmFjdHVhbC5yYXcgMj5hY3R1YWwuZXJyICYmCisJCQkJJG1hdGNoX3N0ZG91dF9zdGRlcnJfY21wCisJCQkiCisJCWVsc2UKKwkJCXRlc3RfZXhwZWN0X2ZhaWx1cmUgRVhQRU5TSVZFX09OX1dJTkRPV1MgIiRtYXRjaF9mdW5jdGlvbiAodmlhIGxzLWZpbGVzKTogbWF0Y2ggc2tpcCAnJHBhdHRlcm4nICckdGV4dCciICdmYWxzZScKKwkJZmkKKwllbGlmIHRlc3QgIiRtYXRjaF9leHBlY3QiID0gMAorCXRoZW4KKwkJaWYgdGVzdCAtZSAuZ2l0L2NyZWF0ZWRfdGVzdF9maWxlCisJCXRoZW4KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFX09OX1dJTkRPV1MgIiRtYXRjaF9mdW5jdGlvbiAodmlhIGxzLWZpbGVzKTogbm8gbWF0Y2ggJyRwYXR0ZXJuJyAnJHRleHQnIiAiCisJCQkJPmV4cGVjdCAmJgorCQkJCWdpdCRsc19maWxlc19hcmdzIGxzLWZpbGVzIC16IC0tICckcGF0dGVybicgPmFjdHVhbC5yYXcgMj5hY3R1YWwuZXJyICYmCisJCQkJJG1hdGNoX3N0ZG91dF9zdGRlcnJfY21wCisJCQkiCisJCWVsc2UKKwkJCXRlc3RfZXhwZWN0X2ZhaWx1cmUgRVhQRU5TSVZFX09OX1dJTkRPV1MgIiRtYXRjaF9mdW5jdGlvbiAodmlhIGxzLWZpbGVzKTogbm8gbWF0Y2ggc2tpcCAnJHBhdHRlcm4nICckdGV4dCciICdmYWxzZScKKwkJZmkKKwllbHNlCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBBTklDOiBUZXN0IGZyYW1ld29yayBlcnJvci4gVW5rbm93biBtYXRjaGVzIHZhbHVlICRtYXRjaF9leHBlY3QiICdmYWxzZScKKwlmaQorfQorCittYXRjaCgpIHsKKwlpZiB0ZXN0ICIkIyIgPSA2CisJdGhlbgorCQkjIFdoZW4gdGVzdC10b29sIHdpbGRtYXRjaCBhbmQgZ2l0IGxzLWZpbGVzIHByb2R1Y2UgdGhlIHNhbWUKKwkJIyByZXN1bHQuCisJCW1hdGNoX2dsb2I9JDEKKwkJbWF0Y2hfZmlsZV9nbG9iPSRtYXRjaF9nbG9iCisJCW1hdGNoX2lnbG9iPSQyCisJCW1hdGNoX2ZpbGVfaWdsb2I9JG1hdGNoX2lnbG9iCisJCW1hdGNoX3BhdGhtYXRjaD0kMworCQltYXRjaF9maWxlX3BhdGhtYXRjaD0kbWF0Y2hfcGF0aG1hdGNoCisJCW1hdGNoX3BhdGhtYXRjaGk9JDQKKwkJbWF0Y2hfZmlsZV9wYXRobWF0Y2hpPSRtYXRjaF9wYXRobWF0Y2hpCisJCXRleHQ9JDUKKwkJcGF0dGVybj0kNgorCWVsaWYgdGVzdCAiJCMiID0gMTAKKwl0aGVuCisJCW1hdGNoX2dsb2I9JDEKKwkJbWF0Y2hfaWdsb2I9JDIKKwkJbWF0Y2hfcGF0aG1hdGNoPSQzCisJCW1hdGNoX3BhdGhtYXRjaGk9JDQKKwkJbWF0Y2hfZmlsZV9nbG9iPSQ1CisJCW1hdGNoX2ZpbGVfaWdsb2I9JDYKKwkJbWF0Y2hfZmlsZV9wYXRobWF0Y2g9JDcKKwkJbWF0Y2hfZmlsZV9wYXRobWF0Y2hpPSQ4CisJCXRleHQ9JDkKKwkJcGF0dGVybj0kezEwfQorCWZpCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYUEVOU0lWRV9PTl9XSU5ET1dTICdjbGVhbnVwIGFmdGVyIHByZXZpb3VzIGZpbGUgdGVzdCcgJworCQlpZiB0ZXN0IC1lIC5naXQvY3JlYXRlZF90ZXN0X2ZpbGUKKwkJdGhlbgorCQkJZ2l0IHJlc2V0ICYmCisJCQlnaXQgY2xlYW4gLWRmCisJCWZpCisJJworCisJcHJpbnRmICclcycgIiR0ZXh0IiA+LmdpdC9leHBlY3RlZF90ZXN0X2ZpbGUKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFX09OX1dJTkRPV1MgInNldHVwIG1hdGNoIGZpbGUgdGVzdCBmb3IgJHRleHQiICcKKwkJZmlsZT0kKGNhdCAuZ2l0L2V4cGVjdGVkX3Rlc3RfZmlsZSkgJiYKKwkJaWYgc2hvdWxkX2NyZWF0ZV90ZXN0X2ZpbGUgIiRmaWxlIgorCQl0aGVuCisJCQlkaXJzPSR7ZmlsZSUvKn0KKwkJCWlmIHRlc3QgIiRmaWxlIiAhPSAiJGRpcnMiCisJCQl0aGVuCisJCQkJbWtkaXIgLXAgLS0gIiRkaXJzIiAmJgorCQkJCXRvdWNoIC0tICIuLyR0ZXh0IgorCQkJZWxzZQorCQkJCXRvdWNoIC0tICIuLyRmaWxlIgorCQkJZmkgJiYKKwkJCWdpdCBhZGQgLUEgJiYKKwkJCXByaW50ZiAiJXMiICIkZmlsZSIgPi5naXQvY3JlYXRlZF90ZXN0X2ZpbGUKKwkJZWxpZiB0ZXN0IC1lIC5naXQvY3JlYXRlZF90ZXN0X2ZpbGUKKwkJdGhlbgorCQkJcm0gLmdpdC9jcmVhdGVkX3Rlc3RfZmlsZQorCQlmaQorCScKKworCSMgJDE6IENhc2Ugc2Vuc2l0aXZlIGdsb2IgbWF0Y2g6IHRlc3QtdG9vbCB3aWxkbWF0Y2ggJiBscy1maWxlcworCW1hdGNoX3dpdGhfZnVuY3Rpb24gIiR0ZXh0IiAiJHBhdHRlcm4iICRtYXRjaF9nbG9iICJ3aWxkbWF0Y2giCisJbWF0Y2hfd2l0aF9sc19maWxlcyAiJHRleHQiICIkcGF0dGVybiIgJG1hdGNoX2ZpbGVfZ2xvYiAid2lsZG1hdGNoIiAiIC0tZ2xvYi1wYXRoc3BlY3MiCisKKwkjICQyOiBDYXNlIGluc2Vuc2l0aXZlIGdsb2IgbWF0Y2g6IHRlc3QtdG9vbCB3aWxkbWF0Y2ggJiBscy1maWxlcworCW1hdGNoX3dpdGhfZnVuY3Rpb24gIiR0ZXh0IiAiJHBhdHRlcm4iICRtYXRjaF9pZ2xvYiAiaXdpbGRtYXRjaCIKKwltYXRjaF93aXRoX2xzX2ZpbGVzICIkdGV4dCIgIiRwYXR0ZXJuIiAkbWF0Y2hfZmlsZV9pZ2xvYiAiaXdpbGRtYXRjaCIgIiAtLWdsb2ItcGF0aHNwZWNzIC0taWNhc2UtcGF0aHNwZWNzIgorCisJIyAkMzogQ2FzZSBzZW5zaXRpdmUgcGF0aCBtYXRjaDogdGVzdC10b29sIHdpbGRtYXRjaCAmIGxzLWZpbGVzCisJbWF0Y2hfd2l0aF9mdW5jdGlvbiAiJHRleHQiICIkcGF0dGVybiIgJG1hdGNoX3BhdGhtYXRjaCAicGF0aG1hdGNoIgorCW1hdGNoX3dpdGhfbHNfZmlsZXMgIiR0ZXh0IiAiJHBhdHRlcm4iICRtYXRjaF9maWxlX3BhdGhtYXRjaCAicGF0aG1hdGNoIiAiIgorCisJIyAkNDogQ2FzZSBpbnNlbnNpdGl2ZSBwYXRoIG1hdGNoOiB0ZXN0LXRvb2wgd2lsZG1hdGNoICYgbHMtZmlsZXMKKwltYXRjaF93aXRoX2Z1bmN0aW9uICIkdGV4dCIgIiRwYXR0ZXJuIiAkbWF0Y2hfcGF0aG1hdGNoaSAiaXBhdGhtYXRjaCIKKwltYXRjaF93aXRoX2xzX2ZpbGVzICIkdGV4dCIgIiRwYXR0ZXJuIiAkbWF0Y2hfZmlsZV9wYXRobWF0Y2hpICJpcGF0aG1hdGNoIiAiIC0taWNhc2UtcGF0aHNwZWNzIgorfQorCisjIEJhc2ljIHdpbGRtYXRjaCBmZWF0dXJlcworbWF0Y2ggMSAxIDEgMSBmb28gZm9vCittYXRjaCAwIDAgMCAwIGZvbyBiYXIKK21hdGNoIDEgMSAxIDEgJycgIiIKK21hdGNoIDEgMSAxIDEgZm9vICc/Pz8nCittYXRjaCAwIDAgMCAwIGZvbyAnPz8nCittYXRjaCAxIDEgMSAxIGZvbyAnKicKK21hdGNoIDEgMSAxIDEgZm9vICdmKicKK21hdGNoIDAgMCAwIDAgZm9vICcqZicKK21hdGNoIDEgMSAxIDEgZm9vICcqZm9vKicKK21hdGNoIDEgMSAxIDEgZm9vYmFyICcqb2IqYSpyKicKK21hdGNoIDEgMSAxIDEgYWFhYWFhYWJhYmFiYWIgJyphYicKK21hdGNoIDEgMSAxIDEgJ2ZvbyonICdmb29cKicKK21hdGNoIDAgMCAwIDAgZm9vYmFyICdmb29cKmJhcicKK21hdGNoIDEgMSAxIDEgJ2Zcb28nICdmXFxvbycKK21hdGNoIDEgMSAxIDEgYmFsbCAnKlthbF0/JworbWF0Y2ggMCAwIDAgMCB0ZW4gJ1t0ZW5dJworbWF0Y2ggMSAxIDEgMSB0ZW4gJyoqWyF0ZV0nCittYXRjaCAwIDAgMCAwIHRlbiAnKipbIXRlbl0nCittYXRjaCAxIDEgMSAxIHRlbiAndFthLWddbicKK21hdGNoIDAgMCAwIDAgdGVuICd0WyFhLWddbicKK21hdGNoIDEgMSAxIDEgdG9uICd0WyFhLWddbicKK21hdGNoIDEgMSAxIDEgdG9uICd0W15hLWddbicKK21hdGNoIDEgMSAxIDEgJ2FdYicgJ2FbXV1iJworbWF0Y2ggMSAxIDEgMSBhLWIgJ2FbXS1dYicKK21hdGNoIDEgMSAxIDEgJ2FdYicgJ2FbXS1dYicKK21hdGNoIDAgMCAwIDAgYWFiICdhW10tXWInCittYXRjaCAxIDEgMSAxIGFhYiAnYVtdYS1dYicKK21hdGNoIDEgMSAxIDEgJ10nICddJworCisjIEV4dGVuZGVkIHNsYXNoLW1hdGNoaW5nIGZlYXR1cmVzCittYXRjaCAwIDAgMSAxICdmb28vYmF6L2JhcicgJ2ZvbypiYXInCittYXRjaCAwIDAgMSAxICdmb28vYmF6L2JhcicgJ2ZvbyoqYmFyJworbWF0Y2ggMSAxIDEgMSAnZm9vYmF6YmFyJyAnZm9vKipiYXInCittYXRjaCAxIDEgMSAxICdmb28vYmF6L2JhcicgJ2Zvby8qKi9iYXInCittYXRjaCAxIDEgMCAwICdmb28vYmF6L2JhcicgJ2Zvby8qKi8qKi9iYXInCittYXRjaCAxIDEgMSAxICdmb28vYi9hL3ovYmFyJyAnZm9vLyoqL2JhcicKK21hdGNoIDEgMSAxIDEgJ2Zvby9iL2Evei9iYXInICdmb28vKiovKiovYmFyJworbWF0Y2ggMSAxIDAgMCAnZm9vL2JhcicgJ2Zvby8qKi9iYXInCittYXRjaCAxIDEgMCAwICdmb28vYmFyJyAnZm9vLyoqLyoqL2JhcicKK21hdGNoIDAgMCAxIDEgJ2Zvby9iYXInICdmb28/YmFyJworbWF0Y2ggMCAwIDEgMSAnZm9vL2JhcicgJ2Zvb1svXWJhcicKK21hdGNoIDAgMCAxIDEgJ2Zvby9iYXInICdmb29bXmEtel1iYXInCittYXRjaCAwIDAgMSAxICdmb28vYmFyJyAnZlteZWl1XVteZWl1XVteZWl1XVteZWl1XVteZWl1XXInCittYXRjaCAxIDEgMSAxICdmb28tYmFyJyAnZlteZWl1XVteZWl1XVteZWl1XVteZWl1XVteZWl1XXInCittYXRjaCAxIDEgMCAwICdmb28nICcqKi9mb28nCittYXRjaCAxIDEgMSAxICdYWFgvZm9vJyAnKiovZm9vJworbWF0Y2ggMSAxIDEgMSAnYmFyL2Jhei9mb28nICcqKi9mb28nCittYXRjaCAwIDAgMSAxICdiYXIvYmF6L2ZvbycgJyovZm9vJworbWF0Y2ggMCAwIDEgMSAnZm9vL2Jhci9iYXonICcqKi9iYXIqJworbWF0Y2ggMSAxIDEgMSAnZGVlcC9mb28vYmFyL2JheicgJyoqL2Jhci8qJworbWF0Y2ggMCAwIDEgMSAnZGVlcC9mb28vYmFyL2Jhei8nICcqKi9iYXIvKicKK21hdGNoIDEgMSAxIDEgJ2RlZXAvZm9vL2Jhci9iYXovJyAnKiovYmFyLyoqJworbWF0Y2ggMCAwIDAgMCAnZGVlcC9mb28vYmFyJyAnKiovYmFyLyonCittYXRjaCAxIDEgMSAxICdkZWVwL2Zvby9iYXIvJyAnKiovYmFyLyoqJworbWF0Y2ggMCAwIDEgMSAnZm9vL2Jhci9iYXonICcqKi9iYXIqKicKK21hdGNoIDEgMSAxIDEgJ2Zvby9iYXIvYmF6L3gnICcqL2Jhci8qKicKK21hdGNoIDAgMCAxIDEgJ2RlZXAvZm9vL2Jhci9iYXoveCcgJyovYmFyLyoqJworbWF0Y2ggMSAxIDEgMSAnZGVlcC9mb28vYmFyL2Jhei94JyAnKiovYmFyLyovKicKKworIyBWYXJpb3VzIGFkZGl0aW9uYWwgdGVzdHMKK21hdGNoIDAgMCAwIDAgJ2FjcnQnICdhW2MtY11zdCcKK21hdGNoIDEgMSAxIDEgJ2FjcnQnICdhW2MtY11ydCcKK21hdGNoIDAgMCAwIDAgJ10nICdbIV0tXScKK21hdGNoIDEgMSAxIDEgJ2EnICdbIV0tXScKK21hdGNoIDAgMCAwIDAgJycgJ1wnCittYXRjaCAwIDAgMCAwIFwKKyAgICAgIDEgMSAxIDEgJ1wnICdcJworbWF0Y2ggMCAwIDAgMCAnWFhYL1wnICcqL1wnCittYXRjaCAxIDEgMSAxICdYWFgvXCcgJyovXFwnCittYXRjaCAxIDEgMSAxICdmb28nICdmb28nCittYXRjaCAxIDEgMSAxICdAZm9vJyAnQGZvbycKK21hdGNoIDAgMCAwIDAgJ2ZvbycgJ0Bmb28nCittYXRjaCAxIDEgMSAxICdbYWJdJyAnXFthYl0nCittYXRjaCAxIDEgMSAxICdbYWJdJyAnW1tdYWJdJworbWF0Y2ggMSAxIDEgMSAnW2FiXScgJ1tbOl1hYl0nCittYXRjaCAwIDAgMCAwICdbYWJdJyAnW1s6Ol1hYl0nCittYXRjaCAxIDEgMSAxICdbYWJdJyAnW1s6ZGlnaXRdYWJdJworbWF0Y2ggMSAxIDEgMSAnW2FiXScgJ1tcWzpdYWJdJworbWF0Y2ggMSAxIDEgMSAnP2E/YicgJ1w/P1w/YicKK21hdGNoIDEgMSAxIDEgJ2FiYycgJ1xhXGJcYycKK21hdGNoIDAgMCAwIDAgXAorICAgICAgRSBFIEUgRSAnZm9vJyAnJworbWF0Y2ggMSAxIDEgMSAnZm9vL2Jhci9iYXovdG8nICcqKi90W29dJworCisjIENoYXJhY3RlciBjbGFzcyB0ZXN0cworbWF0Y2ggMSAxIDEgMSAnYTFCJyAnW1s6YWxwaGE6XV1bWzpkaWdpdDpdXVtbOnVwcGVyOl1dJworbWF0Y2ggMCAxIDAgMSAnYScgJ1tbOmRpZ2l0Ol1bOnVwcGVyOl1bOnNwYWNlOl1dJworbWF0Y2ggMSAxIDEgMSAnQScgJ1tbOmRpZ2l0Ol1bOnVwcGVyOl1bOnNwYWNlOl1dJworbWF0Y2ggMSAxIDEgMSAnMScgJ1tbOmRpZ2l0Ol1bOnVwcGVyOl1bOnNwYWNlOl1dJworbWF0Y2ggMCAwIDAgMCAnMScgJ1tbOmRpZ2l0Ol1bOnVwcGVyOl1bOnNwYWNpOl1dJworbWF0Y2ggMSAxIDEgMSAnICcgJ1tbOmRpZ2l0Ol1bOnVwcGVyOl1bOnNwYWNlOl1dJworbWF0Y2ggMCAwIDAgMCAnLicgJ1tbOmRpZ2l0Ol1bOnVwcGVyOl1bOnNwYWNlOl1dJworbWF0Y2ggMSAxIDEgMSAnLicgJ1tbOmRpZ2l0Ol1bOnB1bmN0Ol1bOnNwYWNlOl1dJworbWF0Y2ggMSAxIDEgMSAnNScgJ1tbOnhkaWdpdDpdXScKK21hdGNoIDEgMSAxIDEgJ2YnICdbWzp4ZGlnaXQ6XV0nCittYXRjaCAxIDEgMSAxICdEJyAnW1s6eGRpZ2l0Ol1dJworbWF0Y2ggMSAxIDEgMSAnXycgJ1tbOmFsbnVtOl1bOmFscGhhOl1bOmJsYW5rOl1bOmNudHJsOl1bOmRpZ2l0Ol1bOmdyYXBoOl1bOmxvd2VyOl1bOnByaW50Ol1bOnB1bmN0Ol1bOnNwYWNlOl1bOnVwcGVyOl1bOnhkaWdpdDpdXScKK21hdGNoIDEgMSAxIDEgJy4nICdbXls6YWxudW06XVs6YWxwaGE6XVs6Ymxhbms6XVs6Y250cmw6XVs6ZGlnaXQ6XVs6bG93ZXI6XVs6c3BhY2U6XVs6dXBwZXI6XVs6eGRpZ2l0Ol1dJworbWF0Y2ggMSAxIDEgMSAnNScgJ1thLWNbOmRpZ2l0Ol14LXpdJworbWF0Y2ggMSAxIDEgMSAnYicgJ1thLWNbOmRpZ2l0Ol14LXpdJworbWF0Y2ggMSAxIDEgMSAneScgJ1thLWNbOmRpZ2l0Ol14LXpdJworbWF0Y2ggMCAwIDAgMCAncScgJ1thLWNbOmRpZ2l0Ol14LXpdJworCisjIEFkZGl0aW9uYWwgdGVzdHMsIGluY2x1ZGluZyBzb21lIG1hbGZvcm1lZCB3aWxkbWF0Y2ggcGF0dGVybnMKK21hdGNoIDEgMSAxIDEgJ10nICdbXFwtXl0nCittYXRjaCAwIDAgMCAwICdbJyAnW1xcLV5dJworbWF0Y2ggMSAxIDEgMSAnLScgJ1tcLV9dJworbWF0Y2ggMSAxIDEgMSAnXScgJ1tcXV0nCittYXRjaCAwIDAgMCAwICdcXScgJ1tcXV0nCittYXRjaCAwIDAgMCAwICdcJyAnW1xdXScKK21hdGNoIDAgMCAwIDAgJ2FiJyAnYVtdYicKK21hdGNoIDAgMCAwIDAgXAorICAgICAgMSAxIDEgMSAnYVtdYicgJ2FbXWInCittYXRjaCAwIDAgMCAwIFwKKyAgICAgIDEgMSAxIDEgJ2FiWycgJ2FiWycKK21hdGNoIDAgMCAwIDAgJ2FiJyAnWyEnCittYXRjaCAwIDAgMCAwICdhYicgJ1stJworbWF0Y2ggMSAxIDEgMSAnLScgJ1stXScKK21hdGNoIDAgMCAwIDAgJy0nICdbYS0nCittYXRjaCAwIDAgMCAwICctJyAnWyFhLScKK21hdGNoIDEgMSAxIDEgJy0nICdbLS1BXScKK21hdGNoIDEgMSAxIDEgJzUnICdbLS1BXScKK21hdGNoIDEgMSAxIDEgJyAnICdbIC0tXScKK21hdGNoIDEgMSAxIDEgJyQnICdbIC0tXScKK21hdGNoIDEgMSAxIDEgJy0nICdbIC0tXScKK21hdGNoIDAgMCAwIDAgJzAnICdbIC0tXScKK21hdGNoIDEgMSAxIDEgJy0nICdbLS0tXScKK21hdGNoIDEgMSAxIDEgJy0nICdbLS0tLS0tXScKK21hdGNoIDAgMCAwIDAgJ2onICdbYS1lLW5dJworbWF0Y2ggMSAxIDEgMSAnLScgJ1thLWUtbl0nCittYXRjaCAxIDEgMSAxICdhJyAnWyEtLS0tLS1dJworbWF0Y2ggMCAwIDAgMCAnWycgJ1tdLWFdJworbWF0Y2ggMSAxIDEgMSAnXicgJ1tdLWFdJworbWF0Y2ggMCAwIDAgMCAnXicgJ1shXS1hXScKK21hdGNoIDEgMSAxIDEgJ1snICdbIV0tYV0nCittYXRjaCAxIDEgMSAxICdeJyAnW2FeYmNdJworbWF0Y2ggMSAxIDEgMSAnLWJdJyAnW2EtXWJdJworbWF0Y2ggMCAwIDAgMCAnXCcgJ1tcXScKK21hdGNoIDEgMSAxIDEgJ1wnICdbXFxdJworbWF0Y2ggMCAwIDAgMCAnXCcgJ1shXFxdJworbWF0Y2ggMSAxIDEgMSAnRycgJ1tBLVxcXScKK21hdGNoIDAgMCAwIDAgJ2FhYWJiYicgJ2IqYScKK21hdGNoIDAgMCAwIDAgJ2FhYmNhYScgJypiYSonCittYXRjaCAxIDEgMSAxICcsJyAnWyxdJworbWF0Y2ggMSAxIDEgMSAnLCcgJ1tcXCxdJworbWF0Y2ggMSAxIDEgMSAnXCcgJ1tcXCxdJworbWF0Y2ggMSAxIDEgMSAnLScgJ1ssLS5dJworbWF0Y2ggMCAwIDAgMCAnKycgJ1ssLS5dJworbWF0Y2ggMCAwIDAgMCAnLS5dJyAnWywtLl0nCittYXRjaCAxIDEgMSAxICcyJyAnW1wxLVwzXScKK21hdGNoIDEgMSAxIDEgJzMnICdbXDEtXDNdJworbWF0Y2ggMCAwIDAgMCAnNCcgJ1tcMS1cM10nCittYXRjaCAxIDEgMSAxICdcJyAnW1stXF1dJworbWF0Y2ggMSAxIDEgMSAnWycgJ1tbLVxdXScKK21hdGNoIDEgMSAxIDEgJ10nICdbWy1cXV0nCittYXRjaCAwIDAgMCAwICctJyAnW1stXF1dJworCisjIFRlc3QgcmVjdXJzaW9uCittYXRjaCAxIDEgMSAxICctYWRvYmUtY291cmllci1ib2xkLW8tbm9ybWFsLS0xMi0xMjAtNzUtNzUtbS03MC1pc284ODU5LTEnICctKi0qLSotKi0qLSotMTItKi0qLSotbS0qLSotKicKK21hdGNoIDAgMCAwIDAgJy1hZG9iZS1jb3VyaWVyLWJvbGQtby1ub3JtYWwtLTEyLTEyMC03NS03NS1YLTcwLWlzbzg4NTktMScgJy0qLSotKi0qLSotKi0xMi0qLSotKi1tLSotKi0qJworbWF0Y2ggMCAwIDAgMCAnLWFkb2JlLWNvdXJpZXItYm9sZC1vLW5vcm1hbC0tMTItMTIwLTc1LTc1LS8tNzAtaXNvODg1OS0xJyAnLSotKi0qLSotKi0qLTEyLSotKi0qLW0tKi0qLSonCittYXRjaCAxIDEgMSAxICdYWFgvYWRvYmUvY291cmllci9ib2xkL28vbm9ybWFsLy8xMi8xMjAvNzUvNzUvbS83MC9pc284ODU5LzEnICdYWFgvKi8qLyovKi8qLyovMTIvKi8qLyovbS8qLyovKicKK21hdGNoIDAgMCAwIDAgJ1hYWC9hZG9iZS9jb3VyaWVyL2JvbGQvby9ub3JtYWwvLzEyLzEyMC83NS83NS9YLzcwL2lzbzg4NTkvMScgJ1hYWC8qLyovKi8qLyovKi8xMi8qLyovKi9tLyovKi8qJworbWF0Y2ggMSAxIDEgMSAnYWJjZC9hYmNkZWZnL2FiY2RlZmdoaWprL2FiY2RlZmdoaWprbG1ub3AudHh0JyAnKiovKmEqYipnKm4qdCcKK21hdGNoIDAgMCAwIDAgJ2FiY2QvYWJjZGVmZy9hYmNkZWZnaGlqay9hYmNkZWZnaGlqa2xtbm9wLnR4dHonICcqKi8qYSpiKmcqbip0JworbWF0Y2ggMCAwIDAgMCBmb28gJyovKi8qJworbWF0Y2ggMCAwIDAgMCBmb28vYmFyICcqLyovKicKK21hdGNoIDEgMSAxIDEgZm9vL2JiYS9hcnIgJyovKi8qJworbWF0Y2ggMCAwIDEgMSBmb28vYmIvYWEvcnIgJyovKi8qJworbWF0Y2ggMSAxIDEgMSBmb28vYmIvYWEvcnIgJyoqLyoqLyoqJworbWF0Y2ggMSAxIDEgMSBhYmNYZGVmWGdoaSAnKlgqaScKK21hdGNoIDAgMCAxIDEgYWIvY1hkL2VmWGcvaGkgJypYKmknCittYXRjaCAxIDEgMSAxIGFiL2NYZC9lZlhnL2hpICcqLypYKi8qLyppJworbWF0Y2ggMSAxIDEgMSBhYi9jWGQvZWZYZy9oaSAnKiovKlgqLyoqLyppJworCisjIEV4dHJhIHBhdGhtYXRjaCB0ZXN0cworbWF0Y2ggMCAwIDAgMCBmb28gZm8KK21hdGNoIDEgMSAxIDEgZm9vL2JhciBmb28vYmFyCittYXRjaCAxIDEgMSAxIGZvby9iYXIgJ2Zvby8qJworbWF0Y2ggMCAwIDEgMSBmb28vYmJhL2FyciAnZm9vLyonCittYXRjaCAxIDEgMSAxIGZvby9iYmEvYXJyICdmb28vKionCittYXRjaCAwIDAgMSAxIGZvby9iYmEvYXJyICdmb28qJworbWF0Y2ggMCAwIDEgMSBcCisgICAgICAxIDEgMSAxIGZvby9iYmEvYXJyICdmb28qKicKK21hdGNoIDAgMCAxIDEgZm9vL2JiYS9hcnIgJ2Zvby8qYXJyJworbWF0Y2ggMCAwIDEgMSBmb28vYmJhL2FyciAnZm9vLyoqYXJyJworbWF0Y2ggMCAwIDAgMCBmb28vYmJhL2FyciAnZm9vLyp6JworbWF0Y2ggMCAwIDAgMCBmb28vYmJhL2FyciAnZm9vLyoqeicKK21hdGNoIDAgMCAxIDEgZm9vL2JhciAnZm9vP2JhcicKK21hdGNoIDAgMCAxIDEgZm9vL2JhciAnZm9vWy9dYmFyJworbWF0Y2ggMCAwIDEgMSBmb28vYmFyICdmb29bXmEtel1iYXInCittYXRjaCAwIDAgMSAxIGFiL2NYZC9lZlhnL2hpICcqWGcqaScKKworIyBFeHRyYSBjYXNlLXNlbnNpdGl2aXR5IHRlc3RzCittYXRjaCAwIDEgMCAxICdhJyAnW0EtWl0nCittYXRjaCAxIDEgMSAxICdBJyAnW0EtWl0nCittYXRjaCAwIDEgMCAxICdBJyAnW2Etel0nCittYXRjaCAxIDEgMSAxICdhJyAnW2Etel0nCittYXRjaCAwIDEgMCAxICdhJyAnW1s6dXBwZXI6XV0nCittYXRjaCAxIDEgMSAxICdBJyAnW1s6dXBwZXI6XV0nCittYXRjaCAwIDEgMCAxICdBJyAnW1s6bG93ZXI6XV0nCittYXRjaCAxIDEgMSAxICdhJyAnW1s6bG93ZXI6XV0nCittYXRjaCAwIDEgMCAxICdBJyAnW0ItWmFdJworbWF0Y2ggMSAxIDEgMSAnYScgJ1tCLVphXScKK21hdGNoIDAgMSAwIDEgJ0EnICdbQi1hXScKK21hdGNoIDEgMSAxIDEgJ2EnICdbQi1hXScKK21hdGNoIDAgMSAwIDEgJ3onICdbWi15XScKK21hdGNoIDEgMSAxIDEgJ1onICdbWi15XScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMThiYWY0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaApAQCAtMCwwICsxLDE2NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtdHJlZSB0ZXN0LgorCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtdHJlZSB3aXRoIHRoZSBmb2xsb3dpbmcgaW4gYSB0cmVlLgorCisgICAgcGF0aDAgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMQktIGEgc3ltbGluaworICAgIHBhdGgyL2ZvbyAgIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDIvYmF6Ym8gLSBhIHN5bWxpbmsgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMi9iYXovYiAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeQorCitUaGUgbmV3IHBhdGggcmVzdHJpY3Rpb24gY29kZSBzaG91bGQgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBwYXRoMiBhbmQKK3BhdGgyL2Jhei4gIEFsc28gcGF0aDAvIHNob3VsZCBzbm93IG5vdGhpbmcuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NldHVwJyBcCisgICAgJ21rZGlyIHBhdGgyIHBhdGgyL2JheiAmJgorICAgICBlY2hvIEhpID5wYXRoMCAmJgorICAgICB0ZXN0X2xuX3NfYWRkIHBhdGgwIHBhdGgxICYmCisgICAgIHRlc3RfbG5fc19hZGQgLi4vcGF0aDEgcGF0aDIvYmF6Ym8gJiYKKyAgICAgZWNobyBMbyA+cGF0aDIvZm9vICYmCisgICAgIGVjaG8gTWkgPnBhdGgyL2Jhei9iICYmCisgICAgIGZpbmQgcGF0aD8gXCggLXR5cGUgZiAtbyAtdHlwZSBsIFwpIC1wcmludCB8CisgICAgIHhhcmdzIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJiYKKyAgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgICBlY2hvICR0cmVlJworCit0ZXN0X291dHB1dCAoKSB7CisgICAgc2VkIC1lICJzLyAkT0lEX1JFR0VYCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sKKyAgICB0ZXN0X2NtcCBleHBlY3RlZCBjaGVjaworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBwbGFpbicgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAlwYXRoMAorMTIwMDAwIGJsb2IgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSByZWN1cnNpdmUnIFwKKyAgICAnZ2l0IGxzLXRyZWUgLXIgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJcGF0aDAKKzEyMDAwMCBibG9iIFgJcGF0aDEKKzEwMDY0NCBibG9iIFgJcGF0aDIvYmF6L2IKKzEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KKzEwMDY0NCBibG9iIFgJcGF0aDIvZm9vCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIHJlY3Vyc2l2ZSB3aXRoIC10JyBcCisgICAgJ2dpdCBscy10cmVlIC1yIC10ICR0cmVlID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCXBhdGgwCisxMjAwMDAgYmxvYiBYCXBhdGgxCiswNDAwMDAgdHJlZSBYCXBhdGgyCiswNDAwMDAgdHJlZSBYCXBhdGgyL2JhegorMTAwNjQ0IGJsb2IgWAlwYXRoMi9iYXovYgorMTIwMDAwIGJsb2IgWAlwYXRoMi9iYXpibworMTAwNjQ0IGJsb2IgWAlwYXRoMi9mb28KK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgcmVjdXJzaXZlIHdpdGggLWQnIFwKKyAgICAnZ2l0IGxzLXRyZWUgLXIgLWQgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aCcgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKKworIyBpdCB1c2VkIHRvIGJlIHBhdGgxIGFuZCB0aGVuIHBhdGgwLCBidXQgd2l0aCBwYXRoc3BlYyBzZW1hbnRpY3MKKyMgdGhleSBhcmUgc2hvd24gaW4gY2Fub25pY2FsIG9yZGVyLgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMSBwYXRoMCcgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMSBwYXRoMCA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAlwYXRoMAorMTIwMDAwIGJsb2IgWAlwYXRoMQorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgwLycgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMC8gPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKworIyBJdCB1c2VkIHRvIHNob3cgcGF0aDIgYW5kIGl0cyBpbW1lZGlhdGUgY2hpbGRyZW4gYnV0CisjIHdpdGggcGF0aHNwZWMgc2VtYW50aWNzIGl0IHNob3dzIG9ubHkgcGF0aDIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aDInIFwKKyAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDIgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKworIyAuLi4gYW5kIHBhdGgyLyBzaG93cyB0aGUgY2hpbGRyZW4uCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyLycgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi8gPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CisxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCisxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbworRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCisjIFRoZSBzYW1lIGNoYW5nZSAtLSBleGFjdCBtYXRjaCBkb2VzIG5vdCBzaG93IGNoaWxkcmVuIG9mCisjIHBhdGgyL2JhegordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMi9iYXonIFwKKyAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDIvYmF6ID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiswNDAwMDAgdHJlZSBYCXBhdGgyL2JhegorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyL2JhaycgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi9iYWsgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgLXQgZmlsdGVyZWQgd2l0aCBwYXRoMi9iYWsnIFwKKyAgICAnZ2l0IGxzLXRyZWUgLXQgJHRyZWUgcGF0aDIvYmFrID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiswNDAwMDAgdHJlZSBYCXBhdGgyCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIHdpdGggb25lIHBhdGggYSBwcmVmaXggb2YgdGhlIG90aGVyJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgyL2JheiBwYXRoMi9iYXpibyA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMi9iYXoKKzEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaCBiL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEyYmYzMTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaApAQCAtMCwwICsxLDIyOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIyBDb3B5cmlnaHQgKGMpIDIwMDUgUm9iZXJ0IEZpdHpzaW1vbnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLXRyZWUgZGlyZWN0b3J5IGFuZCBmaWxlbmFtZXMgaGFuZGxpbmcuCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy10cmVlIHdpdGggdGhlIGZvbGxvd2luZyBpbiBhIHRyZWUuCisKKyAgICAxLnR4dCAgICAgICAgICAgICAgLSBhIGZpbGUKKyAgICAyLnR4dCAgICAgICAgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMC9hL2IvYy8xLnR4dCAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMS9iL2MvMS50eHQgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMi8xLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy8xLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy8yLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKworVGVzdCB0aGUgaGFuZGxpbmcgb2YgbXVsdGlwbGUgZGlyZWN0b3JpZXMgd2hpY2ggaGF2ZSBtYXRjaGluZyBmaWxlCitlbnRyaWVzLiAgQWxzbyB0ZXN0IG9kZCBmaWxlbmFtZSBhbmQgbWlzc2luZyBlbnRyaWVzIGhhbmRsaW5nLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAxMTEgPjEudHh0ICYmCisJZWNobyAyMjIgPjIudHh0ICYmCisJbWtkaXIgcGF0aDAgcGF0aDAvYSBwYXRoMC9hL2IgcGF0aDAvYS9iL2MgJiYKKwllY2hvIDExMSA+cGF0aDAvYS9iL2MvMS50eHQgJiYKKwlta2RpciBwYXRoMSBwYXRoMS9iIHBhdGgxL2IvYyAmJgorCWVjaG8gMTExID5wYXRoMS9iL2MvMS50eHQgJiYKKwlta2RpciBwYXRoMiAmJgorCWVjaG8gMTExID5wYXRoMi8xLnR4dCAmJgorCW1rZGlyIHBhdGgzICYmCisJZWNobyAxMTEgPnBhdGgzLzEudHh0ICYmCisJZWNobyAyMjIgPnBhdGgzLzIudHh0ICYmCisJZmluZCAqLnR4dCBwYXRoKiBcKCAtdHlwZSBmIC1vIC10eXBlIGwgXCkgLXByaW50IHwKKwl4YXJncyBnaXQgdXBkYXRlLWluZGV4IC0tYWRkICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWVjaG8gJHRyZWUKKycKKwordGVzdF9vdXRwdXQgKCkgeworCXNlZCAtZSAicy8gJE9JRF9SRUdFWAkvIFgJLyIgPGN1cnJlbnQgPmNoZWNrICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBwbGFpbicgJworCWdpdCBscy10cmVlICR0cmVlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDAKKzA0MDAwMCB0cmVlIFgJcGF0aDEKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKKyMgUmVjdXJzaXZlIGRvZXMgbm90IHNob3cgdHJlZSBub2RlcyBhbnltb3JlLi4uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHJlY3Vyc2l2ZScgJworCWdpdCBscy10cmVlIC1yICR0cmVlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMi50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDAvYS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDEvYi9jLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgyLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgzLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgzLzIudHh0CitFT0YKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciAxLnR4dCcgJworCWdpdCBscy10cmVlICR0cmVlIDEudHh0ID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIHBhdGgxL2IvYy8xLnR4dCcgJworCWdpdCBscy10cmVlICR0cmVlIHBhdGgxL2IvYy8xLnR4dCA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBmaWx0ZXIgYWxsIDEudHh0IGZpbGVzJyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgMS50eHQgcGF0aDAvYS9iL2MvMS50eHQgXAorCQlwYXRoMS9iL2MvMS50eHQgcGF0aDIvMS50eHQgcGF0aDMvMS50eHQgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMC9hL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDIvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKKyMgSSBhbSBub3Qgc28gc3VyZSBhYm91dCB0aGlzIG9uZSBhZnRlciBscy10cmVlIGRvaW5nIHBhdGhzcGVjIG1hdGNoLgorIyBIYXZpbmcgYm90aCBwYXRoMC9hIGFuZCBwYXRoMC9hL2IvYyBtYWtlcyBwYXRoMC9hIHJlZHVuZGFudCwgYW5kCisjIGl0IGJlaGF2ZXMgYXMgaWYgcGF0aDAvYS9iL2MsIHBhdGgxL2IvYywgcGF0aDIgYW5kIHBhdGgzIGFyZSBzcGVjaWZpZWQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciBkaXJlY3RvcmllcycgJworCWdpdCBscy10cmVlICR0cmVlIHBhdGgzIHBhdGgyIHBhdGgwL2EvYi9jIHBhdGgxL2IvYyBwYXRoMC9hID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDAvYS9iL2MKKzA0MDAwMCB0cmVlIFgJcGF0aDEvYi9jCiswNDAwMDAgdHJlZSBYCXBhdGgyCiswNDAwMDAgdHJlZSBYCXBhdGgzCitFT0YKKwl0ZXN0X291dHB1dAorJworCisjIEFnYWluLCBkdXBsaWNhdGVzIGFyZSBmaWx0ZXJlZCBhd2F5IHNvIHRoaXMgaXMgZXF1aXZhbGVudCB0bworIyBoYXZpbmcgMS50eHQgYW5kIHBhdGgzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciBvZGQgbmFtZXMnICcKKwlnaXQgbHMtdHJlZSAkdHJlZSAxLnR4dCAuLzEudHh0IC4vLzEudHh0IFwKKwkJcGF0aDMvMS50eHQgcGF0aDMvLi8xLnR4dCBwYXRoMyBwYXRoMy8vID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIG1pc3NpbmcgZmlsZXMgYW5kIGV4dHJhIHNsYXNoZXMnICcKKwlnaXQgbHMtdHJlZSAkdHJlZSAxLnR4dC8gYWJjLnR4dCBcCisJCXBhdGgzLy8yMy50eHQgcGF0aDMvMi50eHQvLy8gPmN1cnJlbnQgJiYKKwk+ZXhwZWN0ZWQgJiYKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciBpcyBsZWFkaW5nIHBhdGggbWF0Y2gnICcKKwlnaXQgbHMtdHJlZSAkdHJlZSBwYSBwYXRoMy9hID5jdXJyZW50ICYmCisJPmV4cGVjdGVkICYmCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLWZ1bGwtbmFtZScgJworCSgKKwkJY2QgcGF0aDAgJiYKKwkJZ2l0IGxzLXRyZWUgLS1mdWxsLW5hbWUgJHRyZWUgYQorCSkgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMC9hCitFT0YKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIC0tZnVsbC10cmVlJyAnCisJKAorCQljZCBwYXRoMS9iL2MgJiYKKwkJZ2l0IGxzLXRyZWUgLS1mdWxsLXRyZWUgJHRyZWUKKwkpID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDAKKzA0MDAwMCB0cmVlIFgJcGF0aDEKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1mdWxsLXRyZWUgLXInICcKKwkoCisJCWNkIHBhdGgzLyAmJgorCQlnaXQgbHMtdHJlZSAtLWZ1bGwtdHJlZSAtciAkdHJlZQorCSkgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMC9hL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDIvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1hYmJyZXY9NScgJworCWdpdCBscy10cmVlIC0tYWJicmV2PTUgJHRyZWUgPmN1cnJlbnQgJiYKKwlzZWQgLWUgInMvICRfeDA1WzAtOWEtZl0qCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMAorMDQwMDAwIHRyZWUgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLW5hbWUtb25seScgJworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5ICR0cmVlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEudHh0CisyLnR4dAorcGF0aDAKK3BhdGgxCitwYXRoMgorcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1uYW1lLW9ubHkgLXInICcKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSAtciAkdHJlZSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxLnR4dAorMi50eHQKK3BhdGgwL2EvYi9jLzEudHh0CitwYXRoMS9iL2MvMS50eHQKK3BhdGgyLzEudHh0CitwYXRoMy8xLnR4dAorcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzEwMi1scy10cmVlLXdpbGRjYXJkcy5zaCBiL3QvdDMxMDItbHMtdHJlZS13aWxkY2FyZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWUxNmM2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMxMDItbHMtdHJlZS13aWxkY2FyZHMuc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2xzLXRyZWUgd2l0aChvdXQpIGdsb2JzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBhIGFhICJhW2FdIiAmJgorCXRvdWNoIGEvb25lIGFhL3R3byAiYVthXS90aHJlZSIgJiYKKwlnaXQgYWRkIGEvb25lIGFhL3R3byAiYVthXS90aHJlZSIgJiYKKwlnaXQgY29tbWl0IC1tIHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBhW2FdIG1hdGNoZXMgbGl0ZXJhbGx5JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTAwNjQ0IGJsb2IgJEVNUFRZX0JMT0IJYVthXS90aHJlZQorCUVPRgorCWdpdCBscy10cmVlIC1yIEhFQUQgImFbYV0iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgb3V0c2lkZSBwcmVmaXgnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkRU1QVFlfQkxPQgkuLi9hW2FdL3RocmVlCisJRU9GCisJKCBjZCBhYSAmJiBnaXQgbHMtdHJlZSAtciBIRUFEICIuLi9hW2FdIiApID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2xzLXRyZWUgZG9lcyBub3QgeWV0IHN1cHBvcnQgbmVnYXRlZCBwYXRoc3BlYycgJworCWdpdCBscy1maWxlcyAiOihleGNsdWRlKWEiICJhKiIgPmV4cGVjdCAmJgorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yIEhFQUQgIjooZXhjbHVkZSlhIiAiYSoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzEwMy1scy10cmVlLW1pc2Muc2ggYi90L3QzMTAzLWxzLXRyZWUtbWlzYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNDUyMDkxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzEwMy1scy10cmVlLW1pc2Muc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249JworTWlzY2VsbGFuZW91cyB0ZXN0cyBmb3IgZ2l0IGxzLXRyZWUuCisKKwkgICAgICAxLiBnaXQgbHMtdHJlZSBmYWlscyBpbiBwcmVzZW5jZSBvZiB0cmVlIGRhbWFnZS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBhICYmCisJdG91Y2ggYS9vbmUgJiYKKwlnaXQgYWRkIGEvb25lICYmCisJZ2l0IGNvbW1pdCAtbSB0ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmFpbHMgd2l0aCBub24temVybyBleGl0IGNvZGUgb24gYnJva2VuIHRyZWUnICcKKwl0cmVlPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmEpICYmCisJcm0gLWYgLmdpdC9vYmplY3RzLyQoZWNobyAkdHJlZSB8IHNlZCAtZSAicyxeXCguLlwpLFwxLywiKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy10cmVlIC1yIEhFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAwLWJyYW5jaC5zaCBiL3QvdDMyMDAtYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxMWE3MGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjAwLWJyYW5jaC5zaApAQCAtMCwwICsxLDEzOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgQW1vcyBXYXRlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJyYW5jaCBhc3NvcnRlZCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBhIHRyaXZpYWwgcmVwb3NpdG9yeScgJworCWVjaG8gSGVsbG8gPkEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEEgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdC4iICYmCisJZWNobyBXb3JsZCA+PkEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEEgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQgY29tbWl0LiIgJiYKKwlIRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0taGVscCBzaG91bGQgbm90IGhhdmUgY3JlYXRlZCBhIGJvZ3VzIGJyYW5jaCcgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC0tbWFuIC0taGVscCA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy8tLWhlbHAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1oIGluIGJyb2tlbiByZXBvc2l0b3J5JyAnCisJbWtkaXIgYnJva2VuICYmCisJKAorCQljZCBicm9rZW4gJiYKKwkJZ2l0IGluaXQgJiYKKwkJPi5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGJyYW5jaCAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggYWJjIHNob3VsZCBjcmVhdGUgYSBicmFuY2gnICcKKwlnaXQgYnJhbmNoIGFiYyAmJiB0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvYWJjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggYS9iL2Mgc2hvdWxkIGNyZWF0ZSBhIGJyYW5jaCcgJworCWdpdCBicmFuY2ggYS9iL2MgJiYgdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2EvYi9jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggbWIgbWFzdGVyLi4uIHNob3VsZCBjcmVhdGUgYSBicmFuY2gnICcKKwlnaXQgYnJhbmNoIG1iIG1hc3Rlci4uLiAmJiB0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvbWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBIRUFEIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBIRUFECisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskWkVST19PSUQgJEhFQUQgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAyMDAgKzAwMDAJYnJhbmNoOiBDcmVhdGVkIGZyb20gbWFzdGVyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIGQvZS9mIHNob3VsZCBjcmVhdGUgYSBicmFuY2ggYW5kIGEgbG9nJyAnCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisJZ2l0IC1jIGNvcmUubG9nYWxscmVmdXBkYXRlcz1mYWxzZSBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIGQvZS9mICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2QvZS9mICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvZC9lL2YgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9sb2dzL3JlZnMvaGVhZHMvZC9lL2YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtZCBkL2UvZiBzaG91bGQgZGVsZXRlIGEgYnJhbmNoIGFuZCBhIGxvZycgJworCWdpdCBicmFuY2ggLWQgZC9lL2YgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvZC9lL2YgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2QvZS9mCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggai9rIHNob3VsZCB3b3JrIGFmdGVyIGJyYW5jaCBqIGhhcyBiZWVuIGRlbGV0ZWQnICcKKwlnaXQgYnJhbmNoIGogJiYKKwlnaXQgYnJhbmNoIC1kIGogJiYKKwlnaXQgYnJhbmNoIGovaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGwgc2hvdWxkIHdvcmsgYWZ0ZXIgYnJhbmNoIGwvbSBoYXMgYmVlbiBkZWxldGVkJyAnCisJZ2l0IGJyYW5jaCBsL20gJiYKKwlnaXQgYnJhbmNoIC1kIGwvbSAmJgorCWdpdCBicmFuY2ggbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIGR1bXBzIHVzYWdlJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGJyYW5jaCAtbSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImJyYW5jaCBuYW1lIHJlcXVpcmVkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBtIGJyb2tlbl9zeW1yZWYgc2hvdWxkIHdvcmsnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgYnJva2VuX3N5bXJlZiIgJiYKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBtICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL2Jyb2tlbl9zeW1yZWYgcmVmcy9oZWFkcy9pX2FtX2Jyb2tlbiAmJgorCWdpdCBicmFuY2ggLW0gbSBicm9rZW5fc3ltcmVmICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9icm9rZW5fc3ltcmVmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9pX2FtX2Jyb2tlbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIG0gbS9tIHNob3VsZCB3b3JrJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgbSAmJgorCWdpdCBicmFuY2ggLW0gbSBtL20gJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL20vbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIG4vbiBuIHNob3VsZCB3b3JrJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgbi9uICYmCisJZ2l0IGJyYW5jaCAtbSBuL24gbiAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvbgorJworCisjIFRoZSB0b3Btb3N0IGVudHJ5IGluIHJlZmxvZyBmb3IgYnJhbmNoIGJiYiBpcyBhYm91dCBicmFuY2ggY3JlYXRpb24uCisjIEhlbmNlLCB3ZSBjb21wYXJlIGJiYkB7MX0gKGluc3RlYWQgb2YgYmJiQHswfSkgd2l0aCBhYWFAezB9LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIGJiYiBzaG91bGQgcmVuYW1lIGNoZWNrZWQgb3V0IGJyYW5jaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIGJiYiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFhYSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiYSBuZXcgY29tbWl0IiAmJgorCWdpdCByZXYtcGFyc2UgYWFhQHswfSA+ZXhwZWN0ICYmCisJZ2l0IGJyYW5jaCAtbSBiYmIgJiYKKwlnaXQgcmV2LXBhcnNlIGJiYkB7MX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCWVjaG8gcmVmcy9oZWFkcy9iYmIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1pbmcgY2hlY2tlZCBvdXQgYnJhbmNoIHdvcmtzIHdpdGggZC9mIGNvbmZsaWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIGZvby9iYXIgfHwgZ2l0IGJyYW5jaCAtRCBmb28iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9vICYmCisJZ2l0IGJyYW5jaCAtbSBmb28vYmFyICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwllY2hvIHJlZnMvaGVhZHMvZm9vL2JhciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIG8vbyBvIHNob3VsZCBmYWlsIHdoZW4gby9wIGV4aXN0cycgJworCWdpdCBicmFuY2ggby9vICYmCisJZ2l0IGJyYW5jaCBvL3AgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tIG8vbyBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gby9xIG8vcCBzaG91bGQgZmFpbCB3aGVuIG8vcCBleGlzdHMnICcKKwlnaXQgYnJhbmNoIG8vcSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gby9xIG8vcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIG8vcSBvL3Agc2hvdWxkIHdvcmsgd2hlbiBvL3AgZXhpc3RzJyAnCisJZ2l0IGJyYW5jaCAtTSBvL3Egby9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gLWYgby9xIG8vcCBzaG91bGQgd29yayB3aGVuIG8vcCBleGlzdHMnICcKKwlnaXQgYnJhbmNoIG8vcSAmJgorCWdpdCBicmFuY2ggLW0gLWYgby9xIG8vcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIHEgci9xIHNob3VsZCBmYWlsIHdoZW4gciBleGlzdHMnICcKKwlnaXQgYnJhbmNoIHEgJiYKKwlnaXQgYnJhbmNoIHIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tIHEgci9xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gZm9vIGJhciBzaG91bGQgZmFpbCB3aGVuIGJhciBpcyBjaGVja2VkIG91dCcgJworCWdpdCBicmFuY2ggYmFyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLU0gYmFyIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIGJheiBiYW0gc2hvdWxkIHN1Y2NlZWQgd2hlbiBiYXogaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgLWIgYmF6ICYmCisJZ2l0IGJyYW5jaCBiYW0gJiYKKwlnaXQgYnJhbmNoIC1NIGJheiBiYW0gJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAtLWFiYnJldi1yZWYgSEVBRCkgPSBiYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBiYXogYmFtIHNob3VsZCBhZGQgZW50cmllcyB0byAuZ2l0L2xvZ3MvSEVBRCcgJworCW1zZz0iQnJhbmNoOiByZW5hbWVkIHJlZnMvaGVhZHMvYmF6IHRvIHJlZnMvaGVhZHMvYmFtIiAmJgorCWdyZXAgIiAwXHs0MFx9LiokbXNnJCIgLmdpdC9sb2dzL0hFQUQgJiYKKwlncmVwICJeMFx7NDBcfS4qJG1zZyQiIC5naXQvbG9ncy9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gc2hvdWxkIGxlYXZlIG9ycGhhbmVkIEhFQUQgYWxvbmUnICcKKwlnaXQgaW5pdCBvcnBoYW4gJiYKKwkoCisJCWNkIG9ycGhhbiAmJgorCQl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiBsb25lbHkgJiYKKwkJZ3JlcCBsb25lbHkgLmdpdC9IRUFEICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkL2xvbmVseSAmJgorCQlnaXQgYnJhbmNoIC1NIG1hc3RlciBtaXN0cmVzcyAmJgorCQlncmVwIGxvbmVseSAuZ2l0L0hFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3VsdGluZyByZWZsb2cgY2FuIGJlIHNob3duIGJ5IGxvZyAtZycgJworCW9pZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlIRUFEQHswfSAkb2lkICRtc2cKKwlIRUFEQHsyfSAkb2lkIGNoZWNrb3V0OiBtb3ZpbmcgZnJvbSBmb28gdG8gYmF6CisJRU9GCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVIICVncyIgLTIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIGJheiBiYW0gc2hvdWxkIHN1Y2NlZWQgd2hlbiBiYXogaXMgY2hlY2tlZCBvdXQgYXMgbGlua2VkIHdvcmtpbmcgdHJlZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC1iIGJheiBiYXpkaXIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC1mIGJhemRpcjIgYmF6ICYmCisJZ2l0IGJyYW5jaCAtTSBiYXogYmFtICYmCisJdGVzdCAkKGdpdCAtQyBiYXpkaXIgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSA9IGJhbSAmJgorCXRlc3QgJChnaXQgLUMgYmF6ZGlyMiByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpID0gYmFtICYmCisJcm0gLXIgYmF6ZGlyIGJhemRpcjIgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBiYXogYmFtIHNob3VsZCBzdWNjZWVkIHdpdGhpbiBhIHdvcmt0cmVlIGluIHdoaWNoIGJheiBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCAtYiBiYXogJiYKKwlnaXQgd29ya3RyZWUgYWRkIC1mIGJhemRpciBiYXogJiYKKwkoCisJCWNkIGJhemRpciAmJgorCQlnaXQgYnJhbmNoIC1NIGJheiBiYW0gJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpID0gYmFtCisJKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSA9IGJhbSAmJgorCXJtIC1yIGJhemRpciAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIG1hc3RlciBzaG91bGQgd29yayB3aGVuIG1hc3RlciBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1NIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIG1hc3RlciBtYXN0ZXIgc2hvdWxkIHdvcmsgd2hlbiBtYXN0ZXIgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtTSBtYXN0ZXIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gbWFzdGVyMiBtYXN0ZXIyIHNob3VsZCB3b3JrIHdoZW4gbWFzdGVyIGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggbWFzdGVyMiAmJgorCWdpdCBicmFuY2ggLU0gbWFzdGVyMiBtYXN0ZXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgLWQgdCBzaG91bGQgd29yaycgJworCWdpdCBicmFuY2ggdCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy90ICYmCisJZ2l0IGJyYW5jaCAtdiAtZCB0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtdiAtbSB0IHMgc2hvdWxkIHdvcmsnICcKKwlnaXQgYnJhbmNoIHQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvdCAmJgorCWdpdCBicmFuY2ggLXYgLW0gdCBzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcyAmJgorCWdpdCBicmFuY2ggLWQgcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIC1kIHQgcyBzaG91bGQgZmFpbCcgJworCWdpdCBicmFuY2ggdCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy90ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSAtZCB0IHMgJiYKKwlnaXQgYnJhbmNoIC1kIHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tbGlzdCAtZCB0IHNob3VsZCBmYWlsJyAnCisJZ2l0IGJyYW5jaCB0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tbGlzdCAtZCB0ICYmCisJZ2l0IGJyYW5jaCAtZCB0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgY2hlY2tlZC1vdXQgYnJhbmNoIGZyb20gcmVwbyB0aGF0IGlzIGEgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcmVwbzEgcmVwbzIiICYmCisKKwlnaXQgaW5pdCByZXBvMSAmJgorCWdpdCBpbml0IHJlcG8xL3N1YiAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8xL3N1YiB4ICYmCisJZ2l0IC1DIHJlcG8xIHN1Ym1vZHVsZSBhZGQgLi9zdWIgJiYKKwlnaXQgLUMgcmVwbzEgY29tbWl0IC1tICJhZGRpbmcgc3ViIiAmJgorCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHJlcG8xIHJlcG8yICYmCisJZ2l0IC1DIHJlcG8yL3N1YiBjaGVja291dCAtYiB3b3JrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHJlcG8yL3N1YiBicmFuY2ggLUQgd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIG1haW4gd29ya3RyZWUgaGFzIEhFQUQgYXQgYnJhbmNoIGRlbGV0ZWQgYnkgc2Vjb25kYXJ5IHdvcmt0cmVlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbm9uYmFyZSBiYXNlIHNlY29uZGFyeSIgJiYKKworCWdpdCBpbml0IG5vbmJhcmUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBub25iYXJlIHggJiYKKwlnaXQgY2xvbmUgLS1iYXJlIG5vbmJhcmUgYmFyZSAmJgorCWdpdCAtQyBiYXJlIHdvcmt0cmVlIGFkZCAtLWRldGFjaCAuLi9zZWNvbmRhcnkgbWFzdGVyICYmCisJZ2l0IC1DIHNlY29uZGFyeSBicmFuY2ggLUQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1saXN0IC12IHdpdGggLS1hYmJyZXYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgdCIgJiYKKwlnaXQgYnJhbmNoIHQgJiYKKwlnaXQgYnJhbmNoIC12IC0tbGlzdCB0ID5hY3R1YWwuZGVmYXVsdCAmJgorCWdpdCBicmFuY2ggLXYgLS1saXN0IC0tYWJicmV2IHQgPmFjdHVhbC5hYmJyZXYgJiYKKwl0ZXN0X2NtcCBhY3R1YWwuZGVmYXVsdCBhY3R1YWwuYWJicmV2ICYmCisKKwlnaXQgYnJhbmNoIC12IC0tbGlzdCAtLW5vLWFiYnJldiB0ID5hY3R1YWwubm9hYmJyZXYgJiYKKwlnaXQgYnJhbmNoIC12IC0tbGlzdCAtLWFiYnJldj0wIHQgPmFjdHVhbC4wYWJicmV2ICYmCisJdGVzdF9jbXAgYWN0dWFsLm5vYWJicmV2IGFjdHVhbC4wYWJicmV2ICYmCisKKwlnaXQgYnJhbmNoIC12IC0tbGlzdCAtLWFiYnJldj0zNiB0ID5hY3R1YWwuMzZhYmJyZXYgJiYKKwkjIGhvdyBtYW55IGhleGRpZ2l0cyBhcmUgdXNlZD8KKwlyZWFkIG5hbWUgb2JqZGVmYXVsdCByZXN0IDxhY3R1YWwuYWJicmV2ICYmCisJcmVhZCBuYW1lIG9iajM2IHJlc3QgPGFjdHVhbC4zNmFiYnJldiAmJgorCW9iamZ1bGw9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHQpICYmCisKKwkjIGFyZSB3ZSByZWFsbHkgZ2V0dGluZyBhYmJyZXZpYXRpb25zPworCXRlc3QgIiRvYmozNiIgIT0gIiRvYmpkZWZhdWx0IiAmJgorCWV4cHIgIiRvYmozNiIgOiAiJG9iamRlZmF1bHQiID4vZGV2L251bGwgJiYKKwl0ZXN0ICIkb2JqZnVsbCIgIT0gIiRvYmozNiIgJiYKKwlleHByICIkb2JqZnVsbCIgOiAiJG9iajM2IiA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWNvbHVtbicgJworCUNPTFVNTlM9ODEgZ2l0IGJyYW5jaCAtLWNvbHVtbj1jb2x1bW4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgIGEvYi9jICAgICBiYW0gICAgICAgZm9vICAgICAgIGwgICAgICAgKiBtYXN0ZXIgICAgbWIgICAgICAgIG8vbyAgICAgICBxCisgIGFiYyAgICAgICBiYXIgICAgICAgai9rICAgICAgIG0vbSAgICAgICBtYXN0ZXIyICAgbiAgICAgICAgIG8vcCAgICAgICByCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWNvbHVtbiB3aXRoIGFuIGV4dHJlbWVseSBsb25nIGJyYW5jaCBuYW1lJyAnCisJbG9uZz10aGlzL2lzL2EvcGFydC9vZi9sb25nL2JyYW5jaC9uYW1lICYmCisJbG9uZz16JGxvbmcvJGxvbmcvJGxvbmcvJGxvbmcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLWQgJGxvbmciICYmCisJZ2l0IGJyYW5jaCAkbG9uZyAmJgorCUNPTFVNTlM9ODAgZ2l0IGJyYW5jaCAtLWNvbHVtbj1jb2x1bW4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKKyAgYS9iL2MKKyAgYWJjCisgIGJhbQorICBiYXIKKyAgZm9vCisgIGovaworICBsCisgIG0vbQorKiBtYXN0ZXIKKyAgbWFzdGVyMgorICBtYgorICBuCisgIG8vbworICBvL3AKKyAgcQorICByCisgICRsb25nCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCB3aXRoIGNvbHVtbi4qJyAnCisJZ2l0IGNvbmZpZyBjb2x1bW4udWkgY29sdW1uICYmCisJZ2l0IGNvbmZpZyBjb2x1bW4uYnJhbmNoICJkZW5zZSIgJiYKKwlDT0xVTU5TPTgwIGdpdCBicmFuY2ggPmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb2x1bW4uYnJhbmNoICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbHVtbi51aSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgIGEvYi9jICAgYmFtICAgZm9vICAgbCAgICogbWFzdGVyICAgIG1iICAgby9vICAgcQorICBhYmMgICAgIGJhciAgIGovayAgIG0vbSAgIG1hc3RlcjIgICBuICAgIG8vcCAgIHIKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tY29sdW1uIC12IHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLWNvbHVtbiAtdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC12IHdpdGggY29sdW1uLnVpIGlnbm9yZWQnICcKKwlnaXQgY29uZmlnIGNvbHVtbi51aSBjb2x1bW4gJiYKKwlDT0xVTU5TPTgwIGdpdCBicmFuY2ggLXYgfCBjdXQgLWMgLTEwIHwgc2VkICJzLyAqJC8vIiA+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbHVtbi51aSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgIGEvYi9jCisgIGFiYworICBiYW0KKyAgYmFyCisgIGZvbworICBqL2sKKyAgbAorICBtL20KKyogbWFzdGVyCisgIG1hc3RlcjIKKyAgbWIKKyAgbgorICBvL28KKyAgby9wCisgIHEKKyAgcgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK212IC5naXQvY29uZmlnIC5naXQvY29uZmlnLXNhdmVkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gcSBxMiB3aXRob3V0IGNvbmZpZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCBicmFuY2ggLW0gcSBxMiAmJgorCWdpdCBicmFuY2ggLW0gcTIgcQorJworCittdiAuZ2l0L2NvbmZpZy1zYXZlZCAuZ2l0L2NvbmZpZworCitnaXQgY29uZmlnIGJyYW5jaC5zL3MuZHVtbXkgSGVsbG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBzL3MgcyBzaG91bGQgd29yayB3aGVuIHMvdCBpcyBkZWxldGVkJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgcy9zICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9zL3MgJiYKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBzL3QgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL3MvdCAmJgorCWdpdCBicmFuY2ggLWQgcy90ICYmCisJZ2l0IGJyYW5jaCAtbSBzL3MgcyAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgaW5mb3JtYXRpb24gd2FzIHJlbmFtZWQsIHRvbycgJworCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5zLmR1bW15KSA9IEhlbGxvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gucy9zLmR1bW15CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gY29ycmVjdGx5IHJlbmFtZXMgbXVsdGlwbGUgY29uZmlnIHNlY3Rpb25zJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBzb3VyY2UgbWFzdGVyICYmCisKKwkjIEFzc2VydCB0aGF0IGEgY29uZmlnIGZpbGUgd2l0aCBtdWx0aXBsZSBjb25maWcgc2VjdGlvbnMgaGFzCisJIyB0aG9zZSBzZWN0aW9ucyBwcmVzZXJ2ZWQuLi4KKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYnJhbmNoLmRlc3Qua2V5MT12YWx1ZTEKKwlzb21lLmdhci5iPWFnZQorCWJyYW5jaC5kZXN0LmtleTI9dmFsdWUyCisJRU9GCisJY2F0ID5jb25maWcuYnJhbmNoIDw8XEVPRiAmJgorOzsgTm90ZSB0aGUgbGFjayBvZiAtXEVPRiBhYm92ZSAmIG1peGVkIGluZGVudGluZyBoZXJlLiBUaGlzIGlzCis7OyBpbnRlbnRpb25hbCwgd2UgYXJlIGFsc28gdGVzdGluZyB0aGF0IHRoZSBmb3JtYXR0aW5nIG9mIGNvcGllZAorOzsgc2VjdGlvbnMgaXMgcHJlc2VydmVkLgorCis7OyBDb21tZW50IGZvciBzb3VyY2UuIFRhYnMKK1ticmFuY2ggInNvdXJjZSJdCisJOzsgQ29tbWVudCBmb3IgdGhlIHNvdXJjZSB2YWx1ZQorCWtleTEgPSB2YWx1ZTEKKzs7IENvbW1lbnQgZm9yIHNvbWUuZ2FyLiBTcGFjZXMKK1tzb21lICJnYXIiXQorICAgIDs7IENvbW1lbnQgZm9yIHRoZSBzb21lLmdhciB2YWx1ZQorICAgIGIgPSBhZ2UKKzs7IENvbW1lbnQgZm9yIHNvdXJjZSwgYWdhaW4uIE1peGVkIHRhYnMvc3BhY2VzLgorW2JyYW5jaCAic291cmNlIl0KKyAgICA7OyBDb21tZW50IGZvciB0aGUgc291cmNlIHZhbHVlLCBhZ2FpbgorCWtleTIgPSB2YWx1ZTIKK0VPRgorCWNhdCBjb25maWcuYnJhbmNoID4+LmdpdC9jb25maWcgJiYKKwlnaXQgYnJhbmNoIC1tIHNvdXJjZSBkZXN0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0L2NvbmZpZyAtbCB8IGdyZXAgLUYgLWUgc291cmNlIC1lIGRlc3QgLWUgc29tZS5nYXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgLi4uYW5kIHRoYXQgdGhlIGNvbW1lbnRzIGZvciB0aG9zZSBzZWN0aW9ucyBhcmUgYWxzbworCSMgcHJlc2VydmVkLgorCWNhdCBjb25maWcuYnJhbmNoIHwgc2VkICJzL1wic291cmNlXCIvXCJkZXN0XCIvIiA+ZXhwZWN0ICYmCisJc2VkIC1uIC1lICIvTm90ZSB0aGUgbGFjay8sXCRwIiAuZ2l0L2NvbmZpZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIGR1bXBzIHVzYWdlJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGJyYW5jaCAtYyAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImJyYW5jaCBuYW1lIHJlcXVpcmVkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWNvcHkgZHVtcHMgdXNhZ2UnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgYnJhbmNoIC0tY29weSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImJyYW5jaCBuYW1lIHJlcXVpcmVkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYyBkIGUgc2hvdWxkIHdvcmsnICcKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBkICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9kICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZC5kdW1teSBIZWxsbyAmJgorCWdpdCBicmFuY2ggLWMgZCBlICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9kICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9lICYmCisJZWNobyBIZWxsbyA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZS5kdW1teSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gSGVsbG8gPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJhbmNoLmQuZHVtbXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWNvcHkgaXMgYSBzeW5vbnltIGZvciAtYycgJworCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIGNvcHkgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2NvcHkgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5jb3B5LmR1bW15IEhlbGxvICYmCisJZ2l0IGJyYW5jaCAtLWNvcHkgY29weSBjb3B5LXRvICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9jb3B5ICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9jb3B5LXRvICYmCisJZWNobyBIZWxsbyA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicmFuY2guY29weS5kdW1teSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gSGVsbG8gPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJhbmNoLmNvcHktdG8uZHVtbXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYyBlZSBlZiBzaG91bGQgY29weSBlZSB0byBjcmVhdGUgYnJhbmNoIGVmJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGVlICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9lZSAmJgorCWdpdCBjb25maWcgYnJhbmNoLmVlLmR1bW15IEhlbGxvICYmCisJZ2l0IGJyYW5jaCAtYyBlZSBlZiAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvZWUgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2VmICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLmVlLmR1bW15KSA9IEhlbGxvICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLmVmLmR1bW15KSA9IEhlbGxvICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQpID0gZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYyBmL2YgZy9nIHNob3VsZCB3b3JrJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgZi9mICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9mL2YgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mL2YuZHVtbXkgSGVsbG8gJiYKKwlnaXQgYnJhbmNoIC1jIGYvZiBnL2cgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2YvZiAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvZy9nICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLmYvZi5kdW1teSkgPSBIZWxsbyAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5nL2cuZHVtbXkpID0gSGVsbG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYyBtMiBtMiBzaG91bGQgd29yaycgJworCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIG0yICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9tMiAmJgorCWdpdCBjb25maWcgYnJhbmNoLm0yLmR1bW15IEhlbGxvICYmCisJZ2l0IGJyYW5jaCAtYyBtMiBtMiAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvbTIgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubTIuZHVtbXkpID0gSGVsbG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYyB6eiB6ei96eiBzaG91bGQgZmFpbCcgJworCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIHp6ICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy96eiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWMgenogenovenoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYyBiL2IgYiBzaG91bGQgZmFpbCcgJworCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIGIvYiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWMgYi9iIGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtQyBvL3Egby9wIHNob3VsZCB3b3JrIHdoZW4gby9wIGV4aXN0cycgJworCWdpdCBicmFuY2ggLS1jcmVhdGUtcmVmbG9nIG8vcSAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvby9xICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9vL3AgJiYKKwlnaXQgYnJhbmNoIC1DIG8vcSBvL3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYyAtZiBvL3Egby9wIHNob3VsZCB3b3JrIHdoZW4gby9wIGV4aXN0cycgJworCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvby9xICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9vL3AgJiYKKwlnaXQgYnJhbmNoIC1jIC1mIG8vcSBvL3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYyBxcSByci9xcSBzaG91bGQgZmFpbCB3aGVuIHJyIGV4aXN0cycgJworCWdpdCBicmFuY2ggcXEgJiYKKwlnaXQgYnJhbmNoIHJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtYyBxcSByci9xcQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1DIGIxIGIyIHNob3VsZCBmYWlsIHdoZW4gYjIgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgYnJhbmNoIGIxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtQyBiMSBiMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1DIGMxIGMyIHNob3VsZCBzdWNjZWVkIHdoZW4gYzEgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgLWIgYzEgJiYKKwlnaXQgYnJhbmNoIGMyICYmCisJZ2l0IGJyYW5jaCAtQyBjMSBjMiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSA9IGMxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLUMgYzEgYzIgc2hvdWxkIG5ldmVyIHRvdWNoIEhFQUQnICcKKwltc2c9IkJyYW5jaDogY29waWVkIHJlZnMvaGVhZHMvYzEgdG8gcmVmcy9oZWFkcy9jMiIgJiYKKwkhIGdyZXAgIiRtc2ckIiAuZ2l0L2xvZ3MvSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1DIG1hc3RlciBzaG91bGQgd29yayB3aGVuIG1hc3RlciBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1DIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1DIG1hc3RlciBtYXN0ZXIgc2hvdWxkIHdvcmsgd2hlbiBtYXN0ZXIgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtQyBtYXN0ZXIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLUMgbWFzdGVyNSBtYXN0ZXI1IHNob3VsZCB3b3JrIHdoZW4gbWFzdGVyIGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggbWFzdGVyNSAmJgorCWdpdCBicmFuY2ggLUMgbWFzdGVyNSBtYXN0ZXI1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLUMgYWIgY2Qgc2hvdWxkIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWcgZm9yIGNkJyAnCisJZ2l0IGJyYW5jaCAtLWNyZWF0ZS1yZWZsb2cgY2QgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2NkICYmCisJZ2l0IGNvbmZpZyBicmFuY2guY2QuZHVtbXkgQ0QgJiYKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyBhYiAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvYWIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hYi5kdW1teSBBQiAmJgorCWdpdCBicmFuY2ggLUMgYWIgY2QgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2FiICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9jZCAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5hYi5kdW1teSkgPSBBQiAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5jZC5kdW1teSkgPSBBQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1jIGNvcnJlY3RseSBjb3BpZXMgbXVsdGlwbGUgY29uZmlnIHNlY3Rpb25zJyAnCisJRk9PPTEgJiYKKwlleHBvcnQgRk9PICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBzb3VyY2UyIG1hc3RlciAmJgorCisJIyBBc3NlcnQgdGhhdCBhIGNvbmZpZyBmaWxlIHdpdGggbXVsdGlwbGUgY29uZmlnIHNlY3Rpb25zIGhhcworCSMgdGhvc2Ugc2VjdGlvbnMgcHJlc2VydmVkLi4uCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJyYW5jaC5zb3VyY2UyLmtleTE9dmFsdWUxCisJYnJhbmNoLmRlc3QyLmtleTE9dmFsdWUxCisJbW9yZS5nYXIuYj1hZ2UKKwlicmFuY2guc291cmNlMi5rZXkyPXZhbHVlMgorCWJyYW5jaC5kZXN0Mi5rZXkyPXZhbHVlMgorCUVPRgorCWNhdCA+Y29uZmlnLmJyYW5jaCA8PFxFT0YgJiYKKzs7IE5vdGUgdGhlIGxhY2sgb2YgLVxFT0YgYWJvdmUgJiBtaXhlZCBpbmRlbnRpbmcgaGVyZS4gVGhpcyBpcworOzsgaW50ZW50aW9uYWwsIHdlIGFyZSBhbHNvIHRlc3RpbmcgdGhhdCB0aGUgZm9ybWF0dGluZyBvZiBjb3BpZWQKKzs7IHNlY3Rpb25zIGlzIHByZXNlcnZlZC4KKworOzsgQ29tbWVudCBmb3Igc291cmNlMi4gVGFicworW2JyYW5jaCAic291cmNlMiJdCisJOzsgQ29tbWVudCBmb3IgdGhlIHNvdXJjZTIgdmFsdWUKKwlrZXkxID0gdmFsdWUxCis7OyBDb21tZW50IGZvciBtb3JlLmdhci4gU3BhY2VzCitbbW9yZSAiZ2FyIl0KKyAgICA7OyBDb21tZW50IGZvciB0aGUgbW9yZS5nYXIgdmFsdWUKKyAgICBiID0gYWdlCis7OyBDb21tZW50IGZvciBzb3VyY2UyLCBhZ2Fpbi4gTWl4ZWQgdGFicy9zcGFjZXMuCitbYnJhbmNoICJzb3VyY2UyIl0KKyAgICA7OyBDb21tZW50IGZvciB0aGUgc291cmNlMiB2YWx1ZSwgYWdhaW4KKwlrZXkyID0gdmFsdWUyCitFT0YKKwljYXQgY29uZmlnLmJyYW5jaCA+Pi5naXQvY29uZmlnICYmCisJZ2l0IGJyYW5jaCAtYyBzb3VyY2UyIGRlc3QyICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0L2NvbmZpZyAtbCB8IGdyZXAgLUYgLWUgc291cmNlMiAtZSBkZXN0MiAtZSBtb3JlLmdhciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyAuLi5hbmQgdGhhdCB0aGUgY29tbWVudHMgYW5kIGZvcm1hdHRpbmcgZm9yIHRob3NlIHNlY3Rpb25zCisJIyBpcyBhbHNvIHByZXNlcnZlZC4KKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKKzs7IENvbW1lbnQgZm9yIHNvdXJjZTIuIFRhYnMKK1ticmFuY2ggInNvdXJjZTIiXQorCTs7IENvbW1lbnQgZm9yIHRoZSBzb3VyY2UyIHZhbHVlCisJa2V5MSA9IHZhbHVlMQorOzsgQ29tbWVudCBmb3IgbW9yZS5nYXIuIFNwYWNlcworW2JyYW5jaCAiZGVzdDIiXQorCTs7IENvbW1lbnQgZm9yIHRoZSBzb3VyY2UyIHZhbHVlCisJa2V5MSA9IHZhbHVlMQorOzsgQ29tbWVudCBmb3IgbW9yZS5nYXIuIFNwYWNlcworW21vcmUgImdhciJdCisgICAgOzsgQ29tbWVudCBmb3IgdGhlIG1vcmUuZ2FyIHZhbHVlCisgICAgYiA9IGFnZQorOzsgQ29tbWVudCBmb3Igc291cmNlMiwgYWdhaW4uIE1peGVkIHRhYnMvc3BhY2VzLgorW2JyYW5jaCAic291cmNlMiJdCisgICAgOzsgQ29tbWVudCBmb3IgdGhlIHNvdXJjZTIgdmFsdWUsIGFnYWluCisJa2V5MiA9IHZhbHVlMgorW2JyYW5jaCAiZGVzdDIiXQorICAgIDs7IENvbW1lbnQgZm9yIHRoZSBzb3VyY2UyIHZhbHVlLCBhZ2FpbgorCWtleTIgPSB2YWx1ZTIKK0VPRgorCXNlZCAtbiAtZSAiL0NvbW1lbnQgZm9yIHNvdXJjZTIvLFwkcCIgLmdpdC9jb25maWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgYSBzeW1yZWYnICcKKwlnaXQgYnJhbmNoIHRhcmdldCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9zeW1yZWYgcmVmcy9oZWFkcy90YXJnZXQgJiYKKwllY2hvICJEZWxldGVkIGJyYW5jaCBzeW1yZWYgKHdhcyByZWZzL2hlYWRzL3RhcmdldCkuIiA+ZXhwZWN0ICYmCisJZ2l0IGJyYW5jaCAtZCBzeW1yZWYgPmFjdHVhbCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy90YXJnZXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvc3ltcmVmICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgYSBkYW5nbGluZyBzeW1yZWYnICcKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvZGFuZ2xpbmctc3ltcmVmIG5vd2hlcmUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZGFuZ2xpbmctc3ltcmVmICYmCisJZWNobyAiRGVsZXRlZCBicmFuY2ggZGFuZ2xpbmctc3ltcmVmICh3YXMgbm93aGVyZSkuIiA+ZXhwZWN0ICYmCisJZ2l0IGJyYW5jaCAtZCBkYW5nbGluZy1zeW1yZWYgPmFjdHVhbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9kYW5nbGluZy1zeW1yZWYgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhIHNlbGYtcmVmZXJlbnRpYWwgc3ltcmVmJyAnCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3NlbGYtcmVmZXJlbmNlIHJlZnMvaGVhZHMvc2VsZi1yZWZlcmVuY2UgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvc2VsZi1yZWZlcmVuY2UgJiYKKwllY2hvICJEZWxldGVkIGJyYW5jaCBzZWxmLXJlZmVyZW5jZSAod2FzIHJlZnMvaGVhZHMvc2VsZi1yZWZlcmVuY2UpLiIgPmV4cGVjdCAmJgorCWdpdCBicmFuY2ggLWQgc2VsZi1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9zZWxmLXJlZmVyZW5jZSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtaW5nIGEgc3ltcmVmIGlzIG5vdCBhbGxvd2VkJyAnCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL21hc3RlcjIgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tIG1hc3RlcjIgbWFzdGVyMyAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2dpdCBicmFuY2ggLW0gdSB2IHNob3VsZCBmYWlsIHdoZW4gdGhlIHJlZmxvZyBmb3IgdSBpcyBhIHN5bWxpbmsnICcKKwlnaXQgYnJhbmNoIC0tY3JlYXRlLXJlZmxvZyB1ICYmCisJbXYgLmdpdC9sb2dzL3JlZnMvaGVhZHMvdSByZWFsLXUgJiYKKwlsbiAtcyByZWFsLXUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvdSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gdSB2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdHJhY2tpbmcgc2V0dXAgdmlhIC0tdHJhY2snICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15MSBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXkxLnJlbW90ZSkgPSBsb2NhbCAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5teTEubWVyZ2UpID0gcmVmcy9oZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0cmFja2luZyBzZXR1cCAobm9uLXdpbGRjYXJkLCBtYXRjaGluZyknICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteTQgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15NC5yZW1vdGUpID0gbG9jYWwgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXk0Lm1lcmdlKSA9IHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWNraW5nIHNldHVwIGZhaWxzIG9uIG5vbi1tYXRjaGluZyByZWZzcGVjJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvczpyZWZzL3JlbW90ZXMvbG9jYWwvcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS10cmFjayBteTUgbG9jYWwvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubXk1LnJlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLm15NS5tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRyYWNraW5nIHNldHVwIHZpYSBjb25maWcnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSB0cnVlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXkzIGxvY2FsL21hc3RlciAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5teTMucmVtb3RlKSA9IGxvY2FsICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15My5tZXJnZSkgPSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG92ZXJyaWRpbmcgdHJhY2tpbmcgc2V0dXAgdmlhIC0tbm8tdHJhY2snICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSB0cnVlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteTIgbG9jYWwvbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgZmFsc2UgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXkyLnJlbW90ZSkiID0gbG9jYWwgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXkyLm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB0cmFja2luZyB3aXRob3V0IC5mZXRjaCBlbnRyaWVzJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgdHJ1ZSAmJgorCWdpdCBicmFuY2ggbXk2IHMgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBmYWxzZSAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk2LnJlbW90ZSkiICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5teTYubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRyYWNraW5nIHNldHVwIHZpYSAtLXRyYWNrIGJ1dCBkZWVwZXInICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28vbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15NyBsb2NhbC9vL28gJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Ny5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTcubWVyZ2UpIiA9IHJlZnMvaGVhZHMvby9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVsZXRpbmcgYnJhbmNoIGRlbGV0ZXMgYnJhbmNoIGNvbmZpZycgJworCWdpdCBicmFuY2ggLWQgbXk3ICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5teTcucmVtb3RlKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Ny5tZXJnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVsZXRpbmcgYnJhbmNoIHdpdGhvdXQgY29uZmlnJyAnCisJZ2l0IGJyYW5jaCBteTcgcyAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIG15NyB8IGN1dCAtYyAxLTcpICYmCisJZWNobyAiRGVsZXRlZCBicmFuY2ggbXk3ICh3YXMgJHNoYTEpLiIgPmV4cGVjdCAmJgorCWdpdCBicmFuY2ggLWQgbXk3ID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIGN1cnJlbnRseSBjaGVja2VkIG91dCBicmFuY2ggZmFpbHMnICcKKwlnaXQgd29ya3RyZWUgYWRkIC1iIG15NyBteTcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbXk3IGJyYW5jaCAtZCBteTcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1kIG15NyAmJgorCXJtIC1yIG15NyAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tdHJhY2sgd2l0aG91dCAuZmV0Y2ggZW50cmllcycgJworCWdpdCBicmFuY2ggLS10cmFjayBteTggJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15OC5yZW1vdGUpIiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk4Lm1lcmdlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIGZyb20gbm9uLWJyYW5jaCBIRUFEIHcvYXV0b3NldHVwbWVyZ2U9YWx3YXlzJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgYWx3YXlzICYmCisJZ2l0IGJyYW5jaCBteTkgSEVBRF4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggZnJvbSBub24tYnJhbmNoIEhFQUQgdy8tLXRyYWNrIGNhdXNlcyBmYWlsdXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXRyYWNrIG15MTAgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIGZyb20gdGFnIHcvLS10cmFjayBjYXVzZXMgZmFpbHVyZScgJworCWdpdCB0YWcgZm9vYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXRyYWNrIG15MTEgZm9vYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2V0LXVwc3RyZWFtLXRvIGZhaWxzIG9uIG11bHRpcGxlIGJyYW5jaGVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBtYXN0ZXIgYSBiIGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gZmFpbHMgb24gZGV0YWNoZWQgSEVBRCcgJworCWdpdCBjaGVja291dCBIRUFEXnt9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbS10byBmYWlscyBvbiBhIG1pc3NpbmcgZHN0IGJyYW5jaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gbWFzdGVyIGRvZXMtbm90LWV4aXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2V0LXVwc3RyZWFtLXRvIGZhaWxzIG9uIGEgbWlzc2luZyBzcmMgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBkb2VzLW5vdC1leGlzdCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gZmFpbHMgb24gYSBub24tcmVmJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBIRUFEXnt9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2V0LXVwc3RyZWFtLXRvIGZhaWxzIG9uIGxvY2tlZCBjb25maWcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvY29uZmlnLmxvY2siICYmCisJPi5naXQvY29uZmlnLmxvY2sgJiYKKwlnaXQgYnJhbmNoIGxvY2tlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gbG9ja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAtLXNldC11cHN0cmVhbS10byBtb2RpZnkgSEVBRCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIGZvbyAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgZm9vICYmCisJZ2l0IGJyYW5jaCBteTEyICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBteTEyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlKSIgPSAiLiIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSkiID0gInJlZnMvaGVhZHMvbXkxMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tc2V0LXVwc3RyZWFtLXRvIG1vZGlmeSBhIHBhcnRpY3VsYXIgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBteTEzICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBtYXN0ZXIgbXkxMyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtIG15MTMiICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTEzLnJlbW90ZSkiID0gIi4iICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTEzLm1lcmdlKSIgPSAicmVmcy9oZWFkcy9tYXN0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tdW5zZXQtdXBzdHJlYW0gc2hvdWxkIGZhaWwgaWYgZ2l2ZW4gYSBub24tZXhpc3RlbnQgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtIGktZG9udC1leGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVuc2V0LXVwc3RyZWFtIHNob3VsZCBmYWlsIGlmIGNvbmZpZyBpcyBsb2NrZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvY29uZmlnLmxvY2siICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBsb2NrZWQgJiYKKwk+LmdpdC9jb25maWcubG9jayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tdW5zZXQtdXBzdHJlYW0gb24gSEVBRCcgJworCWdpdCBicmFuY2ggbXkxNCAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIGZvbyAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgZm9vICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBteTE0ICYmCisJZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSAmJgorCSMgZmFpbCBmb3IgYSBicmFuY2ggd2l0aG91dCB1cHN0cmVhbSBzZXQKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS11bnNldC11cHN0cmVhbSBzaG91bGQgZmFpbCBvbiBtdWx0aXBsZSBicmFuY2hlcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbSBhIGIgYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVuc2V0LXVwc3RyZWFtIHNob3VsZCBmYWlsIG9uIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF57fSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbSAmJgorCWdpdCBjaGVja291dCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS11bnNldC11cHN0cmVhbSBvbiBhIHBhcnRpY3VsYXIgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBteTE1ICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBtYXN0ZXIgbXkxNCAmJgorCWdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbSBteTE0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubXkxNC5yZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5teTE0Lm1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGVkIG9wdGlvbiAtLXNldC11cHN0cmVhbSBmYWlscycgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gb3JpZ2luL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbS10byBub3RpY2VzIGFuIGVycm9yIHRvIHNldCBicmFuY2ggYXMgb3duIHVwc3RyZWFtJyAnCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byByZWZzL2hlYWRzL215MTMgbXkxMyAyPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCXdhcm5pbmc6IE5vdCBzZXR0aW5nIGJyYW5jaCBteTEzIGFzIGl0cyBvd24gdXBzdHJlYW0uCisJRU9GCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb25maWcgYnJhbmNoLm15MTMucmVtb3RlICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb25maWcgYnJhbmNoLm15MTMubWVyZ2UgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMgS2VlcCB0aGlzIHRlc3QgbGFzdCwgYXMgaXQgY2hhbmdlcyB0aGUgY3VycmVudCBicmFuY2gKK2NhdCA+ZXhwZWN0IDw8RU9GCiskWkVST19PSUQgJEhFQUQgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAyMDAgKzAwMDAJYnJhbmNoOiBDcmVhdGVkIGZyb20gbWFzdGVyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjaGVja291dCAtYiBnL2gvaSAtbCBzaG91bGQgY3JlYXRlIGEgYnJhbmNoIGFuZCBhIGxvZycgJworCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMCIgXAorCWdpdCBjaGVja291dCAtYiBnL2gvaSAtbCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZy9oL2kgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9nL2gvaSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9nL2gvaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBtYWtlcyByZWZsb2cgYnkgZGVmYXVsdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFscGhhICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBhbHBoYUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgZG9lcyBub3QgbWFrZSByZWZsb2cgd2hlbiBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgPSBmYWxzZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtYiBiZXRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiZXRhQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiB3aXRoIC1sIG1ha2VzIHJlZmxvZyB3aGVuIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtbGIgZ2FtbWEgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBnYW1tYUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgYW1iaWd1b3VzIHRyYWNrJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgdHJ1ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmFtYmkxLnVybCBsYWxhbGEgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5hbWJpMS5mZXRjaCByZWZzL2hlYWRzL2xhbGFsYTpyZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmFtYmkyLnVybCBsaWxpbGkgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5hbWJpMi5mZXRjaCByZWZzL2hlYWRzL2xpbGlsaTpyZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggYWxsMSBtYXN0ZXIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLmFsbDEubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbG9jYWwgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyMSBteWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIxLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZSAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMS5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgYWx3YXlzICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UyICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjIgbXliYXNlICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIyLnJlbW90ZSkiID0gLiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMi5tZXJnZSkiID0gcmVmcy9oZWFkcy9teWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjIucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSByZW1vdGUgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlMyAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXIzIG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjMucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIzLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZTIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMy5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIG5ldmVyIG9uIGEgdHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlNCAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI0IG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjQucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI0Lm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZTIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNC5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGxvY2FsIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbG9jYWwgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI1IGxvY2FsL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNS5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjYgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI2LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSByZW1vdGUgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI3IGxvY2FsL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNy5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI3Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNy5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjggbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI4LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjgubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI4LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjkgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI5LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjkubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyOS5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHVuY29uZmlndXJlZCBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIG15YmFzZTEwICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjEwIG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEwLnJlbW90ZSkiID0gLiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTAubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEwLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIHVudHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjExIG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMS5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMS5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjExLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIHVudHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxMiBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMi5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMi5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEyLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYW4gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTMgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEzLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEzLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTMucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxNCBteWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTQucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTQubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNC5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTUgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE1LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE1Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTUucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gYW4gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBhbHdheXMgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE2IG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNi5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNi5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE2LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYW4gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbmV2ZXIgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE3IGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE3LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE3Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTcucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBsb2NhbCAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTggbG9jYWwvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTgucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTgubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOC5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE5IGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE5LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE5Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTkucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gYW4gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgYWx3YXlzICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIyMCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIyMC5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIyMC5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjIwLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgYWx3YXlzIG9uIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgYnJhbmNoIG15MTEgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTEucmVtb3RlKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTEubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzY29uZmlndXJlZCBhdXRvc2V0dXByZWJhc2UgKGJhZCB2YWx1ZSknICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgZ2FyYmFnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc2NvbmZpZ3VyZWQgYXV0b3NldHVwcmViYXNlIChubyB2YWx1ZSknICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSAmJgorCWVjaG8gIlticmFuY2hdIGF1dG9zZXR1cHJlYmFzZSIgPj4uZ2l0L2NvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRlbXB0IHRvIGRlbGV0ZSBhIGJyYW5jaCB3aXRob3V0IGJhc2UgYW5kIHVubWVyZ2VkIHRvIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgbXk5ICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC5teTgubWVyZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1kIG15OAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRlbXB0IHRvIGRlbGV0ZSBhIGJyYW5jaCBtZXJnZWQgdG8gaXRzIGJhc2UnICcKKwkjIHdlIGFyZSBvbiBteTkgd2hpY2ggaXMgdGhlIGluaXRpYWwgY29tbWl0OyB0cmFkaXRpb25hbGx5CisJIyB3ZSB3b3VsZCBub3QgaGF2ZSBhbGxvd2VkIGRlbGV0aW5nIG15OCB0aGF0IGlzIG5vdCBtZXJnZWQKKwkjIHRvIG15OSwgYnV0IGl0IGlzIHNldCB0byB0cmFjayBtYXN0ZXIgdGhhdCBhbHJlYWR5IGhhcyBteTgKKwlnaXQgY29uZmlnIGJyYW5jaC5teTgubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1kIG15OAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRlbXB0IHRvIGRlbGV0ZSBhIGJyYW5jaCBtZXJnZWQgdG8gaXRzIGJhc2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBUaGlyZCA+PkEgJiYKKwlnaXQgY29tbWl0IC1tICJUaGlyZCBjb21taXQiIEEgJiYKKwlnaXQgYnJhbmNoIC10IG15MTAgbXk5ICYmCisJZ2l0IGJyYW5jaCAtZiBteTEwIEhFQUReICYmCisJIyB3ZSBhcmUgb24gbWFzdGVyIHdoaWNoIGlzIGF0IHRoZSB0aGlyZCBjb21taXQsIGFuZCBteTEwCisJIyBpcyBiZWhpbmQgdXMsIHNvIHRyYWRpdGlvbmFsbHkgd2Ugd291bGQgaGF2ZSBhbGxvd2VkIGRlbGV0aW5nCisJIyBpdDsgYnV0IG15MTAgaXMgc2V0IHRvIHRyYWNrIG15OSB0aGF0IGlzIGZ1cnRoZXIgYmVoaW5kLgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWQgbXkxMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1lZGl0LWRlc2NyaXB0aW9uJyAnCisJd3JpdGVfc2NyaXB0IGVkaXRvciA8PC1cRU9GICYmCisJCWVjaG8gIk5ldyBjb250ZW50cyIgPiIkMSIKKwlFT0YKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24gJiYKKwkJd3JpdGVfc2NyaXB0IGVkaXRvciA8PC1cRU9GICYmCisJCWdpdCBzdHJpcHNwYWNlIC1zIDwiJDEiID4iRURJVE9SX09VVFBVVCIKKwlFT0YKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24gJiYKKwllY2hvICJOZXcgY29udGVudHMiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgRURJVE9SX09VVFBVVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgdHlwbyBpbiBicmFuY2ggbmFtZSB3aGVuIHVzaW5nIC0tZWRpdC1kZXNjcmlwdGlvbicgJworCXdyaXRlX3NjcmlwdCBlZGl0b3IgPDwtXEVPRiAmJgorCQllY2hvICJOZXcgY29udGVudHMiID4iJDEiCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZW52IEVESVRPUj0uL2VkaXRvciBnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiBuby1zdWNoLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgLS1lZGl0LWRlc2NyaXB0aW9uIG9uIHVuYm9ybiBicmFuY2ggZm9yIG5vdycgJworCXdyaXRlX3NjcmlwdCBlZGl0b3IgPDwtXEVPRiAmJgorCQllY2hvICJOZXcgY29udGVudHMiID4iJDEiCisJRU9GCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHVuYm9ybiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9Li9lZGl0b3IgZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1tZXJnZWQgY2F0Y2hlcyBpbnZhbGlkIG9iamVjdCBuYW1lcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1tZXJnZWQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1lcmdlZCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLW5vLW1lcmdlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1tZXJnZWQgSEVBRCAtLW5vLW1lcmdlZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbGlzdCBkdXJpbmcgcmViYXNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZXNldF9yZWJhc2UiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCUZBS0VfTElORVM9IjEgZWRpdCAyIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwlnaXQgYnJhbmNoIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmViYXNpbmcgbWFzdGVyIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1saXN0IGR1cmluZyByZWJhc2UgZnJvbSBkZXRhY2hlZCBIRUFEJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZXNldF9yZWJhc2UgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlGQUtFX0xJTkVTPSIxIGVkaXQgMiIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4yICYmCisJZ2l0IGJyYW5jaCAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInJlYmFzaW5nIGRldGFjaGVkIEhFQUQgJG9pZCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWNraW5nIHdpdGggdW5leHBlY3RlZCAuZmV0Y2ggcmVmc3BlYycgJworCXJtIC1yZiBhIGIgYyBkICYmCisJZ2l0IGluaXQgYSAmJgorCSgKKwkJY2QgYSAmJgorCQl0ZXN0X2NvbW1pdCBhCisJKSAmJgorCWdpdCBpbml0IGIgJiYKKwkoCisJCWNkIGIgJiYKKwkJdGVzdF9jb21taXQgYgorCSkgJiYKKwlnaXQgaW5pdCBjICYmCisJKAorCQljZCBjICYmCisJCXRlc3RfY29tbWl0IGMgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgYSAuLi9hICYmCisJCWdpdCByZW1vdGUgYWRkIGIgLi4vYiAmJgorCQlnaXQgZmV0Y2ggLS1hbGwKKwkpICYmCisJZ2l0IGluaXQgZCAmJgorCSgKKwkJY2QgZCAmJgorCQlnaXQgcmVtb3RlIGFkZCBjIC4uL2MgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuYy5mZXRjaCAiK3JlZnMvcmVtb3Rlcy8qOnJlZnMvcmVtb3Rlcy8qIiAmJgorCQlnaXQgZmV0Y2ggYyAmJgorCQlnaXQgYnJhbmNoIC0tdHJhY2sgbG9jYWwvYS9tYXN0ZXIgcmVtb3Rlcy9hL21hc3RlciAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLmxvY2FsL2EvbWFzdGVyLnJlbW90ZSkiID0gImMiICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubG9jYWwvYS9tYXN0ZXIubWVyZ2UpIiA9ICJyZWZzL3JlbW90ZXMvYS9tYXN0ZXIiICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYSA+ZXhwZWN0ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbG9jYWwvYS9tYXN0ZXIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmVkIGNvbW1pdHRlcmRhdGUgc29ydCcgJworCWdpdCBpbml0IHNvcnQgJiYKKwkoCisJCWNkIHNvcnQgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guc29ydCBjb21taXR0ZXJkYXRlICYmCisJCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGEgJiYKKwkJdGVzdF9jb21taXQgYSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYyAmJgorCQl0ZXN0X2NvbW1pdCBjICYmCisJCWdpdCBjaGVja291dCAtYiBiICYmCisJCXRlc3RfY29tbWl0IGIgJiYKKwkJZ2l0IGJyYW5jaCA+YWN0dWFsICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJICBtYXN0ZXIKKwkJICBhCisJCSAgYworCQkqIGIKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiBvdmVycmlkZSBjb25maWd1cmVkIHNvcnQnICcKKwkoCisJCWNkIHNvcnQgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guc29ydCBjb21taXR0ZXJkYXRlICYmCisJCWdpdCBicmFuY2ggLS1zb3J0PXJlZm5hbWUgPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCSAgYQorCQkqIGIKKwkJICBjCisJCSAgbWFzdGVyCisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHNvcnQgcGFyYW1ldGVyIGluIGNvbmZpZ3VyYXRpb24nICcKKwkoCisJCWNkIHNvcnQgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guc29ydCAidjpub3R2YWxpZCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaCBiL3QvdDMyMDEtYnJhbmNoLWNvbnRhaW5zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwMjUxYzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaApAQCAtMCwwICsxLDIxNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2JyYW5jaCAtLWNvbnRhaW5zIDxjb21taXQ+LCAtLW5vLWNvbnRhaW5zIDxjb21taXQ+IC0tbWVyZ2VkLCBhbmQgLS1uby1tZXJnZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwllY2hvIDEgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgb24gbWFzdGVyIiAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIDEgPmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgb24gc2lkZSIgJiYKKworCWdpdCBtZXJnZSBtYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1jb250YWlucz1tYXN0ZXInICcKKworCWdpdCBicmFuY2ggLS1jb250YWlucz1tYXN0ZXIgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBtYXN0ZXIiICYmIGVjaG8gIiogc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tY29udGFpbnMgbWFzdGVyJyAnCisKKwlnaXQgYnJhbmNoIC0tY29udGFpbnMgbWFzdGVyID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgbWFzdGVyIiAmJiBlY2hvICIqIHNpZGUiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLW5vLWNvbnRhaW5zPW1hc3RlcicgJworCisJZ2l0IGJyYW5jaCAtLW5vLWNvbnRhaW5zPW1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLW5vLWNvbnRhaW5zIG1hc3RlcicgJworCisJZ2l0IGJyYW5jaCAtLW5vLWNvbnRhaW5zIG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLWNvbnRhaW5zPXNpZGUnICcKKworCWdpdCBicmFuY2ggLS1jb250YWlucz1zaWRlID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiogc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbm8tY29udGFpbnM9c2lkZScgJworCisJZ2l0IGJyYW5jaCAtLW5vLWNvbnRhaW5zPXNpZGUgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBtYXN0ZXIiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLWNvbnRhaW5zIHdpdGggcGF0dGVybiBpbXBsaWVzIC0tbGlzdCcgJworCisJZ2l0IGJyYW5jaCAtLWNvbnRhaW5zPW1hc3RlciBtYXN0ZXIgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBtYXN0ZXIiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLW5vLWNvbnRhaW5zIHdpdGggcGF0dGVybiBpbXBsaWVzIC0tbGlzdCcgJworCisJZ2l0IGJyYW5jaCAtLW5vLWNvbnRhaW5zPW1hc3RlciBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlOiBicmFuY2ggLS1tZXJnZWQnICcKKworCWdpdCBicmFuY2ggLS1tZXJnZWQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBtYXN0ZXIiICYmCisJCWVjaG8gIiogc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbWVyZ2VkIHdpdGggcGF0dGVybiBpbXBsaWVzIC0tbGlzdCcgJworCisJZ2l0IGJyYW5jaCAtLW1lcmdlZD1zaWRlIG1hc3RlciA+YWN0dWFsICYmCisJeworCQllY2hvICIgIG1hc3RlciIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZTogYnJhbmNoIC0tbm8tbWVyZ2VkJyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyOiBicmFuY2ggLS1tZXJnZWQnICcKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC0tbWVyZ2VkID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiogbWFzdGVyIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXI6IGJyYW5jaCAtLW5vLW1lcmdlZCcgJworCisJZ2l0IGJyYW5jaCAtLW5vLW1lcmdlZCA+YWN0dWFsICYmCisJeworCQllY2hvICIgIHNpZGUiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLW5vLW1lcmdlZCB3aXRoIHBhdHRlcm4gaW1wbGllcyAtLWxpc3QnICcKKworCWdpdCBicmFuY2ggLS1uby1tZXJnZWQ9bWFzdGVyIG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcGxpY2l0IC0tbGlzdCBjb25mbGljdHMgd2l0aCBtb2RpZmljYXRpb24gb3B0aW9ucycgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLWNvbnRhaW5zPW1hc3RlciAtZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1jb250YWlucz1tYXN0ZXIgLW0gZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLW5vLWNvbnRhaW5zPW1hc3RlciAtZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS1uby1jb250YWlucz1tYXN0ZXIgLW0gZm9vCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQXNzZXJ0IHRoYXQgLS1jb250YWlucyBvbmx5IHdvcmtzIG9uIGNvbW1pdHMsIG5vdCB0cmVlcyAmIGJsb2JzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLWNvbnRhaW5zIG1hc3Rlcl57dHJlZX0gJiYKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPDwtXEVPRgorCVNvbWUgYmxvYgorCUVPRgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tY29udGFpbnMgJGJsb2IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tbm8tY29udGFpbnMgJGJsb2IKKycKKworIyBXZSB3YW50IHRvIHNldCB1cCBhIGNhc2Ugd2hlcmUgdGhlIHdhbGsgZm9yIHRoZSB0cmFja2luZyBpbmZvCisjIG9mIG9uZSBicmFuY2ggY3Jvc3NlcyB0aGUgdGlwIG9mIGFub3RoZXIgYnJhbmNoIChhbmQgbWFrZSBzdXJlCisjIHRoYXQgdGhlIGxhdHRlciB3YWxrIGRvZXMgbm90IG1lc3MgdXAgb3VyIGZsYWcgdG8gc2VlIGlmIGl0IHdhcworIyBtZXJnZWQpLgorIworIyBIZXJlICJ0b3BpYyIgdHJhY2tzICJtYXN0ZXIiIHdpdGggb25lIGV4dHJhIGNvbW1pdCwgYW5kICJ6enoiIHBvaW50cyB0byB0aGUKKyMgc2FtZSB0aXAgYXMgbWFzdGVyIFRoZSBuYW1lICJ6enoiIG11c3QgY29tZSBhbHBoYWJldGljYWxseSBhZnRlciAidG9waWMiCisjIGFzIHdlIHByb2Nlc3MgdGhlbSBpbiB0aGF0IG9yZGVyLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbWVyZ2VkIHdpdGggLS12ZXJib3NlJyAnCisJZ2l0IGJyYW5jaCAtLXRyYWNrIHRvcGljIG1hc3RlciAmJgorCWdpdCBicmFuY2ggenp6IHRvcGljICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJdGVzdF9jb21taXQgZm9vICYmCisJZ2l0IGJyYW5jaCAtLW1lcmdlZCB0b3BpYyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSAgbWFzdGVyCisJKiB0b3BpYworCSAgenp6CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBicmFuY2ggLS12ZXJib3NlIC0tbWVyZ2VkIHRvcGljID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkgIG1hc3RlciAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBtYXN0ZXIpIHNlY29uZCBvbiBtYXN0ZXIKKwkqIHRvcGljICAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCB0b3BpYyApIFthaGVhZCAxXSBmb28KKwkgIHp6eiAgICAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCB6enogICApIHNlY29uZCBvbiBtYXN0ZXIKKwlFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1jb250YWlucyBjb21iaW5lZCB3aXRoIC0tbm8tY29udGFpbnMnICcKKwlnaXQgYnJhbmNoIC0tY29udGFpbnMgenp6IC0tbm8tY29udGFpbnMgdG9waWMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgIG1hc3RlcgorCSAgc2lkZQorCSAgenp6CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwMi1zaG93LWJyYW5jaC1vY3RvcHVzLnNoIGIvdC90MzIwMi1zaG93LWJyYW5jaC1vY3RvcHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhZGY0NzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2gKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc2hvdy1icmFuY2ggd2l0aCBtb3JlIHRoYW4gOCBoZWFkcycKKworLiAuL3Rlc3QtbGliLnNoCisKK251bWJlcnM9IjEgMiAzIDQgNSA2IDcgOCA5IDEwIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlmb3IgaSBpbiAkbnVtYmVycworCWRvCisJCWdpdCBjaGVja291dCAtYiBicmFuY2gkaSBtYXN0ZXIgJiYKKwkJPiBmaWxlJGkgJiYKKwkJZ2l0IGFkZCBmaWxlJGkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gYnJhbmNoJGkgfHwgcmV0dXJuIDEKKwlkb25lCisKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorISBbYnJhbmNoMV0gYnJhbmNoMQorICEgW2JyYW5jaDJdIGJyYW5jaDIKKyAgISBbYnJhbmNoM10gYnJhbmNoMworICAgISBbYnJhbmNoNF0gYnJhbmNoNAorICAgICEgW2JyYW5jaDVdIGJyYW5jaDUKKyAgICAgISBbYnJhbmNoNl0gYnJhbmNoNgorICAgICAgISBbYnJhbmNoN10gYnJhbmNoNworICAgICAgICEgW2JyYW5jaDhdIGJyYW5jaDgKKyAgICAgICAgISBbYnJhbmNoOV0gYnJhbmNoOQorICAgICAgICAgKiBbYnJhbmNoMTBdIGJyYW5jaDEwCistLS0tLS0tLS0tCisgICAgICAgICAqIFticmFuY2gxMF0gYnJhbmNoMTAKKyAgICAgICAgKyAgW2JyYW5jaDldIGJyYW5jaDkKKyAgICAgICArICAgW2JyYW5jaDhdIGJyYW5jaDgKKyAgICAgICsgICAgW2JyYW5jaDddIGJyYW5jaDcKKyAgICAgKyAgICAgW2JyYW5jaDZdIGJyYW5jaDYKKyAgICArICAgICAgW2JyYW5jaDVdIGJyYW5jaDUKKyAgICsgICAgICAgW2JyYW5jaDRdIGJyYW5jaDQKKyAgKyAgICAgICAgW2JyYW5jaDNdIGJyYW5jaDMKKyArICAgICAgICAgW2JyYW5jaDJdIGJyYW5jaDIKKysgICAgICAgICAgW2JyYW5jaDFdIGJyYW5jaDEKKysrKysrKysrKyogW2JyYW5jaDEwXl0gaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctYnJhbmNoIHdpdGggbW9yZSB0aGFuIDggYnJhbmNoZXMnICcKKworCWdpdCBzaG93LWJyYW5jaCAkKGZvciBpIGluICRudW1iZXJzOyBkbyBlY2hvIGJyYW5jaCRpOyBkb25lKSA+IG91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LWJyYW5jaCB3aXRoIHNob3dicmFuY2guZGVmYXVsdCcgJworCWZvciBpIGluICRudW1iZXJzOyBkbworCQlnaXQgY29uZmlnIC0tYWRkIHNob3dicmFuY2guZGVmYXVsdCBicmFuY2gkaQorCWRvbmUgJiYKKwlnaXQgc2hvdy1icmFuY2ggPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAzLWJyYW5jaC1vdXRwdXQuc2ggYi90L3QzMjAzLWJyYW5jaC1vdXRwdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzE4MThiOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDMtYnJhbmNoLW91dHB1dC5zaApAQCAtMCwwICsxLDM1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBicmFuY2ggZGlzcGxheSB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBjb21taXRzJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBicmFuY2hlcycgJworCWdpdCBicmFuY2ggYnJhbmNoLW9uZSAmJgorCWdpdCBicmFuY2ggYnJhbmNoLXR3byBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHJlbW90ZSBicmFuY2hlcycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoLW9uZSBicmFuY2gtb25lICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gtdHdvIGJyYW5jaC10d28gJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaC1vbmUKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyogbWFzdGVyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggc2hvd3MgbG9jYWwgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1saXN0IHNob3dzIGxvY2FsIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWxpc3QgcGF0dGVybiBzaG93cyBtYXRjaGluZyBsb2NhbCBicmFuY2hlcycgJworCWdpdCBicmFuY2ggLS1saXN0IGJyYW5jaCogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworICBvcmlnaW4vSEVBRCAtPiBvcmlnaW4vYnJhbmNoLW9uZQorICBvcmlnaW4vYnJhbmNoLW9uZQorICBvcmlnaW4vYnJhbmNoLXR3bworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1yIHNob3dzIHJlbW90ZSBicmFuY2hlcycgJworCWdpdCBicmFuY2ggLXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyogbWFzdGVyCisgIHJlbW90ZXMvb3JpZ2luL0hFQUQgLT4gb3JpZ2luL2JyYW5jaC1vbmUKKyAgcmVtb3Rlcy9vcmlnaW4vYnJhbmNoLW9uZQorICByZW1vdGVzL29yaWdpbi9icmFuY2gtdHdvCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLWEgc2hvd3MgbG9jYWwgYW5kIHJlbW90ZSBicmFuY2hlcycgJworCWdpdCBicmFuY2ggLWEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJwordHdvCitvbmUKK3R3bworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC12IHNob3dzIGJyYW5jaCBzdW1tYXJpZXMnICcKKwlnaXQgYnJhbmNoIC12ID50bXAgJiYKKwlhd2sgIntwcmludCBcJE5GfSIgPHRtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCit0d28KK29uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tbGlzdCAtdiBwYXR0ZXJuIHNob3dzIGJyYW5jaCBzdW1tYXJpZXMnICcKKwlnaXQgYnJhbmNoIC0tbGlzdCAtdiBicmFuY2gqID50bXAgJiYKKwlhd2sgIntwcmludCBcJE5GfSIgPHRtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWlnbm9yZS1jYXNlIC0tbGlzdCAtdiBwYXR0ZXJuIHNob3dzIGJyYW5jaCBzdW1tYXJpZXMnICcKKwlnaXQgYnJhbmNoIC0tbGlzdCAtLWlnbm9yZS1jYXNlIC12IEJSQU5DSCogPnRtcCAmJgorCWF3ayAie3ByaW50IFwkTkZ9IiA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgcGF0dGVybiBkb2VzIG5vdCBzaG93IGJyYW5jaCBzdW1tYXJpZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC12IGJyYW5jaCoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBgLS1zaG93LWN1cnJlbnRgIHNob3dzIGN1cnJlbnQgYnJhbmNoJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJyYW5jaC10d28KKwlFT0YKKwlnaXQgY2hlY2tvdXQgYnJhbmNoLXR3byAmJgorCWdpdCBicmFuY2ggLS1zaG93LWN1cnJlbnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBgLS1zaG93LWN1cnJlbnRgIGlzIHNpbGVudCB3aGVuIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJZ2l0IGJyYW5jaCAtLXNob3ctY3VycmVudCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGAtLXNob3ctY3VycmVudGAgd29ya3MgcHJvcGVybHkgd2hlbiB0YWcgZXhpc3RzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJyYW5jaC1hbmQtdGFnLW5hbWUKKwlFT0YKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgY2hlY2tvdXQgYnJhbmNoLW9uZQorCQlnaXQgYnJhbmNoIC1EIGJyYW5jaC1hbmQtdGFnLW5hbWUKKwkiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaC1hbmQtdGFnLW5hbWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB0YWcgLWQgYnJhbmNoLWFuZC10YWctbmFtZSIgJiYKKwlnaXQgdGFnIGJyYW5jaC1hbmQtdGFnLW5hbWUgJiYKKwlnaXQgYnJhbmNoIC0tc2hvdy1jdXJyZW50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggYC0tc2hvdy1jdXJyZW50YCB3b3JrcyBwcm9wZXJseSB3aXRoIHdvcmt0cmVlcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlicmFuY2gtb25lCisJYnJhbmNoLXR3bworCUVPRgorCWdpdCBjaGVja291dCBicmFuY2gtb25lICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IHdvcmt0cmVlIHJlbW92ZSB3b3JrdHJlZV9kaXIKKwkiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCB3b3JrdHJlZV9kaXIgYnJhbmNoLXR3byAmJgorCXsKKwkJZ2l0IGJyYW5jaCAtLXNob3ctY3VycmVudCAmJgorCQlnaXQgLUMgd29ya3RyZWVfZGlyIGJyYW5jaCAtLXNob3ctY3VycmVudAorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBzaG93cyBkZXRhY2hlZCBIRUFEIHByb3Blcmx5JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKKyogKEhFQUQgZGV0YWNoZWQgYXQgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4wKSkKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCisgIG1hc3RlcgorRU9GCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggc2hvd3MgZGV0YWNoZWQgSEVBRCBwcm9wZXJseSBhZnRlciBjaGVja291dCAtLWRldGFjaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorKiAoSEVBRCBkZXRhY2hlZCBhdCAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXjApKQorICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyAgbWFzdGVyCitFT0YKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwlnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGRldGFjaGVkIEhFQUQgcHJvcGVybHkgYWZ0ZXIgbW92aW5nJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKKyogKEhFQUQgZGV0YWNoZWQgZnJvbSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSkKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCisgIG1hc3RlcgorRU9GCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXjEgJiYKKwlnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGRldGFjaGVkIEhFQUQgcHJvcGVybHkgZnJvbSB0YWcnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorKiAoSEVBRCBkZXRhY2hlZCBhdCBmcm9tdGFnKQorICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyAgbWFzdGVyCitFT0YKKwlnaXQgdGFnIGZyb210YWcgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGZyb210YWcgJiYKKwlnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGRldGFjaGVkIEhFQUQgcHJvcGVybHkgYWZ0ZXIgbW92aW5nIGZyb20gdGFnJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKKyogKEhFQUQgZGV0YWNoZWQgZnJvbSBmcm9tdGFnKQorICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyAgbWFzdGVyCitFT0YKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReMSAmJgorCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggYC0tc29ydGAgb3B0aW9uJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSogKEhFQUQgZGV0YWNoZWQgZnJvbSBmcm9tdGFnKQorCSAgYnJhbmNoLXR3bworCSAgYnJhbmNoLW9uZQorCSAgbWFzdGVyCisJRU9GCisJZ2l0IGJyYW5jaCAtLXNvcnQ9b2JqZWN0c2l6ZSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLXBvaW50cy1hdCBvcHRpb24nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJICBicmFuY2gtb25lCisJICBtYXN0ZXIKKwlFT0YKKwlnaXQgYnJhbmNoIC0tcG9pbnRzLWF0PWJyYW5jaC1vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIGJyYW5jaC90YWcgbm90IG1hcmtlZCcgJworCWdpdCB0YWcgYW1iaWd1b3VzICYmCisJZ2l0IGJyYW5jaCBhbWJpZ3VvdXMgJiYKKwllY2hvICIgIGFtYmlndW91cyIgPmV4cGVjdCAmJgorCWdpdCBicmFuY2ggLS1saXN0IGFtYmlndW91cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbC1icmFuY2ggc3ltcmVmcyBzaG9ydGVuZWQgcHJvcGVybHknICcKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvcmVmLXRvLWJyYW5jaCByZWZzL2hlYWRzL2JyYW5jaC1vbmUgJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvcmVmLXRvLXJlbW90ZSByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaC1vbmUgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJICByZWYtdG8tYnJhbmNoIC0+IGJyYW5jaC1vbmUKKwkgIHJlZi10by1yZW1vdGUgLT4gb3JpZ2luL2JyYW5jaC1vbmUKKwlFT0YKKwlnaXQgYnJhbmNoID5hY3R1YWwucmF3ICYmCisJZ3JlcCByZWYtdG8gPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc29ydCBicmFuY2hlcywgaWdub3JlIGNhc2UnICcKKwkoCisJCWdpdCBpbml0IHNvcnQtaWNhc2UgJiYKKwkJY2Qgc29ydC1pY2FzZSAmJgorCQl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJCWdpdCBicmFuY2ggYnJhbmNoLW9uZSAmJgorCQlnaXQgYnJhbmNoIEJSQU5DSC10d28gJiYKKwkJZ2l0IGJyYW5jaCAtLWxpc3QgfCBhd2sgIntwcmludCBcJE5GfSIgPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQlJBTkNILXR3bworCQlicmFuY2gtb25lCisJCW1hc3RlcgorCQlFT0YKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCBicmFuY2ggLS1saXN0IC1pIHwgYXdrICJ7cHJpbnQgXCRORn0iID5hY3R1YWwgJiYKKwkJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCWJyYW5jaC1vbmUKKwkJQlJBTkNILXR3bworCQltYXN0ZXIKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWZvcm1hdCBvcHRpb24nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJUmVmbmFtZSBpcyAoSEVBRCBkZXRhY2hlZCBmcm9tIGZyb210YWcpCisJUmVmbmFtZSBpcyByZWZzL2hlYWRzL2FtYmlndW91cworCVJlZm5hbWUgaXMgcmVmcy9oZWFkcy9icmFuY2gtb25lCisJUmVmbmFtZSBpcyByZWZzL2hlYWRzL2JyYW5jaC10d28KKwlSZWZuYW1lIGlzIHJlZnMvaGVhZHMvbWFzdGVyCisJUmVmbmFtZSBpcyByZWZzL2hlYWRzL3JlZi10by1icmFuY2gKKwlSZWZuYW1lIGlzIHJlZnMvaGVhZHMvcmVmLXRvLXJlbW90ZQorCUVPRgorCWdpdCBicmFuY2ggLS1mb3JtYXQ9IlJlZm5hbWUgaXMgJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmt0cmVlIGNvbG9ycyBjb3JyZWN0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJKiA8R1JFRU4+KEhFQUQgZGV0YWNoZWQgZnJvbSBmcm9tdGFnKTxSRVNFVD4KKwkgIGFtYmlndW91czxSRVNFVD4KKwkgIGJyYW5jaC1vbmU8UkVTRVQ+CisJKyA8Q1lBTj5icmFuY2gtdHdvPFJFU0VUPgorCSAgbWFzdGVyPFJFU0VUPgorCSAgcmVmLXRvLWJyYW5jaDxSRVNFVD4gLT4gYnJhbmNoLW9uZQorCSAgcmVmLXRvLXJlbW90ZTxSRVNFVD4gLT4gb3JpZ2luL2JyYW5jaC1vbmUKKwlFT0YKKwlnaXQgd29ya3RyZWUgYWRkIHdvcmt0cmVlX2RpciBicmFuY2gtdHdvICYmCisJZ2l0IGJyYW5jaCAtLWNvbG9yID5hY3R1YWwucmF3ICYmCisJcm0gLXIgd29ya3RyZWVfZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldCB1cCBjb2xvciB0ZXN0cyIgJworCWVjaG8gIjxSRUQ+bWFzdGVyPFJFU0VUPiIgPmV4cGVjdC5jb2xvciAmJgorCWVjaG8gIm1hc3RlciIgPmV4cGVjdC5iYXJlICYmCisJY29sb3JfYXJncz0iLS1mb3JtYXQ9JShjb2xvcjpyZWQpJShyZWZuYW1lOnNob3J0KSAtLWxpc3QgbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKGNvbG9yKSBvbWl0dGVkIHdpdGhvdXQgdHR5JyAnCisJVEVSTT12dDEwMCBnaXQgYnJhbmNoICRjb2xvcl9hcmdzID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5iYXJlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnJShjb2xvcikgcHJlc2VudCB3aXRoIHR0eScgJworCXRlc3RfdGVybWluYWwgZ2l0IGJyYW5jaCAkY29sb3JfYXJncyA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29sb3IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29sb3Igb3ZlcnJpZGVzIGF1dG8tY29sb3InICcKKwlnaXQgYnJhbmNoIC0tY29sb3IgJGNvbG9yX2FyZ3MgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIG91dHB1dCBsaXN0cyB3b3JrdHJlZSBwYXRoJyAnCisJb25lPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IG1hc3RlcikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkqIChIRUFEIGRldGFjaGVkIGZyb20gZnJvbXRhZykgJG9uZSBvbmUKKwkgIGFtYmlndW91cyAgICAgICAgICAgICAgICAgICAgJG9uZSBvbmUKKwkgIGJyYW5jaC1vbmUgICAgICAgICAgICAgICAgICAgJHR3byB0d28KKwkrIGJyYW5jaC10d28gICAgICAgICAgICAgICAgICAgJG9uZSAoJChwd2QpL3dvcmt0cmVlX2Rpcikgb25lCisJICBtYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICR0d28gdHdvCisJICByZWYtdG8tYnJhbmNoICAgICAgICAgICAgICAgICR0d28gdHdvCisJICByZWYtdG8tcmVtb3RlICAgICAgICAgICAgICAgICR0d28gdHdvCisJRU9GCisJZ2l0IHdvcmt0cmVlIGFkZCB3b3JrdHJlZV9kaXIgYnJhbmNoLXR3byAmJgorCWdpdCBicmFuY2ggLXZ2ID5hY3R1YWwgJiYKKwlybSAtciB3b3JrdHJlZV9kaXIgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDQtYnJhbmNoLW5hbWUtaW50ZXJwcmV0YXRpb24uc2ggYi90L3QzMjA0LWJyYW5jaC1uYW1lLWludGVycHJldGF0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY5OGQ5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjA0LWJyYW5jaC1uYW1lLWludGVycHJldGF0aW9uLnNoCkBAIC0wLDAgKzEsMTMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naW50ZXJwcmV0aW5nIGV4b3RpYyBicmFuY2ggbmFtZSBhcmd1bWVudHMKKworQnJhbmNoIG5hbWUgYXJndW1lbnRzIGFyZSB1c3VhbGx5IG5hbWVzIHdoaWNoIGFyZSB0YWtlbiB0byBiZSBpbnNpZGUgb2YKK3JlZnMvaGVhZHMvLCBidXQgd2UgaW50ZXJwcmV0IHNvbWUgbWFnaWMgc3ludGF4IGxpa2UgQHstMX0sIEB7dXBzdHJlYW19LCBldGMuCitUaGlzIHNjcmlwdCBhaW1zIHRvIGNoZWNrIHRoZSBiZWhhdmlvciBvZiB0aG9zZSBjb3JuZXIgY2FzZXMuCisnCisuIC4vdGVzdC1saWIuc2gKKworZXhwZWN0X2JyYW5jaCgpIHsKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzICIkMSIgPmFjdHVhbCAmJgorCWVjaG8gIiQyIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCitleHBlY3RfZGVsZXRlZCgpIHsKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHJlcG8nICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gZm9vLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgYnJhbmNoIHZpYSBAey0xfScgJworCWdpdCBicmFuY2ggcHJldmlvdXMgb25lICYmCisKKwlnaXQgY2hlY2tvdXQgcHJldmlvdXMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgYnJhbmNoIC1mIEB7LTF9IHR3byAmJgorCWV4cGVjdF9icmFuY2ggcHJldmlvdXMgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBicmFuY2ggdmlhIGxvY2FsIEB7dXBzdHJlYW19JyAnCisJZ2l0IGJyYW5jaCBsb2NhbCBvbmUgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPWxvY2FsICYmCisKKwlnaXQgYnJhbmNoIC1mIEB7dXBzdHJlYW19IHR3byAmJgorCWV4cGVjdF9icmFuY2ggbG9jYWwgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FsbG93IHVwZGF0aW5nIGJyYW5jaCB2aWEgcmVtb3RlIEB7dXBzdHJlYW19JyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9yZW1vdGUgb25lICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz1vcmlnaW4vcmVtb3RlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1mIEB7dXBzdHJlYW19IHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYnJhbmNoIHdpdGggcHNldWRvLXF1YWxpZmllZCBuYW1lJyAnCisJZ2l0IGJyYW5jaCByZWZzL2hlYWRzL3F1YWxpZmllZCB0d28gJiYKKwlleHBlY3RfYnJhbmNoIHJlZnMvaGVhZHMvcmVmcy9oZWFkcy9xdWFsaWZpZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBicmFuY2ggdmlhIEB7LTF9JyAnCisJZ2l0IGJyYW5jaCBwcmV2aW91cy1kZWwgJiYKKworCWdpdCBjaGVja291dCBwcmV2aW91cy1kZWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgYnJhbmNoIC1EIEB7LTF9ICYmCisJZXhwZWN0X2RlbGV0ZWQgcHJldmlvdXMtZGVsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBicmFuY2ggdmlhIGxvY2FsIEB7dXBzdHJlYW19JyAnCisJZ2l0IGJyYW5jaCBsb2NhbC1kZWwgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPWxvY2FsLWRlbCAmJgorCisJZ2l0IGJyYW5jaCAtRCBAe3Vwc3RyZWFtfSAmJgorCWV4cGVjdF9kZWxldGVkIGxvY2FsLWRlbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgYnJhbmNoIHZpYSByZW1vdGUgQHt1cHN0cmVhbX0nICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL3JlbW90ZS1kZWwgdHdvICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz1vcmlnaW4vcmVtb3RlLWRlbCAmJgorCisJZ2l0IGJyYW5jaCAtciAtRCBAe3Vwc3RyZWFtfSAmJgorCWV4cGVjdF9kZWxldGVkIG9yaWdpbi9yZW1vdGUtZGVsCisnCisKKyMgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0d28gb2RkbHkgbmFtZWQgbG9jYWwgYnJhbmNoZXMgaGVyZS4gV2Ugd2FudCB0byBtYWtlCisjIHN1cmUgdGhhdCB3ZSBkbyBub3QgYWNjaWRlbnRhbGx5IGRlbGV0ZSBlaXRoZXIgb2YgdGhlbSwgZXZlbiBpZgorIyBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZigpIHR3ZWFrcyB0aGUgbmFtZSB0byBhdm9pZCBhbWJpZ3VpdHkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgQHt1cHN0cmVhbX0gZXhwYW5zaW9uIG1hdGNoZXMgLXIgb3B0aW9uJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9yZW1vdGUtZGVsIHR3byAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89b3JpZ2luL3JlbW90ZS1kZWwgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL29yaWdpbi9yZW1vdGUtZGVsIHR3byAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvcmVtb3Rlcy9vcmlnaW4vcmVtb3RlLWRlbCB0d28gJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLUQgQHt1cHN0cmVhbX0gJiYKKwlleHBlY3RfYnJhbmNoIHJlZnMvaGVhZHMvb3JpZ2luL3JlbW90ZS1kZWwgdHdvICYmCisJZXhwZWN0X2JyYW5jaCByZWZzL2hlYWRzL3JlbW90ZXMvb3JpZ2luL3JlbW90ZS1kZWwgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FsbG93IGRlbGV0aW5nIHJlbW90ZSBicmFuY2ggdmlhIEB7LTF9JyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9wcmV2aW91cyBvbmUgJiYKKworCWdpdCBjaGVja291dCAtYiBvcmlnaW4vcHJldmlvdXMgdHdvICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtciAtRCBAey0xfSAmJgorCWV4cGVjdF9icmFuY2ggcmVmcy9yZW1vdGVzL29yaWdpbi9wcmV2aW91cyBvbmUgJiYKKwlleHBlY3RfYnJhbmNoIHJlZnMvaGVhZHMvb3JpZ2luL3ByZXZpb3VzIHR3bworJworCisjIFRoZSB0aGluZyB3ZSBhcmUgdGVzdGluZyBoZXJlIGlzIHRoYXQgIkAiIGlzIHRoZSByZWFsIGJyYW5jaCByZWZzL2hlYWRzL0AsCisjIGFuZCBub3QgcmVmcy9oZWFkcy9IRUFELiBUaGVzZSB0ZXN0cyBzaG91bGQgbm90IGltcGx5IHRoYXQgcmVmcy9oZWFkcy9AIGlzIGEKKyMgc2FuZSB0aGluZywgYnV0IGl0IF9pc18gdGVjaG5pY2FsbHkgYWxsb3dlZCBmb3Igbm93LiBJZiB3ZSBkaXNhbGxvdyBpdCwgdGhlc2UKKyMgY2FuIGJlIHN3aXRjaGVkIHRvIHRlc3RfbXVzdF9mYWlsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGJyYW5jaCBuYW1lZCAiQCInICcKKwlnaXQgYnJhbmNoIC1mIEAgb25lICYmCisJZXhwZWN0X2JyYW5jaCByZWZzL2hlYWRzL0Agb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSBicmFuY2ggbmFtZWQgIkAiJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9AIHR3byAmJgorCWdpdCBicmFuY2ggLUQgQCAmJgorCWV4cGVjdF9kZWxldGVkIHJlZnMvaGVhZHMvQAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBkb2VzIG5vdCB0cmVhdCByZW1vdGUgQHt1cHN0cmVhbX0gYXMgYSBicmFuY2gnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2NoZWNrb3V0IG9uZSAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89b3JpZ2luL2NoZWNrb3V0ICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9vcmlnaW4vY2hlY2tvdXQgdHdvICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9yZW1vdGVzL29yaWdpbi9jaGVja291dCB0d28gJiYKKworCWdpdCBjaGVja291dCBAe3Vwc3RyZWFtfSAmJgorCWV4cGVjdF9icmFuY2ggSEVBRCBvbmUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjA1LWJyYW5jaC1jb2xvci5zaCBiL3QvdDMyMDUtYnJhbmNoLWNvbG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmMWUxNmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjA1LWJyYW5jaC1jb2xvci5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgYnJhbmNoIG91dHB1dCBjb2xvcmluZycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgc29tZSBzYW1wbGUgYnJhbmNoZXMnICcKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBIRUFEICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9vdGhlciBIRUFECisnCisKKyMgY2hvb3NlIG5vbi1kZWZhdWx0IGNvbG9ycyB0byBtYWtlIHN1cmUgY29uZmlnCisjIGlzIHRha2luZyBlZmZlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzb21lIGNvbG9yIGNvbmZpZycgJworCWdpdCBjb25maWcgY29sb3IuYnJhbmNoLmxvY2FsIGJsdWUgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmJyYW5jaC5yZW1vdGUgeWVsbG93ICYmCisJZ2l0IGNvbmZpZyBjb2xvci5icmFuY2guY3VycmVudCBjeWFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZ3VsYXIgb3V0cHV0IHNob3dzIGNvbG9ycycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkqIDxDWUFOPm1hc3RlcjxSRVNFVD4KKwkgIDxCTFVFPm90aGVyPFJFU0VUPgorCSAgPFlFTExPVz5yZW1vdGVzL29yaWdpbi9tYXN0ZXI8UkVTRVQ+CisJRU9GCisJZ2l0IGJyYW5jaCAtLWNvbG9yIC1hID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyYm9zZSBvdXRwdXQgc2hvd3MgY29sb3JzJyAnCisJb2lkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJKiA8Q1lBTj5tYXN0ZXIgICAgICAgICAgICAgICA8UkVTRVQ+ICRvaWQgZm9vCisJICA8QkxVRT5vdGhlciAgICAgICAgICAgICAgICA8UkVTRVQ+ICRvaWQgZm9vCisJICA8WUVMTE9XPnJlbW90ZXMvb3JpZ2luL21hc3RlcjxSRVNFVD4gJG9pZCBmb28KKwlFT0YKKwlnaXQgYnJhbmNoIC0tY29sb3IgLXYgLWEgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDYtcmFuZ2UtZGlmZi5zaCBiL3QvdDMyMDYtcmFuZ2UtZGlmZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZDgwOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzIwNi1yYW5nZS1kaWZmLnNoCkBAIC0wLDAgKzEsNzE0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmFuZ2UtZGlmZiB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIHJhbmdlLWRpZmYncyBoZXVyaXN0aWNzLCB0ZXN0X2NvbW1pdCBkb2VzIG1vcmUKKyMgaGFybSB0aGFuIGdvb2QuICBXZSBuZWVkIHNvbWUgcmVhbCBoaXN0b3J5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBmYXN0LWltcG9ydCA8IiRURVNUX0RJUkVDVE9SWSIvdDMyMDYvaGlzdG9yeS5leHBvcnQgJiYKKwl0ZXN0X29pZF9jYWNoZSA8PC1cRU9GCisJIyB0b3BpYworCXQxIHNoYTE6NGRlNDU3ZAorCXQyIHNoYTE6ZmNjY2UyMgorCXQzIHNoYTE6MTQ3ZTY0ZQorCXQ0IHNoYTE6YTYzZTk5MgorCXQxIHNoYTI1NjpiODlmOGI5CisJdDIgc2hhMjU2OjVmMTJhYWQKKwl0MyBzaGEyNTY6ZWE4YjI3MworCXQ0IHNoYTI1NjoxNGI3MzM2CisKKwkjIHVubW9kaWZpZWQKKwl1MSBzaGExOjM1YjliMjUKKwl1MiBzaGExOmRlMzQ1YWIKKwl1MyBzaGExOjlhZjY2NTQKKwl1NCBzaGExOjI5MDFmNzcKKwl1MSBzaGEyNTY6ZTM3MzFiZQorCXUyIHNoYTI1NjoxNGZhZGY4CisJdTMgc2hhMjU2OjczNmM0YmMKKwl1NCBzaGEyNTY6NjczZTc3ZAorCisJIyByZW9yZGVyZWQKKwlyMSBzaGExOmFjYTE3N2EKKwlyMiBzaGExOjE0YWQ2MjkKKwlyMyBzaGExOmVlNTgyMDgKKwlyNCBzaGExOjMwN2IyN2EKKwlyMSBzaGEyNTY6ZjU5ZDNhYQorCXIyIHNoYTI1NjpmYjI2MWE4CisJcjMgc2hhMjU2OmNiMjY0OWIKKwlyNCBzaGEyNTY6OTU4NTc3ZQorCisJIyByZW1vdmVkIChkZWxldGVkKQorCWQxIHNoYTE6NzY1NzE1OQorCWQyIHNoYTE6NDNkODRkMworCWQzIHNoYTE6YTc0MDM5NgorCWQxIHNoYTI1NjplMzEyNTEzCisJZDIgc2hhMjU2OmViMTkyNTgKKwlkMyBzaGEyNTY6MWNjYjNjMQorCisJIyBhZGRlZAorCWExIHNoYTE6MjcxNjAyMgorCWEyIHNoYTE6YjYyYWNjZAorCWEzIHNoYTE6ZGY0NmNmYQorCWE0IHNoYTE6M2U2NDU0OAorCWE1IHNoYTE6MTJiNDA2MworCWExIHNoYTI1NjpkNzI0ZjRkCisJYTIgc2hhMjU2OjFkZTc3NjIKKwlhMyBzaGEyNTY6ZTE1OTQzMQorCWE0IHNoYTI1NjpiM2U0ODNjCisJYTUgc2hhMjU2OjkwODY2YTcKKworCSMgcmViYXNlZAorCWIxIHNoYTE6Y2M5YzQ0MworCWIyIHNoYTE6YzVkOTY0MQorCWIzIHNoYTE6MjhjYzJiNgorCWI0IHNoYTE6NTYyOGFiNworCWI1IHNoYTE6YTMxYjEyZQorCWIxIHNoYTI1NjphMWE4NzE3CisJYjIgc2hhMjU2OjIwYTU4NjIKKwliMyBzaGEyNTY6NTg3MTcyYQorCWI0IHNoYTI1NjoyNzIxYzVkCisJYjUgc2hhMjU2OjdiNTc4NjQKKworCSMgY2hhbmdlZAorCWMxIHNoYTE6YTRiMzMzMworCWMyIHNoYTE6ZjUxZDM3MAorCWMzIHNoYTE6MDU1OTU1NgorCWM0IHNoYTE6ZDk2NmM1YworCWMxIHNoYTI1NjpmOGMyYjlkCisJYzIgc2hhMjU2OjNmYjYzMTgKKwljMyBzaGEyNTY6MTY4YWI2OAorCWM0IHNoYTI1NjozNTI2NTM5CisKKwkjIGNoYW5nZWQtbWVzc2FnZQorCW0xIHNoYTE6ZjY4NjAyNAorCW0yIHNoYTE6NGFiMDY3ZAorCW0zIHNoYTE6YjljYjk1NgorCW00IHNoYTE6OGFkZDVmMQorCW0xIHNoYTI1NjozMWU2MjgxCisJbTIgc2hhMjU2OmEwNmJmMWIKKwltMyBzaGEyNTY6ODJkYzY1NAorCW00IHNoYTI1Njo0ODQ3MGM1CisKKwkjIHJlbmFtZWQKKwluMSBzaGExOmYyNThkNzUKKwluMiBzaGExOjAxN2I2MmQKKwluMyBzaGExOjNjZTdhZjYKKwluNCBzaGExOjFlNjIyNmIKKwluMSBzaGEyNTY6YWQ1MjExNAorCW4yIHNoYTI1NjozYjU0YzhmCisJbjMgc2hhMjU2OjNiMGE2NDQKKwluNCBzaGEyNTY6ZTQ2MTY1MworCisJIyBtb2RlIGNoYW5nZQorCW8xIHNoYTE6NGQzOWNiMworCW8yIHNoYTE6MjZjMTA3ZgorCW8zIHNoYTE6NGMxZTBmNQorCW8xIHNoYTI1NjpkMGRkNTk4CisJbzIgc2hhMjU2OmM0YTI3OWUKKwlvMyBzaGEyNTY6Nzg0NTlkNworCisJIyBhZGRlZCBhbmQgcmVtb3ZlZAorCXMxIHNoYTE6MDk2YjFiYQorCXMyIHNoYTE6ZDkyZTY5OAorCXMzIHNoYTE6OWExZGI0ZAorCXM0IHNoYTE6ZmVhM2I1YworCXMxIHNoYTI1NjphN2Y5MTM0CisJczIgc2hhMjU2OmI0YzI1ODAKKwlzMyBzaGEyNTY6MWQ2MmFhMgorCXM0IHNoYTI1Njo0ODE2MGU4CisKKwkjIEVtcHR5IGRlbGltaXRlciAoaW5jbHVkZWQgc28gbGluZXMgbWF0Y2ggbmVhdGx5KQorCV9fIHNoYTE6LS0tLS0tLQorCV9fIHNoYTI1NjotLS0tLS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBBLi5CIEEuLkMgKHVubW9kaWZpZWQpJyAnCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIuLnRvcGljIG1hc3Rlci4udW5tb2RpZmllZCBcCisJCT5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCB1MSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgdTIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSA9IDM6ICAkKHRlc3Rfb2lkIHUzKSBzLzExL0IvCisJNDogICQodGVzdF9vaWQgdDQpID0gNDogICQodGVzdF9vaWQgdTQpIHMvMTIvQi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBCLi4uQyAodW5tb2RpZmllZCknICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIHRvcGljLi4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJIyBzYW1lICJleHBlY3QiIGFzIGFib3ZlCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgQSBCIEMgKHVubW9kaWZpZWQpJyAnCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIgdG9waWMgdW5tb2RpZmllZCA+YWN0dWFsICYmCisJIyBzYW1lICJleHBlY3QiIGFzIGFib3ZlCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cml2aWFsIHJlb3JkZXJpbmcnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyByZW9yZGVyZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHIxKSBzLzUvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAyOiAgJCh0ZXN0X29pZCByMikgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDM6ICAkKHRlc3Rfb2lkIHIzKSBzLzEyL0IvCisJMjogICQodGVzdF9vaWQgdDIpID0gNDogICQodGVzdF9vaWQgcjQpIHMvNC9BLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlZCBhIGNvbW1pdCcgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyIHRvcGljIHJlbW92ZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGQxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPCAtOiAgJCh0ZXN0X29pZCBfXykgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpID0gMjogICQodGVzdF9vaWQgZDIpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgPSAzOiAgJCh0ZXN0X29pZCBkMykgcy8xMi9CLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgYSBjb21taXQnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyBhZGRlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYTEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGEyKSBzLzQvQS8KKwktOiAgJCh0ZXN0X29pZCBfXykgPiAzOiAgJCh0ZXN0X29pZCBhMykgcy82L0EvCisJMzogICQodGVzdF9vaWQgdDMpID0gNDogICQodGVzdF9vaWQgYTQpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgPSA1OiAgJCh0ZXN0X29pZCBhNSkgcy8xMi9CLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IGJhc2UsIEEgQiBDJyAnCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIgdG9waWMgcmViYXNlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYjEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGIyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCBiMykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIGI0KSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgYmFzZSwgQi4uLkMnICcKKwkjIHRoaXMgc3ludGF4IGluY2x1ZGVzIHRoZSBjb21taXRzIGZyb20gbWFzdGVyIQorCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgdG9waWMuLi5yZWJhc2VkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwktOiAgJCh0ZXN0X29pZCBfXykgPiAxOiAgJCh0ZXN0X29pZCBiNSkgdW5yZWxhdGVkCisJMTogICQodGVzdF9vaWQgdDEpID0gMjogICQodGVzdF9vaWQgYjEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDM6ICAkKHRlc3Rfb2lkIGIyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSA0OiAgJCh0ZXN0X29pZCBiMykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDU6ICAkKHRlc3Rfb2lkIGI0KSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIGNvbW1pdCcgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgdG9waWMuLi5jaGFuZ2VkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBjMSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYzIpIHMvNC9BLworCTM6ICAkKHRlc3Rfb2lkIHQzKSAhIDM6ICAkKHRlc3Rfb2lkIGMzKSBzLzExL0IvCisJICAgIEBAIGZpbGU6IEEKKwkgICAgICA5CisJICAgICAgMTAKKwkgICAgIC0xMQorCSAgICAtK0IKKwkgICAgKytCQgorCSAgICAgIDEyCisJICAgICAgMTMKKwkgICAgICAxNAorCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIGM0KSBzLzEyL0IvCisJICAgIEBAIGZpbGUKKwkgICAgIEBAIGZpbGU6IEEKKwkgICAgICA5CisJICAgICAgMTAKKwkgICAgLSBCCisJICAgICsgQkIKKwkgICAgIC0xMgorCSAgICAgK0IKKwkgICAgICAxMworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlZCBjb21taXQgd2l0aCAtLW5vLXBhdGNoIGRpZmYgb3B0aW9uJyAnCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLW5vLXBhdGNoIHRvcGljLi4uY2hhbmdlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYzEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGMyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgISAzOiAgJCh0ZXN0X29pZCBjMykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIGM0KSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIGNvbW1pdCB3aXRoIC0tc3RhdCBkaWZmIG9wdGlvbicgJworCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdGF0IHRvcGljLi4uY2hhbmdlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYzEpIHMvNS9BLworCSAgICAgYSA9PiBiIHwgMAorCSAgICAgMSBmaWxlIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCBjMikgcy80L0EvCisJICAgICBhID0+IGIgfCAwCisJICAgICAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCTM6ICAkKHRlc3Rfb2lkIHQzKSAhIDM6ICAkKHRlc3Rfb2lkIGMzKSBzLzExL0IvCisJICAgICBhID0+IGIgfCAwCisJICAgICAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIGM0KSBzLzEyL0IvCisJICAgICBhID0+IGIgfCAwCisJICAgICAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlZCBjb21taXQgd2l0aCBzbSBjb25maWcnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLmNoYW5nZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGMxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCBjMikgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpICEgMzogICQodGVzdF9vaWQgYzMpIHMvMTEvQi8KKwkgICAgQEAgZmlsZTogQQorCSAgICAgIDkKKwkgICAgICAxMAorCSAgICAgLTExCisJICAgIC0rQgorCSAgICArK0JCCisJICAgICAgMTIKKwkgICAgICAxMworCSAgICAgIDE0CisJNDogICQodGVzdF9vaWQgdDQpICEgNDogICQodGVzdF9vaWQgYzQpIHMvMTIvQi8KKwkgICAgQEAgZmlsZQorCSAgICAgQEAgZmlsZTogQQorCSAgICAgIDkKKwkgICAgICAxMAorCSAgICAtIEIKKwkgICAgKyBCQgorCSAgICAgLTEyCisJICAgICArQgorCSAgICAgIDEzCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWVkIGZpbGUnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLnJlbmFtZWQtZmlsZSA+YWN0dWFsICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgbjEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSAhIDI6ICAkKHRlc3Rfb2lkIG4yKSBzLzQvQS8KKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWkF1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorCSAgICBaCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgLSAgICBzLzQvQS8KKwkgICAgKyAgICBzLzQvQS8gKyByZW5hbWUgZmlsZQorCSAgICBaCisJICAgIC0gIyMgZmlsZSAjIworCSAgICArICMjIGZpbGUgPT4gcmVuYW1lZC1maWxlICMjCisJICAgIFpAQAorCSAgICBaIDEKKwkgICAgWiAyCisJMzogICQodGVzdF9vaWQgdDMpICEgMzogICQodGVzdF9vaWQgbjMpIHMvMTEvQi8KKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWiAjIyBDb21taXQgbWVzc2FnZSAjIworCSAgICBaICAgIHMvMTEvQi8KKwkgICAgWgorCSAgICAtICMjIGZpbGUgIyMKKwkgICAgLUBAIGZpbGU6IEEKKwkgICAgKyAjIyByZW5hbWVkLWZpbGUgIyMKKwkgICAgK0BAIHJlbmFtZWQtZmlsZTogQQorCSAgICBaIDgKKwkgICAgWiA5CisJICAgIFogMTAKKwk0OiAgJCh0ZXN0X29pZCB0NCkgISA0OiAgJCh0ZXN0X29pZCBuNCkgcy8xMi9CLworCSAgICBAQCBNZXRhZGF0YQorCSAgICBaICMjIENvbW1pdCBtZXNzYWdlICMjCisJICAgIFogICAgcy8xMi9CLworCSAgICBaCisJICAgIC0gIyMgZmlsZSAjIworCSAgICAtQEAgZmlsZTogQQorCSAgICArICMjIHJlbmFtZWQtZmlsZSAjIworCSAgICArQEAgcmVuYW1lZC1maWxlOiBBCisJICAgIFogOQorCSAgICBaIDEwCisJICAgIFogQgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSB3aXRoIG1vZGUgb25seSBjaGFuZ2UnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLm1vZGUtb25seS1jaGFuZ2UgPmFjdHVhbCAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQyKSAhIDE6ICAkKHRlc3Rfb2lkIG8xKSBzLzQvQS8KKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWkF1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorCSAgICBaCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgLSAgICBzLzQvQS8KKwkgICAgKyAgICBzLzQvQS8gKyBhZGQgb3RoZXItZmlsZQorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAKKwkgICAgQEAgZmlsZQorCSAgICBaIEEKKwkgICAgWiA2CisJICAgIFogNworCSAgICArCisJICAgICsgIyMgb3RoZXItZmlsZSAobmV3KSAjIworCTI6ICAkKHRlc3Rfb2lkIHQzKSAhIDI6ICAkKHRlc3Rfb2lkIG8yKSBzLzExL0IvCisJICAgIEBAIE1ldGFkYXRhCisJICAgIFpBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4KKwkgICAgWgorCSAgICBaICMjIENvbW1pdCBtZXNzYWdlICMjCisJICAgIC0gICAgcy8xMS9CLworCSAgICArICAgIHMvMTEvQi8gKyBtb2RlIGNoYW5nZSBvdGhlci1maWxlCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJICAgIEBAIGZpbGU6IEEKKwkgICAgWiAxMgorCSAgICBaIDEzCisJICAgIFogMTQKKwkgICAgKworCSAgICArICMjIG90aGVyLWZpbGUgKG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUpICMjCisJMzogICQodGVzdF9vaWQgdDQpID0gMzogICQodGVzdF9vaWQgbzMpIHMvMTIvQi8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYWRkZWQgYW5kIGxhdGVyIHJlbW92ZWQnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLmFkZGVkLXJlbW92ZWQgPmFjdHVhbCAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHMxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgISAyOiAgJCh0ZXN0X29pZCBzMikgcy80L0EvCisJICAgIEBAIE1ldGFkYXRhCisJICAgIFpBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4KKwkgICAgWgorCSAgICBaICMjIENvbW1pdCBtZXNzYWdlICMjCisJICAgIC0gICAgcy80L0EvCisJICAgICsgICAgcy80L0EvICsgbmV3LWZpbGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBACisJICAgIEBAIGZpbGUKKwkgICAgWiBBCisJICAgIFogNgorCSAgICBaIDcKKwkgICAgKworCSAgICArICMjIG5ldy1maWxlIChuZXcpICMjCisJMzogICQodGVzdF9vaWQgdDMpICEgMzogICQodGVzdF9vaWQgczMpIHMvMTEvQi8KKwkgICAgQEAgTWV0YWRhdGEKKwkgICAgWkF1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorCSAgICBaCisJICAgIFogIyMgQ29tbWl0IG1lc3NhZ2UgIyMKKwkgICAgLSAgICBzLzExL0IvCisJICAgICsgICAgcy8xMS9CLyArIHJlbW92ZSBmaWxlCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJICAgIEBAIGZpbGU6IEEKKwkgICAgWiAxMgorCSAgICBaIDEzCisJICAgIFogMTQKKwkgICAgKworCSAgICArICMjIG5ldy1maWxlIChkZWxldGVkKSAjIworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIHM0KSBzLzEyL0IvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb21taXRzIG9uIG9uZSBzaWRlJyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJuZXcgbWVzc2FnZSIgJiYKKwlnaXQgcmFuZ2UtZGlmZiBtYXN0ZXIgSEVBREB7MX0gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIG1lc3NhZ2UnICcKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIHRvcGljLi4uY2hhbmdlZC1tZXNzYWdlID5hY3R1YWwgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBtMSkgcy81L0EvCisJMjogICQodGVzdF9vaWQgdDIpICEgMjogICQodGVzdF9vaWQgbTIpIHMvNC9BLworCSAgICBAQCBNZXRhZGF0YQorCSAgICBaICMjIENvbW1pdCBtZXNzYWdlICMjCisJICAgIFogICAgcy80L0EvCisJICAgIFoKKwkgICAgKyAgICBBbHNvIGEgc2lsbHkgY29tbWVudCBoZXJlIQorCSAgICArCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAKKwkgICAgWiAxCisJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgbTMpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgPSA0OiAgJCh0ZXN0X29pZCBtNCkgcy8xMi9CLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHVhbC1jb2xvcmluZycgJworCXNlZCAtZSAic3xeOnx8IiA+ZXhwZWN0IDw8LUVPRiAmJgorCTo8WUVMTE9XPjE6ICAkKHRlc3Rfb2lkIGMxKSA9IDE6ICAkKHRlc3Rfb2lkIG0xKSBzLzUvQS88UkVTRVQ+CisJOjxSRUQ+MjogICQodGVzdF9vaWQgYzIpIDxSRVNFVD48WUVMTE9XPiE8UkVTRVQ+PEdSRUVOPiAyOiAgJCh0ZXN0X29pZCBtMik8UkVTRVQ+PFlFTExPVz4gcy80L0EvPFJFU0VUPgorCTogICAgPFJFVkVSU0U+PENZQU4+QEA8UkVTRVQ+IDxSRVNFVD5NZXRhZGF0YTxSRVNFVD4KKwk6ICAgICAgIyMgQ29tbWl0IG1lc3NhZ2UgIyM8UkVTRVQ+CisJOiAgICAgICAgIHMvNC9BLzxSRVNFVD4KKwk6ICAgICA8UkVTRVQ+CisJOiAgICA8UkVWRVJTRT48R1JFRU4+KzxSRVNFVD48Qk9MRD4gICAgQWxzbyBhIHNpbGx5IGNvbW1lbnQgaGVyZSE8UkVTRVQ+CisJOiAgICA8UkVWRVJTRT48R1JFRU4+KzxSRVNFVD4KKwk6ICAgICAgIyMgZmlsZSAjIzxSRVNFVD4KKwk6ICAgIDxDWUFOPiBAQDxSRVNFVD4KKwk6ICAgICAgMTxSRVNFVD4KKwk6PFJFRD4zOiAgJCh0ZXN0X29pZCBjMykgPFJFU0VUPjxZRUxMT1c+ITxSRVNFVD48R1JFRU4+IDM6ICAkKHRlc3Rfb2lkIG0zKTxSRVNFVD48WUVMTE9XPiBzLzExL0IvPFJFU0VUPgorCTogICAgPFJFVkVSU0U+PENZQU4+QEA8UkVTRVQ+IDxSRVNFVD5maWxlOiBBPFJFU0VUPgorCTogICAgICA5PFJFU0VUPgorCTogICAgICAxMDxSRVNFVD4KKwk6ICAgIDxSRUQ+IC0xMTxSRVNFVD4KKwk6ICAgIDxSRVZFUlNFPjxSRUQ+LTxSRVNFVD48RkFJTlQ7R1JFRU4+K0JCPFJFU0VUPgorCTogICAgPFJFVkVSU0U+PEdSRUVOPis8UkVTRVQ+PEJPTEQ7R1JFRU4+K0I8UkVTRVQ+CisJOiAgICAgIDEyPFJFU0VUPgorCTogICAgICAxMzxSRVNFVD4KKwk6ICAgICAgMTQ8UkVTRVQ+CisJOjxSRUQ+NDogICQodGVzdF9vaWQgYzQpIDxSRVNFVD48WUVMTE9XPiE8UkVTRVQ+PEdSRUVOPiA0OiAgJCh0ZXN0X29pZCBtNCk8UkVTRVQ+PFlFTExPVz4gcy8xMi9CLzxSRVNFVD4KKwk6ICAgIDxSRVZFUlNFPjxDWUFOPkBAPFJFU0VUPiA8UkVTRVQ+ZmlsZTxSRVNFVD4KKwk6ICAgIDxDWUFOPiBAQCBmaWxlOiBBPFJFU0VUPgorCTogICAgICA5PFJFU0VUPgorCTogICAgICAxMDxSRVNFVD4KKwk6ICAgIDxSRVZFUlNFPjxSRUQ+LTxSRVNFVD48RkFJTlQ+IEJCPFJFU0VUPgorCTogICAgPFJFVkVSU0U+PEdSRUVOPis8UkVTRVQ+PEJPTEQ+IEI8UkVTRVQ+CisJOiAgICA8UkVEPiAtMTI8UkVTRVQ+CisJOiAgICA8R1JFRU4+ICtCPFJFU0VUPgorCTogICAgICAxMzxSRVNFVD4KKwlFT0YKKwlnaXQgcmFuZ2UtZGlmZiBjaGFuZ2VkLi4uY2hhbmdlZC1tZXNzYWdlIC0tY29sb3IgLS1kdWFsLWNvbG9yID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCA8YWN0dWFsLnJhdyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZm9yIHByZXYgaW4gdG9waWMgbWFzdGVyLi50b3BpYworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmPSRwcmV2IiAnCisJCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLS1yYW5nZS1kaWZmPSRwcmV2IFwKKwkJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gMDAwPy0qIiAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCQl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwkJZ3JlcCAiPSAxOiAuKiBzLzUvQSIgMDAwMC0qICYmCisJCWdyZXAgIj0gMjogLiogcy80L0EiIDAwMDAtKiAmJgorCQlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJCWdyZXAgIj0gNDogLiogcy8xMi9CIiAwMDAwLSoKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgYXMgY29tbWVudGFyeScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmPUhFQUR+MSBIRUFEfjEgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gMDAwMS0qIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXlJhbmdlLWRpZmY6JCIgMDAwMS0qICYmCisJZ3JlcCAiPiAxOiAuKiBuZXcgbWVzc2FnZSIgMDAwMS0qCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhbmdlLWRpZmYgb3ZlcnJpZGVzIGRpZmYubm9wcmVmaXggaW50ZXJuYWxseScgJworCWdpdCAtYyBkaWZmLm5vcHJlZml4PXRydWUgcmFuZ2UtZGlmZiBIRUFEXi4uLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYW5nZS1kaWZmIGNvbXBhcmVzIG5vdGVzIGJ5IGRlZmF1bHQnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkIFwKKwkJPmFjdHVhbCAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHUxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCB1Mikgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgdTMpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgISA0OiAgJCh0ZXN0X29pZCB1NCkgcy8xMi9CLworCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAjIworCSAgICAtICAgIHRvcGljIG5vdGUKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhbmdlLWRpZmYgd2l0aCAtLW5vLW5vdGVzJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLW5vLW5vdGVzIG1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkIFwKKwkJPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHUxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCB1Mikgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgdTMpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgPSA0OiAgJCh0ZXN0X29pZCB1NCkgcy8xMi9CLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2UtZGlmZiB3aXRoIG11bHRpcGxlIC0tbm90ZXMnICcKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTEgYWRkIC1tICJ0b3BpYyBub3RlMSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTEgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUxIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZj1ub3RlMSByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMiBhZGQgLW0gInRvcGljIG5vdGUyIiB0b3BpYyAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMiBhZGQgLW0gInVubW9kaWZpZWQgbm90ZTIiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLW5vdGVzPW5vdGUxIC0tbm90ZXM9bm90ZTIgbWFzdGVyLi50b3BpYyBtYXN0ZXIuLnVubW9kaWZpZWQgXAorCQk+YWN0dWFsICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgdTEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIHUyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCB1Mykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIHU0KSBzLzEyL0IvCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzIChub3RlMSkgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlMQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZTEKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgKG5vdGUyKSAjIworCSAgICAtICAgIHRvcGljIG5vdGUyCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlMgorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiBkb2VzIG5vdCBjb21wYXJlIG5vdGVzIGJ5IGRlZmF1bHQnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiPSA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCSEgZ3JlcCAiTm90ZXMiIDAwMDAtKiAmJgorCSEgZ3JlcCAibm90ZSIgMDAwMC0qCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgd2l0aCAtLW5vLW5vdGVzJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLW5vdGVzIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiPSA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCSEgZ3JlcCAiTm90ZXMiIDAwMDAtKiAmJgorCSEgZ3JlcCAibm90ZSIgMDAwMC0qCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgd2l0aCAtLW5vdGVzJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vdGVzIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiISA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAjIworCSAgICAtICAgIHRvcGljIG5vdGUKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwlzZWQgIi9AQCBDb21taXQgbWVzc2FnZS8sL0BAIGZpbGU6IEEvIWQiIDAwMDAtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmIHdpdGggZm9ybWF0Lm5vdGVzIGNvbmZpZycgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC5ub3RlcyB0cnVlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtLXJhbmdlLWRpZmY9JHByZXYgXAorCQltYXN0ZXIuLnVubW9kaWZpZWQgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gMDAwPy0qIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXlJhbmdlLWRpZmY6JCIgMDAwMC0qICYmCisJZ3JlcCAiPSAxOiAuKiBzLzUvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAyOiAuKiBzLzQvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAzOiAuKiBzLzExL0IiIDAwMDAtKiAmJgorCWdyZXAgIiEgNDogLiogcy8xMi9CIiAwMDAwLSogJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkgICAgQEAgQ29tbWl0IG1lc3NhZ2UKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJRU9GCisJc2VkICIvQEAgQ29tbWl0IG1lc3NhZ2UvLC9AQCBmaWxlOiBBLyFkIiAwMDAwLSogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiB3aXRoIG11bHRpcGxlIG5vdGVzJyAnCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIGFkZCAtbSAidG9waWMgbm90ZTEiIHRvcGljICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIGFkZCAtbSAidW5tb2RpZmllZCBub3RlMSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWY9bm90ZTEgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTIgYWRkIC1tICJ0b3BpYyBub3RlMiIgdG9waWMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTIgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUyIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZj1ub3RlMiByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1ub3Rlcz1ub3RlMSAtLW5vdGVzPW5vdGUyIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiISA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAobm90ZTEpICMjCisJICAgIC0gICAgdG9waWMgbm90ZTEKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUxCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzIChub3RlMikgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlMgorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZTIKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwlzZWQgIi9AQCBDb21taXQgbWVzc2FnZS8sL0BAIGZpbGU6IEEvIWQiIDAwMDAtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDYvaGlzdG9yeS5leHBvcnQgYi90L3QzMjA2L2hpc3RvcnkuZXhwb3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODA4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjA2L2hpc3RvcnkuZXhwb3J0CkBAIC0wLDAgKzEsNzA5IEBACitibG9iCittYXJrIDoxCitkYXRhIDUxCisxCisyCiszCis0Cis1Cis2Cis3Cis4Cis5CisxMAorMTEKKzEyCisxMworMTQKKzE1CisxNgorMTcKKzE4CisxOQorMjAKKworcmVzZXQgcmVmcy9oZWFkcy9yZW5hbWVkLWZpbGUKK2NvbW1pdCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQorbWFyayA6MgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQyNDkyMSArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NDcyNCArMDIwMAorZGF0YSA4Citpbml0aWFsCitNIDEwMDY0NCA6MSBmaWxlCisKK2Jsb2IKK21hcmsgOjMKK2RhdGEgNTEKKzEKKzIKKzMKKzQKK0EKKzYKKzcKKzgKKzkKKzEwCisxMQorMTIKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCitjb21taXQgcmVmcy9oZWFkcy9tb2RlLW9ubHktY2hhbmdlCittYXJrIDo0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitkYXRhIDcKK3MvNS9BLworZnJvbSA6MgorTSAxMDA2NDQgOjMgZmlsZQorCitibG9iCittYXJrIDo1CitkYXRhIDUxCisxCisyCiszCitBCitBCis2Cis3Cis4Cis5CisxMAorMTEKKzEyCisxMworMTQKKzE1CisxNgorMTcKKzE4CisxOQorMjAKKworY29tbWl0IHJlZnMvaGVhZHMvdG9waWMKK21hcmsgOjYKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2RhdGEgNworcy80L0EvCitmcm9tIDo0CitNIDEwMDY0NCA6NSBmaWxlCisKK2Jsb2IKK21hcmsgOjcKK2RhdGEgNTAKKzEKKzIKKzMKK0EKK0EKKzYKKzcKKzgKKzkKKzEwCitCCisxMgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL3RvcGljCittYXJrIDo4CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitkYXRhIDgKK3MvMTEvQi8KK2Zyb20gOjYKK00gMTAwNjQ0IDo3IGZpbGUKKworYmxvYgorbWFyayA6OQorZGF0YSA0OQorMQorMgorMworQQorQQorNgorNworOAorOQorMTAKK0IKK0IKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCitjb21taXQgcmVmcy9oZWFkcy90b3BpYworbWFyayA6MTAKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6OAorTSAxMDA2NDQgOjkgZmlsZQorCitibG9iCittYXJrIDoxMQorZGF0YSAxMAordW5yZWxhdGVkCisKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorbWFyayA6MTIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUxMjcgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUxMjcgKzAyMDAKK2RhdGEgMTAKK3VucmVsYXRlZAorZnJvbSA6MgorTSAxMDA2NDQgOjExIG90aGVyZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9yZWJhc2VkCittYXJrIDoxMworYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAxNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTEzNyArMDIwMAorZGF0YSA3CitzLzUvQS8KK2Zyb20gOjEyCitNIDEwMDY0NCA6MyBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlYmFzZWQKK21hcmsgOjE0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDI0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MTM4ICswMjAwCitkYXRhIDcKK3MvNC9BLworZnJvbSA6MTMKK00gMTAwNjQ0IDo1IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmViYXNlZAorbWFyayA6MTUKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUxMzggKzAyMDAKK2RhdGEgOAorcy8xMS9CLworZnJvbSA6MTQKK00gMTAwNjQ0IDo3IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmViYXNlZAorbWFyayA6MTYKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUxMzggKzAyMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6MTUKK00gMTAwNjQ0IDo5IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvYWRkZWQKK21hcmsgOjE3CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MzQxICswMjAwCitkYXRhIDcKK3MvNS9BLworZnJvbSA6MgorTSAxMDA2NDQgOjMgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZAorbWFyayA6MTgKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUzNDEgKzAyMDAKK2RhdGEgNworcy80L0EvCitmcm9tIDoxNworTSAxMDA2NDQgOjUgZmlsZQorCitibG9iCittYXJrIDoxOQorZGF0YSA1MQorMQorMgorMworQQorQQorQQorNworOAorOQorMTAKKzExCisxMgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL2FkZGVkCittYXJrIDoyMAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTE4NiArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTM0MSArMDIwMAorZGF0YSA3CitzLzYvQS8KK2Zyb20gOjE4CitNIDEwMDY0NCA6MTkgZmlsZQorCitibG9iCittYXJrIDoyMQorZGF0YSA1MAorMQorMgorMworQQorQQorQQorNworOAorOQorMTAKK0IKKzEyCisxMworMTQKKzE1CisxNgorMTcKKzE4CisxOQorMjAKKworY29tbWl0IHJlZnMvaGVhZHMvYWRkZWQKK21hcmsgOjIyCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MzQxICswMjAwCitkYXRhIDgKK3MvMTEvQi8KK2Zyb20gOjIwCitNIDEwMDY0NCA6MjEgZmlsZQorCitibG9iCittYXJrIDoyMworZGF0YSA0OQorMQorMgorMworQQorQQorQQorNworOAorOQorMTAKK0IKK0IKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZAorbWFyayA6MjQKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUzNDEgKzAyMDAKK2RhdGEgOAorcy8xMi9CLworZnJvbSA6MjIKK00gMTAwNjQ0IDoyMyBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3Jlb3JkZXJlZAorbWFyayA6MjUKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMTQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUzNTAgKzAyMDAKK2RhdGEgNworcy81L0EvCitmcm9tIDoyCitNIDEwMDY0NCA6MyBmaWxlCisKK2Jsb2IKK21hcmsgOjI2CitkYXRhIDUwCisxCisyCiszCis0CitBCis2Cis3Cis4Cis5CisxMAorQgorMTIKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCitjb21taXQgcmVmcy9oZWFkcy9yZW9yZGVyZWQKK21hcmsgOjI3CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MzUwICswMjAwCitkYXRhIDgKK3MvMTEvQi8KK2Zyb20gOjI1CitNIDEwMDY0NCA6MjYgZmlsZQorCitibG9iCittYXJrIDoyOAorZGF0YSA0OQorMQorMgorMworNAorQQorNgorNworOAorOQorMTAKK0IKK0IKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCitjb21taXQgcmVmcy9oZWFkcy9yZW9yZGVyZWQKK21hcmsgOjI5CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDQ0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MzUwICswMjAwCitkYXRhIDgKK3MvMTIvQi8KK2Zyb20gOjI3CitNIDEwMDY0NCA6MjggZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9yZW9yZGVyZWQKK21hcmsgOjMwCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDI0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MzUwICswMjAwCitkYXRhIDcKK3MvNC9BLworZnJvbSA6MjkKK00gMTAwNjQ0IDo5IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvY2hhbmdlZAorbWFyayA6MzEKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMTQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODU1MDcgKzAyMDAKK2RhdGEgNworcy81L0EvCitmcm9tIDoyCitNIDEwMDY0NCA6MyBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL2NoYW5nZWQKK21hcmsgOjMyCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDI0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NTA3ICswMjAwCitkYXRhIDcKK3MvNC9BLworZnJvbSA6MzEKK00gMTAwNjQ0IDo1IGZpbGUKKworYmxvYgorbWFyayA6MzMKK2RhdGEgNTEKKzEKKzIKKzMKK0EKK0EKKzYKKzcKKzgKKzkKKzEwCitCQgorMTIKKzEzCisxNAorMTUKKzE2CisxNworMTgKKzE5CisyMAorCitjb21taXQgcmVmcy9oZWFkcy9jaGFuZ2VkCittYXJrIDozNAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAzNiArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTUwNyArMDIwMAorZGF0YSA4CitzLzExL0IvCitmcm9tIDozMgorTSAxMDA2NDQgOjMzIGZpbGUKKworYmxvYgorbWFyayA6MzUKK2RhdGEgNTAKKzEKKzIKKzMKK0EKK0EKKzYKKzcKKzgKKzkKKzEwCitCQgorQgorMTMKKzE0CisxNQorMTYKKzE3CisxOAorMTkKKzIwCisKK2NvbW1pdCByZWZzL2hlYWRzL2NoYW5nZWQKK21hcmsgOjM2CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDQ0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NTA3ICswMjAwCitkYXRhIDgKK3MvMTIvQi8KK2Zyb20gOjM0CitNIDEwMDY0NCA6MzUgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9jaGFuZ2VkLW1lc3NhZ2UKK21hcmsgOjM3CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDE0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NTMwICswMjAwCitkYXRhIDcKK3MvNS9BLworZnJvbSA6MgorTSAxMDA2NDQgOjMgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9jaGFuZ2VkLW1lc3NhZ2UKK21hcmsgOjM4CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDI0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1NTMwICswMjAwCitkYXRhIDM1CitzLzQvQS8KKworQWxzbyBhIHNpbGx5IGNvbW1lbnQgaGVyZSEKK2Zyb20gOjM3CitNIDEwMDY0NCA6NSBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL2NoYW5nZWQtbWVzc2FnZQorbWFyayA6MzkKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODU1MzYgKzAyMDAKK2RhdGEgOAorcy8xMS9CLworZnJvbSA6MzgKK00gMTAwNjQ0IDo3IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvY2hhbmdlZC1tZXNzYWdlCittYXJrIDo0MAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTUzNiArMDIwMAorZGF0YSA4CitzLzEyL0IvCitmcm9tIDozOQorTSAxMDA2NDQgOjkgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy91bm1vZGlmaWVkCittYXJrIDo0MQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAxNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTYzMSArMDIwMAorZGF0YSA3CitzLzUvQS8KK2Zyb20gOjIKK00gMTAwNjQ0IDozIGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvdW5tb2RpZmllZAorbWFyayA6NDIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODU2MzEgKzAyMDAKK2RhdGEgNworcy80L0EvCitmcm9tIDo0MQorTSAxMDA2NDQgOjUgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy91bm1vZGlmaWVkCittYXJrIDo0MworYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAzNiArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTYzMiArMDIwMAorZGF0YSA4CitzLzExL0IvCitmcm9tIDo0MgorTSAxMDA2NDQgOjcgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy91bm1vZGlmaWVkCittYXJrIDo0NAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTA0NCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTYzMiArMDIwMAorZGF0YSA4CitzLzEyL0IvCitmcm9tIDo0MworTSAxMDA2NDQgOjkgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9yZW1vdmVkCittYXJrIDo0NQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAxNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NjA2MSArMDIwMAorZGF0YSA3CitzLzUvQS8KK2Zyb20gOjIKK00gMTAwNjQ0IDozIGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvcmVtb3ZlZAorbWFyayA6NDYKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODYwNjEgKzAyMDAKK2RhdGEgOAorcy8xMS9CLworZnJvbSA6NDUKK00gMTAwNjQ0IDoyNiBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlbW92ZWQKK21hcmsgOjQ3CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDQ0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg2MDYxICswMjAwCitkYXRhIDgKK3MvMTIvQi8KK2Zyb20gOjQ2CitNIDEwMDY0NCA6MjggZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZC1yZW1vdmVkCittYXJrIDo0OAorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAxNCArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQxNTEgKzAxMDAKK2RhdGEgNworcy81L0EvCitmcm9tIDoyCitNIDEwMDY0NCA6MyBmaWxlCisKK2Jsb2IKK21hcmsgOjQ5CitkYXRhIDAKKworY29tbWl0IHJlZnMvaGVhZHMvYWRkZWQtcmVtb3ZlZAorbWFyayA6NTAKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTU2NTc0MTc3ICswMTAwCitkYXRhIDE4CitzLzQvQS8gKyBuZXctZmlsZQorZnJvbSA6NDgKK00gMTAwNjQ0IDo1IGZpbGUKK00gMTAwNjQ0IDo0OSBuZXctZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9hZGRlZC1yZW1vdmVkCittYXJrIDo1MQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM3NDQ4NTAzNiArMDIwMAorY29tbWl0dGVyIFRob21hcyBHdW1tZXJlciA8dC5ndW1tZXJlckBnbWFpbC5jb20+IDE1NTY1NzQxNzcgKzAxMDAKK2RhdGEgMjIKK3MvMTEvQi8gKyByZW1vdmUgZmlsZQorZnJvbSA6NTAKK00gMTAwNjQ0IDo3IGZpbGUKK0QgbmV3LWZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvYWRkZWQtcmVtb3ZlZAorbWFyayA6NTIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTU2NTc0MTc3ICswMTAwCitkYXRhIDgKK3MvMTIvQi8KK2Zyb20gOjUxCitNIDEwMDY0NCA6OSBmaWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQorbWFyayA6NTMKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMTQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTU2NTc0MzA5ICswMTAwCitkYXRhIDcKK3MvNS9BLworZnJvbSA6MgorTSAxMDA2NDQgOjMgZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9yZW5hbWVkLWZpbGUKK21hcmsgOjU0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDI0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIEd1bW1lcmVyIDx0Lmd1bW1lcmVyQGdtYWlsLmNvbT4gMTU1NjU3NDMxMiArMDEwMAorZGF0YSAyMQorcy80L0EvICsgcmVuYW1lIGZpbGUKK2Zyb20gOjUzCitEIGZpbGUKK00gMTAwNjQ0IDo1IHJlbmFtZWQtZmlsZQorCitjb21taXQgcmVmcy9oZWFkcy9yZW5hbWVkLWZpbGUKK21hcmsgOjU1CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDM2ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIEd1bW1lcmVyIDx0Lmd1bW1lcmVyQGdtYWlsLmNvbT4gMTU1NjU3NDMxOSArMDEwMAorZGF0YSA4CitzLzExL0IvCitmcm9tIDo1NAorTSAxMDA2NDQgOjcgcmVuYW1lZC1maWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL3JlbmFtZWQtZmlsZQorbWFyayA6NTYKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwNDQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTU2NTc0MzE5ICswMTAwCitkYXRhIDgKK3MvMTIvQi8KK2Zyb20gOjU1CitNIDEwMDY0NCA6OSByZW5hbWVkLWZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvbW9kZS1vbmx5LWNoYW5nZQorbWFyayA6NTcKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMjQgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTcwNDczNzY3ICswMTAwCitkYXRhIDI0CitzLzQvQS8gKyBhZGQgb3RoZXItZmlsZQorZnJvbSA6NAorTSAxMDA2NDQgOjUgZmlsZQorTSAxMDA2NDQgOjQ5IG90aGVyLWZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvbW9kZS1vbmx5LWNoYW5nZQorbWFyayA6NTgKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+IDEzNzQ0ODUwMzYgKzAyMDAKK2NvbW1pdHRlciBUaG9tYXMgR3VtbWVyZXIgPHQuZ3VtbWVyZXJAZ21haWwuY29tPiAxNTcwNDczNzY4ICswMTAwCitkYXRhIDMzCitzLzExL0IvICsgbW9kZSBjaGFuZ2Ugb3RoZXItZmlsZQorZnJvbSA6NTcKK00gMTAwNjQ0IDo3IGZpbGUKK00gMTAwNzU1IDo0OSBvdGhlci1maWxlCisKK2NvbW1pdCByZWZzL2hlYWRzL21vZGUtb25seS1jaGFuZ2UKK21hcmsgOjU5CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzc0NDg1MDQ0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIEd1bW1lcmVyIDx0Lmd1bW1lcmVyQGdtYWlsLmNvbT4gMTU3MDQ3Mzc2OCArMDEwMAorZGF0YSA4CitzLzEyL0IvCitmcm9tIDo1OAorTSAxMDA2NDQgOjkgZmlsZQorCmRpZmYgLS1naXQgYS90L3QzMjEwLXBhY2stcmVmcy5zaCBiL3QvdDMyMTAtcGFjay1yZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0MWIyYWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjEwLXBhY2stcmVmcy5zaApAQCAtMCwwICsxLDI1NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBBbW9zIFdhdGVybGFuZAorIyBDb3B5cmlnaHQgKGMpIDIwMDYgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGFjay1yZWZzIHNob3VsZCBub3QgY2hhbmdlIHRoZSBicmFuY2ggc2VtYW50aWMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHBhY2stcmVmcyBhbmQgZ2l0IHNob3ctcmVmIGFuZCBjaGVja3MgdGhhdCB0aGUgYnJhbmNoCitzZW1hbnRpYyBpcyBzdGlsbCB0aGUgc2FtZS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgcmVmbG9ncycgJworCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgYSB0cml2aWFsIHJlcG9zaXRvcnknIFwKKyAgICAnZWNobyBIZWxsbyA+IEEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisgICAgIGdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0LiIgJiYKKyAgICAgSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCknCisKK1NIQTE9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZWUgaWYgZ2l0IHNob3ctcmVmIHdvcmtzIGFzIGV4cGVjdGVkJyBcCisgICAgJ2dpdCBicmFuY2ggYSAmJgorICAgICBTSEExPSQoY2F0IC5naXQvcmVmcy9oZWFkcy9hKSAmJgorICAgICBlY2hvICIkU0hBMSByZWZzL2hlYWRzL2EiID5leHBlY3QgJiYKKyAgICAgZ2l0IHNob3ctcmVmIGEgPnJlc3VsdCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3QgcmVzdWx0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2VlIGlmIGEgYnJhbmNoIHN0aWxsIGV4aXN0cyB3aGVuIHBhY2tlZCcgXAorICAgICdnaXQgYnJhbmNoIGIgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorICAgICBybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYiAmJgorICAgICBlY2hvICIkU0hBMSByZWZzL2hlYWRzL2IiID5leHBlY3QgJiYKKyAgICAgZ2l0IHNob3ctcmVmIGIgPnJlc3VsdCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3QgcmVzdWx0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGMvZCBzaG91bGQgYmFyZiBpZiBicmFuY2ggYyBleGlzdHMnICcKKyAgICAgZ2l0IGJyYW5jaCBjICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKyAgICAgcm0gLWYgLmdpdC9yZWZzL2hlYWRzL2MgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBjL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NlZSBpZiBhIGJyYW5jaCBzdGlsbCBleGlzdHMgYWZ0ZXIgZ2l0IHBhY2stcmVmcyAtLXBydW5lJyBcCisgICAgJ2dpdCBicmFuY2ggZSAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgZWNobyAiJFNIQTEgcmVmcy9oZWFkcy9lIiA+ZXhwZWN0ICYmCisgICAgIGdpdCBzaG93LXJlZiBlID5yZXN1bHQgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IHJlc3VsdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VlIGlmIGdpdCBwYWNrLXJlZnMgLS1wcnVuZSByZW1vdmUgcmVmIGZpbGVzJyAnCisgICAgIGdpdCBicmFuY2ggZiAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgISB0ZXN0IC1mIC5naXQvcmVmcy9oZWFkcy9mCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlZSBpZiBnaXQgcGFjay1yZWZzIC0tcHJ1bmUgcmVtb3ZlcyBlbXB0eSBkaXJzJyAnCisgICAgIGdpdCBicmFuY2ggci9zL3QgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisgICAgICEgdGVzdCAtZSAuZ2l0L3JlZnMvaGVhZHMvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGJyYW5jaCBnIHNob3VsZCB3b3JrIHdoZW4gZ2l0IGJyYW5jaCBnL2ggaGFzIGJlZW4gZGVsZXRlZCcgXAorICAgICdnaXQgYnJhbmNoIGcvaCAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBnL2ggJiYKKyAgICAgZ2l0IGJyYW5jaCBnICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGkvai9rIHNob3VsZCBiYXJmIGlmIGJyYW5jaCBpIGV4aXN0cycgJworICAgICBnaXQgYnJhbmNoIGkgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggaS9qL2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3Rlc3QgZ2l0IGJyYW5jaCBrIGFmdGVyIGJyYW5jaCBrL2wvbSBhbmQgay9sbSBoYXZlIGJlZW4gZGVsZXRlZCcgXAorICAgICdnaXQgYnJhbmNoIGsvbCAmJgorICAgICBnaXQgYnJhbmNoIGsvbG0gJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBrL2wgJiYKKyAgICAgZ2l0IGJyYW5jaCBrL2wvbSAmJgorICAgICBnaXQgYnJhbmNoIC1kIGsvbC9tICYmCisgICAgIGdpdCBicmFuY2ggLWQgay9sbSAmJgorICAgICBnaXQgYnJhbmNoIGsnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd0ZXN0IGdpdCBicmFuY2ggbiBhZnRlciBzb21lIGJyYW5jaCBkZWxldGlvbiBhbmQgcHJ1bmluZycgXAorICAgICdnaXQgYnJhbmNoIG4vbyAmJgorICAgICBnaXQgYnJhbmNoIG4vb3AgJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBuL28gJiYKKyAgICAgZ2l0IGJyYW5jaCBuL28vcCAmJgorICAgICBnaXQgYnJhbmNoIC1kIG4vb3AgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisgICAgIGdpdCBicmFuY2ggLWQgbi9vL3AgJiYKKyAgICAgZ2l0IGJyYW5jaCBuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VlIGlmIHVwLXRvLWRhdGUgcGFja2VkIHJlZnMgYXJlIHByZXNlcnZlZCcgXAorCSdnaXQgYnJhbmNoIHEgJiYKKwkgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisJIGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvcSByZWZzL2hlYWRzL3EgJiYKKwkgISB0ZXN0IC1mIC5naXQvcmVmcy9oZWFkcy9xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLCBwcnVuZSBhbmQgcmVwYWNrJyAnCisJZ2l0IHRhZyBmb28gJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlnaXQgc2hvdy1yZWYgPmFsbC1vZi10aGVtICYmCisJZ2l0IHBhY2stcmVmcyAmJgorCWdpdCBzaG93LXJlZiA+YWdhaW4gJiYKKwl0ZXN0X2NtcCBhbGwtb2YtdGhlbSBhZ2FpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBwYWNrLXJlZnMgd2l0aCBkYW5nbGluZyBwYWNrZWQgcmVmZXJlbmNlJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJzb29uIHRvIGJlIGdhcmJhZ2UtY29sbGVjdGVkIiAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9YWxsIC0tYWxsICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPWFsbCAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgMj5yZXN1bHQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSByZWYgd2l0aCBkYW5nbGluZyBwYWNrZWQgdmVyc2lvbicgJworCWdpdCBjaGVja291dCAtYiBsYW1iICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmdXR1cmUgZ2FyYmFnZSIgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgLS1hbGwgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9YWxsICYmCisJZ2l0IGJyYW5jaCAtZCBsYW1iIDI+cmVzdWx0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUgcmVmIHdoaWxlIGFub3RoZXIgZGFuZ2xpbmcgcGFja2VkIHJlZicgJworCWdpdCBicmFuY2ggbGFtYiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZnV0dXJlIGdhcmJhZ2UiICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgLS1hbGwgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9YWxsICYmCisJZ2l0IGJyYW5jaCAtZCBsYW1iIDI+cmVzdWx0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHJlZiBkaXJlY3RseSBiZWxvdyByZWZzLycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvdG9wIEhFQUQgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlncmVwIHJlZnMvdG9wIC5naXQvcGFja2VkLXJlZnMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvdG9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBwYWNrIHJlZiBpbiByZWZzL2Jpc2VjdCcgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvYmlzZWN0L2xvY2FsIEhFQUQgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwkhIGdyZXAgcmVmcy9iaXNlY3QvbG9jYWwgLmdpdC9wYWNrZWQtcmVmcyA+L2Rldi9udWxsICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2Jpc2VjdC9sb2NhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIHJlZmxvZ3MnICcKKwlnaXQgY29uZmlnIGNvcmUubG9nYWxscmVmdXBkYXRlcyBmYWxzZSAmJgorCXJtIC1yZiAuZ2l0L2xvZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhY2tlZCBmb28vYmFyL2JheiBicmFuY2gnICcKKwlnaXQgYnJhbmNoIGZvby9iYXIvYmF6ICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2Zvby9iYXIvYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9mb28vYmFyL2JhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RpY2UgZC9mIGNvbmZsaWN0IHdpdGggZXhpc3RpbmcgZGlyZWN0b3J5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGZvby9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpc3RpbmcgZGlyZWN0b3J5IHJlcG9ydHMgY29uY3JldGUgcmVmJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBmb28gMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIHJlZnMvaGVhZHMvZm9vL2Jhci9iYXogc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGljZSBkL2YgY29uZmxpY3Qgd2l0aCBleGlzdGluZyByZWYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGZvby9iYXIvYmF6L2V4dHJhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBmb28vYmFyL2Jhei9sb3RzL29mL2V4dHJhL2NvbXBvbmVudHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IHBhY2tlZC1yZWZzIHdpdGggdW50ZXJtaW5hdGVkIGxpbmUnICcKKwljcCAuZ2l0L3BhY2tlZC1yZWZzIC5naXQvcGFja2VkLXJlZnMuYmFrICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiAuZ2l0L3BhY2tlZC1yZWZzLmJhayAuZ2l0L3BhY2tlZC1yZWZzIiAmJgorCXByaW50ZiAiJXMiICIkSEVBRCByZWZzL3p6enp6IiA+Pi5naXQvcGFja2VkLXJlZnMgJiYKKwllY2hvICJmYXRhbDogdW50ZXJtaW5hdGVkIGxpbmUgaW4gLmdpdC9wYWNrZWQtcmVmczogJEhFQUQgcmVmcy96enp6eiIgPmV4cGVjdGVkX2VyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgPm91dCAyPmVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2VyciBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IHBhY2tlZC1yZWZzIGNvbnRhaW5pbmcganVuaycgJworCWNwIC5naXQvcGFja2VkLXJlZnMgLmdpdC9wYWNrZWQtcmVmcy5iYWsgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IC5naXQvcGFja2VkLXJlZnMuYmFrIC5naXQvcGFja2VkLXJlZnMiICYmCisJcHJpbnRmICIlc1xuIiAiYm9ndXMgY29udGVudCIgPj4uZ2l0L3BhY2tlZC1yZWZzICYmCisJZWNobyAiZmF0YWw6IHVuZXhwZWN0ZWQgbGluZSBpbiAuZ2l0L3BhY2tlZC1yZWZzOiBib2d1cyBjb250ZW50IiA+ZXhwZWN0ZWRfZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiA+b3V0IDI+ZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfZXJyIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgcGFja2VkLXJlZnMgd2l0aCBhIHNob3J0IFNIQS0xJyAnCisJY3AgLmdpdC9wYWNrZWQtcmVmcyAuZ2l0L3BhY2tlZC1yZWZzLmJhayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9wYWNrZWQtcmVmcy5iYWsgLmdpdC9wYWNrZWQtcmVmcyIgJiYKKwlwcmludGYgIiUuN3MgJXNcbiIgJEhFQUQgcmVmcy96enp6eiA+Pi5naXQvcGFja2VkLXJlZnMgJiYKKwlwcmludGYgImZhdGFsOiB1bmV4cGVjdGVkIGxpbmUgaW4gLmdpdC9wYWNrZWQtcmVmczogJS43cyAlc1xuIiAkSEVBRCByZWZzL3p6enp6ID5leHBlY3RlZF9lcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmID5vdXQgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9lcnIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RpbWVvdXQgaWYgcGFja2VkLXJlZnMubG9jayBleGlzdHMnICcKKwlMT0NLPS5naXQvcGFja2VkLXJlZnMubG9jayAmJgorCT4iJExPQ0siICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAkTE9DSyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV0cnkgYWNxdWlyaW5nIHBhY2tlZC1yZWZzLmxvY2snICcKKwlMT0NLPS5naXQvcGFja2VkLXJlZnMubG9jayAmJgorCT4iJExPQ0siICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ3YWl0ICYmIHJtIC1mICRMT0NLIiAmJgorCXsKKwkJKCBzbGVlcCAxICYmIHJtIC1mICRMT0NLICkgJgorCX0gJiYKKwlnaXQgLWMgY29yZS5wYWNrZWRyZWZzdGltZW91dD0zMDAwIHBhY2stcmVmcyAtLWFsbCAtLXBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3BhY2sgc3ltbGlua2VkIHBhY2tlZC1yZWZzJyAnCisJIyBGaXJzdCBtYWtlIHN1cmUgdGhhdCBzeW1saW5raW5nIHdvcmtzIHdoZW4gcmVhZGluZzoKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2xvc3N5IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+YWxsLXJlZnMtYmVmb3JlICYmCisJbXYgLmdpdC9wYWNrZWQtcmVmcyAuZ2l0L215LWRldmlhbnQtcGFja2VkLXJlZnMgJiYKKwlsbiAtcyBteS1kZXZpYW50LXBhY2tlZC1yZWZzIC5naXQvcGFja2VkLXJlZnMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmID5hbGwtcmVmcy1saW5rZWQgJiYKKwl0ZXN0X2NtcCBhbGwtcmVmcy1iZWZvcmUgYWxsLXJlZnMtbGlua2VkICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+YWxsLXJlZnMtcGFja2VkICYmCisJdGVzdF9jbXAgYWxsLXJlZnMtYmVmb3JlIGFsbC1yZWZzLXBhY2tlZCAmJgorCXRlc3QgLWggLmdpdC9wYWNrZWQtcmVmcyAmJgorCXRlc3QgIiQocmVhZGxpbmsgLmdpdC9wYWNrZWQtcmVmcykiID0gIm15LWRldmlhbnQtcGFja2VkLXJlZnMiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIxMS1wZWVsLXJlZi5zaCBiL3QvdDMyMTEtcGVlbC1yZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2I3Y2FjYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMTEtcGVlbC1yZWYuc2gKQEAgLTAsMCArMSw3MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3RzIGZvciB0aGUgcGVlbF9yZWYgb3B0aW1pemF0aW9uIG9mIHBhY2tlZC1yZWZzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhbm5vdGF0ZWQgdGFnIGluIHJlZnMvdGFncycgJworCXRlc3RfY29tbWl0IGJhc2UgJiYKKwlnaXQgdGFnIC1tIGFubm90YXRlZCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFubm90YXRlZCB0YWcgb3V0c2lkZSBvZiByZWZzL3RhZ3MnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL291dHNpZGUvZm9vIHJlZnMvdGFncy9mb28KKycKKworIyBUaGlzIG1hdGNoZXMgc2hvdy1yZWYncyBvdXRwdXQKK3ByaW50X3JlZigpIHsKKwllY2hvICIkKGdpdCByZXYtcGFyc2UgIiQxIikgJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBleHBlY3RlZCBzaG93LXJlZiBvdXRwdXQnICcKKwl7CisJCXByaW50X3JlZiAicmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJCXByaW50X3JlZiAicmVmcy9vdXRzaWRlL2ZvbyIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL291dHNpZGUvZm9vXnt9IiAmJgorCQlwcmludF9yZWYgInJlZnMvdGFncy9iYXNlIiAmJgorCQlwcmludF9yZWYgInJlZnMvdGFncy9mb28iICYmCisJCXByaW50X3JlZiAicmVmcy90YWdzL2Zvb157fSIKKwl9ID5leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcyBhcmUgcGVlbGVkIG91dHNpZGUgb2YgcmVmcy90YWdzIChsb29zZSknICcKKwlnaXQgc2hvdy1yZWYgLWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcyBhcmUgcGVlbGVkIG91dHNpZGUgb2YgcmVmcy90YWdzIChwYWNrZWQpJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCBzaG93LXJlZiAtZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgb2xkLXN0eWxlIHBhY2stcmVmcyB3aXRob3V0IGZ1bGx5LXBlZWxlZCcgJworCSMgR2l0IG5vIGxvbmdlciB3cml0ZXMgd2l0aG91dCBmdWxseS1wZWVsZWQsIHNvIHdlIGp1c3Qgd3JpdGUgb3VyIG93bgorCSMgZnJvbSBzY3JhdGNoOyB3ZSBjb3VsZCBhbHNvIG11bmdlIHRoZSBleGlzdGluZyBmaWxlIHRvIHJlbW92ZSB0aGUKKwkjIGZ1bGx5LXBlZWxlZCBiaXRzLCBidXQgdGhhdCBzZWVtcyBldmVuIG1vcmUgcHJvbmUgdG8gZmFpbHVyZSwKKwkjIGVzcGVjaWFsbHkgaWYgdGhlIGZvcm1hdCBldmVyIGNoYW5nZXMgYWdhaW4uIEF0IGxlYXN0IHRoaXMgd2F5IHdlCisJIyBrbm93IHdlIGFyZSBlbXVsYXRpbmcgZXhhY3RseSB3aGF0IGFuIG9sZGVyIGdpdCB3b3VsZCBoYXZlIHdyaXR0ZW4uCisJeworCQllY2hvICIjIHBhY2stcmVmcyB3aXRoOiBwZWVsZWQgIiAmJgorCQlwcmludF9yZWYgInJlZnMvaGVhZHMvbWFzdGVyIiAmJgorCQlwcmludF9yZWYgInJlZnMvb3V0c2lkZS9mb28iICYmCisJCXByaW50X3JlZiAicmVmcy90YWdzL2Jhc2UiICYmCisJCXByaW50X3JlZiAicmVmcy90YWdzL2ZvbyIgJiYKKwkJZWNobyAiXiQoZ2l0IHJldi1wYXJzZSAicmVmcy90YWdzL2Zvb157fSIpIgorCX0gPnRtcCAmJgorCW12IHRtcCAuZ2l0L3BhY2tlZC1yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMgYXJlIHBlZWxlZCBvdXRzaWRlIG9mIHJlZnMvdGFncyAob2xkIHBhY2tlZCknICcKKwlnaXQgc2hvdy1yZWYgLWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGVlbGVkIHJlZnMgc3Vydml2ZSBkZWxldGlvbiBvZiBwYWNrZWQgcmVmJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWNwIC5naXQvcGFja2VkLXJlZnMgZnVsbHktcGVlbGVkICYmCisJZ2l0IGJyYW5jaCB5YWRkYSAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgYnJhbmNoIC1kIHlhZGRhICYmCisJdGVzdF9jbXAgZnVsbHktcGVlbGVkIC5naXQvcGFja2VkLXJlZnMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzAwLWZ1bm55LW5hbWVzLnNoIGIvdC90MzMwMC1mdW5ueS1uYW1lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNGRlMDNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwMC1mdW5ueS1uYW1lcy5zaApAQCAtMCwwICsxLDIxNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdQYXRobmFtZXMgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzLgorCitUaGlzIHRlc3QgdHJpZXMgcGF0aG5hbWVzIHdpdGggZnVubnkgY2hhcmFjdGVycyBpbiB0aGUgd29ya2luZwordHJlZSwgaW5kZXgsIGFuZCB0cmVlIG9iamVjdHMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitIVD0nCScKKwordGVzdF9oYXZlX3ByZXJlcSBNSU5HVyB8fAorZWNobyAyPi9kZXYvbnVsbCA+ICJOYW1lIHdpdGggYW4ke0hUfUhUIgoraWYgISB0ZXN0IC1mICJOYW1lIHdpdGggYW4ke0hUfUhUIgordGhlbgorCSMgc2luY2UgRkFUL05URlMgZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMsIHNraXAgdGhpcyB0ZXN0CisJc2tpcF9hbGw9J1lvdXIgZmlsZXN5c3RlbSBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcycKKwl0ZXN0X2RvbmUKK2ZpCisKK3AwPSduby1mdW5ueScKK3AxPSd0YWJzCSwiIChkcSkgYW5kIHNwYWNlcycKK3AyPSdqdXN0IHNwYWNlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNhdCA+IiRwMCIgPDwtXEVPRiAmJgorCTEuIEEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgY2F0LCBvb3BzIGRvZy4KKwkyLiBBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGNhdCwgb29wcyBkb2cuCisJMy4gQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBjYXQsIG9vcHMgZG9nLgorCUVPRgorCisJeyBjYXQgIiRwMCIgPiIkcDEiIHx8IDo7IH0gJiYKKwl7IGVjaG8gIkZvbyBCYXIgQmF6IiA+IiRwMiIgfHwgOjsgfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogcG9wdWxhdGUgaW5kZXggYW5kIHRyZWUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICIkcDAiICIkcDIiICYmCisJdDA9JChnaXQgd3JpdGUtdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgcHJpbnRzIHNwYWNlIGluIGZpbGVuYW1lIHZlcmJhdGltJyAnCisJcHJpbnRmICIlc1xuIiAianVzdCBzcGFjZSIgbm8tZnVubnkgPmV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogYWRkIGZ1bm55IGZpbGVuYW1lJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAiJHAxIiAmJgorCXQxPSQoZ2l0IHdyaXRlLXRyZWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWp1c3Qgc3BhY2UKKwluby1mdW5ueQorCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLXogZG9lcyBub3QgcXVvdGUgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlqdXN0IHNwYWNlCisJbm8tZnVubnkKKwl0YWJzCSwiIChkcSkgYW5kIHNwYWNlcworCUVPRgorCWdpdCBscy1maWxlcyAteiA+bHMtZmlsZXMueiAmJgorCXBlcmwgLXBlICJ5L1wwMDAvXDAxMi8iIDxscy1maWxlcy56ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWp1c3Qgc3BhY2UKKwluby1mdW5ueQorCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBscy10cmVlIC1yICR0MSA+bHMtdHJlZSAmJgorCXNlZCAtZSAicy9eW14JXSoJLy8iIDxscy10cmVlID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC0tbmFtZS1zdGF0dXMgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJQQkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLW5hbWUtc3RhdHVzICR0MCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC0tbmFtZS1zdGF0dXMgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJQQkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi10cmVlIC0tbmFtZS1zdGF0dXMgJHQwICR0MSA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAteiBkb2VzIG5vdCBxdW90ZSBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUEKKwl0YWJzCSwiIChkcSkgYW5kIHNwYWNlcworCUVPRgorCWdpdCBkaWZmLWluZGV4IC16IC0tbmFtZS1zdGF0dXMgJHQwID5kaWZmLWluZGV4LnogJiYKKwlwZXJsIC1wZSAieS9cMDAwL1wwMTIvIiA8ZGlmZi1pbmRleC56ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLXogZG9lcyBub3QgcXVvdGUgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlBCisJdGFicwksIiAoZHEpIGFuZCBzcGFjZXMKKwlFT0YKKwlnaXQgZGlmZi10cmVlIC16IC0tbmFtZS1zdGF0dXMgJHQwICR0MSA+ZGlmZi10cmVlLnogJiYKKwlwZXJsIC1wZSB5L1xcMDAwL1xcMDEyLyA8ZGlmZi10cmVlLnogPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlDTlVNCW5vLWZ1bm55CSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1uYW1lLXN0YXR1cyAkdDAgJHQxID5vdXQgJiYKKwlzZWQgLWUgInMvXkNbMC05XSovQ05VTS8iIDxvdXQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiByZW1vdmUgdW5mdW5ueSBpbmRleCBlbnRyeScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgIiRwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC1NIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCVJOVU0Jbm8tZnVubnkJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLU0gLS1uYW1lLXN0YXR1cyAkdDAgPm91dCAmJgorCXNlZCAtZSAicy9eUlswLTldKi9STlVNLyIgPG91dCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtTSAtcCBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvbm8tZnVubnkgImIvdGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlzaW1pbGFyaXR5IGluZGV4IE5VTSUKKwlyZW5hbWUgZnJvbSBuby1mdW5ueQorCXJlbmFtZSB0byAidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtTSAtcCAkdDAgPmRpZmYgJiYKKwlzZWQgLWUgInMvaW5kZXggWzAtOV0qJS9pbmRleCBOVU0lLyIgPGRpZmYgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBtb2RlIGNoYW5nZScgJworCWNobW9kICt4ICIkcDEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLU0gLXAgd2l0aCBtb2RlIGNoYW5nZSBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvbm8tZnVubnkgImIvdGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlvbGQgbW9kZSAxMDA2NDQKKwluZXcgbW9kZSAxMDA3NTUKKwlzaW1pbGFyaXR5IGluZGV4IE5VTSUKKwlyZW5hbWUgZnJvbSBuby1mdW5ueQorCXJlbmFtZSB0byAidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtTSAtcCAkdDAgPmRpZmYgJiYKKwlzZWQgLWUgInMvaW5kZXggWzAtOV0qJS9pbmRleCBOVU0lLyIgPGRpZmYgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZzdGF0IGZvciByZW5hbWUgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJICJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCSAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0MCA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLXN0YXQgPGRpZmYgPmRpZmZzdGF0ICYmCisJc2VkIC1lICJzL3wuKi8vIiAtZSAicy8gKlwkLy8iIDxkaWZmc3RhdCA+Y3VycmVudCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ251bXN0YXQgZm9yIHJlbmFtZSBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkwCTAJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHQwID5kaWZmICYmCisJZ2l0IGFwcGx5IC0tbnVtc3RhdCA8ZGlmZiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbnVtc3RhdCB3aXRob3V0IC1NIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTAJMwluby1mdW5ueQorCTMJMAkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtcCAkdDAgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdudW1zdGF0IGZvciBub24tZ2l0IHJlbmFtZSBkaWZmIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTAJMwluby1mdW5ueQorCTMJMAkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtcCAkdDAgPmdpdC1kaWZmICYmCisJc2VkIC1uZSAiL15bLStAXS9wIiA8Z2l0LWRpZmYgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDEtbm90ZXMuc2ggYi90L3QzMzAxLW5vdGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmNDMzMDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzAxLW5vdGVzLnNoCkBAIC0wLDAgKzEsMTM4MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY29tbWl0IG5vdGVzJworCisuIC4vdGVzdC1saWIuc2gKKword3JpdGVfc2NyaXB0IGZha2VfZWRpdG9yIDw8XEVPRgorZWNobyAiJE1TRyIgPiIkMSIKK2VjaG8gIiRNU0ciID4mMgorRU9GCitHSVRfRURJVE9SPS4vZmFrZV9lZGl0b3IKK2V4cG9ydCBHSVRfRURJVE9SCisKK2luZGVudD0iICAgICIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGFubm90YXRlIG5vbi1leGlzdGluZyBIRUFEJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IE1TRz0zIGdpdCBub3RlcyBhZGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCAxc3QgJiYKKwl0ZXN0X2NvbW1pdCAybmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVlZCB2YWxpZCBub3RlcyByZWYnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgTVNHPTEgR0lUX05PVEVTX1JFRj0vIGdpdCBub3RlcyBzaG93ICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IE1TRz0yIEdJVF9OT1RFU19SRUY9LyBnaXQgbm90ZXMgc2hvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2luZyB0byBhZGQgbm90ZXMgaW4gcmVmcy9oZWFkcy8nICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgTVNHPTEgR0lUX05PVEVTX1JFRj1yZWZzL2hlYWRzL2JvZ3VzIGdpdCBub3RlcyBhZGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNpbmcgdG8gZWRpdCBub3RlcyBpbiByZWZzL3JlbW90ZXMvJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IE1TRz0xIEdJVF9OT1RFU19SRUY9cmVmcy9oZWFkcy9ib2d1cyBnaXQgbm90ZXMgZWRpdAorJworCisjIDEgaW5kaWNhdGVzIGNhdWdodCBncmFjZWZ1bGx5IGJ5IGRpZSwgMTI4IG1lYW5zIGdpdC1zaG93IGJhcmtlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIGVtcHR5IG5vdGVzIGdyYWNlZnVsbHknICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG5vdGVzIHNob3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub24tZXhpc3RlbnQgbm90ZXMgZW50cnkgd2l0aCAlTicgJworCXRlc3Rfd3JpdGVfbGluZXMgQSBCID5leHBlY3QgJiYKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0iQSVuJU5CIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZXMnICcKKwlNU0c9YjQgZ2l0IG5vdGVzIGFkZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9URVNfRURJVE1TRyAmJgorCWdpdCBscy10cmVlIC1yIHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwllY2hvIGI0ID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub3RlcyBlbnRyeSB3aXRoICVOJyAnCisJdGVzdF93cml0ZV9saW5lcyBBIGI0IEIgPmV4cGVjdCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSJBJW4lTkIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZWZsb2cgZW50cnknICcKKwlyZWY9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkcmVmIHJlZnMvbm90ZXMvY29tbWl0c0B7MH06IG5vdGVzOiBOb3RlcyBhZGRlZCBieSAnXCcnZ2l0IG5vdGVzIGFkZCdcJycKKwlFT0YKKwlnaXQgcmVmbG9nIHNob3cgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXQgZXhpc3Rpbmcgbm90ZXMnICcKKwlNU0c9YjMgZ2l0IG5vdGVzIGVkaXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKKwlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJZWNobyBiMyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgc2hvdyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgbm90ZXMgZnJvbSB0cmVlaXNoJyAnCisJZWNobyBiMyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIC0tcmVmIGNvbW1pdHNee3RyZWV9IHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gYjQgPmV4cGVjdCAmJgorCWdpdCBub3RlcyAtLXJlZiBjb21taXRzQHsxfSBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCBlZGl0IG5vdGVzIGZyb20gbm9uLXJlZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyAtLXJlZiBjb21taXRzXnt0cmVlfSBlZGl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIC0tcmVmIGNvbW1pdHNAezF9IGVkaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90ICJnaXQgbm90ZXMgYWRkIC1tIiB3aGVyZSBub3RlcyBhbHJlYWR5IGV4aXN0cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBhZGQgLW0gImIyIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9URVNfRURJVE1TRyAmJgorCWdpdCBscy10cmVlIC1yIHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwllY2hvIGIzID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIG92ZXJ3cml0ZSBleGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLWYgLW0iJyAnCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAiYjEiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCisJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCWVjaG8gYjEgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdy9ubyBvcHRpb25zIG9uIGV4aXN0aW5nIG5vdGUgbW9ycGhzIGludG8gZWRpdCcgJworCU1TRz1iMiBnaXQgbm90ZXMgYWRkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCisJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCWVjaG8gYjIgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHNob3cgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gb3ZlcndyaXRlIGV4aXN0aW5nIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFkZCAtZiInICcKKwlNU0c9YjEgZ2l0IG5vdGVzIGFkZCAtZiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9URVNfRURJVE1TRyAmJgorCWdpdCBscy10cmVlIC1yIHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwllY2hvIGIxID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub3RlcycgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9Mm5kCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fWIxCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXRzICYmCisJISBncmVwIGIxIGNvbW1pdHMgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgbXVsdGktbGluZSBub3RlcycgJworCXRlc3RfY29tbWl0IDNyZCAmJgorCU1TRz0iYjMke0xGfWMzYzNjM2MzJHtMRn1kM2QzZDMiIGdpdCBub3RlcyBhZGQgJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QtbXVsdGlsaW5lIDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0zcmQKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9YjMKKwkJJHtpbmRlbnR9YzNjM2MzYzMKKwkJJHtpbmRlbnR9ZDNkM2QzCisKKwlFT0YKKwljYXQgZXhwZWN0ID4+ZXhwZWN0LW11bHRpbGluZSAmJgorCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1tdWx0aWxpbmUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgLUYgbm90ZXMnICcKKwl0ZXN0X2NvbW1pdCA0dGggJiYKKwllY2hvICJ4eXp6eSIgPm5vdGU1ICYmCisJZ2l0IG5vdGVzIGFkZCAtRiBub3RlNSAmJgorCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdC1GIDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE2OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH00dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9eHl6enkKKworCUVPRgorCWNhdCBleHBlY3QtbXVsdGlsaW5lID4+ZXhwZWN0LUYgJiYKKwlnaXQgbG9nIC0zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtRiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmUtYWRkaW5nIC1GIG5vdGVzIHdpdGhvdXQgLWYgZmFpbHMnICcKKwllY2hvICJ6eXh4eSIgPm5vdGU1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCAtRiBub3RlNSAmJgorCWdpdCBsb2cgLTMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1GIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tcHJldHR5PXJhdyBkb2VzIG5vdCBzaG93IG5vdGVzJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRyZWU9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCXRyZWUgJHRyZWUKKwkJcGFyZW50ICRwYXJlbnQKKwkJYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExMTI5MTIxNzMgLTA3MDAKKwkJY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjE3MyAtMDcwMAorCisJCSR7aW5kZW50fTR0aAorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9cmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1zaG93LW5vdGVzJyAnCisJY2F0ID4+ZXhwZWN0IDw8LUVPRiAmJgorCisJTm90ZXM6CisJJHtpbmRlbnR9eHl6enkKKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PXJhdyAtLXNob3ctbm90ZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vLW5vdGVzJyAnCisJZ2l0IGxvZyAtMSAtLW5vLW5vdGVzID5hY3R1YWwgJiYKKwkhIGdyZXAgeHl6enkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmb3JtYXQtcGF0Y2ggZG9lcyBub3Qgc2hvdyBub3RlcycgJworCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPmFjdHVhbCAmJgorCSEgZ3JlcCB4eXp6eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZvcm1hdC1wYXRjaCAtLXNob3ctbm90ZXMgZG9lcyBzaG93IG5vdGVzJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXNob3ctbm90ZXMgLTEgLS1zdGRvdXQgPmFjdHVhbCAmJgorCWdyZXAgeHl6enkgYWN0dWFsCisnCisKK2ZvciBwcmV0dHkgaW4gXAorCSIiIC0tcHJldHR5IC0tcHJldHR5PXJhdyAtLXByZXR0eT1zaG9ydCAtLXByZXR0eT1tZWRpdW0gXAorCS0tcHJldHR5PWZ1bGwgLS1wcmV0dHk9ZnVsbGVyIC0tcHJldHR5PWZvcm1hdDolcyAtLW9uZWxpbmUKK2RvCisJY2FzZSAiJHByZXR0eSIgaW4KKwkiIikgcD0gbm90PSBuZWdhdGU9IiIgOzsKKwk/KikgcD0iJHByZXR0eSIgbm90PSIgbm90IiBuZWdhdGU9IiEiIDs7CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBzaG93ICRwcmV0dHkgZG9lcyRub3Qgc2hvdyBub3RlcyIgJworCQlnaXQgc2hvdyAkcCA+YWN0dWFsICYmCisJCWV2YWwgIiRuZWdhdGUgZ3JlcCB4eXp6eSBhY3R1YWwiCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhbHRlcm5hdGUgbm90ZXMgcmVmJyAnCisJZ2l0IG5vdGVzIC0tcmVmPWFsdGVybmF0ZSBhZGQgLW0gYWx0ZXJuYXRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1ub3RlcyBzaG93cyBkZWZhdWx0IG5vdGVzJyAnCisJZ2l0IGxvZyAtMSAtLW5vdGVzID5hY3R1YWwgJiYKKwlncmVwIHh5enp5IGFjdHVhbCAmJgorCSEgZ3JlcCBhbHRlcm5hdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1ub3Rlcz1YIHNob3dzIG9ubHkgWCcgJworCWdpdCBsb2cgLTEgLS1ub3Rlcz1hbHRlcm5hdGUgPmFjdHVhbCAmJgorCSEgZ3JlcCB4eXp6eSBhY3R1YWwgJiYKKwlncmVwIGFsdGVybmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vdGVzIC0tbm90ZXM9WCBzaG93cyBib3RoJyAnCisJZ2l0IGxvZyAtMSAtLW5vdGVzIC0tbm90ZXM9YWx0ZXJuYXRlID5hY3R1YWwgJiYKKwlncmVwIHh5enp5IGFjdHVhbCAmJgorCWdyZXAgYWx0ZXJuYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm8tbm90ZXMgcmVzZXRzIGRlZmF1bHQgc3RhdGUnICcKKwlnaXQgbG9nIC0xIC0tbm90ZXMgLS1ub3Rlcz1hbHRlcm5hdGUgXAorCQktLW5vLW5vdGVzIC0tbm90ZXM9YWx0ZXJuYXRlIFwKKwkJPmFjdHVhbCAmJgorCSEgZ3JlcCB4eXp6eSBhY3R1YWwgJiYKKwlncmVwIGFsdGVybmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vLW5vdGVzIHJlc2V0cyByZWYgbGlzdCcgJworCWdpdCBsb2cgLTEgLS1ub3RlcyAtLW5vdGVzPWFsdGVybmF0ZSBcCisJCS0tbm8tbm90ZXMgLS1ub3RlcyBcCisJCT5hY3R1YWwgJiYKKwlncmVwIHh5enp5IGFjdHVhbCAmJgorCSEgZ3JlcCBhbHRlcm5hdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgLW0gbm90ZXMnICcKKwl0ZXN0X2NvbW1pdCA1dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tIHNwYW0gLW0gImZvbyR7TEZ9YmFyJHtMRn1iYXoiICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0LW0gPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTV0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1zcGFtCisJCSR7aW5kZW50fQorCQkke2luZGVudH1mb28KKwkJJHtpbmRlbnR9YmFyCisJCSR7aW5kZW50fWJhegorCisJRU9GCisJY2F0IGV4cGVjdC1GID4+ZXhwZWN0LW0gJiYKKwlnaXQgbG9nIC00ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIG5vdGUgd2l0aCBhZGQgLWYgLUYgL2Rldi9udWxsJyAnCisJZ2l0IG5vdGVzIGFkZCAtZiAtRiAvZGV2L251bGwgJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3Qtcm0tRiA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NXRoCisKKwlFT0YKKwljYXQgZXhwZWN0LUYgPj5leHBlY3Qtcm0tRiAmJgorCWdpdCBsb2cgLTQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ybS1GIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBjcmVhdGUgZW1wdHkgbm90ZSB3aXRoIC1tICIiJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAiIiAmJgorCWdpdCBsb2cgLTQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ybS1GIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIHdpdGggY29tYmluYXRpb24gb2YgLW0gYW5kIC1GJyAnCisJY2F0ID5leHBlY3QtY29tYmluZV9tX2FuZF9GIDw8LUVPRiAmJgorCQlmb28KKworCQl4eXp6eQorCisJCWJhcgorCisJCXp5eHh5CisKKwkJYmF6CisJRU9GCisJZWNobyAieHl6enkiID5ub3RlX2EgJiYKKwllY2hvICJ6eXh4eSIgPm5vdGVfYiAmJgorCWdpdCBub3RlcyBhZGQgLW0gImZvbyIgLUYgbm90ZV9hIC1tICJiYXIiIC1GIG5vdGVfYiAtbSAiYmF6IiAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtY29tYmluZV9tX2FuZF9GIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbm90ZSB3aXRoICJnaXQgbm90ZXMgcmVtb3ZlIicgJworCWdpdCBub3RlcyByZW1vdmUgSEVBRF4gJiYKKwlnaXQgbm90ZXMgcmVtb3ZlICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJY2F0ID5leHBlY3Qtcm0tcmVtb3ZlIDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH01dGgKKworCQljb21taXQgJHBhcmVudAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE2OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH00dGgKKworCUVPRgorCWNhdCBleHBlY3QtbXVsdGlsaW5lID4+ZXhwZWN0LXJtLXJlbW92ZSAmJgorCWdpdCBsb2cgLTQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ybS1yZW1vdmUgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3Zpbmcgbm9uLWV4aXN0aW5nIG5vdGUgc2hvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbW1pdCcgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzID5iZWZvcmVfY29tbWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHJlbW92ZSBIRUFEXiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzID5hZnRlcl9jb21taXQgJiYKKwl0ZXN0X2NtcCBiZWZvcmVfY29tbWl0IGFmdGVyX2NvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBtb3JlIHRoYW4gb25lJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKworCSMgV2UgaGF2ZSBvbmx5IHR3byAtLSBhZGQgYW5vdGhlciBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzCisJZ2l0IG5vdGVzIGFkZCAtbSAiZXh0cmEiICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWZ0ZXItcmVtb3ZhbC1leHBlY3QgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIEhFQUReXiBIRUFEXl5eICYmCisJZ2l0IG5vdGVzIGxpc3QgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhZnRlci1yZW1vdmFsLWV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZpbmcgaXMgYXRvbWljJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgcmVtb3ZlIEhFQUReXiBIRUFEXl5eIEhFQUReICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0ICIkYmVmb3JlIiA9ICIkYWZ0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIHdpdGggLS1pZ25vcmUtbWlzc2luZycgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisKKwkjIFdlIGhhdmUgb25seSB0d28gLS0gYWRkIGFub3RoZXIgYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cworCWdpdCBub3RlcyBhZGQgLW0gImV4dHJhIiAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFmdGVyLXJlbW92YWwtZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSAtLWlnbm9yZS1taXNzaW5nIEhFQUReXiBIRUFEXl5eIEhFQUReICYmCisJZ2l0IG5vdGVzIGxpc3QgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhZnRlci1yZW1vdmFsLWV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3Zpbmcgd2l0aCAtLWlnbm9yZS1taXNzaW5nIGJ1dCBib2d1cyByZWYnICcKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvY29tbWl0cyAkYmVmb3JlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyByZW1vdmUgLS1pZ25vcmUtbWlzc2luZyBIRUFEXl4gSEVBRF5eXiBOTy1TVUNILUNPTU1JVCAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdCAiJGJlZm9yZSIgPSAiJGFmdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmVhZHMgZnJvbSAtLXN0ZGluJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKworCSMgV2UgaGF2ZSBvbmx5IHR3byAtLSBhZGQgYW5vdGhlciBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzCisJZ2l0IG5vdGVzIGFkZCAtbSAiZXh0cmEiICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWZ0ZXItcmVtb3ZhbC1leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReXiBIRUFEXl5eID5pbnB1dCAmJgorCWdpdCBub3RlcyByZW1vdmUgLS1zdGRpbiA8aW5wdXQgJiYKKwlnaXQgbm90ZXMgbGlzdCB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFmdGVyLXJlbW92YWwtZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgLS1zdGRpbiBpcyBhbHNvIGF0b21pYycgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXl4gSEVBRF5eXiBIRUFEXiA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgcmVtb3ZlIC0tc3RkaW4gPGlucHV0ICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0ICIkYmVmb3JlIiA9ICIkYWZ0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIHdpdGggLS1zdGRpbiAtLWlnbm9yZS1taXNzaW5nJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKworCSMgV2UgaGF2ZSBvbmx5IHR3byAtLSBhZGQgYW5vdGhlciBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzCisJZ2l0IG5vdGVzIGFkZCAtbSAiZXh0cmEiICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWZ0ZXItcmVtb3ZhbC1leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReXiBIRUFEXl5eIEhFQUReID5pbnB1dCAmJgorCWdpdCBub3RlcyByZW1vdmUgLS1pZ25vcmUtbWlzc2luZyAtLXN0ZGluIDxpbnB1dCAmJgorCWdpdCBub3RlcyBsaXN0IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWZ0ZXItcmVtb3ZhbC1leHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3Qgbm90ZXMgd2l0aCAiZ2l0IG5vdGVzIGxpc3QiJyAnCisJY29tbWl0XzI9JChnaXQgcmV2LXBhcnNlIDJuZCkgJiYKKwljb21taXRfMz0kKGdpdCByZXYtcGFyc2UgM3JkKSAmJgorCW5vdGVfMj0kKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMikgJiYKKwlub3RlXzM9JChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvY29tbWl0czokY29tbWl0XzMpICYmCisJc29ydCAtdCIgIiAtazIgPmV4cGVjdCA8PC1FT0YgJiYKKwkJJG5vdGVfMiAkY29tbWl0XzIKKwkJJG5vdGVfMyAkY29tbWl0XzMKKwlFT0YKKwlnaXQgbm90ZXMgbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IG5vdGVzIHdpdGggImdpdCBub3RlcyInICcKKwlnaXQgbm90ZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdCBzcGVjaWZpYyBub3RlIHdpdGggImdpdCBub3RlcyBsaXN0IDxvYmplY3Q+IicgJworCWdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3Rpbmcgbm9uLWV4aXN0aW5nIG5vdGVzIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmQgdG8gZXhpc3Rpbmcgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlJbml0aWFsIHNldCBvZiBub3RlcworCisJCU1vcmUgbm90ZXMgYXBwZW5kZWQgd2l0aCBnaXQgbm90ZXMgYXBwZW5kCisJRU9GCisJZ2l0IG5vdGVzIGFkZCAtbSAiSW5pdGlhbCBzZXQgb2Ygbm90ZXMiICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiTW9yZSBub3RlcyBhcHBlbmRlZCB3aXRoIGdpdCBub3RlcyBhcHBlbmQiICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBub3RlcyBsaXN0IiBkb2VzIG5vdCBleHBhbmQgdG8gImdpdCBub3RlcyBsaXN0IEhFQUQiJyAnCisJY29tbWl0XzU9JChnaXQgcmV2LXBhcnNlIDV0aCkgJiYKKwlub3RlXzU9JChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvY29tbWl0czokY29tbWl0XzUpICYmCisJc29ydCAtdCIgIiAtazIgPmV4cGVjdF9saXN0IDw8LUVPRiAmJgorCQkkbm90ZV8yICRjb21taXRfMgorCQkkbm90ZV8zICRjb21taXRfMworCQkkbm90ZV81ICRjb21taXRfNQorCUVPRgorCWdpdCBub3RlcyBsaXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RfbGlzdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kaW5nIGVtcHR5IHN0cmluZyBkb2VzIG5vdCBjaGFuZ2UgZXhpc3Rpbmcgbm90ZScgJworCWdpdCBub3RlcyBhcHBlbmQgLW0gIiIgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgYXBwZW5kID09IGFkZCB3aGVuIHRoZXJlIGlzIG5vIGV4aXN0aW5nIG5vdGUnICcKKwlnaXQgbm90ZXMgcmVtb3ZlIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFEICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiSW5pdGlhbCBzZXQgb2Ygbm90ZXMke0xGfSR7TEZ9TW9yZSBub3RlcyBhcHBlbmRlZCB3aXRoIGdpdCBub3RlcyBhcHBlbmQiICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kaW5nIGVtcHR5IHN0cmluZyB0byBub24tZXhpc3Rpbmcgbm90ZSBkb2VzIG5vdCBjcmVhdGUgbm90ZScgJworCWdpdCBub3RlcyByZW1vdmUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBsaXN0IEhFQUQgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgb3RoZXIgbm90ZSBvbiBhIGRpZmZlcmVudCBub3RlcyByZWYgKHNldHVwKScgJworCXRlc3RfY29tbWl0IDZ0aCAmJgorCUdJVF9OT1RFU19SRUY9InJlZnMvbm90ZXMvb3RoZXIiIGdpdCBub3RlcyBhZGQgLW0gIm90aGVyIG5vdGUiICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0LW5vdC1vdGhlciA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisJRU9GCisJY3AgZXhwZWN0LW5vdC1vdGhlciBleHBlY3Qtb3RoZXIgJiYKKwljYXQgPj5leHBlY3Qtb3RoZXIgPDwtRU9GCisKKwkJTm90ZXMgKG90aGVyKToKKwkJJHtpbmRlbnR9b3RoZXIgbm90ZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEbyBub3Qgc2hvdyBub3RlIG9uIG90aGVyIHJlZiBieSBkZWZhdWx0JyAnCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LW5vdC1vdGhlciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRG8gc2hvdyBub3RlIHdoZW4gcmVmIGlzIGdpdmVuIGluIEdJVF9OT1RFU19SRUYnICcKKwlHSVRfTk9URVNfUkVGPSJyZWZzL25vdGVzL290aGVyIiBnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtb3RoZXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RvIHNob3cgbm90ZSB3aGVuIHJlZiBpcyBnaXZlbiBpbiBjb3JlLm5vdGVzUmVmIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGNvcmUubm90ZXNSZWYgInJlZnMvbm90ZXMvb3RoZXIiICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LW90aGVyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEbyBub3Qgc2hvdyBub3RlIHdoZW4gY29yZS5ub3Rlc1JlZiBpcyBvdmVycmlkZGVuJyAnCisJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiAicmVmcy9ub3Rlcy9vdGhlciIgJiYKKwlHSVRfTk9URVNfUkVGPSJyZWZzL25vdGVzL3dyb25nIiBnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtbm90LW90aGVyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTaG93IGFsbCBub3RlcyB3aGVuIG5vdGVzLmRpc3BsYXlSZWY9cmVmcy9ub3Rlcy8qJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJY2F0ID5leHBlY3QtYm90aCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW9yZGVyIHRlc3QKKworCQlOb3RlcyAob3RoZXIpOgorCQkke2luZGVudH1vdGhlciBub3RlCisKKwkJY29tbWl0ICRwYXJlbnQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXJlcGxhY2VtZW50IGZvciBkZWxldGVkIG5vdGUKKwlFT0YKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvY29tbWl0cyBnaXQgbm90ZXMgYWRkIFwKKwkJLW0icmVwbGFjZW1lbnQgZm9yIGRlbGV0ZWQgbm90ZSIgSEVBRF4gJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvY29tbWl0cyBnaXQgbm90ZXMgYWRkIC1tIm9yZGVyIHRlc3QiICYmCisJdGVzdF91bmNvbmZpZyBjb3JlLm5vdGVzUmVmICYmCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JlLm5vdGVzUmVmIGlzIGltcGxpY2l0bHkgaW4gbm90ZXMuZGlzcGxheVJlZicgJworCXRlc3RfY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzICYmCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL290aGVyICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzLmRpc3BsYXlSZWYgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlJyAnCisJdGVzdF91bmNvbmZpZyBjb3JlLm5vdGVzUmVmICYmCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL2NvbW1pdHMgJiYKKwlnaXQgY29uZmlnIC0tYWRkIG5vdGVzLmRpc3BsYXlSZWYgcmVmcy9ub3Rlcy9vdGhlciAmJgorCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3Rlcy5kaXNwbGF5UmVmIHJlc3BlY3RzIG9yZGVyJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0LWJvdGgtcmV2ZXJzZWQgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTg6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTZ0aAorCisJCU5vdGVzIChvdGhlcik6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3JkZXIgdGVzdAorCUVPRgorCXRlc3RfY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9vdGhlciAmJgorCXRlc3RfY29uZmlnIG5vdGVzLmRpc3BsYXlSZWYgcmVmcy9ub3Rlcy9jb21taXRzICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGgtcmV2ZXJzZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9OT1RFU19ESVNQTEFZX1JFRiB3b3JrcycgJworCUdJVF9OT1RFU19ESVNQTEFZX1JFRj1yZWZzL25vdGVzL2NvbW1pdHM6cmVmcy9ub3Rlcy9vdGhlciBcCisJCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfTk9URVNfRElTUExBWV9SRUYgb3ZlcnJpZGVzIGNvbmZpZycgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWNhdCA+ZXhwZWN0LW5vbmUgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTg6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTZ0aAorCisJCWNvbW1pdCAkcGFyZW50CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTV0aAorCUVPRgorCXRlc3RfY29uZmlnIG5vdGVzLmRpc3BsYXlSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlHSVRfTk9URVNfUkVGPSBHSVRfTk9URVNfRElTUExBWV9SRUY9IGdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ub25lIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctbm90ZXM9KiBhZGRzIHRvIEdJVF9OT1RFU19ESVNQTEFZX1JFRicgJworCUdJVF9OT1RFU19SRUY9IEdJVF9OT1RFU19ESVNQTEFZX1JFRj0gZ2l0IGxvZyAtLXNob3ctbm90ZXM9KiAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tc3RhbmRhcmQtbm90ZXMnICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QtY29tbWl0cyA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW9yZGVyIHRlc3QKKwlFT0YKKwlnaXQgbG9nIC0tbm8tc3RhbmRhcmQtbm90ZXMgLS1zaG93LW5vdGVzPWNvbW1pdHMgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1jb21taXRzIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0YW5kYXJkLW5vdGVzJyAnCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCWdpdCBsb2cgLS1uby1zdGFuZGFyZC1ub3RlcyAtLXNob3ctbm90ZXM9Y29tbWl0cyBcCisJCS0tc3RhbmRhcmQtbm90ZXMgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctbm90ZXM9cmVmIGFjY3VtdWxhdGVzJyAnCisJZ2l0IGxvZyAtLXNob3ctbm90ZXM9b3RoZXIgLS1zaG93LW5vdGVzPWNvbW1pdHMgXAorCQkgLS1uby1zdGFuZGFyZC1ub3RlcyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGgtcmV2ZXJzZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FsbG93IG5vdGVzIG9uIG5vbi1jb21taXRzICh0cmVlcywgYmxvYnMsIHRhZ3MpJyAnCisJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL290aGVyICYmCisJZWNobyAiTm90ZSBvbiBhIHRyZWUiID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlIG9uIGEgdHJlZSIgSEVBRDogJiYKKwlnaXQgbm90ZXMgc2hvdyBIRUFEOiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gIk5vdGUgb24gYSBibG9iIiA+ZXhwZWN0ICYmCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgSEVBRCA+ZmlsZXMgJiYKKwlmaWxlbmFtZT0kKGhlYWQgLW4xIGZpbGVzKSAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGUgb24gYSBibG9iIiBIRUFEOiRmaWxlbmFtZSAmJgorCWdpdCBub3RlcyBzaG93IEhFQUQ6JGZpbGVuYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAiTm90ZSBvbiBhIHRhZyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWEgLW0gIlRoaXMgaXMgYW4gYW5ub3RhdGVkIHRhZyIgZm9vYmFyIEhFQUReICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZSBvbiBhIHRhZyIgZm9vYmFyICYmCisJZ2l0IG5vdGVzIHNob3cgZm9vYmFyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1DIicgJworCXRlc3RfY29tbWl0IDd0aCAmJgorCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxOToxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9N3RoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW9yZGVyIHRlc3QKKwlFT0YKKwlub3RlPSQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pICYmCisJZ2l0IG5vdGVzIGFkZCAtQyAkbm90ZSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEXiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG5vbi1leGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLUMiIGZhaWxzJyAnCisJdGVzdF9jb21taXQgOHRoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCAtQyBkZWFkYmVlZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBsaXN0IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgZnJvbSBub24tYmxvYiB3aXRoICJnaXQgbm90ZXMgYWRkIC1DIiBmYWlscycgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgYWRkIC1DICRjb21taXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgYWRkIC1DICR0cmVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIGJsb2Igd2l0aCAiZ2l0IG5vdGVzIGFkZCAtQyIgcmV1c2VzIGJsb2IgaWQnICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjA6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTh0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1UaGlzIGlzIGEgYmxvYiBvYmplY3QKKwlFT0YKKwllY2hvICJUaGlzIGlzIGEgYmxvYiBvYmplY3QiIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPmJsb2IgJiYKKwlnaXQgbm90ZXMgYWRkIC1DICQoY2F0IGJsb2IpICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGJsb2IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1jIicgJworCXRlc3RfY29tbWl0IDl0aCAmJgorCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMToxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9OXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwlub3RlPSQoZ2l0IG5vdGVzIGxpc3QgSEVBRF5eKSAmJgorCU1TRz0ieWV0IGFub3RoZXIgbm90ZSIgZ2l0IG5vdGVzIGFkZCAtYyAkbm90ZSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgZnJvbSBub24tZXhpc3Rpbmcgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1jIiBmYWlscycgJworCXRlc3RfY29tbWl0IDEwdGggJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgTVNHPSJ5ZXQgYW5vdGhlciBub3RlIiBnaXQgbm90ZXMgYWRkIC1jIGRlYWRiZWVmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmQgdG8gbm90ZSBmcm9tIG90aGVyIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFwcGVuZCAtQyInICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIxOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH05dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCUVPRgorCW5vdGU9JChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1DICRub3RlIEhFQUReICYmCisJZ2l0IGxvZyAtMSBIRUFEXiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG90aGVyIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFwcGVuZCAtYyInICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjI6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTEwdGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3RoZXIgbm90ZQorCUVPRgorCW5vdGU9JChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlNU0c9Im90aGVyIG5vdGUiIGdpdCBub3RlcyBhcHBlbmQgLWMgJG5vdGUgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB0byBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIC1jIicgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMjoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTB0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJRU9GCisJbm90ZT0kKGdpdCBub3RlcyBsaXN0IEhFQUQpICYmCisJTVNHPSJ5ZXQgYW5vdGhlciBub3RlIiBnaXQgbm90ZXMgYXBwZW5kIC1jICRub3RlICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkiJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSA0dGgpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTY6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTR0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1UaGlzIGlzIGEgYmxvYiBvYmplY3QKKwlFT0YKKwlnaXQgbm90ZXMgY29weSA4dGggNHRoICYmCisJZ2l0IGxvZyAzcmQuLjR0aCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBub3RlcyBsaXN0IDR0aCA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgOHRoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgbm90ZSB3aXRoICJnaXQgbm90ZXMgY29weSIgd2l0aCBkZWZhdWx0JyAnCisJdGVzdF9jb21taXQgMTF0aCAmJgorCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTF0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJRU9GCisJZ2l0IG5vdGVzIGNvcHkgSEVBRF4gJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRF4gPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldmVudCBvdmVyd3JpdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkiJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgSEVBRH4yIEhFQUQgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTF0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJRU9GCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUReID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IG92ZXJ3cml0ZSB3aXRoICJnaXQgbm90ZXMgY29weSAtZiInICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjM6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTExdGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9VGhpcyBpcyBhIGJsb2Igb2JqZWN0CisJRU9GCisJZ2l0IG5vdGVzIGNvcHkgLWYgSEVBRH4zIEhFQUQgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRH4zID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IG92ZXJ3cml0ZSB3aXRoICJnaXQgbm90ZXMgY29weSAtZiIgd2l0aCBkZWZhdWx0JyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIzOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwlnaXQgbm90ZXMgY29weSAtZiBIRUFEfjIgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRH4yID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCBjb3B5IG5vdGUgZnJvbSBvYmplY3Qgd2l0aG91dCBub3RlcycgJworCXRlc3RfY29tbWl0IDEydGggJiYKKwl0ZXN0X2NvbW1pdCAxM3RoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgSEVBRF4gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLXN0ZGluJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjU6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTEzdGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCisJCWNvbW1pdCAkcGFyZW50CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjQ6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTEydGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3RoZXIgbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCUVPRgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+PmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLXN0ZGluIDxjb3B5ICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUR+MiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUR+MyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRF4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAodW5jb25maWd1cmVkKScgJworCXRlc3RfY29tbWl0IDE0dGggJiYKKwl0ZXN0X2NvbW1pdCAxNXRoICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE1dGgKKworCQljb21taXQgJHBhcmVudAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI2OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNHRoCisJRU9GCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID4+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChlbmFibGVkKScgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKworCQljb21taXQgJHBhcmVudAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI2OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNHRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBvdmVyd3JpdGUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID4+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChkaXNhYmxlZCknICcKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlLmJhciBmYWxzZSAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWJhciA8Y29weSAmJgorCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAob3ZlcndyaXRlKScgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTV0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1hIGZyZXNoIG5vdGUKKwlFT0YKKwlnaXQgbm90ZXMgYWRkIC1mIC1tImEgZnJlc2ggbm90ZSIgSEVBRF4gJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBvdmVyd3JpdGUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGlnbm9yZSknICcKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBpZ25vcmUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGFwcGVuZCknICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE1dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9YSBmcmVzaCBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH1hbm90aGVyIGZyZXNoIG5vdGUKKwlFT0YKKwlnaXQgbm90ZXMgYWRkIC1mIC1tImFub3RoZXIgZnJlc2ggbm90ZSIgSEVBRF4gJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBjb25jYXRlbmF0ZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoYXBwZW5kIHR3byB0byBvbmUpJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fWEgZnJlc2ggbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9YW5vdGhlciBmcmVzaCBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH1hcHBlbmQgMQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9YXBwZW5kIDIKKwlFT0YKKwlnaXQgbm90ZXMgYWRkIC1mIC1tImFwcGVuZCAxIiBIRUFEXiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0iYXBwZW5kIDIiIEhFQUReXiAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGNvbmNhdGVuYXRlICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPj5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGFwcGVuZCBlbXB0eSknICcKKwlnaXQgbm90ZXMgcmVtb3ZlIEhFQUReICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgY29uY2F0ZW5hdGUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9OT1RFU19SRVdSSVRFX01PREUgd29ya3MnICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE1dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9cmVwbGFjZW1lbnQgbm90ZSAxCisJRU9GCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgY29uY2F0ZW5hdGUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJyZXBsYWNlbWVudCBub3RlIDEiIEhFQUReICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJR0lUX05PVEVTX1JFV1JJVEVfTU9ERT1vdmVyd3JpdGUgZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9OT1RFU19SRVdSSVRFX1JFRiB3b3JrcycgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0ICRjb21taXQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTV0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1yZXBsYWNlbWVudCBub3RlIDIKKwlFT0YKKwlnaXQgbm90ZXMgYWRkIC1mIC1tInJlcGxhY2VtZW50IG5vdGUgMiIgSEVBRF4gJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBvdmVyd3JpdGUgJiYKKwl0ZXN0X3VuY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlHSVRfTk9URVNfUkVXUklURV9SRUY9cmVmcy9ub3Rlcy9jb21taXRzOnJlZnMvbm90ZXMvb3RoZXIgXAorCQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX05PVEVTX1JFV1JJVEVfUkVGIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgbm90ZXMgYWRkIC1mIC1tInJlcGxhY2VtZW50IG5vdGUgMyIgSEVBRF4gJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBvdmVyd3JpdGUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmIHJlZnMvbm90ZXMvb3RoZXIgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlHSVRfTk9URVNfUkVXUklURV9SRUY9cmVmcy9ub3Rlcy9jb21taXRzIFwKKwkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwlncmVwICJyZXBsYWNlbWVudCBub3RlIDMiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSBkaWFnbm9zZXMgdG9vIG1hbnkgb3IgdG9vIGZldyBwYXJhbWV0ZXJzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInRvbyBmZXcgcGFyYW1ldGVycyIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSBvbmUgdHdvIHRocmVlIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0b28gbWFueSBwYXJhbWV0ZXJzIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiBleHBhbmRzIHJlZnMvaGVhZHMvbWFzdGVyIHRvIHJlZnMvbm90ZXMvcmVmcy9oZWFkcy9tYXN0ZXInICcKKwl0ZXN0X3VuY29uZmlnIGNvcmUubm90ZXNSZWYgJiYKKwlzYW5lX3Vuc2V0IEdJVF9OT1RFU19SRUYgJiYKKwllY2hvIHJlZnMvbm90ZXMvcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBub3RlcyAtLXJlZj1yZWZzL2hlYWRzL21hc3RlciBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmIChubyBvdmVycmlkZXMpJyAnCisJdGVzdF91bmNvbmZpZyBjb3JlLm5vdGVzUmVmICYmCisJc2FuZV91bnNldCBHSVRfTk9URVNfUkVGICYmCisJZWNobyByZWZzL25vdGVzL2NvbW1pdHMgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmIChjb3JlLm5vdGVzUmVmKScgJworCXRlc3RfY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9mb28gJiYKKwllY2hvIHJlZnMvbm90ZXMvZm9vID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgZ2V0LXJlZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiAoR0lUX05PVEVTX1JFRiknICcKKwllY2hvIHJlZnMvbm90ZXMvYmFyID5leHBlY3QgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvYmFyIGdpdCBub3RlcyBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmICgtLXJlZiknICcKKwllY2hvIHJlZnMvbm90ZXMvYmF6ID5leHBlY3QgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvYmFyIGdpdCBub3RlcyAtLXJlZj1iYXogZ2V0LXJlZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0aW5nIG9mIGVtcHR5IG5vdGVzJyAnCisJdGVzdF91bmNvbmZpZyBjb3JlLm5vdGVzUmVmICYmCisJdGVzdF9jb21taXQgMTZ0aCAmJgorCWVtcHR5X2Jsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgL2Rldi9udWxsKSAmJgorCWVjaG8gIiRlbXB0eV9ibG9iIiA+ZXhwZWN0X2VtcHR5CisnCisKK3doaWxlIHJlYWQgY21kCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIidnaXQgbm90ZXMgJGNtZCcgcmVtb3ZlcyBlbXB0eSBub3RlIiAiCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgbm90ZXMgcmVtb3ZlIEhFQUQgJiYKKwkJTVNHPSBnaXQgbm90ZXMgJGNtZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFECisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJ2dpdCBub3RlcyAkY21kIC0tYWxsb3ctZW1wdHknIHN0b3JlcyBlbXB0eSBub3RlIiAiCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgbm90ZXMgcmVtb3ZlIEhFQUQgJiYKKwkJTVNHPSBnaXQgbm90ZXMgJGNtZCAtLWFsbG93LWVtcHR5ICYmCisJCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RfZW1wdHkgYWN0dWFsCisJIgorZG9uZSA8PFxFT0YKK2FkZAorYWRkIC1GIC9kZXYvbnVsbAorYWRkIC1tICIiCithZGQgLWMgIiRlbXB0eV9ibG9iIgorYWRkIC1DICIkZW1wdHlfYmxvYiIKK2FwcGVuZAorYXBwZW5kIC1GIC9kZXYvbnVsbAorYXBwZW5kIC1tICIiCithcHBlbmQgLWMgIiRlbXB0eV9ibG9iIgorYXBwZW5kIC1DICIkZW1wdHlfYmxvYiIKK2VkaXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBub3RlcyBhcmUgZGlzcGxheWVkIGJ5IGdpdCBsb2cnICcKKwl0ZXN0X2NvbW1pdCAxN3RoICYmCisJZ2l0IGxvZyAtMSA+ZXhwZWN0ICYmCisJY2F0ID4+ZXhwZWN0IDw8LUVPRiAmJgorCisJCU5vdGVzOgorCUVPRgorCWdpdCBub3RlcyBhZGQgLUMgIiRlbXB0eV9ibG9iIiAtLWFsbG93LWVtcHR5ICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDItbm90ZXMtaW5kZXgtZXhwZW5zaXZlLnNoIGIvdC90MzMwMi1ub3Rlcy1pbmRleC1leHBlbnNpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzIxN2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDItbm90ZXMtaW5kZXgtZXhwZW5zaXZlLnNoCkBAIC0wLDAgKzEsMTM0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjb21taXQgbm90ZXMgaW5kZXggKGV4cGVuc2l2ZSEpJworCisuIC4vdGVzdC1saWIuc2gKKworY3JlYXRlX3JlcG8gKCkgeworCW51bWJlcl9vZl9jb21taXRzPSQxCisJbnI9MAorCXRlc3QgLWQgLmdpdCB8fCB7CisJZ2l0IGluaXQgJiYKKwkoCisJCXdoaWxlIHRlc3QgJG5yIC1sdCAkbnVtYmVyX29mX2NvbW1pdHMKKwkJZG8KKwkJCW5yPSQoKCRucisxKSkKKwkJCW1hcms9JCgoJG5yKyRucikpCisJCQlub3RlbWFyaz0kKCgkbWFyaysxKSkKKwkJCXRlc3RfdGljayAmJgorCQkJY2F0IDw8LUlOUFVUX0VORCAmJgorCQkJY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCisJCQltYXJrIDokbWFyaworCQkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCQlkYXRhIDw8Q09NTUlUCisJCQljb21taXQgIyRucgorCQkJQ09NTUlUCisKKwkJCU0gNjQ0IGlubGluZSBmaWxlCisJCQlkYXRhIDw8RU9GCisJCQlmaWxlIGluIGNvbW1pdCAjJG5yCisJCQlFT0YKKworCQkJYmxvYgorCQkJbWFyayA6JG5vdGVtYXJrCisJCQlkYXRhIDw8RU9GCisJCQlub3RlIGZvciBjb21taXQgIyRucgorCQkJRU9GCisKKwkJCUlOUFVUX0VORAorCQkJZWNobyAiTiA6JG5vdGVtYXJrIDokbWFyayIgPj5ub3RlX2NvbW1pdAorCQlkb25lICYmCisJCXRlc3RfdGljayAmJgorCQljYXQgPDwtSU5QVVRfRU5EICYmCisJCWNvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKKwkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCWRhdGEgPDxDT01NSVQKKwkJbm90ZXMKKwkJQ09NTUlUCisKKwkJSU5QVVRfRU5ECisKKwkJY2F0IG5vdGVfY29tbWl0CisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzCisJfQorfQorCit0ZXN0X25vdGVzICgpIHsKKwljb3VudD0kMSAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMgJiYKKwlnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID5vdXRwdXQgJiYKKwlpPSRjb3VudCAmJgorCXdoaWxlIHRlc3QgJGkgLWd0IDAKKwlkbworCQllY2hvICIgICAgY29tbWl0ICMkaSIgJiYKKwkJZWNobyAiICAgIG5vdGUgZm9yIGNvbW1pdCAjJGkiICYmCisJCWk9JCgoJGktMSkpCisJZG9uZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit3cml0ZV9zY3JpcHQgdGltZV9ub3RlcyA8PFxFT0YKKwltb2RlPSQxCisJaT0xCisJd2hpbGUgdGVzdCAkaSAtbHQgJDIKKwlkbworCQljYXNlICQxIGluCisJCW5vLW5vdGVzKQorCQkJR0lUX05PVEVTX1JFRj1ub24tZXhpc3RpbmcKKwkJCWV4cG9ydCBHSVRfTk9URVNfUkVGCisJCQk7OworCQlub3RlcykKKwkJCXVuc2V0IEdJVF9OT1RFU19SRUYKKwkJCTs7CisJCWVzYWMKKwkJZ2l0IGxvZworCQlpPSQoKCRpKzEpKQorCWRvbmUgPi9kZXYvbnVsbAorRU9GCisKK3RpbWVfbm90ZXMgKCkgeworCWZvciBtb2RlIGluIG5vLW5vdGVzIG5vdGVzCisJZG8KKwkJZWNobyAkbW9kZQorCQkvdXNyL2Jpbi90aW1lIC4uL3RpbWVfbm90ZXMgJG1vZGUgJDEKKwlkb25lCit9CisKK2RvX3Rlc3RzICgpIHsKKwljb3VudD0kMSBwcj0kezItfQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHIgInNldHVwICRjb3VudCIgJworCQlta2RpciAiJGNvdW50IiAmJgorCQkoCisJCQljZCAiJGNvdW50IiAmJgorCQkJY3JlYXRlX3JlcG8gIiRjb3VudCIKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByICdub3RlcyB3b3JrJyAnCisJCSgKKwkJCWNkICIkY291bnQiICYmCisJCQl0ZXN0X25vdGVzICIkY291bnQiCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJVU1JfQklOX1RJTUUke3ByOissJHByfSIgJ25vdGVzIHRpbWluZyB3aXRoIC91c3IvYmluL3RpbWUnICcKKwkJKAorCQkJY2QgIiRjb3VudCIgJiYKKwkJCXRpbWVfbm90ZXMgMTAwCisJCSkKKwknCit9CisKK2RvX3Rlc3RzIDEwCitmb3IgY291bnQgaW4gMTAwIDEwMDAgMTAwMDAKK2RvCisJZG9fdGVzdHMgIiRjb3VudCIgRVhQRU5TSVZFCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMy1ub3Rlcy1zdWJ0cmVlcy5zaCBiL3QvdDMzMDMtbm90ZXMtc3VidHJlZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzA0YWVlOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDMtbm90ZXMtc3VidHJlZXMuc2gKQEAgLTAsMCArMSwxOTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNvbW1pdCBub3RlcyBvcmdhbml6ZWQgaW4gc3VidHJlZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitudW1iZXJfb2ZfY29tbWl0cz0xMDAKKworc3RhcnRfbm90ZV9jb21taXQgKCkgeworCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcworQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy9jb21taXRzXjAKK2RlbGV0ZWFsbAorSU5QVVRfRU5ECisKK30KKwordmVyaWZ5X25vdGVzICgpIHsKKwlnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gb3V0cHV0ICYmCisJaT0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwl3aGlsZSBbICRpIC1ndCAwIF07IGRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgbm90ZSBmb3IgY29tbWl0ICMkaSIgJiYKKwkJaT0kKCgkaS0xKSk7CisJZG9uZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXA6IGNyZWF0ZSAkbnVtYmVyX29mX2NvbW1pdHMgY29tbWl0cyIgJworCisJKAorCQlucj0wICYmCisJCXdoaWxlIFsgJG5yIC1sdCAkbnVtYmVyX29mX2NvbW1pdHMgXTsgZG8KKwkJCW5yPSQoKCRucisxKSkgJiYKKwkJCXRlc3RfdGljayAmJgorCQkJY2F0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0ICMkbnIKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZmlsZQorZGF0YSA8PEVPRgorZmlsZSBpbiBjb21taXQgIyRucgorRU9GCisKK0lOUFVUX0VORAorCisJCWRvbmUgJiYKKwkJdGVzdF90aWNrICYmCisJCWNhdCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitubyBub3RlcworQ09NTUlUCisKK2RlbGV0ZWFsbAorCitJTlBVVF9FTkQKKworCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvY29tbWl0cworJworCit0ZXN0X3NoYTFfYmFzZWQgKCkgeworCSgKKwkJc3RhcnRfbm90ZV9jb21taXQgJiYKKwkJbnI9JG51bWJlcl9vZl9jb21taXRzICYmCisJCWdpdCByZXYtbGlzdCByZWZzL2hlYWRzL21hc3RlciB8CisJCXdoaWxlIHJlYWQgc2hhMTsgZG8KKwkJCW5vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDEiKQorCQkJY2F0IDw8SU5QVVRfRU5EICYmCitNIDEwMDY0NCBpbmxpbmUgJG5vdGVfcGF0aAorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitJTlBVVF9FTkQKKworCQkJbnI9JCgoJG5yLTEpKQorCQlkb25lCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiAyLzM4LWZhbm91dCcgJ3Rlc3Rfc2hhMV9iYXNlZCAic3xeLi58Ji98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiAyLzM4LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiAyLzIvMzYtZmFub3V0JyAndGVzdF9zaGExX2Jhc2VkICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gMi8yLzM2LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiAyLzIvMi8zNC1mYW5vdXQnICd0ZXN0X3NoYTFfYmFzZWQgInN8XlwoLi5cKVwoLi5cKVwoLi5cKXxcMS9cMi9cMy98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiAyLzIvMi8zNC1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3Rfc2FtZV9ub3RlcyAoKSB7CisJKAorCQlzdGFydF9ub3RlX2NvbW1pdCAmJgorCQlucj0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwkJZ2l0IHJldi1saXN0IHJlZnMvaGVhZHMvbWFzdGVyIHwKKwkJd2hpbGUgcmVhZCBzaGExOyBkbworCQkJZmlyc3Rfbm90ZV9wYXRoPSQoZWNobyAiJHNoYTEiIHwgc2VkICIkMSIpCisJCQlzZWNvbmRfbm90ZV9wYXRoPSQoZWNobyAiJHNoYTEiIHwgc2VkICIkMiIpCisJCQljYXQgPDxJTlBVVF9FTkQgJiYKK00gMTAwNjQ0IGlubGluZSAkc2Vjb25kX25vdGVfcGF0aAorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitNIDEwMDY0NCBpbmxpbmUgJGZpcnN0X25vdGVfcGF0aAorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMkbnIKK0VPRgorCitJTlBVVF9FTkQKKworCQkJbnI9JCgoJG5yLTEpKQorCQlkb25lCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzYW1lIG5vdGVzIGluIG5vIGZhbm91dCBhbmQgMi8zOC1mYW5vdXQnICd0ZXN0X3NhbWVfbm90ZXMgInN8Xi4ufCYvfCIgIiInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc2FtZSBub3RlcyBpbiBubyBmYW5vdXQgYW5kIDIvMzgtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNhbWUgbm90ZXMgaW4gbm8gZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndGVzdF9zYW1lX25vdGVzICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIgIiInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc2FtZSBub3RlcyBpbiBubyBmYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc2FtZSBub3RlcyBpbiAyLzM4LWZhbm91dCBhbmQgMi8yLzM2LWZhbm91dCcgJ3Rlc3Rfc2FtZV9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICJzfF4uLnwmL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNhbWUgbm90ZXMgaW4gMi8zOC1mYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc2FtZSBub3RlcyBpbiAyLzIvMi8zNC1mYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd0ZXN0X3NhbWVfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAic3xeXCguLlwpXCguLlwpXCguLlwpfFwxL1wyL1wzL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNhbWUgbm90ZXMgaW4gMi8yLzIvMzQtZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2NvbmNhdGVuYXRlZF9ub3RlcyAoKSB7CisJKAorCQlzdGFydF9ub3RlX2NvbW1pdCAmJgorCQlucj0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwkJZ2l0IHJldi1saXN0IHJlZnMvaGVhZHMvbWFzdGVyIHwKKwkJd2hpbGUgcmVhZCBzaGExOyBkbworCQkJZmlyc3Rfbm90ZV9wYXRoPSQoZWNobyAiJHNoYTEiIHwgc2VkICIkMSIpCisJCQlzZWNvbmRfbm90ZV9wYXRoPSQoZWNobyAiJHNoYTEiIHwgc2VkICIkMiIpCisJCQljYXQgPDxJTlBVVF9FTkQgJiYKK00gMTAwNjQ0IGlubGluZSAkc2Vjb25kX25vdGVfcGF0aAorZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIGNvbW1pdCAjJG5yCitFT0YKKworTSAxMDA2NDQgaW5saW5lICRmaXJzdF9ub3RlX3BhdGgKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIGNvbW1pdCAjJG5yCitFT0YKKworSU5QVVRfRU5ECisKKwkJCW5yPSQoKCRuci0xKSkKKwkJZG9uZQorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0Cit9CisKK3ZlcmlmeV9jb25jYXRlbmF0ZWRfbm90ZXMgKCkgeworCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCXdoaWxlIFsgJGkgLWd0IDAgXTsgZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBmaXJzdCBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgIiAmJgorCQllY2hvICIgICAgc2Vjb25kIG5vdGUgZm9yIGNvbW1pdCAjJGkiICYmCisJCWk9JCgoJGktMSkpOworCWRvbmUgPiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gbm8gZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMzgtZmFub3V0JyAndGVzdF9jb25jYXRlbmF0ZWRfbm90ZXMgInN8Xi4ufCYvfCIgIiInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gbm8gZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMzgtZmFub3V0JyAndmVyaWZ5X2NvbmNhdGVuYXRlZF9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiBubyBmYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8yLzM2LWZhbm91dCcgJ3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIgIiInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gbm8gZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfY29uY2F0ZW5hdGVkX25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDIvMzgtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8zNi1mYW5vdXQnICd0ZXN0X2NvbmNhdGVuYXRlZF9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICJzfF4uLnwmL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMzgtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfY29uY2F0ZW5hdGVkX25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIDIvMi8zNi1mYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8yLzIvMzQtZmFub3V0JyAndGVzdF9jb25jYXRlbmF0ZWRfbm90ZXMgInN8XlwoLi5cKVwoLi5cKVwoLi5cKXxcMS9cMi9cMy98IiAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMi8zNi1mYW5vdXQgY29uY2F0ZW5hdGVkIHdpdGggMi8yLzIvMzQtZmFub3V0JyAndmVyaWZ5X2NvbmNhdGVuYXRlZF9ub3RlcycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzA0LW5vdGVzLW1peGVkLnNoIGIvdC90MzMwNC1ub3Rlcy1taXhlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNzA5ZThjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwNC1ub3Rlcy1taXhlZC5zaApAQCAtMCwwICsxLDIwNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgbm90ZXMgdHJlZXMgdGhhdCBhbHNvIGNvbnRhaW4gbm9uLW5vdGVzJworCisuIC4vdGVzdC1saWIuc2gKKworbnVtYmVyX29mX2NvbW1pdHM9MTAwCisKK3N0YXJ0X25vdGVfY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvY29tbWl0c14wCitkZWxldGVhbGwKK0lOUFVUX0VORAorCit9CisKK3ZlcmlmeV9ub3RlcyAoKSB7CisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IG91dHB1dCAmJgorCWk9JG51bWJlcl9vZl9jb21taXRzICYmCisJd2hpbGUgWyAkaSAtZ3QgMCBdOyBkbworCQllY2hvICIgICAgY29tbWl0ICMkaSIgJiYKKwkJZWNobyAiICAgIG5vdGUgZm9yIGNvbW1pdCAjJGkiICYmCisJCWk9JCgoJGktMSkpOworCWRvbmUgPiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwOiBjcmVhdGUgYSBjb3VwbGUgb2YgY29tbWl0cyIgJworCisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5EID5pbnB1dCAmJgorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAjMQorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlCitkYXRhIDw8RU9GCitmaWxlIGluIGNvbW1pdCAjMQorRU9GCisKK0lOUFVUX0VORAorCisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5EID4+aW5wdXQgJiYKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIzIKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZmlsZQorZGF0YSA8PEVPRgorZmlsZSBpbiBjb21taXQgIzIKK0VPRgorCitJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIGEgbm90ZXMgdHJlZSB3aXRoIGJvdGggbm90ZXMgYW5kIG5vbi1ub3RlcyIgJworCisJY29tbWl0MT0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXJeKSAmJgorCWNvbW1pdDI9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+aW5wdXQgJiYKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMgY29tbWl0ICMxCitDT01NSVQKKworTiBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjMQorRU9GCisKK04gaW5saW5lICRjb21taXQyCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIzIKK0VPRgorCitJTlBVVF9FTkQKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPj5pbnB1dCAmJgorY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyBjb21taXQgIzIKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZm9vYmFyL25vbi1ub3RlLnR4dAorZGF0YSA8PEVPRgorQSBub24tbm90ZSBpbiBhIG5vdGVzIHRyZWUKK0VPRgorCitOIGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorZWRpdGVkIG5vdGUgZm9yIGNvbW1pdCAjMgorRU9GCisKK0lOUFVUX0VORAorCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+PmlucHV0ICYmCitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzIGNvbW1pdCAjMworQ09NTUlUCisKK04gaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCitlZGl0ZWQgbm90ZSBmb3IgY29tbWl0ICMxCitFT0YKKworTSA2NDQgaW5saW5lIGRlYWRiZWVmCitkYXRhIDw8RU9GCitub24tbm90ZSB3aXRoIFNIQTEtbGlrZSBuYW1lCitFT0YKKworTSA2NDQgaW5saW5lIGRlL2FkYmVlZgorZGF0YSA8PEVPRgorYW5vdGhlciBub24tbm90ZSB3aXRoIFNIQTEtbGlrZSBuYW1lCitFT0YKKworTSA2NDQgaW5saW5lIGRlL2FkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmCitkYXRhIDw8RU9GCitUaGlzIGlzIGFjdHVhbGx5IGEgdmFsaWQgbm90ZSwgYWxiZWl0IHRvIGEgbm9uLWV4aXN0aW5nIG9iamVjdC4KK0l0IGlzIG5lZWRlZCBpbiBvcmRlciB0byB0cmlnZ2VyIHRoZSAibWlzaGFuZGxpbmciIG9mIHRoZSBkZWFkL2JlZWYgbm9uLW5vdGUuCitFT0YKKworTSA2NDQgaW5saW5lIGRlYWQvYmVlZgorZGF0YSA8PEVPRgoreWV0IGFub3RoZXIgbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRU9GCisKK0lOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0IDxpbnB1dCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMKKycKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMyCisgICAgZWRpdGVkIG5vdGUgZm9yIGNvbW1pdCAjMgorICAgIGNvbW1pdCAjMQorICAgIGVkaXRlZCBub3RlIGZvciBjb21taXQgIzEKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidmVyaWZ5IGNvbnRlbnRzIG9mIG5vdGVzIiAnCisKKwlnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdF9ubjEgPDxFWFBFQ1RfRU5ECitBIG5vbi1ub3RlIGluIGEgbm90ZXMgdHJlZQorRVhQRUNUX0VORAorY2F0ID5leHBlY3Rfbm4yIDw8RVhQRUNUX0VORAorbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRVhQRUNUX0VORAorY2F0ID5leHBlY3Rfbm4zIDw8RVhQRUNUX0VORAorYW5vdGhlciBub24tbm90ZSB3aXRoIFNIQTEtbGlrZSBuYW1lCitFWFBFQ1RfRU5ECitjYXQgPmV4cGVjdF9ubjQgPDxFWFBFQ1RfRU5ECit5ZXQgYW5vdGhlciBub24tbm90ZSB3aXRoIFNIQTEtbGlrZSBuYW1lCitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZlcmlmeSBjb250ZW50cyBvZiBub24tbm90ZXMiICcKKworCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6Zm9vYmFyL25vbi1ub3RlLnR4dCA+IGFjdHVhbF9ubjEgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4xIGFjdHVhbF9ubjEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlYWRiZWVmID4gYWN0dWFsX25uMiAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjIgYWN0dWFsX25uMiAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6ZGUvYWRiZWVmID4gYWN0dWFsX25uMyAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjMgYWN0dWFsX25uMyAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6ZGVhZC9iZWVmID4gYWN0dWFsX25uNCAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjQgYWN0dWFsX25uNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQtbm90ZXMgcHJlc2VydmVzIG5vbi1ub3RlcyIgJworCisJdGVzdF90aWNrICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAiZm9vIGJhciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidmVyaWZ5IGNvbnRlbnRzIG9mIG5vbi1ub3RlcyBhZnRlciBnaXQtbm90ZXMiICcKKworCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6Zm9vYmFyL25vbi1ub3RlLnR4dCA+IGFjdHVhbF9ubjEgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4xIGFjdHVhbF9ubjEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlYWRiZWVmID4gYWN0dWFsX25uMiAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjIgYWN0dWFsX25uMiAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6ZGUvYWRiZWVmID4gYWN0dWFsX25uMyAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjMgYWN0dWFsX25uMyAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2NvbW1pdHM6ZGVhZC9iZWVmID4gYWN0dWFsX25uNCAmJgorCXRlc3RfY21wIGV4cGVjdF9ubjQgYWN0dWFsX25uNAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDUtbm90ZXMtZmFub3V0LnNoIGIvdC90MzMwNS1ub3Rlcy1mYW5vdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2I0NzUzZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDUtbm90ZXMtZmFub3V0LnNoCkBAIC0wLDAgKzEsMTM5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGF0IGFkZGluZy9yZW1vdmluZyBtYW55IG5vdGVzIHRyaWdnZXJzIGF1dG9tYXRpYyBmYW5vdXQgcmVzdHJ1Y3R1cmluZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3BhdGhfaGFzX2Zhbm91dCgpIHsKKwlwYXRoPSQxICYmCisJZmFub3V0PSQyICYmCisJYWZ0ZXJfbGFzdF9zbGFzaD0kKCg0MCAtICRmYW5vdXQgKiAyKSkgJiYKKwllY2hvICRwYXRoIHwgZ3JlcCAtcSAiXlwoWzAtOWEtZl1cezJcfS9cKVx7JGZhbm91dFx9WzAtOWEtZl1ceyRhZnRlcl9sYXN0X3NsYXNoXH0kIgorfQorCit0b3VjaGVkX29uZV9ub3RlX3dpdGhfZmFub3V0KCkgeworCW5vdGVzX2NvbW1pdD0kMSAmJgorCW1vZGlmaWNhdGlvbj0kMiAmJiAgIyAnQScgZm9yIGFkZGl0aW9uLCAnRCcgZm9yIGRlbGV0aW9uCisJZmFub3V0PSQzICYmCisJZGlmZj0kKGdpdCBkaWZmLXRyZWUgLS1uby1jb21taXQtaWQgLS1uYW1lLXN0YXR1cyAtLXJvb3QgLXIgJG5vdGVzX2NvbW1pdCkgJiYKKwlwYXRoPSQoZWNobyAkZGlmZiB8IHNlZCAtZSAicy9eJG1vZGlmaWNhdGlvbltcdCBdLy8iKSAmJgorCXBhdGhfaGFzX2Zhbm91dCAiJHBhdGgiICRmYW5vdXQ7Cit9CisKK2FsbF9ub3Rlc19oYXZlX2Zhbm91dCgpIHsKKwlub3Rlc19jb21taXQ9JDEgJiYKKwlmYW5vdXQ9JDIgJiYKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSAkbm90ZXNfY29tbWl0IDI+L2Rldi9udWxsIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQlwYXRoX2hhc19mYW5vdXQgJHBhdGggJGZhbm91dCB8fCByZXR1cm4gMQorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdlYWsgdGVzdCBlbnZpcm9ubWVudCcgJworCWdpdCBjaGVja291dCAtYiBub25kZXRlcm1pbmlzbSAmJgorCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gd2l0aF9ub3RlczsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgbWFueSBub3RlcyB3aXRoIGdpdC1ub3RlcycgJworCW51bV9ub3Rlcz0zMDAgJiYKKwlpPTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sdCAkbnVtX25vdGVzCisJZG8KKwkJaT0kKCgkaSArIDEpKSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyAiZmlsZSBmb3IgY29tbWl0ICMkaSIgPiBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1xIC1tICJjb21taXQgIyRpIiAmJgorCQlnaXQgbm90ZXMgYWRkIC1tICJub3RlICMkaSIgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbnkgbm90ZXMgY3JlYXRlZCBjb3JyZWN0bHkgd2l0aCBnaXQtbm90ZXMnICcKKwlnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gb3V0cHV0ICYmCisJaT0kbnVtX25vdGVzICYmCisJd2hpbGUgdGVzdCAkaSAtZ3QgMAorCWRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgbm90ZSAjJGkiICYmCisJCWk9JCgoJGkgLSAxKSk7CisJZG9uZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhYmxlIGZhbm91dCAwIGlzIGZvbGxvd2VkIGJ5IHN0YWJsZSBmYW5vdXQgMScgJworCWk9JG51bV9ub3RlcyAmJgorCWZhbm91dD0wICYmCisJd2hpbGUgdGVzdCAkaSAtZ3QgMAorCWRvCisJCWk9JCgoJGkgLSAxKSkgJiYKKwkJaWYgdG91Y2hlZF9vbmVfbm90ZV93aXRoX2Zhbm91dCByZWZzL25vdGVzL2NvbW1pdHN+JGkgQSAkZmFub3V0CisJCXRoZW4KKwkJCWNvbnRpbnVlCisJCWVsaWYgdGVzdCAkZmFub3V0IC1lcSAwCisJCXRoZW4KKwkJCWZhbm91dD0xICYmCisJCQlpZiBhbGxfbm90ZXNfaGF2ZV9mYW5vdXQgcmVmcy9ub3Rlcy9jb21taXRzfiRpICRmYW5vdXQKKwkJCXRoZW4KKwkJCQllY2hvICJGYW5vdXQgMCAtPiAxIGF0IHJlZnMvbm90ZXMvY29tbWl0c34kaSIgJiYKKwkJCQljb250aW51ZQorCQkJZmkKKwkJZmkgJiYKKwkJZWNobyAiRmFpbGVkIGZhbm91dD0kZmFub3V0IGNoZWNrIGF0IHJlZnMvbm90ZXMvY29tbWl0c34kaSIgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgcmVmcy9ub3Rlcy9jb21taXRzfiRpICYmCisJCXJldHVybiAxCisJZG9uZSAmJgorCWFsbF9ub3Rlc19oYXZlX2Zhbm91dCByZWZzL25vdGVzL2NvbW1pdHMgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBtb3N0IG5vdGVzIHdpdGggZ2l0LW5vdGVzJyAnCisJcmVtb3ZlX25vdGVzPTI4NSAmJgorCWk9MCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIHwKKwl3aGlsZSB0ZXN0ICRpIC1sdCAkcmVtb3ZlX25vdGVzICYmIHJlYWQgc2hhMQorCWRvCisJCWk9JCgoJGkgKyAxKSkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBub3RlcyByZW1vdmUgIiRzaGExIiAyPi9kZXYvbnVsbCB8fCByZXR1cm4gMQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9zdCBub3RlcyBkZWxldGVkIGNvcnJlY3RseSB3aXRoIGdpdC1ub3RlcycgJworCWdpdCBsb2cgSEVBRH4kcmVtb3ZlX25vdGVzIHwgZ3JlcCAiXiAgICAiID4gb3V0cHV0ICYmCisJaT0kKCgkbnVtX25vdGVzIC0gJHJlbW92ZV9ub3RlcykpICYmCisJd2hpbGUgdGVzdCAkaSAtZ3QgMAorCWRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgbm90ZSAjJGkiICYmCisJCWk9JCgoJGkgLSAxKSk7CisJZG9uZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhYmxlIGZhbm91dCAxIGlzIGZvbGxvd2VkIGJ5IHN0YWJsZSBmYW5vdXQgMCcgJworCWk9JHJlbW92ZV9ub3RlcyAmJgorCWZhbm91dD0xICYmCisJd2hpbGUgdGVzdCAkaSAtZ3QgMAorCWRvCisJCWk9JCgoJGkgLSAxKSkgJiYKKwkJaWYgdG91Y2hlZF9vbmVfbm90ZV93aXRoX2Zhbm91dCByZWZzL25vdGVzL2NvbW1pdHN+JGkgRCAkZmFub3V0CisJCXRoZW4KKwkJCWNvbnRpbnVlCisJCWVsaWYgdGVzdCAkZmFub3V0IC1lcSAxCisJCXRoZW4KKwkJCWZhbm91dD0wICYmCisJCQlpZiBhbGxfbm90ZXNfaGF2ZV9mYW5vdXQgcmVmcy9ub3Rlcy9jb21taXRzfiRpICRmYW5vdXQKKwkJCXRoZW4KKwkJCQllY2hvICJGYW5vdXQgMSAtPiAwIGF0IHJlZnMvbm90ZXMvY29tbWl0c34kaSIgJiYKKwkJCQljb250aW51ZQorCQkJZmkKKwkJZmkgJiYKKwkJZWNobyAiRmFpbGVkIGZhbm91dD0kZmFub3V0IGNoZWNrIGF0IHJlZnMvbm90ZXMvY29tbWl0c34kaSIgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgcmVmcy9ub3Rlcy9jb21taXRzfiRpICYmCisJCXJldHVybiAxCisJZG9uZSAmJgorCWFsbF9ub3Rlc19oYXZlX2Zhbm91dCByZWZzL25vdGVzL2NvbW1pdHMgMAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDYtbm90ZXMtcHJ1bmUuc2ggYi90L3QzMzA2LW5vdGVzLXBydW5lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmNDEwMmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA2LW5vdGVzLXBydW5lLnNoCkBAIC0wLDAgKzEsMTM4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgbm90ZXMgcHJ1bmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY3JlYXRlIGEgZmV3IGNvbW1pdHMgd2l0aCBub3RlcycgJworCisJOiA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZSAjMSIgJiYKKwlmaXJzdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwk6ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAybmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlICMyIiAmJgorCXNlY29uZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwk6ID4gZmlsZTMgJiYKKwlnaXQgYWRkIGZpbGUzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAzcmQgJiYKKwl0aGlyZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlDT01NSVRfRklMRT0kKGVjaG8gJHRoaXJkIHwgc2VkICJzIV4uLiEuZ2l0L29iamVjdHMvJi8hIikgJiYKKwl0ZXN0IC1mICRDT01NSVRfRklMRSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0rMCAkQ09NTUlUX0ZJTEUgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlICMzIgorJworCitjYXQgPiBleHBlY3QgPDxFTkRfT0ZfTE9HCitjb21taXQgJHRoaXJkCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisKKyAgICAzcmQKKworTm90ZXM6CisgICAgTm90ZSAjMworCitjb21taXQgJHNlY29uZAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMAorCisgICAgMm5kCisKK05vdGVzOgorICAgIE5vdGUgIzIKKworY29tbWl0ICRmaXJzdAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAorCisgICAgMXN0CisKK05vdGVzOgorICAgIE5vdGUgIzEKK0VORF9PRl9MT0cKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGNvbW1pdHMgYW5kIG5vdGVzJyAnCisKKwlnaXQgbG9nID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgc29tZSBjb21taXRzJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyBIRUFEICYmCisJZ2l0IGdjIC0tcHJ1bmU9bm93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGNvbW1pdHMgYXJlIGdvbmUnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtcCAkdGhpcmQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgJHNlY29uZCAmJgorCWdpdCBjYXQtZmlsZSAtcCAkZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm90ZXMgYXJlIHN0aWxsIHByZXNlbnQnICcKKworCWdpdCBub3RlcyBzaG93ICR0aGlyZCAmJgorCWdpdCBub3RlcyBzaG93ICRzZWNvbmQgJiYKKwlnaXQgbm90ZXMgc2hvdyAkZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLW4gZG9lcyBub3QgcmVtb3ZlIG5vdGVzJyAnCisKKwlnaXQgbm90ZXMgbGlzdCA+IGV4cGVjdCAmJgorCWdpdCBub3RlcyBwcnVuZSAtbiAmJgorCWdpdCBub3RlcyBsaXN0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC1uIGxpc3RzIHBydW5hYmxlIG5vdGVzJyAnCisKKwllY2hvICR0aGlyZCA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHBydW5lIC1uID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIG5vdGVzJyAnCisKKwlnaXQgbm90ZXMgcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm90ZXMgYXJlIGdvbmUnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93ICR0aGlyZCAmJgorCWdpdCBub3RlcyBzaG93ICRzZWNvbmQgJiYKKwlnaXQgbm90ZXMgc2hvdyAkZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHNvbWUgY29tbWl0cycgJworCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgSEVBRCAmJgorCWdpdCBnYyAtLXBydW5lPW5vdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAtdiBub3RlcycgJworCisJZWNobyAkc2Vjb25kID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgcHJ1bmUgLXYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IG5vdGVzIGFyZSBnb25lJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyAkdGhpcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyAkc2Vjb25kICYmCisJZ2l0IG5vdGVzIHNob3cgJGZpcnN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwNy1ub3Rlcy1tYW4uc2ggYi90L3QzMzA3LW5vdGVzLW1hbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYWEzNjZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwNy1ub3Rlcy1tYW4uc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0V4YW1wbGVzIGZyb20gdGhlIGdpdC1ub3RlcyBtYW4gcGFnZQorCitNYWtlIHN1cmUgdGhlIG1hbnVhbCBpcyBub3QgZnVsbCBvZiBsaWVzLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwl0ZXN0X2NvbW1pdCBDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4YW1wbGUgMTogbm90ZXMgdG8gYWRkIGFuIEFja2VkLWJ5IGxpbmUnICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJICAgIEIKKworCU5vdGVzOgorCSAgICBBY2tlZC1ieTogQSBDIEtlciA8YWNrZXJAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IG5vdGVzIGFkZCAtbSAiQWNrZWQtYnk6IEEgQyBLZXIgPGFja2VyQGV4YW1wbGUuY29tPiIgQiAmJgorCWdpdCBzaG93IC1zIEJee2NvbW1pdH0gPmxvZyAmJgorCXRhaWwgLW4gNCBsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhhbXBsZSAyOiBiaW5hcnkgbm90ZXMnICcKKwljcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyAuICYmCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IHRlc3QtYmluYXJ5LTEucG5nKSAmJgorCWdpdCBub3RlcyAtLXJlZj1sb2dvIGFkZCAtQyAiJGJsb2IiICYmCisJZ2l0IG5vdGVzIC0tcmVmPWxvZ28gY29weSBCIEMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bG9nbyBzaG93IEMgPmFjdHVhbCAmJgorCXRlc3RfY21wIHRlc3QtYmluYXJ5LTEucG5nIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDgtbm90ZXMtbWVyZ2Uuc2ggYi90L3QzMzA4LW5vdGVzLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5MGUyOTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA4LW5vdGVzLW1lcmdlLnNoCkBAIC0wLDAgKzEsMzk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBtZXJnaW5nIG9mIG5vdGVzIHRyZWVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgMXN0ICYmCisJdGVzdF9jb21taXQgMm5kICYmCisJdGVzdF9jb21taXQgM3JkICYmCisJdGVzdF9jb21taXQgNHRoICYmCisJdGVzdF9jb21taXQgNXRoICYmCisJIyBDcmVhdGUgbm90ZXMgb24gNCBmaXJzdCBjb21taXRzCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDFzdCBjb21taXQiIDFzdCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDJuZCBjb21taXQiIDJuZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDNyZCBjb21taXQiIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCSMgQ29weSBub3RlcyB0byByZW1vdGUtbm90ZXMKKwlnaXQgZmV0Y2ggLiByZWZzL25vdGVzLyo6cmVmcy9yZW1vdGUtbm90ZXMvb3JpZ2luLyogJiYKKworCXRlc3Rfb2lkX2luaXQgJiYKKwl0ZXN0X29pZF9jYWNoZSA8PC1FT0YKKwloYXNoNGEgc2hhMTo1ZTkzZDI0MDg0ZDMyZTFjYjYxZjcwNzA1MDViOWQyNTMwY2NhOTg3CisJaGFzaDNhIHNoYTE6ODM2NjczMWVlZWU1Mzc4N2QyYmRmOGZjMWVmZjdkOTQ3NTdlOGRhMAorCWhhc2gyYSBzaGExOmVlZGU4OTA2NGNkNDI0NDE1OTBkNmFmZWM2YzM3YjMyMWFkYTMzODkKKwloYXNoMWEgc2hhMTpkYWE1NWZmYWQ2Y2I5OWJmNjQyMjY1MzIxNDdmZmNhZjVjZThiZGQxCisJaGFzaDViIHNoYTE6MGYyZWZiZDAwMjYyZjJmZDQxZGZhZTMzZGY4NzY1NjE4ZWVhY2Q5OQorCWhhc2g0YiBzaGExOmRlYzI1MDJkYWMzZWExNjE1NDNmNzE5MzAwNDRkZWZmOTNmYTk0NWMKKwloYXNoM2Igc2hhMTo0MDY5Y2RiMzk5ZmQ0NTQ2M2VjNmVlZjhlMDUxYTE2YTAzNTkyZDkxCisJaGFzaDJjIHNoYTE6ZDAwMGQzMGU2ZGRjZmNlM2E4MTIyYzQwMzIyNmEyY2UyZmQwNGQ5ZAorCWhhc2gxYyBzaGExOjQzYWRkNmJkMGM4YzBiYzg3MWFjNzk5MWUwZjU1NzNjZmJhMjc4MDQKKwloYXNoNGQgc2hhMToxZjI1N2EzYTkwMzI4NTU3YzQ1MmYwODE3ZDZjYzUwYzg5ZDMxNWQ0CisJaGFzaDNkIHNoYTE6MDVhNDkyNzk1MWJjZWYzNDdmNTE0ODY1NzViODc4YjJiNjAxMzdmMgorCisJaGFzaDRhIHNoYTI1NjplZWY4NzZiZTFkMzJhYzJlMmU0MjI0MGUwNDI5MzI1Y2VjMTE2ZTU1ZTg4Y2IyOTY5ODk5ZmFjNjk1YWE3NjJmCisJaGFzaDNhIHNoYTI1NjpjZjdjZDFiYzA5MWQ3YmE0MTY2YTg2ZGY4NjQxMTBlNDIwODdjZDg5M2E1YWU5NmJjNTBkNjM3ZTAyOTA5MzlkCisJaGFzaDJhIHNoYTI1NjoyMWRkZGU3ZWJjZTJjMjg1MjEzODk4Y2IwNGRlY2EwZmQzMjA5NjEwY2Y3YWFmODIyMmU0ZTJmNDUyNjJmYWUyCisJaGFzaDFhIHNoYTI1NjpmOWZlMGVkYTE2YzYwMjc3MzJlZDlkNDI5NTY4OWEwM2FiZDE2Zjg5M2JlNjliM2RjYmY0MDM3ZGRiMTkxOTIxCisJaGFzaDViIHNoYTI1NjoyMDA0NmYyMjQ0NTc3Nzk3YTllM2QzZjc5MGVhOWVjYTRkOGE2YmFmYjJhNTU3MGJjYjBlMDNhYTAyY2UxMDBiCisJaGFzaDRiIHNoYTI1NjpmOTA1NjNkMTM0YzYxYTk1YmI4OGFmYmQ0NWQ0OGNjYzllOTE5YzYyYWE2ZmJmY2Q0ODMzMDJiM2U0ZDhkYmNiCisJaGFzaDNiIHNoYTI1Njo5ODhmMmFjYTlmMmQ4N2U5M2U2YTczMTk3YzJiYjk5NTYwY2M0NGEyZjkyZDE4NjUzOTY4Zjk1NmYwMTIyMWUwCisJaGFzaDJjIHNoYTI1Njo4NDE1M2I3NzdiNGQ0MjgyN2E3NTZjNjU3OGRjZGI1OWQ4YWU1ZDEzNjBiODc0ZmIzN2M0MzAxNTBjODI1YzI2CisJaGFzaDFjIHNoYTI1Njo5YmViMmJjNGVlZjcyZTRjNDA4N2JlMTY4YTIwNTczZTM0ZDk5M2Q5YWIxODgzMDU1ZjIzZTMyMmFmYTA2NTY3CisJaGFzaDRkIHNoYTI1NjozMmRlMzlkYzA2ZTY3OWE3YWJiMmQ0YTU1ZWRlNzcwOWIzMTI0MzQwYTRhOTBhYTMwNTk3MWIxYzcyYWMzMTlkCisJaGFzaDNkIHNoYTI1NjpmYTczYjIwZTQxY2JiNzU0MWM0YzgxZDE1MzUwMTYxMzFkYmZiZWIwNWJmNmE3MWY2MTE1ZTljYWQzMWM3YWY1CisJRU9GCisnCisKK2NvbW1pdF9zaGExPSQoZ2l0IHJldi1wYXJzZSAxc3Ree2NvbW1pdH0pCitjb21taXRfc2hhMj0kKGdpdCByZXYtcGFyc2UgMm5kXntjb21taXR9KQorY29tbWl0X3NoYTM9JChnaXQgcmV2LXBhcnNlIDNyZF57Y29tbWl0fSkKK2NvbW1pdF9zaGE0PSQoZ2l0IHJldi1wYXJzZSA0dGhee2NvbW1pdH0pCitjb21taXRfc2hhNT0kKGdpdCByZXYtcGFyc2UgNXRoXntjb21taXR9KQorCit2ZXJpZnlfbm90ZXMgKCkgeworCW5vdGVzX3JlZj0iJDEiCisJZ2l0IC1jIGNvcmUubm90ZXNSZWY9InJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgbm90ZXMgfAorCQlzb3J0ID4ib3V0cHV0X25vdGVzXyRub3Rlc19yZWYiICYmCisJdGVzdF9jbXAgImV4cGVjdF9ub3Rlc18kbm90ZXNfcmVmIiAib3V0cHV0X25vdGVzXyRub3Rlc19yZWYiICYmCisJZ2l0IC1jIGNvcmUubm90ZXNSZWY9InJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgbG9nIC0tZm9ybWF0PSIlSCAlcyVuJU4iIFwKKwkJPiJvdXRwdXRfbG9nXyRub3Rlc19yZWYiICYmCisJdGVzdF9jbXAgImV4cGVjdF9sb2dfJG5vdGVzX3JlZiIgIm91dHB1dF9sb2dfJG5vdGVzX3JlZiIKK30KKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3gKKyQodGVzdF9vaWQgaGFzaDRhKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDNhKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDJhKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDFhKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeCA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCitOb3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK05vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorTm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CitOb3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaW5pdGlhbCBub3RlcyAoeCknICcKKwl2ZXJpZnlfbm90ZXMgeAorJworCitjcCBleHBlY3Rfbm90ZXNfeCBleHBlY3Rfbm90ZXNfeQorY3AgZXhwZWN0X25vdGVzX3ggZXhwZWN0X25vdGVzX3YKK2NwIGV4cGVjdF9sb2dfeCBleHBlY3RfbG9nX3kKK2NwIGV4cGVjdF9sb2dfeCBleHBlY3RfbG9nX3YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB0byBtZXJnZSBlbXB0eSBub3RlcyByZWYgaW50byBlbXB0eSBub3RlcyByZWYgKHogPT4geSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3Rlcy95IiBub3RlcyBtZXJnZSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgdG8gbWVyZ2UgaW50byB2YXJpb3VzIG5vbi1ub3RlcyByZWZzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMiIG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3Rlcy8iIG5vdGVzIG1lcmdlIHggJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2Rpci9mb28gSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL2RpciIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL2Rpci8iIG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9oZWFkcy9tYXN0ZXIiIG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3Rlcy95OiIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL3k6Zm9vIiBub3RlcyBtZXJnZSB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMvZm9vXntiYXIiIG5vdGVzIG1lcmdlIHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugbm9uLW5vdGVzIHJlZiBpbnRvIGVtcHR5IG5vdGVzIHJlZiAocmVtb3RlLW5vdGVzL29yaWdpbi94ID0+IHYpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvdiAmJgorCWdpdCBub3RlcyBtZXJnZSByZWZzL3JlbW90ZS1ub3Rlcy9vcmlnaW4veCAmJgorCXZlcmlmeV9ub3RlcyB2ICYmCisJIyByZWZzL3JlbW90ZS1ub3Rlcy9vcmlnaW4veCBhbmQgdiBzaG91bGQgcG9pbnQgdG8gdGhlIHNhbWUgbm90ZXMgY29tbWl0CisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3RlLW5vdGVzL29yaWdpbi94KSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvdikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG5vdGVzIGludG8gZW1wdHkgbm90ZXMgcmVmICh4ID0+IHkpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCWdpdCBub3RlcyBtZXJnZSB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwkjIHggYW5kIHkgc2hvdWxkIHBvaW50IHRvIHRoZSBzYW1lIG5vdGVzIGNvbW1pdAorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3gpIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZW1wdHkgbm90ZXMgcmVmICh6ID0+IHkpJyAnCisJZ2l0IG5vdGVzIG1lcmdlIHogJiYKKwkjIHkgc2hvdWxkIG5vdCBjaGFuZ2UgKHN0aWxsID09IHgpCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveCkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugbm90ZXMgb24gb3RoZXIgbm90ZXMgcmVmICh5KScgJworCSMgTm90IHRvdWNoaW5nIG5vdGVzIHRvIDFzdCBjb21taXQKKwlnaXQgbm90ZXMgcmVtb3ZlIDJuZCAmJgorCWdpdCBub3RlcyBhcHBlbmQgLW0gIk1vcmUgbm90ZXMgb24gM3JkIGNvbW1pdCIgM3JkICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAiTmV3IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGVzIG9uIDV0aCBjb21taXQiIDV0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBwcmV2aW91cyBub3RlcyBjb21taXQgKHleID0+IHkpID0+IE5vLW9wJyAnCisJcHJlX3N0YXRlPSIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeV4gJiYKKwkjIHkgc2hvdWxkIG5vdCBtb3ZlCisJdGVzdCAiJHByZV9zdGF0ZSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc195CiskKHRlc3Rfb2lkIGhhc2g1YikgJGNvbW1pdF9zaGE1CiskKHRlc3Rfb2lkIGhhc2g0YikgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gzYikgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gxYSkgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3kgPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKK05vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAorTmV3IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorTm90ZXMgb24gM3JkIGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorCiskY29tbWl0X3NoYTEgMXN0CitOb3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgY2hhbmdlZCBub3RlcyBvbiBvdGhlciBub3RlcyByZWYgKHkpJyAnCisJdmVyaWZ5X25vdGVzIHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHVuY2hhbmdlZCBub3RlcyBvbiBvcmlnaW5hbCBub3RlcyByZWYgKHgpJyAnCisJdmVyaWZ5X25vdGVzIHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb3JpZ2luYWwgbm90ZXMgKHgpIGludG8gY2hhbmdlZCBub3RlcyAoeSkgPT4gTm8tb3AnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLXZ2diB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgeAorJworCitjcCBleHBlY3Rfbm90ZXNfeSBleHBlY3Rfbm90ZXNfeAorY3AgZXhwZWN0X2xvZ195IGV4cGVjdF9sb2dfeAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjaGFuZ2VkICh5KSBpbnRvIG9yaWdpbmFsICh4KSA9PiBGYXN0LWZvcndhcmQnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHkgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJIyB4IGFuZCB5IHNob3VsZCBwb2ludCB0byBzYW1lIHRoZSBub3RlcyBjb21taXQKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy94KSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGVtcHR5IG5vdGVzIHJlZiAoeiA9PiB5KScgJworCSMgUHJlcGFyZSBlbXB0eSAoYnV0IHZhbGlkKSBub3RlcyByZWYgKHopCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLW0gImZvbyIgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlICYmCisJZ2l0IG5vdGVzID5vdXRwdXRfbm90ZXNfeiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXRfbm90ZXNfeiAmJgorCSMgRG8gdGhlIG1lcmdlICh6ID0+IHkpCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCWdpdCBub3RlcyBtZXJnZSB6ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwkjIHkgc2hvdWxkIG5vIGxvbmdlciBwb2ludCB0byB0aGUgc2FtZSBub3RlcyBjb21taXQgYXMgeAorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3gpIiAhPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc195CiskKHRlc3Rfb2lkIGhhc2g1YikgJGNvbW1pdF9zaGE1CiskKHRlc3Rfb2lkIGhhc2g0YikgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gzYikgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gyYykgJGNvbW1pdF9zaGEyCiskKHRlc3Rfb2lkIGhhc2gxYykgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3kgPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKK05vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAorTmV3IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorTm90ZXMgb24gM3JkIGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorTmV3IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorTm90ZXMgb24gMXN0IGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBub3RlcyBvbiBvdGhlciBub3RlcyByZWYgKHkpJyAnCisJIyBBcHBlbmQgdG8gMXN0IGNvbW1pdCBub3RlcworCWdpdCBub3RlcyBhcHBlbmQgLW0gIk1vcmUgbm90ZXMgb24gMXN0IGNvbW1pdCIgMXN0ICYmCisJIyBBZGQgbmV3IG5vdGVzIHRvIDJuZCBjb21taXQKKwlnaXQgbm90ZXMgYWRkIC1tICJOZXcgbm90ZXMgb24gMm5kIGNvbW1pdCIgMm5kICYmCisJdmVyaWZ5X25vdGVzIHkKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3gKKyQodGVzdF9vaWQgaGFzaDViKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDRkKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDFhKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeCA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorTm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCitOZXcgbm90ZXMgb24gNHRoIGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorCiskY29tbWl0X3NoYTIgMm5kCisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBub3RlcyBvbiBub3RlcyByZWYgKHgpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWdpdCBub3RlcyByZW1vdmUgM3JkICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiTW9yZSBub3RlcyBvbiA0dGggY29tbWl0IiA0dGggJiYKKwl2ZXJpZnlfbm90ZXMgeAorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorJCh0ZXN0X29pZCBoYXNoNWIpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoNGQpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMmMpICRjb21taXRfc2hhMgorJCh0ZXN0X29pZCBoYXNoMWMpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ194IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCitOb3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK05ldyBub3RlcyBvbiA0dGggY29tbWl0CisKK01vcmUgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK05ldyBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworTW9yZSBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB5IGludG8geCA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgeSAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3cKKyQodGVzdF9vaWQgaGFzaDNkKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDJjKSAkY29tbWl0X3NoYTIKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdyA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCisKKyRjb21taXRfc2hhMyAzcmQKK05ldyBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK05ldyBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlcyBvbiBuZXcsIHNlcGFyYXRlIG5vdGVzIHJlZiAodyknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy93ICYmCisJIyBBZGQgc2FtZSBub3RlIGFzIHJlZnMvbm90ZXMveSBvbiAybmQgY29tbWl0CisJZ2l0IG5vdGVzIGFkZCAtbSAiTmV3IG5vdGVzIG9uIDJuZCBjb21taXQiIDJuZCAmJgorCSMgQWRkIG5ldyBub3RlIG9uIDNyZCBjb21taXQgKG5vbi1jb25mbGljdGluZykKKwlnaXQgbm90ZXMgYWRkIC1tICJOZXcgbm90ZXMgb24gM3JkIGNvbW1pdCIgM3JkICYmCisJIyBWZXJpZnkgc3RhdGUgb2Ygbm90ZXMgb24gbmV3LCBzZXBhcmF0ZSBub3RlcyByZWYgKHcpCisJdmVyaWZ5X25vdGVzIHcKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3gKKyQodGVzdF9vaWQgaGFzaDViKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDRkKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDNkKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDJjKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDFjKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeCA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorTm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCitOZXcgbm90ZXMgb24gNHRoIGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorTmV3IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorTmV3IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorTm90ZXMgb24gMXN0IGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHcgaW50byB4ID0+IE5vbi1jb25mbGljdGluZyBoaXN0b3J5LWxlc3MgbWVyZ2UnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHcgJiYKKwkjIFZlcmlmeSBuZXcgc3RhdGUgb2Ygbm90ZXMgb24gb3RoZXIgbm90ZXMgcmVmICh4KQorCXZlcmlmeV9ub3RlcyB4ICYmCisJIyBBbHNvIHZlcmlmeSB0aGF0IG5vdGhpbmcgY2hhbmdlZCBvbiBvdGhlciBub3RlcyByZWZzICh5IGFuZCB3KQorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHcKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzA5LW5vdGVzLW1lcmdlLWF1dG8tcmVzb2x2ZS5zaCBiL3QvdDMzMDktbm90ZXMtbWVyZ2UtYXV0by1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0MWQzZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA5LW5vdGVzLW1lcmdlLWF1dG8tcmVzb2x2ZS5zaApAQCAtMCwwICsxLDc4NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKb2hhbiBIZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgbm90ZXMgbWVyZ2luZyB3aXRoIGF1dG8tcmVzb2x2aW5nIHN0cmF0ZWdpZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFNldCB1cCBhIG5vdGVzIG1lcmdlIHNjZW5hcmlvIHdpdGggYWxsIGtpbmRzIG9mIHBvdGVudGlhbCBjb25mbGljdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdHMnICcKKwl0ZXN0X2NvbW1pdCAxc3QgJiYKKwl0ZXN0X2NvbW1pdCAybmQgJiYKKwl0ZXN0X2NvbW1pdCAzcmQgJiYKKwl0ZXN0X2NvbW1pdCA0dGggJiYKKwl0ZXN0X2NvbW1pdCA1dGggJiYKKwl0ZXN0X2NvbW1pdCA2dGggJiYKKwl0ZXN0X2NvbW1pdCA3dGggJiYKKwl0ZXN0X2NvbW1pdCA4dGggJiYKKwl0ZXN0X2NvbW1pdCA5dGggJiYKKwl0ZXN0X2NvbW1pdCAxMHRoICYmCisJdGVzdF9jb21taXQgMTF0aCAmJgorCXRlc3RfY29tbWl0IDEydGggJiYKKwl0ZXN0X2NvbW1pdCAxM3RoICYmCisJdGVzdF9jb21taXQgMTR0aCAmJgorCXRlc3RfY29tbWl0IDE1dGggJiYKKworCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCWhhc2gxNWEgc2hhMTo0NTdhODVkNmM4MTRlYTIwODU1MGYxNWZjYzQ4ZjgwNGFjOGRjMDIzCisJaGFzaDE0YSBzaGExOmIwYzk1Yjk1NDMwMWQ2OWRhMmJjMzcyM2Y0Y2IxNjgwZDM1NTkzN2MKKwloYXNoMTNhIHNoYTE6NWQzMDIxNmExMjllZWZmYTk3ZDk2OTRmZmU4Yzc0MzE3YTU2MDMxNQorCWhhc2gxMmEgc2hhMTpkZDE2MWJjMTQ5NDcwZmQ4OTBkZDRhYjUyYTRjYmQ3OWJiZDE4YzM2CisJaGFzaDExYSBzaGExOjdhYmJjNDUxMjZkNjgwMzM2ZmIyNDI5NGYwMTNhN2NkZmEzZWQ1NDUKKwloYXNoMTBhIHNoYTE6YjhkMDNlMTczZjY3ZjY1MDVhNzZmNmUwMGNmOTM0NDAyMDBkZDliZQorCWhhc2gwOWEgc2hhMToyMGM2MTNjODM1MDExYzQ4YTVhYmUyOTE3MGEyNDAyY2E2MzU0OTEwCisJaGFzaDA4YSBzaGExOmEzZGFmOGExZTRlNWRjMzQwOWEzMDNhZDg0ODFkNTdiZmVhN2Y1ZDYKKwloYXNoMDdhIHNoYTE6ODk3MDAzMzIyYjUzYmM2Y2EwOThlOTMyNGVlNTA4MzYyMzQ3ZTczNAorCWhhc2gwNmEgc2hhMToxMWQ5N2ZkZWJmYTVjZWVlNTQwYTNkYTA3YmNlNmZhMDIyMmJjMDgyCisJaGFzaDE1YiBzaGExOjY4Yjg2MzBkMjU1MTYwMjhiZWQ4NjI3MTk4NTViM2Q2NzY4ZDc4MzMKKwloYXNoMTRiIHNoYTE6NWRlN2VhN2FkNGY0N2U3ZmY5MTk4OWZiODIyMzQ2MzQ3MzBmNzVkZgorCWhhc2gxM2Igc2hhMTozYTYzMWZkYjZmNDFiMDViNTVkOGY0YmFmMjA3MjhiYThmNmZjY2JjCisJaGFzaDEyYiBzaGExOmE2NjA1NWZhODJmN2EwM2ZlMGMwMmE2YWJhMzI4N2E4NWFiZjdjNjIKKwloYXNoMDViIHNoYTE6MTU0NTA4YzdhMGJjYWQ4MmI2ZmU0YjQ3MmJjNGMyNmIzYmYwODI1YgorCWhhc2gwNGIgc2hhMTplMmJmZDA2YTM3ZGQyMDMxNjg0YTU5YTZlMmIwMzNlMjEyMjM5Yzc4CisJaGFzaDAzYiBzaGExOjU3NzJmNDI0MDhjMGRkNmYwOTdhN2NhMmQyNGRlMGU3OGQxYzQ2YjEKKwloYXNoMTVjIHNoYTE6OWI0YjJjNjFmMDYxNTQxMmRhM2MxMGY5OGZmODViNTdjMDRlYzc2NQorCWhhc2gxMWMgc2hhMTo3ZTNjNTM1MDNhM2RiOGRkOTk2Y2I2MmUzN2M2NmUwNzBiNDRiNTRkCisJaGFzaDA4YyBzaGExOjg1MWUxNjM4Nzg0YTg4NGM3ZGQyNmM1ZDQxZjMzNDBmNjM4NzQxM2EKKwloYXNoMDVjIHNoYTE6OTlmYzM0YWRmYzQwMGI5NWM2N2IwMTMxMTVlMzdlMzFhYTlhNmQyMworCWhhc2gwMmMgc2hhMToyODNiNDgyMTlhZWU5YTQxMDVmNmNhYjMzN2U3ODkwNjVjODJjMmI5CisJaGFzaDE1ZCBzaGExOjdjNGU1NDZlZmQwZmU5MzlmODc2YmViMjYyZWNlMDI3OTc4ODBiNTQKKwloYXNoMDVkIHNoYTE6NmM4NDFjYzM2ZWE0OTYwMjcyOTA5NjdjYTk2YmQyYmVmNTRkYmI0NworCWhhc2gxNWUgc2hhMTpkNjgyMTA3YjhiZjdhN2FlYTFlNTM3YThkNWNiNmExMmI2MDEzNWYxCisJaGFzaDA1ZSBzaGExOjM1N2I2Y2ExNGM3YWZkNTliN2Y4YjhhYWFhNmI4YjcyMzc3MTEzNWIKKwloYXNoMTVmIHNoYTE6NmJlOTAyNDBiNWY1NDU5NDIwM2UyNWQ5ZjJmNjRiNzU2NzE3NWFlZQorCWhhc2gwNWYgc2hhMTo2NjAzMTFkN2Y3OGRjNTNkYjEyYWMzNzNhNDNmY2E3NDY1MzgxYTdlCisKKwloYXNoMTVhIHNoYTI1Njo0NWIxNTU4ZTVjMWI3NWY1NzAwMTBmYTQ4YWFhNjdiYjIyODlmY2Q0MzFiMzRhZDgxY2I0YzhiOTVmNGY4NzJhCisJaGFzaDE0YSBzaGEyNTY6NmU3YWYxNzllYTRkZDI4YWZkYzgzYWU2OTEyYmEwMDk4Y2RlZmY3NjRiMjZhOGI3NTBiMTU3ZGQ4MTc0OTA5MgorCWhhc2gxM2Egc2hhMjU2OjczNTMwODk5NjFiYWY1NTUzODhlMWJhYzY4YzY3YzhlYTk0YjA4Y2NiZDk3NTMyMjAxY2Y3ZjY3OTA3MDMwNTIKKwloYXNoMTJhIHNoYTI1Njo1ODYzZTQ1MjE2ODllZTE4NzljZWFiM2IzOGQzOWU5M2FiNWI1MWVjNzBhYWY2YTk2YWQzODhmYmRlZGZhMjVlCisJaGFzaDExYSBzaGEyNTY6ODJhMGVjMDMzOGI0ZWNmOGI0NDMwNGJhZGY0YWQzOGQ3NDY5ZGM0MTgyN2YzOGQ3YmE2YzQyZTNiYWUzZWU5OAorCWhhc2gxMGEgc2hhMjU2OmU4NGYyNTY0ZTkyZGU5NzkyYzkzYjhkMTk3MjYyYzczNWQ3Y2NiMWRlNjAyNWNlZjg3NTlhZjhmNmMzMzA4ZWIKKwloYXNoMDlhIHNoYTI1Njo0ZGQwNzc2NGJjZWM2OTZmMTk1YzBlYTcxYWU4OWUxNzQ4NzY0MDNhZjE2MzdlNDY0MmI4ZjQ0NTNmZDIzMDI4CisJaGFzaDA4YSBzaGEyNTY6MDIxMzJjNDU0NmNkODhhMWQwYWE1ODU0ZGQ1NWRhMTIwOTI3Zjc5MDRiYTE2YWZlMzZmZTAzZTkxYTYyMjA2NworCWhhc2gwN2Egc2hhMjU2OjM2OWJhZjdkMDBjNjcyMGVmZGMxMDI3MzQ5MzU1NWY5NDMwNTFmODRhNDcwNmZiMjRjYWViMzUzZmE0Nzg5ZGIKKwloYXNoMDZhIHNoYTI1Njo1MmQzMmMxMDM1MzU4M2IyZDk2YTU4NDliMWYxZjQzYzgwMThlNzZmM2U4ZWYxYjBkNDZlYjVjZmY3Y2RlZmFmCisJaGFzaDE1YiBzaGEyNTY6MzQ1ZTY2NjBiMzQ1ZmExNzQ3MzhhMzFhN2E1OTQyM2MzOTRiZGY0MTQ4MDRlMjAwYmM1MTBjNjVkOTcxYWU5NgorCWhhc2gxNGIgc2hhMjU2Ojc2NTNhNjU5NjAyMWM1MmU0MDVjYmE5NzllZWExNWE3Mjk5OTNlNzEwMmI5YTYxYmE0NjY3ZTM0ZjBlYWQ0YTEKKwloYXNoMTNiIHNoYTI1NjowZjIwMmEwYjZiOTY5MGRlMjM0OWMxNzNkZmQ3NjZhMzdlODI3NDRmNjFjMTRmMWMzODkzMDZmMWQ2OWY0NzBiCisJaGFzaDEyYiBzaGEyNTY6ZWIwMGYyMTljMDI2MTM2ZWE2NTM1YjE2ZmY4ZWMzZWZhNTEwZTZiZjUwMDk4Y2EwNDFlMWEyYTFkNGI3OTg0MAorCWhhc2gwNWIgc2hhMjU2Ojk5M2IyMjkwY2QwYzI0YzI3Yzg0OWQ5OWYxOTA0ZjNiNTkwZjc3YWYwZjUzOTkzMjczNGFkMDU2NzlhYzVhMmYKKwloYXNoMDRiIHNoYTI1NjpjN2ZiYTBkNjEwNDkxN2ZiZjM1MjU4ZjQwYjlmYTRmYzY5N2NmYTk5MmRlZWNkMTU3MGEzYjA4ZDBhNTU4N2E5CisJaGFzaDAzYiBzaGEyNTY6NzI4N2EyZDc4YTM3NjZjMTgxYjA4ZGYzODk1MWQ3ODRiMDhiNzJhNDRmNTcxZWQ2ZDg1NWJkMGJlMjJjNzBmNgorCWhhc2gxNWMgc2hhMjU2OjYyMzE2NjYwYTIyYmY5Nzg1N2RjNGExNjcwOWVjNGQ5M2EyMjRlOGM5ZjM3ZDY2MWVmOTE3NTFlMWY0YzQxNjYKKwloYXNoMTFjIHNoYTI1Njo1MWMzNzYzZGU5YjA4MzA5MzcwYWRjNTAzNmQ1OGRlYmIzMzE5ODBlNzMwOTc5MDI5NTdjNDQ0NjAyNTUxZGFhCisJaGFzaDA4YyBzaGEyNTY6MjJjZjFmYTI5NTk5ODk4YTcyMThjNTExMzVkNjZlZDg1ZDIyYWFkNTg0Zjc3ZGIzMzA1ZGVkY2U0YzNkNDc5OAorCWhhc2gwNWMgc2hhMjU2OjI1MDhmZDg2ZGI5ODBmMDUwODg5M2ExYzE1NzFiZGYzYjJlZTExM2RjMjVkZGIxYTNhMmZiOTRiZDZjZDBkNTgKKwloYXNoMDJjIHNoYTI1Njo2M2JiNTI3ZTBiNGUxYzhlMWRkMGQ1NGRkNzc4Y2E3YzM3MTg2ODlmZDZlMzdjNDczMDQ0Y2ZiY2YxY2FjZmRiCisJaGFzaDE1ZCBzaGEyNTY6NjY3YWNiNGUyZDVmOGRmMTVlNWFlYTQ1MDZkZmQxNmQyNWJjN2ZlY2E3MGZkYjBkOTY1YTcyMjJmOTgzYmI4OAorCWhhc2gwNWQgc2hhMjU2OjA5ZTZiNWE2ZmU2NjZjNGEwMjc2NzRiNjYxMWEyNTRiN2QyNTI4Y2QyMTFjNmI1Mjg4ZDFiNGRiNmM3NDFkZmEKKwloYXNoMTVlIHNoYTI1NjplOGNiZjUyZjZmY2FkYzZkZTNjNzc2MWU2NGE4OWU5ZmUzOGQxOWEwM2QzZTI4ZWY2Y2E4NTk2ZDkzZmM0ZjNhCisJaGFzaDA1ZSBzaGEyNTY6Y2RiMWUxOWY3YmExNTM5Zjk1YWY1MWE1N2VkZWI4OGE3ZWNjOTdkM2MyZjUyZGE4YzRjODZhZjMwODU5NTYwNworCWhhc2gxNWYgc2hhMjU2OjI5YzE0Y2I5MmRhNDQ4YTkyMzk2M2I4YTQzOTk0MjY4YjE5YzJlNTc5MTNkZTczZjM2Njc0MjFmZDJjMGVlZWMKKwloYXNoMDVmIHNoYTI1NjoxNGE2ZTY0MWIyYzBhOWYzOThlYmFjNmI0ZDM0YWZhNWVmZWE0YzUyZDI2MzEzODJmNDVmOGY2NjIyNjY5MDNiCisJRU9GCisnCisKK2NvbW1pdF9zaGExPSQoZ2l0IHJldi1wYXJzZSAxc3Ree2NvbW1pdH0pCitjb21taXRfc2hhMj0kKGdpdCByZXYtcGFyc2UgMm5kXntjb21taXR9KQorY29tbWl0X3NoYTM9JChnaXQgcmV2LXBhcnNlIDNyZF57Y29tbWl0fSkKK2NvbW1pdF9zaGE0PSQoZ2l0IHJldi1wYXJzZSA0dGhee2NvbW1pdH0pCitjb21taXRfc2hhNT0kKGdpdCByZXYtcGFyc2UgNXRoXntjb21taXR9KQorY29tbWl0X3NoYTY9JChnaXQgcmV2LXBhcnNlIDZ0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE3PSQoZ2l0IHJldi1wYXJzZSA3dGhee2NvbW1pdH0pCitjb21taXRfc2hhOD0kKGdpdCByZXYtcGFyc2UgOHRoXntjb21taXR9KQorY29tbWl0X3NoYTk9JChnaXQgcmV2LXBhcnNlIDl0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExMD0kKGdpdCByZXYtcGFyc2UgMTB0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExMT0kKGdpdCByZXYtcGFyc2UgMTF0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExMj0kKGdpdCByZXYtcGFyc2UgMTJ0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExMz0kKGdpdCByZXYtcGFyc2UgMTN0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExND0kKGdpdCByZXYtcGFyc2UgMTR0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExNT0kKGdpdCByZXYtcGFyc2UgMTV0aF57Y29tbWl0fSkKKwordmVyaWZ5X25vdGVzICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCXN1ZmZpeD0iJDIiCisJZ2l0IC1jIGNvcmUubm90ZXNSZWY9InJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgbm90ZXMgfAorCQlzb3J0ID4ib3V0cHV0X25vdGVzXyRzdWZmaXgiICYmCisJdGVzdF9jbXAgImV4cGVjdF9ub3Rlc18kc3VmZml4IiAib3V0cHV0X25vdGVzXyRzdWZmaXgiICYmCisJZ2l0IC1jIGNvcmUubm90ZXNSZWY9InJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgbG9nIC0tZm9ybWF0PSIlSCAlcyVuJU4iIFwKKwkJPiJvdXRwdXRfbG9nXyRzdWZmaXgiICYmCisJdGVzdF9jbXAgImV4cGVjdF9sb2dfJHN1ZmZpeCIgIm91dHB1dF9sb2dfJHN1ZmZpeCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbWVyZ2UgYmFzZSAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiA2dGggY29tbWl0IiA2dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDd0aCBjb21taXQiIDd0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gOHRoIGNvbW1pdCIgOHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiA5dGggY29tbWl0IiA5dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDEwdGggY29tbWl0IiAxMHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAxMXRoIGNvbW1pdCIgMTF0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMTJ0aCBjb21taXQiIDEydGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDEzdGggY29tbWl0IiAxM3RoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAxNHRoIGNvbW1pdCIgMTR0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMTV0aCBjb21taXQiIDE1dGgKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3gKKyQodGVzdF9vaWQgaGFzaDE1YSkgJGNvbW1pdF9zaGExNQorJCh0ZXN0X29pZCBoYXNoMTRhKSAkY29tbWl0X3NoYTE0CiskKHRlc3Rfb2lkIGhhc2gxM2EpICRjb21taXRfc2hhMTMKKyQodGVzdF9vaWQgaGFzaDEyYSkgJGNvbW1pdF9zaGExMgorJCh0ZXN0X29pZCBoYXNoMTFhKSAkY29tbWl0X3NoYTExCiskKHRlc3Rfb2lkIGhhc2gxMGEpICRjb21taXRfc2hhMTAKKyQodGVzdF9vaWQgaGFzaDA5YSkgJGNvbW1pdF9zaGE5CiskKHRlc3Rfb2lkIGhhc2gwOGEpICRjb21taXRfc2hhOAorJCh0ZXN0X29pZCBoYXNoMDdhKSAkY29tbWl0X3NoYTcKKyQodGVzdF9vaWQgaGFzaDA2YSkgJGNvbW1pdF9zaGE2CitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreCBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3ggbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit4IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreCBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ggbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKK3ggbm90ZXMgb24gOXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTggOHRoCit4IG5vdGVzIG9uIDh0aCBjb21taXQKKworJGNvbW1pdF9zaGE3IDd0aAoreCBub3RlcyBvbiA3dGggY29tbWl0CisKKyRjb21taXRfc2hhNiA2dGgKK3ggbm90ZXMgb24gNnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKKworJGNvbW1pdF9zaGEzIDNyZAorCiskY29tbWl0X3NoYTIgMm5kCisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdGF0ZSBvZiBtZXJnZSBiYXNlICh4KScgJ3ZlcmlmeV9ub3RlcyB4IHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIGJyYW5jaCAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gM3JkIGNvbW1pdCIgM3JkICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiA0dGggY29tbWl0IiA0dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDV0aCBjb21taXQiIDV0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgNnRoICYmCisJZ2l0IG5vdGVzIHJlbW92ZSA3dGggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDh0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gMTJ0aCBjb21taXQiIDEydGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDEzdGggY29tbWl0IiAxM3RoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAxNHRoIGNvbW1pdCIgMTR0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gMTV0aCBjb21taXQiIDE1dGgKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKKyQodGVzdF9vaWQgaGFzaDE1YikgJGNvbW1pdF9zaGExNQorJCh0ZXN0X29pZCBoYXNoMTRiKSAkY29tbWl0X3NoYTE0CiskKHRlc3Rfb2lkIGhhc2gxM2IpICRjb21taXRfc2hhMTMKKyQodGVzdF9vaWQgaGFzaDEyYikgJGNvbW1pdF9zaGExMgorJCh0ZXN0X29pZCBoYXNoMTFhKSAkY29tbWl0X3NoYTExCiskKHRlc3Rfb2lkIGhhc2gxMGEpICRjb21taXRfc2hhMTAKKyQodGVzdF9vaWQgaGFzaDA5YSkgJGNvbW1pdF9zaGE5CiskKHRlc3Rfb2lkIGhhc2gwNWIpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoMDRiKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAzYikgJGNvbW1pdF9zaGEzCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3kgPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreSBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ggbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKK3ggbm90ZXMgb24gOXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTggOHRoCisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit5IG5vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdGF0ZSBvZiBsb2NhbCBicmFuY2ggKHkpJyAndmVyaWZ5X25vdGVzIHkgeScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIGJyYW5jaCAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gMm5kIGNvbW1pdCIgMm5kICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiA0dGggY29tbWl0IiA0dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ6IG5vdGVzIG9uIDV0aCBjb21taXQiIDV0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgNnRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiA4dGggY29tbWl0IiA4dGggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDl0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gMTF0aCBjb21taXQiIDExdGggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDEydGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDE0dGggY29tbWl0IiAxNHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAxNXRoIGNvbW1pdCIgMTV0aAorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfegorJCh0ZXN0X29pZCBoYXNoMTVjKSAkY29tbWl0X3NoYTE1CiskKHRlc3Rfb2lkIGhhc2gxNGIpICRjb21taXRfc2hhMTQKKyQodGVzdF9vaWQgaGFzaDEzYSkgJGNvbW1pdF9zaGExMworJCh0ZXN0X29pZCBoYXNoMTFjKSAkY29tbWl0X3NoYTExCiskKHRlc3Rfb2lkIGhhc2gxMGEpICRjb21taXRfc2hhMTAKKyQodGVzdF9vaWQgaGFzaDA4YykgJGNvbW1pdF9zaGE4CiskKHRlc3Rfb2lkIGhhc2gwN2EpICRjb21taXRfc2hhNworJCh0ZXN0X29pZCBoYXNoMDVjKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDA0YikgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gwMmMpICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ196IDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreCBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKK3ogbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCit4IG5vdGVzIG9uIDd0aCBjb21taXQKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit6IG5vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdGF0ZSBvZiByZW1vdGUgYnJhbmNoICh6KScgJ3ZlcmlmeV9ub3RlcyB6IHonCisKKyMgQXQgdGhpcyBwb2ludCwgYmVmb3JlIG1lcmdpbmcgeiBpbnRvIHksIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBzdGF0dXM6CisjCisjIGNvbW1pdCB8IGJhc2UveCAgfCBsb2NhbC95IHwgcmVtb3RlL3ogfCBkaWZmIGZyb20geCB0byB5L3ogICAgICAgICB8IHJlc3VsdAorIyAtLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0KKyMgMXN0ICAgIHwgW25vbmVdICB8IFtub25lXSAgfCBbbm9uZV0gICB8IHVuY2hhbmdlZCAvIHVuY2hhbmdlZCAgICAgIHwgW25vbmVdCisjIDJuZCAgICB8IFtub25lXSAgfCBbbm9uZV0gIHwgMjgzYjQ4MiAgfCB1bmNoYW5nZWQgLyBhZGRlZCAgICAgICAgICB8IDI4M2I0ODIKKyMgM3JkICAgIHwgW25vbmVdICB8IDU3NzJmNDIgfCBbbm9uZV0gICB8IGFkZGVkICAgICAvIHVuY2hhbmdlZCAgICAgIHwgNTc3MmY0MgorIyA0dGggICAgfCBbbm9uZV0gIHwgZTJiZmQwNiB8IGUyYmZkMDYgIHwgYWRkZWQgICAgIC8gYWRkZWQgKHNhbWUpICAgfCBlMmJmZDA2CisjIDV0aCAgICB8IFtub25lXSAgfCAxNTQ1MDhjIHwgOTlmYzM0YSAgfCBhZGRlZCAgICAgLyBhZGRlZCAoZGlmZikgICB8ID8/PworIyA2dGggICAgfCAxMWQ5N2ZkIHwgW25vbmVdICB8IFtub25lXSAgIHwgcmVtb3ZlZCAgIC8gcmVtb3ZlZCAgICAgICAgfCBbbm9uZV0KKyMgN3RoICAgIHwgODk3MDAzMyB8IFtub25lXSAgfCA4OTcwMDMzICB8IHJlbW92ZWQgICAvIHVuY2hhbmdlZCAgICAgIHwgW25vbmVdCisjIDh0aCAgICB8IGEzZGFmOGEgfCBbbm9uZV0gIHwgODUxZTE2MyAgfCByZW1vdmVkICAgLyBjaGFuZ2VkICAgICAgICB8ID8/PworIyA5dGggICAgfCAyMGM2MTNjIHwgMjBjNjEzYyB8IFtub25lXSAgIHwgdW5jaGFuZ2VkIC8gcmVtb3ZlZCAgICAgICAgfCBbbm9uZV0KKyMgMTB0aCAgIHwgYjhkMDNlMSB8IGI4ZDAzZTEgfCBiOGQwM2UxICB8IHVuY2hhbmdlZCAvIHVuY2hhbmdlZCAgICAgIHwgYjhkMDNlMQorIyAxMXRoICAgfCA3YWJiYzQ1IHwgN2FiYmM0NSB8IDdlM2M1MzUgIHwgdW5jaGFuZ2VkIC8gY2hhbmdlZCAgICAgICAgfCA3ZTNjNTM1CisjIDEydGggICB8IGRkMTYxYmMgfCBhNjYwNTVmIHwgW25vbmVdICAgfCBjaGFuZ2VkICAgLyByZW1vdmVkICAgICAgICB8ID8/PworIyAxM3RoICAgfCA1ZDMwMjE2IHwgM2E2MzFmZCB8IDVkMzAyMTYgIHwgY2hhbmdlZCAgIC8gdW5jaGFuZ2VkICAgICAgfCAzYTYzMWZkCisjIDE0dGggICB8IGIwYzk1YjkgfCA1ZGU3ZWE3IHwgNWRlN2VhNyAgfCBjaGFuZ2VkICAgLyBjaGFuZ2VkIChzYW1lKSB8IDVkZTdlYTcKKyMgMTV0aCAgIHwgNDU3YTg1ZCB8IDY4Yjg2MzAgfCA5YjRiMmM2ICB8IGNoYW5nZWQgICAvIGNoYW5nZWQgKGRpZmYpIHwgPz8/CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggaW52YWxpZCBzdHJhdGVneSA9PiBGYWlsL05vIGNoYW5nZXMnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9Zm9vIHogJiYKKwkjIFZlcmlmeSBubyBjaGFuZ2VzICh5KQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uID0+IEZhaWwvTm8gY2hhbmdlcycgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbm90ZXMubWVyZ2VTdHJhdGVneT0iZm9vIiBub3RlcyBtZXJnZSB6ICYmCisJIyBWZXJpZnkgbm8gY2hhbmdlcyAoeSkKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc19vdXJzCiskKHRlc3Rfb2lkIGhhc2gxNWIpICRjb21taXRfc2hhMTUKKyQodGVzdF9vaWQgaGFzaDE0YikgJGNvbW1pdF9zaGExNAorJCh0ZXN0X29pZCBoYXNoMTNiKSAkY29tbWl0X3NoYTEzCiskKHRlc3Rfb2lkIGhhc2gxMmIpICRjb21taXRfc2hhMTIKKyQodGVzdF9vaWQgaGFzaDExYykgJGNvbW1pdF9zaGExMQorJCh0ZXN0X29pZCBoYXNoMTBhKSAkY29tbWl0X3NoYTEwCiskKHRlc3Rfb2lkIGhhc2gwNWIpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoMDRiKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAzYikgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gwMmMpICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ19vdXJzIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3kgbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreSBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKK3kgbm90ZXMgb24gMTJ0aCBjb21taXQKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKKworJGNvbW1pdF9zaGE3IDd0aAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3kgbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJvdXJzIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT1vdXJzIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSBvdXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggIm91cnMiIGNvbmZpZ3VyYXRpb24gb3B0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy5tZXJnZVN0cmF0ZWd5PSJvdXJzIiBub3RlcyBtZXJnZSB6ICYmCisJdmVyaWZ5X25vdGVzIHkgb3VycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveV4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHkgeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJvdXJzIiBwZXItcmVmIGNvbmZpZ3VyYXRpb24gb3B0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy55Lm1lcmdlU3RyYXRlZ3k9Im91cnMiIG5vdGVzIG1lcmdlIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSBvdXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc190aGVpcnMKKyQodGVzdF9vaWQgaGFzaDE1YykgJGNvbW1pdF9zaGExNQorJCh0ZXN0X29pZCBoYXNoMTRiKSAkY29tbWl0X3NoYTE0CiskKHRlc3Rfb2lkIGhhc2gxM2IpICRjb21taXRfc2hhMTMKKyQodGVzdF9vaWQgaGFzaDExYykgJGNvbW1pdF9zaGExMQorJCh0ZXN0X29pZCBoYXNoMTBhKSAkY29tbWl0X3NoYTEwCiskKHRlc3Rfb2lkIGhhc2gwOGMpICRjb21taXRfc2hhOAorJCh0ZXN0X29pZCBoYXNoMDVjKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDA0YikgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gwM2IpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMDJjKSAkY29tbWl0X3NoYTIKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdGhlaXJzIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreSBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKK3ogbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCisKKyRjb21taXRfc2hhNiA2dGgKKworJGNvbW1pdF9zaGE1IDV0aAoreiBub3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggInRoZWlycyIgc3RyYXRlZ3kgPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9dGhlaXJzIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSB0aGVpcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3leMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCAidGhlaXJzIiBzdHJhdGVneSBvdmVycmlkaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uICJvdXJzIiA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgLWMgbm90ZXMubWVyZ2VTdHJhdGVneT0ib3VycyIgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT10aGVpcnMgeiAmJgorCXZlcmlmeV9ub3RlcyB5IHRoZWlycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveV4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHkgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdW5pb24KKyQodGVzdF9vaWQgaGFzaDE1ZCkgJGNvbW1pdF9zaGExNQorJCh0ZXN0X29pZCBoYXNoMTRiKSAkY29tbWl0X3NoYTE0CiskKHRlc3Rfb2lkIGhhc2gxM2IpICRjb21taXRfc2hhMTMKKyQodGVzdF9vaWQgaGFzaDEyYikgJGNvbW1pdF9zaGExMgorJCh0ZXN0X29pZCBoYXNoMTFjKSAkY29tbWl0X3NoYTExCiskKHRlc3Rfb2lkIGhhc2gxMGEpICRjb21taXRfc2hhMTAKKyQodGVzdF9vaWQgaGFzaDA4YykgJGNvbW1pdF9zaGE4CiskKHRlc3Rfb2lkIGhhc2gwNWQpICRjb21taXRfc2hhNQorJCh0ZXN0X29pZCBoYXNoMDRiKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAzYikgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gwMmMpICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ191bmlvbiA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit5IG5vdGVzIG9uIDE1dGggY29tbWl0CisKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreSBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKK3kgbm90ZXMgb24gMTJ0aCBjb21taXQKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKK3ogbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCisKKyRjb21taXRfc2hhNiA2dGgKKworJGNvbW1pdF9zaGE1IDV0aAoreSBub3RlcyBvbiA1dGggY29tbWl0CisKK3ogbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJ1bmlvbiIgc3RyYXRlZ3kgPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9dW5pb24geiAmJgorCXZlcmlmeV9ub3RlcyB5IHVuaW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggInVuaW9uIiBzdHJhdGVneSBvdmVycmlkaW5nIHBlci1yZWYgY29uZmlndXJhdGlvbiA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgLWMgbm90ZXMueS5tZXJnZVN0cmF0ZWd5PSJ0aGVpcnMiIG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9dW5pb24geiAmJgorCXZlcmlmeV9ub3RlcyB5IHVuaW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggInVuaW9uIiBwZXItcmVmIG92ZXJyaWRpbmcgZ2VuZXJhbCBjb25maWd1cmF0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy55Lm1lcmdlU3RyYXRlZ3k9InVuaW9uIiAtYyBub3Rlcy5tZXJnZVN0cmF0ZWd5PSJ0aGVpcnMiIG5vdGVzIG1lcmdlIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSB1bmlvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveV4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHkgeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJtYW51YWwiIHBlci1yZWYgb25seSBjaGVja3Mgc3BlY2lmaWMgcmVmIGNvbmZpZ3VyYXRpb24gPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbm90ZXMuei5tZXJnZVN0cmF0ZWd5PSJ1bmlvbiIgbm90ZXMgbWVyZ2UgeiAmJgorCWdpdCBub3RlcyBtZXJnZSAtLWFib3J0ICYmCisJdmVyaWZ5X25vdGVzIHkgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdW5pb24yCiskKHRlc3Rfb2lkIGhhc2gxNWUpICRjb21taXRfc2hhMTUKKyQodGVzdF9vaWQgaGFzaDE0YikgJGNvbW1pdF9zaGExNAorJCh0ZXN0X29pZCBoYXNoMTNiKSAkY29tbWl0X3NoYTEzCiskKHRlc3Rfb2lkIGhhc2gxMmIpICRjb21taXRfc2hhMTIKKyQodGVzdF9vaWQgaGFzaDExYykgJGNvbW1pdF9zaGExMQorJCh0ZXN0X29pZCBoYXNoMTBhKSAkY29tbWl0X3NoYTEwCiskKHRlc3Rfb2lkIGhhc2gwOGMpICRjb21taXRfc2hhOAorJCh0ZXN0X29pZCBoYXNoMDVlKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDA0YikgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gwM2IpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMDJjKSAkY29tbWl0X3NoYTIKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdW5pb24yIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworeSBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit6IG5vdGVzIG9uIDV0aCBjb21taXQKKworeSBub3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHkgaW50byB6IHdpdGggInVuaW9uIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy96ICYmCisJZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9dW5pb24geSAmJgorCXZlcmlmeV9ub3RlcyB6IHVuaW9uMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHopJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy96IHJlZnMvbm90ZXMvel4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHogegorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfY2F0X3NvcnRfdW5pcQorJCh0ZXN0X29pZCBoYXNoMTVmKSAkY29tbWl0X3NoYTE1CiskKHRlc3Rfb2lkIGhhc2gxNGIpICRjb21taXRfc2hhMTQKKyQodGVzdF9vaWQgaGFzaDEzYikgJGNvbW1pdF9zaGExMworJCh0ZXN0X29pZCBoYXNoMTJiKSAkY29tbWl0X3NoYTEyCiskKHRlc3Rfb2lkIGhhc2gxMWMpICRjb21taXRfc2hhMTEKKyQodGVzdF9vaWQgaGFzaDEwYSkgJGNvbW1pdF9zaGExMAorJCh0ZXN0X29pZCBoYXNoMDhjKSAkY29tbWl0X3NoYTgKKyQodGVzdF9vaWQgaGFzaDA1ZikgJGNvbW1pdF9zaGE1CiskKHRlc3Rfb2lkIGhhc2gwNGIpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDNiKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDAyYykgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX2NhdF9zb3J0X3VuaXEgPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreSBub3RlcyBvbiAxNXRoIGNvbW1pdAoreiBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit5IG5vdGVzIG9uIDV0aCBjb21taXQKK3ogbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB5IGludG8geiB3aXRoICJjYXRfc29ydF91bmlxIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT1jYXRfc29ydF91bmlxIHkgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjYXRfc29ydF91bmlxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy96XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeiB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHkgaW50byB6IHdpdGggImNhdF9zb3J0X3VuaXEiIHN0cmF0ZWd5IGNvbmZpZ3VyYXRpb24gb3B0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy5tZXJnZVN0cmF0ZWd5PSJjYXRfc29ydF91bmlxIiBub3RlcyBtZXJnZSB5ICYmCisJdmVyaWZ5X25vdGVzIHogY2F0X3NvcnRfdW5pcQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMTAtbm90ZXMtbWVyZ2UtbWFudWFsLXJlc29sdmUuc2ggYi90L3QzMzEwLW5vdGVzLW1lcmdlLW1hbnVhbC1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzZDcyZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzEwLW5vdGVzLW1lcmdlLW1hbnVhbC1yZXNvbHZlLnNoCkBAIC0wLDAgKzEsNjE3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBub3RlcyBtZXJnaW5nIHdpdGggbWFudWFsIGNvbmZsaWN0IHJlc29sdXRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFNldCB1cCBhIG5vdGVzIG1lcmdlIHNjZW5hcmlvIHdpdGggZGlmZmVyZW50IGtpbmRzIG9mIGNvbmZsaWN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0cycgJworCXRlc3RfY29tbWl0IDFzdCAmJgorCXRlc3RfY29tbWl0IDJuZCAmJgorCXRlc3RfY29tbWl0IDNyZCAmJgorCXRlc3RfY29tbWl0IDR0aCAmJgorCXRlc3RfY29tbWl0IDV0aCAmJgorCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJaGFzaDA0YSBzaGExOjZlOGUzZmViY2EzYzJiYjg5NjcwNDMzNWNjNGQwYzM0Y2IyZjg3MTUKKwloYXNoMDNhIHNoYTE6ZTUzODhjMTA4NjA0NTZlZTYwNjczMDI1MzQ1ZmUyZTE1M2ViOGNmOAorCWhhc2gwMmEgc2hhMTpjZWVmYTY3NDg3MzY3MGU3ZWNkMTMxODE0ZDkwOTcyM2NjZTJiNjY5CisJaGFzaDA0YiBzaGExOmUyYmZkMDZhMzdkZDIwMzE2ODRhNTlhNmUyYjAzM2UyMTIyMzljNzgKKwloYXNoMDNiIHNoYTE6NTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMQorCWhhc2gwMWIgc2hhMTpiMGE2MDIxZWMwMDZkMDdlODBlOWIyMGVjOWI0NDRjYmQ5ZDU2MGQzCisJaGFzaDA0YyBzaGExOmNmZjU5Yzc5M2MyMGJiNDlhNGUwMWJjMDZmYjA2YmFkNjQyZTBkNTQKKwloYXNoMDJjIHNoYTE6MjgzYjQ4MjE5YWVlOWE0MTA1ZjZjYWIzMzdlNzg5MDY1YzgyYzJiOQorCWhhc2gwMWMgc2hhMTowYTgxZGE4OTU2MzQ2ZTE5YmNiMjdhOTA2ZjA0YWYzMjdlMDNlMzFiCisJaGFzaDA0ZCBzaGExOjAwNDk0YWRlY2YyZDk2MzVhMDJmYTQzMTMwOGQ2Nzk5M2Y4NTM5NjgKKwloYXNoMDFlIHNoYTE6Zjc1ZDFkZjg4Y2JmZTQyNThkNDk4NTJmMjZjZmM4M2YyYWQ0NDk0YgorCWhhc2gwNGYgc2hhMTowMjFmYWEyMGU5MzFmYjQ4OTg2ZmZjNjI4MmI0YmIwNTU1M2FjOTQ2CisJaGFzaDAxZiBzaGExOjBhNTllNzg3ZTZkNjg4YWE2MzA5ZTU2ZThjMWI4OTQzMWEwZmMxYzEKKwloYXNoMDVnIHNoYTE6MzA0ZGZiNDMyNWNmMjQzMDI1Yjk5NTc0ODZlYjYwNWE5YjUxYzE5OQorCisJaGFzaDA0YQlzaGEyNTY6ZjE4YTkzNWU2NTg2NjM0NTA5OGIzYjc1NDA3MWRiZjlmM2FhMzUyMGViMjdhN2IwMzZiMjc4YzVlMmYxZWQ3ZQorCWhhc2gwM2EJc2hhMjU2OjcxMzAzNWRjOTQwNjdhNjRlNWZhNmU0ZTE4MjFiN2MzYmRlNDlhNzdjN2NiM2Y4MGVhYWRlZmExY2E0MWIzZDIKKwloYXNoMDJhCXNoYTI1NjpmMTYwYTY3ZTA0OGI2ZmE3NWJlYzM5NTIxODQxNTQwNDUwNzY2OTJjZjVkY2NkM2RhMjFlM2ZkMzRiN2EzZjBmCisJaGFzaDA0YiBzaGEyNTY6YzdmYmEwZDYxMDQ5MTdmYmYzNTI1OGY0MGI5ZmE0ZmM2OTdjZmE5OTJkZWVjZDE1NzBhM2IwOGQwYTU1ODdhOQorCWhhc2gwM2Igc2hhMjU2OjcyODdhMmQ3OGEzNzY2YzE4MWIwOGRmMzg5NTFkNzg0YjA4YjcyYTQ0ZjU3MWVkNmQ4NTViZDBiZTIyYzcwZjYKKwloYXNoMDFiIHNoYTI1NjpkYTk2Y2Y3NzhjMTVkMGEyYmI3NmY5OGIyYTYyZjZjOWMwMTczMGZhNzAzMGU4ZjA4ZWYwMTkxMDQ4ZTdkNjIwCisJaGFzaDA0YyBzaGEyNTY6Y2I2MTVkMmRlZjRiODM0ZDVmNTViMjM1MWRmOTdkYzkyYmVlNGY1MDA5ZDI4NTIwMTQyN2YzNDkwODFjOGFjYQorCWhhc2gwMmMgc2hhMjU2OjYzYmI1MjdlMGI0ZTFjOGUxZGQwZDU0ZGQ3NzhjYTdjMzcxODY4OWZkNmUzN2M0NzMwNDRjZmJjZjFjYWNmZGIKKwloYXNoMDFjIHNoYTI1Njo1Yjg3MjM3YWMxZmJhZTAyNDYyNTZmZWQ5ZjlhMWYwNzdjNDE0MGZiN2U2NDQ0OTI1ZjhkYmZhNWFlNDA2Y2Q4CisJaGFzaDA0ZCBzaGEyNTY6ZWVkZGM5ZjlmNmNiM2Q2YjM5Yjg2MTY1OTg1M2YxMDg5MWRjMzczZTBiNmVlY2IwOWUwM2UzOWI2Y2U2NDcxNAorCWhhc2gwMWUgc2hhMjU2OjEwOGY1MjFiMWE3NGMyZTZkMGI1MmE0ZWRhODdlMDkxNjJiZjg0N2Y3ZDE5MGNmY2U0OTZlZTFhZjBiMjlhNWEKKwloYXNoMDRmIHNoYTI1Njo5MDFhY2RhMDQ1NDUwMmIzYmJkMjgxZjEzMGM0MTllNmM4ZGU3OGFmY2Y3MmE4ZGVmOGQ0NWFkMzE0NjJiY2U0CisJaGFzaDAxZiBzaGEyNTY6YTJkOTlkMWI4YmYyM2M4YWY3ZDlkOTEzNjg0NTRhZGMxMTBkZmQ1Y2MwNjhhNGNlYmI0ODZlZThmNWExZTE2YworCWhhc2gwNWcgc2hhMjU2OjRmZWYwMTViMDFkYThlZmU5MjlhNjhlM2JiOWI4ZmJhZDgxZjUzOTk1ZjA5N2JlZmU4ZWJjOTNmMTJhYjk4ZWMKKwlFT0YKKycKKworY29tbWl0X3NoYTE9JChnaXQgcmV2LXBhcnNlIDFzdF57Y29tbWl0fSkKK2NvbW1pdF9zaGEyPSQoZ2l0IHJldi1wYXJzZSAybmRee2NvbW1pdH0pCitjb21taXRfc2hhMz0kKGdpdCByZXYtcGFyc2UgM3JkXntjb21taXR9KQorY29tbWl0X3NoYTQ9JChnaXQgcmV2LXBhcnNlIDR0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE1PSQoZ2l0IHJldi1wYXJzZSA1dGhee2NvbW1pdH0pCisKK3ZlcmlmeV9ub3RlcyAoKSB7CisJbm90ZXNfcmVmPSIkMSIKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBub3RlcyB8CisJCXNvcnQgPiJvdXRwdXRfbm90ZXNfJG5vdGVzX3JlZiIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X25vdGVzXyRub3Rlc19yZWYiICJvdXRwdXRfbm90ZXNfJG5vdGVzX3JlZiIgJiYKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBsb2cgLS1mb3JtYXQ9IiVIICVzJW4lTiIgXAorCQk+Im91dHB1dF9sb2dfJG5vdGVzX3JlZiIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X2xvZ18kbm90ZXNfcmVmIiAib3V0cHV0X2xvZ18kbm90ZXNfcmVmIgorfQorCitub3Rlc19tZXJnZV9maWxlc19nb25lICgpIHsKKwkjIE5vIC5naXQvTk9URVNfTUVSR0VfKiBmaWxlcyBsZWZ0CisJeyBscyAuZ2l0L05PVEVTX01FUkdFXyogPm91dHB1dCB8fCA6OyB9ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAorfQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorJCh0ZXN0X29pZCBoYXNoMDRhKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAzYSkgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gwMmEpICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ194IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3ggbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit4IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreCBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1lcmdlIGJhc2UgKHgpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMm5kIGNvbW1pdCIgMm5kICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCXZlcmlmeV9ub3RlcyB4CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc195CiskKHRlc3Rfb2lkIGhhc2gwNGIpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDNiKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDAxYikgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3kgPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCisKKyRjb21taXRfc2hhMSAxc3QKK3kgbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbG9jYWwgYnJhbmNoICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAxc3QgY29tbWl0IiAxc3QgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDJuZCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gM3JkIGNvbW1pdCIgM3JkICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiA0dGggY29tbWl0IiA0dGggJiYKKwl2ZXJpZnlfbm90ZXMgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfegorJCh0ZXN0X29pZCBoYXNoMDRjKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAyYykgJGNvbW1pdF9zaGEyCiskKHRlc3Rfb2lkIGhhc2gwMWMpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ196IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3ogbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit6IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbW90ZSBicmFuY2ggKHopJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy96IHJlZnMvbm90ZXMveCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ogJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ6IG5vdGVzIG9uIDFzdCBjb21taXQiIDFzdCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gMm5kIGNvbW1pdCIgMm5kICYmCisJZ2l0IG5vdGVzIHJlbW92ZSAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ6IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCXZlcmlmeV9ub3RlcyB6CisnCisKKyMgQXQgdGhpcyBwb2ludCwgYmVmb3JlIG1lcmdpbmcgeiBpbnRvIHksIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBzdGF0dXM6CisjCisjIGNvbW1pdCB8IGJhc2UveCAgfCBsb2NhbC95IHwgcmVtb3RlL3ogfCBkaWZmIGZyb20geCB0byB5L3oKKyMgLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDFzdCAgICB8IFtub25lXSAgfCBiMGE2MDIxIHwgMGE4MWRhOCAgfCBhZGRlZCAgICAgLyBhZGRlZCAoZGlmZikKKyMgMm5kICAgIHwgY2VlZmE2NyB8IFtub25lXSAgfCAyODNiNDgyICB8IHJlbW92ZWQgICAvIGNoYW5nZWQKKyMgM3JkICAgIHwgZTUzODhjMSB8IDU3NzJmNDIgfCBbbm9uZV0gICB8IGNoYW5nZWQgICAvIHJlbW92ZWQKKyMgNHRoICAgIHwgNmU4ZTNmZSB8IGUyYmZkMDYgfCBjZmY1OWM3ICB8IGNoYW5nZWQgICAvIGNoYW5nZWQgKGRpZmYpCisjIDV0aCAgICB8IFtub25lXSAgfCBbbm9uZV0gIHwgW25vbmVdICAgfCBbbm9uZV0KKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X2NvbmZsaWN0cworJGNvbW1pdF9zaGExCiskY29tbWl0X3NoYTIKKyRjb21taXRfc2hhMworJGNvbW1pdF9zaGE0CitFT0YKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGExIDw8RU9GCis8PDw8PDw8IHJlZnMvbm90ZXMvbQoreSBub3RlcyBvbiAxc3QgY29tbWl0Cis9PT09PT09Cit6IG5vdGVzIG9uIDFzdCBjb21taXQKKz4+Pj4+Pj4gcmVmcy9ub3Rlcy96CitFT0YKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGEyIDw8RU9GCit6IG5vdGVzIG9uIDJuZCBjb21taXQKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTMgPDxFT0YKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorRU9GCisKK2NhdCA+ZXhwZWN0X2NvbmZsaWN0XyRjb21taXRfc2hhNCA8PEVPRgorPDw8PDw8PCByZWZzL25vdGVzL20KK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorPT09PT09PQoreiBub3RlcyBvbiA0dGggY29tbWl0Cis+Pj4+Pj4+IHJlZnMvbm90ZXMvegorRU9GCisKK2NwIGV4cGVjdF9ub3Rlc195IGV4cGVjdF9ub3Rlc19tCitjcCBleHBlY3RfbG9nX3kgZXhwZWN0X2xvZ19tCisKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95ID4gcHJlX21lcmdlX3kKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy96ID4gcHJlX21lcmdlX3oKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIG0gKD09IHkpIHdpdGggZGVmYXVsdCAoIm1hbnVhbCIpIHJlc29sdmVyID0+IENvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMveSAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL20gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0IDI+JjEgJiYKKwkjIE91dHB1dCBzaG91bGQgcG9pbnQgdG8gd2hlcmUgdG8gcmVzb2x2ZSBjb25mbGljdHMKKwl0ZXN0X2kxOG5ncmVwICJcXC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUiIG91dHB1dCAmJgorCSMgSW5zcGVjdCBtZXJnZSBjb25mbGljdHMKKwlscyAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFID5vdXRwdXRfY29uZmxpY3RzICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbmZsaWN0cyBvdXRwdXRfY29uZmxpY3RzICYmCisJKCBmb3IgZiBpbiAkKGNhdCBleHBlY3RfY29uZmxpY3RzKTsgZG8KKwkJdGVzdF9jbXAgImV4cGVjdF9jb25mbGljdF8kZiIgIi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGYiIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IHRoYXQgY3VycmVudCBub3RlcyB0cmVlIChwcmUtbWVyZ2UpIGhhcyBub3QgY2hhbmdlZCAobSA9PSB5KQorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIG0gJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChjYXQgcHJlX21lcmdlX3kpIgorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfegorJCh0ZXN0X29pZCBoYXNoMDRkKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAyYykgJGNvbW1pdF9zaGEyCiskKHRlc3Rfb2lkIGhhc2gwMWMpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ196IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3ogbm90ZXMgb24gNHRoIGNvbW1pdAorCitNb3JlIHogbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit6IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBub3RlcyBpbiB6JyAnCisJZ2l0IG5vdGVzIC0tcmVmIHogYXBwZW5kIC1tICJNb3JlIHogbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGRvIG1lcmdlIHcvY29uZmxpY3RzIHdoZW4gcHJldmlvdXMgbWVyZ2UgaXMgdW5maW5pc2hlZCcgJworCXRlc3QgLWQgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgMj4mMSAmJgorCSMgT3V0cHV0IHNob3VsZCBpbmRpY2F0ZSB3aGF0IGlzIHdyb25nCisJdGVzdF9pMThuZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1xcKiBleGlzdHMiIG91dHB1dAorJworCisjIFNldHVwIG5vbi1jb25mbGljdGluZyBtZXJnZSBiZXR3ZWVuIHggYW5kIG5ldyBub3RlcyByZWYgdworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdworJCh0ZXN0X29pZCBoYXNoMDJhKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDAxZSkgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3cgPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK3ggbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit3IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVucmVsYXRlZCBub3RlcyByZWYgKHcpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvdyAmJgorCWdpdCBub3RlcyBhZGQgLW0gIncgbm90ZXMgb24gMXN0IGNvbW1pdCIgMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwl2ZXJpZnlfbm90ZXMgdworJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdworJCh0ZXN0X29pZCBoYXNoMDRhKSAkY29tbWl0X3NoYTQKKyQodGVzdF9vaWQgaGFzaDAzYSkgJGNvbW1pdF9zaGEzCiskKHRlc3Rfb2lkIGhhc2gwMmEpICRjb21taXRfc2hhMgorJCh0ZXN0X29pZCBoYXNoMDFlKSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdyA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCit4IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreCBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ggbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit3IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBkbyBtZXJnZSB3aXRob3V0IGNvbmZsaWN0cyBldmVuIGlmIHByZXZpb3VzIG1lcmdlIGlzIHVuZmluaXNoZWQgKHggPT4gdyknICcKKwl0ZXN0IC1kIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeCAmJgorCXZlcmlmeV9ub3RlcyB3ICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAoeCBhbmQgeSkKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc19tCiskKHRlc3Rfb2lkIGhhc2gwNGYpICRjb21taXRfc2hhNAorJCh0ZXN0X29pZCBoYXNoMDNiKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDAyYykgJGNvbW1pdF9zaGEyCiskKHRlc3Rfb2lkIGhhc2gwMWYpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3kgYW5kIHogbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGFsbG93IG1peGluZyAtLWNvbW1pdCBhbmQgLS1hYm9ydCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBhbGxvdyBtaXhpbmcgLS1jb21taXQgYW5kIC0tc3RyYXRlZ3knICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgLS1zdHJhdGVneSB0aGVpcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGFsbG93IG1peGluZyAtLWFib3J0IGFuZCAtLXN0cmF0ZWd5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgLS1zdHJhdGVneSB0aGVpcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxpemUgY29uZmxpY3RpbmcgbWVyZ2UgKHogPT4gbSknICcKKwkjIFJlc29sdmUgY29uZmxpY3RzIGFuZCBmaW5hbGl6ZSBtZXJnZQorCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTEgPDxFT0YgJiYKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorRU9GCisJY2F0ID4uZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCA8PEVPRiAmJgoreSBhbmQgeiBub3RlcyBvbiA0dGggY29tbWl0CitFT0YKKwlnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgJiYKKwlub3Rlc19tZXJnZV9maWxlc19nb25lICYmCisJIyBNZXJnZSBjb21taXQgaGFzIHByZS1tZXJnZSB5IGFuZCBwcmUtbWVyZ2UgeiBhcyBwYXJlbnRzCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbV4xKSIgPSAiJChjYXQgcHJlX21lcmdlX3kpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL21eMikiID0gIiQoY2F0IHByZV9tZXJnZV96KSIgJiYKKwkjIE1lcmdlIGNvbW1pdCBtZW50aW9ucyB0aGUgbm90ZXMgcmVmcyBtZXJnZWQKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVCIHJlZnMvbm90ZXMvbSA+IG1lcmdlX2NvbW1pdF9tc2cgJiYKKwlncmVwIC1xIHJlZnMvbm90ZXMvbSBtZXJnZV9jb21taXRfbXNnICYmCisJZ3JlcCAtcSByZWZzL25vdGVzL3ogbWVyZ2VfY29tbWl0X21zZyAmJgorCSMgTWVyZ2UgY29tbWl0IG1lbnRpb25zIGNvbmZsaWN0aW5nIG5vdGVzCisJZ3JlcCAtcSAiQ29uZmxpY3RzIiBtZXJnZV9jb21taXRfbXNnICYmCisJKCBmb3Igc2hhMSBpbiAkKGNhdCBleHBlY3RfY29uZmxpY3RzKTsgZG8KKwkJZ3JlcCAtcSAiJHNoYTEiIG1lcmdlX2NvbW1pdF9tc2cgfHwKKwkJZXhpdCAxCisJZG9uZSApICYmCisJIyBWZXJpZnkgY29udGVudHMgb2YgbWVyZ2UgcmVzdWx0CisJdmVyaWZ5X25vdGVzIG0gJiYKKwkjIFZlcmlmeSB0aGF0IG90aGVyIG5vdGVzIHJlZnMgaGFzIG5vdCBjaGFuZ2VkICh3LCB4LCB5IGFuZCB6KQorCXZlcmlmeV9ub3RlcyB3ICYmCisJdmVyaWZ5X25vdGVzIHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB6CisnCisKK2NhdCA+ZXhwZWN0X2NvbmZsaWN0XyRjb21taXRfc2hhNCA8PEVPRgorPDw8PDw8PCByZWZzL25vdGVzL20KK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorPT09PT09PQoreiBub3RlcyBvbiA0dGggY29tbWl0CisKK01vcmUgeiBub3RlcyBvbiA0dGggY29tbWl0Cis+Pj4+Pj4+IHJlZnMvbm90ZXMvegorRU9GCisKK2NwIGV4cGVjdF9ub3Rlc195IGV4cGVjdF9ub3Rlc19tCitjcCBleHBlY3RfbG9nX3kgZXhwZWN0X2xvZ19tCisKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95ID4gcHJlX21lcmdlX3kKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy96ID4gcHJlX21lcmdlX3oKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkbyBtZXJnZSBvZiB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy95ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgMj4mMSAmJgorCSMgT3V0cHV0IHNob3VsZCBwb2ludCB0byB3aGVyZSB0byByZXNvbHZlIGNvbmZsaWN0cworCXRlc3RfaTE4bmdyZXAgIlxcLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSIgb3V0cHV0ICYmCisJIyBJbnNwZWN0IG1lcmdlIGNvbmZsaWN0cworCWxzIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgPm91dHB1dF9jb25mbGljdHMgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29uZmxpY3RzIG91dHB1dF9jb25mbGljdHMgJiYKKwkoIGZvciBmIGluICQoY2F0IGV4cGVjdF9jb25mbGljdHMpOyBkbworCQl0ZXN0X2NtcCAiZXhwZWN0X2NvbmZsaWN0XyRmIiAiLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kZiIgfHwKKwkJZXhpdCAxCisJZG9uZSApICYmCisJIyBWZXJpZnkgdGhhdCBjdXJyZW50IG5vdGVzIHRyZWUgKHByZS1tZXJnZSkgaGFzIG5vdCBjaGFuZ2VkIChtID09IHkpCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgbSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0IG5vdGVzIG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgJiYKKwlub3Rlc19tZXJnZV9maWxlc19nb25lICYmCisJIyBtIGhhcyBub3QgbW92ZWQgKHN0aWxsID09IHkpCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIgJiYKKwkjIFZlcmlmeSB0aGF0IG90aGVyIG5vdGVzIHJlZnMgaGFzIG5vdCBjaGFuZ2VkICh3LCB4LCB5IGFuZCB6KQorCXZlcmlmeV9ub3RlcyB3ICYmCisJdmVyaWZ5X25vdGVzIHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB6CisnCisKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95ID4gcHJlX21lcmdlX3kKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy96ID4gcHJlX21lcmdlX3oKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkbyBtZXJnZSBvZiB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0IDI+JjEgJiYKKwkjIE91dHB1dCBzaG91bGQgcG9pbnQgdG8gd2hlcmUgdG8gcmVzb2x2ZSBjb25mbGljdHMKKwl0ZXN0X2kxOG5ncmVwICJcXC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUiIG91dHB1dCAmJgorCSMgSW5zcGVjdCBtZXJnZSBjb25mbGljdHMKKwlscyAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFID5vdXRwdXRfY29uZmxpY3RzICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbmZsaWN0cyBvdXRwdXRfY29uZmxpY3RzICYmCisJKCBmb3IgZiBpbiAkKGNhdCBleHBlY3RfY29uZmxpY3RzKTsgZG8KKwkJdGVzdF9jbXAgImV4cGVjdF9jb25mbGljdF8kZiIgIi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGYiIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IHRoYXQgY3VycmVudCBub3RlcyB0cmVlIChwcmUtbWVyZ2UpIGhhcyBub3QgY2hhbmdlZCAobSA9PSB5KQorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIG0gJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChjYXQgcHJlX21lcmdlX3kpIgorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfbQorJCh0ZXN0X29pZCBoYXNoMDVnKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDAyYykgJGNvbW1pdF9zaGEyCiskKHRlc3Rfb2lkIGhhc2gwMWYpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCituZXcgbm90ZSBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKKworJGNvbW1pdF9zaGEzIDNyZAorCiskY29tbWl0X3NoYTIgMm5kCit6IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAoreSBhbmQgeiBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgKyByZW1vdmUgbm90ZXMgaW4gZmluYWxpemVkIG1lcmdlICh6ID0+IG0pJyAnCisJIyBSZXNvbHZlIG9uZSBjb25mbGljdAorCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTEgPDxFT0YgJiYKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorRU9GCisJIyBSZW1vdmUgYW5vdGhlciBjb25mbGljdAorCXJtIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGE0ICYmCisJIyBSZW1vdmUgYSBEL0YgY29uZmxpY3QKKwlybSAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhMyAmJgorCSMgQWRkIGEgbmV3IG5vdGUKKwllY2hvICJuZXcgbm90ZSBvbiA1dGggY29tbWl0IiA+IC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGE1ICYmCisJIyBGaW5hbGl6ZSBtZXJnZQorCWdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCAmJgorCW5vdGVzX21lcmdlX2ZpbGVzX2dvbmUgJiYKKwkjIE1lcmdlIGNvbW1pdCBoYXMgcHJlLW1lcmdlIHkgYW5kIHByZS1tZXJnZSB6IGFzIHBhcmVudHMKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tXjEpIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbV4yKSIgPSAiJChjYXQgcHJlX21lcmdlX3opIiAmJgorCSMgTWVyZ2UgY29tbWl0IG1lbnRpb25zIHRoZSBub3RlcyByZWZzIG1lcmdlZAorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JUIgcmVmcy9ub3Rlcy9tID4gbWVyZ2VfY29tbWl0X21zZyAmJgorCWdyZXAgLXEgcmVmcy9ub3Rlcy9tIG1lcmdlX2NvbW1pdF9tc2cgJiYKKwlncmVwIC1xIHJlZnMvbm90ZXMveiBtZXJnZV9jb21taXRfbXNnICYmCisJIyBNZXJnZSBjb21taXQgbWVudGlvbnMgY29uZmxpY3Rpbmcgbm90ZXMKKwlncmVwIC1xICJDb25mbGljdHMiIG1lcmdlX2NvbW1pdF9tc2cgJiYKKwkoIGZvciBzaGExIGluICQoY2F0IGV4cGVjdF9jb25mbGljdHMpOyBkbworCQlncmVwIC1xICIkc2hhMSIgbWVyZ2VfY29tbWl0X21zZyB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSBjb250ZW50cyBvZiBtZXJnZSByZXN1bHQKKwl2ZXJpZnlfbm90ZXMgbSAmJgorCSMgVmVyaWZ5IHRoYXQgb3RoZXIgbm90ZXMgcmVmcyBoYXMgbm90IGNoYW5nZWQgKHcsIHgsIHkgYW5kIHopCisJdmVyaWZ5X25vdGVzIHcgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKworY3AgZXhwZWN0X25vdGVzX3kgZXhwZWN0X25vdGVzX20KK2NwIGV4cGVjdF9sb2dfeSBleHBlY3RfbG9nX20KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkbyBtZXJnZSBvZiB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy95ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHogPm91dHB1dCAyPiYxICYmCisJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCisJdGVzdF9pMThuZ3JlcCAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0geSkKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIKKycKKworY3AgZXhwZWN0X25vdGVzX3cgZXhwZWN0X25vdGVzX20KK2NwIGV4cGVjdF9sb2dfdyBleHBlY3RfbG9nX20KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgbm90ZXMgcmVmIG0gdG8gc29tZXdoZXJlIGVsc2UgKHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3cpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHRvIGZpbmFsaXplIGNvbmZsaWN0aW5nIG1lcmdlIGlmIHVuZGVybHlpbmcgcmVmIGhhcyBtb3ZlZCBpbiB0aGUgbWVhbnRpbWUgKG0gIT0gTk9URVNfTUVSR0VfUEFSVElBTF4xKScgJworCSMgUmVzb2x2ZSBjb25mbGljdHMKKwljYXQgPi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGExIDw8RU9GICYmCit5IGFuZCB6IG5vdGVzIG9uIDFzdCBjb21taXQKK0VPRgorCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTQgPDxFT0YgJiYKK3kgYW5kIHogbm90ZXMgb24gNHRoIGNvbW1pdAorRU9GCisJIyBGYWlsIHRvIGZpbmFsaXplIG1lcmdlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0ID5vdXRwdXQgMj4mMSAmJgorCSMgLmdpdC9OT1RFU19NRVJHRV8qIG11c3QgcmVtYWluCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1BBUlRJQUwgJiYKKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfUkVGICYmCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhMSAmJgorCXRlc3QgLWYgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTIgJiYKKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGEzICYmCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCAmJgorCSMgUmVmcyBhcmUgdW5jaGFuZ2VkCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3cpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIiA9ICIkKGdpdCByZXYtcGFyc2UgTk9URVNfTUVSR0VfUEFSVElBTF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBOT1RFU19NRVJHRV9QQVJUSUFMXjEpIiAmJgorCSMgTWVudGlvbiByZWZzL25vdGVzL20sIGFuZCBpdHMgY3VycmVudCBhbmQgZXhwZWN0ZWQgdmFsdWUgaW4gb3V0cHV0CisJdGVzdF9pMThuZ3JlcCAtcSAicmVmcy9ub3Rlcy9tIiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiJChnaXQgcmV2LXBhcnNlIE5PVEVTX01FUkdFX1BBUlRJQUxeMSkiIG91dHB1dCAmJgorCSMgVmVyaWZ5IHRoYXQgb3RoZXIgbm90ZXMgcmVmcyBoYXMgbm90IGNoYW5nZWQgKHcsIHgsIHkgYW5kIHopCisJdmVyaWZ5X25vdGVzIHcgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZSBzaXR1YXRpb24gYnkgYWJvcnRpbmcgdGhlIG5vdGVzIG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgJiYKKwlub3Rlc19tZXJnZV9maWxlc19nb25lICYmCisJIyBtIGhhcyBub3QgbW92ZWQgKHN0aWxsID09IHcpCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3cpIiAmJgorCSMgVmVyaWZ5IHRoYXQgb3RoZXIgbm90ZXMgcmVmcyBoYXMgbm90IGNoYW5nZWQgKHcsIHgsIHkgYW5kIHopCisJdmVyaWZ5X25vdGVzIHcgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKworY2F0ID5leHBlY3Rfbm90ZXMgPDxFT0YKK2ZvbworYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGN3ZCBiZWZvcmUgY29tbWl0dGluZyBub3RlcyBtZXJnZScgJworCWdpdCBub3RlcyBhZGQgLW0gZm9vIEhFQUQgJiYKKwlnaXQgbm90ZXMgLS1yZWY9b3RoZXIgYWRkIC1tIGJhciBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHJlZnMvbm90ZXMvb3RoZXIgJiYKKwkoCisJCWNkIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgJiYKKwkJZWNobyAiZm9vIiA+ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQllY2hvICJiYXIiID4+ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQKKwkpICYmCisJZ2l0IG5vdGVzIHNob3cgSEVBRCA+IGFjdHVhbF9ub3RlcyAmJgorCXRlc3RfY21wIGV4cGVjdF9ub3RlcyBhY3R1YWxfbm90ZXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzExLW5vdGVzLW1lcmdlLWZhbm91dC5zaCBiL3QvdDMzMTEtbm90ZXMtbWVyZ2UtZmFub3V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViNjc1NDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzExLW5vdGVzLW1lcmdlLWZhbm91dC5zaApAQCAtMCwwICsxLDQ0NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKb2hhbiBIZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgbm90ZXMgbWVyZ2luZyBhdCB2YXJpb3VzIGZhbm91dCBsZXZlbHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit2ZXJpZnlfbm90ZXMgKCkgeworCW5vdGVzX3JlZj0iJDEiCisJY29tbWl0PSIkMiIKKwlpZiB0ZXN0IC1mICJleHBlY3Rfbm90ZXNfJG5vdGVzX3JlZiIKKwl0aGVuCisJCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIG5vdGVzIHwKKwkJCXNvcnQgPiJvdXRwdXRfbm90ZXNfJG5vdGVzX3JlZiIgJiYKKwkJdGVzdF9jbXAgImV4cGVjdF9ub3Rlc18kbm90ZXNfcmVmIiAib3V0cHV0X25vdGVzXyRub3Rlc19yZWYiIHx8CisJCQlyZXR1cm4gMQorCWZpICYmCisJZ2l0IC1jIGNvcmUubm90ZXNSZWY9InJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgbG9nIC0tZm9ybWF0PSIlSCAlcyVuJU4iIFwKKwkJIiRjb21taXQiID4ib3V0cHV0X2xvZ18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3RfbG9nXyRub3Rlc19yZWYiICJvdXRwdXRfbG9nXyRub3Rlc19yZWYiCit9CisKK3ZlcmlmeV9mYW5vdXQgKCkgeworCW5vdGVzX3JlZj0iJDEiCisJIyBFeHBlY3QgZW50aXJlIG5vdGVzIHRyZWUgdG8gaGF2ZSBhIGZhbm91dCA9PSAxCisJZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICJyZWZzL25vdGVzLyRub3Rlc19yZWYiID4vZGV2L251bGwgJiYKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSAicmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJZWNobyAiJHBhdGgiIHwgZ3JlcCAiXi4uL1swLTlhLWZdKiQiIHx8IHsKKwkJCWVjaG8gIkludmFsaWQgcGF0aCBcIiRwYXRoXCIiICYmCisJCQlyZXR1cm4gMTsKKwkJfQorCWRvbmUKK30KKwordmVyaWZ5X25vX2Zhbm91dCAoKSB7CisJbm90ZXNfcmVmPSIkMSIKKwkjIEV4cGVjdCBlbnRpcmUgbm90ZXMgdHJlZSB0byBoYXZlIGEgZmFub3V0ID09IDAKKwlnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgInJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgPi9kZXYvbnVsbCAmJgorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5ICJyZWZzL25vdGVzLyRub3Rlc19yZWYiIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQllY2hvICIkcGF0aCIgfCBncmVwIC12ICJeLi4vLioiIHx8IHsKKwkJCWVjaG8gIkludmFsaWQgcGF0aCBcIiRwYXRoXCIiICYmCisJCQlyZXR1cm4gMTsKKwkJfQorCWRvbmUKK30KKworIyBTZXQgdXAgYSBub3RlcyBtZXJnZSBzY2VuYXJpbyB3aXRoIGRpZmZlcmVudCBraW5kcyBvZiBjb25mbGljdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgZmV3IGluaXRpYWwgY29tbWl0cyB3aXRoIG5vdGVzIChub3RlcyByZWY6IHgpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWZvciBpIGluIDEgMiAzIDQgNQorCWRvCisJCXRlc3RfY29tbWl0ICJjb21taXQkaSIgPi9kZXYvbnVsbCAmJgorCQlnaXQgbm90ZXMgYWRkIC1tICJub3RlcyBmb3IgY29tbWl0JGkiIHx8IHJldHVybiAxCisJZG9uZSAmJgorCisJZ2l0IGxvZyAtLWZvcm1hdD1vbmVsaW5lICYmCisKKwl0ZXN0X29pZF9jYWNoZSA8PC1FT0YKKwloYXNoMDVhIHNoYTE6YWVkOTExNTVjN2E3MmMyMTg4ZTc4MWZkZjQwZTBmMzc2MWIyOTlkYgorCWhhc2gwNGEgc2hhMTo5OWZhYjI2OGY5ZDdlZTdiMDExZTA5MWE0MzZjNzhkZWY4ZWVlZTY5CisJaGFzaDAzYSBzaGExOjk1M2MyMGFlMjZjN2FhMGI0MjhjMjA2OTNmZTM4YmM2ODdmOWQxYTkKKwloYXNoMDJhIHNoYTE6NjM1ODc5NjEzMWI4OTE2ZWFhMmRkZTY5MDI2NDI5NDJhMWNiMzdlMQorCWhhc2gwMWEgc2hhMTpiMDJkNDU5YzMyZjBlNjhmMmZlMDk4MTAzM2JiMzRmMzg3NzZiYTQ3CisJaGFzaDAzYiBzaGExOjlmNTA2ZWU3MGUyMDM3OWQ3Zjc4MjA0Yzc3YjMzNGY0M2Q3NzQxMGQKKwloYXNoMDJiIHNoYTE6MjNhNDdkNmVhN2Q1ODk4OTVmYWY4MDA3NTIwNTQ4MThlMWU3NjI3YgorCisJaGFzaDA1YSBzaGEyNTY6M2FhZTVkMjY2MTlkOTZkYmE5Mzc5NWY2NjMyNTcxNmU0Y2JjNDg2ODg0Zjk1YTZhZGVlOGZiMDYxNWE3NmQxMgorCWhhc2gwNGEgc2hhMjU2OjA3ZTQzZGQzZDg5ZmU2MzRkMzI1MmUyNTNiNDI2YWFjYzcyODVhOTk1ZGNkYmNmOTRhYzI4NDA2MGExMTIyY2YKKwloYXNoMDNhIHNoYTI1NjoyNmZiNTJlYWE3ZjQ4NjZiZjczNTI1NDU4N2JlN2IzMTIwOWVjMTBlNTI1OTEyZmZkOGU4YmE1NDliYTg5MmZmCisJaGFzaDAyYSBzaGEyNTY6YjU3ZWJkZjIzNjM0ZTc1MGRjYmM0YjlhMzc5OTFkNzBmOTA4MzBkNTY4YTBlNDUyOWNlOWRlMGEzZjhkNjA1YworCWhhc2gwMWEgc2hhMjU2OjM3NzkwM2IxNTcyYmQ1MTE3MDg3YTU1MThmY2IxMDExYjUwNTNjY2NiYzU5ZTNjN2M4MjNhODYxNTIwNDE3M2IKKwloYXNoMDNiIHNoYTI1NjowNGU3YjM5MmZkYTdjMTg1YmZhMTdjOTE3OWI1NmRiNzMyZWRjMmRjMmIzYmY4ODczMDhkY2FhYmI3MTcyNzBkCisJaGFzaDAyYiBzaGEyNTY6NjYwOTlhYWFlYzQ5YTQ4NWVkOTkwYWNhZGQ5YTliODEyMzJlYTU5MjA3OTk2NDExM2Q4ZjU4MWZmNjllZjUwYgorCUVPRgorJworCitjb21taXRfc2hhMT0kKGdpdCByZXYtcGFyc2UgY29tbWl0MV57Y29tbWl0fSkKK2NvbW1pdF9zaGEyPSQoZ2l0IHJldi1wYXJzZSBjb21taXQyXntjb21taXR9KQorY29tbWl0X3NoYTM9JChnaXQgcmV2LXBhcnNlIGNvbW1pdDNee2NvbW1pdH0pCitjb21taXRfc2hhND0kKGdpdCByZXYtcGFyc2UgY29tbWl0NF57Y29tbWl0fSkKK2NvbW1pdF9zaGE1PSQoZ2l0IHJldi1wYXJzZSBjb21taXQ1Xntjb21taXR9KQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorJCh0ZXN0X29pZCBoYXNoMDVhKSAkY29tbWl0X3NoYTUKKyQodGVzdF9vaWQgaGFzaDA0YSkgJGNvbW1pdF9zaGE0CiskKHRlc3Rfb2lkIGhhc2gwM2EpICRjb21taXRfc2hhMworJCh0ZXN0X29pZCBoYXNoMDJhKSAkY29tbWl0X3NoYTIKKyQodGVzdF9vaWQgaGFzaDAxYSkgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1Citub3RlcyBmb3IgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK25vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCitub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nhbml0eSBjaGVjayAoeCknICcKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vX2Zhbm91dCB4CisnCisKK251bT0zMDAKKworY3AgZXhwZWN0X2xvZ194IGV4cGVjdF9sb2dfeQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgYSBmZXcgaHVuZHJlZCBjb21taXRzIHcvbm90ZXMgdG8gdHJpZ2dlciBmYW5vdXQgKHggLT4geSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCXRlc3RfY29tbWl0X2J1bGsgLS1zdGFydD02IC0taWQ9Y29tbWl0ICQoKG51bSAtIDUpKSAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWx0ICQoKG51bSAtIDUpKQorCWRvCisJCWdpdCBub3RlcyBhZGQgLW0gIm5vdGVzIGZvciBjb21taXQkaSIgSEVBRH4kaSB8fCByZXR1cm4gMQorCQlpPSQoKGkgKyAxKSkKKwlkb25lICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiICE9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy94KSIgJiYKKwkjIEV4cGVjdGVkIG51bWJlciBvZiBjb21taXRzIGFuZCBub3RlcworCXRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCB8IHdjIC1sKSA9ICRudW0gJiYKKwl0ZXN0ICQoZ2l0IG5vdGVzIGxpc3QgfCB3YyAtbCkgPSAkbnVtICYmCisJIyA1IGZpcnN0IG5vdGVzIHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB5IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBoYXMgZmFub3V0ICh5KScgJ3ZlcmlmeV9mYW5vdXQgeScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTm8tb3AgbWVyZ2UgKGFscmVhZHkgaW5jbHVkZWQpICh4ID0+IHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMveSAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL20gJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmFzdC1mb3J3YXJkIG1lcmdlICh5ID0+IHgpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMveCAmJgorCWdpdCBub3RlcyBtZXJnZSB5ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIgorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfegorJCh0ZXN0X29pZCBoYXNoMDNiKSAkY29tbWl0X3NoYTMKKyQodGVzdF9vaWQgaGFzaDAyYikgJGNvbW1pdF9zaGEyCiskKHRlc3Rfb2lkIGhhc2gwMWEpICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ196IDw8RU9GCiskY29tbWl0X3NoYTUgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0Mworbm90ZXMgZm9yIGNvbW1pdDMKKworYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25ldyBub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBzb21lIG9mIHRoZSBpbml0aWFsIDUgbm90ZXMgKHggLT4geiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gIm5ldyBub3RlcyBmb3IgY29tbWl0MiIgY29tbWl0MiAmJgorCWdpdCBub3RlcyBhcHBlbmQgLW0gImFwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzIiBjb21taXQzICYmCisJZ2l0IG5vdGVzIHJlbW92ZSBjb21taXQ0ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIGhhcyBubyBmYW5vdXQgKHopJyAndmVyaWZ5X25vX2Zhbm91dCB6JworCitjcCBleHBlY3RfbG9nX3ogZXhwZWN0X2xvZ19tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgbWVyZ2Ugd2l0aG91dCBjb25mbGljdHMgKHkgPT4geiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy96ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgorCWdpdCBub3RlcyBtZXJnZSB5ICYmCisJdmVyaWZ5X25vdGVzIG0gY29tbWl0NSAmJgorCSMgeC95L3ogdW5jaGFuZ2VkCisJdmVyaWZ5X25vdGVzIHggY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB5IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKK2NhdCA+ZXhwZWN0X2xvZ193IDw8RU9GCiskY29tbWl0X3NoYTUgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCitub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludHJvZHVjZSBjb25mbGljdGluZyBjaGFuZ2VzICh5IC0+IHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy93IHJlZnMvbm90ZXMveSAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3cgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJvdGhlciBub3RlcyBmb3IgY29tbWl0MSIgY29tbWl0MSAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gIm90aGVyIG5vdGVzIGZvciBjb21taXQzIiBjb21taXQzICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAib3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQiIGNvbW1pdDQgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgdyBjb21taXQ1CisnCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIG1lcmdlIHVzaW5nICJvdXJzIiBzdHJhdGVneSAoeiA9PiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3cgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9tICYmCisJZ2l0IG5vdGVzIG1lcmdlIC1zIG91cnMgeiAmJgorCXZlcmlmeV9ub3RlcyBtIGNvbW1pdDUgJiYKKwkjIHcveC95L3ogdW5jaGFuZ2VkCisJdmVyaWZ5X25vdGVzIHcgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK25vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIG1lcmdlIHVzaW5nICJ0aGVpcnMiIHN0cmF0ZWd5ICh6ID0+IHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCWdpdCBub3RlcyBtZXJnZSAtcyB0aGVpcnMgeiAmJgorCXZlcmlmeV9ub3RlcyBtIGNvbW1pdDUgJiYKKwkjIHcveC95L3ogdW5jaGFuZ2VkCisJdmVyaWZ5X25vdGVzIHcgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworCitub3RlcyBmb3IgY29tbWl0MworCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0MgorbmV3IG5vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitvdGhlciBub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBtZXJnZSB1c2luZyAidW5pb24iIHN0cmF0ZWd5ICh6ID0+IHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCWdpdCBub3RlcyBtZXJnZSAtcyB1bmlvbiB6ICYmCisJdmVyaWZ5X25vdGVzIG0gY29tbWl0NSAmJgorCSMgdy94L3kveiB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgdyBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHggY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB5IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCitub3RlcyBmb3IgY29tbWl0Mworb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25ldyBub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgbWVyZ2UgdXNpbmcgImNhdF9zb3J0X3VuaXEiIHN0cmF0ZWd5ICh6ID0+IHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCWdpdCBub3RlcyBtZXJnZSAtcyBjYXRfc29ydF91bmlxIHogJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB3L3gveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKworIyBXZSdyZSBtZXJnaW5nIHogaW50byB3LiBIZXJlIGFyZSB0aGUgY29uZmxpY3RzIHdlIGV4cGVjdDoKKyMKKyMgY29tbWl0IHwgeCAtPiB3ICAgIHwgeCAtPiB6ICAgIHwgY29uZmxpY3Q/CisjIC0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLQorIyAxICAgICAgfCBjaGFuZ2VkICAgfCB1bmNoYW5nZWQgfCBubywgdXNlIHcKKyMgMiAgICAgIHwgdW5jaGFuZ2VkIHwgY2hhbmdlZCAgIHwgbm8sIHVzZSB6CisjIDMgICAgICB8IGNoYW5nZWQgICB8IGNoYW5nZWQgICB8IHllcyAodywgdGhlbiB6IGluIGNvbmZsaWN0IG1hcmtlcnMpCisjIDQgICAgICB8IGNoYW5nZWQgICB8IGRlbGV0ZWQgICB8IHllcyAodykKKyMgNSAgICAgIHwgZGVsZXRlZCAgIHwgZGVsZXRlZCAgIHwgbm8sIGRlbGV0ZWQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgdG8gbWVyZ2UgdXNpbmcgIm1hbnVhbCIgc3RyYXRlZ3kgKHogPT4gdyknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy93ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X2NvbmZsaWN0cworJGNvbW1pdF9zaGEzCiskY29tbWl0X3NoYTQKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTMgPDxFT0YKKzw8PDw8PDwgcmVmcy9ub3Rlcy9tCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworPT09PT09PQorbm90ZXMgZm9yIGNvbW1pdDMKKworYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMKKz4+Pj4+Pj4gcmVmcy9ub3Rlcy96CitFT0YKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGE0IDw8RU9GCitvdGhlciBub3RlcyBmb3IgY29tbWl0NAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBjb25mbGljdCBlbnRyaWVzICh3aXRoIG5vIGZhbm91dCknICcKKwlscyAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFID5vdXRwdXRfY29uZmxpY3RzICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbmZsaWN0cyBvdXRwdXRfY29uZmxpY3RzICYmCisJKCBmb3IgZiBpbiAkKGNhdCBleHBlY3RfY29uZmxpY3RzKTsgZG8KKwkJdGVzdF9jbXAgImV4cGVjdF9jb25mbGljdF8kZiIgIi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGYiIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IHRoYXQgY3VycmVudCBub3RlcyB0cmVlIChwcmUtbWVyZ2UpIGhhcyBub3QgY2hhbmdlZCAobSA9PSB3KQorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy93KSIKKycKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CitvdGhlciBub3RlcyBmb3IgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0Mworb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKworYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25ldyBub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdmUgYW5kIGZpbmFsaXplIG1lcmdlICh6ID0+IHcpJyAnCisJY2F0ID4uZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhMyA8PEVPRiAmJgorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKworYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMKK0VPRgorCWdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCAmJgorCXZlcmlmeV9ub3RlcyBtIGNvbW1pdDUgJiYKKwkjIHcveC95L3ogdW5jaGFuZ2VkCisJdmVyaWZ5X25vdGVzIHcgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMjAtbm90ZXMtbWVyZ2Utd29ya3RyZWVzLnNoIGIvdC90MzMyMC1ub3Rlcy1tZXJnZS13b3JrdHJlZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODIzZmRiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMjAtbm90ZXMtbWVyZ2Utd29ya3RyZWVzLnNoCkBAIC0wLDAgKzEsNzIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUgVHdpdHRlciwgSW5jCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgbWVyZ2luZyBvZiBub3RlcyB0cmVlcyBpbiBtdWx0aXBsZSB3b3JrdHJlZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21taXQnICcKKwl0ZXN0X2NvbW1pdCB0YW50cnVtCisnCisKK2NvbW1pdF90YW50cnVtPSQoZ2l0IHJldi1wYXJzZSB0YW50cnVtXntjb21taXR9KQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBub3RlcyByZWYgKHgpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gdGFudHJ1bSIgdGFudHJ1bQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBsb2NhbCBicmFuY2ggKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIHRhbnRydW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIGJyYW5jaCAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gImNvbmZsaWN0aW5nIG5vdGVzIG9uIHRhbnRydW0iIHRhbnRydW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5IG5vdGVzIHJlZiBvdXJzZWx2ZXMgKHgpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gIm1vcmUgY29uZmxpY3Rpbmcgbm90ZXMgb24gdGFudHJ1bSIgdGFudHJ1bQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc29tZSBuZXcgd29ya3RyZWVzJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCAtYiBuZXdicmFuY2ggd29ya3RyZWUgbWFzdGVyICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtYiBuZXdicmFuY2gyIHdvcmt0cmVlMiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgZmFpbHMgYW5kIHNldHMgTk9URVNfTUVSR0VfUkVGJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ICYmCisJZWNobyAicmVmOiByZWZzL25vdGVzL3kiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9OT1RFU19NRVJHRV9SRUYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2hpbGUgbWlkLW1lcmdlIGluIGFub3RoZXIgd29ya2RpciBmYWlscycgJworCSgKKwkJY2Qgd29ya3RyZWUgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJhIG5vdGVzIG1lcmdlIGludG8gcmVmcy9ub3Rlcy95IGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQiIGVycgorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3dvcmt0cmVlcy93b3JrdHJlZS9OT1RFU19NRVJHRV9SRUYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHggd2hpbGUgbWlkLW1lcmdlIG9uIHkgc3VjY2VlZHMnICcKKwkoCisJCWNkIHdvcmt0cmVlMiAmJgorCQlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXQgMj4mMSAmJgorCQl0ZXN0X2kxOG5ncmVwICJBdXRvbWF0aWMgbm90ZXMgbWVyZ2UgZmFpbGVkIiBvdXQgJiYKKwkJZ3JlcCAtdiAiQSBub3RlcyBtZXJnZSBpbnRvIHJlZnMvbm90ZXMveCBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGluIiBvdXQKKwkpICYmCisJZWNobyAicmVmOiByZWZzL25vdGVzL3giID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC93b3JrdHJlZXMvd29ya3RyZWUyL05PVEVTX01FUkdFX1JFRgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDAtcmViYXNlLnNoIGIvdC90MzQwMC1yZWJhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDBkMjk3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDAtcmViYXNlLnNoCkBAIC0wLDAgKzEsNDIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEFtb3MgV2F0ZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgYXNzb3J0ZWQgdGVzdHMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHJlYmFzZSBhbmQgY2hlY2tzIHRoYXQgdGhlIGF1dGhvciBpbmZvcm1hdGlvbiBpcyBub3QgbG9zdAorYW1vbmcgb3RoZXIgdGhpbmdzLgorJworLiAuL3Rlc3QtbGliLnNoCisKK0dJVF9BVVRIT1JfTkFNRT1hdXRob3JAbmFtZQorR0lUX0FVVEhPUl9FTUFJTD1ib2d1c0BlbWFpbEBhZGRyZXNzCitleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZXBvc2l0b3J5IHdpdGggdG9waWMgYnJhbmNoZXMnICcKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyB0cnVlICYmCisJZWNobyBGaXJzdCA+QSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBBLiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9yY2UtM3dheSAmJgorCWVjaG8gRHVtbXkgPlkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFkgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgWS4iICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZpbGVtb3ZlICYmCisJZ2l0IHJlc2V0IC0tc29mdCBtYXN0ZXIgJiYKKwlta2RpciBEICYmCisJZ2l0IG12IEEgRC9BICYmCisJZ2l0IGNvbW1pdCAtbSAiTW92ZSBBLiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbXktdG9waWMtYnJhbmNoIG1hc3RlciAmJgorCWVjaG8gU2Vjb25kID5CICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBCICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIEIuIiAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwllY2hvIFRoaXJkID4+QSAmJgorCWdpdCB1cGRhdGUtaW5kZXggQSAmJgorCWdpdCBjb21taXQgLW0gIk1vZGlmeSBBLiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBteS10b3BpYy1icmFuY2ggJiYKKwllY2hvIFNpZGUgPj5DICYmCisJZ2l0IGFkZCBDICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIEMiICYmCisJZ2l0IGNoZWNrb3V0IC1mIG15LXRvcGljLWJyYW5jaCAmJgorCWdpdCB0YWcgdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIGRpcnR5IHdvcmt0cmVlJyAnCisJZWNobyBkaXJ0eSA+PkEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugb24gZGlydHkgY2FjaGUnICcKKwlnaXQgYWRkIEEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXInICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwlnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugc2V0cyBPUklHX0hFQUQgdG8gcHJlLXJlYmFzZSBzdGF0ZScgJworCWdpdCBjaGVja291dCAtYiBvcmlnLWhlYWQgdG9waWMgJiYKKwlwcmU9IiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCXRlc3RfY21wX3JldiAiJHByZSIgT1JJR19IRUFEICYmCisJdGVzdF9jbXBfcmV2ICEgIiRwcmUiIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLCB3aXRoIDxvbnRvPiBhbmQgPHVwc3RyZWFtPiBzcGVjaWZpZWQgYXMgOi9xdXV4ZXJ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIHRvcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiB0b3JlYmFzZSBteS10b3BpYy1icmFuY2heICYmCisJdXBzdHJlYW09JChnaXQgcmV2LXBhcnNlICI6L0FkZCBCIikgJiYKKwlvbnRvPSQoZ2l0IHJldi1wYXJzZSAiOi9BZGQgQSIpICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gJG9udG8gJHVwc3RyZWFtICYmCisJZ2l0IHJlc2V0IC0taGFyZCBteS10b3BpYy1icmFuY2heICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gIjovQWRkIEEiICI6L0FkZCBCIiAmJgorCWdpdCBjaGVja291dCBteS10b3BpYy1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIHJlYmFzZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhdXRob3IgaW5mb3JtYXRpb24nICcKKwkhIChnaXQgbG9nIHwgZ3JlcCAiQXV0aG9yOiIgfCBncmVwICI8PiIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSByZWJhc2Ugb3BlcmF0aW9uIHNob3VsZCBub3QgaGF2ZSBkZXN0cm95ZWQgYXV0aG9yIGluZm9ybWF0aW9uICgyKScgIgorCWdpdCBsb2cgLTEgfAorCWdyZXAgJ0F1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+JworIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIRUFEIHdhcyBkZXRhY2hlZCBkdXJpbmcgcmViYXNlJyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBREB7MX0pICE9ICQoZ2l0IHJldi1wYXJzZSBteS10b3BpYy1icmFuY2hAezF9KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBhbWJpZ3VvdXMgYnJhbmNoIG5hbWUnICcKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvZmYgb2YgdGhlIHByZXZpb3VzIGJyYW5jaCB1c2luZyAiLSInICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IHJlYmFzZSBAey0xfSA+ZXhwZWN0Lm1lc3NhZ2VzICYmCisJZ2l0IG1lcmdlLWJhc2UgbWFzdGVyIEhFQUQgPmV4cGVjdC5mb3JrcG9pbnQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgcmViYXNlIC0gPmFjdHVhbC5tZXNzYWdlcyAmJgorCWdpdCBtZXJnZS1iYXNlIG1hc3RlciBIRUFEID5hY3R1YWwuZm9ya3BvaW50ICYmCisKKwl0ZXN0X2NtcCBleHBlY3QuZm9ya3BvaW50IGFjdHVhbC5mb3JrcG9pbnQgJiYKKwkjIHRoZSBuZXh0IG9uZSBpcyBkdWJpb3VzLS0td2UgbWF5IHdhbnQgdG8gc2F5ICItIiwKKwkjIGluc3RlYWQgb2YgQHstMX0sIGluIHRoZSBtZXNzYWdlCisJdGVzdF9pMThuY21wIGV4cGVjdC5tZXNzYWdlcyBhY3R1YWwubWVzc2FnZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGEgc2luZ2xlIG1vZGUgY2hhbmdlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgdG9waWMgJiYKKwllY2hvIDEgPlggJiYKKwlnaXQgYWRkIFggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHByZXBhcmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbW9kZWNoYW5nZSBIRUFEXiAmJgorCWVjaG8gMSA+WCAmJgorCWdpdCBhZGQgWCAmJgorCXRlc3RfY2htb2QgK3ggQSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbW9kZWNoYW5nZSAmJgorCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBpcyBub3QgYnJva2VuIGJ5IGRpZmYucmVuYW1lcycgJworCXRlc3RfY29uZmlnIGRpZmYucmVuYW1lcyBjb3BpZXMgJiYKKwlnaXQgY2hlY2tvdXQgZmlsZW1vdmUgJiYKKwlHSVRfVFJBQ0U9MSBnaXQgcmViYXNlIGZvcmNlLTN3YXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHJlY292ZXInICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtb2RlY2hhbmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Nob3cgdmVyYm9zZSBlcnJvciB3aGVuIEhFQUQgY291bGQgbm90IGJlIGRldGFjaGVkJyAnCisJPkIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIEIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSB0b3BpYyAyPm91dHB1dC5lcnIgPm91dHB1dC5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6IiBvdXRwdXQuZXJyICYmCisJdGVzdF9pMThuZ3JlcCBCIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB3aGVuIHVwc3RyZWFtIGFyZyBpcyBtaXNzaW5nIGFuZCBub3Qgb24gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHdoZW4gdXBzdHJlYW0gYXJnIGlzIG1pc3NpbmcgYW5kIG5vdCBjb25maWd1cmVkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG5vLWNvbmZpZyB0b3BpYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdvcmtzIHdpdGggZm9ybWF0LnVzZUF1dG9CYXNlJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnVzZUF1dG9CYXNlIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwlnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHRvIGNvbW1vbiBiYXNlIGluIEB7dXBzdHJlYW19cyByZWZsb2cgaWYgbm8gdXBzdHJlYW0gYXJnICgtLW1lcmdlKScgJworCWdpdCBjaGVja291dCAtYiBkZWZhdWx0LWJhc2UgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGRlZmF1bHQgdG9waWMgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5kZWZhdWx0LnJlbW90ZSAuICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZGVmYXVsdC5tZXJnZSByZWZzL2hlYWRzL2RlZmF1bHQtYmFzZSAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZGVmYXVsdC1iYXNlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIGRlZmF1bHR+MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjaGVja291dCBkZWZhdWx0LWJhc2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGNoZWNrb3V0IGRlZmF1bHQgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGRlZmF1bHQtYmFzZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBkZWZhdWx0fjEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCB0byBjb21tb24gYmFzZSBpbiBAe3Vwc3RyZWFtfXMgcmVmbG9nIGlmIG5vIHVwc3RyZWFtIGFyZyAoLS1hcHBseSknICcKKwlnaXQgY2hlY2tvdXQgLUIgZGVmYXVsdC1iYXNlIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtQiBkZWZhdWx0IHRvcGljICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZGVmYXVsdC5yZW1vdGUgLiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmRlZmF1bHQubWVyZ2UgcmVmcy9oZWFkcy9kZWZhdWx0LWJhc2UgJiYKKwlnaXQgcmViYXNlIC0tYXBwbHkgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGRlZmF1bHQtYmFzZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBkZWZhdWx0fjEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQgZGVmYXVsdC1iYXNlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCBjaGVja291dCBkZWZhdWx0ICYmCisJZ2l0IHJlYmFzZSAtLWFwcGx5ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBkZWZhdWx0LWJhc2UgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgZGVmYXVsdH4xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrZWQgY29tbWl0cyBhbmQgZm9yay1wb2ludCB3b3JrIHRvZ2V0aGVyJyAnCisJZ2l0IGNoZWNrb3V0IGRlZmF1bHQtYmFzZSAmJgorCWVjaG8gQW1lbmRlZCA+QSAmJgorCWdpdCBjb21taXQgLWEgLS1uby1lZGl0IC0tYW1lbmQgJiYKKwl0ZXN0X2NvbW1pdCBCIEIgJiYKKwl0ZXN0X2NvbW1pdCBuZXdfQiBCICJOZXcgQiIgJiYKKwl0ZXN0X2NvbW1pdCBDIEMgJiYKKwlnaXQgY2hlY2tvdXQgZGVmYXVsdCAmJgorCWdpdCByZXNldCAtLWhhcmQgZGVmYXVsdC1iYXNlQHs0fSAmJgorCXRlc3RfY29tbWl0IEQgRCAmJgorCWdpdCBjaGVycnktcGljayAtMiBkZWZhdWx0LWJhc2VeICYmCisJdGVzdF9jb21taXQgZmluYWxfQiBCICJGaW5hbCBCIiAmJgorCWdpdCByZWJhc2UgJiYKKwllY2hvIEFtZW5kZWQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBBICYmCisJZWNobyAiRmluYWwgQiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBCICYmCisJZWNobyBDID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgQyAmJgorCWVjaG8gRCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IEQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tYXBwbHkgLXEgaXMgcXVpZXQnICcKKwlnaXQgY2hlY2tvdXQgLWIgcXVpZXQgdG9waWMgJiYKKwlnaXQgcmViYXNlIC0tYXBwbHkgLXEgbWFzdGVyID5vdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAtcSBpcyBxdWlldCcgJworCWdpdCBjaGVja291dCAtQiBxdWlldCB0b3BpYyAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSAtcSBtYXN0ZXIgPm91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlYmFzZSBhIGNvbW1pdCB0aGF0IHNwcmlua2xlcyBDUnMgaW4nICcKKwkoCisJCWVjaG8gIk9uZSIgJiYKKwkJZWNobyAiVHdvUSIgJiYKKwkJZWNobyAiVGhyZWUiICYmCisJCWVjaG8gIkZRdXIiICYmCisJCWVjaG8gIkZpdmUiCisJKSB8IHFfdG9fY3IgPkNSICYmCisJZ2l0IGFkZCBDUiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkEgZmlsZSB3aXRoIGEgbGluZSB3aXRoIENSIiAmJgorCWdpdCB0YWcgZmlsZS13aXRoLWNyICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCByZWJhc2UgLS1vbnRvIEhFQUReXiBIRUFEXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbGUtd2l0aC1jcjpDUiBIRUFEOkNSCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBjYW4gY29weSBub3RlcycgJworCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZS5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCXRlc3RfY29tbWl0IG4xICYmCisJdGVzdF9jb21taXQgbjIgJiYKKwl0ZXN0X2NvbW1pdCBuMyAmJgorCWdpdCBub3RlcyBhZGQgLW0iYSBub3RlIiBuMyAmJgorCWdpdCByZWJhc2UgLS1vbnRvIG4xIG4yICYmCisJdGVzdCAiYSBub3RlIiA9ICIkKGdpdCBub3RlcyBzaG93IEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLW0gY2FuIGNvcHkgbm90ZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG4zICYmCisJZ2l0IHJlYmFzZSAtbSAtLW9udG8gbjEgbjIgJiYKKwl0ZXN0ICJhIG5vdGUiID0gIiQoZ2l0IG5vdGVzIHNob3cgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBjb21taXQgd2l0aCBhbiBhbmNpZW50IHRpbWVzdGFtcCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCT5vbGQub25lICYmIGdpdCBhZGQgb2xkLm9uZSAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tZGF0ZT0iQDEyMzQ1ICswNDAwIiAtbSAiT2xkIG9uZSIgJiYKKwk+b2xkLnR3byAmJiBnaXQgYWRkIG9sZC50d28gJiYgdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWRhdGU9IkAyMzQ1NiArMDUwMCIgLW0gIk9sZCB0d28iICYmCisJPm9sZC50aHJlZSAmJiBnaXQgYWRkIG9sZC50aHJlZSAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tZGF0ZT0iQDM0NTY3ICswNjAwIiAtbSAiT2xkIHRocmVlIiAmJgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gPmFjdHVhbCAmJgorCWdyZXAgImF1dGhvciAuKiAxMjM0NSArMDQwMCQiIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPmFjdHVhbCAmJgorCWdyZXAgImF1dGhvciAuKiAyMzQ1NiArMDUwMCQiIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiYXV0aG9yIC4qIDM0NTY3ICswNjAwJCIgYWN0dWFsICYmCisKKwlnaXQgcmViYXNlIC0tb250byBIRUFEXl4gSEVBRF4gJiYKKworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiYXV0aG9yIC4qIDM0NTY3ICswNjAwJCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoICJGcm9tICIgbGluZSBpbiBjb21taXQgbWVzc2FnZScgJworCWdpdCBjaGVja291dCAtYiBwcmVzZXJ2ZS1mcm9tIG1hc3Rlcn4xICYmCisJY2F0ID5Gcm9tXy5tc2cgPDxFT0YgJiYKK1NvbWVib2R5IGVtYmVkZGVkIGFuIG1ib3ggaW4gYSBjb21taXQgbWVzc2FnZQorCitUaGlzIGlzIGZyb20gc28tYW5kLXNvOgorCitGcm9tIGFAYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvaG4gRG9lIDxub2JvZHlAZXhhbXBsZS5jb20+CitEYXRlOiBTYXQsIDExIE5vdiAyMDE3IDAwOjAwOjAwICswMDAwCitTdWJqZWN0OiBub3QgdGhpcyBtZXNzYWdlCisKK3NvbWV0aGluZworRU9GCisJPkZyb21fICYmCisJZ2l0IGFkZCBGcm9tXyAmJgorCWdpdCBjb21taXQgLUYgRnJvbV8ubXNnICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+b3V0ICYmCisJdGVzdF9jbXAgRnJvbV8ubXNnIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1hcHBseSBhbmQgLS1zaG93LWN1cnJlbnQtcGF0Y2gnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGNvbmZsaWN0LWFwcGx5ICYmCisJKAorCQljZCBjb25mbGljdC1hcHBseSAmJgorCQl0ZXN0X2NvbW1pdCBpbml0ICYmCisJCWVjaG8gb25lID4+aW5pdC50ICYmCisJCWdpdCBjb21taXQgLWEgLW0gb25lICYmCisJCWVjaG8gdHdvID4+aW5pdC50ICYmCisJCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJCWdpdCB0YWcgdHdvICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hcHBseSAtZiAtLW9udG8gaW5pdCBIRUFEXiAmJgorCQlHSVRfVFJBQ0U9MSBnaXQgcmViYXNlIC0tc2hvdy1jdXJyZW50LXBhdGNoID4vZGV2L251bGwgMj5zdGRlcnIgJiYKKwkJZ3JlcCAic2hvdy4qJChnaXQgcmV2LXBhcnNlIHR3bykiIHN0ZGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tYXBwbHkgYW5kIC5naXRhdHRyaWJ1dGVzJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBhdHRyaWJ1dGVzICYmCisJKAorCQljZCBhdHRyaWJ1dGVzICYmCisJCXRlc3RfY29tbWl0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyBmaWx0ZXIudGVzdC5jbGVhbiAic2VkIC1lICdcJydzL3NtdWRnZWQvY2xlYW4vZydcJyciICYmCisJCWdpdCBjb25maWcgZmlsdGVyLnRlc3Quc211ZGdlICJzZWQgLWUgJ1wnJ3MvY2xlYW4vc211ZGdlZC9nJ1wnJyIgJiYKKworCQl0ZXN0X2NvbW1pdCBzZWNvbmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRlc3QgSEVBRF4gJiYKKworCQllY2hvICIqLnR4dCBmaWx0ZXI9dGVzdCIgPi5naXRhdHRyaWJ1dGVzICYmCisJCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jb21taXQgdGhpcmQgJiYKKworCQllY2hvICJUaGlzIHRleHQgaXMgc211ZGdlZC4iID5hLnR4dCAmJgorCQlnaXQgYWRkIGEudHh0ICYmCisJCXRlc3RfY29tbWl0IGZvdXJ0aCAmJgorCisJCWdpdCBjaGVja291dCAtYiByZW1vdmFsIEhFQUReICYmCisJCWdpdCBybSAuZ2l0YXR0cmlidXRlcyAmJgorCQlnaXQgYWRkIC11ICYmCisJCXRlc3RfY29tbWl0IGZpZnRoICYmCisJCWdpdCBjaGVycnktcGljayB0ZXN0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwkJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwkJZ3JlcCAic211ZGdlZCIgYS50eHQgJiYKKworCQlnaXQgY2hlY2tvdXQgcmVtb3ZhbCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCByZWJhc2UgbWFzdGVyICYmCisJCWdyZXAgImNsZWFuIiBhLnR4dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLS1tZXJnZS5zaCBhbmQgLS1zaG93LWN1cnJlbnQtcGF0Y2gnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGNvbmZsaWN0LW1lcmdlICYmCisJKAorCQljZCBjb25mbGljdC1tZXJnZSAmJgorCQl0ZXN0X2NvbW1pdCBpbml0ICYmCisJCWVjaG8gb25lID4+aW5pdC50ICYmCisJCWdpdCBjb21taXQgLWEgLW0gb25lICYmCisJCWVjaG8gdHdvID4+aW5pdC50ICYmCisJCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJCWdpdCB0YWcgdHdvICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1tZXJnZSAtLW9udG8gaW5pdCBIRUFEXiAmJgorCQlnaXQgcmViYXNlIC0tc2hvdy1jdXJyZW50LXBhdGNoID5hY3R1YWwucGF0Y2ggJiYKKwkJR0lUX1RSQUNFPTEgZ2l0IHJlYmFzZSAtLXNob3ctY3VycmVudC1wYXRjaCA+L2Rldi9udWxsIDI+c3RkZXJyICYmCisJCWdyZXAgInNob3cuKlJFQkFTRV9IRUFEIiBzdGRlcnIgJiYKKwkJdGVzdCAiJChnaXQgcmV2LXBhcnNlIFJFQkFTRV9IRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHR3bykiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWMgcmViYXNlLnVzZUJ1aWx0aW49ZmFsc2Ugd2FybmluZycgJworCWV4cGVjdGVkPSJyZWJhc2UudXNlQnVpbHRpbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQiICYmCisKKwkjIE9ubHkgd2FybiB3aGVuIHRoZSBsZWdhY3kgcmViYXNlIGlzIHJlcXVlc3RlZC4uLgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWJhc2UudXNlQnVpbHRpbj1mYWxzZSByZWJhc2UgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICIkZXhwZWN0ZWQiIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9SRUJBU0VfVVNFX0JVSUxUSU49ZmFsc2UgZ2l0IHJlYmFzZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIiRleHBlY3RlZCIgZXJyICYmCisKKwkjIC4uLm5vdCB3aGVuIHdlIHdvdWxkIGhhdmUgdXNlZCB0aGUgYnVpbHQtaW4gYW55d2F5CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHJlYmFzZS51c2VCdWlsdGluPXRydWUgcmViYXNlIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9SRUJBU0VfVVNFX0JVSUxUSU49dHJ1ZSBnaXQgcmViYXNlIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gYnJhbmNoIGNoZWNrZWQgb3V0IGhlcmUnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byBicmFuY2ggbm90IGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggb3RoZXIgJiYKKwlnaXQgcmViYXNlIG1hc3RlciBvdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gc3dpdGNoIHRvIGJyYW5jaCBjaGVja2VkIG91dCBlbHNld2hlcmUnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHdvcmt0cmVlIGFkZCB3dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyB3dCByZWJhc2UgbWFzdGVyIG1hc3RlciAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImFscmVhZHkgY2hlY2tlZCBvdXQiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDEtcmViYXNlLWFuZC1hbS1yZW5hbWUuc2ggYi90L3QzNDAxLXJlYmFzZS1hbmQtYW0tcmVuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxOGJhZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDAxLXJlYmFzZS1hbmQtYW0tcmVuYW1lLnNoCkBAIC0wLDAgKzEsMjEzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSArIGRpcmVjdG9yeSByZW5hbWUgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RjYXNlIHdoZXJlIGRpcmVjdG9yeSByZW5hbWUgc2hvdWxkIGJlIGRldGVjdGVkJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBkaXItcmVuYW1lICYmCisJKAorCQljZCBkaXItcmVuYW1lICYmCisKKwkJbWtkaXIgeCAmJgorCQl0ZXN0X3NlcSAgMSAxMCA+eC9hICYmCisJCXRlc3Rfc2VxIDExIDIwID54L2IgJiYKKwkJdGVzdF9zZXEgMjEgMzAgPngvYyAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIGEgYiBjIGQgZSBmIGcgaCBpID5sICYmCisJCWdpdCBhZGQgeCBsICYmCisJCWdpdCBjb21taXQgLW0gIkluaXRpYWwiICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeCB5ICYmCisJCWdpdCBtdiBsIGxldHRlcnMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVuYW1lIHggdG8geSwgbCB0byBsZXR0ZXJzIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gaiA+PmwgJiYKKwkJdGVzdF9zZXEgMzEgNDAgPngvZCAmJgorCQlnaXQgYWRkIGwgeC9kICYmCisJCWdpdCBjb21taXQgLW0gIk1vZGlmeSBsLCBhZGQgeC9kIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0taW50ZXJhY3RpdmU6IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0ZWQnICcKKwkoCisJCWNkIGRpci1yZW5hbWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEiIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgcmViYXNlIC0taW50ZXJhY3RpdmUgQSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0ICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeS9kICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHgvZAorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmViYXNlIC0tYXBwbHk6IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0ZWQnICcKKwkoCisJCWNkIGRpci1yZW5hbWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSByZWJhc2UgLS1hcHBseSBBICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSB5L2QgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgeC9kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZTogZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3RlZCcgJworCSgKKwkJY2QgZGlyLXJlbmFtZSAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIHJlYmFzZSAtLW1lcmdlIEEgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIHkvZCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB4L2QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2FtOiBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGVkJyAnCisJKAorCQljZCBkaXItcmVuYW1lICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgQiAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgYW0gLS0zd2F5IDAwMDEqLnBhdGNoICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSB5L2QgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgeC9kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0Y2FzZSB3aGVyZSBkaXJlY3RvcnkgcmVuYW1lIHNob3VsZCBOT1QgYmUgZGV0ZWN0ZWQnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIG5vLWRpci1yZW5hbWUgJiYKKwkoCisJCWNkIG5vLWRpci1yZW5hbWUgJiYKKworCQlta2RpciB4ICYmCisJCXRlc3Rfc2VxICAxIDEwID54L2EgJiYKKwkJdGVzdF9zZXEgMTEgMjAgPngvYiAmJgorCQl0ZXN0X3NlcSAyMSAzMCA+eC9jICYmCisJCWVjaG8gb3JpZ2luYWwgPnByb2plY3RfaW5mbyAmJgorCQlnaXQgYWRkIHggcHJvamVjdF9pbmZvICYmCisJCWdpdCBjb21taXQgLW0gIkluaXRpYWwiICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQllY2hvIHYyID5wcm9qZWN0X2luZm8gJiYKKwkJZ2l0IGFkZCBwcm9qZWN0X2luZm8gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTW9kaWZ5IHByb2plY3RfaW5mbyIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciB5ICYmCisJCWdpdCBtdiB4L2MgeS9jICYmCisJCWVjaG8gdjEgPnByb2plY3RfaW5mbyAmJgorCQlnaXQgYWRkIHByb2plY3RfaW5mbyAmJgorCQlnaXQgY29tbWl0IC1tICJSZW5hbWUgeC9jIHRvIHkvYywgbW9kaWZ5IHByb2plY3RfaW5mbyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWludGVyYWN0aXZlOiBOTyBkaXJlY3RvcnkgcmVuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgbm8tZGlyLXJlbmFtZSByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCWNkIG5vLWRpci1yZW5hbWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIiBnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUgQSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeC9hICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHgvYiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB4L2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAoYW0pOiBOTyBkaXJlY3RvcnkgcmVuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgbm8tZGlyLXJlbmFtZSByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCWNkIG5vLWRpci1yZW5hbWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgQSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeC9hICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHgvYiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB4L2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlOiBOTyBkaXJlY3RvcnkgcmVuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgbm8tZGlyLXJlbmFtZSByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCWNkIG5vLWRpci1yZW5hbWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1tZXJnZSBBICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSB4L2EgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeC9iICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHgvYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW06IE5PIGRpcmVjdG9yeSByZW5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBuby1kaXItcmVuYW1lIGFtIC0tYWJvcnQiICYmCisJKAorCQljZCBuby1kaXItcmVuYW1lICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgQiAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLTN3YXkgMDAwMSoucGF0Y2ggJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIHgvYSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB4L2IgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgeC9jCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDItcmViYXNlLW1lcmdlLnNoIGIvdC90MzQwMi1yZWJhc2UtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTFlYzUwMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDItcmViYXNlLW1lcmdlLnNoCkBAIC0wLDAgKzEsMTY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1tZXJnZSB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKworVD0iQSBxdWljayBicm93biBmb3gKK2p1bXBzIG92ZXIgdGhlIGxhenkgZG9nLiIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWVjaG8gIiRpICRUIgorZG9uZSA+b3JpZ2luYWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGFkZCBvcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLW0iaW5pdGlhbCIgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvICIxMSAkVCIgPj5vcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLWEgLW0ibWFzdGVyIHVwZGF0ZXMgYSBiaXQuIiAmJgorCisJZWNobyAiMTIgJFQiID4+b3JpZ2luYWwgJiYKKwlnaXQgY29tbWl0IC1hIC1tIm1hc3RlciB1cGRhdGVzIGEgYml0IG1vcmUuIiAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwkoZWNobyAiMCAkVCIgJiYgY2F0IG9yaWdpbmFsKSA+cmVuYW1lZCAmJgorCWdpdCBhZGQgcmVuYW1lZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgb3JpZ2luYWwgJiYKKwlnaXQgY29tbWl0IC1hIC1tInNpZGUgcmVuYW1lcyBhbmQgZWRpdHMuIiAmJgorCisJdHIgIlthLXpdIiAiW0EtWl0iIDxvcmlnaW5hbCA+bmV3ZmlsZSAmJgorCWdpdCBhZGQgbmV3ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0ic2lkZSBlZGl0cyBmdXJ0aGVyLiIgJiYKKwlnaXQgYnJhbmNoIHNlY29uZC1zaWRlICYmCisKKwl0ciAiW2EtbV0iICJbQS1NXSIgPG9yaWdpbmFsID5uZXdmaWxlICYmCisJcm0gLWYgb3JpZ2luYWwgJiYKKwlnaXQgY29tbWl0IC1hIC1tInNpZGUgZWRpdHMgb25jZSBhZ2Fpbi4iICYmCisKKwlnaXQgYnJhbmNoIHRlc3QtcmViYXNlIHNpZGUgJiYKKwlnaXQgYnJhbmNoIHRlc3QtcmViYXNlLXBpY2sgc2lkZSAmJgorCWdpdCBicmFuY2ggdGVzdC1yZWZlcmVuY2UtcGljayBzaWRlICYmCisJZ2l0IGJyYW5jaCB0ZXN0LWNvbmZsaWN0cyBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QtbWVyZ2Ugc2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZlcmVuY2UgbWVyZ2UnICcKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIC1tICJyZWZlcmVuY2UgbWVyZ2UiIG1hc3RlcgorJworCitQUkVfUkVCQVNFPSQoZ2l0IHJldi1wYXJzZSB0ZXN0LXJlYmFzZSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcmViYXNlICcKKwlnaXQgY2hlY2tvdXQgdGVzdC1yZWJhc2UgJiYKKwlHSVRfVFJBQ0U9MSBnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QtcmViYXNlQHsxfSBpcyBwcmUgcmViYXNlJyAnCisJdGVzdCAkUFJFX1JFQkFTRSA9ICQoZ2l0IHJldi1wYXJzZSB0ZXN0LXJlYmFzZUB7MX0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFuZCByZWJhc2Ugc2hvdWxkIG1hdGNoJyAnCisJZ2l0IGRpZmYtdHJlZSAtciB0ZXN0LXJlYmFzZSB0ZXN0LW1lcmdlID5kaWZmZXJlbmNlICYmCisJaWYgdGVzdCAtcyBkaWZmZXJlbmNlCisJdGhlbgorCQljYXQgZGlmZmVyZW5jZQorCQkoZXhpdCAxKQorCWVsc2UKKwkJZWNobyBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB0aGUgb3RoZXIgd2F5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2Ugc2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLVh0aGVpcnMnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3RpbmcgbWFzdGVyfjIgJiYKKwllY2hvICJBQiAkVCIgPj4gb3JpZ2luYWwgJiYKKwlnaXQgY29tbWl0IC1tY29uZmxpY3Rpbmcgb3JpZ2luYWwgJiYKKwlnaXQgcmViYXNlIC1YdGhlaXJzIG1hc3RlciAmJgorCWdyZXAgQUIgb3JpZ2luYWwgJiYKKwkhIGdyZXAgMTEgb3JpZ2luYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1YdGhlaXJzIGZyb20gb3JwaGFuJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbi1jb25mbGljdGluZyBtYXN0ZXJ+MiAmJgorCWVjaG8gIkFCICRUIiA+PiBvcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLW1vcnBoYW4tY29uZmxpY3Rpbmcgb3JpZ2luYWwgJiYKKwlnaXQgcmViYXNlIC1YdGhlaXJzIG1hc3RlciAmJgorCWdyZXAgQUIgb3JpZ2luYWwgJiYKKwkhIGdyZXAgMTEgb3JpZ2luYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW5kIHJlYmFzZSBzaG91bGQgbWF0Y2gnICcKKwlnaXQgZGlmZi10cmVlIC1yIHRlc3QtcmViYXNlIHRlc3QtbWVyZ2UgPmRpZmZlcmVuY2UgJiYKKwlpZiB0ZXN0IC1zIGRpZmZlcmVuY2UKKwl0aGVuCisJCWNhdCBkaWZmZXJlbmNlCisJCShleGl0IDEpCisJZWxzZQorCQllY2hvIGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGlja2luZyByZWJhc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgLS1vbnRvIG1hc3RlciBzaWRlXl4gJiYKKwltYj0kKGdpdCBtZXJnZS1iYXNlIG1hc3RlciBIRUFEKSAmJgorCWlmIHRlc3QgIiRtYiIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiCisJdGhlbgorCQllY2hvIGhhcHB5CisJZWxzZQorCQlnaXQgc2hvdy1icmFuY2gKKwkJKGV4aXQgMSkKKwlmaSAmJgorCWY9JChnaXQgZGlmZi10cmVlIC0tbmFtZS1vbmx5IEhFQUReIEhFQUQpICYmCisJZz0kKGdpdCBkaWZmLXRyZWUgLS1uYW1lLW9ubHkgSEVBRF5eIEhFQUReKSAmJgorCWNhc2UgIiRmLCRnIiBpbgorCW5ld2ZpbGUsbmV3ZmlsZSkKKwkJZWNobyBoYXBweSA7OworCSopCisJCWVjaG8gIiRmIgorCQllY2hvICIkZyIKKwkJKGV4aXQgMSkKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtcyBmdW5ueSAtWG9wdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIHRlc3QtYmluIGZ1bm55Lndhcy5ydW4iICYmCisJbWtkaXIgdGVzdC1iaW4gJiYKKwljYXQgPnRlc3QtYmluL2dpdC1tZXJnZS1mdW5ueSA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJY2FzZSAiXCQxIiBpbiAtLW9wdCkgOzsgKikgZXhpdCAyIDs7IGVzYWMKKwlzaGlmdCAmJgorCT5mdW5ueS53YXMucnVuICYmCisJZXhlYyBnaXQgbWVyZ2UtcmVjdXJzaXZlICJcJEAiCisJRU9GCisJY2htb2QgK3ggdGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0LWZ1bm55IG1hc3Rlcl4gJiYKKwl0ZXN0X2NvbW1pdCBmdW5ueSAmJgorCSgKKwkJUEFUSD0uL3Rlc3QtYmluOiRQQVRIICYmCisJCWdpdCByZWJhc2UgLXMgZnVubnkgLVhvcHQgbWFzdGVyCisJKSAmJgorCXRlc3QgLWYgZnVubnkud2FzLnJ1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1za2lwIHdvcmtzIHdpdGggdHdvIGNvbmZsaWN0cyBpbiBhIHJvdycgJworCWdpdCBjaGVja291dCBzZWNvbmQtc2lkZSAgJiYKKwl0ciAiW0EtWl0iICJbYS16XSIgPG5ld2ZpbGUgPnRtcCAmJgorCW12IHRtcCBuZXdmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJlZGl0IGNvbmZsaWN0aW5nIHdpdGggc2lkZSIgJiYKKwl0ciAiW2QtZl0iICJbRC1GXSIgPG5ld2ZpbGUgPnRtcCAmJgorCW12IHRtcCBuZXdmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJhbm90aGVyIGVkaXQgY29uZmxpY3Rpbmcgd2l0aCBzaWRlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1tZXJnZSB0ZXN0LWNvbmZsaWN0cyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1za2lwICYmCisJZ2l0IHJlYmFzZSAtLXNraXAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDAzLXJlYmFzZS1za2lwLnNoIGIvdC90MzQwMy1yZWJhc2Utc2tpcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZThhOGRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwMy1yZWJhc2Utc2tpcC5zaApAQCAtMCwwICsxLDExMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLW1lcmdlIC0tc2tpcCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCisjIHdlIGFzc3VtZSB0aGUgZGVmYXVsdCBnaXQgYW0gLTMgLS1za2lwIHN0cmF0ZWd5IGlzIHRlc3RlZCBpbmRlcGVuZGVudGx5CisjIGFuZCBhbHdheXMgd29ya3MgOikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+IGhlbGxvICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCWdpdCBjb21taXQgLW0gImhlbGxvIiAmJgorCWdpdCBicmFuY2ggc2tpcC1yZWZlcmVuY2UgJiYKKworCWVjaG8gd29ybGQgPj4gaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJoZWxsbyB3b3JsZCIgJiYKKwllY2hvIGdvb2RieWUgPj4gaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJnb29kYnllIiAmJgorCWdpdCB0YWcgZ29vZGJ5ZSAmJgorCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJldmVydGVkLWdvb2RieWUgJiYKKwlnaXQgdGFnIHJldmVydGVkLWdvb2RieWUgJiYKKworCWdpdCBjaGVja291dCAtZiBza2lwLXJlZmVyZW5jZSAmJgorCWVjaG8gbW9vID4gaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ3ZSBzaG91bGQgc2tpcCB0aGlzIiAmJgorCWVjaG8gbW9vID4gY293ICYmCisJZ2l0IGFkZCBjb3cgJiYKKwlnaXQgY29tbWl0IC1tICJ0aGlzIHNob3VsZCBub3QgYmUgc2tpcHBlZCIgJiYKKwlnaXQgYnJhbmNoIHByZS1yZWJhc2Ugc2tpcC1yZWZlcmVuY2UgJiYKKwlnaXQgYnJhbmNoIHNraXAtbWVyZ2Ugc2tpcC1yZWZlcmVuY2UKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGdpdCBhbSAtMyAoZGVmYXVsdCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1za2lwIGNhbiBub3QgYmUgdXNlZCB3aXRoIG90aGVyIG9wdGlvbnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC12IC0tc2tpcCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1za2lwIC12CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXNraXAgd2l0aCBhbSAtMycgJworCWdpdCByZWJhc2UgLS1za2lwCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgbW92ZXMgYmFjayB0byBza2lwLXJlZmVyZW5jZScgJworCXRlc3QgcmVmcy9oZWFkcy9za2lwLXJlZmVyZW5jZSA9ICQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSAmJgorCWdpdCBicmFuY2ggcG9zdC1yZWJhc2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlciAmJgorCWVjaG8gImhlbGxvIiA+IGhlbGxvICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgcmVmcy9oZWFkcy9za2lwLXJlZmVyZW5jZSA9ICQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSAmJgorCWdpdCByZXNldCAtLWhhcmQgcG9zdC1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc2tpcC1tZXJnZScgJ2dpdCBjaGVja291dCAtZiBza2lwLW1lcmdlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2l0aCAtLW1lcmdlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1za2lwIHdpdGggLS1tZXJnZScgJworCWdpdCByZWJhc2UgLS1za2lwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFuZCByZWZlcmVuY2UgdHJlZXMgZXF1YWwnICcKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLXRyZWUgc2tpcC1tZXJnZSBza2lwLXJlZmVyZW5jZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmVkIGJhY2sgdG8gYnJhbmNoIGNvcnJlY3RseScgJworCXRlc3QgcmVmcy9oZWFkcy9za2lwLW1lcmdlID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpCisnCisKK3Rlc3RfZGVidWcgJ2dpdGsgLS1hbGwgJiBzbGVlcCAxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXh1cCB0aGF0IGVtcHRpZXMgY29tbWl0IGZhaWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZml4dXAgMiIgZ2l0IHJlYmFzZSAtaSBcCisJCQlnb29kYnllXiByZXZlcnRlZC1nb29kYnllCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggdGhhdCBlbXB0aWVzIGNvbW1pdCBmYWlscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIiBnaXQgcmViYXNlIC1pIFwKKwkJCWdvb2RieWVeIHJldmVydGVkLWdvb2RieWUKKwkpCisnCisKKyMgTXVzdCBiZSB0aGUgbGFzdCB0ZXN0IGluIHRoaXMgZmlsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnJEVESVRPUiBhbmQgZnJpZW5kcyBhcmUgdW5jaGFuZ2VkJyAnCisJdGVzdF9lZGl0b3JfdW5jaGFuZ2VkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2ggYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNWNlM2FiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSwxNzQyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSBpbnRlcmFjdGl2ZQorCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlICJpbnRlcmFjdGl2ZWx5IiwgYnkgZmFraW5nIGFuIGVkaXQsIGFuZCB2ZXJpZmllcwordGhhdCB0aGUgcmVzdWx0IHN0aWxsIG1ha2VzIHNlbnNlLgorCitJbml0aWFsIHNldHVwOgorCisgICAgIG9uZSAtIHR3byAtIHRocmVlIC0gZm91ciAoY29uZmxpY3QtYnJhbmNoKQorICAgLworIEEgLSBCIC0gQyAtIEQgLSBFICAgICAgICAgICAgKG1hc3RlcikKKyB8IFwKKyB8ICAgRiAtIEcgLSBIICAgICAgICAgICAgICAgIChicmFuY2gxKQorIHwgICAgIFwKKyB8XCAgICAgIEkgICAgICAgICAgICAgICAgICAgIChicmFuY2gyKQorIHwgXAorIHwgICBKIC0gSyAtIEwgLSBNICAgICAgICAgICAgKG5vLWNvbmZsaWN0LWJyYW5jaCkKKyAgXAorICAgIE4gLSBPIC0gUCAgICAgICAgICAgICAgICAgKG5vLWZmLWJyYW5jaCkKKworIHdoZXJlIEEsIEIsIEQgYW5kIEcgYWxsIHRvdWNoIGZpbGUxLCBhbmQgb25lLCB0d28sIHRocmVlLCBmb3VyIGFsbAorIHRvdWNoIGZpbGUgImNvbmZsaWN0Ii4KKycKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBIGZpbGUxICYmCisJdGVzdF9jb21taXQgQiBmaWxlMSAmJgorCXRlc3RfY29tbWl0IEMgZmlsZTIgJiYKKwl0ZXN0X2NvbW1pdCBEIGZpbGUxICYmCisJdGVzdF9jb21taXQgRSBmaWxlMyAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gxIEEgJiYKKwl0ZXN0X2NvbW1pdCBGIGZpbGU0ICYmCisJdGVzdF9jb21taXQgRyBmaWxlMSAmJgorCXRlc3RfY29tbWl0IEggZmlsZTUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBGICYmCisJdGVzdF9jb21taXQgSSBmaWxlNiAmJgorCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1icmFuY2ggQSAmJgorCXRlc3RfY29tbWl0IG9uZSBjb25mbGljdCAmJgorCXRlc3RfY29tbWl0IHR3byBjb25mbGljdCAmJgorCXRlc3RfY29tbWl0IHRocmVlIGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgZm91ciBjb25mbGljdCAmJgorCWdpdCBjaGVja291dCAtYiBuby1jb25mbGljdC1icmFuY2ggQSAmJgorCXRlc3RfY29tbWl0IEogZmlsZUogJiYKKwl0ZXN0X2NvbW1pdCBLIGZpbGVLICYmCisJdGVzdF9jb21taXQgTCBmaWxlTCAmJgorCXRlc3RfY29tbWl0IE0gZmlsZU0gJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm8tZmYtYnJhbmNoIEEgJiYKKwl0ZXN0X2NvbW1pdCBOIGZpbGVOICYmCisJdGVzdF9jb21taXQgTyBmaWxlTyAmJgorCXRlc3RfY29tbWl0IFAgZmlsZVAKKycKKworIyAiZXhlYyIgY29tbWFuZHMgYXJlIHJ1biB3aXRoIHRoZSB1c2VyIHNoZWxsIGJ5IGRlZmF1bHQsIGJ1dCB0aGlzIG1heQorIyBiZSBub24tUE9TSVguIEZvciBleGFtcGxlLCBpZiBTSEVMTD16c2ggdGhlbiAiPmZpbGUiIGRvZXNuJ3Qgd29yaworIyB0byBjcmVhdGUgYSBmaWxlLiBVbnNldHRpbmcgU0hFTEwgYXZvaWRzIHN1Y2ggbm9uLXBvcnRhYmxlIGJlaGF2aW9yCisjIGluIHRlc3RzLiBJdCBtdXN0IGJlIGV4cG9ydGVkIGZvciBpdCB0byB0YWtlIGVmZmVjdCB3aGVyZSBuZWVkZWQuCitTSEVMTD0KK2V4cG9ydCBTSEVMTAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1rZWVwLWVtcHR5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIGVtcHR5YnJhbmNoIG1hc3RlciAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkiICYmCisJZ2l0IHJlYmFzZSAtLWtlZXAtZW1wdHkgLWkgSEVBRH4yICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDYgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIGVtcHR5IHRvZG8gbGlzdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogbm90aGluZyB0byBkbworCUVPRgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIjIiBcCisJCQlnaXQgcmViYXNlIC1pIEhFQUReID5vdXRwdXQgMj4mMQorCSkgJiYKKwl0YWlsIC1uIDEgb3V0cHV0ID5hY3R1YWwgJiYgICMgSWdub3JlIG91dHB1dCBhYm91dCBjaGFuZ2luZyB0b2RvIGxpc3QKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCB0aGUgZXhlYyBjb21tYW5kJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSgKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSIxIGV4ZWNfPnRvdWNoLW9uZQorCQkyIGV4ZWNfPnRvdWNoLXR3byBleGVjX2ZhbHNlIGV4ZWNfPnRvdWNoLXRocmVlCisJCTMgNCBleGVjXz5cInRvdWNoLWZpbGVfX25hbWVfd2l0aF9zcGFjZXNcIjtfPnRvdWNoLWFmdGVyLXNlbWljb2xvbiA1IiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBBCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRvdWNoLW9uZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRvdWNoLXR3byAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRvdWNoLXRocmVlICIgKHNob3VsZCBoYXZlIHN0b3BwZWQgYmVmb3JlKSIgJiYKKwl0ZXN0X2NtcF9yZXYgQyBIRUFEICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdG91Y2gtdGhyZWUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAidG91Y2gtZmlsZSAgbmFtZSB3aXRoIHNwYWNlcyIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0b3VjaC1hZnRlci1zZW1pY29sb24gJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyIEhFQUQgJiYKKwlybSAtZiB0b3VjaC0qCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIHRoZSBleGVjIGNvbW1hbmQgcnVucyBmcm9tIHRyZWUgcm9vdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlta2RpciBzdWJkaXIgJiYgKGNkIHN1YmRpciAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgZXhlY18+dG91Y2gtc3ViZGlyIiBcCisJCWdpdCByZWJhc2UgLWkgSEVBRF4KKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdG91Y2gtc3ViZGlyICYmCisJcm0gLWZyIHN1YmRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCBleGVjIGFsbG93cyBnaXQgY29tbWFuZHMgaW4gc3ViZGlycycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1YmRpciIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fDoiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCW1rZGlyIHN1YmRpciAmJiAoY2Qgc3ViZGlyICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iMSB4X2NkX3N1YmRpcl8mJl9naXRfcmV2LXBhcnNlXy0taXMtaW5zaWRlLXdvcmstdHJlZSIgXAorCQlnaXQgcmViYXNlIC1pIEhFQUReCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgc2V0cyB3b3JrIHRyZWUgcHJvcGVybHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdWJkaXIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCW1rZGlyIHN1YmRpciAmJgorCWdpdCByZWJhc2UgLXggIihjZCBzdWJkaXIgJiYgZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpIiBIRUFEXiBcCisJCT5hY3R1YWwgJiYKKwkhIGdyZXAgIi9zdWJkaXIkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggdGhlIGV4ZWMgY29tbWFuZCBjaGVja3MgdHJlZSBjbGVhbm5lc3MnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9ImV4ZWNfZWNob19mb29fPmZpbGUxIDEiIFwKKwkJCWdpdCByZWJhc2UgLWkgSEVBRF4KKwkpICYmCisJdGVzdF9jbXBfcmV2IG1hc3Rlcl4gSEVBRCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC14IHdpdGggZW1wdHkgY29tbWFuZCBmYWlscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8OiIgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgZ2l0IHJlYmFzZSAteCAiIiBAIDI+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyAiZXJyb3I6IGVtcHR5IGV4ZWMgY29tbWFuZCIgPmV4cGVjdGVkICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBnaXQgcmViYXNlIC14ICIgIiBAIDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLXggd2l0aCBuZXdsaW5lIGluIGNvbW1hbmQgZmFpbHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fDoiICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IGdpdCByZWJhc2UgLXggImEke0xGfWIiIEAgMj5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICJlcnJvcjogZXhlYyBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBuZXdsaW5lcyIgXAorCQkJID5leHBlY3RlZCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggZXhlYyBvZiBpbmV4aXN0ZW50IGNvbW1hbmQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9ImV4ZWNfdGhpcy1jb21tYW5kLWRvZXMtbm90LWV4aXN0IDEiIFwKKwkJCWdpdCByZWJhc2UgLWkgSEVBRF4gPmFjdHVhbCAyPiYxCisJKSAmJgorCSEgZ3JlcCAiTWF5YmUgZ2l0LXJlYmFzZSBpcyBicm9rZW4iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBsaWNpdCBpbnRlcmFjdGl2ZSByZWJhc2UgZG9lcyBub3QgaW52b2tlIHNlcXVlbmNlIGVkaXRvcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8OiIgJiYKKwlHSVRfU0VRVUVOQ0VfRURJVE9SPSJlY2hvIGJhZCA+IiBnaXQgcmViYXNlIC14ImVjaG8gb25lIiBAXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGFyZSBhIG5vcCcgJworCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZ2l0IHJlYmFzZSAtaSBGICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDIiICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGUgW2JyYW5jaF0gb3B0aW9uJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRlYWQtZW5kICYmCisJZ2l0IHJtIGZpbGU2ICYmCisJZ2l0IGNvbW1pdCAtbSAic3RvcCBoZXJlIiAmJgorCWdpdCByZWJhc2UgLWkgRiBicmFuY2gyICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDIiICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBJKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tb250byA8YnJhbmNoPicgJworCWdpdCBjaGVja291dCAtYiB0ZXN0LW9udG8gYnJhbmNoMiAmJgorCWdpdCByZWJhc2UgLWkgLS1vbnRvIGJyYW5jaDEgRiAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy90ZXN0LW9udG8iICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIHRvcCBvZiBhIG5vbi1jb25mbGljdGluZyBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCB0YWcgb3JpZ2luYWwtYnJhbmNoMSAmJgorCWdpdCByZWJhc2UgLWkgYnJhbmNoMiAmJgorCXRlc3QgZmlsZTYgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5IG9yaWdpbmFsLWJyYW5jaDEpICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDEiICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBJKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBmb3IgdGhlIGJyYW5jaCBzaG93cyBzdGF0ZSBiZWZvcmUgcmViYXNlJyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMUB7MX0pID0gJChnaXQgcmV2LXBhcnNlIG9yaWdpbmFsLWJyYW5jaDEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBmb3IgdGhlIGJyYW5jaCBzaG93cyBjb3JyZWN0IGZpbmlzaCBtZXNzYWdlJyAnCisJcHJpbnRmICJyZWJhc2UgKGZpbmlzaCk6IHJlZnMvaGVhZHMvYnJhbmNoMSBvbnRvICVzXG4iIFwKKwkJIiQoZ2l0IHJldi1wYXJzZSBicmFuY2gyKSIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAtZyAtLXByZXR0eT0lZ3MgLTEgcmVmcy9oZWFkcy9icmFuY2gxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjaGFuZ2UgdHdvIGNvbW1pdHMnICcKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJKSAmJgorCXRlc3QgSCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgRyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJYmxvYjE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF46ZmlsZTEpICYmCisJYmxvYjI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDpmaWxlMSkgJiYKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcCBvbiBjb25mbGljdGluZyBwaWNrJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKKwlpbmRleCAkYmxvYjEuLiRibG9iMiAxMDA2NDQKKwktLS0gYS9maWxlMQorCSsrKyBiL2ZpbGUxCisJQEAgLTEgKzEgQEAKKwktQQorCStHCisJRU9GCisJY2F0ID5leHBlY3QyIDw8LUVPRiAmJgorCTw8PDw8PDwgSEVBRAorCUQKKwk9PT09PT09CisJRworCT4+Pj4+Pj4gJGNvbW1pdC4uLiBHCisJRU9GCisJZ2l0IHRhZyBuZXctYnJhbmNoMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgbWFzdGVyICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MykiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L3JlYmFzZS1tZXJnZS9wYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdDIgZmlsZTEgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgfAorCQlzZWQgLW4gLWUgIi9eVS9zL15VW15hLXpdKi8vcCIpIiA9IGZpbGUxICYmCisJdGVzdCA0ID0gJChncmVwIC12ICJeIyIgPCAuZ2l0L3JlYmFzZS1tZXJnZS9kb25lIHwgd2MgLWwpICYmCisJdGVzdCAwID0gJChncmVwIC1jICJeW14jXSIgPCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgY29uZmxpY3RlZCBwYXRjaCcgJworCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgLS1zaG93LWN1cnJlbnQtcGF0Y2ggPi9kZXYvbnVsbCAyPnN0ZGVyciAmJgorCWdyZXAgInNob3cuKlJFQkFTRV9IRUFEIiBzdGRlcnIgJiYKKwkjIHRoZSBvcmlnaW5hbCBzdG9wcGVkLXNoYTEgaXMgYWJicmV2aWF0ZWQKKwlzdG9wcGVkX3NoYTE9IiQoZ2l0IHJldi1wYXJzZSAkKGNhdCAiLmdpdC9yZWJhc2UtbWVyZ2Uvc3RvcHBlZC1zaGEiKSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIFJFQkFTRV9IRUFEKSIgPSAiJHN0b3BwZWRfc2hhMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQnICcKKwlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBuZXctYnJhbmNoMSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkiID0gInJlZnMvaGVhZHMvYnJhbmNoMSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydCB3aXRoIGVycm9yIHdoZW4gbmV3IGJhc2UgY2Fubm90IGJlIGNoZWNrZWQgb3V0JyAnCisJZ2l0IHJtIC0tY2FjaGVkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUgaW4gYmFzZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIG1hc3RlciA+IG91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OiIgXAorCQlvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJmaWxlMSIgb3V0cHV0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtbWVyZ2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldGFpbiBhdXRob3JzaGlwJyAnCisJZWNobyBBID4gZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPSJUd2VycCBTbm9nIiBnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQgYXV0aG9yIiAmJgorCWdpdCB0YWcgdHdlcnAgJiYKKwlnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIgSEVBRF4gJiYKKwlnaXQgc2hvdyBIRUFEIHwgZ3JlcCAiXkF1dGhvcjogVHdlcnAgU25vZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV0YWluIGF1dGhvcnNoaXAgdy8gY29uZmxpY3RzJyAnCisJb0dJVF9BVVRIT1JfTkFNRT0kR0lUX0FVVEhPUl9OQU1FICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJHSVRfQVVUSE9SX05BTUU9XCRvR0lUX0FVVEhPUl9OQU1FIiAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCB0d2VycCAmJgorCXRlc3RfY29tbWl0IGEgY29uZmxpY3QgYSBjb25mbGljdC1hICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0d2VycCAmJgorCisJR0lUX0FVVEhPUl9OQU1FPUF0dHJpYnV0ZU1lICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSAmJgorCXRlc3RfY29tbWl0IGIgY29uZmxpY3QgYiBjb25mbGljdC1iICYmCisJR0lUX0FVVEhPUl9OQU1FPSRvR0lUX0FVVEhPUl9OQU1FICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIGNvbmZsaWN0LWEgJiYKKwllY2hvIHJlc29sdmVkID5jb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBjb25mbGljdC1hXjApID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWdpdCBzaG93ID5vdXQgJiYKKwlncmVwIEF0dHJpYnV0ZU1lIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHR3ZXJwICYmCisJZWNobyBCID4gZmlsZTcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9Ik5pdGZvbCIgZ2l0IGNvbW1pdCAtbSAibml0Zm9sIiBmaWxlNyAmJgorCWVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyIEhFQUR+MgorCSkgJiYKKwl0ZXN0IEIgPSAkKGNhdCBmaWxlNykgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXRhaW4gYXV0aG9yc2hpcCB3aGVuIHNxdWFzaGluZycgJworCWdpdCBzaG93IEhFQUQgfCBncmVwICJeQXV0aG9yOiBUd2VycCBTbm9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICctcCBoYW5kbGVzICJubyBjaGFuZ2VzIiBncmFjZWZ1bGx5JyAnCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmViYXNlIC1pIC1wIEhFQUReICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFJFQkFTRV9QICdleGNoYW5nZSB0d28gY29tbWl0cyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IEggJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4yCisJKSAmJgorCXRlc3QgSCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgRyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgJ3ByZXNlcnZlIG1lcmdlcyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRvLWJlLXByZXNlcnZlZCBtYXN0ZXJeICYmCisJOiA+IHVucmVsYXRlZC1maWxlICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQtZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInVucmVsYXRlZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlci1icmFuY2ggbWFzdGVyICYmCisJZWNobyBCID4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEogZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgdG8tYmUtcHJlc2VydmVkICYmCisJZWNobyBDID4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEsgZmlsZTEgJiYKKwllY2hvIEQgPiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gTDEgZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwllY2hvIDEgPiB1bnJlbGF0ZWQtZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gTDIgdW5yZWxhdGVkLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYW5vdGhlci1icmFuY2ggJiYKKwllY2hvIEUgPiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gTSBmaWxlMSAmJgorCWdpdCBjaGVja291dCAtYiB0by1iZS1yZWJhc2VkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaSAtcCAtLW9udG8gYnJhbmNoMSBtYXN0ZXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS0gJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjYpID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRH40XjIpID0gJChnaXQgcmV2LXBhcnNlIHRvLWJlLXByZXNlcnZlZCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXl4yXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF5eXikgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgSEVBRH41OmZpbGUxKSA9IEIgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgSEVBRH4zOmZpbGUxKSA9IEMgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgSEVBRDpmaWxlMSkgPSBFICYmCisJdGVzdCAkKGdpdCBzaG93IEhFQUQ6dW5yZWxhdGVkLWZpbGUpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICdlZGl0IGFuY2VzdG9yIHdpdGggLXAnICcKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgZWRpdCAzIDQiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4zCisJKSAmJgorCWVjaG8gMiA+IHVucmVsYXRlZC1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBMMi1tb2RpZmllZCAtLWFtZW5kIHVucmVsYXRlZC1maWxlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJdGVzdCAkKGdpdCBzaG93IEhFQUQ6dW5yZWxhdGVkLWZpbGUpID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHRyaWVzIHRvIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1vbnRvIG5ldy1icmFuY2gxIEhFQUReICYmCisJCWVjaG8gcmVzb2x2ZWQgPiBmaWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSBuZXctYnJhbmNoMSkgJiYKKwlnaXQgc2hvdyBIRUFEIHwgZ3JlcCBjaG91ZXR0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIGZsYWcgaXMgaGVlZGVkLCBldmVuIGFmdGVyIC0tY29udGludWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlckB7MX0gJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC12IC1pIC0tb250byBuZXctYnJhbmNoMSBIRUFEXiAmJgorCWVjaG8gcmVzb2x2ZWQgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgPiBvdXRwdXQgJiYKKwlncmVwICJeIGZpbGUxIHwgMiArLSQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnbXVsdGktc3F1YXNoIG9ubHkgZmlyZXMgdXAgZWRpdG9yIG9uY2UnICcKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIFwKKwkJCUZBS0VfTElORVM9IjEgc3F1YXNoIDIgc3F1YXNoIDMgc3F1YXNoIDQiIFwKKwkJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyB8IGdyZXAgT05DRSB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnbXVsdGktZml4dXAgZG9lcyBub3QgZmlyZSB1cCBlZGl0b3InICcKKwlnaXQgY2hlY2tvdXQgLWIgbXVsdGktZml4dXAgRSAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iTkVWRVIiIFwKKwkJCUZBS0VfTElORVM9IjEgZml4dXAgMiBmaXh1cCAzIGZpeHVwIDQiIFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDAgPSAkKGdpdCBzaG93IHwgZ3JlcCBORVZFUiB8IHdjIC1sKSAmJgorCWdpdCBjaGVja291dCBAey0xfSAmJgorCWdpdCBicmFuY2ggLUQgbXVsdGktZml4dXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgdXNlZCBhZnRlciBjb25mbGljdCcgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1maXh1cCBjb25mbGljdC1icmFuY2ggJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZml4dXAgMyBmaXh1cCA0IiBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgorCQlnaXQgYWRkIGNvbmZsaWN0ICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyB8IGdyZXAgT05DRSB8IHdjIC1sKSAmJgorCWdpdCBjaGVja291dCBAey0xfSAmJgorCWdpdCBicmFuY2ggLUQgY29uZmxpY3QtZml4dXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgcmV0YWluZWQgYWZ0ZXIgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3Qtc3F1YXNoIGNvbmZsaWN0LWJyYW5jaCAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBmaXh1cCAzIHNxdWFzaCA0IiBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgorCQlnaXQgYWRkIGNvbmZsaWN0ICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJUV0lDRSIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMiA9ICQoZ2l0IHNob3cgfCBncmVwIFRXSUNFIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJZ2l0IGJyYW5jaCAtRCBjb25mbGljdC1zcXVhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3NxdWFzaCBhbmQgZml4dXAgZ2VuZXJhdGUgY29ycmVjdCBsb2cgbWVzc2FnZXMnICcKKwljYXQgPmV4cGVjdC1zcXVhc2gtZml4dXAgPDwtXEVPRiAmJgorCUIKKworCUQKKworCU9OQ0UKKwlFT0YKKwlnaXQgY2hlY2tvdXQgLWIgc3F1YXNoLWZpeHVwIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIFwKKwkJCUZBS0VfTElORVM9IjEgZml4dXAgMiBzcXVhc2ggMyBmaXh1cCA0IiBcCisJCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgMSwvXlwkL2QgPiBhY3R1YWwtc3F1YXNoLWZpeHVwICYmCisJdGVzdF9jbXAgZXhwZWN0LXNxdWFzaC1maXh1cCBhY3R1YWwtc3F1YXNoLWZpeHVwICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEQHsyfSB8CisJCWdyZXAgIl4jIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAzIGNvbW1pdHNcLiIgICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEQHszfSB8CisJCWdyZXAgIl4jIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHNcLiIgICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJZ2l0IGJyYW5jaCAtRCBzcXVhc2gtZml4dXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3NxdWFzaCBpZ25vcmVzIGNvbW1lbnRzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNraXAtY29tbWVudHMgRSAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgXAorCQkJRkFLRV9MSU5FUz0iIyAxICMgc3F1YXNoIDIgIyBzcXVhc2ggMyAjIHNxdWFzaCA0ICMiIFwKKwkJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyB8IGdyZXAgT05DRSB8IHdjIC1sKSAmJgorCWdpdCBjaGVja291dCBAey0xfSAmJgorCWdpdCBicmFuY2ggLUQgc2tpcC1jb21tZW50cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnc3F1YXNoIGlnbm9yZXMgYmxhbmsgbGluZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2tpcC1ibGFuay1saW5lcyBFICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBcCisJCQlGQUtFX0xJTkVTPSI+IDEgPiBzcXVhc2ggMiA+IHNxdWFzaCAzID4gc3F1YXNoIDQgPiIgXAorCQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJZ2l0IGJyYW5jaCAtRCBza2lwLWJsYW5rLWxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCB3b3JrcyBhcyBleHBlY3RlZCcgJworCWdpdCBjaGVja291dCAtYiBzcXVhc2gtd29ya3Mgbm8tY29uZmxpY3QtYnJhbmNoICYmCisJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBzIDMgMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIGdpdCByZWJhc2UgLWkgSEVBRH4zCisJKSAmJgorCXRlc3QgJG9uZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVycnVwdGVkIHNxdWFzaCB3b3JrcyBhcyBleHBlY3RlZCcgJworCWdpdCBjaGVja291dCAtYiBpbnRlcnJ1cHRlZC1zcXVhc2ggY29uZmxpY3QtYnJhbmNoICYmCisJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgc3F1YXNoIDMgMiIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEfjMKKwkpICYmCisJdGVzdF93cml0ZV9saW5lcyBvbmUgdHdvIGZvdXIgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlc29sdmVkID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkb25lID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkIChjYXNlIDIpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGludGVycnVwdGVkLXNxdWFzaDIgY29uZmxpY3QtYnJhbmNoICYmCisJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjMgc3F1YXNoIDEgMiIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEfjMKKwkpICYmCisJdGVzdF93cml0ZV9saW5lcyBvbmUgZm91ciA+IGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgb25lIHR3byBmb3VyID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZXNvbHZlZCA+IGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJG9uZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgdHJpZXMgdG8gY29tbWl0LCBldmVuIGZvciAiZWRpdCInICcKKwllY2hvIHVucmVsYXRlZCA+IGZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInVucmVsYXRlZCBjaGFuZ2UiICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwkJZWNobyBlZGl0ZWQgPiBmaWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgZWRpdGVkID0gJChnaXQgc2hvdyBIRUFEOmZpbGU3KSAmJgorCWdpdCBzaG93IEhFQUQgfCBncmVwIGNob3VldHRlICYmCisJdGVzdCAkcGFyZW50ID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydGVkIC0tY29udGludWUgZG9lcyBub3Qgc3F1YXNoIGNvbW1pdHMgYWZ0ZXIgImVkaXQiJyAnCisJb2xkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCQllY2hvICJlZGl0ZWQgYWdhaW4iID4gZmlsZTcgJiYKKwkJZ2l0IGFkZCBmaWxlNyAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iICIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgJG9sZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZWJhc2UgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvLWFtZW5kIG9ubHkgZWRpdGVkIGNvbW1pdHMgYWZ0ZXIgImVkaXQiJyAnCisJdGVzdF90aWNrICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImVkaXRlZCBmaWxlNyBhZ2FpbiIgZ2l0IGNvbW1pdCAmJgorCQllY2hvICJhbmQgYWdhaW4iID4gZmlsZTcgJiYKKwkJZ2l0IGFkZCBmaWxlNyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfQ09NTUlUX01FU1NBR0U9ImFuZCBhZ2FpbiIgXAorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCWdpdCByZWJhc2UgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiBlcnJvciBhZnRlciBmYWlsZWQgImV4ZWMiJyAnCisJdGVzdF90aWNrICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHwgOiIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBleGVjX2ZhbHNlIiBnaXQgcmViYXNlIC1pIEhFQUReCisJKSAmJgorCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYSBkZXRhY2hlZCBIRUFEJyAnCisJZ3JhbmRwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKKwlnaXQgY2hlY2tvdXQgJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF90aWNrICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MgorCSkgJiYKKwl0ZXN0ICRncmFuZHBhcmVudCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhIGNvbW1pdCB2aW9sYXRpbmcgcHJlLWNvbW1pdCcgJworCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3ByZS1jb21taXQgPDwtXEVPRiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1jaGVjaykiCisJRU9GCisJZWNobyAibW9uZGUhICIgPj4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGRvZXNudC12ZXJpZnkgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGRvZXNudC12ZXJpZnkgLS1uby12ZXJpZnkgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPTIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGEgZmlsZSBuYW1lZCBIRUFEIGluIHdvcmt0cmVlJyAnCisKKwlybSAtZnIgLmdpdC9ob29rcyAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMyBBICYmCisKKwkoCisJCUdJVF9BVVRIT1JfTkFNRT0iU3F1YXNoZWQgQXdheSIgJiYKKwkJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSAmJgorCQk+SEVBRCAmJgorCQlnaXQgYWRkIEhFQUQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGhlYWQiICYmCisJCT5CT0RZICYmCisJCWdpdCBhZGQgQk9EWSAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgYm9keSIKKwkpICYmCisKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIiBnaXQgcmViYXNlIC1pIEB7LTF9CisJKSAmJgorCXRlc3QgIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVhbikiID0gIlNxdWFzaGVkIEF3YXkiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gIm5vb3AiIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBjaGVycnktcGljaycgJworCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDQgSEVBRCAmJgorCUdJVF9FRElUT1I9OiBnaXQgY29tbWl0IC0tYW1lbmQgXAorCQktLWF1dGhvcj0iU29tZWJvZHkgZWxzZSA8c29tZWJvZHlAZWxzZS5jb20+IiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIGJyYW5jaDMpICE9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2g0KSAmJgorCWdpdCByZWJhc2UgLWkgYnJhbmNoMyAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIGJyYW5jaDMpID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDQpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHJlYmFzZSBzZXR1cCcgJworCWdpdCBjaGVja291dCBBICYmCisJbWtkaXIgc3ViICYmCisJKAorCQljZCBzdWIgJiYgZ2l0IGluaXQgJiYgPmVsaWYgJiYKKwkJZ2l0IGFkZCBlbGlmICYmIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSBpbml0aWFsIgorCSkgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJPbmUiICYmCisJZWNobyAyID5maWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlR3byIgJiYKKwkoCisJCWNkIHN1YiAmJiBlY2hvIDMgPmVsaWYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAic3VibW9kdWxlIHNlY29uZCIKKwkpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiVGhyZWUgY2hhbmdlcyBzdWJtb2R1bGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSByZWJhc2UgLWknICcKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIDMiIGdpdCByZWJhc2UgLWkgQQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbmZsaWN0IHNldHVwJyAnCisJZ2l0IHRhZyBzdWJtb2R1bGUtYmFzZSAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCSgKKwkJY2Qgc3ViICYmIGdpdCBjaGVja291dCBIRUFEXiAmJiBlY2hvIDQgPmVsaWYgJiYKKwkJZ2l0IGFkZCBlbGlmICYmIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSBjb25mbGljdCIKKwkpICYmCisJZ2l0IGFkZCBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJDb25mbGljdCBpbiBzdWJtb2R1bGUiICYmCisJZ2l0IHRhZyBzdWJtb2R1bGUtdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbnRpbnVlIHdpdGggb25seSBzdWJtb2R1bGUgc3RhZ2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBzdWJtb2R1bGUtYmFzZSAmJgorCWdpdCBhZGQgc3ViICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2Ugc3VibW9kdWxlLWJhc2UpICE9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29udGludWUgd2l0aCB1bnN0YWdlZCBzdWJtb2R1bGUnICcKKwlnaXQgY2hlY2tvdXQgc3VibW9kdWxlLXRvcGljICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgc3VibW9kdWxlLWJhc2UgJiYKKwlnaXQgcmVzZXQgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBzdWJtb2R1bGUtYmFzZSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgdW5uZWNlc3NhcnkgcmVzZXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0xMjM0NTY3ODkgZmlsZTMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgJiYKKwl0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJTVRJTUU9JCh0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBmaWxlMykgJiYKKwl0ZXN0IDEyMzQ1Njc4OSA9ICRNVElNRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdvcmQnICcKKwlnaXQgY2hlY2tvdXQgLWIgcmV3b3JkLWJyYW5jaCBtYXN0ZXIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyByZXdvcmQgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iRSBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIEEgJiYKKwkJZ2l0IHNob3cgSEVBRCB8IGdyZXAgIkUgY2hhbmdlZCIgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJCUZBS0VfTElORVM9IjEgMiByZXdvcmQgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJEIGNoYW5nZWQiIFwKKwkJCWdpdCByZWJhc2UgLWkgQSAmJgorCQlnaXQgc2hvdyBIRUFEXiB8IGdyZXAgIkQgY2hhbmdlZCIgJiYKKwkJRkFLRV9MSU5FUz0icmV3b3JkIDEgMiAzIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkIgY2hhbmdlZCIgXAorCQkJZ2l0IHJlYmFzZSAtaSBBICYmCisJCWdpdCBzaG93IEhFQUR+MyB8IGdyZXAgIkIgY2hhbmdlZCIgJiYKKwkJRkFLRV9MSU5FUz0iMSByIDIgcGljayAzIHAgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQyBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIEEKKwkpICYmCisJZ2l0IHNob3cgSEVBRH4yIHwgZ3JlcCAiQyBjaGFuZ2VkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY2FuIGNvcHkgbm90ZXMnICcKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGUucmViYXNlIHRydWUgJiYKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwl0ZXN0X2NvbW1pdCBuMSAmJgorCXRlc3RfY29tbWl0IG4yICYmCisJdGVzdF9jb21taXQgbjMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tImEgbm90ZSIgbjMgJiYKKwlnaXQgcmViYXNlIC1pIC0tb250byBuMSBuMiAmJgorCXRlc3QgImEgbm90ZSIgPSAiJChnaXQgbm90ZXMgc2hvdyBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNhbiBjb3B5IG5vdGVzIG92ZXIgYSBmaXh1cCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlhbiBlYXJsaWVyIG5vdGUKKworCWEgbm90ZQorCUVPRgorCWdpdCByZXNldCAtLWhhcmQgbjMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tImFuIGVhcmxpZXIgbm90ZSIgbjIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlHSVRfTk9URVNfUkVXUklURV9NT0RFPWNvbmNhdGVuYXRlIEZBS0VfTElORVM9IjEgZiAyIiBcCisJCQlnaXQgcmViYXNlIC1pIG4xCisJKSAmJgorCWdpdCBub3RlcyBzaG93ID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2hpbGUgZGV0YWNoaW5nIEhFQUQnICcKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgJiYKKwlncmFuZHBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgSEVBRF4wCisJKSAmJgorCXRlc3QgJGdyYW5kcGFyZW50ID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQKKycKKwordGVzdF90aWNrICMgRW5zdXJlIHRoYXQgdGhlIHJlYmFzZWQgY29tbWl0cyBnZXQgYSBkaWZmZXJlbnQgdGltZXN0YW1wLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx3YXlzIGNoZXJyeS1waWNrIHdpdGggLS1uby1mZicgJworCWdpdCBjaGVja291dCBuby1mZi1icmFuY2ggJiYKKwlnaXQgdGFnIG9yaWdpbmFsLW5vLWZmLWJyYW5jaCAmJgorCWdpdCByZWJhc2UgLWkgLS1uby1mZiBBICYmCisJZm9yIHAgaW4gMCAxIDIKKwlkbworCQl0ZXN0ICEgJChnaXQgcmV2LXBhcnNlIEhFQUR+JHApID0gJChnaXQgcmV2LXBhcnNlIG9yaWdpbmFsLW5vLWZmLWJyYW5jaH4kcCkgJiYKKwkJZ2l0IGRpZmYgSEVBRH4kcCBvcmlnaW5hbC1uby1mZi1icmFuY2h+JHAgPiBvdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCWRvbmUgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpID0gJChnaXQgcmV2LXBhcnNlIG9yaWdpbmFsLW5vLWZmLWJyYW5jaH4zKSAmJgorCWdpdCBkaWZmIEhFQUR+MyBvcmlnaW5hbC1uby1mZi1icmFuY2h+MyA+IG91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGNvbW1pdHMgd2l0aCBmdW5ueSBtZXNzYWdlcycgJworCWdpdCBjaGVja291dCAtYiBmdW5ueSBBICYmCisJZWNobyA+PmZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZW5kIHdpdGggc2xhc2hcXCIgJiYKKwllY2hvID4+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzb21ldGhpbmcgKFwwMDApIHRoYXQgbG9va3MgbGlrZSBvY3RhbCIgJiYKKwllY2hvID4+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzb21ldGhpbmcgKFxuKSB0aGF0IGxvb2tzIGxpa2UgYSBuZXdsaW5lIiAmJgorCWVjaG8gPj5maWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gImFub3RoZXIgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UtaSBoaXN0b3J5IHdpdGggZnVubnkgbWVzc2FnZXMnICcKKwlnaXQgcmV2LWxpc3QgQS4uZnVubnkgPmV4cGVjdCAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLWkgQQorCSkgJiYKKwlnaXQgcmV2LWxpc3QgQS4uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIHJlYmFzZSAtaSAtLWV4ZWMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGV4ZWN1dGUgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfZXhlYyBtYWluLnR4dCBvbmVfZXhlYyAmJgorCXRlc3RfY29tbWl0IHR3b19leGVjIG1haW4udHh0IHR3b19leGVjICYmCisJdGVzdF9jb21taXQgdGhyZWVfZXhlYyBtYWluLnR4dCB0aHJlZV9leGVjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bm5pbmcgImdpdCByZWJhc2UgLWkgLS1leGVjIGdpdCBzaG93IEhFQUQiJyAnCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIEhFQUR+MiA+YWN0dWFsICYmCisJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CisJKSAmJgorCXNlZCAtZSAiMSw5ZCIgZXhwZWN0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5uaW5nICJnaXQgcmViYXNlIC0tZXhlYyBnaXQgc2hvdyBIRUFEIC1pIicgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCWdpdCByZWJhc2UgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtaSBIRUFEfjIgPmFjdHVhbCAmJgorCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdAorCSkgJiYKKwlzZWQgLWUgIjEsOWQiIGV4cGVjdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyAiZ2l0IHJlYmFzZSAtaXggZ2l0IHNob3cgSEVBRCInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC1peCAiZ2l0IHNob3cgSEVBRCIgSEVBRH4yID5hY3R1YWwgJiYKKwkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgMiBleGVjX2dpdF9zaG93X0hFQUQiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKKwkpICYmCisJc2VkIC1lICIxLDlkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1peCB3aXRoIHNldmVyYWwgPENNRD4nICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC1peCAiZ2l0IHNob3cgSEVBRDsgcHdkIiBIRUFEfjIgPmFjdHVhbCAmJgorCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRDtfcHdkIDIgZXhlY19naXRfc2hvd19IRUFEO19wd2QiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKKwkpICYmCisJc2VkIC1lICIxLDlkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaXggd2l0aCBzZXZlcmFsIGluc3RhbmNlcyBvZiAtLWV4ZWMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLS1leGVjICJwd2QiIEhFQUR+MiA+YWN0dWFsICYmCisJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIGV4ZWNfcHdkIDIKKwkJCQlleGVjX2dpdF9zaG93X0hFQUQgZXhlY19wd2QiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKKwkpICYmCisJc2VkIC1lICIxLDExZCIgZXhwZWN0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAncmViYXNlIC1peCB3aXRoIC0tYXV0b3NxdWFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCWdpdCBjaGVja291dCAtYiBhdXRvc3F1YXNoICYmCisJZWNobyBzZWNvbmQgPnNlY29uZC50eHQgJiYKKwlnaXQgYWRkIHNlY29uZC50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJmaXh1cCEgdHdvX2V4ZWMiICYmCisJZWNobyBiaXMgPmJpcy50eHQgJiYKKwlnaXQgYWRkIGJpcy50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJmaXh1cCEgdHdvX2V4ZWMiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGF1dG9zcXVhc2hfYWN0dWFsICYmCisJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC0tYXV0b3NxdWFzaCBIRUFEfjQgPmFjdHVhbCAmJgorCWdpdCBjaGVja291dCBhdXRvc3F1YXNoICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGF1dG9zcXVhc2hfZXhwZWN0ZWQgJiYKKwkJRkFLRV9MSU5FUz0iMSBmaXh1cCAzIGZpeHVwIDQgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+NCA+ZXhwZWN0CisJKSAmJgorCXNlZCAtZSAiMSwxM2QiIGV4cGVjdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tZXhlYyB3b3JrcyB3aXRob3V0IC1pICcgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCXJtIC1yZiBleGVjX291dHB1dCAmJgorCUVESVRPUj0iZWNobyA+aW52b2tlZF9lZGl0b3IiIGdpdCByZWJhc2UgLS1leGVjICJlY2hvIGEgbGluZSA+PmV4ZWNfb3V0cHV0IiAgSEVBRH4yIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAgIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIiBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGV4ZWNfb3V0cHV0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgaW52b2tlZF9lZGl0b3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tZXhlYyB3aXRob3V0IDxDTUQ+JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZXF1aXJlcyBhIHZhbHVlIiBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmUtb3JkZXIgYW5kIGRyb3AgY29tbWl0cycgJworCWdpdCBjaGVja291dCBFICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMyAxIDIgNSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCisJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBDID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReXl4gfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IDAgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eXiB8IGdyZXAgLWMgXnBhcmVudFwgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJldGFpbiByb290IGNvbW1pdCBhdXRob3IgYW5kIG1lc3NhZ2UnICcKKwlnaXQgY2hlY2tvdXQgQSAmJgorCWVjaG8gQiA+ZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJR0lUX0FVVEhPUl9OQU1FPSJUd2VycCBTbm9nIiBnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQgYXV0aG9yIiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgLXEgIl5hdXRob3IgVHdlcnAgU25vZyIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIC1xICJeZGlmZmVyZW50IGF1dGhvciQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgdGVtcG9yYXJ5IHNlbnRpbmVsIGNvbW1pdCcgJworCWdpdCBjaGVja291dCBCICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIl50cmVlICRFTVBUWV9UUkVFIiAmJgorCWdpdCByZWJhc2UgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IGZpeHVwIHJvb3QgY29tbWl0JyAnCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIGZpeHVwIDIiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgorCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBCID0gJChnaXQgc2hvdyBIRUFEOmZpbGUxKSAmJgorCXRlc3QgMCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtYyBecGFyZW50XCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmV3b3JkIG9yaWdpbmFsIHJvb3QgY29tbWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCWdpdCBjaGVja291dCAtYiByZXdvcmQtb3JpZ2luYWwtcm9vdC1icmFuY2ggbWFzdGVyICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0icmV3b3JkIDEgMiIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQSBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKKwlnaXQgc2hvdyBIRUFEXiB8IGdyZXAgIkEgY2hhbmdlZCIgJiYKKwl0ZXN0IC16ICIkKGdpdCBzaG93IC1zIC0tZm9ybWF0PSVwIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCByZXdvcmQgbmV3IHJvb3QgY29tbWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCWdpdCBjaGVja291dCAtYiByZXdvcmQtbm93LXJvb3QtYnJhbmNoIG1hc3RlciAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9InJld29yZCAzIDEiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkMgY2hhbmdlZCIgXAorCQlnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKKwlnaXQgc2hvdyBIRUFEXiB8IGdyZXAgIkMgY2hhbmdlZCIgJiYKKwl0ZXN0IC16ICIkKGdpdCBzaG93IC1zIC0tZm9ybWF0PSVwIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCB3aGVuIHJvb3QgaGFzIHVudHJhY2tlZCBmaWxlIGNvbmZsaWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZXNldF9yZWJhc2UiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZhaWxpbmctcm9vdC1waWNrIEEgJiYKKwllY2hvIHggPmZpbGUyICYmCisJZ2l0IHJtIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUgMSBhZGQgZmlsZSAyIiAmJgorCWVjaG8geiA+ZmlsZTEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKKwlybSBmaWxlMSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQikiID0gInJlbW92ZSBmaWxlIDEgYWRkIGZpbGUgMiIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQpIiA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCByZXdvcmQgcm9vdCB3aGVuIHJvb3QgaGFzIHVudHJhY2tlZCBmaWxlIGNvbmZsaWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZXNldF9yZWJhc2UiICYmCisJZWNobyB6PmZpbGUxICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9InJld29yZCAxIDIiIFwKKwkJCUZBS0VfQ09NTUlUX01FU1NBR0U9Ik1vZGlmaWVkIEEiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJCXJtIGZpbGUxICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9IlJld29yZGVkIEEiIGdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9JUIgSEVBRF4pIiA9ICJSZXdvcmRlZCBBIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCkiID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAncmViYXNlIC0tZWRpdC10b2RvIGRvZXMgbm90IHdvcmsgb24gbm9uLWludGVyYWN0aXZlIHJlYmFzZScgJworCWdpdCBjaGVja291dCByZXdvcmQtb3JpZ2luYWwtcm9vdC1icmFuY2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0LWJyYW5jaCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWYgLS1hcHBseSAtLW9udG8gSEVBRH4yIEhFQUR+ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8KKwkpICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWVkaXQtdG9kbyBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdG9kbycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbm8tY29uZmxpY3QtYnJhbmNoXjAgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgMiAzIiBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgTSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgTCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBwcm9kdWNlcyByZWFkYWJsZSByZWZsb2cnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGJyYW5jaCAtZiBicmFuY2gtcmVmbG9nLXRlc3QgSCAmJgorCWdpdCByZWJhc2UgLWkgLS1vbnRvIEkgRiBicmFuY2gtcmVmbG9nLXRlc3QgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmViYXNlIChmaW5pc2gpOiByZXR1cm5pbmcgdG8gcmVmcy9oZWFkcy9icmFuY2gtcmVmbG9nLXRlc3QKKwlyZWJhc2UgKHBpY2spOiBICisJcmViYXNlIChwaWNrKTogRworCXJlYmFzZSAoc3RhcnQpOiBjaGVja291dCBJCisJRU9GCisJZ2l0IHJlZmxvZyAtbjQgSEVBRCB8CisJc2VkICJzL1teOl0qOiAvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHJlc3BlY3RzIGNvcmUuY29tbWVudGNoYXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEVeMCAmJgorCXRlc3RfY29uZmlnIGNvcmUuY29tbWVudGNoYXIgIlxcIiAmJgorCXdyaXRlX3NjcmlwdCByZW1vdmUtYWxsLWJ1dC1maXJzdC5zaCA8PC1cRU9GICYmCisJc2VkIC1lICIyLFwkcy9eL1xcXFwvIiAiJDEiID4iJDEudG1wIiAmJgorCW12ICIkMS50bXAiICIkMSIKKwlFT0YKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL3JlbW92ZS1hbGwtYnV0LWZpcnN0LnNoIiAmJgorCQlnaXQgcmViYXNlIC1pIEIKKwkpICYmCisJdGVzdCBCID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSByZXNwZWN0cyBjb3JlLmNvbW1lbnRjaGFyPWF1dG8nICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmNvbW1lbnRjaGFyIGF1dG8gJiYKKwl3cml0ZV9zY3JpcHQgY29weS1lZGl0LXNjcmlwdC5zaCA8PC1cRU9GICYmCisJY3AgIiQxIiBlZGl0LXNjcmlwdAorCUVPRgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8IDoiICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9jb3B5LWVkaXQtc2NyaXB0LnNoIiAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUReCisJKSAmJgorCXRlc3QgLXogIiQoZ3JlcCAtdmUgIl4jIiAtZSAiXlwkIiAtZSAiXnBpY2siIGVkaXQtc2NyaXB0KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pLCB3aXRoIDxvbnRvPiBhbmQgPHVwc3RyZWFtPiBzcGVjaWZpZWQgYXMgOi9xdXV4ZXJ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIHRvcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiB0b3JlYmFzZSBicmFuY2gxICYmCisJdXBzdHJlYW09JChnaXQgcmV2LXBhcnNlICI6L0oiKSAmJgorCW9udG89JChnaXQgcmV2LXBhcnNlICI6L0EiKSAmJgorCWdpdCByZWJhc2UgLS1vbnRvICRvbnRvICR1cHN0cmVhbSAmJgorCWdpdCByZXNldCAtLWhhcmQgYnJhbmNoMSAmJgorCWdpdCByZWJhc2UgLS1vbnRvICI6L0EiICI6L0oiICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggLS1zdHJhdGVneSBhbmQgLVgnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QtbWVyZ2UtdXNlLXRoZWlycyBjb25mbGljdC1icmFuY2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZWNobyBmaXZlID5jb25mbGljdCAmJgorCWVjaG8gWiA+ZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJvbmUgZmlsZSBjb25mbGljdCIgJiYKKwlFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIC1Yb3VycyBjb25mbGljdC1icmFuY2ggJiYKKwl0ZXN0ICQoZ2l0IHNob3cgY29uZmxpY3QtYnJhbmNoOmNvbmZsaWN0KSA9ICQoY2F0IGNvbmZsaWN0KSAmJgorCXRlc3QgJChjYXQgZmlsZTEpID0gWgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCByZWJhc2UgLWkgd2l0aCAtLXN0cmF0ZWd5IGFuZCAtWCcgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdC1tZXJnZS11c2UtdGhlaXJzLWludGVycnVwdGVkIGNvbmZsaWN0LWJyYW5jaCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwk+YnJlYWtwb2ludCAmJgorCWdpdCBhZGQgYnJlYWtwb2ludCAmJgorCWdpdCBjb21taXQgLW0gImJyZWFrcG9pbnQgZm9yIGludGVyYWN0aXZlIG1vZGUiICYmCisJZWNobyBmaXZlID5jb25mbGljdCAmJgorCWVjaG8gWiA+ZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJvbmUgZmlsZSBjb25mbGljdCIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgMiIgZ2l0IHJlYmFzZSAtaSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBcCisJCQktWG91cnMgY29uZmxpY3QtYnJhbmNoCisJKSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgc2hvdyBjb25mbGljdC1icmFuY2g6Y29uZmxpY3QpID0gJChjYXQgY29uZmxpY3QpICYmCisJdGVzdCAkKGNhdCBmaWxlMSkgPSBaCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBlcnJvciBvbiBjb21taXRzIHdpdGggXCBpbiBtZXNzYWdlJyAnCisJY3VycmVudF9oZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0OyBnaXQgcmVzZXQgLS1oYXJkICRjdXJyZW50X2hlYWQ7IHJtIC1mIGVycm9yIiAmJgorCXRlc3RfY29tbWl0IFRPLVJFTU9WRSB3aWxsLWNvbmZsaWN0IG9sZC1jb250ZW50ICYmCisJdGVzdF9jb21taXQgIlx0ZW1wIiB3aWxsLWNvbmZsaWN0IG5ldy1jb250ZW50IGR1bW15ICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEVESVRPUj10cnVlIGdpdCByZWJhc2UgLWkgSEVBRF4gLS1vbnRvIEhFQUReXiAyPmVycm9yICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdyZXAgICIJZW1wIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNIQTEgJ3Nob3J0IFNIQS0xIHNldHVwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBjb2xsaWRlICYmCisJZ2l0IHJtIC1yZiAuICYmCisJKAorCXVuc2V0IHRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IGNvbGxpZGUxIGNvbGxpZGUgJiYKKwl0ZXN0X2NvbW1pdCAtLW5vdGljayBjb2xsaWRlMiBjb2xsaWRlICYmCisJdGVzdF9jb21taXQgLS1ub3RpY2sgY29sbGlkZTMgY29sbGlkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTSEExICdzaG9ydCBTSEEtMSBjb2xsaWRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZXNldF9yZWJhc2UgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgY29sbGlkZSAmJgorCWNvbGxpZGluZ19zaGExPTZiY2RhMzcgJiYKKwl0ZXN0ICRjb2xsaWRpbmdfc2hhMSA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCB8IGN1dCAtYyAxLTcpIiAmJgorCSgKKwkJdW5zZXQgdGVzdF90aWNrICYmCisJCXRlc3RfdGljayAmJgorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iY29sbGlkZTIgYWM0ZjJlZSIgXAorCQlGQUtFX0xJTkVTPSJyZXdvcmQgMSBicmVhayAyIiBnaXQgcmViYXNlIC1pIEhFQUR+MiAmJgorCQl0ZXN0ICRjb2xsaWRpbmdfc2hhMSA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCB8IGN1dCAtYyAxLTcpIiAmJgorCQlncmVwICJecGljayAkY29sbGlkaW5nX3NoYTEgIiBcCisJCQkuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8udG1wICYmCisJCWdyZXAgIl5waWNrIFswLTlhLWZdXHs0MFx9IiBcCisJCQkuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwkJZ3JlcCAiXnBpY2sgWzAtOWEtZl1cezQwXH0iIFwKKwkJCS5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kby5iYWNrdXAgJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCWNvbGxpZGUyPSIkKGdpdCByZXYtcGFyc2UgSEVBRH4xIHwgY3V0IC1jIDEtNCkiICYmCisJY29sbGlkZTM9IiQoZ2l0IHJldi1wYXJzZSBjb2xsaWRlMyB8IGN1dCAtYyAxLTQpIiAmJgorCXRlc3QgIiRjb2xsaWRlMiIgPSAiJGNvbGxpZGUzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNwZWN0IGNvcmUuYWJicmV2JyAnCisJZ2l0IGNvbmZpZyBjb3JlLmFiYnJldiAxMiAmJgorCSgKKwkJc2V0X2NhdF90b2RvX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEhFQUR+NCA+dG9kby1saXN0CisJKSAmJgorCXRlc3QgNCA9ICQoZ3JlcCAtYyAicGljayBbMC05YS1mXVx7MTIsXH0iIHRvZG8tbGlzdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG9kbyBjb3VudCcgJworCXdyaXRlX3NjcmlwdCBkdW1wLXJhdy5zaCA8PC1cRU9GICYmCisJCWNhdCAiJDEiCisJRU9GCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9kdW1wLXJhdy5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgPmFjdHVhbAorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJeIyBSZWJhc2UgLi4qIG9udG8gLi4qIChbMC05XSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb21taXRzIHRoYXQgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlcyAocGljayknICcKKwlnaXQgY2hlY2tvdXQgLS1mb3JjZSBicmFuY2gyICYmCisJZ2l0IGNsZWFuIC1mICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgQQorCSkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBGICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYgJiYKKwk+ZmlsZTYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBGICYmCisJcm0gZmlsZTYgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBJCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb21taXRzIHRoYXQgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlcyAoc3F1YXNoKScgJworCWdpdCBjaGVja291dCAtLWZvcmNlIGJyYW5jaDIgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKwlnaXQgdGFnIG9yaWdpbmFsLWJyYW5jaDIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgQQorCSkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBGICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYgJiYKKwk+ZmlsZTYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBGICYmCisJcm0gZmlsZTYgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApID0gSSAmJgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luYWwtYnJhbmNoMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29tbWl0cyB0aGF0IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMgKG5vIGZmKScgJworCWdpdCBjaGVja291dCAtLWZvcmNlIGJyYW5jaDIgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgMiIgZ2l0IHJlYmFzZSAtaSAtLW5vLWZmIEEKKwkpICYmCisJdGVzdCAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSA9IEYgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNiAmJgorCT5maWxlNiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgPSBGICYmCisJcm0gZmlsZTYgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApID0gSQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1jb250aW51ZSByZW1vdmVzIENIRVJSWV9QSUNLX0hFQUQnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29tbWl0LXRvLXNraXAgJiYKKwlmb3IgZG91YmxlIGluIFggMyAxCisJZG8KKwkJdGVzdF9zZXEgNSB8IHNlZCAicy8kZG91YmxlLyYmLyIgPnNlcSAmJgorCQlnaXQgYWRkIHNlcSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBzZXEtJGRvdWJsZQorCWRvbmUgJiYKKwlnaXQgdGFnIHNlcS1vbnRvICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2VxLW9udG8gJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0gZ2l0IHJlYmFzZSAtaSBzZXEtb250bworCSkgJiYKKwl0ZXN0IC1kIC5naXQvcmViYXNlLW1lcmdlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2VxLW9udG8gJiYKKwl0ZXN0ICEgLWQgLmdpdC9yZWJhc2UtbWVyZ2UgJiYKKwl0ZXN0ICEgLWYgLmdpdC9DSEVSUllfUElDS19IRUFECisnCisKK3JlYmFzZV9zZXR1cF9hbmRfY2xlYW4gKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAiCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgJDEgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydAorCSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgJDEgJHsyOi1tYXN0ZXJ9Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AnICcKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGRyb3AtdGVzdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgZHJvcCAyIDMgZCA0IDUiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgorCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBDID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBBID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReXiB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSBpZ25vcmUnICcKKwl0ZXN0X2NvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayBpZ25vcmUgJiYKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDMgNCIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwKKwkpICYmCisJdGVzdCBEID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0X2kxOG5ncmVwIFwKKwkJIlN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvbWlzc2luZy1jb21taXQiIFwKKwkJYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSByZXNwZWN0cyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayA9IHdhcm4nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS4KKwlEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKToKKwkgLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXIpCisJVG8gYXZvaWQgdGhpcyBtZXNzYWdlLCB1c2UgImRyb3AiIHRvIGV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LgorCUVPRgorCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIHdhcm4gJiYKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDMgNCIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwuMgorCSkgJiYKKwloZWFkIC1uNCBhY3R1YWwuMiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSBlcnJvcicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVdhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LgorCURyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOgorCSAtICQoZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0xIG1hc3RlcikKKwkgLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXJ+MikKKwlUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCisKKwlVc2UgJ1wnJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snXCcnIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2Ygd2FybmluZ3MuCisJVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLgorCisJWW91IGNhbiBmaXggdGhpcyB3aXRoICdcJydnaXQgcmViYXNlIC0tZWRpdC10b2RvJ1wnJyBhbmQgdGhlbiBydW4gJ1wnJ2dpdCByZWJhc2UgLS1jb250aW51ZSdcJycuCisJT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ1wnJ2dpdCByZWJhc2UgLS1hYm9ydCdcJycuCisJRU9GCisJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgZXJyb3IgJiYKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiA0IiBcCisJCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQljcCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8uYmFja3VwIFwKKwkJCS5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCQlGQUtFX0xJTkVTPSIxIDIgZHJvcCAzIDQgZHJvcCA1IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvCisJKSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBCID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWVkaXQtdG9kbyByZXNwZWN0cyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayA9IGlnbm9yZScgJworCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIGlnbm9yZSAmJgorCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gbWlzc2luZy1jb21taXQgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJicmVhayAxIDIgMyA0IDUiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIDI+YWN0dWFsCisJKSAmJgorCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdF9pMThuZ3JlcCBcCisJCSJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCByZWZzL2hlYWRzL21pc3NpbmctY29tbWl0IiBcCisJCWFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1lZGl0LXRvZG8gcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSB3YXJuJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZXJyb3I6IGludmFsaWQgbGluZSAxOiBiYWRjbWQgJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyfjQpCisJV2FybmluZzogc29tZSBjb21taXRzIG1heSBoYXZlIGJlZW4gZHJvcHBlZCBhY2NpZGVudGFsbHkuCisJRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6CisJIC0gJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyKQorCSAtICQoZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0xIG1hc3Rlcn40KQorCVRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlICJkcm9wIiB0byBleHBsaWNpdGx5IHJlbW92ZSBhIGNvbW1pdC4KKwlFT0YKKwloZWFkIC1uNCBleHBlY3QgPmV4cGVjdC4yICYmCisJdGFpbCAtbjEgZXhwZWN0ID4+ZXhwZWN0LjIgJiYKKwl0YWlsIC1uNCBleHBlY3QuMiA+ZXhwZWN0LjMgJiYKKwl0ZXN0X2NvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayB3YXJuICYmCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJiYWQgMSAyIDMgNCA1IiBcCisJCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCQljcCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8uYmFja3VwIG9yaWcgJiYKKwkJRkFLRV9MSU5FUz0iMiAzIDQiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gMj5hY3R1YWwuMiAmJgorCQloZWFkIC1uNiBhY3R1YWwuMiA+YWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJCWNwIG9yaWcgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gMj5hY3R1YWwuMiAmJgorCQloZWFkIC1uNCBhY3R1YWwuMiA+YWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QuMyBhY3R1YWwgJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIDI+YWN0dWFsCisJKSAmJgorCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdF9pMThuZ3JlcCBcCisJCSJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCByZWZzL2hlYWRzL21pc3NpbmctY29tbWl0IiBcCisJCWFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1lZGl0LXRvZG8gcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSBlcnJvcicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiBpbnZhbGlkIGxpbmUgMTogYmFkY21kICQoZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0xIG1hc3Rlcn40KQorCVdhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LgorCURyb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOgorCSAtICQoZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0xIG1hc3RlcikKKwkgLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXJ+NCkKKwlUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCisKKwlVc2UgJ1wnJ2dpdCBjb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2snXCcnIHRvIGNoYW5nZSB0aGUgbGV2ZWwgb2Ygd2FybmluZ3MuCisJVGhlIHBvc3NpYmxlIGJlaGF2aW91cnMgYXJlOiBpZ25vcmUsIHdhcm4sIGVycm9yLgorCisJWW91IGNhbiBmaXggdGhpcyB3aXRoICdcJydnaXQgcmViYXNlIC0tZWRpdC10b2RvJ1wnJyBhbmQgdGhlbiBydW4gJ1wnJ2dpdCByZWJhc2UgLS1jb250aW51ZSdcJycuCisJT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ1wnJ2dpdCByZWJhc2UgLS1hYm9ydCdcJycuCisJRU9GCisJdGFpbCAtbjExIGV4cGVjdCA+ZXhwZWN0LjIgJiYKKwloZWFkIC1uMyBleHBlY3QuMiA+ZXhwZWN0LjMgJiYKKwl0YWlsIC1uNyBleHBlY3QuMiA+PmV4cGVjdC4zICYmCisJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgZXJyb3IgJiYKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9ImJhZCAxIDIgMyA0IDUiIFwKKwkJCWdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJCWNwIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kby5iYWNrdXAgb3JpZyAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMiAzIDQiIFwKKwkJCWdpdCByZWJhc2UgLS1lZGl0LXRvZG8gMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIDI+YWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QuMiBhY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCQljcCBvcmlnIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIDMgNCIgXAorCQkJZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LjMgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LjMgYWN0dWFsICYmCisJCWNwIG9yaWcgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQgZHJvcCA1IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZSAyPmFjdHVhbAorCSkgJiYKKwl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3RfaTE4bmdyZXAgXAorCQkiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgcmVmcy9oZWFkcy9taXNzaW5nLWNvbW1pdCIgXAorCQlhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSBlcnJvciBhZnRlciByZXNvbHZpbmcgY29uZmxpY3RzJyAnCisJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgZXJyb3IgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJkcm9wIDEgYnJlYWsgMiAzIDQiIGdpdCByZWJhc2UgLWkgQSBFCisJKSAmJgorCWdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHggPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayA9IGVycm9yIHdoZW4gZWRpdGluZyBmb3IgYSBzZWNvbmQgdGltZScgJworCXRlc3RfY29uZmlnIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrIGVycm9yICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBicmVhayAyIDMiIGdpdCByZWJhc2UgLWkgQSBEICYmCisJCWNwIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyB0b2RvICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPTIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCQlHSVRfU0VRVUVOQ0VfRURJVE9SPSJjcCB0b2RvIiBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzcGVjdHMgcmViYXNlLmFiYnJldmlhdGVDb21tYW5kcyB3aXRoIGZpeHVwLCBzcXVhc2ggYW5kIGV4ZWMnICcKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGFiYnJldmNtZCAmJgorCXRlc3RfY29tbWl0ICJmaXJzdCIgZmlsZTEudHh0ICJmaXJzdCBsaW5lIiBmaXJzdCAmJgorCXRlc3RfY29tbWl0ICJzZWNvbmQiIGZpbGUxLnR4dCAiYW5vdGhlciBsaW5lIiBzZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCAiZml4dXAhIGZpcnN0IiBmaWxlMi50eHQgImZpcnN0IGxpbmUgYWdhaW4iIGZpcnN0X2ZpeHVwICYmCisJdGVzdF9jb21taXQgInNxdWFzaCEgc2Vjb25kIiBmaWxlMS50eHQgImFub3RoZXIgbGluZSBoZXJlIiBzZWNvbmRfc3F1YXNoICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlwICQoZ2l0IHJldi1saXN0IC0tYWJicmV2LWNvbW1pdCAtMSBmaXJzdCkgZmlyc3QKKwlmICQoZ2l0IHJldi1saXN0IC0tYWJicmV2LWNvbW1pdCAtMSBmaXJzdF9maXh1cCkgZml4dXAhIGZpcnN0CisJeCBnaXQgc2hvdyBIRUFECisJcCAkKGdpdCByZXYtbGlzdCAtLWFiYnJldi1jb21taXQgLTEgc2Vjb25kKSBzZWNvbmQKKwlzICQoZ2l0IHJldi1saXN0IC0tYWJicmV2LWNvbW1pdCAtMSBzZWNvbmRfc3F1YXNoKSBzcXVhc2ghIHNlY29uZAorCXggZ2l0IHNob3cgSEVBRAorCUVPRgorCWdpdCBjaGVja291dCBhYmJyZXZjbWQgJiYKKwl0ZXN0X2NvbmZpZyByZWJhc2UuYWJicmV2aWF0ZUNvbW1hbmRzIHRydWUgJiYKKwkoCisJCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIFwKKwkJCS0tYXV0b3NxdWFzaCBtYXN0ZXIgPmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGNoZWNrIG9mIGJhZCBjb21tYW5kJyAnCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBiYWQtY21kICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiAzIGJhZCA0IDUiIFwKKwkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAiYmFkY21kICQoZ2l0IHJldi1saXN0IC0tb25lbGluZSAtMSBtYXN0ZXJ+MSkiIFwKKwkJCQlhY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAiWW91IGNhbiBmaXggdGhpcyB3aXRoIC5naXQgcmViYXNlIC0tZWRpdC10b2RvLi4iIFwKKwkJCQlhY3R1YWwgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDMgZHJvcCA0IDUiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8KKwkpICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEMgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFicyBhbmQgc3BhY2VzIGFyZSBhY2NlcHRlZCBpbiB0aGUgdG9kb2xpc3QnICcKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGluZGVudGVkLWNvbW1lbnQgJiYKKwl3cml0ZV9zY3JpcHQgYWRkLWluZGVudC5zaCA8PC1cRU9GICYmCisJKAorCQkjIFR1cm4gc2luZ2xlIHNwYWNlcyBpbnRvIHNwYWNlL3RhYiBtaXgKKwkJc2VkICIxcy8gLwkvZzsgMnMvIC8gIC9nOyAzcy8gLyAJL2ciICIkMSIKKwkJcHJpbnRmICJcblx0IyBjb21tZW50XG4gI21vcmVcblx0ICMgY29tbWVudFxuIgorCSkgPiIkMS5uZXciCisJbXYgIiQxLm5ldyIgIiQxIgorCUVPRgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvYWRkLWluZGVudC5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXl5eCisJKSAmJgorCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBjaGVjayBvZiBiYWQgU0hBLTEnICcKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGJhZC1zaGEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIGVkaXQgZmFrZXNoYSAzIDQgNSAjIiBcCisJCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgorCQkJdGVzdF9pMThuZ3JlcCAiZWRpdCBYWFhYWFhYIEZhbHNlIGNvbW1pdCIgYWN0dWFsICYmCisJCQl0ZXN0X2kxOG5ncmVwICJZb3UgY2FuIGZpeCB0aGlzIHdpdGggLmdpdCByZWJhc2UgLS1lZGl0LXRvZG8uLiIgXAorCQkJCQlhY3R1YWwgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDQgNSA2IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvCisJKSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXRvciBzYXZlcyBhcyBDUi9MRicgJworCWdpdCBjaGVja291dCAtYiB3aXRoLWNybGYgJiYKKwl3cml0ZV9zY3JpcHQgYWRkLWNycy5zaCA8PC1cRU9GICYmCisJc2VkIC1lICJzL1wkL1EvIiA8IiQxIiB8IHRyIFEgIlxcMDE1IiA+IiQxIi5uZXcgJiYKKwltdiAtZiAiJDEiLm5ldyAiJDEiCisJRU9GCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9hZGQtY3JzLnNoIiAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUReCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1ncGctc2lnbj08a2V5LWlkPicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgLS1ncGctc2lnbj0iXCJTIEkgR25lclwiIiBcCisJCQlIRUFEXiA+b3V0IDI+ZXJyCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIiRTUS1TXCJTIEkgR25lclwiJFNRIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tZ3BnLXNpZ249PGtleS1pZD4gb3ZlcnJpZGVzIGNvbW1pdC5ncGdTaWduJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfY29uZmlnIGNvbW1pdC5ncGdzaWduIHRydWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgLS1ncGctc2lnbj0iXCJTIEkgR25lclwiIiBcCisJCQlIRUFEXiA+b3V0IDI+ZXJyCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIiRTUS1TXCJTIEkgR25lclwiJFNRIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWQgYXV0aG9yIGhlYWRlciBhZnRlciAtLXJvb3Qgc3dhcCcgJworCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gYXV0aG9yLWhlYWRlciBuby1jb25mbGljdC1icmFuY2ggJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3I9IkF1ICR7U1F9dGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgLS1uby1lZGl0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBeYXV0aG9yID5leHBlY3RlZCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjUgMSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgXmF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIGF1dGhvciBoZWFkZXIgd2hlbiBhdXRob3IgY29udGFpbnMgc2luZ2xlIHF1b3RlJyAnCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBhdXRob3ItaGVhZGVyIG5vLWNvbmZsaWN0LWJyYW5jaCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iQXUgJHtTUX10aG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IiAtLW5vLWVkaXQgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIF5hdXRob3IgPmV4cGVjdGVkICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKwkpICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBeYXV0aG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQgaG9vayBpcyBjYWxsZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaG9va3MvcG9zdC1jb21taXQiICYmCisJPmFjdHVhbCAmJgorCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wb3N0LWNvbW1pdCA8PC1cRU9TICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID4+YWN0dWFsCisJRU9TCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCA0IDEgcmV3b3JkIDIgZml4dXAgMyIgZ2l0IHJlYmFzZSAtaSBBIEUgJiYKKwkJZWNobyB4PmZpbGUzICYmCisJCWdpdCBhZGQgZmlsZTMgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT1lZGl0ZWQgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCWdpdCByZXYtcGFyc2UgSEVBREB7NX0gSEVBREB7NH0gSEVBREB7M30gSEVBREB7Mn0gSEVBREB7MX0gSEVBRCBcCisJCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHRlc3QgaW4gdGhpcyBmaWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckRURJVE9SIGFuZCBmcmllbmRzIGFyZSB1bmNoYW5nZWQnICcKKwl0ZXN0X2VkaXRvcl91bmNoYW5nZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA1LXJlYmFzZS1tYWxmb3JtZWQuc2ggYi90L3QzNDA1LXJlYmFzZS1tYWxmb3JtZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODYwZTYzZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDUtcmViYXNlLW1hbGZvcm1lZC5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmViYXNlIHNob3VsZCBoYW5kbGUgYXJiaXRyYXJ5IGdpdCBtZXNzYWdlJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCitjYXQgPkYgPDxcRU9GCitUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBjb21taXQgbG9nIG1lc3NhZ2UKK3RoYXQgZG9lcyBub3QgIGNvbmZvcm0gdG8gZ2l0IGNvbW1pdCBjb252ZW50aW9uLgorCitJdCBoYXMgdHdvIHBhcmFncmFwaHMsIGJ1dCBpdHMgZmlyc3QgcGFyYWdyYXBoIGlzIG5vdCBmcmllbmRseQordG8gb25lbGluZSBzdW1tYXJ5IGZvcm1hdC4KK0VPRgorCitjYXQgPkcgPDxcRU9GCitjb21taXQgbG9nIG1lc3NhZ2UgY29udGFpbmluZyBhIGRpZmYKK0VPRgorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUxICYmCisJPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCWdpdCBicmFuY2ggZGlmZi1pbi1tZXNzYWdlICYmCisJZ2l0IGJyYW5jaCBlbXB0eS1tZXNzYWdlLW1lcmdlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbXVsdGktbGluZS1zdWJqZWN0ICYmCisJY2F0IEYgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLUYgRiAmJgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPkYwICYmCisKKwlnaXQgY2hlY2tvdXQgZGlmZi1pbi1tZXNzYWdlICYmCisJZWNobyAiY29tbWl0IGxvZyBtZXNzYWdlIGNvbnRhaW5pbmcgYSBkaWZmIiA+RyAmJgorCWVjaG8gIiIgPj5HICYmCisJY2F0IEcgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4+RyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLUYgRyAmJgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPkcwICYmCisKKwlnaXQgY2hlY2tvdXQgZW1wdHktbWVzc2FnZS1tZXJnZSAmJgorCWVjaG8gZmlsZTMgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwllY2hvIE9uZSA+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGNvbW1pdCB3aXRoIG11bHRpLWxpbmUgc3ViamVjdCcgJworCisJZ2l0IHJlYmFzZSBtYXN0ZXIgbXVsdGktbGluZS1zdWJqZWN0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPkYxICYmCisKKwl0ZXN0X2NtcCBGMCBGMSAmJgorCXRlc3RfY21wIEYgRjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGNvbW1pdCB3aXRoIGRpZmYgaW4gbWVzc2FnZScgJworCWdpdCByZWJhc2UgbWFzdGVyIGRpZmYtaW4tbWVzc2FnZSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXiQvZCIgPkcxICYmCisJdGVzdF9jbXAgRzAgRzEgJiYKKwl0ZXN0X2NtcCBHIEcwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtbSBjb21taXQgd2l0aCBlbXB0eSBtZXNzYWdlJyAnCisJZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgZW1wdHktbWVzc2FnZS1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29tbWl0IHdpdGggZW1wdHkgbWVzc2FnZScgJworCWdpdCBjaGVja291dCBkaWZmLWluLW1lc3NhZ2UgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iICIgRkFLRV9MSU5FUz0icmV3b3JkIDEiIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDYtcmViYXNlLW1lc3NhZ2Uuc2ggYi90L3QzNDA2LXJlYmFzZS1tZXNzYWdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxYjc2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA2LXJlYmFzZS1tZXNzYWdlLnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVzc2FnZXMgZnJvbSByZWJhc2Ugb3BlcmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBPIGZpbGVPICYmCisJdGVzdF9jb21taXQgWCBmaWxlWCAmJgorCXRlc3RfY29tbWl0IEEgZmlsZUEgJiYKKwl0ZXN0X2NvbW1pdCBCIGZpbGVCICYmCisJdGVzdF9jb21taXQgWSBmaWxlWSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIE8gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgQSBCICYmCisJdGVzdF9jb21taXQgWiBmaWxlWiAmJgorCWdpdCB0YWcgc3RhcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1tJyAnCisJZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyIHR3aWNlJyAnCisJZ2l0IHJlYmFzZSAtLWFwcGx5IG1hc3RlciA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggdG9waWMgaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSB3aXRoIC0tZm9yY2UnICcKKwlnaXQgcmViYXNlIC0tZm9yY2UtcmViYXNlIC0tYXBwbHkgbWFzdGVyID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJDdXJyZW50IGJyYW5jaCB0b3BpYyBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyIHR3aWNlIGZyb20gYW5vdGhlciBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgdG9waWNeICYmCisJZ2l0IHJlYmFzZSAtLWFwcGx5IG1hc3RlciB0b3BpYyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggdG9waWMgaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmYXN0LWZvcndhcmQgdG8gbWFzdGVyJyAnCisJZ2l0IGNoZWNrb3V0IHRvcGljXiAmJgorCWdpdCByZWJhc2UgLS1hcHBseSB0b3BpYyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiRmFzdC1mb3J3YXJkZWQgSEVBRCB0byB0b3BpYyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCByZWJhc2UgLS1zdGF0IG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugdy9jb25maWcgcmViYXNlLnN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCBjb25maWcgcmViYXNlLnN0YXQgdHJ1ZSAmJgorICAgICAgICBnaXQgcmViYXNlIG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLW4gb3ZlcnJpZGVzIGNvbmZpZyByZWJhc2Uuc3RhdCBjb25maWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCBjb25maWcgcmViYXNlLnN0YXQgdHJ1ZSAmJgorICAgICAgICBnaXQgcmViYXNlIC1uIG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgICEgZ3JlcCAiXiBmaWxlWCB8ICAqMSArJCIgZGlmZnN0YXQudHh0CisnCisKKyMgT3V0cHV0IHRvIHN0ZGVycjoKKyMKKyMgICAgICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogaW52YWxpZC1yZWYiCisjCisjIE5FRURTV09SSzogVGhpcyAiZ3JlcCIgaXMgZmluZSBpbiByZWFsIG5vbi1DIGxvY2FsZXMsIGJ1dAorIyBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiBwb2lzb25zIHRoZSByZWZuYW1lIGFsb25nIHdpdGggdGhlIGVuY2xvc2luZworIyBlcnJvciBtZXNzYWdlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBvdXRwdXRzIHRoZSBpbnZhbGlkIHJlZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIGludmFsaWQtcmVmIEhFQUQgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQtcmVmIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IGVhcmx5IHVwb24gLUM8bj4gb3IgLS13aGl0ZXNwYWNlPTxiYWQ+JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtQ25vdC1hLW51bWJlciBIRUFEIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibnVtZXJpY2FsIHZhbHVlIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1iYWQgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkludmFsaWQgd2hpdGVzcGFjZSBvcHRpb24iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfUkVGTE9HX0FDVElPTicgJworCWdpdCBjaGVja291dCBzdGFydCAmJgorCXRlc3RfY29tbWl0IHJlZmxvZy1vbnRvICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlZmxvZy10b3BpYyBzdGFydCAmJgorCXRlc3RfY29tbWl0IHJlZmxvZy10by1yZWJhc2UgJiYKKworCWdpdCByZWJhc2UgLS1hcHBseSByZWZsb2ctb250byAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JWdzIC0zID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmViYXNlIGZpbmlzaGVkOiByZXR1cm5pbmcgdG8gcmVmcy9oZWFkcy9yZWZsb2ctdG9waWMKKwlyZWJhc2U6IHJlZmxvZy10by1yZWJhc2UKKwlyZWJhc2U6IGNoZWNrb3V0IHJlZmxvZy1vbnRvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJlZmxvZy1wcmVmaXggcmVmbG9nLXRvLXJlYmFzZSAmJgorCUdJVF9SRUZMT0dfQUNUSU9OPWNoYW5nZS10aGUtcmVmbG9nIGdpdCByZWJhc2UgLS1hcHBseSByZWZsb2ctb250byAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JWdzIC0zID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmViYXNlIGZpbmlzaGVkOiByZXR1cm5pbmcgdG8gcmVmcy9oZWFkcy9yZWZsb2ctcHJlZml4CisJY2hhbmdlLXRoZS1yZWZsb2c6IHJlZmxvZy10by1yZWJhc2UKKwljaGFuZ2UtdGhlLXJlZmxvZzogY2hlY2tvdXQgcmVmbG9nLW9udG8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBvbnRvIHVucmVsYXRlZCBoaXN0b3J5JyAnCisJZ2l0IGluaXQgdW5yZWxhdGVkICYmCisJdGVzdF9jb21taXQgLUMgdW5yZWxhdGVkIDEgJiYKKwlnaXQgLUMgdW5yZWxhdGVkIHJlbW90ZSBhZGQgLWYgb3JpZ2luICIkUFdEIiAmJgorCWdpdCAtQyB1bnJlbGF0ZWQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPW9yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgLUMgdW5yZWxhdGVkIC1jIGNvcmUuZWRpdG9yPXRydWUgcmViYXNlIC1pIC12IC0tc3RhdCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2hhbmdlcyB0byAiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIjUgZmlsZXMgY2hhbmdlZCIgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwNy1yZWJhc2UtYWJvcnQuc2ggYi90L3QzNDA3LXJlYmFzZS1hYm9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45N2VmZWEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwNy1yZWJhc2UtYWJvcnQuc2gKQEAgLTAsMCArMSwxMjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC0tYWJvcnQgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIyMgVGVzdCB0aGF0IHdlIGhhbmRsZSBzcGFjZSBjaGFyYWN0ZXJzIHByb3Blcmx5Cit3b3JrX2Rpcj0iJChwd2QpL3Rlc3QgZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciAtcCAiJHdvcmtfZGlyIiAmJgorCWNkICIkd29ya19kaXIiICYmCisJZ2l0IGluaXQgJiYKKwllY2hvIGEgPiBhICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBhICYmCisJZ2l0IGJyYW5jaCB0by1yZWJhc2UgJiYKKworCWVjaG8gYiA+IGEgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGIgJiYKKwllY2hvIGMgPiBhICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBjICYmCisKKwlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCisJZWNobyBkID4gYSAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1lcmdlIHNob3VsZCBmYWlsIG9uIHRoaXMiICYmCisJZWNobyBlID4gYSAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1lcmdlIHNob3VsZCBmYWlsIG9uIHRoaXMsIHRvbyIgJiYKKwlnaXQgYnJhbmNoIHByZS1yZWJhc2UKKycKKwordGVzdHJlYmFzZSgpIHsKKwl0eXBlPSQxCisJZG90ZXN0PSQyCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZSAtLWFib3J0IiAnCisJCWNkICIkd29ya19kaXIiICYmCisJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfZGlyICIkZG90ZXN0IiAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgdG8tcmViYXNlKSA9ICQoZ2l0IHJldi1wYXJzZSBwcmUtcmViYXNlKSAmJgorCQl0ZXN0ICEgLWQgIiRkb3Rlc3QiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hYm9ydCBhZnRlciAtLXNraXAiICcKKwkJY2QgIiR3b3JrX2RpciIgJiYKKwkJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCisJCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19kaXIgIiRkb3Rlc3QiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1za2lwICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIHRvLXJlYmFzZSkgPSAkKGdpdCByZXYtcGFyc2UgcHJlLXJlYmFzZSkgJiYKKwkJdGVzdCAhIC1kICIkZG90ZXN0IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlIC0tYWJvcnQgYWZ0ZXIgLS1jb250aW51ZSIgJworCQljZCAiJHdvcmtfZGlyIiAmJgorCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX2RpciAiJGRvdGVzdCIgJiYKKwkJZWNobyBjID4gYSAmJgorCQllY2hvIGQgPj4gYSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpICE9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSB0by1yZWJhc2UpID0gJChnaXQgcmV2LXBhcnNlIHByZS1yZWJhc2UpICYmCisJCXRlc3QgISAtZCAiJGRvdGVzdCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZSAtLWFib3J0IGRvZXMgbm90IHVwZGF0ZSByZWZsb2ciICcKKwkJY2QgIiR3b3JrX2RpciIgJiYKKwkJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCisJCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCQlnaXQgcmVmbG9nIHNob3cgdG8tcmViYXNlID4gcmVmbG9nX2JlZm9yZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgbWFzdGVyICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQlnaXQgcmVmbG9nIHNob3cgdG8tcmViYXNlID4gcmVmbG9nX2FmdGVyICYmCisJCXRlc3RfY21wIHJlZmxvZ19iZWZvcmUgcmVmbG9nX2FmdGVyICYmCisJCXJtIHJlZmxvZ19iZWZvcmUgcmVmbG9nX2FmdGVyCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tYWJvcnQgY2FuIG5vdCBiZSB1c2VkIHdpdGggb3RoZXIgb3B0aW9ucycgJworCQljZCAiJHdvcmtfZGlyIiAmJgorCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtdiAtLWFib3J0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCAtdiAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQKKwknCit9CisKK3Rlc3RyZWJhc2UgIiAtLWFwcGx5IiAuZ2l0L3JlYmFzZS1hcHBseQordGVzdHJlYmFzZSAiIC0tbWVyZ2UiIC5naXQvcmViYXNlLW1lcmdlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWFwcGx5IC0tcXVpdCcgJworCWNkICIkd29ya19kaXIiICYmCisJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCisJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFwcGx5IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwloZWFkX2JlZm9yZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmViYXNlIC0tcXVpdCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJGhlYWRfYmVmb3JlICYmCisJdGVzdCAhIC1kIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIC0tcXVpdCcgJworCWNkICIkd29ya19kaXIiICYmCisJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCisJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtbWVyZ2UgJiYKKwloZWFkX2JlZm9yZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmViYXNlIC0tcXVpdCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJGhlYWRfYmVmb3JlICYmCisJdGVzdCAhIC1kIC5naXQvcmViYXNlLW1lcmdlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwOC1yZWJhc2UtbXVsdGktbGluZS5zaCBiL3QvdDM0MDgtcmViYXNlLW11bHRpLWxpbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDJiZDdjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDgtcmViYXNlLW11bHRpLWxpbmUuc2gKQEAgLTAsMCArMSw2NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzaW5nIGEgY29tbWl0IHdpdGggbXVsdGktbGluZSBmaXJzdCBwYXJhZ3JhcGguJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkEgc2FtcGxlIGNvbW1pdCBsb2cgbWVzc2FnZSB0aGF0IGhhcyBhIGxvbmcKK3N1bW1hcnkgdGhhdCBzcGlsbHMgb3ZlciBtdWx0aXBsZSBsaW5lcy4KKworQnV0IG90aGVyd2lzZSB3aXRoIGEgc2FuZSBkZXNjcmlwdGlvbi4iICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwk+ZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZTIgJiYKKwk+YWZpbGUgJiYKKwlnaXQgYWRkIGFmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWVjaG8gaGVsbG8gPmFmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBmb3VydGggJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS1tZXJnZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF5eICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgLW0gIkEgbWVyZ2UgY29tbWl0IGxvZyBtZXNzYWdlIHRoYXQgaGFzIGEgbG9uZworc3VtbWFyeSB0aGF0IHNwaWxscyBvdmVyIG11bHRpcGxlIGxpbmVzLgorCitCdXQgb3RoZXJ3aXNlIHdpdGggYSBzYW5lIGRlc2NyaXB0aW9uLiIgc2lkZTIgJiYKKwlnaXQgYnJhbmNoIHNpZGUtbWVyZ2Utb3JpZ2luYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyByZWJhc2UgJworCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNpZGVAezF9IHwgc2VkIC1lICIxLC9eXCQvZCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCByZWJhc2VwICcKKworCWdpdCBjaGVja291dCBzaWRlLW1lcmdlICYmCisJZ2l0IHJlYmFzZSAtcCBzaWRlICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgc2lkZS1tZXJnZS1vcmlnaW5hbCB8IHNlZCAtZSAiMSwvXlwkL2QiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA5LXJlYmFzZS1wcmVzZXJ2ZS1tZXJnZXMuc2ggYi90L3QzNDA5LXJlYmFzZS1wcmVzZXJ2ZS1tZXJnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2IzNDBmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaApAQCAtMCwwICsxLDEyNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodChDKSAyMDA4IFN0ZXBoZW4gSGFiZXJtYW5uICYgQW5kcmVhcyBFcmljc3NvbgorIwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtcCBzaG91bGQgcHJlc2VydmUgbWVyZ2VzCisKK1J1biAiZ2l0IHJlYmFzZSAtcCIgYW5kIGNoZWNrIHRoYXQgbWVyZ2VzIGFyZSBwcm9wZXJseSBjYXJyaWVkIGFsb25nCisnCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFJFQkFTRV9QOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCByZWJhc2UgLXAgdGVzdHMsIGFzIGFza2VkIGZvcicKKwl0ZXN0X2RvbmUKK2ZpCisKK0dJVF9BVVRIT1JfRU1BSUw9Ym9ndXNfZW1haWxfYWRkcmVzcworZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKKworIyBDbG9uZSAyIChjb25mbGljdGluZyBtZXJnZSk6CisjCisjIEExLS1BMi0tQjMgICA8LS0gb3JpZ2luL21hc3RlcgorIyAgXCAgICAgICBcCisjICAgQjEtLS0tLS1NICA8LS0gdG9waWMKKyMgICAgXAorIyAgICAgQjIgICAgICAgPC0tIG9yaWdpbi90b3BpYworIworIyBDbG9uZSAzIChuby1mZiBtZXJnZSk6CisjCisjIEExLS1BMi0tQjMgICA8LS0gb3JpZ2luL21hc3RlcgorIyAgXAorIyAgIEIxLS0tLS0tTSAgPC0tIHRvcGljCisjICAgIFwgICAgIC8KKyMgICAgIFwtLUEzICAgIDwtLSB0b3BpYzIKKyMgICAgICBcCisjICAgICAgIEIyICAgICA8LS0gb3JpZ2luL3RvcGljCisjCisjIENsb25lIDQgKHNhbWUgYXMgQ2xvbmUgMykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIG1lcmdlLXByZXNlcnZpbmcgcmViYXNlJyBcCisJJ2VjaG8gRmlyc3QgPiBBICYmCisJZ2l0IGFkZCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIEExIiAmJgorCWdpdCBjaGVja291dCAtYiB0b3BpYyAmJgorCWVjaG8gU2Vjb25kID4gQiAmJgorCWdpdCBhZGQgQiAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBCMSIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZWNobyBUaGlyZCA+PiBBICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IEEyIiAmJgorCWVjaG8gRmlmdGggPiBCICYmCisJZ2l0IGFkZCBCICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIGRpZmZlcmVudCBCIiAmJgorCisJZ2l0IGNsb25lIC4vLiBjbG9uZTIgJiYKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG9waWMgb3JpZ2luL3RvcGljICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBvcmlnaW4vbWFzdGVyICYmCisJCWVjaG8gUmVzb2x2ZWQgPkIgJiYKKwkJZ2l0IGFkZCBCICYmCisJCWdpdCBjb21taXQgLW0gIk1lcmdlIG9yaWdpbi9tYXN0ZXIgaW50byB0b3BpYyIKKwkpICYmCisKKwlnaXQgY2xvbmUgLi8uIGNsb25lMyAmJgorCSgKKwkJY2QgY2xvbmUzICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYzIgb3JpZ2luL3RvcGljICYmCisJCWVjaG8gU2l4dGggPiBBICYmCisJCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBBMyIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIG9yaWdpbi90b3BpYyAmJgorCQlnaXQgbWVyZ2UgLS1uby1mZiB0b3BpYzIKKwkpICYmCisKKwlnaXQgY2xvbmUgLi8uIGNsb25lNCAmJgorCSgKKwkJY2QgY2xvbmU0ICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYzIgb3JpZ2luL3RvcGljICYmCisJCWVjaG8gU2l4dGggPiBBICYmCisJCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBBMyIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIG9yaWdpbi90b3BpYyAmJgorCQlnaXQgbWVyZ2UgLS1uby1mZiB0b3BpYzIKKwkpICYmCisKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwllY2hvIEZvdXJ0aCA+PiBCICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IEIyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHdvcmtzIGFmdGVyIGEgY29uZmxpY3QnICcKKwkoCisJY2QgY2xvbmUyICYmCisJZ2l0IGZldGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtcCBvcmlnaW4vdG9waWMgJiYKKwl0ZXN0IDIgPSAkKGdpdCBscy1maWxlcyBCIHwgd2MgLWwpICYmCisJZWNobyBSZXNvbHZlZCBhZ2FpbiA+IEIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlncmVwICJeQEBAICIgLmdpdC9yZWJhc2UtbWVyZ2UvcGF0Y2ggJiYKKwlnaXQgYWRkIEIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTW9kaWZ5IEEiIHwgd2MgLWwpICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIkFkZCBkaWZmZXJlbnQiIHwgd2MgLWwpICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1lcmdlIG9yaWdpbiIgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtcCBwcmVzZXJ2ZXMgbm8tZmYgbWVyZ2VzJyAnCisJKAorCWNkIGNsb25lMyAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCByZWJhc2UgLXAgb3JpZ2luL3RvcGljICYmCisJdGVzdCAzID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1vZGlmeSBBIiB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNZXJnZSBicmFuY2giIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLXAgaWdub3JlcyBtZXJnZS5sb2cgY29uZmlnJyAnCisJKAorCWNkIGNsb25lNCAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCAtYyBtZXJnZS5sb2c9MSByZWJhc2UgLXAgb3JpZ2luL3RvcGljICYmCisJZWNobyA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlYiIgLTEgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTAtcmViYXNlLXByZXNlcnZlLWRyb3BwZWQtbWVyZ2VzLnNoIGIvdC90MzQxMC1yZWJhc2UtcHJlc2VydmUtZHJvcHBlZC1tZXJnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmUyOTg2NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTAtcmViYXNlLXByZXNlcnZlLWRyb3BwZWQtbWVyZ2VzLnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggU3RlcGhlbiBIYWJlcm1hbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIHByZXNlcnZlIG1lcmdlcworCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIHdpdGggcHJlc2VydmUgbWVyZ2VzIGFuZCBlbnN1cmVzIGNvbW1pdHMKK2Ryb3BwZWQgYnkgdGhlIC0tY2hlcnJ5LXBpY2sgZmxhZyBoYXZlIHRoZWlyIGNoaWxkcmVucyBwYXJlbnRzCityZXdyaXR0ZW4uCisnCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFJFQkFTRV9QOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCByZWJhc2UgLXAgdGVzdHMsIGFzIGFza2VkIGZvcicKKwl0ZXN0X2RvbmUKK2ZpCisKKyMgc2V0IHVwIHR3byBicmFuY2hlcyBsaWtlIHRoaXM6CisjCisjIEEgLSBCIC0gQyAtIEQgLSBFCisjICAgXAorIyAgICAgRiAtIEcgLSBICisjICAgICAgIFwKKyMgICAgICAgICBJCisjCisjIHdoZXJlIEIsIEQgYW5kIEcgdG91Y2ggdGhlIHNhbWUgZmlsZS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBIGZpbGUxICYmCisJdGVzdF9jb21taXQgQiBmaWxlMSAxICYmCisJdGVzdF9jb21taXQgQyBmaWxlMiAmJgorCXRlc3RfY29tbWl0IEQgZmlsZTEgMiAmJgorCXRlc3RfY29tbWl0IEUgZmlsZTMgJiYKKwlnaXQgY2hlY2tvdXQgQSAmJgorCXRlc3RfY29tbWl0IEYgZmlsZTQgJiYKKwl0ZXN0X2NvbW1pdCBHIGZpbGUxIDMgJiYKKwl0ZXN0X2NvbW1pdCBIIGZpbGU1ICYmCisJZ2l0IGNoZWNrb3V0IEYgJiYKKwl0ZXN0X2NvbW1pdCBJIGZpbGU2CisnCisKKyMgQSAtIEIgLSBDIC0gRCAtIEUKKyMgICBcICAgICAgICAgICAgIFwgXAorIyAgICAgRiAtIEcgLSBIIC0tIEwgXCAgICAgICAgLS0+ICAgTAorIyAgICAgICBcICAgICAgICAgICAgfCAgICAgICAgICAgICAgIFwKKyMgICAgICAgICBJIC0tIEcyIC0tIEogLS0gSyAgICAgICAgICAgSSAtLSBLCisjIEcyID0gc2FtZSBjaGFuZ2VzIGFzIEcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXAgc2FtZS1yZXNvbHV0aW9uIG1lcmdlcyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IEggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCXRlc3RfY29tbWl0IEwgZmlsZTEgMjMgJiYKKwlnaXQgY2hlY2tvdXQgSSAmJgorCXRlc3RfY29tbWl0IEcyIGZpbGUxIDMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCXRlc3RfY29tbWl0IEogZmlsZTEgMjMgJiYKKwl0ZXN0X2NvbW1pdCBLIGZpbGU3IGZpbGU3ICYmCisJZ2l0IHJlYmFzZSAtaSAtcCBMICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSA9ICQoZ2l0IHJldi1wYXJzZSBMKSAmJgorCXRlc3QgIjIzIiA9ICIkKGNhdCBmaWxlMSkiICYmCisJdGVzdCAiSSIgPSAiJChjYXQgZmlsZTYpIiAmJgorCXRlc3QgImZpbGU3IiA9ICIkKGNhdCBmaWxlNykiCisnCisKKyMgQSAtIEIgLSBDIC0gRCAtIEUKKyMgICBcICAgICAgICAgICAgIFwgXAorIyAgICAgRiAtIEcgLSBIIC0tIEwyIFwgICAgICAgIC0tPiAgIEwyCisjICAgICAgIFwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBcCisjICAgICAgICAgSSAtLSBHMyAtLS0gSjIgLS0gSzIgICAgICAgICAgIEkgLS0gRzMgLS0gSzIKKyMgRzIgPSBkaWZmZXJlbnQgY2hhbmdlcyBhcyBHCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZWVwIGRpZmZlcmVudC1yZXNvbHV0aW9uIG1lcmdlcyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IEggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCXRlc3RfY29tbWl0IEwyIGZpbGUxIDIzICYmCisJZ2l0IGNoZWNrb3V0IEkgJiYKKwl0ZXN0X2NvbW1pdCBHMyBmaWxlMSA0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwl0ZXN0X2NvbW1pdCBKMiBmaWxlMSAyNCAmJgorCXRlc3RfY29tbWl0IEsyIGZpbGU3IGZpbGU3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtcCBMMiAmJgorCWVjaG8gMjM0ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eXikgPSAkKGdpdCByZXYtcGFyc2UgTDIpICYmCisJdGVzdCAiMjM0IiA9ICIkKGNhdCBmaWxlMSkiICYmCisJdGVzdCAiSSIgPSAiJChjYXQgZmlsZTYpIiAmJgorCXRlc3QgImZpbGU3IiA9ICIkKGNhdCBmaWxlNykiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxMS1yZWJhc2UtcHJlc2VydmUtYXJvdW5kLW1lcmdlcy5zaCBiL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmI0NWU3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBTdGVwaGVuIEhhYmVybWFuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgcHJlc2VydmUgbWVyZ2VzCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2Ugd2l0aCAtcCBhbmQgdHJpZXMgdG8gc3F1YXNoIGEgY29tbWl0IGZyb20gYWZ0ZXIKK2EgbWVyZ2UgdG8gYmVmb3JlIHRoZSBtZXJnZS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUkVCQVNFX1A7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IHJlYmFzZSAtcCB0ZXN0cywgYXMgYXNrZWQgZm9yJworCXRlc3RfZG9uZQorZmkKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCisjIHNldCB1cCB0d28gYnJhbmNoZXMgbGlrZSB0aGlzOgorIworIyBBMSAtIEIxIC0gRDEgLSBFMSAtIEYxCisjICAgICAgIFwgICAgICAgIC8KKyMgICAgICAgIC0tIEMxIC0tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQTEgJiYKKwl0ZXN0X2NvbW1pdCBCMSAmJgorCXRlc3RfY29tbWl0IEMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBCMSAmJgorCXRlc3RfY29tbWl0IEQxICYmCisJdGVzdF9tZXJnZSBFMSBDMSAmJgorCXRlc3RfY29tbWl0IEYxCisnCisKKyMgU2hvdWxkIHJlc3VsdCBpbjoKKyMKKyMgQTEgLSBCMSAtIEQyIC0gRTIKKyMgICAgICAgXCAgICAgICAgLworIyAgICAgICAgLS0gQzEgLS0KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCBGMSBpbnRvIEQxJyAnCisJRkFLRV9MSU5FUz0iMSBzcXVhc2ggNCAyIDMiIGdpdCByZWJhc2UgLWkgLXAgQjEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEMxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEIxKSIgJiYKKwlnaXQgdGFnIEUyCisnCisKKyMgU3RhcnQgd2l0aDoKKyMKKyMgQTEgLSBCMSAtIEQyIC0gRTIKKyMgIFwKKyMgICBHMSAtLS0tIEwxIC0tLS0gTTEKKyMgICAgXCAgICAgICAgICAgICAvCisjICAgICBIMSAtLSBKMSAtLSBLMQorIyAgICAgIFwgICAgICAgICAvCisjICAgICAgICAtLSBJMSAtLQorIworIyBBbmQgcmViYXNlIEcxLi5NMSBvbnRvIEUyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB0d28gbGV2ZWxzIG9mIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IEExICYmCisJdGVzdF9jb21taXQgRzEgJiYKKwl0ZXN0X2NvbW1pdCBIMSAmJgorCXRlc3RfY29tbWl0IEkxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDMgSDEgJiYKKwl0ZXN0X2NvbW1pdCBKMSAmJgorCXRlc3RfbWVyZ2UgSzEgSTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBHMSAmJgorCXRlc3RfY29tbWl0IEwxICYmCisJdGVzdF9tZXJnZSBNMSBLMSAmJgorCUdJVF9FRElUT1I9OiBnaXQgcmViYXNlIC1pIC1wIEUyICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MykiID0gIiQoZ2l0IHJldi1wYXJzZSBFMikiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMn4yKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yXjFeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMl4xKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDEyLXJlYmFzZS1yb290LnNoIGIvdC90MzQxMi1yZWJhc2Utcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTYzMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxMi1yZWJhc2Utcm9vdC5zaApAQCAtMCwwICsxLDI4MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1yb290CisKK1Rlc3RzIGlmIGdpdCByZWJhc2UgLS1yb290IC0tb250byA8bmV3cGFyZW50PiBjYW4gcmViYXNlIHRoZSByb290IGNvbW1pdC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitsb2dfd2l0aF9uYW1lcyAoKSB7CisJZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAtLXBhcmVudHMgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIEhFQUQgfAorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz1yZWZzL2hlYWRzLyQxCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZXBvc2l0b3J5JyAnCisJdGVzdF9jb21taXQgMSBBICYmCisJdGVzdF9jb21taXQgMiBBICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvb3RoZXIgJiYKKwlybSAuZ2l0L2luZGV4ICYmCisJdGVzdF9jb21taXQgMyBCICYmCisJdGVzdF9jb21taXQgMWIgQSAxICYmCisJdGVzdF9jb21taXQgNCBCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJvb3QgZmFpbHMgd2l0aCB0b28gbWFueSBhcmdzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGZhaWwgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIgLS1yb290IGZhaWwgZmFpbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwcmUtcmViYXNlIGhvb2snICcKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJY2F0ID4uZ2l0L2hvb2tzL3ByZS1yZWJhc2UgPDxFT0YgJiYKKyMhJFNIRUxMX1BBVEgKK2VjaG8gIlwkMSxcJDIiID4uZ2l0L1BSRS1SRUJBU0UtSU5QVVQKK0VPRgorCWNobW9kICt4IC5naXQvaG9va3MvcHJlLXJlYmFzZQorJworY2F0ID4gZXhwZWN0IDw8RU9GCis0CiszCisyCisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCAtLW9udG8gPG5ld2Jhc2U+JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdvcmsgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBnb3QgY29ycmVjdCBpbnB1dCAoMSknICcKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6LS1yb290LAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IC0tb250byA8bmV3YmFzZT4gPGJyYW5jaD4nICcKKwlnaXQgYnJhbmNoIHdvcmsyIG90aGVyICYmCisJZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciB3b3JrMiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gcmViYXNlZDIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmViYXNlZDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBnb3QgY29ycmVjdCBpbnB1dCAoMiknICcKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6LS1yb290LHdvcmsyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgLS1vbnRvIDxuZXdiYXNlPicgJworCWdpdCBjaGVja291dCAtYiB3b3JrMyBvdGhlciAmJgorCWdpdCByZWJhc2UgLWkgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQzICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDMpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCAtLW9udG8gPG5ld2Jhc2U+IDxicmFuY2g+JyAnCisJZ2l0IGJyYW5jaCB3b3JrNCBvdGhlciAmJgorCWdpdCByZWJhc2UgLWkgLS1yb290IC0tb250byBtYXN0ZXIgd29yazQgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQ0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDQpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCx3b3JrNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICdyZWJhc2UgLWkgLXAgd2l0aCBsaW5lYXIgaGlzdG9yeScgJworCWdpdCBjaGVja291dCAtYiB3b3JrNSBvdGhlciAmJgorCWdpdCByZWJhc2UgLWkgLXAgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQ1ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlYmFzZWQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgJ3ByZS1yZWJhc2UgZ290IGNvcnJlY3QgaW5wdXQgKDUpJyAnCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gei0tcm9vdCwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1lcmdlIGhpc3RvcnknICcKKwlnaXQgY2hlY2tvdXQgb3RoZXJeICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCA1IEMgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgbWVyZ2Ugc2lkZQorJworCitjYXQgPiBleHBlY3Qtc2lkZSA8PCdFT0YnCitjb21taXQgd29yazYgd29yazZ+MSB3b3JrNl4yCitNZXJnZSBicmFuY2ggJ3NpZGUnIGludG8gb3RoZXIKK2NvbW1pdCB3b3JrNl4yIHdvcms2fjIKKzUKK2NvbW1pdCB3b3JrNn4xIHdvcms2fjIKKzQKK2NvbW1pdCB3b3JrNn4yIHdvcms2fjMKKzMKK2NvbW1pdCB3b3JrNn4zIHdvcms2fjQKKzIKK2NvbW1pdCB3b3JrNn40CisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCAncmViYXNlIC1pIC1wIHdpdGggbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yazYgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC1wIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJbG9nX3dpdGhfbmFtZXMgd29yazYgPiByZWJhc2VkNiAmJgorCXRlc3RfY21wIGV4cGVjdC1zaWRlIHJlYmFzZWQ2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzZWNvbmQgcm9vdCBhbmQgbWVyZ2UnICcKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy90aGlyZCAmJgorCXJtIC5naXQvaW5kZXggJiYKKwlybSBBIEIgQyAmJgorCXRlc3RfY29tbWl0IDYgRCAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBtZXJnZSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgdGhpcmQKKycKKworY2F0ID4gZXhwZWN0LXRoaXJkIDw8J0VPRicKK2NvbW1pdCB3b3JrNyB3b3JrN34xIHdvcms3XjIKK01lcmdlIGJyYW5jaCAndGhpcmQnIGludG8gb3RoZXIKK2NvbW1pdCB3b3JrN14yIHdvcms3fjQKKzYKK2NvbW1pdCB3b3JrN34xIHdvcms3fjIgd29yazd+MV4yCitNZXJnZSBicmFuY2ggJ3NpZGUnIGludG8gb3RoZXIKK2NvbW1pdCB3b3JrN34xXjIgd29yazd+MworNQorY29tbWl0IHdvcms3fjIgd29yazd+MworNAorY29tbWl0IHdvcms3fjMgd29yazd+NAorMworY29tbWl0IHdvcms3fjQgd29yazd+NQorMgorY29tbWl0IHdvcms3fjUKKzEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICdyZWJhc2UgLWkgLXAgd2l0aCB0d28gcm9vdHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yazcgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIC1wIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJbG9nX3dpdGhfbmFtZXMgd29yazcgPiByZWJhc2VkNyAmJgorCXRlc3RfY21wIGV4cGVjdC10aGlyZCByZWJhc2VkNworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwcmUtcmViYXNlIGhvb2sgdGhhdCBmYWlscycgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwljYXQgPi5naXQvaG9va3MvcHJlLXJlYmFzZSA8PEVPRiAmJgorIyEkU0hFTExfUEFUSAorZmFsc2UKK0VPRgorCWNobW9kICt4IC5naXQvaG9va3MvcHJlLXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgc3RvcHMgcmViYXNlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHN0b3BzMSBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3N0b3BzMSAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IG90aGVyLi4uc3RvcHMxIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBzdG9wcyByZWJhc2UgLWknICcKKwlnaXQgY2hlY2tvdXQgLWIgc3RvcHMyIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0genJlZnMvaGVhZHMvc3RvcHMyICYmCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3Qgb3RoZXIuLi5zdG9wczIgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHByZS1yZWJhc2UgaG9vaycgJworCXJtIC1mIC5naXQvaG9va3MvcHJlLXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYSBjb25mbGljdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGNvbmZsaWN0ID4gQiAmJgorCWdpdCBhZGQgQiAmJgorCWdpdCBjb21taXQgLW0gY29uZmxpY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChmaXJzdCBwYXJ0KScgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdDEgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC11IHwgZ3JlcCAiQiQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeCB0aGUgY29uZmxpY3QnICcKKwllY2hvIDMgPiBCICYmCisJZ2l0IGFkZCBCCisnCisKK2NhdCA+IGV4cGVjdC1jb25mbGljdCA8PEVPRgorNgorNQorNAorMworY29uZmxpY3QKKzIKKzEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IHdpdGggY29uZmxpY3QgKHNlY29uZCBwYXJ0KScgJworCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gY29uZmxpY3QxICYmCisJdGVzdF9jbXAgZXhwZWN0LWNvbmZsaWN0IGNvbmZsaWN0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHdpdGggY29uZmxpY3QgKGZpcnN0IHBhcnQpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0MiBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXUgfCBncmVwICJCJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4IHRoZSBjb25mbGljdCcgJworCWVjaG8gMyA+IEIgJiYKKwlnaXQgYWRkIEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChzZWNvbmQgcGFydCknICcKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IGNvbmZsaWN0MiAmJgorCXRlc3RfY21wIGV4cGVjdC1jb25mbGljdCBjb25mbGljdDIKKycKKworY2F0ID5leHBlY3QtY29uZmxpY3QtcCA8PFxFT0YKK2NvbW1pdCBjb25mbGljdDMgY29uZmxpY3QzfjEgY29uZmxpY3QzXjIKK01lcmdlIGJyYW5jaCAndGhpcmQnIGludG8gb3RoZXIKK2NvbW1pdCBjb25mbGljdDNeMiBjb25mbGljdDN+NAorNgorY29tbWl0IGNvbmZsaWN0M34xIGNvbmZsaWN0M34yIGNvbmZsaWN0M34xXjIKK01lcmdlIGJyYW5jaCAnc2lkZScgaW50byBvdGhlcgorY29tbWl0IGNvbmZsaWN0M34xXjIgY29uZmxpY3QzfjMKKzUKK2NvbW1pdCBjb25mbGljdDN+MiBjb25mbGljdDN+MworNAorY29tbWl0IGNvbmZsaWN0M34zIGNvbmZsaWN0M340CiszCitjb21taXQgY29uZmxpY3QzfjQgY29uZmxpY3QzfjUKK2NvbmZsaWN0Citjb21taXQgY29uZmxpY3QzfjUgY29uZmxpY3QzfjYKKzIKK2NvbW1pdCBjb25mbGljdDN+NgorMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgJ3JlYmFzZSAtaSAtcCAtLXJvb3Qgd2l0aCBjb25mbGljdCAoZmlyc3QgcGFydCknICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QzIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtcCAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtdSB8IGdyZXAgIkIkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXggdGhlIGNvbmZsaWN0JyAnCisJZWNobyAzID4gQiAmJgorCWdpdCBhZGQgQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICdyZWJhc2UgLWkgLXAgLS1yb290IHdpdGggY29uZmxpY3QgKHNlY29uZCBwYXJ0KScgJworCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWxvZ193aXRoX25hbWVzIGNvbmZsaWN0MyA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0LWNvbmZsaWN0LXAgb3V0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxMy1yZWJhc2UtaG9vay5zaCBiL3QvdDM0MTMtcmViYXNlLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjY4MzNlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTMtcmViYXNlLWhvb2suc2gKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIHdpdGggaXRzIGhvb2socyknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyBnb29kYnllID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCWVjaG8gd29ybGQgPmdpdCAmJgorCWdpdCBhZGQgZ2l0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLS1ncmFwaCAtLWFsbCAmJgorCWdpdCBicmFuY2ggdGVzdCBzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIG1hc3RlciAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwcmUtcmViYXNlIGhvb2snICcKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJY2F0ID4uZ2l0L2hvb2tzL3ByZS1yZWJhc2UgPDxFT0YgJiYKKyMhJFNIRUxMX1BBVEgKK2VjaG8gIlwkMSxcJDIiID4uZ2l0L1BSRS1SRUJBU0UtSU5QVVQKK0VPRgorCWNobW9kICt4IC5naXQvaG9va3MvcHJlLXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICgxKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQgJiYKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6bWFzdGVyLAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBnZXRzIGNvcnJlY3QgaW5wdXQgKDIpJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciB0ZXN0ICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkICYmCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gem1hc3Rlcix0ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBnZXRzIGNvcnJlY3QgaW5wdXQgKDMpJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgdGVzdCAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZCAmJgorCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHptYXN0ZXIsdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICg0KScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQgJiYKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6bWFzdGVyLAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBnZXRzIGNvcnJlY3QgaW5wdXQgKDUpJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIG1hc3RlciB0ZXN0ICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkICYmCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gem1hc3Rlcix0ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZS1yZWJhc2UgaG9vayBnZXRzIGNvcnJlY3QgaW5wdXQgKDYpJyAnCisJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgdGVzdCAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZCAmJgorCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHptYXN0ZXIsdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwcmUtcmViYXNlIGhvb2sgdGhhdCBmYWlscycgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwljYXQgPi5naXQvaG9va3MvcHJlLXJlYmFzZSA8PEVPRiAmJgorIyEkU0hFTExfUEFUSAorZmFsc2UKK0VPRgorCWNobW9kICt4IC5naXQvaG9va3MvcHJlLXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgc3RvcHMgcmViYXNlICgxKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3Rlc3QgJiYKKwl0ZXN0IDAgPSAkKGdpdCByZXYtbGlzdCBIRUFELi4uc2lkZSB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgc3RvcHMgcmViYXNlICgyKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEVESVRPUj06IGdpdCByZWJhc2UgLWkgbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy90ZXN0ICYmCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3QgSEVBRC4uLnNpZGUgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbm8tdmVyaWZ5IG92ZXJyaWRlcyBwcmUtcmViYXNlICgxKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW5vLXZlcmlmeSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3Rlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbm8tdmVyaWZ5IG92ZXJyaWRlcyBwcmUtcmViYXNlICgyKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtLW5vLXZlcmlmeSAtaSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3Rlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE0LXJlYmFzZS1wcmVzZXJ2ZS1vbnRvLnNoIGIvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MmUwNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEdyZWcgUHJpY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtcCBzaG91bGQgcmVzcGVjdCAtLW9udG8KKworSW4gYSByZWJhc2Ugd2l0aCAtLW9udG8sIHdlIHNob3VsZCByZXdyaXRlIGFsbCB0aGUgY29tbWl0cyB0aGF0CithcmVuJyInIid0IG9uIHRvcCBvZiAkT05UTywgZXZlbiBpZiB0aGV5IGFyZSBvbiB0b3Agb2YgJFVQU1RSRUFNLgorJworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBSRUJBU0VfUDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgcmViYXNlIC1wIHRlc3RzLCBhcyBhc2tlZCBmb3InCisJdGVzdF9kb25lCitmaQorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworIyBTZXQgdXAgYnJhbmNoZXMgbGlrZSB0aGlzOgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLUcxCisjICBcICAgIFwgICAgICAgICAgICAgLworIyAgIFwgICAgXC0tQzEtLS1EMS0tLworIyAgICBIMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEExICYmCisJdGVzdF9jb21taXQgQjEgJiYKKwl0ZXN0X2NvbW1pdCBDMSAmJgorCXRlc3RfY29tbWl0IEQxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBCMSAmJgorCXRlc3RfY29tbWl0IEUxICYmCisJdGVzdF9jb21taXQgRjEgJiYKKwl0ZXN0X21lcmdlIEcxIEQxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBMSAmJgorCXRlc3RfY29tbWl0IEgxCisnCisKKyMgTm93IHJlYmFzZSBtZXJnZSBHMSBmcm9tIGJvdGggYnJhbmNoZXMnIGJhc2UgQjEsIGJvdGggc2hvdWxkIG1vdmU6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIFwKKyMgICAgIEgxLS0tRTItLS1GMi0tLUcyCisjICAgICAgXCAgICAgICAgICAgICAvCisjICAgICAgIFwtLUMyLS0tRDItLS8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gQjEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEIxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMV4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMV4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIKKycKKworIyBPbiB0aGUgb3RoZXIgaGFuZCBpZiByZWJhc2UgZnJvbSBFMSB3aGljaCBpcyB3aXRoaW4gb25lIGJyYW5jaCwKKyMgdGhlbiB0aGUgb3RoZXIgYnJhbmNoIHN0YXlzOgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLUcxCisjICBcICAgIFwgICAgICAgICAgICAgLworIyAgIFwgICAgXC0tQzEtLS1EMS0tLworIyAgICBcICAgICAgICAgICAgIFwKKyMgICAgIEgxLS0tLS1GMy0tLS0tRzMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gRTEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEUxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMV4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEQxKSIKKycKKworIyBBbmQgdGhlIHNhbWUgaWYgd2UgcmViYXNlIGZyb20gYSBjb21taXQgaW4gdGhlIHNlY29uZC1wYXJlbnQgYnJhbmNoLgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLS1HMQorIyAgXCAgICBcICAgICAgICAgIFwgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLVwtLworIyAgICBcICAgICAgICAgICAgICAgXAorIyAgICAgSDEtLS0tLS1EMy0tLS0tLUc0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmcm9tIEMxIG9udG8gSDEnICcKKwlnaXQgY2hlY2tvdXQgRzEgJiYKKwlnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1wcmV0dHk9b25lbGluZSBDMS4uRzEgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBIMSBDMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBGMSkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxNS1yZWJhc2UtYXV0b3NxdWFzaC5zaCBiL3QvdDM0MTUtcmViYXNlLWF1dG9zcXVhc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDkzZGU5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTUtcmViYXNlLWF1dG9zcXVhc2guc2gKQEAgLTAsMCArMSw0MjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhdXRvIHNxdWFzaCcKKworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIDAgPmZpbGUwICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZWNobyAwID5maWxlMSAmJgorCWVjaG8gMiA+ZmlsZTIgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiICYmCisJZ2l0IHRhZyBmaXJzdC1jb21taXQgJiYKKwllY2hvIDMgPmZpbGUzICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGNvbW1pdCIgJiYKKwlnaXQgdGFnIGJhc2UKKycKKwordGVzdF9hdXRvX2ZpeHVwICgpIHsKKwlub19zcXVhc2g9ICYmCisJaWYgdGVzdCAieCQxIiA9ICd4IScKKwl0aGVuCisJCW5vX3NxdWFzaD10cnVlCisJCXNoaWZ0CisJZmkgJiYKKworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZml4dXAhIGZpcnN0IiAmJgorCisJZ2l0IHRhZyAkMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgJDIgLWkgSEVBRF5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwlpZiB0ZXN0IC1uICIkbm9fc3F1YXNoIgorCXRoZW4KKwkJdGVzdF9saW5lX2NvdW50ID0gNCBhY3R1YWwKKwllbHNlCisJCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlICQxICYmCisJCWVjaG8gMSA+ZXhwZWN0ICYmCisJCWdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmZpbGUxID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5jb21taXQgJiYKKwkJZ3JlcCBmaXJzdCBjb21taXQgPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbAorCWZpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gZml4dXAgKG9wdGlvbiknICcKKwl0ZXN0X2F1dG9fZml4dXAgZmluYWwtZml4dXAtb3B0aW9uIC0tYXV0b3NxdWFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIGZpeHVwIChjb25maWcpJyAnCisJZ2l0IGNvbmZpZyByZWJhc2UuYXV0b3NxdWFzaCB0cnVlICYmCisJdGVzdF9hdXRvX2ZpeHVwIGZpbmFsLWZpeHVwLWNvbmZpZy10cnVlICYmCisJdGVzdF9hdXRvX2ZpeHVwICEgZml4dXAtY29uZmlnLXRydWUtbm8gLS1uby1hdXRvc3F1YXNoICYmCisJZ2l0IGNvbmZpZyByZWJhc2UuYXV0b3NxdWFzaCBmYWxzZSAmJgorCXRlc3RfYXV0b19maXh1cCAhIGZpbmFsLWZpeHVwLWNvbmZpZy1mYWxzZQorJworCit0ZXN0X2F1dG9fc3F1YXNoICgpIHsKKwlub19zcXVhc2g9ICYmCisJaWYgdGVzdCAieCQxIiA9ICd4IScKKwl0aGVuCisJCW5vX3NxdWFzaD10cnVlCisJCXNoaWZ0CisJZmkgJiYKKworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISBmaXJzdCIgJiYKKworCWdpdCB0YWcgJDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlICQyIC1pIEhFQUReXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJaWYgdGVzdCAtbiAiJG5vX3NxdWFzaCIKKwl0aGVuCisJCXRlc3RfbGluZV9jb3VudCA9IDQgYWN0dWFsCisJZWxzZQorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCQlnaXQgZGlmZiAtLWV4aXQtY29kZSAkMSAmJgorCQllY2hvIDEgPmV4cGVjdCAmJgorCQlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+Y29tbWl0ICYmCisJCWdyZXAgZmlyc3QgY29tbWl0ID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwKKwlmaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCAob3B0aW9uKScgJworCXRlc3RfYXV0b19zcXVhc2ggZmluYWwtc3F1YXNoIC0tYXV0b3NxdWFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCAoY29uZmlnKScgJworCWdpdCBjb25maWcgcmViYXNlLmF1dG9zcXVhc2ggdHJ1ZSAmJgorCXRlc3RfYXV0b19zcXVhc2ggZmluYWwtc3F1YXNoLWNvbmZpZy10cnVlICYmCisJdGVzdF9hdXRvX3NxdWFzaCAhIHNxdWFzaC1jb25maWctdHJ1ZS1ubyAtLW5vLWF1dG9zcXVhc2ggJiYKKwlnaXQgY29uZmlnIHJlYmFzZS5hdXRvc3F1YXNoIGZhbHNlICYmCisJdGVzdF9hdXRvX3NxdWFzaCAhIGZpbmFsLXNxdWFzaC1jb25maWctZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc3BlbGxlZCBhdXRvIHNxdWFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISBmb3JzdCIgJiYKKwlnaXQgdGFnIGZpbmFsLW1pc3NxdWFzaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUReXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaW5hbC1taXNzcXVhc2ggJiYKKwlnaXQgcmV2LWxpc3QgZmluYWwtbWlzc3F1YXNoLi4uSEVBRCA+bGlzdCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIHRoYXQgbWF0Y2hlcyAyIGNvbW1pdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDQgPmZpbGU0ICYmCisJZ2l0IGFkZCBmaWxlNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IG5ldyBjb21taXQiICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghIGZpcnN0IiAmJgorCWdpdCB0YWcgZmluYWwtbXVsdGlzcXVhc2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEfjQgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaW5hbC1tdWx0aXNxdWFzaCAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF5eOmZpbGUxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gPmNvbW1pdCAmJgorCWdyZXAgZmlyc3QgY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0ICYmCisJZ3JlcCBmaXJzdCBjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIHRoYXQgbWF0Y2hlcyBhIGNvbW1pdCBhZnRlciB0aGUgc3F1YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghIHRoaXJkIiAmJgorCWVjaG8gNCA+ZmlsZTQgJiYKKwlnaXQgYWRkIGZpbGU0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidGhpcmQgY29tbWl0IiAmJgorCWdpdCB0YWcgZmluYWwtcHJlc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRH40ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtcHJlc3F1YXNoICYmCisJZWNobyAwID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXl46ZmlsZTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmZpbGUxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlncmVwIHRoaXJkIGNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5jb21taXQgJiYKKwlncmVwIHRoaXJkIGNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIHRoYXQgbWF0Y2hlcyBhIHNoYTEnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCW9pZD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghICRvaWQiICYmCisJZ2l0IHRhZyBmaW5hbC1zaGFzcXVhc2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtc2hhc3F1YXNoICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPmNvbW1pdCAmJgorCWdyZXAgc3F1YXNoIGNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0byBzcXVhc2ggdGhhdCBtYXRjaGVzIGxvbmdlciBzaGExJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MTEgSEVBRF4pICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISAkb2lkIiAmJgorCWdpdCB0YWcgZmluYWwtbG9uZ3NoYXNxdWFzaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUReXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaW5hbC1sb25nc2hhc3F1YXNoICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPmNvbW1pdCAmJgorCWdyZXAgc3F1YXNoIGNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwKKycKKwordGVzdF9hdXRvX2NvbW1pdF9mbGFncyAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tJDEgZmlyc3QtY29tbWl0ICYmCisJZ2l0IHRhZyBmaW5hbC1jb21taXQtJDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtY29tbWl0LSQxICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPmNvbW1pdCAmJgorCWdyZXAgZmlyc3QgY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkMiBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGNvbW1pdCAtLWZpeHVwJyAnCisJdGVzdF9hdXRvX2NvbW1pdF9mbGFncyBmaXh1cCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBjb21taXQgLS1zcXVhc2gnICcKKwl0ZXN0X2F1dG9fY29tbWl0X2ZsYWdzIHNxdWFzaCAyCisnCisKK3Rlc3RfYXV0b19maXh1cF9maXh1cCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICIkMSEgZmlyc3QiICYmCisJZWNobyAyID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICIkMSEgJDIhIGZpcnN0IiAmJgorCWdpdCB0YWcgImZpbmFsLSQxLSQyIiAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJc2V0X2NhdF90b2RvX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eXiA+YWN0dWFsICYmCisJCWhlYWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwkJcGFyZW50MT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJiYKKwkJcGFyZW50Mj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXl4pICYmCisJCXBhcmVudDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5eXikgJiYKKwkJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkJcGljayAkcGFyZW50MyBmaXJzdCBjb21taXQKKwkJJDEgJHBhcmVudDEgJDEhIGZpcnN0CisJCSQxICRoZWFkICQxISAkMiEgZmlyc3QKKwkJcGljayAkcGFyZW50MiBzZWNvbmQgY29tbWl0CisJCUVPRgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAiZmluYWwtJDEtJDIiICYmCisJZWNobyAyID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPmNvbW1pdCAmJgorCWdyZXAgZmlyc3QgY29tbWl0ID5hY3R1YWwgJiYKKwlpZiB0ZXN0ICIkMSIgPSAiZml4dXAiCisJdGhlbgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbAorCWVsaWYgdGVzdCAiJDEiID0gInNxdWFzaCIKKwl0aGVuCisJCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsCisJZWxzZQorCQlmYWxzZQorCWZpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdmaXh1cCEgZml4dXAhJyAnCisJdGVzdF9hdXRvX2ZpeHVwX2ZpeHVwIGZpeHVwIGZpeHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdmaXh1cCEgc3F1YXNoIScgJworCXRlc3RfYXV0b19maXh1cF9maXh1cCBmaXh1cCBzcXVhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3NxdWFzaCEgc3F1YXNoIScgJworCXRlc3RfYXV0b19maXh1cF9maXh1cCBzcXVhc2ggc3F1YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdzcXVhc2ghIGZpeHVwIScgJworCXRlc3RfYXV0b19maXh1cF9maXh1cCBzcXVhc2ggZml4dXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2F1dG9zcXVhc2ggd2l0aCBjdXN0b20gaW5zdCBmb3JtYXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlYmFzZS5pbnN0cnVjdGlvbkZvcm1hdCAiWyVhbiBAICVhcl0gJXMiICAmJgorCWVjaG8gMiA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJb2lkPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReKSAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgJG9pZCIgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCXN1YmplY3Q9JChnaXQgbG9nIC1uIDEgLS1mb3JtYXQ9JXMgSEVBRH4yKSAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgJHN1YmplY3QiICYmCisJZ2l0IHRhZyBmaW5hbC1zcXVhc2gtaW5zdEZtdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUR+NCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLXNxdWFzaC1pbnN0Rm10ICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPmNvbW1pdCAmJgorCWdyZXAgc3F1YXNoIGNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NxdWFzaCB3aXRoIGVtcHR5IGN1c3RvbSBpbnN0cnVjdGlvbkZvcm1hdCcgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCXRlc3RfY29tbWl0IGVtcHR5LWluc3RydWN0aW9uRm9ybWF0LXRlc3QgJiYKKwkoCisJCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHJlYmFzZS5pbnN0cnVjdGlvbkZvcm1hdD0gXAorCQkJcmViYXNlIC0tYXV0b3NxdWFzaCAgLS1mb3JjZS1yZWJhc2UgLWkgSEVBRF4gPmFjdHVhbCAmJgorCQlnaXQgbG9nIC0xIC0tZm9ybWF0PSJwaWNrICVoICVzIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3NldF9iYWNrdXBfZWRpdG9yICgpIHsKKwl3cml0ZV9zY3JpcHQgYmFja3VwLWVkaXRvci5zaCA8PC1cRU9GCisJY3AgIiQxIiAuZ2l0L2JhY2t1cC0iJChiYXNlbmFtZSAiJDEiKSIKKwlFT0YKKwl0ZXN0X3NldF9lZGl0b3IgIiRQV0QvYmFja3VwLWVkaXRvci5zaCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NxdWFzaCB3aXRoIG11bHRpcGxlIGVtcHR5IHBhdGNoZXMnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkyIiAmJgorCXRlc3RfdGljayAmJgorCT5maXh1cCAmJgorCWdpdCBhZGQgZml4dXAgJiYKKwlnaXQgY29tbWl0IC0tZml4dXAgSEVBRF5eICYmCisJKAorCQlzZXRfYmFja3VwX2VkaXRvciAmJgorCQlHSVRfVVNFX1JFQkFTRV9IRUxQRVI9ZmFsc2UgXAorCQlnaXQgcmViYXNlIC1pIC0tZm9yY2UtcmViYXNlIC0tYXV0b3NxdWFzaCBIRUFEfjQgJiYKKwkJZ3JlcCBlbXB0eTIgLmdpdC9iYWNrdXAtZ2l0LXJlYmFzZS10b2RvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBzcGFjZXMgYWZ0ZXIgZml4dXAhJyAnCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X2NvbW1pdCB0by1maXh1cCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZml4dXAhICB0by1maXh1cCIgJiYKKwlnaXQgcmViYXNlIC1pIC0tYXV0b3NxdWFzaCAtLWtlZXAtZW1wdHkgSEVBRH4yICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0ICRiYXNlID0gJHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cmFwcGVkIG9yaWdpbmFsIHN1YmplY3QnICcKKwlpZiB0ZXN0IC1kIC5naXQvcmViYXNlLW1lcmdlOyB0aGVuIGdpdCByZWJhc2UgLS1hYm9ydDsgZmkgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIndyYXBwZWQgc3ViamVjdCIgPndyYXBwZWQgJiYKKwlnaXQgYWRkIHdyYXBwZWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIiQocHJpbnRmICJUb1xuZml4dXAiKSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZpeHVwISBUbyBmaXh1cCIgJiYKKwlnaXQgcmViYXNlIC1pIC0tYXV0b3NxdWFzaCAtLWtlZXAtZW1wdHkgSEVBRH4yICYmCisJcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0ICRiYXNlID0gJHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYm9ydCBsYXN0IHNxdWFzaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc29tZS1zcXVhc2hlcyAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmaXJzdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLXNxdWFzaCBIRUFEICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNlY29uZCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLXNxdWFzaCBIRUFEICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29yZS5lZGl0b3I9ImdyZXAgLXEgXnBpY2siIFwKKwkJcmViYXNlIC1raSAtLWF1dG9zcXVhc2ggSEVBRH40ICYmCisJOiBkbyBub3QgZmluaXNoIHRoZSBzcXVhc2gsIGJ1dCByZXNvbHZlIGl0IG1hbnVhbGx5ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYW1lbmQgLW0gZWRpdGVkLWZpcnN0ICYmCisJZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwlnaXQgc2hvdyA+YWN0dWFsICYmCisJISBncmVwIGZpcnN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTYtcmViYXNlLW9udG8tdGhyZWVkb3RzLnNoIGIvdC90MzQxNi1yZWJhc2Utb250by10aHJlZWRvdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWMyNTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTYtcmViYXNlLW9udG8tdGhyZWVkb3RzLnNoCkBAIC0wLDAgKzEsMTYyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLW9udG8gQS4uLkInCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1yZWJhc2Uuc2giCisKKyMgUmViYXNlIG9ubHkgdGhlIHRpcCBjb21taXQgb2YgInRvcGljIiBvbiBtZXJnZSBiYXNlIGJldHdlZW4gIm1hc3RlciIKKyMgYW5kICJ0b3BpYyIuICBDYW5ub3QgZG8gdGhpcyBmb3IgInNpZGUiIHdpdGggIm1hc3RlciIgYmVjYXVzZSB0aGVyZQorIyBpcyBubyBzaW5nbGUgbWVyZ2UgYmFzZS4KKyMKKyMKKyMJICAgIEYtLS1HIHRvcGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHJworIwkgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLworIyBBLS0tQi0tLUMtLS1ELS0tRSBtYXN0ZXIgICAgICAtLT4gICAgICAgQS0tLUItLS1DLS0tRC0tLUUKKyMgICAgICBcICAgXCAvCisjCVwgICB4CisjCSBcIC8gXAorIwkgIEgtLS1JLS0tSi0tLUsgc2lkZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCXRlc3RfY29tbWl0IEMgJiYKKwlnaXQgYnJhbmNoIHRvcGljICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBIICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBIICYmCisJZ2l0IHRhZyBEICYmCisJdGVzdF9jb21taXQgRSAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCXRlc3RfY29tbWl0IEYgJiYKKwl0ZXN0X2NvbW1pdCBHICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgQyAmJgorCWdpdCB0YWcgSSAmJgorCXRlc3RfY29tbWl0IEogJiYKKwl0ZXN0X2NvbW1pdCBLCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW9udG8gbWFzdGVyLi4udG9waWMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZ2l0IHJlc2V0IC0taGFyZCBHICYmCisKKwlnaXQgcmViYXNlIC0tb250byBtYXN0ZXIuLi50b3BpYyBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW9udG8gbWFzdGVyLi4uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCisJZ2l0IHJlYmFzZSAtLW9udG8gbWFzdGVyLi4uIEYgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBDXjAgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBtYXN0ZXIuLi5zaWRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBLICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIuLi5zaWRlIEoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi50b3BpYycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEcgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlFWFBFQ1RfQ09VTlQ9MSBnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi50b3BpYyBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUVYUEVDVF9DT1VOVD0xIGdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3Rlci4uLiBGICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgQ14wID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uc2lkZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSyAmJgorCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uc2lkZSBKCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWtlZXAtYmFzZSAtLW9udG8gaW5jb21wYXRpYmxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSAtLW9udG8gbWFzdGVyLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWtlZXAtYmFzZSAtLXJvb3QgaW5jb21wYXRpYmxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSAtLXJvb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0ta2VlcC1iYXNlIG1hc3RlciBmcm9tIHRvcGljJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCisJZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSBtYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIEMgPmJhc2UuZXhwZWN0ICYmCisJZ2l0IG1lcmdlLWJhc2UgbWFzdGVyIEhFQUQgPmJhc2UuYWN0dWFsICYmCisJdGVzdF9jbXAgYmFzZS5leHBlY3QgYmFzZS5hY3R1YWwgJiYKKworCWdpdCByZXYtcGFyc2UgSEVBRH4yID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIENeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1rZWVwLWJhc2UgbWFzdGVyIGZyb20gc2lkZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSyAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWtlZXAtYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0ta2VlcC1iYXNlIG1hc3RlciBmcm9tIHRvcGljJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRVhQRUNUX0NPVU5UPTIgZ2l0IHJlYmFzZSAtaSAtLWtlZXAtYmFzZSBtYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIEMgPmJhc2UuZXhwZWN0ICYmCisJZ2l0IG1lcmdlLWJhc2UgbWFzdGVyIEhFQUQgPmJhc2UuYWN0dWFsICYmCisJdGVzdF9jbXAgYmFzZS5leHBlY3QgYmFzZS5hY3R1YWwgJiYKKworCWdpdCByZXYtcGFyc2UgSEVBRH4yID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIENeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1rZWVwLWJhc2UgbWFzdGVyIGZyb20gc2lkZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSyAmJgorCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWtlZXAtYmFzZSBtYXN0ZXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE3LXJlYmFzZS13aGl0ZXNwYWNlLWZpeC5zaCBiL3QvdDM0MTctcmViYXNlLXdoaXRlc3BhY2UtZml4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NWNkYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDE3LXJlYmFzZS13aGl0ZXNwYWNlLWZpeC5zaApAQCAtMCwwICsxLDEyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeAorCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1maXggYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IHdvcmtzLgorJworCisuIC4vdGVzdC1saWIuc2gKKworIyBwcmVwYXJlIGluaXRpYWwgcmV2aXNpb24gb2YgImZpbGUiIHdpdGggYSBibGFuayBsaW5lIGF0IHRoZSBlbmQKK2NhdCA+ZmlsZSA8PEVPRgorYQorYgorYworCitFT0YKKworIyBleHBlY3RlZCBjb250ZW50cyBpbiAiZmlsZSIgYWZ0ZXIgcmViYXNlCitjYXQgPmV4cGVjdC1maXJzdCA8PEVPRgorYQorYgorYworRU9GCisKKyMgcHJlcGFyZSBzZWNvbmQgcmV2aXNpb24gb2YgImZpbGUiCitjYXQgPnNlY29uZCA8PEVPRgorYQorYgorYworCitkCitlCitmCisKKworCisKK0VPRgorCisjIGV4cGVjdGVkIGNvbnRlbnRzIGluIHNlY29uZCByZXZpc2lvbiBhZnRlciByZWJhc2UKK2NhdCA+ZXhwZWN0LXNlY29uZCA8PEVPRgorYQorYgorYworCitkCitlCitmCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgbGluZSBhdCBlbmQgb2YgZmlsZTsgZXh0ZW5kIGF0IGVuZCBvZiBmaWxlJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJJbml0aWFsIGVtcHR5IGNvbW1pdCIgJiYKKwlnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgorCW12IHNlY29uZCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IEhFQUReXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUReOmZpbGUgZXhwZWN0LWZpcnN0ICYmCisJdGVzdF9jbXAgZXhwZWN0LXNlY29uZCBmaWxlCisnCisKKyMgcHJlcGFyZSB0aGlyZCByZXZpc2lvbiBvZiAiZmlsZSIKK3NlZCAtZSdzL1ovLycgPnRoaXJkIDw8RU9GCithCitiCitjCisKK2QKK2UKK2YKKyAgICBaCisgWgoraAoraQoragoraworbAorRU9GCisKK3NlZCAtZSdzLyAvL2cnIDx0aGlyZCA+ZXhwZWN0LXRoaXJkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3byBibGFua3MgbGluZSBhdCBlbmQgb2YgZmlsZTsgZXh0ZW5kIGF0IGVuZCBvZiBmaWxlJyAnCisJY3AgdGhpcmQgZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBIRUFEXl4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXjpmaWxlIGV4cGVjdC1zZWNvbmQgJiYKKwl0ZXN0X2NtcCBleHBlY3QtdGhpcmQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lLCBidXQgZG8gbm90IHJlbW92ZSB0cmFpbGluZyBzcGFjZXMnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiLWJsYW5rLWF0LWVvbCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY3AgdGhpcmQgZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBIRUFEXl4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXjpmaWxlIGV4cGVjdC1zZWNvbmQgJiYKKwl0ZXN0X2NtcCBmaWxlIHRoaXJkCisnCisKK3NlZCAtZSdzL1ovLycgPmJlZ2lubmluZyA8PEVPRgorYQorCQkgICAgWgorICAgICAgIFoKK0VPRgorCitjYXQgPmV4cGVjdC1iZWdpbm5pbmcgPDxFT0YKK2EKKworCisxCisyCiszCis0Cis1CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXQgYmVnaW5uaW5nIG9mIGZpbGUnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiYmxhbmstYXQtZW9sIiAmJgorCWNwIGJlZ2lubmluZyBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiZWdpbm5pbmcgZmlsZSAmJgorCWZvciBpIGluIDEgMiAzIDQgNTsgZG8KKwkJZWNobyAkaQorCWRvbmUgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbW9yZSBmaWxlCSYmCisJZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IEhFQUReXiAmJgorCXRlc3RfY21wIGV4cGVjdC1iZWdpbm5pbmcgZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoIGIvdC90MzQxOC1yZWJhc2UtY29udGludWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2EyZGE5NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoCkBAIC0wLDAgKzEsMjkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtRjEiIEYxIDEgJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYyIiBGMiAyICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYyLW9uLXRvcGljLWJyYW5jaCIgRjIgMjIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3RpdmUgcmViYXNlIC0tY29udGludWUgd29ya3Mgd2l0aCB0b3VjaGVkIGZpbGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LTYwIEYxICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1pbnRlcmFjdGl2ZSByZWJhc2UgLS1jb250aW51ZSB3b3JrcyB3aXRoIHRvdWNoZWQgZmlsZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS0qICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIG1hc3RlciBtYXN0ZXIgdG9waWMgJiYKKwllY2hvICJSZXNvbHZlZCIgPkYyICYmCisJZ2l0IGFkZCBGMiAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tNjAgRjEgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tY29udGludWUgY2FuIG5vdCBiZSB1c2VkIHdpdGggb3RoZXIgb3B0aW9ucycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXYgLS1jb250aW51ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAtdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1jb250aW51ZSByZW1lbWJlcnMgbWVyZ2Ugc3RyYXRlZ3kgYW5kIG9wdGlvbnMnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYyLW9uLXRvcGljLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtRjMtb24tdG9waWMtYnJhbmNoIiBGMyAzMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIHRlc3QtYmluIGZ1bm55Lndhcy5ydW4iICYmCisJbWtkaXIgdGVzdC1iaW4gJiYKKwljYXQgPnRlc3QtYmluL2dpdC1tZXJnZS1mdW5ueSA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJY2FzZSAiXCQxIiBpbiAtLW9wdCkgOzsgKikgZXhpdCAyIDs7IGVzYWMKKwlzaGlmdCAmJgorCT5mdW5ueS53YXMucnVuICYmCisJZXhlYyBnaXQgbWVyZ2UtcmVjdXJzaXZlICJcJEAiCisJRU9GCisJY2htb2QgK3ggdGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55ICYmCisJKAorCQlQQVRIPS4vdGVzdC1iaW46JFBBVEggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtcyBmdW5ueSAtWG9wdCBtYXN0ZXIgdG9waWMKKwkpICYmCisJdGVzdCAtZiBmdW5ueS53YXMucnVuICYmCisJcm0gZnVubnkud2FzLnJ1biAmJgorCWVjaG8gIlJlc29sdmVkIiA+RjIgJiYKKwlnaXQgYWRkIEYyICYmCisJKAorCQlQQVRIPS4vdGVzdC1iaW46JFBBVEggJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCXRlc3QgLWYgZnVubnkud2FzLnJ1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1jb250aW51ZSBoYW5kbGVzIG1lcmdlIHN0cmF0ZWd5IGFuZCBvcHRpb25zJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdC1uZXctZmlsZS1GMi1vbi10b3BpYy1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaC1mb3ItZGFzaC1pIiBGMyAzMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIHRlc3QtYmluIGZ1bm55Lndhcy5ydW4gZnVubnkuYXJncyIgJiYKKwlta2RpciB0ZXN0LWJpbiAmJgorCWNhdCA+dGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55IDw8LUVPRiAmJgorCSMhJFNIRUxMX1BBVEgKKwllY2hvICJcJEAiID4+ZnVubnkuYXJncworCWNhc2UgIlwkMSIgaW4gLS1vcHQpIDs7ICopIGV4aXQgMiA7OyBlc2FjCisJY2FzZSAiXCQyIiBpbiAtLWZvbykgOzsgKikgZXhpdCAyIDs7IGVzYWMKKwljYXNlICJcJDQiIGluIC0tKSA7OyAqKSBleGl0IDIgOzsgZXNhYworCXNoaWZ0IDIgJiYKKwk+ZnVubnkud2FzLnJ1biAmJgorCWV4ZWMgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiXCRAIgorCUVPRgorCWNobW9kICt4IHRlc3QtYmluL2dpdC1tZXJnZS1mdW5ueSAmJgorCSgKKwkJUEFUSD0uL3Rlc3QtYmluOiRQQVRIICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLXMgZnVubnkgLVhvcHQgLVhmb28gbWFzdGVyIHRvcGljCisJKSAmJgorCXRlc3QgLWYgZnVubnkud2FzLnJ1biAmJgorCXJtIGZ1bm55Lndhcy5ydW4gJiYKKwllY2hvICJSZXNvbHZlZCIgPkYyICYmCisJZ2l0IGFkZCBGMiAmJgorCSgKKwkJUEFUSD0uL3Rlc3QtYmluOiRQQVRIICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKKwl0ZXN0IC1mIGZ1bm55Lndhcy5ydW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCAncmViYXNlIHBhc3NlcyBtZXJnZSBzdHJhdGVneSBvcHRpb25zIGNvcnJlY3RseScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS0qICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXQtbmV3LWZpbGUtRjMtb24tdG9waWMtYnJhbmNoICYmCisJdGVzdF9jb21taXQgdGhlaXJzLXRvLW1lcmdlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHNvbWUtY29tbWl0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgdGhlaXJzLXRvLW1lcmdlICYmCisJRkFLRV9MSU5FUz0iMSBlZGl0IDIgMyIgZ2l0IHJlYmFzZSAtaSAtZiAtcCAtbSBcCisJCS1zIHJlY3Vyc2l2ZSAtLXN0cmF0ZWd5LW9wdGlvbj10aGVpcnMgSEVBRH4yICYmCisJdGVzdF9jb21taXQgZm9yY2UtY2hhbmdlICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtciBwYXNzZXMgbWVyZ2Ugc3RyYXRlZ3kgb3B0aW9ucyBjb3JyZWN0bHknICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IG1lcmdlLXRoZWlycyAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCBzb21lLW90aGVyLWNvbW1pdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIG1lcmdlLXRoZWlycyAmJgorCUZBS0VfTElORVM9IjEgMyBlZGl0IDQgNSA3IDggOSIgZ2l0IHJlYmFzZSAtaSAtZiAtciAtbSBcCisJCS1zIHJlY3Vyc2l2ZSAtLXN0cmF0ZWd5LW9wdGlvbj10aGVpcnMgSEVBRH4yICYmCisJdGVzdF9jb21taXQgZm9yY2UtY2hhbmdlLW91cnMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1za2lwIGFmdGVyIGZhaWxlZCBmaXh1cCBjbGVhbnMgY29tbWl0IG1lc3NhZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHdpdGgtY29uZmxpY3RpbmctZml4dXAgJiYKKwl0ZXN0X2NvbW1pdCB3YW50cy1maXh1cCAmJgorCXRlc3RfY29tbWl0ICJmaXh1cCEgd2FudHMtZml4dXAiIHdhbnRzLWZpeHVwLnQgMSB3YW50cy1maXh1cC0xICYmCisJdGVzdF9jb21taXQgImZpeHVwISB3YW50cy1maXh1cCIgd2FudHMtZml4dXAudCAyIHdhbnRzLWZpeHVwLTIgJiYKKwl0ZXN0X2NvbW1pdCAiZml4dXAhIHdhbnRzLWZpeHVwIiB3YW50cy1maXh1cC50IDMgd2FudHMtZml4dXAtMyAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDIgc3F1YXNoIDQiIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgJiYKKworCTogbm93IHRoZXJlIGlzIGEgY29uZmxpY3QsIGFuZCBjb21tZW50cyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgJiYKKwlnaXQgc2hvdyBIRUFEID5vdXQgJiYKKwlncmVwICJmaXh1cCEgd2FudHMtZml4dXAiIG91dCAmJgorCisJOiBza2lwIGFuZCBjb250aW51ZSAmJgorCWVjaG8gImNwIFwiXCQxXCIgLmdpdC9jb3B5LnR4dCIgfCB3cml0ZV9zY3JpcHQgY29weS1lZGl0b3Iuc2ggJiYKKwkodGVzdF9zZXRfZWRpdG9yICIkUFdEL2NvcHktZWRpdG9yLnNoIiAmJiBnaXQgcmViYXNlIC0tc2tpcCkgJiYKKworCTogdGhlIHVzZXIgc2hvdWxkIG5vdCBoYXZlIGhhZCB0byBlZGl0IHRoZSBjb21taXQgbWVzc2FnZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvY29weS50eHQgJiYKKworCTogbm93IHRoZSBjb21tZW50cyBpbiB0aGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwICYmCisJZ2l0IHNob3cgSEVBRCA+b3V0ICYmCisJISBncmVwICJmaXh1cCEgd2FudHMtZml4dXAiIG91dCAmJgorCisJOiBub3csIGxldCB1cyBlbnN1cmUgdGhhdCAic3F1YXNoIiBpcyBoYW5kbGVkIGNvcnJlY3RseSAmJgorCWdpdCByZXNldCAtLWhhcmQgd2FudHMtZml4dXAtMyAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIHNxdWFzaCA0IHNxdWFzaCAyIHNxdWFzaCA0IiBcCisJCWdpdCByZWJhc2UgLWkgSEVBRH40ICYmCisKKwk6IHRoZSBmaXJzdCBzcXVhc2ggZmFpbGVkLCBidXQgdGhlcmUgYXJlIHR3byBtb3JlIGluIHRoZSBjaGFpbiAmJgorCSh0ZXN0X3NldF9lZGl0b3IgIiRQV0QvY29weS1lZGl0b3Iuc2giICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1za2lwKSAmJgorCisJOiBub3QgdGhlIGZpbmFsIHNxdWFzaCwgbm8gbmVlZCB0byBlZGl0IHRoZSBjb21taXQgbWVzc2FnZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvY29weS50eHQgJiYKKworCTogVGhlIGZpcnN0IHNxdWFzaCB3YXMgc2tpcHBlZCwgdGhlcmVmb3JlOiAmJgorCWdpdCBzaG93IEhFQUQgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIDIgY29tbWl0cyIgb3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiIyBUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSAjMjoiIG91dCAmJgorCisJKHRlc3Rfc2V0X2VkaXRvciAiJFBXRC9jb3B5LWVkaXRvci5zaCIgJiYgZ2l0IHJlYmFzZSAtLXNraXApICYmCisJZ2l0IHNob3cgSEVBRCA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAhICIjIFRoaXMgaXMgYSBjb21iaW5hdGlvbiIgb3V0ICYmCisKKwk6IEZpbmFsIHNxdWFzaCBmYWlsZWQsIGJ1dCB0aGVyZSB3YXMgc3RpbGwgYSBzcXVhc2ggJiYKKwl0ZXN0X2kxOG5ncmVwICIjIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMiIC5naXQvY29weS50eHQgJiYKKwl0ZXN0X2kxOG5ncmVwICIjIFRoaXMgaXMgdGhlIGNvbW1pdCBtZXNzYWdlICMyOiIgLmdpdC9jb3B5LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXJlcmUgZGF0YWJhc2UnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYzIiBGMyAzICYmCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdG9waWMgY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLW0gbWFzdGVyIHRvcGljICYmCisJZWNobyAiUmVzb2x2ZWQiID5GMiAmJgorCWNwIEYyIGV4cGVjdGVkLUYyICYmCisJZ2l0IGFkZCBGMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gIlJlc29sdmVkIiA+RjMgJiYKKwljcCBGMyBleHBlY3RlZC1GMyAmJgorCWdpdCBhZGQgRjMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvcGljQHsxfQorJworCitwcmVwYXJlICgpIHsKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0LW5ldy1maWxlLUYzLW9uLXRvcGljLWJyYW5jaCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlCit9CisKK3Rlc3RfcmVyZXJlX2F1dG91cGRhdGUgKCkgeworCWFjdGlvbj0kMSAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAkYWN0aW9uIC0tY29udGludWUgcmVtZW1iZXJzIC0tcmVyZXJlLWF1dG91cGRhdGUiICcKKwkJcHJlcGFyZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlICRhY3Rpb24gLS1yZXJlcmUtYXV0b3VwZGF0ZSBtYXN0ZXIgdG9waWMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQtRjIgRjIgJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQtRjMgRjMgJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgJGFjdGlvbiAtLWNvbnRpbnVlIGhvbm9ycyByZXJlcmUuYXV0b1VwZGF0ZSIgJworCQlwcmVwYXJlICYmCisJCXRlc3RfY29uZmlnIHJlcmVyZS5hdXRvdXBkYXRlIHRydWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAkYWN0aW9uIG1hc3RlciB0b3BpYyAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC1GMiBGMiAmJgorCQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC1GMyBGMyAmJgorCQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAkYWN0aW9uIC0tY29udGludWUgcmVtZW1iZXJzIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUiICcKKwkJcHJlcGFyZSAmJgorCQl0ZXN0X2NvbmZpZyByZXJlcmUuYXV0b3VwZGF0ZSB0cnVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgJGFjdGlvbiAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIG1hc3RlciB0b3BpYyAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC1GMiBGMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJCWdpdCBhZGQgRjIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCXRlc3RfY21wIGV4cGVjdGVkLUYzIEYzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwkJZ2l0IGFkZCBGMyAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUKKwknCit9CisKK3Rlc3RfcmVyZXJlX2F1dG91cGRhdGUKK3Rlc3RfcmVyZXJlX2F1dG91cGRhdGUgLW0KK0dJVF9TRVFVRU5DRV9FRElUT1I9OiAmJiBleHBvcnQgR0lUX1NFUVVFTkNFX0VESVRPUgordGVzdF9yZXJlcmVfYXV0b3VwZGF0ZSAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9yZXJlcmVfYXV0b3VwZGF0ZSAtLXByZXNlcnZlLW1lcmdlcwordW5zZXQgR0lUX1NFUVVFTkNFX0VESVRPUgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgdG9kbyBjb21tYW5kICJicmVhayIgd29ya3MnICcKKwlybSAtZiBleGVjZWQgJiYKKwlGQUtFX0xJTkVTPSJicmVhayBiIGV4ZWNfPmV4ZWNlZCIgZ2l0IHJlYmFzZSAtaSBIRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZXhlY2VkICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZXhlY2VkICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZXhlY2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzY2hlZHVsZS1mYWlsZWQtZXhlYycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXggZmFsc2UgLS1yZXNjaGVkdWxlLWZhaWxlZC1leGVjIEhFQUReICYmCisJZ3JlcCAiXmV4ZWMgZmFsc2UiIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWJhc2UucmVzY2hlZHVsZUZhaWxlZEV4ZWM9dHJ1ZSBcCisJCXJlYmFzZSAteCBmYWxzZSBIRUFEXiAyPmVyciAmJgorCWdyZXAgIl5leGVjIGZhbHNlIiAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYmVlbiByZXNjaGVkdWxlZCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZS5yZXNjaGVkdWxlZmFpbGVkZXhlYyBvbmx5IGFmZmVjdHMgYHJlYmFzZSAtaWAnICcKKwl0ZXN0X2NvbmZpZyByZWJhc2UucmVzY2hlZHVsZWZhaWxlZGV4ZWMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXggZmFsc2UgSEVBRF4gJiYKKwlncmVwICJeZXhlYyBmYWxzZSIgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJZ2l0IHJlYmFzZSBIRUFEXgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTktcmViYXNlLXBhdGNoLWlkLnNoIGIvdC90MzQxOS1yZWJhc2UtcGF0Y2gtaWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTQ1NTI2NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTktcmViYXNlLXBhdGNoLWlkLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtIHRlc3QgcGF0Y2ggaWQgY29tcHV0YXRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb3VudCAoKSB7CisJaT0wCisJd2hpbGUgdGVzdCAkaSAtbHQgJDEKKwlkbworCQllY2hvICIkaSIKKwkJaT0kKCgkaSsxKSkKKwlkb25lCit9CisKK3NjcmFtYmxlICgpIHsKKwlpPTAKKwl3aGlsZSByZWFkIHgKKwlkbworCQlpZiB0ZXN0ICRpIC1uZSAwCisJCXRoZW4KKwkJCWVjaG8gIiR4IgorCQlmaQorCQlpPSQoKCgkaSsxKSAlIDEwKSkKKwlkb25lIDwiJDEiID4iJDEubmV3IgorCW12IC1mICIkMS5uZXciICIkMSIKK30KKworcnVuICgpIHsKKwllY2hvIFwkICIkQCIKKwkvdXNyL2Jpbi90aW1lICIkQCIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyByb290CisnCisKK2RvX3Rlc3RzICgpIHsKKwlubGluZXM9JDEgcHI9JHsyLX0KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByICJzZXR1cDogJG5saW5lcyBsaW5lcyIgIgorCQlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCQlnaXQgY2hlY2tvdXQgLXEgLWYgbWFzdGVyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcm9vdCAmJgorCQljb3VudCAkbmxpbmVzID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1xIC1tIGluaXRpYWwgJiYKKwkJZ2l0IGJyYW5jaCAtZiBvdGhlciAmJgorCisJCXNjcmFtYmxlIGZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLXEgLW0gJ2NoYW5nZSBiaWcgZmlsZScgJiYKKworCQlnaXQgY2hlY2tvdXQgLXEgb3RoZXIgJiYKKwkJOiA+bmV3ZmlsZSAmJgorCQlnaXQgYWRkIG5ld2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSAnYWRkIHNtYWxsIGZpbGUnICYmCisKKwkJZ2l0IGNoZXJyeS1waWNrIG1hc3RlciA+L2Rldi9udWxsIDI+JjEKKwkiCisKKwl0ZXN0X2RlYnVnICIKKwkJcnVuIGdpdCBkaWZmIG1hc3Rlcl5cIQorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByICdzZXR1cCBhdHRyaWJ1dGVzJyAiCisJCWVjaG8gJ2ZpbGUgYmluYXJ5JyA+LmdpdGF0dHJpYnV0ZXMKKwkiCisKKwl0ZXN0X2RlYnVnICIKKwkJcnVuIGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyICYmCisJCXJ1biBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0taWdub3JlLWlmLWluLXVwc3RyZWFtIG1hc3RlcgorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByICdkZXRlY3QgdXBzdHJlYW0gcGF0Y2gnICcKKwkJZ2l0IGNoZWNrb3V0IC1xIG1hc3RlciAmJgorCQlzY3JhbWJsZSBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1xIC1tICJjaGFuZ2UgYmlnIGZpbGUgYWdhaW4iICYmCisJCWdpdCBjaGVja291dCAtcSBvdGhlcl57fSAmJgorCQlnaXQgcmViYXNlIG1hc3RlciAmJgorCQlnaXQgcmV2LWxpc3QgbWFzdGVyLi4uSEVBRH4gPnJldnMgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IHJldnMKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAnZG8gbm90IGRyb3AgcGF0Y2gnICcKKwkJZ2l0IGJyYW5jaCAtZiBzcXVhc2hlZCBtYXN0ZXIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1xIC1mIHNxdWFzaGVkICYmCisJCWdpdCByZXNldCAtcSAtLXNvZnQgSEVBRH4yICYmCisJCWdpdCBjb21taXQgLXEgLW0gc3F1YXNoZWQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1xIG90aGVyXnt9ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2Ugc3F1YXNoZWQgJiYKKwkJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5CisJJworfQorCitkb190ZXN0cyA1MDAKK2RvX3Rlc3RzIDUwMDAwIEVYUEVOU0lWRQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaCBiL3QvdDM0MjAtcmViYXNlLWF1dG9zdGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOTdlYTYyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyMC1yZWJhc2UtYXV0b3N0YXNoLnNoCkBAIC0wLDAgKzEsMzEzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzIFJhbWt1bWFyIFJhbWFjaGFuZHJhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1hdXRvc3Rhc2ggdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsby13b3JsZCA+ZmlsZTAgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZmVhdHVyZS1icmFuY2ggJiYKKwllY2hvIGFub3RoZXItaGVsbG8gPmZpbGUxICYmCisJZWNobyBnb29kYnllID5maWxlMiAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisJZWNobyBmaW5hbC1nb29kYnllID5maWxlMyAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdW5yZWxhdGVkLW9udG8tYnJhbmNoIG1hc3RlciAmJgorCWVjaG8gdW5yZWxhdGVkID5maWxlNCAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInVucmVsYXRlZCBjb21taXQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlbGF0ZWQtb250by1icmFuY2ggbWFzdGVyICYmCisJZWNobyBjb25mbGljdGluZy1jaGFuZ2UgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVsYXRlZCBjb21taXQiICYmCisJcmVtb3ZlX3Byb2dyZXNzX3JlPSIkKHByaW50ZiAicy8uKlxcci8vIikiCisnCisKK2NyZWF0ZV9leHBlY3RlZF9zdWNjZXNzX2FwcGx5ICgpIHsKKwljYXQgPmV4cGVjdGVkIDw8LUVPRgorCSQoZ3JlcCAiXkNyZWF0ZWQgYXV0b3N0YXNoOiBbMC05YS1mXVswLTlhLWZdKlwkIiBhY3R1YWwpCisJRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uCisJQXBwbHlpbmc6IHNlY29uZCBjb21taXQKKwlBcHBseWluZzogdGhpcmQgY29tbWl0CisJQXBwbGllZCBhdXRvc3Rhc2guCisJRU9GCit9CisKK2NyZWF0ZV9leHBlY3RlZF9zdWNjZXNzX21lcmdlICgpIHsKKwlxX3RvX2NyID5leHBlY3RlZCA8PC1FT0YKKwkkKGdyZXAgIl5DcmVhdGVkIGF1dG9zdGFzaDogWzAtOWEtZl1bMC05YS1mXSpcJCIgYWN0dWFsKQorCUFwcGxpZWQgYXV0b3N0YXNoLgorCVN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvcmViYXNlZC1mZWF0dXJlLWJyYW5jaC4KKwlFT0YKK30KKworY3JlYXRlX2V4cGVjdGVkX2ZhaWx1cmVfYXBwbHkgKCkgeworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GCisJJChncmVwICJeQ3JlYXRlZCBhdXRvc3Rhc2g6IFswLTlhLWZdWzAtOWEtZl0qXCQiIGFjdHVhbCkKKwlGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4KKwlBcHBseWluZzogc2Vjb25kIGNvbW1pdAorCUFwcGx5aW5nOiB0aGlyZCBjb21taXQKKwlBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLgorCVlvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guCisJWW91IGNhbiBydW4gImdpdCBzdGFzaCBwb3AiIG9yICJnaXQgc3Rhc2ggZHJvcCIgYXQgYW55IHRpbWUuCisJRU9GCit9CisKK2NyZWF0ZV9leHBlY3RlZF9mYWlsdXJlX21lcmdlICgpIHsKKwljYXQgPmV4cGVjdGVkIDw8LUVPRgorCSQoZ3JlcCAiXkNyZWF0ZWQgYXV0b3N0YXNoOiBbMC05YS1mXVswLTlhLWZdKlwkIiBhY3R1YWwpCisJQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy4KKwlZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLgorCVlvdSBjYW4gcnVuICJnaXQgc3Rhc2ggcG9wIiBvciAiZ2l0IHN0YXNoIGRyb3AiIGF0IGFueSB0aW1lLgorCVN1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvcmViYXNlZC1mZWF0dXJlLWJyYW5jaC4KKwlFT0YKK30KKwordGVzdHJlYmFzZSAoKSB7CisJdHlwZT0kMQorCWRvdGVzdD0kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IGRpcnR5IHdvcmt0cmVlLCAtLW5vLWF1dG9zdGFzaCIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSAtLW5vLWF1dG9zdGFzaCB1bnJlbGF0ZWQtb250by1icmFuY2gKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogZGlydHkgd29ya3RyZWUsIG5vbi1jb25mbGljdGluZyByZWJhc2UiICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCWdpdCByZWJhc2UkdHlwZSB1bnJlbGF0ZWQtb250by1icmFuY2ggPmFjdHVhbCAyPiYxICYmCisJCWdyZXAgdW5yZWxhdGVkIGZpbGU0ICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hdXRvc3Rhc2g6IGNoZWNrIG91dHB1dCIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCXN1ZmZpeD0ke3R5cGUjXCAtLX0gJiYgc3VmZml4PSR7c3VmZml4Oi1hcHBseX0gJiYKKwkJaWYgdGVzdCAke3N1ZmZpeH0gPSAiaW50ZXJhY3RpdmUiOyB0aGVuCisJCQlzdWZmaXg9bWVyZ2UKKwkJZmkgJiYKKwkJY3JlYXRlX2V4cGVjdGVkX3N1Y2Nlc3NfJHN1ZmZpeCAmJgorCQlzZWQgIiRyZW1vdmVfcHJvZ3Jlc3NfcmUiIDxhY3R1YWwgPmFjdHVhbDIgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbDIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogZGlydHkgaW5kZXgsIG5vbi1jb25mbGljdGluZyByZWJhc2UiICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID4+ZmlsZTMgJiYKKwkJZ2l0IGFkZCBmaWxlMyAmJgorCQlnaXQgcmViYXNlJHR5cGUgdW5yZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCWdyZXAgdW5yZWxhdGVkIGZpbGU0ICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IGNvbmZsaWN0aW5nIHJlYmFzZSIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlybSAtcmYgJGRvdGVzdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiAtLWNvbnRpbnVlIiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSByZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWVjaG8gImNvbmZsaWN0aW5nLXBsdXMtZ29vZGJ5ZSIgPmZpbGUyICYmCisJCWdpdCBhZGQgZmlsZTIgJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IC0tc2tpcCIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlnaXQgcmViYXNlIC0tc2tpcCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQlncmVwIGRpcnR5IGZpbGUzICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiAtLWFib3J0IiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSByZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQlncmVwIGRpcnR5IGZpbGUzICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiBub24tY29uZmxpY3RpbmcgcmViYXNlLCBjb25mbGljdGluZyBzdGFzaCIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID5maWxlNCAmJgorCQlnaXQgYWRkIGZpbGU0ICYmCisJCWdpdCByZWJhc2UkdHlwZSB1bnJlbGF0ZWQtb250by1icmFuY2ggPmFjdHVhbCAyPiYxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRkb3Rlc3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlncmVwIHVucmVsYXRlZCBmaWxlNCAmJgorCQkhIGdyZXAgZGlydHkgZmlsZTQgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoICYmCisJCWdpdCBzdGFzaCBwb3AgJiYKKwkJZ3JlcCBkaXJ0eSBmaWxlNAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiBjaGVjayBvdXRwdXQgd2l0aCBjb25mbGljdGluZyBzdGFzaCIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCXN1ZmZpeD0ke3R5cGUjXCAtLX0gJiYgc3VmZml4PSR7c3VmZml4Oi1hcHBseX0gJiYKKwkJaWYgdGVzdCAke3N1ZmZpeH0gPSAiaW50ZXJhY3RpdmUiOyB0aGVuCisJCQlzdWZmaXg9bWVyZ2UKKwkJZmkgJiYKKwkJY3JlYXRlX2V4cGVjdGVkX2ZhaWx1cmVfJHN1ZmZpeCAmJgorCQlzZWQgIiRyZW1vdmVfcHJvZ3Jlc3NfcmUiIDxhY3R1YWwgPmFjdHVhbDIgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbDIKKwknCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZTogZmFzdC1mb3J3YXJkIHJlYmFzZSIgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYmVoaW5kLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNofjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCBiZWhpbmQtZmVhdHVyZS1icmFuY2ggJiYKKwllY2hvIGRpcnR5ID4+ZmlsZTEgJiYKKwlnaXQgcmViYXNlIGZlYXR1cmUtYnJhbmNoICYmCisJZ3JlcCBkaXJ0eSBmaWxlMSAmJgorCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2U6IG5vb3AgcmViYXNlIiAnCisJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBzYW1lLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgc2FtZS1mZWF0dXJlLWJyYW5jaCAmJgorCWVjaG8gZGlydHkgPj5maWxlMSAmJgorCWdpdCByZWJhc2UgZmVhdHVyZS1icmFuY2ggJiYKKwlncmVwIGRpcnR5IGZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisnCisKK3Rlc3RyZWJhc2UgIiAtLWFwcGx5IiAuZ2l0L3JlYmFzZS1hcHBseQordGVzdHJlYmFzZSAiIC0tbWVyZ2UiIC5naXQvcmViYXNlLW1lcmdlCit0ZXN0cmViYXNlICIgLS1pbnRlcmFjdGl2ZSIgLmdpdC9yZWJhc2UtbWVyZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgcmViYXNlIC1pIHdpdGggLS1hdXRvc3Rhc2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZWNobyB1bmNvbW1pdHRlZC1jb250ZW50ID5maWxlMCAmJgorCSgKKwkJd3JpdGVfc2NyaXB0IGFib3J0LWVkaXRvci5zaCA8PC1cRU9GICYmCisJCQllY2hvID4iJDEiCisJCUVPRgorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9hYm9ydC1lZGl0b3Iuc2giICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1hdXRvc3Rhc2ggSEVBRF4gJiYKKwkJcm0gLWYgYWJvcnQtZWRpdG9yLnNoCisJKSAmJgorCWVjaG8gdW5jb21taXR0ZWQtY29udGVudCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0b3JlIGF1dG9zdGFzaCBvbiBlZGl0b3IgZmFpbHVyZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwllY2hvIHVuY29tbWl0dGVkLWNvbnRlbnQgPmZpbGUwICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgImZhbHNlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIEhFQUReCisJKSAmJgorCWVjaG8gdW5jb21taXR0ZWQtY29udGVudCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc3Rhc2ggaXMgc2F2ZWQgb24gZWRpdG9yIGZhaWx1cmUgd2l0aCBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwllY2hvIHVuY29tbWl0dGVkLWNvbnRlbnQgPmZpbGUwICYmCisJKAorCQl3cml0ZV9zY3JpcHQgYWJvcnQtZWRpdG9yLnNoIDw8LVxFT0YgJiYKKwkJCWVjaG8gY29uZmxpY3RpbmctY29udGVudCA+ZmlsZTAKKwkJCWV4aXQgMQorCQlFT0YKKwkJdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvYWJvcnQtZWRpdG9yLnNoIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tYXV0b3N0YXNoIEhFQUReICYmCisJCXJtIC1mIGFib3J0LWVkaXRvci5zaAorCSkgJiYKKwllY2hvIGNvbmZsaWN0aW5nLWNvbnRlbnQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTAgJiYKKwlnaXQgY2hlY2tvdXQgZmlsZTAgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJZWNobyB1bmNvbW1pdHRlZC1jb250ZW50ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zdGFzaCB3aXRoIGRpcnR5IHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgd2l0aC1zdWJtb2R1bGUgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLyBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGFkZC1zdWJtb2R1bGUgJiYKKwllY2hvIGNoYW5nZWQgPnN1Yi9maWxlMCAmJgorCWdpdCByZWJhc2UgLWkgLS1hdXRvc3Rhc2ggSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggaXMgbGVmdCBhbG9uZSB3aGVuIHBvc3NpYmxlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHVuY2hhbmdlZC1icmFuY2ggJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUwICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zdGFzaCB1bmNoYW5nZWQtYnJhbmNoICYmCisJdGVzdCBjaGFuZ2VkID0gIiQoY2F0IGZpbGUwKSIgJiYKKwl0ZXN0IHVuY2hhbmdlZC1icmFuY2ggPSAiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV2ZXIgY2hhbmdlIGFjdGl2ZSBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgbm90LXRoZS1mZWF0dXJlLWJyYW5jaCB1bnJlbGF0ZWQtb250by1icmFuY2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUwICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zdGFzaCBub3QtdGhlLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJdGVzdF9jbXBfcmV2IG5vdC10aGUtZmVhdHVyZS1icmFuY2ggdW5yZWxhdGVkLW9udG8tYnJhbmNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQyMS1yZWJhc2UtdG9wb2xvZ3ktbGluZWFyLnNoIGIvdC90MzQyMS1yZWJhc2UtdG9wb2xvZ3ktbGluZWFyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmOGRmZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDIxLXJlYmFzZS10b3BvbG9neS1saW5lYXIuc2gKQEAgLTAsMCArMSwzODAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyByZWJhc2UgdG9wb2xvZ3kgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCisjIGEtLS1iLS0tYworIyAgICAgIFwKKyMgICAgICAgZC0tLWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgYSAmJgorCXRlc3RfY29tbWl0IGIgJiYKKwl0ZXN0X2NvbW1pdCBjICYmCisJZ2l0IGNoZWNrb3V0IGIgJiYKKwl0ZXN0X2NvbW1pdCBkICYmCisJdGVzdF9jb21taXQgZQorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAic2ltcGxlIHJlYmFzZSAkKiIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBjIGUgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGUnIGMuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYnJhbmNoZXMgYW5kIHJlbW90ZSB0cmFja2luZycgJworCWdpdCB0YWcgLWwgPnRhZ3MgJiYKKwlmb3IgdGFnIGluICQoY2F0IHRhZ3MpCisJZG8KKwkJZ2l0IGJyYW5jaCBicmFuY2gtJHRhZyAkdGFnIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAiZmlsZTovLyRQV0QiICYmCisJZ2l0IGZldGNoIG9yaWdpbgorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGlzIG5vLW9wIGlmIHVwc3RyZWFtIGlzIGFuIGFuY2VzdG9yIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGIgZSAmJgorCQl0ZXN0X2NtcF9yZXYgZSBIRUFECisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC1mIHJld3JpdGVzIGV2ZW4gaWYgdXBzdHJlYW0gaXMgYW4gYW5jZXN0b3IiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLWYgYiBlICYmCisJCXRlc3RfY21wX3JldiAhIGUgSEVBRCAmJgorCQl0ZXN0X2NtcF9yZXYgYiBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgYi4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1mb3JrLXBvaW50Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLWYgcmV3cml0ZXMgZXZlbiBpZiByZW1vdGUgdXBzdHJlYW0gaXMgYW4gYW5jZXN0b3IiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLWYgYnJhbmNoLWIgYnJhbmNoLWUgJiYKKwkJdGVzdF9jbXBfcmV2ICEgYnJhbmNoLWUgb3JpZ2luL2JyYW5jaC1lICYmCisJCXRlc3RfY21wX3JldiBicmFuY2gtYiBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgYnJhbmNoLWIuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tZm9yay1wb2ludAordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGZhc3QtZm9yd2FyZHMgZnJvbSBhbmNlc3RvciBvZiB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBlIGIgJiYKKwkJdGVzdF9jbXBfcmV2IGUgSEVBRAorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tZm9yay1wb2ludAordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCisjICAgICAgIGYKKyMgICAgICAvCisjIGEtLS1iLS0tYy0tLWctLS1oCisjICAgICAgXAorIyAgICAgICBkLS0tZ3AtLWkKKyMKKyMgZ3AgPSBjaGVycnktcGlja2VkIGcKKyMgaCA9IHJldmVydGVkIGcKKyMKKyMgUmV2ZXJ0ZWQgcGF0Y2hlcyBhcmUgdGhlcmUgZm9yIHRlc3RzIHRvIGJlIGFibGUgdG8gY2hlY2sgaWYgYSBjb21taXQKKyMgdGhhdCBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZSBhcyBhbm90aGVyIGNvbW1pdCBpcworIyBkcm9wcGVkLiBXaXRob3V0IHJldmVydGVkIGNvbW1pdHMsIHdlIGNvdWxkIGdldCBmYWxzZSBwb3NpdGl2ZXMKKyMgYmVjYXVzZSBhcHBseWluZyB0aGUgcGF0Y2ggc3VjY2VlZHMsIGJ1dCBzaW1wbHkgcmVzdWx0cyBpbiBubworIyBjaGFuZ2VzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2YgbGluZWFyIGhpc3RvcnkgZm9yIHJhbmdlIHNlbGVjdGlvbiB0ZXN0cycgJworCWdpdCBjaGVja291dCBjICYmCisJdGVzdF9jb21taXQgZyAmJgorCXJldmVydCBoIGcgJiYKKwlnaXQgY2hlY2tvdXQgZCAmJgorCWNoZXJyeV9waWNrIGdwIGcgJiYKKwl0ZXN0X2NvbW1pdCBpICYmCisJZ2l0IGNoZWNrb3V0IGIgJiYKKwl0ZXN0X2NvbW1pdCBmCisnCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogZHJvcHMgcGF0Y2hlcyBpbiB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBoIGkgJiYKKwkJdGVzdF9jbXBfcmV2IGggSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGknIGguLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBjYW4gZHJvcCBsYXN0IHBhdGNoIGlmIGluIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGggZ3AgJiYKKwkJdGVzdF9jbXBfcmV2IGggSEVBRF4gJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QnIGguLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLW9udG8gZHJvcHMgcGF0Y2hlcyBpbiB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLW9udG8gZiBoIGkgJiYKKwkJdGVzdF9jbXBfcmV2IGYgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGknIGYuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLW9udG8gZG9lcyBub3QgZHJvcCBwYXRjaGVzIGluIG9udG8iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1vbnRvIGggZiBpICYmCisJCXRlc3RfY21wX3JldiBoIEhFQUR+MyAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBncCBpJyBoLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtLWFwcGx5Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKKyMgYS0tLWItLS1jLS0taiEKKyMgICAgICBcCisjICAgICAgIGQtLS1rIS0tbAorIworIyAhID0gZW1wdHkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIGxpbmVhciBoaXN0b3J5IGZvciBlbXB0eSBjb21taXQgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgYyAmJgorCW1ha2VfZW1wdHkgaiAmJgorCWdpdCBjaGVja291dCBkICYmCisJbWFrZV9lbXB0eSBrICYmCisJdGVzdF9jb21taXQgbAorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGtlZXBzIGJlZ2luLWVtcHR5IGNvbW1pdHMiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogaiBsICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+NCAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnaiBkIGsgbCcgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0ta2VlcC1lbXB0eSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLWtlZXAtZW1wdHkgYyBsICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+MyAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBrIGwnIGMuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9oYXZlX3ByZXJlcSAhUkVCQVNFX1AgfHwgdGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLWtlZXAtZW1wdHkga2VlcHMgZW1wdHkgZXZlbiBpZiBhbHJlYWR5IGluIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0ta2VlcC1lbXB0eSBqIGwgJiYKKwkJdGVzdF9jbXBfcmV2IGogSEVBRH4zICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGsgbCcgai4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1yZWJhc2UtbWVyZ2VzCisKKyMgICAgICAgbQorIyAgICAgIC8KKyMgYS0tLWItLS1jLS0tZworIworIyB4LS0teS0tLWJwCisjCisjIGJwID0gY2hlcnJ5LXBpY2tlZCBiCisjIG0gPSByZXZlcnRlZCBiCisjCisjIFJldmVydGVkIHBhdGNoZXMgYXJlIHRoZXJlIGZvciB0ZXN0cyB0byBiZSBhYmxlIHRvIGNoZWNrIGlmIGEgY29tbWl0CisjIHRoYXQgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2UgYXMgYW5vdGhlciBjb21taXQgaXMKKyMgZHJvcHBlZC4gV2l0aG91dCByZXZlcnRlZCBjb21taXRzLCB3ZSBjb3VsZCBnZXQgZmFsc2UgcG9zaXRpdmVzCisjIGJlY2F1c2UgYXBwbHlpbmcgdGhlIHBhdGNoIHN1Y2NlZWRzLCBidXQgc2ltcGx5IHJlc3VsdHMgaW4gbm8KKyMgY2hhbmdlcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIGxpbmVhciBoaXN0b3J5IGZvciB0ZXN0IGludm9sdmluZyByb290JyAnCisJZ2l0IGNoZWNrb3V0IGIgJiYKKwlyZXZlcnQgbSBiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGRpc2pvaW50ICYmCisJZ2l0IHJtIC1yZiAuICYmCisJdGVzdF9jb21taXQgeCAmJgorCXRlc3RfY29tbWl0IHkgJiYKKwljaGVycnlfcGljayBicCBiCisnCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1vbnRvIC0tcm9vdCIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLW9udG8gYyAtLXJvb3QgeSAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ3ggeScgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIHdpdGhvdXQgLS1vbnRvIC0tcm9vdCB3aXRoIGRpc2pvaW50IGhpc3RvcnkiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogYyB5ICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAneCB5JyBjLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtLWFwcGx5Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1vbnRvIC0tcm9vdCBkcm9wcyBwYXRjaCBpbiBvbnRvIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0tb250byBtIC0tcm9vdCBicCAmJgorCQl0ZXN0X2NtcF9yZXYgbSBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ3ggeScgbS4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0tb250byAtLXJvb3Qgd2l0aCBtZXJnZS1iYXNlIGRvZXMgbm90IGdvIHRvIHJvb3QiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1vbnRvIG0gLS1yb290IGcgJiYKKwkJdGVzdF9jbXBfcmV2IG0gSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdjIGcnIG0uLgorCSIKK30KKwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIHdpdGhvdXQgLS1vbnRvIC0tcm9vdCB3aXRoIGRpc2pvaW50IGhpc3RvcnkgZHJvcHMgcGF0Y2ggaW4gb250byIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBtIGJwICYmCisJCXRlc3RfY21wX3JldiBtIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAneCB5JyBtLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtLWFwcGx5Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1yb290IG9uIGxpbmVhciBoaXN0b3J5IGlzIGEgbm8tb3AiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1yb290IGMgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRAorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLWYgLS1yb290IG9uIGxpbmVhciBoaXN0b3J5IGNhdXNlcyByZS13cml0ZSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtZiAtLXJvb3QgYyAmJgorCQl0ZXN0X2NtcF9yZXYgISBhIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnYSBiIGMnIEhFQUQKKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X2hhdmVfcHJlcmVxICFSRUJBU0VfUCB8fCB0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MjItcmViYXNlLWluY29tcGF0aWJsZS1vcHRpb25zLnNoIGIvdC90MzQyMi1yZWJhc2UtaW5jb21wYXRpYmxlLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTBlNzk2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjItcmViYXNlLWluY29tcGF0aWJsZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGlmIHJlYmFzZSBkZXRlY3RzIGFuZCBhYm9ydHMgb24gaW5jb21wYXRpYmxlIG9wdGlvbnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X3NlcSAyIDkgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBvcmlnICYmCisKKwlnaXQgYnJhbmNoIEEgJiYKKwlnaXQgYnJhbmNoIEIgJiYKKworCWdpdCBjaGVja291dCBBICYmCisJdGVzdF9zZXEgMSA5ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwllY2hvICJxIHFmb28oKTsiIHwgcV90b190YWIgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gQgorJworCisjCisjIFJlYmFzZSBoYXMgbG90cyBvZiB1c2VmdWwgb3B0aW9ucyBsaWtlIC0td2hpdGVwc2FjZT1maXgsIHdoaWNoIGFyZQorIyBhY3R1YWxseSBhbGwgYnVpbHQgaW4gdGVybXMgb2YgZmxhZ3MgdG8gZ2l0LWFtLiAgU2luY2UgbmVpdGhlcgorIyAtLW1lcmdlIG5vciAtLWludGVyYWN0aXZlIChub3IgYW55IG9wdGlvbnMgdGhhdCBpbXBseSB0aG9zZSB0d28pIHVzZQorIyBnaXQtYW0sIHVzaW5nIHRoZW0gdG9nZXRoZXIgd2lsbCByZXN1bHQgaW4gZmxhZ3MgbGlrZSAtLXdoaXRlc3BhY2U9Zml4CisjIGJlaW5nIGlnbm9yZWQuICBNYWtlIHN1cmUgcmViYXNlIHdhcm5zIHRoZSB1c2VyIGFuZCBhYm9ydHMgaW5zdGVhZC4KKyMKKwordGVzdF9yZWJhc2VfYW1fb25seSAoKSB7CisJb3B0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0IGluY29tcGF0aWJsZSB3aXRoIC0tbWVyZ2UiICIKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlICRvcHQgLS1tZXJnZSBBCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdCBpbmNvbXBhdGlibGUgd2l0aCAtLXN0cmF0ZWd5PW91cnMiICIKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlICRvcHQgLS1zdHJhdGVneT1vdXJzIEEKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0IGluY29tcGF0aWJsZSB3aXRoIC0tc3RyYXRlZ3ktb3B0aW9uPW91cnMiICIKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlICRvcHQgLS1zdHJhdGVneS1vcHRpb249b3VycyBBCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdCBpbmNvbXBhdGlibGUgd2l0aCAtLWludGVyYWN0aXZlIiAiCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAkb3B0IC0taW50ZXJhY3RpdmUgQQorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvcHQgaW5jb21wYXRpYmxlIHdpdGggLS1leGVjIiAiCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAkb3B0IC0tZXhlYyAndHJ1ZScgQQorCSIKKworfQorCit0ZXN0X3JlYmFzZV9hbV9vbmx5IC0td2hpdGVzcGFjZT1maXgKK3Rlc3RfcmViYXNlX2FtX29ubHkgLS1pZ25vcmUtd2hpdGVzcGFjZQordGVzdF9yZWJhc2VfYW1fb25seSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlCit0ZXN0X3JlYmFzZV9hbV9vbmx5IC1DNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICctLXByZXNlcnZlLW1lcmdlcyBpbmNvbXBhdGlibGUgd2l0aCAtLXNpZ25vZmYnICcKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyAtLXNpZ25vZmYgQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QIFwKKwknLS1wcmVzZXJ2ZS1tZXJnZXMgaW5jb21wYXRpYmxlIHdpdGggLS1yZWJhc2UtbWVyZ2VzJyAnCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMgLS1yZWJhc2UtbWVyZ2VzIEEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDIzLXJlYmFzZS1yZXdvcmQuc2ggYi90L3QzNDIzLXJlYmFzZS1yZXdvcmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjk2Mzc1MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjMtcmViYXNlLXJld29yZC5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSBpbnRlcmFjdGl2ZSB3aXRoIHJld29yZGluZycKKworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG1hc3RlciBmaWxlLTEgdGVzdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHN0dWZmICYmCisKKwl0ZXN0X2NvbW1pdCBmZWF0dXJlX2EgZmlsZS0yIGFhYSAmJgorCXRlc3RfY29tbWl0IGZlYXR1cmVfYiBmaWxlLTIgZGRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld29yZCB3aXRob3V0IGlzc3VlcyBmdW5jdGlvbnMgYXMgaW50ZW5kZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlc2V0X3JlYmFzZSIgJiYKKworCWdpdCBjaGVja291dCBzdHVmZl4wICYmCisKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSJwaWNrIDEgcmV3b3JkIDIiIEZBS0VfQ09NTUlUX01FU1NBR0U9ImZlYXR1cmVfYl9yZXdvcmRlZCIgXAorCQlnaXQgcmViYXNlIC1pIC12IG1hc3RlciAmJgorCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tZm9ybWF0PSVCKSIgPSAiZmVhdHVyZV9iX3Jld29yZGVkIiAmJgorCXRlc3QgJChnaXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEKSA9IDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3b3JkIGFmdGVyIGEgY29uZmxpY3QgcHJlc2VydmVzIGNvbW1pdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVzZXRfcmViYXNlIiAmJgorCisJZ2l0IGNoZWNrb3V0IHN0dWZmXjAgJiYKKworCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJyZXdvcmQgMiIgXAorCQlnaXQgcmViYXNlIC1pIC12IG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IC0tdGhlaXJzIGZpbGUtMiAmJgorCWdpdCBhZGQgZmlsZS0yICYmCisJRkFLRV9DT01NSVRfTUVTU0FHRT0iZmVhdHVyZV9iX3Jld29yZGVkIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKworCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQikiID0gImZlYXR1cmVfYl9yZXdvcmRlZCIgJiYKKwl0ZXN0ICQoZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCkgPSAyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQyNC1yZWJhc2UtZW1wdHkuc2ggYi90L3QzNDI0LXJlYmFzZS1lbXB0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMWUzMDUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyNC1yZWJhc2UtZW1wdHkuc2gKQEAgLTAsMCArMSwxMzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIG9mIGNvbW1pdHMgdGhhdCBzdGFydCBvciBiZWNvbWUgZW1wdHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgOCA5IDEwID5udW1iZXJzICYmCisJdGVzdF93cml0ZV9saW5lcyBBIEIgQyBEIEUgRiBHIEggSSBKID5sZXR0ZXJzICYmCisJZ2l0IGFkZCBudW1iZXJzIGxldHRlcnMgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKworCWdpdCBicmFuY2ggdXBzdHJlYW0gJiYKKwlnaXQgYnJhbmNoIGxvY2FsbW9kcyAmJgorCisJZ2l0IGNoZWNrb3V0IHVwc3RyZWFtICYmCisJdGVzdF93cml0ZV9saW5lcyBBIEIgQyBEIEUgPmxldHRlcnMgJiYKKwlnaXQgYWRkIGxldHRlcnMgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCBmaXZlIDYgNyA4IDkgdGVuID5udW1iZXJzICYmCisJZ2l0IGFkZCBudW1iZXJzICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwlnaXQgY2hlY2tvdXQgbG9jYWxtb2RzICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IGZpdmUgNiA3IDggOSAxMCA+bnVtYmVycyAmJgorCWdpdCBhZGQgbnVtYmVycyAmJgorCWdpdCBjb21taXQgLW0gQzIgJiYKKworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBEICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEEgQiBDIEQgRSA+bGV0dGVycyAmJgorCWdpdCBhZGQgbGV0dGVycyAmJgorCWdpdCBjb21taXQgLW0gIkZpdmUgbGV0dGVycyBvdWdodCB0byBiZSBlbm91Z2ggZm9yIGFueWJvZHkiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3JlYmFzZSAoYXBwbHktYmFja2VuZCknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHMgJiYKKwkjIHJlYmFzZSAoLS1hcHBseSkgc2hvdWxkIG5vdCBkcm9wIGNvbW1pdHMgdGhhdCBzdGFydCBlbXB0eQorCWdpdCByZWJhc2UgLS1hcHBseSB1cHN0cmVhbSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIC0tZW1wdHk9ZHJvcCcgJworCWdpdCBjaGVja291dCAtQiB0ZXN0aW5nIGxvY2FsbW9kcyAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSAtLWVtcHR5PWRyb3AgdXBzdHJlYW0gJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgRCBDIEIgQSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSB1c2VzIGRlZmF1bHQgb2YgLS1lbXB0eT1kcm9wJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIHVwc3RyZWFtICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEQgQyBCIEEgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgLS1lbXB0eT1rZWVwJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIC0tZW1wdHk9a2VlcCB1cHN0cmVhbSAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMyIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIC0tZW1wdHk9YXNrJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIC0tZW1wdHk9YXNrIHVwc3RyZWFtICYmCisKKwlnaXQgcmViYXNlIC0tc2tpcCAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWludGVyYWN0aXZlIC0tZW1wdHk9ZHJvcCcgJworCWdpdCBjaGVja291dCAtQiB0ZXN0aW5nIGxvY2FsbW9kcyAmJgorCWdpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZSAtLWVtcHR5PWRyb3AgdXBzdHJlYW0gJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgRCBDIEIgQSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1pbnRlcmFjdGl2ZSAtLWVtcHR5PWtlZXAnICcKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHMgJiYKKwlnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUgLS1lbXB0eT1rZWVwIHVwc3RyZWFtICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEQgQzIgQyBCIEEgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0taW50ZXJhY3RpdmUgLS1lbXB0eT1hc2snICcKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUgLS1lbXB0eT1hc2sgdXBzdHJlYW0gJiYKKworCWdpdCByZWJhc2UgLS1za2lwICYmCisKKwl0ZXN0X3dyaXRlX2xpbmVzIEQgQyBCIEEgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0taW50ZXJhY3RpdmUgdXNlcyBkZWZhdWx0IG9mIC0tZW1wdHk9YXNrJyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRlc3RpbmcgbG9jYWxtb2RzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWludGVyYWN0aXZlIHVwc3RyZWFtICYmCisKKwlnaXQgcmViYXNlIC0tc2tpcCAmJgorCisJdGVzdF93cml0ZV9saW5lcyBEIEMgQiBBID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIGRvZXMgbm90IGxlYXZlIHN0YXRlIGxheWluZyBhcm91bmQnICcKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdGluZyBsb2NhbG1vZHN+MiAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSB1cHN0cmVhbSAmJgorCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9DSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9NU0cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDI1LXJlYmFzZS10b3BvbG9neS1tZXJnZXMuc2ggYi90L3QzNDI1LXJlYmFzZS10b3BvbG9neS1tZXJnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTQyZmFhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjUtcmViYXNlLXRvcG9sb2d5LW1lcmdlcy5zaApAQCAtMCwwICsxLDI2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzZSB0b3BvbG9neSB0ZXN0cyB3aXRoIG1lcmdlcycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3Rlc3RfcmV2aXNpb25fc3ViamVjdHMgKCkgeworCWV4cGVjdGVkPSIkMSIKKwlzaGlmdAorCXNldCAtLSAkKGdpdCBsb2cgLS1mb3JtYXQ9JXMgLS1uby13YWxrPXVuc29ydGVkICIkQCIpCisJdGVzdCAiJGV4cGVjdGVkIiA9ICIkKiIKK30KKworIyBhLS0tYi0tLS0tLS0tLS0tYworIyAgICAgIFwgICAgICAgICAgIFwKKyMgICAgICAgZC0tLS0tLS1lICAgXAorIyAgICAgICAgXCAgICAgICBcICAgXAorIyAgICAgICAgIG4tLS1vLS0tdy0tLXYKKyMgICAgICAgICAgICAgIFwKKyMgICAgICAgICAgICAgICB6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBub24tbGluZWFyLWhpc3RvcnknICcKKwl0ZXN0X2NvbW1pdCBhICYmCisJdGVzdF9jb21taXQgYiAmJgorCXRlc3RfY29tbWl0IGMgJiYKKwlnaXQgY2hlY2tvdXQgYiAmJgorCXRlc3RfY29tbWl0IGQgJiYKKwl0ZXN0X2NvbW1pdCBlICYmCisKKwlnaXQgY2hlY2tvdXQgYyAmJgorCXRlc3RfY29tbWl0IGcgJiYKKwlyZXZlcnQgaCBnICYmCisJZ2l0IGNoZWNrb3V0IGQgJiYKKwljaGVycnlfcGljayBncCBnICYmCisJdGVzdF9jb21taXQgaSAmJgorCWdpdCBjaGVja291dCBiICYmCisJdGVzdF9jb21taXQgZiAmJgorCisJZ2l0IGNoZWNrb3V0IGQgJiYKKwl0ZXN0X2NvbW1pdCBuICYmCisJdGVzdF9jb21taXQgbyAmJgorCXRlc3RfbWVyZ2UgdyBlICYmCisJdGVzdF9tZXJnZSB2IGMgJiYKKwlnaXQgY2hlY2tvdXQgbyAmJgorCXRlc3RfY29tbWl0IHoKKycKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBhZnRlciBtZXJnZSBmcm9tIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGUgdyAmJgorCQl0ZXN0X2NtcF9yZXYgZSBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ24gbycgZS4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLS1hcHBseQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwlleHBlY3RlZD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIG9mIG5vbi1saW5lYXIgaGlzdG9yeSBpcyBsaW5lYXJpemVkIGluIHBsYWNlIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGQgdyAmJgorCQl0ZXN0X2NtcF9yZXYgZCBIRUFEfjMgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgIlwnIiRleHBlY3RlZCJcJyIgZC4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ24gbyBlJyAtLWFwcGx5Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnbiBvIGUnIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnbiBvIGUnIC1pCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwlleHBlY3RlZD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIG9mIG5vbi1saW5lYXIgaGlzdG9yeSBpcyBsaW5lYXJpemVkIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGMgdyAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjQgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgIlwnIiRleHBlY3RlZCJcJyIgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgbiBvIGUnIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICdkIG4gbyBlJyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgbiBvIGUnIC1pCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwlleHBlY3RlZD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIG9mIG5vbi1saW5lYXIgaGlzdG9yeSB3aXRoIG1lcmdlcyBhZnRlciB1cHN0cmVhbSBtZXJnZSBpcyBsaW5lYXJpemVkIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGMgdiAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjQgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgIlwnIiRleHBlY3RlZCJcJyIgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgbiBvIGUnIC0tYXBwbHkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICdkIG4gbyBlJyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgbiBvIGUnIC1pCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBSRUJBU0VfUDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgcmViYXNlIC1wIHRlc3RzLCBhcyBhc2tlZCBmb3InCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgaXMgbm8tb3AgaW4gbm9uLWxpbmVhciBoaXN0b3J5IiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCBkIHcgJiYKKwl0ZXN0X2NtcF9yZXYgdyBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCBpcyBuby1vcCB3aGVuIGJhc2UgaW5zaWRlIHNlY29uZCBwYXJlbnQiICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGUgdyAmJgorCXRlc3RfY21wX3JldiB3IEhFQUQKKyIKKwordGVzdF9leHBlY3RfZmFpbHVyZSAicmViYXNlIC1wIC0tcm9vdCBvbiBub24tbGluZWFyIGhpc3RvcnkgaXMgYSBuby1vcCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgLS1yb290IHcgJiYKKwl0ZXN0X2NtcF9yZXYgdyBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCByZS1jcmVhdGVzIG1lcmdlIGZyb20gc2lkZSBicmFuY2giICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIHogdyAmJgorCXRlc3RfY21wX3JldiB6IEhFQUReICYmCisJdGVzdF9jbXBfcmV2IHdeMiBIRUFEXjIKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgaW50ZXJuYWwgbWVyZ2UiICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGMgdyAmJgorCXRlc3RfY21wX3JldiBjIEhFQUR+NCAmJgorCXRlc3RfY21wX3JldiBIRUFEXjJeIEhFQUR+MyAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ2QgbiBlIG8gdycgSEVBRH4zIEhFQUR+MiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgY2FuIHJlLWNyZWF0ZSB0d28gYnJhbmNoZXMgb24gb250byIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIGMgZCB3ICYmCisJdGVzdF9jbXBfcmV2IGMgSEVBRH4zICYmCisJdGVzdF9jbXBfcmV2IGMgSEVBRF4yXiAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ24gZSBvIHcnIEhFQUR+MiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCisjICAgICAgIGYKKyMgICAgICAvCisjIGEtLS1iLS0tYy0tLWctLS1oCisjICAgICAgXAorIyAgICAgICBkLS0tZ3AtLWkKKyMgICAgICAgIFwgICAgICAgXAorIyAgICAgICAgIGUtLS0tLS0tdQorIworIyBncCA9IGNoZXJyeS1waWNrZWQgZworIyBoID0gcmV2ZXJ0ZWQgZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2Ygbm9uLWxpbmVhci1oaXN0b3J5IGZvciBwYXRjaC1lcXVpdmFsZW5jZSB0ZXN0cycgJworCWdpdCBjaGVja291dCBlICYmCisJdGVzdF9tZXJnZSB1IGkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgaGlzdG9yeSBhcm91bmQgZHJvcHBlZCBjb21taXQgbWF0Y2hpbmcgdXBzdHJlYW0iICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGggdSAmJgorCXRlc3RfY21wX3JldiBoIEhFQUR+MyAmJgorCXRlc3RfY21wX3JldiBIRUFEXjJeIEhFQUR+MiAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ2QgaSBlIHUnIEhFQUR+MiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgLS1vbnRvIGluIG1lcmdlZCBoaXN0b3J5IGRyb3BzIHBhdGNoZXMgaW4gdXBzdHJlYW0iICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBmIGggdSAmJgorCXRlc3RfY21wX3JldiBmIEhFQUR+MyAmJgorCXRlc3RfY21wX3JldiBIRUFEXjJeIEhFQUR+MiAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ2QgaSBlIHUnIEhFQUR+MiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgLS1vbnRvIGluIG1lcmdlZCBoaXN0b3J5IGRvZXMgbm90IGRyb3AgcGF0Y2hlcyBpbiBvbnRvIiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gaCBmIHUgJiYKKwl0ZXN0X2NtcF9yZXYgaCBIRUFEfjMgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yfjIgSEVBRH4yICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBncCBpIGUgdScgSEVBRH4yIEhFQUReMl4gSEVBRF4yIEhFQUReIEhFQUQKKyIKKworIyBhLS0tYi0tLWMtLS1nLS0taAorIyAgICAgIFwKKyMgICAgICAgZC0tLWdwLS1zCisjICAgICAgICBcICAgXCAvCisjICAgICAgICAgXCAgIFgKKyMgICAgICAgICAgXCAvIFwKKyMgICAgICAgICAgIGUtLS10CisjCisjIGdwID0gY2hlcnJ5LXBpY2tlZCBnCisjIGggPSByZXZlcnRlZCBnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBub24tbGluZWFyLWhpc3RvcnkgZm9yIGRyb3BwaW5nIHdob2xlIHNpZGUnICcKKwlnaXQgY2hlY2tvdXQgZ3AgJiYKKwl0ZXN0X21lcmdlIHMgZSAmJgorCWdpdCBjaGVja291dCBlICYmCisJdGVzdF9tZXJnZSB0IGdwCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgInJlYmFzZSAtcCBkcm9wcyBtZXJnZSBjb21taXQgd2hlbiBlbnRpcmUgZmlyc3QtcGFyZW50IHNpZGUgaXMgZHJvcHBlZCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgaCBzICYmCisJdGVzdF9jbXBfcmV2IGggSEVBRH4yICYmCisJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgaC4uCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCBkcm9wcyBtZXJnZSBjb21taXQgd2hlbiBlbnRpcmUgc2Vjb25kLXBhcmVudCBzaWRlIGlzIGRyb3BwZWQiICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGggdCAmJgorCXRlc3RfY21wX3JldiBoIEhFQUR+MiAmJgorCXRlc3RfbGluZWFyX3JhbmdlICdkIGUnIGguLgorIgorCisjIGEtLS1iLS0tYworIyAgICAgIFwKKyMgICAgICAgZC0tLWUKKyMgICAgICAgIFwgICBcCisjICAgICAgICAgbi0tLXIKKyMgICAgICAgICAgXAorIyAgICAgICAgICAgbworIworIyByID0gdHJlZS1zYW1lIHdpdGggbgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2Ygbm9uLWxpbmVhci1oaXN0b3J5IGZvciBlbXB0eSBjb21taXRzJyAnCisJZ2l0IGNoZWNrb3V0IG4gJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgZSAmJgorCWdpdCByZXNldCBuIC4gJiYKKwlnaXQgY29tbWl0IC1tIHIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mICYmCisJZ2l0IHRhZyByCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCByZS1jcmVhdGVzIGVtcHR5IGludGVybmFsIG1lcmdlIGNvbW1pdCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgYyByICYmCisJdGVzdF9jbXBfcmV2IGMgSEVBRH4zICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMl4gSEVBRH4yICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBlIG4gcicgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCByZS1jcmVhdGVzIGVtcHR5IG1lcmdlIGNvbW1pdCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgbyByICYmCisJdGVzdF9jbXBfcmV2IGUgSEVBRF4yICYmCisJdGVzdF9jbXBfcmV2IG8gSEVBRF4gJiYKKwl0ZXN0X3JldmlzaW9uX3N1YmplY3RzICdyJyBIRUFECisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQyNi1yZWJhc2Utc3VibW9kdWxlLnNoIGIvdC90MzQyNi1yZWJhc2Utc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyYmJhMDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDI2LXJlYmFzZS1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzZSBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK2dpdF9yZWJhc2UgKCkgeworCWdpdCBzdGF0dXMgLXN1ID5leHBlY3QgJiYKKwlscyAtMXBSICogPj5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb3VycyBIRUFEICYmCisJZWNobyB4ID4+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSBhZGRfeCAmJgorCWdpdCByZXZlcnQgSEVBRCAmJgorCWdpdCBzdGF0dXMgLXN1ID5hY3R1YWwgJiYKKwlscyAtMXBSICogPj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlYmFzZSAiJDEiCit9CisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3JlYmFzZSIKKworZ2l0X3JlYmFzZV9pbnRlcmFjdGl2ZSAoKSB7CisJZ2l0IHN0YXR1cyAtc3UgPmV4cGVjdCAmJgorCWxzIC0xcFIgKiA+PmV4cGVjdCAmJgorCWdpdCBjaGVja291dCAtYiBvdXJzIEhFQUQgJiYKKwllY2hvIHggPj5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGFkZF94ICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisJZ2l0IHN0YXR1cyAtc3UgPmFjdHVhbCAmJgorCWxzIC0xcFIgKiA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwllY2hvICJmYWtlLWVkaXRvci5zaCIgPi5naXQvaW5mby9leGNsdWRlICYmCisJZ2l0IHJlYmFzZSAtaSAiJDEiCit9CisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3JlYmFzZV9pbnRlcmFjdGl2ZSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGludGVyYWN0aXZlIGlnbm9yZXMgbW9kaWZpZWQgc3VibW9kdWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyIHN1YiIgJiYKKwlnaXQgaW5pdCBzdWIgJiYKKwlnaXQgLUMgc3ViIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgaW5pdCBzdXBlciAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUgYWRkIC4uL3N1YiAmJgorCWdpdCAtQyBzdXBlciBjb25maWcgc3VibW9kdWxlLnN1Yi5pZ25vcmUgZGlydHkgJiYKKwk+c3VwZXIvZm9vICYmCisJZ2l0IC1DIHN1cGVyIGFkZCBmb28gJiYKKwlnaXQgLUMgc3VwZXIgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdXBlciBhICYmCisJdGVzdF9jb21taXQgLUMgc3VwZXIgYiAmJgorCXRlc3RfY29tbWl0IC1DIHN1cGVyL3N1YiBjICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJZ2l0IC1DIHN1cGVyIHJlYmFzZSAtaSBIRUFEXl4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDI3LXJlYmFzZS1zdWJ0cmVlLnNoIGIvdC90MzQyNy1yZWJhc2Utc3VidHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OWU0M2EzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyNy1yZWJhc2Utc3VidHJlZS5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgdGVzdHMgZm9yIC1Yc3VidHJlZQorCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIGFuZCB0ZXN0cyB0aGUgc3VidHJlZSBzdHJhdGVneS4KKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK2NvbW1pdF9tZXNzYWdlKCkgeworCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVzIC0xICIkMSIKK30KKworIyBUaGVyZSBhcmUgYSBmZXcgYnVncyBpbiB0aGUgcmViYXNlIHdpdGggcmVnYXJkcyB0byB0aGUgc3VidHJlZSBzdHJhdGVneSwgYW5kCisjIHRoaXMgdGVzdCBzY3JpcHQgdHJpZXMgdG8gZG9jdW1lbnQgdGhlbS4gIEZpcnN0LCB0aGUgZm9sbG93aW5nIGNvbW1pdCBoaXN0b3J5CisjIGlzIGdlbmVyYXRlZCAodGhlIG9uZWxpbmVzIGFyZSBzaG93biwgdGltZSBmbG93cyBmcm9tIGxlZnQgdG8gcmlnaHQpOgorIworIyBtYXN0ZXIxIC0gbWFzdGVyMiAtIG1hc3RlcjMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyMgUkVBRE1FIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWRkIHN1YnByb2plY3QgbWFzdGVyIC0gbWFzdGVyNCAtIGZpbGVzX3N1YnRyZWUvbWFzdGVyNQorIworIyBXaGVyZSB0aGUgbWVyZ2UgbW92ZXMgdGhlIGZpbGVzIG1hc3RlclsxMjNdLnQgaW50byB0aGUgc3ViZGlyZWN0b3J5CisjIGZpbGVzX3N1YnRyZWUvIGFuZCBtYXN0ZXI0IGFzIHdlbGwgYXMgZmlsZXNfc3VidHJlZS9tYXN0ZXI1IGFkZCBmaWxlcyB0byB0aGF0CisjIGRpcmVjdG9yeSBkaXJlY3RseS4KKyMKKyMgVGhlbiwgaW4gc3Vic2VxdWVudCB0ZXN0IGNhc2VzLCBgZ2l0IGZpbHRlci1icmFuY2hgIGlzIHVzZWQgdG8gZGlzdGlsbCBqdXN0CisjIHRoZSBjb21taXRzIHRoYXQgdG91Y2ggZmlsZXNfc3VidHJlZS8uIFRvIGdpdmUgaXQgYSBmaW5hbCBwcmUtcmViYXNlIHRvdWNoLAorIyBhbiBlbXB0eSBjb21taXQgaXMgYWRkZWQgb24gdG9wLiBUaGUgcHJlLXJlYmFzZSBjb21taXQgaGlzdG9yeSBsb29rcyBsaWtlCisjIHRoaXM6CisjCisjIEFkZCBzdWJwcm9qZWN0IG1hc3RlciAtIG1hc3RlcjQgLSBmaWxlc19zdWJ0cmVlL21hc3RlcjUgLSBFbXB0eSBjb21taXQKKyMKKyMgd2hlcmUgdGhlIHJvb3QgY29tbWl0IGFkZHMgdGhyZWUgZmlsZXM6IG1hc3RlcjEudCwgbWFzdGVyMi50IGFuZCBtYXN0ZXIzLnQuCisjCisjIFRoaXMgY29tbWl0IGhpc3RvcnkgaXMgdGhlbiByZWJhc2VkIG9udG8gYG1hc3RlcjNgIHdpdGggdGhlCisjIGAtWHN1YnRyZWU9ZmlsZXNfc3VidHJlZWAgb3B0aW9uIGluIHRocmVlIGRpZmZlcmVudCB3YXlzOgorIworIyAxLiB1c2luZyBgLS1wcmVzZXJ2ZS1tZXJnZXNgCisjIDIuIHVzaW5nIGAtLXByZXNlcnZlLW1lcmdlc2AgYW5kIC0ta2VlcC1lbXB0eQorIyAzLiB3aXRob3V0IHNwZWNpZnlpbmcgYSByZWJhc2UgYmFja2VuZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IFJFQURNRSAmJgorCisJZ2l0IGluaXQgZmlsZXMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBmaWxlcyBtYXN0ZXIxICYmCisJdGVzdF9jb21taXQgLUMgZmlsZXMgbWFzdGVyMiAmJgorCXRlc3RfY29tbWl0IC1DIGZpbGVzIG1hc3RlcjMgJiYKKworCTogcGVyZm9ybSBzdWJ0cmVlIG1lcmdlIGludG8gZmlsZXNfc3VidHJlZS8gJiYKKwlnaXQgZmV0Y2ggZmlsZXMgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9maWxlcy1tYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyAtLW5vLWNvbW1pdCAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgXAorCQlmaWxlcy1tYXN0ZXIgJiYKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PWZpbGVzX3N1YnRyZWUgLXUgZmlsZXMtbWFzdGVyICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHN1YnByb2plY3QgbWFzdGVyIiAmJgorCisJOiBhZGQgdHdvIGV4dHJhIGNvbW1pdHMgdG8gcmViYXNlICYmCisJdGVzdF9jb21taXQgLUMgZmlsZXNfc3VidHJlZSBtYXN0ZXI0ICYmCisJdGVzdF9jb21taXQgZmlsZXNfc3VidHJlZS9tYXN0ZXI1ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdG8tcmViYXNlICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tbm8tZGF0YSBIRUFEIC0tIGZpbGVzX3N1YnRyZWUvIHwKKwkJc2VkIC1lICJzJVwoWzAtOWEtZl1cezQwXH0gXClmaWxlc19zdWJ0cmVlLyVcMSUiIHwKKwkJZ2l0IGZhc3QtaW1wb3J0IC0tZm9yY2UgLS1xdWlldCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY29tbWl0IC1tICJFbXB0eSBjb21taXQiIC0tYWxsb3ctZW1wdHkKKycKKworIyBGQUlMVVJFOiBEb2VzIG5vdCBwcmVzZXJ2ZSBtYXN0ZXI0LgordGVzdF9leHBlY3RfZmFpbHVyZSBSRUJBU0VfUCAnUmViYXNlIC1Yc3VidHJlZSAtLXByZXNlcnZlLW1lcmdlcyAtLW9udG8gY29tbWl0JyAnCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZS1wcmVzZXJ2ZS1tZXJnZXMgdG8tcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtWHN1YnRyZWU9ZmlsZXNfc3VidHJlZSAtLXByZXNlcnZlLW1lcmdlcyAtLW9udG8gZmlsZXMtbWFzdGVyIG1hc3RlciAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEfikiID0gIm1hc3RlcjQiICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUQpIiA9ICJmaWxlc19zdWJ0cmVlL21hc3RlcjUiCisnCisKKyMgRkFJTFVSRTogRG9lcyBub3QgcHJlc2VydmUgbWFzdGVyNC4KK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUkVCQVNFX1AgJ1JlYmFzZSAtWHN1YnRyZWUgLS1rZWVwLWVtcHR5IC0tcHJlc2VydmUtbWVyZ2VzIC0tb250byBjb21taXQnICcKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlLWtlZXAtZW1wdHkgdG8tcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtWHN1YnRyZWU9ZmlsZXNfc3VidHJlZSAtLWtlZXAtZW1wdHkgLS1wcmVzZXJ2ZS1tZXJnZXMgLS1vbnRvIGZpbGVzLW1hc3RlciBtYXN0ZXIgJiYKKwl2ZXJib3NlIHRlc3QgIiQoY29tbWl0X21lc3NhZ2UgSEVBRH4yKSIgPSAibWFzdGVyNCIgJiYKKwl2ZXJib3NlIHRlc3QgIiQoY29tbWl0X21lc3NhZ2UgSEVBRH4pIiA9ICJmaWxlc19zdWJ0cmVlL21hc3RlcjUiICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUQpIiA9ICJFbXB0eSBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlYmFzZSAtWHN1YnRyZWUgLS1lbXB0eT1hc2sgLS1vbnRvIGNvbW1pdCcgJworCXJlc2V0X3JlYmFzZSAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2Utb250byB0by1yZWJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0tZW1wdHk9YXNrIC0tb250byBmaWxlcy1tYXN0ZXIgbWFzdGVyICYmCisJOiBmaXJzdCBwaWNrIHJlc3VsdHMgaW4gbm8gY2hhbmdlcyAmJgorCWdpdCByZWJhc2UgLS1za2lwICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUR+MikiID0gIm1hc3RlcjQiICYmCisJdmVyYm9zZSB0ZXN0ICIkKGNvbW1pdF9tZXNzYWdlIEhFQUR+KSIgPSAiZmlsZXNfc3VidHJlZS9tYXN0ZXI1IiAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEKSIgPSAiRW1wdHkgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZWJhc2UgLVhzdWJ0cmVlIC0tZW1wdHk9YXNrIC0tcmViYXNlLW1lcmdlcyAtLW9udG8gY29tbWl0JyAnCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZS1tZXJnZXMtb250byB0by1yZWJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1Yc3VidHJlZT1maWxlc19zdWJ0cmVlIC0tZW1wdHk9YXNrIC0tcmViYXNlLW1lcmdlcyAtLW9udG8gZmlsZXMtbWFzdGVyIC0tcm9vdCAmJgorCTogZmlyc3QgcGljayByZXN1bHRzIGluIG5vIGNoYW5nZXMgJiYKKwlnaXQgcmViYXNlIC0tc2tpcCAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEfjIpIiA9ICJtYXN0ZXI0IiAmJgorCXZlcmJvc2UgdGVzdCAiJChjb21taXRfbWVzc2FnZSBIRUFEfikiID0gImZpbGVzX3N1YnRyZWUvbWFzdGVyNSIgJiYKKwl2ZXJib3NlIHRlc3QgIiQoY29tbWl0X21lc3NhZ2UgSEVBRCkiID0gIkVtcHR5IGNvbW1pdCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDI4LXJlYmFzZS1zaWdub2ZmLnNoIGIvdC90MzQyOC1yZWJhc2Utc2lnbm9mZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNjk5M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQyOC1yZWJhc2Utc2lnbm9mZi5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLXNpZ25vZmYKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHJlYmFzZSAtLXNpZ25vZmYgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IHdvcmtzLgorJworCisuIC4vdGVzdC1saWIuc2gKKworIyBBIHNpbXBsZSBmaWxlIHRvIGNvbW1pdAorY2F0ID5maWxlIDw8RU9GCithCitFT0YKKworIyBFeHBlY3RlZCBjb21taXQgbWVzc2FnZSBmb3IgaW5pdGlhbCBjb21taXQgYWZ0ZXIgcmViYXNlIC0tc2lnbm9mZgorY2F0ID5leHBlY3RlZC1pbml0aWFsLXNpZ25lZCA8PEVPRgorSW5pdGlhbCBlbXB0eSBjb21taXQKKworU2lnbmVkLW9mZi1ieTogJChnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfCBzZWQgLWUgInMvPi4qLz4vIikKK0VPRgorCisjIEV4cGVjdGVkIGNvbW1pdCBtZXNzYWdlIGFmdGVyIHJlYmFzZSAtLXNpZ25vZmYKK2NhdCA+ZXhwZWN0ZWQtc2lnbmVkIDw8RU9GCitmaXJzdAorCitTaWduZWQtb2ZmLWJ5OiAkKGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8IHNlZCAtZSAicy8+LiovPi8iKQorRU9GCisKKyMgRXhwZWN0ZWQgY29tbWl0IG1lc3NhZ2UgYWZ0ZXIgcmViYXNlIHdpdGhvdXQgLS1zaWdub2ZmIChvciB3aXRoIC0tbm8tc2lnbm9mZikKK2NhdCA+ZXhwZWN0ZWQtdW5zaWduZWQgPDxFT0YKK2ZpcnN0CitFT0YKKworCisjIFdlIGNvbmZpZ3VyZSBhbiBhbGlhcyB0byBkbyB0aGUgcmViYXNlIC0tc2lnbm9mZiBzbyB0aGF0CisjIG9uIHRoZSBuZXh0IHN1YnRlc3Qgd2UgY2FuIHNob3cgdGhhdCAtLW5vLXNpZ25vZmYgb3ZlcnJpZGVzIHRoZSBhbGlhcwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tc2lnbm9mZiBhZGRzIGEgc2lnbi1vZmYgbGluZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiSW5pdGlhbCBlbXB0eSBjb21taXQiICYmCisJZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwlnaXQgY29uZmlnIGFsaWFzLnJicyAicmViYXNlIC0tc2lnbm9mZiIgJiYKKwlnaXQgcmJzIEhFQUReICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zaWduZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW5vLXNpZ25vZmYgZG9lcyBub3QgYWRkIGEgc2lnbi1vZmYgbGluZScgJworCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZmlyc3QiICYmCisJZ2l0IHJicyAtLW5vLXNpZ25vZmYgSEVBRF4gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXVuc2lnbmVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1leGVjIC0tc2lnbm9mZiBhZGRzIGEgc2lnbi1vZmYgbGluZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gZXhlYyIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImZpcnN0IiAmJgorCWdpdCByZWJhc2UgLS1leGVjICJ0b3VjaCBleGVjIiAtLXNpZ25vZmYgSEVBRF4gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBleGVjICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXNpZ25lZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCAtLXNpZ25vZmYgYWRkcyBhIHNpZ24tb2ZmIGxpbmUnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImZpcnN0IiAmJgorCWdpdCByZWJhc2UgLS1yb290IC0ta2VlcC1lbXB0eSAtLXNpZ25vZmYgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWluaXRpYWwtc2lnbmVkIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zaWduZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXNpZ25vZmYgZmFpbHMnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImZpcnN0IiAmJgorCWdpdCByZWJhc2UgLWkgLS1zaWdub2ZmIEhFQUReICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXNpZ25lZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1tIC0tc2lnbm9mZiBmYWlscycgJworCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZmlyc3QiICYmCisJZ2l0IHJlYmFzZSAtbSAtLXNpZ25vZmYgSEVBRF4gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc2lnbmVkIGFjdHVhbAorJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDI5LXJlYmFzZS1lZGl0LXRvZG8uc2ggYi90L3QzNDI5LXJlYmFzZS1lZGl0LXRvZG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzAyNGQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjktcmViYXNlLWVkaXQtdG9kby5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmViYXNlIHNob3VsZCByZXJlYWQgdGhlIHRvZG8gZmlsZSBpZiBhbiBleGVjIG1vZGlmaWVzIGl0JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGZpcnN0IGZpbGUgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgZmlsZSAmJgorCXRlc3RfY29tbWl0IHRoaXJkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGV4ZWMgbW9kaWZpZXMgcmViYXNlLXRvZG8nICcKKwl0b2RvPS5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCWdpdCByZWJhc2UgSEVBRCAteCAiZWNobyBleGVjIHRvdWNoIEYgPj4kdG9kbyIgJiYKKwl0ZXN0IC1lIEYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9vc2Ugb2JqZWN0IGNhY2hlIHZzIHJlLXJlYWRpbmcgdG9kbyBsaXN0JyAnCisJR0lUX1JFQkFTRV9UT0RPPS5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCWV4cG9ydCBHSVRfUkVCQVNFX1RPRE8gJiYKKwl3cml0ZV9zY3JpcHQgYXBwZW5kLXRvZG8uc2ggPDwtXEVPUyAmJgorCSMgRm9yIHZhbHVlcyA1IGFuZCA2LCB0aGlzIHlpZWxkcyBTSEEtMXMgd2l0aCB0aGUgc2FtZSBmaXJzdCB0d28gZGlnaXRzCisJZWNobyAicGljayAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBcCisJCSQocHJpbnRmICIlc1xcbiIgXAorCQkJInRyZWUgJEVNUFRZX1RSRUUiIFwKKwkJCSJhdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLm9yZz4gJDEgKzAwMDAiIFwKKwkJCSJjb21taXR0ZXIgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLm9yZz4gJDEgKzAwMDAiIFwKKwkJCSIiIFwKKwkJCSIkMSIgfAorCQkgIGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbikpIiA+PiRHSVRfUkVCQVNFX1RPRE8KKworCXNoaWZ0CisJdGVzdCAteiAiJCoiIHx8CisJZWNobyAiZXhlYyAkMCAkKiIgPj4kR0lUX1JFQkFTRV9UT0RPCisJRU9TCisKKwlnaXQgcmViYXNlIEhFQUQgLXggIi4vYXBwZW5kLXRvZG8uc2ggNSA2IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b2RvIGlzIHJlLXJlYWQgYWZ0ZXIgcmV3b3JkIGFuZCBzcXVhc2gnICcKKwl3cml0ZV9zY3JpcHQgcmV3b3JkLWVkaXRvci5zaCA8PC1cRU9TICYmCisJR0lUX1NFUVVFTkNFX0VESVRPUj0iZWNobyBcImV4ZWMgZWNobyAkKGNhdCBmaWxlKSA+PmFjdHVhbFwiID4+IiBcCisJCWdpdCByZWJhc2UgLS1lZGl0LXRvZG8KKwlFT1MKKworCXRlc3Rfd3JpdGVfbGluZXMgZmlyc3QgdGhpcmQgPmV4cGVjdGVkICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJR0lUX1NFUVVFTkNFX0VESVRPUj0iJEVESVRPUiIgRkFLRV9MSU5FUz0icmV3b3JkIDEgc3F1YXNoIDIgZml4dXAgMyIgXAorCQlHSVRfRURJVE9SPS4vcmV3b3JkLWVkaXRvci5zaCBnaXQgcmViYXNlIC1pIC0tcm9vdCB0aGlyZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1yZWFkaW5nIHRvZG8gZG9lc250IGludGVyZmVyZSB3aXRoIHJldmVydCAtLWVkaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHRoaXJkICYmCisKKwlnaXQgcmV2ZXJ0IC0tZWRpdCB0aGlyZCBzZWNvbmQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlSZXZlcnQgInNlY29uZCIKKwlSZXZlcnQgInRoaXJkIgorCXRoaXJkCisJc2Vjb25kCisJZmlyc3QKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSIlcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtcmVhZGluZyB0b2RvIGRvZXNudCBpbnRlcmZlcmUgd2l0aCBjaGVycnktcGljayAtLWVkaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisKKwlnaXQgY2hlcnJ5LXBpY2sgLS1lZGl0IHNlY29uZCB0aGlyZCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXRoaXJkCisJc2Vjb25kCisJZmlyc3QKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSIlcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDMwLXJlYmFzZS1tZXJnZXMuc2ggYi90L3QzNDMwLXJlYmFzZS1tZXJnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTFiYzNlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaApAQCAtMCwwICsxLDQ5NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOCBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLWkgLS1yZWJhc2UtbWVyZ2VzCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2UgImludGVyYWN0aXZlbHkiLCByZXRhaW5pbmcgdGhlIGJyYW5jaCBzdHJ1Y3R1cmUgYnkKK3JlY3JlYXRpbmcgbWVyZ2UgY29tbWl0cy4KKworSW5pdGlhbCBzZXR1cDoKKworICAgIC0tIEIgLS0gICAgICAgICAgICAgICAgICAgKGZpcnN0KQorICAgLyAgICAgICBcCisgQSAtIEMgLSBEIC0gRSAtIEggICAgICAgICAgICAobWFzdGVyKQorICAgXCAgICBcICAgICAgIC8KKyAgICBcICAgIEYgLSBHICAgICAgICAgICAgICAgIChzZWNvbmQpCisgICAgIFwKKyAgICAgIENvbmZsaWN0aW5nLUcKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1sb2ctZ3JhcGguc2gKKwordGVzdF9jbXBfZ3JhcGggKCkgeworCWNhdCA+ZXhwZWN0ICYmCisJbGliX3Rlc3RfY21wX2dyYXBoIC0tYm91bmRhcnkgLS1mb3JtYXQ9JXMgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXdyaXRlX3NjcmlwdCByZXBsYWNlLWVkaXRvci5zaCA8PC1cRU9GICYmCisJbXYgIiQxIiAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggT1JJR0lOQUwtVE9ETykiCisJY3Agc2NyaXB0LWZyb20tc2NyYXRjaCAiJDEiCisJRU9GCisKKwl0ZXN0X2NvbW1pdCBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZpcnN0ICYmCisJdGVzdF9jb21taXQgQiAmJgorCWI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgQyAmJgorCWM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwl0ZXN0X2NvbW1pdCBEICYmCisJZD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBCICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBFICYmCisJZ2l0IHRhZyAtbSBFIEUgJiYKKwllPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZCBDICYmCisJdGVzdF9jb21taXQgRiAmJgorCWY9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwl0ZXN0X2NvbW1pdCBHICYmCisJZz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgRyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSCAmJgorCWg9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgdGFnIC1tIEggSCAmJgorCWdpdCBjaGVja291dCBBICYmCisJdGVzdF9jb21taXQgY29uZmxpY3RpbmctRyBHLnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGNvbXBsZXRlbHkgZGlmZmVyZW50IHN0cnVjdHVyZScgJworCWNhdCA+c2NyaXB0LWZyb20tc2NyYXRjaCA8PC1cRU9GICYmCisJbGFiZWwgb250bworCisJIyBvbmVicmFuY2gKKwlwaWNrIEcKKwlwaWNrIEQKKwlsYWJlbCBvbmVicmFuY2gKKworCSMgc2Vjb25kCisJcmVzZXQgb250bworCXBpY2sgQgorCWxhYmVsIHNlY29uZAorCisJcmVzZXQgb250bworCW1lcmdlIC1DIEggc2Vjb25kCisJbWVyZ2Ugb25lYnJhbmNoICMgTWVyZ2UgdGhlIHRvcGljIGJyYW5jaCAnXCcnb25lYnJhbmNoJ1wnJworCUVPRgorCXRlc3RfY29uZmlnIHNlcXVlbmNlLmVkaXRvciBcIiIkUFdEIi9yZXBsYWNlLWVkaXRvci5zaFwiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaSAtciBBIG1hc3RlciAmJgorCXRlc3RfY21wX2dyYXBoIDw8LVxFT0YKKwkqICAgTWVyZ2UgdGhlIHRvcGljIGJyYW5jaCAnXCcnb25lYnJhbmNoJ1wnJworCXxcCisJfCAqIEQKKwl8ICogRworCSogfCAgIEgKKwl8XCBcCisJfCB8LworCXwvfAorCXwgKiBCCisJfC8KKwkqIEEKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2VuZXJhdGUgY29ycmVjdCB0b2RvIGxpc3QnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlsYWJlbCBvbnRvCisKKwlyZXNldCBvbnRvCisJcGljayAkYiBCCisJbGFiZWwgRQorCisJcmVzZXQgb250bworCXBpY2sgJGMgQworCWxhYmVsIGJyYW5jaC1wb2ludAorCXBpY2sgJGYgRgorCXBpY2sgJGcgRworCWxhYmVsIEgKKworCXJlc2V0IGJyYW5jaC1wb2ludCAjIEMKKwlwaWNrICRkIEQKKwltZXJnZSAtQyAkZSBFICMgRQorCW1lcmdlIC1DICRoIEggIyBICisKKwlFT0YKKworCWdyZXAgLXYgIl4jIiA8LmdpdC9PUklHSU5BTC1UT0RPID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ByZXNldGAgcmVmdXNlcyB0byBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGVzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHJlZnVzZS10by1yZXNldCAmJgorCXRlc3RfY29tbWl0IGRvbnQtb3ZlcndyaXRlLXVudHJhY2tlZCAmJgorCWdpdCBjaGVja291dCBAey0xfSAmJgorCTogPmRvbnQtb3ZlcndyaXRlLXVudHJhY2tlZC50ICYmCisJZWNobyAicmVzZXQgcmVmcy90YWdzL2RvbnQtb3ZlcndyaXRlLXVudHJhY2tlZCIgPnNjcmlwdC1mcm9tLXNjcmF0Y2ggJiYKKwl0ZXN0X2NvbmZpZyBzZXF1ZW5jZS5lZGl0b3IgXCIiJFBXRCIvcmVwbGFjZS1lZGl0b3Iuc2hcIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWlyIEhFQUQgJiYKKwlnaXQgcmViYXNlIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGBtZXJnZSAtQ2Agd3JpdGVzIHBhdGNoIChtYXkgYmUgcmVzY2hlZHVsZWQsIHRvbyknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0aW5nLW1lcmdlIEEgJiYKKworCTogZmFpbCBiZWNhdXNlIG9mIGNvbmZsaWN0aW5nIHVudHJhY2tlZCBmaWxlICYmCisJPkcudCAmJgorCWVjaG8gIm1lcmdlIC1DIEggRyIgPnNjcmlwdC1mcm9tLXNjcmF0Y2ggJiYKKwl0ZXN0X2NvbmZpZyBzZXF1ZW5jZS5lZGl0b3IgXCIiJFBXRCIvcmVwbGFjZS1lZGl0b3Iuc2hcIiAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWlyIEhFQUQgJiYKKwlncmVwICJebWVyZ2UgLUMgLiogRyQiIC5naXQvcmViYXNlLW1lcmdlL2RvbmUgJiYKKwlncmVwICJebWVyZ2UgLUMgLiogRyQiIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmViYXNlLW1lcmdlL3BhdGNoICYmCisKKwk6IGZhaWwgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdCAmJgorCXJtIEcudCAuZ2l0L3JlYmFzZS1tZXJnZS9wYXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgY29uZmxpY3RpbmctRyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSEgZ3JlcCAiXm1lcmdlIC1DIC4qIEckIiAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlYmFzZS1tZXJnZS9wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgYG1lcmdlIDxicmFuY2g+YCBkb2VzIG5vdCBjcmFzaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3RpbmctRyAmJgorCisJZWNobyAibWVyZ2UgRyIgPnNjcmlwdC1mcm9tLXNjcmF0Y2ggJiYKKwl0ZXN0X2NvbmZpZyBzZXF1ZW5jZS5lZGl0b3IgXCIiJFBXRCIvcmVwbGFjZS1lZGl0b3Iuc2hcIiAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWlyIEhFQUQgJiYKKwkhIGdyZXAgIl5tZXJnZSBHJCIgLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJZ3JlcCAiXk1lcmdlIGJyYW5jaCAke1NRfUcke1NRfSQiIC5naXQvcmViYXNlLW1lcmdlL21lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIG1lcmdlIC1jIHN0aWxsIHJld29yZHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgZmFzdC1mb3J3YXJkLW1lcmdlLWMgSCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ZWRpdGVkIFwKKwkJCUdJVF9TRVFVRU5DRV9FRElUT1I9ImVjaG8gbWVyZ2UgLWMgSCBHID4iIFwKKwkJCWdpdCByZWJhc2UgLWlyIEBeCisJKSAmJgorCWVjaG8gZWRpdGVkID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVCIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBhIGJyYW5jaCB0aXAgdGhhdCB3YXMgY2hlcnJ5LXBpY2tlZCBhbHJlYWR5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFscmVhZHktdXBzdHJlYW0gbWFzdGVyICYmCisJYmFzZT0iJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorCisJdGVzdF9jb21taXQgQTEgJiYKKwl0ZXN0X2NvbW1pdCBBMiAmJgorCWdpdCByZXNldCAtLWhhcmQgJGJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBCMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbSAiTWVyZ2UgYnJhbmNoIEEiIEEyICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdXBzdHJlYW0td2l0aC1hMiAkYmFzZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayBBMiAmJgorCisJZ2l0IGNoZWNrb3V0IGFscmVhZHktdXBzdHJlYW0gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pIC1yIHVwc3RyZWFtLXdpdGgtYTIgJiYKKwl0ZXN0X2NtcF9ncmFwaCB1cHN0cmVhbS13aXRoLWEyLi4gPDwtXEVPRgorCSogICBNZXJnZSBicmFuY2ggQQorCXxcCisJfCAqIEExCisJKiB8IEIxCisJfC8KKwlvIEEyCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCByZWJhc2UgY291c2lucyB1bmxlc3MgYXNrZWQgZm9yJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvdXNpbnMgbWFzdGVyICYmCisJYmVmb3JlPSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtciBIRUFEXiAmJgorCXRlc3RfY21wX3JldiBIRUFEICRiZWZvcmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcz1yZWJhc2UtY291c2lucyBIRUFEXiAmJgorCXRlc3RfY21wX2dyYXBoIEhFQUReLi4gPDwtXEVPRgorCSogICBNZXJnZSB0aGUgdG9waWMgYnJhbmNoICdcJydvbmVicmFuY2gnXCcnCisJfFwKKwl8ICogRAorCXwgKiBHCisJfC8KKwlvIEgKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcy9yZXdyaXR0ZW4vKiBpcyB3b3JrdHJlZS1sb2NhbCcgJworCWdpdCB3b3JrdHJlZSBhZGQgd3QgJiYKKwljYXQgPnd0L3NjcmlwdC1mcm9tLXNjcmF0Y2ggPDwtXEVPRiAmJgorCWxhYmVsIHh5egorCWV4ZWMgR0lUX0RJUj0uLi8uZ2l0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZXdyaXR0ZW4veHl6ID5hIHx8IDoKKwlleGVjIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZXdyaXR0ZW4veHl6ID5iCisJRU9GCisKKwl0ZXN0X2NvbmZpZyAtQyB3dCBzZXF1ZW5jZS5lZGl0b3IgXCIiJFBXRCIvcmVwbGFjZS1lZGl0b3Iuc2hcIiAmJgorCWdpdCAtQyB3dCByZWJhc2UgLWkgSEVBRCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB3dC9hICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgIiQoY2F0IHd0L2IpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IGNsZWFucyB1cCByZWZzL3Jld3JpdHRlbicgJworCWdpdCBjaGVja291dCAtYiBhYm9ydC1jbGVhbnMtcmVmcy1yZXdyaXR0ZW4gSCAmJgorCUdJVF9TRVFVRU5DRV9FRElUT1I9ImVjaG8gYnJlYWsgPj4iIGdpdCByZWJhc2UgLWlyIEBeICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3Jld3JpdHRlbi9vbnRvICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3Jld3JpdHRlbi9vbnRvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpdCBjbGVhbnMgdXAgcmVmcy9yZXdyaXR0ZW4nICcKKwlnaXQgY2hlY2tvdXQgLWIgcXVpdC1jbGVhbnMtcmVmcy1yZXdyaXR0ZW4gSCAmJgorCUdJVF9TRVFVRU5DRV9FRElUT1I9ImVjaG8gYnJlYWsgPj4iIGdpdCByZWJhc2UgLWlyIEBeICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3Jld3JpdHRlbi9vbnRvICYmCisJZ2l0IHJlYmFzZSAtLXF1aXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmV3cml0dGVuL29udG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1yZXdyaXRlIGhvb2sgYW5kIGZpeHVwcyB3b3JrIGZvciBtZXJnZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgcG9zdC1yZXdyaXRlIEggJiYKKwl0ZXN0X2NvbW1pdCBzYW1lMSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCBzYW1lMiAmJgorCWdpdCBtZXJnZSAtbSAidG8gZml4IHVwIiBzYW1lMSAmJgorCWVjaG8gc2FtZSBvbGQgc2FtZSBvbGQgPnNhbWUyLnQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tZml4dXAgSEVBRCBzYW1lMi50ICYmCisJZml4dXA9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC5naXQvaG9va3MvcG9zdC1yZXdyaXRlIiAmJgorCWVjaG8gImNhdCA+YWN0dWFsIiB8IHdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3Bvc3QtcmV3cml0ZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaSAtLWF1dG9zcXVhc2ggLXIgSEVBRF5eXiAmJgorCXByaW50ZiAiJXMgJXNcbiVzICVzXG4lcyAlc1xuJXMgJXNcbiIgPmV4cGVjdCAkKGdpdCByZXYtcGFyc2UgXAorCQkkZml4dXBeXjIgSEVBRF4yIFwKKwkJJGZpeHVwXl4gSEVBRF4gXAorCQkkZml4dXBeIEhFQUQgXAorCQkkZml4dXAgSEVBRCkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0byBtZXJnZSBhbmNlc3RvcnMgb2YgSEVBRCcgJworCWVjaG8gIm1lcmdlIEhFQUReIiA+c2NyaXB0LWZyb20tc2NyYXRjaCAmJgorCXRlc3RfY29uZmlnIC1DIHd0IHNlcXVlbmNlLmVkaXRvciBcIiIkUFdEIi9yZXBsYWNlLWVkaXRvci5zaFwiICYmCisJYmVmb3JlPSIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgJGJlZm9yZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gdW5yZWxhdGVkICYmCisJKEdJVF9BVVRIT1JfTkFNRT0iUGFyc25pcCIgR0lUX0FVVEhPUl9FTUFJTD0icm9vdEBleGFtcGxlLmNvbSIgXAorCSB0ZXN0X2NvbW1pdCBzZWNvbmQtcm9vdCkgJiYKKwl0ZXN0X2NvbW1pdCB0aGlyZC1yb290ICYmCisJY2F0ID5zY3JpcHQtZnJvbS1zY3JhdGNoIDw8LVxFT0YgJiYKKwlwaWNrIHRoaXJkLXJvb3QKKwlsYWJlbCBmaXJzdC1icmFuY2gKKwlyZXNldCBbbmV3IHJvb3RdCisJcGljayBzZWNvbmQtcm9vdAorCW1lcmdlIGZpcnN0LWJyYW5jaCAjIE1lcmdlIHRoZSAzcmQgcm9vdAorCUVPRgorCXRlc3RfY29uZmlnIHNlcXVlbmNlLmVkaXRvciBcIiIkUFdEIi9yZXBsYWNlLWVkaXRvci5zaFwiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaSAtLWZvcmNlLXJlYmFzZSAtLXJvb3QgLXIgJiYKKwl0ZXN0ICJQYXJzbmlwIiA9ICIkKGdpdCBzaG93IC1zIC0tZm9ybWF0PSVhbiBIRUFEXikiICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2Ugc2Vjb25kLXJvb3ReMCkgIT0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHNlY29uZC1yb290OnNlY29uZC1yb290LnQpID0gXAorCQkkKGdpdCByZXYtcGFyc2UgSEVBRF46c2Vjb25kLXJvb3QudCkgJiYKKwl0ZXN0X2NtcF9ncmFwaCBIRUFEIDw8LVxFT0YgJiYKKwkqICAgTWVyZ2UgdGhlIDNyZCByb290CisJfFwKKwl8ICogdGhpcmQtcm9vdAorCSogc2Vjb25kLXJvb3QKKwlFT0YKKworCTogZmFzdCBmb3J3YXJkIGlmIHBvc3NpYmxlICYmCisJYmVmb3JlPSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBzZXF1ZW5jZS5lZGl0b3IgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pIC0tcm9vdCAtciAmJgorCXRlc3RfY21wX3JldiBIRUFEICRiZWZvcmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYSAibWVyZ2UiIGludG8gYSByb290IGNvbW1pdCBpcyBhIGZhc3QtZm9yd2FyZCcgJworCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5zY3JpcHQtZnJvbS1zY3JhdGNoIDw8LUVPRiAmJgorCXJlc2V0IFtuZXcgcm9vdF0KKwltZXJnZSAkaGVhZAorCUVPRgorCXRlc3RfY29uZmlnIHNlcXVlbmNlLmVkaXRvciBcIiIkUFdEIi9yZXBsYWNlLWVkaXRvci5zaFwiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaSAtciBIRUFEXiAmJgorCXRlc3RfY21wX3JldiBIRUFEICRoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Egcm9vdCBjb21taXQgY2FuIGJlIGEgY291c2luLCB0cmVhdCBpdCB0aGF0IHdheScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBraG51bSAmJgorCXRlc3RfY29tbWl0IHlhbWEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYXNoZXJhaCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBzaGFta2F0ICYmCisJZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBraG51bSAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLWYgLXIgSEVBRF4gJiYKKwl0ZXN0X2NtcF9yZXYgISBIRUFEXjIga2hudW0gJiYKKwl0ZXN0X2NtcF9ncmFwaCBIRUFEXi4uIDw8LVxFT0YgJiYKKwkqICAgTWVyZ2UgYnJhbmNoICdcJydraG51bSdcJycgaW50byBhc2hlcmFoCisJfFwKKwl8ICogeWFtYQorCW8gc2hhbWthdAorCUVPRgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1yZWJhc2UtbWVyZ2VzPXJlYmFzZS1jb3VzaW5zIEhFQUReICYmCisJdGVzdF9jbXBfZ3JhcGggSEVBRF4uLiA8PC1cRU9GCisJKiAgIE1lcmdlIGJyYW5jaCAnXCcna2hudW0nXCcnIGludG8gYXNoZXJhaAorCXxcCisJfCAqIHlhbWEKKwl8LworCW8gc2hhbWthdAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYWJlbHMgdGhhdCBhcmUgb2JqZWN0IElEcyBhcmUgcmV3cml0dGVuJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRoaXJkIEIgJiYKKwl0ZXN0X2NvbW1pdCBJICYmCisJdGhpcmQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxhYmVscyBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgdGhpcmQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSBjb21taXQgJ1wnJyR0aGlyZCdcJycgaW50byBsYWJlbHMiICYmCisJZWNobyBub29wID5zY3JpcHQtZnJvbS1zY3JhdGNoICYmCisJdGVzdF9jb25maWcgc2VxdWVuY2UuZWRpdG9yIFwiIiRQV0QiL3JlcGxhY2UtZWRpdG9yLnNoXCIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC1pIC1yIEEgJiYKKwlncmVwICJebGFiZWwgJHRoaXJkLSIgLmdpdC9PUklHSU5BTC1UT0RPICYmCisJISBncmVwICJebGFiZWwgJHRoaXJkJCIgLmdpdC9PUklHSU5BTC1UT0RPCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29jdG9wdXMgbWVyZ2VzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRocmVlICYmCisJdGVzdF9jb21taXQgYmVmb3JlLW9jdG9wdXMgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCAtYiB0d28gSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgb25lIEhFQUReICYmCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF90aWNrICYmCisJKEdJVF9BVVRIT1JfTkFNRT0iSGFuayIgR0lUX0FVVEhPUl9FTUFJTD0iaGFua0BzZWEud29ybGQiIFwKKwkgZ2l0IG1lcmdlIC1tICJUw7xudGVuZsO8c2NoIiB0d28gdGhyZWUpICYmCisKKwk6IGZhc3QgZm9yd2FyZCBpZiBwb3NzaWJsZSAmJgorCWJlZm9yZT0iJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLWkgLXIgSEVBRF5eICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgJGJlZm9yZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaSAtLWZvcmNlLXJlYmFzZSAtciBIRUFEXl4gJiYKKwl0ZXN0ICJIYW5rIiA9ICIkKGdpdCBzaG93IC1zIC0tZm9ybWF0PSVhbiBIRUFEKSIgJiYKKwl0ZXN0ICIkYmVmb3JlIiAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X2NtcF9ncmFwaCBIRUFEXl4uLiA8PC1cRU9GCisJKi0uICAgVMO8bnRlbmbDvHNjaAorCXxcIFwKKwl8IHwgKiB0aHJlZQorCXwgKiB8IHR3bworCXwgfC8KKwkqIC8gb25lCisJfC8KKwlvIGJlZm9yZS1vY3RvcHVzCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggLS1hdXRvc3F1YXNoIGFuZCAtLWV4ZWMnICcKKwlnaXQgY2hlY2tvdXQgLWIgd2l0aC1leGVjIEggJiYKKwllY2hvIEJvb2ggPkIudCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1maXh1cCBCIEIudCAmJgorCXdyaXRlX3NjcmlwdCBzaG93LnNoIDw8LVxFT0YgJiYKKwlzdWJqZWN0PSIkKGdpdCBzaG93IC1zIC0tZm9ybWF0PSVzIEhFQUQpIgorCWNvbnRlbnQ9IiQoZ2l0IGRpZmYgSEVBRF4hIHwgdGFpbCAtbiAxKSIKKwllY2hvICIkc3ViamVjdDogJGNvbnRlbnQiCisJRU9GCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtaXIgLS1hdXRvc3F1YXNoIC0tZXhlYyAuL3Nob3cuc2ggQSA+YWN0dWFsICYmCisJZ3JlcCAiQjogK0Jvb2giIGFjdHVhbCAmJgorCWdyZXAgIkU6ICtCb29oIiBhY3R1YWwgJiYKKwlncmVwICJHOiArRyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgYWZ0ZXIgcmVzb2x2aW5nIGNvbmZsaWN0cyBhZnRlciBhIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFscmVhZHktaGFzLWcgRSAmJgorCWdpdCBjaGVycnktcGljayBFLi5HICYmCisJdGVzdF9jb21taXQgSDIgJiYKKworCWdpdCBjaGVja291dCAtYiBjb25mbGljdHMtaW4tbWVyZ2UgSCAmJgorCXRlc3RfY29tbWl0IEgyIEgyLnQgY29uZmxpY3RzIEgyLWNvbmZsaWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtciBhbHJlYWR5LWhhcy1nICYmCisJZ3JlcCBjb25mbGljdHMgSDIudCAmJgorCWVjaG8gcmVzb2x2ZWQgPkgyLnQgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UtbWVyZ2VzIHdpdGggc3RyYXRlZ2llcycgJworCWdpdCBjaGVja291dCAtYiB3aXRoLWEtc3RyYXRlZ3kgRiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbSAiTWVyZ2UgY29uZmxpY3RpbmctRyIgY29uZmxpY3RpbmctRyAmJgorCisJOiBmaXJzdCwgdGVzdCB3aXRoIGEgbWVyZ2Ugc3RyYXRlZ3kgb3B0aW9uICYmCisJZ2l0IHJlYmFzZSAtaXIgLVh0aGVpcnMgRyAmJgorCWVjaG8gY29uZmxpY3RpbmctRyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IEcudCAmJgorCisJOiBub3csIHRyeSB3aXRoIGEgbWVyZ2Ugc3RyYXRlZ3kgb3RoZXIgdGhhbiByZWN1cnNpdmUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEB7MX0gJiYKKwl3cml0ZV9zY3JpcHQgZ2l0LW1lcmdlLW92ZXJyaWRlIDw8LVxFT0YgJiYKKwllY2hvIG92ZXJyaWRkZW4kMSA+PkcudAorCWdpdCBhZGQgRy50CisJRU9GCisJUEFUSD0iJFBXRDokUEFUSCIgZ2l0IHJlYmFzZSAtaXIgLXMgb3ZlcnJpZGUgLVh4b3B0IEcgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIEcgb3ZlcnJpZGRlbi0teG9wdCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IEcudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZS1tZXJnZXMgd2l0aCBjb21taXQgdGhhdCBjYW4gZ2VuZXJhdGUgYmFkIGNoYXJhY3RlcnMgZm9yIGZpbGVuYW1lJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbG9uLWluLWxhYmVsIEUgJiYKKwlnaXQgbWVyZ2UgLW0gImNvbG9uOiB0aGlzIHNob3VsZCB3b3JrIiBHICYmCisJZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMgLS1mb3JjZS1yZWJhc2UgRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZS1tZXJnZXMgd2l0aCBtZXNzYWdlIG1hdGNoZWQgd2l0aCBvbnRvIGxhYmVsJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG9udG8tbGFiZWwgRSAmJgorCWdpdCBtZXJnZSAtbSBvbnRvIEcgJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyAtLWZvcmNlLXJlYmFzZSBFICYmCisJdGVzdF9jbXBfZ3JhcGggPDwtXEVPRgorCSogICBvbnRvCisJfFwKKwl8ICogRworCXwgKiBGCisJKiB8ICAgRQorCXxcIFwKKwl8ICogfCBCCisJKiB8IHwgRAorCXwgfC8KKwl8L3wKKwkqIHwgQworCXwvCisJKiBBCisJRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQzMS1yZWJhc2UtZm9yay1wb2ludC5zaCBiL3QvdDM0MzEtcmViYXNlLWZvcmstcG9pbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzg4NTFiOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzEtcmViYXNlLWZvcmstcG9pbnQuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOSBEZW50b24gTGl1CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1mb3JrLXBvaW50IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIEEtLS1CLS0tRC0tLUUgICAgKG1hc3RlcikKKyMgICAgICBcCisjICAgICAgIEMqLS0tRi0tLUcgKHNpZGUpCisjCisjIEMgd2FzIGZvcm1lcmx5IHBhcnQgb2YgbWFzdGVyIGJ1dCBtYXN0ZXIgd2FzIHJld291bmQgdG8gcmVtb3ZlIEMKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBicmFuY2ggLXQgc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCBEICYmCisJdGVzdF9jb21taXQgRSAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF9jb21taXQgRiAmJgorCXRlc3RfY29tbWl0IEcKKycKKwordGVzdF9yZWJhc2UgKCkgeworCWV4cGVjdGVkPSIkMSIgJiYKKwlzaGlmdCAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCByZWJhc2UgJCoiICIKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEUgJiYKKwkJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBHICYmCisJCWdpdCByZWJhc2UgJCogJiYKKwkJdGVzdF93cml0ZV9saW5lcyAkZXhwZWN0ZWQgPmV4cGVjdCAmJgorCQlnaXQgbG9nIC0tcHJldHR5PSVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSIKK30KKwordGVzdF9yZWJhc2UgJ0cgRiBFIEQgQiBBJwordGVzdF9yZWJhc2UgJ0cgRiBEIEIgQScgLS1vbnRvIEQKK3Rlc3RfcmViYXNlICdHIEYgQiBBJyAtLWtlZXAtYmFzZQordGVzdF9yZWJhc2UgJ0cgRiBDIEUgRCBCIEEnIC0tbm8tZm9yay1wb2ludAordGVzdF9yZWJhc2UgJ0cgRiBDIEQgQiBBJyAtLW5vLWZvcmstcG9pbnQgLS1vbnRvIEQKK3Rlc3RfcmViYXNlICdHIEYgQyBCIEEnIC0tbm8tZm9yay1wb2ludCAtLWtlZXAtYmFzZQordGVzdF9yZWJhc2UgJ0cgRiBFIEQgQiBBJyAtLWZvcmstcG9pbnQgcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfcmViYXNlICdHIEYgRCBCIEEnIC0tZm9yay1wb2ludCAtLW9udG8gRCByZWZzL2hlYWRzL21hc3RlcgordGVzdF9yZWJhc2UgJ0cgRiBCIEEnIC0tZm9yay1wb2ludCAtLWtlZXAtYmFzZSByZWZzL2hlYWRzL21hc3RlcgordGVzdF9yZWJhc2UgJ0cgRiBDIEUgRCBCIEEnIHJlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X3JlYmFzZSAnRyBGIEMgRCBCIEEnIC0tb250byBEIHJlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X3JlYmFzZSAnRyBGIEMgQiBBJyAtLWtlZXAtYmFzZSByZWZzL2hlYWRzL21hc3RlcgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MzItcmViYXNlLWZhc3QtZm9yd2FyZC5zaCBiL3QvdDM0MzItcmViYXNlLWZhc3QtZm9yd2FyZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YzlkNGExCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQzMi1yZWJhc2UtZmFzdC1mb3J3YXJkLnNoCkBAIC0wLDAgKzEsMTIzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE5IERlbnRvbiBMaXUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZW5zdXJlIHJlYmFzZSBmYXN0LWZvcndhcmRzIGNvbW1pdHMgd2hlbiBwb3NzaWJsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJdGVzdF9jb21taXQgQyAmJgorCXRlc3RfY29tbWl0IEQgJiYKKwlnaXQgY2hlY2tvdXQgLXQgLWIgc2lkZQorJworCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgKCkgeworCXN0YXR1c19uPSIkMSIgJiYKKwlzaGlmdCAmJgorCXdoYXRfbj0iJDEiICYmCisJc2hpZnQgJiYKKwljbXBfbj0iJDEiICYmCisJc2hpZnQgJiYKKwlzdGF0dXNfZj0iJDEiICYmCisJc2hpZnQgJiYKKwl3aGF0X2Y9IiQxIiAmJgorCXNoaWZ0ICYmCisJY21wX2Y9IiQxIiAmJgorCXNoaWZ0ICYmCisJdGVzdF9yZWJhc2Vfc2FtZV9oZWFkXyAkc3RhdHVzX24gJHdoYXRfbiAkY21wX24gIiAtLWFwcGx5IiAiJCoiICYmCisJdGVzdF9yZWJhc2Vfc2FtZV9oZWFkXyAkc3RhdHVzX2YgJHdoYXRfZiAkY21wX2YgIiAtLWFwcGx5IC0tbm8tZmYiICIkKiIKKwl0ZXN0X3JlYmFzZV9zYW1lX2hlYWRfICRzdGF0dXNfbiAkd2hhdF9uICRjbXBfbiAiIC0tbWVyZ2UiICIkKiIgJiYKKwl0ZXN0X3JlYmFzZV9zYW1lX2hlYWRfICRzdGF0dXNfZiAkd2hhdF9mICRjbXBfZiAiIC0tbWVyZ2UgLS1uby1mZiIgIiQqIgorfQorCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWRfICgpIHsKKwlzdGF0dXM9IiQxIiAmJgorCXNoaWZ0ICYmCisJd2hhdD0iJDEiICYmCisJc2hpZnQgJiYKKwljbXA9IiQxIiAmJgorCXNoaWZ0ICYmCisJZmxhZz0iJDEiCisJc2hpZnQgJiYKKwl0ZXN0X2V4cGVjdF8kc3RhdHVzICJnaXQgcmViYXNlJGZsYWcgJCogd2l0aCAkY2hhbmdlcyBpcyAkd2hhdCB3aXRoICRjbXAgSEVBRCIgIgorCQlvbGRoZWFkPVwkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICdnaXQgcmVzZXQgLS1oYXJkIFwkb2xkaGVhZCcgJiYKKwkJY3AgLmdpdC9sb2dzL0hFQUQgZXhwZWN0ICYmCisJCWdpdCByZWJhc2UkZmxhZyAkKiA+c3Rkb3V0ICYmCisJCWlmIHRlc3QgJHdoYXQgPSB3b3JrCisJCXRoZW4KKwkJCW9sZD1cJCh3YyAtbCA8ZXhwZWN0KSAmJgorCQkJdGVzdF9saW5lX2NvdW50ICctZ3QnIFwkb2xkIC5naXQvbG9ncy9IRUFECisJCWVsaWYgdGVzdCAkd2hhdCA9IG5vb3AKKwkJdGhlbgorCQkJdGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy9IRUFECisJCWZpICYmCisJCW5ld2hlYWQ9XCQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlpZiB0ZXN0ICRjbXAgPSBzYW1lCisJCXRoZW4KKwkJCXRlc3RfY21wX3JldiBcJG9sZGhlYWQgXCRuZXdoZWFkCisJCWVsaWYgdGVzdCAkY21wID0gZGlmZgorCQl0aGVuCisJCQl0ZXN0X2NtcF9yZXYgISBcJG9sZGhlYWQgXCRuZXdoZWFkCisJCWZpCisJIgorfQorCitjaGFuZ2VzPSdubyBjaGFuZ2VzJwordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgbWFzdGVyCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIGRpZmYgLS1vbnRvIEIgQgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tb250byBCLi4uIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLW9udG8gbWFzdGVyLi4uIG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0ta2VlcC1iYXNlIG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0ta2VlcC1iYXNlCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1uby1mb3JrLXBvaW50Cit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1rZWVwLWJhc2UgLS1uby1mb3JrLXBvaW50Cit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1mb3JrLXBvaW50IG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tZm9yay1wb2ludCAtLW9udG8gQiBCCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIGRpZmYgLS1mb3JrLXBvaW50IC0tb250byBCLi4uIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLWZvcmstcG9pbnQgLS1vbnRvIG1hc3Rlci4uLiBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLWtlZXAtYmFzZSAtLWtlZXAtYmFzZSBtYXN0ZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHdvcmsgc2FtZSB0byBzaWRlJyAnCisJdGVzdF9jb21taXQgRQorJworCitjaGFuZ2VzPSdvdXIgY2hhbmdlcycKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZQordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tb250byBCIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLW9udG8gQi4uLiBCCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1vbnRvIG1hc3Rlci4uLiBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLWtlZXAtYmFzZSBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgc2FtZSAtLWtlZXAtYmFzZQordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0tbm8tZm9yay1wb2ludAordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0ta2VlcC1iYXNlIC0tbm8tZm9yay1wb2ludAordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBzYW1lIC0tZm9yay1wb2ludCBtYXN0ZXIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLWZvcmstcG9pbnQgLS1vbnRvIEIgQgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tZm9yay1wb2ludCAtLW9udG8gQi4uLiBCCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1mb3JrLXBvaW50IC0tb250byBtYXN0ZXIuLi4gbWFzdGVyCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIHNhbWUgLS1mb3JrLXBvaW50IC0ta2VlcC1iYXNlIG1hc3RlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgd29yayBzYW1lIHRvIHVwc3RyZWFtJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IEYgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZQorJworCitjaGFuZ2VzPSdvdXIgYW5kIHRoZWlyIGNoYW5nZXMnCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgc3VjY2VzcyBub29wIHNhbWUgc3VjY2VzcyB3b3JrIGRpZmYgLS1vbnRvIEIgQgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tb250byBCLi4uIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBzdWNjZXNzIG5vb3Agc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLW9udG8gbWFzdGVyLi4uIG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0ta2VlcC1iYXNlIG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0ta2VlcC1iYXNlCit0ZXN0X3JlYmFzZV9zYW1lX2hlYWQgZmFpbHVyZSB3b3JrIHNhbWUgc3VjY2VzcyB3b3JrIGRpZmYgLS1mb3JrLXBvaW50IC0tb250byBCIEIKK3Rlc3RfcmViYXNlX3NhbWVfaGVhZCBmYWlsdXJlIHdvcmsgc2FtZSBzdWNjZXNzIHdvcmsgZGlmZiAtLWZvcmstcG9pbnQgLS1vbnRvIEIuLi4gQgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tZm9yay1wb2ludCAtLW9udG8gbWFzdGVyLi4uIG1hc3RlcgordGVzdF9yZWJhc2Vfc2FtZV9oZWFkIHN1Y2Nlc3Mgbm9vcCBzYW1lIHN1Y2Nlc3Mgd29yayBkaWZmIC0tZm9yay1wb2ludCAtLWtlZXAtYmFzZSBtYXN0ZXIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDMzLXJlYmFzZS1hY3Jvc3MtbW9kZS1jaGFuZ2Uuc2ggYi90L3QzNDMzLXJlYmFzZS1hY3Jvc3MtbW9kZS1jaGFuZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDVkZjk2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MzMtcmViYXNlLWFjcm9zcy1tb2RlLWNoYW5nZS5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSBhY3Jvc3MgbW9kZSBjaGFuZ2UnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIERTICYmCisJPkRTL3doYXRldmVyICYmCisJZ2l0IGFkZCBEUyAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCisJZ2l0IGJyYW5jaCBzaWRlMSAmJgorCWdpdCBicmFuY2ggc2lkZTIgJiYKKworCWdpdCBjaGVja291dCBzaWRlMSAmJgorCWdpdCBybSAtcmYgRFMgJiYKKwl0ZXN0X2xuX3NfYWRkIHVucmVsYXRlZCBEUyAmJgorCWdpdCBjb21taXQgLW0gc2lkZTEgJiYKKworCWdpdCBjaGVja291dCBzaWRlMiAmJgorCT51bnJlbGF0ZWQgJiYKKwlnaXQgYWRkIHVucmVsYXRlZCAmJgorCWdpdCBjb21taXQgLW0gY29tbWl0MSAmJgorCisJZWNobyA+PnVucmVsYXRlZCAmJgorCWdpdCBjb21taXQgLWFtIGNvbW1pdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGNoYW5nZXMgd2l0aCB0aGUgYXBwbHkgYmFja2VuZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8IHRydWUiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFwcGx5LWJhY2tlbmQgc2lkZTIgJiYKKwlnaXQgcmViYXNlIHNpZGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBjaGFuZ2VzIHdpdGggdGhlIG1lcmdlIGJhY2tlbmQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCB0cnVlIiAmJgorCWdpdCBjaGVja291dCAtYiBtZXJnZS1iYWNrZW5kIHNpZGUyICYmCisJZ2l0IHJlYmFzZSAtbSBzaWRlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgY2hhbmdlcyB3aXRoIHRoZSBtZXJnZSBiYWNrZW5kIHdpdGggYSBkZWxheScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8IHRydWUiICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlLWRlbGF5LWJhY2tlbmQgc2lkZTIgJiYKKwlnaXQgcmViYXNlIC1tIC0tZXhlYyAic2xlZXAgMSIgc2lkZTEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDM0LXJlYmFzZS1pMThuLnNoIGIvdC90MzQzNC1yZWJhc2UtaTE4bi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jN2M4MzVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQzNC1yZWJhc2UtaTE4bi5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE5IERvYW4gVHJhbiBDb25nIERhbmgKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ncmViYXNlIHdpdGggY2hhbmdpbmcgZW5jb2RpbmcKKworSW5pdGlhbCBzZXR1cDoKKworMSAtIDIgICAgICAgICAgICAgIG1hc3RlcgorIFwKKyAgMyAtIDQgICAgICAgICAgICBmaXJzdAorICAgXAorICAgIDUgLSA2ICAgICAgICAgIHNlY29uZAorJworCisuIC4vdGVzdC1saWIuc2gKKworY29tcGFyZV9tc2cgKCkgeworCWljb252IC1mICIkMiIgLXQgIiQzIiAiJFRFU1RfRElSRUNUT1JZL3QzNDM0LyQxIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgIjEsL14kL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlnaXQgYnJhbmNoIGZpcnN0ICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJZ2l0IHN3aXRjaCBmaXJzdCAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJZ2l0IGJyYW5jaCBzZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyICYmCisJZ2l0IHN3aXRjaCBzZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBmaXZlICYmCisJdGVzdF9jb21taXQgc2l4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJlYmFzZS1tZXJnZXMgdXBkYXRlIGVuY29kaW5nIGV1Y0pQIHRvIFVURi04JyAnCisJZ2l0IHN3aXRjaCAtYyBtZXJnZS1ldWNKUC1VVEYtOCBmaXJzdCAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBldWNKUCAmJgorCWdpdCBtZXJnZSAtRiAiJFRFU1RfRElSRUNUT1JZL3QzNDM0L2V1Y0pQLnR4dCIgc2Vjb25kICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMgbWFzdGVyICYmCisJY29tcGFyZV9tc2cgZXVjSlAudHh0IGV1Y0pQIFVURi04CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJlYmFzZS1tZXJnZXMgdXBkYXRlIGVuY29kaW5nIGV1Y0pQIHRvIElTTy0yMDIyLUpQJyAnCisJZ2l0IHN3aXRjaCAtYyBtZXJnZS1ldWNKUC1JU08tMjAyMi1KUCBmaXJzdCAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBldWNKUCAmJgorCWdpdCBtZXJnZSAtRiAiJFRFU1RfRElSRUNUT1JZL3QzNDM0L2V1Y0pQLnR4dCIgc2Vjb25kICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy0yMDIyLUpQICYmCisJZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMgbWFzdGVyICYmCisJY29tcGFyZV9tc2cgZXVjSlAudHh0IGV1Y0pQIElTTy0yMDIyLUpQCisnCisKK3Rlc3RfcmViYXNlX2NvbnRpbnVlX3VwZGF0ZV9lbmNvZGUgKCkgeworCW9sZD0kMQorCW5ldz0kMgorCW1zZ2ZpbGU9JDMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLS1jb250aW51ZSB1cGRhdGUgZnJvbSAkb2xkIHRvICRuZXciICcKKwkJKGdpdCByZWJhc2UgLS1hYm9ydCB8fCA6IGFib3J0IGN1cnJlbnQgZ2l0LXJlYmFzZSBmYWlsdXJlKSAmJgorCQlnaXQgc3dpdGNoIC1jIGNvbmZsaWN0LSRvbGQtJG5ldyBvbmUgJiYKKwkJZWNobyBmb3ItY29uZmxpY3QgPnR3by50ICYmCisJCWdpdCBhZGQgdHdvLnQgJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRvbGQgJiYKKwkJZ2l0IGNvbW1pdCAtRiAiJFRFU1RfRElSRUNUT1JZL3QzNDM0LyRtc2dmaWxlIiAmJgorCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJG5ldyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1tIG1hc3RlciAmJgorCQl0ZXN0IC1mIC5naXQvcmViYXNlLW1lcmdlL21lc3NhZ2UgJiYKKwkJZ2l0IHN0cmlwc3BhY2UgPC5naXQvcmViYXNlLW1lcmdlL21lc3NhZ2UgPnR3by50ICYmCisJCWdpdCBhZGQgdHdvLnQgJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCWNvbXBhcmVfbXNnICRtc2dmaWxlICRvbGQgJG5ldyAmJgorCQk6IGdpdC1jb21taXQgYXNzdW1lIGludmFsaWQgdXRmLTggaXMgbGF0aW4xICYmCisJCXRlc3RfY21wIGV4cGVjdCB0d28udAorCScKK30KKwordGVzdF9yZWJhc2VfY29udGludWVfdXBkYXRlX2VuY29kZSBJU08tODg1OS0xIFVURi04IElTTzg4NTktMS50eHQKK3Rlc3RfcmViYXNlX2NvbnRpbnVlX3VwZGF0ZV9lbmNvZGUgZXVjSlAgVVRGLTggZXVjSlAudHh0Cit0ZXN0X3JlYmFzZV9jb250aW51ZV91cGRhdGVfZW5jb2RlIGV1Y0pQIElTTy0yMDIyLUpQIGV1Y0pQLnR4dAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MzQvSVNPODg1OS0xLnR4dCBiL3QvdDM0MzQvSVNPODg1OS0xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2JlZjBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQzNC9JU084ODU5LTEudHh0CkBAIC0wLDAgKzEsMyBAQAorxMvRz9YKKworwWLnZOhmZwpkaWZmIC0tZ2l0IGEvdC90MzQzNC9ldWNKUC50eHQgYi90L3QzNDM0L2V1Y0pQLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDZmMmFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzQzNC9ldWNKUC50eHQKQEAgLTAsMCArMSw0IEBACiukz6TspNKk26TVCisKK6S3pMakpKTrpM6krKGipKSk66TOpMehowor38DJzaTbpOyk16TqpN2k7KTepNOksKTqpO2k2KGjCmRpZmYgLS1naXQgYS90L3QzNTAwLWNoZXJyeS5zaCBiL3QvdDM1MDAtY2hlcnJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMzhmMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTAwLWNoZXJyeS5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFlhbm4gRGlyc29uLCBiYXNlZCBvbiB0MzQwMCBieSBBbW9zIFdhdGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlcnJ5IHNob3VsZCBkZXRlY3QgcGF0Y2hlcyBpbnRlZ3JhdGVkIHVwc3RyZWFtCisKK1RoaXMgdGVzdCBjaGVycnktcGlja3Mgb25lIGxvY2FsIGNoYW5nZSBvZiB0d28gaW50byBtYXN0ZXIgYnJhbmNoLCBhbmQKK2NoZWNrcyB0aGF0IGdpdCBjaGVycnkgb25seSByZXR1cm5zIHRoZSBzZWNvbmQgcGF0Y2ggaW4gdGhlIGxvY2FsIGJyYW5jaAorJworLiAuL3Rlc3QtbGliLnNoCisKK0dJVF9BVVRIT1JfRU1BSUw9Ym9ndXNfZW1haWxfYWRkcmVzcworZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgcmVwb3NpdG9yeSB3aXRoIHRvcGljIGJyYW5jaCwgYW5kIGNoZWNrIGNoZXJyeSBmaW5kcyB0aGUgMiBwYXRjaGVzIGZyb20gdGhlcmUnIFwKKyAgICAnZWNobyBGaXJzdCA+IEEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisgICAgIHRlc3RfdGljayAmJgorICAgICBnaXQgY29tbWl0IC1tICJBZGQgQS4iICYmCisKKyAgICAgZ2l0IGNoZWNrb3V0IC1iIG15LXRvcGljLWJyYW5jaCAmJgorCisgICAgIGVjaG8gU2Vjb25kID4gQiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEIgJiYKKyAgICAgdGVzdF90aWNrICYmCisgICAgIGdpdCBjb21taXQgLW0gIkFkZCBCLiIgJiYKKworICAgICBlY2hvIEFub3RoZXJTZWNvbmQgPiBDICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQyAmJgorICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQWRkIEMuIiAmJgorCisgICAgIGdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKyAgICAgcm0gLWYgQiBDICYmCisKKyAgICAgZWNobyBUaGlyZCA+PiBBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggQSAmJgorICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiTW9kaWZ5IEEuIiAmJgorCisgICAgIGV4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCkgKSIgOiAiKyBbXiBdKiArIC4qIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2sgdGhhdCBjaGVycnkgd2l0aCBsaW1pdCByZXR1cm5zIG9ubHkgdGhlIHRvcCBwYXRjaCdcCisgICAgJ2V4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCBteS10b3BpYy1icmFuY2heMSkgKSIgOiAiKyBbXiBdKiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZXJyeS1waWNrIG9uZSBvZiB0aGUgMiBwYXRjaGVzLCBhbmQgY2hlY2sgY2hlcnJ5IHJlY29nbml6ZWQgb25lIGFuZCBvbmx5IG9uZSBhcyBuZXcnIFwKKyAgICAnZ2l0IGNoZXJyeS1waWNrIG15LXRvcGljLWJyYW5jaF4wICYmCisgICAgIGVjaG8gJChnaXQgY2hlcnJ5IG1hc3RlciBteS10b3BpYy1icmFuY2gpICYmCisgICAgIGV4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCkgKSIgOiAiKyBbXiBdKiAtIC4qIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoIGIvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2MxZGEyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoCkBAIC0wLDAgKzEsMTU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGljayBhbmQgcmV2ZXJ0IHdpdGggcmVuYW1lcworCisgIC0tCisgICArIHJlbmFtZTI6IHJlbmFtZXMgb29wcyB0byBvcG9zCisgICsgIHJlbmFtZTE6IHJlbmFtZXMgb29wcyB0byBzcG9vCisgICsgIGFkZGVkOiAgIGFkZHMgZXh0cmEgbGluZSB0byBvb3BzCisgICsrIGluaXRpYWw6IGhhcyBsaW5lcyBpbiBvb3BzCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGwgaW4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8KKwlkbworCQllY2hvICRsJGwkbCRsJGwkbCRsJGwkbAorCWRvbmUgPm9vcHMgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBhZGQgb29wcyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyAiQWRkIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCIgPj5vb3BzICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhZGRlZCAmJgorCWdpdCB0YWcgYWRkZWQgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBtdiBvb3BzIHNwb28gJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZTEgJiYKKwlnaXQgdGFnIHJlbmFtZTEgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIGluaXRpYWwgJiYKKwlnaXQgbXYgb29wcyBvcG9zICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUyICYmCisJZ2l0IHRhZyByZW5hbWUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tbm9uc2Vuc2UnICcKKworCXBvcz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tbm9uc2Vuc2UgMj5tc2cgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICIkcG9zIiAmJgorCXRlc3RfaTE4bmdyZXAgJ1tVdV1zYWdlOicgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLW5vbnNlbnNlJyAnCisKKwlwb3M9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgLS1ub25zZW5zZSAyPm1zZyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgIiRwb3MiICYmCisJdGVzdF9pMThuZ3JlcCAnW1V1XXNhZ2U6JyBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYWZ0ZXIgcmVuYW1pbmcgYnJhbmNoJyAnCisKKwlnaXQgY2hlY2tvdXQgcmVuYW1lMiAmJgorCWdpdCBjaGVycnktcGljayBhZGRlZCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSByZW5hbWUyKSAmJgorCXRlc3QgLWYgb3BvcyAmJgorCWdyZXAgIkFkZCBleHRyYSBsaW5lIGF0IHRoZSBlbmQiIG9wb3MgJiYKKwlnaXQgcmVmbG9nIC0xIHwgZ3JlcCBjaGVycnktcGljaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhZnRlciByZW5hbWluZyBicmFuY2gnICcKKworCWdpdCBjaGVja291dCByZW5hbWUxICYmCisJZ2l0IHJldmVydCBhZGRlZCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSByZW5hbWUxKSAmJgorCXRlc3QgLWYgc3BvbyAmJgorCSEgZ3JlcCAiQWRkIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCIgc3BvbyAmJgorCWdpdCByZWZsb2cgLTEgfCBncmVwIHJldmVydAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIG9uIHN0YXQtZGlydHkgd29ya2luZyB0cmVlJyAnCisJZ2l0IGNsb25lIC4gY29weSAmJgorCSgKKwkJY2QgY29weSAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQl0ZXN0LXRvb2wgY2htdGltZSArNDAgb29wcyAmJgorCQlnaXQgY2hlcnJ5LXBpY2sgYWRkZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBmb3JiaWRkZW4gb24gZGlydHkgd29ya2luZyB0cmVlJyAnCisKKwllY2hvIGNvbnRlbnQgPmV4dHJhX2ZpbGUgJiYKKwlnaXQgYWRkIGV4dHJhX2ZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IEhFQUQgMj5lcnJvcnMgJiYKKwl0ZXN0X2kxOG5ncmVwICJ5b3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgIiBlcnJvcnMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHVuYm9ybiAmJgorCWdpdCBybSAtLWNhY2hlZCAtciAuICYmCisJcm0gLXJmICogJiYKKwlnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgaW5pdGlhbCAmJgorCXRlc3RfY21wX3JldiAhIGluaXRpYWwgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAiLSIgdG8gcGljayBmcm9tIHByZXZpb3VzIGJyYW5jaCcgJworCWdpdCBjaGVja291dCB1bmJvcm4gJiYKKwl0ZXN0X2NvbW1pdCB0by1waWNrIGFjdHVhbCBjb250ZW50ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayAtICYmCisJZWNobyBjb250ZW50ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrICItIiBpcyBtZWFuaW5nbGVzcyB3aXRob3V0IGNoZWNrb3V0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBhZnJlc2ggJiYKKwkoCisJCWNkIGFmcmVzaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAiLSIgd29ya3Mgd2l0aCBhcmd1bWVudHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBjaGFuZ2UgYWN0dWFsIGNoYW5nZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgLSAmJgorCWVjaG8gIlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIF5TaWduZWQtb2ZmLWJ5OiA+c2lnbm9mZiAmJgorCXRlc3RfY21wIGV4cGVjdCBzaWdub2ZmICYmCisJZWNobyBjaGFuZ2UgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgd29ya3Mgd2l0aCBkaXJ0eSByZW5hbWVkIGZpbGUnICcKKwl0ZXN0X2NvbW1pdCB0by1yZW5hbWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdW5yZWxhdGVkICYmCisJdGVzdF9jb21taXQgdW5yZWxhdGVkICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJZ2l0IG12IHRvLXJlbmFtZS50IHJlbmFtZWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZWQgJiYKKwllY2hvIG1vZGlmaWVkID5yZW5hbWVkICYmCisJZ2l0IGNoZXJyeS1waWNrIHJlZnMvaGVhZHMvdW5yZWxhdGVkICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjA6cmVuYW1lZCkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yOnRvLXJlbmFtZS50KSAmJgorCWdyZXAgLXEgIl5tb2RpZmllZCQiIHJlbmFtZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTAyLWNoZXJyeS1waWNrLW1lcmdlLnNoIGIvdC90MzUwMi1jaGVycnktcGljay1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YjYzNWExCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwMi1jaGVycnktcGljay1tZXJnZS5zaApAQCAtMCwwICsxLDEzMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZXJyeSBwaWNraW5nIGFuZCByZXZlcnRpbmcgYSBtZXJnZQorCisJCWItLS1jCisJICAgICAgIC8gICAvCisJaW5pdGlhbC0tLWEKKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+QSAmJgorCT5CICYmCisJZ2l0IGFkZCBBIEIgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCWVjaG8gbmV3IGxpbmUgPkEgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSB0byBBIiBBICYmCisJZ2l0IHRhZyBhICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIG5ldyBsaW5lID5CICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgdG8gQiIgQiAmJgorCWdpdCB0YWcgYiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCWdpdCB0YWcgYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC1tIGNvbXBsYWlucyBvZiBib2d1cyBudW1iZXJzJyAnCisJIyBleHBlY3QgMTI5IGhlcmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBjYXNlcyB3aGVyZQorCSMgdGhlcmUgd2FzIG5vdGhpbmcgdG8gY2hlcnJ5LXBpY2sKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgY2hlcnJ5LXBpY2sgLW0gJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgY2hlcnJ5LXBpY2sgLW0gZm9vIGIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgY2hlcnJ5LXBpY2sgLW0gLTEgYiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBjaGVycnktcGljayAtbSAwIGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgZXhwbGljaXQgZmlyc3QgcGFyZW50IG9mIGEgbm9uLW1lcmdlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFeMCAmJgorCWdpdCBjaGVycnktcGljayAtbSAxIGIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSBtZXJnZSB3aXRob3V0IC1tIHNob3VsZCBmYWlsJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBjICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYSAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2UgKDEpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFeMCAmJgorCWdpdCBjaGVycnktcGljayAtbSAxIGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSBtZXJnZSAoMiknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYl4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC1tIDIgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIG1lcmdlIHJlbGF0aXZlIHRvIG5vbmV4aXN0ZW50IHBhcmVudCBzaG91bGQgZmFpbCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLW0gMyBjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGV4cGxpY2l0IGZpcnN0IHBhcmVudCBvZiBhIG5vbi1tZXJnZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjXjAgJiYKKwlnaXQgcmV2ZXJ0IC1tIDEgYiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGEgLS0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSBtZXJnZSB3aXRob3V0IC1tIHNob3VsZCBmYWlsJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGNeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSBtZXJnZSAoMSknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgY14wICYmCisJZ2l0IHJldmVydCAtbSAxIGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBhIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGEgbWVyZ2UgKDIpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGNeMCAmJgorCWdpdCByZXZlcnQgLW0gMiBjICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYiAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhIG1lcmdlIHJlbGF0aXZlIHRvIG5vbmV4aXN0ZW50IHBhcmVudCBzaG91bGQgZmFpbCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IC1tIDMgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDMtY2hlcnJ5LXBpY2stcm9vdC5zaCBiL3QvdDM1MDMtY2hlcnJ5LXBpY2stcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjdmMzlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwMy1jaGVycnktcGljay1yb290LnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNoZXJyeS1waWNraW5nIChhbmQgcmV2ZXJ0aW5nKSBhIHJvb3QgY29tbWl0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIGZpcnN0ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiICYmCisKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9zZWNvbmQgJiYKKwlybSAuZ2l0L2luZGV4IGZpbGUxICYmCisJZWNobyBzZWNvbmQgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQiICYmCisKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy90aGlyZCAmJgorCXJtIC5naXQvaW5kZXggZmlsZTIgJiYKKwllY2hvIHRoaXJkID4gZmlsZTMgJiYKKwlnaXQgYWRkIGZpbGUzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidGhpcmQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSByb290IGNvbW1pdCcgJworCisJZ2l0IGNoZWNrb3V0IHNlY29uZF4wICYmCisJZ2l0IGNoZXJyeS1waWNrIG1hc3RlciAmJgorCWVjaG8gZmlyc3QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhIHJvb3QgY29tbWl0JyAnCisKKwlnaXQgcmV2ZXJ0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSByb290IGNvbW1pdCB3aXRoIGFuIGV4dGVybmFsIHN0cmF0ZWd5JyAnCisKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZXNvbHZlIG1hc3RlciAmJgorCWVjaG8gZmlyc3QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhIHJvb3QgY29tbWl0IHdpdGggYW4gZXh0ZXJuYWwgc3RyYXRlZ3knICcKKworCWdpdCByZXZlcnQgLS1zdHJhdGVneT1yZXNvbHZlIG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgdHdvIHJvb3QgY29tbWl0cycgJworCisJZWNobyBmaXJzdCA+ZXhwZWN0LmZpbGUxICYmCisJZWNobyBzZWNvbmQgPmV4cGVjdC5maWxlMiAmJgorCWVjaG8gdGhpcmQgPmV4cGVjdC5maWxlMyAmJgorCisJZ2l0IGNoZWNrb3V0IHNlY29uZF4wICYmCisJZ2l0IGNoZXJyeS1waWNrIG1hc3RlciB0aGlyZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0LmZpbGUxIGZpbGUxICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpbGUyIGZpbGUyICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpbGUzIGZpbGUzICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXl4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReXl4KKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDQtY2hlcnJ5LXBpY2stcmVyZXJlLnNoIGIvdC90MzUwNC1jaGVycnktcGljay1yZXJlcmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODBhMGQwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDQtY2hlcnJ5LXBpY2stcmVyZXJlLnNoCkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlcnJ5LXBpY2sgc2hvdWxkIHJlcmVyZSBmb3IgY29uZmxpY3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgZm9vICYmCisJdGVzdF9jb21taXQgZm9vLW1hc3RlciBmb28gJiYKKwl0ZXN0X2NvbW1pdCBiYXItbWFzdGVyIGJhciAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGRldiBmb28gJiYKKwl0ZXN0X2NvbW1pdCBmb28tZGV2IGZvbyAmJgorCXRlc3RfY29tbWl0IGJhci1kZXYgYmFyICYmCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0aW5nIG1lcmdlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXh1cCcgJworCWVjaG8gZm9vLXJlc29sdmVkID5mb28gJiYKKwllY2hvIGJhci1yZXNvbHZlZCA+YmFyICYmCisJZ2l0IGNvbW1pdCAtYW0gcmVzb2x2ZWQgJiYKKwljcCBmb28gZm9vLWV4cGVjdCAmJgorCWNwIGJhciBiYXItZXhwZWN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBjb25mbGljdCB3aXRoIC0tcmVyZXJlLWF1dG91cGRhdGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1yZXJlcmUtYXV0b3VwZGF0ZSBmb28uLmJhci1tYXN0ZXIgJiYKKwl0ZXN0X2NtcCBmb28tZXhwZWN0IGZvbyAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfY21wIGJhci1leHBlY3QgYmFyICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiYXItZGV2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGNvbmZsaWN0IHJlcHNlY3RzIHJlcmVyZS5hdXRvVXBkYXRlJyAnCisJdGVzdF9jb25maWcgcmVyZXJlLmF1dG9VcGRhdGUgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBmb28uLmJhci1tYXN0ZXIgJiYKKwl0ZXN0X2NtcCBmb28tZXhwZWN0IGZvbyAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfY21wIGJhci1leHBlY3QgYmFyICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiYXItZGV2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGNvbmZsaWN0IHdpdGggLS1uby1yZXJlcmUtYXV0b3VwZGF0ZScgJworCXRlc3RfY29uZmlnIHJlcmVyZS5hdXRvVXBkYXRlIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSBmb28uLmJhci1tYXN0ZXIgJiYKKwl0ZXN0X2NtcCBmb28tZXhwZWN0IGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJdGVzdF9jbXAgYmFyLWV4cGVjdCBiYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgYmFyLWRldgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLWNvbnRpbnVlIHJlamVjdHMgLS1yZXJlcmUtYXV0b3VwZGF0ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLXJlcmVyZS1hdXRvdXBkYXRlIGZvby4uYmFyLW1hc3RlciAmJgorCXRlc3RfY21wIGZvby1leHBlY3QgZm9vICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIC0tcmVyZXJlLWF1dG91cGRhdGUgPmFjdHVhbCAyPiYxICYmCisJZWNobyAiZmF0YWw6IGNoZXJyeS1waWNrOiAtLXJlcmVyZS1hdXRvdXBkYXRlIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1jb250aW51ZSIgPmV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSA+YWN0dWFsIDI+JjEgJiYKKwllY2hvICJmYXRhbDogY2hlcnJ5LXBpY2s6IC0tbm8tcmVyZXJlLWF1dG91cGRhdGUgY2Fubm90IGJlIHVzZWQgd2l0aCAtLWNvbnRpbnVlIiA+ZXhwZWN0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLXJlcmVyZS1hdXRvdXBkYXRlIG1vcmUgdGhhbiBvbmNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tcmVyZXJlLWF1dG91cGRhdGUgLS1yZXJlcmUtYXV0b3VwZGF0ZSBmb28uLmJhci1tYXN0ZXIgJiYKKwl0ZXN0X2NtcCBmb28tZXhwZWN0IGZvbyAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLXJlcmVyZS1hdXRvdXBkYXRlIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUgLS1yZXJlcmUtYXV0b3VwZGF0ZSBmb28uLmJhci1tYXN0ZXIgJiYKKwl0ZXN0X2NtcCBmb28tZXhwZWN0IGZvbyAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLXJlcmVyZS1hdXRvdXBkYXRlIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUgZm9vLi5iYXItbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBjaGVycnktcGljayAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGNvbmZsaWN0IHdpdGhvdXQgcmVyZXJlJyAnCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgZm9vLW1hc3RlciAmJgorCWdyZXAgPT09PT0gZm9vICYmCisJZ3JlcCBmb28tZGV2IGZvbyAmJgorCWdyZXAgZm9vLW1hc3RlciBmb28KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA1LWNoZXJyeS1waWNrLWVtcHR5LnNoIGIvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZjkxMWJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaApAQCAtMCwwICsxLDk5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGlja2luZyBhbiBlbXB0eSBjb21taXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gZmlyc3QgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCIgJiYKKworCWdpdCBjaGVja291dCAtYiBlbXB0eS1tZXNzYWdlLWJyYW5jaCAmJgorCWVjaG8gdGhpcmQgPj4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gIiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZW1wdHktY2hhbmdlLWJyYW5jaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYW4gZW1wdHkgY29tbWl0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgZW1wdHktY2hhbmdlLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBsb2NrZmlsZSB3YXMgcmVtb3ZlZCcgJworCXRlc3QgISAtZiAuZ2l0L2luZGV4LmxvY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSBjb21taXQgd2l0aCBhbiBlbXB0eSBtZXNzYWdlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIGVtcHR5LW1lc3NhZ2UtYnJhbmNofjEiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayBlbXB0eS1tZXNzYWdlLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBsb2NrZmlsZSB3YXMgcmVtb3ZlZCcgJworCXRlc3QgISAtZiAuZ2l0L2luZGV4LmxvY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSBjb21taXQgd2l0aCBhbiBlbXB0eSBtZXNzYWdlIHdpdGggLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgZW1wdHktbWVzc2FnZS1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYW4gZW1wdHkgbm9uLWZmIGNvbW1pdCB3aXRob3V0IC0tYWxsb3ctZW1wdHknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBmb3VydGggPj5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tICJmb3VydGgiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGVtcHR5LWNoYW5nZS1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYW4gZW1wdHkgbm9uLWZmIGNvbW1pdCB3aXRoIC0tYWxsb3ctZW1wdHknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWxsb3ctZW1wdHkgZW1wdHktY2hhbmdlLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayB3aXRoIC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0cycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1rZWVwLXJlZHVuZGFudC1jb21taXRzIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgY29tbWl0IHRoYXQgYmVjb21lcyBuby1vcCAocHJlcCknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCBmb3JrICYmCisJZWNobyBmb28gPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmaWxlMiBvbiBtYXN0ZXIiICYmCisKKwlnaXQgY2hlY2tvdXQgZm9yayAmJgorCWVjaG8gZm9vID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZTIgb24gdGhlIHNpZGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgbm8tb3Agd2l0aG91dCAtLWtlZXAtcmVkdW5kYW50JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmb3JrXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgbm8tb3Agd2l0aCAtLWtlZXAtcmVkdW5kYW50JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmb3JrXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1rZWVwLXJlZHVuZGFudC1jb21taXRzIG1hc3RlciAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwllY2hvICJhZGQgZmlsZTIgb24gbWFzdGVyIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDYtY2hlcnJ5LXBpY2stZmYuc2ggYi90L3QzNTA2LWNoZXJyeS1waWNrLWZmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkNWFkYmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA2LWNoZXJyeS1waWNrLWZmLnNoCkBAIC0wLDAgKzEsMTIwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGlja2luZyB3aXRoIC0tZmYgb3B0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBmaXJzdCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IiAmJgorCWdpdCB0YWcgZmlyc3QgJiYKKworCWdpdCBjaGVja291dCAtYiBvdGhlciAmJgorCWVjaG8gc2Vjb25kID4+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCIgJiYKKwlnaXQgdGFnIHNlY29uZCAmJgorCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCWNwX2ZmIHNoYTE6MWRmMTkyY2Q4YmM1OGEyYjI3NWQ4NDJjZWRlNGQyMjFhZDkwMDBkMQorCWNwX2ZmIHNoYTI1NjplNzBkNmI3ZmMwNjRiZGRiNTE2YjhkNTEyYzkwNTcwOTRiOTZjZTZmZjA4ZTEyMDgwYWNjNGZlN2YxZDYwYTFkCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHVzaW5nIC0tZmYgZmFzdCBmb3J3YXJkcycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgc2Vjb25kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc2Vjb25kKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgbm90IHVzaW5nIC0tZmYgZG9lcyBub3QgZmFzdCBmb3J3YXJkcycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIHNlY29uZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzZWNvbmQpIgorJworCisjCisjIFdlIHNldHVwIHRoZSBmb2xsb3dpbmcgZ3JhcGg6CisjCisjCSAgICAgIEItLS1DCisjCSAgICAgLyAgIC8KKyMJZmlyc3QtLS1BCisjCisjIChUaGlzIGhhcyBiZWVuIHRha2VuIGZyb20gdDM1MDItY2hlcnJ5LXBpY2stbWVyZ2Uuc2gpCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzZXR1cCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJZWNobyBuZXcgbGluZSA+QSAmJgorCWdpdCBhZGQgQSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIHRvIEEiIEEgJiYKKwlnaXQgdGFnIEEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBmaXJzdCAmJgorCWVjaG8gbmV3IGxpbmUgPkIgJiYKKwlnaXQgYWRkIEIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSB0byBCIiBCICYmCisJZ2l0IHRhZyBCICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJZ2l0IHRhZyBDICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldyBBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGV4cGxpY2l0IGZpcnN0IHBhcmVudCBvZiBhIG5vbi1tZXJnZSB3aXRoIC0tZmYnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEEgLS0gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiAtbSAxIEIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBDIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2Ugd2l0aCAtLWZmIGJ1dCB3aXRob3V0IC1tIHNob3VsZCBmYWlsJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBIC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tZmYgQyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEEgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgd2l0aCAtLWZmIGEgbWVyZ2UgKDEpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBIC0tICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgLW0gMSBDICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgQyAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEMpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayB3aXRoIC0tZmYgYSBtZXJnZSAoMiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEIgLS0gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiAtbSAyIEMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBDICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2UgcmVsYXRpdmUgdG8gbm9uZXhpc3RlbnQgcGFyZW50IHdpdGggLS1mZiBzaG91bGQgZmFpbCcgJworCWdpdCByZXNldCAtLWhhcmQgQiAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWZmIC1tIDMgQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIHJvb3QgY29tbWl0IHdpdGggLS1mZicgJworCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgLS0gJiYKKwlnaXQgcm0gZmlsZTEgJiYKKwllY2hvIGZpcnN0ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImZpbGUyIiAmJgorCWdpdCBjaGVycnktcGljayAtLWZmIGZpcnN0ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICIkKHRlc3Rfb2lkIGNwX2ZmKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1mZiBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHVuYm9ybiAmJgorCWdpdCBybSAtLWNhY2hlZCAtciAuICYmCisJcm0gLXJmICogJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiBmaXJzdCAmJgorCXRlc3RfY21wX3JldiBmaXJzdCBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwNy1jaGVycnktcGljay1jb25mbGljdC5zaCBiL3QvdDM1MDctY2hlcnJ5LXBpY2stY29uZmxpY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJkNDgyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDctY2hlcnJ5LXBpY2stY29uZmxpY3Quc2gKQEAgLTAsMCArMSw1NTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNoZXJyeS1waWNrIGFuZCByZXZlcnQgd2l0aCBjb25mbGljdHMKKworICAtCisgICsgcGlja2VkOiByZXdyaXRlcyBmb28gdG8gYworICArIGJhc2U6IHJld3JpdGVzIGZvbyB0byBiCisgICsgaW5pdGlhbDogd3JpdGVzIGZvbyBhcyBhLCB1bnJlbGF0ZWQgYXMgdW5yZWxhdGVkCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3ByaXN0aW5lX2RldGFjaCAoKSB7CisJZ2l0IGNoZWNrb3V0IC1mICIkMV4wIiAmJgorCWdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEICYmCisJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyB1bnJlbGF0ZWQgPnVucmVsYXRlZCAmJgorCWdpdCBhZGQgdW5yZWxhdGVkICYmCisJdGVzdF9jb21taXQgaW5pdGlhbCBmb28gYSAmJgorCXRlc3RfY29tbWl0IGJhc2UgZm9vIGIgJiYKKwl0ZXN0X2NvbW1pdCBwaWNrZWQgZm9vIGMgJiYKKwl0ZXN0X2NvbW1pdCAtLXNpZ25vZmYgcGlja2VkLXNpZ25lZCBmb28gZCAmJgorCWdpdCBjaGVja291dCAtYiB0b3BpYyBpbml0aWFsICYmCisJdGVzdF9jb21taXQgcmVkdW5kYW50LXBpY2sgZm9vIGMgcmVkdW5kYW50ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAmJgorCWdpdCB0YWcgZW1wdHkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBhZHZpY2UuZGV0YWNoZWRoZWFkIGZhbHNlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNoZXJyeS1waWNrIGRvZXMgbm90IGFkdmFuY2UgSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwluZXdoZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdCAiJGhlYWQiID0gIiRuZXdoZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZHZpY2UgZnJvbSBmYWlsZWQgY2hlcnJ5LXBpY2snICIKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJcGlja2VkPVwkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBwaWNrZWQpICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwllcnJvcjogY291bGQgbm90IGFwcGx5IFwkcGlja2VkLi4uIHBpY2tlZAorCWhpbnQ6IGFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHMKKwloaW50OiB3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPicKKwloaW50OiBhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCcKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkIDI+YWN0dWFsICYmCisKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkdmljZSBmcm9tIGZhaWxlZCBjaGVycnktcGljayAtLW5vLWNvbW1pdCcgIgorCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwlwaWNrZWQ9XCQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHBpY2tlZCkgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCWVycm9yOiBjb3VsZCBub3QgYXBwbHkgXCRwaWNrZWQuLi4gcGlja2VkCisJaGludDogYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocworCWhpbnQ6IHdpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JworCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLW5vLWNvbW1pdCBwaWNrZWQgMj5hY3R1YWwgJiYKKworCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNoZXJyeS1waWNrIHNldHMgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCXRlc3RfY21wX3JldiBwaWNrZWQgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIGNoZXJyeS1waWNrIGRvZXMgbm90IHNldCBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLW5vLWNvbW1pdCBkb2VzIG5vdCBzZXQgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tbm8tY29tbWl0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgdy9kaXJ0eSB0cmVlIGRvZXMgbm90IHNldCBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIGZvbyA+Zm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSB3L2RpcnR5IHRyZWUgZG9lcyBub3Qgc2V0IENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gZm9vID5mb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZXNvbHZlIGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0NIRVJSWV9QSUNLX0hFTFAgc3VwcHJlc3NlcyBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwkoCisJCUdJVF9DSEVSUllfUElDS19IRUxQPSJhbmQgdGhlbiBkbyBzb21ldGhpbmcgZWxzZSIgJiYKKwkJZXhwb3J0IEdJVF9DSEVSUllfUElDS19IRUxQICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNldCBjbGVhcnMgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZ2l0IHJlc2V0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNvbW1pdCBkb2VzIG5vdCBjbGVhciBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0ICYmCisKKwl0ZXN0X2NtcF9yZXYgcGlja2VkIENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuY2VsbGVkIGNvbW1pdCBkb2VzIG5vdCBjbGVhciBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwllY2hvIHJlc29sdmVkID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRCAmJgorCSgKKwkJR0lUX0VESVRPUj1mYWxzZSAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0CisJKSAmJgorCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgY29tbWl0IGNsZWFycyBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwllY2hvIHJlc29sdmVkID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBmaW5hbCBjb21taXQgY2xlYXJzIGNoZXJyeS1waWNrIHN0YXRlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiYXNlIHBpY2tlZC1zaWduZWQgJiYKKwllY2hvIHJlc29sdmVkID5mb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJZ2l0IGNvbW1pdCAtYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IGFmdGVyIGZpbmFsIHBpY2sgY2xlYXJzIGNoZXJyeS1waWNrIHN0YXRlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiYXNlIHBpY2tlZC1zaWduZWQgJiYKKwllY2hvIHJlc29sdmVkID5mb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJZ2l0IHJlc2V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNoZXJyeS1waWNrIHByb2R1Y2VzIGRpcnR5IGluZGV4JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgcmVnaXN0ZXJzIHBhcnRpY2lwYW50cyBpbiBpbmRleCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJeworCQlnaXQgY2hlY2tvdXQgYmFzZSAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IHBpY2tlZCAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vCisJfSA+c3RhZ2VzICYmCisJc2VkICIKKwkJMSBzLyAwCS8gMQkvCisJCTIgcy8gMAkvIDIJLworCQkzIHMvIDAJLyAzCS8KKwkiIHN0YWdlcyA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIC0tdW5tZXJnZWQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjaGVycnktcGljayBjb25mbGljdCwgZW5zdXJlIGNvbW1pdC5jbGVhbnVwID0gc2Npc3NvcnMgcGxhY2VzIHNjaXNzb3JzIGxpbmUgcHJvcGVybHknICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjb25maWcgY29tbWl0LmNsZWFudXAgc2Npc3NvcnMgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCQlwaWNrZWQKKworCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJIyBEbyBub3QgbW9kaWZ5IG9yIHJlbW92ZSB0aGUgbGluZSBhYm92ZS4KKwkJIyBFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4KKwkJIworCQkjIENvbmZsaWN0czoKKwkJIwlmb28KKwkJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgLmdpdC9NRVJHRV9NU0cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZXJyeS1waWNrIGNvbmZsaWN0LCBlbnN1cmUgY2xlYW51cD1zY2lzc29ycyBwbGFjZXMgc2Npc3NvcnMgbGluZSBwcm9wZXJseScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbW1pdC5jbGVhbnVwICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkJcGlja2VkCisKKwkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSMgRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuCisJCSMgRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuCisJCSMKKwkJIyBDb25mbGljdHM6CisJCSMJZm9vCisJCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tY2xlYW51cD1zY2lzc29ycyBwaWNrZWQgJiYKKworCXRlc3RfaTE4bmNtcCBleHBlY3RlZCAuZ2l0L01FUkdFX01TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgZGVzY3JpYmVzIGNvbmZsaWN0IGluIHdvcmsgdHJlZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwk8PDw8PDw8IEhFQUQKKwlhCisJPT09PT09PQorCWMKKwk+Pj4+Pj4+IG9iamlkIHBpY2tlZAorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCisJc2VkICJzL1thLWYwLTldKlwuXC5cLi9vYmppZC8iIGZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYzIC1tIHN0eWxlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWEKKwl8fHx8fHx8IHBhcmVudCBvZiBvYmppZCBwaWNrZWQKKwliCisJPT09PT09PQorCWMKKwk+Pj4+Pj4+IG9iamlkIHBpY2tlZAorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCisJc2VkICJzL1thLWYwLTldKlwuXC5cLi9vYmppZC8iIGZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhbHNvIGhhbmRsZXMgY29uZmxpY3RzIHNhbmVseScgJworCWdpdCBjb25maWcgLS11bnNldCBtZXJnZS5jb25mbGljdHN0eWxlICYmCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWEKKwk9PT09PT09CisJYgorCT4+Pj4+Pj4gcGFyZW50IG9mIG9iamlkIHBpY2tlZAorCUVPRgorCXsKKwkJZ2l0IGNoZWNrb3V0IHBpY2tlZCAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IGJhc2UgLS0gZm9vICYmCisJCWdpdCBscy1maWxlcyAtLXN0YWdlIGZvbworCX0gPnN0YWdlcyAmJgorCXNlZCAiCisJCTEgcy8gMAkvIDEJLworCQkyIHMvIDAJLyAyCS8KKwkJMyBzLyAwCS8gMwkvCisJIiBzdGFnZXMgPmV4cGVjdGVkLXN0YWdlcyAmJgorCWdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEICYmCisKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkICYmCisJbmV3aGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLXVubWVyZ2VkID5hY3R1YWwtc3RhZ2VzICYmCisKKwl0ZXN0ICIkaGVhZCIgPSAiJG5ld2hlYWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc3RhZ2VzIGFjdHVhbC1zdGFnZXMgJiYKKwlzZWQgInMvW2EtZjAtOV0qXC5cLlwuL29iamlkLyIgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIHJldmVydCBzZXRzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCXRlc3RfY21wX3JldiBwaWNrZWQgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCByZXZlcnQgZG9lcyBub3Qgc2V0IFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGJhc2UgJiYKKwlnaXQgcmV2ZXJ0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLW5vLWNvbW1pdCBzZXRzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGJhc2UgJiYKKwlnaXQgcmV2ZXJ0IC0tbm8tY29tbWl0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgYmFzZSBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgdy9kaXJ0eSB0cmVlIGRvZXMgbm90IHNldCBSRVZFUlRfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBiYXNlICYmCisJZWNobyBmb28gPmZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0NIRVJSWV9QSUNLX0hFTFAgZG9lcyBub3Qgc3VwcHJlc3MgUkVWRVJUX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCSgKKwkJR0lUX0NIRVJSWV9QSUNLX0hFTFA9ImFuZCB0aGVuIGRvIHNvbWV0aGluZyBlbHNlIiAmJgorCQlHSVRfUkVWRVJUX0hFTFA9ImFuZCB0aGVuIGRvIHNvbWV0aGluZyBlbHNlLCBhZ2FpbiIgJiYKKwkJZXhwb3J0IEdJVF9DSEVSUllfUElDS19IRUxQIEdJVF9SRVZFUlRfSEVMUCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZAorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgcGlja2VkIFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNldCBjbGVhcnMgUkVWRVJUX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkICYmCisJZ2l0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY29tbWl0IGRvZXMgbm90IGNsZWFyIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgJiYKKwl0ZXN0X2NtcF9yZXYgcGlja2VkIFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgZmluYWwgY29tbWl0IGNsZWFycyByZXZlcnQgc3RhdGUnICcKKwlwcmlzdGluZV9kZXRhY2ggcGlja2VkLXNpZ25lZCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQtc2lnbmVkIGJhc2UgJiYKKwllY2hvIHJlc29sdmVkID5mb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJZ2l0IGNvbW1pdCAtYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IGFmdGVyIGZpbmFsIHBpY2sgY2xlYXJzIHJldmVydCBzdGF0ZScgJworCXByaXN0aW5lX2RldGFjaCBwaWNrZWQtc2lnbmVkICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZC1zaWduZWQgYmFzZSAmJgorCWVjaG8gcmVzb2x2ZWQgPmZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwlnaXQgcmVzZXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgY29uZmxpY3QsIGRpZmYzIC1tIHN0eWxlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWEKKwl8fHx8fHx8IG9iamlkIHBpY2tlZAorCWMKKwk9PT09PT09CisJYgorCT4+Pj4+Pj4gcGFyZW50IG9mIG9iamlkIHBpY2tlZAorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQgJiYKKworCXNlZCAicy9bYS1mMC05XSpcLlwuXC4vb2JqaWQvIiBmb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncmV2ZXJ0IGNvbmZsaWN0LCBlbnN1cmUgY29tbWl0LmNsZWFudXAgPSBzY2lzc29ycyBwbGFjZXMgc2Npc3NvcnMgbGluZSBwcm9wZXJseScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNvbmZpZyBjb21taXQuY2xlYW51cCBzY2lzc29ycyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCVJldmVydCAicGlja2VkIgorCisJCVRoaXMgcmV2ZXJ0cyBjb21taXQgT0JKSUQuCisKKwkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSMgRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuCisJCSMgRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuCisJCSMKKwkJIyBDb25mbGljdHM6CisJCSMJZm9vCisJCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQgJiYKKworCXNlZCAicy8kT0lEX1JFR0VYL09CSklELyIgLmdpdC9NRVJHRV9NU0cgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3JldmVydCBjb25mbGljdCwgZW5zdXJlIGNsZWFudXA9c2Npc3NvcnMgcGxhY2VzIHNjaXNzb3JzIGxpbmUgcHJvcGVybHknICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb21taXQuY2xlYW51cCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCVJldmVydCAicGlja2VkIgorCisJCVRoaXMgcmV2ZXJ0cyBjb21taXQgT0JKSUQuCisKKwkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSMgRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuCisJCSMgRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuCisJCSMKKwkJIyBDb25mbGljdHM6CisJCSMJZm9vCisJCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCAtLWNsZWFudXA9c2Npc3NvcnMgcGlja2VkICYmCisKKwlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC8iIC5naXQvTUVSR0VfTVNHID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjaGVycnktcGljayBkb2VzIG5vdCBmb3JnZXQgLXMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtcyBwaWNrZWQgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJTaWduZWQtb2ZmLWJ5IiAuZ2l0L01FUkdFX01TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYWZ0ZXIgZmFpbGVkIGNoZXJyeS1waWNrIGRvZXMgbm90IGFkZCBkdXBsaWNhdGVkIC1zJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLXMgcGlja2VkLXNpZ25lZCAmJgorCWdpdCBjb21taXQgLWEgLXMgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgLXMgPnRtcCAmJiBncmVwIC1jICJTaWduZWQtb2ZmLWJ5IiB0bXAgJiYgcm0gdG1wKSA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGFmdGVyIGZhaWxlZCBjaGVycnktcGljayBhZGRzIC1zIGF0IHRoZSByaWdodCBwbGFjZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCisJZ2l0IGNvbW1pdCAtYSAtcyAmJgorCisJIyBEbyBTLW8tYiBhbmQgQ29uZmxpY3RzIGFwcGVhciBpbiB0aGUgcmlnaHQgb3JkZXI/CisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCVNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwkjIENvbmZsaWN0czoKKwlFT0YKKwlncmVwIC1lICJeIyBDb25mbGljdHM6IiAtZSAnXlNpZ25lZC1vZmYtYnknIC5naXQvQ09NTUlUX0VESVRNU0cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCXBpY2tlZAorCisJU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tYW1lbmQgLXMgcGxhY2VzIHRoZSBzaWduLW9mZiBhdCB0aGUgcmlnaHQgcGxhY2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKworCSMgZW11bGF0ZSBvbGQtc3R5bGUgY29uZmxpY3RzIGJsb2NrCisJbXYgLmdpdC9NRVJHRV9NU0cgLmdpdC9NRVJHRV9NU0crICYmCisJc2VkIC1lICIvXiMgQ29uZmxpY3RzOi8sXCRzL14jICovLyIgLmdpdC9NRVJHRV9NU0crID4uZ2l0L01FUkdFX01TRyAmJgorCisJZ2l0IGNvbW1pdCAtYSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtcyAmJgorCisJIyBEbyBTLW8tYiBhbmQgQ29uZmxpY3RzIGFwcGVhciBpbiB0aGUgcmlnaHQgb3JkZXI/CisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCVNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlDb25mbGljdHM6CisJRU9GCisJZ3JlcCAtZSAiXkNvbmZsaWN0czoiIC1lICdeU2lnbmVkLW9mZi1ieScgLmdpdC9DT01NSVRfRURJVE1TRyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBwcmVzZXJ2ZXMgc3BhcnNlLWNoZWNrb3V0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnNwYXJzZUNoZWNrb3V0IHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQllY2hvIFwiLypcIiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dAorCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRAorCQlybSAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IiAmJgorCWVjaG8gL3VucmVsYXRlZCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC1Yb3VycyBwaWNrZWQ+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAhICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLWNvbnRpbnVlIHJlbWVtYmVycyAtLWtlZXAtcmVkdW5kYW50LWNvbW1pdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVycnktcGljayAtLWFib3J0IHx8IDoiICYmCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1rZWVwLXJlZHVuZGFudC1jb21taXRzIHBpY2tlZCByZWR1bmRhbnQgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1jb250aW51ZSByZW1lbWJlcnMgLS1hbGxvdy1lbXB0eSBhbmQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCB8fCA6IiAmJgorCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIFwKKwkJCQkgICAgICAgcGlja2VkIGVtcHR5ICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwOC1jaGVycnktcGljay1tYW55LWNvbW1pdHMuc2ggYi90L3QzNTA4LWNoZXJyeS1waWNrLW1hbnktY29tbWl0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMzA3MGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwOC1jaGVycnktcGljay1tYW55LWNvbW1pdHMuc2gKQEAgLTAsMCArMSwxOTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNoZXJyeS1waWNraW5nIG1hbnkgY29tbWl0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX2hlYWRfZGlmZmVyc19mcm9tKCkgeworCXRlc3RfY21wX3JldiAhIEhFQUQgIiQxIgorfQorCitjaGVja19oZWFkX2VxdWFscygpIHsKKwl0ZXN0X2NtcF9yZXYgSEVBRCAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gZmlyc3QgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCIgJiYKKwlnaXQgdGFnIGZpcnN0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgJiYKKwlmb3IgdmFsIGluIHNlY29uZCB0aGlyZCBmb3VydGgKKwlkbworCQllY2hvICR2YWwgPj4gZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiJHZhbCIgJiYKKwkJZ2l0IHRhZyAkdmFsCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBmaXJzdC4uZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgZmlyc3QuLmZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgb3RoZXIgJiYKKwljaGVja19oZWFkX2RpZmZlcnNfZnJvbSBmb3VydGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgdGhyZWUgb25lIHR3byB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBmaXJzdCAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgdGhyZWUgb25lIHR3byAmJgorCWdpdCBkaWZmIC0tcXVpZXQgdGhyZWUgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgdGhyZWUgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLS1yZXZlcnNlIC0tZm9ybWF0PSVzIGZpcnN0Li4pIiA9ICJ0aHJlZQorb25lCit0d28iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHRocmVlIG9uZSB0d286IGZhaWxzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgdGhyZWUgb25lIHR3bzoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHRvIGtlZXAgdXNlciBlbnRlcnRhaW5lZCBkdXJpbmcgbXVsdGktcGljaycgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCVttYXN0ZXIgT0JKSURdIHNlY29uZAorCSBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJIERhdGU6IFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCVttYXN0ZXIgT0JKSURdIHRoaXJkCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgRGF0ZTogVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJW21hc3RlciBPQkpJRF0gZm91cnRoCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgRGF0ZTogVGh1IEFwciA3IDE1OjE2OjEzIDIwMDUgLTA3MDAKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJRU9GCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayBmaXJzdC4uZm91cnRoID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvJF94MDVbMC05YS1mXVswLTlhLWZdL09CSklELyIgPGFjdHVhbCA+YWN0dWFsLmZ1enp5ICYmCisJdGVzdF9saW5lX2NvdW50IC1nZSAzIGFjdHVhbC5mdXp6eSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwuZnV6enkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1zdHJhdGVneSByZXNvbHZlIGZpcnN0Li5mb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtLXN0cmF0ZWd5IHJlc29sdmUgZmlyc3QuLmZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgb3RoZXIgJiYKKwljaGVja19oZWFkX2RpZmZlcnNfZnJvbSBmb3VydGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IGR1cmluZyBtdWx0aS1waWNrIGluZGljYXRlcyBtZXJnZSBzdHJhdGVneScgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCVRyeWluZyBzaW1wbGUgbWVyZ2UuCisJW21hc3RlciBPQkpJRF0gc2Vjb25kCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgRGF0ZTogVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJVHJ5aW5nIHNpbXBsZSBtZXJnZS4KKwlbbWFzdGVyIE9CSklEXSB0aGlyZAorCSBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJIERhdGU6IFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCVRyeWluZyBzaW1wbGUgbWVyZ2UuCisJW21hc3RlciBPQkpJRF0gZm91cnRoCisJIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkgRGF0ZTogVGh1IEFwciA3IDE1OjE2OjEzIDIwMDUgLTA3MDAKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJRU9GCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtLXN0cmF0ZWd5IHJlc29sdmUgZmlyc3QuLmZvdXJ0aCA+YWN0dWFsICYmCisJc2VkIC1lICJzLyRfeDA1WzAtOWEtZl1bMC05YS1mXS9PQkpJRC8iIDxhY3R1YWwgPmFjdHVhbC5mdXp6eSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwuZnV6enkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1mZiBmaXJzdC4uZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiBmaXJzdC4uZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBvdGhlciAmJgorCWNoZWNrX2hlYWRfZXF1YWxzIGZvdXJ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtbiBmaXJzdC4uZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLW4gZmlyc3QuLmZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIGZpcnN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBmaXJzdC4uZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZm91cnRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJldmVydCBmaXJzdC4uZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgZmlyc3QgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IF5maXJzdCBmb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmb3VydGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmV2ZXJ0IF5maXJzdCBmb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IGZpcnN0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgZm91cnRoIGZvdXJ0aH4xIGZvdXJ0aH4yIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZm91cnRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJldmVydCBmb3VydGggZm91cnRofjEgZm91cnRofjIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IGZpcnN0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtMyBmb3VydGggd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjaGVycnktcGljayAtMyBmb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIG90aGVyICYmCisJY2hlY2tfaGVhZF9kaWZmZXJzX2Zyb20gZm91cnRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tc3RkaW4gd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXYtbGlzdCAtLXJldmVyc2UgZmlyc3QuLmZvdXJ0aCB8IGdpdCBjaGVycnktcGljayAtLXN0ZGluICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBvdGhlciAmJgorCWNoZWNrX2hlYWRfZGlmZmVyc19mcm9tIGZvdXJ0aAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDktY2hlcnJ5LXBpY2stbWVyZ2UtZGYuc2ggYi90L3QzNTA5LWNoZXJyeS1waWNrLW1lcmdlLWRmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlNWIzOTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA5LWNoZXJyeS1waWNrLW1lcmdlLWRmLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjaGVycnktcGljayB3aXRoIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJbml0aWFsaXplIHJlcG9zaXRvcnknICcKKwlta2RpciBhICYmCisJPmEvZiAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCByZW5hbWUgYWNyb3NzIHBhdGhzIGVhY2ggYmVsb3cgRC9GIGNvbmZsaWN0cycgJworCW1rZGlyIGIgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uL2EgYi9hICYmCisJZ2l0IGNvbW1pdCAtbSBiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoICYmCisJcm0gYi9hICYmCisJZ2l0IG12IGEgYi9hICYmCisJdGVzdF9sbl9zX2FkZCBiL2EgYSAmJgorCWdpdCBjb21taXQgLW0gc3dhcCAmJgorCisJPmYxICYmCisJZ2l0IGFkZCBmMSAmJgorCWdpdCBjb21taXQgLW0gZjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlcnJ5LXBpY2sgc3VjY2VlZHMgd2l0aCByZW5hbWUgYWNyb3NzIEQvRiBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IGNoZXJyeS1waWNrIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCByZW5hbWUgd2l0aCBmaWxlIG9uIG9uZSBzaWRlIG1hdGNoaW5nIGRpcmVjdG9yeSBuYW1lIG9uIG90aGVyJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5pY2stdGVzdGNhc2UgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKworCT5lbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkgJiYKKwlnaXQgY29tbWl0IC1tICJFbXB0eSBmaWxlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpbXBsZSAmJgorCW12IGVtcHR5IGZpbGUgJiYKKwlta2RpciBlbXB0eSAmJgorCW12IGZpbGUgZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5L2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJFbXB0eSBmaWxlIHVuZGVyIGVtcHR5IGRpciIgJiYKKworCWVjaG8gY29udGVudCA+bmV3ZmlsZSAmJgorCWdpdCBhZGQgbmV3ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIk5ldyBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVycnktcGljayBzdWNjZWVkcyB3aXRoIHdhc19hX2Rpci9maWxlIC0+IHdhc19hX2RpciAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1xIG5pY2stdGVzdGNhc2VeMCAmJgorCWdpdCBjaGVycnktcGljayAtLXN0cmF0ZWd5PXJlc29sdmUgc2ltcGxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZXJyeS1waWNrIHN1Y2NlZWRzIHdpdGggd2FzX2FfZGlyL2ZpbGUgLT4gd2FzX2FfZGlyIChyZWN1cnNpdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtcSBuaWNrLXRlc3RjYXNlXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZWN1cnNpdmUgc2ltcGxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHVwIHJlbmFtZSB3aXRoIGZpbGUgb24gb25lIHNpZGUgbWF0Y2hpbmcgZGlmZmVyZW50IGRpcm5hbWUgb24gb3RoZXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG1lcmdlbWUgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKworCW1rZGlyIHN1YiAmJgorCW1rZGlyIG90aGVyc3ViICYmCisJZWNobyBjb250ZW50ID4gc3ViL2ZpbGUgJiYKKwllY2hvIGZvbyA+IG90aGVyc3ViL3doYXRldmVyICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1vbiBjb21taXQiICYmCisKKwlnaXQgcm0gLXJmIG90aGVyc3ViICYmCisJZ2l0IG12IHN1Yi9maWxlIG90aGVyc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbWl0IHRvIG1lcmdlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG5ld2hlYWQgbWVyZ2VtZX4xICYmCisJPmluZGVwZW5kZW50LWNoYW5nZSAmJgorCWdpdCBhZGQgaW5kZXBlbmRlbnQtY2hhbmdlICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tcGxldGVseSB1bnJlbGF0ZWQgY2hhbmdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVycnktcGljayB3aXRoIHJlbmFtZSB0byBkaWZmZXJlbnQgRC9GIGNvbmZsaWN0IHN1Y2NlZWRzIChyZXNvbHZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgbmV3aGVhZF4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSBtZXJnZW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZXJyeS1waWNrIHdpdGggcmVuYW1lIHRvIGRpZmZlcmVudCBEL0YgY29uZmxpY3Qgc3VjY2VlZHMgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1xIG5ld2hlYWReMCAmJgorCWdpdCBjaGVycnktcGljayAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBtZXJnZW1lCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUxMC1jaGVycnktcGljay1zZXF1ZW5jZS5zaCBiL3QvdDM1MTAtY2hlcnJ5LXBpY2stc2VxdWVuY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzkzYmNjNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MTAtY2hlcnJ5LXBpY2stc2VxdWVuY2Uuc2gKQEAgLTAsMCArMSw2NjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNoZXJyeS1waWNrIGNvbnRpbnVhdGlvbiBmZWF0dXJlcworCisgKyAgY29uZmxpY3Rpbmc6IHJld3JpdGVzIHVucmVsYXRlZCB0byBjb25mbGljdGluZworICArIHlldGFub3RoZXJwaWNrOiByZXdyaXRlcyBmb28gdG8gZQorICArIGFub3RoZXJwaWNrOiByZXdyaXRlcyBmb28gdG8gZAorICArIHBpY2tlZDogcmV3cml0ZXMgZm9vIHRvIGMKKyAgKyB1bnJlbGF0ZWRwaWNrOiByZXdyaXRlcyB1bnJlbGF0ZWQgdG8gcmVhbGx5dW5yZWxhdGVkCisgICsgYmFzZTogcmV3cml0ZXMgZm9vIHRvIGIKKyAgKyBpbml0aWFsOiB3cml0ZXMgZm9vIGFzIGEsIHVucmVsYXRlZCBhcyB1bnJlbGF0ZWQKKworJworCisuIC4vdGVzdC1saWIuc2gKKworIyBSZXBlYXQgZmlyc3QgbWF0Y2ggMTAgdGltZXMKK19yMTA9J1wxXDFcMVwxXDFcMVwxXDFcMVwxJworCitwcmlzdGluZV9kZXRhY2ggKCkgeworCWdpdCBjaGVycnktcGljayAtLXF1aXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiQxXjAiICYmCisJZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQgJiYKKwlnaXQgY2xlYW4gLWQgLWYgLWYgLXEgLXgKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBhZHZpY2UuZGV0YWNoZWRoZWFkIGZhbHNlICYmCisJZWNobyB1bnJlbGF0ZWQgPnVucmVsYXRlZCAmJgorCWdpdCBhZGQgdW5yZWxhdGVkICYmCisJdGVzdF9jb21taXQgaW5pdGlhbCBmb28gYSAmJgorCXRlc3RfY29tbWl0IGJhc2UgZm9vIGIgJiYKKwl0ZXN0X2NvbW1pdCB1bnJlbGF0ZWRwaWNrIHVucmVsYXRlZCByZWFsbHl1bnJlbGF0ZWQgJiYKKwl0ZXN0X2NvbW1pdCBwaWNrZWQgZm9vIGMgJiYKKwl0ZXN0X2NvbW1pdCBhbm90aGVycGljayBmb28gZCAmJgorCXRlc3RfY29tbWl0IHlldGFub3RoZXJwaWNrIGZvbyBlICYmCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCBjb25mbGljdGluZyB1bnJlbGF0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgcGVyc2lzdHMgZGF0YSBvbiBmYWlsdXJlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIC1zIGJhc2UuLmFub3RoZXJwaWNrICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL2hlYWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvb3B0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBtaWQtY2hlcnJ5LXBpY2stc2VxdWVuY2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCXRlc3RfY21wX3JldiBwaWNrZWQgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCSMgIm9vcHMsIEkgZm9yZ290IHRoYXQgdGhlc2UgcGF0Y2hlcyByZWx5IG9uIHRoZSBjaGFuZ2UgZnJvbSBiYXNlIgorCWdpdCBjaGVja291dCBIRUFEIGZvbyAmJgorCWdpdCBjaGVycnktcGljayBiYXNlICYmCisJZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYW5vdGhlcnBpY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgcGVyc2lzdHMgb3B0cyBjb3JyZWN0bHknICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCSMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlc3Npb24gdG8gY2hlcnJ5LXBpY2sgYSBzZXF1ZW5jZQorCSMgZ2V0cyBpbnRlcnJ1cHRlZCwgdXNlIGEgaGlnaC1lbm91Z2ggbnVtYmVyIHRoYXQgaXMgbGFyZ2VyCisJIyB0aGFuIHRoZSBudW1iZXIgb2YgcGFyZW50cyBvZiBhbnkgY29tbWl0IHdlIGhhdmUgY3JlYXRlZAorCW1haW5saW5lPTQgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgY2hlcnJ5LXBpY2sgLXMgLW0gJG1haW5saW5lIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIC1YIHBhdGllbmNlIC1YIG91cnMgaW5pdGlhbC4uYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvaGVhZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci9vcHRzICYmCisJZWNobyAidHJ1ZSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc2VxdWVuY2VyL29wdHMgLS1nZXQtYWxsIG9wdGlvbnMuc2lnbm9mZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gIiRtYWlubGluZSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc2VxdWVuY2VyL29wdHMgLS1nZXQtYWxsIG9wdGlvbnMubWFpbmxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICJyZWN1cnNpdmUiID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0L3NlcXVlbmNlci9vcHRzIC0tZ2V0LWFsbCBvcHRpb25zLnN0cmF0ZWd5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXBhdGllbmNlCisJb3VycworCUVPRgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc2VxdWVuY2VyL29wdHMgLS1nZXQtYWxsIG9wdGlvbnMuc3RyYXRlZ3ktb3B0aW9uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGNsZWFucyB1cCBzZXF1ZW5jZXIgc3RhdGUgdXBvbiBzdWNjZXNzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbC4ucGlja2VkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1za2lwIHJlcXVpcmVzIGNoZXJyeS1waWNrIGluIHByb2dyZXNzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLXNraXAgcmVxdWlyZXMgcmV2ZXJ0IGluIHByb2dyZXNzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IC0tc2tpcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLXNraXAgdG8gc2tpcCBjb21taXQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBhbm90aGVycGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgLS1za2lwICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0NIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IC0tc2tpcCB0byBza2lwIGNvbW1pdCcgJworCXByaXN0aW5lX2RldGFjaCBhbm90aGVycGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgYW5vdGhlcnBpY2t+MSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLXNraXAgJiYKKwlnaXQgcmV2ZXJ0IC0tc2tpcCAmJgorCXRlc3RfY21wX3JldiBhbm90aGVycGljayBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXAgImVtcHR5IiBjb21taXQnICcKKwlwcmlzdGluZV9kZXRhY2ggcGlja2VkICYmCisJdGVzdF9jb21taXQgZHVtbXkgZm9vIGQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYW5vdGhlcnBpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1za2lwICYmCisJdGVzdF9jbXBfcmV2IGR1bW15IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcCBhIGNvbW1pdCBhbmQgY2hlY2sgaWYgcmVzdCBvZiBzZXF1ZW5jZSBpcyBjb3JyZWN0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIGUgPmV4cGVjdCAmJgorCWNhdCA+ZXhwZWN0LmxvZyA8PC1FT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWZvbworCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQl1bnJlbGF0ZWQKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZm9vCisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQl1bnJlbGF0ZWQKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4ueWV0YW5vdGhlcnBpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1za2lwICYmCisJZWNobyBkID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbC5sb2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZm9vICYmCisJdGVzdF9jbXAgZXhwZWN0LmxvZyBhY3R1YWwubG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGFkdmljZSB3aGVuIHdlIG1vdmUgSEVBRCBieSBjb21taXR0aW5nJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwllcnJvcjogdGhlcmUgaXMgbm90aGluZyB0byBza2lwCisJaGludDogaGF2ZSB5b3UgY29tbWl0dGVkIGFscmVhZHk/CisJaGludDogdHJ5ICJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSIKKwlmYXRhbDogY2hlcnJ5LXBpY2sgZmFpbGVkCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLnlldGFub3RoZXJwaWNrICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgY29tbWl0IC1hICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9DSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tc2tpcCAyPmFkdmljZSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWR2aWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbGVjdGl2ZWx5IGFkdmlzZSAtLXNraXAgd2hpbGUgbGF1bmNoaW5nIGFub3RoZXIgc2VxdWVuY2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiBjaGVycnktcGljayBpcyBhbHJlYWR5IGluIHByb2dyZXNzCisJaGludDogdHJ5ICJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0IHwgLS1xdWl0KSIKKwlmYXRhbDogY2hlcnJ5LXBpY2sgZmFpbGVkCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZC4ueWV0YW5vdGhlcnBpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkLi55ZXRhbm90aGVycGljayAyPmFkdmljZSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWR2aWNlICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZXJyb3I6IGNoZXJyeS1waWNrIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MKKwloaW50OiB0cnkgImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tYWJvcnQgfCAtLXF1aXQpIgorCWZhdGFsOiBjaGVycnktcGljayBmYWlsZWQKKwlFT0YKKwlnaXQgcmVzZXQgLS1tZXJnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQuLnlldGFub3RoZXJwaWNrIDI+YWR2aWNlICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhZHZpY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgc2tpcHBpbmcgY29tbWl0IGJ1dCBub3QgYWJvcnQgZm9yIGEgbmV3IGhpc3RvcnknICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiBjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybgorCWZhdGFsOiBjaGVycnktcGljayBmYWlsZWQKKwlFT0YKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3X2Rpc2Nvbm5lY3RlZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAyPmFkdmljZSAmJgorCWdpdCBjaGVycnktcGljayAtLXNraXAgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFkdmljZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBza2lwcGluZyBzdG9wcGVkIGNoZXJyeS1waWNrIGJlY2F1c2Ugb2YgdW50cmFja2VkIGZpbGUgbW9kaWZpY2F0aW9ucycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IHJtIC0tY2FjaGVkIHVucmVsYXRlZCAmJgorCWdpdCBjb21taXQgLW0gInVudHJhY2sgdW5yZWxhdGVkIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBpbml0aWFsIGJhc2UgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0NIRVJSWV9QSUNLX0hFQUQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1za2lwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpdCBkb2VzIG5vdCBjb21wbGFpbiB3aGVuIG5vIGNoZXJyeS1waWNrIGlzIGluIHByb2dyZXNzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgcmVxdWlyZXMgY2hlcnJ5LXBpY2sgaW4gcHJvZ3Jlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpdCBjbGVhbnMgdXAgc2VxdWVuY2VyIHN0YXRlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLnBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLXF1aXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aXQga2VlcHMgSEVBRCBhbmQgY29uZmxpY3RlZCBpbmRleCBpbnRhY3QnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JdW5yZWxhdGVkCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvbworCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJdW5yZWxhdGVkCisJRU9GCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5waWNrZWQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRPSURfUkVHRVgvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgdG8gY2FuY2VsIG11bHRpcGxlIGNoZXJyeS1waWNrJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCB0byBjYW5jZWwgc2luZ2xlIGNoZXJyeS1waWNrJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0NIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgZG9lcyBub3QgdW5zYWZlbHkgY2hhbmdlIEhFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgYW5vdGhlcnBpY2sgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkIGFub3RoZXJwaWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQiIGFjdHVhbCAmJgorCXRlc3RfY21wX3JldiBiYXNlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1hYm9ydCB0byBjYW5jZWwgbXVsdGlwbGUgcmV2ZXJ0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGFub3RoZXJwaWNrICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCByZXZlcnQgYmFzZS4ucGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfY21wX3JldiBhbm90aGVycGljayBIRUFEICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLWFib3J0IHdvcmtzLCB0b28nICcKKwlwcmlzdGluZV9kZXRhY2ggYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHJldmVydCBiYXNlLi5waWNrZWQgJiYKKwlnaXQgcmV2ZXJ0IC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfY21wX3JldiBhbm90aGVycGljayBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgdG8gY2FuY2VsIHNpbmdsZSByZXZlcnQnICcKKwlwcmlzdGluZV9kZXRhY2ggYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHJldmVydCBwaWNrZWQgJiYKKwlnaXQgcmV2ZXJ0IC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfY21wX3JldiBhbm90aGVycGljayBIRUFEICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQga2VlcHMgdW5yZWxhdGVkIGNoYW5nZSwgZWFzeSBjYXNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIHVucmVsYXRlZHBpY2sgJiYKKwllY2hvIGNoYW5nZWQgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkLi55ZXRhbm90aGVycGljayAmJgorCWVjaG8gY2hhbmdlZCA+dW5yZWxhdGVkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdW5yZWxhdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgcmVmdXNlcyB0byBjbG9iYmVyIHVucmVsYXRlZCBjaGFuZ2UsIGhhcmRlciBjYXNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIGNoYW5nZWQgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvIGNoYW5nZWQgPnVucmVsYXRlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVucmVsYXRlZCAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5sb2cgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGxvZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgY2hlY2tvdXQgdW5yZWxhdGVkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHN0aWxsIHdyaXRlcyBzZXF1ZW5jZXIgc3RhdGUgd2hlbiBvbmUgY29tbWl0IGlzIGxlZnQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4ucGlja2VkICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3NlcXVlbmNlciAmJgorCWVjaG8gInJlc29sdmVkIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCXVucmVsYXRlZAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28KKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCXVucmVsYXRlZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCBhZnRlciBsYXN0IGNvbW1pdCBpbiBzZXF1ZW5jZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5waWNrZWQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9DSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBkb2VzIG5vdCBpbXBsaWNpdGx5IHN0b21wIGFuIGV4aXN0aW5nIG9wZXJhdGlvbicgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvc2VxdWVuY2VyID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgY2hlcnJ5LXBpY2sgdW5yZWxhdGVkcGljayAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvc2VxdWVuY2VyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgY29tcGxhaW5zIHdoZW4gbm8gY2hlcnJ5LXBpY2sgaXMgaW4gcHJvZ3Jlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgY29tcGxhaW5zIHdoZW4gdGhlcmUgYXJlIHVucmVzb2x2ZWQgY29uZmxpY3RzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBvZiBzaW5nbGUgY2hlcnJ5LXBpY2snICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gYyA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGZvbyAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUReICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIG9mIHNpbmdsZSByZXZlcnQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gcmVzb2x2ZWQgPmV4cGVjdCAmJgorCWVjaG8gIlJldmVydCBcInBpY2tlZFwiIiA+ZXhwZWN0Lm1zZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfY21wIGV4cGVjdCBmb28gJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEXiAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1wcmV0dHk9dGZvcm1hdDolcyBIRUFEID5tc2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QubXNnIG1zZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBhZnRlciByZXNvbHZpbmcgY29uZmxpY3RzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIGQgPmV4cGVjdCAmJgorCWNhdCA+ZXhwZWN0LmxvZyA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWZvbworCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JdW5yZWxhdGVkCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvbworCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJdW5yZWxhdGVkCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbC5sb2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZm9vICYmCisJdGVzdF9jbXAgZXhwZWN0LmxvZyBhY3R1YWwubG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgYWZ0ZXIgcmVzb2x2aW5nIGNvbmZsaWN0cyBhbmQgY29tbWl0dGluZycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCWVjaG8gImMiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWZvbworCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQl1bnJlbGF0ZWQKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZm9vCisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQl1bnJlbGF0ZWQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgYXNrcyBmb3IgaGVscCBhZnRlciByZXNvbHZpbmcgcGF0Y2ggdG8gbmlsJyAnCisJcHJpc3RpbmVfZGV0YWNoIGNvbmZsaWN0aW5nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGluaXRpYWwuLnBpY2tlZCAmJgorCisJdGVzdF9jbXBfcmV2IHVucmVsYXRlZHBpY2sgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCWdpdCBjaGVja291dCBIRUFEIC0tIHVucmVsYXRlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlIDI+bXNnICYmCisJdGVzdF9pMThuZ3JlcCAiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSIgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBhZHZpY2UgYW5kIHNraXAgbmlsIHBhdGNoJyAnCisJcHJpc3RpbmVfZGV0YWNoIGNvbmZsaWN0aW5nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGluaXRpYWwuLnBpY2tlZCAmJgorCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gdW5yZWxhdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCisJZ2l0IHJldi1saXN0IGluaXRpYWwuLkhFQUQgPmNvbW1pdHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGNvbW1pdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSByZXNwZWN0cyBvcHRzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIC14IGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAiYyIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFub3RoZXJwaWNrX21zZyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRH4xID5waWNrZWRfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjIgPnVucmVsYXRlZHBpY2tfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjMgPmluaXRpYWxfbXNnICYmCisJISBncmVwICJjaGVycnkgcGlja2VkIGZyb20iIGluaXRpYWxfbXNnICYmCisJZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tIiB1bnJlbGF0ZWRwaWNrX21zZyAmJgorCWdyZXAgImNoZXJyeSBwaWNrZWQgZnJvbSIgcGlja2VkX21zZyAmJgorCWdyZXAgImNoZXJyeSBwaWNrZWQgZnJvbSIgYW5vdGhlcnBpY2tfbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgb2Ygc2luZ2xlLXBpY2sgcmVzcGVjdHMgLXgnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAteCBwaWNrZWQgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+bXNnICYmCisJZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tIiBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSByZXNwZWN0cyAteCBpbiBmaXJzdCBjb21taXQgaW4gbXVsdGktcGljaycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC14IHBpY2tlZCBhbm90aGVycGljayAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+bXNnICYmCisJcGlja2VkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBwaWNrZWQpICYmCisJZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tLiokcGlja2VkIiBtc2cKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnLS1zaWdub2ZmIGlzIGF1dG9tYXRpY2FsbHkgcHJvcGFnYXRlZCB0byByZXNvbHZlZCBjb25mbGljdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayAtLXNpZ25vZmYgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YW5vdGhlcnBpY2tfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjEgPnBpY2tlZF9tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MiA+dW5yZWxhdGVkcGlja19tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MyA+aW5pdGlhbF9tc2cgJiYKKwkhIGdyZXAgIlNpZ25lZC1vZmYtYnk6IiBpbml0aWFsX21zZyAmJgorCWdyZXAgIlNpZ25lZC1vZmYtYnk6IiB1bnJlbGF0ZWRwaWNrX21zZyAmJgorCSEgZ3JlcCAiU2lnbmVkLW9mZi1ieToiIHBpY2tlZF9tc2cgJiYKKwlncmVwICJTaWduZWQtb2ZmLWJ5OiIgYW5vdGhlcnBpY2tfbXNnCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJy0tc2lnbm9mZiBkcm9wcGVkIGZvciBpbXBsaWNpdCBjb21taXQgb2YgcmVzb2x1dGlvbiwgbXVsdGktcGljayBjYXNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLXMgcGlja2VkIGFub3RoZXJwaWNrICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRF5eICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+bXNnICYmCisJISBncmVwIFNpZ25lZC1vZmYtYnk6IG1zZworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdzaWduLW9mZiBuZWVkcyB0byBiZSByZWFmZmlybWVkIGFmdGVyIGNvbmZsaWN0IHJlc29sdXRpb24sIHNpbmdsZS1waWNrIGNhc2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtcyBwaWNrZWQgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKworCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEXiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+bXNnICYmCisJISBncmVwIFNpZ25lZC1vZmYtYnk6IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24gc2hlZXQgMScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCWVjaG8gInJlc29sdmVkIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJc2VkICJzL3BpY2sgL3BpY2svIiAuZ2l0L3NlcXVlbmNlci90b2RvID5uZXdfc2hlZXQgJiYKKwljcCBuZXdfc2hlZXQgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbGZvcm1lZCBpbnN0cnVjdGlvbiBzaGVldCAyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAicmVzb2x2ZWQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwlzZWQgInMvcGljay9yZXZlcnQvIiAuZ2l0L3NlcXVlbmNlci90b2RvID5uZXdfc2hlZXQgJiYKKwljcCBuZXdfc2hlZXQgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGNvbW1pdCBzZXQgKG5vIGNvbW1pdHMgdG8gd2FsayknICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayBiYXNlLi5iYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGNvbW1pdCBzZXQgKGN1bGxlZCBkdXJpbmcgd2FsayknICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtMiAtLWF1dGhvcj1uby5zdWNoLmF1dGhvciBiYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbGZvcm1lZCBpbnN0cnVjdGlvbiBzaGVldCAzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAicmVzb2x2ZWQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwlzZWQgInMvcGljayBcKFswLTlhLWZdKlwpL3BpY2sgJF9yMTAvIiAuZ2l0L3NlcXVlbmNlci90b2RvID5uZXdfc2hlZXQgJiYKKwljcCBuZXdfc2hlZXQgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luc3RydWN0aW9uIHNoZWV0LCBmYXQtZmluZ2VycyB2ZXJzaW9uJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAiYyIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCXNlZCAicy9waWNrIFwoWzAtOWEtZl0qXCkvcGljayAJIFwxIAkvIiAuZ2l0L3NlcXVlbmNlci90b2RvID5uZXdfc2hlZXQgJiYKKwljcCBuZXdfc2hlZXQgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBkZXNjcmlwdGlvbnMgaW4gaW5zbiBzaGVldCBhcmUgb3B0aW9uYWwnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJY3V0IC1kIiAiIC1mMSwyIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5jb21taXRzICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBjb21taXRzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUxMS1jaGVycnktcGljay14LnNoIGIvdC90MzUxMS1jaGVycnktcGljay14LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0YTU4N2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTExLWNoZXJyeS1waWNrLXguc2gKQEAgLTAsMCArMSwzMjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNoZXJyeS1waWNrIC14IGFuZCAtcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3ByaXN0aW5lX2RldGFjaCAoKSB7CisJZ2l0IGNoZXJyeS1waWNrIC0tcXVpdCAmJgorCWdpdCBjaGVja291dCAtZiAiJDFeMCIgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteAorfQorCittZXNnX29uZV9saW5lPSdiYXNlOiBjb21taXQgbWVzc2FnZScKKworbWVzZ19ub19mb290ZXI9IiRtZXNnX29uZV9saW5lCisKK09uZVdvcmRCb2R5VGhhdHNOb3RBLVMtby1CIgorCittZXNnX3dpdGhfZm9vdGVyPSIkbWVzZ19ub19mb290ZXIKKworU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CitTaWduZWQtb2ZmLWJ5OiBBLlUuIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEIuVS4gVGhvciA8YnV0aG9yQGV4YW1wbGUuY29tPiIKKworbWVzZ19icm9rZW5fZm9vdGVyPSIkbWVzZ19ub19mb290ZXIKKworVGhpcyBpcyBub3QgcmVjb2duaXplZCBhcyBhIGZvb3RlciBiZWNhdXNlIE15Zm9vdGVyIGlzIG5vdCBhIHJlY29nbml6ZWQgdG9rZW4uCitNeWZvb3RlcjogQS5VLiBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IgorCittZXNnX3dpdGhfZm9vdGVyX3NvYj0iJG1lc2dfd2l0aF9mb290ZXIKK1NpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKKworbWVzZ193aXRoX2NoZXJyeV9mb290ZXI9IiRtZXNnX3dpdGhfZm9vdGVyX3NvYgorKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOSkKK1Rlc3RlZC1ieTogQy5VLiBUaG9yIDxjdXRob3JAZXhhbXBsZS5jb20+IgorCittZXNnX3VuY2xlYW49IiRtZXNnX29uZV9saW5lCisKKworbGVhZGluZyBlbXB0eSBsaW5lcworCisKK2NvbnNlY3V0aXZlIGVtcHR5IGxpbmVzCisKKyMgaGFzaCB0YWcgY29tbWVudAorCit0cmFpbGluZyBlbXB0eSBsaW5lcworCisKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBhZHZpY2UuZGV0YWNoZWRoZWFkIGZhbHNlICYmCisJZWNobyB1bnJlbGF0ZWQgPnVucmVsYXRlZCAmJgorCWdpdCBhZGQgdW5yZWxhdGVkICYmCisJdGVzdF9jb21taXQgaW5pdGlhbCBmb28gYSAmJgorCXRlc3RfY29tbWl0ICIkbWVzZ19vbmVfbGluZSIgZm9vIGIgbWVzZy1vbmUtbGluZSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICIkbWVzZ19ub19mb290ZXIiIGZvbyBiIG1lc2ctbm8tZm9vdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgIiRtZXNnX2Jyb2tlbl9mb290ZXIiIGZvbyBiIG1lc2ctYnJva2VuLWZvb3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICIkbWVzZ193aXRoX2Zvb3RlciIgZm9vIGIgbWVzZy13aXRoLWZvb3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICIkbWVzZ193aXRoX2Zvb3Rlcl9zb2IiIGZvbyBiIG1lc2ctd2l0aC1mb290ZXItc29iICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgIiRtZXNnX3dpdGhfY2hlcnJ5X2Zvb3RlciIgZm9vIGIgbWVzZy13aXRoLWNoZXJyeS1mb290ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb21taXQuY2xlYW51cCB2ZXJiYXRpbSAmJgorCXRlc3RfY29tbWl0ICIkbWVzZ191bmNsZWFuIiBmb28gYiBtZXNnLXVuY2xlYW4gJiYKKwl0ZXN0X3VuY29uZmlnIGNvbW1pdC5jbGVhbnVwICYmCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCBjb25mbGljdGluZyB1bnJlbGF0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggaW5zZXJ0cyBibGFuayBsaW5lIGFmdGVyIG9uZSBsaW5lIHN1YmplY3QnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIG1lc2ctb25lLWxpbmVeMCkgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXggbWVzZy1vbmUtbGluZSAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ19vbmVfbGluZQorCisJCShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICRzaGExKQorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC1zIGluc2VydHMgYmxhbmsgbGluZSBhZnRlciBvbmUgbGluZSBzdWJqZWN0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgbWVzZy1vbmUtbGluZSAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ19vbmVfbGluZQorCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC1zIGluc2VydHMgYmxhbmsgbGluZSBhZnRlciBub24tY29uZm9ybWluZyBmb290ZXInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtcyBtZXNnLWJyb2tlbi1mb290ZXIgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfYnJva2VuX2Zvb3RlcgorCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC1zIHJlY29nbml6ZXMgdHJhaWxlciBjb25maWcnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCAtYyAidHJhaWxlci5NeWZvb3Rlci5pZmV4aXN0cz1hZGQiIGNoZXJyeS1waWNrIC1zIG1lc2ctYnJva2VuLWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ19icm9rZW5fZm9vdGVyCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC14IGluc2VydHMgYmxhbmsgbGluZSB3aGVuIGNvbmZvcm1pbmcgZm9vdGVyIG5vdCBmb3VuZCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgbWVzZy1uby1mb290ZXJeMCkgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXggbWVzZy1uby1mb290ZXIgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfbm9fZm9vdGVyCisKKwkJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJHNoYTEpCisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgaW5zZXJ0cyBibGFuayBsaW5lIHdoZW4gY29uZm9ybWluZyBmb290ZXIgbm90IGZvdW5kJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgbWVzZy1uby1mb290ZXIgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfbm9fZm9vdGVyCisKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggLXMgaW5zZXJ0cyBibGFuayBsaW5lIHdoZW4gY29uZm9ybWluZyBmb290ZXIgbm90IGZvdW5kJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBtZXNnLW5vLWZvb3Rlcl4wKSAmJgorCWdpdCBjaGVycnktcGljayAteCAtcyBtZXNnLW5vLWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ19ub19mb290ZXIKKworCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgYWRkcyBzb2Igd2hlbiBsYXN0IHNvYiBkb2VzbnQgbWF0Y2ggY29tbWl0dGVyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgbWVzZy13aXRoLWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ193aXRoX2Zvb3RlcgorCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCAtcyBhZGRzIHNvYiB3aGVuIGxhc3Qgc29iIGRvZXNudCBtYXRjaCBjb21taXR0ZXInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIG1lc2ctd2l0aC1mb290ZXJeMCkgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXggLXMgbWVzZy13aXRoLWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ193aXRoX2Zvb3RlcgorCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgcmVmcmFpbnMgZnJvbSBhZGRpbmcgZHVwbGljYXRlIHRyYWlsaW5nIHNvYicgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIC1zIG1lc2ctd2l0aC1mb290ZXItc29iICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfZm9vdGVyX3NvYgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC14IC1zIGFkZHMgc29iIGV2ZW4gd2hlbiB0cmFpbGluZyBzb2IgZXhpc3RzIGZvciBjb21taXR0ZXInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIG1lc2ctd2l0aC1mb290ZXItc29iXjApICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IC1zIG1lc2ctd2l0aC1mb290ZXItc29iICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfZm9vdGVyX3NvYgorCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggaGFuZGxlcyBjb21taXRzIHdpdGggbm8gTkwgYXQgZW5kIG9mIG1lc3NhZ2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXByaW50ZiAidGl0bGVcblxuU2lnbmVkLW9mZi1ieTogQSA8YUBleGFtcGxlLmNvbT4iID5tc2cgJiYKKwlzaGExPSQoZ2l0IGNvbW1pdC10cmVlIC1wIGluaXRpYWwgbWVzZy13aXRoLWZvb3Rlcl57dHJlZX0gPG1zZykgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXggJHNoYTEgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisKKwlwcmludGYgIlxuKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJXMpXG4iICRzaGExID4+bXNnICYmCisJdGVzdF9jbXAgbXNnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCBoYW5kbGVzIGNvbW1pdHMgd2l0aCBubyBmb290ZXIgYW5kIG5vIE5MIGF0IGVuZCBvZiBtZXNzYWdlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlwcmludGYgInRpdGxlXG5cbm5vdCBhIGZvb3RlciIgPm1zZyAmJgorCXNoYTE9JChnaXQgY29tbWl0LXRyZWUgLXAgaW5pdGlhbCBtZXNnLXdpdGgtZm9vdGVyXnt0cmVlfSA8bXNnKSAmJgorCWdpdCBjaGVycnktcGljayAteCAkc2hhMSAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKworCXByaW50ZiAiXG5cbihjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICVzKVxuIiAkc2hhMSA+Pm1zZyAmJgorCXRlc3RfY21wIG1zZyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgaGFuZGxlcyBjb21taXRzIHdpdGggbm8gTkwgYXQgZW5kIG9mIG1lc3NhZ2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXByaW50ZiAidGl0bGVcblxuU2lnbmVkLW9mZi1ieTogQSA8YUBleGFtcGxlLmNvbT4iID5tc2cgJiYKKwlzaGExPSQoZ2l0IGNvbW1pdC10cmVlIC1wIGluaXRpYWwgbWVzZy13aXRoLWZvb3Rlcl57dHJlZX0gPG1zZykgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgJHNoYTEgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisKKwlwcmludGYgIlxuU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+XG4iID4+bXNnICYmCisJdGVzdF9jbXAgbXNnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyBoYW5kbGVzIGNvbW1pdHMgd2l0aCBubyBmb290ZXIgYW5kIG5vIE5MIGF0IGVuZCBvZiBtZXNzYWdlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlwcmludGYgInRpdGxlXG5cbm5vdCBhIGZvb3RlciIgPm1zZyAmJgorCXNoYTE9JChnaXQgY29tbWl0LXRyZWUgLXAgaW5pdGlhbCBtZXNnLXdpdGgtZm9vdGVyXnt0cmVlfSA8bXNnKSAmJgorCWdpdCBjaGVycnktcGljayAtcyAkc2hhMSAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKworCXByaW50ZiAiXG5cblNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPlxuIiA+Pm1zZyAmJgorCXRlc3RfY21wIG1zZyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggdHJlYXRzICIoY2hlcnJ5IHBpY2tlZCBmcm9tLi4uIiBsaW5lIGFzIHBhcnQgb2YgZm9vdGVyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBtZXNnLXdpdGgtY2hlcnJ5LWZvb3Rlcl4wKSAmJgorCWdpdCBjaGVycnktcGljayAteCBtZXNnLXdpdGgtY2hlcnJ5LWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ193aXRoX2NoZXJyeV9mb290ZXIKKwkJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJHNoYTEpCisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgdHJlYXRzICIoY2hlcnJ5IHBpY2tlZCBmcm9tLi4uIiBsaW5lIGFzIHBhcnQgb2YgZm9vdGVyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgbWVzZy13aXRoLWNoZXJyeS1mb290ZXIgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfd2l0aF9jaGVycnlfZm9vdGVyCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC14IC1zIHRyZWF0cyAiKGNoZXJyeSBwaWNrZWQgZnJvbS4uLiIgbGluZSBhcyBwYXJ0IG9mIGZvb3RlcicgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgbWVzZy13aXRoLWNoZXJyeS1mb290ZXJeMCkgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXggLXMgbWVzZy13aXRoLWNoZXJyeS1mb290ZXIgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfd2l0aF9jaGVycnlfZm9vdGVyCisJCShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICRzaGExKQorCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBwcmVzZXJ2ZXMgY29tbWl0IG1lc3NhZ2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXByaW50ZiAiJG1lc2dfdW5jbGVhbiIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCIG1lc2ctdW5jbGVhbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjaGVycnktcGljayBtZXNnLXVuY2xlYW4gJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCBjbGVhbnMgY29tbWl0IG1lc3NhZ2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAteCBtZXNnLXVuY2xlYW4gJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJcHJpbnRmICIlc1xuKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJXMpXG4iIFwKKwkJIiRtZXNnX3VuY2xlYW4iICQoZ2l0IHJldi1wYXJzZSBtZXNnLXVuY2xlYW4pIHwKKwkJCWdpdCBzdHJpcHNwYWNlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC14IHJlc3BlY3RzIGNvbW1pdC5jbGVhbnVwJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgLWMgY29tbWl0LmNsZWFudXA9c3RyaXAgY2hlcnJ5LXBpY2sgLXggbWVzZy11bmNsZWFuICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXByaW50ZiAiJXNcbihjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICVzKVxuIiBcCisJCSIkbWVzZ191bmNsZWFuIiAkKGdpdCByZXYtcGFyc2UgbWVzZy11bmNsZWFuKSB8CisJCQlnaXQgc3RyaXBzcGFjZSAtcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MTItY2hlcnJ5LXBpY2stc3VibW9kdWxlLnNoIGIvdC90MzUxMi1jaGVycnktcGljay1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmQ3ODI4NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MTItY2hlcnJ5LXBpY2stc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVycnktcGljayBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfRE9FU05UX0NSRUFURV9FTVBUWV9TVUJNT0RVTEVfRElSPTEKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9BVFRFTVBUU19UT19NRVJHRV9SRU1PVkVEX1NVQk1PRFVMRV9GSUxFUz0xCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCBjaGVycnktcGljayIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5yZWxhdGVkIHN1Ym1vZHVsZS9maWxlIGNvbmZsaWN0IGlzIGlnbm9yZWQnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1YiAmJgorCisJdG91Y2ggc3ViL2ZpbGUgJiYKKwlnaXQgLUMgc3ViIGFkZCBmaWxlICYmCisJZ2l0IC1DIHN1YiBjb21taXQgLW0gImFkZCBhIGZpbGUgaW4gYSBzdWJtb2R1bGUiICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIGFfcmVwbyAmJgorCSgKKwkJY2QgYV9yZXBvICYmCisJCT5hX2ZpbGUgJiYKKwkJZ2l0IGFkZCBhX2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgZmlsZSIgJiYKKworCQlnaXQgYnJhbmNoIHRlc3QgJiYKKwkJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKworCQlta2RpciBzdWIgJiYKKwkJPnN1Yi9jb250ZW50ICYmCisJCWdpdCBhZGQgc3ViL2NvbnRlbnQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgcmVndWxhciBmb2xkZXIgd2l0aCBuYW1lIHN1YiIgJiYKKworCQllY2hvICIxMjMiID5hX2ZpbGUgJiYKKwkJZ2l0IGFkZCBhX2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibW9kaWZ5IGEgZmlsZSIgJiYKKworCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgc3VibW9kdWxlIGluZm8gZm9sZGVyIHdpdGggbmFtZSBzdWIiICYmCisKKwkJZ2l0IGNoZXJyeS1waWNrIHRlc3QKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUxMy1yZXZlcnQtc3VibW9kdWxlLnNoIGIvdC90MzUxMy1yZXZlcnQtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlMzlmY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTEzLXJldmVydC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JldmVydCBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCisjIENyZWF0ZSBhIHJldmVydCB0aGF0IG1vdmVzIGZyb20gSEVBRCAoaW5jbHVkaW5nIGFueSB0ZXN0IG1vZGlmaWNhdGlvbnMgdG8KKyMgdGhlIHdvcmsgdHJlZSkgdG8gJDEgYnkgZmlyc3QgY2hlY2tpbmcgb3V0ICQxIGFuZCByZXZlcnRpbmcgaXQuIFJldmVydGluZworIyB0aGUgcmV2ZXJ0IGlzIHRoZSB0cmFuc2l0aW9uIHdlIHRlc3QgZm9yLiBXZSB0YXIgdGhlIGN1cnJlbnQgd29yayB0cmVlCisjIGZpcnN0IHNvIHdlIGNhbiByZXN0b3JlIHRoZSB3b3JrIHRyZWUgdGVzdCBzZXR1cCBhZnRlciBkb2luZyB0aGUgY2hlY2tvdXQKKyMgYW5kIHJldmVydC4gIFdlIHRlc3QgaGVyZSB0aGF0IHRoZSByZXN0b3JlZCB3b3JrIHRyZWUgY29udGVudCBpcyBpZGVudGljYWwKKyMgdG8gdGhhdCBhdCB0aGUgYmVnaW5uaW5nLiBUaGUgbGFzdCByZXZlcnQgaXMgdGhlbiB0ZXN0ZWQgYnkgdGhlIGZyYW1ld29yay4KK2dpdF9yZXZlcnQgKCkgeworCWdpdCBzdGF0dXMgLXN1ID5leHBlY3QgJiYKKwlscyAtMXBSICogPj5leHBlY3QgJiYKKwl0YXIgY2YgIiRUUkFTSF9ESVJFQ1RPUlkvdG1wLnRhciIgKiAmJgorCWdpdCBjaGVja291dCAiJDEiICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisJcm0gLXJmICogJiYKKwl0YXIgeGYgIiRUUkFTSF9ESVJFQ1RPUlkvdG1wLnRhciIgJiYKKwlnaXQgc3RhdHVzIC1zdSA+YWN0dWFsICYmCisJbHMgLTFwUiAqID4+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXZlcnQgSEVBRAorfQorCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfRE9FU05UX0NSRUFURV9FTVBUWV9TVUJNT0RVTEVfRElSPTEKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3JldmVydCIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNjAwLXJtLnNoIGIvdC90MzYwMC1ybS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMmMwMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzYwMC1ybS5zaApAQCAtMCwwICsxLDg5NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBDYXJsIEQuIFdvcnRoCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgb2YgdGhlIHZhcmlvdXMgb3B0aW9ucyB0byBnaXQgcm0uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBTZXR1cCBzb21lIGZpbGVzIHRvIGJlIHJlbW92ZWQsIHNvbWUgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJbml0aWFsaXplIHRlc3QgZGlyZWN0b3J5JyAnCisJdG91Y2ggLS0gZm9vIGJhciBiYXogInNwYWNlIGVtYmVkZGVkIiAtcSAmJgorCWdpdCBhZGQgLS0gZm9vIGJhciBiYXogInNwYWNlIGVtYmVkZGVkIiAtcSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBub3JtYWwgZmlsZXMiCisnCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgIUZVTk5ZTkFNRVMKK3RoZW4KKwlzYXkgJ1lvdXIgZmlsZXN5c3RlbSBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcy4nCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ2FkZCBmaWxlcyB3aXRoIGZ1bm55IG5hbWVzJyAnCisJdG91Y2ggLS0gInRhYgllbWJlZGRlZCIgIm5ld2xpbmUke0xGfWVtYmVkZGVkIiAmJgorCWdpdCBhZGQgLS0gInRhYgllbWJlZGRlZCIgIm5ld2xpbmUke0xGfWVtYmVkZGVkIiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmaWxlcyB3aXRoIHRhYnMgYW5kIG5ld2xpbmVzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQcmUtY2hlY2sgdGhhdCBmb28gZXhpc3RzIGFuZCBpcyBpbiBpbmRleCBiZWZvcmUgZ2l0IHJtIGZvbycgJworCXRlc3RfcGF0aF9pc19maWxlIGZvbyAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Rlc3QgdGhhdCBnaXQgcm0gZm9vIHN1Y2NlZWRzJyAnCisJZ2l0IHJtIC0tY2FjaGVkIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUZXN0IHRoYXQgZ2l0IHJtIC0tY2FjaGVkIGZvbyBzdWNjZWVkcyBpZiB0aGUgaW5kZXggbWF0Y2hlcyB0aGUgZmlsZScgJworCWVjaG8gY29udGVudCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcm0gLS1jYWNoZWQgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Rlc3QgdGhhdCBnaXQgcm0gLS1jYWNoZWQgZm9vIHN1Y2NlZWRzIGlmIHRoZSBpbmRleCBtYXRjaGVzIHRoZSBmaWxlJyAnCisJZWNobyBjb250ZW50ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gZm9vICYmCisJZWNobyAib3RoZXIgY29udGVudCIgPmZvbyAmJgorCWdpdCBybSAtLWNhY2hlZCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCB0aGF0IGdpdCBybSAtLWNhY2hlZCBmb28gZmFpbHMgaWYgdGhlIGluZGV4IG1hdGNoZXMgbmVpdGhlciB0aGUgZmlsZSBub3IgSEVBRCcgJworCWVjaG8gY29udGVudCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tIGZvbyAtLWFsbG93LWVtcHR5ICYmCisJZWNobyAib3RoZXIgY29udGVudCIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZWNobyAieWV0IGFub3RoZXIgY29udGVudCIgPmZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtLWNhY2hlZCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCB0aGF0IGdpdCBybSAtLWNhY2hlZCAtZiBmb28gd29ya3MgaW4gY2FzZSB3aGVyZSAtLWNhY2hlZCBvbmx5IGRpZCBub3QnICcKKwllY2hvIGNvbnRlbnQgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBmb28gLS1hbGxvdy1lbXB0eSAmJgorCWVjaG8gIm90aGVyIGNvbnRlbnQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWVjaG8gInlldCBhbm90aGVyIGNvbnRlbnQiID5mb28gJiYKKwlnaXQgcm0gLS1jYWNoZWQgLWYgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Bvc3QtY2hlY2sgdGhhdCBmb28gZXhpc3RzIGJ1dCBpcyBub3QgaW4gaW5kZXggYWZ0ZXIgZ2l0IHJtIGZvbycgJworCXRlc3RfcGF0aF9pc19maWxlIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ByZS1jaGVjayB0aGF0IGJhciBleGlzdHMgYW5kIGlzIGluIGluZGV4IGJlZm9yZSAiZ2l0IHJtIGJhciInICcKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIgJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUZXN0IHRoYXQgImdpdCBybSBiYXIiIHN1Y2NlZWRzJyAnCisJZ2l0IHJtIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQb3N0LWNoZWNrIHRoYXQgYmFyIGRvZXMgbm90IGV4aXN0IGFuZCBpcyBub3QgaW4gaW5kZXggYWZ0ZXIgImdpdCBybSAtZiBiYXIiJyAnCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCB0aGF0ICJnaXQgcm0gLS0gLXEiIHN1Y2NlZWRzIChyZW1vdmUgYSBmaWxlIHRoYXQgbG9va3MgbGlrZSBhbiBvcHRpb24pJyAnCisJZ2l0IHJtIC0tIC1xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRlVOTllOQU1FUyAnVGVzdCB0aGF0ICJnaXQgcm0gLWYiIHN1Y2NlZWRzIHdpdGggZW1iZWRkZWQgc3BhY2UsIHRhYiwgb3IgbmV3bGluZSBjaGFyYWN0ZXJzLicgJworCWdpdCBybSAtZiAic3BhY2UgZW1iZWRkZWQiICJ0YWIJZW1iZWRkZWQiICJuZXdsaW5lJHtMRn1lbWJlZGRlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTQU5JVFkgJ1Rlc3QgdGhhdCAiZ2l0IHJtIC1mIiBmYWlscyBpZiBpdHMgcm0gZmFpbHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuIiAmJgorCWNobW9kIGEtdyAuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIC1mIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdXaGVuIHRoZSBybSBpbiAiZ2l0IHJtIC1mIiBmYWlscywgaXQgc2hvdWxkIG5vdCByZW1vdmUgdGhlIGZpbGUgZnJvbSB0aGUgaW5kZXgnICcKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW1vdmUgbm9uZXhpc3RlbnQgZmlsZSB3aXRoIC0taWdub3JlLXVubWF0Y2gnICcKKwlnaXQgcm0gLS1pZ25vcmUtdW5tYXRjaCBub25leGlzdGVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicm0iIGNvbW1hbmQgcHJpbnRlZCcgJworCWVjaG8gZnJvdHogPnRlc3QtZmlsZSAmJgorCWdpdCBhZGQgdGVzdC1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGZpbGUgZm9yIHJtIHRlc3QiICYmCisJZ2l0IHJtIHRlc3QtZmlsZSA+cm0tb3V0cHV0LnJhdyAmJgorCWdyZXAgIl5ybSAiIHJtLW91dHB1dC5yYXcgPnJtLW91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcm0tb3V0cHV0ICYmCisJcm0gLWYgdGVzdC1maWxlIHJtLW91dHB1dC5yYXcgcm0tb3V0cHV0ICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUgZnJvbSBybSB0ZXN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicm0iIGNvbW1hbmQgc3VwcHJlc3NlZCB3aXRoIC0tcXVpZXQnICcKKwllY2hvIGZyb3R6ID50ZXN0LWZpbGUgJiYKKwlnaXQgYWRkIHRlc3QtZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmaWxlIGZvciBybSAtLXF1aWV0IHRlc3QiICYmCisJZ2l0IHJtIC0tcXVpZXQgdGVzdC1maWxlID5ybS1vdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgcm0tb3V0cHV0ICYmCisJcm0gLWYgdGVzdC1maWxlIHJtLW91dHB1dCAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIGZyb20gcm0gLS1xdWlldCB0ZXN0IgorJworCisjIE5vdywgZmFpbHVyZSBjYXNlcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlLWFkZCBmb28gYW5kIGJheicgJworCWdpdCBhZGQgZm9vIGJheiAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNb2RpZnkgZm9vIC0tIHJtIHNob3VsZCByZWZ1c2UnICcKKwllY2hvID4+Zm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGZvbyBiYXogJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTW9kaWZpZWQgZm9vIC0tIHJtIC1mIHNob3VsZCB3b3JrJyAnCisJZ2l0IHJtIC1mIGZvbyBiYXogJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlLWFkZCBmb28gYW5kIGJheiBmb3IgSEVBRCB0ZXN0cycgJworCWVjaG8gZnJvdHogPmZvbyAmJgorCWdpdCBjaGVja291dCBIRUFEIC0tIGJheiAmJgorCWdpdCBhZGQgZm9vIGJheiAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb28gaXMgZGlmZmVyZW50IGluIGluZGV4IGZyb20gSEVBRCAtLSBybSBzaG91bGQgcmVmdXNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGZvbyBiYXogJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnV0IHdpdGggLWYgaXQgc2hvdWxkIHdvcmsuJyAnCisJZ2l0IHJtIC1mIGZvbyBiYXogJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0byByZW1vdmUgY2FjaGVkIGVtcHR5IGZpbGUgd2l0aCBtb2RpZmljYXRpb25zJyAnCisJPmVtcHR5ICYmCisJZ2l0IGFkZCBlbXB0eSAmJgorCWVjaG8gY29udGVudCA+ZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLS1jYWNoZWQgZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGludGVudC10by1hZGQgZmlsZSB3aXRob3V0IC0tZm9yY2UnICcKKwllY2hvIGNvbnRlbnQgPmludGVudC10by1hZGQgJiYKKwlnaXQgYWRkIC1OIGludGVudC10by1hZGQgJiYKKwlnaXQgcm0gLS1jYWNoZWQgaW50ZW50LXRvLWFkZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZWN1cnNpdmUgdGVzdCBzZXR1cCcgJworCW1rZGlyIC1wIGZyb3R6ICYmCisJZWNobyBxZndmcSA+ZnJvdHovbml0Zm9sICYmCisJZ2l0IGFkZCBmcm90eiAmJgorCWdpdCBjb21taXQgLW0gInN1YmRpciB0ZXN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZWN1cnNpdmUgd2l0aG91dCAtciBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmcm90eiAmJgorCXRlc3RfcGF0aF9pc19kaXIgZnJvdHogJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmcm90ei9uaXRmb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVjdXJzaXZlIHdpdGggLXIgYnV0IGRpcnR5JyAnCisJZWNobyBxZndmcSA+PmZyb3R6L25pdGZvbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtciBmcm90eiAmJgorCXRlc3RfcGF0aF9pc19kaXIgZnJvdHogJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmcm90ei9uaXRmb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVjdXJzaXZlIHdpdGggLXIgLWYnICcKKwlnaXQgcm0gLWYgLXIgZnJvdHogJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmcm90ei9uaXRmb2wgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmcm90egorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW1vdmUgbm9uZXhpc3RlbnQgZmlsZSByZXR1cm5zIG5vbnplcm8gZXhpdCBzdGF0dXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gbm9uZXhpc3RlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2FsbCAicm0iIGZyb20gb3V0c2lkZSB0aGUgd29yayB0cmVlJyAnCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIHNvbWV0aGluZyA+c29tZWZpbGUgJiYKKwkJZ2l0IGFkZCBzb21lZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSBmaWxlIiAmJgorCQkoCisJCQljZCAuLiAmJgorCQkJZ2l0IC0tZ2l0LWRpcj1yZXBvLy5naXQgLS13b3JrLXRyZWU9cmVwbyBybSBzb21lZmlsZQorCQkpICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggc29tZWZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnJlc2ggaW5kZXggYmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIHVwLXRvLWRhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdC10b29sIGNobXRpbWUgLTg2NDAwIGZyb3R6L25pdGZvbCAmJgorCWdpdCBybSBmcm90ei9uaXRmb2wgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmcm90ei9uaXRmb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hva2luZyAiZ2l0IHJtIiBzaG91bGQgbm90IGxldCBpdCBkaWUgd2l0aCBjcnVmdCcgJworCXRlc3Rfb2lkX2luaXQgJiYKKwlnaXQgcmVzZXQgLXEgLS1oYXJkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2luZGV4LmxvY2sgJiYgZ2l0IHJlc2V0IC1xIC0taGFyZCIgJiYKKwlpPTAgJiYKKwloYXNoPSQodGVzdF9vaWQgZGVhZGJlZWYpICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgMTIwMDAKKwlkbworCQllY2hvICIxMDA2NDQgJGhhc2ggMAlzb21lLWZpbGUtJGkiCisJCWk9JCgoICRpICsgMSApKQorCWRvbmUgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCSMgZ2l0IGNvbW1hbmQgaXMgaW50ZW50aW9uYWxseSBwbGFjZWQgdXBzdHJlYW0gb2YgcGlwZSB0byBpbmR1Y2UgU0lHUElQRQorCWdpdCBybSAtbiAic29tZS1maWxlLSoiIHwgOiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaW5kZXgubG9jaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXNvbHZpbmcgYnkgcmVtb3ZhbCBpcyBub3QgYSB3YXJuaW5nLXdvcnRoeSBldmVudCcgJworCWdpdCByZXNldCAtcSAtLWhhcmQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaW5kZXgubG9jayBtc2cgJiYgZ2l0IHJlc2V0IC1xIC0taGFyZCIgJiYKKwlibG9iPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZm9yIHN0YWdlIGluIDEgMiAzCisJZG8KKwkJZWNobyAiMTAwNjQ0ICRibG9iICRzdGFnZQlibG9iIgorCWRvbmUgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWdpdCBybSBibG9iID5tc2cgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgISAibmVlZHMgbWVyZ2UiIG1zZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtcyAtLWVycm9yLXVubWF0Y2ggYmxvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSByZW1vdmVzIHN1YmRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5JyAnCisJbWtkaXIgLXAgZGlyL3N1YmRpci9zdWJzdWJkaXIgJiYKKwllY2hvIGNvbnRlbnQgPmRpci9zdWJkaXIvc3Vic3ViZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIGRpci9zdWJkaXIvc3Vic3ViZGlyL2ZpbGUgJiYKKwlnaXQgcm0gLWYgZGlyL3N1YmRpci9zdWJzdWJkaXIvZmlsZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpcgorJworCitjYXQgPmV4cGVjdCA8PEVPRgorTSAgLmdpdG1vZHVsZXMKK0QgIHN1Ym1vZAorRU9GCisKK2NhdCA+ZXhwZWN0Lm1vZGlmaWVkIDw8RU9GCisgTSBzdWJtb2QKK0VPRgorCitjYXQgPmV4cGVjdC5tb2RpZmllZF9pbnNpZGUgPDxFT0YKKyBtIHN1Ym1vZAorRU9GCisKK2NhdCA+ZXhwZWN0Lm1vZGlmaWVkX3VudHJhY2tlZCA8PEVPRgorID8gc3VibW9kCitFT0YKKworY2F0ID5leHBlY3QuY2FjaGVkIDw8RU9GCitEICBzdWJtb2QKK0VPRgorCitjYXQgPmV4cGVjdC5ib3RoX2RlbGV0ZWQ8PEVPRgorRCAgLmdpdG1vZHVsZXMKK0QgIHN1Ym1vZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgZW1wdHkgc3VibW9kdWxlcyBmcm9tIHdvcmsgdHJlZScgJworCW1rZGlyIHN1Ym1vZCAmJgorCWhhc2g9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgIiRoYXNoIiBzdWJtb2QgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsIC4vLiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoIHN1Ym1vZCAmJgorCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCWdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgcmVtb3ZlZCBzdWJtb2R1bGUgZnJvbSBpbmRleCBhbmQgLmdpdG1vZHVsZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlybSAtcmYgc3VibW9kICYmCisJZ2l0IHJtIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVtb3ZlcyB3b3JrIHRyZWUgb2YgdW5tb2RpZmllZCBzdWJtb2R1bGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVtb3ZlcyBhIHN1Ym1vZHVsZSB3aXRoIGEgdHJhaWxpbmcgLycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBybSBzdWJtb2QvICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmYWlscyB3aGVuIGdpdmVuIGEgZmlsZSB3aXRoIGEgdHJhaWxpbmcgLycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBlbXB0eS8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gc3VjY2VlZHMgd2hlbiBnaXZlbiBhIGRpcmVjdG9yeSB3aXRoIGEgdHJhaWxpbmcgLycgJworCWdpdCBybSAtciBmcm90ei8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggZGlmZmVyZW50IEhFQUQgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCAtQyBzdWJtb2QgY2hlY2tvdXQgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZCBhY3R1YWwgJiYKKwlnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSAtLWNhY2hlZCBsZWF2ZXMgd29yayB0cmVlIG9mIHBvcHVsYXRlZCBzdWJtb2R1bGVzIGFuZCAuZ2l0bW9kdWxlcyBhbG9uZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBybSAtLWNhY2hlZCBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY2FjaGVkIGFjdHVhbCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSAtLWRyeS1ydW4gZG9lcyBub3QgdG91Y2ggdGhlIHN1Ym1vZHVsZSBvciAuZ2l0bW9kdWxlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBybSAtbiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZG9lcyBub3QgY29tcGxhaW4gd2hlbiBubyAuZ2l0bW9kdWxlcyBmaWxlIGlzIGZvdW5kJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IHJtIC5naXRtb2R1bGVzICYmCisJZ2l0IHJtIHN1Ym1vZCA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ib3RoX2RlbGV0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHdpbGwgZXJyb3Igb3V0IG9uIGEgbW9kaWZpZWQgLmdpdG1vZHVsZXMgZmlsZSB1bmxlc3Mgc3RhZ2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBmb28uYmFyIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBhY3R1YWwuZXJyICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS0gc3VibW9kICYmCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCWdpdCBybSBzdWJtb2QgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVyciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSB3aWxsIG5vdCBlcnJvciBvdXQgb24gLmdpdG1vZHVsZXMgZmlsZSB3aXRoIHplcm8gc3RhdCBkYXRhJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBpc3N1ZXMgYSB3YXJuaW5nIHdoZW4gc2VjdGlvbiBpcyBub3QgZm91bmQgaW4gLmdpdG1vZHVsZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1YiAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwllY2hvICJ3YXJuaW5nOiBDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9c3VibW9kIiA+ZXhwZWN0LmVyciAmJgorCWdpdCBybSBzdWJtb2QgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggbW9kaWZpY2F0aW9ucyBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZWNobyBYID5zdWJtb2QvZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZF9pbnNpZGUgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggdW50cmFja2VkIGZpbGVzIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwllY2hvIFggPnN1Ym1vZC91bnRyYWNrZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZF91bnRyYWNrZWQgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VibW9kdWxlIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgJiYKKwllY2hvIDEgPm5pdGZvbCAmJgorCWdpdCBhZGQgbml0Zm9sICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgbml0Zm9sIDEiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDIgbWFzdGVyICYmCisJZWNobyAyID5uaXRmb2wgJiYKKwlnaXQgYWRkIG5pdGZvbCAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIG5pdGZvbCAyIiAmJgorCWdpdCBjaGVja291dCAtYiBjb25mbGljdDEgbWFzdGVyICYmCisJZ2l0IC1DIHN1Ym1vZCBmZXRjaCAmJgorCWdpdCAtQyBzdWJtb2QgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCBhZGQgc3VibW9kICYmCisJZ2l0IGNvbW1pdCAtbSAic3VibW9kIDEiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0MiBtYXN0ZXIgJiYKKwlnaXQgLUMgc3VibW9kIGNoZWNrb3V0IGJyYW5jaDIgJiYKKwlnaXQgYWRkIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gInN1Ym1vZCAyIgorJworCitjYXQgPmV4cGVjdC5jb25mbGljdCA8PEVPRgorVVUgc3VibW9kCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVtb3ZlcyB3b3JrIHRyZWUgb2YgdW5tb2RpZmllZCBjb25mbGljdGVkIHN1Ym1vZHVsZScgJworCWdpdCBjaGVja291dCBjb25mbGljdDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QyICYmCisJZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBjb25mbGljdGVkIHBvcHVsYXRlZCBzdWJtb2R1bGUgd2l0aCBkaWZmZXJlbnQgSEVBRCBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0MSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCAtQyBzdWJtb2QgY2hlY2tvdXQgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29uZmxpY3QgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBjb25mbGljdGVkIHBvcHVsYXRlZCBzdWJtb2R1bGUgd2l0aCBtb2RpZmljYXRpb25zIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3QxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZWNobyBYID5zdWJtb2QvZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29uZmxpY3QgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBjb25mbGljdGVkIHBvcHVsYXRlZCBzdWJtb2R1bGUgd2l0aCB1bnRyYWNrZWQgZmlsZXMgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCBjaGVja291dCBjb25mbGljdDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwllY2hvIFggPnN1Ym1vZC91bnRyYWNrZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29uZmxpY3QgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBjb25mbGljdGVkIHBvcHVsYXRlZCBzdWJtb2R1bGUgd2l0aCBhIC5naXQgZGlyZWN0b3J5IGZhaWxzIGV2ZW4gd2hlbiBmb3JjZWQnICcKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3QxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJKAorCQljZCBzdWJtb2QgJiYKKwkJcm0gLmdpdCAmJgorCQljcCAtUiAuLi8uZ2l0L21vZHVsZXMvc3ViIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdDIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbmZsaWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29uZmxpY3QgYWN0dWFsICYmCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwlybSAtcmYgc3VibW9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgY29uZmxpY3RlZCB1bnBvcHVsYXRlZCBzdWJtb2R1bGUgc3VjY2VlZHMnICcKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3QxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdDIgJiYKKwlnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBvZiBhIHBvcHVsYXRlZCBzdWJtb2R1bGUgd2l0aCBhIC5naXQgZGlyZWN0b3J5IG1pZ3JhdGVzIGdpdCBkaXInICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJKAorCQljZCBzdWJtb2QgJiYKKwkJcm0gLmdpdCAmJgorCQljcCAtUiAuLi8uZ2l0L21vZHVsZXMvc3ViIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlICYmCisJCXJtIC1yIC4uLy5naXQvbW9kdWxlcy9zdWIKKwkpICYmCisJZ2l0IHJtIHN1Ym1vZCAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCBNaWdyYXRpbmcgb3V0cHV0LmVycgorJworCitjYXQgPmV4cGVjdC5kZWVwbW9kaWZpZWQgPDxFT0YKKyBNIHN1Ym1vZC9zdWJzdWJtb2QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdWJzdWJtb2R1bGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkoCisJCWNkIHN1Ym1vZCAmJgorCQloYXNoPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDE2MDAwMCAiJGhhc2giIHN1YnN1Ym1vZCAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsIC4uLy4gJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGggc3Vic3VibW9kICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBzdWJzdWJtb2R1bGUiICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1YnN1Ym1vZAorCSkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhZGRlZCBkZWVwIHN1Ym1vZHVsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVjdXJzaXZlbHkgcmVtb3ZlcyB3b3JrIHRyZWUgb2YgdW5tb2RpZmllZCBzdWJtb2R1bGVzJyAnCisJZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBwb3B1bGF0ZWQgbmVzdGVkIHN1Ym1vZHVsZSB3aXRoIGRpZmZlcmVudCBuZXN0ZWQgSEVBRCBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlICYmCisJZ2l0IC1DIHN1Ym1vZC9zdWJzdWJtb2QgY2hlY2tvdXQgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZF9pbnNpZGUgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBwb3B1bGF0ZWQgbmVzdGVkIHN1Ym1vZHVsZSB3aXRoIG5lc3RlZCBtb2RpZmljYXRpb25zIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgJiYKKwllY2hvIFggPnN1Ym1vZC9zdWJzdWJtb2QvZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZF9pbnNpZGUgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBwb3B1bGF0ZWQgbmVzdGVkIHN1Ym1vZHVsZSB3aXRoIG5lc3RlZCB1bnRyYWNrZWQgZmlsZXMgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAmJgorCWVjaG8gWCA+c3VibW9kL3N1YnN1Ym1vZC91bnRyYWNrZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdWJtb2QgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZF91bnRyYWNrZWQgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicm0gYWJzb3JicyBzdWJtb2R1bGUncyBuZXN0ZWQgLmdpdCBkaXJlY3RvcnkiICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgJiYKKwkoCisJCWNkIHN1Ym1vZC9zdWJzdWJtb2QgJiYKKwkJcm0gLmdpdCAmJgorCQltdiAuLi8uLi8uZ2l0L21vZHVsZXMvc3ViL21vZHVsZXMvc3ViIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCWdpdCBybSBzdWJtb2QgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VibW9kL3N1YnN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+YWN0dWFsICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwIE1pZ3JhdGluZyBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIG91dCBhIGNvbW1pdCBhZnRlciBzdWJtb2R1bGUgcmVtb3ZhbCBuZWVkcyBtYW51YWwgdXBkYXRlcycgJworCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSByZW1vdmFsIiBzdWJtb2QgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBjaGVja291dCAtcSBIRUFEXiAmJgorCWdpdCBjaGVja291dCAtcSBtYXN0ZXIgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJed2FybmluZzogdW5hYmxlIHRvIHJtZGlyICdcJydzdWJtb2QnXCcnOiIgYWN0dWFsICYmCisJZ2l0IHN0YXR1cyAtcyBzdWJtb2QgPmFjdHVhbCAmJgorCWVjaG8gIj8/IHN1Ym1vZC8iID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXJtIC1yZiBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGQvZiB3aGVuIGQgaGFzIGJlY29tZSBhIG5vbi1kaXJlY3RvcnknICcKKwlybSAtcmYgZCAmJgorCW1rZGlyIGQgJiYKKwk+ZC9mICYmCisJZ2l0IGFkZCBkICYmCisJcm0gLXJmIGQgJiYKKwk+ZCAmJgorCWdpdCBybSBkL2YgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpkL2YgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JtIG9mIGQvZiB3aGVuIGQgaGFzIGJlY29tZSBhIGRhbmdsaW5nIHN5bWxpbmsnICcKKwlybSAtcmYgZCAmJgorCW1rZGlyIGQgJiYKKwk+ZC9mICYmCisJZ2l0IGFkZCBkICYmCisJcm0gLXJmIGQgJiYKKwlsbiAtcyBub25leGlzdGVudCBkICYmCisJZ2l0IHJtIGQvZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOmQvZiAmJgorCXRlc3QgLWggZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgZmlsZSB3aGVuIGl0IGhhcyBiZWNvbWUgYSBkaXJlY3RvcnknICcKKwlybSAtcmYgZCAmJgorCT5kICYmCisJZ2l0IGFkZCBkICYmCisJcm0gLWYgZCAmJgorCW1rZGlyIGQgJiYKKwk+ZC9mICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZC9mCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JtIGFjcm9zcyBhIHN5bWxpbmtlZCBsZWFkaW5nIHBhdGggKG5vIGluZGV4KScgJworCXJtIC1yZiBkIGUgJiYKKwlta2RpciBlICYmCisJZWNobyBjb250ZW50ID5lL2YgJiYKKwlsbiAtcyBlIGQgJiYKKwlnaXQgYWRkIC1BIGUgZCAmJgorCWdpdCBjb21taXQgLW0gInN5bWxpbmsgZCB0byBlLCBlL2YgZXhpc3RzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBkL2YgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpkICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6ZS9mICYmCisJdGVzdCAtaCBkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZS9mCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgU1lNTElOS1MgJ3JtIGFjcm9zcyBhIHN5bWxpbmtlZCBsZWFkaW5nIHBhdGggKHcvIGluZGV4KScgJworCXJtIC1yZiBkIGUgJiYKKwlta2RpciBkICYmCisJZWNobyBjb250ZW50ID5kL2YgJiYKKwlnaXQgYWRkIC1BIGUgZCAmJgorCWdpdCBjb21taXQgLW0gImQvZiBleGlzdHMiICYmCisJbXYgZCBlICYmCisJbG4gLXMgZSBkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGQvZiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOmQvZiAmJgorCXRlc3QgLWggZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGUvZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgdGVzdGluZyBybSBtZXNzYWdlcycgJworCT5iYXIudHh0ICYmCisJPmZvby50eHQgJiYKKwlnaXQgYWRkIGJhci50eHQgZm9vLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlcyB3aXRoIGRpZmZlcmVudCBzdGFnZWQgY29udGVudCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlCisJZmlsZSBhbmQgdGhlIEhFQUQ6CisJICAgIGJhci50eHQKKwkgICAgZm9vLnR4dAorCSh1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkKKwlFT0YKKwllY2hvIGNvbnRlbnQxID5mb28udHh0ICYmCisJZWNobyBjb250ZW50MSA+YmFyLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmb28udHh0IGJhci50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlcyB3aXRoIGRpZmZlcmVudCBzdGFnZWQgY29udGVudCB3aXRob3V0IGhpbnRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGUKKwlmaWxlIGFuZCB0aGUgSEVBRDoKKwkgICAgYmFyLnR4dAorCSAgICBmb28udHh0CisJRU9GCisJZWNobyBjb250ZW50MiA+Zm9vLnR4dCAmJgorCWVjaG8gY29udGVudDIgPmJhci50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgYWR2aWNlLnJtaGludHM9ZmFsc2Ugcm0gZm9vLnR4dCBiYXIudHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZSB3aXRoIGxvY2FsIG1vZGlmaWNhdGlvbicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOgorCSAgICBmb28udHh0CisJKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKQorCUVPRgorCWdpdCBjb21taXQgLW0gInRlc3Rpbmcgcm0gMyIgJiYKKwllY2hvIGNvbnRlbnQzID5mb28udHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGZvby50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlIHdpdGggbG9jYWwgbW9kaWZpY2F0aW9uIHdpdGhvdXQgaGludHMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoKKwkgICAgYmFyLnR4dAorCUVPRgorCWVjaG8gY29udGVudDQgPmJhci50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgYWR2aWNlLnJtaGludHM9ZmFsc2Ugcm0gYmFyLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGUgd2l0aCBjaGFuZ2VzIGluIHRoZSBpbmRleCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6CisJICAgIGZvby50eHQKKwkodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpCisJRU9GCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gY29udGVudDUgPmZvby50eHQgJiYKKwlnaXQgYWRkIGZvby50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZm9vLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGUgd2l0aCBjaGFuZ2VzIGluIHRoZSBpbmRleCB3aXRob3V0IGhpbnRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoKKwkgICAgZm9vLnR4dAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBhZHZpY2Uucm1oaW50cz1mYWxzZSBybSBmb28udHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZXMgd2l0aCB0d28gZGlmZmVyZW50IGVycm9ycycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZQorCWZpbGUgYW5kIHRoZSBIRUFEOgorCSAgICBmb28xLnR4dAorCSh1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6CisJICAgIGJhcjEudHh0CisJKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKQorCUVPRgorCWVjaG8gY29udGVudCA+Zm9vMS50eHQgJiYKKwlnaXQgYWRkIGZvbzEudHh0ICYmCisJZWNobyBjb250ZW50NiA+Zm9vMS50eHQgJiYKKwllY2hvIGNvbnRlbnQ2ID5iYXIxLnR4dCAmJgorCWdpdCBhZGQgYmFyMS50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gYmFyMS50eHQgZm9vMS50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBlbXB0eSBzdHJpbmcgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLXJmICIiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzYwMS1ybS1wYXRoc3BlYy1maWxlLnNoIGIvdC90MzYwMS1ybS1wYXRoc3BlYy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkZTIxZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNjAxLXJtLXBhdGhzcGVjLWZpbGUuc2gKQEAgLTAsMCArMSw3OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JtIC0tcGF0aHNwZWMtZnJvbS1maWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gQSA+ZmlsZUEudCAmJgorCWVjaG8gQiA+ZmlsZUIudCAmJgorCWVjaG8gQyA+ZmlsZUMudCAmJgorCWVjaG8gRCA+ZmlsZUQudCAmJgorCWdpdCBhZGQgZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCAmJgorCWdpdCBjb21taXQgLW0gImZpbGVzIiAmJgorCisJZ2l0IHRhZyBjaGVja3BvaW50CisnCisKK3Jlc3RvcmVfY2hlY2twb2ludCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBjaGVja3BvaW50Cit9CisKK3ZlcmlmeV9leHBlY3QgKCkgeworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS11bnRyYWNrZWQtZmlsZXM9bm8gLS0gZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGVzdCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUQgIGZpbGVBLnQKKwlFT0YKKworCWVjaG8gZmlsZUEudCB8IGdpdCBybSAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZpbGUtbnVsJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRCAgZmlsZUEudAorCUQgIGZpbGVCLnQKKwlFT0YKKworCXByaW50ZiAiZmlsZUEudFwwZmlsZUIudFwwIiB8IGdpdCBybSAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC0tcGF0aHNwZWMtZmlsZS1udWwgJiYKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgdG91Y2hlcyB3aGF0IHdhcyBsaXN0ZWQnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlEICBmaWxlQi50CisJRCAgZmlsZUMudAorCUVPRgorCisJcHJpbnRmICJmaWxlQi50XG5maWxlQy50XG4iIHwgZ2l0IHJtIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGNvbmRpdGlvbnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKwllY2hvIGZpbGVBLnQgPmxpc3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tIGZpbGVBLnQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIC0tcGF0aHNwZWMtZmlsZS1udWwgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIiBlcnIgJiYKKworCT5lbXB0eV9saXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIC0tcGF0aHNwZWMtZnJvbS1maWxlPWVtcHR5X2xpc3QgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJObyBwYXRoc3BlYyB3YXMgZ2l2ZW4uIFdoaWNoIGZpbGVzIHNob3VsZCBJIHJlbW92ZT8iIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDAtYWRkLnNoIGIvdC90MzcwMC1hZGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODhiYzc5OTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAwLWFkZC5zaApAQCAtMCwwICsxLDQyNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBDYXJsIEQuIFdvcnRoCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgb2YgZ2l0IGFkZCwgaW5jbHVkaW5nIHRoZSAtLSBvcHRpb24uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0IHRoZSBmaWxlIG1vZGUgIiQxIiBvZiB0aGUgZmlsZSAiJDIiIGluIHRoZSBpbmRleC4KK3Rlc3RfbW9kZV9pbl9pbmRleCAoKSB7CisJY2FzZSAiJChnaXQgbHMtZmlsZXMgLXMgIiQyIikiIGluCisJIiQxICIqIgkkMiIpCisJCWVjaG8gcGFzcworCQk7OworCSopCisJCWVjaG8gZmFpbAorCQlnaXQgbHMtZmlsZXMgLXMgIiQyIgorCQlyZXR1cm4gMQorCQk7OworCWVzYWMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3Qgb2YgZ2l0IGFkZCcgXAorICAgICd0b3VjaCBmb28gJiYgZ2l0IGFkZCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdQb3N0LWNoZWNrIHRoYXQgZm9vIGlzIGluIHRoZSBpbmRleCcgXAorICAgICdnaXQgbHMtZmlsZXMgZm9vIHwgZ3JlcCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdUZXN0IHRoYXQgImdpdCBhZGQgLS0gLXEiIHdvcmtzJyBcCisgICAgJ3RvdWNoIC0tIC1xICYmIGdpdCBhZGQgLS0gLXEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdnaXQgYWRkOiBUZXN0IHRoYXQgZXhlY3V0YWJsZSBiaXQgaXMgbm90IHVzZWQgaWYgY29yZS5maWxlbW9kZT0wJyBcCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJIGVjaG8gZm9vID54Zm9vMSAmJgorCSBjaG1vZCA3NTUgeGZvbzEgJiYKKwkgZ2l0IGFkZCB4Zm9vMSAmJgorCSB0ZXN0X21vZGVfaW5faW5kZXggMTAwNjQ0IHhmb28xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKKwlybSAtZiB4Zm9vMSAmJgorCXRlc3RfbG5fc19hZGQgZm9vIHhmb28xICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEyMDAwMCB4Zm9vMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkLi4uJyBcCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJIGVjaG8gZm9vID54Zm9vMiAmJgorCSBjaG1vZCA3NTUgeGZvbzIgJiYKKwkgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB4Zm9vMiAmJgorCSB0ZXN0X21vZGVfaW5faW5kZXggMTAwNjQ0IHhmb28yJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKKwlybSAtZiB4Zm9vMiAmJgorCXRlc3RfbG5fc19hZGQgZm9vIHhmb28yICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEyMDAwMCB4Zm9vMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkLi4uJyBcCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJIHRlc3RfbG5fc19hZGQgeGZvbzIgeGZvbzMgJiYJIyBydW5zIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQKKwkgdGVzdF9tb2RlX2luX2luZGV4IDEyMDAwMCB4Zm9vMycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGlnbm9yZSB0ZXN0IHNldHVwJyAnCisJZWNobyAiKi5pZyIgPi5naXRpZ25vcmUgJiYKKwlta2RpciBjLmlmIGQuaWcgJiYKKwk+YS5pZyAmJiA+Yi5pZiAmJgorCT5jLmlmL2MuaWYgJiYgPmMuaWYvYy5pZyAmJgorCT5kLmlnL2QuaWYgJiYgPmQuaWcvZC5pZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0aWdub3JlIGlzIGhvbm9yZWQnICcKKwlnaXQgYWRkIC4gJiYKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIG91dCB3aGVuIGF0dGVtcHRpbmcgdG8gYWRkIGlnbm9yZWQgb25lcyB3aXRob3V0IC1mJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBhLj8/ICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAiXFwuaWciKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBvdXQgd2hlbiBhdHRlbXB0aW5nIHRvIGFkZCBpZ25vcmVkIG9uZXMgd2l0aG91dCAtZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgZC4/PyAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IHdoZW4gYXR0ZW1wdGluZyB0byBhZGQgaWdub3JlZCBvbmVzIGJ1dCBhZGQgb3RoZXJzJyAnCisJdG91Y2ggYS5pZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgYS4/PyAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIikgJiYKKwkoZ2l0IGxzLWZpbGVzIHwgZ3JlcCBhLmlmKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgaWdub3JlZCBvbmVzIHdpdGggLWYnICcKKwlnaXQgYWRkIC1mIGEuPz8gJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGEuaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGlnbm9yZWQgb25lcyB3aXRoIC1mJyAnCisJZ2l0IGFkZCAtZiBkLj8/LyogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGQuaWcvZC5pZiBkLmlnL2QuaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGlnbm9yZWQgb25lcyB3aXRoIC1mJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgLWYgZC4/PyAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZC5pZy9kLmlmIGQuaWcvZC5pZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0aWdub3JlIHdpdGggc3ViZGlyZWN0b3J5JyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJbWtkaXIgLXAgc3ViL2RpciAmJgorCWVjaG8gIiFkaXIvYS4qIiA+c3ViLy5naXRpZ25vcmUgJiYKKwk+c3ViL2EuaWcgJiYKKwk+c3ViL2Rpci9hLmlnICYmCisJZ2l0IGFkZCBzdWIvZGlyICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzdWIvZGlyL2EuaWcgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCWdpdCBhZGQgLgorCSkgJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIHN1Yi9kaXIvYS5pZworJworCitta2RpciAxIDEvMiAxLzMKK3RvdWNoIDEvMi9hIDEvMy9iIDEvMi9jCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb3JyZWN0IHByZWZpeCBkZXRlY3Rpb24nICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCAxLzIvYSAxLzMvYiAxLzIvYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHdpdGggZmlsZW1vZGU9MCwgc3ltbGlua3M9MCwgYW5kIHVubWVyZ2VkIGVudHJpZXMnICcKKwlmb3IgcyBpbiAxIDIgMworCWRvCisJCWVjaG8gJHMgPiBzdGFnZSRzCisJCWVjaG8gIjEwMDc1NSAkKGdpdCBoYXNoLW9iamVjdCAtdyBzdGFnZSRzKSAkcwlmaWxlIgorCQllY2hvICIxMjAwMDAgJChwcmludGYgJHMgfCBnaXQgaGFzaC1vYmplY3QgLXcgLXQgYmxvYiAtLXN0ZGluKSAkcwlzeW1saW5rIgorCWRvbmUgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWdpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIDAgJiYKKwllY2hvIG5ldyA+IGZpbGUgJiYKKwllY2hvIG5ldyA+IHN5bWxpbmsgJiYKKwlnaXQgYWRkIGZpbGUgc3ltbGluayAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIHwgZ3JlcCAiXjEwMDc1NSAuKiAwCWZpbGUkIiAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIHwgZ3JlcCAiXjEyMDAwMCAuKiAwCXN5bWxpbmskIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHdpdGggZmlsZW1vZGU9MCwgc3ltbGlua3M9MCBwcmVmZXJzIHN0YWdlIDIgb3ZlciBzdGFnZSAxJyAnCisJZ2l0IHJtIC0tY2FjaGVkIC1mIGZpbGUgc3ltbGluayAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICQoZ2l0IGhhc2gtb2JqZWN0IC13IHN0YWdlMSkgMQlmaWxlIiAmJgorCQllY2hvICIxMDA3NTUgJChnaXQgaGFzaC1vYmplY3QgLXcgc3RhZ2UyKSAyCWZpbGUiICYmCisJCWVjaG8gIjEwMDY0NCAkKHByaW50ZiAxIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC10IGJsb2IgLS1zdGRpbikgMQlzeW1saW5rIiAmJgorCQllY2hvICIxMjAwMDAgJChwcmludGYgMiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtdCBibG9iIC0tc3RkaW4pIDIJc3ltbGluayIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgorCWdpdCBjb25maWcgY29yZS5zeW1saW5rcyAwICYmCisJZWNobyBuZXcgPiBmaWxlICYmCisJZWNobyBuZXcgPiBzeW1saW5rICYmCisJZ2l0IGFkZCBmaWxlIHN5bWxpbmsgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgIl4xMDA3NTUgLiogMAlmaWxlJCIgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgIl4xMjAwMDAgLiogMAlzeW1saW5rJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLXJlZnJlc2gnICcKKwk+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLWEgLW0gImNvbW1pdCBhbGwiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1pbmRleCBIRUFEIC0tIGZvbykiICYmCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJY2FzZSAiJChnaXQgZGlmZi1pbmRleCBIRUFEIC0tIGZvbykiIGluCisJOjEwMDY0NCIgIioiTQlmb28iKSBlY2hvIHBhc3M7OworCSopIGVjaG8gZmFpbDsgKGV4aXQgMSk7OworCWVzYWMgJiYKKwlnaXQgYWRkIC0tcmVmcmVzaCAtLSBmb28gJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWluZGV4IEhFQUQgLS0gZm9vKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLXJlZnJlc2ggd2l0aCBwYXRoc3BlYycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvID5mb28gJiYgZWNobyA+YmFyICYmIGVjaG8gPmJheiAmJgorCWdpdCBhZGQgZm9vIGJhciBiYXogJiYgSD0kKGdpdCByZXYtcGFyc2UgOmZvbykgJiYgZ2l0IHJtIC1mIGZvbyAmJgorCWVjaG8gIjEwMDY0NCAkSCAzCWZvbyIgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC02MCBiYXIgYmF6ICYmCisJZ2l0IGFkZCAtLXJlZnJlc2ggYmFyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJISBncmVwIGJhciBhY3R1YWwmJgorCWdyZXAgYmF6IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2dpdCBhZGQgc2hvdWxkIGZhaWwgYXRvbWljYWxseSB1cG9uIGFuIHVucmVhZGFibGUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKKwkhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKQorJworCitybSAtZiBmb28yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnZ2l0IGFkZCAtLWlnbm9yZS1lcnJvcnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAtLWlnbm9yZS1lcnJvcnMgLiAmJgorCWdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xCisnCisKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdnaXQgYWRkIChhZGQuaWdub3JlLWVycm9ycyknICcKKwlnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAuICYmCisJZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEKKycKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdnaXQgYWRkIChhZGQuaWdub3JlLWVycm9ycyA9IGZhbHNlKScgJworCWdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKKwkhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKQorJworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJy0tbm8taWdub3JlLWVycm9ycyBvdmVycmlkZXMgY29uZmlnJyAnCisgICAgICAgZ2l0IGNvbmZpZyBhZGQuaWdub3JlLWVycm9ycyAxICYmCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCAmJgorICAgICAgIGRhdGUgPmZvbzEgJiYKKyAgICAgICBkYXRlID5mb28yICYmCisgICAgICAgY2htb2QgMCBmb28yICYmCisgICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXZlcmJvc2UgLS1uby1pZ25vcmUtZXJyb3JzIC4gJiYKKyAgICAgICAhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKSAmJgorICAgICAgIGdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMAorJworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEJTTEFTSFBTUEVDICJnaXQgYWRkICdmb1xcW291XFxdYmFyJyBpZ25vcmVzIGZvb2JhciIgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0b3VjaCBmb1xbb3VcXWJhciBmb29iYXIgJiYKKwlnaXQgYWRkICdcJydmb1xbb3VcXWJhcidcJycgJiYKKwlnaXQgbHMtZmlsZXMgZm9cW291XF1iYXIgfCBmZ3JlcCBmb1xbb3VcXWJhciAmJgorCSEgKCBnaXQgbHMtZmlsZXMgZm9vYmFyIHwgZ3JlcCBmb29iYXIgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHRvIHJlc29sdmUgY29uZmxpY3RzIG9uIG90aGVyd2lzZSBpZ25vcmVkIHBhdGgnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJSD0kKGdpdCByZXYtcGFyc2UgOjEvMi9hKSAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRIIDEJdHJhY2stdGhpcyIgJiYKKwkJZWNobyAiMTAwNjQ0ICRIIDMJdHJhY2stdGhpcyIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwllY2hvIHRyYWNrLXRoaXMgPj4uZ2l0aWdub3JlICYmCisJZWNobyByZXNvbHZlZCA+dHJhY2stdGhpcyAmJgorCWdpdCBhZGQgdHJhY2stdGhpcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIG5vbi1leGlzdGVudCIgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIG5vbi1leGlzdGVudCAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIm5vbi1leGlzdGVudCIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLUEgb24gZW1wdHkgcmVwbyBkb2VzIG5vdCBlcnJvciBvdXQnICcKKwlybSAtZnIgZW1wdHkgJiYKKwlnaXQgaW5pdCBlbXB0eSAmJgorCSgKKwkJY2QgZW1wdHkgJiYKKwkJZ2l0IGFkZCAtQSAuICYmCisJCWdpdCBhZGQgLUEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgYWRkIC4iIGluIGVtcHR5IHJlcG8nICcKKwlybSAtZnIgZW1wdHkgJiYKKwlnaXQgaW5pdCBlbXB0eSAmJgorCSgKKwkJY2QgZW1wdHkgJiYKKwkJZ2l0IGFkZCAuCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBvbiBhIHJlcG9zaXRvcnkgd2l0aCBubyBjb21taXRzJyAnCisJcm0gLWZyIGVtcHR5ICYmCisJZ2l0IGluaXQgZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGVtcHR5ID5hY3R1YWwgMj4mMSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWVycm9yOiAnIidlbXB0eS8nIicgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dAorCWZhdGFsOiBhZGRpbmcgZmlsZXMgZmFpbGVkCisJRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gb2YgZXhpc3RpbmcgY2hhbmdlZCBmaWxlJyAiCisJZWNobyBuZXcgPj50cmFjay10aGlzICYmCisJZ2l0IGFkZCAtLWRyeS1ydW4gdHJhY2stdGhpcyA+YWN0dWFsIDI+JjEgJiYKKwllY2hvIFwiYWRkICd0cmFjay10aGlzJ1wiIHwgdGVzdF9jbXAgLSBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gb2Ygbm9uLWV4aXN0aW5nIGZpbGUnICIKKwllY2hvIGlnbm9yZWQtZmlsZSA+Pi5naXRpZ25vcmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tZHJ5LXJ1biB0cmFjay10aGlzIGlnbm9yZWQtZmlsZSA+YWN0dWFsIDI+JjEKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gb2YgYW4gZXhpc3RpbmcgZmlsZSBvdXRwdXQnICIKKwllY2hvIFwiZmF0YWw6IHBhdGhzcGVjICdpZ25vcmVkLWZpbGUnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzXCIgPmV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisiCisKK2NhdCA+ZXhwZWN0LmVyciA8PFxFT0YKK1RoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczoKK2lnbm9yZWQtZmlsZQoraGludDogVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS4KK2hpbnQ6IFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieSBydW5uaW5nCitoaW50OiAiZ2l0IGNvbmZpZyBhZHZpY2UuYWRkSWdub3JlZEZpbGUgZmFsc2UiCitFT0YKK2NhdCA+ZXhwZWN0Lm91dCA8PFxFT0YKK2FkZCAndHJhY2stdGhpcycKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0tZHJ5LXJ1biAtLWlnbm9yZS1taXNzaW5nIG9mIG5vbi1leGlzdGluZyBmaWxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLWRyeS1ydW4gLS1pZ25vcmUtbWlzc2luZyB0cmFjay10aGlzIGlnbm9yZWQtZmlsZSA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gLS1pZ25vcmUtbWlzc2luZyBvZiBub24tZXhpc3RpbmcgZmlsZSBvdXRwdXQnICcKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm91dCBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIGVtcHR5IHN0cmluZyBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWNobW9kPVsrLV14IHN0YWdlcyBjb3JyZWN0bHknICcKKwlybSAtZiBmb28xICYmCisJZWNobyBmb28gPmZvbzEgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggZm9vMSAmJgorCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA3NTUgZm9vMSAmJgorCWdpdCBhZGQgLS1jaG1vZD0teCBmb28xICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEwMDY0NCBmb28xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNZTUxJTktTICdnaXQgYWRkIC0tY2htb2Q9K3ggd2l0aCBzeW1saW5rcycgJworCWdpdCBjb25maWcgY29yZS5maWxlbW9kZSAxICYmCisJZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIDEgJiYKKwlybSAtZiBmb28yICYmCisJZWNobyBmb28gPmZvbzIgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggZm9vMiAmJgorCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA3NTUgZm9vMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0tY2htb2Q9WystXXggY2hhbmdlcyBpbmRleCB3aXRoIGFscmVhZHkgYWRkZWQgZmlsZScgJworCXJtIC1mIGZvbzMgeGZvbzMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPmZvbzMgJiYKKwlnaXQgYWRkIGZvbzMgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggZm9vMyAmJgorCXRlc3RfbW9kZV9pbl9pbmRleCAxMDA3NTUgZm9vMyAmJgorCWVjaG8gZm9vID54Zm9vMyAmJgorCWNobW9kIDc1NSB4Zm9vMyAmJgorCWdpdCBhZGQgeGZvbzMgJiYKKwlnaXQgYWRkIC0tY2htb2Q9LXggeGZvbzMgJiYKKwl0ZXN0X21vZGVfaW5faW5kZXggMTAwNjQ0IHhmb28zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdnaXQgYWRkIC0tY2htb2Q9WystXXggZG9lcyBub3QgY2hhbmdlIHRoZSB3b3JraW5nIHRyZWUnICcKKwllY2hvIGZvbyA+Zm9vNCAmJgorCWdpdCBhZGQgZm9vNCAmJgorCWdpdCBhZGQgLS1jaG1vZD0reCBmb280ICYmCisJISB0ZXN0IC14IGZvbzQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZSBzdGF0dXMgY2hhbmdlIGlmIG5vIHBhdGhzcGVjIGlzIGdpdmVuJyAnCisJPmZvbzUgJiYKKwk+Zm9vNiAmJgorCWdpdCBhZGQgZm9vNSBmb282ICYmCisJZ2l0IGFkZCAtLWNobW9kPSt4ICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEwMDY0NCBmb281ICYmCisJdGVzdF9tb2RlX2luX2luZGV4IDEwMDY0NCBmb282CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUgc3RhdHVzIGNoYW5nZSBpZiBubyBwYXRoc3BlYyBpcyBnaXZlbiBpbiBzdWJkaXInICcKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQk+c3ViLWZvbzEgJiYKKwkJPnN1Yi1mb28yICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgYWRkIC0tY2htb2Q9K3ggJiYKKwkJdGVzdF9tb2RlX2luX2luZGV4IDEwMDY0NCBzdWItZm9vMSAmJgorCQl0ZXN0X21vZGVfaW5faW5kZXggMTAwNjQ0IHN1Yi1mb28yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgc3RhdHVzZXMgY2hhbmdlZCBpbiBmb2xkZXIgaWYgLiBpcyBnaXZlbicgJworCXJtIC1mciBlbXB0eSAmJgorCWdpdCBhZGQgLS1jaG1vZD0reCAuICYmCisJdGVzdCAkKGdpdCBscy1maWxlcyAtLXN0YWdlIHwgZ3JlcCBeMTAwNjQ0IHwgd2MgLWwpIC1lcSAwICYmCisJZ2l0IGFkZCAtLWNobW9kPS14IC4gJiYKKwl0ZXN0ICQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgfCBncmVwIF4xMDA3NTUgfCB3YyAtbCkgLWVxIDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDQVNFX0lOU0VOU0lUSVZFX0ZTICdwYXRoIGlzIGNhc2UtaW5zZW5zaXRpdmUnICcKKwlwYXRoPSIkKHB3ZCkvQkxVQiIgJiYKKwl0b3VjaCAiJHBhdGgiICYmCisJZG93bmNhc2VkPSIkKGVjaG8gIiRwYXRoIiB8IHRyIEEtWiBhLXopIiAmJgorCWdpdCBhZGQgIiRkb3duY2FzZWQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2ggYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YmFlNmU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSw4MTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhZGQgLWkgYmFzaWMgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGFkZCAtaSB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworZGlmZl9jbXAgKCkgeworCWZvciB4CisJZG8KKwkJc2VkICAtZSAnL15pbmRleC9zL1swLTlhLWZdKlsxLTlhLWZdWzAtOWEtZl0qXC5cLi8xMjM0NTY3Li4vJyBcCisJCSAgICAgLWUgJy9eaW5kZXgvcy9cLlwuWzAtOWEtZl0qWzEtOWEtZl1bMC05YS1mXSovLi45YWJjZGVmLycgXAorCQkgICAgIC1lICcvXmluZGV4L3MvIDAwKlwuXC4vIDAwMDAwMDAuLi8nIFwKKwkJICAgICAtZSAnL15pbmRleC9zL1wuXC4wMCokLy4uMDAwMDAwMC8nIFwKKwkJICAgICAtZSAnL15pbmRleC9zL1wuXC4wMCogLy4uMDAwMDAwMCAvJyBcCisJCSAgICAgIiR4IiA+IiR4LmZpbHRlcmVkIgorCWRvbmUKKwl0ZXN0X2NtcCAiJDEuZmlsdGVyZWQiICIkMi5maWx0ZXJlZCIKK30KKworIyBUaGlzIGZ1bmN0aW9uIHVzZXMgYSB0cmljayB0byBtYW5pcHVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBhZGQgdG8gdXNlIGNvbG9yOgorIyB0aGUgYHdhbnRfY29sb3IoKWAgZnVuY3Rpb24gc3BlY2lhbC1jYXNlcyB0aGUgc2l0dWF0aW9uIHdoZXJlIGEgcGFnZXIgd2FzCisjIHNwYXduZWQgYW5kIEdpdCBub3cgd2FudHMgdG8gb3V0cHV0IGNvbG9yZWQgdGV4dDogdG8gZGV0ZWN0IHRoYXQgc2l0dWF0aW9uLAorIyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9QQUdFUl9JTl9VU0VgIGlzIHNldC4gSG93ZXZlciwgY29sb3IgaXMKKyMgc3VwcHJlc3NlZCBkZXNwaXRlIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgdGhlIGBURVJNYCB2YXJpYWJsZQorIyBpbmRpY2F0ZXMgYSBkdW1iIHRlcm1pbmFsLCBzbyB3ZSBzZXQgdGhhdCB2YXJpYWJsZSwgdG9vLgorCitmb3JjZV9jb2xvciAoKSB7CisJZW52IEdJVF9QQUdFUl9JTl9VU0U9dHJ1ZSBURVJNPXZ0MTAwICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgKGluaXRpYWwpJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBtb3JlID4+ZmlsZSAmJgorCWVjaG8gbGluZXMgPj5maWxlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd29ya3MgKGluaXRpYWwpJyAnCisJZ2l0IGFkZCAtaSA8L2Rldi9udWxsID5vdXRwdXQgJiYKKwlncmVwICIrMS8tMCAqKzIvLTAgZmlsZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdGVkJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi5kOTVmM2FkCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL2ZpbGUKKwlAQCAtMCwwICsxIEBACisJK2NvbnRlbnQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiB3b3JrcyAoaW5pdGlhbCknICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGQgMSB8IGdpdCBhZGQgLWkgPm91dHB1dCAmJgorCXNlZCAtbmUgIi9uZXcgZmlsZS8sL2NvbnRlbnQvcCIgPG91dHB1dCA+ZGlmZiAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGRpZmYKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCB3b3JrcyAoaW5pdGlhbCknICcKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHIgMSB8IGdpdCBhZGQgLWkgJiYKKwlnaXQgbHMtZmlsZXMgPm91dHB1dCAmJgorCSEgZ3JlcCAuIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdW50cmFja2VkIChtdWx0aXBsZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAmJiBybSBbMS05XSIgJiYKKwl0b3VjaCAkKHRlc3Rfc2VxIDkpICYmCisJdGVzdF93cml0ZV9saW5lcyBhICIyLTUgOC0iIHwgZ2l0IGFkZCAtaSAtLSBbMS05XSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMiAzIDQgNSA4IDkgPmV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIFsxLTldID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgKGNvbW1pdCknICcKKwllY2hvIGJhc2VsaW5lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBjb21taXQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBtb3JlID4+ZmlsZSAmJgorCWVjaG8gbGluZXMgPj5maWxlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd29ya3MgKGNvbW1pdCknICcKKwlnaXQgYWRkIC1pIDwvZGV2L251bGwgPm91dHB1dCAmJgorCWdyZXAgIisxLy0wICorMi8tMCBmaWxlIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlpbmRleCAxODBiNDdjLi5iNmYyYzA4IDEwMDY0NAorCS0tLSBhL2ZpbGUKKwkrKysgYi9maWxlCisJQEAgLTEgKzEsMiBAQAorCSBiYXNlbGluZQorCStjb250ZW50CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgd29ya3MgKGNvbW1pdCknICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGQgMSB8IGdpdCBhZGQgLWkgPm91dHB1dCAmJgorCXNlZCAtbmUgIi9eaW5kZXgvLC9jb250ZW50L3AiIDxvdXRwdXQgPmRpZmYgJiYKKwlkaWZmX2NtcCBleHBlY3RlZCBkaWZmCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgd29ya3MgKGNvbW1pdCknICcKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHIgMSB8IGdpdCBhZGQgLWkgJiYKKwlnaXQgYWRkIC1pIDwvZGV2L251bGwgPm91dHB1dCAmJgorCWdyZXAgInVuY2hhbmdlZCAqKzMvLTAgZmlsZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdGVkJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2R1bW15IGVkaXQgd29ya3MnICcKKwl0ZXN0X3NldF9lZGl0b3IgOiAmJgorCXRlc3Rfd3JpdGVfbGluZXMgZSBhIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmID4gZGlmZiAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcGF0Y2gnICcKKwljYXQgPnBhdGNoIDw8LVxFT0YKKwlAQCAtMSwxICsxLDQgQEAKKwkgdGhpcworCStwYXRjaAorCS1kb2VzIG5vdAorCSBhcHBseQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmYWtlIGVkaXRvcicgJworCXdyaXRlX3NjcmlwdCAiZmFrZV9lZGl0b3Iuc2giIDw8LVxFT0YgJiYKKwltdiAtZiAiJDEiIG9sZHBhdGNoICYmCisJbXYgLWYgcGF0Y2ggIiQxIgorCUVPRgorCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2VfZWRpdG9yLnNoIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWQgZWRpdCByZWplY3RlZCcgJworCWdpdCByZXNldCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgZSBuIGQgfCBnaXQgYWRkIC1wID5vdXRwdXQgJiYKKwlncmVwICJodW5rIGRvZXMgbm90IGFwcGx5IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcGF0Y2gnICcKKwljYXQgPnBhdGNoIDw8LVxFT0YKKwl0aGlzIHBhdGNoCisJaXMgZ2FyYmFnZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYXJiYWdlIGVkaXQgcmVqZWN0ZWQnICcKKwlnaXQgcmVzZXQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGUgbiBkIHwgZ2l0IGFkZCAtcCA+b3V0cHV0ICYmCisJZ3JlcCAiaHVuayBkb2VzIG5vdCBhcHBseSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHBhdGNoJyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GCisJQEAgLTEsMCArMSwwIEBACisJIGJhc2VsaW5lCisJK2NvbnRlbnQKKwkrbmV3Y29udGVudAorCStsaW5lcworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCWRpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorCWluZGV4IGI1ZGQ2YzkuLmY5MTBhZTkgMTAwNjQ0CisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSw0ICsxLDQgQEAKKwkgYmFzZWxpbmUKKwkgY29udGVudAorCS1uZXdjb250ZW50CisJK21vcmUKKwkgbGluZXMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhbCBlZGl0IHdvcmtzJyAnCisJdGVzdF93cml0ZV9saW5lcyBlIG4gZCB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiA+b3V0cHV0ICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZpbGUnICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgIiIgYiAiIiBjID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF93cml0ZV9saW5lcyBhICIiIGQgIiIgYyA+ZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwYXRjaCcgJworCVNQPSIgIiAmJgorCU5VTEw9IiIgJiYKKwljYXQgPnBhdGNoIDw8LUVPRgorCUBAIC0xLDQgKzEsNCBAQAorCSBhCisJJE5VTEwKKwktYgorCStmCisJJFNQCisJYworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJaW5kZXggYjVkZDZjOS4uZjkxMGFlOSAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xLDUgKzEsNSBAQAorCSBhCisJJFNQCisJLWYKKwkrZAorCSRTUAorCSBjCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXQgY2FuIHN0cmlwIHNwYWNlcyBmcm9tIGVtcHR5IGNvbnRleHQgbGluZXMnICcKKwl0ZXN0X3dyaXRlX2xpbmVzIGUgbiBxIHwgZ2l0IGFkZCAtcCAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCWRpZmZfY21wIGV4cGVjdGVkIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwIGZpbGVzIHNpbWlsYXJseSBhcyBjb21taXQgLWEnICcKKwlnaXQgcmVzZXQgJiYKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwllY2hvIHkgfCBnaXQgYWRkIC1wIGZpbGUgJiYKKwlnaXQgZGlmZiA+b3V0cHV0ICYmCisJZ2l0IHJlc2V0ICYmCisJZ2l0IGNvbW1pdCAtYW0gY29tbWl0ICYmCisJZ2l0IGRpZmYgPmV4cGVjdGVkICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgb3V0cHV0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworcm0gLWYgLmdpdGlnbm9yZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdwYXRjaCBkb2VzIG5vdCBhZmZlY3QgbW9kZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAiblxcbnlcXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBzaG93IDpmaWxlIHwgZ3JlcCBjb250ZW50ICYmCisJZ2l0IGRpZmYgZmlsZSB8IGdyZXAgIm5ldyBtb2RlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzdGFnZSBtb2RlIGJ1dCBub3QgaHVuaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAieVxcbm5cXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIGZpbGUgfCBncmVwICJuZXcgbW9kZSIgJiYKKwlnaXQgZGlmZiAgICAgICAgICBmaWxlIHwgZ3JlcCAiK2NvbnRlbnQiCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc3RhZ2UgbW9kZSBhbmQgaHVuaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAieVxcbnlcXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIGZpbGUgfCBncmVwICJuZXcgbW9kZSIgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCBmaWxlIHwgZ3JlcCAiK2NvbnRlbnQiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBmaWxlKSIKKycKKworIyBlbmQgb2YgdGVzdHMgZGlzYWJsZWQgd2hlbiBmaWxlbW9kZSBpcyBub3QgdXNhYmxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZlcmVudCBwcm9tcHRzIGZvciBtb2RlIGNoYW5nZS9kZWxldGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5maWxlICYmCisJPmRlbGV0ZWQgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggZmlsZSBkZWxldGVkICYmCisJZWNobyBjaGFuZ2VkID5maWxlICYmCisJcm0gZGVsZXRlZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiBuIG4gfAorCWdpdCAtYyBjb3JlLmZpbGVtb2RlPXRydWUgYWRkIC1wID5hY3R1YWwgJiYKKwlzZWQgLW4gInMvXlwoKFswLTkvXSopIFN0YWdlIC4qP1wpLiovXDEvcCIgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJKDEvMSkgU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCw/XT8KKwkoMS8yKSBTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkLGosSixnLC8sP10/CisJKDIvMikgU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsSyxnLC8sZSw/XT8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgbWVzc2FnZSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFkZCAtcCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIk5vIGNoYW5nZXMiIGVyciAmJgorCXByaW50ZiAiXFwwMTIzIiA+YmluYXJ5ICYmCisJZ2l0IGFkZCBiaW5hcnkgJiYKKwlwcmludGYgIlxcMGFiYyIgPmJpbmFyeSAmJgorCWdpdCBhZGQgLXAgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYWdhaW4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jaG1vZCAreCBmaWxlICYmCisJZWNobyBjb250ZW50ID4+ZmlsZQorJworCisjIFdyaXRlIHRoZSBwYXRjaCBmaWxlIHdpdGggYSBuZXcgbGluZSBhdCB0aGUgdG9wIGFuZCBib3R0b20KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHBhdGNoJyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GCisJaW5kZXggMTgwYjQ3Yy4uYjZmMmMwOCAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xLDIgKzEsNCBAQAorCStmaXJzdGxpbmUKKwkgYmFzZWxpbmUKKwkgY29udGVudAorCStsYXN0bGluZQorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCUVPRgorJworCisjIEV4cGVjdGVkIG91dHB1dCwgZGlmZiBpcyBzaW1pbGFyIHRvIHRoZSBwYXRjaCBidXQgdy8gZGlmZiBhdCB0aGUgdG9wCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCcgJworCWVjaG8gZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlID5leHBlY3RlZCAmJgorCWNhdCBwYXRjaCB8c2VkICIvXmluZGV4L3MvIDEwMDY0NC8gMTAwNzU1LyIgPj5leHBlY3RlZCAmJgorCWNhdCA+ZXhwZWN0ZWQtb3V0cHV0IDw8LVxFT0YKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xLDIgKzEsNCBAQAorCStmaXJzdGxpbmUKKwkgYmFzZWxpbmUKKwkgY29udGVudAorCStsYXN0bGluZQorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCUBAIC0xLDIgKzEsMyBAQAorCStmaXJzdGxpbmUKKwkgYmFzZWxpbmUKKwkgY29udGVudAorCUBAIC0xLDIgKzIsMyBAQAorCSBiYXNlbGluZQorCSBjb250ZW50CisJK2xhc3RsaW5lCisJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJRU9GCisnCisKKyMgVGVzdCBzcGxpdHRpbmcgdGhlIGZpcnN0IHBhdGNoLCB0aGVuIGFkZGluZyBib3RoCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnYWRkIGZpcnN0IGxpbmUgd29ya3MnICcKKwlnaXQgY29tbWl0IC1hbSAiY2xlYXIgbG9jYWwgY2hhbmdlcyIgJiYKKwlnaXQgYXBwbHkgcGF0Y2ggJiYKKwlwcmludGYgIiVzXG4iIHMgeSB5IHwgZ2l0IGFkZCAtcCBmaWxlIDI+ZXJyb3IgfAorCQlzZWQgLW4gLWUgInMvXihbMS0yXVwvWzEtMl0pIFN0YWdlIHRoaXMgaHVua1teQF0qXChAQCAuKlwpL1wxLyIgXAorCQkgICAgICAgLWUgIi9eWy0rQCBcXFxcXSIvcCAgPm91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgZGlmZiAmJgorCXRlc3RfY21wIGV4cGVjdGVkLW91dHB1dCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlkaWZmIC0tZ2l0IGEvbm9uLWVtcHR5IGIvbm9uLWVtcHR5CisJZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggZDk1ZjNhZC4uMDAwMDAwMAorCS0tLSBhL25vbi1lbXB0eQorCSsrKyAvZGV2L251bGwKKwlAQCAtMSArMCwwIEBACisJLWNvbnRlbnQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgYSBub24tZW1wdHkgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPm5vbi1lbXB0eSAmJgorCWdpdCBhZGQgbm9uLWVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSBub24tZW1wdHkgJiYKKwlybSBub24tZW1wdHkgJiYKKwllY2hvIHkgfCBnaXQgYWRkIC1wIG5vbi1lbXB0eSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCWRpZmYgLS1naXQgYS9lbXB0eSBiL2VtcHR5CisJZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhbiBlbXB0eSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT4gZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSBlbXB0eSAmJgorCXJtIGVtcHR5ICYmCisJZWNobyB5IHwgZ2l0IGFkZCAtcCBlbXB0eSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBodW5rIHNldHVwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMTAgMjAgMzAgNDAgNTAgNjAgPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRlc3QgJiYKKworCXRlc3Rfd3JpdGVfbGluZXMgMTAgMTUgMjAgMjEgMjIgMjMgMjQgMzAgNDAgNTAgNjAgPnRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ290byBodW5rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQiICYmCisJdHIgXyAiICIgPmV4cGVjdCA8PC1FT0YgJiYKKwkoMi8yKSBTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCxLLGcsLyxlLD9dPyArIDE6ICAtMSwyICsxLDMgICAgICAgICAgKzE1CisJXyAyOiAgLTIsNCArMyw4ICAgICAgICAgICsyMQorCWdvIHRvIHdoaWNoIGh1bms/IEBAIC0xLDIgKzEsMyBAQAorCV8xMAorCSsxNQorCV8yMAorCSgxLzIpIFN0YWdlIHRoaXMgaHVuayBbeSxuLHEsYSxkLGosSixnLC8sZSw/XT9fCisJRU9GCisJdGVzdF93cml0ZV9saW5lcyBzIHkgZyAxIHwgZ2l0IGFkZCAtcCA+YWN0dWFsICYmCisJdGFpbCAtbiA3IDxhY3R1YWwgPmFjdHVhbC50cmltbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC50cmltbWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hdmlnYXRlIHRvIGh1bmsgdmlhIHJlZ2V4JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQiICYmCisJdHIgXyAiICIgPmV4cGVjdCA8PC1FT0YgJiYKKwkoMi8yKSBTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCxLLGcsLyxlLD9dPyBAQCAtMSwyICsxLDMgQEAKKwlfMTAKKwkrMTUKKwlfMjAKKwkoMS8yKSBTdGFnZSB0aGlzIGh1bmsgW3ksbixxLGEsZCxqLEosZywvLGUsP10/XworCUVPRgorCXRlc3Rfd3JpdGVfbGluZXMgcyB5IC8xLDIgfCBnaXQgYWRkIC1wID5hY3R1YWwgJiYKKwl0YWlsIC1uIDUgPGFjdHVhbCA+YWN0dWFsLnRyaW1tZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLnRyaW1tZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgaHVuayAiYWRkIC1wIChlZGl0KSInICcKKwkjIFNwbGl0LCBzYXkgRWRpdCBhbmQgZG8gbm90aGluZy4gIFRoZW46CisJIworCSMgMS4gQnJva2VuIHZlcnNpb24gcmVzdWx0cyBpbiBhIHBhdGNoIHRoYXQgZG9lcyBub3QgYXBwbHkgYW5kCisJIyBvbmx5IHRha2VzIFt5L25dIChlZGl0IGFnYWluKSBzbyB0aGUgZmlyc3QgcSBpcyBkaXNjYXJkZWQKKwkjIGFuZCB0aGVuIG4gYXR0ZW1wdHMgdG8gZGlzY2FyZCB0aGUgZWRpdC4gUmVwZWF0IHEgZW5vdWdoCisJIyB0aW1lcyB0byBnZXQgb3V0LgorCSMKKwkjIDIuIENvcnJlY3QgdmVyc2lvbiBhcHBsaWVzIHRoZSAobm90KWVkaXRlZCB2ZXJzaW9uLCBhbmQgYXNrcworCSMgICAgYWJvdXQgdGhlIG5leHQgaHVuaywgYWdhaW5zdCB3aGljaCB3ZSBzYXkgcSBhbmQgcHJvZ3JhbQorCSMgICAgZXhpdHMuCisJcHJpbnRmICIlc1xuIiBzIGUgICAgIHEgbiBxIHEgfAorCUVESVRPUj06IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJISBncmVwICJeKzE1IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc3BsaXQgaHVuayAiYWRkIC1wIChubywgeWVzLCBlZGl0KSInICcKKwl0ZXN0X3dyaXRlX2xpbmVzIDUgMTAgMjAgMjEgMzAgMzEgNDAgNTAgNjAgPnRlc3QgJiYKKwlnaXQgcmVzZXQgJiYKKwkjIHRlc3Qgc2VxdWVuY2UgaXMgcyhwbGl0KSwgbihvKSwgeShlcyksIGUoZGl0KQorCSMgcSBuIHEgcSBpcyB0aGVyZSB0byBtYWtlIHN1cmUgd2UgZXhpdCBhdCB0aGUgZW5kLgorCXByaW50ZiAiJXNcbiIgcyBuIHkgZSAgIHEgbiBxIHEgfAorCUVESVRPUj06IGdpdCBhZGQgLXAgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCWdpdCBkaWZmID5hY3R1YWwgJiYKKwkhIGdyZXAgIl4rMzEiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBodW5rIHdpdGggaW5jb21wbGV0ZSBsaW5lIGF0IGVuZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlwcmludGYgIm1pc3NpbmcgTEYiID4+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYmVmb3JlIDEwIDIwIDMwIDQwIDUwIDYwIDcwID50ZXN0ICYmCisJZ2l0IGdyZXAgLS1jYWNoZWQgbWlzc2luZyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyBuIHkgcSB8IGdpdCBhZGQgLXAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtLWNhY2hlZCBtaXNzaW5nICYmCisJZ2l0IGdyZXAgYmVmb3JlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1jYWNoZWQgYmVmb3JlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2VkaXQsIGFkZGluZyBsaW5lcyB0byB0aGUgZmlyc3QgaHVuaycgJworCXRlc3Rfd3JpdGVfbGluZXMgMTAgMTEgMjAgMzAgNDAgNTAgNTEgNjAgPnRlc3QgJiYKKwlnaXQgcmVzZXQgJiYKKwl0ciBfICIgIiA+cGF0Y2ggPDwtRU9GICYmCisJQEAgLTEsNSArMSw2IEBACisJXzEwCisJKzExCisJKzEyCisJXzIwCisJKzIxCisJKzIyCisJXzMwCisJRU9GCisJIyB0ZXN0IHNlcXVlbmNlIGlzIHMocGxpdCksIGUoZGl0KSwgbihvKQorCSMgcSBuIHEgcSBpcyB0aGVyZSB0byBtYWtlIHN1cmUgd2UgZXhpdCBhdCB0aGUgZW5kLgorCXByaW50ZiAiJXNcbiIgcyBlIG4gICBxIG4gcSBxIHwKKwlFRElUT1I9Li9mYWtlX2VkaXRvci5zaCBnaXQgYWRkIC1wIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+YWN0dWFsICYmCisJZ3JlcCAiXisyMiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIG1vZGUgaWdub3JlcyB1bm1lcmdlZCBlbnRyaWVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfY29tbWl0IGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgbm9uLWNvbmZsaWN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBzaWRlIGNvbmZsaWN0LnQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyIGNvbmZsaWN0LnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZSAmJgorCWVjaG8gY2hhbmdlZCA+bm9uLWNvbmZsaWN0LnQgJiYKKwllY2hvIHkgfCBnaXQgYWRkIC1wID5vdXRwdXQgJiYKKwkhIGdyZXAgYS9jb25mbGljdC50IG91dHB1dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSogVW5tZXJnZWQgcGF0aCBjb25mbGljdC50CisJZGlmZiAtLWdpdCBhL25vbi1jb25mbGljdC50IGIvbm9uLWNvbmZsaWN0LnQKKwlpbmRleCBmNzY2MjIxLi41ZWEyZWQ0IDEwMDY0NAorCS0tLSBhL25vbi1jb25mbGljdC50CisJKysrIGIvbm9uLWNvbmZsaWN0LnQKKwlAQCAtMSArMSBAQAorCS1ub24tY29uZmxpY3QKKwkrY2hhbmdlZAorCUVPRgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmcyBjYW4gYmUgY29sb3JpemVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZWNobyBjb250ZW50ID50ZXN0ICYmCisJcHJpbnRmIHkgPnkgJiYKKwlmb3JjZV9jb2xvciBnaXQgYWRkIC1wID5vdXRwdXQgMj4mMSA8eSAmJgorCisJIyBXZSBkbyBub3Qgd2FudCB0byBkZXBlbmQgb24gdGhlIGV4YWN0IGNvbG9yaW5nIHNjaGVtZQorCSMgZ2l0IHVzZXMgZm9yIGRpZmZzLCBzbyBqdXN0IGNoZWNrIHRoYXQgd2Ugc2F3IHNvbWUga2luZCBvZiBjb2xvci4KKwlncmVwICIkKHByaW50ZiAiXFwwMzMiKSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbG9yaXplZCBkaWZmcyByZXNwZWN0IGRpZmYud3NFcnJvckhpZ2hsaWdodCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWVjaG8gIm9sZCAiID50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJZWNobyAibmV3ICIgPnRlc3QgJiYKKworCXByaW50ZiB5ID55ICYmCisJZm9yY2VfY29sb3IgZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1hbGwgYWRkIC1wID5vdXRwdXQucmF3IDI+JjEgPHkgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0LnJhdyA+b3V0cHV0ICYmCisJZ3JlcCAib2xkPCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZGaWx0ZXIgZmlsdGVycyBkaWZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZWNobyBjb250ZW50ID50ZXN0ICYmCisJdGVzdF9jb25maWcgaW50ZXJhY3RpdmUuZGlmZkZpbHRlciAic2VkIHMvXi9mb286LyIgJiYKKwlwcmludGYgeSA+eSAmJgorCWZvcmNlX2NvbG9yIGdpdCBhZGQgLXAgPm91dHB1dCAyPiYxIDx5ICYmCisKKwkjIGF2b2lkIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgY29sb3Jpbmcgb3IgY29udGVudCBvZiB0aGUgcHJvbXB0cywKKwkjIGFuZCBqdXN0IG1ha2Ugc3VyZSB3ZSBzYXcgb3VyIGRpZmYgcHJlZml4ZWQKKwlncmVwIGZvbzouKmNvbnRlbnQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBib2d1cyBkaWZmRmlsdGVyIG91dHB1dCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWVjaG8gY29udGVudCA+dGVzdCAmJgorCXRlc3RfY29uZmlnIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIgInNlZCAxZCIgJiYKKwlwcmludGYgeSA+eSAmJgorCXRlc3RfbXVzdF9mYWlsIGZvcmNlX2NvbG9yIGdpdCBhZGQgLXAgPHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5hbGdvcml0aG0gaXMgcGFzc2VkIHRvIGBnaXQgZGlmZi1maWxlc2AnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gY2hhbmdlZCA+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBkaWZmLmFsZ29yaXRobT1ib2d1cyBhZGQgLXAgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvcjogb3B0aW9uIGRpZmYtYWxnb3JpdGhtIGFjY2VwdHMgIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtbW9kZSB2aWEgLWkgcHJvbXB0cyBmb3IgZmlsZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvIG9uZSA+ZmlsZSAmJgorCWVjaG8gdHdvID50ZXN0ICYmCisJZ2l0IGFkZCAtaSA8PC1cRU9GICYmCisJcGF0Y2gKKwl0ZXN0CisKKwl5CisJcXVpdAorCUVPRgorCisJZWNobyB0ZXN0ID5leHBlY3QgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJZGlmZl9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLXAgaGFuZGxlcyBnbG9icycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCW1rZGlyIC1wIHN1YmRpciAmJgorCWVjaG8gYmFzZSA+b25lLmMgJiYKKwllY2hvIGJhc2UgPnN1YmRpci90d28uYyAmJgorCWdpdCBhZGQgIiouYyIgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCWVjaG8gY2hhbmdlID5vbmUuYyAmJgorCWVjaG8gY2hhbmdlID5zdWJkaXIvdHdvLmMgJiYKKwlnaXQgYWRkIC1wICIqLmMiIDw8LVxFT0YgJiYKKwl5CisJeQorCUVPRgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCW9uZS5jCisJc3ViZGlyL3R3by5jCisJRU9GCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1wIGhhbmRsZXMgcmVsYXRpdmUgcGF0aHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvIGJhc2UgPnJlbHBhdGguYyAmJgorCWdpdCBhZGQgIiouYyIgJiYKKwlnaXQgY29tbWl0IC1tIHJlbHBhdGggJiYKKworCWVjaG8gY2hhbmdlID5yZWxwYXRoLmMgJiYKKwlta2RpciAtcCBzdWJkaXIgJiYKKwlnaXQgLUMgc3ViZGlyIGFkZCAtcCAuLiAyPmVycm9yIDw8LVxFT0YgJiYKKwl5CisJRU9GCisKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlyZWxwYXRoLmMKKwlFT0YKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLXAgZG9lcyBub3QgZXhwYW5kIGFyZ3VtZW50IGxpc3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZWNobyBjb250ZW50ID5ub3QtY2hhbmdlZCAmJgorCWdpdCBhZGQgbm90LWNoYW5nZWQgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbm90LWNoYW5nZWQgZmlsZSIgJiYKKworCWVjaG8gY2hhbmdlID5maWxlICYmCisJR0lUX1RSQUNFPSQocHdkKS90cmFjZS5vdXQgZ2l0IGFkZCAtcCAuIDw8LVxFT0YgJiYKKwl5CisJRU9GCisKKwkjIHdlIGtub3cgdGhhdCAiZmlsZSIgbXVzdCBiZSBtZW50aW9uZWQgc2luY2Ugd2UgYWN0dWFsbHkKKwkjIHVwZGF0ZSBpdCwgYnV0IHdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0IG91ciAiLiIgcGF0aHNwZWMKKwkjIHdhcyBub3QgZXhwYW5kZWQgaW50byB0aGUgYXJndW1lbnQgbGlzdCBvZiBhbnkgY29tbWFuZC4KKwkjIFNvIGxvb2sgb25seSBmb3IgIm5vdC1jaGFuZ2VkIi4KKwkhIGdyZXAgLUUgIl50cmFjZTogKGJ1aWx0LWlufGV4ZWN8cnVuX2NvbW1hbmQpOiAuKm5vdC1jaGFuZ2VkIiB0cmFjZS5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHVuay1lZGl0aW5nIGhhbmRsZXMgY3VzdG9tIGNvbW1lbnQgY2hhcicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNoYW5nZSA+PmZpbGUgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLmNvbW1lbnRDaGFyICJcJCIgJiYKKwllY2hvIGUgfCBHSVRfRURJVE9SPXRydWUgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtcCB3b3JrcyBldmVuIHdpdGggY29sb3IudWk9YWx3YXlzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gY2hhbmdlID4+ZmlsZSAmJgorCXRlc3RfY29uZmlnIGNvbG9yLnVpIGFsd2F5cyAmJgorCWVjaG8geSB8IGdpdCBhZGQgLXAgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpZmZlcmVudCBraW5kcyBvZiBkaXJ0eSBzdWJtb2R1bGVzJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBmb3Itc3VibW9kdWxlcyAmJgorCSgKKwkJY2QgZm9yLXN1Ym1vZHVsZXMgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCQl0ZXN0X2NyZWF0ZV9yZXBvIGRpcnR5LWhlYWQgJiYKKwkJKAorCQkJY2QgZGlydHktaGVhZCAmJgorCQkJdGVzdF9jb21taXQgaW5pdGlhbAorCQkpICYmCisJCWNwIC1SIGRpcnR5LWhlYWQgZGlydHktb3RoZXJ3aXNlICYmCisJCWNwIC1SIGRpcnR5LWhlYWQgZGlydHktYm90aC13YXlzICYmCisJCWdpdCBhZGQgZGlydHktaGVhZCAmJgorCQlnaXQgYWRkIGRpcnR5LW90aGVyd2lzZSBkaXJ0eS1ib3RoLXdheXMgJiYKKwkJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwkJY2QgZGlydHktaGVhZCAmJgorCQl0ZXN0X2NvbW1pdCB1cGRhdGVkICYmCisJCWNkIC4uL2RpcnR5LWJvdGgtd2F5cyAmJgorCQl0ZXN0X2NvbW1pdCB1cGRhdGVkICYmCisJCWVjaG8gZGlydHkgPj5pbml0aWFsICYmCisJCTogPnVudHJhY2tlZCAmJgorCQljZCAuLi9kaXJ0eS1vdGhlcndpc2UgJiYKKwkJZWNobyBkaXJ0eSA+PmluaXRpYWwgJiYKKwkJOiA+dW50cmFja2VkCisJKSAmJgorCWdpdCAtQyBmb3Itc3VibW9kdWxlcyBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlkaXJ0eS1ib3RoLXdheXMKKwlkaXJ0eS1oZWFkCisJZGlydHktb3RoZXJ3aXNlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IC1DIGZvci1zdWJtb2R1bGVzIGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlydHktYm90aC13YXlzCisJZGlydHktaGVhZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlcyBkaXJ0eSBzdWJtb2R1bGVzIChleGNlcHQgSEVBRCknICcKKwlnaXQgLUMgZm9yLXN1Ym1vZHVsZXMgYWRkIC1pIDwvZGV2L251bGwgPm91dHB1dCAmJgorCWdyZXAgZGlydHktaGVhZCBvdXRwdXQgJiYKKwlncmVwIGRpcnR5LWJvdGgtd2F5cyBvdXRwdXQgJiYKKwkhIGdyZXAgZGlydHktb3RoZXJ3aXNlIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgcGF0aG9sb2dpY2FsIGNvbnRleHQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF93cml0ZV9saW5lcyBhIGEgYSBhIGEgYSBhIGEgYSBhIGEgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIGEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGMgYiBhIGEgYSBhIGEgYSBhIGIgYSBhIGEgYSA+YSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgICAgIGEgYSBhIGEgYSBhIGEgYiBhIGEgYSBhID5leHBlY3RlZC0xICYmCisJdGVzdF93cml0ZV9saW5lcyAgIGIgYSBhIGEgYSBhIGEgYSBiIGEgYSBhIGEgPmV4cGVjdGVkLTIgJiYKKwkjIGNoZWNrIGVkaXRpbmcgY2FuIGNvcGUgd2l0aCBtaXNzaW5nIGhlYWRlciBhbmQgZGVsZXRlZCBjb250ZXh0IGxpbmVzCisJIyBhcyB3ZWxsIGFzIGNoYW5nZXMgdG8gb3RoZXIgbGluZXMKKwl0ZXN0X3dyaXRlX2xpbmVzICtiICIgYSIgPnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtcCB3b3JrcyB3aXRoIHBhdGhvbG9naWNhbCBjb250ZXh0IGxpbmVzJyAnCisJZ2l0IHJlc2V0ICYmCisJcHJpbnRmICIlc1xuIiBuIHkgfAorCWdpdCBhZGQgLXAgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtMSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1wIHBhdGNoIGVkaXRpbmcgd29ya3Mgd2l0aCBwYXRob2xvZ2ljYWwgY29udGV4dCBsaW5lcycgJworCWdpdCByZXNldCAmJgorCSMgbiBxIHEgYmVsb3cgaXMgaW4gY2FzZSBlZGl0IGZhaWxzCisJcHJpbnRmICIlc1xuIiBlIHkgICAgbiBxIHEgfAorCWdpdCBhZGQgLXAgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtMiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLXAgd29ya3Mgd2l0aCBwYXRob2xvZ2ljYWwgY29udGV4dCBsaW5lcycgJworCXRlc3Rfd3JpdGVfbGluZXMgYSBhIGEgYSBhIGEgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgYiBhIGIgYSBiIGEgYiBhIGIgYSA+IGEmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyBuIG4geSBxIHwgZ2l0IGNoZWNrb3V0IC1wICYmCisJdGVzdF93cml0ZV9saW5lcyBhIGIgYSBiIGEgYSBiIGEgYiBhID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGhlbHAgZnJvbSBhZGQtLWhlbHBlcicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKworCTxCT0xEPioqKiBDb21tYW5kcyAqKio8UkVTRVQ+CisJICAxOiA8Qk9MRDtCTFVFPnM8UkVTRVQ+dGF0dXMJICAyOiA8Qk9MRDtCTFVFPnU8UkVTRVQ+cGRhdGUJICAzOiA8Qk9MRDtCTFVFPnI8UkVTRVQ+ZXZlcnQJICA0OiA8Qk9MRDtCTFVFPmE8UkVTRVQ+ZGQgdW50cmFja2VkCisJICA1OiA8Qk9MRDtCTFVFPnA8UkVTRVQ+YXRjaAkgIDY6IDxCT0xEO0JMVUU+ZDxSRVNFVD5pZmYJICA3OiA8Qk9MRDtCTFVFPnE8UkVTRVQ+dWl0CSAgODogPEJPTEQ7QkxVRT5oPFJFU0VUPmVscAorCTxCT0xEO0JMVUU+V2hhdCBub3c8UkVTRVQ+PiA8Qk9MRDtSRUQ+c3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzPFJFU0VUPgorCTxCT0xEO1JFRD51cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzPFJFU0VUPgorCTxCT0xEO1JFRD5yZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb248UkVTRVQ+CisJPEJPTEQ7UkVEPnBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHk8UkVTRVQ+CisJPEJPTEQ7UkVEPmRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleDxSRVNFVD4KKwk8Qk9MRDtSRUQ+YWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlczxSRVNFVD4KKwk8Qk9MRD4qKiogQ29tbWFuZHMgKioqPFJFU0VUPgorCSAgMTogPEJPTEQ7QkxVRT5zPFJFU0VUPnRhdHVzCSAgMjogPEJPTEQ7QkxVRT51PFJFU0VUPnBkYXRlCSAgMzogPEJPTEQ7QkxVRT5yPFJFU0VUPmV2ZXJ0CSAgNDogPEJPTEQ7QkxVRT5hPFJFU0VUPmRkIHVudHJhY2tlZAorCSAgNTogPEJPTEQ7QkxVRT5wPFJFU0VUPmF0Y2gJICA2OiA8Qk9MRDtCTFVFPmQ8UkVTRVQ+aWZmCSAgNzogPEJPTEQ7QkxVRT5xPFJFU0VUPnVpdAkgIDg6IDxCT0xEO0JMVUU+aDxSRVNFVD5lbHAKKwk8Qk9MRDtCTFVFPldoYXQgbm93PFJFU0VUPj4kU1AKKwlCeWUuCisJRU9GCisJdGVzdF93cml0ZV9saW5lcyBoIHwgZm9yY2VfY29sb3IgZ2l0IGFkZCAtaSA+YWN0dWFsLmNvbG9yZWQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLmNvbG9yZWQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMi1hZGQtZWRpdC5zaCBiL3QvdDM3MDItYWRkLWVkaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmM2NzY2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM3MDItYWRkLWVkaXQuc2gKQEAgLTAsMCArMSwxMjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdhZGQgLWUgYmFzaWMgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKworCitjYXQgPiBmaWxlIDw8IEVPRgorTE8sIHByYWlzZSBvZiB0aGUgcHJvd2VzcyBvZiBwZW9wbGUta2luZ3MKK29mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKK3dlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorZnJvbSBtYW55IGEgdHJpYmUsIHRoZSBtZWFkLWJlbmNoIHRvcmUsCithd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CitmcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKK3RpbGwgYmVmb3JlIGhpbSB0aGUgZm9saywgYm90aCBmYXIgYW5kIG5lYXIsCit3aG8gaG91c2UgYnkgdGhlIHdoYWxlLXBhdGgsIGhlYXJkIGhpcyBtYW5kYXRlLAorZ2F2ZSBoaW0gZ2lmdHM6ICBhIGdvb2Qga2luZyBoZSEKK0VPRgorCitjYXQgPiBzZWNvbmQtcGFydCA8PCBFT0YKK1RvIGhpbSBhbiBoZWlyIHdhcyBhZnRlcndhcmQgYm9ybiwKK2Egc29uIGluIGhpcyBoYWxscywgd2hvbSBoZWF2ZW4gc2VudAordG8gZmF2b3IgdGhlIGZvbGssIGZlZWxpbmcgdGhlaXIgd29lCit0aGF0IGVyc3QgdGhleSBoYWQgbGFja2VkIGFuIGVhcmwgZm9yIGxlYWRlcgorc28gbG9uZyBhIHdoaWxlOyB0aGUgTG9yZCBlbmRvd2VkIGhpbSwKK3RoZSBXaWVsZGVyIG9mIFdvbmRlciwgd2l0aCB3b3JsZCdzIHJlbm93bi4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsIGZpbGUKKworJworCitjYXQgPiBleHBlY3RlZC1wYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEsMTEgKzEsNiBAQAorLUxPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCistb2Ygc3BlYXItYXJtZWQgRGFuZXMsIGluIGRheXMgbG9uZyBzcGVkLAorLXdlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorLU9mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKKy1mcm9tIG1hbnkgYSB0cmliZSwgdGhlIG1lYWQtYmVuY2ggdG9yZSwKKy1hd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CistZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKKy1mb3IgaGUgd2F4ZWQgdW5kZXIgd2Vsa2luLCBpbiB3ZWFsdGggaGUgdGhyb3ZlLAorLXRpbGwgYmVmb3JlIGhpbSB0aGUgZm9saywgYm90aCBmYXIgYW5kIG5lYXIsCistd2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKKy1nYXZlIGhpbSBnaWZ0czogIGEgZ29vZCBraW5nIGhlIQorK1RvIGhpbSBhbiBoZWlyIHdhcyBhZnRlcndhcmQgYm9ybiwKKythIHNvbiBpbiBoaXMgaGFsbHMsIHdob20gaGVhdmVuIHNlbnQKKyt0byBmYXZvciB0aGUgZm9saywgZmVlbGluZyB0aGVpciB3b2UKKyt0aGF0IGVyc3QgdGhleSBoYWQgbGFja2VkIGFuIGVhcmwgZm9yIGxlYWRlcgorK3NvIGxvbmcgYSB3aGlsZTsgdGhlIExvcmQgZW5kb3dlZCBoaW0sCisrdGhlIFdpZWxkZXIgb2YgV29uZGVyLCB3aXRoIHdvcmxkJ3MgcmVub3duLgorRU9GCisKK2NhdCA+IHBhdGNoIDw8IEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCitpbmRleCBiOTgzNGI1Li5lZjZlOTRjIDEwMDY0NAorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTMsMSArMywzMzMgQEAgb2Ygc3BlYXItYXJtZWQgRGFuZXMsIGluIGRheXMgbG9uZyBzcGVkLAorIHdlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorKworIE9mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKK0BAIC0yLDcgKzEsNSBAQCBhd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CisgZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKKysKKyBmb3IgaGUgd2F4ZWQgdW5kZXIgd2Vsa2luLCBpbiB3ZWFsdGggaGUgdGhyb3ZlLAorRU9GCisKK2NhdCA+IGV4cGVjdGVkIDw8IEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwxMCArMSwxMiBAQAorIExPLCBwcmFpc2Ugb2YgdGhlIHByb3dlc3Mgb2YgcGVvcGxlLWtpbmdzCisgb2Ygc3BlYXItYXJtZWQgRGFuZXMsIGluIGRheXMgbG9uZyBzcGVkLAorIHdlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorKworIE9mdCBTY3lsZCB0aGUgU2NlZmluZyBmcm9tIHNxdWFkcm9uZWQgZm9lcywKKyBmcm9tIG1hbnkgYSB0cmliZSwgdGhlIG1lYWQtYmVuY2ggdG9yZSwKKyBhd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CisgZnJpZW5kbGVzcywgYSBmb3VuZGxpbmcsIGZhdGUgcmVwYWlkIGhpbToKKysKKyBmb3IgaGUgd2F4ZWQgdW5kZXIgd2Vsa2luLCBpbiB3ZWFsdGggaGUgdGhyb3ZlLAorIHRpbGwgYmVmb3JlIGhpbSB0aGUgZm9saywgYm90aCBmYXIgYW5kIG5lYXIsCisgd2hvIGhvdXNlIGJ5IHRoZSB3aGFsZS1wYXRoLCBoZWFyZCBoaXMgbWFuZGF0ZSwKK0VPRgorCitlY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZS1lZGl0b3Iuc2gKK2NhdCA+PiBmYWtlLWVkaXRvci5zaCA8PFxFT0YKK2VncmVwIC12ICdeaW5kZXgnICIkMSIgPm9yaWctcGF0Y2ggJiYKK212IC1mIHBhdGNoICIkMSIKK0VPRgorCit0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvci5zaCIKK2NobW9kIGEreCBmYWtlLWVkaXRvci5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLWUnICcKKworCWNwIHNlY29uZC1wYXJ0IGZpbGUgJiYKKwlnaXQgYWRkIC1lICYmCisJdGVzdF9jbXAgc2Vjb25kLXBhcnQgZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXBhdGNoIG9yaWctcGF0Y2ggJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+YWN0dWFsICYmCisJZ3JlcCAtdiBpbmRleCBhY3R1YWwgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtZSBub3RpY2VzIGVkaXRvciBmYWlsdXJlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gY2hhbmdlID4+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRURJVE9SPWZhbHNlIGdpdCBhZGQgLWUgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNzAzLWFkZC1tYWdpYy1wYXRoc3BlYy5zaCBiL3QvdDM3MDMtYWRkLW1hZ2ljLXBhdGhzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlZjUyNWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAzLWFkZC1tYWdpYy1wYXRoc3BlYy5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWFnaWMgcGF0aHNwZWMgdGVzdHMgdXNpbmcgZ2l0LWFkZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgc3ViIGFub3RoZXJzdWIgJiYKKwk6ID5zdWIvZm9vICYmCisJOiA+YW5vdGhlcnN1Yi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIDovJyAiCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlhZGQgJ2Fub3RoZXJzdWIvZm9vJworCWFkZCAnZXhwZWN0ZWQnCisJYWRkICdzdWIvYWN0dWFsJworCWFkZCAnc3ViL2ZvbycKKwlFT0YKKwkoY2Qgc3ViICYmIGdpdCBhZGQgLW4gOi8gPmFjdHVhbCkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBzdWIvYWN0dWFsCisiCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2FkZCAnYW5vdGhlcnN1Yi9mb28nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIDovYW5vdGhlcnN1YicgJworCShjZCBzdWIgJiYgZ2l0IGFkZCAtbiA6L2Fub3RoZXJzdWIgPmFjdHVhbCkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBzdWIvYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCA6L25vbi1leGlzdGVudCcgJworCShjZCBzdWIgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtbiA6L25vbi1leGlzdGVudCkKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYWRkICdzdWIvZm9vJworRU9GCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXICYmIG1rZGlyICI6IiAyPi9kZXYvbnVsbAordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBDT0xPTl9ESVIKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ09MT05fRElSICdhIGZpbGUgd2l0aCB0aGUgc2FtZSAobG9uZykgbWFnaWMgbmFtZSBleGlzdHMnICcKKwk6ID4iOihpY2FzZSloYSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC1uICI6KGljYXNlKWhhIiAmJgorCWdpdCBhZGQgLW4gIi4vOihpY2FzZSloYSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDT0xPTl9ESVIgJ2EgZmlsZSB3aXRoIHRoZSBzYW1lIChzaG9ydCkgbWFnaWMgbmFtZSBleGlzdHMnICcKKwk6ID4iOi9iYXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtbiA6L2JhciAmJgorCWdpdCBhZGQgLW4gIi4vOi9iYXIiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwNC1hZGQtcGF0aHNwZWMtZmlsZS5zaCBiL3QvdDM3MDQtYWRkLXBhdGhzcGVjLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWUzNWMxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM3MDQtYWRkLXBhdGhzcGVjLWZpbGUuc2gKQEAgLTAsMCArMSwxNTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgZmlsZTAgJiYKKwllY2hvIEEgPmZpbGVBLnQgJiYKKwllY2hvIEIgPmZpbGVCLnQgJiYKKwllY2hvIEMgPmZpbGVDLnQgJiYKKwllY2hvIEQgPmZpbGVELnQKKycKKworcmVzdG9yZV9jaGVja3BvaW50ICgpIHsKKwlnaXQgcmVzZXQKK30KKwordmVyaWZ5X2V4cGVjdCAoKSB7CisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLXVudHJhY2tlZC1maWxlcz1ubyAtLSBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZnJvbS1maWxlIGZyb20gc3RkaW4nICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCB8IGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGF0aHNwZWMtZnJvbS1maWxlIGZyb20gZmlsZScgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisJZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQSAgZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFwwZmlsZUIudFwwIiB8IGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXBhdGhzcGVjLWZpbGUtbnVsICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQSAgZmlsZUEudAorCUEgIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudFxuIiB8IGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlBICBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB0cmFpbGluZyBkZWxpbWl0ZXInICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFxuZmlsZUIudCIgfCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBICBmaWxlQS50CisJQSAgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1JMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcclxuZmlsZUIudFxyXG4iIHwgZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQSAgZmlsZUEudAorCUEgIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCWdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgIGZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBub3QgY29tcGF0aWJsZSB3aXRoIC0tcGF0aHNwZWMtZmlsZS1udWwnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWNhdCA+bGlzdCA8PC1cRU9GICYmCisJImZpbGVcMTAxLnQiCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRoc3BlYy1maWxlLW51bAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IHRvdWNoZXMgd2hhdCB3YXMgbGlzdGVkJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVCLnRcbmZpbGVDLnRcbiIgfCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBICBmaWxlQi50CisJQSAgZmlsZUMudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3IgY29uZGl0aW9ucycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCT5lbXB0eV9saXN0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1pbnRlcmFjdGl2ZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRjaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0taW50ZXJhY3RpdmUvLS1wYXRjaCIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1lZGl0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1lZGl0IiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLSBmaWxlQS50IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGF0aHNwZWMgYXJndW1lbnRzIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1wYXRoc3BlYy1maWxlLW51bCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZmlsZS1udWwgcmVxdWlyZXMgLS1wYXRoc3BlYy1mcm9tLWZpbGUiIGVyciAmJgorCisJIyBUaGlzIGNhc2Ugc3VjY2VlZHMsIGJ1dCBzdGlsbCBwcmludHMgdG8gc3RkZXJyCisJZ2l0IGFkZCAtLXBhdGhzcGVjLWZyb20tZmlsZT1lbXB0eV9saXN0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzODAwLW1rdGFnLnNoIGIvdC90MzgwMC1ta3RhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NGRjYzVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzgwMC1ta3RhZy5zaApAQCAtMCwwICsxLDM2NiBAQAorIyEvYmluL3NoCisjCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBta3RhZzogdGFnIG9iamVjdCB2ZXJpZnkgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGNoZWNrIHRoZSB0YWcuc2lnIGZpbGUsIGV4cGVjdGluZyB2ZXJpZnlfdGFnKCkgdG8gZmFpbCwKKyMgYW5kIGNoZWNraW5nIHRoYXQgdGhlIGVycm9yIG1lc3NhZ2UgbWF0Y2hlcyB0aGUgcGF0dGVybgorIyBnaXZlbiBpbiB0aGUgZXhwZWN0LnBhdCBmaWxlLgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAoKSB7CisJZXhwZWN0PSIkMiIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMSIgJworCQkoIHRlc3RfbXVzdF9mYWlsIGdpdCBta3RhZyA8dGFnLnNpZyAyPm1lc3NhZ2UgKSAmJgorCQlncmVwICIkZXhwZWN0IiBtZXNzYWdlCisJJworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmaXJzdCBjcmVhdGUgYSBjb21taXQsIHNvIHdlIGhhdmUgYSB2YWxpZCBvYmplY3QvdHlwZQorIyBmb3IgdGhlIHRhZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCWVjaG8gSGVsbG8gPkEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEEgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDEuIGxlbmd0aCBjaGVjaworCitjYXQgPnRhZy5zaWcgPDxFT0YKK3RvbyBzaG9ydCBmb3IgYSB0YWcKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnVGFnIG9iamVjdCBsZW5ndGggY2hlY2snIFwKKwknXmVycm9yOiAuKnNpemUgd3JvbmcuKiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgMi4gb2JqZWN0IGxpbmUgbGFiZWwgY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCit4eHh4eHggMTM5ZTliMzM5ODZiMWMyNjcwZmZmNTJjNTA2NzYwMzExN2IzZTg5NQordHlwZSB0YWcKK3RhZyBteXRhZwordGFnZ2VyIC4gPD4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJvYmplY3QiIGxpbmUgbGFiZWwgY2hlY2snICdeZXJyb3I6IGNoYXIwOiAuKiJvYmplY3QgIiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgMy4gb2JqZWN0IGxpbmUgU0hBMSBjaGVjaworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCB6ejllOWIzMzk4NmIxYzI2NzBmZmY1MmM1MDY3NjAzMTE3YjNlODk1Cit0eXBlIHRhZwordGFnIG15dGFnCit0YWdnZXIgLiA8PiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnIm9iamVjdCIgbGluZSBTSEExIGNoZWNrJyAnXmVycm9yOiBjaGFyNzogLipTSEExIGhhc2gkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDQuIHR5cGUgbGluZSBsYWJlbCBjaGVjaworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAoreHh4eCB0YWcKK3RhZyBteXRhZwordGFnZ2VyIC4gPD4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0eXBlIiBsaW5lIGxhYmVsIGNoZWNrJyAnXmVycm9yOiBjaGFyLio6IC4qIlxcbnR5cGUgIiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgNS4gdHlwZSBsaW5lIGVvbCBjaGVjaworCitlY2hvICJvYmplY3QgJGhlYWQiID50YWcuc2lnCitwcmludGYgInR5cGUgdGFnc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcyIgPj50YWcuc2lnCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidHlwZSIgbGluZSBlb2wgY2hlY2snICdeZXJyb3I6IGNoYXIuKjogLioiXFxuIiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgNi4gdGFnIGxpbmUgbGFiZWwgY2hlY2sgIzEKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgdGFnCit4eHggbXl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidGFnIiBsaW5lIGxhYmVsIGNoZWNrICMxJyBcCisJJ15lcnJvcjogY2hhci4qOiBubyAidGFnICIgZm91bmQkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDcuIHRhZyBsaW5lIGxhYmVsIGNoZWNrICMyCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIHRhZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZwordGFnCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0YWciIGxpbmUgbGFiZWwgY2hlY2sgIzInIFwKKwknXmVycm9yOiBjaGFyLio6IG5vICJ0YWcgIiBmb3VuZCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgOC4gdHlwZSBsaW5lIHR5cGUtbmFtZSBsZW5ndGggY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgdGFnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnCit0YWcgbXl0YWcKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnInR5cGUiIGxpbmUgdHlwZS1uYW1lIGxlbmd0aCBjaGVjaycgXAorCSdeZXJyb3I6IGNoYXIuKjogdHlwZSB0b28gbG9uZyQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgOS4gdmVyaWZ5IG9iamVjdCAoU0hBMS90eXBlKSBjaGVjaworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkKHRlc3Rfb2lkIGRlYWRiZWVmKQordHlwZSB0YWdnZ2cKK3RhZyBteXRhZwordGFnZ2VyIC4gPD4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ3ZlcmlmeSBvYmplY3QgKFNIQTEvdHlwZSkgY2hlY2snIFwKKwknXmVycm9yOiBjaGFyNzogY291bGQgbm90IHZlcmlmeSBvYmplY3QuKiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxMC4gdmVyaWZ5IHRhZy1uYW1lIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15CXRhZwordGFnZ2VyIC4gPD4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ3ZlcmlmeSB0YWctbmFtZSBjaGVjaycgXAorCSdeZXJyb3I6IGNoYXIuKjogY291bGQgbm90IHZlcmlmeSB0YWcgbmFtZSQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxMS4gdGFnZ2VyIGxpbmUgbGFiZWwgY2hlY2sgIzEKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKKworVGhpcyBpcyBmaWxsZXIKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnInRhZ2dlciIgbGluZSBsYWJlbCBjaGVjayAjMScgXAorCSdeZXJyb3I6IGNoYXIuKjogY291bGQgbm90IGZpbmQgInRhZ2dlciAiJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDEyLiB0YWdnZXIgbGluZSBsYWJlbCBjaGVjayAjMgorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyCisKK1RoaXMgaXMgZmlsbGVyCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0YWdnZXIiIGxpbmUgbGFiZWwgY2hlY2sgIzInIFwKKwknXmVycm9yOiBjaGFyLio6IGNvdWxkIG5vdCBmaW5kICJ0YWdnZXIgIiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxMy4gZGlzYWxsb3cgbWlzc2luZyB0YWcgYXV0aG9yIG5hbWUKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciAgPD4gMCArMDAwMAorCitUaGlzIGlzIGZpbGxlcgorRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkaXNhbGxvdyBtaXNzaW5nIHRhZyBhdXRob3IgbmFtZScgXAorCSdeZXJyb3I6IGNoYXIuKjogbWlzc2luZyB0YWdnZXIgbmFtZSQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxNC4gZGlzYWxsb3cgbWlzc2luZyB0YWcgYXV0aG9yIG5hbWUKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8CisgPiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGlzYWxsb3cgbWFsZm9ybWVkIHRhZ2dlcicgXAorCSdeZXJyb3I6IGNoYXIuKjogbWFsZm9ybWVkIHRhZ2dlciBmaWVsZCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxNS4gYWxsb3cgZW1wdHkgdGFnIGVtYWlsCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPD4gMCArMDAwMAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FsbG93IGVtcHR5IHRhZyBlbWFpbCcgXAorICAgICdnaXQgbWt0YWcgPHRhZy5zaWcgPi5naXQvcmVmcy90YWdzL215dGFnIDI+bWVzc2FnZScKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDE2LiBkaXNhbGxvdyBzcGFjZXMgaW4gdGFnIGVtYWlsCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZyBnZXJAZXhhbXBsZS5jb20+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkaXNhbGxvdyBzcGFjZXMgaW4gdGFnIGVtYWlsJyBcCisJJ15lcnJvcjogY2hhci4qOiBtYWxmb3JtZWQgdGFnZ2VyIGZpZWxkJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDE3LiBkaXNhbGxvdyBtaXNzaW5nIHRhZyB0aW1lc3RhbXAKKwordHIgJ18nICcgJyA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT5fXworCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2Rpc2FsbG93IG1pc3NpbmcgdGFnIHRpbWVzdGFtcCcgXAorCSdeZXJyb3I6IGNoYXIuKjogbWlzc2luZyB0YWcgdGltZXN0YW1wJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDE4LiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXN0YW1wMQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IFR1ZSBNYXIgMjUgMTU6NDc6NDQgMjAwOAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lc3RhbXAxJyBcCisJJ15lcnJvcjogY2hhci4qOiBtaXNzaW5nIHRhZyB0aW1lc3RhbXAkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTkuIGRldGVjdCBpbnZhbGlkIHRhZyB0aW1lc3RhbXAyCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMjAwOC0wMy0zMVQxMjoyMDoxNS0wNTAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgdGFnIHRpbWVzdGFtcDInIFwKKwknXmVycm9yOiBjaGFyLio6IG1hbGZvcm1lZCB0YWcgdGltZXN0YW1wJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDIwLiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXpvbmUxCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjQ3ODIzMyBHTVQKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkZXRlY3QgaW52YWxpZCB0YWcgdGltZXpvbmUxJyBcCisJJ15lcnJvcjogY2hhci4qOiBtYWxmb3JtZWQgdGFnIHRpbWV6b25lJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDIxLiBkZXRlY3QgaW52YWxpZCB0YWcgdGltZXpvbmUyCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjQ3ODIzMyArICAzMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTInIFwKKwknXmVycm9yOiBjaGFyLio6IG1hbGZvcm1lZCB0YWcgdGltZXpvbmUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMjIuIGRldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTMKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjA2NDc4MjMzIC0xNDMwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgdGFnIHRpbWV6b25lMycgXAorCSdeZXJyb3I6IGNoYXIuKjogbWFsZm9ybWVkIHRhZyB0aW1lem9uZSQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAyMy4gZGV0ZWN0IGludmFsaWQgaGVhZGVyIGVudHJ5CisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjQ3ODIzMyAtMDUwMAordGhpcyBsaW5lIHNob3VsZCBub3QgYmUgaGVyZQorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2RldGVjdCBpbnZhbGlkIGhlYWRlciBlbnRyeScgXAorCSdeZXJyb3I6IGNoYXIuKjogdHJhaWxpbmcgZ2FyYmFnZSBpbiB0YWcgaGVhZGVyJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDI0LiBjcmVhdGUgdmFsaWQgdGFnCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjQ3ODIzMyAtMDUwMAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSB2YWxpZCB0YWcnIFwKKyAgICAnZ2l0IG1rdGFnIDx0YWcuc2lnID4uZ2l0L3JlZnMvdGFncy9teXRhZyAyPm1lc3NhZ2UnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAyNS4gY2hlY2sgbXl0YWcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIG15dGFnJyBcCisgICAgJ2dpdCB0YWcgLWwgfCBncmVwIG15dGFnJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMC1pMThuLWNvbW1pdC5zaCBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI3N2E5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKQEAgLTAsMCArMSwyNDQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tbWl0IGFuZCBsb2cgb3V0cHV0IGVuY29kaW5ncycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbXBhcmVfd2l0aCAoKSB7CisJZ2l0IHNob3cgLXMgJDEgfCBzZWQgLWUgJzEsL14kL2QnIC1lICdzL14gICAgLy8nID5jdXJyZW50ICYmCisJY2FzZSAiJDMiIGluCisJJycpCisJCXRlc3RfY21wICIkMiIgY3VycmVudCA7OworCT8qKQorCQlpY29udiAtZiAiJDMiIC10IFVURi04ID5jdXJyZW50LnV0ZjggPGN1cnJlbnQgJiYKKwkJaWNvbnYgLWYgIiQzIiAtdCBVVEYtOCA+ZXhwZWN0LnV0ZjggPCIkMiIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LnV0ZjggY3VycmVudC51dGY4CisJCTs7CisJZXNhYworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk6ID5GICYmCisJZ2l0IGFkZCBGICYmCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCUM9JChnaXQgY29tbWl0LXRyZWUgJFQgPCIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0KSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgJEMgJiYKKwlnaXQgdGFnIEMwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGVuY29kaW5nIGhlYWRlciBmb3IgYmFzZSBjYXNlJyAnCisJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgQzAgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCXRlc3QgeiA9ICJ6JEUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VURi0xNiByZWZ1c2VkIGJlY2F1c2Ugb2YgTlVMcycgJworCWVjaG8gVVRGLTE2ID5GICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtYSAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC9VVEYtMTYudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VURi04IGludmFsaWQgY2hhcmFjdGVycyByZWZ1c2VkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIlwkSE9NRS9zdGRlcnJcIiBcIlwkSE9NRS9pbnZhbGlkXCIiICYmCisJZWNobyAiVVRGLTggY2hhcmFjdGVycyIgPkYgJiYKKwlwcmludGYgIkNvbW1pdCBtZXNzYWdlXG5cbkludmFsaWQgc3Vycm9nYXRlOlwzNTVcMjQwXDIwMFxuIiBcCisJCT4iJEhPTUUvaW52YWxpZCIgJiYKKwlnaXQgY29tbWl0IC1hIC1GICIkSE9NRS9pbnZhbGlkIiAyPiIkSE9NRSIvc3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZGlkIG5vdCBjb25mb3JtIiAiJEhPTUUiL3N0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVVEYtOCBvdmVybG9uZyBzZXF1ZW5jZXMgcmVqZWN0ZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiXCRIT01FL3N0ZGVyclwiIFwiXCRIT01FL2ludmFsaWRcIiIgJiYKKwlybSAtZiAiJEhPTUUvc3RkZXJyIiAiJEhPTUUvaW52YWxpZCIgJiYKKwllY2hvICJVVEYtOCBvdmVybG9uZyIgPkYgJiYKKwlwcmludGYgIlwzNDBcMjAyXDI1MW9tbWl0IG1lc3NhZ2VcblxuVGhpcyBpcyBub3QgYSBzcGFjZTpcMzAwXDI0MFxuIiBcCisJCT4iJEhPTUUvaW52YWxpZCIgJiYKKwlnaXQgY29tbWl0IC1hIC1GICIkSE9NRS9pbnZhbGlkIiAyPiIkSE9NRSIvc3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZGlkIG5vdCBjb25mb3JtIiAiJEhPTUUiL3N0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVVEYtOCBub24tY2hhcmFjdGVycyByZWZ1c2VkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIlwkSE9NRS9zdGRlcnJcIiBcIlwkSE9NRS9pbnZhbGlkXCIiICYmCisJZWNobyAiVVRGLTggbm9uLWNoYXJhY3RlciAxIiA+RiAmJgorCXByaW50ZiAiQ29tbWl0IG1lc3NhZ2VcblxuTm9uLWNoYXJhY3RlcjpcMzY0XDIxN1wyNzdcMjc2XG4iIFwKKwkJPiIkSE9NRS9pbnZhbGlkIiAmJgorCWdpdCBjb21taXQgLWEgLUYgIiRIT01FL2ludmFsaWQiIDI+IiRIT01FIi9zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJkaWQgbm90IGNvbmZvcm0iICIkSE9NRSIvc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1VURi04IG5vbi1jaGFyYWN0ZXJzIHJlZnVzZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiXCRIT01FL3N0ZGVyclwiIFwiXCRIT01FL2ludmFsaWRcIiIgJiYKKwllY2hvICJVVEYtOCBub24tY2hhcmFjdGVyIDIuIiA+RiAmJgorCXByaW50ZiAiQ29tbWl0IG1lc3NhZ2VcblxuTm9uLWNoYXJhY3RlcjpcMzU3XDI2N1wyMjBcbiIgXAorCQk+IiRIT01FL2ludmFsaWQiICYmCisJZ2l0IGNvbW1pdCAtYSAtRiAiJEhPTUUvaW52YWxpZCIgMj4iJEhPTUUiL3N0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImRpZCBub3QgY29uZm9ybSIgIiRIT01FIi9zdGRlcnIKKycKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgJEggQzAgJiYKKwkJZWNobyAkSCA+RiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dAorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIGVuY29kaW5nIGhlYWRlciBmb3IgJEgiICcKKwkJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgJyRIJyB8IHNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCisJCXRlc3QgInokRSIgPSAieickSCciCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgdG8gcmVtb3ZlIGN1c3RvbWl6YXRpb24nICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlpZiBaPSQoZ2l0IGNvbmZpZyAtLWdldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZykKKwl0aGVuCisJCWVjaG8gT29wcywgc2hvdWxkIGhhdmUgZmFpbGVkLgorCQlmYWxzZQorCWVsc2UKKwkJdGVzdCB6ID0gInokWiIKKwlmaSAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJU084ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJworCWNvbXBhcmVfd2l0aCBJU084ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKKycKKworZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdyIgJworCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIHRvIGFkZCBjdXN0b21pemF0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJaWYgWj0kKGdpdCBjb25maWcgLS1nZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcpCisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBoYXZlIGZhaWxlZC4KKwkJZmFsc2UKKwllbHNlCisJCXRlc3QgeiA9ICJ6JFoiCisJZmkKKycKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBpdHNlbGYgbm93IiAnCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAnJEgnICYmCisJCWNvbXBhcmVfd2l0aCAnJEgnICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSCcudHh0CisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgdG8gdHdlYWsgY3VzdG9taXphdGlvbicgJworCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJU084ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJworCWNvbXBhcmVfd2l0aCBJU084ODU5LTEgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKKycKKworZm9yIEggaW4gZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdyIgJworCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dAorCScKK2RvbmUKKworZm9yIEogaW4gZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJaWYgdGVzdCAiJEoiID0gSVNPLTIwMjItSlAKKwl0aGVuCisJCUlDT05WPSRKCisJZWxzZQorCQlJQ09OVj0KKwlmaQorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyAkSgorCWZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2hvdWxkIGJlIHNob3duIGluICRKIG5vdyIgJworCQkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJyRKJy50eHQgJElDT05WCisJCScKKwlkb25lCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJObyBjb252ZXJzaW9uIHdpdGggJEgiICcKKwkJY29tcGFyZV93aXRoICItLWVuY29kaW5nPW5vbmUgJyRIJyIgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJyRIJy50eHQKKwknCitkb25lCisKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfZmxhZ3MgKCkgeworCUg9JDEKKwlmbGFnPSQyCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IC0tJGZsYWcgd2l0aCAkSCBlbmNvZGluZyIgJworCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJEggJiYKKwkJZ2l0IGNoZWNrb3V0IC1iICRILSRmbGFnIEMwICYmCisJCWVjaG8gJEggPj5GICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJEgudHh0ICYmCisJCXRlc3RfdGljayAmJgorCQllY2hvIGludGVybWVkaWF0ZSBzdHVmZiA+PkcgJiYKKwkJZ2l0IGFkZCBHICYmCisJCWdpdCBjb21taXQgLWEgLW0gImludGVybWVkaWF0ZSBjb21taXQiICYmCisJCXRlc3RfdGljayAmJgorCQllY2hvICRIICRmbGFnID4+RiAmJgorCQlnaXQgY29tbWl0IC1hIC0tJGZsYWcgSEVBRH4xICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0ICckSC0kZmxhZycgfAorCQkJc2VkIC1uZSAicy9eZW5jb2RpbmcgLy9wIikgJiYKKwkJdGVzdCAieiRFIiA9ICJ6JEgiICYmCisJCWdpdCBjb25maWcgLS11bnNldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZyAmJgorCQlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwKKwknCit9CisKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfZmxhZ3MgZXVjSlAgZml4dXAKKwordGVzdF9jb21taXRfYXV0b3NxdWFzaF9mbGFncyBJU08tMjAyMi1KUCBzcXVhc2gKKwordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyAoKSB7CisJZmxhZz0kMQorCW9sZD0kMgorCW5ldz0kMworCW1zZz0kNAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCAtLSRmbGFnIGludG8gJG9sZCBmcm9tICRuZXciICcKKwkJZ2l0IGNoZWNrb3V0IC1iICRmbGFnLSRvbGQtJG5ldyBDMCAmJgorCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJG9sZCAmJgorCQllY2hvICRvbGQgPj5GICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJG1zZyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyBpbnRlcm1lZGlhdGUgc3R1ZmYgPj5HICYmCisJCWdpdCBhZGQgRyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJpbnRlcm1lZGlhdGUgY29tbWl0IiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRuZXcgJiYKKwkJZWNobyAkbmV3LSRmbGFnID4+RiAmJgorCQlnaXQgY29tbWl0IC1hIC0tJGZsYWcgSEVBRF4gJiYKKwkJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCQlnaXQgcmV2LWxpc3QgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJCWljb252IC1mICRvbGQgLXQgVVRGLTggIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJG1zZyA+ZXhwZWN0ICYmCisJCWlmIHRlc3QgJGZsYWcgPSBzcXVhc2g7IHRoZW4KKwkJCXN1YmplY3Q9IiQoaGVhZCAtMSBleHBlY3QpIiAmJgorCQkJcHJpbnRmICJcbnNxdWFzaCEgJXNcbiIgIiRzdWJqZWN0IiA+PmV4cGVjdAorCQlmaSAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5yYXcgJiYKKwkJKHNlZCAiMSwvXiQvZCIgcmF3IHwgaWNvbnYgLWYgJG5ldyAtdCB1dGYtOCkgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworfQorCit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX211bHRpX2VuY29kaW5nIGZpeHVwIFVURi04IElTTy04ODU5LTEgMS1VVEYtOC50eHQKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfbXVsdGlfZW5jb2Rpbmcgc3F1YXNoIElTTy04ODU5LTEgVVRGLTggSVNPODg1OS0xLnR4dAordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyBzcXVhc2ggZXVjSlAgSVNPLTIwMjItSlAgZXVjSlAudHh0Cit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX211bHRpX2VuY29kaW5nIGZpeHVwIElTTy0yMDIyLUpQIFVURi04IElTTy0yMDIyLUpQLnR4dAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDAvMS1VVEYtOC50eHQgYi90L3QzOTAwLzEtVVRGLTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzFlMTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwLzEtVVRGLTgudHh0CkBAIC0wLDAgKzEsMyBAQAorw4TDi8ORw4/DlgorCivDgWLDp2TDqGZnCmRpZmYgLS1naXQgYS90L3QzOTAwLzItVVRGLTgudHh0IGIvdC90MzkwMC8yLVVURi04LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y0ZjhmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMC8yLVVURi04LnR4dApAQCAtMCwwICsxLDQgQEAKK+OBr+OCjOOBsuOBu+OBtQorCivjgZfjgabjgYTjgovjga7jgYzjgIHjgYTjgovjga7jgafjgIIKK+a/sea1nOOBu+OCjOOBt+OCiuOBveOCjOOBvuOBs+OBkOOCiuOCjeOBuOOAggpkaWZmIC0tZ2l0IGEvdC90MzkwMC9JU08tMjAyMi1KUC50eHQgYi90L3QzOTAwL0lTTy0yMDIyLUpQLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGI1MzMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMC9JU08tMjAyMi1KUC50eHQKQEAgLTAsMCArMSw0IEBACisbJEIkTyRsJFIkWyRVGyhCCisKKxskQiQ3JEYkJCRrJE4kLCEiJCQkayROJEchIxsoQgorGyRCX0BJTSRbJGwkVyRqJF0kbCReJFMkMCRqJG0kWCEjGyhCCmRpZmYgLS1naXQgYS90L3QzOTAwL0lTTzg4NTktMS50eHQgYi90L3QzOTAwL0lTTzg4NTktMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiZWYwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAvSVNPODg1OS0xLnR4dApAQCAtMCwwICsxLDMgQEAKK8TL0c/WCisKK8Fi52ToZmcKZGlmZiAtLWdpdCBhL3QvdDM5MDAvVVRGLTE2LnR4dCBiL3QvdDM5MDAvVVRGLTE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjU3ZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMC9VVEYtMTYudHh0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDM5MDAvZXVjSlAudHh0IGIvdC90MzkwMC9ldWNKUC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2ZjJhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAvZXVjSlAudHh0CkBAIC0wLDAgKzEsNCBAQAorpM+k7KTSpNuk1QorCiukt6TGpKSk66TOpKyhoqSkpOukzqTHoaMKK9/Ayc2k26TspNek6qTdpOyk3qTTpLCk6qTtpNihowpkaWZmIC0tZ2l0IGEvdC90MzkwMS1pMThuLXBhdGNoLnNoIGIvdC90MzkwMS1pMThuLXBhdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyM2ViMDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAxLWkxOG4tcGF0Y2guc2gKQEAgLTAsMCArMSwzMTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0naTE4biBzZXR0aW5ncyBhbmQgZm9ybWF0LXBhdGNoIHwgYW0gcGlwZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX2VuY29kaW5nICgpIHsKKwkjIE1ha2Ugc3VyZSBjaGFyYWN0ZXJzIGFyZSBub3QgY29ycnVwdGVkCisJY250PSIkMSIgaGVhZGVyPSIkMiIgaT0xIGo9MAorCXdoaWxlIHRlc3QgIiRpIiAtbGUgJGNudAorCWRvCisJCWdpdCBmb3JtYXQtcGF0Y2ggLS1lbmNvZGluZz1VVEYtOCAtLXN0ZG91dCBIRUFEfiRpLi5IRUFEfiRqIHwKKwkJZ3JlcCAiXkZyb206ID0/VVRGLTg/cT89QzM9ODE9QzM9QTk9QzM9QUQ9MjA9QzM9QjM9QzM9QkE/PSIgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfiRqIHwKKwkJY2FzZSAiJGhlYWRlciIgaW4KKwkJODg1OSkKKwkJCWdyZXAgIl5lbmNvZGluZyBJU084ODU5LTEiIDs7CisJCSopCisJCQlncmVwICJeZW5jb2RpbmcgSVNPODg1OS0xIjsgdGVzdCAiJD8iICE9IDAgOzsKKwkJZXNhYyB8fCByZXR1cm4gMQorCQlqPSRpCisJCWk9JCgoJGkrMSkpCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKworCSMgdXNlIFVURi04IGluIGF1dGhvciBhbmQgY29tbWl0dGVyIG5hbWUgdG8gbWF0Y2ggdGhlCisJIyBpMThuLmNvbW1pdGVuY29kaW5nIHNldHRpbmdzCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyAiJEdJVF9BVVRIT1JfTkFNRSIgPm1pbmUgJiYKKwlnaXQgYWRkIG1pbmUgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gSGVsbG8gd29ybGQgPm1pbmUgJiYKKwlnaXQgYWRkIG1pbmUgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJTZWNvbmQgb24gbWFpbiIgJiYKKworCSMgdGhlIGZpcnN0IGNvbW1pdCBvbiB0aGUgc2lkZSBicmFuY2ggaXMgVVRGLTgKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBtYXN0ZXJeICYmCisJZWNobyBBbm90aGVyIGZpbGUgPnlvdXJzICYmCisJZ2l0IGFkZCB5b3VycyAmJgorCWdpdCBjb21taXQgLXMgLW0gIlNlY29uZCBvbiBzaWRlIiAmJgorCisJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1cKKwl0aGVuCisJCSMgdGhlIHNlY29uZCBvbmUgb24gdGhlIHNpZGUgYnJhbmNoIGlzIElTTy04ODU5LTEKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCQkjIHVzZSBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lIGluIElTTy04ODU5LTEgdG8gbWF0Y2ggaXQuCisJCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvODg1OS0xLnR4dAorCWZpICYmCisJdGVzdF90aWNrICYmCisJZWNobyBZZXQgYW5vdGhlciA+dGhlaXJzICYmCisJZ2l0IGFkZCB0aGVpcnMgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJUaGlyZCBvbiBzaWRlIiAmJgorCisJIyBCYWNrIHRvIGRlZmF1bHQKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIG91dHB1dCAoSVNPLTg4NTktMSknICcKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRF4gPm91dC1sMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPm91dC1sMiAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xIiBvdXQtbDEgJiYKKwlncmVwICJeRnJvbTogPT9JU084ODU5LTE/cT89QzE9RTk9RUQ9MjA9RjM9RkE/PSIgb3V0LWwxICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEiIG91dC1sMiAmJgorCWdyZXAgIl5Gcm9tOiA9P0lTTzg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIG91dHB1dCAoVVRGLTgpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRF4gPm91dC11MSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPm91dC11MiAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIG91dC11MSAmJgorCWdyZXAgIl5Gcm9tOiA9P1VURi04P3E/PUMzPTgxPUMzPUE5PUMzPUFEPTIwPUMzPUIzPUMzPUJBPz0iIG91dC11MSAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIG91dC11MiAmJgorCWdyZXAgIl5Gcm9tOiA9P1VURi04P3E/PUMzPTgxPUMzPUE5PUMzPUFEPTIwPUMzPUIzPUMzPUJBPz0iIG91dC11MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKFUvVSknICcKKwkjIFdlIHdhbnQgdGhlIHJlc3VsdCBvZiByZWJhc2UgaW4gVVRGLTgKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKworCSMgVGhlIHRlc3QgaXMgYWJvdXQgbG9nb3V0cHV0ZW5jb2Rpbmcgbm90IGFmZmVjdGluZyB0aGUKKwkjIGZpbmFsIG91dGNvbWUgLS0gaXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIHRoZQorCSMgcGF0Y2ggYW5kIHRoZSBsb2cuCisKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKworCSMgVGhlIHJlc3VsdCB3aWxsIGJlIGNvbW1pdHRlZCBieSBHSVRfQ09NTUlUVEVSX05BTUUgLS0KKwkjIHdlIHdhbnQgVVRGLTggZW5jb2RlZCBuYW1lLgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvdXRmOC50eHQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAoVS9MKScgJworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxL3V0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAncmViYXNlIChML0wpJyAnCisJIyBJbiB0aGlzIHRlc3Qgd2Ugd2FudCBJU08tODg1OS0xIGVuY29kZWQgY29tbWl0cyBhcyB0aGUgcmVzdWx0CisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLzg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyIDg4NTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3JlYmFzZSAoTC9VKScgJworCSMgVGhpcyBpcyBwYXRob2xvZ2ljYWwgLS0gdXNlIFVURi04IGFzIGludGVybWVkaWF0ZSBmb3JtCisJIyB0byBnZXQgSVNPLTg4NTktMSByZXN1bHRzLgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLzg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyIDg4NTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2soVS9VKScgJworCSMgQm90aCB0aGUgY29tbWl0ZW5jb2RpbmcgYW5kIGxvZ291dHB1dGVuY29kaW5nIGlzIHNldCB0byBVVEYtOC4KKworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvdXRmOC50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGVeICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGUgJiYKKwlnaXQgcmV2ZXJ0IEhFQUQgJiYKKworCWNoZWNrX2VuY29kaW5nIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2NoZXJyeS1waWNrKEwvTCknICcKKwkjIEJvdGggdGhlIGNvbW1pdGVuY29kaW5nIGFuZCBsb2dvdXRwdXRlbmNvZGluZyBpcyBzZXQgdG8gSVNPLTg4NTktMQorCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLzg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGVeICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGUgJiYKKwlnaXQgcmV2ZXJ0IEhFQUQgJiYKKworCWNoZWNrX2VuY29kaW5nIDMgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayhVL0wpJyAnCisJIyBDb21taXRlbmNvZGluZyBpcyBzZXQgdG8gVVRGLTggYnV0IGxvZ291dHB1dGVuY29kaW5nIGlzIElTTy04ODU5LTEKKworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxL3V0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayBzaWRlXiAmJgorCWdpdCBjaGVycnktcGljayBzaWRlICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisKKwljaGVja19lbmNvZGluZyAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdjaGVycnktcGljayhML1UpJyAnCisJIyBBZ2FpbiwgdGhlIGNvbW1pdGVuY29kaW5nIGlzIHNldCB0byBJU08tODg1OS0xIGJ1dAorCSMgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04LgorCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEvODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2lkZV4gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2lkZSAmJgorCWdpdCByZXZlcnQgSEVBRCAmJgorCisJY2hlY2tfZW5jb2RpbmcgMyA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChVL1UpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoVS9MKScgJworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxL3V0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChML0wpJyAnCisJIyBJbiB0aGlzIHRlc3Qgd2Ugd2FudCBJU08tODg1OS0xIGVuY29kZWQgY29tbWl0cyBhcyB0aGUgcmVzdWx0CisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLzg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoTC9VKScgJworCSMgVGhpcyBpcyBwYXRob2xvZ2ljYWwgLS0gdXNlIFVURi04IGFzIGludGVybWVkaWF0ZSBmb3JtCisJIyB0byBnZXQgSVNPLTg4NTktMSByZXN1bHRzLgorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLzg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAoVS9VKScgJworCSMgQXBwbHkgVVRGLTggcGF0Y2hlcyB3aXRoIFVURi04IGNvbW1pdGVuY29kaW5nCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgYW0gb3V0LXUxIG91dC11MiAmJgorCisJY2hlY2tfZW5jb2RpbmcgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnYW0gKEwvTCknICcKKwkjIEFwcGx5IElTTy04ODU5LTEgcGF0Y2hlcyB3aXRoIElTTy04ODU5LTEgY29tbWl0ZW5jb2RpbmcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBhbSBvdXQtbDEgb3V0LWwyICYmCisKKwljaGVja19lbmNvZGluZyAyIDg4NTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gKFUvTCknICcKKwkjIEFwcGx5IElTTy04ODU5LTEgcGF0Y2hlcyB3aXRoIFVURi04IGNvbW1pdGVuY29kaW5nCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisKKwkjIGFtIHNwZWNpZmllcyAtLXV0ZjggYnkgZGVmYXVsdC4KKwlnaXQgYW0gb3V0LWwxIG91dC1sMiAmJgorCisJY2hlY2tfZW5jb2RpbmcgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLW5vLXV0ZjggKFUvTCknICcKKwkjIEFwcGx5IElTTy04ODU5LTEgcGF0Y2hlcyB3aXRoIFVURi04IGNvbW1pdGVuY29kaW5nCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgYW0gLS1uby11dGY4IG91dC1sMSBvdXQtbDIgMj5lcnIgJiYKKworCSMgY29tbWl0LXRyZWUgd2lsbCB3YXJuIHRoYXQgdGhlIGNvbW1pdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdmFsaWQgVVRGLTgKKwkjIGFzIG1haWxpbmZvIGRpZCBub3QgY29udmVydCBpdAorCXRlc3RfaTE4bmdyZXAgImRpZCBub3QgY29uZm9ybSIgZXJyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdhbSAoTC9VKScgJworCSMgQXBwbHkgVVRGLTggcGF0Y2hlcyB3aXRoIElTTy04ODU5LTEgY29tbWl0ZW5jb2RpbmcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCSMgbWFpbGluZm8gd2lsbCByZS1jb2RlIHRoZSBjb21taXQgbWVzc2FnZSB0byB0aGUgY2hhcnNldCBzcGVjaWZpZWQgYnkKKwkjIGkxOG4uY29tbWl0ZW5jb2RpbmcKKwlnaXQgYW0gb3V0LXUxIG91dC11MiAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMS84ODU5LTEudHh0IGIvdC90MzkwMS84ODU5LTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4YzIxYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAxLzg4NTktMS50eHQKQEAgLTAsMCArMSw0IEBACis6IHRvIGJlIHNvdXJjZWQgaW4gdDM5MDEgLS0gdGhpcyBpcyBsYXRpbi0xCitHSVRfQVVUSE9SX05BTUU9IsHp7SDz+iIgJiYKK0dJVF9DT01NSVRURVJfTkFNRT0kR0lUX0FVVEhPUl9OQU1FICYmCitleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9DT01NSVRURVJfTkFNRQpkaWZmIC0tZ2l0IGEvdC90MzkwMS91dGY4LnR4dCBiL3QvdDM5MDEvdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWY1MjA1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDEvdXRmOC50eHQKQEAgLTAsMCArMSw0IEBACis6IHRvIGJlIHNvdXJjZWQgaW4gdDM5MDEgLS0gdGhpcyBpcyB1dGY4CitHSVRfQVVUSE9SX05BTUU9IsOBw6nDrSDDs8O6IiAmJgorR0lUX0NPTU1JVFRFUl9OQU1FPSRHSVRfQVVUSE9SX05BTUUgJiYKK2V4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0NPTU1JVFRFUl9OQU1FCmRpZmYgLS1naXQgYS90L3QzOTAyLXF1b3RlZC5zaCBiL3QvdDM5MDItcXVvdGVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1MjgwMDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAyLXF1b3RlZC5zaApAQCAtMCwwICsxLDE1MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdxdW90ZWQgb3V0cHV0JworCisuIC4vdGVzdC1saWIuc2gKKworRk49J+a/semHjicKK0dOPSfntJQnCitIVD0nCScKK0RRPSciJworCit0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXIHx8CitlY2hvIGZvbyAyPi9kZXYvbnVsbCA+ICJOYW1lIGFuZCBhbiR7SFR9SFQiCitpZiAhIHRlc3QgLWYgIk5hbWUgYW5kIGFuJHtIVH1IVCIKK3RoZW4KKwkjIEZBVC9OVEZTIGRvZXMgbm90IGFsbG93IHRhYnMgaW4gZmlsZW5hbWVzCisJc2tpcF9hbGw9J1lvdXIgZmlsZXN5c3RlbSBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcycKKwl0ZXN0X2RvbmUKK2ZpCisKK2Zvcl9lYWNoX25hbWUgKCkgeworCWZvciBuYW1lIGluIFwKKwkgICAgTmFtZSAiTmFtZSBhbmQgYSR7TEZ9TEYiICJOYW1lIGFuZCBhbiR7SFR9SFQiICJOYW1lJHtEUX0iIFwKKwkgICAgIiRGTiRIVCRHTiIgIiRGTiRMRiRHTiIgIiRGTiAkR04iICIkRk4kR04iICIkRk4kRFEkR04iIFwKKwkgICAgIldpdGggU1AgaW4gaXQiICIkRk4vZmlsZSIKKwlkbworCQlldmFsICIkMSIKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAiJEZOIiAmJgorCWZvcl9lYWNoX25hbWUgImVjaG8gaW5pdGlhbCA+XCJcJG5hbWVcIiIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1xIC1tIEluaXRpYWwgJiYKKworCWZvcl9lYWNoX25hbWUgImVjaG8gc2Vjb25kID5cIlwkbmFtZVwiIiAmJgorCWdpdCBjb21taXQgLWEgLW0gU2Vjb25kICYmCisKKwlmb3JfZWFjaF9uYW1lICJlY2hvIG1vZGlmaWVkID5cIlwkbmFtZVwiIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdGVkIGZpbGVzJyAnCitjYXQgPmV4cGVjdC5xdW90ZWQgPDxcRU9GICYmCitOYW1lCisiTmFtZSBhbmQgYVxuTEYiCisiTmFtZSBhbmQgYW5cdEhUIgorIk5hbWVcIiIKK1dpdGggU1AgaW4gaXQKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTZcdFwzNDdcMjY0XDIyNCIKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTZcblwzNDdcMjY0XDIyNCIKKyJcMzQ2XDI3N1wyNjFcMzUxXDIwN1wyMTYgXDM0N1wyNjRcMjI0IgorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNlwiXDM0N1wyNjRcMjI0IgorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNi9maWxlIgorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNlwzNDdcMjY0XDIyNCIKK0VPRgorCitjYXQgPmV4cGVjdC5yYXcgPDxcRU9GCitOYW1lCisiTmFtZSBhbmQgYVxuTEYiCisiTmFtZSBhbmQgYW5cdEhUIgorIk5hbWVcIiIKK1dpdGggU1AgaW4gaXQKKyLmv7Hph45cdOe0lCIKKyLmv7Hph45cbue0lCIKK+a/semHjiDntJQKKyLmv7Hph45cIue0lCIKK+a/semHji9maWxlCivmv7Hph47ntJQKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gbHMtZmlsZXMnICcKKworCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJiB0ZXN0X2NtcCBleHBlY3QucXVvdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi1maWxlcycgJworCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucXVvdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi1pbmRleCcgJworCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5xdW90ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBkaWZmLXRyZWUnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUReIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucXVvdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gbHMtdHJlZScgJworCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgLXIgSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5xdW90ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgY29yZS5xdW90ZXBhdGgnICcKKworCWdpdCBjb25maWcgLS1ib29sIGNvcmUucXVvdGVwYXRoIGZhbHNlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGxzLWZpbGVzJyAnCisKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYgdGVzdF9jbXAgZXhwZWN0LnJhdyBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGRpZmYtZmlsZXMnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJhdyBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGRpZmYtaW5kZXgnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmF3IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi10cmVlJyAnCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEXiBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJhdyBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGxzLXRyZWUnICcKKworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmF3IGN1cnJlbnQKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDMtc3Rhc2guc2ggYi90L3QzOTAzLXN0YXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhZDIzZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAzLXN0YXNoLnNoCkBAIC0wLDAgKzEsMTI5MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgc3Rhc2gnCisKKy4gLi90ZXN0LWxpYi5zaAorCitkaWZmX2NtcCAoKSB7CisJZm9yIGkgaW4gIiQxIiAiJDIiCisJZG8KKwkJc2VkIC1lICdzL15pbmRleCAwMDAwMDAwXC5cLlswLTlhLWZdKi9pbmRleCAwMDAwMDAwLi4xMjM0NTY3LycgXAorCQktZSAncy9eaW5kZXggWzAtOWEtZl0qXC5cLlswLTlhLWZdKi9pbmRleCAxMjM0NTY3Li44OWFiY2RlLycgXAorCQktZSAncy9eaW5kZXggWzAtOWEtZl0qLFswLTlhLWZdKlwuXC5bMC05YS1mXSovaW5kZXggMTIzNDU2Nyw3NjU0MzIxLi44OWFiY2RlLycgXAorCQkiJGkiID4iJGkuY29tcGFyZSIgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJdGVzdF9jbXAgIiQxLmNvbXBhcmUiICIkMi5jb21wYXJlIiAmJgorCXJtIC1mICIkMS5jb21wYXJlIiAiJDIuY29tcGFyZSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc29tZSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeScgJworCWVjaG8gMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gdW5yZWxhdGVkID5vdGhlci1maWxlICYmCisJZ2l0IGFkZCBvdGhlci1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAzID5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCitpbmRleCAwY2ZiZjA4Li4wMDc1MGVkIDEwMDY0NAorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEgKzEgQEAKKy0yCisrMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcmVudHMgb2Ygc3Rhc2gnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBzdGFzaF4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGRpZmYgc3Rhc2heMi4uc3Rhc2ggPm91dHB1dCAmJgorCWRpZmZfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHlpbmcgYm9ndXMgc3Rhc2ggZG9lcyBub3RoaW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5IHN0YXNoQHsxfSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZG9lcyBub3QgbmVlZCBjbGVhbiB3b3JraW5nIGRpcmVjdG9yeScgJworCWVjaG8gNCA+b3RoZXItZmlsZSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCWVjaG8gMyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZG9lcyBub3QgY2xvYmJlciB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gNCA+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSAmJgorCWVjaG8gNCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc3Rhc2hlZCBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gNSA+b3RoZXItZmlsZSAmJgorCWdpdCBhZGQgb3RoZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb3RoZXItZmlsZSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc3Rhc2hlZCBjaGFuZ2VzIChpbmNsdWRpbmcgaW5kZXgpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWVjaG8gNiA+b3RoZXItZmlsZSAmJgorCWdpdCBhZGQgb3RoZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb3RoZXItZmlsZSAmJgorCWdpdCBzdGFzaCBhcHBseSAtLWluZGV4ICYmCisJdGVzdCAzID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDIgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnN0YXNoaW5nIGluIGEgc3ViZGlyZWN0b3J5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJbWtkaXIgc3ViZGlyICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHN0YXNoIGFwcGx5CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBkcm9wIGNvbXBsYWlucyBvZiBleHRyYSBvcHRpb25zJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3AgLS1mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcCB0b3Agc3Rhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGxpc3QgPmV4cGVjdGVkICYmCisJZWNobyA3ID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGRyb3AgJiYKKwlnaXQgc3Rhc2ggbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCAzID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wIG1pZGRsZSBzdGFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIDggPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwllY2hvIDkgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggZHJvcCBzdGFzaEB7MX0gJiYKKwl0ZXN0IDIgPSAkKGdpdCBzdGFzaCBsaXN0IHwgd2MgLWwpICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCA5ID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggZHJvcCAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcCBtaWRkbGUgc3Rhc2ggYnkgaW5kZXgnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA4ID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyA5ID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGRyb3AgMSAmJgorCXRlc3QgMiA9ICQoZ2l0IHN0YXNoIGxpc3QgfCB3YyAtbCkgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IDkgPSAkKGNhdCBmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgOmZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyBIRUFEOmZpbGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBkcm9wICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCAzID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBwb3AnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkgJiYKKwl0ZXN0IDAgPSAkKGdpdCBzdGFzaCBsaXN0IHwgd2MgLWwpCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFmZTkxMmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxIEBACisrYmFyMgorRU9GCisKK2NhdCA+ZXhwZWN0MSA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCitpbmRleCAyNTdjYzU2Li41NzE2Y2E1IDEwMDY0NAorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEgKzEgQEAKKy1mb28KKytiYXIKK0VPRgorCitjYXQgPmV4cGVjdDIgPDxFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggNzYwMTgwNy4uNTcxNmNhNSAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xICsxIEBACistYmF6CisrYmFyCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFmZTkxMmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxIEBACisrYmFyMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGJyYW5jaCcgJworCWVjaG8gZm9vID5maWxlICYmCisJZ2l0IGNvbW1pdCBmaWxlIC1tIGZpcnN0ICYmCisJZWNobyBiYXIgPmZpbGUgJiYKKwllY2hvIGJhcjIgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBzdGFzaCAmJgorCWVjaG8gYmF6ID5maWxlICYmCisJZ2l0IGNvbW1pdCBmaWxlIC1tIHNlY29uZCAmJgorCWdpdCBzdGFzaCBicmFuY2ggc3Rhc2hicmFuY2ggJiYKKwl0ZXN0IHJlZnMvaGVhZHMvc3Rhc2hicmFuY2ggPSAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeKSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5vdXRwdXQgJiYKKwlkaWZmX2NtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCWRpZmZfY21wIGV4cGVjdDEgb3V0cHV0ICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBhbHRlcm5hdGVcIHNlY29uZCAmJgorCWdpdCBkaWZmIG1hc3Rlci4uc3Rhc2hicmFuY2ggPm91dHB1dCAmJgorCWRpZmZfY21wIG91dHB1dCBleHBlY3QyICYmCisJdGVzdCAwID0gJChnaXQgc3Rhc2ggbGlzdCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtcSBpcyBxdWlldCcgJworCWVjaG8gZm9vID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGFwcGx5IC1xID5vdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYXZlIC1xIGlzIHF1aWV0JyAnCisJZ2l0IHN0YXNoIHNhdmUgLS1xdWlldCA+b3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIHdvcmtzIGFuZCBpcyBxdWlldCcgJworCWdpdCBzdGFzaCBwb3AgLXEgPm91dHB1dC5vdXQgMj4mMSAmJgorCWVjaG8gYmFyID5leHBlY3QgJiYKKwlnaXQgc2hvdyA6ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BvcCAtcSAtLWluZGV4IHdvcmtzIGFuZCBpcyBxdWlldCcgJworCWVjaG8gZm9vID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IHN0YXNoIHNhdmUgLS1xdWlldCAmJgorCWdpdCBzdGFzaCBwb3AgLXEgLS1pbmRleCA+b3V0cHV0Lm91dCAyPiYxICYmCisJZ2l0IGRpZmYtZmlsZXMgZmlsZTIgPmZpbGUyLmRpZmYgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZmlsZTIuZGlmZiAmJgorCXRlc3QgZm9vID0gIiQoZ2l0IHNob3cgOmZpbGUpIiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgLXEgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggZHJvcCAtcSA+b3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLWsnICcKKwllY2hvIGJhcjMgPmZpbGUgJiYKKwllY2hvIGJhcjQgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBzdGFzaCAtayAmJgorCXRlc3QgYmFyLGJhcjQgPSAkKGNhdCBmaWxlKSwkKGNhdCBmaWxlMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS1uby1rZWVwLWluZGV4JyAnCisJZWNobyBiYXIzMyA+ZmlsZSAmJgorCWVjaG8gYmFyNDQgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBzdGFzaCAtLW5vLWtlZXAtaW5kZXggJiYKKwl0ZXN0IGJhcixiYXIyID0gJChjYXQgZmlsZSksJChjYXQgZmlsZTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvbnQgYXNzdW1lIHB1c2ggd2l0aCBub24tb3B0aW9uIGFyZ3MnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggLXEgZHJvcCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgInN1YmNvbW1hbmQgd2FzbidcJyd0IHNwZWNpZmllZDsgJ1wnJ3B1c2gnXCcnIGNhbidcJyd0IGJlIGFzc3VtZWQgZHVlIHRvIHVuZXhwZWN0ZWQgdG9rZW4gJ1wnJ2Ryb3AnXCcnIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS1pbnZhbGlkLW9wdGlvbicgJworCWVjaG8gYmFyNSA+ZmlsZSAmJgorCWVjaG8gYmFyNiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIC0taW52YWxpZC1vcHRpb24gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2F2ZSAtLWludmFsaWQtb3B0aW9uICYmCisJdGVzdCBiYXI1LGJhcjYgPSAkKGNhdCBmaWxlKSwkKGNhdCBmaWxlMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYW4gYWRkZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIG5ldyA+ZmlsZTMgJiYKKwlnaXQgYWRkIGZpbGUzICYmCisJZ2l0IHN0YXNoIHNhdmUgImFkZGVkIGZpbGUiICYmCisJISB0ZXN0IC1yIGZpbGUzICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCBuZXcgPSAiJChjYXQgZmlsZTMpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtLWludGVudC10by1hZGQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIG5ldyA+ZmlsZTQgJiYKKwlnaXQgYWRkIC0taW50ZW50LXRvLWFkZCBmaWxlNCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC1mIGZpbGU0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBybSB0aGVuIHJlY3JlYXRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBybSBmaWxlICYmCisJZWNobyBiYXI3ID5maWxlICYmCisJZ2l0IHN0YXNoIHNhdmUgInJtIHRoZW4gcmVjcmVhdGUiICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCBiYXI3ID0gIiQoY2F0IGZpbGUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBybSBhbmQgaWdub3JlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBybSBmaWxlICYmCisJZWNobyBmaWxlID4uZ2l0aWdub3JlICYmCisJZ2l0IHN0YXNoIHNhdmUgInJtIGFuZCBpZ25vcmUiICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJdGVzdCBmaWxlID0gIiQoY2F0IC5naXRpZ25vcmUpIiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCSEgdGVzdCAtciBmaWxlICYmCisJdGVzdCBmaWxlID0gIiQoY2F0IC5naXRpZ25vcmUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBybSBhbmQgaWdub3JlIChzdGFnZSAuZ2l0aWdub3JlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZSAmJgorCWVjaG8gZmlsZSA+LmdpdGlnbm9yZSAmJgorCWdpdCBhZGQgLmdpdGlnbm9yZSAmJgorCWdpdCBzdGFzaCBzYXZlICJybSBhbmQgaWdub3JlIChzdGFnZSAuZ2l0aWdub3JlKSIgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwkhIHRlc3QgLXIgLmdpdGlnbm9yZSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCSEgdGVzdCAtciBmaWxlICYmCisJdGVzdCBmaWxlID0gIiQoY2F0IC5naXRpZ25vcmUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdGFzaCBmaWxlIHRvIHN5bWxpbmsnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gZmlsZSAmJgorCWxuIC1zIGZpbGUyIGZpbGUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAiZmlsZSB0byBzeW1saW5rIiAmJgorCXRlc3QgLWYgZmlsZSAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCWNhc2UgIiQobHMgLWwgZmlsZSkiIGluICoiIGZpbGUgLT4gZmlsZTIiKSA6OzsgKikgZmFsc2U7OyBlc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N0YXNoIGZpbGUgdG8gc3ltbGluayAoc3RhZ2Ugcm0pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBybSBmaWxlICYmCisJbG4gLXMgZmlsZTIgZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJmaWxlIHRvIHN5bWxpbmsgKHN0YWdlIHJtKSIgJiYKKwl0ZXN0IC1mIGZpbGUgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwljYXNlICIkKGxzIC1sIGZpbGUpIiBpbiAqIiBmaWxlIC0+IGZpbGUyIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdGFzaCBmaWxlIHRvIHN5bWxpbmsgKGZ1bGwgc3RhZ2UpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGZpbGUgJiYKKwlsbiAtcyBmaWxlMiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IHN0YXNoIHNhdmUgImZpbGUgdG8gc3ltbGluayAoZnVsbCBzdGFnZSkiICYmCisJdGVzdCAtZiBmaWxlICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJY2FzZSAiJChscyAtbCBmaWxlKSIgaW4gKiIgZmlsZSAtPiBmaWxlMiIpIDo7OyAqKSBmYWxzZTs7IGVzYWMKKycKKworIyBUaGlzIHRlc3QgY3JlYXRlcyBhIGNvbW1pdCB3aXRoIGEgc3ltbGluayB1c2VkIGZvciB0aGUgZm9sbG93aW5nIHRlc3RzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHN5bWxpbmsgdG8gZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2xuX3NfYWRkIGZpbGUgZmlsZWxpbmsgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgc3ltbGluayIgJiYKKwlybSBmaWxlbGluayAmJgorCWNwIGZpbGUgZmlsZWxpbmsgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAic3ltbGluayB0byBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd0aGlzIG11c3QgaGF2ZSByZS1jcmVhdGVkIHRoZSBzeW1saW5rJyAnCisJdGVzdCAtaCBmaWxlbGluayAmJgorCWNhc2UgIiQobHMgLWwgZmlsZWxpbmspIiBpbiAqIiBmaWxlbGluayAtPiBmaWxlIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnN0YXNoIG11c3QgcmUtY3JlYXRlIHRoZSBmaWxlJyAnCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1oIGZpbGVsaW5rICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHN5bWxpbmsgdG8gZmlsZSAoc3RhZ2Ugcm0pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBybSBmaWxlbGluayAmJgorCWNwIGZpbGUgZmlsZWxpbmsgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAic3ltbGluayB0byBmaWxlIChzdGFnZSBybSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3RoaXMgbXVzdCBoYXZlIHJlLWNyZWF0ZWQgdGhlIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGZpbGVsaW5rICYmCisJY2FzZSAiJChscyAtbCBmaWxlbGluaykiIGluICoiIGZpbGVsaW5rIC0+IGZpbGUiKSA6OzsgKikgZmFsc2U7OyBlc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3Rhc2ggbXVzdCByZS1jcmVhdGUgdGhlIGZpbGUnICcKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwkhIHRlc3QgLWggZmlsZWxpbmsgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc3ltbGluayB0byBmaWxlIChmdWxsIHN0YWdlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSBmaWxlbGluayAmJgorCWNwIGZpbGUgZmlsZWxpbmsgJiYKKwlnaXQgYWRkIGZpbGVsaW5rICYmCisJZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSAoZnVsbCBzdGFnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3RoaXMgbXVzdCBoYXZlIHJlLWNyZWF0ZWQgdGhlIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGZpbGVsaW5rICYmCisJY2FzZSAiJChscyAtbCBmaWxlbGluaykiIGluICoiIGZpbGVsaW5rIC0+IGZpbGUiKSA6OzsgKikgZmFsc2U7OyBlc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3Rhc2ggbXVzdCByZS1jcmVhdGUgdGhlIGZpbGUnICcKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwkhIHRlc3QgLWggZmlsZWxpbmsgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc3Rhc2ggZGlyZWN0b3J5IHRvIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbWtkaXIgZGlyICYmCisJZWNobyBmb28gPmRpci9maWxlICYmCisJZ2l0IGFkZCBkaXIvZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBmaWxlIGluIGRpciIgJiYKKwlybSAtZnIgZGlyICYmCisJZWNobyBiYXIgPmRpciAmJgorCWdpdCBzdGFzaCBzYXZlICJkaXJlY3RvcnkgdG8gZmlsZSIgJiYKKwl0ZXN0IC1kIGRpciAmJgorCXRlc3QgZm9vID0gIiQoY2F0IGRpci9maWxlKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBkaXIpIiAmJgorCWdpdCByZXNldCAtLXNvZnQgSEVBRF4KKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc3Rhc2ggZmlsZSB0byBkaXJlY3RvcnknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gZmlsZSAmJgorCW1rZGlyIGZpbGUgJiYKKwllY2hvIGZvbyA+ZmlsZS9maWxlICYmCisJZ2l0IHN0YXNoIHNhdmUgImZpbGUgdG8gZGlyZWN0b3J5IiAmJgorCXRlc3QgLWYgZmlsZSAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgLWYgZmlsZS9maWxlICYmCisJdGVzdCBmb28gPSAiJChjYXQgZmlsZS9maWxlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2aW5nIHRvbyBtYW55IHJlZiBhcmd1bWVudHMgZG9lcyBub3QgbW9kaWZ5IGZpbGVzJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZWNobyBmb28gPmZpbGUyICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyBiYXIgPmZpbGUyICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdC10b29sIGNobXRpbWUgPTEyMzQ1Njc4OSBmaWxlMiAmJgorCWZvciB0eXBlIGluIGFwcGx5IHBvcCAiYnJhbmNoIHN0YXNoLWJyYW5jaCIKKwlkbworCQl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggJHR5cGUgc3Rhc2hAezB9IHN0YXNoQHsxfSAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJUb28gbWFueSByZXZpc2lvbnMiIGVyciAmJgorCQl0ZXN0IDEyMzQ1Njc4OSA9ICQodGVzdC10b29sIGNobXRpbWUgLWcgZmlsZTIpIHx8IHJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wOiB0b28gbWFueSBhcmd1bWVudHMgZXJyb3JzIG91dCAoZG9lcyBub3RoaW5nKScgJworCWdpdCBzdGFzaCBsaXN0ID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCBzdGFzaEB7MH0gc3Rhc2hAezF9IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiVG9vIG1hbnkgcmV2aXNpb25zIiBlcnIgJiYKKwlnaXQgc3Rhc2ggbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93OiB0b28gbWFueSBhcmd1bWVudHMgZXJyb3JzIG91dCAoZG9lcyBub3RoaW5nKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzaG93IHN0YXNoQHswfSBzdGFzaEB7MX0gMj5lcnIgMT5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJUb28gbWFueSByZXZpc2lvbnMiIGVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggY3JlYXRlIC0gbm8gY2hhbmdlcycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEIiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggY3JlYXRlID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGJyYW5jaCAtIG5vIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj5maWxlICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggYnJhbmNoIHN0YXNoLWJyYW5jaCAke1NUQVNIX0lEfSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1EIHN0YXNoLWJyYW5jaCIgJiYKKwl0ZXN0ICQoZ2l0IGxzLWZpbGVzIC0tbW9kaWZpZWQgfCB3YyAtbCkgLWVxIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYnJhbmNoIC0gc3Rhc2hlcyBvbiBzdGFjaywgc3Rhc2gtbGlrZSBhcmd1bWVudCcgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEIiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGZvbyA+PmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+ZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGJyYW5jaCBzdGFzaC1icmFuY2ggJHtTVEFTSF9JRH0gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBzdGFzaC1icmFuY2giICYmCisJdGVzdCAkKGdpdCBscy1maWxlcyAtLW1vZGlmaWVkIHwgd2MgLWwpIC1lcSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGJyYW5jaCBjb21wbGFpbnMgd2l0aCBubyBhcmd1bWVudHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYnJhbmNoIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyBmb3JtYXQgZGVmYXVsdHMgdG8gLS1zdGF0JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJZWNobyBiYXIgPj5maWxlICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCSBmaWxlIHwgMSArCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCUVPRgorCWdpdCBzdGFzaCBzaG93ICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLSBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJZWNobyBiYXIgPj5maWxlICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvICIxCTAJZmlsZSIgPmV4cGVjdGVkICYmCisJZ2l0IHN0YXNoIHNob3cgLS1udW1zdGF0ICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyAtcCAtIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgc3Rhc2ggZHJvcCIgJiYKKwllY2hvIGJhciA+PmZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJaW5kZXggNzYwMTgwNy4uOTM1ZmJkMyAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxLDIgQEAKKwkgYmF6CisJK2JhcgorCUVPRgorCWdpdCBzdGFzaCBzaG93IC1wICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwlkaWZmX2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyAtIG5vIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj5maWxlICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvICIxCTAJZmlsZSIgPmV4cGVjdGVkICYmCisJZ2l0IHN0YXNoIHNob3cgLS1udW1zdGF0ICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyAtcCAtIG5vIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj5maWxlICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorCWluZGV4IDc2MDE4MDcuLjcxYjUyYzQgMTAwNjQ0CisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSArMSwyIEBACisJIGJhegorCStmb28KKwlFT0YKKwlnaXQgc3Rhc2ggc2hvdyAtcCAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLS1wYXRpZW5jZSBzaG93cyBkaWZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+ZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKKwlpbmRleCA3NjAxODA3Li43MWI1MmM0IDEwMDY0NAorCS0tLSBhL2ZpbGUKKwkrKysgYi9maWxlCisJQEAgLTEgKzEsMiBAQAorCSBiYXoKKwkrZm9vCisJRU9GCisJZ2l0IHN0YXNoIHNob3cgLS1wYXRpZW5jZSAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJZGlmZl9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3A6IGZhaWwgZWFybHkgaWYgc3BlY2lmaWVkIHN0YXNoIGlzIG5vdCBhIHN0YXNoIHJlZicgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmIGdpdCBzdGFzaCBjbGVhciIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwllY2hvIGJhciA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wICQoZ2l0IHJldi1wYXJzZSBzdGFzaEB7MH0pICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3A6IGZhaWwgZWFybHkgaWYgc3BlY2lmaWVkIHN0YXNoIGlzIG5vdCBhIHN0YXNoIHJlZicgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmIGdpdCBzdGFzaCBjbGVhciIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwllY2hvIGJhciA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwb3AgJChnaXQgcmV2LXBhcnNlIHN0YXNoQHswfSkgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiB3aXRoIG5vbi1leGlzdGVudCByZWZsb2cnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwllY2hvIGJhcjUgPmZpbGUgJiYKKwllY2hvIGJhcjYgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wIGRvZXMtbm90LWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3AgZG9lcy1ub3QtZXhpc3RAezB9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHBvcCBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwb3AgZG9lcy1ub3QtZXhpc3RAezB9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5IGRvZXMtbm90LWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5IGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzaG93IGRvZXMtbm90LWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHNob3cgZG9lcy1ub3QtZXhpc3RAezB9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCB0bXAgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYnJhbmNoIHRtcCBkb2VzLW5vdC1leGlzdEB7MH0gJiYKKwlnaXQgc3Rhc2ggZHJvcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHJlZiBvZiB0aGUgZm9ybSBzdGFzaEB7bn0sIG4gPj0gTicgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wIHN0YXNoQHswfSAmJgorCWVjaG8gYmFyNSA+ZmlsZSAmJgorCWVjaG8gYmFyNiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3Agc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHBvcCBzdGFzaEB7MX0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHNob3cgc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCB0bXAgc3Rhc2hAezF9ICYmCisJZ2l0IHN0YXNoIGRyb3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCByZWYgb2YgdGhlIGZvcm0gIm4iLCBuID49IE4nICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCAwICYmCisJZWNobyBiYXI1ID5maWxlICYmCisJZWNobyBiYXI2ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCAxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHBvcCAxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5IDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2hvdyAxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCB0bXAgMSAmJgorCWdpdCBzdGFzaCBkcm9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIHJlZiBvZiB0aGUgZm9ybSAibiIsIG4gPCBOJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZWNobyBiYXI1ID5maWxlICYmCisJZWNobyBiYXI2ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggc2hvdyAwICYmCisJZ2l0IHN0YXNoIGJyYW5jaCB0bXAgMCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggYXBwbHkgMCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggcG9wIDAgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggZHJvcCAwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoOiBkbyBub3QgZHJvcCB0aGUgc3Rhc2ggaWYgdGhlIGJyYW5jaCBleGlzdHMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwllY2hvIGZvbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gYmFyID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCBtYXN0ZXIgc3Rhc2hAezB9ICYmCisJZ2l0IHJldi1wYXJzZSBzdGFzaEB7MH0gLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoOiBzaG91bGQgbm90IGRyb3AgdGhlIHN0YXNoIGlmIHRoZSBhcHBseSBmYWlscycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCBIRUFEfjEgLS1oYXJkICYmCisJZWNobyBmb28gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIGJhciA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWVjaG8gYmF6ID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBicmFuY2ggbmV3X2JyYW5jaCBzdGFzaEB7MH0gJiYKKwlnaXQgcmV2LXBhcnNlIHN0YXNoQHswfSAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseTogc2hvdyBzYW1lIHN0YXR1cyBhcyBnaXQgc3RhdHVzIChyZWxhdGl2ZSB0byAuLyknICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwllY2hvIDEgPnN1YmRpci9zdWJmaWxlMSAmJgorCWVjaG8gMiA+c3ViZGlyL3N1YmZpbGUyICYmCisJZ2l0IGFkZCBzdWJkaXIvc3ViZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIHN1YmRpciAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWVjaG8geCA+c3ViZmlsZTEgJiYKKwkJZWNobyB4ID4uLi9maWxlICYmCisJCWdpdCBzdGF0dXMgPi4uL2V4cGVjdCAmJgorCQlnaXQgc3Rhc2ggJiYKKwkJc2FuZV91bnNldCBHSVRfTUVSR0VfVkVSQk9TSVRZICYmCisJCWdpdCBzdGFzaCBhcHBseQorCSkgfAorCXNlZCAtZSAxZCA+YWN0dWFsICYmICMgZHJvcCAiU2F2ZWQuLi4iCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9IRUFEIGIvSEVBRAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmZlMGNiZWUKKy0tLSAvZGV2L251bGwKKysrKyBiL0hFQUQKK0BAIC0wLDAgKzEgQEAKKytmaWxlLW5vdC1hLXJlZgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHdoZXJlIHdvcmtpbmcgZGlyZWN0b3J5IGNvbnRhaW5zICJIRUFEIiBmaWxlJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZmlsZS1ub3QtYS1yZWYgPkhFQUQgJiYKKwlnaXQgYWRkIEhFQUQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHN0YXNoXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwlnaXQgZGlmZiBzdGFzaF4uLnN0YXNoID5vdXRwdXQgJiYKKwlkaWZmX2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3JlIGNhbGxlZCB3aXRoIGludmFsaWQgY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHN0b3JlIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9yZSB1cGRhdGVzIHN0YXNoIHJlZiBhbmQgcmVmbG9nJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gcXV1eCA+YmF6enkgJiYKKwlnaXQgYWRkIGJhenp5ICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXp6eSAmJgorCWdpdCBzdGFzaCBzdG9yZSAtbSBxdXV4ZXJ5ICRTVEFTSF9JRCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHN0YXNoKSA9ICRTVEFTSF9JRCAmJgorCWdpdCByZWZsb2cgLS1mb3JtYXQ9JUggc3Rhc2h8IGdyZXAgJFNUQVNIX0lEICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCWdyZXAgcXV1eCBiYXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGUgc3Rhc2ggc3BlY2lmaWNhdGlvbiB3aXRoIHNwYWNlcycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWVjaG8gcGlnID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJc3RhbXA9JChnaXQgbG9nIC1nIC0tZm9ybWF0PSIlY2QiIC0xIHJlZnMvc3Rhc2gpICYmCisJdGVzdF90aWNrICYmCisJZWNobyBjb3cgPmZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggYXBwbHkgInN0YXNoQHskc3RhbXB9IiAmJgorCWdyZXAgcGlnIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3Rhc2ggd2l0aCBpbmRleCBhbmQgd29ya3RyZWUgY2hhbmdlcycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGluZGV4ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyB3b3JraW5nID5maWxlICYmCisJZ2l0IHN0YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGxpc3QgaW1wbGllcyAtLWZpcnN0LXBhcmVudCAtbScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXN0YXNoQHswfQorCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJaW5kZXggMjU3Y2M1Ni4uZDI2YjMzZCAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxIEBACisJLWZvbworCSt3b3JraW5nCisJRU9GCisJZ2l0IHN0YXNoIGxpc3QgLS1mb3JtYXQ9JWdkIC1wID5hY3R1YWwgJiYKKwlkaWZmX2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGxpc3QgLS1jYyBzaG93cyBjb21iaW5lZCBkaWZmJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXN0YXNoQHswfQorCisJZGlmZiAtLWNjIGZpbGUKKwlpbmRleCAyNTdjYzU2LDkwMTVhN2EuLmQyNmIzM2QKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAQCAtMSwxIC0xLDEgKzEsMSBAQEAKKwktIGZvbworCSAtaW5kZXgKKwkrK3dvcmtpbmcKKwlFT0YKKwlnaXQgc3Rhc2ggbGlzdCAtLWZvcm1hdD0lZ2QgLXAgLS1jYyA+YWN0dWFsICYmCisJZGlmZl9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBpcyBub3QgY29uZnVzZWQgYnkgcGFydGlhbCByZW5hbWVzJyAnCisJbXYgZmlsZSByZW5hbWVkICYmCisJZ2l0IGFkZCByZW5hbWVkICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVuYW1lZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtbSBzaG93cyByaWdodCBtZXNzYWdlJyAnCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHN0YXNoIHB1c2ggLW0gInRlc3QgbWVzc2FnZSIgJiYKKwllY2hvICJzdGFzaEB7MH06IE9uIG1hc3RlcjogdGVzdCBtZXNzYWdlIiA+ZXhwZWN0ICYmCisJZ2l0IHN0YXNoIGxpc3QgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtbSBhbHNvIHdvcmtzIHdpdGhvdXQgc3BhY2UnICcKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgc3Rhc2ggcHVzaCAtbSJ1bnNwYWNlZCB0ZXN0IG1lc3NhZ2UiICYmCisJZWNobyAic3Rhc2hAezB9OiBPbiBtYXN0ZXI6IHVuc3BhY2VkIHRlc3QgbWVzc2FnZSIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0b3JlIC1tIGZvbyBzaG93cyByaWdodCBtZXNzYWdlJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gcXV1eCA+YmF6enkgJiYKKwlnaXQgYWRkIGJhenp5ICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCBzdGFzaCBzdG9yZSAtbSAic3RvcmUgbSIgJFNUQVNIX0lEICYmCisJZWNobyAic3Rhc2hAezB9OiBzdG9yZSBtIiA+ZXhwZWN0ICYmCisJZ2l0IHN0YXNoIGxpc3QgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcmUgLW1mb28gc2hvd3MgcmlnaHQgbWVzc2FnZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHF1dXggPmJhenp5ICYmCisJZ2l0IGFkZCBiYXp6eSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgc3Rhc2ggc3RvcmUgLW0ic3RvcmUgbWZvbyIgJFNUQVNIX0lEICYmCisJZWNobyAic3Rhc2hAezB9OiBzdG9yZSBtZm9vIiA+ZXhwZWN0ICYmCisJZ2l0IHN0YXNoIGxpc3QgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcmUgLS1tZXNzYWdlPWZvbyBzaG93cyByaWdodCBtZXNzYWdlJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gcXV1eCA+YmF6enkgJiYKKwlnaXQgYWRkIGJhenp5ICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCBzdGFzaCBzdG9yZSAtLW1lc3NhZ2U9InN0b3JlIG1lc3NhZ2U9Zm9vIiAkU1RBU0hfSUQgJiYKKwllY2hvICJzdGFzaEB7MH06IHN0b3JlIG1lc3NhZ2U9Zm9vIiA+ZXhwZWN0ICYmCisJZ2l0IHN0YXNoIGxpc3QgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcmUgLS1tZXNzYWdlIGZvbyBzaG93cyByaWdodCBtZXNzYWdlJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gcXV1eCA+YmF6enkgJiYKKwlnaXQgYWRkIGJhenp5ICYmCisJU1RBU0hfSUQ9JChnaXQgc3Rhc2ggY3JlYXRlKSAmJgorCWdpdCBzdGFzaCBzdG9yZSAtLW1lc3NhZ2UgInN0b3JlIG1lc3NhZ2UgZm9vIiAkU1RBU0hfSUQgJiYKKwllY2hvICJzdGFzaEB7MH06IHN0b3JlIG1lc3NhZ2UgZm9vIiA+ZXhwZWN0ICYmCisJZ2l0IHN0YXNoIGxpc3QgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtbWZvbyB1c2VzIHJpZ2h0IG1lc3NhZ2UnICcKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgc3Rhc2ggcHVzaCAtbSJ0ZXN0IG1mb28iICYmCisJZWNobyAic3Rhc2hAezB9OiBPbiBtYXN0ZXI6IHRlc3QgbWZvbyIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1tZXNzYWdlIGZvbyBpcyBzeW5vbnltIGZvciAtbWZvbycgJworCT5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBzdGFzaCBwdXNoIC0tbWVzc2FnZSAidGVzdCBtZXNzYWdlIGZvbyIgJiYKKwllY2hvICJzdGFzaEB7MH06IE9uIG1hc3RlcjogdGVzdCBtZXNzYWdlIGZvbyIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1tZXNzYWdlPWZvbyBpcyBzeW5vbnltIGZvciAtbWZvbycgJworCT5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBzdGFzaCBwdXNoIC0tbWVzc2FnZT0idGVzdCBtZXNzYWdlPWZvbyIgJiYKKwllY2hvICJzdGFzaEB7MH06IE9uIG1hc3RlcjogdGVzdCBtZXNzYWdlPWZvbyIgPmV4cGVjdCAmJgorCWdpdCBzdGFzaCBsaXN0IC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLW0gc2hvd3MgcmlnaHQgbWVzc2FnZScgJworCT5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBzdGFzaCBwdXNoIC1tICJ0ZXN0IG0gZm9vIiAmJgorCWVjaG8gInN0YXNoQHswfTogT24gbWFzdGVyOiB0ZXN0IG0gZm9vIiA+ZXhwZWN0ICYmCisJZ2l0IHN0YXNoIGxpc3QgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHN0b3JlcyBjb3JyZWN0IG1lc3NhZ2UnICcKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUgImNyZWF0ZSB0ZXN0IG1lc3NhZ2UiKSAmJgorCWVjaG8gIk9uIG1hc3RlcjogY3JlYXRlIHRlc3QgbWVzc2FnZSIgPmV4cGVjdCAmJgorCWdpdCBzaG93IC0tcHJldHR5PSVzIC1zICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB3aXRoIG11bHRpcGxlIGFyZ3VtZW50cyBmb3IgdGhlIG1lc3NhZ2UnICcKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUgdGVzdCB1bnRyYWNrZWQpICYmCisJZWNobyAiT24gbWFzdGVyOiB0ZXN0IHVudHJhY2tlZCIgPmV4cGVjdCAmJgorCWdpdCBzaG93IC0tcHJldHR5PSVzIC1zICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBpbiBhIGRldGFjaGVkIHN0YXRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCBIRUFEfjEgJiYKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJSEVBRF9JRD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIldJUCBvbiAobm8gYnJhbmNoKTogJHtIRUFEX0lEfSBpbml0aWFsIiA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgLS1wcmV0dHk9JXMgLXMgJHtTVEFTSF9JRH0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS0gPHBhdGhzcGVjPiBzdGFzaGVzIGFuZCByZXN0b3JlcyB0aGUgZmlsZScgJworCT5mb28gJiYKKwk+YmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJZ2l0IHN0YXNoIHB1c2ggLS0gZm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZm9vICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtLSA8cGF0aHNwZWM+IHN0YXNoZXMgaW4gc3ViZGlyZWN0b3J5JyAnCisJbWtkaXIgc3ViICYmCisJPmZvbyAmJgorCT5iYXIgJiYKKwlnaXQgYWRkIGZvbyBiYXIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3Rhc2ggcHVzaCAtLSAuLi9mb28KKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZm9vICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCB3aXRoIG11bHRpcGxlIHBhdGhzcGVjIGFyZ3VtZW50cycgJworCT5mb28gJiYKKwk+YmFyICYmCisJPmV4dHJhICYmCisJZ2l0IGFkZCBmb28gYmFyIGV4dHJhICYmCisJZ2l0IHN0YXNoIHB1c2ggLS0gZm9vIGJhciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGJhciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGV4dHJhICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhciAmJgorCXRlc3RfcGF0aF9pc19maWxlIGV4dHJhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHdpdGggZmlsZSBpbmNsdWRpbmcgJElGUyBjaGFyYWN0ZXInICcKKwk+ImZvbyBiYXIiICYmCisJPmZvbyAmJgorCT5iYXIgJiYKKwlnaXQgYWRkIGZvbyogJiYKKwlnaXQgc3Rhc2ggcHVzaCAtLSAiZm9vIGIqIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICJmb28gYmFyIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIGJhciAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiZm9vIGJhciIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2l0aCBwYXRoc3BlYyBtYXRjaGluZyBtdWx0aXBsZSBwYXRocycgJworICAgICAgIGVjaG8gb3JpZ2luYWwgPmZpbGUgJiYKKyAgICAgICBlY2hvIG9yaWdpbmFsID5vdGhlci1maWxlICYmCisgICAgICAgZ2l0IGNvbW1pdCAtbSAidHdvIiBmaWxlIG90aGVyLWZpbGUgJiYKKyAgICAgICBlY2hvIG1vZGlmaWVkID5maWxlICYmCisgICAgICAgZWNobyBtb2RpZmllZCA+b3RoZXItZmlsZSAmJgorICAgICAgIGdpdCBzdGFzaCBwdXNoIC0tICIqZmlsZSIgJiYKKyAgICAgICBlY2hvIG9yaWdpbmFsID5leHBlY3QgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorICAgICAgIHRlc3RfY21wIGV4cGVjdCBvdGhlci1maWxlICYmCisgICAgICAgZ2l0IHN0YXNoIHBvcCAmJgorICAgICAgIGVjaG8gbW9kaWZpZWQgPmV4cGVjdCAmJgorICAgICAgIHRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisgICAgICAgdGVzdF9jbXAgZXhwZWN0IG90aGVyLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcHVzaCAtcCB3aXRoIHBhdGhzcGVjIHNob3dzIG5vIGNoYW5nZXMgb25seSBvbmNlJyAnCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAidG1wIiAmJgorCWdpdCBzdGFzaCBwdXNoIC1wIGZvbyA+YWN0dWFsICYmCisJZWNobyAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIiA+ZXhwZWN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfiAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggPHBhdGhzcGVjPjogc2hvdyBubyBjaGFuZ2VzIHdoZW4gdGhlcmUgYXJlIG5vbmUnICcKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJ0bXAiICYmCisJZ2l0IHN0YXNoIHB1c2ggZm9vID5hY3R1YWwgJiYKKwllY2hvICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiID5leHBlY3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaDogPHBhdGhzcGVjPiBub3QgaW4gdGhlIHJlcG9zaXRvcnkgZXJyb3JzIG91dCcgJworCT51bnRyYWNrZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggcHVzaCB1bnRyYWNrZWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaDogLXEgaXMgcXVpZXQgd2l0aCBjaGFuZ2VzJyAnCisJPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHN0YXNoIHB1c2ggLXEgPm91dHB1dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoOiAtcSBpcyBxdWlldCB3aXRoIG5vIGNoYW5nZXMnICcKKwlnaXQgc3Rhc2ggcHVzaCAtcSA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2g6IC1xIGlzIHF1aWV0IGV2ZW4gaWYgdGhlcmUgaXMgbm8gaW5pdGlhbCBjb21taXQnICcKKwlnaXQgaW5pdCBmb29fZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiBmb29fZGlyICYmCisJKAorCQljZCBmb29fZGlyICYmCisJCT5iYXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHB1c2ggLXEgPm91dHB1dCAyPiYxICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBmaWxlcyBhcmUgbGVmdCBpbiBwbGFjZSB3aGVuIC11IGlzIG5vdCBnaXZlbicgJworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJPnVudHJhY2tlZCAmJgorCWdpdCBzdGFzaCBwdXNoIGZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2l0aG91dCB2ZXJiIHdpdGggcGF0aHNwZWMnICcKKwk+ImZvbyBiYXIiICYmCisJPmZvbyAmJgorCT5iYXIgJiYKKwlnaXQgYWRkIGZvbyogJiYKKwlnaXQgc3Rhc2ggLS0gImZvbyBiKiIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZm9vIGJhciIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgImZvbyBiYXIiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC1rIC0tIDxwYXRoc3BlYz4gbGVhdmVzIHVuc3RhZ2VkIGZpbGVzIGludGFjdCcgJworCWdpdCByZXNldCAmJgorCT5mb28gJiYKKwk+YmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAidGVzdCIgJiYKKwllY2hvICJmb28iID5mb28gJiYKKwllY2hvICJiYXIiID5iYXIgJiYKKwlnaXQgc3Rhc2ggLWsgLS0gZm9vICYmCisJdGVzdCAiIixiYXIgPSAkKGNhdCBmb28pLCQoY2F0IGJhcikgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdCBmb28sYmFyID0gJChjYXQgZm9vKSwkKGNhdCBiYXIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC0tIDxzdWJkaXI+IGxlYXZlcyB1bnRyYWNrZWQgZmlsZXMgaW4gc3ViZGlyIGludGFjdCcgJworCWdpdCByZXNldCAmJgorCT5zdWJkaXIvdW50cmFja2VkICYmCisJPnN1YmRpci90cmFja2VkMSAmJgorCT5zdWJkaXIvdHJhY2tlZDIgJiYKKwlnaXQgYWRkIHN1YmRpci90cmFja2VkKiAmJgorCWdpdCBzdGFzaCAtLSBzdWJkaXIvICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3ViZGlyL3RyYWNrZWQxICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3ViZGlyL3RyYWNrZWQyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViZGlyL3VudHJhY2tlZCAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJkaXIvdHJhY2tlZDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJkaXIvdHJhY2tlZDIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJkaXIvdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC0tIDxzdWJkaXI+IHdvcmtzIHdpdGggYmluYXJ5IGZpbGVzJyAnCisJZ2l0IHJlc2V0ICYmCisJPnN1YmRpci91bnRyYWNrZWQgJiYKKwk+c3ViZGlyL3RyYWNrZWQgJiYKKwljcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBzdWJkaXIvdHJhY2tlZC1iaW5hcnkgJiYKKwlnaXQgYWRkIHN1YmRpci90cmFja2VkKiAmJgorCWdpdCBzdGFzaCAtLSBzdWJkaXIvICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3ViZGlyL3RyYWNrZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJkaXIvdHJhY2tlZC1iaW5hcnkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWJkaXIvdW50cmFja2VkICYmCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1YmRpci90cmFja2VkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViZGlyL3RyYWNrZWQtYmluYXJ5ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViZGlyL3VudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCB3aXRoIHVzZXIubmFtZSBhbmQgdXNlci5lbWFpbCBzZXQgd29ya3MnICcKKwl0ZXN0X2NvbmZpZyB1c2VyLm5hbWUgIkEgVSBUaG9yIiAmJgorCXRlc3RfY29uZmlnIHVzZXIuZW1haWwgImEudUB0aG9yIiAmJgorCWdpdCBzdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCB3b3JrcyB3aGVuIHVzZXIubmFtZSBhbmQgdXNlci5lbWFpbCBhcmUgbm90IHNldCcgJworCWdpdCByZXNldCAmJgorCT4xICYmCisJZ2l0IGFkZCAxICYmCisJZWNobyAiJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+ZXhwZWN0ICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHNob3cgLXMgLS1mb3JtYXQ9IiVhbiA8JWFlPiIgcmVmcy9zdGFzaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCT4yICYmCisJZ2l0IGFkZCAyICYmCisJdGVzdF9jb25maWcgdXNlci51c2Vjb25maWdvbmx5IHRydWUgJiYKKwl0ZXN0X2NvbmZpZyBzdGFzaC51c2VidWlsdGluIHRydWUgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0FVVEhPUl9OQU1FICYmCisJCXNhbmVfdW5zZXQgR0lUX0FVVEhPUl9FTUFJTCAmJgorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfTkFNRSAmJgorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwkJdGVzdF91bmNvbmZpZyB1c2VyLmVtYWlsICYmCisJCXRlc3RfdW5jb25maWcgdXNlci5uYW1lICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gInNob3VsZCBmYWlsIiAmJgorCQllY2hvICJnaXQgc3Rhc2ggPGdpdEBzdGFzaD4iID5leHBlY3QgJiYKKwkJPjIgJiYKKwkJZ2l0IHN0YXNoICYmCisJCWdpdCBzaG93IC1zIC0tZm9ybWF0PSIlYW4gPCVhZT4iIHJlZnMvc3Rhc2ggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtLWtlZXAtaW5kZXggd2l0aCBmaWxlIGRlbGV0ZWQgaW4gaW5kZXggZG9lcyBub3QgcmVzdXJyZWN0IGl0IG9uIGRpc2snICcKKwl0ZXN0X2NvbW1pdCB0by1yZW1vdmUgdG8tcmVtb3ZlICYmCisJZ2l0IHJtIHRvLXJlbW92ZSAmJgorCWdpdCBzdGFzaCAtLWtlZXAtaW5kZXggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0by1yZW1vdmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYXBwbHkgc2hvdWxkIHN1Y2NlZWQgd2l0aCB1bm1vZGlmaWVkIGZpbGUnICcKKwllY2hvIGJhc2UgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCSMgbm93IHN0YXNoIGEgbW9kaWZpY2F0aW9uCisJZWNobyBtb2RpZmllZCA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCisJIyBtYWtlIHRoZSBmaWxlIHN0YXQgZGlydHkKKwljcCBmaWxlIG90aGVyICYmCisJbXYgb3RoZXIgZmlsZSAmJgorCisJZ2l0IHN0YXNoIGFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGhhbmRsZXMgc2tpcC13b3JrdHJlZSBlbnRyaWVzIG5pY2VseScgJworCXRlc3RfY29tbWl0IEEgJiYKKwllY2hvIGNoYW5nZWQgPkEudCAmJgorCWdpdCBhZGQgQS50ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgQS50ICYmCisJcm0gQS50ICYmCisJZ2l0IHN0YXNoICYmCisKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvc3Rhc2g6QS50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwNC1zdGFzaC1wYXRjaC5zaCBiL3QvdDM5MDQtc3Rhc2gtcGF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTU0NmI2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDQtc3Rhc2gtcGF0Y2guc2gKQEAgLTAsMCArMSwxMTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzdGFzaCAtcCcKKy4gLi9saWItcGF0Y2gtbW9kZS5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBzdGFzaCAtcCB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBkaXIgJiYKKwllY2hvIHBhcmVudCA+IGRpci9mb28gJiYKKwllY2hvIGR1bW15ID4gYmFyICYmCisJZWNobyBjb21taXR0ZWQgPiBIRUFEICYmCisJZ2l0IGFkZCBiYXIgZGlyL2ZvbyBIRUFEICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGRpci9mb28gaGVhZCAmJgorCWVjaG8gaW5kZXggPiBkaXIvZm9vICYmCisJZ2l0IGFkZCBkaXIvZm9vICYmCisJc2V0X2FuZF9zYXZlX3N0YXRlIGJhciBiYXJfd29yayBiYXJfaW5kZXggJiYKKwlzYXZlX2hlYWQKKycKKworIyBub3RlOiBvcmRlciBvZiBmaWxlcyB3aXRoIHVuc3RhZ2VkIGNoYW5nZXM6IEhFQUQgYmFyIGRpci9mb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJc2V0X3N0YXRlIGRpci9mb28gd29yayBpbmRleCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiBuIG4gfCB0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2F2ZSAtcCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3Rhc2ggLXAnICcKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiB5IHwgZ2l0IHN0YXNoIHNhdmUgLXAgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBjb21taXR0ZWQgSEVBRGZpbGVfaW5kZXggJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBpbmRleCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIGNvbW1pdHRlZCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgZHVtbXkgZHVtbXkgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXNoIC1wIC0tbm8ta2VlcC1pbmRleCcgJworCXNldF9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwlzZXRfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiB5IHwgZ2l0IHN0YXNoIHNhdmUgLXAgLS1uby1rZWVwLWluZGV4ICYmCisJdmVyaWZ5X3N0YXRlIEhFQUQgY29tbWl0dGVkIGNvbW1pdHRlZCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgYmFyX3dvcmsgZHVtbXkgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGFwcGx5IC0taW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJdmVyaWZ5X3N0YXRlIGJhciBkdW1teSBiYXJfaW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdGFzaCAtLW5vLWtlZXAtaW5kZXggLXAnICcKKwlzZXRfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJc2V0X3N0YXRlIGJhciBiYXJfd29yayBiYXJfaW5kZXggJiYKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJdGVzdF93cml0ZV9saW5lcyB5IG4geSB8IGdpdCBzdGFzaCBzYXZlIC0tbm8ta2VlcC1pbmRleCAtcCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIGNvbW1pdHRlZCBjb21taXR0ZWQgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQgJiYKKwl2ZXJpZnlfc3RhdGUgYmFyIGJhcl93b3JrIGR1bW15ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBhcHBseSAtLWluZGV4ICYmCisJdmVyaWZ5X3N0YXRlIEhFQUQgSEVBRGZpbGVfd29yayBIRUFEZmlsZV9pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgZHVtbXkgYmFyX2luZGV4ICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtcCAtLW5vLWtlZXAtaW5kZXggLS0gPHBhdGhzcGVjPiBkb2VzIG5vdCB1bnN0YWdlIG90aGVyIGZpbGVzJyAnCisJc2V0X3N0YXRlIEhFQUQgSEVBRGZpbGVfd29yayBIRUFEZmlsZV9pbmRleCAmJgorCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwllY2hvIHkgfCBnaXQgc3Rhc2ggcHVzaCAtcCAtLW5vLWtlZXAtaW5kZXggLS0gSEVBRCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIGNvbW1pdHRlZCBjb21taXR0ZWQgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmUgb2YgdGhpcyBtb3ZlZCBIRUFEJyAnCisJdmVyaWZ5X3NhdmVkX2hlYWQKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc3Rhc2ggLXAgd2l0aCBzcGxpdCBodW5rJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+dGVzdCA8PC1cRU9GICYmCisJYWFhCisJYmJiCisJY2NjCisJRU9GCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwljYXQgPnRlc3QgPDwtXEVPRiAmJgorCWFhYQorCWFkZGVkIGxpbmUgMQorCWJiYgorCWFkZGVkIGxpbmUgMgorCWNjYworCUVPRgorCXByaW50ZiAiJXNcbiIgcyBuIHkgcSB8CisJdGVzdF9taWdodF9mYWlsIGdpdCBzdGFzaCAtcCAyPmVycm9yICYmCisJISB0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwlncmVwICJhZGRlZCBsaW5lIDEiIHRlc3QgJiYKKwkhIGdyZXAgImFkZGVkIGxpbmUgMiIgdGVzdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2ggYi90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwNzVjN2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCkBAIC0wLDAgKzEsMjkyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIERhdmlkIENhbGR3ZWxsCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHN0YXNoIC0taW5jbHVkZS11bnRyYWNrZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgc29tZSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeScgJworCWVjaG8gMSA+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+b3V0cHV0ICYmCisJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaCBiL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRkZTNmMTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaApAQCAtMCwwICsxLDQ0MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdWYXJpb3VzIGRpZmYgZm9ybWF0dGluZyBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDA6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAwOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlta2RpciBkaXIgJiYKKwlta2RpciBkaXIyICYmCisJZm9yIGkgaW4gMSAyIDM7IGRvIGVjaG8gJGk7IGRvbmUgPmZpbGUwICYmCisJZm9yIGkgaW4gQSBCOyBkbyBlY2hvICRpOyBkb25lID5kaXIvc3ViICYmCisJY2F0IGZpbGUwID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTAgZmlsZTIgZGlyL3N1YiAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDE6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAxOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlmb3IgaSBpbiA0IDUgNjsgZG8gZWNobyAkaTsgZG9uZSA+PmZpbGUwICYmCisJZm9yIGkgaW4gQyBEOyBkbyBlY2hvICRpOyBkb25lID4+ZGlyL3N1YiAmJgorCXJtIC1mIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBmaWxlMCBmaWxlMiBkaXIvc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kJHtMRn0ke0xGfVRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuIiAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAyOjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowMjowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZm9yIGkgaW4gQSBCIEM7IGRvIGVjaG8gJGk7IGRvbmUgPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWZvciBpIGluIEUgRjsgZG8gZWNobyAkaTsgZG9uZSA+PmRpci9zdWIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGRpci9zdWIgJiYKKwlnaXQgY29tbWl0IC1tIFRoaXJkICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDM6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAzOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWZvciBpIGluIEEgQiBDOyBkbyBlY2hvICRpOyBkb25lID4+ZmlsZTAgJiYKKwlmb3IgaSBpbiAxIDI7IGRvIGVjaG8gJGk7IGRvbmUgPj5kaXIvc3ViICYmCisJY2F0IGRpci9zdWIgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTAgZGlyL3N1YiAmJgorCWdpdCBjb21taXQgLW0gU2lkZSAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA0OjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowNDowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBwdWxsIC1zIG91cnMgLiBzaWRlICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDU6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA1OjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlmb3IgaSBpbiBBIEIgQzsgZG8gZWNobyAkaTsgZG9uZSA+PmZpbGUwICYmCisJZm9yIGkgaW4gMSAyOyBkbyBlY2hvICRpOyBkb25lID4+ZGlyL3N1YiAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTAgZGlyL3N1YiAmJgorCisJbWtkaXIgZGlyMyAmJgorCWNwIGRpci9zdWIgZGlyMy9zdWIgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSArMSBkaXIzL3N1YiAmJgorCisJZ2l0IGNvbmZpZyBsb2cuc2hvd3Jvb3QgZmFsc2UgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKworCUdJVF9BVVRIT1JfREFURT0iMjAwNi0wNi0yNiAwMDowNjowMCArMDAwMCIgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDY6MDAgKzAwMDAiICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfREFURSBHSVRfQ09NTUlUVEVSX0RBVEUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmVhcnJhbmdlIGluaXRpYWwgJiYKKwlmb3IgaSBpbiBCIEE7IGRvIGVjaG8gJGk7IGRvbmUgPmRpci9zdWIgJiYKKwlnaXQgYWRkIGRpci9zdWIgJiYKKwlnaXQgY29tbWl0IC1tICJSZWFycmFuZ2VkIGxpbmVzIGluIGRpci9zdWIiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA2OjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowNjowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCWdpdCBjaGVja291dCAtYiBtb2RlIGluaXRpYWwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2htb2Q9K3ggZmlsZTAgJiYKKwlnaXQgY29tbWl0IC1tICJ1cGRhdGUgbW9kZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisKKwkjIFNhbWUgbWVyZ2UgYXMgbWFzdGVyLCBidXQgd2l0aCBwYXJlbnRzIHJldmVyc2VkLiBIaWRlIGl0IGluIGEKKwkjIHBzZXVkby1yZWYgdG8gYXZvaWQgaW1wYWN0aW5nIHRlc3RzIHdpdGggLS1hbGwuCisJY29tbWl0PSQoZWNobyByZXZlcnNlIHwKKwkJIGdpdCBjb21taXQtdHJlZSAtcCBtYXN0ZXJeMiAtcCBtYXN0ZXJeMSBtYXN0ZXJee3RyZWV9KSAmJgorCWdpdCB1cGRhdGUtcmVmIFJFVkVSU0UgJGNvbW1pdCAmJgorCisJZ2l0IGNvbmZpZyBkaWZmLnJlbmFtZXMgZmFsc2UgJiYKKworCWdpdCBzaG93LWJyYW5jaAorJworCis6IDw8XEVPRgorISBbaW5pdGlhbF0gSW5pdGlhbAorICogW21hc3Rlcl0gTWVyZ2UgYnJhbmNoICdzaWRlJworICAhIFtyZWFycmFuZ2VdIFJlYXJyYW5nZWQgbGluZXMgaW4gZGlyL3N1YgorICAgISBbc2lkZV0gU2lkZQorLS0tLQorICArICBbcmVhcnJhbmdlXSBSZWFycmFuZ2VkIGxpbmVzIGluIGRpci9zdWIKKyAtICAgW21hc3Rlcl0gTWVyZ2UgYnJhbmNoICdzaWRlJworICogKyBbc2lkZV0gU2lkZQorICogICBbbWFzdGVyXl0gVGhpcmQKKyAqICAgW21hc3Rlcn4yXSBTZWNvbmQKKysqKysgW2luaXRpYWxdIEluaXRpYWwKK0VPRgorCitwcm9jZXNzX2RpZmZzICgpIHsKKwlfeDA0PSJbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXSIgJiYKKwlfeDA3PSIkX3gwNVswLTlhLWZdWzAtOWEtZl0iICYmCisJc2VkIC1lICJzLyRPSURfUkVHRVgvJFpFUk9fT0lEL2ciIFwKKwkgICAgLWUgInMvRnJvbSAkX3g0MCAvRnJvbSAkWkVST19PSUQgLyIgXAorCSAgICAtZSAicy9mcm9tICRfeDQwKS9mcm9tICRaRVJPX09JRCkvIiBcCisJICAgIC1lICJzL2NvbW1pdCAkX3g0MFwkL2NvbW1pdCAkWkVST19PSUQvIiBcCisJICAgIC1lICJzL2NvbW1pdCAkX3g0MCAoL2NvbW1pdCAkWkVST19PSUQgKC8iIFwKKwkgICAgLWUgInMvJF94NDAgJF94NDAgJF94NDAvJFpFUk9fT0lEICRaRVJPX09JRCAkWkVST19PSUQvIiBcCisJICAgIC1lICJzLyRfeDQwICRfeDQwIC8kWkVST19PSUQgJFpFUk9fT0lEIC8iIFwKKwkgICAgLWUgInMvXiRfeDQwICRfeDQwJC8kWkVST19PSUQgJFpFUk9fT0lELyIgXAorCSAgICAtZSAicy9eJF94NDAgLyRaRVJPX09JRCAvIiBcCisJICAgIC1lICJzL14kX3g0MCQvJFpFUk9fT0lELyIgXAorCSAgICAtZSAicy8kX3gwN1wuXC4kX3gwNy9mZmZmZmZmLi5mZmZmZmZmL2ciIFwKKwkgICAgLWUgInMvJF94MDcsJF94MDdcLlwuJF94MDcvZmZmZmZmZixmZmZmZmZmLi5mZmZmZmZmL2ciIFwKKwkgICAgLWUgInMvJF94MDcgJF94MDcgJF94MDcvZmZmZmZmZiBmZmZmZmZmIGZmZmZmZmYvZyIgXAorCSAgICAtZSAicy8kX3gwNyAkX3gwNyAvZmZmZmZmZiBmZmZmZmZmIC9nIiBcCisJICAgIC1lICJzL01lcmdlOiAkX3gwNyAkX3gwNy9NZXJnZTogZmZmZmZmZiBmZmZmZmZmL2ciIFwKKwkgICAgLWUgInMvJF94MDdcLlwuXC4vZmZmZmZmZi4uLi9nIiBcCisJICAgIC1lICJzLyAkX3gwNFwuXC5cLi8gZmZmZi4uLi9nIiBcCisJICAgIC1lICJzLyAkX3gwNC8gZmZmZi9nIiBcCisJICAgICIkMSIKK30KKworVj0kKGdpdCB2ZXJzaW9uIHwgc2VkIC1lICdzL15naXQgdmVyc2lvbiAvLycgLWUgJ3MvXC4vXFwuL2cnKQord2hpbGUgcmVhZCBtYWdpYyBjbWQKK2RvCisJY2FzZSAiJG1hZ2ljIiBpbgorCScnIHwgJyMnKikKKwkJY29udGludWUgOzsKKwk6KikKKwkJbWFnaWM9JHttYWdpYyM6fQorCQlsYWJlbD0iJG1hZ2ljLSRjbWQiCisJCWNhc2UgIiRtYWdpYyIgaW4KKwkJbm9lbGxpcHNlcykgOzsKKwkJKikKKwkJCUJVRyAidW5rbm93biBtYWdpYyAkbWFnaWMiIDs7CisJCWVzYWMgOzsKKwkqKQorCQljbWQ9IiRtYWdpYyAkY21kIiBtYWdpYz0KKwkJbGFiZWw9IiRjbWQiIDs7CisJZXNhYworCXRlc3Q9JChlY2hvICIkbGFiZWwiIHwgc2VkIC1lICdzfFsvIF1bLyBdKnxffGcnKQorCXBmeD0kKHByaW50ZiAiJTA0ZCIgJHRlc3RfY291bnQpCisJZXhwZWN0PSIkVEVTVF9ESVJFQ1RPUlkvdDQwMTMvZGlmZi4kdGVzdCIKKwlhY3R1YWw9IiRwZngtZGlmZi4kdGVzdCIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCAkY21kICMgbWFnaWMgaXMgJHttYWdpYzotKG5vdCB1c2VkKX0iICcKKwkJeworCQkJZWNobyAiJCBnaXQgJGNtZCIKKwkJCWNhc2UgIiRtYWdpYyIgaW4KKwkJCSIiKQorCQkJCUdJVF9QUklOVF9TSEExX0VMTElQU0lTPXllcyBnaXQgJGNtZCA7OworCQkJbm9lbGxpcHNlcykKKwkJCQlnaXQgJGNtZCA7OworCQkJZXNhYyB8CisJCQlzZWQgLWUgInMvXlxcKC0qXFwpJFZcXCgtKlxcKVwkL1xcMWctaS10LS12LWUtci1zLWktby1uXDIvIiBcCisJCQkgICAgLWUgInMvXlxcKC4qbWl4ZWQ7IGJvdW5kYXJ5PVwiLSpcXCkkVlxcKC0qXFwpXCJcJC9cXDFnLWktdC0tdi1lLXItcy1pLW8tblwyXCIvIgorCQkJZWNobyAiXCQiCisJCX0gPiIkYWN0dWFsIiAmJgorCQlpZiB0ZXN0IC1mICIkZXhwZWN0IgorCQl0aGVuCisJCQlwcm9jZXNzX2RpZmZzICIkYWN0dWFsIiA+YWN0dWFsICYmCisJCQlwcm9jZXNzX2RpZmZzICIkZXhwZWN0IiA+ZXhwZWN0ICYmCisJCQljYXNlICRjbWQgaW4KKwkJCSpmb3JtYXQtcGF0Y2gqIHwgKi1zdGF0KikKKwkJCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbDs7CisJCQkqKQorCQkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWw7OworCQkJZXNhYyAmJgorCQkJcm0gLWYgIiRhY3R1YWwiIGFjdHVhbCBleHBlY3QKKwkJZWxzZQorCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCisJCQljcCAiJGFjdHVhbCIgIiRleHBlY3QiCisJCQlmYWxzZQorCQlmaQorCScKK2RvbmUgPDxcRU9GCitkaWZmLXRyZWUgaW5pdGlhbAorZGlmZi10cmVlIC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtciAtLWFiYnJldiBpbml0aWFsCitkaWZmLXRyZWUgLXIgLS1hYmJyZXY9NCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLS1hYmJyZXYgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZi10cmVlIC0tcm9vdCAtLWFiYnJldiBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLXIgLS1hYmJyZXYgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldiBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1yIC0tYWJicmV2PTQgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldj00IGluaXRpYWwKK2RpZmYtdHJlZSAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1wIGluaXRpYWwKK2RpZmYtdHJlZSAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKK2RpZmYtdHJlZSAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCisKK2RpZmYtdHJlZSAtLXByZXR0eSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1zdGF0IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXN1bW1hcnkgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tc3RhdCAtLXN1bW1hcnkgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3RhdCBpbml0aWFsCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN1bW1hcnkgaW5pdGlhbAorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdW1tYXJ5IC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IC0tc3VtbWFyeSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLXAgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC1wIGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCisKK2RpZmYtdHJlZSAtLXByZXR0eSBzaWRlCitkaWZmLXRyZWUgLS1wcmV0dHkgLXAgc2lkZQorZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKKworZGlmZi10cmVlIGluaXRpYWwgbW9kZQorZGlmZi10cmVlIC0tc3RhdCBpbml0aWFsIG1vZGUKK2RpZmYtdHJlZSAtLXN1bW1hcnkgaW5pdGlhbCBtb2RlCisKK2RpZmYtdHJlZSBtYXN0ZXIKK2RpZmYtdHJlZSAtcCBtYXN0ZXIKK2RpZmYtdHJlZSAtcCAtbSBtYXN0ZXIKK2RpZmYtdHJlZSAtYyBtYXN0ZXIKK2RpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKKzpub2VsbGlwc2VzIGRpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKK2RpZmYtdHJlZSAtLWNjIG1hc3RlcgorIyBzdGF0IG9ubHkgc2hvdWxkIHNob3cgdGhlIGRpZmZzdGF0IHdpdGggdGhlIGZpcnN0IHBhcmVudAorZGlmZi10cmVlIC1jIC0tc3RhdCBtYXN0ZXIKK2RpZmYtdHJlZSAtLWNjIC0tc3RhdCBtYXN0ZXIKK2RpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorZGlmZi10cmVlIC0tY2MgLS1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgc3RhdCBzdW1tYXJ5IHNob3VsZCBzaG93IHRoZSBkaWZmc3RhdCBhbmQgc3VtbWFyeSB3aXRoIHRoZSBmaXJzdCBwYXJlbnQKK2RpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2RpZmYtdHJlZSAtLWNjIC0tc3RhdCAtLXN1bW1hcnkgc2lkZQorZGlmZi10cmVlIC0tY2MgLS1zaG9ydHN0YXQgbWFzdGVyCitkaWZmLXRyZWUgLS1jYyAtLXN1bW1hcnkgUkVWRVJTRQorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlcgorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgdGhpcyBpcyBjb3JyZWN0CitkaWZmLXRyZWUgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgc2lkZQorCitsb2cgbWFzdGVyCitsb2cgLXAgbWFzdGVyCitsb2cgLS1yb290IG1hc3RlcgorbG9nIC0tcm9vdCAtcCBtYXN0ZXIKK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2xvZyAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCitsb2cgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitsb2cgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitsb2cgLS1yb290IC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorbG9nIC1wIC0tZmlyc3QtcGFyZW50IG1hc3RlcgorbG9nIC1tIC1wIC0tZmlyc3QtcGFyZW50IG1hc3RlcgorbG9nIC1tIC1wIG1hc3RlcgorbG9nIC1TRiBtYXN0ZXIKK2xvZyAtUyBGIG1hc3RlcgorbG9nIC1TRiAtcCBtYXN0ZXIKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTAKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTEKK2xvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTIKK2xvZyAtR0YgbWFzdGVyCitsb2cgLUdGIC1wIG1hc3RlcgorbG9nIC1HRiAtcCAtLXBpY2theGUtYWxsIG1hc3RlcgorbG9nIC0tZGVjb3JhdGUgLS1hbGwKK2xvZyAtLWRlY29yYXRlPWZ1bGwgLS1hbGwKKworcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQKK3Jldi1saXN0IC0tY2hpbGRyZW4gSEVBRAorCit3aGF0Y2hhbmdlZCBtYXN0ZXIKKzpub2VsbGlwc2VzIHdoYXRjaGFuZ2VkIG1hc3Rlcgord2hhdGNoYW5nZWQgLXAgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXJvb3QgbWFzdGVyCis6bm9lbGxpcHNlcyB3aGF0Y2hhbmdlZCAtLXJvb3QgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXJvb3QgLXAgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK3doYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK3doYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAord2hhdGNoYW5nZWQgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCit3aGF0Y2hhbmdlZCAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCit3aGF0Y2hhbmdlZCAtU0YgbWFzdGVyCis6bm9lbGxpcHNlcyB3aGF0Y2hhbmdlZCAtU0YgbWFzdGVyCit3aGF0Y2hhbmdlZCAtU0YgLXAgbWFzdGVyCisKK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIgLS0gZGlyLword2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyIC0tIGRpci8KK3doYXRjaGFuZ2VkIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIgLS0gZGlyLworCitzaG93IGluaXRpYWwKK3Nob3cgLS1yb290IGluaXRpYWwKK3Nob3cgc2lkZQorc2hvdyBtYXN0ZXIKK3Nob3cgLWMgbWFzdGVyCitzaG93IC1tIG1hc3Rlcgorc2hvdyAtLWZpcnN0LXBhcmVudCBtYXN0ZXIKK3Nob3cgLS1zdGF0IHNpZGUKK3Nob3cgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCitzaG93IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKK3Nob3cgLS1wYXRjaC13aXRoLXJhdyBzaWRlCis6bm9lbGxpcHNlcyBzaG93IC0tcGF0Y2gtd2l0aC1yYXcgc2lkZQorc2hvdyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgc2lkZQorCitmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW5vLW51bWJlcmVkIGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IC0tc3VmZml4PS5kaWZmIGluaXRpYWwuLnNpZGUKK2Zvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCitmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK2Zvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCAtLW51bWJlcmVkLWZpbGVzIGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IC0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0UgaW5pdGlhbC4ubWFzdGVyCitjb25maWcgZm9ybWF0LnN1YmplY3RwcmVmaXggRElGRkVSRU5UX1BSRUZJWAorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl5eCitmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLW4gaW5pdGlhbC4ubWFzdGVyXgorCitkaWZmIC0tYWJicmV2IGluaXRpYWwuLnNpZGUKK2RpZmYgLVUgaW5pdGlhbC4uc2lkZQorZGlmZiAtVTEgaW5pdGlhbC4uc2lkZQorZGlmZiAtciBpbml0aWFsLi5zaWRlCitkaWZmIC0tc3RhdCBpbml0aWFsLi5zaWRlCitkaWZmIC1yIC0tc3RhdCBpbml0aWFsLi5zaWRlCitkaWZmIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbC4uc2lkZQorZGlmZiAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwuLnNpZGUKKzpub2VsbGlwc2VzIGRpZmYgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsLi5zaWRlCitkaWZmIC0tcGF0Y2gtd2l0aC1zdGF0IC1yIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1wYXRjaC13aXRoLXJhdyAtciBpbml0aWFsLi5zaWRlCis6bm9lbGxpcHNlcyBkaWZmIC0tcGF0Y2gtd2l0aC1yYXcgLXIgaW5pdGlhbC4uc2lkZQorZGlmZiAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCitkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgorZGlmZiAtLW5vLWluZGV4IC0tbmFtZS1zdGF0dXMgLS0gZGlyMiBkaXIKK2RpZmYgLS1uby1pbmRleCBkaXIgZGlyMworZGlmZiBtYXN0ZXIgbWFzdGVyXiBzaWRlCisjIENhbid0IHVzZSBzcGFjZXMuLi4KK2RpZmYgLS1saW5lLXByZWZpeD1hYmMgbWFzdGVyIG1hc3Rlcl4gc2lkZQorZGlmZiAtLWRpcnN0YXQgbWFzdGVyfjEgbWFzdGVyfjIKK2RpZmYgLS1kaXJzdGF0IGluaXRpYWwgcmVhcnJhbmdlCitkaWZmIC0tZGlyc3RhdC1ieS1maWxlIGluaXRpYWwgcmVhcnJhbmdlCitkaWZmIC0tZGlyc3RhdCAtLWNjIG1hc3Rlcn4xIG1hc3RlcgorIyBOby1pbmRleCAtLWFiYnJldiBhbmQgLS1uby1hYmJyZXYKK2RpZmYgLS1yYXcgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZiAtLXJhdyBpbml0aWFsCitkaWZmIC0tcmF3IC0tYWJicmV2PTQgaW5pdGlhbAorOm5vZWxsaXBzZXMgZGlmZiAtLXJhdyAtLWFiYnJldj00IGluaXRpYWwKK2RpZmYgLS1yYXcgLS1uby1hYmJyZXYgaW5pdGlhbAorZGlmZiAtLW5vLWluZGV4IC0tcmF3IGRpcjIgZGlyCis6bm9lbGxpcHNlcyBkaWZmIC0tbm8taW5kZXggLS1yYXcgZGlyMiBkaXIKK2RpZmYgLS1uby1pbmRleCAtLXJhdyAtLWFiYnJldj00IGRpcjIgZGlyCis6bm9lbGxpcHNlcyBkaWZmIC0tbm8taW5kZXggLS1yYXcgLS1hYmJyZXY9NCBkaXIyIGRpcgorZGlmZiAtLW5vLWluZGV4IC0tcmF3IC0tbm8tYWJicmV2IGRpcjIgZGlyCisKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtUiAtLXJvb3QgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwKK2RpZmYtdHJlZSAtLXN0YXQgLS1jb21wYWN0LXN1bW1hcnkgaW5pdGlhbCBtb2RlCitkaWZmLXRyZWUgLVIgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwgbW9kZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyByZXF1aXJlcyBhbiBhcmd1bWVudCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLVMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNhY2hlZCBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZWNobyByZWY6IHJlZnMvaGVhZHMvdW5ib3JuID4uZ2l0L0hFQUQgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+cmVzdWx0ICYmCisJcHJvY2Vzc19kaWZmcyByZXN1bHQgPmFjdHVhbCAmJgorCXByb2Nlc3NfZGlmZnMgIiRURVNUX0RJUkVDVE9SWS90NDAxMy9kaWZmLmRpZmZfLS1jYWNoZWQiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2FjaGVkIC0tIGZpbGUgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBkaWZmIC0tY2FjaGVkIC0tIGZpbGUwID5yZXN1bHQgJiYKKwlwcm9jZXNzX2RpZmZzIHJlc3VsdCA+YWN0dWFsICYmCisJcHJvY2Vzc19kaWZmcyAiJFRFU1RfRElSRUNUT1JZL3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZF8tLV9maWxlMCIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tbGluZS1wcmVmaXggd2l0aCBzcGFjZXMnICcKKwlnaXQgZGlmZiAtLWxpbmUtcHJlZml4PSJ8IHwgfCAiIC0tY2FjaGVkIC0tIGZpbGUwID5yZXN1bHQgJiYKKwlwcm9jZXNzX2RpZmZzIHJlc3VsdCA+YWN0dWFsICYmCisJcHJvY2Vzc19kaWZmcyAiJFRFU1RfRElSRUNUT1JZL3Q0MDEzL2RpZmYuZGlmZl8tLWxpbmUtcHJlZml4Xy0tY2FjaGVkXy0tX2ZpbGUwIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC0tc3RkaW4gd2l0aCBsb2cgZm9ybWF0dGluZycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlTaWRlCisJVGhpcmQKKwlTZWNvbmQKKwlFT0YKKwlnaXQgcmV2LWxpc3QgbWFzdGVyIHwgZ2l0IGRpZmYtdHJlZSAtLXN0ZGluIC0tZm9ybWF0PSVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmNvbmZpZ19mb3JtYXQuc3ViamVjdHByZWZpeF9ESUZGRVJFTlRfUFJFRklYIGIvdC90NDAxMy9kaWZmLmNvbmZpZ19mb3JtYXQuc3ViamVjdHByZWZpeF9ESUZGRVJFTlRfUFJFRklYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Zjg5NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuY29uZmlnX2Zvcm1hdC5zdWJqZWN0cHJlZml4X0RJRkZFUkVOVF9QUkVGSVgKQEAgLTAsMCArMSwyIEBACiskIGdpdCBjb25maWcgZm9ybWF0LnN1YmplY3RwcmVmaXggRElGRkVSRU5UX1BSRUZJWAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTUxZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWMzM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlCkBAIC0wLDAgKzEsMzkgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBzaWRlCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzYzBhNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc2hvcnRzdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXNob3J0c3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjYTQyZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXNob3J0c3RhdF9tYXN0ZXIKQEAgLTAsMCArMSw0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXNob3J0c3RhdCBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTk4NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjJlZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCkBAIC0wLDAgKzEsOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiOTE3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1zdGF0IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN1bW1hcnlfUkVWRVJTRSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN1bW1hcnlfUkVWRVJTRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA4ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3VtbWFyeV9SRVZFUlNFCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1zdW1tYXJ5IFJFVkVSU0UKKzI1NjIzMjVhN2VlOTE2ZWZiMjQ4MWRhOTMwNzNiODJjZWM4MDFjYmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY19tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2I0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfbWFzdGVyCkBAIC0wLDAgKzEsMzAgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLWNjIG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTA1YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiOGI0NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkZGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDc5ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwzMyBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3ZWQwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLXBfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzUwOTJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tcF9pbml0aWFsCkBAIC0wLDAgKzEsMjkgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcm9vdCAtcCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIEluaXRpYWwKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OTIwYWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCis6MDAwMDAwIDA0MDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGRhN2EzM2ZhNzdkODA2NmQ2Njk4NjQzOTQwY2U1ODYwZmUyZDdmYjMgQQlkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy1wX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI3NmJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtcCBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDk3MGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4NTMxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDgyMzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlM2Y2YjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUKQEAgLTAsMCArMSw0MyBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjAzYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwzOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmViNzdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM5IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0Xy0tY29tcGFjdC1zdW1tYXJ5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0NTFmZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsCkBAIC0wLDAgKzEsMTIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IC0tY29tcGFjdC1zdW1tYXJ5IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCisgZGlyL3N1YiAobmV3KSB8IDIgKysKKyBmaWxlMCAobmV3KSAgIHwgMyArKysKKyBmaWxlMiAobmV3KSAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0Xy0tc3VtbWFyeV9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0Xy0tc3VtbWFyeV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MGVhYjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN0YXRfLS1zdW1tYXJ5X2luaXRpYWwKQEAgLTAsMCArMSwxNSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN0YXQgLS1zdW1tYXJ5IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN0YXRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MjJkMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDEyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3RhdCBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3VtbWFyeV8tcl9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdW1tYXJ5Xy1yX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkYWFmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3VtbWFyeV8tcl9pbml0aWFsCkBAIC0wLDAgKzEsMTEgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdW1tYXJ5IC1yIGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3VtbWFyeV9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdW1tYXJ5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlNWY3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3VtbWFyeV9pbml0aWFsCkBAIC0wLDAgKzEsMTEgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdW1tYXJ5IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy1wX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tcF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDExZjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tcF9pbml0aWFsCkBAIC0wLDAgKzEsMzQgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLXAgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlMzJlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290X2luaXRpYWwKQEAgLTAsMCArMSwxMSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworOjAwMDAwMCAwNDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBkYTdhMzNmYTc3ZDgwNjZkNjY5ODY0Mzk0MGNlNTg2MGZlMmQ3ZmIzIEEJZGlyCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdGF0Xy0tc3VtbWFyeV9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN0YXRfLS1zdW1tYXJ5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyOTgzYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdGF0Xy0tc3VtbWFyeV9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tc3RhdCAtLXN1bW1hcnkgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN0YXRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkY2ZiNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1zdGF0IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdW1tYXJ5X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3VtbWFyeV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzJjNGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3VtbWFyeV9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tc3VtbWFyeSBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1SXy0tcm9vdF8tLXN0YXRfLS1jb21wYWN0LXN1bW1hcnlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLVJfLS1yb290Xy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ODllNTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1SXy0tcm9vdF8tLXN0YXRfLS1jb21wYWN0LXN1bW1hcnlfaW5pdGlhbApAQCAtMCwwICsxLDEyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLVIgLS1yb290IC0tc3RhdCAtLWNvbXBhY3Qtc3VtbWFyeSBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworIGRpci9zdWIgKGdvbmUpIHwgMiAtLQorIGZpbGUwIChnb25lKSAgIHwgMyAtLS0KKyBmaWxlMiAoZ29uZSkgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGRlbGV0aW9ucygtKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOTk0MmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLXAgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OTNhYTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX3NpZGUKQEAgLTAsMCArMSwzOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC1wIHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3MTViZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliNmUxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfc2lkZQpAQCAtMCwwICsxLDExIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzowNDAwMDAgMDQwMDAwIGRhN2EzM2ZhNzdkODA2NmQ2Njk4NjQzOTQwY2U1ODYwZmUyZDdmYjMgZjk3N2VkNDZhZTY4NzNjMWMzMGFiODc4ZTE1YTRhY2NlZGMzNjE4YiBNCWRpcgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBmNDYxNWRhNjc0YzA5ZGYzMjJkNmJhOGQ2YjIxZWNmYjFiMWJhNTEwIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNzI4OWUzNWJmZjMyNzI3YzA4ZGRhMjA3NTExYmVjMTM4ZmRiOWVhNSBBCWZpbGUzCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tLWFiYnJldl9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE4NGIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1hYmJyZXYgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorOjAwMDAwMCAwNDAwMDAgMDAwMDAwMC4uLiBkYTdhMzNmLi4uIEEJZGlyCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMWU3OWMzLi4uIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjk1ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMzMgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY5ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXBfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1wX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxOWM3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1wX2luaXRpYWwKQEAgLTAsMCArMSwyOSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzUzNjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXY9NF9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldj00IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAuLi4gMzVkMi4uLiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAuLi4gMDFlNy4uLiBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwLi4uIDAxZTcuLi4gQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiNDYwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC1yIC0tYWJicmV2IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMzVkMjQyYi4uLiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDFlNzljMy4uLiBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkNDM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yX2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC1yIGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMzVkMjQyYmE3OWFlODlhYzY5NWUyNmIzZDRjMjdhOGU2ZjAyOGY5ZSBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmNmIwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZGE3YTMzZmE3N2Q4MDY2ZDY2OTg2NDM5NDBjZTU4NjBmZTJkN2ZiMyBBCWRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsX21vZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsX21vZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3YzhmNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1zdGF0Xy0tY29tcGFjdC1zdW1tYXJ5X2luaXRpYWxfbW9kZQpAQCAtMCwwICsxLDQgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXN0YXQgLS1jb21wYWN0LXN1bW1hcnkgaW5pdGlhbCBtb2RlCisgZmlsZTAgKG1vZGUgK3gpIHwgMAorIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tc3RhdF9pbml0aWFsX21vZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tc3RhdF9pbml0aWFsX21vZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1OTQzYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1zdGF0X2luaXRpYWxfbW9kZQpAQCAtMCwwICsxLDQgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXN0YXQgaW5pdGlhbCBtb2RlCisgZmlsZTAgfCAwCisgMSBmaWxlIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1zdW1tYXJ5X2luaXRpYWxfbW9kZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1zdW1tYXJ5X2luaXRpYWxfbW9kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg0NmI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXN1bW1hcnlfaW5pdGlhbF9tb2RlCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZi10cmVlIC0tc3VtbWFyeSBpbml0aWFsIG1vZGUKKyBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IGZpbGUwCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1SXy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsX21vZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1SXy0tc3RhdF8tLWNvbXBhY3Qtc3VtbWFyeV9pbml0aWFsX21vZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4ZjNkMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLVJfLS1zdGF0Xy0tY29tcGFjdC1zdW1tYXJ5X2luaXRpYWxfbW9kZQpAQCAtMCwwICsxLDQgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtUiAtLXN0YXQgLS1jb21wYWN0LXN1bW1hcnkgaW5pdGlhbCBtb2RlCisgZmlsZTAgKG1vZGUgLXgpIHwgMAorIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1hYmJyZXZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTRhYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlcgpAQCAtMCwwICsxLDUgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgY2VhZDMyZS4uLiA3Mjg5ZTM1Li4uIDk5MjkxM2MuLi4gTU0JZGlyL3N1YgorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBiNDE0MTA4Li4uIGY0NjE1ZGEuLi4gMTBhOGE5Zi4uLiBNTQlmaWxlMAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMzAyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLWMgLS1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZGMxMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfc2lkZQpAQCAtMCwwICsxLDggQEAKKyQgZ2l0IGRpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2M3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDU5YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLWMgLS1zdGF0IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY19tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkMmJiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfbWFzdGVyCkBAIC0wLDAgKzEsNSBAQAorJCBnaXQgZGlmZi10cmVlIC1jIG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBjZWFkMzJlOTI1YjE0MjBjODRjMTRjYmY3Y2Y3NTVlN2U0NWFmOGFkIDcyODllMzViZmYzMjcyN2MwOGRkYTIwNzUxMWJlYzEzOGZkYjllYTUgOTkyOTEzYzVhYTBhNTQ3NmQxMGM0OWVkMGYyMWZjMGM2ZDFhZWRmMyBNTQlkaXIvc3ViCis6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGI0MTQxMDhlODFlNTA5MWZlMDk3NGExODU4YjRkMGQyMmIxMDdmNzAgZjQ2MTVkYTY3NGMwOWRmMzIyZDZiYThkNmIyMWVjZmIxYjFiYTUxMCAxMGE4YTlmMzY1N2Y5MWExNTZiOWYwMTg0ZWQ3OWEyMGFkZWY5ZjdmIE1NCWZpbGUwCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wXy1tX21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXBfLW1fbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MGJlYTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wXy1tX21hc3RlcgpAQCAtMCwwICsxLDgwIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgLW0gbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDcyODllMzUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSw0ICsxLDggQEAKKyBBCisgQgorK0MKKytECisrRQorK0YKKyAxCisgMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGY0NjE1ZGEuLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDYgKzEsOSBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorIEEKKyBCCisgQworZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA3Mjg5ZTM1Li4wMDAwMDAwCistLS0gYS9maWxlMworKysrIC9kZXYvbnVsbAorQEAgLTEsNCArMCwwIEBACistQQorLUIKKy0xCistMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMGNlODgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgyODc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9tYXN0ZXIKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgbWFzdGVyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXY9NF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YTNhYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2PTRfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtciAtLWFiYnJldj00IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXZfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY4OWI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcl8tLWFiYnJldl9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC1yIC0tYWJicmV2IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzY1ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcl9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC1yIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDlmYzUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbF9tb2RlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV9pbml0aWFsX21vZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3YzA5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbF9tb2RlCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZi10cmVlIGluaXRpYWwgbW9kZQorOjEwMDY0NCAxMDA3NTUgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIE0JZmlsZTAKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5MjI2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfbWFzdGVyCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIG1hc3RlcgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1hYmJyZXZfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tYWJicmV2X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4ZTY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tYWJicmV2X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzMiBAQAorJCBnaXQgZGlmZiAtLWFiYnJldiBpbml0aWFsLi5zaWRlCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZCBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTZlODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZApAQCAtMCwwICsxLDM4IEBACitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45OTI5MTNjCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDggQEAKKytBCisrQgorK0MKKytECisrRQorK0YKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMGE4YTlmCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSw5IEBACisrMQorKzIKKyszCisrNAorKzUKKys2CisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1jYWNoZWRfLS1fZmlsZTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYjg1OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwCkBAIC0wLDAgKzEsMTUgQEAKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTBhOGE5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsOSBAQAorKzEKKysyCisrMworKzQKKys1CisrNgorK0EKKytCCisrQwpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0LWJ5LWZpbGVfaW5pdGlhbF9yZWFycmFuZ2UgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXQtYnktZmlsZV9pbml0aWFsX3JlYXJyYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhlMzNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0LWJ5LWZpbGVfaW5pdGlhbF9yZWFycmFuZ2UKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlIGluaXRpYWwgcmVhcnJhbmdlCisgMTAwLjAlIGRpci8KKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF8tLWNjX21hc3Rlcn4xX21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF8tLWNjX21hc3Rlcn4xX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmE0ZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0Xy0tY2NfbWFzdGVyfjFfbWFzdGVyCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLWRpcnN0YXQgLS1jYyBtYXN0ZXJ+MSBtYXN0ZXIKKyAgNDAuMCUgZGlyLworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X2luaXRpYWxfcmVhcnJhbmdlIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X2luaXRpYWxfcmVhcnJhbmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYjAyYzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfaW5pdGlhbF9yZWFycmFuZ2UKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tZGlyc3RhdCBpbml0aWFsIHJlYXJyYW5nZQorIDEwMC4wJSBkaXIvCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfbWFzdGVyfjFfbWFzdGVyfjIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfbWFzdGVyfjFfbWFzdGVyfjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3MmUxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF9tYXN0ZXJ+MV9tYXN0ZXJ+MgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1kaXJzdGF0IG1hc3Rlcn4xIG1hc3Rlcn4yCisgIDQwLjAlIGRpci8KKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbGluZS1wcmVmaXg9YWJjX21hc3Rlcl9tYXN0ZXJeX3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWxpbmUtcHJlZml4PWFiY19tYXN0ZXJfbWFzdGVyXl9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjkxZTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWxpbmUtcHJlZml4PWFiY19tYXN0ZXJfbWFzdGVyXl9zaWRlCkBAIC0wLDAgKzEsMjkgQEAKKyQgZ2l0IGRpZmYgLS1saW5lLXByZWZpeD1hYmMgbWFzdGVyIG1hc3Rlcl4gc2lkZQorYWJjZGlmZiAtLWNjIGRpci9zdWIKK2FiY2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworYWJjLS0tIGEvZGlyL3N1YgorYWJjKysrIGIvZGlyL3N1YgorYWJjQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorYWJjICBBCithYmMgIEIKK2FiYyArQworYWJjICtECithYmMgK0UKK2FiYyArRgorYWJjKyAxCithYmMrIDIKK2FiY2RpZmYgLS1jYyBmaWxlMAorYWJjaW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCithYmMtLS0gYS9maWxlMAorYWJjKysrIGIvZmlsZTAKK2FiY0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKK2FiYyAgMQorYWJjICAyCithYmMgIDMKK2FiYyArNAorYWJjICs1CithYmMgKzYKK2FiYysgQQorYWJjKyBCCithYmMrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbGluZS1wcmVmaXhfLS1jYWNoZWRfLS1fZmlsZTAgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWxpbmUtcHJlZml4Xy0tY2FjaGVkXy0tX2ZpbGUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MWJhNGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWxpbmUtcHJlZml4Xy0tY2FjaGVkXy0tX2ZpbGUwCkBAIC0wLDAgKzEsMTUgQEAKK3wgfCB8IGRpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCit8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgaW5kZXggMDAwMDAwMC4uMTBhOGE5ZgorfCB8IHwgLS0tIC9kZXYvbnVsbAorfCB8IHwgKysrIGIvZmlsZTAKK3wgfCB8IEBAIC0wLDAgKzEsOSBAQAorfCB8IHwgKzEKK3wgfCB8ICsyCit8IHwgfCArMworfCB8IHwgKzQKK3wgfCB8ICs1Cit8IHwgfCArNgorfCB8IHwgK0EKK3wgfCB8ICtCCit8IHwgfCArQwpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uYW1lLXN0YXR1c19kaXIyX2RpciBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkOTZhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgZGlyMiBkaXIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c18tLV9kaXIyX2RpciBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c18tLV9kaXIyX2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU2ZjhkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzXy0tX2RpcjJfZGlyCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLW5vLWluZGV4IC0tbmFtZS1zdGF0dXMgLS0gZGlyMiBkaXIKK0EJZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDc1ODQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgorQQlkaXIvc3ViCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tcmF3Xy0tYWJicmV2PTRfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tcmF3Xy0tYWJicmV2PTRfZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxYjM4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1yYXdfLS1hYmJyZXY9NF9kaXIyX2RpcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCAtLXJhdyAtLWFiYnJldj00IGRpcjIgZGlyCis6MDAwMDAwIDEwMDY0NCAwMDAwLi4uIDAwMDAuLi4gQQlkaXIvc3ViCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tcmF3Xy0tbm8tYWJicmV2X2RpcjJfZGlyIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLXJhd18tLW5vLWFiYnJldl9kaXIyX2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGYwMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLXJhd18tLW5vLWFiYnJldl9kaXIyX2RpcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCAtLXJhdyAtLW5vLWFiYnJldiBkaXIyIGRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEEJZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLXJhd19kaXIyX2RpciBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1yYXdfZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiNGVlNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1yYXdfZGlyMl9kaXIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tbm8taW5kZXggLS1yYXcgZGlyMiBkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDAwMDAwMC4uLiBBCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfZGlyX2RpcjMgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4X2Rpcl9kaXIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDJjMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4X2Rpcl9kaXIzCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZiAtLW5vLWluZGV4IGRpciBkaXIzCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MGRjNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfLXJfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDM2IEBACiskIGdpdCBkaWZmIC0tcGF0Y2gtd2l0aC1yYXcgLXIgaW5pdGlhbC4uc2lkZQorOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA3Mjg5ZTM1Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBmNDYxNWRhLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gNzI4OWUzNS4uLiBBCWZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjFkNWRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzYgQEAKKyQgZ2l0IGRpZmYgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsLi5zaWRlCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDcyODllMzUuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGY0NjE1ZGEuLi4gTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiA3Mjg5ZTM1Li4uIEEJZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXN0YXRfLXJfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0Xy1yX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4ZDFlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0Xy1yX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNyBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtc3RhdCAtciBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyNGU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNyBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1yYXdfLS1hYmJyZXY9NF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1yYXdfLS1hYmJyZXY9NF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjQxZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXJhd18tLWFiYnJldj00X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmIC0tcmF3IC0tYWJicmV2PTQgaW5pdGlhbAorOjEwMDY0NCAxMDA2NDQgMzVkMi4uLiA5OTI5Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNy4uLiAxMGE4Li4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAuLi4gYjFlNi4uLiBBCWZpbGUxCis6MTAwNjQ0IDAwMDAwMCAwMWU3Li4uIDAwMDAuLi4gRAlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1yYXdfLS1uby1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcmF3Xy0tbm8tYWJicmV2X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3YTEyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcmF3Xy0tbm8tYWJicmV2X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmIC0tcmF3IC0tbm8tYWJicmV2IGluaXRpYWwKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgOTkyOTEzYzVhYTBhNTQ3NmQxMGM0OWVkMGYyMWZjMGM2ZDFhZWRmMyBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgMTBhOGE5ZjM2NTdmOTFhMTU2YjlmMDE4NGVkNzlhMjBhZGVmOWY3ZiBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGIxZTY3MjIxYWZlODQ2MWVmZDI0NGI0ODdhZmNhMjJkNDZiOTVlYjggQQlmaWxlMQorOjEwMDY0NCAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXJhd19pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTk3ODAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZiAtLXJhdyBpbml0aWFsCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDk5MjkxM2MuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIDEwYThhOWYuLi4gTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiBiMWU2NzIyLi4uIEEJZmlsZTEKKzoxMDA2NDQgMDAwMDAwIDAxZTc5YzMuLi4gMDAwMDAwMC4uLiBECWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLXN0YXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tc3RhdF9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NzQxZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXN0YXRfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYgLS1zdGF0IGluaXRpYWwuLnNpZGUKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLVUxX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tVTFfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjlmOGYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLVUxX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwyOSBAQAorJCBnaXQgZGlmZiAtVTEgaW5pdGlhbC4uc2lkZQorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIgKzIsMyBAQCBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTMgKzMsNCBAQAorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy1VMl9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfLVUyX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmZTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy1VMl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzEgQEAKKyQgZ2l0IGRpZmYgLVUyIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMiwyICsyLDUgQEAKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLVVfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy1VX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2YzBkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy1VX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzMiBAQAorJCBnaXQgZGlmZiAtVSBpbml0aWFsLi5zaWRlCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tcl8tLXN0YXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy1yXy0tc3RhdF9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNTE0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tcl8tLXN0YXRfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYgLXIgLS1zdGF0IGluaXRpYWwuLnNpZGUKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLXJfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy1yX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiMmZlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy1yX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzMiBAQAorJCBnaXQgZGlmZiAtciBpbml0aWFsLi5zaWRlCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGFkYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDMyIEBACiskIGdpdCBkaWZmIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmX21hc3Rlcl9tYXN0ZXJeX3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl9tYXN0ZXJfbWFzdGVyXl9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZWM5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl9tYXN0ZXJfbWFzdGVyXl9zaWRlCkBAIC0wLDAgKzEsMjkgQEAKKyQgZ2l0IGRpZmYgbWFzdGVyIG1hc3Rlcl4gc2lkZQorZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfLS1zdWZmaXg9LmRpZmZfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfLS1zdWZmaXg9LmRpZmZfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdjYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF8tLXN1ZmZpeD0uZGlmZl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsNjEgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCAtLXN1ZmZpeD0uZGlmZiBpbml0aWFsLi5zaWRlCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2lkZS5kaWZmIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDEtU2lkZS5kaWZmIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmZWRjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTcwIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDMvM10gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAzLVNpZGUucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzNjZGUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCkBAIC0wLDAgKzEsMTEwIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyXgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzE3YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsNjEgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5zaWRlCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2lkZS5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAxLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLW51bWJlcmVkLWZpbGVzX2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1udW1iZXJlZC1maWxlc19pbml0aWFsLi5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjNGRiNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1udW1iZXJlZC1maWxlc19pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxNzAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCAtLW51bWJlcmVkLWZpbGVzIGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIxIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMSIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjIiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIyIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDMvM10gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIzIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMyIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0VfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLXN1YmplY3QtcHJlZml4PVRFU1RDQVNFX2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzY3N2M1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLXN1YmplY3QtcHJlZml4PVRFU1RDQVNFX2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDE3MCBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IC0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0UgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1RFU1RDQVNFIDEvM10gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1RFU1RDQVNFIDIvM10gVGhpcmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtURVNUQ0FTRSAzLzNdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzZTM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTcwIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvM10gVGhpcmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMy1TaWRlLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNmOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCkBAIC0wLDAgKzEsMTEwIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyXgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl5eIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeXgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWVjNTUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeXgpAQCAtMCwwICsxLDYyIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyXl4KK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbRElGRkVSRU5UX1BSRUZJWF0gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYTY3NjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLnNpZGUKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TaWRlLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMS1TaWRlLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1jb3Zlci1sZXR0ZXJfLW5faW5pdGlhbC4ubWFzdGVyXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1jb3Zlci1sZXR0ZXJfLW5faW5pdGlhbC4ubWFzdGVyXgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDRkOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLWNvdmVyLWxldHRlcl8tbl9pbml0aWFsLi5tYXN0ZXJeCkBAIC0wLDAgKzEsMTAzIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLW4gaW5pdGlhbC4ubWFzdGVyXgorRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowNjowMCArMDAwMAorU3ViamVjdDogW0RJRkZFUkVOVF9QUkVGSVggMC8yXSAqKiogU1VCSkVDVCBIRVJFICoqKgorCisqKiogQkxVUkIgSEVSRSAqKioKKworQSBVIFRob3IgKDIpOgorICBTZWNvbmQKKyAgVGhpcmQKKworIGRpci9zdWIgfCA0ICsrKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMSAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtESUZGRVJFTlRfUFJFRklYIDEvMl0gU2Vjb25kCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtESUZGRVJFTlRfUFJFRklYIDIvMl0gVGhpcmQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW5vLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1uby1udW1iZXJlZF9pbml0aWFsLi5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjMjg3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1uby1udW1iZXJlZF9pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxMjcgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW5vLW51bWJlcmVkIGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gU2Vjb25kCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gVGhpcmQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBTaWRlCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1udW1iZXJlZF9pbml0aWFsLi5tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4ZjZmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfLS1udW1iZXJlZF9pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxMjcgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW51bWJlcmVkIGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIFNlY29uZAorCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlyZAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaWRlCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjAzNTJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxMjcgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBTZWNvbmQKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvM10gVGhpcmQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDMvM10gU2lkZQorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWU0NTRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCkBAIC0wLDAgKzEsODEgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gU2Vjb25kCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFRoaXJkCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Q1MmZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsNDcgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBpbml0aWFsLi5zaWRlCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBTaWRlCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlPWZ1bGxfLS1hbGwgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWZlOTFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlPWZ1bGxfLS1hbGwKQEAgLTAsMCArMSw0NiBAQAorJCBnaXQgbG9nIC0tZGVjb3JhdGU9ZnVsbCAtLWFsbAorY29tbWl0IGI3ZTBiYzY5MzAzYjQ4OGI0N2RlY2E3OTlhN2Q3MjM5NzFkZmE2Y2QgKHJlZnMvaGVhZHMvbW9kZSkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNjowMCAyMDA2ICswMDAwCisKKyAgICB1cGRhdGUgbW9kZQorCitjb21taXQgY2Q0ZTcyZmQ5NmZhZWQzZjBiYTk0OWRjNDI5Njc0MzAzNzRlMjI5MCAocmVmcy9oZWFkcy9yZWFycmFuZ2UpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgUmVhcnJhbmdlZCBsaW5lcyBpbiBkaXIvc3ViCisKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChIRUFEIC0+IHJlZnMvaGVhZHMvbWFzdGVyKQorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgKHJlZnMvaGVhZHMvc2lkZSkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSAocmVmcy9oZWFkcy9pbml0aWFsKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbCBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGYzMDhhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlXy0tYWxsCkBAIC0wLDAgKzEsNDYgQEAKKyQgZ2l0IGxvZyAtLWRlY29yYXRlIC0tYWxsCitjb21taXQgYjdlMGJjNjkzMDNiNDg4YjQ3ZGVjYTc5OWE3ZDcyMzk3MWRmYTZjZCAobW9kZSkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNjowMCAyMDA2ICswMDAwCisKKyAgICB1cGRhdGUgbW9kZQorCitjb21taXQgY2Q0ZTcyZmQ5NmZhZWQzZjBiYTk0OWRjNDI5Njc0MzAzNzRlMjI5MCAocmVhcnJhbmdlKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA2OjAwIDIwMDYgKzAwMDAKKworICAgIFJlYXJyYW5nZWQgbGluZXMgaW4gZGlyL3N1YgorCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAoSEVBRCAtPiBtYXN0ZXIpCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSAoc2lkZSkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSAoaW5pdGlhbCkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXJfLS1fZGlyXyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGYxNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXJfLS1fZGlyXwpAQCAtMCwwICsxLDc0IEBACiskIGdpdCBsb2cgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlciAtLSBkaXIvCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0MjVjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsMTI5IEBACiskIGdpdCBsb2cgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXJfLS1fZGlyXwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIwN2NhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXJfLS1fZGlyXwpAQCAtMCwwICsxLDc0IEBACiskIGdpdCBsb2cgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzFlOGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSwxOTkgQEAKKyQgZ2l0IGxvZyAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZjMDlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE2NyBAQAorJCBnaXQgbG9nIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhYTk4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpAQCAtMCwwICsxLDE2MSBAQAorJCBnaXQgbG9nIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTlkODVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE5OSBAQAorJCBnaXQgbG9nIC0tcm9vdCAtYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNvbWJpbmVkIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jb21iaW5lZCBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tcF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyYzMzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1wX21hc3RlcgpAQCAtMCwwICsxLDE0MiBAQAorJCBnaXQgbG9nIC0tcm9vdCAtcCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZjQ2MTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF9tYXN0ZXIKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgbG9nIC0tcm9vdCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfLS1waWNrYXhlLWFsbF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy1HRl8tcF8tLXBpY2theGUtYWxsX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZmODgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfLS1waWNrYXhlLWFsbF9tYXN0ZXIKQEAgLTAsMCArMSwyNyBAQAorJCBnaXQgbG9nIC1HRiAtcCAtLXBpY2theGUtYWxsIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLUdGXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLUdGXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDkzZjJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTggQEAKKyQgZ2l0IGxvZyAtR0YgLXAgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLUdGX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLUdGX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzY3MDhkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfbWFzdGVyCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgbG9nIC1HRiBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNGXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTMyNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTggQEAKKyQgZ2l0IGxvZyAtU0YgLXAgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTU5OWYyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgbG9nIC1TRiBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0wIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmYzZjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0wCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgbG9nIC1TRiBtYXN0ZXIgLS1tYXgtY291bnQ9MAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTEgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTgxYTAzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTEKQEAgLTAsMCArMSw3IEBACiskIGdpdCBsb2cgLVNGIG1hc3RlciAtLW1heC1jb3VudD0xCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MiBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzU1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MgpAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IGxvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNfRl9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy1TX0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGQyYjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TX0ZfbWFzdGVyCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgbG9nIC1TIEYgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1tXy1wXy0tZmlyc3QtcGFyZW50X21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLW1fLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMDA3M2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1tXy1wXy0tZmlyc3QtcGFyZW50X21hc3RlcgpAQCAtMCwwICsxLDEwMCBAQAorJCBnaXQgbG9nIC1tIC1wIC0tZmlyc3QtcGFyZW50IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggY2VhZDMyZS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC00LDMgKzQsNSBAQCBDCisgRAorIEUKKyBGCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCBiNDE0MTA4Li4xMGE4YTlmIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtNCwzICs0LDYgQEAKKyA0CisgNQorIDYKKytBCisrQgorK0MKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tbV8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy1tXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2E2MmEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tbV8tcF9tYXN0ZXIKQEAgLTAsMCArMSwyMDAgQEAKKyQgZ2l0IGxvZyAtbSAtcCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChmcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzApCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCisKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChmcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEpCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDcyODllMzUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSw0ICsxLDggQEAKKyBBCisgQgorK0MKKytECisrRQorK0YKKyAxCisgMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGY0NjE1ZGEuLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDYgKzEsOSBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorIEEKKyBCCisgQworZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA3Mjg5ZTM1Li4wMDAwMDAwCistLS0gYS9maWxlMworKysrIC9kZXYvbnVsbAorQEAgLTEsNCArMCwwIEBACistQQorLUIKKy0xCistMgorCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1wXy0tZmlyc3QtcGFyZW50X21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzg5NmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1wXy0tZmlyc3QtcGFyZW50X21hc3RlcgpAQCAtMCwwICsxLDc4IEBACiskIGdpdCBsb2cgLXAgLS1maXJzdC1wYXJlbnQgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjEzMjZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tcF9tYXN0ZXIKQEAgLTAsMCArMSwxMTUgQEAKKyQgZ2l0IGxvZyAtcCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZjZjZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nX21hc3RlcgpAQCAtMCwwICsxLDM0IEBACiskIGdpdCBsb2cgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmRhZDQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZi10cmVlXy0tcm9vdF8tLWFiYnJldl9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtLWFiYnJldiBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDA0MDAwMCAwMDAwMDAwIGRhN2EzM2YgQQlkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgMDFlNzljMyBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDAxZTc5YzMgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZi10cmVlXy0tcm9vdF8tcl8tLWFiYnJldj00X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZiZmViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZi10cmVlXy0tcm9vdF8tcl8tLWFiYnJldj00X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC1yIC0tYWJicmV2PTQgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorOjAwMDAwMCAxMDA2NDQgMDAwMCAzNWQyIEEJZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMCAwMWU3IEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAgMDFlNyBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjODU2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXZfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXIgLS1hYmJyZXYgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCAzNWQyNDJiIEEJZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCAwMWU3OWMzIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgMDFlNzljMyBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmLXRyZWVfLWNfLS1hYmJyZXZfbWFzdGVyIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjgwZjAxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlcgpAQCAtMCwwICsxLDUgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgY2VhZDMyZSA3Mjg5ZTM1IDk5MjkxM2MgTU0JZGlyL3N1YgorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBiNDE0MTA4IGY0NjE1ZGEgMTBhOGE5ZiBNTQlmaWxlMAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLW5vLWluZGV4Xy0tcmF3Xy0tYWJicmV2PTRfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tbm8taW5kZXhfLS1yYXdfLS1hYmJyZXY9NF9kaXIyX2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWI3YmFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLW5vLWluZGV4Xy0tcmF3Xy0tYWJicmV2PTRfZGlyMl9kaXIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tbm8taW5kZXggLS1yYXcgLS1hYmJyZXY9NCBkaXIyIGRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMCAwMDAwIEEJZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLW5vLWluZGV4Xy0tcmF3X2RpcjJfZGlyIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLW5vLWluZGV4Xy0tcmF3X2RpcjJfZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjNhM2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tbm8taW5kZXhfLS1yYXdfZGlyMl9kaXIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tbm8taW5kZXggLS1yYXcgZGlyMiBkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgMDAwMDAwMCBBCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1wYXRjaC13aXRoLXJhd18tcl9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxZjFlMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1wYXRjaC13aXRoLXJhd18tcl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzYgQEAKKyQgZ2l0IGRpZmYgLS1wYXRjaC13aXRoLXJhdyAtciBpbml0aWFsLi5zaWRlCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiIDcyODllMzUgTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzIGY0NjE1ZGEgTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCA3Mjg5ZTM1IEEJZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQ4YWVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtZGlmZl8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNiBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwuLnNpZGUKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIgNzI4OWUzNSBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMgZjQ2MTVkYSBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDcyODllMzUgQQlmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tcmF3Xy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1yYXdfLS1hYmJyZXY9NF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTQ0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tcmF3Xy0tYWJicmV2PTRfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYgLS1yYXcgLS1hYmJyZXY9NCBpbml0aWFsCis6MTAwNjQ0IDEwMDY0NCAzNWQyIDk5MjkgTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3IDEwYTggTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMCBiMWU2IEEJZmlsZTEKKzoxMDA2NDQgMDAwMDAwIDAxZTcgMDAwMCBECWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1kaWZmXy0tcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3NWJmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLWRpZmZfLS1yYXdfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYgLS1yYXcgaW5pdGlhbAorOjEwMDY0NCAxMDA2NDQgMzVkMjQyYiA5OTI5MTNjIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMyAxMGE4YTlmIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgYjFlNjcyMiBBCWZpbGUxCis6MTAwNjQ0IDAwMDAwMCAwMWU3OWMzIDAwMDAwMDAgRAlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtc2hvd18tLXBhdGNoLXdpdGgtcmF3X3NpZGUgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy1zaG93Xy0tcGF0Y2gtd2l0aC1yYXdfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmZlZDNkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtc2hvd18tLXBhdGNoLXdpdGgtcmF3X3NpZGUKQEAgLTAsMCArMSw0MiBAQAorJCBnaXQgc2hvdyAtLXBhdGNoLXdpdGgtcmF3IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiIDcyODllMzUgTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzIGY0NjE1ZGEgTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCA3Mjg5ZTM1IEEJZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLm5vZWxsaXBzZXMtd2hhdGNoYW5nZWRfLS1yb290X21hc3RlciBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXdoYXRjaGFuZ2VkXy0tcm9vdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjZmQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXdoYXRjaGFuZ2VkXy0tcm9vdF9tYXN0ZXIKQEAgLTAsMCArMSw0MiBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1yb290IG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIgNzI4OWUzNSBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMgZjQ2MTVkYSBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDcyODllMzUgQQlmaWxlMworCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKKzoxMDA2NDQgMTAwNjQ0IDg0MjJkNDAgY2VhZDMyZSBNCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAgYjFlNjcyMiBBCWZpbGUxCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYiA4NDIyZDQwIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMyBiNDE0MTA4IE0JZmlsZTAKKzoxMDA2NDQgMDAwMDAwIDAxZTc5YzMgMDAwMDAwMCBECWZpbGUyCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDM1ZDI0MmIgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIDAxZTc5YzMgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCAwMWU3OWMzIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXdoYXRjaGFuZ2VkXy1TRl9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy13aGF0Y2hhbmdlZF8tU0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNmNlNTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy13aGF0Y2hhbmdlZF8tU0ZfbWFzdGVyCkBAIC0wLDAgKzEsOSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLVNGIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCis6MTAwNjQ0IDEwMDY0NCA4NDIyZDQwIGNlYWQzMmUgTQlkaXIvc3ViCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy13aGF0Y2hhbmdlZF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubm9lbGxpcHNlcy13aGF0Y2hhbmdlZF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlNTAwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5ub2VsbGlwc2VzLXdoYXRjaGFuZ2VkX21hc3RlcgpAQCAtMCwwICsxLDMyIEBACiskIGdpdCB3aGF0Y2hhbmdlZCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiIDcyODllMzUgTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzIGY0NjE1ZGEgTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMCA3Mjg5ZTM1IEEJZmlsZTMKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCis6MTAwNjQ0IDEwMDY0NCA4NDIyZDQwIGNlYWQzMmUgTQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwIGIxZTY3MjIgQQlmaWxlMQorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIgODQyMmQ0MCBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMgYjQxNDEwOCBNCWZpbGUwCis6MTAwNjQ0IDAwMDAwMCAwMWU3OWMzIDAwMDAwMDAgRAlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tY2hpbGRyZW5fSEVBRCBiL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLWNoaWxkcmVuX0hFQUQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmMTdkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLWNoaWxkcmVuX0hFQUQKQEAgLTAsMCArMSw3IEBACiskIGdpdCByZXYtbGlzdCAtLWNoaWxkcmVuIEhFQUQKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK2M3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1wYXJlbnRzX0hFQUQgYi90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1wYXJlbnRzX0hFQUQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkMmE4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLXBhcmVudHNfSEVBRApAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IHJldi1saXN0IC0tcGFyZW50cyBIRUFECis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKKzFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1maXJzdC1wYXJlbnRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLnNob3dfLS1maXJzdC1wYXJlbnRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkY2JlNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLWZpcnN0LXBhcmVudF9tYXN0ZXIKQEAgLTAsMCArMSwzMCBAQAorJCBnaXQgc2hvdyAtLWZpcnN0LXBhcmVudCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtcmF3X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtcmF3X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxYjQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1yYXdfc2lkZQpAQCAtMCwwICsxLDQyIEBACiskIGdpdCBzaG93IC0tcGF0Y2gtd2l0aC1yYXcgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIuLi4gNzI4OWUzNS4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMuLi4gZjQ2MTVkYS4uLiBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDcyODllMzUuLi4gQQlmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YTQ3NGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZQpAQCAtMCwwICsxLDQ0IEBACiskIGdpdCBzaG93IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBzaWRlCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NGU5OWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF9zaWRlCkBAIC0wLDAgKzEsNDMgQEAKKyQgZ2l0IHNob3cgLS1wYXRjaC13aXRoLXN0YXQgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXJvb3RfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tcm9vdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODkxMzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXJvb3RfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBzaG93IC0tcm9vdCBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxNDkyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tc3RhdF8tLXN1bW1hcnlfc2lkZQpAQCAtMCwwICsxLDEzIEBACiskIGdpdCBzaG93IC0tc3RhdCAtLXN1bW1hcnkgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1zdGF0X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU3MTI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLS1zdGF0X3NpZGUKQEAgLTAsMCArMSwxMiBAQAorJCBnaXQgc2hvdyAtLXN0YXQgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLWNfbWFzdGVyIGIvdC90NDAxMy9kaWZmLnNob3dfLWNfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYWJhOGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tY19tYXN0ZXIKQEAgLTAsMCArMSwzNiBAQAorJCBnaXQgc2hvdyAtYyBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tY29tYmluZWQgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNvbWJpbmVkIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLW1fbWFzdGVyIGIvdC90NDAxMy9kaWZmLnNob3dfLW1fbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTJlZTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tbV9tYXN0ZXIKQEAgLTAsMCArMSw5MyBAQAorJCBnaXQgc2hvdyAtbSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChmcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzApCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCisKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChmcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEpCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDcyODllMzUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSw0ICsxLDggQEAKKyBBCisgQgorK0MKKytECisrRQorK0YKKyAxCisgMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGY0NjE1ZGEuLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDYgKzEsOSBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorIEEKKyBCCisgQworZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA3Mjg5ZTM1Li4wMDAwMDAwCistLS0gYS9maWxlMworKysrIC9kZXYvbnVsbAorQEAgLTEsNCArMCwwIEBACistQQorLUIKKy0xCistMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5zaG93X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0MDY2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93X2luaXRpYWwKQEAgLTAsMCArMSw3IEBACiskIGdpdCBzaG93IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfbWFzdGVyIGIvdC90NDAxMy9kaWZmLnNob3dfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDhjZTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd19tYXN0ZXIKQEAgLTAsMCArMSwzNiBAQAorJCBnaXQgc2hvdyBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfc2lkZSBiL3QvdDQwMTMvZGlmZi5zaG93X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwYTA3MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93X3NpZGUKQEAgLTAsMCArMSwzOCBAQAorJCBnaXQgc2hvdyBzaWRlCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXJfLS1fZGlyXyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiNmFmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8KQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlciAtLSBkaXIvCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWM0MzFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpAQCAtMCwwICsxLDExNiBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGMyODUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyXy0tX2Rpcl8KQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhYWU3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTk5IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5MGU1MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE2MCBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTZjYzkyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSwxNTQgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQzMmJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCkBAIC0wLDAgKzEsMTk5IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgLWMgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1jb21iaW5lZCBkaXIvc3ViCitpbmRleCBjZWFkMzJlLDcyODllMzUuLjk5MjkxM2MKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAQCAtMSw2IC0xLDQgKzEsOCBAQEAKKyAgQQorICBCCisgK0MKKyArRAorICtFCisgK0YKKysgMQorKyAyCitkaWZmIC0tY29tYmluZWQgZmlsZTAKK2luZGV4IGI0MTQxMDgsZjQ2MTVkYS4uMTBhOGE5ZgorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQEAgLTEsNiAtMSw2ICsxLDkgQEBACisgIDEKKyAgMgorICAzCisgKzQKKyArNQorICs2CisrIEEKKysgQgorKyBDCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmYxZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxMzUgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtcCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290X21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDVjYjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290X21hc3RlcgpAQCAtMCwwICsxLDQyIEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA3Mjg5ZTM1Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBmNDYxNWRhLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gNzI4OWUzNS4uLiBBCWZpbGUzCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworOjEwMDY0NCAxMDA2NDQgODQyMmQ0MC4uLiBjZWFkMzJlLi4uIE0JZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiBiMWU2NzIyLi4uIEEJZmlsZTEKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDg0MjJkNDAuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGI0MTQxMDguLi4gTQlmaWxlMAorOjEwMDY0NCAwMDAwMDAgMDFlNzljMy4uLiAwMDAwMDAwLi4uIEQJZmlsZTIKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMzVkMjQyYi4uLiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDFlNzljMy4uLiBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1TRl8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzlkYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1TRl8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxOCBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLVNGIC1wIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGX21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tU0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTkzMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGX21hc3RlcgpAQCAtMCwwICsxLDkgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC1TRiBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworOjEwMDY0NCAxMDA2NDQgODQyMmQ0MC4uLiBjZWFkMzJlLi4uIE0JZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tcF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4ZDQzMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tcF9tYXN0ZXIKQEAgLTAsMCArMSwxMDIgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC1wIG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDNiY2MyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkX21hc3RlcgpAQCAtMCwwICsxLDMyIEBACiskIGdpdCB3aGF0Y2hhbmdlZCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDcyODllMzUuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGY0NjE1ZGEuLi4gTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiA3Mjg5ZTM1Li4uIEEJZmlsZTMKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCis6MTAwNjQ0IDEwMDY0NCA4NDIyZDQwLi4uIGNlYWQzMmUuLi4gTQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIGIxZTY3MjIuLi4gQQlmaWxlMQorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIuLi4gODQyMmQ0MC4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMuLi4gYjQxNDEwOC4uLiBNCWZpbGUwCis6MTAwNjQ0IDAwMDAwMCAwMWU3OWMzLi4uIDAwMDAwMDAuLi4gRAlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2ggYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjUzZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKQEAgLTAsMCArMSwyMDkxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3ZhcmlvdXMgZm9ybWF0LXBhdGNoIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUgJiYKKwljYXQgZmlsZSA+ZWxpZiAmJgorCWdpdCBhZGQgZmlsZSBlbGlmICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKworCWZvciBpIGluIDEgMiA1IDYgQSBCIEMgNyA4IDkgMTA7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZSAmJgorCXRlc3RfY2htb2QgK3ggZWxpZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNpZGUgY2hhbmdlcyAjMSIgJiYKKworCWZvciBpIGluIEQgRSBGOyBkbyBlY2hvICIkaSI7IGRvbmUgPj5maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSBjaGFuZ2VzICMyIiAmJgorCWdpdCB0YWcgQzIgJiYKKworCWZvciBpIGluIDUgNiAxIDIgMyBBIDQgQiBDIDcgOCA5IDEwIEQgRSBGOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIGNoYW5nZXMgIzMgd2l0aCBcXG4gYmFja3NsYXNoLW4gaW4gaXQuIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBkaWZmLXRyZWUgLXAgQzIgPnBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPHBhdGNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiTWFzdGVyIGFjY2VwdHMgbW9yYWwgZXF1aXZhbGVudCBvZiAjMiIgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBhdGNoaWQgJiYKKwlmb3IgaSBpbiA1IDYgMSAyIDMgQSA0IEIgQyA3IDggOSAxMCBEIEUgRjsgZG8gZWNobyAiJGkiOyBkb25lID5maWxlMiAmJgorCWZvciBpIGluIDEgMiAzIEEgNCBCIEMgNyA4IDkgMTAgRCBFIEYgNSA2OyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUzICYmCisJZm9yIGkgaW4gOCA5IDEwOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgZmlsZTIgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXRjaGlkIDEiICYmCisJZm9yIGkgaW4gNCBBIEIgNyA4IDkgMTA7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZTIgJiYKKwlmb3IgaSBpbiA4IDkgMTAgNSA2OyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMiBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhdGNoaWQgMiIgJiYKKwlmb3IgaSBpbiAxMCA1IDY7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhdGNoaWQgMyIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoMCAmJgorCWdyZXAgIl5Gcm9tICIgcGF0Y2gwID5mcm9tMCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgZnJvbTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBcCisJCS0taWdub3JlLWlmLWluLXVwc3RyZWFtIG1hc3Rlci4uc2lkZSA+cGF0Y2gxICYmCisJZ3JlcCAiXkZyb20gIiBwYXRjaDEgPmZyb20xICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBmcm9tMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gaGFuZGxlcyB0YWdzJyAnCisJZ2l0IHRhZyAtYSB2MSAtbSB0YWcgc2lkZSAmJgorCWdpdCB0YWcgLWEgdjIgLW0gdGFnIG1hc3RlciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gdjIuLnYxID5wYXRjaDEgJiYKKwlncmVwICJeRnJvbSAiIHBhdGNoMSA+ZnJvbTEgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGZyb20xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvcm1hdC1wYXRjaCBkb2Vzbid0IGNvbnNpZGVyIG1lcmdlIGNvbW1pdHMiICcKKwlnaXQgY2hlY2tvdXQgLWIgc2xhdmUgbWFzdGVyICYmCisJZWNobyAiQW5vdGhlciBsaW5lIiA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hbSAiU2xhdmUgY2hhbmdlICMxIiAmJgorCWVjaG8gIllldCBhbm90aGVyIGxpbmUiID4+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWFtICJTbGF2ZSBjaGFuZ2UgIzIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlciBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBzbGF2ZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTMgLS1zdGRvdXQgPnBhdGNoICYmCisJZ3JlcCAiXkZyb20gIiBwYXRjaCA+ZnJvbSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgZnJvbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggcmVzdWx0IGFwcGxpZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgcmVidWlsZC0wIG1hc3RlciAmJgorCWdpdCBhbSAtMyBwYXRjaDAgJiYKKwlnaXQgcmV2LWxpc3QgbWFzdGVyLi4gPmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIHJlc3VsdCBhcHBsaWVzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHJlYnVpbGQtMSBtYXN0ZXIgJiYKKwlnaXQgYW0gLTMgcGF0Y2gxICYmCisJZ2l0IHJldi1saXN0IG1hc3Rlci4uID5saXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBkaWQgbm90IHNjcmV3IHVwIHRoZSBsb2cgbWVzc2FnZScgJworCWdpdCBjYXQtZmlsZSBjb21taXQgc2lkZSA+YWN0dWFsICYmCisJZ3JlcCAiXlNpZGUgLiogd2l0aCAuKiBiYWNrc2xhc2gtbiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBkaWQgbm90IHNjcmV3IHVwIHRoZSBsb2cgbWVzc2FnZScgJworCWdyZXAgIl5TdWJqZWN0OiAuKlNpZGUgY2hhbmdlcyAjMyB3aXRoIC4qIGJhY2tzbGFzaC1uIiBwYXRjaDAgJiYKKwlncmVwICJeU3ViamVjdDogLipTaWRlIGNoYW5nZXMgIzMgd2l0aCAuKiBiYWNrc2xhc2gtbiIgcGF0Y2gxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxheSBkaWQgbm90IHNjcmV3IHVwIHRoZSBsb2cgbWVzc2FnZScgJworCWdpdCBjYXQtZmlsZSBjb21taXQgcmVidWlsZC0xID5hY3R1YWwgJiYKKwlncmVwICJeU2lkZSAuKiB3aXRoIC4qIGJhY2tzbGFzaC1uIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0cmEgaGVhZGVycycgJworCWdpdCBjb25maWcgZm9ybWF0LmhlYWRlcnMgIlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+CisiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBmb3JtYXQuaGVhZGVycyAiQ2M6IFMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4KKyIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2gyICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoMiA+aGRyczIgJiYKKwlncmVwICJeVG86IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczIgJiYKKwlncmVwICJeQ2M6IFMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0cmEgaGVhZGVycyB3aXRob3V0IG5ld2xpbmVzJyAnCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzICJUbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5oZWFkZXJzICJDYzogUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2gzICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoMyA+aGRyczMgJiYKKwlncmVwICJeVG86IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczMgJiYKKwlncmVwICJeQ2M6IFMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0cmEgaGVhZGVycyB3aXRoIG11bHRpcGxlIFRvOnMnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBjb25maWcgLS1hZGQgZm9ybWF0LmhlYWRlcnMgIlRvOiBTIEUgQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDQgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g0ID5oZHJzNCAmJgorCWdyZXAgIl5UbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgaGRyczQgJiYKKwlncmVwICJeICpTIEUgQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnM0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGl0aW9uYWwgY29tbWFuZCBsaW5lIGNjIChhc2NpaSknICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jYz0iUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDUgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g1ID5oZHJzNSAmJgorCWdyZXAgIl5DYzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgaGRyczUgJiYKKwlncmVwICJeICpTIEUgQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnM1CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2FkZGl0aW9uYWwgY29tbWFuZCBsaW5lIGNjIChyZmM4MjIpJyAnCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzICJDYzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY2M9IlMuIEUuIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDUgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g1ID5oZHJzNSAmJgorCWdyZXAgIl5DYzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgaGRyczUgJiYKKwlncmVwICJeICpcIlMuIEUuIENpcGllbnRcIiA8c2NpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnM1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgbGluZSBoZWFkZXJzJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBmb3JtYXQuaGVhZGVycyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1hZGQtaGVhZGVyPSJDYzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDYgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g2ID5oZHJzNiAmJgorCWdyZXAgIl5DYzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uIGhlYWRlcnMgYW5kIGNvbW1hbmQgbGluZSBoZWFkZXJzJyAnCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzICJDYzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tYWRkLWhlYWRlcj0iQ2M6IFMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2g3ICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoNyA+aGRyczcgJiYKKwlncmVwICJeQ2M6IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4sXCQiIGhkcnM3ICYmCisJZ3JlcCAiXiAqUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzNworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kIGxpbmUgVG86IGhlYWRlciAoYXNjaWkpJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBmb3JtYXQuaGVhZGVycyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS10bz0iUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDggJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g4ID5oZHJzOCAmJgorCWdyZXAgIl5UbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzOAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb21tYW5kIGxpbmUgVG86IGhlYWRlciAocmZjODIyKScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS10bz0iUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoOCAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDggPmhkcnM4ICYmCisJZ3JlcCAiXlRvOiBcIlIuIEUuIENpcGllbnRcIiA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnM4CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NvbW1hbmQgbGluZSBUbzogaGVhZGVyIChyZmMyMDQ3KScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS10bz0iUiDDhCBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2g4ICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoOCA+aGRyczggJiYKKwlncmVwICJeVG86ID0/VVRGLTg/cT9SPTIwPUMzPTg0PTIwQ2lwaWVudD89IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlndXJhdGlvbiBUbzogaGVhZGVyIChhc2NpaSknICcKKwlnaXQgY29uZmlnIGZvcm1hdC50byAiUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2g5ICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoOSA+aGRyczkgJiYKKwlncmVwICJeVG86IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY29uZmlndXJhdGlvbiBUbzogaGVhZGVyIChyZmM4MjIpJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQudG8gIlIuIEUuIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2g5ICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoOSA+aGRyczkgJiYKKwlncmVwICJeVG86IFwiUi4gRS4gQ2lwaWVudFwiIDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY29uZmlndXJhdGlvbiBUbzogaGVhZGVyIChyZmMyMDQ3KScgJworCWdpdCBjb25maWcgZm9ybWF0LnRvICJSIMOEIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2g5ICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoOSA+aGRyczkgJiYKKwlncmVwICJeVG86ID0/VVRGLTg/cT9SPTIwPUMzPTg0PTIwQ2lwaWVudD89IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczkKKycKKworIyBjaGVja19wYXRjaCA8cGF0Y2g+OiBWZXJpZnkgdGhhdCA8cGF0Y2g+IGxvb2tzIGxpa2UgYSBoYWxmLXNhbmUKKyMgcGF0Y2ggZW1haWwgdG8gYXZvaWQgYSBmYWxzZSBwb3NpdGl2ZSB3aXRoICFncmVwCitjaGVja19wYXRjaCAoKSB7CisJZ3JlcCAtZSAiXkZyb206IiAiJDEiICYmCisJZ3JlcCAtZSAiXkRhdGU6IiAiJDEiICYmCisJZ3JlcCAtZSAiXlN1YmplY3Q6IiAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5mcm9tPWZhbHNlJyAnCisJZ2l0IC1jIGZvcm1hdC5mcm9tPWZhbHNlIGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoID5oZHJzICYmCisJY2hlY2tfcGF0Y2ggcGF0Y2ggJiYKKwkhIGdyZXAgIl5Gcm9tOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+XCQiIGhkcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LmZyb209dHJ1ZScgJworCWdpdCAtYyBmb3JtYXQuZnJvbT10cnVlIGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoID5oZHJzICYmCisJY2hlY2tfcGF0Y2ggaGRycyAmJgorCWdyZXAgIl5Gcm9tOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+XCQiIGhkcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LmZyb20gd2l0aCBhZGRyZXNzJyAnCisJZ2l0IC1jIGZvcm1hdC5mcm9tPSJGIFIgT20gPGZyb21AZXhhbXBsZS5jb20+IiBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaCAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaCA+aGRycyAmJgorCWNoZWNrX3BhdGNoIGhkcnMgJiYKKwlncmVwICJeRnJvbTogRiBSIE9tIDxmcm9tQGV4YW1wbGUuY29tPlwkIiBoZHJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tZnJvbSBvdmVycmlkZXMgZm9ybWF0LmZyb20nICcKKwlnaXQgLWMgZm9ybWF0LmZyb209IkYgUiBPbSA8ZnJvbUBleGFtcGxlLmNvbT4iIGZvcm1hdC1wYXRjaCAtLW5vLWZyb20gLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaCAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaCA+aGRycyAmJgorCWNoZWNrX3BhdGNoIGhkcnMgJiYKKwkhIGdyZXAgIl5Gcm9tOiBGIFIgT20gPGZyb21AZXhhbXBsZS5jb20+XCQiIGhkcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mcm9tIG92ZXJyaWRlcyBmb3JtYXQuZnJvbScgJworCWdpdCAtYyBmb3JtYXQuZnJvbT0iRiBSIE9tIDxmcm9tQGV4YW1wbGUuY29tPiIgZm9ybWF0LXBhdGNoIC0tZnJvbSAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoID5oZHJzICYmCisJY2hlY2tfcGF0Y2ggaGRycyAmJgorCSEgZ3JlcCAiXkZyb206IEYgUiBPbSA8ZnJvbUBleGFtcGxlLmNvbT5cJCIgaGRycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXRvIG92ZXJyaWRlcyBjb25maWcudG8nICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LnRvIFwKKwkJIlIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLXRvIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2gxMCAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDEwID5oZHJzMTAgJiYKKwljaGVja19wYXRjaCBoZHJzMTAgJiYKKwkhIGdyZXAgIl5UbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby10byBhbmQgLS10byByZXBsYWNlcyBjb25maWcudG8nICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LnRvIFwKKwkJIlNvbWVvbmUgPHNvbWVvbmVAb3V0LnRoZXJlPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tdG8gLS10bz0iU29tZW9uZSBFbHNlIDxlbHNlQG91dC50aGVyZT4iIFwKKwkJLS1zdGRvdXQgbWFzdGVyLi5zaWRlID5wYXRjaDExICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoMTEgPmhkcnMxMSAmJgorCWNoZWNrX3BhdGNoIGhkcnMxMSAmJgorCSEgZ3JlcCAiXlRvOiBTb21lb25lIDxzb21lb25lQG91dC50aGVyZT5cJCIgaGRyczExICYmCisJZ3JlcCAiXlRvOiBTb21lb25lIEVsc2UgPGVsc2VAb3V0LnRoZXJlPlwkIiBoZHJzMTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1jYyBvdmVycmlkZXMgY29uZmlnLmNjJyAnCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5jYyBcCisJCSJDIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1jYyAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoMTIgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2gxMiA+aGRyczEyICYmCisJY2hlY2tfcGF0Y2ggaGRyczEyICYmCisJISBncmVwICJeQ2M6IEMgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgaGRyczEyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tYWRkLWhlYWRlciBvdmVycmlkZXMgY29uZmlnLmhlYWRlcnMnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgXAorCQkiSGVhZGVyMTogQiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tYWRkLWhlYWRlciAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPnBhdGNoMTMgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2gxMyA+aGRyczEzICYmCisJY2hlY2tfcGF0Y2ggaGRyczEzICYmCisJISBncmVwICJeSGVhZGVyMTogQiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgZmlsZXMnICcKKwlybSAtcmYgcGF0Y2hlcy8gJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gcGF0Y2hlcy8gbWFzdGVyICYmCisJbHMgcGF0Y2hlcy8wMDAxLVNpZGUtY2hhbmdlcy0xLnBhdGNoIHBhdGNoZXMvMDAwMi1TaWRlLWNoYW5nZXMtMi5wYXRjaCBwYXRjaGVzLzAwMDMtU2lkZS1jaGFuZ2VzLTMtd2l0aC1uLWJhY2tzbGFzaC1uLWluLWl0LnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlcm9sbCBjb3VudCcgJworCXJtIC1mciBwYXRjaGVzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzIC0tY292ZXItbGV0dGVyIC0tcmVyb2xsLWNvdW50IDQgbWFzdGVyLi5zaWRlID5saXN0ICYmCisJISBncmVwIC12ICJecGF0Y2hlcy92NC0wMDBbMC0zXS0iIGxpc3QgJiYKKwlzZWQgLW4gLWUgIi9eU3ViamVjdDogL3AiICQoY2F0IGxpc3QpID5zdWJqZWN0cyAmJgorCSEgZ3JlcCAtdiAiXlN1YmplY3Q6IFxbUEFUQ0ggdjQgWzAtM10vM1xdICIgc3ViamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyb2xsIGNvdW50ICgtdiknICcKKwlybSAtZnIgcGF0Y2hlcyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gcGF0Y2hlcyAtLWNvdmVyLWxldHRlciAtdjQgbWFzdGVyLi5zaWRlID5saXN0ICYmCisJISBncmVwIC12ICJecGF0Y2hlcy92NC0wMDBbMC0zXS0iIGxpc3QgJiYKKwlzZWQgLW4gLWUgIi9eU3ViamVjdDogL3AiICQoY2F0IGxpc3QpID5zdWJqZWN0cyAmJgorCSEgZ3JlcCAtdiAiXlN1YmplY3Q6IFxbUEFUQ0ggdjQgWzAtM10vM1xdICIgc3ViamVjdHMKKycKKworY2hlY2tfdGhyZWFkaW5nICgpIHsKKwlleHBlY3Q9IiQxIiAmJgorCXNoaWZ0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAiJEAiID5wYXRjaCAmJgorCSMgUHJpbnRzIGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGUgTWVzc2FnZS1JRCBhbmQgSW4tUmVwbHktVG8sCisJIyBhbmQgcmVwbGFjZXMgYWxsIE1lc3NhZ2UtSUQtbG9va2FsaWtlcyBieSBhIHNlcXVlbmNlIG51bWJlcgorCXBlcmwgLW5lICcKKwkJaWYgKC9eKG1lc3NhZ2UtaWR8cmVmZXJlbmNlc3xpbi1yZXBseS10bykvaSkgeworCQkJJHByaW50aW5nID0gMTsKKwkJfSBlbHNpZiAoL15cUy8pIHsKKwkJCSRwcmludGluZyA9IDA7CisJCX0KKwkJaWYgKCRwcmludGluZykgeworCQkJJGh7JDF9PSRpKysgaWYgKC88KFtePl0rKT4vIGFuZCAhZXhpc3RzICRoeyQxfSk7CisJCQlmb3IgJGsgKGtleXMgJWgpIHtzLyRrLyRoeyRrfS99OworCQkJcHJpbnQ7CisJCX0KKwkJcHJpbnQgIi0tLVxuIiBpZiAvXkZyb20gL2k7CisJJyA8cGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wICIkZXhwZWN0IiBhY3R1YWwKK30KKworY2F0ID4+ZXhwZWN0Lm5vLXRocmVhZGluZyA8PEVPRgorLS0tCistLS0KKy0tLQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRocmVhZGluZycgJworCWdpdCBjaGVja291dCBzaWRlICYmCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5uby10aHJlYWRpbmcgbWFzdGVyCisnCisKK2NhdCA+ZXhwZWN0LnRocmVhZCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDE+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQnICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LnRocmVhZCAtLXRocmVhZCBtYXN0ZXIKKycKKworY2F0ID5leHBlY3QuaW4tcmVwbHktdG8gPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmluLXJlcGx5LXRvIC0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiBcCisJCS0tdGhyZWFkIG1hc3RlcgorJworCitjYXQgPmV4cGVjdC5jb3Zlci1sZXR0ZXIgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwxPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwyPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwzPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGNvdmVyLWxldHRlcicgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuY292ZXItbGV0dGVyIC0tY292ZXItbGV0dGVyIC0tdGhyZWFkIG1hc3RlcgorJworCitjYXQgPmV4cGVjdC5jbC1pcnQgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKy0tLQorTWVzc2FnZS1JZDogPDQ+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgY292ZXItbGV0dGVyIGluLXJlcGx5LXRvJyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5jbC1pcnQgLS1jb3Zlci1sZXR0ZXIgXAorCQktLWluLXJlcGx5LXRvPSI8dGVzdC5tZXNzYWdlPiIgLS10aHJlYWQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBleHBsaWNpdCBzaGFsbG93JyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5jbC1pcnQgLS1jb3Zlci1sZXR0ZXIgXAorCQktLWluLXJlcGx5LXRvPSI8dGVzdC5tZXNzYWdlPiIgLS10aHJlYWQ9c2hhbGxvdyBtYXN0ZXIKKycKKworY2F0ID5leHBlY3QuZGVlcCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDE+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MD4KKwk8MT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCcgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcCAtLXRocmVhZD1kZWVwIG1hc3RlcgorJworCitjYXQgPmV4cGVjdC5kZWVwLWlydCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8Mj4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorCTwyPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIGluLXJlcGx5LXRvJyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5kZWVwLWlydCAgLS10aHJlYWQ9ZGVlcCBcCisJCS0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiBtYXN0ZXIKKycKKworY2F0ID5leHBlY3QuZGVlcC1jbCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDE+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MD4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MD4KKwk8MT4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDI+CitSZWZlcmVuY2VzOiA8MD4KKwk8MT4KKwk8Mj4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCBjb3Zlci1sZXR0ZXInICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmRlZXAtY2wgLS1jb3Zlci1sZXR0ZXIgLS10aHJlYWQ9ZGVlcCBtYXN0ZXIKKycKKworY2F0ID5leHBlY3QuZGVlcC1jbC1pcnQgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CitJbi1SZXBseS1UbzogPDE+CitSZWZlcmVuY2VzOiA8MT4KKy0tLQorTWVzc2FnZS1JZDogPDI+CitJbi1SZXBseS1UbzogPDA+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKy0tLQorTWVzc2FnZS1JZDogPDM+CitJbi1SZXBseS1UbzogPDI+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKwk8Mj4KKy0tLQorTWVzc2FnZS1JZDogPDQ+CitJbi1SZXBseS1UbzogPDM+CitSZWZlcmVuY2VzOiA8MT4KKwk8MD4KKwk8Mj4KKwk8Mz4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZGVlcCBjb3Zlci1sZXR0ZXIgaW4tcmVwbHktdG8nICcKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmRlZXAtY2wtaXJ0IC0tY292ZXItbGV0dGVyIFwKKwkJLS1pbi1yZXBseS10bz0iPHRlc3QubWVzc2FnZT4iIC0tdGhyZWFkPWRlZXAgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCB2aWEgY29uZmlnJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnRocmVhZCB0cnVlICYmCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC50aHJlYWQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIHZpYSBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudGhyZWFkIGRlZXAgJiYKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LmRlZXAgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb25maWcgKyBvdmVycmlkZScgJworCXRlc3RfY29uZmlnIGZvcm1hdC50aHJlYWQgZGVlcCAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3QudGhyZWFkIC0tdGhyZWFkIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgY29uZmlnICsgLS1uby10aHJlYWQnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudGhyZWFkIGRlZXAgJiYKKwljaGVja190aHJlYWRpbmcgZXhwZWN0Lm5vLXRocmVhZGluZyAtLW5vLXRocmVhZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjZXNzaXZlIHN1YmplY3QnICcKKwlybSAtcmYgcGF0Y2hlcy8gJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWJlZm9yZT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlKSAmJgorCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkYmVmb3JlKSAmJgorCWZvciBpIGluIDUgNiAxIDIgMyBBIDQgQiBDIDcgOCA5IDEwIEQgRSBGOyBkbyBlY2hvICIkaSI7IGRvbmUgPj5maWxlICYmCisJYWZ0ZXI9JChnaXQgaGFzaC1vYmplY3QgZmlsZSkgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkYWZ0ZXIpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiVGhpcyBpcyBhbiBleGNlc3NpdmVseSBsb25nIHN1YmplY3QgbGluZSBmb3IgYSBtZXNzYWdlIGR1ZSB0byB0aGUgaGFiaXQgc29tZSBwcm9qZWN0cyBoYXZlIG9mIG5vdCBoYXZpbmcgYSBzaG9ydCwgb25lLWxpbmUgc3ViamVjdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLCBidXQgcmF0aGVyIHN0aWNraW5nIGEgd2hvbGUgcGFyYWdyYXBoIHJpZ2h0IGF0IHRoZSBzdGFydCBhcyB0aGUgb25seSB0aGluZyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIEl0IGhhZCBiZXR0ZXIgbm90IGJlY29tZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBwYXRjaC4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzLyBtYXN0ZXIuLnNpZGUgJiYKKwlscyBwYXRjaGVzLzAwMDQtVGhpcy1pcy1hbi1leGNlc3NpdmVseS1sb25nLXN1YmplY3QtbGluZS1mb3ItYS1tZXNzYS5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsdXJlIHRvIHdyaXRlIGNvdmVyLWxldHRlciBhYm9ydHMgZ3JhY2VmdWxseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm1kaXIgMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2giICYmCisJbWtkaXIgMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9ybWF0LXBhdGNoIC0tbm8tcmVuYW1lcyAtLWNvdmVyLWxldHRlciAtMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3Zlci1sZXR0ZXIgaW5oZXJpdHMgZGlmZiBvcHRpb25zJyAnCisJZ2l0IG12IGZpbGUgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBmb28gJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tcmVuYW1lcyAtLWNvdmVyLWxldHRlciAtMSAmJgorCWNoZWNrX3BhdGNoIDAwMDAtY292ZXItbGV0dGVyLnBhdGNoICYmCisJISBncmVwICJmaWxlID0+IGZvbyAuKiAwICpcJCIgMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2ggJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0xIC1NICYmCisJZ3JlcCAiZmlsZSA9PiBmb28gLiogMCAqXCQiIDAwMDAtY292ZXItbGV0dGVyLnBhdGNoCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisgIFRoaXMgaXMgYW4gZXhjZXNzaXZlbHkgbG9uZyBzdWJqZWN0IGxpbmUgZm9yIGEgbWVzc2FnZSBkdWUgdG8gdGhlCisgICAgaGFiaXQgc29tZSBwcm9qZWN0cyBoYXZlIG9mIG5vdCBoYXZpbmcgYSBzaG9ydCwgb25lLWxpbmUgc3ViamVjdCBhdAorICAgIHRoZSBzdGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UsIGJ1dCByYXRoZXIgc3RpY2tpbmcgYSB3aG9sZQorICAgIHBhcmFncmFwaCByaWdodCBhdCB0aGUgc3RhcnQgYXMgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIGNvbW1pdAorICAgIG1lc3NhZ2UuIEl0IGhhZCBiZXR0ZXIgbm90IGJlY29tZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBwYXRjaC4KKyAgZm9vCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBvZiBjb3Zlci1sZXR0ZXIgd3JhcHMgb3Zlcmx5LWxvbmcgb25lbGluZXMnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0yICYmCisJc2VkIC1lICIxLC9BIFUgVGhvci9kIiAtZSAiL15cJC9xIiAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgoraW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAorLS0tIGEvZmlsZQorKysrIGIvZmlsZQorQEAgLTEzLDQgKzEzLDIwIEBAIEMKKyAxMAorIEQKKyBFCisgRgorKzUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggcmVzcGVjdHMgLVUnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC1VNCAtMiAmJgorCXNlZCAtZSAiMSwvXmRpZmYvZCIgLWUgIi9eKzUvcSIgXAorCQk8MDAwMS1UaGlzLWlzLWFuLWV4Y2Vzc2l2ZWx5LWxvbmctc3ViamVjdC1saW5lLWZvci1hLW1lc3NhLnBhdGNoIFwKKwkJPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKworZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCitpbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMTQsMyArMTQsMTkgQEAgQworIEQKKyBFCisgRgorKzUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLXAgc3VwcHJlc3NlcyBzdGF0JyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtcCAtMiAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIC1lICIvXis1L3EiIDAwMDEtVGhpcy1pcy1hbi1leGNlc3NpdmVseS1sb25nLXN1YmplY3QtbGluZS1mb3ItYS1tZXNzYS5wYXRjaCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZnJvbSBhIHN1YmRpcmVjdG9yeSAoMSknICcKKwlmaWxlbmFtZT0kKAorCQlybSAtcmYgc3ViICYmCisJCW1rZGlyIC1wIHN1Yi9kaXIgJiYKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xCisJKSAmJgorCWNhc2UgIiRmaWxlbmFtZSIgaW4KKwkwKikKKwkJOzsgIyBvaworCSopCisJCWVjaG8gIk9vcHM/ICRmaWxlbmFtZSIKKwkJZmFsc2UKKwkJOzsKKwllc2FjICYmCisJdGVzdCAtZiAiJGZpbGVuYW1lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZnJvbSBhIHN1YmRpcmVjdG9yeSAoMiknICcKKwlmaWxlbmFtZT0kKAorCQlybSAtcmYgc3ViICYmCisJCW1rZGlyIC1wIHN1Yi9kaXIgJiYKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xIC1vIC4uCisJKSAmJgorCWNhc2UgIiRmaWxlbmFtZSIgaW4KKwkuLi8wKikKKwkJOzsgIyBvaworCSopCisJCWVjaG8gIk9vcHM/ICRmaWxlbmFtZSIKKwkJZmFsc2UKKwkJOzsKKwllc2FjICYmCisJYmFzZW5hbWU9JChleHByICIkZmlsZW5hbWUiIDogIi4qL1woLipcKSIpICYmCisJdGVzdCAtZiAic3ViLyRiYXNlbmFtZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGZyb20gYSBzdWJkaXJlY3RvcnkgKDMpJyAnCisJcm0gLWYgMCogJiYKKwlmaWxlbmFtZT0kKAorCQlybSAtcmYgc3ViICYmCisJCW1rZGlyIC1wIHN1Yi9kaXIgJiYKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xIC1vICIkVFJBU0hfRElSRUNUT1JZIgorCSkgJiYKKwliYXNlbmFtZT0kKGV4cHIgIiRmaWxlbmFtZSIgOiAiLiovXCguKlwpIikgJiYKKwl0ZXN0IC1mICIkYmFzZW5hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWluLXJlcGx5LXRvJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLWluLXJlcGx5LXRvICJiYXpAZm9vLmJhciIgPnBhdGNoOCAmJgorCWdyZXAgIl5Jbi1SZXBseS1UbzogPGJhekBmb28uYmFyPiIgcGF0Y2g4ICYmCisJZ3JlcCAiXlJlZmVyZW5jZXM6IDxiYXpAZm9vLmJhcj4iIHBhdGNoOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1zaWdub2ZmJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXNpZ25vZmYgLS1zdGRvdXQgPm91dCAmJgorCWdyZXAgIl5TaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1ub3RlcyAtLXNpZ25vZmYnICcKKwlnaXQgbm90ZXMgLS1yZWYgdGVzdCBhZGQgLW0gInRlc3QgbWVzc2FnZSIgSEVBRCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zaWdub2ZmIC0tc3Rkb3V0IC0tbm90ZXM9dGVzdCA+b3V0ICYmCisJIyBUaHJlZSBkYXNoZXMgbXVzdCBjb21lIGFmdGVyIFMtby1iCisJISBzZWQgIi9eU2lnbmVkLW9mZi1ieTogL3EiIG91dCB8IGdyZXAgInRlc3QgbWVzc2FnZSIgJiYKKwlzZWQgIjEsL15TaWduZWQtb2ZmLWJ5OiAvZCIgb3V0IHwgZ3JlcCAidGVzdCBtZXNzYWdlIiAmJgorCSMgTm90ZXMgbWVzc2FnZSBtdXN0IGNvbWUgYWZ0ZXIgdGhyZWUgZGFzaGVzCisJISBzZWQgIi9eLS0tJC9xIiBvdXQgfCBncmVwICJ0ZXN0IG1lc3NhZ2UiICYmCisJc2VkICIxLC9eLS0tJC9kIiBvdXQgfCBncmVwICJ0ZXN0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBub3RlcyBvdXRwdXQgY29udHJvbCcgJworCWdpdCBub3RlcyBhZGQgLW0gIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBIRUFEICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgSEVBRCAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJISBncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzID5vdXQgJiYKKwlncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzID5vdXQgJiYKKwkhIGdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tbm90ZXMgLS1uby1ub3RlcyA+b3V0ICYmCisJISBncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzIC0tbm90ZXMgPm91dCAmJgorCWdyZXAgIm5vdGVzIGNvbmZpZyBtZXNzYWdlIiBvdXQgJiYKKworCXRlc3RfY29uZmlnIGZvcm1hdC5ub3RlcyB0cnVlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJZ3JlcCAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3RlcyA+b3V0ICYmCisJZ3JlcCAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1uby1ub3RlcyA+b3V0ICYmCisJISBncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzIC0tbm8tbm90ZXMgPm91dCAmJgorCSEgZ3JlcCAibm90ZXMgY29uZmlnIG1lc3NhZ2UiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1uby1ub3RlcyAtLW5vdGVzID5vdXQgJiYKKwlncmVwICJub3RlcyBjb25maWcgbWVzc2FnZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3aXRoIG11bHRpcGxlIG5vdGVzIHJlZnMnICcKKwlnaXQgbm90ZXMgLS1yZWYgbm90ZTEgYWRkIC1tICJ0aGlzIGlzIG5vdGUgMSIgSEVBRCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWYgbm90ZTEgcmVtb3ZlIEhFQUQgJiYKKwlnaXQgbm90ZXMgLS1yZWYgbm90ZTIgYWRkIC1tICJ0aGlzIGlzIG5vdGUgMiIgSEVBRCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWYgbm90ZTIgcmVtb3ZlIEhFQUQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3Rlcz1ub3RlMSA+b3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3Rlcz1ub3RlMiA+b3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1ub3Rlcz1ub3RlMSAtLW5vdGVzPW5vdGUyID5vdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCisJdGVzdF9jb25maWcgZm9ybWF0Lm5vdGVzIG5vdGUxICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+b3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1uby1ub3RlcyA+b3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJISBncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vdGVzPW5vdGUyID5vdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMSIgb3V0ICYmCisJZ3JlcCAidGhpcyBpcyBub3RlIDIiIG91dCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1uby1ub3RlcyAtLW5vdGVzPW5vdGUyID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisKKwlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5ub3RlcyBub3RlMiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLW5vLW5vdGVzID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdpdGggbXVsdGlwbGUgbm90ZXMgcmVmcyBpbiBjb25maWcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfdW5jb25maWcgZm9ybWF0Lm5vdGVzIiAmJgorCisJZ2l0IG5vdGVzIC0tcmVmIG5vdGUxIGFkZCAtbSAidGhpcyBpcyBub3RlIDEiIEhFQUQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmIG5vdGUxIHJlbW92ZSBIRUFEICYmCisJZ2l0IG5vdGVzIC0tcmVmIG5vdGUyIGFkZCAtbSAidGhpcyBpcyBub3RlIDIiIEhFQUQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmIG5vdGUyIHJlbW92ZSBIRUFEICYmCisKKwlnaXQgY29uZmlnIGZvcm1hdC5ub3RlcyBub3RlMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQgJiYKKwlnaXQgY29uZmlnIGZvcm1hdC5ub3RlcyBub3RlMiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5ub3RlcyBub3RlMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwlncmVwICJ0aGlzIGlzIG5vdGUgMiIgb3V0ICYmCisKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0Lm5vdGVzIG5vdGUxICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBmb3JtYXQubm90ZXMgZmFsc2UgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5vdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAxIiBvdXQgJiYKKwkhIGdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5ub3RlcyBub3RlMiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPm91dCAmJgorCSEgZ3JlcCAidGhpcyBpcyBub3RlIDEiIG91dCAmJgorCWdyZXAgInRoaXMgaXMgbm90ZSAyIiBvdXQKKycKKworZWNobyAiZmF0YWw6IC0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiID5leHBlY3QubmFtZS1vbmx5CitlY2hvICJmYXRhbDogLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIiA+ZXhwZWN0Lm5hbWUtc3RhdHVzCitlY2hvICJmYXRhbDogLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIiA+ZXhwZWN0LmNoZWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbnMgbm8gbG9uZ2VyIGFsbG93ZWQgZm9yIGZvcm1hdC1wYXRjaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1uYW1lLW9ubHkgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm5hbWUtb25seSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9ybWF0LXBhdGNoIC0tbmFtZS1zdGF0dXMgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm5hbWUtc3RhdHVzIG91dHB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1jaGVjayAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuY2hlY2sgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLW51bXN0YXQgc2hvdWxkIHByb2R1Y2UgYSBwYXRjaCcgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1udW1zdGF0IC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+b3V0cHV0ICYmCisJZ3JlcCAiXmRpZmYgLS1naXQgYS8iIG91dHB1dCA+ZGlmZiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS0gPHBhdGg+JyAnCisJZ2l0IGZvcm1hdC1wYXRjaCBtYXN0ZXIuLnNpZGUgLS0gZmlsZSAyPmVycm9yICYmCisJISBncmVwICJVc2UgLi0tIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gSEVBRCcgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgZ2l0IHZlcnNpb24nICcKKwlnaXRfdmVyc2lvbj0kKGdpdCAtLXZlcnNpb24pICYmCisJZ2l0X3ZlcnNpb249JHtnaXRfdmVyc2lvbiMjKiB9CisnCisKK3NpZ25hdHVyZSgpIHsKKwlwcmludGYgIiVzXG4lc1xuXG4iICItLSAiICIkezE6LSRnaXRfdmVyc2lvbn0iCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBkZWZhdWx0IHNpZ25hdHVyZScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCisJdGFpbCAtbiAzIHBhdGNoID5vdXRwdXQgJiYKKwlzaWduYXR1cmUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tc2lnbmF0dXJlJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZT0ibXkgc2lnIiAtMSA+cGF0Y2ggJiYKKwl0YWlsIC1uIDMgcGF0Y2ggPm91dHB1dCAmJgorCXNpZ25hdHVyZSAibXkgc2lnIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd2l0aCBmb3JtYXQuc2lnbmF0dXJlIGNvbmZpZycgJworCWdpdCBjb25maWcgZm9ybWF0LnNpZ25hdHVyZSAiY29uZmlnIHNpZyIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5vdXRwdXQgJiYKKwlncmVwICJjb25maWcgc2lnIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tc2lnbmF0dXJlIG92ZXJyaWRlcyBmb3JtYXQuc2lnbmF0dXJlJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQuc2lnbmF0dXJlICJjb25maWcgc2lnIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmU9Im92ZXJyaWRlcyIgLTEgPm91dHB1dCAmJgorCSEgZ3JlcCAiY29uZmlnIHNpZyIgb3V0cHV0ICYmCisJZ3JlcCAib3ZlcnJpZGVzIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tbm8tc2lnbmF0dXJlIGlnbm9yZXMgZm9ybWF0LnNpZ25hdHVyZScgJworCWdpdCBjb25maWcgZm9ybWF0LnNpZ25hdHVyZSAiY29uZmlnIHNpZyIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tc2lnbmF0dXJlPSJteSBzaWciIC0tbm8tc2lnbmF0dXJlIFwKKwkJLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCSEgZ3JlcCAiY29uZmlnIHNpZyIgb3V0cHV0ICYmCisJISBncmVwICJteSBzaWciIG91dHB1dCAmJgorCSEgZ3JlcCAiXi0tIFwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tc2lnbmF0dXJlIC0tY292ZXItbGV0dGVyJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBmb3JtYXQuc2lnbmF0dXJlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZT0ibXkgc2lnIiAtLWNvdmVyLWxldHRlciBcCisJCS0xID5vdXRwdXQgJiYKKwlncmVwICJteSBzaWciIG91dHB1dCA+c2lnICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBzaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LnNpZ25hdHVyZT0iIiBzdXBwcmVzc2VzIHNpZ25hdHVyZXMnICcKKwlnaXQgY29uZmlnIGZvcm1hdC5zaWduYXR1cmUgIiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5vdXRwdXQgJiYKKwljaGVja19wYXRjaCBvdXRwdXQgJiYKKwkhIGdyZXAgIl4tLSBcJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLW5vLXNpZ25hdHVyZSBzdXBwcmVzc2VzIHNpZ25hdHVyZXMnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGZvcm1hdC5zaWduYXR1cmUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbm8tc2lnbmF0dXJlIC0xID5vdXRwdXQgJiYKKwljaGVja19wYXRjaCBvdXRwdXQgJiYKKwkhIGdyZXAgIl4tLSBcJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXNpZ25hdHVyZT0iIiBzdXBwcmVzc2VzIHNpZ25hdHVyZXMnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tc2lnbmF0dXJlPSIiIC0xID5vdXRwdXQgJiYKKwljaGVja19wYXRjaCBvdXRwdXQgJiYKKwkhIGdyZXAgIl4tLSBcJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgbWFpbC1zaWduYXR1cmUgaW5wdXQnICcKKwljYXQgPm1haWwtc2lnbmF0dXJlIDw8LVxFT0YKKworCVRlc3QgVXNlciA8dGVzdC5lbWFpbEBrZXJuZWwub3JnPgorCWh0dHA6Ly9naXQua2VybmVsLm9yZy9jZ2l0L2dpdC9naXQuZ2l0CisKKwlnaXQua2VybmVsLm9yZy8/cD1naXQvZ2l0LmdpdDthPXN1bW1hcnkKKworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpZ25hdHVyZS1maWxlPWZpbGUgd29ya3MnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tc2lnbmF0dXJlLWZpbGU9bWFpbC1zaWduYXR1cmUgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCXNlZCAtZSAiMSwvXi0tIFwkL2QiIG91dHB1dCA+YWN0dWFsICYmCisJeworCQljYXQgbWFpbC1zaWduYXR1cmUgJiYgZWNobworCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LnNpZ25hdHVyZWZpbGUgd29ya3MnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuc2lnbmF0dXJlZmlsZSBtYWlsLXNpZ25hdHVyZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCXNlZCAtZSAiMSwvXi0tIFwkL2QiIG91dHB1dCA+YWN0dWFsICYmCisJeworCQljYXQgbWFpbC1zaWduYXR1cmUgJiYgZWNobworCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1zaWduYXR1cmUgc3VwcHJlc3NlcyBmb3JtYXQuc2lnbmF0dXJlZmlsZSAnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuc2lnbmF0dXJlZmlsZSBtYWlsLXNpZ25hdHVyZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1uby1zaWduYXR1cmUgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCSEgZ3JlcCAiXi0tIFwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWduYXR1cmUtZmlsZSBvdmVycmlkZXMgZm9ybWF0LnNpZ25hdHVyZWZpbGUnICcKKwljYXQgPm90aGVyLW1haWwtc2lnbmF0dXJlIDw8LVxFT0YgJiYKKwlVc2UgdGhpcyBvdGhlciBzaWduYXR1cmUgaW5zdGVhZCBvZiBtYWlsLXNpZ25hdHVyZS4KKwlFT0YKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuc2lnbmF0dXJlZmlsZSBtYWlsLXNpZ25hdHVyZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgXAorCQkJLS1zaWduYXR1cmUtZmlsZT1vdGhlci1tYWlsLXNpZ25hdHVyZSAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJc2VkIC1lICIxLC9eLS0gXCQvZCIgb3V0cHV0ID5hY3R1YWwgJiYKKwl7CisJCWNhdCBvdGhlci1tYWlsLXNpZ25hdHVyZSAmJiBlY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpZ25hdHVyZSBvdmVycmlkZXMgZm9ybWF0LnNpZ25hdHVyZWZpbGUnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuc2lnbmF0dXJlZmlsZSBtYWlsLXNpZ25hdHVyZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmU9Im15IHNpZyIgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCWdyZXAgIm15IHNpZyIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgcGFnaW5hdGVzJyAnCisJcm0gLWYgcGFnZXJfdXNlZCAmJgorCXRlc3RfdGVybWluYWwgZW52IEdJVF9QQUdFUj0id2MgPnBhZ2VyX3VzZWQiIGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1hbGwgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBwYWdlcl91c2VkCisnCisKKyB0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IHBhZ2luYXRpb24gY2FuIGJlIGRpc2FibGVkJyAnCisJcm0gLWYgcGFnZXJfdXNlZCAmJgorCXRlc3RfdGVybWluYWwgZW52IEdJVF9QQUdFUj0id2MgPnBhZ2VyX3VzZWQiIGdpdCAtLW5vLXBhZ2VyIGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWFsbCAmJgorCXRlc3RfdGVybWluYWwgZW52IEdJVF9QQUdFUj0id2MgPnBhZ2VyX3VzZWQiIGdpdCAtYyAicGFnZXIuZm9ybWF0LXBhdGNoPWZhbHNlIiBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1hbGwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBwYWdlcl91c2VkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9wYWdlcl91c2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBoYW5kbGVzIG11bHRpLWxpbmUgc3ViamVjdHMnICcKKwlybSAtcmYgcGF0Y2hlcy8gJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZm9yIGkgaW4gb25lIHR3byB0aHJlZTsgZG8gZWNobyAkaTsgZG9uZSA+bXNnICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtRiBtc2cgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHBhdGNoZXMgLTEgJiYKKwlncmVwIF5TdWJqZWN0OiBwYXRjaGVzLzAwMDEtb25lLnBhdGNoID5hY3R1YWwgJiYKKwllY2hvICJTdWJqZWN0OiBbUEFUQ0hdIG9uZSB0d28gdGhyZWUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBoYW5kbGVzIG11bHRpLWxpbmUgZW5jb2RlZCBzdWJqZWN0cycgJworCXJtIC1yZiBwYXRjaGVzLyAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlmb3IgaSBpbiBlbiB0dsOlIHRyZTsgZG8gZWNobyAkaTsgZG9uZSA+bXNnICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtRiBtc2cgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHBhdGNoZXMgLTEgJiYKKwlncmVwIF5TdWJqZWN0OiBwYXRjaGVzLzAwMDEtZW4ucGF0Y2ggPmFjdHVhbCAmJgorCWVjaG8gIlN1YmplY3Q6IFtQQVRDSF0gPT9VVEYtOD9xP2VuPTIwdHY9QzM9QTU9MjB0cmU/PSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworTTg9ImZvbyBiYXIgIgorTTY0PSRNOCRNOCRNOCRNOCRNOCRNOCRNOCRNOAorTTUxMj0kTTY0JE02NCRNNjQkTTY0JE02NCRNNjQkTTY0JE02NAorY2F0ID5leHBlY3QgPDwnRU9GJworU3ViamVjdDogW1BBVENIXSBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbworIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhcgorIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbworIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhcgorIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbworIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhcgorIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3cmFwcyBleHRyZW1lbHkgbG9uZyBzdWJqZWN0IChhc2NpaSknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiJE01MTIiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKwlzZWQgLW4gIi9eU3ViamVjdC9wOyAvXiAvcDsgL14kL3EiIHBhdGNoID5zdWJqZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmplY3QKKycKKworTTg9ImbDtsO2IGJhciAiCitNNjQ9JE04JE04JE04JE04JE04JE04JE04JE04CitNNTEyPSRNNjQkTTY0JE02NCRNNjQkTTY0JE02NCRNNjQkTTY0CitjYXQgPmV4cGVjdCA8PCdFT0YnCitTdWJqZWN0OiBbUEFUQ0hdID0/VVRGLTg/cT9mPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY/PQorID0/VVRGLTg/cT89QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj89CisgPT9VVEYtOD9xPz0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMD89CisgPT9VVEYtOD9xP2Jhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj89CisgPT9VVEYtOD9xPz0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj89CisgPT9VVEYtOD9xPz1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj89CisgPT9VVEYtOD9xPz1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPz0KKyA9P1VURi04P3E/PTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwPz0KKyA9P1VURi04P3E/YmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2Pz0KKyA9P1VURi04P3E/PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2Pz0KKyA9P1VURi04P3E/PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPz0KKyA9P1VURi04P3E/PUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI/PQorID0/VVRGLTg/cT89MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjA/PQorID0/VVRGLTg/cT9iYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY/PQorID0/VVRGLTg/cT89MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY/PQorID0/VVRGLTg/cT89QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj89CisgPT9VVEYtOD9xPz0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMD89CisgPT9VVEYtOD9xP2Jhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj89CisgPT9VVEYtOD9xPz0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj89CisgPT9VVEYtOD9xPz1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj89CisgPT9VVEYtOD9xPz1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPz0KKyA9P1VURi04P3E/PTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwPz0KKyA9P1VURi04P3E/YmFyPz0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIGV4dHJlbWVseSBsb25nIHN1YmplY3QgKHJmYzIwNDcpJyAnCisJcm0gLXJmIHBhdGNoZXMvICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIiRNNTEyIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCisJc2VkIC1uICIvXlN1YmplY3QvcDsgL14gL3A7IC9eJC9xIiBwYXRjaCA+c3ViamVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJqZWN0CisnCisKK2NoZWNrX2F1dGhvcigpIHsKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSQxIGdpdCBjb21taXQgLW0gYXV0aG9yLWNoZWNrICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKwlzZWQgLW4gIi9eRnJvbTogL3A7IC9eIC9wOyAvXiQvcSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworY2F0ID5leHBlY3QgPDwnRU9GJworRnJvbTogIkZvbyBCLiBCYXIiIDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBxdW90ZXMgZG90IGluIGZyb20taGVhZGVycycgJworCWNoZWNrX2F1dGhvciAiRm9vIEIuIEJhciIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworRnJvbTogIkZvbyBcIlRoZSBCYXpcIiBCYXIiIDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBxdW90ZXMgZG91YmxlLXF1b3RlIGluIGZyb20taGVhZGVycycgJworCWNoZWNrX2F1dGhvciAiRm9vIFwiVGhlIEJhelwiIEJhciIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworRnJvbTogPT9VVEYtOD9xP0Y9QzM9QjZvPTIwQmFyPz0gPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHVzZXMgcmZjMjA0Ny1lbmNvZGVkIGZyb20taGVhZGVycyB3aGVuIG5lY2Vzc2FyeScgJworCWNoZWNrX2F1dGhvciAiRsO2byBCYXIiCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206ID0/VVRGLTg/cT9GPUMzPUI2bz0yMEI9MkU9MjBCYXI/PSA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZmMyMDQ3LWVuY29kZWQgZnJvbS1oZWFkZXJzIGxlYXZlIG5vIHJmYzgyMiBzcGVjaWFscycgJworCWNoZWNrX2F1dGhvciAiRsO2byBCLiBCYXIiCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitGcm9tOiBmb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfCisgPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIG1vZGVyYXRlbHkgbG9uZyBmcm9tLWhlYWRlciAoYXNjaWkpJyAnCisJY2hlY2tfYXV0aG9yICJmb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfIgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitGcm9tOiBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhcgorIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbworIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd3JhcHMgZXh0cmVtZWx5IGxvbmcgZnJvbS1oZWFkZXIgKGFzY2lpKScgJworCWNoZWNrX2F1dGhvciAiRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworRnJvbTogIkZvby5CYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyCisgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vCisgQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIiA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd3JhcHMgZXh0cmVtZWx5IGxvbmcgZnJvbS1oZWFkZXIgKHJmYzgyMiknICcKKwljaGVja19hdXRob3IgIkZvby5CYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIiCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206ID0/VVRGLTg/cT9Gbz1DMz1CNj0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz89CisgPT9VVEYtOD9xPz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMD89CisgPT9VVEYtOD9xP0Jhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj89CisgPT9VVEYtOD9xPz0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMEZvbz0yMEJhcj0yMD89CisgPT9VVEYtOD9xP0Zvbz0yMEJhcj0yMEZvbz0yMEJhcj89IDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3cmFwcyBleHRyZW1lbHkgbG9uZyBmcm9tLWhlYWRlciAocmZjMjA0NyknICcKKwljaGVja19hdXRob3IgIkZvw7YgQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitTdWJqZWN0OiBoZWFkZXIgd2l0aCAuIGluIGl0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmplY3QgbGluZXMgZG8gbm90IGhhdmUgODIyIGF0b20tcXVvdGluZycgJworCWVjaG8gY29udGVudCA+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+YSAmJgorCWdpdCBkaWZmIC0tY2hlY2sgJiYKKwllY2hvICJiIGNvbmZsaWN0LW1hcmtlci1zaXplPTgiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgZGlmZiAtLWNoZWNrIGIgJiYKKwlnaXQgZGlmZiAtLWNoZWNrIGEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoIGIvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyMjU1YTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKQEAgLTAsMCArMSwxMTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGN1c3RvbSBkaWZmIGZ1bmN0aW9uIG5hbWUgcGF0dGVybnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCSMgYSBub24tdHJpdmlhbCBjdXN0b20gcGF0dGVybgorCWdpdCBjb25maWcgZGlmZi5jdXN0b20xLmZ1bmNuYW1lICIhc3RhdGljCishU3RyaW5nCitbXiAJXS4qcy4qIiAmJgorCisJIyBhIGN1c3RvbSBwYXR0ZXJuIHdoaWNoIG1hdGNoZXMgdG8gZW5kIG9mIGxpbmUKKwlnaXQgY29uZmlnIGRpZmYuY3VzdG9tMi5mdW5jbmFtZSAiLi4uLi4uQmVlclwkIiAmJgorCisJIyBhbHRlcm5hdGlvbiBpbiBwYXR0ZXJuCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbTMuZnVuY25hbWUgIkJlZXIkIiAmJgorCWdpdCBjb25maWcgZGlmZi5jdXN0b20zLnhmdW5jbmFtZSAiXlsgCV0qKChwdWJsaWN8c3RhdGljKS4qKSQiICYmCisKKwkjIGZvciByZWdleHAgY29tcGlsYXRpb24gdGVzdHMKKwllY2hvIEEgPkEuamF2YSAmJgorCWVjaG8gQiA+Qi5qYXZhCisnCisKK2RpZmZwYXR0ZXJucz0iCisJYWRhCisJYmlidGV4CisJY3BwCisJY3NoYXJwCisJY3NzCisJZHRzCisJZWxpeGlyCisJZm9ydHJhbgorCWZvdW50YWluCisJZ29sYW5nCisJaHRtbAorCWphdmEKKwltYXRsYWIKKwlvYmpjCisJcGFzY2FsCisJcGVybAorCXBocAorCXB5dGhvbgorCXJ1YnkKKwlydXN0CisJdGV4CisJY3VzdG9tMQorCWN1c3RvbTIKKwljdXN0b20zCisiCisKK2ZvciBwIGluICRkaWZmcGF0dGVybnMKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYnVpbHRpbiAkcCBwYXR0ZXJuIGNvbXBpbGVzIiAnCisJCWVjaG8gIiouamF2YSBkaWZmPSRwIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggXAorCQkJQS5qYXZhIEIuamF2YSAyPm1zZyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgZmF0YWwgbXNnICYmCisJCXRlc3RfaTE4bmdyZXAgISBlcnJvciBtc2cKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYnVpbHRpbiAkcCB3b3JkUmVnZXggcGF0dGVybiBjb21waWxlcyIgJworCQllY2hvICIqLmphdmEgZGlmZj0kcCIgPi5naXRhdHRyaWJ1dGVzICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IC0td29yZC1kaWZmIFwKKwkJCUEuamF2YSBCLmphdmEgMj5tc2cgJiYKKwkJdGVzdF9pMThuZ3JlcCAhIGZhdGFsIG1zZyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgZXJyb3IgbXNnCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXN0IHJlZ2V4cCBtdXN0IG5vdCBiZSBuZWdhdGVkJyAnCisJZWNobyAiKi5qYXZhIGRpZmY9amF2YSIgPi5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9jb25maWcgZGlmZi5qYXZhLmZ1bmNuYW1lICIhc3RhdGljIiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBkaWZmIC0tbm8taW5kZXggQS5qYXZhIEIuamF2YSAyPm1zZyAmJgorCXRlc3RfaTE4bmdyZXAgIjogTGFzdCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG5lZ2F0ZWQ6IiBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaHVuayBoZWFkZXIgdGVzdHMnICcKKwlmb3IgaSBpbiAkZGlmZnBhdHRlcm5zCisJZG8KKwkJZWNobyAiJGktKiBkaWZmPSRpIgorCWRvbmUgPiAuZ2l0YXR0cmlidXRlcyAmJgorCisJIyBhZGQgYWxsIHRlc3QgZmlsZXMgdG8gdGhlIGluZGV4CisJKAorCQljZCAiJFRFU1RfRElSRUNUT1JZIi90NDAxOCAmJgorCQlnaXQgLS1naXQtZGlyPSIkVFJBU0hfRElSRUNUT1JZLy5naXQiIGFkZCAuCisJKSAmJgorCisJIyBwbGFjZSBtb2RpZmllZCBmaWxlcyBpbiB0aGUgd29ya3RyZWUKKwlmb3IgaSBpbiAkKGdpdCBscy1maWxlcykKKwlkbworCQlzZWQgLWUgInMvQ2hhbmdlTWUvSVdhc0NoYW5nZWQvIiA8IiRURVNUX0RJUkVDVE9SWS90NDAxOC8kaSIgPiIkaSIgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKKyMgY2hlY2sgZWFjaCBpbmRpdmlkdWFsIGZpbGUKK2ZvciBpIGluICQoZ2l0IGxzLWZpbGVzKQorZG8KKwlpZiBncmVwIGJyb2tlbiAiJGkiID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJcmVzdWx0PWZhaWx1cmUKKwllbHNlCisJCXJlc3VsdD1zdWNjZXNzCisJZmkKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJodW5rIGhlYWRlcjogJGkiICIKKwkJZ2l0IGRpZmYgLVUxICRpID5hY3R1YWwgJiYKKwkJZ3JlcCAnQEAgLiogQEAuKlJJR0hUJyBhY3R1YWwKKwkiCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9SRUFETUUgYi90L3Q0MDE4L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODNlMDFjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvUkVBRE1FCkBAIC0wLDAgKzEsMTggQEAKK0hvdyB0byB3cml0ZSBSSUdIVCB0ZXN0IGNhc2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnNlcnQgdGhlIHdvcmQgIkNoYW5nZU1lIiAoZXhhY3RseSB0aGlzIGZvcm0pIGF0IGEgZGlzdGFuY2Ugb2YKK2F0IGxlYXN0IHR3byBsaW5lcyBmcm9tIHRoZSBsaW5lIHRoYXQgbXVzdCBhcHBlYXIgaW4gdGhlIGh1bmsgaGVhZGVyLgorCitUaGUgdGV4dCB0aGF0IG11c3QgYXBwZWFyIGluIHRoZSBodW5rIGhlYWRlciBtdXN0IGNvbnRhaW4gdGhlIHdvcmQKKyJyaWdodCIsIGJ1dCBpbiBhbGwgdXBwZXItY2FzZSwgbGlrZSBpbiB0aGUgdGl0bGUgYWJvdmUuCisKK1RvIG1hcmsgYSB0ZXN0IGNhc2UgdGhhdCBoaWdobGlnaHRzIGEgbWFsZnVuY3Rpb24sIGluc2VydCB0aGUgd29yZAorQlJPS0VOIGluIGFsbCBsb3dlci1jYXNlIHNvbWV3aGVyZSBpbiB0aGUgZmlsZS4KKworVGhpcyB0ZXh0IGlzIGEgYml0IHR3aXN0ZWQgYW5kIG91dCBvZiBvcmRlciwgYnV0IGl0IGlzIGl0c2VsZiBhCit0ZXN0IGNhc2UgZm9yIHRoZSBkZWZhdWx0IGh1bmsgaGVhZGVyIHBhdHRlcm4uIEtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCitpZiB5b3UgY2hhbmdlIGl0LgorCitCVFcsIHRoaXMgdGVzdHMgdGhhdCB0aGUgaGVhZCBsaW5lIGdvZXMgdG8gdGhlIGh1bmsgaGVhZGVyLCBub3QgdGhlIGxpbmUKK29mIGVxdWFsIHNpZ25zLgpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtYysrLWZ1bmN0aW9uIGIvdC90NDAxOC9jcHAtYysrLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZTZiYmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1jKystZnVuY3Rpb24KQEAgLTAsMCArMSw0IEBACitJdGVtIFJJR0hUOjpEb1NvbWV0aGluZyggQXJncyB3aXRoX3NwYWNlcyApCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1jbGFzcy1jb25zdHJ1Y3RvciBiL3QvdDQwMTgvY3BwLWNsYXNzLWNvbnN0cnVjdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGYxMTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1jbGFzcy1jb25zdHJ1Y3RvcgpAQCAtMCwwICsxLDQgQEAKK0l0ZW06Okl0ZW0oaW50IFJJR0hUKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtY2xhc3MtY29uc3RydWN0b3ItbWVtLWluaXQgYi90L3Q0MDE4L2NwcC1jbGFzcy1jb25zdHJ1Y3Rvci1tZW0taW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWE2OWYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtY2xhc3MtY29uc3RydWN0b3ItbWVtLWluaXQKQEAgLTAsMCArMSw1IEBACitJdGVtOjpJdGVtKGludCBSSUdIVCkgOgorCW1lbWJlcigwKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtY2xhc3MtZGVmaW5pdGlvbiBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFiNjFkYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlZmluaXRpb24KQEAgLTAsMCArMSw0IEBACitjbGFzcyBSSUdIVAoreworCWludCBDaGFuZ2VNZTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1jbGFzcy1kZWZpbml0aW9uLWRlcml2ZWQgYi90L3Q0MDE4L2NwcC1jbGFzcy1kZWZpbml0aW9uLWRlcml2ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5OGNkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlZmluaXRpb24tZGVyaXZlZApAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFJJR0hUIDoKKwlwdWJsaWMgQmFzZWNsYXNzCit7CisJaW50IENoYW5nZU1lOworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWNsYXNzLWRlc3RydWN0b3IgYi90L3Q0MDE4L2NwcC1jbGFzcy1kZXN0cnVjdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODc2NjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1jbGFzcy1kZXN0cnVjdG9yCkBAIC0wLDAgKzEsNCBAQAorUklHSFQ6On5SSUdIVCgpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctZ2xvYmFsLXR5cGUgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctZ2xvYmFsLXR5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4NGQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1nbG9iYWwtdHlwZQpAQCAtMCwwICsxLDQgQEAKKzo6SXRlbSBnZXQ6Oml0OjpSSUdIVCgpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctbmVzdGVkIGIvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLW5lc3RlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTc1MGFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLW5lc3RlZApAQCAtMCwwICsxLDUgQEAKK2dldDo6SXRlbSBnZXQ6Oml0OjpSSUdIVCgpCit7CisJQ2hhbmdlTWU7Cit9CisKZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1wb2ludGVyIGIvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLXBvaW50ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxNTY1NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1wb2ludGVyCkBAIC0wLDAgKzEsNCBAQAorY29uc3QgY2hhciAqZ2V0X2l0X1JJR0hUKGNoYXIgKnB0cikKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1yZWZlcmVuY2UgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctcmVmZXJlbmNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYjA1MWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctcmVmZXJlbmNlCkBAIC0wLDAgKzEsNCBAQAorc3RyaW5nJiBnZXQ6Oml0OjpSSUdIVChjaGFyICpwdHIpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1nbnUtc3R5bGUtZnVuY3Rpb24gYi90L3Q0MDE4L2NwcC1nbnUtc3R5bGUtZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjN2M3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWdudS1zdHlsZS1mdW5jdGlvbgpAQCAtMCwwICsxLDUgQEAKK2NvbnN0IGNoYXIgKgorUklHSFQoaW50IGFyZykKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLW5hbWVzcGFjZS1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtbmFtZXNwYWNlLWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0OTk4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLW5hbWVzcGFjZS1kZWZpbml0aW9uCkBAIC0wLDAgKzEsNCBAQAorbmFtZXNwYWNlIFJJR0hUCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1vcGVyYXRvci1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtb3BlcmF0b3ItZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNkODI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtb3BlcmF0b3ItZGVmaW5pdGlvbgpAQCAtMCwwICsxLDQgQEAKK1ZhbHVlIG9wZXJhdG9yKyhWYWx1ZSBMRUZULCBWYWx1ZSBSSUdIVCkKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLXNraXAtYWNjZXNzLXNwZWNpZmllcnMgYi90L3Q0MDE4L2NwcC1za2lwLWFjY2Vzcy1zcGVjaWZpZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGE5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1za2lwLWFjY2Vzcy1zcGVjaWZpZXJzCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgUklHSFQgOiBwdWJsaWMgQmFzZWNsYXNzCit7CitwdWJsaWM6Citwcm90ZWN0ZWQ6Citwcml2YXRlOgorCXZvaWQgRG9Tb21ldGhpbmcoKTsKKwlpbnQgQ2hhbmdlTWU7Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtc2tpcC1jb21tZW50LWJsb2NrIGIvdC90NDAxOC9jcHAtc2tpcC1jb21tZW50LWJsb2NrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDBiOTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1za2lwLWNvbW1lbnQtYmxvY2sKQEAgLTAsMCArMSw5IEBACitzdHJ1Y3QgaXRlbSBSSUdIVChpbnQgaSkKKy8vIERvIG5vdAorLy8gcGljayB1cAorLyogdGhlc2UKKyoqIGNvbW1lbnRzLgorKi8KK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLXNraXAtbGFiZWxzIGIvdC90NDAxOC9jcHAtc2tpcC1sYWJlbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljMTBhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXNraXAtbGFiZWxzCkBAIC0wLDAgKzEsOCBAQAordm9pZCBSSUdIVCAodm9pZCkKK3sKK3JlcGVhdDoJCS8vIEMrKyBjb21tZW50CituZXh0OgkJLyogQyBjb21tZW50ICovCisJZG9fc29tZXRoaW5nKCk7CisKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLXN0cnVjdC1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtc3RydWN0LWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxYzU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXN0cnVjdC1kZWZpbml0aW9uCkBAIC0wLDAgKzEsOSBAQAorc3RydWN0IFJJR0hUIHsKKwl1bnNpZ25lZAorCS8qIHRoaXMgYml0IGZpZWxkIGxvb2tzIGxpa2UgYSBsYWJlbCBhbmQgc2hvdWxkIG5vdCBiZSBwaWNrZWQgdXAgKi8KKwkJZGVjb3lfYml0ZmllbGQ6IDIsCisJCW1vcmUgOiAxOworCWludCBmaWxsZXI7CisKKwlpbnQgQ2hhbmdlTWU7Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtc3RydWN0LXNpbmdsZS1saW5lIGIvdC90NDAxOC9jcHAtc3RydWN0LXNpbmdsZS1saW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZGU1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1zdHJ1Y3Qtc2luZ2xlLWxpbmUKQEAgLTAsMCArMSw3IEBACit2b2lkIHdyb25nKCkKK3sKK30KKworc3RydWN0IFJJR0hUX2l0ZXJhdG9yX3RhZyB7fTsKKworaW50IENoYW5nZU1lOwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtdGVtcGxhdGUtZnVuY3Rpb24tZGVmaW5pdGlvbiBiL3QvdDQwMTgvY3BwLXRlbXBsYXRlLWZ1bmN0aW9uLWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkZjViYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXRlbXBsYXRlLWZ1bmN0aW9uLWRlZmluaXRpb24KQEAgLTAsMCArMSw0IEBACit0ZW1wbGF0ZTxjbGFzcyBUPiBpbnQgUklHSFQoVCBhcmcpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC11bmlvbi1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtdW5pb24tZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM5NGRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtdW5pb24tZGVmaW5pdGlvbgpAQCAtMCwwICsxLDQgQEAKK3VuaW9uIFJJR0hUIHsKKwlkb3VibGUgdjsKKwlpbnQgQ2hhbmdlTWU7Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtdm9pZC1jLWZ1bmN0aW9uIGIvdC90NDAxOC9jcHAtdm9pZC1jLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzA4MWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC12b2lkLWMtZnVuY3Rpb24KQEAgLTAsMCArMSw0IEBACit2b2lkIFJJR0hUICh2b2lkKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtYnJhY2UtaW4tY29sLTEgYi90L3Q0MDE4L2Nzcy1icmFjZS1pbi1jb2wtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODMxNTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jc3MtYnJhY2UtaW4tY29sLTEKQEAgLTAsMCArMSw1IEBACitSSUdIVCBsYWJlbC5jb250cm9sLWxhYmVsCit7CisgICAgbWFyZ2luLXRvcDogMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtY29sb24tZW9sIGIvdC90NDAxOC9jc3MtY29sb24tZW9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzA1NTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1jb2xvbi1lb2wKQEAgLTAsMCArMSw0IEBACitSSUdIVCBoMSB7Citjb2xvcjoKK0NoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtY29sb24tc2VsZWN0b3IgYi90L3Q0MDE4L2Nzcy1jb2xvbi1zZWxlY3RvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmQ3MWZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jc3MtY29sb24tc2VsZWN0b3IKQEAgLTAsMCArMSw1IEBACitSSUdIVCBhOmhvdmVyIHsKKyAgICBtYXJnaW4tdG9wOgorICAgIDEwcHghaW1wb3J0YW50OworICAgIGJvcmRlciA6IDEwcHggQ2hhbmdlTWUgI0M2QzZDNjsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3NzLWNvbW1vbiBiL3QvdDQwMTgvY3NzLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGVkNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jc3MtY29tbW9uCkBAIC0wLDAgKzEsNCBAQAorUklHSFQgbGFiZWwuY29udHJvbC1sYWJlbCB7CisgICAgbWFyZ2luLXRvcDogMTBweCFpbXBvcnRhbnQ7CisgICAgYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3MtbG9uZy1zZWxlY3Rvci1saXN0IGIvdC90NDAxOC9jc3MtbG9uZy1zZWxlY3Rvci1saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2QyNWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1sb25nLXNlbGVjdG9yLWxpc3QKQEAgLTAsMCArMSw2IEBACitwLmhlYWRlciwKK2xhYmVsLmNvbnRyb2wtbGFiZWwsCitkaXYgdWwjUklHSFQgeworICAgIG1hcmdpbi10b3A6IDEwcHghaW1wb3J0YW50OworICAgIGJvcmRlciA6IDEwcHggQ2hhbmdlTWUgI0M2QzZDNjsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3NzLXByb3Atc2Fucy1pbmRlbnQgYi90L3Q0MDE4L2Nzcy1wcm9wLXNhbnMtaW5kZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZTNjODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2Nzcy1wcm9wLXNhbnMtaW5kZW50CkBAIC0wLDAgKzEsNSBAQAorUklHSFQsIGxhYmVsLmNvbnRyb2wtbGFiZWwgeworbWFyZ2luLXRvcDogMTBweCFpbXBvcnRhbnQ7CitwYWRkaW5nOiAwOworYm9yZGVyIDogMTBweCBDaGFuZ2VNZSAjQzZDNkM2OworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jc3Mtc2hvcnQtc2VsZWN0b3ItbGlzdCBiL3QvdDQwMTgvY3NzLXNob3J0LXNlbGVjdG9yLWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwYmRlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3NzLXNob3J0LXNlbGVjdG9yLWxpc3QKQEAgLTAsMCArMSw0IEBACitsYWJlbC5jb250cm9sLCBkaXYgdWwjUklHSFQgeworICAgIG1hcmdpbi10b3A6IDEwcHghaW1wb3J0YW50OworICAgIGJvcmRlciA6IDEwcHggQ2hhbmdlTWUgI0M2QzZDNjsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3NzLXRyYWlsaW5nLXNwYWNlIGIvdC90NDAxOC9jc3MtdHJhaWxpbmctc3BhY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiNTYwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3NzLXRyYWlsaW5nLXNwYWNlCkBAIC0wLDAgKzEsNSBAQAorUklHSFQgbGFiZWwuY29udHJvbC1sYWJlbCB7CisgICAgbWFyZ2luOjEwcHg7ICAgCisgICAgcGFkZGluZzoxMHB4OworICAgIGJvcmRlciA6IDEwcHggQ2hhbmdlTWUgI0M2QzZDNjsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3VzdG9tMS1wYXR0ZXJuIGIvdC90NDAxOC9jdXN0b20xLXBhdHRlcm4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmZDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3VzdG9tMS1wYXR0ZXJuCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBCZWVyCit7CisJaW50IHNwZWNpYWwsIFJJR0hUOworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pCisJeworCQlTdHJpbmcgcz0iICI7CisJCWZvcihpbnQgeCA9IDk5OyB4ID4gMDsgeC0tKQorCQl7CisJCQlTeXN0ZW0ub3V0LnByaW50KHggKyAiIGJvdHRsZXMgb2YgYmVlciBvbiB0aGUgd2FsbCAiCisJCQkJKyB4ICsgIiBib3R0bGVzIG9mIGJlZXJcbiIgLy8gQ2hhbmdlTWUKKwkJCQkrICJUYWtlIG9uZSBkb3duLCBwYXNzIGl0IGFyb3VuZCwgIiArICh4IC0gMSkKKwkJCQkrICIgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsLlxuIik7CisJCX0KKwkJU3lzdGVtLm91dC5wcmludCgiR28gdG8gdGhlIHN0b3JlLCBidXkgc29tZSBtb3JlLFxuIgorCQkJKyAiOTkgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsLlxuIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jdXN0b20yLW1hdGNoLXRvLWVuZC1vZi1saW5lIGIvdC90NDAxOC9jdXN0b20yLW1hdGNoLXRvLWVuZC1vZi1saW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OGFjMzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2N1c3RvbTItbWF0Y2gtdG8tZW5kLW9mLWxpbmUKQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgUklHSFRfQmVlcgoreworCWludCBzcGVjaWFsOworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pCisJeworCQlTeXN0ZW0ub3V0LnByaW50KCJDaGFuZ2VNZSIpOworCX0KK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3VzdG9tMy1hbHRlcm5hdGlvbi1pbi1wYXR0ZXJuIGIvdC90NDAxOC9jdXN0b20zLWFsdGVybmF0aW9uLWluLXBhdHRlcm4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzNzY5YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3VzdG9tMy1hbHRlcm5hdGlvbi1pbi1wYXR0ZXJuCkBAIC0wLDAgKzEsMTcgQEAKK3B1YmxpYyBjbGFzcyBCZWVyCit7CisJaW50IHNwZWNpYWw7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFJJR0hUW10pCisJeworCQlTdHJpbmcgcz0iICI7CisJCWZvcihpbnQgeCA9IDk5OyB4ID4gMDsgeC0tKQorCQl7CisJCQlTeXN0ZW0ub3V0LnByaW50KHggKyAiIGJvdHRsZXMgb2YgYmVlciBvbiB0aGUgd2FsbCAiCisJCQkJKyB4ICsgIiBib3R0bGVzIG9mIGJlZXJcbiIgLy8gQ2hhbmdlTWUKKwkJCQkrICJUYWtlIG9uZSBkb3duLCBwYXNzIGl0IGFyb3VuZCwgIiArICh4IC0gMSkKKwkJCQkrICIgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsLlxuIik7CisJCX0KKwkJU3lzdGVtLm91dC5wcmludCgiR28gdG8gdGhlIHN0b3JlLCBidXkgc29tZSBtb3JlLFxuIgorCQkJKyAiOTkgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsLlxuIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9kdHMtbGFiZWxzIGIvdC90NDAxOC9kdHMtbGFiZWxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMWVmODcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1sYWJlbHMKQEAgLTAsMCArMSw5IEBACisvIHsKKwlsYWJlbF8xOiBub2RlMUBmZjAwIHsKKwkJbGFiZWwyOiBSSUdIVCB7CisJCQl2ZW5kb3Isc29tZS1wcm9wZXJ0eTsKKworCQkJQ2hhbmdlTWUgPSA8MHg0NS0zMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2R0cy1ub2RlLXVuaXRsZXNzIGIvdC90NDAxOC9kdHMtbm9kZS11bml0bGVzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTI4N2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9kdHMtbm9kZS11bml0bGVzcwpAQCAtMCwwICsxLDggQEAKKy8geworCWxhYmVsXzE6IG5vZGUxIHsKKwkJUklHSFQgeworCQkJcHJvcC1hcnJheSA9IDwxPiwgPDQ+OworCQkJQ2hhbmdlTWUgPSA8MHhmZmVlZGQwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2R0cy1ub2RlcyBiL3QvdDQwMTgvZHRzLW5vZGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNDMzNGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1ub2RlcwpAQCAtMCwwICsxLDggQEAKKy8geworCWxhYmVsXzE6IG5vZGUxQGZmMDAgeworCQlSSUdIVEBkZWFkZjAwLDQwMDAgeworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlDaGFuZ2VNZSA9IDwweGZmZWVkZDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZHRzLW5vZGVzLWJvb2xlYW4tcHJvcCBiL3QvdDQwMTgvZHRzLW5vZGVzLWJvb2xlYW4tcHJvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmM2YjViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9kdHMtbm9kZXMtYm9vbGVhbi1wcm9wCkBAIC0wLDAgKzEsOSBAQAorLyB7CisJbGFiZWxfMTogbm9kZTFAZmYwMCB7CisJCVJJR0hUQGRlYWRmMDAsNDAwMCB7CisJCQlib29sZWFuLXByb3AxOworCisJCQlDaGFuZ2VNZTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZHRzLW5vZGVzLWNvbW1lbnQxIGIvdC90NDAxOC9kdHMtbm9kZXMtY29tbWVudDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5ZGZjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZHRzLW5vZGVzLWNvbW1lbnQxCkBAIC0wLDAgKzEsOCBAQAorLyB7CisJbGFiZWxfMTogbm9kZTFAZmYwMCB7CisJCVJJR0hUQGRlYWRmMDAsNDAwMCAvKiAmYSBjb21tZW50ICovIHsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJQ2hhbmdlTWUgPSA8MHhmZmVlZGQwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2R0cy1ub2Rlcy1jb21tZW50MiBiL3QvdDQwMTgvZHRzLW5vZGVzLWNvbW1lbnQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZTk3MTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1ub2Rlcy1jb21tZW50MgpAQCAtMCwwICsxLDggQEAKKy8geworCWxhYmVsXzE6IG5vZGUxQGZmMDAgeworCQlSSUdIVEBkZWFkZjAwLDQwMDAgeyAvKiBhIHRyYWlsaW5nIGNvbW1lbnQgKi8gCisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCUNoYW5nZU1lID0gPDB4ZmZlZWRkMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9kdHMtbm9kZXMtbXVsdGlsaW5lLXByb3AgYi90L3Q0MDE4L2R0cy1ub2Rlcy1tdWx0aWxpbmUtcHJvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzJkNThiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9kdHMtbm9kZXMtbXVsdGlsaW5lLXByb3AKQEAgLTAsMCArMSwxMyBAQAorLyB7CisJbGFiZWxfMTogbm9kZTFAZmYwMCB7CisJCVJJR0hUQGRlYWRmMDAsNDAwMCB7CisJCQltdWx0aWxpbmVwcm9wID0gPDM+LAorCQkJCQk8ND4sCisJCQkJCTw1PiwKKwkJCQkJPDY+LAorCQkJCQk8Nz47CisKKwkJCUNoYW5nZU1lID0gPDB4ZmZlZWRkMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9kdHMtcmVmZXJlbmNlIGIvdC90NDAxOC9kdHMtcmVmZXJlbmNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMGM4N2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1yZWZlcmVuY2UKQEAgLTAsMCArMSw5IEBACismbGFiZWxfMSB7CisJVEVTVCA9IDw0NTU+OworfTsKKworJlJJR0hUIHsKKwl2ZW5kb3Isc29tZS1wcm9wZXJ0eTsKKworCUNoYW5nZU1lID0gPDB4NDUtMzA+OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZHRzLXJvb3QgYi90L3Q0MDE4L2R0cy1yb290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNTNiODIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2R0cy1yb290CkBAIC0wLDAgKzEsNSBAQAorLyB7IFJJR0hUIC8qIFRlY2huaWNhbGx5IGp1c3Qgc3VwcG9zZWQgdG8gYmUgYSBzbGFzaCBhbmQgYnJhY2UgKi8KKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCUNoYW5nZU1lID0gPDB4ZmZlZWRkMDA+OworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZHRzLXJvb3QtY29tbWVudCBiL3QvdDQwMTgvZHRzLXJvb3QtY29tbWVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzNhNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9kdHMtcm9vdC1jb21tZW50CkBAIC0wLDAgKzEsOCBAQAorLyB7IFJJR0hUIC8qIFRlY2huaWNhbGx5IGp1c3Qgc3VwcG9zZWQgdG8gYmUgYSBzbGFzaCBhbmQgYnJhY2UgKi8KKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCS8qIFRoaXMgY29tbWVudCBzaG91bGQgYmUgaWdub3JlZCAqLworCisJc29tZS1wcm9wZXJ0eSA9IDw0MCsyPjsKKwlDaGFuZ2VNZSA9IDwweGZmZWVkZDAwPjsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1kby1ub3QtcGljay1lbmQgYi90L3Q0MDE4L2VsaXhpci1kby1ub3QtcGljay1lbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFlMDhiYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLWRvLW5vdC1waWNrLWVuZApAQCAtMCwwICsxLDUgQEAKK2RlZm1vZHVsZSBSSUdIVCBkbworZW5kCisjCisjCisjIENoYW5nZU1lOyBkbyBub3QgcGljayB1cCAnZW5kJyBsaW5lCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1leC11bml0LXRlc3QgYi90L3Q0MDE4L2VsaXhpci1leC11bml0LXRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2MGEyYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLWV4LXVuaXQtdGVzdApAQCAtMCwwICsxLDYgQEAKK2RlZm1vZHVsZSBUZXN0IGRvCisgIHRlc3QgIlJJR0hUIiBkbworICAgIGFzc2VydCB0cnVlID09IHRydWUKKyAgICBhc3NlcnQgQ2hhbmdlTWUKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLWZ1bmN0aW9uIGIvdC90NDAxOC9lbGl4aXItZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1MmY0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNSBAQAorZGVmIGZ1bmN0aW9uKFJJR0hULCBhcmcpIGRvCisgICMgY29tbWVudAorICAjIGNvbW1lbnQKKyAgQ2hhbmdlTWUKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItbWFjcm8gYi90L3Q0MDE4L2VsaXhpci1tYWNybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjkyNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItbWFjcm8KQEAgLTAsMCArMSw1IEBACitkZWZtYWNybyBmb28oUklHSFQpIGRvCisgICMgQ29kZQorICAjIENvZGUKKyAgQ2hhbmdlTWUKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItbW9kdWxlIGIvdC90NDAxOC9lbGl4aXItbW9kdWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTRlN2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1tb2R1bGUKQEAgLTAsMCArMSw5IEBACitkZWZtb2R1bGUgUklHSFQgZG8KKyAgQG1vZHVsZWRvYyAiIiIKKyAgRm9vIGJhcgorICAiIiIKKworICBkZWYgQ2hhbmdlTWUoYSkgd2hlcmUgaXNfbWFwKGEpIGRvCisgICAgYQorICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItbW9kdWxlLWZ1bmMgYi90L3Q0MDE4L2VsaXhpci1tb2R1bGUtZnVuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTkxMGQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItbW9kdWxlLWZ1bmMKQEAgLTAsMCArMSw4IEBACitkZWZtb2R1bGUgRm9vIGRvCisgIGRlZiBmdW4oUklHSFQpIGRvCisgICAgICMgQ29kZQorICAgICAjIENvZGUKKyAgICAgIyBDb2RlCisgICAgIENoYW5nZU1lCisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1uZXN0ZWQtbW9kdWxlIGIvdC90NDAxOC9lbGl4aXItbmVzdGVkLW1vZHVsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFlYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItbmVzdGVkLW1vZHVsZQpAQCAtMCwwICsxLDkgQEAKK2RlZm1vZHVsZSBNeUFwcC5SSUdIVCBkbworICBAbW9kdWxlZG9jICIiIgorICBGb28gYmFyCisgICIiIgorCisgIGRlZiBDaGFuZ2VNZShhKSB3aGVyZSBpc19tYXAoYSkgZG8KKyAgICBhCisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1wcml2YXRlLWZ1bmN0aW9uIGIvdC90NDAxOC9lbGl4aXItcHJpdmF0ZS1mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWFiZTMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItcHJpdmF0ZS1mdW5jdGlvbgpAQCAtMCwwICsxLDUgQEAKK2RlZnAgZnVuY3Rpb24oUklHSFQsIGFyZykgZG8KKyAgIyBjb21tZW50CisgICMgY29tbWVudAorICBDaGFuZ2VNZQorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1wcm90b2NvbCBiL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOTE3MzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1wcm90b2NvbApAQCAtMCwwICsxLDYgQEAKK2RlZnByb3RvY29sIFJJR0hUIGRvCisgIEBkb2MgIiIiCisgIENhbGN1bGF0ZXMgdGhlIHNpemUgKGFuZCBub3QgdGhlIGxlbmd0aCEpIG9mIGEgZGF0YSBzdHJ1Y3R1cmUKKyAgIiIiCisgIGRlZiBzaXplKGRhdGEsIENoYW5nZU1lKQorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1wcm90b2NvbC1pbXBsZW1lbnRhdGlvbiBiL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sLWltcGxlbWVudGF0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MjM0YmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1wcm90b2NvbC1pbXBsZW1lbnRhdGlvbgpAQCAtMCwwICsxLDUgQEAKK2RlZmltcGwgUklHSFQgZG8KKyAgIyBEb2NzCisgICMgRG9jcworICBkZWYgZm9vKENoYW5nZU1lKSwgZG86IDpvaworZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2ZvdW50YWluLXNjZW5lIGIvdC90NDAxOC9mb3VudGFpbi1zY2VuZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjMyNTdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9mb3VudGFpbi1zY2VuZQpAQCAtMCwwICsxLDQgQEAKK0VYVC4gU1RSRUVUIFJJR0hUIE9VVFNJREUgLSBEQVkKKworQ0hBUkFDVEVSCitZb3UgZGlkbid0IHNheSB0aGUgbWFnaWMgcGhyYXNlLCAiQ2hhbmdlTWUiLgpkaWZmIC0tZ2l0IGEvdC90NDAxOC9nb2xhbmctY29tcGxleC1mdW5jdGlvbiBiL3QvdDQwMTgvZ29sYW5nLWNvbXBsZXgtZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1N2RjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZ29sYW5nLWNvbXBsZXgtZnVuY3Rpb24KQEAgLTAsMCArMSw4IEBACit0eXBlIFRlc3Qgc3RydWN0IHsKKwlhIFR5cGUKK30KKworZnVuYyAodCAqVGVzdCkgUklHSFQoYSBUeXBlKSAoVHlwZSwgZXJyb3IpIHsKKwl0LmEgPSBhCisJcmV0dXJuIENoYW5nZU1lLCBuaWwKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvZ29sYW5nLWZ1bmMgYi90L3Q0MDE4L2dvbGFuZy1mdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOWM5YWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2dvbGFuZy1mdW5jCkBAIC0wLDAgKzEsNCBAQAorZnVuYyBSSUdIVCgpIHsKKwlhIDo9IDUKKwliIDo9IENoYW5nZU1lCit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2dvbGFuZy1pbnRlcmZhY2UgYi90L3Q0MDE4L2dvbGFuZy1pbnRlcmZhY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzYmVkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZ29sYW5nLWludGVyZmFjZQpAQCAtMCwwICsxLDQgQEAKK3R5cGUgUklHSFQgaW50ZXJmYWNlIHsKKwlhKCkgVHlwZQorCWIoKSBDaGFuZ2VNZQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9nb2xhbmctbG9uZy1mdW5jIGIvdC90NDAxOC9nb2xhbmctbG9uZy1mdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2E3N2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2dvbGFuZy1sb25nLWZ1bmMKQEAgLTAsMCArMSw1IEBACitmdW5jIFJJR0hUKGFWZXJ5VmVyeVZlcnlMb25nVmFyaWFibGVOYW1lIEFWZXJ5VmVyeVZlcnlMb25nVHlwZSwKKwlhbm90aGVyTG9uZ1ZhcmlhYmxlTmFtZSBBbm90aGVyTG9uZ1R5cGUpIHsKKwlhIDo9IDUKKwliIDo9IENoYW5nZU1lCit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2dvbGFuZy1zdHJ1Y3QgYi90L3Q0MDE4L2dvbGFuZy1zdHJ1Y3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlZGE3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZ29sYW5nLXN0cnVjdApAQCAtMCwwICsxLDQgQEAKK3R5cGUgUklHSFQgc3RydWN0IHsKKwlhIFR5cGUKKwliIENoYW5nZU1lCit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2phdmEtY2xhc3MtbWVtYmVyLWZ1bmN0aW9uIGIvdC90NDAxOC9qYXZhLWNsYXNzLW1lbWJlci1mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOThiYzdhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9qYXZhLWNsYXNzLW1lbWJlci1mdW5jdGlvbgpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBCZWVyCit7CisJaW50IHNwZWNpYWw7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFJJR0hUW10pCisJeworCQlTeXN0ZW0ub3V0LnByaW50KCJDaGFuZ2VNZSIpOworCX0KK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLWNsYXNzLWRlZmluaXRpb24gYi90L3Q0MDE4L21hdGxhYi1jbGFzcy1kZWZpbml0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZGFlZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1jbGFzcy1kZWZpbml0aW9uCkBAIC0wLDAgKzEsNSBAQAorY2xhc3NkZWYgUklHSFQKKyAgICBwcm9wZXJ0aWVzCisgICAgICAgIENoYW5nZU1lCisgICAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLWZ1bmN0aW9uIGIvdC90NDAxOC9tYXRsYWItZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3YTliMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvbWF0bGFiLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNCBAQAorZnVuY3Rpb24geSA9IFJJR0hUKCkKK3ggPSA1OworeSA9IENoYW5nZU1lICsgeDsKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9tYXRsYWItb2N0YXZlLXNlY3Rpb24tMSBiL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiNmM0NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTEKQEAgLTAsMCArMSwzIEBACislJSUgUklHSFQgc2VjdGlvbgorIyB0aGlzIGlzIG9jdGF2ZSBzY3JpcHQKK0NoYW5nZU1lID0gMTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLW9jdGF2ZS1zZWN0aW9uLTIgYi90L3Q0MDE4L21hdGxhYi1vY3RhdmUtc2VjdGlvbi0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjk4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1vY3RhdmUtc2VjdGlvbi0yCkBAIC0wLDAgKzEsMyBAQAorIyMgUklHSFQgc2VjdGlvbgorIyB0aGlzIGlzIG9jdGF2ZSBzY3JpcHQKK0NoYW5nZU1lID0gMTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvbWF0bGFiLXNlY3Rpb24gYi90L3Q0MDE4L21hdGxhYi1zZWN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTU5YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L21hdGxhYi1zZWN0aW9uCkBAIC0wLDAgKzEsMyBAQAorJSUgUklHSFQgc2VjdGlvbgorJSB0aGlzIGlzIHVuZGVyc3Rvb2QgYnkgYm90aCBtYXRsYWIgYW5kIG9jdGF2ZQorQ2hhbmdlTWUgPSAxOwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9wZXJsLXNraXAtZW5kLW9mLWhlcmVkb2MgYi90L3Q0MDE4L3Blcmwtc2tpcC1lbmQtb2YtaGVyZWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjJkMzliCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9wZXJsLXNraXAtZW5kLW9mLWhlcmVkb2MKQEAgLTAsMCArMSw4IEBACitzdWIgUklHSFR3aXRoaGVyZWRvY3VtZW50IHsKKwlwcmludCA8PCJFT0YiCitkZWNveSBoZXJlLWRvYworRU9GCisJIyBzb21lIGxpbmVzIG9mIGNvbnRleHQKKwkjIHRvIHBhZCBpdCBvdXQKKwlwcmludCAiQ2hhbmdlTWVcbiI7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc2tpcC1mb3J3YXJkLWRlY2wgYi90L3Q0MDE4L3Blcmwtc2tpcC1mb3J3YXJkLWRlY2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4Y2I4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGVybC1za2lwLWZvcndhcmQtZGVjbApAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlIFJJR0hUOworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIHBhcmVudCBxdyhFeHBvcnRlcik7CitvdXIgQEVYUE9SVF9PSyA9IHF3KHJvdW5kIGZpbmFscm91bmQpOworCitzdWIgb3RoZXI7ICMgZm9yd2FyZCBkZWNsYXJhdGlvbgorCisjIENoYW5nZU1lCmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc2tpcC1zdWItaW4tcG9kIGIvdC90NDAxOC9wZXJsLXNraXAtc3ViLWluLXBvZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzlmMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9wZXJsLXNraXAtc3ViLWluLXBvZApAQCAtMCwwICsxLDE4IEBACis9aGVhZDEgTkFNRQorCitCZWVyIC0gc3Vicm91dGluZSB0byBvdXRwdXQgZnJhZ21lbnQgb2YgYSBkcmlua2luZyBzb25nCisKKz1oZWFkMSBTWU5PUFNJU19SSUdIVAorCisJdXNlIEJlZXIgcXcocm91bmQgZmluYWxyb3VuZCk7CisKKwlzdWIgc29uZyB7CisJCWZvciAobXkgJGkgPSA5OTsgJGkgPiAwOyAkaS0tKSB7CisJCQlyb3VuZCAkaTsKKwkJfQorCQlmaW5hbHJvdW5kOworCX0KKworCUNoYW5nZU1lOworCis9Y3V0CmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc3ViLWRlZmluaXRpb24gYi90L3Q0MDE4L3Blcmwtc3ViLWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwN2QxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGVybC1zdWItZGVmaW5pdGlvbgpAQCAtMCwwICsxLDQgQEAKK3N1YiBSSUdIVCB7CisJbXkgKCRuKSA9IEBfOworCXByaW50ICJDaGFuZ2VNZSI7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc3ViLWRlZmluaXRpb24ta3ItYnJhY2UgYi90L3Q0MDE4L3Blcmwtc3ViLWRlZmluaXRpb24ta3ItYnJhY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwYjNkZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGVybC1zdWItZGVmaW5pdGlvbi1rci1icmFjZQpAQCAtMCwwICsxLDQgQEAKK3N1YiBSSUdIVAoreworCXByaW50ICJDaGFuZ2VNZVxuIjsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcGhwLWFic3RyYWN0LWNsYXNzIGIvdC90NDAxOC9waHAtYWJzdHJhY3QtY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxM2UxMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGhwLWFic3RyYWN0LWNsYXNzCkBAIC0wLDAgKzEsNCBAQAorYWJzdHJhY3QgY2xhc3MgUklHSFQKK3sKKyAgICBjb25zdCBGT08gPSAnQ2hhbmdlTWUnOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9waHAtY2xhc3MgYi90L3Q0MDE4L3BocC1jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzg1YjYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9waHAtY2xhc3MKQEAgLTAsMCArMSw0IEBACitjbGFzcyBSSUdIVAoreworICAgIGNvbnN0IEZPTyA9ICdDaGFuZ2VNZSc7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3BocC1maW5hbC1jbGFzcyBiL3QvdDQwMTgvcGhwLWZpbmFsLWNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjU3MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3BocC1maW5hbC1jbGFzcwpAQCAtMCwwICsxLDQgQEAKK2ZpbmFsIGNsYXNzIFJJR0hUCit7CisgICAgY29uc3QgRk9PID0gJ0NoYW5nZU1lJzsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcGhwLWZ1bmN0aW9uIGIvdC90NDAxOC9waHAtZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3MTdjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGhwLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNCBAQAorZnVuY3Rpb24gUklHSFQoKQoreworICAgIHJldHVybiAnQ2hhbmdlTWUnOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9waHAtaW50ZXJmYWNlIGIvdC90NDAxOC9waHAtaW50ZXJmYWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjQ5YWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3BocC1pbnRlcmZhY2UKQEAgLTAsMCArMSw0IEBACitpbnRlcmZhY2UgUklHSFQKK3sKKyAgICBwdWJsaWMgZnVuY3Rpb24gZm9vKCRDaGFuZ2VNZSk7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3BocC1tZXRob2QgYi90L3Q0MDE4L3BocC1tZXRob2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhZjFhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcGhwLW1ldGhvZApAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEtsYXNzCit7CisgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBSSUdIVCgpCisgICAgeworICAgICAgICByZXR1cm4gJ0NoYW5nZU1lJzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3BocC10cmFpdCBiL3QvdDQwMTgvcGhwLXRyYWl0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjhjODIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3BocC10cmFpdApAQCAtMCwwICsxLDcgQEAKK3RyYWl0IFJJR0hUCit7CisgICAgcHVibGljIGZ1bmN0aW9uIGZvbygkQ2hhbmdlTWUpCisgICAgeworICAgICAgICByZXR1cm4gJ2Zvbyc7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24tYXN5bmMtZGVmIGIvdC90NDAxOC9weXRob24tYXN5bmMtZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjQwZTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1hc3luYy1kZWYKQEAgLTAsMCArMSw0IEBACithc3luYyBkZWYgUklHSFQocGk6IGludCA9IDMuMTQpOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIENoYW5nZU1lKCkKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWNsYXNzIGIvdC90NDAxOC9weXRob24tY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5ZTc0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcHl0aG9uLWNsYXNzCkBAIC0wLDAgKzEsNCBAQAorY2xhc3MgUklHSFQoaW50LCBzdHIpOgorICAgICMgY29tbWVudAorICAgICMgYW5vdGhlciBjb21tZW50CisgICAgIyBDaGFuZ2VNZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24tZGVmIGIvdC90NDAxOC9weXRob24tZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MGIzMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1kZWYKQEAgLTAsMCArMSw0IEBACitkZWYgUklHSFQocGk6IGludCA9IDMuMTQpOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIENoYW5nZU1lKCkKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWFzeW5jLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWFzeW5jLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQwMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtYXN5bmMtZGVmCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vOgorICAgIGFzeW5jIGRlZiBSSUdIVChzZWxmLCB4OiBpbnQpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIDIsCisgICAgICAgICAgICBDaGFuZ2VNZSwKKyAgICAgICAgXQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24taW5kZW50ZWQtY2xhc3MgYi90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1jbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI0ZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtY2xhc3MKQEAgLTAsMCArMSw1IEBACitpZiBUWVBFX0NIRUNLSU5HOgorICAgIGNsYXNzIFJJR0hUOgorICAgICAgICAjIGNvbW1lbnQKKyAgICAgICAgIyBhbm90aGVyIGNvbW1lbnQKKyAgICAgICAgIyBDaGFuZ2VNZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9weXRob24taW5kZW50ZWQtZGVmIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOGZiYWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1kZWYKQEAgLTAsMCArMSw3IEBACitjbGFzcyBGb286CisgICAgZGVmIFJJR0hUKHNlbGYsIHg6IGludCk6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAxLAorICAgICAgICAgICAgMiwKKyAgICAgICAgICAgIENoYW5nZU1lLAorICAgICAgICBdCmRpZmYgLS1naXQgYS90L3Q0MDE4L3J1c3QtZm4gYi90L3Q0MDE4L3J1c3QtZm4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlMDIxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcnVzdC1mbgpAQCAtMCwwICsxLDUgQEAKK3B1YihzZWxmKSBmbiBSSUdIVDxUPih4OiAmW1RdKSB3aGVyZSBUOiBEZWJ1ZyB7CisgICAgbGV0IF8gPSB4OworICAgIC8vIGEgY29tbWVudAorICAgIGxldCBhID0gQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3J1c3QtaW1wbCBiL3QvdDQwMTgvcnVzdC1pbXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGYzY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3J1c3QtaW1wbApAQCAtMCwwICsxLDUgQEAKK2ltcGw8J2EsIFQ6IEFzUmVmPFt1OF0+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+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbmUgYWN0dWFsCisnCisKK2ZvciBpIGluIDEgMgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21iaW5lLWRpZmY6IG9yZGVyZmlsZSB1c2luZyBvcHRpb24gKCRpKSIgJworCQlnaXQgZGlmZiAtT29yZGVyX2ZpbGVfJGkgLS1uYW1lLW9ubHkgSEVBRCBIRUFEXiBIRUFEXjIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RfJGkgYWN0dWFsCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaCBiL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjRiNTQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1Ny1kaWZmLWNvbWJpbmVkLXBhdGhzLnNoCkBAIC0wLDAgKzEsMTA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tYmluZWQgZGlmZiBzaG93IG9ubHkgcGF0aHMgdGhhdCBhcmUgZGlmZmVyZW50IHRvIGFsbCBwYXJlbnRzJworCisuIC4vdGVzdC1saWIuc2gKKworIyB2ZXJpZnkgdGhhdCBkaWZmYy5leHBlY3QgbWF0Y2hlcyBvdXRwdXQgb2YKKyMgJChnaXQgZGlmZiAtYyAtLW5hbWUtb25seSBIRUFEIEhFQUReIEhFQUReMikKK2RpZmZjX3ZlcmlmeSAoKSB7CisJZ2l0IGRpZmYgLWMgLS1uYW1lLW9ubHkgSEVBRCBIRUFEXiBIRUFEXjIgPmRpZmZjLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmZjLmV4cGVjdCBkaWZmYy5hY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJpdmlhbCBtZXJnZSAtIGNvbWJpbmUtZGlmZiBlbXB0eScgJworCWZvciBpIGluICQodGVzdF9zZXEgMSA5KQorCWRvCisJCWVjaG8gJGkgPiRpLnR4dAkmJgorCQlnaXQgYWRkICRpLnR4dAorCWRvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0IiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAyIDkpCisJZG8KKwkJZWNobyAkaS8yID4+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+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCWRpZmZfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNjEtZGlmZi1pbmRlbnQuc2ggYi90L3Q0MDYxLWRpZmYtaW5kZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhZmZkN2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDYxLWRpZmYtaW5kZW50LnNoCkBAIC0wLDAgKzEsMzY4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBkaWZmIGluZGVudCBoZXVyaXN0aWMuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCisjIENvbXBhcmUgdHdvIGRpZmYgb3V0cHV0cy4gSWdub3JlICJpbmRleCIgbGluZXMsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgY2FyZSBhYm91dCBTSEEtMXMgb3IgZmlsZSBtb2Rlcy4KK2NvbXBhcmVfZGlmZiAoKSB7CisJc2VkIC1lICIvXmluZGV4IC9kIiA8IiQxIiA+LnRtcC0xCisJc2VkIC1lICIvXmluZGV4IC9kIiA8IiQyIiA+LnRtcC0yCisJdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCit9CisKKyMgQ29tcGFyZSBibGFtZSBvdXRwdXQgdXNpbmcgdGhlIGV4cGVjdGF0aW9uIGZvciBhIGRpZmYgYXMgcmVmZXJlbmNlLgorIyBPbmx5IGxvb2sgZm9yIHRoZSBsaW5lcyBjb21pbmcgZnJvbSBub24tYm91bmRhcnkgY29tbWl0cy4KK2NvbXBhcmVfYmxhbWUgKCkgeworCXNlZCAtbiAtZSAiMSw0ZCIgLWUgInMvXlwrLy9wIiA8IiQxIiA+LnRtcC0xCisJc2VkIC1uZSAicy9eW15eXVteKV0qKSAqLy9wIiA8IiQyIiA+LnRtcC0yCisJdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUnICcKKwljYXQgPDwtXEVPRiA+c3BhY2VzLnR4dCAmJgorCTEKKwkyCisJYQorCisJYgorCTMKKwk0CisJRU9GCisKKwljYXQgPDwtXEVPRiA+ZnVuY3Rpb25zLmMgJiYKKwkxCisJMgorCS8qIGZ1bmN0aW9uICovCisJZm9vKCkgeworCSAgICBmb28KKwl9CisKKwkzCisJNAorCUVPRgorCisJZ2l0IGFkZCBzcGFjZXMudHh0IGZ1bmN0aW9ucy5jICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBvbGQgJiYKKworCWNhdCA8PC1cRU9GID5zcGFjZXMudHh0ICYmCisJMQorCTIKKwlhCisKKwliCisJYQorCisJYgorCTMKKwk0CisJRU9GCisKKwljYXQgPDwtXEVPRiA+ZnVuY3Rpb25zLmMgJiYKKwkxCisJMgorCS8qIGZ1bmN0aW9uICovCisJYmFyKCkgeworCSAgICBmb28KKwl9CisKKwkvKiBmdW5jdGlvbiAqLworCWZvbygpIHsKKwkgICAgZm9vCisJfQorCisJMworCTQKKwlFT0YKKworCWdpdCBhZGQgc3BhY2VzLnR4dCBmdW5jdGlvbnMuYyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggbmV3ICYmCisKKwl0ciAiXyIgIiAiIDw8LVxFT0YgPnNwYWNlcy1leHBlY3QgJiYKKwlkaWZmIC0tZ2l0IGEvc3BhY2VzLnR4dCBiL3NwYWNlcy50eHQKKwktLS0gYS9zcGFjZXMudHh0CisJKysrIGIvc3BhY2VzLnR4dAorCUBAIC0zLDUgKzMsOCBAQAorCSBhCisJXworCSBiCisJK2EKKwkrCisJK2IKKwkgMworCSA0CisJRU9GCisKKwl0ciAiXyIgIiAiIDw8LVxFT0YgPnNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0ICYmCisJZGlmZiAtLWdpdCBhL3NwYWNlcy50eHQgYi9zcGFjZXMudHh0CisJLS0tIGEvc3BhY2VzLnR4dAorCSsrKyBiL3NwYWNlcy50eHQKKwlAQCAtMiw2ICsyLDkgQEAKKwkgMgorCSBhCisJXworCStiCisJK2EKKwkrCisJIGIKKwkgMworCSA0CisJRU9GCisKKwl0ciAiXyIgIiAiIDw8LVxFT0YgPmZ1bmN0aW9ucy1leHBlY3QgJiYKKwlkaWZmIC0tZ2l0IGEvZnVuY3Rpb25zLmMgYi9mdW5jdGlvbnMuYworCS0tLSBhL2Z1bmN0aW9ucy5jCisJKysrIGIvZnVuY3Rpb25zLmMKKwlAQCAtMSw2ICsxLDExIEBACisJIDEKKwkgMgorCSAvKiBmdW5jdGlvbiAqLworCStiYXIoKSB7CisJKyAgICBmb28KKwkrfQorCSsKKwkrLyogZnVuY3Rpb24gKi8KKwkgZm9vKCkgeworCSAgICAgZm9vCisJIH0KKwlFT0YKKworCXRyICJfIiAiICIgPDwtXEVPRiA+ZnVuY3Rpb25zLWNvbXBhY3RlZC1leHBlY3QKKwlkaWZmIC0tZ2l0IGEvZnVuY3Rpb25zLmMgYi9mdW5jdGlvbnMuYworCS0tLSBhL2Z1bmN0aW9ucy5jCisJKysrIGIvZnVuY3Rpb25zLmMKKwlAQCAtMSw1ICsxLDEwIEBACisJIDEKKwkgMgorCSsvKiBmdW5jdGlvbiAqLworCStiYXIoKSB7CisJKyAgICBmb28KKwkrfQorCSsKKwkgLyogZnVuY3Rpb24gKi8KKwkgZm9vKCkgeworCSAgICAgZm9vCisJRU9GCisnCisKKyMgLS0tIGRpZmYgdGVzdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmOiB1Z2x5IHNwYWNlcycgJworCWdpdCBkaWZmIC0tbm8taW5kZW50LWhldXJpc3RpYyBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dCAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmOiAtLW5vLWluZGVudC1oZXVyaXN0aWMgb3ZlcnJpZGVzIGNvbmZpZycgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlIGRpZmYgLS1uby1pbmRlbnQtaGV1cmlzdGljIG9sZCBuZXcgLS0gc3BhY2VzLnR4dCA+b3V0MiAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtZXhwZWN0IG91dDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZjogbmljZSBzcGFjZXMgd2l0aCAtLWluZGVudC1oZXVyaXN0aWMnICcKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9ZmFsc2UgZGlmZiAtLWluZGVudC1oZXVyaXN0aWMgb2xkIG5ldyAtLSBzcGFjZXMudHh0ID5vdXQtY29tcGFjdGVkICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1jb21wYWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZjogbmljZSBzcGFjZXMgd2l0aCBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlJyAnCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUgZGlmZiBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dC1jb21wYWN0ZWQyICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1jb21wYWN0ZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmY6IC0taW5kZW50LWhldXJpc3RpYyB3aXRoIC0tcGF0aWVuY2UnICcKKwlnaXQgZGlmZiAtLWluZGVudC1oZXVyaXN0aWMgLS1wYXRpZW5jZSBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dC1jb21wYWN0ZWQzICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1jb21wYWN0ZWQzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmY6IC0taW5kZW50LWhldXJpc3RpYyB3aXRoIC0taGlzdG9ncmFtJyAnCisJZ2l0IGRpZmYgLS1pbmRlbnQtaGV1cmlzdGljIC0taGlzdG9ncmFtIG9sZCBuZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWNvbXBhY3RlZDQgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWNvbXBhY3RlZDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZjogdWdseSBmdW5jdGlvbnMnICcKKwlnaXQgZGlmZiAtLW5vLWluZGVudC1oZXVyaXN0aWMgb2xkIG5ldyAtLSBmdW5jdGlvbnMuYyA+b3V0ICYmCisJY29tcGFyZV9kaWZmIGZ1bmN0aW9ucy1leHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmY6IG5pY2UgZnVuY3Rpb25zIHdpdGggLS1pbmRlbnQtaGV1cmlzdGljJyAnCisJZ2l0IGRpZmYgLS1pbmRlbnQtaGV1cmlzdGljIG9sZCBuZXcgLS0gZnVuY3Rpb25zLmMgPm91dC1jb21wYWN0ZWQgJiYKKwljb21wYXJlX2RpZmYgZnVuY3Rpb25zLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWNvbXBhY3RlZAorJworCisjIC0tLSBibGFtZSB0ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWU6IG5pY2Ugc3BhY2VzIHdpdGggLS1pbmRlbnQtaGV1cmlzdGljJyAnCisJZ2l0IGJsYW1lIC0taW5kZW50LWhldXJpc3RpYyBvbGQuLm5ldyAtLSBzcGFjZXMudHh0ID5vdXQtYmxhbWUtY29tcGFjdGVkICYmCisJY29tcGFyZV9ibGFtZSBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtYmxhbWUtY29tcGFjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lOiBuaWNlIHNwYWNlcyB3aXRoIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUnICcKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZSBibGFtZSBvbGQuLm5ldyAtLSBzcGFjZXMudHh0ID5vdXQtYmxhbWUtY29tcGFjdGVkMiAmJgorCWNvbXBhcmVfYmxhbWUgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWJsYW1lLWNvbXBhY3RlZDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWU6IHVnbHkgc3BhY2VzIHdpdGggLS1uby1pbmRlbnQtaGV1cmlzdGljJyAnCisJZ2l0IGJsYW1lIC0tbm8taW5kZW50LWhldXJpc3RpYyBvbGQuLm5ldyAtLSBzcGFjZXMudHh0ID5vdXQtYmxhbWUgJiYKKwljb21wYXJlX2JsYW1lIHNwYWNlcy1leHBlY3Qgb3V0LWJsYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lOiB1Z2x5IHNwYWNlcyB3aXRoIGRpZmYuaW5kZW50SGV1cmlzdGljPWZhbHNlJyAnCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPWZhbHNlIGJsYW1lIG9sZC4ubmV3IC0tIHNwYWNlcy50eHQgPm91dC1ibGFtZTIgJiYKKwljb21wYXJlX2JsYW1lIHNwYWNlcy1leHBlY3Qgb3V0LWJsYW1lMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZTogLS1uby1pbmRlbnQtaGV1cmlzdGljIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZSBibGFtZSAtLW5vLWluZGVudC1oZXVyaXN0aWMgb2xkLi5uZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWJsYW1lMyAmJgorCWdpdCBibGFtZSBvbGQuLm5ldyAtLSBzcGFjZXMudHh0ID5vdXQtYmxhbWUgJiYKKwljb21wYXJlX2JsYW1lIHNwYWNlcy1leHBlY3Qgb3V0LWJsYW1lMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZTogLS1pbmRlbnQtaGV1cmlzdGljIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9ZmFsc2UgYmxhbWUgLS1pbmRlbnQtaGV1cmlzdGljIG9sZC4ubmV3IC0tIHNwYWNlcy50eHQgPm91dC1ibGFtZS1jb21wYWN0ZWQzICYmCisJY29tcGFyZV9ibGFtZSBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtYmxhbWUtY29tcGFjdGVkMgorJworCisjIC0tLSBkaWZmLXRyZWUgdGVzdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlOiBuaWNlIHNwYWNlcyB3aXRoIC0taW5kZW50LWhldXJpc3RpYycgJworCWdpdCBkaWZmLXRyZWUgLS1pbmRlbnQtaGV1cmlzdGljIC1wIG9sZCBuZXcgLS0gc3BhY2VzLnR4dCA+b3V0LWRpZmYtdHJlZS1jb21wYWN0ZWQgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWRpZmYtdHJlZS1jb21wYWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlOiBuaWNlIHNwYWNlcyB3aXRoIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUnICcKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZSBkaWZmLXRyZWUgLXAgb2xkIG5ldyAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi10cmVlLWNvbXBhY3RlZDIgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWNvbXBhY3RlZC1leHBlY3Qgb3V0LWRpZmYtdHJlZS1jb21wYWN0ZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZTogdWdseSBzcGFjZXMgd2l0aCAtLW5vLWluZGVudC1oZXVyaXN0aWMnICcKKwlnaXQgZGlmZi10cmVlIC0tbm8taW5kZW50LWhldXJpc3RpYyAtcCBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dC1kaWZmLXRyZWUgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWV4cGVjdCBvdXQtZGlmZi10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZTogdWdseSBzcGFjZXMgd2l0aCBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZScgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZSBkaWZmLXRyZWUgLXAgb2xkIG5ldyAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi10cmVlMiAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtZXhwZWN0IG91dC1kaWZmLXRyZWUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZTogLS1pbmRlbnQtaGV1cmlzdGljIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9ZmFsc2UgZGlmZi10cmVlIC0taW5kZW50LWhldXJpc3RpYyAtcCBvbGQgbmV3IC0tIHNwYWNlcy50eHQgPm91dC1kaWZmLXRyZWUtY29tcGFjdGVkMyAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtZGlmZi10cmVlLWNvbXBhY3RlZDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlOiAtLW5vLWluZGVudC1oZXVyaXN0aWMgb3ZlcnJpZGVzIGNvbmZpZycgJworCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlIGRpZmYtdHJlZSAtLW5vLWluZGVudC1oZXVyaXN0aWMgLXAgb2xkIG5ldyAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi10cmVlMyAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtZXhwZWN0IG91dC1kaWZmLXRyZWUzCisnCisKKyMgLS0tIGRpZmYtaW5kZXggdGVzdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4OiBuaWNlIHNwYWNlcyB3aXRoIC0taW5kZW50LWhldXJpc3RpYycgJworCWdpdCBjaGVja291dCAtQiBkaWZmLWluZGV4ICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEfiAmJgorCWdpdCBkaWZmLWluZGV4IC0taW5kZW50LWhldXJpc3RpYyAtcCBvbGQgLS0gc3BhY2VzLnR4dCA+b3V0LWRpZmYtaW5kZXgtY29tcGFjdGVkICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1kaWZmLWluZGV4LWNvbXBhY3RlZCAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleDogbmljZSBzcGFjZXMgd2l0aCBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtaW5kZXggJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUR+ICYmCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUgZGlmZi1pbmRleCAtcCBvbGQgLS0gc3BhY2VzLnR4dCA+b3V0LWRpZmYtaW5kZXgtY29tcGFjdGVkMiAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtZGlmZi1pbmRleC1jb21wYWN0ZWQyICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4OiB1Z2x5IHNwYWNlcyB3aXRoIC0tbm8taW5kZW50LWhldXJpc3RpYycgJworCWdpdCBjaGVja291dCAtQiBkaWZmLWluZGV4ICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEfiAmJgorCWdpdCBkaWZmLWluZGV4IC0tbm8taW5kZW50LWhldXJpc3RpYyAtcCBvbGQgLS0gc3BhY2VzLnR4dCA+b3V0LWRpZmYtaW5kZXggJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWV4cGVjdCBvdXQtZGlmZi1pbmRleCAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleDogdWdseSBzcGFjZXMgd2l0aCBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZScgJworCWdpdCBjaGVja291dCAtQiBkaWZmLWluZGV4ICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEfiAmJgorCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZSBkaWZmLWluZGV4IC1wIG9sZCAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi1pbmRleDIgJiYKKwljb21wYXJlX2RpZmYgc3BhY2VzLWV4cGVjdCBvdXQtZGlmZi1pbmRleDIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXg6IC0taW5kZW50LWhldXJpc3RpYyBvdmVycmlkZXMgY29uZmlnJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtaW5kZXggJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUR+ICYmCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPWZhbHNlIGRpZmYtaW5kZXggLS1pbmRlbnQtaGV1cmlzdGljIC1wIG9sZCAtLSBzcGFjZXMudHh0ID5vdXQtZGlmZi1pbmRleC1jb21wYWN0ZWQzICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1kaWZmLWluZGV4LWNvbXBhY3RlZDMgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXg6IC0tbm8taW5kZW50LWhldXJpc3RpYyBvdmVycmlkZXMgY29uZmlnJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtaW5kZXggJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUR+ICYmCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUgZGlmZi1pbmRleCAtLW5vLWluZGVudC1oZXVyaXN0aWMgLXAgb2xkIC0tIHNwYWNlcy50eHQgPm91dC1kaWZmLWluZGV4MyAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtZXhwZWN0IG91dC1kaWZmLWluZGV4MyAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKworIyAtLS0gZGlmZi1maWxlcyB0ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXM6IG5pY2Ugc3BhY2VzIHdpdGggLS1pbmRlbnQtaGV1cmlzdGljJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtZmlsZXMgJiYKKwlnaXQgcmVzZXQgSEVBRH4gJiYKKwlnaXQgZGlmZi1maWxlcyAtLWluZGVudC1oZXVyaXN0aWMgLXAgc3BhY2VzLnR4dCA+b3V0LWRpZmYtZmlsZXMtcmF3ICYmCisJZ3JlcCAtdiBpbmRleCBvdXQtZGlmZi1maWxlcy1yYXcgPm91dC1kaWZmLWZpbGVzLWNvbXBhY3RlZCAmJgorCWNvbXBhcmVfZGlmZiBzcGFjZXMtY29tcGFjdGVkLWV4cGVjdCBvdXQtZGlmZi1maWxlcy1jb21wYWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXM6IG5pY2Ugc3BhY2VzIHdpdGggZGlmZi5pbmRlbnRIZXVyaXN0aWM9dHJ1ZScgJworCWdpdCBjaGVja291dCAtQiBkaWZmLWZpbGVzICYmCisJZ2l0IHJlc2V0IEhFQUR+ICYmCisJZ2l0IC1jIGRpZmYuaW5kZW50SGV1cmlzdGljPXRydWUgZGlmZi1maWxlcyAtcCBzcGFjZXMudHh0ID5vdXQtZGlmZi1maWxlcy1yYXcyICYmCisJZ3JlcCAtdiBpbmRleCBvdXQtZGlmZi1maWxlcy1yYXcyID5vdXQtZGlmZi1maWxlcy1jb21wYWN0ZWQyICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1kaWZmLWZpbGVzLWNvbXBhY3RlZDIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXM6IHVnbHkgc3BhY2VzIHdpdGggLS1uby1pbmRlbnQtaGV1cmlzdGljJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtZmlsZXMgJiYKKwlnaXQgcmVzZXQgSEVBRH4gJiYKKwlnaXQgZGlmZi1maWxlcyAtLW5vLWluZGVudC1oZXVyaXN0aWMgLXAgc3BhY2VzLnR4dCA+b3V0LWRpZmYtZmlsZXMtcmF3ICYmCisJZ3JlcCAtdiBpbmRleCBvdXQtZGlmZi1maWxlcy1yYXcgPm91dC1kaWZmLWZpbGVzICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1leHBlY3Qgb3V0LWRpZmYtZmlsZXMgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXM6IHVnbHkgc3BhY2VzIHdpdGggZGlmZi5pbmRlbnRIZXVyaXN0aWM9ZmFsc2UnICcKKwlnaXQgY2hlY2tvdXQgLUIgZGlmZi1maWxlcyAmJgorCWdpdCByZXNldCBIRUFEfiAmJgorCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz1mYWxzZSBkaWZmLWZpbGVzIC1wIHNwYWNlcy50eHQgPm91dC1kaWZmLWZpbGVzLXJhdzIgJiYKKwlncmVwIC12IGluZGV4IG91dC1kaWZmLWZpbGVzLXJhdzIgPm91dC1kaWZmLWZpbGVzICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1leHBlY3Qgb3V0LWRpZmYtZmlsZXMgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXM6IC0taW5kZW50LWhldXJpc3RpYyBvdmVycmlkZXMgY29uZmlnJyAnCisJZ2l0IGNoZWNrb3V0IC1CIGRpZmYtZmlsZXMgJiYKKwlnaXQgcmVzZXQgSEVBRH4gJiYKKwlnaXQgLWMgZGlmZi5pbmRlbnRIZXVyaXN0aWM9ZmFsc2UgZGlmZi1maWxlcyAtLWluZGVudC1oZXVyaXN0aWMgLXAgc3BhY2VzLnR4dCA+b3V0LWRpZmYtZmlsZXMtcmF3MyAmJgorCWdyZXAgLXYgaW5kZXggb3V0LWRpZmYtZmlsZXMtcmF3MyA+b3V0LWRpZmYtZmlsZXMtY29tcGFjdGVkICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1jb21wYWN0ZWQtZXhwZWN0IG91dC1kaWZmLWZpbGVzLWNvbXBhY3RlZCAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlczogLS1uby1pbmRlbnQtaGV1cmlzdGljIG92ZXJyaWRlcyBjb25maWcnICcKKwlnaXQgY2hlY2tvdXQgLUIgZGlmZi1maWxlcyAmJgorCWdpdCByZXNldCBIRUFEfiAmJgorCWdpdCAtYyBkaWZmLmluZGVudEhldXJpc3RpYz10cnVlIGRpZmYtZmlsZXMgLS1uby1pbmRlbnQtaGV1cmlzdGljIC1wIHNwYWNlcy50eHQgPm91dC1kaWZmLWZpbGVzLXJhdzQgJiYKKwlncmVwIC12IGluZGV4IG91dC1kaWZmLWZpbGVzLXJhdzQgPm91dC1kaWZmLWZpbGVzICYmCisJY29tcGFyZV9kaWZmIHNwYWNlcy1leHBlY3Qgb3V0LWRpZmYtZmlsZXMgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA2Mi1kaWZmLXBpY2theGUuc2ggYi90L3Q0MDYyLWRpZmYtcGlja2F4ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTMwYzgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA2Mi1kaWZmLXBpY2theGUuc2gKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxNiBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1BpY2theGUgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwlwcmludGYgIiUwNDA5NmQiIDAgPjQwOTYtemVyb2VzLnR4dCAmJgorCWdpdCBhZGQgNDA5Ni16ZXJvZXMudHh0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQSA0ayBmaWxlIgorJworCisjIE9wZW5CU0Qgb25seSBzdXBwb3J0cyB1cCB0byAyNTUgcmVwZXRpdGlvbnMsIHNvIHJlcGVhdCB0d2ljZSBmb3IgNjQqNjQ9NDA5Ni4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1HIG1hdGNoZXMnICcKKwlnaXQgZGlmZiAtLW5hbWUtb25seSAtRyAiXigwezY0fSl7NjR9JCIgSEVBRF4gPm91dCAmJgorCXRlc3QgNDA5Ni16ZXJvZXMudHh0ID0gIiQoY2F0IG91dCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1TIC0tcGlja2F4ZS1yZWdleCcgJworCWdpdCBkaWZmIC0tbmFtZS1vbmx5IC1TMCAtLXBpY2theGUtcmVnZXggSEVBRF4gPm91dCAmJgorCXZlcmJvc2UgdGVzdCA0MDk2LXplcm9lcy50eHQgPSAiJChjYXQgb3V0KSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDYzLWRpZmYtYmxvYnMuc2ggYi90L3Q0MDYzLWRpZmYtYmxvYnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmM2OWUyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNjMtZGlmZi1ibG9icy5zaApAQCAtMCwwICsxLDk2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBkaXJlY3QgY29tcGFyaXNvbiBvZiBibG9icyB2aWEgZ2l0LWRpZmYnCisuIC4vdGVzdC1saWIuc2gKKworcnVuX2RpZmYgKCkgeworCSMgdXNlIGZ1bGwtaW5kZXggdG8gbWFrZSBpdCBlYXN5IHRvIG1hdGNoIHRoZSBpbmRleCBsaW5lCisJZ2l0IGRpZmYgLS1mdWxsLWluZGV4ICIkQCIgPmRpZmYKK30KKworY2hlY2tfaW5kZXggKCkgeworCWdyZXAgIl5pbmRleCAkMVxcLlxcLiQyIiBkaWZmCit9CisKK2NoZWNrX21vZGUgKCkgeworCWdyZXAgIl5vbGQgbW9kZSAkMSIgZGlmZiAmJgorCWdyZXAgIl5uZXcgbW9kZSAkMiIgZGlmZgorfQorCitjaGVja19wYXRocyAoKSB7CisJZ3JlcCAiXmRpZmYgLS1naXQgYS8kMSBiLyQyIiBkaWZmCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzb21lIGJsb2JzJyAnCisJZWNobyBvbmUgPm9uZSAmJgorCWVjaG8gdHdvID50d28gJiYKKwljaG1vZCAreCB0d28gJiYKKwlnaXQgYWRkIC4gJiYKKworCSMgY292ZXIgc3lzdGVtcyB3aGVyZSBtb2RlcyBhcmUgaWdub3JlZAorCWdpdCB1cGRhdGUtaW5kZXggLS1jaG1vZD0reCB0d28gJiYKKworCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCisJc2hhMV9vbmU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6b25lKSAmJgorCXNoYTFfdHdvPSQoZ2l0IHJldi1wYXJzZSBIRUFEOnR3bykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBieSBzaGExJyAnCisJcnVuX2RpZmYgJHNoYTFfb25lICRzaGExX3R3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggb2Ygc2hhMSBkaWZmJyAnCisJY2hlY2tfaW5kZXggJHNoYTFfb25lICRzaGExX3R3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhMSBkaWZmIHVzZXMgYXJndW1lbnRzIGFzIHBhdGhzJyAnCisJY2hlY2tfcGF0aHMgJHNoYTFfb25lICRzaGExX3R3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhMSBkaWZmIGhhcyBubyBtb2RlIGNoYW5nZScgJworCSEgZ3JlcCBtb2RlIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBieSB0cmVlOnBhdGggKHJ1biknICcKKwlydW5fZGlmZiBIRUFEOm9uZSBIRUFEOnR3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggb2YgdHJlZTpwYXRoIGRpZmYnICcKKwljaGVja19pbmRleCAkc2hhMV9vbmUgJHNoYTFfdHdvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlOnBhdGggZGlmZiB1c2VzIGZpbGVuYW1lcyBhcyBwYXRocycgJworCWNoZWNrX3BhdGhzIG9uZSB0d28KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWU6cGF0aCBkaWZmIHNob3dzIG1vZGUgY2hhbmdlJyAnCisJY2hlY2tfbW9kZSAxMDA2NDQgMTAwNzU1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgYnkgcmFuZ2VkIHRyZWU6cGF0aCcgJworCXJ1bl9kaWZmIEhFQUQ6b25lLi5IRUFEOnR3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggb2YgcmFuZ2VkIHRyZWU6cGF0aCBkaWZmJyAnCisJY2hlY2tfaW5kZXggJHNoYTFfb25lICRzaGExX3R3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2VkIHRyZWU6cGF0aCBkaWZmIHVzZXMgZmlsZW5hbWVzIGFzIHBhdGhzJyAnCisJY2hlY2tfcGF0aHMgb25lIHR3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2VkIHRyZWU6cGF0aCBkaWZmIHNob3dzIG1vZGUgY2hhbmdlJyAnCisJY2hlY2tfbW9kZSAxMDA2NDQgMTAwNzU1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgYmxvYiBhZ2FpbnN0IGZpbGUnICcKKwlydW5fZGlmZiBIRUFEOm9uZSB0d28KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IG9mIGJsb2ItZmlsZSBkaWZmJyAnCisJY2hlY2tfaW5kZXggJHNoYTFfb25lICRzaGExX3R3bworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYi1maWxlIGRpZmYgdXNlcyBmaWxlbmFtZSBhcyBwYXRocycgJworCWNoZWNrX3BhdGhzIG9uZSB0d28KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ2Jsb2ItZmlsZSBkaWZmIHNob3dzIG1vZGUgY2hhbmdlJyAnCisJY2hlY2tfbW9kZSAxMDA2NDQgMTAwNzU1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2ItZmlsZSBkaWZmIHByZWZlcnMgZmlsZW5hbWUgdG8gc2hhMScgJworCXJ1bl9kaWZmICRzaGExX29uZSB0d28gJiYKKwljaGVja19wYXRocyB0d28gdHdvCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA2NC1kaWZmLW9pZGZpbmQuc2ggYi90L3Q0MDY0LWRpZmYtb2lkZmluZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYmRmMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA2NC1kaWZmLW9pZGZpbmQuc2gKQEAgLTAsMCArMSw2OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZmluZGluZyBzcGVjaWZpYyBibG9icyBpbiB0aGUgcmV2aXNpb24gd2Fsa2luZycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IGluaXRpYWwgY29tbWl0IiAmJgorCisJZWNobyAiSGVsbG8sIHdvcmxkISIgPmdyZWV0aW5nICYmCisJZ2l0IGFkZCBncmVldGluZyAmJgorCWdpdCBjb21taXQgLW0gImFkZCB0aGUgZ3JlZXRpbmcgYmxvYiIgJiYgIyBib3Jyb3dlZCBmcm9tIEdpdCBmcm9tIHRoZSBCb3R0b20gVXAKKwlnaXQgdGFnIC1tICJ0aGUgYmxvYiIgZ3JlZXRpbmcgJChnaXQgcmV2LXBhcnNlIEhFQUQ6Z3JlZXRpbmcpICYmCisKKwllY2hvIGFzZGYgPnVucmVsYXRlZCAmJgorCWdpdCBhZGQgdW5yZWxhdGVkICYmCisJZ2l0IGNvbW1pdCAtbSAidW5yZWxhdGVkIGhpc3RvcnkiICYmCisKKwlnaXQgcmV2ZXJ0IEhFQUReICYmCisKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImFub3RoZXIgdW5yZWxhdGVkIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCB0aGUgZ3JlZXRpbmcgYmxvYicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVJldmVydCAiYWRkIHRoZSBncmVldGluZyBibG9iIgorCWFkZCB0aGUgZ3JlZXRpbmcgYmxvYgorCUVPRgorCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLWZpbmQtb2JqZWN0PWdyZWV0aW5nXntibG9ifSA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgdHJlZScgJworCW1rZGlyIGEgJiYKKwllY2hvIGFzZGYgPmEvZmlsZSAmJgorCWdpdCBhZGQgYS9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBhIHRyZWUnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhZGQgYSBmaWxlIGluIGEgc3ViZGlyZWN0b3J5CisJRU9GCisKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC10IC0tZmluZC1vYmplY3Q9SEVBRDphID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBzdWJtb2R1bGUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1YiAmJgorCXRlc3RfY29tbWl0IC1DIHN1YiBzdWIgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3N1YiBzdWIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhZGQgc3ViIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIGEgc3VibW9kdWxlJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYWRkIHN1YgorCUVPRgorCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLWZpbmQtb2JqZWN0PUhFQUQ6c3ViID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDY1LWRpZmYtYW5jaG9yZWQuc2ggYi90L3Q0MDY1LWRpZmYtYW5jaG9yZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjNmNTEwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNjUtZGlmZi1hbmNob3JlZC5zaApAQCAtMCwwICsxLDk0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYW5jaG9yZWQgZGlmZiBhbGdvcml0aG0nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFuY2hvcmVkJyAnCisJcHJpbnRmICJhXG5iXG5jXG4iID5wcmUgJiYKKwlwcmludGYgImNcbmFcbmJcbiIgPnBvc3QgJiYKKworCSMgbm9ybWFsbHksIGMgaXMgbW92ZWQgdG8gcHJvZHVjZSB0aGUgc21hbGxlc3QgZGlmZgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IHByZSBwb3N0ID5kaWZmICYmCisJZ3JlcCAiXitjIiBkaWZmICYmCisKKwkjIHdpdGggYW5jaG9yLCBhIGlzIG1vdmVkCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggLS1hbmNob3JlZD1jIHByZSBwb3N0ID5kaWZmICYmCisJZ3JlcCAiXithIiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW5jaG9yZWQgbXVsdGlwbGUnICcKKwlwcmludGYgImFcbmJcbmNcbmRcbmVcbmZcbiIgPnByZSAmJgorCXByaW50ZiAiY1xuYVxuYlxuZlxuZFxuZVxuIiA+cG9zdCAmJgorCisJIyB3aXRoIDEgYW5jaG9yLCBjIGlzIG5vdCBtb3ZlZCwgYnV0IGYgaXMgbW92ZWQKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLWFuY2hvcmVkPWMgcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeK2EiIGRpZmYgJiYgIyBhIGlzIG1vdmVkIGluc3RlYWQgb2YgYworCWdyZXAgIl4rZiIgZGlmZiAmJgorCisJIyB3aXRoIDIgYW5jaG9ycywgYyBhbmQgZiBhcmUgbm90IG1vdmVkCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggLS1hbmNob3JlZD1jIC0tYW5jaG9yZWQ9ZiBwcmUgcG9zdCA+ZGlmZiAmJgorCWdyZXAgIl4rYSIgZGlmZiAmJgorCWdyZXAgIl4rZCIgZGlmZiAjIGQgaXMgbW92ZWQgaW5zdGVhZCBvZiBmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW5jaG9yZWQgd2l0aCBub25leGlzdGVudCBsaW5lIGhhcyBubyBlZmZlY3QnICcKKwlwcmludGYgImFcbmJcbmNcbiIgPnByZSAmJgorCXByaW50ZiAiY1xuYVxuYlxuIiA+cG9zdCAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggLS1hbmNob3JlZD14IHByZSBwb3N0ID5kaWZmICYmCisJZ3JlcCAiXitjIiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW5jaG9yZWQgd2l0aCBub24tdW5pcXVlIGxpbmUgaGFzIG5vIGVmZmVjdCcgJworCXByaW50ZiAiYVxuYlxuY1xuZFxuZVxuY1xuIiA+cHJlICYmCisJcHJpbnRmICJjXG5hXG5iXG5jXG5kXG5lXG4iID5wb3N0ICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLWFuY2hvcmVkPWMgcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeK2MiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBzdGlsbCBwcm9kdWNlZCB3aXRoIGltcG9zc2libGUgbXVsdGlwbGUgLS1hbmNob3JlZCcgJworCXByaW50ZiAiYVxuYlxuY1xuIiA+cHJlICYmCisJcHJpbnRmICJjXG5hXG5iXG4iID5wb3N0ICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLWFuY2hvcmVkPWEgLS1hbmNob3JlZD1jIHByZSBwb3N0ID5kaWZmICYmCisJbXYgcG9zdCBleHBlY3RlZF9wb3N0ICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBkaWZmIGlzIGNvcnJlY3QgYnkgYXBwbHlpbmcgaXQgYW5kIHRoZW4KKwkjIGNvbXBhcmluZyB0aGUgcmVzdWx0IHdpdGggdGhlIG9yaWdpbmFsCisJZ2l0IGFwcGx5IGRpZmYgJiYKKwlkaWZmIGV4cGVjdGVkX3Bvc3QgcG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXRlciBhbGdvcml0aG0gYXJndW1lbnRzIG92ZXJyaWRlIGVhcmxpZXIgb25lcycgJworCXByaW50ZiAiYVxuYlxuY1xuIiA+cHJlICYmCisJcHJpbnRmICJjXG5hXG5iXG4iID5wb3N0ICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLXBhdGllbmNlIC0tYW5jaG9yZWQ9YyBwcmUgcG9zdCA+ZGlmZiAmJgorCWdyZXAgIl4rYSIgZGlmZiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggLS1hbmNob3JlZD1jIC0tcGF0aWVuY2UgcHJlIHBvc3QgPmRpZmYgJiYKKwlncmVwICJeK2MiIGRpZmYgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IC0taGlzdG9ncmFtIC0tYW5jaG9yZWQ9YyBwcmUgcG9zdCA+ZGlmZiAmJgorCWdyZXAgIl4rYSIgZGlmZiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggLS1hbmNob3JlZD1jIC0taGlzdG9ncmFtIHByZSBwb3N0ID5kaWZmICYmCisJZ3JlcCAiXitjIiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW5jaG9yZWQgd29ya3Mgd2l0aCBvdGhlciBjb21tYW5kcyBsaWtlICJnaXQgc2hvdyInICcKKwlwcmludGYgImFcbmJcbmNcbiIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGZvbyAmJgorCXByaW50ZiAiY1xuYVxuYlxuIiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gZm9vICYmCisKKwkjIHdpdGggYW5jaG9yLCBhIGlzIG1vdmVkCisJZ2l0IHNob3cgLS1wYXRpZW5jZSAtLWFuY2hvcmVkPWMgPmRpZmYgJiYKKwlncmVwICJeK2EiIGRpZmYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDY2LWRpZmYtZW1pdC1kZWxheS5zaCBiL3QvdDQwNjYtZGlmZi1lbWl0LWRlbGF5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzMzFmNjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDY2LWRpZmYtZW1pdC1kZWxheS5zaApAQCAtMCwwICsxLDc5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjb21iaW5lZC9zdGF0L21vdmVkIGludGVyYWN0aW9uJworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhpcyB0ZXN0IGNvdmVycyBhIHdlaXJkIDMtd2F5IGludGVyYWN0aW9uIGJldHdlZW4gIi0tY2MgLXAiLCB3aGljaCB3aWxsIHJ1bgorIyB0aGUgY29tYmluZWQgZGlmZiBjb2RlLCBhbG9uZyB3aXRoICItLXN0YXQiLCB3aGljaCB3aWxsIGJlIGNvbXB1dGVkIGFzIGEKKyMgZmlyc3QtcGFyZW50IHN0YXQgZHVyaW5nIHRoZSBjb21iaW5lZCBkaWZmLCBhbmQgIi0tY29sb3ItbW92ZWQiLCB3aGljaAorIyBlbmFibGVzIHRoZSBlbWl0dGVkX3N5bWJvbHMgbGlzdCB0byBzdG9yZSB0aGUgZGlmZiBpbiBtZW1vcnkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBoaXN0b3J5IHdpdGggYSBtZXJnZScgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IG1lcmdlIC1tIE0gbWFzdGVyICYmCisJdGVzdF9jb21taXQgRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1jYyAtcCAtLXN0YXQgLS1jb2xvci1tb3ZlZCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCBECisJLS0tCisJIEQudCB8IDEgKworCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworCWRpZmYgLS1naXQgYS9ELnQgYi9ELnQKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEQ6RC50KQorCS0tLSAvZGV2L251bGwKKwkrKysgYi9ELnQKKwlAQCAtMCwwICsxIEBACisJK0QKKwljb21taXQgTQorCisJIEIudCB8IDEgKworCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKwljb21taXQgQworCS0tLQorCSBDLnQgfCAxICsKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKKwlkaWZmIC0tZ2l0IGEvQy50IGIvQy50CisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBDOkMudCkKKwktLS0gL2Rldi9udWxsCisJKysrIGIvQy50CisJQEAgLTAsMCArMSBAQAorCStDCisJY29tbWl0IEIKKwktLS0KKwkgQi50IHwgMSArCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCisJZGlmZiAtLWdpdCBhL0IudCBiL0IudAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgQjpCLnQpCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL0IudAorCUBAIC0wLDAgKzEgQEAKKwkrQgorCWNvbW1pdCBBCisJLS0tCisJIEEudCB8IDEgKworCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworCWRpZmYgLS1naXQgYS9BLnQgYi9BLnQKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEE6QS50KQorCS0tLSAvZGV2L251bGwKKwkrKysgYi9BLnQKKwlAQCAtMCwwICsxIEBACisJK0EKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSJjb21taXQgJXMiIC0tY2MgLXAgLS1zdGF0IC0tY29sb3ItbW92ZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDY3LWRpZmYtcGFydGlhbC1jbG9uZS5zaCBiL3QvdDQwNjctZGlmZi1wYXJ0aWFsLWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4MzFhZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDY3LWRpZmYtcGFydGlhbC1jbG9uZS5zaApAQCAtMCwwICsxLDEzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2JlaGF2aW9yIG9mIGRpZmYgd2hlbiByZWFkaW5nIG9iamVjdHMgaW4gYSBwYXJ0aWFsIGNsb25lJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3cgYmF0Y2hlcyBibG9icycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHNlcnZlciBjbGllbnQgdHJhY2UiICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCWVjaG8gYSA+c2VydmVyL2EgJiYKKwllY2hvIGIgPnNlcnZlci9iICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYSBiICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj1ibG9iOmxpbWl0PTAgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgZXhhY3RseSAxIG5lZ290aWF0aW9uIGJ5IGNoZWNraW5nIHRoYXQgdGhlcmUgaXMKKwkjIG9ubHkgMSAiZG9uZSIgbGluZSBzZW50LiAoImRvbmUiIG1hcmtzIHRoZSBlbmQgb2YgbmVnb3RpYXRpb24uKQorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBzaG93IEhFQUQgJiYKKwlncmVwICJnaXQ+IGRvbmUiIHRyYWNlID5kb25lX2xpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBkb25lX2xpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgYmF0Y2hlcyBibG9icycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHNlcnZlciBjbGllbnQgdHJhY2UiICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCWVjaG8gYSA+c2VydmVyL2EgJiYKKwllY2hvIGIgPnNlcnZlci9iICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYSBiICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCWVjaG8gYyA+c2VydmVyL2MgJiYKKwllY2hvIGQgPnNlcnZlci9kICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYyBkICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj1ibG9iOmxpbWl0PTAgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgZXhhY3RseSAxIG5lZ290aWF0aW9uIGJ5IGNoZWNraW5nIHRoYXQgdGhlcmUgaXMKKwkjIG9ubHkgMSAiZG9uZSIgbGluZSBzZW50LiAoImRvbmUiIG1hcmtzIHRoZSBlbmQgb2YgbmVnb3RpYXRpb24uKQorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBkaWZmIEhFQUReIEhFQUQgJiYKKwlncmVwICJnaXQ+IGRvbmUiIHRyYWNlID5kb25lX2xpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBkb25lX2xpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgc2tpcHMgc2FtZS1PSUQgYmxvYnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlIiAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwllY2hvIGEgPnNlcnZlci9hICYmCisJZWNobyBiID5zZXJ2ZXIvYiAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgYiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tIHggJiYKKwllY2hvIGFub3RoZXItYSA+c2VydmVyL2EgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBhICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj1ibG9iOmxpbWl0PTAgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKworCWVjaG8gYSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluID5oYXNoLW9sZC1hICYmCisJZWNobyBhbm90aGVyLWEgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA+aGFzaC1uZXctYSAmJgorCWVjaG8gYiB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluID5oYXNoLWIgJiYKKworCSMgRW5zdXJlIHRoYXQgb25seSBhIGFuZCBhbm90aGVyLWEgYXJlIGZldGNoZWQuCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IGRpZmYgSEVBRF4gSEVBRCAmJgorCWdyZXAgIndhbnQgJChjYXQgaGFzaC1vbGQtYSkiIHRyYWNlICYmCisJZ3JlcCAid2FudCAkKGNhdCBoYXNoLW5ldy1hKSIgdHJhY2UgJiYKKwkhIGdyZXAgIndhbnQgJChjYXQgaGFzaC1iKSIgdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hlbiBmZXRjaGluZyBtaXNzaW5nIG9iamVjdHMsIGRpZmYgc2tpcHMgR0lUTElOS3MnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdWIgc2VydmVyIGNsaWVudCB0cmFjZSIgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gc3ViICYmCisJdGVzdF9jb21taXQgLUMgc3ViIGZpcnN0ICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCWVjaG8gYSA+c2VydmVyL2EgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBhICYmCisJZ2l0IC1DIHNlcnZlciBzdWJtb2R1bGUgYWRkICJmaWxlOi8vJChwd2QpL3N1YiIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIvc3ViIHNlY29uZCAmJgorCWVjaG8gYW5vdGhlci1hID5zZXJ2ZXIvYSAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgc3ViICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj1ibG9iOmxpbWl0PTAgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKworCWVjaG8gYSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluID5oYXNoLW9sZC1hICYmCisJZWNobyBhbm90aGVyLWEgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA+aGFzaC1uZXctYSAmJgorCisJIyBFbnN1cmUgdGhhdCBhIGFuZCBhbm90aGVyLWEgYXJlIGZldGNoZWQsIGFuZCBjaGVjayAoYnkgc3VjY2Vzc2Z1bAorCSMgZXhlY3V0aW9uIG9mIHRoZSBkaWZmKSB0aGF0IG5vIGludmFsaWQgT0lEcyBhcmUgc2VudC4KKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgZGlmZiBIRUFEXiBIRUFEICYmCisJZ3JlcCAid2FudCAkKGNhdCBoYXNoLW9sZC1hKSIgdHJhY2UgJiYKKwlncmVwICJ3YW50ICQoY2F0IGhhc2gtbmV3LWEpIiB0cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHdpdGggcmVuYW1lIGRldGVjdGlvbiBiYXRjaGVzIGJsb2JzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSIgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gc2VydmVyICYmCisJZWNobyBhID5zZXJ2ZXIvYSAmJgorCXByaW50ZiAiYlxuYlxuYlxuYlxuYlxuIiA+c2VydmVyL2IgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBhIGIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisJcm0gc2VydmVyL2IgJiYKKwlwcmludGYgImJcbmJcbmJcbmJcbmJYXG4iID5zZXJ2ZXIvYyAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGMgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtYSAtbSB4ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGVyZSBpcyBleGFjdGx5IDEgbmVnb3RpYXRpb24gYnkgY2hlY2tpbmcgdGhhdCB0aGVyZSBpcworCSMgb25seSAxICJkb25lIiBsaW5lIHNlbnQuICgiZG9uZSIgbWFya3MgdGhlIGVuZCBvZiBuZWdvdGlhdGlvbi4pCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IGRpZmYgLU0gSEVBRF4gSEVBRCA+b3V0ICYmCisJZ3JlcCAic2ltaWxhcml0eSBpbmRleCIgb3V0ICYmCisJZ3JlcCAiZ2l0PiBkb25lIiB0cmFjZSA+ZG9uZV9saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgZG9uZV9saW5lcworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaCBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDRiOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgdGVzdCwgd2l0aCAtLXJlY291bnQKKworJworLiAuL3Rlc3QtbGliLnNoCisKK1VOQz0ncy9eXChAQCAtWzEtOV1bMC05XSpcKSxbMC05XSogXCgrWzEtOV1bMC05XSpcKSxbMC05XSogQEAvXDEsOTk5IFwyLDk5OSBAQC8nCisKK251bT0wCit3aGlsZSByZWFkIHRpdGxlCitkbworCW51bT0kKCggJG51bSArIDEgKSkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkdGl0bGUiICcKKwkJZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgXAorCQkJPCIkVEVTVF9ESVJFQ1RPUlkvdDQxMDAvdC1hcHBseS0kbnVtLnBhdGNoIiA+Y3VycmVudCAmJgorCQl0ZXN0X2kxOG5jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDQxMDAvdC1hcHBseS0kbnVtLmV4cGVjdCBjdXJyZW50CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJHRpdGxlIHdpdGggcmVjb3VudCIgJworCQlzZWQgLWUgIiRVTkMiIDwiJFRFU1RfRElSRUNUT1JZL3Q0MTAwL3QtYXBwbHktJG51bS5wYXRjaCIgfAorCQlnaXQgYXBwbHkgLS1yZWNvdW50IC0tc3RhdCAtLXN1bW1hcnkgPmN1cnJlbnQgJiYKKwkJdGVzdF9pMThuY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q0MTAwL3QtYXBwbHktJG51bS5leHBlY3QgY3VycmVudAorCScKK2RvbmUgPDxcRU9GCityZW5hbWUKK2NvcHkKK3Jld3JpdGUKK21vZGUKK25vbiBnaXQgKDEpCitub24gZ2l0ICgyKQorbm9uIGdpdCAoMykKK2luY29tcGxldGUgKDEpCitpbmNvbXBsZXRlICgyKQorRU9GCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTEuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTEuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGU2NGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktMS5leHBlY3QKQEAgLTAsMCArMSwxMSBAQAorIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dCB8ICAgMTIgKysrKysrLS0tLS0tCisgRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0IHwgICAxMCArKysrKy0tLS0tCisgRG9jdW1lbnRhdGlvbi9naXQudHh0ICAgICAgICAgIHwgICAgNiArKystLS0KKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsrKy0tLQorIHNzaC1wdWxsLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKystLQorIHNzaC1wdXNoLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKysrKysrKy0tLS0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorIHJlbmFtZSBEb2N1bWVudGF0aW9uL3tnaXQtcnB1bGwudHh0ID0+IGdpdC1zc2gtcHVsbC50eHR9ICg5MCUpCisgcmVuYW1lIERvY3VtZW50YXRpb24ve2dpdC1ycHVzaC50eHQgPT4gZ2l0LXNzaC1wdXNoLnR4dH0gKDcxJSkKKyByZW5hbWUgcnB1bGwuYyA9PiBzc2gtcHVsbC5jICg5NyUpCisgcmVuYW1lIHJwdXNoLmMgPT4gc3NoLXB1c2guYyAoOTMlKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTEucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzM5NGY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTEucGF0Y2gKQEAgLTAsMCArMSwxOTQgQEAKKzQxOGFhZjg0N2E4YjNmZmZmYjRmNzc3YTJkZDUyNjJjYTVjZTBlZjcgKGZyb20gZGM5Mzg0MTcxNWRmYTlhOWNkZGE2ZjJjNGEyNWVlYzgzMWVhN2FhMCkKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKK3NpbWlsYXJpdHkgaW5kZXggOTAlCityZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQKK3JlbmFtZSB0byBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0CitAQCAtMSwyMSArMSwyMSBAQAorLWdpdC1ycHVsbCgxKQorLT09PT09PT09PT09PQorK2dpdC1zc2gtcHVsbCgxKQorKz09PT09PT09PT09PT09PQorIHYwLjEsIE1heSAyMDA1CisgCisgTkFNRQorIC0tLS0KKy1naXQtcnB1bGwgLSBQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorK2dpdC1zc2gtcHVsbCAtIFB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCisgCisgCisgCisgU1lOT1BTSVMKKyAtLS0tLS0tLQorLSdnaXQtcnB1bGwnIFstY10gWy10XSBbLWFdIFstZF0gWy12XSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsCisrJ2dpdC1zc2gtcHVsbCcgWy1jXSBbLXRdIFstYV0gWy1kXSBbLXZdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwKKyAKKyBERVNDUklQVElPTgorIC0tLS0tLS0tLS0tCistUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24sIGludm9raW5nIGdpdC1ycHVzaCBvbgorLXRoZSBvdGhlciBlbmQuCisrUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24sIGludm9raW5nIGdpdC1zc2gtcHVzaAorK29uIHRoZSBvdGhlciBlbmQuCisgCisgT1BUSU9OUworIC0tLS0tLS0KK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKK3NpbWlsYXJpdHkgaW5kZXggNzElCityZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQKK3JlbmFtZSB0byBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0CitAQCAtMSwxOSArMSwxOSBAQAorLWdpdC1ycHVzaCgxKQorLT09PT09PT09PT09PQorK2dpdC1zc2gtcHVzaCgxKQorKz09PT09PT09PT09PT09PQorIHYwLjEsIE1heSAyMDA1CisgCisgTkFNRQorIC0tLS0KKy1naXQtcnB1c2ggLSBIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXJwdWxsCisrZ2l0LXNzaC1wdXNoIC0gSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbAorIAorIAorIFNZTk9QU0lTCisgLS0tLS0tLS0KKy0nZ2l0LXJwdXNoJworKydnaXQtc3NoLXB1c2gnCisgCisgREVTQ1JJUFRJT04KKyAtLS0tLS0tLS0tLQorLUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwuCisrSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbC4KKyAKKyAKKyBBdXRob3IKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CitAQCAtMTQ4LDcgKzE0OCw3IEBAIGxpbms6Z2l0LXJlc29sdmUtc2NyaXB0Lmh0bWxbZ2l0LXJlc29sdmUKKyBsaW5rOmdpdC10YWctc2NyaXB0Lmh0bWxbZ2l0LXRhZy1zY3JpcHRdOjoKKyAJQW4gZXhhbXBsZSBzY3JpcHQgdG8gY3JlYXRlIGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEcKKyAKKy1saW5rOmdpdC1ycHVsbC5odG1sW2dpdC1ycHVsbF06OgorK2xpbms6Z2l0LXNzaC1wdWxsLmh0bWxbZ2l0LXNzaC1wdWxsXTo6CisgCVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCisgCisgSW50ZXJyb2dhdG9yczoKK0BAIC0xNTYsOCArMTU2LDggQEAgSW50ZXJyb2dhdG9yczoKKyBsaW5rOmdpdC1kaWZmLWhlbHBlci5odG1sW2dpdC1kaWZmLWhlbHBlcl06OgorIAlHZW5lcmF0ZXMgcGF0Y2ggZm9ybWF0IG91dHB1dCBmb3IgZ2l0LWRpZmYtKgorIAorLWxpbms6Z2l0LXJwdXNoLmh0bWxbZ2l0LXJwdXNoXTo6CistCUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwKKytsaW5rOmdpdC1zc2gtcHVzaC5odG1sW2dpdC1zc2gtcHVzaF06OgorKwlIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1wdWxsCisgCisgCisgCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMzAsNyArMzAsNyBAQCBQUk9HPSAgIGdpdC11cGRhdGUtaW5kZXggZ2l0LWRpZmYtZmlsZXMKKyAJZ2l0LWNoZWNrb3V0LWNhY2hlIGdpdC1kaWZmLXRyZWUgZ2l0LXJldi10cmVlIGdpdC1scy1maWxlcyBcCisgCWdpdC1jaGVjay1maWxlcyBnaXQtbHMtdHJlZSBnaXQtbWVyZ2UtYmFzZSBnaXQtbWVyZ2UtY2FjaGUgXAorIAlnaXQtdW5wYWNrLWZpbGUgZ2l0LWV4cG9ydCBnaXQtZGlmZi1jYWNoZSBnaXQtY29udmVydC1jYWNoZSBcCistCWdpdC1odHRwLXB1bGwgZ2l0LXJwdXNoIGdpdC1ycHVsbCBnaXQtcmV2LWxpc3QgZ2l0LW1rdGFnIFwKKysJZ2l0LWh0dHAtcHVsbCBnaXQtc3NoLXB1c2ggZ2l0LXNzaC1wdWxsIGdpdC1yZXYtbGlzdCBnaXQtbWt0YWcgXAorIAlnaXQtZGlmZi1oZWxwZXIgZ2l0LXRhci10cmVlIGdpdC1sb2NhbC1wdWxsIGdpdC13cml0ZS1ibG9iIFwKKyAJZ2l0LWdldC10YXItY29tbWl0LWlkIGdpdC1ta2RlbHRhIGdpdC1hcHBseSBnaXQtc3RyaXBzcGFjZQorIAorQEAgLTEwNSw4ICsxMDUsOCBAQCBnaXQtZGlmZi1jYWNoZTogZGlmZi1jYWNoZS5jCisgZ2l0LWNvbnZlcnQtY2FjaGU6IGNvbnZlcnQtY2FjaGUuYworIGdpdC1odHRwLXB1bGw6IGh0dHAtcHVsbC5jIHB1bGwuYworIGdpdC1sb2NhbC1wdWxsOiBsb2NhbC1wdWxsLmMgcHVsbC5jCistZ2l0LXJwdXNoOiByc2guYworLWdpdC1ycHVsbDogcnNoLmMgcHVsbC5jCisrZ2l0LXNzaC1wdXNoOiByc2guYworK2dpdC1zc2gtcHVsbDogcnNoLmMgcHVsbC5jCisgZ2l0LXJldi1saXN0OiByZXYtbGlzdC5jCisgZ2l0LW1rdGFnOiBta3RhZy5jCisgZ2l0LWRpZmYtaGVscGVyOiBkaWZmLWhlbHBlci5jCitkaWZmIC0tZ2l0IGEvcnB1bGwuYyBiL3NzaC1wdWxsLmMKK3NpbWlsYXJpdHkgaW5kZXggOTclCityZW5hbWUgZnJvbSBycHVsbC5jCityZW5hbWUgdG8gc3NoLXB1bGwuYworLS0tIGEvcnB1bGwuYworKysrIGIvc3NoLXB1bGwuYworQEAgLTY0LDEzICs2NCwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQlhcmcrKzsKKyAJfQorIAlpZiAoYXJnYyA8IGFyZyArIDIpIHsKKy0JCXVzYWdlKCJnaXQtcnB1bGwgWy1jXSBbLXRdIFstYV0gWy12XSBbLWRdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwiKTsKKysJCXVzYWdlKCJnaXQtc3NoLXB1bGwgWy1jXSBbLXRdIFstYV0gWy12XSBbLWRdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwiKTsKKyAJCXJldHVybiAxOworIAl9CisgCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKyAJdXJsID0gYXJndlthcmcgKyAxXTsKKyAKKy0JaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXJwdXNoIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKysJaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXNzaC1wdXNoIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKyAJCXJldHVybiAxOworIAorIAlpZiAoZ2V0X3ZlcnNpb24oKSkKK2RpZmYgLS1naXQgYS9ycHVzaC5jIGIvc3NoLXB1c2guYworc2ltaWxhcml0eSBpbmRleCA5MyUKK3JlbmFtZSBmcm9tIHJwdXNoLmMKK3JlbmFtZSB0byBzc2gtcHVzaC5jCistLS0gYS9ycHVzaC5jCisrKysgYi9zc2gtcHVzaC5jCitAQCAtMTYsNyArMTYsNyBAQCBpbnQgc2VydmVfb2JqZWN0KGludCBmZF9pbiwgaW50IGZkX291dCkgCisgCWRvIHsKKyAJCXNpemUgPSByZWFkKGZkX2luLCBzaGExICsgcG9zbiwgMjAgLSBwb3NuKTsKKyAJCWlmIChzaXplIDwgMCkgeworLQkJCXBlcnJvcigiZ2l0LXJwdXNoOiByZWFkICIpOworKwkJCXBlcnJvcigiZ2l0LXNzaC1wdXNoOiByZWFkICIpOworIAkJCXJldHVybiAtMTsKKyAJCX0KKyAJCWlmICghc2l6ZSkKK0BAIC0zMCw3ICszMCw3IEBAIGludCBzZXJ2ZV9vYmplY3QoaW50IGZkX2luLCBpbnQgZmRfb3V0KSAKKyAJYnVmID0gbWFwX3NoYTFfZmlsZShzaGExLCAmb2Jqc2l6ZSk7CisgCQorIAlpZiAoIWJ1ZikgeworLQkJZnByaW50ZihzdGRlcnIsICJnaXQtcnB1c2g6IGNvdWxkIG5vdCBmaW5kICVzXG4iLCAKKysJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXNzaC1wdXNoOiBjb3VsZCBub3QgZmluZCAlc1xuIiwgCisgCQkJc2hhMV90b19oZXgoc2hhMSkpOworIAkJcmVtb3RlID0gLTE7CisgCX0KK0BAIC00NSw5ICs0NSw5IEBAIGludCBzZXJ2ZV9vYmplY3QoaW50IGZkX2luLCBpbnQgZmRfb3V0KSAKKyAJCXNpemUgPSB3cml0ZShmZF9vdXQsIGJ1ZiArIHBvc24sIG9ianNpemUgLSBwb3NuKTsKKyAJCWlmIChzaXplIDw9IDApIHsKKyAJCQlpZiAoIXNpemUpIHsKKy0JCQkJZnByaW50ZihzdGRlcnIsICJnaXQtcnB1c2g6IHdyaXRlIGNsb3NlZCIpOworKwkJCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1zc2gtcHVzaDogd3JpdGUgY2xvc2VkIik7CisgCQkJfSBlbHNlIHsKKy0JCQkJcGVycm9yKCJnaXQtcnB1c2g6IHdyaXRlICIpOworKwkJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogd3JpdGUgIik7CisgCQkJfQorIAkJCXJldHVybiAtMTsKKyAJCX0KK0BAIC03MSw3ICs3MSw3IEBAIHZvaWQgc2VydmljZShpbnQgZmRfaW4sIGludCBmZF9vdXQpIHsKKyAJCXJldHZhbCA9IHJlYWQoZmRfaW4sICZ0eXBlLCAxKTsKKyAJCWlmIChyZXR2YWwgPCAxKSB7CisgCQkJaWYgKHJldHZhbCA8IDApCistCQkJCXBlcnJvcigicnB1c2g6IHJlYWQgIik7CisrCQkJCXBlcnJvcigiZ2l0LXNzaC1wdXNoOiByZWFkICIpOworIAkJCXJldHVybjsKKyAJCX0KKyAJCWlmICh0eXBlID09ICd2JyAmJiBzZXJ2ZV92ZXJzaW9uKGZkX2luLCBmZF9vdXQpKQorQEAgLTkxLDEyICs5MSwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICAgICAgICAgIGFyZysrOworICAgICAgICAgfQorICAgICAgICAgaWYgKGFyZ2MgPCBhcmcgKyAyKSB7CistCQl1c2FnZSgiZ2l0LXJwdXNoIFstY10gWy10XSBbLWFdIGNvbW1pdC1pZCB1cmwiKTsKKysJCXVzYWdlKCJnaXQtc3NoLXB1c2ggWy1jXSBbLXRdIFstYV0gY29tbWl0LWlkIHVybCIpOworICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgIH0KKyAJY29tbWl0X2lkID0gYXJndlthcmddOworIAl1cmwgPSBhcmd2W2FyZyArIDFdOworLQlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtcnB1bGwiLCB1cmwsIGFyZywgYXJndiArIDEpKQorKwlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtc3NoLXB1bGwiLCB1cmwsIGFyZywgYXJndiArIDEpKQorIAkJcmV0dXJuIDE7CisgCisgCXNlcnZpY2UoZmRfaW4sIGZkX291dCk7CmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMi5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktMi5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlNjQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS0yLmV4cGVjdApAQCAtMCwwICsxLDUgQEAKKyBNYWtlZmlsZSAgICAgICAgIHwgICAgMiArLQorIGdpdC1mZXRjaC1zY3JpcHQgfCAgICA1IC0tLS0tCisgZ2l0LXB1bGwtc2NyaXB0ICB8ICAgMzQgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKKyBjb3B5IGdpdC1wdWxsLXNjcmlwdCA9PiBnaXQtZmV0Y2gtc2NyaXB0ICg4NyUpCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMi5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS0yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzdkNjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktMi5wYXRjaApAQCAtMCwwICsxLDcyIEBACis3ZWY3NjkyNWQ5YzE5ZWY3NDg3NGUxNzM1ZTI0MzZlNTZkMGM0ODk3IChmcm9tIDZiMTRkN2ZhZjBiYWQwMjZhODFhMjdiYWMwN2I0NzY5MWY2MjFiOGYpCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjAsNyArMjAsNyBAQCBJTlNUQUxMPWluc3RhbGwKKyAKKyBTQ1JJUFRTPWdpdC1hcHBseS1wYXRjaC1zY3JpcHQgZ2l0LW1lcmdlLW9uZS1maWxlLXNjcmlwdCBnaXQtcHJ1bmUtc2NyaXB0IFwKKyAJZ2l0LXB1bGwtc2NyaXB0IGdpdC10YWctc2NyaXB0IGdpdC1yZXNvbHZlLXNjcmlwdCBnaXQtd2hhdGNoYW5nZWQgXAorLQlnaXQtZGVsdGFmeS1zY3JpcHQKKysJZ2l0LWRlbHRhZnktc2NyaXB0IGdpdC1mZXRjaC1zY3JpcHQKKyAKKyBQUk9HPSAgIGdpdC11cGRhdGUtaW5kZXggZ2l0LWRpZmYtZmlsZXMgZ2l0LWluaXQtZGIgZ2l0LXdyaXRlLXRyZWUgXAorIAlnaXQtcmVhZC10cmVlIGdpdC1jb21taXQtdHJlZSBnaXQtY2F0LWZpbGUgZ2l0LWZzY2stY2FjaGUgXAorZGlmZiAtLWdpdCBhL2dpdC1wdWxsLXNjcmlwdCBiL2dpdC1mZXRjaC1zY3JpcHQKK3NpbWlsYXJpdHkgaW5kZXggODclCitjb3B5IGZyb20gZ2l0LXB1bGwtc2NyaXB0Citjb3B5IHRvIGdpdC1mZXRjaC1zY3JpcHQKKy0tLSBhL2dpdC1wdWxsLXNjcmlwdAorKysrIGIvZ2l0LWZldGNoLXNjcmlwdAorQEAgLTM5LDggKzM5LDMgQEAgZG93bmxvYWRfb25lICIkbWVyZ2VfcmVwby8kbWVyZ2VfbmFtZSIgIgorIAorIGVjaG8gIkdldHRpbmcgb2JqZWN0IGRhdGFiYXNlIgorIGRvd25sb2FkX29iamVjdHMgIiRtZXJnZV9yZXBvIiAiJChjYXQgIiRHSVRfRElSIi9NRVJHRV9IRUFEKSIKKy0KKy1naXQtcmVzb2x2ZS1zY3JpcHQgXAorLQkiJChjYXQgIiRHSVRfRElSIi9IRUFEKSIgXAorLQkiJChjYXQgIiRHSVRfRElSIi9NRVJHRV9IRUFEKSIgXAorLQkiJG1lcmdlX3JlcG8iCitkaWZmIC0tZ2l0IGEvZ2l0LXB1bGwtc2NyaXB0IGIvZ2l0LXB1bGwtc2NyaXB0CistLS0gYS9naXQtcHVsbC1zY3JpcHQKKysrKyBiL2dpdC1wdWxsLXNjcmlwdAorQEAgLTYsMzkgKzYsNyBAQCBtZXJnZV9uYW1lPSR7MjotSEVBRH0KKyA6ICR7R0lUX0RJUj0uZ2l0fQorIDogJHtHSVRfT0JKRUNUX0RJUkVDVE9SWT0iJHtTSEExX0ZJTEVfRElSRUNUT1JZLSIkR0lUX0RJUi9vYmplY3RzIn0ifQorIAorLWRvd25sb2FkX29uZSAoKSB7CistCSMgcmVtb3RlX3BhdGg9IiQxIiBsb2NhbF9maWxlPSIkMiIKKy0JY2FzZSAiJDEiIGluCistCWh0dHA6Ly8qKQorLQkJd2dldCAtcSAtTyAiJDIiICIkMSIgOzsKKy0JLyopCistCQl0ZXN0IC1mICIkMSIgJiYgY2F0ID4iJDIiICIkMSIgOzsKKy0JKikKKy0JCXJzeW5jIC1MICIkMSIgIiQyIiA7OworLQllc2FjCistfQorLQorLWRvd25sb2FkX29iamVjdHMgKCkgeworLQkjIHJlbW90ZV9yZXBvPSIkMSIgaGVhZF9zaGExPSIkMiIKKy0JY2FzZSAiJDEiIGluCistCWh0dHA6Ly8qKQorLQkJZ2l0LWh0dHAtcHVsbCAtYSAiJDIiICIkMS8iCistCQk7OworLQkvKikKKy0JCWdpdC1sb2NhbC1wdWxsIC1sIC1hICIkMiIgIiQxLyIKKy0JCTs7CistCSopCistCQlyc3luYyAtYXZ6IC0taWdub3JlLWV4aXN0aW5nIFwKKy0JCQkiJDEvb2JqZWN0cy8uIiAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZIi8uCistCQk7OworLQllc2FjCistfQorLQorLWVjaG8gIkdldHRpbmcgcmVtb3RlICRtZXJnZV9uYW1lIgorLWRvd25sb2FkX29uZSAiJG1lcmdlX3JlcG8vJG1lcmdlX25hbWUiICIkR0lUX0RJUiIvTUVSR0VfSEVBRAorLQorLWVjaG8gIkdldHRpbmcgb2JqZWN0IGRhdGFiYXNlIgorLWRvd25sb2FkX29iamVjdHMgIiRtZXJnZV9yZXBvIiAiJChjYXQgIiRHSVRfRElSIi9NRVJHRV9IRUFEKSIKKytnaXQtZmV0Y2gtc2NyaXB0ICIkbWVyZ2VfcmVwbyIgIiRtZXJnZV9uYW1lIgorIAorIGdpdC1yZXNvbHZlLXNjcmlwdCBcCisgCSIkKGNhdCAiJEdJVF9ESVIiL0hFQUQpIiBcCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMy5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktMy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyYTU1MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS0zLmV4cGVjdApAQCAtMCwwICsxLDcgQEAKKyBEb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCB8ICAgMjAgKy0KKyBscy10cmVlLmMgICAgICAgICAgICAgICAgICAgICB8ICA0NTkgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggICB8ICAgIDMgCisgdHJlZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIAorIHRyZWUuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAKKyA1IGZpbGVzIGNoYW5nZWQsIDI2MiBpbnNlcnRpb25zKCspLCAyMjMgZGVsZXRpb25zKC0pCisgcmV3cml0ZSBscy10cmVlLmMgKDgyJSkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjMTcyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoCkBAIC0wLDAgKzEsNTY3IEBACis2YWYxZjAxOTJmZjg3NDBmZTc3ZGI3Y2YwMmM3MzljY2ZiZGYxMTljIChmcm9tIDJiYzI1NjQxNDU4MzU5OTY3MzRkNmVkNWQxODgwZjg1YjE3MjMzZDYpCitkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CitAQCAtNCwyMyArNCwyNiBAQCB2MC4xLCBNYXkgMjAwNQorIAorIE5BTUUKKyAtLS0tCistZ2l0LWxzLXRyZWUgLSBEaXNwbGF5cyBhIHRyZWUgb2JqZWN0IGluIGh1bWFuIHJlYWRhYmxlIGZvcm0KKytnaXQtbHMtdHJlZSAtIExpc3RzIHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0LgorIAorIAorIFNZTk9QU0lTCisgLS0tLS0tLS0KKy0nZ2l0LWxzLXRyZWUnIFstcl0gWy16XSA8dHJlZS1pc2g+IFtwYXRocy4uLl0KKysnZ2l0LWxzLXRyZWUnIFstZF0gWy1yXSBbLXpdIDx0cmVlLWlzaD4gW3BhdGhzLi4uXQorIAorIERFU0NSSVBUSU9OCisgLS0tLS0tLS0tLS0KKy1Db252ZXJ0cyB0aGUgdHJlZSBvYmplY3QgdG8gYSBodW1hbiByZWFkYWJsZSAoYW5kIHNjcmlwdCBwcm9jZXNzYWJsZSkKKy1mb3JtLgorK0xpc3RzIHRoZSBjb250ZW50cyBvZiBhIHRyZWUgb2JqZWN0LCBsaWtlIHdoYXQgIi9iaW4vbHMgLWEiIGRvZXMKKytpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAKKyBPUFRJT05TCisgLS0tLS0tLQorIDx0cmVlLWlzaD46OgorIAlJZCBvZiBhIHRyZWUuCisgCisrLWQ6OgorKwlzaG93IG9ubHkgdGhlIG5hbWVkIHRyZWUgZW50cnkgaXRzZWxmLCBub3QgaXRzIGNoaWxkcmVuCisrCisgLXI6OgorIAlyZWN1cnNlIGludG8gc3ViLXRyZWVzCisgCitAQCAtMjgsMTggKzMxLDE5IEBAIE9QVElPTlMKKyAJXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBvdXRwdXQKKyAKKyBwYXRoczo6CistCU9wdGlvbmFsbHksIHJlc3RyaWN0IHRoZSBvdXRwdXQgb2YgZ2l0LWxzLXRyZWUgdG8gc3BlY2lmaWMKKy0JcGF0aHMuIERpcmVjdG9yaWVzIHdpbGwgb25seSBsaXN0IHRoZWlyIHRyZWUgYmxvYiBpZHMuCistCUltcGxpZXMgLXIuCisrCVdoZW4gcGF0aHMgYXJlIGdpdmVuLCBzaG93cyB0aGVtLiAgT3RoZXJ3aXNlIGltcGxpY2l0bHkKKysJdXNlcyB0aGUgcm9vdCBsZXZlbCBvZiB0aGUgdHJlZSBhcyB0aGUgc29sZSBwYXRoIGFyZ3VtZW50LgorKworIAorIE91dHB1dCBGb3JtYXQKKyAtLS0tLS0tLS0tLS0tCistICAgICAgICA8bW9kZT5cdAk8dHlwZT5cdAk8b2JqZWN0Plx0CTxmaWxlPgorKyAgICAgICAgPG1vZGU+IFNQIDx0eXBlPiBTUCA8b2JqZWN0PiBUQUIgPGZpbGU+CisgCisgCisgQXV0aG9yCisgLS0tLS0tCisgV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CisrQ29tcGxldGVseSByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KKyAKKyBEb2N1bWVudGF0aW9uCisgLS0tLS0tLS0tLS0tLS0KK2RpZmYgLS1naXQgYS9scy10cmVlLmMgYi9scy10cmVlLmMKK2Rpc3NpbWlsYXJpdHkgaW5kZXggODIlCistLS0gbHMtdHJlZS5jCisrKysgbHMtdHJlZS5jCitAQCAtMSwyMTIgKzEsMjQ3IEBACistLyoKKy0gKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKy0gKgorLSAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKy0gKi8KKy0jaW5jbHVkZSAiY2FjaGUuaCIKKy0KKy1zdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOworLXN0YXRpYyBpbnQgcmVjdXJzaXZlID0gMDsKKy0KKy1zdHJ1Y3QgcGF0aF9wcmVmaXggeworLQlzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZXY7CistCWNvbnN0IGNoYXIgKm5hbWU7CistfTsKKy0KKy0jZGVmaW5lIERFQlVHKGZtdCwgLi4uKQkKKy0KKy1zdGF0aWMgaW50IHN0cmluZ19wYXRoX3ByZWZpeChjaGFyICpidWZmLCBzaXplX3QgYmxlbiwgc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgpCisteworLQlpbnQgbGVuID0gMDsKKy0JaWYgKHByZWZpeCkgeworLQkJaWYgKHByZWZpeC0+cHJldikgeworLQkJCWxlbiA9IHN0cmluZ19wYXRoX3ByZWZpeChidWZmLGJsZW4scHJlZml4LT5wcmV2KTsKKy0JCQlidWZmICs9IGxlbjsKKy0JCQlibGVuIC09IGxlbjsKKy0JCQlpZiAoYmxlbiA+IDApIHsKKy0JCQkJKmJ1ZmYgPSAnLyc7CistCQkJCWxlbisrOworLQkJCQlidWZmKys7CistCQkJCWJsZW4tLTsKKy0JCQl9CistCQl9CistCQlzdHJuY3B5KGJ1ZmYscHJlZml4LT5uYW1lLGJsZW4pOworLQkJcmV0dXJuIGxlbiArIHN0cmxlbihwcmVmaXgtPm5hbWUpOworLQl9CistCistCXJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgdm9pZCBwcmludF9wYXRoX3ByZWZpeChzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKy17CistCWlmIChwcmVmaXgpIHsKKy0JCWlmIChwcmVmaXgtPnByZXYpIHsKKy0JCQlwcmludF9wYXRoX3ByZWZpeChwcmVmaXgtPnByZXYpOworLQkJCXB1dGNoYXIoJy8nKTsKKy0JCX0KKy0JCWZwdXRzKHByZWZpeC0+bmFtZSwgc3Rkb3V0KTsKKy0JfQorLX0KKy0KKy0vKgorLSAqIHJldHVybjoKKy0gKiAJLTEgaWYgcHJlZml4IGlzICpub3QqIGEgc3Vic2V0IG9mIHBhdGgKKy0gKiAJIDAgaWYgcHJlZml4ID09IHBhdGgKKy0gKiAJIDEgaWYgcHJlZml4IGlzIGEgc3Vic2V0IG9mIHBhdGgKKy0gKi8KKy1zdGF0aWMgaW50IHBhdGhjbXAoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgpCisteworLQljaGFyIGJ1ZmZbUEFUSF9NQVhdOworLQlpbnQgbGVuLHNsZW47CistCistCWlmIChwcmVmaXggPT0gTlVMTCkKKy0JCXJldHVybiAxOworLQorLQlsZW4gPSBzdHJpbmdfcGF0aF9wcmVmaXgoYnVmZiwgc2l6ZW9mIGJ1ZmYsIHByZWZpeCk7CistCXNsZW4gPSBzdHJsZW4ocGF0aCk7CistCistCWlmIChzbGVuIDwgbGVuKQorLQkJcmV0dXJuIC0xOworLQorLQlpZiAoc3RybmNtcChwYXRoLGJ1ZmYsbGVuKSA9PSAwKSB7CistCQlpZiAoc2xlbiA9PSBsZW4pCistCQkJcmV0dXJuIDA7CistCQllbHNlCistCQkJcmV0dXJuIDE7CistCX0KKy0KKy0JcmV0dXJuIC0xOworLX0JCistCistLyoKKy0gKiBtYXRjaCBtYXkgYmUgTlVMTCwgb3IgYSAqc29ydGVkKiBsaXN0IG9mIHBhdGhzCistICovCistc3RhdGljIHZvaWQgbGlzdF9yZWN1cnNpdmUodm9pZCAqYnVmZmVyLAorLQkJCSAgIGNvbnN0IGNoYXIgKnR5cGUsCistCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLAorLQkJCSAgIHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4LAorLQkJCSAgIGNoYXIgKiptYXRjaCwgaW50IG1hdGNoZXMpCisteworLQlzdHJ1Y3QgcGF0aF9wcmVmaXggdGhpc19wcmVmaXg7CistCXRoaXNfcHJlZml4LnByZXYgPSBwcmVmaXg7CistCistCWlmIChzdHJjbXAodHlwZSwgInRyZWUiKSkKKy0JCWRpZSgiZXhwZWN0ZWQgYSAndHJlZScgbm9kZSIpOworLQorLQlpZiAobWF0Y2hlcykKKy0JCXJlY3Vyc2l2ZSA9IDE7CistCistCXdoaWxlIChzaXplKSB7CistCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihidWZmZXIpKzE7CistCQl2b2lkICplbHRidWYgPSBOVUxMOworLQkJY2hhciBlbHR0eXBlWzIwXTsKKy0JCXVuc2lnbmVkIGxvbmcgZWx0c2l6ZTsKKy0JCXVuc2lnbmVkIGNoYXIgKnNoYTEgPSBidWZmZXIgKyBuYW1lbGVuOworLQkJY2hhciAqcGF0aCA9IHN0cmNocihidWZmZXIsICcgJykgKyAxOworLQkJdW5zaWduZWQgaW50IG1vZGU7CistCQljb25zdCBjaGFyICptYXRjaGVkID0gTlVMTDsKKy0JCWludCBtdHlwZSA9IC0xOworLQkJaW50IG1pbmRleDsKKy0KKy0JCWlmIChzaXplIDwgbmFtZWxlbiArIDIwIHx8IHNzY2FuZihidWZmZXIsICIlbyIsICZtb2RlKSAhPSAxKQorLQkJCWRpZSgiY29ycnVwdCAndHJlZScgZmlsZSIpOworLQkJYnVmZmVyID0gc2hhMSArIDIwOworLQkJc2l6ZSAtPSBuYW1lbGVuICsgMjA7CistCistCQl0aGlzX3ByZWZpeC5uYW1lID0gcGF0aDsKKy0JCWZvciAoIG1pbmRleCA9IDA7IG1pbmRleCA8IG1hdGNoZXM7IG1pbmRleCsrKSB7CistCQkJbXR5cGUgPSBwYXRoY21wKG1hdGNoW21pbmRleF0sJnRoaXNfcHJlZml4KTsKKy0JCQlpZiAobXR5cGUgPj0gMCkgeworLQkJCQltYXRjaGVkID0gbWF0Y2hbbWluZGV4XTsKKy0JCQkJYnJlYWs7CistCQkJfQorLQkJfQorLQorLQkJLyoKKy0JCSAqIElmIHdlJ3JlIG5vdCBtYXRjaGluZywgb3IgaWYgdGhpcyBpcyBhbiBleGFjdCBtYXRjaCwKKy0JCSAqIHByaW50IG91dCB0aGUgaW5mbworLQkJICovCistCQlpZiAoIW1hdGNoZXMgfHwgKG1hdGNoZWQgIT0gTlVMTCAmJiBtdHlwZSA9PSAwKSkgeworLQkJCXByaW50ZigiJTA2byAlcyAlc1x0IiwgbW9kZSwKKy0JCQkgICAgICAgU19JU0RJUihtb2RlKSA/ICJ0cmVlIiA6ICJibG9iIiwKKy0JCQkgICAgICAgc2hhMV90b19oZXgoc2hhMSkpOworLQkJCXByaW50X3BhdGhfcHJlZml4KCZ0aGlzX3ByZWZpeCk7CistCQkJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0aW9uKTsKKy0JCX0KKy0KKy0JCWlmICghIHJlY3Vyc2l2ZSB8fCAhIFNfSVNESVIobW9kZSkpCistCQkJY29udGludWU7CistCistCQlpZiAobWF0Y2hlcyAmJiAhIG1hdGNoZWQpCistCQkJY29udGludWU7CistCistCQlpZiAoISAoZWx0YnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgZWx0dHlwZSwgJmVsdHNpemUpKSApIHsKKy0JCQllcnJvcigiY2Fubm90IHJlYWQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CistCQkJY29udGludWU7CistCQl9CistCistCQkvKiBJZiB0aGlzIGlzIGFuIGV4YWN0IGRpcmVjdG9yeSBtYXRjaCwgd2UgbWF5IGhhdmUKKy0JCSAqIGRpcmVjdG9yeSBmaWxlcyBmb2xsb3dpbmcgdGhpcyBwYXRoLiBNYXRjaCBvbiB0aGVtLgorLQkJICogT3RoZXJ3aXNlLCB3ZSdyZSBhdCBhIHBhdGNoIHN1YmNvbXBvbmVudCwgYW5kIHdlIG5lZWQKKy0JCSAqIHRvIHRyeSB0byBtYXRjaCBhZ2Fpbi4KKy0JCSAqLworLQkJaWYgKG10eXBlID09IDApCistCQkJbWluZGV4Kys7CistCistCQlsaXN0X3JlY3Vyc2l2ZShlbHRidWYsIGVsdHR5cGUsIGVsdHNpemUsICZ0aGlzX3ByZWZpeCwgJm1hdGNoW21pbmRleF0sIG1hdGNoZXMtbWluZGV4KTsKKy0JCWZyZWUoZWx0YnVmKTsKKy0JfQorLX0KKy0KKy1zdGF0aWMgaW50IHFjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKKy17CistCXJldHVybiBzdHJjbXAoKihjaGFyICoqKWEsICooY2hhciAqKiliKTsKKy19CistCistc3RhdGljIGludCBsaXN0KHVuc2lnbmVkIGNoYXIgKnNoYTEsY2hhciAqKnBhdGgpCisteworLQl2b2lkICpidWZmZXI7CistCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKy0JaW50IG5wYXRoczsKKy0KKy0JZm9yIChucGF0aHMgPSAwOyBwYXRoW25wYXRoc10gIT0gTlVMTDsgbnBhdGhzKyspCistCQk7CistCistCXFzb3J0KHBhdGgsbnBhdGhzLHNpemVvZihjaGFyICopLHFjbXApOworLQorLQlidWZmZXIgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzaGExLCAidHJlZSIsICZzaXplLCBOVUxMKTsKKy0JaWYgKCFidWZmZXIpCistCQlkaWUoInVuYWJsZSB0byByZWFkIHNoYTEgZmlsZSIpOworLQlsaXN0X3JlY3Vyc2l2ZShidWZmZXIsICJ0cmVlIiwgc2l6ZSwgTlVMTCwgcGF0aCwgbnBhdGhzKTsKKy0JZnJlZShidWZmZXIpOworLQlyZXR1cm4gMDsKKy19CistCistc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfdXNhZ2UgPSAiZ2l0LWxzLXRyZWUgWy1yXSBbLXpdIDxrZXk+IFtwYXRocy4uLl0iOworLQorLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKy17CistCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CistCistCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworLQkJc3dpdGNoIChhcmd2WzFdWzFdKSB7CistCQljYXNlICd6JzoKKy0JCQlsaW5lX3Rlcm1pbmF0aW9uID0gMDsKKy0JCQlicmVhazsKKy0JCWNhc2UgJ3InOgorLQkJCXJlY3Vyc2l2ZSA9IDE7CistCQkJYnJlYWs7CistCQlkZWZhdWx0OgorLQkJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworLQkJfQorLQkJYXJnYy0tOyBhcmd2Kys7CistCX0KKy0KKy0JaWYgKGFyZ2MgPCAyKQorLQkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CistCWlmIChnZXRfc2hhMShhcmd2WzFdLCBzaGExKSA8IDApCistCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKy0JaWYgKGxpc3Qoc2hhMSwgJmFyZ3ZbMl0pIDwgMCkKKy0JCWRpZSgibGlzdCBmYWlsZWQiKTsKKy0JcmV0dXJuIDA7CistfQorKy8qCisrICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisrICovCisrI2luY2x1ZGUgImNhY2hlLmgiCisrI2luY2x1ZGUgImJsb2IuaCIKKysjaW5jbHVkZSAidHJlZS5oIgorKworK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CisrI2RlZmluZSBMU19SRUNVUlNJVkUgMQorKyNkZWZpbmUgTFNfVFJFRV9PTkxZIDIKKytzdGF0aWMgaW50IGxzX29wdGlvbnMgPSAwOworKworK3N0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0IHJvb3RfZW50cnk7CisrCisrc3RhdGljIHZvaWQgcHJlcGFyZV9yb290KHVuc2lnbmVkIGNoYXIgKnNoYTEpCisreworKwl1bnNpZ25lZCBjaGFyIHJzaGFbMjBdOworKwl1bnNpZ25lZCBsb25nIHNpemU7CisrCXZvaWQgKmJ1ZjsKKysJc3RydWN0IHRyZWUgKnJvb3RfdHJlZTsKKysKKysJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgInRyZWUiLCAmc2l6ZSwgcnNoYSk7CisrCWZyZWUoYnVmKTsKKysJaWYgKCFidWYpCisrCQlkaWUoIkNvdWxkIG5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworKworKwlyb290X3RyZWUgPSBsb29rdXBfdHJlZShyc2hhKTsKKysJaWYgKCFyb290X3RyZWUpCisrCQlkaWUoIkNvdWxkIG5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworKworKwkvKiBQcmVwYXJlIGEgZmFrZSBlbnRyeSAqLworKwlyb290X2VudHJ5LmRpcmVjdG9yeSA9IDE7CisrCXJvb3RfZW50cnkuZXhlY3V0YWJsZSA9IHJvb3RfZW50cnkuc3ltbGluayA9IDA7CisrCXJvb3RfZW50cnkubW9kZSA9IFNfSUZESVI7CisrCXJvb3RfZW50cnkubmFtZSA9ICIiOworKwlyb290X2VudHJ5Lml0ZW0udHJlZSA9IHJvb3RfdHJlZTsKKysJcm9vdF9lbnRyeS5wYXJlbnQgPSBOVUxMOworK30KKysKKytzdGF0aWMgaW50IHByZXBhcmVfY2hpbGRyZW4oc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZWxlbSkKKyt7CisrCWlmICghZWxlbS0+ZGlyZWN0b3J5KQorKwkJcmV0dXJuIC0xOworKwlpZiAoIWVsZW0tPml0ZW0udHJlZS0+b2JqZWN0LnBhcnNlZCkgeworKwkJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZTsKKysJCWlmIChwYXJzZV90cmVlKGVsZW0tPml0ZW0udHJlZSkpCisrCQkJcmV0dXJuIC0xOworKwkJLyogU2V0IHVwIHRoZSBwYXJlbnQgbGluayAqLworKwkJZm9yIChlID0gZWxlbS0+aXRlbS50cmVlLT5lbnRyaWVzOyBlOyBlID0gZS0+bmV4dCkKKysJCQllLT5wYXJlbnQgPSBlbGVtOworKwl9CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZmluZF9lbnRyeV8wKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmVsZW0sCisrCQkJCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKysJCQkJCSAgICBjb25zdCBjaGFyICpwYXRoX2VuZCkKKyt7CisrCWNvbnN0IGNoYXIgKmVwOworKwlpbnQgbGVuOworKworKwl3aGlsZSAocGF0aCA8IHBhdGhfZW5kKSB7CisrCQlpZiAocHJlcGFyZV9jaGlsZHJlbihlbGVtKSkKKysJCQlyZXR1cm4gTlVMTDsKKysKKysJCS8qIEluIGVsZW0tPnRyZWUtPmVudHJpZXMsIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBuYW1lCisrCQkgKiB0aGF0IG1hdGNoZXMgd2hhdCBpcyBiZXR3ZWVuIHBhdGggYW5kIGVwLgorKwkJICovCisrCQllbGVtID0gZWxlbS0+aXRlbS50cmVlLT5lbnRyaWVzOworKworKwkJZXAgPSBzdHJjaHIocGF0aCwgJy8nKTsKKysJCWlmICghZXAgfHwgcGF0aF9lbmQgPD0gZXApCisrCQkJZXAgPSBwYXRoX2VuZDsKKysJCWxlbiA9IGVwIC0gcGF0aDsKKysKKysJCXdoaWxlIChlbGVtKSB7CisrCQkJaWYgKChzdHJsZW4oZWxlbS0+bmFtZSkgPT0gbGVuKSAmJgorKwkJCSAgICAhc3RybmNtcChlbGVtLT5uYW1lLCBwYXRoLCBsZW4pKQorKwkJCQlicmVhazsKKysJCQllbGVtID0gZWxlbS0+bmV4dDsKKysJCX0KKysJCWlmIChwYXRoX2VuZCA8PSBlcCB8fCAhZWxlbSkKKysJCQlyZXR1cm4gZWxlbTsKKysJCXdoaWxlICgqZXAgPT0gJy8nICYmIGVwIDwgcGF0aF9lbmQpCisrCQkJZXArKzsKKysJCXBhdGggPSBlcDsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmZpbmRfZW50cnkoY29uc3QgY2hhciAqcGF0aCwKKysJCQkJCSAgY29uc3QgY2hhciAqcGF0aF9lbmQpCisreworKwkvKiBGaW5kIHRyZWUgZWxlbWVudCwgZGVzY2VuZGluZyBmcm9tIHJvb3QsIHRoYXQKKysJICogY29ycmVzcG9uZHMgdG8gdGhlIG5hbWVkIHBhdGgsIGxhemlseSBleHBhbmRpbmcKKysJICogdGhlIHRyZWUgaWYgcG9zc2libGUuCisrCSAqLworKwlpZiAocGF0aCA9PSBwYXRoX2VuZCkgeworKwkJLyogU3BlY2lhbC4gIFRoaXMgaXMgdGhlIHJvb3QgbGV2ZWwgKi8KKysJCXJldHVybiAmcm9vdF9lbnRyeTsKKysJfQorKwlyZXR1cm4gZmluZF9lbnRyeV8wKCZyb290X2VudHJ5LCBwYXRoLCBwYXRoX2VuZCk7CisrfQorKworK3N0YXRpYyB2b2lkIHNob3dfZW50cnlfbmFtZShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQorK3sKKysJLyogVGhpcyBpcyB5dWNreS4gIFRoZSByb290IGxldmVsIGlzIHRoZXJlIGZvcgorKwkgKiBvdXIgY29udmVuaWVuY2UgYnV0IHdlIHJlYWxseSB3YW50IHRvIGRvIGEKKysJICogZm9yZXN0LgorKwkgKi8KKysJaWYgKGUtPnBhcmVudCAmJiBlLT5wYXJlbnQgIT0gJnJvb3RfZW50cnkpIHsKKysJCXNob3dfZW50cnlfbmFtZShlLT5wYXJlbnQpOworKwkJcHV0Y2hhcignLycpOworKwl9CisrCXByaW50ZigiJXMiLCBlLT5uYW1lKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3R5cGUoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCXJldHVybiAoZS0+ZGlyZWN0b3J5ID8gInRyZWUiIDogImJsb2IiKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X2hleChzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQorK3sKKysJcmV0dXJuIHNoYTFfdG9faGV4KGUtPmRpcmVjdG9yeQorKwkJCSAgID8gZS0+aXRlbS50cmVlLT5vYmplY3Quc2hhMQorKwkJCSAgIDogZS0+aXRlbS5ibG9iLT5vYmplY3Quc2hhMSk7CisrfQorKworKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIG11dHVhbGx5IHJlY3Vyc2l2ZSByb3V0aW5lcyAqLworK3N0YXRpYyBpbnQgc2hvd19lbnRyeShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICosIGludCk7CisrCisrc3RhdGljIGludCBzaG93X2NoaWxkcmVuKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUsIGludCBsZXZlbCkKKyt7CisrCWlmIChwcmVwYXJlX2NoaWxkcmVuKGUpKQorKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogbHMtdHJlZSBzaG93X2NoaWxkcmVuIGNhbGxlZCB3aXRoIG5vbiB0cmVlIik7CisrCWUgPSBlLT5pdGVtLnRyZWUtPmVudHJpZXM7CisrCXdoaWxlIChlKSB7CisrCQlzaG93X2VudHJ5KGUsIGxldmVsKTsKKysJCWUgPSBlLT5uZXh0OworKwl9CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNob3dfZW50cnkoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSwgaW50IGxldmVsKQorK3sKKysJaW50IGVyciA9IDA7IAorKworKwlpZiAoZSAhPSAmcm9vdF9lbnRyeSkgeworKwkJcHJpbnRmKCIlMDZvICVzICVzCSIsIGUtPm1vZGUsIGVudHJ5X3R5cGUoZSksCisrCQkgICAgICAgZW50cnlfaGV4KGUpKTsKKysJCXNob3dfZW50cnlfbmFtZShlKTsKKysJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CisrCX0KKysKKysJaWYgKGUtPmRpcmVjdG9yeSkgeworKwkJLyogSWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNhc2VzOgorKwkJICogKDEpIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCByZXF1ZXN0IChleHBsaWNpdCBwYXRoIGZyb20gdGhlCisrCQkgKiAgICAgY29tbWFuZCBsaW5lLCBvciAicm9vdCIgaWYgdGhlcmUgaXMgbm8gY29tbWFuZCBsaW5lKS4KKysJCSAqICBhLiBXaXRob3V0IGFueSBmbGFnLiAgV2Ugc2hvdyBkaXJlY3QgY2hpbGRyZW4uICBXZSBkbyBub3QgCisrCQkgKiAgICAgcmVjdXJzZSBpbnRvIHRoZW0uCisrCQkgKiAgYi4gV2l0aCAtci4gIFdlIGRvIHJlY3Vyc2UgaW50byBjaGlsZHJlbi4KKysJCSAqICBjLiBXaXRoIC1kLiAgV2UgZG8gbm90IHJlY3Vyc2UgaW50byBjaGlsZHJlbi4KKysJCSAqICgyKSBXZSBjYW1lIGhlcmUgYmVjYXVzZSBvdXIgY2FsbGVyIGlzIGVpdGhlciAoMS1hKSBvcgorKwkJICogICAgICgxLWIpLgorKwkJICogIGEuIFdpdGhvdXQgYW55IGZsYWcuICBXZSBkbyBub3Qgc2hvdyBvdXIgY2hpbGRyZW4gKHdoaWNoCisrCQkgKiAgICAgYXJlIGdyYW5kY2hpbGRyZW4gZm9yIHRoZSBvcmlnaW5hbCByZXF1ZXN0KS4KKysJCSAqICBiLiBXaXRoIC1yLiAgV2UgY29udGludWUgdG8gcmVjdXJzZSBpbnRvIG91ciBjaGlsZHJlbi4KKysJCSAqICBjLiBXaXRoIC1kLiAgV2Ugc2hvdWxkIG5vdCBoYXZlIGNvbWUgaGVyZSB0byBiZWdpbiB3aXRoLgorKwkJICovCisrCQlpZiAobGV2ZWwgPT0gMCAmJiAhKGxzX29wdGlvbnMgJiBMU19UUkVFX09OTFkpKQorKwkJCS8qIGNhc2UgKDEpLWEgYW5kICgxKS1iICovCisrCQkJZXJyID0gZXJyIHwgc2hvd19jaGlsZHJlbihlLCBsZXZlbCsxKTsKKysJCWVsc2UgaWYgKGxldmVsICYmIGxzX29wdGlvbnMgJiBMU19SRUNVUlNJVkUpCisrCQkJLyogY2FzZSAoMiktYiAqLworKwkJCWVyciA9IGVyciB8IHNob3dfY2hpbGRyZW4oZSwgbGV2ZWwrMSk7CisrCX0KKysJcmV0dXJuIGVycjsKKyt9CisrCisrc3RhdGljIGludCBsaXN0X29uZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwYXRoX2VuZCkKKyt7CisrCWludCBlcnIgPSAwOworKwlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplID0gZmluZF9lbnRyeShwYXRoLCBwYXRoX2VuZCk7CisrCWlmICghZSkgeworKwkJLyogdHJhZGl0aW9uYWxseSBscy10cmVlIGRvZXMgbm90IGNvbXBsYWluIGFib3V0CisrCQkgKiBtaXNzaW5nIHBhdGguICBXZSBtYXkgY2hhbmdlIHRoaXMgbGF0ZXIgdG8gbWF0Y2gKKysJCSAqIHdoYXQgIi9iaW4vbHMgLWEiIGRvZXMsIHdoaWNoIGlzIHRvIGNvbXBsYWluLgorKwkJICovCisrCQlyZXR1cm4gZXJyOworKwl9CisrCWVyciA9IGVyciB8IHNob3dfZW50cnkoZSwgMCk7CisrCXJldHVybiBlcnI7CisrfQorKworK3N0YXRpYyBpbnQgbGlzdChjaGFyICoqcGF0aCkKKyt7CisrCWludCBpOworKwlpbnQgZXJyID0gMDsKKysJZm9yIChpID0gMDsgcGF0aFtpXTsgaSsrKSB7CisrCQlpbnQgbGVuID0gc3RybGVuKHBhdGhbaV0pOworKwkJd2hpbGUgKDAgPD0gbGVuICYmIHBhdGhbaV1bbGVuXSA9PSAnLycpCisrCQkJbGVuLS07CisrCQllcnIgPSBlcnIgfCBsaXN0X29uZShwYXRoW2ldLCBwYXRoW2ldICsgbGVuKTsKKysJfQorKwlyZXR1cm4gZXJyOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqbHNfdHJlZV91c2FnZSA9CisrCSJnaXQtbHMtdHJlZSBbLWRdIFstcl0gWy16XSA8dHJlZS1pc2g+IFtwYXRoLi4uXSI7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysJc3RhdGljIGNoYXIgKnBhdGgwW10gPSB7ICIiLCBOVUxMIH07CisrCWNoYXIgKipwYXRoOworKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworKworKwl3aGlsZSAoMSA8IGFyZ2MgJiYgYXJndlsxXVswXSA9PSAnLScpIHsKKysJCXN3aXRjaCAoYXJndlsxXVsxXSkgeworKwkJY2FzZSAneic6CisrCQkJbGluZV90ZXJtaW5hdGlvbiA9IDA7CisrCQkJYnJlYWs7CisrCQljYXNlICdyJzoKKysJCQlsc19vcHRpb25zIHw9IExTX1JFQ1VSU0lWRTsKKysJCQlicmVhazsKKysJCWNhc2UgJ2QnOgorKwkJCWxzX29wdGlvbnMgfD0gTFNfVFJFRV9PTkxZOworKwkJCWJyZWFrOworKwkJZGVmYXVsdDoKKysJCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKysJCX0KKysJCWFyZ2MtLTsgYXJndisrOworKwl9CisrCisrCWlmIChhcmdjIDwgMikKKysJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworKwlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2hhMSkgPCAwKQorKwkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CisrCisrCXBhdGggPSAoYXJnYyA9PSAyKSA/IHBhdGgwIDogKGFyZ3YgKyAyKTsKKysJcHJlcGFyZV9yb290KHNoYTEpOworKwlpZiAobGlzdChwYXRoKSA8IDApCisrCQlkaWUoImxpc3QgZmFpbGVkIik7CisrCXJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKKy0tLSBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCitAQCAtNzQsOCArNzQsOCBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgJ2xzLXRyZWUgZmlsdGVyZWQnIFwKKyAgICAgJ2dpdC1scy10cmVlICR0cmVlIHBhdGgxIHBhdGgwID5jdXJyZW50ICYmCisgICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorLTEwMDY0NCBibG9iIFgJcGF0aDAKKyAxMjAwMDAgYmxvYiBYCXBhdGgxCisrMTAwNjQ0IGJsb2IgWAlwYXRoMAorIEVPRgorICAgICAgdGVzdF9vdXRwdXQnCisgCitAQCAtODUsNyArODUsNiBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgMDQwMDAwIHRyZWUgWAlwYXRoMgorIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CistMTAwNjQ0IGJsb2IgWAlwYXRoMi9iYXovYgorIDEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KKyAxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbworIEVPRgorZGlmZiAtLWdpdCBhL3RyZWUuYyBiL3RyZWUuYworLS0tIGEvdHJlZS5jCisrKysgYi90cmVlLmMKK0BAIC0xMzMsNyArMTMzLDcgQEAgaW50IHBhcnNlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICppdGVtLAorIAkJfQorIAkJaWYgKG9iaikKKyAJCQlhZGRfcmVmKCZpdGVtLT5vYmplY3QsIG9iaik7CistCisrCQllbnRyeS0+cGFyZW50ID0gTlVMTDsgLyogbmVlZHMgdG8gYmUgZmlsbGVkIGJ5IHRoZSB1c2VyICovCisgCQkqbGlzdF9wID0gZW50cnk7CisgCQlsaXN0X3AgPSAmZW50cnktPm5leHQ7CisgCX0KK2RpZmYgLS1naXQgYS90cmVlLmggYi90cmVlLmgKKy0tLSBhL3RyZWUuaAorKysrIGIvdHJlZS5oCitAQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0IHsKKyAJCXN0cnVjdCB0cmVlICp0cmVlOworIAkJc3RydWN0IGJsb2IgKmJsb2I7CisgCX0gaXRlbTsKKysJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqcGFyZW50OworIH07CisgCisgc3RydWN0IHRyZWUgewpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTQuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTQuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzAyOGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNC5leHBlY3QKQEAgLTAsMCArMSw1IEBACisgdC90MDAwMC1iYXNpYy5zaCB8ICAgIDAgCisgdC90ZXN0LWxpYi5zaCAgICB8ICAgIDAgCisgMiBmaWxlcyBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSB0L3QwMDAwLWJhc2ljLnNoCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSB0L3Rlc3QtbGliLnNoCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNC5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTZhYjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNC5wYXRjaApAQCAtMCwwICsxLDcgQEAKK2NlZWRlNTllYTkwY2ViYWQ1MmJhOWM4MjYzZmVmM2ZiNmVmMTc1OTMgKGZyb20gMzY4Zjk5ZDU3ZThlZDE3MjQzZjJlMTY0NDMxNDQ5ZDQ4YmZjYTJmYikKK2RpZmYgLS1naXQgYS90L3QwMDAwLWJhc2ljLnNoIGIvdC90MDAwMC1iYXNpYy5zaAorb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2RpZmYgLS1naXQgYS90L3Rlc3QtbGliLnNoIGIvdC90ZXN0LWxpYi5zaAorb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS01LmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS01LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzg3ZGYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTUuZXhwZWN0CkBAIC0wLDAgKzEsMTkgQEAKKyBEb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQgICAgfCAgIDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyBEb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQgICAgfCAgIDMwIC0tLS0tLS0tLS0tLQorIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dCB8ICAgNTAgKysrKysrKysrKysrKysrKysrKworIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dCB8ICAgMzAgKysrKysrKysrKysrCisgRG9jdW1lbnRhdGlvbi9naXQudHh0ICAgICAgICAgIHwgICAgNiArLQorIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBycHVsbC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDgzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcnB1c2guYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3NoLXB1bGwuYyAgICAgICAgICAgICAgICAgICAgIHwgICA4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNzaC1wdXNoLmMgICAgICAgICAgICAgICAgICAgICB8ICAxMDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEwIGZpbGVzIGNoYW5nZWQsIDI3MyBpbnNlcnRpb25zKCspLCAyNzMgZGVsZXRpb25zKC0pCisgZGVsZXRlIERvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dAorIGRlbGV0ZSBEb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQKKyBjcmVhdGUgRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0CisgY3JlYXRlIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dAorIGRlbGV0ZSBycHVsbC5jCisgZGVsZXRlIHJwdXNoLmMKKyBjcmVhdGUgc3NoLXB1bGwuYworIGNyZWF0ZSBzc2gtcHVzaC5jCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNS5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS01LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWM3OWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNS5wYXRjaApAQCAtMCwwICsxLDYxMiBAQAorZGlmZiBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0CisrKysgL2Rldi9udWxsCitAQCAtMSw1MCArMCwwIEBACistZ2l0LXJwdWxsKDEpCistPT09PT09PT09PT09CistdjAuMSwgTWF5IDIwMDUKKy0KKy1OQU1FCistLS0tLQorLWdpdC1ycHVsbCAtIFB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCistCistCistCistU1lOT1BTSVMKKy0tLS0tLS0tLQorLSdnaXQtcnB1bGwnIFstY10gWy10XSBbLWFdIFstZF0gWy12XSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsCistCistREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tLQorLVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uLCBpbnZva2luZyBnaXQtcnB1c2ggb24KKy10aGUgb3RoZXIgZW5kLgorLQorLU9QVElPTlMKKy0tLS0tLS0tCistLWM6OgorLQlHZXQgdGhlIGNvbW1pdCBvYmplY3RzLgorLS10OjoKKy0JR2V0IHRyZWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tbWl0IG9iamVjdHMuCistLWE6OgorLQlHZXQgYWxsIHRoZSBvYmplY3RzLgorLS1kOjoKKy0JRG8gbm90IGNoZWNrIGZvciBkZWx0YSBiYXNlIG9iamVjdHMgKHVzZSB0aGlzIG9wdGlvbgorLQlvbmx5IHdoZW4geW91IGtub3cgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGlzIG5vdAorLQlkZWx0aWZpZWQpLgorLS0tcmVjb3Zlcjo6CistCUNoZWNrIGRlcGVuZGVuY3kgb2YgZGVsdGlmaWVkIG9iamVjdCBtb3JlIGNhcmVmdWxseSB0aGFuCistCXVzdWFsLCB0byByZWNvdmVyIGFmdGVyIGVhcmxpZXIgcHVsbCB0aGF0IHdhcyBpbnRlcnJ1cHRlZC4KKy0tdjo6CistCVJlcG9ydCB3aGF0IGlzIGRvd25sb2FkZWQuCistCistCistQXV0aG9yCistLS0tLS0tCistV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CistCistRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0tCistRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKy0KKy1HSVQKKy0tLS0KKy1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKKy0KK2RpZmYgYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdXNoLnR4dAorKysrIC9kZXYvbnVsbAorQEAgLTEsMzAgKzAsMCBAQAorLWdpdC1ycHVzaCgxKQorLT09PT09PT09PT09PQorLXYwLjEsIE1heSAyMDA1CistCistTkFNRQorLS0tLS0KKy1naXQtcnB1c2ggLSBIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXJwdWxsCistCistCistU1lOT1BTSVMKKy0tLS0tLS0tLQorLSdnaXQtcnB1c2gnCistCistREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tLQorLUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwuCistCistCistQXV0aG9yCistLS0tLS0tCistV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CistCistRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0tCistRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKy0KKy1HSVQKKy0tLS0KKy1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKKy0KK2RpZmYgYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKKy0tLSAvZGV2L251bGwKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dAorQEAgLTAsMCArMSw1MCBAQAorK2dpdC1zc2gtcHVsbCgxKQorKz09PT09PT09PT09PT09PQorK3YwLjEsIE1heSAyMDA1CisrCisrTkFNRQorKy0tLS0KKytnaXQtc3NoLXB1bGwgLSBQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorKworKworKworK1NZTk9QU0lTCisrLS0tLS0tLS0KKysnZ2l0LXNzaC1wdWxsJyBbLWNdIFstdF0gWy1hXSBbLWRdIFstdl0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybAorKworK0RFU0NSSVBUSU9OCisrLS0tLS0tLS0tLS0KKytQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbiwgaW52b2tpbmcgZ2l0LXNzaC1wdXNoCisrb24gdGhlIG90aGVyIGVuZC4KKysKKytPUFRJT05TCisrLS0tLS0tLQorKy1jOjoKKysJR2V0IHRoZSBjb21taXQgb2JqZWN0cy4KKystdDo6CisrCUdldCB0cmVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1pdCBvYmplY3RzLgorKy1hOjoKKysJR2V0IGFsbCB0aGUgb2JqZWN0cy4KKystZDo6CisrCURvIG5vdCBjaGVjayBmb3IgZGVsdGEgYmFzZSBvYmplY3RzICh1c2UgdGhpcyBvcHRpb24KKysJb25seSB3aGVuIHlvdSBrbm93IHRoZSByZW1vdGUgcmVwb3NpdG9yeSBpcyBub3QKKysJZGVsdGlmaWVkKS4KKystLXJlY292ZXI6OgorKwlDaGVjayBkZXBlbmRlbmN5IG9mIGRlbHRpZmllZCBvYmplY3QgbW9yZSBjYXJlZnVsbHkgdGhhbgorKwl1c3VhbCwgdG8gcmVjb3ZlciBhZnRlciBlYXJsaWVyIHB1bGwgdGhhdCB3YXMgaW50ZXJydXB0ZWQuCisrLXY6OgorKwlSZXBvcnQgd2hhdCBpcyBkb3dubG9hZGVkLgorKworKworK0F1dGhvcgorKy0tLS0tLQorK1dyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorKworK0RvY3VtZW50YXRpb24KKystLS0tLS0tLS0tLS0tLQorK0RvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisrCisrR0lUCisrLS0tCisrUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCisrCitkaWZmIGEvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0CistLS0gL2Rldi9udWxsCisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKK0BAIC0wLDAgKzEsMzAgQEAKKytnaXQtc3NoLXB1c2goMSkKKys9PT09PT09PT09PT09PT0KKyt2MC4xLCBNYXkgMjAwNQorKworK05BTUUKKystLS0tCisrZ2l0LXNzaC1wdXNoIC0gSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbAorKworKworK1NZTk9QU0lTCisrLS0tLS0tLS0KKysnZ2l0LXNzaC1wdXNoJworKworK0RFU0NSSVBUSU9OCisrLS0tLS0tLS0tLS0KKytIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1wdWxsLgorKworKworK0F1dGhvcgorKy0tLS0tLQorK1dyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorKworK0RvY3VtZW50YXRpb24KKystLS0tLS0tLS0tLS0tLQorK0RvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisrCisrR0lUCisrLS0tCisrUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCisrCitkaWZmIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorQEAgLTE0OCw3ICsxNDgsNyBAQCBsaW5rOmdpdC1yZXNvbHZlLXNjcmlwdC5odG1sW2dpdC1yZXNvbHZlCisgbGluazpnaXQtdGFnLXNjcmlwdC5odG1sW2dpdC10YWctc2NyaXB0XTo6CisgCUFuIGV4YW1wbGUgc2NyaXB0IHRvIGNyZWF0ZSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHCisgCistbGluazpnaXQtcnB1bGwuaHRtbFtnaXQtcnB1bGxdOjoKKytsaW5rOmdpdC1zc2gtcHVsbC5odG1sW2dpdC1zc2gtcHVsbF06OgorIAlQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorIAorIEludGVycm9nYXRvcnM6CitAQCAtMTU2LDggKzE1Niw4IEBAIEludGVycm9nYXRvcnM6CisgbGluazpnaXQtZGlmZi1oZWxwZXIuaHRtbFtnaXQtZGlmZi1oZWxwZXJdOjoKKyAJR2VuZXJhdGVzIHBhdGNoIGZvcm1hdCBvdXRwdXQgZm9yIGdpdC1kaWZmLSoKKyAKKy1saW5rOmdpdC1ycHVzaC5odG1sW2dpdC1ycHVzaF06OgorLQlIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXJwdWxsCisrbGluazpnaXQtc3NoLXB1c2guaHRtbFtnaXQtc3NoLXB1c2hdOjoKKysJSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbAorIAorIAorIAorZGlmZiBhL01ha2VmaWxlIGIvTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTMwLDcgKzMwLDcgQEAgUFJPRz0gICBnaXQtdXBkYXRlLWluZGV4IGdpdC1kaWZmLWZpbGVzCisgCWdpdC1jaGVja291dC1jYWNoZSBnaXQtZGlmZi10cmVlIGdpdC1yZXYtdHJlZSBnaXQtbHMtZmlsZXMgXAorIAlnaXQtY2hlY2stZmlsZXMgZ2l0LWxzLXRyZWUgZ2l0LW1lcmdlLWJhc2UgZ2l0LW1lcmdlLWNhY2hlIFwKKyAJZ2l0LXVucGFjay1maWxlIGdpdC1leHBvcnQgZ2l0LWRpZmYtY2FjaGUgZ2l0LWNvbnZlcnQtY2FjaGUgXAorLQlnaXQtaHR0cC1wdWxsIGdpdC1ycHVzaCBnaXQtcnB1bGwgZ2l0LXJldi1saXN0IGdpdC1ta3RhZyBcCisrCWdpdC1odHRwLXB1bGwgZ2l0LXNzaC1wdXNoIGdpdC1zc2gtcHVsbCBnaXQtcmV2LWxpc3QgZ2l0LW1rdGFnIFwKKyAJZ2l0LWRpZmYtaGVscGVyIGdpdC10YXItdHJlZSBnaXQtbG9jYWwtcHVsbCBnaXQtd3JpdGUtYmxvYiBcCisgCWdpdC1nZXQtdGFyLWNvbW1pdC1pZCBnaXQtbWtkZWx0YSBnaXQtYXBwbHkgZ2l0LXN0cmlwc3BhY2UKKyAKK0BAIC0xMDUsOCArMTA1LDggQEAgZ2l0LWRpZmYtY2FjaGU6IGRpZmYtY2FjaGUuYworIGdpdC1jb252ZXJ0LWNhY2hlOiBjb252ZXJ0LWNhY2hlLmMKKyBnaXQtaHR0cC1wdWxsOiBodHRwLXB1bGwuYyBwdWxsLmMKKyBnaXQtbG9jYWwtcHVsbDogbG9jYWwtcHVsbC5jIHB1bGwuYworLWdpdC1ycHVzaDogcnNoLmMKKy1naXQtcnB1bGw6IHJzaC5jIHB1bGwuYworK2dpdC1zc2gtcHVzaDogcnNoLmMKKytnaXQtc3NoLXB1bGw6IHJzaC5jIHB1bGwuYworIGdpdC1yZXYtbGlzdDogcmV2LWxpc3QuYworIGdpdC1ta3RhZzogbWt0YWcuYworIGdpdC1kaWZmLWhlbHBlcjogZGlmZi1oZWxwZXIuYworZGlmZiBhL3JwdWxsLmMgYi9ycHVsbC5jCistLS0gYS9ycHVsbC5jCisrKysgL2Rldi9udWxsCitAQCAtMSw4MyArMCwwIEBACistI2luY2x1ZGUgImNhY2hlLmgiCistI2luY2x1ZGUgImNvbW1pdC5oIgorLSNpbmNsdWRlICJyc2guaCIKKy0jaW5jbHVkZSAicHVsbC5oIgorLQorLXN0YXRpYyBpbnQgZmRfaW47Cistc3RhdGljIGludCBmZF9vdXQ7CistCistc3RhdGljIHVuc2lnbmVkIGNoYXIgcmVtb3RlX3ZlcnNpb24gPSAwOworLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxvY2FsX3ZlcnNpb24gPSAxOworLQorLWludCBmZXRjaCh1bnNpZ25lZCBjaGFyICpzaGExKQorLXsKKy0JaW50IHJldDsKKy0Jc2lnbmVkIGNoYXIgcmVtb3RlOworLQljaGFyIHR5cGUgPSAnbyc7CistCWlmIChoYXNfc2hhMV9maWxlKHNoYTEpKQorLQkJcmV0dXJuIDA7CistCXdyaXRlKGZkX291dCwgJnR5cGUsIDEpOworLQl3cml0ZShmZF9vdXQsIHNoYTEsIDIwKTsKKy0JaWYgKHJlYWQoZmRfaW4sICZyZW1vdGUsIDEpIDwgMSkKKy0JCXJldHVybiAtMTsKKy0JaWYgKHJlbW90ZSA8IDApCistCQlyZXR1cm4gcmVtb3RlOworLQlyZXQgPSB3cml0ZV9zaGExX2Zyb21fZmQoc2hhMSwgZmRfaW4pOworLQlpZiAoIXJldCkKKy0JCXB1bGxfc2F5KCJnb3QgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKy0JcmV0dXJuIHJldDsKKy19CistCistaW50IGdldF92ZXJzaW9uKHZvaWQpCisteworLQljaGFyIHR5cGUgPSAndic7CistCXdyaXRlKGZkX291dCwgJnR5cGUsIDEpOworLQl3cml0ZShmZF9vdXQsICZsb2NhbF92ZXJzaW9uLCAxKTsKKy0JaWYgKHJlYWQoZmRfaW4sICZyZW1vdGVfdmVyc2lvbiwgMSkgPCAxKSB7CistCQlyZXR1cm4gZXJyb3IoIkNvdWxkbid0IHJlYWQgdmVyc2lvbiBmcm9tIHJlbW90ZSBlbmQiKTsKKy0JfQorLQlyZXR1cm4gMDsKKy19CistCistaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorLXsKKy0JY2hhciAqY29tbWl0X2lkOworLQljaGFyICp1cmw7CistCWludCBhcmcgPSAxOworLQorLQl3aGlsZSAoYXJnIDwgYXJnYyAmJiBhcmd2W2FyZ11bMF0gPT0gJy0nKSB7CistCQlpZiAoYXJndlthcmddWzFdID09ICd0JykgeworLQkJCWdldF90cmVlID0gMTsKKy0JCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdjJykgeworLQkJCWdldF9oaXN0b3J5ID0gMTsKKy0JCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdkJykgeworLQkJCWdldF9kZWx0YSA9IDA7CistCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlthcmddLCAiLS1yZWNvdmVyIikpIHsKKy0JCQlnZXRfZGVsdGEgPSAyOworLQkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2EnKSB7CistCQkJZ2V0X2FsbCA9IDE7CistCQkJZ2V0X3RyZWUgPSAxOworLQkJCWdldF9oaXN0b3J5ID0gMTsKKy0JCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICd2JykgeworLQkJCWdldF92ZXJib3NlbHkgPSAxOworLQkJfQorLQkJYXJnKys7CistCX0KKy0JaWYgKGFyZ2MgPCBhcmcgKyAyKSB7CistCQl1c2FnZSgiZ2l0LXJwdWxsIFstY10gWy10XSBbLWFdIFstdl0gWy1kXSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsIik7CistCQlyZXR1cm4gMTsKKy0JfQorLQljb21taXRfaWQgPSBhcmd2W2FyZ107CistCXVybCA9IGFyZ3ZbYXJnICsgMV07CistCistCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1ycHVzaCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCistCQlyZXR1cm4gMTsKKy0KKy0JaWYgKGdldF92ZXJzaW9uKCkpCistCQlyZXR1cm4gMTsKKy0KKy0JaWYgKHB1bGwoY29tbWl0X2lkKSkKKy0JCXJldHVybiAxOworLQorLQlyZXR1cm4gMDsKKy19CitkaWZmIGEvcnB1c2guYyBiL3JwdXNoLmMKKy0tLSBhL3JwdXNoLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDEwNCArMCwwIEBACistI2luY2x1ZGUgImNhY2hlLmgiCistI2luY2x1ZGUgInJzaC5oIgorLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistI2luY2x1ZGUgPGVycm5vLmg+CistCistdW5zaWduZWQgY2hhciBsb2NhbF92ZXJzaW9uID0gMTsKKy11bnNpZ25lZCBjaGFyIHJlbW90ZV92ZXJzaW9uID0gMDsKKy0KKy1pbnQgc2VydmVfb2JqZWN0KGludCBmZF9pbiwgaW50IGZkX291dCkgeworLQlzc2l6ZV90IHNpemU7CistCWludCBwb3NuID0gMDsKKy0JY2hhciBzaGExWzIwXTsKKy0JdW5zaWduZWQgbG9uZyBvYmpzaXplOworLQl2b2lkICpidWY7CistCXNpZ25lZCBjaGFyIHJlbW90ZTsKKy0JZG8geworLQkJc2l6ZSA9IHJlYWQoZmRfaW4sIHNoYTEgKyBwb3NuLCAyMCAtIHBvc24pOworLQkJaWYgKHNpemUgPCAwKSB7CistCQkJcGVycm9yKCJnaXQtcnB1c2g6IHJlYWQgIik7CistCQkJcmV0dXJuIC0xOworLQkJfQorLQkJaWYgKCFzaXplKQorLQkJCXJldHVybiAtMTsKKy0JCXBvc24gKz0gc2l6ZTsKKy0JfSB3aGlsZSAocG9zbiA8IDIwKTsKKy0JCistCS8qIGZwcmludGYoc3RkZXJyLCAiU2VydmluZyAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOyAqLworLQlyZW1vdGUgPSAwOworLQkKKy0JYnVmID0gbWFwX3NoYTFfZmlsZShzaGExLCAmb2Jqc2l6ZSk7CistCQorLQlpZiAoIWJ1ZikgeworLQkJZnByaW50ZihzdGRlcnIsICJnaXQtcnB1c2g6IGNvdWxkIG5vdCBmaW5kICVzXG4iLCAKKy0JCQlzaGExX3RvX2hleChzaGExKSk7CistCQlyZW1vdGUgPSAtMTsKKy0JfQorLQkKKy0Jd3JpdGUoZmRfb3V0LCAmcmVtb3RlLCAxKTsKKy0JCistCWlmIChyZW1vdGUgPCAwKQorLQkJcmV0dXJuIDA7CistCQorLQlwb3NuID0gMDsKKy0JZG8geworLQkJc2l6ZSA9IHdyaXRlKGZkX291dCwgYnVmICsgcG9zbiwgb2Jqc2l6ZSAtIHBvc24pOworLQkJaWYgKHNpemUgPD0gMCkgeworLQkJCWlmICghc2l6ZSkgeworLQkJCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1ycHVzaDogd3JpdGUgY2xvc2VkIik7CistCQkJfSBlbHNlIHsKKy0JCQkJcGVycm9yKCJnaXQtcnB1c2g6IHdyaXRlICIpOworLQkJCX0KKy0JCQlyZXR1cm4gLTE7CistCQl9CistCQlwb3NuICs9IHNpemU7CistCX0gd2hpbGUgKHBvc24gPCBvYmpzaXplKTsKKy0JcmV0dXJuIDA7CistfQorLQorLWludCBzZXJ2ZV92ZXJzaW9uKGludCBmZF9pbiwgaW50IGZkX291dCkKKy17CistCWlmIChyZWFkKGZkX2luLCAmcmVtb3RlX3ZlcnNpb24sIDEpIDwgMSkKKy0JCXJldHVybiAtMTsKKy0Jd3JpdGUoZmRfb3V0LCAmbG9jYWxfdmVyc2lvbiwgMSk7CistCXJldHVybiAwOworLX0KKy0KKy12b2lkIHNlcnZpY2UoaW50IGZkX2luLCBpbnQgZmRfb3V0KSB7CistCWNoYXIgdHlwZTsKKy0JaW50IHJldHZhbDsKKy0JZG8geworLQkJcmV0dmFsID0gcmVhZChmZF9pbiwgJnR5cGUsIDEpOworLQkJaWYgKHJldHZhbCA8IDEpIHsKKy0JCQlpZiAocmV0dmFsIDwgMCkKKy0JCQkJcGVycm9yKCJycHVzaDogcmVhZCAiKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlpZiAodHlwZSA9PSAndicgJiYgc2VydmVfdmVyc2lvbihmZF9pbiwgZmRfb3V0KSkKKy0JCQlyZXR1cm47CistCQlpZiAodHlwZSA9PSAnbycgJiYgc2VydmVfb2JqZWN0KGZkX2luLCBmZF9vdXQpKQorLQkJCXJldHVybjsKKy0JfSB3aGlsZSAoMSk7CistfQorLQorLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKy17CistCWludCBhcmcgPSAxOworLSAgICAgICAgY2hhciAqY29tbWl0X2lkOworLSAgICAgICAgY2hhciAqdXJsOworLQlpbnQgZmRfaW4sIGZkX291dDsKKy0Jd2hpbGUgKGFyZyA8IGFyZ2MgJiYgYXJndlthcmddWzBdID09ICctJykgeworLSAgICAgICAgICAgICAgICBhcmcrKzsKKy0gICAgICAgIH0KKy0gICAgICAgIGlmIChhcmdjIDwgYXJnICsgMikgeworLQkJdXNhZ2UoImdpdC1ycHVzaCBbLWNdIFstdF0gWy1hXSBjb21taXQtaWQgdXJsIik7CistICAgICAgICAgICAgICAgIHJldHVybiAxOworLSAgICAgICAgfQorLQljb21taXRfaWQgPSBhcmd2W2FyZ107CistCXVybCA9IGFyZ3ZbYXJnICsgMV07CistCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1ycHVsbCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCistCQlyZXR1cm4gMTsKKy0KKy0Jc2VydmljZShmZF9pbiwgZmRfb3V0KTsKKy0JcmV0dXJuIDA7CistfQorZGlmZiBhL3NzaC1wdWxsLmMgYi9zc2gtcHVsbC5jCistLS0gL2Rldi9udWxsCisrKysgYi9zc2gtcHVsbC5jCitAQCAtMCwwICsxLDgzIEBACisrI2luY2x1ZGUgImNhY2hlLmgiCisrI2luY2x1ZGUgImNvbW1pdC5oIgorKyNpbmNsdWRlICJyc2guaCIKKysjaW5jbHVkZSAicHVsbC5oIgorKworK3N0YXRpYyBpbnQgZmRfaW47Cisrc3RhdGljIGludCBmZF9vdXQ7CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgcmVtb3RlX3ZlcnNpb24gPSAwOworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGxvY2FsX3ZlcnNpb24gPSAxOworKworK2ludCBmZXRjaCh1bnNpZ25lZCBjaGFyICpzaGExKQorK3sKKysJaW50IHJldDsKKysJc2lnbmVkIGNoYXIgcmVtb3RlOworKwljaGFyIHR5cGUgPSAnbyc7CisrCWlmIChoYXNfc2hhMV9maWxlKHNoYTEpKQorKwkJcmV0dXJuIDA7CisrCXdyaXRlKGZkX291dCwgJnR5cGUsIDEpOworKwl3cml0ZShmZF9vdXQsIHNoYTEsIDIwKTsKKysJaWYgKHJlYWQoZmRfaW4sICZyZW1vdGUsIDEpIDwgMSkKKysJCXJldHVybiAtMTsKKysJaWYgKHJlbW90ZSA8IDApCisrCQlyZXR1cm4gcmVtb3RlOworKwlyZXQgPSB3cml0ZV9zaGExX2Zyb21fZmQoc2hhMSwgZmRfaW4pOworKwlpZiAoIXJldCkKKysJCXB1bGxfc2F5KCJnb3QgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisraW50IGdldF92ZXJzaW9uKHZvaWQpCisreworKwljaGFyIHR5cGUgPSAndic7CisrCXdyaXRlKGZkX291dCwgJnR5cGUsIDEpOworKwl3cml0ZShmZF9vdXQsICZsb2NhbF92ZXJzaW9uLCAxKTsKKysJaWYgKHJlYWQoZmRfaW4sICZyZW1vdGVfdmVyc2lvbiwgMSkgPCAxKSB7CisrCQlyZXR1cm4gZXJyb3IoIkNvdWxkbid0IHJlYWQgdmVyc2lvbiBmcm9tIHJlbW90ZSBlbmQiKTsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysJY2hhciAqY29tbWl0X2lkOworKwljaGFyICp1cmw7CisrCWludCBhcmcgPSAxOworKworKwl3aGlsZSAoYXJnIDwgYXJnYyAmJiBhcmd2W2FyZ11bMF0gPT0gJy0nKSB7CisrCQlpZiAoYXJndlthcmddWzFdID09ICd0JykgeworKwkJCWdldF90cmVlID0gMTsKKysJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdjJykgeworKwkJCWdldF9oaXN0b3J5ID0gMTsKKysJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdkJykgeworKwkJCWdldF9kZWx0YSA9IDA7CisrCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlthcmddLCAiLS1yZWNvdmVyIikpIHsKKysJCQlnZXRfZGVsdGEgPSAyOworKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2EnKSB7CisrCQkJZ2V0X2FsbCA9IDE7CisrCQkJZ2V0X3RyZWUgPSAxOworKwkJCWdldF9oaXN0b3J5ID0gMTsKKysJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICd2JykgeworKwkJCWdldF92ZXJib3NlbHkgPSAxOworKwkJfQorKwkJYXJnKys7CisrCX0KKysJaWYgKGFyZ2MgPCBhcmcgKyAyKSB7CisrCQl1c2FnZSgiZ2l0LXNzaC1wdWxsIFstY10gWy10XSBbLWFdIFstdl0gWy1kXSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsIik7CisrCQlyZXR1cm4gMTsKKysJfQorKwljb21taXRfaWQgPSBhcmd2W2FyZ107CisrCXVybCA9IGFyZ3ZbYXJnICsgMV07CisrCisrCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1zc2gtcHVzaCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisrCQlyZXR1cm4gMTsKKysKKysJaWYgKGdldF92ZXJzaW9uKCkpCisrCQlyZXR1cm4gMTsKKysKKysJaWYgKHB1bGwoY29tbWl0X2lkKSkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKyt9CitkaWZmIGEvc3NoLXB1c2guYyBiL3NzaC1wdXNoLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NzaC1wdXNoLmMKK0BAIC0wLDAgKzEsMTA0IEBACisrI2luY2x1ZGUgImNhY2hlLmgiCisrI2luY2x1ZGUgInJzaC5oIgorKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrCisrdW5zaWduZWQgY2hhciBsb2NhbF92ZXJzaW9uID0gMTsKKyt1bnNpZ25lZCBjaGFyIHJlbW90ZV92ZXJzaW9uID0gMDsKKysKKytpbnQgc2VydmVfb2JqZWN0KGludCBmZF9pbiwgaW50IGZkX291dCkgeworKwlzc2l6ZV90IHNpemU7CisrCWludCBwb3NuID0gMDsKKysJY2hhciBzaGExWzIwXTsKKysJdW5zaWduZWQgbG9uZyBvYmpzaXplOworKwl2b2lkICpidWY7CisrCXNpZ25lZCBjaGFyIHJlbW90ZTsKKysJZG8geworKwkJc2l6ZSA9IHJlYWQoZmRfaW4sIHNoYTEgKyBwb3NuLCAyMCAtIHBvc24pOworKwkJaWYgKHNpemUgPCAwKSB7CisrCQkJcGVycm9yKCJnaXQtc3NoLXB1c2g6IHJlYWQgIik7CisrCQkJcmV0dXJuIC0xOworKwkJfQorKwkJaWYgKCFzaXplKQorKwkJCXJldHVybiAtMTsKKysJCXBvc24gKz0gc2l6ZTsKKysJfSB3aGlsZSAocG9zbiA8IDIwKTsKKysJCisrCS8qIGZwcmludGYoc3RkZXJyLCAiU2VydmluZyAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOyAqLworKwlyZW1vdGUgPSAwOworKwkKKysJYnVmID0gbWFwX3NoYTFfZmlsZShzaGExLCAmb2Jqc2l6ZSk7CisrCQorKwlpZiAoIWJ1ZikgeworKwkJZnByaW50ZihzdGRlcnIsICJnaXQtc3NoLXB1c2g6IGNvdWxkIG5vdCBmaW5kICVzXG4iLCAKKysJCQlzaGExX3RvX2hleChzaGExKSk7CisrCQlyZW1vdGUgPSAtMTsKKysJfQorKwkKKysJd3JpdGUoZmRfb3V0LCAmcmVtb3RlLCAxKTsKKysJCisrCWlmIChyZW1vdGUgPCAwKQorKwkJcmV0dXJuIDA7CisrCQorKwlwb3NuID0gMDsKKysJZG8geworKwkJc2l6ZSA9IHdyaXRlKGZkX291dCwgYnVmICsgcG9zbiwgb2Jqc2l6ZSAtIHBvc24pOworKwkJaWYgKHNpemUgPD0gMCkgeworKwkJCWlmICghc2l6ZSkgeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1zc2gtcHVzaDogd3JpdGUgY2xvc2VkIik7CisrCQkJfSBlbHNlIHsKKysJCQkJcGVycm9yKCJnaXQtc3NoLXB1c2g6IHdyaXRlICIpOworKwkJCX0KKysJCQlyZXR1cm4gLTE7CisrCQl9CisrCQlwb3NuICs9IHNpemU7CisrCX0gd2hpbGUgKHBvc24gPCBvYmpzaXplKTsKKysJcmV0dXJuIDA7CisrfQorKworK2ludCBzZXJ2ZV92ZXJzaW9uKGludCBmZF9pbiwgaW50IGZkX291dCkKKyt7CisrCWlmIChyZWFkKGZkX2luLCAmcmVtb3RlX3ZlcnNpb24sIDEpIDwgMSkKKysJCXJldHVybiAtMTsKKysJd3JpdGUoZmRfb3V0LCAmbG9jYWxfdmVyc2lvbiwgMSk7CisrCXJldHVybiAwOworK30KKysKKyt2b2lkIHNlcnZpY2UoaW50IGZkX2luLCBpbnQgZmRfb3V0KSB7CisrCWNoYXIgdHlwZTsKKysJaW50IHJldHZhbDsKKysJZG8geworKwkJcmV0dmFsID0gcmVhZChmZF9pbiwgJnR5cGUsIDEpOworKwkJaWYgKHJldHZhbCA8IDEpIHsKKysJCQlpZiAocmV0dmFsIDwgMCkKKysJCQkJcGVycm9yKCJnaXQtc3NoLXB1c2g6IHJlYWQgIik7CisrCQkJcmV0dXJuOworKwkJfQorKwkJaWYgKHR5cGUgPT0gJ3YnICYmIHNlcnZlX3ZlcnNpb24oZmRfaW4sIGZkX291dCkpCisrCQkJcmV0dXJuOworKwkJaWYgKHR5cGUgPT0gJ28nICYmIHNlcnZlX29iamVjdChmZF9pbiwgZmRfb3V0KSkKKysJCQlyZXR1cm47CisrCX0gd2hpbGUgKDEpOworK30KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKwlpbnQgYXJnID0gMTsKKysgICAgICAgIGNoYXIgKmNvbW1pdF9pZDsKKysgICAgICAgIGNoYXIgKnVybDsKKysJaW50IGZkX2luLCBmZF9vdXQ7CisrCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKKysgICAgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICB9CisrICAgICAgICBpZiAoYXJnYyA8IGFyZyArIDIpIHsKKysJCXVzYWdlKCJnaXQtc3NoLXB1c2ggWy1jXSBbLXRdIFstYV0gY29tbWl0LWlkIHVybCIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysJY29tbWl0X2lkID0gYXJndlthcmddOworKwl1cmwgPSBhcmd2W2FyZyArIDFdOworKwlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtc3NoLXB1bGwiLCB1cmwsIGFyZywgYXJndiArIDEpKQorKwkJcmV0dXJuIDE7CisrCisrCXNlcnZpY2UoZmRfaW4sIGZkX291dCk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS02LmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS02LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzM0M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTYuZXhwZWN0CkBAIC0wLDAgKzEsNSBAQAorIE1ha2VmaWxlICAgICAgICAgfCAgICAyICstCisgZ2l0LWZldGNoLXNjcmlwdCB8ICAgNDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBnaXQtcHVsbC1zY3JpcHQgIHwgICAzNCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgZ2l0LWZldGNoLXNjcmlwdApkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTYucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI3MjlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTYucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK2RpZmYgYS9NYWtlZmlsZSBiL01ha2VmaWxlCistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yMCw3ICsyMCw3IEBAIElOU1RBTEw9aW5zdGFsbAorIAorIFNDUklQVFM9Z2l0LWFwcGx5LXBhdGNoLXNjcmlwdCBnaXQtbWVyZ2Utb25lLWZpbGUtc2NyaXB0IGdpdC1wcnVuZS1zY3JpcHQgXAorIAlnaXQtcHVsbC1zY3JpcHQgZ2l0LXRhZy1zY3JpcHQgZ2l0LXJlc29sdmUtc2NyaXB0IGdpdC13aGF0Y2hhbmdlZCBcCistCWdpdC1kZWx0YWZ5LXNjcmlwdAorKwlnaXQtZGVsdGFmeS1zY3JpcHQgZ2l0LWZldGNoLXNjcmlwdAorIAorIFBST0c9ICAgZ2l0LXVwZGF0ZS1pbmRleCBnaXQtZGlmZi1maWxlcyBnaXQtaW5pdC1kYiBnaXQtd3JpdGUtdHJlZSBcCisgCWdpdC1yZWFkLXRyZWUgZ2l0LWNvbW1pdC10cmVlIGdpdC1jYXQtZmlsZSBnaXQtZnNjay1jYWNoZSBcCitkaWZmIGEvZ2l0LWZldGNoLXNjcmlwdCBiL2dpdC1mZXRjaC1zY3JpcHQKKy0tLSAvZGV2L251bGwKKysrKyBiL2dpdC1mZXRjaC1zY3JpcHQKK0BAIC0wLDAgKzEsNDEgQEAKKysjIS9iaW4vc2gKKysjCisrbWVyZ2VfcmVwbz0kMQorK21lcmdlX25hbWU9JHsyOi1IRUFEfQorKworKzogJHtHSVRfRElSPS5naXR9CisrOiAke0dJVF9PQkpFQ1RfRElSRUNUT1JZPSIke1NIQTFfRklMRV9ESVJFQ1RPUlktIiRHSVRfRElSL29iamVjdHMifSJ9CisrCisrZG93bmxvYWRfb25lICgpIHsKKysJIyByZW1vdGVfcGF0aD0iJDEiIGxvY2FsX2ZpbGU9IiQyIgorKwljYXNlICIkMSIgaW4KKysJaHR0cDovLyopCisrCQl3Z2V0IC1xIC1PICIkMiIgIiQxIiA7OworKwkvKikKKysJCXRlc3QgLWYgIiQxIiAmJiBjYXQgPiIkMiIgIiQxIiA7OworKwkqKQorKwkJcnN5bmMgLUwgIiQxIiAiJDIiIDs7CisrCWVzYWMKKyt9CisrCisrZG93bmxvYWRfb2JqZWN0cyAoKSB7CisrCSMgcmVtb3RlX3JlcG89IiQxIiBoZWFkX3NoYTE9IiQyIgorKwljYXNlICIkMSIgaW4KKysJaHR0cDovLyopCisrCQlnaXQtaHR0cC1wdWxsIC1hICIkMiIgIiQxLyIKKysJCTs7CisrCS8qKQorKwkJZ2l0LWxvY2FsLXB1bGwgLWwgLWEgIiQyIiAiJDEvIgorKwkJOzsKKysJKikKKysJCXJzeW5jIC1hdnogLS1pZ25vcmUtZXhpc3RpbmcgXAorKwkJCSIkMS9vYmplY3RzLy4iICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkiLy4KKysJCTs7CisrCWVzYWMKKyt9CisrCisrZWNobyAiR2V0dGluZyByZW1vdGUgJG1lcmdlX25hbWUiCisrZG93bmxvYWRfb25lICIkbWVyZ2VfcmVwby8kbWVyZ2VfbmFtZSIgIiRHSVRfRElSIi9NRVJHRV9IRUFECisrCisrZWNobyAiR2V0dGluZyBvYmplY3QgZGF0YWJhc2UiCisrZG93bmxvYWRfb2JqZWN0cyAiJG1lcmdlX3JlcG8iICIkKGNhdCAiJEdJVF9ESVIiL01FUkdFX0hFQUQpIgorZGlmZiBhL2dpdC1wdWxsLXNjcmlwdCBiL2dpdC1wdWxsLXNjcmlwdAorLS0tIGEvZ2l0LXB1bGwtc2NyaXB0CisrKysgYi9naXQtcHVsbC1zY3JpcHQKK0BAIC02LDM5ICs2LDcgQEAgbWVyZ2VfbmFtZT0kezI6LUhFQUR9CisgOiAke0dJVF9ESVI9LmdpdH0KKyA6ICR7R0lUX09CSkVDVF9ESVJFQ1RPUlk9IiR7U0hBMV9GSUxFX0RJUkVDVE9SWS0iJEdJVF9ESVIvb2JqZWN0cyJ9In0KKyAKKy1kb3dubG9hZF9vbmUgKCkgeworLQkjIHJlbW90ZV9wYXRoPSIkMSIgbG9jYWxfZmlsZT0iJDIiCistCWNhc2UgIiQxIiBpbgorLQlodHRwOi8vKikKKy0JCXdnZXQgLXEgLU8gIiQyIiAiJDEiIDs7CistCS8qKQorLQkJdGVzdCAtZiAiJDEiICYmIGNhdCA+IiQyIiAiJDEiIDs7CistCSopCistCQlyc3luYyAtTCAiJDEiICIkMiIgOzsKKy0JZXNhYworLX0KKy0KKy1kb3dubG9hZF9vYmplY3RzICgpIHsKKy0JIyByZW1vdGVfcmVwbz0iJDEiIGhlYWRfc2hhMT0iJDIiCistCWNhc2UgIiQxIiBpbgorLQlodHRwOi8vKikKKy0JCWdpdC1odHRwLXB1bGwgLWEgIiQyIiAiJDEvIgorLQkJOzsKKy0JLyopCistCQlnaXQtbG9jYWwtcHVsbCAtbCAtYSAiJDIiICIkMS8iCistCQk7OworLQkqKQorLQkJcnN5bmMgLWF2eiAtLWlnbm9yZS1leGlzdGluZyBcCistCQkJIiQxL29iamVjdHMvLiIgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWSIvLgorLQkJOzsKKy0JZXNhYworLX0KKy0KKy1lY2hvICJHZXR0aW5nIHJlbW90ZSAkbWVyZ2VfbmFtZSIKKy1kb3dubG9hZF9vbmUgIiRtZXJnZV9yZXBvLyRtZXJnZV9uYW1lIiAiJEdJVF9ESVIiL01FUkdFX0hFQUQKKy0KKy1lY2hvICJHZXR0aW5nIG9iamVjdCBkYXRhYmFzZSIKKy1kb3dubG9hZF9vYmplY3RzICIkbWVyZ2VfcmVwbyIgIiQoY2F0ICIkR0lUX0RJUiIvTUVSR0VfSEVBRCkiCisrZ2l0LWZldGNoLXNjcmlwdCAiJG1lcmdlX3JlcG8iICIkbWVyZ2VfbmFtZSIKKyAKKyBnaXQtcmVzb2x2ZS1zY3JpcHQgXAorIAkiJChjYXQgIiRHSVRfRElSIi9IRUFEKSIgXApkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTcuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTcuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyODMxNjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNy5leHBlY3QKQEAgLTAsMCArMSw2IEBACisgRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQgfCAgIDIwICstCisgbHMtdHJlZS5jICAgICAgICAgICAgICAgICAgICAgfCAgMzMzICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoICAgfCAgICAzIAorIHRyZWUuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAKKyB0cmVlLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgCisgNSBmaWxlcyBjaGFuZ2VkLCAxOTkgaW5zZXJ0aW9ucygrKSwgMTYwIGRlbGV0aW9ucygtKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTcucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTI0MzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTcucGF0Y2gKQEAgLTAsMCArMSw0OTQgQEAKK2RpZmYgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKK0BAIC00LDIzICs0LDI2IEBAIHYwLjEsIE1heSAyMDA1CisgCisgTkFNRQorIC0tLS0KKy1naXQtbHMtdHJlZSAtIERpc3BsYXlzIGEgdHJlZSBvYmplY3QgaW4gaHVtYW4gcmVhZGFibGUgZm9ybQorK2dpdC1scy10cmVlIC0gTGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QuCisgCisgCisgU1lOT1BTSVMKKyAtLS0tLS0tLQorLSdnaXQtbHMtdHJlZScgWy1yXSBbLXpdIDx0cmVlLWlzaD4gW3BhdGhzLi4uXQorKydnaXQtbHMtdHJlZScgWy1kXSBbLXJdIFstel0gPHRyZWUtaXNoPiBbcGF0aHMuLi5dCisgCisgREVTQ1JJUFRJT04KKyAtLS0tLS0tLS0tLQorLUNvbnZlcnRzIHRoZSB0cmVlIG9iamVjdCB0byBhIGh1bWFuIHJlYWRhYmxlIChhbmQgc2NyaXB0IHByb2Nlc3NhYmxlKQorLWZvcm0uCisrTGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QsIGxpa2Ugd2hhdCAiL2Jpbi9scyAtYSIgZG9lcworK2luIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorIAorIE9QVElPTlMKKyAtLS0tLS0tCisgPHRyZWUtaXNoPjo6CisgCUlkIG9mIGEgdHJlZS4KKyAKKystZDo6CisrCXNob3cgb25seSB0aGUgbmFtZWQgdHJlZSBlbnRyeSBpdHNlbGYsIG5vdCBpdHMgY2hpbGRyZW4KKysKKyAtcjo6CisgCXJlY3Vyc2UgaW50byBzdWItdHJlZXMKKyAKK0BAIC0yOCwxOCArMzEsMTkgQEAgT1BUSU9OUworIAlcMCBsaW5lIHRlcm1pbmF0aW9uIG9uIG91dHB1dAorIAorIHBhdGhzOjoKKy0JT3B0aW9uYWxseSwgcmVzdHJpY3QgdGhlIG91dHB1dCBvZiBnaXQtbHMtdHJlZSB0byBzcGVjaWZpYworLQlwYXRocy4gRGlyZWN0b3JpZXMgd2lsbCBvbmx5IGxpc3QgdGhlaXIgdHJlZSBibG9iIGlkcy4KKy0JSW1wbGllcyAtci4KKysJV2hlbiBwYXRocyBhcmUgZ2l2ZW4sIHNob3dzIHRoZW0uICBPdGhlcndpc2UgaW1wbGljaXRseQorKwl1c2VzIHRoZSByb290IGxldmVsIG9mIHRoZSB0cmVlIGFzIHRoZSBzb2xlIHBhdGggYXJndW1lbnQuCisrCisgCisgT3V0cHV0IEZvcm1hdAorIC0tLS0tLS0tLS0tLS0KKy0gICAgICAgIDxtb2RlPlx0CTx0eXBlPlx0CTxvYmplY3Q+XHQJPGZpbGU+CisrICAgICAgICA8bW9kZT4gU1AgPHR5cGU+IFNQIDxvYmplY3Q+IFRBQiA8ZmlsZT4KKyAKKyAKKyBBdXRob3IKKyAtLS0tLS0KKyBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKytDb21wbGV0ZWx5IHJld3JpdHRlbiBmcm9tIHNjcmF0Y2ggYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorIAorIERvY3VtZW50YXRpb24KKyAtLS0tLS0tLS0tLS0tLQorZGlmZiBhL2xzLXRyZWUuYyBiL2xzLXRyZWUuYworLS0tIGEvbHMtdHJlZS5jCisrKysgYi9scy10cmVlLmMKK0BAIC00LDE4OCArNCwyMTcgQEAKKyAgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgICovCisgI2luY2x1ZGUgImNhY2hlLmgiCisrI2luY2x1ZGUgImJsb2IuaCIKKysjaW5jbHVkZSAidHJlZS5oIgorIAorIHN0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7Cistc3RhdGljIGludCByZWN1cnNpdmUgPSAwOworKyNkZWZpbmUgTFNfUkVDVVJTSVZFIDEKKysjZGVmaW5lIExTX1RSRUVfT05MWSAyCisrc3RhdGljIGludCBsc19vcHRpb25zID0gMDsKKyAKKy1zdHJ1Y3QgcGF0aF9wcmVmaXggeworLQlzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZXY7CistCWNvbnN0IGNoYXIgKm5hbWU7CistfTsKKy0KKy0jZGVmaW5lIERFQlVHKGZtdCwgLi4uKQkKKy0KKy1zdGF0aWMgaW50IHN0cmluZ19wYXRoX3ByZWZpeChjaGFyICpidWZmLCBzaXplX3QgYmxlbiwgc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgpCisteworLQlpbnQgbGVuID0gMDsKKy0JaWYgKHByZWZpeCkgeworLQkJaWYgKHByZWZpeC0+cHJldikgeworLQkJCWxlbiA9IHN0cmluZ19wYXRoX3ByZWZpeChidWZmLGJsZW4scHJlZml4LT5wcmV2KTsKKy0JCQlidWZmICs9IGxlbjsKKy0JCQlibGVuIC09IGxlbjsKKy0JCQlpZiAoYmxlbiA+IDApIHsKKy0JCQkJKmJ1ZmYgPSAnLyc7CistCQkJCWxlbisrOworLQkJCQlidWZmKys7CistCQkJCWJsZW4tLTsKKy0JCQl9CistCQl9CistCQlzdHJuY3B5KGJ1ZmYscHJlZml4LT5uYW1lLGJsZW4pOworLQkJcmV0dXJuIGxlbiArIHN0cmxlbihwcmVmaXgtPm5hbWUpOworLQl9Cisrc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3Qgcm9vdF9lbnRyeTsKKyAKKy0JcmV0dXJuIDA7Cisrc3RhdGljIHZvaWQgcHJlcGFyZV9yb290KHVuc2lnbmVkIGNoYXIgKnNoYTEpCisreworKwl1bnNpZ25lZCBjaGFyIHJzaGFbMjBdOworKwl1bnNpZ25lZCBsb25nIHNpemU7CisrCXZvaWQgKmJ1ZjsKKysJc3RydWN0IHRyZWUgKnJvb3RfdHJlZTsKKysKKysJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgInRyZWUiLCAmc2l6ZSwgcnNoYSk7CisrCWZyZWUoYnVmKTsKKysJaWYgKCFidWYpCisrCQlkaWUoIkNvdWxkIG5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworKworKwlyb290X3RyZWUgPSBsb29rdXBfdHJlZShyc2hhKTsKKysJaWYgKCFyb290X3RyZWUpCisrCQlkaWUoIkNvdWxkIG5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworKworKwkvKiBQcmVwYXJlIGEgZmFrZSBlbnRyeSAqLworKwlyb290X2VudHJ5LmRpcmVjdG9yeSA9IDE7CisrCXJvb3RfZW50cnkuZXhlY3V0YWJsZSA9IHJvb3RfZW50cnkuc3ltbGluayA9IDA7CisrCXJvb3RfZW50cnkubW9kZSA9IFNfSUZESVI7CisrCXJvb3RfZW50cnkubmFtZSA9ICIiOworKwlyb290X2VudHJ5Lml0ZW0udHJlZSA9IHJvb3RfdHJlZTsKKysJcm9vdF9lbnRyeS5wYXJlbnQgPSBOVUxMOworIH0KKyAKKy1zdGF0aWMgdm9pZCBwcmludF9wYXRoX3ByZWZpeChzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKytzdGF0aWMgaW50IHByZXBhcmVfY2hpbGRyZW4oc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZWxlbSkKKyB7CistCWlmIChwcmVmaXgpIHsKKy0JCWlmIChwcmVmaXgtPnByZXYpIHsKKy0JCQlwcmludF9wYXRoX3ByZWZpeChwcmVmaXgtPnByZXYpOworLQkJCXB1dGNoYXIoJy8nKTsKKy0JCX0KKy0JCWZwdXRzKHByZWZpeC0+bmFtZSwgc3Rkb3V0KTsKKysJaWYgKCFlbGVtLT5kaXJlY3RvcnkpCisrCQlyZXR1cm4gLTE7CisrCWlmICghZWxlbS0+aXRlbS50cmVlLT5vYmplY3QucGFyc2VkKSB7CisrCQlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplOworKwkJaWYgKHBhcnNlX3RyZWUoZWxlbS0+aXRlbS50cmVlKSkKKysJCQlyZXR1cm4gLTE7CisrCQkvKiBTZXQgdXAgdGhlIHBhcmVudCBsaW5rICovCisrCQlmb3IgKGUgPSBlbGVtLT5pdGVtLnRyZWUtPmVudHJpZXM7IGU7IGUgPSBlLT5uZXh0KQorKwkJCWUtPnBhcmVudCA9IGVsZW07CisgCX0KKysJcmV0dXJuIDA7CisgfQorIAorLS8qCistICogcmV0dXJuOgorLSAqIAktMSBpZiBwcmVmaXggaXMgKm5vdCogYSBzdWJzZXQgb2YgcGF0aAorLSAqIAkgMCBpZiBwcmVmaXggPT0gcGF0aAorLSAqIAkgMSBpZiBwcmVmaXggaXMgYSBzdWJzZXQgb2YgcGF0aAorLSAqLworLXN0YXRpYyBpbnQgcGF0aGNtcChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKy17CistCWNoYXIgYnVmZltQQVRIX01BWF07CistCWludCBsZW4sc2xlbjsKKytzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZmluZF9lbnRyeV8wKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmVsZW0sCisrCQkJCQkgICAgY29uc3QgY2hhciAqcGF0aCwKKysJCQkJCSAgICBjb25zdCBjaGFyICpwYXRoX2VuZCkKKyt7CisrCWNvbnN0IGNoYXIgKmVwOworKwlpbnQgbGVuOworKworKwl3aGlsZSAocGF0aCA8IHBhdGhfZW5kKSB7CisrCQlpZiAocHJlcGFyZV9jaGlsZHJlbihlbGVtKSkKKysJCQlyZXR1cm4gTlVMTDsKKyAKKy0JaWYgKHByZWZpeCA9PSBOVUxMKQorLQkJcmV0dXJuIDE7CisrCQkvKiBJbiBlbGVtLT50cmVlLT5lbnRyaWVzLCBmaW5kIHRoZSBvbmUgdGhhdCBoYXMgbmFtZQorKwkJICogdGhhdCBtYXRjaGVzIHdoYXQgaXMgYmV0d2VlbiBwYXRoIGFuZCBlcC4KKysJCSAqLworKwkJZWxlbSA9IGVsZW0tPml0ZW0udHJlZS0+ZW50cmllczsKKyAKKy0JbGVuID0gc3RyaW5nX3BhdGhfcHJlZml4KGJ1ZmYsIHNpemVvZiBidWZmLCBwcmVmaXgpOworLQlzbGVuID0gc3RybGVuKHBhdGgpOworKwkJZXAgPSBzdHJjaHIocGF0aCwgJy8nKTsKKysJCWlmICghZXAgfHwgcGF0aF9lbmQgPD0gZXApCisrCQkJZXAgPSBwYXRoX2VuZDsKKysJCWxlbiA9IGVwIC0gcGF0aDsKKysKKysJCXdoaWxlIChlbGVtKSB7CisrCQkJaWYgKChzdHJsZW4oZWxlbS0+bmFtZSkgPT0gbGVuKSAmJgorKwkJCSAgICAhc3RybmNtcChlbGVtLT5uYW1lLCBwYXRoLCBsZW4pKQorKwkJCQlicmVhazsKKysJCQllbGVtID0gZWxlbS0+bmV4dDsKKysJCX0KKysJCWlmIChwYXRoX2VuZCA8PSBlcCB8fCAhZWxlbSkKKysJCQlyZXR1cm4gZWxlbTsKKysJCXdoaWxlICgqZXAgPT0gJy8nICYmIGVwIDwgcGF0aF9lbmQpCisrCQkJZXArKzsKKysJCXBhdGggPSBlcDsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9CisgCistCWlmIChzbGVuIDwgbGVuKQorLQkJcmV0dXJuIC0xOworK3N0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICpmaW5kX2VudHJ5KGNvbnN0IGNoYXIgKnBhdGgsCisrCQkJCQkgIGNvbnN0IGNoYXIgKnBhdGhfZW5kKQorK3sKKysJLyogRmluZCB0cmVlIGVsZW1lbnQsIGRlc2NlbmRpbmcgZnJvbSByb290LCB0aGF0CisrCSAqIGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1lZCBwYXRoLCBsYXppbHkgZXhwYW5kaW5nCisrCSAqIHRoZSB0cmVlIGlmIHBvc3NpYmxlLgorKwkgKi8KKysJaWYgKHBhdGggPT0gcGF0aF9lbmQpIHsKKysJCS8qIFNwZWNpYWwuICBUaGlzIGlzIHRoZSByb290IGxldmVsICovCisrCQlyZXR1cm4gJnJvb3RfZW50cnk7CisrCX0KKysJcmV0dXJuIGZpbmRfZW50cnlfMCgmcm9vdF9lbnRyeSwgcGF0aCwgcGF0aF9lbmQpOworK30KKyAKKy0JaWYgKHN0cm5jbXAocGF0aCxidWZmLGxlbikgPT0gMCkgeworLQkJaWYgKHNsZW4gPT0gbGVuKQorLQkJCXJldHVybiAwOworLQkJZWxzZQorLQkJCXJldHVybiAxOworK3N0YXRpYyB2b2lkIHNob3dfZW50cnlfbmFtZShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQorK3sKKysJLyogVGhpcyBpcyB5dWNreS4gIFRoZSByb290IGxldmVsIGlzIHRoZXJlIGZvcgorKwkgKiBvdXIgY29udmVuaWVuY2UgYnV0IHdlIHJlYWxseSB3YW50IHRvIGRvIGEKKysJICogZm9yZXN0LgorKwkgKi8KKysJaWYgKGUtPnBhcmVudCAmJiBlLT5wYXJlbnQgIT0gJnJvb3RfZW50cnkpIHsKKysJCXNob3dfZW50cnlfbmFtZShlLT5wYXJlbnQpOworKwkJcHV0Y2hhcignLycpOworIAl9CisrCXByaW50ZigiJXMiLCBlLT5uYW1lKTsKKyt9CisgCistCXJldHVybiAtMTsKKy19CQorK3N0YXRpYyBjb25zdCBjaGFyICplbnRyeV90eXBlKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUpCisreworKwlyZXR1cm4gKGUtPmRpcmVjdG9yeSA/ICJ0cmVlIiA6ICJibG9iIik7CisrfQorIAorLS8qCistICogbWF0Y2ggbWF5IGJlIE5VTEwsIG9yIGEgKnNvcnRlZCogbGlzdCBvZiBwYXRocworLSAqLworLXN0YXRpYyB2b2lkIGxpc3RfcmVjdXJzaXZlKHZvaWQgKmJ1ZmZlciwKKy0JCQkgICBjb25zdCBjaGFyICp0eXBlLAorLQkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKy0JCQkgICBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCwKKy0JCQkgICBjaGFyICoqbWF0Y2gsIGludCBtYXRjaGVzKQorLXsKKy0Jc3RydWN0IHBhdGhfcHJlZml4IHRoaXNfcHJlZml4OworLQl0aGlzX3ByZWZpeC5wcmV2ID0gcHJlZml4OworLQorLQlpZiAoc3RyY21wKHR5cGUsICJ0cmVlIikpCistCQlkaWUoImV4cGVjdGVkIGEgJ3RyZWUnIG5vZGUiKTsKKy0KKy0JaWYgKG1hdGNoZXMpCistCQlyZWN1cnNpdmUgPSAxOworLQorLQl3aGlsZSAoc2l6ZSkgeworLQkJaW50IG5hbWVsZW4gPSBzdHJsZW4oYnVmZmVyKSsxOworLQkJdm9pZCAqZWx0YnVmID0gTlVMTDsKKy0JCWNoYXIgZWx0dHlwZVsyMF07CistCQl1bnNpZ25lZCBsb25nIGVsdHNpemU7CistCQl1bnNpZ25lZCBjaGFyICpzaGExID0gYnVmZmVyICsgbmFtZWxlbjsKKy0JCWNoYXIgKnBhdGggPSBzdHJjaHIoYnVmZmVyLCAnICcpICsgMTsKKy0JCXVuc2lnbmVkIGludCBtb2RlOworLQkJY29uc3QgY2hhciAqbWF0Y2hlZCA9IE5VTEw7CistCQlpbnQgbXR5cGUgPSAtMTsKKy0JCWludCBtaW5kZXg7CistCistCQlpZiAoc2l6ZSA8IG5hbWVsZW4gKyAyMCB8fCBzc2NhbmYoYnVmZmVyLCAiJW8iLCAmbW9kZSkgIT0gMSkKKy0JCQlkaWUoImNvcnJ1cHQgJ3RyZWUnIGZpbGUiKTsKKy0JCWJ1ZmZlciA9IHNoYTEgKyAyMDsKKy0JCXNpemUgLT0gbmFtZWxlbiArIDIwOworLQorLQkJdGhpc19wcmVmaXgubmFtZSA9IHBhdGg7CistCQlmb3IgKCBtaW5kZXggPSAwOyBtaW5kZXggPCBtYXRjaGVzOyBtaW5kZXgrKykgeworLQkJCW10eXBlID0gcGF0aGNtcChtYXRjaFttaW5kZXhdLCZ0aGlzX3ByZWZpeCk7CistCQkJaWYgKG10eXBlID49IDApIHsKKy0JCQkJbWF0Y2hlZCA9IG1hdGNoW21pbmRleF07CistCQkJCWJyZWFrOworLQkJCX0KKy0JCX0KKytzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfaGV4KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUpCisreworKwlyZXR1cm4gc2hhMV90b19oZXgoZS0+ZGlyZWN0b3J5CisrCQkJICAgPyBlLT5pdGVtLnRyZWUtPm9iamVjdC5zaGExCisrCQkJICAgOiBlLT5pdGVtLmJsb2ItPm9iamVjdC5zaGExKTsKKyt9CisgCistCQkvKgorLQkJICogSWYgd2UncmUgbm90IG1hdGNoaW5nLCBvciBpZiB0aGlzIGlzIGFuIGV4YWN0IG1hdGNoLAorLQkJICogcHJpbnQgb3V0IHRoZSBpbmZvCistCQkgKi8KKy0JCWlmICghbWF0Y2hlcyB8fCAobWF0Y2hlZCAhPSBOVUxMICYmIG10eXBlID09IDApKSB7CistCQkJcHJpbnRmKCIlMDZvICVzICVzXHQiLCBtb2RlLAorLQkJCSAgICAgICBTX0lTRElSKG1vZGUpID8gInRyZWUiIDogImJsb2IiLAorLQkJCSAgICAgICBzaGExX3RvX2hleChzaGExKSk7CistCQkJcHJpbnRfcGF0aF9wcmVmaXgoJnRoaXNfcHJlZml4KTsKKy0JCQlwdXRjaGFyKGxpbmVfdGVybWluYXRpb24pOworLQkJfQorKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIG11dHVhbGx5IHJlY3Vyc2l2ZSByb3V0aW5lcyAqLworK3N0YXRpYyBpbnQgc2hvd19lbnRyeShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICosIGludCk7CisgCistCQlpZiAoISByZWN1cnNpdmUgfHwgISBTX0lTRElSKG1vZGUpKQorLQkJCWNvbnRpbnVlOworK3N0YXRpYyBpbnQgc2hvd19jaGlsZHJlbihzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplLCBpbnQgbGV2ZWwpCisreworKwlpZiAocHJlcGFyZV9jaGlsZHJlbihlKSkKKysJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IGxzLXRyZWUgc2hvd19jaGlsZHJlbiBjYWxsZWQgd2l0aCBub24gdHJlZSIpOworKwllID0gZS0+aXRlbS50cmVlLT5lbnRyaWVzOworKwl3aGlsZSAoZSkgeworKwkJc2hvd19lbnRyeShlLCBsZXZlbCk7CisrCQllID0gZS0+bmV4dDsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisgCistCQlpZiAobWF0Y2hlcyAmJiAhIG1hdGNoZWQpCistCQkJY29udGludWU7Cisrc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUsIGludCBsZXZlbCkKKyt7CisrCWludCBlcnIgPSAwOyAKKyAKKy0JCWlmICghIChlbHRidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCBlbHR0eXBlLCAmZWx0c2l6ZSkpICkgeworLQkJCWVycm9yKCJjYW5ub3QgcmVhZCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKy0JCQljb250aW51ZTsKKy0JCX0KKysJaWYgKGUgIT0gJnJvb3RfZW50cnkpIHsKKysJCXByaW50ZigiJTA2byAlcyAlcwkiLCBlLT5tb2RlLCBlbnRyeV90eXBlKGUpLAorKwkJICAgICAgIGVudHJ5X2hleChlKSk7CisrCQlzaG93X2VudHJ5X25hbWUoZSk7CisrCQlwdXRjaGFyKGxpbmVfdGVybWluYXRpb24pOworKwl9CisgCistCQkvKiBJZiB0aGlzIGlzIGFuIGV4YWN0IGRpcmVjdG9yeSBtYXRjaCwgd2UgbWF5IGhhdmUKKy0JCSAqIGRpcmVjdG9yeSBmaWxlcyBmb2xsb3dpbmcgdGhpcyBwYXRoLiBNYXRjaCBvbiB0aGVtLgorLQkJICogT3RoZXJ3aXNlLCB3ZSdyZSBhdCBhIHBhdGNoIHN1YmNvbXBvbmVudCwgYW5kIHdlIG5lZWQKKy0JCSAqIHRvIHRyeSB0byBtYXRjaCBhZ2Fpbi4KKysJaWYgKGUtPmRpcmVjdG9yeSkgeworKwkJLyogSWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNhc2VzOgorKwkJICogKDEpIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCByZXF1ZXN0IChleHBsaWNpdCBwYXRoIGZyb20gdGhlCisrCQkgKiAgICAgY29tbWFuZCBsaW5lLCBvciAicm9vdCIgaWYgdGhlcmUgaXMgbm8gY29tbWFuZCBsaW5lKS4KKysJCSAqICBhLiBXaXRob3V0IGFueSBmbGFnLiAgV2Ugc2hvdyBkaXJlY3QgY2hpbGRyZW4uICBXZSBkbyBub3QgCisrCQkgKiAgICAgcmVjdXJzZSBpbnRvIHRoZW0uCisrCQkgKiAgYi4gV2l0aCAtci4gIFdlIGRvIHJlY3Vyc2UgaW50byBjaGlsZHJlbi4KKysJCSAqICBjLiBXaXRoIC1kLiAgV2UgZG8gbm90IHJlY3Vyc2UgaW50byBjaGlsZHJlbi4KKysJCSAqICgyKSBXZSBjYW1lIGhlcmUgYmVjYXVzZSBvdXIgY2FsbGVyIGlzIGVpdGhlciAoMS1hKSBvcgorKwkJICogICAgICgxLWIpLgorKwkJICogIGEuIFdpdGhvdXQgYW55IGZsYWcuICBXZSBkbyBub3Qgc2hvdyBvdXIgY2hpbGRyZW4gKHdoaWNoCisrCQkgKiAgICAgYXJlIGdyYW5kY2hpbGRyZW4gZm9yIHRoZSBvcmlnaW5hbCByZXF1ZXN0KS4KKysJCSAqICBiLiBXaXRoIC1yLiAgV2UgY29udGludWUgdG8gcmVjdXJzZSBpbnRvIG91ciBjaGlsZHJlbi4KKysJCSAqICBjLiBXaXRoIC1kLiAgV2Ugc2hvdWxkIG5vdCBoYXZlIGNvbWUgaGVyZSB0byBiZWdpbiB3aXRoLgorIAkJICovCistCQlpZiAobXR5cGUgPT0gMCkKKy0JCQltaW5kZXgrKzsKKy0KKy0JCWxpc3RfcmVjdXJzaXZlKGVsdGJ1ZiwgZWx0dHlwZSwgZWx0c2l6ZSwgJnRoaXNfcHJlZml4LCAmbWF0Y2hbbWluZGV4XSwgbWF0Y2hlcy1taW5kZXgpOworLQkJZnJlZShlbHRidWYpOworKwkJaWYgKGxldmVsID09IDAgJiYgIShsc19vcHRpb25zICYgTFNfVFJFRV9PTkxZKSkKKysJCQkvKiBjYXNlICgxKS1hIGFuZCAoMSktYiAqLworKwkJCWVyciA9IGVyciB8IHNob3dfY2hpbGRyZW4oZSwgbGV2ZWwrMSk7CisrCQllbHNlIGlmIChsZXZlbCAmJiBsc19vcHRpb25zICYgTFNfUkVDVVJTSVZFKQorKwkJCS8qIGNhc2UgKDIpLWIgKi8KKysJCQllcnIgPSBlcnIgfCBzaG93X2NoaWxkcmVuKGUsIGxldmVsKzEpOworIAl9CisrCXJldHVybiBlcnI7CisgfQorIAorLXN0YXRpYyBpbnQgcWNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQorK3N0YXRpYyBpbnQgbGlzdF9vbmUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGF0aF9lbmQpCisgeworLQlyZXR1cm4gc3RyY21wKCooY2hhciAqKilhLCAqKGNoYXIgKiopYik7CisrCWludCBlcnIgPSAwOworKwlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplID0gZmluZF9lbnRyeShwYXRoLCBwYXRoX2VuZCk7CisrCWlmICghZSkgeworKwkJLyogdHJhZGl0aW9uYWxseSBscy10cmVlIGRvZXMgbm90IGNvbXBsYWluIGFib3V0CisrCQkgKiBtaXNzaW5nIHBhdGguICBXZSBtYXkgY2hhbmdlIHRoaXMgbGF0ZXIgdG8gbWF0Y2gKKysJCSAqIHdoYXQgIi9iaW4vbHMgLWEiIGRvZXMsIHdoaWNoIGlzIHRvIGNvbXBsYWluLgorKwkJICovCisrCQlyZXR1cm4gZXJyOworKwl9CisrCWVyciA9IGVyciB8IHNob3dfZW50cnkoZSwgMCk7CisrCXJldHVybiBlcnI7CisgfQorIAorLXN0YXRpYyBpbnQgbGlzdCh1bnNpZ25lZCBjaGFyICpzaGExLGNoYXIgKipwYXRoKQorK3N0YXRpYyBpbnQgbGlzdChjaGFyICoqcGF0aCkKKyB7CistCXZvaWQgKmJ1ZmZlcjsKKy0JdW5zaWduZWQgbG9uZyBzaXplOworLQlpbnQgbnBhdGhzOworLQorLQlmb3IgKG5wYXRocyA9IDA7IHBhdGhbbnBhdGhzXSAhPSBOVUxMOyBucGF0aHMrKykKKy0JCTsKKy0KKy0JcXNvcnQocGF0aCxucGF0aHMsc2l6ZW9mKGNoYXIgKikscWNtcCk7CistCistCWJ1ZmZlciA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsICJ0cmVlIiwgJnNpemUsIE5VTEwpOworLQlpZiAoIWJ1ZmZlcikKKy0JCWRpZSgidW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIik7CistCWxpc3RfcmVjdXJzaXZlKGJ1ZmZlciwgInRyZWUiLCBzaXplLCBOVUxMLCBwYXRoLCBucGF0aHMpOworLQlmcmVlKGJ1ZmZlcik7CistCXJldHVybiAwOworKwlpbnQgaTsKKysJaW50IGVyciA9IDA7CisrCWZvciAoaSA9IDA7IHBhdGhbaV07IGkrKykgeworKwkJaW50IGxlbiA9IHN0cmxlbihwYXRoW2ldKTsKKysJCXdoaWxlICgwIDw9IGxlbiAmJiBwYXRoW2ldW2xlbl0gPT0gJy8nKQorKwkJCWxlbi0tOworKwkJZXJyID0gZXJyIHwgbGlzdF9vbmUocGF0aFtpXSwgcGF0aFtpXSArIGxlbik7CisrCX0KKysJcmV0dXJuIGVycjsKKyB9CisgCistc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfdXNhZ2UgPSAiZ2l0LWxzLXRyZWUgWy1yXSBbLXpdIDxrZXk+IFtwYXRocy4uLl0iOworK3N0YXRpYyBjb25zdCBjaGFyICpsc190cmVlX3VzYWdlID0KKysJImdpdC1scy10cmVlIFstZF0gWy1yXSBbLXpdIDx0cmVlLWlzaD4gW3BhdGguLi5dIjsKKyAKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworKwlzdGF0aWMgY2hhciAqcGF0aDBbXSA9IHsgIiIsIE5VTEwgfTsKKysJY2hhciAqKnBhdGg7CisgCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisgCisgCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworQEAgLTE5NCw3ICsyMjMsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCWxpbmVfdGVybWluYXRpb24gPSAwOworIAkJCWJyZWFrOworIAkJY2FzZSAncic6CistCQkJcmVjdXJzaXZlID0gMTsKKysJCQlsc19vcHRpb25zIHw9IExTX1JFQ1VSU0lWRTsKKysJCQlicmVhazsKKysJCWNhc2UgJ2QnOgorKwkJCWxzX29wdGlvbnMgfD0gTFNfVFJFRV9PTkxZOworIAkJCWJyZWFrOworIAkJZGVmYXVsdDoKKyAJCQl1c2FnZShsc190cmVlX3VzYWdlKTsKK0BAIC0yMDYsNyArMjM4LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworIAlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2hhMSkgPCAwKQorIAkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CistCWlmIChsaXN0KHNoYTEsICZhcmd2WzJdKSA8IDApCisrCisrCXBhdGggPSAoYXJnYyA9PSAyKSA/IHBhdGgwIDogKGFyZ3YgKyAyKTsKKysJcHJlcGFyZV9yb290KHNoYTEpOworKwlpZiAobGlzdChwYXRoKSA8IDApCisgCQlkaWUoImxpc3QgZmFpbGVkIik7CisgCXJldHVybiAwOworIH0KK2RpZmYgYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKKy0tLSBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCitAQCAtNzQsOCArNzQsOCBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgJ2xzLXRyZWUgZmlsdGVyZWQnIFwKKyAgICAgJ2dpdC1scy10cmVlICR0cmVlIHBhdGgxIHBhdGgwID5jdXJyZW50ICYmCisgICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorLTEwMDY0NCBibG9iIFgJcGF0aDAKKyAxMjAwMDAgYmxvYiBYCXBhdGgxCisrMTAwNjQ0IGJsb2IgWAlwYXRoMAorIEVPRgorICAgICAgdGVzdF9vdXRwdXQnCisgCitAQCAtODUsNyArODUsNiBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgMDQwMDAwIHRyZWUgWAlwYXRoMgorIDA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CistMTAwNjQ0IGJsb2IgWAlwYXRoMi9iYXovYgorIDEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KKyAxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbworIEVPRgorZGlmZiBhL3RyZWUuYyBiL3RyZWUuYworLS0tIGEvdHJlZS5jCisrKysgYi90cmVlLmMKK0BAIC0xMzMsNyArMTMzLDcgQEAgaW50IHBhcnNlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICppdGVtLAorIAkJfQorIAkJaWYgKG9iaikKKyAJCQlhZGRfcmVmKCZpdGVtLT5vYmplY3QsIG9iaik7CistCisrCQllbnRyeS0+cGFyZW50ID0gTlVMTDsgLyogbmVlZHMgdG8gYmUgZmlsbGVkIGJ5IHRoZSB1c2VyICovCisgCQkqbGlzdF9wID0gZW50cnk7CisgCQlsaXN0X3AgPSAmZW50cnktPm5leHQ7CisgCX0KK2RpZmYgYS90cmVlLmggYi90cmVlLmgKKy0tLSBhL3RyZWUuaAorKysrIGIvdHJlZS5oCitAQCAtMTYsNiArMTYsNyBAQCBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0IHsKKyAJCXN0cnVjdCB0cmVlICp0cmVlOworIAkJc3RydWN0IGJsb2IgKmJsb2I7CisgCX0gaXRlbTsKKysJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqcGFyZW50OworIH07CisgCisgc3RydWN0IHRyZWUgewpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTguZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTguZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTU1YzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktOC5leHBlY3QKQEAgLTAsMCArMSwyIEBACisgdC90NDEwMC1hcHBseS1zdGF0LnNoIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTgucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ExM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTgucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtLWdpdCBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaCBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaAoraW5kZXggYmU4MzdiYi4uMDc5OGM2NCAxMDA3NTUKKy0tLSBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaAorKysrIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCitAQCAtMzUsNCArMzUsNCBAQCBub24gZ2l0ICgyKQorIG5vbiBnaXQgKDMpCisgRU9GCisgCistdGVzdF9kb25lCisrdGVzdF9kb25lCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS05LmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS05LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWE1NWMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTkuZXhwZWN0CkBAIC0wLDAgKzEsMiBAQAorIHQvdDQxMDAtYXBwbHktc3RhdC5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS05LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1ZDU3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS05LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLS1naXQgYS90L3Q0MTAwLWFwcGx5LXN0YXQuc2ggYi90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKK2luZGV4IDA3OThjNjQuLmJlODM3YmIgMTAwNzU1CistLS0gYS90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKKysrKyBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaAorQEAgLTM1LDQgKzM1LDQgQEAgbm9uIGdpdCAoMikKKyBub24gZ2l0ICgzKQorIEVPRgorIAorLXRlc3RfZG9uZQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTAxLWFwcGx5LW5vbmwuc2ggYi90L3Q0MTAxLWFwcGx5LW5vbmwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM0NDNkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEtYXBwbHktbm9ubC5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBzaG91bGQgaGFuZGxlIGZpbGVzIHdpdGggaW5jb21wbGV0ZSBsaW5lcy4KKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0dXAKKworKGVjaG8gYTsgZWNobyBiKSA+ZnJvdHouMAorKGVjaG8gYTsgZWNobyBiOyBlY2hvIGMpID5mcm90ei4xCisoZWNobyBhOyBlY2hvIGIgfCB0ciAtZCAnXDAxMicpID5mcm90ei4yCisoZWNobyBhOyBlY2hvIGM7IGVjaG8gYiB8IHRyIC1kICdcMDEyJykgPmZyb3R6LjMKKworZm9yIGkgaW4gMCAxIDIgMworZG8KKyAgZm9yIGogaW4gMCAxIDIgMworICBkbworICAgIHRlc3QgJGkgLWVxICRqICYmIGNvbnRpbnVlCisgICAgY2F0IGZyb3R6LiRpID5mcm90egorICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFwcGx5IGRpZmYgYmV0d2VlbiAkaSBhbmQgJGoiICcKKwlnaXQgYXBwbHkgPCIkVEVTVF9ESVJFQ1RPUlkiL3Q0MTAxL2RpZmYuJGktJGogJiYKKwl0ZXN0X2NtcCBmcm90ei4kaiBmcm90egorICAgICcKKyAgZG9uZQorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4wLTEgYi90L3Q0MTAxL2RpZmYuMC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTBhODgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMC0xCkBAIC0wLDAgKzEsNiBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwyICsxLDMgQEAKKyBhCisgYgorK2MKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4wLTIgYi90L3Q0MTAxL2RpZmYuMC0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDYwYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMC0yCkBAIC0wLDAgKzEsNyBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwyICsxLDIgQEAKKyBhCistYgorK2IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjAtMyBiL3QvdDQxMDEvZGlmZi4wLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4MWM0MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4wLTMKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDIgKzEsMyBAQAorIGEKKy1iCisrYworK2IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjEtMCBiL3QvdDQxMDEvZGlmZi4xLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhMmU5MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4xLTAKQEAgLTAsMCArMSw2IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMiBAQAorIGEKKyBiCistYwpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjEtMiBiL3QvdDQxMDEvZGlmZi4xLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0NDBhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4xLTIKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMiBAQAorIGEKKy1iCistYworK2IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjEtMyBiL3QvdDQxMDEvZGlmZi4xLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhZmY5NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4xLTMKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDMgKzEsMyBAQAorIGEKKy1iCisgYworK2IKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjItMCBiL3QvdDQxMDEvZGlmZi4yLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlNzFlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4yLTAKQEAgLTAsMCArMSw3IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDIgKzEsMiBAQAorIGEKKy1iCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKytiCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMi0xIGIvdC90NDEwMS9kaWZmLjItMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjZkOWZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjItMQpAQCAtMCwwICsxLDggQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMiArMSwzIEBACisgYQorLWIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2IKKytjCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMi0zIGIvdC90NDEwMS9kaWZmLjItMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjMzYzgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjItMwpAQCAtMCwwICsxLDcgQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMiArMSwzIEBACisgYQorK2MKKyBiCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4zLTAgYi90L3Q0MTAxL2RpZmYuMy0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYjFhNDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMy0wCkBAIC0wLDAgKzEsOCBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDIgQEAKKyBhCistYworLWIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2IKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4zLTEgYi90L3Q0MTAxL2RpZmYuMy0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTljNjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMy0xCkBAIC0wLDAgKzEsOCBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDMgQEAKKyBhCisrYgorIGMKKy1iCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4zLTIgYi90L3Q0MTAxL2RpZmYuMy0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDFiYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMy0yCkBAIC0wLDAgKzEsNyBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDIgQEAKKyBhCistYworIGIKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdC90NDEwMi1hcHBseS1yZW5hbWUuc2ggYi90L3Q0MTAyLWFwcGx5LXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYWUzMDU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaGFuZGxpbmcgY29weS9yZW5hbWUgcGF0Y2guCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIHNldHVwCisKK2NhdCA+dGVzdC1wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9mb28gYi9iYXIKK3NpbWlsYXJpdHkgaW5kZXggNDclCityZW5hbWUgZnJvbSBmb28KK3JlbmFtZSB0byBiYXIKKy0tLSBhL2ZvbworKysrIGIvYmFyCitAQCAtMSArMSBAQAorLVRoaXMgaXMgZm9vCisrVGhpcyBpcyBiYXIKK0VPRgorCitlY2hvICdUaGlzIGlzIGZvbycgPmZvbworY2htb2QgK3ggZm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBhcHBseSBcCisgICAgJ2dpdCBhcHBseSAtLWluZGV4IC0tc3RhdCAtLXN1bW1hcnkgLS1hcHBseSB0ZXN0LXBhdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFIHZhbGlkYXRlIFwKKwkgICAgJ3Rlc3QgLWYgYmFyICYmIGxzIC1sIGJhciB8IGdyZXAgIl4tLi54Li4uLi4uIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcmV2ZXJzZScgXAorICAgICdnaXQgYXBwbHkgLVIgLS1pbmRleCAtLXN0YXQgLS1zdW1tYXJ5IC0tYXBwbHkgdGVzdC1wYXRjaCAmJgorICAgICB0ZXN0ICIkKGNhdCBmb28pIiA9ICJUaGlzIGlzIGZvbyInCisKK2NhdCA+dGVzdC1wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9mb28gYi9iYXIKK3NpbWlsYXJpdHkgaW5kZXggNDclCitjb3B5IGZyb20gZm9vCitjb3B5IHRvIGJhcgorLS0tIGEvZm9vCisrKysgYi9iYXIKK0BAIC0xICsxIEBACistVGhpcyBpcyBmb28KKytUaGlzIGlzIGJhcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGNvcHknIFwKKyAgICAnZ2l0IGFwcGx5IC0taW5kZXggLS1zdGF0IC0tc3VtbWFyeSAtLWFwcGx5IHRlc3QtcGF0Y2ggJiYKKyAgICAgdGVzdCAiJChjYXQgYmFyKSIgPSAiVGhpcyBpcyBiYXIiICYmIHRlc3QgIiQoY2F0IGZvbykiID0gIlRoaXMgaXMgZm9vIicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTAzLWFwcGx5LWJpbmFyeS5zaCBiL3QvdDQxMDMtYXBwbHktYmluYXJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiNDIwZTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAzLWFwcGx5LWJpbmFyeS5zaApAQCAtMCwwICsxLDE1OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaGFuZGxpbmcgYmluYXJ5IHBhdGNoZXMKKworJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID5maWxlMSA8PC1cRU9GICYmCisJQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuCisJQSB0aW55IGxpdHRsZSBwZW5ndWluIHJ1bnMgYXJvdW5kIGluIGNpcmNsZXMuCisJVGhlcmUgaXMgYSBmbGFnIHdpdGggTGludXggd3JpdHRlbiBvbiBpdC4KKwlBIHNsb3cgYmxhY2stYW5kLXdoaXRlIHBhbmRhIGp1c3Qgc2l0cyB0aGVyZSwKKwltdW5jaGluZyBvbiBoaXMgYmFtYm9vLgorCUVPRgorCWNhdCBmaWxlMSA+ZmlsZTIgJiYKKwljYXQgZmlsZTEgPmZpbGU0ICYmCisKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZpbGUxIGZpbGUyIGZpbGU0ICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBWZXJzaW9uIiAyPi9kZXYvbnVsbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJpbmFyeSAmJgorCXBlcmwgLXBlICJ5L3gvXDAwMC8iIDxmaWxlMSA+ZmlsZTMgJiYKKwljYXQgZmlsZTMgPmZpbGU0ICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXBlcmwgLXBlICJ5L1wwMDAvdi8iIDxmaWxlMyA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgZmlsZTEgZmlsZTIgZmlsZTMgZmlsZTQgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQgVmVyc2lvbiIgJiYKKworCWdpdCBkaWZmLXRyZWUgLXAgbWFzdGVyIGJpbmFyeSA+Qi5kaWZmICYmCisJZ2l0IGRpZmYtdHJlZSAtcCAtQyBtYXN0ZXIgYmluYXJ5ID5DLmRpZmYgJiYKKworCWdpdCBkaWZmLXRyZWUgLXAgLS1iaW5hcnkgbWFzdGVyIGJpbmFyeSA+QkYuZGlmZiAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLS1iaW5hcnkgLUMgbWFzdGVyIGJpbmFyeSA+Q0YuZGlmZiAmJgorCisJZ2l0IGRpZmYtdHJlZSAtcCAtLWZ1bGwtaW5kZXggbWFzdGVyIGJpbmFyeSA+Qi1pbmRleC5kaWZmICYmCisJZ2l0IGRpZmYtdHJlZSAtcCAtQyAtLWZ1bGwtaW5kZXggbWFzdGVyIGJpbmFyeSA+Qy1pbmRleC5kaWZmICYmCisKKwlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IC0tbm8tcHJlZml4IG1hc3RlciBiaW5hcnkgLS0gZmlsZTMgPkIwLmRpZmYgJiYKKworCWdpdCBpbml0IG90aGVyLXJlcG8gJiYKKwkoCisJCWNkIG90aGVyLXJlcG8gJiYKKwkJZ2l0IGZldGNoIC4uIG1hc3RlciAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXQgYmluYXJ5IGRpZmYgLS0gc2hvdWxkIG5vdCBmYWlsLicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IEIuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdCBiaW5hcnkgLXAwIGRpZmYgLS0gc2hvdWxkIG5vdCBmYWlsLicgJworCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBhcHBseSAtLXN0YXQgLXAwIEIwLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdCBiaW5hcnkgZGlmZiAoY29weSkgLS0gc2hvdWxkIG5vdCBmYWlsLicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IEMuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYmluYXJ5IGRpZmYgLS0gc2hvdWxkIGZhaWwuJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgQi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBiaW5hcnkgZGlmZiAoY29weSkgLS0gc2hvdWxkIGZhaWwuJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgQy5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hlY2sgaW5jb21wbGV0ZSBiaW5hcnkgZGlmZiB3aXRoIHJlcGxhY2VtZW50IC0tIHNob3VsZCBmYWlsLicgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jaGVjayAtLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCBCLmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIGluY29tcGxldGUgYmluYXJ5IGRpZmYgd2l0aCByZXBsYWNlbWVudCAoY29weSkgLS0gc2hvdWxkIGZhaWwuJyAnCisJIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgQy5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGJpbmFyeSBkaWZmIHdpdGggcmVwbGFjZW1lbnQuJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IGFwcGx5IC0tY2hlY2sgLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgQkYuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYmluYXJ5IGRpZmYgd2l0aCByZXBsYWNlbWVudCAoY29weSkuJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IGFwcGx5IC0tY2hlY2sgLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgQ0YuZGlmZicKKworIyBOb3cgd2Ugc3RhcnQgYXBwbHlpbmcgdGhlbS4KKworZG9fcmVzZXQgKCkgeworCXJtIC1mIGZpbGU/ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgLS0gc2hvdWxkIGZhaWwuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBCLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIC0tIHNob3VsZCBmYWlsLicgXAorCSdkb19yZXNldCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBCLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIChjb3B5KSAtLSBzaG91bGQgZmFpbC4nIFwKKwknZG9fcmVzZXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IEMuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgKGNvcHkpIC0tIHNob3VsZCBmYWlsLicgXAorCSdkb19yZXNldCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBDLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIHdpdGggZnVsbC1pbmRleCcgJworCWRvX3Jlc2V0ICYmCisJZ2l0IGFwcGx5IEItaW5kZXguZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiB3aXRoIGZ1bGwtaW5kZXggKGNvcHkpJyAnCisJZG9fcmVzZXQgJiYKKwlnaXQgYXBwbHkgQy1pbmRleC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGZ1bGwtaW5kZXggYmluYXJ5IGRpZmYgaW4gbmV3IHJlcG8nICcKKwkoY2Qgb3RoZXItcmVwbyAmJgorCSBkb19yZXNldCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLi4vQi1pbmRleC5kaWZmKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiB3aXRob3V0IHJlcGxhY2VtZW50LicgXAorCSdkb19yZXNldCAmJgorCSBnaXQgYXBwbHkgQkYuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgd2l0aG91dCByZXBsYWNlbWVudCAoY29weSkuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIGdpdCBhcHBseSBDRi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZi4nIFwKKwknZG9fcmVzZXQgJiYKKwkgZ2l0IGFwcGx5IC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IC0taW5kZXggQkYuZGlmZiAmJgorCSB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgYmluYXJ5KSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIChjb3B5KS4nIFwKKwknZG9fcmVzZXQgJiYKKwkgZ2l0IGFwcGx5IC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IC0taW5kZXggQ0YuZGlmZiAmJgorCSB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgYmluYXJ5KSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSAtcDAgZGlmZicgJworCWRvX3Jlc2V0ICYmCisJZ2l0IGFwcGx5IC1wMCAtLWluZGV4IEIwLmRpZmYgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgYmluYXJ5IC0tIGZpbGUzKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA0LWFwcGx5LWJvdW5kYXJ5LnNoIGIvdC90NDEwNC1hcHBseS1ib3VuZGFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMmUzYjBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwNC1hcHBseS1ib3VuZGFyeS5zaApAQCAtMCwwICsxLDE0MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgYm91bmRhcnkgdGVzdHMKKworJworLiAuL3Rlc3QtbGliLnNoCisKK0w9ImMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHgiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWZvciBpIGluIGIgJyIkTCInIHkKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+b3JpZ2luYWwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHZpY3RpbSAmJgorCisJIyBhZGQgdG8gdGhlIGhlYWQKKwlmb3IgaSBpbiBhIGIgJyIkTCInIHkKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+YWRkLWEtZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5hZGQtYS1wYXRjaC53aXRoICYmCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPmFkZC1hLXBhdGNoLndpdGhvdXQgJiYKKworCSMgaW5zZXJ0IGF0IGxpbmUgdHdvCisJZm9yIGkgaW4gYiBhICciJEwiJyB5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPmluc2VydC1hLWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+aW5zZXJ0LWEtcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5pbnNlcnQtYS1wYXRjaC53aXRob3V0ICYmCisKKwkjIG1vZGlmeSBhdCB0aGUgaGVhZAorCWZvciBpIGluIGEgJyIkTCInIHkKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+bW9kLWEtZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5tb2QtYS1wYXRjaC53aXRoICYmCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPm1vZC1hLXBhdGNoLndpdGhvdXQgJiYKKworCSMgcmVtb3ZlIGZyb20gdGhlIGhlYWQKKwlmb3IgaSBpbiAnIiRMIicgeQorCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5kZWwtYS1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPmRlbC1hLXBhdGNoLndpdGggJiYKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+ZGVsLWEtcGF0Y2gud2l0aG91dCAmJgorCisJIyBhZGQgdG8gdGhlIHRhaWwKKwlmb3IgaSBpbiBiICciJEwiJyB5IHoKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+YWRkLXotZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5hZGQtei1wYXRjaC53aXRoICYmCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPmFkZC16LXBhdGNoLndpdGhvdXQgJiYKKworCSMgbW9kaWZ5IGF0IHRoZSB0YWlsCisJZm9yIGkgaW4gYiAnIiRMIicgegorCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5tb2Qtei1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPm1vZC16LXBhdGNoLndpdGggJiYKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+bW9kLXotcGF0Y2gud2l0aG91dCAmJgorCisJIyByZW1vdmUgZnJvbSB0aGUgdGFpbAorCWZvciBpIGluIGIgJyIkTCInCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPmRlbC16LWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+ZGVsLXotcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5kZWwtei1wYXRjaC53aXRob3V0CisKKwkjIGRvbmUKKycKKworZm9yIHdpdGggaW4gd2l0aCB3aXRob3V0CitkbworCWNhc2UgIiR3aXRoIiBpbgorCXdpdGgpIHU9IDs7CisJd2l0aG91dCkgdT0nLS11bmlkaWZmLXplcm8gJyA7OworCWVzYWMKKwlmb3Iga2luZCBpbiBhZGQtYSBhZGQteiBpbnNlcnQtYSBtb2QtYSBtb2QteiBkZWwtYSBkZWwtegorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFwcGx5ICRraW5kLXBhdGNoICR3aXRoIGNvbnRleHQiICcKKwkJCWNhdCBvcmlnaW5hbCA+dmljdGltICYmCisJCQlnaXQgdXBkYXRlLWluZGV4IHZpY3RpbSAmJgorCQkJZ2l0IGFwcGx5IC0taW5kZXggJyIkdSRraW5kLXBhdGNoLiR3aXRoIicgJiYKKwkJCXRlc3RfY21wICciJGtpbmQiJy1leHBlY3QgdmljdGltCisJCScKKwlkb25lCitkb25lCisKK2ZvciBraW5kIGluIGFkZC1hIGFkZC16IGluc2VydC1hIG1vZC1hIG1vZC16IGRlbC1hIGRlbC16CitkbworCXJtIC1mICRraW5kLW5nLndpdGhvdXQKKwlzZWQJLWUgInMvXmRpZmYgLS1naXQgL2RpZmYgLyIgXAorCQktZSAnL15pbmRleCAvZCcgXAorCQk8JGtpbmQtcGF0Y2gud2l0aG91dCA+JGtpbmQtbmcud2l0aG91dAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFwcGx5IG5vbi1naXQgJGtpbmQtcGF0Y2ggd2l0aG91dCBjb250ZXh0IiAnCisJCWNhdCBvcmlnaW5hbCA+dmljdGltICYmCisJCWdpdCB1cGRhdGUtaW5kZXggdmljdGltICYmCisJCWdpdCBhcHBseSAtLXVuaWRpZmYtemVybyAtLWluZGV4ICciJGtpbmQtbmcud2l0aG91dCInICYmCisJCXRlc3RfY21wICciJGtpbmQiJy1leHBlY3QgdmljdGltCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28gbGluZXMnICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBhYWEgPmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2ggJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIGJiYiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIHBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggd2l0aCAzIGNvbnRleHQgbGluZXMgbWF0Y2hpbmcgYXQgZW5kJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyBlY2hvIGQ7IH0gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIGUgPj5maWxlICYmCisJZ2l0IGRpZmYgPnBhdGNoICYmCisJPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2gKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA1LWFwcGx5LWZ1enouc2ggYi90L3Q0MTA1LWFwcGx5LWZ1enouc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzI2NmUzOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDUtYXBwbHktZnV6ei5zaApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgd2l0aCBmdXp6IGFuZCBvZmZzZXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCitkb3Rlc3QgKCkgeworCW5hbWU9IiQxIiAmJiBzaGlmdCAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCisJCWdpdCBjaGVja291dC1pbmRleCAtZiAtcSAtdSBmaWxlICYmCisJCWdpdCBhcHBseSAkKiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZQorCSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMgorCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyBhIGIgYyBkIGUgOCA5IDEwIDExIDEyCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPmZpbGUgJiYKKwljYXQgZmlsZSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgPk8wLmRpZmYgJiYKKworCXNlZCAtZSAicy9AQCAtNSw2ICs1LDExIEBAL0BAIC0yLDYgKzIsMTEgQEAvIiA+TzEuZGlmZiBPMC5kaWZmICYmCisJc2VkIC1lICJzL0BAIC01LDYgKzUsMTEgQEAvQEAgLTcsNiArNywxMSBAQC8iID5PMi5kaWZmIE8wLmRpZmYgJiYKKwlzZWQgLWUgInMvQEAgLTUsNiArNSwxMSBAQC9AQCAtMTksNiArMTksMTEgQEAvIiA+TzMuZGlmZiBPMC5kaWZmICYmCisKKwlzZWQgLWUgInMvXiA1LyBTLyIgPkYwLmRpZmYgTzAuZGlmZiAmJgorCXNlZCAtZSAicy9eIDUvIFMvIiA+RjEuZGlmZiBPMS5kaWZmICYmCisJc2VkIC1lICJzL14gNS8gUy8iID5GMi5kaWZmIE8yLmRpZmYgJiYKKwlzZWQgLWUgInMvXiA1LyBTLyIgPkYzLmRpZmYgTzMuZGlmZgorCisnCisKK2RvdGVzdCAndW5tb2RpZmllZCBwYXRjaCcgTzAuZGlmZgorCitkb3Rlc3QgJ21pbnVzIG9mZnNldCcgTzEuZGlmZgorCitkb3Rlc3QgJ3BsdXMgb2Zmc2V0JyBPMi5kaWZmCisKK2RvdGVzdCAnYmlnIG9mZnNldCcgTzMuZGlmZgorCitkb3Rlc3QgJ2Z1enogd2l0aCBubyBvZmZzZXQnIC1DMiBGMC5kaWZmCisKK2RvdGVzdCAnZnV6eiB3aXRoIG1pbnVzIG9mZnNldCcgLUMyIEYxLmRpZmYKKworZG90ZXN0ICdmdXp6IHdpdGggcGx1cyBvZmZzZXQnIC1DMiBGMi5kaWZmCisKK2RvdGVzdCAnZnV6eiB3aXRoIGJpZyBvZmZzZXQnIC1DMiBGMy5kaWZmCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwNi1hcHBseS1zdGRpbi5zaCBiL3QvdDQxMDYtYXBwbHktc3RkaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzI0NjdhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDYtYXBwbHktc3RkaW4uc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtLW51bXN0YXQgLSA8cGF0Y2gnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvID50ZXh0ICYmCisJZ2l0IGFkZCB0ZXh0ICYmCisJZWNobyBnb29kYnllID50ZXh0ICYmCisJZ2l0IGRpZmYgPnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcHBseSAtLW51bXN0YXQgLSA8IHBhdGNoJyAnCisJZWNobyAiMQkxCXRleHQiID5leHBlY3QgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IC0gPHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcHBseSAtLW51bXN0YXQgLSA8IHBhdGNoIHBhdGNoJyAnCisJZm9yIGkgaW4gMSAyOyBkbyBlY2hvICIxCTEJdGV4dCI7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCBhcHBseSAtLW51bXN0YXQgLSA8IHBhdGNoIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwNy1hcHBseS1pZ25vcmUtd2hpdGVzcGFjZS5zaCBiL3QvdDQxMDctYXBwbHktaWdub3JlLXdoaXRlc3BhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWM3MmVlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDctYXBwbHktaWdub3JlLXdoaXRlc3BhY2Uuc2gKQEAgLTAsMCArMSwxOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgR2l1c2VwcGUgQmlsb3R0YQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtYXBwbHkgLS1pZ25vcmUtd2hpdGVzcGFjZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhpcyBwcmltZXMgbWFpbi5jIGZpbGUgdGhhdCBpbmRlbnRzIHdpdGhvdXQgdXNpbmcgSFQgYXQgYWxsLgorIyBWYXJpb3VzIHBhdGNoZXMgd2l0aCBIVCBhbmQgb3RoZXIgc3BhY2VzIGFyZSBhdHRlbXB0ZWQgaW4gdGhlIHRlc3QuCisKK2NhdCA+IHBhdGNoMS5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9tYWluLmMKK0BAIC0wLDAgKzEsMjIgQEAKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKyt2b2lkIHByaW50X2ludChpbnQgbnVtKTsKKytpbnQgZnVuYyhpbnQgbnVtKTsKKysKKytpbnQgbWFpbigpIHsKKysgICAgICAgaW50IGk7CisrCisrICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisrICAgICAgICAgICAgICAgcHJpbnRfaW50KGZ1bmMoaSkpOyAvKiBzdHVmZiAqLworKyAgICAgICB9CisrCisrICAgICAgIHJldHVybiAwOworK30KKysKKytpbnQgZnVuYyhpbnQgbnVtKSB7CisrICAgICAgIHJldHVybiBudW0gKiBudW07CisrfQorKworK3ZvaWQgcHJpbnRfaW50KGludCBudW0pIHsKKysgICAgICAgcHJpbnRmKCIlZCIsIG51bSk7CisrfQorRU9GCisKKyMgU2luY2Ugd2hpdGVzcGFjZSBpcyB2ZXJ5IHNpZ25pZmljYW50IGFuZCB3ZSB3YW50IHRvIHByZXZlbnQgd2hpdGVzcGFjZQorIyBtYW5nbGluZyB3aGVuIGNyZWF0aW5nIHRoaXMgdGVzdCBmcm9tIGEgcGF0Y2gsIHdlIHByb3RlY3QgJ2ZpeGFibGUnCisjIHdoaXRlc3BhY2UgYnkgcmVwbGFjaW5nIHNwYWNlcyB3aXRoIFogYW5kIHJlcGxhY2luZyB0aGVtIGF0IHBhdGNoCisjIGNyZWF0aW9uIHRpbWUsIGhlbmNlIHRoZSBzZWQgdHJpY2suCisKKyMgVGhpcyBwYXRjaCB3aWxsIGZhaWwgdW5sZXNzIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGlnbm9yZWQKKworc2VkIC1lICdzL1ovIC9nJyA+IHBhdGNoMi5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMTAsNiArMTAsOCBAQAorWgkJcHJpbnRfaW50KGZ1bmMoaSkpOyAvKiBzdHVmZiAqLworWgl9CitaCisrCXByaW50ZigiXG4iKTsKKysKK1oJcmV0dXJuIDA7CitafQorWgorRU9GCisKKyMgVGhpcyBwYXRjaCB3aWxsIGZhaWwgZXZlbiBpZiB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBpZ25vcmVkLAorIyBiZWNhdXNlIG9mIHRoZSBtaXNzaW5nIHN0cmluZyBhdCBFT0wuIFRPRE86IHRoaXMgdGVzdGNhc2Ugc2hvdWxkIGJlCisjIGltcHJvdmVkIGJ5IGNyZWF0aW5nIGEgbGluZSB0aGF0IGhhcyB0aGUgc2FtZSBoYXNoIHdpdGggYW5kIHdpdGhvdXQKKyMgdGhlIGZpbmFsIHN0cmluZy4KKworc2VkIC1lICdzL1ovIC9nJyA+IHBhdGNoMy5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMTAsMyArMTAsNCBAQAorWglmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworWgkJcHJpbnRfaW50KGZ1bmMoaSkpO1oKKysJCS8qIHN0dWZmICovCitaCX0KK0VPRgorCisjIFRoaXMgcGF0Y2ggd2lsbCBmYWlsIGV2ZW4gaWYgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyBhcmUgYmVpbmcgaWdub3JlZCwKKyMgYmVjYXVzZSBvZiB0aGUgbWlzc2luZyBFT0wgYXQgRU9GLgorCitzZWQgLWUgJ3MvWi8gL2cnID4gcGF0Y2g0LnBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0yMSwxICsyMSwxIEBACistCX07WgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrCX07CitFT0YKKworIyBUaGlzIHBhdGNoIHdpbGwgZmFpbCB1bmxlc3Mgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyBhcmUgYmVpbmcgaWdub3JlZC4KKworc2VkIC1lICdzL1ovIC9nJyA+IHBhdGNoNS5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMiwyICsyLDMgQEAKK1oJdm9pZCBwcmludF9pbnQoaW50IG51bSk7CisrCS8qIGEgY29tbWVudCAqLworWglpbnQgZnVuYyhpbnQgbnVtKTsKK0VPRgorCisjIEFuZCB0aGlzIGlzIGhvdyB0aGUgZmluYWwgb3V0cHV0IHNob3VsZCBiZS4gIFBhdGNoZXMgaW50cm9kdWNlCisjIEhUcyBidXQgdGhlIG9yaWdpbmFsIFNQIGluZGVudHMgYXJlIG1vc3RseSBrZXB0LgorCitzZWQgLWUgJ3MvVC8JL2cnID4gbWFpbi5jLmZpbmFsIDw8XEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pOworaW50IGZ1bmMoaW50IG51bSk7CisKK2ludCBtYWluKCkgeworICAgICAgIGludCBpOworCisgICAgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgICAgIHByaW50X2ludChmdW5jKGkpKTsgLyogc3R1ZmYgKi8KKyAgICAgICB9CisKK1RwcmludGYoIlxuIik7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworaW50IGZ1bmMoaW50IG51bSkgeworICAgICAgIHJldHVybiBudW0gKiBudW07Cit9CisKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pIHsKKyAgICAgICBwcmludGYoIiVkIiwgbnVtKTsKK30KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGNyZWF0aW9uJyAnCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDIgZmFpbHMgKHJldGFiKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDIucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gyIGFwcGxpZXMgd2l0aCAtLWlnbm9yZS13aGl0ZXNwYWNlJyAnCisJZ2l0IGFwcGx5IC0taWdub3JlLXdoaXRlc3BhY2UgcGF0Y2gyLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMiByZXZlcnNlIGFwcGxpZXMgd2l0aCAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UnICcKKwlnaXQgYXBwbHkgLVIgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIHBhdGNoMi5wYXRjaAorJworCitnaXQgY29uZmlnIGFwcGx5Lmlnbm9yZXdoaXRlc3BhY2UgY2hhbmdlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMiBhcHBsaWVzIChhcHBseS5pZ25vcmV3aGl0ZXNwYWNlID0gY2hhbmdlKScgJworCWdpdCBhcHBseSBwYXRjaDIucGF0Y2ggJiYKKwl0ZXN0X2NtcCBtYWluLmMuZmluYWwgbWFpbi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMyBmYWlscyAobWlzc2luZyBzdHJpbmcgYXQgRU9MKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDMucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2g0IGZhaWxzIChtaXNzaW5nIEVPTCBhdCBFT0YpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoNC5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDUgZmFpbHMgKGxlYWRpbmcgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyBtYXR0ZXIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoNS5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1jcmVhdGUgZmlsZSAod2l0aCAtLWlnbm9yZS13aGl0ZXNwYWNlKScgJworCXJtIC1mIG1haW4uYyAmJgorCWdpdCBhcHBseSBwYXRjaDEucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2g1IGZhaWxzICgtLW5vLWlnbm9yZS13aGl0ZXNwYWNlKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLW5vLWlnbm9yZS13aGl0ZXNwYWNlIHBhdGNoNS5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS1pbmFjY3VyYXRlLWVvZicgJworCWVjaG8gMSA+ZmlsZSAmJgorCWdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS1pbmFjY3VyYXRlLWVvZiA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSArMSBAQAorCS0xCisJKzIKKwlFT0YKKwlwcmludGYgMiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA4LWFwcGx5LXRocmVld2F5LnNoIGIvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNzM0OWNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaApAQCAtMCwwICsxLDE2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtLTN3YXknCisKKy4gLi90ZXN0LWxpYi5zaAorCitwcmludF9zYW5pdGl6ZWRfY29uZmxpY3RlZF9kaWZmICgpIHsKKwlnaXQgZGlmZiBIRUFEID5kaWZmLnJhdyAmJgorCXNlZCAtZSAnCisJCS9eaW5kZXggL2QKKwkJcy9eXCgrWzw+fF1bPD58XVs8PnxdWzw+fF0qXCkgLiovXDEvCisJJyBkaWZmLnJhdworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgPm9uZSAmJgorCWNhdCBvbmUgPnR3byAmJgorCWdpdCBhZGQgb25lIHR3byAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgdHdvIDMgNCA1IHNpeCA3ID5vbmUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgdHdvIDMgNCA1IDYgNyA+dHdvICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtYXN0ZXIgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IGZpdmUgNiA3ID5vbmUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgZml2ZSA2IDcgPnR3byAmJgorCWdpdCBjb21taXQgLWEgLW0gc2lkZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRob3V0IC0tM3dheScgJworCWdpdCBkaWZmIHNpZGVeIHNpZGUgPlAuZGlmZiAmJgorCisJIyBzaG91bGQgZmFpbCB0byBhcHBseQorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBQLmRpZmYgJiYKKwkjIHNob3VsZCBsZWF2ZSB0aGluZ3MgaW50YWN0CisJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECisnCisKK3Rlc3RfYXBwbHlfd2l0aF8zd2F5ICgpIHsKKwkjIE1lcmdpbmcgc2lkZSBzaG91bGQgYmUgc2ltaWxhciB0byBhcHBseWluZyB0aGlzIHBhdGNoCisJZ2l0IGRpZmYgLi4uc2lkZSA+UC5kaWZmICYmCisKKwkjIFRoZSBjb3JyZXNwb25kaW5nIGNvbmZsaWN0ZWQgbWVyZ2UKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IHNpZGUgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdC5scyAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmV4cGVjdC5kaWZmICYmCisKKwkjIHNob3VsZCBmYWlsIHRvIGFwcGx5CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IC0tM3dheSBQLmRpZmYgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbC5scyAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmFjdHVhbC5kaWZmICYmCisKKwkjIFRoZSByZXN1bHQgc2hvdWxkIHJlc2VtYmxlIHRoZSBjb3JyZXNwb25kaW5nIG1lcmdlCisJdGVzdF9jbXAgZXhwZWN0LmxzIGFjdHVhbC5scyAmJgorCXRlc3RfY21wIGV4cGVjdC5kaWZmIGFjdHVhbC5kaWZmCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS0zd2F5JyAnCisJdGVzdF9hcHBseV93aXRoXzN3YXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXkgd2l0aCBtZXJnZS5jb25mbGljdFN0eWxlID0gZGlmZjMnICcKKwl0ZXN0X2NvbmZpZyBtZXJnZS5jb25mbGljdFN0eWxlIGRpZmYzICYmCisJdGVzdF9hcHBseV93aXRoXzN3YXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXkgd2l0aCByZXJlcmUgZW5hYmxlZCcgJworCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKworCSMgTWVyZ2luZyBzaWRlIHNob3VsZCBiZSBzaW1pbGFyIHRvIGFwcGx5aW5nIHRoaXMgcGF0Y2gKKwlnaXQgZGlmZiAuLi5zaWRlID5QLmRpZmYgJiYKKworCSMgVGhlIGNvcnJlc3BvbmRpbmcgY29uZmxpY3RlZCBtZXJnZQorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZSAmJgorCisJIyBNYW51YWxseSByZXNvbHZlIGFuZCByZWNvcmQgdGhlIHJlc29sdXRpb24KKwl0ZXN0X3dyaXRlX2xpbmVzIDEgdHdvIDMgNCBmaXZlIHNpeCA3ID5vbmUgJiYKKwlnaXQgcmVyZXJlICYmCisJY2F0IG9uZSA+ZXhwZWN0ICYmCisKKwkjIHNob3VsZCBmYWlsIHRvIGFwcGx5CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IC0tM3dheSBQLmRpZmYgJiYKKworCSMgYnV0IHJlcmVyZSBzaG91bGQgaGF2ZSByZXBsYXllZCB0aGUgcmVjb3JkZWQgcmVzb2x1dGlvbgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLTMgd2l0aCBhZGQvYWRkIGNvbmZsaWN0IHNldHVwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGFkZGVyICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3ID50aHJlZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA+Zm91ciAmJgorCWdpdCBhZGQgdGhyZWUgZm91ciAmJgorCWdpdCBjb21taXQgLW0gImFkZCB0aHJlZSBhbmQgZm91ciIgJiYKKworCWdpdCBjaGVja291dCAtYiBhbm90aGVyIGFkZGVyXiAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA+dGhyZWUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIGZvdXIgNSA2IDcgPmZvdXIgJiYKKwlnaXQgYWRkIHRocmVlIGZvdXIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgdGhyZWUgYW5kIGZvdXIiICYmCisKKwkjIE1lcmdpbmcgYW5vdGhlciBzaG91bGQgYmUgc2ltaWxhciB0byBhcHBseWluZyB0aGlzIHBhdGNoCisJZ2l0IGRpZmYgYWRkZXIuLi5hbm90aGVyID5QLmRpZmYgJiYKKworCWdpdCBjaGVja291dCBhZGRlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGFub3RoZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdC5scyAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmV4cGVjdC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0zIHdpdGggYWRkL2FkZCBjb25mbGljdCcgJworCSMgc2hvdWxkIGZhaWwgdG8gYXBwbHkgLi4uCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBhZGRlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgorCSMgLi4uIGFuZCBsZWF2ZSBjb25mbGljdHMgaW4gdGhlIGluZGV4IGFuZCBpbiB0aGUgd29ya2luZyB0cmVlCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKKwlwcmludF9zYW5pdGl6ZWRfY29uZmxpY3RlZF9kaWZmID5hY3R1YWwuZGlmZiAmJgorCisJIyBUaGUgcmVzdWx0IHNob3VsZCByZXNlbWJsZSB0aGUgY29ycmVzcG9uZGluZyBtZXJnZQorCXRlc3RfY21wIGV4cGVjdC5scyBhY3R1YWwubHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGlmZiBhY3R1YWwuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtMyB3aXRoIGFkZC9hZGQgY29uZmxpY3QgKGRpcnR5IHdvcmtpbmcgdHJlZSknICcKKwkjIHNob3VsZCBmYWlsIHRvIGFwcGx5IC4uLgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYWRkZXJeMCAmJgorCWVjaG8gPj5mb3VyICYmCisJY2F0IGZvdXIgPmZvdXIuc2F2ZSAmJgorCWNhdCB0aHJlZSA+dGhyZWUuc2F2ZSAmJgorCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0LmxzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgorCSMgLi4uIGFuZCBzaG91bGQgbm90IHRvdWNoIGFueXRoaW5nCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QubHMgYWN0dWFsLmxzICYmCisJdGVzdF9jbXAgZm91ci5zYXZlIGZvdXIgJiYKKwl0ZXN0X2NtcCB0aHJlZS5zYXZlIHRocmVlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwOS1hcHBseS1tdWx0aWZyYWcuc2ggYi90L3Q0MTA5LWFwcGx5LW11bHRpZnJhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzU4MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS1hcHBseS1tdWx0aWZyYWcuc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIyBDb3B5cmlnaHQgKGMpIDIwMDUgUm9iZXJ0IEZpdHpzaW1vbnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHRlc3QgcGF0Y2hlcyB3aXRoIG11bHRpcGxlIGZyYWdtZW50cy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitjcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L3BhdGNoMS5wYXRjaCIgLgorY3AgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9wYXRjaDIucGF0Y2giIC4KK2NwICIkVEVTVF9ESVJFQ1RPUlkvdDQxMDkvcGF0Y2gzLnBhdGNoIiAuCitjcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L3BhdGNoNC5wYXRjaCIgLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgKDEpJyAnCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaCBwYXRjaDIucGF0Y2ggJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L2V4cGVjdC0xIiBtYWluLmMKKycKK3JtIC1mIG1haW4uYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgKDIpJyAnCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaCBwYXRjaDIucGF0Y2ggcGF0Y2gzLnBhdGNoICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9leHBlY3QtMiIgbWFpbi5jCisnCitybSAtZiBtYWluLmMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFwcGx5ICgzKScgJworCWdpdCBhcHBseSBwYXRjaDEucGF0Y2ggcGF0Y2g0LnBhdGNoICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9leHBlY3QtMyIgbWFpbi5jCisnCittdiBtYWluLmMgbWFpbi5jLmdpdAorCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9leHBlY3QtMSBiL3QvdDQxMDkvZXhwZWN0LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiNWZmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvZXhwZWN0LTEKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBmdW5jKGludCBudW0pOwordm9pZCBwcmludF9pbnQoaW50IG51bSk7Cit2b2lkIHByaW50X2xuKCk7CisKK2ludCBtYWluKCkgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcHJpbnRfaW50KGZ1bmMoaSkpOworCX0KKworCXByaW50X2xuKCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZ1bmMoaW50IG51bSkgeworCXJldHVybiBudW0gKiBudW07Cit9CisKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pIHsKKwlwcmludGYoIiVkIiwgbnVtKTsKK30KKwordm9pZCBwcmludF9sbigpIHsKKwlwcmludGYoIlxuIik7Cit9CisKZGlmZiAtLWdpdCBhL3QvdDQxMDkvZXhwZWN0LTIgYi90L3Q0MTA5L2V4cGVjdC0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTI5MjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L2V4cGVjdC0yCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgZnVuYyhpbnQgbnVtKTsKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pOworCitpbnQgbWFpbigpIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXByaW50X2ludChmdW5jKGkpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZ1bmMoaW50IG51bSkgeworCXJldHVybiBudW0gKiBudW07Cit9CisKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pIHsKKwlwcmludGYoIiVkIiwgbnVtKTsKK30KKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9leHBlY3QtMyBiL3QvdDQxMDkvZXhwZWN0LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyYTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvZXhwZWN0LTMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBmdW5jKGludCBudW0pOworaW50IGZ1bmMyKGludCBudW0pOworCitpbnQgbWFpbigpIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXByaW50ZigiJWQiLCBmdW5jKGkpKTsKKwkJcHJpbnRmKCIlZCIsIGZ1bmMzKGkpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZ1bmMoaW50IG51bSkgeworCXJldHVybiBudW0gKiBudW07Cit9CisKK2ludCBmdW5jMihpbnQgbnVtKSB7CisJcmV0dXJuIG51bSAqIG51bSAqIG51bTsKK30KKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9wYXRjaDEucGF0Y2ggYi90L3Q0MTA5L3BhdGNoMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDQxMWZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9wYXRjaDEucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL21haW4uYworQEAgLTAsMCArMSwyMyBAQAorKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBmdW5jKGludCBudW0pOworK3ZvaWQgcHJpbnRfaW50KGludCBudW0pOworKworK2ludCBtYWluKCkgeworKwlpbnQgaTsKKysKKysJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKysJCXByaW50X2ludChmdW5jKGkpKTsKKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisraW50IGZ1bmMoaW50IG51bSkgeworKwlyZXR1cm4gbnVtICogbnVtOworK30KKysKKyt2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisrCXByaW50ZigiJWQiLCBudW0pOworK30KKysKZGlmZiAtLWdpdCBhL3QvdDQxMDkvcGF0Y2gyLnBhdGNoIGIvdC90NDEwOS9wYXRjaDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM2YjA2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvcGF0Y2gyLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMSw3ICsxLDkgQEAKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgaW50IGZ1bmMoaW50IG51bSk7Cisgdm9pZCBwcmludF9pbnQoaW50IG51bSk7Cisrdm9pZCBwcmludF9sbigpOworIAorIGludCBtYWluKCkgeworIAlpbnQgaTsKK0BAIC0xMCw2ICsxMiw4IEBACisgCQlwcmludF9pbnQoZnVuYyhpKSk7CisgCX0KKyAKKysJcHJpbnRfbG4oKTsKKysKKyAJcmV0dXJuIDA7CisgfQorIAorQEAgLTIxLDMgKzI1LDcgQEAKKyAJcHJpbnRmKCIlZCIsIG51bSk7CisgfQorIAorK3ZvaWQgcHJpbnRfbG4oKSB7CisrCXByaW50ZigiXG4iKTsKKyt9CisrCmRpZmYgLS1naXQgYS90L3Q0MTA5L3BhdGNoMy5wYXRjaCBiL3QvdDQxMDkvcGF0Y2gzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTZjNTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L3BhdGNoMy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitjYXQgPiBwYXRjaDMucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEsOSArMSw3IEBACistI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorIAorIGludCBmdW5jKGludCBudW0pOworIHZvaWQgcHJpbnRfaW50KGludCBudW0pOworLXZvaWQgcHJpbnRfbG4oKTsKKyAKKyBpbnQgbWFpbigpIHsKKyAJaW50IGk7CitAQCAtMTIsOCArMTAsNiBAQAorIAkJcHJpbnRfaW50KGZ1bmMoaSkpOworIAl9CisgCistCXByaW50X2xuKCk7CistCisgCXJldHVybiAwOworIH0KKyAKK0BAIC0yNSw3ICsyMSwzIEBACisgCXByaW50ZigiJWQiLCBudW0pOworIH0KKyAKKy12b2lkIHByaW50X2xuKCkgeworLQlwcmludGYoIlxuIik7CistfQorLQpkaWZmIC0tZ2l0IGEvdC90NDEwOS9wYXRjaDQucGF0Y2ggYi90L3Q0MTA5L3BhdGNoNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjA4NTkwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9wYXRjaDQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xLDEzICsxLDE0IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgaW50IGZ1bmMoaW50IG51bSk7Cistdm9pZCBwcmludF9pbnQoaW50IG51bSk7CisraW50IGZ1bmMyKGludCBudW0pOworIAorIGludCBtYWluKCkgeworIAlpbnQgaTsKKyAKKyAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKy0JCXByaW50X2ludChmdW5jKGkpKTsKKysJCXByaW50ZigiJWQiLCBmdW5jKGkpKTsKKysJCXByaW50ZigiJWQiLCBmdW5jMyhpKSk7CisgCX0KKyAKKyAJcmV0dXJuIDA7CitAQCAtMTcsNyArMTgsNyBAQAorIAlyZXR1cm4gbnVtICogbnVtOworIH0KKyAKKy12b2lkIHByaW50X2ludChpbnQgbnVtKSB7CistCXByaW50ZigiJWQiLCBudW0pOworK2ludCBmdW5jMihpbnQgbnVtKSB7CisrCXJldHVybiBudW0gKiBudW0gKiBudW07CisgfQorIApkaWZmIC0tZ2l0IGEvdC90NDExMC1hcHBseS1zY2FuLnNoIGIvdC90NDExMC1hcHBseS1zY2FuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA5ZjU4MTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEwLWFwcGx5LXNjYW4uc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIyBDb3B5cmlnaHQgKGMpIDIwMDUgUm9iZXJ0IEZpdHpzaW1vbnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHRlc3QgZm9yIHBhdGNoZXMgd2hpY2ggcmVxdWlyZSBzY2FubmluZyBmb3J3YXJkcyBhbmQgYmFja3dhcmRzLgorCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFwcGx5IHNjYW4nICcKKwlnaXQgYXBwbHkgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoMS5wYXRjaCIgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoMi5wYXRjaCIgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoMy5wYXRjaCIgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoNC5wYXRjaCIgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoNS5wYXRjaCIgJiYKKwl0ZXN0X2NtcCBuZXcudHh0ICIkVEVTVF9ESVJFQ1RPUlkvdDQxMTAvZXhwZWN0IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTAvZXhwZWN0IGIvdC90NDExMC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjYzQ5MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvZXhwZWN0CkBAIC0wLDAgKzEsMjAgQEAKK2ExCithMTEKK2ExMTEKK2ExMTExCitiMQorYjExCitiMTExCitiMTExMQorYjIKK2IyMgorYjIyMgorYjIyMjIKK2MxCitjMTEKK2MxMTEKK2MxMTExCitjMgorYzIyCitjMjIyCitjMjIyMgpkaWZmIC0tZ2l0IGEvdC90NDExMC9wYXRjaDEucGF0Y2ggYi90L3Q0MTEwL3BhdGNoMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjEzOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9wYXRjaDEucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorZGlmZiAtLWdpdCBhL25ldy50eHQgYi9uZXcudHh0CituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvbmV3LnR4dAorQEAgLTAsMCArMSwxMiBAQAorK2ExCisrYTExCisrYTExMQorK2ExMTExCisrYjEKKytiMTEKKytiMTExCisrYjExMTEKKytjMQorK2MxMQorK2MxMTEKKytjMTExMQpkaWZmIC0tZ2l0IGEvdC90NDExMC9wYXRjaDIucGF0Y2ggYi90L3Q0MTEwL3BhdGNoMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDk3NDI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9wYXRjaDIucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtLWdpdCBhL25ldy50eHQgYi9uZXcudHh0CistLS0gYS9uZXcudHh0CisrKysgYi9uZXcudHh0CitAQCAtMSw3ICsxLDMgQEAKKy1hMQorLWExMQorLWExMTEKKy1hMTExMQorIGIxCisgYjExCisgYjExMQpkaWZmIC0tZ2l0IGEvdC90NDExMC9wYXRjaDMucGF0Y2ggYi90L3Q0MTEwL3BhdGNoMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmJkNDQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9wYXRjaDMucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorZGlmZiAtLWdpdCBhL25ldy50eHQgYi9uZXcudHh0CistLS0gYS9uZXcudHh0CisrKysgYi9uZXcudHh0CitAQCAtNiw2ICs2LDEwIEBACisgYjExCisgYjExMQorIGIxMTExCisrYjIKKytiMjIKKytiMjIyCisrYjIyMjIKKyBjMQorIGMxMQorIGMxMTEKZGlmZiAtLWdpdCBhL3QvdDQxMTAvcGF0Y2g0LnBhdGNoIGIvdC90NDExMC9wYXRjaDQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmYjljMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvcGF0Y2g0LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLS1naXQgYS9uZXcudHh0IGIvbmV3LnR4dAorLS0tIGEvbmV3LnR4dAorKysrIGIvbmV3LnR4dAorQEAgLTEsMyArMSw3IEBACisrYTEKKythMTEKKythMTExCisrYTExMTEKKyBiMQorIGIxMQorIGIxMTEKZGlmZiAtLWdpdCBhL3QvdDQxMTAvcGF0Y2g1LnBhdGNoIGIvdC90NDExMC9wYXRjaDUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhYzY5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvcGF0Y2g1LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLS1naXQgYS9uZXcudHh0IGIvbmV3LnR4dAorLS0tIGEvbmV3LnR4dAorKysrIGIvbmV3LnR4dAorQEAgLTEwLDMgKzEwLDcgQEAKKyBjMTEKKyBjMTExCisgYzExMTEKKytjMgorK2MyMgorK2MyMjIKKytjMjIyMgpkaWZmIC0tZ2l0IGEvdC90NDExMS1hcHBseS1zdWJkaXIuc2ggYi90L3Q0MTExLWFwcGx5LXN1YmRpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNjE4YTZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMS1hcHBseS1zdWJkaXIuc2gKQEAgLTAsMCArMSwxNTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwYXRjaGluZyBmcm9tIGluY29udmVuaWVudCBwbGFjZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNhdCA+cGF0Y2ggPDwtXEVPRiAmJgorCWRpZmYgZmlsZS5vcmlnIGZpbGUKKwktLS0gYS9maWxlLm9yaWcKKwkrKysgYi9maWxlCisJQEAgLTEgKzEsMiBAQAorCSAxCisJKzIKKwlFT0YKKwlwYXRjaD0iJChwd2QpL3BhdGNoIiAmJgorCisJZWNobyAxID5wcmVpbWFnZSAmJgorCXByaW50ZiAiJXNcbiIgMSAyID5wb3N0aW1hZ2UgJiYKKwllY2hvIDMgPm90aGVyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFzaXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHN1YmRpcicgJworCXJlc2V0X3N1YmRpcigpIHsKKwkJZ2l0IHJlc2V0ICYmCisJCW1rZGlyIC1wIHN1Yi9kaXIvYiAmJgorCQlta2RpciAtcCBvYmplY3RzICYmCisJCWNwICIkMSIgZmlsZSAmJgorCQljcCAiJDEiIG9iamVjdHMvZmlsZSAmJgorCQljcCAiJDEiIHN1Yi9kaXIvZmlsZSAmJgorCQljcCAiJDEiIHN1Yi9kaXIvYi9maWxlICYmCisJCWdpdCBhZGQgZmlsZSBzdWIvZGlyL2ZpbGUgc3ViL2Rpci9iL2ZpbGUgb2JqZWN0cy9maWxlICYmCisJCWNwICIkMiIgZmlsZSAmJgorCQljcCAiJDIiIHN1Yi9kaXIvZmlsZSAmJgorCQljcCAiJDIiIHN1Yi9kaXIvYi9maWxlICYmCisJCWNwICIkMiIgb2JqZWN0cy9maWxlICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZnJvbSBzdWJkaXIgb2YgdG9wbGV2ZWwnICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwlyZXNldF9zdWJkaXIgb3RoZXIgcHJlaW1hZ2UgJiYKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJZ2l0IGFwcGx5ICIkcGF0Y2giCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHN1Yi9kaXIvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWNhY2hlZCBmcm9tIHN1YmRpciBvZiB0b3BsZXZlbCcgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCWNwIG90aGVyIGV4cGVjdGVkLndvcmtpbmcgJiYKKwlyZXNldF9zdWJkaXIgcHJlaW1hZ2Ugb3RoZXIgJiYKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJZ2l0IGFwcGx5IC0tY2FjaGVkICIkcGF0Y2giCisJKSAmJgorCWdpdCBzaG93IDpzdWIvZGlyL2ZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLndvcmtpbmcgc3ViL2Rpci9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0taW5kZXggZnJvbSBzdWJkaXIgb2YgdG9wbGV2ZWwnICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwlyZXNldF9zdWJkaXIgcHJlaW1hZ2Ugb3RoZXIgJiYKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggIiRwYXRjaCIKKwkpICYmCisJcmVzZXRfc3ViZGlyIG90aGVyIHByZWltYWdlICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4ICIkcGF0Y2giCisJKSAmJgorCXJlc2V0X3N1YmRpciBwcmVpbWFnZSBwcmVpbWFnZSAmJgorCSgKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgYXBwbHkgLS1pbmRleCAiJHBhdGNoIgorCSkgJiYKKwlnaXQgc2hvdyA6c3ViL2Rpci9maWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBzdWIvZGlyL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaGFsZi1icm9rZW4gcGF0Y2ggZnJvbSBzdWJkaXIgb2YgdG9wbGV2ZWwnICcKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IDw8LUVPRgorCQktLS0gc3ViL2Rpci9maWxlCisJCSsrKyBzdWIvZGlyL2ZpbGUKKwkJQEAgLTEsMCArMSwwIEBACisJCS0tLSBmaWxlX2luX3Jvb3QKKwkJKysrIGZpbGVfaW5fcm9vdAorCQlAQCAtMSwwICsxLDAgQEAKKwkJRU9GCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBmcm9tIC5naXQgZGlyJyAnCisJY3AgcG9zdGltYWdlIGV4cGVjdGVkICYmCisJY3AgcHJlaW1hZ2UgLmdpdC9maWxlICYmCisJY3AgcHJlaW1hZ2UgLmdpdC9vYmplY3RzL2ZpbGUgJiYKKwkoCisJCWNkIC5naXQgJiYKKwkJZ2l0IGFwcGx5ICIkcGF0Y2giCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBmcm9tIHN1YmRpciBvZiAuZ2l0IGRpcicgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCWNwIHByZWltYWdlIC5naXQvZmlsZSAmJgorCWNwIHByZWltYWdlIC5naXQvb2JqZWN0cy9maWxlICYmCisJKAorCQljZCAuZ2l0L29iamVjdHMgJiYKKwkJZ2l0IGFwcGx5ICIkcGF0Y2giCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvb2JqZWN0cy9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tY2FjaGVkIGZyb20gLmdpdCBkaXInICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwljcCBvdGhlciBleHBlY3RlZC53b3JraW5nICYmCisJY3Agb3RoZXIgLmdpdC9maWxlICYmCisJcmVzZXRfc3ViZGlyIHByZWltYWdlIG90aGVyICYmCisJKAorCQljZCAuZ2l0ICYmCisJCWdpdCBhcHBseSAtLWNhY2hlZCAiJHBhdGNoIgorCSkgJiYKKwlnaXQgc2hvdyA6ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQud29ya2luZyBmaWxlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQud29ya2luZyAuZ2l0L2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1jYWNoZWQgZnJvbSBzdWJkaXIgb2YgLmdpdCBkaXInICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwljcCBwcmVpbWFnZSBleHBlY3RlZC5zdWJkaXIgJiYKKwljcCBvdGhlciAuZ2l0L2ZpbGUgJiYKKwljcCBvdGhlciAuZ2l0L29iamVjdHMvZmlsZSAmJgorCXJlc2V0X3N1YmRpciBwcmVpbWFnZSBvdGhlciAmJgorCSgKKwkJY2QgLmdpdC9vYmplY3RzICYmCisJCWdpdCBhcHBseSAtLWNhY2hlZCAiJHBhdGNoIgorCSkgJiYKKwlnaXQgc2hvdyA6ZmlsZSA+YWN0dWFsICYmCisJZ2l0IHNob3cgOm9iamVjdHMvZmlsZSA+YWN0dWFsLnN1YmRpciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN1YmRpciBhY3R1YWwuc3ViZGlyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExMi1hcHBseS1yZW5hbWVzLnNoIGIvdC90NDExMi1hcHBseS1yZW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5YWQxODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEyLWFwcGx5LXJlbmFtZXMuc2gKQEAgLTAsMCArMSwxNDQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIHdpdGggcmVuYW1lL2NvcHkuCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0dXAKKworbWtkaXIgLXAga2xpYmMvYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYworCitjYXQgPmtsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oIDw8XEVPRgorLyoKKyAqIGFyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisgKi8KKworI2lmbmRlZiBfS0xJQkNfQVJDSFNFVEpNUF9ICisjZGVmaW5lIF9LTElCQ19BUkNIU0VUSk1QX0gKKworc3RydWN0IF9fam1wX2J1ZiB7CisgIHVuc2lnbmVkIGxvbmcgX19yYng7CisgIHVuc2lnbmVkIGxvbmcgX19yc3A7CisgIHVuc2lnbmVkIGxvbmcgX19yYnA7CisgIHVuc2lnbmVkIGxvbmcgX19yMTI7CisgIHVuc2lnbmVkIGxvbmcgX19yMTM7CisgIHVuc2lnbmVkIGxvbmcgX19yMTQ7CisgIHVuc2lnbmVkIGxvbmcgX19yMTU7CisgIHVuc2lnbmVkIGxvbmcgX19yaXA7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWYgam1wX2J1ZlsxXTsKKworI2VuZGlmIC8qIF9TRVRKTVBfSCAqLworRU9GCitjYXQgPmtsaWJjL1JFQURNRSA8PFxFT0YKK1RoaXMgaXMgYSBzaW1wbGUgcmVhZG1lIGZpbGUuCitFT0YKKworY2F0ID5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9rbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaCBiL2luY2x1ZGUvYXJjaC9jcmlzL2tsaWJjL2FyY2hzZXRqbXAuaAorc2ltaWxhcml0eSBpbmRleCA3NiUKK2NvcHkgZnJvbSBrbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorY29weSB0byBpbmNsdWRlL2FyY2gvY3Jpcy9rbGliYy9hcmNoc2V0am1wLmgKKy0tLSBhL2tsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisrKysgYi9pbmNsdWRlL2FyY2gvY3Jpcy9rbGliYy9hcmNoc2V0am1wLmgKK0BAIC0xLDIxICsxLDI0IEBACisgLyoKKy0gKiBhcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorKyAqIGFyY2gvY3Jpcy9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorICAqLworCisgI2lmbmRlZiBfS0xJQkNfQVJDSFNFVEpNUF9ICisgI2RlZmluZSBfS0xJQkNfQVJDSFNFVEpNUF9ICisKKyBzdHJ1Y3QgX19qbXBfYnVmIHsKKy0gIHVuc2lnbmVkIGxvbmcgX19yYng7CistICB1bnNpZ25lZCBsb25nIF9fcnNwOworLSAgdW5zaWduZWQgbG9uZyBfX3JicDsKKy0gIHVuc2lnbmVkIGxvbmcgX19yMTI7CistICB1bnNpZ25lZCBsb25nIF9fcjEzOworLSAgdW5zaWduZWQgbG9uZyBfX3IxNDsKKy0gIHVuc2lnbmVkIGxvbmcgX19yMTU7CistICB1bnNpZ25lZCBsb25nIF9fcmlwOworKyAgdW5zaWduZWQgbG9uZyBfX3IwOworKyAgdW5zaWduZWQgbG9uZyBfX3IxOworKyAgdW5zaWduZWQgbG9uZyBfX3IyOworKyAgdW5zaWduZWQgbG9uZyBfX3IzOworKyAgdW5zaWduZWQgbG9uZyBfX3I0OworKyAgdW5zaWduZWQgbG9uZyBfX3I1OworKyAgdW5zaWduZWQgbG9uZyBfX3I2OworKyAgdW5zaWduZWQgbG9uZyBfX3I3OworKyAgdW5zaWduZWQgbG9uZyBfX3I4OworKyAgdW5zaWduZWQgbG9uZyBfX3NwOworKyAgdW5zaWduZWQgbG9uZyBfX3NycDsKKyB9OworCisgdHlwZWRlZiBzdHJ1Y3QgX19qbXBfYnVmIGptcF9idWZbMV07CisKKy0jZW5kaWYgLyogX1NFVEpNUF9IICovCisrI2VuZGlmIC8qIF9LTElCQ19BUkNIU0VUSk1QX0ggKi8KK2RpZmYgLS1naXQgYS9rbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaCBiL2luY2x1ZGUvYXJjaC9tMzJyL2tsaWJjL2FyY2hzZXRqbXAuaAorc2ltaWxhcml0eSBpbmRleCA2NiUKK3JlbmFtZSBmcm9tIGtsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCityZW5hbWUgdG8gaW5jbHVkZS9hcmNoL20zMnIva2xpYmMvYXJjaHNldGptcC5oCistLS0gYS9rbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorKysrIGIvaW5jbHVkZS9hcmNoL20zMnIva2xpYmMvYXJjaHNldGptcC5oCitAQCAtMSwyMSArMSwyMSBAQAorIC8qCistICogYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKysgKiBhcmNoL20zMnIvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKyAgKi8KKworICNpZm5kZWYgX0tMSUJDX0FSQ0hTRVRKTVBfSAorICNkZWZpbmUgX0tMSUJDX0FSQ0hTRVRKTVBfSAorCisgc3RydWN0IF9fam1wX2J1ZiB7CistICB1bnNpZ25lZCBsb25nIF9fcmJ4OworLSAgdW5zaWduZWQgbG9uZyBfX3JzcDsKKy0gIHVuc2lnbmVkIGxvbmcgX19yYnA7CisrICB1bnNpZ25lZCBsb25nIF9fcjg7CisrICB1bnNpZ25lZCBsb25nIF9fcjk7CisrICB1bnNpZ25lZCBsb25nIF9fcjEwOworKyAgdW5zaWduZWQgbG9uZyBfX3IxMTsKKyAgIHVuc2lnbmVkIGxvbmcgX19yMTI7CisgICB1bnNpZ25lZCBsb25nIF9fcjEzOworICAgdW5zaWduZWQgbG9uZyBfX3IxNDsKKyAgIHVuc2lnbmVkIGxvbmcgX19yMTU7CistICB1bnNpZ25lZCBsb25nIF9fcmlwOworIH07CisKKyB0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWYgam1wX2J1ZlsxXTsKKworLSNlbmRpZiAvKiBfU0VUSk1QX0ggKi8KKysjZW5kaWYgLyogX0tMSUJDX0FSQ0hTRVRKTVBfSCAqLworZGlmZiAtLWdpdCBhL2tsaWJjL1JFQURNRSBiL2tsaWJjL1JFQURNRQorLS0tIGEva2xpYmMvUkVBRE1FCisrKysgYi9rbGliYy9SRUFETUUKK0BAIC0xLDEgKzEsNCBAQAorIFRoaXMgaXMgYSBzaW1wbGUgcmVhZG1lIGZpbGUuCisrQW5kIHdlIGFkZCBhIGZldworK2xpbmVzIGF0IHRoZQorK2VuZCBvZiBpdC4KK2RpZmYgLS1naXQgYS9rbGliYy9SRUFETUUgYi9rbGliYy9hcmNoL1JFQURNRQorY29weSBmcm9tIGtsaWJjL1JFQURNRQorY29weSB0byBrbGliYy9hcmNoL1JFQURNRQorLS0tIGEva2xpYmMvUkVBRE1FCisrKysgYi9rbGliYy9hcmNoL1JFQURNRQorQEAgLTEsMSArMSwzIEBACisgVGhpcyBpcyBhIHNpbXBsZSByZWFkbWUgZmlsZS4KKytBbmQgd2UgY29weSBpdCB0byBvbmUgbGV2ZWwgZG93biwgYW5kCisrYWRkIGEgZmV3IGxpbmVzIGF0IHRoZSBlbmQgb2YgaXQuCitFT0YKKworZmluZCBrbGliYyAtdHlwZSBmIC1wcmludCB8IHhhcmdzIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmVuYW1lL2NvcHkgcGF0Y2gnICdnaXQgYXBwbHkgLS1jaGVjayBwYXRjaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcmVuYW1lL2NvcHkgcGF0Y2gnICdnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTEzLWFwcGx5LWVuZGluZy5zaCBiL3QvdDQxMTMtYXBwbHktZW5kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2ZmE1MTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEzLWFwcGx5LWVuZGluZy5zaApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IENhdGFsaW4gTWFyaW5hcworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgdHJ5aW5nIHRvIGFkZCBhbiBlbmRpbmcgbGluZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0dXAKKworY2F0ID50ZXN0LXBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwyICsxLDMgQEAKKyBhCisgYgorK2MKK0VPRgorCitlY2hvICdhJyA+ZmlsZQorZWNobyAnYicgPj5maWxlCitlY2hvICdjJyA+PmZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZScKKworIyB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGF0IHRoZSBlbmQnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggdGVzdC1wYXRjaCcKKworY2F0ID50ZXN0LXBhdGNoIDw8XEVPRgorZGlmZiBhL2ZpbGUgYi9maWxlCistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwyICsxLDMgQEAKKythCisgYgorIGMKK0VPRgorCitlY2hvID5maWxlICdhCitiCitjJworZ2l0IHVwZGF0ZS1pbmRleCBmaWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGF0IHRoZSBiZWdpbm5pbmcnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggdGVzdC1wYXRjaCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTE0LWFwcGx5LXR5cGVjaGFuZ2Uuc2ggYi90L3Q0MTE0LWFwcGx5LXR5cGVjaGFuZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWJhZGJjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIHdpdGggdHlwZSBjaGFuZ2VzLgorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IGFuZCBjb21taXRzJyAnCisJZWNobyAiaGVsbG8gd29ybGQiID4gZm9vICYmCisJZWNobyAiaGkgcGxhbmV0IiA+IGJhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggaW5pdGlhbCAmJgorCXJtIC1mIGZvbyAmJgorCXRlc3RfbG5fc19hZGQgYmFyIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImZvbyBzeW1saW5rZWQgdG8gYmFyIiAmJgorCWdpdCBicmFuY2ggZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKKwlnaXQgcm0gLWYgZm9vICYmCisJZWNobyAiaG93IGZhciBpcyB0aGUgc3VuPyIgPiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiYWNrIHRvIGZpbGUiICYmCisJZ2l0IGJyYW5jaCBmb28tYmFjay10by1maWxlICYmCisJcHJpbnRmICJcMCIgPiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZvbyAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiZWNvbWVzIGJpbmFyeSIgJiYKKwlnaXQgYnJhbmNoIGZvby1iZWNvbWVzLWJpbmFyeSAmJgorCXJtIC1mIGZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgZm9vICYmCisJbWtkaXIgZm9vICYmCisJZWNobyAiaWYgb25seSBJIGtuZXciID4gZm9vL2JheiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vL2JheiAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiZWNvbWVzIGEgZGlyZWN0b3J5IiAmJgorCWdpdCBicmFuY2ggImZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IiAmJgorCWVjaG8gImhlbGxvIHdvcmxkIiA+IGZvby9iYXogJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZvby9iYXogJiYKKwlnaXQgY29tbWl0IC1tICJmb28vYmF6IGlzIHRoZSBvcmlnaW5hbCBmb28iICYmCisJZ2l0IGJyYW5jaCBmb28tYmF6LXJlbmFtZWQtZnJvbS1mb28KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgcmVuYW1lZCBmcm9tIGZvbyB0byBmb28vYmF6JyAnCisJZ2l0IGNoZWNrb3V0IC1mIGluaXRpYWwgJiYKKwlnaXQgZGlmZi10cmVlIC1NIC1wIEhFQUQgZm9vLWJhei1yZW5hbWVkLWZyb20tZm9vID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgcmVuYW1lZCBmcm9tIGZvby9iYXogdG8gZm9vJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZvby1iYXotcmVuYW1lZC1mcm9tLWZvbyAmJgorCWdpdCBkaWZmLXRyZWUgLU0gLXAgSEVBRCBpbml0aWFsID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdG9yeSBiZWNvbWVzIGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgaW5pdGlhbCA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGJlY29tZXMgZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1mIGluaXRpYWwgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBiZWNvbWVzIHN5bWxpbmsnICcKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdGlhbCAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tc3ltbGlua2VkLXRvLWJhciA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1saW5rIGJlY29tZXMgZmlsZScgJworCWdpdCBjaGVja291dCAtZiBmb28tc3ltbGlua2VkLXRvLWJhciAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tYmFjay10by1maWxlID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaW5hcnkgZmlsZSBiZWNvbWVzIHN5bWxpbmsnICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLWJlY29tZXMtYmluYXJ5ICYmCisJZ2l0IGRpZmYtdHJlZSAtcCAtLWJpbmFyeSBIRUFEIGZvby1zeW1saW5rZWQtdG8tYmFyID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1saW5rIGJlY29tZXMgYmluYXJ5IGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKKwlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IEhFQUQgZm9vLWJlY29tZXMtYmluYXJ5ID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWxpbmsgYmVjb21lcyBkaXJlY3RvcnknICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IGJlY29tZXMgc3ltbGluaycgJworCWdpdCBjaGVja291dCAtZiBmb28tYmVjb21lcy1hLWRpcmVjdG9yeSAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tc3ltbGlua2VkLXRvLWJhciA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaCBiL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzJmY2RhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExNS1hcHBseS1zeW1saW5rLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHN5bWxpbmtzIGFuZCBwYXJ0aWFsIGZpbGVzCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJdGVzdF9sbl9zX2FkZCBwYXRoMS9wYXRoMi9wYXRoMy9wYXRoNC9wYXRoNSBsaW5rMSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwlybSAtZiBsaW5rPyAmJgorCisJdGVzdF9sbl9zX2FkZCBodGFwNiBsaW5rMSAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUReIEhFQUQgPnBhdGNoICAmJgorCWdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IHBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYXBwbHkgc3ltbGluayBwYXRjaCcgJworCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtcCA+cGF0Y2hlZCAmJgorCXRlc3RfY21wIHBhdGNoIHBhdGNoZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWluZGV4IHN5bWxpbmsgcGF0Y2gnICcKKworCWdpdCBjaGVja291dCAtZiBzaWRlICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtcCBIRUFEID5wYXRjaGVkICYmCisJdGVzdF9jbXAgcGF0Y2ggcGF0Y2hlZAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExNi1hcHBseS1yZXZlcnNlLnNoIGIvdC90NDExNi1hcHBseS1yZXZlcnNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI5OWU2NWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2gKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaW4gcmV2ZXJzZQorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBpIGluIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbjsgZG8gZWNobyAkaTsgZG9uZSA+ZmlsZTEgJiYKKwlwZXJsIC1wZSAieS9pamsvXFwwMDBcXDAwMVxcMDAyLyIgPGZpbGUxID5maWxlMiAmJgorCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCisJZm9yIGkgaW4gYSBiIGMgZyBoIGkgSiBLIEwgbSBvIG4gcCBxOyBkbyBlY2hvICRpOyBkb25lID5maWxlMSAmJgorCXBlcmwgLXBlICJ5L21vbi9cXDAwMFxcMDAxXFwwMDIvIiA8ZmlsZTEgPmZpbGUyICYmCisKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCWdpdCB0YWcgc2Vjb25kICYmCisKKwlnaXQgZGlmZiAtLWJpbmFyeSBpbml0aWFsIHNlY29uZCA+cGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBpbiBmb3J3YXJkJyAnCisKKwlUMD0kKGdpdCByZXYtcGFyc2UgInNlY29uZF57dHJlZX0iKSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtLWluZGV4IC0tYmluYXJ5IHBhdGNoICYmCisJVDE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0ICIkVDAiID0gIiRUMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaW4gcmV2ZXJzZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKwlnaXQgYXBwbHkgLS1yZXZlcnNlIC0tYmluYXJ5IC0taW5kZXggcGF0Y2ggJiYKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBkaWZmCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2VwYXJhdGUgcmVwb3NpdG9yeSBsYWNraW5nIHBvc3RpbWFnZScgJworCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PWluaXRpYWwvIGluaXRpYWwgfCAkVEFSIHhmIC0gJiYKKwkoCisJCWNkIGluaXRpYWwgJiYgZ2l0IGluaXQgJiYgZ2l0IGFkZCAuCisJKSAmJgorCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PXNlY29uZC8gc2Vjb25kIHwgJFRBUiB4ZiAtICYmCisJKAorCQljZCBzZWNvbmQgJiYgZ2l0IGluaXQgJiYgZ2l0IGFkZCAuCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGluIGZvcndhcmQgd2l0aG91dCBwb3N0aW1hZ2UnICcKKworCVQwPSQoZ2l0IHJldi1wYXJzZSAic2Vjb25kXnt0cmVlfSIpICYmCisJKAorCQljZCBpbml0aWFsICYmCisJCWdpdCBhcHBseSAtLWluZGV4IC0tYmluYXJ5IC4uL3BhdGNoICYmCisJCVQxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCXRlc3QgIiRUMCIgPSAiJFQxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaW4gcmV2ZXJzZSB3aXRob3V0IHBvc3RpbWFnZScgJworCisJVDA9JChnaXQgcmV2LXBhcnNlICJpbml0aWFsXnt0cmVlfSIpICYmCisJKAorCQljZCBzZWNvbmQgJiYKKwkJZ2l0IGFwcGx5IC0taW5kZXggLS1iaW5hcnkgLS1yZXZlcnNlIC4uL3BhdGNoICYmCisJCVQxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCXRlc3QgIiRUMCIgPSAiJFQxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJzaW5nIGEgd2hpdGVzcGFjZSBpbnRyb2R1Y3Rpb24nICcKKwlzZWQgInMvYS9hIC8iIDwgZmlsZTEgPiBmaWxlMS5uZXcgJiYKKwltdiBmaWxlMS5uZXcgZmlsZTEgJiYKKwlnaXQgZGlmZiB8IGdpdCBhcHBseSAtLXJldmVyc2UgLS13aGl0ZXNwYWNlPWVycm9yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExNy1hcHBseS1yZWplY3Quc2ggYi90L3Q0MTE3LWFwcGx5LXJlamVjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZWU5M2ZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExNy1hcHBseS1yZWplY3Quc2gKQEAgLTAsMCArMSwxMTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHdpdGggcmVqZWN0cworCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlMSAmJgorCWNhdCBmaWxlMSA+c2F2ZWQuZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlmb3IgaSBpbiAxIDIgQSBCIDQgNSA2IDcgOCA5IDEwIDExIDEyIEMgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgRCAyMQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlMSAmJgorCWdpdCBkaWZmID5wYXRjaC4xICYmCisJY2F0IGZpbGUxID5jbGVhbiAmJgorCisJZm9yIGkgaW4gMSBFIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiBDIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIEYgMjEKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZXhwZWN0ZWQgJiYKKworCW12IGZpbGUxIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBmaWxlMSBmaWxlMiAmJgorCWdpdCBkaWZmIC1NIEhFQUQgPnBhdGNoLjIgJiYKKworCXJtIC1mIGZpbGUxIGZpbGUyICYmCisJbXYgc2F2ZWQuZmlsZTEgZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZpbGUxIGZpbGUyICYmCisKKwlmb3IgaSBpbiAxIEUgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIEYgMjEKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZTEgJiYKKworCWNhdCBmaWxlMSA+c2F2ZWQuZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1yZWplY3QgaXMgaW5jb21wYXRpYmxlIHdpdGggLS0zd2F5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjYXQgc2F2ZWQuZmlsZTEgPmZpbGUxIiAmJgorCWdpdCBkaWZmID5wYXRjaC4wICYmCisJZ2l0IGNoZWNrb3V0IGZpbGUxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tcmVqZWN0IC0tM3dheSBwYXRjaC4wICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aG91dCAtLXJlamVjdCBzaG91bGQgZmFpbCcgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoLjEgJiYKKwl0ZXN0X2NtcCBmaWxlMSBzYXZlZC5maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRob3V0IC0tcmVqZWN0IHNob3VsZCBmYWlsJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS12ZXJib3NlIHBhdGNoLjEgJiYKKwl0ZXN0X2NtcCBmaWxlMSBzYXZlZC5maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tcmVqZWN0IHNob3VsZCBmYWlsIGJ1dCB1cGRhdGUgdGhlIGZpbGUnICcKKworCWNhdCBzYXZlZC5maWxlMSA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlMS5yZWogZmlsZTIucmVqICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1yZWplY3QgcGF0Y2guMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUxICYmCisKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMS5yZWogJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMi5yZWoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLXJlamVjdCBzaG91bGQgZmFpbCBidXQgdXBkYXRlIHRoZSBmaWxlJyAnCisKKwljYXQgc2F2ZWQuZmlsZTEgPmZpbGUxICYmCisJcm0gLWYgZmlsZTEucmVqIGZpbGUyLnJlaiBmaWxlMiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tcmVqZWN0IHBhdGNoLjIgPnJlamVjdHMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUyICYmCisKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMi5yZWogJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMS5yZWoKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgc2FtZSB0ZXN0IHdpdGggLS12ZXJib3NlJyAnCisKKwljYXQgc2F2ZWQuZmlsZTEgPmZpbGUxICYmCisJcm0gLWYgZmlsZTEucmVqIGZpbGUyLnJlaiBmaWxlMiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tcmVqZWN0IC0tdmVyYm9zZSBwYXRjaC4yID5yZWplY3RzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMiAmJgorCisJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIucmVqICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTEucmVqCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY2xlYW5seSB3aXRoIC0tdmVyYm9zZScgJworCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQ6ZmlsZTEgPmZpbGUxICYmCisJcm0gLWYgZmlsZT8ucmVqIGZpbGUyICYmCisKKwlnaXQgYXBwbHkgLS12ZXJib3NlIHBhdGNoLjEgJiYKKworCXRlc3RfY21wIGZpbGUxIGNsZWFuCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoIGIvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1ZjJlNGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTE4LWFwcGx5LWVtcHR5LWNvbnRleHQuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgd2l0aCBuZXcgc3R5bGUgR05VIGRpZmYgd2l0aCBlbXB0eSBjb250ZXh0CisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXsKKwkJZWNobzsgZWNobzsKKwkJZWNobyBBOyBlY2hvIEI7IGVjaG8gQzsKKwkJZWNobzsKKwl9ID5maWxlMSAmJgorCWNhdCBmaWxlMSA+ZmlsZTEub3JpZyAmJgorCXsKKwkJY2F0IGZpbGUxICYmCisJCWVjaG8gUSB8IHRyIC1kICJcXDAxMiIKKwl9ID5maWxlMiAmJgorCWNhdCBmaWxlMiA+ZmlsZTIub3JpZyAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlzZWQgLWUgIi9eQi9kIiA8ZmlsZTEub3JpZyA+ZmlsZTEgJiYKKwljYXQgZmlsZTEgPiBmaWxlMiAmJgorCWVjaG8gUSB8IHRyIC1kICJcXDAxMiIgPj5maWxlMiAmJgorCWNhdCBmaWxlMSA+ZmlsZTEubW9kcyAmJgorCWNhdCBmaWxlMiA+ZmlsZTIubW9kcyAmJgorCWdpdCBkaWZmIHwKKwlzZWQgLWUgInMvXiBcJC8vIiA+ZGlmZi5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0JyAnCisKKwlnaXQgYXBwbHkgLS1udW1zdGF0IGRpZmYub3V0cHV0ID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIjAJMQlmaWxlMSIgJiYKKwkJZWNobyAiMAkxCWZpbGUyIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWFwcGx5JyAnCisKKwljYXQgZmlsZTEub3JpZyA+ZmlsZTEgJiYKKwljYXQgZmlsZTIub3JpZyA+ZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUxIGZpbGUyICYmCisJZ2l0IGFwcGx5IC0taW5kZXggZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBmaWxlMS5tb2RzIGZpbGUxICYmCisJdGVzdF9jbXAgZmlsZTIubW9kcyBmaWxlMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTktYXBwbHktY29uZmlnLnNoIGIvdC90NDExOS1hcHBseS1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTlhMDU4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTktYXBwbHktY29uZmlnLnNoCkBAIC0wLDAgKzEsMTc5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgc3ViICYmCisJZWNobyBBID5zdWIvZmlsZTEgJiYKKwljcCBzdWIvZmlsZTEgc2F2ZWQgJiYKKwlnaXQgYWRkIHN1Yi9maWxlMSAmJgorCWVjaG8gIkIgIiA+c3ViL2ZpbGUxICYmCisJZ2l0IGRpZmYgPnBhdGNoLmZpbGUKKycKKworIyBBbHNvIGhhbmRjcmFmdCBHTlUgZGlmZiBvdXRwdXQ7IG5vdGUgdGhpcyBoYXMgdHJhaWxpbmcgd2hpdGVzcGFjZS4KK3RyICdfJyAnICcgPmdwYXRjaC5maWxlIDw8XEVPRiAmJgorLS0tIGZpbGUxCTIwMDctMDItMjEgMDE6MDQ6MjQuMDAwMDAwMDAwIC0wODAwCisrKysgZmlsZTErCTIwMDctMDItMjEgMDE6MDc6NDQuMDAwMDAwMDAwIC0wODAwCitAQCAtMSArMSBAQAorLUEKKytCXworRU9GCisKK3NlZCAtZSAnc3xmaWxlMXxzdWIvJnwnIGdwYXRjaC5maWxlID5ncGF0Y2gtc3ViLmZpbGUgJiYKK3NlZCAtZSAnCisJL14tLS0gL3N8ZmlsZTF8YS9zdWIvJnwKKwkvXisrKyAvc3xmaWxlMXxiL3N1Yi8mfAorJyBncGF0Y2guZmlsZSA+Z3BhdGNoLWFiLXN1Yi5maWxlICYmCisKK2NoZWNrX3Jlc3VsdCAoKSB7CisJaWYgZ3JlcCAiICIgIiQxIgorCXRoZW4KKwkJZWNobyAiRWg/IgorCQlmYWxzZQorCWVsaWYgZ3JlcCBCICIkMSIKKwl0aGVuCisJCWVjaG8gSGFwcHkKKwllbHNlCisJCWVjaG8gIkh1aD8iCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwJyAnCisKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1zdHJpcCBwYXRjaC5maWxlICYmCisJY2hlY2tfcmVzdWx0IHN1Yi9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgZnJvbSBjb25maWcnICcKKworCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlnaXQgYXBwbHkgcGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBzdWIvZmlsZTEKKycKKworRD0kKHB3ZCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwIGluIHN1YmRpcicgJworCisJY2QgIiREIiAmJgorCWdpdCBjb25maWcgLS11bnNldC1hbGwgYXBwbHkud2hpdGVzcGFjZSAmJgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwljZCBzdWIgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwIC4uL3BhdGNoLmZpbGUgJiYKKwljaGVja19yZXN1bHQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwIGZyb20gY29uZmlnIGluIHN1YmRpcicgJworCisJY2QgIiREIiAmJgorCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBzdHJpcCAmJgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwljZCBzdWIgJiYKKwlnaXQgYXBwbHkgLi4vcGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGluIHN1YmRpciBidXQgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCcgJworCisJY2QgIiREIiAmJgorCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBzdHJpcCAmJgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwljZCBzdWIgJiYKKwlnaXQgYXBwbHkgLi4vZ3BhdGNoLmZpbGUgJiYKKwljaGVja19yZXN1bHQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSBidXQgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCBvZiBkZXB0aCAxJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9ncGF0Y2gtc3ViLmZpbGUgJiYKKwljaGVja19yZXN1bHQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSBidXQgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCBvZiBkZXB0aCAyJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9ncGF0Y2gtYWItc3ViLmZpbGUgJiYKKwljaGVja19yZXN1bHQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSBidXQgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCBvZiBkZXB0aCAxJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWdpdCBhcHBseSAtcDAgZ3BhdGNoLXN1Yi5maWxlICYmCisJY2hlY2tfcmVzdWx0IHN1Yi9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0IG9mIGRlcHRoIDInICcKKworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IGFwcGx5IGdwYXRjaC1hYi1zdWIuZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBzdWIvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4gc3ViZGlyIHdpdGggdHJhZGl0aW9uYWwgcGF0Y2ggaW5wdXQnICcKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJY2F0ID4uZ2l0YXR0cmlidXRlcyA8PC1FT0YgJiYKKwkvKiB3aGl0ZXNwYWNlPWJsYW5rLWF0LWVvbAorCXN1Yi8qIHdoaXRlc3BhY2U9LWJsYW5rLWF0LWVvbAorCUVPRgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwljZCBzdWIgJiYKKwlnaXQgYXBwbHkgLi4vZ3BhdGNoLmZpbGUgJiYKKwllY2hvICJCICIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjAtYXBwbHktcG9wdC5zaCBiL3QvdDQxMjAtYXBwbHktcG9wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OTdiNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyMC1hcHBseS1wb3B0LnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgU2hhd24gTy4gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtcCBoYW5kbGluZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBzdWIgJiYKKwllY2hvIEEgPnN1Yi9maWxlMSAmJgorCWNwIHN1Yi9maWxlMSBmaWxlMS5zYXZlZCAmJgorCWdpdCBhZGQgc3ViL2ZpbGUxICYmCisJZWNobyBCID5zdWIvZmlsZTEgJiYKKwlnaXQgZGlmZiA+cGF0Y2guZmlsZSAmJgorCWdpdCBjaGVja291dCAtLSBzdWIvZmlsZTEgJiYKKwlnaXQgbXYgc3ViIHPDvGIgJiYKKwllY2hvIEIgPnPDvGIvZmlsZTEgJiYKKwlnaXQgZGlmZiA+cGF0Y2guZXNjYXBlZCAmJgorCWdyZXAgIltcXSIgcGF0Y2guZXNjYXBlZCAmJgorCXJtIHPDvGIvZmlsZTEgJiYKKwlybWRpciBzw7xiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGdpdCBkaWZmIHdpdGggLXAyJyAnCisJY3AgZmlsZTEuc2F2ZWQgZmlsZTEgJiYKKwlnaXQgYXBwbHkgLXAyIHBhdGNoLmZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCB0b28gbGFyZ2UgLXAnICcKKwljcCBmaWxlMS5zYXZlZCBmaWxlMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXN0YXQgLXAzIHBhdGNoLmZpbGUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW1vdmluZyAzIGxlYWRpbmciIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAoLXAyKSB0cmFkaXRpb25hbCBkaWZmIHdpdGggZnVubnkgZmlsZW5hbWVzJyAnCisJY2F0ID5wYXRjaC5xdW90ZXMgPDwtXEVPRiAmJgorCWRpZmYgLXUgImEvInN1Yi9maWxlMSAiYi8ic3ViL2ZpbGUxCisJLS0tICJhLyJzdWIvZmlsZTEKKwkrKysgImIvInN1Yi9maWxlMQorCUBAIC0xICsxIEBACisJLUEKKwkrQgorCUVPRgorCWVjaG8gQiA+ZXhwZWN0ZWQgJiYKKworCWNwIGZpbGUxLnNhdmVkIGZpbGUxICYmCisJZ2l0IGFwcGx5IC1wMiBwYXRjaC5xdW90ZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIHRvbyBsYXJnZSAtcCBhbmQgZmFuY3kgZmlsZW5hbWUnICcKKwljcCBmaWxlMS5zYXZlZCBmaWxlMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXN0YXQgLXAzIHBhdGNoLmVzY2FwZWQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW1vdmluZyAzIGxlYWRpbmciIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAoLXAyKSBkaWZmLCBtb2RlIGNoYW5nZSBvbmx5JyAnCisJY2F0ID5wYXRjaC5jaG1vZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL3N1Yi9maWxlMSBiL3N1Yi9maWxlMQorCW9sZCBtb2RlIDEwMDY0NAorCW5ldyBtb2RlIDEwMDc1NQorCUVPRgorCXRlc3RfY2htb2QgLXggZmlsZTEgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCAtcDIgcGF0Y2guY2htb2QgJiYKKwljYXNlICQoZ2l0IGxzLWZpbGVzIC1zIGZpbGUxKSBpbiAxMDA3NTUqKSA6IGdvb2Q7OyAqKSBmYWxzZTs7IGVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnZmlsZSBtb2RlIHdhcyBjaGFuZ2VkJyAnCisJdGVzdCAteCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAoLXAyKSBkaWZmLCByZW5hbWUnICcKKwljYXQgPnBhdGNoLnJlbmFtZSA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL3N1Yi9maWxlMSBiL3N1Yi9maWxlMgorCXNpbWlsYXJpdHkgaW5kZXggMTAwJQorCXJlbmFtZSBmcm9tIHN1Yi9maWxlMQorCXJlbmFtZSB0byBzdWIvZmlsZTIKKwlFT0YKKwllY2hvIEEgPmV4cGVjdGVkICYmCisKKwljcCBmaWxlMS5zYXZlZCBmaWxlMSAmJgorCXJtIC1mIGZpbGUyICYmCisJZ2l0IGFwcGx5IC1wMiBwYXRjaC5yZW5hbWUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjEtYXBwbHktZGlmZnMuc2ggYi90L3Q0MTIxLWFwcGx5LWRpZmZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2MzY4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTIxLWFwcGx5LWRpZmZzLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgZm9yIGNvbnRleHR1YWxseSBpbmRlcGVuZGVudCBkaWZmcycKKy4gLi90ZXN0LWxpYi5zaAorCitlY2hvICcxCisyCiszCis0Cis1Cis2Cis3Cis4JyA+ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgXAorCSdnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1xIC1tIDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCAmJgorCW12IGZpbGUgZmlsZS50bXAgJiYKKwllY2hvIDAgPmZpbGUgJiYKKwljYXQgZmlsZS50bXAgPj5maWxlICYmCisJcm0gZmlsZS50bXAgJiYKKwlnaXQgY29tbWl0IC1hIC1xIC1tIDIgJiYKKwllY2hvIDkgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtcSAtbSAzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZWNrIGlmIGNvbnRleHR1YWxseSBpbmRlcGVuZGVudCBkaWZmcyBmb3IgdGhlIHNhbWUgZmlsZSBhcHBseScgXAorCScoIGdpdCBkaWZmIHRlc3R+MiB0ZXN0fjEgJiYgZ2l0IGRpZmYgdGVzdH4xIHRlc3R+MCApfCBnaXQgYXBwbHknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyMi1hcHBseS1zeW1saW5rLWluc2lkZS5zaCBiL3QvdDQxMjItYXBwbHktc3ltbGluay1pbnNpZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGFjYjNmMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjItYXBwbHktc3ltbGluay1pbnNpZGUuc2gKQEAgLTAsMCArMSwxNTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSB0byBkZWVwZXIgZGlyZWN0b3J5IHdpdGhvdXQgZ2V0dGluZyBmb29sZWQgd2l0aCBzeW1saW5rJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJbWtkaXIgLXAgYXJjaC9pMzg2L2Jvb3QgYXJjaC94ODZfNjQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA+YXJjaC9pMzg2L2Jvb3QvTWFrZWZpbGUgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uL2kzODYvYm9vdCBhcmNoL3g4Nl82NC9ib290ICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCB0ZXN0ICYmCisKKwlybSBhcmNoL3g4Nl82NC9ib290ICYmCisJbWtkaXIgYXJjaC94ODZfNjQvYm9vdCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMiAzIDQgNSA2ID5hcmNoL3g4Nl82NC9ib290L01ha2VmaWxlICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1iaW5hcnkgLTEgLS1zdGRvdXQgPnRlc3QucGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGFwcGx5ICcKKworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgdGVzdCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIHRlc3QgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCB0ZXN0LnBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmVzdWx0JyAnCisKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJlcGxheSAmJgorCVQxPSQoZ2l0IHJldi1wYXJzZSAibWFzdGVyXnt0cmVlfSIpICYmCisJVDI9JChnaXQgcmV2LXBhcnNlICJIRUFEXnt0cmVlfSIpICYmCisJdGVzdCAieiRUMSIgPSAieiRUMiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkbyBub3QgcmVhZCBmcm9tIGJleW9uZCBzeW1ib2xpYyBsaW5rJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW1rZGlyIC1wIGFyY2gveDg2XzY0L2RpciAmJgorCT5hcmNoL3g4Nl82NC9kaXIvZmlsZSAmJgorCWdpdCBhZGQgYXJjaC94ODZfNjQvZGlyL2ZpbGUgJiYKKwllY2hvIGxpbmUgPmFyY2gveDg2XzY0L2Rpci9maWxlICYmCisJZ2l0IGRpZmYgPnBhdGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJbWtkaXIgYXJjaC9pMzg2L2RpciAmJgorCT5hcmNoL2kzODYvZGlyL2ZpbGUgJiYKKwlsbiAtcyAuLi9pMzg2L2RpciBhcmNoL3g4Nl82NC9kaXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IHBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rIChzZXR1cCknICcKKworCXJtIC1yZiBhcmNoL2kzODYvZGlyIGFyY2gveDg2XzY0L2RpciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlsbiAtcyAuLi9pMzg2L2RpciBhcmNoL3g4Nl82NC9kaXIgJiYKKwlnaXQgYWRkIGFyY2gveDg2XzY0L2RpciAmJgorCWdpdCBkaWZmIEhFQUQgPmFkZF9zeW1saW5rLnBhdGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJbWtkaXIgYXJjaC94ODZfNjQvZGlyICYmCisJPmFyY2gveDg2XzY0L2Rpci9maWxlICYmCisJZ2l0IGFkZCBhcmNoL3g4Nl82NC9kaXIvZmlsZSAmJgorCWdpdCBkaWZmIEhFQUQgPmFkZF9maWxlLnBhdGNoICYmCisJZ2l0IGRpZmYgLVIgSEVBRCA+ZGVsX2ZpbGUucGF0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWZyIGFyY2gveDg2XzY0L2RpciAmJgorCisJY2F0IGFkZF9zeW1saW5rLnBhdGNoIGFkZF9maWxlLnBhdGNoID5wYXRjaCAmJgorCWNhdCBhZGRfc3ltbGluay5wYXRjaCBkZWxfZmlsZS5wYXRjaCA+dHJpY2t5X2RlbCAmJgorCisJbWtkaXIgYXJjaC9pMzg2L2RpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkbyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmsgKHNhbWUgaW5wdXQpJyAnCisKKwkjIHNhbWUgaW5wdXQgY3JlYXRlcyBhIGNvbmZ1c2luZyBzeW1ib2xpYyBsaW5rCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoIDI+ZXJyb3Itd3QgJiYKKwl0ZXN0X2kxOG5ncmVwICJiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiBlcnJvci13dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFyY2gveDg2XzY0L2RpciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggMj5lcnJvci1peCAmJgorCXRlc3RfaTE4bmdyZXAgImJleW9uZCBhIHN5bWJvbGljIGxpbmsiIGVycm9yLWl4ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYXJjaC94ODZfNjQvZGlyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYXJjaC9pMzg2L2Rpci9maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL3g4Nl82NC9kaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gvaTM4Ni9kaXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaCAyPmVycm9yLWN0ICYmCisJdGVzdF9pMThuZ3JlcCAiYmV5b25kIGEgc3ltYm9saWMgbGluayIgZXJyb3ItY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gveDg2XzY0L2RpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC9pMzg2L2RpciAmJgorCisJPmFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCWdpdCBhZGQgYXJjaC9pMzg2L2Rpci9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgdHJpY2t5X2RlbCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggdHJpY2t5X2RlbCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC94ODZfNjQvZGlyICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL2kzODYvZGlyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jYWNoZWQgdHJpY2t5X2RlbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC94ODZfNjQvZGlyICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL2kzODYvZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGluayAoZXhpc3RpbmcpJyAnCisKKwkjIGV4aXN0aW5nIHN5bWJvbGljIGxpbmsKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbG4gLXMgLi4vaTM4Ni9kaXIgYXJjaC94ODZfNjQvZGlyICYmCisJZ2l0IGFkZCBhcmNoL3g4Nl82NC9kaXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBhZGRfZmlsZS5wYXRjaCAyPmVycm9yLXd0LWFkZCAmJgorCXRlc3RfaTE4bmdyZXAgImJleW9uZCBhIHN5bWJvbGljIGxpbmsiIGVycm9yLXd0LWFkZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCisJbWtkaXIgYXJjaC9pMzg2L2RpciAmJgorCT5hcmNoL2kzODYvZGlyL2ZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgZGVsX2ZpbGUucGF0Y2ggMj5lcnJvci13dC1kZWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiBlcnJvci13dC1kZWwgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKwlybSBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IGFkZF9maWxlLnBhdGNoIDI+ZXJyb3ItaXgtYWRkICYmCisJdGVzdF9pMThuZ3JlcCAiYmV5b25kIGEgc3ltYm9saWMgbGluayIgZXJyb3ItaXgtYWRkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYXJjaC9pMzg2L2Rpci9maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL2kzODYvZGlyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jYWNoZWQgYWRkX2ZpbGUucGF0Y2ggMj5lcnJvci1jdC1maWxlICYmCisJdGVzdF9pMThuZ3JlcCAiYmV5b25kIGEgc3ltYm9saWMgbGluayIgZXJyb3ItY3QtZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC9pMzg2L2RpcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjMtYXBwbHktc2hyaW5rLnNoIGIvdC90NDEyMy1hcHBseS1zaHJpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTg0MTU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjMtYXBwbHktc2hyaW5rLnNoCkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSBhIHBhdGNoIHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIHByZWltYWdlJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5GICA8PFxFT0YKKzEKKzIKKzMKKzQKKzUKKzYKKzcKKzgKKzk5OTk5OQorQQorQgorQworRAorRQorRgorRworSAorSQorSgorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgYWRkIEYgJiYKKwltdiBGIEcgJiYKKwlzZWQgLWUgInMvMS8xMS8iIC1lICJzLzk5OTk5OS85LyIgLWUgInMvSC9ISC8iIDxHID5GICYmCisJZ2l0IGRpZmYgPnBhdGNoICYmCisJc2VkIC1lICIvXlwkL2QiIDxHID5GICYmCisJZ2l0IGFkZCBGCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2hvdWxkIGZhaWwgZ3JhY2VmdWxseScgJworCisJaWYgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gKKwl0aGVuCisJCWVjaG8gT29wcywgc2hvdWxkIG5vdCBoYXZlIHN1Y2NlZWRlZAorCQlmYWxzZQorCWVsc2UKKwkJc3RhdHVzPSQ/CisJCWVjaG8gIlN0YXR1cyB3YXMgJHN0YXR1cyIKKwkJaWYgdGVzdCAtZiAuZ2l0L2luZGV4LmxvY2sKKwkJdGhlbgorCQkJZWNobyBPb3BzLCBzaG91bGQgbm90IGhhdmUgY3Jhc2hlZAorCQkJZmFsc2UKKwkJZmkKKwlmaQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjQtYXBwbHktd3MtcnVsZS5zaCBiL3QvdDQxMjQtYXBwbHktd3MtcnVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NzFhNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyNC1hcHBseS13cy1ydWxlLnNoCkBAIC0wLDAgKzEsNTUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29yZS53aGl0ZXNwYWNlIHJ1bGVzIGFuZCBnaXQgYXBwbHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitwcmVwYXJlX3Rlc3RfZmlsZSAoKSB7CisKKwkjIEEgbGluZSB0aGF0IGhhcyBjaGFyYWN0ZXIgWCBpcyB0b3VjaGVkIGlmZiBSVUxFIGlzIGluIGVmZmVjdDoKKwkjICAgICAgIFggIFJVTEUKKwkjICAgCSEgIHRyYWlsaW5nLXNwYWNlCisJIyAgIAlAICBzcGFjZS1iZWZvcmUtdGFiCisJIyAgIAkjICBpbmRlbnQtd2l0aC1ub24tdGFiIChkZWZhdWx0IHRhYiB3aWR0aCA4KQorCSMJPSAgaW5kZW50LXdpdGgtbm9uLXRhYix0YWJ3aWR0aD0xNgorCSMgICAJJSAgdGFiLWluLWluZGVudAorCXNlZCAtZSAicy9fLyAvZyIgLWUgInMvPi8JLyIgPDwtXEVPRgorCQlBbl9TUCBpbiBhbiBvcmRpbmFyeSBsaW5lPmFuZCBhIEhULgorCQk+QSBIVCAoJSkuCisJCV8+QSBTUCBhbmQgYSBIVCAoQCUpLgorCQlfPl9BIFNQLCBhIEhUIGFuZCBhIFNQIChAJSkuCisJCV9fX19fX19TZXZlbiBTUC4KKwkJX19fX19fX19FaWdodCBTUCAoIykuCisJCV9fX19fX18+U2V2ZW4gU1AgYW5kIGEgSFQgKEAlKS4KKwkJX19fX19fX18+RWlnaHQgU1AgYW5kIGEgSFQgKEAjJSkuCisJCV9fX19fX18+X1NldmVuIFNQLCBhIEhUIGFuZCBhIFNQIChAJSkuCisJCV9fX19fX19fPl9FaWdodCBTUCwgYSBIVCBhbmQgYSBTUCAoQCMlKS4KKwkJX19fX19fX19fX19fX19fRmlmdGVlbiBTUCAoIykuCisJCV9fX19fX19fX19fX19fXz5GaWZ0ZWVuIFNQIGFuZCBhIEhUIChAIyUpLgorCQlfX19fX19fX19fX19fX19fU2l4dGVlbiBTUCAoIz0pLgorCQlfX19fX19fX19fX19fX19fPlNpeHRlZW4gU1AgYW5kIGEgSFQgKEAjJT0pLgorCQlfX19fX2FfX0ZpdmUgU1AsIGEgbm9uIFdTLCB0d28gU1AuCisJCUEgbGluZSB3aXRoIGEgKCEpIHRyYWlsaW5nIFNQXworCQlBIGxpbmUgd2l0aCBhICghKSB0cmFpbGluZyBIVD4KKwlFT0YKK30KKworYXBwbHlfcGF0Y2ggKCkgeworCWNtZF9wcmVmaXg9ICYmCisJaWYgdGVzdCAieCQxIiA9ICd4IScKKwl0aGVuCisJCWNtZF9wcmVmaXg9dGVzdF9tdXN0X2ZhaWwgJiYKKwkJc2hpZnQKKwlmaSAmJgorCT50YXJnZXQgJiYKKwlzZWQgLWUgInN8XChbYWJdXCkvZmlsZXxcMS90YXJnZXR8IiA8cGF0Y2ggfAorCSRjbWRfcHJlZml4IGdpdCBhcHBseSAiJEAiCit9CisKK3Rlc3RfZml4ICgpIHsKKwkjIGZpeCBzaG91bGQgbm90IGJhcmYKKwlhcHBseV9wYXRjaCAtLXdoaXRlc3BhY2U9Zml4IHx8IHJldHVybiAxCisKKwkjIGZpbmQgdG91Y2hlZCBsaW5lcworCSRESUZGIGZpbGUgdGFyZ2V0IHwgc2VkIC1uIC1lICJzL14+IC8vcCIgPmZpeGVkCisKKwkjIHRoZSBjaGFuZ2VkIGxpbmVzIGFyZSBhbGwgZXhwZWN0ZWQgdG8gY2hhbmdlCisJZml4ZWRfY250PSQod2MgLWwgPGZpeGVkKQorCWNhc2UgIiQxIiBpbgorCScnKSBleHBlY3RfY250PSRmaXhlZF9jbnQgOzsKKwk/KikgZXhwZWN0X2NudD0kKGdyZXAgIlskMV0iIDxmaXhlZCB8IHdjIC1sKSA7OworCWVzYWMKKwl0ZXN0ICRmaXhlZF9jbnQgLWVxICRleHBlY3RfY250IHx8IHJldHVybiAxCisKKwkjIGFuZCB3ZSBhcmUgbm90IG1pc3NpbmcgYW55dGhpbmcKKwljYXNlICIkMSIgaW4KKwknJykgZXhwZWN0X2NudD0wIDs7CisJPyopIGV4cGVjdF9jbnQ9JChncmVwICJbJDFdIiA8ZmlsZSB8IHdjIC1sKSA7OworCWVzYWMKKwl0ZXN0ICRmaXhlZF9jbnQgLWVxICRleHBlY3RfY250IHx8IHJldHVybiAxCisKKwkjIEdldCB0aGUgcGF0Y2ggYWN0dWFsbHkgYXBwbGllZAorCWdpdCBkaWZmLWZpbGVzIC1wIHRhcmdldCA+Zml4ZWQtcGF0Y2gKKwl0ZXN0IC1zIGZpeGVkLXBhdGNoICYmIHJldHVybiAwCisKKwkjIE1ha2Ugc3VyZSBpdCBpcyBjb21wbGFpbnQtZnJlZQorCT50YXJnZXQKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWVycm9yLWFsbCA8Zml4ZWQtcGF0Y2gKKworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJcHJlcGFyZV90ZXN0X2ZpbGUgPmZpbGUgJiYKKwlnaXQgZGlmZi1maWxlcyAtcCA+cGF0Y2ggJiYKKwk+dGFyZ2V0ICYmCisJZ2l0IGFkZCB0YXJnZXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlPW5vd2FybiwgZGVmYXVsdCBydWxlJyAnCisKKwlhcHBseV9wYXRjaCAtLXdoaXRlc3BhY2U9bm93YXJuICYmCisJdGVzdF9jbXAgZmlsZSB0YXJnZXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlPXdhcm4sIGRlZmF1bHQgcnVsZScgJworCisJYXBwbHlfcGF0Y2ggLS13aGl0ZXNwYWNlPXdhcm4gJiYKKwl0ZXN0X2NtcCBmaWxlIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9ZXJyb3ItYWxsLCBkZWZhdWx0IHJ1bGUnICcKKworCWFwcGx5X3BhdGNoICEgLS13aGl0ZXNwYWNlPWVycm9yLWFsbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB0YXJnZXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlPWVycm9yLWFsbCwgbm8gcnVsZScgJworCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgLXRyYWlsaW5nLC1zcGFjZS1iZWZvcmUsLWluZGVudCAmJgorCWFwcGx5X3BhdGNoIC0td2hpdGVzcGFjZT1lcnJvci1hbGwgJiYKKwl0ZXN0X2NtcCBmaWxlIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9ZXJyb3ItYWxsLCBubyBydWxlIChhdHRyaWJ1dGUpJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJZWNobyAidGFyZ2V0IC13aGl0ZXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlhcHBseV9wYXRjaCAtLXdoaXRlc3BhY2U9ZXJyb3ItYWxsICYmCisJdGVzdF9jbXAgZmlsZSB0YXJnZXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGFjZXMgaW5zZXJ0ZWQgYnkgdGFiLWluLWluZGVudCcgJworCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgLXRyYWlsaW5nLC1zcGFjZSwtaW5kZW50LHRhYiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9maXggJSAmJgorCXNlZCAtZSAicy9fLyAvZyIgLWUgInMvPi8JLyIgPDwtXEVPRiA+ZXhwZWN0ICYmCisJCUFuX1NQIGluIGFuIG9yZGluYXJ5IGxpbmU+YW5kIGEgSFQuCisJCV9fX19fX19fQSBIVCAoJSkuCisJCV9fX19fX19fQSBTUCBhbmQgYSBIVCAoQCUpLgorCQlfX19fX19fX19BIFNQLCBhIEhUIGFuZCBhIFNQIChAJSkuCisJCV9fX19fX19TZXZlbiBTUC4KKwkJX19fX19fX19FaWdodCBTUCAoIykuCisJCV9fX19fX19fU2V2ZW4gU1AgYW5kIGEgSFQgKEAlKS4KKwkJX19fX19fX19fX19fX19fX0VpZ2h0IFNQIGFuZCBhIEhUIChAIyUpLgorCQlfX19fX19fX19TZXZlbiBTUCwgYSBIVCBhbmQgYSBTUCAoQCUpLgorCQlfX19fX19fX19fX19fX19fX0VpZ2h0IFNQLCBhIEhUIGFuZCBhIFNQIChAIyUpLgorCQlfX19fX19fX19fX19fX19GaWZ0ZWVuIFNQICgjKS4KKwkJX19fX19fX19fX19fX19fX0ZpZnRlZW4gU1AgYW5kIGEgSFQgKEAjJSkuCisJCV9fX19fX19fX19fX19fX19TaXh0ZWVuIFNQICgjPSkuCisJCV9fX19fX19fX19fX19fX19fX19fX19fX1NpeHRlZW4gU1AgYW5kIGEgSFQgKEAjJT0pLgorCQlfX19fX2FfX0ZpdmUgU1AsIGEgbm9uIFdTLCB0d28gU1AuCisJCUEgbGluZSB3aXRoIGEgKCEpIHRyYWlsaW5nIFNQXworCQlBIGxpbmUgd2l0aCBhICghKSB0cmFpbGluZyBIVD4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgdGFyZ2V0CisKKycKKworZm9yIHQgaW4gLSAnJworZG8KKwljYXNlICIkdCIgaW4gJycpIHR0PSchJyA7OyAqKSB0dD0gOzsgZXNhYworCWZvciBzIGluIC0gJycKKwlkbworCQljYXNlICIkcyIgaW4gJycpIHRzPSdAJyA7OyAqKSB0cz0gOzsgZXNhYworCQlmb3IgaSBpbiAtICcnCisJCWRvCisJCQljYXNlICIkaSIgaW4gJycpIHRpPScjJyB0aTE2PSc9Jzs7ICopIHRpPSB0aTE2PSA7OyBlc2FjCisJCQlmb3IgaCBpbiAtICcnCisJCQlkbworCQkJCVsgLXogIiRoJGkiIF0gJiYgY29udGludWUKKwkJCQljYXNlICIkaCIgaW4gJycpIHRoPSclJyA7OyAqKSB0aD0gOzsgZXNhYworCQkJCXJ1bGU9JHt0fXRyYWlsaW5nLCR7c31zcGFjZSwke2l9aW5kZW50LCR7aH10YWIKKworCQkJCXJtIC1mIC5naXRhdHRyaWJ1dGVzCisJCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAicnVsZT0kcnVsZSIgJworCQkJCQlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiJHJ1bGUiICYmCisJCQkJCXRlc3RfZml4ICIkdHQkdHMkdGkkdGgiCisJCQkJJworCisJCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyAicnVsZT0kcnVsZSx0YWJ3aWR0aD0xNiIgJworCQkJCQlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiJHJ1bGUsdGFid2lkdGg9MTYiICYmCisJCQkJCXRlc3RfZml4ICIkdHQkdHMkdGkxNiR0aCIKKwkJCQknCisKKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJydWxlPSRydWxlIChhdHRyaWJ1dGVzKSIgJworCQkJCQlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJCQkJCWVjaG8gInRhcmdldCB3aGl0ZXNwYWNlPSRydWxlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aSR0aCIKKwkJCQknCisKKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJydWxlPSRydWxlLHRhYndpZHRoPTE2IChhdHRyaWJ1dGVzKSIgJworCQkJCQllY2hvICJ0YXJnZXQgd2hpdGVzcGFjZT0kcnVsZSx0YWJ3aWR0aD0xNiIgPi5naXRhdHRyaWJ1dGVzICYmCisJCQkJCXRlc3RfZml4ICIkdHQkdHMkdGkxNiR0aCIKKwkJCQknCisKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUKK2RvbmUKKworY3JlYXRlX3BhdGNoICgpIHsKKwlzZWQgLWUgInMvXy8gLyIgPDwtXEVPRgorCQlkaWZmIC0tZ2l0IGEvdGFyZ2V0IGIvdGFyZ2V0CisJCWluZGV4IGU2OWRlMjkuLjhiZDY2NDggMTAwNjQ0CisJCS0tLSBhL3RhcmdldAorCQkrKysgYi90YXJnZXQKKwkJQEAgLTAsMCArMSwzIEBACisJCStBbiBlbXB0eSBsaW5lIGZvbGxvd3MKKwkJKworCQkrQSBsaW5lIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgbm8gbmV3bGluZV8KKwkJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHdoaXRlc3BhY2UgJiBubyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgZmlsZScgJworCT50YXJnZXQgJiYKKwljcmVhdGVfcGF0Y2ggPnBhdGNoLWZpbGUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaC1maWxlICYmCisJZ3JlcCAibmV3bGluZSQiIHRhcmdldCAmJgorCWdyZXAgIl4kIiB0YXJnZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWZpeCAoMSknICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5leHBlY3QgJiYKKwl7IGNhdCBleHBlY3Q7IGVjaG87IH0gPm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWZpeCAoMiknICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGE7IGVjaG8gYzsgfSA+ZXhwZWN0ICYmCisJeyBjYXQgZXhwZWN0OyBlY2hvOyBlY2hvOyB9ID5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW5rIGF0IEVPRiB3aXRoIC0td2hpdGVzcGFjZT1maXggKDMpJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYTsgZWNobyBjOyBlY2hvOyB9ID5leHBlY3QgJiYKKwl7IGNhdCBleHBlY3Q7IGVjaG87IGVjaG87IH0gPm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgZW5kIG9mIGh1bmssIG5vdCBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9Zml4JyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobyBkOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBhOyBlY2hvIGM7IGVjaG87IGVjaG87IGVjaG87IGVjaG87IGVjaG87IGVjaG87IGVjaG8gZDsgfSA+ZXhwZWN0ICYmCisJY3AgZXhwZWN0IG9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPXdhcm4nICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyA+Pm9uZSAmJgorCWNhdCBvbmUgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXdhcm4gcGF0Y2ggMj5lcnJvciAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwlncmVwICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW5rIGF0IEVPRiB3aXRoIC0td2hpdGVzcGFjZT1lcnJvcicgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwljYXQgb25lID5leHBlY3QgJiYKKwllY2hvID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXdoaXRlc3BhY2U9ZXJyb3IgcGF0Y2ggMj5lcnJvciAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwlncmVwICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW5rIGJ1dCBub3QgZW1wdHkgYXQgRU9GJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gIiAgICIgPj5vbmUgJiYKKwljYXQgb25lID5leHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT13YXJuIHBhdGNoIDI+ZXJyb3IgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUgYXQgRU9GIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseWluZyBiZXlvbmQgRU9GIHJlcXVpcmVzIG9uZSBub24tYmxhbmsgY29udGV4dCBsaW5lJyAnCisJeyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBiOyB9ID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCXsgZWNobyBhOyBlY2hvOyB9ID5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b25zIG9mIGJsYW5rcyBhdCBFT0Ygc2hvdWxkIG5vdCBhcHBseScgJworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2OyBkbworCQllY2hvOyBlY2hvOyBlY2hvOyBlY2hvOworCWRvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyBhID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmsgbGluZSBhdCBlbmQgd2l0aCAtLXdoaXRlc3BhY2U9Zml4JyAnCisJZWNobyBhID5vbmUgJiYKKwllY2hvID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGIgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCWVjaG8gYSA+b25lICYmCisJY3Agb25lIHNhdmVkLW9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZSAmJgorCW12IHNhdmVkLW9uZSBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3byBtaXNzaW5nIGJsYW5rIGxpbmVzIGF0IGVuZCB3aXRoIC0td2hpdGVzcGFjZT1maXgnICcKKwl7IGVjaG8gYTsgZWNobzsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBuby1ibGFuay1saW5lcyAmJgorCXsgZWNobzsgZWNobzsgfSA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyBkID4+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWVjaG8gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJY3Agbm8tYmxhbmstbGluZXMgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lICYmCisJbXYgbm8tYmxhbmstbGluZXMgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIGJsYW5rIGxpbmUgYXQgZW5kLCBpbnNlcnQgYmVmb3JlIGVuZCwgLS13aGl0ZXNwYWNlPWZpeCcgJworCXsgZWNobyBhOyBlY2hvOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBiOyBlY2hvIGE7IGVjaG87IH0gPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJZWNobyBhID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hyaW5rIGZpbGUgd2l0aCB0b25zIG9mIG1pc3NpbmcgYmxhbmtzIGF0IGVuZCBvZiBmaWxlJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5vbmUgJiYKKwljcCBvbmUgbm8tYmxhbmstbGluZXMgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNjsgZG8KKwkJZWNobzsgZWNobzsgZWNobzsgZWNobzsKKwlkb25lID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGEgPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJY3Agbm8tYmxhbmstbGluZXMgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lICYmCisJbXYgbm8tYmxhbmstbGluZXMgb25lICYmCisJZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIGJsYW5rcyBhdCBFT0YgbXVzdCBvbmx5IG1hdGNoIGJsYW5rIGxpbmVzJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYzsgZWNobyBkOyB9ID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZWNobyBhID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaAorJworCitzZWQgLWUncy9aLy8nID5vbmUgPDxFT0YKK2EKK2IKK2MKKwkJICAgICAgWgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmsgbGluZSBzaG91bGQgbWF0Y2ggY29udGV4dCBsaW5lIHdpdGggc3BhY2VzJyAnCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGQgPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJeyBlY2hvOyBlY2hvIGQ7IH0gPj5leHBlY3QgJiYKKwlnaXQgYWRkIG9uZSAmJgorCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3NlZCAtZSdzL1ovLycgPm9uZSA8PEVPRgorYQorYgorYworCQkgICAgICBaCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSwgYnV0IHdpdGggdGhlIC0taWdub3JlLXNwYWNlLW9wdGlvbicgJworCWdpdCBhZGQgb25lICYmCisJZWNobyBkID4+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisKKwlnaXQgY2hlY2tvdXQtaW5kZXggLWYgb25lICYmCisJZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lLCBidXQgd2l0aCBDUi1MRiBsaW5lIGVuZGluZ3MgJiYgY3ItYXQtZW9sIHNldCcgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIGNyLWF0LWVvbCAmJgorCXByaW50ZiAiYVxyXG4iID5vbmUgJiYKKwlwcmludGYgImJcclxuIiA+Pm9uZSAmJgorCXByaW50ZiAiY1xyXG4iID4+b25lICYmCisJY3Agb25lIHNhdmUtb25lICYmCisJcHJpbnRmICIgICAgICAgICAgICAgICAgIFxyXG4iID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlwcmludGYgImRcclxuIiA+Pm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJbXYgc2F2ZS1vbmUgb25lICYmCisKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSLUxGIGxpbmUgZW5kaW5ncyAmJiBhZGQgbGluZSAmJiB0ZXh0PWF1dG8nICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJcHJpbnRmICJhXHJcbiIgPm9uZSAmJgorCWNwIG9uZSBzYXZlLW9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJcHJpbnRmICJiXHJcbiIgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCW12IHNhdmUtb25lIG9uZSAmJgorCWVjaG8gIm9uZSB0ZXh0PWF1dG8iID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1ItTEYgbGluZSBlbmRpbmdzICYmIGNoYW5nZSBsaW5lICYmIHRleHQ9YXV0bycgJworCXByaW50ZiAiYVxyXG4iID5vbmUgJiYKKwljcCBvbmUgc2F2ZS1vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXByaW50ZiAiYlxyXG4iID5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCW12IHNhdmUtb25lIG9uZSAmJgorCWVjaG8gIm9uZSB0ZXh0PWF1dG8iID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTEYgaW4gcmVwbywgQ1JMRiBpbiB3b3JrdHJlZSAmJiBjaGFuZ2UgbGluZSAmJiB0ZXh0PWF1dG8nICcKKwlwcmludGYgImFcbiIgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJcHJpbnRmICJiXHJcbiIgPm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwlwcmludGYgImFcclxuIiA+b25lICYmCisJZWNobyAib25lIHRleHQ9YXV0byIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IC1jIGNvcmUuZW9sPUNSTEYgYXBwbHkgcGF0Y2ggJiYKKwlwcmludGYgImJcclxuIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlPWZpeCB0byBleHBhbmQnICcKKwlxel90b190YWJfc3BhY2UgPnByZWltYWdlIDw8LVxFT0YgJiYKKwlRUWEKKwlRUWIKKwlRUWMKKwlaWlpaWlpaWlpaWlpaWlpaZAorCVFRZQorCVFRZgorCVFRZworCUVPRgorCXF6X3RvX3RhYl9zcGFjZSA+cGF0Y2ggPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9wcmVpbWFnZSBiL3ByZWltYWdlCisJLS0tIGEvcHJlaW1hZ2UKKwkrKysgYi9wcmVpbWFnZQorCUBAIC0xLDcgKzEsNiBAQAorCSBRUWEKKwkgUVFiCisJIFFRYworCS1RUWQKKwkgUVFlCisJIFFRZgorCSBRUWcKKwlFT0YKKwlnaXQgLWMgY29yZS53aGl0ZXNwYWNlPXRhYi1pbi1pbmRlbnQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlIGNoZWNrIHNraXBwZWQgZm9yIGV4Y2x1ZGVkIHBhdGhzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgYmxhbmstYXQtZW9sICYmCisJPnVzZWQgJiYKKwk+dW51c2VkICYmCisJZ2l0IGFkZCB1c2VkIHVudXNlZCAmJgorCWVjaG8gInVzZWQiID51c2VkICYmCisJZWNobyAidW51c2VkICIgPnVudXNlZCAmJgorCWdpdCBkaWZmLWZpbGVzIC1wIHVzZWQgdW51c2VkID5wYXRjaCAmJgorCWdpdCBhcHBseSAtLWluY2x1ZGU9dXNlZCAtLXN0YXQgLS13aGl0ZXNwYWNlPWVycm9yIDxwYXRjaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjUtYXBwbHktd3MtZnV6ei5zaCBiL3QvdDQxMjUtYXBwbHktd3MtZnV6ei5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjcxZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyNS1hcHBseS13cy1mdXp6LnNoCkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHlpbmcgcGF0Y2ggdGhhdCBoYXMgYnJva2VuIHdoaXRlc3BhY2VzIGluIGNvbnRleHQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIGZpbGUtMCBpcyBmdWxsIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2VzCisJZm9yIGwgaW4gYSBiYiBjIGQgZWVlZSBmIGdnZyBoCisJZG8KKwkJZWNobyAiJGwgIgorCWRvbmUgPmZpbGUtMCAmJgorCisJIyBwYXRjaC0wIGNyZWF0ZXMgYSB3aGl0ZXNwYWNlIGJyb2tlbiBmaWxlCisJY2F0IGZpbGUtMCA+ZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaC0wICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIGZpbGUtMSBpcyBzdGlsbCBmdWxsIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2VzLAorCSMgYnV0IGhhcyBvbmUgbGluZSB1cGRhdGVkLCB3aXRob3V0IGZpeGluZyBhbnkKKwkjIHdoaXRlc3BhY2VzLgorCSMgcGF0Y2gtMSByZWNvcmRzIHRoYXQgY2hhbmdlLgorCXNlZCAtZSAicy9kL0QvIiBmaWxlLTAgPmZpbGUtMSAmJgorCWNhdCBmaWxlLTEgPmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2gtMSAmJgorCisJIyBwYXRjaC1hbGwgaXMgdGhlIGVmZmVjdCBvZiBib3RoIHBhdGNoLTAgYW5kIHBhdGNoLTEKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWNhdCBmaWxlLTEgPmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2gtYWxsICYmCisKKwkjIHBhdGNoLTIgaXMgdGhlIHNhbWUgYXMgcGF0Y2gtMSBidXQgaXMgYmFzZWQKKwkjIG9uIGEgdmVyc2lvbiB0aGF0IGFscmVhZHkgaGFzIHdoaXRlc3BhY2UgZml4ZWQsCisJIyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHdoaXRlc3BhY2UgYnJlYWthZ2VzLgorCXNlZCAtZSAicy8gXCQvLyIgcGF0Y2gtMSA+cGF0Y2gtMiAmJgorCisJIyBJZiBhbGwgd2hpdGVzcGFjZSBicmVha2FnZXMgYXJlIGZpeGVkIHRoZSBjb250ZW50cworCSMgc2hvdWxkIGxvb2sgbGlrZSBmaWxlLWZpeGVkCisJc2VkIC1lICJzLyBcJC8vIiBmaWxlLTEgPmZpbGUtZml4ZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG5vZml4ICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIEJhc2VsaW5lLiAgQXBwbHlpbmcgd2l0aG91dCBmaXhpbmcgYW55IHdoaXRlc3BhY2UKKwkjIGJyZWFrYWdlcy4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPW5vd2FybiBwYXRjaC0wICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1ub3dhcm4gcGF0Y2gtMSAmJgorCisJIyBUaGUgcmVzdWx0IHNob3VsZCBvYnZpb3VzbHkgbWF0Y2guCisJdGVzdF9jbXAgZmlsZS0xIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aGZpeCAoZm9yd2FyZCknICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIFRoZSBmaXJzdCBhcHBsaWNhdGlvbiB3aWxsIG11bmdlIHRoZSBjb250ZXh0IGxpbmVzCisJIyB0aGUgc2Vjb25kIHBhdGNoIGRlcGVuZHMgb24uICBXZSBzaG91bGQgYmUgYWJsZSB0bworCSMgYWRqdXN0IGFuZCBzdGlsbCBhcHBseS4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaC0wICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2gtMSAmJgorCisJdGVzdF9jbXAgZmlsZS1maXhlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhmaXggKGJhY2t3YXJkKScgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCSMgTm93IHdlIGhhdmUgYSB3aGl0ZXNwYWNlIGJyZWFrYWdlcyBvbiBvdXIgc2lkZS4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPW5vd2FybiBwYXRjaC0wICYmCisKKwkjIEFuZCBzb21lYm9keSBzZW5kcyBpbiBhIHBhdGNoIGJhc2VkIG9uIGltYWdlCisJIyB3aXRoIHdoaXRlc3BhY2UgYWxyZWFkeSBmaXhlZC4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaC0yICYmCisKKwkjIFRoZSByZXN1bHQgc2hvdWxkIGFjY2VwdCB0aGUgd2hpdGVzcGFjZSBmaXhlZAorCSMgcG9zdGltYWdlLiAgQnV0IHRoZSBsaW5lIHdpdGggImgiIGlzIGJleW9uZCBjb250ZXh0CisJIyBob3Jpem9uIGFuZCBsZWZ0IHVuZml4ZWQuCisKKwlzZWQgLWUgL2gvZCBmaWxlLWZpeGVkID5maXhlZC1oZWFkICYmCisJc2VkIC1lIC9oL2QgZmlsZSA+ZmlsZS1oZWFkICYmCisJdGVzdF9jbXAgZml4ZWQtaGVhZCBmaWxlLWhlYWQgJiYKKworCXNlZCAtbiAtZSAvaC9wIGZpbGUtZml4ZWQgPmZpeGVkLXRhaWwgJiYKKwlzZWQgLW4gLWUgL2gvcCBmaWxlID5maWxlLXRhaWwgJiYKKworCSEgdGVzdF9jbXAgZml4ZWQtdGFpbCBmaWxlLXRhaWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjYtYXBwbHktZW1wdHkuc2ggYi90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlYjZhNzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSBlbXB0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5lbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlmb3IgaSBpbiBhIGIgYyBkIGUKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZW1wdHkgJiYKKwljYXQgZW1wdHkgPmV4cGVjdCAmJgorCWdpdCBkaWZmIHwKKwlzZWQgLWUgIi9eZGlmZiAtLWdpdC9kIiBcCisJICAgIC1lICIvXmluZGV4IC9kIiBcCisJICAgIC1lICJzfGEvZW1wdHl8ZW1wdHkub3JpZ3wiIFwKKwkgICAgLWUgInN8Yi9lbXB0eXxlbXB0eXwiID5wYXRjaDAgJiYKKwlzZWQgLWUgInN8ZW1wdHl8bWlzc2luZ3wiIHBhdGNoMCA+cGF0Y2gxICYmCisJPmVtcHR5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZW1wdHknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSBwYXRjaDAgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBlbXB0eScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBtaXNzaW5nICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gwICYmCisJdGVzdF9jbXAgZXhwZWN0IGVtcHR5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY3JlYXRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIG1pc3NpbmcgJiYKKwlnaXQgYXBwbHkgcGF0Y2gxICYmCisJdGVzdF9jbXAgZXhwZWN0IG1pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBjcmVhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoMSAmJgorCXRlc3RfY21wIGV4cGVjdCBtaXNzaW5nICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTI3LWFwcGx5LXNhbWUtZm4uc2ggYi90L3Q0MTI3LWFwcGx5LXNhbWUtZm4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTcyOTQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjctYXBwbHktc2FtZS1mbi5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgc2FtZSBmaWxlbmFtZScKKworLiAuL3Rlc3QtbGliLnNoCisKK21vZGlmeSAoKSB7CisJc2VkIC1lICIkMSIgPCAiJDIiID4gIiQyIi54ICYmCisJbXYgIiQyIi54ICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5zYW1lX2ZuICYmCisJY3Agc2FtZV9mbiBvdGhlcl9mbiAmJgorCWdpdCBhZGQgc2FtZV9mbiBvdGhlcl9mbiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2FtZSBmaWxlbmFtZSB3aXRoIGluZGVwZW5kZW50IGNoYW5nZXMnICcKKwltb2RpZnkgInMvXmQvei8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+IHBhdGNoMCAmJgorCWdpdCBhZGQgc2FtZV9mbiAmJgorCW1vZGlmeSAicy9eaS95LyIgc2FtZV9mbiAmJgorCWdpdCBkaWZmID4+IHBhdGNoMCAmJgorCWNwIHNhbWVfZm4gc2FtZV9mbjIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IHBhdGNoMCAmJgorCXRlc3RfY21wIHNhbWVfZm4gc2FtZV9mbjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2FtZSBmaWxlbmFtZSB3aXRoIG92ZXJsYXBwaW5nIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbW9kaWZ5ICJzL15kL3ovIiBzYW1lX2ZuICYmCisJZ2l0IGRpZmYgPiBwYXRjaDAgJiYKKwlnaXQgYWRkIHNhbWVfZm4gJiYKKwltb2RpZnkgInMvXmUveS8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+PiBwYXRjaDAgJiYKKwljcCBzYW1lX2ZuIHNhbWVfZm4yICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSBwYXRjaDAgJiYKKwl0ZXN0X2NtcCBzYW1lX2ZuIHNhbWVfZm4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHNhbWUgbmV3IGZpbGVuYW1lIGFmdGVyIHJlbmFtZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgbXYgc2FtZV9mbiBuZXdfZm4gJiYKKwltb2RpZnkgInMvXmQvei8iIG5ld19mbiAmJgorCWdpdCBhZGQgbmV3X2ZuICYmCisJZ2l0IGRpZmYgLU0gLS1jYWNoZWQgPiBwYXRjaDEgJiYKKwltb2RpZnkgInMvXmUveS8iIG5ld19mbiAmJgorCWdpdCBkaWZmID4+IHBhdGNoMSAmJgorCWNwIG5ld19mbiBuZXdfZm4yICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoMSAmJgorCXRlc3RfY21wIG5ld19mbiBuZXdfZm4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHNhbWUgb2xkIGZpbGVuYW1lIGFmdGVyIHJlbmFtZSAtLSBzaG91bGQgZmFpbC4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IG12IHNhbWVfZm4gbmV3X2ZuICYmCisJbW9kaWZ5ICJzL15kL3ovIiBuZXdfZm4gJiYKKwlnaXQgYWRkIG5ld19mbiAmJgorCWdpdCBkaWZmIC1NIC0tY2FjaGVkID4gcGF0Y2gxICYmCisJZ2l0IG12IG5ld19mbiBzYW1lX2ZuICYmCisJbW9kaWZ5ICJzL15lL3kvIiBzYW1lX2ZuICYmCisJZ2l0IGRpZmYgPj4gcGF0Y2gxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgQS0+QiAocmVuYW1lKSwgQy0+QSAocmVuYW1lKSwgQS0+QSAtLSBzaG91bGQgcGFzcy4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IG12IHNhbWVfZm4gbmV3X2ZuICYmCisJbW9kaWZ5ICJzL15kL3ovIiBuZXdfZm4gJiYKKwlnaXQgYWRkIG5ld19mbiAmJgorCWdpdCBkaWZmIC1NIC0tY2FjaGVkID4gcGF0Y2gxICYmCisJZ2l0IGNvbW1pdCAtbSAiYSByZW5hbWUiICYmCisJZ2l0IG12IG90aGVyX2ZuIHNhbWVfZm4gJiYKKwltb2RpZnkgInMvXmUveS8iIHNhbWVfZm4gJiYKKwlnaXQgYWRkIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiAtTSAtLWNhY2hlZCA+PiBwYXRjaDEgJiYKKwltb2RpZnkgInMvXmcveC8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+PiBwYXRjaDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFwcGx5IHBhdGNoMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjgtYXBwbHktcm9vdC5zaCBiL3QvdDQxMjgtYXBwbHktcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Y2M3NDFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyOC1hcHBseS1yb290LnNoCkBAIC0wLDAgKzEsMTEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgc2FtZSBmaWxlbmFtZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAtcCBzb21lL3N1Yi9kaXIgJiYKKwllY2hvIEhlbGxvID4gc29tZS9zdWIvZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIHNvbWUvc3ViL2Rpci9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisKKycKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIGEvYmxhL2JsdWIvZGlyL2ZpbGUgYi9ibGEvYmx1Yi9kaXIvZmlsZQorLS0tIGEvYmxhL2JsdWIvZGlyL2ZpbGUKKysrKyBiL2JsYS9ibHViL2Rpci9maWxlCitAQCAtMSwxICsxLDEgQEAKKy1IZWxsbworK0JlbGxvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1kaXJlY3RvcnkgLXAgKDEpJyAnCisKKwlnaXQgYXBwbHkgLS1kaXJlY3Rvcnk9c29tZS9zdWIgLXAzIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IEJlbGxvID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL2ZpbGUpICYmCisJdGVzdCBCZWxsbyA9ICQoY2F0IHNvbWUvc3ViL2Rpci9maWxlKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tZGlyZWN0b3J5IC1wICgyKSAnICcKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtLWRpcmVjdG9yeT1zb21lL3N1Yi8gLXAzIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IEJlbGxvID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL2ZpbGUpICYmCisJdGVzdCBCZWxsbyA9ICQoY2F0IHNvbWUvc3ViL2Rpci9maWxlKQorCisnCisKK2NhdCA+IHBhdGNoIDw8IEVPRgorZGlmZiAtLWdpdCBhL25ld2ZpbGUgYi9uZXdmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDk1ZjNhZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbmV3ZmlsZQorQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAobmV3IGZpbGUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFwcGx5IC0tZGlyZWN0b3J5PXNvbWUvc3ViL2Rpci8gLS1pbmRleCBwYXRjaCAmJgorCXRlc3QgY29udGVudCA9ICQoZ2l0IHNob3cgOnNvbWUvc3ViL2Rpci9uZXdmaWxlKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9uZXdmaWxlKQorJworCitjYXQgPiBwYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9jL25ld2ZpbGUyIGIvYy9uZXdmaWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ5NWYzYWQKKy0tLSAvZGV2L251bGwKKysrKyBiL2MvbmV3ZmlsZTIKK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1kaXJlY3RvcnkgLXAgKG5ldyBmaWxlKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtcDIgLS1kaXJlY3Rvcnk9c29tZS9zdWIvZGlyLyAtLWluZGV4IHBhdGNoICYmCisJdGVzdCBjb250ZW50ID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL25ld2ZpbGUyKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9uZXdmaWxlMikKKycKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZGVsZmlsZSBiL2RlbGZpbGUKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDk1ZjNhZC4uMDAwMDAwMAorLS0tIGEvZGVsZmlsZQorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLWNvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAoZGVsZXRlIGZpbGUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyBjb250ZW50ID5zb21lL3N1Yi9kaXIvZGVsZmlsZSAmJgorCWdpdCBhZGQgc29tZS9zdWIvZGlyL2RlbGZpbGUgJiYKKwlnaXQgYXBwbHkgLS1kaXJlY3Rvcnk9c29tZS9zdWIvZGlyLyAtLWluZGV4IHBhdGNoICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCBkZWxmaWxlKQorJworCitjYXQgPiBwYXRjaCA8PCAnRU9GJworZGlmZiAtLWdpdCAiYS9xdVwxNTd0ZWZpbGUiICJiL3F1XDE1N3RlZmlsZSIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kOTVmM2FkCistLS0gL2Rldi9udWxsCisrKysgImIvcXVcMTU3dGVmaWxlIgorQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAocXVvdGVkIGZpbGVuYW1lKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtLWRpcmVjdG9yeT1zb21lL3N1Yi9kaXIvIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IGNvbnRlbnQgPSAkKGdpdCBzaG93IDpzb21lL3N1Yi9kaXIvcXVvdGVmaWxlKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9xdW90ZWZpbGUpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyOS1hcHBseS1zYW1lbW9kZS5zaCBiL3QvdDQxMjktYXBwbHktc2FtZW1vZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWNkZDc2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjktYXBwbHktc2FtZW1vZGUuc2gKQEAgLTAsMCArMSw3NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5aW5nIHBhdGNoIHdpdGggbW9kZSBiaXRzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBvcmlnaW5hbCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWVjaG8gbW9kaWZpZWQgPmZpbGUgJiYKKwlnaXQgZGlmZiAtLXN0YXQgLXAgPnBhdGNoLTAudHh0ICYmCisJY2htb2QgK3ggZmlsZSAmJgorCWdpdCBkaWZmIC0tc3RhdCAtcCA+cGF0Y2gtMS50eHQgJiYKKwlzZWQgInMvXlwobmV3IG1vZGUgXCkuKi9cMS8iIDxwYXRjaC0xLnR4dCA+cGF0Y2gtZW1wdHktbW9kZS50eHQgJiYKKwlzZWQgInMvXlwobmV3IG1vZGUgXCkuKi9cMWdhcmJhZ2UvIiA8cGF0Y2gtMS50eHQgPnBhdGNoLWJvZ3VzLW1vZGUudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ3NhbWUgbW9kZSAobm8gaW5kZXgpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlnaXQgYXBwbHkgcGF0Y2gtMC50eHQgJiYKKwl0ZXN0IC14IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc2FtZSBtb2RlICh3aXRoIGluZGV4KScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwljaG1vZCAreCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gtMC50eHQgJiYKKwl0ZXN0IC14IGZpbGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzYW1lIG1vZGUgKGluZGV4IG9ubHkpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgYXBwbHkgLS1jYWNoZWQgcGF0Y2gtMC50eHQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZmlsZSB8IGdyZXAgIl4xMDA3NTUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ21vZGUgdXBkYXRlIChubyBpbmRleCknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IHBhdGNoLTEudHh0ICYmCisJdGVzdCAteCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ21vZGUgdXBkYXRlICh3aXRoIGluZGV4KScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaC0xLnR4dCAmJgorCXRlc3QgLXggZmlsZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ21vZGUgdXBkYXRlIChpbmRleCBvbmx5KScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgYXBwbHkgLS1jYWNoZWQgcGF0Y2gtMS50eHQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZmlsZSB8IGdyZXAgIl4xMDA3NTUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ2VtcHR5IG1vZGUgaXMgcmVqZWN0ZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoLWVtcHR5LW1vZGUudHh0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiaW52YWxpZCBtb2RlIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnYm9ndXMgbW9kZSBpcyByZWplY3RlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2gtYm9ndXMtbW9kZS50eHQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpbnZhbGlkIG1vZGUiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoIGIvdC90NDEzMC1hcHBseS1jcmlzcy1jcm9zcy1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjhhMzEzYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoCkBAIC0wLDAgKzEsNzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaGFuZGxpbmcgY3Jpc3MtY3Jvc3MgcmVuYW1lIHBhdGNoLicKKy4gLi90ZXN0LWxpYi5zaAorCitjcmVhdGVfZmlsZSgpIHsKKwljbnQ9MAorCXdoaWxlIHRlc3QgJGNudCAtbGUgMTAwCisJZG8KKwkJY250PSQoKCRjbnQgKyAxKSkKKwkJZWNobyAiJDIiID4+ICIkMSIKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJIyBFbnN1cmUgdGhhdCBmaWxlIHNpemVzIGFyZSBkaWZmZXJlbnQsIGJlY2F1c2Ugb24gV2luZG93cworCSMgbHN0YXQoKSBkb2VzIG5vdCBkaXNjb3ZlciBpbm9kZSBudW1iZXJzLCBhbmQgd2UgbmVlZAorCSMgb3RoZXIgcHJvcGVydGllcyB0byBkaXNjb3ZlciBzd2FwcGVkIGZpbGVzCisJIyAobXRpbWUgaXMgbm90IGFsd2F5cyBkaWZmZXJlbnQsIGVpdGhlcikuCisJY3JlYXRlX2ZpbGUgZmlsZTEgInNvbWUgY29udGVudCIgJiYKKwljcmVhdGVfZmlsZSBmaWxlMiAic29tZSBvdGhlciBjb250ZW50IiAmJgorCWNyZWF0ZV9maWxlIGZpbGUzICJhZ2FpbiBzb21ldGhpbmcgZWxzZSIgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUyIGZpbGUzICYmCisJZ2l0IGNvbW1pdCAtbSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzIHJlbmFtZScgJworCW12IGZpbGUxIHRtcCAmJgorCW12IGZpbGUyIGZpbGUxICYmCisJbXYgdG1wIGZpbGUyICYmCisJY3AgZmlsZTEgZmlsZTEtc3dhcHBlZCAmJgorCWNwIGZpbGUyIGZpbGUyLXN3YXBwZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtTSAtQicgJworCWdpdCBkaWZmIC1NIC1CID4gZGlmZiAmJgorCWdpdCByZXNldCAtLWhhcmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseScgJworCWdpdCBhcHBseSBkaWZmICYmCisJdGVzdF9jbXAgZmlsZTEgZmlsZTEtc3dhcHBlZCAmJgorCXRlc3RfY21wIGZpbGUyIGZpbGUyLXN3YXBwZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jpc3MtY3Jvc3MgcmVuYW1lJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW12IGZpbGUxIHRtcCAmJgorCW12IGZpbGUyIGZpbGUxICYmCisJbXYgZmlsZTMgZmlsZTIgJiYKKwltdiB0bXAgZmlsZTMgJiYKKwljcCBmaWxlMSBmaWxlMS1zd2FwcGVkICYmCisJY3AgZmlsZTIgZmlsZTItc3dhcHBlZCAmJgorCWNwIGZpbGUzIGZpbGUzLXN3YXBwZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtTSAtQicgJworCWdpdCBkaWZmIC1NIC1CID4gZGlmZiAmJgorCWdpdCByZXNldCAtLWhhcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHknICcKKwlnaXQgYXBwbHkgZGlmZiAmJgorCXRlc3RfY21wIGZpbGUxIGZpbGUxLXN3YXBwZWQgJiYKKwl0ZXN0X2NtcCBmaWxlMiBmaWxlMi1zd2FwcGVkICYmCisJdGVzdF9jbXAgZmlsZTMgZmlsZTMtc3dhcHBlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzEtYXBwbHktZmFrZS1hbmNlc3Rvci5zaCBiL3QvdDQxMzEtYXBwbHktZmFrZS1hbmNlc3Rvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTM2MWNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzMS1hcHBseS1mYWtlLWFuY2VzdG9yLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgU3RlcGhlbiBCb3lkCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgaGFuZGxpbmcuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCAxICYmCisJdGVzdF9jb21taXQgMiAmJgorCW1rZGlyIHN1YiAmJgorCXRlc3RfY29tbWl0IDMgc3ViLzMudCAmJgorCXRlc3RfY29tbWl0IDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yJyAnCisJZ2l0IGNoZWNrb3V0IDIgJiYKKwllY2hvICJBIiA+IDEudCAmJgorCWdpdCBkaWZmID4gMS5wYXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgMSAmJgorCWdpdCBhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgMS5hbmNlc3RvciAxLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciBpbiBhIHN1YmRpcmVjdG9yeScgJworCWdpdCBjaGVja291dCAzICYmCisJZWNobyAiQyIgPiBzdWIvMy50ICYmCisJZ2l0IGRpZmYgPiAzLnBhdGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCA0ICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciAzLmFuY2VzdG9yIC4uLzMucGF0Y2ggJiYKKwkJdGVzdCAtZiAzLmFuY2VzdG9yCisJKSAmJgorCWdpdCBhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgMy5hbmNlc3RvciAzLnBhdGNoICYmCisJdGVzdF9jbXAgc3ViLzMuYW5jZXN0b3IgMy5hbmNlc3RvcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzItYXBwbHktcmVtb3ZhbC5zaCBiL3QvdDQxMzItYXBwbHktcmVtb3ZhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZWMxZDZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzMi1hcHBseS1yZW1vdmFsLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSnVuaW8gQyBIYW1hbm8KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWFwcGx5IG5vdGljZXMgcmVtb3ZhbCBwYXRjaGVzIGdlbmVyYXRlZCBieSBHTlUgZGlmZicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNhdCA8PC1FT0YgPmMgJiYKKwlkaWZmIC1ydU4gYS9maWxlIGIvZmlsZQorCS0tLSBhL2ZpbGUJVFMwCisJKysrIGIvZmlsZQlUUzEKKwlAQCAtMCwwICsxIEBACisJK3NvbWV0aGluZworCUVPRgorCisJY2F0IDw8LUVPRiA+ZCAmJgorCWRpZmYgLXJ1TiBhL2ZpbGUgYi9maWxlCisJLS0tIGEvZmlsZQlUUzAKKwkrKysgYi9maWxlCVRTMQorCUBAIC0xICswLDAgQEAKKwktc29tZXRoaW5nCisJRU9GCisKKwl0aW1lV2VzdD0iMTk4Mi0wOS0xNiAwNzowMDowMC4wMDAwMDAwMDAgLTA4MDAiICYmCisJIHRpbWVHTVQ9IjE5ODItMDktMTYgMTU6MDA6MDAuMDAwMDAwMDAwICswMDAwIiAmJgorCXRpbWVFYXN0PSIxOTgyLTA5LTE3IDAwOjAwOjAwLjAwMDAwMDAwMCArMDkwMCIgJiYKKworCWVwb2NXZXN0PSIxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMCIgJiYKKwkgZXBvY0dNVD0iMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAiICYmCisJZXBvY0Vhc3Q9IjE5NzAtMDEtMDEgMDk6MDA6MDAuMDAwMDAwMDAwICswOTAwIiAmJgorCWVwb2NXZXN0Mj0iMTk2OS0xMi0zMSAxNjowMDowMCAtMDg6MDAiICYmCisKKwlzZWQgLWUgInMvVFMwLyRlcG9jV2VzdC8iIC1lICJzL1RTMS8kdGltZVdlc3QvIiA8YyA+Y3JlYXRlV2VzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJGVwb2NFYXN0LyIgLWUgInMvVFMxLyR0aW1lRWFzdC8iIDxjID5jcmVhdGVFYXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kZXBvY0dNVC8iIC1lICJzL1RTMS8kdGltZUdNVC8iIDxjID5jcmVhdGVHTVQucGF0Y2ggJiYKKworCXNlZCAtZSAicy9UUzAvJHRpbWVXZXN0LyIgLWUgInMvVFMxLyR0aW1lV2VzdC8iIDxjID5hZGRXZXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUVhc3QvIiAtZSAicy9UUzEvJHRpbWVFYXN0LyIgPGMgPmFkZEVhc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lR01ULyIgLWUgInMvVFMxLyR0aW1lR01ULyIgPGMgPmFkZEdNVC5wYXRjaCAmJgorCisJc2VkIC1lICJzL1RTMC8kdGltZVdlc3QvIiAtZSAicy9UUzEvJHRpbWVXZXN0LyIgPGQgPmVtcHR5V2VzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVFYXN0LyIgLWUgInMvVFMxLyR0aW1lRWFzdC8iIDxkID5lbXB0eUVhc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lR01ULyIgLWUgInMvVFMxLyR0aW1lR01ULyIgPGQgPmVtcHR5R01ULnBhdGNoICYmCisKKwlzZWQgLWUgInMvVFMwLyR0aW1lV2VzdC8iIC1lICJzL1RTMS8kZXBvY1dlc3QvIiA8ZCA+cmVtb3ZlV2VzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVFYXN0LyIgLWUgInMvVFMxLyRlcG9jRWFzdC8iIDxkID5yZW1vdmVFYXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUdNVC8iIC1lICJzL1RTMS8kZXBvY0dNVC8iIDxkID5yZW1vdmVHTVQucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lV2VzdC8iIC1lICJzL1RTMS8kZXBvY1dlc3QyLyIgPGQgPnJlbW92ZVdlc3QyLnBhdGNoICYmCisKKwllY2hvIHNvbWV0aGluZyA+c29tZXRoaW5nCisnCisKK2ZvciBwYXRjaCBpbiAqLnBhdGNoCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInRlc3QgJHBhdGNoIiAnCisJCXJtIC1mIGZpbGUgLmdpdC9pbmRleCAmJgorCQljYXNlICIkcGF0Y2giIGluCisJCWNyZWF0ZSopCisJCQkjIG11c3QgYmUgYWJsZSB0byBjcmVhdGUKKwkJCWdpdCBhcHBseSAtLWluZGV4ICRwYXRjaCAmJgorCQkJdGVzdF9jbXAgZmlsZSBzb21ldGhpbmcgJiYKKwkJCSMgbXVzdCBub3RpY2UgdGhlIGZpbGUgaXMgYWxyZWFkeSB0aGVyZQorCQkJPmZpbGUgJiYKKwkJCWdpdCBhZGQgZmlsZSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5ICRwYXRjaAorCQkJOzsKKwkJYWRkKikKKwkJCSMgbXVzdCBiZSBhYmxlIHRvIGNyZWF0ZSBvciBwYXRjaAorCQkJZ2l0IGFwcGx5ICRwYXRjaCAmJgorCQkJdGVzdF9jbXAgZmlsZSBzb21ldGhpbmcgJiYKKwkJCT5maWxlICYmCisJCQlnaXQgYXBwbHkgJHBhdGNoICYmCisJCQl0ZXN0X2NtcCBmaWxlIHNvbWV0aGluZworCQkJOzsKKwkJZW1wdHkqKQorCQkJIyBtdXN0IGxlYXZlIGFuIGVtcHR5IGZpbGUKKwkJCWNhdCBzb21ldGhpbmcgPmZpbGUgJiYKKwkJCWdpdCBhZGQgZmlsZSAmJgorCQkJZ2l0IGFwcGx5IC0taW5kZXggJHBhdGNoICYmCisJCQl0ZXN0IC1mIGZpbGUgJiYKKwkJCXRlc3RfbXVzdF9iZV9lbXB0eSBmaWxlCisJCQk7OworCQlyZW1vdmUqKQorCQkJIyBtdXN0IHJlbW92ZSB0aGUgZmlsZQorCQkJY2F0IHNvbWV0aGluZyA+ZmlsZSAmJgorCQkJZ2l0IGFkZCBmaWxlICYmCisJCQlnaXQgYXBwbHkgLS1pbmRleCAkcGF0Y2ggJiYKKwkJCSEgdGVzdCAtZiBmaWxlCisJCQk7OworCQllc2FjCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzMtYXBwbHktZmlsZW5hbWVzLnNoIGIvdC90NDEzMy1hcHBseS1maWxlbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzVlZDNiMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzMtYXBwbHktZmlsZW5hbWVzLnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQW5kcmVhcyBHcnVlbmJhY2hlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgZmlsZW5hbWUgY29uc2lzdGVuY3kgY2hlY2snCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljYXQgPiBiYWQxLnBhdGNoIDw8RU9GICYmCitkaWZmIC0tZ2l0IGEvZiBiL2YKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kMDA0OTFmCistLS0gL2Rldi9udWxsCisrKysgYi9mLWJsYWgKK0BAIC0wLDAgKzEgQEAKKysxCitFT0YKKwljYXQgPiBiYWQyLnBhdGNoIDw8RU9GCitkaWZmIC0tZ2l0IGEvZiBiL2YKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDAwNDkxZi4uMDAwMDAwMAorLS0tIGIvZi1ibGFoCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistMQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGRpZmYgd2l0aCBpbmNvbnNpc3RlbnQgZmlsZW5hbWVzIGluIGhlYWRlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgYmFkMS5wYXRjaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUiIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBiYWQyLnBhdGNoIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGRpZmYgd2l0aCBuZXcgZmlsZW5hbWUgbWlzc2luZyBmcm9tIGhlYWRlcnMnICcKKwljYXQgPm1pc3NpbmdfbmV3X2ZpbGVuYW1lLmRpZmYgPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9mIGIvZgorCWluZGV4IDAwMDAwMDAuLmQwMDQ5MWYKKwktLS0gYS9mCisJQEAgLTAsMCArMSBAQAorCSsxCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IG1pc3NpbmdfbmV3X2ZpbGVuYW1lLmRpZmYgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGRpZmYgd2l0aCBvbGQgZmlsZW5hbWUgbWlzc2luZyBmcm9tIGhlYWRlcnMnICcKKwljYXQgPm1pc3Npbmdfb2xkX2ZpbGVuYW1lLmRpZmYgPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9mIGIvZgorCWluZGV4IGQwMDQ5MWYuLjAwMDAwMDAKKwkrKysgYi9mCisJQEAgLTEgKzAsMCBAQAorCS0xCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IG1pc3Npbmdfb2xkX2ZpbGVuYW1lLmRpZmYgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzNC1hcHBseS1zdWJtb2R1bGUuc2ggYi90L3Q0MTM0LWFwcGx5LXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OWVkNGNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNC1hcHBseS1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBQZXRlciBDb2xsaW5nYm91cm5lCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBzdWJtb2R1bGUgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X29pZF9pbml0ICYmCisJY2F0ID4gY3JlYXRlLXNtLnBhdGNoIDw8RU9GICYmCitkaWZmIC0tZ2l0IGEvZGlyL3NtIGIvZGlyL3NtCituZXcgZmlsZSBtb2RlIDE2MDAwMAoraW5kZXggMDAwMDAwMC4uMDEyMzQ1NgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3NtCitAQCAtMCwwICsxIEBACisrU3VicHJvamVjdCBjb21taXQgJCh0ZXN0X29pZCBudW1lcmljKQorRU9GCisJY2F0ID4gcmVtb3ZlLXNtLnBhdGNoIDw8RU9GCitkaWZmIC0tZ2l0IGEvZGlyL3NtIGIvZGlyL3NtCitkZWxldGVkIGZpbGUgbW9kZSAxNjAwMDAKK2luZGV4IDAxMjM0NTYuLjAwMDAwMDAKKy0tLSBhL2Rpci9zbQorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLVN1YnByb2plY3QgY29tbWl0ICQodGVzdF9vaWQgbnVtZXJpYykKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBhIHN1Ym1vZHVsZSBhbHNvIHJlbW92ZXMgYWxsIGxlYWRpbmcgc3ViZGlyZWN0b3JpZXMnICcKKwlnaXQgYXBwbHkgLS1pbmRleCBjcmVhdGUtc20ucGF0Y2ggJiYKKwl0ZXN0IC1kIGRpci9zbSAmJgorCWdpdCBhcHBseSAtLWluZGV4IHJlbW92ZS1zbS5wYXRjaCAmJgorCXRlc3QgXCEgLWQgZGlyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS1hcHBseS13ZWlyZC1maWxlbmFtZXMuc2ggYi90L3Q0MTM1LWFwcGx5LXdlaXJkLWZpbGVuYW1lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YmMzZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS1hcHBseS13ZWlyZC1maWxlbmFtZXMuc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgd2l0aCB3ZWlyZCBwb3N0aW1hZ2UgZmlsZW5hbWVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl2ZWN0b3I9JFRFU1RfRElSRUNUT1JZL3Q0MTM1ICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gcHJlaW1hZ2UgJiYKKwlnaXQgdGFnIHByZWltYWdlICYmCisKKwlyZXNldF9wcmVpbWFnZSgpIHsKKwkJZ2l0IGNoZWNrb3V0IC1mIHByZWltYWdlXjAgJiYKKwkJZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKwl9CisnCisKK3RyeV9maWxlbmFtZSgpIHsKKwlkZXNjPSQxCisJcG9zdGltYWdlPSQyCisJcHJlcmVxPSR7MzotfQorCWV4cDE9JHs0Oi1zdWNjZXNzfQorCWV4cDI9JHs1Oi1zdWNjZXNzfQorCWV4cDM9JHs2Oi1zdWNjZXNzfQorCisJdGVzdF9leHBlY3RfJGV4cDEgJHByZXJlcSAiJGRlc2MsIGdpdC1zdHlsZSBmaWxlIGNyZWF0aW9uIHBhdGNoIiAiCisJCWVjaG8gcG9zdGltYWdlID5leHBlY3RlZCAmJgorCQlyZXNldF9wcmVpbWFnZSAmJgorCQlybSAtZiAnJHBvc3RpbWFnZScgJiYKKwkJZ2l0IGFwcGx5IC12IFwiXCR2ZWN0b3JcIi8nZ2l0LSRkZXNjLmRpZmYnICYmCisJCXRlc3RfY21wIGV4cGVjdGVkICckcG9zdGltYWdlJworCSIKKworCXRlc3RfZXhwZWN0XyRleHAyICRwcmVyZXEgIiRkZXNjLCB0cmFkaXRpb25hbCBwYXRjaCIgIgorCQllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwkJcmVzZXRfcHJlaW1hZ2UgJiYKKwkJZWNobyBwcmVpbWFnZSA+JyRwb3N0aW1hZ2UnICYmCisJCWdpdCBhcHBseSAtdiBcIlwkdmVjdG9yXCIvJ2RpZmYtJGRlc2MuZGlmZicgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgJyRwb3N0aW1hZ2UnCisJIgorCisJdGVzdF9leHBlY3RfJGV4cDMgJHByZXJlcSAiJGRlc2MsIHRyYWRpdGlvbmFsIGZpbGUgY3JlYXRpb24gcGF0Y2giICIKKwkJZWNobyBwb3N0aW1hZ2UgPmV4cGVjdGVkICYmCisJCXJlc2V0X3ByZWltYWdlICYmCisJCXJtIC1mICckcG9zdGltYWdlJyAmJgorCQlnaXQgYXBwbHkgLXYgXCJcJHZlY3RvclwiLydhZGQtJGRlc2MuZGlmZicgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgJyRwb3N0aW1hZ2UnCisJIgorfQorCit0cnlfZmlsZW5hbWUgJ3BsYWluJyAgICAgICAgICAgICdwb3N0aW1hZ2UudHh0JwordHJ5X2ZpbGVuYW1lICd3aXRoIHNwYWNlcycgICAgICAncG9zdCBpbWFnZS50eHQnCit0cnlfZmlsZW5hbWUgJ3dpdGggdGFiJyAgICAgICAgICdwb3N0CWltYWdlLnR4dCcgRlVOTllOQU1FUwordHJ5X2ZpbGVuYW1lICd3aXRoIGJhY2tzbGFzaCcgICAncG9zdFxpbWFnZS50eHQnIEJTTEFTSFBTUEVDCit0cnlfZmlsZW5hbWUgJ3dpdGggcXVvdGUnICAgICAgICcicG9zdGltYWdlIi50eHQnIEZVTk5ZTkFNRVMgc3VjY2VzcyBmYWlsdXJlIHN1Y2Nlc3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZS1kYW1hZ2VkIHRyYWRpdGlvbmFsIHBhdGNoJyAnCisJZWNobyBwb3N0aW1hZ2UgPmV4cGVjdGVkICYmCisJcmVzZXRfcHJlaW1hZ2UgJiYKKwlybSAtZiBwb3N0aW1hZ2UudHh0ICYmCisJZ2l0IGFwcGx5IC12ICIkdmVjdG9yL2RhbWFnZWQuZGlmZiIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBwb3N0aW1hZ2UudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWRpdGlvbmFsIHBhdGNoIHdpdGggY29sb24gaW4gdGltZXpvbmUnICcKKwllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwlyZXNldF9wcmVpbWFnZSAmJgorCXJtIC1mICJwb3N0IGltYWdlLnR4dCIgJiYKKwlnaXQgYXBwbHkgIiR2ZWN0b3IvZnVubnktdHouZGlmZiIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAicG9zdCBpbWFnZS50eHQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWRpdGlvbmFsLCB3aGl0ZXNwYWNlLWRhbWFnZWQsIGNvbG9uIGluIHRpbWV6b25lJyAnCisJZWNobyBwb3N0aW1hZ2UgPmV4cGVjdGVkICYmCisJcmVzZXRfcHJlaW1hZ2UgJiYKKwlybSAtZiAicG9zdCBpbWFnZS50eHQiICYmCisJZ2l0IGFwcGx5ICIkdmVjdG9yL2RhbWFnZWQtdHouZGlmZiIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAicG9zdCBpbWFnZS50eHQiCisnCisKK2NhdCA+ZGlmZi1mcm9tLXN2biA8PFxFT0YKK0luZGV4OiBNYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGlmZiAtLWdpdCBhL2JyYW5jaGVzL01ha2VmaWxlCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKy0tLSBhL2JyYW5jaGVzL01ha2VmaWxlCShyZXZpc2lvbiAxMykKKysrKyAvZGV2L251bGwJKG5vbmV4aXN0ZW50KQorQEAgKzEgMCwwIEBACistCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaGFuZGxlcyBhIGRpZmYgZ2VuZXJhdGVkIGJ5IFN1YnZlcnNpb24nICcKKwk+TWFrZWZpbGUgJiYKKwlnaXQgYXBwbHkgLXAyIGRpZmYtZnJvbS1zdm4gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBNYWtlZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzUvLmdpdGlnbm9yZSBiL3QvdDQxMzUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU4ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL2ZpbGUtY3JlYXRpb24vCisvdHJhZC1jcmVhdGlvbi8KKy90cmFkLW1vZGlmaWNhdGlvbi8KZGlmZiAtLWdpdCBhL3QvdDQxMzUvYWRkLXBsYWluLmRpZmYgYi90L3Q0MTM1L2FkZC1wbGFpbi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTk3MGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2FkZC1wbGFpbi5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtcHJ1TiBhL3Bvc3RpbWFnZS50eHQgYi9wb3N0aW1hZ2UudHh0CistLS0gYS9wb3N0aW1hZ2UudHh0CTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgYi9wb3N0aW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNDg0MDAyMjU1IC0wNTAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2FkZC13aXRoIGJhY2tzbGFzaC5kaWZmIGIvdC90NDEzNS9hZGQtd2l0aCBiYWNrc2xhc2guZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg2MWUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9hZGQtd2l0aCBiYWNrc2xhc2guZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXBydU4gYS9wb3N0XGltYWdlLnR4dCBiL3Bvc3RcaW1hZ2UudHh0CistLS0gYS9wb3N0XGltYWdlLnR4dAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGIvcG9zdFxpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS42OTIwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvYWRkLXdpdGggcXVvdGUuZGlmZiBiL3QvdDQxMzUvYWRkLXdpdGggcXVvdGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjZkZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9hZGQtd2l0aCBxdW90ZS5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtcHJ1TiBhLyJwb3N0aW1hZ2UiLnR4dCBiLyJwb3N0aW1hZ2UiLnR4dAorLS0tIGEvInBvc3RpbWFnZSIudHh0CTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgYi8icG9zdGltYWdlIi50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS43NTYwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvYWRkLXdpdGggc3BhY2VzLmRpZmYgYi90L3Q0MTM1L2FkZC13aXRoIHNwYWNlcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YTEyMTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2FkZC13aXRoIHNwYWNlcy5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtcHJ1TiBhL3Bvc3QgaW1hZ2UudHh0IGIvcG9zdCBpbWFnZS50eHQKKy0tLSBhL3Bvc3QgaW1hZ2UudHh0CTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgYi9wb3N0IGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjU1NjAwMjI1NSAtMDUwMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9hZGQtd2l0aCB0YWIuZGlmZiBiL3QvdDQxMzUvYWRkLXdpdGggdGFiLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2N2NiNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvYWRkLXdpdGggdGFiLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvcG9zdAlpbWFnZS50eHQgYi9wb3N0CWltYWdlLnR4dAorLS0tIGEvcG9zdAlpbWFnZS50eHQJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiL3Bvc3QJaW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNjI4MDAyMjU1IC0wNTAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2RhbWFnZWQtdHouZGlmZiBiL3QvdDQxMzUvZGFtYWdlZC10ei5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YWFmMDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2RhbWFnZWQtdHouZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXVyTiAtWCAvdXNyL3Blb3BsZS9qZXMvZXhjbHVkZS1saW51eCBsaW51eC0yLjYuMTItcmMyLW1tMy12YW5pbGxhL3Bvc3QgaW1hZ2UudHh0IGxpbnV4LTIuNi4xMi1yYzItbW0zL3Bvc3QgaW1hZ2UudHh0CistLS0gbGludXgtMi42LjEyLXJjMi1tbTMtdmFuaWxsYS9wb3N0IGltYWdlLnR4dCAxOTY5LTEyLTMxIDE2OjAwOjAwIC0wODowMAorKysrIGxpbnV4LTIuNi4xMi1yYzItbW0zL3Bvc3QgaW1hZ2UudHh0IDIwMDUtMDQtMTIgMDI6MTQ6MDYgLTA3OjAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2RhbWFnZWQuZGlmZiBiL3QvdDQxMzUvZGFtYWdlZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZjdlZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2RhbWFnZWQuZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXBydU4gYS9wb3N0aW1hZ2UudHh0IGIvcG9zdGltYWdlLnR4dAorLS0tIGEvcG9zdGltYWdlLnR4dCAgICAgMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiL3Bvc3RpbWFnZS50eHQgICAgIDIwMTAtMDgtMTggMjA6MTM6MzEuNDg0MDAyMjU1IC0wNTAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2RpZmYtcGxhaW4uZGlmZiBiL3QvdDQxMzUvZGlmZi1wbGFpbi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZWRjZmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2RpZmYtcGxhaW4uZGlmZgpAQCAtMCwwICsxLDUgQEAKKy0tLSBwb3N0aW1hZ2UudHh0Lm9yaWcJMjAxMC0wOC0xOCAyMDoxMzozMS40MzIwMDIyNTUgLTA1MDAKKysrKyBwb3N0aW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNDMyMDAyMjU1IC0wNTAwCitAQCAtMSArMSBAQAorLXByZWltYWdlCisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2RpZmYtd2l0aCBiYWNrc2xhc2guZGlmZiBiL3QvdDQxMzUvZGlmZi13aXRoIGJhY2tzbGFzaC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjhhNjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2RpZmYtd2l0aCBiYWNrc2xhc2guZGlmZgpAQCAtMCwwICsxLDUgQEAKKy0tLSBwb3N0XGltYWdlLnR4dC5vcmlnCTIwMTAtMDgtMTggMjA6MTM6MzEuNjgwMDAyMjU1IC0wNTAwCisrKysgcG9zdFxpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS42ODAwMDIyNTUgLTA1MDAKK0BAIC0xICsxIEBACistcHJlaW1hZ2UKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGlmZi13aXRoIHF1b3RlLmRpZmYgYi90L3Q0MTM1L2RpZmYtd2l0aCBxdW90ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZThjYzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2RpZmYtd2l0aCBxdW90ZS5kaWZmCkBAIC0wLDAgKzEsNSBAQAorLS0tICJwb3N0aW1hZ2UiLnR4dC5vcmlnCTIwMTAtMDgtMTggMjA6MTM6MzEuNzQ0MDAyMjU1IC0wNTAwCisrKysgInBvc3RpbWFnZSIudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNzQ0MDAyMjU1IC0wNTAwCitAQCAtMSArMSBAQAorLXByZWltYWdlCisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2RpZmYtd2l0aCBzcGFjZXMuZGlmZiBiL3QvdDQxMzUvZGlmZi13aXRoIHNwYWNlcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MTIwNTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2RpZmYtd2l0aCBzcGFjZXMuZGlmZgpAQCAtMCwwICsxLDUgQEAKKy0tLSBwb3N0IGltYWdlLnR4dC5vcmlnCTIwMTAtMDgtMTggMjA6MTM6MzEuNTQ0MDAyMjU1IC0wNTAwCisrKysgcG9zdCBpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS41NDQwMDIyNTUgLTA1MDAKK0BAIC0xICsxIEBACistcHJlaW1hZ2UKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGlmZi13aXRoIHRhYi5kaWZmIGIvdC90NDEzNS9kaWZmLXdpdGggdGFiLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2ZDliMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi13aXRoIHRhYi5kaWZmCkBAIC0wLDAgKzEsNSBAQAorLS0tIHBvc3QJaW1hZ2UudHh0Lm9yaWcJMjAxMC0wOC0xOCAyMDoxMzozMS42MTYwMDIyNTUgLTA1MDAKKysrKyBwb3N0CWltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjYxNjAwMjI1NSAtMDUwMAorQEAgLTEgKzEgQEAKKy1wcmVpbWFnZQorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9mdW5ueS10ei5kaWZmIGIvdC90NDEzNS9mdW5ueS10ei5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGUzYTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2Z1bm55LXR6LmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC11ck4gLVggL3Vzci9wZW9wbGUvamVzL2V4Y2x1ZGUtbGludXggbGludXgtMi42LjEyLXJjMi1tbTMtdmFuaWxsYS9wb3N0IGltYWdlLnR4dCBsaW51eC0yLjYuMTItcmMyLW1tMy9wb3N0IGltYWdlLnR4dAorLS0tIGxpbnV4LTIuNi4xMi1yYzItbW0zLXZhbmlsbGEvcG9zdCBpbWFnZS50eHQJMTk2OS0xMi0zMSAxNjowMDowMCAtMDg6MDAKKysrKyBsaW51eC0yLjYuMTItcmMyLW1tMy9wb3N0IGltYWdlLnR4dAkyMDA1LTA0LTEyIDAyOjE0OjA2IC0wNzowMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9naXQtcGxhaW4uZGlmZiBiL3QvdDQxMzUvZ2l0LXBsYWluLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0N2QxYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZ2l0LXBsYWluLmRpZmYKQEAgLTAsMCArMSw3IEBACitkaWZmIC0tZ2l0IGEvcG9zdGltYWdlLnR4dCBiL3Bvc3RpbWFnZS50eHQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lZmYwYzU0CistLS0gL2Rldi9udWxsCisrKysgYi9wb3N0aW1hZ2UudHh0CitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2dpdC13aXRoIGJhY2tzbGFzaC5kaWZmIGIvdC90NDEzNS9naXQtd2l0aCBiYWNrc2xhc2guZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTg0YTEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9naXQtd2l0aCBiYWNrc2xhc2guZGlmZgpAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgImEvcG9zdFxcaW1hZ2UudHh0IiAiYi9wb3N0XFxpbWFnZS50eHQiCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWZmMGM1NAorLS0tIC9kZXYvbnVsbAorKysrICJiL3Bvc3RcXGltYWdlLnR4dCIKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZ2l0LXdpdGggcXVvdGUuZGlmZiBiL3QvdDQxMzUvZ2l0LXdpdGggcXVvdGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGJlYThhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9naXQtd2l0aCBxdW90ZS5kaWZmCkBAIC0wLDAgKzEsNyBAQAorZGlmZiAtLWdpdCAiYS9cInBvc3RpbWFnZVwiLnR4dCIgImIvXCJwb3N0aW1hZ2VcIi50eHQiCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWZmMGM1NAorLS0tIC9kZXYvbnVsbAorKysrICJiL1wicG9zdGltYWdlXCIudHh0IgorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9naXQtd2l0aCBzcGFjZXMuZGlmZiBiL3QvdDQxMzUvZ2l0LXdpdGggc3BhY2VzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhYTgxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZ2l0LXdpdGggc3BhY2VzLmRpZmYKQEAgLTAsMCArMSw3IEBACitkaWZmIC0tZ2l0IGEvcG9zdCBpbWFnZS50eHQgYi9wb3N0IGltYWdlLnR4dAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmZjBjNTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3Bvc3QgaW1hZ2UudHh0CQorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9naXQtd2l0aCB0YWIuZGlmZiBiL3QvdDQxMzUvZ2l0LXdpdGggdGFiLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhM2M5MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZ2l0LXdpdGggdGFiLmRpZmYKQEAgLTAsMCArMSw3IEBACitkaWZmIC0tZ2l0ICJhL3Bvc3RcdGltYWdlLnR4dCIgImIvcG9zdFx0aW1hZ2UudHh0IgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmZjBjNTQKKy0tLSAvZGV2L251bGwKKysrKyAiYi9wb3N0XHRpbWFnZS50eHQiCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L21ha2UtcGF0Y2hlcyBiL3QvdDQxMzUvbWFrZS1wYXRjaGVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1ZjQ1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L21ha2UtcGF0Y2hlcwpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKworZG9fZmlsZW5hbWUoKSB7CisJZGVzYz0kMQorCXBvc3RpbWFnZT0kMgorCisJcm0gLWZyIGZpbGUtY3JlYXRpb24gJiYKKwlnaXQgaW5pdCBmaWxlLWNyZWF0aW9uICYmCisJKAorCQljZCBmaWxlLWNyZWF0aW9uICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0ICYmCisJCWVjaG8gcG9zdGltYWdlID4iJHBvc3RpbWFnZSIgJiYKKwkJZ2l0IGFkZCAtTiAiJHBvc3RpbWFnZSIgJiYKKwkJZ2l0IGRpZmYgSEVBRCA+Ii4uL2dpdC0kZGVzYy5kaWZmIgorCSkgJiYKKworCXJtIC1mciB0cmFkLW1vZGlmaWNhdGlvbiAmJgorCW1rZGlyIHRyYWQtbW9kaWZpY2F0aW9uICYmCisJKAorCQljZCB0cmFkLW1vZGlmaWNhdGlvbiAmJgorCQllY2hvIHByZWltYWdlID4iJHBvc3RpbWFnZS5vcmlnIiAmJgorCQllY2hvIHBvc3RpbWFnZSA+IiRwb3N0aW1hZ2UiICYmCisJCSEgZGlmZiAtdSAiJHBvc3RpbWFnZS5vcmlnIiAiJHBvc3RpbWFnZSIgPiIuLi9kaWZmLSRkZXNjLmRpZmYiCisJKSAmJgorCisJcm0gLWZyIHRyYWQtY3JlYXRpb24gJiYKKwlta2RpciB0cmFkLWNyZWF0aW9uICYmCisJKAorCQljZCB0cmFkLWNyZWF0aW9uICYmCisJCW1rZGlyIGEgYiAmJgorCQllY2hvIHBvc3RpbWFnZSA+ImIvJHBvc3RpbWFnZSIgJiYKKwkJISBkaWZmIC1wcnVOIGEgYiA+Ii4uL2FkZC0kZGVzYy5kaWZmIgorCSkKK30KKworZG9fZmlsZW5hbWUgcGxhaW4gcG9zdGltYWdlLnR4dCAmJgorZG9fZmlsZW5hbWUgJ3dpdGggc3BhY2VzJyAncG9zdCBpbWFnZS50eHQnICYmCitkb19maWxlbmFtZSAnd2l0aCB0YWInICdwb3N0CWltYWdlLnR4dCcgJiYKK2RvX2ZpbGVuYW1lICd3aXRoIGJhY2tzbGFzaCcgJ3Bvc3RcaW1hZ2UudHh0JyAmJgorZG9fZmlsZW5hbWUgJ3dpdGggcXVvdGUnICcicG9zdGltYWdlIi50eHQnICYmCitleHBhbmQgYWRkLXBsYWluLmRpZmYgPmRhbWFnZWQuZGlmZiB8fAoreworCWVjaG8gPiYyIEZhaWxlZC4gJiYKKwlleGl0IDEKK30KZGlmZiAtLWdpdCBhL3QvdDQxMzYtYXBwbHktY2hlY2suc2ggYi90L3Q0MTM2LWFwcGx5LWNoZWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjM2YyNjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM2LWFwcGx5LWNoZWNrLnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgc2hvdWxkIGV4aXQgbm9uLXplcm8gd2l0aCB1bnJlY29nbml6ZWQgaW5wdXQuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tY2hlY2sgZXhpdHMgbm9uLXplcm8gd2l0aCB1bnJlY29nbml6ZWQgaW5wdXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jaGVjayAtIDw8LVxFT0YKKwlJIGFtIG5vdCBhIHBhdGNoCisJSSBsb29rIG5vdGhpbmcgbGlrZSBhIHBhdGNoCisJZ2l0IGFwcGx5IG11c3QgZmFpbAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBleGl0cyBub24temVybyB3aXRoIG5vLW9wIHBhdGNoJyAnCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJZGlmZiAtLWdldCBhLzEgYi8xCisJaW5kZXggNjY5NmVhNC4uNjA2ZWRkZCAxMDA2NDQKKwktLS0gYS8xCisJKysrIGIvMQorCUBAIC0xLDEgKzEsMSBAQAorCSAxCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tc3RhdCBpbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2BhcHBseSAtLXJlY291bnRgIGFsbG93cyBuby1vcCBwYXRjaCcgJworCWVjaG8gMSA+MSAmJgorCWdpdCBhcHBseSAtLXJlY291bnQgLS1jaGVjayA8PC1cRU9GCisJZGlmZiAtLWdldCBhLzEgYi8xCisJaW5kZXggNjY5NmVhNC4uNjA2ZWRkZCAxMDA2NDQKKwktLS0gYS8xCisJKysrIGIvMQorCUBAIC0xLDEgKzEsMSBAQAorCSAxCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgY29tYmluYXRpb246IGNyZWF0ZSBhbmQgY29weScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIC0gPDwtXEVPRgorCWRpZmYgLS1naXQgYS8xIGIvMgorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJY29weSBmcm9tIDEKKwljb3B5IHRvIDIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBjb21iaW5hdGlvbjogY3JlYXRlIGFuZCByZW5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jaGVjayAtIDw8LVxFT0YKKwlkaWZmIC0tZ2l0IGEvMSBiLzIKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCXJlbmFtZSBmcm9tIDEKKwlyZW5hbWUgdG8gMgorCUVPRgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzctYXBwbHktc3VibW9kdWxlLnNoIGIvdC90NDEzNy1hcHBseS1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTliZDQwYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzctYXBwbHktc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaGFuZGxpbmcgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK2FwcGx5X2luZGV4ICgpIHsKKwlnaXQgZGlmZiAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ICIuLiQxIiB8IGdpdCBhcHBseSAtLWluZGV4IC0KK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJhcHBseV9pbmRleCIKKworYXBwbHlfM3dheSAoKSB7CisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAiLi4kMSIgfCBnaXQgYXBwbHkgLS0zd2F5IC0KK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJhcHBseV8zd2F5IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzgtYXBwbHktd3MtZXhwYW5zaW9uLnNoIGIvdC90NDEzOC1hcHBseS13cy1leHBhbnNpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjE5ZmFlYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzgtYXBwbHktd3MtZXhwYW5zaW9uLnNoCkBAIC0wLDAgKzEsMTIxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEt5bGUgSi4gTWNLYXkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHRlc3QgcGF0Y2hlcyB3aXRoIHdoaXRlc3BhY2UgZXhwYW5zaW9uLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSMKKwkjIyBjcmVhdGUgdGVzdC1OLCBwYXRjaE4ucGF0Y2gsIGV4cGVjdC1OIGZpbGVzCisJIworCisJIyB0ZXN0IDEKKwlwcmludGYgIlx0JXNcbiIgMSAyIDMgNCA1IDYgPmJlZm9yZSAmJgorCXByaW50ZiAiXHQlc1xuIiAxIDIgMyA+YWZ0ZXIgJiYKKwlwcmludGYgIiU2NHNcbiIgYSBiIGMgPj5hZnRlciAmJgorCXByaW50ZiAiXHQlc1xuIiA0IDUgNiA+PmFmdGVyICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyID5wYXRjaDEucGF0Y2gucmF3ICYmCisJc2VkIC1lICJzL2JlZm9yZS90ZXN0LTEvIiAtZSAicy9hZnRlci90ZXN0LTEvIiBwYXRjaDEucGF0Y2gucmF3ID5wYXRjaDEucGF0Y2ggJiYKKwlwcmludGYgIiU2NHNcbiIgMSAyIDMgNCA1IDYgPnRlc3QtMSAmJgorCXByaW50ZiAiJTY0c1xuIiAxIDIgMyBhIGIgYyA0IDUgNiA+ZXhwZWN0LTEgJiYKKworCSMgdGVzdCAyCisJcHJpbnRmICJcdCVzXG4iIGEgYiBjIGQgZSBmID5iZWZvcmUgJiYKKwlwcmludGYgIlx0JXNcbiIgYSBiIGMgPmFmdGVyICYmCisJbj0xMCAmJgorCXg9MSAmJgorCXdoaWxlIHRlc3QgJHggLWx0ICRuCisJZG8KKwkJcHJpbnRmICIlNjNzJWRcbiIgIiIgJHggPj5hZnRlcgorCQl4PSQoKCAkeCArIDEgKSkKKwlkb25lICYmCisJcHJpbnRmICJcdCVzXG4iIGQgZSBmID4+YWZ0ZXIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgPnBhdGNoMi5wYXRjaC5yYXcgJiYKKwlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtMi8iIC1lICJzL2FmdGVyL3Rlc3QtMi8iIHBhdGNoMi5wYXRjaC5yYXcgPnBhdGNoMi5wYXRjaCAmJgorCXByaW50ZiAiJTY0c1xuIiBhIGIgYyBkIGUgZiA+dGVzdC0yICYmCisJcHJpbnRmICIlNjRzXG4iIGEgYiBjID5leHBlY3QtMiAmJgorCXg9MSAmJgorCXdoaWxlIHRlc3QgJHggLWx0ICRuCisJZG8KKwkJcHJpbnRmICIlNjNzJWRcbiIgIiIgJHggPj5leHBlY3QtMgorCQl4PSQoKCAkeCArIDEgKSkKKwlkb25lICYmCisJcHJpbnRmICIlNjRzXG4iIGQgZSBmID4+ZXhwZWN0LTIgJiYKKworCSMgdGVzdCAzCisJcHJpbnRmICJcdCVzXG4iIGEgYiBjIGQgZSBmID5iZWZvcmUgJiYKKwlwcmludGYgIlx0JXNcbiIgYSBiIGMgPmFmdGVyICYmCisJbj0xMDAgJiYKKwl4PTAgJiYKKwl3aGlsZSB0ZXN0ICR4IC1sdCAkbgorCWRvCisJCXByaW50ZiAiJTYzcyUwMmRcbiIgIiIgJHggPj5hZnRlcgorCQl4PSQoKCAkeCArIDEgKSkKKwlkb25lICYmCisJcHJpbnRmICJcdCVzXG4iIGQgZSBmID4+YWZ0ZXIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgPnBhdGNoMy5wYXRjaC5yYXcgJiYKKwlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtMy8iIC1lICJzL2FmdGVyL3Rlc3QtMy8iIHBhdGNoMy5wYXRjaC5yYXcgPnBhdGNoMy5wYXRjaCAmJgorCXByaW50ZiAiJTY0c1xuIiBhIGIgYyBkIGUgZiA+dGVzdC0zICYmCisJcHJpbnRmICIlNjRzXG4iIGEgYiBjID5leHBlY3QtMyAmJgorCXg9MCAmJgorCXdoaWxlIHRlc3QgJHggLWx0ICRuCisJZG8KKwkJcHJpbnRmICIlNjNzJTAyZFxuIiAiIiAkeCA+PmV4cGVjdC0zCisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKwlwcmludGYgIiU2NHNcbiIgZCBlIGYgPj5leHBlY3QtMyAmJgorCisJIyB0ZXN0IDQKKwk+YmVmb3JlICYmCisJeD0wICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgNTAKKwlkbworCQlwcmludGYgIlx0JTAyZFxuIiAkeCA+PmJlZm9yZQorCQl4PSQoKCAkeCArIDEgKSkKKwlkb25lICYmCisJY2F0IGJlZm9yZSA+YWZ0ZXIgJiYKKwlwcmludGYgIiU2NHNcbiIgYSBiIGMgPj5hZnRlciAmJgorCXdoaWxlIHRlc3QgJHggLWx0IDEwMAorCWRvCisJCXByaW50ZiAiXHQlMDJkXG4iICR4ID4+YmVmb3JlCisJCXByaW50ZiAiXHQlMDJkXG4iICR4ID4+YWZ0ZXIKKwkJeD0kKCggJHggKyAxICkpCisJZG9uZSAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IGJlZm9yZSBhZnRlciA+cGF0Y2g0LnBhdGNoLnJhdyAmJgorCXNlZCAtZSAicy9iZWZvcmUvdGVzdC00LyIgLWUgInMvYWZ0ZXIvdGVzdC00LyIgcGF0Y2g0LnBhdGNoLnJhdyA+cGF0Y2g0LnBhdGNoICYmCisJPnRlc3QtNCAmJgorCXg9MCAmJgorCXdoaWxlIHRlc3QgJHggLWx0IDUwCisJZG8KKwkJcHJpbnRmICIlNjNzJTAyZFxuIiAiIiAkeCA+PnRlc3QtNAorCQl4PSQoKCAkeCArIDEgKSkKKwlkb25lICYmCisJY2F0IHRlc3QtNCA+ZXhwZWN0LTQgJiYKKwlwcmludGYgIiU2NHNcbiIgYSBiIGMgPj5leHBlY3QtNCAmJgorCXdoaWxlIHRlc3QgJHggLWx0IDEwMAorCWRvCisJCXByaW50ZiAiJTYzcyUwMmRcbiIgIiIgJHggPj50ZXN0LTQKKwkJcHJpbnRmICIlNjNzJTAyZFxuIiAiIiAkeCA+PmV4cGVjdC00CisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIHRhYi1pbi1pbmRlbnQsdGFid2lkdGg9NjMgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2UgZml4CisKKycKKworIyBOb3RlIHRoYXQgYHBhdGNoYCBjYW4gc3VjY2Vzc2Z1bGx5IGFwcGx5IGFsbCBwYXRjaGVzIHdoZW4gcnVuCisjIHdpdGggdGhlIC0taWdub3JlLXdoaXRlc3BhY2Ugb3B0aW9uLgorCitmb3IgdCBpbiAxIDIgMyA0CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggd3MgZXhwYW5zaW9uICh0PSR0KScgJworCQlnaXQgYXBwbHkgcGF0Y2gkdC5wYXRjaCAmJgorCQl0ZXN0X2NtcCBleHBlY3QtJHQgdGVzdC0kdAorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTM5LWFwcGx5LWVzY2FwZS5zaCBiL3QvdDQxMzktYXBwbHktZXNjYXBlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1YjU2NjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM5LWFwcGx5LWVzY2FwZS5zaApAQCAtMCwwICsxLDE0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhdGhzIHdyaXR0ZW4gYnkgZ2l0LWFwcGx5IGNhbm5vdCBlc2NhcGUgdGhlIHdvcmtpbmcgdHJlZScKKy4gLi90ZXN0LWxpYi5zaAorCisjIHRlc3RzIHdpbGwgdHJ5IHRvIHdyaXRlIHRvIC4uL2ZvbywgYW5kIHdlIGRvIG5vdAorIyB3YW50IHRoZW0gdG8gZXNjYXBlIHRoZSB0cmFzaCBkaXJlY3Rvcnkgd2hlbiB0aGV5CisjIGZhaWwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bXAgZ2l0IHJlcG8gb25lIGxldmVsIGRvd24nICcKKwlta2RpciBpbnNpZGUgJiYKKwltdiAuZ2l0IGluc2lkZS8gJiYKKwljZCBpbnNpZGUKKycKKworIyAkMSA9IG5hbWUgb2YgZmlsZQorIyAkMiA9IGN1cnJlbnQgcGF0aCB0byBmaWxlIChpZiBkaWZmZXJlbnQpCitta3BhdGNoX2FkZCAoKSB7CisJcm0gLWYgIiR7MjotJDF9IiAmJgorCWNhdCA8PC1FT0YKKwlkaWZmIC0tZ2l0IGEvJDEgYi8kMQorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggMDAwMDAwMC4uNTNjNzRjZAorCS0tLSAvZGV2L251bGwKKwkrKysgYi8kMQorCUBAIC0wLDAgKzEgQEAKKwkrZXZpbAorCUVPRgorfQorCitta3BhdGNoX2RlbCAoKSB7CisJZWNobyBldmlsID4iJHsyOi0kMX0iICYmCisJY2F0IDw8LUVPRgorCWRpZmYgLS1naXQgYS8kMSBiLyQxCisJZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggNTNjNzRjZC4uMDAwMDAwMAorCS0tLSBhLyQxCisJKysrIC9kZXYvbnVsbAorCUBAIC0xICswLDAgQEAKKwktZXZpbAorCUVPRgorfQorCisjICQxID0gbmFtZSBvZiBmaWxlCisjICQyID0gY29udGVudCBvZiBzeW1saW5rCitta3BhdGNoX3N5bWxpbmsgKCkgeworCXJtIC1mICIkMSIgJiYKKwljYXQgPDwtRU9GCisJZGlmZiAtLWdpdCBhLyQxIGIvJDEKKwluZXcgZmlsZSBtb2RlIDEyMDAwMAorCWluZGV4IDAwMDAwMDAuLiQocHJpbnRmICIlcyIgIiQyIiB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKQorCS0tLSAvZGV2L251bGwKKwkrKysgYi8kMQorCUBAIC0wLDAgKzEgQEAKKwkrJDIKKwlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGNyZWF0ZSBmaWxlIGNvbnRhaW5pbmcgLi4nICcKKwlta3BhdGNoX2FkZCAuLi9mb28gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLi4vZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBjcmVhdGUgZmlsZSBjb250YWluaW5nIC4uIHdpdGggLS11bnNhZmUtcGF0aHMnICcKKwlta3BhdGNoX2FkZCAuLi9mb28gPnBhdGNoICYmCisJZ2l0IGFwcGx5IC0tdW5zYWZlLXBhdGhzIHBhdGNoICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLi4vZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgICdjYW5ub3QgY3JlYXRlIGZpbGUgY29udGFpbmluZyAuLiAoaW5kZXgpJyAnCisJbWtwYXRjaF9hZGQgLi4vZm9vID5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IHBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLi4vZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgICdjYW5ub3QgY3JlYXRlIGZpbGUgY29udGFpbmluZyAuLiB3aXRoIC0tdW5zYWZlLXBhdGhzIChpbmRleCknICcKKwlta3BhdGNoX2FkZCAuLi9mb28gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS11bnNhZmUtcGF0aHMgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGRlbGV0ZSBmaWxlIGNvbnRhaW5pbmcgLi4nICcKKwlta3BhdGNoX2RlbCAuLi9mb28gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLi4vZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBkZWxldGUgZmlsZSBjb250YWluaW5nIC4uIHdpdGggLS11bnNhZmUtcGF0aHMnICcKKwlta3BhdGNoX2RlbCAuLi9mb28gPnBhdGNoICYmCisJZ2l0IGFwcGx5IC0tdW5zYWZlLXBhdGhzIHBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLi4vZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCBkZWxldGUgZmlsZSBjb250YWluaW5nIC4uIChpbmRleCknICcKKwlta3BhdGNoX2RlbCAuLi9mb28gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBlc2NhcGUgdmlhIC4uJyAnCisJeworCQlta3BhdGNoX3N5bWxpbmsgdG1wIC4uICYmCisJCW1rcGF0Y2hfYWRkIHRtcC9mb28gLi4vZm9vCisJfSA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0bXAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBlc2NhcGUgdmlhIC4uIChpbmRleCknICcKKwl7CisJCW1rcGF0Y2hfc3ltbGluayB0bXAgLi4gJiYKKwkJbWtwYXRjaF9hZGQgdG1wL2ZvbyAuLi9mb28KKwl9ID5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IHBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG1wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLi4vZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmsgZXNjYXBlIHZpYSBhYnNvbHV0ZSBwYXRoJyAnCisJeworCQlta3BhdGNoX3N5bWxpbmsgdG1wICIkKHB3ZCkiICYmCisJCW1rcGF0Y2hfYWRkIHRtcC9mb28gLi4vZm9vCisJfSA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0bXAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBlc2NhcGUgdmlhIGFic29sdXRlIHBhdGggKGluZGV4KScgJworCXsKKwkJbWtwYXRjaF9zeW1saW5rIHRtcCAiJChwd2QpIiAmJgorCQlta3BhdGNoX2FkZCB0bXAvZm9vIC4uL2ZvbworCX0gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0bXAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUwLWFtLnNoIGIvdC90NDE1MC1hbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYjQ1MjcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDE1MC1hbS5zaApAQCAtMCwwICsxLDExMzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYW0gcnVubmluZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBtZXNzYWdlcycgJworCWNhdCA+bXNnIDw8LVxFT0YgJiYKKwlzZWNvbmQKKworCUxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15CisJZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtCisJdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEKKwlrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbQorCWlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QKKwl0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQKKwl2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLgorCisJRU9GCisJcXpfdG9fdGFiX3NwYWNlIDw8LVxFT0YgPj5tc2cgJiYKKwlRRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0CisJUWVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzCisJUWF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdAorCVFwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEKKwlRZmFjaWxpc2kuCisJRU9GCisJY2F0ID4+bXNnIDw8LVxFT0YgJiYKKworCUxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LAorCWNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQsIHNlZCBkaWFtIG5vbnVtbXkgbmliaCBldWlzbW9kIHRpbmNpZHVudCB1dAorCWxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4KKworCSAgZ2l0CisJICAtLS0KKwkgICsrKworCisJVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQKKwlsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUKKwlkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0KKwlkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMgYXQgdmVybyBlcm9zIGV0IGFjY3Vtc2FuIGV0IGl1c3RvIG9kaW8KKwlkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZQorCWZldWdhaXQgbnVsbGEgZmFjaWxpc2kuCisKKwlSZXBvcnRlZC1ieTogQSBOIE90aGVyIDxhLm4ub3RoZXJAZXhhbXBsZS5jb20+CisJRU9GCisKKwljYXQgPmZhaWxtYWlsIDw8LVxFT0YgJiYKKwlGcm9tIGZvb0BleGFtcGxlLmNvbSBGcmkgTWF5IDIzIDEwOjQzOjQ5IDIwMDgKKwlGcm9tOglmb29AZXhhbXBsZS5jb20KKwlUbzoJYmFyQGV4YW1wbGUuY29tCisJU3ViamVjdDogUmU6IFtSRkMvUEFUQ0hdIGdpdC1mb28uc2gKKwlEYXRlOglGcmksIDIzIE1heSAyMDA4IDA1OjIzOjQyICswMjAwCisKKwlTb21ldGltZXMgd2UgaGF2ZSB0byBmaW5kIG91dCB0aGF0IHRoZXJlJ1wnJ3Mgbm90aGluZyBsZWZ0LgorCisJRU9GCisKKwljYXQgPnBpbmUgPDwtXEVPRiAmJgorCUZyb20gTUFJTEVSLURBRU1PTiBGcmkgTWF5IDIzIDEwOjQzOjQ5IDIwMDgKKwlEYXRlOiAyMyBNYXkgMjAwOCAwNToyMzo0MiArMDIwMAorCUZyb206IE1haWwgU3lzdGVtIEludGVybmFsIERhdGEgPE1BSUxFUi1EQUVNT05AZXhhbXBsZS5jb20+CisJU3ViamVjdDogRE9OJ1wnJ1QgREVMRVRFIFRISVMgTUVTU0FHRSAtLSBGT0xERVIgSU5URVJOQUwgREFUQQorCU1lc3NhZ2UtSUQ6IDxmb28tMDAwMUBleGFtcGxlLmNvbT4KKworCVRoaXMgdGV4dCBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb3JtYXQgb2YgeW91ciBtYWlsIGZvbGRlciwgYW5kIGlzIG5vdAorCWEgcmVhbCBtZXNzYWdlLiAgSXQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBtYWlsIHN5c3RlbSBzb2Z0d2FyZS4KKwlJZiBkZWxldGVkLCBpbXBvcnRhbnQgZm9sZGVyIGRhdGEgd2lsbCBiZSBsb3N0LCBhbmQgaXQgd2lsbCBiZSByZS1jcmVhdGVkCisJd2l0aCB0aGUgZGF0YSByZXNldCB0byBpbml0aWFsIHZhbHVlcy4KKworCUVPRgorCisJY2F0ID5tc2ctd2l0aG91dC1zY2lzc29ycy1saW5lIDw8LVxFT0YgJiYKKwlUZXN0IHRoYXQgZ2l0LWFtIC0tc2Npc3NvcnMgY3V0cyBhdCB0aGUgc2Npc3NvcnMgbGluZQorCisJVGhpcyBsaW5lIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuCisJRU9GCisKKwlwcmludGYgIlN1YmplY3Q6ICIgPnN1YmplY3QtcHJlZml4ICYmCisKKwljYXQgLSBzdWJqZWN0LXByZWZpeCBtc2ctd2l0aG91dC1zY2lzc29ycy1saW5lID5tc2ctd2l0aC1zY2lzc29ycy1saW5lIDw8LVxFT0YKKwlUaGlzIGxpbmUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCAtLXNjaXNzb3JzIGVuYWJsZWQuCisKKwkgLSAtID44IC0gLSByZW1vdmUgZXZlcnl0aGluZyBhYm92ZSB0aGlzIGxpbmUgLSAtID44IC0gLQorCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gaGVsbG8gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisJZ2l0IHRhZyBmaXJzdCAmJgorCisJZWNobyB3b3JsZCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1GIG1zZyAmJgorCWdpdCB0YWcgc2Vjb25kICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0ID5wYXRjaDEgJiYKKwl7CisJCWVjaG8gIk1lc3NhZ2UtSWQ6IDwxMjI2NTAxNjgxLTI0OTIzLTEtZ2l0LXNlbmQtZW1haWwtYmRhQG1uc3NwYi5ydT4iICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBPbmUiICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUd28iICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUaHJlZSIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCB8IHNlZCAtZSAiMWQiCisJfSA+IHBhdGNoMS5lbWwgJiYKKwl7CisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBPbmUiICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUd28iICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUaHJlZSIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCB8IHNlZCAtZSAiMWQiCisJfSB8IGFwcGVuZF9jciA+cGF0Y2gxLWNybGYuZW1sICYmCisJeworCQlwcmludGYgIiUyNTVzXFxuIiAiIgorCQllY2hvICJYLUZha2UtRmllbGQ6IExpbmUgT25lIiAmJgorCQllY2hvICJYLUZha2UtRmllbGQ6IExpbmUgVHdvIiAmJgorCQllY2hvICJYLUZha2UtRmllbGQ6IExpbmUgVGhyZWUiICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgfCBzZWQgLWUgIjFkIgorCX0gPiBwYXRjaDEtd3MuZW1sICYmCisJeworCQlzZWQgLW5lICIxcCIgbXNnICYmCisJCWVjaG8gJiYKKwkJZWNobyAiRnJvbTogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IiAmJgorCQllY2hvICJEYXRlOiAkR0lUX0FVVEhPUl9EQVRFIiAmJgorCQllY2hvICYmCisJCXNlZCAtZSAiMSwyZCIgbXNnICYmCisJCWVjaG8gIi0tLSIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtLW5vLWNvbW1pdC1pZCAtLXN0YXQgLXAgc2Vjb25kCisJfSA+cGF0Y2gxLXN0Z2l0LmVtbCAmJgorCW1rZGlyIHN0Z2l0LXNlcmllcyAmJgorCWNwIHBhdGNoMS1zdGdpdC5lbWwgc3RnaXQtc2VyaWVzL3BhdGNoICYmCisJeworCQllY2hvICIjIFRoaXMgc2VyaWVzIGFwcGxpZXMgb24gR0lUIGNvbW1pdCAkKGdpdCByZXYtcGFyc2UgZmlyc3QpIiAmJgorCQllY2hvICJwYXRjaCIKKwl9ID5zdGdpdC1zZXJpZXMvc2VyaWVzICYmCisJeworCQllY2hvICIjIEhHIGNoYW5nZXNldCBwYXRjaCIgJiYKKwkJZWNobyAiIyBVc2VyICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiIgJiYKKwkJZWNobyAiIyBEYXRlICR0ZXN0X3RpY2sgMjUyMDAiICYmCisJCWVjaG8gIiMgICAgICAkKGdpdCBzaG93IC0tcHJldHR5PSIlYUQiIC1zIHNlY29uZCkiICYmCisJCWVjaG8gIiMgTm9kZSBJRCAkWkVST19PSUQiICYmCisJCWVjaG8gIiMgUGFyZW50ICAkWkVST19PSUQiICYmCisJCWNhdCBtc2cgJiYKKwkJZWNobyAmJgorCQlnaXQgZGlmZi10cmVlIC0tbm8tY29tbWl0LWlkIC1wIHNlY29uZAorCX0gPnBhdGNoMS1oZy5lbWwgJiYKKworCisJZWNobyBmaWxlID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtRiBtc2ctd2l0aG91dC1zY2lzc29ycy1saW5lICYmCisJZ2l0IHRhZyBleHBlY3RlZC1mb3Itc2Npc3NvcnMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisKKwllY2hvIGZpbGUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIG1zZy13aXRoLXNjaXNzb3JzLWxpbmUgJiYKKwlnaXQgdGFnIGV4cGVjdGVkLWZvci1uby1zY2lzc29ycyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZXhwZWN0ZWQtZm9yLW5vLXNjaXNzb3JzXiA+cGF0Y2gtd2l0aC1zY2lzc29ycy1saW5lLmVtbCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKworCXNlZCAtbiAtZSAiMyxcJHAiIG1zZyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMgkmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtICYmCisJc2VkIC1uIC1lICIxMSxcJHAiIG1zZyA+ZmlsZSAmJgorCWhlYWQgLW4gOSBtc2cgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibW92ZWQgc3R1ZmYiICYmCisKKwllY2hvIGdvb2RieWUgPmFub3RoZXIgJiYKKwlnaXQgYWRkIGFub3RoZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBhbm90aGVyIGZpbGUiICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3RlciA+bG9yZW0tbW92ZS5wYXRjaCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1wcmVmaXggLS1zdGRvdXQgbWFzdGVyID5sb3JlbS16ZXJvLnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lICYmCisJZ2l0IG12IGZpbGUgcmVuYW1lZCAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZWQgYSBmaWxlIiAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtTSAtLXN0ZG91dCBsb3JlbSA+cmVuYW1lLnBhdGNoICYmCisKKwlnaXQgcmVzZXQgLS1zb2Z0IGxvcmVtXiAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZWQgYSBmaWxlIGFuZCBhZGRlZCBhbm90aGVyIiAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtTSAtLXN0ZG91dCBsb3JlbV4gPnJlbmFtZS1hZGQucGF0Y2ggJiYKKworCSMgcmVzZXQgdGltZQorCXNhbmVfdW5zZXQgdGVzdF90aWNrICYmCisJdGVzdF90aWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggY29ycmVjdGx5JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSA8cGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZmFpbHMgaWYgaW5kZXggaXMgZGlydHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGRpcnR5ZmlsZSIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZWNobyBkaXJ0eWZpbGUgPmRpcnR5ZmlsZSAmJgorCWdpdCBhZGQgZGlydHlmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIHBhdGNoMSAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgZmlyc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBhcHBsaWVzIHBhdGNoIGUtbWFpbCBub3QgaW4gYSBtYm94JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCWdpdCBhbSBwYXRjaDEuZW1sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBwYXRjaCBlLW1haWwgbm90IGluIGEgbWJveCB3aXRoIENSTEYnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS1jcmxmLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggZS1tYWlsIHdpdGggcHJlY2VkaW5nIHdoaXRlc3BhY2UnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS13cy5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBhcHBsaWVzIHN0Z2l0IHBhdGNoJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNoZWNrb3V0IC1mIGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS1zdGdpdC5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmReIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcGF0Y2gtZm9ybWF0PXN0Z2l0IGFwcGxpZXMgc3RnaXQgcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwlnaXQgYW0gLS1wYXRjaC1mb3JtYXQ9c3RnaXQgPHBhdGNoMS1zdGdpdC5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmReIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgc3RnaXQgc2VyaWVzJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNoZWNrb3V0IC1mIGZpcnN0ICYmCisJZ2l0IGFtIHN0Z2l0LXNlcmllcy9zZXJpZXMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmReIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgaGcgcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gxLWhnLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZF4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1wYXRjaC1mb3JtYXQ9aGcgYXBwbGllcyBoZyBwYXRjaCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjaGVja291dCAtZiBmaXJzdCAmJgorCWdpdCBhbSAtLXBhdGNoLWZvcm1hdD1oZyA8cGF0Y2gxLWhnLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZF4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBhcHBseXBhdGNoLW1zZyBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2hvb2tzL2FwcGx5cGF0Y2gtbXNnIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvYXBwbHlwYXRjaC1tc2cgPDwtXEVPRiAmJgorCWNhdCAiJDEiID5hY3R1YWwtbXNnICYmCisJZWNobyBob29rLW1lc3NhZ2UgPiIkMSIKKwlFT0YKKwlnaXQgYW0gcGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwllY2hvIGhvb2stbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD1mb3JtYXQ6JUIgc2Vjb25kID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC1tc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBmYWlsaW5nIGFwcGx5cGF0Y2gtbXNnIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaG9va3MvYXBwbHlwYXRjaC1tc2ciICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9hcHBseXBhdGNoLW1zZyA8PC1cRU9GICYmCisJZXhpdCAxCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIHBhdGNoMSAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaXJzdCAmJgorCXRlc3RfY21wX3JldiBmaXJzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggcHJlLWFwcGx5cGF0Y2ggaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9ob29rcy9wcmUtYXBwbHlwYXRjaCIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3ByZS1hcHBseXBhdGNoIDw8LVxFT0YgJiYKKwlnaXQgZGlmZiBmaXJzdCA+ZGlmZi5hY3R1YWwKKwlleGl0IDAKKwlFT0YKKwlnaXQgYW0gcGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0X2NtcF9yZXYgc2Vjb25kIEhFQUQgJiYKKwlnaXQgZGlmZiBmaXJzdC4uc2Vjb25kID5kaWZmLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZGlmZi5leHBlY3RlZCBkaWZmLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGZhaWxpbmcgcHJlLWFwcGx5cGF0Y2ggaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9ob29rcy9wcmUtYXBwbHlwYXRjaCIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3ByZS1hcHBseXBhdGNoIDw8LVxFT0YgJiYKKwlleGl0IDEKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gcGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBmaXJzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggcG9zdC1hcHBseXBhdGNoIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaG9va3MvcG9zdC1hcHBseXBhdGNoIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcG9zdC1hcHBseXBhdGNoIDw8LVxFT0YgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmhlYWQuYWN0dWFsCisJZ2l0IGRpZmYgc2Vjb25kID5kaWZmLmFjdHVhbAorCWV4aXQgMAorCUVPRgorCWdpdCBhbSBwYXRjaDEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCWdpdCByZXYtcGFyc2Ugc2Vjb25kID5oZWFkLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgaGVhZC5leHBlY3RlZCBoZWFkLmFjdHVhbCAmJgorCWdpdCBkaWZmIHNlY29uZCA+ZGlmZi5leHBlY3RlZCAmJgorCXRlc3RfY21wIGRpZmYuZXhwZWN0ZWQgZGlmZi5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBmYWlsaW5nIHBvc3QtYXBwbHlwYXRjaCBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2hvb2tzL3Bvc3QtYXBwbHlwYXRjaCIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3Bvc3QtYXBwbHlwYXRjaCA8PC1cRU9GICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5oZWFkLmFjdHVhbAorCWV4aXQgMQorCUVPRgorCWdpdCBhbSBwYXRjaDEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCWdpdCByZXYtcGFyc2Ugc2Vjb25kID5oZWFkLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgaGVhZC5leHBlY3RlZCBoZWFkLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNjaXNzb3JzIGN1dHMgdGhlIG1lc3NhZ2UgYXQgdGhlIHNjaXNzb3JzIGxpbmUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCWdpdCBhbSAtLXNjaXNzb3JzIHBhdGNoLXdpdGgtc2Npc3NvcnMtbGluZS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGV4cGVjdGVkLWZvci1zY2lzc29ycyAmJgorCXRlc3RfY21wX3JldiBleHBlY3RlZC1mb3Itc2Npc3NvcnMgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLW5vLXNjaXNzb3JzIG92ZXJyaWRlcyBtYWlsaW5mby5zY2lzc29ycycgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJdGVzdF9jb25maWcgbWFpbGluZm8uc2Npc3NvcnMgdHJ1ZSAmJgorCWdpdCBhbSAtLW5vLXNjaXNzb3JzIHBhdGNoLXdpdGgtc2Npc3NvcnMtbGluZS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGV4cGVjdGVkLWZvci1uby1zY2lzc29ycyAmJgorCXRlc3RfY21wX3JldiBleHBlY3RlZC1mb3Itbm8tc2Npc3NvcnMgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogbmV3IGF1dGhvciBhbmQgY29tbWl0dGVyJyAnCisJR0lUX0FVVEhPUl9OQU1FPSJBbm90aGVyIFRob3IiICYmCisJR0lUX0FVVEhPUl9FTUFJTD0iYS50aG9yQGV4YW1wbGUuY29tIiAmJgorCUdJVF9DT01NSVRURVJfTkFNRT0iQ28gTSBNaXRlciIgJiYKKwlHSVRfQ09NTUlUVEVSX0VNQUlMPSJjLm1pdGVyQGV4YW1wbGUuY29tIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQ09NTUlUVEVSX05BTUUgR0lUX0NPTU1JVFRFUl9FTUFJTAorJworCitjb21wYXJlICgpIHsKKwlhPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDIiIHwgZ3JlcCAiXiQxICIpICYmCisJYj0kKGdpdCBjYXQtZmlsZSBjb21taXQgIiQzIiB8IGdyZXAgIl4kMSAiKSAmJgorCXRlc3QgIiRhIiA9ICIkYiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gY2hhbmdlcyBjb21taXR0ZXIgYW5kIGtlZXBzIGF1dGhvcicgJworCXRlc3RfdGljayAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIuLkhFQUQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeLi5IRUFEXiAmJgorCWNvbXBhcmUgYXV0aG9yIG1hc3RlciBIRUFEICYmCisJY29tcGFyZSBhdXRob3IgbWFzdGVyXiBIRUFEXiAmJgorCXRlc3QgIiRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgPSBcCisJICAgICAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDoiJWNuIDwlY2U+IiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1zaWdub2ZmIGFkZHMgU2lnbmVkLW9mZi1ieTogbGluZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyMiBmaXJzdCAmJgorCWdpdCBhbSAtLXNpZ25vZmYgPHBhdGNoMiAmJgorCXsKKwkJcHJpbnRmICJ0aGlyZFxuXG5TaWduZWQtb2ZmLWJ5OiAlcyA8JXM+XG5cbiIgXAorCQkJIiRHSVRfQ09NTUlUVEVSX05BTUUiICIkR0lUX0NPTU1JVFRFUl9FTUFJTCIgJiYKKwkJY2F0IG1zZyAmJgorCQlwcmludGYgIlNpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblxuIiBcCisJCQkiJEdJVF9DT01NSVRURVJfTkFNRSIgIiRHSVRfQ09NTUlUVEVSX0VNQUlMIgorCX0gPmV4cGVjdGVkLWxvZyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9JUIgLTIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtbG9nIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBzdGF5cyBpbiBicmFuY2gnICcKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyMiA+ZXhwZWN0ZWQgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNpZ25vZmYgZG9lcyBub3QgYWRkIFNpZ25lZC1vZmYtYnk6IGxpbmUgaWYgYWxyZWFkeSB0aGVyZScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMyAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwlnaXQgYW0gLS1zaWdub2ZmIDxwYXRjaDMgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSVCIC0yIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWxvZyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1zaWdub2ZmIGFkZHMgU2lnbmVkLW9mZi1ieTogaWYgYW5vdGhlciBhdXRob3IgaXMgcHJlc2V0JyAnCisJTkFNRT0iQSBOIE90aGVyIiAmJgorCUVNQUlMPSJhLm4ub3RoZXJAZXhhbXBsZS5jb20iICYmCisJeworCQlwcmludGYgInRoaXJkXG5cblNpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblNpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblxuIiBcCisJCQkiJEdJVF9DT01NSVRURVJfTkFNRSIgIiRHSVRfQ09NTUlUVEVSX0VNQUlMIiBcCisJCQkiJE5BTUUiICIkRU1BSUwiICYmCisJCWNhdCBtc2cgJiYKKwkJcHJpbnRmICJTaWduZWQtb2ZmLWJ5OiAlcyA8JXM+XG5TaWduZWQtb2ZmLWJ5OiAlcyA8JXM+XG5cbiIgXAorCQkJIiRHSVRfQ09NTUlUVEVSX05BTUUiICIkR0lUX0NPTU1JVFRFUl9FTUFJTCIgXAorCQkJIiROQU1FIiAiJEVNQUlMIgorCX0gPmV4cGVjdGVkLWxvZyAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwlHSVRfQ09NTUlUVEVSX05BTUU9IiROQU1FIiBHSVRfQ09NTUlUVEVSX0VNQUlMPSIkRU1BSUwiIFwKKwkJZ2l0IGFtIC0tc2lnbm9mZiA8cGF0Y2gzICYmCisJZ2l0IGxvZyAtLXByZXR0eT0lQiAtMiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1sb2cgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2lnbm9mZiBkdXBsaWNhdGVzIFNpZ25lZC1vZmYtYnk6IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmUnICcKKwlOQU1FPSJBIE4gT3RoZXIiICYmCisJRU1BSUw9ImEubi5vdGhlckBleGFtcGxlLmNvbSIgJiYKKwl7CisJCXByaW50ZiAidGhpcmRcblxuU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuXAorU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuU2lnbmVkLW9mZi1ieTogJXMgPCVzPlxuXG4iIFwKKwkJCSIkR0lUX0NPTU1JVFRFUl9OQU1FIiAiJEdJVF9DT01NSVRURVJfRU1BSUwiIFwKKwkJCSIkTkFNRSIgIiRFTUFJTCIgXAorCQkJIiRHSVRfQ09NTUlUVEVSX05BTUUiICIkR0lUX0NPTU1JVFRFUl9FTUFJTCIgJiYKKwkJY2F0IG1zZyAmJgorCQlwcmludGYgIlNpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblNpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblwKK1NpZ25lZC1vZmYtYnk6ICVzIDwlcz5cblxuIiBcCisJCQkiJEdJVF9DT01NSVRURVJfTkFNRSIgIiRHSVRfQ09NTUlUVEVSX0VNQUlMIiBcCisJCQkiJE5BTUUiICIkRU1BSUwiIFwKKwkJCSIkR0lUX0NPTU1JVFRFUl9OQU1FIiAiJEdJVF9DT01NSVRURVJfRU1BSUwiCisJfSA+ZXhwZWN0ZWQtbG9nICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCA+cGF0Y2gzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAmJgorCWdpdCBhbSAtLXNpZ25vZmYgPHBhdGNoMyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9JUIgLTIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtbG9nIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRob3V0IC0ta2VlcCByZW1vdmVzIFJlOiBhbmQgW1BBVENIXSBzdHVmZicgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPnRtcCAmJgorCXNlZCAtZSAiL15TdWJqZWN0LyBzLFxbUEFUQ0gsUmU6IFJlOiBSZTogJiAxLzUgdjJdIFtmb28sIiB0bXAgPnBhdGNoNCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgYW0gPHBhdGNoNCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIG1hc3RlcjIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLWtlZXAgcmVhbGx5IGtlZXBzIHRoZSBzdWJqZWN0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtLWtlZXAgcGF0Y2g0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFjdHVhbCAmJgorCWdyZXAgIlJlOiBSZTogUmU6IFxbUEFUQ0ggMS81IHYyXF0gXFtmb29cXSB0aGlyZCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0ta2VlcC1ub24tcGF0Y2ggcmVhbGx5IGtlZXBzIHRoZSBub24tcGF0Y2ggcGFydCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgYW0gLS1rZWVwLW5vbi1wYXRjaCBwYXRjaDQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiXlxbZm9vXF0gdGhpcmQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhbSAtMycgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYmFzZTN3YXkgbWFzdGVyMiAmJgorCXNlZCAtbiAtZSAiMyxcJHAiIG1zZyA+ZmlsZSAmJgorCWhlYWQgLW4gOSBtc2cgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiY29waWVkIHN0dWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyBmYWxscyBiYWNrIHRvIDMtd2F5IG1lcmdlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBsb3JlbTIgYmFzZTN3YXkgJiYKKwlnaXQgYW0gLTMgbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbG9yZW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLXAwIGNhbiByZWFkIC0tbm8tcHJlZml4IHBhdGNoJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBsb3JlbTMgYmFzZTN3YXkgJiYKKwlnaXQgYW0gLTMgLXAwIGxvcmVtLXplcm8ucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGxvcmVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggY29uZmlnIGFtLnRocmVlV2F5IGZhbGxzIGJhY2sgdG8gMy13YXkgbWVyZ2UnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtNCBiYXNlM3dheSAmJgorCXRlc3RfY29uZmlnIGFtLnRocmVlV2F5IDEgJiYKKwlnaXQgYW0gbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbG9yZW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBjb25maWcgYW0udGhyZWVXYXkgb3ZlcnJpZGRlbiBieSAtLW5vLTN3YXknICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtNSBiYXNlM3dheSAmJgorCXRlc3RfY29uZmlnIGFtLnRocmVlV2F5IDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1uby0zd2F5IGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGNhbiByZW5hbWUgYSBmaWxlJyAnCisJZ3JlcCAiXnJlbmFtZSBmcm9tIiByZW5hbWUucGF0Y2ggJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtXjAgJiYKKwlnaXQgYW0gcmVuYW1lLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHJlbmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyBjYW4gcmVuYW1lIGEgZmlsZScgJworCWdyZXAgIl5yZW5hbWUgZnJvbSIgcmVuYW1lLnBhdGNoICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbV4wICYmCisJZ2l0IGFtIC0zIHJlbmFtZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSByZW5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgY2FuIHJlbmFtZSBhIGZpbGUgYWZ0ZXIgZmFsbGluZyBiYWNrIHRvIDMtd2F5IG1lcmdlJyAnCisJZ3JlcCAiXnJlbmFtZSBmcm9tIiByZW5hbWUtYWRkLnBhdGNoICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbV4wICYmCisJZ2l0IGFtIC0zIHJlbmFtZS1hZGQucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgcmVuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIC1xIGlzIHF1aWV0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNoZWNrb3V0IC1mIGxvcmVtMiAmJgorCWdpdCByZXNldCBiYXNlM3dheSAtLWhhcmQgJiYKKwlnaXQgYW0gLTMgLXEgbG9yZW0tbW92ZS5wYXRjaCA+b3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gcGF1c2VzIG9uIGNvbmZsaWN0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbTJeXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNob3ctY3VycmVudC1wYXRjaCcgJworCWdpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCA+YWN0dWFsLnBhdGNoICYmCisJdGVzdF9jbXAgLmdpdC9yZWJhc2UtYXBwbHkvMDAwMSBhY3R1YWwucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9cmF3JyAnCisJZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoPXJhdyA+YWN0dWFsLnBhdGNoICYmCisJdGVzdF9jbXAgLmdpdC9yZWJhc2UtYXBwbHkvMDAwMSBhY3R1YWwucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1zaG93LWN1cnJlbnQtcGF0Y2g9ZGlmZicgJworCWdpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmID5hY3R1YWwucGF0Y2ggJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlYmFzZS1hcHBseS9wYXRjaCBhY3R1YWwucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYWNjZXB0cyByZXBlYXRlZCAtLXNob3ctY3VycmVudC1wYXRjaCcgJworCWdpdCBhbSAtLXNob3ctY3VycmVudC1wYXRjaCAtLXNob3ctY3VycmVudC1wYXRjaD1yYXcgPmFjdHVhbC5wYXRjaCAmJgorCXRlc3RfY21wIC5naXQvcmViYXNlLWFwcGx5LzAwMDEgYWN0dWFsLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGRldGVjdHMgaW5jb21wYXRpYmxlIC0tc2hvdy1jdXJyZW50LXBhdGNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoPXJhdyAtLXNob3ctY3VycmVudC1wYXRjaD1kaWZmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tc2hvdy1jdXJyZW50LXBhdGNoIC0tc2hvdy1jdXJyZW50LXBhdGNoPWRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1za2lwIHdvcmtzJyAnCisJZWNobyBnb29kYnllID5leHBlY3RlZCAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGxvcmVtMl5eIC0tIGZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhbm90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tYWJvcnQgcmVtb3ZlcyBhIHN0cmF5IGRpcmVjdG9yeScgJworCW1rZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSByZWZ1c2VzIHBhdGNoZXMgd2hlbiBwYXVzZWQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtMl5eICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgbG9yZW0yXl4gSEVBRCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDxsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBsb3JlbTJeXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcmVzb2x2ZWQgd29ya3MnICcKKwllY2hvIGdvb2RieWUgPmV4cGVjdGVkICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbTJeXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWVjaG8gcmVzb2x2ZWQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFtIC0tcmVzb2x2ZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFub3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1yZXNvbHZlZCBmYWlscyBpZiBpbmRleCBoYXMgbm8gY2hhbmdlcycgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbG9yZW0yXl4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgbG9yZW0yXl4gSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLXJlc29sdmVkICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBsb3JlbTJeXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcmVzb2x2ZWQgZmFpbHMgaWYgaW5kZXggaGFzIHVubWVyZ2VkIGVudHJpZXMnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLXJlc29sdmVkID5lcnIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9pMThuZ3JlcCAic3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHRha2VzIHBhdGNoZXMgZnJvbSBhIFBpbmUgbWFpbGJveCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwljYXQgcGluZSBwYXRjaDEgfCBnaXQgYW0gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3Rlcl4uLkhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZmFpbHMgb24gbWFpbCB3aXRob3V0IHBhdGNoJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSA8ZmFpbG1haWwgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGZhaWxzIG9uIGVtcHR5IHBhdGNoJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gIi0tLSIgPj5mYWlsbWFpbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSA8ZmFpbG1haWwgJiYKKwlnaXQgYW0gLS1za2lwICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd29ya3MgZnJvbSBzdGRpbiBpbiBzdWJkaXJlY3RvcnknICcKKwlybSAtZnIgc3ViZGlyICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCSgKKwkJbWtkaXIgLXAgc3ViZGlyICYmCisJCWNkIHN1YmRpciAmJgorCQlnaXQgYW0gPC4uL3BhdGNoMQorCSkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd29ya3MgZnJvbSBmaWxlIChyZWxhdGl2ZSBwYXRoIGdpdmVuKSBpbiBzdWJkaXJlY3RvcnknICcKKwlybSAtZnIgc3ViZGlyICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCSgKKwkJbWtkaXIgLXAgc3ViZGlyICYmCisJCWNkIHN1YmRpciAmJgorCQlnaXQgYW0gLi4vcGF0Y2gxCisJKSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3b3JrcyBmcm9tIGZpbGUgKGFic29sdXRlIHBhdGggZ2l2ZW4pIGluIHN1YmRpcmVjdG9yeScgJworCXJtIC1mciBzdWJkaXIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJUD0kKHB3ZCkgJiYKKwkoCisJCW1rZGlyIC1wIHN1YmRpciAmJgorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGFtICIkUC9wYXRjaDEiCisJKSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIHBhdGNoMSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiL15cJC9xIiA+aGVhZDEgJiYKKwlzZWQgLW5lICIvXmF1dGhvciAvcy8uKj4gLy9wIiBoZWFkMSA+YXQgJiYKKwlzZWQgLW5lICIvXmNvbW1pdHRlciAvcy8uKj4gLy9wIiBoZWFkMSA+Y3QgJiYKKwl0ZXN0X2NtcCBhdCBjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRob3V0IC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIHBhdGNoMSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiL15cJC9xIiA+aGVhZDEgJiYKKwlzZWQgLW5lICIvXmF1dGhvciAvcy8uKj4gLy9wIiBoZWFkMSA+YXQgJiYKKwlzZWQgLW5lICIvXmNvbW1pdHRlciAvcy8uKj4gLy9wIiBoZWFkMSA+Y3QgJiYKKwkhIHRlc3RfY21wIGF0IGN0CisnCisKKyMgVGhpcyBjaGVja3MgZm9yICswMDAwIGJlY2F1c2UgVFogaXMgc2V0IHRvIFVUQyBhbmQgdGhhdCBzaG91bGQKKyMgc2hvdyB1cCB3aGVuIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4gVGhlIGRhdGUgaW4gbWVzc2FnZSBpcyBzZXQKKyMgYnkgdGVzdF90aWNrIHRoYXQgdXNlcyAtMDcwMCB0aW1lem9uZTsgaWYgdGhpcyBmZWF0dXJlIGRvZXMgbm90CisjIHdvcmssIHdlIHdpbGwgc2VlIHRoYXQgaW5zdGVhZCBvZiArMDAwMC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0taWdub3JlLWRhdGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIC0taWdub3JlLWRhdGUgcGF0Y2gxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIvXlwkL3EiID5oZWFkMSAmJgorCXNlZCAtbmUgIi9eYXV0aG9yIC9zLy4qPiAvL3AiIGhlYWQxID5hdCAmJgorCWdyZXAgIiswMDAwIiBhdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBpbnRvIGFuIHVuYm9ybiBicmFuY2gnICcKKwlnaXQgcmV2LXBhcnNlIGZpcnN0Xnt0cmVlfSA+ZXhwZWN0ZWQgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWZyIHN1YmRpciAmJgorCW1rZGlyIHN1YmRpciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1udW1iZXJlZC1maWxlcyAtbyBzdWJkaXIgLTEgZmlyc3QgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgYW0gMQorCSkgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9ID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIG5ld2xpbmUgaW4gc3ViamVjdCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZWQgLWUgInMvc2Vjb25kL3NlY29uZCBcXFxuIGZvby8iIHBhdGNoMSA+cGF0Y2hubCAmJgorCWdpdCBhbSA8cGF0Y2hubCA+b3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiXkFwcGx5aW5nOiBzZWNvbmQgXFxcbiBmb28kIiBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC1xIGlzIHF1aWV0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSAtcSA8cGF0Y2gxID5vdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBlbXB0eS1maWxlIGRvZXMgbm90IGluZmxvb3AnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdG91Y2ggZW1wdHktZmlsZSAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBlbXB0eS1maWxlIDI+YWN0dWFsICYmCisJZWNobyBQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4gPmV4cGVjdGVkICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLW1lc3NhZ2UtaWQgcmVhbGx5IGFkZHMgdGhlIG1lc3NhZ2UgaWQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IGFtIC0tbWVzc2FnZS1pZCBwYXRjaDEuZW1sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCB0YWlsIC1uMSA+YWN0dWFsICYmCisJZ3JlcCBNZXNzYWdlLUlkIHBhdGNoMS5lbWwgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtLm1lc3NhZ2VpZCByZWFsbHkgYWRkcyB0aGUgbWVzc2FnZSBpZCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwl0ZXN0X2NvbmZpZyBhbS5tZXNzYWdlaWQgdHJ1ZSAmJgorCWdpdCBhbSBwYXRjaDEuZW1sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCB0YWlsIC1uMSA+YWN0dWFsICYmCisJZ3JlcCBNZXNzYWdlLUlkIHBhdGNoMS5lbWwgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tbWVzc2FnZS1pZCAtcyBzaWducyBvZmYgYWZ0ZXIgdGhlIG1lc3NhZ2UgaWQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IGFtIC1zIC0tbWVzc2FnZS1pZCBwYXRjaDEuZW1sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCB0YWlsIC1uMiB8IGhlYWQgLW4xID5hY3R1YWwgJiYKKwlncmVwIE1lc3NhZ2UtSWQgcGF0Y2gxLmVtbCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgd29ya3Mgd2l0aCByZXJlcmUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwkjIG1ha2UgcGF0Y2hlcyBvbmUtPnR3byBhbmQgdHdvLT50aHJlZS4uLgorCXRlc3RfY29tbWl0IG9uZSBmaWxlICYmCisJdGVzdF9jb21taXQgdHdvIGZpbGUgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSBmaWxlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMiAtLXN0ZG91dCA+c2VxLnBhdGNoICYmCisKKwkjIGFuZCBjcmVhdGUgYSBzaXR1YXRpb24gdGhhdCBjb25mbGljdHMuLi4KKwlnaXQgcmVzZXQgLS1oYXJkIG9uZSAmJgorCXRlc3RfY29tbWl0IG90aGVyIGZpbGUgJiYKKworCSMgZW5hYmxlIHJlcmVyZS4uLgorCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiAuZ2l0L3JyLWNhY2hlIiAmJgorCisJIyAuLi5hbmQgYXBwbHkuIE91ciByZXNvbHV0aW9uIGlzIHRvIHNraXAgdGhlIGZpcnN0CisJIyBwYXRjaCwgYW5kIHRoZSByZXJlcmUgdGhlIHNlY29uZCBvbmUuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0zIHNlcS5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLXNraXAgJiYKKwllY2hvIHJlc29sdmVkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFtIC0tcmVzb2x2ZWQgJiYKKworCSMgbm93IGFwcGx5IGFnYWluLCBhbmQgY29uZmlybSB0aGF0IHJlcmVyZSBlbmdhZ2VkICh3ZSBzdGlsbAorCSMgZXhwZWN0IGZhaWx1cmUgZnJvbSBhbSBiZWNhdXNlIHJlcmVyZSBkb2VzIG5vdCBhdXRvLWNvbW1pdAorCSMgZm9yIHVzKS4KKwlnaXQgcmVzZXQgLS1oYXJkIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0zIHNlcS5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLXNraXAgJiYKKwllY2hvIHJlc29sdmVkID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtcyB1bmV4cGVjdGVkIHRyYWlsZXIgYmxvY2snICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBzaWduZWQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwljYXQgPm1zZyA8PC1FT0YgJiYKKwlzdWJqZWN0IGhlcmUKKworCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCVtqYzogdHdlYWtlZCBsb2cgbWVzc2FnZV0KKwlTaWduZWQtb2ZmLWJ5OiBKIEMgSCA8akBjLmg+CisJRU9GCisJZ2l0IGNvbW1pdCAtRiBtc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgJzEsL14kL2QnID5vcmlnaW5hbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFtIC1zIHBhdGNoICYmCisJKAorCQljYXQgb3JpZ2luYWwgJiYKKwkJZWNobyAiU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgorCSkgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAnMSwvXiQvZCcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWNhdCA+bXNnIDw8LVxFT0YgJiYKKwlzdWJqZWN0IGhlcmUKKworCVdlIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIGEgYmxhbmsgbGluZSBiZXR3ZWVuIHRoZSBsb2cKKwltZXNzYWdlIHByb3BlciBhbmQgU2lnbmVkLW9mZi1ieTogbGluZSBhZGRlZC4KKwlFT0YKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgY29tbWl0IC1GIG1zZyBmaWxlICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICcxLC9eJC9kJyA+b3JpZ2luYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5wYXRjaCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCBhbSAtcyBwYXRjaCAmJgorCisJKAorCQljYXQgb3JpZ2luYWwgJiYKKwkJZWNobyAmJgorCQllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iCisJKSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICcxLC9eJC9kJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXBhdGNoLWZvcm1hdD1tYm94cmQgaGFuZGxlcyBtYm94cmQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwllY2hvIG1ib3hyZCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwljYXQgPm1zZyA8PC1cSU5QVVRfRU5EICYmCisJbWJveHJkIHNob3VsZCBlc2NhcGUgdGhlIGJvZHkKKworCUZyb20gY291bGQgdHJpcCB1cCBhIGxvb3NlIG1ib3ggcGFyc2VyCisJPkZyb20gZXh0cmEgZXNjYXBlIGZvciByZXZlcnNpYmlsaXR5CisJSU5QVVRfRU5ECisJZ2l0IGNvbW1pdCAtRiBtc2cgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tcHJldHR5PW1ib3hyZCAtLXN0ZG91dCAtMSA+bWJveHJkMSAmJgorCWdyZXAgIl4+RnJvbSBjb3VsZCB0cmlwIHVwIGEgbG9vc2UgbWJveCBwYXJzZXIiIG1ib3hyZDEgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwlnaXQgYW0gLS1wYXRjaC1mb3JtYXQ9bWJveHJkIG1ib3hyZDEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCB0YWlsIC1uNCA+b3V0ICYmCisJdGVzdF9jbXAgbXNnIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3b3JrcyB3aXRoIG11bHRpLWxpbmUgaW4tYm9keSBoZWFkZXJzJyAnCisJRk9SVFk9IlN0cmluZyB0aGF0IGhhcyBhIGxlbmd0aCBvZiBtb3JlIHRoYW4gZm9ydHkgY2hhcmFjdGVycyIgJiYKKwlMT05HPSIkRk9SVFkgJEZPUlRZIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjaGVja291dCAtZiBmaXJzdCAmJgorCWVjaG8gb25lID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hbSAiJExPTkcKKworICAgIEJvZHkgdGVzdCIgLS1hdXRob3I9IiRMT05HIDxsb25nQGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5wYXRjaCAmJgorCSMgYnVtcCBmcm9tLCBkYXRlLCBhbmQgc3ViamVjdCBkb3duIHRvIGluLWJvZHkgaGVhZGVyCisJcGVybCAtbHBlICIKKwkJaWYgKC9eRnJvbTovKSB7CisJCQlwcmludCBcIkZyb206IHggPHhcQGV4YW1wbGUuY29tPlwiOworCQkJcHJpbnQgXCJEYXRlOiBTYXQsIDEgSmFuIDIwMDAgMDA6MDA6MDAgKzAwMDBcIjsKKwkJCXByaW50IFwiU3ViamVjdDogeFxuXCI7CisJCX0KKwkiIHBhdGNoID5tc2cgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgYW0gbXNnICYmCisJIyBFbnN1cmUgdGhhdCB0aGUgYXV0aG9yIGFuZCBmdWxsIG1lc3NhZ2UgYXJlIHByZXNlbnQKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwICJeYXV0aG9yLipsb25nQGV4YW1wbGUuY29tIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIl4kTE9ORyQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcXVpdCBrZWVwcyBIRUFEIHdoZXJlIGl0IGlzJyAnCisJbWtkaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwk+LmdpdC9yZWJhc2UtYXBwbHkvbGFzdCAmJgorCT4uZ2l0L3JlYmFzZS1hcHBseS9uZXh0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXiA+LmdpdC9PUklHX0hFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdGVkICYmCisJZ2l0IGFtIC0tcXVpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYW5kIC5naXRhdHRpYnV0ZXMnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGF0dHJpYnV0ZXMgJiYKKwkoCisJCWNkIGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jb21taXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIGZpbHRlci50ZXN0LmNsZWFuICJzZWQgLWUgJ1wnJ3Mvc211ZGdlZC9jbGVhbi9nJ1wnJyIgJiYKKwkJZ2l0IGNvbmZpZyBmaWx0ZXIudGVzdC5zbXVkZ2UgInNlZCAtZSAnXCcncy9jbGVhbi9zbXVkZ2VkL2cnXCcnIiAmJgorCisJCXRlc3RfY29tbWl0IHNlY29uZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdGVzdCBIRUFEXiAmJgorCisJCWVjaG8gIioudHh0IGZpbHRlcj10ZXN0IGNvbmZsaWN0LW1hcmtlci1zaXplPTEwIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NvbW1pdCB0aGlyZCAmJgorCisJCWVjaG8gIlRoaXMgdGV4dCBpcyBzbXVkZ2VkLiIgPmEudHh0ICYmCisJCWdpdCBhZGQgYS50eHQgJiYKKwkJdGVzdF9jb21taXQgZm91cnRoICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlbW92YWwgSEVBRF4gJiYKKwkJZ2l0IHJtIC5naXRhdHRyaWJ1dGVzICYmCisJCWdpdCBhZGQgLXUgJiYKKwkJdGVzdF9jb21taXQgZmlmdGggJiYKKwkJZ2l0IGNoZXJyeS1waWNrIHRlc3QgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QgdGhpcmQgJiYKKwkJZWNobyAiVGhpcyB0ZXh0IGlzIGRpZmZlcmVudC4iID5hLnR4dCAmJgorCQlnaXQgYWRkIGEudHh0ICYmCisJCXRlc3RfY29tbWl0IHNpeHRoICYmCisKKwkJZ2l0IGNoZWNrb3V0IHRlc3QgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLkhFQUQgPnBhdGNoZXMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwkJZ2l0IGFtIHBhdGNoZXMgJiYKKwkJZ3JlcCAic211ZGdlZCIgYS50eHQgJiYKKworCQlnaXQgY2hlY2tvdXQgcmVtb3ZhbCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5IRUFEID5wYXRjaGVzICYmCisJCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJCWdpdCBhbSBwYXRjaGVzICYmCisJCWdyZXAgImNsZWFuIiBhLnR4dCAmJgorCisJCWdpdCBjaGVja291dCBjb25mbGljdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5IRUFEID5wYXRjaGVzICYmCisJCWdpdCByZXNldCAtLWhhcmQgZm91cnRoICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyBwYXRjaGVzICYmCisJCWdyZXAgIjw8PDw8PDw8PDwiIGEudHh0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxNTEtYW0tYWJvcnQuc2ggYi90L3Q0MTUxLWFtLWFib3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkOGQzYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTUxLWFtLWFib3J0LnNoCkBAIC0wLDAgKzEsMTk0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYW0gLS1hYm9ydCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWZvciBpIGluIGEgYiBjIGQgZSBmIGcKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZS0xICYmCisJY3AgZmlsZS0xIGZpbGUtMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhZGQgZmlsZS0xIGZpbGUtMiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1yb290IGluaXRpYWwgPmluaXRpYWwucGF0Y2ggJiYKKwlmb3IgaSBpbiAyIDMgNCA1IDYKKwlkbworCQllY2hvICRpID4+ZmlsZS0xICYmCisJCWVjaG8gJGkgPm90aGVyZmlsZS0kaSAmJgorCQlnaXQgYWRkIG90aGVyZmlsZS0kaSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAkaSB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tbnVtYmVyZWQgaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIGluaXRpYWwgJiYKKwllY2hvIGxvY2FsIGNoYW5nZSA+ZmlsZS0yLWV4cGVjdAorJworCitmb3Igd2l0aDMgaW4gJycgJyAtMycKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYW0kd2l0aDMgc3RvcHMgYXQgYSBwYXRjaCB0aGF0IGRvZXMgbm90IGFwcGx5IiAnCisKKwkJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJCWNwIGZpbGUtMi1leHBlY3QgZmlsZS0yICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtJHdpdGgzIDAwMFsxMjQ1XS0qLnBhdGNoICYmCisJCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJCWZvciBpIGluIDMgMiBpbml0aWFsCisJCWRvCisJCQllY2hvICRpCisJCWRvbmUgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYW0kd2l0aDMgLS1za2lwIGNvbnRpbnVlIGFmdGVyIGZhaWxlZCBhbSR3aXRoMyIgJworCQl0ZXN0X211c3RfZmFpbCBnaXQgYW0kd2l0aDMgLS1za2lwID5vdXRwdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiXkFwcGx5aW5nOiA2JCIgb3V0cHV0ICYmCisJCXRlc3RfY21wIGZpbGUtMi1leHBlY3QgZmlsZS0yICYmCisJCXRlc3QgISAtZiAuZ2l0L01FUkdFX1JSCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiYW0gLS1hYm9ydCBnb2VzIGJhY2sgYWZ0ZXIgZmFpbGVkIGFtJHdpdGgzIiAnCisJCWdpdCBhbSAtLWFib3J0ICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgaW5pdGlhbCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9jbXAgZmlsZS0yLWV4cGVjdCBmaWxlLTIgJiYKKwkJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1jYWNoZWQgSEVBRCAmJgorCQl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9SUgorCScKKworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtLXNraXAgcmVtb3ZlcyBvdGhlcmZpbGUtNCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyAwMDAzLSoucGF0Y2ggJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCA0ID0gIiQoY2F0IG90aGVyZmlsZS00KSIgJiYKKwlnaXQgYW0gLS1za2lwICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBvdGhlcmZpbGUtNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtLWFib3J0IHJlbW92ZXMgb3RoZXJmaWxlLTQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgMDAwMy0qLnBhdGNoICYmCisJdGVzdCAzIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgNCA9ICIkKGNhdCBvdGhlcmZpbGUtNCkiICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG90aGVyZmlsZS00CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tYWJvcnQgd2lsbCBrZWVwIHRoZSBsb2NhbCBjb21taXRzIGludGFjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAwMDA0LSoucGF0Y2ggJiYKKwl0ZXN0X2NvbW1pdCB1bnJlbGF0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tYWJvcnQgd2lsbCBrZWVwIGRpcnR5IGluZGV4IGludGFjdCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWVjaG8gZGlydHlmaWxlID5kaXJ0eWZpbGUgJiYKKwljcCBkaXJ0eWZpbGUgZGlydHlmaWxlLmV4cGVjdGVkICYmCisJZ2l0IGFkZCBkaXJ0eWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gMDAwMS0qLnBhdGNoICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpcnR5ZmlsZSAmJgorCXRlc3RfY21wIGRpcnR5ZmlsZS5leHBlY3RlZCBkaXJ0eWZpbGUgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXJ0eWZpbGUgJiYKKwl0ZXN0X2NtcCBkaXJ0eWZpbGUuZXhwZWN0ZWQgZGlydHlmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIHN0b3BzIG9uIGNvbmZsaWN0IG9uIHVuYm9ybiBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWYgLS1vcnBoYW4gb3JwaGFuICYmCisJZ2l0IHJlc2V0ICYmCisJcm0gLWYgb3RoZXJmaWxlLTQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgMDAwMy0qLnBhdGNoICYmCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgNCA9ICIkKGNhdCBvdGhlcmZpbGUtNCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIC0tc2tpcCBjbGVhcnMgaW5kZXggb24gdW5ib3JuIGJyYW5jaCcgJworCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwllY2hvIHRtcGZpbGUgPnRtcGZpbGUgJiYKKwlnaXQgYWRkIHRtcGZpbGUgJiYKKwlnaXQgYW0gLS1za2lwICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMpIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG90aGVyZmlsZS00ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG1wZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtLWFib3J0IHJlbW92ZXMgb3RoZXJmaWxlLTQgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtZiAtLW9ycGhhbiBvcnBoYW4gJiYKKwlnaXQgcmVzZXQgJiYKKwlybSAtZiBvdGhlcmZpbGUtNCBmaWxlLTEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgMDAwMy0qLnBhdGNoICYmCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgNCA9ICIkKGNhdCBvdGhlcmZpbGUtNCkiICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgb3RoZXJmaWxlLTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLS1hYm9ydCBvbiB1bmJvcm4gYnJhbmNoIHJlbW92ZXMgYXBwbGllZCBjb21taXRzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIC0tb3JwaGFuIG9ycGhhbiAmJgorCWdpdCByZXNldCAmJgorCXJtIC1mIG90aGVyZmlsZS00IG90aGVyZmlsZS0yIGZpbGUtMSBmaWxlLTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgaW5pdGlhbC5wYXRjaCAwMDAzLSoucGF0Y2ggJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCA0ID0gIiQoY2F0IG90aGVyZmlsZS00KSIgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBvdGhlcmZpbGUtNCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUtMSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUtMiAmJgorCXRlc3QgMCAtZXEgJChnaXQgbG9nIC0tb25lbGluZSAyPi9kZXYvbnVsbCB8IHdjIC1sKSAmJgorCXRlc3QgcmVmcy9oZWFkcy9vcnBoYW4gPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLWFib3J0IG9uIHVuYm9ybiBicmFuY2ggd2lsbCBrZWVwIGxvY2FsIGNvbW1pdHMgaW50YWN0JyAnCisJZ2l0IGNoZWNrb3V0IC1mIC0tb3JwaGFuIG9ycGhhbiAmJgorCWdpdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAwMDA0LSoucGF0Y2ggJiYKKwl0ZXN0X2NvbW1pdCB1bnJlbGF0ZWQyICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNraXAgbGVhdmVzIGluZGV4IHN0YXQgaW5mbyBhbG9uZScgJworCWdpdCBjaGVja291dCAtZiAtLW9ycGhhbiBza2lwLXN0YXQtaW5mbyAmJgorCWdpdCByZXNldCAmJgorCXRlc3RfY29tbWl0IHNraXAtc2hvdWxkLWJlLXVudG91Y2hlZCAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0wIHNraXAtc2hvdWxkLWJlLXVudG91Y2hlZC50ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDAwMDEtKi5wYXRjaCAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tYWJvcnQgbGVhdmVzIGluZGV4IHN0YXQgaW5mbyBhbG9uZScgJworCWdpdCBjaGVja291dCAtZiAtLW9ycGhhbiBhYm9ydC1zdGF0LWluZm8gJiYKKwlnaXQgcmVzZXQgJiYKKwl0ZXN0X2NvbW1pdCBhYm9ydC1zaG91bGQtYmUtdW50b3VjaGVkICYmCisJdGVzdC10b29sIGNobXRpbWUgPTAgYWJvcnQtc2hvdWxkLWJlLXVudG91Y2hlZC50ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDAwMDEtKi5wYXRjaCAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgLS1xdWlldAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxNTItYW0tc3ViamVjdHMuc2ggYi90L3Q0MTUyLWFtLXN1YmplY3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjNjgyNDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTUyLWFtLXN1YmplY3RzLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHN1YmplY3QgcHJlc2VydmF0aW9uIHdpdGggZm9ybWF0LXBhdGNoIHwgYW0nCisuIC4vdGVzdC1saWIuc2gKKworbWFrZV9wYXRjaGVzKCkgeworCXR5cGU9JDEKKwlzdWJqZWN0PSQyCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIHBhdGNoZXMgd2l0aCAkdHlwZSBzdWJqZWN0IiAnCisJCWdpdCByZXNldCAtLWhhcmQgYmFzZWxpbmUgJiYKKwkJZWNobyAkdHlwZSA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICIkc3ViamVjdCIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+JHR5cGUucGF0Y2ggJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtayA+JHR5cGUtay5wYXRjaAorCScKK30KKworY2hlY2tfc3ViamVjdCgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2VsaW5lICYmCisJZ2l0IGFtICQyICQxLnBhdGNoICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFzZWxpbmUgY29tbWl0JyAnCisJdGVzdF9jb21taXQgYmFzZWxpbmUgZmlsZQorJworCitTSE9SVF9TVUJKRUNUPSdzaG9ydCBzdWJqZWN0JworbWFrZV9wYXRjaGVzIHNob3J0ICIkU0hPUlRfU1VCSkVDVCIKKworTE9OR19TVUJKRUNUMT0ndGhpcyBpcyBhIGxvbmcgc3ViamVjdCB0aGF0IGlzIHZpcnR1YWxseSBndWFyYW50ZWVkJworTE9OR19TVUJKRUNUMj0ndG8gcmVxdWlyZSB3cmFwcGluZyB2aWEgZm9ybWF0LXBhdGNoIGlmIGl0IGlzIGFsbCcKK0xPTkdfU1VCSkVDVDM9J2dvaW5nIHRvIGFwcGVhciBvbiBhIHNpbmdsZSBsaW5lJworTE9OR19TVUJKRUNUPSIkTE9OR19TVUJKRUNUMSAkTE9OR19TVUJKRUNUMiAkTE9OR19TVUJKRUNUMyIKK21ha2VfcGF0Y2hlcyBsb25nICIkTE9OR19TVUJKRUNUIgorCitNVUxUSUxJTkVfU1VCSkVDVD0iJExPTkdfU1VCSkVDVDEKKyRMT05HX1NVQkpFQ1QyCiskTE9OR19TVUJKRUNUMyIKK21ha2VfcGF0Y2hlcyBtdWx0aWxpbmUgIiRNVUxUSUxJTkVfU1VCSkVDVCIKKworZWNobyAiJFNIT1JUX1NVQkpFQ1QiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggfCBhbSknICcKKwljaGVja19zdWJqZWN0IHNob3J0CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydCBzdWJqZWN0IHByZXNlcnZlZCAoZm9ybWF0LXBhdGNoIC1rIHwgYW0pJyAnCisJY2hlY2tfc3ViamVjdCBzaG9ydC1rCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydCBzdWJqZWN0IHByZXNlcnZlZCAoZm9ybWF0LXBhdGNoIC1rIHwgYW0gLWspJyAnCisJY2hlY2tfc3ViamVjdCBzaG9ydC1rIC1rCisnCisKK2VjaG8gIiRMT05HX1NVQkpFQ1QiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCB8IGFtKScgJworCWNoZWNrX3N1YmplY3QgbG9uZworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9uZyBzdWJqZWN0IHByZXNlcnZlZCAoZm9ybWF0LXBhdGNoIC1rIHwgYW0pJyAnCisJY2hlY2tfc3ViamVjdCBsb25nLWsKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtIC1rKScgJworCWNoZWNrX3N1YmplY3QgbG9uZy1rIC1rCisnCisKK2VjaG8gIiRMT05HX1NVQkpFQ1QiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpbGluZSBzdWJqZWN0IHVud3JhcHBlZCAoZm9ybWF0LXBhdGNoIHwgYW0pJyAnCisJY2hlY2tfc3ViamVjdCBtdWx0aWxpbmUKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpbGluZSBzdWJqZWN0IHVud3JhcHBlZCAoZm9ybWF0LXBhdGNoIC1rIHwgYW0pJyAnCisJY2hlY2tfc3ViamVjdCBtdWx0aWxpbmUtaworJworZWNobyAiJE1VTFRJTElORV9TVUJKRUNUIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtIC1rKScgJworCWNoZWNrX3N1YmplY3QgbXVsdGlsaW5lLWsgLWsKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUzLWFtLXJlc3VtZS1vdmVycmlkZS1vcHRzLnNoIGIvdC90NDE1My1hbS1yZXN1bWUtb3ZlcnJpZGUtb3B0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZWEyMmQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDE1My1hbS1yZXN1bWUtb3ZlcnJpZGUtb3B0cy5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1hbSBjb21tYW5kLWxpbmUgb3B0aW9ucyBvdmVycmlkZSBzYXZlZCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK2Zvcm1hdF9wYXRjaCAoKSB7CisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSAiJDEiID4iJDEiLmVtbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXRpYWwgZmlsZSAmJgorCXRlc3RfY29tbWl0IGZpcnN0IGZpbGUgJiYKKworCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJZ2l0IG12IGZpbGUgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZWQtZmlsZSAmJgorCWdpdCB0YWcgcmVuYW1lZC1maWxlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBpbml0aWFsICYmCisJdGVzdF9jb21taXQgc2lkZTEgZmlsZSAmJgorCXRlc3RfY29tbWl0IHNpZGUyIGZpbGUgJiYKKworCWZvcm1hdF9wYXRjaCBzaWRlMSAmJgorCWZvcm1hdF9wYXRjaCBzaWRlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnLS0zd2F5IG92ZXJyaWRlcyAtLW5vLTN3YXknICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHJlbmFtZWQtZmlsZSAmJgorCisJIyBBcHBseWluZyBzaWRlMSB3aWxsIGZhaWwgYXMgdGhlIGZpbGUgaGFzIGJlZW4gcmVuYW1lZC4KKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1uby0zd2F5IHNpZGVbMTJdLmVtbCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgcmVuYW1lZC1maWxlIEhFQUQgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisKKwkjIEFwcGx5aW5nIHNpZGUxIHdpdGggYW0gLS0zd2F5IHdpbGwgc3VjY2VlZCBkdWUgdG8gdGhlIHRocmVld2F5LW1lcmdlLgorCSMgQXBwbHlpbmcgc2lkZTIgd2lsbCBmYWlsIGFzIC0tM3dheSBkb2VzIG5vdCBhcHBseSB0byBpdC4KKwl0ZXN0X211c3RfZmFpbCB0ZXN0X3Rlcm1pbmFsIGdpdCBhbSAtLTN3YXkgPC9kZXYvemVybyAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0IHNpZGUxID0gIiQoY2F0IGZpbGUyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1xdWlldCBvdmVycmlkZXMgLS1xdWlldCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKworCSMgQXBwbHlpbmcgc2lkZTEgd2lsbCBiZSBxdWlldC4KKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1xdWlldCBzaWRlWzEyM10uZW1sID5vdXQgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9pMThuZ3JlcCAhICJeQXBwbHlpbmc6ICIgb3V0ICYmCisJZWNobyBzaWRlMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCisJIyBBcHBseWluZyBzaWRlMSB3aWxsIG5vdCBiZSBxdWlldC4KKwkjIEFwcGx5aW5nIHNpZGUyIHdpbGwgYmUgcXVpZXQuCisJZ2l0IGFtIC0tbm8tcXVpZXQgLS1jb250aW51ZSA+b3V0ICYmCisJZWNobyAiQXBwbHlpbmc6IHNpZGUxIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2lnbm9mZiBvdmVycmlkZXMgLS1uby1zaWdub2ZmJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tbm8tc2lnbm9mZiBzaWRlWzEyXS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZWNobyBzaWRlMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBhbSAtLXNpZ25vZmYgLS1jb250aW51ZSAmJgorCisJIyBBcHBsaWVkIHNpZGUxIHdpbGwgYmUgc2lnbmVkIG9mZgorCWVjaG8gIlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgPmV4cGVjdGVkICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgIlNpZ25lZC1vZmYtYnk6IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwkjIEFwcGxpZWQgc2lkZTIgd2lsbCBub3QgYmUgc2lnbmVkIG9mZgorCXRlc3QgJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIC1jICJTaWduZWQtb2ZmLWJ5OiIpIC1lcSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICctLXJlamVjdCBvdmVycmlkZXMgLS1uby1yZWplY3QnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJcm0gLWYgZmlsZS5yZWogJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLW5vLXJlamVjdCBzaWRlMS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZS5yZWogJiYKKworCXRlc3RfbXVzdF9mYWlsIHRlc3RfdGVybWluYWwgZ2l0IGFtIC0tcmVqZWN0IDwvZGV2L3plcm8gJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZS5yZWoKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjAwLXJlcmVyZS5zaCBiL3QvdDQyMDAtcmVyZXJlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzMWQ0MjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjAwLXJlcmVyZS5zaApAQCAtMCwwICsxLDY3NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXJlcmUKKworISBbZmlmdGhdIHZlcnNpb24xCisgISBbZmlyc3RdIGZpcnN0CisgICEgW2ZvdXJ0aF0gdmVyc2lvbjEKKyAgICEgW21hc3Rlcl0gaW5pdGlhbAorICAgICEgW3NlY29uZF0gcHJlZmVyIGZpcnN0IG92ZXIgc2Vjb25kCisgICAgICEgW3RoaXJkXSB2ZXJzaW9uMgorLS0tLS0tCisgICAgICsgW3RoaXJkXSB2ZXJzaW9uMgorKyAgICAgIFtmaWZ0aF0gdmVyc2lvbjEKKyAgKyAgICBbZm91cnRoXSB2ZXJzaW9uMQorKyArICArIFt0aGlyZF5dIHRoaXJkCisgICAgLSAgW3NlY29uZF0gcHJlZmVyIGZpcnN0IG92ZXIgc2Vjb25kCisgKyAgKyAgW2ZpcnN0XSBmaXJzdAorICAgICsgIFtzZWNvbmReXSBzZWNvbmQKKysrKysrKyBbbWFzdGVyXSBpbml0aWFsCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3Rfb2lkX2luaXQgJiYKKwljYXQgPmExIDw8LVxFT0YgJiYKKwlTb21lIHRpdGxlCisJPT09PT09PT09PQorCVdoZXRoZXIgJ1wnJ3RpcyBub2JsZXIgaW4gdGhlIG1pbmQgdG8gc3VmZmVyCisJVGhlIHNsaW5ncyBhbmQgYXJyb3dzIG9mIG91dHJhZ2VvdXMgZm9ydHVuZSwKKwlPciB0byB0YWtlIGFybXMgYWdhaW5zdCBhIHNlYSBvZiB0cm91YmxlcywKKwlBbmQgYnkgb3Bwb3NpbmcgZW5kIHRoZW0/IFRvIGRpZTogdG8gc2xlZXA7CisJTm8gbW9yZTsgYW5kIGJ5IGEgc2xlZXAgdG8gc2F5IHdlIGVuZAorCVRoZSBoZWFydC1hY2hlIGFuZCB0aGUgdGhvdXNhbmQgbmF0dXJhbCBzaG9ja3MKKwlUaGF0IGZsZXNoIGlzIGhlaXIgdG8sICdcJyd0aXMgYSBjb25zdW1tYXRpb24KKwlEZXZvdXRseSB0byBiZSB3aXNoJ1wnJ2QuCisJRU9GCisKKwlnaXQgYWRkIGExICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSBpbml0aWFsICYmCisKKwljYXQgPj5hMSA8PC1cRU9GICYmCisJU29tZSB0aXRsZQorCT09PT09PT09PT0KKwlUbyBkaWUsIHRvIHNsZWVwOworCVRvIHNsZWVwOiBwZXJjaGFuY2UgdG8gZHJlYW06IGF5LCB0aGVyZSdcJydzIHRoZSBydWI7CisJRm9yIGluIHRoYXQgc2xlZXAgb2YgZGVhdGggd2hhdCBkcmVhbXMgbWF5IGNvbWUKKwlXaGVuIHdlIGhhdmUgc2h1ZmZsZWQgb2ZmIHRoaXMgbW9ydGFsIGNvaWwsCisJTXVzdCBnaXZlIHVzIHBhdXNlOiB0aGVyZSdcJydzIHRoZSByZXNwZWN0CisJVGhhdCBtYWtlcyBjYWxhbWl0eSBvZiBzbyBsb25nIGxpZmU7CisJRU9GCisKKwlnaXQgY2hlY2tvdXQgLWIgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIGZpcnN0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3RlciAmJgorCWdpdCBzaG93IGZpcnN0OmExIHwKKwlzZWQgLWUgInMvVG8gZGllLCB0L1RvIGRpZSEgVC8iIC1lICJzL1NvbWUgdGl0bGUvU29tZSBUaXRsZS8iID5hMSAmJgorCWVjaG8gIiogRU5EICoiID4+YTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RoaW5nIHJlY29yZGVkIHdpdGhvdXQgcmVyZXJlJyAnCisJcm0gLXJmIC5naXQvcnItY2FjaGUgJiYKKwlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisJISB0ZXN0IC1kIC5naXQvcnItY2FjaGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWN0aXZhdGUgcmVyZXJlLCBvbGQgc3R5bGUgKGNvbmZsaWN0aW5nIG1lcmdlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlta2RpciAuZ2l0L3JyLWNhY2hlICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuZW5hYmxlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCisJc2hhMT0kKHBlcmwgLXBlICJzLwkuKi8vIiAuZ2l0L01FUkdFX1JSKSAmJgorCXJyPS5naXQvcnItY2FjaGUvJHNoYTEgJiYKKwlncmVwICJePT09PT09PVwkIiAkcnIvcHJlaW1hZ2UgJiYKKwkhIHRlc3QgLWYgJHJyL3Bvc3RpbWFnZSAmJgorCSEgdGVzdCAtZiAkcnIvdGhpc2ltYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZS5lbmFibGVkIHdvcmtzLCB0b28nICcKKwlybSAtcmYgLmdpdC9yci1jYWNoZSAmJgorCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlyc3QgJiYKKworCXNoYTE9JChwZXJsIC1wZSAicy8JLiovLyIgLmdpdC9NRVJHRV9SUikgJiYKKwlycj0uZ2l0L3JyLWNhY2hlLyRzaGExICYmCisJZ3JlcCBePT09PT09PSQgJHJyL3ByZWltYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCByci1jYWNoZScgJworCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCXNoYTE9JChwZXJsIC1wZSAicy8JLiovLyIgLmdpdC9NRVJHRV9SUikgJiYKKwlycj0uZ2l0L3JyLWNhY2hlLyRzaGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JyLWNhY2hlIGxvb2tzIHNhbmUnICcKKwkjIG5vIHBvc3RpbWFnZSBvciB0aGlzaW1hZ2UgeWV0CisJISB0ZXN0IC1mICRyci9wb3N0aW1hZ2UgJiYKKwkhIHRlc3QgLWYgJHJyL3RoaXNpbWFnZSAmJgorCisJIyBwcmVpbWFnZSBoYXMgcmlnaHQgbnVtYmVyIG9mIGxpbmVzCisJY250PSQoc2VkIC1uZSAiL148PDw8PDw8LywvXj4+Pj4+Pj4vcCIgJHJyL3ByZWltYWdlIHwgd2MgLWwpICYmCisJZWNobyAkY250ICYmCisJdGVzdCAkY250ID0gMTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGRpZmYnICcKKwlnaXQgc2hvdyBmaXJzdDphMSA+YTEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLS0tIGEvYTEKKwkrKysgYi9hMQorCUBAIC0xLDQgKzEsNCBAQAorCS1Tb21lIFRpdGxlCisJK1NvbWUgdGl0bGUKKwkgPT09PT09PT09PQorCSBXaGV0aGVyICdcJyd0aXMgbm9ibGVyIGluIHRoZSBtaW5kIHRvIHN1ZmZlcgorCSBUaGUgc2xpbmdzIGFuZCBhcnJvd3Mgb2Ygb3V0cmFnZW91cyBmb3J0dW5lLAorCUBAIC04LDIxICs4LDExIEBACisJIFRoZSBoZWFydC1hY2hlIGFuZCB0aGUgdGhvdXNhbmQgbmF0dXJhbCBzaG9ja3MKKwkgVGhhdCBmbGVzaCBpcyBoZWlyIHRvLCAnXCcndGlzIGEgY29uc3VtbWF0aW9uCisJIERldm91dGx5IHRvIGJlIHdpc2gnXCcnZC4KKwktPDw8PDw8PAorCS1Tb21lIFRpdGxlCisJLT09PT09PT09PT0KKwktVG8gZGllISBUbyBzbGVlcDsKKwktPT09PT09PQorCSBTb21lIHRpdGxlCisJID09PT09PT09PT0KKwkgVG8gZGllLCB0byBzbGVlcDsKKwktPj4+Pj4+PgorCSBUbyBzbGVlcDogcGVyY2hhbmNlIHRvIGRyZWFtOiBheSwgdGhlcmUnXCcncyB0aGUgcnViOworCSBGb3IgaW4gdGhhdCBzbGVlcCBvZiBkZWF0aCB3aGF0IGRyZWFtcyBtYXkgY29tZQorCSBXaGVuIHdlIGhhdmUgc2h1ZmZsZWQgb2ZmIHRoaXMgbW9ydGFsIGNvaWwsCisJIE11c3QgZ2l2ZSB1cyBwYXVzZTogdGhlcmUnXCcncyB0aGUgcmVzcGVjdAorCSBUaGF0IG1ha2VzIGNhbGFtaXR5IG9mIHNvIGxvbmcgbGlmZTsKKwktPDw8PDw8PAorCS09PT09PT09CisJLSogRU5EICoKKwktPj4+Pj4+PgorCUVPRgorCWdpdCByZXJlcmUgZGlmZiA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgc3RhdHVzJyAnCisJZWNobyBhMSA+ZXhwZWN0ICYmCisJZ2l0IHJlcmVyZSBzdGF0dXMgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgcG9zdGltYWdlIHdpbnMnICcKKwlnaXQgc2hvdyBmaXJzdDphMSB8IHNlZCAicy9UbyBkaWU6IHQvVG8gZGllISBULyIgPmV4cGVjdCAmJgorCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSAicHJlZmVyIGZpcnN0IG92ZXIgc2Vjb25kIiAmJgorCXRlc3QgLWYgJHJyL3Bvc3RpbWFnZSAmJgorCisJb2xkbXRpbWVwb3N0PSQodGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTYwICRyci9wb3N0aW1hZ2UpICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgbWFzdGVyICYmCisJZ2l0IHNob3cgc2Vjb25kXjphMSB8IHNlZCAicy9UbyBkaWU6IHQvVG8gZGllISBULyIgPmExICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSB0aGlyZCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisJIyByZXJlcmUga2lja2VkIGluCisJISBncmVwICJePT09PT09PVwkIiBhMSAmJgorCXRlc3RfY21wIGV4cGVjdCBhMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgdXBkYXRlcyBwb3N0aW1hZ2UgdGltZXN0YW1wJyAnCisJbmV3bXRpbWVwb3N0PSQodGVzdC10b29sIGNobXRpbWUgLS1nZXQgJHJyL3Bvc3RpbWFnZSkgJiYKKwl0ZXN0ICRvbGRtdGltZXBvc3QgLWx0ICRuZXdtdGltZXBvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGNsZWFyJyAnCisJbXYgJHJyL3Bvc3RpbWFnZSAuZ2l0L3Bvc3Qtc2F2ZWQgJiYKKwllY2hvICIkc2hhMQlhMSIgfCBwZXJsIC1wZSAieS9cMDEyL1wwMDAvIiA+LmdpdC9NRVJHRV9SUiAmJgorCWdpdCByZXJlcmUgY2xlYXIgJiYKKwkhIHRlc3QgLWQgJHJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnRvdmVyIGRpcmVjdG9yeScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlta2RpciAtcCAkcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlyc3QgJiYKKwl0ZXN0IC1mICRyci9wcmVpbWFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHByZWltYWdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW1rZGlyIC1wICRyciAmJgorCWNwIC5naXQvcG9zdC1zYXZlZCAkcnIvcG9zdGltYWdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisJdGVzdCAtZiAkcnIvcHJlaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24gdGVzdHMnICcKKwlta2RpciAtcCAkcnIgJiYKKwllY2hvIEhlbGxvID4kcnIvcHJlaW1hZ2UgJiYKKwllY2hvIFdvcmxkID4kcnIvcG9zdGltYWdlICYmCisKKwlzaGEyPSQodGVzdF9vaWQgZGVhZGJlZWYpICYmCisJcnIyPS5naXQvcnItY2FjaGUvJHNoYTIgJiYKKwlta2RpciAkcnIyICYmCisJZWNobyBIZWxsbyA+JHJyMi9wcmVpbWFnZSAmJgorCisJYWxtb3N0XzE1X2RheXNfYWdvPSQoKDYwLTE1Kjg2NDAwKSkgJiYKKwlqdXN0X292ZXJfMTVfZGF5c19hZ289JCgoLTEtMTUqODY0MDApKSAmJgorCWFsbW9zdF82MF9kYXlzX2Fnbz0kKCg2MC02MCo4NjQwMCkpICYmCisJanVzdF9vdmVyXzYwX2RheXNfYWdvPSQoKC0xLTYwKjg2NDAwKSkgJiYKKworCXRlc3QtdG9vbCBjaG10aW1lID0kanVzdF9vdmVyXzYwX2RheXNfYWdvICRyci9wcmVpbWFnZSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0kYWxtb3N0XzYwX2RheXNfYWdvICRyci9wb3N0aW1hZ2UgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9JGFsbW9zdF8xNV9kYXlzX2FnbyAkcnIyL3ByZWltYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIHByZXNlcnZlcyB5b3VuZyBvciByZWNlbnRseSB1c2VkIHJlY29yZHMnICcKKwlnaXQgcmVyZXJlIGdjICYmCisJdGVzdCAtZiAkcnIvcHJlaW1hZ2UgJiYKKwl0ZXN0IC1mICRycjIvcHJlaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2xkIHJlY29yZHMgcmVzdCBpbiBwZWFjZScgJworCXRlc3QtdG9vbCBjaG10aW1lID0kanVzdF9vdmVyXzYwX2RheXNfYWdvICRyci9wb3N0aW1hZ2UgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9JGp1c3Rfb3Zlcl8xNV9kYXlzX2FnbyAkcnIyL3ByZWltYWdlICYmCisJZ2l0IHJlcmVyZSBnYyAmJgorCSEgdGVzdCAtZiAkcnIvcHJlaW1hZ2UgJiYKKwkhIHRlc3QgLWYgJHJyMi9wcmVpbWFnZQorJworCityZXJlcmVfZ2NfY3VzdG9tX2V4cGlyeV90ZXN0ICgpIHsKKwlmaXZlX2RheXM9IiQxIiByaWdodF9ub3c9IiQyIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlcmVyZSBnYyB3aXRoIGN1c3RvbSBleHBpcnkgKCRmaXZlX2RheXMsICRyaWdodF9ub3cpIiAnCisJCXJtIC1mciAuZ2l0L3JyLWNhY2hlICYmCisJCXJyPS5naXQvcnItY2FjaGUvJFpFUk9fT0lEICYmCisJCW1rZGlyIC1wICIkcnIiICYmCisJCT4iJHJyL3ByZWltYWdlIiAmJgorCQk+IiRyci9wb3N0aW1hZ2UiICYmCisKKwkJdHdvX2RheXNfYWdvPSQoKC0yKjg2NDAwKSkgJiYKKwkJdGVzdC10b29sIGNobXRpbWUgPSR0d29fZGF5c19hZ28gIiRyci9wcmVpbWFnZSIgJiYKKwkJdGVzdC10b29sIGNobXRpbWUgPSR0d29fZGF5c19hZ28gIiRyci9wb3N0aW1hZ2UiICYmCisKKwkJZmluZCAuZ2l0L3JyLWNhY2hlIC10eXBlIGYgfCBzb3J0ID5vcmlnaW5hbCAmJgorCisJCWdpdCAtYyAiZ2MucmVyZXJlcmVzb2x2ZWQ9JGZpdmVfZGF5cyIgXAorCQkgICAgLWMgImdjLnJlcmVyZXVucmVzb2x2ZWQ9JGZpdmVfZGF5cyIgcmVyZXJlIGdjICYmCisJCWZpbmQgLmdpdC9yci1jYWNoZSAtdHlwZSBmIHwgc29ydCA+YWN0dWFsICYmCisJCXRlc3RfY21wIG9yaWdpbmFsIGFjdHVhbCAmJgorCisJCWdpdCAtYyAiZ2MucmVyZXJlcmVzb2x2ZWQ9JGZpdmVfZGF5cyIgXAorCQkgICAgLWMgImdjLnJlcmVyZXVucmVzb2x2ZWQ9JHJpZ2h0X25vdyIgcmVyZXJlIGdjICYmCisJCWZpbmQgLmdpdC9yci1jYWNoZSAtdHlwZSBmIHwgc29ydCA+YWN0dWFsICYmCisJCXRlc3RfY21wIG9yaWdpbmFsIGFjdHVhbCAmJgorCisJCWdpdCAtYyAiZ2MucmVyZXJlcmVzb2x2ZWQ9JHJpZ2h0X25vdyIgXAorCQkgICAgLWMgImdjLnJlcmVyZXVucmVzb2x2ZWQ9JHJpZ2h0X25vdyIgcmVyZXJlIGdjICYmCisJCWZpbmQgLmdpdC9yci1jYWNoZSAtdHlwZSBmIHwgc29ydCA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwknCit9CisKK3JlcmVyZV9nY19jdXN0b21fZXhwaXJ5X3Rlc3QgNSAwCisKK3JlcmVyZV9nY19jdXN0b21fZXhwaXJ5X3Rlc3QgNS5kYXlzLmFnbyBub3cKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGZpbGUyIGFkZGVkIGRpZmZlcmVudGx5IGluIHR3byBicmFuY2hlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCAtYiBmb3VydGggJiYKKwllY2hvIEhhbGxvID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24xICYmCisKKwlnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKwllY2hvIEJlbGxvID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24yICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZm91cnRoICYmCisJZWNobyBDZWxsbyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSByZXNvbHV0aW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdXRpb24gd2FzIHJlY29yZGVkIHByb3Blcmx5JyAnCisJZWNobyBDZWxsbyA+ZXhwZWN0ZWQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZpZnRoICYmCisKKwllY2hvIEhhbGxvID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24xICYmCisKKwlnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKwllY2hvIEJlbGxvID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24yICYmCisJZ2l0IHRhZyB2ZXJzaW9uMiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpZnRoICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUuYXV0b3VwZGF0ZScgJworCWdpdCBjb25maWcgcmVyZXJlLmF1dG91cGRhdGUgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlmdGggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLXJlcmVyZS1hdXRvdXBkYXRlJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuYXV0b3VwZGF0ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1yZXJlcmUtYXV0b3VwZGF0ZSBmaWZ0aCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUnICcKKwloZWFkYmxvYj0kKGdpdCByZXYtcGFyc2UgdmVyc2lvbjI6ZmlsZTMpICYmCisJbWVyZ2VibG9iPSQoZ2l0IHJldi1wYXJzZSBmaWZ0aDpmaWxlMykgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkaGVhZGJsb2IgMglmaWxlMworCTEwMDY0NCAkbWVyZ2VibG9iIDMJZmlsZTMKKwlFT0YKKworCWdpdCBjb25maWcgcmVyZXJlLmF1dG91cGRhdGUgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSBmaWZ0aCAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhbiB1bnJlc29sdmVkIG1lcmdlJyAnCisJaGVhZGJsb2I9JChnaXQgcmV2LXBhcnNlIHZlcnNpb24yOmZpbGUzKSAmJgorCW1lcmdlYmxvYj0kKGdpdCByZXYtcGFyc2UgZmlmdGg6ZmlsZTMpICYmCisJY2F0ID5leHBlY3RlZC51bnJlc29sdmVkIDw8LUVPRiAmJgorCTEwMDY0NCAkaGVhZGJsb2IgMglmaWxlMworCTEwMDY0NCAkbWVyZ2VibG9iIDMJZmlsZTMKKwlFT0YKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgcmVyZXJlLmF1dG91cGRhdGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHZlcnNpb24yICYmCisJZmlmdGg9JChnaXQgcmV2LXBhcnNlIGZpZnRoKSAmJgorCWVjaG8gIiRmaWZ0aAkJYnJhbmNoICdmaWZ0aCcgb2YgLiIgfAorCWdpdCBmbXQtbWVyZ2UtbXNnID5tc2cgJiYKKwlhbmNlc3Rvcj0kKGdpdCBtZXJnZS1iYXNlIHZlcnNpb24yIGZpZnRoKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRhbmNlc3RvciIgLS0gSEVBRCBmaWZ0aCAmJgorCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMgZmlsZTMuY29uZmxpY3QgJiYKKworCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudW5yZXNvbHZlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcmVyZXJlJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuYXV0b3VwZGF0ZSAmJgorCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKworCWdpdCByZXJlcmUgJiYKKwlnaXQgbHMtZmlsZXMgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGxpY2l0IHJlcmVyZSB3aXRoIGF1dG91cGRhdGUnICcKKwlnaXQgY29uZmlnIHJlcmVyZS5hdXRvdXBkYXRlIHRydWUgJiYKKwlnaXQgcm0gLWZyIC0tY2FjaGVkIC4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8ZmFpbGVkbWVyZ2UgJiYKKwljcCBmaWxlMy5jb25mbGljdCBmaWxlMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisKKwlnaXQgcmVyZXJlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgb3ZlcnJpZGVzJyAnCisJZ2l0IGNvbmZpZyByZXJlcmUuYXV0b3VwZGF0ZSBmYWxzZSAmJgorCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJZ2l0IHJlcmVyZSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsMSAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsMiAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSAtLXJlcmVyZS1hdXRvdXBkYXRlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgLS1uby1uby1yZXJlcmUtYXV0b3VwZGF0ZScgJworCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcmVyZSAtLW5vLW5vLXJlcmVyZS1hdXRvdXBkYXRlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCBbVXVdc2FnZSBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgLWgnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVyZXJlIC1oID5oZWxwICYmCisJdGVzdF9pMThuZ3JlcCBbVXVdc2FnZSBoZWxwCisnCisKK2NvbmNhdF9pbnNlcnQgKCkgeworCWxhc3Q9JDEKKwlzaGlmdAorCWNhdCBlYXJseSAmJiBwcmludGYgIiVzXG4iICIkQCIgJiYgY2F0IGxhdGUgIiRsYXN0IgorfQorCitjb3VudF9wcmVfcG9zdCAoKSB7CisJZmluZCAuZ2l0L3JyLWNhY2hlLyAtdHlwZSBmIC1uYW1lICJwcmVpbWFnZSoiID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAiJDEiIGFjdHVhbCAmJgorCWZpbmQgLmdpdC9yci1jYWNoZS8gLXR5cGUgZiAtbmFtZSAicG9zdGltYWdlKiIgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICIkMiIgYWN0dWFsCit9CisKK21lcmdlX2NvbmZsaWN0X3Jlc29sdmUgKCkgeworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2l4LjEgJiYKKwkjIFJlc29sdXRpb24gaXMgdG8gcmVwbGFjZSA3IHdpdGggNi4xIGFuZCA2LjIgKGkuZS4gdGFrZSBib3RoKQorCWNvbmNhdF9pbnNlcnQgc2hvcnQgNi4xIDYuMiA+ZmlsZTEgJiYKKwljb25jYXRfaW5zZXJ0IGxvbmcgNi4xIDYuMiA+ZmlsZTIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgaWRlbnRpY2FsIGNvbmZsaWN0cycgJworCXJtIC1mciAuZ2l0L3JyLWNhY2hlICYmCisJbWtkaXIgLmdpdC9yci1jYWNoZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCXRlc3Rfc2VxIDEgNiA+ZWFybHkgJiYKKwk+bGF0ZSAmJgorCXRlc3Rfc2VxIDExIDE1ID5zaG9ydCAmJgorCXRlc3Rfc2VxIDExMSAxMjAgPmxvbmcgJiYKKwljb25jYXRfaW5zZXJ0IHNob3J0ID5maWxlMSAmJgorCWNvbmNhdF9pbnNlcnQgbG9uZyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHRhZyBiYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpeC4xICYmCisJY29uY2F0X2luc2VydCBzaG9ydCA2LjEgPmZpbGUxICYmCisJY29uY2F0X2luc2VydCBsb25nIDYuMSA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSA2LjEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2l4LjIgSEVBRF4gJiYKKwljb25jYXRfaW5zZXJ0IHNob3J0IDYuMiA+ZmlsZTEgJiYKKwljb25jYXRfaW5zZXJ0IGxvbmcgNi4yID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIDYuMiAmJgorCisJIyBBdCB0aGlzIHBvaW50LCBzaXguMSBhbmQgc2l4LjIKKwkjIC0gZGVyaXZlIGZyb20gY29tbW9uIGFuY2VzdG9yIHRoYXQgaGFzIHR3byBmaWxlcworCSMgICAxLi4uNiA3IDExLi4xNSAoZmlsZTEpIGFuZCAxLi4uNiA3IDExMS4uMTIwIChmaWxlMikKKwkjIC0gc2l4LjEgcmVwbGFjZXMgdGhlc2UgN3Mgd2l0aCA2LjEKKwkjIC0gc2l4LjIgcmVwbGFjZXMgdGhlc2UgN3Mgd2l0aCA2LjIKKworCW1lcmdlX2NvbmZsaWN0X3Jlc29sdmUgJiYKKworCSMgQ2hlY2sgdGhhdCByZXJlcmUga25vd3MgdGhhdCBmaWxlMSBhbmQgZmlsZTIgaGF2ZSBjb25mbGljdHMKKworCXByaW50ZiAiJXNcbiIgZmlsZTEgZmlsZTIgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtdSB8IHNlZCAtZSAicy9eLioJLy8iIHwgc29ydCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHJlcmVyZSBzdGF0dXMgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgcmVyZXJlIHJlbWFpbmluZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJY291bnRfcHJlX3Bvc3QgMiAwICYmCisKKwkjIFByZXRlbmQgdGhhdCB0aGUgY29uZmxpY3RzIHdlcmUgbWFkZSBxdWl0ZSBzb21lIHRpbWUgYWdvCisJdGVzdC10b29sIGNobXRpbWUgLTE3MjgwMCAkKGZpbmQgLmdpdC9yci1jYWNoZS8gLXR5cGUgZikgJiYKKworCSMgVW5yZXNvbHZlZCBlbnRyaWVzIGhhdmUgbm90IGV4cGlyZWQgeWV0CisJZ2l0IC1jIGdjLnJlcmVyZXJlc29sdmVkPTUgLWMgZ2MucmVyZXJldW5yZXNvbHZlZD01IHJlcmVyZSBnYyAmJgorCWNvdW50X3ByZV9wb3N0IDIgMCAmJgorCisJIyBVbnJlc29sdmVkIGVudHJpZXMgaGF2ZSBleHBpcmVkCisJZ2l0IC1jIGdjLnJlcmVyZXJlc29sdmVkPTUgLWMgZ2MucmVyZXJldW5yZXNvbHZlZD0xIHJlcmVyZSBnYyAmJgorCWNvdW50X3ByZV9wb3N0IDAgMCAmJgorCisJIyBSZWNyZWF0ZSB0aGUgY29uZmxpY3RlZCBzdGF0ZQorCW1lcmdlX2NvbmZsaWN0X3Jlc29sdmUgJiYKKwljb3VudF9wcmVfcG9zdCAyIDAgJiYKKworCSMgQ2xlYXIgaXQKKwlnaXQgcmVyZXJlIGNsZWFyICYmCisJY291bnRfcHJlX3Bvc3QgMCAwICYmCisKKwkjIFJlY3JlYXRlIHRoZSBjb25mbGljdGVkIHN0YXRlCisJbWVyZ2VfY29uZmxpY3RfcmVzb2x2ZSAmJgorCWNvdW50X3ByZV9wb3N0IDIgMCAmJgorCisJIyBXZSByZXNvbHZlZCBmaWxlMSBhbmQgZmlsZTIKKwlnaXQgcmVyZXJlICYmCisJZ2l0IHJlcmVyZSByZW1haW5pbmcgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCSMgV2UgbXVzdCBoYXZlIHJlY29yZGVkIGJvdGggb2YgdGhlbQorCWNvdW50X3ByZV9wb3N0IDIgMiAmJgorCisJIyBOb3cgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVzb2x2ZSB0aGVtIGJvdGgKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpeC4xICYmCisJZ2l0IHJlcmVyZSAmJgorCisJZ2l0IHJlcmVyZSByZW1haW5pbmcgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCWNvbmNhdF9pbnNlcnQgc2hvcnQgNi4xIDYuMiA+ZmlsZTEuZXhwZWN0ICYmCisJY29uY2F0X2luc2VydCBsb25nIDYuMSA2LjIgPmZpbGUyLmV4cGVjdCAmJgorCXRlc3RfY21wIGZpbGUxLmV4cGVjdCBmaWxlMSAmJgorCXRlc3RfY21wIGZpbGUyLmV4cGVjdCBmaWxlMiAmJgorCisJIyBGb3JnZXQgcmVzb2x1dGlvbiBmb3IgZmlsZTIKKwlnaXQgcmVyZXJlIGZvcmdldCBmaWxlMiAmJgorCWVjaG8gZmlsZTIgPmV4cGVjdCAmJgorCWdpdCByZXJlcmUgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJY291bnRfcHJlX3Bvc3QgMiAxICYmCisKKwkjIGZpbGUyIGFscmVhZHkgaGFzIGNvcnJlY3QgcmVzb2x1dGlvbiwgc28gcmVjb3JkIGl0IGFnYWluCisJZ2l0IHJlcmVyZSAmJgorCisJIyBQcmV0ZW5kIHRoYXQgdGhlIHJlc29sdXRpb25zIGFyZSBvbGQgYWdhaW4KKwl0ZXN0LXRvb2wgY2htdGltZSAtMTcyODAwICQoZmluZCAuZ2l0L3JyLWNhY2hlLyAtdHlwZSBmKSAmJgorCisJIyBSZXNvbHZlZCBlbnRyaWVzIGhhdmUgbm90IGV4cGlyZWQgeWV0CisJZ2l0IC1jIGdjLnJlcmVyZXJlc29sdmVkPTUgLWMgZ2MucmVyZXJldW5yZXNvbHZlZD01IHJlcmVyZSBnYyAmJgorCisJY291bnRfcHJlX3Bvc3QgMiAyICYmCisKKwkjIFJlc29sdmVkIGVudHJpZXMgaGF2ZSBleHBpcmVkCisJZ2l0IC1jIGdjLnJlcmVyZXJlc29sdmVkPTEgLWMgZ2MucmVyZXJldW5yZXNvbHZlZD01IHJlcmVyZSBnYyAmJgorCWNvdW50X3ByZV9wb3N0IDAgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgd2l0aCB1bmV4cGVjdGVkIGNvbmZsaWN0IG1hcmtlcnMgZG9lcyBub3QgY3Jhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoLTEgbWFzdGVyICYmCisJZWNobyAiYmFyIiA+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLXEgLW0gdHdvICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaC0yIG1hc3RlciAmJgorCWVjaG8gImZvbyIgPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIG9uZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaC0xICYmCisJZWNobyAiPDw8PDw8PCBhIiA+dGVzdCAmJgorCWdpdCByZXJlcmUgJiYKKworCWdpdCByZXJlcmUgY2xlYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIHdpdGggaW5uZXIgY29uZmxpY3QgbWFya2VycycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCAtYiBBIG1hc3RlciAmJgorCWVjaG8gImJhciIgPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1xIC1tIHR3byAmJgorCWVjaG8gImJheiIgPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1xIC1tIHRocmVlICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIEIgbWFzdGVyICYmCisJZWNobyAiZm9vIiA+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLXEgLWEgLW0gb25lICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQX4gJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJ3aWxsIHNvbHZlIGNvbmZsaWN0cyBsYXRlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQSAmJgorCisJZWNobyAicmVzb2x2ZWQiID50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAic29sdmVkIGNvbmZsaWN0IiAmJgorCisJZWNobyAicmVzb2x2ZWQiID5leHBlY3QgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRH5+ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEF+ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAid2lsbCBzb2x2ZSBjb25mbGljdHMgbGF0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEEgJiYKKwljYXQgdGVzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtbSAicmVyZXJlIHNvbHZlZCBjb25mbGljdCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEEgJiYKKwljYXQgdGVzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzaW1wbGUgc3RhZ2UgMSBoYW5kbGluZycgJworCXRlc3RfY3JlYXRlX3JlcG8gc3RhZ2VfMV9oYW5kbGluZyAmJgorCSgKKwkJY2Qgc3RhZ2VfMV9oYW5kbGluZyAmJgorCisJCXRlc3Rfc2VxIDEgMTAgPm9yaWdpbmFsICYmCisJCWdpdCBhZGQgb3JpZ2luYWwgJiYKKwkJZ2l0IGNvbW1pdCAtbSBvcmlnaW5hbCAmJgorCisJCWdpdCBjaGVja291dCAtYiBBIG1hc3RlciAmJgorCQlnaXQgbXYgb3JpZ2luYWwgQSAmJgorCQlnaXQgY29tbWl0IC1tICJyZW5hbWUgdG8gQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgQiBtYXN0ZXIgJiYKKwkJZ2l0IG12IG9yaWdpbmFsIEIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIHRvIEIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNpbXBsZSBzdGFnZSAxIGhhbmRsaW5nJyAnCisJKAorCQljZCBzdGFnZV8xX2hhbmRsaW5nICYmCisKKwkJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEJeMAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjAxLXNob3J0bG9nLnNoIGIvdC90NDIwMS1zaG9ydGxvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kM2E3Y2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMS1zaG9ydGxvZy5zaApAQCAtMCwwICsxLDIxOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzaG9ydGxvZworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIDEgPmExICYmCisJZ2l0IGFkZCBhMSAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQ9JChwcmludGYgIiVzXG4iICJUZXN0IiAiIiB8IGdpdCBjb21taXQtdHJlZSAiJHRyZWUiKSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRjb21taXQiICYmCisKKwllY2hvIDIgPmExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICJUaGlzIGlzIGEgdmVyeSwgdmVyeSBsb25nIGZpcnN0IGxpbmUgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkiIGExICYmCisKKwkjIHRlc3QgaWYgdGhlIHdyYXBwaW5nIGlzIHN0aWxsIHZhbGlkCisJIyB3aGVuIHJlcGxhY2luZyBhbGwgaXMgYnkgdHJlYmxlIGNsZWZzLgorCWVjaG8gMyA+YTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiQoCisJCWVjaG8gIlRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZiBpdCBpcyB3cmFwcGVkIGNvcnJlY3RseSIgfAorCQlzZWQgInMvaS8xMjM0L2ciIHwKKwkJdHIgMTIzNCAiXDM2MFwyMzVcMjA0XDIzNiIpIiBhMSAmJgorCisJIyBub3cgZnNjayB1cCB0aGUgdXRmOAorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBub24tdXRmLTggJiYKKwllY2hvIDQgPmExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkKAorCQllY2hvICJUaGlzIGlzIGEgdmVyeSwgdmVyeSBsb25nIGZpcnN0IGxpbmUgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkiIHwKKwkJc2VkICJzL2kvMTIzNC9nIiB8CisJCXRyIDEyMzQgIlwzNzBcMjM1XDIwNFwyMzYiKSIgYTEgJiYKKworCWVjaG8gNSA+YTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gImEJCQkJCQkJCTEyCTM0CTU2CTc4IiBhMSAmJgorCisJZWNobyA2ID5hMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiQ29tbWl0IGJ5IHNvbWVvbmUgZWxzZSIgXAorCQktLWF1dGhvcj0iU29tZW9uZSBlbHNlIDxub3QhbWU+IiBhMSAmJgorCisJY2F0ID5leHBlY3QudGVtcGxhdGUgPDwtXEVPRgorCUEgVSBUaG9yICg1KToKKwkgICAgICBTVUJKRUNUCisJICAgICAgU1VCSkVDVAorCSAgICAgIFNVQkpFQ1QKKwkgICAgICBTVUJKRUNUCisJICAgICAgU1VCSkVDVAorCisJU29tZW9uZSBlbHNlICgxKToKKwkgICAgICBTVUJKRUNUCisKKwlFT0YKKycKKworZnV6eigpIHsKKwlmaWxlPSQxICYmCisJc2VkICIKKwkJCXMvJE9JRF9SRUdFWC9PQkpFQ1RfTkFNRS9nCisJCQlzLyRfeDM1L09CSklEL2cKKwkJCXMvXiBcezZcfVtDVGFdLiovICAgICAgU1VCSkVDVC9nCisJCQlzL14gXHs4XH1bXiBdLiovICAgICAgICBDT05USU5VQVRJT04vZworCQkiIDwiJGZpbGUiID4iJGZpbGUuZnV6enkiICYmCisJc2VkICIvQ09OVElOVUFUSU9OLyBkIiA8IiRmaWxlLmZ1enp5IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IG91dHB1dCBmb3JtYXQnICcKKwlnaXQgc2hvcnRsb2cgSEVBRCA+bG9nICYmCisJZnV6eiBsb2cgPmxvZy5wcmVkaWN0YWJsZSAmJgorCXRlc3RfY21wIGV4cGVjdC50ZW1wbGF0ZSBsb2cucHJlZGljdGFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IGZvcm1hdCcgJworCXNlZCBzL1NVQkpFQ1QvT0JKRUNUX05BTUUvIGV4cGVjdC50ZW1wbGF0ZSA+ZXhwZWN0ICYmCisJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSIlSCIgSEVBRCA+bG9nICYmCisJZnV6eiBsb2cgPmxvZy5wcmVkaWN0YWJsZSAmJgorCXRlc3RfY21wIGV4cGVjdCBsb2cucHJlZGljdGFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYmJyZXYnICcKKwlzZWQgcy9TVUJKRUNUL09CSklELyBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgorCWdpdCBzaG9ydGxvZyAtLWZvcm1hdD0iJWgiIC0tYWJicmV2PTM1IEhFQUQgPmxvZyAmJgorCWZ1enogbG9nID5sb2cucHJlZGljdGFibGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbG9nLnByZWRpY3RhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHB1dCBmcm9tIHVzZXItZGVmaW5lZCBmb3JtYXQgaXMgcmUtd3JhcHBlZCcgJworCXNlZCAicy9TVUJKRUNUL3R3byBsaW5lcy8iIGV4cGVjdC50ZW1wbGF0ZSA+ZXhwZWN0ICYmCisJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSJ0d28lbmxpbmVzIiBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0IGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2hvcnRsb2cgd3JhcHBpbmcnICcKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKK0EgVSBUaG9yICg1KToKKyAgICAgIFRlc3QKKyAgICAgIFRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZgorICAgICAgICAgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIFRo8J2EnnMg8J2EnnMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZvCdhJ5yc3QgbPCdhJ5uZSBmb3IgdGhlIGNvbW3wnYSedCBtZXNzYWdlIHRvIHNlZSDwnYSeZgorICAgICAgICAg8J2EnnQg8J2EnnMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIFRo+J2EnnMg+J2EnnMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZvidhJ5yc3QgbPidhJ5uZSBmb3IgdGhlIGNvbW34nYSedAorICAgICAgICAgbWVzc2FnZSB0byBzZWUg+J2EnmYg+J2EnnQg+J2EnnMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIGEJCQkJCQkJCTEyCTM0CisgICAgICAgICA1Ngk3OAorCitTb21lb25lIGVsc2UgKDEpOgorICAgICAgQ29tbWl0IGJ5IHNvbWVvbmUgZWxzZQorCitFT0YKKwlnaXQgc2hvcnRsb2cgLXcgSEVBRCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2hvcnRsb2cgZnJvbSBub24tZ2l0IGRpcmVjdG9yeScgJworCWdpdCBsb2cgLS1uby1leHBhbmQtdGFicyBIRUFEID5sb2cgJiYKKwlHSVRfRElSPW5vbi1leGlzdGluZyBnaXQgc2hvcnRsb2cgLXcgPGxvZyA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2hvcnRsb2cgY2FuIHJlYWQgLS1mb3JtYXQ9cmF3IG91dHB1dCcgJworCWdpdCBsb2cgLS1mb3JtYXQ9cmF3IEhFQUQgPmxvZyAmJgorCUdJVF9ESVI9bm9uLWV4aXN0aW5nIGdpdCBzaG9ydGxvZyAtdyA8bG9nID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIGZyb20gbm9uLWdpdCBkaXJlY3RvcnkgcmVmdXNlcyBleHRyYSBhcmd1bWVudHMnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0RJUj1ub24tZXhpc3RpbmcgZ2l0IHNob3J0bG9nIGZvbyAyPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgInRvbyBtYW55IGFyZ3VtZW50cyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIHNob3VsZCBhZGQgbmV3bGluZSB3aGVuIGlucHV0IGxpbmUgbWF0Y2hlcyB3cmFwbGVuJyAnCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitBIFUgVGhvciAoMik6CisgICAgICBiYmJiYmJiYmJiYmJiYmJiYmI6IGJiYmJiYmJiIGJiYiBiYmJiIGJiYmJiYmIgYmIgYmJiYiBiYmIgYmJiYmIgYmJiYmJiCisgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhOiBhYWFhYWEgYWFhYWFhYWFhYSBhYWFhIGFhYWFhYWFhIGFhIGFhYWEgYWEgYWFhCisKK0VPRgorCWdpdCBzaG9ydGxvZyAtdyA+b3V0IDw8XEVPRiAmJgorY29tbWl0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKworICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWE6IGFhYWFhYSBhYWFhYWFhYWFhIGFhYWEgYWFhYWFhYWEgYWEgYWFhYSBhYSBhYWEKKworY29tbWl0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKworICAgIGJiYmJiYmJiYmJiYmJiYmJiYjogYmJiYmJiYmIgYmJiIGJiYmIgYmJiYmJiYiBiYiBiYmJiIGJiYiBiYmJiYiBiYmJiYmIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCitpY29udmZyb211dGY4dG9pc284ODU5MSgpIHsKKwlwcmludGYgIiVzIiAiJCoiIHwgaWNvbnYgLWYgVVRGLTggLXQgSVNPODg1OS0xCit9CisKK0RTQ0hPPSJKw7Zow6RubsOrcyBcIkRzY2jDtlwiIFNjaGluZMOrbGluIgorRFNDSE9FPSIkRFNDSE8gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPiIKK01TRzE9InNldCBhMSB0byAyIGFuZCBzb21lIG5vbi1BU0NJSSBjaGFyczogw4TDn8O4IgorTVNHMj0ic2V0IGExIHRvIDMgYW5kIHNvbWUgbm9uLUFTQ0lJIGNoYXJzOiDDocOmw68iCitjYXQgPiBleHBlY3QgPDwgRU9GCiskRFNDSE8gKDIpOgorICAgICAgJE1TRzEKKyAgICAgICRNU0cyCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2hvcnRsb2cgZW5jb2RpbmcnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkY29tbWl0IiAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJZWNobyAyID4gYTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0cxIiAtLWF1dGhvcj0iJERTQ0hPRSIgYTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgIklTTzg4NTktMSIgJiYKKwllY2hvIDMgPiBhMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJChpY29udmZyb211dGY4dG9pc284ODU5MSAiJE1TRzIiKSIgXAorCQktLWF1dGhvcj0iJChpY29udmZyb211dGY4dG9pc284ODU5MSAiJERTQ0hPRSIpIiBhMSAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJZ2l0IHNob3J0bG9nIEhFQUR+Mi4uID4gb3V0ICYmCit0ZXN0X2NtcCBleHBlY3Qgb3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyB3aXRoIHJldmlzaW9uIHBzZXVkbyBvcHRpb25zJyAnCisJZ2l0IHNob3J0bG9nIC0tYWxsICYmCisJZ2l0IHNob3J0bG9nIC0tYnJhbmNoZXMgJiYKKwlnaXQgc2hvcnRsb2cgLS1leGNsdWRlPXJlZnMvaGVhZHMvbSogLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgd2l0aCAtLW91dHB1dD08ZmlsZT4nICcKKwlnaXQgc2hvcnRsb2cgLS1vdXRwdXQ9c2hvcnRsb2cgLTEgbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBzaG9ydGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyAtLWNvbW1pdHRlciAoaW50ZXJuYWwpJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHNpZGUgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCUdJVF9DT01NSVRURVJfTkFNRT0iU2luIE5vbWJyZSIgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHRocmVlICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJICAgICAyCUMgTyBNaXR0ZXIKKwkgICAgIDEJU2luIE5vbWJyZQorCUVPRgorCWdpdCBzaG9ydGxvZyAtbnNjIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgLS1jb21taXR0ZXIgKGV4dGVybmFsKScgJworCWdpdCBsb2cgLS1mb3JtYXQ9ZnVsbCB8IGdpdCBzaG9ydGxvZyAtbnNjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMi1sb2cuc2ggYi90L3Q0MjAyLWxvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjc2NmJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMi1sb2cuc2gKQEAgLTAsMCArMSwxNzQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxvZycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItdGVybWluYWwuc2giCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWxvZy1ncmFwaC5zaCIKKwordGVzdF9jbXBfZ3JhcGggKCkgeworCWxpYl90ZXN0X2NtcF9ncmFwaCAtLWZvcm1hdD0lcyAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwllY2hvIGljaGkgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKworCWdpdCBtdiBvbmUgaWNoaSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgJiYKKworCWNwIGljaGkgZWluICYmCisJZ2l0IGFkZCBlaW4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZvdXJ0aCAmJgorCisJbWtkaXIgYSAmJgorCWVjaG8gbmkgPmEvdHdvICYmCisJZ2l0IGFkZCBhL3R3byAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZmlmdGggICYmCisKKwlnaXQgcm0gYS90d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNpeHRoCisKKycKKworcHJpbnRmICJzaXh0aFxuZmlmdGhcbmZvdXJ0aFxudGhpcmRcbnNlY29uZFxuaW5pdGlhbCIgPiBleHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eScgJworCisJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVzIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworcHJpbnRmICJzaXh0aFxuZmlmdGhcbmZvdXJ0aFxudGhpcmRcbnNlY29uZFxuaW5pdGlhbFxuIiA+IGV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5ICh0Zm9ybWF0KScgJworCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolcyIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSAoc2hvcnRjdXQpJyAnCisKKwlnaXQgbG9nIC0tcHJldHR5PSIlcyIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCcgJworCisJZ2l0IGxvZyAtLWZvcm1hdD0iJXMiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisgVGhpcyBpcworICB0aGUgc2l4dGgKKyAgY29tbWl0LgorIFRoaXMgaXMKKyAgdGhlIGZpZnRoCisgIGNvbW1pdC4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgJXcoMTEsMSwyKScgJworCisJZ2l0IGxvZyAtMiAtLWZvcm1hdD0iJXcoMTEsMSwyKVRoaXMgaXMgdGhlICVzIGNvbW1pdC4iID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgJXcoLDEsMiknICcKKworCWdpdCBsb2cgLTIgLS1mb3JtYXQ9IiV3KCwxLDIpVGhpcyBpcyVudGhlICVzJW5jb21taXQuIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9zaXh0aCAgKSBzaXh0aAorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9maWZ0aCAgKSBmaWZ0aAorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9mb3VydGggKSBmb3VydGgKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovdGhpcmQgICkgdGhpcmQKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovc2Vjb25kICkgc2Vjb25kCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L2luaXRpYWwpIGluaXRpYWwKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lbGluZScgJworCisJZ2l0IGxvZyAtLW9uZWxpbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsdGVyPUEnICcKKworCWdpdCBsb2cgLS1uby1yZW5hbWVzIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9QSBIRUFEID4gYWN0dWFsICYmCisJZ2l0IGxvZyAtLW5vLXJlbmFtZXMgLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlciBBIEhFQUQgPiBhY3R1YWwtc2VwYXJhdGUgJiYKKwlwcmludGYgImZpZnRoXG5mb3VydGhcbnRoaXJkXG5pbml0aWFsIiA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLXNlcGFyYXRlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWx0ZXI9TScgJworCisJYWN0dWFsPSQoZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVzIiAtLWRpZmYtZmlsdGVyPU0gSEVBRCkgJiYKKwlleHBlY3Q9JChlY2hvIHNlY29uZCkgJiYKKwl2ZXJib3NlIHRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWx0ZXI9RCcgJworCisJYWN0dWFsPSQoZ2l0IGxvZyAtLW5vLXJlbmFtZXMgLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlcj1EIEhFQUQpICYmCisJZXhwZWN0PSQoZWNobyBzaXh0aCA7IGVjaG8gdGhpcmQpICYmCisJdmVyYm9zZSB0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsdGVyPVInICcKKworCWFjdHVhbD0kKGdpdCBsb2cgLU0gLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlcj1SIEhFQUQpICYmCisJZXhwZWN0PSQoZWNobyB0aGlyZCkgJiYKKwl2ZXJib3NlIHRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWx0ZXI9QycgJworCisJYWN0dWFsPSQoZ2l0IGxvZyAtQyAtQyAtLXByZXR0eT0iZm9ybWF0OiVzIiAtLWRpZmYtZmlsdGVyPUMgSEVBRCkgJiYKKwlleHBlY3Q9JChlY2hvIGZvdXJ0aCkgJiYKKwl2ZXJib3NlIHRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLWZvbGxvdycgJworCisJYWN0dWFsPSQoZ2l0IGxvZyAtLWZvbGxvdyAtLXByZXR0eT0iZm9ybWF0OiVzIiBpY2hpKSAmJgorCWV4cGVjdD0kKGVjaG8gdGhpcmQgOyBlY2hvIHNlY29uZCA7IGVjaG8gaW5pdGlhbCkgJiYKKwl2ZXJib3NlIHRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgbG9nLmZvbGxvdyB3b3JrcyBsaWtlIC0tZm9sbG93JyAnCisJdGVzdF9jb25maWcgbG9nLmZvbGxvdyB0cnVlICYmCisJYWN0dWFsPSQoZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVzIiBpY2hpKSAmJgorCWV4cGVjdD0kKGVjaG8gdGhpcmQgOyBlY2hvIHNlY29uZCA7IGVjaG8gaW5pdGlhbCkgJiYKKwl2ZXJib3NlIHRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgbG9nLmZvbGxvdyBkb2VzIG5vdCBkaWUgd2l0aCBtdWx0aXBsZSBwYXRocycgJworCXRlc3RfY29uZmlnIGxvZy5mb2xsb3cgdHJ1ZSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgaWNoaSBlaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbmZpZyBsb2cuZm9sbG93IGRvZXMgbm90IGRpZSB3aXRoIG5vIHBhdGhzJyAnCisJdGVzdF9jb25maWcgbG9nLmZvbGxvdyB0cnVlICYmCisJZ2l0IGxvZyAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIGxvZy5mb2xsb3cgaXMgb3ZlcnJpZGRlbiBieSAtLW5vLWZvbGxvdycgJworCXRlc3RfY29uZmlnIGxvZy5mb2xsb3cgdHJ1ZSAmJgorCWFjdHVhbD0kKGdpdCBsb2cgLS1uby1mb2xsb3cgLS1wcmV0dHk9ImZvcm1hdDolcyIgaWNoaSkgJiYKKwlleHBlY3Q9InRoaXJkIiAmJgorCXZlcmJvc2UgdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIKKycKKworIyBOb3RlIHRoYXQgdGhlc2UgY29tbWl0cyBhcmUgaW50ZW50aW9uYWxseSBsaXN0ZWQgb3V0IG9mIG9yZGVyLgorbGFzdF90aHJlZT0iJChnaXQgcmV2LXBhcnNlIDovZm91cnRoIDovc2l4dGggOi9maWZ0aCkiCitjYXQgPiBleHBlY3QgPDwgRU9GCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L3NpeHRoICkgc2l4dGgKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovZmlmdGggKSBmaWZ0aAorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9mb3VydGgpIGZvdXJ0aAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm8td2FsayA8Y29tbWl0cz4gc29ydHMgYnkgY29tbWl0IHRpbWUnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLW9uZWxpbmUgJGxhc3RfdGhyZWUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrPXNvcnRlZCA8Y29tbWl0cz4gc29ydHMgYnkgY29tbWl0IHRpbWUnICcKKwlnaXQgbG9nIC0tbm8td2Fsaz1zb3J0ZWQgLS1vbmVsaW5lICRsYXN0X3RocmVlID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCis9PT0gJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9zaXh0aCApIHNpeHRoCis9PT0gJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9maWZ0aCApIGZpZnRoCis9PT0gJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9mb3VydGgpIGZvdXJ0aAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbGluZS1wcmVmaXg9Ij09PSAiIC0tbm8td2FsayA8Y29tbWl0cz4gc29ydHMgYnkgY29tbWl0IHRpbWUnICcKKwlnaXQgbG9nIC0tbGluZS1wcmVmaXg9Ij09PSAiIC0tbm8td2FsayAtLW9uZWxpbmUgJGxhc3RfdGhyZWUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovZm91cnRoKSBmb3VydGgKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovc2l4dGggKSBzaXh0aAorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9maWZ0aCApIGZpZnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrPXVuc29ydGVkIDxjb21taXRzPiBsZWF2ZXMgbGlzdCBvZiBjb21taXRzIGFzIGdpdmVuJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGs9dW5zb3J0ZWQgLS1vbmVsaW5lICRsYXN0X3RocmVlID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdyA8Y29tbWl0cz4gbGVhdmVzIGxpc3Qgb2YgY29tbWl0cyBhcyBnaXZlbicgJworCWdpdCBzaG93IC0tb25lbGluZSAtcyAkbGFzdF90aHJlZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY2FzZSBzZW5zaXRpdml0eSB0ZXN0cycgJworCWVjaG8gY2FzZSA+b25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwJyAnCisJZWNobyBzZWNvbmQgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcD1zZWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorc2Vjb25kCitpbml0aWFsCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWludmVydC1ncmVwIC0tZ3JlcCcgJworCSMgRml4ZWQKKwlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0taW52ZXJ0LWdyZXAgLS1ncmVwPXRoIC0tZ3JlcD1TZWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgUE9TSVggYmFzaWMKKwlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0taW52ZXJ0LWdyZXAgLS1ncmVwPXRbaF0gLS1ncmVwPVNbZV1jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFBPU0lYIGV4dGVuZGVkCisJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9YmFzaWMgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWludmVydC1ncmVwIC0tZ3JlcD10W2hdIC0tZ3JlcD1TW2VdYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBQQ1JFCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJdGhlbgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1wZXJsIGxvZyAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1pbnZlcnQtZ3JlcCAtLWdyZXA9dFtoXSAtLWdyZXA9U1tlXWMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0taW52ZXJ0LWdyZXAgLS1ncmVwIC1pJyAnCisJZWNobyBpbml0aWFsID5leHBlY3QgJiYKKworCSMgRml4ZWQKKwlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0taW52ZXJ0LWdyZXAgLWkgLS1ncmVwPXRoIC0tZ3JlcD1TZWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgUE9TSVggYmFzaWMKKwlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0taW52ZXJ0LWdyZXAgLWkgLS1ncmVwPXRbaF0gLS1ncmVwPVNbZV1jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFBPU0lYIGV4dGVuZGVkCisJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWludmVydC1ncmVwIC1pIC0tZ3JlcD10W2hdIC0tZ3JlcD1TW2VdYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBQQ1JFCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJdGhlbgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1wZXJsIGxvZyAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1pbnZlcnQtZ3JlcCAtaSAtLWdyZXA9dFtoXSAtLWdyZXA9U1tlXWMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCBvcHRpb24gcGFyc2luZycgJworCWVjaG8gc2Vjb25kID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWdyZXAgc2VjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1ncmVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtaSAtLWdyZXAnICcKKwllY2hvIFNlY29uZCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLWkgLS1ncmVwPXNlYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwIC1pJyAnCisJZWNobyBTZWNvbmQgPmV4cGVjdCAmJgorCisJIyBGaXhlZAorCWdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcD1zZWMgLWkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgUE9TSVggYmFzaWMKKwlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcD1zW2VdYyAtaSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBQT1NJWCBleHRlbmRlZAorCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkIGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1ncmVwPXNbZV1jIC1pID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFBDUkUKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwl0aGVuCisJCWdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPXBlcmwgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWdyZXA9c1tlXWMgLWkgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1GIC1FIC0tZ3JlcD08ZXJlPiB1c2VzIGVyZScgJworCWVjaG8gc2Vjb25kID5leHBlY3QgJiYKKwkjIGJhc2ljIHdvdWxkIG5lZWQgXChzXCkgdG8gZG8gdGhlIHNhbWUKKwlnaXQgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtRiAtRSAtLWdyZXA9IihzKS5jLm5kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBDUkUgJ2xvZyAtRiAtRSAtLXBlcmwtcmVnZXhwIC0tZ3JlcD08cGNyZT4gdXNlcyBQQ1JFJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbnVtX2NvbW1pdHMiICYmCisJZ2l0IGluaXQgbnVtX2NvbW1pdHMgJiYKKwkoCisJCWNkIG51bV9jb21taXRzICYmCisJCXRlc3RfY29tbWl0IDFkICYmCisJCXRlc3RfY29tbWl0IDJlCisJKSAmJgorCisJIyBJbiBQQ1JFIFxkIGluIFtcZF0gaXMgbGlrZSBzYXlpbmcgIjAtOSIsIGFuZCBtYXRjaGVzIHRoZSAyCisJIyBpbiAyZS4uLgorCWVjaG8gMmUgPmV4cGVjdCAmJgorCWdpdCAtQyBudW1fY29tbWl0cyBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC1GIC1FIC0tcGVybC1yZWdleHAgLS1ncmVwPSJbXGRdIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyAuLi5pbiBQT1NJWCBiYXNpYyBhbmQgZXh0ZW5kZWQgaXQgaXMgdGhlIHNhbWUgYXMgW2RdLAorCSMgaS5lLiAiZCIsIHdoaWNoIG1hdGNoZXMgMWQsIGJ1dCBkb2VzIG5vdCBtYXRjaCAyZS4KKwllY2hvIDFkID5leHBlY3QgJiYKKwlnaXQgLUMgbnVtX2NvbW1pdHMgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtRiAtRSAtLWdyZXA9IltcZF0iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyB3aXRoIGdyZXAucGF0dGVyblR5cGUgY29uZmlndXJhdGlvbicgJworCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwlsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDolcyAtLWdyZXA9cy5jLm5kID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyB3aXRoIGdyZXAucGF0dGVyblR5cGUgY29uZmlndXJhdGlvbiBhbmQgY29tbWFuZCBsaW5lJyAnCisJZWNobyBzZWNvbmQgPmV4cGVjdCAmJgorCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwlsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDolcyAtLWJhc2ljLXJlZ2V4cCAtLWdyZXA9cy5jLm5kID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUZBSUxfUFJFUkVRUyAnbG9nIHdpdGggdmFyaW91cyBncmVwLnBhdHRlcm5UeXBlIGNvbmZpZ3VyYXRpb25zICYgY29tbWFuZC1saW5lcycgJworCWdpdCBpbml0IHBhdHRlcm4tdHlwZSAmJgorCSgKKwkJY2QgcGF0dGVybi10eXBlICYmCisJCXRlc3RfY29tbWl0IDEgZmlsZSBBICYmCisKKwkJIyBUaGUgdGFnbmFtZSBpcyBvdmVycmlkZGVuIGhlcmUgYmVjYXVzZSBjcmVhdGluZyBhCisJCSMgdGFnIGNhbGxlZCAiKDF8MikiIGFzIHRlc3RfY29tbWl0IHdvdWxkIG90aGVyd2lzZQorCQkjIGltcGxpY2l0bHkgZG8gd291bGQgZmFpbCBvbiBlLmcuIE1JTkdXLgorCQl0ZXN0X2NvbW1pdCAiKDF8MikiIGZpbGUgQiAyICYmCisKKwkJZWNobyAiKDF8MikiID5leHBlY3QuZml4ZWQgJiYKKwkJY3AgZXhwZWN0LmZpeGVkIGV4cGVjdC5iYXNpYyAmJgorCQljcCBleHBlY3QuZml4ZWQgZXhwZWN0LmV4dGVuZGVkICYmCisJCWNwIGV4cGVjdC5maXhlZCBleHBlY3QucGVybCAmJgorCisJCSMgQSBzdHJjbXAtbGlrZSBtYXRjaCB3aXRoIGZpeGVkLgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyBcCisJCQktLWdyZXA9IigxfDIpIiA+YWN0dWFsLmZpeGVkICYmCisKKwkJIyBQT1NJWCBiYXNpYyBtYXRjaGVzICgsIHwgYW5kICkgbGl0ZXJhbGx5LgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyBcCisJCQktLWdyZXA9IigufC4pIiA+YWN0dWFsLmJhc2ljICYmCisKKwkJIyBQT1NJWCBleHRlbmRlZCBuZWVkcyB0byBoYXZlIHwgZXNjYXBlZCB0byBtYXRjaCBpdAorCQkjIGxpdGVyYWxseSwgd2hlcmVhcyB1bmRlciBiYXNpYyB0aGlzIGlzIHRoZSBzYW1lIGFzCisJCSMgKHwyKSwgaS5lLiBpdCB3b3VsZCBhbHNvIG1hdGNoICIxIi4gVGhpcyB0ZXN0IGNoZWNrcworCQkjIGZvciBleHRlbmRlZCBieSBhc3NlcnRpbmcgdGhhdCBpdCBpcyBub3QgbWF0Y2hpbmcKKwkJIyB3aGF0IGJhc2ljIHdvdWxkIG1hdGNoLgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyBcCisJCQktLWdyZXA9Ilx8MiIgPmFjdHVhbC5leHRlbmRlZCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwkJdGhlbgorCQkJIyBPbmx5IFBDUkUgd291bGQgbWF0Y2ggW1xkXVx8IHdpdGggb25seQorCQkJIyAiKDF8MikiIGR1ZSB0byBbXGRdLiBQT1NJWCBiYXNpYyB3b3VsZCBtYXRjaAorCQkJIyBib3RoIGl0IGFuZCAiMSIgc2luY2Ugc2ltaWxhcmx5IHRvIHRoZQorCQkJIyBleHRlbmRlZCBtYXRjaCBhYm92ZSBpdCBpcyB0aGUgc2FtZSBhcworCQkJIyBcKFtcZF1cfFwpLiBQT1NJWCBleHRlbmRlZCB3b3VsZAorCQkJIyBtYXRjaCBuZWl0aGVyLgorCQkJZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9cGVybCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyBcCisJCQkJLS1ncmVwPSJbXGRdXHwiID5hY3R1YWwucGVybCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0LnBlcmwgYWN0dWFsLnBlcmwKKwkJZmkgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LmZpeGVkIGFjdHVhbC5maXhlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QuYmFzaWMgYWN0dWFsLmJhc2ljICYmCisJCXRlc3RfY21wIGV4cGVjdC5leHRlbmRlZCBhY3R1YWwuZXh0ZW5kZWQgJiYKKworCQlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgLUYgXAorCQkJLS1ncmVwPSIoMXwyKSIgPmFjdHVhbC5maXhlZC5zaG9ydC1hcmcgJiYKKwkJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIC1FIFwKKwkJCS0tZ3JlcD0iXHwyIiA+YWN0dWFsLmV4dGVuZGVkLnNob3J0LWFyZyAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBDUkUKKwkJdGhlbgorCQkJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiVzIC1QIFwKKwkJCQktLWdyZXA9IltcZF1cfCIgPmFjdHVhbC5wZXJsLnNob3J0LWFyZworCQllbHNlCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC1QIFwKKwkJCQktLWdyZXA9IltcZF1cfCIKKwkJZmkgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LmZpeGVkIGFjdHVhbC5maXhlZC5zaG9ydC1hcmcgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LmV4dGVuZGVkIGFjdHVhbC5leHRlbmRlZC5zaG9ydC1hcmcgJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCXRoZW4KKwkJCXRlc3RfY21wIGV4cGVjdC5wZXJsIGFjdHVhbC5wZXJsLnNob3J0LWFyZworCQlmaSAmJgorCisJCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyAtLWZpeGVkLXN0cmluZ3MgXAorCQkJLS1ncmVwPSIoMXwyKSIgPmFjdHVhbC5maXhlZC5sb25nLWFyZyAmJgorCQlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgLS1iYXNpYy1yZWdleHAgXAorCQkJLS1ncmVwPSIoLnwuKSIgPmFjdHVhbC5iYXNpYy5sb25nLWFyZyAmJgorCQlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgLS1leHRlbmRlZC1yZWdleHAgXAorCQkJLS1ncmVwPSJcfDIiID5hY3R1YWwuZXh0ZW5kZWQubG9uZy1hcmcgJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSBQQ1JFCisJCXRoZW4KKwkJCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyAtLXBlcmwtcmVnZXhwIFwKKwkJCQktLWdyZXA9IltcZF1cfCIgPmFjdHVhbC5wZXJsLmxvbmctYXJnICYmCisJCQl0ZXN0X2NtcCBleHBlY3QucGVybCBhY3R1YWwucGVybC5sb25nLWFyZworCQllbHNlCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0tcGVybC1yZWdleHAgXAorCQkJCS0tZ3JlcD0iW1xkXVx8IgorCQlmaSAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZml4ZWQgYWN0dWFsLmZpeGVkLmxvbmctYXJnICYmCisJCXRlc3RfY21wIGV4cGVjdC5iYXNpYyBhY3R1YWwuYmFzaWMubG9uZy1hcmcgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LmV4dGVuZGVkIGFjdHVhbC5leHRlbmRlZC5sb25nLWFyZworCSkKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCisqIFNlY29uZAorKiBzaXh0aAorKiBmaWZ0aAorKiBmb3VydGgKKyogdGhpcmQKKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgbG9nIC0tZ3JhcGgnICcKKwl0ZXN0X2NtcF9ncmFwaAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKKzEyMyAqIFNlY29uZAorMTIzICogc2l4dGgKKzEyMyAqIGZpZnRoCisxMjMgKiBmb3VydGgKKzEyMyAqIHRoaXJkCisxMjMgKiBzZWNvbmQKKzEyMyAqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgbG9nIC0tZ3JhcGggLS1saW5lLXByZWZpeD0iMTIzICInICcKKwl0ZXN0X2NtcF9ncmFwaCAtLWxpbmUtcHJlZml4PSIxMjMgIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbWVyZ2UgaGlzdG9yeScgJworCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUR+NCAmJgorCXRlc3RfY29tbWl0IHNpZGUtMSAxIDEgJiYKKwl0ZXN0X2NvbW1pdCBzaWRlLTIgMiAyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBzaWRlCisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKKyogICBNZXJnZSBicmFuY2ggJ3NpZGUnCit8XAorfCAqIHNpZGUtMgorfCAqIHNpZGUtMQorKiB8IFNlY29uZAorKiB8IHNpeHRoCisqIHwgZmlmdGgKKyogfCBmb3VydGgKK3wvCisqIHRoaXJkCisqIHNlY29uZAorKiBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBtZXJnZScgJworCXRlc3RfY21wX2dyYXBoIC0tZGF0ZS1vcmRlcgorJworCitjYXQgPiBleHBlY3QgPDxcRU9GCit8IHwgfCAqICAgTWVyZ2UgYnJhbmNoICdzaWRlJworfCB8IHwgfFwKK3wgfCB8IHwgKiBzaWRlLTIKK3wgfCB8IHwgKiBzaWRlLTEKK3wgfCB8ICogfCBTZWNvbmQKK3wgfCB8ICogfCBzaXh0aAorfCB8IHwgKiB8IGZpZnRoCit8IHwgfCAqIHwgZm91cnRoCit8IHwgfCB8LworfCB8IHwgKiB0aGlyZAorfCB8IHwgKiBzZWNvbmQKK3wgfCB8ICogaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIC0tbGluZS1wcmVmaXg9InwgfCB8ICIgd2l0aCBtZXJnZScgJworCXRlc3RfY21wX2dyYXBoIC0tbGluZS1wcmVmaXg9InwgfCB8ICIgLS1kYXRlLW9yZGVyCisnCisKK2NhdCA+IGV4cGVjdC5jb2xvcnMgPDxcRU9GCisqICAgTWVyZ2UgYnJhbmNoICdzaWRlJworPEJMVUU+fDxSRVNFVD48Q1lBTj5cPFJFU0VUPgorPEJMVUU+fDxSRVNFVD4gKiBzaWRlLTIKKzxCTFVFPnw8UkVTRVQ+ICogc2lkZS0xCisqIDxDWUFOPnw8UkVTRVQ+IFNlY29uZAorKiA8Q1lBTj58PFJFU0VUPiBzaXh0aAorKiA8Q1lBTj58PFJFU0VUPiBmaWZ0aAorKiA8Q1lBTj58PFJFU0VUPiBmb3VydGgKKzxDWUFOPnw8UkVTRVQ+PENZQU4+LzxSRVNFVD4KKyogdGhpcmQKKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlIHdpdGggbG9nLmdyYXBoQ29sb3JzJyAnCisJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzICIgYmx1ZSxpbnZhbGlkLWNvbG9yLCBjeWFuLCByZWQgICwgIiAmJgorCWxpYl90ZXN0X2NtcF9jb2xvcmVkX2dyYXBoIC0tZGF0ZS1vcmRlciAtLWZvcm1hdD0lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1yYXcgLS1ncmFwaCAtbSB3aXRoIG1lcmdlJyAnCisJZ2l0IGxvZyAtLXJhdyAtLWdyYXBoIC0tb25lbGluZSAtbSBtYXN0ZXIgfCBoZWFkIC1uIDUwMCA+YWN0dWFsICYmCisJZ3JlcCAiaW5pdGlhbCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtLWdyYXBoJyAnCisJZ2l0IGRpZmYtdHJlZSAtLWdyYXBoIG1hc3Rlcl4gfCBoZWFkIC1uIDUwMCA+YWN0dWFsICYmCisJZ3JlcCAib25lIiBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorKiAgIGNvbW1pdCBtYXN0ZXIKK3xcICBNZXJnZTogQSBCCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3wgfAorfCAqIGNvbW1pdCB0YWdzL3NpZGUtMgorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaWRlLTIKK3wgfAorfCAqIGNvbW1pdCB0YWdzL3NpZGUtMQorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaWRlLTEKK3wgfAorKiB8IGNvbW1pdCBtYXN0ZXJ+MQorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBTZWNvbmQKK3wgfAorKiB8IGNvbW1pdCBtYXN0ZXJ+MgorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaXh0aAorfCB8CisqIHwgY29tbWl0IG1hc3Rlcn4zCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIGZpZnRoCit8IHwKKyogfCBjb21taXQgbWFzdGVyfjQKK3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICAgIGZvdXJ0aAorfAorKiBjb21taXQgdGFncy9zaWRlLTF+MQorfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICB0aGlyZAorfAorKiBjb21taXQgdGFncy9zaWRlLTF+MgorfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICBzZWNvbmQKK3wKKyogY29tbWl0IHRhZ3Mvc2lkZS0xfjMKKyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisgICAgICBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBmdWxsIG91dHB1dCcgJworCWdpdCBsb2cgLS1ncmFwaCAtLWRhdGUtb3JkZXIgLS1wcmV0dHk9c2hvcnQgfAorCQlnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgLS1zdGRpbiB8CisJCXNlZCAicy9NZXJnZTouKi9NZXJnZTogQSBCLztzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1vcmUgdGFuZ2xlZCBoaXN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRhbmdsZSBIRUFEfjYgJiYKKwl0ZXN0X2NvbW1pdCB0YW5nbGUtYSB0YW5nbGUtYSBhICYmCisJZ2l0IG1lcmdlIG1hc3Rlcn4zICYmCisJZ2l0IG1lcmdlIHNpZGV+MSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgdGFuZ2xlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYWNoICYmCisJdGVzdF9jb21taXQgcmVhY2ggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9jdG9wdXMtYSAmJgorCXRlc3RfY29tbWl0IG9jdG9wdXMtYSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb2N0b3B1cy1iICYmCisJdGVzdF9jb21taXQgb2N0b3B1cy1iICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHNldmVudGggJiYKKwlnaXQgbWVyZ2Ugb2N0b3B1cy1hIG9jdG9wdXMtYiAmJgorCWdpdCBtZXJnZSByZWFjaAorJworCitjYXQgPiBleHBlY3QgPDxcRU9GCisqICAgTWVyZ2UgdGFnICdyZWFjaCcKK3xcCit8IFwKK3wgIFwKKyotLiBcICAgTWVyZ2UgdGFncyAnb2N0b3B1cy1hJyBhbmQgJ29jdG9wdXMtYicKK3xcIFwgXAorKiB8IHwgfCBzZXZlbnRoCit8IHwgKiB8IG9jdG9wdXMtYgorfCB8LyAvCit8L3wgfAorfCAqIHwgb2N0b3B1cy1hCit8LyAvCit8ICogcmVhY2gKK3wvCisqICAgTWVyZ2UgYnJhbmNoICd0YW5nbGUnCit8XAorfCAqICAgTWVyZ2UgYnJhbmNoICdzaWRlJyAoZWFybHkgcGFydCkgaW50byB0YW5nbGUKK3wgfFwKK3wgKiBcICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIChlYXJseSBwYXJ0KSBpbnRvIHRhbmdsZQorfCB8XCBcCit8ICogfCB8IHRhbmdsZS1hCisqIHwgfCB8ICAgTWVyZ2UgYnJhbmNoICdzaWRlJworfFwgXCBcIFwKK3wgKiB8IHwgfCBzaWRlLTIKK3wgfCB8X3wvCit8IHwvfCB8Cit8ICogfCB8IHNpZGUtMQorKiB8IHwgfCBTZWNvbmQKKyogfCB8IHwgc2l4dGgKK3wgfF98LworfC98IHwKKyogfCB8IGZpZnRoCisqIHwgfCBmb3VydGgKK3wvIC8KKyogLyB0aGlyZAorfC8KKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlJyAnCisJdGVzdF9jbXBfZ3JhcGggLS1kYXRlLW9yZGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5kZWNvcmF0ZSBjb25maWd1cmF0aW9uJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1uby1kZWNvcmF0ZSA+ZXhwZWN0Lm5vbmUgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlID5leHBlY3Quc2hvcnQgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmV4cGVjdC5mdWxsICYmCisKKwllY2hvICJbbG9nXSBkZWNvcmF0ZSIgPj4uZ2l0L2NvbmZpZyAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsICYmCisKKwl0ZXN0X2NvbmZpZyBsb2cuZGVjb3JhdGUgdHJ1ZSAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZnVsbCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIGxvZy5kZWNvcmF0ZSBubyAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZnVsbCBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIGxvZy5kZWNvcmF0ZSAxICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5mdWxsIGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9bm8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ub25lIGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgbG9nLmRlY29yYXRlIHNob3J0ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLW5vLWRlY29yYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5mdWxsIGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgbG9nLmRlY29yYXRlIGZ1bGwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmZ1bGwgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1uby1kZWNvcmF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5vbmUgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnNob3J0IGFjdHVhbCAmJgorCisJdGVzdF91bmNvbmZpZyBsb2cuZGVjb3JhdGUgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXJhdyA+ZXhwZWN0LnJhdyAmJgorCXRlc3RfY29uZmlnIGxvZy5kZWNvcmF0ZSBmdWxsICYmCisJZ2l0IGxvZyAtLXByZXR0eT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5yYXcgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVjb3JhdGUtcmVmcyB3aXRoIGdsb2InICcKKwljYXQgPmV4cGVjdC5kZWNvcmF0ZSA8PC1cRU9GICYmCisJTWVyZ2UtdGFnLXJlYWNoCisJTWVyZ2UtdGFncy1vY3RvcHVzLWEtYW5kLW9jdG9wdXMtYgorCXNldmVudGgKKwlvY3RvcHVzLWIgKG9jdG9wdXMtYikKKwlvY3RvcHVzLWEgKG9jdG9wdXMtYSkKKwlyZWFjaAorCUVPRgorCWdpdCBsb2cgLW42IC0tZGVjb3JhdGU9c2hvcnQgLS1wcmV0dHk9InRmb3JtYXQ6JWYlZCIgXAorCQktLWRlY29yYXRlLXJlZnM9ImhlYWRzL29jdG9wdXMqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWNvcmF0ZS1yZWZzIHdpdGhvdXQgZ2xvYnMnICcKKwljYXQgPmV4cGVjdC5kZWNvcmF0ZSA8PC1cRU9GICYmCisJTWVyZ2UtdGFnLXJlYWNoCisJTWVyZ2UtdGFncy1vY3RvcHVzLWEtYW5kLW9jdG9wdXMtYgorCXNldmVudGgKKwlvY3RvcHVzLWIKKwlvY3RvcHVzLWEKKwlyZWFjaCAodGFnOiByZWFjaCkKKwlFT0YKKwlnaXQgbG9nIC1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzPSJ0YWdzL3JlYWNoIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBkZWNvcmF0ZS1yZWZzJyAnCisJY2F0ID5leHBlY3QuZGVjb3JhdGUgPDwtXEVPRiAmJgorCU1lcmdlLXRhZy1yZWFjaAorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoCisJb2N0b3B1cy1iIChvY3RvcHVzLWIpCisJb2N0b3B1cy1hIChvY3RvcHVzLWEpCisJcmVhY2ggKHRhZzogcmVhY2gpCisJRU9GCisJZ2l0IGxvZyAtbjYgLS1kZWNvcmF0ZT1zaG9ydCAtLXByZXR0eT0idGZvcm1hdDolZiVkIiBcCisJCS0tZGVjb3JhdGUtcmVmcz0iaGVhZHMvb2N0b3B1cyoiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzPSJ0YWdzL3JlYWNoIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWNvcmF0ZS1yZWZzLWV4Y2x1ZGUgd2l0aCBnbG9iJyAnCisJY2F0ID5leHBlY3QuZGVjb3JhdGUgPDwtXEVPRiAmJgorCU1lcmdlLXRhZy1yZWFjaCAoSEVBRCAtPiBtYXN0ZXIpCisJTWVyZ2UtdGFncy1vY3RvcHVzLWEtYW5kLW9jdG9wdXMtYgorCXNldmVudGggKHRhZzogc2V2ZW50aCkKKwlvY3RvcHVzLWIgKHRhZzogb2N0b3B1cy1iKQorCW9jdG9wdXMtYSAodGFnOiBvY3RvcHVzLWEpCisJcmVhY2ggKHRhZzogcmVhY2gsIHJlYWNoKQorCUVPRgorCWdpdCBsb2cgLW42IC0tZGVjb3JhdGU9c2hvcnQgLS1wcmV0dHk9InRmb3JtYXQ6JWYlZCIgXAorCQktLWRlY29yYXRlLXJlZnMtZXhjbHVkZT0iaGVhZHMvb2N0b3B1cyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGVjb3JhdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlY29yYXRlLXJlZnMtZXhjbHVkZSB3aXRob3V0IGdsb2JzJyAnCisJY2F0ID5leHBlY3QuZGVjb3JhdGUgPDwtXEVPRiAmJgorCU1lcmdlLXRhZy1yZWFjaCAoSEVBRCAtPiBtYXN0ZXIpCisJTWVyZ2UtdGFncy1vY3RvcHVzLWEtYW5kLW9jdG9wdXMtYgorCXNldmVudGggKHRhZzogc2V2ZW50aCkKKwlvY3RvcHVzLWIgKHRhZzogb2N0b3B1cy1iLCBvY3RvcHVzLWIpCisJb2N0b3B1cy1hICh0YWc6IG9jdG9wdXMtYSwgb2N0b3B1cy1hKQorCXJlYWNoIChyZWFjaCkKKwlFT0YKKwlnaXQgbG9nIC1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9InRhZ3MvcmVhY2giID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGVjb3JhdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGRlY29yYXRlLXJlZnMtZXhjbHVkZScgJworCWNhdCA+ZXhwZWN0LmRlY29yYXRlIDw8LVxFT0YgJiYKKwlNZXJnZS10YWctcmVhY2ggKEhFQUQgLT4gbWFzdGVyKQorCU1lcmdlLXRhZ3Mtb2N0b3B1cy1hLWFuZC1vY3RvcHVzLWIKKwlzZXZlbnRoICh0YWc6IHNldmVudGgpCisJb2N0b3B1cy1iICh0YWc6IG9jdG9wdXMtYikKKwlvY3RvcHVzLWEgKHRhZzogb2N0b3B1cy1hKQorCXJlYWNoIChyZWFjaCkKKwlFT0YKKwlnaXQgbG9nIC1uNiAtLWRlY29yYXRlPXNob3J0IC0tcHJldHR5PSJ0Zm9ybWF0OiVmJWQiIFwKKwkJLS1kZWNvcmF0ZS1yZWZzLWV4Y2x1ZGU9ImhlYWRzL29jdG9wdXMqIiBcCisJCS0tZGVjb3JhdGUtcmVmcy1leGNsdWRlPSJ0YWdzL3JlYWNoIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWNvcmF0ZS1yZWZzIGFuZCBkZWNvcmF0ZS1yZWZzLWV4Y2x1ZGUnICcKKwljYXQgPmV4cGVjdC5kZWNvcmF0ZSA8PC1cRU9GICYmCisJTWVyZ2UtdGFnLXJlYWNoIChtYXN0ZXIpCisJTWVyZ2UtdGFncy1vY3RvcHVzLWEtYW5kLW9jdG9wdXMtYgorCXNldmVudGgKKwlvY3RvcHVzLWIKKwlvY3RvcHVzLWEKKwlyZWFjaCAocmVhY2gpCisJRU9GCisJZ2l0IGxvZyAtbjYgLS1kZWNvcmF0ZT1zaG9ydCAtLXByZXR0eT0idGZvcm1hdDolZiVkIiBcCisJCS0tZGVjb3JhdGUtcmVmcz0iaGVhZHMvKiIgXAorCQktLWRlY29yYXRlLXJlZnMtZXhjbHVkZT0iaGVhZHMvb2MqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmRlY29yYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWNvcmF0ZS1yZWZzLWV4Y2x1ZGUgYW5kIHNpbXBsaWZ5LWJ5LWRlY29yYXRpb24nICcKKwljYXQgPmV4cGVjdC5kZWNvcmF0ZSA8PC1cRU9GICYmCisJTWVyZ2UtdGFnLXJlYWNoIChIRUFEIC0+IG1hc3RlcikKKwlyZWFjaCAodGFnOiByZWFjaCwgcmVhY2gpCisJc2V2ZW50aCAodGFnOiBzZXZlbnRoKQorCU1lcmdlLWJyYW5jaC10YW5nbGUKKwlNZXJnZS1icmFuY2gtc2lkZS1lYXJseS1wYXJ0LWludG8tdGFuZ2xlICh0YW5nbGUpCisJdGFuZ2xlLWEgKHRhZzogdGFuZ2xlLWEpCisJRU9GCisJZ2l0IGxvZyAtbjYgLS1kZWNvcmF0ZT1zaG9ydCAtLXByZXR0eT0idGZvcm1hdDolZiVkIiBcCisJCS0tZGVjb3JhdGUtcmVmcy1leGNsdWRlPSIqb2N0b3B1cyoiIFwKKwkJLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGVjb3JhdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5kZWNvcmF0ZSBjb25maWcgcGFyc2luZycgJworCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9ZnVsbCA+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+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tIGJhcl9jb21taXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGFnZ2VkIG1hc3RlciAmJgorCWVjaG8gYmJiID5iYXogJiYKKwlnaXQgYWRkIGJheiAmJgorCWdpdCBjb21taXQgLW0gYmF6X2NvbW1pdCAmJgorCWdpdCB0YWcgLXMgLW0gc2lnbmVkX3RhZ19tc2cgc2lnbmVkX3RhZyAmJgorCWdpdCBjaGVja291dCBwbGFpbiAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC1tIG1zZyBzaWduZWRfdGFnICYmCisJZ2l0IGxvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgLW4xIHBsYWluID5hY3R1YWwgJiYKKwlncmVwICJefFxcXCAgbWVyZ2VkIHRhZyIgYWN0dWFsICYmCisJZ3JlcCAiXnwgfCBncGc6IFNpZ25hdHVyZSBtYWRlIiBhY3R1YWwgJiYKKwlncmVwICJefCB8IGdwZzogR29vZCBzaWduYXR1cmUiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZSBmb3IgbWVyZ2VkIHRhZyBpbiBzaGFsbG93IGNsb25lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBsYWluLXNoYWxsb3cgbWFzdGVyICYmCisJZWNobyBhYWEgPmJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBiYXJfY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIG1hc3RlciAmJgorCWVjaG8gYmJiID5iYXogJiYKKwlnaXQgYWRkIGJheiAmJgorCWdpdCBjb21taXQgLW0gYmF6X2NvbW1pdCAmJgorCWdpdCB0YWcgLXMgLW0gc2lnbmVkX3RhZ19tc2cgc2lnbmVkX3RhZ19zaGFsbG93ICYmCisJaGFzaD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgcGxhaW4tc2hhbGxvdyAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC1tIG1zZyBzaWduZWRfdGFnX3NoYWxsb3cgJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAxIC0tbm8tbG9jYWwgLiBzaGFsbG93ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc2hhbGxvdyIgJiYKKwlnaXQgLUMgc2hhbGxvdyBsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIC1uMSBwbGFpbi1zaGFsbG93ID5hY3R1YWwgJiYKKwlncmVwICJ0YWcgc2lnbmVkX3RhZ19zaGFsbG93IG5hbWVzIGEgbm9uLXBhcmVudCAkaGFzaCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ2xvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgZm9yIG1lcmdlZCB0YWcgeDUwOScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCXRlc3RfY29uZmlnIGdwZy5mb3JtYXQgeDUwOSAmJgorCXRlc3RfY29uZmlnIHVzZXIuc2lnbmluZ2tleSAkR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCWdpdCBjaGVja291dCAtYiBwbGFpbi14NTA5IG1hc3RlciAmJgorCWVjaG8gYWFhID5iYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gYmFyX2NvbW1pdCAmJgorCWdpdCBjaGVja291dCAtYiB0YWdnZWQteDUwOSBtYXN0ZXIgJiYKKwllY2hvIGJiYiA+YmF6ICYmCisJZ2l0IGFkZCBiYXogJiYKKwlnaXQgY29tbWl0IC1tIGJhel9jb21taXQgJiYKKwlnaXQgdGFnIC1zIC1tIHNpZ25lZF90YWdfbXNnIHNpZ25lZF90YWdfeDUwOSAmJgorCWdpdCBjaGVja291dCBwbGFpbi14NTA5ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgLW0gbXNnIHNpZ25lZF90YWdfeDUwOSAmJgorCWdpdCBsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIC1uMSBwbGFpbi14NTA5ID5hY3R1YWwgJiYKKwlncmVwICJefFxcXCAgbWVyZ2VkIHRhZyIgYWN0dWFsICYmCisJZ3JlcCAiXnwgfCBncGdzbTogU2lnbmF0dXJlIG1hZGUiIGFjdHVhbCAmJgorCWdyZXAgIl58IHwgZ3Bnc206IEdvb2Qgc2lnbmF0dXJlIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJy0tbm8tc2hvdy1zaWduYXR1cmUgb3ZlcnJpZGVzIC0tc2hvdy1zaWduYXR1cmUnICcKKwlnaXQgbG9nIC0xIC0tc2hvdy1zaWduYXR1cmUgLS1uby1zaG93LXNpZ25hdHVyZSBzaWduZWQgPmFjdHVhbCAmJgorCSEgZ3JlcCAiXmdwZzoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nLnNob3dzaWduYXR1cmU9dHJ1ZSBiZWhhdmVzIGxpa2UgLS1zaG93LXNpZ25hdHVyZScgJworCXRlc3RfY29uZmlnIGxvZy5zaG93c2lnbmF0dXJlIHRydWUgJiYKKwlnaXQgbG9nIC0xIHNpZ25lZCA+YWN0dWFsICYmCisJZ3JlcCAiZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiZ3BnOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICctLW5vLXNob3ctc2lnbmF0dXJlIG92ZXJyaWRlcyBsb2cuc2hvd3NpZ25hdHVyZT10cnVlJyAnCisJdGVzdF9jb25maWcgbG9nLnNob3dzaWduYXR1cmUgdHJ1ZSAmJgorCWdpdCBsb2cgLTEgLS1uby1zaG93LXNpZ25hdHVyZSBzaWduZWQgPmFjdHVhbCAmJgorCSEgZ3JlcCAiXmdwZzoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnLS1zaG93LXNpZ25hdHVyZSBvdmVycmlkZXMgbG9nLnNob3dzaWduYXR1cmU9ZmFsc2UnICcKKwl0ZXN0X2NvbmZpZyBsb2cuc2hvd3NpZ25hdHVyZSBmYWxzZSAmJgorCWdpdCBsb2cgLTEgLS1zaG93LXNpZ25hdHVyZSBzaWduZWQgPmFjdHVhbCAmJgorCWdyZXAgImdwZzogU2lnbmF0dXJlIG1hZGUiIGFjdHVhbCAmJgorCWdyZXAgImdwZzogR29vZCBzaWduYXR1cmUiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCAtLW5vLXdhbGsgaXMgZm9yYmlkZGVuJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtLWdyYXBoIC0tbm8td2FsaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZGlhZ25vc2VzIGJvZ3VzIEhFQUQnICcKKwlnaXQgaW5pdCBlbXB0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBlbXB0eSBsb2cgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGRvZXMubm90LmhhdmUuYW55LmNvbW1pdHMgc3RkZXJyICYmCisJZWNobyAxMjM0YWJjZCA+ZW1wdHkvLmdpdC9yZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBlbXB0eSBsb2cgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGJyb2tlbiBzdGRlcnIgJiYKKwllY2hvICJyZWY6IHJlZnMvaGVhZHMvaW52YWxpZC5sb2NrIiA+ZW1wdHkvLmdpdC9IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGVtcHR5IGxvZyAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgYnJva2VuIHN0ZGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBlbXB0eSBsb2cgLS1kZWZhdWx0IHRvdGFsbHktYm9ndXMgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGJyb2tlbiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGRvZXMgbm90IGRlZmF1bHQgdG8gSEVBRCB3aGVuIHJldiBpbnB1dCBpcyBnaXZlbicgJworCWdpdCBsb2cgLS1icmFuY2hlcz1kb2VzLW5vdC1leGlzdCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgLS1zb3VyY2UgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gc291cmNlLWEgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc291cmNlLWIgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1zb3VyY2UgcGFpbnRzIGJyYW5jaCBuYW1lcycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovdGhyZWUpCXNvdXJjZS1iIHRocmVlCisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi90d28gICkJc291cmNlLWEgdHdvCisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi9vbmUgICkJc291cmNlLWIgb25lCisJRU9GCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1zb3VyY2Ugc291cmNlLWEgc291cmNlLWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tc291cmNlIHBhaW50cyB0YWcgbmFtZXMnICcKKwlnaXQgdGFnIC1tIHRhZ2dlZCBzb3VyY2UtdGFnICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgOi90aHJlZSkJc291cmNlLXRhZyB0aHJlZQorCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovdHdvICApCXNvdXJjZS1hIHR3bworCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovb25lICApCXNvdXJjZS10YWcgb25lCisJRU9GCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1zb3VyY2Ugc291cmNlLXRhZyBzb3VyY2UtYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1zb3VyY2UgcGFpbnRzIHN5bW1ldHJpYyByYW5nZXMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCA6L3RocmVlKQlzb3VyY2UtYiB0aHJlZQorCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IDovdHdvICApCXNvdXJjZS1hIHR3bworCUVPRgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tc291cmNlIHNvdXJjZS1hLi4uc291cmNlLWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1leGNsdWRlLXByb21pc29yLW9iamVjdHMgZG9lcyBub3QgQlVHLWNyYXNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtLWV4Y2x1ZGUtcHJvbWlzb3Itb2JqZWN0cyBzb3VyY2UtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1lbmQtb2Ytb3B0aW9ucycgJworICAgICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvLS1zb3VyY2UgSEVBRCAmJgorICAgICAgIGdpdCBsb2cgLS1lbmQtb2Ytb3B0aW9ucyAtLXNvdXJjZSA+YWN0dWFsICYmCisgICAgICAgZ2l0IGxvZyA+ZXhwZWN0ICYmCisgICAgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDMtbWFpbG1hcC5zaCBiL3QvdDQyMDMtbWFpbG1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODZjM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMy1tYWlsbWFwLnNoCkBAIC0wLDAgKzEsNTU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLm1haWxtYXAgY29uZmlndXJhdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitmdXp6X2JsYW1lICgpIHsKKwlzZWQgIgorCQlzLyRfeDA1WzAtOWEtZl1bMC05YS1mXVswLTlhLWZdL09CSklEL2cKKwkJcy8kX3gwNVswLTlhLWZdWzAtOWEtZl0vT0JKSS9nCisJCXMvWy0wLTldXHsxMFx9IFs6MC05XVx7OFx9IFstK11bMC05XVx7NFx9L0RBVEUvZworCSIgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljYXQgPmNvbnRhY3RzIDw8LSBFT0YgJiYKKwkkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KKwluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgorCUVPRgorCisJZWNobyBvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyB0d28gPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIm5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiAtbSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCBubyBhcmd1bWVudHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stbWFpbG1hcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIGFyZ3VtZW50cycgJworCWNhdCA+ZXhwZWN0IDw8LSBFT0YgJiYKKwkkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KKwluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgorCUVPRgorCWdpdCBjaGVjay1tYWlsbWFwIFwKKwkJIiRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiIgXAorCQkibmljazEgPGJ1Z3NAY29tcGFueS54eD4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLW1haWxtYXAgLS1zdGRpbicgJworCWNhdCA+ZXhwZWN0IDw8LSBFT0YgJiYKKwkkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KKwluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgorCUVPRgorCWdpdCBjaGVjay1tYWlsbWFwIC0tc3RkaW4gPGNvbnRhY3RzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLW1haWxtYXAgLS1zdGRpbiBhcmd1bWVudHMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJSW50ZXJuYWwgR3V5IDxidWdzQGNvbXBhbnkueHk+CisJRU9GCisJY2F0IDxjb250YWN0cyA+PmV4cGVjdCAmJgorCWdpdCBjaGVjay1tYWlsbWFwIC0tc3RkaW4gIkludGVybmFsIEd1eSA8YnVnc0Bjb21wYW55Lnh5PiIgXAorCQk8Y29udGFjdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCBib2d1cyBjb250YWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLW1haWxtYXAgYm9ndXMKKycKKworY2F0ID5leHBlY3QgPDwgRU9GCiskR0lUX0FVVEhPUl9OQU1FICgxKToKKyAgICAgIGluaXRpYWwKKworbmljazEgKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdObyBtYWlsbWFwJyAnCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCAubWFpbG1hcCcgJworCWVjaG8gIlJlcG8gR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID4gLm1haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFVzaW5nIGEgbWFpbG1hcCBmaWxlIGluIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSByZXBvIGhlcmUsIGJ1dAorIyBjb3VsZCBqdXN0IGFzIHdlbGwgaGF2ZSBiZWVuIGEgZmlsZSBvdXRzaWRlIG9mIHRoZSByZXBvc2l0b3J5CitjYXQgPmV4cGVjdCA8PFxFT0YKK0ludGVybmFsIEd1eSAoMSk6CisgICAgICBzZWNvbmQKKworUmVwbyBHdXkgKDEpOgorICAgICAgaW5pdGlhbAorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuZmlsZSBzZXQnICcKKwlta2RpciAtcCBpbnRlcm5hbF9tYWlsbWFwICYmCisJZWNobyAiSW50ZXJuYWwgR3V5IDxidWdzQGNvbXBhbnkueHg+IiA+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgY29uZmlnIG1haWxtYXAuZmlsZSBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitFeHRlcm5hbCBHdXkgKDEpOgorICAgICAgaW5pdGlhbAorCitJbnRlcm5hbCBHdXkgKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5maWxlIG92ZXJyaWRlJyAnCisJZWNobyAiRXh0ZXJuYWwgR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgY29uZmlnIG1haWxtYXAuZmlsZSBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5maWxlIG5vbi1leGlzdGVudCcgJworCXJtIGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlybWRpciBpbnRlcm5hbF9tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitJbnRlcm5hbCBHdXkgKDEpOgorICAgICAgc2Vjb25kCisKK1JlcG8gR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUgZW50cnkgYWZ0ZXIgZW1haWwgZW50cnknICcKKwlta2RpciAtcCBpbnRlcm5hbF9tYWlsbWFwICYmCisJZWNobyAiPGJ1Z3NAY29tcGFueS54eT4gPGJ1Z3NAY29tcGFueS54eD4iID5pbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiSW50ZXJuYWwgR3V5IDxidWdzQGNvbXBhbnkueHg+IiA+PmludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0ludGVybmFsIEd1eSAoMSk6CisgICAgICBzZWNvbmQKKworUmVwbyBHdXkgKDEpOgorICAgICAgaW5pdGlhbAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFtZSBlbnRyeSBhZnRlciBlbWFpbCBlbnRyeSwgY2FzZS1pbnNlbnNpdGl2ZScgJworCW1rZGlyIC1wIGludGVybmFsX21haWxtYXAgJiYKKwllY2hvICI8YnVnc0Bjb21wYW55Lnh5PiA8YnVnc0Bjb21wYW55Lnh4PiIgPmludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJJbnRlcm5hbCBHdXkgPEJVR1NAQ29tcGFueS54eD4iID4+aW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgorJEdJVF9BVVRIT1JfTkFNRSAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05vIG1haWxtYXAgZmlsZXMsIGJ1dCBjb25maWd1cmVkJyAnCisJcm0gLWYgLm1haWxtYXAgaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1haWxtYXAgYmxvYiB0ZXN0cycgJworCWdpdCBjaGVja291dCAtYiBtYXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJY2F0ID5qdXN0LWJ1Z3MgPDwtIEVPRiAmJgorCUJsb2IgR3V5IDxidWdzQGNvbXBhbnkueHg+CisJRU9GCisJY2F0ID5ib3RoIDw8LSBFT0YgJiYKKwlCbG9iIEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+CisJQmxvYiBHdXkgPGJ1Z3NAY29tcGFueS54eD4KKwlFT0YKKwlwcmludGYgIlRyaWNreSBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPm5vLW5ld2xpbmUgJiYKKwlnaXQgYWRkIGp1c3QtYnVncyBib3RoIG5vLW5ld2xpbmUgJiYKKwlnaXQgY29tbWl0IC1tICJteSBtYWlsbWFwcyIgJiYKKwllY2hvICJSZXBvIEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+Lm1haWxtYXAgJiYKKwllY2hvICJJbnRlcm5hbCBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPmludGVybmFsLm1hcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2Igc2V0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUJsb2IgR3V5ICgxKToKKwkgICAgICBzZWNvbmQKKworCVJlcG8gR3V5ICgxKToKKwkgICAgICBpbml0aWFsCisKKwlFT0YKKwlnaXQgLWMgbWFpbG1hcC5ibG9iPW1hcDpqdXN0LWJ1Z3Mgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2Igb3ZlcnJpZGVzIC5tYWlsbWFwJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUJsb2IgR3V5ICgyKToKKwkgICAgICBpbml0aWFsCisJICAgICAgc2Vjb25kCisKKwlFT0YKKwlnaXQgLWMgbWFpbG1hcC5ibG9iPW1hcDpib3RoIHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5maWxlIG92ZXJyaWRlcyBtYWlsbWFwLmJsb2InICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQmxvYiBHdXkgKDEpOgorCSAgICAgIHNlY29uZAorCisJSW50ZXJuYWwgR3V5ICgxKToKKwkgICAgICBpbml0aWFsCisKKwlFT0YKKwlnaXQgXAorCSAgLWMgbWFpbG1hcC5ibG9iPW1hcDpib3RoIFwKKwkgIC1jIG1haWxtYXAuZmlsZT1pbnRlcm5hbC5tYXAgXAorCSAgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2IgY2FuIGJlIG1pc3NpbmcnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJUmVwbyBHdXkgKDEpOgorCSAgICAgIGluaXRpYWwKKworCW5pY2sxICgxKToKKwkgICAgICBzZWNvbmQKKworCUVPRgorCWdpdCAtYyBtYWlsbWFwLmJsb2I9bWFwOm5vbmV4aXN0ZW50IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIGRlZmF1bHRzIHRvIG9mZiBpbiBub24tYmFyZSByZXBvJyAnCisJZ2l0IGluaXQgbm9uLWJhcmUgJiYKKwkoCisJCWNkIG5vbi1iYXJlICYmCisJCXRlc3RfY29tbWl0IG9uZSAubWFpbG1hcCAiRmFrZSBOYW1lIDwkR0lUX0FVVEhPUl9FTUFJTD4iICYmCisJCWVjaG8gIiAgICAgMQlGYWtlIE5hbWUiID5leHBlY3QgJiYKKwkJZ2l0IHNob3J0bG9nIC1ucyBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlybSAubWFpbG1hcCAmJgorCQllY2hvICIgICAgIDEJJEdJVF9BVVRIT1JfTkFNRSIgPmV4cGVjdCAmJgorCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2IgZGVmYXVsdHMgdG8gSEVBRDoubWFpbG1hcCBpbiBiYXJlIHJlcG8nICcKKwlnaXQgY2xvbmUgLS1iYXJlIG5vbi1iYXJlIGJhcmUgJiYKKwkoCisJCWNkIGJhcmUgJiYKKwkJZWNobyAiICAgICAxCUZha2UgTmFtZSIgPmV4cGVjdCAmJgorCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2IgY2FuIGhhbmRsZSBibG9icyB3aXRob3V0IHRyYWlsaW5nIG5ld2xpbmUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJVHJpY2t5IEd1eSAoMSk6CisJICAgICAgaW5pdGlhbAorCisJbmljazEgKDEpOgorCSAgICAgIHNlY29uZAorCisJRU9GCisJZ2l0IC1jIG1haWxtYXAuYmxvYj1tYXA6bm8tbmV3bGluZSBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWZ0ZXIgbWFpbG1hcC5ibG9iIHRlc3RzJyAnCisJcm0gLWYgLm1haWxtYXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWNoYXJhY3RlciBuYW1lJyAnCisJZWNobyAiICAgICAxCUEgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPmV4cGVjdCAmJgorCWVjaG8gIiAgICAgMQluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPj5leHBlY3QgJiYKKwllY2hvICJBIDwkR0lUX0FVVEhPUl9FTUFJTD4iID4ubWFpbG1hcCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLm1haWxtYXAiICYmCisJZ2l0IHNob3J0bG9nIC1lcyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXNlcnZlIGNhbm9uaWNhbCBlbWFpbCBjYXNlJyAnCisJZWNobyAiICAgICAxCSRHSVRfQVVUSE9SX05BTUUgPEFVVEhPUkBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+ZXhwZWN0ICYmCisJZWNobyAiPEFVVEhPUkBleGFtcGxlLmNvbT4gPCRHSVRfQVVUSE9SX0VNQUlMPiIgPi5tYWlsbWFwICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAubWFpbG1hcCIgJiYKKwlnaXQgc2hvcnRsb2cgLWVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBFeHRlbmRlZCBtYWlsbWFwIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBnaXZlIHVzIHRoZSBmb2xsb3dpbmcgb3V0cHV0IGZvciBzaG9ydGxvZworY2F0ID5leHBlY3QgPDwgRU9GCiskR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gKDEpOgorICAgICAgaW5pdGlhbAorCitDVE8gPGN0b0Bjb21wYW55Lnh4PiAoMSk6CisgICAgICBzZXZlbnRoCisKK090aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAoMik6CisgICAgICB0aGlyZAorICAgICAgZm91cnRoCisKK1NhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+ICgyKToKKyAgICAgIGZpZnRoCisgICAgICBzaXh0aAorCitTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4gKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTaG9ydGxvZyBvdXRwdXQgKGNvbXBsZXggbWFwcGluZyknICcKKwllY2hvIHRocmVlID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PiIgLW0gdGhpcmQgJiYKKworCWVjaG8gZm91ciA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAibmljazIgPG5pY2syQGNvbXBhbnkueHg+IiAtbSBmb3VydGggJiYKKworCWVjaG8gZml2ZSA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAic2FudGEgPG1lQGNvbXBhbnkueHg+IiAtbSBmaWZ0aCAmJgorCisJZWNobyBzaXggPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgImNsYXVzIDxtZUBjb21wYW55Lnh4PiIgLW0gc2l4dGggJiYKKworCWVjaG8gc2V2ZW4gPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIkNUTyA8Y3RvQGNvb21wYW55Lnh4PiIgLW0gc2V2ZW50aCAmJgorCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIkNvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+IiA+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICI8Y3RvQGNvbXBhbnkueHg+ICAgICAgICAgICAgICAgICAgICAgICA8Y3RvQGNvb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIlNvbWUgRHVkZSA8c29tZUBkdWRlLnh4PiAgICAgICAgIG5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+ICAgbmljazIgPGJ1Z3NAY29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICAgICAgICA8bmljazJAY29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PiA8bWVAY29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PiA8bWVAY29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKworCWdpdCBzaG9ydGxvZyAtZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKworIyBnaXQgbG9nIHdpdGggLS1wcmV0dHkgZm9ybWF0IHdoaWNoIHVzZXMgdGhlIG5hbWUgYW5kIGVtYWlsIG1haWxtYXAgcGxhY2VtYXJrZXJzCitjYXQgPmV4cGVjdCA8PCBFT0YKK0F1dGhvciBDVE8gPGN0b0Bjb29tcGFueS54eD4gbWFwcyB0byBDVE8gPGN0b0Bjb21wYW55Lnh4PgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisKK0F1dGhvciBjbGF1cyA8bWVAY29tcGFueS54eD4gbWFwcyB0byBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisKK0F1dGhvciBzYW50YSA8bWVAY29tcGFueS54eD4gbWFwcyB0byBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisKK0F1dGhvciBuaWNrMiA8bmljazJAY29tcGFueS54eD4gbWFwcyB0byBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCitBdXRob3IgbmljazIgPGJ1Z3NAY29tcGFueS54eD4gbWFwcyB0byBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCitBdXRob3IgbmljazEgPGJ1Z3NAY29tcGFueS54eD4gbWFwcyB0byBTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCitBdXRob3IgJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IG1hcHMgdG8gJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMb2cgb3V0cHV0IChjb21wbGV4IG1hcHBpbmcpJyAnCisJZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6IkF1dGhvciAlYW4gPCVhZT4gbWFwcyB0byAlYU4gPCVhRT4lbkNvbW1pdHRlciAlY24gPCVjZT4gbWFwcyB0byAlY04gPCVjRT4lbiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwgRU9GCitBdXRob3IgZW1haWwgY3RvQGNvb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IGN0bworQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIG1lQGNvbXBhbnkueHggaGFzIGxvY2FsLXBhcnQgbWUKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBtZUBjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IG1lCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgbmljazJAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBuaWNrMgorQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIGJ1Z3NAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBidWdzCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgYnVnc0Bjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IGJ1Z3MKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBhdXRob3JAZXhhbXBsZS5jb20gaGFzIGxvY2FsLXBhcnQgYXV0aG9yCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xvZyBvdXRwdXQgKGxvY2FsLXBhcnQgZW1haWwgYWRkcmVzcyknICcKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiQXV0aG9yIGVtYWlsICVhZSBoYXMgbG9jYWwtcGFydCAlYWwlbkNvbW1pdHRlciBlbWFpbCAlY2UgaGFzIGxvY2FsLXBhcnQgJWNsJW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgorQXV0aG9yOiBDVE8gPGN0b0Bjb21wYW55Lnh4PgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KK0F1dGhvcjogT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitBdXRob3I6IFNvbWUgRHVkZSA8c29tZUBkdWRlLnh4PgorQXV0aG9yOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMb2cgb3V0cHV0IHdpdGggLS11c2UtbWFpbG1hcCcgJworCWdpdCBsb2cgLS11c2UtbWFpbG1hcCB8IGdyZXAgQXV0aG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgorQXV0aG9yOiBDVE8gPGN0b0Bjb21wYW55Lnh4PgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KK0F1dGhvcjogT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitBdXRob3I6IFNvbWUgRHVkZSA8c29tZUBkdWRlLnh4PgorQXV0aG9yOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMb2cgb3V0cHV0IHdpdGggbG9nLm1haWxtYXAnICcKKwlnaXQgLWMgbG9nLm1haWxtYXA9VHJ1ZSBsb2cgfCBncmVwIEF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cubWFpbG1hcD1mYWxzZSBkaXNhYmxlcyBtYWlsbWFwJyAnCisJY2F0ID5leHBlY3QgPDwtIEVPRiAmJgorCUF1dGhvcjogQ1RPIDxjdG9AY29vbXBhbnkueHg+CisJQXV0aG9yOiBjbGF1cyA8bWVAY29tcGFueS54eD4KKwlBdXRob3I6IHNhbnRhIDxtZUBjb21wYW55Lnh4PgorCUF1dGhvcjogbmljazIgPG5pY2syQGNvbXBhbnkueHg+CisJQXV0aG9yOiBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PgorCUF1dGhvcjogbmljazEgPGJ1Z3NAY29tcGFueS54eD4KKwlBdXRob3I6ICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgorCUVPRgorCWdpdCAtYyBsb2cubWFpbG1hcD1GYWxzZSBsb2cgfCBncmVwIEF1dGhvciA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby11c2UtbWFpbG1hcCBkaXNhYmxlcyBtYWlsbWFwJyAnCisJY2F0ID5leHBlY3QgPDwtIEVPRiAmJgorCUF1dGhvcjogQ1RPIDxjdG9AY29vbXBhbnkueHg+CisJQXV0aG9yOiBjbGF1cyA8bWVAY29tcGFueS54eD4KKwlBdXRob3I6IHNhbnRhIDxtZUBjb21wYW55Lnh4PgorCUF1dGhvcjogbmljazIgPG5pY2syQGNvbXBhbnkueHg+CisJQXV0aG9yOiBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PgorCUF1dGhvcjogbmljazEgPGJ1Z3NAY29tcGFueS54eD4KKwlBdXRob3I6ICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLS1uby11c2UtbWFpbG1hcCB8IGdyZXAgQXV0aG9yID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0F1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0F1dGhvcjogU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHcmVwIGF1dGhvciB3aXRoIC0tdXNlLW1haWxtYXAnICcKKwlnaXQgbG9nIC0tdXNlLW1haWxtYXAgLS1hdXRob3IgU2FudGEgfCBncmVwIEF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworY2F0ID5leHBlY3QgPDxcRU9GCitBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR3JlcCBhdXRob3Igd2l0aCBsb2cubWFpbG1hcCcgJworCWdpdCAtYyBsb2cubWFpbG1hcD1UcnVlIGxvZyAtLWF1dGhvciBTYW50YSB8IGdyZXAgQXV0aG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5tYWlsbWFwIGlzIHRydWUgYnkgZGVmYXVsdCB0aGVzZSBkYXlzJyAnCisJZ2l0IGxvZyAtLWF1dGhvciBTYW50YSB8IGdyZXAgQXV0aG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09ubHkgZ3JlcCByZXBsYWNlZCBhdXRob3Igd2l0aCAtLXVzZS1tYWlsbWFwJyAnCisJZ2l0IGxvZyAtLXVzZS1tYWlsbWFwIC0tYXV0aG9yICI8Y3RvQGNvb21wYW55Lnh4PiIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKworIyBnaXQgYmxhbWUKK2NhdCA+ZXhwZWN0IDw8RU9GCiteT0JKSSAoJEdJVF9BVVRIT1JfTkFNRSAgICAgREFURSAxKSBvbmUKK09CSklEIChTb21lIER1ZGUgICAgREFURSAyKSB0d28KK09CSklEIChPdGhlciBBdXRob3IgREFURSAzKSB0aHJlZQorT0JKSUQgKE90aGVyIEF1dGhvciBEQVRFIDQpIGZvdXIKK09CSklEIChTYW50YSBDbGF1cyAgREFURSA1KSBmaXZlCitPQkpJRCAoU2FudGEgQ2xhdXMgIERBVEUgNikgc2l4CitPQkpJRCAoQ1RPICAgICAgICAgIERBVEUgNykgc2V2ZW4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQmxhbWUgb3V0cHV0IChjb21wbGV4IG1hcHBpbmcpJyAnCisJZ2l0IGJsYW1lIG9uZSA+YWN0dWFsICYmCisJZnV6el9ibGFtZSBhY3R1YWwgPmFjdHVhbC5mdXp6ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5mdXp6CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tYXV0aG9yIGhvbm9ycyBtYWlsbWFwJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWF1dGhvciAibmljayIgLS1hbGxvdy1lbXB0eSAtbWVpZ2h0ICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiU29tZSBEdWRlIiAtLWFsbG93LWVtcHR5IC1tZWlnaHQgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT1mb3JtYXQ6IiVhbiA8JWFlPiVuIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDQtcGF0Y2gtaWQuc2ggYi90L3Q0MjA0LXBhdGNoLWlkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmZjhiZDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA0LXBhdGNoLWlkLnNoCkBAIC0wLDAgKzEsMTk2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHBhdGNoLWlkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlhcz0iYSBhIGEgYSBhIGEgYSBhIiAmJiAjIGVpZ2h0IGEKKwl0ZXN0X3dyaXRlX2xpbmVzICRhcyA+Zm9vICYmCisJdGVzdF93cml0ZV9saW5lcyAkYXMgPmJhciAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLWEgLW0gaW5pdGlhbCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgJGFzIGIgPmZvbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgJGFzIGIgPmJhciAmJgorCWdpdCBjb21taXQgLWEgLW0gZmlyc3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2FtZSBtYXN0ZXIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gc2FtZS1tc2cgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm90c2FtZSBtYXN0ZXIgJiYKKwllY2hvIGMgPmZvbyAmJgorCWVjaG8gYyA+YmFyICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1hIC1tIG5vdHNhbWUtbXNnICYmCisJdGVzdF93cml0ZV9saW5lcyBiYXIgZm9vID5iYXItdGhlbi1mb28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGZvbyBiYXIgPmZvby10aGVuLWJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaC1pZCBvdXRwdXQgaXMgd2VsbC1mb3JtZWQnICcKKwlnaXQgbG9nIC1wIC0xIHwgZ2l0IHBhdGNoLWlkID5vdXRwdXQgJiYKKwlncmVwICJeJE9JRF9SRUdFWCAkKGdpdCByZXYtcGFyc2UgSEVBRCkkIiBvdXRwdXQKKycKKworI2NhbGN1bGF0ZSBwYXRjaCBpZC4gTWFrZSBzdXJlIG91dHB1dCBpcyBub3QgZW1wdHkuCitjYWxjX3BhdGNoX2lkICgpIHsKKwlwYXRjaF9uYW1lPSIkMSIKKwlzaGlmdAorCWdpdCBwYXRjaC1pZCAiJEAiIHwKKwlzZWQgInMvIC4qLy8iID5wYXRjaC1pZF8iJHBhdGNoX25hbWUiICYmCisJdGVzdF9saW5lX2NvdW50IC1ndCAwIHBhdGNoLWlkXyIkcGF0Y2hfbmFtZSIKK30KKworZ2V0X3RvcF9kaWZmICgpIHsKKwlnaXQgbG9nIC1wIC0xICIkQCIgLU8gYmFyLXRoZW4tZm9vIC0tCit9CisKK2dldF9wYXRjaF9pZCAoKSB7CisJZ2V0X3RvcF9kaWZmICIkMSIgfCBjYWxjX3BhdGNoX2lkICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgZGV0ZWN0cyBlcXVhbGl0eScgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnZXRfcGF0Y2hfaWQgc2FtZSAmJgorCXRlc3RfY21wIHBhdGNoLWlkX21hc3RlciBwYXRjaC1pZF9zYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIGRldGVjdHMgaW5lcXVhbGl0eScgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnZXRfcGF0Y2hfaWQgbm90c2FtZSAmJgorCSEgdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX25vdHNhbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgc3VwcG9ydHMgZ2l0LWZvcm1hdC1wYXRjaCBvdXRwdXQnICcKKwlnZXRfcGF0Y2hfaWQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IHNhbWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IHwgY2FsY19wYXRjaF9pZCBzYW1lICYmCisJdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX3NhbWUgJiYKKwlzZXQgJChnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IHwgZ2l0IHBhdGNoLWlkKSAmJgorCXRlc3QgIiQyIiA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlIGlzIGlycmVsZXZhbnQgaW4gZm9vdGVyJyAnCisJZ2V0X3BhdGNoX2lkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBzYW1lICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCB8IHNlZCAicy8gXCQvLyIgfCBjYWxjX3BhdGNoX2lkIHNhbWUgJiYKKwl0ZXN0X2NtcCBwYXRjaC1pZF9tYXN0ZXIgcGF0Y2gtaWRfc2FtZQorJworCitjbXBfcGF0Y2hfaWQgKCkgeworCWlmCisJCXRlc3QgIiQxIiA9ICJyZWxldmFudCIKKwl0aGVuCisJCSEgdGVzdF9jbXAgcGF0Y2gtaWRfIiQyIiBwYXRjaC1pZF8iJDMiCisJZWxzZQorCQl0ZXN0X2NtcCBwYXRjaC1pZF8iJDIiIHBhdGNoLWlkXyIkMyIKKwlmaQorfQorCit0ZXN0X3BhdGNoX2lkX2ZpbGVfb3JkZXIgKCkgeworCXJlbGV2YW50PSIkMSIKKwlzaGlmdAorCW5hbWU9Im9yZGVyLSR7MX0tJHJlbGV2YW50IgorCXNoaWZ0CisJZ2V0X3RvcF9kaWZmICJtYXN0ZXIiIHwgY2FsY19wYXRjaF9pZCAiJG5hbWUiICIkQCIgJiYKKwlnaXQgY2hlY2tvdXQgc2FtZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLU8gZm9vLXRoZW4tYmFyIHwKKwkJY2FsY19wYXRjaF9pZCAib3JkZXJlZC0kbmFtZSIgIiRAIiAmJgorCWNtcF9wYXRjaF9pZCAkcmVsZXZhbnQgIiRuYW1lIiAib3JkZXJlZC0kbmFtZSIKKworfQorCisjIGNvbWJpbmVkIHRlc3QgZm9yIG9wdGlvbnM6IGFkZCBtb3JlIHRlc3RzIGhlcmUgdG8gbWFrZSB0aGVtCisjIHJ1biB3aXRoIGFsbCBvcHRpb25zCit0ZXN0X3BhdGNoX2lkICgpIHsKKwl0ZXN0X3BhdGNoX2lkX2ZpbGVfb3JkZXIgIiRAIgorfQorCisjIHNtYWxsIHRlc3RzIHdpdGggZGV0YWlsZWQgZGlhZ25vc3RpYyBmb3IgYmFzaWMgb3B0aW9ucy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgb3JkZXIgaXMgaXJyZWxldmFudCB3aXRoIC0tc3RhYmxlJyAnCisJdGVzdF9wYXRjaF9pZF9maWxlX29yZGVyIGlycmVsZXZhbnQgLS1zdGFibGUgLS1zdGFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBvcmRlciBpcyByZWxldmFudCB3aXRoIC0tdW5zdGFibGUnICcKKwl0ZXN0X3BhdGNoX2lkX2ZpbGVfb3JkZXIgcmVsZXZhbnQgLS11bnN0YWJsZSAtLXVuc3RhYmxlCisnCisKKyNOb3cgdGVzdCB2YXJpb3VzIG9wdGlvbiBjb21iaW5hdGlvbnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IGlzIHVuc3RhYmxlJyAnCisJdGVzdF9wYXRjaF9pZCByZWxldmFudCBkZWZhdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoaWQuc3RhYmxlID0gdHJ1ZSBpcyBzdGFibGUnICcKKwl0ZXN0X2NvbmZpZyBwYXRjaGlkLnN0YWJsZSB0cnVlICYmCisJdGVzdF9wYXRjaF9pZCBpcnJlbGV2YW50IHBhdGNoaWQuc3RhYmxlPXRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2hpZC5zdGFibGUgPSBmYWxzZSBpcyB1bnN0YWJsZScgJworCXRlc3RfY29uZmlnIHBhdGNoaWQuc3RhYmxlIGZhbHNlICYmCisJdGVzdF9wYXRjaF9pZCByZWxldmFudCBwYXRjaGlkLnN0YWJsZT1mYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVuc3RhYmxlIG92ZXJyaWRlcyBwYXRjaGlkLnN0YWJsZSA9IHRydWUnICcKKwl0ZXN0X2NvbmZpZyBwYXRjaGlkLnN0YWJsZSB0cnVlICYmCisJdGVzdF9wYXRjaF9pZCByZWxldmFudCBwYXRjaGlkLnN0YWJsZT10cnVlLS11bnN0YWJsZSAtLXVuc3RhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhYmxlIG92ZXJyaWRlcyBwYXRjaGlkLnN0YWJsZSA9IGZhbHNlJyAnCisJdGVzdF9jb25maWcgcGF0Y2hpZC5zdGFibGUgZmFsc2UgJiYKKwl0ZXN0X3BhdGNoX2lkIGlycmVsZXZhbnQgcGF0Y2hpZC5zdGFibGU9ZmFsc2UtLXN0YWJsZSAtLXN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaC1pZCBzdXBwb3J0cyBnaXQtZm9ybWF0LXBhdGNoIE1JTUUgb3V0cHV0JyAnCisJZ2V0X3BhdGNoX2lkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBzYW1lICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLWF0dGFjaCAtLXN0ZG91dCB8IGNhbGNfcGF0Y2hfaWQgc2FtZSAmJgorCXRlc3RfY21wIHBhdGNoLWlkX21hc3RlciBwYXRjaC1pZF9zYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIHJlc3BlY3RzIGNvbmZpZyBmcm9tIHN1YmRpcicgJworCXRlc3RfY29uZmlnIHBhdGNoaWQuc3RhYmxlIHRydWUgJiYKKwlta2RpciBzdWJkaXIgJiYKKworCSMgY29weSB0aGVzZSBiZWNhdXNlIHRlc3RfcGF0Y2hfaWQoKSBsb29rcyBmb3IgdGhlbSBpbgorCSMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJY3AgYmFyLXRoZW4tZm9vIGZvby10aGVuLWJhciBzdWJkaXIgJiYKKworCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfcGF0Y2hfaWQgaXJyZWxldmFudCBwYXRjaGlkLnN0YWJsZT10cnVlCisJKQorJworCitjYXQgPm5vbmwgPDxcRU9GCitkaWZmIC0tZ2l0IGkvYSB3L2EKK2luZGV4IGU2OWRlMjkuLjJlNjVlZmUgMTAwNjQ0CistLS0gaS9hCisrKysgdy9hCitAQCAtMCwwICsxIEBACisrYQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGkvYiB3L2IKK2luZGV4IGU2OWRlMjkuLjYxNzgwNzkgMTAwNjQ0CistLS0gaS9iCisrKysgdy9iCitAQCAtMCwwICsxIEBACisrYgorRU9GCisKK2NhdCA+d2l0aG5sIDw8XEVPRgorZGlmZiAtLWdpdCBpL2Egdy9hCitpbmRleCBlNjlkZTI5Li43ODk4MTkyIDEwMDY0NAorLS0tIGkvYQorKysrIHcvYQorQEAgLTAsMCArMSBAQAorK2EKK2RpZmYgLS1naXQgaS9iIHcvYgoraW5kZXggZTY5ZGUyOS4uNjE3ODA3OSAxMDA2NDQKKy0tLSBpL2IKKysrKyB3L2IKK0BAIC0wLDAgKzEgQEAKKytiCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgaGFuZGxlcyBuby1ubC1hdC1lb2YgbWFya2VycycgJworCWNhdCBub25sIHwgY2FsY19wYXRjaF9pZCBub25sICYmCisJY2F0IHdpdGhubCB8IGNhbGNfcGF0Y2hfaWQgd2l0aG5sICYmCisJdGVzdF9jbXAgcGF0Y2gtaWRfbm9ubCBwYXRjaC1pZF93aXRobmwKKycKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2ggYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMDRjMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2gKQEAgLTAsMCArMSw4NzAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAsIFdpbGwgUGFsbWVyCisjIENvcHlyaWdodCAoYykgMjAxMSwgQWxleGV5IFNodW1raW4gKCsgbm9uLVVURi04IGNvbW1pdCBlbmNvZGluZyB0ZXN0cykKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBwcmV0dHkgZm9ybWF0cycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3RlZCBub24tVVRGLTggZW5jb2RpbmcKK3Rlc3RfZW5jb2Rpbmc9IklTTzg4NTktMSIKKworc2FtcGxlX3V0ZjhfcGFydD0kKHByaW50ZiAiZlwzMDNcMjQ0bmciKQorCitjb21taXRfbXNnICgpIHsKKwkjIFN0cmluZyAiaW5pdGlhbC4gaW5pdGlhbCIgcGFydGx5IGluIEdlcm1hbgorCSMgKHRyYW5zbGF0ZWQgd2l0aCBHb29nbGUgVHJhbnNsYXRlKSwKKwkjIGVuY29kZWQgaW4gVVRGLTgsIHVzZWQgYXMgYSBjb21taXQgbG9nIG1lc3NhZ2UgYmVsb3cuCisJbXNnPSJpbml0aWFsLiBhbiR7c2FtcGxlX3V0ZjhfcGFydH1saWNoXG4iCisJaWYgdGVzdCAtbiAiJDEiCisJdGhlbgorCQlwcmludGYgIiRtc2ciIHwgaWNvbnYgLWYgdXRmLTggLXQgIiQxIgorCWVsc2UKKwkJcHJpbnRmICIkbXNnIgorCWZpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBiYXNpYyByZXBvcycgJworCT5mb28gJiYKKwk+YmFyICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0RW5jb2RpbmcgJHRlc3RfZW5jb2RpbmcgJiYKKwljb21taXRfbXNnICR0ZXN0X2VuY29kaW5nIHwgZ2l0IGNvbW1pdCAtRiAtICYmCisJZ2l0IGFkZCBiYXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYmFyIiAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdEVuY29kaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIGJ1aWx0aW4gZm9ybWF0JyAnCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgcHJldHR5LnRlc3QtYWxpYXMgb25lbGluZSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGVzdC1hbGlhcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIG1hc2tpbmcgYnVpbHRpbiBmb3JtYXQnICcKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkub25lbGluZSAiJUgiICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgdXNlci1kZWZpbmVkIGZvcm1hdCcgJworCWdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolaCIgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1hbGlhcyAiZm9ybWF0OiVoIiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGVzdC1hbGlhcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIHVzZXItZGVmaW5lZCB0Zm9ybWF0IHdpdGggJXMgKElTTzg4NTktMSBlbmNvZGluZyknICcKKwlnaXQgY29uZmlnIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcgJHRlc3RfZW5jb2RpbmcgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+ZXhwZWN0ZWQtcyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJXMiID5hY3R1YWwtcyAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmxvZ091dHB1dEVuY29kaW5nICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtcyBhY3R1YWwtcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyB1c2VyLWRlZmluZWQgdGZvcm1hdCB3aXRoICVzICh1dGYtOCBlbmNvZGluZyknICcKKwlnaXQgbG9nIC0tb25lbGluZSA+ZXhwZWN0ZWQtcyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJXMiID5hY3R1YWwtcyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXMgYWN0dWFsLXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgdXNlci1kZWZpbmVkIHRmb3JtYXQnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWFsaWFzICJ0Zm9ybWF0OiVoIiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGVzdC1hbGlhcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIG5vbi1leGlzdGVudCBmb3JtYXQnICcKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWFsaWFzIGZvcm1hdC10aGF0LXdpbGwtbmV2ZXItZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0tcHJldHR5PXRlc3QtYWxpYXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgb2YgYW4gYWxpYXMnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWZvbyAidGZvcm1hdDolaCIgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWJhciB0ZXN0LWZvbyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGVzdC1iYXIgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgbWFza2luZyBhbiBhbGlhcycgJworCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiJUd28gJUgiID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgcHJldHR5LmR1cGxpY2F0ZSAiZm9ybWF0Ok9uZSAlSCIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHByZXR0eS5kdXBsaWNhdGUgImZvcm1hdDpUd28gJUgiICYmCisJZ2l0IGxvZyAtLXByZXR0eT1kdXBsaWNhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyBsb29wJyAnCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1mb28gdGVzdC1iYXIgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWJhciB0ZXN0LWZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS1wcmV0dHk9dGVzdC1mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIHNlcGFyYXRpb24nICcKKwlwcmludGYgImFkZCBiYXJcMCQoY29tbWl0X21zZykiID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLXogLS1wcmV0dHk9ImZvcm1hdDolcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgdGVybWluYXRpb24nICcKKwlwcmludGYgImFkZCBiYXJcMCQoY29tbWl0X21zZylcMCIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAteiAtLXByZXR0eT0idGZvcm1hdDolcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgc2VwYXJhdGlvbiB3aXRoIC0tc3RhdCcgJworCXN0YXQwX3BhcnQ9JChnaXQgZGlmZiAtLXN0YXQgSEVBRF4gSEVBRCkgJiYKKwlzdGF0MV9wYXJ0PSQoZ2l0IGRpZmYtdHJlZSAtLW5vLWNvbW1pdC1pZCAtLXN0YXQgLS1yb290IEhFQUReKSAmJgorCXByaW50ZiAiYWRkIGJhclxuJHN0YXQwX3BhcnRcblwwJChjb21taXRfbXNnKVxuJHN0YXQxX3BhcnRcbiIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAteiAtLXN0YXQgLS1wcmV0dHk9ImZvcm1hdDolcyIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBDX0xPQ0FMRV9PVVRQVVQgJ05VTCB0ZXJtaW5hdGlvbiB3aXRoIC0tc3RhdCcgJworCXN0YXQwX3BhcnQ9JChnaXQgZGlmZiAtLXN0YXQgSEVBRF4gSEVBRCkgJiYKKwlzdGF0MV9wYXJ0PSQoZ2l0IGRpZmYtdHJlZSAtLW5vLWNvbW1pdC1pZCAtLXN0YXQgLS1yb290IEhFQUReKSAmJgorCXByaW50ZiAiYWRkIGJhclxuJHN0YXQwX3BhcnRcblwwJChjb21taXRfbXNnKVxuJHN0YXQxX3BhcnRcbjAiID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLXogLS1zdGF0IC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2ZvciBwIGluIHNob3J0IG1lZGl1bSBmdWxsIGZ1bGxlciBlbWFpbCByYXcKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiTlVMIHRlcm1pbmF0aW9uIHdpdGggLS1yZWZsb2cgLS1wcmV0dHk9JHAiICcKKwkJcmV2cz0iJChnaXQgcmV2LWxpc3QgLS1yZWZsb2cpIiAmJgorCQlmb3IgciBpbiAkcmV2cworCQlkbworCQkJZ2l0IHNob3cgLXMgIiRyIiAtLXByZXR0eT0iJHAiICYmCisJCQlwcmludGYgIlwwIiB8fCByZXR1cm4gMQorCQlkb25lID5leHBlY3QgJiYKKwkJeworCQkJZ2l0IGxvZyAteiAtLXJlZmxvZyAtLXByZXR0eT0iJHAiICYmCisJCQlwcmludGYgIlwwIgorCQl9ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIHRlcm1pbmF0aW9uIHdpdGggLS1yZWZsb2cgLS1wcmV0dHk9b25lbGluZScgJworCXJldnM9IiQoZ2l0IHJldi1saXN0IC0tcmVmbG9nKSIgJiYKKwlmb3IgciBpbiAkcmV2cworCWRvCisJCWdpdCBzaG93IC1zIC0tcHJldHR5PW9uZWxpbmUgIiRyIiA+cmF3ICYmCisJCWNhdCByYXcgfCBsZl90b19udWwgfHwgZXhpdCAxCisJZG9uZSA+ZXhwZWN0ICYmCisJIyB0aGUgdHJhaWxpbmcgTlVMIGlzIGFscmVhZHkgcHJvZHVjZWQgc28gd2UgZG8gbm90IG5lZWQgdG8KKwkjIG91dHB1dCBhbm90aGVyIG9uZQorCWdpdCBsb2cgLXogLS1wcmV0dHk9b25lbGluZSAtLXJlZmxvZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtb3JlIGNvbW1pdHMnICcKKwl0ZXN0X2NvbW1pdCAibWVzc2FnZSBvbmUiIG9uZSBvbmUgbWVzc2FnZS1vbmUgJiYKKwl0ZXN0X2NvbW1pdCAibWVzc2FnZSB0d28iIHR3byB0d28gbWVzc2FnZS10d28gJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCBIRUFEfjApICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgSEVBRH4xKSAmJgorCWhlYWQzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0IEhFQUR+MikgJiYKKwloZWFkND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCBIRUFEfjMpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3byAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCisJbWVzc2FnZSBvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgWgorCWFkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKKwkkKGNvbW1pdF9tc2cpICAgICAgICAgICAgICAgICAgICBaCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgICAgICAgICAgWgorCW1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKKwlhZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCisJJChjb21taXRfbXNnKSAgICAgICAgICAgICAgICAgICAgWgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPHwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSBtZXNzYWdlIHR3byAgICAgICAgICAgICAgICAgICAgWgorCSRoZWFkMiBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgICAgICAgWgorCSRoZWFkMyBhZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgWgorCSRoZWFkNCAkKGNvbW1pdF9tc2cpICAgICAgICAgICAgWgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uJyAnCisJQ09MVU1OUz01MCBnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU8fCgtMTApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSBtZXNzYWdlIHR3byAgICAgICAgICAgICAgICAgICAgWgorCSRoZWFkMiBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgICAgICAgWgorCSRoZWFkMyBhZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgWgorCSRoZWFkNCAkKGNvbW1pdF9tc2cpICAgICAgICAgICAgWgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU8fCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgbWVzc2FnZSB0d28gICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDIgbWVzc2FnZSBvbmUgICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDMgYWRkIGJhciAgICAgICAgICAgICAgICAgICAgICAgIFoKKwkkaGVhZDQgJChjb21taXRfbXNnKSAgICAgICAgICAgIFoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEpJXMiID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgdHdvCisJbWVzc2FnZSBvbmUKKwlhZGQgYmFyCisJJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbm8gcGFkZGluZy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxKSVzIiA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgdHdvCisJbWVzc2FnZSBvbmUKKwlhZGQgYmFyCisJJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggdHJ1bmMnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLHRydW5jKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJbWVzc2FnZSAuLgorCW1lc3NhZ2UgLi4KKwlhZGQgYmFyICBaCisJaW5pdGlhbC4uLgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggdHJ1bmMuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtXEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgLi4KKwltZXNzYWdlIC4uCisJYWRkIGJhciAgWgorCWluaXRpYWwuLi4KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIGx0cnVuYycgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsbHRydW5jKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkuLnNhZ2UgdHdvCisJLi5zYWdlIG9uZQorCWFkZCBiYXIgIFoKKwkuLiR7c2FtcGxlX3V0ZjhfcGFydH1saWNoCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBsdHJ1bmMuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsbHRydW5jKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorCS4uc2FnZSB0d28KKwkuLnNhZ2Ugb25lCisJYWRkIGJhciAgWgorCS4uJHtzYW1wbGVfdXRmOF9wYXJ0fWxpY2gKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG10cnVuYycgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsbXRydW5jKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJbWVzcy4uIHR3bworCW1lc3MuLiBvbmUKKwlhZGQgYmFyICBaCisJaW5pdC4ubGljaAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbXRydW5jLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLG10cnVuYyklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1cRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJbWVzcy4uIHR3bworCW1lc3MuLiBvbmUKKwlhZGQgYmFyICBaCisJaW5pdC4ubGljaAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZycgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCVogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KKwlaICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCisJWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGJhcgorCVogICAgICAgICAgICAgICAgICAgICQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJWiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIHR3bworCVogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKKwlaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCisJWiAgICAgICAgICAgICAgICAgICAgJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbicgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT58KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KKwkkaGVhZDIgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKKwkkaGVhZDMgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKKwkkaGVhZDQgICAgICAgICAgICAgICQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4nICcKKwlDT0xVTU5TPTUwIGdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT58KC0xMCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgPmV4cGVjdGVkICYmCisJJGhlYWQxICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCisJJGhlYWQyICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCisJJGhlYWQzICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCisJJGhlYWQ0ICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZ2h0IGFsaWdubWVudCBmb3JtYXR0aW5nIGF0IHRoZSBudGggY29sdW1uLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+fCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KKwkkaGVhZDIgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKKwkkaGVhZDMgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKKwkkaGVhZDQgICAgICAgICAgICAgICQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyBOb3RlOiBTcGFjZSBiZXR3ZWVuICdtZXNzYWdlJyBhbmQgJ3R3bycgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGNvbHVtbgorIyBhcyBpbiBwcmV2aW91cyB0ZXN0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4gd2l0aCAtLWdyYXBoLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tZ3JhcGggLS1wcmV0dHk9InRmb3JtYXQ6JWggJT58KDQwKSVzIiA+YWN0dWFsICYmCisJaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkIDw8LUVPRiAmJgorCSogJGhlYWQxICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIHR3bworCSogJGhlYWQyICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQorCSogJGhlYWQzICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGJhcgorCSogJGhlYWQ0ICAgICAgICAgICAgJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+KDEpJXMiID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgdHdvCisJbWVzc2FnZSBvbmUKKwlhZGQgYmFyCisJJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcgYW5kIHdpdGggLS1ncmFwaCcgJworCWdpdCBsb2cgLS1ncmFwaCAtLXByZXR0eT0idGZvcm1hdDolPigxKSVzIiA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwkqIG1lc3NhZ2UgdHdvCisJKiBtZXNzYWdlIG9uZQorCSogYWRkIGJhcgorCSogJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oMSklcyIgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3bworCW1lc3NhZ2Ugb25lCisJYWRkIGJhcgorCSQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPjwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCVogICAgICAgICAgICAgbWVzc2FnZSB0d28gICAgICAgICAgICAgIFoKKwlaICAgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgICAgICBaCisJWiAgICAgICAgICAgICAgIGFkZCBiYXIgICAgICAgICAgICAgICAgWgorCVogICAgICAgICAkKGNvbW1pdF9tc2cpICAgICAgICAgIFoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+PCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwlaICAgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICBaCisJWiAgICAgICAgICAgICBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgWgorCVogICAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgICAgIFoKKwlaICAgICAgICAgJChjb21taXRfbXNnKSAgICAgICAgICBaCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4nICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+PHwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSAgICAgICAgICAgbWVzc2FnZSB0d28gICAgICAgICAgWgorCSRoZWFkMiAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgWgorCSRoZWFkMyAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgWgorCSRoZWFkNCAgICAgICAkKGNvbW1pdF9tc2cpICAgICAgWgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4nICcKKwlDT0xVTU5TPTcwIGdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT48fCgtMzApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMSAgICAgICAgICAgbWVzc2FnZSB0d28gICAgICAgICAgWgorCSRoZWFkMiAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgWgorCSRoZWFkMyAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgWgorCSRoZWFkNCAgICAgICAkKGNvbW1pdF9tc2cpICAgICAgWgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4uIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT48fCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwkkaGVhZDEgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgIFoKKwkkaGVhZDIgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgIFoKKwkkaGVhZDMgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgIFoKKwkkaGVhZDQgICAgICAgJChjb21taXRfbXNnKSAgICAgIFoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbm8gcGFkZGluZycgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT48KDEpJXMiID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCW1lc3NhZ2UgdHdvCisJbWVzc2FnZSBvbmUKKwlhZGQgYmFyCisJJChjb21taXRfbXNnKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIHNhdmUgSEVBRCdzIFNIQS0xIGRpZ2VzdCAod2l0aCBubyBhYmJyZXZpYXRpb25zKSB0byB1c2UgaXQgYmVsb3cKKyMgYXMgZmFyIGFzIHRoZSBuZXh0IHRlc3QgYW1lbmRzIEhFQUQKK29sZF9oZWFkMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRH4wKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbm8gcGFkZGluZy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPjwoMSklcyIgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKwltZXNzYWdlIHR3bworCW1lc3NhZ2Ugb25lCisJYWRkIGJhcgorCSQoY29tbWl0X21zZykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdC9yaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIHN0ZWFsaW5nJyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tIHNob3J0IC0tYXV0aG9yICJsb25nIGxvbmcgbG9uZyA8bG9uZ0BtZS5jb20+IiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMlPj4oMTAsbHRydW5jKSUgYW4iID5hY3R1YWwgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlzaG9ydCBsb25nICBsb25nIGxvbmcKKwltZXNzYWdlIC4uICAgQSBVIFRob3IKKwlhZGQgYmFyICAgICAgQSBVIFRob3IKKwlpbml0aWFsLi4uICAgQSBVIFRob3IKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQvcmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBzdGVhbGluZy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCx0cnVuYyklcyU+PigxMCxsdHJ1bmMpJSBhbiIgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCisJc2hvcnQgbG9uZyAgbG9uZyBsb25nCisJbWVzc2FnZSAuLiAgIEEgVSBUaG9yCisJYWRkIGJhciAgICAgIEEgVSBUaG9yCisJaW5pdGlhbC4uLiAgIEEgVSBUaG9yCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmJ1Zl91dGY4X3JlcGxhY2UoKSBub3QgcHJvZHVjaW5nIE5VTCcgJworCWdpdCBsb2cgLS1jb2xvciAtLXByZXR0eT0idGZvcm1hdDolPCgxMCx0cnVuYyklcyU+PigxMCxsdHJ1bmMpJUMoYXV0byklZCIgfAorCQl0ZXN0X2RlY29kZV9jb2xvciB8CisJCW51bF90b19xID5hY3R1YWwgJiYKKwkhIGdyZXAgUSBhY3R1YWwKKycKKworIyBJU08gc3RyaWN0IGRhdGUgZm9ybWF0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdJU08gYW5kIElTTy1zdHJpY3QgZGF0ZSBmb3JtYXRzIGRpc3BsYXkgdGhlIHNhbWUgdmFsdWVzJyAnCisJZ2l0IGxvZyAtLWZvcm1hdD0lYWklbiVjaSB8CisJc2VkIC1lICJzLyAvVC87IHMvIC8vOyBzLy4uXCQvOiYvIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVhSSVuJWNJID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgZGF0ZScgJworCWdpdCBsb2cgLS1mb3JtYXQ9JWFkJW4lY2QgLS1kYXRlPXNob3J0ID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JWFzJW4lY3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIGdldCBuZXcgZGlnZXN0cyAod2l0aCBubyBhYmJyZXZpYXRpb25zKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGxvZyBkZWNvcmF0aW9uIHRlc3RzJyAnCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUR+MCkgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRH4xKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZGVjb3JhdGlvbiBwcm9wZXJseSBmb2xsb3dzIHRhZyBjaGFpbicgJworCWdpdCB0YWcgLWEgdGFnMSAtbSB0YWcxICYmCisJZ2l0IHRhZyAtYSB0YWcyIC1tIHRhZzIgdGFnMSAmJgorCWdpdCB0YWcgLWQgdGFnMSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSBzaG9ydGVyICYmCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS10YWdzIC0tcHJldHR5PSIlSCAlZCIgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCSRoZWFkMiAgKHRhZzogcmVmcy90YWdzL21lc3NhZ2Utb25lKQorCSRvbGRfaGVhZDEgICh0YWc6IHJlZnMvdGFncy9tZXNzYWdlLXR3bykKKwkkaGVhZDEgICh0YWc6IHJlZnMvdGFncy90YWcyKQorCUVPRgorCXNvcnQgLWszIGFjdHVhbCA+YWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4gbG9nIGRlY29yYXRpb24nICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXRhZ3MgLS1wcmV0dHk9IiVIICVEIiAtLWRlY29yYXRlPWZ1bGwgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJJGhlYWQyIHRhZzogcmVmcy90YWdzL21lc3NhZ2Utb25lCisJJG9sZF9oZWFkMSB0YWc6IHJlZnMvdGFncy9tZXNzYWdlLXR3bworCSRoZWFkMSB0YWc6IHJlZnMvdGFncy90YWcyCisJRU9GCisJc29ydCAtazMgYWN0dWFsID5hY3R1YWwxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMQorJworCitjYXQgPnRyYWlsZXJzIDw8RU9GCitTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorQWNrZWQtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitbIHYyIHVwZGF0ZWQgcGF0Y2ggZGVzY3JpcHRpb24gXQorU2lnbmVkLW9mZi1ieTogQSBVIFRob3IKKyAgPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgorCit1bmZvbGQgKCkgeworCXBlcmwgLTBwZSAncy9cblxzKy8gL2cnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCB0cmFpbGVyIHRlc3RzJyAnCisJZWNobyAiU29tZSBjb250ZW50cyIgPnRyYWlsZXJmaWxlICYmCisJZ2l0IGFkZCB0cmFpbGVyZmlsZSAmJgorCWdpdCBjb21taXQgLUYgLSA8PC1FT0YKKwl0cmFpbGVyczogdGhpcyBjb21taXQgbWVzc2FnZSBoYXMgdHJhaWxlcnMKKworCVRoaXMgY29tbWl0IGlzIGEgdGVzdCBjb21taXQgd2l0aCB0cmFpbGVycyBhdCB0aGUgZW5kLiBXZSBwYXJzZSB0aGlzCisJbWVzc2FnZSBhbmQgZGlzcGxheSB0aGUgdHJhaWxlcnMgdXNpbmcgJSh0cmFpbGVycykuCisKKwkkKGNhdCB0cmFpbGVycykKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IGZvcm1hdCAlKHRyYWlsZXJzKSBzaG93cyB0cmFpbGVycycgJworCWdpdCBsb2cgLS1uby13YWxrIC0tcHJldHR5PSIlKHRyYWlsZXJzKSIgPmFjdHVhbCAmJgorCXsKKwkJY2F0IHRyYWlsZXJzICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6b25seSkgc2hvd3Mgb25seSAia2V5OiB2YWx1ZSIgdHJhaWxlcnMnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iJSh0cmFpbGVyczpvbmx5KSIgPmFjdHVhbCAmJgorCXsKKwkJZ3JlcCAtdiBwYXRjaC5kZXNjcmlwdGlvbiA8dHJhaWxlcnMgJiYKKwkJZWNobworCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJSh0cmFpbGVyczpvbmx5PXllcykgc2hvd3Mgb25seSAia2V5OiB2YWx1ZSIgdHJhaWxlcnMnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT1mb3JtYXQ6IiUodHJhaWxlcnM6b25seT15ZXMpIiA+YWN0dWFsICYmCisJZ3JlcCAtdiBwYXRjaC5kZXNjcmlwdGlvbiA8dHJhaWxlcnMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJSh0cmFpbGVyczpvbmx5PW5vKSBzaG93cyBhbGwgdHJhaWxlcnMnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT1mb3JtYXQ6IiUodHJhaWxlcnM6b25seT1ubykiID5hY3R1YWwgJiYKKwljYXQgdHJhaWxlcnMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJSh0cmFpbGVyczpvbmx5PW5vLG9ubHk9dHJ1ZSkgc2hvd3Mgb25seSAia2V5OiB2YWx1ZSIgdHJhaWxlcnMnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT1mb3JtYXQ6IiUodHJhaWxlcnM6b25seT15ZXMpIiA+YWN0dWFsICYmCisJZ3JlcCAtdiBwYXRjaC5kZXNjcmlwdGlvbiA8dHJhaWxlcnMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJSh0cmFpbGVyczp1bmZvbGQpIHVuZm9sZHMgdHJhaWxlcnMnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iJSh0cmFpbGVyczp1bmZvbGQpIiA+YWN0dWFsICYmCisJeworCQl1bmZvbGQgPHRyYWlsZXJzICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzpvbmx5IGFuZCA6dW5mb2xkIHdvcmsgdG9nZXRoZXInICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iJSh0cmFpbGVyczpvbmx5LHVuZm9sZCkiID5hY3R1YWwgJiYKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iJSh0cmFpbGVyczp1bmZvbGQsb25seSkiID5yZXZlcnNlICYmCisJdGVzdF9jbXAgYWN0dWFsIHJldmVyc2UgJiYKKwl7CisJCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzIHwgdW5mb2xkICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSBmb3JtYXQgJSh0cmFpbGVyczprZXk9Zm9vKSBzaG93cyB0aGF0IHRyYWlsZXInICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iZm9ybWF0OiUodHJhaWxlcnM6a2V5PUFja2VkLWJ5KSIgPmFjdHVhbCAmJgorCWVjaG8gIkFja2VkLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IGZvcm1hdCAlKHRyYWlsZXJzOmtleT1mb28pIGlzIGNhc2UgaW5zZW5zaXRpdmUnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iZm9ybWF0OiUodHJhaWxlcnM6a2V5PUFjS2VkLWJZKSIgPmFjdHVhbCAmJgorCWVjaG8gIkFja2VkLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IGZvcm1hdCAlKHRyYWlsZXJzOmtleT1mb286KSB0cmFpbGluZyBjb2xvbiBhbHNvIHdvcmtzJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzOmtleT1BY2tlZC1ieTopIiA+YWN0dWFsICYmCisJZWNobyAiQWNrZWQtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgZm9ybWF0ICUodHJhaWxlcnM6a2V5PWZvbykgbXVsdGlwbGUga2V5cycgJworCWdpdCBsb2cgLS1uby13YWxrIC0tcHJldHR5PSJmb3JtYXQ6JSh0cmFpbGVyczprZXk9QWNrZWQtYnk6LGtleT1TaWduZWQtb2ZmLUJ5KSIgPmFjdHVhbCAmJgorCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6a2V5PW5vbmV4aXN0ZW50KSBiZWNvbWVzIGVtcHR5JyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9InglKHRyYWlsZXJzOmtleT1OYWNrZWQtYnkpeCIgPmFjdHVhbCAmJgorCWVjaG8gInh4IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOmtleT1mb28pIGhhbmRsZXMgbXVsdGlwbGUgbGluZXMgZXZlbiBpZiBmb2xkZWQnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iZm9ybWF0OiUodHJhaWxlcnM6a2V5PVNpZ25lZC1PZmYtYnkpIiA+YWN0dWFsICYmCisJZ3JlcCAtdiBwYXRjaC5kZXNjcmlwdGlvbiA8dHJhaWxlcnMgfCBncmVwIC12IEFja2VkLWJ5ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6a2V5PWZvbyx1bmZvbGQpIHByb3Blcmx5IHVuZm9sZHMnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iZm9ybWF0OiUodHJhaWxlcnM6a2V5PVNpZ25lZC1PZmYtYnksdW5mb2xkKSIgPmFjdHVhbCAmJgorCXVuZm9sZCA8dHJhaWxlcnMgfCBncmVwIFNpZ25lZC1vZmYtYnkgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IGZvcm1hdCAlKHRyYWlsZXJzOmtleT1mb28sb25seT1ubykgYWxzbyBpbmNsdWRlcyBub250cmFpbGVyIGxpbmVzJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzOmtleT1BY2tlZC1ieSxvbmx5PW5vKSIgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiQWNrZWQtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IiAmJgorCQlncmVwIHBhdGNoLmRlc2NyaXB0aW9uIDx0cmFpbGVycworCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJSh0cmFpbGVyczprZXkpIHdpdGhvdXQgdmFsdWUgaXMgZXJyb3InICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0idGZvcm1hdDolKHRyYWlsZXJzOmtleSkiID5hY3R1YWwgJiYKKwllY2hvICIlKHRyYWlsZXJzOmtleSkiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6a2V5PWZvbyx2YWx1ZW9ubHkpIHNob3dzIG9ubHkgdmFsdWUnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT0iZm9ybWF0OiUodHJhaWxlcnM6a2V5PUFja2VkLWJ5LHZhbHVlb25seSkiID5hY3R1YWwgJiYKKwllY2hvICJBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IGZvcm1hdCAlKHRyYWlsZXJzOnNlcGFyYXRvcikgY2hhbmdlcyBzZXBhcmF0b3InICcKKwlnaXQgbG9nIC0tbm8td2FsayAtLXByZXR0eT1mb3JtYXQ6IlglKHRyYWlsZXJzOnNlcGFyYXRvcj0leDAwLHVuZm9sZClYIiA+YWN0dWFsICYmCisJcHJpbnRmICJYU2lnbmVkLW9mZi1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT5cMEFja2VkLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPlwwWyB2MiB1cGRhdGVkIHBhdGNoIGRlc2NyaXB0aW9uIF1cMFNpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+WCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldHR5IGZvcm1hdCAlKHRyYWlsZXJzKSBjb21iaW5pbmcgc2VwYXJhdG9yL2tleS92YWx1ZW9ubHknICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgLSA8PC1cRU9GICYmCisJSW1wb3J0YW50IGZpeAorCisJVGhlIGZpeCBpcyBleHBsYWluZWQgaGVyZQorCisJQ2xvc2VzOiAjMTIzNAorCUVPRgorCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIC0gPDwtXEVPRiAmJgorCUFub3RoZXIgZml4CisKKwlUaGUgZml4IGlzIGV4cGxhaW5lZCBoZXJlCisKKwlDbG9zZXM6ICM1NjcKKwlDbG9zZXM6ICM4OTAKKwlFT0YKKworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiAtIDw8LVxFT0YgJiYKKwlEb2VzIG5vdCBjbG9zZSBhbnkgdGlja2V0cworCUVPRgorCisJZ2l0IGxvZyAtLXByZXR0eT0iJXMlICh0cmFpbGVyczpzZXBhcmF0b3I9JXgyYyV4MjAsa2V5PUNsb3Nlcyx2YWx1ZW9ubHkpIiBIRUFEfjMuLiA+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyBcCisJCSJEb2VzIG5vdCBjbG9zZSBhbnkgdGlja2V0cyIgXAorCQkiQW5vdGhlciBmaXggIzU2NywgIzg5MCIgXAorCQkiSW1wb3J0YW50IGZpeCAjMTIzNCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxlciBwYXJzaW5nIG5vdCBmb29sZWQgYnkgLS0tIGxpbmUnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgLSA8PC1cRU9GICYmCisJdGhpcyBpcyB0aGUgc3ViamVjdAorCisJVGhpcyBpcyB0aGUgYm9keS4gVGhlIG1lc3NhZ2UgaGFzIGEgIi0tLSIgbGluZSB3aGljaCB3b3VsZCBjb25mdXNlIGEKKwltZXNzYWdlK3BhdGNoIHBhcnNlci4gQnV0IGhlcmUgd2Uga25vdyB3ZSBoYXZlIG9ubHkgYSBjb21taXQgbWVzc2FnZSwKKwlzbyB3ZSBnZXQgaXQgcmlnaHQuCisKKwl0cmFpbGVyOiB3cm9uZworCS0tLQorCVRoaXMgaXMgbW9yZSBib2R5LgorCisJdHJhaWxlcjogcmlnaHQKKwlFT0YKKworCXsKKwkJZWNobyAidHJhaWxlcjogcmlnaHQiICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tbm8td2FsayAtLWZvcm1hdD0iJSh0cmFpbGVycykiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCAlUyB0ZXN0cycgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBzb3VyY2UtYSAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCBjaGVja291dCAtYiBzb3VyY2UtYiBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWZvcm1hdD0lUyBwYWludHMgYnJhbmNoIG5hbWVzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXNvdXJjZS1iCisJc291cmNlLWEKKwlzb3VyY2UtYgorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9JVMgc291cmNlLWEgc291cmNlLWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZm9ybWF0PSVTIHBhaW50cyB0YWcgbmFtZXMnICcKKwlnaXQgdGFnIC1tIHRhZ2dlZCBzb3VyY2UtdGFnICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXNvdXJjZS10YWcKKwlzb3VyY2UtYQorCXNvdXJjZS10YWcKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVTIHNvdXJjZS10YWcgc291cmNlLWEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZm9ybWF0PSVTIHBhaW50cyBzeW1tZXRyaWMgcmFuZ2VzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXNvdXJjZS1iCisJc291cmNlLWEKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVTIHNvdXJjZS1hLi4uc291cmNlLWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJVMgaW4gZ2l0IGxvZyAtLWZvcm1hdCB3b3JrcyB3aXRoIG90aGVyIHBsYWNlaG9sZGVycyAocGFydCAxKScgJworCWdpdCBsb2cgLS1mb3JtYXQ9InNvdXJjZS1iICVoIiBzb3VyY2UtYiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJVMgJWgiIHNvdXJjZS1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVTIGluIGdpdCBsb2cgLS1mb3JtYXQgd29ya3Mgd2l0aCBvdGhlciBwbGFjZWhvbGRlcnMgKHBhcnQgMiknICcKKwlnaXQgbG9nIC0tZm9ybWF0PSIlaCBzb3VyY2UtYiIgc291cmNlLWIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVoICVTIiBzb3VyY2UtYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1wcmV0dHk9cmVmZXJlbmNlJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAoJXMsICVhcykiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXJlZmVyZW5jZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1wcmV0dHk9cmVmZXJlbmNlIHdpdGggbG9nLmRhdGUgaXMgb3ZlcnJpZGRlbiBieSBzaG9ydCBkYXRlJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAoJXMsICVhcykiID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBsb2cuZGF0ZSByZmMgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXJlZmVyZW5jZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1wcmV0dHk9cmVmZXJlbmNlIHdpdGggZXhwbGljaXQgZGF0ZSBvdmVycmlkZXMgc2hvcnQgZGF0ZScgJworCWdpdCBsb2cgLS1kYXRlPXJmYyAtLXByZXR0eT0idGZvcm1hdDolaCAoJXMsICVhZCkiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZGF0ZT1yZmMgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2UgaXMgbmV2ZXIgdW5hYmJyZXZpYXRlZCcgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggKCVzLCAlYXMpIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLW5vLWFiYnJldi1jb21taXQgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2UgaXMgbmV2ZXIgZGVjb3JhdGVkJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAoJXMsICVhcykiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZGVjb3JhdGU9c2hvcnQgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2UgZG9lcyBub3Qgb3V0cHV0IHJlZmxvZyBpbmZvJyAnCisJZ2l0IGxvZyAtLXdhbGstcmVmbG9ncyAtLXByZXR0eT0idGZvcm1hdDolaCAoJXMsICVhcykiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0td2Fsay1yZWZsb2dzIC0tcHJldHR5PXJlZmVyZW5jZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1wcmV0dHk9cmVmZXJlbmNlIGlzIGNvbG9yZWQgYXBwcm9wcmlhdGVseScgJworCWdpdCBsb2cgLS1jb2xvcj1hbHdheXMgLS1wcmV0dHk9InRmb3JtYXQ6JUMoYXV0byklaCAoJXMsICVhcykiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tY29sb3I9YWx3YXlzIC0tcHJldHR5PXJlZmVyZW5jZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDYtbG9nLWZvbGxvdy1oYXJkZXItY29waWVzLnNoIGIvdC90NDIwNi1sb2ctZm9sbG93LWhhcmRlci1jb3BpZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWQyOWU2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDYtbG9nLWZvbGxvdy1oYXJkZXItY29waWVzLnNoCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQm8gWWFuZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IC0tZm9sbG93IHNob3VsZCBhbHdheXMgZmluZCBjb3BpZXMgaGFyZCBpbiBnaXQgbG9nLgorCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKKworZWNobyA+cGF0aDAgJ0xpbmUgMQorTGluZSAyCitMaW5lIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZCBhIGZpbGUgcGF0aDAgYW5kIGNvbW1pdC4nIFwKKyAgICAnZ2l0IGFkZCBwYXRoMCAmJgorICAgICBnaXQgY29tbWl0IC1tICJBZGQgcGF0aDAiJworCitlY2hvID5wYXRoMCAnTmV3IGxpbmUgMQorTmV3IGxpbmUgMgorTmV3IGxpbmUgMworJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0NoYW5nZSBwYXRoMC4nIFwKKyAgICAnZ2l0IGFkZCBwYXRoMCAmJgorICAgICBnaXQgY29tbWl0IC1tICJDaGFuZ2UgcGF0aDAiJworCitjYXQgPHBhdGgwID5wYXRoMQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvcHkgcGF0aDAgdG8gcGF0aDEuJyBcCisgICAgJ2dpdCBhZGQgcGF0aDEgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQ29weSBwYXRoMSBmcm9tIHBhdGgwIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2ZpbmQgdGhlIGNvcHkgcGF0aDAgLT4gcGF0aDEgaGFyZGVyJyBcCisgICAgJ2dpdCBsb2cgLS1mb2xsb3cgLS1uYW1lLXN0YXR1cyAtLXByZXR0eT0iZm9ybWF0OiVzIiAgcGF0aDEgPiBjdXJyZW50JworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorQ29weSBwYXRoMSBmcm9tIHBhdGgwCitDMTAwCXBhdGgwCXBhdGgxCisKK0NoYW5nZSBwYXRoMAorTQlwYXRoMAorCitBZGQgcGF0aDAKK0EJcGF0aDAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgdGhlIG91dHB1dC4nIFwKKyAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwNy1sb2ctZGVjb3JhdGlvbi1jb2xvcnMuc2ggYi90L3Q0MjA3LWxvZy1kZWNvcmF0aW9uLWNvbG9ycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MGYwNDBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwNy1sb2ctZGVjb3JhdGlvbi1jb2xvcnMuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBOYXpyaSBSYW1saXkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBmb3IgImdpdCBsb2cgLS1kZWNvcmF0ZSIgY29sb3JzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBkaWZmLmNvbG9yLmNvbW1pdCB5ZWxsb3cgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLmJyYW5jaCBncmVlbiAmJgorCWdpdCBjb25maWcgY29sb3IuZGVjb3JhdGUucmVtb3RlQnJhbmNoIHJlZCAmJgorCWdpdCBjb25maWcgY29sb3IuZGVjb3JhdGUudGFnICJyZXZlcnNlIGJvbGQgeWVsbG93IiAmJgorCWdpdCBjb25maWcgY29sb3IuZGVjb3JhdGUuc3Rhc2ggbWFnZW50YSAmJgorCWdpdCBjb25maWcgY29sb3IuZGVjb3JhdGUuSEVBRCBjeWFuICYmCisKKwljX3Jlc2V0PSI8UkVTRVQ+IiAmJgorCisJY19jb21taXQ9IjxZRUxMT1c+IiAmJgorCWNfYnJhbmNoPSI8R1JFRU4+IiAmJgorCWNfcmVtb3RlQnJhbmNoPSI8UkVEPiIgJiYKKwljX3RhZz0iPEJPTEQ7UkVWRVJTRTtZRUxMT1c+IiAmJgorCWNfc3Rhc2g9IjxNQUdFTlRBPiIgJiYKKwljX0hFQUQ9IjxDWUFOPiIgJiYKKworCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgY2xvbmUgLiBvdGhlciAmJgorCSgKKwkJY2Qgb3RoZXIgJiYKKwkJdGVzdF9jb21taXQgQTEKKwkpICYmCisKKwlnaXQgcmVtb3RlIGFkZCAtZiBvdGhlciAuL290aGVyICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCB0YWcgdjEuMCAmJgorCWVjaG8gPj5BLnQgJiYKKwlnaXQgc3Rhc2ggc2F2ZSBDaGFuZ2VzIHRvIEEudAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCiske2NfY29tbWl0fUNPTU1JVF9JRCR7Y19yZXNldH0ke2NfY29tbWl0fSAoJHtjX3Jlc2V0fSR7Y19IRUFEfUhFQUQgLT5cCisgJHtjX3Jlc2V0fSR7Y19icmFuY2h9bWFzdGVyJHtjX3Jlc2V0fSR7Y19jb21taXR9LFwKKyAke2NfcmVzZXR9JHtjX3RhZ310YWc6IHYxLjAke2NfcmVzZXR9JHtjX2NvbW1pdH0sXAorICR7Y19yZXNldH0ke2NfdGFnfXRhZzogQiR7Y19yZXNldH0ke2NfY29tbWl0fSkke2NfcmVzZXR9IEIKKyR7Y19jb21taXR9Q09NTUlUX0lEJHtjX3Jlc2V0fSR7Y19jb21taXR9ICgke2NfcmVzZXR9JHtjX3RhZ310YWc6IEExJHtjX3Jlc2V0fSR7Y19jb21taXR9LFwKKyAke2NfcmVzZXR9JHtjX3JlbW90ZUJyYW5jaH1vdGhlci9tYXN0ZXIke2NfcmVzZXR9JHtjX2NvbW1pdH0pJHtjX3Jlc2V0fSBBMQorJHtjX2NvbW1pdH1DT01NSVRfSUQke2NfcmVzZXR9JHtjX2NvbW1pdH0gKCR7Y19yZXNldH0ke2Nfc3Rhc2h9cmVmcy9zdGFzaCR7Y19yZXNldH0ke2NfY29tbWl0fSkke2NfcmVzZXR9XAorIE9uIG1hc3RlcjogQ2hhbmdlcyB0byBBLnQKKyR7Y19jb21taXR9Q09NTUlUX0lEJHtjX3Jlc2V0fSR7Y19jb21taXR9ICgke2NfcmVzZXR9JHtjX3RhZ310YWc6IEEke2NfcmVzZXR9JHtjX2NvbW1pdH0pJHtjX3Jlc2V0fSBBCitFT0YKKworIyBXZSB3YW50IGxvZyB0byBzaG93IGFsbCwgYnV0IHRoZSBzZWNvbmQgcGFyZW50IHRvIHJlZnMvc3Rhc2ggaXMgaXJyZWxldmFudAorIyB0byB0aGlzIHRlc3Qgc2luY2UgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgZGVjb3JhdGlvbiwgaGVuY2UgLS1maXJzdC1wYXJlbnQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NvbW1pdCBEZWNvcmF0aW9ucyBDb2xvcmVkIENvcnJlY3RseScgJworCWdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLS1hYmJyZXY9MTAgLS1hbGwgLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1jb2xvcj1hbHdheXMgfAorCXNlZCAicy9bMC05YS1mXVx7MTAsMTBcfS9DT01NSVRfSUQvIiB8CisJdGVzdF9kZWNvZGVfY29sb3IgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDgtbG9nLW1hZ2ljLXBhdGhzcGVjLnNoIGIvdC90NDIwOC1sb2ctbWFnaWMtcGF0aHNwZWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGM4ZjNiOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDgtbG9nLW1hZ2ljLXBhdGhzcGVjLnNoCkBAIC0wLDAgKzEsMTQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWFnaWMgcGF0aHNwZWMgdGVzdHMgdXNpbmcgZ2l0LWxvZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCW1rZGlyIHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6LyIgc2hvdWxkIG5vdCBiZSBhbWJpZ3VvdXMnICcKKwlnaXQgbG9nIDovCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDovYSIgc2hvdWxkIGJlIGFtYmlndW91cyAoYXBwbGllZCBib3RoIHJldiBhbmQgd29ya3RyZWUpJyAnCisJOiA+YSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgOi9hIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIGFtYmlndW91cyBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6L2EgLS0gIiBzaG91bGQgbm90IGJlIGFtYmlndW91cycgJworCWdpdCBsb2cgOi9hIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDovZGV0YWNoZWQgLS0gIiBzaG91bGQgZmluZCBhIGNvbW1pdCBvbmx5IGluIEhFQUQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICYmCisJIyBNdXN0IG1hbnVhbGx5IGNhbGwgYHRlc3RfdGlja2AgaW5zdGVhZCBvZiB1c2luZyBgdGVzdF9jb21taXRgLAorCSMgYmVjYXVzZSB0aGUgbGF0dGVyIGFkZGl0aW9uYWxseSBjcmVhdGVzIGEgdGFnLCB3aGljaCB3b3VsZCBtYWtlCisJIyB0aGUgY29tbWl0IHJlYWNoYWJsZSBub3Qgb25seSB2aWEgSEVBRC4KKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZGV0YWNoZWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gc29tZXRoaW5nLWVsc2UgJiYKKwlnaXQgbG9nIDovZGV0YWNoZWQgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgOi9kZXRhY2hlZCAtLSAiIHNob3VsZCBub3QgZmluZCBhbiBvcnBoYW5lZCBjb21taXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDovZGV0YWNoZWQgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgOi9kZXRhY2hlZCAtLSAiIHNob3VsZCBmaW5kIEhFQUQgb25seSBvZiBvd24gd29ya3RyZWUnICcKKwlnaXQgd29ya3RyZWUgYWRkIG90aGVyLXRyZWUgSEVBRCAmJgorCWdpdCAtQyBvdGhlci10cmVlIGNoZWNrb3V0IC0tZGV0YWNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IC1DIG90aGVyLXRyZWUgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb3RoZXItZGV0YWNoZWQgJiYKKwlnaXQgLUMgb3RoZXItdHJlZSBsb2cgOi9vdGhlci1kZXRhY2hlZCAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgOi9vdGhlci1kZXRhY2hlZCAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyAtLSA6L2EiIHNob3VsZCBub3QgYmUgYW1iaWd1b3VzJyAnCisJZ2l0IGxvZyAtLSA6L2EKKycKKworIyBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgIjovYSIgY2hlY2sgYWJvdmUgaW4gdGhhdCA6L2luIGxvb2tzIGxpa2UgYSBwYXRoc3BlYywKKyMgYnV0IGRvZXNuJ3QgbWF0Y2ggYW4gYWN0dWFsIGZpbGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6L2luIiBzaG91bGQgbm90IGJlIGFtYmlndW91cycgJworCWdpdCBsb2cgOi9pbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6IiBzaG91bGQgYmUgYW1iaWd1b3VzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyA6IDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIGFtYmlndW91cyBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tIDonICcKKwlnaXQgbG9nIC0tIDoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyBIRUFEIC0tIDovJyAnCisJaW5pdGlhbD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCSRpbml0aWFsIGluaXRpYWwKKwlFT0YKKwkoY2Qgc3ViICYmIGdpdCBsb2cgLS1vbmVsaW5lIEhFQUQgLS0gOi8gPi4uL2FjdHVhbCkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgOl5zdWIiIGlzIG5vdCBhbWJpZ3VvdXMnICcKKwlnaXQgbG9nIDpec3ViCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDpeZG9lcy1ub3QtZXhpc3QiIGRvZXMgbm90IG1hdGNoIGFueXRoaW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyA6XmRvZXMtbm90LWV4aXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgICciZ2l0IGxvZyA6ISIgYmVoYXZlcyB0aGUgc2FtZSBhcyA6XicgJworCWdpdCBsb2cgOiFzdWIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDohZG9lcy1ub3QtZXhpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBsb2cgOihleGNsdWRlKXN1YiIgaXMgbm90IGFtYmlndW91cycgJworCWdpdCBsb2cgIjooZXhjbHVkZSlzdWIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDooZXhjbHVkZSlzdWIgLS0iIG11c3QgcmVzb2x2ZSBhcyBhbiBvYmplY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nICI6KGV4Y2x1ZGUpc3ViIiAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6KHVua25vd24tbWFnaWMpIGNvbXBsYWlucyBvZiBib2d1cyBtYWdpYycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgIjoodW5rbm93bi1tYWdpYykiIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIHBhdGhzcGVjLm1hZ2ljIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgbGluZSBwYXRoc3BlYyBwYXJzaW5nIGZvciAiZ2l0IGxvZyInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYW4gZW1wdHkgYSIgLS1hbGxvdy1lbXB0eSAmJgorCWVjaG8gMSA+YSAmJgorCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZSBhIHRvIDEiICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZWNobyAyID5hICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlIGEgdG8gMiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGxvZyAtLW1lcmdlIC0tIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZV9lbnRyeV9pbnRlcmVzdGluZyBkb2VzIG5vdCBtYXRjaCBwYXN0IHN1Ym1vZHVsZSBib3VuZGFyaWVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcmVwbyBzdWJtb2R1bGUiICYmCisJZ2l0IGluaXQgc3VibW9kdWxlICYmCisJdGVzdF9jb21taXQgLUMgc3VibW9kdWxlIGluaXRpYWwgJiYKKwlnaXQgaW5pdCByZXBvICYmCisJPiJyZXBvL1ticmFja2V0XSIgJiYKKwlnaXQgLUMgcmVwbyBhZGQgIlticmFja2V0XSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLW0gYnJhY2tldCAmJgorCWdpdCAtQyByZXBvIHJldi1saXN0IEhFQUQgLS0gIlticmFja2V0XSIgPmV4cGVjdCAmJgorCisJZ2l0IC1DIHJlcG8gc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgLUMgcmVwbyBjb21taXQgLW0gc3VibW9kdWxlICYmCisKKwlnaXQgLUMgcmVwbyByZXYtbGlzdCBIRUFEIC0tICJbYnJhY2tldF0iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwOS1sb2ctcGlja2F4ZS5zaCBiL3QvdDQyMDktbG9nLXBpY2theGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWQwNmY1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDktbG9nLXBpY2theGUuc2gKQEAgLTAsMCArMSwxNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdsb2cgLS1ncmVwLy0tYXV0aG9yLy0tcmVnZXhwLWlnbm9yZS1jYXNlLy1TLy1HJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfbG9nICgpIHsKKwlleHBlY3Q9JDEKKwlraW5kPSQyCisJbmVlZGxlPSQzCisJc2hpZnQgMworCXJlc3Q9JEAKKworCWNhc2UgJGtpbmQgaW4KKwktLSopCisJCW9wdD0ka2luZD0kbmVlZGxlCisJCTs7CisJKikKKwkJb3B0PSRraW5kJG5lZWRsZQorCQk7OworCWVzYWMKKwljYXNlICRleHBlY3QgaW4KKwlleHBlY3Rfbm9tYXRjaCkKKwkJbWF0Y2g9bm9tYXRjaAorCQk7OworCSopCisJCW1hdGNoPW1hdGNoCisJCTs7CisJZXNhYworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibG9nICRraW5kJHtyZXN0OisgJHJlc3R9ICgkbWF0Y2gpIiAiCisJCWdpdCBsb2cgJHJlc3QgJG9wdCAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJCXRlc3RfY21wICRleHBlY3QgYWN0dWFsCisJIgorfQorCisjIHRlc3QgLWkgYW5kIC0tcmVnZXhwLWlnbm9yZS1jYXNlIGFuZCBleHBlY3QgYm90aCB0byBiZWhhdmUgdGhlIHNhbWUgd2F5Cit0ZXN0X2xvZ19pY2FzZSAoKSB7CisJdGVzdF9sb2cgJEAgLS1yZWdleHAtaWdub3JlLWNhc2UKKwl0ZXN0X2xvZyAkQCAtaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZXhwZWN0X25vbWF0Y2ggJiYKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3RfaW5pdGlhbCAmJgorCisJZWNobyBQaWNrZWQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yPSJBbm90aGVyIFBlcnNvbiA8YW5vdGhlckBleGFtcGxlLmNvbT4iIC1tIHNlY29uZCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ZXhwZWN0X3NlY29uZAorJworCit0ZXN0X2xvZwlleHBlY3RfaW5pdGlhbAktLWdyZXAgaW5pdGlhbAordGVzdF9sb2cJZXhwZWN0X25vbWF0Y2gJLS1ncmVwIEluSXRpYWwKK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9pbml0aWFsCS0tZ3JlcCBJbkl0aWFsCit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfbm9tYXRjaAktLWdyZXAgaW5pdGFpbAorCit0ZXN0X2xvZwlleHBlY3Rfc2Vjb25kCS0tYXV0aG9yIFBlcnNvbgordGVzdF9sb2cJZXhwZWN0X25vbWF0Y2gJLS1hdXRob3IgcGVyc29uCit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfc2Vjb25kCS0tYXV0aG9yIHBlcnNvbgordGVzdF9sb2dfaWNhc2UJZXhwZWN0X25vbWF0Y2gJLS1hdXRob3Igc3ByZW9uCisKK3Rlc3RfbG9nCWV4cGVjdF9ub21hdGNoCS1HIHBpY2tlZAordGVzdF9sb2cJZXhwZWN0X3NlY29uZAktRyBQaWNrZWQKK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9ub21hdGNoCS1HIHBpY2tsZQordGVzdF9sb2dfaWNhc2UJZXhwZWN0X3NlY29uZAktRyBwaWNrZWQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1HIC0tdGV4dGNvbnYgKG1pc3NpbmcgdGV4dGNvbnYgdG9vbCknICcKKwllY2hvICIqIGRpZmY9dGVzdCIgPi5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGRpZmYudGVzdC50ZXh0Y29udj1taXNzaW5nIGxvZyAtR2ZvbyAmJgorCXJtIC5naXRhdHRyaWJ1dGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtRyAtLW5vLXRleHRjb252IChtaXNzaW5nIHRleHRjb252IHRvb2wpJyAnCisJZWNobyAiKiBkaWZmPXRlc3QiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCAtYyBkaWZmLnRlc3QudGV4dGNvbnY9bWlzc2luZyBsb2cgLUdmb28gLS1uby10ZXh0Y29udiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbWF0Y2ggYWN0dWFsICYmCisJcm0gLmdpdGF0dHJpYnV0ZXMKKycKKwordGVzdF9sb2cJZXhwZWN0X25vbWF0Y2gJLVMgcGlja2VkCit0ZXN0X2xvZwlleHBlY3Rfc2Vjb25kCS1TIFBpY2tlZAordGVzdF9sb2dfaWNhc2UJZXhwZWN0X3NlY29uZAktUyBwaWNrZWQKK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9ub21hdGNoCS1TIHBpY2tsZQorCit0ZXN0X2xvZwlleHBlY3Rfbm9tYXRjaAktUyBwLmNrZWQgLS1waWNrYXhlLXJlZ2V4Cit0ZXN0X2xvZwlleHBlY3Rfc2Vjb25kCS1TIFAuY2tlZCAtLXBpY2theGUtcmVnZXgKK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9zZWNvbmQJLVMgcC5ja2VkIC0tcGlja2F4ZS1yZWdleAordGVzdF9sb2dfaWNhc2UJZXhwZWN0X25vbWF0Y2gJLVMgcC5ja2xlIC0tcGlja2F4ZS1yZWdleAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLVMgLS10ZXh0Y29udiAobWlzc2luZyB0ZXh0Y29udiB0b29sKScgJworCWVjaG8gIiogZGlmZj10ZXN0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZGlmZi50ZXN0LnRleHRjb252PW1pc3NpbmcgbG9nIC1TZm9vICYmCisJcm0gLmdpdGF0dHJpYnV0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1TIC0tbm8tdGV4dGNvbnYgKG1pc3NpbmcgdGV4dGNvbnYgdG9vbCknICcKKwllY2hvICIqIGRpZmY9dGVzdCIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IC1jIGRpZmYudGVzdC50ZXh0Y29udj1taXNzaW5nIGxvZyAtU2ZvbyAtLW5vLXRleHRjb252ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9tYXRjaCBhY3R1YWwgJiYKKwlybSAuZ2l0YXR0cmlidXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBsb2cgLVtHU10gYmluYXJ5ICYgLS10ZXh0JyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIEdTLWJpbmFyeS1hbmQtdGV4dCAmJgorCWdpdCByZWFkLXRyZWUgLS1lbXB0eSAmJgorCXByaW50ZiAiYVxuYVwwYVxuIiA+ZGF0YS5iaW4gJiYKKwlnaXQgYWRkIGRhdGEuYmluICYmCisJZ2l0IGNvbW1pdCAtbSAiY3JlYXRlIGJpbmFyeSBmaWxlIiBkYXRhLmJpbiAmJgorCXByaW50ZiAiYVxuYVwwYVxuIiA+PmRhdGEuYmluICYmCisJZ2l0IGNvbW1pdCAtbSAibW9kaWZ5IGJpbmFyeSBmaWxlIiBkYXRhLmJpbiAmJgorCWdpdCBybSBkYXRhLmJpbiAmJgorCWdpdCBjb21taXQgLW0gImRlbGV0ZSBiaW5hcnkgZmlsZSIgZGF0YS5iaW4gJiYKKwlnaXQgbG9nID5mdWxsLWxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLUcgaWdub3JlcyBiaW5hcnkgZmlsZXMnICcKKwlnaXQgbG9nIC1HYSA+bG9nICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLUcgbG9va3MgaW50byBiaW5hcnkgZmlsZXMgd2l0aCAtYScgJworCWdpdCBsb2cgLWEgLUdhID5sb2cgJiYKKwl0ZXN0X2NtcCBsb2cgZnVsbC1sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1HIGxvb2tzIGludG8gYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAuZ2l0YXR0cmlidXRlcyIgJiYKKwllY2hvICIqIGRpZmY9YmluIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgLWMgZGlmZi5iaW4udGV4dGNvbnY9Y2F0IGxvZyAtR2EgPmxvZyAmJgorCXRlc3RfY21wIGxvZyBmdWxsLWxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLVMgbG9va3MgaW50byBiaW5hcnkgZmlsZXMnICcKKwlnaXQgbG9nIC1TYSA+bG9nICYmCisJdGVzdF9jbXAgbG9nIGZ1bGwtbG9nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIxMC1sb2ctaTE4bi5zaCBiL3QvdDQyMTAtbG9nLWkxOG4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzM3OTIwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTAtbG9nLWkxOG4uc2gKQEAgLTAsMCArMSw5MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbG9nIHdpdGggaTE4biBmZWF0dXJlcycKKy4gLi9saWItZ2V0dGV4dC5zaAorCisjIHR3byBmb3JtcyBvZiDDqQordXRmOF9lPSQocHJpbnRmICdcMzAzXDI1MScpCitsYXRpbjFfZT0kKHByaW50ZiAnXDM1MScpCisKKyMgaW52YWxpZCBVVEYtOAoraW52YWxpZF9lPSQocHJpbnRmICdcMzAzXDUwKScpICMgIikiIGF0IGVuZCB0byBjbG9zZSBvcGVuaW5nICIoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29tbWl0cyBpbiBkaWZmZXJlbnQgZW5jb2RpbmdzJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5tc2cgPDwtRU9GICYmCisJdXRmOAorCisJdCR7dXRmOF9lfXN0CisJRU9GCisJZ2l0IGFkZCBtc2cgJiYKKwlnaXQgLWMgaTE4bi5jb21taXRlbmNvZGluZz11dGY4IGNvbW1pdCAtRiBtc2cgJiYKKwljYXQgPm1zZyA8PC1FT0YgJiYKKwlsYXRpbjEKKworCXQke2xhdGluMV9lfXN0CisJRU9GCisJZ2l0IGFkZCBtc2cgJiYKKwlnaXQgLWMgaTE4bi5jb21taXRlbmNvZGluZz1JU08tODg1OS0xIGNvbW1pdCAtRiBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCBzZWFyY2hlcyBpbiBsb2cgb3V0cHV0IGVuY29kaW5nICh1dGY4KScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlsYXRpbjEKKwl1dGY4CisJRU9GCisJZ2l0IGxvZyAtLWVuY29kaW5nPXV0ZjggLS1mb3JtYXQ9JXMgLS1ncmVwPSR1dGY4X2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2xvZyAtLWdyZXAgc2VhcmNoZXMgaW4gbG9nIG91dHB1dCBlbmNvZGluZyAobGF0aW4xKScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlsYXRpbjEKKwl1dGY4CisJRU9GCisJZ2l0IGxvZyAtLWVuY29kaW5nPUlTTy04ODU5LTEgLS1mb3JtYXQ9JXMgLS1ncmVwPSRsYXRpbjFfZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnbG9nIC0tZ3JlcCBkb2VzIG5vdCBmaW5kIG5vbi1yZWVuY29kZWQgdmFsdWVzICh1dGY4KScgJworCWdpdCBsb2cgLS1lbmNvZGluZz11dGY4IC0tZm9ybWF0PSVzIC0tZ3JlcD0kbGF0aW4xX2UgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2xvZyAtLWdyZXAgZG9lcyBub3QgZmluZCBub24tcmVlbmNvZGVkIHZhbHVlcyAobGF0aW4xKScgJworCWdpdCBsb2cgLS1lbmNvZGluZz1JU08tODg1OS0xIC0tZm9ybWF0PSVzIC0tZ3JlcD0kdXRmOF9lID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK2ZvciBlbmdpbmUgaW4gZml4ZWQgYmFzaWMgZXh0ZW5kZWQgcGVybAorZG8KKwlwcmVyZXE9CisJaWYgdGVzdCAkZW5naW5lID0gInBlcmwiCisJdGhlbgorCQlwcmVyZXE9IlBDUkUiCisJZWxzZQorCQlwcmVyZXE9IiIKKwlmaQorCWZvcmNlX3JlZ2V4PQorCWlmIHRlc3QgJGVuZ2luZSAhPSAiZml4ZWQiCisJdGhlbgorCSAgICBmb3JjZV9yZWdleD0uKgorCWZpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csIVJFR0VYX0lMTFNFUSxHRVRURVhUX0xPQ0FMRSwkcHJlcmVxICItYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tZ3JlcCBkb2VzIG5vdCBmaW5kIG5vbi1yZWVuY29kZWQgdmFsdWVzIChsYXRpbjEgKyBsb2NhbGUpIiAiCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJbGF0aW4xCisJCXV0ZjgKKwkJRU9GCisJCUxDX0FMTD1cIiRpc19JU19sb2NhbGVcIiBnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWVuY29kaW5nPUlTTy04ODU5LTEgLS1mb3JtYXQ9JXMgLS1ncmVwPVwiJGZvcmNlX3JlZ2V4JGxhdGluMV9lXCIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csR0VUVEVYVF9MT0NBTEUsJHByZXJlcSAiLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWdyZXAgZG9lcyBub3QgZmluZCBub24tcmVlbmNvZGVkIHZhbHVlcyAobGF0aW4xICsgbG9jYWxlKSIgIgorCQlMQ19BTEw9XCIkaXNfSVNfbG9jYWxlXCIgZ2l0IC1jIGdyZXAucGF0dGVyblR5cGU9JGVuZ2luZSBsb2cgLS1lbmNvZGluZz1JU08tODg1OS0xIC0tZm9ybWF0PSVzIC0tZ3JlcD1cIiRmb3JjZV9yZWdleCR1dGY4X2VcIiA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVywhUkVHRVhfSUxMU0VRLEdFVFRFWFRfTE9DQUxFLCRwcmVyZXEgIi1jIGdyZXAucGF0dGVyblR5cGU9JGVuZ2luZSBsb2cgLS1ncmVwIGRvZXMgbm90IGRpZSBvbiBpbnZhbGlkIFVURi04IHZhbHVlIChsYXRpbjEgKyBsb2NhbGUgKyBpbnZhbGlkIG5lZWRsZSkiICIKKwkJTENfQUxMPVwiJGlzX0lTX2xvY2FsZVwiIGdpdCAtYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tZW5jb2Rpbmc9SVNPLTg4NTktMSAtLWZvcm1hdD0lcyAtLWdyZXA9XCIkZm9yY2VfcmVnZXgkaW52YWxpZF9lXCIgPmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisJIgorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMTEtbGluZS1sb2cuc2ggYi90L3Q0MjExLWxpbmUtbG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkYTU4MTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExLWxpbmUtbG9nLnNoCkBAIC0wLDAgKzEsMjE4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBsb2cgLUwnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgKGltcG9ydCBoaXN0b3J5KScgJworCXRlc3Rfb2lkX2luaXQgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPCAiJFRFU1RfRElSRUNUT1JZIi90NDIxMS9oaXN0b3J5LmV4cG9ydCAmJgorCWdpdCByZXNldCAtLWhhcmQKKycKKworY2FubmVkX3Rlc3RfMSAoKSB7CisJdGVzdF9leHBlY3RfJDEgIiQyIiAiCisJCWdpdCBsb2cgJDIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBcIlwkVEVTVF9ESVJFQ1RPUllcIi90NDIxMS8kKHRlc3Rfb2lkIGFsZ28pL2V4cGVjdC4kMyBhY3R1YWwKKwkiCit9CisKK2Nhbm5lZF90ZXN0ICgpIHsKKwljYW5uZWRfdGVzdF8xIHN1Y2Nlc3MgIiRAIgorfQorY2FubmVkX3Rlc3RfZmFpbHVyZSAoKSB7CisJY2FubmVkX3Rlc3RfMSBmYWlsdXJlICIkQCIKK30KKwordGVzdF9iYWRfb3B0cyAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaW52YWxpZCBhcmdzOiAkMSIgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbG9nICQxIDI+ZXJyb3JzICYmCisJCXRlc3RfaTE4bmdyZXAgJyQyJyBlcnJvcnMKKwkiCit9CisKK2Nhbm5lZF90ZXN0ICItTCA0LDEyOmEuYyBzaW1wbGUiIHNpbXBsZS1mCitjYW5uZWRfdGVzdCAiLUwgNCwrOTphLmMgc2ltcGxlIiBzaW1wbGUtZgorY2FubmVkX3Rlc3QgIi1MICcvbG9uZyBmLywvXn0vOmEuYycgc2ltcGxlIiBzaW1wbGUtZgorY2FubmVkX3Rlc3QgIi1MIDpmOmEuYyBzaW1wbGUiIHNpbXBsZS1mLXRvLW1haW4KKworY2FubmVkX3Rlc3QgIi1MICcvbWFpbi8sL159LzphLmMnIHNpbXBsZSIgc2ltcGxlLW1haW4KK2Nhbm5lZF90ZXN0ICItTCA6bWFpbjphLmMgc2ltcGxlIiBzaW1wbGUtbWFpbi10by1lbmQKKworY2FubmVkX3Rlc3QgIi1MIDEsKzQ6YS5jIHNpbXBsZSIgYmVnaW5uaW5nLW9mLWZpbGUKKworY2FubmVkX3Rlc3QgIi1MIDIwOmEuYyBzaW1wbGUiIGVuZC1vZi1maWxlCisKK2Nhbm5lZF90ZXN0ICItTCAnL2xvbmcgZi8nLC9efS86YS5jIC1MIC9tYWluLywvXn0vOmEuYyBzaW1wbGUiIHR3by1yYW5nZXMKK2Nhbm5lZF90ZXN0ICItTCAyNCwrMTphLmMgc2ltcGxlIiB2YW5pc2hlcy1lYXJseQorCitjYW5uZWRfdGVzdCAiLU0gLUwgJy9sb25nIGYvLC9efS86Yi5jJyBtb3ZlLXN1cHBvcnQiIG1vdmUtc3VwcG9ydC1mCitjYW5uZWRfdGVzdCAiLU0gLUwgJzpmOmIuYycgcGFyYWxsZWwtY2hhbmdlIiBwYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluCisKK2Nhbm5lZF90ZXN0ICItTCA0LDEyOmEuYyAtTCA6bWFpbjphLmMgc2ltcGxlIiBtdWx0aXBsZQorY2FubmVkX3Rlc3QgIi1MIDQsMTg6YS5jIC1MIF46bWFpbjphLmMgc2ltcGxlIiBtdWx0aXBsZS1vdmVybGFwcGluZworY2FubmVkX3Rlc3QgIi1MIDptYWluOmEuYyAtTCA0LDE4OmEuYyBzaW1wbGUiIG11bHRpcGxlLW92ZXJsYXBwaW5nCitjYW5uZWRfdGVzdCAiLUwgNDphLmMgLUwgOCwxMjphLmMgc2ltcGxlIiBtdWx0aXBsZS1zdXBlcnNldAorY2FubmVkX3Rlc3QgIi1MIDgsMTI6YS5jIC1MIDQ6YS5jIHNpbXBsZSIgbXVsdGlwbGUtc3VwZXJzZXQKKwordGVzdF9iYWRfb3B0cyAiLUwiICJzd2l0Y2guKnJlcXVpcmVzIGEgdmFsdWUiCit0ZXN0X2JhZF9vcHRzICItTCBiLmMiICJhcmd1bWVudCBub3QgLnN0YXJ0LGVuZDpmaWxlIgordGVzdF9iYWRfb3B0cyAiLUwgMToiICJhcmd1bWVudCBub3QgLnN0YXJ0LGVuZDpmaWxlIgordGVzdF9iYWRfb3B0cyAiLUwgMTpub25leGlzdGVudCIgIlRoZXJlIGlzIG5vIHBhdGgiCit0ZXN0X2JhZF9vcHRzICItTCAxOnNpbXBsZSIgIlRoZXJlIGlzIG5vIHBhdGgiCit0ZXN0X2JhZF9vcHRzICItTCAnL2ZvbzpiLmMnIiAiYXJndW1lbnQgbm90IC5zdGFydCxlbmQ6ZmlsZSIKK3Rlc3RfYmFkX29wdHMgIi1MIDEwMDA6Yi5jIiAiaGFzIG9ubHkuKmxpbmVzIgordGVzdF9iYWRfb3B0cyAiLUwgOmIuYyIgImFyZ3VtZW50IG5vdCAuc3RhcnQsZW5kOmZpbGUiCit0ZXN0X2JhZF9vcHRzICItTCA6Zm9vOmIuYyIgIm5vIG1hdGNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCBYIChYID09IG5saW5lcyknICcKKwluPSQod2MgLWwgPGIuYykgJiYKKwlnaXQgbG9nIC1MICRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCBYIChYID09IG5saW5lcyArIDEpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8Yi5jKSArIDEpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtTCAkbjpiLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUwgWCAoWCA9PSBubGluZXMgKyAyKScgJworCW49JChleHByICQod2MgLWwgPGIuYykgKyAyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLUwgJG46Yi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1MICxZIChZID09IG5saW5lcyknICcKKwluPSQocHJpbnRmICIlZCIgJCh3YyAtbCA8Yi5jKSkgJiYKKwlnaXQgbG9nIC1MICwkbjpiLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUwgLFkgKFkgPT0gbmxpbmVzICsgMSknICcKKwluPSQoZXhwciAkKHdjIC1sIDxiLmMpICsgMSkgJiYKKwlnaXQgbG9nIC1MICwkbjpiLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUwgLFkgKFkgPT0gbmxpbmVzICsgMiknICcKKwluPSQoZXhwciAkKHdjIC1sIDxiLmMpICsgMikgJiYKKwlnaXQgbG9nIC1MICwkbjpiLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUwgd2l0aCAtLWZpcnN0LXBhcmVudCBhbmQgYSBtZXJnZScgJworCWdpdCBjaGVja291dCBwYXJhbGxlbC1jaGFuZ2UgJiYKKwlnaXQgbG9nIC0tZmlyc3QtcGFyZW50IC1MIDEsMTpiLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUwgd2l0aCAtLW91dHB1dCcgJworCWdpdCBjaGVja291dCBwYXJhbGxlbC1jaGFuZ2UgJiYKKwlnaXQgbG9nIC0tb3V0cHV0PWxvZyAtTCA6bWFpbjpiLmMgPm91dHB1dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA3MCBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2Vfc2V0X3VuaW9uJyAnCisJdGVzdF9zZXEgNTAwID4gYy5jICYmCisJZ2l0IGFkZCBjLmMgJiYKKwlnaXQgY29tbWl0IC1tICJtYW55IGxpbmVzIiAmJgorCXRlc3Rfc2VxIDEwMDAgPiBjLmMgJiYKKwlnaXQgYWRkIGMuYyAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmeSBtYW55IGxpbmVzIiAmJgorCWdpdCBsb2cgJChmb3IgeCBpbiAkKHRlc3Rfc2VxIDIwMCk7IGRvIGVjaG8gLUwgJCgoMip4KSksKzE6Yy5jOyBkb25lKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctcyBzaG93cyBvbmx5IGxpbmUtbG9nIGNvbW1pdHMnICcKKwlnaXQgbG9nIC0tZm9ybWF0PSJjb21taXQgJXMiIC1MMSwyNDpiLmMgPmV4cGVjdC5yYXcgJiYKKwlncmVwIF5jb21taXQgZXhwZWN0LnJhdyA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iY29tbWl0ICVzIiAtTDEsMjQ6Yi5jIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1wIHNob3dzIHRoZSBkZWZhdWx0IHBhdGNoIG91dHB1dCcgJworCWdpdCBsb2cgLUwxLDI0OmIuYyA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtTDEsMjQ6Yi5jIC1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmF3IGlzIGZvcmJpZGRlbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLUwxLDI0OmIuYyAtLXJhdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgY2hlY2tpbmcgZmFuY3kgcmVuYW1lIGZvbGxvd2luZycgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBtb3Zlcy1zdGFydCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCXByaW50ZiAiJXNcbiIgICAgMTIgMTMgMTQgMTUgICAgICBiIGMgZCBlICAgPmZpbGUtMSAmJgorCXByaW50ZiAiJXNcbiIgICAgMjIgMjMgMjQgMjUgICAgICBCIEMgRCBFICAgPmZpbGUtMiAmJgorCWdpdCBhZGQgZmlsZS0xIGZpbGUtMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBmaWxlLTEgYW5kIGZpbGUtMiIgJiYKKwlvaWRfYWRkX2YxX2YyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbW92ZXMtbWFpbiAmJgorCXByaW50ZiAiJXNcbiIgMTEgMTIgMTMgMTQgMTUgICAgICBiIGMgZCBlICAgPmZpbGUtMSAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBmaWxlLTEgb24gbWFpbiIgJiYKKwlvaWRfbW9kX2YxX21haW49JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKworCXByaW50ZiAiJXNcbiIgMjEgMjIgMjMgMjQgMjUgICAgICBCIEMgRCBFICAgPmZpbGUtMiAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBmaWxlLTIgb24gbWFpbiAjMSIgJiYKKwlvaWRfbW9kX2YyX21haW5fMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCisJZ2l0IG12IGZpbGUtMSByZW5hbWVkLTEgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWUgZmlsZS0xIHRvIHJlbmFtZWQtMSBvbiBtYWluIiAmJgorCisJcHJpbnRmICIlc1xuIiAxMSAxMiAxMyAxNCAxNSAgICAgIGIgYyBkIGUgZiA+cmVuYW1lZC0xICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IHJlbmFtZWQtMSBvbiBtYWluIiAmJgorCW9pZF9tb2RfcjFfbWFpbj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCisJcHJpbnRmICIlc1xuIiAyMSAyMiAyMyAyNCAyNSAgICAgIEIgQyBEIEUgRiA+ZmlsZS0yICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IGZpbGUtMiBvbiBtYWluICMyIiAmJgorCW9pZF9tb2RfZjJfbWFpbl8yPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbW92ZXMtc2lkZSBtb3Zlcy1zdGFydCAmJgorCXByaW50ZiAiJXNcbiIgICAgMTIgMTMgMTQgMTUgMTYgICBiIGMgZCBlICAgPmZpbGUtMSAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBmaWxlLTEgb24gc2lkZSAjMSIgJiYKKwlvaWRfbW9kX2YxX3NpZGVfMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCisJcHJpbnRmICIlc1xuIiAgICAyMiAyMyAyNCAyNSAyNiAgIEIgQyBEIEUgICA+ZmlsZS0yICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IGZpbGUtMiBvbiBzaWRlIiAmJgorCW9pZF9tb2RfZjJfc2lkZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCisJZ2l0IG12IGZpbGUtMiByZW5hbWVkLTIgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWUgZmlsZS0yIHRvIHJlbmFtZWQtMiBvbiBzaWRlIiAmJgorCisJcHJpbnRmICIlc1xuIiAgICAxMiAxMyAxNCAxNSAxNiBhIGIgYyBkIGUgICA+ZmlsZS0xICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IGZpbGUtMSBvbiBzaWRlICMyIiAmJgorCW9pZF9tb2RfZjFfc2lkZV8yPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisKKwlwcmludGYgIiVzXG4iICAgIDIyIDIzIDI0IDI1IDI2IEEgQiBDIEQgRSAgID5yZW5hbWVkLTIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgcmVuYW1lZC0yIG9uIHNpZGUiICYmCisJb2lkX21vZF9yMl9zaWRlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisKKwlnaXQgY2hlY2tvdXQgbW92ZXMtbWFpbiAmJgorCWdpdCBtZXJnZSBtb3Zlcy1zaWRlICYmCisJb2lkX21lcmdlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhbmN5IHJlbmFtZSBmb2xsb3dpbmcgIzEnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkb2lkX21lcmdlIE1lcmdlIGJyYW5jaCAnXCcnbW92ZXMtc2lkZSdcJycgaW50byBtb3Zlcy1tYWluCisJJG9pZF9tb2RfZjFfc2lkZV8yIE1vZGlmeSBmaWxlLTEgb24gc2lkZSAjMgorCSRvaWRfbW9kX2YxX3NpZGVfMSBNb2RpZnkgZmlsZS0xIG9uIHNpZGUgIzEKKwkkb2lkX21vZF9yMV9tYWluIE1vZGlmeSByZW5hbWVkLTEgb24gbWFpbgorCSRvaWRfbW9kX2YxX21haW4gTW9kaWZ5IGZpbGUtMSBvbiBtYWluCisJJG9pZF9hZGRfZjFfZjIgQWRkIGZpbGUtMSBhbmQgZmlsZS0yCisJRU9GCisJZ2l0IGxvZyAtTDE6cmVuYW1lZC0xIC0tb25lbGluZSAtLW5vLXBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhbmN5IHJlbmFtZSBmb2xsb3dpbmcgIzInICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkb2lkX21lcmdlIE1lcmdlIGJyYW5jaCAnXCcnbW92ZXMtc2lkZSdcJycgaW50byBtb3Zlcy1tYWluCisJJG9pZF9tb2RfcjJfc2lkZSBNb2RpZnkgcmVuYW1lZC0yIG9uIHNpZGUKKwkkb2lkX21vZF9mMl9zaWRlIE1vZGlmeSBmaWxlLTIgb24gc2lkZQorCSRvaWRfbW9kX2YyX21haW5fMiBNb2RpZnkgZmlsZS0yIG9uIG1haW4gIzIKKwkkb2lkX21vZF9mMl9tYWluXzEgTW9kaWZ5IGZpbGUtMiBvbiBtYWluICMxCisJJG9pZF9hZGRfZjFfZjIgQWRkIGZpbGUtMSBhbmQgZmlsZS0yCisJRU9GCisJZ2l0IGxvZyAtTDE6cmVuYW1lZC0yIC0tb25lbGluZSAtLW5vLXBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9oaXN0b3J5LmV4cG9ydCBiL3QvdDQyMTEvaGlzdG9yeS5leHBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmNDFlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvaGlzdG9yeS5leHBvcnQKQEAgLTAsMCArMSw0MDYgQEAKK2Jsb2IKK21hcmsgOjEKK2RhdGEgMTU3CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGYoaW50IHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKK3Jlc2V0IHJlZnMvdGFncy9zaW1wbGUKK2NvbW1pdCByZWZzL3RhZ3Mvc2ltcGxlCittYXJrIDoyCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDY4OCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ2ODggKzAxMDAKK2RhdGEgOAoraW5pdGlhbAorTSAxMDA2NDQgOjEgYS5jCisKK2Jsb2IKK21hcmsgOjMKK2RhdGEgMTY4CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGYoaW50IHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKK2NvbW1pdCByZWZzL3RhZ3Mvc2ltcGxlCittYXJrIDo0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDY5NSArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ2OTUgKzAxMDAKK2RhdGEgMTEKK2NoYW5nZSBmKCkKK2Zyb20gOjIKK00gMTAwNjQ0IDozIGEuYworCitibG9iCittYXJrIDo1CitkYXRhIDE3MQorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworCXJldHVybiAwOworfQorCitjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6NgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ3MTYgKzAxMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0NzE2ICswMTAwCitkYXRhIDIxCit0b3VjaCBib3RoIGZ1bmN0aW9ucworZnJvbSA6NAorTSAxMDA2NDQgOjUgYS5jCisKK2Jsb2IKK21hcmsgOjcKK2RhdGEgMTg1CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjgKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0NzQxICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDc0MSArMDEwMAorZGF0YSAxNAordG91Y2ggY29tbWVudAorZnJvbSA6NgorTSAxMDA2NDQgOjcgYS5jCisKK2Jsb2IKK21hcmsgOjkKK2RhdGEgMjA1CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjEwCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDg2MCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ4NjAgKzAxMDAKK2RhdGEgMjUKK2NoYW5nZSBhdCB2ZXJ5IGJlZ2lubmluZworZnJvbSA6OAorTSAxMDA2NDQgOjkgYS5jCisKK2Jsb2IKK21hcmsgOjExCitkYXRhIDIwNAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9Citjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6MTIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0ODkwICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDg5MCArMDEwMAorZGF0YSAzNgorY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKK2Zyb20gOjEwCitNIDEwMDY0NCA6MTEgYS5jCisKK2Jsb2IKK21hcmsgOjEzCitkYXRhIDIzOAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjE0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDkyMyArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5MjMgKzAxMDAKK2RhdGEgMjkKK2NoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKK2Zyb20gOjEyCitNIDEwMDY0NCA6MTMgYS5jCisKK2NvbW1pdCByZWZzL3RhZ3MvbW92ZS1zdXBwb3J0CittYXJrIDoxNQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5NjggKzAxMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0OTY4ICswMTAwCitkYXRhIDEwCittb3ZlIGZpbGUKK2Zyb20gOjE0CitEIGEuYworTSAxMDA2NDQgOjEzIGIuYworCitibG9iCittYXJrIDoxNgorZGF0YSAyMzcKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4IC89IDI7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvdGFncy9tb3ZlLXN1cHBvcnQKK21hcmsgOjE3CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDk5MCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5OTAgKzAxMDAKK2RhdGEgMjIKK2Fub3RoZXIgc2ltcGxlIGNoYW5nZQorZnJvbSA6MTUKK00gMTAwNjQ0IDoxNiBiLmMKKworYmxvYgorbWFyayA6MTgKK2RhdGEgMjU0CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCk7CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCAvPSAyOworCQlzKys7CisJfQorCXJldHVybiBzOworfQorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjE5CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NTAyNCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDUwMjQgKzAxMDAKK2RhdGEgMjEKK21vdmUgd2l0aGluIHRoZSBmaWxlCitmcm9tIDoxNworTSAxMDA2NDQgOjE4IGIuYworCitibG9iCittYXJrIDoyMAorZGF0YSAyNDMKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4ID4+PSAxOworCQlzKys7CisJfQorCXJldHVybiBzOworfQorCisvKgorICogVGhpcyBpcyBvbmx5IGEgc2hvcnQgZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvaGVhZHMvcGFyYWxsZWwtY2hhbmdlCittYXJrIDoyMQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM2NTc3NjE1NyArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM2NTc3NjE1NyArMDIwMAorZGF0YSA1NQorY2hhbmdlIG9uIGFub3RoZXIgbGluZSBvZiBoaXN0b3J5IHdoaWxlIHJlbmFtZSBoYXBwZW5zCitmcm9tIDoxNAorTSAxMDA2NDQgOjIwIGEuYworCitibG9iCittYXJrIDoyMgorZGF0YSAyNDIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4IC89IDI7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYSBzaG9ydCBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgcmVmcy9oZWFkcy9wYXJhbGxlbC1jaGFuZ2UKK21hcmsgOjIzCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzY1Nzc2MTg0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzY1Nzc2MTkxICswMjAwCitkYXRhIDI0CitNZXJnZSBhY3Jvc3MgdGhlIHJlbmFtZQorZnJvbSA6MjEKK21lcmdlIDoxNworRCBhLmMKK00gMTAwNjQ0IDoyMiBiLmMKKworcmVzZXQgcmVmcy9oZWFkcy9wYXJhbGxlbC1jaGFuZ2UKK2Zyb20gOjIzCisKZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMS9leHBlY3QuYmVnaW5uaW5nLW9mLWZpbGUgYi90L3Q0MjExL3NoYTEvZXhwZWN0LmJlZ2lubmluZy1vZi1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYjQwNTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LmJlZ2lubmluZy1vZi1maWxlCkBAIC0wLDAgKzEsNDMgQEAKK2NvbW1pdCA0YTIzYWU1Yzk4ZDU5YTU4YzZkYTAzNjE1Njk1OWYyZGM5ZjQ3MmFkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDc6NDAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGF0IHZlcnkgYmVnaW5uaW5nCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMSwzICsxLDQgQEAKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgbG9uZyBmKGxvbmcgeCkKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTEsMyArMSwzIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMSwzIEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IGYoaW50IHgpCmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0LmVuZC1vZi1maWxlIGIvdC90NDIxMS9zaGExL2V4cGVjdC5lbmQtb2YtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI1YmIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGExL2V4cGVjdC5lbmQtb2YtZmlsZQpAQCAtMCwwICsxLDYyIEBACitjb21taXQgNDY1OTUzODg0NGRhYTI4NDliMWE5ZTdkNmZhZGI5NmZjZDI2ZmM4MworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMCwzICsyMCw1IEBACisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMCwzICsyMCwzIEBACisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE5LDMgKzE5LDMgQEAKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzE4LDMgQEAKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0Lm1vdmUtc3VwcG9ydC1mIGIvdC90NDIxMS9zaGExL2V4cGVjdC5tb3ZlLXN1cHBvcnQtZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTA1ZTAxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGExL2V4cGVjdC5tb3ZlLXN1cHBvcnQtZgpAQCAtMCwwICsxLDgwIEBACitjb21taXQgNmNlM2M0ZmY2OTAxMzYwOTliYjE3ZTFhODc2NmI3NTc2NDcyNmVhNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ5OjUwIDIwMTMgKzAxMDAKKworICAgIGFub3RoZXIgc2ltcGxlIGNoYW5nZQorCitkaWZmIC0tZ2l0IGEvYi5jIGIvYi5jCistLS0gYS9iLmMKKysrKyBiL2IuYworQEAgLTQsOSArNCw5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKy0JCXggPj49IDE7CisrCQl4IC89IDI7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC5tdWx0aXBsZSBiL3QvdDQyMTEvc2hhMS9leHBlY3QubXVsdGlwbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhZDViNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMS9leHBlY3QubXVsdGlwbGUKQEAgLTAsMCArMSwxMDQgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDcgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDEwMGI2MWE2ZjJmNzIwZjgxMjYyMGE5ZDEwYWZiM2E5NjBjY2I3M2MKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CitAQCAtMTcsNSArMTcsNSBAQAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw4ICszLDkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0Lm11bHRpcGxlLW92ZXJsYXBwaW5nIGIvdC90NDIxMS9zaGExL2V4cGVjdC5tdWx0aXBsZS1vdmVybGFwcGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTMwYjZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGExL2V4cGVjdC5tdWx0aXBsZS1vdmVybGFwcGluZwpAQCAtMCwwICsxLDE4NyBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwyMSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwxOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCAzOWI2ZWIyZDViNzA2ZDMzMjIxODRhMTY5ZjY2NmYyNWVkM2ZiZDAwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE4ICszLDE5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC5tdWx0aXBsZS1zdXBlcnNldCBiL3QvdDQyMTEvc2hhMS9leHBlY3QubXVsdGlwbGUtc3VwZXJzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzMGI2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMS9leHBlY3QubXVsdGlwbGUtc3VwZXJzZXQKQEAgLTAsMCArMSwxODcgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTkgKzQsMjEgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDEwMGI2MWE2ZjJmNzIwZjgxMjYyMGE5ZDEwYWZiM2E5NjBjY2I3M2MKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTkgKzQsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgMzliNmViMmQ1YjcwNmQzMzIyMTg0YTE2OWY2NjZmMjVlZDNmYmQwMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjQxIDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGNvbW1lbnQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE5ICszLDE5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogQSBjb21tZW50LgorKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE5ICszLDE5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOCArMywxOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDE4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQorKworKy8qCisrICogQSBjb21tZW50LgorKyAqLworKworK2ludCBtYWluICgpCisreworKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMS9leHBlY3QucGFyYWxsZWwtY2hhbmdlLWYtdG8tbWFpbiBiL3QvdDQyMTEvc2hhMS9leHBlY3QucGFyYWxsZWwtY2hhbmdlLWYtdG8tbWFpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTJkZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGExL2V4cGVjdC5wYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluCkBAIC0wLDAgKzEsMTYwIEBACitjb21taXQgMDQ2OWM2MGJjNDgzN2Q1MmQ5N2IxZjA4MWRlYzVmOThkZWEyMGZlZAorTWVyZ2U6IGJhMjI3YzYgNmNlM2M0ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CitEYXRlOiAgIEZyaSBBcHIgMTIgMTY6MTY6MjQgMjAxMyArMDIwMAorCisgICAgTWVyZ2UgYWNyb3NzIHRoZSByZW5hbWUKKworCitjb21taXQgNmNlM2M0ZmY2OTAxMzYwOTliYjE3ZTFhODc2NmI3NTc2NDcyNmVhNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ5OjUwIDIwMTMgKzAxMDAKKworICAgIGFub3RoZXIgc2ltcGxlIGNoYW5nZQorCitkaWZmIC0tZ2l0IGEvYi5jIGIvYi5jCistLS0gYS9iLmMKKysrKyBiL2IuYworQEAgLTQsMTQgKzQsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworLQkJeCA+Pj0gMTsKKysJCXggLz0gMjsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKworY29tbWl0IGJhMjI3YzY2MzIzNDk3MDBmYmI5NTdkZWMyYjUwZjVlMjM1OGJlM2YKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorRGF0ZTogICBGcmkgQXByIDEyIDE2OjE1OjU3IDIwMTMgKzAyMDAKKworICAgIGNoYW5nZSBvbiBhbm90aGVyIGxpbmUgb2YgaGlzdG9yeSB3aGlsZSByZW5hbWUgaGFwcGVucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTQgKzQsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKysgKiBUaGlzIGlzIG9ubHkgYSBzaG9ydCBleGFtcGxlIQorICAqLworIAorCitjb21taXQgMzliNmViMmQ1YjcwNmQzMzIyMTg0YTE2OWY2NjZmMjVlZDNmYmQwMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjQxIDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGNvbW1lbnQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogQSBjb21tZW50LgorKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxNCArMywxNCBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxMyArMywxNCBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTMgQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1mIGIvdC90NDIxMS9zaGExL2V4cGVjdC5zaW1wbGUtZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWY1YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGExL2V4cGVjdC5zaW1wbGUtZgpAQCAtMCwwICsxLDU5IEBACitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC5zaW1wbGUtZi10by1tYWluIGIvdC90NDIxMS9zaGExL2V4cGVjdC5zaW1wbGUtZi10by1tYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NzU3NjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1mLXRvLW1haW4KQEAgLTAsMCArMSwxMDAgQEAKK2NvbW1pdCAzOWI2ZWIyZDViNzA2ZDMzMjIxODRhMTY5ZjY2NmYyNWVkM2ZiZDAwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTQgKzMsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDEzICszLDE0IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMywxMyBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KKysKKysvKgorKyAqIEEgY29tbWVudC4KKysgKi8KKysKZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMS9leHBlY3Quc2ltcGxlLW1haW4gYi90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1tYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Y2UzOWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1tYWluCkBAIC0wLDAgKzEsNjggQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxNiw1IEBACisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC5zaW1wbGUtbWFpbi10by1lbmQgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnNpbXBsZS1tYWluLXRvLWVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDgwYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGExL2V4cGVjdC5zaW1wbGUtbWFpbi10by1lbmQKQEAgLTAsMCArMSw3MCBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNyBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxNiw1IEBACisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGExL2V4cGVjdC50d28tcmFuZ2VzIGIvdC90NDIxMS9zaGExL2V4cGVjdC50d28tcmFuZ2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDlhYTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnR3by1yYW5nZXMKQEAgLTAsMCArMSwxMDIgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDggKzMsOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMS9leHBlY3QudmFuaXNoZXMtZWFybHkgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnZhbmlzaGVzLWVhcmx5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmN2NkMDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTEvZXhwZWN0LnZhbmlzaGVzLWVhcmx5CkBAIC0wLDAgKzEsMzkgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIyLDEgKzI0LDEgQEAKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMiwxICsyMiwxIEBACistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsyMCwxIEBACisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGEyNTYvZXhwZWN0LmJlZ2lubmluZy1vZi1maWxlIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LmJlZ2lubmluZy1vZi1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZGZkZmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QuYmVnaW5uaW5nLW9mLWZpbGUKQEAgLTAsMCArMSw0MyBAQAorY29tbWl0IDYyYTQwYjM4ZmE0ZjAwODAwMDA0YWVlODFlZjI4N2I3MjAxMzE3NTk0ZWJjYjk5MGYzOGNiZTQ5M2IwMWQyMDAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0Nzo0MCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYXQgdmVyeSBiZWdpbm5pbmcKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xLDMgKzEsNCBAQAorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKyBsb25nIGYobG9uZyB4KQorCitjb21taXQgY2NmOTdiOTg3ODE4OWM0MGE5ODFkYTUwYjE1NzEzYmI4MGEzNTc1NTMyNjMyMGVjODA5MDBjYWYyMmNlZDQ2ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMSwzICsxLDMgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorCitjb21taXQgMWRkN2U5YjJiMTY5OTMyNGI1M2IzNDFlNzI4NjUzYjkxM2JjMTkyYTE0ZGZlYTE2OGM1YjUxZjJiM2QwMzU5MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxLDMgQEAKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQgZihpbnQgeCkKZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5lbmQtb2YtZmlsZSBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5lbmQtb2YtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2FiNWMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LmVuZC1vZi1maWxlCkBAIC0wLDAgKzEsNjIgQEAKK2NvbW1pdCA1NTI2ZWQwNWMyNDc2YjU2YWY4YjdiZTQ5OWU4Zjc4YmQ1MGY0OTA3NDA3MzNhOWNhN2UxZjU1ODc4ZmE5MGE5CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIwLDMgKzIwLDUgQEAKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDI5ZjMyYWMzMTQxYzQ4YjIyODAzZTVjNDEyN2I3MTk5MTdiNjdkMGY4Y2E4YzUyNDhiZWJmYTJhMTlmN2RhMTAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIwLDMgKzIwLDMgQEAKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgY2NmOTdiOTg3ODE4OWM0MGE5ODFkYTUwYjE1NzEzYmI4MGEzNTc1NTMyNjMyMGVjODA5MDBjYWYyMmNlZDQ2ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTksMyArMTksMyBAQAorLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMTgsMyBAQAorKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tb3ZlLXN1cHBvcnQtZiBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tb3ZlLXN1cHBvcnQtZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjNiNGVkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0Lm1vdmUtc3VwcG9ydC1mCkBAIC0wLDAgKzEsODAgQEAKK2NvbW1pdCA0ZjdhNTgxOTVhOTJjNDAwZTI4YTIzNTQzMjg1ODdmMWZmMTRmYjc3ZjVjZjg5NDUzNmYxN2NjYmM3MjkzMWI5CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDk6NTAgMjAxMyArMDEwMAorCisgICAgYW5vdGhlciBzaW1wbGUgY2hhbmdlCisKK2RpZmYgLS1naXQgYS9iLmMgYi9iLmMKKy0tLSBhL2IuYworKysrIGIvYi5jCitAQCAtNCw5ICs0LDkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworLQkJeCA+Pj0gMTsKKysJCXggLz0gMjsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBjY2Y5N2I5ODc4MTg5YzQwYTk4MWRhNTBiMTU3MTNiYjgwYTM1NzU1MzI2MzIwZWM4MDkwMGNhZjIyY2VkNDZmCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKworY29tbWl0IGY2NDM0YWNkMzQyNjBhNmM5ZjYxZTk2ZDk2YmY5YTMyM2QzMzA1NjFkZjViMWNhMjYzMTEwNGY4MjAyNmRmZWQKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw4ICszLDkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorCitjb21taXQgMWRkN2U5YjJiMTY5OTMyNGI1M2IzNDFlNzI4NjUzYjkxM2JjMTkyYTE0ZGZlYTE2OGM1YjUxZjJiM2QwMzU5MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3QubXVsdGlwbGUgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QubXVsdGlwbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwMDQwOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tdWx0aXBsZQpAQCAtMCwwICsxLDEwNCBAQAorY29tbWl0IDU1MjZlZDA1YzI0NzZiNTZhZjhiN2JlNDk5ZThmNzhiZDUwZjQ5MDc0MDczM2E5Y2E3ZTFmNTU4NzhmYTkwYTkKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNyBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMjlmMzJhYzMxNDFjNDhiMjI4MDNlNWM0MTI3YjcxOTkxN2I2N2QwZjhjYThjNTI0OGJlYmZhMmExOWY3ZGExMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBjY2Y5N2I5ODc4MTg5YzQwYTk4MWRhNTBiMTU3MTNiYjgwYTM1NzU1MzI2MzIwZWM4MDkwMGNhZjIyY2VkNDZmCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjY0MzRhY2QzNDI2MGE2YzlmNjFlOTZkOTZiZjlhMzIzZDMzMDU2MWRmNWIxY2EyNjMxMTA0ZjgyMDI2ZGZlZAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDggKzMsOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tdWx0aXBsZS1vdmVybGFwcGluZyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tdWx0aXBsZS1vdmVybGFwcGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE1YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0Lm11bHRpcGxlLW92ZXJsYXBwaW5nCkBAIC0wLDAgKzEsMTg3IEBACitjb21taXQgNTUyNmVkMDVjMjQ3NmI1NmFmOGI3YmU0OTllOGY3OGJkNTBmNDkwNzQwNzMzYTljYTdlMWY1NTg3OGZhOTBhOQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC00LDE5ICs0LDIxIEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAyOWYzMmFjMzE0MWM0OGIyMjgwM2U1YzQxMjdiNzE5OTE3YjY3ZDBmOGNhOGM1MjQ4YmViZmEyYTE5ZjdkYTEwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC00LDE5ICs0LDE5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IDVhMWIzOTg5MDYzZDU1ZTcxZTc2ODVlZmEzMzkyZjEzMzM4NWI0MDM0YmRkZGU1MzBkY2I1MDkwZDhiOGI4Y2EKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NTo0MSAyMDEzICswMTAwCisKKyAgICB0b3VjaCBjb21tZW50CisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOSArMywxOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorLSAqIEEgY29tbWVudC4KKysgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgY2NmOTdiOTg3ODE4OWM0MGE5ODFkYTUwYjE1NzEzYmI4MGEzNTc1NTMyNjMyMGVjODA5MDBjYWYyMmNlZDQ2ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOSArMywxOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBmNjQzNGFjZDM0MjYwYTZjOWY2MWU5NmQ5NmJmOWEzMjNkMzMwNTYxZGY1YjFjYTI2MzExMDRmODIwMjZkZmVkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTggKzMsMTkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMywxOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KKysKKysvKgorKyAqIEEgY29tbWVudC4KKysgKi8KKysKKytpbnQgbWFpbiAoKQorK3sKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3QubXVsdGlwbGUtc3VwZXJzZXQgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QubXVsdGlwbGUtc3VwZXJzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxNWE0NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5tdWx0aXBsZS1zdXBlcnNldApAQCAtMCwwICsxLDE4NyBAQAorY29tbWl0IDU1MjZlZDA1YzI0NzZiNTZhZjhiN2JlNDk5ZThmNzhiZDUwZjQ5MDc0MDczM2E5Y2E3ZTFmNTU4NzhmYTkwYTkKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwyMSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMjlmMzJhYzMxNDFjNDhiMjI4MDNlNWM0MTI3YjcxOTkxN2I2N2QwZjhjYThjNTI0OGJlYmZhMmExOWY3ZGExMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwxOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCA1YTFiMzk4OTA2M2Q1NWU3MWU3Njg1ZWZhMzM5MmYxMzMzODViNDAzNGJkZGRlNTMwZGNiNTA5MGQ4YjhiOGNhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjY0MzRhY2QzNDI2MGE2YzlmNjFlOTZkOTZiZjlhMzIzZDMzMDU2MWRmNWIxY2EyNjMxMTA0ZjgyMDI2ZGZlZAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE4ICszLDE5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnBhcmFsbGVsLWNoYW5nZS1mLXRvLW1haW4gYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QucGFyYWxsZWwtY2hhbmdlLWYtdG8tbWFpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjhmODkyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnBhcmFsbGVsLWNoYW5nZS1mLXRvLW1haW4KQEAgLTAsMCArMSwxNjAgQEAKK2NvbW1pdCA5ODExN2MyMDU5Yjc2YzM2OTk1NzQ4ZmI5N2IwMjU0MmFlZjQ3N2ZlMjYzNzllOTRjMThmZDcwZjc3OTBiYzY3CitNZXJnZTogYjUxMTY5NCA0ZjdhNTgxCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4KK0RhdGU6ICAgRnJpIEFwciAxMiAxNjoxNjoyNCAyMDEzICswMjAwCisKKyAgICBNZXJnZSBhY3Jvc3MgdGhlIHJlbmFtZQorCisKK2NvbW1pdCA0ZjdhNTgxOTVhOTJjNDAwZTI4YTIzNTQzMjg1ODdmMWZmMTRmYjc3ZjVjZjg5NDUzNmYxN2NjYmM3MjkzMWI5CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDk6NTAgMjAxMyArMDEwMAorCisgICAgYW5vdGhlciBzaW1wbGUgY2hhbmdlCisKK2RpZmYgLS1naXQgYS9iLmMgYi9iLmMKKy0tLSBhL2IuYworKysrIGIvYi5jCitAQCAtNCwxNCArNCwxNCBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CistCQl4ID4+PSAxOworKwkJeCAvPSAyOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorCitjb21taXQgYjUxMTY5NGY1MzM3NjYzZmJkNjk3NjIyOTkzYTVmOGUxMDk5ZWNhODRiZTRkZjMxM2YyYjNlZTk0YTA5OGI0MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CitEYXRlOiAgIEZyaSBBcHIgMTIgMTY6MTU6NTcgMjAxMyArMDIwMAorCisgICAgY2hhbmdlIG9uIGFub3RoZXIgbGluZSBvZiBoaXN0b3J5IHdoaWxlIHJlbmFtZSBoYXBwZW5zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxNCArNCwxNCBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorLSAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorKyAqIFRoaXMgaXMgb25seSBhIHNob3J0IGV4YW1wbGUhCisgICovCisgCisKK2NvbW1pdCA1YTFiMzk4OTA2M2Q1NWU3MWU3Njg1ZWZhMzM5MmYxMzMzODViNDAzNGJkZGRlNTMwZGNiNTA5MGQ4YjhiOGNhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTQgKzMsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisKK2NvbW1pdCBjY2Y5N2I5ODc4MTg5YzQwYTk4MWRhNTBiMTU3MTNiYjgwYTM1NzU1MzI2MzIwZWM4MDkwMGNhZjIyY2VkNDZmCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorCitjb21taXQgZjY0MzRhY2QzNDI2MGE2YzlmNjFlOTZkOTZiZjlhMzIzZDMzMDU2MWRmNWIxY2EyNjMxMTA0ZjgyMDI2ZGZlZAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDEzICszLDE0IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMywxMyBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KKysKKysvKgorKyAqIEEgY29tbWVudC4KKysgKi8KKysKZGlmZiAtLWdpdCBhL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5zaW1wbGUtZiBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5zaW1wbGUtZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTUwOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnNpbXBsZS1mCkBAIC0wLDAgKzEsNTkgQEAKK2NvbW1pdCBjY2Y5N2I5ODc4MTg5YzQwYTk4MWRhNTBiMTU3MTNiYjgwYTM1NzU1MzI2MzIwZWM4MDkwMGNhZjIyY2VkNDZmCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKworY29tbWl0IGY2NDM0YWNkMzQyNjBhNmM5ZjYxZTk2ZDk2YmY5YTMyM2QzMzA1NjFkZjViMWNhMjYzMTEwNGY4MjAyNmRmZWQKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw4ICszLDkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorCitjb21taXQgMWRkN2U5YjJiMTY5OTMyNGI1M2IzNDFlNzI4NjUzYjkxM2JjMTkyYTE0ZGZlYTE2OGM1YjUxZjJiM2QwMzU5MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLWYtdG8tbWFpbiBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC5zaW1wbGUtZi10by1tYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjcyMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLWYtdG8tbWFpbgpAQCAtMCwwICsxLDEwMCBAQAorY29tbWl0IDVhMWIzOTg5MDYzZDU1ZTcxZTc2ODVlZmEzMzkyZjEzMzM4NWI0MDM0YmRkZGU1MzBkY2I1MDkwZDhiOGI4Y2EKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NTo0MSAyMDEzICswMTAwCisKKyAgICB0b3VjaCBjb21tZW50CisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxNCArMywxNCBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorLSAqIEEgY29tbWVudC4KKysgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKworY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTQgKzMsMTQgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisKK2NvbW1pdCBmNjQzNGFjZDM0MjYwYTZjOWY2MWU5NmQ5NmJmOWEzMjNkMzMwNTYxZGY1YjFjYTI2MzExMDRmODIwMjZkZmVkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTMgKzMsMTQgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorCitjb21taXQgMWRkN2U5YjJiMTY5OTMyNGI1M2IzNDFlNzI4NjUzYjkxM2JjMTkyYTE0ZGZlYTE2OGM1YjUxZjJiM2QwMzU5MgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDEzIEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQorKworKy8qCisrICogQSBjb21tZW50LgorKyAqLworKwpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnNpbXBsZS1tYWluIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnNpbXBsZS1tYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDcwOGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLW1haW4KQEAgLTAsMCArMSw2OCBAQAorY29tbWl0IDU1MjZlZDA1YzI0NzZiNTZhZjhiN2JlNDk5ZThmNzhiZDUwZjQ5MDc0MDczM2E5Y2E3ZTFmNTU4NzhmYTkwYTkKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisKK2NvbW1pdCAyOWYzMmFjMzE0MWM0OGIyMjgwM2U1YzQxMjdiNzE5OTE3YjY3ZDBmOGNhOGM1MjQ4YmViZmEyYTE5ZjdkYTEwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE3LDUgKzE3LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzE2LDUgQEAKKytpbnQgbWFpbiAoKQorK3sKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3Quc2ltcGxlLW1haW4tdG8tZW5kIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnNpbXBsZS1tYWluLXRvLWVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTdjZGYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnNpbXBsZS1tYWluLXRvLWVuZApAQCAtMCwwICsxLDcwIEBACitjb21taXQgNTUyNmVkMDVjMjQ3NmI1NmFmOGI3YmU0OTllOGY3OGJkNTBmNDkwNzQwNzMzYTljYTdlMWY1NTg3OGZhOTBhOQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw3IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAyOWYzMmFjMzE0MWM0OGIyMjgwM2U1YzQxMjdiNzE5OTE3YjY3ZDBmOGNhOGM1MjQ4YmViZmEyYTE5ZjdkYTEwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE3LDUgKzE3LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzE2LDUgQEAKKytpbnQgbWFpbiAoKQorK3sKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL3NoYTI1Ni9leHBlY3QudHdvLXJhbmdlcyBiL3QvdDQyMTEvc2hhMjU2L2V4cGVjdC50d28tcmFuZ2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTdjOGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QudHdvLXJhbmdlcwpAQCAtMCwwICsxLDEwMiBAQAorY29tbWl0IDU1MjZlZDA1YzI0NzZiNTZhZjhiN2JlNDk5ZThmNzhiZDUwZjQ5MDc0MDczM2E5Y2E3ZTFmNTU4NzhmYTkwYTkKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisKK2NvbW1pdCAyOWYzMmFjMzE0MWM0OGIyMjgwM2U1YzQxMjdiNzE5OTE3YjY3ZDBmOGNhOGM1MjQ4YmViZmEyYTE5ZjdkYTEwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGNjZjk3Yjk4NzgxODljNDBhOTgxZGE1MGIxNTcxM2JiODBhMzU3NTUzMjYzMjBlYzgwOTAwY2FmMjJjZWQ0NmYKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOSArMyw5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorQEAgLTE3LDUgKzE3LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBmNjQzNGFjZDM0MjYwYTZjOWY2MWU5NmQ5NmJmOWEzMjNkMzMwNTYxZGY1YjFjYTI2MzExMDRmODIwMjZkZmVkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IDFkZDdlOWIyYjE2OTkzMjRiNTNiMzQxZTcyODY1M2I5MTNiYzE5MmExNGRmZWExNjhjNWI1MWYyYjNkMDM1OTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnZhbmlzaGVzLWVhcmx5IGIvdC90NDIxMS9zaGEyNTYvZXhwZWN0LnZhbmlzaGVzLWVhcmx5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZWM5YmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL3NoYTI1Ni9leHBlY3QudmFuaXNoZXMtZWFybHkKQEAgLTAsMCArMSwzOSBAQAorY29tbWl0IDU1MjZlZDA1YzI0NzZiNTZhZjhiN2JlNDk5ZThmNzhiZDUwZjQ5MDc0MDczM2E5Y2E3ZTFmNTU4NzhmYTkwYTkKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMjIsMSArMjQsMSBAQAorLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDI5ZjMyYWMzMTQxYzQ4YjIyODAzZTVjNDEyN2I3MTk5MTdiNjdkMGY4Y2E4YzUyNDhiZWJmYTJhMTlmN2RhMTAKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIyLDEgKzIyLDEgQEAKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCAxZGQ3ZTliMmIxNjk5MzI0YjUzYjM0MWU3Mjg2NTNiOTEzYmMxOTJhMTRkZmVhMTY4YzViNTFmMmIzZDAzNTkyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzIwLDEgQEAKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjEyLWxvZy1jb3JydXB0LnNoIGIvdC90NDIxMi1sb2ctY29ycnVwdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wM2I5NTJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMi1sb2ctY29ycnVwdC5zaApAQCAtMCwwICsxLDg4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxvZyB3aXRoIGludmFsaWQgY29tbWl0IGhlYWRlcnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGZvbyAmJgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwKKwlzZWQgIi9eYXV0aG9yIC9zLz4vPi08Pi8iID5icm9rZW5fZW1haWwuY29tbWl0ICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBicm9rZW5fZW1haWwuY29tbWl0ID5icm9rZW5fZW1haWwuaGFzaCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYnJva2VuX2VtYWlsICQoY2F0IGJyb2tlbl9lbWFpbC5oYXNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgYnJva2VuIGNvbW1pdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCBpbnZhbGlkLmF1dGhvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyB3aXRoIGJyb2tlbiBhdXRob3IgZW1haWwnICcKKwl7CisJCWVjaG8gY29tbWl0ICQoY2F0IGJyb2tlbl9lbWFpbC5oYXNoKQorCQllY2hvICJBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IgorCQllY2hvICJEYXRlOiAgIFRodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwIgorCQllY2hvCisJCWVjaG8gIiAgICBmb28iCisJfSA+ZXhwZWN0Lm91dCAmJgorCisJZ2l0IGxvZyBicm9rZW5fZW1haWwgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisKKwl0ZXN0X2NtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tZm9ybWF0IHdpdGggYnJva2VuIGF1dGhvciBlbWFpbCcgJworCWVjaG8gIkEgVSBUaG9yK2F1dGhvckBleGFtcGxlLmNvbStUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMCIgPmV4cGVjdC5vdXQgJiYKKworCWdpdCBsb2cgLS1mb3JtYXQ9IiVhbislYWUrJWFkIiBicm9rZW5fZW1haWwgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisKKwl0ZXN0X2NtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCittdW5nZV9hdXRob3JfZGF0ZSAoKSB7CisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiID5jb21taXQub3JpZyAmJgorCXNlZCAicy9eXChhdXRob3IgLio+XCkgWzAtOV0qL1wxICQyLyIgPGNvbW1pdC5vcmlnID5jb21taXQubXVuZ2UgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IGNvbW1pdC5tdW5nZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhcnNhYmxlIGRhdGVzIHByb2R1Y2Ugc2VudGluZWwgdmFsdWUnICcKKwljb21taXQ9JChtdW5nZV9hdXRob3JfZGF0ZSBIRUFEIHRvdGFsbHlfYm9ndXMpICYmCisJZWNobyAiRGF0ZTogICBUaHUgSmFuIDEgMDA6MDA6MDAgMTk3MCArMDAwMCIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgJGNvbW1pdCA+YWN0dWFsLmZ1bGwgJiYKKwlncmVwIERhdGUgPGFjdHVhbC5mdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucGFyc2FibGUgZGF0ZXMgcHJvZHVjZSBzZW50aW5lbCB2YWx1ZSAoJWFkKScgJworCWNvbW1pdD0kKG11bmdlX2F1dGhvcl9kYXRlIEhFQUQgdG90YWxseV9ib2d1cykgJiYKKwllY2hvID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVhZCAkY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgZGF0ZSBpcyAyXjY0ICsgMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGF0ZSBwYXJzZXIgcmVjb2duaXplcyBpbnRlZ2VyIG92ZXJmbG93JyAnCisJY29tbWl0PSQobXVuZ2VfYXV0aG9yX2RhdGUgSEVBRCAxODQ0Njc0NDA3MzcwOTU1MTYxNykgJiYKKwllY2hvICJUaHUgSmFuIDEgMDA6MDA6MDAgMTk3MCArMDAwMCIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JWFkICRjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBkYXRlIGlzIDJeNjQgLSAyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkYXRlIHBhcnNlciByZWNvZ25pemVzIHRpbWVfdCBvdmVyZmxvdycgJworCWNvbW1pdD0kKG11bmdlX2F1dGhvcl9kYXRlIEhFQUQgMTg0NDY3NDQwNzM3MDk1NTE2MTQpICYmCisJZWNobyAiVGh1IEphbiAxIDAwOjAwOjAwIDE5NzAgKzAwMDAiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVhZCAkY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgZGF0ZSBpcyB3aXRoaW4gMl42My0xLCBidXQgZW5vdWdoIHRvIGNob2tlIGdsaWJjJ3MgZ210aW1lCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnN1cmRseSBmYXItaW4tZnV0dXJlIGRhdGUnICcKKwljb21taXQ9JChtdW5nZV9hdXRob3JfZGF0ZSBIRUFEIDk5OTk5OTk5OTk5OTk5OTk5OSkgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVhZCAkY29tbWl0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIxMy1sb2ctdGFiZXhwYW5kLnNoIGIvdC90NDIxMy1sb2ctdGFiZXhwYW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzYTRhZjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjEzLWxvZy10YWJleHBhbmQuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdsb2cvc2hvdyAtLWV4cGFuZC10YWJzJworCisuIC4vdGVzdC1saWIuc2gKKworSFQ9IgkiCit0aXRsZT0ndGFiIGluZGVudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aXRsZSBsaW5lJworYm9keT0ndGFiIGluZGVudCBvbiBhIGxpbmUgaW4gdGhlIGJvZHknCisKKyMgdXNhZ2U6IGNvdW50X2V4cGFuZCAkaW5kZW50ICRudW1TUCAkbnVtSFQgQGZvcm1hdF9hcmdzCitjb3VudF9leHBhbmQgKCkKK3sKKwlleHBlY3Q9CisJY291bnQ9JCgoICQxICsgJDIgKSkgOyMgZXhwZWN0ZWQgc3BhY2VzCisJd2hpbGUgdGVzdCAkY291bnQgLWd0IDAKKwlkbworCQlleHBlY3Q9IiRleHBlY3QgIgorCQljb3VudD0kKCggJGNvdW50IC0gMSApKQorCWRvbmUKKwlzaGlmdCAyCisJY291bnQ9JDEgOyMgZXhwZWN0ZWQgdGFicworCXdoaWxlIHRlc3QgJGNvdW50IC1ndCAwCisJZG8KKwkJZXhwZWN0PSIkZXhwZWN0JEhUIgorCQljb3VudD0kKCggJGNvdW50IC0gMSApKQorCWRvbmUKKwlzaGlmdAorCisJIyBUaGUgcmVtYWluZGVyIG9mIHRoZSBjb21tYW5kIGxpbmUgaXMgImdpdCBzaG93IC1zIiBvcHRpb25zCisJY2FzZSAiICQqICIgaW4KKwkqJyAtLXByZXR0eT1zaG9ydCAnKikKKwkJbGluZT0kdGl0bGUgOzsKKwkqKQorCQlsaW5lPSRib2R5IDs7CisJZXNhYworCisJIyBQcmVmaXggdGhlIG91dHB1dCB3aXRoIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBhbmQKKwkjIHJlcGxhY2UgU1Agd2l0aCBhIGRvdCBib3RoIGluIHRoZSBleHBlY3RlZCBhbmQgYWN0dWFsIG91dHB1dAorCSMgc28gdGhhdCB0ZXN0X2NtcCB3b3VsZCBzaG93IHRoZSBkaWZmZXJlbmNlIHRvZ2V0aGVyIHdpdGggdGhlCisJIyBicmVha2FnZSBpbiBhIHdheSBlYXNpZXIgdG8gY29uc3VtZSBieSB0aGUgZGVidWdnaW5nIHVzZXIuCisJeworCQllY2hvICJnaXQgc2hvdyAtcyAkKiIKKwkJZWNobyAiJGV4cGVjdCRsaW5lIgorCX0gfCBzZWQgLWUgJ3MvIC8uL2cnID5leHBlY3QKKworCXsKKwkJZWNobyAiZ2l0IHNob3cgLXMgJCoiCisJCWdpdCBzaG93IC1zICIkQCIgfAorCQlzZWQgLW4gLWUgIi8kbGluZVwkL3AiCisJfSB8IHNlZCAtZSAncy8gLy4vZycgPmFjdHVhbAorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGFuZCAoKQoreworCWZtdD0kMQorCWNhc2UgIiRmbXQiIGluCisJKj1yYXcgfCAqPXNob3J0IHwgKj1lbWFpbCkKKwkJZGVmYXVsdD0iMCAxIiA7OworCSopCisJCWRlZmF1bHQ9IjggMCIgOzsKKwllc2FjCisJY2FzZSAiJGZtdCIgaW4KKwkqPWVtYWlsKQorCQlpbj0wIDs7CisJKikKKwkJaW49NCA7OworCWVzYWMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJleHBhbmQvbm8tZXhwYW5kJHtmbXQ6KyBmb3IgJGZtdH0iICcKKwkJY291bnRfZXhwYW5kICRpbiAkZGVmYXVsdCAkZm10ICYmCisJCWNvdW50X2V4cGFuZCAkaW4gOCAwICRmbXQgLS1leHBhbmQtdGFicyAmJgorCQljb3VudF9leHBhbmQgJGluIDggMCAtLWV4cGFuZC10YWJzICRmbXQgJiYKKwkJY291bnRfZXhwYW5kICRpbiA4IDAgJGZtdCAtLWV4cGFuZC10YWJzPTggJiYKKwkJY291bnRfZXhwYW5kICRpbiA4IDAgLS1leHBhbmQtdGFicz04ICRmbXQgJiYKKwkJY291bnRfZXhwYW5kICRpbiAwIDEgJGZtdCAtLW5vLWV4cGFuZC10YWJzICYmCisJCWNvdW50X2V4cGFuZCAkaW4gMCAxIC0tbm8tZXhwYW5kLXRhYnMgJGZtdCAmJgorCQljb3VudF9leHBhbmQgJGluIDAgMSAkZm10IC0tZXhwYW5kLXRhYnM9MCAmJgorCQljb3VudF9leHBhbmQgJGluIDAgMSAtLWV4cGFuZC10YWJzPTAgJGZtdCAmJgorCQljb3VudF9leHBhbmQgJGluIDQgMCAkZm10IC0tZXhwYW5kLXRhYnM9NCAmJgorCQljb3VudF9leHBhbmQgJGluIDQgMCAtLWV4cGFuZC10YWJzPTQgJGZtdAorCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X3RpY2sgJiYKKwlzZWQgLWUgInMvUS8kSFQvZyIgPDwtRU9GID5tc2cgJiYKKwlRJHRpdGxlCisKKwlRJGJvZHkKKwlFT0YKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgbXNnCisnCisKK3Rlc3RfZXhwYW5kICIiCit0ZXN0X2V4cGFuZCAtLXByZXR0eQordGVzdF9leHBhbmQgLS1wcmV0dHk9c2hvcnQKK3Rlc3RfZXhwYW5kIC0tcHJldHR5PW1lZGl1bQordGVzdF9leHBhbmQgLS1wcmV0dHk9ZnVsbAordGVzdF9leHBhbmQgLS1wcmV0dHk9ZnVsbGVyCit0ZXN0X2V4cGFuZCAtLXByZXR0eT1yYXcKK3Rlc3RfZXhwYW5kIC0tcHJldHR5PWVtYWlsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIxNC1sb2ctZ3JhcGgtb2N0b3B1cy5zaCBiL3QvdDQyMTQtbG9nLWdyYXBoLW9jdG9wdXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTA4MDMyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTQtbG9nLWdyYXBoLW9jdG9wdXMuc2gKQEAgLTAsMCArMSwzNDcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbG9nIC0tZ3JhcGggb2Ygc2tld2VkIGxlZnQgb2N0b3B1cyBtZXJnZS4nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItbG9nLWdyYXBoLnNoCisKK3Rlc3RfY21wX2dyYXBoICgpIHsKKwljYXQgPmV4cGVjdCAmJgorCWxpYl90ZXN0X2NtcF9ncmFwaCAtLWNvbG9yPW5ldmVyIC0tZGF0ZS1vcmRlciAtLWZvcm1hdD0lcyAiJEAiCit9CisKK3Rlc3RfY21wX2NvbG9yZWRfZ3JhcGggKCkgeworCWxpYl90ZXN0X2NtcF9jb2xvcmVkX2dyYXBoIC0tZGF0ZS1vcmRlciAtLWZvcm1hdD0lcyAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBtZXJnZSBoaXN0b3J5JyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCWZvciBpIGluIDEgMiAzIDQgOyBkbworCQlnaXQgY2hlY2tvdXQgbWFzdGVyIC1iICRpIHx8IHJldHVybiAkPworCQkjIE1ha2UgdGFnIG5hbWUgZGlmZmVyZW50IGZyb20gYnJhbmNoIG5hbWUsIHRvIGF2b2lkCisJCSMgYW1iaWd1aXR5IGVycm9yIHdoZW4gY2FsbGluZyBjaGVja291dC4KKwkJdGVzdF9jb21taXQgJGkgJGkgJGkgdGFnJGkgfHwgcmV0dXJuICQ/CisJZG9uZSAmJgorCWdpdCBjaGVja291dCAxIC1iIG1lcmdlICYmCisJdGVzdF9tZXJnZSBvY3RvcHVzLW1lcmdlIDEgMiAzIDQgJiYKKwl0ZXN0X2NvbW1pdCBhZnRlci1tZXJnZSAmJgorCWdpdCBjaGVja291dCAxIC1iIEwgJiYKKwl0ZXN0X2NvbW1pdCBsZWZ0ICYmCisJZ2l0IGNoZWNrb3V0IDQgLWIgY3Jvc3NvdmVyICYmCisJdGVzdF9jb21taXQgYWZ0ZXItNCAmJgorCWdpdCBjaGVja291dCBpbml0aWFsIC1iIG1vcmUtTCAmJgorCXRlc3RfY29tbWl0IGFmdGVyLWluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCB0cmlja3kgb2N0b3B1cyBtZXJnZSwgbm8gY29sb3InICcKKwl0ZXN0X2NtcF9ncmFwaCBsZWZ0IG9jdG9wdXMtbWVyZ2UgPDwtXEVPRgorCSogbGVmdAorCXwgKi0uICAgb2N0b3B1cy1tZXJnZQorCXwvfFwgXAorCXwgfCB8ICogNAorCXwgfCAqIHwgMworCXwgfCB8LworCXwgKiAvIDIKKwl8IHwvCisJKiAvIDEKKwl8LworCSogaW5pdGlhbAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHRyaWNreSBvY3RvcHVzIG1lcmdlIHdpdGggY29sb3JzJyAnCisJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKKwljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgorCSogbGVmdAorCTxSRUQ+fDxSRVNFVD4gKjxNQUdFTlRBPi08UkVTRVQ+PE1BR0VOVEE+LjxSRVNFVD4gICBvY3RvcHVzLW1lcmdlCisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+PEJMVUU+XDxSRVNFVD4gPE1BR0VOVEE+XDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gKiA0CisJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+ICogPE1BR0VOVEE+fDxSRVNFVD4gMworCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiA8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+CisJPFJFRD58PFJFU0VUPiAqIDxNQUdFTlRBPi88UkVTRVQ+IDIKKwk8UkVEPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KKwkqIDxNQUdFTlRBPi88UkVTRVQ+IDEKKwk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+CisJKiBpbml0aWFsCisJRU9GCisJdGVzdF9jbXBfY29sb3JlZF9ncmFwaCBsZWZ0IG9jdG9wdXMtbWVyZ2UKKycKKworIyBSZXBlYXQgdGhlIHByZXZpb3VzIHR3byB0ZXN0cyB3aXRoICJub3JtYWwiIG9jdG9wdXMgbWVyZ2UgKGkuZS4sCisjIHdpdGhvdXQgdGhlIGZpcnN0IHBhcmVudCBza2V3aW5nIHRvIHRoZSAibGVmdCIgYnJhbmNoIGNvbHVtbikuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbm9ybWFsIG9jdG9wdXMgbWVyZ2UsIG5vIGNvbG9yJyAnCisJdGVzdF9jbXBfZ3JhcGggb2N0b3B1cy1tZXJnZSA8PC1cRU9GCisJKi0tLS4gICBvY3RvcHVzLW1lcmdlCisJfFwgXCBcCisJfCB8IHwgKiA0CisJfCB8ICogfCAzCisJfCB8IHwvCisJfCAqIC8gMgorCXwgfC8KKwkqIC8gMQorCXwvCisJKiBpbml0aWFsCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbm9ybWFsIG9jdG9wdXMgbWVyZ2Ugd2l0aCBjb2xvcnMnICcKKwljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgorCSo8WUVMTE9XPi08UkVTRVQ+PFlFTExPVz4tPFJFU0VUPjxCTFVFPi08UkVTRVQ+PEJMVUU+LjxSRVNFVD4gICBvY3RvcHVzLW1lcmdlCisJPFJFRD58PFJFU0VUPjxHUkVFTj5cPFJFU0VUPiA8WUVMTE9XPlw8UkVTRVQ+IDxCTFVFPlw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDQKKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiAqIDxCTFVFPnw8UkVTRVQ+IDMKKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiA8QkxVRT58PFJFU0VUPjxCTFVFPi88UkVTRVQ+CisJPFJFRD58PFJFU0VUPiAqIDxCTFVFPi88UkVTRVQ+IDIKKwk8UkVEPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+PEJMVUU+LzxSRVNFVD4KKwkqIDxCTFVFPi88UkVTRVQ+IDEKKwk8QkxVRT58PFJFU0VUPjxCTFVFPi88UkVTRVQ+CisJKiBpbml0aWFsCisJRU9GCisJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKKwl0ZXN0X2NtcF9jb2xvcmVkX2dyYXBoIG9jdG9wdXMtbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBub3JtYWwgb2N0b3B1cyBtZXJnZSBhbmQgY2hpbGQsIG5vIGNvbG9yJyAnCisJdGVzdF9jbXBfZ3JhcGggYWZ0ZXItbWVyZ2UgPDwtXEVPRgorCSogYWZ0ZXItbWVyZ2UKKwkqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKKwl8XCBcIFwKKwl8IHwgfCAqIDQKKwl8IHwgKiB8IDMKKwl8IHwgfC8KKwl8ICogLyAyCisJfCB8LworCSogLyAxCisJfC8KKwkqIGluaXRpYWwKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBub3JtYWwgb2N0b3B1cyBhbmQgY2hpbGQgbWVyZ2Ugd2l0aCBjb2xvcnMnICcKKwljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgorCSogYWZ0ZXItbWVyZ2UKKwkqPEJMVUU+LTxSRVNFVD48QkxVRT4tPFJFU0VUPjxNQUdFTlRBPi08UkVTRVQ+PE1BR0VOVEE+LjxSRVNFVD4gICBvY3RvcHVzLW1lcmdlCisJPEdSRUVOPnw8UkVTRVQ+PFlFTExPVz5cPFJFU0VUPiA8QkxVRT5cPFJFU0VUPiA8TUFHRU5UQT5cPFJFU0VUPgorCTxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+ICogNAorCTxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+ICogPE1BR0VOVEE+fDxSRVNFVD4gMworCTxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KKwk8R1JFRU4+fDxSRVNFVD4gKiA8TUFHRU5UQT4vPFJFU0VUPiAyCisJPEdSRUVOPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KKwkqIDxNQUdFTlRBPi88UkVTRVQ+IDEKKwk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+CisJKiBpbml0aWFsCisJRU9GCisJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKKwl0ZXN0X2NtcF9jb2xvcmVkX2dyYXBoIGFmdGVyLW1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggdHJpY2t5IG9jdG9wdXMgbWVyZ2UgYW5kIGl0cyBjaGlsZCwgbm8gY29sb3InICcKKwl0ZXN0X2NtcF9ncmFwaCBsZWZ0IGFmdGVyLW1lcmdlIDw8LVxFT0YKKwkqIGxlZnQKKwl8ICogYWZ0ZXItbWVyZ2UKKwl8ICotLiAgIG9jdG9wdXMtbWVyZ2UKKwl8L3xcIFwKKwl8IHwgfCAqIDQKKwl8IHwgKiB8IDMKKwl8IHwgfC8KKwl8ICogLyAyCisJfCB8LworCSogLyAxCisJfC8KKwkqIGluaXRpYWwKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCB0cmlja3kgb2N0b3B1cyBtZXJnZSBhbmQgaXRzIGNoaWxkIHdpdGggY29sb3JzJyAnCisJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKKwljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgorCSogbGVmdAorCTxSRUQ+fDxSRVNFVD4gKiBhZnRlci1tZXJnZQorCTxSRUQ+fDxSRVNFVD4gKjxDWUFOPi08UkVTRVQ+PENZQU4+LjxSRVNFVD4gICBvY3RvcHVzLW1lcmdlCisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD48QkxVRT58PFJFU0VUPjxNQUdFTlRBPlw8UkVTRVQ+IDxDWUFOPlw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiA8TUFHRU5UQT58PFJFU0VUPiAqIDQKKwk8UkVEPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+ICogPENZQU4+fDxSRVNFVD4gMworCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gKiA8Q1lBTj4vPFJFU0VUPiAyCisJPFJFRD58PFJFU0VUPiA8Q1lBTj58PFJFU0VUPjxDWUFOPi88UkVTRVQ+CisJKiA8Q1lBTj4vPFJFU0VUPiAxCisJPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPgorCSogaW5pdGlhbAorCUVPRgorCXRlc3RfY21wX2NvbG9yZWRfZ3JhcGggbGVmdCBhZnRlci1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGNyb3Nzb3ZlciBpbiBvY3RvcHVzIG1lcmdlLCBubyBjb2xvcicgJworCXRlc3RfY21wX2dyYXBoIGFmdGVyLTQgb2N0b3B1cy1tZXJnZSA8PC1cRU9GCisJKiBhZnRlci00CisJfCAqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKKwl8IHxcIFwgXAorCXwgfF98X3wvCisJfC98IHwgfAorCSogfCB8IHwgNAorCXwgfCB8ICogMworCXwgfF98LworCXwvfCB8CisJfCB8ICogMgorCXwgfC8KKwl8L3wKKwl8ICogMQorCXwvCisJKiBpbml0aWFsCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggY3Jvc3NvdmVyIGluIG9jdG9wdXMgbWVyZ2Ugd2l0aCBjb2xvcnMnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgorCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCisJKiBhZnRlci00CisJPFJFRD58PFJFU0VUPiAqPEJMVUU+LTxSRVNFVD48QkxVRT4tPFJFU0VUPjxSRUQ+LTxSRVNFVD48UkVEPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+PFlFTExPVz5cPFJFU0VUPiA8QkxVRT5cPFJFU0VUPiA8UkVEPlw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD48UkVEPl88UkVTRVQ+PFlFTExPVz58PFJFU0VUPjxSRUQ+XzxSRVNFVD48QkxVRT58PFJFU0VUPjxSRUQ+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+CisJKiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiA0CisJPE1BR0VOVEE+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gKiAzCisJPE1BR0VOVEE+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+PE1BR0VOVEE+XzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KKwk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+PEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4KKwk8TUFHRU5UQT58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gKiAyCisJPE1BR0VOVEE+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KKwk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+PEdSRUVOPnw8UkVTRVQ+CisJPE1BR0VOVEE+fDxSRVNFVD4gKiAxCisJPE1BR0VOVEE+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgorCSogaW5pdGlhbAorCUVPRgorCXRlc3RfY21wX2NvbG9yZWRfZ3JhcGggYWZ0ZXItNCBvY3RvcHVzLW1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggY3Jvc3NvdmVyIGluIG9jdG9wdXMgbWVyZ2UgYW5kIGl0cyBjaGlsZCwgbm8gY29sb3InICcKKwl0ZXN0X2NtcF9ncmFwaCBhZnRlci00IGFmdGVyLW1lcmdlIDw8LVxFT0YKKwkqIGFmdGVyLTQKKwl8ICogYWZ0ZXItbWVyZ2UKKwl8ICotLS0uICAgb2N0b3B1cy1tZXJnZQorCXwgfFwgXCBcCisJfCB8X3xffC8KKwl8L3wgfCB8CisJKiB8IHwgfCA0CisJfCB8IHwgKiAzCisJfCB8X3wvCisJfC98IHwKKwl8IHwgKiAyCisJfCB8LworCXwvfAorCXwgKiAxCisJfC8KKwkqIGluaXRpYWwKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSBhbmQgaXRzIGNoaWxkIHdpdGggY29sb3JzJyAnCisJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKKwljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgorCSogYWZ0ZXItNAorCTxSRUQ+fDxSRVNFVD4gKiBhZnRlci1tZXJnZQorCTxSRUQ+fDxSRVNFVD4gKjxNQUdFTlRBPi08UkVTRVQ+PE1BR0VOVEE+LTxSRVNFVD48UkVEPi08UkVTRVQ+PFJFRD4uPFJFU0VUPiAgIG9jdG9wdXMtbWVyZ2UKKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD48QkxVRT5cPFJFU0VUPiA8TUFHRU5UQT5cPFJFU0VUPiA8UkVEPlw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+PFJFRD5fPFJFU0VUPjxCTFVFPnw8UkVTRVQ+PFJFRD5fPFJFU0VUPjxNQUdFTlRBPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiA8TUFHRU5UQT58PFJFU0VUPgorCSogPFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiA8TUFHRU5UQT58PFJFU0VUPiA0CisJPENZQU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiAqIDMKKwk8Q1lBTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+PENZQU4+XzxSRVNFVD48QkxVRT58PFJFU0VUPjxDWUFOPi88UkVTRVQ+CisJPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4KKwk8Q1lBTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+ICogMgorCTxDWUFOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPgorCTxDWUFOPnw8UkVTRVQ+PENZQU4+LzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+CisJPENZQU4+fDxSRVNFVD4gKiAxCisJPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPgorCSogaW5pdGlhbAorCUVPRgorCXRlc3RfY21wX2NvbG9yZWRfZ3JhcGggYWZ0ZXItNCBhZnRlci1tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHVucmVsYXRlZCBjb21taXQgYW5kIG9jdG9wdXMgdGlwLCBubyBjb2xvcicgJworCXRlc3RfY21wX2dyYXBoIGFmdGVyLWluaXRpYWwgb2N0b3B1cy1tZXJnZSA8PC1cRU9GCisJKiBhZnRlci1pbml0aWFsCisJfCAqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKKwl8IHxcIFwgXAorCXwgfCB8IHwgKiA0CisJfCB8X3xffC8KKwl8L3wgfCB8CisJfCB8IHwgKiAzCisJfCB8X3wvCisJfC98IHwKKwl8IHwgKiAyCisJfCB8LworCXwvfAorCXwgKiAxCisJfC8KKwkqIGluaXRpYWwKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCB1bnJlbGF0ZWQgY29tbWl0IGFuZCBvY3RvcHVzIHRpcCB3aXRoIGNvbG9ycycgJworCXRlc3RfY29uZmlnIGxvZy5ncmFwaENvbG9ycyByZWQsZ3JlZW4seWVsbG93LGJsdWUsbWFnZW50YSxjeWFuICYmCisJY2F0ID5leHBlY3QuY29sb3JzIDw8LVxFT0YgJiYKKwkqIGFmdGVyLWluaXRpYWwKKwk8UkVEPnw8UkVTRVQ+ICo8QkxVRT4tPFJFU0VUPjxCTFVFPi08UkVTRVQ+PE1BR0VOVEE+LTxSRVNFVD48TUFHRU5UQT4uPFJFU0VUPiAgIG9jdG9wdXMtbWVyZ2UKKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPjxZRUxMT1c+XDxSRVNFVD4gPEJMVUU+XDxSRVNFVD4gPE1BR0VOVEE+XDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+ICogNAorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+PFJFRD5fPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD48UkVEPl88UkVTRVQ+PEJMVUU+fDxSRVNFVD48UkVEPi88UkVTRVQ+CisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD48R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gKiAzCisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD48UkVEPl88UkVTRVQ+PFlFTExPVz58PFJFU0VUPjxSRUQ+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gKiAyCisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD48UkVEPi88UkVTRVQ+CisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD48R1JFRU4+fDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+ICogMQorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+CisJKiBpbml0aWFsCisJRU9GCisJdGVzdF9jbXBfY29sb3JlZF9ncmFwaCBhZnRlci1pbml0aWFsIG9jdG9wdXMtbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCB1bnJlbGF0ZWQgY29tbWl0IGFuZCBvY3RvcHVzIGNoaWxkLCBubyBjb2xvcicgJworCXRlc3RfY21wX2dyYXBoIGFmdGVyLWluaXRpYWwgYWZ0ZXItbWVyZ2UgPDwtXEVPRgorCSogYWZ0ZXItaW5pdGlhbAorCXwgKiBhZnRlci1tZXJnZQorCXwgKi0tLS4gICBvY3RvcHVzLW1lcmdlCisJfCB8XCBcIFwKKwl8IHwgfCB8ICogNAorCXwgfF98X3wvCisJfC98IHwgfAorCXwgfCB8ICogMworCXwgfF98LworCXwvfCB8CisJfCB8ICogMgorCXwgfC8KKwl8L3wKKwl8ICogMQorCXwvCisJKiBpbml0aWFsCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggdW5yZWxhdGVkIGNvbW1pdCBhbmQgb2N0b3B1cyBjaGlsZCB3aXRoIGNvbG9ycycgJworCXRlc3RfY29uZmlnIGxvZy5ncmFwaENvbG9ycyByZWQsZ3JlZW4seWVsbG93LGJsdWUsbWFnZW50YSxjeWFuICYmCisJY2F0ID5leHBlY3QuY29sb3JzIDw8LVxFT0YgJiYKKwkqIGFmdGVyLWluaXRpYWwKKwk8UkVEPnw8UkVTRVQ+ICogYWZ0ZXItbWVyZ2UKKwk8UkVEPnw8UkVTRVQ+ICo8TUFHRU5UQT4tPFJFU0VUPjxNQUdFTlRBPi08UkVTRVQ+PENZQU4+LTxSRVNFVD48Q1lBTj4uPFJFU0VUPiAgIG9jdG9wdXMtbWVyZ2UKKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD48QkxVRT5cPFJFU0VUPiA8TUFHRU5UQT5cPFJFU0VUPiA8Q1lBTj5cPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiA8TUFHRU5UQT58PFJFU0VUPiAqIDQKKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD48UkVEPl88UkVTRVQ+PEJMVUU+fDxSRVNFVD48UkVEPl88UkVTRVQ+PE1BR0VOVEE+fDxSRVNFVD48UkVEPi88UkVTRVQ+CisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+ICogMworCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPjxSRUQ+XzxSRVNFVD48QkxVRT58PFJFU0VUPjxSRUQ+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gKiAyCisJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPgorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PFlFTExPVz58PFJFU0VUPgorCTxSRUQ+fDxSRVNFVD4gKiAxCisJPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD4KKwkqIGluaXRpYWwKKwlFT0YKKwl0ZXN0X2NtcF9jb2xvcmVkX2dyYXBoIGFmdGVyLWluaXRpYWwgYWZ0ZXItbWVyZ2UKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjE1LWxvZy1za2V3ZWQtbWVyZ2VzLnNoIGIvdC90NDIxNS1sb2ctc2tld2VkLW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOGQwNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxNS1sb2ctc2tld2VkLW1lcmdlcy5zaApAQCAtMCwwICsxLDM3MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBsb2cgLS1ncmFwaCBvZiBza2V3ZWQgbWVyZ2VzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWxvZy1ncmFwaC5zaAorCitjaGVja19ncmFwaCAoKSB7CisJY2F0ID5leHBlY3QgJiYKKwlsaWJfdGVzdF9jbXBfZ3JhcGggLS1mb3JtYXQ9JXMgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlIGZ1c2luZyB3aXRoIGl0cyBsZWZ0IGFuZCByaWdodCBuZWlnaGJvcnMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gX3AgJiYKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBjaGVja291dCAtYiBfcSBAXiAmJiB0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGNoZWNrb3V0IC1iIF9yIEBeICYmIHRlc3RfY29tbWl0IEQgJiYKKwlnaXQgY2hlY2tvdXQgX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgX3EgX3IgLW0gRSAmJgorCWdpdCBjaGVja291dCBfciAmJiB0ZXN0X2NvbW1pdCBGICYmCisJZ2l0IGNoZWNrb3V0IF9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIF9yIC1tIEcgJiYKKwlnaXQgY2hlY2tvdXQgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIF9wIC1tIEggJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgSAorCXxcCisJfCAqICAgRworCXwgfFwKKwl8IHwgKiBGCisJfCAqIHwgRQorCXwvfFx8CisJfCB8ICogRAorCXwgKiB8IEMKKwl8IHwvCisJKiAvIEIKKwl8LworCSogQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGxlZnQtc2tld2VkIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIDBfcCAmJiB0ZXN0X2NvbW1pdCAwX0EgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMF9xIDBfcCAmJiB0ZXN0X2NvbW1pdCAwX0IgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMF9yIDBfcCAmJgorCXRlc3RfY29tbWl0IDBfQyAmJgorCXRlc3RfY29tbWl0IDBfRCAmJgorCWdpdCBjaGVja291dCAtYiAwX3MgMF9wICYmIHRlc3RfY29tbWl0IDBfRSAmJgorCWdpdCBjaGVja291dCAtYiAwX3QgMF9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDBfcl4gMF9zIC1tIDBfRiAmJgorCWdpdCBjaGVja291dCAwX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMF9zIC1tIDBfRyAmJgorCWdpdCBjaGVja291dCBAXiAmJiBnaXQgbWVyZ2UgLS1uby1mZiAwX3EgMF9yIDBfdCAwX3AgLW0gMF9IICYmCisKKwljaGVja19ncmFwaCA8PC1cRU9GCisJKi0tLS0tLiAgIDBfSAorCXxcIFwgXCBcCisJfCB8IHwgfCAqIDBfRworCXwgfF98X3wvfAorCXwvfCB8IHwgfAorCXwgfCB8ICogfCAwX0YKKwl8IHxffC98XHwKKwl8L3wgfCB8IHwKKwl8IHwgfCB8ICogMF9FCisJfCB8X3xffC8KKwl8L3wgfCB8CisJfCB8ICogfCAwX0QKKwl8IHwgfC8KKwl8IHwgKiAwX0MKKwl8IHwvCisJfC98CisJfCAqIDBfQgorCXwvCisJKiAwX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBuZXN0ZWQgbGVmdC1za2V3ZWQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gMV9wICYmCisJdGVzdF9jb21taXQgMV9BICYmCisJdGVzdF9jb21taXQgMV9CICYmCisJdGVzdF9jb21taXQgMV9DICYmCisJZ2l0IGNoZWNrb3V0IC1iIDFfcSBAXiAmJiB0ZXN0X2NvbW1pdCAxX0QgJiYKKwlnaXQgY2hlY2tvdXQgMV9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfcSAtbSAxX0UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMV9yIEB+MyAmJiB0ZXN0X2NvbW1pdCAxX0YgJiYKKwlnaXQgY2hlY2tvdXQgMV9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfciAtbSAxX0cgJiYKKwlnaXQgY2hlY2tvdXQgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfcCAtbSAxX0ggJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgMV9ICisJfFwKKwl8ICogICAxX0cKKwl8IHxcCisJfCB8ICogMV9GCisJfCAqIHwgMV9FCisJfC98IHwKKwl8ICogfCAxX0QKKwkqIHwgfCAxX0MKKwl8LyAvCisJKiAvIDFfQgorCXwvCisJKiAxX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBuZXN0ZWQgbGVmdC1za2V3ZWQgbWVyZ2UgZm9sbG93aW5nIG5vcm1hbCBtZXJnZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiAyX3AgJiYKKwl0ZXN0X2NvbW1pdCAyX0EgJiYKKwl0ZXN0X2NvbW1pdCAyX0IgJiYKKwl0ZXN0X2NvbW1pdCAyX0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMl9xIEBeXiAmJgorCXRlc3RfY29tbWl0IDJfRCAmJgorCXRlc3RfY29tbWl0IDJfRSAmJgorCWdpdCBjaGVja291dCAtYiAyX3IgQF4gJiYgdGVzdF9jb21taXQgMl9GICYmCisJZ2l0IGNoZWNrb3V0IDJfcSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDJfciAtbSAyX0cgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAyX3BeIC1tIDJfSCAmJgorCWdpdCBjaGVja291dCAtYiAyX3MgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIDJfcSAtbSAyX0ogJiYKKwlnaXQgY2hlY2tvdXQgMl9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDJfcyAtbSAyX0sgJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgMl9LCisJfFwKKwl8ICogICAyX0oKKwl8IHxcCisJfCB8ICogICAyX0gKKwl8IHwgfFwKKwl8IHwgKiB8IDJfRworCXwgfC98IHwKKwl8IHwgKiB8IDJfRgorCXwgKiB8IHwgMl9FCisJfCB8LyAvCisJfCAqIHwgMl9ECisJKiB8IHwgMl9DCisJfCB8LworCXwvfAorCSogfCAyX0IKKwl8LworCSogMl9BCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbmVzdGVkIHJpZ2h0LXNrZXdlZCBtZXJnZSBmb2xsb3dpbmcgbGVmdC1za2V3ZWQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gM19wICYmCisJdGVzdF9jb21taXQgM19BICYmCisJZ2l0IGNoZWNrb3V0IC1iIDNfcSAmJgorCXRlc3RfY29tbWl0IDNfQiAmJgorCXRlc3RfY29tbWl0IDNfQyAmJgorCWdpdCBjaGVja291dCAtYiAzX3IgQF4gJiYKKwl0ZXN0X2NvbW1pdCAzX0QgJiYKKwlnaXQgY2hlY2tvdXQgM19xICYmIGdpdCBtZXJnZSAtLW5vLWZmIDNfciAtbSAzX0UgJiYKKwlnaXQgY2hlY2tvdXQgM19wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDNfcSAtbSAzX0YgJiYKKwlnaXQgY2hlY2tvdXQgM19yICYmIHRlc3RfY29tbWl0IDNfRyAmJgorCWdpdCBjaGVja291dCAzX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19yIC1tIDNfSCAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19wIC1tIDNfSiAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICAzX0oKKwl8XAorCXwgKiAgIDNfSAorCXwgfFwKKwl8IHwgKiAzX0cKKwl8ICogfCAzX0YKKwl8L3wgfAorCXwgKiB8IDNfRQorCXwgfFx8CisJfCB8ICogM19ECisJfCAqIHwgM19DCisJfCB8LworCXwgKiAzX0IKKwl8LworCSogM19BCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggcmlnaHQtc2tld2VkIG1lcmdlIGZvbGxvd2luZyBhIGxlZnQtc2tld2VkIG9uZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiA0X3AgJiYKKwl0ZXN0X2NvbW1pdCA0X0EgJiYKKwl0ZXN0X2NvbW1pdCA0X0IgJiYKKwl0ZXN0X2NvbW1pdCA0X0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNF9xIEBeXiAmJiB0ZXN0X2NvbW1pdCA0X0QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNF9yIDRfcF4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgNF9xIC1tIDRfRSAmJgorCWdpdCBjaGVja291dCAtYiA0X3MgNF9wXl4gJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA0X3IgLW0gNF9GICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNF9wIC1tIDRfRyAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgNF9zIC1tIDRfSCAmJgorCisJY2hlY2tfZ3JhcGggLS1kYXRlLW9yZGVyIDw8LVxFT0YKKwkqICAgNF9ICisJfFwKKwl8ICogICA0X0cKKwl8IHxcCisJfCAqIHwgNF9GCisJfC98IHwKKwl8ICogfCAgIDRfRQorCXwgfFwgXAorCXwgfCAqIHwgNF9ECisJfCB8LyAvCisJfC98IHwKKwl8IHwgKiA0X0MKKwl8IHwvCisJfCAqIDRfQgorCXwvCisJKiA0X0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBvY3RvcHVzIG1lcmdlIHdpdGggY29sdW1uIGpvaW5pbmcgaXRzIHBlbnVsdGltYXRlIHBhcmVudCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiA1X3AgJiYKKwl0ZXN0X2NvbW1pdCA1X0EgJiYKKwlnaXQgYnJhbmNoIDVfcSAmJgorCWdpdCBicmFuY2ggNV9yICYmCisJdGVzdF9jb21taXQgNV9CICYmCisJZ2l0IGNoZWNrb3V0IDVfcSAmJiB0ZXN0X2NvbW1pdCA1X0MgJiYKKwlnaXQgY2hlY2tvdXQgNV9yICYmIHRlc3RfY29tbWl0IDVfRCAmJgorCWdpdCBjaGVja291dCA1X3AgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA1X3EgNV9yIC1tIDVfRSAmJgorCWdpdCBjaGVja291dCA1X3EgJiYgdGVzdF9jb21taXQgNV9GICYmCisJZ2l0IGNoZWNrb3V0IC1iIDVfcyA1X3BeICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNV9wIDVfcSAtbSA1X0cgJiYKKwlnaXQgY2hlY2tvdXQgNV9yICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNV9zIC1tIDVfSCAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICA1X0gKKwl8XAorCXwgKi0uICAgNV9HCisJfCB8XCBcCisJfCB8IHwgKiA1X0YKKwl8IHwgKiB8ICAgNV9FCisJfCB8L3xcIFwKKwl8IHxffC8gLworCXwvfCB8IC8KKwl8IHwgfC8KKwkqIHwgfCA1X0QKKwl8IHwgKiA1X0MKKwl8IHwvCisJfC98CisJfCAqIDVfQgorCXwvCisJKiA1X0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBtdWx0aXBsZSB0aXBzJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIDZfMSAmJgorCXRlc3RfY29tbWl0IDZfQSAmJgorCWdpdCBicmFuY2ggNl8yICYmCisJZ2l0IGJyYW5jaCA2XzQgJiYKKwl0ZXN0X2NvbW1pdCA2X0IgJiYKKwlnaXQgYnJhbmNoIDZfMyAmJgorCXRlc3RfY29tbWl0IDZfQyAmJgorCWdpdCBjaGVja291dCA2XzIgJiYgdGVzdF9jb21taXQgNl9EICYmCisJZ2l0IGNoZWNrb3V0IDZfMyAmJiB0ZXN0X2NvbW1pdCA2X0UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNl81IDZfMSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDZfMiAtbSA2X0YgJiYKKwlnaXQgY2hlY2tvdXQgNl80ICYmIHRlc3RfY29tbWl0IDZfRyAmJgorCWdpdCBjaGVja291dCA2XzMgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA2XzQgLW0gNl9IICYmCisJZ2l0IGNoZWNrb3V0IDZfMSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDZfMiAtbSA2X0kgJiYKKworCWNoZWNrX2dyYXBoIDZfMSA2XzMgNl81IDw8LVxFT0YKKwkqICAgNl9JCisJfFwKKwl8IHwgKiAgIDZfSAorCXwgfCB8XAorCXwgfCB8ICogNl9HCisJfCB8ICogfCA2X0UKKwl8IHwgfCB8ICogNl9GCisJfCB8X3xffC98CisJfC98IHwgfC8KKwl8IHwgfC98CisJfCB8L3wgfAorCXwgKiB8IHwgNl9ECisJfCB8IHwvCisJfCB8L3wKKwkqIHwgfCA2X0MKKwl8IHwvCisJfC98CisJKiB8IDZfQgorCXwvCisJKiA2X0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBtdWx0aXBsZSB0aXBzIGFuZCBjb2xvcnMnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgorCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCisJKiAgIDZfSQorCTxSRUQ+fDxSRVNFVD48R1JFRU4+XDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiAqICAgNl9ICisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPjxCTFVFPlw8UkVTRVQ+CisJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDZfRworCTxSRUQ+fDxSRVNFVD4gPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gKiA2X0YKKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPjxSRUQ+XzxSRVNFVD48WUVMTE9XPnw8UkVTRVQ+PFJFRD5fPFJFU0VUPjxCTFVFPnw8UkVTRVQ+PFJFRD4vPFJFU0VUPjxHUkVFTj58PFJFU0VUPgorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD48R1JFRU4+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+PEdSRUVOPi88UkVTRVQ+PEJMVUU+fDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPjxHUkVFTj4vPFJFU0VUPjxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiAqIDxCTFVFPnw8UkVTRVQ+IDZfRQorCTxSRUQ+fDxSRVNFVD4gKiA8Q1lBTj58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiA2X0QKKwk8UkVEPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDxDWUFOPnw8UkVTRVQ+PEJMVUU+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+PEJMVUU+LzxSRVNFVD48Q1lBTj58PFJFU0VUPgorCSogPEJMVUU+fDxSRVNFVD4gPENZQU4+fDxSRVNFVD4gNl9DCisJPENZQU4+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPgorCTxDWUFOPnw8UkVTRVQ+PENZQU4+LzxSRVNFVD48QkxVRT58PFJFU0VUPgorCSogPEJMVUU+fDxSRVNFVD4gNl9CCisJPEJMVUU+fDxSRVNFVD48QkxVRT4vPFJFU0VUPgorCSogNl9BCisJRU9GCisJbGliX3Rlc3RfY21wX2NvbG9yZWRfZ3JhcGggLS1kYXRlLW9yZGVyIC0tcHJldHR5PXRmb3JtYXQ6JXMgNl8xIDZfMyA2XzUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBtdWx0aXBsZSB0aXBzJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIDdfMSAmJgorCXRlc3RfY29tbWl0IDdfQSAmJgorCXRlc3RfY29tbWl0IDdfQiAmJgorCXRlc3RfY29tbWl0IDdfQyAmJgorCWdpdCBjaGVja291dCAtYiA3XzIgN18xfjIgJiYKKwl0ZXN0X2NvbW1pdCA3X0QgJiYKKwl0ZXN0X2NvbW1pdCA3X0UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgN18zIDdfMX4xICYmCisJdGVzdF9jb21taXQgN19GICYmCisJdGVzdF9jb21taXQgN19HICYmCisJZ2l0IGNoZWNrb3V0IC1iIDdfNCA3XzJ+MSAmJgorCXRlc3RfY29tbWl0IDdfSCAmJgorCWdpdCBjaGVja291dCAtYiA3XzUgN18xfjIgJiYKKwl0ZXN0X2NvbW1pdCA3X0kgJiYKKwlnaXQgY2hlY2tvdXQgLWIgN182IDdfM34xICYmCisJdGVzdF9jb21taXQgN19KICYmCisJZ2l0IGNoZWNrb3V0IC1iIE1fMSA3XzEgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA3XzIgLW0gN19NMSAmJgorCWdpdCBjaGVja291dCAtYiBNXzMgN18zICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgN180IC1tIDdfTTIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgTV81IDdfNSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDdfNiAtbSA3X00zICYmCisJZ2l0IGNoZWNrb3V0IC1iIE1fNyA3XzEgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA3XzIgN18zIC1tIDdfTTQgJiYKKworCWNoZWNrX2dyYXBoIE1fMSBNXzMgTV81IE1fNyA8PC1cRU9GCisJKiAgIDdfTTEKKwl8XAorCXwgfCAqICAgN19NMgorCXwgfCB8XAorCXwgfCB8ICogN19ICisJfCB8IHwgfCAqICAgN19NMworCXwgfCB8IHwgfFwKKwl8IHwgfCB8IHwgKiA3X0oKKwl8IHwgfCB8ICogfCA3X0kKKwl8IHwgfCB8IHwgfCAqICAgN19NNAorCXwgfF98X3xffF98L3xcCisJfC98IHwgfCB8IHwvIC8KKwl8IHwgfF98X3wvfCAvCisJfCB8L3wgfCB8IHwvCisJfCB8IHwgfF98L3wKKwl8IHwgfC98IHwgfAorCXwgfCAqIHwgfCB8IDdfRworCXwgfCB8IHxffC8KKwl8IHwgfC98IHwKKwl8IHwgKiB8IHwgN19GCisJfCAqIHwgfCB8IDdfRQorCXwgfCB8LyAvCisJfCB8L3wgfAorCXwgKiB8IHwgN19ECisJfCB8IHwvCisJfCB8L3wKKwkqIHwgfCA3X0MKKwl8IHwvCisJfC98CisJKiB8IDdfQgorCXwvCisJKiA3X0EKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjUyLWFtLW9wdGlvbnMuc2ggYi90L3Q0MjUyLWFtLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc1OGU2MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTItYW0tb3B0aW9ucy5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFtIHdpdGggb3B0aW9ucyBhbmQgbm90IGxvc2luZyB0aGVtJworLiAuL3Rlc3QtbGliLnNoCisKK3RtPSIkVEVTVF9ESVJFQ1RPUlkvdDQyNTIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWNwICIkdG0vZmlsZS0xLTAiIGZpbGUtMSAmJgorCWNwICIkdG0vZmlsZS0yLTAiIGZpbGUtMiAmJgorCWdpdCBhZGQgZmlsZS0xIGZpbGUtMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtLXdoaXRlc3BhY2U9Zml4JyAnCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0td2hpdGVzcGFjZT1maXggIiR0bSIvYW0tdGVzdC0xLT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCAzIGZpbGUtMSAmJgorCWdyZXAgIl5TaXgkIiBmaWxlLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgYW0gLUMxJyAnCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC1DMSAiJHRtIi9hbS10ZXN0LTItPyAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwlncmVwIDMgZmlsZS0xICYmCisJZ3JlcCAiXlRocmVlJCIgZmlsZS0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVycnVwdGVkIGFtIC1wMicgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtcDIgIiR0bSIvYW0tdGVzdC0zLT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCAzIGZpbGUtMSAmJgorCWdyZXAgIl5UaHJlZSQiIGZpbGUtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtQzEgLXAyJyAnCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC1wMiAtQzEgIiR0bSIvYW0tdGVzdC00LT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCAzIGZpbGUtMSAmJgorCWdyZXAgIl5UaHJlZSQiIGZpbGUtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtLWRpcmVjdG9yeT0iZnJvdHogbml0Zm9sIicgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLWRpcmVjdG9yeT0iZnJvdHogbml0Zm9sIiAiJHRtIi9hbS10ZXN0LTUtPyAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwlncmVwIE9uZSAiZnJvdHogbml0Zm9sL2ZpbGUtNSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgdG8gYSBmdW5ueSBwYXRoJyAnCisJd2l0aF9zcT0id2l0aCdcJydzcSIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgYW0gLS1kaXJlY3Rvcnk9IiR3aXRoX3NxIiAiJHRtIi9hbS10ZXN0LTUtMiAmJgorCXRlc3QgLWYgIiR3aXRoX3NxL2ZpbGUtNSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1yZWplY3QnICcKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1yZWplY3QgIiR0bSIvYW0tdGVzdC02LTEgJiYKKwlncmVwICJAQCAtMSwzICsxLDMgQEAiIGZpbGUtMi5yZWogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0IGZpbGUtMiAmJgorCWdyZXAgIlstXS1yZWplY3QiIC5naXQvcmViYXNlLWFwcGx5L2FwcGx5LW9wdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC0xLTEgYi90L3Q0MjUyL2FtLXRlc3QtMS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzA5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtMS0xCkBAIC0wLDAgKzEsMTkgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFRocmVlCisKK0FwcGxpY2F0aW9uIG9mIHRoaXMgc2hvdWxkIGJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIGZpcnN0IGxpbmUgaW4gdGhlCitjb250ZXh0IGRvZXMgbm90IG1hdGNoLgorCitkaWZmIC0tZ2l0IGkvZmlsZS0xIHcvZmlsZS0xCitpbmRleCAwNmU1NjdiLi4xMGY4MzQyIDEwMDY0NAorLS0tIGkvZmlsZS0xCisrKysgdy9maWxlLTEKK0BAIC0xLDYgKzEsNiBAQAorIE9uZQorIDIKKy0zCisrVGhyZWUgCisgNAorIDUKKyA2CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtMS0yIGIvdC90NDI1Mi9hbS10ZXN0LTEtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjg3NGFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTEtMgpAQCAtMCwwICsxLDIxIEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC0td2hpdGVzcGFjZT1maXggc2hvdWxkIGxvc2UgCit0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZSBhZnRlciAiU2l4Ii4KKworZGlmZiAtLWdpdCBpL2ZpbGUtMiB3L2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2ZpbGUtMgorKysrIHcvZmlsZS0yCitAQCAtMSw3ICsxLDcgQEAKKyAxCisgMgorLTMKKytUaHJlZQorIDQKKyA1CistNgorK1NpeCAKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtMi0xIGIvdC90NDI1Mi9hbS10ZXN0LTItMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWRhOTRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTItMQpAQCAtMCwwICsxLDE5IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBUaHJlZQorCitBcHBsaWNhdGlvbiBvZiB0aGlzIHNob3VsZCBiZSByZWplY3RlZCBldmVuIHdpdGggLUMxIGJlY2F1c2UgdGhlCitwcmVpbWFnZSBsaW5lIGluIHRoZSBjb250ZXh0IGRvZXMgbm90IG1hdGNoLgorCitkaWZmIC0tZ2l0IGkvZmlsZS0xIHcvZmlsZS0xCitpbmRleCAwNmU1NjdiLi4xMGY4MzQyIDEwMDY0NAorLS0tIGkvZmlsZS0xCisrKysgdy9maWxlLTEKK0BAIC0xLDYgKzEsNiBAQAorIDEKKyAyCistVHJlcworK1RocmVlIAorIDQKKyA1CisgNgpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTItMiBiL3QvdDQyNTIvYW0tdGVzdC0yLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjNjYwMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0yLTIKQEAgLTAsMCArMSwyMSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtQzEgc2hvdWxkIGJlIHN1Y2Nlc3NmdWwgZXZlbiB0aG91Z2ggCit0aGUgZmlyc3QgbGluZSBpbiB0aGUgY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2ZpbGUtMiB3L2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2ZpbGUtMgorKysrIHcvZmlsZS0yCitAQCAtMSw3ICsxLDcgQEAKKyBPbmUKKyAyCistMworK1RocmVlCisgNAorIDUKKy02CisrU2l4CisgNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTMtMSBiL3QvdDQyNTIvYW0tdGVzdC0zLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4ZTVhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0zLTEKQEAgLTAsMCArMSwxOSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogVGhyZWUKKworQXBwbGljYXRpb24gb2YgdGhpcyBzaG91bGQgYmUgcmVqZWN0ZWQgZXZlbiB3aXRoIC1wMiBiZWNhdXNlIHRoZQorcHJlaW1hZ2UgbGluZSBpbiB0aGUgY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0xIHcvanVuay9maWxlLTEKK2luZGV4IDA2ZTU2N2IuLjEwZjgzNDIgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMQorKysrIHcvanVuay9maWxlLTEKK0BAIC0xLDYgKzEsNiBAQAorIDEKKyAyCistVHJlcworK1RocmVlIAorIDQKKyA1CisgNgpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTMtMiBiL3QvdDQyNTIvYW0tdGVzdC0zLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4MWI5NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0zLTIKQEAgLTAsMCArMSwyMSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtcDIgc2hvdWxkIGJlIHN1Y2Nlc3NmdWwgZXZlbiB0aG91Z2gKK3RoZSBwYXRjaCBpcyBhZ2FpbnN0IGEgd3JvbmcgbGV2ZWwuCisKK2RpZmYgLS1naXQgaS9qdW5rL2ZpbGUtMiB3L2p1bmsvZmlsZS0yCitpbmRleCAwNmU1NjdiLi5iNmYzYTE2IDEwMDY0NAorLS0tIGkvanVuay9maWxlLTIKKysrKyB3L2p1bmsvZmlsZS0yCitAQCAtMSw3ICsxLDcgQEAKKyAxCisgMgorLTMKKytUaHJlZQorIDQKKyA1CistNgorK1NpeAorIDcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC00LTEgYi90L3Q0MjUyL2FtLXRlc3QtNC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OGNkNmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtNC0xCkBAIC0wLDAgKzEsMTkgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFRocmVlCisKK0FwcGxpY2F0aW9uIG9mIHRoaXMgc2hvdWxkIGJlIHJlamVjdGVkIGV2ZW4gd2l0aCAtQzEgLXAyIGJlY2F1c2UKK3RoZSBwcmVpbWFnZSBsaW5lIGluIHRoZSBjb250ZXh0IGRvZXMgbm90IG1hdGNoLgorCitkaWZmIC0tZ2l0IGkvanVuay9maWxlLTEgdy9qdW5rL2ZpbGUtMQoraW5kZXggMDZlNTY3Yi4uMTBmODM0MiAxMDA2NDQKKy0tLSBpL2p1bmsvZmlsZS0xCisrKysgdy9qdW5rL2ZpbGUtMQorQEAgLTEsNiArMSw2IEBACisgMQorIDIKKy1UcmVzCisrVGhyZWUgCisgNAorIDUKKyA2CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNC0yIGIvdC90NDI1Mi9hbS10ZXN0LTQtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTY5YmZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTQtMgpAQCAtMCwwICsxLDIyIEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC1DMSAtcDIgc2hvdWxkIGJlIHN1Y2Nlc3NmdWwgZXZlbiB0aG91Z2gKK3RoZSBwYXRjaCBpcyBhZ2FpbnN0IGEgd3JvbmcgbGV2ZWwgYW5kIHRoZSBmaXJzdCBjb250ZXh0IGxpbmUgZG9lcworbm90IG1hdGNoLgorCitkaWZmIC0tZ2l0IGkvanVuay9maWxlLTIgdy9qdW5rL2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2p1bmsvZmlsZS0yCisrKysgdy9qdW5rL2ZpbGUtMgorQEAgLTEsNyArMSw3IEBACisgT25lCisgMgorLTMKKytUaHJlZQorIDQKKyA1CistNgorK1NpeAorIDcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC01LTEgYi90L3Q0MjUyL2FtLXRlc3QtNS0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhN2JmMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtNS0xCkBAIC0wLDAgKzEsMjAgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFNpeAorCitBcHBseWluZyB0aGlzIHBhdGNoIHdpdGggLS1kaXJlY3Rvcnk9J2Zyb3R6IG5pdGZvbCcgc2hvdWxkIGZhaWwKKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0yIHcvanVuay9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMgorKysrIHcvanVuay9maWxlLTIKK0BAIC0xLDcgKzEsNyBAQAorIE9uZQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXgKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNS0yIGIvdC90NDI1Mi9hbS10ZXN0LTUtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzMwMjViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTUtMgpAQCAtMCwwICsxLDE1IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC0tZGlyZWN0b3J5PSdmcm90eiBuaXRmb2wnIHNob3VsZCBzdWNjZWVkCisKK2RpZmYgLS1naXQgaS9maWxlLTUgdy9maWxlLTUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAuLjFkNmVkOWYKKy0tLSAvZGV2L251bGwKKysrKyB3L2ZpbGUtNQorQEAgLTAsMCArMSwzIEBACisrT25lCisrdHdvCisrdGhyZWUKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC02LTEgYi90L3Q0MjUyL2FtLXRlc3QtNi0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODU5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtNi0xCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IEh1aAorCitTaG91bGQgZmFpbCBhbmQgbGVhdmUgcmVqZWN0cworCitkaWZmIC0tZ2l0IGkvZmlsZS0yIHcvZmlsZS0yCitpbmRleCAwNmU1NjdiLi5iNmYzYTE2IDEwMDY0NAorLS0tIGkvZmlsZS0yCisrKysgdy9maWxlLTIKK0BAIC0xLDMgKzEsMyBAQAorLTAKKytPbmUKKyAyCisgMworQEAgLTQsNCArNCw0IEBACisgNAorIDUKKy02CisrU2l4CisgNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9maWxlLTEtMCBiL3QvdDQyNTIvZmlsZS0xLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlNTY3YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2ZpbGUtMS0wCkBAIC0wLDAgKzEsNyBAQAorMQorMgorMworNAorNQorNgorNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9maWxlLTItMCBiL3QvdDQyNTIvZmlsZS0yLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlNTY3YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2ZpbGUtMi0wCkBAIC0wLDAgKzEsNyBAQAorMQorMgorMworNAorNQorNgorNwpkaWZmIC0tZ2l0IGEvdC90NDI1My1hbS1rZWVwLWNyLWRvcy5zaCBiL3QvdDQyNTMtYW0ta2VlcC1jci1kb3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmUxYjczZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTMtYW0ta2VlcC1jci1kb3Muc2gKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBTdGVmYW4tVy4gSGFobgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtYW0gbWJveCB3aXRoIGRvcyBsaW5lIGVuZGluZy4KKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhyZWUgcGF0Y2hlcyB3aGljaCB3aWxsIGJlIGFkZGVkIGFzIGZpbGVzIHdpdGggZG9zIGxpbmUgZW5kaW5nLgorCitjYXQgPmZpbGUxIDw8XEVPRgorbGluZSAxCitFT0YKKworY2F0ID5maWxlMWEgPDxcRU9GCitsaW5lIDEKK2xpbmUgNAorRU9GCisKK2NhdCA+ZmlsZTIgPDxcRU9GCitsaW5lIDEKK2xpbmUgMgorRU9GCisKK2NhdCA+ZmlsZTMgPDxcRU9GCitsaW5lIDEKK2xpbmUgMgorbGluZSAzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSB3aXRoIGRvcyBmaWxlcycgJworCWFwcGVuZF9jciA8ZmlsZTEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlhcHBlbmRfY3IgPGZpbGUyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQgJiYKKwlhcHBlbmRfY3IgPGZpbGUzID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBUaGlyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGRvcyBmaWxlcyB3aXRob3V0IC0ta2VlcC1jcicgJworCWdpdCBjaGVja291dCAtYiBkb3NmaWxlcyBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayBpbml0aWFsLi5tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLWsgLTMgMDAwKi5wYXRjaCAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5IDAwMCoucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBkb3MgZmlsZXMgd2l0aCAtLWtlZXAtY3InICcKKwlnaXQgY2hlY2tvdXQgLWIgZG9zZmlsZXMta2VlcC1jciBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIgPm91dHB1dCAmJgorCWdpdCBhbSAtLWtlZXAtY3IgLWsgLTMgb3V0cHV0ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggZG9zIGZpbGVzIGNvbmZpZyBhbS5rZWVwY3InICcKKwlnaXQgY29uZmlnIGFtLmtlZXBjciAxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGRvc2ZpbGVzLWNvbmYta2VlcGNyIGluaXRpYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlciA+b3V0cHV0ICYmCisJZ2l0IGFtIC1rIC0zIG91dHB1dCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGRvcyBmaWxlcyBjb25maWcgYW0ua2VlcGNyIG92ZXJyaWRkZW4gYnkgLS1uby1rZWVwLWNyJyAnCisJZ2l0IGNvbmZpZyBhbS5rZWVwY3IgMSAmJgorCWdpdCBjaGVja291dCAtYiBkb3NmaWxlcy1jb25mLWtlZXBjci1vdmVycmlkZSBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayBpbml0aWFsLi5tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLWsgLTMgLS1uby1rZWVwLWNyIDAwMCoucGF0Y2ggJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAwMDAqLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggZG9zIGZpbGVzIHdpdGggLS1rZWVwLWNyIGNvbnRpbnVlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRvc2ZpbGVzLWtlZXAtY3ItY29udGludWUgaW5pdGlhbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgaW5pdGlhbC4ubWFzdGVyICYmCisJYXBwZW5kX2NyIDxmaWxlMWEgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQgcGF0Y2giIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1rZWVwLWNyIC1rIC0zIDAwMCoucGF0Y2ggJiYKKwlhcHBlbmRfY3IgPGZpbGUyID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFtIC0zIC0tcmVzb2x2ZWQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCB1bml4IGZpbGVzIGNvbmZpZyBhbS5rZWVwY3Igb3ZlcnJpZGRlbiBieSAtLW5vLWtlZXAtY3InICcKKwlnaXQgY29uZmlnIGFtLmtlZXBjciAxICYmCisJZ2l0IGNoZWNrb3V0IC1iIHVuaXhmaWxlcy1jb25mLWtlZXBjci1vdmVycmlkZSBpbml0aWFsICYmCisJY3AgLWYgZmlsZTEgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImxpbmUgZW5kaW5nIHRvIHVuaXgiIGZpbGUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIGluaXRpYWwuLm1hc3RlciAmJgorCWdpdCBhbSAtayAtMyAtLW5vLWtlZXAtY3IgMDAwKi5wYXRjaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC13IG1hc3RlcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyNTQtYW0tY29ycnVwdC5zaCBiL3QvdDQyNTQtYW0tY29ycnVwdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDNiZGJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1NC1hbS1jb3JydXB0LnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYW0gd2l0aCBjb3JydXB0IGlucHV0JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSMgTm90ZSB0aGUgbWlzc2luZyAiKysrIiBsaW5lOgorCWNhdCA+YmFkLXBhdGNoLmRpZmYgPDwtXEVPRiAmJgorCUZyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorCWRpZmYgLS1naXQgYS9mIGIvZgorCWluZGV4IDc4OTgxOTIuLjYxNzgwNzkgMTAwNjQ0CisJLS0tIGEvZgorCUBAIC0xICsxIEBACisJLWEKKwkrYgorCUVPRgorCisJZWNobyBhID5mICYmCisJZ2l0IGFkZCBmICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKKyMgVGhpcyB1c2VkIHRvIGZhaWwgYmVmb3JlLCB0b28sIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGRpYWdub3N0aWMuCisjICAgZmF0YWw6IHVuYWJsZSB0byB3cml0ZSBmaWxlICcobnVsbCknIG1vZGUgMTAwNjQ0OiBCYWQgYWRkcmVzcworIyBBbHNvLCBpdCBoYWQgdGhlIHVud2FudGVkIHNpZGUtZWZmZWN0IG9mIGRlbGV0aW5nIGYuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnkgdG8gYXBwbHkgY29ycnVwdGVkIHBhdGNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGFkdmljZS5hbVdvcmtEaXI9ZmFsc2UgYW0gYmFkLXBhdGNoLmRpZmYgMj5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGFyZSBkaWFnbm9zdGljOyBlbnN1cmUgZmlsZSBpcyBzdGlsbCBoZXJlJyAnCisJZWNobyAiZXJyb3I6IGdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSA0KSIgPmV4cGVjdGVkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZiAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjU1LWFtLXN1Ym1vZHVsZS5zaCBiL3QvdDQyNTUtYW0tc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiYTgxOTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjU1LWFtLXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFtIGhhbmRsaW5nIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCithbSAoKSB7CisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ICIuLiQxIiB8IGdpdCBhbSAtCit9CisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiYW0iCisKK2FtXzN3YXkgKCkgeworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAiLi4kMSIgfCBnaXQgYW0gLS0zd2F5IC0KK30KKworS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0FUVEVNUFRTX1RPX01FUkdFX1JFTU9WRURfU1VCTU9EVUxFX0ZJTEVTPTEKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiYW1fM3dheSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlmZi5zdWJtb2R1bGUnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlJTklUSUFMPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJZ2l0IGluaXQgc3VibW9kdWxlICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+Li4vaW5pdGlhbC1zdWJtb2R1bGUKKwkpICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9zdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPi4uL2ZpcnN0LXN1Ym1vZHVsZQorCSkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJU0VDT05EPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IG12IHR3by50IGZvdXIudCAmJgorCQlnaXQgY29tbWl0IC1tICJzZWNvbmQgc3VibW9kdWxlIiAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPi4uL3NlY29uZC1zdWJtb2R1bGUKKwkpICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tZWRpdCAmJgorCVRISVJEPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdAorJworCitydW5fdGVzdCgpIHsKKwlTVEFSVF9DT01NSVQ9JDEgJiYKKwlFWFBFQ1Q9JDIgJiYKKwkjIEFib3J0IGFueSBtZXJnZXMgaW4gcHJvZ3Jlc3M6IHRoZSBwcmV2aW91cworCSMgdGVzdCBtYXkgaGF2ZSBmYWlsZWQsIGFuZCB3ZSBzaG91bGQgY2xlYW4gdXAuCisJdGVzdF9taWdodF9mYWlsIGdpdCBhbSAtLWFib3J0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkU1RBUlRfQ09NTUlUICYmCisJcm0gLWYgKi5wYXRjaCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICRTVEFSVF9DT01NSVReICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgYW0gKi5wYXRjaCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgJEVYUEVDVCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5zdWJtb2R1bGUgdW5zZXQnICcKKwl0ZXN0X3VuY29uZmlnIGRpZmYuc3VibW9kdWxlICYmCisJcnVuX3Rlc3QgJFNFQ09ORCBmaXJzdC1zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5zdWJtb2R1bGUgdW5zZXQgd2l0aCBleHRyYSBmaWxlJyAnCisJdGVzdF91bmNvbmZpZyBkaWZmLnN1Ym1vZHVsZSAmJgorCXJ1bl90ZXN0ICRUSElSRCBzZWNvbmQtc3VibW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuc3VibW9kdWxlPWxvZycgJworCXRlc3RfY29uZmlnIGRpZmYuc3VibW9kdWxlIGxvZyAmJgorCXJ1bl90ZXN0ICRTRUNPTkQgZmlyc3Qtc3VibW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuc3VibW9kdWxlPWxvZyB3aXRoIGV4dHJhIGZpbGUnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLnN1Ym1vZHVsZSBsb2cgJiYKKwlydW5fdGVzdCAkVEhJUkQgc2Vjb25kLXN1Ym1vZHVsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyNTYtYW0tZm9ybWF0LWZsb3dlZC5zaCBiL3QvdDQyNTYtYW0tZm9ybWF0LWZsb3dlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMzY5YzRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Ni1hbS1mb3JtYXQtZmxvd2VkLnNoCkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGZvcm1hdD1mbG93ZWQgc3VwcG9ydCBvZiBnaXQgYW0nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNwICIkVEVTVF9ESVJFQ1RPUlkvdDQyNTYvMS9tYWlsaW5mby5jLm9yaWciIG1haWxpbmZvLmMgJiYKKwlnaXQgYWRkIG1haWxpbmZvLmMgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBmb3JtYXQ9Zmxvd2VkJyAnCisJZ2l0IGFtIDwiJFRFU1RfRElSRUNUT1JZL3Q0MjU2LzEvcGF0Y2giIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAid2FybmluZzogUGF0Y2ggc2VudCB3aXRoIGZvcm1hdD1mbG93ZWQiIHN0ZGVyciAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkvdDQyNTYvMS9tYWlsaW5mby5jIiBtYWlsaW5mby5jCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDI1Ni8xL21haWxpbmZvLmMgYi90L3Q0MjU2LzEvbWFpbGluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzk1YWRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Ni8xL21haWxpbmZvLmMKQEAgLTAsMCArMSwxMjQ1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibWFpbGluZm8uaCIKKworc3RhdGljIHZvaWQgY2xlYW51cF9zcGFjZShzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzaXplX3QgcG9zLCBjbnQ7CisJZm9yIChwb3MgPSAwOyBwb3MgPCBzYi0+bGVuOyBwb3MrKykgeworCQlpZiAoaXNzcGFjZShzYi0+YnVmW3Bvc10pKSB7CisJCQlzYi0+YnVmW3Bvc10gPSAnICc7CisJCQlmb3IgKGNudCA9IDA7IGlzc3BhY2Uoc2ItPmJ1Zltwb3MgKyBjbnQgKyAxXSk7IGNudCsrKTsKKwkJCXN0cmJ1Zl9yZW1vdmUoc2IsIHBvcyArIDEsIGNudCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zYW5lX25hbWUoc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3Qgc3RyYnVmICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICplbWFpbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpzcmMgPSBuYW1lOworCWlmIChuYW1lLT5sZW4gPCAzIHx8IDYwIDwgbmFtZS0+bGVuIHx8IHN0cmNocihuYW1lLT5idWYsICdAJykgfHwKKwkJc3RyY2hyKG5hbWUtPmJ1ZiwgJzwnKSB8fCBzdHJjaHIobmFtZS0+YnVmLCAnPicpKQorCQlzcmMgPSBlbWFpbDsKKwllbHNlIGlmIChuYW1lID09IG91dCkKKwkJcmV0dXJuOworCXN0cmJ1Zl9yZXNldChvdXQpOworCXN0cmJ1Zl9hZGRidWYob3V0LCBzcmMpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9ib2d1c19mcm9tKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJLyogSm9obiBEb2UgPGpvaG5kb2U+ICovCisKKwljaGFyICpicmEsICprZXQ7CisJLyogVGhpcyBpcyBmYWxsYmFjaywgc28gZG8gbm90IGJvdGhlciBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4KKwkgKiBlLW1haWwgYWRkcmVzcy4KKwkgKi8KKwlpZiAobWktPmVtYWlsLmxlbikKKwkJcmV0dXJuOworCisJYnJhID0gc3RyY2hyKGxpbmUtPmJ1ZiwgJzwnKTsKKwlpZiAoIWJyYSkKKwkJcmV0dXJuOworCWtldCA9IHN0cmNocihicmEsICc+Jyk7CisJaWYgKCFrZXQpCisJCXJldHVybjsKKworCXN0cmJ1Zl9yZXNldCgmbWktPmVtYWlsKTsKKwlzdHJidWZfYWRkKCZtaS0+ZW1haWwsIGJyYSArIDEsIGtldCAtIGJyYSAtIDEpOworCisJc3RyYnVmX3Jlc2V0KCZtaS0+bmFtZSk7CisJc3RyYnVmX2FkZCgmbWktPm5hbWUsIGxpbmUtPmJ1ZiwgYnJhIC0gbGluZS0+YnVmKTsKKwlzdHJidWZfdHJpbSgmbWktPm5hbWUpOworCWdldF9zYW5lX25hbWUoJm1pLT5uYW1lLCAmbWktPm5hbWUsICZtaS0+ZW1haWwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5xdW90ZV9jb21tZW50KHN0cnVjdCBzdHJidWYgKm91dGJ1ZiwgY29uc3QgY2hhciAqaW4pCit7CisJaW50IGM7CisJaW50IHRha2VfbmV4dF9saXRlcmFsbHkgPSAwOworCisJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgJygnKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmICh0YWtlX25leHRfbGl0ZXJhbGx5ID09IDEpIHsKKwkJCXRha2VfbmV4dF9saXRlcmFsbHkgPSAwOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChjKSB7CisJCQljYXNlICdcXCc6CisJCQkJdGFrZV9uZXh0X2xpdGVyYWxseSA9IDE7CisJCQkJY29udGludWU7CisJCQljYXNlICcoJzoKKwkJCQlpbiA9IHVucXVvdGVfY29tbWVudChvdXRidWYsIGluKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyknOgorCQkJCXN0cmJ1Zl9hZGRjaChvdXRidWYsICcpJyk7CisJCQkJcmV0dXJuIGluOworCQkJfQorCQl9CisKKwkJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgYyk7CisJfQorCisJcmV0dXJuIGluOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5xdW90ZV9xdW90ZWRfc3RyaW5nKHN0cnVjdCBzdHJidWYgKm91dGJ1ZiwgY29uc3QgY2hhciAqaW4pCit7CisJaW50IGM7CisJaW50IHRha2VfbmV4dF9saXRlcmFsbHkgPSAwOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJaWYgKHRha2VfbmV4dF9saXRlcmFsbHkgPT0gMSkgeworCQkJdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ1xcJzoKKwkJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyInOgorCQkJCXJldHVybiBpbjsKKwkJCX0KKwkJfQorCisJCXN0cmJ1Zl9hZGRjaChvdXRidWYsIGMpOworCX0KKworCXJldHVybiBpbjsKK30KKworc3RhdGljIHZvaWQgdW5xdW90ZV9xdW90ZWRfcGFpcihzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgb3V0YnVmOworCWNvbnN0IGNoYXIgKmluID0gbGluZS0+YnVmOworCWludCBjOworCisJc3RyYnVmX2luaXQoJm91dGJ1ZiwgbGluZS0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICciJzoKKwkJCWluID0gdW5xdW90ZV9xdW90ZWRfc3RyaW5nKCZvdXRidWYsIGluKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICcoJzoKKwkJCWluID0gdW5xdW90ZV9jb21tZW50KCZvdXRidWYsIGluKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX2FkZGNoKCZvdXRidWYsIGMpOworCX0KKworCXN0cmJ1Zl9zd2FwKCZvdXRidWYsIGxpbmUpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXRidWYpOworCit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9mcm9tKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmZyb20pCit7CisJY2hhciAqYXQ7CisJc2l6ZV90IGVsOworCXN0cnVjdCBzdHJidWYgZjsKKworCXN0cmJ1Zl9pbml0KCZmLCBmcm9tLT5sZW4pOworCXN0cmJ1Zl9hZGRidWYoJmYsIGZyb20pOworCisJdW5xdW90ZV9xdW90ZWRfcGFpcigmZik7CisKKwlhdCA9IHN0cmNocihmLmJ1ZiwgJ0AnKTsKKwlpZiAoIWF0KSB7CisJCXBhcnNlX2JvZ3VzX2Zyb20obWksIGZyb20pOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFscmVhZHkgaGF2ZSBvbmUgZW1haWwsIGRvbid0IHRha2UgYW55IGNvbmZ1c2luZyBsaW5lcworCSAqLworCWlmIChtaS0+ZW1haWwubGVuICYmIHN0cmNocihhdCArIDEsICdAJykpCisJCWdvdG8gb3V0OworCisJLyogUGljayB1cCB0aGUgc3RyaW5nIGFyb3VuZCAnQCcsIHBvc3NpYmx5IGRlbGltaXRlZCB3aXRoIDw+CisJICogcGFpcjsgdGhhdCBpcyB0aGUgZW1haWwgcGFydC4KKwkgKi8KKwl3aGlsZSAoYXQgPiBmLmJ1ZikgeworCQljaGFyIGMgPSBhdFstMV07CisJCWlmIChpc3NwYWNlKGMpKQorCQkJYnJlYWs7CisJCWlmIChjID09ICc8JykgeworCQkJYXRbLTFdID0gJyAnOworCQkJYnJlYWs7CisJCX0KKwkJYXQtLTsKKwl9CisJZWwgPSBzdHJjc3BuKGF0LCAiIFxuXHRcclx2XGY+Iik7CisJc3RyYnVmX3Jlc2V0KCZtaS0+ZW1haWwpOworCXN0cmJ1Zl9hZGQoJm1pLT5lbWFpbCwgYXQsIGVsKTsKKwlzdHJidWZfcmVtb3ZlKCZmLCBhdCAtIGYuYnVmLCBlbCArIChhdFtlbF0gPyAxIDogMCkpOworCisJLyogVGhlIHJlbWFpbmRlciBpcyBuYW1lLiAgSXQgY291bGQgYmUKKwkgKgorCSAqIC0gIkpvaG4gRG9lIDxqb2huLmRvZUB4ej4iCQkJKGEpLCBvcgorCSAqIC0gImpvaG4uZG9lQHh6IChKb2huIERvZSkiCQkJKGIpLCBvcgorCSAqIC0gIkpvaG4gKHp6eikgRG9lIDxqb2huLmRvZUB4ej4gKENvbW1lbnQpIgkoYykKKwkgKgorCSAqIGJ1dCB3ZSBoYXZlIHJlbW92ZWQgdGhlIGVtYWlsIHBhcnQsIHNvCisJICoKKwkgKiAtIHJlbW92ZSBleHRyYSBzcGFjZXMgd2hpY2ggY291bGQgc3RheSBhZnRlciBlbWFpbCAoY2FzZSAnYycpLCBhbmQKKwkgKiAtIHRyaW0gZnJvbSBib3RoIGVuZHMsIHBvc3NpYmx5IHJlbW92aW5nIHRoZSAoKSBwYWlyIGF0IHRoZSBlbmQKKwkgKiAgIChjYXNlcyAnYScgYW5kICdiJykuCisJICovCisJY2xlYW51cF9zcGFjZSgmZik7CisJc3RyYnVmX3RyaW0oJmYpOworCWlmIChmLmJ1ZlswXSA9PSAnKCcgJiYgZi5sZW4gJiYgZi5idWZbZi5sZW4gLSAxXSA9PSAnKScpIHsKKwkJc3RyYnVmX3JlbW92ZSgmZiwgMCwgMSk7CisJCXN0cmJ1Zl9zZXRsZW4oJmYsIGYubGVuIC0gMSk7CisJfQorCisJZ2V0X3NhbmVfbmFtZSgmbWktPm5hbWUsICZmLCAmbWktPmVtYWlsKTsKK291dDoKKwlzdHJidWZfcmVsZWFzZSgmZik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9oZWFkZXIoc3RydWN0IHN0cmJ1ZiAqKm91dCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpZiAoISpvdXQpIHsKKwkJKm91dCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwkJc3RyYnVmX2luaXQoKm91dCwgbGluZS0+bGVuKTsKKwl9IGVsc2UKKwkJc3RyYnVmX3Jlc2V0KCpvdXQpOworCisJc3RyYnVmX2FkZGJ1Zigqb3V0LCBsaW5lKTsKK30KKworLyogTk9URSBOT1RFIE5PVEUuICBXZSBkbyBub3QgY2xhaW0gd2UgZG8gZnVsbCBNSU1FLiAgV2UganVzdCBhdHRlbXB0CisgKiB0byBoYXZlIGVub3VnaCBoZXVyaXN0aWNzIHRvIGdyb2sgTUlNRSBlbmNvZGVkIHBhdGNoZXMgb2Z0ZW4gZm91bmQKKyAqIG9uIG91ciBtYWlsaW5nIGxpc3RzLiAgRm9yIGV4YW1wbGUsIHdlIGRvIG5vdCBldmVuIHRyZWF0IGhlYWRlciBsaW5lcworICogY2FzZSBpbnNlbnNpdGl2ZWx5LgorICovCisKK3N0YXRpYyBpbnQgc2x1cnBfYXR0cihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICphdHRyKQoreworCWNvbnN0IGNoYXIgKmVuZHMsICphcCA9IHN0cmNhc2VzdHIobGluZSwgbmFtZSk7CisJc2l6ZV90IHN6OworCisJc3RyYnVmX3NldGxlbihhdHRyLCAwKTsKKwlpZiAoIWFwKQorCQlyZXR1cm4gMDsKKwlhcCArPSBzdHJsZW4obmFtZSk7CisJaWYgKCphcCA9PSAnIicpIHsKKwkJYXArKzsKKwkJZW5kcyA9ICJcIiI7CisJfQorCWVsc2UKKwkJZW5kcyA9ICI7IFx0IjsKKwlzeiA9IHN0cmNzcG4oYXAsIGVuZHMpOworCXN0cmJ1Zl9hZGQoYXR0ciwgYXAsIHN6KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBoYXNfYXR0cl92YWx1ZShjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJjID0gc2x1cnBfYXR0cihsaW5lLCBuYW1lLCAmc2IpICYmICFzdHJjYXNlY21wKHNiLmJ1ZiwgdmFsdWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29udGVudF90eXBlKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiAqYm91bmRhcnkgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQoYm91bmRhcnksIGxpbmUtPmxlbik7CisKKwltaS0+Zm9ybWF0X2Zsb3dlZCA9IGhhc19hdHRyX3ZhbHVlKGxpbmUtPmJ1ZiwgImZvcm1hdD0iLCAiZmxvd2VkIik7CisJbWktPmRlbHNwID0gaGFzX2F0dHJfdmFsdWUobGluZS0+YnVmLCAiZGVsc3A9IiwgInllcyIpOworCisJaWYgKHNsdXJwX2F0dHIobGluZS0+YnVmLCAiYm91bmRhcnk9IiwgYm91bmRhcnkpKSB7CisJCXN0cmJ1Zl9pbnNlcnQoYm91bmRhcnksIDAsICItLSIsIDIpOworCQlpZiAoKyttaS0+Y29udGVudF90b3AgPj0gJm1pLT5jb250ZW50W01BWF9CT1VOREFSSUVTXSkgeworCQkJZXJyb3IoIlRvbyBtYW55IGJvdW5kYXJpZXMgdG8gaGFuZGxlIik7CisJCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKKwkJCW1pLT5jb250ZW50X3RvcCA9ICZtaS0+Y29udGVudFtNQVhfQk9VTkRBUklFU10gLSAxOworCQkJcmV0dXJuOworCQl9CisJCSoobWktPmNvbnRlbnRfdG9wKSA9IGJvdW5kYXJ5OworCQlib3VuZGFyeSA9IE5VTEw7CisJfQorCXNsdXJwX2F0dHIobGluZS0+YnVmLCAiY2hhcnNldD0iLCAmbWktPmNoYXJzZXQpOworCisJaWYgKGJvdW5kYXJ5KSB7CisJCXN0cmJ1Zl9yZWxlYXNlKGJvdW5kYXJ5KTsKKwkJZnJlZShib3VuZGFyeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29udGVudF90cmFuc2Zlcl9lbmNvZGluZyhzdHJ1Y3QgbWFpbGluZm8gKm1pLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJaWYgKHN0cmNhc2VzdHIobGluZS0+YnVmLCAiYmFzZTY0IikpCisJCW1pLT50cmFuc2Zlcl9lbmNvZGluZyA9IFRFX0JBU0U2NDsKKwllbHNlIGlmIChzdHJjYXNlc3RyKGxpbmUtPmJ1ZiwgInF1b3RlZC1wcmludGFibGUiKSkKKwkJbWktPnRyYW5zZmVyX2VuY29kaW5nID0gVEVfUVA7CisJZWxzZQorCQltaS0+dHJhbnNmZXJfZW5jb2RpbmcgPSBURV9ET05UQ0FSRTsKK30KKworc3RhdGljIGludCBpc19tdWx0aXBhcnRfYm91bmRhcnkoc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpjb250ZW50X3RvcCA9ICoobWktPmNvbnRlbnRfdG9wKTsKKworCXJldHVybiAoKGNvbnRlbnRfdG9wLT5sZW4gPD0gbGluZS0+bGVuKSAmJgorCQkhbWVtY21wKGxpbmUtPmJ1ZiwgY29udGVudF90b3AtPmJ1ZiwgY29udGVudF90b3AtPmxlbikpOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3N1YmplY3Qoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqc3ViamVjdCkKK3sKKwlzaXplX3QgYXQgPSAwOworCisJd2hpbGUgKGF0IDwgc3ViamVjdC0+bGVuKSB7CisJCWNoYXIgKnBvczsKKwkJc2l6ZV90IHJlbW92ZTsKKworCQlzd2l0Y2ggKHN1YmplY3QtPmJ1ZlthdF0pIHsKKwkJY2FzZSAncic6IGNhc2UgJ1InOgorCQkJaWYgKHN1YmplY3QtPmxlbiA8PSBhdCArIDMpCisJCQkJYnJlYWs7CisJCQlpZiAoKHN1YmplY3QtPmJ1ZlthdCArIDFdID09ICdlJyB8fAorCQkJICAgICBzdWJqZWN0LT5idWZbYXQgKyAxXSA9PSAnRScpICYmCisJCQkgICAgc3ViamVjdC0+YnVmW2F0ICsgMl0gPT0gJzonKSB7CisJCQkJc3RyYnVmX3JlbW92ZShzdWJqZWN0LCBhdCwgMyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlhdCsrOworCQkJYnJlYWs7CisJCWNhc2UgJyAnOiBjYXNlICdcdCc6IGNhc2UgJzonOgorCQkJc3RyYnVmX3JlbW92ZShzdWJqZWN0LCBhdCwgMSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnWyc6CisJCQlwb3MgPSBzdHJjaHIoc3ViamVjdC0+YnVmICsgYXQsICddJyk7CisJCQlpZiAoIXBvcykKKwkJCQlicmVhazsKKwkJCXJlbW92ZSA9IHBvcyAtIHN1YmplY3QtPmJ1ZiArIGF0ICsgMTsKKwkJCWlmICghbWktPmtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3QgfHwKKwkJCSAgICAoNyA8PSByZW1vdmUgJiYKKwkJCSAgICAgbWVtbWVtKHN1YmplY3QtPmJ1ZiArIGF0LCByZW1vdmUsICJQQVRDSCIsIDUpKSkKKwkJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCByZW1vdmUpOworCQkJZWxzZSB7CisJCQkJYXQgKz0gcmVtb3ZlOworCQkJCS8qCisJCQkJICogSWYgdGhlIGlucHV0IGhhZCBhIHNwYWNlIGFmdGVyIHRoZSBdLCBrZWVwCisJCQkJICogaXQuICBXZSBkb24ndCBib3RoZXIgd2l0aCBmaW5kaW5nIHRoZSBlbmQgb2YKKwkJCQkgKiB0aGUgc3BhY2UsIHNpbmNlIHdlIGxhdGVyIG5vcm1hbGl6ZSBpdAorCQkJCSAqIGFueXdheS4KKwkJCQkgKi8KKwkJCQlpZiAoaXNzcGFjZShzdWJqZWN0LT5idWZbYXRdKSkKKwkJCQkJYXQgKz0gMTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKwlzdHJidWZfdHJpbShzdWJqZWN0KTsKK30KKworI2RlZmluZSBNQVhfSERSX1BBUlNFRCAxMAorc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRlcltNQVhfSERSX1BBUlNFRF0gPSB7CisJIkZyb20iLCJTdWJqZWN0IiwiRGF0ZSIsCit9OworCitzdGF0aWMgaW5saW5lIGludCBjbXBfaGVhZGVyKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUsIGNvbnN0IGNoYXIgKmhkcikKK3sKKwlpbnQgbGVuID0gc3RybGVuKGhkcik7CisJcmV0dXJuICFzdHJuY2FzZWNtcChsaW5lLT5idWYsIGhkciwgbGVuKSAmJiBsaW5lLT5sZW4gPiBsZW4gJiYKKwkJCWxpbmUtPmJ1ZltsZW5dID09ICc6JyAmJiBpc3NwYWNlKGxpbmUtPmJ1ZltsZW4gKyAxXSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfZm9ybWF0X3BhdGNoX3NlcGFyYXRvcihjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCXN0YXRpYyBjb25zdCBjaGFyIFNBTVBMRVtdID0KKwkJIkZyb20gZTY4MDdmM2VmY2EyOGIzMGRlY2ZlY2IxNzMyYTU2YzdkYjExMzdlZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDFcbiI7CisJY29uc3QgY2hhciAqY3A7CisKKwlpZiAobGVuICE9IHN0cmxlbihTQU1QTEUpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXNraXBfcHJlZml4KGxpbmUsICJGcm9tICIsICZjcCkpCisJCXJldHVybiAwOworCWlmIChzdHJzcG4oY3AsICIwMTIzNDU2Nzg5YWJjZGVmIikgIT0gNDApCisJCXJldHVybiAwOworCWNwICs9IDQwOworCXJldHVybiAhbWVtY21wKFNBTVBMRSArIChjcCAtIGxpbmUpLCBjcCwgc3RybGVuKFNBTVBMRSkgLSAoY3AgLSBsaW5lKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmICpkZWNvZGVfcV9zZWdtZW50KGNvbnN0IHN0cnVjdCBzdHJidWYgKnFfc2VnLCBpbnQgcmZjMjA0NykKK3sKKwljb25zdCBjaGFyICppbiA9IHFfc2VnLT5idWY7CisJaW50IGM7CisJc3RydWN0IHN0cmJ1ZiAqb3V0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCXN0cmJ1Zl9pbml0KG91dCwgcV9zZWctPmxlbik7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlpZiAoYyA9PSAnPScpIHsKKwkJCWludCBjaCwgZCA9ICppbjsKKwkJCWlmIChkID09ICdcbicgfHwgIWQpCisJCQkJYnJlYWs7IC8qIGRyb3AgdHJhaWxpbmcgbmV3bGluZSAqLworCQkJY2ggPSBoZXgyY2hyKGluKTsKKwkJCWlmIChjaCA+PSAwKSB7CisJCQkJc3RyYnVmX2FkZGNoKG91dCwgY2gpOworCQkJCWluICs9IDI7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBnYXJiYWdlIC0tIGZhbGwgdGhyb3VnaCAqLworCQl9CisJCWlmIChyZmMyMDQ3ICYmIGMgPT0gJ18nKSAvKiByZmMyMDQ3IDQuMiAoMikgKi8KKwkJCWMgPSAweDIwOworCQlzdHJidWZfYWRkY2gob3V0LCBjKTsKKwl9CisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmRlY29kZV9iX3NlZ21lbnQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqYl9zZWcpCit7CisJLyogRGVjb2RlIGluLi5lcCwgcG9zc2libHkgaW4tcGxhY2UgdG8gb3QgKi8KKwlpbnQgYywgcG9zID0gMCwgYWNjID0gMDsKKwljb25zdCBjaGFyICppbiA9IGJfc2VnLT5idWY7CisJc3RydWN0IHN0cmJ1ZiAqb3V0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCXN0cmJ1Zl9pbml0KG91dCwgYl9zZWctPmxlbik7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlpZiAoYyA9PSAnKycpCisJCQljID0gNjI7CisJCWVsc2UgaWYgKGMgPT0gJy8nKQorCQkJYyA9IDYzOworCQllbHNlIGlmICgnQScgPD0gYyAmJiBjIDw9ICdaJykKKwkJCWMgLT0gJ0EnOworCQllbHNlIGlmICgnYScgPD0gYyAmJiBjIDw9ICd6JykKKwkJCWMgLT0gJ2EnIC0gMjY7CisJCWVsc2UgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzknKQorCQkJYyAtPSAnMCcgLSA1MjsKKwkJZWxzZQorCQkJY29udGludWU7IC8qIGdhcmJhZ2UgKi8KKwkJc3dpdGNoIChwb3MrKykgeworCQljYXNlIDA6CisJCQlhY2MgPSAoYyA8PCAyKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgKGMgPj4gNCkpKTsKKwkJCWFjYyA9IChjICYgMTUpIDw8IDQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3RyYnVmX2FkZGNoKG91dCwgKGFjYyB8IChjID4+IDIpKSk7CisJCQlhY2MgPSAoYyAmIDMpIDw8IDY7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJc3RyYnVmX2FkZGNoKG91dCwgKGFjYyB8IGMpKTsKKwkJCWFjYyA9IHBvcyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgaW50IGNvbnZlcnRfdG9fdXRmOChzdHJ1Y3QgbWFpbGluZm8gKm1pLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqbGluZSwgY29uc3QgY2hhciAqY2hhcnNldCkKK3sKKwljaGFyICpvdXQ7CisKKwlpZiAoIW1pLT5tZXRhaW5mb19jaGFyc2V0IHx8ICFjaGFyc2V0IHx8ICEqY2hhcnNldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2FtZV9lbmNvZGluZyhtaS0+bWV0YWluZm9fY2hhcnNldCwgY2hhcnNldCkpCisJCXJldHVybiAwOworCW91dCA9IHJlZW5jb2RlX3N0cmluZyhsaW5lLT5idWYsIG1pLT5tZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0KTsKKwlpZiAoIW91dCkgeworCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKKwkJcmV0dXJuIGVycm9yKCJjYW5ub3QgY29udmVydCBmcm9tICVzIHRvICVzIiwKKwkJCSAgICAgY2hhcnNldCwgbWktPm1ldGFpbmZvX2NoYXJzZXQpOworCX0KKwlzdHJidWZfYXR0YWNoKGxpbmUsIG91dCwgc3RybGVuKG91dCksIHN0cmxlbihvdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX2hlYWRlcihzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICppdCkKK3sKKwljaGFyICppbiwgKmVwLCAqY3A7CisJc3RydWN0IHN0cmJ1ZiBvdXRidWYgPSBTVFJCVUZfSU5JVCwgKmRlYzsKKwlzdHJ1Y3Qgc3RyYnVmIGNoYXJzZXRfcSA9IFNUUkJVRl9JTklULCBwaWVjZWJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBmb3VuZF9lcnJvciA9IDE7IC8qIHBlc3NpbWlzbSAqLworCisJaW4gPSBpdC0+YnVmOworCXdoaWxlIChpbiAtIGl0LT5idWYgPD0gaXQtPmxlbiAmJiAoZXAgPSBzdHJzdHIoaW4sICI9PyIpKSAhPSBOVUxMKSB7CisJCWludCBlbmNvZGluZzsKKwkJc3RyYnVmX3Jlc2V0KCZjaGFyc2V0X3EpOworCQlzdHJidWZfcmVzZXQoJnBpZWNlYnVmKTsKKworCQlpZiAoaW4gIT0gZXApIHsKKwkJCS8qCisJCQkgKiBXZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhbiBlbmNvZGVkLXdvcmQKKwkJCSAqIHRoYXQgYmVnaW5zIGF0IGVwLCBidXQgdGhlcmUgaXMgc29tZXRoaW5nCisJCQkgKiBiZWZvcmUgdGhlIGVuY29kZWQgd29yZC4KKwkJCSAqLworCQkJY2hhciAqc2NhbjsKKwkJCWZvciAoc2NhbiA9IGluOyBzY2FuIDwgZXA7IHNjYW4rKykKKwkJCQlpZiAoIWlzc3BhY2UoKnNjYW4pKQorCQkJCQlicmVhazsKKworCQkJaWYgKHNjYW4gIT0gZXAgfHwgaW4gPT0gaXQtPmJ1ZikgeworCQkJCS8qCisJCQkJICogV2Ugc2hvdWxkIG5vdCBsb3NlIHRoYXQgInNvbWV0aGluZyIsCisJCQkJICogdW5sZXNzIHdlIGhhdmUganVzdCBwcm9jZXNzZWQgYW4KKwkJCQkgKiBlbmNvZGVkLXdvcmQsIGFuZCB0aGVyZSBpcyBvbmx5IExXUworCQkJCSAqIGJlZm9yZSB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBwcm9jZXNzLgorCQkJCSAqLworCQkJCXN0cmJ1Zl9hZGQoJm91dGJ1ZiwgaW4sIGVwIC0gaW4pOworCQkJfQorCQl9CisJCS8qIEUuZy4KKwkJICogZXAgOiAiPT9pc28tMjAyMi1qcD9CP0d5Ui4uLj89IGZvbyIKKwkJICogZXAgOiAiPT9JU08tODg1OS0xP1E/Rm9vPUZDYmFyPz0gYmF6IgorCQkgKi8KKwkJZXAgKz0gMjsKKworCQlpZiAoZXAgLSBpdC0+YnVmID49IGl0LT5sZW4gfHwgIShjcCA9IHN0cmNocihlcCwgJz8nKSkpCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCisJCWlmIChjcCArIDMgLSBpdC0+YnVmID4gaXQtPmxlbikKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisJCXN0cmJ1Zl9hZGQoJmNoYXJzZXRfcSwgZXAsIGNwIC0gZXApOworCisJCWVuY29kaW5nID0gY3BbMV07CisJCWlmICghZW5jb2RpbmcgfHwgY3BbMl0gIT0gJz8nKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJZXAgPSBzdHJzdHIoY3AgKyAzLCAiPz0iKTsKKwkJaWYgKCFlcCkKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisJCXN0cmJ1Zl9hZGQoJnBpZWNlYnVmLCBjcCArIDMsIGVwIC0gY3AgLSAzKTsKKwkJc3dpdGNoICh0b2xvd2VyKGVuY29kaW5nKSkgeworCQlkZWZhdWx0OgorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJY2FzZSAnYic6CisJCQlkZWMgPSBkZWNvZGVfYl9zZWdtZW50KCZwaWVjZWJ1Zik7CisJCQlicmVhazsKKwkJY2FzZSAncSc6CisJCQlkZWMgPSBkZWNvZGVfcV9zZWdtZW50KCZwaWVjZWJ1ZiwgMSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY29udmVydF90b191dGY4KG1pLCBkZWMsIGNoYXJzZXRfcS5idWYpKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKworCQlzdHJidWZfYWRkYnVmKCZvdXRidWYsIGRlYyk7CisJCXN0cmJ1Zl9yZWxlYXNlKGRlYyk7CisJCWZyZWUoZGVjKTsKKwkJaW4gPSBlcCArIDI7CisJfQorCXN0cmJ1Zl9hZGRzdHIoJm91dGJ1ZiwgaW4pOworCXN0cmJ1Zl9yZXNldChpdCk7CisJc3RyYnVmX2FkZGJ1ZihpdCwgJm91dGJ1Zik7CisJZm91bmRfZXJyb3IgPSAwOworcmVsZWFzZV9yZXR1cm46CisJc3RyYnVmX3JlbGVhc2UoJm91dGJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmNoYXJzZXRfcSk7CisJc3RyYnVmX3JlbGVhc2UoJnBpZWNlYnVmKTsKKworCWlmIChmb3VuZF9lcnJvcikKKwkJbWktPmlucHV0X2Vycm9yID0gLTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaGVhZGVyKHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQljb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lLAorCQkJc3RydWN0IHN0cmJ1ZiAqaGRyX2RhdGFbXSwgaW50IG92ZXJ3cml0ZSkKK3sKKwlpbnQgaSwgcmV0ID0gMCwgbGVuOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCS8qIHNlYXJjaCBmb3IgdGhlIGludGVyZXN0aW5nIHBhcnRzICovCisJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKwkJaW50IGxlbiA9IHN0cmxlbihoZWFkZXJbaV0pOworCQlpZiAoKCFoZHJfZGF0YVtpXSB8fCBvdmVyd3JpdGUpICYmIGNtcF9oZWFkZXIobGluZSwgaGVhZGVyW2ldKSkgeworCQkJLyogVW53cmFwIGlubGluZSBCIGFuZCBRIGVuY29kaW5nLCBhbmQgb3B0aW9uYWxseQorCQkJICogbm9ybWFsaXplIHRoZSBtZXRhIGluZm9ybWF0aW9uIHRvIHV0ZjguCisJCQkgKi8KKwkJCXN0cmJ1Zl9hZGQoJnNiLCBsaW5lLT5idWYgKyBsZW4gKyAyLCBsaW5lLT5sZW4gLSBsZW4gLSAyKTsKKwkJCWRlY29kZV9oZWFkZXIobWksICZzYik7CisJCQloYW5kbGVfaGVhZGVyKCZoZHJfZGF0YVtpXSwgJnNiKTsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJCX0KKwl9CisKKwkvKiBDb250ZW50IHN0dWZmICovCisJaWYgKGNtcF9oZWFkZXIobGluZSwgIkNvbnRlbnQtVHlwZSIpKSB7CisJCWxlbiA9IHN0cmxlbigiQ29udGVudC1UeXBlOiAiKTsKKwkJc3RyYnVmX2FkZCgmc2IsIGxpbmUtPmJ1ZiArIGxlbiwgbGluZS0+bGVuIC0gbGVuKTsKKwkJZGVjb2RlX2hlYWRlcihtaSwgJnNiKTsKKwkJc3RyYnVmX2luc2VydCgmc2IsIDAsICJDb250ZW50LVR5cGU6ICIsIGxlbik7CisJCWhhbmRsZV9jb250ZW50X3R5cGUobWksICZzYik7CisJCXJldCA9IDE7CisJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwl9CisJaWYgKGNtcF9oZWFkZXIobGluZSwgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciKSkgeworCQlsZW4gPSBzdHJsZW4oIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICIpOworCQlzdHJidWZfYWRkKCZzYiwgbGluZS0+YnVmICsgbGVuLCBsaW5lLT5sZW4gLSBsZW4pOworCQlkZWNvZGVfaGVhZGVyKG1pLCAmc2IpOworCQloYW5kbGVfY29udGVudF90cmFuc2Zlcl9lbmNvZGluZyhtaSwgJnNiKTsKKwkJcmV0ID0gMTsKKwkJZ290byBjaGVja19oZWFkZXJfb3V0OworCX0KKwlpZiAoY21wX2hlYWRlcihsaW5lLCAiTWVzc2FnZS1JZCIpKSB7CisJCWxlbiA9IHN0cmxlbigiTWVzc2FnZS1JZDogIik7CisJCXN0cmJ1Zl9hZGQoJnNiLCBsaW5lLT5idWYgKyBsZW4sIGxpbmUtPmxlbiAtIGxlbik7CisJCWRlY29kZV9oZWFkZXIobWksICZzYik7CisJCWlmIChtaS0+YWRkX21lc3NhZ2VfaWQpCisJCQltaS0+bWVzc2FnZV9pZCA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJcmV0ID0gMTsKKwkJZ290byBjaGVja19oZWFkZXJfb3V0OworCX0KKworY2hlY2tfaGVhZGVyX291dDoKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgdGhlIGdpdmVuIGxpbmUgb3IgYW55IGxpbmUgYmVnaW5uaW5nIHdpdGggdGhlIGdpdmVuIGxpbmUgaXMgYW4KKyAqIGluLWJvZHkgaGVhZGVyICh0aGF0IGlzLCBjaGVja19oZWFkZXIgd2lsbCBzdWNjZWVkIHdoZW4gcGFzc2VkCisgKiBtaS0+c19oZHJfZGF0YSkuCisgKi8KK3N0YXRpYyBpbnQgaXNfaW5ib2R5X2hlYWRlcihjb25zdCBzdHJ1Y3QgbWFpbGluZm8gKm1pLAorCQkJICAgIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspCisJCWlmICghbWktPnNfaGRyX2RhdGFbaV0gJiYgY21wX2hlYWRlcihsaW5lLCBoZWFkZXJbaV0pKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV90cmFuc2Zlcl9lbmNvZGluZyhzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKnJldDsKKworCXN3aXRjaCAobWktPnRyYW5zZmVyX2VuY29kaW5nKSB7CisJY2FzZSBURV9RUDoKKwkJcmV0ID0gZGVjb2RlX3Ffc2VnbWVudChsaW5lLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBURV9CQVNFNjQ6CisJCXJldCA9IGRlY29kZV9iX3NlZ21lbnQobGluZSk7CisJCWJyZWFrOworCWNhc2UgVEVfRE9OVENBUkU6CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwlzdHJidWZfcmVzZXQobGluZSk7CisJc3RyYnVmX2FkZGJ1ZihsaW5lLCByZXQpOworCXN0cmJ1Zl9yZWxlYXNlKHJldCk7CisJZnJlZShyZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwYXRjaGJyZWFrKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc2l6ZV90IGk7CisKKwkvKiBCZWdpbm5pbmcgb2YgYSAiZGlmZiAtIiBoZWFkZXI/ICovCisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgImRpZmYgLSIpKQorCQlyZXR1cm4gMTsKKworCS8qIENWUyAiSW5kZXg6ICIgbGluZT8gKi8KKwlpZiAoc3RhcnRzX3dpdGgobGluZS0+YnVmLCAiSW5kZXg6ICIpKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogIi0tLSA8ZmlsZW5hbWU+IiBzdGFydHMgcGF0Y2hlcyB3aXRob3V0IGhlYWRlcnMKKwkgKiAiLS0tPHNwPioiIGlzIGEgbWFudWFsIHNlcGFyYXRvcgorCSAqLworCWlmIChsaW5lLT5sZW4gPCA0KQorCQlyZXR1cm4gMDsKKworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICItLS0iKSkgeworCQkvKiBzcGFjZSBmb2xsb3dlZCBieSBhIGZpbGVuYW1lPyAqLworCQlpZiAobGluZS0+YnVmWzNdID09ICcgJyAmJiAhaXNzcGFjZShsaW5lLT5idWZbNF0pKQorCQkJcmV0dXJuIDE7CisJCS8qIEp1c3Qgd2hpdGVzcGFjZT8gKi8KKwkJZm9yIChpID0gMzsgaSA8IGxpbmUtPmxlbjsgaSsrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGMgPSBsaW5lLT5idWZbaV07CisJCQlpZiAoYyA9PSAnXG4nKQorCQkJCXJldHVybiAxOworCQkJaWYgKCFpc3NwYWNlKGMpKQorCQkJCWJyZWFrOworCQl9CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19zY2lzc29yc19saW5lKGNvbnN0IGNoYXIgKmxpbmUpCit7CisJY29uc3QgY2hhciAqYzsKKwlpbnQgc2Npc3NvcnMgPSAwLCBnYXAgPSAwOworCWNvbnN0IGNoYXIgKmZpcnN0X25vbmJsYW5rID0gTlVMTCwgKmxhc3Rfbm9uYmxhbmsgPSBOVUxMOworCWludCB2aXNpYmxlLCBwZXJmb3JhdGlvbiA9IDAsIGluX3BlcmZvcmF0aW9uID0gMDsKKworCWZvciAoYyA9IGxpbmU7ICpjOyBjKyspIHsKKwkJaWYgKGlzc3BhY2UoKmMpKSB7CisJCQlpZiAoaW5fcGVyZm9yYXRpb24pIHsKKwkJCQlwZXJmb3JhdGlvbisrOworCQkJCWdhcCsrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJbGFzdF9ub25ibGFuayA9IGM7CisJCWlmIChmaXJzdF9ub25ibGFuayA9PSBOVUxMKQorCQkJZmlyc3Rfbm9uYmxhbmsgPSBjOworCQlpZiAoKmMgPT0gJy0nKSB7CisJCQlpbl9wZXJmb3JhdGlvbiA9IDE7CisJCQlwZXJmb3JhdGlvbisrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCghbWVtY21wKGMsICI+OCIsIDIpIHx8ICFtZW1jbXAoYywgIjg8IiwgMikgfHwKKwkJICAgICAhbWVtY21wKGMsICI+JSIsIDIpIHx8ICFtZW1jbXAoYywgIiU8IiwgMikpKSB7CisJCQlpbl9wZXJmb3JhdGlvbiA9IDE7CisJCQlwZXJmb3JhdGlvbiArPSAyOworCQkJc2Npc3NvcnMgKz0gMjsKKwkJCWMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWluX3BlcmZvcmF0aW9uID0gMDsKKwl9CisKKwkvKgorCSAqIFRoZSBtYXJrIG11c3QgYmUgYXQgbGVhc3QgOCBieXRlcyBsb25nIChlLmcuICItLSA+OCAtLSIpLgorCSAqIEV2ZW4gdGhvdWdoIHRoZXJlIGNhbiBiZSBhcmJpdHJhcnkgY3J1ZnQgb24gdGhlIHNhbWUgbGluZQorCSAqIChlLmcuICJjdXQgaGVyZSIpLCBpbiBvcmRlciB0byBhdm9pZCBtaXNpZGVudGlmaWNhdGlvbiwgdGhlCisJICogcGVyZm9yYXRpb24gbXVzdCBvY2N1cHkgbW9yZSB0aGFuIGEgdGhpcmQgb2YgdGhlIHZpc2libGUKKwkgKiB3aWR0aCBvZiB0aGUgbGluZSwgYW5kIGRhc2hlcyBhbmQgc2Npc3NvcnMgbXVzdCBvY2N1cHkgbW9yZQorCSAqIHRoYW4gaGFsZiBvZiB0aGUgcGVyZm9yYXRpb24uCisJICovCisKKwlpZiAoZmlyc3Rfbm9uYmxhbmsgJiYgbGFzdF9ub25ibGFuaykKKwkJdmlzaWJsZSA9IGxhc3Rfbm9uYmxhbmsgLSBmaXJzdF9ub25ibGFuayArIDE7CisJZWxzZQorCQl2aXNpYmxlID0gMDsKKwlyZXR1cm4gKHNjaXNzb3JzICYmIDggPD0gdmlzaWJsZSAmJgorCQl2aXNpYmxlIDwgcGVyZm9yYXRpb24gKiAzICYmCisJCWdhcCAqIDIgPCBwZXJmb3JhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX2luYm9keV9oZWFkZXJfYWNjdW0oc3RydWN0IG1haWxpbmZvICptaSkKK3sKKwlpZiAoIW1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLmxlbikKKwkJcmV0dXJuOworCWlmICghY2hlY2tfaGVhZGVyKG1pLCAmbWktPmluYm9keV9oZWFkZXJfYWNjdW0sIG1pLT5zX2hkcl9kYXRhLCAwKSkKKwkJQlVHKCJpbmJvZHlfaGVhZGVyX2FjY3VtLCBpZiBub3QgZW1wdHksIG11c3QgYWx3YXlzIGNvbnRhaW4gYSB2YWxpZCBpbi1ib2R5IGhlYWRlciIpOworCXN0cmJ1Zl9yZXNldCgmbWktPmluYm9keV9oZWFkZXJfYWNjdW0pOworfQorCitzdGF0aWMgaW50IGNoZWNrX2luYm9keV9oZWFkZXIoc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpZiAobWktPmluYm9keV9oZWFkZXJfYWNjdW0ubGVuICYmCisJICAgIChsaW5lLT5idWZbMF0gPT0gJyAnIHx8IGxpbmUtPmJ1ZlswXSA9PSAnXHQnKSkgeworCQlpZiAobWktPnVzZV9zY2lzc29ycyAmJiBpc19zY2lzc29yc19saW5lKGxpbmUtPmJ1ZikpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGEgc2Npc3NvcnMgbGluZTsgZG8gbm90IGNvbnNpZGVyIHRoaXMgbGluZQorCQkJICogYXMgYSBoZWFkZXIgY29udGludWF0aW9uIGxpbmUuCisJCQkgKi8KKwkJCWZsdXNoX2luYm9keV9oZWFkZXJfYWNjdW0obWkpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc3RyYnVmX3N0cmlwX3N1ZmZpeCgmbWktPmluYm9keV9oZWFkZXJfYWNjdW0sICJcbiIpOworCQlzdHJidWZfYWRkYnVmKCZtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bSwgbGluZSk7CisJCXJldHVybiAxOworCX0KKworCWZsdXNoX2luYm9keV9oZWFkZXJfYWNjdW0obWkpOworCisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgIj5Gcm9tIikgJiYgaXNzcGFjZShsaW5lLT5idWZbNV0pKQorCQlyZXR1cm4gaXNfZm9ybWF0X3BhdGNoX3NlcGFyYXRvcihsaW5lLT5idWYgKyAxLCBsaW5lLT5sZW4gLSAxKTsKKwlpZiAoc3RhcnRzX3dpdGgobGluZS0+YnVmLCAiW1BBVENIXSIpICYmIGlzc3BhY2UobGluZS0+YnVmWzddKSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspCisJCQlpZiAoIXN0cmNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSkpIHsKKwkJCQloYW5kbGVfaGVhZGVyKCZtaS0+c19oZHJfZGF0YVtpXSwgbGluZSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCXJldHVybiAwOworCX0KKwlpZiAoaXNfaW5ib2R5X2hlYWRlcihtaSwgbGluZSkpIHsKKwkJc3RyYnVmX2FkZGJ1ZigmbWktPmluYm9keV9oZWFkZXJfYWNjdW0sIGxpbmUpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlhc3NlcnQoIW1pLT5maWx0ZXJfc3RhZ2UpOworCisJaWYgKG1pLT5oZWFkZXJfc3RhZ2UpIHsKKwkJaWYgKCFsaW5lLT5sZW4gfHwgKGxpbmUtPmxlbiA9PSAxICYmIGxpbmUtPmJ1ZlswXSA9PSAnXG4nKSkgeworCQkJaWYgKG1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLmxlbikgeworCQkJCWZsdXNoX2luYm9keV9oZWFkZXJfYWNjdW0obWkpOworCQkJCW1pLT5oZWFkZXJfc3RhZ2UgPSAwOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAobWktPnVzZV9pbmJvZHlfaGVhZGVycyAmJiBtaS0+aGVhZGVyX3N0YWdlKSB7CisJCW1pLT5oZWFkZXJfc3RhZ2UgPSBjaGVja19pbmJvZHlfaGVhZGVyKG1pLCBsaW5lKTsKKwkJaWYgKG1pLT5oZWFkZXJfc3RhZ2UpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJLyogT25seSB0cmltIHRoZSBmaXJzdCAoYmxhbmspIGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlCisJCSAqIHdoZW4gaWdub3JpbmcgaW4tYm9keSBoZWFkZXJzLgorCQkgKi8KKwkJbWktPmhlYWRlcl9zdGFnZSA9IDA7CisKKwkvKiBub3JtYWxpemUgdGhlIGxvZyBtZXNzYWdlIHRvIFVURi04LiAqLworCWlmIChjb252ZXJ0X3RvX3V0ZjgobWksIGxpbmUsIG1pLT5jaGFyc2V0LmJ1ZikpCisJCXJldHVybiAwOyAvKiBtaS0+aW5wdXRfZXJyb3IgYWxyZWFkeSBzZXQgKi8KKworCWlmIChtaS0+dXNlX3NjaXNzb3JzICYmIGlzX3NjaXNzb3JzX2xpbmUobGluZS0+YnVmKSkgeworCQlpbnQgaTsKKworCQlzdHJidWZfc2V0bGVuKCZtaS0+bG9nX21lc3NhZ2UsIDApOworCQltaS0+aGVhZGVyX3N0YWdlID0gMTsKKworCQkvKgorCQkgKiBXZSBtYXkgaGF2ZSBhbHJlYWR5IHJlYWQgInNlY29uZGFyeSBoZWFkZXJzIjsgcHVyZ2UKKwkJICogdGhlbSB0byBnaXZlIG91cnNlbHZlcyBhIGNsZWFuIHJlc3RhcnQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworCQkJaWYgKG1pLT5zX2hkcl9kYXRhW2ldKQorCQkJCXN0cmJ1Zl9yZWxlYXNlKG1pLT5zX2hkcl9kYXRhW2ldKTsKKwkJCW1pLT5zX2hkcl9kYXRhW2ldID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGF0Y2hicmVhayhsaW5lKSkgeworCQlpZiAobWktPm1lc3NhZ2VfaWQpCisJCQlzdHJidWZfYWRkZigmbWktPmxvZ19tZXNzYWdlLAorCQkJCSAgICAiTWVzc2FnZS1JZDogJXNcbiIsIG1pLT5tZXNzYWdlX2lkKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RyYnVmX2FkZGJ1ZigmbWktPmxvZ19tZXNzYWdlLCBsaW5lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3BhdGNoKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJZndyaXRlKGxpbmUtPmJ1ZiwgMSwgbGluZS0+bGVuLCBtaS0+cGF0Y2hmaWxlKTsKKwltaS0+cGF0Y2hfbGluZXMrKzsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2ZpbHRlcihzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN3aXRjaCAobWktPmZpbHRlcl9zdGFnZSkgeworCWNhc2UgMDoKKwkJaWYgKCFoYW5kbGVfY29tbWl0X21zZyhtaSwgbGluZSkpCisJCQlicmVhazsKKwkJbWktPmZpbHRlcl9zdGFnZSsrOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgMToKKwkJaGFuZGxlX3BhdGNoKG1pLCBsaW5lKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGlzX3JmYzI4MjJfaGVhZGVyKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJLyoKKwkgKiBUaGUgc2VjdGlvbiB0aGF0IGRlZmluZXMgdGhlIGxvb3Nlc3QgcG9zc2libGUKKwkgKiBmaWVsZCBuYW1lIGlzICIzLjYuOCBPcHRpb25hbCBmaWVsZHMiLgorCSAqCisJICogb3B0aW9uYWwtZmllbGQgPSBmaWVsZC1uYW1lICI6IiB1bnN0cnVjdHVyZWQgQ1JMRgorCSAqIGZpZWxkLW5hbWUgPSAxKmZ0ZXh0CisJICogZnRleHQgPSAlZDMzLTU3IC8gJTU5LTEyNgorCSAqLworCWludCBjaDsKKwljaGFyICpjcCA9IGxpbmUtPmJ1ZjsKKworCS8qIENvdW50IG1ib3ggRnJvbSBoZWFkZXJzIGFzIGhlYWRlcnMgKi8KKwlpZiAoc3RhcnRzX3dpdGgoY3AsICJGcm9tICIpIHx8IHN0YXJ0c193aXRoKGNwLCAiPkZyb20gIikpCisJCXJldHVybiAxOworCisJd2hpbGUgKChjaCA9ICpjcCsrKSkgeworCQlpZiAoY2ggPT0gJzonKQorCQkJcmV0dXJuIDE7CisJCWlmICgoMzMgPD0gY2ggJiYgY2ggPD0gNTcpIHx8CisJCSAgICAoNTkgPD0gY2ggJiYgY2ggPD0gMTI2KSkKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfaGVhZGVyX2xpbmUoc3RydWN0IHN0cmJ1ZiAqbGluZSwgRklMRSAqaW4pCit7CisJc3RydWN0IHN0cmJ1ZiBjb250aW51YXRpb24gPSBTVFJCVUZfSU5JVDsKKworCS8qIEdldCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgbGluZS4gKi8KKwlpZiAoc3RyYnVmX2dldGxpbmVfbGYobGluZSwgaW4pKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSXMgaXQgYW4gZW1wdHkgbGluZSBvciBub3QgYSB2YWxpZCByZmMyODIyIGhlYWRlcj8KKwkgKiBJZiBzbywgc3RvcCBoZXJlLCBhbmQgcmV0dXJuIGZhbHNlICgibm90IGEgaGVhZGVyIikKKwkgKi8KKwlzdHJidWZfcnRyaW0obGluZSk7CisJaWYgKCFsaW5lLT5sZW4gfHwgIWlzX3JmYzI4MjJfaGVhZGVyKGxpbmUpKSB7CisJCS8qIFJlLWFkZCB0aGUgbmV3bGluZSAqLworCQlzdHJidWZfYWRkY2gobGluZSwgJ1xuJyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTm93IHdlIG5lZWQgdG8gZWF0IGFsbCB0aGUgY29udGludWF0aW9uIGxpbmVzLi4KKwkgKiBZdWNrLCAyODIyIGhlYWRlciAiZm9sZGluZyIKKwkgKi8KKwlmb3IgKDs7KSB7CisJCWludCBwZWVrOworCisJCXBlZWsgPSBmZ2V0Yyhpbik7CisJCWlmIChwZWVrID09IEVPRikKKwkJCWJyZWFrOworCQl1bmdldGMocGVlaywgaW4pOworCQlpZiAocGVlayAhPSAnICcgJiYgcGVlayAhPSAnXHQnKQorCQkJYnJlYWs7CisJCWlmIChzdHJidWZfZ2V0bGluZV9sZigmY29udGludWF0aW9uLCBpbikpCisJCQlicmVhazsKKwkJY29udGludWF0aW9uLmJ1ZlswXSA9ICcgJzsKKwkJc3RyYnVmX3J0cmltKCZjb250aW51YXRpb24pOworCQlzdHJidWZfYWRkYnVmKGxpbmUsICZjb250aW51YXRpb24pOworCX0KKwlzdHJidWZfcmVsZWFzZSgmY29udGludWF0aW9uKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGZpbmRfYm91bmRhcnkoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lX2xmKGxpbmUsIG1pLT5pbnB1dCkpIHsKKwkJaWYgKCoobWktPmNvbnRlbnRfdG9wKSAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkobWksIGxpbmUpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9ib3VuZGFyeShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgbmV3bGluZSA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGNoKCZuZXdsaW5lLCAnXG4nKTsKK2FnYWluOgorCWlmIChsaW5lLT5sZW4gPj0gKCoobWktPmNvbnRlbnRfdG9wKSktPmxlbiArIDIgJiYKKwkgICAgIW1lbWNtcChsaW5lLT5idWYgKyAoKihtaS0+Y29udGVudF90b3ApKS0+bGVuLCAiLS0iLCAyKSkgeworCQkvKiB3ZSBoaXQgYW4gZW5kIGJvdW5kYXJ5ICovCisJCS8qIHBvcCB0aGUgY3VycmVudCBib3VuZGFyeSBvZmYgdGhlIHN0YWNrICovCisJCXN0cmJ1Zl9yZWxlYXNlKCoobWktPmNvbnRlbnRfdG9wKSk7CisJCUZSRUVfQU5EX05VTEwoKihtaS0+Y29udGVudF90b3ApKTsKKworCQkvKiB0ZWNobmljYWxseSB3b24ndCBoYXBwZW4gYXMgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KCkKKwkJICAgd2lsbCBmYWlsIGZpcnN0LiAgQnV0IGp1c3QgaW4gY2FzZS4uCisJCSAqLworCQlpZiAoLS1taS0+Y29udGVudF90b3AgPCBtaS0+Y29udGVudCkgeworCQkJZXJyb3IoIkRldGVjdGVkIG1pc21hdGNoZWQgYm91bmRhcmllcywgY2FuJ3QgcmVjb3ZlciIpOworCQkJbWktPmlucHV0X2Vycm9yID0gLTE7CisJCQltaS0+Y29udGVudF90b3AgPSBtaS0+Y29udGVudDsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZuZXdsaW5lKTsKKwkJCXJldHVybiAwOworCQl9CisJCWhhbmRsZV9maWx0ZXIobWksICZuZXdsaW5lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm5ld2xpbmUpOworCQlpZiAobWktPmlucHV0X2Vycm9yKQorCQkJcmV0dXJuIDA7CisKKwkJLyogc2tpcCB0byB0aGUgbmV4dCBib3VuZGFyeSAqLworCQlpZiAoIWZpbmRfYm91bmRhcnkobWksIGxpbmUpKQorCQkJcmV0dXJuIDA7CisJCWdvdG8gYWdhaW47CisJfQorCisJLyogc2V0IHNvbWUgZGVmYXVsdHMgKi8KKwltaS0+dHJhbnNmZXJfZW5jb2RpbmcgPSBURV9ET05UQ0FSRTsKKwlzdHJidWZfcmVzZXQoJm1pLT5jaGFyc2V0KTsKKworCS8qIHNsdXJwIGluIHRoaXMgc2VjdGlvbidzIGluZm8gKi8KKwl3aGlsZSAocmVhZF9vbmVfaGVhZGVyX2xpbmUobGluZSwgbWktPmlucHV0KSkKKwkJY2hlY2tfaGVhZGVyKG1pLCBsaW5lLCBtaS0+cF9oZHJfZGF0YSwgMCk7CisKKwlzdHJidWZfcmVsZWFzZSgmbmV3bGluZSk7CisJLyogcmVwbGVuaXNoIGxpbmUgKi8KKwlpZiAoc3RyYnVmX2dldGxpbmVfbGYobGluZSwgbWktPmlucHV0KSkKKwkJcmV0dXJuIDA7CisJc3RyYnVmX2FkZGNoKGxpbmUsICdcbicpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmlsdGVyX2Zsb3dlZChzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lLAorCQkJCSBzdHJ1Y3Qgc3RyYnVmICpwcmV2KQoreworCXNpemVfdCBsZW4gPSBsaW5lLT5sZW47CisJY29uc3QgY2hhciAqcmVzdDsKKworCWlmICghbWktPmZvcm1hdF9mbG93ZWQpIHsKKwkJaGFuZGxlX2ZpbHRlcihtaSwgbGluZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGluZS0+YnVmW2xlbiAtIDFdID09ICdcbicpIHsKKwkJbGVuLS07CisJCWlmIChsZW4gJiYgbGluZS0+YnVmW2xlbiAtIDFdID09ICdccicpCisJCQlsZW4tLTsKKwl9CisKKwkvKiBLZWVwIHNpZ25hdHVyZSBzZXBhcmF0b3IgYXMtaXMuICovCisJaWYgKHNraXBfcHJlZml4KGxpbmUtPmJ1ZiwgIi0tICIsICZyZXN0KSAmJiByZXN0IC0gbGluZS0+YnVmID09IGxlbikgeworCQlpZiAocHJldi0+bGVuKSB7CisJCQloYW5kbGVfZmlsdGVyKG1pLCBwcmV2KTsKKwkJCXN0cmJ1Zl9yZXNldChwcmV2KTsKKwkJfQorCQloYW5kbGVfZmlsdGVyKG1pLCBsaW5lKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFVuc3R1ZmYgc3BhY2Utc3R1ZmZlZCBsaW5lLiAqLworCWlmIChsZW4gJiYgbGluZS0+YnVmWzBdID09ICcgJykgeworCQlzdHJidWZfcmVtb3ZlKGxpbmUsIDAsIDEpOworCQlsZW4tLTsKKwl9CisKKwkvKiBTYXZlIGZsb3dlZCBsaW5lIGZvciBsYXRlciwgYnV0IHdpdGhvdXQgdGhlIHNvZnQgbGluZSBicmVhay4gKi8KKwlpZiAobGVuICYmIGxpbmUtPmJ1ZltsZW4gLSAxXSA9PSAnICcpIHsKKwkJc3RyYnVmX2FkZChwcmV2LCBsaW5lLT5idWYsIGxlbiAtICEhbWktPmRlbHNwKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByZXBlbmQgYW55IHByZXZpb3VzIHBhcnRpYWwgbGluZXMgKi8KKwlzdHJidWZfaW5zZXJ0KGxpbmUsIDAsIHByZXYtPmJ1ZiwgcHJldi0+bGVuKTsKKwlzdHJidWZfcmVzZXQocHJldik7CisKKwloYW5kbGVfZmlsdGVyKG1pLCBsaW5lKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JvZHkoc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHByZXYgPSBTVFJCVUZfSU5JVDsKKworCS8qIFNraXAgdXAgdG8gdGhlIGZpcnN0IGJvdW5kYXJ5ICovCisJaWYgKCoobWktPmNvbnRlbnRfdG9wKSkgeworCQlpZiAoIWZpbmRfYm91bmRhcnkobWksIGxpbmUpKQorCQkJZ290byBoYW5kbGVfYm9keV9vdXQ7CisJfQorCisJZG8geworCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLworCQlpZiAoKihtaS0+Y29udGVudF90b3ApICYmIGlzX211bHRpcGFydF9ib3VuZGFyeShtaSwgbGluZSkpIHsKKwkJCS8qIGZsdXNoIGFueSBsZWZ0b3ZlciAqLworCQkJaWYgKHByZXYubGVuKSB7CisJCQkJaGFuZGxlX2ZpbHRlcihtaSwgJnByZXYpOworCQkJCXN0cmJ1Zl9yZXNldCgmcHJldik7CisJCQl9CisJCQlpZiAoIWhhbmRsZV9ib3VuZGFyeShtaSwgbGluZSkpCisJCQkJZ290byBoYW5kbGVfYm9keV9vdXQ7CisJCX0KKworCQkvKiBVbndyYXAgdHJhbnNmZXIgZW5jb2RpbmcgKi8KKwkJZGVjb2RlX3RyYW5zZmVyX2VuY29kaW5nKG1pLCBsaW5lKTsKKworCQlzd2l0Y2ggKG1pLT50cmFuc2Zlcl9lbmNvZGluZykgeworCQljYXNlIFRFX0JBU0U2NDoKKwkJY2FzZSBURV9RUDoKKwkJeworCQkJc3RydWN0IHN0cmJ1ZiAqKmxpbmVzLCAqKml0LCAqc2I7CisKKwkJCS8qIFByZXBlbmQgYW55IHByZXZpb3VzIHBhcnRpYWwgbGluZXMgKi8KKwkJCXN0cmJ1Zl9pbnNlcnQobGluZSwgMCwgcHJldi5idWYsIHByZXYubGVuKTsKKwkJCXN0cmJ1Zl9yZXNldCgmcHJldik7CisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGEgZGVjb2RlZCBsaW5lIHRoYXQgbWF5IGNvbnRhaW4KKwkJCSAqIG11bHRpcGxlIG5ldyBsaW5lcy4gIFBhc3Mgb25seSBvbmUgY2h1bmsKKwkJCSAqIGF0IGEgdGltZSB0byBoYW5kbGVfZmlsdGVyKCkKKwkJCSAqLworCQkJbGluZXMgPSBzdHJidWZfc3BsaXQobGluZSwgJ1xuJyk7CisJCQlmb3IgKGl0ID0gbGluZXM7IChzYiA9ICppdCk7IGl0KyspIHsKKwkJCQlpZiAoKihpdCArIDEpID09IE5VTEwpIC8qIFRoZSBsYXN0IGxpbmUgKi8KKwkJCQkJaWYgKHNiLT5idWZbc2ItPmxlbiAtIDFdICE9ICdcbicpIHsKKwkJCQkJCS8qIFBhcnRpYWwgbGluZSwgc2F2ZSBpdCBmb3IgbGF0ZXIuICovCisJCQkJCQlzdHJidWZfYWRkYnVmKCZwcmV2LCBzYik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCWhhbmRsZV9maWx0ZXJfZmxvd2VkKG1pLCBzYiwgJnByZXYpOworCQkJfQorCQkJLyoKKwkJCSAqIFRoZSBwYXJ0aWFsIGNodW5rIGlzIHNhdmVkIGluICJwcmV2IiBhbmQgd2lsbCBiZQorCQkJICogYXBwZW5kZWQgYnkgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHJlYWRfbGluZV93aXRoX251bCgpLgorCQkJICovCisJCQlzdHJidWZfbGlzdF9mcmVlKGxpbmVzKTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQloYW5kbGVfZmlsdGVyX2Zsb3dlZChtaSwgbGluZSwgJnByZXYpOworCQl9CisKKwkJaWYgKG1pLT5pbnB1dF9lcnJvcikKKwkJCWJyZWFrOworCX0gd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKGxpbmUsIG1pLT5pbnB1dCwgJ1xuJykpOworCisJaWYgKHByZXYubGVuKQorCQloYW5kbGVfZmlsdGVyKG1pLCAmcHJldik7CisKKwlmbHVzaF9pbmJvZHlfaGVhZGVyX2FjY3VtKG1pKTsKKworaGFuZGxlX2JvZHlfb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZwcmV2KTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X2hlYWRlcl9saW5lcyhGSUxFICpmb3V0LCBjb25zdCBjaGFyICpoZHIsIGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpCit7CisJY29uc3QgY2hhciAqc3AgPSBkYXRhLT5idWY7CisJd2hpbGUgKDEpIHsKKwkJY2hhciAqZXAgPSBzdHJjaHIoc3AsICdcbicpOworCQlpbnQgbGVuOworCQlpZiAoIWVwKQorCQkJbGVuID0gc3RybGVuKHNwKTsKKwkJZWxzZQorCQkJbGVuID0gZXAgLSBzcDsKKwkJZnByaW50Zihmb3V0LCAiJXM6ICUuKnNcbiIsIGhkciwgbGVuLCBzcCk7CisJCWlmICghZXApCisJCQlicmVhazsKKwkJc3AgPSBlcCArIDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pKQoreworCXN0cnVjdCBzdHJidWYgKmhkcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CisJCS8qIG9ubHkgcHJpbnQgaW5ib2R5IGhlYWRlcnMgaWYgd2Ugb3V0cHV0IGEgcGF0Y2ggZmlsZSAqLworCQlpZiAobWktPnBhdGNoX2xpbmVzICYmIG1pLT5zX2hkcl9kYXRhW2ldKQorCQkJaGRyID0gbWktPnNfaGRyX2RhdGFbaV07CisJCWVsc2UgaWYgKG1pLT5wX2hkcl9kYXRhW2ldKQorCQkJaGRyID0gbWktPnBfaGRyX2RhdGFbaV07CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RyY21wKGhlYWRlcltpXSwgIlN1YmplY3QiKSkgeworCQkJaWYgKCFtaS0+a2VlcF9zdWJqZWN0KSB7CisJCQkJY2xlYW51cF9zdWJqZWN0KG1pLCBoZHIpOworCQkJCWNsZWFudXBfc3BhY2UoaGRyKTsKKwkJCX0KKwkJCW91dHB1dF9oZWFkZXJfbGluZXMobWktPm91dHB1dCwgIlN1YmplY3QiLCBoZHIpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoaGVhZGVyW2ldLCAiRnJvbSIpKSB7CisJCQljbGVhbnVwX3NwYWNlKGhkcik7CisJCQloYW5kbGVfZnJvbShtaSwgaGRyKTsKKwkJCWZwcmludGYobWktPm91dHB1dCwgIkF1dGhvcjogJXNcbiIsIG1pLT5uYW1lLmJ1Zik7CisJCQlmcHJpbnRmKG1pLT5vdXRwdXQsICJFbWFpbDogJXNcbiIsIG1pLT5lbWFpbC5idWYpOworCQl9IGVsc2UgeworCQkJY2xlYW51cF9zcGFjZShoZHIpOworCQkJZnByaW50ZihtaS0+b3V0cHV0LCAiJXM6ICVzXG4iLCBoZWFkZXJbaV0sIGhkci0+YnVmKTsKKwkJfQorCX0KKwlmcHJpbnRmKG1pLT5vdXRwdXQsICJcbiIpOworfQorCitpbnQgbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICptaSwgY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpwYXRjaCkKK3sKKwlGSUxFICpjbWl0bXNnOworCWludCBwZWVrOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJY21pdG1zZyA9IGZvcGVuKG1zZywgInciKTsKKwlpZiAoIWNtaXRtc2cpIHsKKwkJcGVycm9yKG1zZyk7CisJCXJldHVybiAtMTsKKwl9CisJbWktPnBhdGNoZmlsZSA9IGZvcGVuKHBhdGNoLCAidyIpOworCWlmICghbWktPnBhdGNoZmlsZSkgeworCQlwZXJyb3IocGF0Y2gpOworCQlmY2xvc2UoY21pdG1zZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwltaS0+cF9oZHJfZGF0YSA9IHhjYWxsb2MoTUFYX0hEUl9QQVJTRUQsIHNpemVvZigqKG1pLT5wX2hkcl9kYXRhKSkpOworCW1pLT5zX2hkcl9kYXRhID0geGNhbGxvYyhNQVhfSERSX1BBUlNFRCwgc2l6ZW9mKCoobWktPnNfaGRyX2RhdGEpKSk7CisKKwlkbyB7CisJCXBlZWsgPSBmZ2V0YyhtaS0+aW5wdXQpOworCQlpZiAocGVlayA9PSBFT0YpIHsKKwkJCWZjbG9zZShjbWl0bXNnKTsKKwkJCXJldHVybiBlcnJvcigiZW1wdHkgcGF0Y2g6ICclcyciLCBwYXRjaCk7CisJCX0KKwl9IHdoaWxlIChpc3NwYWNlKHBlZWspKTsKKwl1bmdldGMocGVlaywgbWktPmlucHV0KTsKKworCS8qIHByb2Nlc3MgdGhlIGVtYWlsIGhlYWRlciAqLworCXdoaWxlIChyZWFkX29uZV9oZWFkZXJfbGluZSgmbGluZSwgbWktPmlucHV0KSkKKwkJY2hlY2tfaGVhZGVyKG1pLCAmbGluZSwgbWktPnBfaGRyX2RhdGEsIDEpOworCisJaGFuZGxlX2JvZHkobWksICZsaW5lKTsKKwlmd3JpdGUobWktPmxvZ19tZXNzYWdlLmJ1ZiwgMSwgbWktPmxvZ19tZXNzYWdlLmxlbiwgY21pdG1zZyk7CisJZmNsb3NlKGNtaXRtc2cpOworCWZjbG9zZShtaS0+cGF0Y2hmaWxlKTsKKworCWhhbmRsZV9pbmZvKG1pKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJcmV0dXJuIG1pLT5pbnB1dF9lcnJvcjsKK30KKworc3RhdGljIGludCBnaXRfbWFpbGluZm9fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKm1pXykKK3sKKwlzdHJ1Y3QgbWFpbGluZm8gKm1pID0gbWlfOworCisJaWYgKCFzdGFydHNfd2l0aCh2YXIsICJtYWlsaW5mby4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBOVUxMKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJtYWlsaW5mby5zY2lzc29ycyIpKSB7CisJCW1pLT51c2Vfc2Npc3NvcnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwkvKiBwZXJoYXBzIG90aGVycyBoZXJlICovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0dXBfbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICptaSkKK3sKKwltZW1zZXQobWksIDAsIHNpemVvZigqbWkpKTsKKwlzdHJidWZfaW5pdCgmbWktPm5hbWUsIDApOworCXN0cmJ1Zl9pbml0KCZtaS0+ZW1haWwsIDApOworCXN0cmJ1Zl9pbml0KCZtaS0+Y2hhcnNldCwgMCk7CisJc3RyYnVmX2luaXQoJm1pLT5sb2dfbWVzc2FnZSwgMCk7CisJc3RyYnVmX2luaXQoJm1pLT5pbmJvZHlfaGVhZGVyX2FjY3VtLCAwKTsKKwltaS0+aGVhZGVyX3N0YWdlID0gMTsKKwltaS0+dXNlX2luYm9keV9oZWFkZXJzID0gMTsKKwltaS0+Y29udGVudF90b3AgPSBtaS0+Y29udGVudDsKKwlnaXRfY29uZmlnKGdpdF9tYWlsaW5mb19jb25maWcsIG1pKTsKK30KKwordm9pZCBjbGVhcl9tYWlsaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pKQoreworCWludCBpOworCisJc3RyYnVmX3JlbGVhc2UoJm1pLT5uYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmbWktPmVtYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmbWktPmNoYXJzZXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bSk7CisJZnJlZShtaS0+bWVzc2FnZV9pZCk7CisKKwlpZiAobWktPnBfaGRyX2RhdGEpCisJCWZvciAoaSA9IDA7IG1pLT5wX2hkcl9kYXRhW2ldOyBpKyspCisJCQlzdHJidWZfcmVsZWFzZShtaS0+cF9oZHJfZGF0YVtpXSk7CisJZnJlZShtaS0+cF9oZHJfZGF0YSk7CisJaWYgKG1pLT5zX2hkcl9kYXRhKQorCQlmb3IgKGkgPSAwOyBtaS0+c19oZHJfZGF0YVtpXTsgaSsrKQorCQkJc3RyYnVmX3JlbGVhc2UobWktPnNfaGRyX2RhdGFbaV0pOworCWZyZWUobWktPnNfaGRyX2RhdGEpOworCisJd2hpbGUgKG1pLT5jb250ZW50IDwgbWktPmNvbnRlbnRfdG9wKSB7CisJCWZyZWUoKihtaS0+Y29udGVudF90b3ApKTsKKwkJbWktPmNvbnRlbnRfdG9wLS07CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJm1pLT5sb2dfbWVzc2FnZSk7Cit9CmRpZmYgLS1naXQgYS90L3Q0MjU2LzEvbWFpbGluZm8uYy5vcmlnIGIvdC90NDI1Ni8xL21haWxpbmZvLmMub3JpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjgxYTM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Ni8xL21haWxpbmZvLmMub3JpZwpAQCAtMCwwICsxLDExODUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJtYWlsaW5mby5oIgorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3NwYWNlKHN0cnVjdCBzdHJidWYgKnNiKQoreworCXNpemVfdCBwb3MsIGNudDsKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IHNiLT5sZW47IHBvcysrKSB7CisJCWlmIChpc3NwYWNlKHNiLT5idWZbcG9zXSkpIHsKKwkJCXNiLT5idWZbcG9zXSA9ICcgJzsKKwkJCWZvciAoY250ID0gMDsgaXNzcGFjZShzYi0+YnVmW3BvcyArIGNudCArIDFdKTsgY250KyspOworCQkJc3RyYnVmX3JlbW92ZShzYiwgcG9zICsgMSwgY250KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X3NhbmVfbmFtZShzdHJ1Y3Qgc3RyYnVmICpvdXQsIHN0cnVjdCBzdHJidWYgKm5hbWUsIHN0cnVjdCBzdHJidWYgKmVtYWlsKQoreworCXN0cnVjdCBzdHJidWYgKnNyYyA9IG5hbWU7CisJaWYgKG5hbWUtPmxlbiA8IDMgfHwgNjAgPCBuYW1lLT5sZW4gfHwgc3RyY2hyKG5hbWUtPmJ1ZiwgJ0AnKSB8fAorCQlzdHJjaHIobmFtZS0+YnVmLCAnPCcpIHx8IHN0cmNocihuYW1lLT5idWYsICc+JykpCisJCXNyYyA9IGVtYWlsOworCWVsc2UgaWYgKG5hbWUgPT0gb3V0KQorCQlyZXR1cm47CisJc3RyYnVmX3Jlc2V0KG91dCk7CisJc3RyYnVmX2FkZGJ1ZihvdXQsIHNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2JvZ3VzX2Zyb20oc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwkvKiBKb2huIERvZSA8am9obmRvZT4gKi8KKworCWNoYXIgKmJyYSwgKmtldDsKKwkvKiBUaGlzIGlzIGZhbGxiYWNrLCBzbyBkbyBub3QgYm90aGVyIGlmIHdlIGFscmVhZHkgaGF2ZSBhbgorCSAqIGUtbWFpbCBhZGRyZXNzLgorCSAqLworCWlmIChtaS0+ZW1haWwubGVuKQorCQlyZXR1cm47CisKKwlicmEgPSBzdHJjaHIobGluZS0+YnVmLCAnPCcpOworCWlmICghYnJhKQorCQlyZXR1cm47CisJa2V0ID0gc3RyY2hyKGJyYSwgJz4nKTsKKwlpZiAoIWtldCkKKwkJcmV0dXJuOworCisJc3RyYnVmX3Jlc2V0KCZtaS0+ZW1haWwpOworCXN0cmJ1Zl9hZGQoJm1pLT5lbWFpbCwgYnJhICsgMSwga2V0IC0gYnJhIC0gMSk7CisKKwlzdHJidWZfcmVzZXQoJm1pLT5uYW1lKTsKKwlzdHJidWZfYWRkKCZtaS0+bmFtZSwgbGluZS0+YnVmLCBicmEgLSBsaW5lLT5idWYpOworCXN0cmJ1Zl90cmltKCZtaS0+bmFtZSk7CisJZ2V0X3NhbmVfbmFtZSgmbWktPm5hbWUsICZtaS0+bmFtZSwgJm1pLT5lbWFpbCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnF1b3RlX2NvbW1lbnQoc3RydWN0IHN0cmJ1ZiAqb3V0YnVmLCBjb25zdCBjaGFyICppbikKK3sKKwlpbnQgYzsKKwlpbnQgdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisKKwlzdHJidWZfYWRkY2gob3V0YnVmLCAnKCcpOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJaWYgKHRha2VfbmV4dF9saXRlcmFsbHkgPT0gMSkgeworCQkJdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ1xcJzoKKwkJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJygnOgorCQkJCWluID0gdW5xdW90ZV9jb21tZW50KG91dGJ1ZiwgaW4pOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnKSc6CisJCQkJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgJyknKTsKKwkJCQlyZXR1cm4gaW47CisJCQl9CisJCX0KKworCQlzdHJidWZfYWRkY2gob3V0YnVmLCBjKTsKKwl9CisKKwlyZXR1cm4gaW47Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnF1b3RlX3F1b3RlZF9zdHJpbmcoc3RydWN0IHN0cmJ1ZiAqb3V0YnVmLCBjb25zdCBjaGFyICppbikKK3sKKwlpbnQgYzsKKwlpbnQgdGFrZV9uZXh0X2xpdGVyYWxseSA9IDA7CisKKwl3aGlsZSAoKGMgPSAqaW4rKykgIT0gMCkgeworCQlpZiAodGFrZV9uZXh0X2xpdGVyYWxseSA9PSAxKSB7CisJCQl0YWtlX25leHRfbGl0ZXJhbGx5ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnXFwnOgorCQkJCXRha2VfbmV4dF9saXRlcmFsbHkgPSAxOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnIic6CisJCQkJcmV0dXJuIGluOworCQkJfQorCQl9CisKKwkJc3RyYnVmX2FkZGNoKG91dGJ1ZiwgYyk7CisJfQorCisJcmV0dXJuIGluOworfQorCitzdGF0aWMgdm9pZCB1bnF1b3RlX3F1b3RlZF9wYWlyKHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXRidWY7CisJY29uc3QgY2hhciAqaW4gPSBsaW5lLT5idWY7CisJaW50IGM7CisKKwlzdHJidWZfaW5pdCgmb3V0YnVmLCBsaW5lLT5sZW4pOworCisJd2hpbGUgKChjID0gKmluKyspICE9IDApIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJyInOgorCQkJaW4gPSB1bnF1b3RlX3F1b3RlZF9zdHJpbmcoJm91dGJ1ZiwgaW4pOworCQkJY29udGludWU7CisJCWNhc2UgJygnOgorCQkJaW4gPSB1bnF1b3RlX2NvbW1lbnQoJm91dGJ1ZiwgaW4pOworCQkJY29udGludWU7CisJCX0KKworCQlzdHJidWZfYWRkY2goJm91dGJ1ZiwgYyk7CisJfQorCisJc3RyYnVmX3N3YXAoJm91dGJ1ZiwgbGluZSk7CisJc3RyYnVmX3JlbGVhc2UoJm91dGJ1Zik7CisKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2Zyb20oc3RydWN0IG1haWxpbmZvICptaSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZnJvbSkKK3sKKwljaGFyICphdDsKKwlzaXplX3QgZWw7CisJc3RydWN0IHN0cmJ1ZiBmOworCisJc3RyYnVmX2luaXQoJmYsIGZyb20tPmxlbik7CisJc3RyYnVmX2FkZGJ1ZigmZiwgZnJvbSk7CisKKwl1bnF1b3RlX3F1b3RlZF9wYWlyKCZmKTsKKworCWF0ID0gc3RyY2hyKGYuYnVmLCAnQCcpOworCWlmICghYXQpIHsKKwkJcGFyc2VfYm9ndXNfZnJvbShtaSwgZnJvbSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgd2UgYWxyZWFkeSBoYXZlIG9uZSBlbWFpbCwgZG9uJ3QgdGFrZSBhbnkgY29uZnVzaW5nIGxpbmVzCisJICovCisJaWYgKG1pLT5lbWFpbC5sZW4gJiYgc3RyY2hyKGF0ICsgMSwgJ0AnKSkKKwkJZ290byBvdXQ7CisKKwkvKiBQaWNrIHVwIHRoZSBzdHJpbmcgYXJvdW5kICdAJywgcG9zc2libHkgZGVsaW1pdGVkIHdpdGggPD4KKwkgKiBwYWlyOyB0aGF0IGlzIHRoZSBlbWFpbCBwYXJ0LgorCSAqLworCXdoaWxlIChhdCA+IGYuYnVmKSB7CisJCWNoYXIgYyA9IGF0Wy0xXTsKKwkJaWYgKGlzc3BhY2UoYykpCisJCQlicmVhazsKKwkJaWYgKGMgPT0gJzwnKSB7CisJCQlhdFstMV0gPSAnICc7CisJCQlicmVhazsKKwkJfQorCQlhdC0tOworCX0KKwllbCA9IHN0cmNzcG4oYXQsICIgXG5cdFxyXHZcZj4iKTsKKwlzdHJidWZfcmVzZXQoJm1pLT5lbWFpbCk7CisJc3RyYnVmX2FkZCgmbWktPmVtYWlsLCBhdCwgZWwpOworCXN0cmJ1Zl9yZW1vdmUoJmYsIGF0IC0gZi5idWYsIGVsICsgKGF0W2VsXSA/IDEgOiAwKSk7CisKKwkvKiBUaGUgcmVtYWluZGVyIGlzIG5hbWUuICBJdCBjb3VsZCBiZQorCSAqCisJICogLSAiSm9obiBEb2UgPGpvaG4uZG9lQHh6PiIJCQkoYSksIG9yCisJICogLSAiam9obi5kb2VAeHogKEpvaG4gRG9lKSIJCQkoYiksIG9yCisJICogLSAiSm9obiAoenp6KSBEb2UgPGpvaG4uZG9lQHh6PiAoQ29tbWVudCkiCShjKQorCSAqCisJICogYnV0IHdlIGhhdmUgcmVtb3ZlZCB0aGUgZW1haWwgcGFydCwgc28KKwkgKgorCSAqIC0gcmVtb3ZlIGV4dHJhIHNwYWNlcyB3aGljaCBjb3VsZCBzdGF5IGFmdGVyIGVtYWlsIChjYXNlICdjJyksIGFuZAorCSAqIC0gdHJpbSBmcm9tIGJvdGggZW5kcywgcG9zc2libHkgcmVtb3ZpbmcgdGhlICgpIHBhaXIgYXQgdGhlIGVuZAorCSAqICAgKGNhc2VzICdhJyBhbmQgJ2InKS4KKwkgKi8KKwljbGVhbnVwX3NwYWNlKCZmKTsKKwlzdHJidWZfdHJpbSgmZik7CisJaWYgKGYuYnVmWzBdID09ICcoJyAmJiBmLmxlbiAmJiBmLmJ1ZltmLmxlbiAtIDFdID09ICcpJykgeworCQlzdHJidWZfcmVtb3ZlKCZmLCAwLCAxKTsKKwkJc3RyYnVmX3NldGxlbigmZiwgZi5sZW4gLSAxKTsKKwl9CisKKwlnZXRfc2FuZV9uYW1lKCZtaS0+bmFtZSwgJmYsICZtaS0+ZW1haWwpOworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZmKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2hlYWRlcihzdHJ1Y3Qgc3RyYnVmICoqb3V0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWlmICghKm91dCkgeworCQkqb3V0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCQlzdHJidWZfaW5pdCgqb3V0LCBsaW5lLT5sZW4pOworCX0gZWxzZQorCQlzdHJidWZfcmVzZXQoKm91dCk7CisKKwlzdHJidWZfYWRkYnVmKCpvdXQsIGxpbmUpOworfQorCisvKiBOT1RFIE5PVEUgTk9URS4gIFdlIGRvIG5vdCBjbGFpbSB3ZSBkbyBmdWxsIE1JTUUuICBXZSBqdXN0IGF0dGVtcHQKKyAqIHRvIGhhdmUgZW5vdWdoIGhldXJpc3RpY3MgdG8gZ3JvayBNSU1FIGVuY29kZWQgcGF0Y2hlcyBvZnRlbiBmb3VuZAorICogb24gb3VyIG1haWxpbmcgbGlzdHMuICBGb3IgZXhhbXBsZSwgd2UgZG8gbm90IGV2ZW4gdHJlYXQgaGVhZGVyIGxpbmVzCisgKiBjYXNlIGluc2Vuc2l0aXZlbHkuCisgKi8KKworc3RhdGljIGludCBzbHVycF9hdHRyKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKmF0dHIpCit7CisJY29uc3QgY2hhciAqZW5kcywgKmFwID0gc3RyY2FzZXN0cihsaW5lLCBuYW1lKTsKKwlzaXplX3Qgc3o7CisKKwlzdHJidWZfc2V0bGVuKGF0dHIsIDApOworCWlmICghYXApCisJCXJldHVybiAwOworCWFwICs9IHN0cmxlbihuYW1lKTsKKwlpZiAoKmFwID09ICciJykgeworCQlhcCsrOworCQllbmRzID0gIlwiIjsKKwl9CisJZWxzZQorCQllbmRzID0gIjsgXHQiOworCXN6ID0gc3RyY3NwbihhcCwgZW5kcyk7CisJc3RyYnVmX2FkZChhdHRyLCBhcCwgc3opOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY29udGVudF90eXBlKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiAqYm91bmRhcnkgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQoYm91bmRhcnksIGxpbmUtPmxlbik7CisKKwlpZiAoc2x1cnBfYXR0cihsaW5lLT5idWYsICJib3VuZGFyeT0iLCBib3VuZGFyeSkpIHsKKwkJc3RyYnVmX2luc2VydChib3VuZGFyeSwgMCwgIi0tIiwgMik7CisJCWlmICgrK21pLT5jb250ZW50X3RvcCA+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+aW5wdXQpKQorCQlyZXR1cm4gMDsKKwlzdHJidWZfYWRkY2gobGluZSwgJ1xuJyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBwcmV2ID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBTa2lwIHVwIHRvIHRoZSBmaXJzdCBib3VuZGFyeSAqLworCWlmICgqKG1pLT5jb250ZW50X3RvcCkpIHsKKwkJaWYgKCFmaW5kX2JvdW5kYXJ5KG1pLCBsaW5lKSkKKwkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworCX0KKworCWRvIHsKKwkJLyogcHJvY2VzcyBhbnkgYm91bmRhcnkgbGluZXMgKi8KKwkJaWYgKCoobWktPmNvbnRlbnRfdG9wKSAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkobWksIGxpbmUpKSB7CisJCQkvKiBmbHVzaCBhbnkgbGVmdG92ZXIgKi8KKwkJCWlmIChwcmV2LmxlbikgeworCQkJCWhhbmRsZV9maWx0ZXIobWksICZwcmV2KTsKKwkJCQlzdHJidWZfcmVzZXQoJnByZXYpOworCQkJfQorCQkJaWYgKCFoYW5kbGVfYm91bmRhcnkobWksIGxpbmUpKQorCQkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworCQl9CisKKwkJLyogVW53cmFwIHRyYW5zZmVyIGVuY29kaW5nICovCisJCWRlY29kZV90cmFuc2Zlcl9lbmNvZGluZyhtaSwgbGluZSk7CisKKwkJc3dpdGNoIChtaS0+dHJhbnNmZXJfZW5jb2RpbmcpIHsKKwkJY2FzZSBURV9CQVNFNjQ6CisJCWNhc2UgVEVfUVA6CisJCXsKKwkJCXN0cnVjdCBzdHJidWYgKipsaW5lcywgKippdCwgKnNiOworCisJCQkvKiBQcmVwZW5kIGFueSBwcmV2aW91cyBwYXJ0aWFsIGxpbmVzICovCisJCQlzdHJidWZfaW5zZXJ0KGxpbmUsIDAsIHByZXYuYnVmLCBwcmV2Lmxlbik7CisJCQlzdHJidWZfcmVzZXQoJnByZXYpOworCisJCQkvKgorCQkJICogVGhpcyBpcyBhIGRlY29kZWQgbGluZSB0aGF0IG1heSBjb250YWluCisJCQkgKiBtdWx0aXBsZSBuZXcgbGluZXMuICBQYXNzIG9ubHkgb25lIGNodW5rCisJCQkgKiBhdCBhIHRpbWUgdG8gaGFuZGxlX2ZpbHRlcigpCisJCQkgKi8KKwkJCWxpbmVzID0gc3RyYnVmX3NwbGl0KGxpbmUsICdcbicpOworCQkJZm9yIChpdCA9IGxpbmVzOyAoc2IgPSAqaXQpOyBpdCsrKSB7CisJCQkJaWYgKCooaXQgKyAxKSA9PSBOVUxMKSAvKiBUaGUgbGFzdCBsaW5lICovCisJCQkJCWlmIChzYi0+YnVmW3NiLT5sZW4gLSAxXSAhPSAnXG4nKSB7CisJCQkJCQkvKiBQYXJ0aWFsIGxpbmUsIHNhdmUgaXQgZm9yIGxhdGVyLiAqLworCQkJCQkJc3RyYnVmX2FkZGJ1ZigmcHJldiwgc2IpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQloYW5kbGVfZmlsdGVyKG1pLCBzYik7CisJCQl9CisJCQkvKgorCQkJICogVGhlIHBhcnRpYWwgY2h1bmsgaXMgc2F2ZWQgaW4gInByZXYiIGFuZCB3aWxsIGJlCisJCQkgKiBhcHBlbmRlZCBieSB0aGUgbmV4dCBpdGVyYXRpb24gb2YgcmVhZF9saW5lX3dpdGhfbnVsKCkuCisJCQkgKi8KKwkJCXN0cmJ1Zl9saXN0X2ZyZWUobGluZXMpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWhhbmRsZV9maWx0ZXIobWksIGxpbmUpOworCQl9CisKKwkJaWYgKG1pLT5pbnB1dF9lcnJvcikKKwkJCWJyZWFrOworCX0gd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKGxpbmUsIG1pLT5pbnB1dCwgJ1xuJykpOworCisJZmx1c2hfaW5ib2R5X2hlYWRlcl9hY2N1bShtaSk7CisKK2hhbmRsZV9ib2R5X291dDoKKwlzdHJidWZfcmVsZWFzZSgmcHJldik7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9oZWFkZXJfbGluZXMoRklMRSAqZm91dCwgY29uc3QgY2hhciAqaGRyLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpkYXRhKQoreworCWNvbnN0IGNoYXIgKnNwID0gZGF0YS0+YnVmOworCXdoaWxlICgxKSB7CisJCWNoYXIgKmVwID0gc3RyY2hyKHNwLCAnXG4nKTsKKwkJaW50IGxlbjsKKwkJaWYgKCFlcCkKKwkJCWxlbiA9IHN0cmxlbihzcCk7CisJCWVsc2UKKwkJCWxlbiA9IGVwIC0gc3A7CisJCWZwcmludGYoZm91dCwgIiVzOiAlLipzXG4iLCBoZHIsIGxlbiwgc3ApOworCQlpZiAoIWVwKQorCQkJYnJlYWs7CisJCXNwID0gZXAgKyAxOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2luZm8oc3RydWN0IG1haWxpbmZvICptaSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpoZHI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworCQkvKiBvbmx5IHByaW50IGluYm9keSBoZWFkZXJzIGlmIHdlIG91dHB1dCBhIHBhdGNoIGZpbGUgKi8KKwkJaWYgKG1pLT5wYXRjaF9saW5lcyAmJiBtaS0+c19oZHJfZGF0YVtpXSkKKwkJCWhkciA9IG1pLT5zX2hkcl9kYXRhW2ldOworCQllbHNlIGlmIChtaS0+cF9oZHJfZGF0YVtpXSkKKwkJCWhkciA9IG1pLT5wX2hkcl9kYXRhW2ldOworCQllbHNlCisJCQljb250aW51ZTsKKworCQlpZiAoIXN0cmNtcChoZWFkZXJbaV0sICJTdWJqZWN0IikpIHsKKwkJCWlmICghbWktPmtlZXBfc3ViamVjdCkgeworCQkJCWNsZWFudXBfc3ViamVjdChtaSwgaGRyKTsKKwkJCQljbGVhbnVwX3NwYWNlKGhkcik7CisJCQl9CisJCQlvdXRwdXRfaGVhZGVyX2xpbmVzKG1pLT5vdXRwdXQsICJTdWJqZWN0IiwgaGRyKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGhlYWRlcltpXSwgIkZyb20iKSkgeworCQkJY2xlYW51cF9zcGFjZShoZHIpOworCQkJaGFuZGxlX2Zyb20obWksIGhkcik7CisJCQlmcHJpbnRmKG1pLT5vdXRwdXQsICJBdXRob3I6ICVzXG4iLCBtaS0+bmFtZS5idWYpOworCQkJZnByaW50ZihtaS0+b3V0cHV0LCAiRW1haWw6ICVzXG4iLCBtaS0+ZW1haWwuYnVmKTsKKwkJfSBlbHNlIHsKKwkJCWNsZWFudXBfc3BhY2UoaGRyKTsKKwkJCWZwcmludGYobWktPm91dHB1dCwgIiVzOiAlc1xuIiwgaGVhZGVyW2ldLCBoZHItPmJ1Zik7CisJCX0KKwl9CisJZnByaW50ZihtaS0+b3V0cHV0LCAiXG4iKTsKK30KKworaW50IG1haWxpbmZvKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqcGF0Y2gpCit7CisJRklMRSAqY21pdG1zZzsKKwlpbnQgcGVlazsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCWNtaXRtc2cgPSBmb3Blbihtc2csICJ3Iik7CisJaWYgKCFjbWl0bXNnKSB7CisJCXBlcnJvcihtc2cpOworCQlyZXR1cm4gLTE7CisJfQorCW1pLT5wYXRjaGZpbGUgPSBmb3BlbihwYXRjaCwgInciKTsKKwlpZiAoIW1pLT5wYXRjaGZpbGUpIHsKKwkJcGVycm9yKHBhdGNoKTsKKwkJZmNsb3NlKGNtaXRtc2cpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWktPnBfaGRyX2RhdGEgPSB4Y2FsbG9jKE1BWF9IRFJfUEFSU0VELCBzaXplb2YoKihtaS0+cF9oZHJfZGF0YSkpKTsKKwltaS0+c19oZHJfZGF0YSA9IHhjYWxsb2MoTUFYX0hEUl9QQVJTRUQsIHNpemVvZigqKG1pLT5zX2hkcl9kYXRhKSkpOworCisJZG8geworCQlwZWVrID0gZmdldGMobWktPmlucHV0KTsKKwkJaWYgKHBlZWsgPT0gRU9GKSB7CisJCQlmY2xvc2UoY21pdG1zZyk7CisJCQlyZXR1cm4gZXJyb3IoImVtcHR5IHBhdGNoOiAnJXMnIiwgcGF0Y2gpOworCQl9CisJfSB3aGlsZSAoaXNzcGFjZShwZWVrKSk7CisJdW5nZXRjKHBlZWssIG1pLT5pbnB1dCk7CisKKwkvKiBwcm9jZXNzIHRoZSBlbWFpbCBoZWFkZXIgKi8KKwl3aGlsZSAocmVhZF9vbmVfaGVhZGVyX2xpbmUoJmxpbmUsIG1pLT5pbnB1dCkpCisJCWNoZWNrX2hlYWRlcihtaSwgJmxpbmUsIG1pLT5wX2hkcl9kYXRhLCAxKTsKKworCWhhbmRsZV9ib2R5KG1pLCAmbGluZSk7CisJZndyaXRlKG1pLT5sb2dfbWVzc2FnZS5idWYsIDEsIG1pLT5sb2dfbWVzc2FnZS5sZW4sIGNtaXRtc2cpOworCWZjbG9zZShjbWl0bXNnKTsKKwlmY2xvc2UobWktPnBhdGNoZmlsZSk7CisKKwloYW5kbGVfaW5mbyhtaSk7CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCXJldHVybiBtaS0+aW5wdXRfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X21haWxpbmZvX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICptaV8pCit7CisJc3RydWN0IG1haWxpbmZvICptaSA9IG1pXzsKKworCWlmICghc3RhcnRzX3dpdGgodmFyLCAibWFpbGluZm8uIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgTlVMTCk7CisJaWYgKCFzdHJjbXAodmFyLCAibWFpbGluZm8uc2Npc3NvcnMiKSkgeworCQltaS0+dXNlX3NjaXNzb3JzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJLyogcGVyaGFwcyBvdGhlcnMgaGVyZSAqLworCXJldHVybiAwOworfQorCit2b2lkIHNldHVwX21haWxpbmZvKHN0cnVjdCBtYWlsaW5mbyAqbWkpCit7CisJbWVtc2V0KG1pLCAwLCBzaXplb2YoKm1pKSk7CisJc3RyYnVmX2luaXQoJm1pLT5uYW1lLCAwKTsKKwlzdHJidWZfaW5pdCgmbWktPmVtYWlsLCAwKTsKKwlzdHJidWZfaW5pdCgmbWktPmNoYXJzZXQsIDApOworCXN0cmJ1Zl9pbml0KCZtaS0+bG9nX21lc3NhZ2UsIDApOworCXN0cmJ1Zl9pbml0KCZtaS0+aW5ib2R5X2hlYWRlcl9hY2N1bSwgMCk7CisJbWktPmhlYWRlcl9zdGFnZSA9IDE7CisJbWktPnVzZV9pbmJvZHlfaGVhZGVycyA9IDE7CisJbWktPmNvbnRlbnRfdG9wID0gbWktPmNvbnRlbnQ7CisJZ2l0X2NvbmZpZyhnaXRfbWFpbGluZm9fY29uZmlnLCBtaSk7Cit9CisKK3ZvaWQgY2xlYXJfbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICptaSkKK3sKKwlpbnQgaTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+bmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJm1pLT5lbWFpbCk7CisJc3RyYnVmX3JlbGVhc2UoJm1pLT5jaGFyc2V0KTsKKwlzdHJidWZfcmVsZWFzZSgmbWktPmluYm9keV9oZWFkZXJfYWNjdW0pOworCWZyZWUobWktPm1lc3NhZ2VfaWQpOworCisJaWYgKG1pLT5wX2hkcl9kYXRhKQorCQlmb3IgKGkgPSAwOyBtaS0+cF9oZHJfZGF0YVtpXTsgaSsrKQorCQkJc3RyYnVmX3JlbGVhc2UobWktPnBfaGRyX2RhdGFbaV0pOworCWZyZWUobWktPnBfaGRyX2RhdGEpOworCWlmIChtaS0+c19oZHJfZGF0YSkKKwkJZm9yIChpID0gMDsgbWktPnNfaGRyX2RhdGFbaV07IGkrKykKKwkJCXN0cmJ1Zl9yZWxlYXNlKG1pLT5zX2hkcl9kYXRhW2ldKTsKKwlmcmVlKG1pLT5zX2hkcl9kYXRhKTsKKworCXdoaWxlIChtaS0+Y29udGVudCA8IG1pLT5jb250ZW50X3RvcCkgeworCQlmcmVlKCoobWktPmNvbnRlbnRfdG9wKSk7CisJCW1pLT5jb250ZW50X3RvcC0tOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+bG9nX21lc3NhZ2UpOworfQpkaWZmIC0tZ2l0IGEvdC90NDI1Ni8xL3BhdGNoIGIvdC90NDI1Ni8xL3BhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGQ4YjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjU2LzEvcGF0Y2gKQEAgLTAsMCArMSwxMjkgQEAKK0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSF0gbWFpbGluZm86IHN1cHBvcnQgZm9ybWF0PWZsb3dlZAorTWVzc2FnZS1JRDogPGFhYWFhYWFhLWFhYWEtYWFhYS1hYWFhLWFhYWFhYWFhYWFhYUBleGFtcGxlLmNvbT4KK0RhdGU6IFNhdCwgMjUgQXVnIDIwMTggMjI6MDQ6NTAgKzAyMDAKK1VzZXItQWdlbnQ6IE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdPVzY0OyBydjo2MC4wKSBHZWNrby8yMDEwMDEwMQorIFRodW5kZXJiaXJkLzYwLjAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg7IGZvcm1hdD1mbG93ZWQKK0NvbnRlbnQtTGFuZ3VhZ2U6IGVuLVVTCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKy0tLQorICBtYWlsaW5mby5jIHwgNjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgIDEgZmlsZSBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWFpbGluZm8uYyBiL21haWxpbmZvLmMKK2luZGV4IDMyODFhMzdkNTEuLmIzOTVhZGJkZjIgMTAwNjQ0CistLS0gYS9tYWlsaW5mby5jCisrKysgYi9tYWlsaW5mby5jCitAQCAtMjM3LDExICsyMzcsMjIgQEAgc3RhdGljIGludCBzbHVycF9hdHRyKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgCisqbmFtZSwgc3RydWN0IHN0cmJ1ZiAqYXR0cikKKyAgCXJldHVybiAxOworICB9CisKKytzdGF0aWMgaW50IGhhc19hdHRyX3ZhbHVlKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IAorY2hhciAqdmFsdWUpCisreworKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisrCWludCByYyA9IHNsdXJwX2F0dHIobGluZSwgbmFtZSwgJnNiKSAmJiAhc3RyY2FzZWNtcChzYi5idWYsIHZhbHVlKTsKKysJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKysJcmV0dXJuIHJjOworK30KKysKKyAgc3RhdGljIHZvaWQgaGFuZGxlX2NvbnRlbnRfdHlwZShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorICB7CisgIAlzdHJ1Y3Qgc3RyYnVmICpib3VuZGFyeSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKyAgCXN0cmJ1Zl9pbml0KGJvdW5kYXJ5LCBsaW5lLT5sZW4pOworCisrCW1pLT5mb3JtYXRfZmxvd2VkID0gaGFzX2F0dHJfdmFsdWUobGluZS0+YnVmLCAiZm9ybWF0PSIsICJmbG93ZWQiKTsKKysJbWktPmRlbHNwID0gaGFzX2F0dHJfdmFsdWUobGluZS0+YnVmLCAiZGVsc3A9IiwgInllcyIpOworKworICAJaWYgKHNsdXJwX2F0dHIobGluZS0+YnVmLCAiYm91bmRhcnk9IiwgYm91bmRhcnkpKSB7CisgIAkJc3RyYnVmX2luc2VydChib3VuZGFyeSwgMCwgIi0tIiwgMik7CisgIAkJaWYgKCsrbWktPmNvbnRlbnRfdG9wID49ICZtaS0+Y29udGVudFtNQVhfQk9VTkRBUklFU10pIHsKK0BAIC05NjQsNiArOTc1LDUyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX2JvdW5kYXJ5KHN0cnVjdCBtYWlsaW5mbyAqbWksIAorc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAgCXJldHVybiAxOworICB9CisKKytzdGF0aWMgdm9pZCBoYW5kbGVfZmlsdGVyX2Zsb3dlZChzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lLAorKwkJCQkgc3RydWN0IHN0cmJ1ZiAqcHJldikKKyt7CisrCXNpemVfdCBsZW4gPSBsaW5lLT5sZW47CisrCWNvbnN0IGNoYXIgKnJlc3Q7CisrCisrCWlmICghbWktPmZvcm1hdF9mbG93ZWQpIHsKKysJCWhhbmRsZV9maWx0ZXIobWksIGxpbmUpOworKwkJcmV0dXJuOworKwl9CisrCisrCWlmIChsaW5lLT5idWZbbGVuIC0gMV0gPT0gJ1xuJykgeworKwkJbGVuLS07CisrCQlpZiAobGVuICYmIGxpbmUtPmJ1ZltsZW4gLSAxXSA9PSAnXHInKQorKwkJCWxlbi0tOworKwl9CisrCisrCS8qIEtlZXAgc2lnbmF0dXJlIHNlcGFyYXRvciBhcy1pcy4gKi8KKysJaWYgKHNraXBfcHJlZml4KGxpbmUtPmJ1ZiwgIi0tICIsICZyZXN0KSAmJiByZXN0IC0gbGluZS0+YnVmID09IGxlbikgeworKwkJaWYgKHByZXYtPmxlbikgeworKwkJCWhhbmRsZV9maWx0ZXIobWksIHByZXYpOworKwkJCXN0cmJ1Zl9yZXNldChwcmV2KTsKKysJCX0KKysJCWhhbmRsZV9maWx0ZXIobWksIGxpbmUpOworKwkJcmV0dXJuOworKwl9CisrCisrCS8qIFVuc3R1ZmYgc3BhY2Utc3R1ZmZlZCBsaW5lLiAqLworKwlpZiAobGVuICYmIGxpbmUtPmJ1ZlswXSA9PSAnICcpIHsKKysJCXN0cmJ1Zl9yZW1vdmUobGluZSwgMCwgMSk7CisrCQlsZW4tLTsKKysJfQorKworKwkvKiBTYXZlIGZsb3dlZCBsaW5lIGZvciBsYXRlciwgYnV0IHdpdGhvdXQgdGhlIHNvZnQgbGluZSBicmVhay4gKi8KKysJaWYgKGxlbiAmJiBsaW5lLT5idWZbbGVuIC0gMV0gPT0gJyAnKSB7CisrCQlzdHJidWZfYWRkKHByZXYsIGxpbmUtPmJ1ZiwgbGVuIC0gISFtaS0+ZGVsc3ApOworKwkJcmV0dXJuOworKwl9CisrCisrCS8qIFByZXBlbmQgYW55IHByZXZpb3VzIHBhcnRpYWwgbGluZXMgKi8KKysJc3RyYnVmX2luc2VydChsaW5lLCAwLCBwcmV2LT5idWYsIHByZXYtPmxlbik7CisrCXN0cmJ1Zl9yZXNldChwcmV2KTsKKysKKysJaGFuZGxlX2ZpbHRlcihtaSwgbGluZSk7CisrfQorKworICBzdGF0aWMgdm9pZCBoYW5kbGVfYm9keShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorICB7CisgIAlzdHJ1Y3Qgc3RyYnVmIHByZXYgPSBTVFJCVUZfSU5JVDsKK0BAIC0xMDEyLDcgKzEwNjksNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfYm9keShzdHJ1Y3QgbWFpbGluZm8gKm1pLCAKK3N0cnVjdCBzdHJidWYgKmxpbmUpCisgIAkJCQkJCXN0cmJ1Zl9hZGRidWYoJnByZXYsIHNiKTsKKyAgCQkJCQkJYnJlYWs7CisgIAkJCQkJfQorLQkJCQloYW5kbGVfZmlsdGVyKG1pLCBzYik7CisrCQkJCWhhbmRsZV9maWx0ZXJfZmxvd2VkKG1pLCBzYiwgJnByZXYpOworICAJCQl9CisgIAkJCS8qCisgIAkJCSAqIFRoZSBwYXJ0aWFsIGNodW5rIGlzIHNhdmVkIGluICJwcmV2IiBhbmQgd2lsbCBiZQorQEAgLTEwMjIsMTMgKzEwNzksMTYgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2JvZHkoc3RydWN0IG1haWxpbmZvICptaSwgCitzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorICAJCQlicmVhazsKKyAgCQl9CisgIAkJZGVmYXVsdDoKKy0JCQloYW5kbGVfZmlsdGVyKG1pLCBsaW5lKTsKKysJCQloYW5kbGVfZmlsdGVyX2Zsb3dlZChtaSwgbGluZSwgJnByZXYpOworICAJCX0KKworICAJCWlmIChtaS0+aW5wdXRfZXJyb3IpCisgIAkJCWJyZWFrOworICAJfSB3aGlsZSAoIXN0cmJ1Zl9nZXR3aG9sZWxpbmUobGluZSwgbWktPmlucHV0LCAnXG4nKSk7CisKKysJaWYgKHByZXYubGVuKQorKwkJaGFuZGxlX2ZpbHRlcihtaSwgJnByZXYpOworKworICAJZmx1c2hfaW5ib2R5X2hlYWRlcl9hY2N1bShtaSk7CisKKyAgaGFuZGxlX2JvZHlfb3V0OgorLS0gCisyLjE4LjAKZGlmZiAtLWdpdCBhL3QvdDQyNTctYW0taW50ZXJhY3RpdmUuc2ggYi90L3Q0MjU3LWFtLWludGVyYWN0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzNDRiZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjU3LWFtLWludGVyYWN0aXZlLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhbSAtLWludGVyYWN0aXZlIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBwYXRjaGVzIHRvIGFwcGx5JyAnCisJdGVzdF9jb21taXQgdW5yZWxhdGVkICYmCisJdGVzdF9jb21taXQgbm8tY29uZmxpY3QgJiYKKwl0ZXN0X2NvbW1pdCBjb25mbGljdC1wYXRjaCBmaWxlIHBhdGNoICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMiA+bWJveCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCB1bnJlbGF0ZWQgJiYKKwl0ZXN0X2NvbW1pdCBjb25mbGljdC1tYXN0ZXIgZmlsZSBtYXN0ZXIgYmFzZQorJworCisjIFNhbml0eSBjaGVjayBvdXIgc2V0dXAuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseWluZyBhbGwgcGF0Y2hlcyBnZW5lcmF0ZXMgY29uZmxpY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gbWJveCAmJgorCWVjaG8gcmVzb2x2ZWQgPmZpbGUgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGFtIC0tcmVzb2x2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3RpdmUgYW0gY2FuIGFwcGx5IGEgc2luZ2xlIHBhdGNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJIyBhcHBseSB0aGUgZmlyc3QsIGJ1dCBub3QgdGhlIHNlY29uZAorCXRlc3Rfd3JpdGVfbGluZXMgeSBuIHwgZ2l0IGFtIC1pIG1ib3ggJiYKKworCWVjaG8gbm8tY29uZmxpY3QgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3RpdmUgYW0gY2FuIHJlc29sdmUgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwkjIGFwcGx5IGJvdGg7IHRoZSBzZWNvbmQgb25lIHdpbGwgY29uZmxpY3QKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgeSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtaSBtYm94ICYmCisJZWNobyByZXNvbHZlZCA+ZmlsZSAmJgorCWdpdCBhZGQgLXUgJiYKKwkjIGludGVyYWN0aXZlICItLXJlc29sdmVkIiB3aWxsIGFzayB1cyBpZiB3ZSB3YW50IHRvIGFwcGx5IHRoZSByZXN1bHQKKwllY2hvIHkgfCBnaXQgYW0gLWkgLS1yZXNvbHZlZCAmJgorCisJZWNobyBjb25mbGljdC1wYXRjaCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyByZXNvbHZlZCA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDMwMC1tZXJnZS10cmVlLnNoIGIvdC90NDMwMC1tZXJnZS10cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1OTYwMWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MzAwLW1lcmdlLXRyZWUuc2gKQEAgLTAsMCArMSwzMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgV2lsbCBQYWxtZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlLXRyZWUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgImluaXRpYWwiICJpbml0aWFsLWZpbGUiICJpbml0aWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGFkZCBBLCAhQicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJhZGQtYS1ub3QtYiIgIk9ORSIgIkFBQSIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGluaXRpYWwgYWRkLWEtbm90LWIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFWFBFQ1RFRCAmJgorYWRkZWQgaW4gcmVtb3RlCisgIHRoZWlyICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIEhFQUQ6T05FKSBPTkUKK0BAIC0wLDAgKzEgQEAKKytBQUEKK0VYUEVDVEVECisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBhZGQgIUEsIEInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLW5vdC1hLWIiICJPTkUiICJBQUEiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBhZGQtbm90LWEtYiBpbml0aWFsID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYWRkIEEsIEIgKHNhbWUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLWItc2FtZS1BIiAiT05FIiAiQUFBIiAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJhZGQtYS1iLXNhbWUtQiIgIk9ORSIgIkFBQSIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGFkZC1hLWItc2FtZS1BIGFkZC1hLWItc2FtZS1CID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYWRkIEEsIEIgKGRpZmZlcmVudCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWEtYi1kaWZmLUEiICJPTkUiICJBQUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLWItZGlmZi1CIiAiT05FIiAiQkJCIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLWEtYi1kaWZmLUEgYWRkLWEtYi1kaWZmLUIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFWFBFQ1RFRCAmJgorYWRkZWQgaW4gYm90aAorICBvdXIgICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBhZGQtYS1iLWRpZmYtQTpPTkUpIE9ORQorICB0aGVpciAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBhZGQtYS1iLWRpZmYtQjpPTkUpIE9ORQorQEAgLTEgKzEsNSBAQAorKzw8PDw8PDwgLm91cgorIEFBQQorKz09PT09PT0KKytCQkIKKys+Pj4+Pj4+IC50aGVpcgorRVhQRUNURUQKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGNoYW5nZSBBLCAhQicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1ub3QtYiIgImluaXRpYWwtZmlsZSIgIkJCQiIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGNoYW5nZS1hLW5vdC1iIGluaXRpYWwgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgIUEsIEInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLW5vdC1hLWIiICJpbml0aWFsLWZpbGUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBpbml0aWFsIGNoYW5nZS1ub3QtYS1iID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8RVhQRUNURUQgJiYKK21lcmdlZAorICByZXN1bHQgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBjaGFuZ2UtYS1ub3QtYjppbml0aWFsLWZpbGUpIGluaXRpYWwtZmlsZQorICBvdXIgICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBpbml0aWFsOmluaXRpYWwtZmlsZSAgICAgICApIGluaXRpYWwtZmlsZQorQEAgLTEgKzEgQEAKKy1pbml0aWFsCisrQkJCCitFWFBFQ1RFRAorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgY2hhbmdlIEEsIEIgKHNhbWUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLWItc2FtZS1BIiAiaW5pdGlhbC1maWxlIiAiQUFBIiAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLXNhbWUtQiIgImluaXRpYWwtZmlsZSIgIkFBQSIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGNoYW5nZS1hLWItc2FtZS1BIGNoYW5nZS1hLWItc2FtZS1CID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgY2hhbmdlIEEsIEIgKGRpZmZlcmVudCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtYi1kaWZmLUEiICJpbml0aWFsLWZpbGUiICJBQUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLWItZGlmZi1CIiAiaW5pdGlhbC1maWxlIiAiQkJCIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgY2hhbmdlLWEtYi1kaWZmLUEgY2hhbmdlLWEtYi1kaWZmLUIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFWFBFQ1RFRCAmJgorY2hhbmdlZCBpbiBib3RoCisgIGJhc2UgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGluaXRpYWw6aW5pdGlhbC1maWxlICAgICAgICAgICkgaW5pdGlhbC1maWxlCisgIG91ciAgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGNoYW5nZS1hLWItZGlmZi1BOmluaXRpYWwtZmlsZSkgaW5pdGlhbC1maWxlCisgIHRoZWlyICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGNoYW5nZS1hLWItZGlmZi1COmluaXRpYWwtZmlsZSkgaW5pdGlhbC1maWxlCitAQCAtMSArMSw1IEBACisrPDw8PDw8PCAub3VyCisgQUFBCisrPT09PT09PQorK0JCQgorKz4+Pj4+Pj4gLnRoZWlyCitFWFBFQ1RFRAorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgY2hhbmdlIEEsIEIgKG1peGVkKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1iYXNlIiAiT05FIiAiCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBIiAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1BIiAiT05FIiBcCisJCSIkKHNlZCAtZSAiMXtzL0FBQS9CQkIvO30iIC1lICIxMHtzL0FBQS9CQkIvO30iIDxPTkUpIiAmJgorCWdpdCByZXNldCAtLWhhcmQgY2hhbmdlLWEtYi1taXgtYmFzZSAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1CIiAiT05FIiBcCisJCSIkKHNlZCAtZSAiMXtzL0FBQS9CQkIvO30iIC1lICIxMHtzL0FBQS9DQ0MvO30iIDxPTkUpIiAmJgorCWdpdCBtZXJnZS10cmVlIGNoYW5nZS1hLWItbWl4LWJhc2UgY2hhbmdlLWEtYi1taXgtQSBjaGFuZ2UtYS1iLW1peC1CIFwKKwkJPmFjdHVhbCAmJgorCisJY2F0ID5leHBlY3RlZCA8PEVYUEVDVEVEICYmCitjaGFuZ2VkIGluIGJvdGgKKyAgYmFzZSAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgY2hhbmdlLWEtYi1taXgtYmFzZTpPTkUpIE9ORQorICBvdXIgICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBjaGFuZ2UtYS1iLW1peC1BOk9ORSAgICkgT05FCisgIHRoZWlyICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGNoYW5nZS1hLWItbWl4LUI6T05FICAgKSBPTkUKK0BAIC03LDcgKzcsMTEgQEAKKyBBQUEKKyBBQUEKKyBBQUEKKys8PDw8PDw8IC5vdXIKKyBCQkIKKys9PT09PT09CisrQ0NDCisrPj4+Pj4+PiAudGhlaXIKKyBBQUEKKyBBQUEKKyBBQUEKK0VYUEVDVEVECisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW1vdmUgQSwgIUInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAicm0tYS1ub3QtYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJybS1hLW5vdC1iIiAmJgorCWdpdCB0YWcgInJtLWEtbm90LWIiICYmCisJZ2l0IG1lcmdlLXRyZWUgcm0tYS1ub3QtYi1iYXNlIHJtLWEtbm90LWIgcm0tYS1ub3QtYi1iYXNlID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgcmVtb3ZlICFBLCBCJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgInJtLW5vdC1hLWItYmFzZSIgIk9ORSIgIkFBQSIgJiYKKwlnaXQgcm0gT05FICYmCisJZ2l0IGNvbW1pdCAtbSAicm0tbm90LWEtYiIgJiYKKwlnaXQgdGFnICJybS1ub3QtYS1iIiAmJgorCWdpdCBtZXJnZS10cmVlIHJtLWEtbm90LWItYmFzZSBybS1hLW5vdC1iLWJhc2Ugcm0tYS1ub3QtYiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PEVYUEVDVEVEICYmCityZW1vdmVkIGluIHJlbW90ZQorICBiYXNlICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBybS1hLW5vdC1iLWJhc2U6T05FKSBPTkUKKyAgb3VyICAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2Ugcm0tYS1ub3QtYi1iYXNlOk9ORSkgT05FCitAQCAtMSArMCwwIEBACistQUFBCitFWFBFQ1RFRAorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgcmVtb3ZlIEEsIEIgKHNhbWUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgInJtLWEtYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJybS1hLWIiICYmCisJZ2l0IHRhZyAicm0tYS1iIiAmJgorCWdpdCBtZXJnZS10cmVlIHJtLWEtYi1iYXNlIHJtLWEtYiBybS1hLWIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgQSwgcmVtb3ZlIEInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtcm0tYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1ybS1iLUEiICJPTkUiICJCQkIiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjaGFuZ2UtYS1ybS1iLWJhc2UgJiYKKwlnaXQgcm0gT05FICYmCisJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlLWEtcm0tYi1CIiAmJgorCWdpdCB0YWcgImNoYW5nZS1hLXJtLWItQiIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBjaGFuZ2UtYS1ybS1iLWJhc2UgY2hhbmdlLWEtcm0tYi1BIGNoYW5nZS1hLXJtLWItQiBcCisJCT5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8RVhQRUNURUQgJiYKK3JlbW92ZWQgaW4gcmVtb3RlCisgIGJhc2UgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGNoYW5nZS1hLXJtLWItYmFzZTpPTkUpIE9ORQorICBvdXIgICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBjaGFuZ2UtYS1ybS1iLUE6T05FICAgKSBPTkUKK0BAIC0xICswLDAgQEAKKy1CQkIKK0VYUEVDVEVECisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW1vdmUgQSwgY2hhbmdlIEInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAicm0tYS1jaGFuZ2UtYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCisJZ2l0IHJtIE9ORSAmJgorCWdpdCBjb21taXQgLW0gInJtLWEtY2hhbmdlLWItQSIgJiYKKwlnaXQgdGFnICJybS1hLWNoYW5nZS1iLUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBybS1hLWNoYW5nZS1iLWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCAicm0tYS1jaGFuZ2UtYi1CIiAiT05FIiAiQkJCIiAmJgorCWdpdCBtZXJnZS10cmVlIHJtLWEtY2hhbmdlLWItYmFzZSBybS1hLWNoYW5nZS1iLUEgcm0tYS1jaGFuZ2UtYi1CIFwKKwkJPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFWFBFQ1RFRCAmJgorcmVtb3ZlZCBpbiBsb2NhbAorICBiYXNlICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBybS1hLWNoYW5nZS1iLWJhc2U6T05FKSBPTkUKKyAgdGhlaXIgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2Ugcm0tYS1jaGFuZ2UtYi1COk9ORSAgICkgT05FCitFWFBFQ1RFRAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlIGFkZCBBLCBCIChzYW1lKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCW1rZGlyIHN1YiAmJgorCXRlc3RfY29tbWl0ICJhZGQgc3ViL2ZpbGUiICJzdWIvZmlsZSIgImZpbGUiIGFkZC10cmVlLUEgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGFkZC10cmVlLUEgYWRkLXRyZWUtQSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlIGFkZCBBLCBCIChkaWZmZXJlbnQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgImFkZCBzdWIvZmlsZSIgInN1Yi9maWxlIiAiQUFBIiBhZGQtdHJlZS1hLWItQSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCW1rZGlyIHN1YiAmJgorCXRlc3RfY29tbWl0ICJhZGQgc3ViL2ZpbGUiICJzdWIvZmlsZSIgIkJCQiIgYWRkLXRyZWUtYS1iLUIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGFkZC10cmVlLWEtYi1BIGFkZC10cmVlLWEtYi1CID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhZGRlZCBpbiBib3RoCisJICBvdXIgICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBhZGQtdHJlZS1hLWItQTpzdWIvZmlsZSkgc3ViL2ZpbGUKKwkgIHRoZWlyICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIGFkZC10cmVlLWEtYi1COnN1Yi9maWxlKSBzdWIvZmlsZQorCUBAIC0xICsxLDUgQEAKKwkrPDw8PDw8PCAub3VyCisJIEFBQQorCSs9PT09PT09CisJK0JCQgorCSs+Pj4+Pj4+IC50aGVpcgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZSB1bmNoYW5nZWQgQSwgcmVtb3ZlZCBCJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgImFkZCBzdWIvZmlsZSIgInN1Yi9maWxlIiAiQUFBIiB0cmVlLXJlbW92ZS1iLWluaXRpYWwgJiYKKwlnaXQgcm0gc3ViL2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgc3ViL2ZpbGUiICYmCisJZ2l0IHRhZyB0cmVlLXJlbW92ZS1iLUIgJiYKKwlnaXQgbWVyZ2UtdHJlZSB0cmVlLXJlbW92ZS1iLWluaXRpYWwgdHJlZS1yZW1vdmUtYi1pbml0aWFsIHRyZWUtcmVtb3ZlLWItQiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJcmVtb3ZlZCBpbiByZW1vdGUKKwkgIGJhc2UgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIHRyZWUtcmVtb3ZlLWItaW5pdGlhbDpzdWIvZmlsZSkgc3ViL2ZpbGUKKwkgIG91ciAgICAxMDA2NDQgJChnaXQgcmV2LXBhcnNlIHRyZWUtcmVtb3ZlLWItaW5pdGlhbDpzdWIvZmlsZSkgc3ViL2ZpbGUKKwlAQCAtMSArMCwwIEBACisJLUFBQQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHVybiBmaWxlIHRvIHRyZWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlybSBpbml0aWFsLWZpbGUgJiYKKwlta2RpciBpbml0aWFsLWZpbGUgJiYKKwl0ZXN0X2NvbW1pdCAidHVybi1maWxlLXRvLXRyZWUiICJpbml0aWFsLWZpbGUvT05FIiAiQ0NDIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgaW5pdGlhbCB0dXJuLWZpbGUtdG8tdHJlZSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYWRkZWQgaW4gcmVtb3RlCisJICB0aGVpciAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSB0dXJuLWZpbGUtdG8tdHJlZTppbml0aWFsLWZpbGUvT05FKSBpbml0aWFsLWZpbGUvT05FCisJQEAgLTAsMCArMSBAQAorCStDQ0MKKwlyZW1vdmVkIGluIHJlbW90ZQorCSAgYmFzZSAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgaW5pdGlhbDppbml0aWFsLWZpbGUpIGluaXRpYWwtZmlsZQorCSAgb3VyICAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgaW5pdGlhbDppbml0aWFsLWZpbGUpIGluaXRpYWwtZmlsZQorCUBAIC0xICswLDAgQEAKKwktaW5pdGlhbAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHVybiB0cmVlIHRvIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlta2RpciBkaXIgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLXRyZWUiICJkaXIvcGF0aCIgIkFBQSIgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWFub3RoZXItdHJlZSIgImRpci9hbm90aGVyIiAiQkJCIiAmJgorCXJtIC1mciBkaXIgJiYKKwl0ZXN0X2NvbW1pdCAibWFrZS1maWxlIiAiZGlyIiAiQ0NDIiAmJgorCWdpdCBtZXJnZS10cmVlIGFkZC10cmVlIGFkZC1hbm90aGVyLXRyZWUgbWFrZS1maWxlID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlyZW1vdmVkIGluIHJlbW90ZQorCSAgYmFzZSAgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgYWRkLXRyZWU6ZGlyL3BhdGgpIGRpci9wYXRoCisJICBvdXIgICAgMTAwNjQ0ICQoZ2l0IHJldi1wYXJzZSBhZGQtdHJlZTpkaXIvcGF0aCkgZGlyL3BhdGgKKwlAQCAtMSArMCwwIEBACisJLUFBQQorCWFkZGVkIGluIHJlbW90ZQorCSAgdGhlaXIgIDEwMDY0NCAkKGdpdCByZXYtcGFyc2UgbWFrZS1maWxlOmRpcikgZGlyCisJQEAgLTAsMCArMSBAQAorCStDQ0MKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTAwMC10YXItdHJlZS5zaCBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzc2NTVhMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKQEAgLTAsMCArMSw0MjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUgUmVuZSBTY2hhcmZlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcmNoaXZlIGFuZCBnaXQgZ2V0LXRhci1jb21taXQtaWQgdGVzdAorCitUaGlzIHRlc3QgY292ZXJzIHRoZSB0b3BpY3Mgb2YgZmlsZSBjb250ZW50cywgY29tbWl0IGRhdGUgaGFuZGxpbmcgYW5kCitjb21taXQgaWQgZW1iZWRkaW5nOgorCisgIFRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3NpdG9yeSBpcyBjb21wYXJlZCB0byB0aGUgZXh0cmFjdGVkIHRhcgorICBhcmNoaXZlLiAgVGhlIHJlcG9zaXRvcnkgY29udGFpbnMgc2ltcGxlIHRleHQgZmlsZXMsIHN5bWxpbmtzIGFuZCBhCisgIGJpbmFyeSBmaWxlICgvYmluL3NoKS4gIE9ubHkgcGF0aHMgc2hvcnRlciB0aGFuIDk5IGNoYXJhY3RlcnMgYXJlCisgIHVzZWQuCisKKyAgZ2l0IGFyY2hpdmUgYXBwbGllcyB0aGUgY29tbWl0IGRhdGUgdG8gZXZlcnkgZmlsZSBpbiB0aGUgYXJjaGl2ZSBpdAorICBjcmVhdGVzLiAgVGhlIHRlc3Qgc2V0cyB0aGUgY29tbWl0IGRhdGUgdG8gYSBzcGVjaWZpYyB2YWx1ZSBhbmQgY2hlY2tzCisgIGlmIHRoZSB0YXIgYXJjaGl2ZSBjb250YWlucyB0aGF0IHZhbHVlLgorCisgIFdoZW4gZ2l2aW5nIGdpdCBhcmNoaXZlIGEgY29tbWl0IGlkIChpbiBjb250cmFzdCB0byBhIHRyZWUgaWQpIGl0CisgIGVtYmVkcyB0aGlzIGNvbW1pdCBpZCBpbnRvIHRoZSB0YXIgYXJjaGl2ZSBhcyBhIGNvbW1lbnQuICBUaGUgdGVzdAorICBjaGVja3MgdGhlIGFiaWxpdHkgb2YgZ2l0IGdldC10YXItY29tbWl0LWlkIHRvIGZpZ3VyZSBpdCBvdXQgZnJvbSB0aGUKKyAgdGFyIGZpbGUuCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK1NVQlNURk9STUFUPSVIJW4KKwordGVzdF9sYXp5X3ByZXJlcSBUQVJfTkVFRFNfUEFYX0ZBTExCQUNLICcKKwkoCisJCW1rZGlyIHBheCAmJgorCQljZCBwYXggJiYKKwkJIiRUQVIiIHhmICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDAwL3BheC50YXIgJiYKKwkJdGVzdCAtZiBQYXhIZWFkZXJzLjE3OTEvZmlsZQorCSkKKycKKwordGVzdF9sYXp5X3ByZXJlcSBHWklQICdnemlwIC0tdmVyc2lvbicKKworZ2V0X3BheF9oZWFkZXIoKSB7CisJZmlsZT0kMQorCWhlYWRlcj0kMj0KKworCXdoaWxlIHJlYWQgbGVuIHJlc3QKKwlkbworCQlpZiB0ZXN0ICIkbGVuIiA9ICQoZWNobyAiJGxlbiAkcmVzdCIgfCB3YyAtYykKKwkJdGhlbgorCQkJY2FzZSAiJHJlc3QiIGluCisJCQkkaGVhZGVyKikKKwkJCQllY2hvICIke3Jlc3QjJGhlYWRlcn0iCisJCQkJOzsKKwkJCWVzYWMKKwkJZmkKKwlkb25lIDwiJGZpbGUiCit9CisKK2NoZWNrX3RhcigpIHsKKwl0YXJmaWxlPSQxLnRhcgorCWxpc3RmaWxlPSQxLmxzdAorCWRpcj0kMQorCWRpcl93aXRoX3ByZWZpeD0kZGlyLyQyCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICcgZXh0cmFjdCB0YXIgYXJjaGl2ZScgJworCQkobWtkaXIgJGRpciAmJiBjZCAkZGlyICYmICIkVEFSIiB4ZiAtKSA8JHRhcmZpbGUKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFRBUl9ORUVEU19QQVhfRkFMTEJBQ0sgJyBpbnRlcnByZXQgcGF4IGhlYWRlcnMnICcKKwkJKAorCQkJY2QgJGRpciAmJgorCQkJZm9yIGhlYWRlciBpbiAqLnBheGhlYWRlcgorCQkJZG8KKwkJCQlkYXRhPSR7aGVhZGVyJS5wYXhoZWFkZXJ9LmRhdGEgJiYKKwkJCQlpZiB0ZXN0IC1oICRkYXRhIHx8IHRlc3QgLWUgJGRhdGEKKwkJCQl0aGVuCisJCQkJCXBhdGg9JChnZXRfcGF4X2hlYWRlciAkaGVhZGVyIHBhdGgpICYmCisJCQkJCWlmIHRlc3QgLW4gIiRwYXRoIgorCQkJCQl0aGVuCisJCQkJCQltdiAiJGRhdGEiICIkcGF0aCIKKwkJCQkJZmkKKwkJCQlmaQorCQkJZG9uZQorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnIHZhbGlkYXRlIGZpbGVuYW1lcycgJworCQkoY2QgJHtkaXJfd2l0aF9wcmVmaXh9YSAmJiBmaW5kIC4pIHwgc29ydCA+JGxpc3RmaWxlICYmCisJCXRlc3RfY21wIGEubHN0ICRsaXN0ZmlsZQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyB2YWxpZGF0ZSBmaWxlIGNvbnRlbnRzJyAnCisJCWRpZmYgLXIgYSAke2Rpcl93aXRoX3ByZWZpeH1hCisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCW9iaiBzaGExOjE5ZjljODI3M2VjNDVhODkzOGU2OTk5Y2I1OWIzZmY2NjczOTkwMmEKKwlvYmogc2hhMjU2OjNjNjY2Zjc5ODc5ODYwMTU3MWY1Y2VjMGFkYjU3Y2U0YWJhODU0Njg3NWU3NjkzMTc3ZTA1MzVmMzRkMmM0OWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BvcHVsYXRlIHdvcmtkaXInIFwKKyAgICAnbWtkaXIgYSAmJgorICAgICBlY2hvIHNpbXBsZSB0ZXh0ZmlsZSA+YS9hICYmCisgICAgIHRlbj0wMTIzNDU2Nzg5ICYmIGh1bmRyZWQ9JHRlbiR0ZW4kdGVuJHRlbiR0ZW4kdGVuJHRlbiR0ZW4kdGVuJHRlbiAmJgorICAgICBlY2hvIGxvbmcgZmlsZW5hbWUgPmEvZm91ciRodW5kcmVkICYmCisgICAgIG1rZGlyIGEvYmluICYmCisgICAgIHRlc3QtdG9vbCBnZW5yYW5kb20gImZyb3R6IiA1MDAwMDAgPmEvYmluL3NoICYmCisgICAgIHByaW50ZiAiQVwkRm9ybWF0OiVzXCRPIiAiJFNVQlNURk9STUFUIiA+YS9zdWJzdGZpbGUxICYmCisgICAgIHByaW50ZiAiQSBub3Qgc3Vic3RpdHV0ZWQgTyIgPmEvc3Vic3RmaWxlMiAmJgorICAgICBpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTOyB0aGVuCisJbG4gLXMgYSBhL2wxCisgICAgIGVsc2UKKwlwcmludGYgJXMgYSA+IGEvbDEKKyAgICAgZmkgJiYKKyAgICAgKHA9bG9uZ19wYXRoX3RvX2FfZmlsZSAmJiBjZCBhICYmCisgICAgICBmb3IgZGVwdGggaW4gMSAyIDMgNCA1OyBkbyBta2RpciAkcCAmJiBjZCAkcDsgZG9uZSAmJgorICAgICAgZWNobyB0ZXh0ID5maWxlX3dpdGhfbG9uZ19wYXRoKSAmJgorICAgICAoY2QgYSAmJiBmaW5kIC4pIHwgc29ydCA+YS5sc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGQgaWdub3JlZCBmaWxlJyBcCisgICAgJ2VjaG8gaWdub3JlIG1lID5hL2lnbm9yZWQgJiYKKyAgICAgZWNobyBpZ25vcmVkIGV4cG9ydC1pZ25vcmUgPi5naXQvaW5mby9hdHRyaWJ1dGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlsZXMgdG8gcmVwb3NpdG9yeScgJworCWdpdCBhZGQgYSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNyAyMjowMCIgZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cG9ydC1zdWJzdCcgJworCWVjaG8gInN1YnN0ZmlsZT8iIGV4cG9ydC1zdWJzdCA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZ2l0IGxvZyAtLW1heC1jb3VudD0xICItLXByZXR0eT1mb3JtYXQ6QSR7U1VCU1RGT1JNQVR9TyIgSEVBRCBcCisJCT5hL3N1YnN0ZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBiYXJlIGNsb25lJyBcCisgICAgJ2dpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgorICAgICBjcCAuZ2l0L2luZm8vYXR0cmlidXRlcyBiYXJlLmdpdC9pbmZvL2F0dHJpYnV0ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZW1vdmUgaWdub3JlZCBmaWxlJyBcCisgICAgJ3JtIGEvaWdub3JlZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlJyBcCisgICAgJ2dpdCBhcmNoaXZlIEhFQUQgPmIudGFyJworCitjaGVja190YXIgYgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLXByZWZpeD1wcmVmaXgvJyAnCisJZ2l0IGFyY2hpdmUgLS1wcmVmaXg9cHJlZml4LyBIRUFEID53aXRoX3ByZWZpeC50YXIKKycKKworY2hlY2tfdGFyIHdpdGhfcHJlZml4IHByZWZpeC8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFyY2hpdmUgLS1wcmVmaXg9b2xkZS0nICcKKwlnaXQgYXJjaGl2ZSAtLXByZWZpeD1vbGRlLSBIRUFEID53aXRoX29sZGUtcHJlZml4LnRhcgorJworCitjaGVja190YXIgd2l0aF9vbGRlLXByZWZpeCBvbGRlLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSBvbiBsYXJnZSBmaWxlcycgJworICAgIHRlc3RfY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAxICYmCisgICAgZ2l0IGFyY2hpdmUgSEVBRCA+YjMudGFyICYmCisgICAgdGVzdF9jbXBfYmluIGIudGFyIGIzLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUgaW4gYSBiYXJlIHJlcG8nIFwKKyAgICAnKGNkIGJhcmUuZ2l0ICYmIGdpdCBhcmNoaXZlIEhFQUQpID5iMy50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSB2cy4gdGhlIHNhbWUgaW4gYSBiYXJlIHJlcG8nIFwKKyAgICAndGVzdF9jbXBfYmluIGIudGFyIGIzLnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCAtLW91dHB1dCcgXAorICAgICdnaXQgYXJjaGl2ZSAtLW91dHB1dD1iNC50YXIgSEVBRCAmJgorICAgIHRlc3RfY21wX2JpbiBiLnRhciBiNC50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlPS4gSEVBRCA+YjUudGFyICYmCisgICAgdGVzdF9jbXBfYmluIGIudGFyIGI1LnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUgd2l0aCBjb25maWd1cmVkIHJlbW90ZScgJworCWdpdCBjb25maWcgcmVtb3RlLmZvby51cmwgLiAmJgorCSgKKwkJY2QgYSAmJgorCQlnaXQgYXJjaGl2ZSAtLXJlbW90ZT1mb28gLS1vdXRwdXQ9Li4vYjUtbmljay50YXIgSEVBRAorCSkgJiYKKwl0ZXN0X2NtcF9iaW4gYi50YXIgYjUtbmljay50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUnIFwKKyAgICAnbWtkaXIgZXh0cmFjdCAmJgorICAgICAiJFRBUiIgeGYgYi50YXIgLUMgZXh0cmFjdCBhL2EgJiYKKyAgICAgdGVzdC10b29sIGNobXRpbWUgLS1nZXQgZXh0cmFjdC9hL2EgPmIubXRpbWUgJiYKKyAgICAgZWNobyAiMTExNzIzMTIwMCIgPmV4cGVjdGVkLm10aW1lICYmCisgICAgIHRlc3RfY21wIGV4cGVjdGVkLm10aW1lIGIubXRpbWUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgZ2V0LXRhci1jb21taXQtaWQnIFwKKyAgICAnZ2l0IGdldC10YXItY29tbWl0LWlkIDxiLnRhciA+Yi5jb21taXRpZCAmJgorICAgICB0ZXN0X2NtcCAuZ2l0LyQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSBiLmNvbW1pdGlkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIC0tb3V0cHV0LCBvdmVycmlkZSBpbmZlcnJlZCBmb3JtYXQnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1vdXRwdXQ9ZDQuemlwIEhFQUQgJiYKKwl0ZXN0X2NtcF9iaW4gYi50YXIgZDQuemlwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnZ2l0IGFyY2hpdmUgd2l0aCAtLW91dHB1dCBhbmQgLS1yZW1vdGUgY3JlYXRlcyAudGd6JyAnCisJZ2l0IGFyY2hpdmUgLS1vdXRwdXQ9ZDUudGd6IC0tcmVtb3RlPS4gSEVBRCAmJgorCWd6aXAgLWQgLWMgPGQ1LnRneiA+ZDUudGFyICYmCisJdGVzdF9jbXBfYmluIGIudGFyIGQ1LnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLWxpc3Qgb3V0c2lkZSBvZiBhIGdpdCByZXBvJyAnCisJbm9uZ2l0IGdpdCBhcmNoaXZlIC0tbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLXJlbW90ZSBvdXRzaWRlIG9mIGEgZ2l0IHJlcG8nICcKKwlnaXQgYXJjaGl2ZSBIRUFEID5leHBlY3QudGFyICYmCisJbm9uZ2l0IGdpdCBhcmNoaXZlIC0tcmVtb3RlPSIkUFdEIiBIRUFEID5hY3R1YWwudGFyICYmCisJdGVzdF9jbXBfYmluIGV4cGVjdC50YXIgYWN0dWFsLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGllbnRzIGNhbm5vdCBhY2Nlc3MgdW5yZWFjaGFibGUgY29tbWl0cycgJworCXRlc3RfY29tbWl0IHVucmVhY2hhYmxlICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFyY2hpdmUgJHNoYTEgPnJlbW90ZS50YXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uICRzaGExID5yZW1vdGUudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1hcmNoaXZlIGNhbiBhbGxvdyB1bnJlYWNoYWJsZSBjb21taXRzJyAnCisJdGVzdF9jb21taXQgdW5yZWFjaGFibGUxICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFyY2hpdmUgJHNoYTEgPnJlbW90ZS50YXIgJiYKKwl0ZXN0X2NvbmZpZyB1cGxvYWRhcmNoaXZlLmFsbG93VW5yZWFjaGFibGUgdHJ1ZSAmJgorCWdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gJHNoYTEgPnJlbW90ZS50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGFyIGZpbHRlcnMnICcKKwlnaXQgY29uZmlnIHRhci50YXIuZm9vLmNvbW1hbmQgInRyIGFiIGJhIiAmJgorCWdpdCBjb25maWcgdGFyLmJhci5jb21tYW5kICJ0ciBhYiBiYSIgJiYKKwlnaXQgY29uZmlnIHRhci5iYXIucmVtb3RlIHRydWUgJiYKKwlnaXQgY29uZmlnIHRhci5pbnZhbGlkIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmNoaXZlIC0tbGlzdCBtZW50aW9ucyB1c2VyIGZpbHRlcicgJworCWdpdCBhcmNoaXZlIC0tbGlzdCA+b3V0cHV0ICYmCisJZ3JlcCAiXnRhclwuZm9vXCQiIG91dHB1dCAmJgorCWdyZXAgIl5iYXJcJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FyY2hpdmUgLS1saXN0IHNob3dzIG9ubHkgZW5hYmxlZCByZW1vdGUgZmlsdGVycycgJworCWdpdCBhcmNoaXZlIC0tbGlzdCAtLXJlbW90ZT0uID5vdXRwdXQgJiYKKwkhIGdyZXAgIl50YXJcLmZvb1wkIiBvdXRwdXQgJiYKKwlncmVwICJeYmFyXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZva2UgdGFyIGZpbHRlciBieSBmb3JtYXQnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIuZm9vIEhFQUQgPmNvbmZpZy50YXIuZm9vICYmCisJdHIgYWIgYmEgPGNvbmZpZy50YXIuZm9vID5jb25maWcudGFyICYmCisJdGVzdF9jbXBfYmluIGIudGFyIGNvbmZpZy50YXIgJiYKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD1iYXIgSEVBRCA+Y29uZmlnLmJhciAmJgorCXRyIGFiIGJhIDxjb25maWcuYmFyID5jb25maWcudGFyICYmCisJdGVzdF9jbXBfYmluIGIudGFyIGNvbmZpZy50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52b2tlIHRhciBmaWx0ZXIgYnkgZXh0ZW5zaW9uJyAnCisJZ2l0IGFyY2hpdmUgLW8gY29uZmlnLWltcGxpY2l0LnRhci5mb28gSEVBRCAmJgorCXRlc3RfY21wX2JpbiBjb25maWcudGFyLmZvbyBjb25maWctaW1wbGljaXQudGFyLmZvbyAmJgorCWdpdCBhcmNoaXZlIC1vIGNvbmZpZy1pbXBsaWNpdC5iYXIgSEVBRCAmJgorCXRlc3RfY21wX2JpbiBjb25maWcudGFyLmZvbyBjb25maWctaW1wbGljaXQuYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgb3V0cHV0IGZvcm1hdCByZW1haW5zIHRhcicgJworCWdpdCBhcmNoaXZlIC1vIGNvbmZpZy1pbXBsaWNpdC5iYXogSEVBRCAmJgorCXRlc3RfY21wX2JpbiBiLnRhciBjb25maWctaW1wbGljaXQuYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dGVuc2lvbiBtYXRjaGluZyByZXF1aXJlcyBkb3QnICcKKwlnaXQgYXJjaGl2ZSAtbyBjb25maWctaW1wbGljaXR0YXIuZm9vIEhFQUQgJiYKKwl0ZXN0X2NtcF9iaW4gYi50YXIgY29uZmlnLWltcGxpY2l0dGFyLmZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IGVuYWJsZWQgZmlsdGVycyBhcmUgYXZhaWxhYmxlIHJlbW90ZWx5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9LiAtLWZvcm1hdD10YXIuZm9vIEhFQUQgXAorCQk+cmVtb3RlLnRhci5mb28gJiYKKwlnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tZm9ybWF0PWJhciA+cmVtb3RlLmJhciBIRUFEICYmCisJdGVzdF9jbXBfYmluIHJlbW90ZS5iYXIgY29uZmlnLmJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXRneicgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRneiBIRUFEID5qLnRnegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXRhci5neicgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhci5neiBIRUFEID5qMS50YXIuZ3ogJiYKKwl0ZXN0X2NtcF9iaW4gai50Z3ogajEudGFyLmd6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnaW5mZXIgdGd6IGZyb20gLnRneiBmaWxlbmFtZScgJworCWdpdCBhcmNoaXZlIC0tb3V0cHV0PWoyLnRneiBIRUFEICYmCisJdGVzdF9jbXBfYmluIGoudGd6IGoyLnRnegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2luZmVyIHRneiBmcm9tIC50YXIuZ3ogZmlsZW5hbWUnICcKKwlnaXQgYXJjaGl2ZSAtLW91dHB1dD1qMy50YXIuZ3ogSEVBRCAmJgorCXRlc3RfY21wX2JpbiBqLnRneiBqMy50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdleHRyYWN0IHRneiBmaWxlJyAnCisJZ3ppcCAtZCAtYyA8ai50Z3ogPmoudGFyICYmCisJdGVzdF9jbXBfYmluIGIudGFyIGoudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAncmVtb3RlIHRhci5neiBpcyBhbGxvd2VkIGJ5IGRlZmF1bHQnICcKKwlnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tZm9ybWF0PXRhci5neiBIRUFEID5yZW1vdGUudGFyLmd6ICYmCisJdGVzdF9jbXBfYmluIGoudGd6IHJlbW90ZS50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdyZW1vdGUgdGFyLmd6IGNhbiBiZSBkaXNhYmxlZCcgJworCWdpdCBjb25maWcgdGFyLnRhci5nei5yZW1vdGUgZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tZm9ybWF0PXRhci5neiBIRUFEIFwKKwkJPnJlbW90ZS50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJjaGl2ZSBhbmQgOihnbG9iKScgJworCWdpdCBhcmNoaXZlIC12IEhFQUQgLS0gIjooZ2xvYikqKi9zaCIgPi9kZXYvbnVsbCAyPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCithLworYS9iaW4vCithL2Jpbi9zaAorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXRjaCBub24tbWF0Y2hpbmcgcGF0aHNwZWMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtdiBIRUFEIC0tICIqLmFiYyIgPi9kZXYvbnVsbAorJworCisjIFB1bGwgdGhlIHNpemUgYW5kIGRhdGUgb2YgZWFjaCBlbnRyeSBpbiBhIHRhcmZpbGUgdXNpbmcgdGhlIHN5c3RlbSB0YXIuCisjCisjIFdlJ2xsIHB1bGwgb3V0IG9ubHkgdGhlIHllYXIgZnJvbSB0aGUgZGF0ZTsgdGhhdCBhdm9pZHMgYW55IHF1ZXN0aW9uIG9mCisjIHRpbWV6b25lcyBpbXBhY3RpbmcgdGhlIHJlc3VsdCAoYXMgbG9uZyBhcyB3ZSBrZWVwIG91ciB0ZXN0IHRpbWVzIGF3YXkgZnJvbSBhCisjIHllYXIgYm91bmRhcnk7IG91ciByZWZlcmVuY2UgdGltZXMgYXJlIGFsbCBpbiBBdWd1c3QpLgorIworIyBUaGUgb3V0cHV0IG9mIHRhcl9pbmZvIGlzIGV4cGVjdGVkIHRvIGJlICI8c2l6ZT4gPHllYXI+IiwgYm90aCBpbiBkZWNpbWFsLiBJdAorIyBpZ25vcmVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGFyLiBXZSBoYXZlIHRvIGRvIHRoaXMsIGJlY2F1c2Ugc29tZSBvZiBvdXIgdGVzdAorIyBpbnB1dCBpcyBvbmx5IHBhcnRpYWwgKHRoZSByZWFsIGRhdGEgaXMgNjRHQiBpbiBzb21lIGNhc2VzKS4KK3Rhcl9pbmZvICgpIHsKKwkiJFRBUiIgdHZmICIkMSIgfAorCWF3ayAneworCQlzcGxpdCgkNCwgZGF0ZSwgIi0iKQorCQlwcmludCAkMyAiICIgZGF0ZVsxXQorCX0nCit9CisKKyMgU2VlIGlmIG91ciBzeXN0ZW0gdGFyIGNhbiBoYW5kbGUgYSB0YXIgZmlsZSB3aXRoIGh1Z2Ugc2l6ZXMgYW5kIGRhdGVzIGZhciBpbgorIyB0aGUgZnV0dXJlLCBhbmQgdGhhdCB3ZSBjYW4gYWN0dWFsbHkgcGFyc2UgaXRzIG91dHB1dC4KKyMKKyMgVGhlIHJlZmVyZW5jZSBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgR05VIHRhciwgYW5kIHRoZSBtYWdpYyB0aW1lIGFuZCBzaXplIGFyZQorIyBib3RoIG9jdGFsIDAxMDAwMDAwMDAwMDAxLCB3aGljaCBvdmVyZmxvd3Mgbm9ybWFsIHVzdGFyIGZpZWxkcy4KK3Rlc3RfbGF6eV9wcmVyZXEgVEFSX0hVR0UgJworCWVjaG8gIjY4NzE5NDc2NzM3IDQxNDciID5leHBlY3QgJiYKKwl0YXJfaW5mbyAiJFRFU1RfRElSRUNUT1JZIi90NTAwMC9odWdlLWFuZC1mdXR1cmUudGFyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTE9OR19JU182NEJJVCAnc2V0IHVwIHJlcG9zaXRvcnkgd2l0aCBodWdlIGJsb2InICcKKwlvYmo9JCh0ZXN0X29pZCBvYmopICYmCisJcGF0aD0kKHRlc3Rfb2lkX3RvX3BhdGggJG9iaikgJiYKKwlta2RpciAtcCAuZ2l0L29iamVjdHMvJChkaXJuYW1lICRwYXRoKSAmJgorCWNwICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDAwL2h1Z2Utb2JqZWN0IC5naXQvb2JqZWN0cy8kcGF0aCAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCwkb2JqLGh1Z2UgJiYKKwlnaXQgY29tbWl0IC1tIGh1Z2UKKycKKworIyBXZSBleHBlY3QgZ2l0IHRvIGRpZSB3aXRoIFNJR1BJUEUgaGVyZSAob3RoZXJ3aXNlIHdlCisjIHdvdWxkIGdlbmVyYXRlIHRoZSB3aG9sZSA2NEdCKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTE9OR19JU182NEJJVCAnZ2VuZXJhdGUgdGFyIHdpdGggaHVnZSBzaXplJyAnCisJeworCQlnaXQgYXJjaGl2ZSBIRUFECisJCWVjaG8gJD8gPmV4aXQtY29kZQorCX0gfCB0ZXN0X2NvcHlfYnl0ZXMgNDA5NiA+aHVnZS50YXIgJiYKKwllY2hvIDE0MSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRBUl9IVUdFLExPTkdfSVNfNjRCSVQgJ3N5c3RlbSB0YXIgY2FuIHJlYWQgb3VyIGh1Z2Ugc2l6ZScgJworCWVjaG8gNjg3MTk0NzY3MzcgPmV4cGVjdCAmJgorCXRhcl9pbmZvIGh1Z2UudGFyIHwgY3V0IC1kIiAiIC1mMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRJTUVfSVNfNjRCSVQgJ3NldCB1cCByZXBvc2l0b3J5IHdpdGggZmFyLWZ1dHVyZSBjb21taXQnICcKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSJANjg3MTk0NzY3MzcgKzAwMDAiIFwKKwkJZ2l0IGNvbW1pdCAtbSAidGVtcG9yaSBwYXJlbmR1bSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUSU1FX0lTXzY0QklUICdnZW5lcmF0ZSB0YXIgd2l0aCBmdXR1cmUgbXRpbWUnICcKKwlnaXQgYXJjaGl2ZSBIRUFEID5mdXR1cmUudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVEFSX0hVR0UsVElNRV9JU182NEJJVCxUSU1FX1RfSVNfNjRCSVQgJ3N5c3RlbSB0YXIgY2FuIHJlYWQgb3VyIGZ1dHVyZSBtdGltZScgJworCWVjaG8gNDE0NyA+ZXhwZWN0ICYmCisJdGFyX2luZm8gZnV0dXJlLnRhciB8IGN1dCAtZCIgIiAtZjIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAwL2h1Z2UtYW5kLWZ1dHVyZS50YXIgYi90L3Q1MDAwL2h1Z2UtYW5kLWZ1dHVyZS50YXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxNTVlMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDAvaHVnZS1hbmQtZnV0dXJlLnRhcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MDAwL2h1Z2Utb2JqZWN0IGIvdC90NTAwMC9odWdlLW9iamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2JlOWVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMC9odWdlLW9iamVjdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MDAwL3BheC50YXIgYi90L3Q1MDAwL3BheC50YXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxMTczNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDAvcGF4LnRhcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MDAxLWFyY2hpdmUtYXR0ci5zaCBiL3QvdDUwMDEtYXJjaGl2ZS1hdHRyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5YWE5NzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAxLWFyY2hpdmUtYXR0ci5zaApAQCAtMCwwICsxLDEzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcmNoaXZlIGF0dHJpYnV0ZSB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK1NVQlNURk9STUFUPSclSCAoJWgpJW4nCisKK3Rlc3RfZXhwZWN0X2V4aXN0cygpIHsKKwl0ZXN0X2V4cGVjdF8kezI6LXN1Y2Nlc3N9ICIgJDEgZXhpc3RzIiAidGVzdCAtZSAkMSIKK30KKwordGVzdF9leHBlY3RfbWlzc2luZygpIHsKKwl0ZXN0X2V4cGVjdF8kezI6LXN1Y2Nlc3N9ICIgJDEgZG9lcyBub3QgZXhpc3QiICJ0ZXN0ICEgLWUgJDEiCit9CisKK2V4dHJhY3RfdGFyX3RvX2RpciAoKSB7CisJKG1rZGlyICIkMSIgJiYgY2QgIiQxIiAmJiAiJFRBUiIgeGYgLSkgPCIkMS50YXIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBpZ25vcmVkID5pZ25vcmVkICYmCisJZWNobyBpZ25vcmVkIGV4cG9ydC1pZ25vcmUgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBhZGQgaWdub3JlZCAmJgorCisJZWNobyBpZ25vcmVkIGJ5IHRyZWUgPmlnbm9yZWQtYnktdHJlZSAmJgorCWVjaG8gaWdub3JlZC1ieS10cmVlIGV4cG9ydC1pZ25vcmUgPi5naXRhdHRyaWJ1dGVzICYmCisJbWtkaXIgaWdub3JlZC1ieS10cmVlLmQgJiYKKwk+aWdub3JlZC1ieS10cmVlLmQvZmlsZSAmJgorCWVjaG8gaWdub3JlZC1ieS10cmVlLmQgZXhwb3J0LWlnbm9yZSA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBpZ25vcmVkLWJ5LXRyZWUgaWdub3JlZC1ieS10cmVlLmQgLmdpdGF0dHJpYnV0ZXMgJiYKKworCWVjaG8gaWdub3JlZCBieSB3b3JrdHJlZSA+aWdub3JlZC1ieS13b3JrdHJlZSAmJgorCWVjaG8gaWdub3JlZC1ieS13b3JrdHJlZSBleHBvcnQtaWdub3JlID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgaWdub3JlZC1ieS13b3JrdHJlZSAmJgorCisJbWtkaXIgZXhjbHVkZWQtYnktcGF0aHNwZWMuZCAmJgorCT5leGNsdWRlZC1ieS1wYXRoc3BlYy5kL2ZpbGUgJiYKKwlnaXQgYWRkIGV4Y2x1ZGVkLWJ5LXBhdGhzcGVjLmQgJiYKKworCXByaW50ZiAiQVwkRm9ybWF0OiVzXCRPIiAiJFNVQlNURk9STUFUIiA+bm9zdWJzdGZpbGUgJiYKKwlwcmludGYgIkFcJEZvcm1hdDolc1wkTyIgIiRTVUJTVEZPUk1BVCIgPnN1YnN0ZmlsZTEgJiYKKwlwcmludGYgIkEgbm90IHN1YnN0aXR1dGVkIE8iID5zdWJzdGZpbGUyICYmCisJZWNobyAic3Vic3RmaWxlPyIgZXhwb3J0LXN1YnN0ID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIG5vc3Vic3RmaWxlIHN1YnN0ZmlsZTEgc3Vic3RmaWxlMiAmJgorCisJZ2l0IGNvbW1pdCAtbS4gJiYKKworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlICYmCisJY3AgLmdpdC9pbmZvL2F0dHJpYnV0ZXMgYmFyZS9pbmZvL2F0dHJpYnV0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUnICcKKwlnaXQgYXJjaGl2ZSBIRUFEID5hcmNoaXZlLnRhciAmJgorCShta2RpciBhcmNoaXZlICYmIGNkIGFyY2hpdmUgJiYgIiRUQVIiIHhmIC0pIDxhcmNoaXZlLnRhcgorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZAordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQtYnktdHJlZQordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQtYnktdHJlZS5kCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZC1ieS10cmVlLmQvZmlsZQordGVzdF9leHBlY3RfZXhpc3RzCWFyY2hpdmUvaWdub3JlZC1ieS13b3JrdHJlZQordGVzdF9leHBlY3RfZXhpc3RzCWFyY2hpdmUvZXhjbHVkZWQtYnktcGF0aHNwZWMuZAordGVzdF9leHBlY3RfZXhpc3RzCWFyY2hpdmUvZXhjbHVkZWQtYnktcGF0aHNwZWMuZC9maWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggcGF0aHNwZWMnICcKKwlnaXQgYXJjaGl2ZSBIRUFEICI6IWV4Y2x1ZGVkLWJ5LXBhdGhzcGVjLmQiID5hcmNoaXZlLXBhdGhzcGVjLnRhciAmJgorCWV4dHJhY3RfdGFyX3RvX2RpciBhcmNoaXZlLXBhdGhzcGVjCisnCisKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy9pZ25vcmVkCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUtcGF0aHNwZWMvaWdub3JlZC1ieS10cmVlCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUtcGF0aHNwZWMvaWdub3JlZC1ieS10cmVlLmQKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy9pZ25vcmVkLWJ5LXRyZWUuZC9maWxlCit0ZXN0X2V4cGVjdF9leGlzdHMJYXJjaGl2ZS1wYXRoc3BlYy9pZ25vcmVkLWJ5LXdvcmt0cmVlCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUtcGF0aHNwZWMvZXhjbHVkZWQtYnktcGF0aHNwZWMuZAordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlLXBhdGhzcGVjL2V4Y2x1ZGVkLWJ5LXBhdGhzcGVjLmQvZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIHdpbGRjYXJkIHBhdGhzcGVjJyAnCisJZ2l0IGFyY2hpdmUgSEVBRCAiOiFleGNsdWRlZC1ieS1wKiIgPmFyY2hpdmUtcGF0aHNwZWMtd2lsZGNhcmQudGFyICYmCisJZXh0cmFjdF90YXJfdG9fZGlyIGFyY2hpdmUtcGF0aHNwZWMtd2lsZGNhcmQKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlLXBhdGhzcGVjLXdpbGRjYXJkL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy13aWxkY2FyZC9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy13aWxkY2FyZC9pZ25vcmVkLWJ5LXRyZWUuZAordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlLXBhdGhzcGVjLXdpbGRjYXJkL2lnbm9yZWQtYnktdHJlZS5kL2ZpbGUKK3Rlc3RfZXhwZWN0X2V4aXN0cwlhcmNoaXZlLXBhdGhzcGVjLXdpbGRjYXJkL2lnbm9yZWQtYnktd29ya3RyZWUKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS1wYXRoc3BlYy13aWxkY2FyZC9leGNsdWRlZC1ieS1wYXRoc3BlYy5kCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUtcGF0aHNwZWMtd2lsZGNhcmQvZXhjbHVkZWQtYnktcGF0aHNwZWMuZC9maWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggd29ya3RyZWUgYXR0cmlidXRlcycgJworCWdpdCBhcmNoaXZlIC0td29ya3RyZWUtYXR0cmlidXRlcyBIRUFEID53b3JrdHJlZS50YXIgJiYKKwkobWtkaXIgd29ya3RyZWUgJiYgY2Qgd29ya3RyZWUgJiYgIiRUQVIiIHhmIC0pIDx3b3JrdHJlZS50YXIKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwl3b3JrdHJlZS9pZ25vcmVkCit0ZXN0X2V4cGVjdF9leGlzdHMJd29ya3RyZWUvaWdub3JlZC1ieS10cmVlCit0ZXN0X2V4cGVjdF9taXNzaW5nCXdvcmt0cmVlL2lnbm9yZWQtYnktd29ya3RyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIG9wdGlvbicgJworCWdpdCBhcmNoaXZlIC0td29ya3RyZWUtYXR0cmlidXRlcyAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgSEVBRCA+d29ya3RyZWUudGFyICYmCisJKG1rZGlyIHdvcmt0cmVlMiAmJiBjZCB3b3JrdHJlZTIgJiYgIiRUQVIiIHhmIC0pIDx3b3JrdHJlZS50YXIKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwl3b3JrdHJlZTIvaWdub3JlZAordGVzdF9leHBlY3RfZXhpc3RzCXdvcmt0cmVlMi9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X21pc3NpbmcJd29ya3RyZWUyL2lnbm9yZWQtYnktd29ya3RyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgdnMuIGJhcmUnICcKKwkoY2QgYmFyZSAmJiBnaXQgYXJjaGl2ZSBIRUFEKSA+YmFyZS1hcmNoaXZlLnRhciAmJgorCXRlc3RfY21wX2JpbiBhcmNoaXZlLnRhciBiYXJlLWFyY2hpdmUudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggd29ya3RyZWUgYXR0cmlidXRlcywgYmFyZScgJworCShjZCBiYXJlICYmIGdpdCBhcmNoaXZlIC0td29ya3RyZWUtYXR0cmlidXRlcyBIRUFEKSA+YmFyZS13b3JrdHJlZS50YXIgJiYKKwkobWtkaXIgYmFyZS13b3JrdHJlZSAmJiBjZCBiYXJlLXdvcmt0cmVlICYmICIkVEFSIiB4ZiAtKSA8YmFyZS13b3JrdHJlZS50YXIKKycKKwordGVzdF9leHBlY3RfbWlzc2luZwliYXJlLXdvcmt0cmVlL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X2V4aXN0cwliYXJlLXdvcmt0cmVlL2lnbm9yZWQtYnktdHJlZQordGVzdF9leHBlY3RfZXhpc3RzCWJhcmUtd29ya3RyZWUvaWdub3JlZC1ieS13b3JrdHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBvcnQtc3Vic3QnICcKKwlnaXQgbG9nICItLXByZXR0eT1mb3JtYXQ6QSR7U1VCU1RGT1JNQVR9TyIgSEVBRCA+c3Vic3RmaWxlMS5leHBlY3RlZCAmJgorCXRlc3RfY21wIG5vc3Vic3RmaWxlIGFyY2hpdmUvbm9zdWJzdGZpbGUgJiYKKwl0ZXN0X2NtcCBzdWJzdGZpbGUxLmV4cGVjdGVkIGFyY2hpdmUvc3Vic3RmaWxlMSAmJgorCXRlc3RfY21wIHN1YnN0ZmlsZTIgYXJjaGl2ZS9zdWJzdGZpbGUyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTAwMi1hcmNoaXZlLWF0dHItcGF0dGVybi5zaCBiL3QvdDUwMDItYXJjaGl2ZS1hdHRyLXBhdHRlcm4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmRhNmQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDItYXJjaGl2ZS1hdHRyLXBhdHRlcm4uc2gKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcmNoaXZlIGF0dHJpYnV0ZSBwYXR0ZXJuIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3RfZXhpc3RzKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiAkMSBleGlzdHMiICJ0ZXN0IC1lICQxIgorfQorCit0ZXN0X2V4cGVjdF9taXNzaW5nKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiAkMSBkb2VzIG5vdCBleGlzdCIgInRlc3QgISAtZSAkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGlnbm9yZWQgPmlnbm9yZWQgJiYKKwllY2hvIGlnbm9yZWQgZXhwb3J0LWlnbm9yZSA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBpZ25vcmVkICYmCisKKwlta2RpciBub3QtaWdub3JlZC1kaXIgJiYKKwllY2hvIGlnbm9yZWQtaW4tdHJlZSA+bm90LWlnbm9yZWQtZGlyL2lnbm9yZWQgJiYKKwllY2hvIG5vdC1pZ25vcmVkLWluLXRyZWUgPm5vdC1pZ25vcmVkLWRpci9pZ25vcmVkLW9ubHktaWYtZGlyICYmCisJZ2l0IGFkZCBub3QtaWdub3JlZC1kaXIgJiYKKworCW1rZGlyIGlnbm9yZWQtb25seS1pZi1kaXIgJiYKKwllY2hvIGlnbm9yZWQgYnkgaWdub3JlZCBkaXIgPmlnbm9yZWQtb25seS1pZi1kaXIvaWdub3JlZC1ieS1pZ25vcmVkLWRpciAmJgorCWVjaG8gaWdub3JlZC1vbmx5LWlmLWRpci8gZXhwb3J0LWlnbm9yZSA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZ2l0IGFkZCBpZ25vcmVkLW9ubHktaWYtZGlyICYmCisKKwlta2RpciAtcCBpZ25vcmVkLXdpdGhvdXQtc2xhc2ggJiYKKwllY2hvICJpZ25vcmVkIHdpdGhvdXQgc2xhc2giID5pZ25vcmVkLXdpdGhvdXQtc2xhc2gvZm9vICYmCisJZ2l0IGFkZCBpZ25vcmVkLXdpdGhvdXQtc2xhc2gvZm9vICYmCisJZWNobyAiaWdub3JlZC13aXRob3V0LXNsYXNoIGV4cG9ydC1pZ25vcmUiID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKworCW1rZGlyIC1wIHdpbGRjYXJkLXdpdGhvdXQtc2xhc2ggJiYKKwllY2hvICJpZ25vcmVkIHdpdGhvdXQgc2xhc2giID53aWxkY2FyZC13aXRob3V0LXNsYXNoL2ZvbyAmJgorCWdpdCBhZGQgd2lsZGNhcmQtd2l0aG91dC1zbGFzaC9mb28gJiYKKwllY2hvICJ3aWxkKi13aXRob3V0LXNsYXNoIGV4cG9ydC1pZ25vcmUiID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKworCW1rZGlyIC1wIGRlZXAvYW5kL3NsYXNobGVzcyAmJgorCWVjaG8gImlnbm9yZWQgd2l0aG91dCBzbGFzaCIgPmRlZXAvYW5kL3NsYXNobGVzcy9mb28gJiYKKwlnaXQgYWRkIGRlZXAvYW5kL3NsYXNobGVzcy9mb28gJiYKKwllY2hvICJkZWVwL2FuZC9zbGFzaGxlc3MgZXhwb3J0LWlnbm9yZSIgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCisJbWtkaXIgLXAgZGVlcC93aXRoL3dpbGRjYXJkICYmCisJZWNobyAiaWdub3JlZCB3aXRob3V0IHNsYXNoIiA+ZGVlcC93aXRoL3dpbGRjYXJkL2ZvbyAmJgorCWdpdCBhZGQgZGVlcC93aXRoL3dpbGRjYXJkL2ZvbyAmJgorCWVjaG8gImRlZXAvKnQqL3dpbGRjYXJkIGV4cG9ydC1pZ25vcmUiID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKworCW1rZGlyIC1wIG9uZS1sZXZlbC1sb3dlci90d28tbGV2ZWxzLWxvd2VyL2lnbm9yZWQtb25seS1pZi1kaXIgJiYKKwllY2hvIGlnbm9yZWQgYnkgaWdub3JlZCBkaXIgPm9uZS1sZXZlbC1sb3dlci90d28tbGV2ZWxzLWxvd2VyL2lnbm9yZWQtb25seS1pZi1kaXIvaWdub3JlZC1ieS1pZ25vcmVkLWRpciAmJgorCWdpdCBhZGQgb25lLWxldmVsLWxvd2VyICYmCisKKwlnaXQgY29tbWl0IC1tLiAmJgorCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUgJiYKKwljcCAuZ2l0L2luZm8vYXR0cmlidXRlcyBiYXJlL2luZm8vYXR0cmlidXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZScgJworCWdpdCBhcmNoaXZlIEhFQUQgPmFyY2hpdmUudGFyICYmCisJKG1rZGlyIGFyY2hpdmUgJiYgY2QgYXJjaGl2ZSAmJiAiJFRBUiIgeGYgLSkgPGFyY2hpdmUudGFyCisnCisKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvbm90LWlnbm9yZWQtZGlyL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X2V4aXN0cwlhcmNoaXZlL25vdC1pZ25vcmVkLWRpci9pZ25vcmVkLW9ubHktaWYtZGlyCit0ZXN0X2V4cGVjdF9leGlzdHMJYXJjaGl2ZS9ub3QtaWdub3JlZC1kaXIvCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZC1vbmx5LWlmLWRpci8KK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkLW9ueS1pZi1kaXIvaWdub3JlZC1ieS1pZ25vcmVkLWRpcgordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQtd2l0aG91dC1zbGFzaC8gJiYKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkLXdpdGhvdXQtc2xhc2gvZm9vICYmCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvd2lsZGNhcmQtd2l0aG91dC1zbGFzaC8KK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS93aWxkY2FyZC13aXRob3V0LXNsYXNoL2ZvbyAmJgordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2RlZXAvYW5kL3NsYXNobGVzcy8gJiYKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9kZWVwL2FuZC9zbGFzaGxlc3MvZm9vICYmCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvZGVlcC93aXRoL3dpbGRjYXJkLyAmJgordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2RlZXAvd2l0aC93aWxkY2FyZC9mb28gJiYKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9vbmUtbGV2ZWwtbG93ZXIvCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvb25lLWxldmVsLWxvd2VyL3R3by1sZXZlbHMtbG93ZXIvaWdub3JlZC1vbmx5LWlmLWRpci8KK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9vbmUtbGV2ZWwtbG93ZXIvdHdvLWxldmVscy1sb3dlci9pZ25vcmVkLW9ueS1pZi1kaXIvaWdub3JlZC1ieS1pZ25vcmVkLWRpcgorCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTAwMy1hcmNoaXZlLXppcC5zaCBiL3QvdDUwMDMtYXJjaGl2ZS16aXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTA2ZWRkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDMtYXJjaGl2ZS16aXAuc2gKQEAgLTAsMCArMSwxOTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK1NVQlNURk9STUFUPSVIJW4KKwordGVzdF9sYXp5X3ByZXJlcSBVTlpJUF9TWU1MSU5LUyAnCisJKAorCQlta2RpciB1bnppcC1zeW1saW5rcyAmJgorCQljZCB1bnppcC1zeW1saW5rcyAmJgorCQkiJEdJVF9VTlpJUCIgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDMvaW5mb3ppcC1zeW1saW5rcy56aXAgJiYKKwkJdGVzdCAtaCBzeW1saW5rCisJKQorJworCitjaGVja196aXAoKSB7CisJemlwZmlsZT0kMS56aXAKKwlsaXN0ZmlsZT0kMS5sc3QKKwlkaXI9JDEKKwlkaXJfd2l0aF9wcmVmaXg9JGRpci8kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIGV4dHJhY3QgWklQIGFyY2hpdmUiICcKKwkJKG1rZGlyICRkaXIgJiYgY2QgJGRpciAmJiAiJEdJVF9VTlpJUCIgLi4vJHppcGZpbGUpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIHZhbGlkYXRlIGZpbGVuYW1lcyIgIgorCQkoY2QgJHtkaXJfd2l0aF9wcmVmaXh9YSAmJiBmaW5kIC4pIHwgc29ydCA+JGxpc3RmaWxlICYmCisJCXRlc3RfY21wIGEubHN0ICRsaXN0ZmlsZQorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiB2YWxpZGF0ZSBmaWxlIGNvbnRlbnRzIiAiCisJCWRpZmYgLXIgYSAke2Rpcl93aXRoX3ByZWZpeH1hCisJIgorCisJZGlyPWVvbF8kMQorCWRpcl93aXRoX3ByZWZpeD0kZGlyLyQyCisJZXh0cmFjdGVkPSR7ZGlyX3dpdGhfcHJlZml4fWEKKwlvcmlnaW5hbD1hCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOWklQICIgZXh0cmFjdCBaSVAgYXJjaGl2ZSB3aXRoIEVPTCBjb252ZXJzaW9uIiAnCisJCShta2RpciAkZGlyICYmIGNkICRkaXIgJiYgIiRHSVRfVU5aSVAiIC1hIC4uLyR6aXBmaWxlKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiB2YWxpZGF0ZSB0aGF0IHRleHQgZmlsZXMgYXJlIGNvbnZlcnRlZCIgIgorCQl0ZXN0X2NtcF9iaW4gJGV4dHJhY3RlZC90ZXh0LmNyICRleHRyYWN0ZWQvdGV4dC5jcmxmICYmCisJCXRlc3RfY21wX2JpbiAkZXh0cmFjdGVkL3RleHQuY3IgJGV4dHJhY3RlZC90ZXh0LmxmCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIHZhbGlkYXRlIHRoYXQgYmluYXJ5IGZpbGVzIGFyZSB1bmNoYW5nZWQiICIKKwkJdGVzdF9jbXBfYmluICRvcmlnaW5hbC9iaW5hcnkuY3IgICAkZXh0cmFjdGVkL2JpbmFyeS5jciAmJgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL2JpbmFyeS5jcmxmICRleHRyYWN0ZWQvYmluYXJ5LmNybGYgJiYKKwkJdGVzdF9jbXBfYmluICRvcmlnaW5hbC9iaW5hcnkubGYgICAkZXh0cmFjdGVkL2JpbmFyeS5sZgorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiB2YWxpZGF0ZSB0aGF0IGRpZmYgZmlsZXMgYXJlIGNvbnZlcnRlZCIgIgorCQl0ZXN0X2NtcF9iaW4gJGV4dHJhY3RlZC9kaWZmLmNyICRleHRyYWN0ZWQvZGlmZi5jcmxmICYmCisJCXRlc3RfY21wX2JpbiAkZXh0cmFjdGVkL2RpZmYuY3IgJGV4dHJhY3RlZC9kaWZmLmxmCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIHZhbGlkYXRlIHRoYXQgLWRpZmYgZmlsZXMgYXJlIHVuY2hhbmdlZCIgIgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL25vZGlmZi5jciAgICRleHRyYWN0ZWQvbm9kaWZmLmNyICYmCisJCXRlc3RfY21wX2JpbiAkb3JpZ2luYWwvbm9kaWZmLmNybGYgJGV4dHJhY3RlZC9ub2RpZmYuY3JsZiAmJgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL25vZGlmZi5sZiAgICRleHRyYWN0ZWQvbm9kaWZmLmxmCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIHZhbGlkYXRlIHRoYXQgY3VzdG9tIGRpZmYgaXMgdW5jaGFuZ2VkICIgIgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL2N1c3RvbS5jciAgICRleHRyYWN0ZWQvY3VzdG9tLmNyICYmCisJCXRlc3RfY21wX2JpbiAkb3JpZ2luYWwvY3VzdG9tLmNybGYgJGV4dHJhY3RlZC9jdXN0b20uY3JsZiAmJgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL2N1c3RvbS5sZiAgICRleHRyYWN0ZWQvY3VzdG9tLmxmCisJIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncG9wdWxhdGUgd29ya2RpcicgXAorICAgICdta2RpciBhICYmCisgICAgIGVjaG8gc2ltcGxlIHRleHRmaWxlID5hL2EgJiYKKyAgICAgbWtkaXIgYS9iaW4gJiYKKyAgICAgY3AgL2Jpbi9zaCBhL2JpbiAmJgorICAgICBwcmludGYgInRleHRcciIJPmEvdGV4dC5jciAmJgorICAgICBwcmludGYgInRleHRcclxuIgk+YS90ZXh0LmNybGYgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XG4iCT5hL3RleHQubGYgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XHIiCT5hL25vZGlmZi5jciAmJgorICAgICBwcmludGYgInRleHRcclxuIgk+YS9ub2RpZmYuY3JsZiAmJgorICAgICBwcmludGYgInRleHRcbiIJPmEvbm9kaWZmLmxmICYmCisgICAgIHByaW50ZiAidGV4dFxyIgk+YS9jdXN0b20uY3IgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XHJcbiIJPmEvY3VzdG9tLmNybGYgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XG4iCT5hL2N1c3RvbS5sZiAmJgorICAgICBwcmludGYgIlwwXHIiCT5hL2JpbmFyeS5jciAmJgorICAgICBwcmludGYgIlwwXHJcbiIJPmEvYmluYXJ5LmNybGYgJiYKKyAgICAgcHJpbnRmICJcMFxuIgk+YS9iaW5hcnkubGYgJiYKKyAgICAgcHJpbnRmICJcMFxyIgk+YS9kaWZmLmNyICYmCisgICAgIHByaW50ZiAiXDBcclxuIgk+YS9kaWZmLmNybGYgJiYKKyAgICAgcHJpbnRmICJcMFxuIgk+YS9kaWZmLmxmICYmCisgICAgIHByaW50ZiAiQVwkRm9ybWF0OiVzXCRPIiAiJFNVQlNURk9STUFUIiA+YS9zdWJzdGZpbGUxICYmCisgICAgIHByaW50ZiAiQSBub3Qgc3Vic3RpdHV0ZWQgTyIgPmEvc3Vic3RmaWxlMiAmJgorICAgICAocD1sb25nX3BhdGhfdG9fYV9maWxlICYmIGNkIGEgJiYKKyAgICAgIGZvciBkZXB0aCBpbiAxIDIgMyA0IDU7IGRvIG1rZGlyICRwICYmIGNkICRwOyBkb25lICYmCisgICAgICBlY2hvIHRleHQgPmZpbGVfd2l0aF9sb25nX3BhdGgpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MsVU5aSVBfU1lNTElOS1MgJ2FkZCBzeW1saW5rJyAnCisJbG4gLXMgYSBhL3N5bWxpbmtfdG9fYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZpbGUgbGlzdCcgJworCShjZCBhICYmIGZpbmQgLikgfCBzb3J0ID5hLmxzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYWRkIGlnbm9yZWQgZmlsZScgXAorICAgICdlY2hvIGlnbm9yZSBtZSA+YS9pZ25vcmVkICYmCisgICAgIGVjaG8gaWdub3JlZCBleHBvcnQtaWdub3JlID4uZ2l0L2luZm8vYXR0cmlidXRlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGZpbGVzIHRvIHJlcG9zaXRvcnknICcKKwlnaXQgYWRkIGEgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjcgMjI6MDAiIGdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBvcnQtc3Vic3QgYW5kIGRpZmYgYXR0cmlidXRlcycgJworCWVjaG8gImEvbm9kaWZmLiogLWRpZmYiID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwllY2hvICJhL2RpZmYuKiBkaWZmIiA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZWNobyAiYS9jdXN0b20uKiBkaWZmPWN1c3RvbSIgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi5jdXN0b20uYmluYXJ5IHRydWUgJiYKKwllY2hvICJzdWJzdGZpbGU/IiBleHBvcnQtc3Vic3QgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBsb2cgLS1tYXgtY291bnQ9MSAiLS1wcmV0dHk9Zm9ybWF0OkEke1NVQlNURk9STUFUfU8iIEhFQUQgXAorCQk+YS9zdWJzdGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBiYXJlIGNsb25lJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUuZ2l0ICYmCisJY3AgLmdpdC9pbmZvL2F0dHJpYnV0ZXMgYmFyZS5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJIyBSZWNyZWF0ZSBvdXIgY2hhbmdlcyB0byAuZ2l0L2NvbmZpZyByYXRoZXIgdGhhbiBqdXN0IGNvcHlpbmcgaXQsIGFzCisJIyB3ZSBkbyBub3Qgd2FudCB0byBjbG9iYmVyIGNvcmUuYmFyZSBvciBvdGhlciBzZXR0aW5ncy4KKwlnaXQgLUMgYmFyZS5naXQgY29uZmlnIGRpZmYuY3VzdG9tLmJpbmFyeSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZW1vdmUgaWdub3JlZCBmaWxlJyBcCisgICAgJ3JtIGEvaWdub3JlZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCcgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCA+ZC56aXAnCisKK2NoZWNrX3ppcCBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgaW4gYSBiYXJlIHJlcG8nIFwKKyAgICAnKGNkIGJhcmUuZ2l0ICYmIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEKSA+ZDEuemlwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIHZzLiB0aGUgc2FtZSBpbiBhIGJhcmUgcmVwbycgXAorICAgICd0ZXN0X2NtcF9iaW4gZC56aXAgZDEuemlwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgd2l0aCAtLW91dHB1dCcgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLS1vdXRwdXQ9ZDIuemlwIEhFQUQgJiYKKyAgICB0ZXN0X2NtcF9iaW4gZC56aXAgZDIuemlwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIC0tb3V0cHV0LCBpbmZlcnJpbmcgZm9ybWF0IChsb2NhbCknICcKKwlnaXQgYXJjaGl2ZSAtLW91dHB1dD1kMy56aXAgSEVBRCAmJgorCXRlc3RfY21wX2JpbiBkLnppcCBkMy56aXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCAtLW91dHB1dCwgaW5mZXJyaW5nIGZvcm1hdCAocmVtb3RlKScgJworCWdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gLS1vdXRwdXQ9ZDQuemlwIEhFQUQgJiYKKwl0ZXN0X2NtcF9iaW4gZC56aXAgZDQuemlwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgd2l0aCBwcmVmaXgnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIC0tcHJlZml4PXByZWZpeC8gSEVBRCA+ZS56aXAnCisKK2NoZWNrX3ppcCBlIHByZWZpeC8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLTAgLS1mb3JtYXQ9emlwIG9uIGxhcmdlIGZpbGVzJyAnCisJdGVzdF9jb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDEgJiYKKwlnaXQgYXJjaGl2ZSAtMCAtLWZvcm1hdD16aXAgSEVBRCA+bGFyZ2UuemlwCisnCisKK2NoZWNrX3ppcCBsYXJnZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgb24gbGFyZ2UgZmlsZXMnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgMSAmJgorCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID5sYXJnZS1jb21wcmVzc2VkLnppcAorJworCitjaGVja196aXAgbGFyZ2UtY29tcHJlc3NlZAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUwMDMvaW5mb3ppcC1zeW1saW5rcy56aXAgYi90L3Q1MDAzL2luZm96aXAtc3ltbGlua3MuemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTcyOGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAzL2luZm96aXAtc3ltbGlua3MuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUwMDQtYXJjaGl2ZS1jb3JuZXItY2FzZXMuc2ggYi90L3Q1MDA0LWFyY2hpdmUtY29ybmVyLWNhc2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlN2IyM2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDA0LWFyY2hpdmUtY29ybmVyLWNhc2VzLnNoCkBAIC0wLDAgKzEsMjI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjb3JuZXIgY2FzZXMgb2YgZ2l0LWFyY2hpdmUnCisuIC4vdGVzdC1saWIuc2gKKworIyB0aGUgMTBrbnVscy50YXIgZmlsZSBpcyB1c2VkIHRvIHRlc3QgZm9yIGFuIGVtcHR5IGdpdCBnZW5lcmF0ZWQgdGFyCisjIHdpdGhvdXQgaGF2aW5nIHRvIGludm9rZSB0YXIgYmVjYXVzZSBhbiBvdGhlcndpc2UgdmFsaWQgZW1wdHkgR05VIHRhcgorIyB3aWxsIGJlIGNvbnNpZGVyZWQgYnJva2VuIGJ5IHtPcGVuLE5ldH1CU0QgdGFyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29tbWl0IHdpdGggZW1wdHkgdHJlZSBhbmQgZmFrZSBlbXB0eSB0YXInICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vICYmCisJcGVybCAtZSAicHJpbnQgXCJcXDBcIiB4IDEwMjQwIiA+MTBrbnVscy50YXIKKycKKworIyBNYWtlIGEgZGlyIGFuZCBjbGVhbiBpdCB1cCBhZnRlcndhcmRzCittYWtlX2RpcigpIHsKKwlta2RpciAiJDEiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgJyQxJyIKK30KKworIyBDaGVjayB0aGF0IHRoZSBkaXIgZ2l2ZW4gaW4gIiQxIiBjb250YWlucyBleGFjdGx5IHRoZQorIyBzZXQgb2YgcGF0aHMgZ2l2ZW4gYXMgYXJndW1lbnRzLgorY2hlY2tfZGlyKCkgeworCWRpcj0kMTsgc2hpZnQKKwl7CisJCWVjaG8gIiRkaXIiICYmCisJCWZvciBpIGluICIkQCI7IGRvCisJCQllY2hvICIkZGlyLyRpIgorCQlkb25lCisJfSB8IHNvcnQgPmV4cGVjdCAmJgorCWZpbmQgIiRkaXIiICEgLW5hbWUgcGF4X2dsb2JhbF9oZWFkZXIgLXByaW50IHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2xhenlfcHJlcmVxIFVOWklQX1pJUDY0X1NVUFBPUlQgJworCSIkR0lUX1VOWklQIiAtdiB8IGdyZXAgWklQNjRfU1VQUE9SVAorJworCisjIGJzZHRhci9saWJhcmNoaXZlIHZlcnNpb25zIGJlZm9yZSAzLjEuMyBjb25zaWRlciBhIHRhciBmaWxlIHdpdGggYQorIyBnbG9iYWwgcGF4IGhlYWRlciB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSBhIGZpbGUgcmVjb3JkIGFzIGNvcnJ1cHQuCitpZiAiJFRBUiIgdGYgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDQvZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhciA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgSEVBREVSX09OTFlfVEFSX09LCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhFQURFUl9PTkxZX1RBUl9PSyAndGFyIGFyY2hpdmUgb2YgY29tbWl0IHdpdGggZW1wdHkgdHJlZScgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciBIRUFEID5lbXB0eS13aXRoLXBheC1oZWFkZXIudGFyICYmCisJbWFrZV9kaXIgZXh0cmFjdCAmJgorCSIkVEFSIiB4ZiBlbXB0eS13aXRoLXBheC1oZWFkZXIudGFyIC1DIGV4dHJhY3QgJiYKKwljaGVja19kaXIgZXh0cmFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YXIgYXJjaGl2ZSBvZiBlbXB0eSB0cmVlIGlzIGVtcHR5JyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIEhFQUQ6ID5lbXB0eS50YXIgJiYKKwl0ZXN0X2NtcF9iaW4gMTBrbnVscy50YXIgZW1wdHkudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhciBhcmNoaXZlIG9mIGVtcHR5IHRyZWUgd2l0aCBwcmVmaXgnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9Zm9vLyBIRUFEID5wcmVmaXgudGFyICYmCisJbWFrZV9kaXIgZXh0cmFjdCAmJgorCSIkVEFSIiB4ZiBwcmVmaXgudGFyIC1DIGV4dHJhY3QgJiYKKwljaGVja19kaXIgZXh0cmFjdCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAnemlwIGFyY2hpdmUgb2YgZW1wdHkgdHJlZSBpcyBlbXB0eScgJworCSMgRGV0ZWN0IHRoZSBleGl0IGNvZGUgcHJvZHVjZWQgd2hlbiBvdXIgcGFydGljdWxhciBmbGF2b3Igb2YgdW56aXAKKwkjIHNlZXMgYW4gZW1wdHkgYXJjaGl2ZS4gSW5mb3ppcCB3aWxsIGdlbmVyYXRlIGEgd2FybmluZyBhbmQgZXhpdCB3aXRoCisJIyBjb2RlIDEuIEJ1dCBpbiB0aGUgbmFtZSBvZiBzYW5pdHksIHdlIGRvIG5vdCBleHBlY3Qgb3RoZXIgdW56aXAKKwkjIGltcGxlbWVudGF0aW9ucyB0byBkbyB0aGUgc2FtZSB0aGluZyAoaXQgd291bGQgYmUgcGVyZmVjdGx5CisJIyByZWFzb25hYmxlIHRvIGV4aXQgMCwgZm9yIGV4YW1wbGUpLgorCSMKKwkjIFRoaXMgbWFrZXMgb3VyIHRlc3QgbGVzcyByaWdvcm91cyBvbiBzb21lIHBsYXRmb3JtcyAodW56aXAgbWF5IG5vdAorCSMgaGFuZGxlIHRoZSBlbXB0eSByZXBvIGF0IGFsbCwgbWFraW5nIG91ciBsYXRlciBjaGVjayBvZiBpdHMgZXhpdCBjb2RlCisJIyBhIG5vLW9wKS4gQnV0IHdlIGNhbm5vdCBkbyBhbnl0aGluZyByZWFzb25hYmxlIGV4Y2VwdCBza2lwIHRoZSB0ZXN0CisJIyBvbiBzdWNoIHBsYXRmb3JtcyBhbnl3YXksIGFuZCB0aGlzIGlzIHRoZSBtb3JhbCBlcXVpdmFsZW50LgorCXsKKwkJIiRHSVRfVU5aSVAiICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDA0L2VtcHR5LnppcAorCQlleHBlY3RfY29kZT0kPworCX0gJiYKKworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID5lbXB0eS56aXAgJiYKKwltYWtlX2RpciBleHRyYWN0ICYmCisJKAorCQljZCBleHRyYWN0ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgJGV4cGVjdF9jb2RlICIkR0lUX1VOWklQIiAuLi9lbXB0eS56aXAKKwkpICYmCisJY2hlY2tfZGlyIGV4dHJhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAnemlwIGFyY2hpdmUgb2YgZW1wdHkgdHJlZSB3aXRoIHByZWZpeCcgJworCSMgV2UgZG8gbm90IGhhdmUgdG8gcGxheSBleGl0LWNvZGUgdHJpY2tzIGhlcmUsIGJlY2F1c2Ugb3VyCisJIyByZXN1bHQgc2hvdWxkIG5vdCBiZSBlbXB0eTsgaXQgaGFzIGEgZGlyZWN0b3J5IGluIGl0LgorCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtLXByZWZpeD1mb28vIEhFQUQgPnByZWZpeC56aXAgJiYKKwltYWtlX2RpciBleHRyYWN0ICYmCisJKAorCQljZCBleHRyYWN0ICYmCisJCSIkR0lUX1VOWklQIiAuLi9wcmVmaXguemlwCisJKSAmJgorCWNoZWNrX2RpciBleHRyYWN0IGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmNoaXZlIGNvbXBsYWlucyBhYm91dCBwYXRoc3BlYyBvbiBlbXB0eSB0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIEhFQUQgLS0gZm9vID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgc3VidHJlZScgJworCWVtcHR5X3RyZWU9JChnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAvZGV2L251bGwpICYmCisJcm9vdF90cmVlPSQocHJpbnRmICIwNDAwMDAgdHJlZSAkZW1wdHlfdHJlZVx0c3ViXG4iIHwgZ2l0IG1rdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJjaGl2ZSBlbXB0eSBzdWJ0cmVlIHdpdGggbm8gcGF0aHNwZWMnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgJHJvb3RfdHJlZSA+c3VidHJlZS1hbGwudGFyICYmCisJdGVzdF9jbXBfYmluIDEwa251bHMudGFyIHN1YnRyZWUtYWxsLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmNoaXZlIGVtcHR5IHN1YnRyZWUgYnkgZGlyZWN0IHBhdGhzcGVjJyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyICRyb290X3RyZWUgLS0gc3ViID5zdWJ0cmVlLXBhdGgudGFyICYmCisJdGVzdF9jbXBfYmluIDEwa251bHMudGFyIHN1YnRyZWUtcGF0aC50YXIKKycKKworWklQSU5GTz16aXBpbmZvCisKK3Rlc3RfbGF6eV9wcmVyZXEgWklQSU5GTyAnCisJbj0kKCIkWklQSU5GTyIgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDQvZW1wdHkuemlwIHwgc2VkIC1uICIycy8uKiAvL3AiKQorCXRlc3QgIngkbiIgPSAieDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgWklQSU5GTyAnemlwIGFyY2hpdmUgd2l0aCBtYW55IGVudHJpZXMnICcKKwkjIGFkZCBhIGRpcmVjdG9yeSB3aXRoIDI1NiBmaWxlcworCW1rZGlyIDAwICYmCisJZm9yIGEgaW4gMCAxIDIgMyA0IDUgNiA3IDggOSBhIGIgYyBkIGUgZgorCWRvCisJCWZvciBiIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkgYSBiIGMgZCBlIGYKKwkJZG8KKwkJCTogPjAwLyRhJGIKKwkJZG9uZQorCWRvbmUgJiYKKwlnaXQgYWRkIDAwICYmCisJZ2l0IGNvbW1pdCAtbSAiMjU2IGZpbGVzIGluIDEgZGlyZWN0b3J5IiAmJgorCisJIyBkdXBsaWNhdGUgaXQgdG8gZ2V0IDY1NTM2IGZpbGVzIGluIDI1NiBkaXJlY3RvcmllcworCXN1YnRyZWU9JChnaXQgd3JpdGUtdHJlZSAtLXByZWZpeD0wMC8pICYmCisJZm9yIGMgaW4gMCAxIDIgMyA0IDUgNiA3IDggOSBhIGIgYyBkIGUgZgorCWRvCisJCWZvciBkIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkgYSBiIGMgZCBlIGYKKwkJZG8KKwkJCWVjaG8gIjA0MDAwMCB0cmVlICRzdWJ0cmVlCSRjJGQiCisJCWRvbmUKKwlkb25lID50cmVlICYmCisJdHJlZT0kKGdpdCBta3RyZWUgPHRyZWUpICYmCisKKwkjIHppcCB0aGVtCisJZ2l0IGFyY2hpdmUgLW8gbWFueS56aXAgJHRyZWUgJiYKKworCSMgY2hlY2sgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBaSVAgZmlsZSBkaXJlY3RvcnkKKwlleHByIDY1NTM2ICsgMjU2ID5leHBlY3QgJiYKKwkiJFpJUElORk8iIG1hbnkuemlwIHwgaGVhZCAtMiB8IHNlZCAtbiAiMnMvLiogLy9wIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYUEVOU0lWRSxVTlpJUCxVTlpJUF9aSVA2NF9TVVBQT1JUIFwKKwknemlwIGFyY2hpdmUgYmlnZ2VyIHRoYW4gNEdCJyAnCisJIyBidWlsZCBzdHJpbmcgY29udGFpbmluZyA2NTUzNiBjaGFyYWN0ZXJzCisJcz0wMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmICYmCisJcz0kcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzICYmCisJcz0kcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzJHMkcyRzICYmCisKKwkjIGNyZWF0ZSBibG9iIHdpdGggYSBsZW5ndGggb2YgNjU1MzYgKyAxIGJ5dGVzCisJYmxvYj0kKGVjaG8gJHMgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKworCSMgY3JlYXRlIHRyZWUgY29udGFpbmluZyA2NTUwMCBlbnRyaWVzIG9mIHRoYXQgYmxvYgorCWZvciBpIGluICQodGVzdF9zZXEgMSA2NTUwMCkKKwlkbworCQllY2hvICIxMDA2NDQgYmxvYiAkYmxvYgkkaSIKKwlkb25lID50cmVlICYmCisJdHJlZT0kKGdpdCBta3RyZWUgPHRyZWUpICYmCisKKwkjIHppcCBpdCwgY3JlYXRpbmcgYW4gYXJjaGl2ZSBhIGJpdCBiaWdnZXIgdGhhbiA0R0IKKwlnaXQgYXJjaGl2ZSAtMCAtbyBtYW55LWJpZy56aXAgJHRyZWUgJiYKKworCSIkR0lUX1VOWklQIiAtdCBtYW55LWJpZy56aXAgOTk5OSA2NTUwMCAmJgorCSIkR0lUX1VOWklQIiAtdCBtYW55LWJpZy56aXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBFWFBFTlNJVkUsTE9OR19JU182NEJJVCxVTlpJUCxVTlpJUF9aSVA2NF9TVVBQT1JULFpJUElORk8gXAorCSd6aXAgYXJjaGl2ZSB3aXRoIGZpbGVzIGJpZ2dlciB0aGFuIDRHQicgJworCSMgUGFjayBjcmVhdGVkIHdpdGg6CisJIyAgIGRkIGlmPS9kZXYvemVybyBvZj1maWxlIGJzPTFNIGNvdW50PTQxMDAgJiYgZ2l0IGhhc2gtb2JqZWN0IC13IGZpbGUKKwlta2RpciAtcCAuZ2l0L29iamVjdHMvcGFjayAmJgorCSgKKwkJY2QgLmdpdC9vYmplY3RzL3BhY2sgJiYKKwkJIiRHSVRfVU5aSVAiICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDA0L2JpZy1wYWNrLnppcAorCSkgJiYKKwlibG9iPTc1NGE5M2Q2ZmFkYTRjNjg3MzM2MGU2Y2I0YjIwOTEzMjI3MWFiMGUgJiYKKwlzaXplPSQoZXhwciA0MTAwICIqIiAxMDI0ICIqIiAxMDI0KSAmJgorCisJIyBjcmVhdGUgYSB0cmVlIGNvbnRhaW5pbmcgdGhlIGZpbGUKKwl0cmVlPSQoZWNobyAiMTAwNjQ0IGJsb2IgJGJsb2IJYmlnLWZpbGUiIHwgZ2l0IG1rdHJlZSkgJiYKKworCSMgemlwIGl0LCBjcmVhdGluZyBhbiBhcmNoaXZlIHdpdGggYSBmaWxlIGJpZ2dlciB0aGFuIDRHQgorCWdpdCBhcmNoaXZlIC1vIGJpZy56aXAgJHRyZWUgJiYKKworCSIkR0lUX1VOWklQIiAtdCBiaWcuemlwICYmCisJIiRaSVBJTkZPIiBiaWcuemlwID5iaWcubHN0ICYmCisJZ3JlcCAkc2l6ZSBiaWcubHN0CisnCisKK2J1aWxkX3RyZWUoKSB7CisJcGVybCAtZSAnCisJCW15ICRoYXNoID0gJEFSR1ZbMF07CisJCWZvcmVhY2ggbXkgJG9yZGVyICgyLi42KSB7CisJCQkkZmlyc3QgPSAxMCAqKiAkb3JkZXI7CisJCQlmb3JlYWNoIG15ICRpICgtMTMuLi05KSB7CisJCQkJbXkgJG5hbWUgPSAiYSIgeCAoJGZpcnN0ICsgJGkpOworCQkJCXByaW50ICIxMDA2NDQgYmxvYiAkaGFzaFx0JG5hbWVcbiIKKwkJCX0KKwkJfQorCScgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YXIgYXJjaGl2ZSB3aXRoIGxvbmcgcGF0aHMnICcKKwlibG9iPSQoZWNobyBmb28gfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl0cmVlPSQoYnVpbGRfdHJlZSAkYmxvYiB8IGdpdCBta3RyZWUpICYmCisJZ2l0IGFyY2hpdmUgLW8gbG9uZ19wYXRocy50YXIgJHRyZWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDA0L2JpZy1wYWNrLnppcCBiL3QvdDUwMDQvYmlnLXBhY2suemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWY2MTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDA0L2JpZy1wYWNrLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MDA0L2VtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIgYi90L3Q1MDA0L2VtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5ZTM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDQvZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MDA0L2VtcHR5LnppcCBiL3QvdDUwMDQvZW1wdHkuemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNzZiYjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDA0L2VtcHR5LnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MTAwLW1haWxpbmZvLnNoIGIvdC90NTEwMC1tYWlsaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNDdlNjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC1tYWlsaW5mby5zaApAQCAtMCwwICsxLDIzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWFpbGluZm8gYW5kIGdpdCBtYWlsc3BsaXQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK0RBVEE9IiRURVNUX0RJUkVDVE9SWS90NTEwMCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgc2FtcGxlIGJveCcgXAorCSdnaXQgbWFpbHNwbGl0IC1vLiAiJERBVEEvc2FtcGxlLm1ib3giID5sYXN0ICYmCisJbGFzdD0kKGNhdCBsYXN0KSAmJgorCWVjaG8gdG90YWwgaXMgJGxhc3QgJiYKKwl0ZXN0ICQoY2F0IGxhc3QpID0gMTgnCisKK2NoZWNrX21haWxpbmZvICgpIHsKKwltYWlsPSQxIG9wdD0kMgorCW1vPSIkbWFpbCRvcHQiCisJZ2l0IG1haWxpbmZvIC11ICRvcHQgIm1zZyRtbyIgInBhdGNoJG1vIiA8IiRtYWlsIiA+ImluZm8kbW8iICYmCisJdGVzdF9jbXAgIiREQVRBL21zZyRtbyIgIm1zZyRtbyIgJiYKKwl0ZXN0X2NtcCAiJERBVEEvcGF0Y2gkbW8iICJwYXRjaCRtbyIgJiYKKwl0ZXN0X2NtcCAiJERBVEEvaW5mbyRtbyIgImluZm8kbW8iCit9CisKKworZm9yIG1haWwgaW4gMDAqCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1haWxpbmZvICRtYWlsIiAnCisJCWNoZWNrX21haWxpbmZvICIkbWFpbCIgIiIgJiYKKwkJaWYgdGVzdCAtZiAiJERBVEEvbXNnJG1haWwtLXNjaXNzb3JzIgorCQl0aGVuCisJCQljaGVja19tYWlsaW5mbyAiJG1haWwiIC0tc2Npc3NvcnMKKwkJZmkgJiYKKwkJaWYgdGVzdCAtZiAiJERBVEEvbXNnJG1haWwtLW5vLWluYm9keS1oZWFkZXJzIgorCQl0aGVuCisJCQljaGVja19tYWlsaW5mbyAiJG1haWwiIC0tbm8taW5ib2R5LWhlYWRlcnMKKwkJZmkgJiYKKwkJaWYgdGVzdCAtZiAiJERBVEEvbXNnJG1haWwtLW1lc3NhZ2UtaWQiCisJCXRoZW4KKwkJCWNoZWNrX21haWxpbmZvICIkbWFpbCIgLS1tZXNzYWdlLWlkCisJCWZpCisJJworZG9uZQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IGJveCB3aXRoIHJmYzIwNDcgc2FtcGxlcycgXAorCSdta2RpciByZmMyMDQ3ICYmCisJZ2l0IG1haWxzcGxpdCAtb3JmYzIwNDcgIiREQVRBL3JmYzIwNDctc2FtcGxlcy5tYm94IiBcCisJICA+cmZjMjA0Ny9sYXN0ICYmCisJbGFzdD0kKGNhdCByZmMyMDQ3L2xhc3QpICYmCisJZWNobyB0b3RhbCBpcyAkbGFzdCAmJgorCXRlc3QgJChjYXQgcmZjMjA0Ny9sYXN0KSA9IDExJworCitmb3IgbWFpbCBpbiByZmMyMDQ3LzAwKgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtYWlsaW5mbyAkbWFpbCIgJworCQlnaXQgbWFpbGluZm8gLXUgIiRtYWlsLW1zZyIgIiRtYWlsLXBhdGNoIiA8IiRtYWlsIiA+IiRtYWlsLWluZm8iICYmCisJCWVjaG8gbXNnICYmCisJCXRlc3RfY21wICIkREFUQS9lbXB0eSIgIiRtYWlsLW1zZyIgJiYKKwkJZWNobyBwYXRjaCAmJgorCQl0ZXN0X2NtcCAiJERBVEEvZW1wdHkiICIkbWFpbC1wYXRjaCIgJiYKKwkJZWNobyBpbmZvICYmCisJCXRlc3RfY21wICIkREFUQS9yZmMyMDQ3LWluZm8tJChiYXNlbmFtZSAkbWFpbCkiICIkbWFpbC1pbmZvIgorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzcGVjdCBOVUxzJyAnCisKKwlnaXQgbWFpbHNwbGl0IC1kMyAtby4gIiREQVRBL251bC1wbGFpbiIgJiYKKwl0ZXN0X2NtcCAiJERBVEEvbnVsLXBsYWluIiAwMDEgJiYKKwkoY2F0IDAwMSB8IGdpdCBtYWlsaW5mbyBtc2cgcGF0Y2gpICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBwYXRjaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ByZXNlcnZlIE5VTHMgb3V0IG9mIE1JTUUgZW5jb2RlZCBtZXNzYWdlJyAnCisKKwlnaXQgbWFpbHNwbGl0IC1kNSAtby4gIiREQVRBL251bC1iNjQuaW4iICYmCisJdGVzdF9jbXAgIiREQVRBL251bC1iNjQuaW4iIDAwMDAxICYmCisJZ2l0IG1haWxpbmZvIG1zZyBwYXRjaCA8MDAwMDEgJiYKKwl0ZXN0X2NtcCAiJERBVEEvbnVsLWI2NC5leHBlY3QiIHBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbGluZm8gb24gZnJvbSBoZWFkZXIgd2l0aG91dCBuYW1lIHdvcmtzJyAnCisKKwlta2RpciBpbmZvLWZyb20gJiYKKwlnaXQgbWFpbHNwbGl0IC1vaW5mby1mcm9tICIkREFUQS9pbmZvLWZyb20uaW4iICYmCisJdGVzdF9jbXAgIiREQVRBL2luZm8tZnJvbS5pbiIgaW5mby1mcm9tLzAwMDEgJiYKKwlnaXQgbWFpbGluZm8gaW5mby1mcm9tL21zZyBpbmZvLWZyb20vcGF0Y2ggXAorCSAgPGluZm8tZnJvbS8wMDAxID5pbmZvLWZyb20vb3V0ICYmCisJdGVzdF9jbXAgIiREQVRBL2luZm8tZnJvbS5leHBlY3QiIGluZm8tZnJvbS9vdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyBmaW5kcyBoZWFkZXJzIGFmdGVyIGVtYmVkZGVkIEZyb20gbGluZScgJworCW1rZGlyIGVtYmVkLWZyb20gJiYKKwlnaXQgbWFpbHNwbGl0IC1vZW1iZWQtZnJvbSAiJERBVEEvZW1iZWQtZnJvbS5pbiIgJiYKKwl0ZXN0X2NtcCAiJERBVEEvZW1iZWQtZnJvbS5pbiIgZW1iZWQtZnJvbS8wMDAxICYmCisJZ2l0IG1haWxpbmZvIGVtYmVkLWZyb20vbXNnIGVtYmVkLWZyb20vcGF0Y2ggXAorCSAgPGVtYmVkLWZyb20vMDAwMSA+ZW1iZWQtZnJvbS9vdXQgJiYKKwl0ZXN0X2NtcCAiJERBVEEvZW1iZWQtZnJvbS5leHBlY3QiIGVtYmVkLWZyb20vb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIG9uIG1lc3NhZ2Ugd2l0aCBxdW90ZWQgPkZyb20nICcKKwlta2RpciBxdW90ZWQtZnJvbSAmJgorCWdpdCBtYWlsc3BsaXQgLW9xdW90ZWQtZnJvbSAiJERBVEEvcXVvdGVkLWZyb20uaW4iICYmCisJdGVzdF9jbXAgIiREQVRBL3F1b3RlZC1mcm9tLmluIiBxdW90ZWQtZnJvbS8wMDAxICYmCisJZ2l0IG1haWxpbmZvIHF1b3RlZC1mcm9tL21zZyBxdW90ZWQtZnJvbS9wYXRjaCBcCisJICA8cXVvdGVkLWZyb20vMDAwMSA+cXVvdGVkLWZyb20vb3V0ICYmCisJdGVzdF9jbXAgIiREQVRBL3F1b3RlZC1mcm9tLmV4cGVjdCIgcXVvdGVkLWZyb20vbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIHVuZXNjYXBlcyB3aXRoIC0tbWJveHJkJyAnCisJbWtkaXIgbWJveHJkICYmCisJZ2l0IG1haWxzcGxpdCAtb21ib3hyZCAtLW1ib3hyZCBcCisJCSIkREFUQS9zYW1wbGUubWJveHJkIiA+bGFzdCAmJgorCXRlc3QgeCIkKGNhdCBsYXN0KSIgPSB4MiAmJgorCWZvciBpIGluIDAwMDEgMDAwMgorCWRvCisJCWdpdCBtYWlsaW5mbyBtYm94cmQvbXNnIG1ib3hyZC9wYXRjaCBcCisJCSAgPG1ib3hyZC8kaSA+bWJveHJkL291dCAmJgorCQl0ZXN0X2NtcCAiJERBVEEvJHtpfW1ib3hyZCIgbWJveHJkL21zZworCWRvbmUgJiYKKwlzcD0iICIgJiYKKwllY2hvICJGcm9tICIgPmV4cGVjdCAmJgorCWVjaG8gIkZyb20gIiA+PmV4cGVjdCAmJgorCWVjaG8gPj4gZXhwZWN0ICYmCisJY2F0ID5zcCA8PC1JTlBVVF9FTkQgJiYKKwlGcm9tIG1ib3hyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKKwlGcm9tOiB0cmFpbGluZyBzcGFjZXIgPHNwQGV4YW1wbGUuY29tPgorCVN1YmplY3Q6IFtQQVRDSF0gYSBjb21taXQgd2l0aCB0cmFpbGluZyBzcGFjZQorCisJRnJvbSRzcAorCT5Gcm9tJHNwCisKKwlJTlBVVF9FTkQKKworCWdpdCBtYWlsc3BsaXQgLWYyIC1vbWJveHJkIC0tbWJveHJkIDxzcCA+bGFzdCAmJgorCXRlc3QgeCIkKGNhdCBsYXN0KSIgPSB4MSAmJgorCWdpdCBtYWlsaW5mbyBtYm94cmQvbXNnIG1ib3hyZC9wYXRjaCA8bWJveHJkLzAwMDMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbWJveHJkL21zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyBoYW5kbGVzIHJmYzI4MjIgcXVvdGVkLXN0cmluZycgJworCW1rZGlyIHF1b3RlZC1zdHJpbmcgJiYKKwlnaXQgbWFpbGluZm8gL2Rldi9udWxsIC9kZXYvbnVsbCA8IiREQVRBL3F1b3RlZC1zdHJpbmcuaW4iIFwKKwkJPnF1b3RlZC1zdHJpbmcvaW5mbyAmJgorCXRlc3RfY21wICIkREFUQS9xdW90ZWQtc3RyaW5nLmV4cGVjdCIgcXVvdGVkLXN0cmluZy9pbmZvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIGhhbmRsZXMgcmZjMjgyMiBjb21tZW50JyAnCisJbWtkaXIgY29tbWVudCAmJgorCWdpdCBtYWlsaW5mbyAvZGV2L251bGwgL2Rldi9udWxsIDwiJERBVEEvY29tbWVudC5pbiIgXAorCQk+Y29tbWVudC9pbmZvICYmCisJdGVzdF9jbXAgIiREQVRBL2NvbW1lbnQuZXhwZWN0IiBjb21tZW50L2luZm8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbGluZm8gd2l0aCBtYWlsaW5mby5zY2lzc29ycyBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBtYWlsaW5mby5zY2lzc29ycyB0cnVlICYmCisJKAorCQlta2RpciBzdWIgJiYKKwkJY2Qgc3ViICYmCisJCWdpdCBtYWlsaW5mbyAuLi9tc2cwMDE0LnNjIC4uL3BhdGNoMDAxNC5zYyA8Li4vMDAxNCA+Li4vaW5mbzAwMTQuc2MKKwkpICYmCisJdGVzdF9jbXAgIiREQVRBL21zZzAwMTQtLXNjaXNzb3JzIiBtc2cwMDE0LnNjICYmCisJdGVzdF9jbXAgIiREQVRBL3BhdGNoMDAxNC0tc2Npc3NvcnMiIHBhdGNoMDAxNC5zYyAmJgorCXRlc3RfY21wICIkREFUQS9pbmZvMDAxNC0tc2Npc3NvcnMiIGluZm8wMDE0LnNjCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbGluZm8gbm8gb3B0aW9ucycgJworCXN1Ymo9IiQoZWNobyAiU3ViamVjdDogW1BBVENIXSBbb3RoZXJdIFtQQVRDSF0gbWVzc2FnZSIgfAorCQlnaXQgbWFpbGluZm8gL2Rldi9udWxsIC9kZXYvbnVsbCkiICYmCisJdGVzdCB6IiRzdWJqIiA9IHoiU3ViamVjdDogbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbGluZm8gLWsnICcKKwlzdWJqPSIkKGVjaG8gIlN1YmplY3Q6IFtQQVRDSF0gW290aGVyXSBbUEFUQ0hdIG1lc3NhZ2UiIHwKKwkJZ2l0IG1haWxpbmZvIC1rIC9kZXYvbnVsbCAvZGV2L251bGwpIiAmJgorCXRlc3QgeiIkc3ViaiIgPSB6IlN1YmplY3Q6IFtQQVRDSF0gW290aGVyXSBbUEFUQ0hdIG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIC1iIG5vIFtQQVRDSF0nICcKKwlzdWJqPSIkKGVjaG8gIlN1YmplY3Q6IFtvdGhlcl0gbWVzc2FnZSIgfAorCQlnaXQgbWFpbGluZm8gLWIgL2Rldi9udWxsIC9kZXYvbnVsbCkiICYmCisJdGVzdCB6IiRzdWJqIiA9IHoiU3ViamVjdDogW290aGVyXSBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyAtYiBsZWFkaW5nIFtQQVRDSF0nICcKKwlzdWJqPSIkKGVjaG8gIlN1YmplY3Q6IFtQQVRDSF0gW290aGVyXSBtZXNzYWdlIiB8CisJCWdpdCBtYWlsaW5mbyAtYiAvZGV2L251bGwgL2Rldi9udWxsKSIgJiYKKwl0ZXN0IHoiJHN1YmoiID0geiJTdWJqZWN0OiBbb3RoZXJdIG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIC1iIGRvdWJsZSBbUEFUQ0hdJyAnCisJc3Viaj0iJChlY2hvICJTdWJqZWN0OiBbUEFUQ0hdIFtQQVRDSF0gbWVzc2FnZSIgfAorCQlnaXQgbWFpbGluZm8gLWIgL2Rldi9udWxsIC9kZXYvbnVsbCkiICYmCisJdGVzdCB6IiRzdWJqIiA9IHoiU3ViamVjdDogbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWFpbGluZm8gLWIgdHJhaWxpbmcgW1BBVENIXScgJworCXN1Ymo9IiQoZWNobyAiU3ViamVjdDogW290aGVyXSBbUEFUQ0hdIG1lc3NhZ2UiIHwKKwkJZ2l0IG1haWxpbmZvIC1iIC9kZXYvbnVsbCAvZGV2L251bGwpIiAmJgorCXRlc3QgeiIkc3ViaiIgPSB6IlN1YmplY3Q6IFtvdGhlcl0gbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWFpbGluZm8gLWIgc2VwYXJhdGVkIGRvdWJsZSBbUEFUQ0hdJyAnCisJc3Viaj0iJChlY2hvICJTdWJqZWN0OiBbUEFUQ0hdIFtvdGhlcl0gW1BBVENIXSBtZXNzYWdlIiB8CisJCWdpdCBtYWlsaW5mbyAtYiAvZGV2L251bGwgL2Rldi9udWxsKSIgJiYKKwl0ZXN0IHoiJHN1YmoiID0geiJTdWJqZWN0OiBbb3RoZXJdIG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIGhhbmRsZXMgdW51c3VhbCBoZWFkZXIgd2hpdGVzcGFjZScgJworCWdpdCBtYWlsaW5mbyAvZGV2L251bGwgL2Rldi9udWxsID5hY3R1YWwgPDwtXEVPRiAmJgorCUZyb206UmVhbCBOYW1lIDx1c2VyQGV4YW1wbGUuY29tPgorCVN1YmplY3Q6ICAgIGV4dHJhIHNwYWNlcworCUVPRgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUF1dGhvcjogUmVhbCBOYW1lCisJRW1haWw6IHVzZXJAZXhhbXBsZS5jb20KKwlTdWJqZWN0OiBleHRyYSBzcGFjZXMKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MTAwLy5naXRhdHRyaWJ1dGVzIGIvdC90NTEwMC8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTNmNTE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxLDQgQEAKK21zZyoJZW5jb2Rpbmc9VVRGLTgKK2luZm8qCWVuY29kaW5nPVVURi04CityZmMyMDQ3LWluZm8tKgllbmNvZGluZz1VVEYtOAorc2FtcGxlLm1ib3gJZW5jb2Rpbmc9VVRGLTgKZGlmZiAtLWdpdCBhL3QvdDUxMDAvMDAwMW1ib3hyZCBiL3QvdDUxMDAvMDAwMW1ib3hyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTRlYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC8wMDAxbWJveHJkCkBAIC0wLDAgKzEsNCBAQAorRnJvbSB0aGUgYmVnaW5uaW5nLCBtYm94IHNob3VsZCBoYXZlIGJlZW4gbWJveHJkCis+RnJvbSBlc2NhcGVkCitGcm9tIG5vdCBtYW5nbGVkIGJ1dCB0aGlzIGxpbmUgc2hvdWxkIGhhdmUgYmVlbiBlc2NhcGVkCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvMDAwMm1ib3hyZCBiL3QvdDUxMDAvMDAwMm1ib3hyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM0M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC8wMDAybWJveHJkCkBAIC0wLDAgKzEsNSBAQAorID5Gcm9tIHVuY2hhbmdlZAorIEZyb20gYWxzbyB1bmNoYW5nZWQKK25vIHRyYWlsaW5nIHNwYWNlLCBubyBlc2NhcGluZyBuZWNlc3NhcnkgYW5kICc+JyB3YXMgaW50ZW5kZWQ6Cis+RnJvbQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2NvbW1lbnQuZXhwZWN0IGIvdC90NTEwMC9jb21tZW50LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjI4MTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9jb21tZW50LmV4cGVjdApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IgKHRoaXMgaXMgKHJlYWxseSkgYSBjb21tZW50IChob25lc3RseSkpCitFbWFpbDogc29tZWJvZHlAZXhhbXBsZS5jb20KK1N1YmplY3Q6IHRlc3RpbmcgY29tbWVudHMKK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9jb21tZW50LmluIGIvdC90NTEwMC9jb21tZW50LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2ExOTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2NvbW1lbnQuaW4KQEAgLTAsMCArMSw5IEBACitGcm9tIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiQSBVIFRob3IiIDxzb21lYm9keUBleGFtcGxlLmNvbT4gKHRoaXMgaXMgXChyZWFsbHlcKSBhIGNvbW1lbnQgKGhvbmVzdGx5KSkKK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdGluZyBjb21tZW50cworCisKKworLS0tCitwYXRjaApkaWZmIC0tZ2l0IGEvdC90NTEwMC9lbWJlZC1mcm9tLmV4cGVjdCBiL3QvdDUxMDAvZW1iZWQtZnJvbS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhM2EzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvZW1iZWQtZnJvbS5leHBlY3QKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IENvbW1pdCBBdXRob3IKK0VtYWlsOiBjb21taXRAZXhhbXBsZS5jb20KK1N1YmplY3Q6IHBhdGNoIHN1YmplY3QKK0RhdGU6IFNhdCwgMTMgU2VwIDIwMTQgMjE6MTM6MjMgLTA0MDAgCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvZW1iZWQtZnJvbS5pbiBiL3QvdDUxMDAvZW1iZWQtZnJvbS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjNmODRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9lbWJlZC1mcm9tLmluCkBAIC0wLDAgKzEsMTMgQEAKK0Zyb20gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVtYWlsIEF1dGhvciA8ZW1haWxAZXhhbXBsZS5jb20+CitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGVtYWlsIHN1YmplY3QKKworPkZyb20gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENvbW1pdCBBdXRob3IgPGNvbW1pdEBleGFtcGxlLmNvbT4KK0RhdGU6IFNhdCwgMTMgU2VwIDIwMTQgMjE6MTM6MjMgLTA0MDAKK1N1YmplY3Q6IHBhdGNoIHN1YmplY3QKKworcGF0Y2ggYm9keQorLS0tCitwYXRjaApkaWZmIC0tZ2l0IGEvdC90NTEwMC9lbXB0eSBiL3QvdDUxMDAvZW1wdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvZW1wdHkKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mby1mcm9tLmV4cGVjdCBiL3QvdDUxMDAvaW5mby1mcm9tLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzFkMmViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvLWZyb20uZXhwZWN0CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBiYXJlQGV4YW1wbGUuY29tCitFbWFpbDogYmFyZUBleGFtcGxlLmNvbQorU3ViamVjdDogdGVzdGluZyBiYXJlIGFkZHJlc3MgaW4gZnJvbSBoZWFkZXIKK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvLWZyb20uaW4gYi90L3Q1MTAwL2luZm8tZnJvbS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA4MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvLWZyb20uaW4KQEAgLTAsMCArMSw4IEBACitGcm9tIDY2N2Q4OTQwZTcxOWNkZGVlMWNmZTIzN2NiYmUyMTVlMjAyNzBiMDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBiYXJlQGV4YW1wbGUuY29tCitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3RpbmcgYmFyZSBhZGRyZXNzIGluIGZyb20gaGVhZGVyCisKK2NvbW1pdCBtZXNzYWdlCistLS0KK3BhdGNoCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDAxIGIvdC90NTEwMC9pbmZvMDAwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTUxNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwMQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSAoenp6KSBVIFRob3IgKENvbW1lbnQpCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGEgY29tbWl0LgorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDIgYi90L3Q1MTAwL2luZm8wMDAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YmIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDAyCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBhbm90aGVyIHBhdGNoCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwMyBiL3QvdDUxMDAvaW5mbzAwMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwZDEyMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDMKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IHRoaXJkIHBhdGNoCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwNCBiL3QvdDUxMDAvaW5mbzAwMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2YzMwOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDQKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IFlPU0hJRlVKSSBIaWRlYWtpIC8g5ZCJ6Jek6Iux5piOCitFbWFpbDogeW9zaGZ1amlAbGludXgtaXB2Ni5vcmcKK1N1YmplY3Q6IEdJVDogVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lCitEYXRlOiBUaHUsIDIxIEp1bCAyMDA1IDA5OjEwOjM2IC0wNDAwIChFRFQpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDUgYi90L3Q1MTAwL2luZm8wMDA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTQ2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDA1CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBEYXZpZCBLw6VnZWRhbAorRW1haWw6IGRhdmlka0BseXNhdG9yLmxpdS5zZQorU3ViamVjdDogRml4ZWQgdHdvIGJ1Z3MgaW4gZ2l0LWN2c2ltcG9ydC1zY3JpcHQuCitEYXRlOiBNb24sIDE1IEF1ZyAyMDA1IDIwOjE4OjI1ICswMjAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDYgYi90L3Q1MTAwL2luZm8wMDA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDUyNzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDA2CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBhIGNvbW1pdC4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA3IGIvdC90NTEwMC9pbmZvMDAwNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWJiMGZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwNwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogYW5vdGhlciBwYXRjaAorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDggYi90L3Q1MTAwL2luZm8wMDA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTI5NTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDA4CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBKdW5pbyBDIEhhbWFubworRW1haWw6IGp1bmlvQGtlcm5lbC5vcmcKK1N1YmplY3Q6IGFub3RoZXIgcGF0Y2gKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA5IGIvdC90NTEwMC9pbmZvMDAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTY2MzIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwOQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogRiBVIEJhcgorRW1haWw6IGYudS5iYXJAZXhhbXBsZS5jb20KK1N1YmplY3Q6IHVwZGF0ZXMKK0RhdGU6IE1vbiwgMTcgU2VwIDIwMDEgMDA6MDA6MDAgKzA5MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxMCBiL3QvdDUxMDAvaW5mbzAwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5MTI0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTAKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEx1a2FzIFNhbmRzdHLDtm0KK0VtYWlsOiBsdWthc3NAZXRlay5jaGFsbWVycy5zZQorU3ViamVjdDogZ2l0LW1haWxpbmZvOiBGaXggZ2V0dGluZyB0aGUgc3ViamVjdCBmcm9tIHRoZSBib2R5CitEYXRlOiBUaHUsIDEwIEp1bCAyMDA4IDIzOjQxOjMzICswMjAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTEgYi90L3Q1MTAwL2luZm8wMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNWE2MDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDExCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBYeXp6eQorRGF0ZTogRnJpLCA4IEF1ZyAyMDA4IDEzOjA4OjM3ICswMjAwIChDRVNUKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDEyIGIvdC90NTEwMC9pbmZvMDAxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzEyMTZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxMgpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogRG1pdHJpeSBCbGlub3YKK0VtYWlsOiBiZGFAbW5zc3BiLnJ1CitTdWJqZWN0OiDQmNC30LzQtdC90ZHQvSDRgdC/0LjRgdC+0Log0L/QsNC60LXRgtC+0LIg0L3QtdC+0LHRhdC+0LTQuNC80YvRhSDQtNC70Y8g0YHQsdC+0YDQutC4CitEYXRlOiBXZWQsIDEyIE5vdiAyMDA4IDE3OjU0OjQxICswMzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTItLW1lc3NhZ2UtaWQgYi90L3Q1MTAwL2luZm8wMDEyLS1tZXNzYWdlLWlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTIxNmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDEyLS1tZXNzYWdlLWlkCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBEbWl0cml5IEJsaW5vdgorRW1haWw6IGJkYUBtbnNzcGIucnUKK1N1YmplY3Q6INCY0LfQvNC10L3RkdC9INGB0L/QuNGB0L7QuiDQv9Cw0LrQtdGC0L7QsiDQvdC10L7QsdGF0L7QtNC40LzRi9GFINC00LvRjyDRgdCx0L7RgNC60LgKK0RhdGU6IFdlZCwgMTIgTm92IDIwMDggMTc6NTQ6NDEgKzAzMDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxMyBiL3QvdDUxMDAvaW5mbzAwMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlMDQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTMKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGEgcGF0Y2gKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE0IGIvdC90NTEwMC9pbmZvMDAxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODU2NmIzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogSnVuaW8gSGFtYW5vCitFbWFpbDoganVua2lvQGNveC5uZXQKK1N1YmplY3Q6IEJMQUggT05FCitEYXRlOiBUaHUsIDIwIEF1ZyAyMDA5IDE3OjE4OjIyIC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTQtLXNjaXNzb3JzIGIvdC90NTEwMC9pbmZvMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5YzhkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTQtLXNjaXNzb3JzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBKdW5pbyBDIEhhbWFubworRW1haWw6IGdpdHN0ZXJAcG9ib3guY29tCitTdWJqZWN0OiBUZWFjaCBtYWlsaW5mbyB0byBpZ25vcmUgZXZlcnl0aGluZyBiZWZvcmUgLS0gPjggLS0gbWFyaworRGF0ZTogVGh1LCAyMCBBdWcgMjAwOSAxNzoxODoyMiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE1IGIvdC90NTEwMC9pbmZvMDAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE0ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogCitFbWFpbDogCitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZnJvbSkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE1LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvaW5mbzAwMTUtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDhkNzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGZyb20pCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNiBiL3QvdDUxMDAvaW5mbzAwMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjY2QwZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTYKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGNoZWNrIGJvZ3VzIGJvZHkgaGVhZGVyIChkYXRlKQorRGF0ZTogYm9ndXMgCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTYtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9pbmZvMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4NTdkNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTYtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZGF0ZSkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE3IGIvdC90NTEwMC9pbmZvMDAxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmJjODlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogQSBFIEkgTyBVCitEYXRlOiBNb24sIDE3IFNlcCAyMDEyIDE0OjIzOjQ0IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTggYi90L3Q1MTAwL2luZm8wMDE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1M2U3NDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE4CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBbm90aGVyIFRob3IKK0VtYWlsOiBhLnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IFRoaXMgb25lIGNvbnRhaW5zIGEgdGFiIGFuZCBhIHNwYWNlCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxOC0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL2luZm8wMDE4LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGIxN2JkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxOC0tbm8taW5ib2R5LWhlYWRlcnMKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGNoZWNrIG11bHRpbGluZSBpbmJvZHkgaGVhZGVycworRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwMSBiL3QvdDUxMDAvbXNnMDAwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjc1YTlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDAxCkBAIC0wLDAgKzEsMiBAQAorSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwMiBiL3QvdDUxMDAvbXNnMDAwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjU0NmVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDAyCkBAIC0wLDAgKzEsMjEgQEAKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLiAgVGhpcyBhZGRyZXNzZXMgdGhlIGlzc3VlIHJhaXNlZCBpbiB0aGUKK21lc3NhZ2U6CisKK0Zyb206IE5pdCBQaWNrZXIgPG5pdC5waWNrZXJAZXhhbXBsZS5uZXQ+CitTdWJqZWN0OiBmb28gaXMgdG9vIG9sZAorTWVzc2FnZS1JZDogPG5pdHBpY2tlci4xMjEyMTIxMkBleGFtcGxlLm5ldD4KKworSG9wZWZ1bGx5IHRoaXMgd291bGQgZml4IHRoZSBwcm9ibGVtIHN0YXRlZCB0aGVyZS4KKworCitJIGhhdmUgaW5jbHVkZWQgYW4gZXh0cmEgYmxhbmsgbGluZSBhYm92ZSwgYnV0IGl0IGRvZXMgbm90IGhhdmUgdG8gYmUKK3N0cmlwcGVkIGF3YXkgaGVyZSwgYWxvbmcgd2l0aCB0aGUgICAgICAgICAgICAgICAJCSAgIAord2hpdGVzcGFjZXMgYXQgdGhlIGVuZCBvZiB0aGUgYWJvdmUgbGluZS4gIFRoZXkgYXJlIGV4cGVjdGVkIHRvIGJlIHNxdWFzaGVkCit3aGVuIHRoZSBtZXNzYWdlIGlzIG1hZGUgaW50byBhIGNvbW1pdCBsb2cgYnkgc3RyaXBzcGFjZSwKK0Fsc28sIHRoZXJlIGFyZSB0aHJlZSBibGFuayBsaW5lcyBhZnRlciB0aGlzIHBhcmFncmFwaCwKK3R3byB0cnVseSBibGFuayBhbmQgYW5vdGhlciBmdWxsIG9mIHNwYWNlcyBpbiBiZXR3ZWVuLgorCisgICAgICAgICAgICAKKworSG9wZSB0aGlzIGhlbHBzLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDMgYi90L3Q1MTAwL21zZzAwMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjNjgxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwMwpAQCAtMCwwICsxLDkgQEAKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLiAgVGhpcyBhZGRyZXNzZXMgdGhlIGlzc3VlIHJhaXNlZCBpbiB0aGUKK21lc3NhZ2U6CisKK0Zyb206IE5pdCBQaWNrZXIgPG5pdC5waWNrZXJAZXhhbXBsZS5uZXQ+CitTdWJqZWN0OiBmb28gaXMgdG9vIG9sZAorTWVzc2FnZS1JZDogPG5pdHBpY2tlci4xMjEyMTIxMkBleGFtcGxlLm5ldD4KKworSG9wZWZ1bGx5IHRoaXMgd291bGQgZml4IHRoZSBwcm9ibGVtIHN0YXRlZCB0aGVyZS4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDA0IGIvdC90NTEwMC9tc2cwMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOGJhM2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDQKQEAgLTAsMCArMSw3IEBACitIZWxsby4KKworVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lIHVudGlsIGl0IHN1Y2NlZWRzLgorQWxzbyBzdXBwb3J0cyBJUHY2LgorCitTaWduZWQtb2YtYnk6IEhpZGVha2kgWU9TSElGVUpJIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDA1IGIvdC90NTEwMC9tc2cwMDA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOTRjZDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDUKQEAgLTAsMCArMSwxMyBAQAorVGhlIGdpdC1jdnNpbXBvcnQtc2NyaXB0IGhhZCBhIGNvcHVsZSBvZiBzbWFsbCBidWdzIHRoYXQgcHJldmVudGVkIG1lCitmcm9tIGltcG9ydGluZyBhIGJpZyBDVlMgcmVwb3NpdG9yeS4KKworVGhlIGZpcnN0IHdhcyB0aGF0IGl0IGRpZG4ndCBoYW5kbGUgcmVtb3ZlZCBmaWxlcyB3aXRoIGEgbXVsdGktZGlnaXQKK3ByaW1hcnkgcmV2aXNpb24gbnVtYmVyLgorCitUaGUgc2Vjb25kIHdhcyB0aGF0IGl0IHdhcyBhc2tpbmcgdGhlIENWUyBzZXJ2ZXIgZm9yICJGIiBtZXNzYWdlcywKK2FsdGhvdWdoIHRoZXkgd2VyZSBub3QgaGFuZGxlZC4KKworSSBhbHNvIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgc2NyaXB0IHRvIGNvcnJlc3BvbmQgdG8KK2FjdHVhbCBmbGFncy4KKworU2lnbmVkLW9mZi1ieTogRGF2aWQgS8OlZ2VkYWwgPGRhdmlka0BseXNhdG9yLmxpdS5zZT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwNiBiL3QvdDUxMDAvbXNnMDAwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjc1YTlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA2CkBAIC0wLDAgKzEsMiBAQAorSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwNyBiL3QvdDUxMDAvbXNnMDAwNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWIyM2MwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA3CkBAIC0wLDAgKzEsMiBAQAorSGVyZSBpcyBhbiBlbXB0eSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDggYi90L3Q1MTAwL21zZzAwMDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwZWNiOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwOApAQCAtMCwwICsxLDQgQEAKKz5IZXJlIGlzIGFuIGVtcHR5IHBhdGNoIGZyb20gQSBVIFRob3IuCisKK0hleSB5b3UgZm9yZ290IHRoZSBwYXRjaCEKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDA5IGIvdC90NTEwMC9tc2cwMDA5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmUxMzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDkKQEAgLTAsMCArMSwyIEBACitUaGlzIGlzIHRvIGZpeCBkaWZmLWZvcm1hdCBkb2N1bWVudGF0aW9uLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTAgYi90L3Q1MTAwL21zZzAwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2YzIzMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMApAQCAtMCwwICsxLDUgQEAKKyJTdWJqZWN0OiAiIGlzbid0IGluIHRoZSBzdGF0aWMgYXJyYXkgImhlYWRlciIsIGFuZCB0aHVzCittZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgNykgd2lsbCBuZXZlciBtYXRjaC4KKworU2lnbmVkLW9mZi1ieTogTHVrYXMgU2FuZHN0csO2bSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTEgYi90L3Q1MTAwL21zZzAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2N2YyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMQpAQCAtMCwwICsxLDIgQEAKK0hlcmUgY29tZXMgYSBjb21taXQgbG9nIG1lc3NhZ2UsIGFuZAoraXRzIHNlY29uZCBsaW5lIGlzIGhlcmUuCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTIgYi90L3Q1MTAwL21zZzAwMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjMmJmNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMgpAQCAtMCwwICsxLDcgQEAKK3RleHRsaXZlLSog0LjRgdC/0YDQsNCy0LvQtdC90Ysg0L3QsCB0ZXhsaXZlLSoKK2RvY3V0aWxzINC30LDQvNC10L3RkdC9INC90LAgcHl0aG9uLWRvY3V0aWxzCisKK9CU0LXQudGB0YLQstC40YLQtdC70YzQvdC+LCDQvtC60LDQt9Cw0LvQvtGB0YwsINGH0YLQviByZXN0MndlYiDQstGL0YLRj9Cz0LjQstCw0LXRgiDQt9CwINGB0L7QsdC+0LkKK3B5dGhvbi1kb2N1dGlscy4g0JIg0YLQviDQstGA0LXQvNGPINC60LDQuiDRgdCw0LwgcmVzdDJ3ZWIg0L3QtSDQvdGD0LbQtdC9LgorCitTaWduZWQtb2ZmLWJ5OiBEbWl0cml5IEJsaW5vdiA8YmRhQG1uc3NwYi5ydT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxMi0tbWVzc2FnZS1pZCBiL3QvdDUxMDAvbXNnMDAxMi0tbWVzc2FnZS1pZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzZlMjZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDEyLS1tZXNzYWdlLWlkCkBAIC0wLDAgKzEsOCBAQAordGV4dGxpdmUtKiDQuNGB0L/RgNCw0LLQu9C10L3RiyDQvdCwIHRleGxpdmUtKgorZG9jdXRpbHMg0LfQsNC80LXQvdGR0L0g0L3QsCBweXRob24tZG9jdXRpbHMKKwor0JTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4sINC+0LrQsNC30LDQu9C+0YHRjCwg0YfRgtC+IHJlc3Qyd2ViINCy0YvRgtGP0LPQuNCy0LDQtdGCINC30LAg0YHQvtCx0L7QuQorcHl0aG9uLWRvY3V0aWxzLiDQkiDRgtC+INCy0YDQtdC80Y8g0LrQsNC6INGB0LDQvCByZXN0MndlYiDQvdC1INC90YPQttC10L0uCisKK1NpZ25lZC1vZmYtYnk6IERtaXRyaXkgQmxpbm92IDxiZGFAbW5zc3BiLnJ1PgorTWVzc2FnZS1JZDogPDEyMjY1MDE2ODEtMjQ5MjMtMS1naXQtc2VuZC1lbWFpbC1iZGFAbW5zc3BiLnJ1PgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDEzIGIvdC90NTEwMC9tc2cwMDEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTMKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNCBiL3QvdDUxMDAvbXNnMDAxNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU1Y2QyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE0CkBAIC0wLDAgKzEsMTggQEAKK0luIHJlYWwgbGlmZSwgd2Ugd2lsbCBzZWUgYSBkaXNjdXNzaW9uIHRoYXQgaW5zcGlyZWQgdGhpcyBwYXRjaAorZGlzY3Vzc2luZyByZWxhdGVkIGFuZCB1bnJlbGF0ZWQgdGhpbmdzIGFyb3VuZCA+OCBzY2lzc29ycyBtYXJrCitpbiB0aGlzIHBhcnQgb2YgdGhlIG1lc3NhZ2UuCisKK1N1YmplY3Q6IFtQQVRDSF0gQkxBSCBUV08KKworQW5kIHRoZW4gd2Ugd2lsbCBzZWUgdGhlIHNjaXNzb3JzLgorCisgVGhpcyBsaW5lIGlzIG5vdCBhIHNjaXNzb3JzIG1hcmsgLS0gPjggLS0gYnV0IHRhbGtzIGFib3V0IGl0LgorIC0gLSA+OCAtIC0gcGxlYXNlIHJlbW92ZSBldmVyeXRoaW5nIGFib3ZlIHRoaXMgbGluZSAtIC0gPjggLSAtCisKK1N1YmplY3Q6IFtQQVRDSF0gVGVhY2ggbWFpbGluZm8gdG8gaWdub3JlIGV2ZXJ5dGhpbmcgYmVmb3JlIC0tID44IC0tIG1hcmsKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKworVGhpcyB0ZWFjaGVzIG1haWxpbmZvIHRoZSBzY2lzc29ycyAtLSA+OCAtLSBtYXJrOyB0aGUgY29tbWFuZCBpZ25vcmVzCitldmVyeXRoaW5nIGJlZm9yZSBpdCBpbiB0aGUgbWVzc2FnZSBib2R5LgorCitTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTQtLXNjaXNzb3JzIGIvdC90NTEwMC9tc2cwMDE0LS1zY2lzc29ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTljNmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE0LS1zY2lzc29ycwpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVhY2hlcyBtYWlsaW5mbyB0aGUgc2Npc3NvcnMgLS0gPjggLS0gbWFyazsgdGhlIGNvbW1hbmQgaWdub3JlcworZXZlcnl0aGluZyBiZWZvcmUgaXQgaW4gdGhlIG1lc3NhZ2UgYm9keS4KKworU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE1IGIvdC90NTEwMC9tc2cwMDE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTUKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL21zZzAwMTUtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTExNWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTUtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsMyBAQAorRnJvbTogYm9nb3NpdHkKKyAgLSBhIGxpc3QKKyAgLSBvZiBzdHVmZgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE2IGIvdC90NTEwMC9tc2cwMDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOWFkYWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTYKQEAgLTAsMCArMSwyIEBACithbmQgc29tZSBjb250ZW50CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL21zZzAwMTYtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjNmNTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTYtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsNCBAQAorRGF0ZTogYm9ndXMKKworYW5kIHNvbWUgY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTcgYi90L3Q1MTAwL21zZzAwMTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlMDkwMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNwpAQCAtMCwwICsxLDIgQEAKK05ldyBjb250ZW50IGhlcmUKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE4IGIvdC90NTEwMC9tc2cwMDE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZGU4M2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTgKQEAgLTAsMCArMSwyIEBACithIGNvbW1pdCBtZXNzYWdlCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxOC0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL21zZzAwMTgtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTA1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTgtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsOCBAQAorRnJvbTogQW5vdGhlciBUaG9yCisgPGEudGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFRoaXMgb25lIGNvbnRhaW5zCisJYSB0YWIKKyBhbmQgYSBzcGFjZQorCithIGNvbW1pdCBtZXNzYWdlCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbnVsLWI2NC5leHBlY3QgYi90L3Q1MTAwL251bC1iNjQuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDY4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL251bC1iNjQuZXhwZWN0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbnVsLWI2NC5pbiBiL3QvdDUxMDAvbnVsLWI2NC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU0MGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9udWwtYjY0LmluCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNjY3ZDg5NDBlNzE5Y2RkZWUxY2ZlMjM3Y2JiZTIxNWUyMDI3MGIwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2Vjb25kCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworTFMwdENpQm1hV3hsSUh3Z0lFSnBiaUF4TXpVM0lDMCtJREV6TlRjZ1lubDBaWE1LSURFZ1ptbHNaWE1nWTJoaGJtZGxaQ3dnCitNQ0JwYm5ObGNuUnBiMjV6S0NzcExDQXdJR1JsYkdWMGFXOXVjeWd0S1FvS1pHbG1aaUF0TFdkcGRDQmhMMlpwYkdVZ1lpOW0KK2FXeGxDbWx1WkdWNElEYzNNell4WkRndUxqbGxNREppWlRZZ01UQXdOalEwQ2kwdExTQmhMMlpwYkdVS0t5c3JJR0l2Wm1scworWlFwQVFDQXRNU3d4TWlBck1Td3hNaUJBUUFvZ1RHOXlaVzBnYVhCemRXMGdaRzlzYjNJZ2MybDBJR0Z0WlhRc0lHTnZibk5sCitZM1JsZEhWbGNpQmhaR2x3YVhOamFXNW5JR1ZzYVhRdUlGTjFjM0JsYm1ScGMzTmxDaUJ6YVhRZ1lXMWxkQ0IwZFhKd2FYTWcKK1pXZGxkQ0JsYzNRZ1kzVnljM1Z6SUd4aGIzSmxaWFF1SUVGc2FYRjFZVzBnYldGMWNtbHpMaUJRY21GbGMyVnVkQW90ZG05cworZFhSd1lYUXVJRkJ5YjJsdUlHbHVJSEIxY25WekxpQk9kV3hzWVNCMWNtNWhJSE5oY0dsbGJpd2daR0Z3YVdKMWN5QnphWFFnCitZVzFsZEN3S0szWnZiSFYwY0dGMExpQlFjbTlwYmlCcGJpQndkWEoxY3k0Z1RuVnNiR0VnZFhKdVlTQnpZWEJwWlc0c0lHUmgKK2NHa0FkWE1nYzJsMElHRnRaWFFzQ2lCb1pXNWtjbVZ5YVhRZ2JtVmpMQ0IwWlcxd2RYTWdaWFVzSUcxcExpQlZkQ0J3YjNKMAorWVN3Z2JHVnZJR2xrSUhScGJtTnBaSFZ1ZENCMWJHeGhiV052Y25CbGNpd0tMWFpsYkdsMElHWmxiR2x6SUhSeWFYTjBhWEYxCitaU0JoYm5SbExDQmhkQ0JzYjJKdmNuUnBjeUJrYVdGdElIQmxaR1VnZFhRZ1pIVnBMaUJRY205cGJpQmhZd29yZG1Wc2FYUWcKK1ptVnNhWE1nZEhKcGMzUnBjWFZsSUdGdWRHVXNJR0YwSUd4dkFHOXlkR2x6SUdScFlXMGdjR1ZrWlNCMWRDQmtkV2t1SUZCeQorYjJsdUlHRmpDaUJzWldOMGRYTXVJRVJ2Ym1WaklHRjBJRzFoYzNOaElHRmpJR2x3YzNWdElHaGxibVJ5WlhKcGRDQnpiMnhzCithV05wZEhWa2FXNHVJRTVoYlNCa2FXTjBkVzBLSUc1cGMya2djMlZrSUcxcExpQkVkV2x6SUhObFpDQmhiblJsTGlCVmRDQjIKK2FYUmhaU0JsYzNRZ2RYUWdaSFZwSUhWc2RISnBZMmxsY3lCa2FXZHVhWE56YVcwdUNpQUtMVWx1SUhabGJDQnZaR2x2SUdWbgorWlhRZ2JtbHpiQ0JqYjI1MllXeHNhWE1nZG05c2RYUndZWFF1SUUxdmNtSnBJSFpwZEdGbElHNXBZbWd1SUU1MWJHeGhiUW9yCitTVzRnZG1Wc0lHOWthVzhnWldkbGRDQnVhWE5zSUdOdmJuWmhiR3hwY3lCMmIyeDFkSEJoZEM0Z1RXOXlBR2tnZG1sMFlXVWcKK2Jta0FhQzRnVG5Wc2JHRnRDaUJoWTJOMWJYTmhiaXdnWkc5c2IzSWdjWFZwY3lCaGJHbHhkV0Z0SUhOalpXeGxjbWx6Y1hWbAorTENCbGJHbDBJR1Z1YVcwZ1kyOXVaR2x0Wlc1MGRXMEtJRzFoZFhKcGN5d2dibTl1SUhSeWFYTjBhWEYxWlNCdFlYVnlhWE1nCitkSFZ5Y0dseklHVjBJRzFoZFhKcGN5NGdWWFFnYm05dUlHNXBjMnd1SUU1aGJTQmthV0Z0Q2lCdGFTd2djMlZ0Y0dWeUlIQnYKK2MzVmxjbVVzSUdWc1pXbG1aVzVrSUhWMExDQmhkV04wYjNJZ2RtVnNMQ0JsY21GMExpQlRaV1FnY0c5emRXVnlaUXBBUUNBdAorTVRZc055QXJNVFlzTnlCQVFDQnpaV1FnWlhOMExpQkZkR2xoYlNCa2FXRnRJR1psYkdsekxDQm1aWEp0Wlc1MGRXMGdaV2RsCitkQ3dnWVdScGNHbHpZMmx1WnlCaGRDd2djRzl6ZFdWeVpTQnBiaXdLSUdSMWFTNGdSWFJwWVcwZ2JIVmpkSFZ6TGdvZ0NpQk8KK2RXeHNZU0JwWkNCaGRXZDFaUzRnVG1GdElHbGhZM1ZzYVhNZ1lXTmpkVzF6WVc0Z2JtbHphUzRnVTNWemNHVnVaR2x6YzJVZworY0c5MFpXNTBhUzRnVG5WdVl3b3RkbUZ5YVhWeklHRjFaM1ZsSUc1bFl5QnZjbU5wTGlCVmRDQmpiMjVrYVcxbGJuUjFiU0JrCitiMnh2Y2lCellXZHBkSFJwY3lCdWFXSm9MaUJUZFhOd1pXNWthWE56WlFvcmRtRnlhWFZ6SUdGMVozVmxJRzVsWXlCdmNtTnAKK0xpQlZkQ0JqYjI1a2FXMWxiblIxYlNCa2IyeHZjaUJ6WVdkcGRIUnBjeUJ1YVFCb0xpQlRkWE53Wlc1a2FYTnpaUW9nZEdWdAorY0c5eUlHeGxZM1IxY3lCelpXUWdiV0ZuYm1FdUlGTjFjM0JsYm1ScGMzTmxJSEJ2ZEdWdWRHa3VJRTUxYkd4aGJTQjBaVzF3CitiM0lnYVhCemRXMHVJRk5sWkFvZ2JXOXNaWE4wYVdVZ2RHVnNiSFZ6TGlCUWFHRnpaV3hzZFhNZ2JHbG5kV3hoTGlCSmJpQjIKK1pXaHBZM1ZzWVNCMWJIUnlhV05sY3dvZ2JtbHphUzRnVTNWemNHVnVaR2x6YzJVZ1ptVnNhWE1nWVhWbmRXVXNJSEJsYkd4bAorYm5SbGMzRjFaU0JoZEN3Z1pHbGpkSFZ0SUhacGRtVnljbUVzQ2kwdElBb3hMalV1TlM0eExqVTBNQzVuTlRjM09EQUtDZz09CmRpZmYgLS1naXQgYS90L3Q1MTAwL251bC1wbGFpbiBiL3QvdDUxMDAvbnVsLXBsYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDA2OTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL251bC1wbGFpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMSBiL3QvdDUxMDAvcGF0Y2gwMDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMQpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMiBiL3QvdDUxMDAvcGF0Y2gwMDAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMgpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMyBiL3QvdDUxMDAvcGF0Y2gwMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMwpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwNCBiL3QvdDUxMDAvcGF0Y2gwMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NjQ1OGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwNApAQCAtMCwwICsxLDkzIEBACitkaWZmIC0tZ2l0IGEvY29ubmVjdC5jIGIvY29ubmVjdC5jCistLS0gYS9jb25uZWN0LmMKKysrKyBiL2Nvbm5lY3QuYworQEAgLTk2LDQyICs5Niw1NyBAQCBzdGF0aWMgZW51bSBwcm90b2NvbCBnZXRfcHJvdG9jb2woY29uc3QgCisgCWRpZSgiSSBkb24ndCBoYW5kbGUgcHJvdG9jb2wgJyVzJyIsIG5hbWUpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBsb29rdXBfaG9zdChjb25zdCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmluKQorLXsKKy0Jc3RydWN0IGFkZHJpbmZvICpyZXM7CistCWludCByZXQ7CistCistCXJldCA9IGdldGFkZHJpbmZvKGhvc3QsIE5VTEwsIE5VTEwsICZyZXMpOworLQlpZiAocmV0KQorLQkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgZ2FpX3N0cmVycm9yKHJldCkpOworLQkqaW4gPSAqcmVzLT5haV9hZGRyOworLQlmcmVlYWRkcmluZm8ocmVzKTsKKy19CisrI2RlZmluZSBTVFJfKHMpCSMgcworKyNkZWZpbmUgU1RSKHMpCVNUUl8ocykKKyAKKyBzdGF0aWMgaW50IGdpdF90Y3BfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnByb2csIGNoYXIgKmhvc3QsIGNoYXIgKnBhdGgpCisgeworLQlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKy0JaW50IHBvcnQgPSBERUZBVUxUX0dJVF9QT1JULCBzb2NrZmQ7CistCWNoYXIgKmNvbG9uOworLQorLQljb2xvbiA9IHN0cmNocihob3N0LCAnOicpOworLQlpZiAoY29sb24pIHsKKy0JCWNoYXIgKmVuZDsKKy0JCXVuc2lnbmVkIGxvbmcgbiA9IHN0cnRvdWwoY29sb24rMSwgJmVuZCwgMCk7CistCQlpZiAoY29sb25bMV0gJiYgISplbmQpIHsKKy0JCQkqY29sb24gPSAwOworLQkJCXBvcnQgPSBuOworKwlpbnQgc29ja2ZkID0gLTE7CisrCWNoYXIgKmNvbG9uLCAqZW5kOworKwljaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpOworKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKKysJaW50IGdhaTsKKysKKysJaWYgKGhvc3RbMF0gPT0gJ1snKSB7CisrCQllbmQgPSBzdHJjaHIoaG9zdCArIDEsICddJyk7CisrCQlpZiAoZW5kKSB7CisrCQkJKmVuZCA9IDA7CisrCQkJZW5kKys7CisrCQkJaG9zdCsrOworKwkJfSBlbHNlCisrCQkJZW5kID0gaG9zdDsKKysJfSBlbHNlCisrCQllbmQgPSBob3N0OworKwljb2xvbiA9IHN0cmNocihlbmQsICc6Jyk7CisrCisrCWlmIChjb2xvbikKKysJCXBvcnQgPSBjb2xvbiArIDE7CisrCisrCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworKworKwlnYWkgPSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZhaSk7CisrCWlmIChnYWkpCisrCQlkaWUoIlVuYWJsZSB0byBsb29rIHVwICVzICglcykiLCBob3N0LCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisrCisrCWZvciAoYWkwID0gYWk7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisrCQlzb2NrZmQgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworKwkJaWYgKHNvY2tmZCA8IDApCisrCQkJY29udGludWU7CisrCQlpZiAoY29ubmVjdChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSB7CisrCQkJY2xvc2Uoc29ja2ZkKTsKKysJCQlzb2NrZmQgPSAtMTsKKysJCQljb250aW51ZTsKKyAJCX0KKysJCWJyZWFrOworIAl9CisgCistCWxvb2t1cF9ob3N0KGhvc3QsICZhZGRyKTsKKy0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYWRkciktPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisrCWZyZWVhZGRyaW5mbyhhaTApOworIAorLQlzb2NrZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fSVApOworIAlpZiAoc29ja2ZkIDwgMCkKKyAJCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSBzb2NrZXQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CistCWlmIChjb25uZWN0KHNvY2tmZCwgKHZvaWQgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA8IDApCistCQlkaWUoInVuYWJsZSB0byBjb25uZWN0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworKworIAlmZFswXSA9IHNvY2tmZDsKKyAJZmRbMV0gPSBzb2NrZmQ7CisgCXBhY2tldF93cml0ZShzb2NrZmQsICIlcyAlc1xuIiwgcHJvZywgcGF0aCk7CisKKy0tIAorWU9TSElGVUpJIEhpZGVha2kgQCBVU0FHSSBQcm9qZWN0ICA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitHUEctRlAgIDogOTAyMiA2NUVCIDFFQ0YgM0FEMSAwQkRGICA4MEQ4IDQ4MDcgRjg5NCBFMDYyIDBFRUEKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDUgYi90L3Q1MTAwL3BhdGNoMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjdhMzgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDUKQEAgLTAsMCArMSw2OSBAQAorLS0tCisKKyBEb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCB8IDkgKysrKysrKystCisgZ2l0LWN2c2ltcG9ydC1zY3JpcHQgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKzUwNDUyZjljMGMyZGYxZjA0ZDgzYTI2MjY2YmE3MDRiMTM4NjE2MzIKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC1zY3JpcHQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQKK0BAIC0yOSw2ICsyOSwxMCBAQCBPUFRJT05TCisgCWN1cnJlbnRseSwgb25seSB0aGUgOmxvY2FsOiwgOmV4dDogYW5kIDpwc2VydmVyOiBhY2Nlc3MgbWV0aG9kcyAKKyAJYXJlIHN1cHBvcnRlZC4KKyAKKystQyA8dGFyZ2V0LWRpcj46OgorKyAgICAgICAgVGhlIEdJVCByZXBvc2l0b3J5IHRvIGltcG9ydCB0by4gIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndAorKyAgICAgICAgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4gIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorKworIC1pOjoKKyAJSW1wb3J0LW9ubHk6IGRvbid0IHBlcmZvcm0gYSBjaGVja291dCBhZnRlciBpbXBvcnRpbmcuICBUaGlzIG9wdGlvbgorIAllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgY2FjaGUgcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorQEAgLTQ0LDcgKzQ4LDcgQEAgT1BUSU9OUworIAorIC1wIDxvcHRpb25zLWZvci1jdnNwcz46OgorIAlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorLQlUaGUgb3B0aW9ucyAnLXgnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisrCVRoZSBvcHRpb25zICctdScgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKyAKKyAJSWYgeW91IG5lZWQgdG8gcGFzcyBtdWx0aXBsZSBvcHRpb25zLCBzZXBhcmF0ZSB0aGVtIHdpdGggYSBjb21tYS4KKyAKK0BAIC01Nyw2ICs2MSw5IEBAIE9QVElPTlMKKyAtaDo6CisgCVByaW50IGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KKyAKKysteiA8ZnV6ej46OgorKyAgICAgICAgUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLgorKworIE9VVFBVVAorIC0tLS0tLQorIElmICctdicgaXMgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHJlcG9ydHMgd2hhdCBpdCBpcyBkb2luZy4KK2RpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LXNjcmlwdCBiL2dpdC1jdnNpbXBvcnQtc2NyaXB0CistLS0gYS9naXQtY3ZzaW1wb3J0LXNjcmlwdAorKysrIGIvZ2l0LWN2c2ltcG9ydC1zY3JpcHQKK0BAIC0xOTAsNyArMTkwLDcgQEAgc3ViIGNvbm4geworIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJSb290ICRyZXBvXG4iKTsKKyAKKyAJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGF0IHRoaXMgcHJvYmFibHkgaXMgdGhlIG1pbmltdW0gc2V0CistCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlZhbGlkLXJlc3BvbnNlcyBvayBlcnJvciBWYWxpZC1yZXF1ZXN0cyBNb2RlIE0gTWJpbmFyeSBFIEYgQ2hlY2tlZC1pbiBDcmVhdGVkIFVwZGF0ZWQgTWVyZ2VkIFJlbW92ZWRcbiIpOworKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJWYWxpZC1yZXNwb25zZXMgb2sgZXJyb3IgVmFsaWQtcmVxdWVzdHMgTW9kZSBNIE1iaW5hcnkgRSBDaGVja2VkLWluIENyZWF0ZWQgVXBkYXRlZCBNZXJnZWQgUmVtb3ZlZFxuIik7CisgCisgCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoInZhbGlkLXJlcXVlc3RzXG4iKTsKKyAJJHNlbGYtPnsnc29ja2V0byd9LT5mbHVzaCgpOworQEAgLTY5MSw3ICs2OTEsNyBAQCB3aGlsZSg8Q1ZTPikgeworIAkJdW5saW5rKCR0bXBuYW1lKTsKKyAJCW15ICRtb2RlID0gcG1vZGUoJGN2cy0+eydtb2RlJ30pOworIAkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorLQl9IGVsc2lmKCRzdGF0ZSA9PSA5IGFuZCAvXlxzKyhcUyspOlxkKD86XC5cZCspKy0+KFxkKD86XC5cZCspKylcKERFQURcKVxzKiQvKSB7CisrCX0gZWxzaWYoJHN0YXRlID09IDkgYW5kIC9eXHMrKFxTKyk6XGQrKD86XC5cZCspKy0+KFxkKyg/OlwuXGQrKSspXChERUFEXClccyokLykgeworIAkJbXkgJGZuID0gJDE7CisgCQkkZm4gPX4gcyNeLysjIzsKKyAJCXB1c2goQG9sZCwkZm4pOworCistLSAKK0RhdmlkIEvlZ2VkYWwKKy0KK1RvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBnaXQiIGluCit0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZworTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDA2IGIvdC90NTEwMC9wYXRjaDAwMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjOTc3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDA2CkBAIC0wLDAgKzEsMTQgQEAKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDA3IGIvdC90NTEwMC9wYXRjaDAwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDA3CmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwOCBiL3QvdDUxMDAvcGF0Y2gwMDA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwOApkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDkgYi90L3Q1MTAwL3BhdGNoMDAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTYxNWMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDkKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK2luZGV4IGI0MjZhMTQuLjk3NzU2ZWMgMTAwNjQ0CistLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK0BAIC04MSw3ICs4MSw3IEBAIFRoZSAiZGlmZiIgZm9ybWF0dGluZyBvcHRpb25zIGNhbiBiZSBjdXN0b21pemVkIHZpYSB0aGUKKyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0RJRkZfT1BUUycuICBGb3IgZXhhbXBsZSwgaWYgeW91CisgcHJlZmVyIGNvbnRleHQgZGlmZjoKKyAKKy0gICAgICBHSVRfRElGRl9PUFRTPS1jIGdpdC1kaWZmLWluZGV4IC1wICQoY2F0IC5naXQvSEVBRCkKKysgICAgICBHSVRfRElGRl9PUFRTPS1jIGdpdC1kaWZmLWluZGV4IC1wIEhFQUQKKyAKKyAKKyAyLiBXaGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0VYVEVSTkFMX0RJRkYnIGlzIHNldCwgdGhlCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxMCBiL3QvdDUxMDAvcGF0Y2gwMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNjgyMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxMApAQCAtMCwwICsxLDIwIEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IDk2MmFhMzQuLjJkMTUyMGYgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlYWRlcihjaGFyICpsaW5lLCB1bnNpZ25lZCBsaW5lc2l6ZSwgY2hhciAqKmhkcl9kYXRhLCBpbnQgb3ZlcgorIAkJcmV0dXJuIDE7CisgCWlmICghbWVtY21wKCJbUEFUQ0hdIiwgbGluZSwgNykgJiYgaXNzcGFjZShsaW5lWzddKSkgeworIAkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKy0JCQlpZiAoIW1lbWNtcCgiU3ViamVjdDogIiwgaGVhZGVyW2ldLCA5KSkgeworKwkJCWlmICghbWVtY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldLCA3KSkgeworIAkJCQlpZiAoISBoYW5kbGVfaGVhZGVyKGxpbmUsIGhkcl9kYXRhW2ldLCAwKSkgeworIAkJCQkJcmV0dXJuIDE7CisgCQkJCX0KKy0tIAorMS41LjYuMi40NTUuZzFlZmIyCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDExIGIvdC90NTEwMC9wYXRjaDAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4ODcxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDExCkBAIC0wLDAgKzEsMjIgQEAKKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyAgfCA0ICsrLS0KKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggM2U1ZmU1MS4uYWFiZmU1YyAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzU4LDggKzc1OCw4IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHZvaWQpCisgCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLworIAkJaWYgKCpjb250ZW50X3RvcCAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkoJmxpbmUpKSB7CisgCQkJLyogZmx1c2ggYW55IGxlZnRvdmVyICovCistCQkJaWYgKGxpbmUubGVuKQorLQkJCQloYW5kbGVfZmlsdGVyKCZsaW5lKTsKKysJCQlpZiAocHJldi5sZW4pCisrCQkJCWhhbmRsZV9maWx0ZXIoJnByZXYpOworIAorIAkJCWlmICghaGFuZGxlX2JvdW5kYXJ5KCkpCisgCQkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworLS0gCisxLjYuMC5yYzIKKworCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxMiBiL3QvdDUxMDAvcGF0Y2gwMDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YTBiNjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxMgpAQCAtMCwwICsxLDMwIEBACistLS0KKyBob3d0by9idWlsZF9uYXZ5LnR4dCB8ICAgIDYgKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ob3d0by9idWlsZF9uYXZ5LnR4dCBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitpbmRleCAzZmQzYWZiLi4wZWU4MDdlIDEwMDY0NAorLS0tIGEvaG93dG8vYnVpbGRfbmF2eS50eHQKKysrKyBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitAQCAtMTE5LDggKzExOSw4IEBACisgICAgLSBsaWJ4di1kZXYKKyAgICAtIGxpYnVzcGxhc2gtZGV2CisgICAgLSBsYXRleC1tYWtlCistICAgLSB0ZXh0bGl2ZS1sYW5nLWN5cmlsbGljCistICAgLSB0ZXh0bGl2ZS1sYXRleC1leHRyYQorKyAgIC0gdGV4bGl2ZS1sYW5nLWN5cmlsbGljCisrICAgLSB0ZXhsaXZlLWxhdGV4LWV4dHJhCisgICAgLSBkaWEKKyAgICAtIHB5dGhvbi1weXJleAorICAgIC0gbGlidG9vbAorQEAgLTEyOCw3ICsxMjgsNyBAQAorICAgIC0gc294CisgICAgLSBjeXRob24KKyAgICAtIGltYWdlbWFnaWNrCistICAgLSBkb2N1dGlscworKyAgIC0gcHl0aG9uLWRvY3V0aWxzCisgCisgIy4g0L3QsCDQvNCw0YjQuNC90LUgZGluYXI6INC00L7QsdCw0LLQuNGC0Ywg0YHQstC+0Lkg0L7RgtC60YDRi9GC0YvQuSBzc2gt0LrQu9GO0Ycg0LIgYXV0aG9yaXplZF9rZXlzMiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gZGRldgorICMuINC90LAg0YHQstC+0LXQuSDQvNCw0YjQuNC90LU6INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCAvZXRjL3N1ZG9lcnMgKNC60L7QvNCw0L3QtNCwIGBgdmlzdWRvYGApINC/0YDQuNC80LXRgNC90L4g0YHQu9C10LTRg9GO0YnQuNC8INC+0LHRgNCw0LfQvtC8OjoKKy0tIAorMS41LjYuNQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTItLW1lc3NhZ2UtaWQgYi90L3Q1MTAwL3BhdGNoMDAxMi0tbWVzc2FnZS1pZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmEwYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTItLW1lc3NhZ2UtaWQKQEAgLTAsMCArMSwzMCBAQAorLS0tCisgaG93dG8vYnVpbGRfbmF2eS50eHQgfCAgICA2ICsrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaG93dG8vYnVpbGRfbmF2eS50eHQgYi9ob3d0by9idWlsZF9uYXZ5LnR4dAoraW5kZXggM2ZkM2FmYi4uMGVlODA3ZSAxMDA2NDQKKy0tLSBhL2hvd3RvL2J1aWxkX25hdnkudHh0CisrKysgYi9ob3d0by9idWlsZF9uYXZ5LnR4dAorQEAgLTExOSw4ICsxMTksOCBAQAorICAgIC0gbGlieHYtZGV2CisgICAgLSBsaWJ1c3BsYXNoLWRldgorICAgIC0gbGF0ZXgtbWFrZQorLSAgIC0gdGV4dGxpdmUtbGFuZy1jeXJpbGxpYworLSAgIC0gdGV4dGxpdmUtbGF0ZXgtZXh0cmEKKysgICAtIHRleGxpdmUtbGFuZy1jeXJpbGxpYworKyAgIC0gdGV4bGl2ZS1sYXRleC1leHRyYQorICAgIC0gZGlhCisgICAgLSBweXRob24tcHlyZXgKKyAgICAtIGxpYnRvb2wKK0BAIC0xMjgsNyArMTI4LDcgQEAKKyAgICAtIHNveAorICAgIC0gY3l0aG9uCisgICAgLSBpbWFnZW1hZ2ljaworLSAgIC0gZG9jdXRpbHMKKysgICAtIHB5dGhvbi1kb2N1dGlscworIAorICMuINC90LAg0LzQsNGI0LjQvdC1IGRpbmFyOiDQtNC+0LHQsNCy0LjRgtGMINGB0LLQvtC5INC+0YLQutGA0YvRgtGL0Lkgc3NoLdC60LvRjtGHINCyIGF1dGhvcml6ZWRfa2V5czIg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIGRkZXYKKyAjLiDQvdCwINGB0LLQvtC10Lkg0LzQsNGI0LjQvdC1OiDQvtGC0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwgL2V0Yy9zdWRvZXJzICjQutC+0LzQsNC90LTQsCBgYHZpc3Vkb2BgKSDQv9GA0LjQvNC10YDQvdC+INGB0LvQtdC00YPRjtGJ0LjQvCDQvtCx0YDQsNC30L7QvDo6CistLSAKKzEuNS42LjUKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDEzIGIvdC90NTEwMC9wYXRjaDAwMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDEzCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNCBiL3QvdDUxMDAvcGF0Y2gwMDE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzgyNWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNApAQCAtMCwwICsxLDY0IEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCBiMGI1ZDhmLi40NjFjNDdlIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC03MTIsNiArNzEyLDM0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhdGNoYnJlYWsoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBpbnQgc2Npc3NvcnMoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyt7CisrCXNpemVfdCBpLCBsZW4gPSBsaW5lLT5sZW47CisrCWludCBzY2lzc29yc19kYXNoZXNfc2VlbiA9IDA7CisrCWNvbnN0IGNoYXIgKmJ1ZiA9IGxpbmUtPmJ1ZjsKKysKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisrCQlpZiAoaXNzcGFjZShidWZbaV0pKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGJ1ZltpXSA9PSAnLScpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMjsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgMSA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICI+OCIsIDIpKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDE7CisrCQkJaSsrOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyA3IDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgImN1dCBoZXJlIiwgOCkpIHsKKysJCQlpICs9IDc7CisrCQkJY29udGludWU7CisrCQl9CisrCQkvKiBldmVyeXRoaW5nIGVsc2UgLS0tIG5vdCBzY2lzc29ycyAqLworKwkJYnJlYWs7CisrCX0KKysJcmV0dXJuIHNjaXNzb3JzX2Rhc2hlc19zZWVuID09IDAzOworK30KKysKKyBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgeworIAlzdGF0aWMgaW50IHN0aWxsX2xvb2tpbmcgPSAxOworQEAgLTcyMywxMCArNzUxLDE3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJCXN0cmJ1Zl9sdHJpbShsaW5lKTsKKyAJCWlmICghbGluZS0+bGVuKQorIAkJCXJldHVybiAwOworLQkJaWYgKChzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApKSAhPSAwKQorKwkJc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKTsKKysJCWlmIChzdGlsbF9sb29raW5nKQorIAkJCXJldHVybiAwOworIAl9CisgCisrCWlmIChzY2lzc29ycyhsaW5lKSkgeworKwkJZnNlZWsoY21pdG1zZywgMEwsIFNFRUtfU0VUKTsKKysJCXN0aWxsX2xvb2tpbmcgPSAxOworKwkJcmV0dXJuIDA7CisrCX0KKysKKyAJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KKyAJaWYgKG1ldGFpbmZvX2NoYXJzZXQpCisgCQljb252ZXJ0X3RvX3V0ZjgobGluZSwgY2hhcnNldC5idWYpOworLS0gCisxLjYuNC4xCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNC0tc2Npc3NvcnMgYi90L3Q1MTAwL3BhdGNoMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzODI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE0LS1zY2lzc29ycwpAQCAtMCwwICsxLDY0IEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCBiMGI1ZDhmLi40NjFjNDdlIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC03MTIsNiArNzEyLDM0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhdGNoYnJlYWsoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBpbnQgc2Npc3NvcnMoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyt7CisrCXNpemVfdCBpLCBsZW4gPSBsaW5lLT5sZW47CisrCWludCBzY2lzc29yc19kYXNoZXNfc2VlbiA9IDA7CisrCWNvbnN0IGNoYXIgKmJ1ZiA9IGxpbmUtPmJ1ZjsKKysKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisrCQlpZiAoaXNzcGFjZShidWZbaV0pKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGJ1ZltpXSA9PSAnLScpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMjsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgMSA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICI+OCIsIDIpKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDE7CisrCQkJaSsrOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyA3IDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgImN1dCBoZXJlIiwgOCkpIHsKKysJCQlpICs9IDc7CisrCQkJY29udGludWU7CisrCQl9CisrCQkvKiBldmVyeXRoaW5nIGVsc2UgLS0tIG5vdCBzY2lzc29ycyAqLworKwkJYnJlYWs7CisrCX0KKysJcmV0dXJuIHNjaXNzb3JzX2Rhc2hlc19zZWVuID09IDAzOworK30KKysKKyBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgeworIAlzdGF0aWMgaW50IHN0aWxsX2xvb2tpbmcgPSAxOworQEAgLTcyMywxMCArNzUxLDE3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJCXN0cmJ1Zl9sdHJpbShsaW5lKTsKKyAJCWlmICghbGluZS0+bGVuKQorIAkJCXJldHVybiAwOworLQkJaWYgKChzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApKSAhPSAwKQorKwkJc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKTsKKysJCWlmIChzdGlsbF9sb29raW5nKQorIAkJCXJldHVybiAwOworIAl9CisgCisrCWlmIChzY2lzc29ycyhsaW5lKSkgeworKwkJZnNlZWsoY21pdG1zZywgMEwsIFNFRUtfU0VUKTsKKysJCXN0aWxsX2xvb2tpbmcgPSAxOworKwkJcmV0dXJuIDA7CisrCX0KKysKKyAJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KKyAJaWYgKG1ldGFpbmZvX2NoYXJzZXQpCisgCQljb252ZXJ0X3RvX3V0ZjgobGluZSwgY2hhcnNldC5idWYpOworLS0gCisxLjYuNC4xCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNSBiL3QvdDUxMDAvcGF0Y2gwMDE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjQ4NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNQpAQCAtMCwwICsxLDggQEAKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL3BhdGNoMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDggQEAKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNiBiL3QvdDUxMDAvcGF0Y2gwMDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjQ4NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNgpAQCAtMCwwICsxLDggQEAKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL3BhdGNoMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE2LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDggQEAKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNyBiL3QvdDUxMDAvcGF0Y2gwMDE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Y2Y4NGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNwpAQCAtMCwwICsxLDYgQEAKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK05ldyBjb250ZW50CmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxOCBiL3QvdDUxMDAvcGF0Y2gwMDE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OWRmNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxOApAQCAtMCwwICsxLDYgQEAKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDE4LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvcGF0Y2gwMDE4LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODlkZjZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTgtLW5vLWluYm9keS1oZWFkZXJzCkBAIC0wLDAgKzEsNiBAQAorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudApkaWZmIC0tZ2l0IGEvdC90NTEwMC9xdW90ZWQtZnJvbS5leHBlY3QgYi90L3Q1MTAwL3F1b3RlZC1mcm9tLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzlkNDhjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9xdW90ZWQtZnJvbS5leHBlY3QKQEAgLTAsMCArMSwzIEBACis+RnJvbSB0aGUgZGVwdGhzIG9mIGhpc3RvcnksIHdlIGFyZSBzdHVjayB3aXRoIHRoZQorZmxha3kgbWJveCBmb3JtYXQuCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcXVvdGVkLWZyb20uaW4gYi90L3Q1MTAwL3F1b3RlZC1mcm9tLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0N2UxYzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3F1b3RlZC1mcm9tLmluCkBAIC0wLDAgKzEsMTAgQEAKK0Zyb20gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF1dGhvciBOYW1lIDxzb21lYm9keUBleGFtcGxlLmNvbT4KK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdGluZyBxdW90ZWQgPkZyb20KKworPkZyb20gdGhlIGRlcHRocyBvZiBoaXN0b3J5LCB3ZSBhcmUgc3R1Y2sgd2l0aCB0aGUKK2ZsYWt5IG1ib3ggZm9ybWF0LgorCistLS0KK3BhdGNoCmRpZmYgLS1naXQgYS90L3Q1MTAwL3F1b3RlZC1zdHJpbmcuZXhwZWN0IGIvdC90NTEwMC9xdW90ZWQtc3RyaW5nLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIxYmNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9xdW90ZWQtc3RyaW5nLmV4cGVjdApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQXV0aG9yICJUaGUgQXV0aG9yIiBOYW1lCitFbWFpbDogc29tZWJvZHlAZXhhbXBsZS5jb20KK1N1YmplY3Q6IHRlc3RpbmcgcXVvdGVkLXBhaXIKK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9xdW90ZWQtc3RyaW5nLmluIGIvdC90NTEwMC9xdW90ZWQtc3RyaW5nLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZTYyN2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3F1b3RlZC1zdHJpbmcuaW4KQEAgLTAsMCArMSw5IEBACitGcm9tIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiQXV0aG9yIFwiVGhlIEF1dGhvclwiIE5hbWUiIDxzb21lYm9keUBleGFtcGxlLmNvbT4KK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGVzdGluZyBxdW90ZWQtcGFpcgorCisKKworLS0tCitwYXRjaApkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMSBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzODNiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDEKQEAgLTAsMCArMSw0IEBACitBdXRob3I6IEtlaXRoIE1vb3JlCitFbWFpbDogbW9vcmVAY3MudXRrLmVkdQorU3ViamVjdDogSWYgeW91IGNhbiByZWFkIHRoaXMgeW91IHVuZGVyc3RhbmQgdGhlIGV4YW1wbGUuCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDIgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MWJlNzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAyCkBAIC0wLDAgKzEsNCBAQAorQXV0aG9yOiBPbGxlIErDpHJuZWZvcnMKK0VtYWlsOiBvamFybmVmQGFkbWluLmt0aC5zZQorU3ViamVjdDogVGltZSBmb3IgSVNPIDEwNjQ2PworCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAzIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY3ODkxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMwpAQCAtMCwwICsxLDQgQEAKK0F1dGhvcjogUGF0cmlrIEbDpGx0c3Ryw7ZtCitFbWFpbDogcGFmQG5hZGEua3RoLnNlCitTdWJqZWN0OiBSRkMtSERSIGNhcmUgYW5kIGZlZWRpbmcKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNCBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3YTkwYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDQKQEAgLTAsMCArMSw0IEBACitBdXRob3I6IE5hdGhhbmllbCBCb3JlbnN0ZWluICjXndeV15zXqSDXn9eRINeZ15zXmNek16ApCitFbWFpbDogbnNiQHRodW1wZXIuYmVsbGNvcmUuY29tCitTdWJqZWN0OiBUZXN0IG9mIG5ldyBoZWFkZXIgZ2VuZXJhdG9yCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDUgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyN2JlM2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA1CkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGEpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDYgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWQ0NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA2CkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGEgYikKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0ZjE5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDcKQEAgLTAsMCArMSwyIEBACitTdWJqZWN0OiAoYWIpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDggYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGYxOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA4CkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGFiKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA5IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRmMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOQpAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhYikKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAxMCBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhZDQ3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTAKQEAgLTAsMCArMSwyIEBACitTdWJqZWN0OiAoYSBiKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDExIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFkNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAxMQpAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhIGIpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1zYW1wbGVzLm1ib3ggYi90L3Q1MTAwL3JmYzIwNDctc2FtcGxlcy5tYm94Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzIyNDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctc2FtcGxlcy5tYm94CkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VUy1BU0NJST9RP0tlaXRoX01vb3JlPz0gPG1vb3JlQGNzLnV0ay5lZHU+CitUbzogPT9JU084ODU5LTE/UT9LZWxkX0o9Rjhybl9TaW1vbnNlbj89IDxrZWxkQGRrdXVnLmRrPgorQ0M6ID0/SVNPODg1OS0xP1E/QW5kcj1FOT89IFBpcmFyZCA8UElSQVJEQHZtMS51bGcuYWMuYmU+CitTdWJqZWN0OiA9P0lTTzg4NTktMT9CP1NXWWdlVzkxSUdOaGJpQnlaV0ZrSUhSb2FYTWdlVzg9Pz0KKyA9P0lTTzg4NTktMj9CP2RTQjFibVJsY25OMFlXNWtJSFJvWlNCbGVHRnRjR3hsTGc9PT89CisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9JU084ODU5LTE/UT9PbGxlX0o9RTRybmVmb3JzPz0gPG9qYXJuZWZAYWRtaW4ua3RoLnNlPgorVG86IGlldGYtODIyQGRpbWFjcy5ydXRnZXJzLmVkdSwgb2phcm5lZkBhZG1pbi5rdGguc2UKK1N1YmplY3Q6IFRpbWUgZm9yIElTTyAxMDY0Nj8KKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitUbzogRGF2ZSBDcm9ja2VyIDxkY3JvY2tlckBtb3Jkb3Iuc3RhbmZvcmQuZWR1PgorQ2M6IGlldGYtODIyQGRpbWFjcy5ydXRnZXJzLmVkdSwgcGFmQGNvbXNvbC5zZQorRnJvbTogPT9JU084ODU5LTE/UT9QYXRyaWtfRj1FNGx0c3RyPUY2bT89IDxwYWZAbmFkYS5rdGguc2U+CitTdWJqZWN0OiBSZTogUkZDLUhEUiBjYXJlIGFuZCBmZWVkaW5nCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmF0aGFuaWVsIEJvcmVuc3RlaW4gPG5zYkB0aHVtcGVyLmJlbGxjb3JlLmNvbT4KKyAgICAgICg9P0lTTzg4NTktOD9iPzdlWHMrU0R2NFNEcDdPajA4QT09Pz0pCitUbzogR3JlZyBWYXVkcmV1aWwgPGd2YXVkcmVATlJJLlJlc3Rvbi5WQS5VUz4sIE5lZCBGcmVlZAorICAgPG5lZEBpbm5vc29mdC5jb20+LCBLZWl0aCBNb29yZSA8bW9vcmVAY3MudXRrLmVkdT4KK1N1YmplY3Q6IFRlc3Qgb2YgbmV3IGhlYWRlciBnZW5lcmF0b3IKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YT89KQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSBiKQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSA9P0lTTzg4NTktMT9RP2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gID0/SVNPODg1OS0xP1E/Yj89KQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PQorICAgID0/SVNPODg1OS0xP1E/Yj89KQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2FfYj89KQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSA9P0lTTzg4NTktMj9RP19iPz0pCmRpZmYgLS1naXQgYS90L3Q1MTAwL3NhbXBsZS5tYm94IGIvdC90NTEwMC9zYW1wbGUubWJveApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDRkMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9zYW1wbGUubWJveApAQCAtMCwwICsxLDcyMCBAQAorICAgIAorCQorICAgIAorRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBICh6enopCisgICAgICBVCisgICAgICBUaG9yCisgICAgICA8YS51LnRob3JAZXhhbXBsZS5jb20+IChDb21tZW50KQorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGEgY29tbWl0LgorCitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4KKworLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYW5vdGhlciBwYXRjaAorCitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4gIFRoaXMgYWRkcmVzc2VzIHRoZSBpc3N1ZSByYWlzZWQgaW4gdGhlCittZXNzYWdlOgorCitGcm9tOiBOaXQgUGlja2VyIDxuaXQucGlja2VyQGV4YW1wbGUubmV0PgorU3ViamVjdDogZm9vIGlzIHRvbyBvbGQKK01lc3NhZ2UtSWQ6IDxuaXRwaWNrZXIuMTIxMjEyMTJAZXhhbXBsZS5uZXQ+CisKK0hvcGVmdWxseSB0aGlzIHdvdWxkIGZpeCB0aGUgcHJvYmxlbSBzdGF0ZWQgdGhlcmUuCisKKworSSBoYXZlIGluY2x1ZGVkIGFuIGV4dHJhIGJsYW5rIGxpbmUgYWJvdmUsIGJ1dCBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlCitzdHJpcHBlZCBhd2F5IGhlcmUsIGFsb25nIHdpdGggdGhlICAgICAgICAgICAgICAgCQkgICAKK3doaXRlc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIGFib3ZlIGxpbmUuICBUaGV5IGFyZSBleHBlY3RlZCB0byBiZSBzcXVhc2hlZAord2hlbiB0aGUgbWVzc2FnZSBpcyBtYWRlIGludG8gYSBjb21taXQgbG9nIGJ5IHN0cmlwc3BhY2UsCitBbHNvLCB0aGVyZSBhcmUgdGhyZWUgYmxhbmsgbGluZXMgYWZ0ZXIgdGhpcyBwYXJhZ3JhcGgsCit0d28gdHJ1bHkgYmxhbmsgYW5kIGFub3RoZXIgZnVsbCBvZiBzcGFjZXMgaW4gYmV0d2Vlbi4KKworICAgICAgICAgICAgCisKK0hvcGUgdGhpcyBoZWxwcy4KKworLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8anVuaW9Aa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogcmU6IFtQQVRDSF0gYW5vdGhlciBwYXRjaAorCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0hdIHRoaXJkIHBhdGNoCisKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLiAgVGhpcyBhZGRyZXNzZXMgdGhlIGlzc3VlIHJhaXNlZCBpbiB0aGUKK21lc3NhZ2U6CisKK0Zyb206IE5pdCBQaWNrZXIgPG5pdC5waWNrZXJAZXhhbXBsZS5uZXQ+CitTdWJqZWN0OiBmb28gaXMgdG9vIG9sZAorTWVzc2FnZS1JZDogPG5pdHBpY2tlci4xMjEyMTIxMkBleGFtcGxlLm5ldD4KKworSG9wZWZ1bGx5IHRoaXMgd291bGQgZml4IHRoZSBwcm9ibGVtIHN0YXRlZCB0aGVyZS4KKworLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKworRnJvbSBub2JvZHkgU2F0IEF1ZyAyNyAyMzowNzo0OSAyMDA1CitQYXRoOiBuZXdzLmdtYW5lLm9yZyFub3QtZm9yLW1haWwKK01lc3NhZ2UtSUQ6IDwyMDA1MDcyMS4wOTEwMzYuMDExMTk1MTYueW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitGcm9tOiBZT1NISUZVSkkgSGlkZWFraSAvID0/SVNPLTIwMjItSlA/Qj9HeVJDTlVoR0l6RlJURUFiS0VJPT89IAorCTx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KK05ld3Nncm91cHM6IGdtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdAorU3ViamVjdDogW1BBVENIIDEvMl0gR0lUOiBUcnkgYWxsIGFkZHJlc3NlcyBmb3IgZ2l2ZW4gcmVtb3RlIG5hbWUKK0RhdGU6IFRodSwgMjEgSnVsIDIwMDUgMDk6MTA6MzYgLTA0MDAgKEVEVCkKK0xpbmVzOiA5OQorT3JnYW5pemF0aW9uOiBVU0FHSS9XSURFIFByb2plY3QKK0FwcHJvdmVkOiBuZXdzQGdtYW5lLm9yZworTk5UUC1Qb3N0aW5nLUhvc3Q6IG1haW4uZ21hbmUub3JnCitNaW1lLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBUZXh0L1BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitYLVRyYWNlOiBzZWEuZ21hbmUub3JnIDExMjE5NTE0MzQgMjkzNTAgODAuOTEuMjI5LjIgKDIxIEp1bCAyMDA1IDEzOjEwOjM0IEdNVCkKK1gtQ29tcGxhaW50cy1UbzogdXNlbmV0QHNlYS5nbWFuZS5vcmcKK05OVFAtUG9zdGluZy1EYXRlOiBUaHUsIDIxIEp1bCAyMDA1IDEzOjEwOjM0ICswMDAwIChVVEMpCisKK0hlbGxvLgorCitUcnkgYWxsIGFkZHJlc3NlcyBmb3IgZ2l2ZW4gcmVtb3RlIG5hbWUgdW50aWwgaXQgc3VjY2VlZHMuCitBbHNvIHN1cHBvcnRzIElQdjYuCisKK1NpZ25lZC1vZi1ieTogSGlkZWFraSBZT1NISUZVSkkgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorCitkaWZmIC0tZ2l0IGEvY29ubmVjdC5jIGIvY29ubmVjdC5jCistLS0gYS9jb25uZWN0LmMKKysrKyBiL2Nvbm5lY3QuYworQEAgLTk2LDQyICs5Niw1NyBAQCBzdGF0aWMgZW51bSBwcm90b2NvbCBnZXRfcHJvdG9jb2woY29uc3QgCisgCWRpZSgiSSBkb24ndCBoYW5kbGUgcHJvdG9jb2wgJyVzJyIsIG5hbWUpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBsb29rdXBfaG9zdChjb25zdCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmluKQorLXsKKy0Jc3RydWN0IGFkZHJpbmZvICpyZXM7CistCWludCByZXQ7CistCistCXJldCA9IGdldGFkZHJpbmZvKGhvc3QsIE5VTEwsIE5VTEwsICZyZXMpOworLQlpZiAocmV0KQorLQkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgZ2FpX3N0cmVycm9yKHJldCkpOworLQkqaW4gPSAqcmVzLT5haV9hZGRyOworLQlmcmVlYWRkcmluZm8ocmVzKTsKKy19CisrI2RlZmluZSBTVFJfKHMpCSMgcworKyNkZWZpbmUgU1RSKHMpCVNUUl8ocykKKyAKKyBzdGF0aWMgaW50IGdpdF90Y3BfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnByb2csIGNoYXIgKmhvc3QsIGNoYXIgKnBhdGgpCisgeworLQlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKy0JaW50IHBvcnQgPSBERUZBVUxUX0dJVF9QT1JULCBzb2NrZmQ7CistCWNoYXIgKmNvbG9uOworLQorLQljb2xvbiA9IHN0cmNocihob3N0LCAnOicpOworLQlpZiAoY29sb24pIHsKKy0JCWNoYXIgKmVuZDsKKy0JCXVuc2lnbmVkIGxvbmcgbiA9IHN0cnRvdWwoY29sb24rMSwgJmVuZCwgMCk7CistCQlpZiAoY29sb25bMV0gJiYgISplbmQpIHsKKy0JCQkqY29sb24gPSAwOworLQkJCXBvcnQgPSBuOworKwlpbnQgc29ja2ZkID0gLTE7CisrCWNoYXIgKmNvbG9uLCAqZW5kOworKwljaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpOworKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKKysJaW50IGdhaTsKKysKKysJaWYgKGhvc3RbMF0gPT0gJ1snKSB7CisrCQllbmQgPSBzdHJjaHIoaG9zdCArIDEsICddJyk7CisrCQlpZiAoZW5kKSB7CisrCQkJKmVuZCA9IDA7CisrCQkJZW5kKys7CisrCQkJaG9zdCsrOworKwkJfSBlbHNlCisrCQkJZW5kID0gaG9zdDsKKysJfSBlbHNlCisrCQllbmQgPSBob3N0OworKwljb2xvbiA9IHN0cmNocihlbmQsICc6Jyk7CisrCisrCWlmIChjb2xvbikKKysJCXBvcnQgPSBjb2xvbiArIDE7CisrCisrCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworKworKwlnYWkgPSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZhaSk7CisrCWlmIChnYWkpCisrCQlkaWUoIlVuYWJsZSB0byBsb29rIHVwICVzICglcykiLCBob3N0LCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisrCisrCWZvciAoYWkwID0gYWk7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisrCQlzb2NrZmQgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworKwkJaWYgKHNvY2tmZCA8IDApCisrCQkJY29udGludWU7CisrCQlpZiAoY29ubmVjdChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSB7CisrCQkJY2xvc2Uoc29ja2ZkKTsKKysJCQlzb2NrZmQgPSAtMTsKKysJCQljb250aW51ZTsKKyAJCX0KKysJCWJyZWFrOworIAl9CisgCistCWxvb2t1cF9ob3N0KGhvc3QsICZhZGRyKTsKKy0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYWRkciktPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisrCWZyZWVhZGRyaW5mbyhhaTApOworIAorLQlzb2NrZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fSVApOworIAlpZiAoc29ja2ZkIDwgMCkKKyAJCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSBzb2NrZXQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CistCWlmIChjb25uZWN0KHNvY2tmZCwgKHZvaWQgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA8IDApCistCQlkaWUoInVuYWJsZSB0byBjb25uZWN0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworKworIAlmZFswXSA9IHNvY2tmZDsKKyAJZmRbMV0gPSBzb2NrZmQ7CisgCXBhY2tldF93cml0ZShzb2NrZmQsICIlcyAlc1xuIiwgcHJvZywgcGF0aCk7CisKKy0tIAorWU9TSElGVUpJIEhpZGVha2kgQCBVU0FHSSBQcm9qZWN0ICA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitHUEctRlAgIDogOTAyMiA2NUVCIDFFQ0YgM0FEMSAwQkRGICA4MEQ4IDQ4MDcgRjg5NCBFMDYyIDBFRUEKKworRnJvbSBub2JvZHkgU2F0IEF1ZyAyNyAyMzowNzo0OSAyMDA1CitQYXRoOiBuZXdzLmdtYW5lLm9yZyFub3QtZm9yLW1haWwKK01lc3NhZ2UtSUQ6IDx1NXRhY2pqZHB4cS5mc2ZAbHlzYXRvci5saXUuc2U+CitGcm9tOiA9P0lTTzg4NTktMT9RP0RhdmlkX0s9RTVnZWRhbD89IDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CitOZXdzZ3JvdXBzOiBnbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQKK1N1YmplY3Q6IFtQQVRDSF0gRml4ZWQgdHdvIGJ1Z3MgaW4gZ2l0LWN2c2ltcG9ydC1zY3JpcHQuCitEYXRlOiBNb24sIDE1IEF1ZyAyMDA1IDIwOjE4OjI1ICswMjAwCitMaW5lczogODMKK0FwcHJvdmVkOiBuZXdzQGdtYW5lLm9yZworTk5UUC1Qb3N0aW5nLUhvc3Q6IG1haW4uZ21hbmUub3JnCitNaW1lLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogUVVPVEVELVBSSU5UQUJMRQorWC1UcmFjZTogc2VhLmdtYW5lLm9yZyAxMTI0MTMwMjQ3IDMxODM5IDgwLjkxLjIyOS4yICgxNSBBdWcgMjAwNSAxODoyNDowNyBHTVQpCitYLUNvbXBsYWludHMtVG86IHVzZW5ldEBzZWEuZ21hbmUub3JnCitOTlRQLVBvc3RpbmctRGF0ZTogTW9uLCAxNSBBdWcgMjAwNSAxODoyNDowNyArMDAwMCAoVVRDKQorQ2M6ICJKdW5pbyBDLiBIYW1hbm8iIDxqdW5raW9AY294Lm5ldD4KK09yaWdpbmFsLVgtRnJvbTogZ2l0LW93bmVyQHZnZXIua2VybmVsLm9yZyBNb24gQXVnIDE1IDIwOjI0OjA1IDIwMDUKKworVGhlIGdpdC1jdnNpbXBvcnQtc2NyaXB0IGhhZCBhIGNvcHVsZSBvZiBzbWFsbCBidWdzIHRoYXQgcHJldmVudGVkIG1lCitmcm9tIGltcG9ydGluZyBhIGJpZyBDVlMgcmVwb3NpdG9yeS4KKworVGhlIGZpcnN0IHdhcyB0aGF0IGl0IGRpZG4ndCBoYW5kbGUgcmVtb3ZlZCBmaWxlcyB3aXRoIGEgbXVsdGktZGlnaXQKK3ByaW1hcnkgcmV2aXNpb24gbnVtYmVyLgorCitUaGUgc2Vjb25kIHdhcyB0aGF0IGl0IHdhcyBhc2tpbmcgdGhlIENWUyBzZXJ2ZXIgZm9yICJGIiBtZXNzYWdlcywKK2FsdGhvdWdoIHRoZXkgd2VyZSBub3QgaGFuZGxlZC4KKworSSBhbHNvIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgc2NyaXB0IHRvIGNvcnJlc3BvbmQgdG8KK2FjdHVhbCBmbGFncy4KKworU2lnbmVkLW9mZi1ieTogRGF2aWQgSz1FNWdlZGFsIDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CistLS0KKworIERvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC1zY3JpcHQudHh0IHwgOSArKysrKysrKy0KKyBnaXQtY3ZzaW1wb3J0LXNjcmlwdCAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworNTA0NTJmOWMwYzJkZjFmMDRkODNhMjYyNjZiYTcwNGIxMzg2MTYzMgorZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC1zY3JpcHQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQ9CistY3ZzaW1wb3J0LXNjcmlwdC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC1zY3JpcHQudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dAorQEAgLTI5LDYgKzI5LDEwIEBAIE9QVElPTlMKKyAJY3VycmVudGx5LCBvbmx5IHRoZSA6bG9jYWw6LCA6ZXh0OiBhbmQgOnBzZXJ2ZXI6IGFjY2VzcyBtZXRob2RzPTIwCisgCWFyZSBzdXBwb3J0ZWQuCis9MjAKKystQyA8dGFyZ2V0LWRpcj46OgorKyAgICAgICAgVGhlIEdJVCByZXBvc2l0b3J5IHRvIGltcG9ydCB0by4gIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndAorKyAgICAgICAgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4gIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorKworIC1pOjoKKyAJSW1wb3J0LW9ubHk6IGRvbid0IHBlcmZvcm0gYSBjaGVja291dCBhZnRlciBpbXBvcnRpbmcuICBUaGlzIG9wdGlvbgorIAllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgY2FjaGUgcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorQEAgLTQ0LDcgKzQ4LDcgQEAgT1BUSU9OUworPTIwCisgLXAgPG9wdGlvbnMtZm9yLWN2c3BzPjo6CisgCUFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgY3ZzcHMuCistCVRoZSBvcHRpb25zICcteCcgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKysJVGhlIG9wdGlvbnMgJy11JyBhbmQgJy1BJyBhcmUgaW1wbGljaXQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBoZXJlLgorPTIwCisgCUlmIHlvdSBuZWVkIHRvIHBhc3MgbXVsdGlwbGUgb3B0aW9ucywgc2VwYXJhdGUgdGhlbSB3aXRoIGEgY29tbWEuCis9MjAKK0BAIC01Nyw2ICs2MSw5IEBAIE9QVElPTlMKKyAtaDo6CisgCVByaW50IGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KKz0yMAorKy16IDxmdXp6Pjo6CisrICAgICAgICBQYXNzIHRoZSB0aW1lc3RhbXAgZnV6eiBmYWN0b3IgdG8gY3ZzcHMuCisrCisgT1VUUFVUCisgLS0tLS0tCisgSWYgJy12JyBpcyBzcGVjaWZpZWQsIHRoZSBzY3JpcHQgcmVwb3J0cyB3aGF0IGl0IGlzIGRvaW5nLgorZGlmZiAtLWdpdCBhL2dpdC1jdnNpbXBvcnQtc2NyaXB0IGIvZ2l0LWN2c2ltcG9ydC1zY3JpcHQKKy0tLSBhL2dpdC1jdnNpbXBvcnQtc2NyaXB0CisrKysgYi9naXQtY3ZzaW1wb3J0LXNjcmlwdAorQEAgLTE5MCw3ICsxOTAsNyBAQCBzdWIgY29ubiB7CisgCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlJvb3QgJHJlcG9cbiIpOworPTIwCisgCSMgVHJpYWwgYW5kIGVycm9yIHNheXMgdGhhdCB0aGlzIHByb2JhYmx5IGlzIHRoZSBtaW5pbXVtIHNldAorLQkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJWYWxpZC1yZXNwb25zZXMgb2sgZXJyb3IgVmFsaWQtcmVxdWVzdHMgTW89CitkZSBNIE1iaW5hcnkgRSBGIENoZWNrZWQtaW4gQ3JlYXRlZCBVcGRhdGVkIE1lcmdlZCBSZW1vdmVkXG4iKTsKKysJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiVmFsaWQtcmVzcG9uc2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIE1vPQorZGUgTSBNYmluYXJ5IEUgQ2hlY2tlZC1pbiBDcmVhdGVkIFVwZGF0ZWQgTWVyZ2VkIFJlbW92ZWRcbiIpOworPTIwCisgCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoInZhbGlkLXJlcXVlc3RzXG4iKTsKKyAJJHNlbGYtPnsnc29ja2V0byd9LT5mbHVzaCgpOworQEAgLTY5MSw3ICs2OTEsNyBAQCB3aGlsZSg8Q1ZTPikgeworIAkJdW5saW5rKCR0bXBuYW1lKTsKKyAJCW15ICRtb2RlID0zRCBwbW9kZSgkY3ZzLT57J21vZGUnfSk7CisgCQlwdXNoKEBuZXcsWyRtb2RlLCAkc2hhLCAkZm5dKTsgIyBtYXkgYmUgcmVzdXJyZWN0ZWQhCistCX0gZWxzaWYoJHN0YXRlID0zRD0zRCA5IGFuZCAvXlxzKyhcUyspOlxkKD86XC5cZCspKy0+KFxkKD86XC5cZCspKylcKD0KK0RFQURcKVxzKiQvKSB7CisrCX0gZWxzaWYoJHN0YXRlID0zRD0zRCA5IGFuZCAvXlxzKyhcUyspOlxkKyg/OlwuXGQrKSstPihcZCsoPzpcLlxkKykrKT0KK1woREVBRFwpXHMqJC8pIHsKKyAJCW15ICRmbiA9M0QgJDE7CisgCQkkZm4gPTNEfiBzI14vKyMjOworIAkJcHVzaChAb2xkLCRmbik7CisKKy0tPTIwCitEYXZpZCBLPUU1Z2VkYWwKKy0KK1RvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBnaXQiIGluCit0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZworTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorUmVmZXJlbmNlczogPFBpbmUuTE5YLjQuNjQwLjAwMDFAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMDJAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMDNAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMDRAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMDVAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMDZAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMDdAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMDhAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMDlAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTBAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTFAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTJAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTNAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTRAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTVAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTZAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTdAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMThAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMTlAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjBAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjFAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjJAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjNAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjRAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjVAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjZAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjdAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjhAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMjlAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzBAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzFAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzJAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzNAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzRAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzVAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzZAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzdAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzhAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwMzlAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDBAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDFAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDJAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDNAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDRAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDVAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDZAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDdAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDhAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNDlAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CisgPFBpbmUuTE5YLjQuNjQwLjAwNTBAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYSBjb21taXQuCisKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhbm90aGVyIHBhdGNoCisKK0hlcmUgaXMgYW4gZW1wdHkgcGF0Y2ggZnJvbSBBIFUgVGhvci4KKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8anVuaW9Aa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogcmU6IFtQQVRDSF0gYW5vdGhlciBwYXRjaAorCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKz5IZXJlIGlzIGFuIGVtcHR5IHBhdGNoIGZyb20gQSBVIFRob3IuCisKK0hleSB5b3UgZm9yZ290IHRoZSBwYXRjaCEKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDE3IFNlcCAyMDAxIDAwOjAwOjAwICswOTAwCitNaW1lLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBUZXh0L1BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBRdW90ZWQtUHJpbnRhYmxlCisKKz0wQT0wQUZyb206IEYgVSBCYXIgPGYudS5iYXJAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0hdIHVwZGF0ZXM9MEE9MEFUaGlzIGlzIHRvIGZpeCBkaWZmLWZvcm1hdCBkb2N1bWVudGF0aW9uLgorCitkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAoraW5kZXggYjQyNmExNC4uOTc3NTZlYyAxMDA2NDQKKy0tLSBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorQEAgLTgxLDcgKzgxLDcgQEAgVGhlICJkaWZmIiBmb3JtYXR0aW5nIG9wdGlvbnMgY2FuIGJlIGN1c3RvbWl6ZWQgdmlhIHRoZQorIGVudmlyb25tZW50IHZhcmlhYmxlICdHSVRfRElGRl9PUFRTJy4gIEZvciBleGFtcGxlLCBpZiB5b3UKKyBwcmVmZXIgY29udGV4dCBkaWZmOgorPTIwCistICAgICAgR0lUX0RJRkZfT1BUUz0zRC1jIGdpdC1kaWZmLWluZGV4IC1wICQoY2F0IC5naXQvSEVBRCkKKysgICAgICBHSVRfRElGRl9PUFRTPTNELWMgZ2l0LWRpZmYtaW5kZXggLXAgSEVBRAorPTIwCis9MjAKKyAyLiBXaGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0VYVEVSTkFMX0RJRkYnIGlzIHNldCwgdGhlCitGcm9tIGI5NzA0YTUxOGUyMTE1ODQzM2JhYTJjYzJkNTkxZmVhNjg3OTY3ZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/THVrYXM9MjBTYW5kc3RyPUMzPUI2bT89IDxsdWthc3NAZXRlay5jaGFsbWVycy5zZT4KK0RhdGU6IFRodSwgMTAgSnVsIDIwMDggMjM6NDE6MzMgKzAyMDAKK1N1YmplY3Q6IFJlOiBkaXNjdXNzaW9uIHRoYXQgbGVhZCB0byB0aGlzIHBhdGNoCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1tQQVRDSF0gZ2l0LW1haWxpbmZvOiBGaXggZ2V0dGluZyB0aGUgc3ViamVjdCBmcm9tIHRoZSBib2R5CisKKyJTdWJqZWN0OiAiIGlzbid0IGluIHRoZSBzdGF0aWMgYXJyYXkgImhlYWRlciIsIGFuZCB0aHVzCittZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgNykgd2lsbCBuZXZlciBtYXRjaC4KKworU2lnbmVkLW9mZi1ieTogTHVrYXMgU2FuZHN0csO2bSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IDk2MmFhMzQuLjJkMTUyMGYgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlYWRlcihjaGFyICpsaW5lLCB1bnNpZ25lZCBsaW5lc2l6ZSwgY2hhciAqKmhkcl9kYXRhLCBpbnQgb3ZlcgorIAkJcmV0dXJuIDE7CisgCWlmICghbWVtY21wKCJbUEFUQ0hdIiwgbGluZSwgNykgJiYgaXNzcGFjZShsaW5lWzddKSkgeworIAkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKy0JCQlpZiAoIW1lbWNtcCgiU3ViamVjdDogIiwgaGVhZGVyW2ldLCA5KSkgeworKwkJCWlmICghbWVtY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldLCA3KSkgeworIAkJCQlpZiAoISBoYW5kbGVfaGVhZGVyKGxpbmUsIGhkcl9kYXRhW2ldLCAwKSkgeworIAkJCQkJcmV0dXJuIDE7CisgCQkJCX0KKy0tIAorMS41LjYuMi40NTUuZzFlZmIyCisKK0Zyb20gbm9ib2R5IEZyaSBBdWcgIDggMjI6MjQ6MDMgMjAwOAorRGF0ZTogRnJpLCA4IEF1ZyAyMDA4IDEzOjA4OjM3ICswMjAwIChDRVNUKQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIIDMvMyB2Ml0gWHl6enkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij0tPS09IgorCistLT0tPS09CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPODg1OS0xNQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCitIZXJlIGNvbWVzIGEgY29tbWl0IGxvZyBtZXNzYWdlLCBhbmQKK2l0cyBzZWNvbmQgbGluZSBpcyBoZXJlLgorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jICB8IDQgKystLQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCAzZTVmZTUxLi5hYWJmZTVjIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC03NTgsOCArNzU4LDggQEAgc3RhdGljIHZvaWQgaGFuZGxlX2JvZHkodm9pZCkKKyAJCS8qIHByb2Nlc3MgYW55IGJvdW5kYXJ5IGxpbmVzICovCisgCQlpZiAoKmNvbnRlbnRfdG9wICYmIGlzX211bHRpcGFydF9ib3VuZGFyeSgmbGluZSkpIHsKKyAJCQkvKiBmbHVzaCBhbnkgbGVmdG92ZXIgKi8KKy0JCQlpZiAobGluZS5sZW4pCistCQkJCWhhbmRsZV9maWx0ZXIoJmxpbmUpOworKwkJCWlmIChwcmV2LmxlbikKKysJCQkJaGFuZGxlX2ZpbHRlcigmcHJldik7Cis9MjAKKyAJCQlpZiAoIWhhbmRsZV9ib3VuZGFyeSgpKQorIAkJCQlnb3RvIGhhbmRsZV9ib2R5X291dDsKKy0tPTIwCisxLjYuMC5yYzIKKworLS09LT0tPS0tCisKK0Zyb20gYmRhQG1uc3NwYi5ydSBXZWQgTm92IDEyIDE3OjU0OjQxIDIwMDgKK0Zyb206IERtaXRyaXkgQmxpbm92IDxiZGFAbW5zc3BiLnJ1PgorVG86IG5hdnktcGF0Y2hlc0BkaW5hci5tbnMubW5zc3BiLnJ1CitEYXRlOiBXZWQsIDEyIE5vdiAyMDA4IDE3OjU0OjQxICswMzAwCitNZXNzYWdlLUlkOiA8MTIyNjUwMTY4MS0yNDkyMy0xLWdpdC1zZW5kLWVtYWlsLWJkYUBtbnNzcGIucnU+CitYLU1haWxlcjogZ2l0LXNlbmQtZW1haWwgMS41LjYuNQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKKyAgY2hhcnNldD11dGYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorU3ViamVjdDogW05hdnktcGF0Y2hlc10gW1BBVENIXQorCT0/dXRmLTg/Yj8wSmpRdDlDODBMWFF2ZEdSMEwwZzBZSFF2OUM0MFlIUXZ0QzZJTkMvMExBPT89CisJPT91dGYtOD9iPzBMclF0ZEdDMEw3UXNpRFF2ZEMxMEw3UXNkR0YwTDdRdE5DNDBMelJpOUdGSU5DMDBMdlJqeUE9Pz0KKwk9P3V0Zi04P2I/MFlIUXNkQyswWURRdXRDND89CisKK3RleHRsaXZlLSog0LjRgdC/0YDQsNCy0LvQtdC90Ysg0L3QsCB0ZXhsaXZlLSoKK2RvY3V0aWxzINC30LDQvNC10L3RkdC9INC90LAgcHl0aG9uLWRvY3V0aWxzCisKK9CU0LXQudGB0YLQstC40YLQtdC70YzQvdC+LCDQvtC60LDQt9Cw0LvQvtGB0YwsINGH0YLQviByZXN0MndlYiDQstGL0YLRj9Cz0LjQstCw0LXRgiDQt9CwINGB0L7QsdC+0LkKK3B5dGhvbi1kb2N1dGlscy4g0JIg0YLQviDQstGA0LXQvNGPINC60LDQuiDRgdCw0LwgcmVzdDJ3ZWIg0L3QtSDQvdGD0LbQtdC9LgorCitTaWduZWQtb2ZmLWJ5OiBEbWl0cml5IEJsaW5vdiA8YmRhQG1uc3NwYi5ydT4KKy0tLQorIGhvd3RvL2J1aWxkX25hdnkudHh0IHwgICAgNiArKystLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2hvd3RvL2J1aWxkX25hdnkudHh0IGIvaG93dG8vYnVpbGRfbmF2eS50eHQKK2luZGV4IDNmZDNhZmIuLjBlZTgwN2UgMTAwNjQ0CistLS0gYS9ob3d0by9idWlsZF9uYXZ5LnR4dAorKysrIGIvaG93dG8vYnVpbGRfbmF2eS50eHQKK0BAIC0xMTksOCArMTE5LDggQEAKKyAgICAtIGxpYnh2LWRldgorICAgIC0gbGlidXNwbGFzaC1kZXYKKyAgICAtIGxhdGV4LW1ha2UKKy0gICAtIHRleHRsaXZlLWxhbmctY3lyaWxsaWMKKy0gICAtIHRleHRsaXZlLWxhdGV4LWV4dHJhCisrICAgLSB0ZXhsaXZlLWxhbmctY3lyaWxsaWMKKysgICAtIHRleGxpdmUtbGF0ZXgtZXh0cmEKKyAgICAtIGRpYQorICAgIC0gcHl0aG9uLXB5cmV4CisgICAgLSBsaWJ0b29sCitAQCAtMTI4LDcgKzEyOCw3IEBACisgICAgLSBzb3gKKyAgICAtIGN5dGhvbgorICAgIC0gaW1hZ2VtYWdpY2sKKy0gICAtIGRvY3V0aWxzCisrICAgLSBweXRob24tZG9jdXRpbHMKKyAKKyAjLiDQvdCwINC80LDRiNC40L3QtSBkaW5hcjog0LTQvtCx0LDQstC40YLRjCDRgdCy0L7QuSDQvtGC0LrRgNGL0YLRi9C5IHNzaC3QutC70Y7RhyDQsiBhdXRob3JpemVkX2tleXMyINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyBkZGV2CisgIy4g0L3QsCDRgdCy0L7QtdC5INC80LDRiNC40L3QtTog0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMIC9ldGMvc3Vkb2VycyAo0LrQvtC80LDQvdC00LAgYGB2aXN1ZG9gYCkg0L/RgNC40LzQtdGA0L3QviDRgdC70LXQtNGD0Y7RidC40Lwg0L7QsdGA0LDQt9C+0Lw6OgorLS0gCisxLjUuNi41CitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IDxhLnUudGhvckBleGFtcGxlLmNvbT4gKEEgVSBUaG9yKQorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGEgcGF0Y2gKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5pbyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorRGF0ZTogVGh1LCAyMCBBdWcgMjAwOSAxNzoxODoyMiAtMDcwMAorU3ViamVjdDogV2h5IGRvZXNuJ3QgZ2l0LWFtIGRvZXMgbm90IGxpa2UgPjggc2Npc3NvcnMgbWFyaz8KKworU3ViamVjdDogW1BBVENIXSBCTEFIIE9ORQorCitJbiByZWFsIGxpZmUsIHdlIHdpbGwgc2VlIGEgZGlzY3Vzc2lvbiB0aGF0IGluc3BpcmVkIHRoaXMgcGF0Y2gKK2Rpc2N1c3NpbmcgcmVsYXRlZCBhbmQgdW5yZWxhdGVkIHRoaW5ncyBhcm91bmQgPjggc2Npc3NvcnMgbWFyaworaW4gdGhpcyBwYXJ0IG9mIHRoZSBtZXNzYWdlLgorCitTdWJqZWN0OiBbUEFUQ0hdIEJMQUggVFdPCisKK0FuZCB0aGVuIHdlIHdpbGwgc2VlIHRoZSBzY2lzc29ycy4KKworIFRoaXMgbGluZSBpcyBub3QgYSBzY2lzc29ycyBtYXJrIC0tID44IC0tIGJ1dCB0YWxrcyBhYm91dCBpdC4KKyAtIC0gPjggLSAtIHBsZWFzZSByZW1vdmUgZXZlcnl0aGluZyBhYm92ZSB0aGlzIGxpbmUgLSAtID44IC0gLQorCitTdWJqZWN0OiBbUEFUQ0hdIFRlYWNoIG1haWxpbmZvIHRvIGlnbm9yZSBldmVyeXRoaW5nIGJlZm9yZSAtLSA+OCAtLSBtYXJrCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK1RoaXMgdGVhY2hlcyBtYWlsaW5mbyB0aGUgc2Npc3NvcnMgLS0gPjggLS0gbWFyazsgdGhlIGNvbW1hbmQgaWdub3JlcworZXZlcnl0aGluZyBiZWZvcmUgaXQgaW4gdGhlIG1lc3NhZ2UgYm9keS4KKworU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIDEgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggYjBiNWQ4Zi4uNDYxYzQ3ZSAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzEyLDYgKzcxMiwzNCBAQCBzdGF0aWMgaW5saW5lIGludCBwYXRjaGJyZWFrKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgaW50IHNjaXNzb3JzKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCisreworKwlzaXplX3QgaSwgbGVuID0gbGluZS0+bGVuOworKwlpbnQgc2Npc3NvcnNfZGFzaGVzX3NlZW4gPSAwOworKwljb25zdCBjaGFyICpidWYgPSBsaW5lLT5idWY7CisrCisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworKwkJaWYgKGlzc3BhY2UoYnVmW2ldKSkKKysJCQljb250aW51ZTsKKysJCWlmIChidWZbaV0gPT0gJy0nKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDI7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDEgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiPjgiLCAyKSkgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAxOworKwkJCWkrKzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgNyA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICJjdXQgaGVyZSIsIDgpKSB7CisrCQkJaSArPSA3OworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJLyogZXZlcnl0aGluZyBlbHNlIC0tLSBub3Qgc2Npc3NvcnMgKi8KKysJCWJyZWFrOworKwl9CisrCXJldHVybiBzY2lzc29yc19kYXNoZXNfc2VlbiA9PSAwMzsKKyt9CisrCisgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIHsKKyAJc3RhdGljIGludCBzdGlsbF9sb29raW5nID0gMTsKK0BAIC03MjMsMTAgKzc1MSwxNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgCQlzdHJidWZfbHRyaW0obGluZSk7CisgCQlpZiAoIWxpbmUtPmxlbikKKyAJCQlyZXR1cm4gMDsKKy0JCWlmICgoc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKSkgIT0gMCkKKysJCXN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCk7CisrCQlpZiAoc3RpbGxfbG9va2luZykKKyAJCQlyZXR1cm4gMDsKKyAJfQorIAorKwlpZiAoc2Npc3NvcnMobGluZSkpIHsKKysJCWZzZWVrKGNtaXRtc2csIDBMLCBTRUVLX1NFVCk7CisrCQlzdGlsbF9sb29raW5nID0gMTsKKysJCXJldHVybiAwOworKwl9CisrCisgCS8qIG5vcm1hbGl6ZSB0aGUgbG9nIG1lc3NhZ2UgdG8gVVRGLTguICovCisgCWlmIChtZXRhaW5mb19jaGFyc2V0KQorIAkJY29udmVydF90b191dGY4KGxpbmUsIGNoYXJzZXQuYnVmKTsKKy0tIAorMS42LjQuMQorRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZnJvbSkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCitGcm9tOiBib2dvc2l0eQorICAtIGEgbGlzdAorICAtIG9mIHN0dWZmCistLS0KK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZGF0ZSkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCitEYXRlOiBib2d1cworCithbmQgc29tZSBjb250ZW50CisKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IEEgRSBJIE8gVQorRGF0ZTogTW9uLCAxNyBTZXAgMjAxMiAxNDoyMzo0NCAtMDcwMAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTIwMjItanAiCitDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04IgorCitOZXcgY29udGVudCBoZXJlCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK05ldyBjb250ZW50CitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IGNoZWNrIG11bHRpbGluZSBpbmJvZHkgaGVhZGVycworRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKK0Zyb206IEFub3RoZXIgVGhvcgorIDxhLnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBUaGlzIG9uZSBjb250YWlucworCWEgdGFiCisgYW5kIGEgc3BhY2UKKworYSBjb21taXQgbWVzc2FnZQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CmRpZmYgLS1naXQgYS90L3Q1MTAwL3NhbXBsZS5tYm94cmQgYi90L3Q1MTAwL3NhbXBsZS5tYm94cmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhZDVhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvc2FtcGxlLm1ib3hyZApAQCAtMCwwICsxLDE5IEBACitGcm9tIG1ib3hyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1ib3hyZCB3cml0ZXIgPG1ib3hyZEBleGFtcGxlLmNvbT4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhIGNvbW1pdCB3aXRoIGVzY2FwZWQgRnJvbSBsaW5lcworCis+RnJvbSB0aGUgYmVnaW5uaW5nLCBtYm94IHNob3VsZCBoYXZlIGJlZW4gbWJveHJkCis+PkZyb20gZXNjYXBlZAorRnJvbSBub3QgbWFuZ2xlZCBidXQgdGhpcyBsaW5lIHNob3VsZCBoYXZlIGJlZW4gZXNjYXBlZAorCitGcm9tIG1ib3hyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1ib3hyZCB3cml0ZXIgPG1ib3hyZEBleGFtcGxlLmNvbT4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIIDIvMl0gYW5vdGhlciB3aXRoIGZha2UgRnJvbSBsaW5lcworCisgPkZyb20gdW5jaGFuZ2VkCisgRnJvbSBhbHNvIHVuY2hhbmdlZAorbm8gdHJhaWxpbmcgc3BhY2UsIG5vIGVzY2FwaW5nIG5lY2Vzc2FyeSBhbmQgJz4nIHdhcyBpbnRlbmRlZDoKKz5Gcm9tCisKZGlmZiAtLWdpdCBhL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoIGIvdC90NTE1MC1yZXF1ZXN0LXB1bGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzE4MTFlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxNTAtcmVxdWVzdC1wdWxsLnNoCkBAIC0wLDAgKzEsMzA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB3b3JrZmxvd3MgaW52b2x2aW5nIHB1bGwgcmVxdWVzdC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyByZXF1ZXN0LXB1bGwgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlnaXQgaW5pdCAtLWJhcmUgdXBzdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGNsb25lIHVwc3RyZWFtLmdpdCB1cHN0cmVhbS1wcml2YXRlICYmCisJZ2l0IGNsb25lIGRvd25zdHJlYW0uZ2l0IGxvY2FsICYmCisKKwl0cmFzaF91cmw9ImZpbGU6Ly8kVFJBU0hfRElSRUNUT1JZIiAmJgorCWRvd25zdHJlYW1fdXJsPSIkdHJhc2hfdXJsL2Rvd25zdHJlYW0uZ2l0LyIgJiYKKwl1cHN0cmVhbV91cmw9IiR0cmFzaF91cmwvdXBzdHJlYW0uZ2l0LyIgJiYKKworCSgKKwkJY2QgdXBzdHJlYW0tcHJpdmF0ZSAmJgorCQljYXQgPDwtXEVPVCA+bW5lbW9uaWMudHh0ICYmCisJCVRoaXJ0ZXkgZGF5cyBoYXRoIE5vdmVtYmVyLAorCQlBcHJpbGUsIEp1bmUsIGFuZCBTZXB0ZW1iZXI6CisJCUVPVAorCQlnaXQgYWRkIG1uZW1vbmljLnR4dCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiXCJUaGlydHkgZGF5c1wiLCBhIHJlbWluZGVyIG9mIG1vbnRoIGxlbmd0aHMiICYmCisJCWdpdCB0YWcgLW0gInZlcnNpb24gMSIgLWEgaW5pdGlhbCAmJgorCQlnaXQgcHVzaCAtLXRhZ3Mgb3JpZ2luIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCByZW1vdGUgYWRkIHVwc3RyZWFtICIkdHJhc2hfdXJsL3Vwc3RyZWFtLmdpdCIgJiYKKwkJZ2l0IGZldGNoIHVwc3RyZWFtICYmCisJCWdpdCBwdWxsIHVwc3RyZWFtIG1hc3RlciAmJgorCQljYXQgPDwtXEVPVCA+Pm1uZW1vbmljLnR4dCAmJgorCQlPZiB0d3llY2VzY29yZS1laWdodHQgaXMgYnV0IGVpbmUsCisJCUFuZCBhbGwgdGhlIHJlbW5hbnRlIGJlIHRocnljZXNjb3JlLWVpbmUuCisJCU/igJljb3Vyc2UgTGVhcCB5YXJlIGNvbWVzIGFu4oCZcHluZXMsCisJCUV24oCZcmllIGZvdXJlIHlhcmVzLCBnb3RlIGl0IHJ5Z2h0aC4KKwkJQW7igJl0d3llY2VzY29yZS1laWdodCBpcyBidXQgdHd5ZWNlc2NvcmUtbnluZS4KKwkJRU9UCisJCWdpdCBhZGQgbW5lbW9uaWMudHh0ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJNb3JlIGRldGFpbCIgJiYKKwkJZ2l0IHRhZyAtbSAidmVyc2lvbiAyIiAtYSBmdWxsICYmCisJCWdpdCBjaGVja291dCAtYiBzaW1wbGlmeSBIRUFEXiAmJgorCQltdiBtbmVtb25pYy50eHQgbW5lbW9uaWMuc3RhbmRhcmQgJiYKKwkJY2F0IDw8LVxFT1QgPm1uZW1vbmljLmNsYXJpZmllZCAmJgorCQlUaGlydHkgZGF5cyBoYXMgU2VwdGVtYmVyLAorCQlBbGwgdGhlIHJlc3QgSSBjYW7igJl0IHJlbWVtYmVyLgorCQlFT1QKKwkJZ2l0IGFkZCAtTiBtbmVtb25pYy5zdGFuZGFyZCBtbmVtb25pYy5jbGFyaWZpZWQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQWRhcHQgdG8gdXNlIG1vZGVybiwgc2ltcGxlciBFbmdsaXNoCisKK0J1dCBrZWVwIHRoZSBvbGQgdmVyc2lvbiwgdG9vLCBpbiBjYXNlIHNvbWUgcGVvcGxlIHByZWZlciBpdC4iICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHR3byBzY3JpcHRzIGZvciByZWFkaW5nIHB1bGwgcmVxdWVzdHMnICcKKworCWRvd25zdHJlYW1fdXJsX2Zvcl9zZWQ9JCgKKwkJcHJpbnRmICIlc1xuIiAiJGRvd25zdHJlYW1fdXJsIiB8CisJCXNlZCAtZSAnXCcncy9cXC9cXFxcL2cnXCcnIC1lICdcJydzL1tbLy4qXiRdL1xcJi9nJ1wnJworCSkgJiYKKworCWNhdCA8PC1cRU9UID5yZWFkLXJlcXVlc3Quc2VkICYmCisJIyEvYmluL3NlZCAtbmYKKwkjIE5vdGUgdGhhdCBhIHJlcXVlc3QgY291bGQgYXNrIGZvciAidGFnICR0YWduYW1lIgorCS8gaW4gdGhlIEdpdCByZXBvc2l0b3J5IGF0OiQvIWQKKwluCisJL14kLyBuCisJcy8gdGFnIFwoW14gXSpcKSQvIHRhZy0tXDEvCisJcy9eWyAJXSpcKC4qXCkgXChbXiBdKlwpL3BsZWFzZSBwdWxsXAorCVwxXAorCVwyL3AKKwlxCisJRU9UCisKKwljYXQgPDwtRU9UID5mdXp6LnNlZAorCSMhL2Jpbi9zZWQgLW5mCisJcy8kZG93bnN0cmVhbV91cmxfZm9yX3NlZC9VUkwvZworCXMvJE9JRF9SRUdFWC9PQkpFQ1RfTkFNRS9nCisJcy9BIFUgVGhvci9BVVRIT1IvZworCXMvWy0wLTldXHsxMFx9IFs6MC05XVx7OFx9IFstK11bMC05XVx7NFx9L0RBVEUvZworCXMvICAgICAgICBbXiBdLiovICAgICAgICBTVUJKRUNUL2cKKwlzLyAgW14gXS4qIChEQVRFKS8gIFNVQkpFQ1QgKERBVEUpL2cKKwlzfHRhZ3MvZnVsbHxCUkFOQ0h8ZworCXMvbW5lbW9uaWMudHh0L0ZJTEVOQU1FL2cKKwlzL152ZXJzaW9uIFswLTldL1ZFUlNJT04vCisJL14gRklMRU5BTUUgfCAqWzAtOV0qIFstK10qXCQvIGIgZGlmZnN0YXQKKwkvXkFVVEhPUiAoWzAtOV0qKTpcJC8gYiBzaG9ydGxvZworCXAKKwliCisJOiBkaWZmc3RhdAorCW4KKwkvIFswLTldKiBmaWxlcyogY2hhbmdlZC8geworCQlhXFwKKwlESUZGU1RBVAorCQliCisJfQorCWIgZGlmZnN0YXQKKwk6IHNob3J0bG9nCisJL14gICAgICAgIFthLXpBLVpdLyBuCisJL15bYS16QS1aXSogKFswLTldKik6XCQvIG4KKwkvXlwkLyBOCisJL15cblthLXpBLVpdKiAoWzAtOV0qKTpcJC8heworCQlhXFwKKwlTSE9SVExPRworCQlECisJfQorCW4KKwliIHNob3J0bG9nCisJRU9UCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IHdoZW4gZm9yZ290IHRvIHB1c2gnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiIFwKKwkJCTI+Li4vZXJyCisJKSAmJgorCWdyZXAgIk5vIG1hdGNoIGZvciBjb21taXQgLioiIGVyciAmJgorCWdyZXAgIkFyZSB5b3Ugc3VyZSB5b3UgcHVzaGVkIiBlcnIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHJlcXVlc3QgYWZ0ZXIgcHVzaCcgJworCisJcm0gLWZyIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IG1hc3RlciAmJgorCQlnaXQgcHVzaCBvcmlnaW4gbWFzdGVyOmZvci11cHN0cmVhbSAmJgorCQlnaXQgcmVxdWVzdC1wdWxsIGluaXRpYWwgb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gPi4uL3JlcXVlc3QKKwkpICYmCisJc2VkIC1uZiByZWFkLXJlcXVlc3Quc2VkIDxyZXF1ZXN0ID5kaWdlc3QgJiYKKwl7CisJCXJlYWQgdGFzayAmJgorCQlyZWFkIHJlcG9zaXRvcnkgJiYKKwkJcmVhZCBicmFuY2gKKwl9IDxkaWdlc3QgJiYKKwkoCisJCWNkIHVwc3RyZWFtLXByaXZhdGUgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IHB1bGwgLS1mZi1vbmx5ICIkcmVwb3NpdG9yeSIgIiRicmFuY2giCisJKSAmJgorCXRlc3QgIiRicmFuY2giID0gZm9yLXVwc3RyZWFtICYmCisJdGVzdF9jbXAgbG9jYWwvbW5lbW9uaWMudHh0IHVwc3RyZWFtLXByaXZhdGUvbW5lbW9uaWMudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdCBhc2tzIEhFQUQgdG8gYmUgcHVsbGVkJyAnCisKKwlybSAtZnIgZG93bnN0cmVhbS5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZG93bnN0cmVhbS5naXQgJiYKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tdGFncyBvcmlnaW4gbWFzdGVyIHNpbXBsaWZ5ICYmCisJCWdpdCBwdXNoIG9yaWdpbiBtYXN0ZXI6Zm9yLXVwc3RyZWFtICYmCisJCWdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiA+Li4vcmVxdWVzdAorCSkgJiYKKwlzZWQgLW5mIHJlYWQtcmVxdWVzdC5zZWQgPHJlcXVlc3QgPmRpZ2VzdCAmJgorCXsKKwkJcmVhZCB0YXNrICYmCisJCXJlYWQgcmVwb3NpdG9yeSAmJgorCQlyZWFkIGJyYW5jaAorCX0gPGRpZ2VzdCAmJgorCXRlc3QgLXogIiRicmFuY2giCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IGZvcm1hdCcgJworCisJcm0gLWZyIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJY2F0IDw8LVxFT1QgPmV4cGVjdCAmJgorCVRoZSBmb2xsb3dpbmcgY2hhbmdlcyBzaW5jZSBjb21taXQgT0JKRUNUX05BTUU6CisKKwkgIFNVQkpFQ1QgKERBVEUpCisKKwlhcmUgYXZhaWxhYmxlIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBhdDoKKworCSAgVVJMIEJSQU5DSAorCisJZm9yIHlvdSB0byBmZXRjaCBjaGFuZ2VzIHVwIHRvIE9CSkVDVF9OQU1FOgorCisJICBTVUJKRUNUIChEQVRFKQorCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVZFUlNJT04KKworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTSE9SVExPRworCisJRElGRlNUQVQKKwlFT1QKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCWdpdCBwdXNoIG9yaWdpbiB0YWdzL2Z1bGwgJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiIHRhZ3MvZnVsbCA+Li4vcmVxdWVzdAorCSkgJiYKKwk8cmVxdWVzdCBzZWQgLW5mIGZ1enouc2VkID5yZXF1ZXN0LmZ1enp5ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCByZXF1ZXN0LmZ1enp5ICYmCisKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiB0YWdzL2Z1bGw6cmVmcy90YWdzL2Z1bGwKKwkpID5yZXF1ZXN0ICYmCisJc2VkIC1uZiBmdXp6LnNlZCA8cmVxdWVzdCA+cmVxdWVzdC5mdXp6eSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgcmVxdWVzdC5mdXp6eSAmJgorCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgcmVxdWVzdC1wdWxsIGluaXRpYWwgIiRkb3duc3RyZWFtX3VybCIgZnVsbAorCSkgPnJlcXVlc3QgJiYKKwlncmVwICIgdGFncy9mdWxsXCQiIHJlcXVlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdC1wdWxsIGlnbm9yZXMgT1BUSU9OU19LRUVQREFTSERBU0ggcG9pc29uJyAnCisKKwkoCisJCWNkIGxvY2FsICYmCisJCU9QVElPTlNfS0VFUERBU0hEQVNIPVllcyAmJgorCQlleHBvcnQgT1BUSU9OU19LRUVQREFTSERBU0ggJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCAtLSBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiIG1hc3Rlcjpmb3ItdXBzdHJlYW0gPi4uL3JlcXVlc3QKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdC1wdWxsIHF1b3RlcyByZWdleCBtZXRhY2hhcmFjdGVycyBwcm9wZXJseScgJworCisJcm0gLWZyIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IG1hc3RlciAmJgorCQlnaXQgdGFnIC1tcmVsZWFzZSB2Mi4wICYmCisJCWdpdCBwdXNoIG9yaWdpbiByZWZzL3RhZ3MvdjIuMDpyZWZzL3RhZ3MvdjItMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmVxdWVzdC1wdWxsIGluaXRpYWwgIiRkb3duc3RyZWFtX3VybCIgdGFncy92Mi4wIFwKKwkJCTI+Li4vZXJyCisJKSAmJgorCWdyZXAgIk5vIG1hdGNoIGZvciBjb21taXQgLioiIGVyciAmJgorCWdyZXAgIkFyZSB5b3Ugc3VyZSB5b3UgcHVzaGVkIiBlcnIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHJlcXVlc3Qgd2l0aCBtaXNtYXRjaGVkIG9iamVjdCcgJworCisJcm0gLWZyIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IG1hc3RlciAmJgorCQlnaXQgcHVzaCBvcmlnaW4gSEVBRDpyZWZzL3RhZ3MvZnVsbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmVxdWVzdC1wdWxsIGluaXRpYWwgIiRkb3duc3RyZWFtX3VybCIgdGFncy9mdWxsIFwKKwkJCTI+Li4vZXJyCisJKSAmJgorCWdyZXAgInBvaW50cyB0byBhIGRpZmZlcmVudCBvYmplY3QiIGVyciAmJgorCWdyZXAgIkFyZSB5b3Ugc3VyZSB5b3UgcHVzaGVkIiBlcnIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHJlcXVlc3Qgd2l0aCBzdGFsZSBvYmplY3QnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIHJlZnMvdGFncy9mdWxsICYmCisJCWdpdCB0YWcgLWYgLW0iVGhpcnR5LW9uZSBkYXlzIiBmdWxsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiB0YWdzL2Z1bGwgXAorCQkJMj4uLi9lcnIKKwkpICYmCisJZ3JlcCAicG9pbnRzIHRvIGEgZGlmZmVyZW50IG9iamVjdCIgZXJyICYmCisJZ3JlcCAiQXJlIHlvdSBzdXJlIHlvdSBwdXNoZWQiIGVycgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTIwMC11cGRhdGUtc2VydmVyLWluZm8uc2ggYi90L3Q1MjAwLXVwZGF0ZS1zZXJ2ZXItaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMWE1OGVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTIwMC11cGRhdGUtc2VydmVyLWluZm8uc2gKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAndGVzdF9jb21taXQgZmlsZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGluZm8vcmVmcycgJworCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2luZm8vcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgYW5kIHN0b3JlIG10aW1lJyAnCisJdGVzdC10b29sIGNobXRpbWUgPTAgLmdpdC9pbmZvL3JlZnMgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAuZ2l0L2luZm8vcmVmcyA+YQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvL3JlZnMgaXMgbm90IG5lZWRsZXNzbHkgb3ZlcndyaXR0ZW4nICcKKwlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLmdpdC9pbmZvL3JlZnMgPmIgJiYKKwl0ZXN0X2NtcCBhIGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mby9yZWZzIGNhbiBiZSBmb3JjZWQgdG8gdXBkYXRlJyAnCisJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAtZiAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC5naXQvaW5mby9yZWZzID5iICYmCisJISB0ZXN0X2NtcCBhIGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mby9yZWZzIHVwZGF0ZXMgd2hlbiBjaGFuZ2VzIGFyZSBtYWRlJyAnCisJdGVzdC10b29sIGNobXRpbWUgPTAgLmdpdC9pbmZvL3JlZnMgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAuZ2l0L2luZm8vcmVmcyA+YiAmJgorCXRlc3RfY21wIGEgYiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZm9vIEhFQUQgJiYKKwlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLmdpdC9pbmZvL3JlZnMgPmIgJiYKKwkhIHRlc3RfY21wIGEgYgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDAtcGFjay1vYmplY3Quc2ggYi90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxMGEwOWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCkBAIC0wLDAgKzEsNDk5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwYWNrLW9iamVjdAorCisnCisuIC4vdGVzdC1saWIuc2gKKworVFJBU0g9JChwd2QpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXR1cCcgXAorICAgICdybSAtZiAuZ2l0L2luZGV4KiAmJgorICAgICBwZXJsIC1lICJwcmludCBcImFcIiB4IDQwOTY7IiA+IGEgJiYKKyAgICAgcGVybCAtZSAicHJpbnQgXCJiXCIgeCA0MDk2OyIgPiBiICYmCisgICAgIHBlcmwgLWUgInByaW50IFwiY1wiIHggNDA5NjsiID4gYyAmJgorICAgICB0ZXN0LXRvb2wgZ2VucmFuZG9tICJzZWVkIGEiIDIwOTcxNTIgPiBhX2JpZyAmJgorICAgICB0ZXN0LXRvb2wgZ2VucmFuZG9tICJzZWVkIGIiIDIwOTcxNTIgPiBiX2JpZyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgYV9iaWcgYiBiX2JpZyBjICYmCisgICAgIGNhdCBjID5kICYmIGVjaG8gZm9vID4+ZCAmJiBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGQgJiYKKyAgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgICBjb21taXQ9JChnaXQgY29tbWl0LXRyZWUgJHRyZWUgPC9kZXYvbnVsbCkgJiYgeworCSBlY2hvICR0cmVlICYmCisJIGVjaG8gJGNvbW1pdCAmJgorCSBnaXQgbHMtdHJlZSAkdHJlZSB8IHNlZCAtZSAicy8uKiBcXChbMC05YS1mXSpcXCkJLiovXFwxLyIKKyAgICAgfSA+b2JqLWxpc3QgJiYgeworCSBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCisJIHdoaWxlIHJlYWQgb2JqZWN0CisJIGRvCisJICAgIHQ9JChnaXQgY2F0LWZpbGUgLXQgJG9iamVjdCkgJiYKKwkgICAgZ2l0IGNhdC1maWxlICR0ICRvYmplY3QgfHwgcmV0dXJuIDEKKwkgZG9uZSA8b2JqLWxpc3QKKyAgICAgfSA+ZXhwZWN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjayB3aXRob3V0IGRlbHRhJyBcCisgICAgJ3BhY2tuYW1lXzE9JChnaXQgcGFjay1vYmplY3RzIC0td2luZG93PTAgdGVzdC0xIDxvYmotbGlzdCknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrLW9iamVjdHMgd2l0aCBib2d1cyBhcmd1bWVudHMnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stb2JqZWN0cyAtLXdpbmRvdz0wIHRlc3QtMSBibGFoIGJsYWggPG9iai1saXN0JworCitybSAtZnIgLmdpdDIKK21rZGlyIC5naXQyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1bnBhY2sgd2l0aG91dCBkZWx0YScgXAorICAgICJHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCisgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorICAgICBnaXQgaW5pdCAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgLW4gPHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgJiYKKyAgICAgZ2l0IHVucGFjay1vYmplY3RzIDx0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrIgorCit1bnNldCBHSVRfT0JKRUNUX0RJUkVDVE9SWQorY2QgIiRUUkFTSC8uZ2l0MiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIHVucGFjayB3aXRob3V0IGRlbHRhJyBcCisgICAgJyhjZCAuLi8uZ2l0ICYmIGZpbmQgb2JqZWN0cyAtdHlwZSBmIC1wcmludCkgfAorICAgICB3aGlsZSByZWFkIHBhdGgKKyAgICAgZG8KKyAgICAgICAgIGNtcCAkcGF0aCAuLi8uZ2l0LyRwYXRoIHx8IHsKKwkgICAgIGVjaG8gJHBhdGggZGlmZmVycy4KKwkgICAgIHJldHVybiAxCisJIH0KKyAgICAgZG9uZScKK2NkICIkVFJBU0giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrIHdpdGggUkVGX0RFTFRBJyBcCisgICAgJ3B3ZCAmJgorICAgICBwYWNrbmFtZV8yPSQoZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTIgPG9iai1saXN0KScKKworcm0gLWZyIC5naXQyCitta2RpciAuZ2l0MgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndW5wYWNrIHdpdGggUkVGX0RFTFRBJyBcCisgICAgJ0dJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKKyAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisgICAgIGdpdCBpbml0ICYmCisgICAgIGdpdCB1bnBhY2stb2JqZWN0cyAtbiA8dGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2snCisKK3Vuc2V0IEdJVF9PQkpFQ1RfRElSRUNUT1JZCitjZCAiJFRSQVNILy5naXQyIgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIHVucGFjayB3aXRoIFJFRl9ERUxUQScgXAorICAgICcoY2QgLi4vLmdpdCAmJiBmaW5kIG9iamVjdHMgLXR5cGUgZiAtcHJpbnQpIHwKKyAgICAgd2hpbGUgcmVhZCBwYXRoCisgICAgIGRvCisgICAgICAgICBjbXAgJHBhdGggLi4vLmdpdC8kcGF0aCB8fCB7CisJICAgICBlY2hvICRwYXRoIGRpZmZlcnMuCisJICAgICByZXR1cm4gMQorCSB9CisgICAgIGRvbmUnCitjZCAiJFRSQVNIIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjayB3aXRoIE9GU19ERUxUQScgXAorICAgICdwd2QgJiYKKyAgICAgcGFja25hbWVfMz0kKGdpdCBwYWNrLW9iamVjdHMgLS1kZWx0YS1iYXNlLW9mZnNldCB0ZXN0LTMgPG9iai1saXN0KScKKworcm0gLWZyIC5naXQyCitta2RpciAuZ2l0MgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndW5wYWNrIHdpdGggT0ZTX0RFTFRBJyBcCisgICAgJ0dJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKKyAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisgICAgIGdpdCBpbml0ICYmCisgICAgIGdpdCB1bnBhY2stb2JqZWN0cyAtbiA8dGVzdC0zLSR7cGFja25hbWVfM30ucGFjayAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2snCisKK3Vuc2V0IEdJVF9PQkpFQ1RfRElSRUNUT1JZCitjZCAiJFRSQVNILy5naXQyIgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrIHVucGFjayB3aXRoIE9GU19ERUxUQScgXAorICAgICcoY2QgLi4vLmdpdCAmJiBmaW5kIG9iamVjdHMgLXR5cGUgZiAtcHJpbnQpIHwKKyAgICAgd2hpbGUgcmVhZCBwYXRoCisgICAgIGRvCisgICAgICAgICBjbXAgJHBhdGggLi4vLmdpdC8kcGF0aCB8fCB7CisJICAgICBlY2hvICRwYXRoIGRpZmZlcnMuCisJICAgICByZXR1cm4gMQorCSB9CisgICAgIGRvbmUnCitjZCAiJFRSQVNIIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wYXJlIGRlbHRhIGZsYXZvcnMnICcKKwlwZXJsIC1lICdcJycKKwkJZGVmaW5lZCgkXyA9IC1zICRfKSBvciBkaWUgZm9yIEBBUkdWOworCQlleGl0IDEgaWYgJEFSR1ZbMF0gPD0gJEFSR1ZbMV07CisJJ1wnJyB0ZXN0LTItJHBhY2tuYW1lXzIucGFjayB0ZXN0LTMtJHBhY2tuYW1lXzMucGFjaworJworCitybSAtZnIgLmdpdDIKK21rZGlyIC5naXQyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1c2UgcGFja2VkIG9iamVjdHMnIFwKKyAgICAnR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdDIvb2JqZWN0cyAmJgorICAgICBleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKyAgICAgZ2l0IGluaXQgJiYKKyAgICAgY3AgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggLmdpdDIvb2JqZWN0cy9wYWNrICYmIHsKKwkgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXAgJGNvbW1pdCAmJgorCSB3aGlsZSByZWFkIG9iamVjdAorCSBkbworCSAgICB0PSQoZ2l0IGNhdC1maWxlIC10ICRvYmplY3QpICYmCisJICAgIGdpdCBjYXQtZmlsZSAkdCAkb2JqZWN0IHx8IHJldHVybiAxCisJIGRvbmUgPG9iai1saXN0CisgICAgfSA+Y3VycmVudCAmJgorICAgIGNtcCBleHBlY3QgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VzZSBwYWNrZWQgZGVsdGlmaWVkIChSRUZfREVMVEEpIG9iamVjdHMnIFwKKyAgICAnR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdDIvb2JqZWN0cyAmJgorICAgICBleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKyAgICAgcm0gLWYgLmdpdDIvb2JqZWN0cy9wYWNrL3Rlc3QtKiAmJgorICAgICBjcCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrIHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAuZ2l0Mi9vYmplY3RzL3BhY2sgJiYgeworCSBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCisJIHdoaWxlIHJlYWQgb2JqZWN0CisJIGRvCisJICAgIHQ9JChnaXQgY2F0LWZpbGUgLXQgJG9iamVjdCkgJiYKKwkgICAgZ2l0IGNhdC1maWxlICR0ICRvYmplY3QgfHwgcmV0dXJuIDEKKwkgZG9uZSA8b2JqLWxpc3QKKyAgICB9ID5jdXJyZW50ICYmCisgICAgY21wIGV4cGVjdCBjdXJyZW50JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndXNlIHBhY2tlZCBkZWx0aWZpZWQgKE9GU19ERUxUQSkgb2JqZWN0cycgXAorICAgICdHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCisgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorICAgICBybSAtZiAuZ2l0Mi9vYmplY3RzL3BhY2svdGVzdC0qICYmCisgICAgIGNwIHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgdGVzdC0zLSR7cGFja25hbWVfM30uaWR4IC5naXQyL29iamVjdHMvcGFjayAmJiB7CisJIGdpdCBkaWZmLXRyZWUgLS1yb290IC1wICRjb21taXQgJiYKKwkgd2hpbGUgcmVhZCBvYmplY3QKKwkgZG8KKwkgICAgdD0kKGdpdCBjYXQtZmlsZSAtdCAkb2JqZWN0KSAmJgorCSAgICBnaXQgY2F0LWZpbGUgJHQgJG9iamVjdCB8fCByZXR1cm4gMQorCSBkb25lIDxvYmotbGlzdAorICAgIH0gPmN1cnJlbnQgJiYKKyAgICBjbXAgZXhwZWN0IGN1cnJlbnQnCisKK3Vuc2V0IEdJVF9PQkpFQ1RfRElSRUNUT1JZCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1cnZpdmUgbWlzc2luZyBvYmplY3RzL3BhY2sgZGlyZWN0b3J5JyAnCisJKAorCQlybSAtZnIgbWlzc2luZy1wYWNrICYmCisJCW1rZGlyIG1pc3NpbmctcGFjayAmJgorCQljZCBtaXNzaW5nLXBhY2sgJiYKKwkJZ2l0IGluaXQgJiYKKwkJR09QPS5naXQvb2JqZWN0cy9wYWNrICYmCisJCXJtIC1mciAkR09QICYmCisJCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gLS1rZWVwPXRlc3QgPC4uL3Rlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgJiYKKwkJdGVzdCAtZiAkR09QL3BhY2stJHtwYWNrbmFtZV8zfS5wYWNrICYmCisJCWNtcCAkR09QL3BhY2stJHtwYWNrbmFtZV8zfS5wYWNrIC4uL3Rlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgJiYKKwkJdGVzdCAtZiAkR09QL3BhY2stJHtwYWNrbmFtZV8zfS5pZHggJiYKKwkJY21wICRHT1AvcGFjay0ke3BhY2tuYW1lXzN9LmlkeCAuLi90ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHggJiYKKwkJdGVzdCAtZiAkR09QL3BhY2stJHtwYWNrbmFtZV8zfS5rZWVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5IHBhY2snIFwKKyAgICAnZ2l0IHZlcmlmeS1wYWNrCXRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCBcCisJCQl0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggXAorCQkJdGVzdC0zLSR7cGFja25hbWVfM30uaWR4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5IHBhY2sgLXYnIFwKKyAgICAnZ2l0IHZlcmlmeS1wYWNrIC12CXRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCBcCisJCQl0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggXAorCQkJdGVzdC0zLSR7cGFja25hbWVfM30uaWR4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgY2F0Y2hlcyBtaXNtYXRjaGVkIC5pZHggYW5kIC5wYWNrIGZpbGVzJyBcCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggPnRlc3QtMy5pZHggJiYKKyAgICAgY2F0IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2sgPnRlc3QtMy5wYWNrICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMuaWR4CisgICAgIHRoZW4gZmFsc2UKKyAgICAgZWxzZSA6OworICAgICBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgYSBjb3JydXB0ZWQgcGFjayBzaWduYXR1cmUnIFwKKyAgICAnY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgPnRlc3QtMy5wYWNrICYmCisgICAgIGVjaG8gfCBkZCBvZj10ZXN0LTMucGFjayBjb3VudD0xIGJzPTEgY29udj1ub3RydW5jIHNlZWs9MiAmJgorICAgICBpZiBnaXQgdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAorICAgICB0aGVuIGZhbHNlCisgICAgIGVsc2UgOjsKKyAgICAgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayBjYXRjaGVzIGEgY29ycnVwdGVkIHBhY2sgdmVyc2lvbicgXAorICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgZWNobyB8IGRkIG9mPXRlc3QtMy5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz03ICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMuaWR4CisgICAgIHRoZW4gZmFsc2UKKyAgICAgZWxzZSA6OworICAgICBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgYSBjb3JydXB0ZWQgdHlwZS9zaXplIG9mIHRoZSAxc3QgcGFja2VkIG9iamVjdCBkYXRhJyBcCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBlY2hvIHwgZGQgb2Y9dGVzdC0zLnBhY2sgY291bnQ9MSBicz0xIGNvbnY9bm90cnVuYyBzZWVrPTEyICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMuaWR4CisgICAgIHRoZW4gZmFsc2UKKyAgICAgZWxzZSA6OworICAgICBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgYSBjb3JydXB0ZWQgc3VtIG9mIHRoZSBpbmRleCBmaWxlIGl0c2VsZicgXAorICAgICdsPSQod2MgLWMgPHRlc3QtMy5pZHgpICYmCisgICAgIGw9JChleHByICRsIC0gMjApICYmCisgICAgIGNhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBwcmludGYgIiUyMHMiICIiIHwgZGQgb2Y9dGVzdC0zLmlkeCBjb3VudD0yMCBicz0xIGNvbnY9bm90cnVuYyBzZWVrPSRsICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMucGFjaworICAgICB0aGVuIGZhbHNlCisgICAgIGVsc2UgOjsKKyAgICAgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdidWlsZCBwYWNrIGluZGV4IGZvciBhbiBleGlzdGluZyBwYWNrJyBcCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0bXAuaWR4IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAmJgorCisgICAgIGdpdCBpbmRleC1wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0ZXN0LTMuaWR4IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAmJgorCisgICAgIGNhdCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2sgJiYKKyAgICAgY21wIHRtcC5pZHggdGVzdC0yLSR7cGFja25hbWVfMn0uaWR4ICYmCisKKyAgICAgZ2l0IGluZGV4LXBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgY21wIHRlc3QtMy5pZHggdGVzdC0yLSR7cGFja25hbWVfMn0uaWR4ICYmCisKKyAgICAgY2F0IHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgPnRlc3QtMy5wYWNrICYmCisgICAgIGdpdCBpbmRleC1wYWNrIC1vIHRtcC5pZHggdGVzdC0zLSR7cGFja25hbWVfM30ucGFjayAmJgorICAgICBjbXAgdG1wLmlkeCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHggJiYKKworICAgICBnaXQgaW5kZXgtcGFjayB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdGVzdC0zLmlkeCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHggJiYKKworICAgICBjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC00LnBhY2sgJiYKKyAgICAgcm0gLWYgdGVzdC00LmtlZXAgJiYKKyAgICAgZ2l0IGluZGV4LXBhY2sgLS1rZWVwPXdoeSB0ZXN0LTQucGFjayAmJgorICAgICBjbXAgdGVzdC0xLSR7cGFja25hbWVfMX0uaWR4IHRlc3QtNC5pZHggJiYKKyAgICAgdGVzdCAtZiB0ZXN0LTQua2VlcCAmJgorCisgICAgIDonCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucGFja2luZyB3aXRoIC0tc3RyaWN0JyAnCisKKwlmb3IgaiBpbiBhIGIgYyBkIGUgZiBnCisJZG8KKwkJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJbz0kKGVjaG8gJGokaSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQkJZWNobyAiMTAwNjQ0ICRvCTAgJGokaSIKKwkJZG9uZQorCWRvbmUgPkxJU1QgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPExJU1QgJiYKKwlMSVNUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWhlYWQgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJTEk9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJdGFpbCAtbiAxMCBMSVNUIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgIiRMSVNUIiAiJExJIiAiJFNUIiA+YWN0dWFsICYmCisJUEFDSzU9JCggZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTUgPGFjdHVhbCApICYmCisJUEFDSzY9JCggKAorCQkJZWNobyAiJExJU1QiCisJCQllY2hvICIkTEkiCisJCQllY2hvICIkU1QiCisJCSApIHwgZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTYgKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC01ICYmCisJKAorCQljZCB0ZXN0LTUgJiYKKwkJZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IDwuLi90ZXN0LTUtJFBBQ0s1LnBhY2sgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJExJU1QgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJExJICYmCisJCWdpdCBscy10cmVlIC1yICRTVAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtNiAmJgorCSgKKwkJIyB0cmVlLW9ubHkgaW50byBlbXB0eSByZXBvIC0tIG1hbnkgdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QgPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkgJiYKKwkoCisJCSMgYWxyZWFkeSBwb3B1bGF0ZWQgLS0gbm8gdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNSAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QgPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayB3aXRoIC0tc3RyaWN0JyAnCisKKwlmb3IgaiBpbiBhIGIgYyBkIGUgZiBnCisJZG8KKwkJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJbz0kKGVjaG8gJGokaSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQkJZWNobyAiMTAwNjQ0ICRvCTAgJGokaSIKKwkJZG9uZQorCWRvbmUgPkxJU1QgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPExJU1QgJiYKKwlMSVNUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWhlYWQgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJTEk9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJdGFpbCAtbiAxMCBMSVNUIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgIiRMSVNUIiAiJExJIiAiJFNUIiA+YWN0dWFsICYmCisJUEFDSzU9JCggZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTUgPGFjdHVhbCApICYmCisJUEFDSzY9JCggKAorCQkJZWNobyAiJExJU1QiCisJCQllY2hvICIkTEkiCisJCQllY2hvICIkU1QiCisJCSApIHwgZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTYgKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC03ICYmCisJKAorCQljZCB0ZXN0LTcgJiYKKwkJZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgLS1zdGRpbiA8Li4vdGVzdC01LSRQQUNLNS5wYWNrICYmCisJCWdpdCBscy10cmVlIC1yICRMSVNUICYmCisJCWdpdCBscy10cmVlIC1yICRMSSAmJgorCQlnaXQgbHMtdHJlZSAtciAkU1QKKwkpICYmCisJdGVzdF9jcmVhdGVfcmVwbyB0ZXN0LTggJiYKKwkoCisJCSMgdHJlZS1vbmx5IGludG8gZW1wdHkgcmVwbyAtLSBtYW55IHVucmVhY2hhYmxlcworCQljZCB0ZXN0LTggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgLS1zdGRpbiA8Li4vdGVzdC02LSRQQUNLNi5wYWNrCisJKSAmJgorCSgKKwkJIyBhbHJlYWR5IHBvcHVsYXRlZCAtLSBubyB1bnJlYWNoYWJsZXMKKwkJY2QgdGVzdC03ICYmCisJCWdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9ub3IgcGFjay5wYWNrU2l6ZUxpbWl0JyAnCisJZ2l0IGNvbmZpZyBwYWNrLnBhY2tTaXplTGltaXQgM20gJiYKKwlwYWNrbmFtZV8xMD0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC0xMCA8b2JqLWxpc3QpICYmCisJdGVzdCAyID0gJChscyB0ZXN0LTEwLSoucGFjayB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgcmVzdWx0aW5nIHBhY2tzJyAnCisJZ2l0IHZlcmlmeS1wYWNrIHRlc3QtMTAtKi5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvbGVyYXRlIHBhY2tzaXplbGltaXQgc21hbGxlciB0aGFuIGJpZ2dlc3Qgb2JqZWN0JyAnCisJZ2l0IGNvbmZpZyBwYWNrLnBhY2tTaXplTGltaXQgMSAmJgorCXBhY2tuYW1lXzExPSQoZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTExIDxvYmotbGlzdCkgJiYKKwl0ZXN0IDUgPSAkKGxzIHRlc3QtMTEtKi5wYWNrIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSByZXN1bHRpbmcgcGFja3MnICcKKwlnaXQgdmVyaWZ5LXBhY2sgdGVzdC0xMS0qLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHBhY2sgZm9yIG5vbi1yZXBvIHRlc3RzJyAnCisJIyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHBhY2sgd2l0aCBubyBtYXRjaGluZyBpbmRleCBmaWxlCisJY3AgdGVzdC0xLSoucGFjayBmb28ucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIC0tc3RkaW4gY29tcGxhaW5zIG9mIG5vbi1yZXBvJyAnCisJbm9uZ2l0IHRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPGZvby5wYWNrICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgbm9uLXJlcG8vLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIDxwYWNrPiB3b3JrcyBpbiBub24tcmVwbycgJworCW5vbmdpdCBnaXQgaW5kZXgtcGFjayAuLi9mb28ucGFjayAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvby5pZHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayAtLXN0cmljdCA8cGFjaz4gd29ya3MgaW4gbm9uLXJlcG8nICcKKwlybSAtZiBmb28uaWR4ICYmCisJbm9uZ2l0IGdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC4uL2Zvby5wYWNrICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vLmlkeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFQVEhSRUFEUyxDX0xPQ0FMRV9PVVRQVVQgJ2luZGV4LXBhY2sgLS10aHJlYWRzPU4gb3IgcGFjay50aHJlYWRzPU4gd2FybnMgd2hlbiBubyBwdGhyZWFkcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz0yIDI+ZXJyICYmCisJZ3JlcCBed2FybmluZzogZXJyID53YXJuaW5ncyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgd2FybmluZ3MgJiYKKwlncmVwIC1GICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcz0yIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBwYWNrLnRocmVhZHM9MiBpbmRleC1wYWNrIDI+ZXJyICYmCisJZ3JlcCBed2FybmluZzogZXJyID53YXJuaW5ncyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgd2FybmluZ3MgJiYKKwlncmVwIC1GICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIHBhY2sudGhyZWFkcyIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcGFjay50aHJlYWRzPTIgaW5kZXgtcGFjayAtLXRocmVhZHM9NCAyPmVyciAmJgorCWdyZXAgXndhcm5pbmc6IGVyciA+d2FybmluZ3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIHdhcm5pbmdzICYmCisJZ3JlcCAtRiAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHM9NCIgZXJyICYmCisJZ3JlcCAtRiAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyBwYWNrLnRocmVhZHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFQVEhSRUFEUyxDX0xPQ0FMRV9PVVRQVVQgJ3BhY2stb2JqZWN0cyAtLXRocmVhZHM9TiBvciBwYWNrLnRocmVhZHM9TiB3YXJucyB3aGVuIG5vIHB0aHJlYWRzJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXRocmVhZHM9MiAtLXN0ZG91dCAtLWFsbCA8L2Rldi9udWxsID4vZGV2L251bGwgMj5lcnIgJiYKKwlncmVwIF53YXJuaW5nOiBlcnIgPndhcm5pbmdzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSB3YXJuaW5ncyAmJgorCWdyZXAgLUYgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgLS10aHJlYWRzIiBlcnIgJiYKKworCWdpdCAtYyBwYWNrLnRocmVhZHM9MiBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1hbGwgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+ZXJyICYmCisJZ3JlcCBed2FybmluZzogZXJyID53YXJuaW5ncyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgd2FybmluZ3MgJiYKKwlncmVwIC1GICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIHBhY2sudGhyZWFkcyIgZXJyICYmCisKKwlnaXQgLWMgcGFjay50aHJlYWRzPTIgcGFjay1vYmplY3RzIC0tdGhyZWFkcz00IC0tc3Rkb3V0IC0tYWxsIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPmVyciAmJgorCWdyZXAgXndhcm5pbmc6IGVyciA+d2FybmluZ3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIHdhcm5pbmdzICYmCisJZ3JlcCAtRiAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAtLXRocmVhZHMiIGVyciAmJgorCWdyZXAgLUYgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgcGFjay50aHJlYWRzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIGluIHRvby1tYW55LXBhY2tzIG1vZGUnICcKKwlHSVRfVEVTVF9GVUxMX0lOX1BBQ0tfQVJSQVk9MSBnaXQgcmVwYWNrIC1hZCAmJgorCWdpdCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBmYWtlIGEgU0hBMSBoYXNoIGNvbGxpc2lvbicgJworCWdpdCBpbml0IGNvcnJ1cHQgJiYKKwkoCisJCWNkIGNvcnJ1cHQgJiYKKwkJbG9uZ19hPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC4uL2EgfCBzZWQgLWUgInMhXi4uISYvISIpICYmCisJCWxvbmdfYj0kKGdpdCBoYXNoLW9iamVjdCAtdyAuLi9iIHwgc2VkIC1lICJzIV4uLiEmLyEiKSAmJgorCQl0ZXN0IC1mCS5naXQvb2JqZWN0cy8kbG9uZ19iICYmCisJCWNwIC1mCS5naXQvb2JqZWN0cy8kbG9uZ19hIFwKKwkJCS5naXQvb2JqZWN0cy8kbG9uZ19iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgaW5kZXgtcGFjayBkZXRlY3RzIHRoZSBTSEExIGNvbGxpc2lvbicgJworCSgKKwkJY2QgY29ycnVwdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtbyAuLi9iYWQuaWR4IC4uL3Rlc3QtMy5wYWNrIDI+bXNnICYmCisJCXRlc3RfaTE4bmdyZXAgIlNIQTEgQ09MTElTSU9OIEZPVU5EIiBtc2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSBpbmRleC1wYWNrIGRldGVjdHMgdGhlIFNIQTEgY29sbGlzaW9uIChsYXJnZSBibG9icyknICcKKwkoCisJCWNkIGNvcnJ1cHQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvcmUuYmlnZmlsZXRocmVzaG9sZD0xIGluZGV4LXBhY2sgLW8gLi4vYmFkLmlkeCAuLi90ZXN0LTMucGFjayAyPm1zZyAmJgorCQl0ZXN0X2kxOG5ncmVwICJTSEExIENPTExJU0lPTiBGT1VORCIgbXNnCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDEtc2xpZGluZy13aW5kb3cuc2ggYi90L3Q1MzAxLXNsaWRpbmctd2luZG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2Zjk3OTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzAxLXNsaWRpbmctd2luZG93LnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J21tYXAgc2xpZGluZyB3aW5kb3cgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NldHVwJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXgqICYmCisgICAgIGZvciBpIGluIGEgYiBjCisgICAgIGRvCisgICAgICAgICBlY2hvICRpID4kaSAmJgorCSB0ZXN0LXRvb2wgZ2VucmFuZG9tICIkaSIgMzI3NjggPj4kaSAmJgorICAgICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAkaSB8fCByZXR1cm4gMQorICAgICBkb25lICYmCisgICAgIGVjaG8gZCA+ZCAmJiBjYXQgYyA+PmQgJiYgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkICYmCisgICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgY29tbWl0MT0kKGdpdCBjb21taXQtdHJlZSAkdHJlZSA8L2Rldi9udWxsKSAmJgorICAgICBnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQxICYmCisgICAgIGdpdCByZXBhY2sgLWEgLWQgJiYKKyAgICAgdGVzdCAiJChnaXQgY291bnQtb2JqZWN0cykiID0gIjAgb2JqZWN0cywgMCBraWxvYnl0ZXMiICYmCisgICAgIHBhY2sxPSQobHMgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrKSAmJgorICAgICB0ZXN0IC1mICIkcGFjazEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgLXYsIGRlZmF1bHRzJyBcCisgICAgJ2dpdCB2ZXJpZnktcGFjayAtdiAiJHBhY2sxIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIC12LCBwYWNrZWRHaXRXaW5kb3dTaXplID09IDEgcGFnZScgXAorICAgICdnaXQgY29uZmlnIGNvcmUucGFja2VkR2l0V2luZG93U2l6ZSA1MTIgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrIC12ICIkcGFjazEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgLXYsIHBhY2tlZEdpdHtXaW5kb3dTaXplLExpbWl0fSA9PSAxIHBhZ2UnIFwKKyAgICAnZ2l0IGNvbmZpZyBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgNTEyICYmCisgICAgIGdpdCBjb25maWcgY29yZS5wYWNrZWRHaXRMaW1pdCA1MTIgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrIC12ICIkcGFjazEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVwYWNrIC1hIC1kLCBwYWNrZWRHaXR7V2luZG93U2l6ZSxMaW1pdH0gPT0gMSBwYWdlJyBcCisgICAgJ2dpdCBjb25maWcgY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplIDUxMiAmJgorICAgICBnaXQgY29uZmlnIGNvcmUucGFja2VkR2l0TGltaXQgNTEyICYmCisgICAgIGNvbW1pdDI9JChnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgJGNvbW1pdDEgPC9kZXYvbnVsbCkgJiYKKyAgICAgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0MiAmJgorICAgICBnaXQgcmVwYWNrIC1hIC1kICYmCisgICAgIHRlc3QgIiQoZ2l0IGNvdW50LW9iamVjdHMpIiA9ICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiAmJgorICAgICBwYWNrMj0kKGxzIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjaykgJiYKKyAgICAgdGVzdCAtZiAiJHBhY2syIiAmJgorICAgICB0ZXN0ICIkcGFjazEiIFwhPSAiJHBhY2syIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIC12LCBkZWZhdWx0cycgXAorICAgICdnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplICYmCisgICAgIGdpdCBjb25maWcgLS11bnNldCBjb3JlLnBhY2tlZEdpdExpbWl0ICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAtdiAiJHBhY2syIicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAyLXBhY2staW5kZXguc2ggYi90L3Q1MzAyLXBhY2staW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWQwN2YyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDItcGFjay1pbmRleC5zaApAQCAtMCwwICsxLDI3MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBOaWNvbGFzIFBpdHJlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhY2sgaW5kZXggd2l0aCA2NC1iaXQgb2Zmc2V0cyBhbmQgb2JqZWN0IENSQycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworICAgICB0ZXN0X29pZF9pbml0ICYmCisgICAgIHJhd3N6PSQodGVzdF9vaWQgcmF3c3opICYmCisgICAgIHJtIC1yZiAuZ2l0ICYmCisgICAgIGdpdCBpbml0ICYmCisgICAgIGdpdCBjb25maWcgcGFjay50aHJlYWRzIDEgJiYKKyAgICAgaT0xICYmCisgICAgIHdoaWxlIHRlc3QgJGkgLWxlIDEwMAorICAgICBkbworICAgICAgICAgaWlpPSQocHJpbnRmICclMDNpJyAkaSkKKwkgdGVzdC10b29sIGdlbnJhbmRvbSAiYmFyIiAyMDAgPiB3aWRlX2RlbHRhXyRpaWkgJiYKKwkgdGVzdC10b29sIGdlbnJhbmRvbSAiYmF6ICRpaWkiIDUwID4+IHdpZGVfZGVsdGFfJGlpaSAmJgorCSB0ZXN0LXRvb2wgZ2VucmFuZG9tICJmb28iJGkgMTAwID4gZGVlcF9kZWx0YV8kaWlpICYmCisJIHRlc3QtdG9vbCBnZW5yYW5kb20gImZvbyIkKGV4cHIgJGkgKyAxKSAxMDAgPj4gZGVlcF9kZWx0YV8kaWlpICYmCisJIHRlc3QtdG9vbCBnZW5yYW5kb20gImZvbyIkKGV4cHIgJGkgKyAyKSAxMDAgPj4gZGVlcF9kZWx0YV8kaWlpICYmCisgICAgICAgICBlY2hvICRpaWkgPmZpbGVfJGlpaSAmJgorCSB0ZXN0LXRvb2wgZ2VucmFuZG9tICIkaWlpIiA4MTkyID4+ZmlsZV8kaWlpICYmCisgICAgICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGVfJGlpaSBkZWVwX2RlbHRhXyRpaWkgd2lkZV9kZWx0YV8kaWlpICYmCisgICAgICAgICBpPSQoZXhwciAkaSArIDEpIHx8IHJldHVybiAxCisgICAgIGRvbmUgJiYKKyAgICAgeyBlY2hvIDEwMSAmJiB0ZXN0LXRvb2wgZ2VucmFuZG9tIDEwMCA4MTkyOyB9ID5maWxlXzEwMSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGVfMTAxICYmCisgICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlIDwvZGV2L251bGwpICYmIHsKKwkgZWNobyAkdHJlZSAmJgorCSBnaXQgbHMtdHJlZSAkdHJlZSB8IHNlZCAtZSAicy8uKiBcXChbMC05YS1mXSpcXCkJLiovXFwxLyIKKyAgICAgfSA+b2JqLWxpc3QgJiYKKyAgICAgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrLW9iamVjdHMgd2l0aCBpbmRleCB2ZXJzaW9uIDEnIFwKKyAgICAncGFjazE9JChnaXQgcGFjay1vYmplY3RzIC0taW5kZXgtdmVyc2lvbj0xIHRlc3QtMSA8b2JqLWxpc3QpICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAtdiAidGVzdC0xLSR7cGFjazF9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjay1vYmplY3RzIHdpdGggaW5kZXggdmVyc2lvbiAyJyBcCisgICAgJ3BhY2syPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiB0ZXN0LTIgPG9iai1saXN0KSAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgLXYgInRlc3QtMi0ke3BhY2syfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2JvdGggcGFja3Mgc2hvdWxkIGJlIGlkZW50aWNhbCcgXAorICAgICdjbXAgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAidGVzdC0yLSR7cGFjazJ9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW5kZXggdjEgYW5kIGluZGV4IHYyIHNob3VsZCBiZSBkaWZmZXJlbnQnIFwKKyAgICAnISBjbXAgInRlc3QtMS0ke3BhY2sxfS5pZHgiICJ0ZXN0LTItJHtwYWNrMn0uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4LXBhY2sgd2l0aCBpbmRleCB2ZXJzaW9uIDEnIFwKKyAgICAnZ2l0IGluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTEgLW8gMS5pZHggInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4LXBhY2sgd2l0aCBpbmRleCB2ZXJzaW9uIDInIFwKKyAgICAnZ2l0IGluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTIgLW8gMi5pZHggInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4LXBhY2sgcmVzdWx0cyBzaG91bGQgbWF0Y2ggcGFjay1vYmplY3RzIG9uZXMnIFwKKyAgICAnY21wICJ0ZXN0LTEtJHtwYWNrMX0uaWR4IiAiMS5pZHgiICYmCisgICAgIGNtcCAidGVzdC0yLSR7cGFjazJ9LmlkeCIgIjIuaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayAtLXZlcmlmeSBvbiBpbmRleCB2ZXJzaW9uIDEnICcKKwlnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAidGVzdC0xLSR7cGFjazF9LnBhY2siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgLS12ZXJpZnkgb24gaW5kZXggdmVyc2lvbiAyJyAnCisJZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgInRlc3QtMi0ke3BhY2syfS5wYWNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjay1vYmplY3RzIC0taW5kZXgtdmVyc2lvbj0yLCBpcyBub3QgYWNjZXB0ZWQnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiwgdGVzdC0zIDxvYmotbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4IHYyOiBmb3JjZSBzb21lIDY0LWJpdCBvZmZzZXRzIHdpdGggcGFjay1vYmplY3RzJyBcCisgICAgJ3BhY2szPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiwweDQwMDAwIHRlc3QtMyA8b2JqLWxpc3QpJworCitpZiBtc2c9JChnaXQgdmVyaWZ5LXBhY2sgLXYgInRlc3QtMy0ke3BhY2szfS5wYWNrIiAyPiYxKSB8fAorCSEgKGVjaG8gIiRtc2ciIHwgZ3JlcCAicGFjayB0b28gbGFyZ2UgLiogb2ZmX3QiKQordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBPRkY2NF9UCitlbHNlCisJc2F5ICIjIHNraXBwaW5nIHRlc3RzIGNvbmNlcm5pbmcgNjQtYml0IG9mZnNldHMiCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAorICAgICdpbmRleCB2MjogdmVyaWZ5IGEgcGFjayB3aXRoIHNvbWUgNjQtYml0IG9mZnNldHMnIFwKKyAgICAnZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTMtJHtwYWNrM30ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgT0ZGNjRfVCBcCisgICAgJzY0LWJpdCBvZmZzZXRzOiBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgaW5kZXggdjIgcmVzdWx0cycgXAorICAgICchIGNtcCAidGVzdC0yLSR7cGFjazJ9LmlkeCIgInRlc3QtMy0ke3BhY2szfS5pZHgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAorICAgICdpbmRleCB2MjogZm9yY2Ugc29tZSA2NC1iaXQgb2Zmc2V0cyB3aXRoIGluZGV4LXBhY2snIFwKKyAgICAnZ2l0IGluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTIsMHg0MDAwMCAtbyAzLmlkeCAidGVzdC0xLSR7cGFjazF9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAorICAgICc2NC1iaXQgb2Zmc2V0czogaW5kZXgtcGFjayByZXN1bHQgc2hvdWxkIG1hdGNoIHBhY2stb2JqZWN0cyBvbmUnIFwKKyAgICAnY21wICJ0ZXN0LTMtJHtwYWNrM30uaWR4IiAiMy5pZHgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgJ2luZGV4LXBhY2sgLS12ZXJpZnkgb24gNjQtYml0IG9mZnNldCB2MiAoY2hlYXQpJyAnCisJIyBUaGlzIGNoZWF0cyBieSBrbm93aW5nIHdoaWNoIGxvd2VyIG9mZnNldCBzaG91bGQgc3RpbGwgYmUgZW5jb2RlZAorCSMgaW4gNjQtYml0IHJlcHJlc2VudGF0aW9uLgorCWdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5IC0taW5kZXgtdmVyc2lvbj0yLDB4NDAwMDAgInRlc3QtMy0ke3BhY2szfS5wYWNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgJ2luZGV4LXBhY2sgLS12ZXJpZnkgb24gNjQtYml0IG9mZnNldCB2MicgJworCWdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5ICJ0ZXN0LTMtJHtwYWNrM30ucGFjayIKKycKKworIyByZXR1cm5zIHRoZSBvYmplY3QgbnVtYmVyIGZvciBnaXZlbiBvYmplY3QgaW4gZ2l2ZW4gcGFjayBpbmRleAoraW5kZXhfb2JqX25yKCkKK3sKKyAgICBpZHhfZmlsZT0kMQorICAgIG9iamVjdF9zaGExPSQyCisgICAgbnI9MAorICAgIGdpdCBzaG93LWluZGV4IDwgJGlkeF9maWxlIHwKKyAgICB3aGlsZSByZWFkIG9mZnMgc2hhMSBleHRyYQorICAgIGRvCisgICAgICBucj0kKCgkbnIgKyAxKSkKKyAgICAgIHRlc3QgIiRzaGExIiA9ICIkb2JqZWN0X3NoYTEiIHx8IGNvbnRpbnVlCisgICAgICBlY2hvICIkKCgkbnIgLSAxKSkiCisgICAgICBicmVhaworICAgIGRvbmUKK30KKworIyByZXR1cm5zIHRoZSBwYWNrIG9mZnNldCBmb3IgZ2l2ZW4gb2JqZWN0IGFzIGZvdW5kIGluIGdpdmVuIHBhY2sgaW5kZXgKK2luZGV4X29ial9vZmZzZXQoKQoreworICAgIGlkeF9maWxlPSQxCisgICAgb2JqZWN0X3NoYTE9JDIKKyAgICBnaXQgc2hvdy1pbmRleCA8ICRpZHhfZmlsZSB8IGdyZXAgJG9iamVjdF9zaGExIHwKKyAgICAoIHJlYWQgb2ZmcyBleHRyYSAmJiBlY2hvICIkb2ZmcyIgKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSAxKSBzdHJlYW0gcGFjayB0byByZXBvc2l0b3J5JyBcCisgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0xIC0tc3RkaW4gPCAidGVzdC0xLSR7cGFjazF9LnBhY2siICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IGNvdW50LW9iamVjdHMgfCAoIHJlYWQgbnIgcmVzdCAmJiB0ZXN0ICIkbnIiIC1lcSAxICkgJiYKKyAgICAgY21wICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayIgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgY21wICJ0ZXN0LTEtJHtwYWNrMX0uaWR4IiAgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gMikgY3JlYXRlIGEgc3RlYWx0aCBjb3JydXB0aW9uIGluIGEgZGVsdGEgYmFzZSByZWZlcmVuY2UnIFwKKyAgICAnIyBUaGlzIHRlc3QgYXNzdW1lcyBmaWxlXzEwMSBpcyBhIGRlbHRhIHNtYWxsZXIgdGhhbiAxNiBieXRlcy4KKyAgICAgIyBJdCBzaG91bGQgYmUgYWdhaW5zdCBmaWxlXzEwMCBidXQgd2Ugc3Vic3RpdHV0ZSBpdHMgYmFzZSBmb3IgZmlsZV8wOTkKKyAgICAgc2hhMV8xMDE9JChnaXQgaGFzaC1vYmplY3QgZmlsZV8xMDEpICYmCisgICAgIHNoYTFfMDk5PSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVfMDk5KSAmJgorICAgICBvZmZzXzEwMT0kKGluZGV4X29ial9vZmZzZXQgMS5pZHggJHNoYTFfMTAxKSAmJgorICAgICBucl8wOTk9JChpbmRleF9vYmpfbnIgMS5pZHggJHNoYTFfMDk5KSAmJgorICAgICBjaG1vZCArdyAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiAmJgorICAgICByZWNvcmRzej0kKChyYXdzeiArIDQpKSAmJgorICAgICBkZCBvZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiBzZWVrPSQoKCRvZmZzXzEwMSArIDEpKSBcCisgICAgICAgIGlmPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCIgXAorICAgICAgICBza2lwPSQoKDQgKyAyNTYgKiA0ICsgJG5yXzA5OSAqIHJlY29yZHN6KSkgXAorICAgICAgICBicz0xIGNvdW50PSRyYXdzeiBjb252PW5vdHJ1bmMgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJHNoYTFfMTAxID4gZmlsZV8xMDFfZm9vMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gMykgY29ycnVwdGVkIGRlbHRhIGhhcHBpbHkgcmV0dXJuZWQgd3JvbmcgZGF0YScgXAorICAgICd0ZXN0IC1mIGZpbGVfMTAxX2ZvbzEgJiYgISBjbXAgZmlsZV8xMDEgZmlsZV8xMDFfZm9vMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gNCkgY29uZmlybSB0aGF0IHRoZSBwYWNrIGlzIGFjdHVhbGx5IGNvcnJ1cHRlZCcgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLWZ1bGwgJGNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gNSkgcGFjay1vYmplY3RzIGhhcHBpbHkgcmV1c2VzIGNvcnJ1cHRlZCBkYXRhJyBcCisgICAgJ3BhY2s0PSQoZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTQgPG9iai1saXN0KSAmJgorICAgICB0ZXN0IC1mICJ0ZXN0LTQtJHtwYWNrNH0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDYpIG5ld2x5IGNyZWF0ZWQgcGFjayBpcyBCQUQgIScgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LXBhY2sgLXYgInRlc3QtNC0ke3BhY2s0fS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gMSkgc3RyZWFtIHBhY2sgdG8gcmVwb3NpdG9yeScgXAorICAgICdybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisgICAgIGdpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0yIC0tc3RkaW4gPCAidGVzdC0xLSR7cGFjazF9LnBhY2siICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IGNvdW50LW9iamVjdHMgfCAoIHJlYWQgbnIgcmVzdCAmJiB0ZXN0ICIkbnIiIC1lcSAxICkgJiYKKyAgICAgY21wICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayIgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgY21wICJ0ZXN0LTItJHtwYWNrMX0uaWR4IiAgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gMikgY3JlYXRlIGEgc3RlYWx0aCBjb3JydXB0aW9uIGluIGEgZGVsdGEgYmFzZSByZWZlcmVuY2UnIFwKKyAgICAnIyBUaGlzIHRlc3QgYXNzdW1lcyBmaWxlXzEwMSBpcyBhIGRlbHRhIHNtYWxsZXIgdGhhbiAxNiBieXRlcy4KKyAgICAgIyBJdCBzaG91bGQgYmUgYWdhaW5zdCBmaWxlXzEwMCBidXQgd2Ugc3Vic3RpdHV0ZSBpdHMgYmFzZSBmb3IgZmlsZV8wOTkKKyAgICAgc2hhMV8xMDE9JChnaXQgaGFzaC1vYmplY3QgZmlsZV8xMDEpICYmCisgICAgIHNoYTFfMDk5PSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVfMDk5KSAmJgorICAgICBvZmZzXzEwMT0kKGluZGV4X29ial9vZmZzZXQgMS5pZHggJHNoYTFfMTAxKSAmJgorICAgICBucl8wOTk9JChpbmRleF9vYmpfbnIgMS5pZHggJHNoYTFfMDk5KSAmJgorICAgICBjaG1vZCArdyAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBkZCBvZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiBzZWVrPSQoKCRvZmZzXzEwMSArIDEpKSBcCisgICAgICAgIGlmPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCIgXAorICAgICAgICBza2lwPSQoKDggKyAyNTYgKiA0ICsgJG5yXzA5OSAqIHJhd3N6KSkgXAorICAgICAgICBicz0xIGNvdW50PSRyYXdzeiBjb252PW5vdHJ1bmMgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJHNoYTFfMTAxID4gZmlsZV8xMDFfZm9vMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gMykgY29ycnVwdGVkIGRlbHRhIGhhcHBpbHkgcmV0dXJuZWQgd3JvbmcgZGF0YScgXAorICAgICd0ZXN0IC1mIGZpbGVfMTAxX2ZvbzIgJiYgISBjbXAgZmlsZV8xMDEgZmlsZV8xMDFfZm9vMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gNCkgY29uZmlybSB0aGF0IHRoZSBwYWNrIGlzIGFjdHVhbGx5IGNvcnJ1cHRlZCcgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLWZ1bGwgJGNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gNSkgcGFjay1vYmplY3RzIHJlZnVzZXMgdG8gcmV1c2UgY29ycnVwdGVkIGRhdGEnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTUgPG9iai1saXN0ICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgLS1uby1yZXVzZS1vYmplY3QgdGVzdC02IDxvYmotbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2Ml0gNikgdmVyaWZ5LXBhY2sgZGV0ZWN0cyBDUkMgbWlzbWF0Y2gnIFwKKyAgICAncm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtLWluZGV4LXZlcnNpb249MiAtLXN0ZGluIDwgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgb2JqPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVfMDAxKSAmJgorICAgICBucj0kKGluZGV4X29ial9uciAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiICRvYmopICYmCisgICAgIGNobW9kICt3ICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCIgJiYKKyAgICAgcHJpbnRmIHh4eHggfCBkZCBvZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiIGNvbnY9bm90cnVuYyBcCisgICAgICAgIGJzPTEgY291bnQ9NCBzZWVrPSQoKDggKyAyNTYgKiA0ICsgJCh3YyAtbCA8b2JqLWxpc3QpICogcmF3c3ogKyAkbnIgKiA0KSkgJiYKKyAgICAgKCB3aGlsZSByZWFkIG9iagorICAgICAgIGRvIGdpdCBjYXQtZmlsZSAtcCAkb2JqID4vZGV2L251bGwgfHwgZXhpdCAxCisgICAgICAgZG9uZSA8b2JqLWxpc3QgKSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LXBhY2sgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyBpbmRleC1wYWNrIGluIHRoZSBvYmplY3Qgc3RvcmUnICcKKyAgICBybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisgICAgY3AgdGVzdC0xLSR7cGFjazF9LnBhY2sgLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrICYmCisgICAgKAorCWNkIC5naXQvb2JqZWN0cy9wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgcGFjay0ke3BhY2sxfS5wYWNrCisgICAgKSAmJgorICAgIHRlc3QgLWYgLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayAtLXN0cmljdCB3YXJucyB1cG9uIG1pc3NpbmcgdGFnZ2VyIGluIHRhZycgJworICAgIHNoYT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKyAgICBjYXQgPndyb25nLXRhZyA8PEVPRiAmJgorb2JqZWN0ICRzaGEKK3R5cGUgY29tbWl0Cit0YWcgZ3V0ZW4gdGFnCisKK1RoaXMgaXMgYW4gaW52YWxpZCB0YWcuCitFT0YKKworICAgIHRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdCB0YWcgLXcgLS1zdGRpbiA8d3JvbmctdGFnKSAmJgorICAgIHBhY2sxPSQoZWNobyAkdGFnICRzaGEgfCBnaXQgcGFjay1vYmplY3RzIHRhZy10ZXN0KSAmJgorICAgIGVjaG8gcmVtb3ZlIHRhZyBvYmplY3QgJiYKKyAgICB0aGlydHllaWdodD0ke3RhZyM/P30gJiYKKyAgICBybSAtZiAuZ2l0L29iamVjdHMvJHt0YWclJHRoaXJ0eWVpZ2h0fS8kdGhpcnR5ZWlnaHQgJiYKKyAgICBnaXQgaW5kZXgtcGFjayAtLXN0cmljdCB0YWctdGVzdC0ke3BhY2sxfS5wYWNrIDI+ZXJyICYmCisgICAgZ3JlcCAiXndhcm5pbmc6LiogZXhwZWN0ZWQgLnRhZ2dlci4gbGluZSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgLS1mc2NrLW9iamVjdHMgYWxzbyB3YXJucyB1cG9uIG1pc3NpbmcgdGFnZ2VyIGluIHRhZycgJworICAgIGdpdCBpbmRleC1wYWNrIC0tZnNjay1vYmplY3RzIHRhZy10ZXN0LSR7cGFjazF9LnBhY2sgMj5lcnIgJiYKKyAgICBncmVwICJed2FybmluZzouKiBleHBlY3RlZCAudGFnZ2VyLiBsaW5lIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAzLXBhY2stY29ycnVwdGlvbi1yZXNpbGllbmNlLnNoIGIvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MWU2ZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaApAQCAtMCwwICsxLDQwMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOaWNvbGFzIFBpdHJlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc2lsaWVuY2UgdG8gcGFjayBjb3JydXB0aW9ucyB3aXRoIHJlZHVuZGFudCBvYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgTm90ZTogdGhlIHRlc3Qgb2JqZWN0cyBhcmUgY3JlYXRlZCB3aXRoIGtub3dsZWRnZSBvZiB0aGVpciBwYWNrIGVuY29kaW5nCisjIHRvIGVuc3VyZSBnb29kIGNvZGUgcGF0aCBjb3ZlcmFnZSwgYW5kIHRvIGZhY2lsaXRhdGUgZGlyZWN0IGFsdGVyYXRpb24KKyMgbGF0ZXIgb24uICBUaGUgYXNzdW1lZCBjaGFyYWN0ZXJpc3RpY3MgYXJlOgorIworIyAxKSBibG9iXzIgaXMgYSBkZWx0YSB3aXRoIGJsb2JfMSBmb3IgYmFzZSBhbmQgYmxvYl8zIGlzIGEgZGVsdGEgd2l0aCBibG9iMgorIyAgICBmb3IgYmFzZSwgc3VjaCB0aGF0IGJsb2JfMyBkZWx0YSBkZXB0aCBpcyAyOworIworIyAyKSB0aGUgYnVsayBvZiBvYmplY3QgZGF0YSBpcyB1bmNvbXByZXNzaWJsZSBzbyB0aGUgdGV4dCBwYXJ0IHJlbWFpbnMKKyMgICAgdmlzaWJsZTsKKyMKKyMgMykgb2JqZWN0IGhlYWRlciBpcyBhbHdheXMgMiBieXRlcy4KKworY3JlYXRlX3Rlc3RfZmlsZXMoKSB7CisgICAgdGVzdC10b29sIGdlbnJhbmRvbSAiZm9vIiAyMDAwID4gZmlsZV8xICYmCisgICAgdGVzdC10b29sIGdlbnJhbmRvbSAiZm9vIiAxODAwID4gZmlsZV8yICYmCisgICAgdGVzdC10b29sIGdlbnJhbmRvbSAiZm9vIiAxODAwID4gZmlsZV8zICYmCisgICAgZWNobyAiIGJhc2UgIiA+PiBmaWxlXzEgJiYKKyAgICBlY2hvICIgZGVsdGExICIgPj4gZmlsZV8yICYmCisgICAgZWNobyAiIGRlbHRhIGRlbHRhMiAiID4+IGZpbGVfMyAmJgorICAgIHRlc3QtdG9vbCBnZW5yYW5kb20gImJhciIgMTUwID4+IGZpbGVfMiAmJgorICAgIHRlc3QtdG9vbCBnZW5yYW5kb20gImJheiIgMTAwID4+IGZpbGVfMworfQorCitjcmVhdGVfbmV3X3BhY2soKSB7CisgICAgcm0gLXJmIC5naXQgJiYKKyAgICBnaXQgaW5pdCAmJgorICAgIGJsb2JfMT0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMSkgJiYKKyAgICBibG9iXzI9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIpICYmCisgICAgYmxvYl8zPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8zKSAmJgorICAgIHBhY2s9JChwcmludGYgIiRibG9iXzFcbiRibG9iXzJcbiRibG9iXzNcbiIgfAorICAgICAgICAgIGdpdCBwYWNrLW9iamVjdHMgJEAgLmdpdC9vYmplY3RzL3BhY2svcGFjaykgJiYKKyAgICBwYWNrPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFja30iICYmCisgICAgZ2l0IHZlcmlmeS1wYWNrIC12ICR7cGFja30ucGFjaworfQorCitkb19yZXBhY2soKSB7CisgICAgcGFjaz0kKHByaW50ZiAiJGJsb2JfMVxuJGJsb2JfMlxuJGJsb2JfM1xuIiB8CisgICAgICAgICAgZ2l0IHBhY2stb2JqZWN0cyAkQCAuZ2l0L29iamVjdHMvcGFjay9wYWNrKSAmJgorICAgIHBhY2s9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrfSIKK30KKworZG9fY29ycnVwdF9vYmplY3QoKSB7CisgICAgb2ZzPSQoZ2l0IHNob3ctaW5kZXggPCAke3BhY2t9LmlkeCB8IGdyZXAgJDEgfCBjdXQgLWYxIC1kIiAiKSAmJgorICAgIG9mcz0kKCgkb2ZzICsgJDIpKSAmJgorICAgIGNobW9kICt3ICR7cGFja30ucGFjayAmJgorICAgIGRkIG9mPSR7cGFja30ucGFjayBicz0xIGNvbnY9bm90cnVuYyBzZWVrPSRvZnMgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrCit9CisKK3ByaW50ZiAnXDAnID4gemVybworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW5pdGlhbCBzZXR1cCB2YWxpZGF0aW9uJyBcCisgICAgJ2NyZWF0ZV90ZXN0X2ZpbGVzICYmCisgICAgIGNyZWF0ZV9uZXdfcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIGNvcnJ1cHRpb24gaW4gaGVhZGVyIG9mIGZpcnN0IG9iamVjdCcgXAorICAgICdkb19jb3JydXB0X29iamVjdCAkYmxvYl8xIDAgPCB6ZXJvICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8xICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgbG9vc2UgY29weSBvZiBmaXJzdCBkZWx0YSBhbGxvd3MgZm9yIHBhcnRpYWwgcmVjb3ZlcnknIFwKKyAgICAnZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIG12ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIGNvcnJ1cHRpb24gaW4gZGF0YSBvZiBmaXJzdCBvYmplY3QnIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgY2htb2QgK3cgJHtwYWNrfS5wYWNrICYmCisgICAgIHBlcmwgLWkuYmFrIC1wZSAicy8gYmFzZSAvYWJjZGVmLyIgJHtwYWNrfS5wYWNrICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8xICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgbG9vc2UgY29weSBvZiBzZWNvbmQgb2JqZWN0IGFsbG93cyBmb3IgcGFydGlhbCByZWNvdmVyeScgXAorICAgICdnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgY29ycnVwdGlvbiBpbiBoZWFkZXIgb2YgZmlyc3QgZGVsdGEnIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAwIDwgemVybyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBjb3JydXB0aW9uIGluIGRhdGEgb2YgZmlyc3QgZGVsdGEnIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgY2htb2QgK3cgJHtwYWNrfS5wYWNrICYmCisgICAgIHBlcmwgLWkuYmFrIC1wZSAicy8gZGVsdGExIC9hYmNkZWZnaC8iICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvcnJ1cHRpb24gaW4gZGVsdGEgYmFzZSByZWZlcmVuY2Ugb2YgZmlyc3QgZGVsdGEgKE9CSl9SRUZfREVMVEEpJyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGRvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzIgMiA8IHplcm8gJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYnV0IGhhdmluZyBhIGxvb3NlIGNvcHkgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5JyBcCisgICAgJ212ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCB0aGVuIGEgcmVwYWNrICJjbGVhcnMiIHRoZSBjb3JydXB0aW9uJyBcCisgICAgJ2RvX3JlcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb3JydXB0aW9uICMwIGluIGRlbHRhIGJhc2UgcmVmZXJlbmNlIG9mIGZpcnN0IGRlbHRhIChPQkpfT0ZTX0RFTFRBKScgXAorICAgICdjcmVhdGVfbmV3X3BhY2sgLS1kZWx0YS1iYXNlLW9mZnNldCAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGRvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzIgMiA8IHplcm8gJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYnV0IGhhdmluZyBhIGxvb3NlIGNvcHkgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5JyBcCisgICAgJ212ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzIgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCB0aGVuIGEgcmVwYWNrICJjbGVhcnMiIHRoZSBjb3JydXB0aW9uJyBcCisgICAgJ2RvX3JlcGFjayAtLWRlbHRhLWJhc2Utb2Zmc2V0ICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvcnJ1cHRpb24gIzEgaW4gZGVsdGEgYmFzZSByZWZlcmVuY2Ugb2YgZmlyc3QgZGVsdGEgKE9CSl9PRlNfREVMVEEpJyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAtLWRlbHRhLWJhc2Utb2Zmc2V0ICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgcHJpbnRmICJcMDAxIiB8IGRvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzIgMiAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCBhIHJlZHVuZGFudCBwYWNrIGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeSB0b28nIFwKKyAgICAnZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyIDwgemVybyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCAmJgorICAgICBtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8xICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBwcmludGYgIiRibG9iXzFcbiRibG9iXzJcbiIgfCBnaXQgcGFjay1vYmplY3RzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb3JydXB0aW9uIG9mIGRlbHRhIGJhc2UgcmVmZXJlbmNlIHBvaW50aW5nIHRvIHdyb25nIG9iamVjdCcgXAorICAgICdjcmVhdGVfbmV3X3BhY2sgLS1kZWx0YS1iYXNlLW9mZnNldCAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIHByaW50ZiAiXDIyMFwwMzMiIHwgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMyAyICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPi9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4vZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+L2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8zICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgdGhlbiBhIHJlcGFjayAiY2xlYXJzIiB0aGUgY29ycnVwdGlvbicgXAorICAgICdkb19yZXBhY2sgLS1kZWx0YS1iYXNlLW9mZnNldCAtLW5vLXJldXNlLWRlbHRhICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvcnJ1cHRpbmcgaGVhZGVyIHRvIGhhdmUgdG9vIHNtYWxsIG91dHB1dCBidWZmZXIgZmFpbHMgdW5wYWNrJyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIHByaW50ZiAiXDI2MlwwMDEiIHwgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMSAwICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCisjIFwwIC0gZW1wdHkgYmFzZQorIyBcMSAtIG9uZSBieXRlIGluIHJlc3VsdAorIyBcMSAtIG9uZSBsaXRlcmFsIGJ5dGUgKFgpCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYXBwbHkgZ29vZCBtaW5pbWFsIGRlbHRhJyBcCisgICAgJ3ByaW50ZiAiXDBcMVwxWCIgPiBtaW5pbWFsX2RlbHRhICYmCisgICAgIHRlc3QtdG9vbCBkZWx0YSAtcCAvZGV2L251bGwgbWluaW1hbF9kZWx0YSAvZGV2L251bGwnCisKKyMgXDAgLSBlbXB0eSBiYXNlCisjIFwxIC0gMSBieXRlIGluIHJlc3VsdAorIyBcMiAtIHR3byBsaXRlcmFsIGJ5dGVzIChvbmUgdG9vIG1hbnkpCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYXBwbHkgZGVsdGEgd2l0aCB0b28gbWFueSBsaXRlcmFsIGJ5dGVzJyBcCisgICAgJ3ByaW50ZiAiXDBcMVwyWFgiID4gdG9vX2JpZ19saXRlcmFsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkZWx0YSAtcCAvZGV2L251bGwgdG9vX2JpZ19saXRlcmFsIC9kZXYvbnVsbCcKKworIyBcNCAtIGZvdXIgYnl0ZXMgaW4gYmFzZQorIyBcMSAtIG9uZSBieXRlIGluIHJlc3VsdAorIyBcMjIxIC0gY29weSwgb25lIGJ5dGUgb2Zmc2V0LCBvbmUgYnl0ZSBzaXplCisjICAgXDAgLSBjb3B5IGZyb20gb2Zmc2V0IDAKKyMgICBcMiAtIGNvcHkgdHdvIGJ5dGVzIChvbmUgdG9vIG1hbnkpCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYXBwbHkgZGVsdGEgd2l0aCB0b28gbWFueSBjb3BpZWQgYnl0ZXMnIFwKKyAgICAncHJpbnRmICJcNFwxXDIyMVwwXDIiID4gdG9vX2JpZ19jb3B5ICYmCisgICAgIHByaW50ZiBiYXNlID5iYXNlICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBkZWx0YSAtcCBiYXNlIHRvb19iaWdfY29weSAvZGV2L251bGwnCisKKyMgXDAgLSBlbXB0eSBiYXNlCisjIFwyIC0gdHdvIGJ5dGVzIGluIHJlc3VsdAorIyBcMiAtIHR3byBsaXRlcmFsIGJ5dGVzICh3ZSBhcmUgc2hvcnQgb25lKQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FwcGx5IGRlbHRhIHdpdGggdG9vIGZldyBsaXRlcmFsIGJ5dGVzJyBcCisgICAgJ3ByaW50ZiAiXDBcMlwyWCIgPiB0cnVuY2F0ZWRfZGVsdGEgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIGRlbHRhIC1wIC9kZXYvbnVsbCB0cnVuY2F0ZWRfZGVsdGEgL2Rldi9udWxsJworCisjIFwwIC0gZW1wdHkgYmFzZQorIyBcMSAtIG9uZSBieXRlIGluIHJlc3VsdAorIyBcMjIxIC0gY29weSwgb25lIGJ5dGUgb2Zmc2V0LCBvbmUgYnl0ZSBzaXplCisjICAgXDAgLSBjb3B5IGZyb20gb2Zmc2V0IDAKKyMgICBcMSAtIGNvcHkgb25lIGJ5dGUgKHdlIGFyZSBzaG9ydCBvbmUpCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYXBwbHkgZGVsdGEgd2l0aCB0b28gZmV3IGJ5dGVzIGluIGJhc2UnIFwKKyAgICAncHJpbnRmICJcMFwxXDIyMVwwXDEiID4gdHJ1bmNhdGVkX2Jhc2UgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIGRlbHRhIC1wIC9kZXYvbnVsbCB0cnVuY2F0ZWRfYmFzZSAvZGV2L251bGwnCisKKyMgXDQgLSBmb3VyIGJ5dGVzIGluIGJhc2UKKyMgXDIgLSB0d28gYnl0ZXMgaW4gcmVzdWx0CisjIFwxIC0gb25lIGxpdGVyYWwgYnl0ZSAoWCkKKyMgXDIyMSAtIGNvcHksIG9uZSBieXRlIG9mZnNldCwgb25lIGJ5dGUgc2l6ZQorIyAgICAgICAgKG9mZnNldC9zaXplIG1pc3NpbmcpCisjCisjIE5vdGUgdGhhdCB0aGUgbGl0ZXJhbCBieXRlIGlzIG5lY2Vzc2FyeSB0byBnZXQgcGFzdCB0aGUgdW5pbnRlcmVzdGluZyBtaW5pbXVtCisjIGRlbHRhIHNpemUgY2hlY2suCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYXBwbHkgZGVsdGEgd2l0aCB0cnVuY2F0ZWQgY29weSBwYXJhbWV0ZXJzJyBcCisgICAgJ3ByaW50ZiAiXDRcMlwxWFwyMjEiID4gdHJ1bmNhdGVkX2NvcHlfZGVsdGEgJiYKKyAgICAgcHJpbnRmIGJhc2UgPmJhc2UgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIGRlbHRhIC1wIGJhc2UgdHJ1bmNhdGVkX2NvcHlfZGVsdGEgL2Rldi9udWxsJworCisjIFwwIC0gZW1wdHkgYmFzZQorIyBcMSAtIG9uZSBieXRlIGluIHJlc3VsdAorIyBcMSAtIG9uZSBsaXRlcmFsIGJ5dGUgKFgpCisjIFwxIC0gdHJhaWxpbmcgZ2FyYmFnZSBjb21tYW5kCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYXBwbHkgZGVsdGEgd2l0aCB0cmFpbGluZyBnYXJiYWdlIGxpdGVyYWwnIFwKKyAgICAncHJpbnRmICJcMFwxXDFYXDEiID4gdGFpbF9nYXJiYWdlX2xpdGVyYWwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIGRlbHRhIC1wIC9kZXYvbnVsbCB0YWlsX2dhcmJhZ2VfbGl0ZXJhbCAvZGV2L251bGwnCisKKyMgXDQgLSBmb3VyIGJ5dGVzIGluIGJhc2UKKyMgXDEgLSBvbmUgYnl0ZSBpbiByZXN1bHQKKyMgXDEgLSBvbmUgbGl0ZXJhbCBieXRlIChYKQorIyBcMjIxIC0gY29weSwgb25lIGJ5dGUgb2Zmc2V0LCBvbmUgYnl0ZSBzaXplCisjICAgXDAgLSBjb3B5IGZyb20gb2Zmc2V0IDAKKyMgICBcMSAtIGNvcHkgMSBieXRlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYXBwbHkgZGVsdGEgd2l0aCB0cmFpbGluZyBnYXJiYWdlIGNvcHknIFwKKyAgICAncHJpbnRmICJcNFwxXDFYXDIyMVwwXDEiID4gdGFpbF9nYXJiYWdlX2NvcHkgJiYKKyAgICAgcHJpbnRmIGJhc2UgPmJhc2UgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIGRlbHRhIC1wIC9kZXYvbnVsbCB0YWlsX2dhcmJhZ2VfY29weSAvZGV2L251bGwnCisKKyMgXDAgLSBlbXB0eSBiYXNlCisjIFwxIC0gb25lIGJ5dGUgaW4gcmVzdWx0CisjIFwxIC0gb25lIGxpdGVyYWwgYnl0ZSAoWCkKKyMgXDAgLSBib2d1cyBvcGNvZGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhcHBseSBkZWx0YSB3aXRoIHRyYWlsaW5nIGdhcmJhZ2Ugb3Bjb2RlJyBcCisgICAgJ3ByaW50ZiAiXDBcMVwxWFwwIiA+IHRhaWxfZ2FyYmFnZV9vcGNvZGUgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIGRlbHRhIC1wIC9kZXYvbnVsbCB0YWlsX2dhcmJhZ2Vfb3Bjb2RlIC9kZXYvbnVsbCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzA0LXBydW5lLnNoIGIvdC90NTMwNC1wcnVuZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZjYwZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwNC1wcnVuZS5zaApAQCAtMCwwICsxLDM1MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3BydW5lJworLiAuL3Rlc3QtbGliLnNoCisKK2RheT0kKCg2MCo2MCoyNCkpCit3ZWVrPSQoKCRkYXkqNykpCisKK2FkZF9ibG9iKCkgeworCWJlZm9yZT0kKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwlCTE9CPSQoZWNobyBhbGVwaF8wIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJQkxPQl9GSUxFPS5naXQvb2JqZWN0cy8kKGVjaG8gJEJMT0IgfCBzZWQgInMvXi4uLyZcLy8iKSAmJgorCXZlcmJvc2UgdGVzdCAkKCgxICsgJGJlZm9yZSkpID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJEJMT0JfRklMRSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0rMCAkQkxPQl9GSUxFCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJOiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgZ2MKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBzdGFsZSBwYWNrcycgJworCisJb3JpZ19wYWNrPSQoZWNobyAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2spICYmCisJOiA+IC5naXQvb2JqZWN0cy90bXBfMS5wYWNrICYmCisJOiA+IC5naXQvb2JqZWN0cy90bXBfMi5wYWNrICYmCisJdGVzdC10b29sIGNobXRpbWUgPS04NjUwMSAuZ2l0L29iamVjdHMvdG1wXzEucGFjayAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZSAxLmRheSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvcmlnX3BhY2sgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L29iamVjdHMvdG1wXzIucGFjayAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvb2JqZWN0cy90bXBfMS5wYWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1leHBpcmUnICcKKworCWFkZF9ibG9iICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPTEuaG91ci5hZ28gJiYKKwl2ZXJib3NlIHRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LTg2NTAwICRCTE9CX0ZJTEUgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmUgMS5kYXkgJiYKKwl2ZXJib3NlIHRlc3QgJGJlZm9yZSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogaW1wbGljaXQgcHJ1bmUgLS1leHBpcmUnICcKKworCWFkZF9ibG9iICYmCisJdGVzdC10b29sIGNobXRpbWUgPS0kKCgyKiR3ZWVrLTMwKSkgJEJMT0JfRklMRSAmJgorCWdpdCBnYyAmJgorCXZlcmJvc2UgdGVzdCAkKCgxICsgJGJlZm9yZSkpID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJEJMT0JfRklMRSAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tJCgoMiokd2VlaysxKSkgJEJMT0JfRklMRSAmJgorCWdpdCBnYyAmJgorCXZlcmJvc2UgdGVzdCAkYmVmb3JlID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djOiByZWZ1c2UgdG8gc3RhcnQgd2l0aCBpbnZhbGlkIGdjLnBydW5lRXhwaXJlJyAnCisKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIGludmFsaWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ2MKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogc3RhcnQgd2l0aCBvayBnYy5wcnVuZUV4cGlyZScgJworCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSAyLmRheXMuYWdvICYmCisJZ2l0IGdjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IHBydW5lIG5vbnNlbnNlIHBhcmFtZXRlcnMnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZSBnYXJiYWdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHBydW5lIC0tLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZSAtLW5vLXN1Y2gtb3B0aW9uCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IHBydW5lIHVucmVhY2hhYmxlIGhlYWRzJyAnCisKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBmYWxzZSAmJgorCW12IC5naXQvbG9ncyAuZ2l0L2xvZ3Mub2xkICYmCisJOiA+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gdGVtcG9yYXJ5ICYmCisJdG1wX2hlYWQ9JChnaXQgcmV2LWxpc3QgLTEgSEVBRCkgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgcHJ1bmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgJHRtcF9oZWFkIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IGRvIG5vdCBwcnVuZSBkZXRhY2hlZCBIRUFEIHdpdGggbm8gcmVmbG9nJyAnCisKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggLS1xdWlldCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZGV0YWNoZWQgY29tbWl0IiAmJgorCSMgdmVyaWZ5IHRoYXQgdGhlcmUgaXMgbm8gcmVmbG9ncworCSMgKHNob3VsZCBiZSByZW1vdmVkIGFuZCBkaXNhYmxlZCBieSBwcmV2aW91cyB0ZXN0KQorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvbG9ncyAmJgorCWdpdCBwcnVuZSAtbiA+cHJ1bmVfYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHBydW5lX2FjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBwcnVuZSBmb3JtZXIgSEVBRCBhZnRlciBjaGVja2luZyBvdXQgYnJhbmNoJyAnCisKKwloZWFkX29pZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXIgJiYKKwlnaXQgcHJ1bmUgLXYgPnBydW5lX2FjdHVhbCAmJgorCWdyZXAgIiRoZWFkX29pZCIgcHJ1bmVfYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IGRvIG5vdCBwcnVuZSBoZWFkcyBsaXN0ZWQgYXMgYW4gYXJndW1lbnQnICcKKworCTogPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRlbXBvcmFyeSAmJgorCXRtcF9oZWFkPSQoZ2l0IHJldi1saXN0IC0xIEhFQUQpICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IHBydW5lIC0tICR0bXBfaGVhZCAmJgorCWdpdCByZXNldCAkdG1wX2hlYWQgLS0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtLW5vLXBydW5lJyAnCisKKwlhZGRfYmxvYiAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tJCgoNTAwMSokZGF5KSkgJEJMT0JfRklMRSAmJgorCWdpdCBjb25maWcgZ2MucHJ1bmVFeHBpcmUgMi5kYXlzLmFnbyAmJgorCWdpdCBnYyAtLW5vLXBydW5lICYmCisJdmVyYm9zZSB0ZXN0IDEgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgcmVzcGVjdHMgZ2MucHJ1bmVFeHBpcmUnICcKKworCWdpdCBjb25maWcgZ2MucHJ1bmVFeHBpcmUgNTAwMi5kYXlzLmFnbyAmJgorCWdpdCBnYyAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIDUwMDAuZGF5cy5hZ28gJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1wcnVuZT08ZGF0ZT4nICcKKworCWFkZF9ibG9iICYmCisJdGVzdC10b29sIGNobXRpbWUgPS0kKCg1MDAxKiRkYXkpKSAkQkxPQl9GSUxFICYmCisJZ2l0IGdjIC0tcHJ1bmU9NTAwMi5kYXlzLmFnbyAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwlnaXQgZ2MgLS1wcnVuZT01MDAwLmRheXMuYWdvICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIC0tcHJ1bmU9bmV2ZXInICcKKworCWFkZF9ibG9iICYmCisJZ2l0IGdjIC0tcHJ1bmU9bmV2ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJZ2l0IGdjIC0tcHJ1bmU9bm93ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIHJlc3BlY3RzIGdjLnBydW5lRXhwaXJlPW5ldmVyJyAnCisKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIG5ldmVyICYmCisJYWRkX2Jsb2IgJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSBub3cgJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1leHBpcmU9bmV2ZXInICcKKworCWFkZF9ibG9iICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPW5ldmVyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJEJMT0JfRklMRSAmJgorCWdpdCBwcnVuZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogcHJ1bmUgb2xkIG9iamVjdHMgYWZ0ZXIgbG9jYWwgY2xvbmUnICcKKwlhZGRfYmxvYiAmJgorCXRlc3QtdG9vbCBjaG10aW1lID0tJCgoMiokd2VlaysxKSkgJEJMT0JfRklMRSAmJgorCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIGFjbG9uZSAmJgorCSgKKwkJY2QgYWNsb25lICYmCisJCXZlcmJvc2UgdGVzdCAxID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwkJZ2l0IGdjIC0tcHJ1bmUgJiYKKwkJdmVyYm9zZSB0ZXN0IDAgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2FyYmFnZSByZXBvcnQgaW4gY291bnQtb2JqZWN0cyAtdicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2svZmFrZSoiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay9mb28qIiAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2ZvbyAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zvby5iYXIgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mb28ua2VlcCAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zvby5wYWNrICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZmFrZS5iYXIgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlLmtlZXAgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlLnBhY2sgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlLmlkeCAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UyLmtlZXAgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlMy5pZHggJiYKKwlnaXQgY291bnQtb2JqZWN0cyAtdiAyPnN0ZGVyciAmJgorCWdyZXAgImluZGV4IGZpbGUgLmdpdC9vYmplY3RzL3BhY2svZmFrZS5pZHggaXMgdG9vIHNtYWxsIiBzdGRlcnIgJiYKKwlncmVwICJed2FybmluZzoiIHN0ZGVyciB8IHNvcnQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCit3YXJuaW5nOiBnYXJiYWdlIGZvdW5kOiAuZ2l0L29iamVjdHMvcGFjay9mYWtlLmJhcgord2FybmluZzogZ2FyYmFnZSBmb3VuZDogLmdpdC9vYmplY3RzL3BhY2svZm9vCit3YXJuaW5nOiBnYXJiYWdlIGZvdW5kOiAuZ2l0L29iamVjdHMvcGFjay9mb28uYmFyCit3YXJuaW5nOiBubyBjb3JyZXNwb25kaW5nIC5pZHggb3IgLnBhY2s6IC5naXQvb2JqZWN0cy9wYWNrL2Zha2UyLmtlZXAKK3dhcm5pbmc6IG5vIGNvcnJlc3BvbmRpbmcgLmlkeDogLmdpdC9vYmplY3RzL3BhY2svZm9vLmtlZXAKK3dhcm5pbmc6IG5vIGNvcnJlc3BvbmRpbmcgLmlkeDogLmdpdC9vYmplY3RzL3BhY2svZm9vLnBhY2sKK3dhcm5pbmc6IG5vIGNvcnJlc3BvbmRpbmcgLnBhY2s6IC5naXQvb2JqZWN0cy9wYWNrL2Zha2UzLmlkeAorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuIHBhY2sgZ2FyYmFnZSB3aXRoIGdjJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFjay9mYWtlKiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrL2ZvbyoiICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZm9vLmtlZXAgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mb28ucGFjayAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UuaWR4ICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZmFrZTIua2VlcCAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UyLmlkeCAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UzLmtlZXAgJiYKKwlnaXQgZ2MgJiYKKwlnaXQgY291bnQtb2JqZWN0cyAtdiAyPnN0ZGVyciAmJgorCWdyZXAgIl53YXJuaW5nOiIgc3RkZXJyIHwgc29ydCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK3dhcm5pbmc6IG5vIGNvcnJlc3BvbmRpbmcgLmlkeCBvciAucGFjazogLmdpdC9vYmplY3RzL3BhY2svZmFrZTMua2VlcAord2FybmluZzogbm8gY29ycmVzcG9uZGluZyAuaWR4OiAuZ2l0L29iamVjdHMvcGFjay9mb28ua2VlcAord2FybmluZzogbm8gY29ycmVzcG9uZGluZyAuaWR4OiAuZ2l0L29iamVjdHMvcGFjay9mb28ucGFjaworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC5naXQvc2hhbGxvdycgJworCW9pZD0kKGVjaG8gaGl8Z2l0IGNvbW1pdC10cmVlIEhFQURee3RyZWV9KSAmJgorCWVjaG8gJG9pZCA+LmdpdC9zaGFsbG93ICYmCisJZ2l0IHBydW5lIC0tZHJ5LXJ1biA+b3V0ICYmCisJZ3JlcCAkb2lkIC5naXQvc2hhbGxvdyAmJgorCWdyZXAgJG9pZCBvdXQgJiYKKwlnaXQgcHJ1bmUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NoYWxsb3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLmdpdC9zaGFsbG93IHdoZW4gdGhlcmUgYXJlIG5vIGxvb3NlIG9iamVjdHMnICcKKwlvaWQ9JChlY2hvIGhpfGdpdCBjb21taXQtdHJlZSBIRUFEXnt0cmVlfSkgJiYKKwllY2hvICRvaWQgPi5naXQvc2hhbGxvdyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvc2hhbGxvdy10aXAgJG9pZCAmJgorCWdpdCByZXBhY2sgLWFkICYmCisJIyB2ZXJpZnkgYXNzdW1wdGlvbiB0aGF0IGFsbCBsb29zZSBvYmplY3RzIGFyZSBnb25lCisJZ2l0IGNvdW50LW9iamVjdHMgfCBncmVwIF4wICYmCisJZ2l0IHBydW5lICYmCisJZWNobyAkb2lkID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBoYW5kbGUgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZScgJworCXRlc3RfY3JlYXRlX3JlcG8gQSAmJgorCWdpdCAtQyBBIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgY2xvbmUgLS1zaGFyZWQgQSBCICYmCisJZ2l0IC1DIEIgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIm5leHQgY29tbWl0IiAmJgorCWdpdCAtQyBCIHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBoYW5kbGUgaW5kZXggaW4gbXVsdGlwbGUgd29ya3RyZWVzJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCBzZWNvbmQtd29ya3RyZWUgJiYKKwllY2hvICJuZXcgYmxvYiBmb3Igc2Vjb25kLXdvcmt0cmVlIiA+c2Vjb25kLXdvcmt0cmVlL2Jsb2IgJiYKKwlnaXQgLUMgc2Vjb25kLXdvcmt0cmVlIGFkZCBibG9iICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPW5vdyAmJgorCWdpdCAtQyBzZWNvbmQtd29ya3RyZWUgc2hvdyA6YmxvYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgc2Vjb25kLXdvcmt0cmVlL2Jsb2IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lOiBoYW5kbGUgSEVBRCBpbiBtdWx0aXBsZSB3b3JrdHJlZXMnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIHRoaXJkLXdvcmt0cmVlICYmCisJZWNobyAibmV3IGJsb2IgZm9yIHRoaXJkLXdvcmt0cmVlIiA+dGhpcmQtd29ya3RyZWUvYmxvYiAmJgorCWdpdCAtQyB0aGlyZC13b3JrdHJlZSBhZGQgYmxvYiAmJgorCWdpdCAtQyB0aGlyZC13b3JrdHJlZSBjb21taXQgLW0gInRoaXJkIiAmJgorCXJtIC5naXQvd29ya3RyZWVzL3RoaXJkLXdvcmt0cmVlL2luZGV4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHRoaXJkLXdvcmt0cmVlIHNob3cgOmJsb2IgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9bm93ICYmCisJZ2l0IC1DIHRoaXJkLXdvcmt0cmVlIHNob3cgSEVBRDpibG9iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0aGlyZC13b3JrdHJlZS9ibG9iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZTogaGFuZGxlIEhFQUQgcmVmbG9nIGluIG11bHRpcGxlIHdvcmt0cmVlcycgJworCWdpdCBjb25maWcgY29yZS5sb2dBbGxSZWZVcGRhdGVzIHRydWUgJiYKKwllY2hvICJsb3N0IGJsb2IgZm9yIHRoaXJkLXdvcmt0cmVlIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHRoaXJkLXdvcmt0cmVlICYmCisJCWNhdCAuLi9leHBlY3RlZCA+YmxvYiAmJgorCQlnaXQgYWRkIGJsb2IgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGNvbW1pdCBpbiB0aGlyZCIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9bm93ICYmCisJb2lkPWBnaXQgaGFzaC1vYmplY3QgZXhwZWN0ZWRgICYmCisJZ2l0IC1DIHRoaXJkLXdvcmt0cmVlIHNob3cgIiRvaWQiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IGhhbmRsZSBleHBpcmUgb3B0aW9uIGNvcnJlY3RseScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZSAtLWV4cGlyZSAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAicmVxdWlyZXMgYSB2YWx1ZSIgZXJyb3IgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZSAtLWV4cGlyZT1ueWFoIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJtYWxmb3JtZWQgZXhwaXJhdGlvbiIgZXJyb3IgJiYKKworCWdpdCBwcnVuZSAtLW5vLWV4cGlyZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cml2aWFsIHBydW5lIHdpdGggYml0bWFwcyBlbmFibGVkJyAnCisJZ2l0IHJlcGFjayAtYWRiICYmCisJYmxvYj0kKGVjaG8gYml0bWFwLXVucmVhY2hhYmxlLWJsb2IgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9bm93ICYmCisJZ2l0IGNhdC1maWxlIC1lIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLWUgJGJsb2IKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzA1LWluY2x1ZGUtdGFnLnNoIGIvdC90NTMwNS1pbmNsdWRlLXRhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWVjYTIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwNS1pbmNsdWRlLXRhZy5zaApAQCAtMCwwICsxLDExOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwYWNrLW9iamVjdCAtLWluY2x1ZGUtdGFnJworLiAuL3Rlc3QtbGliLnNoCisKK1RSQVNIPSQocHdkKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGMgPmQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGQgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlIDwvZGV2L251bGwpICYmCisJZWNobyAib2JqZWN0ICRjb21taXQiID5zaWcgJiYKKwllY2hvICJ0eXBlIGNvbW1pdCIgPj5zaWcgJiYKKwllY2hvICJ0YWcgbXl0YWciID4+c2lnICYmCisJZWNobyAidGFnZ2VyICQoZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UKSIgPj5zaWcgJiYKKwllY2hvID4+c2lnICYmCisJZWNobyAib3VyIHRlc3QgdGFnIiA+PnNpZyAmJgorCXRhZz0kKGdpdCBta3RhZyA8c2lnKSAmJgorCXJtIGQgc2lnICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy90YWdzL215dGFnICR0YWcgJiYgeworCQllY2hvICR0cmVlICYmCisJCWVjaG8gJGNvbW1pdCAmJgorCQlnaXQgbHMtdHJlZSAkdHJlZSB8IHNlZCAtZSAicy8uKiBcXChbMC05YS1mXSpcXCkJLiovXFwxLyIKKwl9ID5vYmotbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHdpdGhvdXQgLS1pbmNsdWRlLXRhZycgJworCXBhY2tuYW1lPSQoZ2l0IHBhY2stb2JqZWN0cyBcCisJCS0td2luZG93PTAgXAorCQl0ZXN0LW5vLWluY2x1ZGUgPG9iai1saXN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2sgb2JqZWN0cycgJworCXJtIC1yZiBjbG9uZS5naXQgJiYKKwlnaXQgaW5pdCBjbG9uZS5naXQgJiYKKwlnaXQgLUMgY2xvbmUuZ2l0IHVucGFjay1vYmplY3RzIDx0ZXN0LW5vLWluY2x1ZGUtJHtwYWNrbmFtZX0ucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB1bnBhY2tlZCByZXN1bHQgKGhhdmUgY29tbWl0LCBubyB0YWcpJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkY29tbWl0ID5saXN0LmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBjbG9uZS5naXQgY2F0LWZpbGUgLWUgJHRhZyAmJgorCWdpdCAtQyBjbG9uZS5naXQgcmV2LWxpc3QgLS1vYmplY3RzICRjb21taXQgPmxpc3QuYWN0dWFsICYmCisJdGVzdF9jbXAgbGlzdC5leHBlY3QgbGlzdC5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRoIC0taW5jbHVkZS10YWcnICcKKwlwYWNrbmFtZT0kKGdpdCBwYWNrLW9iamVjdHMgXAorCQktLXdpbmRvdz0wIFwKKwkJLS1pbmNsdWRlLXRhZyBcCisJCXRlc3QtaW5jbHVkZSA8b2JqLWxpc3QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucGFjayBvYmplY3RzJyAnCisJcm0gLXJmIGNsb25lLmdpdCAmJgorCWdpdCBpbml0IGNsb25lLmdpdCAmJgorCWdpdCAtQyBjbG9uZS5naXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtaW5jbHVkZS0ke3BhY2tuYW1lfS5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVucGFja2VkIHJlc3VsdCAoaGF2ZSBjb21taXQsIGhhdmUgdGFnKScgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgbXl0YWcgPmxpc3QuZXhwZWN0ICYmCisJZ2l0IC1DIGNsb25lLmdpdCByZXYtbGlzdCAtLW9iamVjdHMgJHRhZyA+bGlzdC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBsaXN0LmV4cGVjdCBsaXN0LmFjdHVhbAorJworCisjIEEgdGFnIG9mIGEgdGFnLCB3aGVyZSB0aGUgImlubmVyIiB0YWcgaXMgbm90IG90aGVyd2lzZQorIyByZWFjaGFibGUsIGFuZCBhIGZ1bGwgcGVlbCBwb2ludHMgdG8gYSBjb21taXQgcmVhY2hhYmxlIGZyb20gSEVBRC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBoaWRkZW4gaW5uZXIgdGFnJyAnCisJdGVzdF9jb21taXQgY29tbWl0ICYmCisJZ2l0IHRhZyAtbSBpbm5lciBpbm5lciBIRUFEICYmCisJZ2l0IHRhZyAtbSBvdXRlciBvdXRlciBpbm5lciAmJgorCWdpdCB0YWcgLWQgaW5uZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayBleHBsaWNpdCBvdXRlciB0YWcnICcKKwlwYWNrbmFtZT0kKAorCQl7CisJCQllY2hvIEhFQUQgJiYKKwkJCWVjaG8gb3V0ZXIKKwkJfSB8CisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIHRlc3QtaGlkZGVuLWV4cGxpY2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2sgb2JqZWN0cycgJworCXJtIC1yZiBjbG9uZS5naXQgJiYKKwlnaXQgaW5pdCBjbG9uZS5naXQgJiYKKwlnaXQgLUMgY2xvbmUuZ2l0IHVucGFjay1vYmplY3RzIDx0ZXN0LWhpZGRlbi1leHBsaWNpdC0ke3BhY2tuYW1lfS5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVucGFja2VkIHJlc3VsdCAoaGF2ZSBhbGwgb2JqZWN0cyknICcKKwlnaXQgLUMgY2xvbmUuZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkKGdpdCByZXYtcGFyc2Ugb3V0ZXIgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayBpbXBsaWVkIG91dGVyIHRhZycgJworCXBhY2tuYW1lPSQoCisJCWVjaG8gSEVBRCB8CisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC0taW5jbHVkZS10YWcgdGVzdC1oaWRkZW4taW1wbGllZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNrIG9iamVjdHMnICcKKwlybSAtcmYgY2xvbmUuZ2l0ICYmCisJZ2l0IGluaXQgY2xvbmUuZ2l0ICYmCisJZ2l0IC1DIGNsb25lLmdpdCB1bnBhY2stb2JqZWN0cyA8dGVzdC1oaWRkZW4taW1wbGllZC0ke3BhY2tuYW1lfS5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVucGFja2VkIHJlc3VsdCAoaGF2ZSBhbGwgb2JqZWN0cyknICcKKwlnaXQgLUMgY2xvbmUuZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkKGdpdCByZXYtcGFyc2Ugb3V0ZXIgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWJyYW5jaCBjbG9uZSBjYW4gdHJhbnNmZXIgdGFnJyAnCisJcm0gLXJmIGNsb25lLmdpdCAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tc2luZ2xlLWJyYW5jaCAtYiBtYXN0ZXIgLiBjbG9uZS5naXQgJiYKKwlnaXQgLUMgY2xvbmUuZ2l0IGZzY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzA2LXBhY2stbm9iYXNlLnNoIGIvdC90NTMwNi1wYWNrLW5vYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNDkzMWMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwNi1wYWNrLW5vYmFzZS5zaApAQCAtMCwwICsxLDgwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEdvb2dsZSBJbmMuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1wYWNrLW9iamVjdCB3aXRoIG1pc3NpbmcgYmFzZQorCisnCisuIC4vdGVzdC1saWIuc2gKKworIyBDcmVhdGUgQS1CIGNoYWluCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAgYmFzZScgXAorICAgICdmb3IgYSBpbiBhIGIgYyBkIGUgZiBnIGggaTsgZG8gZWNobyAkYSA+PnRleHQ7IGRvbmUgJiYKKyAgICAgZWNobyBzaWRlID5zaWRlICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdGV4dCBzaWRlICYmCisgICAgIEE9JChlY2hvIEEgfCBnaXQgY29tbWl0LXRyZWUgJChnaXQgd3JpdGUtdHJlZSkpICYmCisKKyAgICAgZWNobyBtID4+dGV4dCAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IHRleHQgJiYKKyAgICAgQj0kKGVjaG8gQiB8IGdpdCBjb21taXQtdHJlZSAkKGdpdCB3cml0ZS10cmVlKSAtcCAkQSkgJiYKKyAgICAgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQgorICAgICcKKworIyBDcmVhdGUgcmVwb3NpdG9yeSB3aXRoIEMgd2hvc2UgcGFyZW50IGlzIEIuCisjIFJlcG9zaXRvcnkgY29udGFpbnMgQywgQ157dHJlZX0sIEM6dGV4dCwgQiwgQl57dHJlZX0uCisjIFJlcG9zaXRvcnkgaXMgbWlzc2luZyBCOnRleHQgKGJlc3QgZGVsdGEgYmFzZSBmb3IgQzp0ZXh0KS4KKyMgUmVwb3NpdG9yeSBpcyBtaXNzaW5nIEEgKHBhcmVudCBvZiBCKS4KKyMgUmVwb3NpdG9yeSBpcyBtaXNzaW5nIEE6c2lkZS4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXR1cCBwYXRjaF9jbG9uZScgXAorICAgICdiYXNlX29iamVjdHM9JChwd2QpLy5naXQvb2JqZWN0cyAmJgorICAgICAobWtkaXIgcGF0Y2hfY2xvbmUgJiYKKyAgICAgIGNkIHBhdGNoX2Nsb25lICYmCisgICAgICBnaXQgaW5pdCAmJgorICAgICAgZWNobyAiJGJhc2Vfb2JqZWN0cyIgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKyAgICAgIGVjaG8gcSA+PnRleHQgJiYKKyAgICAgIGdpdCByZWFkLXRyZWUgJEIgJiYKKyAgICAgIGdpdCB1cGRhdGUtaW5kZXggdGV4dCAmJgorICAgICAgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkKGVjaG8gQyB8IGdpdCBjb21taXQtdHJlZSAkKGdpdCB3cml0ZS10cmVlKSAtcCAkQikgJiYKKyAgICAgIHJtIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKworICAgICAgZ2l0IC0tZ2l0LWRpcj0uLi8uZ2l0IGNhdC1maWxlIGNvbW1pdCAkQiB8CisgICAgICBnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gJiYKKworICAgICAgZ2l0IC0tZ2l0LWRpcj0uLi8uZ2l0IGNhdC1maWxlIHRyZWUgIiRCXnt0cmVlfSIgfAorICAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IHRyZWUgLXcgLS1zdGRpbgorICAgICApICYmCisgICAgIEM9JChnaXQgLS1naXQtZGlyPXBhdGNoX2Nsb25lLy5naXQgcmV2LXBhcnNlIEhFQUQpCisgICAgJworCisjIENsb25lIHBhdGNoX2Nsb25lIGluZGlyZWN0bHkgYnkgY2xvbmluZyBiYXNlIGFuZCBmZXRjaGluZy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRpcmVjdGx5IGNsb25lIHBhdGNoX2Nsb25lJyBcCisgICAgJyhta2RpciB1c2VyX2Nsb25lICYmCisgICAgICBjZCB1c2VyX2Nsb25lICYmCisgICAgICBnaXQgaW5pdCAmJgorICAgICAgZ2l0IHB1bGwgLi4vLmdpdCAmJgorICAgICAgdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkQiAmJgorCisgICAgICBnaXQgcHVsbCAuLi9wYXRjaF9jbG9uZS8uZ2l0ICYmCisgICAgICB0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICRDCisgICAgICkKKyAgICAnCisKKyMgQ2xvbmluZyB0aGUgcGF0Y2hfY2xvbmUgZGlyZWN0bHkgc2hvdWxkIGZhaWwuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2xvbmUgb2YgcGF0Y2hfY2xvbmUgaXMgaW5jb21wbGV0ZScgXAorICAgICcobWtkaXIgdXNlcl9kaXJlY3QgJiYKKyAgICAgIGNkIHVzZXJfZGlyZWN0ICYmCisgICAgICBnaXQgaW5pdCAmJgorICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uL3BhdGNoX2Nsb25lLy5naXQKKyAgICAgKQorICAgICcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzA3LXBhY2stbWlzc2luZy1jb21taXQuc2ggYi90L3Q1MzA3LXBhY2stbWlzc2luZy1jb21taXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQzMzhhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDctcGFjay1taXNzaW5nLWNvbW1pdC5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGFjayBzaG91bGQgbm90aWNlIG1pc3NpbmcgY29tbWl0IG9iamVjdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAxIDIgMyA0IDUKKwlkbworCQllY2hvICIkaSIgPiJmaWxlJGkiICYmCisJCWdpdCBhZGQgImZpbGUkaSIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIiRpIiAmJgorCQlnaXQgdGFnICJ0YWckaSIKKwlkb25lICYmCisJb2JqPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWczKSAmJgorCWZhbm91dD0kKGV4cHIgIiRvYmoiIDogIlwoLi5cKSIpICYmCisJcmVtYWluZGVyPSQoZXhwciAiJG9iaiIgOiAiLi5cKC4qXCkiKSAmJgorCXJtIC1mICIuZ2l0L29iamVjdHMvJGZhbm91dC8kcmVtYWluZGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb3JydXB0aW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgbm90aWNlcyBjb3JydXB0aW9uICgxKScgJworCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9DT01NSVRfR1JBUEg9MCBnaXQgLWMgY29yZS5jb21taXRHcmFwaD1mYWxzZSByZXYtbGlzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG5vdGljZXMgY29ycnVwdGlvbiAoMiknICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTAgZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIG5vdGljZXMgY29ycnVwdGlvbicgJworCWVjaG8gSEVBRCB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgcGFjaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDgtcGFjay1kZXRlY3QtZHVwbGljYXRlcy5zaCBiL3QvdDUzMDgtcGFjay1kZXRlY3QtZHVwbGljYXRlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ODQ1YzFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwOC1wYWNrLWRldGVjdC1kdXBsaWNhdGVzLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdoYW5kbGluZyBvZiBkdXBsaWNhdGUgb2JqZWN0cyBpbiBpbmNvbWluZyBwYWNrZmlsZXMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXBhY2suc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFNIQTEKK3RoZW4KKyAgICAgICBza2lwX2FsbD0nbm90IHVzaW5nIFNIQS0xIGZvciBvYmplY3RzJworICAgICAgIHRlc3RfZG9uZQorZmkKKworIyBUaGUgc2hhMXMgd2UgaGF2ZSBpbiBvdXIgcGFjay4gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBoYXZlIHRoZSBzYW1lCisjIHN0YXJ0aW5nIGJ5dGUsIHNvIHRoYXQgdGhleSBlbmQgdXAgaW4gdGhlIHNhbWUgZmFub3V0IHNlY3Rpb24gb2YgdGhlIGluZGV4LgorIyBUaGF0IGxldHMgdXMgbWFrZSBzdXJlIHdlIGFyZSBleGVyY2lzaW5nIHRoZSBiaW5hcnkgc2VhcmNoIHdpdGggYm90aCBzZXRzLgorTE9fU0hBMT1lNjhmZTgxMjliNTQ2YjEwMWFlZTk1MTBjNTMyOGU3ZjIxY2ExZDE4CitISV9TSEExPWU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKKworIyBBbmQgaGVyZSdzIGEgIm1pc3Npbmcgc2hhMSIgd2hpY2ggd2lsbCBwcm9kdWNlIGZhaWxlZCBsb29rdXBzLiBJdCBtdXN0IGFsc28KKyMgYmUgaW4gdGhlIHNhbWUgZmFub3V0IHNlY3Rpb24sIGFuZCBzaG91bGQgYmUgYmV0d2VlbiB0aGUgdHdvIChzbyB0aGF0IGR1cmluZworIyBvdXIgYmluYXJ5IHNlYXJjaCwgd2UgYXJlIHN1cmUgdG8gZW5kIHVwIGxvb2tpbmcgYXQgb25lIG9yIHRoZSBvdGhlciBvZiB0aGUKKyMgZHVwbGljYXRlIHJ1bnMpLgorTUlTU0lOR19TSEExPSdlNjlkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworCisjIGdpdCB3aWxsIG5ldmVyIGludGVudGlvbmFsbHkgY3JlYXRlIHBhY2tmaWxlcyB3aXRoCisjIGR1cGxpY2F0ZSBvYmplY3RzLCBzbyB3ZSBoYXZlIHRvIGNvbnN0cnVjdCB0aGVtIGJ5IGhhbmQuCisjCisjICQxIGlzIHRoZSBuYW1lIG9mIHRoZSBwYWNrZmlsZSB0byBjcmVhdGUKKyMKKyMgJDIgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0byBkdXBsaWNhdGUgZWFjaCBvYmplY3QKK2NyZWF0ZV9wYWNrICgpIHsKKwlwYWNrX2hlYWRlciAiJCgoMiAqICQyKSkiID4iJDEiICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxICIkMiIpOyBkbworCQlwYWNrX29iaiAkTE9fU0hBMSAmJgorCQlwYWNrX29iaiAkSElfU0hBMQorCWRvbmUgPj4iJDEiICYmCisJcGFja190cmFpbGVyICIkMSIKK30KKworIyBkb3VibGUtY2hlY2sgdGhhdCBjcmVhdGVfcGFjayBhY3R1YWxseSB3b3JrcwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRoIG5vIGR1cGxpY2F0ZXMnICcKKwljcmVhdGVfcGFjayBuby1kdXBzLnBhY2sgMSAmJgorCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPG5vLWR1cHMucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIHdpbGwgYWxsb3cgZHVwbGljYXRlIG9iamVjdHMgYnkgZGVmYXVsdCcgJworCWNsZWFyX3BhY2tzICYmCisJY3JlYXRlX3BhY2sgZHVwcy5wYWNrIDEwMCAmJgorCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPGR1cHMucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYmF0Y2gtY2hlY2sgdGVzdCB2ZWN0b3JzJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwkkTE9fU0hBMQorCSRISV9TSEExCisJJE1JU1NJTkdfU0hBMQorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LUVPRgorCSRMT19TSEExIGJsb2IgMgorCSRISV9TSEExIGJsb2IgMAorCSRNSVNTSU5HX1NIQTEgbWlzc2luZworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29rdXAgaW4gZHVwbGljYXRlZCBwYWNrJyAnCisJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgY2FuIHJlamVjdCBwYWNrcyB3aXRoIGR1cGxpY2F0ZXMnICcKKwljbGVhcl9wYWNrcyAmJgorCWNyZWF0ZV9wYWNrIGR1cHMucGFjayAyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgLS1zdGRpbiA8ZHVwcy5wYWNrICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjYXQtZmlsZSAtZSAkTE9fU0hBMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDktcGFjay1kZWx0YS1jeWNsZXMuc2ggYi90L3Q1MzA5LXBhY2stZGVsdGEtY3ljbGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1Yjc4NzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzA5LXBhY2stZGVsdGEtY3ljbGVzLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGluZGV4LXBhY2sgaGFuZGxpbmcgb2YgZGVsdGEgY3ljbGVzIGluIHBhY2tmaWxlcycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcGFjay5zaAorCisjIFR3byBzaW1pbGFyLWlzaCBvYmplY3RzIHRoYXQgd2UgaGF2ZSBjb21wdXRlZCBkZWx0YXMgYmV0d2Vlbi4KK0E9JCh0ZXN0X29pZCBwYWNrbGliXzdfMCkKK0I9JCh0ZXN0X29pZCBwYWNrbGliXzdfNzYpCisKKyMgZG91YmxlLWNoZWNrIG91ciBoYW5kLWNvbnN0dWN0ZWQgcGFja3MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgd29ya3Mgd2l0aCBhIHNpbmdsZSBkZWx0YSAoQS0+QiknICcKKwljbGVhcl9wYWNrcyAmJgorCXsKKwkJcGFja19oZWFkZXIgMiAmJgorCQlwYWNrX29iaiAkQSAkQiAmJgorCQlwYWNrX29iaiAkQgorCX0gPmFiLnBhY2sgJiYKKwlwYWNrX3RyYWlsZXIgYWIucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPGFiLnBhY2sgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJEEgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayB3b3JrcyB3aXRoIGEgc2luZ2xlIGRlbHRhIChCLT5BKScgJworCWNsZWFyX3BhY2tzICYmCisJeworCQlwYWNrX2hlYWRlciAyICYmCisJCXBhY2tfb2JqICRBICYmCisJCXBhY2tfb2JqICRCICRBCisJfSA+YmEucGFjayAmJgorCXBhY2tfdHJhaWxlciBiYS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiA8YmEucGFjayAmJgorCWdpdCBjYXQtZmlsZSAtdCAkQSAmJgorCWdpdCBjYXQtZmlsZSAtdCAkQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIGRldGVjdHMgbWlzc2luZyBiYXNlIG9iamVjdHMnICcKKwljbGVhcl9wYWNrcyAmJgorCXsKKwkJcGFja19oZWFkZXIgMSAmJgorCQlwYWNrX29iaiAkQSAkQgorCX0gPm1pc3NpbmcucGFjayAmJgorCXBhY2tfdHJhaWxlciBtaXNzaW5nLnBhY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLWZpeC10aGluIC0tc3RkaW4gPG1pc3NpbmcucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIGRldGVjdHMgUkVGX0RFTFRBIGN5Y2xlcycgJworCWNsZWFyX3BhY2tzICYmCisJeworCQlwYWNrX2hlYWRlciAyICYmCisJCXBhY2tfb2JqICRBICRCICYmCisJCXBhY2tfb2JqICRCICRBCisJfSA+Y3ljbGUucGFjayAmJgorCXBhY2tfdHJhaWxlciBjeWNsZS5wYWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS1maXgtdGhpbiAtLXN0ZGluIDxjeWNsZS5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxvdmVyIHRvIGFuIG9iamVjdCBpbiBhbm90aGVyIHBhY2snICcKKwljbGVhcl9wYWNrcyAmJgorCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPGFiLnBhY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLXN0ZGluIC0tZml4LXRoaW4gPGN5Y2xlLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbG92ZXIgdG8gYSBkdXBsaWNhdGUgb2JqZWN0IGluIHRoZSBzYW1lIHBhY2snICcKKwljbGVhcl9wYWNrcyAmJgorCXsKKwkJcGFja19oZWFkZXIgMyAmJgorCQlwYWNrX29iaiAkQSAkQiAmJgorCQlwYWNrX29iaiAkQiAkQSAmJgorCQlwYWNrX29iaiAkQQorCX0gPnJlY292ZXJhYmxlLnBhY2sgJiYKKwlwYWNrX3RyYWlsZXIgcmVjb3ZlcmFibGUucGFjayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tZml4LXRoaW4gLS1zdGRpbiA8cmVjb3ZlcmFibGUucGFjaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTAtcGFjay1iaXRtYXBzLnNoIGIvdC90NTMxMC1wYWNrLWJpdG1hcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMxODc4MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMTAtcGFjay1iaXRtYXBzLnNoCkBAIC0wLDAgKzEsNDUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZXhlcmNpc2UgYmFzaWMgYml0bWFwIGZ1bmN0aW9uYWxpdHknCisuIC4vdGVzdC1saWIuc2gKKworb2JqcGF0aCAoKSB7CisJZWNobyAiLmdpdC9vYmplY3RzLyQoZWNobyAiJDEiIHwgc2VkIC1lICdzfFwoLi5cKXxcMS98JykiCit9CisKKyMgc2hvdyBvYmplY3RzIHByZXNlbnQgaW4gcGFjayAoJDEgc2hvdWxkIGJlIGFzc29jaWF0ZWQgKi5pZHgpCitsaXN0X3BhY2tlZF9vYmplY3RzICgpIHsKKwlnaXQgc2hvdy1pbmRleCA8IiQxIiA+b2JqZWN0LWxpc3QgJiYKKwljdXQgLWQnICcgLWYyIG9iamVjdC1saXN0Cit9CisKKyMgaGFzX2FueSBwYXR0ZXJuLWZpbGUgY29udGVudC1maWxlCisjIHRlc3RzIHdoZXRoZXIgY29udGVudC1maWxlIGhhcyBhbnkgZW50cnkgZnJvbSBwYXR0ZXJuLWZpbGUgd2l0aCBlbnRyaWVzIGJlaW5nCisjIHdob2xlIGxpbmVzLgoraGFzX2FueSAoKSB7CisJZ3JlcCAtRmYgIiQxIiAiJDIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBtb2RlcmF0ZS1zaXplZCBoaXN0b3J5JyAnCisJdGVzdF9jb21taXRfYnVsayAtLWlkPWZpbGUgMTAwICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQUR+NSAmJgorCXRlc3RfY29tbWl0X2J1bGsgLS1pZD1zaWRlIDEwICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWJpdG1hcHRpcD0kKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCWJsb2I9JChlY2hvIHRhZ2dlZC1ibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZ2l0IHRhZyB0YWdnZWQtYmxvYiAkYmxvYiAmJgorCWdpdCBjb25maWcgcmVwYWNrLndyaXRlYml0bWFwcyB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1bGwgcmVwYWNrIGNyZWF0ZXMgYml0bWFwcycgJworCWdpdCByZXBhY2sgLWFkICYmCisJbHMgLmdpdC9vYmplY3RzL3BhY2svIHwgZ3JlcCBiaXRtYXAgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdGVzdC1iaXRtYXAgdmVyaWZpZXMgYml0bWFwcycgJworCWdpdCByZXYtbGlzdCAtLXRlc3QtYml0bWFwIEhFQUQKKycKKworcmV2X2xpc3RfdGVzdHMoKSB7CisJc3RhdGU9JDEKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvdW50aW5nIGNvbW1pdHMgdmlhIGJpdG1hcCAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEID5leHBlY3QgJiYKKwkJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY291bnRpbmcgcGFydGlhbCBjb21taXRzIHZpYSBiaXRtYXAgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRH41Li5IRUFEID5leHBlY3QgJiYKKwkJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IEhFQUR+NS4uSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb3VudGluZyBjb21taXRzIHdpdGggbGltaXQgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tY291bnQgLW4gMSBIRUFEID5leHBlY3QgJiYKKwkJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IC1uIDEgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb3VudGluZyBub24tbGluZWFyIGhpc3RvcnkgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tY291bnQgb3RoZXIuLi5tYXN0ZXIgPmV4cGVjdCAmJgorCQlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgb3RoZXIuLi5tYXN0ZXIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY291bnRpbmcgY29tbWl0cyB3aXRoIGxpbWl0aW5nICgkc3RhdGUpIiAnCisJCWdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQgLS0gMS50ID5leHBlY3QgJiYKKwkJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCAtLWNvdW50IEhFQUQgLS0gMS50ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvdW50aW5nIG9iamVjdHMgdmlhIGJpdG1hcCAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS1jb3VudCAtLW9iamVjdHMgSEVBRCA+ZXhwZWN0ICYmCisJCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggLS1jb3VudCAtLW9iamVjdHMgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJlbnVtZXJhdGUgY29tbWl0cyAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IEhFQUQgPmFjdHVhbCAmJgorCQlnaXQgcmV2LWxpc3QgSEVBRCA+ZXhwZWN0ICYmCisJCXRlc3RfYml0bWFwX3RyYXZlcnNhbCAtLW5vLWNvbmZpcm0tYml0bWFwcyBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZW51bWVyYXRlIC0tb2JqZWN0cyAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tdXNlLWJpdG1hcC1pbmRleCBIRUFEID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFEID5leHBlY3QgJiYKKwkJdGVzdF9iaXRtYXBfdHJhdmVyc2FsIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJiaXRtYXAgLS1vYmplY3RzIGhhbmRsZXMgbm9uLWNvbW1pdCBvYmplY3RzICgkc3RhdGUpIiAnCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS11c2UtYml0bWFwLWluZGV4IEhFQUQgdGFnZ2VkLWJsb2IgPmFjdHVhbCAmJgorCQlncmVwICRibG9iIGFjdHVhbAorCScKK30KKworcmV2X2xpc3RfdGVzdHMgJ2Z1bGwgYml0bWFwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIGJpdG1hcHBlZCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIC4gY2xvbmUuZ2l0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lLmdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNsb25lIGZyb20gYml0bWFwcGVkIHJlcG9zaXRvcnknICcKKwl0ZXN0X2NvbmZpZyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIHRydWUgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgLS1maWx0ZXI9YmxvYjpub25lIC4gcGFydGlhbC1jbG9uZS5naXQgJiYKKwkoCisJCWNkIHBhcnRpYWwtY2xvbmUuZ2l0ICYmCisJCXBhY2s9JChlY2hvIG9iamVjdHMvcGFjay8qLnBhY2spICYmCisJCWdpdCB2ZXJpZnktcGFjayAtdiAiJHBhY2siID5oYXZlICYmCisJCWF3ayAiL2Jsb2IvIHsgcHJpbnQgXCQxIH0iIDxoYXZlID5ibG9icyAmJgorCQkjIHdlIGV4cGVjdCB0aGlzIHNpbmdsZSBibG9iIGJlY2F1c2Ugb2YgdGhlIGRpcmVjdCByZWYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvdGFnZ2VkLWJsb2IgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYmxvYnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZ1cnRoZXIgbm9uLWJpdG1hcHBlZCBjb21taXRzJyAnCisJdGVzdF9jb21taXRfYnVsayAtLWlkPWZ1cnRoZXIgMTAKKycKKworcmV2X2xpc3RfdGVzdHMgJ3BhcnRpYWwgYml0bWFwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAocGFydGlhbCBiaXRtYXApJyAnCisJZ2l0IC0tZ2l0LWRpcj1jbG9uZS5naXQgZmV0Y2ggb3JpZ2luIG1hc3RlcjptYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9Y2xvbmUuZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY3JlbWVudGFsIHJlcGFjayBmYWlscyB3aGVuIGJpdG1hcHMgYXJlIHJlcXVlc3RlZCcgJworCXRlc3RfY29tbWl0IG1vcmUtMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBhY2sgLWQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJJbmNyZW1lbnRhbCByZXBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBiaXRtYXAiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNyZW1lbnRhbCByZXBhY2sgY2FuIGRpc2FibGUgYml0bWFwcycgJworCXRlc3RfY29tbWl0IG1vcmUtMiAmJgorCWdpdCByZXBhY2sgLWQgLS1uby13cml0ZS1iaXRtYXAtaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIHJlc3BlY3RzIC0tbG9jYWwgKG5vbi1sb2NhbCBsb29zZSknICcKKwlnaXQgaW5pdCAtLWJhcmUgYWx0LmdpdCAmJgorCWVjaG8gJChwd2QpL2FsdC5naXQvb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWVjaG8gY29udGVudDEgPmZpbGUxICYmCisJIyBub24tbG9jYWwgbG9vc2Ugb2JqZWN0IHdoaWNoIGlzIG5vdCBwcmVzZW50IGluIGJpdG1hcHBlZCBwYWNrCisJYWx0YmxvYj0kKEdJVF9ESVI9YWx0LmdpdCBnaXQgaGFzaC1vYmplY3QgLXcgZmlsZTEpICYmCisJIyBub24tbG9jYWwgbG9vc2Ugb2JqZWN0IHdoaWNoIGlzIGFsc28gcHJlc2VudCBpbiBiaXRtYXBwZWQgcGFjaworCWdpdCBjYXQtZmlsZSBibG9iICRibG9iIHwgR0lUX0RJUj1hbHQuZ2l0IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gY29tbWl0X2ZpbGUxICYmCisJZWNobyBIRUFEIHwgZ2l0IHBhY2stb2JqZWN0cyAtLWxvY2FsIC0tc3Rkb3V0IC0tcmV2cyA+MS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgMS5wYWNrICYmCisJbGlzdF9wYWNrZWRfb2JqZWN0cyAxLmlkeCA+MS5vYmplY3RzICYmCisJcHJpbnRmICIlc1xuIiAiJGFsdGJsb2IiICIkYmxvYiIgPm5vbmxvY2FsLWxvb3NlICYmCisJISBoYXNfYW55IG5vbmxvY2FsLWxvb3NlIDEub2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLW9iamVjdHMgcmVzcGVjdHMgLS1ob25vci1wYWNrLWtlZXAgKGxvY2FsIG5vbi1iaXRtYXBwZWQgcGFjayknICcKKwllY2hvIGNvbnRlbnQyID5maWxlMiAmJgorCWJsb2IyPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGZpbGUyKSAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGNvbW1pdF9maWxlMiAmJgorCXByaW50ZiAiJXNcbiIgIiRibG9iMiIgIiRiaXRtYXB0aXAiID5rZWVwb2JqZWN0cyAmJgorCXBhY2syPSQoZ2l0IHBhY2stb2JqZWN0cyBwYWNrMiA8a2VlcG9iamVjdHMpICYmCisJbXYgcGFjazItJHBhY2syLiogLmdpdC9vYmplY3RzL3BhY2svICYmCisJPi5naXQvb2JqZWN0cy9wYWNrL3BhY2syLSRwYWNrMi5rZWVwICYmCisJcm0gJChvYmpwYXRoICRibG9iMikgJiYKKwllY2hvIEhFQUQgfCBnaXQgcGFjay1vYmplY3RzIC0taG9ub3ItcGFjay1rZWVwIC0tc3Rkb3V0IC0tcmV2cyA+MmEucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIDJhLnBhY2sgJiYKKwlsaXN0X3BhY2tlZF9vYmplY3RzIDJhLmlkeCA+MmEub2JqZWN0cyAmJgorCSEgaGFzX2FueSBrZWVwb2JqZWN0cyAyYS5vYmplY3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyByZXNwZWN0cyAtLWxvY2FsIChub24tbG9jYWwgcGFjayknICcKKwltdiAuZ2l0L29iamVjdHMvcGFjay9wYWNrMi0kcGFjazIuKiBhbHQuZ2l0L29iamVjdHMvcGFjay8gJiYKKwllY2hvIEhFQUQgfCBnaXQgcGFjay1vYmplY3RzIC0tbG9jYWwgLS1zdGRvdXQgLS1yZXZzID4yYi5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgMmIucGFjayAmJgorCWxpc3RfcGFja2VkX29iamVjdHMgMmIuaWR4ID4yYi5vYmplY3RzICYmCisJISBoYXNfYW55IGtlZXBvYmplY3RzIDJiLm9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIHJlc3BlY3RzIC0taG9ub3ItcGFjay1rZWVwIChsb2NhbCBiaXRtYXBwZWQgcGFjayknICcKKwlscyAuZ2l0L29iamVjdHMvcGFjay8gfCBncmVwIGJpdG1hcCA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvdXRwdXQgJiYKKwlwYWNrYml0bWFwPSQoYmFzZW5hbWUgJChjYXQgb3V0cHV0KSAuYml0bWFwKSAmJgorCWxpc3RfcGFja2VkX29iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svJHBhY2tiaXRtYXAuaWR4ID5wYWNrYml0bWFwLm9iamVjdHMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyRwYWNrYml0bWFwLmtlZXAiICYmCisJPi5naXQvb2JqZWN0cy9wYWNrLyRwYWNrYml0bWFwLmtlZXAgJiYKKwllY2hvIEhFQUQgfCBnaXQgcGFjay1vYmplY3RzIC0taG9ub3ItcGFjay1rZWVwIC0tc3Rkb3V0IC0tcmV2cyA+M2EucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIDNhLnBhY2sgJiYKKwlsaXN0X3BhY2tlZF9vYmplY3RzIDNhLmlkeCA+M2Eub2JqZWN0cyAmJgorCSEgaGFzX2FueSBwYWNrYml0bWFwLm9iamVjdHMgM2Eub2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLW9iamVjdHMgcmVzcGVjdHMgLS1sb2NhbCAobm9uLWxvY2FsIGJpdG1hcHBlZCBwYWNrKScgJworCW12IC5naXQvb2JqZWN0cy9wYWNrLyRwYWNrYml0bWFwLiogYWx0LmdpdC9vYmplY3RzL3BhY2svICYmCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svbXVsdGktcGFjay1pbmRleCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgYWx0LmdpdC9vYmplY3RzL3BhY2svJHBhY2tiaXRtYXAuKiAuZ2l0L29iamVjdHMvcGFjay8iICYmCisJZWNobyBIRUFEIHwgZ2l0IHBhY2stb2JqZWN0cyAtLWxvY2FsIC0tc3Rkb3V0IC0tcmV2cyA+M2IucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIDNiLnBhY2sgJiYKKwlsaXN0X3BhY2tlZF9vYmplY3RzIDNiLmlkeCA+M2Iub2JqZWN0cyAmJgorCSEgaGFzX2FueSBwYWNrYml0bWFwLm9iamVjdHMgM2Iub2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLW9iamVjdHMgdG8gZmlsZSBjYW4gdXNlIGJpdG1hcCcgJworCSMgbWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgMSBiaXRtYXAgaW5kZXggZnJvbSBwcmV2aW91cyB0ZXN0cworCWxzIC5naXQvb2JqZWN0cy9wYWNrLyB8IGdyZXAgYml0bWFwID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG91dHB1dCAmJgorCSMgdmVyaWZ5IGVxdWl2YWxlbnQgcGFja3MgYXJlIGdlbmVyYXRlZCB3aXRoL3dpdGhvdXQgdXNpbmcgYml0bWFwIGluZGV4CisJcGFja2FzaGExPSQoZ2l0IHBhY2stb2JqZWN0cyAtLW5vLXVzZS1iaXRtYXAtaW5kZXggLS1hbGwgcGFja2EgPC9kZXYvbnVsbCkgJiYKKwlwYWNrYnNoYTE9JChnaXQgcGFjay1vYmplY3RzIC0tdXNlLWJpdG1hcC1pbmRleCAtLWFsbCBwYWNrYiA8L2Rldi9udWxsKSAmJgorCWxpc3RfcGFja2VkX29iamVjdHMgcGFja2EtJHBhY2thc2hhMS5pZHggPnBhY2thLm9iamVjdHMgJiYKKwlsaXN0X3BhY2tlZF9vYmplY3RzIHBhY2tiLSRwYWNrYnNoYTEuaWR4ID5wYWNrYi5vYmplY3RzICYmCisJdGVzdF9jbXAgcGFja2Eub2JqZWN0cyBwYWNrYi5vYmplY3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1bGwgcmVwYWNrLCByZXVzaW5nIHByZXZpb3VzIGJpdG1hcHMnICcKKwlnaXQgcmVwYWNrIC1hZCAmJgorCWxzIC5naXQvb2JqZWN0cy9wYWNrLyB8IGdyZXAgYml0bWFwID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAoZnVsbCBiaXRtYXApJyAnCisJZ2l0IC0tZ2l0LWRpcj1jbG9uZS5naXQgZmV0Y2ggb3JpZ2luIG1hc3RlcjptYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9Y2xvbmUuZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBvYmplY3RzIGZvciBtaXNzaW5nLUhBVkUgdGVzdHMnICcKKwlibG9iPSQoZWNobyAibWlzc2luZyBoYXZlIiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXRyZWU9JChwcmludGYgIjEwMDY0NCBibG9iICRibG9iXHRmaWxlXG4iIHwgZ2l0IG1rdHJlZSkgJiYKKwlwYXJlbnQ9JChlY2hvIHBhcmVudCB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwljb21taXQ9JChlY2hvIGNvbW1pdCB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCAkcGFyZW50KSAmJgorCWNhdCA+cmV2cyA8PC1FT0YKKwlIRUFECisJXkhFQUReCisJXiRjb21taXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIHJlc3BlY3RzIC0taW5jcmVtZW50YWwnICcKKwljYXQgPnJldnMyIDw8LUVPRiAmJgorCUhFQUQKKwkkY29tbWl0CisJRU9GCisJZ2l0IHBhY2stb2JqZWN0cyAtLWluY3JlbWVudGFsIC0tc3Rkb3V0IC0tcmV2cyA8cmV2czIgPjQucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIDQucGFjayAmJgorCWxpc3RfcGFja2VkX29iamVjdHMgNC5pZHggPjQub2JqZWN0cyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgNC5vYmplY3RzICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkY29tbWl0ID5yZXZsaXN0ICYmCisJY3V0IC1kIiAiIC1mMSByZXZsaXN0IHxzb3J0ID5vYmplY3RzICYmCisJdGVzdF9jbXAgNC5vYmplY3RzIG9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRoIG1pc3NpbmcgYmxvYicgJworCXJtICQob2JqcGF0aCAkYmxvYikgJiYKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyA8cmV2cyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgd2l0aCBtaXNzaW5nIHRyZWUnICcKKwlybSAkKG9ianBhdGggJHRyZWUpICYmCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgPHJldnMgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHdpdGggbWlzc2luZyBwYXJlbnQnICcKKwlybSAkKG9ianBhdGggJHBhcmVudCkgJiYKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyA8cmV2cyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSkdJVCAnd2UgY2FuIHJlYWQgamdpdCBiaXRtYXBzJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAuIGNvbXBhdC1qZ2l0LmdpdCAmJgorCSgKKwkJY2QgY29tcGF0LWpnaXQuZ2l0ICYmCisJCXJtIC1mIG9iamVjdHMvcGFjay8qLmJpdG1hcCAmJgorCQlqZ2l0IGdjICYmCisJCWdpdCByZXYtbGlzdCAtLXRlc3QtYml0bWFwIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSkdJVCAnamdpdCBjYW4gcmVhZCBvdXIgYml0bWFwcycgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBjb21wYXQtdXMuZ2l0ICYmCisJKAorCQljZCBjb21wYXQtdXMuZ2l0ICYmCisJCWdpdCByZXBhY2sgLWFkYiAmJgorCQkjIGpnaXQgZ2Mgd2lsbCBiYXJmIGlmIGl0IGRvZXMgbm90IGxpa2Ugb3VyIGJpdG1hcHMKKwkJamdpdCBnYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXR0aW5nIHBhY2tzIGRvZXMgbm90IGdlbmVyYXRlIGJvZ3VzIGJpdG1hcHMnICcKKwl0ZXN0LXRvb2wgZ2VucmFuZG9tIGZvbyAkKCgxMDI0ICogMTAyNCkpID5yYW5kICYmCisJZ2l0IGFkZCByYW5kICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHdpdGggYmlnIGZpbGUiICYmCisJZ2l0IC1jIHBhY2sucGFja1NpemVMaW1pdD01MDBrIHJlcGFjayAtYWRiICYmCisJZ2l0IGluaXQgLS1iYXJlIG5vLWJpdG1hcHMuZ2l0ICYmCisJZ2l0IC1DIG5vLWJpdG1hcHMuZ2l0IGZldGNoIC4uIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHJldXNhYmxlIHBhY2snICcKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qLmtlZXAgJiYKKwlnaXQgcmVwYWNrIC1hZGIgJiYKKwlyZXVzYWJsZV9wYWNrICgpIHsKKwkJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSIgfAorCQlnaXQgcGFjay1vYmplY3RzIC0tZGVsdGEtYmFzZS1vZmZzZXQgLS1yZXZzIC0tc3Rkb3V0ICIkQCIKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgcmV1c2UgcmVzcGVjdHMgLS1ob25vci1wYWNrLWtlZXAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyoua2VlcCIgJiYKKwlmb3IgaSBpbiAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sKKwlkbworCQk+JHtpJS5wYWNrfS5rZWVwCisJZG9uZSAmJgorCXJldXNhYmxlX3BhY2sgLS1ob25vci1wYWNrLWtlZXAgPmVtcHR5LnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayBlbXB0eS5wYWNrICYmCisJZ2l0IHNob3ctaW5kZXggPGVtcHR5LmlkeCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHJldXNlIHJlc3BlY3RzIC0tbG9jYWwnICcKKwltdiAuZ2l0L29iamVjdHMvcGFjay8qIGFsdC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgYWx0LmdpdC9vYmplY3RzL3BhY2svKiAuZ2l0L29iamVjdHMvcGFjay8iICYmCisJcmV1c2FibGVfcGFjayAtLWxvY2FsID5lbXB0eS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgZW1wdHkucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxlbXB0eS5pZHggPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayByZXVzZSByZXNwZWN0cyAtLWluY3JlbWVudGFsJyAnCisJcmV1c2FibGVfcGFjayAtLWluY3JlbWVudGFsID5lbXB0eS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgZW1wdHkucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxlbXB0eS5pZHggPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJ1bmNhdGVkIGJpdG1hcCBmYWlscyBncmFjZWZ1bGx5JyAnCisJZ2l0IHJlcGFjayAtYWQgJiYKKwlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgLS1hbGwgPmV4cGVjdCAmJgorCWJpdG1hcD0kKGxzIC5naXQvb2JqZWN0cy9wYWNrLyouYml0bWFwKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgJGJpdG1hcCIgJiYKKwl0ZXN0X2NvcHlfYnl0ZXMgNTEyIDwkYml0bWFwID4kYml0bWFwLnRtcCAmJgorCW12IC1mICRiaXRtYXAudG1wICRiaXRtYXAgJiYKKwlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgLS1hbGwgPmFjdHVhbCAyPnN0ZGVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwIGNvcnJ1cHQgc3RkZXJyCisnCisKKyMgaGF2ZV9kZWx0YSA8b2JqPiA8ZXhwZWN0ZWRfYmFzZT4KKyMKKyMgTm90ZSB0aGF0IGJlY2F1c2UgdGhpcyByZWxpZXMgb24gY2F0LWZpbGUsIGl0IG1pZ2h0IGZpbmQgX2FueV8gY29weSBvZiBhbgorIyBvYmplY3QgaW4gdGhlIHJlcG9zaXRvcnkuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlCisjIHRoZXJlJ3Mgb25seSBvbmUgKGUuZy4sIHZpYSAicmVwYWNrIC1hZCIsIG9yIGhhdmluZyBqdXN0IGZldGNoZWQgYSBjb3B5KS4KK2hhdmVfZGVsdGEgKCkgeworCWVjaG8gJDIgPmV4cGVjdCAmJgorCWVjaG8gJDEgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0iJShkZWx0YWJhc2UpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCisjIENyZWF0ZSBhIHN0YXRlIG9mIGhpc3Rvcnkgd2l0aCB0aGVzZSBwcm9wZXJ0aWVzOgorIworIyAgLSByZWZzIHRoYXQgYWxsb3cgYSBjbGllbnQgdG8gZmV0Y2ggc29tZSBuZXcgaGlzdG9yeSwgd2hpbGUgc2hhcmluZyBzb21lIG9sZAorIyAgICBoaXN0b3J5IHdpdGggdGhlIHNlcnZlcjsgd2UgdXNlIGJyYW5jaGVzIGRlbHRhLXJldXNlLW9sZCBhbmQKKyMgICAgZGVsdGEtcmV1c2UtbmV3IGhlcmUKKyMKKyMgIC0gdGhlIG5ldyBoaXN0b3J5IGNvbnRhaW5zIGFuIG9iamVjdCB0aGF0IGlzIHN0b3JlZCBvbiB0aGUgc2VydmVyIGFzIGEgZGVsdGEKKyMgICAgYWdhaW5zdCBhIGJhc2UgdGhhdCBpcyBpbiB0aGUgb2xkIGhpc3RvcnkKKyMKKyMgIC0gdGhlIGJhc2Ugb2JqZWN0IGlzIG5vdCBpbW1lZGlhdGVseSByZWFjaGFibGUgZnJvbSB0aGUgdGlwIG9mIHRoZSBvbGQKKyMgICAgaGlzdG9yeTsgZmluZGluZyBpdCB3b3VsZCBpbnZvbHZlIGRpZ2dpbmcgZG93biB0aHJvdWdoIGhpc3Rvcnkgd2Uga25vdyB0aGUKKyMgICAgb3RoZXIgc2lkZSBoYXMKKyMKKyMgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgc3RhdGUgd2hlcmUgZmV0Y2hpbmcgZnJvbSBvbGQtPm5ldyB3b3VsZCBub3QKKyMgdHJhZGl0aW9uYWxseSByZXVzZSB0aGUgb24tZGlzayBkZWx0YSAoYmVjYXVzZSB3ZSdkIGhhdmUgdG8gZGlnIHRvIHJlYWxpemUKKyMgdGhhdCB0aGUgY2xpZW50IGhhcyBpdCksIGJ1dCB3ZSB3aWxsIGRvIHNvIGlmIGJpdG1hcHMgY2FuIHRlbGwgdXMgY2hlYXBseQorIyB0aGF0IHRoZSBvdGhlciBzaWRlIGhhcyBpdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCB0aGluIGRlbHRhLXJldXNlIHBhcmVudCcgJworCSMgVGhpcyBmaXJzdCBjb21taXQgY29udGFpbnMgdGhlIGJ1cmllZCBiYXNlIG9iamVjdC4KKwl0ZXN0LXRvb2wgZ2VucmFuZG9tIGRlbHRhIDE2Mzg0ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiZGVsdGEgYmFzZSIgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisKKwkjIFRoZXNlIGludGVybWVkaWF0ZSBjb21taXRzIGJ1cnkgdGhlIGJhc2UgYmFjayBpbiBoaXN0b3J5LgorCSMgVGhpcyBiZWNvbWVzIHRoZSAib2xkIiBzdGF0ZS4KKwlmb3IgaSBpbiAxIDIgMyA0IDUKKwlkbworCQllY2hvICRpID5maWxlICYmCisJCWdpdCBjb21taXQgLWFtICJpbnRlcm1lZGlhdGUgJGkiIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCBicmFuY2ggZGVsdGEtcmV1c2Utb2xkICYmCisKKwkjIEFuZCBub3cgb3VyIG5ldyBoaXN0b3J5IGhhcyBhIGRlbHRhIGFnYWluc3QgdGhlIGJ1cmllZCBiYXNlLiBOb3RlCisJIyB0aGF0IHRoaXMgbXVzdCBiZSBzbWFsbGVyIHRoYW4gdGhlIG9yaWdpbmFsIGZpbGUsIHNpbmNlIHBhY2stb2JqZWN0cworCSMgcHJlZmVycyB0byBjcmVhdGUgZGVsdGFzIGZyb20gc21hbGxlciBvYmplY3RzIHRvIGxhcmdlci4KKwl0ZXN0LXRvb2wgZ2VucmFuZG9tIGRlbHRhIDE2MzAwID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYW0gImRlbHRhIHJlc3VsdCIgJiYKKwlkZWx0YT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpmaWxlKSAmJgorCWdpdCBicmFuY2ggZGVsdGEtcmV1c2UtbmV3ICYmCisKKwkjIFJlcGFjayB3aXRoIGJpdG1hcHMgYW5kIGRvdWJsZSBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVkIGRlbHRhCisJIyByZWxhdGlvbnNoaXAuCisJZ2l0IHJlcGFjayAtYWRiICYmCisJaGF2ZV9kZWx0YSAkZGVsdGEgJGJhc2UKKycKKworIyBOb3cgd2UgY2FuIHNhbml0eS1jaGVjayB0aGUgbm9uLWJpdG1hcCBiZWhhdmlvciAodGhhdCB0aGUgc2VydmVyIGlzIG5vdCBhYmxlCisjIHRvIHJldXNlIHRoZSBkZWx0YSkuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgc29tZXRoaW5nIHdlIGNhcmUgYWJvdXQsIHNvIHRoaXMKKyMgdGVzdCBjb3VsZCBiZSBzY3JhcHBlZCBpbiB0aGUgZnV0dXJlLiBCdXQgaXQgbWFrZXMgc3VyZSB0aGF0IHRoZSBuZXh0IHRlc3QgaXMKKyMgYWN0dWFsbHkgdHJpZ2dlcmluZyB0aGUgZmVhdHVyZSB3ZSB3YW50LgorIworIyBOb3RlIHRoYXQgb3VyIHRvb2xzIGZvciB3b3JraW5nIHdpdGggb24tdGhlLXdpcmUgInRoaW4iIHBhY2tzIGFyZSBsaW1pdGVkLiBTbworIyB3ZSBhY3R1YWxseSBwZXJmb3JtIHRoZSBmZXRjaCwgcmV0YWluIHRoZSByZXN1bHRpbmcgcGFjaywgYW5kIGluc3BlY3QgdGhlCisjIHJlc3VsdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGhvdXQgYml0bWFwcyBpZ25vcmVzIGRlbHRhIGFnYWluc3Qgb2xkIGJhc2UnICcKKwl0ZXN0X2NvbmZpZyBwYWNrLnVzZWJpdG1hcHMgZmFsc2UgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBjbGllbnQuZ2l0IiAmJgorCWdpdCBpbml0IC0tYmFyZSBjbGllbnQuZ2l0ICYmCisJKAorCQljZCBjbGllbnQuZ2l0ICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIudW5wYWNrTGltaXQgMSAmJgorCQlnaXQgZmV0Y2ggLi4gZGVsdGEtcmV1c2Utb2xkOmRlbHRhLXJldXNlLW9sZCAmJgorCQlnaXQgZmV0Y2ggLi4gZGVsdGEtcmV1c2UtbmV3OmRlbHRhLXJldXNlLW5ldyAmJgorCQloYXZlX2RlbHRhICRkZWx0YSAkWkVST19PSUQKKwkpCisnCisKKyMgQW5kIGRvIHRoZSBzYW1lIGZvciB0aGUgYml0bWFwIGNhc2UsIHdoZXJlIHdlIGRvIGV4cGVjdCB0byBmaW5kIHRoZSBkZWx0YS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggYml0bWFwcyBjYW4gcmV1c2Ugb2xkIGJhc2UnICcKKwl0ZXN0X2NvbmZpZyBwYWNrLnVzZWJpdG1hcHMgdHJ1ZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGNsaWVudC5naXQiICYmCisJZ2l0IGluaXQgLS1iYXJlIGNsaWVudC5naXQgJiYKKwkoCisJCWNkIGNsaWVudC5naXQgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci51bnBhY2tMaW1pdCAxICYmCisJCWdpdCBmZXRjaCAuLiBkZWx0YS1yZXVzZS1vbGQ6ZGVsdGEtcmV1c2Utb2xkICYmCisJCWdpdCBmZXRjaCAuLiBkZWx0YS1yZXVzZS1uZXc6ZGVsdGEtcmV1c2UtbmV3ICYmCisJCWhhdmVfZGVsdGEgJGRlbHRhICRiYXNlCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTEtcGFjay1iaXRtYXBzLXNoYWxsb3cuc2ggYi90L3Q1MzExLXBhY2stYml0bWFwcy1zaGFsbG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3MmE5NWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzExLXBhY2stYml0bWFwcy1zaGFsbG93LnNoCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBiaXRtYXAgb3BlcmF0aW9uIHdpdGggc2hhbGxvdyByZXBvc2l0b3JpZXMnCisuIC4vdGVzdC1saWIuc2gKKworIyBXZSB3YW50IHRvIGNyZWF0ZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgc2hhbGxvdywgZ3JhZnRlZAorIyB2aWV3IG9mIHJlYWNoYWJpbGl0eSBkb2VzIG5vdCBtYXRjaCByZWFsaXR5IGluIGEgd2F5IHRoYXQKKyMgbWlnaHQgY2F1c2UgdXMgdG8gc2VuZCBpbnN1ZmZpY2llbnQgb2JqZWN0cy4KKyMKKyMgV2UgZG8gdGhpcyB3aXRoIGEgaGlzdG9yeSB0aGF0IHJlcGVhdHMgYSBzdGF0ZSwgbGlrZToKKyMKKyMgICAgICBBICAgIC0tICAgQiAgICAtLSAgIEMKKyMgICAgZmlsZT0xICAgIGZpbGU9MiAgICBmaWxlPTEKKyMKKyMgYW5kIHRoZW4gY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSB0byB0aGUgc2Vjb25kIGNvbW1pdCwgQi4KKyMgSW4gYSBub24tc2hhbGxvdyBjbG9uZSwgdGhhdCB3b3VsZCBtZWFuIHdlIGFscmVhZHkgaGF2ZQorIyB0aGUgdHJlZSBmb3IgQS4gQnV0IGluIGEgc2hhbGxvdyBvbmUsIHdlJ3ZlIGdyYWZ0ZWQgYXdheQorIyBBLCBhbmQgZmV0Y2hpbmcgQSB0byBCIHJlcXVpcmVzIHRoYXQgdGhlIG90aGVyIHNpZGUgc2VuZAorIyB1cyB0aGUgdHJlZSBmb3IgZmlsZT0xLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2hhbGxvdyByZXBvJyAnCisJZWNobyAxID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvcmlnICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB1cGRhdGUgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgLS1kZXB0aD0xIC4gc2hhbGxvdy5naXQgJiYKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHJlcGVhdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0dXJuIG9uIGJpdG1hcHMgaW4gdGhlIHBhcmVudCcgJworCWdpdCByZXBhY2sgLWFkYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGZldGNoIGZyb20gYml0bWFwcGVkIHJlcG8nICcKKwkoY2Qgc2hhbGxvdy5naXQgJiYgZ2l0IGZldGNoKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTItcHJ1bmUtY29ycnVwdGlvbi5zaCBiL3QvdDUzMTItcHJ1bmUtY29ycnVwdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTlkNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMxMi1wcnVuZS1jb3JydXB0aW9uLnNoCkBAIC0wLDAgKzEsMTE0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nCitUZXN0IHBydW5pbmcgb2YgcmVwb3NpdG9yaWVzIHdpdGggbWlub3IgY29ycnVwdGlvbnMuIFRoZSBnb2FsCitoZXJlIGlzIHRoYXQgd2Ugc2hvdWxkIGFsd2F5cyBiZSBlcnJpbmcgb24gdGhlIHNpZGUgb2Ygc2FmZXR5LiBTbworaWYgd2Ugc2VlLCBmb3IgZXhhbXBsZSwgYSByZWYgd2l0aCBhIGJvZ3VzIG5hbWUsIGl0IGlzIE9LIGVpdGhlciB0bworYmFpbCBvdXQgb3IgdG8gcHJvY2VlZCB1c2luZyBpdCBhcyBhIHJlYWNoYWJsZSB0aXAsIGJ1dCBpdCBpcyBfbm90XworT0sgdG8gcHJvY2VlZCBhcyBpZiBpdCBkaWQgbm90IGV4aXN0LiBPdGhlcndpc2Ugd2UgbWlnaHQgc2lsZW50bHkKK2RlbGV0ZSBvYmplY3RzIHRoYXQgY2Fubm90IGJlIHJlY292ZXJlZC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIHJlZmxvZ3MnICcKKwlnaXQgY29uZmlnIGNvcmUubG9nYWxscmVmdXBkYXRlcyBmYWxzZSAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCAtLWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaGlzdG9yeSByZWFjaGFibGUgb25seSBmcm9tIGEgYm9ndXMtbmFtZWQgcmVmJyAnCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBtYXN0ZXIgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYm9ndXMgJiYKKwlib2d1cz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICRib2d1cyA+c2F2ZWQgJiYKKwllY2hvICRib2d1cyA+LmdpdC9yZWZzL2hlYWRzL2JvZ3VzLi5uYW1lICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuaW5nIGRvZXMgbm90IGRyb3AgYm9ndXMgb2JqZWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IHNhdmVkIiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgcHJ1bmUgLS1leHBpcmU9bm93ICYmCisJdmVyYm9zZSBnaXQgY2F0LWZpbGUgLWUgJGJvZ3VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1dCBib2d1cyBvYmplY3QgaW50byBwYWNrJyAnCisJZ2l0IHRhZyByZWFjaGFibGUgJGJvZ3VzICYmCisJZ2l0IHJlcGFjayAtYWQgJiYKKwlnaXQgdGFnIC1kIHJlYWNoYWJsZSAmJgorCXZlcmJvc2UgZ2l0IGNhdC1maWxlIC1lICRib2d1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXN0cnVjdGl2ZSByZXBhY2sga2VlcHMgcGFja2VkIG9iamVjdCcgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmVwYWNrIC1BZCAtLXVucGFjay11bnJlYWNoYWJsZT1ub3cgJiYKKwl2ZXJib3NlIGdpdCBjYXQtZmlsZSAtZSAkYm9ndXMgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlcGFjayAtYWQgJiYKKwl2ZXJib3NlIGdpdCBjYXQtZmlsZSAtZSAkYm9ndXMKKycKKworIyBzdWJzZXF1ZW50IHRlc3RzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgY29ycnVwdGlvbnMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuIHVwIGJvZ3VzIHJlZicgJworCXJtIC5naXQvcmVmcy9oZWFkcy9ib2d1cy4ubmFtZQorJworCisjIFdlIGNyZWF0ZSB0d28gbmV3IG9iamVjdHMgaGVyZSwgIm9uZSIgYW5kICJ0d28iLiBPdXIKKyMgbWFzdGVyIGJyYW5jaCBwb2ludHMgdG8gInR3byIsIHdoaWNoIGlzIGRlbGV0ZWQsCisjIGNvcnJ1cHRpbmcgdGhlIHJlcG9zaXRvcnkuIEJ1dCB3ZSdkIGxpa2UgdG8gbWFrZSBzdXJlCisjIHRoYXQgdGhlIG90aGVyd2lzZSB1bnJlYWNoYWJsZSAib25lIiBpcyBub3QgcHJ1bmVkCisjIChzaW5jZSBpdCBpcyB0aGUgdXNlcidzIGJlc3QgYmV0IGZvciByZWNvdmVyaW5nCisjIGZyb20gdGhlIGNvcnJ1cHRpb24pLgorIworIyBOb3RlIHRoYXQgd2UgYWxzbyBwb2ludCBIRUFEIHNvbWV3aGVyZSBiZXNpZGVzICJ0d28iLAorIyBhcyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSB0ZXN0IHRoZSBjYXNlIHdoZXJlIHdlCisjIHBpY2sgdXAgdGhlIHJlZmVyZW5jZSB0byAidHdvIiBieSBpdGVyYXRpbmcgdGhlIHJlZnMsCisjIG5vdCBieSByZXNvbHZpbmcgSEVBRC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBoaXN0b3J5IHdpdGggbWlzc2luZyB0aXAgY29tbWl0JyAnCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBvbmUgJiYKKwlyZWNvdmVyYWJsZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICRyZWNvdmVyYWJsZSA+c2F2ZWQgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCW1pc3Npbmc9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICRiYXNlICYmCisJcm0gLmdpdC9vYmplY3RzLyQoZWNobyAkbWlzc2luZyB8IHNlZCAicywuLiwmLywiKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtZSAkbWlzc2luZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuaW5nIHdpdGggYSBjb3JydXB0ZWQgdGlwIGRvZXMgbm90IGRyb3AgaGlzdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBzYXZlZCIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHBydW5lIC0tZXhwaXJlPW5vdyAmJgorCXZlcmJvc2UgZ2l0IGNhdC1maWxlIC1lICRyZWNvdmVyYWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLXJlZnMgZG9lcyBub3Qgc2lsZW50bHkgZGVsZXRlIGJyb2tlbiBsb29zZSByZWYnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwllY2hvICRtaXNzaW5nID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgd2UgZG8gbm90IHdhbnQgdG8gY291bnQgb24gcnVubmluZyBwYWNrLXJlZnMgdG8KKyMgYWN0dWFsbHkgcGFjayBpdCwgYXMgaXQgaXMgcGVyZmVjdGx5IHJlYXNvbmFibGUgdG8KKyMgc2tpcCBwcm9jZXNzaW5nIGEgYnJva2VuIHJlZgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhY2tlZC1yZWZzIGZpbGUgd2l0aCBicm9rZW4gcmVmJyAnCisJcm0gLWYgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAmJgorCWNhdCA+LmdpdC9wYWNrZWQtcmVmcyA8PC1FT0YgJiYKKwkkbWlzc2luZyByZWZzL2hlYWRzL21hc3RlcgorCSRyZWNvdmVyYWJsZSByZWZzL2hlYWRzL290aGVyCisJRU9GCisJZWNobyAkbWlzc2luZyA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLXJlZnMgZG9lcyBub3Qgc2lsZW50bHkgZGVsZXRlIGJyb2tlbiBwYWNrZWQgcmVmJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLXJlZnMgZG9lcyBub3QgZHJvcCBicm9rZW4gcmVmcyBkdXJpbmcgZGVsZXRpb24nICcKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL290aGVyICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTMtcGFjay1ib3VuZHMtY2hlY2tzLnNoIGIvdC90NTMxMy1wYWNrLWJvdW5kcy1jaGVja3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmE0NTU3ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMTMtcGFjay1ib3VuZHMtY2hlY2tzLnNoCkBAIC0wLDAgKzEsMTk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYm91bmRzLWNoZWNraW5nIG9mIGFjY2VzcyB0byBtbWFwcGVkIG9uLWRpc2sgZmlsZSBmb3JtYXRzJworLiAuL3Rlc3QtbGliLnNoCisKK2NsZWFyX2Jhc2UgKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAncmVzdG9yZV9iYXNlJyAmJgorCXJtIC1mICRiYXNlCit9CisKK3Jlc3RvcmVfYmFzZSAoKSB7CisJY3AgYmFzZS1iYWNrdXAvKiAuZ2l0L29iamVjdHMvcGFjay8KK30KKworZG9fcGFjayAoKSB7CisJcGFja19vYmplY3RzPSQxOyBzaGlmdAorCXNoYTE9JCgKKwkJZm9yIGkgaW4gJHBhY2tfb2JqZWN0cworCQlkbworCQkJZWNobyAkaQorCQlkb25lIHwgZ2l0IHBhY2stb2JqZWN0cyAiJEAiIC5naXQvb2JqZWN0cy9wYWNrL3BhY2sKKwkpICYmCisJcGFjaz0uZ2l0L29iamVjdHMvcGFjay9wYWNrLSRzaGExLnBhY2sgJiYKKwlpZHg9LmdpdC9vYmplY3RzL3BhY2svcGFjay0kc2hhMS5pZHggJiYKKwljaG1vZCArdyAkcGFjayAkaWR4ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICdybSAtZiAiJHBhY2siICIkaWR4IicKK30KKworbXVuZ2UgKCkgeworCXByaW50ZiAiJDMiIHwgZGQgb2Y9IiQxIiBicz0xIGNvbnY9bm90cnVuYyBzZWVrPSQyCit9CisKKyMgT2Zmc2V0IGluIGEgdjIgLmlkeCB0byBpdHMgaW5pdGlhbCBhbmQgZXh0ZW5kZWQgb2Zmc2V0IHRhYmxlcy4gRm9yIGFuIGluZGV4CisjIHdpdGggIm5yIiBvYmplY3RzLCB0aGlzIGlzOgorIworIyAgIG1hZ2ljKDQpICsgdmVyc2lvbig0KSArIGZhbi1vdXQoNCoyNTYpICsgc2hhMXMoMjAqbnIpICsgY3JjKDQqbnIpLAorIworIyBmb3IgdGhlIGluaXRpYWwsIGFuZCBhbm90aGVyIG9mcyg0Km5yKSBwYXN0IHRoYXQgZm9yIHRoZSBleHRlbmRlZC4KKyMKK29mc190YWJsZSAoKSB7CisJZWNobyAkKCg0ICsgNCArIDQqMjU2ICsgJCh0ZXN0X29pZCByYXdzeikqJDEgKyA0KiQxKSkKK30KK2V4dGVuZGVkX3RhYmxlICgpIHsKKwllY2hvICQoKCQob2ZzX3RhYmxlICIkMSIpICsgNCokMSkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCXRlc3Rfb2lkX2NhY2hlIDw8LUVPRgorCW9pZDAwMCBzaGExOjE0ODUKKwlvaWQwMDAgc2hhMjU2OjQyMjIKKworCW9pZGZmZiBzaGExOjc0CisJb2lkZmZmIHNoYTI1NjoxMzUwCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBiYXNlIHBhY2tmaWxlIGFuZCB2YXJpYWJsZXMnICcKKwkjIHRoZSBoYXNoIG9mIHRoaXMgY29udGVudCBzdGFydHMgd2l0aCBmZiwgd2hpY2gKKwkjIG1ha2VzIHNvbWUgbGF0ZXIgY29tcHV0YXRpb25zIG11Y2ggc2ltcGxlcgorCWVjaG8gJCh0ZXN0X29pZCBvaWRmZmYpID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHJlcGFjayAtYWQgJiYKKwliYXNlPSQoZWNobyAuZ2l0L29iamVjdHMvcGFjay8qKSAmJgorCWNobW9kICt3ICRiYXNlICYmCisJbWtkaXIgYmFzZS1iYWNrdXAgJiYKKwljcCAkYmFzZSBiYXNlLWJhY2t1cC8gJiYKKwlvYmplY3Q9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay9pbmRleCBvYmplY3QgY291bnQgbWlzbWF0Y2gnICcKKwlkb19wYWNrICRvYmplY3QgJiYKKwltdW5nZSAkcGFjayA4ICJcMzc3XDBcMFwwIiAmJgorCWNsZWFyX2Jhc2UgJiYKKworCSMgV2UgZW51bWVyYXRlIHRoZSBvYmplY3RzIGZyb20gdGhlIGNvbXBsZXRlbHktZmluZQorCSMgLmlkeCwgYnV0IG5vdGljZSBsYXRlciB0aGF0IHRoZSAucGFjayBpcyBib2d1cworCSMgYW5kIGZhaWwgdG8gc2hvdyBhbnkgZGF0YS4KKwllY2hvICIkb2JqZWN0IG1pc3NpbmciID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLS1iYXRjaC1hbGwtb2JqZWN0cyAtLWJhdGNoLWNoZWNrID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIC4uLmFuZCBoZXJlIGZhaWwgdG8gbG9hZCB0aGUgb2JqZWN0ICh3aXRob3V0IHNlZ2ZhdWx0aW5nKSwKKwkjIGJ1dCBmYWxsYmFjayB0byBhIGdvb2QgY29weSBpZiBhdmFpbGFibGUuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJG9iamVjdCAmJgorCXJlc3RvcmVfYmFzZSAmJgorCWdpdCBjYXQtZmlsZSBibG9iICRvYmplY3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGZpbGUgYWN0dWFsICYmCisKKwkjIC4uLmFuZCBtYWtlIHN1cmUgdGhhdCBpbmRleC1wYWNrIC0tdmVyaWZ5LCB3aGljaCBoYXMgaXRzCisJIyBvd24gcmVhZGluZyByb3V0aW5lcywgZG9lcyBub3Qgc2VnZmF1bHQuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgJHBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2hlZCBib2d1cyBvYmplY3QgY291bnQnICcKKwlkb19wYWNrICRvYmplY3QgJiYKKwltdW5nZSAkcGFjayA4ICJcMzc3XDBcMFwwIiAmJgorCW11bmdlICRpZHggJCgoMjU1ICogNCkpICJcMzc3XDBcMFwwIiAmJgorCWNsZWFyX2Jhc2UgJiYKKworCSMgVW5saWtlIGFib3ZlLCB3ZSBzaG91bGQgbm90aWNlIGVhcmx5IHRoYXQgdGhlIC5pZHggaXMgdG90YWxseQorCSMgYm9ndXMsIGFuZCBub3QgZXZlbiBlbnVtZXJhdGUgaXRzIGNvbnRlbnRzLgorCWdpdCBjYXQtZmlsZSAtLWJhdGNoLWFsbC1vYmplY3RzIC0tYmF0Y2gtY2hlY2sgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKworCSMgQnV0IGFzIGJlZm9yZSwgd2UgY2FuIGRvIHRoZSBzYW1lIG9iamVjdC1hY2Nlc3MgY2hlY2tzLgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRvYmplY3QgJiYKKwlyZXN0b3JlX2Jhc2UgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiAkb2JqZWN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmaWxlIGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgJHBhY2sKKycKKworIyBOb3RlIHRoYXQgd2UgY2Fubm90IGNoZWNrIHRoZSBmYWxsYmFjayBjYXNlIGZvciB0aGVzZQorIyBmdXJ0aGVyIC5pZHggdGVzdHMsIGFzIHdlIG5vdGljZSB0aGUgcHJvYmxlbSBpbiBmdW5jdGlvbnMKKyMgd2hvc2UgaW50ZXJmYWNlIGRvZXNuJ3QgYWxsb3cgYW4gZXJyb3IgcmV0dXJuIChsaWtlIHVzZV9wYWNrKCkpLAorIyBhbmQgdGh1cyB3ZSBqdXN0IGRpZSgpLgorIworIyBUaGVyZSdzIGFsc28gbm8gcG9pbnQgaW4gZG9pbmcgZW51bWVyYXRpb24gdGVzdHMsIGFzCisjIHdlIGFyZSBtdW5naW5nIG9mZnNldHMgaGVyZSwgd2hpY2ggYXJlIGFib3V0IGxvb2tpbmcgdXAKKyMgc3BlY2lmaWMgb2JqZWN0cy4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9ndXMgb2JqZWN0IG9mZnNldCAodjEpJyAnCisJZG9fcGFjayAkb2JqZWN0IC0taW5kZXgtdmVyc2lvbj0xICYmCisJbXVuZ2UgJGlkeCAkKCg0ICogMjU2KSkgIlwzNzdcMFwwXDAiICYmCisJY2xlYXJfYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRvYmplY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAkcGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2d1cyBvYmplY3Qgb2Zmc2V0ICh2Miwgbm8gbXNiKScgJworCWRvX3BhY2sgJG9iamVjdCAtLWluZGV4LXZlcnNpb249MiAmJgorCW11bmdlICRpZHggJChvZnNfdGFibGUgMSkgIlwwXDM3N1wwXDAiICYmCisJY2xlYXJfYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRvYmplY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAkcGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2d1cyBvZmZzZXQgaW50byB2MiBleHRlbmRlZCB0YWJsZScgJworCWRvX3BhY2sgJG9iamVjdCAtLWluZGV4LXZlcnNpb249MiAmJgorCW11bmdlICRpZHggJChvZnNfdGFibGUgMSkgIlwzNzdcMFwwXDAiICYmCisJY2xlYXJfYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRvYmplY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAkcGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2d1cyBvZmZzZXQgaW5zaWRlIHYyIGV4dGVuZGVkIHRhYmxlJyAnCisJIyBXZSBuZWVkIHR3byBvYmplY3RzIGhlcmUsIHNvIHdlIGNhbiBwbGF1c2libHkgcmVxdWlyZQorCSMgYW4gZXh0ZW5kZWQgdGFibGUgKGlmIHRoZSBmaXJzdCBvYmplY3Qgd2VyZSBsYXJnZXIgdGhhbiAyXjMxKS4KKwkjCisJIyBOb3RlIHRoYXQgdGhlIHZhbHVlIGlzIGltcG9ydGFudCBoZXJlLiBXZSB3YW50ICRvYmplY3QgYXMKKwkjIHRoZSBzZWNvbmQgZW50cnkgaW4gc29ydGVkLWhhc2ggb3JkZXIuIFRoZSBoYXNoIG9mIHRoaXMgb2JqZWN0IHN0YXJ0cworCSMgd2l0aCAiMDAwIiwgd2hpY2ggc29ydHMgYmVmb3JlIHRoYXQgb2YgJG9iamVjdCAod2hpY2ggc3RhcnRzCisJIyB3aXRoICJmZmYiKS4KKwlzZWNvbmQ9JCh0ZXN0X29pZCBvaWQwMDAgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlkb19wYWNrICIkb2JqZWN0ICRzZWNvbmQiIC0taW5kZXgtdmVyc2lvbj0yICYmCisKKwkjIFdlIGhhdmUgdG8gbWFrZSBleHRyYSByb29tIGZvciB0aGUgdGFibGUsIHNvIHdlIGNhbm5vdAorCSMganVzdCBtdW5nZSBpbiBwbGFjZSBhcyB1c3VhbC4KKwl7CisJCWRkIGlmPSRpZHggYnM9MSBjb3VudD0kKCgkKG9mc190YWJsZSAyKSArIDQpKSAmJgorCQlwcmludGYgIlwyMDBcMFwwXDAiICYmCisJCXByaW50ZiAiXDM3N1wwXDBcMFwwXDBcMFwwIiAmJgorCQlkZCBpZj0kaWR4IGJzPTEgc2tpcD0kKGV4dGVuZGVkX3RhYmxlIDIpCisJfSA+dG1wICYmCisJbXYgdG1wICIkaWR4IiAmJgorCWNsZWFyX2Jhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkb2JqZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgJHBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9ndXMgT0ZTX0RFTFRBIGluIHBhY2tmaWxlJyAnCisJIyBHZW5lcmF0ZSBhIHBhY2sgd2l0aCBhIGRlbHRhIGluIGl0LgorCWJhc2U9JCh0ZXN0LXRvb2wgZ2VucmFuZG9tIGZvbyAzMDAwIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJZGVsdGE9JCh0ZXN0LXRvb2wgZ2VucmFuZG9tIGZvbyAyMDAwIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJZG9fcGFjayAiJGJhc2UgJGRlbHRhIiAtLWRlbHRhLWJhc2Utb2Zmc2V0ICYmCisJcm0gLWYgLmdpdC9vYmplY3RzLz8/LyogJiYKKworCSMgRG91YmxlIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgZGVsdGEgd2UgZXhwZWN0LgorCWVjaG8gJGJhc2UgPmV4cGVjdCAmJgorCWVjaG8gJGRlbHRhIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiUoZGVsdGFiYXNlKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgTm93IGNvcnJ1cHQgaXQuIFdlIGFzc3VtZSB0aGUgdmFyaW50IHNpemUgZm9yIHRoZSBkZWx0YSBpcyBzbWFsbAorCSMgZW5vdWdoIHRvIGZpdCBpbiB0aGUgZmlyc3QgYnl0ZSAod2hpY2ggaXQgc2hvdWxkIGJlLCBzaW5jZSBpdAorCSMgaXMgYSBwdXJlIGRlbGV0aW9uIGZyb20gdGhlIGJhc2UpLCBhbmQgdGhhdCBvcmlnaW5hbCBvZnNfZGVsdGEKKwkjIHRha2VzIDIgYnl0ZXMgKHdoaWNoIGl0IHNob3VsZCwgYXMgaXQgc2hvdWxkIGJlIH4zMDAwKS4KKwlvZnM9JChnaXQgc2hvdy1pbmRleCA8JGlkeCB8IGdyZXAgJGRlbHRhIHwgY3V0IC1kIiAiIC1mMSkgJiYKKwltdW5nZSAkcGFjayAkKCgkb2ZzICsgMSkpICJcMTc3XDM3NyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkZGVsdGEgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTQtcGFjay1jeWNsZS1kZXRlY3Rpb24uc2ggYi90L3Q1MzE0LXBhY2stY3ljbGUtZGV0ZWN0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhZWM4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzE0LXBhY2stY3ljbGUtZGV0ZWN0aW9uLnNoCkBAIC0wLDAgKzEsMTEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBoYW5kbGluZyBvZiBpbnRlci1wYWNrIGRlbHRhIGN5Y2xlcyBkdXJpbmcgcmVwYWNrCisKK1RoZSBnb2FsIGhlcmUgaXMgdG8gY3JlYXRlIGEgc2l0dWF0aW9uIHdoZXJlIHdlIGhhdmUgdHdvIGJsb2JzLCBBIGFuZCBCLCB3aXRoIEEKK2FzIGEgZGVsdGEgYWdhaW5zdCBCIGluIG9uZSBwYWNrLCBhbmQgdmljZSB2ZXJzYSBpbiB0aGUgb3RoZXIuIFRoZW4gaWYgd2UgY2FuCitwZXJzdWFkZSBhIGZ1bGwgcmVwYWNrIHRvIGZpbmQgQSBmcm9tIG9uZSBwYWNrIGFuZCBCIGZyb20gdGhlIG90aGVyLCB0aGF0IHdpbGwKK2dpdmUgdXMgYSBjeWNsZSB3aGVuIHdlIGF0dGVtcHQgdG8gcmV1c2UgdGhvc2UgZGVsdGFzLgorCitUaGUgdHJpY2sgaXMgaW4gdGhlICJwZXJzdWFkZSIgc3RlcCwgYXMgaXQgZGVwZW5kcyBvbiB0aGUgaW50ZXJuYWxzIG9mIGhvdworcGFjay1vYmplY3RzIHBpY2tzIHdoaWNoIHBhY2sgdG8gcmV1c2UgdGhlIGRlbHRhcyBmcm9tLiBCdXQgd2UgY2FuIGFzc3VtZQordGhhdCBpdCBkb2VzIHNvIGluIG9uZSBvZiB0d28gZ2VuZXJhbCBzdHJhdGVnaWVzOgorCisgMS4gVXNpbmcgYSBzdGF0aWMgb3JkZXJpbmcgb2YgcGFja3MuIEluIHRoaXMgY2FzZSwgbm8gaW50ZXItcGFjayBjeWNsZXMgY2FuCisgICAgaGFwcGVuLiBBbnkgb2JqZWN0cyB3aXRoIGEgZGVsdGEgcmVsYXRpb25zaGlwIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc2FtZQorICAgIHBhY2sgKGkuZS4sIG5vICItLXRoaW4iIHBhY2tzIG9uIGRpc2spLCBzbyB3ZSB3aWxsIGZpbmQgYWxsIHJlbGF0ZWQgb2JqZWN0cworICAgIGZyb20gdGhhdCBwYWNrLiBTbyBhc3N1bWluZyB0aGVyZSBhcmUgbm8gY3ljbGVzIHdpdGhpbiBhIHNpbmdsZSBwYWNrIChhbmQKKyAgICB3ZSBhdm9pZCBnZW5lcmF0aW5nIHRoZW0gdmlhIHBhY2stb2JqZWN0cyBvciBpbXBvcnRpbmcgdGhlbSB2aWEKKyAgICBpbmRleC1wYWNrKSwgdGhlbiBvdXIgcmVzdWx0IHdpbGwgaGF2ZSBubyBjeWNsZXMuCisKKyAgICBTbyB0aGlzIGNhc2Ugc2hvdWxkIHBhc3MgdGhlIHRlc3RzIG5vIG1hdHRlciBob3cgd2UgYXJyYW5nZSB0aGluZ3MuCisKKyAyLiBQaWNraW5nIHRoZSBuZXh0IHBhY2sgdG8gZXhhbWluZSBiYXNlZCBvbiBsb2NhbGl0eSAoaS5lLiwgd2hlcmUgd2UgZm91bmQKKyAgICBzb21ldGhpbmcgZWxzZSByZWNlbnRseSkuCisKKyAgICBJbiB0aGlzIGNhc2UsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZmluZCB0aGUgZGVsdGEgdmVyc2lvbnMgb2YgQSBhbmQKKyAgICBCIGFuZCBub3QgdGhlaXIgYmFzZSB2ZXJzaW9ucy4gV2UgY2FuIGRvIHRoaXMgYnkgcHV0dGluZyB0d28gYmxvYnMgaW4gZWFjaAorICAgIHBhY2suIFRoZSBmaXJzdCBpcyBhICJkdW1teSIgYmxvYiB0aGF0IGNhbiBvbmx5IGJlIGZvdW5kIGluIHRoZSBwYWNrIGluCisgICAgcXVlc3Rpb24uICBBbmQgdGhlbiB0aGUgc2Vjb25kIGlzIHRoZSBhY3R1YWwgZGVsdGEgd2Ugd2FudCB0byBmaW5kLgorCisgICAgVGhlIHR3byBibG9icyBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHNhbWUgdHJlZSwgbm90IHByZXNlbnQgaW4gb3RoZXIgdHJlZXMsCisgICAgYW5kIHRoZSBkdW1teSBwYXRobmFtZSBtdXN0IHNvcnQgYmVmb3JlIHRoZSBkZWx0YSBwYXRoLgorCitUaGUgc2V0dXAgYmVsb3cgZm9jdXNlcyBvbiBjYXNlIDIuIFdlIGhhdmUgdHdvIGNvbW1pdHMgSEVBRCBhbmQgSEVBRF4sIGVhY2gKK3doaWNoIGhhcyB0d28gZmlsZXM6ICJkdW1teSIgYW5kICJmaWxlIi4gVGhlbiB3ZSBjYW4gbWFrZSB0d28gcGFja3Mgd2hpY2gKK2NvbnRhaW46CisKKyAgW3BhY2sgb25lXQorICBIRUFEOmR1bW15CisgIEhFQUQ6ZmlsZSAgKGFzIGRlbHRhIGFnYWluc3QgSEVBRF46ZmlsZSkKKyAgSEVBRF46ZmlsZSAoYXMgYmFzZSkKKworICBbcGFjayB0d29dCisgIEhFQUReOmR1bW15CisgIEhFQUReOmZpbGUgKGFzIGRlbHRhIGFnYWluc3QgSEVBRDpmaWxlKQorICBIRUFEOmZpbGUgIChhcyBiYXNlKQorCitUaGVuIG5vIG1hdHRlciB3aGljaCBvcmRlciB3ZSBzdGFydCBsb29raW5nIGF0IHRoZSBwYWNrcyBpbiwgd2Uga25vdyB0aGF0IHdlCit3aWxsIGFsd2F5cyBmaW5kIGEgZGVsdGEgZm9yICJmaWxlIiwgYmVjYXVzZSBpdHMgbG9va3VwIHdpbGwgYWx3YXlzIGNvbWUKK2ltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsb29rdXAgZm9yICJkdW1teSIuCisnCisuIC4vdGVzdC1saWIuc2gKKworCisKKyMgQ3JlYXRlIGEgcGFjayBjb250YWluaW5nIHRoZSB0cmVlICQxIGFuZCBibG9iICQxOmZpbGUsIHdpdGgKKyMgdGhlIGxhdHRlciBzdG9yZWQgYXMgYSBkZWx0YSBhZ2FpbnN0ICQyOmZpbGUuCisjCisjIFdlIGNvbnZpbmNlIHBhY2stb2JqZWN0cyB0byBtYWtlIHRoZSBkZWx0YSBpbiB0aGUgZGlyZWN0aW9uIG9mIG91ciBjaG9vc2luZworIyBieSBtYXJraW5nICQyIGFzIGEgcHJlZmVycmVkLWJhc2UgZWRnZS4gVGhhdCByZXN1bHRzIGluICQxOmZpbGUgYXMgYSB0aGluCisjIGRlbHRhLCBhbmQgaW5kZXgtcGFjayBjb21wbGV0ZXMgaXQgYnkgYWRkaW5nICQyOmZpbGUgYXMgYSBiYXNlLgorIworIyBOb3RlIHRoYXQgdGhlIHR3byB2YXJpYW50cyBvZiAiZmlsZSIgbXVzdCBiZSBzaW1pbGFyIGVub3VnaCB0byBjb252aW5jZSBnaXQKKyMgdG8gY3JlYXRlIHRoZSBkZWx0YS4KK21ha2VfcGFjayAoKSB7CisJeworCQlwcmludGYgJyVzXG4nICItJChnaXQgcmV2LXBhcnNlICQyKSIKKwkJcHJpbnRmICclcyBkdW1teVxuJyAiJChnaXQgcmV2LXBhcnNlICQxOmR1bW15KSIKKwkJcHJpbnRmICclcyBmaWxlXG4nICIkKGdpdCByZXYtcGFyc2UgJDE6ZmlsZSkiCisJfSB8CisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCB8CisJZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiAtLWZpeC10aGluCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdC10b29sIGdlbnJhbmRvbSBiYXNlIDQwOTYgPmJhc2UgJiYKKwlmb3IgaSBpbiBvbmUgdHdvCisJZG8KKwkJIyB3ZSB3YW50IHNoYXJlZCBjb250ZW50IGhlcmUgdG8gZW5jb3VyYWdlIGRlbHRhcy4uLgorCQljcCBiYXNlIGZpbGUgJiYKKwkJZWNobyAkaSA+PmZpbGUgJiYKKworCQkjIC4uLndoZXJlYXMgZHVtbXkgc2hvdWxkIGJlIHNob3J0LCBiZWNhdXNlIHdlIGRvIG5vdCB3YW50CisJCSMgZGVsdGFzIHRoYXQgd291bGQgY3JlYXRlIGR1cGxpY2F0ZXMgd2hlbiB3ZSAtLWZpeC10aGluCisJCWVjaG8gJGkgPmR1bW15ICYmCisKKwkJZ2l0IGFkZCBmaWxlIGR1bW15ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICRpIHx8CisJCXJldHVybiAxCisJZG9uZSAmJgorCisJbWFrZV9wYWNrIEhFQUReIEhFQUQgJiYKKwltYWtlX3BhY2sgSEVBRCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2snICcKKwkjIFdlIGZpcnN0IHdhbnQgdG8gY2hlY2sgdGhhdCB3ZSBkbyBub3QgaGF2ZSBhbnkgaW50ZXJuYWwgZXJyb3JzLAorCSMgYW5kIGFsc28gdGhhdCB3ZSBkbyBub3QgaGl0IHRoZSBsYXN0LWRpdGNoIGN5Y2xlLWJyZWFraW5nIGNvZGUKKwkjIGluIHdyaXRlX29iamVjdCgpLCB3aGljaCB3aWxsIGlzc3VlIGEgd2FybmluZyB0byBzdGRlcnIuCisJZ2l0IHJlcGFjayAtYWQgMj5zdGRlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3RkZXJyICYmCisKKwkjIEFuZCB0aGVuIGRvdWJsZS1jaGVjayB0aGF0IHRoZSByZXN1bHRpbmcgcGFjayBpcyB1c2FibGUgKGkuZS4sCisJIyB3ZSBkaWQgbm90IGZhaWwgdG8gbm90aWNlIGFueSBjeWNsZXMpLiBXZSBrbm93IHdlIGFyZSBhY2Nlc3NpbmcKKwkjIHRoZSBvYmplY3RzIHZpYSB0aGUgbmV3IHBhY2sgaGVyZSwgYmVjYXVzZSAicmVwYWNrIC1kIiB3aWxsIGhhdmUKKwkjIHJlbW92ZWQgdGhlIG90aGVycy4KKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmZpbGUgPi9kZXYvbnVsbCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmZpbGUgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTUtcGFjay1vYmplY3RzLWNvbXByZXNzaW9uLnNoIGIvdC90NTMxNS1wYWNrLW9iamVjdHMtY29tcHJlc3Npb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY5NzBkNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMTUtcGFjay1vYmplY3RzLWNvbXByZXNzaW9uLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwYWNrLW9iamVjdCBjb21wcmVzc2lvbiBjb25maWd1cmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byB0ZXN0LWxpYi5zaCB0b2dldGhlciB3aXRoIHRoZQorIyBjb3B5IGluIHQwMDIxIGFmdGVyIGJvdGggdG9waWNzIGhhdmUgZ3JhZHVhdGVkIHRvICdtYXN0ZXInLgorZmlsZV9zaXplICgpIHsKKwl0ZXN0LXRvb2wgcGF0aC11dGlscyBmaWxlLXNpemUgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlwcmludGYgIiUyMDAwMDAwcyIgWCB8CisJZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPm9iamVjdC1uYW1lICYmCisJIyBtYWtlIHN1cmUgaXQgcmVzdWx0ZWQgaW4gYSBsb29zZSBvYmplY3QKKwlvYj0kKHNlZCAtZSAicy9cKC4uXCkuKi9cMS8iIG9iamVjdC1uYW1lKSAmJgorCWplY3Q9JChzZWQgLWUgInMvLi5cKC4qXCkvXDEvIiBvYmplY3QtbmFtZSkgJiYKKwl0ZXN0IC1mIC5naXQvb2JqZWN0cy8kb2IvJGplY3QKKycKKword2hpbGUgcmVhZCBleHBlY3QgY29uZmlnCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInBhY2stb2JqZWN0cyB3aXRoICRjb25maWciICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBwYWNrLSouKiIgJiYKKwkJZ2l0ICRjb25maWcgcGFjay1vYmplY3RzIHBhY2sgPG9iamVjdC1uYW1lICYmCisJCXN6PSQoZmlsZV9zaXplIHBhY2stKi5wYWNrKSAmJgorCQljYXNlICIkZXhwZWN0IiBpbgorCQlzbWFsbCkgdGVzdCAiJHN6IiAtbGUgMTAwMDAwIDs7CisJCWxhcmdlKSB0ZXN0ICIkc3oiIC1nZSAxMDAwMDAgOzsKKwkJZXNhYworCScKK2RvbmUgPDxcRU9GCitsYXJnZSAtYyBjb3JlLmNvbXByZXNzaW9uPTAKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249OQorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj0wIC1jIHBhY2suY29tcHJlc3Npb249MAorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj05IC1jIHBhY2suY29tcHJlc3Npb249MAorc21hbGwgLWMgY29yZS5jb21wcmVzc2lvbj0wIC1jIHBhY2suY29tcHJlc3Npb249OQorc21hbGwgLWMgY29yZS5jb21wcmVzc2lvbj05IC1jIHBhY2suY29tcHJlc3Npb249OQorbGFyZ2UgLWMgcGFjay5jb21wcmVzc2lvbj0wCitzbWFsbCAtYyBwYWNrLmNvbXByZXNzaW9uPTkKK0VPRgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTYtcGFjay1kZWx0YS1kZXB0aC5zaCBiL3QvdDUzMTYtcGFjay1kZWx0YS1kZXB0aC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjA2YzQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMxNi1wYWNrLWRlbHRhLWRlcHRoLnNoCkBAIC0wLDAgKzEsOTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwYWNrLW9iamVjdHMgYnJlYWtzIGxvbmcgY3Jvc3MtcGFjayBkZWx0YSBjaGFpbnMnCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGlzIG1pcnJvcnMgYSByZXBlYXRlZCBwdXNoIHNldHVwOgorIworIyAxLiBBIGNsaWVudCByZXBlYXRlZGx5IG1vZGlmaWVzIHNvbWUgZmlsZXMsIG1ha2VzIGEKKyMgICAgICBjb21taXQsIGFuZCBwdXNoZXMgdGhlIHJlc3VsdC4gSXQgZG9lcyB0aGlzIE4gdGltZXMKKyMgICAgICBiZWZvcmUgd2UgZ2V0IGFyb3VuZCB0byByZXBhY2tpbmcuCisjCisjIDIuIEVhY2ggcHVzaCBnZW5lcmF0ZXMgYSB0aGluIHBhY2sgd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YKKyMgICAgdmFyaW91cyBvYmplY3RzLiBMZXQncyBjb25zaWRlciBzb21lIGZpbGUgaW4gdGhlIHJvb3QgdHJlZQorIyAgICB3aGljaCBpcyB1cGRhdGVkIGluIGVhY2ggY29tbWl0LgorIworIyAgICBXaGVuIGdlbmVyYXRpbmcgcHVzaCBudW1iZXIgWCwgd2UgZmVlZCBjb21taXQgWC0xIChhbmQKKyMgICAgdGh1cyBibG9iIFgtMSkgYXMgYSBwcmVmZXJyZWQgYmFzZS4gVGhlIHJlc3VsdGluZyBwYWNrIGhhcworIyAgICBibG9iIFggYXMgYSB0aGluIGRlbHRhIGFnYWluc3QgYmxvYiBYLTEuCisjCisjICAgIE9uIHRoZSByZWNlaXZpbmcgZW5kLCAiaW5kZXgtcGFjayAtLWZpeC10aGluIiB3aWxsCisjICAgIGNvbXBsZXRlIHRoZSBwYWNrIHdpdGggYSBiYXNlIGNvcHkgb2YgYmxvYiBYLTEuCisjCisjIDMuIEluIG9sZGVyIHZlcnNpb25zIG9mIGdpdCwgaWYgd2UgdXNlZCB0aGUgZGVsdGEgZnJvbQorIyAgICBwYWNrIFgsIHRoZW4gd2UnZCBhbHdheXMgZmluZCBibG9iIFgtMSBhcyBhIGJhc2UgaW4gdGhlCisjICAgIHNhbWUgcGFjayAoYW5kIGdlbmVyYXRlIGEgZnJlc2ggZGVsdGEpLgorIworIyAgICBCdXQgd2l0aCB0aGUgcGFjayBtcnUsIHdlIGp1bXAgZnJvbSBkZWx0YSB0byBkZWx0YQorIyAgICBmb2xsb3dpbmcgdGhlIHRyYXZlcnNhbCBvcmRlcjoKKyMKKyMgICAgICBhLiBXZSBncmFiIGJsb2IgWCBmcm9tIHBhY2sgWCBhcyBhIGRlbHRhLCBwdXR0aW5nIGl0IGF0CisjICAgICAgICAgdGhlIHRpcCBvZiBvdXIgbXJ1IGxpc3QuCisjCisjICAgICAgYi4gRXZlbnR1YWxseSB3ZSBtb3ZlIG9udG8gY29tbWl0IFgtMS4gV2UgbmVlZCBvdGhlcgorIyAgICAgICAgIG9iamVjdHMgd2hpY2ggYXJlIG9ubHkgaW4gcGFjayBYLTEgKGluIHRoZSB0ZXN0IGNvZGUKKyMgICAgICAgICBiZWxvdywgaXQncyB0aGUgY29udGFpbmluZyB0cmVlKS4gVGhhdCBwdXRzIHBhY2sgWC0xCisjICAgICAgICAgYXQgdGhlIHRpcCBvZiBvdXIgbXJ1IGxpc3QuCisjCisjICAgICAgYy4gRXZlbnR1YWxseSB3ZSBsb29rIGZvciBibG9iIFgtMSwgYW5kIHdlIGZpbmQgdGhlCisjICAgICAgICAgdmVyc2lvbiBpbiBwYWNrIFgtMSAoYmVjYXVzZSBpdCdzIHRoZSBtcnUgdGlwKS4KKyMKKyMgTm93IHdlIGhhdmUgYmxvYiBYIGFzIGEgZGVsdGEgYWdhaW5zdCBYLTEsIHdoaWNoIGlzIGEgZGVsdGEKKyMgYWdhaW5zdCBYLTIsIGFuZCBzbyBmb3J0aC4KKyMKKyMgSW4gdGhlIHJlYWwgd29ybGQsIHRoZXNlIHNtYWxsIHB1c2hlcyB3b3VsZCBnZXQgZXhwbG9kZWQgYnkKKyMgdW5wYWNrLW9iamVjdHMgcmF0aGVyIHRoYW4gImluZGV4LXBhY2sgLS1maXgtdGhpbiIsIGJ1dCB0aGUKKyMgc2FtZSBwcmluY2lwbGUgYXBwbGllcyB0byBsYXJnZXIgcHVzaGVzICh0aGV5IG9ubHkgbmVlZCBvbmUKKyMgcmVwZWF0ZWRseS1tb2RpZmllZCBmaWxlIHRvIGdlbmVyYXRlIHRoZSBkZWx0YSBjaGFpbikuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzZXJpZXMgb2YgcGFja3MnICcKKwl0ZXN0LXRvb2wgZ2VucmFuZG9tIGZvbyA0MDk2ID5jb250ZW50ICYmCisJcHJldj0gJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTApCisJZG8KKwkJY2F0IGNvbnRlbnQgPmZpbGUgJiYKKwkJZWNobyAkaSA+PmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gJGkgJiYKKwkJY3VyPSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwkJeworCQkJdGVzdCAtbiAiJHByZXYiICYmIGVjaG8gIi0kcHJldiIKKwkJCWVjaG8gJGN1cgorCQkJZWNobyAiJChnaXQgcmV2LXBhcnNlIDpmaWxlKSBmaWxlIgorCQl9IHwgZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCA+dG1wICYmCisJCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gLS1maXgtdGhpbiA8dG1wIHx8IHJldHVybiAxCisJCXByZXY9JGN1cgorCWRvbmUKKycKKworbWF4X2NoYWluKCkgeworCWdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5LXN0YXQtb25seSAiJDEiID5vdXRwdXQgJiYKKwlwZXJsIC1sbmUgJworCSAgL2NoYWluIGxlbmd0aCA9IChcZCspLyBhbmQgJGxlbiA9ICQxOworCSAgRU5EIHsgcHJpbnQgJGxlbiB9CisJJyBvdXRwdXQKK30KKworIyBOb3RlIHRoYXQgdGhpcyB3aG9sZSBzZXR1cCBpcyBwcmV0dHkgcmVsaWFudCBvbiB0aGUgY3VycmVudAorIyBwYWNraW5nIGhldXJpc3RpY3MuIFdlIGRvdWJsZS1jaGVjayB0aGF0IG91ciB0ZXN0IGNhc2UKKyMgYWN0dWFsbHkgcHJvZHVjZXMgYSBsb25nIGNoYWluLiBJZiBpdCBkb2Vzbid0LCBpdCBzaG91bGQgYmUKKyMgYWRqdXN0ZWQgKG9yIHNjcmFwcGVkIGlmIHRoZSBoZXVyaXN0aWNzIGhhdmUgYmVjb21lIHRvbyB1bnJlbGlhYmxlKQordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja2luZyBwcm9kdWNlcyBhIGxvbmcgZGVsdGEnICcKKwkjIFVzZSAtLXdpbmRvdz0wIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgc2VlaW5nIHJldXNlZCBkZWx0YXMsCisJIyBub3QgY29tcHV0aW5nIGEgbmV3IGxvbmcgY2hhaW4uCisJcGFjaz0kKGdpdCBwYWNrLW9iamVjdHMgLS1hbGwgLS13aW5kb3c9MCA8L2Rldi9udWxsIHBhY2spICYmCisJZWNobyA5ID5leHBlY3QgJiYKKwltYXhfY2hhaW4gcGFjay0kcGFjay5wYWNrID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRlcHRoIGxpbWl0cyBkZXB0aCcgJworCXBhY2s9JChnaXQgcGFjay1vYmplY3RzIC0tYWxsIC0tZGVwdGg9NSA8L2Rldi9udWxsIHBhY2spICYmCisJZWNobyA1ID5leHBlY3QgJiYKKwltYXhfY2hhaW4gcGFjay0kcGFjay5wYWNrID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTctcGFjay1vYmplY3RzLWZpbHRlci1vYmplY3RzLnNoIGIvdC90NTMxNy1wYWNrLW9iamVjdHMtZmlsdGVyLW9iamVjdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGMwNDQ2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMTctcGFjay1vYmplY3RzLWZpbHRlci1vYmplY3RzLnNoCkBAIC0wLDAgKzEsNDMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHBhY2stb2JqZWN0cyB1c2luZyBvYmplY3QgZmlsdGVyaW5nJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0IGJsb2I6bm9uZSBmaWx0ZXIuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHIxJyAnCisJZWNobyAie3ByaW50IFwkMX0iID5wcmludF8xLmF3ayAmJgorCWVjaG8gIntwcmludCBcJDJ9IiA+cHJpbnRfMi5hd2sgJiYKKworCWdpdCBpbml0IHIxICYmCisJZm9yIG4gaW4gMSAyIDMgNCA1CisJZG8KKwkJZWNobyAiVGhpcyBpcyBmaWxlOiAkbiIgPiByMS9maWxlLiRuCisJCWdpdCAtQyByMSBhZGQgZmlsZS4kbgorCQlnaXQgLUMgcjEgY29tbWl0IC1tICIkbiIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iIGNvdW50IGluIG5vcm1hbCBwYWNrZmlsZScgJworCWdpdCAtQyByMSBscy1maWxlcyAtcyBmaWxlLjEgZmlsZS4yIGZpbGUuMyBmaWxlLjQgZmlsZS41IFwKKwkJPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjEgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCA+YWxsLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMSBpbmRleC1wYWNrIC4uL2FsbC5wYWNrICYmCisKKwlnaXQgLUMgcjEgdmVyaWZ5LXBhY2sgLXYgLi4vYWxsLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2I6bm9uZSBwYWNrZmlsZSBoYXMgbm8gYmxvYnMnICcKKwlnaXQgLUMgcjEgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1ibG9iOm5vbmUgPmZpbHRlci5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjEgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgorCisJZ2l0IC1DIHIxIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJISBncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm9ybWFsIGFuZCBibG9iOm5vbmUgcGFja2ZpbGVzIGhhdmUgc2FtZSBjb21taXRzL3RyZWVzJyAnCisJZ2l0IC1DIHIxIHZlcmlmeS1wYWNrIC12IC4uL2FsbC5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCAtRSAiY29tbWl0fHRyZWUiIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByMSB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCWdyZXAgLUUgImNvbW1pdHx0cmVlIiB2ZXJpZnlfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgYW4gZXJyb3IgZm9yIG1pc3NpbmcgdHJlZSBvYmplY3QnICcKKwlnaXQgaW5pdCByNSAmJgorCWVjaG8gZm9vID5yNS9mb28gJiYKKwlnaXQgLUMgcjUgYWRkIGZvbyAmJgorCWdpdCAtQyByNSBjb21taXQgLW0gImZvbyIgJiYKKwlnaXQgLUMgcjUgcmV2LXBhcnNlIEhFQURee3RyZWV9ID50cmVlICYmCisJZGVsPSQoc2VkICJzfC4ufCYvfCIgdHJlZSkgJiYKKwlybSByNS8uZ2l0L29iamVjdHMvJGRlbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByNSBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IDI+YmFkX3RyZWUgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdyZXAgImJhZCB0cmVlIG9iamVjdCIgYmFkX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHRlc3RzIG9mIHRyZWU6MCcgJworCW1rZGlyIHIxL3N1YnRyZWUgJiYKKwllY2hvICJUaGlzIGlzIGEgZmlsZSBpbiBhIHN1YnRyZWUiID5yMS9zdWJ0cmVlL2ZpbGUgJiYKKwlnaXQgLUMgcjEgYWRkIHN1YnRyZWUvZmlsZSAmJgorCWdpdCAtQyByMSBjb21taXQgLW0gc3VidHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdHJlZTowIHBhY2tmaWxlIGhhcyBubyBibG9icyBvciB0cmVlcycgJworCWdpdCAtQyByMSBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPXRyZWU6MCA+Y29tbWl0c29ubHkucGFjayA8PC1FT0YgJiYKKwlIRUFECisJRU9GCisJZ2l0IC1DIHIxIGluZGV4LXBhY2sgLi4vY29tbWl0c29ubHkucGFjayAmJgorCWdpdCAtQyByMSB2ZXJpZnktcGFjayAtdiAuLi9jb21taXRzb25seS5wYWNrID5vYmpzICYmCisJISBncmVwIC1FICJ0cmVlfGJsb2IiIG9ianMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JhYiB0cmVlIGRpcmVjdGx5IHdoZW4gdXNpbmcgdHJlZTowJyAnCisJIyBXZSBzaG91bGQgZ2V0IHRoZSB0cmVlIHNwZWNpZmllZCBkaXJlY3RseSBidXQgbm90IGl0cyBibG9icyBvciBzdWJ0cmVlcy4KKwlnaXQgLUMgcjEgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj10cmVlOjAgPmNvbW1pdHNvbmx5LnBhY2sgPDwtRU9GICYmCisJSEVBRDoKKwlFT0YKKwlnaXQgLUMgcjEgaW5kZXgtcGFjayAuLi9jb21taXRzb25seS5wYWNrICYmCisJZ2l0IC1DIHIxIHZlcmlmeS1wYWNrIC12IC4uL2NvbW1pdHNvbmx5LnBhY2sgPm9ianMgJiYKKwlhd2sgIi90cmVlfGJsb2Ive3ByaW50IFwkMX0iIG9ianMgPnRyZWVzX2FuZF9ibG9icyAmJgorCWdpdCAtQyByMSByZXYtcGFyc2UgSEVBRDogPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgdHJlZXNfYW5kX2Jsb2JzCisnCisKKyMgVGVzdCBibG9iOmxpbWl0PTxuPltrbWddIGZpbHRlci4KKyMgV2UgYm91bmRhcnkgdGVzdCBhcm91bmQgdGhlIHNpemUgcGFyYW1ldGVyLiAgVGhlIGZpbHRlciBpcyBzdHJpY3RseSBsZXNzIHRoYW4KKyMgdGhlIHZhbHVlLCBzbyBzaXplIDUwMCBhbmQgMTAwMCBzaG91bGQgaGF2ZSB0aGUgc2FtZSByZXN1bHRzLCBidXQgMTAwMSBzaG91bGQKKyMgZmlsdGVyIG1vcmUuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHIyJyAnCisJZ2l0IGluaXQgcjIgJiYKKwlmb3IgbiBpbiAxMDAwIDEwMDAwCisJZG8KKwkJcHJpbnRmICIlIiRuInMiIFggPiByMi9sYXJnZS4kbgorCQlnaXQgLUMgcjIgYWRkIGxhcmdlLiRuCisJCWdpdCAtQyByMiBjb21taXQgLW0gIiRuIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2IgY291bnQgaW4gbm9ybWFsIHBhY2tmaWxlJyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAgbGFyZ2UuMTAwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCA+YWxsLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMiBpbmRleC1wYWNrIC4uL2FsbC5wYWNrICYmCisKKwlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vYWxsLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2I6bGltaXQ9NTAwIG9taXRzIGFsbCBibG9icycgJworCWdpdCAtQyByMiBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPWJsb2I6bGltaXQ9NTAwID5maWx0ZXIucGFjayA8PC1FT0YgJiYKKwlIRUFECisJRU9GCisJZ2l0IC1DIHIyIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKKworCWdpdCAtQyByMiB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCSEgZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2I6bGltaXQ9MTAwMCcgJworCWdpdCAtQyByMiBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPWJsb2I6bGltaXQ9MTAwMCA+ZmlsdGVyLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMiBpbmRleC1wYWNrIC4uL2ZpbHRlci5wYWNrICYmCisKKwlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwkhIGdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTEwMDEnICcKKwlnaXQgLUMgcjIgbHMtZmlsZXMgLXMgbGFyZ2UuMTAwMCA+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByMiBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPWJsb2I6bGltaXQ9MTAwMSA+ZmlsdGVyLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMiBpbmRleC1wYWNrIC4uL2ZpbHRlci5wYWNrICYmCisKKwlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2I6bGltaXQ9MTAwMDEnICcKKwlnaXQgLUMgcjIgbHMtZmlsZXMgLXMgbGFyZ2UuMTAwMCBsYXJnZS4xMDAwMCA+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByMiBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPWJsb2I6bGltaXQ9MTAwMDEgPmZpbHRlci5wYWNrIDw8LUVPRiAmJgorCUhFQUQKKwlFT0YKKwlnaXQgLUMgcjIgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgorCisJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTFrJyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1ibG9iOmxpbWl0PTFrID5maWx0ZXIucGFjayA8PC1FT0YgJiYKKwlIRUFECisJRU9GCisJZ2l0IC1DIHIyIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKKworCWdpdCAtQyByMiB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCWdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgZXhwbGljaXRseSBzcGVjaWZ5aW5nIG92ZXJzaXplZCBibG9iIGluIGlucHV0JyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAgbGFyZ2UuMTAwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwllY2hvIEhFQUQgPm9iamVjdHMgJiYKKwlnaXQgLUMgcjIgcmV2LXBhcnNlIEhFQUQ6bGFyZ2UuMTAwMDAgPj5vYmplY3RzICYmCisJZ2l0IC1DIHIyIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1maWx0ZXI9YmxvYjpsaW1pdD0xayA8b2JqZWN0cyA+ZmlsdGVyLnBhY2sgJiYKKwlnaXQgLUMgcjIgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgorCisJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCisJZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAorCWF3ayAtZiBwcmludF8xLmF3ayB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTFtJyAnCisJZ2l0IC1DIHIyIGxzLWZpbGVzIC1zIGxhcmdlLjEwMDAgbGFyZ2UuMTAwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1ibG9iOmxpbWl0PTFtID5maWx0ZXIucGFjayA8PC1FT0YgJiYKKwlIRUFECisJRU9GCisJZ2l0IC1DIHIyIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKKworCWdpdCAtQyByMiB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCWdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm9ybWFsIGFuZCBibG9iOmxpbWl0IHBhY2tmaWxlcyBoYXZlIHNhbWUgY29tbWl0cy90cmVlcycgJworCWdpdCAtQyByMiB2ZXJpZnktcGFjayAtdiAuLi9hbGwucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCWdyZXAgLUUgImNvbW1pdHx0cmVlIiB2ZXJpZnlfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIC1FICJjb21taXR8dHJlZSIgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKworIyBUZXN0IHNwYXJzZTpwYXRoPTxwYXRoPiBmaWx0ZXIuCisjICEhISEKKyMgTk9URTogc3BhcnNlOnBhdGggZmlsdGVyIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCBmb3Igc2VjdXJpdHkgcmVhc29ucywKKyMgc28gdGhlIHRlc3RzIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIG1ha2Ugc3VyZSB0aGF0IHVzaW5nIGl0IGZhaWxzLgorIyAhISEhCisjIFVzZSBhIGxvY2FsIGZpbGUgY29udGFpbmluZyBhIHNwYXJzZS1jaGVja291dCBzcGVjaWZpY2F0aW9uIHRvIGZpbHRlcgorIyBvdXQgYmxvYnMgbm90IHJlcXVpcmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBzcGFyc2UtY2hlY2tvdXQuICBXZSBkbyBub3QKKyMgcmVxdWlyZSBzcGFyc2UtY2hlY2tvdXQgdG8gYWN0dWFsbHkgYmUgZW5hYmxlZC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcjMnICcKKwlnaXQgaW5pdCByMyAmJgorCW1rZGlyIHIzL2RpcjEgJiYKKwlmb3IgbiBpbiBzcGFyc2UxIHNwYXJzZTIKKwlkbworCQllY2hvICJUaGlzIGlzIGZpbGU6ICRuIiA+IHIzLyRuCisJCWdpdCAtQyByMyBhZGQgJG4KKwkJZWNobyAiVGhpcyBpcyBmaWxlOiBkaXIxLyRuIiA+IHIzL2RpcjEvJG4KKwkJZ2l0IC1DIHIzIGFkZCBkaXIxLyRuCisJZG9uZSAmJgorCWdpdCAtQyByMyBjb21taXQgLW0gInNwYXJzZSIgJiYKKwllY2hvIGRpcjEvID5wYXR0ZXJuMSAmJgorCWVjaG8gc3BhcnNlMSA+cGF0dGVybjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2IgY291bnQgaW4gbm9ybWFsIHBhY2tmaWxlJyAnCisJZ2l0IC1DIHIzIGxzLWZpbGVzIC1zIHNwYXJzZTEgc3BhcnNlMiBkaXIxL3NwYXJzZTEgZGlyMS9zcGFyc2UyIFwKKwkJPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjMgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCA+YWxsLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByMyBpbmRleC1wYWNrIC4uL2FsbC5wYWNrICYmCisKKwlnaXQgLUMgcjMgdmVyaWZ5LXBhY2sgLXYgLi4vYWxsLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNwYXJzZTpwYXRoPXBhdHRlcm4xIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHIzIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgXAorCQktLWZpbHRlcj1zcGFyc2U6cGF0aD0uLi9wYXR0ZXJuMSA8PC1FT0YKKwlIRUFECisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzcGFyc2U6cGF0aD1wYXR0ZXJuMiBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByMyBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IFwKKwkJLS1maWx0ZXI9c3BhcnNlOnBhdGg9Li4vcGF0dGVybjIgPDwtRU9GCisJSEVBRAorCUVPRgorJworCisjIFRlc3Qgc3BhcnNlOm9pZD08b2lkLWlzaD4gZmlsdGVyLgorIyBVc2UgYSBibG9iIGNvbnRhaW5pbmcgYSBzcGFyc2UtY2hlY2tvdXQgc3BlY2lmaWNhdGlvbiB0byBmaWx0ZXIKKyMgb3V0IGJsb2JzIG5vdCByZXF1aXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3BhcnNlLWNoZWNrb3V0LiAgV2UgZG8gbm90CisjIHJlcXVpcmUgc3BhcnNlLWNoZWNrb3V0IHRvIGFjdHVhbGx5IGJlIGVuYWJsZWQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHI0JyAnCisJZ2l0IGluaXQgcjQgJiYKKwlta2RpciByNC9kaXIxICYmCisJZm9yIG4gaW4gc3BhcnNlMSBzcGFyc2UyCisJZG8KKwkJZWNobyAiVGhpcyBpcyBmaWxlOiAkbiIgPiByNC8kbgorCQlnaXQgLUMgcjQgYWRkICRuCisJCWVjaG8gIlRoaXMgaXMgZmlsZTogZGlyMS8kbiIgPiByNC9kaXIxLyRuCisJCWdpdCAtQyByNCBhZGQgZGlyMS8kbgorCWRvbmUgJiYKKwllY2hvIGRpcjEvID5yNC9wYXR0ZXJuICYmCisJZ2l0IC1DIHI0IGFkZCBwYXR0ZXJuICYmCisJZ2l0IC1DIHI0IGNvbW1pdCAtbSAicGF0dGVybiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2IgY291bnQgaW4gbm9ybWFsIHBhY2tmaWxlJyAnCisJZ2l0IC1DIHI0IGxzLWZpbGVzIC1zIHBhdHRlcm4gc3BhcnNlMSBzcGFyc2UyIGRpcjEvc3BhcnNlMSBkaXIxL3NwYXJzZTIgXAorCQk+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByNCBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0ID5hbGwucGFjayA8PC1FT0YgJiYKKwlIRUFECisJRU9GCisJZ2l0IC1DIHI0IGluZGV4LXBhY2sgLi4vYWxsLnBhY2sgJiYKKworCWdpdCAtQyByNCB2ZXJpZnktcGFjayAtdiAuLi9hbGwucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgorCWdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0IHwKKwlhd2sgLWYgcHJpbnRfMS5hd2sgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc3BhcnNlOm9pZD1PSUQnICcKKwlnaXQgLUMgcjQgbHMtZmlsZXMgLXMgZGlyMS9zcGFyc2UxIGRpcjEvc3BhcnNlMiA+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByNCBscy1maWxlcyAtcyBwYXR0ZXJuID5zdGFnZWQgJiYKKwlvaWQ9JChhd2sgLWYgcHJpbnRfMi5hd2sgc3RhZ2VkKSAmJgorCWdpdCAtQyByNCBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPXNwYXJzZTpvaWQ9JG9pZCA+ZmlsdGVyLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByNCBpbmRleC1wYWNrIC4uL2ZpbHRlci5wYWNrICYmCisKKwlnaXQgLUMgcjQgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNwYXJzZTpvaWQ9b2lkLWlzaCcgJworCWdpdCAtQyByNCBscy1maWxlcyAtcyBkaXIxL3NwYXJzZTEgZGlyMS9zcGFyc2UyID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHI0IHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1maWx0ZXI9c3BhcnNlOm9pZD1tYXN0ZXI6cGF0dGVybiA+ZmlsdGVyLnBhY2sgPDwtRU9GICYmCisJSEVBRAorCUVPRgorCWdpdCAtQyByNCBpbmRleC1wYWNrIC4uL2ZpbHRlci5wYWNrICYmCisKKwlnaXQgLUMgcjQgdmVyaWZ5LXBhY2sgLXYgLi4vZmlsdGVyLnBhY2sgPnZlcmlmeV9yZXN1bHQgJiYKKwlncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdCB8CisJYXdrIC1mIHByaW50XzEuYXdrIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKworIyBEZWxldGUgc29tZSBsb29zZSBvYmplY3RzIGFuZCB1c2UgcGFjay1vYmplY3RzLCBidXQgV0lUSE9VVCBhbnkgZmlsdGVyaW5nLgorIyBUaGlzIG1vZGVscyBwcmV2aW91c2x5IG9taXR0ZWQgb2JqZWN0cyB0aGF0IHdlIGRpZCBub3QgcmVjZWl2ZS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcjEgLSBkZWxldGUgbG9vc2UgYmxvYnMnICcKKwlnaXQgLUMgcjEgbHMtZmlsZXMgLXMgZmlsZS4xIGZpbGUuMiBmaWxlLjMgZmlsZS40IGZpbGUuNSBcCisJCT5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZm9yIGlkIGluIGBjYXQgZXhwZWN0ZWQgfCBzZWQgInN8Li58Ji98ImAKKwlkbworCQlybSByMS8uZ2l0L29iamVjdHMvJGlkCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgcGFjay1vYmplY3RzIGZhaWxzIHcvIG1pc3Npbmcgb2JqZWN0cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByMSBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0ID5taXNzLnBhY2sgPDwtRU9GCisJSEVBRAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgcGFjay1vYmplY3RzIGZhaWxzIHcvIC0tbWlzc2luZz1lcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByMSBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tbWlzc2luZz1lcnJvciA+bWlzcy5wYWNrIDw8LUVPRgorCUhFQUQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHBhY2stb2JqZWN0cyB3LyAtLW1pc3Npbmc9YWxsb3ctYW55JyAnCisJZ2l0IC1DIHIxIHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgLS1taXNzaW5nPWFsbG93LWFueSA+bWlzcy5wYWNrIDw8LUVPRgorCUhFQUQKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaCBiL3QvdDUzMTgtY29tbWl0LWdyYXBoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliZjkyMGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaApAQCAtMCwwICsxLDY2NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbW1pdCBncmFwaCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmdWxsIHJlcG8nICcKKwlta2RpciBmdWxsICYmCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgaW5pdCAmJgorCWdpdCBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlICYmCisJb2JqZGlyPSIuZ2l0L29iamVjdHMiICYmCisJdGVzdF9vaWRfaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgZ3JhcGggd2l0aCBubyBncmFwaCBmaWxlJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBncmFwaCB3aXRoIG5vIHBhY2tzJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tb2JqZWN0LWRpciAkb2JqZGlyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGl0IHdpdGggY29ycmVjdCBlcnJvciBvbiBiYWQgaW5wdXQgdG8gLS1zdGRpbi1wYWNrcycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZWNobyBkb2Vzbm90ZXhpc3QgPmluICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1wYWNrcyA8aW4gMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJlcnJvciBhZGRpbmcgcGFjayIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBjb21taXRzIGFuZCByZXBhY2snICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMykKKwlkbworCQl0ZXN0X2NvbW1pdCAkaSAmJgorCQlnaXQgYnJhbmNoIGNvbW1pdHMvJGkKKwlkb25lICYmCisJZ2l0IHJlcGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGl0IHdpdGggY29ycmVjdCBlcnJvciBvbiBiYWQgaW5wdXQgdG8gLS1zdGRpbi1jb21taXRzJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwllY2hvIEhFQUQgfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpbnZhbGlkIGNvbW1pdCBvYmplY3QgaWQiIHN0ZGVyciAmJgorCSMgdmFsaWQgdHJlZSBPSUQsIGJ1dCBub3QgYSBjb21taXQgT0lECisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQgY29tbWl0IG9iamVjdCBpZCIgc3RkZXJyCisnCisKK2dyYXBoX2dpdF90d29fbW9kZXMoKSB7CisJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9dHJ1ZSAkMSA+b3V0cHV0CisJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgJDEgPmV4cGVjdAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKworZ3JhcGhfZ2l0X2JlaGF2aW9yKCkgeworCU1TRz0kMQorCURJUj0kMgorCUJSQU5DSD0kMworCUNPTVBBUkU9JDQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayBub3JtYWwgZ2l0IG9wZXJhdGlvbnM6ICRNU0ciICcKKwkJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvJERJUiIgJiYKKwkJZ3JhcGhfZ2l0X3R3b19tb2RlcyAibG9nIC0tb25lbGluZSAkQlJBTkNIIiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJsb2cgLS10b3BvLW9yZGVyICRCUkFOQ0giICYmCisJCWdyYXBoX2dpdF90d29fbW9kZXMgImxvZyAtLWdyYXBoICRDT01QQVJFLi4kQlJBTkNIIiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJicmFuY2ggLXZ2IiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJtZXJnZS1iYXNlIC1hICRCUkFOQ0ggJENPTVBBUkUiCisJJworfQorCitncmFwaF9naXRfYmVoYXZpb3IgJ25vIGdyYXBoJyBmdWxsIGNvbW1pdHMvMyBjb21taXRzLzEKKworZ3JhcGhfcmVhZF9leHBlY3QoKSB7CisJT1BUSU9OQUw9IiIKKwlOVU1fQ0hVTktTPTMKKwlpZiB0ZXN0ICEgLXogJDIKKwl0aGVuCisJCU9QVElPTkFMPSIgJDIiCisJCU5VTV9DSFVOS1M9JCgoMyArICQoZWNobyAiJDIiIHwgd2MgLXcpKSkKKwlmaQorCWNhdCA+ZXhwZWN0IDw8LSBFT0YKKwloZWFkZXI6IDQzNDc1MDQ4IDEgMSAkTlVNX0NIVU5LUyAwCisJbnVtX2NvbW1pdHM6ICQxCisJY2h1bmtzOiBvaWRfZmFub3V0IG9pZF9sb29rdXAgY29tbWl0X21ldGFkYXRhJE9QVElPTkFMCisJRU9GCisJdGVzdC10b29sIHJlYWQtZ3JhcGggPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgZ3JhcGgnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgIjMiCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnZ3JhcGggZXhpc3RzJyBmdWxsIGNvbW1pdHMvMyBjb21taXRzLzEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWRkIG1vcmUgY29tbWl0cycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzEgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDQgNSkKKwlkbworCQl0ZXN0X2NvbW1pdCAkaSAmJgorCQlnaXQgYnJhbmNoIGNvbW1pdHMvJGkKKwlkb25lICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzIgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDYgNykKKwlkbworCQl0ZXN0X2NvbW1pdCAkaSAmJgorCQlnaXQgYnJhbmNoIGNvbW1pdHMvJGkKKwlkb25lICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzIgJiYKKwlnaXQgbWVyZ2UgY29tbWl0cy80ICYmCisJZ2l0IGJyYW5jaCBtZXJnZS8xICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzQgJiYKKwlnaXQgbWVyZ2UgY29tbWl0cy82ICYmCisJZ2l0IGJyYW5jaCBtZXJnZS8yICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzMgJiYKKwlnaXQgbWVyZ2UgY29tbWl0cy81IGNvbW1pdHMvNyAmJgorCWdpdCBicmFuY2ggbWVyZ2UvMyAmJgorCWdpdCByZXBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWdyYXBoIHdyaXRlIHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZ3JhcGggd3JpdGUgZm9yY2UgcHJvZ3Jlc3Mgb24gZm9yIHN0ZGVycicgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJR0lUX1BST0dSRVNTX0RFTEFZPTAgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXByb2dyZXNzIDI+ZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWdyYXBoIHdyaXRlIHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tbm8tcHJvZ3Jlc3MgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZ3JhcGggdmVyaWZ5IHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWdyYXBoIHZlcmlmeSBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwlHSVRfUFJPR1JFU1NfREVMQVk9MCBnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAtLXByb2dyZXNzIDI+ZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWdyYXBoIHZlcmlmeSB3aXRoIHRoZSAtLW5vLXByb2dyZXNzIG9wdGlvbicgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1uby1wcm9ncmVzcyAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKKyMgQ3VycmVudCBncmFwaCBzdHJ1Y3R1cmU6CisjCisjICAgX19NM19fXworIyAgLyAgIHwgICBcCisjIDMgTTEgNSBNMiA3CisjIHwvICBcfC8gIFx8CisjIDIgICAgNCAgICA2CisjIHxfX18vX19fXy8KKyMgMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBncmFwaCB3aXRoIG1lcmdlcycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAiMTAiICJleHRyYV9lZGdlcyIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdtZXJnZSAxIHZzIDInIGZ1bGwgbWVyZ2UvMSBtZXJnZS8yCitncmFwaF9naXRfYmVoYXZpb3IgJ21lcmdlIDEgdnMgMycgZnVsbCBtZXJnZS8xIG1lcmdlLzMKK2dyYXBoX2dpdF9iZWhhdmlvciAnbWVyZ2UgMiB2cyAzJyBmdWxsIG1lcmdlLzIgbWVyZ2UvMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgb25lIG1vcmUgY29tbWl0JyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwl0ZXN0X2NvbW1pdCA4ICYmCisJZ2l0IGJyYW5jaCBjb21taXRzLzggJiYKKwlscyAkb2JqZGlyL3BhY2sgfCBncmVwIGlkeCA+ZXhpc3RpbmctaWR4ICYmCisJZ2l0IHJlcGFjayAmJgorCWxzICRvYmpkaXIvcGFja3wgZ3JlcCBpZHggfCBncmVwIC12IC1mIGV4aXN0aW5nLWlkeCA+bmV3LWlkeAorJworCisjIEN1cnJlbnQgZ3JhcGggc3RydWN0dXJlOgorIworIyAgICAgIDgKKyMgICAgICB8CisjICAgX19NM19fXworIyAgLyAgIHwgICBcCisjIDMgTTEgNSBNMiA3CisjIHwvICBcfC8gIFx8CisjIDIgICAgNCAgICA2CisjIHxfX18vX19fXy8KKyMgMQorCitncmFwaF9naXRfYmVoYXZpb3IgJ21peGVkIG1vZGUsIGNvbW1pdCA4IHZzIG1lcmdlIDEnIGZ1bGwgY29tbWl0cy84IG1lcmdlLzEKK2dyYXBoX2dpdF9iZWhhdmlvciAnbWl4ZWQgbW9kZSwgY29tbWl0IDggdnMgbWVyZ2UgMicgZnVsbCBjb21taXRzLzggbWVyZ2UvMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBncmFwaCB3aXRoIG5ldyBjb21taXQnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgIjExIiAiZXh0cmFfZWRnZXMiCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnZnVsbCBncmFwaCwgY29tbWl0IDggdnMgbWVyZ2UgMScgZnVsbCBjb21taXRzLzggbWVyZ2UvMQorZ3JhcGhfZ2l0X2JlaGF2aW9yICdmdWxsIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAyJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIGdyYXBoIHdpdGggbm90aGluZyBuZXcnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgIjExIiAiZXh0cmFfZWRnZXMiCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnY2xlYXJlZCBncmFwaCwgY29tbWl0IDggdnMgbWVyZ2UgMScgZnVsbCBjb21taXRzLzggbWVyZ2UvMQorZ3JhcGhfZ2l0X2JlaGF2aW9yICdjbGVhcmVkIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAyJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1aWxkIGdyYXBoIGZyb20gbGF0ZXN0IHBhY2sgd2l0aCBjbG9zdXJlJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKKwljYXQgbmV3LWlkeCB8IGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1wYWNrcyAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAiOSIgImV4dHJhX2VkZ2VzIgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ2dyYXBoIGZyb20gcGFjaywgY29tbWl0IDggdnMgbWVyZ2UgMScgZnVsbCBjb21taXRzLzggbWVyZ2UvMQorZ3JhcGhfZ2l0X2JlaGF2aW9yICdncmFwaCBmcm9tIHBhY2ssIGNvbW1pdCA4IHZzIG1lcmdlIDInIGZ1bGwgY29tbWl0cy84IG1lcmdlLzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVpbGQgZ3JhcGggZnJvbSBjb21taXRzIHdpdGggY2xvc3VyZScgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IHRhZyAtYSAtbSAibWVyZ2UiIHRhZy9tZXJnZSBtZXJnZS8yICYmCisJZ2l0IHJldi1wYXJzZSB0YWcvbWVyZ2UgPmNvbW1pdHMtaW4gJiYKKwlnaXQgcmV2LXBhcnNlIG1lcmdlLzEgPj5jb21taXRzLWluICYmCisJY2F0IGNvbW1pdHMtaW4gfCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAiNiIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdncmFwaCBmcm9tIGNvbW1pdHMsIGNvbW1pdCA4IHZzIG1lcmdlIDEnIGZ1bGwgY29tbWl0cy84IG1lcmdlLzEKK2dyYXBoX2dpdF9iZWhhdmlvciAnZ3JhcGggZnJvbSBjb21taXRzLCBjb21taXQgOCB2cyBtZXJnZSAyJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1aWxkIGdyYXBoIGZyb20gY29tbWl0cyB3aXRoIGFwcGVuZCcgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IHJldi1wYXJzZSBtZXJnZS8zIHwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMgLS1hcHBlbmQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgIjEwIiAiZXh0cmFfZWRnZXMiCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnYXBwZW5kIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAxJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8xCitncmFwaF9naXRfYmVoYXZpb3IgJ2FwcGVuZCBncmFwaCwgY29tbWl0IDggdnMgbWVyZ2UgMicgZnVsbCBjb21taXRzLzggbWVyZ2UvMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidWlsZCBncmFwaCB1c2luZyAtLXJlYWNoYWJsZScgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAiMTEiICJleHRyYV9lZGdlcyIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICdhcHBlbmQgZ3JhcGgsIGNvbW1pdCA4IHZzIG1lcmdlIDEnIGZ1bGwgY29tbWl0cy84IG1lcmdlLzEKK2dyYXBoX2dpdF9iZWhhdmlvciAnYXBwZW5kIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAyJyBmdWxsIGNvbW1pdHMvOCBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUgcmVwbycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZIiAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1sb2NhbCBmdWxsIGJhcmUgJiYKKwljZCBiYXJlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwliYXJlZGlyPSIuL29iamVjdHMiCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnYmFyZSByZXBvLCBjb21taXQgOCB2cyBtZXJnZSAxJyBiYXJlIGNvbW1pdHMvOCBtZXJnZS8xCitncmFwaF9naXRfYmVoYXZpb3IgJ2JhcmUgcmVwbywgY29tbWl0IDggdnMgbWVyZ2UgMicgYmFyZSBjb21taXRzLzggbWVyZ2UvMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBncmFwaCBpbiBiYXJlIHJlcG8nICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9iYXJlIiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkYmFyZWRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWdyYXBoX3JlYWRfZXhwZWN0ICIxMSIgImV4dHJhX2VkZ2VzIgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ2JhcmUgcmVwbyB3aXRoIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAxJyBiYXJlIGNvbW1pdHMvOCBtZXJnZS8xCitncmFwaF9naXRfYmVoYXZpb3IgJ2JhcmUgcmVwbyB3aXRoIGdyYXBoLCBjb21taXQgOCB2cyBtZXJnZSAyJyBiYXJlIGNvbW1pdHMvOCBtZXJnZS8yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlcmZvcm0gZmFzdC1mb3J3YXJkIG1lcmdlIGluIGZ1bGwgcmVwbycgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlLTUtdG8tOCBjb21taXRzLzUgJiYKKwlnaXQgbWVyZ2UgY29tbWl0cy84ICYmCisJZ2l0IHNob3ctcmVmIC1zIG1lcmdlLTUtdG8tOCA+b3V0cHV0ICYmCisJZ2l0IHNob3ctcmVmIC1zIGNvbW1pdHMvOCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0aGF0IGdjIGNvbXB1dGVzIGNvbW1pdC1ncmFwaCcgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJibGFuayIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJY3AgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCBjb21taXQtZ3JhcGgtYmVmb3JlLWdjICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwlnaXQgY29uZmlnIGdjLndyaXRlQ29tbWl0R3JhcGggdHJ1ZSAmJgorCWdpdCBnYyAmJgorCWNwICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggY29tbWl0LWdyYXBoLWFmdGVyLWdjICYmCisJISB0ZXN0X2NtcF9iaW4gY29tbWl0LWdyYXBoLWJlZm9yZS1nYyBjb21taXQtZ3JhcGgtYWZ0ZXItZ2MgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJdGVzdF9jbXBfYmluIGNvbW1pdC1ncmFwaC1hZnRlci1nYyAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2Utb2JqZWN0cyBpbnZhbGlkYXRlcyBjb21taXQtZ3JhcGgnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIHJlcGxhY2UgJiYKKwlnaXQgY2xvbmUgZnVsbCByZXBsYWNlICYmCisJKAorCQljZCByZXBsYWNlICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJCWdpdCByZXBsYWNlIEhFQUR+MSBIRUFEfjIgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgbG9nID5leHBlY3QgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9dHJ1ZSBsb2cgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgLS1uby1yZXBsYWNlLW9iamVjdHMgbG9nID5leHBlY3QgJiYKKwkJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9dHJ1ZSAtLW5vLXJlcGxhY2Utb2JqZWN0cyBsb2cgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXJtIC1yZiAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGggJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGgKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBncmFmdHMgaW52YWxpZGF0ZSBjb21taXQtZ3JhcGgnICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLXJmIGdyYWZ0ICYmCisJZ2l0IGNsb25lIGZ1bGwgZ3JhZnQgJiYKKwkoCisJCWNkIGdyYWZ0ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJCUgxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEfjEpICYmCisJCUgzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEfjMpICYmCisJCWVjaG8gIiRIMSAkSDMiID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJCWdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPWZhbHNlIGxvZyA+ZXhwZWN0ICYmCisJCWdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPXRydWUgbG9nID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJCWdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPWZhbHNlIC0tbm8tcmVwbGFjZS1vYmplY3RzIGxvZyA+ZXhwZWN0ICYmCisJCWdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPXRydWUgLS1uby1yZXBsYWNlLW9iamVjdHMgbG9nID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlybSAtcmYgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlLW9iamVjdHMgaW52YWxpZGF0ZXMgY29tbWl0LWdyYXBoJyAnCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiBzaGFsbG93ICYmCisJZ2l0IGNsb25lIC0tZGVwdGggMiAiZmlsZTovLyRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgc2hhbGxvdyAmJgorCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luIC0tdW5zaGFsbG93ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoCisJKQorJworCisjIHRoZSB2ZXJpZnkgdGVzdHMgYmVsb3cgZXhwZWN0IHRoZSBjb21taXQtZ3JhcGggdG8gY29udGFpbgorIyBleGFjdGx5IHRoZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoZSBjb21taXRzLzggYnJhbmNoLgorIyBJZiB0aGUgZmlsZSBjaGFuZ2VzIHRoZSBzZXQgb2YgY29tbWl0cyBpbiB0aGUgbGlzdCwgdGhlbiB0aGUKKyMgb2Zmc2V0cyBpbnRvIHRoZSBiaW5hcnkgZmlsZSB3aWxsIHJlc3VsdCBpbiBkaWZmZXJlbnQgZWRpdHMKKyMgYW5kIHRoZSB0ZXN0cyB3aWxsIGxpa2VseSBicmVhay4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnknICcKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCWdpdCByZXYtcGFyc2UgY29tbWl0cy84IHwgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXN0ZGluLWNvbW1pdHMgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSA+b3V0cHV0CisnCisKK05VTV9DT01NSVRTPTkKK05VTV9PQ1RPUFVTX0VER0VTPTIKK0hBU0hfTEVOPSIkKHRlc3Rfb2lkIHJhd3N6KSIKK0dSQVBIX0JZVEVfVkVSU0lPTj00CitHUkFQSF9CWVRFX0hBU0g9NQorR1JBUEhfQllURV9DSFVOS19DT1VOVD02CitHUkFQSF9DSFVOS19MT09LVVBfT0ZGU0VUPTgKK0dSQVBIX0NIVU5LX0xPT0tVUF9XSURUSD0xMgorR1JBUEhfQ0hVTktfTE9PS1VQX1JPV1M9NQorR1JBUEhfQllURV9PSURfRkFOT1VUX0lEPSRHUkFQSF9DSFVOS19MT09LVVBfT0ZGU0VUCitHUkFQSF9CWVRFX09JRF9MT09LVVBfSUQ9JCgoJEdSQVBIX0NIVU5LX0xPT0tVUF9PRkZTRVQgKyBcCisJCQkgICAgMSAqICRHUkFQSF9DSFVOS19MT09LVVBfV0lEVEgpKQorR1JBUEhfQllURV9DT01NSVRfREFUQV9JRD0kKCgkR1JBUEhfQ0hVTktfTE9PS1VQX09GRlNFVCArIFwKKwkJCSAgICAgMiAqICRHUkFQSF9DSFVOS19MT09LVVBfV0lEVEgpKQorR1JBUEhfRkFOT1VUX09GRlNFVD0kKCgkR1JBUEhfQ0hVTktfTE9PS1VQX09GRlNFVCArIFwKKwkJICAgICAgICRHUkFQSF9DSFVOS19MT09LVVBfV0lEVEggKiAkR1JBUEhfQ0hVTktfTE9PS1VQX1JPV1MpKQorR1JBUEhfQllURV9GQU5PVVQxPSQoKCRHUkFQSF9GQU5PVVRfT0ZGU0VUICsgNCAqIDQpKQorR1JBUEhfQllURV9GQU5PVVQyPSQoKCRHUkFQSF9GQU5PVVRfT0ZGU0VUICsgNCAqIDI1NSkpCitHUkFQSF9PSURfTE9PS1VQX09GRlNFVD0kKCgkR1JBUEhfRkFOT1VUX09GRlNFVCArIDQgKiAyNTYpKQorR1JBUEhfQllURV9PSURfTE9PS1VQX09SREVSPSQoKCRHUkFQSF9PSURfTE9PS1VQX09GRlNFVCArICRIQVNIX0xFTiAqIDgpKQorR1JBUEhfQllURV9PSURfTE9PS1VQX01JU1NJTkc9JCgoJEdSQVBIX09JRF9MT09LVVBfT0ZGU0VUICsgJEhBU0hfTEVOICogNCArIDEwKSkKK0dSQVBIX0NPTU1JVF9EQVRBX09GRlNFVD0kKCgkR1JBUEhfT0lEX0xPT0tVUF9PRkZTRVQgKyAkSEFTSF9MRU4gKiAkTlVNX0NPTU1JVFMpKQorR1JBUEhfQllURV9DT01NSVRfVFJFRT0kR1JBUEhfQ09NTUlUX0RBVEFfT0ZGU0VUCitHUkFQSF9CWVRFX0NPTU1JVF9QQVJFTlQ9JCgoJEdSQVBIX0NPTU1JVF9EQVRBX09GRlNFVCArICRIQVNIX0xFTikpCitHUkFQSF9CWVRFX0NPTU1JVF9FWFRSQV9QQVJFTlQ9JCgoJEdSQVBIX0NPTU1JVF9EQVRBX09GRlNFVCArICRIQVNIX0xFTiArIDQpKQorR1JBUEhfQllURV9DT01NSVRfV1JPTkdfUEFSRU5UPSQoKCRHUkFQSF9DT01NSVRfREFUQV9PRkZTRVQgKyAkSEFTSF9MRU4gKyAzKSkKK0dSQVBIX0JZVEVfQ09NTUlUX0dFTkVSQVRJT049JCgoJEdSQVBIX0NPTU1JVF9EQVRBX09GRlNFVCArICRIQVNIX0xFTiArIDExKSkKK0dSQVBIX0JZVEVfQ09NTUlUX0RBVEU9JCgoJEdSQVBIX0NPTU1JVF9EQVRBX09GRlNFVCArICRIQVNIX0xFTiArIDEyKSkKK0dSQVBIX0NPTU1JVF9EQVRBX1dJRFRIPSQoKCRIQVNIX0xFTiArIDE2KSkKK0dSQVBIX09DVE9QVVNfREFUQV9PRkZTRVQ9JCgoJEdSQVBIX0NPTU1JVF9EQVRBX09GRlNFVCArIFwKKwkJCSAgICAgJEdSQVBIX0NPTU1JVF9EQVRBX1dJRFRIICogJE5VTV9DT01NSVRTKSkKK0dSQVBIX0JZVEVfT0NUT1BVUz0kKCgkR1JBUEhfT0NUT1BVU19EQVRBX09GRlNFVCArIDQpKQorR1JBUEhfQllURV9GT09URVI9JCgoJEdSQVBIX09DVE9QVVNfREFUQV9PRkZTRVQgKyA0ICogJE5VTV9PQ1RPUFVTX0VER0VTKSkKKworY29ycnVwdF9ncmFwaF9zZXR1cCgpIHsKKwljZCAiJFRSQVNIX0RJUkVDVE9SWS9mdWxsIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBtdiBjb21taXQtZ3JhcGgtYmFja3VwICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwljcCAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoIGNvbW1pdC1ncmFwaC1iYWNrdXAKK30KKworY29ycnVwdF9ncmFwaF92ZXJpZnkoKSB7CisJZ3JlcHN0cj0kMQorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IDI+dGVzdF9lcnIgJiYKKwlncmVwIC12ICJeKyIgdGVzdF9lcnIgPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIiRncmVwc3RyIiBlcnIgJiYKKwlpZiB0ZXN0ICIkMiIgIT0gIm5vLWNvcHkiCisJdGhlbgorCQljcCAkb2JqZGlyL2luZm8vY29tbWl0LWdyYXBoIGNvbW1pdC1ncmFwaC1wcmUtd3JpdGUtdGVzdAorCWZpICYmCisJZ2l0IHN0YXR1cyAtLXNob3J0ICYmCisJR0lUX1RFU1RfQ09NTUlUX0dSQVBIX0RJRV9PTl9MT0FEPXRydWUgZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAmJgorCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5Cit9CisKKyMgdXNhZ2U6IGNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSA8cG9zaXRpb24+IDxkYXRhPiA8c3RyaW5nPiBbPHplcm9fcG9zPl0KKyMgTWFuaXB1bGF0ZXMgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIGF0IHRoZSBwb3NpdGlvbgorIyBieSBpbnNlcnRpbmcgdGhlIGRhdGEsIG9wdGlvbmFsbHkgemVyb2luZyB0aGUgZmlsZQorIyBzdGFydGluZyBhdCA8emVyb19wb3M+LCB0aGVuIHJ1bnMgJ2dpdCBjb21taXQtZ3JhcGggdmVyaWZ5JworIyBhbmQgcGxhY2VzIHRoZSBvdXRwdXQgaW4gdGhlIGZpbGUgJ2VycicuIFRlc3QgJ2VycicgZm9yCisjIHRoZSBnaXZlbiBzdHJpbmcuCitjb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkoKSB7CisJcG9zPSQxCisJZGF0YT0iJHsyOi1cMH0iCisJZ3JlcHN0cj0kMworCWNvcnJ1cHRfZ3JhcGhfc2V0dXAgJiYKKwlvcmlnX3NpemU9JCh3YyAtYyA8ICRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGgpICYmCisJemVyb19wb3M9JHs0Oi0ke29yaWdfc2l6ZX19ICYmCisJcHJpbnRmICIkZGF0YSIgfCBkZCBvZj0iJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCIgYnM9MSBzZWVrPSIkcG9zIiBjb252PW5vdHJ1bmMgJiYKKwlkZCBvZj0iJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCIgYnM9MSBzZWVrPSIkemVyb19wb3MiIGlmPS9kZXYvbnVsbCAmJgorCWdlbmVyYXRlX3plcm9fYnl0ZXMgJCgoJG9yaWdfc2l6ZSAtICR6ZXJvX3BvcykpID4+IiRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGgiICYmCisJY29ycnVwdF9ncmFwaF92ZXJpZnkgIiRncmVwc3RyIgorCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnZGV0ZWN0IHBlcm1pc3Npb24gcHJvYmxlbScgJworCWNvcnJ1cHRfZ3JhcGhfc2V0dXAgJiYKKwljaG1vZCAwMDAgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWNvcnJ1cHRfZ3JhcGhfdmVyaWZ5ICJDb3VsZCBub3Qgb3BlbiIgIm5vLWNvcHkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCB0b28gc21hbGwnICcKKwljb3JydXB0X2dyYXBoX3NldHVwICYmCisJZWNobyAiYSBzbWFsbCBncmFwaCIgPiRvYmpkaXIvaW5mby9jb21taXQtZ3JhcGggJiYKKwljb3JydXB0X2dyYXBoX3ZlcmlmeSAidG9vIHNtYWxsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYmFkIHNpZ25hdHVyZScgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAwICJcMCIgXAorCQkiZ3JhcGggc2lnbmF0dXJlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYmFkIHZlcnNpb24nICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfVkVSU0lPTiAiXDAyIiBcCisJCSJncmFwaCB2ZXJzaW9uIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgYmFkIGhhc2ggdmVyc2lvbicgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9IQVNIICJcMDMiIFwKKwkJImhhc2ggdmVyc2lvbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGxvdyBjaHVuayBjb3VudCcgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9DSFVOS19DT1VOVCAiXDAyIiBcCisJCSJtaXNzaW5nIHRoZSAuKiBjaHVuayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc3NpbmcgT0lEIGZhbm91dCBjaHVuaycgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9PSURfRkFOT1VUX0lEICJcMCIgXAorCQkibWlzc2luZyB0aGUgT0lEIEZhbm91dCBjaHVuayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc3NpbmcgT0lEIGxvb2t1cCBjaHVuaycgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9PSURfTE9PS1VQX0lEICJcMCIgXAorCQkibWlzc2luZyB0aGUgT0lEIExvb2t1cCBjaHVuayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc3NpbmcgY29tbWl0IGRhdGEgY2h1bmsnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX0RBVEFfSUQgIlwwIiBcCisJCSJtaXNzaW5nIHRoZSBDb21taXQgRGF0YSBjaHVuayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGluY29ycmVjdCBmYW5vdXQnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfRkFOT1VUMSAiXDAxIiBcCisJCSJmYW5vdXQgdmFsdWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgZmFub3V0IGZpbmFsIHZhbHVlJyAnCisJY29ycnVwdF9ncmFwaF9hbmRfdmVyaWZ5ICRHUkFQSF9CWVRFX0ZBTk9VVDIgIlwwMSIgXAorCQkiZmFub3V0IHZhbHVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgaW5jb3JyZWN0IE9JRCBvcmRlcicgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9PSURfTE9PS1VQX09SREVSICJcMDEiIFwKKwkJImluY29ycmVjdCBPSUQgb3JkZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBPSUQgbm90IGluIG9iamVjdCBkYXRhYmFzZScgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9PSURfTE9PS1VQX01JU1NJTkcgIlwwMSIgXAorCQkiZnJvbSBvYmplY3QgZGF0YWJhc2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgdHJlZSBPSUQnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX1RSRUUgIlwwMSIgXAorCQkicm9vdCB0cmVlIE9JRCBmb3IgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgaW5jb3JyZWN0IHBhcmVudCBpbnQtaWQnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX1BBUkVOVCAiXDAxIiBcCisJCSJpbnZhbGlkIHBhcmVudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGV4dHJhIHBhcmVudCBpbnQtaWQnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX0VYVFJBX1BBUkVOVCAiXDAwIiBcCisJCSJpcyB0b28gbG9uZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHdyb25nIHBhcmVudCcgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9DT01NSVRfV1JPTkdfUEFSRU5UICJcMDEiIFwKKwkJImNvbW1pdC1ncmFwaCBwYXJlbnQgZm9yIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgaW5jb3JyZWN0IGdlbmVyYXRpb24gbnVtYmVyJyAnCisJY29ycnVwdF9ncmFwaF9hbmRfdmVyaWZ5ICRHUkFQSF9CWVRFX0NPTU1JVF9HRU5FUkFUSU9OICJcMDcwIiBcCisJCSJnZW5lcmF0aW9uIGZvciBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgZ2VuZXJhdGlvbiBudW1iZXInICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX0dFTkVSQVRJT04gIlwwMSIgXAorCQkibm9uLXplcm8gZ2VuZXJhdGlvbiBudW1iZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgY29tbWl0IGRhdGUnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfQ09NTUlUX0RBVEUgIlwwMSIgXAorCQkiY29tbWl0IGRhdGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbmNvcnJlY3QgcGFyZW50IGZvciBvY3RvcHVzIG1lcmdlJyAnCisJY29ycnVwdF9ncmFwaF9hbmRfdmVyaWZ5ICRHUkFQSF9CWVRFX09DVE9QVVMgIlwwMSIgXAorCQkiaW52YWxpZCBwYXJlbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBpbnZhbGlkIGNoZWNrc3VtIGhhc2gnICcKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfRk9PVEVSICJcMDAiIFwKKwkJImluY29ycmVjdCBjaGVja3N1bSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGluY29ycmVjdCBjaHVuayBjb3VudCcgJworCWNvcnJ1cHRfZ3JhcGhfYW5kX3ZlcmlmeSAkR1JBUEhfQllURV9DSFVOS19DT1VOVCAiXDM3NyIgXAorCQkiY2h1bmsgbG9va3VwIHRhYmxlIGVudHJ5IG1pc3NpbmciICRHUkFQSF9DSFVOS19MT09LVVBfT0ZGU0VUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmc2NrIChjaGVja3MgY29tbWl0LWdyYXBoKScgJworCWNkICIkVFJBU0hfRElSRUNUT1JZL2Z1bGwiICYmCisJZ2l0IGZzY2sgJiYKKwljb3JydXB0X2dyYXBoX2FuZF92ZXJpZnkgJEdSQVBIX0JZVEVfRk9PVEVSICJcMDAiIFwKKwkJImluY29ycmVjdCBjaGVja3N1bSIgJiYKKwljcCBjb21taXQtZ3JhcGgtcHJlLXdyaXRlLXRlc3QgJG9iamRpci9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5vbi10aGVfcmVwb3NpdG9yeSB0ZXN0cycgJworCXJtIC1yZiByZXBvICYmCisJZ2l0IGluaXQgcmVwbyAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG8gb25lICYmCisJdGVzdF9jb21taXQgLUMgcmVwbyB0d28gJiYKKwlnaXQgLUMgcmVwbyBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlICYmCisJZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIHR3byB8IFwKKwkJZ2l0IC1DIHJlcG8gY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZV9jb21taXRfaW5fZ3JhcGggd29ya3MgZm9yIG5vbi10aGVfcmVwb3NpdG9yeScgJworCXRlc3QtdG9vbCByZXBvc2l0b3J5IHBhcnNlX2NvbW1pdF9pbl9ncmFwaCBcCisJCXJlcG8vLmdpdCByZXBvICIkKGdpdCAtQyByZXBvIHJldi1wYXJzZSB0d28pIiA+YWN0dWFsICYmCisJeworCQlnaXQgLUMgcmVwbyBsb2cgLS1wcmV0dHk9Zm9ybWF0OiIlY3QgIiAtMSAmJgorCQlnaXQgLUMgcmVwbyByZXYtcGFyc2Ugb25lCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdC10b29sIHJlcG9zaXRvcnkgcGFyc2VfY29tbWl0X2luX2dyYXBoIFwKKwkJcmVwby8uZ2l0IHJlcG8gIiQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIG9uZSkiID5hY3R1YWwgJiYKKwlnaXQgLUMgcmVwbyBsb2cgLS1wcmV0dHk9IiVjdCIgLTEgb25lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldF9jb21taXRfdHJlZV9pbl9ncmFwaCB3b3JrcyBmb3Igbm9uLXRoZV9yZXBvc2l0b3J5JyAnCisJdGVzdC10b29sIHJlcG9zaXRvcnkgZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoIFwKKwkJcmVwby8uZ2l0IHJlcG8gIiQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIHR3bykiID5hY3R1YWwgJiYKKwlnaXQgLUMgcmVwbyByZXYtcGFyc2UgdHdvXnt0cmVlfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdC10b29sIHJlcG9zaXRvcnkgZ2V0X2NvbW1pdF90cmVlX2luX2dyYXBoIFwKKwkJcmVwby8uZ2l0IHJlcG8gIiQoZ2l0IC1DIHJlcG8gcmV2LXBhcnNlIG9uZSkiID5hY3R1YWwgJiYKKwlnaXQgLUMgcmVwbyByZXYtcGFyc2Ugb25lXnt0cmVlfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JydXB0IGNvbW1pdC1ncmFwaCB3cml0ZSAoYnJva2VuIHBhcmVudCknICcKKwlybSAtcmYgcmVwbyAmJgorCWdpdCBpbml0IHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZW1wdHk9IiQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKSIgJiYKKwkJY2F0ID5icm9rZW4gPDwtRU9GICYmCisJCXRyZWUgJGVtcHR5CisJCXBhcmVudCAkWkVST19PSUQKKwkJYXV0aG9yIHdoYXRldmVyIDx3aGF0ZXZlckBleGFtcGxlLmNvbT4gMTIzNCAtMDAwMAorCQljb21taXR0ZXIgd2hhdGV2ZXIgPHdoYXRldmVyQGV4YW1wbGUuY29tPiAxMjM0IC0wMDAwCisKKwkJYnJva2VuIGNvbW1pdAorCQlFT0YKKwkJYnJva2VuPSIkKGdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgLS1saXRlcmFsbHkgYnJva2VuKSIgJiYKKwkJZ2l0IGNvbW1pdC10cmVlIC1wICIkYnJva2VuIiAtbSAiZ29vZCBjb21taXQiICIkZW1wdHkiID5nb29kICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1jb21taXRzIFwKKwkJCTxnb29kIDI+dGVzdF9lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCIgdGVzdF9lcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgY29tbWl0LWdyYXBoIHdyaXRlIChtaXNzaW5nIHRyZWUpJyAnCisJcm0gLXJmIHJlcG8gJiYKKwlnaXQgaW5pdCByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCXRyZWU9IiQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKSIgJiYKKwkJY2F0ID5icm9rZW4gPDwtRU9GICYmCisJCXBhcmVudCAkWkVST19PSUQKKwkJYXV0aG9yIHdoYXRldmVyIDx3aGF0ZXZlckBleGFtcGxlLmNvbT4gMTIzNCAtMDAwMAorCQljb21taXR0ZXIgd2hhdGV2ZXIgPHdoYXRldmVyQGV4YW1wbGUuY29tPiAxMjM0IC0wMDAwCisKKwkJYnJva2VuIGNvbW1pdAorCQlFT0YKKwkJYnJva2VuPSIkKGdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgLS1saXRlcmFsbHkgYnJva2VuKSIgJiYKKwkJZ2l0IGNvbW1pdC10cmVlIC1wICIkYnJva2VuIiAtbSAiZ29vZCIgIiR0cmVlIiA+Z29vZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyBcCisJCQk8Z29vZCAyPnRlc3RfZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBwYXJzZSBjb21taXQiIHRlc3RfZXJyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaCBiL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40M2E3YTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMxOS1tdWx0aS1wYWNrLWluZGV4LnNoCkBAIC0wLDAgKzEsNjMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbXVsdGktcGFjay1pbmRleGVzJworLiAuL3Rlc3QtbGliLnNoCisKK29iamRpcj0uZ2l0L29iamVjdHMKKworbWlkeF9yZWFkX2V4cGVjdCAoKSB7CisJTlVNX1BBQ0tTPSQxCisJTlVNX09CSkVDVFM9JDIKKwlOVU1fQ0hVTktTPSQzCisJT0JKRUNUX0RJUj0kNAorCUVYVFJBX0NIVU5LUz0iJDUiCisJeworCQljYXQgPDwtRU9GICYmCisJCWhlYWRlcjogNGQ0OTQ0NTggMSAkTlVNX0NIVU5LUyAkTlVNX1BBQ0tTCisJCWNodW5rczogcGFjay1uYW1lcyBvaWQtZmFub3V0IG9pZC1sb29rdXAgb2JqZWN0LW9mZnNldHMkRVhUUkFfQ0hVTktTCisJCW51bV9vYmplY3RzOiAkTlVNX09CSkVDVFMKKwkJcGFja3M6CisJCUVPRgorCQlpZiB0ZXN0ICROVU1fUEFDS1MgLWdlIDEKKwkJdGhlbgorCQkJbHMgJE9CSkVDVF9ESVIvcGFjay8gfCBncmVwIGlkeCB8IHNvcnQKKwkJZmkgJiYKKwkJcHJpbnRmICJvYmplY3QtZGlyOiAkT0JKRUNUX0RJUlxuIgorCX0gPmV4cGVjdCAmJgorCXRlc3QtdG9vbCByZWFkLW1pZHggJE9CSkVDVF9ESVIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X29pZF9pbml0ICYmCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJaWR4b2ZmIHNoYTE6Mjk5OQorCWlkeG9mZiBzaGEyNTY6MzczOQorCisJcGFja25hbWVvZmYgc2hhMTo2NTIKKwlwYWNrbmFtZW9mZiBzaGEyNTY6OTQwCisKKwlmYW5vdXRvZmYgc2hhMToxCisJZmFub3V0b2ZmIHNoYTI1NjozCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIG1pZHggd2l0aCBubyBwYWNrcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtZiBwYWNrL211bHRpLXBhY2staW5kZXggJiYKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9LiB3cml0ZSAmJgorCW1pZHhfcmVhZF9leHBlY3QgMCAwIDQgLgorJworCitnZW5lcmF0ZV9vYmplY3RzICgpIHsKKwlpPSQxCisJaWlpPSQocHJpbnRmICclMDNpJyAkaSkKKwl7CisJCXRlc3QtdG9vbCBnZW5yYW5kb20gImJhciIgMjAwICYmCisJCXRlc3QtdG9vbCBnZW5yYW5kb20gImJheiAkaWlpIiA1MAorCX0gPndpZGVfZGVsdGFfJGlpaSAmJgorCXsKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAiZm9vIiRpIDEwMCAmJgorCQl0ZXN0LXRvb2wgZ2VucmFuZG9tICJmb28iJCgoICRpICsgMSApKSAxMDAgJiYKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAiZm9vIiQoKCAkaSArIDIgKSkgMTAwCisJfSA+ZGVlcF9kZWx0YV8kaWlpICYmCisJeworCQllY2hvICRpaWkgJiYKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAiJGlpaSIgODE5MgorCX0gPmZpbGVfJGlpaSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZV8kaWlpIGRlZXBfZGVsdGFfJGlpaSB3aWRlX2RlbHRhXyRpaWkKK30KKworY29tbWl0X2FuZF9saXN0X29iamVjdHMgKCkgeworCXsKKwkJZWNobyAxMDEgJiYKKwkJdGVzdC10b29sIGdlbnJhbmRvbSAxMDAgODE5MjsKKwl9ID5maWxlXzEwMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZV8xMDEgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1wIEhFQUQ8L2Rldi9udWxsKSAmJgorCXsKKwkJZWNobyAkdHJlZSAmJgorCQlnaXQgbHMtdHJlZSAkdHJlZSB8IHNlZCAtZSAicy8uKiBcXChbMC05YS1mXSpcXCkJLiovXFwxLyIKKwl9ID5vYmotbGlzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgJGNvbW1pdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgb2JqZWN0cycgJworCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgNSkKKwlkbworCQlnZW5lcmF0ZV9vYmplY3RzICRpCisJZG9uZSAmJgorCWNvbW1pdF9hbmRfbGlzdF9vYmplY3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIG1pZHggd2l0aCBvbmUgdjEgcGFjaycgJworCXBhY2s9JChnaXQgcGFjay1vYmplY3RzIC0taW5kZXgtdmVyc2lvbj0xICRvYmpkaXIvcGFjay90ZXN0IDxvYmotbGlzdCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gJG9iamRpci9wYWNrL3Rlc3QtJHBhY2sucGFjayBcCisJCSRvYmpkaXIvcGFjay90ZXN0LSRwYWNrLmlkeCAkb2JqZGlyL3BhY2svbXVsdGktcGFjay1pbmRleCAmJgorCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIHdyaXRlICYmCisJbWlkeF9yZWFkX2V4cGVjdCAxIDE4IDQgJG9iamRpcgorJworCittaWR4X2dpdF90d29fbW9kZXMgKCkgeworCWdpdCAtYyBjb3JlLm11bHRpUGFja0luZGV4PWZhbHNlICQxID5leHBlY3QgJiYKKwlnaXQgLWMgY29yZS5tdWx0aVBhY2tJbmRleD10cnVlICQxID5hY3R1YWwgJiYKKwlpZiBbICIkMiIgPSAic29ydGVkIiBdCisJdGhlbgorCQlzb3J0IDxleHBlY3QgPmV4cGVjdC5zb3J0ZWQgJiYKKwkJbXYgZXhwZWN0LnNvcnRlZCBleHBlY3QgJiYKKwkJc29ydCA8YWN0dWFsID5hY3R1YWwuc29ydGVkICYmCisJCW12IGFjdHVhbC5zb3J0ZWQgYWN0dWFsCisJZmkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK2NvbXBhcmVfcmVzdWx0c193aXRoX21pZHggKCkgeworCU1TRz0kMQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIG5vcm1hbCBnaXQgb3BlcmF0aW9uczogJE1TRyIgJworCQltaWR4X2dpdF90d29fbW9kZXMgInJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCIgJiYKKwkJbWlkeF9naXRfdHdvX21vZGVzICJsb2cgLS1yYXciICYmCisJCW1pZHhfZ2l0X3R3b19tb2RlcyAiY291bnQtb2JqZWN0cyAtLXZlcmJvc2UiICYmCisJCW1pZHhfZ2l0X3R3b19tb2RlcyAiY2F0LWZpbGUgLS1iYXRjaC1hbGwtb2JqZWN0cyAtLWJhdGNoLWNoZWNrIiAmJgorCQltaWR4X2dpdF90d29fbW9kZXMgImNhdC1maWxlIC0tYmF0Y2gtYWxsLW9iamVjdHMgLS1iYXRjaC1jaGVjayAtLXVub3JkZXJlZCIgc29ydGVkCisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBtaWR4IHdpdGggb25lIHYyIHBhY2snICcKKwlnaXQgcGFjay1vYmplY3RzIC0taW5kZXgtdmVyc2lvbj0yLDB4NDAgJG9iamRpci9wYWNrL3Rlc3QgPG9iai1saXN0ICYmCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgd3JpdGUgJiYKKwltaWR4X3JlYWRfZXhwZWN0IDEgMTggNCAkb2JqZGlyCisnCisKK2NvbXBhcmVfcmVzdWx0c193aXRoX21pZHggIm9uZSB2MiBwYWNrIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JydXB0IGlkeCBub3Qgb3BlbmVkJyAnCisJaWR4PSQodGVzdC10b29sIHJlYWQtbWlkeCAkb2JqZGlyIHwgZ3JlcCAiXC5pZHhcJCIpICYmCisJbXYgJG9iamRpci9wYWNrLyRpZHggYmFja3VwLSRpZHggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IGJhY2t1cC1cJGlkeCBcJG9iamRpci9wYWNrL1wkaWR4IiAmJgorCisJIyBUaGlzIGlzIHRoZSBtaW5pbXVtIHNpemUgZm9yIGEgc2hhLTEgYmFzZWQgLmlkeDsgdGhpcyBsZXRzCisJIyB1cyBwYXNzIHBlcmZ1bmN0b3J5IHRlc3RzLCBidXQgYW55dGhpbmcgdGhhdCBhY3R1YWxseSBvcGVucyBhbmQgcmVhZHMKKwkjIHRoZSBpZHggZmlsZSB3aWxsIGNvbXBsYWluLgorCXRlc3RfY29weV9ieXRlcyAxMDY0IDxiYWNrdXAtJGlkeCA+JG9iamRpci9wYWNrLyRpZHggJiYKKworCWdpdCAtYyBjb3JlLm11bHRpUGFja0luZGV4PXRydWUgcmV2LWxpc3QgLS1vYmplY3RzIC0tYWxsIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbW9yZSBvYmplY3RzJyAnCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA2IDEwKQorCWRvCisJCWdlbmVyYXRlX29iamVjdHMgJGkKKwlkb25lICYmCisJY29tbWl0X2FuZF9saXN0X29iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgbWlkeCB3aXRoIHR3byBwYWNrcycgJworCWdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTEgJG9iamRpci9wYWNrL3Rlc3QtMiA8b2JqLWxpc3QgJiYKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciB3cml0ZSAmJgorCW1pZHhfcmVhZF9leHBlY3QgMiAzNCA0ICRvYmpkaXIKKycKKworY29tcGFyZV9yZXN1bHRzX3dpdGhfbWlkeCAidHdvIHBhY2tzIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBwcm9ncmVzcyBvZmYgZm9yIHJlZGlyZWN0ZWQgc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgd3JpdGUgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1wcm9ncmVzcyB3cml0ZSAyPmVyciAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlIHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1uby1wcm9ncmVzcyB3cml0ZSAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtb3JlIHBhY2tzJyAnCisJZm9yIGogaW4gJCh0ZXN0X3NlcSAxMSAyMCkKKwlkbworCQlnZW5lcmF0ZV9vYmplY3RzICRqICYmCisJCWNvbW1pdF9hbmRfbGlzdF9vYmplY3RzICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIgJG9iamRpci9wYWNrL3Rlc3QtcGFjayA8b2JqLWxpc3QKKwlkb25lCisnCisKK2NvbXBhcmVfcmVzdWx0c193aXRoX21pZHggIm1peGVkIG1vZGUgKHR3byBwYWNrcyArIGV4dHJhKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgbWlkeCB3aXRoIHR3ZWx2ZSBwYWNrcycgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIHdyaXRlICYmCisJbWlkeF9yZWFkX2V4cGVjdCAxMiA3NCA0ICRvYmpkaXIKKycKKworY29tcGFyZV9yZXN1bHRzX3dpdGhfbWlkeCAidHdlbHZlIHBhY2tzIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbXVsdGktcGFjay1pbmRleCBzdWNjZXNzJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj0kb2JqZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBwcm9ncmVzcyBvZmYgZm9yIHJlZGlyZWN0ZWQgc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj0kb2JqZGlyIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkgLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1wcm9ncmVzcyAyPmVyciAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB3aXRoIHRoZSAtLW5vLXByb2dyZXNzIG9wdGlvbicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAtLW9iamVjdC1kaXI9JG9iamRpciAtLW5vLXByb2dyZXNzIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKworIyB1c2FnZTogY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgPHBvcz4gPGRhdGE+IDxvYmpkaXI+IDxzdHJpbmc+Citjb3JydXB0X21pZHhfYW5kX3ZlcmlmeSgpIHsKKwlQT1M9JDEgJiYKKwlEQVRBPSIkezI6LVwwfSIgJiYKKwlPQkpESVI9JDMgJiYKKwlHUkVQU1RSPSIkNCIgJiYKKwlDT01NQU5EPSIkNSIgJiYKKwlpZiB0ZXN0IC16ICIkQ09NTUFORCIKKwl0aGVuCisJCUNPTU1BTkQ9ImdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAtLW9iamVjdC1kaXI9JE9CSkRJUiIKKwlmaSAmJgorCUZJTEU9JE9CSkRJUi9wYWNrL211bHRpLXBhY2staW5kZXggJiYKKwljaG1vZCBhK3cgJEZJTEUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgbXYgbWlkeC1iYWNrdXAgJEZJTEUgJiYKKwljcCAkRklMRSBtaWR4LWJhY2t1cCAmJgorCXByaW50ZiAiJERBVEEiIHwgZGQgb2Y9IiRGSUxFIiBicz0xIHNlZWs9IiRQT1MiIGNvbnY9bm90cnVuYyAmJgorCXRlc3RfbXVzdF9mYWlsICRDT01NQU5EIDI+dGVzdF9lcnIgJiYKKwlncmVwIC12ICJeKyIgdGVzdF9lcnIgPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIiRHUkVQU1RSIiBlcnIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJhZCBzaWduYXR1cmUnICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAwICJcMDAiICRvYmpkaXIgXAorCQkibXVsdGktcGFjay1pbmRleCBzaWduYXR1cmUiCisnCisKK0hBU0hfTEVOPSQodGVzdF9vaWQgcmF3c3opCitOVU1fT0JKRUNUUz03NAorTUlEWF9CWVRFX1ZFUlNJT049NAorTUlEWF9CWVRFX09JRF9WRVJTSU9OPTUKK01JRFhfQllURV9DSFVOS19DT1VOVD02CitNSURYX0hFQURFUl9TSVpFPTEyCitNSURYX0JZVEVfQ0hVTktfSUQ9JE1JRFhfSEVBREVSX1NJWkUKK01JRFhfQllURV9DSFVOS19PRkZTRVQ9JCgoJE1JRFhfSEVBREVSX1NJWkUgKyA0KSkKK01JRFhfTlVNX0NIVU5LUz01CitNSURYX0NIVU5LX0xPT0tVUF9XSURUSD0xMgorTUlEWF9PRkZTRVRfUEFDS05BTUVTPSQoKCRNSURYX0hFQURFUl9TSVpFICsgXAorCQkJICRNSURYX05VTV9DSFVOS1MgKiAkTUlEWF9DSFVOS19MT09LVVBfV0lEVEgpKQorTUlEWF9CWVRFX1BBQ0tOQU1FX09SREVSPSQoKCRNSURYX09GRlNFVF9QQUNLTkFNRVMgKyAyKSkKK01JRFhfT0ZGU0VUX09JRF9GQU5PVVQ9JCgoJE1JRFhfT0ZGU0VUX1BBQ0tOQU1FUyArICQodGVzdF9vaWQgcGFja25hbWVvZmYpKSkKK01JRFhfT0lEX0ZBTk9VVF9XSURUSD00CitNSURYX0JZVEVfT0lEX0ZBTk9VVF9PUkRFUj0kKChNSURYX09GRlNFVF9PSURfRkFOT1VUICsgMjUwICogJE1JRFhfT0lEX0ZBTk9VVF9XSURUSCArICQodGVzdF9vaWQgZmFub3V0b2ZmKSkpCitNSURYX09GRlNFVF9PSURfTE9PS1VQPSQoKCRNSURYX09GRlNFVF9PSURfRkFOT1VUICsgMjU2ICogJE1JRFhfT0lEX0ZBTk9VVF9XSURUSCkpCitNSURYX0JZVEVfT0lEX0xPT0tVUD0kKCgkTUlEWF9PRkZTRVRfT0lEX0xPT0tVUCArIDE2ICogJEhBU0hfTEVOKSkKK01JRFhfT0ZGU0VUX09CSkVDVF9PRkZTRVRTPSQoKCRNSURYX09GRlNFVF9PSURfTE9PS1VQICsgJE5VTV9PQkpFQ1RTICogJEhBU0hfTEVOKSkKK01JRFhfT0ZGU0VUX1dJRFRIPTgKK01JRFhfQllURV9QQUNLX0lOVF9JRD0kKCgkTUlEWF9PRkZTRVRfT0JKRUNUX09GRlNFVFMgKyAxNiAqICRNSURYX09GRlNFVF9XSURUSCArIDIpKQorTUlEWF9CWVRFX09GRlNFVD0kKCgkTUlEWF9PRkZTRVRfT0JKRUNUX09GRlNFVFMgKyAxNiAqICRNSURYX09GRlNFVF9XSURUSCArIDYpKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmFkIHZlcnNpb24nICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX1ZFUlNJT04gIlwwMCIgJG9iamRpciBcCisJCSJtdWx0aS1wYWNrLWluZGV4IHZlcnNpb24iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBiYWQgT0lEIHZlcnNpb24nICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX09JRF9WRVJTSU9OICJcMDIiICRvYmpkaXIgXAorCQkiaGFzaCB2ZXJzaW9uIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdHJ1bmNhdGVkIGNodW5rIGNvdW50JyAnCisJY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgJE1JRFhfQllURV9DSFVOS19DT1VOVCAiXDAxIiAkb2JqZGlyIFwKKwkJIm1pc3NpbmcgcmVxdWlyZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBleHRlbmRlZCBjaHVuayBjb3VudCcgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfQ0hVTktfQ09VTlQgIlwwNyIgJG9iamRpciBcCisJCSJ0ZXJtaW5hdGluZyBtdWx0aS1wYWNrLWluZGV4IGNodW5rIGlkIGFwcGVhcnMgZWFybGllciB0aGFuIGV4cGVjdGVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWlzc2luZyByZXF1aXJlZCBjaHVuaycgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfQ0hVTktfSUQgIlwwMSIgJG9iamRpciBcCisJCSJtaXNzaW5nIHJlcXVpcmVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaW52YWxpZCBjaHVuayBvZmZzZXQnICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX0NIVU5LX09GRlNFVCAiXDAxIiAkb2JqZGlyIFwKKwkJImludmFsaWQgY2h1bmsgb2Zmc2V0ICh0b28gbGFyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgcGFja25hbWVzIG91dCBvZiBvcmRlcicgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfUEFDS05BTUVfT1JERVIgInoiICRvYmpkaXIgXAorCQkicGFjayBuYW1lcyBvdXQgb2Ygb3JkZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBwYWNrbmFtZXMgb3V0IG9mIG9yZGVyJyAnCisJY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgJE1JRFhfQllURV9QQUNLTkFNRV9PUkRFUiAiYSIgJG9iamRpciBcCisJCSJmYWlsZWQgdG8gbG9hZCBwYWNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgb2lkIGZhbm91dCBvdXQgb2Ygb3JkZXInICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX09JRF9GQU5PVVRfT1JERVIgIlwwMSIgJG9iamRpciBcCisJCSJvaWQgZmFub3V0IG91dCBvZiBvcmRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG9pZCBsb29rdXAgb3V0IG9mIG9yZGVyJyAnCisJY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgJE1JRFhfQllURV9PSURfTE9PS1VQICJcMDAiICRvYmpkaXIgXAorCQkib2lkIGxvb2t1cCBvdXQgb2Ygb3JkZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBpbmNvcnJlY3QgcGFjay1pbnQtaWQnICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX1BBQ0tfSU5UX0lEICJcMDciICRvYmpkaXIgXAorCQkiYmFkIHBhY2staW50LWlkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaW5jb3JyZWN0IG9mZnNldCcgJworCWNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5ICRNSURYX0JZVEVfT0ZGU0VUICJcMzc3IiAkb2JqZGlyIFwKKwkJImluY29ycmVjdCBvYmplY3Qgb2Zmc2V0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZnNjayBpbmNvcnJlY3Qgb2Zmc2V0JyAnCisJY29ycnVwdF9taWR4X2FuZF92ZXJpZnkgJE1JRFhfQllURV9PRkZTRVQgIlwzNzciICRvYmpkaXIgXAorCQkiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQiIFwKKwkJImdpdCAtYyBjb3JlLm11bHRpcGFja2luZGV4PXRydWUgZnNjayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciByZXBhY2sgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgZm9yY2UgcHJvZ3Jlc3Mgb24gZm9yIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIC0tcHJvZ3Jlc3MgcmVwYWNrIDI+ZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1uby1wcm9ncmVzcyByZXBhY2sgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgcmVtb3ZlcyBtdWx0aS1wYWNrLWluZGV4JyAnCisJdGVzdF9wYXRoX2lzX2ZpbGUgJG9iamRpci9wYWNrL211bHRpLXBhY2staW5kZXggJiYKKwlHSVRfVEVTVF9NVUxUSV9QQUNLX0lOREVYPTAgZ2l0IHJlcGFjayAtYWRmICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJG9iamRpci9wYWNrL211bHRpLXBhY2staW5kZXgKKycKKworY29tcGFyZV9yZXN1bHRzX3dpdGhfbWlkeCAiYWZ0ZXIgcmVwYWNrIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1wYWNrLWluZGV4IGFuZCBwYWNrLWJpdG1hcCcgJworCWdpdCAtYyByZXBhY2sud3JpdGVCaXRtYXBzPXRydWUgcmVwYWNrIC1hZCAmJgorCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJZ2l0IHJldi1saXN0IC0tdGVzdC1iaXRtYXAgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1wYWNrLWluZGV4IGFuZCBhbHRlcm5hdGVzJyAnCisJZ2l0IGluaXQgLS1iYXJlIGFsdC5naXQgJiYKKwllY2hvICQocHdkKS9hbHQuZ2l0L29iamVjdHMgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwllY2hvIGNvbnRlbnQxID5maWxlMSAmJgorCWFsdGJsb2I9JChHSVRfRElSPWFsdC5naXQgZ2l0IGhhc2gtb2JqZWN0IC13IGZpbGUxKSAmJgorCWdpdCBjYXQtZmlsZSBibG9iICRhbHRibG9iICYmCisJZ2l0IHJldi1saXN0IC0tYWxsCisnCisKK2NvbXBhcmVfcmVzdWx0c193aXRoX21pZHggIndpdGggYWx0ZXJuYXRlIChsb2NhbCBtaWR4KSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGktcGFjay1pbmRleCBpbiBhbiBhbHRlcm5hdGUnICcKKwltdiAuZ2l0L29iamVjdHMvcGFjay8qIGFsdC5naXQvb2JqZWN0cy9wYWNrICYmCisJdGVzdF9jb21taXQgYWRkX2xvY2FsX29iamVjdHMgJiYKKwlnaXQgcmVwYWNrIC0tbG9jYWwgJiYKKwlnaXQgbXVsdGktcGFjay1pbmRleCB3cml0ZSAmJgorCW1pZHhfcmVhZF9leHBlY3QgMSAzIDQgJG9iamRpciAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKgorJworCitjb21wYXJlX3Jlc3VsdHNfd2l0aF9taWR4ICJ3aXRoIGFsdGVybmF0ZSAocmVtb3RlIG1pZHgpIgorCisjIHVzYWdlOiBjb3JydXB0X2RhdGEgPGZpbGU+IDxwb3M+IFs8ZGF0YT5dCitjb3JydXB0X2RhdGEgKCkgeworCWZpbGU9JDEKKwlwb3M9JDIKKwlkYXRhPSIkezM6LVwwfSIKKwlwcmludGYgIiRkYXRhIiB8IGRkIG9mPSIkZmlsZSIgYnM9MSBzZWVrPSIkcG9zIiBjb252PW5vdHJ1bmMKK30KKworIyBGb3JjZSA2NC1iaXQgb2Zmc2V0cyBieSBtYW5pcHVsYXRpbmcgdGhlIGlkeCBmaWxlLgorIyBUaGlzIG1ha2VzIHRoZSBJRFggZmlsZSBfaW5jb3JyZWN0XyBzbyBiZSBjYXJlZnVsIHRvIGNsZWFuIHVwIGFmdGVyIQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2Ugc29tZSA2NC1iaXQgb2Zmc2V0cyB3aXRoIHBhY2stb2JqZWN0cycgJworCW1rZGlyIG9iamVjdHM2NCAmJgorCW1rZGlyIG9iamVjdHM2NC9wYWNrICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDExKQorCWRvCisJCWdlbmVyYXRlX29iamVjdHMgMTEKKwlkb25lICYmCisJY29tbWl0X2FuZF9saXN0X29iamVjdHMgJiYKKwlwYWNrNjQ9JChnaXQgcGFjay1vYmplY3RzIC0taW5kZXgtdmVyc2lvbj0yLDB4NDAgb2JqZWN0czY0L3BhY2svdGVzdC02NCA8b2JqLWxpc3QpICYmCisJaWR4NjQ9b2JqZWN0czY0L3BhY2svdGVzdC02NC0kcGFjazY0LmlkeCAmJgorCWNobW9kIHUrdyAkaWR4NjQgJiYKKwljb3JydXB0X2RhdGEgJGlkeDY0ICQodGVzdF9vaWQgaWR4b2ZmKSAiXDAyIiAmJgorCW1pZHg2ND0kKGdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj1vYmplY3RzNjQgd3JpdGUpICYmCisJbWlkeF9yZWFkX2V4cGVjdCAxIDYzIDUgb2JqZWN0czY0ICIgbGFyZ2Utb2Zmc2V0cyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG11bHRpLXBhY2staW5kZXggd2l0aCA2NC1iaXQgb2Zmc2V0cycgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAtLW9iamVjdC1kaXI9b2JqZWN0czY0CisnCisKK05VTV9PQkpFQ1RTPTYzCitNSURYX09GRlNFVF9PSURfRkFOT1VUPSQoKE1JRFhfT0ZGU0VUX1BBQ0tOQU1FUyArIDU0KSkKK01JRFhfT0ZGU0VUX09JRF9MT09LVVA9JCgoTUlEWF9PRkZTRVRfT0lEX0ZBTk9VVCArIDI1NiAqICRNSURYX09JRF9GQU5PVVRfV0lEVEgpKQorTUlEWF9PRkZTRVRfT0JKRUNUX09GRlNFVFM9JCgoJE1JRFhfT0ZGU0VUX09JRF9MT09LVVAgKyAkTlVNX09CSkVDVFMgKiAkSEFTSF9MRU4pKQorTUlEWF9PRkZTRVRfTEFSR0VfT0ZGU0VUUz0kKCgkTUlEWF9PRkZTRVRfT0JKRUNUX09GRlNFVFMgKyAkTlVNX09CSkVDVFMgKiAkTUlEWF9PRkZTRVRfV0lEVEgpKQorTUlEWF9CWVRFX0xBUkdFX09GRlNFVD0kKCgkTUlEWF9PRkZTRVRfTEFSR0VfT0ZGU0VUUyArIDMpKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaW5jb3JyZWN0IDY0LWJpdCBvZmZzZXQnICcKKwljb3JydXB0X21pZHhfYW5kX3ZlcmlmeSAkTUlEWF9CWVRFX0xBUkdFX09GRlNFVCAiXDA3IiBvYmplY3RzNjQgXAorCQkiaW5jb3JyZWN0IG9iamVjdCBvZmZzZXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGlyZSB0ZXN0cycgJworCW1rZGlyIGR1cCAmJgorCSgKKwkJY2QgZHVwICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3QtdG9vbCBnZW5yYW5kb20gImRhdGEiIDQwOTYgPmxhcmdlX2ZpbGUudHh0ICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbGFyZ2VfZmlsZS50eHQgJiYKKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDIwKQorCQlkbworCQkJdGVzdF9jb21taXQgJGkKKwkJZG9uZSAmJgorCQlnaXQgYnJhbmNoIEEgSEVBRCAmJgorCQlnaXQgYnJhbmNoIEIgSEVBRH44ICYmCisJCWdpdCBicmFuY2ggQyBIRUFEfjEzICYmCisJCWdpdCBicmFuY2ggRCBIRUFEfjE2ICYmCisJCWdpdCBicmFuY2ggRSBIRUFEfjE4ICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stQSA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9BCisJCV5yZWZzL2hlYWRzL0IKKwkJRU9GCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stQiA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9CCisJCV5yZWZzL2hlYWRzL0MKKwkJRU9GCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stQyA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9DCisJCV5yZWZzL2hlYWRzL0QKKwkJRU9GCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stRCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9ECisJCV5yZWZzL2hlYWRzL0UKKwkJRU9GCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stRSA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9FCisJCUVPRgorCQlnaXQgbXVsdGktcGFjay1pbmRleCB3cml0ZSAmJgorCQljcCAtciAuZ2l0L29iamVjdHMvcGFjayAuZ2l0L29iamVjdHMvcGFjay1iYWNrdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSBkb2VzIG5vdCByZW1vdmUgYW55IHBhY2tzJyAnCisJKAorCQljZCBkdXAgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2sgPmV4cGVjdCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2sgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgcHJvZ3Jlc3Mgb2ZmIGZvciByZWRpcmVjdGVkIHN0ZGVycicgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IGV4cGlyZSAyPmVyciAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIGZvcmNlIHByb2dyZXNzIG9uIGZvciBzdGRlcnInICcKKwkoCisJCWNkIGR1cCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCAtLXByb2dyZXNzIGV4cGlyZSAyPmVyciAmJgorCQl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggLS1uby1wcm9ncmVzcyBleHBpcmUgMj5lcnIgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSByZW1vdmVzIHVucmVmZXJlbmNlZCBwYWNrcycgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stY29tYmluZWQgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvQQorCQlecmVmcy9oZWFkcy9DCisJCUVPRgorCQlnaXQgbXVsdGktcGFjay1pbmRleCB3cml0ZSAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjayB8IGdyZXAgLXYgLWUgcGFjay1bQUJdID5leHBlY3QgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggZXhwaXJlICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8gfCBncmVwIGlkeCA+ZXhwZWN0LWlkeCAmJgorCQl0ZXN0LXRvb2wgcmVhZC1taWR4IC5naXQvb2JqZWN0cyB8IGdyZXAgaWR4ID5hY3R1YWwtbWlkeCAmJgorCQl0ZXN0X2NtcCBleHBlY3QtaWR4IGFjdHVhbC1taWR4ICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAmJgorCQlnaXQgZnNjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIHdpdGggbWluaW11bSBzaXplIGRvZXMgbm90IGFsdGVyIGV4aXN0aW5nIHBhY2tzJyAnCisJKAorCQljZCBkdXAgJiYKKwkJcm0gLXJmIC5naXQvb2JqZWN0cy9wYWNrICYmCisJCW12IC5naXQvb2JqZWN0cy9wYWNrLWJhY2t1cCAuZ2l0L29iamVjdHMvcGFjayAmJgorCQl0b3VjaCAtbSAtdCAyMDE5MDEwMTAwMDAgLmdpdC9vYmplY3RzL3BhY2svcGFjay1EKiAmJgorCQl0b3VjaCAtbSAtdCAyMDE5MDEwMTAwMDEgLmdpdC9vYmplY3RzL3BhY2svcGFjay1DKiAmJgorCQl0b3VjaCAtbSAtdCAyMDE5MDEwMTAwMDIgLmdpdC9vYmplY3RzL3BhY2svcGFjay1CKiAmJgorCQl0b3VjaCAtbSAtdCAyMDE5MDEwMTAwMDMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1BKiAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjayA+ZXhwZWN0ICYmCisJCU1JTlNJWkU9JCh0ZXN0LXRvb2wgcGF0aC11dGlscyBmaWxlLXNpemUgLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgfCBzb3J0IC1uIHwgaGVhZCAtbiAxKSAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCByZXBhY2sgLS1iYXRjaC1zaXplPSRNSU5TSVpFICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIGNyZWF0ZXMgYSBuZXcgcGFjaycgJworCSgKKwkJY2QgZHVwICYmCisJCWxzIC5naXQvb2JqZWN0cy9wYWNrLyppZHggPmlkeC1saXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgaWR4LWxpc3QgJiYKKwkJVEhJUkRfU01BTExFU1RfU0laRT0kKHRlc3QtdG9vbCBwYXRoLXV0aWxzIGZpbGUtc2l6ZSAuZ2l0L29iamVjdHMvcGFjay8qcGFjayB8IHNvcnQgLW4gfCBoZWFkIC1uIDMgfCB0YWlsIC1uIDEpICYmCisJCUJBVENIX1NJWkU9JCgoJFRISVJEX1NNQUxMRVNUX1NJWkUgKyAxKSkgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggcmVwYWNrIC0tYmF0Y2gtc2l6ZT0kQkFUQ0hfU0laRSAmJgorCQlscyAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IGlkeC1saXN0ICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPm1pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG1pZHgtbGlzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHJlbW92ZXMgcmVwYWNrZWQgcGFja3MnICcKKwkoCisJCWNkIGR1cCAmJgorCQlscyAtYWwgLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgJiYKKwkJbHMgLVMgLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgfCBoZWFkIC1uIDQgPmV4cGVjdCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgJiYKKwkJbHMgLVMgLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3QtdG9vbCByZWFkLW1pZHggLmdpdC9vYmplY3RzIHwgZ3JlcCBpZHggPm1pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG1pZHgtbGlzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHdvcmtzIHdoZW4gYWRkaW5nIG5ldyBwYWNrcycgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stY29tYmluZWQgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvQQorCQlecmVmcy9oZWFkcy9CCisJCUVPRgorCQlnaXQgcGFjay1vYmplY3RzIC0tcmV2cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrLWNvbWJpbmVkIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0IKKwkJXnJlZnMvaGVhZHMvQworCQlFT0YKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLmdpdC9vYmplY3RzL3BhY2svcGFjay1jb21iaW5lZCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9DCisJCV5yZWZzL2hlYWRzL0QKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL2EtcGFjayA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9ECisJCV5yZWZzL2hlYWRzL0UKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3otcGFjayA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9FCisJCUVPRgorCQlnaXQgbXVsdGktcGFjay1pbmRleCBleHBpcmUgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svIHwgZ3JlcCBpZHggPmV4cGVjdCAmJgorCQl0ZXN0LXRvb2wgcmVhZC1taWR4IC5naXQvb2JqZWN0cyB8IGdyZXAgaWR4ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSByZXNwZWN0cyAua2VlcCBmaWxlcycgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stYWxsIDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL0EKKwkJRU9GCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHdyaXRlICYmCisJCVBBQ0tBPSQobHMgLmdpdC9vYmplY3RzL3BhY2svYS1wYWNrKlwucGFjayB8IHNlZCBzL1wucGFja1wkLy8pICYmCisJCXRvdWNoICRQQUNLQS5rZWVwICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IGV4cGlyZSAmJgorCQlscyAtUyAuZ2l0L29iamVjdHMvcGFjay9hLXBhY2sqIHwgZ3JlcCAkUEFDS0EgPmEtcGFjay1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGEtcGFjay1maWxlcyAmJgorCQl0ZXN0LXRvb2wgcmVhZC1taWR4IC5naXQvb2JqZWN0cyB8IGdyZXAgaWR4ID5taWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBtaWR4LWxpc3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayAtLWJhdGNoLXNpemU9MCByZXBhY2tzIGV2ZXJ5dGhpbmcnICcKKwkoCisJCWNkIGR1cCAmJgorCQlybSAuZ2l0L29iamVjdHMvcGFjay8qLmtlZXAgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svKmlkeCA+aWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBpZHgtbGlzdCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCByZXBhY2sgLS1iYXRjaC1zaXplPTAgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svKmlkeCA+aWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBpZHgtbGlzdCAmJgorCQl0ZXN0LXRvb2wgcmVhZC1taWR4IC5naXQvb2JqZWN0cyB8IGdyZXAgaWR4ID5taWR4LWxpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBtaWR4LWxpc3QgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggZXhwaXJlICYmCisJCWxzIC1hbCAuZ2l0L29iamVjdHMvcGFjay8qaWR4ID5pZHgtbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGlkeC1saXN0ICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IHJlcGFjayAtLWJhdGNoLXNpemU9MCAmJgorCQlscyAtYWwgLmdpdC9vYmplY3RzL3BhY2svKmlkeCA+bmV3LWlkeC1saXN0ICYmCisJCXRlc3RfY21wIGlkeC1saXN0IG5ldy1pZHgtbGlzdAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzIwLWRlbHRhLWlzbGFuZHMuc2ggYi90L3Q1MzIwLWRlbHRhLWlzbGFuZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVhOTJhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMjAtZGVsdGEtaXNsYW5kcy5zaApAQCAtMCwwICsxLDE0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4ZXJjaXNlIGRlbHRhIGlzbGFuZHMnCisuIC4vdGVzdC1saWIuc2gKKworIyByZXR1cm5zIHRydWUgaWZmICQxIGlzIGEgZGVsdGEgYmFzZWQgb24gJDIKK2lzX2RlbHRhX2Jhc2UgKCkgeworCWRlbHRhX2Jhc2U9JChlY2hvICIkMSIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0nJShkZWx0YWJhc2UpJykgJiYKKwllY2hvID4mMiAiJDEgaGFzIGJhc2UgJGRlbHRhX2Jhc2UiICYmCisJdGVzdCAiJGRlbHRhX2Jhc2UiID0gIiQyIgorfQorCisjIGdlbmVyYXRlIGEgY29tbWl0IG9uIGJyYW5jaCAkMSB3aXRoIGEgc2luZ2xlIGZpbGUsICJmaWxlIiwgd2hvc2UKKyMgY29udGVudCBpcyBtb3N0bHkgYmFzZWQgb24gdGhlIHNlZWQgJDIsIGJ1dCB3aXRoIGEgdW5pcXVlIGJpdAorIyBvZiBjb250ZW50ICQzIGFwcGVuZGVkLiBUaGlzIHNob3VsZCBhbGxvdyB1cyB0byBzZWUgd2hldGhlcgorIyBibG9icyBvZiBkaWZmZXJlbnQgcmVmcyBkZWx0YSBhZ2FpbnN0IGVhY2ggb3RoZXIuCitjb21taXQoKSB7CisJYmxvYj0kKHsgdGVzdC10b29sIGdlbnJhbmRvbSAiJDIiIDEwMjQwICYmIGVjaG8gIiQzIjsgfSB8CisJICAgICAgIGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXRyZWU9JChwcmludGYgJzEwMDY0NCBibG9iICVzXHRmaWxlXG4nICIkYmxvYiIgfCBnaXQgbWt0cmVlKSAmJgorCWNvbW1pdD0kKGVjaG8gIiQyLSQzIiB8IGdpdCBjb21taXQtdHJlZSAiJHRyZWUiICR7NDorLXAgIiQ0In0pICYmCisJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvaGVhZHMvJDEiICIkY29tbWl0IiAmJgorCWV2YWwgIiQxIic9JChnaXQgcmV2LXBhcnNlICQxOmZpbGUpJyAmJgorCWV2YWwgImVjaG8gPiYyICQxPVwkJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdHMnICcKKwljb21taXQgb25lIHNlZWQgMSAmJgorCWNvbW1pdCB0d28gc2VlZCAxMgorJworCisjIE5vdGU6IFRoaXMgaXMgaGVhdmlseSBkZXBlbmRlbnQgb24gdGhlICJwcmVmZXIgbGFyZ2VyIG9iamVjdHMgYXMgYmFzZSIKKyMgaGV1cmlzdGljLgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSByZXBhY2sgZGVsdGFzIG9uZSBhZ2FpbnN0IHR3bycgJworCWdpdCByZXBhY2sgLWFkZiAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCByZXBhY2sgd2l0aCBubyBpc2xhbmQgZGVmaW5pdGlvbiBpcyB2YW5pbGxhJyAnCisJZ2l0IHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCByZXBhY2sgd2l0aCBubyBtYXRjaGVzIGlzIHZhbmlsbGEnICcKKwlnaXQgLWMgInBhY2suaXNsYW5kPXJlZnMvZm9vIiByZXBhY2sgLWFkZmkgJiYKKwlpc19kZWx0YV9iYXNlICRvbmUgJHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXBhcmF0ZSBpc2xhbmRzIGRpc2FsbG93cyBkZWx0YScgJworCWdpdCAtYyAicGFjay5pc2xhbmQ9cmVmcy9oZWFkcy8oLiopIiByZXBhY2sgLWFkZmkgJiYKKwkhIGlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvICYmCisJISBpc19kZWx0YV9iYXNlICR0d28gJG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGlzbGFuZCBhbGxvd3MgZGVsdGEnICcKKwlnaXQgLWMgInBhY2suaXNsYW5kPXJlZnMvaGVhZHMiIHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvYWxlc2NlIHNhbWUtbmFtZWQgaXNsYW5kcycgJworCWdpdCBcCisJCS1jICJwYWNrLmlzbGFuZD1yZWZzLyguKikvb25lIiBcCisJCS1jICJwYWNrLmlzbGFuZD1yZWZzLyguKikvdHdvIiBcCisJCXJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCByZXN0cmljdGlvbnMgZHJvcCByZXVzZWQgZGVsdGFzJyAnCisJZ2l0IHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvICYmCisJZ2l0IC1jICJwYWNrLmlzbGFuZD1yZWZzL2hlYWRzLyguKikiIHJlcGFjayAtYWRpICYmCisJISBpc19kZWx0YV9iYXNlICRvbmUgJHR3byAmJgorCSEgaXNfZGVsdGFfYmFzZSAkdHdvICRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXNsYW5kIHJlZ2V4ZXMgYXJlIGxlZnQtYW5jaG9yZWQnICcKKwlnaXQgLWMgInBhY2suaXNsYW5kPWhlYWRzLyguKikiIHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCByZWdleGVzIGZvbGxvdyBsYXN0LW9uZS13aW5zIHNjaGVtZScgJworCWdpdCBcCisJCS1jICJwYWNrLmlzbGFuZD1yZWZzL2hlYWRzLyguKikiIFwKKwkJLWMgInBhY2suaXNsYW5kPXJlZnMvaGVhZHMvIiBcCisJCXJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNoYXJlZCBoaXN0b3J5JyAnCisJY29tbWl0IHJvb3Qgc2hhcmVkIHJvb3QgJiYKKwljb21taXQgb25lIHNoYXJlZCAxIHJvb3QgJiYKKwljb21taXQgdHdvIHNoYXJlZCAxMi1sb25nIHJvb3QKKycKKworIyBXZSBrbm93IHRoYXQgJHR3byB3aWxsIGJlIHByZWZlcnJlZCBhcyBhIGJhc2UgZnJvbSAkb25lLAorIyBiZWNhdXNlIHdlIGNhbiB0cmFuc2Zvcm0gaXQgd2l0aCBhIHB1cmUgZGVsZXRpb24uCisjCisjIFdlIGFsc28gZXhwZWN0ICRyb290IGFzIGEgZGVsdGEgYWdhaW5zdCAkdHdvIGJ5IHRoZSAibG9uZ2VzdCBpcyBiYXNlIiBydWxlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSBkZWx0YSBnb2VzIGJldHdlZW4gYnJhbmNoZXMnICcKKwlnaXQgcmVwYWNrIC1hZGYgJiYKKwlpc19kZWx0YV9iYXNlICRvbmUgJHR3byAmJgorCWlzX2RlbHRhX2Jhc2UgJHJvb3QgJHR3bworJworCisjIEhlcmUgd2Ugc2hvdWxkIGFsbG93ICRvbmUgdG8gYmFzZSBpdHNlbGYgb24gJHJvb3Q7IGV2ZW4gdGhvdWdoCisjIHRoZXkgYXJlIGluIGRpZmZlcmVudCBpc2xhbmRzLCB0aGUgb2JqZWN0cyBpbiAkcm9vdCBhcmUgaW4gYSBzdXBlcnNldAorIyBvZiBpc2xhbmRzIGNvbXBhcmVkIHRvIHRob3NlIGluICRvbmUuCisjCisjIFNpbWlsYXJseSwgJHR3byBjYW4gZGVsdGEgYWdhaW5zdCAkcm9vdCBieSBvdXIgcnVsZXMuIEFuZCB1bmxpa2UgJG9uZSwKKyMgaW4gd2hpY2ggd2UgYXJlIGp1c3QgYWxsb3dpbmcgaXQsIHRoZSBpc2xhbmQgcnVsZXMgYWN0dWFsbHkgcHV0ICRyb290CisjIGFzIGEgcG9zc2libGUgYmFzZSBmb3IgJHR3bywgd2hpY2ggaXQgd291bGQgbm90IG90aGVyd2lzZSBiZSAoZHVlIHRvIHRoZSBzaXplCisjIHNvcnRpbmcpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsdGFzIGFsbG93ZWQgYWdhaW5zdCBzdXBlcnNldCBpc2xhbmRzJyAnCisJZ2l0IC1jICJwYWNrLmlzbGFuZD1yZWZzL2hlYWRzLyguKikiIHJlcGFjayAtYWRmaSAmJgorCWlzX2RlbHRhX2Jhc2UgJG9uZSAkcm9vdCAmJgorCWlzX2RlbHRhX2Jhc2UgJHR3byAkcm9vdAorJworCisjIFdlIGFyZSBnb2luZyB0byB0ZXN0IHRoZSBwYWNrZmlsZSBvcmRlciBoZXJlLCBzbyB3ZSBhZ2FpbiBoYXZlIHRvIG1ha2Ugc29tZQorIyBhc3N1bXB0aW9ucy4gV2UgYXNzdW1lIHRoYXQgIiRyb290IiwgYXMgcGFydCBvZiBvdXIgY29yZSAib25lIiwgbXVzdCBjb21lCisjIGJlZm9yZSAiJHR3byIuIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgdGhlIGlzbGFuZCBjb2RlLiBIb3dldmVyLCBmb3IKKyMgdGhpcyB0ZXN0IHRvIGZhaWwgd2l0aG91dCBpc2xhbmRzLCB3ZSBhcmUgYWxzbyBhc3N1bWluZyB0aGF0IGl0IHdvdWxkIG5vdAorIyBvdGhlcndpc2UgZG8gc28uIFRoaXMgaXMgdHJ1ZSBieSB0aGUgY3VycmVudCB3cml0ZSBvcmRlciwgd2hpY2ggd2lsbCBwdXQKKyMgY29tbWl0cyAoYW5kIHRoZWlyIGNvbnRlbnRzKSBiZWZvcmUgdGhlaXIgcGFyZW50cy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzbGFuZCBjb3JlIHBsYWNlcyBjb3JlIG9iamVjdHMgZmlyc3QnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkcm9vdAorCSR0d28KKwlFT0YKKwlnaXQgLWMgInBhY2suaXNsYW5kPXJlZnMvaGVhZHMvKC4qKSIgXAorCSAgICAtYyAicGFjay5pc2xhbmRjb3JlPW9uZSIgXAorCSAgICByZXBhY2sgLWFkZmkgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrIHwKKwljdXQgLWQiICIgLWYxIHwKKwllZ3JlcCAiJHJvb3R8JHR3byIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5tYXRjaGVkIGlzbGFuZCBjb3JlIGlzIG5vdCBmYXRhbCcgJworCWdpdCAtYyAicGFjay5pc2xhbmRjb3JlPW9uZSIgcmVwYWNrIC1hZGZpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMyMS1wYWNrLWxhcmdlLW9iamVjdHMuc2ggYi90L3Q1MzIxLXBhY2stbGFyZ2Utb2JqZWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YTU2ZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMyMS1wYWNrLWxhcmdlLW9iamVjdHMuc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOCBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwYWNrLW9iamVjdCB3aXRoICJsYXJnZSIgZGVsdGFzCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcGFjay5zaAorCisjIFR3byBzaW1pbGFyLWlzaCBvYmplY3RzIHRoYXQgd2UgaGF2ZSBjb21wdXRlZCBkZWx0YXMgYmV0d2Vlbi4KK0E9JCh0ZXN0X29pZCBwYWNrbGliXzdfMCkKK0I9JCh0ZXN0X29pZCBwYWNrbGliXzdfNzYpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2xlYXJfcGFja3MgJiYKKwl7CisJCXBhY2tfaGVhZGVyIDIgJiYKKwkJcGFja19vYmogJEEgJEIgJiYKKwkJcGFja19vYmogJEIKKwl9ID5hYi5wYWNrICYmCisJcGFja190cmFpbGVyIGFiLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxhYi5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayBsYXJnZSBkZWx0YXMnICcKKwlwcmludGYgIiVzXFxuIiAkQSAkQiB8CisJR0lUX1RFU1RfT0VfREVMVEFfU0laRT0yIGdpdCBwYWNrLW9iamVjdHMgdG1wLXBhY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzIyLXBhY2stb2JqZWN0cy1zcGFyc2Uuc2ggYi90L3Q1MzIyLXBhY2stb2JqZWN0cy1zcGFyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzEyNGI1NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMjItcGFjay1vYmplY3RzLXNwYXJzZS5zaApAQCAtMCwwICsxLDEzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhY2stb2JqZWN0cyBvYmplY3Qgc2VsZWN0aW9uIHVzaW5nIHNwYXJzZSBhbGdvcml0aG0nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbycgJworCXRlc3RfY29tbWl0IGluaXRpYWwgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMykKKwlkbworCQlta2RpciBmJGkgJiYKKwkJZm9yIGogaW4gJCh0ZXN0X3NlcSAxIDMpCisJCWRvCisJCQlta2RpciBmJGkvZiRqICYmCisJCQllY2hvICRqID5mJGkvZiRqL2RhdGEudHh0CisJCWRvbmUKKwlkb25lICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbGl6ZWQgdHJlZXMiICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDMpCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljJGkgbWFzdGVyICYmCisJCWVjaG8gY2hhbmdlLSRpID5mJGkvZiRpL2RhdGEudHh0ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNoYW5nZWQgZiRpL2YkaS9kYXRhLnR4dCIKKwlkb25lICYmCisJY2F0ID5wYWNraW5wdXQudHh0IDw8LUVPRiAmJgorCXRvcGljMQorCV50b3BpYzIKKwledG9waWMzCisJRU9GCisJZ2l0IHJldi1wYXJzZQkJCVwKKwkJdG9waWMxCQkJXAorCQl0b3BpYzFee3RyZWV9CQlcCisJCXRvcGljMTpmMQkJXAorCQl0b3BpYzE6ZjEvZjEJCVwKKwkJdG9waWMxOmYxL2YxL2RhdGEudHh0IHwgc29ydCA+ZXhwZWN0X29iamVjdHMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1zcGFyc2UgcGFjay1vYmplY3RzJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgLS1uby1zcGFyc2UgPHBhY2tpbnB1dC50eHQgPm5vbnNwYXJzZS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgLW8gbm9uc3BhcnNlLmlkeCBub25zcGFyc2UucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxub25zcGFyc2UuaWR4IHwgYXdrICJ7cHJpbnQgXCQyfSIgPm5vbnNwYXJzZV9vYmplY3RzLnR4dCAmJgorCXRlc3RfY21wIGV4cGVjdF9vYmplY3RzLnR4dCBub25zcGFyc2Vfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BhcnNlIHBhY2stb2JqZWN0cycgJworCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1yZXZzIC0tc3BhcnNlIDxwYWNraW5wdXQudHh0ID5zcGFyc2UucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIC1vIHNwYXJzZS5pZHggc3BhcnNlLnBhY2sgJiYKKwlnaXQgc2hvdy1pbmRleCA8c3BhcnNlLmlkeCB8IGF3ayAie3ByaW50IFwkMn0iID5zcGFyc2Vfb2JqZWN0cy50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfb2JqZWN0cy50eHQgc3BhcnNlX29iamVjdHMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2R1cGxpY2F0ZSBhIGZvbGRlciBmcm9tIGYzIGFuZCBjb21taXQgdG8gdG9waWMxJyAnCisJZ2l0IGNoZWNrb3V0IHRvcGljMSAmJgorCWVjaG8gY2hhbmdlLTMgPmYzL2YzL2RhdGEudHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlZCBmMy9mMy9kYXRhLnR4dCIgJiYKKwlnaXQgcmV2LXBhcnNlCQkJXAorCQl0b3BpYzF+MQkJXAorCQl0b3BpYzF+MV57dHJlZX0JCVwKKwkJdG9waWMxXnt0cmVlfQkJXAorCQl0b3BpYzEJCQlcCisJCXRvcGljMTpmMQkJXAorCQl0b3BpYzE6ZjEvZjEJCVwKKwkJdG9waWMxOmYxL2YxL2RhdGEudHh0IHwgc29ydCA+cmVxdWlyZWRfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLXNwYXJzZSBwYWNrLW9iamVjdHMnICcKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyAtLW5vLXNwYXJzZSA8cGFja2lucHV0LnR4dCA+bm9uc3BhcnNlLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtbyBub25zcGFyc2UuaWR4IG5vbnNwYXJzZS5wYWNrICYmCisJZ2l0IHNob3ctaW5kZXggPG5vbnNwYXJzZS5pZHggfCBhd2sgIntwcmludCBcJDJ9IiA+bm9uc3BhcnNlX29iamVjdHMudHh0ICYmCisJY29tbSAtMSAtMiByZXF1aXJlZF9vYmplY3RzLnR4dCBub25zcGFyc2Vfb2JqZWN0cy50eHQgPm5vbnNwYXJzZV9yZXF1aXJlZF9vYmplY3RzLnR4dCAmJgorCXRlc3RfY21wIHJlcXVpcmVkX29iamVjdHMudHh0IG5vbnNwYXJzZV9yZXF1aXJlZF9vYmplY3RzLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGFyc2UgcGFjay1vYmplY3RzJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgLS1zcGFyc2UgPHBhY2tpbnB1dC50eHQgPnNwYXJzZS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgLW8gc3BhcnNlLmlkeCBzcGFyc2UucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxzcGFyc2UuaWR4IHwgYXdrICJ7cHJpbnQgXCQyfSIgPnNwYXJzZV9vYmplY3RzLnR4dCAmJgorCWNvbW0gLTEgLTIgcmVxdWlyZWRfb2JqZWN0cy50eHQgc3BhcnNlX29iamVjdHMudHh0ID5zcGFyc2VfcmVxdWlyZWRfb2JqZWN0cy50eHQgJiYKKwl0ZXN0X2NtcCByZXF1aXJlZF9vYmplY3RzLnR4dCBzcGFyc2VfcmVxdWlyZWRfb2JqZWN0cy50eHQKKycKKworIyBEZW1vbnN0cmF0ZSB0aGF0IHRoZSBhbGdvcml0aG1zIGRpZmZlciB3aGVuIHdlIGNvcHkgYSB0cmVlIHdob2xlc2FsZQorIyBmcm9tIG9uZSBmb2xkZXIgdG8gYW5vdGhlci4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHVwbGljYXRlIGEgZm9sZGVyIGZyb20gZjEgaW50byBmMycgJworCW1rZGlyIGYzL2Y0ICYmCisJY3AgLXIgZjEvZjEvKiBmMy9mNCAmJgorCWdpdCBhZGQgZjMvZjQgJiYKKwlnaXQgY29tbWl0IC1tICJDb3BpZWQgZjEvZjEgdG8gZjMvZjQiICYmCisJY2F0ID5wYWNraW5wdXQudHh0IDw8LUVPRiAmJgorCXRvcGljMQorCV50b3BpYzF+MQorCUVPRgorCWdpdCByZXYtcGFyc2UJCVwKKwkJdG9waWMxCQlcCisJCXRvcGljMV57dHJlZX0gICBcCisJCXRvcGljMTpmMyB8IHNvcnQgPnJlcXVpcmVkX29iamVjdHMudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1zcGFyc2UgcGFjay1vYmplY3RzJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgLS1uby1zcGFyc2UgPHBhY2tpbnB1dC50eHQgPm5vbnNwYXJzZS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgLW8gbm9uc3BhcnNlLmlkeCBub25zcGFyc2UucGFjayAmJgorCWdpdCBzaG93LWluZGV4IDxub25zcGFyc2UuaWR4IHwgYXdrICJ7cHJpbnQgXCQyfSIgPm5vbnNwYXJzZV9vYmplY3RzLnR4dCAmJgorCWNvbW0gLTEgLTIgcmVxdWlyZWRfb2JqZWN0cy50eHQgbm9uc3BhcnNlX29iamVjdHMudHh0ID5ub25zcGFyc2VfcmVxdWlyZWRfb2JqZWN0cy50eHQgJiYKKwl0ZXN0X2NtcCByZXF1aXJlZF9vYmplY3RzLnR4dCBub25zcGFyc2VfcmVxdWlyZWRfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BhcnNlIHBhY2stb2JqZWN0cycgJworCWdpdCByZXYtcGFyc2UJCQlcCisJCXRvcGljMQkJCVwKKwkJdG9waWMxXnt0cmVlfQkJXAorCQl0b3BpYzE6ZjMJCVwKKwkJdG9waWMxOmYzL2Y0CQlcCisJCXRvcGljMTpmMy9mNC9kYXRhLnR4dCB8IHNvcnQgPmV4cGVjdF9zcGFyc2Vfb2JqZWN0cy50eHQgJiYKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyAtLXNwYXJzZSA8cGFja2lucHV0LnR4dCA+c3BhcnNlLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtbyBzcGFyc2UuaWR4IHNwYXJzZS5wYWNrICYmCisJZ2l0IHNob3ctaW5kZXggPHNwYXJzZS5pZHggfCBhd2sgIntwcmludCBcJDJ9IiA+c3BhcnNlX29iamVjdHMudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0X3NwYXJzZV9vYmplY3RzLnR4dCBzcGFyc2Vfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay51c2VTcGFyc2UgZW5hYmxlcyBhbGdvcml0aG0nICcKKwlnaXQgY29uZmlnIHBhY2sudXNlU3BhcnNlIHRydWUgJiYKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tcmV2cyA8cGFja2lucHV0LnR4dCA+c3BhcnNlLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtbyBzcGFyc2UuaWR4IHNwYXJzZS5wYWNrICYmCisJZ2l0IHNob3ctaW5kZXggPHNwYXJzZS5pZHggfCBhd2sgIntwcmludCBcJDJ9IiA+c3BhcnNlX29iamVjdHMudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0X3NwYXJzZV9vYmplY3RzLnR4dCBzcGFyc2Vfb2JqZWN0cy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay51c2VTcGFyc2Ugb3ZlcnJpZGRlbicgJworCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1yZXZzIC0tbm8tc3BhcnNlIDxwYWNraW5wdXQudHh0ID5zcGFyc2UucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIC1vIHNwYXJzZS5pZHggc3BhcnNlLnBhY2sgJiYKKwlnaXQgc2hvdy1pbmRleCA8c3BhcnNlLmlkeCB8IGF3ayAie3ByaW50IFwkMn0iID5zcGFyc2Vfb2JqZWN0cy50eHQgJiYKKwl0ZXN0X2NtcCByZXF1aXJlZF9vYmplY3RzLnR4dCBzcGFyc2Vfb2JqZWN0cy50eHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzIzLXBhY2stcmVkdW5kYW50LnNoIGIvdC90NTMyMy1wYWNrLXJlZHVuZGFudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjRkMWNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMyMy1wYWNrLXJlZHVuZGFudC5zaApAQCAtMCwwICsxLDQ2NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOCBKaWFuZyBYaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgcGFjay1yZWR1bmRhbnQKKworSW4gb3JkZXIgdG8gdGVzdCBnaXQtcGFjay1yZWR1bmRhbnQsIHdlIHdpbGwgY3JlYXRlIGEgbnVtYmVyIG9mIG9iamVjdHMgYW5kCitwYWNrcyBpbiB0aGUgcmVwb3NpdG9yeSBgbWFzdGVyLmdpdGAuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWNrcyAoUDEtUDgpCithbmQgb2JqZWN0cyAoVCwgQS1SKSBpcyBzaG93ZWQgaW4gdGhlIGZvbGxvd2luZyBjaGFydC4gT2JqZWN0cyBvZiBhIHBhY2sgd2lsbAorYmUgbWFya2VkIHdpdGggbGV0dGVyIHgsIHdoaWxlIG9iamVjdHMgb2YgcmVkdW5kYW50IHBhY2tzIHdpbGwgYmUgbWFya2VkIHdpdGgKK2V4Y2xhbWF0aW9uIHBvaW50LCBhbmQgcmVkdW5kYW50IHBhY2sgaXRzZWxmIHdpbGwgYmUgbWFya2VkIHdpdGggYXN0ZXJpc2suCisKKwl8IFQgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIKKyAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUDEgIHwgeCB4IHggeCB4IHggeCAgICAgICAgICAgICAgICAgICAgICAgeAorICAgIFAyKiB8ICAgICAhICEgISAhICAgISAhICEKKyAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHgKKyAgICBQNCogfCAgICAgICAgICAgICAgICAgICAgICEgISAhICEgICAgICEKKyAgICBQNSAgfCAgICAgICAgICAgICAgIHggeCAgICAgICAgICAgeCB4CisgICAgUDYqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgISAgICEKKyAgICBQNyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggeAorICAgIFA4KiB8ICAgIQorICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBTEwgfCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4CisKK0Fub3RoZXIgcmVwb3NpdG9yeSBgc2hhcmVkLmdpdGAgaGFzIHVuaXF1ZSBvYmplY3RzIChYLVopLCB3aGlsZSBvdGhlciBvYmplY3RzCisobWFya2VkIHdpdGggbGV0dGVyIHMpIGFyZSBzaGFyZWQgdGhyb3VnaCBhbHQtb2RiIChvZiBgbWFzdGVyLmdpdGApLiBUaGUKK3JlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhY2tzIGFuZCBvYmplY3RzIGlzIGFzIGZvbGxvd3M6CisKKwl8IFQgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgICBYIFkgWgorICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFB4MSB8ICAgcyBzIHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IHggeAorICAgIFB4MiB8ICAgICAgICAgcyBzIHMgICAgICAgICAgICAgICAgICAgICAgICAgICB4IHggeAorJworCisuIC4vdGVzdC1saWIuc2gKKworbWFzdGVyX3JlcG89bWFzdGVyLmdpdAorc2hhcmVkX3JlcG89c2hhcmVkLmdpdAorCisjIENyZWF0ZSBjb21taXRzIGluIDxyZXBvPiBhbmQgYXNzaWduIGVhY2ggY29tbWl0J3Mgb2lkIHRvIHNoZWxsIHZhcmlhYmxlcworIyBnaXZlbiBpbiB0aGUgYXJndW1lbnRzIChBLCBCLCBhbmQgQykuIEUuZy46CisjCisjICAgICBjcmVhdGVfY29tbWl0c19pbiA8cmVwbz4gQSBCIEMKKyMKKyMgTk9URTogQXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGZyb20gYSBzdWJzaGVsbCBzaW5jZSB2YXJpYWJsZQorIyBhc3NpZ25tZW50cyB3aWxsIGRpc2FwcGVhciB3aGVuIHN1YnNoZWxsIGV4aXRzLgorY3JlYXRlX2NvbW1pdHNfaW4gKCkgeworCXJlcG89IiQxIiAmJgorCWlmICEgcGFyZW50PSQoZ2l0IC1DICIkcmVwbyIgcmV2LXBhcnNlIEhFQURee30gMj4vZGV2L251bGwpCisJdGhlbgorCQlwYXJlbnQ9CisJZmkgJiYKKwlUPSQoZ2l0IC1DICIkcmVwbyIgd3JpdGUtdHJlZSkgJiYKKwlzaGlmdCAmJgorCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwlkbworCQluYW1lPSQxICYmCisJCXRlc3RfdGljayAmJgorCQlpZiB0ZXN0IC16ICIkcGFyZW50IgorCQl0aGVuCisJCQlvaWQ9JChlY2hvICRuYW1lIHwgZ2l0IC1DICIkcmVwbyIgY29tbWl0LXRyZWUgJFQpCisJCWVsc2UKKwkJCW9pZD0kKGVjaG8gJG5hbWUgfCBnaXQgLUMgIiRyZXBvIiBjb21taXQtdHJlZSAtcCAkcGFyZW50ICRUKQorCQlmaSAmJgorCQlldmFsICRuYW1lPSRvaWQgJiYKKwkJcGFyZW50PSRvaWQgJiYKKwkJc2hpZnQgfHwKKwkJcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IC1DICIkcmVwbyIgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkb2lkCit9CisKKyMgQ3JlYXRlIHBhY2sgaW4gPHJlcG8+IGFuZCBhc3NpZ24gcGFjayBpZCB0byB2YXJpYWJsZSBnaXZlbiBpbiB0aGUgMm5kIGFyZ3VtZW50CisjICg8bmFtZT4pLiBDb21taXRzIGluIHRoZSBwYWNrIHdpbGwgYmUgcmVhZCBmcm9tIHN0ZGluLiBFLmcuOgorIworIyAgICAgY3JlYXRlX3BhY2tfaW4gPHJlcG8+IDxuYW1lPiA8PC1FT0YKKyMgICAgICAgICAuLi4KKyMgICAgICAgICBFT0YKKyMKKyMgTk9URTogY29tbWl0cyBmcm9tIHN0ZGluIHNob3VsZCBiZSBnaXZlbiB1c2luZyBoZXJlZG9jLCBub3QgdXNpbmcgcGlwZSwgYW5kCisjIGF2b2lkIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIGEgc3Vic2hlbGwgc2luY2UgdmFyaWFibGUgYXNzaWdubWVudHMgd2lsbAorIyBkaXNhcHBlYXIgd2hlbiBzdWJzaGVsbCBleGl0cy4KK2NyZWF0ZV9wYWNrX2luICgpIHsKKwlyZXBvPSIkMSIgJiYKKwluYW1lPSIkMiIgJiYKKwlwYWNrPSQoZ2l0IC1DICIkcmVwby9vYmplY3RzL3BhY2siIHBhY2stb2JqZWN0cyAtcSBwYWNrKSAmJgorCWV2YWwgJG5hbWU9JHBhY2sgJiYKKwlldmFsIFAkcGFjaz0kbmFtZTokcGFjaworfQorCitmb3JtYXRfcGFja2ZpbGVzICgpIHsKKwlzZWQgXAorCQktZSAicyMuKi9wYWNrLVwoLipcKVwuaWR4I1wxIyIgXAorCQktZSAicyMuKi9wYWNrLVwoLipcKVwucGFjayNcMSMiIHwKKwlzb3J0IC11IHwKKwl3aGlsZSByZWFkIHAKKwlkbworCQlpZiB0ZXN0IC16ICIkKGV2YWwgZWNobyBcJHtQJHB9KSIKKwkJdGhlbgorCQkJZWNobyAkcAorCQllbHNlCisJCQlldmFsIGVjaG8gIlwke1AkcH0iCisJCWZpCisJZG9uZSB8CisJc29ydAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtYXN0ZXIgcmVwbycgJworCWdpdCBpbml0IC0tYmFyZSAiJG1hc3Rlcl9yZXBvIiAmJgorCWNyZWF0ZV9jb21taXRzX2luICIkbWFzdGVyX3JlcG8iIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENoYXJ0IG9mIHBhY2tzIGFuZCBvYmplY3RzIGZvciB0aGlzIHRlc3QgY2FzZQorIworIyAgICAgICAgIHwgVCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUgorIyAgICAgLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgUDEgIHwgeCB4IHggeCB4IHggeCAgICAgICAgICAgICAgICAgICAgICAgeAorIyAgICAgUDIgIHwgICAgIHggeCB4IHggICB4IHggeAorIyAgICAgUDMgIHwgICAgICAgICAgICAgeCAgICAgeCB4IHggeCB4CisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBBTEwgfCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggICAgICAgICB4CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyOiBubyByZWR1bmRhbnQgZm9yIHBhY2sgMSwgMiwgMycgJworCWNyZWF0ZV9wYWNrX2luICIkbWFzdGVyX3JlcG8iIFAxIDw8LUVPRiAmJgorCQkkVAorCQkkQQorCQkkQgorCQkkQworCQkkRAorCQkkRQorCQkkRgorCQkkUgorCQlFT0YKKwljcmVhdGVfcGFja19pbiAiJG1hc3Rlcl9yZXBvIiBQMiA8PC1FT0YgJiYKKwkJJEIKKwkJJEMKKwkJJEQKKwkJJEUKKwkJJEcKKwkJJEgKKwkJJEkKKwkJRU9GCisJY3JlYXRlX3BhY2tfaW4gIiRtYXN0ZXJfcmVwbyIgUDMgPDwtRU9GICYmCisJCSRGCisJCSRJCisJCSRKCisJCSRLCisJCSRMCisJCSRNCisJCUVPRgorCSgKKwkJY2QgIiRtYXN0ZXJfcmVwbyIgJiYKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsID5vdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSCisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBQMSAgfCB4IHggeCB4IHggeCB4ICAgICAgICAgICAgICAgICAgICAgICB4CisjICAgICBQMiAgfCAgICAgeCB4IHggeCAgIHggeCB4CisjICAgICBQMyogfCAgICAgICAgICAgICAhICAgICAhICEgISAhICEKKyMgICAgIFA0ICB8ICAgICAgICAgICAgICAgICAgICAgeCB4IHggeCAgICAgeAorIyAgICAgUDUgIHwgICAgICAgICAgICAgICB4IHggICAgICAgICAgIHggeAorIyAgICAgLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgQUxMIHwgeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4ICAgeAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3Rlcjogb25lIG9mIHBhY2stMi9wYWNrLTMgaXMgcmVkdW5kYW50JyAnCisJY3JlYXRlX3BhY2tfaW4gIiRtYXN0ZXJfcmVwbyIgUDQgPDwtRU9GICYmCisJCSRKCisJCSRLCisJCSRMCisJCSRNCisJCSRQCisJCUVPRgorCWNyZWF0ZV9wYWNrX2luICIkbWFzdGVyX3JlcG8iIFA1IDw8LUVPRiAmJgorCQkkRworCQkkSAorCQkkTgorCQkkTworCQlFT0YKKwkoCisJCWNkICIkbWFzdGVyX3JlcG8iICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkJUDM6JFAzCisJCQlFT0YKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsID5vdXQgJiYKKwkJZm9ybWF0X3BhY2tmaWxlcyA8b3V0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSCisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBQMSAgfCB4IHggeCB4IHggeCB4ICAgICAgICAgICAgICAgICAgICAgICB4CisjICAgICBQMiogfCAgICAgISAhICEgISAgICEgISAhCisjICAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHgKKyMgICAgIFA0KiB8ICAgICAgICAgICAgICAgICAgICAgISAhICEgISAgICAgIQorIyAgICAgUDUgIHwgICAgICAgICAgICAgICB4IHggICAgICAgICAgIHggeAorIyAgICAgUDYqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgISAgICEKKyMgICAgIFA3ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCB4CisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBBTEwgfCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyOiBwYWNrIDIsIDQsIGFuZCA2IGFyZSByZWR1bmRhbnQnICcKKwljcmVhdGVfcGFja19pbiAiJG1hc3Rlcl9yZXBvIiBQNiA8PC1FT0YgJiYKKwkJJE4KKwkJJE8KKwkJJFEKKwkJRU9GCisJY3JlYXRlX3BhY2tfaW4gIiRtYXN0ZXJfcmVwbyIgUDcgPDwtRU9GICYmCisJCSRQCisJCSRRCisJCUVPRgorCSgKKwkJY2QgIiRtYXN0ZXJfcmVwbyIgJiYKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCQlQMjokUDIKKwkJCVA0OiRQNAorCQkJUDY6JFA2CisJCQlFT0YKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsID5vdXQgJiYKKwkJZm9ybWF0X3BhY2tmaWxlcyA8b3V0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSCisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICBQMSAgfCB4IHggeCB4IHggeCB4ICAgICAgICAgICAgICAgICAgICAgICB4CisjICAgICBQMiogfCAgICAgISAhICEgISAgICEgISAhCisjICAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHgKKyMgICAgIFA0KiB8ICAgICAgICAgICAgICAgICAgICAgISAhICEgISAgICAgIQorIyAgICAgUDUgIHwgICAgICAgICAgICAgICB4IHggICAgICAgICAgIHggeAorIyAgICAgUDYqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgISAgICEKKyMgICAgIFA3ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCB4CisjICAgICBQOCogfCAgICEKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgIEFMTCB8IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHgKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXI6IHBhY2stOCAoc3Vic2V0IG9mIHBhY2stMSkgaXMgYWxzbyByZWR1bmRhbnQnICcKKwljcmVhdGVfcGFja19pbiAiJG1hc3Rlcl9yZXBvIiBQOCA8PC1FT0YgJiYKKwkJJEEKKwkJRU9GCisJKAorCQljZCAiJG1hc3Rlcl9yZXBvIiAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJCVAyOiRQMgorCQkJUDQ6JFA0CisJCQlQNjokUDYKKwkJCVA4OiRQOAorCQkJRU9GCisJCWdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCA+b3V0ICYmCisJCWZvcm1hdF9wYWNrZmlsZXMgPG91dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlcjogY2xlYW4gbG9vc2Ugb2JqZWN0cycgJworCSgKKwkJY2QgIiRtYXN0ZXJfcmVwbyIgJiYKKwkJZ2l0IHBydW5lLXBhY2tlZCAmJgorCQlmaW5kIG9iamVjdHMgLXR5cGUgZiB8IHNlZCAtZSAiL29iamVjdHNcL3BhY2tcLy9kIiA+b3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlcjogcmVtb3ZlIHJlZHVuZGFudCBwYWNrcyBhbmQgcGFzcyBmc2NrJyAnCisJKAorCQljZCAiJG1hc3Rlcl9yZXBvIiAmJgorCQlnaXQgcGFjay1yZWR1bmRhbnQgLS1hbGwgfCB4YXJncyBybSAmJgorCQlnaXQgZnNjayAmJgorCQlnaXQgcGFjay1yZWR1bmRhbnQgLS1hbGwgPm91dCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisJKQorJworCisjIFRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB3aWxsIGV4ZWN1dGUgaW5zaWRlIGBzaGFyZWQuZ2l0YCwgaW5zdGVhZCBvZgorIyBpbnNpZGUgYG1hc3Rlci5naXRgLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2hhcmVkLmdpdCcgJworCWdpdCBjbG9uZSAtLW1pcnJvciAiJG1hc3Rlcl9yZXBvIiAiJHNoYXJlZF9yZXBvIiAmJgorCSgKKwkJY2QgIiRzaGFyZWRfcmVwbyIgJiYKKwkJcHJpbnRmICIuLi8uLi8kbWFzdGVyX3JlcG8vb2JqZWN0c1xuIiA+b2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZDogYWxsIHBhY2tzIGFyZSByZWR1bmRhbnQsIGJ1dCBubyBvdXRwdXQgd2l0aG91dCAtLWFsdC1vZGInICcKKwkoCisJCWNkICIkc2hhcmVkX3JlcG8iICYmCisJCWdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCA+b3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENoYXJ0IG9mIHBhY2tzIGFuZCBvYmplY3RzIGZvciB0aGlzIHRlc3QgY2FzZQorIworIyAgICAgPT09PT09PT09PT09PT09PSBtYXN0ZXIuZ2l0ID09PT09PT09PT09PT09PQorIyAgICAgICAgIHwgVCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiAgPC0tLS0tLS0tLS0rCisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgIHwKKyMgICAgIFAxICB8IHggeCB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgICAgIHggICAgICAgICAgICAgfAorIyAgICAgUDMgIHwgICAgICAgICAgICAgeCAgICAgeCB4IHggeCB4ICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICBQNSAgfCAgICAgICAgICAgICAgIHggeCAgICAgICAgICAgeCB4ICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIFA3ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCB4ICAgICAgICAgICAgICAgfAorIyAgICAgLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICB8CisjICAgICBBTEwgfCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4ICAgICAgICAgICAgIHwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICA9PT09PT09PT09PT09PT09IHNoYXJlZC5naXQgPT09PT09PT09PT09PT09ICAgICAgICAgICAgIHwKKyMgICAgICAgICB8IFQgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgIDxvYmplY3RzL2luZm8vYWx0ZXJuYXRlcz4KKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgIFAxKiB8IHMgcyBzIHMgcyBzIHMgICAgICAgICAgICAgICAgICAgICAgIHMKKyMgICAgIFAzKiB8ICAgICAgICAgICAgIHMgICAgIHMgcyBzIHMgcworIyAgICAgUDUqIHwgICAgICAgICAgICAgICBzIHMgICAgICAgICAgIHMgcworIyAgICAgUDcqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzIHMKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgIEFMTCB8IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHgKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQ6IHNob3cgcmVkdW5kYW50IHBhY2tzIGluIHN0ZGVyciBmb3IgdmVyYm9zZSBtb2RlJyAnCisJKAorCQljZCAiJHNoYXJlZF9yZXBvIiAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJCVAxOiRQMQorCQkJUDM6JFAzCisJCQlQNTokUDUKKwkJCVA3OiRQNworCQkJRU9GCisJCWdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCAtLXZlcmJvc2UgPm91dCAyPm91dC5lcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCQlncmVwICJwYWNrJCIgb3V0LmVyciB8IGZvcm1hdF9wYWNrZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQ6IHJlbW92ZSByZWR1bmRhbnQgcGFja3MsIG5vIHBhY2tzIGxlZnQnICcKKwkoCisJCWNkICIkc2hhcmVkX3JlcG8iICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkJZmF0YWw6IFplcm8gcGFja3MgZm91bmQhCisJCQlFT0YKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsIC0tYWx0LW9kYiB8IHhhcmdzIHJtICYmCisJCWdpdCBmc2NrICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCAtLWFsdC1vZGIgPmFjdHVhbCAyPiYxICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZDogY3JlYXRlIG5ldyBvYmplY3RzIGFuZCBwYWNrcycgJworCWNyZWF0ZV9jb21taXRzX2luICIkc2hhcmVkX3JlcG8iIFggWSBaICYmCisJY3JlYXRlX3BhY2tfaW4gIiRzaGFyZWRfcmVwbyIgUHgxIDw8LUVPRiAmJgorCQkkWAorCQkkWQorCQkkWgorCQkkQQorCQkkQgorCQkkQworCQlFT0YKKwljcmVhdGVfcGFja19pbiAiJHNoYXJlZF9yZXBvIiBQeDIgPDwtRU9GCisJCSRYCisJCSRZCisJCSRaCisJCSRECisJCSRFCisJCSRGCisJCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQ6IG5vIHJlZHVuZGFudCB3aXRob3V0IC0tYWx0LW9kYicgJworCSgKKwkJY2QgIiRzaGFyZWRfcmVwbyIgJiYKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsID5vdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICA9PT09PT09PT09PT09PT09IG1hc3Rlci5naXQgPT09PT09PT09PT09PT09CisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSICA8LS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgfAorIyAgICAgUDEgIHwgeCB4IHggeCB4IHggeCAgICAgICAgICAgICAgICAgICAgICAgeCAgICAgICAgICAgICAgICAgICB8CisjICAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIFA1ICB8ICAgICAgICAgICAgICAgeCB4ICAgICAgICAgICB4IHggICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgUDcgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IHggICAgICAgICAgICAgICAgICAgICB8CisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIEFMTCB8IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgID09PT09PT09PT09PT09PT0gc2hhcmVkLmdpdCA9PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgfAorIyAgICAgICAgIHwgVCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiAgIFggWSBaIDxvYmplY3RzL2luZm8vYWx0ZXJuYXRlcz4KKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgUHgxIHwgICBzIHMgcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggeCB4CisjICAgICBQeDIqfCAgICAgICAgIHMgcyBzICAgICAgICAgICAgICAgICAgICAgICAgICAgISAhICEKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgQUxMIHwgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyAgIHggeCB4CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhcmVkOiBvbmUgcGFjayBpcyByZWR1bmRhbnQgd2l0aCAtLWFsdC1vZGInICcKKwkoCisJCWNkICIkc2hhcmVkX3JlcG8iICYmCisJCWdpdCBwYWNrLXJlZHVuZGFudCAtLWFsbCAtLWFsdC1vZGIgPm91dCAmJgorCQlmb3JtYXRfcGFja2ZpbGVzIDxvdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hhcnQgb2YgcGFja3MgYW5kIG9iamVjdHMgZm9yIHRoaXMgdGVzdCBjYXNlCisjCisjICAgICA9PT09PT09PT09PT09PT09IG1hc3Rlci5naXQgPT09PT09PT09PT09PT09CisjICAgICAgICAgfCBUIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSICA8LS0tLS0tLS0tLS0tLS0tLSsKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgfAorIyAgICAgUDEgIHwgeCB4IHggeCB4IHggeCAgICAgICAgICAgICAgICAgICAgICAgeCAgICAgICAgICAgICAgICAgICB8CisjICAgICBQMyAgfCAgICAgICAgICAgICB4ICAgICB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIFA1ICB8ICAgICAgICAgICAgICAgeCB4ICAgICAgICAgICB4IHggICAgICAgICAgICAgICAgICAgICAgICAgfAorIyAgICAgUDcgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IHggICAgICAgICAgICAgICAgICAgICB8CisjICAgICAtLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgIHwKKyMgICAgIEFMTCB8IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggICAgICAgICAgICAgICAgICAgfAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyMgICAgID09PT09PT09PT09PT09PT0gc2hhcmVkLmdpdCA9PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgfAorIyAgICAgICAgIHwgVCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiAgIFggWSBaIDxvYmplY3RzL2luZm8vYWx0ZXJuYXRlcz4KKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgUHgxKnwgICBzIHMgcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgaSBpCisjICAgICBQeDIqfCAgICAgICAgIHMgcyBzICAgICAgICAgICAgICAgICAgICAgICAgICAgaSBpIGkKKyMgICAgIC0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgQUxMIHwgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyBzIHMgcyAgIGkgaSBpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZCBvYmplY3RzLCBtYXJrZWQgd2l0aCBpKQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZDogaWdub3JlIHVuaXF1ZSBvYmplY3RzIGFuZCBhbGwgdHdvIHBhY2tzIGFyZSByZWR1bmRhbnQnICcKKwkoCisJCWNkICIkc2hhcmVkX3JlcG8iICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkJUHgxOiRQeDEKKwkJCVB4MjokUHgyCisJCQlFT0YKKwkJZ2l0IHBhY2stcmVkdW5kYW50IC0tYWxsIC0tYWx0LW9kYiA+b3V0IDw8LUVPRiAmJgorCQkJJFgKKwkJCSRZCisJCQkkWgorCQkJRU9GCisJCWZvcm1hdF9wYWNrZmlsZXMgPG91dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2ggYi90L3Q1MzI0LXNwbGl0LWNvbW1pdC1ncmFwaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2IyZTZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2gKQEAgLTAsMCArMSwzNTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzcGxpdCBjb21taXQgZ3JhcGgnCisuIC4vdGVzdC1saWIuc2gKKworR0lUX1RFU1RfQ09NTUlUX0dSQVBIPTAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbycgJworCWdpdCBpbml0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwlnaXQgY29uZmlnIGdjLndyaXRlQ29tbWl0R3JhcGggZmFsc2UgJiYKKwlpbmZvZGlyPSIuZ2l0L29iamVjdHMvaW5mbyIgJiYKKwlncmFwaGRpcj0iJGluZm9kaXIvY29tbWl0LWdyYXBocyIgJiYKKwl0ZXN0X29pZF9pbml0ICYmCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9NCisJc2hhbGxvdyBzaGExOjE3NjAKKwlzaGFsbG93IHNoYTI1NjoyMDY0CisKKwliYXNlIHNoYTE6MTM3NgorCWJhc2Ugc2hhMjU2OjE0OTYKKwlFT00KKycKKworZ3JhcGhfcmVhZF9leHBlY3QoKSB7CisJTlVNX0JBU0U9MAorCWlmIHRlc3QgISAteiAkMgorCXRoZW4KKwkJTlVNX0JBU0U9JDIKKwlmaQorCWNhdCA+ZXhwZWN0IDw8LSBFT0YKKwloZWFkZXI6IDQzNDc1MDQ4IDEgMSAzICROVU1fQkFTRQorCW51bV9jb21taXRzOiAkMQorCWNodW5rczogb2lkX2Zhbm91dCBvaWRfbG9va3VwIGNvbW1pdF9tZXRhZGF0YQorCUVPRgorCXRlc3QtdG9vbCByZWFkLWdyYXBoID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBjb21taXRzIGFuZCB3cml0ZSBjb21taXQtZ3JhcGgnICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDMpCisJZG8KKwkJdGVzdF9jb21taXQgJGkgJiYKKwkJZ2l0IGJyYW5jaCBjb21taXRzLyRpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkaW5mb2Rpci9jb21taXQtZ3JhcGggJiYKKwlncmFwaF9yZWFkX2V4cGVjdCAzCisnCisKK2dyYXBoX2dpdF90d29fbW9kZXMoKSB7CisJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9dHJ1ZSAkMSA+b3V0cHV0CisJZ2l0IC1jIGNvcmUuY29tbWl0R3JhcGg9ZmFsc2UgJDEgPmV4cGVjdAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKworZ3JhcGhfZ2l0X2JlaGF2aW9yKCkgeworCU1TRz0kMQorCUJSQU5DSD0kMgorCUNPTVBBUkU9JDMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayBub3JtYWwgZ2l0IG9wZXJhdGlvbnM6ICRNU0ciICcKKwkJZ3JhcGhfZ2l0X3R3b19tb2RlcyAibG9nIC0tb25lbGluZSAkQlJBTkNIIiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJsb2cgLS10b3BvLW9yZGVyICRCUkFOQ0giICYmCisJCWdyYXBoX2dpdF90d29fbW9kZXMgImxvZyAtLWdyYXBoICRDT01QQVJFLi4kQlJBTkNIIiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJicmFuY2ggLXZ2IiAmJgorCQlncmFwaF9naXRfdHdvX21vZGVzICJtZXJnZS1iYXNlIC1hICRCUkFOQ0ggJENPTVBBUkUiCisJJworfQorCitncmFwaF9naXRfYmVoYXZpb3IgJ2dyYXBoIGV4aXN0cycgY29tbWl0cy8zIGNvbW1pdHMvMQorCit2ZXJpZnlfY2hhaW5fZmlsZXNfZXhpc3QoKSB7CisJZm9yIGhhc2ggaW4gJChjYXQgJDEvY29tbWl0LWdyYXBoLWNoYWluKQorCWRvCisJCXRlc3RfcGF0aF9pc19maWxlICQxL2dyYXBoLSRoYXNoLmdyYXBoIHx8IHJldHVybiAxCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbW9yZSBjb21taXRzLCBhbmQgd3JpdGUgYSBuZXcgYmFzZSBncmFwaCcgJworCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8xICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA0IDUpCisJZG8KKwkJdGVzdF9jb21taXQgJGkgJiYKKwkJZ2l0IGJyYW5jaCBjb21taXRzLyRpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8yICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA2IDEwKQorCWRvCisJCXRlc3RfY29tbWl0ICRpICYmCisJCWdpdCBicmFuY2ggY29tbWl0cy8kaSB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvMiAmJgorCWdpdCBtZXJnZSBjb21taXRzLzQgJiYKKwlnaXQgYnJhbmNoIG1lcmdlLzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdHMvNCAmJgorCWdpdCBtZXJnZSBjb21taXRzLzYgJiYKKwlnaXQgYnJhbmNoIG1lcmdlLzIgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJZ3JhcGhfcmVhZF9leHBlY3QgMTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yayBhbmQgZmFpbCB0byBiYXNlIGEgY2hhaW4gb24gYSBjb21taXQtZ3JhcGggZmlsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtcmYgZm9yayAmJgorCWdpdCBjbG9uZSAuIGZvcmsgJiYKKwkoCisJCWNkIGZvcmsgJiYKKwkJcm0gLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJCWVjaG8gIiQocHdkKS8uLi8uZ2l0L29iamVjdHMiID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3RfY29tbWl0IG5ldy1jb21taXQgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXZlcmlmeV9jaGFpbl9maWxlc19leGlzdCAkZ3JhcGhkaXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0aHJlZSBtb3JlIGNvbW1pdHMsIHdyaXRlIGEgdGlwIGdyYXBoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXRzLzMgJiYKKwlnaXQgbWVyZ2UgbWVyZ2UvMSAmJgorCWdpdCBtZXJnZSBjb21taXRzLzUgJiYKKwlnaXQgbWVyZ2UgbWVyZ2UvMiAmJgorCWdpdCBicmFuY2ggbWVyZ2UvMyAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRpbmZvZGlyL2NvbW1pdC1ncmFwaCAmJgorCXRlc3RfcGF0aF9pc19maWxlICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGdyYXBoLWZpbGVzICYmCisJdmVyaWZ5X2NoYWluX2ZpbGVzX2V4aXN0ICRncmFwaGRpcgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ3NwbGl0IGNvbW1pdC1ncmFwaDogbWVyZ2UgMyB2cyAyJyBtZXJnZS8zIG1lcmdlLzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG9uZSBjb21taXQsIHdyaXRlIGEgdGlwIGdyYXBoJyAnCisJdGVzdF9jb21taXQgMTEgJiYKKwlnaXQgYnJhbmNoIGNvbW1pdHMvMTEgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkaW5mb2Rpci9jb21taXQtZ3JhcGggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJbHMgJGdyYXBoZGlyL2dyYXBoLSouZ3JhcGggPmdyYXBoLWZpbGVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBncmFwaC1maWxlcyAmJgorCXZlcmlmeV9jaGFpbl9maWxlc19leGlzdCAkZ3JhcGhkaXIKKycKKworZ3JhcGhfZ2l0X2JlaGF2aW9yICd0aHJlZS1sYXllciBjb21taXQtZ3JhcGg6IGNvbW1pdCAxMSB2cyA2JyBjb21taXRzLzExIGNvbW1pdHMvNgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgb25lIGNvbW1pdCwgd3JpdGUgYSBtZXJnZWQgZ3JhcGgnICcKKwl0ZXN0X2NvbW1pdCAxMiAmJgorCWdpdCBicmFuY2ggY29tbWl0cy8xMiAmJgorCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCXRlc3RfcGF0aF9pc19maWxlICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGdyYXBoLWZpbGVzICYmCisJdmVyaWZ5X2NoYWluX2ZpbGVzX2V4aXN0ICRncmFwaGRpcgorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ21lcmdlZCBjb21taXQtZ3JhcGg6IGNvbW1pdCAxMiB2cyA2JyBjb21taXRzLzEyIGNvbW1pdHMvNgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZm9yayBhbmQgY2hhaW4gYWNyb3NzIGFsdGVybmF0ZScgJworCWdpdCBjbG9uZSAuIGZvcmsgJiYKKwkoCisJCWNkIGZvcmsgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwkJcm0gLXJmICRncmFwaGRpciAmJgorCQllY2hvICIkKHB3ZCkvLi4vLmdpdC9vYmplY3RzIiA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0X2NvbW1pdCAxMyAmJgorCQlnaXQgYnJhbmNoIGNvbW1pdHMvMTMgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGdyYXBoLWZpbGVzICYmCisJCWdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPXRydWUgIHJldi1saXN0IEhFQUQgPmV4cGVjdCAmJgorCQlnaXQgLWMgY29yZS5jb21taXRHcmFwaD1mYWxzZSByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X2NvbW1pdCAxNCAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlIC0tc3BsaXQgLS1vYmplY3QtZGlyPS5naXQvb2JqZWN0cy8gJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGdyYXBoLWZpbGVzCisJKQorJworCitncmFwaF9naXRfYmVoYXZpb3IgJ2FsdGVybmF0ZTogY29tbWl0IDEzIHZzIDYnIGNvbW1pdHMvMTMgY29tbWl0cy82CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbWVyZ2Ugc3RyYWdldHkgY29uc3RhbnRzJyAnCisJZ2l0IGNsb25lIC4gbWVyZ2UtMiAmJgorCSgKKwkJY2QgbWVyZ2UtMiAmJgorCQlnaXQgY29uZmlnIGNvcmUuY29tbWl0R3JhcGggdHJ1ZSAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJdGVzdF9jb21taXQgMTQgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0IC0tc2l6ZS1tdWx0aXBsZT0yICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbgorCisJKSAmJgorCWdpdCBjbG9uZSAuIG1lcmdlLTEwICYmCisJKAorCQljZCBtZXJnZS0xMCAmJgorCQlnaXQgY29uZmlnIGNvcmUuY29tbWl0R3JhcGggdHJ1ZSAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJdGVzdF9jb21taXQgMTQgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0IC0tc2l6ZS1tdWx0aXBsZT0xMCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4gJiYKKwkJbHMgJGdyYXBoZGlyL2dyYXBoLSouZ3JhcGggPmdyYXBoLWZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgZ3JhcGgtZmlsZXMKKwkpICYmCisJZ2l0IGNsb25lIC4gbWVyZ2UtMTAtZXhwaXJlICYmCisJKAorCQljZCBtZXJnZS0xMC1leHBpcmUgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfY29tbWl0IDE1ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAtLXNpemUtbXVsdGlwbGU9MTAgLS1leHBpcmUtdGltZT0xOTgwLTAxLTAxICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQlscyAkZ3JhcGhkaXIvZ3JhcGgtKi5ncmFwaCA+Z3JhcGgtZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBncmFwaC1maWxlcworCSkgJiYKKwlnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiBtYXgtY29tbWl0cyAmJgorCSgKKwkJY2QgbWF4LWNvbW1pdHMgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmNvbW1pdEdyYXBoIHRydWUgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCXRlc3RfY29tbWl0IDE2ICYmCisJCXRlc3RfY29tbWl0IDE3ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAtLW1heC1jb21taXRzPTEgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWxzICRncmFwaGRpci9ncmFwaC0qLmdyYXBoID5ncmFwaC1maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGdyYXBoLWZpbGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgY29tbWl0LWdyYXBoLWNoYWluIGZpbGUgYWZ0ZXIgZmxhdHRlbmluZycgJworCWdpdCBjbG9uZSAuIGZsYXR0ZW4gJiYKKwkoCisJCWNkIGZsYXR0ZW4gJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiAmJgorCQlscyAkZ3JhcGhkaXIgPmdyYXBoLWZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgZ3JhcGgtZmlsZXMKKwkpCisnCisKK2NvcnJ1cHRfZmlsZSgpIHsKKwlmaWxlPSQxCisJcG9zPSQyCisJZGF0YT0iJHszOi1cMH0iCisJY2htb2QgYSt3ICIkZmlsZSIgJiYKKwlwcmludGYgIiRkYXRhIiB8IGRkIG9mPSIkZmlsZSIgYnM9MSBzZWVrPSIkcG9zIiBjb252PW5vdHJ1bmMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGhhc2hlcyBhbG9uZyBjaGFpbiwgZXZlbiBpbiBzaGFsbG93JyAnCisJZ2l0IGNsb25lIC0tbm8taGFyZGxpbmtzIC4gdmVyaWZ5ICYmCisJKAorCQljZCB2ZXJpZnkgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgJiYKKwkJYmFzZV9maWxlPSRncmFwaGRpci9ncmFwaC0kKGhlYWQgLW4gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluKS5ncmFwaCAmJgorCQljb3JydXB0X2ZpbGUgIiRiYXNlX2ZpbGUiICQodGVzdF9vaWQgc2hhbGxvdykgIlwwMSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1zaGFsbG93IDI+dGVzdF9lcnIgJiYKKwkJZ3JlcCAtdiAiXisiIHRlc3RfZXJyID5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiaW5jb3JyZWN0IGNoZWNrc3VtIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSAtLXNoYWxsb3cgZG9lcyBub3QgY2hlY2sgYmFzZSBjb250ZW50cycgJworCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIHZlcmlmeS1zaGFsbG93ICYmCisJKAorCQljZCB2ZXJpZnktc2hhbGxvdyAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAmJgorCQliYXNlX2ZpbGU9JGdyYXBoZGlyL2dyYXBoLSQoaGVhZCAtbiAxICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4pLmdyYXBoICYmCisJCWNvcnJ1cHRfZmlsZSAiJGJhc2VfZmlsZSIgMTAwMCAiXDAxIiAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAtLXNoYWxsb3cgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgMj50ZXN0X2VyciAmJgorCQlncmVwIC12ICJeKyIgdGVzdF9lcnIgPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJpbmNvcnJlY3QgY2hlY2tzdW0iIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBvbiBiYXNlIGdyYXBoIGNodW5rIGluY29ycmVjdCcgJworCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIGJhc2UtY2h1bmsgJiYKKwkoCisJCWNkIGJhc2UtY2h1bmsgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgJiYKKwkJYmFzZV9maWxlPSRncmFwaGRpci9ncmFwaC0kKHRhaWwgLW4gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluKS5ncmFwaCAmJgorCQljb3JydXB0X2ZpbGUgIiRiYXNlX2ZpbGUiICQodGVzdF9vaWQgYmFzZSkgIlwwMSIgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1zaGFsbG93IDI+dGVzdF9lcnIgJiYKKwkJZ3JlcCAtdiAiXisiIHRlc3RfZXJyID5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiY29tbWl0LWdyYXBoIGNoYWluIGRvZXMgbm90IG1hdGNoIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBhZnRlciBjb21taXQtZ3JhcGgtY2hhaW4gY29ycnVwdGlvbicgJworCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIHZlcmlmeS1jaGFpbiAmJgorCSgKKwkJY2QgdmVyaWZ5LWNoYWluICYmCisJCWNvcnJ1cHRfZmlsZSAiJGdyYXBoZGlyL2NvbW1pdC1ncmFwaC1jaGFpbiIgNjAgIkciICYmCisJCWdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IDI+dGVzdF9lcnIgJiYKKwkJZ3JlcCAtdiAiXisiIHRlc3RfZXJyID5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiaW52YWxpZCBjb21taXQtZ3JhcGggY2hhaW4iIGVyciAmJgorCQljb3JydXB0X2ZpbGUgIiRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4iIDYwICJBIiAmJgorCQlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAyPnRlc3RfZXJyICYmCisJCWdyZXAgLXYgIl4rIiB0ZXN0X2VyciA+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBmaW5kIGFsbCBjb21taXQtZ3JhcGggZmlsZXMiIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGFjcm9zcyBhbHRlcm5hdGVzJyAnCisJZ2l0IGNsb25lIC0tbm8taGFyZGxpbmtzIC4gdmVyaWZ5LWFsdCAmJgorCSgKKwkJY2QgdmVyaWZ5LWFsdCAmJgorCQlybSAtcmYgJGdyYXBoZGlyICYmCisJCWFsdGRpcj0iJChwd2QpLy4uLy5naXQvb2JqZWN0cyIgJiYKKwkJZWNobyAiJGFsdGRpciIgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1vYmplY3QtZGlyPSIkYWx0ZGlyLyIgJiYKKwkJdGVzdF9jb21taXQgZXh0cmEgJiYKKwkJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJCXRpcF9maWxlPSRncmFwaGRpci9ncmFwaC0kKHRhaWwgLW4gMSAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluKS5ncmFwaCAmJgorCQljb3JydXB0X2ZpbGUgIiR0aXBfZmlsZSIgMTAwICJcMDEiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQtZ3JhcGggdmVyaWZ5IC0tc2hhbGxvdyAyPnRlc3RfZXJyICYmCisJCWdyZXAgLXYgIl4rIiB0ZXN0X2VyciA+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImNvbW1pdC1ncmFwaCBoYXMgaW5jb3JyZWN0IGZhbm91dCB2YWx1ZSIgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgb2N0b3B1cyBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgY29tbWl0cy8xMCAmJgorCWdpdCBtZXJnZSBjb21taXRzLzMgY29tbWl0cy80ICYmCisJZ2l0IGJyYW5jaCBtZXJnZS9vY3RvcHVzICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAtLXNwbGl0ICYmCisJZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1wcm9ncmVzcyAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhIHdhcm5pbmcgZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyAkZ3JhcGhkaXIvY29tbWl0LWdyYXBoLWNoYWluCisnCisKK2dyYXBoX2dpdF9iZWhhdmlvciAnZ3JhcGggZXhpc3RzJyBtZXJnZS9vY3RvcHVzIGNvbW1pdHMvMTIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgYWNyb3NzIGFsdGVybmF0ZSB3aGVyZSBhbHRlcm5hdGUgaXMgbm90IHNwbGl0JyAnCisJZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSAtLXJlYWNoYWJsZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCAmJgorCWNwIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCAuICYmCisJZ2l0IGNsb25lIC0tbm8taGFyZGxpbmtzIC4gYWx0LXNwbGl0ICYmCisJKAorCQljZCBhbHQtc3BsaXQgJiYKKwkJcm0gLWYgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoICYmCisJCWVjaG8gIiQocHdkKSIvLi4vLmdpdC9vYmplY3RzID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJCXRlc3RfY29tbWl0IDE4ICYmCisJCWdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1yZWFjaGFibGUgLS1zcGxpdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxICRncmFwaGRpci9jb21taXQtZ3JhcGgtY2hhaW4KKwkpICYmCisJdGVzdF9jbXAgY29tbWl0LWdyYXBoIC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDAtc2VuZC1wYWNrLnNoIGIvdC90NTQwMC1zZW5kLXBhY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjg0NjE4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDAtc2VuZC1wYWNrLnNoCkBAIC0wLDAgKzEsMjk5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1NlZSB3aHkgcmV3aW5kaW5nIGhlYWQgYnJlYWtzIHNlbmQtcGFjaworCisnCisuIC4vdGVzdC1saWIuc2gKKworY250PTY0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X3RpY2sgJiYKKwlta2RpciBtb3phcnQgbW96YXJ0L2lzICYmCisJZWNobyAiQ29tbWl0ICMwIiA+bW96YXJ0L2lzL3BpbmsgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG1vemFydC9pcy9waW5rICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdD0kKGVjaG8gIkNvbW1pdCAjMCIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJemVybz0kY29tbWl0ICYmCisJcGFyZW50PSR6ZXJvICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgJGNudAorCWRvCisJICAgIGk9JCgoJGkrMSkpICYmCisJICAgIHRlc3RfdGljayAmJgorCSAgICBlY2hvICJDb21taXQgIyRpIiA+bW96YXJ0L2lzL3BpbmsgJiYKKwkgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBtb3phcnQvaXMvcGluayAmJgorCSAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJICAgIGNvbW1pdD0kKGVjaG8gIkNvbW1pdCAjJGkiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1wICRwYXJlbnQpICYmCisJICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvdGFncy9jb21taXQkaSAkY29tbWl0ICYmCisJICAgIHBhcmVudD0kY29tbWl0IHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRjb21taXQiICYmCisJZ2l0IGNsb25lIC4vLiB2aWN0aW0gJiYKKwkoIGNkIHZpY3RpbSAmJiBnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybiAmJiBnaXQgbG9nICkgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICIkemVybyIgJiYKKwlwYXJlbnQ9JHplcm8gJiYKKwlpPTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkY250CisJZG8KKwkgICAgaT0kKCgkaSsxKSkgJiYKKwkgICAgdGVzdF90aWNrICYmCisJICAgIGVjaG8gIlJlYmFzZSAjJGkiID5tb3phcnQvaXMvcGluayAmJgorCSAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG1vemFydC9pcy9waW5rICYmCisJICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkgICAgY29tbWl0PSQoZWNobyAiUmViYXNlICMkaSIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgJHBhcmVudCkgJiYKKwkgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy90YWdzL3JlYmFzZSRpICRjb21taXQgJiYKKwkgICAgcGFyZW50PSRjb21taXQgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJGNvbW1pdCIgJiYKKwllY2hvIFJlYmFzZSAmJgorCWdpdCBsb2cnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgdGhlIHNvdXJjZSByZXBvc2l0b3J5JyAnCisJZ2l0IHJlcGFjayAtYSAtZCAmJgorCWdpdCBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHRoZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5JyAnCisgICAgKAorCWNkIHZpY3RpbSAmJgorCWdpdCByZXBhY2sgLWEgLWQgJiYKKwlnaXQgcHJ1bmUKKyAgICApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSBwdXNoaW5nIHJld291bmQgaGVhZCB3aXRob3V0IC0tZm9yY2UnICcKKwlwdXNoZWRfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXZpY3RpbV9vcmlnPSQoY2QgdmljdGltICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi92aWN0aW0gbWFzdGVyICYmCisJdmljdGltX2hlYWQ9JChjZCB2aWN0aW0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHZpY3RpbV9oZWFkIiA9ICIkdmljdGltX29yaWciICYmCisJIyB0aGlzIHNob3VsZCB1cGRhdGUKKwlnaXQgc2VuZC1wYWNrIC0tZm9yY2UgLi92aWN0aW0gbWFzdGVyICYmCisJdmljdGltX2hlYWQ9JChjZCB2aWN0aW0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHZpY3RpbV9oZWFkIiA9ICIkcHVzaGVkX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggY2FuIGJlIHVzZWQgdG8gZGVsZXRlIGEgcmVmJyAnCisJKCBjZCB2aWN0aW0gJiYgZ2l0IGJyYW5jaCBleHRyYSBtYXN0ZXIgKSAmJgorCWdpdCBzZW5kLXBhY2sgLi92aWN0aW0gOmV4dHJhIG1hc3RlciAmJgorCSggY2QgdmljdGltICYmCisJICB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGV4dHJhICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIGRlbGV0aW5nIHB1c2ggd2l0aCBkZW55RGVsZXRlcycgJworCSgKKwkgICAgY2QgdmljdGltICYmCisJICAgIHRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGV4dHJhICYmCisJICAgIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55RGVsZXRlcyB0cnVlICYmCisJICAgIGdpdCBicmFuY2ggZXh0cmEgbWFzdGVyCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi92aWN0aW0gOmV4dHJhIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3Qgb3ZlcnJpZGUgZGVueURlbGV0ZXMgd2l0aCBnaXQgLWMgc2VuZC1wYWNrJyAnCisJKAorCQljZCB2aWN0aW0gJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgZXh0cmEgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlEZWxldGVzIHRydWUgJiYKKwkJZ2l0IGJyYW5jaCBleHRyYSBtYXN0ZXIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHJlY2VpdmUuZGVueURlbGV0ZXM9ZmFsc2UgXAorCQkJCQlzZW5kLXBhY2sgLi92aWN0aW0gOmV4dHJhIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBkZW55RGVsZXRlcyB3aXRoIGdpdCAtYyByZWNlaXZlLXBhY2snICcKKwkoCisJCWNkIHZpY3RpbSAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBleHRyYSAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueURlbGV0ZXMgdHJ1ZSAmJgorCQlnaXQgYnJhbmNoIGV4dHJhIG1hc3RlcgorCSkgJiYKKwlnaXQgc2VuZC1wYWNrIFwKKwkJLS1yZWNlaXZlLXBhY2s9ImdpdCAtYyByZWNlaXZlLmRlbnlEZWxldGVzPWZhbHNlIHJlY2VpdmUtcGFjayIgXAorCQkuL3ZpY3RpbSA6ZXh0cmEgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbnlOb25GYXN0Zm9yd2FyZHMgdHJ1bXBzIC0tZm9yY2UnICcKKwkoCisJICAgIGNkIHZpY3RpbSAmJgorCSAgICB0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBleHRyYSAmJgorCSAgICBnaXQgY29uZmlnIHJlY2VpdmUuZGVueU5vbkZhc3Rmb3J3YXJkcyB0cnVlCisJKSAmJgorCXZpY3RpbV9vcmlnPSQoY2QgdmljdGltICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLS1mb3JjZSAuL3ZpY3RpbSBtYXN0ZXJeOm1hc3RlciAmJgorCXZpY3RpbV9oZWFkPSQoY2QgdmljdGltICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiR2aWN0aW1fb3JpZyIgPSAiJHZpY3RpbV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZW5kLXBhY2sgLS1hbGwgc2VuZHMgYWxsIGJyYW5jaGVzJyAnCisJIyBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCAyIGJyYW5jaGVzIHdpdGggZGlmZmVyZW50CisJIyB2YWx1ZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2gKKwlnaXQgYnJhbmNoIG90aGVyLWJyYW5jaCBIRUFEXiAmJgorCisJZ2l0IGluaXQgLS1iYXJlIGFsbC5naXQgJiYKKwlnaXQgc2VuZC1wYWNrIC0tYWxsIGFsbC5naXQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmV4cGVjdCAmJgorCWdpdCAtQyBhbGwuZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1hbGwgZXhjbHVkZXMgcmVtb3RlLXRyYWNraW5nIGhpZXJhcmNoeScgJworCW1rZGlyIHBhcmVudCAmJgorCSgKKwkgICAgY2QgcGFyZW50ICYmCisJICAgIGdpdCBpbml0ICYmIDogPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gYWRkCisJKSAmJgorCWdpdCBjbG9uZSBwYXJlbnQgY2hpbGQgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmIGdpdCBwdXNoIC0tYWxsCisJKSAmJgorCSgKKwkgICAgY2QgcGFyZW50ICYmCisJICAgIHRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY2VpdmUtcGFjayBydW5zIGF1dG8tZ2MgaW4gcmVtb3RlIHJlcG8nICcKKwlybSAtcmYgcGFyZW50IGNoaWxkICYmCisJZ2l0IGluaXQgcGFyZW50ICYmCisJKAorCSAgICAjIFNldHVwIGEgcmVwbyB3aXRoIDIgcGFja3MKKwkgICAgY2QgcGFyZW50ICYmCisJICAgIGVjaG8gIlNvbWUgdGV4dCIgPmZpbGUudHh0ICYmCisJICAgIGdpdCBhZGQgLiAmJgorCSAgICBnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwkgICAgZ2l0IHJlcGFjayAtYWRsICYmCisJICAgIGVjaG8gIlNvbWUgbW9yZSB0ZXh0IiA+PmZpbGUudHh0ICYmCisJICAgIGdpdCBjb21taXQgLWEgLW0gIlNlY29uZCBjb21taXQiICYmCisJICAgIGdpdCByZXBhY2sKKwkpICYmCisJY3AgLVIgcGFyZW50IGNoaWxkICYmCisJKAorCSAgICAjIFNldCB0aGUgY2hpbGQgdG8gYXV0by1wYWNrIGlmIG1vcmUgdGhhbiBvbmUgcGFjayBleGlzdHMKKwkgICAgY2QgY2hpbGQgJiYKKwkgICAgZ2l0IGNvbmZpZyBnYy5hdXRvcGFja2xpbWl0IDEgJiYKKwkgICAgZ2l0IGNvbmZpZyBnYy5hdXRvZGV0YWNoIGZhbHNlICYmCisJICAgIGdpdCBicmFuY2ggdGVzdF9hdXRvX2djICYmCisJICAgICMgQW5kIGNyZWF0ZSBhIGZpbGUgdGhhdCBmb2xsb3dzIHRoZSB0ZW1wb3Jhcnkgb2JqZWN0IG5hbWluZworCSAgICAjIGNvbnZlbnRpb24gZm9yIHRoZSBhdXRvLWdjIHRvIHJlbW92ZQorCSAgICA6ID4uZ2l0L29iamVjdHMvdG1wX3Rlc3Rfb2JqZWN0ICYmCisJICAgIHRlc3QtdG9vbCBjaG10aW1lID0tMTIwOTYwMSAuZ2l0L29iamVjdHMvdG1wX3Rlc3Rfb2JqZWN0CisJKSAmJgorCSgKKwkgICAgY2QgcGFyZW50ICYmCisJICAgIGVjaG8gIkV2ZW4gbW9yZSB0ZXh0IiA+PmZpbGUudHh0ICYmCisJICAgIGdpdCBjb21taXQgLWEgLW0gIlRoaXJkIGNvbW1pdCIgJiYKKwkgICAgZ2l0IHNlbmQtcGFjayAuLi9jaGlsZCBIRUFEOnJlZnMvaGVhZHMvdGVzdF9hdXRvX2djCisJKSAmJgorCXRlc3QgISAtZSBjaGlsZC8uZ2l0L29iamVjdHMvdG1wX3Rlc3Rfb2JqZWN0CisnCisKK3Jld291bmRfcHVzaF9zZXR1cCgpIHsKKwlybSAtcmYgcGFyZW50IGNoaWxkICYmCisJbWtkaXIgcGFyZW50ICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZ2l0IGluaXQgJiYKKwkgICAgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJICAgIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuICYmCisJICAgIGVjaG8gdHdvID5maWxlICYmIGdpdCBjb21taXQgLWEgLW0gdHdvCisJKSAmJgorCWdpdCBjbG9uZSBwYXJlbnQgY2hpbGQgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmIGdpdCByZXNldCAtLWhhcmQgSEVBRF4KKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2hpbmcgZXhwbGljaXQgcmVmc3BlY3MgcmVzcGVjdHMgZm9yY2luZycgJworCXJld291bmRfcHVzaF9zZXR1cCAmJgorCXBhcmVudF9vcmlnPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYKKwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAuLi9wYXJlbnQgXAorCQlyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlcgorCSkgJiYKKwlwYXJlbnRfaGVhZD0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X29yaWciID0gIiRwYXJlbnRfaGVhZCIgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IFwKKwkgICAgICAgICtyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlcgorCSkgJiYKKwlwYXJlbnRfaGVhZD0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwljaGlsZF9oZWFkPSQoY2QgY2hpbGQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHBhcmVudF9oZWFkIiA9ICIkY2hpbGRfaGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyB3aWxkY2FyZCByZWZzcGVjcyByZXNwZWN0cyBmb3JjaW5nJyAnCisJcmV3b3VuZF9wdXNoX3NldHVwICYmCisJcGFyZW50X29yaWc9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCBcCisJICAgICAgICAicmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiIKKwkpICYmCisJcGFyZW50X2hlYWQ9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHBhcmVudF9vcmlnIiA9ICIkcGFyZW50X2hlYWQiICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCBcCisJICAgICAgICAiK3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyoiCisJKSAmJgorCXBhcmVudF9oZWFkPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCWNoaWxkX2hlYWQ9JChjZCBjaGlsZCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X2hlYWQiID0gIiRjaGlsZF9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZW55IHB1c2hpbmcgdG8gZGVsZXRlIGN1cnJlbnQgYnJhbmNoJyAnCisJcmV3b3VuZF9wdXNoX3NldHVwICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCA6cmVmcy9oZWFkcy9tYXN0ZXIgMj5lcnJzCisJKQorJworCitleHRyYWN0X3JlZl9hZHZlcnRpc2VtZW50ICgpIHsKKwlwZXJsIC1sbmUgJworCQkjIFxcIGlzIHRoZXJlIHRvIHNraXAgY2FwYWJpbGl0aWVzIGFmdGVyIFwwCisJCS9wdXNoPCAoW15cXF0rKS8gb3IgbmV4dDsKKwkJZXhpdCAwIGlmICQxIGVxICIwMDAwIjsKKwkJcHJpbnQgJDE7CisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWNlaXZlLXBhY2sgZGUtZHVwZXMgLmhhdmUgbGluZXMnICcKKwlnaXQgaW5pdCBzaGFyZWQgJiYKKwlnaXQgLUMgc2hhcmVkIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGJvdGggJiYKKwlnaXQgY2xvbmUgLXMgc2hhcmVkIGZvcmsgJiYKKwkoCisJCWNkIHNoYXJlZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgb25seS1zaGFyZWQgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG9ubHktc2hhcmVkICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZm9vIEhFQUQKKwkpICYmCisKKwkjIE5vdGFibGUgdGhpbmdzIGluIHRoaXMgZXhwZWN0YXRpb246CisJIyAgLSBsb2NhbCByZWZzIGFyZSBub3QgZGUtZHVwZWQKKwkjICAtIC5oYXZlIGRvZXMgbm90IGR1cGxpY2F0ZSBsb2NhbHMKKwkjICAtIC5oYXZlIGRvZXMgbm90IGR1cGxpY2F0ZSBpdHNlbGYKKwlsb2NhbD0kKGdpdCAtQyBmb3JrIHJldi1wYXJzZSBIRUFEKSAmJgorCXNoYXJlZD0kKGdpdCAtQyBzaGFyZWQgcmV2LXBhcnNlIG9ubHktc2hhcmVkKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSRsb2NhbCByZWZzL2hlYWRzL21hc3RlcgorCSRsb2NhbCByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKwkkbG9jYWwgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKwkkc2hhcmVkIC5oYXZlCisJRU9GCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSQocHdkKS90cmFjZSBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCSAgICBnaXQgcHVzaCBcCisJCS0tcmVjZWl2ZS1wYWNrPSJ1bnNldCBHSVRfVFJBQ0VfUEFDS0VUOyBnaXQtcmVjZWl2ZS1wYWNrIiBcCisJCWZvcmsgSEVBRDpmb28gJiYKKwlleHRyYWN0X3JlZl9hZHZlcnRpc2VtZW50IDx0cmFjZSA+cmVmcyAmJgorCXRlc3RfY21wIGV4cGVjdCByZWZzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwMS11cGRhdGUtaG9va3Muc2ggYi90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTZkNjlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwMS11cGRhdGUtaG9va3Muc2gKQEAgLTAsMCArMSwxNTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gTy4gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIHVwZGF0ZSBob29rIGluZnJhc3RydWN0dXJlLicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIFRoaXMgaXMgYSB0ZXN0LiA+YSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSAmJgorCXRyZWUwPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0MD0kKGVjaG8gc2V0dXAgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUwKSAmJgorCWVjaG8gV2UgaG9wZSBpdCB3b3Jrcy4gPmEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGEgJiYKKwl0cmVlMT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdDE9JChlY2hvIG1vZGlmeSB8IGdpdCBjb21taXQtdHJlZSAkdHJlZTEgLXAgJGNvbW1pdDApICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdDAgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3RvZmFpbCAkY29tbWl0MSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLi8uIHZpY3RpbS5naXQgJiYKKwlHSVRfRElSPXZpY3RpbS5naXQgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy90b2ZhaWwgJGNvbW1pdDEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkY29tbWl0MSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQwCisnCisKK2NhdCA+dmljdGltLmdpdC9ob29rcy9wcmUtcmVjZWl2ZSA8PCdFT0YnCisjIS9iaW4vc2gKK3ByaW50ZiAlcyAiJEAiID4+JEdJVF9ESVIvcHJlLXJlY2VpdmUuYXJncworY2F0IC0gPiRHSVRfRElSL3ByZS1yZWNlaXZlLnN0ZGluCitlY2hvIFNURE9VVCBwcmUtcmVjZWl2ZQorZWNobyBTVERFUlIgcHJlLXJlY2VpdmUgPiYyCitFT0YKK2NobW9kIHUreCB2aWN0aW0uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlCisKK2NhdCA+dmljdGltLmdpdC9ob29rcy91cGRhdGUgPDwnRU9GJworIyEvYmluL3NoCitlY2hvICIkQCIgPj4kR0lUX0RJUi91cGRhdGUuYXJncworcmVhZCB4OyBwcmludGYgJXMgIiR4IiA+JEdJVF9ESVIvdXBkYXRlLnN0ZGluCitlY2hvIFNURE9VVCB1cGRhdGUgJDEKK2VjaG8gU1RERVJSIHVwZGF0ZSAkMSA+JjIKK3Rlc3QgIiQxIiA9IHJlZnMvaGVhZHMvbWFzdGVyIHx8IGV4aXQKK0VPRgorY2htb2QgdSt4IHZpY3RpbS5naXQvaG9va3MvdXBkYXRlCisKK2NhdCA+dmljdGltLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwnRU9GJworIyEvYmluL3NoCitwcmludGYgJXMgIiRAIiA+PiRHSVRfRElSL3Bvc3QtcmVjZWl2ZS5hcmdzCitjYXQgLSA+JEdJVF9ESVIvcG9zdC1yZWNlaXZlLnN0ZGluCitlY2hvIFNURE9VVCBwb3N0LXJlY2VpdmUKK2VjaG8gU1RERVJSIHBvc3QtcmVjZWl2ZSA+JjIKK0VPRgorY2htb2QgdSt4IHZpY3RpbS5naXQvaG9va3MvcG9zdC1yZWNlaXZlCisKK2NhdCA+dmljdGltLmdpdC9ob29rcy9wb3N0LXVwZGF0ZSA8PCdFT0YnCisjIS9iaW4vc2gKK2VjaG8gIiRAIiA+PiRHSVRfRElSL3Bvc3QtdXBkYXRlLmFyZ3MKK3JlYWQgeDsgcHJpbnRmICVzICIkeCIgPiRHSVRfRElSL3Bvc3QtdXBkYXRlLnN0ZGluCitlY2hvIFNURE9VVCBwb3N0LXVwZGF0ZQorZWNobyBTVERFUlIgcG9zdC11cGRhdGUgPiYyCitFT0YKK2NobW9kIHUreCB2aWN0aW0uZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcHVzaCAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAtLWZvcmNlIC4vdmljdGltLmdpdCBcCisJCW1hc3RlciB0b2ZhaWwgPnNlbmQub3V0IDI+c2VuZC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlZCBhcyBleHBlY3RlZCcgJworCXRlc3QgJChHSVRfRElSPXZpY3RpbS5naXQgZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gJGNvbW1pdDEgJiYKKwl0ZXN0ICQoR0lUX0RJUj12aWN0aW0uZ2l0IGdpdCByZXYtcGFyc2UgdG9mYWlsKSA9ICRjb21taXQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2tzIHJhbicgJworCXRlc3QgLWYgdmljdGltLmdpdC9wcmUtcmVjZWl2ZS5hcmdzICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3ByZS1yZWNlaXZlLnN0ZGluICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3VwZGF0ZS5hcmdzICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3VwZGF0ZS5zdGRpbiAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wb3N0LXJlY2VpdmUuYXJncyAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wb3N0LXJlY2VpdmUuc3RkaW4gJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcG9zdC11cGRhdGUuYXJncyAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wb3N0LXVwZGF0ZS5zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmVjZWl2ZSBob29rIGlucHV0JyAnCisJKGVjaG8gJGNvbW1pdDAgJGNvbW1pdDEgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkgZWNobyAkY29tbWl0MSAkY29tbWl0MCByZWZzL2hlYWRzL3RvZmFpbAorCSkgfCB0ZXN0X2NtcCAtIHZpY3RpbS5naXQvcHJlLXJlY2VpdmUuc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGhvb2sgYXJndW1lbnRzJyAnCisJKGVjaG8gcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdDAgJGNvbW1pdDEgJiYKKwkgZWNobyByZWZzL2hlYWRzL3RvZmFpbCAkY29tbWl0MSAkY29tbWl0MAorCSkgfCB0ZXN0X2NtcCAtIHZpY3RpbS5naXQvdXBkYXRlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1yZWNlaXZlIGhvb2sgaW5wdXQnICcKKwllY2hvICRjb21taXQwICRjb21taXQxIHJlZnMvaGVhZHMvbWFzdGVyIHwKKwl0ZXN0X2NtcCAtIHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLnN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtdXBkYXRlIGhvb2sgYXJndW1lbnRzJyAnCisJZWNobyByZWZzL2hlYWRzL21hc3RlciB8CisJdGVzdF9jbXAgLSB2aWN0aW0uZ2l0L3Bvc3QtdXBkYXRlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIGhvb2sgc3RkaW4gaXMgL2Rldi9udWxsJyAnCisJdGVzdF9tdXN0X2JlX2VtcHR5IHZpY3RpbS5naXQvdXBkYXRlLnN0ZGluICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHZpY3RpbS5naXQvcG9zdC11cGRhdGUuc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsICotcmVjZWl2ZSBob29rIGFyZ3MgYXJlIGVtcHR5JyAnCisJdGVzdF9tdXN0X2JlX2VtcHR5IHZpY3RpbS5naXQvcHJlLXJlY2VpdmUuYXJncyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB2aWN0aW0uZ2l0L3Bvc3QtcmVjZWl2ZS5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmQtcGFjayBwcm9kdWNlZCBubyBvdXRwdXQnICcKKwl0ZXN0X211c3RfYmVfZW1wdHkgc2VuZC5vdXQKKycKKworY2F0IDw8RU9GID5leHBlY3QKK3JlbW90ZTogU1RET1VUIHByZS1yZWNlaXZlCityZW1vdGU6IFNUREVSUiBwcmUtcmVjZWl2ZQorcmVtb3RlOiBTVERPVVQgdXBkYXRlIHJlZnMvaGVhZHMvbWFzdGVyCityZW1vdGU6IFNUREVSUiB1cGRhdGUgcmVmcy9oZWFkcy9tYXN0ZXIKK3JlbW90ZTogU1RET1VUIHVwZGF0ZSByZWZzL2hlYWRzL3RvZmFpbAorcmVtb3RlOiBTVERFUlIgdXBkYXRlIHJlZnMvaGVhZHMvdG9mYWlsCityZW1vdGU6IGVycm9yOiBob29rIGRlY2xpbmVkIHRvIHVwZGF0ZSByZWZzL2hlYWRzL3RvZmFpbAorcmVtb3RlOiBTVERPVVQgcG9zdC1yZWNlaXZlCityZW1vdGU6IFNUREVSUiBwb3N0LXJlY2VpdmUKK3JlbW90ZTogU1RET1VUIHBvc3QtdXBkYXRlCityZW1vdGU6IFNUREVSUiBwb3N0LXVwZGF0ZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZW5kLXBhY2sgc3RkZXJyIGNvbnRhaW5zIGhvb2sgbWVzc2FnZXMnICcKKwlncmVwIF5yZW1vdGU6IHNlbmQuZXJyIHwgc2VkICJzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlY2VpdmUgaG9vayB0aGF0IGZvcmdldHMgdG8gcmVhZCBpdHMgaW5wdXQnICcKKwl3cml0ZV9zY3JpcHQgdmljdGltLmdpdC9ob29rcy9wcmUtcmVjZWl2ZSA8PC1cRU9GICYmCisJZXhpdCAwCisJRU9GCisJcm0gLWYgdmljdGltLmdpdC9ob29rcy91cGRhdGUgdmljdGltLmdpdC9ob29rcy9wb3N0LXVwZGF0ZSAmJgorCisJZm9yIHYgaW4gJCh0ZXN0X3NlcSAxMDAgOTk5KQorCWRvCisJCWdpdCBicmFuY2ggYnJhbmNoXyR2IG1hc3RlciB8fCByZXR1cm4KKwlkb25lICYmCisJZ2l0IHB1c2ggLi92aWN0aW0uZ2l0ICIrcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAyLXBvc3QtbWVyZ2UtaG9vay5zaCBiL3QvdDU0MDItcG9zdC1tZXJnZS1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlYjJmZmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDAyLXBvc3QtbWVyZ2UtaG9vay5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvc2ggRW5nbGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBwb3N0LW1lcmdlIGhvb2suJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gRGF0YSBmb3IgY29tbWl0MC4gPmEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgJiYKKwl0cmVlMD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdDA9JChlY2hvIHNldHVwIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlMCkgJiYKKwllY2hvIENoYW5nZWQgZGF0YSBmb3IgY29tbWl0MS4gPmEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGEgJiYKKwl0cmVlMT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdDE9JChlY2hvIG1vZGlmeSB8IGdpdCBjb21taXQtdHJlZSAkdHJlZTEgLXAgJGNvbW1pdDApICYmCisgICAgICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQwICYmCisJZ2l0IGNsb25lIC4vLiBjbG9uZTEgJiYKKwlHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSAmJgorCWdpdCBjbG9uZSAuLy4gY2xvbmUyICYmCisJR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEKKycKKworZm9yIGNsb25lIGluIDEgMjsgZG8KKyAgICBjYXQgPmNsb25lJHtjbG9uZX0vLmdpdC9ob29rcy9wb3N0LW1lcmdlIDw8J0VPRicKKyMhL2Jpbi9zaAorZWNobyAkQCA+PiAkR0lUX0RJUi9wb3N0LW1lcmdlLmFyZ3MKK0VPRgorICAgIGNobW9kIHUreCBjbG9uZSR7Y2xvbmV9Ly5naXQvaG9va3MvcG9zdC1tZXJnZQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LW1lcmdlIGRvZXMgbm90IHJ1biBmb3IgdXAtdG8tZGF0ZSAnICcKKyAgICAgICAgR0lUX0RJUj1jbG9uZTEvLmdpdCBnaXQgbWVyZ2UgJGNvbW1pdDAgJiYKKwkhIHRlc3QgLWYgY2xvbmUxLy5naXQvcG9zdC1tZXJnZS5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtbWVyZ2UgcnVucyBhcyBleHBlY3RlZCAnICcKKyAgICAgICAgR0lUX0RJUj1jbG9uZTEvLmdpdCBnaXQgbWVyZ2UgJGNvbW1pdDEgJiYKKwl0ZXN0IC1lIGNsb25lMS8uZ2l0L3Bvc3QtbWVyZ2UuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LW1lcmdlIGZyb20gbm9ybWFsIG1lcmdlIHJlY2VpdmVzIHRoZSByaWdodCBhcmd1bWVudCAnICcKKyAgICAgICAgZ3JlcCAwIGNsb25lMS8uZ2l0L3Bvc3QtbWVyZ2UuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LW1lcmdlIGZyb20gc3F1YXNoIG1lcmdlIHJ1bnMgYXMgZXhwZWN0ZWQgJyAnCisgICAgICAgIEdJVF9ESVI9Y2xvbmUyLy5naXQgZ2l0IG1lcmdlIC0tc3F1YXNoICRjb21taXQxICYmCisJdGVzdCAtZSBjbG9uZTIvLmdpdC9wb3N0LW1lcmdlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1tZXJnZSBmcm9tIHNxdWFzaCBtZXJnZSByZWNlaXZlcyB0aGUgcmlnaHQgYXJndW1lbnQgJyAnCisgICAgICAgIGdyZXAgMSBjbG9uZTIvLmdpdC9wb3N0LW1lcmdlLmFyZ3MKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAzLXBvc3QtY2hlY2tvdXQtaG9vay5zaCBiL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzOWIzYjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDAzLXBvc3QtY2hlY2tvdXQtaG9vay5zaApAQCAtMCwwICsxLDc2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvc2ggRW5nbGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBwb3N0LWNoZWNrb3V0IGhvb2suJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wb3N0LWNoZWNrb3V0IDw8LVxFT0YgJiYKKwllY2hvICIkQCIgPi5naXQvcG9zdC1jaGVja291dC5hcmdzCisJRU9GCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgcmViYXNlLW9uLW1lICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgcmVjZWl2ZXMgdGhlIHJpZ2h0IGFyZ3VtZW50cyB3aXRoIEhFQUQgdW5jaGFuZ2VkICcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXJlYWQgb2xkIG5ldyBmbGFnIDwuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyAmJgorCXRlc3QgJG9sZCA9ICRuZXcgJiYgdGVzdCAkZmxhZyA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCBhcmdzIGFyZSBjb3JyZWN0IHdpdGggZ2l0IGNoZWNrb3V0IC1iICcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MiICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldzEgJiYKKwlyZWFkIG9sZCBuZXcgZmxhZyA8LmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MgJiYKKwl0ZXN0ICRvbGQgPSAkbmV3ICYmIHRlc3QgJGZsYWcgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgcmVjZWl2ZXMgdGhlIHJpZ2h0IGFyZ3Mgd2l0aCBIRUFEIGNoYW5nZWQgJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyIgJiYKKwlnaXQgY2hlY2tvdXQgdHdvICYmCisJcmVhZCBvbGQgbmV3IGZsYWcgPC5naXQvcG9zdC1jaGVja291dC5hcmdzICYmCisJdGVzdCAkb2xkICE9ICRuZXcgJiYgdGVzdCAkZmxhZyA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCByZWNlaXZlcyB0aGUgcmlnaHQgYXJncyB3aGVuIG5vdCBzd2l0Y2hpbmcgYnJhbmNoZXMgJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIC0tIHRocmVlLnQgJiYKKwlyZWFkIG9sZCBuZXcgZmxhZyA8LmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MgJiYKKwl0ZXN0ICRvbGQgPSAkbmV3ICYmIHRlc3QgJGZsYWcgPSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgaXMgdHJpZ2dlcmVkIG9uIHJlYmFzZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZS10ZXN0IG1hc3RlciAmJgorCXJtIC1mIC5naXQvcG9zdC1jaGVja291dC5hcmdzICYmCisJZ2l0IHJlYmFzZSByZWJhc2Utb24tbWUgJiYKKwlyZWFkIG9sZCBuZXcgZmxhZyA8LmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MgJiYKKwl0ZXN0ICRvbGQgIT0gJG5ldyAmJiB0ZXN0ICRmbGFnID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNoZWNrb3V0IGlzIHRyaWdnZXJlZCBvbiByZWJhc2Ugd2l0aCBmYXN0LWZvcndhcmQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcG9zdC1jaGVja291dC5hcmdzIiAmJgorCWdpdCBjaGVja291dCAtYiBmZi1yZWJhc2UtdGVzdCByZWJhc2Utb24tbWVeICYmCisJcm0gLWYgLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MgJiYKKwlnaXQgcmViYXNlIHJlYmFzZS1vbi1tZSAmJgorCXJlYWQgb2xkIG5ldyBmbGFnIDwuZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncyAmJgorCXRlc3QgJG9sZCAhPSAkbmV3ICYmIHRlc3QgJGZsYWcgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgaG9vayBpcyB0cmlnZ2VyZWQgYnkgY2xvbmUnICcKKwlta2RpciAtcCB0ZW1wbGF0ZXMvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgdGVtcGxhdGVzL2hvb2tzL3Bvc3QtY2hlY2tvdXQgPDwtXEVPRiAmJgorCWVjaG8gIiRAIiA+IiRHSVRfRElSL3Bvc3QtY2hlY2tvdXQuYXJncyIKKwlFT0YKKwlnaXQgY2xvbmUgLS10ZW1wbGF0ZT10ZW1wbGF0ZXMgLiBjbG9uZTMgJiYKKwl0ZXN0IC1mIGNsb25lMy8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDQtdHJhY2tpbmctYnJhbmNoZXMuc2ggYi90L3Q1NDA0LXRyYWNraW5nLWJyYW5jaGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI3NjJmNDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDA0LXRyYWNraW5nLWJyYW5jaGVzLnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0cmFja2luZyBicmFuY2ggdXBkYXRlIGNoZWNrcyBmb3IgZ2l0IHB1c2gnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gMSAmJgorCWdpdCBicmFuY2ggYjEgJiYKKwlnaXQgYnJhbmNoIGIyICYmCisJZ2l0IGJyYW5jaCBiMyAmJgorCWdpdCBjbG9uZSAuIGFhICYmCisJZ2l0IGNoZWNrb3V0IGIxICYmCisJZWNobyBiMSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGIxICYmCisJZ2l0IGNoZWNrb3V0IGIyICYmCisJZWNobyBiMiA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcHVzaGFibGUgYnJhbmNoZXMnICcKKwljZCBhYSAmJgorCWIxPSQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vYjEpICYmCisJYjI9JChnaXQgcmV2LXBhcnNlIG9yaWdpbi9iMikgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjEgb3JpZ2luL2IxICYmCisJZWNobyBhYS1iMSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGFhLWIxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIyIG9yaWdpbi9iMiAmJgorCWVjaG8gYWEtYjIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhYS1iMiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGFhLW1hc3RlciA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGFhLW1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhlZC1zdWNjZXNzIHB1c2ggcmV0dXJucyBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiA6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRyYWNraW5nIGJyYW5jaGVzIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVyIHB1c2gnICcKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlcikiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0cmFja2luZyBicmFuY2hlcyBub3QgdXBkYXRlZCBmb3IgZmFpbGVkIHJlZnMnICcKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2IxKSIgPSAiJGIxIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vYjIpIiA9ICIkYjIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZWQgYnJhbmNoZXMgaGF2ZSB0aGVpciB0cmFja2luZyBicmFuY2hlcyByZW1vdmVkJyAnCisJZ2l0IHB1c2ggb3JpZ2luIDpiMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vYjEpIiA9ICJvcmlnaW4vYjEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FscmVhZHkgZGVsZXRlZCB0cmFja2luZyBicmFuY2hlcyBpZ25vcmVkJyAnCisJZ2l0IGJyYW5jaCAtZCAtciBvcmlnaW4vYjMgJiYKKwlnaXQgcHVzaCBvcmlnaW4gOmIzID5vdXRwdXQgMj4mMSAmJgorCSEgZ3JlcCAiXmVycm9yOiAiIG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDUtc2VuZC1wYWNrLXJld2luZC5zaCBiL3QvdDU0MDUtc2VuZC1wYWNrLXJld2luZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMzVmYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwNS1zZW5kLXBhY2stcmV3aW5kLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmb3JjZWQgcHVzaCB0byByZXBsYWNlIGNvbW1pdCB3ZSBkbyBub3QgaGF2ZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUxICYmIGdpdCBhZGQgZmlsZTEgJiYgdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYKKworCW1rZGlyIGFub3RoZXIgJiYgKAorCQljZCBhbm90aGVyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBmZXRjaCAtLXVwZGF0ZS1oZWFkLW9rIC4uIG1hc3RlcjptYXN0ZXIKKwkpICYmCisKKwk+ZmlsZTIgJiYgZ2l0IGFkZCBmaWxlMiAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbiBmb3JjZWQgcHVzaCBzaG91bGQgZGllIG5vdCBzZWdmYXVsdCcgJworCisJKAorCQljZCBhbm90aGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC4uIG1hc3RlcjptYXN0ZXIKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2VkIHB1c2ggc2hvdWxkIHN1Y2NlZWQnICcKKworCSgKKwkJY2QgYW5vdGhlciAmJgorCQlnaXQgcHVzaCAuLiArbWFzdGVyOm1hc3RlcgorCSkKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDYtcmVtb3RlLXJlamVjdHMuc2ggYi90L3Q1NDA2LXJlbW90ZS1yZWplY3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmMDZmOTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDA2LXJlbW90ZS1yZWplY3RzLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZW1vdGUgcHVzaCByZWplY3RzIGFyZSByZXBvcnRlZCBieSBjbGllbnQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy91cGRhdGUgPDwtXEVPRiAmJgorCWV4aXQgMQorCUVPRgorCWVjaG8gMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gMSAmJgorCWdpdCBjbG9uZSAuIGNoaWxkICYmCisJY2QgY2hpbGQgJiYKKwllY2hvIDIgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCByZXBvcnRzIGVycm9yJyAndGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggMj5zdGRlcnInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGl2aWR1YWwgcmVmIHJlcG9ydHMgZXJyb3InICdncmVwIHJlamVjdGVkIHN0ZGVycicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDA3LXBvc3QtcmV3cml0ZS1ob29rLnNoIGIvdC90NTQwNy1wb3N0LXJld3JpdGUtaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MDc1MGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwNy1wb3N0LXJld3JpdGUtaG9vay5zaApAQCAtMCwwICsxLDI2NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBUaG9tYXMgUmFzdAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBwb3N0LXJld3JpdGUgaG9vay4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBIGZvbyBBICYmCisJdGVzdF9jb21taXQgQiBmb28gQiAmJgorCXRlc3RfY29tbWl0IEMgZm9vIEMgJiYKKwl0ZXN0X2NvbW1pdCBEIGZvbyBEICYmCisJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCXRlc3RfY29tbWl0IEUgYmFyIEUgJiYKKwl0ZXN0X2NvbW1pdCBGIGZvbyBGICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCitta2RpciAuZ2l0L2hvb2tzCisKK2NhdCA+LmdpdC9ob29rcy9wb3N0LXJld3JpdGUgPDxFT0YKKyMhL2Jpbi9zaAorZWNobyBcJEAgPiAiJFRSQVNIX0RJUkVDVE9SWSIvcG9zdC1yZXdyaXRlLmFyZ3MKK2NhdCA+ICIkVFJBU0hfRElSRUNUT1JZIi9wb3N0LXJld3JpdGUuZGF0YQorRU9GCitjaG1vZCB1K3ggLmdpdC9ob29rcy9wb3N0LXJld3JpdGUKKworY2xlYXJfaG9va19pbnB1dCAoKSB7CisJcm0gLWYgcG9zdC1yZXdyaXRlLmFyZ3MgcG9zdC1yZXdyaXRlLmRhdGEKK30KKwordmVyaWZ5X2hvb2tfaW5wdXQgKCkgeworCXRlc3RfY21wIGV4cGVjdGVkLmFyZ3MgIiRUUkFTSF9ESVJFQ1RPUlkiL3Bvc3QtcmV3cml0ZS5hcmdzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuZGF0YSAiJFRSQVNIX0RJUkVDVE9SWSIvcG9zdC1yZXdyaXRlLmRhdGEKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdCAtLWFtZW5kJyAnCisJY2xlYXJfaG9va19pbnB1dCAmJgorCWVjaG8gIkQgbmV3IG1lc3NhZ2UiID4gbmV3bXNnICYmCisJb2xkc2hhPSQoZ2l0IHJldi1wYXJzZSBIRUFEXjApICYmCisJZ2l0IGNvbW1pdCAtRm5ld21zZyAtLWFtZW5kICYmCisJZWNobyBhbWVuZCA+IGV4cGVjdGVkLmFyZ3MgJiYKKwllY2hvICRvbGRzaGEgJChnaXQgcmV2LXBhcnNlIEhFQUReMCkgPiBleHBlY3RlZC5kYXRhICYmCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tcG9zdC1yZXdyaXRlJyAnCisJY2xlYXJfaG9va19pbnB1dCAmJgorCWVjaG8gIkQgbmV3IG1lc3NhZ2UgYWdhaW4iID4gbmV3bXNnICYmCisJZ2l0IGNvbW1pdCAtLW5vLXBvc3QtcmV3cml0ZSAtRm5ld21zZyAtLWFtZW5kICYmCisJdGVzdCAhIC1mIHBvc3QtcmV3cml0ZS5hcmdzICYmCisJdGVzdCAhIC1mIHBvc3QtcmV3cml0ZS5kYXRhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLS1hcHBseScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tYXBwbHkgLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtLWFwcGx5IC0tc2tpcCcgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tYXBwbHkgLS1vbnRvIEEgQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1za2lwICYmCisJZWNobyBEID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC0tYXBwbHkgLS1za2lwIHRoZSBsYXN0IG9uZScgJworCWdpdCByZXNldCAtLWhhcmQgRiAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tYXBwbHkgLS1vbnRvIEQgQSAmJgorCWdpdCByZWJhc2UgLS1za2lwICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEUpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSQoZ2l0IHJldi1wYXJzZSBGKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1tJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLW0gLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtbSAtLXNraXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtbSAtLW9udG8gQSBCICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwllY2hvIEQgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2Ugd2l0aCBpbXBsaWNpdCB1c2Ugb2YgbWVyZ2UgYmFja2VuZCcgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0ta2VlcC1lbXB0eSAtLW9udG8gQSBCICYmCisJZWNobyBDID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC0tc2tpcCB3aXRoIGltcGxpY2l0IHVzZSBvZiBtZXJnZSBiYWNrZW5kJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1rZWVwLWVtcHR5IC0tb250byBBIEIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tc2tpcCAmJgorCWVjaG8gRCA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCisjIEhlbHBlciB0byB3b3JrIGFyb3VuZCB0aGUgbGFjayBvZiBvbmUtc2hvdCBleHBvcnRpbmcgZm9yCisjIHRlc3RfbXVzdF9mYWlsIChhcyBpdCBpcyBhIHNoZWxsIGZ1bmN0aW9uKQordGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAoKSB7CisJKAorCQlGQUtFX0xJTkVTPSIkMSIgJiYKKwkJc2hpZnQgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAiJEAiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1pICh1bmNoYW5nZWQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfZmFpbF9pbnRlcmFjdGl2ZV9yZWJhc2UgIjEgMiIgLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtaSAoc2tpcCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAiMiIgLS1vbnRvIEEgQiAmJgorCWVjaG8gRCA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLWkgKHNxdWFzaCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAiMSBzcXVhc2ggMiIgLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1pIChmaXh1cCB3aXRob3V0IGNvbmZsaWN0KScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwlGQUtFX0xJTkVTPSIxIGZpeHVwIDIiIGdpdCByZWJhc2UgLWkgQiAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtaSAoZG91YmxlIGVkaXQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIiIGdpdCByZWJhc2UgLWkgQiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gc29tZXRoaW5nID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1pIChleGVjKScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZXhlY19mYWxzZSAyIiBnaXQgcmViYXNlIC1pIEIgJiYKKwllY2hvIHNvbWV0aGluZyA+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwkjIEZhaWxzIGJlY2F1c2Ugb2YgZXhlYyBmYWxzZQorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwOC1zZW5kLXBhY2stc3RkaW4uc2ggYi90L3Q1NDA4LXNlbmQtcGFjay1zdGRpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lODczN2RmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwOC1zZW5kLXBhY2stc3RkaW4uc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NlbmQtcGFjayAtLXN0ZGluIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK2NyZWF0ZV9yZWYgKCkgeworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwljb21taXQ9JChlY2hvICIkMSIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJZ2l0IHVwZGF0ZS1yZWYgIiQxIiAkY29tbWl0Cit9CisKK2NsZWFyX3JlbW90ZSAoKSB7CisJcm0gLXJmIHJlbW90ZS5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlLmdpdAorfQorCit2ZXJpZnlfcHVzaCAoKSB7CisJZ2l0IHJldi1wYXJzZSAiJDEiID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPXJlbW90ZS5naXQgcmV2LXBhcnNlICIkezI6LSQxfSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVmcycgJworCWNhdCA+cmVmcyA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9BCisJcmVmcy9oZWFkcy9DCisJcmVmcy90YWdzL0QKKwlyZWZzL2hlYWRzL0IKKwlyZWZzL3RhZ3MvRQorCUVPRgorCWZvciBpIGluICQoY2F0IHJlZnMpOyBkbworCQljcmVhdGVfcmVmICRpIHx8IHJldHVybiAxCisJZG9uZQorJworCisjIHNhbml0eSBjaGVjayBvdXIgc2V0dXAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMgb24gY21kbGluZScgJworCWNsZWFyX3JlbW90ZSAmJgorCWdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCAkKGNhdCByZWZzKSAmJgorCWZvciBpIGluICQoY2F0IHJlZnMpOyBkbworCQl2ZXJpZnlfcHVzaCAkaSB8fCByZXR1cm4gMQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcyBvdmVyIHN0ZGluJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZ2l0IHNlbmQtcGFjayByZW1vdGUuZ2l0IC0tc3RkaW4gPHJlZnMgJiYKKwlmb3IgaSBpbiAkKGNhdCByZWZzKTsgZG8KKwkJdmVyaWZ5X3B1c2ggJGkgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGxpbmVzIGFyZSBmdWxsIHJlZnNwZWNzJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZWNobyAiQTpvdGhlciIgPmlucHV0ICYmCisJZ2l0IHNlbmQtcGFjayByZW1vdGUuZ2l0IC0tc3RkaW4gPGlucHV0ICYmCisJdmVyaWZ5X3B1c2ggcmVmcy9oZWFkcy9BIHJlZnMvaGVhZHMvb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gbWl4ZWQgd2l0aCBjbWRsaW5lJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZWNobyBBID5pbnB1dCAmJgorCWdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCAtLXN0ZGluIEIgPGlucHV0ICYmCisJdmVyaWZ5X3B1c2ggQSAmJgorCXZlcmlmeV9wdXNoIEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY21kbGluZSByZWZzIHdyaXR0ZW4gaW4gb3JkZXInICcKKwljbGVhcl9yZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIHJlbW90ZS5naXQgQTpmb28gQjpmb28gJiYKKwl2ZXJpZnlfcHVzaCBBIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0ZGluIHJlZnMgY29tZSBhZnRlciBjbWRsaW5lJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZWNobyBBOmZvbyA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIHJlbW90ZS5naXQgLS1zdGRpbiBCOmZvbyA8aW5wdXQgJiYKKwl2ZXJpZnlfcHVzaCBCIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzcGVjcyBhbmQgLS1taXJyb3IgZG8gbm90IG1peCAoY21kbGluZSknICcKKwljbGVhcl9yZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIHJlbW90ZS5naXQgLS1taXJyb3IgJChjYXQgcmVmcykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmc3BlY3MgYW5kIC0tbWlycm9yIGRvIG5vdCBtaXggKHN0ZGluKScgJworCWNsZWFyX3JlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCAtLW1pcnJvciAtLXN0ZGluIDxyZWZzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwOS1jb2xvcml6ZS1yZW1vdGUtbWVzc2FnZXMuc2ggYi90L3Q1NDA5LWNvbG9yaXplLXJlbW90ZS1tZXNzYWdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDhmNDAxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwOS1jb2xvcml6ZS1yZW1vdGUtbWVzc2FnZXMuc2gKQEAgLTAsMCArMSwxMDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZW1vdGUgbWVzc2FnZXMgYXJlIGNvbG9yaXplZCBvbiB0aGUgY2xpZW50JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvdXBkYXRlIDw8LVxFT0YgJiYKKwllY2hvIGVycm9yOiBlcnJvcgorCWVjaG8gRVJST1I6IGFsc28gaGlnaGxpZ2h0ZWQKKwllY2hvIGhpbnQ6IGhpbnQKKwllY2hvIGhpbnRpbmc6IG5vdCBoaWdobGlnaHRlZAorCWVjaG8gc3VjY2Vzczogc3VjY2VzcworCWVjaG8gd2FybmluZzogd2FybmluZworCWVjaG8gcHJlZml4ZXJyb3I6IGVycm9yCisJZWNobyAiICIgImVycm9yOiBsZWFkaW5nIHNwYWNlIgorCWVjaG8gIiAgICAiCisJZWNobyBFcnIKKwllY2hvIFNVQ0NFU1MKKwlleGl0IDAKKwlFT0YKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIDEgJiYKKwlnaXQgY2xvbmUgLiBjaGlsZCAmJgorCSgKKwkJY2QgY2hpbGQgJiYKKwkJdGVzdF9jb21taXQgbWVzc2FnZTIgZmlsZSBjb250ZW50MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2V5d29yZHMnICcKKwlnaXQgLS1naXQtZGlyIGNoaWxkLy5naXQgLWMgY29sb3IucmVtb3RlPWFsd2F5cyBwdXNoIC1mIG9yaWdpbiBIRUFEOnJlZnMvaGVhZHMva2V5d29yZHMgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAiPEJPTEQ7UkVEPmVycm9yPFJFU0VUPjogZXJyb3IiIGRlY29kZWQgJiYKKwlncmVwICI8WUVMTE9XPmhpbnQ8UkVTRVQ+OiIgZGVjb2RlZCAmJgorCWdyZXAgIjxCT0xEO0dSRUVOPnN1Y2Nlc3M8UkVTRVQ+OiIgZGVjb2RlZCAmJgorCWdyZXAgIjxCT0xEO0dSRUVOPlNVQ0NFU1M8UkVTRVQ+IiBkZWNvZGVkICYmCisJZ3JlcCAiPEJPTEQ7WUVMTE9XPndhcm5pbmc8UkVTRVQ+OiIgZGVjb2RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aG9sZSB3b3JkcyBhdCBsaW5lIHN0YXJ0JyAnCisJZ2l0IC0tZ2l0LWRpciBjaGlsZC8uZ2l0IC1jIGNvbG9yLnJlbW90ZT1hbHdheXMgcHVzaCAtZiBvcmlnaW4gSEVBRDpyZWZzL2hlYWRzL3dob2xlLXdvcmRzIDI+b3V0cHV0ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dCA+ZGVjb2RlZCAmJgorCWdyZXAgIjxZRUxMT1c+aGludDxSRVNFVD46IiBkZWNvZGVkICYmCisJZ3JlcCAiaGludGluZzogbm90IGhpZ2hsaWdodGVkIiBkZWNvZGVkICYmCisJZ3JlcCAicHJlZml4ZXJyb3I6IGVycm9yIiBkZWNvZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IGxpbmUnICcKKwlnaXQgLUMgY2hpbGQgLWMgY29sb3IucmVtb3RlPWFsd2F5cyBwdXNoIC1mIG9yaWdpbiBIRUFEOnNob3J0LWxpbmUgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAicmVtb3RlOiBFcnIiIGRlY29kZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FzZS1pbnNlbnNpdGl2ZScgJworCWdpdCAtLWdpdC1kaXIgY2hpbGQvLmdpdCAtYyBjb2xvci5yZW1vdGU9YWx3YXlzIHB1c2ggLWYgb3JpZ2luIEhFQUQ6cmVmcy9oZWFkcy9jYXNlLWluc2Vuc2l0aXZlIDI+b3V0cHV0ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dCA+ZGVjb2RlZCAmJgorCWdyZXAgIjxCT0xEO1JFRD5lcnJvcjxSRVNFVD46IGVycm9yIiBkZWNvZGVkICYmCisJZ3JlcCAiPEJPTEQ7UkVEPkVSUk9SPFJFU0VUPjogYWxzbyBoaWdobGlnaHRlZCIgZGVjb2RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWFkaW5nIHNwYWNlJyAnCisJZ2l0IC0tZ2l0LWRpciBjaGlsZC8uZ2l0IC1jIGNvbG9yLnJlbW90ZT1hbHdheXMgcHVzaCAtZiBvcmlnaW4gSEVBRDpyZWZzL2hlYWRzL2xlYWRpbmctc3BhY2UgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAiICA8Qk9MRDtSRUQ+ZXJyb3I8UkVTRVQ+OiBsZWFkaW5nIHNwYWNlIiBkZWNvZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYWNlcyBvbmx5JyAnCisJZ2l0IC1DIGNoaWxkIC1jIGNvbG9yLnJlbW90ZT1hbHdheXMgcHVzaCAtZiBvcmlnaW4gSEVBRDpvbmx5LXNwYWNlIDI+b3V0cHV0ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dCA+ZGVjb2RlZCAmJgorCWdyZXAgInJlbW90ZTogICAgICIgZGVjb2RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb2xvcmluZyBmb3IgcmVkaXJlY3RlZCBvdXRwdXQnICcKKwlnaXQgLS1naXQtZGlyIGNoaWxkLy5naXQgcHVzaCAtZiBvcmlnaW4gSEVBRDpyZWZzL2hlYWRzL3JlZGlyZWN0ZWQtb3V0cHV0IDI+b3V0cHV0ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dCA+ZGVjb2RlZCAmJgorCWdyZXAgImVycm9yOiBlcnJvciIgZGVjb2RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY3VzdG9taXplZCBjb2xvcicgJworCWdpdCAtLWdpdC1kaXIgY2hpbGQvLmdpdCAtYyBjb2xvci5yZW1vdGU9YWx3YXlzIC1jIGNvbG9yLnJlbW90ZS5lcnJvcj1ibHVlIHB1c2ggLWYgb3JpZ2luIEhFQUQ6cmVmcy9oZWFkcy9jdXN0b21pemVkLWNvbG9yIDI+b3V0cHV0ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPG91dHB1dCA+ZGVjb2RlZCAmJgorCWdyZXAgIjxCTFVFPmVycm9yPFJFU0VUPjoiIGRlY29kZWQgJiYKKwlncmVwICI8Qk9MRDtHUkVFTj5zdWNjZXNzPFJFU0VUPjoiIGRlY29kZWQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBpbiBjdXN0b21pemVkIGNvbG9yJyAnCisJZ2l0IC0tZ2l0LWRpciBjaGlsZC8uZ2l0IC1jIGNvbG9yLnJlbW90ZT1hbHdheXMgLWMgY29sb3IucmVtb3RlLmVycm9yPWktYW0tbm90LWEtY29sb3IgcHVzaCAtZiBvcmlnaW4gSEVBRDpyZWZzL2hlYWRzL2Vycm9yLWN1c3RvbWl6ZWQtY29sb3IgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAiPEJPTEQ7R1JFRU4+c3VjY2VzczxSRVNFVD46IiBkZWNvZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhbGxiYWNrIHRvIGNvbG9yLnVpJyAnCisJZ2l0IC0tZ2l0LWRpciBjaGlsZC8uZ2l0IC1jIGNvbG9yLnVpPWFsd2F5cyBwdXNoIC1mIG9yaWdpbiBIRUFEOnJlZnMvaGVhZHMvZmFsbGJhY2stY29sb3ItdWkgMj5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5kZWNvZGVkICYmCisJZ3JlcCAiPEJPTEQ7UkVEPmVycm9yPFJFU0VUPjogZXJyb3IiIGRlY29kZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDEwLXJlY2VpdmUtcGFjay1hbHRlcm5hdGVzLnNoIGIvdC90NTQxMC1yZWNlaXZlLXBhY2stYWx0ZXJuYXRlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDBkMGRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTQxMC1yZWNlaXZlLXBhY2stYWx0ZXJuYXRlcy5zaApAQCAtMCwwICsxLDQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlY2VpdmUtcGFjayB3aXRoIGFsdGVybmF0ZSByZWYgZmlsdGVyaW5nJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBiYXNlICYmCisJZ2l0IGNsb25lIC1zIC0tYmFyZSAuIGZvcmsgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcHVibGljL2JyYW5jaCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBwdWJsaWMgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcHJpdmF0ZS9icmFuY2ggbWFzdGVyICYmCisJdGVzdF9jb21taXQgcHJpdmF0ZQorJworCitleHRyYWN0X2hhdmVzICgpIHsKKwlkZXBhY2tldGl6ZSB8IHBlcmwgLWxuZSAnL14oXFMrKSBcLmhhdmUvIGFuZCBwcmludCAkMScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb3JlLmFsdGVybmF0ZVJlZnNDb21tYW5kJyAnCisJd3JpdGVfc2NyaXB0IGZvcmsvYWx0ZXJuYXRlLXJlZnMgPDwtXEVPRiAmJgorCQlnaXQgLS1naXQtZGlyPSIkMSIgZm9yLWVhY2gtcmVmIFwKKwkJCS0tZm9ybWF0PSIlKG9iamVjdG5hbWUpIiBcCisJCQlyZWZzL2hlYWRzL3B1YmxpYy8KKwlFT0YKKwl0ZXN0X2NvbmZpZyAtQyBmb3JrIGNvcmUuYWx0ZXJuYXRlUmVmc0NvbW1hbmQgLi9hbHRlcm5hdGUtcmVmcyAmJgorCWdpdCByZXYtcGFyc2UgcHVibGljL2JyYW5jaCA+ZXhwZWN0ICYmCisJcHJpbnRmICIwMDAwIiB8IGdpdCByZWNlaXZlLXBhY2sgZm9yayA+YWN0dWFsICYmCisJZXh0cmFjdF9oYXZlcyA8YWN0dWFsID5hY3R1YWwuaGF2ZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmhhdmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29yZS5hbHRlcm5hdGVSZWZzUHJlZml4ZXMnICcKKwl0ZXN0X2NvbmZpZyAtQyBmb3JrIGNvcmUuYWx0ZXJuYXRlUmVmc1ByZWZpeGVzICJyZWZzL2hlYWRzL3ByaXZhdGUiICYmCisJZ2l0IHJldi1wYXJzZSBwcml2YXRlL2JyYW5jaCA+ZXhwZWN0ICYmCisJcHJpbnRmICIwMDAwIiB8IGdpdCByZWNlaXZlLXBhY2sgZm9yayA+YWN0dWFsICYmCisJZXh0cmFjdF9oYXZlcyA8YWN0dWFsID5hY3R1YWwuaGF2ZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmhhdmVzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMC1mZXRjaC1wYWNrLnNoIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhYTFhOTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTAwLWZldGNoLXBhY2suc2gKQEAgLTAsMCArMSw5ODIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIG11bHRpX2FjayBwYWNrIGZldGNoaW5nJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0IGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcGFpci4KKworIyBTb21lIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworCithZGQgKCkgeworCW5hbWU9JDEgJiYKKwl0ZXh0PSIkQCIgJiYKKwlicmFuY2g9JChlY2hvICRuYW1lIHwgc2VkIC1lICdzL15cKC5cKS4qJC9cMS8nKSAmJgorCXBhcmVudHM9IiIgJiYKKworCXNoaWZ0ICYmCisJd2hpbGUgdGVzdCAkMTsgZG8KKwkJcGFyZW50cz0iJHBhcmVudHMgLXAgJDEiICYmCisJCXNoaWZ0CisJZG9uZSAmJgorCisJZWNobyAiJHRleHQiID4gdGVzdC50eHQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRlc3QudHh0ICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCSMgbWFrZSBzdXJlIHRpbWVzdGFtcHMgYXJlIGluIGNvcnJlY3Qgb3JkZXIKKwl0ZXN0X3RpY2sgJiYKKwljb21taXQ9JChlY2hvICIkdGV4dCIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgJHBhcmVudHMpICYmCisJZXZhbCAiJG5hbWU9JGNvbW1pdDsgZXhwb3J0ICRuYW1lIiAmJgorCWdpdCB1cGRhdGUtcmVmICJyZWZzL2hlYWRzLyRicmFuY2giICIkY29tbWl0IiAmJgorCWV2YWwgJHticmFuY2h9VElQPSRjb21taXQKK30KKworcHVsbF90b19jbGllbnQgKCkgeworCW51bWJlcj0kMSAmJgorCWhlYWRzPSQyICYmCisJY291bnQ9JDMgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbnVtYmVyIHB1bGwiICcKKwkJKAorCQkJY2QgY2xpZW50ICYmCisJCQlnaXQgZmV0Y2gtcGFjayAtayAtdiAuLiAkaGVhZHMgJiYKKworCQkJY2FzZSAiJGhlYWRzIiBpbgorCQkJICAgICpBKikKKwkJCQkgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9BICIkQVRJUCI7OworCQkJZXNhYyAmJgorCQkJY2FzZSAiJGhlYWRzIiBpbiAqQiopCisJCQkgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9CICIkQlRJUCI7OworCQkJZXNhYyAmJgorCisJCQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy8kKAorCQkJCWVjaG8gJGhlYWRzIHwKKwkJCQlzZWQgLWUgInMvXlwoLlwpLiokL1wxLyIKKwkJCSkgJiYKKworCQkJZ2l0IGZzY2sgLS1mdWxsICYmCisKKwkJCW12IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiAuICYmCisJCQlwPSQobHMgLTEgcGFjay0qLnBhY2spICYmCisJCQlnaXQgdW5wYWNrLW9iamVjdHMgPCRwICYmCisJCQlnaXQgZnNjayAtLWZ1bGwgJiYKKworCQkJaWR4PSQoZWNobyBwYWNrLSouaWR4KSAmJgorCQkJcGFja19jb3VudD0kKGdpdCBzaG93LWluZGV4IDwkaWR4IHwgd2MgLWwpICYmCisJCQl0ZXN0ICRwYWNrX2NvdW50ID0gJGNvdW50ICYmCisJCQlybSAtZiBwYWNrLSoKKwkJKQorCScKK30KKworIyBIZXJlIGJlZ2lucyB0aGUgYWN0dWFsIHRlc3RpbmcKKworIyBBMSAtIC4uLiAtIEEyMCAtIEEyMQorIyAgICBcCisjICAgICAgQjEgIC0gICBCMiAtIC4uIC0gQjcwCisKKyMgY2xpZW50IHB1bGxzIEEyMCwgQjEuIFRoZW4gdHJhY2tzIG9ubHkgQi4gVGhlbiBwdWxscyBBLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGNsaWVudCAmJgorCSgKKwkJY2QgY2xpZW50ICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIudW5wYWNrbGltaXQgMAorCSkgJiYKKwlhZGQgQTEgJiYKKwlwcmV2PTEgJiYKKwljdXI9MiAmJgorCXdoaWxlIFsgJGN1ciAtbGUgMTAgXTsgZG8KKwkJYWRkIEEkY3VyICQoZXZhbCBlY2hvIFwkQSRwcmV2KSAmJgorCQlwcmV2PSRjdXIgJiYKKwkJY3VyPSQoKCRjdXIrMSkpCisJZG9uZSAmJgorCWFkZCBCMSAkQTEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL0EgIiRBVElQIiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvQiAiJEJUSVAiICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvQgorJworCitwdWxsX3RvX2NsaWVudCAxc3QgInJlZnMvaGVhZHMvQiByZWZzL2hlYWRzL0EiICQoKDExKjMpKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0IDFzdCBwdWxsIHNldHVwJyAnCisJYWRkIEExMSAkQTEwICYmCisJcHJldj0xICYmCisJY3VyPTIgJiYKKwl3aGlsZSBbICRjdXIgLWxlIDY1IF07IGRvCisJCWFkZCBCJGN1ciAkKGV2YWwgZWNobyBcJEIkcHJldikgJiYKKwkJcHJldj0kY3VyICYmCisJCWN1cj0kKCgkY3VyKzEpKQorCWRvbmUKKycKKworcHVsbF90b19jbGllbnQgMm5kICJyZWZzL2hlYWRzL0IiICQoKDY0KjMpKQorCitwdWxsX3RvX2NsaWVudCAzcmQgInJlZnMvaGVhZHMvQSIgJCgoMSozKSkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIGJyYW5jaCBjbG9uZScgJworCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggImZpbGU6Ly8kKHB3ZCkvLiIgc2luZ2xlYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBicmFuY2ggb2JqZWN0IGNvdW50JyAnCisJR0lUX0RJUj1zaW5nbGVicmFuY2gvLmdpdCBnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCWdyZXAgIl5pbi1wYWNrOiIgPiBjb3VudC5zaW5nbGVicmFuY2ggJiYKKwllY2hvICJpbi1wYWNrOiAxOTgiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGNvdW50LnNpbmdsZWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZ2l2ZW4gYnJhbmNoIGNsb25lJyAnCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLWJyYW5jaCBBICJmaWxlOi8vJChwd2QpLy4iIGJyYW5jaC1hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tZ2l0LWRpcj1icmFuY2gtYS8uZ2l0IHJldi1wYXJzZSBvcmlnaW4vQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IGRlcHRoIDEnICcKKwlnaXQgY2xvbmUgLS1uby1zaW5nbGUtYnJhbmNoIC0tZGVwdGggMSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93MCAmJgorCXRlc3QgIiQoZ2l0IC0tZ2l0LWRpcj1zaGFsbG93MC8uZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCkiID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IGRlcHRoIDEgd2l0aCBmc2NrJyAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBmZXRjaC5mc2Nrb2JqZWN0cyB0cnVlICYmCisJZ2l0IGNsb25lIC0tbm8tc2luZ2xlLWJyYW5jaCAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzBmc2NrICYmCisJdGVzdCAiJChnaXQgLS1naXQtZGlyPXNoYWxsb3cwZnNjay8uZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCkiID0gMSAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCBmZXRjaC5mc2Nrb2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93JyAnCisJZ2l0IGNsb25lIC0tbm8tc2luZ2xlLWJyYW5jaCAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IGRlcHRoIGNvdW50JyAnCisJdGVzdCAiJChnaXQgLS1naXQtZGlyPXNoYWxsb3cvLmdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQpIiA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5pbi1wYWNrOiAxMiIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCAocGFydCAyKScgJworCXNlZCAtZSAiL15pbi1wYWNrOi9kIiAtZSAiL15wYWNrczovZCIgLWUgIi9ec2l6ZS1wYWNrOi9kIiBcCisJICAgIC1lICIvOiAwJC9kIiBjb3VudC5zaGFsbG93ID4gY291bnRfb3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGNvdW50X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZnNjayAtLWZ1bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBmZXRjaCBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGV4cGVjdGVkJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cuMiAmJgorCWNtcCBjb3VudC5zaGFsbG93IGNvdW50LnNoYWxsb3cuMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBzYW1lIGRlcHRoIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0yCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGV4cGVjdGVkJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cuMyAmJgorCWNtcCBjb3VudC5zaGFsbG93IGNvdW50LnNoYWxsb3cuMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdHdvIG1vcmUnICcKKwlhZGQgQjY2ICRCNjUgJiYKKwlhZGQgQjY3ICRCNjYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IHB1bGwgLi4gQgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogNiIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdHdvIG1vcmUgKHBhcnQgMiknICcKKwlhZGQgQjY4ICRCNjcgJiYKKwlhZGQgQjY5ICRCNjgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVlcGVuaW5nIHB1bGwgaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBwdWxsIC0tZGVwdGggNCAuLiBCCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiAxMiIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWVwZW5pbmcgZmV0Y2ggaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoIDQgLi4gQTpBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiAxOCIgY291bnQuc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbyB3aXRoIG1pc3NpbmcgbWVyZ2UgYmFzZScgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aCA0IC4uIEEgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBGRVRDSF9IRUFECisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpdGlvbmFsIHNpbXBsZSBzaGFsbG93IGRlZXBlbmluZ3MnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGg9OCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xMCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBkZXB0aCBjb3VudCcgJworCXRlc3QgIiQoZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Ly5naXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEKSIgPSAxMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgcHJ1bmUgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdyAmJgorCWdyZXAgIl5jb3VudDogNTQiIGNvdW50LnNoYWxsb3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1uby1zaGFsbG93IG9uIGZ1bGwgcmVwbycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLW5vc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLWRlcHRoIC0tbm8tc2hhbGxvdycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1kZXB0aD0xIC0tbm9zaGFsbG93CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0dXJuIHNoYWxsb3cgdG8gY29tcGxldGUgcmVwb3NpdG9yeScgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2ggLS11bnNoYWxsb3cgJiYKKwkJISB0ZXN0IC1mIC5naXQvc2hhbGxvdyAmJgorCQlnaXQgZnNjayAtLWZ1bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgd2l0aG91dCAtLW5vLXNpbmdsZS1icmFuY2gnICcKKwlnaXQgY2xvbmUgLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3cyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93MiAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93MiAmJgorCWdyZXAgIl5pbi1wYWNrOiAzIiBjb3VudC5zaGFsbG93MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IHdpdGggLS1icmFuY2gnICcKKwlnaXQgY2xvbmUgLS1kZXB0aCAxIC0tYnJhbmNoIEEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBvYmplY3QgY291bnQnICcKKwllY2hvICJpbi1wYWNrOiAzIiA+IGNvdW50My5leHBlY3RlZCAmJgorCUdJVF9ESVI9c2hhbGxvdzMvLmdpdCBnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCWdyZXAgIl5pbi1wYWNrIiA+IGNvdW50My5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBjb3VudDMuZXhwZWN0ZWQgY291bnQzLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IHdpdGggZGV0YWNoZWQgSEVBRCcgJworCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBjbG9uZSAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzUgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCUdJVF9ESVI9c2hhbGxvdzUvLmdpdCBnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4gPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgcHVsbGluZyB0YWdzJyAnCisJZ2l0IHRhZyAtYSAtbSBBIFRBR0ExIEEgJiYKKwlnaXQgdGFnIC1hIC1tIEIgVEFHQjEgQiAmJgorCWdpdCB0YWcgVEFHQTIgQSAmJgorCWdpdCB0YWcgVEFHQjIgQiAmJgorCWdpdCBjbG9uZSAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzYgJiYKKworCWNhdCA+dGFnbGlzdC5leHBlY3RlZCA8PFxFT0YgJiYKK1RBR0IxCitUQUdCMgorRU9GCisJR0lUX0RJUj1zaGFsbG93Ni8uZ2l0IGdpdCB0YWcgLWwgPnRhZ2xpc3QuYWN0dWFsICYmCisJdGVzdF9jbXAgdGFnbGlzdC5leHBlY3RlZCB0YWdsaXN0LmFjdHVhbCAmJgorCisJZWNobyAiaW4tcGFjazogNCIgPiBjb3VudDYuZXhwZWN0ZWQgJiYKKwlHSVRfRElSPXNoYWxsb3c2Ly5naXQgZ2l0IGNvdW50LW9iamVjdHMgLXYgfAorCQlncmVwICJeaW4tcGFjayIgPiBjb3VudDYuYWN0dWFsICYmCisJdGVzdF9jbXAgY291bnQ2LmV4cGVjdGVkIGNvdW50Ni5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhbGxvdyBjbG9uaW5nIHNpbmdsZSB0YWcnICcKKwlnaXQgY2xvbmUgLS1kZXB0aCAxIC0tYnJhbmNoPVRBR0IxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3c3ICYmCisJY2F0ID50YWdsaXN0LmV4cGVjdGVkIDw8XEVPRiAmJgorVEFHQjEKK1RBR0IyCitFT0YKKwlHSVRfRElSPXNoYWxsb3c3Ly5naXQgZ2l0IHRhZyAtbCA+dGFnbGlzdC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0YWdsaXN0LmV4cGVjdGVkIHRhZ2xpc3QuYWN0dWFsICYmCisKKwllY2hvICJpbi1wYWNrOiA0IiA+IGNvdW50Ny5leHBlY3RlZCAmJgorCUdJVF9ESVI9c2hhbGxvdzcvLmdpdCBnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCWdyZXAgIl5pbi1wYWNrIiA+IGNvdW50Ny5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBjb3VudDcuZXhwZWN0ZWQgY291bnQ3LmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IHdpdGggcGFja2VkIHJlZnMnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IGNsb25lIC0tZGVwdGggMSAtLWJyYW5jaCBBICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3c4ICYmCisJZWNobyAiaW4tcGFjazogNCIgPiBjb3VudDguZXhwZWN0ZWQgJiYKKwlHSVRfRElSPXNoYWxsb3c4Ly5naXQgZ2l0IGNvdW50LW9iamVjdHMgLXYgfAorCQlncmVwICJeaW4tcGFjayIgPiBjb3VudDguYWN0dWFsICYmCisJdGVzdF9jbXAgY291bnQ4LmV4cGVjdGVkIGNvdW50OC5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggaW4gc2hhbGxvdyByZXBvIHVucmVhY2hhYmxlIHNoYWxsb3cgb2JqZWN0cycgJworCSgKKwkJZ2l0IGNsb25lIC0tYmFyZSAtLWJyYW5jaCBCIC0tc2luZ2xlLWJyYW5jaCAiZmlsZTovLyQocHdkKS8uIiBuby1yZWZsb2cgJiYKKwkJZ2l0IGNsb25lIC0tZGVwdGggMSAiZmlsZTovLyQocHdkKS9uby1yZWZsb2ciIHNoYWxsb3c5ICYmCisJCWNkIG5vLXJlZmxvZyAmJgorCQlnaXQgdGFnIC1kIFRBR0IxIFRBR0IyICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvQiBCfn4gJiYKKwkJZ2l0IGdjIC0tcHJ1bmU9bm93ICYmCisJCWNkIC4uL3NoYWxsb3c5ICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJZ2l0IGZzY2sgLS1uby1kYW5nbGluZworCSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNyZWF0aW5nIG5ldyBzaGFsbG93IHJvb3QnICcKKwkoCisJCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93MTAgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGVtcHR5ICYmCisJCWNkIHNoYWxsb3cxMCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xIC0tcHJvZ3Jlc3MgMj5hY3R1YWwgJiYKKwkJIyBUaGlzIHNob3VsZCBmZXRjaCBvbmx5IHRoZSBlbXB0eSBjb21taXQsIG5vIHRyZWUgb3IKKwkJIyBibG9iIG9iamVjdHMKKwkJdGVzdF9pMThuZ3JlcCAicmVtb3RlOiBUb3RhbCAxIiBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3RzIGZvciB0aGUgLS1zdGRpbiBwYXJhbWV0ZXInICcKKwlmb3IgaGVhZCBpbiBDIEQgRSBGCisJZG8KKwkJYWRkICRoZWFkCisJZG9uZSAmJgorCWZvciBoZWFkIGluIEEgQiBDIEQgRSBGCisJZG8KKwkJZ2l0IHRhZyAkaGVhZCAkaGVhZAorCWRvbmUgJiYKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlyZWZzL2hlYWRzL0MKKwlyZWZzL2hlYWRzL0EKKwlyZWZzL2hlYWRzL0QKKwlyZWZzL3RhZ3MvQworCXJlZnMvaGVhZHMvQgorCXJlZnMvdGFncy9BCisJcmVmcy9oZWFkcy9FCisJcmVmcy90YWdzL0IKKwlyZWZzL3RhZ3MvRQorCXJlZnMvdGFncy9ECisJRU9GCisJc29ydCA8aW5wdXQgPmV4cGVjdCAmJgorCSgKKwkJZWNobyByZWZzL2hlYWRzL0UgJiYKKwkJZWNobyByZWZzL3RhZ3MvRSAmJgorCQljYXQgaW5wdXQKKwkpID5pbnB1dC5kdXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZmV0Y2ggcmVmcyBmcm9tIGNtZGxpbmUgdlsxMl0nICcKKwljcCAtciBjbGllbnQgY2xpZW50MCAmJgorCWNwIC1yIGNsaWVudCBjbGllbnQxICYmCisJY3AgLXIgY2xpZW50IGNsaWVudDIKKycKKworZm9yIHZlcnNpb24gaW4gJycgMCAxIDIKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHJvdG9jb2wudmVyc2lvbj0kdmVyc2lvbiBmZXRjaCByZWZzIGZyb20gY21kbGluZSIgIgorCQkoCisJCQljZCBjbGllbnQkdmVyc2lvbiAmJgorCQkJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0kdmVyc2lvbiBnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC4uIFwkKGNhdCAuLi9pbnB1dCkKKwkJKSA+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+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCUI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwlnaXQgdGFnIC1hIC1tIHRhZzIgdGFnMiAkQiAmJgorCVM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdCcgJworY2F0IC0gPDxFT0YgPmV4cGVjdAord2FudCAkQgord2FudCAkUworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIEIsIFMgKGNvbW1pdCBhbmQgdGFnIDogMSBjb25uZWN0aW9uKScgJworCXJtIC1mICRVICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJR0lUX1RSQUNFX1BBQ0tFVD0kVVBBVEggZ2l0IGZldGNoICYmCisJCXRlc3QgJEIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL21hc3RlcikgJiYKKwkJdGVzdCAkQiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcyXjApICYmCisJCXRlc3QgJFMgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMikKKwkpICYmCisJZ2V0X25lZWRzICRVID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdCcgJworY2F0IC0gPDxFT0YgPmV4cGVjdAord2FudCAkQgord2FudCAkUworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBjbG9uZSBmZXRjaCBtYXN0ZXIgYW5kIHRhZ3MnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBjYXQgJiYKKwlybSAtZiAkVSAmJgorCSgKKwkJbWtkaXIgY2xvbmUyICYmCisJCWNkIGNsb25lMiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLi4gJiYKKwkJR0lUX1RSQUNFX1BBQ0tFVD0kVVBBVEggZ2l0IGZldGNoICYmCisJCXRlc3QgJEIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL21hc3RlcikgJiYKKwkJdGVzdCAkUyA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcyKSAmJgorCQl0ZXN0ICRCID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzJeMCkgJiYKKwkJdGVzdCAkVCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcxKSAmJgorCQl0ZXN0ICRBID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzFeMCkKKwkpICYmCisJZ2V0X25lZWRzICRVID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNC1mZXRjaC1yZWNlaXZlLXN0cmljdC5zaCBiL3QvdDU1MDQtZmV0Y2gtcmVjZWl2ZS1zdHJpY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjQ1YjRjNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDQtZmV0Y2gtcmVjZWl2ZS1zdHJpY3Quc2gKQEAgLTAsMCArMSwzNTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaC9yZWNlaXZlIHN0cmljdCBtb2RlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFuZCBpbmplY3QgImNvcnJ1cHQgb3IgbWlzc2luZyIgb2JqZWN0JyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCWVjaG8gaGVsbG8gPmdyZWV0aW5ncyAmJgorCWdpdCBhZGQgZ3JlZXRpbmdzICYmCisJZ2l0IGNvbW1pdCAtbSBncmVldGluZ3MgJiYKKworCVM9JChnaXQgcmV2LXBhcnNlIDpncmVldGluZ3MgfCBzZWQgLWUgInN8Xi4ufCYvfCIpICYmCisJWD0kKGVjaG8gYnllIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gfCBzZWQgLWUgInN8Xi4ufCYvfCIpICYmCisJZWNobyAkUyA+UyAmJgorCWVjaG8gJFggPlggJiYKKwljcCAuZ2l0L29iamVjdHMvJFMgLmdpdC9vYmplY3RzLyRTLmJhY2sgJiYKKwltdiAtZiAuZ2l0L29iamVjdHMvJFggLmdpdC9vYmplY3RzLyRTICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRob3V0IHN0cmljdCcgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIGZldGNoLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uLy5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoICFmZXRjaC5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIGZldGNoLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgdHJ1ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4vLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggZmV0Y2guZnNja29iamVjdHMnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyB0cnVlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uLy5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIHRyYW5zZmVyLmZzY2tvYmplY3RzJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBpbml0IGRzdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgdHJ1ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4vLmdpdCBtYXN0ZXIKKwkpCisnCisKK2NhdCA+ZXhwIDw8RU9GCitUbyBkc3QKKyEJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy90ZXN0CVtyZW1vdGUgcmVqZWN0ZWRdIChtaXNzaW5nIG5lY2Vzc2FyeSBvYmplY3RzKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aG91dCBzdHJpY3QnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyBmYWxzZSAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIGZhbHNlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCAhcmVjZWl2ZS5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci5mc2Nrb2JqZWN0cyB0cnVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK2NhdCA+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+NDpyZWZzL3JlbW90ZXMvZnJvdHovbmV3JwkJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgcHVzaCAnSEVBRCcKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnSEVBRCcKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyBuaXRmb2wnCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8gbml0Zm9sJwkJCQlpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBwdXNoICdIRUFEOicJCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnSEVBRDonCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8gbml0Zm9sOicJCQkJaW52YWxpZAordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLyBuaXRmb2w6JwkJCWludmFsaWQKKwordGVzdF9yZWZzcGVjIHB1c2ggJzpyZWZzL3JlbW90ZXMvZnJvdHovZGVsZXRlbWUnCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJzpyZWZzL3JlbW90ZXMvZnJvdHovSEVBRC10by1tZScKK3Rlc3RfcmVmc3BlYyBwdXNoICc6cmVmcy9yZW1vdGVzL2Zyb3R6L2RlbGV0ZSBtZScJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnOnJlZnMvcmVtb3Rlcy9mcm90ei9IRUFEIHRvIG1lJwkJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKi1ibGFoJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKi1ibGFoJworCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJworCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKi8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8qLyovZm9yLWxpbnVzOnJlZnMvcmVtb3Rlcy9taW5lLyonIGludmFsaWQKKwordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLypnKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicgaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKmcqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicKKworZ29vZD0kKHByaW50ZiAnXDMwM1wyMDQnKQordGVzdF9yZWZzcGVjIGZldGNoICJyZWZzL2hlYWRzLyR7Z29vZH0iCitiYWQ9JChwcmludGYgJ1wwMTF0YWInKQordGVzdF9yZWZzcGVjIGZldGNoICJyZWZzL2hlYWRzLyR7YmFkfSIJCQkJaW52YWxpZAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTItbHMtcmVtb3RlLnNoIGIvdC90NTUxMi1scy1yZW1vdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDRiMzU0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTItbHMtcmVtb3RlLnNoCkBAIC0wLDAgKzEsMzQzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLXJlbW90ZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBtYXJrICYmCisJZ2l0IHRhZyBtYXJrMS4xICYmCisJZ2l0IHRhZyBtYXJrMS4yICYmCisJZ2l0IHRhZyBtYXJrMS4xMCAmJgorCWdpdCBzaG93LXJlZiAtLXRhZ3MgLWQgfCBzZWQgLWUgInMvIC8JLyIgPmV4cGVjdGVkLnRhZyAmJgorCSgKKwkJZWNobyAiJChnaXQgcmV2LXBhcnNlIEhFQUQpCUhFQUQiICYmCisJCWdpdCBzaG93LXJlZiAtZAl8IHNlZCAtZSAicy8gLwkvIgorCSkgPmV4cGVjdGVkLmFsbCAmJgorCisJZ2l0IHJlbW90ZSBhZGQgc2VsZiAiJChwd2QpLy5naXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSAtLXRhZ3MgLmdpdCcgJworCWdpdCBscy1yZW1vdGUgLS10YWdzIC5naXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnRhZyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIC5naXQnICcKKwlnaXQgbHMtcmVtb3RlIC5naXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmFsbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIC0tdGFncyBzZWxmJyAnCisJZ2l0IGxzLXJlbW90ZSAtLXRhZ3Mgc2VsZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudGFnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgc2VsZicgJworCWdpdCBscy1yZW1vdGUgc2VsZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS1zb3J0PSJ2ZXJzaW9uOnJlZm5hbWUiIC0tdGFncyBzZWxmJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIG1hcmspCXJlZnMvdGFncy9tYXJrCisJJChnaXQgcmV2LXBhcnNlIG1hcmsxLjEpCXJlZnMvdGFncy9tYXJrMS4xCisJJChnaXQgcmV2LXBhcnNlIG1hcmsxLjIpCXJlZnMvdGFncy9tYXJrMS4yCisJJChnaXQgcmV2LXBhcnNlIG1hcmsxLjEwKQlyZWZzL3RhZ3MvbWFyazEuMTAKKwlFT0YKKwlnaXQgbHMtcmVtb3RlIC0tc29ydD0idmVyc2lvbjpyZWZuYW1lIiAtLXRhZ3Mgc2VsZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS1zb3J0PSItdmVyc2lvbjpyZWZuYW1lIiAtLXRhZ3Mgc2VsZicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBtYXJrMS4xMCkJcmVmcy90YWdzL21hcmsxLjEwCisJJChnaXQgcmV2LXBhcnNlIG1hcmsxLjIpCXJlZnMvdGFncy9tYXJrMS4yCisJJChnaXQgcmV2LXBhcnNlIG1hcmsxLjEpCXJlZnMvdGFncy9tYXJrMS4xCisJJChnaXQgcmV2LXBhcnNlIG1hcmspCXJlZnMvdGFncy9tYXJrCisJRU9GCisJZ2l0IGxzLXJlbW90ZSAtLXNvcnQ9Ii12ZXJzaW9uOnJlZm5hbWUiIC0tdGFncyBzZWxmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSAtLXNvcnQ9Ii1yZWZuYW1lIiAtLXRhZ3Mgc2VsZicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBtYXJrMS4yKQlyZWZzL3RhZ3MvbWFyazEuMgorCSQoZ2l0IHJldi1wYXJzZSBtYXJrMS4xMCkJcmVmcy90YWdzL21hcmsxLjEwCisJJChnaXQgcmV2LXBhcnNlIG1hcmsxLjEpCXJlZnMvdGFncy9tYXJrMS4xCisJJChnaXQgcmV2LXBhcnNlIG1hcmspCXJlZnMvdGFncy9tYXJrCisJRU9GCisJZ2l0IGxzLXJlbW90ZSAtLXNvcnQ9Ii1yZWZuYW1lIiAtLXRhZ3Mgc2VsZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWVzIHdoZW4gbm8gcmVtb3RlIHNwZWNpZmllZCBhbmQgbm8gZGVmYXVsdCByZW1vdGVzIGZvdW5kJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLXJlbW90ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgIm9yaWdpbiIgd2hlbiBubyByZW1vdGUgc3BlY2lmaWVkJyAnCisJVVJMPSIkKHB3ZCkvLmdpdCIgJiYKKwllY2hvICJGcm9tICRVUkwiID5leHBfZXJyICYmCisKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gIiRVUkwiICYmCisJZ2l0IGxzLXJlbW90ZSAyPmFjdHVhbF9lcnIgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwX2VyciBhY3R1YWxfZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdXBwcmVzcyAiRnJvbSA8dXJsPiIgd2l0aCAtcScgJworCWdpdCBscy1yZW1vdGUgLXEgMj5hY3R1YWxfZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9jbXAgZXhwX2VyciBhY3R1YWxfZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBicmFuY2guPG5hbWU+LnJlbW90ZSBpZiBwb3NzaWJsZScgJworCSMKKwkjIFRlc3QgdGhhdCB3ZSBhcmUgaW5kZWVkIHVzaW5nIGJyYW5jaC48bmFtZT4ucmVtb3RlLCBub3QgIm9yaWdpbiIsIGV2ZW4KKwkjIHRob3VnaCB0aGUgIm9yaWdpbiIgcmVtb3RlIGhhcyBiZWVuIHNldC4KKwkjCisKKwkjIHNldHVwIGEgbmV3IHJlbW90ZSB0byBkaWZmZXJlbnRpYXRlIGZyb20gIm9yaWdpbiIKKwlnaXQgY2xvbmUgLiBvdGhlci5naXQgJiYKKwkoCisJCWNkIG90aGVyLmdpdCAmJgorCQllY2hvICIkKGdpdCByZXYtcGFyc2UgSEVBRCkJSEVBRCIgJiYKKwkJZ2l0IHNob3ctcmVmCXwgc2VkIC1lICJzLyAvCS8iCisJKSA+ZXhwICYmCisKKwlVUkw9Im90aGVyLmdpdCIgJiYKKwllY2hvICJGcm9tICRVUkwiID5leHBfZXJyICYmCisKKwlnaXQgcmVtb3RlIGFkZCBvdGhlciAkVVJMICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBvdGhlciAmJgorCisJZ2l0IGxzLXJlbW90ZSAyPmFjdHVhbF9lcnIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cF9lcnIgYWN0dWFsX2VyciAmJgorCXRlc3RfY21wIGV4cCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZnVzZXMgcGF0dGVybiBhcyByZW1vdGUgd2hlbiBubyByZW1vdGUgc3BlY2lmaWVkJyAnCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVworCXRoZW4KKwkJIyBXaW5kb3dzIGRvZXMgbm90IGxpa2UgYXN0ZXJpc2tzIGluIHBhdGhuYW1lCisJCWRvZXNfbm90X2V4aXN0PW1hc3RlcgorCWVsc2UKKwkJZG9lc19ub3RfZXhpc3Q9InJlZnMqbWFzdGVyIgorCWZpICYmCisJY2F0ID5leHAgPDwtRU9GICYmCisJZmF0YWw6ICdcJyckZG9lc19ub3RfZXhpc3QnXCcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5CisJZmF0YWw6IENvdWxkIG5vdCByZWFkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuCisKKwlQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGFjY2VzcyByaWdodHMKKwlhbmQgdGhlIHJlcG9zaXRvcnkgZXhpc3RzLgorCUVPRgorCSMKKwkjIERvIG5vdCBleHBlY3QgImdpdCBscy1yZW1vdGUgPHBhdHRlcm4+IiB0byB3b3JrOyBscy1yZW1vdGUgbmVlZHMKKwkjIDxyZW1vdGU+IGlmIHlvdSB3YW50IHRvIGZlZWQgPHBhdHRlcm4+LCBqdXN0IGxpa2UgeW91IGNhbm5vdCBzYXkKKwkjIGZldGNoIDxicmFuY2g+LgorCSMgV2UgY291bGQganVzdCBhcyBlYXNpbHkgaGF2ZSB1c2VkICJtYXN0ZXIiOyB0aGUgIioiIGVtcGhhc2l6ZXMgaXRzCisJIyByb2xlIGFzIGEgcGF0dGVybi4KKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtcmVtb3RlICIkZG9lc19ub3RfZXhpc3QiID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfaTE4bmNtcCBleHAgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZSB3aXRoIG5vbi0yIGZvciB3cm9uZyByZXBvc2l0b3J5IGV2ZW4gd2l0aCAtLWV4aXQtY29kZScgJworCXsKKwkJZ2l0IGxzLXJlbW90ZSAtLWV4aXQtY29kZSAuL25vLXN1Y2gtcmVwb3NpdG9yeQorCQlzdGF0dXM9JD8KKwl9ICYmCisJdGVzdCAkc3RhdHVzICE9IDIgJiYgdGVzdCAkc3RhdHVzICE9IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVwb3J0IHN1Y2Nlc3MgZXZlbiB3aGVuIG5vdGhpbmcgbWF0Y2hlcycgJworCWdpdCBscy1yZW1vdGUgb3RoZXIuZ2l0ICJyZWZzL25zbi8qIiA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgbm8tbWF0Y2ggd2l0aCAtLWV4aXQtY29kZScgJworCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgbHMtcmVtb3RlIC0tZXhpdC1jb2RlIG90aGVyLmdpdCAicmVmcy9uc24vKiIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVwb3J0IG1hdGNoIHdpdGggLS1leGl0LWNvZGUnICcKKwlnaXQgbHMtcmVtb3RlIC0tZXhpdC1jb2RlIG90aGVyLmdpdCAicmVmcy90YWdzLyoiID5hY3R1YWwgJiYKKwlnaXQgbHMtcmVtb3RlIC4gdGFncy9tYXJrKiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgc29tZSBleHRyYSB0YWdzIGZvciByZWYgaGlkaW5nJyAnCisJZ2l0IHRhZyBtYWdpYy9vbmUgJiYKKwlnaXQgdGFnIG1hZ2ljL3R3bworJworCitmb3IgY29uZmlnc2VjdGlvbiBpbiB0cmFuc2ZlciB1cGxvYWRwYWNrCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIkhpZGUgc29tZSByZWZzIHdpdGggJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMiICcKKwkJdGVzdF9jb25maWcgJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMgcmVmcy90YWdzICYmCisJCWdpdCBscy1yZW1vdGUgLiA+YWN0dWFsICYmCisJCXRlc3RfdW5jb25maWcgJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMgJiYKKwkJZ2l0IGxzLXJlbW90ZSAuIHwKKwkJc2VkIC1lICIvCXJlZnNcL3RhZ3NcLy9kIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJPdmVycmlkZSBoaWRpbmcgb2YgJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMiICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X3VuY29uZmlnICRjb25maWdzZWN0aW9uLmhpZGVyZWZzIiAmJgorCQlnaXQgY29uZmlnIC0tYWRkICRjb25maWdzZWN0aW9uLmhpZGVyZWZzIHJlZnMvdGFncyAmJgorCQlnaXQgY29uZmlnIC0tYWRkICRjb25maWdzZWN0aW9uLmhpZGVyZWZzICIhcmVmcy90YWdzL21hZ2ljIiAmJgorCQlnaXQgY29uZmlnIC0tYWRkICRjb25maWdzZWN0aW9uLmhpZGVyZWZzIHJlZnMvdGFncy9tYWdpYy9vbmUgJiYKKwkJZ2l0IGxzLXJlbW90ZSAuID5hY3R1YWwgJiYKKwkJZ3JlcCByZWZzL3RhZ3MvbWFnaWMvdHdvIGFjdHVhbCAmJgorCQkhIGdyZXAgcmVmcy90YWdzL21hZ2ljL29uZSBhY3R1YWwKKwknCisKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGVzIHdvcmsgYmV0d2VlbiBtaXhlZCB0cmFuc2Zlci91cGxvYWQtcGFjayBoaWRlUmVmcycgJworCXRlc3RfY29uZmlnIHVwbG9hZHBhY2suaGlkZXJlZnMgcmVmcy90YWdzICYmCisJdGVzdF9jb25maWcgdHJhbnNmZXIuaGlkZXJlZnMgIiFyZWZzL3RhZ3MvbWFnaWMiICYmCisJZ2l0IGxzLXJlbW90ZSAuID5hY3R1YWwgJiYKKwlncmVwIHJlZnMvdGFncy9tYWdpYyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvdG9jb2wgdjIgc3VwcG9ydHMgaGlkZXJlZnMnICcKKwl0ZXN0X2NvbmZpZyB1cGxvYWRwYWNrLmhpZGVyZWZzIHJlZnMvdGFncyAmJgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgbHMtcmVtb3RlIC4gPmFjdHVhbCAmJgorCSEgZ3JlcCByZWZzL3RhZ3MgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSAtLXN5bXJlZicgJworCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlyZWY6IHJlZnMvaGVhZHMvbWFzdGVyCUhFQUQKKwkkKGdpdCByZXYtcGFyc2UgSEVBRCkJSEVBRAorCSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikJcmVmcy9oZWFkcy9tYXN0ZXIKKwkkKGdpdCByZXYtcGFyc2UgSEVBRCkJcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECisJJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKQlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorCSQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvbWFyaykJcmVmcy90YWdzL21hcmsKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL21hcmsxLjEpCXJlZnMvdGFncy9tYXJrMS4xCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9tYXJrMS4xMCkJcmVmcy90YWdzL21hcmsxLjEwCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9tYXJrMS4yKQlyZWZzL3RhZ3MvbWFyazEuMgorCUVPRgorCSMgUHJvdG9jb2wgdjIgc3VwcG9ydHMgc2VuZGluZyBzeW1yZWZzIGZvciByZWZzIG90aGVyIHRoYW4gSEVBRCwgc28gdXNlCisJIyBwcm90b2NvbCB2MCBoZXJlLgorCUdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgbHMtcmVtb3RlIC0tc3ltcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSB3aXRoIGZpbHRlcmVkIHN5bXJlZiAocmVmbmFtZSknICcKKwlyZXY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJcmVmOiByZWZzL2hlYWRzL21hc3RlcglIRUFECisJJHJldglIRUFECisJRU9GCisJIyBQcm90b2NvbCB2MiBzdXBwb3J0cyBzZW5kaW5nIHN5bXJlZnMgZm9yIHJlZnMgb3RoZXIgdGhhbiBIRUFELCBzbyB1c2UKKwkjIHByb3RvY29sIHYwIGhlcmUuCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBscy1yZW1vdGUgLS1zeW1yZWYgLiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2xzLXJlbW90ZSB3aXRoIGZpbHRlcmVkIHN5bXJlZiAoLS1oZWFkcyknICcKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvZm9vIHJlZnMvdGFncy9tYXJrICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJcmVmOiByZWZzL3RhZ3MvbWFyawlyZWZzL2hlYWRzL2ZvbworCSRyZXYJcmVmcy9oZWFkcy9mb28KKwkkcmV2CXJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisJIyBQcm90b2NvbCB2MiBzdXBwb3J0cyBzZW5kaW5nIHN5bXJlZnMgZm9yIHJlZnMgb3RoZXIgdGhhbiBIRUFELCBzbyB1c2UKKwkjIHByb3RvY29sIHYwIGhlcmUuCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBscy1yZW1vdGUgLS1zeW1yZWYgLS1oZWFkcyAuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSAtLXN5bXJlZiBvbWl0cyBmaWx0ZXJlZC1vdXQgbWF0Y2hlcycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSRyZXYJcmVmcy9oZWFkcy9mb28KKwkkcmV2CXJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisJIyBQcm90b2NvbCB2MiBzdXBwb3J0cyBzZW5kaW5nIHN5bXJlZnMgZm9yIHJlZnMgb3RoZXIgdGhhbiBIRUFELCBzbyB1c2UKKwkjIHByb3RvY29sIHYwIGhlcmUuCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBscy1yZW1vdGUgLS1zeW1yZWYgLS1oZWFkcyAuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBscy1yZW1vdGUgLS1zeW1yZWYgLiAicmVmcy9oZWFkcy8qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2xhenlfcHJlcmVxIEdJVF9EQUVNT04gJworCXRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfR0lUX0RBRU1PTiB0cnVlCisnCisKKyMgVGhpcyB0ZXN0IHNwYXducyBhIGRhZW1vbiwgc28gcnVuIGl0IG9ubHkgaWYgdGhlIHVzZXIgd291bGQgYmUgT0sgd2l0aAorIyB0ZXN0aW5nIHdpdGggZ2l0LWRhZW1vbi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSxKR0lULEdJVF9EQUVNT04gJ2luZGljYXRlIG5vIHJlZnMgaW4gc3RhbmRhcmRzLWNvbXBsaWFudCBlbXB0eSByZW1vdGUnICcKKwl0ZXN0X3NldF9wb3J0IEpHSVRfREFFTU9OX1BPUlQgJiYKKwlKR0lUX0RBRU1PTl9QSUQ9ICYmCisJZ2l0IGluaXQgLS1iYXJlIGVtcHR5LmdpdCAmJgorCT5lbXB0eS5naXQvZ2l0LWRhZW1vbi1leHBvcnQtb2sgJiYKKwlta2ZpZm8gamdpdF9kYWVtb25fb3V0cHV0ICYmCisJeworCQlqZ2l0IGRhZW1vbiAtLXBvcnQ9IiRKR0lUX0RBRU1PTl9QT1JUIiAuID5qZ2l0X2RhZW1vbl9vdXRwdXQgJgorCQlKR0lUX0RBRU1PTl9QSUQ9JCEKKwl9ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGtpbGwgIiRKR0lUX0RBRU1PTl9QSUQiICYmCisJeworCQlyZWFkIGxpbmUgJiYKKwkJY2FzZSAkbGluZSBpbgorCQlFeHBvcnRpbmcqKQorCQkJOzsKKwkJKikKKwkJCWVjaG8gIkV4cGVjdGVkOiBFeHBvcnRpbmciICYmCisJCQlmYWxzZTs7CisJCWVzYWMgJiYKKwkJcmVhZCBsaW5lICYmCisJCWNhc2UgJGxpbmUgaW4KKwkJIkxpc3RlbmluZyBvbiIqKQorCQkJOzsKKwkJKikKKwkJCWVjaG8gIkV4cGVjdGVkOiBMaXN0ZW5pbmcgb24iICYmCisJCQlmYWxzZTs7CisJCWVzYWMKKwl9IDxqZ2l0X2RhZW1vbl9vdXRwdXQgJiYKKwkjIC0tZXhpdC1jb2RlIGFza3MgdGhlIGNvbW1hbmQgdG8gZXhpdCB3aXRoIDIgd2hlbiBubworCSMgbWF0Y2hpbmcgcmVmcyBhcmUgZm91bmQuCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBscy1yZW1vdGUgLS1leGl0LWNvZGUgZ2l0Oi8vbG9jYWxob3N0OiRKR0lUX0RBRU1PTl9QT1JUL2VtcHR5LmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgd29ya3Mgb3V0c2lkZSByZXBvc2l0b3J5JyAnCisJIyBJdCBpcyBpbXBvcnRhbnQgZm9yIHRoaXMgcmVwbyB0byBiZSBpbnNpZGUgdGhlIG5vbmdpdAorCSMgYXJlYSwgYXMgd2Ugd2FudCBhIHJlcG8gbmFtZSB0aGF0IGRvZXMgbm90IGluY2x1ZGUKKwkjIHNsYXNoZXMgKGJlY2F1c2UgdGhvc2UgaW5oaWJpdCBzb21lIG9mIG91ciBjb25maWd1cmF0aW9uCisJIyBsb29rdXBzKS4KKwlub25naXQgZ2l0IGluaXQgLS1iYXJlIGRzdC5naXQgJiYKKwlub25naXQgZ2l0IGxzLXJlbW90ZSBkc3QuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSAtLXNvcnQgZmFpbHMgZ3JhY2VmdWxseSBvdXRzaWRlIHJlcG9zaXRvcnknICcKKwkjIFVzZSBhIHNvcnQga2V5IHRoYXQgcmVxdWlyZXMgYWNjZXNzIHRvIHRoZSByZWZlcmVuY2VkIG9iamVjdHMuCisJbm9uZ2l0IHRlc3RfbXVzdF9mYWlsIGdpdCBscy1yZW1vdGUgLS1zb3J0PWF1dGhvcmRhdGUgIiRUUkFTSF9ESVJFQ1RPUlkiIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiXmZhdGFsOiBub3QgYSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZSBmaWVsZCAnXCcnYXV0aG9yZGF0ZSdcJycgcmVxdWlyZXMgYWNjZXNzIHRvIG9iamVjdCBkYXRhIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIHBhdHRlcm5zIHdvcmsgd2l0aCBhbGwgcHJvdG9jb2wgdmVyc2lvbnMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpCSUocmVmbmFtZSkiIFwKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgbHMtcmVtb3RlIC4gbWFzdGVyID5hY3R1YWwudjEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLnYxICYmCisJZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBscy1yZW1vdGUgLiBtYXN0ZXIgPmFjdHVhbC52MiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwudjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIHByZWZpeGVzIHdvcmsgd2l0aCBhbGwgcHJvdG9jb2wgdmVyc2lvbnMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpCSUocmVmbmFtZSkiIFwKKwkJcmVmcy9oZWFkcy8gcmVmcy90YWdzLyA+ZXhwZWN0ICYmCisJZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MSBscy1yZW1vdGUgLS1oZWFkcyAtLXRhZ3MgLiA+YWN0dWFsLnYxICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC52MSAmJgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgbHMtcmVtb3RlIC0taGVhZHMgLS10YWdzIC4gPmFjdHVhbC52MiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwudjIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTEzLWZldGNoLXRyYWNrLnNoIGIvdC90NTUxMy1mZXRjaC10cmFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NWQxZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxMy1mZXRjaC10cmFjay5zaApAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2ggZm9sbG93cyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPmZpbGUgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIGItMCAmJgorCWdpdCBicmFuY2ggYjEgJiYKKwlnaXQgYnJhbmNoIGIvb25lICYmCisJdGVzdF9jcmVhdGVfcmVwbyBvdGhlciAmJgorCSgKKwkJY2Qgb3RoZXIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuLiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2ggIityZWZzL2hlYWRzL2IvKjpyZWZzL3JlbW90ZXMvYi8qIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBmZXRjaCAnCisJKAorCQljZCBvdGhlciAmJiBnaXQgZmV0Y2ggb3JpZ2luICYmCisJCXRlc3QgIiQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIpIiA9IHJlZnMvcmVtb3Rlcy9iL29uZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE0LWZldGNoLW11bHRpcGxlLnNoIGIvdC90NTUxNC1mZXRjaC1tdWx0aXBsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZThlMmYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNC1mZXRjaC1tdWx0aXBsZS5zaApAQCAtMCwwICsxLDE5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoIC0tYWxsIHdvcmtzIGNvcnJlY3RseScKKworLiAuL3Rlc3QtbGliLnNoCisKK3NldHVwX3JlcG9zaXRvcnkgKCkgeworCW1rZGlyICIkMSIgJiYgKAorCWNkICIkMSIgJiYKKwlnaXQgaW5pdCAmJgorCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCT5lbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXNldHVwX3JlcG9zaXRvcnkgb25lICYmCisJc2V0dXBfcmVwb3NpdG9yeSB0d28gJiYKKwkoCisJCWNkIHR3byAmJiBnaXQgYnJhbmNoIGFub3RoZXIKKwkpICYmCisJZ2l0IGNsb25lIC0tbWlycm9yIHR3byB0aHJlZSAmJgorCWdpdCBjbG9uZSBvbmUgdGVzdAorJworCitjYXQgPiB0ZXN0L2V4cGVjdCA8PCBFT0YKKyAgb25lL21hc3RlcgorICBvbmUvc2lkZQorICBvcmlnaW4vSEVBRCAtPiBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL3NpZGUKKyAgdGhyZWUvYW5vdGhlcgorICB0aHJlZS9tYXN0ZXIKKyAgdGhyZWUvc2lkZQorICB0d28vYW5vdGhlcgorICB0d28vbWFzdGVyCisgIHR3by9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tYWxsJyAnCisJKGNkIHRlc3QgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgb25lIC4uL29uZSAmJgorCSBnaXQgcmVtb3RlIGFkZCB0d28gLi4vdHdvICYmCisJIGdpdCByZW1vdGUgYWRkIHRocmVlIC4uL3RocmVlICYmCisJIGdpdCBmZXRjaCAtLWFsbCAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCBzaG91bGQgY29udGludWUgaWYgYSByZW1vdGUgaGFzIGVycm9ycycgJworCShnaXQgY2xvbmUgb25lIHRlc3QyICYmCisJIGNkIHRlc3QyICYmCisJIGdpdCByZW1vdGUgYWRkIGJhZCAuLi9ub24tZXhpc3RpbmcgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgb25lIC4uL29uZSAmJgorCSBnaXQgcmVtb3RlIGFkZCB0d28gLi4vdHdvICYmCisJIGdpdCByZW1vdGUgYWRkIHRocmVlIC4uL3RocmVlICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLWFsbCAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL3Rlc3QvZXhwZWN0IG91dHB1dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tYWxsIGRvZXMgbm90IGFsbG93IG5vbi1vcHRpb24gYXJndW1lbnRzJyAnCisJKGNkIHRlc3QgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC0tYWxsIG9yaWdpbiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1hbGwgb3JpZ2luIG1hc3RlcikKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorICBvcmlnaW4vSEVBRCAtPiBvcmlnaW4vbWFzdGVyCisgIG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL3NpZGUKKyAgdGhyZWUvYW5vdGhlcgorICB0aHJlZS9tYXN0ZXIKKyAgdGhyZWUvc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLW11bHRpcGxlIChidXQgb25seSBvbmUgcmVtb3RlKScgJworCShnaXQgY2xvbmUgb25lIHRlc3QzICYmCisJIGNkIHRlc3QzICYmCisJIGdpdCByZW1vdGUgYWRkIHRocmVlIC4uL3RocmVlICYmCisJIGdpdCBmZXRjaCAtLW11bHRpcGxlIHRocmVlICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorICBvbmUvbWFzdGVyCisgIG9uZS9zaWRlCisgIHR3by9hbm90aGVyCisgIHR3by9tYXN0ZXIKKyAgdHdvL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1tdWx0aXBsZSAodHdvIHJlbW90ZXMpJyAnCisJKGdpdCBjbG9uZSBvbmUgdGVzdDQgJiYKKwkgY2QgdGVzdDQgJiYKKwkgZ2l0IHJlbW90ZSBybSBvcmlnaW4gJiYKKwkgZ2l0IHJlbW90ZSBhZGQgb25lIC4uL29uZSAmJgorCSBnaXQgcmVtb3RlIGFkZCB0d28gLi4vdHdvICYmCisJIEdJVF9UUkFDRT0xIGdpdCBmZXRjaCAtLW11bHRpcGxlIG9uZSB0d28gMj50cmFjZSAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQgJiYKKwkgZ3JlcCAiYnVpbHQtaW46IGdpdCBnYyIgdHJhY2UgPmdjICYmCisJIHRlc3RfbGluZV9jb3VudCA9IDEgZ2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLW11bHRpcGxlIChiYWQgcmVtb3RlIG5hbWVzKScgJworCShjZCB0ZXN0NCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1tdWx0aXBsZSBmb3VyKQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCAoc2tpcEZldGNoQWxsKScgJworCShjZCB0ZXN0NCAmJgorCSBmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJIGRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgZXhpdCAxCisJIGRvbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdGhyZWUgLi4vdGhyZWUgJiYKKwkgZ2l0IGNvbmZpZyByZW1vdGUudGhyZWUuc2tpcEZldGNoQWxsIHRydWUgJiYKKwkgZ2l0IGZldGNoIC0tYWxsICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorICBvbmUvbWFzdGVyCisgIG9uZS9zaWRlCisgIHRocmVlL2Fub3RoZXIKKyAgdGhyZWUvbWFzdGVyCisgIHRocmVlL3NpZGUKKyAgdHdvL2Fub3RoZXIKKyAgdHdvL21hc3RlcgorICB0d28vc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLW11bHRpcGxlIChpZ25vcmluZyBza2lwRmV0Y2hBbGwpJyAnCisJKGNkIHRlc3Q0ICYmCisJIGZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKKwkgZG8KKwkJZ2l0IGJyYW5jaCAtciAtZCAkYiB8fCBleGl0IDEKKwkgZG9uZSAmJgorCSBnaXQgZmV0Y2ggLS1tdWx0aXBsZSBvbmUgdHdvIHRocmVlICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tYWxsIC0tbm8tdGFncycgJworCWdpdCBjbG9uZSBvbmUgdGVzdDUgJiYKKwlnaXQgY2xvbmUgdGVzdDUgdGVzdDYgJiYKKwkoY2QgdGVzdDUgJiYgZ2l0IHRhZyB0ZXN0LXRhZykgJiYKKwkoCisJCWNkIHRlc3Q2ICYmCisJCWdpdCBmZXRjaCAtLWFsbCAtLW5vLXRhZ3MgJiYKKwkJZ2l0IHRhZyA+b3V0cHV0CisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB0ZXN0Ni9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tYWxsIC0tdGFncycgJworCWVjaG8gdGVzdC10YWcgPmV4cGVjdCAmJgorCWdpdCBjbG9uZSBvbmUgdGVzdDcgJiYKKwlnaXQgY2xvbmUgdGVzdDcgdGVzdDggJiYKKwkoCisJCWNkIHRlc3Q3ICYmCisJCXRlc3RfY29tbWl0IHRlc3QtdGFnICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKwkpICYmCisJKAorCQljZCB0ZXN0OCAmJgorCQlnaXQgZmV0Y2ggLS1hbGwgLS10YWdzICYmCisJCWdpdCB0YWcgPm91dHB1dAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdGVzdDgvb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcmFsbGVsJyAnCisJZ2l0IHJlbW90ZSBhZGQgb25lIC4vYm9ndXMxICYmCisJZ2l0IHJlbW90ZSBhZGQgdHdvIC4vYm9ndXMyICYmCisKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RSQUNFPSIkUFdEL3RyYWNlIiBcCisJCWdpdCBmZXRjaCAtLWpvYnM9MiAtLW11bHRpcGxlIG9uZSB0d28gMj5lcnIgJiYKKwlncmVwICJwcmVwYXJpbmcgdG8gcnVuIHVwIHRvIDIgdGFza3MiIHRyYWNlICYmCisJdGVzdF9pMThuZ3JlcCAiY291bGQgbm90IGZldGNoIC5vbmUuKjEyOCIgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiY291bGQgbm90IGZldGNoIC50d28uKjEyOCIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxNS1mZXRjaC1tZXJnZS1sb2dpYy5zaCBiL3QvdDU1MTUtZmV0Y2gtbWVyZ2UtbG9naWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWQ2YTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUtZmV0Y2gtbWVyZ2UtbG9naWMuc2gKQEAgLTAsMCArMSwyMjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgU2FudGkgQsOpamFyLCBiYXNlZCBvbiB0NDAxMyBieSBKdW5pbyBDIEhhbWFubworIworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdNZXJnZSBsb2dpYyBpbiBmZXRjaCcKKworIyBORUVEU1dPUks6IElmIHRoZSBvdmVyc3BlY2lmaWNhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0IGlzIHJlZHVjZWQsIHdlCisjIG1pZ2h0IGJlIGFibGUgdG8gcnVuIHRoaXMgdGVzdCBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMuCitHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAKK2V4cG9ydCBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OCisKKy4gLi90ZXN0LWxpYi5zaAorCitidWlsZF9zY3JpcHQgKCkgeworCXNjcmlwdD0iJDEiICYmCisJZm9yIGkgaW4gb25lIHRocmVlX2ZpbGUgbWFzdGVyIG1hc3RlcjIgb25lX3RyZWUgdGhyZWUgdHdvIHR3bzIgdGhyZWUyCisJZG8KKwkJZWNobyAicy8kKHRlc3Rfb2lkIC0taGFzaD1zaGExICIkaSIpLyQodGVzdF9vaWQgIiRpIikvZyIgPj4iJHNjcmlwdCIKKwlkb25lCit9CisKK2NvbnZlcnRfZXhwZWN0ZWQgKCkgeworCWZpbGU9IiQxIiAmJgorCXNjcmlwdD0iJDIiICYmCisJc2VkIC1mICIkc2NyaXB0IiAiJGZpbGUiID4iJGZpbGUudG1wIiAmJgorCW12ICIkZmlsZS50bXAiICIkZmlsZSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAwOjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowMDowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GICYmCisJb25lIHNoYTE6OGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQorCW9uZSBzaGEyNTY6ODczOTU0NjQzM2FiMWFjNzJlZTkzMDg4ZGNlNjExMjEwZWZmZWUwNzJiMmI1ODZjZWFjNmRkZTQzZWJlYzljZQorCisJdGhyZWVfZmlsZSBzaGExOjBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMKKwl0aHJlZV9maWxlIHNoYTI1NjpiYzQ0NDdkNTBjMDc0OTdhOGJmZTZlZWY4MTdmMjM2NGVjY2E5ZDQ3MTQ1MmU0M2I1Mjc1NmNjMWE5MDhiZDMyCisKKwltYXN0ZXIgc2hhMTo2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CisJbWFzdGVyIHNoYTI1Njo4NTIxYzMwNzI0NjFmY2ZlOGYzMmQ2N2Y5NWNjNmU2YjgzMmEyZGIyZmEyOTc2OWZmYzc4OGJjZTg1ZWJjZDc1CisKKwlvbmVfdHJlZSBzaGExOjIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEKKwlvbmVfdHJlZSBzaGEyNTY6NmU0NzQzZjRlZjIzNTZiODgxZGRhNWU5MWY1YzdjZGZmZTg3MGZhZjM1MGJmN2IzMTJmODBhMjA5MzVmNWQ4MworCisJdGhyZWUgc2hhMTpjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CisJdGhyZWUgc2hhMjU2OjBjYzZkMWVkYTYxN2RlZDcxNTE3MDc4NmUzMWJhNGUyZDAxODU0MDRlYzVhMzUwOGRkMGQ3M2IzMjQ4NjBjNmEKKworCXR3byBzaGExOjUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEKKwl0d28gc2hhMjU2OjNiMjFkZTM0NDBjZDM4YzJhOWU5YjQ2NGFkYjkyM2Y3MDU0OTQ5ZWQ0YzkxOGUxYTBhYzRjOTVjZDUyNzc0ZGIKKworCW1hc3RlcjIgc2hhMTo3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCisJbWFzdGVyMiBzaGEyNTY6NmM3YWJhZWE4YTZkOGVmNGQ4OTg3N2U2ODQ2Mjc1OGRjNjc3NDY5MGZiYmJiMGU2ZDdkZDU3NDE1YzlhYmRlMAorCisJdHdvMiBzaGExOjYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgKKwl0d28yIHNoYTI1Njo4N2EyZDNlZTI5YzgzYTNkYzdhZmQ0MWMwNjA2YjExZjY3NjAzMTIwYjkxMGE3YmU3ODQwYWNjZGMxODM0NGQ0CisKKwl0aHJlZTIgc2hhMTowNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCisJdGhyZWUyIHNoYTI1NjpjY2ViM2U4ZWNhMzY0ZmE5YTBhMzlhMWVmYmViZWNhY2M2NjRhZjg2Y2JiZDgwNzA1NzFmNWZhZWI1ZjBlOGMzCisJRU9GCisKKwllY2hvID5maWxlIG9yaWdpbmFsICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBPbmUgJiYKKwlnaXQgdGFnIHRhZy1vbmUgJiYKKwlnaXQgdGFnIHRhZy1vbmUtdHJlZSBIRUFEXnt0cmVlfSAmJgorCWdpdCBicmFuY2ggb25lICYmCisKKwllY2hvIHR3byA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBUd28gJiYKKwlnaXQgdGFnIC1hIC1tICJUYWcgVHdvIiB0YWctdHdvICYmCisJZ2l0IGJyYW5jaCB0d28gJiYKKworCWVjaG8gdGhyZWUgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gVGhyZWUgJiYKKwlnaXQgdGFnIC1hIC1tICJUYWcgVGhyZWUiIHRhZy10aHJlZSAmJgorCWdpdCB0YWcgLWEgLW0gIlRhZyBUaHJlZSBmaWxlIiB0YWctdGhyZWUtZmlsZSBIRUFEXnt0cmVlfTpmaWxlICYmCisJZ2l0IGJyYW5jaCB0aHJlZSAmJgorCisJZWNobyBtYXN0ZXIgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gTWFzdGVyICYmCisJZ2l0IHRhZyAtYSAtbSAiVGFnIE1hc3RlciIgdGFnLW1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IHRocmVlICYmCisKKwlnaXQgY2xvbmUgLiBjbG9uZWQgJiYKKwljZCBjbG9uZWQgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4uLy5naXQvICYmCisKKwlnaXQgY29uZmlnIHJlbW90ZS5jb25maWctZXhwbGljaXQudXJsIC4uLy5naXQvICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuY29uZmlnLWV4cGxpY2l0LmZldGNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlbW90ZXMvcmVtL21hc3RlciAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLmNvbmZpZy1leHBsaWNpdC5mZXRjaCByZWZzL2hlYWRzL29uZTpyZW1vdGVzL3JlbS9vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5jb25maWctZXhwbGljaXQuZmV0Y2ggdHdvOnJlbW90ZXMvcmVtL3R3byAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLmNvbmZpZy1leHBsaWNpdC5mZXRjaCByZWZzL2hlYWRzL3RocmVlOnJlbW90ZXMvcmVtL3RocmVlICYmCisJcmVtb3Rlcz0iY29uZmlnLWV4cGxpY2l0IiAmJgorCisJZ2l0IGNvbmZpZyByZW1vdGUuY29uZmlnLWdsb2IudXJsIC4uLy5naXQvICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuY29uZmlnLWdsb2IuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9yZW0vKiAmJgorCXJlbW90ZXM9IiRyZW1vdGVzIGNvbmZpZy1nbG9iIiAmJgorCisJbWtkaXIgLXAgLmdpdC9yZW1vdGVzICYmCisJeworCQllY2hvICJVUkw6IC4uLy5naXQvIgorCQllY2hvICJQdWxsOiByZWZzL2hlYWRzL21hc3RlcjpyZW1vdGVzL3JlbS9tYXN0ZXIiCisJCWVjaG8gIlB1bGw6IHJlZnMvaGVhZHMvb25lOnJlbW90ZXMvcmVtL29uZSIKKwkJZWNobyAiUHVsbDogdHdvOnJlbW90ZXMvcmVtL3R3byIKKwkJZWNobyAiUHVsbDogcmVmcy9oZWFkcy90aHJlZTpyZW1vdGVzL3JlbS90aHJlZSIKKwl9ID4uZ2l0L3JlbW90ZXMvcmVtb3RlLWV4cGxpY2l0ICYmCisJcmVtb3Rlcz0iJHJlbW90ZXMgcmVtb3RlLWV4cGxpY2l0IiAmJgorCisJeworCQllY2hvICJVUkw6IC4uLy5naXQvIgorCQllY2hvICJQdWxsOiByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3JlbS8qIgorCX0gPi5naXQvcmVtb3Rlcy9yZW1vdGUtZ2xvYiAmJgorCXJlbW90ZXM9IiRyZW1vdGVzIHJlbW90ZS1nbG9iIiAmJgorCisJbWtkaXIgLXAgLmdpdC9icmFuY2hlcyAmJgorCWVjaG8gIi4uLy5naXQiID4gLmdpdC9icmFuY2hlcy9icmFuY2hlcy1kZWZhdWx0ICYmCisJcmVtb3Rlcz0iJHJlbW90ZXMgYnJhbmNoZXMtZGVmYXVsdCIgJiYKKworCWVjaG8gIi4uLy5naXQjb25lIiA+IC5naXQvYnJhbmNoZXMvYnJhbmNoZXMtb25lICYmCisJcmVtb3Rlcz0iJHJlbW90ZXMgYnJhbmNoZXMtb25lIiAmJgorCisJZm9yIHJlbW90ZSBpbiAkcmVtb3RlcyA7IGRvCisJCWdpdCBjb25maWcgYnJhbmNoLmJyLSRyZW1vdGUucmVtb3RlICRyZW1vdGUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guYnItJHJlbW90ZS1tZXJnZS5yZW1vdGUgJHJlbW90ZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5ici0kcmVtb3RlLW1lcmdlLm1lcmdlIHJlZnMvaGVhZHMvdGhyZWUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guYnItJHJlbW90ZS1vY3RvcHVzLnJlbW90ZSAkcmVtb3RlICYmCisJCWdpdCBjb25maWcgYnJhbmNoLmJyLSRyZW1vdGUtb2N0b3B1cy5tZXJnZSByZWZzL2hlYWRzL29uZSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGJyYW5jaC5ici0kcmVtb3RlLW9jdG9wdXMubWVyZ2UgdHdvCisJZG9uZSAmJgorCWJ1aWxkX3NjcmlwdCBzZWRfc2NyaXB0CisnCisKKyMgTWVyZ2UgbG9naWMgZGVwZW5kcyBvbiBicmFuY2ggcHJvcGVydGllcyBhbmQgUHVsbDogb3IgLmZldGNoIGxpbmVzCitmb3IgcmVtb3RlIGluICRyZW1vdGVzIDsgZG8KKyAgICBmb3IgYnJhbmNoIGluICIiICItbWVyZ2UiICItb2N0b3B1cyIgOyBkbworY2F0IDw8RU9GCitici0kcmVtb3RlJGJyYW5jaAorYnItJHJlbW90ZSRicmFuY2ggJHJlbW90ZQorRU9GCisgICAgZG9uZQorZG9uZSA+IHRlc3RzCisKKyMgTWVyZ2UgbG9naWMgZG9lcyBub3QgZGVwZW5kIG9uIGJyYW5jaCBwcm9wZXJ0aWVzLAorIyBidXQgZG9lcyBkZXBlbmQgb24gUHVsbDogb3IgZmV0Y2ggbGluZXMuCisjIFVzZSB0d28gYnJhbmNoZXMgY29tcGxldGVseSB1bnJlbGF0ZWQgZnJvbSB0aGUgYXJndW1lbnRzLAorIyB0aGUgY2xvbmUgZGVmYXVsdCBhbmQgb25lIHdpdGhvdXQgYnJhbmNoIHByb3BlcnRpZXMKK2ZvciBicmFuY2ggaW4gbWFzdGVyIGJyLXVuY29uZmlnIDsgZG8KKyAgICBlY2hvICRicmFuY2gKKyAgICBmb3IgcmVtb3RlIGluICRyZW1vdGVzIDsgZG8KKwllY2hvICRicmFuY2ggJHJlbW90ZQorICAgIGRvbmUKK2RvbmUgPj4gdGVzdHMKKworIyBNZXJnZSBsb2dpYyBkb2VzIG5vdCBkZXBlbmQgb24gYnJhbmNoIHByb3BlcnRpZXMKKyMgbmVpdGhlciBpbiB0aGUgUHVsbDogb3IgLmZldGNoIGNvbmZpZworZm9yIGJyYW5jaCBpbiBtYXN0ZXIgYnItdW5jb25maWcgOyBkbworICAgIGNhdCA8PEVPRgorJGJyYW5jaCAuLi8uZ2l0CiskYnJhbmNoIC4uLy5naXQgb25lCiskYnJhbmNoIC4uLy5naXQgb25lIHR3bworJGJyYW5jaCAtLXRhZ3MgLi4vLmdpdAorJGJyYW5jaCAuLi8uZ2l0IHRhZyB0YWctb25lIHRhZyB0YWctdGhyZWUKKyRicmFuY2ggLi4vLmdpdCB0YWcgdGFnLW9uZS10cmVlIHRhZyB0YWctdGhyZWUtZmlsZQorJGJyYW5jaCAuLi8uZ2l0IG9uZSB0YWcgdGFnLW9uZSB0YWcgdGFnLXRocmVlLWZpbGUKK0VPRgorZG9uZSA+PiB0ZXN0cworCit3aGlsZSByZWFkIGNtZAorZG8KKwljYXNlICIkY21kIiBpbgorCScnIHwgJyMnKikgY29udGludWUgOzsKKwllc2FjCisJdGVzdD0kKGVjaG8gIiRjbWQiIHwgc2VkIC1lICdzfFsvIF1bLyBdKnxffGcnKQorCXBmeD0kKHByaW50ZiAiJTA0ZCIgJHRlc3RfY291bnQpCisJZXhwZWN0X2Y9IiRURVNUX0RJUkVDVE9SWS90NTUxNS9mZXRjaC4kdGVzdCIKKwlhY3R1YWxfZj0iJHBmeC1mZXRjaC4kdGVzdCIKKwlleHBlY3Rfcj0iJFRFU1RfRElSRUNUT1JZL3Q1NTE1L3JlZnMuJHRlc3QiCisJYWN0dWFsX3I9IiRwZngtcmVmcy4kdGVzdCIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQiICcKKwkJY3AgIiRleHBlY3RfZiIgZXhwZWN0X2YgJiYKKwkJY29udmVydF9leHBlY3RlZCBleHBlY3RfZiBzZWRfc2NyaXB0ICYmCisJCWNwICIkZXhwZWN0X3IiIGV4cGVjdF9yICYmCisJCWNvbnZlcnRfZXhwZWN0ZWQgZXhwZWN0X3Igc2VkX3NjcmlwdCAmJgorCQl7CisJCQllY2hvICIjICRjbWQiCisJCQlzZXQgeCAkY21kOyBzaGlmdAorCQkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvJDEgOyBzaGlmdAorCQkJcm0gLWYgLmdpdC9GRVRDSF9IRUFECisJCQlnaXQgZm9yLWVhY2gtcmVmIFwKKwkJCQlyZWZzL2hlYWRzIHJlZnMvcmVtb3Rlcy9yZW0gcmVmcy90YWdzIHwKKwkJCXdoaWxlIHJlYWQgdmFsIHR5cGUgcmVmbmFtZQorCQkJZG8KKwkJCQlnaXQgdXBkYXRlLXJlZiAtZCAiJHJlZm5hbWUiICIkdmFsIgorCQkJZG9uZQorCQkJZ2l0IGZldGNoICIkQCIgPi9kZXYvbnVsbAorCQkJY2F0IC5naXQvRkVUQ0hfSEVBRAorCQl9ID4iJGFjdHVhbF9mIiAmJgorCQlnaXQgc2hvdy1yZWYgPiIkYWN0dWFsX3IiICYmCisJCWlmIHRlc3QgLWYgImV4cGVjdF9mIgorCQl0aGVuCisJCQl0ZXN0X2NtcCAiZXhwZWN0X2YiICIkYWN0dWFsX2YiICYmCisJCQlybSAtZiAiJGFjdHVhbF9mIgorCQllbHNlCisJCQkjIHRoaXMgaXMgdG8gaGVscCBkZXZlbG9waW5nIG5ldyB0ZXN0cy4KKwkJCWNwICIkYWN0dWFsX2YiICIkZXhwZWN0X2YiCisJCQlmYWxzZQorCQlmaSAmJgorCQlpZiB0ZXN0IC1mICJleHBlY3RfciIKKwkJdGhlbgorCQkJdGVzdF9jbXAgImV4cGVjdF9yIiAiJGFjdHVhbF9yIiAmJgorCQkJcm0gLWYgIiRhY3R1YWxfciIKKwkJZWxzZQorCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCisJCQljcCAiJGFjdHVhbF9yIiAiJGV4cGVjdF9yIgorCQkJZmFsc2UKKwkJZmkKKwknCitkb25lIDwgdGVzdHMKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiYzNkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhYjA4ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZQpAQCAtMCwwICsxLDkgQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2VfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NDI3NTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2VfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDkgQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZSBicmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4YTc2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTAgQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1c19icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODU3ZjEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEwIEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cyBicmFuY2hlcy1kZWZhdWx0Cis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHRfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYmQ3MTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHRfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdCBicmFuY2hlcy1kZWZhdWx0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4ZjY3MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOCBAQAorIyBici1icmFuY2hlcy1vbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2UgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGE3NzQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2UKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLW9uZS1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1tZXJnZV9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1tZXJnZV9icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkMWJiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDkgQEAKKyMgYnItYnJhbmNoZXMtb25lLW1lcmdlIGJyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M0YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1cwpAQCAtMCwwICsxLDkgQEAKKyMgYnItYnJhbmNoZXMtb25lLW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcwNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzIGJyYW5jaGVzLW9uZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZV9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZV9icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4OTBlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDggQEAKKyMgYnItYnJhbmNoZXMtb25lIGJyYW5jaGVzLW9uZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZmM5MjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlNzY0YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtbWVyZ2VfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtbWVyZ2VfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTUyYjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZXhwbGljaXQtbWVyZ2UgY29uZmlnLWV4cGxpY2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwNTc3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZXhwbGljaXQtb2N0b3B1cworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtb2N0b3B1c19jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjlkZDhiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtb2N0b3B1c19jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZXhwbGljaXQtb2N0b3B1cyBjb25maWctZXhwbGljaXQKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTliMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXRfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0IGNvbmZpZy1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NmQ3MGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1tZXJnZSBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmMjU5NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2ItbWVyZ2UKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZ2xvYi1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2ItbWVyZ2VfY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYTQ4MzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2ItbWVyZ2UgY29uZmlnLWdsb2IKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5OTRkZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2Itb2N0b3B1cwpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODFhNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1vY3RvcHVzX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2Itb2N0b3B1cyBjb25maWctZ2xvYgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYl9jb25maWctZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkYWYwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZ2xvYiBjb25maWctZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDRiYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxOGIzNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2VfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2VfcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkM2Q3ODAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZXhwbGljaXQtbWVyZ2UgcmVtb3RlLWV4cGxpY2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4NDMwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1c19yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTQ2YTgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1c19yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cyByZW1vdGUtZXhwbGljaXQKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWUwMTRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXRfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0IHJlbW90ZS1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YmZjZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1tZXJnZSBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UxYTQzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2ItbWVyZ2UKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZ2xvYi1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2ItbWVyZ2VfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTcxYmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2ItbWVyZ2UgcmVtb3RlLWdsb2IKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjOGI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2Itb2N0b3B1cwpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjA3NmZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2Itb2N0b3B1cyByZW1vdGUtZ2xvYgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYl9yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiYTVjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZ2xvYiByZW1vdGUtZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODdjY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZwpAQCAtMCwwICsxLDExIEBACisjIGJyLXVuY29uZmlnCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLS10YWdzXy4uXy5naXQgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzBmNjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0CkBAIC0wLDAgKzEsOCBAQAorIyBici11bmNvbmZpZyAtLXRhZ3MgLi4vLmdpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdCBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODRiYjFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0CkBAIC0wLDAgKzEsMiBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQkuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZWI1YTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lCkBAIC0wLDAgKzEsMiBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IG9uZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDExNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKQEAgLTAsMCArMSw4IEBACisjIGJyLXVuY29uZmlnIC4uLy5naXQgb25lIHRhZyB0YWctb25lIHRhZyB0YWctdGhyZWUtZmlsZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJdGFnICd0YWctb25lJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90d28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxYmUyMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdHdvCkBAIC0wLDAgKzEsMyBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IG9uZSB0d28KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI2OTgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsNyBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IHRhZyB0YWctb25lLXRyZWUgdGFnIHRhZy10aHJlZS1maWxlCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzNzUwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCkBAIC0wLDAgKzEsNyBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IHRhZyB0YWctb25lIHRhZyB0YWctdGhyZWUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCXRhZyAndGFnLW9uZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTMwZTNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsOCBAQAorIyBici11bmNvbmZpZyBicmFuY2hlcy1kZWZhdWx0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2MTQzMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOCBAQAorIyBici11bmNvbmZpZyBicmFuY2hlcy1vbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDMyM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici11bmNvbmZpZyBjb25maWctZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzcyZWQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXVuY29uZmlnIGNvbmZpZy1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxOGRkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItdW5jb25maWcgcmVtb3RlLWV4cGxpY2l0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5YWZhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxMSBAQAorIyBici11bmNvbmZpZyByZW1vdGUtZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3RlciBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjlkNjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3RlcgpAQCAtMCwwICsxLDExIEBACisjIG1hc3RlcgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8tLXRhZ3NfLi5fLmdpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDczYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8tLXRhZ3NfLi5fLmdpdApAQCAtMCwwICsxLDggQEAKKyMgbWFzdGVyIC0tdGFncyAuLi8uZ2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQkuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZkMWFhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXQKQEAgLTAsMCArMSwyIEBACisjIG1hc3RlciAuLi8uZ2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQkuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkZWRkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lCkBAIC0wLDAgKzEsMiBAQAorIyBtYXN0ZXIgLi4vLmdpdCBvbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcyZDEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsOCBAQAorIyBtYXN0ZXIgLi4vLmdpdCBvbmUgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZS1maWxlCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZWM1NzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28KQEAgLTAsMCArMSwzIEBACisjIG1hc3RlciAuLi8uZ2l0IG9uZSB0d28KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDczN2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsNyBAQAorIyBtYXN0ZXIgLi4vLmdpdCB0YWcgdGFnLW9uZS10cmVlIHRhZyB0YWctdGhyZWUtZmlsZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4ODk4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZQpAQCAtMCwwICsxLDcgQEAKKyMgbWFzdGVyIC4uLy5naXQgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJdGFnICd0YWctb25lJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlZGQzYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjIG1hc3RlciBicmFuY2hlcy1kZWZhdWx0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFjZTIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOCBAQAorIyBtYXN0ZXIgYnJhbmNoZXMtb25lCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTFjODI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIGNvbmZpZy1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjMTU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIGNvbmZpZy1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2NmZTZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIHJlbW90ZS1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4YmVmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIHJlbW90ZS1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlCkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXMgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1c19icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0X2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1tZXJnZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2UKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2VfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmVfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXNfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2VfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXNfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2VfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0IGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLS10YWdzXy4uXy5naXQKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTYyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdApAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lCkBAIC0wLDAgKzEsNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3bwpAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWdsb2IgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19jb25maWctZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyIGIvdC90NTUxNS9yZWZzLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3RlcgpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLS10YWdzXy4uXy5naXQgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy0tdGFnc18uLl8uZ2l0CkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTYyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXQKQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfb25lIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZQpAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28gYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfb25lX3R3bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28KQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSwxMiBAQAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL2hlYWRzL2JyYW5jaGVzLWRlZmF1bHQKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNi1mZXRjaC1wdXNoLnNoIGIvdC90NTUxNi1mZXRjaC1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmZjA0MWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE2LWZldGNoLXB1c2guc2gKQEAgLTAsMCArMSwxNzI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQmFzaWMgZmV0Y2gvcHVzaCBmdW5jdGlvbmFsaXR5LgorCitUaGlzIHRlc3QgY2hlY2tzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0eToKKworKiBjb21tYW5kLWxpbmUgc3ludGF4CisqIHJlZnNwZWNzCisqIGZhc3QtZm9yd2FyZCBkZXRlY3Rpb24sIGFuZCBvdmVycmlkaW5nIGl0CisqIGNvbmZpZ3VyYXRpb24KKyogaG9va3MKKyogLS1wb3JjZWxhaW4gb3V0cHV0IGZvcm1hdAorKiBoaWRlcmVmcworKiByZWZsb2dzCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitEPSQocHdkKQorCitta19lbXB0eSAoKSB7CisJcmVwb19uYW1lPSIkMSIKKwlybSAtZnIgIiRyZXBvX25hbWUiICYmCisJbWtkaXIgIiRyZXBvX25hbWUiICYmCisJKAorCQljZCAiJHJlcG9fbmFtZSIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYKKwkJbXYgLmdpdC9ob29rcyAuZ2l0L2hvb2tzLWRpc2FibGVkCisJKQorfQorCitta190ZXN0ICgpIHsKKwlyZXBvX25hbWU9IiQxIgorCXNoaWZ0CisKKwlta19lbXB0eSAiJHJlcG9fbmFtZSIgJiYKKwkoCisJCWZvciByZWYgaW4gIiRAIgorCQlkbworCQkJZ2l0IHB1c2ggIiRyZXBvX25hbWUiICR0aGVfZmlyc3RfY29tbWl0OnJlZnMvJHJlZiB8fAorCQkJZXhpdAorCQlkb25lICYmCisJCWNkICIkcmVwb19uYW1lIiAmJgorCQlmb3IgcmVmIGluICIkQCIKKwkJZG8KKwkJCWVjaG8gIiR0aGVfZmlyc3RfY29tbWl0IiA+ZXhwZWN0ICYmCisJCQlnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy8kcmVmID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgfHwKKwkJCWV4aXQKKwkJZG9uZSAmJgorCQlnaXQgZnNjayAtLWZ1bGwKKwkpCit9CisKK21rX3Rlc3Rfd2l0aF9ob29rcygpIHsKKwlyZXBvX25hbWU9JDEKKwlta190ZXN0ICIkQCIgJiYKKwkoCisJCWNkICIkcmVwb19uYW1lIiAmJgorCQlta2RpciAuZ2l0L2hvb2tzICYmCisJCWNkIC5naXQvaG9va3MgJiYKKworCQljYXQgPnByZS1yZWNlaXZlIDw8LSdFT0YnICYmCisJCSMhL2Jpbi9zaAorCQljYXQgLSA+PnByZS1yZWNlaXZlLmFjdHVhbAorCQlFT0YKKworCQljYXQgPnVwZGF0ZSA8PC0nRU9GJyAmJgorCQkjIS9iaW4vc2gKKwkJcHJpbnRmICIlcyAlcyAlc1xuIiAiJEAiID4+dXBkYXRlLmFjdHVhbAorCQlFT0YKKworCQljYXQgPnBvc3QtcmVjZWl2ZSA8PC0nRU9GJyAmJgorCQkjIS9iaW4vc2gKKwkJY2F0IC0gPj5wb3N0LXJlY2VpdmUuYWN0dWFsCisJCUVPRgorCisJCWNhdCA+cG9zdC11cGRhdGUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCWZvciByZWYgaW4gIiRAIgorCQlkbworCQkJcHJpbnRmICIlc1xuIiAiJHJlZiIgPj5wb3N0LXVwZGF0ZS5hY3R1YWwKKwkJZG9uZQorCQlFT0YKKworCQljaG1vZCAreCBwcmUtcmVjZWl2ZSB1cGRhdGUgcG9zdC1yZWNlaXZlIHBvc3QtdXBkYXRlCisJKQorfQorCitta19jaGlsZCgpIHsKKwlybSAtcmYgIiQyIiAmJgorCWdpdCBjbG9uZSAiJDEiICIkMiIKK30KKworY2hlY2tfcHVzaF9yZXN1bHQgKCkgeworCXRlc3QgJCMgLWdlIDMgfHwKKwlCVUcgImNoZWNrX3B1c2hfcmVzdWx0IHJlcXVpcmVzIGF0IGxlYXN0IDMgcGFyYW1ldGVycyIKKworCXJlcG9fbmFtZT0iJDEiCisJc2hpZnQKKworCSgKKwkJY2QgIiRyZXBvX25hbWUiICYmCisJCWVjaG8gIiQxIiA+ZXhwZWN0ICYmCisJCXNoaWZ0ICYmCisJCWZvciByZWYgaW4gIiRAIgorCQlkbworCQkJZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvJHJlZiA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsIHx8CisJCQlleGl0CisJCWRvbmUgJiYKKwkJZ2l0IGZzY2sgLS1mdWxsCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5wYXRoMSAmJgorCWdpdCBhZGQgcGF0aDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHJlcG8gJiYKKwl0aGVfZmlyc3RfY29tbWl0PSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCisJPnBhdGgyICYmCisJZ2l0IGFkZCBwYXRoMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisJdGhlX2NvbW1pdD0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRob3V0IHdpbGRjYXJkJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBmZXRjaCAuLiByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIHdpbGRjYXJkJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnVwLnVybCAuLiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS51cC5mZXRjaCAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYKKwkJZ2l0IGZldGNoIHVwICYmCisKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggaW5zdGVhZE9mJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwkoCisJCVRSQVNIPSQocHdkKS8gJiYKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNvbmZpZyAidXJsLiRUUkFTSC5pbnN0ZWFkT2YiIHRyYXNoLyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS51cC51cmwgdHJhc2gvLiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS51cC5mZXRjaCAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYKKwkJZ2l0IGZldGNoIHVwICYmCisKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggcHVzaEluc3RlYWRPZiAoc2hvdWxkIG5vdCByZXdyaXRlKScgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJKAorCQlUUkFTSD0kKHB3ZCkvICYmCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjb25maWcgInVybC50cmFzaC8ucHVzaEluc3RlYWRPZiIgIiRUUkFTSCIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAudXJsICIkVFJBU0guIiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS51cC5mZXRjaCAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYKKwkJZ2l0IGZldGNoIHVwICYmCisKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aG91dCB3aWxkY2FyZCcgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisKKwlnaXQgcHVzaCB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCB3aWxkY2FyZCcgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisKKwlnaXQgcHVzaCB0ZXN0cmVwbyAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggaW5zdGVhZE9mJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwlUUkFTSD0iJChwd2QpLyIgJiYKKwl0ZXN0X2NvbmZpZyAidXJsLiRUUkFTSC5pbnN0ZWFkT2YiIHRyYXNoLyAmJgorCWdpdCBwdXNoIHRyYXNoL3Rlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHB1c2hJbnN0ZWFkT2YnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCVRSQVNIPSIkKHB3ZCkvIiAmJgorCXRlc3RfY29uZmlnICJ1cmwuJFRSQVNILnB1c2hJbnN0ZWFkT2YiIHRyYXNoLyAmJgorCWdpdCBwdXNoIHRyYXNoL3Rlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHB1c2hJbnN0ZWFkT2YgYW5kIGV4cGxpY2l0IHB1c2h1cmwgKHB1c2hJbnN0ZWFkT2Ygc2hvdWxkIG5vdCByZXdyaXRlKScgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJdGVzdF9jb25maWcgInVybC50cmFzaDIvLnB1c2hJbnN0ZWFkT2YiIHRlc3RyZXBvLyAmJgorCXRlc3RfY29uZmlnICJ1cmwudHJhc2gzLy5wdXNoSW5zdGVhZE9mIiB0cmFzaC93cm9uZyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5yLnVybCB0cmFzaC93cm9uZyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5yLnB1c2h1cmwgInRlc3RyZXBvLyIgJiYKKwlnaXQgcHVzaCByIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIG1hdGNoaW5nIGhlYWRzJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMgb24gdGhlIGNvbW1hbmQgbGluZScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIChub24tZmFzdC1mb3J3YXJkKSBwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbWFzc2FnZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJHRoZV9jb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tZm9yY2Ugd2l0aCBtYXRjaGluZyBoZWFkcycgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tYXNzYWdlZCAmJgorCWdpdCBwdXNoIC0tZm9yY2UgdGVzdHJlcG8gOiAmJgorCSEgY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkdGhlX2NvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBtYXRjaGluZyBoZWFkcyBhbmQgZm9yY2VkIHVwZGF0ZScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tYXNzYWdlZCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvICs6ICYmCisJISBjaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICR0aGVfY29tbWl0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIG5vIGFtYmlndWl0eSAoMSknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOm1hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBubyBhbWJpZ3VpdHkgKDIpJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIHJlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjpvcmlnaW4vbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbG9uLWxlc3MgcmVmc3BlYywgbm8gYW1iaWd1aXR5JyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciBoZWFkcy90L21hc3RlciAmJgorCWdpdCBicmFuY2ggLWYgdC9tYXN0ZXIgbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvdC9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggd2VhayBhbWJpZ3VpdHkgKDEpJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciByZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6bWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHdlYWsgYW1iaWd1aXR5ICgyKScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIHJlbW90ZXMvYW5vdGhlci9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6bWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIHJlbW90ZXMvYW5vdGhlci9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggYW1iaWd1aXR5JyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL2Zyb3R6IHRhZ3MvZnJvdHogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6ZnJvdHogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9mcm90eiB0YWdzL2Zyb3R6CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbG9uLWxlc3MgcmVmc3BlYyAoMSknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvZnJvdHogdGFncy9mcm90eiAmJgorCWdpdCBicmFuY2ggLWYgZnJvdHogbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gZnJvdHogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9mcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IHRhZ3MvZnJvdHoKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY29sb24tbGVzcyByZWZzcGVjICgyKScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9mcm90eiB0YWdzL2Zyb3R6ICYmCisJaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvZnJvdHoKKwl0aGVuCisJCWdpdCBicmFuY2ggLUQgZnJvdHoKKwlmaSAmJgorCWdpdCB0YWcgLWYgZnJvdHogJiYKKwlnaXQgcHVzaCAtZiB0ZXN0cmVwbyBmcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IHRhZ3MvZnJvdHogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9mcm90egorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb2xvbi1sZXNzIHJlZnNwZWMgKDMpJyAnCisKKwlta190ZXN0IHRlc3RyZXBvICYmCisJaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIHJlZnMvdGFncy9mcm90egorCXRoZW4KKwkJZ2l0IHRhZyAtZCBmcm90egorCWZpICYmCisJZ2l0IGJyYW5jaCAtZiBmcm90eiBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBmcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2Zyb3R6ICYmCisJdGVzdCAxID0gJCggY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIHwgd2MgLWwgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY29sb24tbGVzcyByZWZzcGVjICg0KScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyAmJgorCWlmIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSByZWZzL2hlYWRzL2Zyb3R6CisJdGhlbgorCQlnaXQgYnJhbmNoIC1EIGZyb3R6CisJZmkgJiYKKwlnaXQgdGFnIC1mIGZyb3R6ICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gZnJvdHogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCB0YWdzL2Zyb3R6ICYmCisJdGVzdCAxID0gJCggY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIHwgd2MgLWwgKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggaGVhZCB3aXRoIG5vbi1leGlzdGVudCwgaW5jb21wbGV0ZSBkZXN0JyAnCisKKwlta190ZXN0IHRlc3RyZXBvICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOmJyYW5jaCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2JyYW5jaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdGFnIHdpdGggbm9uLWV4aXN0ZW50LCBpbmNvbXBsZXRlIGRlc3QnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gJiYKKwlnaXQgdGFnIC1mIHYxLjAgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyB2MS4wOnRhZyAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IHRhZ3MvdGFnCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBzaGExIHdpdGggbm9uLWV4aXN0ZW50LCBpbmNvbXBsZXRlIGRlc3QnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKTpmb28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHJlZiBleHByZXNzaW9uIHdpdGggbm9uLWV4aXN0ZW50LCBpbmNvbXBsZXRlIGRlc3QnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXJeOmJyYW5jaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBIRUFEJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBIRUFEICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIEhFQUQgbm9uZXhpc3RpbmcgYXQgcmVtb3RlJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBsb2NhbCBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBIRUFEICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbG9jYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoICtIRUFEJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1EIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvY2FsICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyIGxvY2FsICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbG9jYWwgJiYKKworCSMgV2l0aG91dCBmb3JjZSByZXdpbmRpbmcgc2hvdWxkIGZhaWwKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gSEVBRCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2xvY2FsICYmCisKKwkjIFdpdGggZm9yY2UgcmV3aW5kaW5nIHNob3VsZCBzdWNjZWVkCisJZ2l0IHB1c2ggdGVzdHJlcG8gK0hFQUQgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9sb2NhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggSEVBRCB3aXRoIG5vbi1leGlzdGVudCwgaW5jb21wbGV0ZSBkZXN0JyAnCisKKwlta190ZXN0IHRlc3RyZXBvICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIEhFQUQ6YnJhbmNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvYnJhbmNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbmZpZyByZW1vdGUuKi5wdXNoID0gSEVBRCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9sb2NhbCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1mIGxvY2FsICR0aGVfY29tbWl0ICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY2hlY2tvdXQgbG9jYWwgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAkdGhlX2ZpcnN0X2NvbW1pdAorCSkgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUudGhlcmUudXJsIHRlc3RyZXBvICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnRoZXJlLnB1c2ggSEVBRCAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHRoZXJlICYmCisJZ2l0IHB1c2ggJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9sb2NhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcmVtb3RlLnB1c2hkZWZhdWx0JyAnCisJbWtfdGVzdCB1cF9yZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX3Rlc3QgZG93bl9yZXBvIGhlYWRzL21hc3RlciAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS51cC51cmwgdXBfcmVwbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5kb3duLnVybCBkb3duX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB1cCAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBkb3duICYmCisJdGVzdF9jb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJZ2l0IHB1c2ggJiYKKwljaGVja19wdXNoX3Jlc3VsdCB1cF9yZXBvICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IGRvd25fcmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbmZpZyByZW1vdGUuKi5wdXNodXJsJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUudGhlcmUudXJsIHRlc3QycmVwbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS50aGVyZS5wdXNodXJsIHRlc3RyZXBvICYmCisJZ2l0IHB1c2ggdGhlcmUgOiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY29uZmlnIGJyYW5jaC4qLnB1c2hyZW1vdGUnICcKKwlta190ZXN0IHVwX3JlcG8gaGVhZHMvbWFzdGVyICYmCisJbWtfdGVzdCBzaWRlX3JlcG8gaGVhZHMvbWFzdGVyICYmCisJbWtfdGVzdCBkb3duX3JlcG8gaGVhZHMvbWFzdGVyICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnVwLnVybCB1cF9yZXBvICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0IHNpZGVfcmVwbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5kb3duLnVybCBkb3duX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB1cCAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucHVzaHJlbW90ZSBkb3duICYmCisJdGVzdF9jb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJZ2l0IHB1c2ggJiYKKwljaGVja19wdXNoX3Jlc3VsdCB1cF9yZXBvICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHNpZGVfcmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCBkb3duX3JlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaC4qLnB1c2hyZW1vdGUgY29uZmlnIG9yZGVyIGlzIGlycmVsZXZhbnQnICcKKwlta190ZXN0IG9uZV9yZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX3Rlc3QgdHdvX3JlcG8gaGVhZHMvbWFzdGVyICYmCisJdGVzdF9jb25maWcgcmVtb3RlLm9uZS51cmwgb25lX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUudHdvLnVybCB0d29fcmVwbyAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucHVzaHJlbW90ZSB0d29fcmVwbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBvbmVfcmVwbyAmJgorCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWdpdCBwdXNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgb25lX3JlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdHdvX3JlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBkcnktcnVuJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW9sZF9jb21taXQ9JChnaXQgLUMgdGVzdHJlcG8gc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJZ2l0IHB1c2ggLS1kcnktcnVuIHRlc3RyZXBvIDogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkb2xkX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1cGRhdGVzIGxvY2FsIHJlZnMnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQgJiYKKwkoCisJCWNkIGNoaWxkICYmCisJCWdpdCBwdWxsIC4uIG1hc3RlciAmJgorCQlnaXQgcHVzaCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gXAorCQkJJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL21hc3RlcikKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1cGRhdGVzIHVwLXRvLWRhdGUgbG9jYWwgcmVmcycgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZDEgJiYKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZDIgJiYKKwkoY2QgY2hpbGQxICYmIGdpdCBwdWxsIC4uIG1hc3RlciAmJiBnaXQgcHVzaCkgJiYKKwkoCisJCWNkIGNoaWxkMiAmJgorCQlnaXQgcHVsbCAuLi9jaGlsZDEgbWFzdGVyICYmCisJCWdpdCBwdXNoICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSBcCisJCQkkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHByZXNlcnZlcyB1cC10by1kYXRlIHBhY2tlZCByZWZzJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkICYmCisJKAorCQljZCBjaGlsZCAmJgorCQlnaXQgcHVzaCAmJgorCQkhIHRlc3QgLWYgLmdpdC9yZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGRvZXMgbm90IHVwZGF0ZSBsb2NhbCByZWZzIG9uIGZhaWx1cmUnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQgJiYKKwlta2RpciB0ZXN0cmVwby8uZ2l0L2hvb2tzICYmCisJZWNobyAiIyEvbm8vZnJvYm5pY2F0aW9uL3RvZGF5IiA+dGVzdHJlcG8vLmdpdC9ob29rcy9wcmUtcmVjZWl2ZSAmJgorCWNobW9kICt4IHRlc3RyZXBvLy5naXQvaG9va3MvcHJlLXJlY2VpdmUgJiYKKwkoCisJCWNkIGNoaWxkICYmCisJCWdpdCBwdWxsIC4uIG1hc3RlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICE9IFwKKwkJCSQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9tYXN0ZXIpCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IGRlbGV0aW5nIGFuIGludmFsaWQgcmVtb3RlIHJlZicgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlybSAtZiB0ZXN0cmVwby8uZ2l0L29iamVjdHMvPz8vKiAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDpyZWZzL2hlYWRzL21hc3RlciAmJgorCShjZCB0ZXN0cmVwbyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2hpbmcgdmFsaWQgcmVmcyB0cmlnZ2VycyBwb3N0LXJlY2VpdmUgYW5kIHBvc3QtdXBkYXRlIGhvb2tzJyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIHRlc3RyZXBvIGhlYWRzL21hc3RlciBoZWFkcy9uZXh0ICYmCisJb3JnbWFzdGVyPSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW5ld21hc3Rlcj0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlvcmduZXh0PSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV4dCkgJiYKKwluZXduZXh0PSRaRVJPX09JRCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyIDpyZWZzL2hlYWRzL25leHQgJiYKKwkoCisJCWNkIHRlc3RyZXBvLy5naXQgJiYKKwkJY2F0ID5wcmUtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRvcmdtYXN0ZXIgJG5ld21hc3RlciByZWZzL2hlYWRzL21hc3RlcgorCQkkb3JnbmV4dCAkbmV3bmV4dCByZWZzL2hlYWRzL25leHQKKwkJRU9GCisKKwkJY2F0ID51cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlciAkb3JnbWFzdGVyICRuZXdtYXN0ZXIKKwkJcmVmcy9oZWFkcy9uZXh0ICRvcmduZXh0ICRuZXduZXh0CisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJG9yZ21hc3RlciAkbmV3bWFzdGVyIHJlZnMvaGVhZHMvbWFzdGVyCisJCSRvcmduZXh0ICRuZXduZXh0IHJlZnMvaGVhZHMvbmV4dAorCQlFT0YKKworCQljYXQgPnBvc3QtdXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIKKwkJcmVmcy9oZWFkcy9uZXh0CisJCUVPRgorCisJCXRlc3RfY21wIHByZS1yZWNlaXZlLmV4cGVjdCBwcmUtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgdXBkYXRlLmV4cGVjdCB1cGRhdGUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtcmVjZWl2ZS5leHBlY3QgcG9zdC1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXVwZGF0ZS5leHBlY3QgcG9zdC11cGRhdGUuYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBkYW5nbGluZyByZWYgdHJpZ2dlcnMgaG9va3Mgd2l0aCBjb3JyZWN0IGFyZ3MnICcKKwlta190ZXN0X3dpdGhfaG9va3MgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWYgdGVzdHJlcG8vLmdpdC9vYmplY3RzLz8/LyogJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvLy5naXQgJiYKKwkJY2F0ID5wcmUtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRaRVJPX09JRCAkWkVST19PSUQgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJRU9GCisKKwkJY2F0ID51cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlciAkWkVST19PSUQgJFpFUk9fT0lECisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJFpFUk9fT0lEICRaRVJPX09JRCByZWZzL2hlYWRzL21hc3RlcgorCQlFT0YKKworCQljYXQgPnBvc3QtdXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIKKwkJRU9GCisKKwkJdGVzdF9jbXAgcHJlLXJlY2VpdmUuZXhwZWN0IHByZS1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCB1cGRhdGUuZXhwZWN0IHVwZGF0ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC1yZWNlaXZlLmV4cGVjdCBwb3N0LXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtdXBkYXRlLmV4cGVjdCBwb3N0LXVwZGF0ZS5hY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW9uIG9mIGEgbm9uLWV4aXN0ZW50IHJlZiBpcyBub3QgZmVkIHRvIHBvc3QtcmVjZWl2ZSBhbmQgcG9zdC11cGRhdGUgaG9va3MnICcKKwlta190ZXN0X3dpdGhfaG9va3MgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJb3JnbWFzdGVyPSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW5ld21hc3Rlcj0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgOnJlZnMvaGVhZHMvbm9uZXhpc3RlbnQgJiYKKwkoCisJCWNkIHRlc3RyZXBvLy5naXQgJiYKKwkJY2F0ID5wcmUtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRvcmdtYXN0ZXIgJG5ld21hc3RlciByZWZzL2hlYWRzL21hc3RlcgorCQkkWkVST19PSUQgJFpFUk9fT0lEIHJlZnMvaGVhZHMvbm9uZXhpc3RlbnQKKwkJRU9GCisKKwkJY2F0ID51cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlciAkb3JnbWFzdGVyICRuZXdtYXN0ZXIKKwkJcmVmcy9oZWFkcy9ub25leGlzdGVudCAkWkVST19PSUQgJFpFUk9fT0lECisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJG9yZ21hc3RlciAkbmV3bWFzdGVyIHJlZnMvaGVhZHMvbWFzdGVyCisJCUVPRgorCisJCWNhdCA+cG9zdC11cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlcgorCQlFT0YKKworCQl0ZXN0X2NtcCBwcmUtcmVjZWl2ZS5leHBlY3QgcHJlLXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHVwZGF0ZS5leHBlY3QgdXBkYXRlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXJlY2VpdmUuZXhwZWN0IHBvc3QtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC11cGRhdGUuZXhwZWN0IHBvc3QtdXBkYXRlLmFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpb24gb2YgYSBub24tZXhpc3RlbnQgcmVmIGFsb25lIGRvZXMgdHJpZ2dlciBwb3N0LXJlY2VpdmUgYW5kIHBvc3QtdXBkYXRlIGhvb2tzJyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDpyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkWkVST19PSUQgJFpFUk9fT0lEIHJlZnMvaGVhZHMvbm9uZXhpc3RlbnQKKwkJRU9GCisKKwkJY2F0ID51cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICRaRVJPX09JRCAkWkVST19PSUQKKwkJRU9GCisKKwkJdGVzdF9jbXAgcHJlLXJlY2VpdmUuZXhwZWN0IHByZS1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCB1cGRhdGUuZXhwZWN0IHVwZGF0ZS5hY3R1YWwgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgcG9zdC1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBwb3N0LXVwZGF0ZS5hY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkIHJlZiB1cGRhdGVzLCBkZWxldGVzLCBpbnZhbGlkIGRlbGV0ZXMgdHJpZ2dlciBob29rcyB3aXRoIGNvcnJlY3QgaW5wdXQnICcKKwlta190ZXN0X3dpdGhfaG9va3MgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIGhlYWRzL25leHQgaGVhZHMvcHUgJiYKKwlvcmdtYXN0ZXI9JChjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJbmV3bWFzdGVyPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW9yZ25leHQ9JChjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXh0KSAmJgorCW5ld25leHQ9JFpFUk9fT0lEICYmCisJb3JncHU9JChjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9wdSkgJiYKKwluZXdwdT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciBcCisJICAgIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvcHUgOnJlZnMvaGVhZHMvbmV4dCBcCisJICAgIDpyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJJG9yZ25leHQgJG5ld25leHQgcmVmcy9oZWFkcy9uZXh0CisJCSRvcmdwdSAkbmV3cHUgcmVmcy9oZWFkcy9wdQorCQkkWkVST19PSUQgJFpFUk9fT0lEIHJlZnMvaGVhZHMvbm9uZXhpc3RlbnQKKwkJRU9GCisKKwkJY2F0ID51cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlciAkb3JnbWFzdGVyICRuZXdtYXN0ZXIKKwkJcmVmcy9oZWFkcy9uZXh0ICRvcmduZXh0ICRuZXduZXh0CisJCXJlZnMvaGVhZHMvcHUgJG9yZ3B1ICRuZXdwdQorCQlyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICRaRVJPX09JRCAkWkVST19PSUQKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJJG9yZ25leHQgJG5ld25leHQgcmVmcy9oZWFkcy9uZXh0CisJCSRvcmdwdSAkbmV3cHUgcmVmcy9oZWFkcy9wdQorCQlFT0YKKworCQljYXQgPnBvc3QtdXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIKKwkJcmVmcy9oZWFkcy9uZXh0CisJCXJlZnMvaGVhZHMvcHUKKwkJRU9GCisKKwkJdGVzdF9jbXAgcHJlLXJlY2VpdmUuZXhwZWN0IHByZS1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCB1cGRhdGUuZXhwZWN0IHVwZGF0ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC1yZWNlaXZlLmV4cGVjdCBwb3N0LXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtdXBkYXRlLmV4cGVjdCBwb3N0LXVwZGF0ZS5hY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IGRlbGV0aW5nIGEgcmVmIHVzaW5nIC0tZGVsZXRlJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IHdhcm4pICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gLS1kZWxldGUgbWFzdGVyICYmCisJKGNkIHRlc3RyZXBvICYmIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IGRlbGV0aW5nIGEgdGFnIHVzaW5nIC0tZGVsZXRlJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgdGFnIC1hIC1tIGR1bW15X21lc3NhZ2UgZGVsdGFnIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIC0tdGFncyAmJgorCShjZCB0ZXN0cmVwbyAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIHJlZnMvdGFncy9kZWx0YWcpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gLS1kZWxldGUgdGFnIGRlbHRhZyAmJgorCShjZCB0ZXN0cmVwbyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9kZWx0YWcpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1kZWxldGUgd2l0aG91dCBhcmdzIGFib3J0cycgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gLS1kZWxldGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWRlbGV0ZSByZWZ1c2VzIHNyYzpkZXN0IHJlZnNwZWNzJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyAtLWRlbGV0ZSBtYXN0ZXI6Zm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhcm4gb24gcHVzaCB0byBIRUFEIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnknICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybgorCSkgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgMj5zdGRlcnIgJiYKKwlncmVwICJ3YXJuaW5nOiB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2giIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZW55IHB1c2ggdG8gSEVBRCBvZiBub24tYmFyZSByZXBvc2l0b3J5JyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHRydWUKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IHB1c2ggdG8gSEVBRCBvZiBiYXJlIHJlcG9zaXRvcnkgKGJhcmUpJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmJhcmUgdHJ1ZQorCSkgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgMj5zdGRlcnIgJiYKKwkhIGdyZXAgIndhcm5pbmc6IHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IHB1c2ggdG8gSEVBRCBvZiBub24tYmFyZSByZXBvc2l0b3J5IChjb25maWcpJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGZhbHNlCisJKSAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAyPnN0ZGVyciAmJgorCSEgZ3JlcCAid2FybmluZzogdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBicmFuY2hlcycgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJZ2l0IGJyYW5jaCBzZWNvbmQgJHRoZV9maXJzdF9jb21taXQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZWNobyAiLi4iID4gdGVzdHJlcG8vLmdpdC9icmFuY2hlcy9icmFuY2gxICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgZmV0Y2ggYnJhbmNoMSAmJgorCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9oZWFkcy9icmFuY2gxIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGJyYW5jaGVzIGNvbnRhaW5pbmcgIycgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJZWNobyAiLi4jc2Vjb25kIiA+IHRlc3RyZXBvLy5naXQvYnJhbmNoZXMvYnJhbmNoMiAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGZldGNoIGJyYW5jaDIgJiYKKwkJZWNobyAiJHRoZV9maXJzdF9jb21taXQgY29tbWl0CXJlZnMvaGVhZHMvYnJhbmNoMiIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGJyYW5jaGVzJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZWNobyAidGVzdHJlcG8iID4gLmdpdC9icmFuY2hlcy9icmFuY2gxICYmCisJZ2l0IHB1c2ggYnJhbmNoMSAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyAiJHRoZV9maXJzdF9jb21taXQgY29tbWl0CXJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBicmFuY2hlcyBjb250YWluaW5nICMnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCWVjaG8gInRlc3RyZXBvI2JyYW5jaDMiID4gLmdpdC9icmFuY2hlcy9icmFuY2gyICYmCisJZ2l0IHB1c2ggYnJhbmNoMiAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyAiJHRoZV9maXJzdF9jb21taXQgY29tbWl0CXJlZnMvaGVhZHMvYnJhbmNoMyIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBpbnRvIGFsaWFzZWQgcmVmcyAoY29uc2lzdGVudCknICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMSAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMiAmJgorCSgKKwkJY2QgY2hpbGQxICYmCisJCWdpdCBicmFuY2ggZm9vICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9iYXIgcmVmcy9oZWFkcy9mb28gJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGZhbHNlCisJKSAmJgorCSgKKwkJY2QgY2hpbGQyICYmCisJCT5wYXRoMiAmJgorCQlnaXQgYWRkIHBhdGgyICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGNoaWxkMiAmJgorCQlnaXQgYnJhbmNoIGZvbyAmJgorCQlnaXQgYnJhbmNoIGJhciAmJgorCQlnaXQgcHVzaCAuLi9jaGlsZDEgZm9vIGJhcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBpbnRvIGFsaWFzZWQgcmVmcyAoaW5jb25zaXN0ZW50KScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQxICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQyICYmCisJKAorCQljZCBjaGlsZDEgJiYKKwkJZ2l0IGJyYW5jaCBmb28gJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL2JhciByZWZzL2hlYWRzL2ZvbyAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggZmFsc2UKKwkpICYmCisJKAorCQljZCBjaGlsZDIgJiYKKwkJPnBhdGgyICYmCisJCWdpdCBhZGQgcGF0aDIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gY2hpbGQyICYmCisJCWdpdCBicmFuY2ggZm9vICYmCisJCT5wYXRoMyAmJgorCQlnaXQgYWRkIHBhdGgzICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGNoaWxkMiAmJgorCQlnaXQgYnJhbmNoIGJhciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAuLi9jaGlsZDEgZm9vIGJhciAyPnN0ZGVyciAmJgorCQlncmVwICJyZWZ1c2luZyBpbmNvbnNpc3RlbnQgdXBkYXRlIiBzdGRlcnIKKwkpCisnCisKK3Rlc3RfZm9yY2VfcHVzaF90YWcgKCkgeworCXRhZ190eXBlX2Rlc2NyaXB0aW9uPSQxCisJdGFnX2FyZ3M9JDIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvcmNlIHB1c2hpbmcgcmVxdWlyZWQgdG8gdXBkYXRlICR0YWdfdHlwZV9kZXNjcmlwdGlvbiIgIgorCQlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCQlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZDEgJiYKKwkJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQyICYmCisJCSgKKwkJCWNkIGNoaWxkMSAmJgorCQkJZ2l0IHRhZyB0ZXN0VGFnICYmCisJCQlnaXQgcHVzaCAuLi9jaGlsZDIgdGVzdFRhZyAmJgorCQkJPmZpbGUxICYmCisJCQlnaXQgYWRkIGZpbGUxICYmCisJCQlnaXQgY29tbWl0IC1tICdmaWxlMScgJiYKKwkJCWdpdCB0YWcgJHRhZ19hcmdzIHRlc3RUYWcgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC4uL2NoaWxkMiB0ZXN0VGFnICYmCisJCQlnaXQgcHVzaCAtLWZvcmNlIC4uL2NoaWxkMiB0ZXN0VGFnICYmCisJCQlnaXQgdGFnICR0YWdfYXJncyB0ZXN0VGFnIEhFQUR+ICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAuLi9jaGlsZDIgdGVzdFRhZyAmJgorCQkJZ2l0IHB1c2ggLS1mb3JjZSAuLi9jaGlsZDIgdGVzdFRhZyAmJgorCisJCQkjIENsb2JiZXJpbmcgd2l0aG91dCArIGluIHJlZnNwZWMgbmVlZHMgLS1mb3JjZQorCQkJZ2l0IHRhZyAtZiB0ZXN0VGFnICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAuLi9jaGlsZDIgJ3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJyAmJgorCQkJZ2l0IHB1c2ggLS1mb3JjZSAuLi9jaGlsZDIgJ3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJyAmJgorCisJCQkjIENsb2JiZXJpbmcgd2l0aCArIGluIHJlZnNwZWMgZG9lcyBub3QgbmVlZCAtLWZvcmNlCisJCQlnaXQgdGFnIC1mIHRlc3RUYWcgSEVBRH4gJiYKKwkJCWdpdCBwdXNoIC4uL2NoaWxkMiAnK3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJyAmJgorCisJCQkjIENsb2JiZXJpbmcgd2l0aCAtLW5vLWZvcmNlIHN0aWxsIG9iZXlzICsgaW4gcmVmc3BlYworCQkJZ2l0IHRhZyAtZiB0ZXN0VGFnICYmCisJCQlnaXQgcHVzaCAtLW5vLWZvcmNlIC4uL2NoaWxkMiAnK3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJyAmJgorCisJCQkjIENsb2JiZXJpbmcgd2l0aC93aXRob3V0IC0tZm9yY2UgYW5kICd0YWcgPG5hbWU+JyBmb3JtYXQKKwkJCWdpdCB0YWcgLWYgdGVzdFRhZyBIRUFEfiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4vY2hpbGQyIHRhZyB0ZXN0VGFnICYmCisJCQlnaXQgcHVzaCAtLWZvcmNlIC4uL2NoaWxkMiB0YWcgdGVzdFRhZworCQkpCisJIgorfQorCit0ZXN0X2ZvcmNlX3B1c2hfdGFnICJsaWdodHdlaWdodCB0YWciICItZiIKK3Rlc3RfZm9yY2VfcHVzaF90YWcgImFubm90YXRlZCB0YWciICItZiAtYSAtbSd0YWcgbWVzc2FnZSciCisKK3Rlc3RfZm9yY2VfZmV0Y2hfdGFnICgpIHsKKwl0YWdfdHlwZV9kZXNjcmlwdGlvbj0kMQorCXRhZ19hcmdzPSQyCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCB3aWxsIG5vdCBjbG9iYmVyIGFuIGV4aXN0aW5nICR0YWdfdHlwZV9kZXNjcmlwdGlvbiB3aXRob3V0IC0tZm9yY2UiICIKKwkJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwkJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQxICYmCisJCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMiAmJgorCQkoCisJCQljZCB0ZXN0cmVwbyAmJgorCQkJZ2l0IHRhZyB0ZXN0VGFnICYmCisJCQlnaXQgLUMgLi4vY2hpbGQxIGZldGNoIG9yaWdpbiB0YWcgdGVzdFRhZyAmJgorCQkJPmZpbGUxICYmCisJCQlnaXQgYWRkIGZpbGUxICYmCisJCQlnaXQgY29tbWl0IC1tICdmaWxlMScgJiYKKwkJCWdpdCB0YWcgJHRhZ19hcmdzIHRlc3RUYWcgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyAuLi9jaGlsZDEgZmV0Y2ggb3JpZ2luIHRhZyB0ZXN0VGFnICYmCisJCQlnaXQgLUMgLi4vY2hpbGQxIGZldGNoIG9yaWdpbiAnK3JlZnMvdGFncy8qOnJlZnMvdGFncy8qJworCQkpCisJIgorfQorCit0ZXN0X2ZvcmNlX2ZldGNoX3RhZyAibGlnaHR3ZWlnaHQgdGFnIiAiLWYiCit0ZXN0X2ZvcmNlX2ZldGNoX3RhZyAiYW5ub3RhdGVkIHRhZyIgIi1mIC1hIC1tJ3RhZyBtZXNzYWdlJyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXBvcmNlbGFpbicgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJZWNobyA+LmdpdC9mb28gICJUbyB0ZXN0cmVwbyIgJiYKKwllY2hvID4+LmdpdC9mb28gIioJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIJW25ldyBicmFuY2hdIiAgJiYKKwllY2hvID4+LmdpdC9mb28gIkRvbmUiICYmCisJZ2l0IHB1c2ggPi5naXQvYmFyIC0tcG9yY2VsYWluICB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgLmdpdC9mb28gLmdpdC9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXBvcmNlbGFpbiBiYWQgdXJsJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCA+LmdpdC9iYXIgLS1wb3JjZWxhaW4gYXNkZmFzZGZhc2QgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkhIGdyZXAgLXEgRG9uZSAuZ2l0L2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tcG9yY2VsYWluIHJlamVjdGVkJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCShjZCB0ZXN0cmVwbyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXJeICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB0cnVlKSAmJgorCisJZWNobyA+LmdpdC9mb28gICJUbyB0ZXN0cmVwbyIgICYmCisJZWNobyA+Pi5naXQvZm9vICIhCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCVtyZW1vdGUgcmVqZWN0ZWRdIChicmFuY2ggaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0KSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoID4uZ2l0L2JhciAtLXBvcmNlbGFpbiAgdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X2NtcCAuZ2l0L2ZvbyAuZ2l0L2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tcG9yY2VsYWluIC0tZHJ5LXJ1biByZWplY3RlZCcgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB0cnVlKSAmJgorCisJZWNobyA+LmdpdC9mb28gICJUbyB0ZXN0cmVwbyIgICYmCisJZWNobyA+Pi5naXQvZm9vICIhCXJlZnMvaGVhZHMvbWFzdGVyXjpyZWZzL2hlYWRzL21hc3RlcglbcmVqZWN0ZWRdIChub24tZmFzdC1mb3J3YXJkKSIgJiYKKwllY2hvID4+LmdpdC9mb28gIkRvbmUiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCA+LmdpdC9iYXIgLS1wb3JjZWxhaW4gIC0tZHJ5LXJ1biB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3Rlcl46cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X2NtcCAuZ2l0L2ZvbyAuZ2l0L2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tcHJ1bmUnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciBoZWFkcy9zZWNvbmQgaGVhZHMvZm9vIGhlYWRzL2JhciAmJgorCWdpdCBwdXNoIC0tcHJ1bmUgdGVzdHJlcG8gOiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL3NlY29uZCAmJgorCSEgY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvZm9vIGhlYWRzL2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tcHJ1bmUgcmVmc3BlYycgJworCW1rX3Rlc3QgdGVzdHJlcG8gdG1wL21hc3RlciB0bXAvc2Vjb25kIHRtcC9mb28gdG1wL2JhciAmJgorCWdpdCBwdXNoIC0tcHJ1bmUgdGVzdHJlcG8gInJlZnMvaGVhZHMvKjpyZWZzL3RtcC8qIiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IHRtcC9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCB0bXAvc2Vjb25kICYmCisJISBjaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCB0bXAvZm9vIHRtcC9iYXIKKycKKworZm9yIGNvbmZpZ3NlY3Rpb24gaW4gdHJhbnNmZXIgcmVjZWl2ZQorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwdXNoIHRvIHVwZGF0ZSBhIHJlZiBoaWRkZW4gYnkgJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMiICcKKwkJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgaGlkZGVuL29uZSBoaWRkZW4vdHdvIGhpZGRlbi90aHJlZSAmJgorCQkoCisJCQljZCB0ZXN0cmVwbyAmJgorCQkJZ2l0IGNvbmZpZyAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyByZWZzL2hpZGRlbgorCQkpICYmCisKKwkJIyBwdXNoIHRvIHVuaGlkZGVuIHJlZiBzdWNjZWVkcyBub3JtYWxseQorCQlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisKKwkJIyBwdXNoIHRvIHVwZGF0ZSBhIGhpZGRlbiByZWYgc2hvdWxkIGZhaWwKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOnJlZnMvaGlkZGVuL29uZSAmJgorCQljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoaWRkZW4vb25lICYmCisKKwkJIyBwdXNoIHRvIGRlbGV0ZSBhIGhpZGRlbiByZWYgc2hvdWxkIGZhaWwKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gOnJlZnMvaGlkZGVuL3R3byAmJgorCQljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoaWRkZW4vdHdvICYmCisKKwkJIyBpZGVtcG90ZW50IHB1c2ggdG8gdXBkYXRlIGEgaGlkZGVuIHJlZiBzaG91bGQgZmFpbAorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdDpyZWZzL2hpZGRlbi90aHJlZSAmJgorCQljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoaWRkZW4vdGhyZWUKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGV4YWN0IFNIQTEnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciBoaWRkZW4vb25lICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOnJlZnMvaGlkZGVuL29uZSAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci5oaWRlcmVmcyByZWZzL2hpZGRlbgorCSkgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoaWRkZW4vb25lICYmCisKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZCAmJgorCSgKKwkJY2QgY2hpbGQgJiYKKworCQkjIG1ha2Ugc3VyZSAkdGhlX2NvbW1pdCBkb2VzIG5vdCBleGlzdCBoZXJlCisJCWdpdCByZXBhY2sgLWEgLWQgJiYKKwkJZ2l0IHBydW5lICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtdCAkdGhlX2NvbW1pdCAmJgorCisJCSMgU29tZSBwcm90b2NvbCB2ZXJzaW9ucyAoZS5nLiAyKSBzdXBwb3J0IGZldGNoaW5nCisJCSMgdW5hZHZlcnRpc2VkIG9iamVjdHMsIHNvIHJlc3RyaWN0IHRoaXMgdGVzdCB0byB2MC4KKworCQkjIGZldGNoaW5nIHRoZSBoaWRkZW4gb2JqZWN0IHNob3VsZCBmYWlsIGJ5IGRlZmF1bHQKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBcCisJCQlnaXQgZmV0Y2ggLXYgLi4vdGVzdHJlcG8gJHRoZV9jb21taXQ6cmVmcy9oZWFkcy9jb3B5IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIlNlcnZlciBkb2VzIG5vdCBhbGxvdyByZXF1ZXN0IGZvciB1bmFkdmVydGlzZWQgb2JqZWN0IiBlcnIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2NvcHkgJiYKKworCQkjIHRoZSBzZXJ2ZXIgc2lkZSBjYW4gYWxsb3cgaXQgdG8gc3VjY2VlZAorCQkoCisJCQljZCAuLi90ZXN0cmVwbyAmJgorCQkJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93dGlwc2hhMWlud2FudCB0cnVlCisJCSkgJiYKKworCQlnaXQgZmV0Y2ggLXYgLi4vdGVzdHJlcG8gJHRoZV9jb21taXQ6cmVmcy9oZWFkcy9jb3B5IG1hc3RlcjpyZWZzL2hlYWRzL2V4dHJhICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkkdGhlX2NvbW1pdAorCQkkdGhlX2ZpcnN0X2NvbW1pdAorCQlFT0YKKwkJeworCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2NvcHkgJiYKKwkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9leHRyYQorCQl9ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZXhhY3QgU0hBMSBpbiBwcm90b2NvbCB2MicgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIGhpZGRlbi9vbmUgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6cmVmcy9oaWRkZW4vb25lICYmCisJZ2l0IC1DIHRlc3RyZXBvIGNvbmZpZyB0cmFuc2Zlci5oaWRlcmVmcyByZWZzL2hpZGRlbiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhpZGRlbi9vbmUgJiYKKworCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkICYmCisJZ2l0IC1DIGNoaWxkIGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKworCSMgbWFrZSBzdXJlICR0aGVfY29tbWl0IGRvZXMgbm90IGV4aXN0IGhlcmUKKwlnaXQgLUMgY2hpbGQgcmVwYWNrIC1hIC1kICYmCisJZ2l0IC1DIGNoaWxkIHBydW5lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGNoaWxkIGNhdC1maWxlIC10ICR0aGVfY29tbWl0ICYmCisKKwkjIGZldGNoaW5nIHRoZSBoaWRkZW4gb2JqZWN0IHN1Y2NlZWRzIGJ5IGRlZmF1bHQKKwkjIE5FRURTV09SSzogc2hvdWxkIHRoaXMgbWF0Y2ggdGhlIHYwIGJlaGF2aW9yIGluc3RlYWQ/CisJZ2l0IC1DIGNoaWxkIGZldGNoIC12IC4uL3Rlc3RyZXBvICR0aGVfY29tbWl0OnJlZnMvaGVhZHMvY29weQorJworCitmb3IgY29uZmlnYWxsb3d0aXBzaGExaW53YW50IGluIHRydWUgZmFsc2UKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2hhbGxvdyBmZXRjaCByZWFjaGFibGUgU0hBMSAoYnV0IG5vdCBhIHJlZiksIGFsbG93dGlwc2hhMWlud2FudD0kY29uZmlnYWxsb3d0aXBzaGExaW53YW50IiAnCisJCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJCSgKKwkJCWNkIHRlc3RyZXBvICYmCisJCQlnaXQgY29uZmlnIHVwbG9hZHBhY2suYWxsb3d0aXBzaGExaW53YW50ICRjb25maWdhbGxvd3RpcHNoYTFpbndhbnQgJiYKKwkJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmb28gJiYKKwkJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBiYXIKKwkJKSAmJgorCQlTSEExPSQoZ2l0IC0tZ2l0LWRpcj10ZXN0cmVwby8uZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwkJbWtfZW1wdHkgc2hhbGxvdyAmJgorCQkoCisJCQljZCBzaGFsbG93ICYmCisJCQkjIFNvbWUgcHJvdG9jb2wgdmVyc2lvbnMgKGUuZy4gMikgc3VwcG9ydCBmZXRjaGluZworCQkJIyB1bmFkdmVydGlzZWQgb2JqZWN0cywgc28gcmVzdHJpY3QgdGhpcyB0ZXN0IHRvIHYwLgorCQkJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBcCisJCQkJZ2l0IGZldGNoIC0tZGVwdGg9MSAuLi90ZXN0cmVwby8uZ2l0ICRTSEExICYmCisJCQlnaXQgLS1naXQtZGlyPS4uL3Rlc3RyZXBvLy5naXQgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dyZWFjaGFibGVzaGExaW53YW50IHRydWUgJiYKKwkJCWdpdCBmZXRjaCAtLWRlcHRoPTEgLi4vdGVzdHJlcG8vLmdpdCAkU0hBMSAmJgorCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAkU0hBMQorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVueSBmZXRjaCB1bnJlYWNoYWJsZSBTSEExLCBhbGxvd3RpcHNoYTFpbndhbnQ9JGNvbmZpZ2FsbG93dGlwc2hhMWlud2FudCIgJworCQlta19lbXB0eSB0ZXN0cmVwbyAmJgorCQkoCisJCQljZCB0ZXN0cmVwbyAmJgorCQkJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93dGlwc2hhMWlud2FudCAkY29uZmlnYWxsb3d0aXBzaGExaW53YW50ICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFyICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0geHl6CisJCSkgJiYKKwkJU0hBMV8xPSQoZ2l0IC0tZ2l0LWRpcj10ZXN0cmVwby8uZ2l0IHJldi1wYXJzZSBIRUFEXl4pICYmCisJCVNIQTFfMj0kKGdpdCAtLWdpdC1kaXI9dGVzdHJlcG8vLmdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJCVNIQTFfMz0kKGdpdCAtLWdpdC1kaXI9dGVzdHJlcG8vLmdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJKAorCQkJY2QgdGVzdHJlcG8gJiYKKwkJCWdpdCByZXNldCAtLWhhcmQgJFNIQTFfMiAmJgorCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAkU0hBMV8xICYmCisJCQlnaXQgY2F0LWZpbGUgY29tbWl0ICRTSEExXzMKKwkJKSAmJgorCQlta19lbXB0eSBzaGFsbG93ICYmCisJCSgKKwkJCWNkIHNoYWxsb3cgJiYKKwkJCSMgU29tZSBwcm90b2NvbCB2ZXJzaW9ucyAoZS5nLiAyKSBzdXBwb3J0IGZldGNoaW5nCisJCQkjIHVuYWR2ZXJ0aXNlZCBvYmplY3RzLCBzbyByZXN0cmljdCB0aGlzIHRlc3QgdG8gdjAuCisJCQl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJCQlnaXQgZmV0Y2ggLi4vdGVzdHJlcG8vLmdpdCAkU0hBMV8zICYmCisJCQl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJCQlnaXQgZmV0Y2ggLi4vdGVzdHJlcG8vLmdpdCAkU0hBMV8xICYmCisJCQlnaXQgLS1naXQtZGlyPS4uL3Rlc3RyZXBvLy5naXQgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dyZWFjaGFibGVzaGExaW53YW50IHRydWUgJiYKKwkJCWdpdCBmZXRjaCAuLi90ZXN0cmVwby8uZ2l0ICRTSEExXzEgJiYKKwkJCWdpdCBjYXQtZmlsZSBjb21taXQgJFNIQTFfMSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGNvbW1pdCAkU0hBMV8yICYmCisJCQlnaXQgZmV0Y2ggLi4vdGVzdHJlcG8vLmdpdCAkU0hBMV8yICYmCisJCQlnaXQgY2F0LWZpbGUgY29tbWl0ICRTSEExXzIgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQkJCWdpdCBmZXRjaCAuLi90ZXN0cmVwby8uZ2l0ICRTSEExXzMgMj5lcnIgJiYKKwkJCXRlc3RfaTE4bmdyZXAgInJlbW90ZSBlcnJvcjouKm5vdCBvdXIgcmVmLiokU0hBMV8zXCQiIGVycgorCQkpCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmb2xsb3dzIHRhZ3MgYnkgZGVmYXVsdCcgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWZyIHNyYyBkc3QgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgcHVsbCAuLi90ZXN0cmVwbyBtYXN0ZXIgJiYKKwkJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIiB0YWcgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiA+dG1wMSAmJgorCQkoCisJCQljYXQgdG1wMQorCQkJc2VkIC1uICJzfHJlZnMvaGVhZHMvbWFzdGVyJHxyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcnxwIiB0bXAxCisJCSkgfAorCQlzb3J0IC1rIDMgPi4uL2V4cGVjdAorCSkgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLi4vc3JjICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgb3JpZ2luICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwZWVsZWQgYWR2ZXJ0aXNlbWVudHMgYXJlIG5vdCBjb25zaWRlcmVkIHJlZiB0aXBzJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwlnaXQgLUMgdGVzdHJlcG8gY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lICYmCisJZ2l0IC1DIHRlc3RyZXBvIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHR3byAmJgorCWdpdCAtQyB0ZXN0cmVwbyB0YWcgLW0gZm9vIG15dGFnIEhFQUReICYmCisJb2lkPSQoZ2l0IC1DIHRlc3RyZXBvIHJldi1wYXJzZSBteXRhZ157Y29tbWl0fSkgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIFwKKwkJZ2l0IGZldGNoIHRlc3RyZXBvICRvaWQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJTZXJ2ZXIgZG9lcyBub3QgYWxsb3cgcmVxdWVzdCBmb3IgdW5hZHZlcnRpc2VkIG9iamVjdCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2hpbmcgYSBzcGVjaWZpYyByZWYgYXBwbGllcyByZW1vdGUuJG5hbWUucHVzaCBhcyByZWZtYXAnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCXJtIC1mciBzcmMgZHN0ICYmCisJZ2l0IGluaXQgc3JjICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdCAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBwdWxsIC4uL3Rlc3RyZXBvIG1hc3RlciAmJgorCQlnaXQgYnJhbmNoIG5leHQgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuZHN0LnVybCAuLi9kc3QgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuZHN0LnB1c2ggIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3NyYy8qIiAmJgorCQlnaXQgcHVzaCBkc3QgbWFzdGVyICYmCisJCWdpdCBzaG93LXJlZiByZWZzL2hlYWRzL21hc3RlciB8CisJCXNlZCAtZSAic3xyZWZzL2hlYWRzL3xyZWZzL3JlbW90ZXMvc3JjL3wiID4uLi9kc3QvZXhwZWN0CisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL25leHQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJCWdpdCBzaG93LXJlZiByZWZzL3JlbW90ZXMvc3JjL21hc3RlciA+YWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGRzdC9leHBlY3QgZHN0L2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vIHJlbW90ZS4kbmFtZS5wdXNoLCBpdCBpcyBub3QgdXNlZCBhcyByZWZtYXAnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCXJtIC1mciBzcmMgZHN0ICYmCisJZ2l0IGluaXQgc3JjICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdCAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBwdWxsIC4uL3Rlc3RyZXBvIG1hc3RlciAmJgorCQlnaXQgYnJhbmNoIG5leHQgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuZHN0LnVybCAuLi9kc3QgJiYKKwkJZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKwkJZ2l0IHB1c2ggZHN0IG1hc3RlciAmJgorCQlnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgPi4uL2RzdC9leHBlY3QKKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbmV4dCAmJgorCQlnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkc3QvZXhwZWN0IGRzdC9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyByZW1vdGUuJG5hbWUucHVzaCwgdXBzdHJlYW0gbWFwcGluZyBpcyB1c2VkJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlybSAtZnIgc3JjIGRzdCAmJgorCWdpdCBpbml0IHNyYyAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgcHVsbCAuLi90ZXN0cmVwbyBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCBuZXh0ICYmCisJCWdpdCBjb25maWcgcmVtb3RlLmRzdC51cmwgLi4vZHN0ICYmCisJCWdpdCBjb25maWcgcmVtb3RlLmRzdC5mZXRjaCAiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZHN0LyoiICYmCisJCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IHVwc3RyZWFtICYmCisKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvdHJ1bmsgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBkc3QgJiYKKworCQlnaXQgcHVzaCBkc3QgbWFzdGVyICYmCisJCWdpdCBzaG93LXJlZiByZWZzL2hlYWRzL21hc3RlciB8CisJCXNlZCAtZSAic3xyZWZzL2hlYWRzL21hc3RlcnxyZWZzL2hlYWRzL3RydW5rfCIgPi4uL2RzdC9leHBlY3QKKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL25leHQgJiYKKwkJZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvdHJ1bmsgPmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkc3QvZXhwZWN0IGRzdC9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBkb2VzIG5vdCBmb2xsb3cgdGFncyBieSBkZWZhdWx0JyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlybSAtZnIgc3JjIGRzdCAmJgorCWdpdCBpbml0IHNyYyAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgcHVsbCAuLi90ZXN0cmVwbyBtYXN0ZXIgJiYKKwkJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIiB0YWcgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmdXR1cmUgY29tbWl0IiAmJgorCQlnaXQgdGFnIC1tICJmdXR1cmUiIGZ1dHVyZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgPi4uL2V4cGVjdCAmJgorCQlnaXQgcHVzaCAuLi9kc3QgbWFzdGVyCisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1mb2xsb3ctdGFncyBvbmx5IHB1c2hlcyByZWxldmFudCB0YWdzJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlybSAtZnIgc3JjIGRzdCAmJgorCWdpdCBpbml0IHNyYyAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgcHVsbCAuLi90ZXN0cmVwbyBtYXN0ZXIgJiYKKwkJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIiB0YWcgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmdXR1cmUgY29tbWl0IiAmJgorCQlnaXQgdGFnIC1tICJmdXR1cmUiIGZ1dHVyZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgcmVmcy90YWdzL3RhZyA+Li4vZXhwZWN0ICYmCisJCWdpdCBwdXNoIC0tZm9sbG93LXRhZ3MgLi4vZHN0IG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tbm8tdGhpbiBtdXN0IHByb2R1Y2Ugbm9uLXRoaW4gcGFjaycgJworCWNhdCA+PnBhdGgxIDw8XEVPRiAmJgora2VlcCBiYXNlIHZlcnNpb24gb2YgcGF0aDEgYmlnIGVub3VnaCwgY29tcGFyZWQgdG8gdGhlIG5ldyBjaGFuZ2VzCitsYXRlciwgaW4gb3JkZXIgdG8gcGFzcyBzaXplIGhldXJpc3RpY3MgaW4KK2J1aWx0aW4vcGFjay1vYmplY3RzLmM6dHJ5X2RlbHRhKCkKK0VPRgorCWdpdCBjb21taXQgLWFtIGluaXRpYWwgJiYKKwlnaXQgaW5pdCBuby10aGluICYmCisJZ2l0IC0tZ2l0LWRpcj1uby10aGluLy5naXQgY29uZmlnIHJlY2VpdmUudW5wYWNrbGltaXQgMCAmJgorCWdpdCBwdXNoIG5vLXRoaW4vLmdpdCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL2ZvbyAmJgorCWVjaG8gbW9kaWZpZWQgPj4gcGF0aDEgJiYKKwlnaXQgY29tbWl0IC1hbSBtb2RpZmllZCAmJgorCWdpdCByZXBhY2sgLWFkZiAmJgorCXJjdnBjaz0iZ2l0IHJlY2VpdmUtcGFjayAtLXJlamVjdC10aGluLXBhY2stZm9yLXRlc3RpbmciICYmCisJZ2l0IHB1c2ggLS1uby10aGluIC0tcmVjZWl2ZS1wYWNrPSIkcmN2cGNrIiBuby10aGluLy5naXQgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBhIHRhZyBwdXNoZXMgdGhlIHRhZ2dlZCBvYmplY3QnICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCWJsb2I9JChlY2hvIHVucmVmZXJlbmNlZCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWdpdCB0YWcgLW0gZm9vIHRhZy1vZi1ibG9iICRibG9iICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdC5naXQgJiYKKwlnaXQgcHVzaCBkc3QuZ2l0IHRhZy1vZi1ibG9iICYmCisJIyB0aGUgcmVjZWl2aW5nIGluZGV4LXBhY2sgc2hvdWxkIGhhdmUgbm90aWNlZAorCSMgYW55IHByb2JsZW1zLCBidXQgd2UgZG91YmxlIGNoZWNrCisJZWNobyB1bnJlZmVyZW5jZWQgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0LmdpdCBjYXQtZmlsZSBibG9iIHRhZy1vZi1ibG9iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggaW50byBiYXJlIHJlc3BlY3RzIGNvcmUubG9nYWxscmVmdXBkYXRlcycgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdC5naXQgJiYKKwlnaXQgLUMgZHN0LmdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIHRydWUgJiYKKworCSMgZG91YmxlIHB1c2ggdG8gdGVzdCBib3RoIHdpdGggYW5kIHdpdGhvdXQKKwkjIHRoZSBhY3R1YWwgcGFjayB0cmFuc2ZlcgorCWdpdCBwdXNoIGRzdC5naXQgbWFzdGVyOm9uZSAmJgorCWVjaG8gIm9uZUB7MH0gcHVzaCIgPmV4cGVjdCAmJgorCWdpdCAtQyBkc3QuZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgb25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgcHVzaCBkc3QuZ2l0IG1hc3Rlcjp0d28gJiYKKwllY2hvICJ0d29AezB9IHB1c2giID5leHBlY3QgJiYKKwlnaXQgLUMgZHN0LmdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVnZCAlZ3MiIHR3byA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBpbnRvIGJhcmUgcmVzcGVjdHMgY29yZS5sb2dhbGxyZWZ1cGRhdGVzJyAnCisJcm0gLXJmIGRzdC5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0LmdpdCAmJgorCSgKKwkJY2QgZHN0LmdpdCAmJgorCQlnaXQgY29uZmlnIGNvcmUubG9nYWxscmVmdXBkYXRlcyB0cnVlICYmCisKKwkJIyBhcyBhYm92ZSwgd2UgZG91YmxlLWZldGNoIHRvIHRlc3QgYm90aAorCQkjIHdpdGggYW5kIHdpdGhvdXQgcGFjayB0cmFuc2ZlcgorCQlnaXQgZmV0Y2ggLi4gbWFzdGVyOm9uZSAmJgorCQllY2hvICJvbmVAezB9IGZldGNoIC4uIG1hc3RlcjpvbmU6IHN0b3JpbmcgaGVhZCIgPmV4cGVjdCAmJgorCQlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiBvbmUgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGZldGNoIC4uIG1hc3Rlcjp0d28gJiYKKwkJZWNobyAidHdvQHswfSBmZXRjaCAuLiBtYXN0ZXI6dHdvOiBzdG9yaW5nIGhlYWQiID5leHBlY3QgJiYKKwkJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgdHdvID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCA9IHVwZGF0ZUluc3RlYWQnICcKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHVwZGF0ZUluc3RlYWQKKwkpICYmCisJdGVzdF9jb21taXQgdGhpcmQgcGF0aDIgJiYKKworCSMgVHJ5IHB1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgd2l0aCBwcmlzdGluZSB3b3JraW5nIHRyZWUKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoICYmCisJCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS0gJiYKKwkJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJCXRlc3QgdGhpcmQgPSAiJChjYXQgcGF0aDIpIiAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSkgJiYKKworCSMgVHJ5IHB1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgd2l0aCB3b3JraW5nIHRyZWUgbmVlZGluZyBhIHJlZnJlc2gKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXRlc3QtdG9vbCBjaG10aW1lICsxMDAgcGF0aDEKKwkpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCAmJgorCQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0tICYmCisJCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLSAmJgorCQl0ZXN0X2NtcCAuLi9wYXRoMSBwYXRoMSAmJgorCQl0ZXN0IHRoaXJkID0gIiQoY2F0IHBhdGgyKSIgJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkpICYmCisKKwkjIFVwZGF0ZSB3aGF0IGlzIHRvIGJlIHB1c2hlZAorCXRlc3RfY29tbWl0IGZvdXJ0aCBwYXRoMiAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIGEgZGlydHkgd29ya2luZyB0cmVlCisJIyAoMSkgdGhlIHdvcmtpbmcgdHJlZSB1cGRhdGVkCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvIGNoYW5nZWQgPnBhdGgxCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQgJiYKKwkJdGVzdCBjaGFuZ2VkID0gIiQoY2F0IHBhdGgxKSIKKwkpICYmCisKKwkjICgyKSB0aGUgaW5kZXggdXBkYXRlZAorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyBjaGFuZ2VkID5wYXRoMSAmJgorCQlnaXQgYWRkIHBhdGgxCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwkJdGVzdCBjaGFuZ2VkID0gIiQoY2F0IHBhdGgxKSIKKwkpICYmCisKKwkjIEludHJvZHVjZSBhIG5ldyBmaWxlIGluIHRoZSB1cGRhdGUKKwl0ZXN0X2NvbW1pdCBmaWZ0aCBwYXRoMyAmJgorCisJIyAoMykgdGhlIHdvcmtpbmcgdHJlZSBoYXMgYW4gdW50cmFja2VkIGZpbGUgdGhhdCB3b3VsZCBpbnRlcmZlcmUKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyBjaGFuZ2VkID5wYXRoMworCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXRlc3QgJChnaXQgLUMgLi4gcmV2LXBhcnNlIEhFQUReXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCAmJgorCQlnaXQgZGlmZiAtLXF1aWV0IC0tY2FjaGVkICYmCisJCXRlc3QgY2hhbmdlZCA9ICIkKGNhdCBwYXRoMykiCisJKSAmJgorCisJIyAoNCkgdGhlIHRhcmdldCBjaGFuZ2VzIHRvIHdoYXQgZ2V0cyBwdXNoZWQgYnV0IGl0IHN0aWxsIGlzIGEgY2hhbmdlCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWVjaG8gZmlmdGggPnBhdGgzICYmCisJCWdpdCBhZGQgcGF0aDMKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEXl4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwkJdGVzdCBmaWZ0aCA9ICIkKGNhdCBwYXRoMykiCisJKSAmJgorCisJIyAoNSkgcHVzaCBpbnRvIHZvaWQKKwlybSAtZnIgdm9pZCAmJgorCWdpdCBpbml0IHZvaWQgJiYKKwkoCisJCWNkIHZvaWQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHVwZGF0ZUluc3RlYWQKKwkpICYmCisJZ2l0IHB1c2ggdm9pZCBtYXN0ZXIgJiYKKwkoCisJCWNkIHZvaWQgJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgbWFzdGVyKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlnaXQgZGlmZiAtLXF1aWV0ICYmCisJCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQKKwkpICYmCisKKwkjICg2KSB1cGRhdGVJbnN0ZWFkIGludGVydmVuZWQgYnkgZmFzdC1mb3J3YXJkIGNoZWNrCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdm9pZCBtYXN0ZXJeOm1hc3RlciAmJgorCXRlc3QgJChnaXQgLUMgdm9pZCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCWdpdCAtQyB2b2lkIGRpZmYgLS1xdWlldCAmJgorCWdpdCAtQyB2b2lkIGRpZmYgLS1jYWNoZWQgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGVJbnN0ZWFkIHdpdGggcHVzaC10by1jaGVja291dCBob29rJyAnCisJcm0gLWZyIHRlc3RyZXBvICYmCisJZ2l0IGluaXQgdGVzdHJlcG8gJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBwdWxsIC4uIG1hc3RlciAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReXiAmJgorCQlnaXQgdGFnIGluaXRpYWwgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHVwZGF0ZUluc3RlYWQgJiYKKwkJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcHVzaC10by1jaGVja291dCA8PC1cRU9GCisJCWVjaG8gPiYyIHVwZGF0aW5nIGZyb20gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJCWVjaG8gPiYyIHVwZGF0aW5nIHRvICIkMSIKKworCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCAmJgorCQlnaXQgcmVhZC10cmVlIC11IC1tIEhFQUQgIiQxIiB8fCB7CisJCQlzdGF0dXM9JD8KKwkJCWVjaG8gPiYyIHJlYWQtdHJlZSBmYWlsZWQKKwkJCWV4aXQgJHN0YXR1cworCQl9CisJCUVPRgorCSkgJiYKKworCSMgVHJ5IHB1c2hpbmcgaW50byBhIHByaXN0aW5lCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgZGlmZiAtLXF1aWV0ICYmCisJCWdpdCBkaWZmIEhFQUQgLS1xdWlldCAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSkgJiYKKworCSMgVHJ5IHB1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgd2l0aCBjb25mbGljdGluZyBjaGFuZ2UKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCQllY2hvIGNvbmZsaWN0aW5nID5wYXRoMgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIGluaXRpYWwpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXRlc3QgY29uZmxpY3RpbmcgPSAiJChjYXQgcGF0aDIpIiAmJgorCQlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQKKwkpICYmCisKKwkjIFRyeSBwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHdpdGggdW5yZWxhdGVkIGNoYW5nZQorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJCWVjaG8gdW5yZWxhdGVkID5wYXRoMSAmJgorCQllY2hvIGlycmVsZXZhbnQgPnBhdGg1ICYmCisJCWdpdCBhZGQgcGF0aDUKKwkpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQl0ZXN0ICIkKGNhdCBwYXRoMSkiID0gdW5yZWxhdGVkICYmCisJCXRlc3QgIiQoY2F0IHBhdGg1KSIgPSBpcnJlbGV2YW50ICYmCisJCXRlc3QgIiQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLS1jYWNoZWQgSEVBRCkiID0gcGF0aDUgJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkpICYmCisKKwkjIHB1c2ggaW50byB2b2lkCisJcm0gLWZyIHZvaWQgJiYKKwlnaXQgaW5pdCB2b2lkICYmCisJKAorCQljZCB2b2lkICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB1cGRhdGVJbnN0ZWFkICYmCisJCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3B1c2gtdG8tY2hlY2tvdXQgPDwtXEVPRgorCQlpZiBnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgSEVBRAorCQl0aGVuCisJCQloYXNfaGVhZD15ZXMKKwkJCWVjaG8gPiYyIHVwZGF0aW5nIGZyb20gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJCWVsc2UKKwkJCWhhc19oZWFkPW5vCisJCQllY2hvID4mMiBwdXNoaW5nIGludG8gdm9pZAorCQlmaQorCQllY2hvID4mMiB1cGRhdGluZyB0byAiJDEiCisKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2ggJiYKKwkJY2FzZSAiJGhhc19oZWFkIiBpbgorCQl5ZXMpCisJCQlnaXQgcmVhZC10cmVlIC11IC1tIEhFQUQgIiQxIiA7OworCQlubykKKwkJCWdpdCByZWFkLXRyZWUgLXUgLW0gIiQxIiA7OworCQllc2FjIHx8IHsKKwkJCXN0YXR1cz0kPworCQkJZWNobyA+JjIgcmVhZC10cmVlIGZhaWxlZAorCQkJZXhpdCAkc3RhdHVzCisJCX0KKwkJRU9GCisJKSAmJgorCisJZ2l0IHB1c2ggdm9pZCBtYXN0ZXIgJiYKKwkoCisJCWNkIHZvaWQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCAmJgorCQlnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0ICYmCisJCXRlc3QgJChnaXQgLUMgLi4gcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZW55Q3VycmVudEJyYW5jaCBhbmQgd29ya3RyZWVzJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCBuZXctd3QgJiYKKwlnaXQgY2xvbmUgLiBjbG9uZWQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbG9uZWQgZmlyc3QgJiYKKwl0ZXN0X2NvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHJlZnVzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBjbG9uZWQgcHVzaCBvcmlnaW4gSEVBRDpuZXctd3QgJiYKKwl0ZXN0X2NvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHVwZGF0ZUluc3RlYWQgJiYKKwlnaXQgLUMgY2xvbmVkIHB1c2ggb3JpZ2luIEhFQUQ6bmV3LXd0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGNsb25lZCBwdXNoIC0tZGVsZXRlIG9yaWdpbiBuZXctd3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE3LXB1c2gtbWlycm9yLnNoIGIvdC90NTUxNy1wdXNoLW1pcnJvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNGVkZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNy1wdXNoLW1pcnJvci5zaApAQCAtMCwwICsxLDI3OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1c2hpbmcgdG8gYSBtaXJyb3IgcmVwb3NpdG9yeScKKworLiAuL3Rlc3QtbGliLnNoCisKK0Q9JChwd2QpCisKK2ludmVydCAoKSB7CisJaWYgIiRAIjsgdGhlbgorCQlyZXR1cm4gMQorCWVsc2UKKwkJcmV0dXJuIDAKKwlmaQorfQorCitta19yZXBvX3BhaXIgKCkgeworCXJtIC1yZiBtYXN0ZXIgbWlycm9yICYmCisJbWtkaXIgbWlycm9yICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4KKwkpICYmCisJbWtkaXIgbWFzdGVyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgJDEgdXAgLi4vbWlycm9yCisJKQorfQorCisKKyMgQlJBTkNIIHRlc3RzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBjcmVhdGVzIG5ldyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgdXBkYXRlcyBleGlzdGluZyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQllY2hvIHR3byA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBmb3JjZSB1cGRhdGVzIGV4aXN0aW5nIGJyYW5jaGVzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWVjaG8gdHdvID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgcmVtb3ZlcyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgYnJhbmNoIHJlbW92ZSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IGJyYW5jaCAtRCByZW1vdmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJaW52ZXJ0IGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbW92ZQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBhZGRzLCB1cGRhdGVzIGFuZCByZW1vdmVzIGJyYW5jaGVzIHRvZ2V0aGVyJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBicmFuY2ggcmVtb3ZlIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgYnJhbmNoIC1EIHJlbW92ZSAmJgorCQlnaXQgYnJhbmNoIGFkZCBtYXN0ZXIgJiYKKwkJZWNobyB0d28gPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltYXN0ZXJfYWRkPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2FkZCkgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltaXJyb3JfYWRkPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2FkZCkgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiICYmCisJdGVzdCAiJG1hc3Rlcl9hZGQiID0gIiRtaXJyb3JfYWRkIiAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWludmVydCBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW1vdmUKKwkpCisKKycKKworCisjIFRBRyB0ZXN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgY3JlYXRlcyBuZXcgdGFncycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciB1cGRhdGVzIGV4aXN0aW5nIHRhZ3MnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQllY2hvIHR3byA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIGZvcmNlIHVwZGF0ZXMgZXhpc3RpbmcgdGFncycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWVjaG8gdHdvID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIHJlbW92ZXMgdGFncycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRyZW1vdmUgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCB0YWcgLWQgdHJlbW92ZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlpbnZlcnQgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90cmVtb3ZlCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIGFkZHMsIHVwZGF0ZXMgYW5kIHJlbW92ZXMgdGFncyB0b2dldGhlcicgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCB0YWcgLWYgdHJlbW92ZSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IHRhZyAtZCB0cmVtb3ZlICYmCisJCWdpdCB0YWcgdGFkZCBtYXN0ZXIgJiYKKwkJZWNobyB0d28gPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCW1hc3Rlcl9hZGQ9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90YWRkKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCW1pcnJvcl9hZGQ9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90YWRkKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIgJiYKKwl0ZXN0ICIkbWFzdGVyX2FkZCIgPSAiJG1pcnJvcl9hZGQiICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJaW52ZXJ0IGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdHJlbW92ZQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUuZm9vLm1pcnJvciBhZGRzIGFuZCByZW1vdmVzIGJyYW5jaGVzJyAnCisKKwlta19yZXBvX3BhaXIgLS1taXJyb3IgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBicmFuY2gga2VlcCBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCByZW1vdmUgbWFzdGVyICYmCisJCWdpdCBwdXNoIHVwICYmCisJCWdpdCBicmFuY2ggLUQgcmVtb3ZlICYmCisJCWdpdCBwdXNoIHVwCisJKSAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2tlZXAgJiYKKwkJaW52ZXJ0IGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbW92ZQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUuZm9vLm1pcnJvcj1ubyBoYXMgbm8gZWZmZWN0JyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnVwLm1pcnJvciBubyAmJgorCQlnaXQgYnJhbmNoIGtlZXAgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCBicmFuY2ggLUQga2VlcCAmJgorCQlnaXQgcHVzaCB1cCA6CisJKSAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2tlZXAKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBtaXJyb3JlZCByZXBvc2l0b3J5IHdpdGggcmVmc3BlYyBmYWlscycgJworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudXAubWlycm9yIHRydWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdXAgbWFzdGVyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTgtZmV0Y2gtZXhpdC1zdGF0dXMuc2ggYi90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyMDYwYmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRG1pdHJ5IFYuIExldmluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoIGV4aXQgc3RhdHVzIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gc2lkZSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gc2lkZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gbmV4dCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gbmV4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZmFzdC1mb3J3YXJkIGZldGNoJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLiBtYXN0ZXI6c2lkZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlZCB1cGRhdGUnICcKKworCWdpdCBmZXRjaCAuICttYXN0ZXI6c2lkZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxOS1wdXNoLWFsdGVybmF0ZXMuc2ggYi90L3Q1NTE5LXB1c2gtYWx0ZXJuYXRlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMWZjZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxOS1wdXNoLWFsdGVybmF0ZXMuc2gKQEAgLTAsMCArMSwxNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdXNoIHRvIGEgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3MgZnJvbSBlbHNld2hlcmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBhbGljZS1wdWIgJiYKKwkoCisJCWNkIGFsaWNlLXB1YiAmJgorCQlHSVRfRElSPS4gZ2l0IGluaXQKKwkpICYmCisJbWtkaXIgYWxpY2Utd29yayAmJgorCSgKKwkJY2QgYWxpY2Utd29yayAmJgorCQlnaXQgaW5pdCAmJgorCQk+ZmlsZSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJCWdpdCBwdXNoIC4uL2FsaWNlLXB1YiBtYXN0ZXIKKwkpICYmCisKKwkjIFByb2plY3QgQm9iIGlzIGEgZm9yayBvZiBwcm9qZWN0IEFsaWNlCisJbWtkaXIgYm9iLXB1YiAmJgorCSgKKwkJY2QgYm9iLXB1YiAmJgorCQlHSVRfRElSPS4gZ2l0IGluaXQgJiYKKwkJbWtkaXIgLXAgb2JqZWN0cy9pbmZvICYmCisJCWVjaG8gLi4vLi4vYWxpY2UtcHViL29iamVjdHMgPm9iamVjdHMvaW5mby9hbHRlcm5hdGVzCisJKSAmJgorCWdpdCBjbG9uZSBhbGljZS1wdWIgYm9iLXdvcmsgJiYKKwkoCisJCWNkIGJvYi13b3JrICYmCisJCWdpdCBwdXNoIC4uL2JvYi1wdWIgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGljZSB3b3JrcyBhbmQgcHVzaGVzJyAnCisJKAorCQljZCBhbGljZS13b3JrICYmCisJCWVjaG8gbW9yZSA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCQlnaXQgcHVzaCAuLi9hbGljZS1wdWIgOgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9iIGZldGNoZXMgZnJvbSBhbGljZSwgd29ya3MgYW5kIHB1c2hlcycgJworCSgKKwkJIyBCb2IgYWNxdWlyZXMgd2hhdCBBbGljZSBkaWQgaW4gaGlzIHdvcmsgdHJlZSBmaXJzdC4KKwkJIyBFdmVuIHRob3VnaCB0aGVzZSBvYmplY3RzIGFyZSBub3QgZGlyZWN0bHkgaW4KKwkJIyB0aGUgcHVibGljIHJlcG9zaXRvcnkgb2YgQm9iLCB0aGlzIHB1c2ggZG9lcyBub3QKKwkJIyBuZWVkIHRvIHNlbmQgdGhlIGNvbW1pdCBCb2IgcmVjZWl2ZWQgZnJvbSBBbGljZQorCQkjIHRvIGhpcyBwdWJsaWMgcmVwb3NpdG9yeSwgYXMgYWxsIHRoZSBvYmplY3QgQWxpY2UKKwkJIyBoYXMgYXQgaGVyIHB1YmxpYyByZXBvc2l0b3J5IGFyZSBhdmFpbGFibGUgdG8gaXQKKwkJIyB2aWEgaXRzIGFsdGVybmF0ZXMuCisJCWNkIGJvYi13b3JrICYmCisJCWdpdCBwdWxsIC4uL2FsaWNlLXB1YiBtYXN0ZXIgJiYKKwkJZWNobyBtb3JlIGJvYiA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHRoaXJkICYmCisJCWdpdCBwdXNoIC4uL2JvYi1wdWIgOgorCSkgJiYKKworCSMgQ2hlY2sgdGhhdCB0aGUgc2Vjb25kIGNvbW1pdCBieSBBbGljZSBpcyBub3Qgc2VudAorCSMgdG8gLi4vYm9iLXB1YgorCSgKKwkJY2QgYm9iLXB1YiAmJgorCQlzZWNvbmQ9JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCQlybSAtZiBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLXQgJHNlY29uZCAmJgorCQllY2hvIC4uLy4uL2FsaWNlLXB1Yi9vYmplY3RzID5vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4tdXAgaW4gY2FzZSB0aGUgcHJldmlvdXMgZmFpbGVkJyAnCisJKAorCQljZCBib2ItcHViICYmCisJCWVjaG8gLi4vLi4vYWxpY2UtcHViL29iamVjdHMgPm9iamVjdHMvaW5mby9hbHRlcm5hdGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGljZSB3b3JrcyBhbmQgcHVzaGVzIGFnYWluJyAnCisJKAorCQkjIEFsaWNlIGRvZXMgbm90IGNhcmUgd2hhdCBCb2IgZG9lcy4gIFNoZSBkb2VzIG5vdAorCQkjIGV2ZW4gaGF2ZSB0byBiZSBhd2FyZSBvZiBoaXMgZXhpc3RlbmNlLiAgU2hlIGp1c3QKKwkJIyBrZWVwcyB3b3JraW5nIGFuZCBwdXNoaW5nCisJCWNkIGFsaWNlLXdvcmsgJiYKKwkJZWNobyBtb3JlIGFsaWNlID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gZm91cnRoICYmCisJCWdpdCBwdXNoIC4uL2FsaWNlLXB1YiA6CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2Igd29ya3MgYW5kIHB1c2hlcycgJworCSgKKwkJIyBUaGlzIHRpbWUgQm9iIGRvZXMgbm90IHB1bGwgZnJvbSBBbGljZSwgYW5kCisJCSMgdGhlIG1hc3RlciBicmFuY2ggYXQgaGVyIHB1YmxpYyByZXBvc2l0b3J5IHBvaW50cworCQkjIGF0IGEgY29tbWl0IEJvYiBkb2VzIG5vdCBrbm93IGFib3V0LiAgVGhpcyBzaG91bGQKKwkJIyBub3QgcHJldmVudCB0aGUgcHVzaCBieSBCb2IgZnJvbSBzdWNjZWVkaW5nLgorCQljZCBib2Itd29yayAmJgorCQllY2hvIHlldCBtb3JlIGJvYiA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGZpZnRoICYmCisJCWdpdCBwdXNoIC4uL2JvYi1wdWIgOgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpY2Ugd29ya3MgYW5kIHB1c2hlcyB5ZXQgYWdhaW4nICcKKwkoCisJCSMgQWxpY2UgZG9lcyBub3QgY2FyZSB3aGF0IEJvYiBkb2VzLiAgU2hlIGRvZXMgbm90CisJCSMgZXZlbiBoYXZlIHRvIGJlIGF3YXJlIG9mIGhpcyBleGlzdGVuY2UuICBTaGUganVzdAorCQkjIGtlZXBzIHdvcmtpbmcgYW5kIHB1c2hpbmcKKwkJY2QgYWxpY2Utd29yayAmJgorCQllY2hvIG1vcmUgYW5kIG1vcmUgYWxpY2UgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBzaXh0aC4xICYmCisJCWVjaG8gbW9yZSBhbmQgbW9yZSBhbGljZSA+PmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBzaXh0aC4yICYmCisJCWVjaG8gbW9yZSBhbmQgbW9yZSBhbGljZSA+PmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBzaXh0aC4zICYmCisJCWdpdCBwdXNoIC4uL2FsaWNlLXB1YiA6CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2Igd29ya3MgYW5kIHB1c2hlcyBhZ2FpbicgJworCSgKKwkJY2QgYWxpY2UtcHViICYmCisJCWdpdCBjYXQtZmlsZSBjb21taXQgbWFzdGVyID4uLi9ib2Itd29yay9jb21taXQKKwkpICYmCisJKAorCQkjIFRoaXMgdGltZSBCb2IgZG9lcyBub3QgcHVsbCBmcm9tIEFsaWNlLCBhbmQKKwkJIyB0aGUgbWFzdGVyIGJyYW5jaCBhdCBoZXIgcHVibGljIHJlcG9zaXRvcnkgcG9pbnRzCisJCSMgYXQgYSBjb21taXQgQm9iIGRvZXMgbm90IGZ1bGx5IGtub3cgYWJvdXQsIGJ1dAorCQkjIGhlIGhhcHBlbnMgdG8gaGF2ZSB0aGUgY29tbWl0IG9iamVjdCAoYnV0IG5vdCB0aGUKKwkJIyBuZWNlc3NhcnkgdHJlZSkgaW4gaGlzIHJlcG9zaXRvcnkgZnJvbSBBbGljZS4KKwkJIyBUaGlzIHNob3VsZCBub3QgcHJldmVudCB0aGUgcHVzaCBieSBCb2IgZnJvbQorCQkjIHN1Y2NlZWRpbmcuCisJCWNkIGJvYi13b3JrICYmCisJCWdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgY29tbWl0ICYmCisJCWVjaG8gZXZlbiBtb3JlIGJvYiA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHNldmVudGggJiYKKwkJZ2l0IHB1c2ggLi4vYm9iLXB1YiA6CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjAtcHVsbC5zaCBiL3QvdDU1MjAtcHVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZjg2ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMC1wdWxsLnNoCkBAIC0wLDAgKzEsNzkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVsbGluZyBpbnRvIHZvaWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCittb2RpZnkgKCkgeworCXNlZCAtZSAiJDEiICIkMiIgPiIkMi54IiAmJgorCW12ICIkMi54IiAiJDIiCit9CisKK3Rlc3RfcHVsbF9hdXRvc3Rhc2ggKCkgeworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWVjaG8gZGlydHkgPm5ld19maWxlICYmCisJZ2l0IGFkZCBuZXdfZmlsZSAmJgorCWdpdCBwdWxsICIkQCIgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReIGNvcHkgJiYKKwllY2hvIGRpcnR5ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbmV3X2ZpbGUgJiYKKwllY2hvICJtb2RpZmllZCBhZ2FpbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCit9CisKK3Rlc3RfcHVsbF9hdXRvc3Rhc2hfZmFpbCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJZWNobyBkaXJ0eSA+bmV3X2ZpbGUgJiYKKwlnaXQgYWRkIG5ld19maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgIiRAIiAuIGNvcHkgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1bmNvbW1pdHRlZCBjaGFuZ2VzLiIgZXJyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gZmlsZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gb3JpZ2luYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBpbnRvIHZvaWQnICcKKwlnaXQgaW5pdCBjbG9uZWQgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgcHVsbCAuLgorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgY2xvbmVkL2ZpbGUgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lZC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkIHVzaW5nIG1hc3RlcjptYXN0ZXInICcKKwlnaXQgaW5pdCBjbG9uZWQtdWhvICYmCisJKAorCQljZCBjbG9uZWQtdWhvICYmCisJCWdpdCBwdWxsIC4uIG1hc3RlcjptYXN0ZXIKKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGNsb25lZC11aG8vZmlsZSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmVkLXVoby9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkIGRvZXMgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMnICcKKwlnaXQgaW5pdCBjbG9uZWQtdW50cmFja2VkICYmCisJKAorCQljZCBjbG9uZWQtdW50cmFja2VkICYmCisJCWVjaG8gdW50cmFja2VkID5maWxlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4uIG1hc3RlciAmJgorCQllY2hvIHVudHJhY2tlZCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGludG8gdm9pZCBkb2VzIG5vdCBvdmVyd3JpdGUgc3RhZ2VkIGZpbGVzJyAnCisJZ2l0IGluaXQgY2xvbmVkLXN0YWdlZC1jb2xsaWRpbmcgJiYKKwkoCisJCWNkIGNsb25lZC1zdGFnZWQtY29sbGlkaW5nICYmCisJCWVjaG8gImFsdGVybmF0ZSBjb250ZW50IiA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLi4gbWFzdGVyICYmCisJCWVjaG8gImFsdGVybmF0ZSBjb250ZW50IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJCWdpdCBjYXQtZmlsZSBibG9iIDpmaWxlID5maWxlLmluZGV4ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlLmluZGV4CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGludG8gdm9pZCBkb2VzIG5vdCByZW1vdmUgbmV3IHN0YWdlZCBmaWxlcycgJworCWdpdCBpbml0IGNsb25lZC1zdGFnZWQtbmV3ICYmCisJKAorCQljZCBjbG9uZWQtc3RhZ2VkLW5ldyAmJgorCQllY2hvICJuZXcgdHJhY2tlZCBmaWxlIiA+bmV3ZmlsZSAmJgorCQlnaXQgYWRkIG5ld2ZpbGUgJiYKKwkJZ2l0IHB1bGwgLi4gbWFzdGVyICYmCisJCWVjaG8gIm5ldyB0cmFja2VkIGZpbGUiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG5ld2ZpbGUgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgOm5ld2ZpbGUgPm5ld2ZpbGUuaW5kZXggJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG5ld2ZpbGUuaW5kZXgKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkIG11c3Qgbm90IGNyZWF0ZSBhbiBvY3RvcHVzJyAnCisJZ2l0IGluaXQgY2xvbmVkLW9jdG9wdXMgJiYKKwkoCisJCWNkIGNsb25lZC1vY3RvcHVzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4uIG1hc3RlciBtYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAuIGFzIGEgcmVtb3RlJyAnCisJZ2l0IGJyYW5jaCBjb3B5IG1hc3RlciAmJgorCWdpdCBjb25maWcgYnJhbmNoLmNvcHkucmVtb3RlIC4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5jb3B5Lm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZWNobyB1cGRhdGVkID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB1cGRhdGVkICYmCisJZ2l0IGNoZWNrb3V0IGNvcHkgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZ2l0IHB1bGwgJiYKKwllY2hvIHVwZGF0ZWQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgorCXNlZCAicy9eWzAtOWEtZl1bMC05YS1mXSovT0JKSUQvIiByZWZsb2cuYWN0dWFsID5yZWZsb2cuZnV6enkgJiYKKwllY2hvICJPQkpJRCBIRUFEQHswfTogcHVsbDogRmFzdC1mb3J3YXJkIiA+cmVmbG9nLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgcmVmbG9nLmV4cGVjdGVkIHJlZmxvZy5mdXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgZGVmYXVsdCByZW1vdGUgLiBzaG91bGQgbm90IGJyZWFrIGV4cGxpY2l0IHB1bGwnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3Rlcl4gJiYKKwllY2hvIG1vZGlmaWVkID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtb2RpZmllZCAmJgorCWdpdCBjaGVja291dCBjb3B5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwlnaXQgcHVsbCAuIHNlY29uZCAmJgorCWVjaG8gbW9kaWZpZWQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgorCXNlZCAicy9eWzAtOWEtZl1bMC05YS1mXSovT0JKSUQvIiByZWZsb2cuYWN0dWFsID5yZWZsb2cuZnV6enkgJiYKKwllY2hvICJPQkpJRCBIRUFEQHswfTogcHVsbCAuIHNlY29uZDogRmFzdC1mb3J3YXJkIiA+cmVmbG9nLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgcmVmbG9nLmV4cGVjdGVkIHJlZmxvZy5mdXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIGlmIHdpbGRjYXJkIHNwZWMgZG9lcyBub3QgbWF0Y2ggYW55IHJlZnMnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCBjb3B5XiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuICJyZWZzL25vbmV4aXN0aW5nMS8qOnJlZnMvbm9uZXhpc3RpbmcyLyoiIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiBubyBicmFuY2hlcyBzcGVjaWZpZWQgd2l0aCBub24tZGVmYXVsdCByZW1vdGUnICcKKwlnaXQgcmVtb3RlIGFkZCB0ZXN0X3JlbW90ZSAuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVtb3RlIHJlbW92ZSB0ZXN0X3JlbW90ZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCBjb3B5XiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudGVzdC5yZW1vdGUgb3JpZ2luICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgdGVzdF9yZW1vdGUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUiIGVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgbm90IG9uIGEgYnJhbmNoJyAnCisJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIC4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIG9yaWdpbiIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5IiAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBjdXJyZW50bHkgb24gYSBicmFuY2giIGVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgbm8gY29uZmlndXJhdGlvbiBmb3IgY3VycmVudCBicmFuY2gnICcKKwlnaXQgcmVtb3RlIGFkZCB0ZXN0X3JlbW90ZSAuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVtb3RlIHJlbW92ZSB0ZXN0X3JlbW90ZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCBjb3B5XiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50ZXN0LnJlbW90ZSB0ZXN0X3JlbW90ZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm5vIHRyYWNraW5nIGluZm9ybWF0aW9uIiBlcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tYWxsOiBmYWlsIGlmIG5vIGNvbmZpZ3VyYXRpb24gZm9yIGN1cnJlbnQgYnJhbmNoJyAnCisJZ2l0IHJlbW90ZSBhZGQgdGVzdF9yZW1vdGUgLiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlbW90ZSByZW1vdmUgdGVzdF9yZW1vdGUiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QgY29weV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGVzdCIgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudGVzdC5yZW1vdGUgdGVzdF9yZW1vdGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1hbGwgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiB1cHN0cmVhbSBicmFuY2ggZG9lcyBub3QgZXhpc3QnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCBjb3B5XiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50ZXN0LnJlbW90ZSAuICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QubWVyZ2UgcmVmcy9oZWFkcy9ub25leGlzdGluZyAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkIiBlcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIGlmIHRoZSBpbmRleCBoYXMgdW5yZXNvbHZlZCBlbnRyaWVzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRoaXJkIHNlY29uZF4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGhpcmQiICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfY29tbWl0IG1vZGlmaWVkMiBmaWxlICYmCisJZ2l0IGxzLWZpbGVzIC11ID51bm1lcmdlZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bm1lcmdlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gc2Vjb25kICYmCisJZ2l0IGxzLWZpbGVzIC11ID51bm1lcmdlZCAmJgorCXRlc3RfZmlsZV9ub3RfZW1wdHkgdW5tZXJnZWQgJiYKKwljcCBmaWxlIGV4cGVjdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBzZWNvbmQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJQdWxsaW5nIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBscy1maWxlcyAtdSA+dW5tZXJnZWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW5tZXJnZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmRzIHdvcmtpbmcgdHJlZSBpZiBicmFuY2ggaGVhZCBpcyB1cGRhdGVkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRoaXJkIHNlY29uZF4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGhpcmQiICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWdpdCBwdWxsIC4gc2Vjb25kOnRoaXJkIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZCIgZXJyICYmCisJZWNobyBtb2RpZmllZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwl0ZXN0X2NtcF9yZXYgdGhpcmQgc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZm9yd2FyZCBmYWlscyB3aXRoIGNvbmZsaWN0aW5nIHdvcmsgdHJlZScgJworCWdpdCBjaGVja291dCAtYiB0aGlyZCBzZWNvbmReICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRoaXJkIiAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwllY2hvIGNvbmZsaWN0ID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBzZWNvbmQ6dGhpcmQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlIiBlcnIgJiYKKwllY2hvIGNvbmZsaWN0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfY21wX3JldiB0aGlyZCBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UnICcKKwlnaXQgYnJhbmNoIHRvLXJlYmFzZSAmJgorCWVjaG8gbW9kaWZpZWQgYWdhaW4gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGUgZmlsZSAmJgorCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKKwllY2hvIG5ldyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGZpbGUiICYmCisJZ2l0IHRhZyBiZWZvcmUtcmViYXNlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReIGNvcHkgJiYKKwllY2hvIG5ldyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSAobWVyZ2UpIGZhc3QgZm9yd2FyZCcgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWdpdCBjaGVja291dCAtYiBmZiAmJgorCWVjaG8gYW5vdGhlciBtb2RpZmljYXRpb24gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkIGZpbGUgJiYKKworCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKKwlnaXQgLWMgcmViYXNlLmJhY2tlbmQ9bWVyZ2UgcHVsbCAtLXJlYmFzZSAuIGZmICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgZmYgJiYKKworCSMgVGhlIGFib3ZlIG9ubHkgdmFsaWRhdGVzIHRoZSByZXN1bHQuICBEaWQgd2UgYWN0dWFsbHkgYnlwYXNzIHJlYmFzZT8KKwlnaXQgcmVmbG9nIC0xID5yZWZsb2cuYWN0dWFsICYmCisJc2VkICJzL15bMC05YS1mXVswLTlhLWZdKi9PQkpJRC8iIHJlZmxvZy5hY3R1YWwgPnJlZmxvZy5mdXp6eSAmJgorCWVjaG8gIk9CSklEIEhFQURAezB9OiBwdWxsIC0tcmViYXNlIC4gZmY6IEZhc3QtZm9yd2FyZCIgPnJlZmxvZy5leHBlY3RlZCAmJgorCXRlc3RfY21wIHJlZmxvZy5leHBlY3RlZCByZWZsb2cuZnV6enkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2UgKGFtKSBmYXN0IGZvcndhcmQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKworCWdpdCAtYyByZWJhc2UuYmFja2VuZD1hcHBseSBwdWxsIC0tcmViYXNlIC4gZmYgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBmZiAmJgorCisJIyBUaGUgYWJvdmUgb25seSB2YWxpZGF0ZXMgdGhlIHJlc3VsdC4gIERpZCB3ZSBhY3R1YWxseSBieXBhc3MgcmViYXNlPworCWdpdCByZWZsb2cgLTEgPnJlZmxvZy5hY3R1YWwgJiYKKwlzZWQgInMvXlswLTlhLWZdWzAtOWEtZl0qL09CSklELyIgcmVmbG9nLmFjdHVhbCA+cmVmbG9nLmZ1enp5ICYmCisJZWNobyAiT0JKSUQgSEVBREB7MH06IHB1bGwgLS1yZWJhc2UgLiBmZjogRmFzdC1mb3J3YXJkIiA+cmVmbG9nLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgcmVmbG9nLmV4cGVjdGVkIHJlZmxvZy5mdXp6eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSAtLWF1dG9zdGFzaCBmYXN0IGZvcndhcmQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlnaXQgcmVzZXQgLS1oYXJkCisJCWdpdCBjaGVja291dCB0by1yZWJhc2UKKwkJZ2l0IGJyYW5jaCAtRCB0by1yZWJhc2UtZmYKKwkJZ2l0IGJyYW5jaCAtRCBiZWhpbmQiICYmCisJZ2l0IGJyYW5jaCBiZWhpbmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG8tcmViYXNlLWZmICYmCisJZWNobyBhbm90aGVyIG1vZGlmaWNhdGlvbiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG1vZCAmJgorCisJZ2l0IGNoZWNrb3V0IGJlaGluZCAmJgorCWVjaG8gZGlydHkgPmZpbGUgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAtLWF1dG9zdGFzaCAuIHRvLXJlYmFzZS1mZiAmJgorCXRlc3RfY21wX3JldiBIRUFEIHRvLXJlYmFzZS1mZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSB3aXRoIGNvbmZsaWN0cyBzaG93cyBhZHZpY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydDsgZ2l0IGNoZWNrb3V0IC1mIHRvLXJlYmFzZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2VxICYmCisJdGVzdF9zZXEgNSA+c2VxLnR4dCAmJgorCWdpdCBhZGQgc2VxLnR4dCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBzZXEudHh0IiAmJgorCWVjaG8gNiA+PnNlcS50eHQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJBcHBlbmQgdG8gc2VxLnR4dCIgc2VxLnR4dCAmJgorCWdpdCBjaGVja291dCAtYiB3aXRoLWNvbmZsaWN0cyBIRUFEXiAmJgorCWVjaG8gY29uZmxpY3RpbmcgPj5zZXEudHh0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQ3JlYXRlIGNvbmZsaWN0IiBzZXEudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2UgLiBzZXEgMj5lcnIgPm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIlJlc29sdmUgYWxsIGNvbmZsaWN0cyBtYW51YWxseSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCAtLXJlYmFzZSBzaG93cyBhZHZpY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydDsgZ2l0IGNoZWNrb3V0IC1mIHRvLXJlYmFzZSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGl2ZXJnaW5nICYmCisJdGVzdF9jb21taXQgYXR0cmlidXRlcyAuZ2l0YXR0cmlidXRlcyAiKiB0ZXh0PWF1dG8iIGF0dHJzICYmCisJc2hhMT0iJChwcmludGYgIjFcXHJcXG4iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMDY0NCAkc2hhMSBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSB2MS13aXRoLWNyICYmCisJIyBmb3JjZSBjaGVja291dCBiZWNhdXNlIGBnaXQgcmVzZXQgLS1oYXJkYCB3aWxsIG5vdCBsZWF2ZSBjbGVhbiBgZmlsZWAKKwlnaXQgY2hlY2tvdXQgLWYgLWIgZmFpbHMtdG8tcmViYXNlIEhFQUReICYmCisJdGVzdF9jb21taXQgdjItd2l0aG91dC1jciBmaWxlICIyIiBmaWxlMi1sZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlIC4gZGl2ZXJnaW5nIDI+ZXJyID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJSZXNvbHZlIGFsbCBjb25mbGljdHMgbWFudWFsbHkiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSBmYWlscyB3aXRoIG11bHRpcGxlIGJyYW5jaGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2UgLiBjb3B5IG1hc3RlciAyPmVyciAmJgorCXRlc3RfY21wX3JldiBIRUFEIGJlZm9yZS1yZWJhc2UgJiYKKwl0ZXN0X2kxOG5ncmVwICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMiIGVyciAmJgorCWVjaG8gbW9kaWZpZWQgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIHN1Y2NlZWRzIHdpdGggZGlydHkgd29ya2luZyBkaXJlY3RvcnkgYW5kIHJlYmFzZS5hdXRvc3Rhc2ggc2V0JyAnCisJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJdGVzdF9wdWxsX2F1dG9zdGFzaCAtLXJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIC0tYXV0b3N0YXNoICYgcmViYXNlLmF1dG9zdGFzaD10cnVlJyAnCisJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJdGVzdF9wdWxsX2F1dG9zdGFzaCAtLXJlYmFzZSAtLWF1dG9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIC0tYXV0b3N0YXNoICYgcmViYXNlLmF1dG9zdGFzaD1mYWxzZScgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggZmFsc2UgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIC0tcmViYXNlIC0tYXV0b3N0YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgLS1hdXRvc3Rhc2ggJiByZWJhc2UuYXV0b3N0YXNoIHVuc2V0JyAnCisJdGVzdF91bmNvbmZpZyByZWJhc2UuYXV0b3N0YXNoICYmCisJdGVzdF9wdWxsX2F1dG9zdGFzaCAtLXJlYmFzZSAtLWF1dG9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIC0tbm8tYXV0b3N0YXNoICYgcmViYXNlLmF1dG9zdGFzaD10cnVlJyAnCisJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJdGVzdF9wdWxsX2F1dG9zdGFzaF9mYWlsIC0tcmViYXNlIC0tbm8tYXV0b3N0YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgLS1uby1hdXRvc3Rhc2ggJiByZWJhc2UuYXV0b3N0YXNoPWZhbHNlJyAnCisJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCBmYWxzZSAmJgorCXRlc3RfcHVsbF9hdXRvc3Rhc2hfZmFpbCAtLXJlYmFzZSAtLW5vLWF1dG9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIC0tbm8tYXV0b3N0YXNoICYgcmViYXNlLmF1dG9zdGFzaCB1bnNldCcgJworCXRlc3RfdW5jb25maWcgcmViYXNlLmF1dG9zdGFzaCAmJgorCXRlc3RfcHVsbF9hdXRvc3Rhc2hfZmFpbCAtLXJlYmFzZSAtLW5vLWF1dG9zdGFzaAorJworCitmb3IgaSBpbiAtLWF1dG9zdGFzaCAtLW5vLWF1dG9zdGFzaAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwdWxsICRpICh3aXRob3V0IC0tcmViYXNlKSBpcyBpbGxlZ2FsIiAnCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsICRpIC4gY29weSAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJvbmx5IHZhbGlkIHdpdGggLS1yZWJhc2UiIGVycgorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSB0cnVlICYmCisJZ2l0IHB1bGwgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReIGNvcHkgJiYKKwllY2hvIG5ldyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tYXV0b3N0YXNoICYgcHVsbC5yZWJhc2U9dHJ1ZScgJworCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwl0ZXN0X3B1bGxfYXV0b3N0YXNoIC0tYXV0b3N0YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1uby1hdXRvc3Rhc2ggJiBwdWxsLnJlYmFzZT10cnVlJyAnCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgdHJ1ZSAmJgorCXRlc3RfcHVsbF9hdXRvc3Rhc2hfZmFpbCAtLW5vLWF1dG9zdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2gudG8tcmViYXNlLnJlYmFzZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50by1yZWJhc2UucmViYXNlIHRydWUgJiYKKwlnaXQgcHVsbCAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaC50by1yZWJhc2UucmViYXNlIHNob3VsZCBvdmVycmlkZSBwdWxsLnJlYmFzZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlYmFzZSBmYWxzZSAmJgorCWdpdCBwdWxsIC4gY29weSAmJgorCXRlc3RfY21wX3JldiAhIEhFQUReIGNvcHkgJiYKKwllY2hvIG5ldyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIHdhcm5zIG9uIC0tdmVyaWZ5LXNpZ25hdHVyZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAtLXZlcmlmeS1zaWduYXR1cmVzIC4gY29weSAyPmVyciAmJgorCXRlc3RfY21wX3JldiBIRUFEXiBjb3B5ICYmCisJZWNobyBuZXcgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJpZ25vcmluZyAtLXZlcmlmeS1zaWduYXR1cmVzIGZvciByZWJhc2UiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIGRvZXMgbm90IHdhcm4gb24gLS1uby12ZXJpZnktc2lnbmF0dXJlcycgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWdpdCBwdWxsIC0tcmViYXNlIC0tbm8tdmVyaWZ5LXNpZ25hdHVyZXMgLiBjb3B5IDI+ZXJyICYmCisJdGVzdF9jbXBfcmV2IEhFQUReIGNvcHkgJiYKKwllY2hvIG5ldyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgISAidmVyaWZ5LXNpZ25hdHVyZXMiIGVycgorJworCisjIGFkZCBhIGZlYXR1cmUgYnJhbmNoLCBrZWVwLW1lcmdlLCB0aGF0IGlzIG1lcmdlZCBpbnRvIG1hc3Rlciwgc28gdGhlCisjIHRlc3QgY2FuIHRyeSBwcmVzZXJ2aW5nIHRoZSBtZXJnZSBjb21taXQgKG9yIG5vdCkgd2l0aCB2YXJpb3VzCisjIC0tcmViYXNlIGZsYWdzL3B1bGwucmViYXNlIHNldHRpbmdzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgbWVyZ2Ugc2V0dXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIga2VlcC1tZXJnZSBzZWNvbmReICYmCisJdGVzdF9jb21taXQgZmlsZTMgJiYKKwlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCisJZ2l0IG1lcmdlIGtlZXAtbWVyZ2UgJiYKKwlnaXQgdGFnIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2U9ZmFsc2UgY3JlYXRlIGEgbmV3IG1lcmdlIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIGZhbHNlICYmCisJZ2l0IHB1bGwgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMSBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPXRydWUgZmxhdHRlbnMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwlnaXQgcHVsbCAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF5eIGNvcHkgJiYKKwllY2hvIGZpbGUzID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUzLnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2U9MSBpcyB0cmVhdGVkIGFzIHRydWUgYW5kIGZsYXR0ZW5zIGtlZXAtbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSAxICYmCisJZ2l0IHB1bGwgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgXAorCSdwdWxsLnJlYmFzZT1wcmVzZXJ2ZSByZWJhc2VzIGFuZCBtZXJnZXMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHByZXNlcnZlICYmCisJZ2l0IHB1bGwgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMiBrZWVwLW1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPWludGVyYWN0aXZlJyAnCisJd3JpdGVfc2NyaXB0ICIkVFJBU0hfRElSRUNUT1JZL2Zha2UtZWRpdG9yIiA8PC1cRU9GICYmCisJZWNobyBJIHdhcyBoZXJlID5mYWtlLm91dCAmJgorCWZhbHNlCisJRU9GCisJdGVzdF9zZXRfZWRpdG9yICIkVFJBU0hfRElSRUNUT1JZL2Zha2UtZWRpdG9yIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZT1pbnRlcmFjdGl2ZSAuIGNvcHkgJiYKKwllY2hvICJJIHdhcyBoZXJlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZha2Uub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2U9aScgJworCXdyaXRlX3NjcmlwdCAiJFRSQVNIX0RJUkVDVE9SWS9mYWtlLWVkaXRvciIgPDwtXEVPRiAmJgorCWVjaG8gSSB3YXMgaGVyZSwgdG9vID5mYWtlLm91dCAmJgorCWZhbHNlCisJRU9GCisJdGVzdF9zZXRfZWRpdG9yICIkVFJBU0hfRElSRUNUT1JZL2Zha2UtZWRpdG9yIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZT1pIC4gY29weSAmJgorCWVjaG8gIkkgd2FzIGhlcmUsIHRvbyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmYWtlLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZT1pbnZhbGlkIGZhaWxzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgaW52YWxpZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gY29weQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZT1mYWxzZSBjcmVhdGUgYSBuZXcgbWVyZ2UgY29tbWl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBwdWxsIC0tcmViYXNlPWZhbHNlIC4gY29weSAmJgorCXRlc3RfY21wX3JldiBIRUFEXjEgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY21wX3JldiBIRUFEXjIgY29weSAmJgorCWVjaG8gZmlsZTMgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTMudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZT10cnVlIHJlYmFzZXMgYW5kIGZsYXR0ZW5zIGtlZXAtbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSBwcmVzZXJ2ZSAmJgorCWdpdCBwdWxsIC0tcmViYXNlPXRydWUgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgXAorCSctLXJlYmFzZT1wcmVzZXJ2ZSByZWJhc2VzIGFuZCBtZXJnZXMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZT1wcmVzZXJ2ZSAuIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF5eIGNvcHkgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yIGtlZXAtbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2U9aW52YWxpZCBmYWlscycgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlPWludmFsaWQgLiBjb3B5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIG92ZXJyaWRlcyBwdWxsLnJlYmFzZT1wcmVzZXJ2ZSBhbmQgZmxhdHRlbnMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHByZXNlcnZlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIHdpdGggcmViYXNlZCB1cHN0cmVhbScgJworCWdpdCByZW1vdGUgYWRkIC1mIG1lIC4gJiYKKwlnaXQgY2hlY2tvdXQgY29weSAmJgorCWdpdCB0YWcgY29weS1vcmlnICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWVjaG8gY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBjb25mbGljdCBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCWVjaG8gZmlsZSA+ZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRvLXJlYmFzZSBmaWxlMiAmJgorCWdpdCB0YWcgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSBtZSBjb3B5ICYmCisJZWNobyAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSAtZiB3aXRoIHJlYmFzZWQgdXBzdHJlYW0nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBwdWxsIC0tcmViYXNlIC1mIG1lIGNvcHkgJiYKKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIHdpdGggcmViYXNlZCBkZWZhdWx0IHVwc3RyZWFtJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL21lL2NvcHkgY29weS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgdG8tcmViYXNlMiBtZS9jb3B5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBwdWxsIC0tcmViYXNlICYmCisJZWNobyAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2VkIHVwc3RyZWFtICsgZmV0Y2ggKyBwdWxsIC0tcmViYXNlJyAnCisKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbWUvY29weSBjb3B5LW9yaWcgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgdG8tcmViYXNlMyBtZS9jb3B5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCBwdWxsIC0tcmViYXNlICYmCisJZWNobyAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgZGllcyBlYXJseSB3aXRoIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHleICYmCisJQ09QWT0iJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpIiAmJgorCWdpdCByZWJhc2UgLS1vbnRvICRDT1BZIGNvcHkgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlbW90ZSBtZSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50by1yZWJhc2UubWVyZ2UgcmVmcy9oZWFkcy9jb3B5ICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UgdHJ1ZSAmJgorCWVjaG8gZGlydHkgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgJiYKKwl0ZXN0X2NtcF9yZXYgIiRDT1BZIiBtZS9jb3B5ICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gZmlsZSAmJgorCWdpdCBwdWxsICYmCisJdGVzdF9jbXBfcmV2ICEgIiRDT1BZIiBtZS9jb3B5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2Ugd29ya3Mgb24gYnJhbmNoIHlldCB0byBiZSBib3JuJyAnCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmV4cGVjdCAmJgorCW1rZGlyIGVtcHR5X3JlcG8gJiYKKwkoCisJCWNkIGVtcHR5X3JlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHB1bGwgLS1yZWJhc2UgLi4gbWFzdGVyICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSBmYWlscyBvbiB1bmJvcm4gYnJhbmNoIHdpdGggc3RhZ2VkIGNoYW5nZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBlbXB0eV9yZXBvMiIgJiYKKwlnaXQgaW5pdCBlbXB0eV9yZXBvMiAmJgorCSgKKwkJY2QgZW1wdHlfcmVwbzIgJiYKKwkJZWNobyBzdGFnZWQtZmlsZSA+c3RhZ2VkLWZpbGUgJiYKKwkJZ2l0IGFkZCBzdGFnZWQtZmlsZSAmJgorCQllY2hvIHN0YWdlZC1maWxlID5leHBlY3QgJiYKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAuLiBtYXN0ZXIgMj5lcnIgJiYKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQlnaXQgc2hvdyA6c3RhZ2VkLWZpbGUgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfaTE4bmdyZXAgInVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleCIgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIGZhaWxzIG9uIGNvcnJ1cHQgSEVBRCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGNvcnJ1cHQiICYmCisJZ2l0IGluaXQgY29ycnVwdCAmJgorCSgKKwkJY2QgY29ycnVwdCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5oZWFkICYmCisJCW9iaj0kKHNlZCAicyNeLi4jJi8jIiBoZWFkKSAmJgorCQlybSAtZiAuZ2l0L29iamVjdHMvJG9iaiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIGRldGVjdGluZyB1cHN0cmVhbWVkIGNoYW5nZXMnICcKKwlta2RpciBzcmMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgaW5pdCAmJgorCQlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbjlcbjEwXG4iID4gc3R1ZmYgJiYKKwkJZ2l0IGFkZCBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1tICJJbml0aWFsIHJldmlzaW9uIgorCSkgJiYKKwlnaXQgY2xvbmUgc3JjIGRzdCAmJgorCSgKKwkJY2Qgc3JjICYmCisJCW1vZGlmeSBzLzUvNDMvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLWEgLW0gIjUtPjQzIiAmJgorCQltb2RpZnkgcy82LzQyLyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJNYWtlIGl0IGJpZ2dlciIKKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJbW9kaWZ5IHMvNS80My8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiSW5kZXBlbmRlbnQgZGlzY292ZXJ5IG9mIDUtPjQzIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1yZWJhc2UgZGV0ZWN0cyB1cHN0cmVhbWVkIGNoYW5nZXMnICcKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgcHVsbCAtLXJlYmFzZSAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPnVudHJhY2tlZCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgdW50cmFja2VkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgYXZvaWRpbmcgcmVhcHBseWluZyBvbGQgcGF0Y2hlcycgJworCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyCisJKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgc3JjIHNyYy1yZXBsYWNlLmdpdCAmJgorCXJtIC1yZiBzcmMgJiYKKwltdiBzcmMtcmVwbGFjZS5naXQgc3JjICYmCisJKAorCQljZCBkc3QgJiYKKwkJbW9kaWZ5IHMvMi8yMi8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIDIiICYmCisJCW1vZGlmeSBzLzMvMzMvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSAzIiAmJgorCQltb2RpZnkgcy80LzQ0LyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgNCIgJiYKKwkJZ2l0IHB1c2ggJiYKKworCQltb2RpZnkgcy80NC81NS8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtLWFtZW5kIC1hIC1tICJNb2RpZmllZCBDaGFuZ2UgNCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tcmViYXNlIGRvZXMgbm90IHJlYXBwbHkgb2xkIHBhdGNoZXMnICcKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAmJgorCQljYXQgLmdpdC9yZWJhc2UtbWVyZ2UvZG9uZSAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gPndvcmsgJiYKKwkJZ3JlcCAtdiAtZSBcIyAtZSBeJCB3b3JrID5wYXRjaGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgcGF0Y2hlcyAmJgorCQlybSAtZiB3b3JrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZSBhZ2FpbnN0IGxvY2FsIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtYiBjb3B5MiB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBwdWxsIC0tcmViYXNlIC4gdG8tcmViYXNlICYmCisJZWNobyAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjEtcHVsbC1vcHRpb25zLnNoIGIvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2NkZThiYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjEtcHVsbC1vcHRpb25zLnNoCkBAIC0wLDAgKzEsMjIxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVsbCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBwYXJlbnQgJiYKKwkoY2QgcGFyZW50ICYmIGdpdCBpbml0ICYmCisJIGVjaG8gb25lID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCSBnaXQgY29tbWl0IC1tIG9uZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXEnICcKKwlta2RpciBjbG9uZWRxICYmCisJKGNkIGNsb25lZHEgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtcSAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC1xIC0tcmViYXNlJyAnCisJbWtkaXIgY2xvbmVkcXJiICYmCisJKGNkIGNsb25lZHFyYiAmJiBnaXQgaW5pdCAmJgorCWdpdCBwdWxsIC1xIC0tcmViYXNlICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCWdpdCBwdWxsIC1xIC0tcmViYXNlICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwnICcKKwlta2RpciBjbG9uZWQgJiYKKwkoY2QgY2xvbmVkICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgLXMgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1yZWJhc2UnICcKKwlta2RpciBjbG9uZWRyYiAmJgorCShjZCBjbG9uZWRyYiAmJiBnaXQgaW5pdCAmJgorCWdpdCBwdWxsIC0tcmViYXNlICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0IC1zIGVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC12JyAnCisJbWtkaXIgY2xvbmVkdiAmJgorCShjZCBjbG9uZWR2ICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXYgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgLXMgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXYgLS1yZWJhc2UnICcKKwlta2RpciBjbG9uZWR2cmIgJiYKKwkoY2QgY2xvbmVkdnJiICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXYgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgLXMgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXYgLXEnICcKKwlta2RpciBjbG9uZWR2cSAmJgorCShjZCBjbG9uZWR2cSAmJiBnaXQgaW5pdCAmJgorCWdpdCBwdWxsIC12IC1xICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXEgLXYnICcKKwlta2RpciBjbG9uZWRxdiAmJgorCShjZCBjbG9uZWRxdiAmJiBnaXQgaW5pdCAmJgorCWdpdCBwdWxsIC1xIC12ICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJdGVzdCAtcyBlcnIpCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLWNsZWFudXAgZXJyb3JzIGVhcmx5IG9uIGludmFsaWQgYXJndW1lbnQnICcKKwlta2RpciBjbG9uZWRjbGVhbnVwICYmCisJKGNkIGNsb25lZGNsZWFudXAgJiYgZ2l0IGluaXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWNsZWFudXAgaW52YWxpZCAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCXRlc3QgLXMgZXJyKQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tZm9yY2UnICcKKwlta2RpciBjbG9uZWRvbGRzdHlsZSAmJgorCShjZCBjbG9uZWRvbGRzdHlsZSAmJiBnaXQgaW5pdCAmJgorCWNhdCA+Pi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbcmVtb3RlICJvbmUiXQorCQl1cmwgPSAuLi9wYXJlbnQKKwkJZmV0Y2ggPSByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21pcnJvcgorCVtyZW1vdGUgInR3byJdCisJCXVybCA9IC4uL3BhcmVudAorCQlmZXRjaCA9IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvb3JpZ2luCisJW2JyYW5jaCAibWFzdGVyIl0KKwkJcmVtb3RlID0gdHdvCisJCW1lcmdlID0gcmVmcy9oZWFkcy9tYXN0ZXIKKwlFT0YKKwlnaXQgcHVsbCB0d28gJiYKKwl0ZXN0X2NvbW1pdCBBICYmCisJZ2l0IGJyYW5jaCAtZiBvcmlnaW4gJiYKKwlnaXQgcHVsbCAtLWFsbCAtLWZvcmNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLWFsbCcgJworCW1rZGlyIGNsb25lZG11bHRpICYmCisJKGNkIGNsb25lZG11bHRpICYmIGdpdCBpbml0ICYmCisJY2F0ID4+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtyZW1vdGUgIm9uZSJdCisJCXVybCA9IC4uL3BhcmVudAorCQlmZXRjaCA9IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb25lLyoKKwlbcmVtb3RlICJ0d28iXQorCQl1cmwgPSAuLi9wYXJlbnQKKwkJZmV0Y2ggPSByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3R3by8qCisJW2JyYW5jaCAibWFzdGVyIl0KKwkJcmVtb3RlID0gb25lCisJCW1lcmdlID0gcmVmcy9oZWFkcy9tYXN0ZXIKKwlFT0YKKwlnaXQgcHVsbCAtLWFsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1kcnktcnVuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgY2xvbmVkcnkiICYmCisJZ2l0IGluaXQgY2xvbmVkcnkgJiYKKwkoCisJCWNkIGNsb25lZHJ5ICYmCisJCWdpdCBwdWxsIC0tZHJ5LXJ1biAuLi9wYXJlbnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9GRVRDSF9IRUFEICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9pbmRleCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLWFsbCAtLWRyeS1ydW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBjbG9uZWRkcnkiICYmCisJZ2l0IGluaXQgY2xvbmVkcnkgJiYKKwkoCisJCWNkIGNsb25lZHJ5ICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLi9wYXJlbnQgJiYKKwkJZ2l0IHB1bGwgLS1hbGwgLS1kcnktcnVuICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvRkVUQ0hfSEVBRCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaW5kZXggJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgc3JjIGRzdCIgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJdGVzdF9jb21taXQgdHdvCisJKSAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHNpZGUgSEVBRF4gJiYKKwkJdGVzdF9jb21taXQgdGhyZWUKKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLi4vc3JjIHNpZGUgJiYKKwkJZ2l0IHB1bGwgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIC4uL3NyYyBzaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCBkb2VzIG5vdCBhZGQgYSBzaWduLW9mZiBsaW5lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgc3JjIGRzdCBhY3R1YWwiICYmCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIG9uZSAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJdGVzdF9jb21taXQgLUMgc3JjIHR3byAmJgorCWdpdCAtQyBkc3QgcHVsbCAtLW5vLWZmICYmCisJZ2l0IC1DIGRzdCBzaG93IC1zIC0tcHJldHR5PSJmb3JtYXQ6JSh0cmFpbGVycykiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1uby1zaWdub2ZmIGRvZXMgbm90IGFkZCBzaWduLW9mZiBsaW5lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgc3JjIGRzdCBhY3R1YWwiICYmCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIG9uZSAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJdGVzdF9jb21taXQgLUMgc3JjIHR3byAmJgorCWdpdCAtQyBkc3QgcHVsbCAtLW5vLXNpZ25vZmYgLS1uby1mZiAmJgorCWdpdCAtQyBkc3Qgc2hvdyAtcyAtLXByZXR0eT0iZm9ybWF0OiUodHJhaWxlcnMpIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tc2lnbm9mZiBhZGQgYSBzaWduLW9mZiBsaW5lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgc3JjIGRzdCBleHBlY3RlZCBhY3R1YWwiICYmCisJZWNobyAiU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgb25lICYmCisJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgdHdvICYmCisJZ2l0IC1DIGRzdCBwdWxsIC0tc2lnbm9mZiAtLW5vLWZmICYmCisJZ2l0IC1DIGRzdCBzaG93IC1zIC0tcHJldHR5PSJmb3JtYXQ6JSh0cmFpbGVycykiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLW5vLXNpZ25vZmYgZmxhZyBjYW5jZWxzIC0tc2lnbm9mZiBmbGFnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgc3JjIGRzdCBhY3R1YWwiICYmCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIG9uZSAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJdGVzdF9jb21taXQgLUMgc3JjIHR3byAmJgorCWdpdCAtQyBkc3QgcHVsbCAtLXNpZ25vZmYgLS1uby1zaWdub2ZmIC0tbm8tZmYgJiYKKwlnaXQgLUMgZHN0IHNob3cgLXMgLS1wcmV0dHk9ImZvcm1hdDolKHRyYWlsZXJzKSIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjItcHVsbC1zeW1saW5rLnNoIGIvdC90NTUyMi1wdWxsLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmNmZjQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjItcHVsbC1zeW1saW5rLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsaW5nIGZyb20gc3ltbGlua2VkIHN1YmRpcicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhlIHNjZW5hcmlvIHdlIGFyZSBidWlsZGluZzoKKyMKKyMgICB0cmFzaFwgZGlyZWN0b3J5LworIyAgICAgY2xvbmUtcmVwby8KKyMgICAgICAgc3ViZGlyLworIyAgICAgICAgIGJhcgorIyAgICAgc3ViZGlyLWxpbmsgLT4gY2xvbmUtcmVwby9zdWJkaXIvCisjCisjIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBzdWJkaXItbGluay4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyBmaWxlID5zdWJkaXIvZmlsZSAmJgorCWdpdCBhZGQgc3ViZGlyL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1xIC1tIGZpbGUgJiYKKwlnaXQgY2xvbmUgLXEgLiBjbG9uZS1yZXBvICYmCisJbG4gLXMgY2xvbmUtcmVwby9zdWJkaXIvIHN1YmRpci1saW5rICYmCisJKAorCQljZCBjbG9uZS1yZXBvICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisJKSAmJgorCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisnCisKKyMgRGVtb25zdHJhdGUgdGhhdCB0aGluZ3Mgd29yayBpZiB3ZSBqdXN0IGF2b2lkIHRoZSBzeW1saW5rCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwdWxsaW5nIGZyb20gcmVhbCBzdWJkaXInICcKKwkoCisJCWVjaG8gcmVhbCA+c3ViZGlyL2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSByZWFsIHN1YmRpci9maWxlICYmCisJCWNkIGNsb25lLXJlcG8vc3ViZGlyLyAmJgorCQlnaXQgcHVsbCAmJgorCQl0ZXN0IHJlYWwgPSAkKGNhdCBmaWxlKQorCSkKKycKKworIyBGcm9tIHN1YmRpci1saW5rLCBwdWxsaW5nIHNob3VsZCB3b3JrIGFzIGl0IGRvZXMgZnJvbQorIyBjbG9uZS1yZXBvL3N1YmRpci8uCisjCisjIEluc3RlYWQsIHRoZSBlcnJvciBwdWxsIGdhdmUgd2FzOgorIworIyAgIGZhdGFsOiAnb3JpZ2luJzogdW5hYmxlIHRvIGNoZGlyIG9yIG5vdCBhIGdpdCBhcmNoaXZlCisjICAgZmF0YWw6IFRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5CisjCisjIGJlY2F1c2UgZ2l0IHdvdWxkIGZpbmQgdGhlIC5naXQvY29uZmlnIGZvciB0aGUgInRyYXNoIGRpcmVjdG9yeSIKKyMgcmVwbywgbm90IGZvciB0aGUgY2xvbmUtcmVwbyByZXBvLiAgVGhlICJ0cmFzaCBkaXJlY3RvcnkiIHJlcG8KKyMgaGFkIG5vIGVudHJ5IGZvciBvcmlnaW4uICBHaXQgZm91bmQgdGhlIHdyb25nIC5naXQgYmVjYXVzZQorIyBnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwIHByaW50ZWQgYSBwYXRoIHJlbGF0aXZlIHRvCisjIGNsb25lLXJlcG8vc3ViZGlyLywgbm90IHN1YmRpci1saW5rLy4gIEdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXAKKyMgdXNlZCB0aGUgY29ycmVjdCAuZ2l0LCBidXQgd2hlbiB0aGUgZ2l0IHB1bGwgc2hlbGwgc2NyaXB0IGRpZAorIyAiY2QgJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwKSIsIGl0IGVuZGVkIHVwIGluIHRoZSB3cm9uZworIyBkaXJlY3RvcnkuICBBIFBPU0lYIHNoZWxsJ3MgImNkIiB3b3JrcyBhIGxpdHRsZSBkaWZmZXJlbnRseQorIyB0aGFuIGNoZGlyKCkgaW4gQzsgImNkIC1QIiBpcyBtdWNoIGNsb3NlciB0byBjaGRpcigpLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncHVsbGluZyBmcm9tIHN5bWxpbmtlZCBzdWJkaXInICcKKwkoCisJCWVjaG8gbGluayA+c3ViZGlyL2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBsaW5rIHN1YmRpci9maWxlICYmCisJCWNkIHN1YmRpci1saW5rLyAmJgorCQlnaXQgcHVsbCAmJgorCQl0ZXN0IGxpbmsgPSAkKGNhdCBmaWxlKQorCSkKKycKKworIyBQcm92ZSB0aGF0IHRoZSByZW1vdGUgZW5kIHJlYWxseSBpcyBhIHJlcG8sIGFuZCBvdGhlciBjb21tYW5kcworIyB3b3JrIGZpbmUgaW4gdGhpcyBjb250ZXh0LiAgSXQncyBqdXN0IHRoYXQgImdpdCBwdWxsIiBicmVha3MuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwdXNoaW5nIGZyb20gc3ltbGlua2VkIHN1YmRpcicgJworCSgKKwkJY2Qgc3ViZGlyLWxpbmsvICYmCisJCWVjaG8gcHVzaCA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIHB1c2ggLi9maWxlICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXRlc3QgcHVzaCA9ICQoZ2l0IHNob3cgSEVBRDpzdWJkaXIvZmlsZSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTIzLXB1c2gtdXBzdHJlYW0uc2ggYi90L3Q1NTIzLXB1c2gtdXBzdHJlYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzBkZjgxYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaApAQCAtMCwwICsxLDExOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1c2ggd2l0aCAtLXNldC11cHN0cmVhbScKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKworZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtKCkgeworCXJtIC1yZiBwYXJlbnQgJiYgZ2l0IGluaXQgLS1iYXJlIHBhcmVudAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlIHBhcmVudCcgJworCWVuc3VyZV9mcmVzaF91cHN0cmVhbSAmJgorCWdpdCByZW1vdGUgYWRkIHVwc3RyZWFtIHBhcmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBsb2NhbCBjb21taXQnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZQorJworCitjaGVja19jb25maWcoKSB7CisJKGVjaG8gJDI7IGVjaG8gJDMpID5leHBlY3QuJDEKKwkoZ2l0IGNvbmZpZyBicmFuY2guJDEucmVtb3RlCisJIGdpdCBjb25maWcgYnJhbmNoLiQxLm1lcmdlKSA+YWN0dWFsLiQxCisJdGVzdF9jbXAgZXhwZWN0LiQxIGFjdHVhbC4kMQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjptYXN0ZXInICcKKwlnaXQgcHVzaCAtdSB1cHN0cmVhbSBtYXN0ZXI6bWFzdGVyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciB1cHN0cmVhbSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjpvdGhlcicgJworCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjpvdGhlciAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IC0tZHJ5LXJ1biBtYXN0ZXI6b3RoZXJYJyAnCisJZ2l0IHB1c2ggLXUgLS1kcnktcnVuIHVwc3RyZWFtIG1hc3RlcjpvdGhlclggJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIHJlZnMvaGVhZHMvb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtdSBtYXN0ZXIyOm1hc3RlcjInICcKKwlnaXQgYnJhbmNoIG1hc3RlcjIgJiYKKwlnaXQgcHVzaCAtdSB1cHN0cmVhbSBtYXN0ZXIyOm1hc3RlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL21hc3RlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtdSBtYXN0ZXIyOm90aGVyMicgJworCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjI6b3RoZXIyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlcjIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtdSA6bWFzdGVyMicgJworCWdpdCBwdXNoIC11IHVwc3RyZWFtIDptYXN0ZXIyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlcjIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtdSAtLWFsbCcgJworCWdpdCBicmFuY2ggYWxsMSAmJgorCWdpdCBicmFuY2ggYWxsMiAmJgorCWdpdCBwdXNoIC11IC0tYWxsICYmCisJY2hlY2tfY29uZmlnIGFsbDEgdXBzdHJlYW0gcmVmcy9oZWFkcy9hbGwxICYmCisJY2hlY2tfY29uZmlnIGFsbDIgdXBzdHJlYW0gcmVmcy9oZWFkcy9hbGwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgSEVBRCcgJworCWdpdCBjaGVja291dCAtYiBoZWFkYnJhbmNoICYmCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gSEVBRCAmJgorCWNoZWNrX2NvbmZpZyBoZWFkYnJhbmNoIHVwc3RyZWFtIHJlZnMvaGVhZHMvaGVhZGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHJvZ3Jlc3MgbWVzc2FnZXMgZ28gdG8gdHR5JyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiV3JpdGluZyBvYmplY3RzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgbWVzc2FnZXMgZG8gbm90IGdvIHRvIG5vbi10dHknICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCSMgc2tpcCBwcm9ncmVzcyBtZXNzYWdlcywgc2luY2Ugc3RkZXJyIGlzIG5vbi10dHkKKwlnaXQgcHVzaCAtdSB1cHN0cmVhbSBtYXN0ZXIgPm91dCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiV3JpdGluZyBvYmplY3RzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgbWVzc2FnZXMgZ28gdG8gbm9uLXR0eSAoZm9yY2VkKScgJworCWVuc3VyZV9mcmVzaF91cHN0cmVhbSAmJgorCisJIyBmb3JjZSBwcm9ncmVzcyBtZXNzYWdlcyB0byBzdGRlcnIsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vbi10dHkKKwlnaXQgcHVzaCAtdSAtLXByb2dyZXNzIHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiV3JpdGluZyBvYmplY3RzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLXEgc3VwcHJlc3NlcyBwcm9ncmVzcycgJworCWVuc3VyZV9mcmVzaF91cHN0cmVhbSAmJgorCisJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCAtdSAtcSB1cHN0cmVhbSBtYXN0ZXIgPm91dCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiV3JpdGluZyBvYmplY3RzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLS1uby1wcm9ncmVzcyBzdXBwcmVzc2VzIHByb2dyZXNzJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoIC11IC0tbm8tcHJvZ3Jlc3MgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlVucGFja2luZyBvYmplY3RzIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIldyaXRpbmcgb2JqZWN0cyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdxdWlldCBwdXNoJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoIC0tcXVpZXQgLS1uby1wcm9ncmVzcyB1cHN0cmVhbSBtYXN0ZXIgMj4mMSB8IHRlZSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyNC1wdWxsLW1zZy5zaCBiL3QvdDU1MjQtcHVsbC1tc2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI3OGFkYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjQtcHVsbC1tc2cuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwdWxsIG1lc3NhZ2UgZ2VuZXJhdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK2RvbGxhcj0nJERvbGxhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgaW5pdGlhbCBhZmlsZSBvcmlnaW5hbCAmJgorCWdpdCBjbG9uZSAuIGNsb25lZCAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCWVjaG8gYWRkZWQgPmJmaWxlICYmCisJCWdpdCBhZGQgYmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBiZmlsZSIKKwkpICYmCisJdGVzdF90aWNrICYmIHRlc3RfdGljayAmJgorCWVjaG8gInNlY29uZCIgPmFmaWxlICYmCisJZ2l0IGFkZCBhZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisJZWNobyAib3JpZ2luYWwgJGRvbGxhciIgPmFmaWxlICYmCisJZ2l0IGFkZCBhZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImRvIG5vdCBjbG9iYmVyICRkb2xsYXIgc2lnbnMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcHVsbCAnCisoCisJY2QgY2xvbmVkICYmCisJZ2l0IHB1bGwgLS1sb2cgJiYKKwlnaXQgbG9nIC0yICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yZXN1bHQgJiYKKwlncmVwIERvbGxhciByZXN1bHQKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb2c9MSBsaW1pdHMgc2hvcnRsb2cgbGVuZ3RoJyAnCisoCisJY2QgY2xvbmVkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3QgIiQoY2F0IGFmaWxlKSIgPSBvcmlnaW5hbCAmJgorCXRlc3QgIiQoY2F0IGJmaWxlKSIgPSBhZGRlZCAmJgorCWdpdCBwdWxsIC0tbG9nPTEgJiYKKwlnaXQgbG9nIC0zICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yZXN1bHQgJiYKKwlncmVwIERvbGxhciByZXN1bHQgJiYKKwkhIGdyZXAgInNlY29uZCBjb21taXQiIHJlc3VsdAorKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjUtZmV0Y2gtdGFnb3B0LnNoIGIvdC90NTUyNS1mZXRjaC10YWdvcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDU4MTVmNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjUtZmV0Y2gtdGFnb3B0LnNoCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0YWdvcHQgdmFyaWFibGUgYWZmZWN0cyAiZ2l0IGZldGNoIiBhbmQgaXMgb3ZlcnJpZGRlbiBieSBjb21tYW5kbGluZS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitzZXR1cF9jbG9uZSAoKSB7CisJZ2l0IGNsb25lIC0tbWlycm9yIC4gJDEgJiYKKwlnaXQgcmVtb3RlIGFkZCByZW1vdGVfJDEgJDEgJiYKKwkoY2QgJDEgJiYKKwlnaXQgdGFnIHRhZ18kMSAmJgorCWdpdCBicmFuY2ggYnJhbmNoXyQxKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCB0ZXN0ICYmCisJc2V0dXBfY2xvbmUgb25lICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucmVtb3RlX29uZS50YWdvcHQgLS1uby10YWdzICYmCisJc2V0dXBfY2xvbmUgdHdvICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucmVtb3RlX3R3by50YWdvcHQgLS10YWdzCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCB3aXRoIHRhZ29wdD0tLW5vLXRhZ3MgZG9lcyBub3QgZ2V0IHRhZyIgJworCWdpdCBmZXRjaCByZW1vdGVfb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIHRhZ19vbmUgJiYKKwlnaXQgc2hvdy1yZWYgcmVtb3RlX29uZS9icmFuY2hfb25lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCAtLXRhZ3Mgd2l0aCB0YWdvcHQ9LS1uby10YWdzIGdldHMgdGFnIiAnCisJKAorCQljZCBvbmUgJiYKKwkJZ2l0IGJyYW5jaCBzZWNvbmRfYnJhbmNoX29uZQorCSkgJiYKKwlnaXQgZmV0Y2ggLS10YWdzIHJlbW90ZV9vbmUgJiYKKwlnaXQgc2hvdy1yZWYgdGFnX29uZSAmJgorCWdpdCBzaG93LXJlZiByZW1vdGVfb25lL3NlY29uZF9icmFuY2hfb25lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCAtLW5vLXRhZ3Mgd2l0aCB0YWdvcHQ9LS10YWdzIGRvZXMgbm90IGdldCB0YWciICcKKwlnaXQgZmV0Y2ggLS1uby10YWdzIHJlbW90ZV90d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgdGFnX3R3byAmJgorCWdpdCBzaG93LXJlZiByZW1vdGVfdHdvL2JyYW5jaF90d28KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIHdpdGggdGFnb3B0PS0tdGFncyBnZXRzIHRhZyIgJworCSgKKwkJY2QgdHdvICYmCisJCWdpdCBicmFuY2ggc2Vjb25kX2JyYW5jaF90d28KKwkpICYmCisJZ2l0IGZldGNoIHJlbW90ZV90d28gJiYKKwlnaXQgc2hvdy1yZWYgdGFnX3R3byAmJgorCWdpdCBzaG93LXJlZiByZW1vdGVfdHdvL3NlY29uZF9icmFuY2hfdHdvCisJJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTI2LWZldGNoLXN1Ym1vZHVsZXMuc2ggYi90L3Q1NTI2LWZldGNoLXN1Ym1vZHVsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjMyMDVkZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjYtZmV0Y2gtc3VibW9kdWxlcy5zaApAQCAtMCwwICsxLDcyMiBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAxMCwgSmVucyBMZWhtYW5uCisKK3Rlc3RfZGVzY3JpcHRpb249J1JlY3Vyc2l2ZSAiZ2l0IGZldGNoIiBmb3Igc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3B3ZD0kKHB3ZCkKKworYWRkX3Vwc3RyZWFtX2NvbW1pdCgpIHsKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQllY2hvIG5ldyA+PiBzdWJmaWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgYWRkIHN1YmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBuZXcgc3ViZmlsZSAmJgorCQloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQllY2hvICJGZXRjaGluZyBzdWJtb2R1bGUgc3VibW9kdWxlIiA+IC4uL2V4cGVjdC5lcnIgJiYKKwkJZWNobyAiRnJvbSAkcHdkL3N1Ym1vZHVsZSIgPj4gLi4vZXhwZWN0LmVyciAmJgorCQllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiAuLi9leHBlY3QuZXJyCisJKSAmJgorCSgKKwkJY2QgZGVlcHN1Ym1vZHVsZSAmJgorCQloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQllY2hvIG5ldyA+PiBkZWVwc3ViZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGFkZCBkZWVwc3ViZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIG5ldyBkZWVwc3ViZmlsZSAmJgorCQloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQllY2hvICJGZXRjaGluZyBzdWJtb2R1bGUgc3VibW9kdWxlL3N1YmRpci9kZWVwc3VibW9kdWxlIiA+PiAuLi9leHBlY3QuZXJyCisJCWVjaG8gIkZyb20gJHB3ZC9kZWVwc3VibW9kdWxlIiA+PiAuLi9leHBlY3QuZXJyICYmCisJCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IC4uL2V4cGVjdC5lcnIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGRlZXBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIGRlZXBzdWJtb2R1bGUgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBkZWVwc3ViY29udGVudCA+IGRlZXBzdWJmaWxlICYmCisJCWdpdCBhZGQgZGVlcHN1YmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBuZXcgZGVlcHN1YmZpbGUKKwkpICYmCisJbWtkaXIgc3VibW9kdWxlICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBzdWJjb250ZW50ID4gc3ViZmlsZSAmJgorCQlnaXQgYWRkIHN1YmZpbGUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRwd2QvZGVlcHN1Ym1vZHVsZSIgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBuZXcKKwkpICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRwd2Qvc3VibW9kdWxlIiBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1hbSBpbml0aWFsICYmCisJZ2l0IGNsb25lIC4gZG93bnN0cmVhbSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHJlY3Vyc2VzIGludG8gc3VibW9kdWxlcyIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic3VibW9kdWxlLnJlY3Vyc2Ugb3B0aW9uIHRyaWdnZXJzIHJlY3Vyc2l2ZSBmZXRjaCIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IC1jIHN1Ym1vZHVsZS5yZWN1cnNlIGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLWoyIGhhcyB0aGUgc2FtZSBvdXRwdXQgYmVoYXZpb3VyIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlHSVRfVFJBQ0U9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2Uub3V0IiBnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLWoyIDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIgJiYKKwlncmVwICIyIHRhc2tzIiB0cmFjZS5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggYWxvbmUgb25seSBmZXRjaGVzIHN1cGVycHJvamVjdCIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIG9ubHkgZmV0Y2hlcyBzdXBlcnByb2plY3QiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInVzaW5nIGZldGNoUmVjdXJzZVN1Ym1vZHVsZXM9dHJ1ZSBpbiAuZ2l0bW9kdWxlcyByZWN1cnNlcyBpbnRvIHN1Ym1vZHVsZXMiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNoUmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZSAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyBvdmVycmlkZXMgLmdpdG1vZHVsZXMgY29uZmlnIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidXNpbmcgZmV0Y2hSZWN1cnNlU3VibW9kdWxlcz1mYWxzZSBpbiAuZ2l0L2NvbmZpZyBvdmVycmlkZXMgc2V0dGluZyBpbiAuZ2l0bW9kdWxlcyIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyBmYWxzZSAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMgb3ZlcnJpZGVzIGZldGNoUmVjdXJzZVN1Ym1vZHVsZXMgc2V0dGluZyBmcm9tIC5naXQvY29uZmlnIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIgJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLXF1aWV0IHByb3BhZ2F0ZXMgdG8gc3VibW9kdWxlcyIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1xdWlldCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLXF1aWV0IHByb3BhZ2F0ZXMgdG8gcGFyYWxsZWwgc3VibW9kdWxlcyIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLWogMiAtLXF1aWV0ICA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWRyeS1ydW4gcHJvcGFnYXRlcyB0byBzdWJtb2R1bGVzIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1kcnktcnVuID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiV2l0aG91dCAtLWRyeS1ydW4gcHJvcGFnYXRlcyB0byBzdWJtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlY3Vyc2VTdWJtb2R1bGVzPXRydWUgcHJvcGFnYXRlcyBpbnRvIHN1Ym1vZHVsZXMiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZSAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLXJlY3Vyc2Utc3VibW9kdWxlcyBvdmVycmlkZXMgY29uZmlnIGluIHN1Ym1vZHVsZSIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIGZhbHNlCisJCSkgJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgb3ZlcnJpZGVzIGNvbmZpZyBzZXR0aW5nIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIHRydWUgJiYKKwkJZ2l0IGZldGNoIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJlY3Vyc2lvbiBkb2Vzbid0IGhhcHBlbiB3aGVuIG5vIG5ldyBjb21taXRzIGFyZSBmZXRjaGVkIGluIHRoZSBzdXBlcnByb2plY3QiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkJKSAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJlY3Vyc2lvbiBzdG9wcyB3aGVuIG5vIG5ldyBzdWJtb2R1bGUgY29tbWl0cyBhcmUgZmV0Y2hlZCIgJworCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci5zdWIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PmV4cGVjdC5lcnIuc3ViICYmCisJaGVhZCAtMyBleHBlY3QuZXJyID4+IGV4cGVjdC5lcnIuc3ViICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIuc3ViIGFjdHVhbC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSZWN1cnNpb24gZG9lc24ndCBoYXBwZW4gd2hlbiBuZXcgc3VwZXJwcm9qZWN0IGNvbW1pdHMgZG9uJ3QgY2hhbmdlIGFueSBzdWJtb2R1bGVzIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyBhID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBmaWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci5maWxlICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gZXhwZWN0LmVyci5maWxlICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci5maWxlIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmVjdXJzaW9uIHBpY2tzIHVwIGNvbmZpZyBpbiBzdWJtb2R1bGUiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyB0cnVlCisJCSkKKwkpICYmCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci5zdWIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiBleHBlY3QuZXJyLnN1YiAmJgorCWNhdCBleHBlY3QuZXJyID4+IGV4cGVjdC5lcnIuc3ViICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkJKQorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci5zdWIgYWN0dWFsLmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJlY3Vyc2lvbiBwaWNrcyB1cCBhbGwgc3VibW9kdWxlcyB3aGVuIG5lY2Vzc2FyeSIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQkoCisJCQljZCBzdWJkaXIvZGVlcHN1Ym1vZHVsZSAmJgorCQkJZ2l0IGZldGNoICYmCisJCQlnaXQgY2hlY2tvdXQgLXEgRkVUQ0hfSEVBRAorCQkpICYmCisJCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReKSAmJgorCQlnaXQgYWRkIHN1YmRpci9kZWVwc3VibW9kdWxlICYmCisJCWdpdCBjb21taXQgLW0gIm5ldyBkZWVwc3VibW9kdWxlIiAmJgorCQloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQllY2hvICJGZXRjaGluZyBzdWJtb2R1bGUgc3VibW9kdWxlIiA+IC4uL2V4cGVjdC5lcnIuc3ViICYmCisJCWVjaG8gIkZyb20gJHB3ZC9zdWJtb2R1bGUiID4+IC4uL2V4cGVjdC5lcnIuc3ViICYmCisJCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IC4uL2V4cGVjdC5lcnIuc3ViCisJKSAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci4yICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gZXhwZWN0LmVyci4yICYmCisJY2F0IGV4cGVjdC5lcnIuc3ViID4+IGV4cGVjdC5lcnIuMiAmJgorCXRhaWwgLTMgZXhwZWN0LmVyciA+PiBleHBlY3QuZXJyLjIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci4yIGFjdHVhbC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kJyBkb2Vzbid0IHJlY3Vyc2Ugd2hlbiBubyBuZXcgY29tbWl0cyBhcmUgZmV0Y2hlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IChhbmQgaWdub3JlcyBjb25maWcpIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1YmRpci9kZWVwc3VibW9kdWxlICYmCisJCQlnaXQgZmV0Y2ggJiYKKwkJCWdpdCBjaGVja291dCAtcSBGRVRDSF9IRUFECisJCSkgJiYKKwkJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJCWdpdCBhZGQgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmV3IGRlZXBzdWJtb2R1bGUiICYmCisJCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gRmV0Y2hpbmcgc3VibW9kdWxlIHN1Ym1vZHVsZSA+IC4uL2V4cGVjdC5lcnIuc3ViICYmCisJCWVjaG8gIkZyb20gJHB3ZC9zdWJtb2R1bGUiID4+IC4uL2V4cGVjdC5lcnIuc3ViICYmCisJCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IC4uL2V4cGVjdC5lcnIuc3ViCisJKSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIHRydWUgJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIgJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJy0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCcgcmVjdXJzZXMgYXMgZGVlcCBhcyBuZWNlc3NhcnkgKGFuZCBpZ25vcmVzIGNvbmZpZykiICcKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IHN1Ym1vZHVsZSIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCXRhaWwgLTMgZXhwZWN0LmVyciA+IGV4cGVjdC5lcnIuZGVlcHN1YiAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PmV4cGVjdC5lcnIgJiYKKwljYXQgZXhwZWN0LmVyci5zdWIgPj4gZXhwZWN0LmVyciAmJgorCWNhdCBleHBlY3QuZXJyLmRlZXBzdWIgPj4gZXhwZWN0LmVyciAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIGZhbHNlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViZGlyL2RlZXBzdWJtb2R1bGUuZmV0Y2hSZWN1cnNpdmUgZmFsc2UKKwkJKSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIC0tdW5zZXQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1YmRpci9kZWVwc3VibW9kdWxlLmZldGNoUmVjdXJzaXZlCisJCSkKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIictLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQnIHN0b3BzIHdoZW4gbm8gbmV3IHN1Ym1vZHVsZSBjb21taXRzIGFyZSBmb3VuZCBpbiB0aGUgc3VwZXJwcm9qZWN0IChhbmQgaWdub3JlcyBjb25maWcpIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyBhID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgZmlsZSIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIuZmlsZSAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IGV4cGVjdC5lcnIuZmlsZSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLmZpbGUgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXM9b24tZGVtYW5kJyBvdmVycmlkZXMgZ2xvYmFsIGNvbmZpZyIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMKKwkpICYmCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgZmFsc2UgJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IHN1Ym1vZHVsZSIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIuMiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+ZXhwZWN0LmVyci4yICYmCisJaGVhZCAtMyBleHBlY3QuZXJyID4+IGV4cGVjdC5lcnIuMiAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIG9uLWRlbWFuZCAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci4yIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJ3N1Ym1vZHVsZS48c3ViPi5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzPW9uLWRlbWFuZCcgb3ZlcnJpZGVzIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcworCSkgJiYKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyBmYWxzZSAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyci4yICYmCisJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj5leHBlY3QuZXJyLjIgJiYKKwloZWFkIC0zIGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci4yICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzIG9uLWRlbWFuZCAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzCisJKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIuMiBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRvbid0IGZldGNoIHN1Ym1vZHVsZSB3aGVuIG5ld2x5IHJlY29yZGVkIGNvbW1pdHMgYXJlIGFscmVhZHkgcHJlc2VudCIgJworCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCAtcSBIRUFEXl4KKwkpICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSByZXdvdW5kIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyciAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IGV4cGVjdC5lcnIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgLXEgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXM9b24tZGVtYW5kJyB3b3JrcyBhbHNvIHdpdGhvdXQgLmdpdG1vZHVsZXMgZW50cnkiICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzCisJKSAmJgorCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IHJtIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IHN1Ym1vZHVsZSB3aXRob3V0IC5naXRtb2R1bGVzIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID5leHBlY3QuZXJyLjIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PmV4cGVjdC5lcnIuMiAmJgorCWhlYWQgLTMgZXhwZWN0LmVyciA+PmV4cGVjdC5lcnIuMiAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlybSAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIG9uLWRlbWFuZCAmJgorCQkjIGZha2Ugc3VibW9kdWxlIGNvbmZpZ3VyYXRpb24gdG8gYXZvaWQgc2tpcHBpbmcgc3VibW9kdWxlIGhhbmRsaW5nCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmZha2UucGF0aCBmYWtlICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmZha2UudXJsIGZha2V1cmwgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQkjIGNsZWFudXAKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzICYmCisJCWdpdCByZXNldCAtLWhhcmQKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci4yIGFjdHVhbC5lcnIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gLS0gLmdpdG1vZHVsZXMgJiYKKwlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IHN1Ym1vZHVsZSByZXN0b3JlZCAuZ2l0bW9kdWxlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgc3VibW9kdWxlcyByZXNwZWN0cyBwYXJhbGxlbCBzZXR0aW5ncycgJworCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlHSVRfVFJBQ0U9JChwd2QpL3RyYWNlLm91dCBnaXQgZmV0Y2ggJiYKKwkJZ3JlcCAiMSB0YXNrcyIgdHJhY2Uub3V0ICYmCisJCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBmZXRjaCAtLWpvYnMgNyAmJgorCQlncmVwICI3IHRhc2tzIiB0cmFjZS5vdXQgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZmV0Y2hKb2JzIDggJiYKKwkJR0lUX1RSQUNFPSQocHdkKS90cmFjZS5vdXQgZ2l0IGZldGNoICYmCisJCWdyZXAgIjggdGFza3MiIHRyYWNlLm91dCAmJgorCQlHSVRfVFJBQ0U9JChwd2QpL3RyYWNlLm91dCBnaXQgZmV0Y2ggLS1qb2JzIDkgJiYKKwkJZ3JlcCAiOSB0YXNrcyIgdHJhY2Uub3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyBzdWJtb2R1bGUgaW50byBhIGJyb2tlbiByZXBvc2l0b3J5JyAnCisJIyBQcmVwYXJlIHNyYyBhbmQgc3JjL3N1YiBuZXN0ZWQgaW4gaXQKKwlnaXQgaW5pdCBzcmMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgaW5pdCBzdWIgJiYKKwkJZ2l0IC1DIHN1YiBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiaW5pdGlhbCBpbiBzdWIiICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC0tIC4vc3ViIHN1YiAmJgorCQlnaXQgY29tbWl0IC1tICJpbml0aWFsIGluIHRvcCIKKwkpICYmCisKKwkjIENsb25lIHRoZSBvbGQtZmFzaG9uZWQgd2F5CisJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwlnaXQgLUMgZHN0IGNsb25lIC4uL3NyYy9zdWIgc3ViICYmCisKKwkjIE1ha2Ugc3VyZSB0aGF0IG9sZC1mYXNob25lZCBsYXlvdXQgaXMgc3RpbGwgc3VwcG9ydGVkCisJZ2l0IC1DIGRzdCBzdGF0dXMgJiYKKworCSMgImRpZmYiIHdvdWxkIGZpbmQgbm8gY2hhbmdlCisJZ2l0IC1DIGRzdCBkaWZmIC0tZXhpdC1jb2RlICYmCisKKwkjIFJlY3Vyc2l2ZS1mZXRjaCB3b3JrcyBmaW5lCisJZ2l0IC1DIGRzdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAmJgorCisJIyBCcmVhayB0aGUgcmVjZWl2aW5nIHN1Ym1vZHVsZQorCXJtIC1mIGRzdC9zdWIvLmdpdC9IRUFEICYmCisKKwkjIE5PVEU6IHdpdGhvdXQgdGhlIGZpeCB0aGUgZm9sbG93aW5nIHRlc3RzIHdpbGwgcmVjdXJzZSBmb3JldmVyIQorCSMgVGhleSBzaG91bGQgdGVybWluYXRlIHdpdGggYW4gZXJyb3IuCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZHN0IHN0YXR1cyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkc3QgZGlmZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkc3QgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggbmV3IGNvbW1pdHMgd2hlbiBzdWJtb2R1bGUgZ290IHJlbmFtZWQiICcKKwlnaXQgY2xvbmUgLiBkb3duc3RyZWFtX3JlbmFtZSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbV9yZW5hbWUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCWdpdCBjaGVja291dCAtYiByZW5hbWUgJiYKKwkJZ2l0IG12IHN1Ym1vZHVsZSBzdWJtb2R1bGVfcmVuYW1lZCAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfcmVuYW1lZCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZV9zdWIgJiYKKwkJCWVjaG8gYSA+YSAmJgorCQkJZ2l0IGFkZCBhICYmCisJCQlnaXQgY29tbWl0IC1tYSAmJgorCQkJZ2l0IHB1c2ggb3JpZ2luIHJlbmFtZV9zdWIgJiYKKwkJCWdpdCByZXYtcGFyc2UgSEVBRCA+Li4vLi4vZXhwZWN0CisJCSkgJiYKKwkJZ2l0IGFkZCBzdWJtb2R1bGVfcmVuYW1lZCAmJgorCQlnaXQgY29tbWl0IC1tICJ1cGRhdGUgcmVuYW1lZCBzdWJtb2R1bGUiICYmCisJCWdpdCBwdXNoIG9yaWdpbiByZW5hbWUKKwkpICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgcmV2LXBhcnNlIG9yaWdpbi9yZW5hbWVfc3ViID4uLi8uLi9hY3R1YWwKKwkJKQorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIG5ldyBzdWJtb2R1bGUgY29tbWl0cyBvbi1kZW1hbmQgb3V0c2lkZSBzdGFuZGFyZCByZWZzcGVjIiAnCisJIyBhZGQgYSBzZWNvbmQgc3VibW9kdWxlIGFuZCBlbnN1cmUgaXQgaXMgYXJvdW5kIGluIGRvd25zdHJlYW0gZmlyc3QKKwlnaXQgY2xvbmUgc3VibW9kdWxlIHN1YjEgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3N1YjEgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRpbmcgYSBzZWNvbmQgc3VibW9kdWxlIiAmJgorCWdpdCAtQyBkb3duc3RyZWFtIHB1bGwgJiYKKwlnaXQgLUMgZG93bnN0cmVhbSBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICYmCisKKwlDPSQoZ2l0IC1DIHN1Ym1vZHVsZSBjb21taXQtdHJlZSAtbSAibmV3IGNoYW5nZSBvdXRzaWRlIHJlZnMvaGVhZHMiIEhFQURee3RyZWV9KSAmJgorCWdpdCAtQyBzdWJtb2R1bGUgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvMSAkQyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICRDIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCisJRD0kKGdpdCAtQyBzdWIxIGNvbW1pdC10cmVlIC1tICJuZXcgY2hhbmdlIG91dHNpZGUgcmVmcy9oZWFkcyIgSEVBRF57dHJlZX0pICYmCisJZ2l0IC1DIHN1YjEgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvMiAkRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICREIHN1YjEgJiYKKworCWdpdCBjb21taXQgLW0gInVwZGF0ZWQgc3VibW9kdWxlcyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMiICYmCisJRT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvMyAkRSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgb3JpZ2luIHJlZnMvY2hhbmdlcy8zOnJlZnMvaGVhZHMvbXlfYnJhbmNoICYmCisJCWdpdCAtQyBzdWJtb2R1bGUgY2F0LWZpbGUgLXQgJEMgJiYKKwkJZ2l0IC1DIHN1YjEgY2F0LWZpbGUgLXQgJEQgJiYKKwkJZ2l0IGNoZWNrb3V0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5ldyBzdWJtb2R1bGUgY29tbWl0IG9uLWRlbWFuZCBpbiBGRVRDSF9IRUFEJyAnCisJIyBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyB0ZXN0IGZvciBzZXR1cAorCisJQz0kKGdpdCAtQyBzdWJtb2R1bGUgY29tbWl0LXRyZWUgLW0gImFub3RoZXIgY2hhbmdlIG91dHNpZGUgcmVmcy9oZWFkcyIgSEVBRF57dHJlZX0pICYmCisJZ2l0IC1DIHN1Ym1vZHVsZSB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy80ICRDICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJEMgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisKKwlEPSQoZ2l0IC1DIHN1YjEgY29tbWl0LXRyZWUgLW0gImFub3RoZXIgY2hhbmdlIG91dHNpZGUgcmVmcy9oZWFkcyIgSEVBRF57dHJlZX0pICYmCisJZ2l0IC1DIHN1YjEgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvNSAkRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICREIHN1YjEgJiYKKworCWdpdCBjb21taXQgLW0gInVwZGF0ZWQgc3VibW9kdWxlcyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMiICYmCisJRT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvNiAkRSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgb3JpZ2luIHJlZnMvY2hhbmdlcy82ICYmCisJCWdpdCAtQyBzdWJtb2R1bGUgY2F0LWZpbGUgLXQgJEMgJiYKKwkJZ2l0IC1DIHN1YjEgY2F0LWZpbGUgLXQgJEQgJiYKKwkJZ2l0IGNoZWNrb3V0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5ldyBzdWJtb2R1bGUgY29tbWl0cyBvbi1kZW1hbmQgd2l0aG91dCAuZ2l0bW9kdWxlcyBlbnRyeScgJworCSMgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgdGVzdCBmb3Igc2V0dXAKKworCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3ViMSAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tICJkZWxldGUgZ2l0bW9kdWxlcyBmaWxlIiAmJgorCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwlnaXQgLUMgZG93bnN0cmVhbSBmZXRjaCAmJgorCWdpdCAtQyBkb3duc3RyZWFtIGNoZWNrb3V0IG9yaWdpbi9tYXN0ZXIgJiYKKworCUM9JChnaXQgLUMgc3VibW9kdWxlIGNvbW1pdC10cmVlIC1tICJ5ZXQgYW5vdGhlciBjaGFuZ2Ugb3V0c2lkZSByZWZzL2hlYWRzIiBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgLUMgc3VibW9kdWxlIHVwZGF0ZS1yZWYgcmVmcy9jaGFuZ2VzLzcgJEMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAkQyBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKworCUQ9JChnaXQgLUMgc3ViMSBjb21taXQtdHJlZSAtbSAieWV0IGFub3RoZXIgY2hhbmdlIG91dHNpZGUgcmVmcy9oZWFkcyIgSEVBRF57dHJlZX0pICYmCisJZ2l0IC1DIHN1YjEgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvOCAkRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICREIHN1YjEgJiYKKworCWdpdCBjb21taXQgLW0gInVwZGF0ZWQgc3VibW9kdWxlcyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMiICYmCisJRT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvOSAkRSAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgb3JpZ2luIHJlZnMvY2hhbmdlcy85ICYmCisJCWdpdCAtQyBzdWJtb2R1bGUgY2F0LWZpbGUgLXQgJEMgJiYKKwkJZ2l0IC1DIHN1YjEgY2F0LWZpbGUgLXQgJEQgJiYKKwkJZ2l0IGNoZWNrb3V0IC0tcmVjdXJzZS1zdWJtb2R1bGVzIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5ldyBzdWJtb2R1bGUgY29tbWl0IGludGVybWl0dGVudGx5IHJlZmVyZW5jZWQgYnkgc3VwZXJwcm9qZWN0JyAnCisJIyBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyB0ZXN0IGZvciBzZXR1cAorCisJRD0kKGdpdCAtQyBzdWIxIGNvbW1pdC10cmVlIC1tICJjaGFuZ2UgMTAgb3V0c2lkZSByZWZzL2hlYWRzIiBIRUFEXnt0cmVlfSkgJiYKKwlFPSQoZ2l0IC1DIHN1YjEgY29tbWl0LXRyZWUgLW0gImNoYW5nZSAxMSBvdXRzaWRlIHJlZnMvaGVhZHMiIEhFQURee3RyZWV9KSAmJgorCUY9JChnaXQgLUMgc3ViMSBjb21taXQtdHJlZSAtbSAiY2hhbmdlIDEyIG91dHNpZGUgcmVmcy9oZWFkcyIgSEVBRF57dHJlZX0pICYmCisKKwlnaXQgLUMgc3ViMSB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy8xMCAkRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICREIHN1YjEgJiYKKwlnaXQgY29tbWl0IC1tICJ1cGRhdGVkIHN1Ym1vZHVsZXMgb3V0c2lkZSBvZiByZWZzL2hlYWRzIiAmJgorCisJZ2l0IC1DIHN1YjEgdXBkYXRlLXJlZiByZWZzL2NoYW5nZXMvMTEgJEUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAkRSBzdWIxICYmCisJZ2l0IGNvbW1pdCAtbSAidXBkYXRlZCBzdWJtb2R1bGVzIG91dHNpZGUgb2YgcmVmcy9oZWFkcyIgJiYKKworCWdpdCAtQyBzdWIxIHVwZGF0ZS1yZWYgcmVmcy9jaGFuZ2VzLzEyICRGICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJEYgc3ViMSAmJgorCWdpdCBjb21taXQgLW0gInVwZGF0ZWQgc3VibW9kdWxlcyBvdXRzaWRlIG9mIHJlZnMvaGVhZHMiICYmCisKKwlHPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvY2hhbmdlcy8xMyAkRyAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgb3JpZ2luIHJlZnMvY2hhbmdlcy8xMyAmJgorCisJCWdpdCAtQyBzdWIxIGNhdC1maWxlIC10ICREICYmCisJCWdpdCAtQyBzdWIxIGNhdC1maWxlIC10ICRFICYmCisJCWdpdCAtQyBzdWIxIGNhdC1maWxlIC10ICRGCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjctZmV0Y2gtb2RkLXJlZnMuc2ggYi90L3Q1NTI3LWZldGNoLW9kZC1yZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiMGNiOTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTI3LWZldGNoLW9kZC1yZWZzLnNoCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGZldGNoaW5nIG9mIG9kZGx5LW5hbWVkIHJlZnMnCisuIC4vdGVzdC1saWIuc2gKKworIyBhZnRlcndhcmRzIHdlIHdpbGwgaGF2ZToKKyMgIEhFQUQgLSB0d28KKyMgIHJlZnMvZm9yL3JlZnMvaGVhZHMvbWFzdGVyIC0gb25lCisjICByZWZzL2hlYWRzL21hc3RlciAtIHRocmVlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvIHdpdGggb2RkIHN1ZmZpeCByZWYnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvZm9yL3JlZnMvaGVhZHMvbWFzdGVyIEhFQUQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZSAmJgorCWdpdCBjaGVja291dCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWZmaXggcmVmIGlzIGlnbm9yZWQgZHVyaW5nIGZldGNoJyAnCisJZ2l0IGNsb25lIC0tYmFyZSBmaWxlOi8vIiRQV0QiIHN1ZmZpeCAmJgorCWVjaG8gdGhyZWUgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9c3VmZml4IGxvZyAtMSAtLWZvcm1hdD0lcyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnkgdG8gY3JlYXRlIHJlcG8gd2l0aCBhYnN1cmRseSBsb25nIHJlZm5hbWUnICcKKwlyZWYyNDA9JFpFUk9fT0lELyRaRVJPX09JRC8kWkVST19PSUQvJFpFUk9fT0lELyRaRVJPX09JRC8kWkVST19PSUQgJiYKKwlyZWYxNDQwPSRyZWYyNDAvJHJlZjI0MC8kcmVmMjQwLyRyZWYyNDAvJHJlZjI0MC8kcmVmMjQwICYmCisJZ2l0IGluaXQgbG9uZyAmJgorCSgKKwkJY2QgbG9uZyAmJgorCQl0ZXN0X2NvbW1pdCBsb25nICYmCisJCXRlc3RfY29tbWl0IG1hc3RlcgorCSkgJiYKKwlpZiBnaXQgLUMgbG9uZyB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvJHJlZjE0NDAgbG9uZzsgdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgTE9OR19SRUYKKwllbHNlCisJCWVjaG8gPiYyICJsb25nIHJlZnMgbm90IHN1cHBvcnRlZCIKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExPTkdfUkVGICdmZXRjaCBoYW5kbGVzIGV4dHJlbWVseSBsb25nIHJlZm5hbWUnICcKKwlnaXQgZmV0Y2ggbG9uZyByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvbmcvKiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlsb25nCisJbWFzdGVyCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzdWJqZWN0KSIgcmVmcy9yZW1vdGVzL2xvbmcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMT05HX1JFRiAncHVzaCBoYW5kbGVzIGV4dHJlbWVseSBsb25nIHJlZm5hbWUnICcKKwlnaXQgcHVzaCBsb25nIDpyZWZzL2hlYWRzLyRyZWYxNDQwICYmCisJZ2l0IC1DIGxvbmcgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHN1YmplY3QpIiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwllY2hvIG1hc3RlciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoIGIvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGQxZTBjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjgtcHVzaC1kZWZhdWx0LnNoCkBAIC0wLDAgKzEsMjEzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgdmFyaW91cyBwdXNoLmRlZmF1bHQgc2V0dGluZ3MnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZSByZW1vdGVzJyAnCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8xICYmCisJZ2l0IHJlbW90ZSBhZGQgcGFyZW50MSByZXBvMSAmJgorCWdpdCBpbml0IC0tYmFyZSByZXBvMiAmJgorCWdpdCByZW1vdGUgYWRkIHBhcmVudDIgcmVwbzIgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlnaXQgcHVzaCBwYXJlbnQxIEhFQUQgJiYKKwlnaXQgcHVzaCBwYXJlbnQyIEhFQUQKKycKKworIyAkMSA9IGxvY2FsIHJldmlzaW9uCisjICQyID0gcmVtb3RlIHJldmlzaW9uICh0ZXN0ZWQgdG8gYmUgZXF1YWwgdG8gdGhlIGxvY2FsIG9uZSkKKyMgJDMgPSBbb3B0aW9uYWxdIHJlcG8gdG8gY2hlY2sgZm9yIGFjdHVhbCBvdXRwdXQgKHJlcG8xIGJ5IGRlZmF1bHQpCitjaGVja19wdXNoZWRfY29tbWl0ICgpIHsKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSclaCAlcycgIiQxIiA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj0iJHszOi1yZXBvMX0iIGxvZyAtMSAtLWZvcm1hdD0nJWggJXMnICIkMiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworIyAkMSA9IHB1c2guZGVmYXVsdCB2YWx1ZQorIyAkMiA9IGV4cGVjdGVkIHRhcmdldCBicmFuY2ggZm9yIHRoZSBwdXNoCisjICQzID0gW29wdGlvbmFsXSByZXBvIHRvIGNoZWNrIGZvciBhY3R1YWwgb3V0cHV0IChyZXBvMSBieSBkZWZhdWx0KQordGVzdF9wdXNoX3N1Y2Nlc3MgKCkgeworCWdpdCAkezE6Ky1jfSAkezE6K3B1c2guZGVmYXVsdD0iJDEifSBwdXNoICYmCisJY2hlY2tfcHVzaGVkX2NvbW1pdCBIRUFEICIkMiIgIiQzIgorfQorCisjICQxID0gcHVzaC5kZWZhdWx0IHZhbHVlCisjIGNoZWNrIHRoYXQgcHVzaCBmYWlscyBhbmQgZG9lcyBub3QgbW9kaWZ5IGFueSByZW1vdGUgYnJhbmNoCit0ZXN0X3B1c2hfZmFpbHVyZSAoKSB7CisJZ2l0IC0tZ2l0LWRpcj1yZXBvMSBsb2cgLS1uby13YWxrIC0tZm9ybWF0PSclaCAlcycgLS1hbGwgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAkezE6Ky1jfSAkezE6K3B1c2guZGVmYXVsdD0iJDEifSBwdXNoICYmCisJZ2l0IC0tZ2l0LWRpcj1yZXBvMSBsb2cgLS1uby13YWxrIC0tZm9ybWF0PSclaCAlcycgLS1hbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworIyAkMSA9IHN1Y2Nlc3Mgb3IgZmFpbHVyZQorIyAkMiA9IHB1c2guZGVmYXVsdCB2YWx1ZQorIyAkMyA9IGJyYW5jaCB0byBjaGVjayBmb3IgYWN0dWFsIG91dHB1dCAobWFzdGVyIG9yIGZvbykKKyMgJDQgPSBbb3B0aW9uYWxdIHN3aXRjaCB0byB0cmlhbmd1bGFyIHdvcmtmbG93Cit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93ICgpIHsKKwl3b3JrZmxvdz1jZW50cmFsCisJcHVzaGRlZmF1bHQ9cGFyZW50MQorCWlmIHRlc3QgLW4gIiR7NC19IjsgdGhlbgorCQl3b3JrZmxvdz10cmlhbmd1bGFyCisJCXB1c2hkZWZhdWx0PXBhcmVudDIKKwlmaQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInB1c2guZGVmYXVsdCA9ICQyICQxIGluICR3b3JrZmxvdyB3b3JrZmxvd3MiICIKKwkJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcGFyZW50MSAmJgorCQl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCAkcHVzaGRlZmF1bHQgJiYKKwkJdGVzdF9jb21taXQgY29tbWl0LWZvci0kMiR7NCstdHJpYW5ndWxhcn0gJiYKKwkJdGVzdF9wdXNoXyQxICQyICQzICR7NCtyZXBvMn0KKwkiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJ1cHN0cmVhbSIgcHVzaGVzIHRvIGNvbmZpZ3VyZWQgdXBzdHJlYW0nICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcGFyZW50MSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9mb28gJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyB1cHN0cmVhbSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInVwc3RyZWFtIiBkb2VzIG5vdCBwdXNoIG9uIHVuY29uZmlndXJlZCByZW1vdGUnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF91bmNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgdXBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInVwc3RyZWFtIiBkb2VzIG5vdCBwdXNoIG9uIHVuY29uZmlndXJlZCBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcGFyZW50MSAmJgorCXRlc3RfdW5jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSB1cHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcidXBzdHJlYW0iIGRvZXMgbm90IHB1c2ggd2hlbiByZW1vdGVzIGRvIG5vdCBtYXRjaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCB1cHN0cmVhbSAmJgorCXRlc3RfY29tbWl0IGZpdmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBwYXJlbnQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZnJvbS90byBuZXcgYnJhbmNoIHdpdGggdXBzdHJlYW0sIG1hdGNoaW5nIGFuZCBzaW1wbGUnICcKKwlnaXQgY2hlY2tvdXQgLWIgbmV3LWJyYW5jaCAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHNpbXBsZSAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIG1hdGNoaW5nICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgdXBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBhbWJpZ3VvdXNseSBuYW1lZCBicmFuY2ggd2l0aCB1cHN0cmVhbSwgbWF0Y2hpbmcgYW5kIHNpbXBsZScgJworCWdpdCBjaGVja291dCAtYiBhbWJpZ3VvdXMgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2guYW1iaWd1b3VzLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLmFtYmlndW91cy5tZXJnZSByZWZzL2hlYWRzL2FtYmlndW91cyAmJgorCWdpdCB0YWcgYW1iaWd1b3VzICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3Mgc2ltcGxlIGFtYmlndW91cyAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIG1hdGNoaW5nIGFtYmlndW91cyAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIHVwc3RyZWFtIGFtYmlndW91cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZyb20vdG8gbmV3IGJyYW5jaCB3aXRoIGN1cnJlbnQgY3JlYXRlcyByZW1vdGUgYnJhbmNoJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm5ldy1icmFuY2gucmVtb3RlIHJlcG8xICYmCisJZ2l0IGNoZWNrb3V0IG5ldy1icmFuY2ggJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyBjdXJyZW50IG5ldy1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBleGlzdGluZyBicmFuY2gsIHdpdGggbm8gdXBzdHJlYW0gY29uZmlndXJlZCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHJlcG8xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHNpbXBsZSAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZXhpc3RpbmcgYnJhbmNoLCB1cHN0cmVhbSBjb25maWd1cmVkIHdpdGggc2FtZSBuYW1lJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcmVwbzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHNpeCAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIHVwc3RyZWFtIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHNldmVuICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3Mgc2ltcGxlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGV4aXN0aW5nIGJyYW5jaCwgdXBzdHJlYW0gY29uZmlndXJlZCB3aXRoIGRpZmZlcmVudCBuYW1lJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcmVwbzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvb3RoZXItbmFtZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBlaWdodCAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIHVwc3RyZWFtIG90aGVyLW5hbWUgJiYKKwl0ZXN0X2NvbW1pdCBuaW5lICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgc2ltcGxlICYmCisJZ2l0IC0tZ2l0LWRpcj1yZXBvMSBsb2cgLTEgLS1mb3JtYXQ9IiVoICVzIiAib3RoZXItbmFtZSIgPmV4cGVjdC1vdGhlci1uYW1lICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgY3VycmVudCBtYXN0ZXIgJiYKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtMSAtLWZvcm1hdD0iJWggJXMiICJvdGhlci1uYW1lIiA+YWN0dWFsLW90aGVyLW5hbWUgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtb3RoZXItbmFtZSBhY3R1YWwtb3RoZXItbmFtZQorJworCisjIFdlIGFyZSBvbiAnbWFzdGVyJywgd2hpY2ggaW50ZWdyYXRlcyB3aXRoICdmb28nIGZyb20gcGFyZW50MQorIyByZW1vdGUgKHNldCBpbiB0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IGhlbHBlcikuICBQdXNoIHRvCisjIHBhcmVudDEgaW4gY2VudHJhbGl6ZWQsIGFuZCBwdXNoIHRvIHBhcmVudDIgaW4gdHJpYW5ndWxhciB3b3JrZmxvdy4KKyMgVGhlIHBhcmVudDEgcmVwb3NpdG9yeSBoYXMgJ21hc3RlcicgYW5kICdmb28nIGJyYW5jaGVzLCB3aGlsZQorIyB0aGUgcGFyZW50MiByZXBvc2l0b3J5IGhhcyBvbmx5ICdtYXN0ZXInIGJyYW5jaC4KKyMKKyMgdGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdygpIGFyZ3VtZW50czoKKyMgJDEgPSBzdWNjZXNzIG9yIGZhaWx1cmUKKyMgJDIgPSBwdXNoLmRlZmF1bHQgdmFsdWUKKyMgJDMgPSBicmFuY2ggdG8gY2hlY2sgZm9yIGFjdHVhbCBvdXRwdXQgKG1hc3RlciBvciBmb28pCisjICQ0ID0gW29wdGlvbmFsXSBzd2l0Y2ggdG8gdHJpYW5ndWxhciB3b3JrZmxvdworCisjIHVwZGF0ZSBwYXJlbnQxJ3MgbWFzdGVyICh3aGljaCBpcyBub3Qgb3VyIHVwc3RyZWFtKQordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBzdWNjZXNzIGN1cnJlbnQgbWFzdGVyCisKKyMgdXBkYXRlIHBhcmVudDEncyBmb28gKHdoaWNoIGlzIG91ciB1cHN0cmVhbSkKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyB1cHN0cmVhbSBmb28KKworIyB1cHN0cmVhbSBpcyBmb28gd2hpY2ggaXMgbm90IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaAordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBmYWlsdXJlIHNpbXBsZSBtYXN0ZXIKKworIyBtYXN0ZXIgYW5kIGZvbyBhcmUgdXBkYXRlZAordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBzdWNjZXNzIG1hdGNoaW5nIG1hc3RlcgorCisjIG1hc3RlciBpcyB1cGRhdGVkCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IHN1Y2Nlc3MgY3VycmVudCBtYXN0ZXIgdHJpYW5ndWxhcgorCisjIHVwc3RyZWFtIG1vZGUgY2Fubm90IGJlIHVzZWQgaW4gdHJpYW5ndWxhcgordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBmYWlsdXJlIHVwc3RyZWFtIGZvbyB0cmlhbmd1bGFyCisKKyMgaW4gdHJpYW5ndWxhciwgJ3NpbXBsZScgd29ya3MgYXMgJ2N1cnJlbnQnIGFuZCB1cGRhdGUgdGhlIGJyYW5jaAorIyB3aXRoIHRoZSBzYW1lIG5hbWUuCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IHN1Y2Nlc3Mgc2ltcGxlIG1hc3RlciB0cmlhbmd1bGFyCisKKyMgbWFzdGVyIGlzIHVwZGF0ZWQgKHBhcmVudDIgZG9lcyBub3QgaGF2ZSBmb28pCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IHN1Y2Nlc3MgbWF0Y2hpbmcgbWFzdGVyIHRyaWFuZ3VsYXIKKworIyBkZWZhdWx0IHRlc3RzLCB3aGVuIG5vIHB1c2gtZGVmYXVsdCBpcyBzcGVjaWZpZWQuIFRoaXMKKyMgc2hvdWxkIGJlaGF2ZSB0aGUgc2FtZSBhcyAic2ltcGxlIiBpbiBub24tdHJpYW5ndWxhcgorIyBzZXR0aW5ncywgYW5kIGFzICJjdXJyZW50IiBvdGhlcndpc2UuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgYmVoYXZpb3IgYWxsb3dzICJzaW1wbGUiIHB1c2gnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBwYXJlbnQxICYmCisJdGVzdF9jb21taXQgZGVmYXVsdC1tYXN0ZXItbWFzdGVyICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgIiIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgYmVoYXZpb3IgcmVqZWN0cyBub24tc2ltcGxlIHB1c2gnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBwYXJlbnQxICYmCisJdGVzdF9jb21taXQgZGVmYXVsdC1tYXN0ZXItZm9vICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCB0cmlhbmd1bGFyIGJlaGF2aW9yIGFjdHMgbGlrZSAiY3VycmVudCInICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBwYXJlbnQyICYmCisJdGVzdF9jb21taXQgZGVmYXVsdC10cmlhbmd1bGFyICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgIiIgbWFzdGVyIHJlcG8yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyOS1wdXNoLWVycm9ycy5zaCBiL3QvdDU1MjktcHVzaC1lcnJvcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTg3MTMwNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjktcHVzaC1lcnJvcnMuc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RldGVjdCBzb21lIHB1c2ggZXJyb3JzIGVhcmx5IChiZWZvcmUgY29udGFjdGluZyByZW1vdGUpJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdHMnICcKKwl0ZXN0X2NvbW1pdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlJyAnCisJZ2l0IGluaXQgLS1iYXJlIHJlbW90ZS5naXQgJiYKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gcmVtb3RlLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmYWtlIHJlY2VpdmUtcGFjaycgJworCUZBS0VfUlBfUk9PVD0kKHB3ZCkgJiYKKwlleHBvcnQgRkFLRV9SUF9ST09UICYmCisJd3JpdGVfc2NyaXB0IGZha2UtcnAgPDwtXEVPRiAmJgorCWVjaG8geWVzID4iJEZBS0VfUlBfUk9PVCIvcnAtcmFuCisJZXhpdCAxCisJRU9GCisJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnJlY2VpdmVwYWNrICJcIlwkRkFLRV9SUF9ST09UL2Zha2UtcnBcIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc3NpbmcgYnJhbmNoZXMgZWFybHknICcKKwllY2hvIG5vID5ycC1yYW4gJiYKKwllY2hvIG5vID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBvcmlnaW4gbWlzc2luZyAmJgorCXRlc3RfY21wIGV4cGVjdCBycC1yYW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc3Npbmcgc2hhMSBleHByZXNzaW9ucyBlYXJseScgJworCWVjaG8gbm8gPnJwLXJhbiAmJgorCWVjaG8gbm8gPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXJ+MjptYXN0ZXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcnAtcmFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBhbWJpZ3VvdXMgcmVmcyBlYXJseScgJworCWdpdCBicmFuY2ggZm9vICYmCisJZ2l0IHRhZyBmb28gJiYKKwllY2hvIG5vID5ycC1yYW4gJiYKKwllY2hvIG5vID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBvcmlnaW4gZm9vICYmCisJdGVzdF9jbXAgZXhwZWN0IHJwLXJhbgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzAtdXBsb2FkLXBhY2stZXJyb3Iuc2ggYi90L3Q1NTMwLXVwbG9hZC1wYWNrLWVycm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjZTlhOWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTMwLXVwbG9hZC1wYWNrLWVycm9yLnNoCkBAIC0wLDAgKzEsMTA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZXJyb3JzIGluIHVwbG9hZC1wYWNrJworCisuIC4vdGVzdC1saWIuc2gKKworRD0kKHB3ZCkKKworY29ycnVwdF9yZXBvICgpIHsKKwlvYmplY3Rfc2hhMT0kKGdpdCByZXYtcGFyc2UgIiQxIikgJiYKKwlvYj0kKGV4cHIgIiRvYmplY3Rfc2hhMSIgOiAiXCguLlwpIikgJiYKKwlqZWN0PSQoZXhwciAiJG9iamVjdF9zaGExIiA6ICIuLlwoLi4qXCkiKSAmJgorCXJtIC1mICIuZ2l0L29iamVjdHMvJG9iLyRqZWN0IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhbmQgY29ycnVwdCByZXBvc2l0b3J5JyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCWVjaG8gZmlsZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCByZXYtcGFyc2UgOmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG9yaWdpbmFsICYmCisJdGVzdF90aWNrICYmCisJZWNobyBjaGFuZ2VkID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBjaGFuZ2VkICYmCisJY29ycnVwdF9yZXBvIEhFQUQ6ZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGxvYWQtcGFjayBmYWlscyBkdWUgdG8gZXJyb3IgaW4gcGFjay1vYmplY3RzIHBhY2tpbmcnICcKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWhleHN6PSQodGVzdF9vaWQgaGV4c3opICYmCisJcHJpbnRmICIlMDR4d2FudCAlc1xuMDAwMDAwMDlkb25lXG4wMDAwIiBcCisJCSQoKCRoZXhzeiArIDEwKSkgJGhlYWQgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwbG9hZC1wYWNrIC4gPGlucHV0ID4vZGV2L251bGwgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIHJlYWQiIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJwYWNrLW9iamVjdHMgZGllZCIgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JydXB0IHJlcG8gZGlmZmVyZW50bHknICcKKworCWdpdCBoYXNoLW9iamVjdCAtdyBmaWxlICYmCisJY29ycnVwdF9yZXBvIEhFQUReXnt0cmVlfQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjaworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgZmFpbHMgZHVlIHRvIGVycm9yIGluIHJldi1saXN0JyAnCisKKwlwcmludGYgIiUwNHh3YW50ICVzXG4lMDR4c2hhbGxvdyAlczAwMDAwMDA5ZG9uZVxuMDAwMCIgXAorCQkkKCgkaGV4c3ogKyAxMCkpICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBcCisJCSQoKCRoZXhzeiArIDEyKSkgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBsb2FkLXBhY2sgLiA8aW5wdXQgPi9kZXYvbnVsbCAyPm91dHB1dC5lcnIgJiYKKwlncmVwICJiYWQgdHJlZSBvYmplY3QiIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgZmFpbHMgZHVlIHRvIGJhZCB3YW50IChubyBvYmplY3QpJyAnCisKKwlwcmludGYgIiUwNHh3YW50ICVzIG11bHRpX2Fja19kZXRhaWxlZFxuMDAwMDAwMDlkb25lXG4wMDAwIiBcCisJCSQoKCRoZXhzeiArIDI5KSkgJCh0ZXN0X29pZCBkZWFkYmVlZikgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwbG9hZC1wYWNrIC4gPGlucHV0ID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJZ3JlcCAibm90IG91ciByZWYiIG91dHB1dC5lcnIgJiYKKwlncmVwICJFUlIiIG91dHB1dCAmJgorCSEgZ3JlcCBtdWx0aV9hY2tfZGV0YWlsZWQgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGxvYWQtcGFjayBmYWlscyBkdWUgdG8gYmFkIHdhbnQgKG5vdCB0aXApJyAnCisKKwlvaWQ9JChlY2hvIGFuIG9iamVjdCB3ZSBoYXZlIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJcHJpbnRmICIlMDR4d2FudCAlcyBtdWx0aV9hY2tfZGV0YWlsZWRcbjAwMDAwMDA5ZG9uZVxuMDAwMCIgXAorCQkkKCgkaGV4c3ogKyAyOSkpICIkb2lkIiA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBsb2FkLXBhY2sgLiA8aW5wdXQgPm91dHB1dCAyPm91dHB1dC5lcnIgJiYKKwlncmVwICJub3Qgb3VyIHJlZiIgb3V0cHV0LmVyciAmJgorCWdyZXAgIkVSUiIgb3V0cHV0ICYmCisJISBncmVwIG11bHRpX2Fja19kZXRhaWxlZCBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIGZhaWxzIGR1ZSB0byBlcnJvciBpbiBwYWNrLW9iamVjdHMgZW51bWVyYXRpb24nICcKKworCXByaW50ZiAiJTA0eHdhbnQgJXNcbjAwMDAwMDA5ZG9uZVxuMDAwMCIgXAorCQkkKChoZXhzeiArIDEwKSkgJChnaXQgcmV2LXBhcnNlIEhFQUQpID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGxvYWQtcGFjayAuIDxpbnB1dCA+L2Rldi9udWxsIDI+b3V0cHV0LmVyciAmJgorCWdyZXAgImJhZCB0cmVlIG9iamVjdCIgb3V0cHV0LmVyciAmJgorCWdyZXAgInBhY2stb2JqZWN0cyBkaWVkIiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBlbXB0eSByZXBvc2l0b3J5JyAnCisKKwlta2RpciBmb28gJiYKKwljZCBmb28gJiYKKwlnaXQgaW5pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZhaWxzJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4gbWFzdGVyCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTMxLWRlZXAtc3VibW9kdWxlLXB1c2guc2ggYi90L3Q1NTMxLWRlZXAtc3VibW9kdWxlLXB1c2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGFkMDU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzEtZGVlcC1zdWJtb2R1bGUtcHVzaC5zaApAQCAtMCwwICsxLDU4NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgcHVzaCB3aXRoIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBwdWIuZ2l0ICYmCisJR0lUX0RJUj1wdWIuZ2l0IGdpdCBpbml0IC0tYmFyZSAmJgorCUdJVF9ESVI9cHViLmdpdCBnaXQgY29uZmlnIHJlY2VpdmUuZnNja29iamVjdHMgdHJ1ZSAmJgorCW1rZGlyIHdvcmsgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKwkJbWtkaXIgLXAgZ2FyL2JhZ2UgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCBpbml0ICYmCisJCQlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCQkJPmp1bmsgJiYKKwkJCWdpdCBhZGQganVuayAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBqdW5rIgorCQkpICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBzdXBlcnByb2plY3QiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdvcmtzIHdpdGggcmVjb3JkZWQgZ2l0bGluaycgJworCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgcHVzaCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBpZiBzdWJtb2R1bGUgaGFzIG5vIHJlbW90ZScgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQk+anVuazIgJiYKKwkJZ2l0IGFkZCBqdW5rMiAmJgorCQlnaXQgY29tbWl0IC1tICJTZWNvbmQganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGNvbW1pdCBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIC4uL3B1Yi5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZhaWxzIGlmIHN1Ym1vZHVsZSBjb21taXQgbm90IG9uIHJlbW90ZScgJworCSgKKwkJY2Qgd29yay9nYXIgJiYKKwkJZ2l0IGNsb25lIC0tYmFyZSBiYWdlIC4uLy4uL3N1Ym1vZHVsZS5naXQgJiYKKwkJY2QgYmFnZSAmJgorCQlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLi4vLi4vLi4vc3VibW9kdWxlLmdpdCAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJPmp1bmszICYmCisJCWdpdCBhZGQganVuazMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiVGhpcmQganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiVGhpcmQgY29tbWl0IGZvciBnYXIvYmFnZSIgJiYKKwkJIyB0aGUgcHVzaCBzaG91bGQgZmFpbCB3aXRoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrCisJCSMgb24gdGhlIGNvbW1hbmQgbGluZS4uLgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCisJCSMgLi4ub3IgaWYgc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uLi4KKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9Y2hlY2sgcHVzaCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBzdWNjZWVkcyBhZnRlciBjb21taXQgd2FzIHB1c2hlZCB0byByZW1vdGUnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sgLi4vcHViLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggc3VjY2VlZHMgaWYgc3VibW9kdWxlIGNvbW1pdCBub3Qgb24gcmVtb3RlIGJ1dCB1c2luZyBvbi1kZW1hbmQgb24gY29tbWFuZCBsaW5lJyAnCisJKAorCQljZCB3b3JrL2dhci9iYWdlICYmCisJCT5yZWN1cnNlLW9uLWRlbWFuZC1vbi1jb21tYW5kLWxpbmUgJiYKKwkJZ2l0IGFkZCByZWN1cnNlLW9uLWRlbWFuZC1vbi1jb21tYW5kLWxpbmUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbi1kZW1hbmQgb24gY29tbWFuZCBsaW5lIGp1bmsiCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2Ugb24tZGVtYW5kIG9uIGNvbW1hbmQgbGluZSBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1cGVybW9kdWxlIGNvbW1pdCBnb3QgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1Ym1vZHVsZSBjb21taXQgZ290IHRoZXJlIHRvbworCQljZCBnYXIvYmFnZSAmJgorCQlnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN1Y2NlZWRzIGlmIHN1Ym1vZHVsZSBjb21taXQgbm90IG9uIHJlbW90ZSBidXQgdXNpbmcgb24tZGVtYW5kIGZyb20gY29uZmlnJyAnCisJKAorCQljZCB3b3JrL2dhci9iYWdlICYmCisJCT5yZWN1cnNlLW9uLWRlbWFuZC1mcm9tLWNvbmZpZyAmJgorCQlnaXQgYWRkIHJlY3Vyc2Utb24tZGVtYW5kLWZyb20tY29uZmlnICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2Ugb24tZGVtYW5kIGZyb20gY29uZmlnIGp1bmsiCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2Ugb24tZGVtYW5kIGZyb20gY29uZmlnIGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9b24tZGVtYW5kIHB1c2ggLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdXBlcm1vZHVsZSBjb21taXQgZ290IHRoZXJlCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdWJtb2R1bGUgY29tbWl0IGdvdCB0aGVyZSB0b28KKwkJY2QgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBzdWNjZWVkcyBpZiBzdWJtb2R1bGUgY29tbWl0IG5vdCBvbiByZW1vdGUgYnV0IHVzaW5nIGF1dG8tb24tZGVtYW5kIHZpYSBzdWJtb2R1bGUucmVjdXJzZSBjb25maWcnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPnJlY3Vyc2Utb24tZGVtYW5kLWZyb20tc3VibW9kdWxlLXJlY3Vyc2UtY29uZmlnICYmCisJCWdpdCBhZGQgcmVjdXJzZS1vbi1kZW1hbmQtZnJvbS1zdWJtb2R1bGUtcmVjdXJzZS1jb25maWcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBzdWJtb2R1bGUucmVjdXJzZSBmcm9tIGNvbmZpZyBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIHN1Ym1vZHVsZS5yZWN1cnNlIGZyb20gY29uZmlnIGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IC1jIHN1Ym1vZHVsZS5yZWN1cnNlIHB1c2ggLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdXBlcm1vZHVsZSBjb21taXQgZ290IHRoZXJlCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdWJtb2R1bGUgY29tbWl0IGdvdCB0aGVyZSB0b28KKwkJY2QgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCByZWN1cnNlLXN1Ym1vZHVsZXMgb24gY29tbWFuZCBsaW5lIG92ZXJyaWRlcyBjb25maWcnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPnJlY3Vyc2UtY2hlY2stb24tY29tbWFuZC1saW5lLW92ZXJyaWRpbmctY29uZmlnICYmCisJCWdpdCBhZGQgcmVjdXJzZS1jaGVjay1vbi1jb21tYW5kLWxpbmUtb3ZlcnJpZGluZy1jb25maWcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbiBjb21tYW5kLWxpbmUgb3ZlcnJpZGluZyBjb25maWcganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbiBjb21tYW5kLWxpbmUgb3ZlcnJpZGluZyBjb25maWcgZm9yIGdhci9iYWdlIiAmJgorCisJCSMgRW5zdXJlIHRoYXQgd2UgY2FuIG92ZXJyaWRlIG9uLWRlbWFuZCBpbiB0aGUgY29uZmlnCisJCSMgdG8ganVzdCBjaGVjayBzdWJtb2R1bGVzCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzPW9uLWRlbWFuZCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VwZXJtb2R1bGUgY29tbWl0IGRpZCBub3QgZ2V0IHRoZXJlCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXJeICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VibW9kdWxlIGNvbW1pdCBkaWQgbm90IGdldCB0aGVyZQorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4pICYmCisKKwkJIyBFbnN1cmUgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUgY2hlY2sgaW4gdGhlIGNvbmZpZyB0bworCQkjIGRpc2FibGUgc3VibW9kdWxlIHJlY3Vyc2lvbiBlbnRpcmVseQorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4pICYmCisJCWdpdCAtYyBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzPW9uLWRlbWFuZCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW5vIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXIgJiYKKwkJKGNkIGdhci9iYWdlICYmIGdpdCBkaWZmIC0tcXVpZXQgb3JpZ2luL21hc3RlciBtYXN0ZXJeKSAmJgorCisJCSMgRW5zdXJlIHRoYXQgd2UgY2FuIG92ZXJyaWRlIGNoZWNrIGluIHRoZSBjb25maWcgdG8KKwkJIyBkaXNhYmxlIHN1Ym1vZHVsZSByZWN1cnNpb24gZW50aXJlbHkgKGFsdGVybmF0aXZlIGZvcm0pCisJCWdpdCAtYyBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzPW9uLWRlbWFuZCBwdXNoIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXIgJiYKKwkJKGNkIGdhci9iYWdlICYmIGdpdCBkaWZmIC0tcXVpZXQgb3JpZ2luL21hc3RlciBtYXN0ZXJeKSAmJgorCisJCSMgRW5zdXJlIHRoYXQgd2UgY2FuIG92ZXJyaWRlIGNoZWNrIGluIHRoZSBjb25maWcgdG8KKwkJIyBwdXNoIHRoZSBzdWJtb2R1bGUgdG9vCisJCWdpdCAtYyBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzPWNoZWNrIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXIgJiYKKwkJKGNkIGdhci9iYWdlICYmIGdpdCBkaWZmIC0tcXVpZXQgb3JpZ2luL21hc3RlciBtYXN0ZXIpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHJlY3Vyc2Utc3VibW9kdWxlcyBsYXN0IG9uZSB3aW5zIG9uIGNvbW1hbmQgbGluZScgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQk+cmVjdXJzZS1jaGVjay1vbi1jb21tYW5kLWxpbmUtb3ZlcnJpZGluZy1lYXJsaWVyLWNvbW1hbmQtbGluZSAmJgorCQlnaXQgYWRkIHJlY3Vyc2UtY2hlY2stb24tY29tbWFuZC1saW5lLW92ZXJyaWRpbmctZWFybGllci1jb21tYW5kLWxpbmUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbiBjb21tYW5kLWxpbmUgb3ZlcnJpZGlpbmcgZWFybGllciBjb21tYW5kLWxpbmUganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbiBjb21tYW5kLWxpbmUgb3ZlcnJpZGluZyBlYXJsaWVyIGNvbW1hbmQtbGluZSBmb3IgZ2FyL2JhZ2UiICYmCisKKwkJIyBzaG91bGQgcmVzdWx0IGluICJjaGVjayIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VwZXJtb2R1bGUgY29tbWl0IGRpZCBub3QgZ2V0IHRoZXJlCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXJeICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VibW9kdWxlIGNvbW1pdCBkaWQgbm90IGdldCB0aGVyZQorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4pICYmCisKKwkJIyBzaG91bGQgcmVzdWx0IGluICJubyIKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW5vIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCSMgQ2hlY2sgdGhhdCB0aGUgc3VwZXJtb2R1bGUgY29tbWl0IGRpZCBnZXQgdGhlcmUKKwkJZ2l0IGZldGNoIC4uL3B1Yi5naXQgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCBGRVRDSF9IRUFEIG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1Ym1vZHVsZSBjb21taXQgZGlkIG5vdCBnZXQgdGhlcmUKKwkJKGNkIGdhci9iYWdlICYmIGdpdCBkaWZmIC0tcXVpZXQgb3JpZ2luL21hc3RlciBtYXN0ZXJeKSAmJgorCisJCSMgc2hvdWxkIHJlc3VsdCBpbiAibm8iCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1Ym1vZHVsZSBjb21taXQgZGlkIG5vdCBnZXQgdGhlcmUKKwkJKGNkIGdhci9iYWdlICYmIGdpdCBkaWZmIC0tcXVpZXQgb3JpZ2luL21hc3RlciBtYXN0ZXJeKSAmJgorCisJCSMgQnV0IHRoZSBvcHRpb25zIGluIHRoZSBvdGhlciBvcmRlciBzaG91bGQgcHVzaCB0aGUgc3VibW9kdWxlCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPWNoZWNrIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCQkjIENoZWNrIHRoYXQgdGhlIHN1Ym1vZHVsZSBjb21taXQgZGlkIGdldCB0aGVyZQorCQlnaXQgZmV0Y2ggLi4vcHViLmdpdCAmJgorCQkoY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3RlcikKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggc3VjY2VlZHMgaWYgc3VibW9kdWxlIGNvbW1pdCBub3Qgb24gcmVtb3RlIHVzaW5nIG9uLWRlbWFuZCBmcm9tIGNtZGxpbmUgb3ZlcnJpZGluZyBjb25maWcnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPnJlY3Vyc2Utb24tZGVtYW5kLW9uLWNvbW1hbmQtbGluZS1vdmVycmlkaW5nLWNvbmZpZyAmJgorCQlnaXQgYWRkIHJlY3Vyc2Utb24tZGVtYW5kLW9uLWNvbW1hbmQtbGluZS1vdmVycmlkaW5nLWNvbmZpZyAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIG9uLWRlbWFuZCBvbiBjb21tYW5kLWxpbmUgb3ZlcnJpZGluZyBjb25maWcganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBvbi1kZW1hbmQgb24gY29tbWFuZC1saW5lIG92ZXJyaWRpbmcgY29uZmlnIGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IC1jIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXM9Y2hlY2sgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdXBlcm1vZHVsZSBjb21taXQgZ290IHRoZXJlCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdWJtb2R1bGUgY29tbWl0IGdvdCB0aGVyZQorCQljZCBnYXIvYmFnZSAmJgorCQlnaXQgZGlmZiAtLXF1aWV0IG9yaWdpbi9tYXN0ZXIgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN1Y2NlZWRzIGlmIHN1Ym1vZHVsZSBjb21taXQgZGlzYWJsaW5nIHJlY3Vyc2lvbiBmcm9tIGNtZGxpbmUgb3ZlcnJpZGluZyBjb25maWcnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPnJlY3Vyc2UtZGlzYWJsZS1vbi1jb21tYW5kLWxpbmUtb3ZlcnJpZGluZy1jb25maWcgJiYKKwkJZ2l0IGFkZCByZWN1cnNlLWRpc2FibGUtb24tY29tbWFuZC1saW5lLW92ZXJyaWRpbmctY29uZmlnICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2UgZGlzYWJsZSBvbiBjb21tYW5kLWxpbmUgb3ZlcnJpZGluZyBjb25maWcganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBkaXNhYmxlIG9uIGNvbW1hbmQtbGluZSBvdmVycmlkaW5nIGNvbmZpZyBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCAtYyBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzPWNoZWNrIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9bm8gLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdXBlcm1vZHVsZSBjb21taXQgZ290IHRoZXJlCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXIgJiYKKwkJIyBCdXQgdGhhdCB0aGUgc3VibW9kdWxlIGNvbW1pdCBkaWQgbm90CisJCSggY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4gKSAmJgorCQkjIE5vdyBwdXNoIGl0IHRvIGF2b2lkIGNvbmZ1c2luZyBmdXR1cmUgdGVzdHMKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN1Y2NlZWRzIGlmIHN1Ym1vZHVsZSBjb21taXQgZGlzYWJsaW5nIHJlY3Vyc2lvbiBmcm9tIGNtZGxpbmUgKGFsdGVybmF0aXZlIGZvcm0pIG92ZXJyaWRpbmcgY29uZmlnJyAnCisJKAorCQljZCB3b3JrL2dhci9iYWdlICYmCisJCT5yZWN1cnNlLWRpc2FibGUtb24tY29tbWFuZC1saW5lLWFsdC1vdmVycmlkaW5nLWNvbmZpZyAmJgorCQlnaXQgYWRkIHJlY3Vyc2UtZGlzYWJsZS1vbi1jb21tYW5kLWxpbmUtYWx0LW92ZXJyaWRpbmctY29uZmlnICYmCisJCWdpdCBjb21taXQgLW0gIlJlY3Vyc2UgZGlzYWJsZSBvbiBjb21tYW5kLWxpbmUgYWx0ZXJuYXRpdmUgb3ZlcnJpZGluZyBjb25maWcganVuayIKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVjdXJzZSBkaXNhYmxlIG9uIGNvbW1hbmQtbGluZSBhbHRlcm5hdGl2ZSBvdmVycmlkaW5nIGNvbmZpZyBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCAtYyBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzPWNoZWNrIHB1c2ggLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgLi4vcHViLmdpdCBtYXN0ZXIgJiYKKwkJIyBDaGVjayB0aGF0IHRoZSBzdXBlcm1vZHVsZSBjb21taXQgZ290IHRoZXJlCisJCWdpdCBmZXRjaCAuLi9wdWIuZ2l0ICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgRkVUQ0hfSEVBRCBtYXN0ZXIgJiYKKwkJIyBCdXQgdGhhdCB0aGUgc3VibW9kdWxlIGNvbW1pdCBkaWQgbm90CisJCSggY2QgZ2FyL2JhZ2UgJiYgZ2l0IGRpZmYgLS1xdWlldCBvcmlnaW4vbWFzdGVyIG1hc3Rlcl4gKSAmJgorCQkjIE5vdyBwdXNoIGl0IHRvIGF2b2lkIGNvbmZ1c2luZyBmdXR1cmUgdGVzdHMKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZW50cnkgcG9pbnRpbmcgYXQgYSB0YWcgaXMgZXJyb3InICcKKwlnaXQgLUMgd29yay9nYXIvYmFnZSB0YWcgLWEgdGVzdDEgLW0gInRhZyIgJiYKKwl0YWc9JChnaXQgLUMgd29yay9nYXIvYmFnZSByZXYtcGFyc2UgdGVzdDFee3RhZ30pICYmCisJZ2l0IC1DIHdvcmsgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAiJHRhZyIgZ2FyL2JhZ2UgJiYKKwlnaXQgLUMgd29yayBjb21taXQgLW0gImJhZCBjb21taXQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgd29yayByZXNldCAtLWhhcmQgSEVBRF4iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHdvcmsgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpcyBhIHRhZywgbm90IGEgY29tbWl0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyBpZiByZWN1cnNlIHN1Ym1vZHVsZXMgb3B0aW9uIHBhc3NlZCBhcyB5ZXMnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPnJlY3Vyc2UtcHVzaC1mYWlscy1pZi1yZWN1cnNlLXN1Ym1vZHVsZXMtcGFzc2VkLWFzLXllcyAmJgorCQlnaXQgYWRkIHJlY3Vyc2UtcHVzaC1mYWlscy1pZi1yZWN1cnNlLXN1Ym1vZHVsZXMtcGFzc2VkLWFzLXllcyAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIHB1c2ggZmFpbHMgaWYgcmVjdXJzZSBzdWJtb2R1bGVzIG9wdGlvbiBwYXNzZWQgYXMgeWVzIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJSZWN1cnNlIHB1c2ggZmFpbHMgaWYgcmVjdXJzZSBzdWJtb2R1bGVzIG9wdGlvbiBwYXNzZWQgYXMgeWVzIGZvciBnYXIvYmFnZSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9eWVzIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzPXllcyBwdXNoIC4uL3B1Yi5naXQgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyB3aGVuIGNvbW1pdCBvbiBtdWx0aXBsZSBicmFuY2hlcyBpZiBvbmUgYnJhbmNoIGhhcyBubyByZW1vdGUnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJPmp1bms0ICYmCisJCWdpdCBhZGQganVuazQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRm91cnRoIGp1bmsiCisJKSAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJGb3VydGggY29tbWl0IGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCBjaGVja291dCBIRUFEfjEKKwkJKSAmJgorCQk+anVuazEgJiYKKwkJZ2l0IGFkZCBqdW5rMSAmJgorCQlnaXQgY29tbWl0IC1tICJGaXJzdCBqdW5rIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayAuLi9wdWIuZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHN1Y2NlZWRzIGlmIHN1Ym1vZHVsZSBoYXMgbm8gcmVtb3RlIGFuZCBpcyBvbiB0aGUgZmlyc3Qgc3VwZXJwcm9qZWN0IGNvbW1pdCcgJworCWdpdCBpbml0IC0tYmFyZSBhICYmCisJZ2l0IGNsb25lIGEgYTEgJiYKKwkoCisJCWNkIGExICYmCisJCWdpdCBpbml0IGIgJiYKKwkJKAorCQkJY2QgYiAmJgorCQkJPmp1bmsgJiYKKwkJCWdpdCBhZGQganVuayAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIKKwkJKSAmJgorCQlnaXQgYWRkIGIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3VibW9kdWxlIiAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayBvcmlnaW4gbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVucHVzaGVkIHN1Ym1vZHVsZXMgd2hlbiBub3QgbmVlZGVkJyAnCisJKAorCQljZCB3b3JrICYmCisJCSgKKwkJCWNkIGdhci9iYWdlICYmCisJCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCQk+anVuazUgJiYKKwkJCWdpdCBhZGQganVuazUgJiYKKwkJCWdpdCBjb21taXQgLW0gIkZpZnRoIGp1bmsiICYmCisJCQlnaXQgcHVzaCAmJgorCQkJZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyID4uLi8uLi8uLi9leHBlY3RlZAorCQkpICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJGaWZ0aCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBzdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdW5wdXNoZWQgc3VibW9kdWxlcyB3aGVuIG5vdCBuZWVkZWQgMicgJworCSgKKwkJY2Qgc3VibW9kdWxlLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vZXhwZWN0ZWQKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCSgKKwkJCWNkIGdhci9iYWdlICYmCisJCQk+anVuazYgJiYKKwkJCWdpdCBhZGQganVuazYgJiYKKwkJCWdpdCBjb21taXQgLW0gIlNpeHRoIGp1bmsiCisJCSkgJiYKKwkJPmp1bmsyICYmCisJCWdpdCBhZGQganVuazIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGp1bmsgZm9yIHdvcmsiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZS5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1bnB1c2hlZCBzdWJtb2R1bGVzIHJlY3Vyc2l2ZWx5JyAnCisJKAorCQljZCB3b3JrICYmCisJCSgKKwkJCWNkIGdhci9iYWdlICYmCisJCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCQk+IGp1bms3ICYmCisJCQlnaXQgYWRkIGp1bms3ICYmCisJCQlnaXQgY29tbWl0IC1tICJTZXZlbnRoIGp1bmsiICYmCisJCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vLi4vLi4vZXhwZWN0ZWQKKwkJKSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiU2V2ZW50aCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBzdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdW5wdXNoYWJsZSBzdWJtb2R1bGUgcmVjdXJzaXZlbHkgZmFpbHMnICcKKwkoCisJCWNkIHdvcmsgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlciA+Li4vLi4vLi4vZXhwZWN0ZWQgJiYKKwkJCWdpdCBjaGVja291dCBtYXN0ZXJ+MCAmJgorCQkJPiBqdW5rOCAmJgorCQkJZ2l0IGFkZCBqdW5rOCAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiRWlnaHRoIGp1bmsiCisJCSkgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJFaWdodGggY29tbWl0IGZvciBnYXIvYmFnZSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyCisJKSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgLUMgd29yayByZXNldCAtLWhhcmQgbWFzdGVyXiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tZHJ5LXJ1biBkb2VzIG5vdCByZWN1cnNpdmVseSB1cGRhdGUgc3VibW9kdWxlcycgJworCSgKKwkJY2Qgd29yay9nYXIvYmFnZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi8uLi8uLi9leHBlY3RlZF9zdWJtb2R1bGUgJiYKKwkJPiBqdW5rOSAmJgorCQlnaXQgYWRkIGp1bms5ICYmCisJCWdpdCBjb21taXQgLW0gIk5pbnRoIGp1bmsiICYmCisKKwkJIyBHbyB1cCB0byAnd29yaycgZGlyZWN0b3J5CisJCWNkIC4uLy4uICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPi4uL2V4cGVjdGVkX3B1YiAmJgorCQlnaXQgYWRkIGdhci9iYWdlICYmCisJCWdpdCBjb21taXQgLW0gIk5pbnRoIGNvbW1pdCBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCBwdXNoIC0tZHJ5LXJ1biAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpICYmCisJZ2l0IC1DIHN1Ym1vZHVsZS5naXQgcmV2LXBhcnNlIG1hc3RlciA+YWN0dWFsX3N1Ym1vZHVsZSAmJgorCWdpdCAtQyBwdWIuZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmFjdHVhbF9wdWIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9wdWIgYWN0dWFsX3B1YiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3N1Ym1vZHVsZSBhY3R1YWxfc3VibW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1kcnktcnVuIGRvZXMgbm90IHJlY3Vyc2l2ZWx5IHVwZGF0ZSBzdWJtb2R1bGVzJyAnCisJZ2l0IC1DIHdvcmsgcHVzaCAtLWRyeS1ydW4gLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b25seSAuLi9wdWIuZ2l0IG1hc3RlciAmJgorCisJZ2l0IC1DIHN1Ym1vZHVsZS5naXQgcmV2LXBhcnNlIG1hc3RlciA+YWN0dWFsX3N1Ym1vZHVsZSAmJgorCWdpdCAtQyBwdWIuZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmFjdHVhbF9wdWIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9wdWIgYWN0dWFsX3B1YiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3N1Ym1vZHVsZSBhY3R1YWxfc3VibW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggb25seSB1bnB1c2hlZCBzdWJtb2R1bGVzIHJlY3Vyc2l2ZWx5JyAnCisJZ2l0IC1DIHdvcmsvZ2FyL2JhZ2UgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ZWRfc3VibW9kdWxlICYmCisJZ2l0IC1DIHB1Yi5naXQgcmV2LXBhcnNlIG1hc3RlciA+ZXhwZWN0ZWRfcHViICYmCisKKwlnaXQgLUMgd29yayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9ubHkgLi4vcHViLmdpdCBtYXN0ZXIgJiYKKworCWdpdCAtQyBzdWJtb2R1bGUuZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmFjdHVhbF9zdWJtb2R1bGUgJiYKKwlnaXQgLUMgcHViLmdpdCByZXYtcGFyc2UgbWFzdGVyID5hY3R1YWxfcHViICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfc3VibW9kdWxlIGFjdHVhbF9zdWJtb2R1bGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9wdWIgYWN0dWFsX3B1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHByb3BhZ2F0aW5nIHRoZSByZW1vdGVzIG5hbWUgdG8gYSBzdWJtb2R1bGUnICcKKwlnaXQgLUMgd29yayByZW1vdGUgYWRkIG9yaWdpbiAuLi9wdWIuZ2l0ICYmCisJZ2l0IC1DIHdvcmsgcmVtb3RlIGFkZCBwdWIgLi4vcHViLmdpdCAmJgorCisJPiB3b3JrL2dhci9iYWdlL2p1bmsxMCAmJgorCWdpdCAtQyB3b3JrL2dhci9iYWdlIGFkZCBqdW5rMTAgJiYKKwlnaXQgLUMgd29yay9nYXIvYmFnZSBjb21taXQgLW0gIlRlbnRoIGp1bmsiICYmCisJZ2l0IC1DIHdvcmsgYWRkIGdhci9iYWdlICYmCisJZ2l0IC1DIHdvcmsgY29tbWl0IC1tICJUZW50aCBqdW5rIGFkZGVkIHRvIGdhci9iYWdlIiAmJgorCisJIyBGYWlscyB3aGVuIHN1Ym1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgcmVtb3RlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHdvcmsgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgcHViIG1hc3RlciAmJgorCSMgU3VjY2VlZHMgd2hlbiBzdWJtb2R1bGVzIGhhcyBtYXRjaGluZyByZW1vdGUgYW5kIHJlZnNwZWMKKwlnaXQgLUMgd29yayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCBvcmlnaW4gbWFzdGVyICYmCisKKwlnaXQgLUMgc3VibW9kdWxlLmdpdCByZXYtcGFyc2UgbWFzdGVyID5hY3R1YWxfc3VibW9kdWxlICYmCisJZ2l0IC1DIHB1Yi5naXQgcmV2LXBhcnNlIG1hc3RlciA+YWN0dWFsX3B1YiAmJgorCWdpdCAtQyB3b3JrL2dhci9iYWdlIHJldi1wYXJzZSBtYXN0ZXIgPmV4cGVjdGVkX3N1Ym1vZHVsZSAmJgorCWdpdCAtQyB3b3JrIHJldi1wYXJzZSBtYXN0ZXIgPmV4cGVjdGVkX3B1YiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3N1Ym1vZHVsZSBhY3R1YWxfc3VibW9kdWxlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfcHViIGFjdHVhbF9wdWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBwcm9wYWdhdGluZyByZWZzcGVjIHRvIGEgc3VibW9kdWxlJyAnCisJPiB3b3JrL2dhci9iYWdlL2p1bmsxMSAmJgorCWdpdCAtQyB3b3JrL2dhci9iYWdlIGFkZCBqdW5rMTEgJiYKKwlnaXQgLUMgd29yay9nYXIvYmFnZSBjb21taXQgLW0gIkVsZXZlbnRoIGp1bmsiICYmCisKKwlnaXQgLUMgd29yayBjaGVja291dCBicmFuY2gyICYmCisJZ2l0IC1DIHdvcmsgYWRkIGdhci9iYWdlICYmCisJZ2l0IC1DIHdvcmsgY29tbWl0IC1tICJ1cGRhdGluZyBnYXIvYmFnZSBpbiBicmFuY2gyIiAmJgorCisJIyBGYWlscyB3aGVuIHN1Ym1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgYnJhbmNoCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHdvcmsgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgb3JpZ2luIGJyYW5jaDIgJiYKKwkjIEZhaWxzIHdoZW4gcmVmc3BlYyBpbmNsdWRlcyBhbiBvYmplY3QgaWQKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgd29yayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCBvcmlnaW4gXAorCQkiJChnaXQgLUMgd29yayByZXYtcGFyc2UgYnJhbmNoMik6cmVmcy9oZWFkcy9icmFuY2gyIiAmJgorCSMgRmFpbHMgd2hlbiByZWZzcGVjIGluY2x1ZGVzIEhFQUQgYW5kIHBhcmVudCBhbmQgc3VibW9kdWxlIGRvIG5vdAorCSMgaGF2ZSB0aGUgc2FtZSBuYW1lZCBicmFuY2ggY2hlY2tlZCBvdXQKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgd29yayBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCBvcmlnaW4gXAorCQlIRUFEOnJlZnMvaGVhZHMvYnJhbmNoMiAmJgorCisJZ2l0IC1DIHdvcmsvZ2FyL2JhZ2UgYnJhbmNoIGJyYW5jaDIgbWFzdGVyICYmCisJZ2l0IC1DIHdvcmsgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgb3JpZ2luIGJyYW5jaDIgJiYKKworCWdpdCAtQyBzdWJtb2R1bGUuZ2l0IHJldi1wYXJzZSBicmFuY2gyID5hY3R1YWxfc3VibW9kdWxlICYmCisJZ2l0IC1DIHB1Yi5naXQgcmV2LXBhcnNlIGJyYW5jaDIgPmFjdHVhbF9wdWIgJiYKKwlnaXQgLUMgd29yay9nYXIvYmFnZSByZXYtcGFyc2UgYnJhbmNoMiA+ZXhwZWN0ZWRfc3VibW9kdWxlICYmCisJZ2l0IC1DIHdvcmsgcmV2LXBhcnNlIGJyYW5jaDIgPmV4cGVjdGVkX3B1YiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3N1Ym1vZHVsZSBhY3R1YWxfc3VibW9kdWxlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfcHViIGFjdHVhbF9wdWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBwcm9wYWdhdGluZyBIRUFEIHJlZnNwZWMgdG8gYSBzdWJtb2R1bGUnICcKKwlnaXQgLUMgd29yay9nYXIvYmFnZSBjaGVja291dCBicmFuY2gyICYmCisJPiB3b3JrL2dhci9iYWdlL2p1bmsxMiAmJgorCWdpdCAtQyB3b3JrL2dhci9iYWdlIGFkZCBqdW5rMTIgJiYKKwlnaXQgLUMgd29yay9nYXIvYmFnZSBjb21taXQgLW0gIlR3ZWxmdGgganVuayIgJiYKKworCWdpdCAtQyB3b3JrIGNoZWNrb3V0IGJyYW5jaDIgJiYKKwlnaXQgLUMgd29yayBhZGQgZ2FyL2JhZ2UgJiYKKwlnaXQgLUMgd29yayBjb21taXQgLW0gInVwZGF0aW5nIGdhci9iYWdlIGluIGJyYW5jaDIiICYmCisKKwkjIFBhc3NlcyBzaW5jZSB0aGUgc3VwZXJwcm9qZWN0IGFuZCBzdWJtb2R1bGVzIEhFQUQgYXJlIGJvdGggb24gYnJhbmNoMgorCWdpdCAtQyB3b3JrIHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIG9yaWdpbiBcCisJCUhFQUQ6cmVmcy9oZWFkcy9icmFuY2gyICYmCisKKwlnaXQgLUMgc3VibW9kdWxlLmdpdCByZXYtcGFyc2UgYnJhbmNoMiA+YWN0dWFsX3N1Ym1vZHVsZSAmJgorCWdpdCAtQyBwdWIuZ2l0IHJldi1wYXJzZSBicmFuY2gyID5hY3R1YWxfcHViICYmCisJZ2l0IC1DIHdvcmsvZ2FyL2JhZ2UgcmV2LXBhcnNlIGJyYW5jaDIgPmV4cGVjdGVkX3N1Ym1vZHVsZSAmJgorCWdpdCAtQyB3b3JrIHJldi1wYXJzZSBicmFuY2gyID5leHBlY3RlZF9wdWIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9zdWJtb2R1bGUgYWN0dWFsX3N1Ym1vZHVsZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3B1YiBhY3R1YWxfcHViCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMi1mZXRjaC1wcm94eS5zaCBiL3QvdDU1MzItZmV0Y2gtcHJveHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWMyNzk4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzItZmV0Y2gtcHJveHkuc2gKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoaW5nIHZpYSBnaXQ6Ly8gdXNpbmcgY29yZS5naXRwcm94eScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgcmVwbycgJworCWdpdCBpbml0IHJlbW90ZSAmJgorCShjZCByZW1vdGUgJiYKKwkgZWNobyBjb250ZW50ID5maWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSBnaXQgY29tbWl0IC1tIG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJveHkgc2NyaXB0JyAnCisJd3JpdGVfc2NyaXB0IHByb3h5LWdldC1jbWQgIiRQRVJMX1BBVEgiIDw8LVxFT0YgJiYKKwlyZWFkKFNURElOLCAkYnVmLCA0KTsKKwlteSAkbiA9IGhleCgkYnVmKSAtIDQ7CisJcmVhZChTVERJTiwgJGJ1ZiwgJG4pOworCW15ICgkY21kLCAkb3RoZXIpID0gc3BsaXQgL1wwLywgJGJ1ZjsKKwkjIGRyb3AgYWJzb2x1dGUtcGF0aCBvbiByZXBvIG5hbWUKKwkkY21kID1+IHN7IC99eyB9OworCXByaW50ICRjbWQ7CisJRU9GCisKKwl3cml0ZV9zY3JpcHQgcHJveHkgPDwtXEVPRgorCWVjaG8gPiYyICJwcm94eWluZyBmb3IgJCoiCisJY21kPSQoLi9wcm94eS1nZXQtY21kKQorCWVjaG8gPiYyICJSdW5uaW5nICRjbWQiCisJZXhlYyAkY21kCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIHJlcG8nICcKKwlnaXQgcmVtb3RlIGFkZCBmYWtlIGdpdDovL2V4YW1wbGUuY29tL3JlbW90ZSAmJgorCWdpdCBjb25maWcgY29yZS5naXRwcm94eSAuL3Byb3h5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHRocm91Z2ggcHJveHkgd29ya3MnICcKKwlnaXQgZmV0Y2ggZmFrZSAmJgorCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzIEZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVubnkgaG9zdG5hbWVzIGFyZSByZWplY3RlZCBiZWZvcmUgcnVubmluZyBwcm94eScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCBnaXQ6Ly8tcmVtb3RlL3JlcG8uZ2l0IDI+c3RkZXJyICYmCisJISBncmVwICJwcm94eWluZyBmb3IiIHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzMtcHVzaC1jYXMuc2ggYi90L3Q1NTMzLXB1c2gtY2FzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiMGViMWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTMzLXB1c2gtY2FzLnNoCkBAIC0wLDAgKzEsMjU5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tcGFyZSAmIHN3YXAgcHVzaCBmb3JjZS9kZWxldGUgc2FmZXR5JworCisuIC4vdGVzdC1saWIuc2gKKworc2V0dXBfc3JjZHN0X2Jhc2ljICgpIHsKKwlybSAtZnIgc3JjIGRzdCAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC4gc3JjICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgc3JjIGRzdCAmJgorCSgKKwkJY2Qgc3JjICYmIGdpdCBjaGVja291dCBIRUFEXjAKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSMgY3JlYXRlIHRlbXBsYXRlIHJlcG9zaXRvcnkKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCXRlc3RfY29tbWl0IEMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byB1cGRhdGUgKHByb3RlY3RlZCknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X2NvbW1pdCBEICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXI6bWFzdGVyIG9yaWdpbiBtYXN0ZXIgMj5lcnIgJiYKKwkJZ3JlcCAic3RhbGUgaW5mbyIgZXJyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgLiByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byB1cGRhdGUgKHByb3RlY3RlZCwgZm9yY2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEQgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZSAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyOm1hc3RlciBvcmlnaW4gbWFzdGVyIDI+ZXJyICYmCisJCWdyZXAgImZvcmNlZCB1cGRhdGUiIGVycgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdCByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byB1cGRhdGUgKHByb3RlY3RlZCwgdHJhY2tpbmcpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCBEICYmCisJCWdpdCBjaGVja291dCBIRUFEXjAKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEUgJiYKKwkJZ2l0IGxzLXJlbW90ZSAuIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlciBvcmlnaW4gbWFzdGVyICYmCisJCWdpdCBscy1yZW1vdGUgLiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byB1cGRhdGUgKHByb3RlY3RlZCwgdHJhY2tpbmcsIGZvcmNlZCknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IEQgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUReMAorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X2NvbW1pdCBFICYmCisJCWdpdCBscy1yZW1vdGUgLiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+ZXhwZWN0ICYmCisJCWdpdCBwdXNoIC0tZm9yY2UgLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlciBvcmlnaW4gbWFzdGVyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgZHN0IHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHVwZGF0ZSAoYWxsb3dlZCknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X2NvbW1pdCBEICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXI6bWFzdGVyXiBvcmlnaW4gbWFzdGVyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgZHN0IHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHVwZGF0ZSAoYWxsb3dlZCwgdHJhY2tpbmcpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9jb21taXQgRCAmJgorCQlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyIG9yaWdpbiBtYXN0ZXIgMj5lcnIgJiYKKwkJISBncmVwICJmb3JjZWQgdXBkYXRlIiBlcnIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBkc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gdXBkYXRlIChhbGxvd2VkIGV2ZW4gdGhvdWdoIG5vLWZmKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkJdGVzdF9jb21taXQgRCAmJgorCQlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyIG9yaWdpbiBtYXN0ZXIgMj5lcnIgJiYKKwkJZ3JlcCAiZm9yY2VkIHVwZGF0ZSIgZXJyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgZHN0IHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGRlbGV0ZSAocHJvdGVjdGVkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyOm1hc3Rlcl4gb3JpZ2luIDptYXN0ZXIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBkZWxldGUgKHByb3RlY3RlZCwgZm9yY2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBwdXNoIC0tZm9yY2UgLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlcjptYXN0ZXJeIG9yaWdpbiA6bWFzdGVyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZGVsZXRlIChhbGxvd2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXIgb3JpZ2luIDptYXN0ZXIgMj5lcnIgJiYKKwkJZ3JlcCBkZWxldGVkIGVycgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBldmVyeXRoaW5nIHdpdGggZGVmYXVsdCBmb3JjZS13aXRoLWxlYXNlIChwcm90ZWN0ZWQpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IGJyYW5jaCBuYXN0ZXIgbWFzdGVyXgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL1wqID5leHBlY3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2Ugb3JpZ2luIG1hc3RlciBtYXN0ZXI6bmFzdGVyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvXCogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgZXZlcnl0aGluZyB3aXRoIGRlZmF1bHQgZm9yY2Utd2l0aC1sZWFzZSAoYWxsb3dlZCknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgYnJhbmNoIG5hc3RlciBtYXN0ZXJeCisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2Ugb3JpZ2luIG1hc3RlciBtYXN0ZXI6bmFzdGVyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgZHN0IHJlZnMvaGVhZHMvbWFzdGVyIHwKKwlzZWQgLWUgInMvbWFzdGVyL25hc3Rlci8iID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL25hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgYnJhbmNoIGNvdmVyZWQgYnkgZm9yY2Utd2l0aC1sZWFzZScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBicmFuY2ggYnJhbmNoIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9YnJhbmNoIG9yaWdpbiBicmFuY2gKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBkc3QgcmVmcy9oZWFkcy9icmFuY2ggPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBicmFuY2ggY292ZXJlZCBieSBmb3JjZS13aXRoLWxlYXNlIChleHBsaWNpdCknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgYnJhbmNoIGJyYW5jaCBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPWJyYW5jaDogb3JpZ2luIGJyYW5jaAorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdCByZWZzL2hlYWRzL2JyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9icmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IGJyYW5jaCBhbHJlYWR5IGV4aXN0cycgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBjaGVja291dCAtYiBicmFuY2ggbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IEYKKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGJyYW5jaCBicmFuY2ggbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1icmFuY2g6IG9yaWdpbiBicmFuY2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhY2tncm91bmQgdXBkYXRlcyBvZiBSRU1PVEUgY2FuIGJlIG1pdGlnYXRlZCB3aXRoIGEgbm9uLXVwZGF0ZWQgUkVNT1RFLXB1c2gnICcKKwlybSAtcmYgc3JjIGRzdCAmJgorCWdpdCBpbml0IC0tYmFyZSBzcmMuYmFyZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHNyYy5iYXJlIiAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIHNyYy5iYXJlIGRzdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X2NvbW1pdCBHICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbi1wdXNoIC4uL3NyYy5iYXJlICYmCisJCWdpdCBwdXNoIG9yaWdpbi1wdXNoIG1hc3RlcjptYXN0ZXIKKwkpICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgc3JjLmJhcmUgZHN0MiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdDIiICYmCisJKAorCQljZCBkc3QyICYmCisJCXRlc3RfY29tbWl0IEggJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9jb21taXQgSSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZSBvcmlnaW4tcHVzaCAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luLXB1c2ggJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIG9yaWdpbi1wdXNoCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzQtcHVzaC1zaWduZWQuc2ggYi90L3Q1NTM0LXB1c2gtc2lnbmVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzMDMzMWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTM0LXB1c2gtc2lnbmVkLnNoCkBAIC0wLDAgKzEsMjc2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2lnbmVkIHB1c2gnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisKK3ByZXBhcmVfZHN0ICgpIHsKKwlybSAtZnIgZHN0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyBkc3QgJiYKKworCWdpdCBwdXNoIGRzdCBtYXN0ZXI6bm9vcCBtYXN0ZXI6ZmYgbWFzdGVyOm5vZmYKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJIyBtYXN0ZXIsIGZmIGFuZCBub2ZmIGJyYW5jaGVzIHBvaW50aW5nIGF0IHRoZSBzYW1lIGNvbW1pdAorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0aWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbm9vcCAmJgorCWdpdCBjaGVja291dCAtYiBmZiAmJgorCWdpdCBjaGVja291dCAtYiBub2ZmICYmCisKKwkjIG5vb3Agc3RheXMgdGhlIHNhbWUsIGZmIGFkdmFuY2VzLCBub2ZmIHJld3JpdGVzCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC0tYW1lbmQgLW0gcmV3cml0dGVuICYmCisJZ2l0IGNoZWNrb3V0IGZmICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2lnbmVkIHB1c2ggZG9lcyBub3Qgc2VuZCBwdXNoIGNlcnRpZmljYXRlJyAnCisJcHJlcGFyZV9kc3QgJiYKKwlta2RpciAtcCBkc3QvLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCBkc3QvLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwtXEVPRiAmJgorCSMgZGlzY2FyZCB0aGUgdXBkYXRlIGxpc3QKKwljYXQgPi9kZXYvbnVsbAorCSMgcmVjb3JkIHRoZSBwdXNoIGNlcnRpZmljYXRlCisJaWYgdGVzdCAtbiAiJHtHSVRfUFVTSF9DRVJULX0iCisJdGhlbgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkR0lUX1BVU0hfQ0VSVCA+Li4vcHVzaC1jZXJ0CisJZmkKKwlFT0YKKworCWdpdCBwdXNoIGRzdCBub29wIGZmICtub2ZmICYmCisJISB0ZXN0IC1mIGRzdC9wdXNoLWNlcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFsa2luZyB3aXRoIGEgcmVjZWl2ZXIgd2l0aG91dCBwdXNoIGNlcnRpZmljYXRlIHN1cHBvcnQnICcKKwlwcmVwYXJlX2RzdCAmJgorCW1rZGlyIC1wIGRzdC8uZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IGRzdC8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZSA8PC1cRU9GICYmCisJIyBkaXNjYXJkIHRoZSB1cGRhdGUgbGlzdAorCWNhdCA+L2Rldi9udWxsCisJIyByZWNvcmQgdGhlIHB1c2ggY2VydGlmaWNhdGUKKwlpZiB0ZXN0IC1uICIke0dJVF9QVVNIX0NFUlQtfSIKKwl0aGVuCisJCWdpdCBjYXQtZmlsZSBibG9iICRHSVRfUFVTSF9DRVJUID4uLi9wdXNoLWNlcnQKKwlmaQorCUVPRgorCisJZ2l0IHB1c2ggZHN0IG5vb3AgZmYgK25vZmYgJiYKKwkhIHRlc3QgLWYgZHN0L3B1c2gtY2VydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tc2lnbmVkIGZhaWxzIHdpdGggYSByZWNlaXZlciB3aXRob3V0IHB1c2ggY2VydGlmaWNhdGUgc3VwcG9ydCcgJworCXByZXBhcmVfZHN0ICYmCisJbWtkaXIgLXAgZHN0Ly5naXQvaG9va3MgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXNpZ25lZCBkc3Qgbm9vcCBmZiArbm9mZiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tc2lnbmVkPTEgaXMgYWNjZXB0ZWQnICcKKwlwcmVwYXJlX2RzdCAmJgorCW1rZGlyIC1wIGRzdC8uZ2l0L2hvb2tzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1zaWduZWQ9MSBkc3Qgbm9vcCBmZiArbm9mZiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbm8gY2VydGlmaWNhdGUgZm9yIGEgc2lnbmVkIHB1c2ggd2l0aCBubyB1cGRhdGUnICcKKwlwcmVwYXJlX2RzdCAmJgorCW1rZGlyIC1wIGRzdC8uZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IGRzdC8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZSA8PC1cRU9GICYmCisJaWYgdGVzdCAtbiAiJHtHSVRfUFVTSF9DRVJULX0iCisJdGhlbgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkR0lUX1BVU0hfQ0VSVCA+Li4vcHVzaC1jZXJ0CisJZmkKKwlFT0YKKwlnaXQgcHVzaCBkc3Qgbm9vcCAmJgorCSEgdGVzdCAtZiBkc3QvcHVzaC1jZXJ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaWduZWQgcHVzaCBzZW5kcyBwdXNoIGNlcnRpZmljYXRlJyAnCisJcHJlcGFyZV9kc3QgJiYKKwlta2RpciAtcCBkc3QvLmdpdC9ob29rcyAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHJlY2VpdmUuY2VydG5vbmNlc2VlZCBzZWtyaXQgJiYKKwl3cml0ZV9zY3JpcHQgZHN0Ly5naXQvaG9va3MvcG9zdC1yZWNlaXZlIDw8LVxFT0YgJiYKKwkjIGRpc2NhcmQgdGhlIHVwZGF0ZSBsaXN0CisJY2F0ID4vZGV2L251bGwKKwkjIHJlY29yZCB0aGUgcHVzaCBjZXJ0aWZpY2F0ZQorCWlmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IgorCXRoZW4KKwkJZ2l0IGNhdC1maWxlIGJsb2IgJEdJVF9QVVNIX0NFUlQgPi4uL3B1c2gtY2VydAorCWZpICYmCisKKwljYXQgPi4uL3B1c2gtY2VydC1zdGF0dXMgPDxFX09fRgorCVNJR05FUj0ke0dJVF9QVVNIX0NFUlRfU0lHTkVSLW5vYm9keX0KKwlLRVk9JHtHSVRfUFVTSF9DRVJUX0tFWS1ub2tleX0KKwlTVEFUVVM9JHtHSVRfUFVTSF9DRVJUX1NUQVRVUy1ub3N0YXR1c30KKwlOT05DRV9TVEFUVVM9JHtHSVRfUFVTSF9DRVJUX05PTkNFX1NUQVRVUy1ub25vbmNlc3RhdHVzfQorCU5PTkNFPSR7R0lUX1BVU0hfQ0VSVF9OT05DRS1ub25vbmNlfQorCUVfT19GCisKKwlFT0YKKworCWdpdCBwdXNoIC0tc2lnbmVkIGRzdCBub29wIGZmICtub2ZmICYmCisKKwkoCisJCWNhdCA8PC1cRU9GICYmCisJCVNJR05FUj1DIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJCUtFWT0xM0I2RjUxRUNEREU0MzBECisJCVNUQVRVUz1HCisJCU5PTkNFX1NUQVRVUz1PSworCQlFT0YKKwkJc2VkIC1uIC1lICJzL15ub25jZSAvTk9OQ0U9L3AiIC1lICIvXiQvcSIgZHN0L3B1c2gtY2VydAorCSkgPmV4cGVjdCAmJgorCisJbm9vcD0kKGdpdCByZXYtcGFyc2Ugbm9vcCkgJiYKKwlmZj0kKGdpdCByZXYtcGFyc2UgZmYpICYmCisJbm9mZj0kKGdpdCByZXYtcGFyc2Ugbm9mZikgJiYKKwlncmVwICIkbm9vcCAkZmYgcmVmcy9oZWFkcy9mZiIgZHN0L3B1c2gtY2VydCAmJgorCWdyZXAgIiRub29wICRub2ZmIHJlZnMvaGVhZHMvbm9mZiIgZHN0L3B1c2gtY2VydCAmJgorCXRlc3RfY21wIGV4cGVjdCBkc3QvcHVzaC1jZXJ0LXN0YXR1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnaW5jb25zaXN0ZW50IHB1c2ggb3B0aW9ucyBpbiBzaWduZWQgcHVzaCBub3QgYWxsb3dlZCcgJworCSMgRmlyc3QsIGludm9rZSByZWNlaXZlLXBhY2sgd2l0aCBkdW1teSBpbnB1dCB0byBvYnRhaW4gaXRzIHByZWFtYmxlLgorCXByZXBhcmVfZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIHNla3JpdCAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlcHVzaG9wdGlvbnMgMSAmJgorCXByaW50ZiB4eHh4IHwgdGVzdF9taWdodF9mYWlsIGdpdCByZWNlaXZlLXBhY2sgZHN0ID5wcmVhbWJsZSAmJgorCisJIyBUaGVuLCBpbnZva2UgcHVzaC4gU2ltdWxhdGUgYSByZWNlaXZlLXBhY2sgdGhhdCBzZW5kcyB0aGUgcHJlYW1ibGUgd2UKKwkjIG9idGFpbmVkLCBmb2xsb3dlZCBieSBhIGR1bW15IHBhY2tldC4KKwl3cml0ZV9zY3JpcHQgbXlzY3JpcHQgPDwtXEVPRiAmJgorCQljYXQgcHJlYW1ibGUgJiYKKwkJcHJpbnRmIHh4eHggJiYKKwkJY2F0ID5wdXNoCisJRU9GCisJdGVzdF9taWdodF9mYWlsIGdpdCBwdXNoIC0tcHVzaC1vcHRpb249ImZvbyIgLS1wdXNoLW9wdGlvbj0iYmFyIiBcCisJCS0tcmVjZWl2ZS1wYWNrPSJcIiQocHdkKS9teXNjcmlwdFwiIiAtLXNpZ25lZCBkc3QgLS1kZWxldGUgZmYgJiYKKworCSMgUmVwbGF5IHRoZSBwdXNoIG91dHB1dCBvbiBhIGZyZXNoIGRzdCwgY2hlY2tpbmcgdGhhdCBmZiBpcyB0cnVseQorCSMgZGVsZXRlZC4KKwlwcmVwYXJlX2RzdCAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHJlY2VpdmUuY2VydG5vbmNlc2VlZCBzZWtyaXQgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZXB1c2hvcHRpb25zIDEgJiYKKwlnaXQgcmVjZWl2ZS1wYWNrIGRzdCA8cHVzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkc3QgcmV2LXBhcnNlIGZmICYmCisKKwkjIFR3ZWFrIHRoZSBwdXNoIG91dHB1dCB0byBtYWtlIHRoZSBwdXNoIG9wdGlvbiBvdXRzaWRlIHRoZSBjZXJ0CisJIyBkaWZmZXJlbnQsIHRoZW4gcmVwbGF5IGl0IG9uIGEgZnJlc2ggZHN0LCBjaGVja2luZyB0aGF0IGZmIGlzIG5vdAorCSMgZGVsZXRlZC4KKwlwZXJsIC1wZSAicy8oW14gXSliYXIvXCQxYmF6LyIgcHVzaCA+cHVzaC50d2VhayAmJgorCXByZXBhcmVfZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIHNla3JpdCAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlcHVzaG9wdGlvbnMgMSAmJgorCWdpdCByZWNlaXZlLXBhY2sgZHN0IDxwdXNoLnR3ZWFrID5vdXQgJiYKKwlnaXQgLUMgZHN0IHJldi1wYXJzZSBmZiAmJgorCWdyZXAgImluY29uc2lzdGVudCBwdXNoIG9wdGlvbnMiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZmFpbCB3aXRob3V0IGtleSBhbmQgaGVlZCB1c2VyLnNpZ25pbmdrZXknICcKKwlwcmVwYXJlX2RzdCAmJgorCW1rZGlyIC1wIGRzdC8uZ2l0L2hvb2tzICYmCisJZ2l0IC1DIGRzdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzZWVkIHNla3JpdCAmJgorCXdyaXRlX3NjcmlwdCBkc3QvLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwtXEVPRiAmJgorCSMgZGlzY2FyZCB0aGUgdXBkYXRlIGxpc3QKKwljYXQgPi9kZXYvbnVsbAorCSMgcmVjb3JkIHRoZSBwdXNoIGNlcnRpZmljYXRlCisJaWYgdGVzdCAtbiAiJHtHSVRfUFVTSF9DRVJULX0iCisJdGhlbgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkR0lUX1BVU0hfQ0VSVCA+Li4vcHVzaC1jZXJ0CisJZmkgJiYKKworCWNhdCA+Li4vcHVzaC1jZXJ0LXN0YXR1cyA8PEVfT19GCisJU0lHTkVSPSR7R0lUX1BVU0hfQ0VSVF9TSUdORVItbm9ib2R5fQorCUtFWT0ke0dJVF9QVVNIX0NFUlRfS0VZLW5va2V5fQorCVNUQVRVUz0ke0dJVF9QVVNIX0NFUlRfU1RBVFVTLW5vc3RhdHVzfQorCU5PTkNFX1NUQVRVUz0ke0dJVF9QVVNIX0NFUlRfTk9OQ0VfU1RBVFVTLW5vbm9uY2VzdGF0dXN9CisJTk9OQ0U9JHtHSVRfUFVTSF9DRVJUX05PTkNFLW5vbm9uY2V9CisJRV9PX0YKKworCUVPRgorCisJdGVzdF9jb25maWcgdXNlci5lbWFpbCBoYXNub2tleUBub3doZXJlLmNvbSAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tc2lnbmVkIGRzdCBub29wIGZmICtub2ZmCisJKSAmJgorCXRlc3RfY29uZmlnIHVzZXIuc2lnbmluZ2tleSAkR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCWdpdCBwdXNoIC0tc2lnbmVkIGRzdCBub29wIGZmICtub2ZmICYmCisKKwkoCisJCWNhdCA8PC1cRU9GICYmCisJCVNJR05FUj1DIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJCUtFWT0xM0I2RjUxRUNEREU0MzBECisJCVNUQVRVUz1HCisJCU5PTkNFX1NUQVRVUz1PSworCQlFT0YKKwkJc2VkIC1uIC1lICJzL15ub25jZSAvTk9OQ0U9L3AiIC1lICIvXiQvcSIgZHN0L3B1c2gtY2VydAorCSkgPmV4cGVjdCAmJgorCisJbm9vcD0kKGdpdCByZXYtcGFyc2Ugbm9vcCkgJiYKKwlmZj0kKGdpdCByZXYtcGFyc2UgZmYpICYmCisJbm9mZj0kKGdpdCByZXYtcGFyc2Ugbm9mZikgJiYKKwlncmVwICIkbm9vcCAkZmYgcmVmcy9oZWFkcy9mZiIgZHN0L3B1c2gtY2VydCAmJgorCWdyZXAgIiRub29wICRub2ZmIHJlZnMvaGVhZHMvbm9mZiIgZHN0L3B1c2gtY2VydCAmJgorCXRlc3RfY21wIGV4cGVjdCBkc3QvcHVzaC1jZXJ0LXN0YXR1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdmYWlsIHdpdGhvdXQga2V5IGFuZCBoZWVkIHVzZXIuc2lnbmluZ2tleSB4NTA5JyAnCisJdGVzdF9jb25maWcgZ3BnLmZvcm1hdCB4NTA5ICYmCisJcHJlcGFyZV9kc3QgJiYKKwlta2RpciAtcCBkc3QvLmdpdC9ob29rcyAmJgorCWdpdCAtQyBkc3QgY29uZmlnIHJlY2VpdmUuY2VydG5vbmNlc2VlZCBzZWtyaXQgJiYKKwl3cml0ZV9zY3JpcHQgZHN0Ly5naXQvaG9va3MvcG9zdC1yZWNlaXZlIDw8LVxFT0YgJiYKKwkjIGRpc2NhcmQgdGhlIHVwZGF0ZSBsaXN0CisJY2F0ID4vZGV2L251bGwKKwkjIHJlY29yZCB0aGUgcHVzaCBjZXJ0aWZpY2F0ZQorCWlmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IgorCXRoZW4KKwkJZ2l0IGNhdC1maWxlIGJsb2IgJEdJVF9QVVNIX0NFUlQgPi4uL3B1c2gtY2VydAorCWZpICYmCisKKwljYXQgPi4uL3B1c2gtY2VydC1zdGF0dXMgPDxFX09fRgorCVNJR05FUj0ke0dJVF9QVVNIX0NFUlRfU0lHTkVSLW5vYm9keX0KKwlLRVk9JHtHSVRfUFVTSF9DRVJUX0tFWS1ub2tleX0KKwlTVEFUVVM9JHtHSVRfUFVTSF9DRVJUX1NUQVRVUy1ub3N0YXR1c30KKwlOT05DRV9TVEFUVVM9JHtHSVRfUFVTSF9DRVJUX05PTkNFX1NUQVRVUy1ub25vbmNlc3RhdHVzfQorCU5PTkNFPSR7R0lUX1BVU0hfQ0VSVF9OT05DRS1ub25vbmNlfQorCUVfT19GCisKKwlFT0YKKworCXRlc3RfY29uZmlnIHVzZXIuZW1haWwgaGFzbm9rZXlAbm93aGVyZS5jb20gJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgIiIgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXNpZ25lZCBkc3Qgbm9vcCBmZiArbm9mZgorCSkgJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgJEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwlnaXQgcHVzaCAtLXNpZ25lZCBkc3Qgbm9vcCBmZiArbm9mZiAmJgorCisJKAorCQljYXQgPDwtXEVPRiAmJgorCQlTSUdORVI9L0NOPUMgTyBNaXR0ZXIvTz1FeGFtcGxlL1NOPUMgTy9HTj1NaXR0ZXIKKwkJS0VZPQorCQlTVEFUVVM9RworCQlOT05DRV9TVEFUVVM9T0sKKwkJRU9GCisJCXNlZCAtbiAtZSAicy9ebm9uY2UgL05PTkNFPS9wIiAtZSAiL14kL3EiIGRzdC9wdXNoLWNlcnQKKwkpID5leHBlY3QuaW4gJiYKKwlrZXk9JChjYXQgIiR7R05VUEdIT01FfS90cnVzdGxpc3QudHh0IiB8IGN1dCAtZCIgIiAtZjEgfCB0ciAtZCAiOiIpICYmCisJc2VkIC1lICJzL15LRVk9L0tFWT0ke2tleX0vIiBleHBlY3QuaW4gPmV4cGVjdCAmJgorCisJbm9vcD0kKGdpdCByZXYtcGFyc2Ugbm9vcCkgJiYKKwlmZj0kKGdpdCByZXYtcGFyc2UgZmYpICYmCisJbm9mZj0kKGdpdCByZXYtcGFyc2Ugbm9mZikgJiYKKwlncmVwICIkbm9vcCAkZmYgcmVmcy9oZWFkcy9mZiIgZHN0L3B1c2gtY2VydCAmJgorCWdyZXAgIiRub29wICRub2ZmIHJlZnMvaGVhZHMvbm9mZiIgZHN0L3B1c2gtY2VydCAmJgorCXRlc3RfY21wIGV4cGVjdCBkc3QvcHVzaC1jZXJ0LXN0YXR1cworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzUtZmV0Y2gtcHVzaC1zeW1yZWYuc2ggYi90L3Q1NTM1LWZldGNoLXB1c2gtc3ltcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4ZjZkMjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTM1LWZldGNoLXB1c2gtc3ltcmVmLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhdm9pZGluZyBjb25mbGljdGluZyB1cGRhdGUgdGhyb3VnaCBzeW1yZWYgYWxpYXNpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBjbG9uZSAuIHNyYyAmJgorCWdpdCBjbG9uZSBzcmMgZHN0MSAmJgorCWdpdCBjbG9uZSBzcmMgZHN0MiAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCSggY2Qgc3JjICYmIGdpdCBwdWxsICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCcgJworCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBwdXNoIC4uL2RzdDEgInJlZnMvcmVtb3Rlcy8qOnJlZnMvcmVtb3Rlcy8qIgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyAicmVmcy9yZW1vdGVzLyoiID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdDEgInJlZnMvcmVtb3Rlcy8qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSggY2Qgc3JjICYmIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEICkgPmV4cGVjdCAmJgorCSggY2QgZHN0MSAmJiBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCApID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoJyAnCisJKAorCQljZCBkc3QyICYmCisJCWdpdCBmZXRjaCAuLi9zcmMgInJlZnMvcmVtb3Rlcy8qOnJlZnMvcmVtb3Rlcy8qIgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyAicmVmcy9yZW1vdGVzLyoiID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdDIgInJlZnMvcmVtb3Rlcy8qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSggY2Qgc3JjICYmIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEICkgPmV4cGVjdCAmJgorCSggY2QgZHN0MiAmJiBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCApID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzNi1mZXRjaC1jb25mbGljdHMuc2ggYi90L3Q1NTM2LWZldGNoLWNvbmZsaWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MWYyOGMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzNi1mZXRjaC1jb25mbGljdHMuc2gKQEAgLTAsMCArMSw4NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoIGhhbmRsZXMgY29uZmxpY3RpbmcgcmVmc3BlY3MgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKworRD0kKHB3ZCkKKworc2V0dXBfcmVwb3NpdG9yeSAoKSB7CisJZ2l0IGluaXQgIiQxIiAmJiAoCisJCWNkICIkMSIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAiJEQiICYmCisJCXNoaWZ0ICYmCisJCWZvciByZWZzcGVjIGluICIkQCIKKwkJZG8KKwkJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5mZXRjaCAiJHJlZnNwZWMiCisJCWRvbmUKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJJbml0aWFsIiAmJgorCWdpdCBicmFuY2ggYnJhbmNoMSAmJgorCWdpdCB0YWcgdGFnMSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiRmlyc3QiICYmCisJZ2l0IGJyYW5jaCBicmFuY2gyICYmCisJZ2l0IHRhZyB0YWcyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggbm8gY29uZmxpY3QnICcKKwlzZXR1cF9yZXBvc2l0b3J5IG9rICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYgKAorCQljZCBvayAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjb25mbGljdDogY29uZmlnIHZzLiBjb25maWcnICcKKwlzZXR1cF9yZXBvc2l0b3J5IGNjYyBcCisJCSIrcmVmcy9oZWFkcy9icmFuY2gxOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMSIgXAorCQkiK3JlZnMvaGVhZHMvYnJhbmNoMjpyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEiICYmICgKKwkJY2QgY2NjICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCBvcmlnaW4gMj5lcnJvciAmJgorCQl0ZXN0X2kxOG5ncmVwICJmYXRhbDogQ2Fubm90IGZldGNoIGJvdGggcmVmcy9oZWFkcy9icmFuY2gxIGFuZCByZWZzL2hlYWRzL2JyYW5jaDIgdG8gcmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gxIiBlcnJvcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZHVwbGljYXRlOiBjb25maWcgdnMuIGNvbmZpZycgJworCXNldHVwX3JlcG9zaXRvcnkgZGNjIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiBcCisJCSIrcmVmcy9oZWFkcy9icmFuY2gxOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMSIgJiYgKAorCQljZCBkY2MgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY29uZmxpY3Q6IGFyZyBvdmVycmlkZXMgY29uZmlnJyAnCisJc2V0dXBfcmVwb3NpdG9yeSBhb2MgXAorCQkiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmICgKKwkJY2QgYW9jICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gcmVmcy9oZWFkcy9icmFuY2gyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY29uZmxpY3Q6IGFyZyB2cy4gYXJnJyAnCisJc2V0dXBfcmVwb3NpdG9yeSBjYWEgJiYgKAorCQljZCBjYWEgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIG9yaWdpbiBcCisJCQlyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIFwKKwkJCXJlZnMvaGVhZHMvYnJhbmNoMjpyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEgMj5lcnJvciAmJgorCQl0ZXN0X2kxOG5ncmVwICJmYXRhbDogQ2Fubm90IGZldGNoIGJvdGggcmVmcy9oZWFkcy9icmFuY2gxIGFuZCByZWZzL2hlYWRzL2JyYW5jaDIgdG8gcmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gxIiBlcnJvcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY29uZmxpY3Q6IGNyaXNzLWNyb3NzIGFyZ3MnICcKKwlzZXR1cF9yZXBvc2l0b3J5IHhhYSBcCisJCSIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYgKAorCQljZCB4YWEgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbiBcCisJCQlyZWZzL2hlYWRzL2JyYW5jaDE6cmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gyIFwKKwkJCXJlZnMvaGVhZHMvYnJhbmNoMjpyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEgMj5lcnJvciAmJgorCQl0ZXN0X2kxOG5ncmVwICJ3YXJuaW5nOiByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEgdXN1YWxseSB0cmFja3MgcmVmcy9oZWFkcy9icmFuY2gxLCBub3QgcmVmcy9oZWFkcy9icmFuY2gyIiBlcnJvciAmJgorCQl0ZXN0X2kxOG5ncmVwICJ3YXJuaW5nOiByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDIgdXN1YWxseSB0cmFja3MgcmVmcy9oZWFkcy9icmFuY2gyLCBub3QgcmVmcy9oZWFkcy9icmFuY2gxIiBlcnJvcgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTM3LWZldGNoLXNoYWxsb3cuc2ggYi90L3Q1NTM3LWZldGNoLXNoYWxsb3cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGY2ODFkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzctZmV0Y2gtc2hhbGxvdy5zaApAQCAtMCwwICsxLDI2NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoL2Nsb25lIGZyb20gYSBzaGFsbG93IGNsb25lJworCisuIC4vdGVzdC1saWIuc2gKKworY29tbWl0KCkgeworCWVjaG8gIiQxIiA+dHJhY2tlZCAmJgorCWdpdCBhZGQgdHJhY2tlZCAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNvbW1pdCAxICYmCisJY29tbWl0IDIgJiYKKwljb21taXQgMyAmJgorCWNvbW1pdCA0ICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJcGVybCBzaGExOnMvMDAzNHNoYWxsb3cgJXMvMDAzNnVuc2hhbGxvdyAlcy8KKwlwZXJsIHNoYTI1NjpzLzAwNGNzaGFsbG93ICVzLzAwNGV1bnNoYWxsb3cgJXMvCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNoYWxsb3cgY2xvbmUnICcKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWRlcHRoPTIgLmdpdCBzaGFsbG93ICYmCisJZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Ly5naXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIHNoYWxsb3cgY2xvbmUnICcKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCBzaGFsbG93IHNoYWxsb3cyICYmCisJKAorCWNkIHNoYWxsb3cyICYmCisJZ2l0IGZzY2sgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBzaGFsbG93IGNsb25lJyAnCisJKAorCWNkIHNoYWxsb3cgJiYKKwljb21taXQgNQorCSkgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzUKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tZGVwdGggZnJvbSBzaGFsbG93IGNsb25lJyAnCisJKAorCWNkIHNoYWxsb3cgJiYKKwljb21taXQgNgorCSkgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgZmV0Y2ggLS1kZXB0aD0yICYmCisJZ2l0IGZzY2sgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis2Cis1CitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXVuc2hhbGxvdyBmcm9tIHNoYWxsb3cgY2xvbmUnICcKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgZmV0Y2ggLS11bnNoYWxsb3cgJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzYKKzUKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHNvbWV0aGluZyB1cHN0cmVhbSBoYXMgYnV0IGhpZGRlbiBieSBjbGllbnRzIHNoYWxsb3cgYm91bmRhcmllcycgJworCSMgdGhlIGJsb2IgIjEiIGlzIGF2YWlsYWJsZSBpbiAuZ2l0IGJ1dCBoaWRkZW4gYnkgdGhlCisJIyBzaGFsbG93Mi8uZ2l0L3NoYWxsb3cgYW5kIGl0IHNob3VsZCBiZSByZXNlbnQKKwkhIGdpdCAtLWdpdC1kaXI9c2hhbGxvdzIvLmdpdCBjYXQtZmlsZSBibG9iICQoZWNobyAxfGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSA+L2Rldi9udWxsICYmCisJZWNobyAxID4xLnQgJiYKKwlnaXQgYWRkIDEudCAmJgorCWdpdCBjb21taXQgLW0gYWRkLTEtYmFjayAmJgorCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBmZXRjaCAuLi8uZ2l0ICtyZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvdG9wL21hc3RlciAmJgorCWdpdCBmc2NrICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyB0b3AvbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorYWRkLTEtYmFjaworNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkgJiYKKwlnaXQgLS1naXQtZGlyPXNoYWxsb3cyLy5naXQgY2F0LWZpbGUgYmxvYiAkKGVjaG8gMXxnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHRoYXQgcmVxdWlyZXMgY2hhbmdlcyBpbiAuZ2l0L3NoYWxsb3cgaXMgZmlsdGVyZWQnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuby1zaGFsbG93ICYmCisJY29tbWl0IG5vLXNoYWxsb3cKKwkpICYmCisJZ2l0IGluaXQgbm90c2hhbGxvdyAmJgorCSgKKwljZCBub3RzaGFsbG93ICYmCisJZ2l0IGZldGNoIC4uL3NoYWxsb3cvLmdpdCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3NoYWxsb3cvKiYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbC5yZWZzICYmCisJY2F0IDw8RU9GID5leHBlY3QucmVmcyAmJgorcmVmcy9yZW1vdGVzL3NoYWxsb3cvbm8tc2hhbGxvdworRU9GCisJdGVzdF9jbXAgZXhwZWN0LnJlZnMgYWN0dWFsLnJlZnMgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHNoYWxsb3cvbm8tc2hhbGxvdyA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK25vLXNoYWxsb3cKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tdXBkYXRlLXNoYWxsb3cnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljb21taXQgNyAmJgorCWdpdCB0YWcgLW0gZm9vIGhlYXZ5LXRhZyBIRUFEXiAmJgorCWdpdCB0YWcgbGlnaHQtdGFnIEhFQUReOnRyYWNrZWQKKwkpICYmCisJKAorCWNkIG5vdHNoYWxsb3cgJiYKKwlnaXQgZmV0Y2ggLS11cGRhdGUtc2hhbGxvdyAuLi9zaGFsbG93Ly5naXQgcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zaGFsbG93LyogJiYKKwlnaXQgZnNjayAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1zb3J0PXJlZm5hbWUgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwucmVmcyAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0LnJlZnMgJiYKK3JlZnMvcmVtb3Rlcy9zaGFsbG93L21hc3RlcgorcmVmcy9yZW1vdGVzL3NoYWxsb3cvbm8tc2hhbGxvdworcmVmcy90YWdzL2hlYXZ5LXRhZworcmVmcy90YWdzL2xpZ2h0LXRhZworRU9GCisJdGVzdF9jbXAgZXhwZWN0LnJlZnMgYWN0dWFsLnJlZnMgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHNoYWxsb3cvbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNworNgorNQorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdzaGFsbG93IGZldGNoIGZyb20gYSByZWFkLW9ubHkgcmVwbycgJworCWNwIC1SIC5naXQgcmVhZC1vbmx5LmdpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZmluZCByZWFkLW9ubHkuZ2l0IC10eXBlIGQgLXByaW50IHwgeGFyZ3MgY2htb2QgK3ciICYmCisJZmluZCByZWFkLW9ubHkuZ2l0IC1wcmludCB8IHhhcmdzIGNobW9kIC13ICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1kZXB0aD0yIHJlYWQtb25seS5naXQgZnJvbS1yZWFkLW9ubHkgJiYKKwlnaXQgLS1naXQtZGlyPWZyb20tcmVhZC1vbmx5Ly5naXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorYWRkLTEtYmFjaworNAorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L3NoYWxsb3cgaXMgZWRpdGVkIGJ5IHJlcGFjaycgJworCWdpdCBpbml0IHNoYWxsb3ctc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2hhbGxvdy1zZXJ2ZXIgQSAmJgorCXRlc3RfY29tbWl0IC1DIHNoYWxsb3ctc2VydmVyIEIgJiYKKwlnaXQgLUMgc2hhbGxvdy1zZXJ2ZXIgY2hlY2tvdXQgLWIgYnJhbmNoICYmCisJdGVzdF9jb21taXQgLUMgc2hhbGxvdy1zZXJ2ZXIgQyAmJgorCXRlc3RfY29tbWl0IC1DIHNoYWxsb3ctc2VydmVyIEUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzaGFsbG93LXNlcnZlciBEICYmCisJZD0iJChnaXQgLUMgc2hhbGxvdy1zZXJ2ZXIgcmV2LXBhcnNlIC0tdmVyaWZ5IEReMCkiICYmCisJZ2l0IC1DIHNoYWxsb3ctc2VydmVyIGNoZWNrb3V0IG1hc3RlciAmJgorCisJZ2l0IGNsb25lIC0tZGVwdGg9MSAtLW5vLXRhZ3MgLS1uby1zaW5nbGUtYnJhbmNoIFwKKwkJImZpbGU6Ly8kUFdEL3NoYWxsb3ctc2VydmVyIiBzaGFsbG93LWNsaWVudCAmJgorCisJOiBub3cgcmVtb3ZlIHRoZSBicmFuY2ggYW5kIGZldGNoIHdpdGggcHJ1bmUgJiYKKwlnaXQgLUMgc2hhbGxvdy1zZXJ2ZXIgYnJhbmNoIC1EIGJyYW5jaCAmJgorCWdpdCAtQyBzaGFsbG93LWNsaWVudCBmZXRjaCAtLXBydW5lIC0tZGVwdGg9MSBcCisJCW9yaWdpbiAiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCisJZ2l0IC1DIHNoYWxsb3ctY2xpZW50IHJlcGFjayAtYWRmbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzaGFsbG93LWNsaWVudCByZXYtcGFyc2UgLS12ZXJpZnkgJGReMCAmJgorCSEgZ3JlcCAkZCBzaGFsbG93LWNsaWVudC8uZ2l0L3NoYWxsb3cgJiYKKworCWdpdCAtQyBzaGFsbG93LXNlcnZlciBicmFuY2ggYnJhbmNoLW9yaWcgJGQgJiYKKwlnaXQgLUMgc2hhbGxvdy1jbGllbnQgZmV0Y2ggLS1wcnVuZSAtLWRlcHRoPTIgXAorCQlvcmlnaW4gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIgorJworCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKworUkVQTz0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGZldGNoZXMgY2hlY2sgY29ubmVjdGl2aXR5IGJlZm9yZSB3cml0aW5nIHNoYWxsb3cgZmlsZScgJworCXJtIC1yZiAiJFJFUE8iIGNsaWVudCAmJgorCisJZ2l0IGluaXQgIiRSRVBPIiAmJgorCXRlc3RfY29tbWl0IC1DICIkUkVQTyIgb25lICYmCisJdGVzdF9jb21taXQgLUMgIiRSRVBPIiB0d28gJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJFJFUE8iIHRocmVlICYmCisKKwlnaXQgaW5pdCBjbGllbnQgJiYKKworCSMgVXNlIHByb3RvY29sIHYyIHRvIGVuc3VyZSB0aGF0IHNoYWxsb3cgaW5mb3JtYXRpb24gaXMgc2VudCBleGFjdGx5CisJIyBvbmNlIGJ5IHRoZSBzZXJ2ZXIsIHNpbmNlIHdlIGFyZSBwbGFubmluZyB0byBtYW5pcHVsYXRlIGl0LgorCWdpdCAtQyAiJFJFUE8iIGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKwlnaXQgLUMgY2xpZW50IGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKworCWdpdCAtQyBjbGllbnQgZmV0Y2ggLS1kZXB0aD0yICIkSFRUUERfVVJML29uZV90aW1lX3BlcmwvcmVwbyIgbWFzdGVyOmFfYnJhbmNoICYmCisKKwkjIENyYWZ0IGEgc2l0dWF0aW9uIGluIHdoaWNoIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayBhbiB1bnNoYWxsb3cgcmVxdWVzdAorCSMgd2l0aCBhbiBlbXB0eSBwYWNrZmlsZS4gVGhpcyBpcyBkb25lIGJ5IHJlZmV0Y2hpbmcgd2l0aCBhIHNob3J0ZXIKKwkjIGRlcHRoICh0byBlbnN1cmUgdGhhdCB0aGUgcGFja2ZpbGUgaXMgZW1wdHkpLCBhbmQgb3ZlcndyaXRpbmcgdGhlCisJIyBzaGFsbG93IGxpbmUgaW4gdGhlIHJlc3BvbnNlIHdpdGggdGhlIHVuc2hhbGxvdyBsaW5lIHdlIHdhbnQuCisJcHJpbnRmICIkKHRlc3Rfb2lkIHBlcmwpIiBcCisJICAgICAgICIkKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSBIRUFEKSIgXAorCSAgICAgICAiJChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgSEVBRF4pIiBcCisJICAgICAgID4iJEhUVFBEX1JPT1RfUEFUSC9vbmUtdGltZS1wZXJsIiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9TSURFQkFORF9BTEw9MCBnaXQgLUMgY2xpZW50IFwKKwkJZmV0Y2ggLS1kZXB0aD0xICIkSFRUUERfVVJML29uZV90aW1lX3BlcmwvcmVwbyIgXAorCQltYXN0ZXI6YV9icmFuY2ggJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIG9uZS10aW1lLXBlcmwgc2NyaXB0IHdhcyB1c2VkLgorCSEgdGVzdCAtZSAiJEhUVFBEX1JPT1RfUEFUSC9vbmUtdGltZS1wZXJsIiAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgcmVzdWx0aW5nIHJlcG8gaXMgY29uc2lzdGVudCwgZGVzcGl0ZSBvdXIgZmFpbHVyZSB0bworCSMgZmV0Y2guCisJZ2l0IC1DIGNsaWVudCBmc2NrCisnCisKKyMgRE8gTk9UIGFkZCBub24taHR0cGQtc3BlY2lmaWMgdGVzdHMgaGVyZSwgYmVjYXVzZSB0aGUgbGFzdCBwYXJ0IG9mIHRoaXMKKyMgdGVzdCBzY3JpcHQgaXMgb25seSBleGVjdXRlZCB3aGVuIGh0dHBkIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTM4LXB1c2gtc2hhbGxvdy5zaCBiL3QvdDU1MzgtcHVzaC1zaGFsbG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjYmY4NGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTM4LXB1c2gtc2hhbGxvdy5zaApAQCAtMCwwICsxLDEyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1c2ggZnJvbS90byBhIHNoYWxsb3cgY2xvbmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXQoKSB7CisJZWNobyAiJDEiID50cmFja2VkICYmCisJZ2l0IGFkZCB0cmFja2VkICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJY29tbWl0IDEgJiYKKwljb21taXQgMiAmJgorCWNvbW1pdCAzICYmCisJY29tbWl0IDQgJiYKKwlnaXQgY2xvbmUgLiBmdWxsICYmCisJKAorCWdpdCBpbml0IGZ1bGwtYWJjICYmCisJY2QgZnVsbC1hYmMgJiYKKwljb21taXQgYSAmJgorCWNvbW1pdCBiICYmCisJY29tbWl0IGMKKwkpICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1kZXB0aD0yIC5naXQgc2hhbGxvdyAmJgorCWdpdCAtLWdpdC1kaXI9c2hhbGxvdy8uZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWRlcHRoPTIgZnVsbC1hYmMvLmdpdCBzaGFsbG93MiAmJgorCWdpdCAtLWdpdC1kaXI9c2hhbGxvdzIvLmdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitjCitiCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZnJvbSBzaGFsbG93IGNsb25lJyAnCisJKAorCWNkIHNoYWxsb3cgJiYKKwljb21taXQgNSAmJgorCWdpdCBwdXNoIC4uLy5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvc2hhbGxvdy9tYXN0ZXIKKwkpICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyBzaGFsbG93L21hc3RlciA+YWN0dWFsICYmCisJZ2l0IGZzY2sgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNQorNAorMworMgorMQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZyb20gc2hhbGxvdyBjbG9uZSwgd2l0aCBncmFmdGVkIHJvb3RzJyAnCisJKAorCWNkIHNoYWxsb3cyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4vLmdpdCArbWFzdGVyOnJlZnMvcmVtb3Rlcy9zaGFsbG93Mi9tYXN0ZXIgMj5lcnIgJiYKKwlncmVwICJzaGFsbG93Mi9tYXN0ZXIuKnNoYWxsb3cgdXBkYXRlIG5vdCBhbGxvd2VkIiBlcnIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBzaGFsbG93Mi9tYXN0ZXIgJiYKKwlnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbmV3IHNoYWxsb3cgcm9vdCB3aXRoIHJlY2VpdmUudXBkYXRlc2hhbGxvdyBvbicgJworCXRlc3RfY29uZmlnIHJlY2VpdmUuc2hhbGxvd3VwZGF0ZSB0cnVlICYmCisJKAorCWNkIHNoYWxsb3cyICYmCisJZ2l0IHB1c2ggLi4vLmdpdCArbWFzdGVyOnJlZnMvcmVtb3Rlcy9zaGFsbG93Mi9tYXN0ZXIKKwkpICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyBzaGFsbG93Mi9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCBmc2NrICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK2MKK2IKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmcm9tIHNoYWxsb3cgdG8gc2hhbGxvdycgJworCSgKKwljZCBzaGFsbG93ICYmCisJZ2l0IC0tZ2l0LWRpcj0uLi9zaGFsbG93Mi8uZ2l0IGNvbmZpZyByZWNlaXZlLnNoYWxsb3d1cGRhdGUgdHJ1ZSAmJgorCWdpdCBwdXNoIC4uL3NoYWxsb3cyLy5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvc2hhbGxvdy9tYXN0ZXIgJiYKKwlnaXQgLS1naXQtZGlyPS4uL3NoYWxsb3cyLy5naXQgY29uZmlnIHJlY2VpdmUuc2hhbGxvd3VwZGF0ZSBmYWxzZQorCSkgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHNoYWxsb3cvbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgZnNjayAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis1Cis0CiszCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZyb20gZnVsbCB0byBzaGFsbG93JyAnCisJISBnaXQgLS1naXQtZGlyPXNoYWxsb3cyLy5naXQgY2F0LWZpbGUgYmxvYiAkKGVjaG8gMXxnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwljb21taXQgMSAmJgorCWdpdCBwdXNoIHNoYWxsb3cyLy5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvdG9wL21hc3RlciAmJgorCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgdG9wL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IGZzY2sgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorMQorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBibG9iICQoZWNobyAxfGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSA+L2Rldi9udWxsCisJKQorJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTM5LWZldGNoLWh0dHAtc2hhbGxvdy5zaCBiL3QvdDU1MzktZmV0Y2gtaHR0cC1zaGFsbG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwZDAyZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTM5LWZldGNoLWh0dHAtc2hhbGxvdy5zaApAQCAtMCwwICsxLDE1MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoL2Nsb25lIGZyb20gYSBzaGFsbG93IGNsb25lIG92ZXIgaHR0cCcKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKworY29tbWl0KCkgeworCWVjaG8gIiQxIiA+dHJhY2tlZCAmJgorCWdpdCBhZGQgdHJhY2tlZCAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzaGFsbG93IGNsb25lJyAnCisJY29tbWl0IDEgJiYKKwljb21taXQgMiAmJgorCWNvbW1pdCAzICYmCisJY29tbWl0IDQgJiYKKwljb21taXQgNSAmJgorCWNvbW1pdCA2ICYmCisJY29tbWl0IDcgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWRlcHRoPTUgLmdpdCBzaGFsbG93ICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGh0dHAgcmVwb3NpdG9yeScgJworCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1sb2NhbCBzaGFsbG93ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IGNsb25lICYmCisJKAorCWNkIGNsb25lICYmCisJZ2l0IGZzY2sgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis3Cis2Cis1Cis0CiszCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRoaXMgdGVzdCBpcyB0cmlja3kuIFdlIG5lZWQgbGFyZ2UgZW5vdWdoICJoYXZlInMgdGhhdCBmZXRjaC1wYWNrCisjIHdpbGwgcHV0IHBrdC1mbHVzaCBpbiBiZXR3ZWVuLiBUaGVuIHdlIG5lZWQgYSAiaGF2ZSIgdGhlIHNlcnZlcgorIyBkb2VzIG5vdCBoYXZlLCBpdCdsbCBzZW5kICJBQ0sgJXMgcmVhZHkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBzaGFsbG93IGxpbmVzIGFmdGVyIHJlY2VpdmluZyBBQ0sgcmVhZHknICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJdGVzdF90aWNrICYmCisJCWZvciBpIGluICQodGVzdF9zZXEgMTUpCisJCWRvCisJCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gdW5yZWxhdGVkJGkgJiYKKwkJCXRlc3RfY29tbWl0IHVucmVsYXRlZCRpICYmCisJCQlnaXQgcHVzaCAtcSAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgXAorCQkJCXJlZnMvaGVhZHMvdW5yZWxhdGVkJGk6cmVmcy9oZWFkcy91bnJlbGF0ZWQkaSAmJgorCQkJZ2l0IHB1c2ggLXEgLi4vY2xvbmUvLmdpdCBcCisJCQkJcmVmcy9oZWFkcy91bnJlbGF0ZWQkaTpyZWZzL2hlYWRzL3VucmVsYXRlZCRpIHx8CisJCQlleGl0IDEKKwkJZG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IG5ldyAmJgorCQlnaXQgcHVzaCAgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGNsb25lICYmCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXduZXcgJiYKKwkJdGVzdF9jb21taXQgbmV3LXRvbyAmJgorCQkjIE5FRURTV09SSzogSWYgdGhlIG92ZXJzcGVjaWZpY2F0aW9uIG9mIHRoZSBleHBlY3RlZCByZXN1bHQgaXMgcmVkdWNlZCwgd2UKKwkJIyBtaWdodCBiZSBhYmxlIHRvIHJ1biB0aGlzIHRlc3QgaW4gYWxsIHByb3RvY29sIHZlcnNpb25zLgorCQlHSVRfVFJBQ0VfUEFDS0VUPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlIiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQkJZ2l0IGZldGNoIC0tZGVwdGg9MiAmJgorCQlncmVwICJmZXRjaC1wYWNrPCBBQ0sgLiogcmVhZHkiIC4uL3RyYWNlICYmCisJCSEgZ3JlcCAiZmV0Y2gtcGFjaz4gZG9uZSIgLi4vdHJhY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgc2luY2UgLi4uJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzaGFsbG93LXNpbmNlICYmCisJKAorCWNkIHNoYWxsb3ctc2luY2UgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjEwMDAwMDAwMCArMDcwMCIgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG9uZSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwMDAwMDAwICswNzAwIiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHdvICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIzMDAwMDAwMDAgKzA3MDAiIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0aHJlZSAmJgorCW12IC5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvc2hhbGxvdy1zaW5jZS5naXQiICYmCisJZ2l0IGNsb25lIC0tc2hhbGxvdy1zaW5jZSAiMzAwMDAwMDAwICswNzAwIiAkSFRUUERfVVJML3NtYXJ0L3NoYWxsb3ctc2luY2UuZ2l0IC4uL3NoYWxsb3cxMSAmJgorCWdpdCAtQyAuLi9zaGFsbG93MTEgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+YWN0dWFsICYmCisJZWNobyB0aHJlZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHNoYWxsb3cgc2luY2UgLi4uJyAnCisJZ2l0IC1DIHNoYWxsb3cxMSBmZXRjaCAtLXNoYWxsb3ctc2luY2UgIjIwMDAwMDAwMCArMDcwMCIgb3JpZ2luICYmCisJZ2l0IC1DIHNoYWxsb3cxMSBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwl0aHJlZQorCXR3bworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGNsb25lIGV4Y2x1ZGUgdGFnIHR3bycgJworCXRlc3RfY3JlYXRlX3JlcG8gc2hhbGxvdy1leGNsdWRlICYmCisJKAorCWNkIHNoYWxsb3ctZXhjbHVkZSAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJbXYgLmdpdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9zaGFsbG93LWV4Y2x1ZGUuZ2l0IiAmJgorCWdpdCBjbG9uZSAtLXNoYWxsb3ctZXhjbHVkZSB0d28gJEhUVFBEX1VSTC9zbWFydC9zaGFsbG93LWV4Y2x1ZGUuZ2l0IC4uL3NoYWxsb3cxMiAmJgorCWdpdCAtQyAuLi9zaGFsbG93MTIgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+YWN0dWFsICYmCisJZWNobyB0aHJlZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGV4Y2x1ZGUgdGFnIG9uZScgJworCWdpdCAtQyBzaGFsbG93MTIgZmV0Y2ggLS1zaGFsbG93LWV4Y2x1ZGUgb25lIG9yaWdpbiAmJgorCWdpdCAtQyBzaGFsbG93MTIgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF93cml0ZV9saW5lcyB0aHJlZSB0d28gPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIGRlZXBlbicgJworCXRlc3RfY3JlYXRlX3JlcG8gc2hhbGxvdy1kZWVwZW4gJiYKKwkoCisJY2Qgc2hhbGxvdy1kZWVwZW4gJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCW12IC5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvc2hhbGxvdy1kZWVwZW4uZ2l0IiAmJgorCWdpdCBjbG9uZSAtLWRlcHRoIDEgJEhUVFBEX1VSTC9zbWFydC9zaGFsbG93LWRlZXBlbi5naXQgZGVlcGVuICYmCisJbXYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvc2hhbGxvdy1kZWVwZW4uZ2l0IiAuZ2l0ICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCWdpdCAtQyBkZWVwZW4gbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgbWFzdGVyID5hY3R1YWwgJiYKKwllY2hvIHRocmVlID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCW12IC5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvc2hhbGxvdy1kZWVwZW4uZ2l0IiAmJgorCWdpdCAtQyBkZWVwZW4gZmV0Y2ggLS1kZWVwZW49MSAmJgorCWdpdCAtQyBkZWVwZW4gbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZm91cgorCXRocmVlCisJdHdvCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDAtaHR0cC1wdXNoLXdlYmRhdi5zaCBiL3QvdDU1NDAtaHR0cC1wdXNoLXdlYmRhdi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNDc2YzMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0MC1odHRwLXB1c2gtd2ViZGF2LnNoCkBAIC0wLDAgKzEsMTc3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENsZW1lbnMgQnVjaGFjaGVyIDxkcml6emRAYW9uLmF0PgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IFdlYkRBViBodHRwLXB1c2gKKworVGhpcyB0ZXN0IHJ1bnMgdmFyaW91cyBzYW5pdHkgY2hlY2tzIG9uIGh0dHAtcHVzaC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiBnaXQgaHR0cC1wdXNoID4gL2Rldi9udWxsIDI+JjEgfHwgWyAkPyAtZXEgMTI4IF0KK3RoZW4KKwlza2lwX2FsbD0ic2tpcHBpbmcgdGVzdCwgVVNFX0NVUkxfTVVMVEkgaXMgbm90IGRlZmluZWQiCisJdGVzdF9kb25lCitmaQorCitMSUJfSFRUUERfREFWPXQKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitST09UX1BBVEg9IiRQV0QiCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgcmVwb3NpdG9yeScgJworCWNkICIkUk9PVF9QQVRIIiAmJgorCW1rZGlyIHRlc3RfcmVwbyAmJgorCWNkIHRlc3RfcmVwbyAmJgorCWdpdCBpbml0ICYmCisJOiA+cGF0aDEgJiYKKwlnaXQgYWRkIHBhdGgxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJY2QgLSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgdGVzdF9yZXBvIHRlc3RfcmVwby5naXQgJiYKKwljZCB0ZXN0X3JlcG8uZ2l0ICYmCisJZ2l0IC0tYmFyZSB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwltdiBob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUgaG9va3MvcG9zdC11cGRhdGUgJiYKKwlPUklHX0hFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2QgLSAmJgorCW12IHRlc3RfcmVwby5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeScgJworCW1rZGlyIC1wICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYiIgJiYKKwljcCAtUmYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCSAgICAgICAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIKKycKKworc2V0dXBfYXNrcGFzc19oZWxwZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVtb3RlIHJlcG9zaXRvcnknICcKKwljZCAiJFJPT1RfUEFUSCIgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwby5naXQgdGVzdF9yZXBvX2Nsb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gcmVtb3RlIHJlcG9zaXRvcnkgd2l0aCBwYWNrZWQgcmVmcycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwk6ID5wYXRoMiAmJgorCWdpdCBhZGQgcGF0aDIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHBhdGgyICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgcHVzaCAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGFscmVhZHkgdXAtdG8tZGF0ZScgJworCWdpdCBwdXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gcmVtb3RlIHJlcG9zaXRvcnkgd2l0aCB1bnBhY2tlZCByZWZzJyAnCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJIHJtIHBhY2tlZC1yZWZzICYmCisJIGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRPUklHX0hFQUQgJiYKKwkgZ2l0IC0tYmFyZSB1cGRhdGUtc2VydmVyLWluZm8pICYmCisJZ2l0IHB1c2ggJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgJiYKKwkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1wdXNoIGZldGNoZXMgdW5wYWNrZWQgb2JqZWN0cycgJworCWNwIC1SICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0IFwKKwkJIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwb191bnBhY2tlZC5naXQgJiYKKworCWdpdCBjbG9uZSAkSFRUUERfVVJML2R1bWIvdGVzdF9yZXBvX3VucGFja2VkLmdpdCBcCisJCSIkUk9PVF9QQVRIIi9mZXRjaF91bnBhY2tlZCAmJgorCisJIyBCeSByZXNldCwgd2UgZm9yY2UgZ2l0IHRvIHJldHJpZXZlIHRoZSBvYmplY3QKKwkoY2QgIiRST09UX1BBVEgiL2ZldGNoX3VucGFja2VkICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkgZ2l0IHJlbW90ZSBybSBvcmlnaW4gJiYKKwkgZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9MCAtLWFsbCAmJgorCSBnaXQgcHJ1bmUgJiYKKwkgZ2l0IHB1c2ggLWYgLXYgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb191bnBhY2tlZC5naXQgbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLXB1c2ggZmV0Y2hlcyBwYWNrZWQgb2JqZWN0cycgJworCWNwIC1SICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0IFwKKwkJIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwb19wYWNrZWQuZ2l0ICYmCisKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb19wYWNrZWQuZ2l0IFwKKwkJIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZV9wYWNrZWQgJiYKKworCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvX3BhY2tlZC5naXQgJiYKKwkgZ2l0IC0tYmFyZSByZXBhY2sgJiYKKwkgZ2l0IC0tYmFyZSBwcnVuZS1wYWNrZWQpICYmCisKKwkjIEJ5IHJlc2V0LCB3ZSBmb3JjZSBnaXQgdG8gcmV0cmlldmUgdGhlIHBhY2tlZCBvYmplY3QKKwkoY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZV9wYWNrZWQgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCSBnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4gJiYKKwkgZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9MCAtLWFsbCAmJgorCSBnaXQgcHJ1bmUgJiYKKwkgZ2l0IHB1c2ggLWYgLXYgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb19wYWNrZWQuZ2l0IG1hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFuZCBkZWxldGUgcmVtb3RlIGJyYW5jaCcgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGV2ICYmCisJOiA+cGF0aDMgJiYKKwlnaXQgYWRkIHBhdGgzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBkZXYgJiYKKwlnaXQgcHVzaCBvcmlnaW4gZGV2ICYmCisJZ2l0IHB1c2ggb3JpZ2luIDpkZXYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9kZXYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTUtDT0wgc2VuZHMgZGlyZWN0b3J5IG5hbWVzIHdpdGggdHJhaWxpbmcgc2xhc2hlcycgJworCisJISBncmVwICJcIk1LQ09MLipbXi9dIEhUVFAvW14gXSpcIiIgPCAiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZworCisnCisKK3gxPSJbMC05YS1mXSIKK3gyPSIkeDEkeDEiCit4dHJ1bmM9JChlY2hvICRPSURfUkVHRVggfCBzZWQgLWUgInMvXFswLTlhLWZcXVxbMC05YS1mXF0vLyIpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BVVCBhbmQgTU9WRSBzZW5kcyBvYmplY3QgdG8gVVJMcyB3aXRoIFNIQS0xIGhhc2ggc3VmZml4JyAnCisJc2VkIFwKKwkJLWUgInMvUFVUIC9PUCAvIiBcCisJCS1lICJzL01PVkUgL09QIC8iIFwKKwkgICAgLWUgInN8L29iamVjdHMvJHgyLyR7eHRydW5jfV8kT0lEX1JFR0VYfFdBTlRFRF9QQVRIX1JFUVVFU1R8IiBcCisJCSIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nIHwKKwlncmVwIC1lICJcIk9QIC4qV0FOVEVEX1BBVEhfUkVRVUVTVCBIVFRQL1suMC05XSpcIiAyMFswLTldICIKKworJworCit0ZXN0X2h0dHBfcHVzaF9ub25mZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSBtYXN0ZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeSAodXNlciBpbiBVUkwpJyAnCisJdGVzdF9jb21taXQgcHctdXNlciAmJgorCXNldF9hc2twYXNzIHVzZXJAaG9zdCBwYXNzQGhvc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTF9VU0VSL2F1dGgvZHVtYi90ZXN0X3JlcG8uZ2l0IiBIRUFEICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYi90ZXN0X3JlcG8uZ2l0IiBcCisJCXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3VzZXIgd2FzIHByb21wdGVkIG9ubHkgb25jZSBmb3IgcGFzc3dvcmQnICcKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdwdXNoIHRvIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5IChubyB1c2VyIGluIFVSTCknICcKKwl0ZXN0X2NvbW1pdCBwdy1ub3VzZXIgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3Rlc3RfcmVwby5naXQiIEhFQUQgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIgXAorCQlyZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoIGIvdC90NTU0MS1odHRwLXB1c2gtc21hcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNiZThjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NDEtaHR0cC1wdXNoLXNtYXJ0LnNoCkBAIC0wLDAgKzEsNDcxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENsZW1lbnMgQnVjaGFjaGVyIDxkcml6emRAYW9uLmF0PgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHNtYXJ0IHB1c2hpbmcgb3ZlciBodHRwIHZpYSBodHRwLWJhY2tlbmQnCisuIC4vdGVzdC1saWIuc2gKKworUk9PVF9QQVRIPSIkUFdEIgorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbW90ZSByZXBvc2l0b3J5JyAnCisJY2QgIiRST09UX1BBVEgiICYmCisJbWtkaXIgdGVzdF9yZXBvICYmCisJY2QgdGVzdF9yZXBvICYmCisJZ2l0IGluaXQgJiYKKwk6ID5wYXRoMSAmJgorCWdpdCBhZGQgcGF0aDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwljZCAtICYmCisJZ2l0IGNsb25lIC0tYmFyZSB0ZXN0X3JlcG8gdGVzdF9yZXBvLmdpdCAmJgorCWNkIHRlc3RfcmVwby5naXQgJiYKKwlnaXQgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIHRydWUgJiYKKwlPUklHX0hFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2QgLSAmJgorCW12IHRlc3RfcmVwby5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiCisnCisKK3NldHVwX2Fza3Bhc3NfaGVscGVyCisKK2NhdCA+ZXhwIDw8RU9GCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBlbXB0eSBwYXRoIGNvbXBvbmVudHMnICcKKwkjIENsZWFyIHRoZSBsb2csIHNvIHRoYXQgaXQgZG9lcyBub3QgYWZmZWN0IHRoZSAidXNlZCByZWNlaXZlLXBhY2sKKwkjIHNlcnZpY2UiIHRlc3Qgd2hpY2ggcmVhZHMgdGhlIGxvZyB0b28uCisJdGVzdF93aGVuX2ZpbmlzaGVkICI+XCJcJEhUVFBEX1JPT1RfUEFUSFwiL2FjY2Vzcy5sb2ciICYmCisKKwkjIEluIHRoZSBVUkwsIGFkZCBhIHRyYWlsaW5nIHNsYXNoLCBhbmQgc2VlIGlmIGdpdCBhcHBlbmRzIHlldCBhbm90aGVyCisJIyBzbGFzaC4KKwljZCAiJFJPT1RfUEFUSCIgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC90ZXN0X3JlcG8uZ2l0LyB0ZXN0X3JlcG9fY2xvbmUgJiYKKworCSMgTkVFRFNXT1JLOiBJZiB0aGUgb3ZlcnNwZWNpZmljYXRpb24gb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBpcyByZWR1Y2VkLCB3ZQorCSMgbWlnaHQgYmUgYWJsZSB0byBydW4gdGhpcyB0ZXN0IGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucy4KKwlpZiB0ZXN0ICIkR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTiIgPSAwCisJdGhlbgorCQljaGVja19hY2Nlc3NfbG9nIGV4cAorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlbW90ZSByZXBvc2l0b3J5JyAnCisJcm0gLXJmIHRlc3RfcmVwb19jbG9uZSAmJgorCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3Rlc3RfcmVwby5naXQgdGVzdF9yZXBvX2Nsb25lICYmCisJKAorCQljZCB0ZXN0X3JlcG9fY2xvbmUgJiYgZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gcmVtb3RlIHJlcG9zaXRvcnkgKHN0YW5kYXJkKScgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwk6ID5wYXRoMiAmJgorCWdpdCBhZGQgcGF0aDIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHBhdGgyICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlHSVRfVFJBQ0VfQ1VSTD10cnVlIGdpdCBwdXNoIC12IC12IDI+ZXJyICYmCisJISBncmVwICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgZXJyICYmCisJZ3JlcCAiUE9TVCBnaXQtcmVjZWl2ZS1wYWNrIChbMC05XSogYnl0ZXMpIiBlcnIgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgJiYKKwkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBhbHJlYWR5IHVwLXRvLWRhdGUnICcKKwlnaXQgcHVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5kIGRlbGV0ZSByZW1vdGUgYnJhbmNoJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBkZXYgJiYKKwk6ID5wYXRoMyAmJgorCWdpdCBhZGQgcGF0aDMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGRldiAmJgorCWdpdCBwdXNoIG9yaWdpbiBkZXYgJiYKKwlnaXQgcHVzaCBvcmlnaW4gOmRldiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL2RldgorJworCitjYXQgPiIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQvaG9va3MvdXBkYXRlIiA8PEVPRgorIyEvYmluL3NoCitleGl0IDEKK0VPRgorY2htb2QgYSt4ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQvaG9va3MvdXBkYXRlIgorCitjYXQgPmV4cCA8PEVPRgorcmVtb3RlOiBlcnJvcjogaG9vayBkZWNsaW5lZCB0byB1cGRhdGUgcmVmcy9oZWFkcy9kZXYyCitUbyBodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC9zbWFydC90ZXN0X3JlcG8uZ2l0CisgISBbcmVtb3RlIHJlamVjdGVkXSBkZXYyIC0+IGRldjIgKGhvb2sgZGVjbGluZWQpCitlcnJvcjogZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICdodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC9zbWFydC90ZXN0X3JlcG8uZ2l0JworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdGVkIHVwZGF0ZSBwcmludHMgc3RhdHVzJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBkZXYyICYmCisJOiA+cGF0aDQgJiYKKwlnaXQgYWRkIHBhdGg0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBkZXYyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggb3JpZ2luIGRldjIgMj5hY3QgJiYKKwlzZWQgLWUgIi9ecmVtb3RlOiAvcy8gKiQvLyIgPGFjdCA+Y21wICYmCisJdGVzdF9pMThuY21wIGV4cCBjbXAKKycKK3JtIC1mICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQvaG9va3MvdXBkYXRlIgorCitjYXQgPmV4cCA8PEVPRgorR0VUICAvc21hcnQvdGVzdF9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3Rlc3RfcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlZCByZWNlaXZlLXBhY2sgc2VydmljZScgJworCSMgTkVFRFNXT1JLOiBJZiB0aGUgb3ZlcnNwZWNpZmljYXRpb24gb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBpcyByZWR1Y2VkLCB3ZQorCSMgbWlnaHQgYmUgYWJsZSB0byBydW4gdGhpcyB0ZXN0IGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucy4KKwlpZiB0ZXN0ICIkR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTiIgPSAwCisJdGhlbgorCQljaGVja19hY2Nlc3NfbG9nIGV4cAorCWZpCisnCisKK3Rlc3RfaHR0cF9wdXNoX25vbmZmICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0IFwKKwkiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lIG1hc3RlciAJCXN1Y2Nlc3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyBmb3Igbm9uLWZhc3QtZm9yd2FyZCByZWZzIHVubWF0Y2hlZCBieSByZW1vdGUgaGVscGVyJyAnCisJIyBjcmVhdGUgYSBkaXNzaW1pbGFybHktbmFtZWQgcmVtb3RlIHJlZiBzbyB0aGF0IGdpdCBpcyB1bmFibGUgdG8gbWF0Y2ggdGhlCisJIyB0d28gcmVmcyAodml6LiBsb2NhbCwgcmVtb3RlKSB1bmxlc3MgYW4gZXhwbGljaXQgcmVmc3BlYyBpcyBwcm92aWRlZC4KKwlnaXQgcHVzaCBvcmlnaW4gbWFzdGVyOnJldHNhbSAmJgorCisJZWNobyAiY2hhbmdlIGNoYW5nZWQiID4gcGF0aDIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHBhdGgyIC0tYW1lbmQgJiYKKworCSMgcHVzaCBtYXN0ZXIgdG9vOyB0aGlzIGVuc3VyZXMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lICciJ3B1c2gnIicgY29tbWFuZCB0bworCSMgdGhlIHJlbW90ZSBoZWxwZXIgYW5kIHRyaWdnZXJzIGludGVyYWN0aW9uIHdpdGggdGhlIGhlbHBlci4KKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtdiBvcmlnaW4gK21hc3RlciBtYXN0ZXI6cmV0c2FtID5vdXRwdXQgMj4mMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyBmb3Igbm9uLWZhc3QtZm9yd2FyZCByZWZzIHVubWF0Y2hlZCBieSByZW1vdGUgaGVscGVyOiByZW1vdGUgb3V0cHV0JyAnCisJZ3JlcCAiXiArIFthLWYwLTldKlwuXC5cLlthLWYwLTldKiAqbWFzdGVyIC0+IG1hc3RlciAoZm9yY2VkIHVwZGF0ZSkkIiBvdXRwdXQgJiYKKwlncmVwICJeICEgXFtyZWplY3RlZFxdICptYXN0ZXIgLT4gcmV0c2FtIChub24tZmFzdC1mb3J3YXJkKSQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZhaWxzIGZvciBub24tZmFzdC1mb3J3YXJkIHJlZnMgdW5tYXRjaGVkIGJ5IHJlbW90ZSBoZWxwZXI6IG91ciBvdXRwdXQnICcKKwl0ZXN0X2kxOG5ncmVwICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSIgXAorCQlvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAoY2h1bmtlZCknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgY29tbWl0IHBhdGgzICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0X2NvbmZpZyBodHRwLnBvc3RidWZmZXIgNCAmJgorCWdpdCBwdXNoIC12IC12IG9yaWdpbiAkQlJBTkNIIDI+ZXJyICYmCisJZ3JlcCAiUE9TVCBnaXQtcmVjZWl2ZS1wYWNrIChjaHVua2VkKSIgZXJyICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJIHRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1hdG9taWMgYWxzbyBwcmV2ZW50cyBicmFuY2ggY3JlYXRpb24sIHJlcG9ydHMgY29sbGF0ZXJhbCcgJworCSMgU2V0dXAgdXBzdHJlYW0gcmVwbyAtIGVtcHR5IGZvciBub3cKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXRvbWljLWJyYW5jaGVzLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJdGVzdF9jb25maWcgLUMgIiRkIiBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwl1cD0iJEhUVFBEX1VSTCIvc21hcnQvYXRvbWljLWJyYW5jaGVzLmdpdCAmJgorCisJIyBUZWxsICIkdXAiIGFib3V0IHRocmVlIGJyYW5jaGVzIGZvciBub3cKKwl0ZXN0X2NvbW1pdCBhdG9taWMxICYmCisJdGVzdF9jb21taXQgYXRvbWljMiAmJgorCWdpdCBicmFuY2ggY29sbGF0ZXJhbCAmJgorCWdpdCBicmFuY2ggb3RoZXIgJiYKKwlnaXQgcHVzaCAiJHVwIiBtYXN0ZXIgY29sbGF0ZXJhbCBvdGhlciAmJgorCisJIyBjb2xsYXRlcmFsIGlzIGEgdmFsaWQgcHVzaCwgYnV0IHNob3VsZCBiZSBmYWlsZWQgYnkgYXRvbWljIHB1c2gKKwlnaXQgY2hlY2tvdXQgY29sbGF0ZXJhbCAmJgorCXRlc3RfY29tbWl0IGNvbGxhdGVyYWwxICYmCisKKwkjIE1ha2UgbWFzdGVyIGluY29tcGF0aWJsZSB3aXRoIHVwc3RyZWFtIHRvIHByb3Zva2UgYXRvbWljCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKworCSMgQWRkIGEgbmV3IGJyYW5jaCB3aGljaCBzaG91bGQgYmUgZmFpbGVkIGJ5IGF0b21pYyBwdXNoLiBUaGlzIGlzIGEKKwkjIHJlZ3Jlc3Npb24gY2FzZS4KKwlnaXQgYnJhbmNoIGF0b21pYyAmJgorCisJIyAtLWF0b21pYyBzaG91bGQgY2F1c2UgZW50aXJlIHB1c2ggdG8gYmUgcmVqZWN0ZWQKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWF0b21pYyAiJHVwIiBtYXN0ZXIgYXRvbWljIGNvbGxhdGVyYWwgMj5vdXRwdXQgJiYKKworCSMgdGhlIG5ldyBicmFuY2ggc2hvdWxkIG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB1cHN0cmVhbQorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyAiJGQiIHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYXRvbWljICYmCisKKwkjIHVwc3RyZWFtIHNob3VsZCBzdGlsbCByZWZsZWN0IGF0b21pYzIsIHRoZSBsYXN0IHRoaW5nIHdlIHB1c2hlZAorCSMgc3VjY2Vzc2Z1bGx5CisJZ2l0IHJldi1wYXJzZSBhdG9taWMyID5leHBlY3RlZCAmJgorCSMgb24gbWFzdGVyLi4uCisJZ2l0IC1DICIkZCIgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkjIC4uLmFuZCBjb2xsYXRlcmFsLgorCWdpdCAtQyAiJGQiIHJldi1wYXJzZSByZWZzL2hlYWRzL2NvbGxhdGVyYWwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJIyB0aGUgZmFpbGVkIHJlZnMgc2hvdWxkIGJlIGluZGljYXRlZCB0byB0aGUgdXNlcgorCWdyZXAgIl4gISAuKnJlamVjdGVkLiogbWFzdGVyIC0+IG1hc3RlciIgb3V0cHV0ICYmCisKKwkjIHRoZSBjb2xsYXRlcmFsIGZhaWx1cmUgcmVmcyBzaG91bGQgYmUgaW5kaWNhdGVkIHRvIHRoZSB1c2VyCisJZ3JlcCAiXiAhIC4qcmVqZWN0ZWQuKiBhdG9taWMgLT4gYXRvbWljIC4qYXRvbWljIHB1c2ggZmFpbGVkIiBvdXRwdXQgJiYKKwlncmVwICJeICEgLipyZWplY3RlZC4qIGNvbGxhdGVyYWwgLT4gY29sbGF0ZXJhbCAuKmF0b21pYyBwdXNoIGZhaWxlZCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1hdG9taWMgZmFpbHMgb24gc2VydmVyLXNpZGUgZXJyb3JzJyAnCisJIyBVc2UgcHJldmlvdXNseSBzZXQgdXAgcmVwb3NpdG9yeQorCWQ9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdG9taWMtYnJhbmNoZXMuZ2l0ICYmCisJdGVzdF9jb25maWcgLUMgIiRkIiBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwl1cD0iJEhUVFBEX1VSTCIvc21hcnQvYXRvbWljLWJyYW5jaGVzLmdpdCAmJgorCisJIyBicmVhayByZWYgdXBkYXRlcyBmb3Igb3RoZXIgb24gdGhlIHJlbW90ZSBzaXRlCisJbWtkaXIgIiRkL3JlZnMvaGVhZHMvb3RoZXIubG9jayIgJiYKKworCSMgYWRkIHRoZSBuZXcgY29tbWl0IHRvIG90aGVyCisJZ2l0IGJyYW5jaCAtZiBvdGhlciBjb2xsYXRlcmFsICYmCisKKwkjIC0tYXRvbWljIHNob3VsZCBjYXVzZSBlbnRpcmUgcHVzaCB0byBiZSByZWplY3RlZAorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tYXRvbWljICIkdXAiIGF0b21pYyBvdGhlciAyPm91dHB1dCAgJiYKKworCSMgdGhlIG5ldyBicmFuY2ggc2hvdWxkIG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB1cHN0cmVhbQorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyAiJGQiIHNob3ctcmVmIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYXRvbWljICYmCisKKwkjIHVwc3RyZWFtIHNob3VsZCBzdGlsbCByZWZsZWN0IGF0b21pYzIsIHRoZSBsYXN0IHRoaW5nIHdlIHB1c2hlZAorCSMgc3VjY2Vzc2Z1bGx5CisJZ2l0IHJldi1wYXJzZSBhdG9taWMyID5leHBlY3RlZCAmJgorCSMgLi4udG8gb3RoZXIuCisJZ2l0IC1DICIkZCIgcmV2LXBhcnNlIHJlZnMvaGVhZHMvb3RoZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJIyB0aGUgbmV3IGJyYW5jaCBzaG91bGQgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHVwc3RyZWFtCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DICIkZCIgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9oZWFkcy9hdG9taWMgJiYKKworCSMgdGhlIGZhaWxlZCByZWZzIHNob3VsZCBiZSBpbmRpY2F0ZWQgdG8gdGhlIHVzZXIKKwlncmVwICJeICEgLipyZWplY3RlZC4qIG90aGVyIC0+IG90aGVyIC4qYXRvbWljIHRyYW5zYWN0aW9uIGZhaWxlZCIgb3V0cHV0ICYmCisKKwkjIHRoZSBjb2xsYXRlcmFsIGZhaWx1cmUgcmVmcyBzaG91bGQgYmUgaW5kaWNhdGVkIHRvIHRoZSB1c2VyCisJZ3JlcCAiXiAhIC4qcmVqZWN0ZWQuKiBhdG9taWMgLT4gYXRvbWljIC4qYXRvbWljIHRyYW5zYWN0aW9uIGZhaWxlZCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1hbGwgY2FuIHB1c2ggdG8gZW1wdHkgcmVwbycgJworCWQ9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9lbXB0eS1hbGwuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlICIkZCIgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWdpdCBwdXNoIC0tYWxsICIkSFRUUERfVVJMIi9zbWFydC9lbXB0eS1hbGwuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1taXJyb3IgY2FuIHB1c2ggdG8gZW1wdHkgcmVwbycgJworCWQ9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9lbXB0eS1taXJyb3IuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlICIkZCIgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWdpdCBwdXNoIC0tbWlycm9yICIkSFRUUERfVVJMIi9zbWFydC9lbXB0eS1taXJyb3IuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1hbGwgdG8gcmVwbyB3aXRoIGFsdGVybmF0ZXMnICcKKwlzPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCAmJgorCWQ9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hbHRlcm5hdGVzLWFsbC5naXQgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tc2hhcmVkICIkcyIgIiRkIiAmJgorCWdpdCAtLWdpdC1kaXI9IiRkIiBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIHJlcGFjayAtYWRsICYmCisJZ2l0IHB1c2ggLS1hbGwgIiRIVFRQRF9VUkwiL3NtYXJ0L2FsdGVybmF0ZXMtYWxsLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tbWlycm9yIHRvIHJlcG8gd2l0aCBhbHRlcm5hdGVzJyAnCisJcz0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQgJiYKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYWx0ZXJuYXRlcy1taXJyb3IuZ2l0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLXNoYXJlZCAiJHMiICIkZCIgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWdpdCAtLWdpdC1kaXI9IiRkIiByZXBhY2sgLWFkbCAmJgorCWdpdCBwdXNoIC0tbWlycm9yICIkSFRUUERfVVJMIi9zbWFydC9hbHRlcm5hdGVzLW1pcnJvci5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggc2hvd3MgcHJvZ3Jlc3Mgd2hlbiBzdGRlcnIgaXMgYSB0dHknICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgbm9pc3kgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIl5Xcml0aW5nIG9iamVjdHMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtLXF1aWV0IHNpbGVuY2VzIHN0YXR1cyBhbmQgcHJvZ3Jlc3MnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgcXVpZXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoIC0tcXVpZXQgPm91dHB1dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtLW5vLXByb2dyZXNzIHNpbGVuY2VzIHByb2dyZXNzIGJ1dCBub3Qgc3RhdHVzJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IG5vLXByb2dyZXNzICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCAtLW5vLXByb2dyZXNzID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIl5UbyBodHRwIiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIl5Xcml0aW5nIG9iamVjdHMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tcHJvZ3Jlc3Mgc2hvd3MgcHJvZ3Jlc3MgdG8gbm9uLXR0eScgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwl0ZXN0X2NvbW1pdCBwcm9ncmVzcyAmJgorCWdpdCBwdXNoIC0tcHJvZ3Jlc3MgPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiXlRvIGh0dHAiIG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl5Xcml0aW5nIG9iamVjdHMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIHB1c2ggZ2l2ZXMgc2FuZSBkZWZhdWx0cyB0byByZWZsb2cnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgcmVmbG9nLXRlc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTCIvc21hcnQvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLWcgLTEgLS1mb3JtYXQ9IiVnbiA8JWdlPiIgPmFjdHVhbCAmJgorCWVjaG8gImFub255bW91cyA8YW5vbnltb3VzQGh0dHAuMTI3LjAuMC4xPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCBwdXNoIHJlc3BlY3RzIEdJVF9DT01NSVRURVJfKiBpbiByZWZsb2cnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgY3VzdG9tLXJlZmxvZy10ZXN0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwiL3NtYXJ0X2N1c3RvbV9lbnYvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLWcgLTEgLS1mb3JtYXQ9IiVnbiA8JWdlPiIgPmFjdHVhbCAmJgorCWVjaG8gIkN1c3RvbSBVc2VyIDxjdXN0b21AZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG92ZXIgc21hcnQgaHR0cCB3aXRoIGF1dGgnICcKKwljZCAiJFJPT1RfUEFUSC90ZXN0X3JlcG9fY2xvbmUiICYmCisJZWNobyBwdXNoLWF1dGgtdGVzdCA+ZXhwZWN0ICYmCisJdGVzdF9jb21taXQgcHVzaC1hdXRoLXRlc3QgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwiL2F1dGgvc21hcnQvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGF1dGgtb25seS1mb3ItcHVzaCByZXBvJyAnCisJY2QgIiRST09UX1BBVEgvdGVzdF9yZXBvX2Nsb25lIiAmJgorCWVjaG8gcHVzaC1oYWxmLWF1dGggPmV4cGVjdCAmJgorCXRlc3RfY29tbWl0IHB1c2gtaGFsZi1hdXRoICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBwdXNoICIkSFRUUERfVVJMIi9hdXRoLXB1c2gvc21hcnQvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVwbyB3aXRob3V0IGh0dHAucmVjZWl2ZXBhY2sgc2V0JyAnCisJY2QgIiRST09UX1BBVEgiICYmCisJZ2l0IGluaXQgaGFsZi1hdXRoICYmCisJKAorCQljZCBoYWxmLWF1dGggJiYKKwkJdGVzdF9jb21taXQgb25lCisJKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgaGFsZi1hdXRoICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2hhbGYtYXV0aC5naXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHZpYSBoYWxmLWF1dGgtY29tcGxldGUgZG9lcyBub3QgbmVlZCBwYXNzd29yZCcgJworCWNkICIkUk9PVF9QQVRIIiAmJgorCXNldF9hc2twYXNzIHdyb25nICYmCisJZ2l0IGNsb25lICIkSFRUUERfVVJMIi9oYWxmLWF1dGgtY29tcGxldGUvc21hcnQvaGFsZi1hdXRoLmdpdCBcCisJCWhhbGYtYXV0aC1jbG9uZSAmJgorCWV4cGVjdF9hc2twYXNzIG5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBpbnRvIGhhbGYtYXV0aC1jb21wbGV0ZSByZXF1aXJlcyBwYXNzd29yZCcgJworCWNkICIkUk9PVF9QQVRIL2hhbGYtYXV0aC1jbG9uZSIgJiYKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBwdXNoICIkSFRUUERfVVJML2hhbGYtYXV0aC1jb21wbGV0ZS9zbWFydC9oYWxmLWF1dGguZ2l0IiAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaGFsZi1hdXRoLmdpdCIgXAorCQlsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENNRExJTkVfTElNSVQgJ3B1c2ggMjAwMCB0YWdzIG92ZXIgaHR0cCcgJworCXNoYTE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9zZXEgMjAwMCB8CisJICBzb3J0IHwKKwkgIHNlZCAic3wuKnwkc2hhMSByZWZzL3RhZ3MvcmVhbGx5LWxvbmctdGFnLW5hbWUtJnwiIFwKKwkgID4uZ2l0L3BhY2tlZC1yZWZzICYmCisJcnVuX3dpdGhfbGltaXRlZF9jbWRsaW5lIGdpdCBwdXNoIC0tbWlycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdXNoIHdpdGggcG9zdC1yZWNlaXZlIHRvIGluc3BlY3QgY2VydGlmaWNhdGUnICcKKwkoCisJCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJCW1rZGlyIC1wIGhvb2tzICYmCisJCXdyaXRlX3NjcmlwdCBob29rcy9wb3N0LXJlY2VpdmUgPDwtXEVPRiAmJgorCQkjIGRpc2NhcmQgdGhlIHVwZGF0ZSBsaXN0CisJCWNhdCA+L2Rldi9udWxsCisJCSMgcmVjb3JkIHRoZSBwdXNoIGNlcnRpZmljYXRlCisJCWlmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IgorCQl0aGVuCisJCQlnaXQgY2F0LWZpbGUgYmxvYiAkR0lUX1BVU0hfQ0VSVCA+Li4vcHVzaC1jZXJ0CisJCWZpICYmCisJCWNhdCA+Li4vcHVzaC1jZXJ0LXN0YXR1cyA8PEVfT19GCisJCVNJR05FUj0ke0dJVF9QVVNIX0NFUlRfU0lHTkVSLW5vYm9keX0KKwkJS0VZPSR7R0lUX1BVU0hfQ0VSVF9LRVktbm9rZXl9CisJCVNUQVRVUz0ke0dJVF9QVVNIX0NFUlRfU1RBVFVTLW5vc3RhdHVzfQorCQlOT05DRV9TVEFUVVM9JHtHSVRfUFVTSF9DRVJUX05PTkNFX1NUQVRVUy1ub25vbmNlc3RhdHVzfQorCQlOT05DRT0ke0dJVF9QVVNIX0NFUlRfTk9OQ0Utbm9ub25jZX0KKwkJRV9PX0YKKwkJRU9GCisKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmNlcnRub25jZXNlZWQgc2Vrcml0ICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzbG9wIDMwCisJKSAmJgorCWNkICIkUk9PVF9QQVRIL3Rlc3RfcmVwb19jbG9uZSIgJiYKKwl0ZXN0X2NvbW1pdCBjZXJ0LXRlc3QgJiYKKwlnaXQgcHVzaCAtLXNpZ25lZCAiJEhUVFBEX1VSTC9zbWFydC90ZXN0X3JlcG8uZ2l0IiAmJgorCSgKKwkJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiICYmCisJCWNhdCA8PC1cRU9GICYmCisJCVNJR05FUj1DIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJCUtFWT0xM0I2RjUxRUNEREU0MzBECisJCVNUQVRVUz1HCisJCU5PTkNFX1NUQVRVUz1PSworCQlFT0YKKwkJc2VkIC1uIC1lICJzL15ub25jZSAvTk9OQ0U9L3AiIC1lICIvXiQvcSIgcHVzaC1jZXJ0CisJKSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3B1c2gtY2VydC1zdGF0dXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggc3RhdHVzIG91dHB1dCBzY3J1YnMgcGFzc3dvcmQnICcKKwljZCAiJFJPT1RfUEFUSC90ZXN0X3JlcG9fY2xvbmUiICYmCisJZ2l0IHB1c2ggLS1wb3JjZWxhaW4gXAorCQkiJEhUVFBEX1VSTF9VU0VSX1BBU1Mvc21hcnQvdGVzdF9yZXBvLmdpdCIgXAorCQkrSEVBRDpzY3J1YiA+c3RhdHVzICYmCisJIyBzaG91bGQgaGF2ZSBiZWVuIHNjcnViYmVkIGRvd24gdG8gdmFuaWxsYSBVUkwKKwlncmVwICJeVG8gJEhUVFBEX1VSTC9zbWFydC90ZXN0X3JlcG8uZ2l0IiBzdGF0dXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3JpemUgZXJyb3JzL2hpbnRzJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb2xvci50cmFuc3BvcnQ9YWx3YXlzIC1jIGNvbG9yLmFkdmljZT1hbHdheXMgXAorCQktYyBjb2xvci5wdXNoPWFsd2F5cyBcCisJCXB1c2ggb3JpZ2luIG9yaWdpbi9tYXN0ZXJeOm1hc3RlciAyPmFjdCAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3QgPmRlY29kZWQgJiYKKwl0ZXN0X2kxOG5ncmVwICI8UkVEPi4qcmVqZWN0ZWQuKjxSRVNFVD4iIGRlY29kZWQgJiYKKwl0ZXN0X2kxOG5ncmVwICI8UkVEPmVycm9yOiBmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMiIGRlY29kZWQgJiYKKwl0ZXN0X2kxOG5ncmVwICI8WUVMTE9XPmhpbnQ6ICIgZGVjb2RlZCAmJgorCXRlc3RfaTE4bmdyZXAgISAiXmhpbnQ6ICIgZGVjb2RlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDItcHVzaC1odHRwLXNoYWxsb3cuc2ggYi90L3Q1NTQyLXB1c2gtaHR0cC1zaGFsbG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRkYzFkYjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQyLXB1c2gtaHR0cC1zaGFsbG93LnNoCkBAIC0wLDAgKzEsOTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdXNoIGZyb20vdG8gYSBzaGFsbG93IGNsb25lIG92ZXIgaHR0cCcKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKworY29tbWl0KCkgeworCWVjaG8gIiQxIiA+dHJhY2tlZCAmJgorCWdpdCBhZGQgdHJhY2tlZCAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb25maWcgLS1nbG9iYWwgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCWNvbW1pdCAxICYmCisJY29tbWl0IDIgJiYKKwljb21taXQgMyAmJgorCWNvbW1pdCA0ICYmCisJZ2l0IGNsb25lIC4gZnVsbCAmJgorCSgKKwlnaXQgaW5pdCBmdWxsLWFiYyAmJgorCWNkIGZ1bGwtYWJjICYmCisJY29tbWl0IGEgJiYKKwljb21taXQgYiAmJgorCWNvbW1pdCBjCisJKSAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tZGVwdGg9MiAuZ2l0IHNoYWxsb3cgJiYKKwlnaXQgLS1naXQtZGlyPXNoYWxsb3cvLmdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis0CiszCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1kZXB0aD0yIGZ1bGwtYWJjLy5naXQgc2hhbGxvdzIgJiYKKwlnaXQgLS1naXQtZGlyPXNoYWxsb3cyLy5naXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorYworYgorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHNoYWxsb3cgcmVwbyB2aWEgaHR0cCcgJworCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1sb2NhbCBzaGFsbG93ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSgKKwljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZQorCSkgJiYKKwkoCisJY2QgZnVsbCAmJgorCWNvbW1pdCA5ICYmCisJZ2l0IHB1c2ggJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCArbWFzdGVyOnJlZnMvcmVtb3Rlcy90b3AvbWFzdGVyCisJKSAmJgorCSgKKwljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgdG9wL21hc3RlciA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzkKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZnJvbSBzaGFsbG93IHJlcG8gdmlhIGh0dHAnICcKKwltdiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgc2hhbGxvdy11cHN0cmVhbS5naXQgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tbm8tbG9jYWwgZnVsbCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkoCisJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUKKwkpICYmCisJY29tbWl0IDEwICYmCisJZ2l0IHB1c2ggJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCArbWFzdGVyOnJlZnMvcmVtb3Rlcy90b3AvbWFzdGVyICYmCisJKAorCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBmc2NrICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyB0b3AvbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorMTAKKzQKKzMKKzIKKzEKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0My1hdG9taWMtcHVzaC5zaCBiL3QvdDU1NDMtYXRvbWljLXB1c2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzA3OWJjZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NDMtYXRvbWljLXB1c2guc2gKQEAgLTAsMCArMSwxOTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdXNoaW5nIHRvIGEgcmVwb3NpdG9yeSB1c2luZyB0aGUgYXRvbWljIHB1c2ggb3B0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworbWtfcmVwb19wYWlyICgpIHsKKwlybSAtcmYgd29ya2JlbmNoIHVwc3RyZWFtICYmCisJdGVzdF9jcmVhdGVfcmVwbyB1cHN0cmVhbSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gd29ya2JlbmNoICYmCisJKAorCQljZCB1cHN0cmVhbSAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybgorCSkgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQlnaXQgcmVtb3RlIGFkZCB1cCAuLi91cHN0cmVhbQorCSkKK30KKworIyBDb21wYXJlIHRoZSByZWYgKCQxKSBpbiB1cHN0cmVhbSB3aXRoIGEgcmVmIHZhbHVlIGZyb20gd29ya2JlbmNoICgkMikKKyMgaS5lLiB0ZXN0X3JlZnMgc2Vjb25kIEhFQURAezJ9Cit0ZXN0X3JlZnMgKCkgeworCXRlc3QgJCMgPSAyICYmCisJZ2l0IC1DIHVwc3RyZWFtIHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiID5leHBlY3QgJiYKKwlnaXQgLUMgd29ya2JlbmNoIHJldi1wYXJzZSAtLXZlcmlmeSAiJDIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIHdvcmtzIGZvciBhIHNpbmdsZSBicmFuY2gnICcKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBwdXNoIC0tYXRvbWljIHVwIG1hc3RlcgorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCB3b3JrcyBmb3IgdHdvIGJyYW5jaGVzJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBicmFuY2ggc2Vjb25kICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCBwdXNoIC0tYXRvbWljIHVwIG1hc3RlciBzZWNvbmQKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBtYXN0ZXIgJiYKKwl0ZXN0X3JlZnMgc2Vjb25kIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCB3b3JrcyBpbiBjb21iaW5hdGlvbiB3aXRoIC0tbWlycm9yJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBjaGVja291dCAtYiBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBwdXNoIC0tYXRvbWljIC0tbWlycm9yIHVwCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJdGVzdF9yZWZzIHNlY29uZCBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXRvbWljIHB1c2ggd29ya3MgaW4gY29tYmluYXRpb24gd2l0aCAtLWZvcmNlJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBicmFuY2ggc2Vjb25kIG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCB0d29fYSAmJgorCQlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJCXRlc3RfY29tbWl0IHR3b19iICYmCisJCXRlc3RfY29tbWl0IHRocmVlX2IgJiYKKwkJdGVzdF9jb21taXQgZm91ciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQkjIFRoZSBhY3R1YWwgdGVzdCBpcyBiZWxvdworCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHRocmVlX2EgJiYKKwkJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWdpdCBwdXNoIC0tZm9yY2UgLS1hdG9taWMgdXAgbWFzdGVyIHNlY29uZAorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIG1hc3RlciAmJgorCXRlc3RfcmVmcyBzZWNvbmQgc2Vjb25kCisnCisKKyMgc2V0IHVwIHR3byBicmFuY2hlcyB3aGVyZSBtYXN0ZXIgY2FuIGJlIHB1c2hlZCBidXQgc2Vjb25kIGNhbiBub3QKKyMgKG5vbi1mYXN0LWZvcndhcmQpLiBTaW5jZSBzZWNvbmQgY2FuIG5vdCBiZSBwdXNoZWQgdGhlIHdob2xlIG9wZXJhdGlvbgorIyB3aWxsIGZhaWwgYW5kIGxlYXZlIG1hc3RlciB1bnRvdWNoZWQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCBmYWlscyBpZiBvbmUgYnJhbmNoIGZhaWxzJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBjaGVja291dCAtYiBzZWNvbmQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCQl0ZXN0X2NvbW1pdCBmb3VyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJCXRlc3RfY29tbWl0IGZpdmUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCBzaXggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1hdG9taWMgLS1hbGwgdXAKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBIRUFEQHs3fSAmJgorCXRlc3RfcmVmcyBzZWNvbmQgSEVBREB7NH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXRvbWljIHB1c2ggZmFpbHMgaWYgb25lIHRhZyBmYWlscyByZW1vdGVseScgJworCSMgcHJlcGFyZSB0aGUgcmVwbworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJIyBhIHRoaXJkIHBhcnR5IG1vZGlmaWVzIHRoZSBzZXJ2ZXIgc2lkZToKKwkoCisJCWNkIHVwc3RyZWFtICYmCisJCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwkJZ2l0IHRhZyB0ZXN0X3RhZyBzZWNvbmQKKwkpICYmCisJIyBzZWUgaWYgd2UgY2FuIG5vdyBwdXNoIGJvdGggYnJhbmNoZXMuCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCQlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJCXRlc3RfY29tbWl0IGZvdXIgJiYKKwkJZ2l0IHRhZyB0ZXN0X3RhZyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXRhZ3MgLS1hdG9taWMgdXAgbWFzdGVyIHNlY29uZAorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIEhFQURAezN9ICYmCisJdGVzdF9yZWZzIHNlY29uZCBIRUFEQHsxfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCBvYmV5cyB1cGRhdGUgaG9vayBwcmV2ZW50aW5nIGEgYnJhbmNoIHRvIGJlIHB1c2hlZCcgJworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJKAorCQljZCB1cHN0cmVhbSAmJgorCQlIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIgJiYKKwkJSE9PSz0iJEhPT0tESVIvdXBkYXRlIiAmJgorCQlta2RpciAtcCAiJEhPT0tESVIiICYmCisJCXdyaXRlX3NjcmlwdCAiJEhPT0siIDw8LVxFT0YKKwkJCSMgb25seSBhbGxvdyB1cGRhdGUgdG8gbWFzdGVyIGZyb20gbm93IG9uCisJCQl0ZXN0ICIkMSIgPSAicmVmcy9oZWFkcy9tYXN0ZXIiCisJCUVPRgorCSkgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgZm91ciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWF0b21pYyB1cCBtYXN0ZXIgc2Vjb25kCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgSEVBREB7M30gJiYKKwl0ZXN0X3JlZnMgc2Vjb25kIEhFQURAezF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIGlzIG5vdCBhZHZlcnRpc2VkIGlmIGNvbmZpZ3VyZWQnICcKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIHVwc3RyZWFtICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VhdG9taWMgMAorCSkgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tYXRvbWljIHVwIG1hc3RlcgorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIEhFQURAezF9CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0NC1wYWNrLW9iamVjdHMtaG9vay5zaCBiL3QvdDU1NDQtcGFjay1vYmplY3RzLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDM1N2FmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NDQtcGFjay1vYmplY3RzLWhvb2suc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY3VzdG9tIHNjcmlwdCBpbiBwbGFjZSBvZiBwYWNrLW9iamVjdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHNvbWUgaGlzdG9yeSB0byBmZXRjaCcgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZGVidWdnaW5nIGhvb2sgc2NyaXB0JyAnCisJd3JpdGVfc2NyaXB0IC5naXQvaG9vayA8PC1cRU9GCisJCWVjaG8gPiYyICJob29rIHJ1bm5pbmciCisJCWVjaG8gIiQqIiA+aG9vay5hcmdzCisJCWNhdCA+aG9vay5zdGRpbgorCQkiJEAiIDxob29rLnN0ZGluID5ob29rLnN0ZG91dAorCQljYXQgaG9vay5zdGRvdXQKKwlFT0YKKycKKworY2xlYXJfaG9va19yZXN1bHRzICgpIHsKKwlybSAtcmYgLmdpdC9ob29rLiogZHN0LmdpdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob29rIHJ1bnMgdmlhIGdsb2JhbCBjb25maWcnICcKKwljbGVhcl9ob29rX3Jlc3VsdHMgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgdXBsb2FkcGFjay5wYWNrT2JqZWN0c0hvb2sgLi9ob29rICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLiBkc3QuZ2l0IDI+c3RkZXJyICYmCisJZ3JlcCAiaG9vayBydW5uaW5nIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBvdXRwdXRzIGFyZSBzYW5lJyAnCisJIyBjaGVjayB0aGF0IHdlIHJlY29yZGVkIGEgdXNhYmxlIHBhY2sKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDwuZ2l0L2hvb2suc3Rkb3V0ICYmCisKKwkjIGNoZWNrIHRoYXQgd2UgcmVjb3JkZWQgYXJncyBhbmQgc3RkaW4uIFdlIGRvIG5vdCBjaGVjaworCSMgdGhlIGZ1bGwgYXJndW1lbnQgbGlzdCBvciB0aGUgZXhhY3QgcGFjayBjb250ZW50cywgYXMgaXQgd291bGQgbWFrZQorCSMgdGhlIHRlc3QgYnJpdHRsZS4gU28ganVzdCBzYW5pdHkgY2hlY2sgdGhhdCB3ZSBjb3VsZCByZXBsYXkKKwkjIHRoZSBwYWNraW5nIHByb2NlZHVyZS4KKwlncmVwICJeZ2l0IiAuZ2l0L2hvb2suYXJncyAmJgorCSQoY2F0IC5naXQvaG9vay5hcmdzKSA8LmdpdC9ob29rLnN0ZGluID5yZXBsYXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBydW5zIGZyb20gLWMgY29uZmlnJyAnCisJY2xlYXJfaG9va19yZXN1bHRzICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgXAorCSAgLXUgImdpdCAtYyB1cGxvYWRwYWNrLnBhY2tPYmplY3RzSG9vaz0uL2hvb2sgdXBsb2FkLXBhY2siIFwKKwkgIC4gZHN0LmdpdCAyPnN0ZGVyciAmJgorCWdyZXAgImhvb2sgcnVubmluZyIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2sgZG9lcyBub3QgcnVuIGZyb20gcmVwbyBjb25maWcnICcKKwljbGVhcl9ob29rX3Jlc3VsdHMgJiYKKwl0ZXN0X2NvbmZpZyB1cGxvYWRwYWNrLnBhY2tPYmplY3RzSG9vayAiLi9ob29rIiAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC4gZHN0LmdpdCAyPnN0ZGVyciAmJgorCSEgZ3JlcCAiaG9vayBydW5uaW5nIiBzdGRlcnIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2hvb2suYXJncyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaG9vay5zdGRpbiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaG9vay5zdGRvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaCBiL3QvdDU1NDUtcHVzaC1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4ZTZmNzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQ1LXB1c2gtb3B0aW9ucy5zaApAQCAtMCwwICsxLDI4NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1c2hpbmcgdG8gYSByZXBvc2l0b3J5IHVzaW5nIHB1c2ggb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK21rX3JlcG9fcGFpciAoKSB7CisJcm0gLXJmIHdvcmtiZW5jaCB1cHN0cmVhbSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdXBzdHJlYW0gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHdvcmtiZW5jaCAmJgorCSgKKwkJY2QgdXBzdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYKKwkJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCQljYXQgPi5naXQvaG9va3MvcHJlLXJlY2VpdmUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCWlmIHRlc3QgLW4gIiRHSVRfUFVTSF9PUFRJT05fQ09VTlQiOyB0aGVuCisJCQlpPTAKKwkJCT5ob29rcy9wcmUtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKwkJCXdoaWxlIHRlc3QgIiRpIiAtbHQgIiRHSVRfUFVTSF9PUFRJT05fQ09VTlQiOyBkbworCQkJCWV2YWwgInZhbHVlPVwkR0lUX1BVU0hfT1BUSU9OXyRpIgorCQkJCWVjaG8gJHZhbHVlID4+aG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zCisJCQkJaT0kKChpICsgMSkpCisJCQlkb25lCisJCWZpCisJCUVPRgorCQljaG1vZCB1K3ggLmdpdC9ob29rcy9wcmUtcmVjZWl2ZQorCisJCWNhdCA+LmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCWlmIHRlc3QgLW4gIiRHSVRfUFVTSF9PUFRJT05fQ09VTlQiOyB0aGVuCisJCQlpPTAKKwkJCT5ob29rcy9wb3N0LXJlY2VpdmUucHVzaF9vcHRpb25zCisJCQl3aGlsZSB0ZXN0ICIkaSIgLWx0ICIkR0lUX1BVU0hfT1BUSU9OX0NPVU5UIjsgZG8KKwkJCQlldmFsICJ2YWx1ZT1cJEdJVF9QVVNIX09QVElPTl8kaSIKKwkJCQllY2hvICR2YWx1ZSA+Pmhvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKwkJCQlpPSQoKGkgKyAxKSkKKwkJCWRvbmUKKwkJZmkKKwkJRU9GCisJCWNobW9kIHUreCAuZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZQorCSkgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQlnaXQgcmVtb3RlIGFkZCB1cCAuLi91cHN0cmVhbQorCSkKK30KKworIyBDb21wYXJlIHRoZSByZWYgKCQxKSBpbiB1cHN0cmVhbSB3aXRoIGEgcmVmIHZhbHVlIGZyb20gd29ya2JlbmNoICgkMikKKyMgaS5lLiB0ZXN0X3JlZnMgc2Vjb25kIEhFQURAezJ9Cit0ZXN0X3JlZnMgKCkgeworCXRlc3QgJCMgPSAyICYmCisJZ2l0IC1DIHVwc3RyZWFtIHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiID5leHBlY3QgJiYKKwlnaXQgLUMgd29ya2JlbmNoIHJldi1wYXJzZSAtLXZlcmlmeSAiJDIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBwdXNoIG9wdGlvbiB3b3JrcyBmb3IgYSBzaW5nbGUgYnJhbmNoJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIHRydWUgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBwdXNoIC0tcHVzaC1vcHRpb249YXNkZiB1cCBtYXN0ZXIKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBtYXN0ZXIgJiYKKwllY2hvICJhc2RmIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG9wdGlvbiBkZW5pZWQgYnkgcmVtb3RlJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIGZhbHNlICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXB1c2gtb3B0aW9uPWFzZGYgdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgSEVBREB7MX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIHB1c2ggb3B0aW9ucyB3b3JrJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIHRydWUgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBwdXNoIC0tcHVzaC1vcHRpb249YXNkZiAtLXB1c2gtb3B0aW9uPSJtb3JlIHN0cnVjdHVyZWQgdGV4dCIgdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJcHJpbnRmICJhc2RmXG5tb3JlIHN0cnVjdHVyZWQgdGV4dFxuIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG9wdGlvbnMgYW5kIHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBwYXJlbnQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcGFyZW50X3Vwc3RyZWFtIiAmJgorCW1rX3JlcG9fcGFpciAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9ucyB0cnVlICYmCisJY3AgLXIgdXBzdHJlYW0gcGFyZW50X3Vwc3RyZWFtICYmCisJdGVzdF9jb21taXQgLUMgdXBzdHJlYW0gb25lICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHBhcmVudCAmJgorCWdpdCAtQyBwYXJlbnQgcmVtb3RlIGFkZCB1cCAuLi9wYXJlbnRfdXBzdHJlYW0gJiYKKwl0ZXN0X2NvbW1pdCAtQyBwYXJlbnQgb25lICYmCisJZ2l0IC1DIHBhcmVudCBwdXNoIC0tbWlycm9yIHVwICYmCisKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSBhZGQgLi4vdXBzdHJlYW0gd29ya2JlbmNoICYmCisJZ2l0IC1DIHBhcmVudC93b3JrYmVuY2ggcmVtb3RlIGFkZCB1cCAuLi8uLi91cHN0cmVhbSAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCisJdGVzdF9jb21taXQgLUMgcGFyZW50L3dvcmtiZW5jaCB0d28gJiYKKwlnaXQgLUMgcGFyZW50IGFkZCB3b3JrYmVuY2ggJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAidXBkYXRlIHdvcmtiZW5jaCIgJiYKKworCWdpdCAtQyBwYXJlbnQgcHVzaCBcCisJCS0tcHVzaC1vcHRpb249YXNkZiAtLXB1c2gtb3B0aW9uPSJtb3JlIHN0cnVjdHVyZWQgdGV4dCIgXAorCQktLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgdXAgbWFzdGVyICYmCisKKwlnaXQgLUMgdXBzdHJlYW0gcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IC1DIHBhcmVudC93b3JrYmVuY2ggcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IC1DIHBhcmVudF91cHN0cmVhbSByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgLUMgcGFyZW50IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXByaW50ZiAiYXNkZlxubW9yZSBzdHJ1Y3R1cmVkIHRleHRcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucyAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcGFyZW50X3Vwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhcmVudF91cHN0cmVhbS8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBwdXNoIG9wdGlvbicgJworCW1rX3JlcG9fcGFpciAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9ucyB0cnVlICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgLWMgcHVzaC5wdXNoT3B0aW9uPWRlZmF1bHQgcHVzaCB1cCBtYXN0ZXIKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBtYXN0ZXIgJiYKKwllY2hvICJkZWZhdWx0IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28gZGVmYXVsdCBwdXNoIG9wdGlvbnMnICcKKwlta19yZXBvX3BhaXIgJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlUHVzaE9wdGlvbnMgdHJ1ZSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IC1jIHB1c2gucHVzaE9wdGlvbj1kZWZhdWx0MSAtYyBwdXNoLnB1c2hPcHRpb249ZGVmYXVsdDIgcHVzaCB1cCBtYXN0ZXIKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBtYXN0ZXIgJiYKKwlwcmludGYgImRlZmF1bHQxXG5kZWZhdWx0MlxuIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG9wdGlvbiBmcm9tIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgZnJvbS1jb25maWcgcHVzaCBvcHRpb24nICcKKwlta19yZXBvX3BhaXIgJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlUHVzaE9wdGlvbnMgdHJ1ZSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IC1jIHB1c2gucHVzaE9wdGlvbj1kZWZhdWx0IHB1c2ggLS1wdXNoLW9wdGlvbj1tYW51YWwgdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJZWNobyAibWFudWFsIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcHJlLXJlY2VpdmUucHVzaF9vcHRpb25zICYmCisJdGVzdF9jbXAgZXhwZWN0IHVwc3RyZWFtLy5naXQvaG9va3MvcG9zdC1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSB2YWx1ZSBvZiBwdXNoLnB1c2hPcHRpb24gaW4gY29uZmlnIGNsZWFycyB0aGUgbGlzdCcgJworCW1rX3JlcG9fcGFpciAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb25maWcgcmVjZWl2ZS5hZHZlcnRpc2VQdXNoT3B0aW9ucyB0cnVlICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgLWMgcHVzaC5wdXNoT3B0aW9uPWRlZmF1bHQxIC1jIHB1c2gucHVzaE9wdGlvbj0gLWMgcHVzaC5wdXNoT3B0aW9uPWRlZmF1bHQyIHB1c2ggdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJZWNobyAiZGVmYXVsdDIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdXBzdHJlYW0vLmdpdC9ob29rcy9wcmUtcmVjZWl2ZS5wdXNoX29wdGlvbnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdXBzdHJlYW0vLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUucHVzaF9vcHRpb25zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgcHVzaCBvcHRpb24gaW4gY29uZmlnJyAnCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zIHRydWUgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBwdXNoLnB1c2hPcHRpb24gcHVzaCB1cCBtYXN0ZXIKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBIRUFEQHsxfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG9wdGlvbnMga2VlcCBxdW90ZWQgY2hhcmFjdGVycyBpbnRhY3QgKGRpcmVjdCknICcKKwlta19yZXBvX3BhaXIgJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29uZmlnIHJlY2VpdmUuYWR2ZXJ0aXNlUHVzaE9wdGlvbnMgdHJ1ZSAmJgorCXRlc3RfY29tbWl0IC1DIHdvcmtiZW5jaCBvbmUgJiYKKwlnaXQgLUMgd29ya2JlbmNoIHB1c2ggLS1wdXNoLW9wdGlvbj0iXCJlbWJlZGRlZCBxdW90ZXNcIiIgdXAgbWFzdGVyICYmCisJZWNobyAiXCJlbWJlZGRlZCBxdW90ZXNcIiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1cHN0cmVhbS8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucworJworCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKworIyBzZXQgdXAgaHR0cCByZXBvc2l0b3J5IGZvciBmZXRjaGluZy9wdXNoaW5nLCB3aXRoIHB1c2ggb3B0aW9ucyBjb25maWcKKyMgYm9vbCBzZXQgdG8gJDEKK21rX2h0dHBfcGFpciAoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgdGVzdF9odHRwX2Nsb25lIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAncm0gLXJmICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi91cHN0cmVhbS5naXQnICYmCisJbWtfcmVwb19wYWlyICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZVB1c2hPcHRpb25zICIkMSIgJiYKKwlnaXQgLUMgdXBzdHJlYW0gY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWNwIC1SIHVwc3RyZWFtLy5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Vwc3RyZWFtLmdpdCAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTCIvc21hcnQvdXBzdHJlYW0gdGVzdF9odHRwX2Nsb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggb3B0aW9uIGRlbmllZCBwcm9wZXJseSBieSBodHRwIHNlcnZlcicgJworCW1rX2h0dHBfcGFpciBmYWxzZSAmJgorCXRlc3RfY29tbWl0IC1DIHRlc3RfaHR0cF9jbG9uZSBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgdGVzdF9odHRwX2Nsb25lIHB1c2ggLS1wdXNoLW9wdGlvbj1hc2RmIG9yaWdpbiBtYXN0ZXIgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IHB1c2ggb3B0aW9ucyIgYWN0dWFsICYmCisJZ2l0IC1DIHRlc3RfaHR0cF9jbG9uZSBwdXNoIG9yaWdpbiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBvcHRpb25zIHdvcmsgcHJvcGVybHkgYWNyb3NzIGh0dHAnICcKKwlta19odHRwX3BhaXIgdHJ1ZSAmJgorCisJdGVzdF9jb21taXQgLUMgdGVzdF9odHRwX2Nsb25lIG9uZSAmJgorCWdpdCAtQyB0ZXN0X2h0dHBfY2xvbmUgcHVzaCBvcmlnaW4gbWFzdGVyICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi91cHN0cmVhbS5naXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IC1DIHRlc3RfaHR0cF9jbG9uZSByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X2NvbW1pdCAtQyB0ZXN0X2h0dHBfY2xvbmUgdHdvICYmCisJZ2l0IC1DIHRlc3RfaHR0cF9jbG9uZSBwdXNoIC0tcHVzaC1vcHRpb249YXNkZiAtLXB1c2gtb3B0aW9uPSJtb3JlIHN0cnVjdHVyZWQgdGV4dCIgb3JpZ2luIG1hc3RlciAmJgorCXByaW50ZiAiYXNkZlxubW9yZSBzdHJ1Y3R1cmVkIHRleHRcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdXBzdHJlYW0uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlLnB1c2hfb3B0aW9ucyAmJgorCXRlc3RfY21wIGV4cGVjdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdXBzdHJlYW0uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZS5wdXNoX29wdGlvbnMgJiYKKworCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdXBzdHJlYW0uZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCAtQyB0ZXN0X2h0dHBfY2xvbmUgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG9wdGlvbnMga2VlcCBxdW90ZWQgY2hhcmFjdGVycyBpbnRhY3QgKGh0dHApJyAnCisJbWtfaHR0cF9wYWlyIHRydWUgJiYKKworCXRlc3RfY29tbWl0IC1DIHRlc3RfaHR0cF9jbG9uZSBvbmUgJiYKKwlnaXQgLUMgdGVzdF9odHRwX2Nsb25lIHB1c2ggLS1wdXNoLW9wdGlvbj0iXCJlbWJlZGRlZCBxdW90ZXNcIiIgb3JpZ2luIG1hc3RlciAmJgorCWVjaG8gIlwiZW1iZWRkZWQgcXVvdGVzXCIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Vwc3RyZWFtLmdpdC9ob29rcy9wcmUtcmVjZWl2ZS5wdXNoX29wdGlvbnMKKycKKworIyBETyBOT1QgYWRkIG5vbi1odHRwZC1zcGVjaWZpYyB0ZXN0cyBoZXJlLCBiZWNhdXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhpcworIyB0ZXN0IHNjcmlwdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaHR0cGQgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDYtcmVjZWl2ZS1saW1pdHMuc2ggYi90L3Q1NTQ2LXJlY2VpdmUtbGltaXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiMGU5ODcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTQ2LXJlY2VpdmUtbGltaXRzLnNoCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayByZWNlaXZlIGlucHV0IGxpbWl0cycKKy4gLi90ZXN0LWxpYi5zaAorCisjIExldCdzIHJ1biB0ZXN0cyB3aXRoIGRpZmZlcmVudCB1bnBhY2sgbGltaXRzOiAxIGFuZCAxMDAwMAorIyBXaGVuIHRoZSBsaW1pdCBpcyAxLCBgZ2l0IHJlY2VpdmUtcGFja2Agd2lsbCBjYWxsIGBnaXQgaW5kZXgtcGFja2AuCisjIFdoZW4gdGhlIGxpbWl0IGlzIDEwMDAwLCBgZ2l0IHJlY2VpdmUtcGFja2Agd2lsbCBjYWxsIGBnaXQgdW5wYWNrLW9iamVjdHNgLgorCit0ZXN0X3BhY2tfaW5wdXRfbGltaXQgKCkgeworCWNhc2UgIiQxIiBpbgorCWluZGV4KSB1bnBhY2tfbGltaXQ9MSA7OworCXVucGFjaykgdW5wYWNrX2xpbWl0PTEwMDAwIDs7CisJZXNhYworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5JyAnCisJCXJtIC1mciBkZXN0ICYmCisJCWdpdCAtLWJhcmUgaW5pdCBkZXN0CisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0IHVucGFja2xpbWl0IHRvICR1bnBhY2tfbGltaXQiICcKKwkJZ2l0IC0tZ2l0LWRpcj1kZXN0IGNvbmZpZyByZWNlaXZlLnVucGFja2xpbWl0ICIkdW5wYWNrX2xpbWl0IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgcmVjZWl2ZS5tYXhJbnB1dFNpemUgdG8gNTEyIHJlamVjdHMgcHVzaCcgJworCQlnaXQgLS1naXQtZGlyPWRlc3QgY29uZmlnIHJlY2VpdmUubWF4SW5wdXRTaXplIDUxMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBkZXN0IEhFQUQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW1waW5nIGxpbWl0IHRvIDRrIGFsbG93cyBwdXNoJyAnCisJCWdpdCAtLWdpdC1kaXI9ZGVzdCBjb25maWcgcmVjZWl2ZS5tYXhJbnB1dFNpemUgNGsgJiYKKwkJZ2l0IHB1c2ggZGVzdCBIRUFECisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5IChhZ2FpbiknICcKKwkJcm0gLWZyIGRlc3QgJiYKKwkJZ2l0IC0tYmFyZSBpbml0IGRlc3QKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaWZ0aW5nIHRoZSBsaW1pdCBhbGxvd3MgcHVzaCcgJworCQlnaXQgLS1naXQtZGlyPWRlc3QgY29uZmlnIHJlY2VpdmUubWF4SW5wdXRTaXplIDAgJiYKKwkJZ2l0IHB1c2ggZGVzdCBIRUFECisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUga25vd24tc2l6ZSAoMTAyNCBieXRlcykgY29tbWl0IiAnCisJdGVzdC10b29sIGdlbnJhbmRvbSBmb28gMTAyNCA+b25lLWsgJiYKKwlnaXQgYWRkIG9uZS1rICYmCisJdGVzdF9jb21taXQgb25lLWsKKycKKwordGVzdF9wYWNrX2lucHV0X2xpbWl0IGluZGV4Cit0ZXN0X3BhY2tfaW5wdXRfbGltaXQgdW5wYWNrCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0Ny1wdXNoLXF1YXJhbnRpbmUuc2ggYi90L3Q1NTQ3LXB1c2gtcXVhcmFudGluZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYWFhNTFjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0Ny1wdXNoLXF1YXJhbnRpbmUuc2gKQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIHF1YXJhbnRpbmUgb2Ygb2JqZWN0cyBkdXJpbmcgcHVzaCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGlja3kgZGVzdCByZXBvJyAnCisJZ2l0IGluaXQgLS1iYXJlIGRlc3QuZ2l0ICYmCisJd3JpdGVfc2NyaXB0IGRlc3QuZ2l0L2hvb2tzL3ByZS1yZWNlaXZlIDw8LVxFT0YKKwl3aGlsZSByZWFkIG9sZCBuZXcgcmVmOyBkbworCQl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgJG5ldykiID0gcmVqZWN0ICYmIGV4aXQgMQorCWRvbmUKKwlleGl0IDAKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWNjZXB0ZWQgb2JqZWN0cyB3b3JrJyAnCisJdGVzdF9jb21taXQgb2sgJiYKKwlnaXQgcHVzaCBkZXN0LmdpdCBIRUFEICYmCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCAtLWdpdC1kaXI9ZGVzdC5naXQgY2F0LWZpbGUgY29tbWl0ICRjb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0ZWQgb2JqZWN0cyBhcmUgbm90IGluc3RhbGxlZCcgJworCXRlc3RfY29tbWl0IHJlamVjdCAmJgorCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBkZXN0LmdpdCByZWplY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPWRlc3QuZ2l0IGNhdC1maWxlIGNvbW1pdCAkY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdGVkIG9iamVjdHMgYXJlIHJlbW92ZWQnICcKKwllY2hvICJpbmNvbWluZy0qIiA+ZXhwZWN0ICYmCisJKGNkIGRlc3QuZ2l0L29iamVjdHMgJiYgZWNobyBpbmNvbWluZy0qKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHJlcG8gcGF0aCB3aXRoIHBhdGggc2VwYXJhdG9yIChjb2xvbiknICcKKwkjIFRoZSBpbnRlcmVzdGluZyBmYWlsdXJlIGNhc2UgaGVyZSBpcyB3aGVuIHRoZQorCSMgcmVjZWl2aW5nIGVuZCBjYW5ub3QgYWNjZXNzIGl0cyBvcmlnaW5hbCBvYmplY3QgZGlyZWN0b3J5LAorCSMgc28gbWFrZSBpdCBsaWtlbHkgZm9yIHVzIHRvIGdlbmVyYXRlIGEgZGVsdGEgYnkgaGF2aW5nCisJIyBhIG5vbi10cml2aWFsIGZpbGUgd2l0aCBtdWx0aXBsZSB2ZXJzaW9ucy4KKworCXRlc3QtdG9vbCBnZW5yYW5kb20gZm9vIDQwOTYgPmZpbGUuYmluICYmCisJZ2l0IGFkZCBmaWxlLmJpbiAmJgorCWdpdCBjb21taXQgLW0gYmluICYmCisKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXCisJdGhlbgorCQlwYXRoc2VwPSI7IgorCWVsc2UKKwkJcGF0aHNlcD0iOiIKKwlmaSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLiAieHh4JHtwYXRoc2VwfXl5eS5naXQiICYmCisKKwllY2hvIGNoYW5nZSA+PmZpbGUuYmluICYmCisJZ2l0IGNvbW1pdCAtYW0gY2hhbmdlICYmCisJIyBOb3RlIHRoYXQgd2UgaGF2ZSB0byB1c2UgdGhlIGZ1bGwgcGF0aCBoZXJlLCBvciBpdCBnZXRzIGNvbmZ1c2VkCisJIyB3aXRoIHRoZSBzc2ggaG9zdDpwYXRoIHN5bnRheC4KKwlnaXQgcHVzaCAiJChwd2QpL3h4eCR7cGF0aHNlcH15eXkuZ2l0IiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGEgcmVmIGZyb20gcXVhcmFudGluZSBpcyBmb3JiaWRkZW4nICcKKwlnaXQgaW5pdCAtLWJhcmUgdXBkYXRlLmdpdCAmJgorCXdyaXRlX3NjcmlwdCB1cGRhdGUuZ2l0L2hvb2tzL3ByZS1yZWNlaXZlIDw8LVxFT0YgJiYKKwlyZWFkIG9sZCBuZXcgcmVmbmFtZQorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdW5yZWxhdGVkICRuZXcKKwlleGl0IDEKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB1cGRhdGUuZ2l0IEhFQUQgJiYKKwlnaXQgLUMgdXBkYXRlLmdpdCBmc2NrCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU1MC1odHRwLWZldGNoLWR1bWIuc2ggYi90L3Q1NTUwLWh0dHAtZmV0Y2gtZHVtYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iODExZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU1MC1odHRwLWZldGNoLWR1bWIuc2gKQEAgLTAsMCArMSw0MjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGR1bWIgZmV0Y2hpbmcgb3ZlciBodHRwIHZpYSBzdGF0aWMgZmlsZScKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWVjaG8gY29udGVudDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gY29udGVudDIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgaHR0cC1hY2Nlc3NpYmxlIGJhcmUgcmVwb3NpdG9yeSB3aXRoIGxvb3NlIG9iamVjdHMnICcKKwljcCAtUiAuZ2l0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgZ2l0IGNvbmZpZyBjb3JlLmJhcmUgdHJ1ZSAmJgorCSBta2RpciAtcCBob29rcyAmJgorCSB3cml0ZV9zY3JpcHQgImhvb2tzL3Bvc3QtdXBkYXRlIiA8PC1cRU9GICYmCisJIGV4ZWMgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbworCUVPRgorCSBob29rcy9wb3N0LXVwZGF0ZQorCSkgJiYKKwlnaXQgcmVtb3RlIGFkZCBwdWJsaWMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgaHR0cCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi9yZXBvLmdpdCBjbG9uZS10bXBsICYmCisJY3AgLVIgY2xvbmUtdG1wbCBjbG9uZSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IHJlZnMgZnJvbSBvdXRzaWRlIGFueSByZXBvc2l0b3J5JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIG1hc3RlcikJSEVBRAorCSQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpCXJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisJbm9uZ2l0IGdpdCBscy1yZW1vdGUgIiRIVFRQRF9VUkwvZHVtYi9yZXBvLmdpdCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5JyAnCisJbWtkaXIgLXAgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iLyIgJiYKKwljcCAtUmYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIFwKKwkgICAgICAgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iL3JlcG8uZ2l0IgorJworCitzZXR1cF9hc2twYXNzX2hlbHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5IGNhbiBmYWlsJyAnCisJc2V0X2Fza3Bhc3Mgd3JvbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLWZhaWwgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHdyb25nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgYXV0aCBjYW4gdXNlIHVzZXIvcGFzcyBpbiBVUkwnICcKKwlzZXRfYXNrcGFzcyB3cm9uZyAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTF9VU0VSX1BBU1MvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLW5vbmUgJiYKKwlleHBlY3RfYXNrcGFzcyBub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgYXV0aCBjYW4gdXNlIGp1c3QgdXNlciBpbiBVUkwnICcKKwlzZXRfYXNrcGFzcyB3cm9uZyBwYXNzQGhvc3QgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkxfVVNFUi9hdXRoL2R1bWIvcmVwby5naXQiIGNsb25lLWF1dGgtcGFzcyAmJgorCWV4cGVjdF9hc2twYXNzIHBhc3MgdXNlckBob3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgYXV0aCBjYW4gcmVxdWVzdCBib3RoIHVzZXIgYW5kIHBhc3MnICcKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IGNsb25lICIkSFRUUERfVVJML2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC1ib3RoICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCBhdXRoIHJlc3BlY3RzIGNyZWRlbnRpYWwgaGVscGVyIGNvbmZpZycgJworCXRlc3RfY29uZmlnX2dsb2JhbCBjcmVkZW50aWFsLmhlbHBlciAiIWYoKSB7CisJCWNhdCA+L2Rldi9udWxsCisJCWVjaG8gdXNlcm5hbWU9dXNlckBob3N0CisJCWVjaG8gcGFzc3dvcmQ9cGFzc0Bob3N0CisJfTsgZiIgJiYKKwlzZXRfYXNrcGFzcyB3cm9uZyAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9hdXRoL2R1bWIvcmVwby5naXQiIGNsb25lLWF1dGgtaGVscGVyICYmCisJZXhwZWN0X2Fza3Bhc3Mgbm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIGdldCB1c2VybmFtZSBmcm9tIGNvbmZpZycgJworCXRlc3RfY29uZmlnX2dsb2JhbCAiY3JlZGVudGlhbC4kSFRUUERfVVJMLnVzZXJuYW1lIiB1c2VyQGhvc3QgJiYKKwlzZXRfYXNrcGFzcyB3cm9uZyBwYXNzQGhvc3QgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLXVzZXIgJiYKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmVkIHVzZXJuYW1lIGRvZXMgbm90IG92ZXJyaWRlIFVSTCcgJworCXRlc3RfY29uZmlnX2dsb2JhbCAiY3JlZGVudGlhbC4kSFRUUERfVVJMLnVzZXJuYW1lIiB3cm9uZyAmJgorCXNldF9hc2twYXNzIHdyb25nIHBhc3NAaG9zdCAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTF9VU0VSL2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC11c2VyMiAmJgorCWV4cGVjdF9hc2twYXNzIHBhc3MgdXNlckBob3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCByZXBvIHdpdGggaHR0cCBzdWJtb2R1bGVzJyAnCisJZ2l0IGluaXQgc3VwZXIgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJEhUVFBEX1VSTC9hdXRoL2R1bWIvcmVwby5naXQiIHN1YiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY21kbGluZSBjcmVkZW50aWFsIGNvbmZpZyBwYXNzZXMgdG8gc3VibW9kdWxlIHZpYSBjbG9uZScgJworCXNldF9hc2twYXNzIHdyb25nIHBhc3NAaG9zdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSBzdXBlciBzdXBlci1jbG9uZSAmJgorCXJtIC1yZiBzdXBlci1jbG9uZSAmJgorCisJc2V0X2Fza3Bhc3Mgd3JvbmcgcGFzc0Bob3N0ICYmCisJZ2l0IC1jICJjcmVkZW50aWFsLiRIVFRQRF9VUkwudXNlcm5hbWU9dXNlckBob3N0IiBcCisJCWNsb25lIC0tcmVjdXJzaXZlIHN1cGVyIHN1cGVyLWNsb25lICYmCisJZXhwZWN0X2Fza3Bhc3MgcGFzcyB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY21kbGluZSBjcmVkZW50aWFsIGNvbmZpZyBwYXNzZXMgc3VibW9kdWxlIHZpYSBmZXRjaCcgJworCXNldF9hc2twYXNzIHdyb25nIHBhc3NAaG9zdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlci1jbG9uZSBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAmJgorCisJc2V0X2Fza3Bhc3Mgd3JvbmcgcGFzc0Bob3N0ICYmCisJZ2l0IC1DIHN1cGVyLWNsb25lIFwKKwkgICAgLWMgImNyZWRlbnRpYWwuJEhUVFBEX1VSTC51c2VybmFtZT11c2VyQGhvc3QiIFwKKwkgICAgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbWRsaW5lIGNyZWRlbnRpYWwgY29uZmlnIHBhc3NlcyBzdWJtb2R1bGUgdXBkYXRlJyAnCisJIyBhZHZhbmNlIHRoZSBzdWJtb2R1bGUgSEVBRCBzbyB0aGF0IGEgZmV0Y2ggaXMgcmVxdWlyZWQKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYXV0aC9kdW1iL3JlcG8uZ2l0IiBIRUFEICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgLUMgc3VwZXItY2xvbmUgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCwkc2hhMSxzdWIgJiYKKworCXNldF9hc2twYXNzIHdyb25nIHBhc3NAaG9zdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlci1jbG9uZSBzdWJtb2R1bGUgdXBkYXRlICYmCisKKwlzZXRfYXNrcGFzcyB3cm9uZyBwYXNzQGhvc3QgJiYKKwlnaXQgLUMgc3VwZXItY2xvbmUgXAorCSAgICAtYyAiY3JlZGVudGlhbC4kSFRUUERfVVJMLnVzZXJuYW1lPXVzZXJAaG9zdCIgXAorCSAgICBzdWJtb2R1bGUgdXBkYXRlICYmCisJZXhwZWN0X2Fza3Bhc3MgcGFzcyB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgaHR0cCcgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCBwdXNoIHB1YmxpYyAmJgorCShjZCBjbG9uZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgbWFudWFsIGh0dHAtZmV0Y2gnICcKKwljcCAtUiBjbG9uZS10bXBsIGNsb25lMiAmJgorCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoY2QgY2xvbmUyICYmCisJIGdpdCBodHRwLWZldGNoIC1hIC13IGhlYWRzL21hc3Rlci1uZXcgJEhFQUQgJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyLW5ldyAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUyL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFudWFsIGh0dHAtZmV0Y2ggd2l0aG91dCAtYSB3b3JrcyBqdXN0IGFzIHdlbGwnICcKKwljcCAtUiBjbG9uZS10bXBsIGNsb25lMyAmJgorCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoY2QgY2xvbmUzICYmCisJIGdpdCBodHRwLWZldGNoIC13IGhlYWRzL21hc3Rlci1uZXcgJEhFQUQgJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyLW5ldyAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUzL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCByZW1vdGUgZGV0ZWN0cyBjb3JyZWN0IEhFQUQnICcKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm90aGVyICYmCisJKGNkIGNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIC1kICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIC1hICYmCisJIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID4gb3V0cHV0ICYmCisJIGVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPiBleHBlY3QgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcGFja2VkIG9iamVjdHMnICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwby5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwkgZ2l0IC0tYmFyZSByZXBhY2sgLWEgLWQKKwkpICYmCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvZHVtYi9yZXBvX3BhY2suZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5vdGljZXMgY29ycnVwdCBwYWNrJyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMS5naXQgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMS5naXQgJiYKKwkgcD0kKGxzIG9iamVjdHMvcGFjay9wYWNrLSoucGFjaykgJiYKKwkgY2htb2QgdSt3ICRwICYmCisJIHByaW50ZiAlMDI1NmQgMCB8IGRkIG9mPSRwIGJzPTI1NiBjb3VudD0xIHNlZWs9MSBjb252PW5vdHJ1bmMKKwkpICYmCisJbWtkaXIgcmVwb19iYWQxLmdpdCAmJgorCShjZCByZXBvX2JhZDEuZ2l0ICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgLS1iYXJlIGZldGNoICRIVFRQRF9VUkwvZHVtYi9yZXBvX2JhZDEuZ2l0ICYmCisJIHRlc3QgMCA9ICQobHMgb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBub3RpY2VzIGNvcnJ1cHQgaWR4JyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkgcD0kKGxzIG9iamVjdHMvcGFjay9wYWNrLSouaWR4KSAmJgorCSBjaG1vZCB1K3cgJHAgJiYKKwkgcHJpbnRmICUwMjU2ZCAwIHwgZGQgb2Y9JHAgYnM9MjU2IGNvdW50PTEgc2Vlaz0xIGNvbnY9bm90cnVuYworCSkgJiYKKwlta2RpciByZXBvX2JhZDIuZ2l0ICYmCisJKGNkIHJlcG9fYmFkMi5naXQgJiYKKwkgZ2l0IC0tYmFyZSBpbml0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCAtLWJhcmUgZmV0Y2ggJEhUVFBEX1VSTC9kdW1iL3JlcG9fYmFkMi5naXQgJiYKKwkgdGVzdCAwID0gJChscyBvYmplY3RzL3BhY2sgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNhbiBoYW5kbGUgcHJldmlvdXNseS1mZXRjaGVkIC5pZHggZmlsZXMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYnJhbmNoMSAmJgorCWVjaG8gYmFzZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCAtLWJhcmUgaW5pdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFja2VkX2JyYW5jaGVzLmdpdCBicmFuY2gxICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0IHJlcGFjayAtZCAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gyIGJyYW5jaDEgJiYKKwllY2hvIGIyID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gYjIgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0IGJyYW5jaDIgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2tlZF9icmFuY2hlcy5naXQgcmVwYWNrIC1kICYmCisJZ2l0IC0tYmFyZSBpbml0IGNsb25lX3BhY2tlZF9icmFuY2hlcy5naXQgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lX3BhY2tlZF9icmFuY2hlcy5naXQgZmV0Y2ggIiRIVFRQRF9VUkwiL2R1bWIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0IGJyYW5jaDE6YnJhbmNoMSAmJgorCWdpdCAtLWdpdC1kaXI9Y2xvbmVfcGFja2VkX2JyYW5jaGVzLmdpdCBmZXRjaCAiJEhUVFBEX1VSTCIvZHVtYi9yZXBvX3BhY2tlZF9icmFuY2hlcy5naXQgYnJhbmNoMjpicmFuY2gyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZCBub3QgdXNlIHVwbG9hZC1wYWNrIHNlcnZpY2UnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ3JlcCAnL2dpdC11cGxvYWQtcGFjaycgPCIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nID5hY3QgJiYKKwk6ID5leHAgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGllbnQgc2hvd3MgdGV4dC9wbGFpbiBlcnJvcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgIiRIVFRQRF9VUkwvZXJyb3IvdGV4dCIgMj5zdGRlcnIgJiYKKwlncmVwICJ0aGlzIGlzIHRoZSBlcnJvciBtZXNzYWdlIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsaWVudCBkb2VzIG5vdCBzaG93IGh0bWwgZXJyb3JzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2Vycm9yL2h0bWwiIDI+c3RkZXJyICYmCisJISBncmVwICJ0aGlzIGlzIHRoZSBlcnJvciBtZXNzYWdlIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsaWVudCBzaG93cyB0ZXh0L3BsYWluIHdpdGggYSBjaGFyc2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2Vycm9yL2NoYXJzZXQiIDI+c3RkZXJyICYmCisJZ3JlcCAidGhpcyBpcyB0aGUgZXJyb3IgbWVzc2FnZSIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgZXJyb3IgbWVzc2FnZXMgYXJlIHJlZW5jb2RlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiJEhUVFBEX1VSTC9lcnJvci91dGYxNiIgMj5zdGRlcnIgJiYKKwlncmVwICJ0aGlzIGlzIHRoZSBlcnJvciBtZXNzYWdlIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVlbmNvZGluZyBpcyByb2J1c3QgdG8gd2hpdGVzcGFjZSBvZGRpdGllcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiJEhUVFBEX1VSTC9lcnJvci9vZGQtc3BhY2luZyIgMj5zdGRlcnIgJiYKKwlncmVwICJ0aGlzIGlzIHRoZSBlcnJvciBtZXNzYWdlIiBzdGRlcnIKKycKKworY2hlY2tfbGFuZ3VhZ2UgKCkgeworCWNhc2UgIiQyIiBpbgorCScnKQorCQk+ZXhwZWN0CisJCTs7CisJPyopCisJCWVjaG8gIj0+IFNlbmQgaGVhZGVyOiBBY2NlcHQtTGFuZ3VhZ2U6ICQxIiA+ZXhwZWN0CisJCTs7CisJZXNhYyAmJgorCUdJVF9UUkFDRV9DVVJMPXRydWUgXAorCUxBTkdVQUdFPSQyIFwKKwlnaXQgbHMtcmVtb3RlICIkSFRUUERfVVJML2R1bWIvcmVwby5naXQiID5vdXRwdXQgMj4mMSAmJgorCXRyIC1kICdcMDE1JyA8b3V0cHV0IHwKKwlzb3J0IC11IHwKKwlzZWQgLW5lICcvXj0+IFNlbmQgaGVhZGVyOiBBY2NlcHQtTGFuZ3VhZ2U6LyBwJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xpZW50IHNlbmRzIEFjY2VwdC1MYW5ndWFnZSBiYXNlZCBvbiBMQU5HVUFHRScgJworCWNoZWNrX2xhbmd1YWdlICJrby1LUiwgKjtxPTAuOSIga29fS1IuVVRGLTgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGllbnQgc2VuZHMgQWNjZXB0LUxhbmd1YWdlIGNvcnJlY3RseSB3aXRoIHVub3JkaW5hcnkgTEFOR1VBR0UnICcKKwljaGVja19sYW5ndWFnZSAia28tS1IsICo7cT0wLjkiICJrb19LUjoiICYmCisJY2hlY2tfbGFuZ3VhZ2UgImtvLUtSLCBlbi1VUztxPTAuOSwgKjtxPTAuOCIgImtvX0tSOjplbl9VUyIgJiYKKwljaGVja19sYW5ndWFnZSAia28tS1IsICo7cT0wLjkiICI6Ojprb19LUiIgJiYKKwljaGVja19sYW5ndWFnZSAia28tS1IsIGVuLVVTO3E9MC45LCAqO3E9MC44IiAia29fS1IhITplbl9VUyIgJiYKKwljaGVja19sYW5ndWFnZSAia28tS1IsIGphLUpQO3E9MC45LCAqO3E9MC44IiAia29fS1IgZW5fVVM6amFfSlAiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xpZW50IHNlbmRzIEFjY2VwdC1MYW5ndWFnZSB3aXRoIG1hbnkgcHJlZmVycmVkIGxhbmd1YWdlcycgJworCWNoZWNrX2xhbmd1YWdlICJrby1LUiwgZW4tVVM7cT0wLjksIGZyLUNBO3E9MC44LCBkZTtxPTAuNywgc3I7cT0wLjYsIFwKK2phO3E9MC41LCB6aDtxPTAuNCwgc3Y7cT0wLjMsIHB0O3E9MC4yLCAqO3E9MC4xIiBcCisJCWtvX0tSLkVVQy1LUjplbl9VUy5VVEYtODpmcl9DQTpkZS5VVEYtOEBldXJvOnNyQGxhdGluOmphOnpoOnN2OnB0ICYmCisJY2hlY2tfbGFuZ3VhZ2UgImtvLUtSLCBlbi1VUztxPTAuOTksIGZyLUNBO3E9MC45OCwgZGU7cT0wLjk3LCBzcjtxPTAuOTYsIFwKK2phO3E9MC45NSwgemg7cT0wLjk0LCBzdjtxPTAuOTMsIHB0O3E9MC45MiwgbmI7cT0wLjkxLCAqO3E9MC45MCIgXAorCQlrb19LUi5FVUMtS1I6ZW5fVVMuVVRGLTg6ZnJfQ0E6ZGUuVVRGLThAZXVybzpzckBsYXRpbjpqYTp6aDpzdjpwdDpuYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xpZW50IGRvZXMgbm90IHNlbmQgYW4gZW1wdHkgQWNjZXB0LUxhbmd1YWdlJyAnCisJR0lUX1RSQUNFX0NVUkw9dHJ1ZSBMQU5HVUFHRT0gZ2l0IGxzLXJlbW90ZSAiJEhUVFBEX1VSTC9kdW1iL3JlcG8uZ2l0IiAyPnN0ZGVyciAmJgorCSEgZ3JlcCAiXj0+IFNlbmQgaGVhZGVyOiBBY2NlcHQtTGFuZ3VhZ2U6IiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlLWh0dHAgY29tcGxhaW5zIGNsZWFubHkgYWJvdXQgbWFsZm9ybWVkIHVybHMnICcKKwkjIGRvIG5vdCBhY3R1YWxseSBpc3N1ZSAibGlzdCIgb3Igb3RoZXIgY29tbWFuZHMsIGFzIHdlIGRvIG5vdAorCSMgd2FudCB0byByZWx5IG9uIHdoYXQgY3VybCB3b3VsZCBhY3R1YWxseSBkbyB3aXRoIHN1Y2ggYSBicm9rZW4KKwkjIFVSTC4gVGhpcyBpcyBqdXN0IGFib3V0IG1ha2luZyBzdXJlIHdlIGRvIG5vdCBzZWdmYXVsdCBkdXJpbmcKKwkjIGluaXRpYWxpemF0aW9uLgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUtaHR0cCBodHRwOjovZXhhbXBsZS5jb20vcmVwby5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkaXJlY3RzIGNhbiBiZSBmb3JiaWRkZW4vYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBodHRwLmZvbGxvd1JlZGlyZWN0cz1mYWxzZSBcCisJCWNsb25lICRIVFRQRF9VUkwvZHVtYi1yZWRpci9yZXBvLmdpdCBkdW1iLXJlZGlyICYmCisJZ2l0IC1jIGh0dHAuZm9sbG93UmVkaXJlY3RzPXRydWUgXAorCQljbG9uZSAkSFRUUERfVVJML2R1bWItcmVkaXIvcmVwby5naXQgZHVtYi1yZWRpciAyPnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdHMgYXJlIHJlcG9ydGVkIHRvIHN0ZGVycicgJworCSMganVzdCBsb29rIGZvciBhIHNuaXBwZXQgb2YgdGhlIHJlZGlyZWN0ZWQtdG8gVVJMCisJdGVzdF9pMThuZ3JlcCAvZHVtYi8gc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1pbml0aWFsIHJlZGlyZWN0cyBjYW4gYmUgZm9yYmlkZGVuJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGh0dHAuZm9sbG93UmVkaXJlY3RzPWluaXRpYWwgXAorCQljbG9uZSAkSFRUUERfVVJML3JlZGlyLW9iamVjdHMvcmVwby5naXQgcmVkaXItb2JqZWN0cyAmJgorCWdpdCAtYyBodHRwLmZvbGxvd1JlZGlyZWN0cz10cnVlIFwKKwkJY2xvbmUgJEhUVFBEX1VSTC9yZWRpci1vYmplY3RzL3JlcG8uZ2l0IHJlZGlyLW9iamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC5mb2xsb3dSZWRpcmVjdHMgZGVmYXVsdHMgdG8gImluaXRpYWwiJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICRIVFRQRF9VUkwvcmVkaXItb2JqZWN0cy9yZXBvLmdpdCBkZWZhdWx0CisnCisKKyMgVGhlIGdvYWwgaXMgZm9yIGEgY2xvbmUgb2YgdGhlICJldmlsIiByZXBvc2l0b3J5LCB3aGljaCBoYXMgbm8gb2JqZWN0cworIyBpdHNlbGYsIHRvIGNhdXNlIHRoZSBjbGllbnQgdG8gZmV0Y2ggb2JqZWN0cyBmcm9tIHRoZSAidmljdGltIiByZXBvc2l0b3J5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGV2aWwgYWx0ZXJuYXRlcyBzY2hlbWUnICcKKwl2aWN0aW09JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC92aWN0aW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlICIkdmljdGltIiAmJgorCWdpdCAtQyAiJHZpY3RpbSIgLS13b3JrLXRyZWU9LiBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBzZWNyZXQgJiYKKwlnaXQgLUMgIiR2aWN0aW0iIHJlcGFjayAtYWQgJiYKKwlnaXQgLUMgIiR2aWN0aW0iIHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCXNoYTE9JChnaXQgLUMgIiR2aWN0aW0iIHJldi1wYXJzZSBIRUFEKSAmJgorCisJZXZpbD0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2V2aWwuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlICIkZXZpbCIgJiYKKwkjIGRvIHRoaXMgYnkgaGFuZCB0byBhdm9pZCBvYmplY3QgZXhpc3RlbmNlIGNoZWNrCisJcHJpbnRmICIlc1xcdCVzXFxuIiAkc2hhMSByZWZzL2hlYWRzL21hc3RlciA+IiRldmlsL2luZm8vcmVmcyIKKycKKworIyBIZXJlIHdlJ2xsIGp1c3QgcmVkaXJlY3QgdmlhIEhUVFAuIEluIGEgcmVhbC13b3JsZCBhdHRhY2sgdGhlc2Ugd291bGQgYmUgb24KKyMgZGlmZmVyZW50IHNlcnZlcnMsIGJ1dCB3ZSBzaG91bGQgcmVqZWN0IGl0IGVpdGhlciB3YXkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLWFsdGVybmF0ZXMgaXMgYSBub24taW5pdGlhbCByZWRpcmVjdCcgJworCWVjaG8gIiRIVFRQRF9VUkwvZHVtYi92aWN0aW0uZ2l0L29iamVjdHMiIFwKKwkJPiIkZXZpbC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBodHRwLmZvbGxvd1JlZGlyZWN0cz1pbml0aWFsIFwKKwkJY2xvbmUgJEhUVFBEX1VSTC9kdW1iL2V2aWwuZ2l0IGV2aWwtaW5pdGlhbCAmJgorCWdpdCAtYyBodHRwLmZvbGxvd1JlZGlyZWN0cz10cnVlIFwKKwkJY2xvbmUgJEhUVFBEX1VSTC9kdW1iL2V2aWwuZ2l0IGV2aWwtaW5pdGlhbAorJworCisjIEN1cmwgc3VwcG9ydHMgYSBsb3Qgb2YgcHJvdG9jb2xzIHRoYXQgd2UnZCBwcmVmZXIgbm90IHRvIGFsbG93CisjIGh0dHAtYWx0ZXJuYXRlcyB0byB1c2UsIGJ1dCBpdCdzIGhhcmQgdG8gdGVzdCB3aGV0aGVyIGN1cmwgaGFzCisjIGFjY2Vzc2VkLCBzYXksIHRoZSBTTVRQIHByb3RvY29sLCBiZWNhdXNlIHdlIGFyZSBub3QgcnVubmluZyBhbiBTTVRQIHNlcnZlci4KKyMgQnV0IHdlIGNhbiBjaGVjayB0aGF0IGl0IGRvZXMgbm90IGFsbG93IGFjY2VzcyB0byBmaWxlOi8vLCB3aGljaCB3b3VsZAorIyBvdGhlcndpc2UgYWxsb3cgdGhpcyBjbG9uZSB0byBjb21wbGV0ZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAtYWx0ZXJuYXRlcyBjYW5ub3QgcG9pbnQgYXQgZnVubnkgcHJvdG9jb2xzJyAnCisJZWNobyAiZmlsZTovLyR2aWN0aW0vb2JqZWN0cyIgPiIkZXZpbC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBodHRwLmZvbGxvd1JlZGlyZWN0cz10cnVlIFwKKwkJY2xvbmUgIiRIVFRQRF9VUkwvZHVtYi9ldmlsLmdpdCIgZXZpbC1maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAtYWx0ZXJuYXRlcyB0cmlnZ2VycyBub3QtZnJvbS11c2VyIHByb3RvY29sIGNoZWNrJyAnCisJZWNobyAiJEhUVFBEX1VSTC9kdW1iL3ZpY3RpbS5naXQvb2JqZWN0cyIgXAorCQk+IiRldmlsL29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMiICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGh0dHAuZm9sbG93UmVkaXJlY3RzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcHJvdG9jb2wuaHR0cC5hbGxvdz11c2VyIFwKKwkJY2xvbmUgJEhUVFBEX1VSTC9kdW1iL2V2aWwuZ2l0IGV2aWwtdXNlciAmJgorCWdpdCAtYyBwcm90b2NvbC5odHRwLmFsbG93PWFsd2F5cyBcCisJCWNsb25lICRIVFRQRF9VUkwvZHVtYi9ldmlsLmdpdCBldmlsLXVzZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIHJlZGlyZWN0IHRocm91Z2ggbm9uLSJpbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2siIFVSTCcgJworCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9yZWRpci10by9kdW1iL3JlcG8uZ2l0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmludCBIVFRQIGVycm9yIHdoZW4gYW55IGludGVybWVkaWF0ZSByZWRpcmVjdCB0aHJvd3MgZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgIiRIVFRQRF9VUkwvcmVkaXItdG8vNTAyIiAyPiBzdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ1bmFibGUgdG8gYWNjZXNzLiovcmVkaXItdG8vNTAyIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgdmlhIGh0dHAgYWx0ZXJuYXRlcyB3b3JrcycgJworCXBhcmVudD0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2FsdC1wYXJlbnQuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlICIkcGFyZW50IiAmJgorCWdpdCAtQyAiJHBhcmVudCIgLS13b3JrLXRyZWU9LiBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmb28gJiYKKwlnaXQgLUMgIiRwYXJlbnQiIHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCWNvbW1pdD0kKGdpdCAtQyAiJHBhcmVudCIgcmV2LXBhcnNlIEhFQUQpICYmCisKKwljaGlsZD0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2FsdC1jaGlsZC5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgIiRjaGlsZCIgJiYKKwllY2hvICIuLi8uLi9hbHQtcGFyZW50LmdpdC9vYmplY3RzIiA+IiRjaGlsZC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIgJiYKKwlnaXQgLUMgIiRjaGlsZCIgdXBkYXRlLXJlZiBIRUFEICRjb21taXQgJiYKKwlnaXQgLUMgIiRjaGlsZCIgdXBkYXRlLXNlcnZlci1pbmZvICYmCisKKwlnaXQgLWMgaHR0cC5mb2xsb3dyZWRpcmVjdHM9dHJ1ZSBjbG9uZSAiJEhUVFBEX1VSTC9kdW1iL2FsdC1jaGlsZC5naXQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU1MS1odHRwLWZldGNoLXNtYXJ0LnNoIGIvdC90NTU1MS1odHRwLWZldGNoLXNtYXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3ODhhZWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTUxLWh0dHAtZmV0Y2gtc21hcnQuc2gKQEAgLTAsMCArMSw0NzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHNtYXJ0IGZldGNoaW5nIG92ZXIgaHR0cCB2aWEgaHR0cC1iYWNrZW5kJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeScgJworCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGh0dHAtYWNjZXNzaWJsZSBiYXJlIHJlcG9zaXRvcnknICcKKwlta2RpciAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJIGdpdCAtLWJhcmUgaW5pdAorCSkgJiYKKwlnaXQgcmVtb3RlIGFkZCBwdWJsaWMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIKKycKKworc2V0dXBfYXNrcGFzc19oZWxwZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgaHR0cCByZXBvc2l0b3J5JyAnCisJY2F0ID5leHAgPDwtXEVPRiAmJgorCT4gR0VUIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEKKwk+IEFjY2VwdDogKi8qCisJPiBBY2NlcHQtRW5jb2Rpbmc6IEVOQ09ESU5HUworCT4gUHJhZ21hOiBuby1jYWNoZQorCTwgSFRUUC8xLjEgMjAwIE9LCisJPCBQcmFnbWE6IG5vLWNhY2hlCisJPCBDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGUKKwk8IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stYWR2ZXJ0aXNlbWVudAorCT4gUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xCisJPiBBY2NlcHQtRW5jb2Rpbmc6IEVOQ09ESU5HUworCT4gQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXF1ZXN0CisJPiBBY2NlcHQ6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLXJlc3VsdAorCT4gQ29udGVudC1MZW5ndGg6IHh4eAorCTwgSFRUUC8xLjEgMjAwIE9LCisJPCBQcmFnbWE6IG5vLWNhY2hlCisJPCBDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGUKKwk8IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stcmVzdWx0CisJRU9GCisJR0lUX1RSQUNFX0NVUkw9dHJ1ZSBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQlnaXQgY2xvbmUgLS1xdWlldCAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IGNsb25lIDI+ZXJyICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlICYmCisJdHIgJ1wnJ1wwMTUnXCcnIFEgPGVyciB8CisJc2VkIC1lICIKKwkJcy9RXCQvLworCQkvXlsqXSAvZAorCQkvXj09IEluZm86L2QKKwkJL149PiBTZW5kIGhlYWRlciwgL2QKKwkJL149PiBTZW5kIGhlYWRlcjokL2QKKwkJL148PSBSZWN2IGhlYWRlciwgL2QKKwkJL148PSBSZWN2IGhlYWRlcjokL2QKKwkJcy89PiBTZW5kIGhlYWRlcjogLy8KKwkJcy89IFJlY3YgaGVhZGVyOi8vCisJCS9ePD0gUmVjdiBkYXRhL2QKKwkJL149PiBTZW5kIGRhdGEvZAorCQkvXiQvZAorCQkvXjwgJC9kCisKKwkJL15bXj48XS97CisJCQlzL14vPiAvCisJCX0KKworCQkvXj4gVXNlci1BZ2VudDogL2QKKwkJL14+IEhvc3Q6IC9kCisJCS9ePiBQT1NUIC8sJCB7CisJCQkvXj4gQWNjZXB0OiBbKl1cXC9bKl0vZAorCQl9CisJCXMvXj4gQ29udGVudC1MZW5ndGg6IC4qLz4gQ29udGVudC1MZW5ndGg6IHh4eC8KKwkJL14+IDAwLi53YW50IC9kCisJCS9ePiAwMC4qZG9uZS9kCisKKwkJL148IFNlcnZlcjogL2QKKwkJL148IEV4cGlyZXM6IC9kCisJCS9ePCBEYXRlOiAvZAorCQkvXjwgQ29udGVudC1MZW5ndGg6IC9kCisJCS9ePCBUcmFuc2Zlci1FbmNvZGluZzogL2QKKwkiID5hY3R1YWwgJiYKKworCSMgTkVFRFNXT1JLOiBJZiB0aGUgb3ZlcnNwZWNpZmljYXRpb24gb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBpcyByZWR1Y2VkLCB3ZQorCSMgbWlnaHQgYmUgYWJsZSB0byBydW4gdGhpcyB0ZXN0IGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucy4KKwlpZiB0ZXN0ICIkR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTiIgPSAwCisJdGhlbgorCQlzZWQgLWUgInMvXj4gQWNjZXB0LUVuY29kaW5nOiAuKi8+IEFjY2VwdC1FbmNvZGluZzogRU5DT0RJTkdTLyIgXAorCQkJCWFjdHVhbCA+YWN0dWFsLnNtdWRnZWQgJiYKKwkJdGVzdF9jbXAgZXhwIGFjdHVhbC5zbXVkZ2VkICYmCisKKwkJZ3JlcCAiQWNjZXB0LUVuY29kaW5nOi4qZ3ppcCIgYWN0dWFsID5hY3R1YWwuZ3ppcCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbC5nemlwCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgaHR0cCcgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCBwdXNoIHB1YmxpYyAmJgorCShjZCBjbG9uZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlZCB1cGxvYWQtcGFjayBzZXJ2aWNlJyAnCisJY2F0ID5leHAgPDwtXEVPRiAmJgorCUdFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKKwlQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCisJR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorCVBPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKKwlFT0YKKworCSMgTkVFRFNXT1JLOiBJZiB0aGUgb3ZlcnNwZWNpZmljYXRpb24gb2YgdGhlIGV4cGVjdGVkIHJlc3VsdCBpcyByZWR1Y2VkLCB3ZQorCSMgbWlnaHQgYmUgYWJsZSB0byBydW4gdGhpcyB0ZXN0IGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucy4KKwlpZiB0ZXN0ICIkR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTiIgPSAwCisJdGhlbgorCQljaGVja19hY2Nlc3NfbG9nIGV4cAorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyByZWRpcmVjdHMgKDMwMSknICcKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC1yZWRpci1wZXJtL3JlcG8uZ2l0IC0tcXVpZXQgcmVwby1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyByZWRpcmVjdHMgKDMwMiknICcKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC1yZWRpci10ZW1wL3JlcG8uZ2l0IC0tcXVpZXQgcmVwby10CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0cyByZS1yb290IGZ1cnRoZXIgcmVxdWVzdHMnICcKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC1yZWRpci1saW1pdGVkL3JlcG8uZ2l0IHJlcG8tcmVkaXItbGltaXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1yb290aW5nIGRpZXMgb24gaW5zYW5lIHNjaGVtZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgJEhUVFBEX1VSTC9pbnNhbmUtcmVkaXIvcmVwby5naXQgaW5zYW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gcGFzc3dvcmQtcHJvdGVjdGVkIHJlcG9zaXRvcnknICcKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgIiRIVFRQRF9VUkwvYXV0aC9zbWFydC9yZXBvLmdpdCIgc21hcnQtYXV0aCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0ICYmCisJZ2l0IC0tZ2l0LWRpcj1zbWFydC1hdXRoIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIGF1dGgtb25seS1mb3ItcHVzaCByZXBvc2l0b3J5JyAnCisJZWNobyB0d28gPmV4cGVjdCAmJgorCXNldF9hc2twYXNzIHdyb25nICYmCisJZ2l0IGNsb25lIC0tYmFyZSAiJEhUVFBEX1VSTC9hdXRoLXB1c2gvc21hcnQvcmVwby5naXQiIHNtYXJ0LW5vYXV0aCAmJgorCWV4cGVjdF9hc2twYXNzIG5vbmUgJiYKKwlnaXQgLS1naXQtZGlyPXNtYXJ0LW5vYXV0aCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSBhdXRoLW9ubHktZm9yLW9iamVjdHMgcmVwb3NpdG9yeScgJworCWVjaG8gdHdvID5leHBlY3QgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAiJEhUVFBEX1VSTC9hdXRoLWZldGNoL3NtYXJ0L3JlcG8uZ2l0IiBoYWxmLWF1dGggJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCWdpdCAtLWdpdC1kaXI9aGFsZi1hdXRoIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1vcCBoYWxmLWF1dGggZmV0Y2ggZG9lcyBub3QgcmVxdWlyZSBhIHBhc3N3b3JkJyAnCisJc2V0X2Fza3Bhc3Mgd3JvbmcgJiYKKworCSMgTkVFRFNXT1JLOiBXaGVuIHVzaW5nIEhUVFAoUyksIHByb3RvY29sIHYwIHN1cHBvcnRzIGEgImhhbGYtYXV0aCIKKwkjIGNvbmZpZ3VyYXRpb24gd2l0aCBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCBvbmx5IHdoZW4gZG93bmxvYWRpbmcKKwkjIG9iamVjdHMgYW5kIG5vdCByZWZzLCBieSBoYXZpbmcgdGhlIEhUVFAgc2VydmVyIG9ubHkgcmVxdWlyZQorCSMgYXV0aGVudGljYXRpb24gZm9yIHRoZSAiZ2l0LXVwbG9hZC1wYWNrIiBwYXRoIGFuZCBub3QgImluZm8vcmVmcyIuCisJIyBUaGlzIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHByb3RvY29sIHYyLCBzaW5jZSBib3RoIG9iamVjdHMgYW5kIHJlZnMKKwkjIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSAiZ2l0LXVwbG9hZC1wYWNrIiBwYXRoLiBBIHNvbHV0aW9uIHRvIHRoaXMgaXMKKwkjIHRvIHRlYWNoIHRoZSBzZXJ2ZXIgYW5kIGNsaWVudCB0byBiZSBhYmxlIHRvIGlubGluZSBscy1yZWZzIHJlcXVlc3RzCisJIyBhcyBhbiBFeHRyYSBQYXJhbWV0ZXIgKHNlZSBwYWNrLXByb3RvY29sLnR4dCksIHNvIHRoYXQgImluZm8vcmVmcyIKKwkjIGNhbiBzZXJ2ZSByZWZzLCBqdXN0IGxpa2UgaXQgZG9lcyBpbiBwcm90b2NvbCB2MC4KKwlHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgZ2l0IC0tZ2l0LWRpcj1oYWxmLWF1dGggZmV0Y2ggJiYKKwlleHBlY3RfYXNrcGFzcyBub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0cyBzZW5kIGF1dGggdG8gbmV3IGxvY2F0aW9uJyAnCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCAtYyBjcmVkZW50aWFsLnVzZUh0dHBQYXRoPXRydWUgXAorCSAgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC1yZWRpci1hdXRoL3JlcG8uZ2l0IHJlcG8tcmVkaXItYXV0aCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0IGF1dGgvc21hcnQvcmVwby5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWJsZSBkdW1iIGh0dHAgb24gc2VydmVyJyAnCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgXAorCQljb25maWcgaHR0cC5nZXRhbnlmaWxlIGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TTUFSVF9IVFRQIGNhbiBkaXNhYmxlIHNtYXJ0IGh0dHAnICcKKwkoR0lUX1NNQVJUX0hUVFA9MCAmJgorCSBleHBvcnQgR0lUX1NNQVJUX0hUVFAgJiYKKwkgY2QgY2xvbmUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIENvbnRlbnQtVHlwZSByZWplY3RlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAkSFRUUERfVVJML2Jyb2tlbl9zbWFydC9yZXBvLmdpdCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCB2YWxpZDoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbmFtZXNwYWNlZCByZWZzJyAnCisJdGVzdF9jb21taXQgbmFtZXNwYWNlZCAmJgorCWdpdCBwdXNoIHB1YmxpYyBIRUFEOnJlZnMvbmFtZXNwYWNlcy9ucy9yZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIFwKKwkJc3ltYm9saWMtcmVmIHJlZnMvbmFtZXNwYWNlcy9ucy9IRUFEIHJlZnMvbmFtZXNwYWNlcy9ucy9yZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbWFydCBjbG9uZSByZXNwZWN0cyBuYW1lc3BhY2UnICcKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkwvc21hcnRfbmFtZXNwYWNlL3JlcG8uZ2l0IiBucy1zbWFydCAmJgorCWVjaG8gbmFtZXNwYWNlZCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1ucy1zbWFydC8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdW1iIGNsb25lIHZpYSBodHRwLWJhY2tlbmQgcmVzcGVjdHMgbmFtZXNwYWNlJyAnCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgXAorCQljb25maWcgaHR0cC5nZXRhbnlmaWxlIHRydWUgJiYKKwlHSVRfU01BUlRfSFRUUD0wIGdpdCBjbG9uZSBcCisJCSIkSFRUUERfVVJML3NtYXJ0X25hbWVzcGFjZS9yZXBvLmdpdCIgbnMtZHVtYiAmJgorCWVjaG8gbmFtZXNwYWNlZCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1ucy1kdW1iLy5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nvb2tpZXMgc3RvcmVkIGluIGh0dHAuY29va2llZmlsZSB3aGVuIGh0dHAuc2F2ZWNvb2tpZXMgc2V0JyAnCisJY2F0ID5jb29raWVzLnR4dCA8PC1cRU9GICYmCisJMTI3LjAuMC4xCUZBTFNFCS9zbWFydF9jb29raWVzLwlGQUxTRQkwCW90aGVybmFtZQlvdGhlcnZhbHVlCisJRU9GCisJc29ydCA+ZXhwZWN0X2Nvb2tpZXMudHh0IDw8LVxFT0YgJiYKKworCTEyNy4wLjAuMQlGQUxTRQkvc21hcnRfY29va2llcy8JRkFMU0UJMAlvdGhlcm5hbWUJb3RoZXJ2YWx1ZQorCTEyNy4wLjAuMQlGQUxTRQkvc21hcnRfY29va2llcy9yZXBvLmdpdC9pbmZvLwlGQUxTRQkwCW5hbWUJdmFsdWUKKwlFT0YKKwlnaXQgY29uZmlnIGh0dHAuY29va2llZmlsZSBjb29raWVzLnR4dCAmJgorCWdpdCBjb25maWcgaHR0cC5zYXZlY29va2llcyB0cnVlICYmCisJZ2l0IGxzLXJlbW90ZSAkSFRUUERfVVJML3NtYXJ0X2Nvb2tpZXMvcmVwby5naXQgbWFzdGVyICYmCisKKwkjIE5FRURTV09SSzogSWYgdGhlIG92ZXJzcGVjaWZpY2F0aW9uIG9mIHRoZSBleHBlY3RlZCByZXN1bHQgaXMgcmVkdWNlZCwgd2UKKwkjIG1pZ2h0IGJlIGFibGUgdG8gcnVuIHRoaXMgdGVzdCBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMuCisJaWYgdGVzdCAiJEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT04iID0gMAorCXRoZW4KKwkJdGFpbCAtMyBjb29raWVzLnR4dCB8IHNvcnQgPmNvb2tpZXNfdGFpbC50eHQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0X2Nvb2tpZXMudHh0IGNvb2tpZXNfdGFpbC50eHQKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFuc2Zlci5oaWRlcmVmcyB3b3JrcyBvdmVyIHNtYXJ0LWh0dHAnICcKKwl0ZXN0X2NvbW1pdCBoaWRkZW4gJiYKKwl0ZXN0X2NvbW1pdCB2aXNpYmxlICYmCisJZ2l0IHB1c2ggcHVibGljIEhFQUReOnJlZnMvaGVhZHMvYSBIRUFEOnJlZnMvaGVhZHMvYiAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIFwKKwkJY29uZmlnIHRyYW5zZmVyLmhpZGVyZWZzIHJlZnMvaGVhZHMvYSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQiIGhpZGRlbi5naXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgaGlkZGVuLmdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYSAmJgorCWdpdCAtQyBoaWRkZW4uZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiCisnCisKKyMgY3JlYXRlIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdGFncywgbnVtYmVyZWQgZnJvbSB0YWctJDEgdG8gdGFnLSQyCitjcmVhdGVfdGFncyAoKSB7CisJcm0gLWYgbWFya3MgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxICIkMSIgIiQyIikKKwlkbworCQkjIGRvbid0IHVzZSBoZXJlLWRvYywgYmVjYXVzZSBpdCByZXF1aXJlcyBhIHByb2Nlc3MKKwkJIyBwZXIgbG9vcCBpdGVyYXRpb24KKwkJZWNobyAiY29tbWl0IHJlZnMvaGVhZHMvdG9vLW1hbnktcmVmcy0kMSIgJiYKKwkJZWNobyAibWFyayA6JGkiICYmCisJCWVjaG8gImNvbW1pdHRlciBnaXQgPGdpdEBleGFtcGxlLmNvbT4gJGkgKzAwMDAiICYmCisJCWVjaG8gImRhdGEgMCIgJiYKKwkJZWNobyAiTSA2NDQgaW5saW5lIGJsYS50eHQiICYmCisJCWVjaG8gImRhdGEgNCIgJiYKKwkJZWNobyAiYmxhIiAmJgorCQkjIG1ha2UgZXZlcnkgY29tbWl0IGRhbmdsaW5nIGJ5IGFsd2F5cworCQkjIHJld2luZGluZyB0aGUgYnJhbmNoIGFmdGVyIGVhY2ggY29tbWl0CisJCWVjaG8gInJlc2V0IHJlZnMvaGVhZHMvdG9vLW1hbnktcmVmcy0kMSIgJiYKKwkJZWNobyAiZnJvbSA6JDEiCisJZG9uZSB8IGdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcyAmJgorCisJIyBub3cgYXNzaWduIHRhZ3MgdG8gYWxsIHRoZSBkYW5nbGluZyBjb21taXRzIHdlIGNyZWF0ZWQgYWJvdmUKKwl0YWc9JChwZXJsIC1lICJwcmludCBcImJsYVwiIHggMzAiKSAmJgorCXNlZCAtZSAic3xeOlwoW14gXSpcKSBcKC4qXCkkfFwyIHJlZnMvdGFncy8kdGFnLVwxfCIgPG1hcmtzID4+cGFja2VkLXJlZnMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIDIsMDAwIHRhZ3MgaW4gdGhlIHJlcG8nICcKKwkoCisJCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCQljcmVhdGVfdGFncyAxIDIwMDAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ01ETElORV9MSU1JVCBcCisJJ2Nsb25lIHRoZSAyLDAwMCB0YWcgcmVwbyB0byBjaGVjayBPUyBjb21tYW5kIGxpbmUgb3ZlcmZsb3cnICcKKwlydW5fd2l0aF9saW1pdGVkX2NtZGxpbmUgZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgdG9vLW1hbnktcmVmcyAmJgorCSgKKwkJY2QgdG9vLW1hbnktcmVmcyAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+YWN0dWFsICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIwMDAgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXJnZSBmZXRjaC1wYWNrIHJlcXVlc3RzIGNhbiBiZSBzZW50IHVzaW5nIGNodW5rZWQgZW5jb2RpbmcnICcKKwlHSVRfVFJBQ0VfQ1VSTD10cnVlIGdpdCAtYyBodHRwLnBvc3RidWZmZXI9NjU1MzYgXAorCQljbG9uZSAtLWJhcmUgIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQiIHNwbGl0LmdpdCAyPmVyciAmJgorCWdyZXAgIl49PiBTZW5kIGhlYWRlcjogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFsbG93cmVhY2hhYmxlc2hhMWlud2FudCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRlc3RfcmVhY2hhYmxlLmdpdCIgJiYKKwlzZXJ2ZXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJbWFzdGVyX3NoYT0kKGdpdCAtQyAiJHNlcnZlciIgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCWdpdCAtQyAiJHNlcnZlciIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dyZWFjaGFibGVzaGExaW53YW50IDEgJiYKKworCWdpdCBpbml0IC0tYmFyZSB0ZXN0X3JlYWNoYWJsZS5naXQgJiYKKwlnaXQgLUMgdGVzdF9yZWFjaGFibGUuZ2l0IHJlbW90ZSBhZGQgb3JpZ2luICIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IiAmJgorCWdpdCAtQyB0ZXN0X3JlYWNoYWJsZS5naXQgZmV0Y2ggb3JpZ2luICIkbWFzdGVyX3NoYSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhbGxvd3JlYWNoYWJsZXNoYTFpbndhbnQgd2l0aCB1bnJlYWNoYWJsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRlc3RfcmVhY2hhYmxlLmdpdDsgZ2l0IHJlc2V0IC0taGFyZCAkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisKKwkjY3JlYXRlIHVucmVhY2hhYmxlIHNoYQorCWVjaG8gY29udGVudCA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwlnaXQgcHVzaCBwdWJsaWMgSEVBRDpyZWZzL2hlYWRzL2Rvb21lZCAmJgorCWdpdCBwdXNoIHB1YmxpYyA6cmVmcy9oZWFkcy9kb29tZWQgJiYKKworCXNlcnZlcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwltYXN0ZXJfc2hhPSQoZ2l0IC1DICIkc2VydmVyIiByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJZ2l0IC1DICIkc2VydmVyIiBjb25maWcgdXBsb2FkcGFjay5hbGxvd3JlYWNoYWJsZXNoYTFpbndhbnQgMSAmJgorCisJZ2l0IGluaXQgLS1iYXJlIHRlc3RfcmVhY2hhYmxlLmdpdCAmJgorCWdpdCAtQyB0ZXN0X3JlYWNoYWJsZS5naXQgcmVtb3RlIGFkZCBvcmlnaW4gIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQiICYmCisJIyBTb21lIHByb3RvY29sIHZlcnNpb25zIChlLmcuIDIpIHN1cHBvcnQgZmV0Y2hpbmcKKwkjIHVuYWR2ZXJ0aXNlZCBvYmplY3RzLCBzbyByZXN0cmljdCB0aGlzIHRlc3QgdG8gdjAuCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBcCisJCWdpdCAtQyB0ZXN0X3JlYWNoYWJsZS5naXQgZmV0Y2ggb3JpZ2luICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYWxsb3dhbnlzaGExaW53YW50IHdpdGggdW5yZWFjaGFibGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0ZXN0X3JlYWNoYWJsZS5naXQ7IGdpdCByZXNldCAtLWhhcmQgJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCisJI2NyZWF0ZSB1bnJlYWNoYWJsZSBzaGEKKwllY2hvIGNvbnRlbnQgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljIEhFQUQ6cmVmcy9oZWFkcy9kb29tZWQgJiYKKwlnaXQgcHVzaCBwdWJsaWMgOnJlZnMvaGVhZHMvZG9vbWVkICYmCisKKwlzZXJ2ZXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJbWFzdGVyX3NoYT0kKGdpdCAtQyAiJHNlcnZlciIgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCWdpdCAtQyAiJHNlcnZlciIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dyZWFjaGFibGVzaGExaW53YW50IDEgJiYKKworCWdpdCBpbml0IC0tYmFyZSB0ZXN0X3JlYWNoYWJsZS5naXQgJiYKKwlnaXQgLUMgdGVzdF9yZWFjaGFibGUuZ2l0IHJlbW90ZSBhZGQgb3JpZ2luICIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IiAmJgorCSMgU29tZSBwcm90b2NvbCB2ZXJzaW9ucyAoZS5nLiAyKSBzdXBwb3J0IGZldGNoaW5nCisJIyB1bmFkdmVydGlzZWQgb2JqZWN0cywgc28gcmVzdHJpY3QgdGhpcyB0ZXN0IHRvIHYwLgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQlnaXQgLUMgdGVzdF9yZWFjaGFibGUuZ2l0IGZldGNoIG9yaWdpbiAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCisJZ2l0IC1DICIkc2VydmVyIiBjb25maWcgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCWdpdCAtQyB0ZXN0X3JlYWNoYWJsZS5naXQgZmV0Y2ggb3JpZ2luICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFICdodHRwIGNhbiBoYW5kbGUgZW5vcm1vdXMgcmVmIG5lZ290aWF0aW9uJyAnCisJKAorCQljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkJY3JlYXRlX3RhZ3MgMjAwMSA1MDAwMAorCSkgJiYKKwlnaXQgLUMgdG9vLW1hbnktcmVmcyBmZXRjaCAtcSAtLXRhZ3MgJiYKKwkoCisJCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCQljcmVhdGVfdGFncyA1MDAwMSAxMDAwMDAKKwkpICYmCisJZ2l0IC1DIHRvby1tYW55LXJlZnMgZmV0Y2ggLXEgLS10YWdzICYmCisJZ2l0IC1DIHRvby1tYW55LXJlZnMgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+dGFncyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEwMDAwMCB0YWdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBodHRwIGhlYWRlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgaHR0cC5leHRyYWhlYWRlcj0ieC1tYWdpYy10d286IGNhZGFicmEiIFwKKwkJZmV0Y2ggIiRIVFRQRF9VUkwvc21hcnRfaGVhZGVycy9yZXBvLmdpdCIgJiYKKwlnaXQgLWMgaHR0cC5leHRyYWhlYWRlcj0ieC1tYWdpYy1vbmU6IGFicmEiIFwKKwkgICAgLWMgaHR0cC5leHRyYWhlYWRlcj0ieC1tYWdpYy10d286IGNhZGFicmEiIFwKKwkgICAgZmV0Y2ggIiRIVFRQRF9VUkwvc21hcnRfaGVhZGVycy9yZXBvLmdpdCIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDE2MDAwMCwkKGdpdCByZXYtcGFyc2UgSEVBRCksc3ViICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGggc3ViICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCBcCisJCSIkSFRUUERfVVJML3NtYXJ0X2hlYWRlcnMvcmVwby5naXQiICYmCisJZ2l0IHN1Ym1vZHVsZSBpbml0IHN1YiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1YiAmJgorCWdpdCAtYyBodHRwLmV4dHJhaGVhZGVyPSJ4LW1hZ2ljLW9uZTogYWJyYSIgXAorCSAgICAtYyBodHRwLmV4dHJhaGVhZGVyPSJ4LW1hZ2ljLXR3bzogY2FkYWJyYSIgXAorCQlzdWJtb2R1bGUgdXBkYXRlIHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBmZXRjaCBjb21tYW5kIGluIHJlbW90ZS1jdXJsIHVwZGF0ZXMgcmVmcycgJworCVNFUlZFUj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90d29icmFuY2giICYmCisJcm0gLXJmICIkU0VSVkVSIiBjbGllbnQgJiYKKworCWdpdCBpbml0ICIkU0VSVkVSIiAmJgorCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBmb28gJiYKKwlnaXQgLUMgIiRTRVJWRVIiIHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9hbm90aGVyYnJhbmNoIGZvbyAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvdHdvYnJhbmNoIGNsaWVudCAmJgorCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIGJhciAmJgorCWdpdCAtQyBjbGllbnQgLWMgcHJvdG9jb2wudmVyc2lvbj0wIGZldGNoICYmCisKKwlnaXQgLUMgIiRTRVJWRVIiIHJldi1wYXJzZSBtYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCAtQyBjbGllbnQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYnkgU0hBLTEgd2l0aG91dCB0YWcgZm9sbG93aW5nJyAnCisJU0VSVkVSPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NlcnZlciIgJiYKKwlybSAtcmYgIiRTRVJWRVIiIGNsaWVudCAmJgorCisJZ2l0IGluaXQgIiRTRVJWRVIiICYmCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIGZvbyAmJgorCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvc2VydmVyIGNsaWVudCAmJgorCisJdGVzdF9jb21taXQgLUMgIiRTRVJWRVIiIGJhciAmJgorCWdpdCAtQyAiJFNFUlZFUiIgcmV2LXBhcnNlIGJhciA+YmFyX2hhc2ggJiYKKwlnaXQgLUMgY2xpZW50IC1jIHByb3RvY29sLnZlcnNpb249MCBmZXRjaCBcCisJCS0tbm8tdGFncyBvcmlnaW4gJChjYXQgYmFyX2hhc2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9SRURBQ1RfQ09PS0lFUyByZWRhY3RzIGNvb2tpZXMnICcKKwlybSAtcmYgY2xvbmUgJiYKKwllY2hvICJTZXQtQ29va2llOiBGb289MSIgPmNvb2tpZXMgJiYKKwllY2hvICJTZXQtQ29va2llOiBCYXI9MiIgPj5jb29raWVzICYmCisJR0lUX1RSQUNFX0NVUkw9dHJ1ZSBHSVRfUkVEQUNUX0NPT0tJRVM9QmFyLEJheiBcCisJCWdpdCAtYyAiaHR0cC5jb29raWVGaWxlPSQocHdkKS9jb29raWVzIiBjbG9uZSBcCisJCSRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgY2xvbmUgMj5lcnIgJiYKKwlncmVwICJDb29raWU6LipGb289MSIgZXJyICYmCisJZ3JlcCAiQ29va2llOi4qQmFyPTxyZWRhY3RlZD4iIGVyciAmJgorCSEgZ3JlcCAiQ29va2llOi4qQmFyPTIiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfUkVEQUNUX0NPT0tJRVMgaGFuZGxlcyBlbXB0eSB2YWx1ZXMnICcKKwlybSAtcmYgY2xvbmUgJiYKKwllY2hvICJTZXQtQ29va2llOiBGb289IiA+Y29va2llcyAmJgorCUdJVF9UUkFDRV9DVVJMPXRydWUgR0lUX1JFREFDVF9DT09LSUVTPUZvbyBcCisJCWdpdCAtYyAiaHR0cC5jb29raWVGaWxlPSQocHdkKS9jb29raWVzIiBjbG9uZSBcCisJCSRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgY2xvbmUgMj5lcnIgJiYKKwlncmVwICJDb29raWU6LipGb289PHJlZGFjdGVkPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9UUkFDRV9DVVJMX05PX0RBVEEgcHJldmVudHMgZGF0YSBmcm9tIGJlaW5nIHRyYWNlZCcgJworCXJtIC1yZiBjbG9uZSAmJgorCUdJVF9UUkFDRV9DVVJMPXRydWUgXAorCQlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCBjbG9uZSAyPmVyciAmJgorCWdyZXAgIj0+IFNlbmQgZGF0YSIgZXJyICYmCisKKwlybSAtcmYgY2xvbmUgJiYKKwlHSVRfVFJBQ0VfQ1VSTD10cnVlIEdJVF9UUkFDRV9DVVJMX05PX0RBVEE9MSBcCisJCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IGNsb25lIDI+ZXJyICYmCisJISBncmVwICI9PiBTZW5kIGRhdGEiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXJ2ZXItc2lkZSBlcnJvciBkZXRlY3RlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAkSFRUUERfVVJML2Vycm9yX3NtYXJ0L3JlcG8uZ2l0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAic2VydmVyLXNpZGUgZXJyb3IiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NTItc2tpcHBpbmctZmV0Y2gtbmVnb3RpYXRvci5zaCBiL3QvdDU1NTItc2tpcHBpbmctZmV0Y2gtbmVnb3RpYXRvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNTZjNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU1Mi1za2lwcGluZy1mZXRjaC1uZWdvdGlhdG9yLnNoCkBAIC0wLDAgKzEsMjA5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBza2lwcGluZyBmZXRjaCBuZWdvdGlhdG9yJworLiAuL3Rlc3QtbGliLnNoCisKK2hhdmVfc2VudCAoKSB7CisJd2hpbGUgdGVzdCAiJCMiIC1uZSAwCisJZG8KKwkJZ3JlcCAiZmV0Y2g+IGhhdmUgJChnaXQgLUMgY2xpZW50IHJldi1wYXJzZSAkMSkiIHRyYWNlCisJCWlmIHRlc3QgJD8gLW5lIDAKKwkJdGhlbgorCQkJZWNobyAiTm8gaGF2ZSAkKGdpdCAtQyBjbGllbnQgcmV2LXBhcnNlICQxKSAoJDEpIgorCQkJcmV0dXJuIDEKKwkJZmkKKwkJc2hpZnQKKwlkb25lCit9CisKK2hhdmVfbm90X3NlbnQgKCkgeworCXdoaWxlIHRlc3QgIiQjIiAtbmUgMAorCWRvCisJCWdyZXAgImZldGNoPiBoYXZlICQoZ2l0IC1DIGNsaWVudCByZXYtcGFyc2UgJDEpIiB0cmFjZQorCQlpZiB0ZXN0ICQ/IC1lcSAwCisJCXRoZW4KKwkJCXJldHVybiAxCisJCWZpCisJCXNoaWZ0CisJZG9uZQorfQorCisjIHRyYWNlX2ZldGNoIDxjbGllbnRfZGlyPiA8c2VydmVyX2Rpcj4gW2FyZ3NdCisjCisjIFRyYWNlIHRoZSBwYWNrZXQgb3V0cHV0IG9mIGZldGNoLCBidXQgbWFrZSBzdXJlIHdlIGRpc2FibGUgdGhlIHZhcmlhYmxlCisjIGluIHRoZSBjaGlsZCB1cGxvYWQtcGFjaywgc28gd2UgZG9uJ3QgY29tYmluZSB0aGUgcmVzdWx0cyBpbiB0aGUgc2FtZSBmaWxlLgordHJhY2VfZmV0Y2ggKCkgeworCWNsaWVudD0kMTsgc2hpZnQKKwlzZXJ2ZXI9JDE7IHNoaWZ0CisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBcCisJZ2l0IC1DICIkY2xpZW50IiBmZXRjaCBcCisJICAtLXVwbG9hZC1wYWNrICd1bnNldCBHSVRfVFJBQ0VfUEFDS0VUOyBnaXQtdXBsb2FkLXBhY2snIFwKKwkgICIkc2VydmVyIiAiJEAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdHMgd2l0aCBubyBwYXJlbnRzIGFyZSBzZW50IHJlZ2FyZGxlc3Mgb2Ygc2tpcCBkaXN0YW5jZScgJworCWdpdCBpbml0IHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciB0b19mZXRjaCAmJgorCisJZ2l0IGluaXQgY2xpZW50ICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA3KQorCWRvCisJCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjJGkKKwlkb25lICYmCisKKwkjIFdlIHNlbmQ6ICJjNyIgKHNraXAgMSkgImM1IiAoc2tpcCAyKSAiYzIiIChza2lwIDQpLiBBZnRlciB0aGF0LCBzaW5jZQorCSMgImMxIiBoYXMgbm8gcGFyZW50LCBpdCBpcyBzdGlsbCBzZW50IGFzICJoYXZlIiBldmVuIHRob3VnaCBpdCB3b3VsZAorCSMgbm9ybWFsbHkgYmUgc2tpcHBlZC4KKwl0ZXN0X2NvbmZpZyAtQyBjbGllbnQgZmV0Y2gubmVnb3RpYXRpb25hbGdvcml0aG0gc2tpcHBpbmcgJiYKKwl0cmFjZV9mZXRjaCBjbGllbnQgIiQocHdkKS9zZXJ2ZXIiICYmCisJaGF2ZV9zZW50IGM3IGM1IGMyIGMxICYmCisJaGF2ZV9ub3Rfc2VudCBjNiBjNCBjMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIHR3byBza2lwcyBjb2xsaWRlLCBmYXZvciB0aGUgbGFyZ2VyIG9uZScgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlICYmCisJZ2l0IGluaXQgc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIHRvX2ZldGNoICYmCisKKwlnaXQgaW5pdCBjbGllbnQgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDExKQorCWRvCisJCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjJGkKKwlkb25lICYmCisJZ2l0IC1DIGNsaWVudCBjaGVja291dCBjNSAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjNXNpZGUgJiYKKworCSMgQmVmb3JlIHJlYWNoaW5nIGM1LCB3ZSBzZW5kICJjNXNpZGUiIChza2lwIDEpIGFuZCAiYzExIiAoc2tpcCAxKSAiYzkiCisJIyAoc2tpcCAyKSAiYzYiIChza2lwIDQpLiBUaGUgbGFyZ2VyIHNraXAgKHNraXAgNCkgdGFrZXMgcHJlY2VkZW5jZSwgc28KKwkjIHRoZSBuZXh0ICJoYXZlIiBzZW50IHdpbGwgYmUgImMxIiAoZnJvbSAiYzYiIHNraXAgNCkgYW5kIG5vdCAiYzQiCisJIyAoZnJvbSAiYzVzaWRlIiBza2lwIDEpLgorCXRlc3RfY29uZmlnIC1DIGNsaWVudCBmZXRjaC5uZWdvdGlhdGlvbmFsZ29yaXRobSBza2lwcGluZyAmJgorCXRyYWNlX2ZldGNoIGNsaWVudCAiJChwd2QpL3NlcnZlciIgJiYKKwloYXZlX3NlbnQgYzVzaWRlIGMxMSBjOSBjNiBjMSAmJgorCWhhdmVfbm90X3NlbnQgYzEwIGM4IGM3IGM1IGM0IGMzIGMyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSByZWYgYWR2ZXJ0aXNlbWVudCB0byBmaWx0ZXIgb3V0IGNvbW1pdHMnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSAmJgorCWdpdCBpbml0IHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBjMSAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBjMiAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBjMyAmJgorCWdpdCAtQyBzZXJ2ZXIgdGFnIC1kIGMxIGMyIGMzICYmCisKKwlnaXQgY2xvbmUgc2VydmVyIGNsaWVudCAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjNCAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjNSAmJgorCWdpdCAtQyBjbGllbnQgY2hlY2tvdXQgYzReXiAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjMnNpZGUgJiYKKworCWdpdCAtQyBzZXJ2ZXIgY2hlY2tvdXQgLS1vcnBoYW4gYW5vdGhlcmJyYW5jaCAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciB0b19mZXRjaCAmJgorCisJIyBUaGUgc2VydmVyIGFkdmVydGlzaW5nICJjMyIgKGFzICJyZWZzL2hlYWRzL21hc3RlciIpIG1lYW5zIHRoYXQgd2UgZG8KKwkjIG5vdCBuZWVkIHRvIHNlbmQgYW55IGFuY2VzdG9ycyBvZiAiYzMiLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBzZW5kICJjMyIKKwkjIGl0c2VsZi4KKwl0ZXN0X2NvbmZpZyAtQyBjbGllbnQgZmV0Y2gubmVnb3RpYXRpb25hbGdvcml0aG0gc2tpcHBpbmcgJiYKKworCSMgVGhlIHJlZiBhZHZlcnRpc2VtZW50IGl0c2VsZiBpcyBmaWx0ZXJlZCB3aGVuIHByb3RvY29sIHYyIGlzIHVzZWQsIHNvCisJIyB1c2UgdjAuCisJKAorCQlHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgJiYKKwkJZXhwb3J0IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT04gJiYKKwkJdHJhY2VfZmV0Y2ggY2xpZW50IG9yaWdpbiB0b19mZXRjaAorCSkgJiYKKwloYXZlX3NlbnQgYzUgYzReIGMyc2lkZSAmJgorCWhhdmVfbm90X3NlbnQgYzQgYzReXiBjNF5eXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGUgY2xvY2sgc2tldycgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlICYmCisJZ2l0IGluaXQgc2VydmVyICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIHRvX2ZldGNoICYmCisKKwlnaXQgaW5pdCBjbGllbnQgJiYKKworCSMgMiByZWd1bGFyIGNvbW1pdHMKKwl0ZXN0X3RpY2s9MjAwMDAwMDAwMCAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjMSAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBjMiAmJgorCisJIyA0IG9sZCBjb21taXRzCisJdGVzdF90aWNrPTEwMDAwMDAwMDAgJiYKKwlnaXQgLUMgY2xpZW50IGNoZWNrb3V0IGMxICYmCisJdGVzdF9jb21taXQgLUMgY2xpZW50IG9sZDEgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgb2xkMiAmJgorCXRlc3RfY29tbWl0IC1DIGNsaWVudCBvbGQzICYmCisJdGVzdF9jb21taXQgLUMgY2xpZW50IG9sZDQgJiYKKworCSMgImMyIiBhbmQgImMxIiBhcmUgcG9wcGVkIGZpcnN0LCB0aGVuICJvbGQ0IiB0byAib2xkMSIuICJvbGQxIiB3b3VsZAorCSMgbm9ybWFsbHkgYmUgc2tpcHBlZCwgYnV0IGlzIHRyZWF0ZWQgYXMgYSBjb21taXQgd2l0aG91dCBhIHBhcmVudCBoZXJlCisJIyBhbmQgc2VudCwgYmVjYXVzZSAoZHVlIHRvIGNsb2NrIHNrZXcpIGl0cyBvbmx5IHBhcmVudCBoYXMgYWxyZWFkeSBiZWVuCisJIyBwb3BwZWQgb2ZmIHRoZSBwcmlvcml0eSBxdWV1ZS4KKwl0ZXN0X2NvbmZpZyAtQyBjbGllbnQgZmV0Y2gubmVnb3RpYXRpb25hbGdvcml0aG0gc2tpcHBpbmcgJiYKKwl0cmFjZV9mZXRjaCBjbGllbnQgIiQocHdkKS9zZXJ2ZXIiICYmCisJaGF2ZV9zZW50IGMyIGMxIG9sZDQgb2xkMiBvbGQxICYmCisJaGF2ZV9ub3Rfc2VudCBvbGQzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBzZW5kICJoYXZlIiB3aXRoIGFuY2VzdG9ycyBvZiBjb21taXRzIHRoYXQgc2VydmVyIEFDS2VkJyAnCisJcm0gLXJmIHNlcnZlciBjbGllbnQgdHJhY2UgJiYKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgdG9fZmV0Y2ggJiYKKworCWdpdCBpbml0IGNsaWVudCAmJgorCWZvciBpIGluICQodGVzdF9zZXEgOCkKKwlkbworCQlnaXQgLUMgY2xpZW50IGNoZWNrb3V0IC0tb3JwaGFuIGIkaSAmJgorCQl0ZXN0X2NvbW1pdCAtQyBjbGllbnQgYiRpLmMwCisJZG9uZSAmJgorCWZvciBqIGluICQodGVzdF9zZXEgMTkpCisJZG8KKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSA4KQorCQlkbworCQkJZ2l0IC1DIGNsaWVudCBjaGVja291dCBiJGkgJiYKKwkJCXRlc3RfY29tbWl0IC1DIGNsaWVudCBiJGkuYyRqCisJCWRvbmUKKwlkb25lICYmCisKKwkjIENvcHkgdGhpcyBicmFuY2ggb3ZlciB0byB0aGUgc2VydmVyIGFuZCBhZGQgYSBjb21taXQgb24gaXQgc28gdGhhdCBpdAorCSMgaXMgcmVhY2hhYmxlIGJ1dCBub3QgYWR2ZXJ0aXNlZC4KKwlnaXQgLUMgc2VydmVyIGZldGNoIC0tbm8tdGFncyAiJChwd2QpL2NsaWVudCIgYjE6cmVmcy9oZWFkcy9iMSAmJgorCWdpdCAtQyBzZXJ2ZXIgY2hlY2tvdXQgYjEgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgY29tbWl0LW9uLWIxICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBjbGllbnQgZmV0Y2gubmVnb3RpYXRpb25hbGdvcml0aG0gc2tpcHBpbmcgJiYKKworCSMgTkVFRFNXT1JLOiBUaGUgbnVtYmVyIG9mICJoYXZlInMgc2VudCBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHRyYW5zcG9ydAorCSMgaXMgc3RhdGVmdWwuIElmIHRoZSBvdmVyc3BlY2lmaWNhdGlvbiBvZiB0aGUgcmVzdWx0IHdlcmUgcmVkdWNlZCwgdGhpcworCSMgdGVzdCBjb3VsZCBiZSB1c2VkIGZvciBib3RoIHN0YXRlZnVsIGFuZCBzdGF0ZWxlc3MgdHJhbnNwb3J0cy4KKwkoCisJCSMgRm9yY2UgcHJvdG9jb2wgdjAsIGluIHdoaWNoIGxvY2FsIHRyYW5zcG9ydCBpcyBzdGF0ZWZ1bCAoaW4KKwkJIyBwcm90b2NvbCB2MiBpdCBpcyBzdGF0ZWxlc3MpLgorCQlHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgJiYKKwkJZXhwb3J0IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT04gJiYKKwkJdHJhY2VfZmV0Y2ggY2xpZW50ICIkKHB3ZCkvc2VydmVyIiB0b19mZXRjaAorCSkgJiYKKwlncmVwICIgIGZldGNoIiB0cmFjZSAmJgorCisJIyBmZXRjaC1wYWNrIHNlbmRzIDIgcmVxdWVzdHMgZWFjaCBjb250YWluaW5nIDE2ICJoYXZlIiBsaW5lcyBiZWZvcmUKKwkjIHByb2Nlc3NpbmcgdGhlIGZpcnN0IHJlc3BvbnNlLiBJbiB0aGVzZSAyIHJlcXVlc3RzLCA0IGNvbW1pdHMgZnJvbQorCSMgZWFjaCBicmFuY2ggYXJlIHNlbnQuIEp1c3QgY2hlY2sgdGhlIGZpcnN0IGJyYW5jaC4KKwloYXZlX3NlbnQgYjEuYzE5IGIxLmMxNyBiMS5jMTQgYjEuYzkgJiYKKwloYXZlX25vdF9zZW50IGIxLmMxOCBiMS5jMTYgYjEuYzE1IGIxLmMxMyBiMS5jMTIgYjEuYzExIGIxLmMxMCAmJgorCisJIyBXaGlsZSBmZXRjaC1wYWNrIGlzIHByb2Nlc3NpbmcgdGhlIGZpcnN0IHJlc3BvbnNlLCBpdCBzaG91bGQgcmVhZCB0aGF0CisJIyB0aGUgc2VydmVyIEFDS3MgYjEuYzE5IGFuZCBiMS5jMTcuCisJZ3JlcCAiZmV0Y2g8IEFDSyAkKGdpdCAtQyBjbGllbnQgcmV2LXBhcnNlIGIxLmMxOSkgY29tbW9uIiB0cmFjZSAmJgorCWdyZXAgImZldGNoPCBBQ0sgJChnaXQgLUMgY2xpZW50IHJldi1wYXJzZSBiMS5jMTcpIGNvbW1vbiIgdHJhY2UgJiYKKworCSMgZmV0Y2gtcGFjayBzaG91bGQgdGh1cyBub3Qgc2VuZCBhbnkgbW9yZSBjb21taXRzIGluIHRoZSBiMSBicmFuY2gsIGJ1dAorCSMgc2hvdWxkIHN0aWxsIHNlbmQgdGhlIG90aGVycyAoaW4gdGhpcyB0ZXN0LCBqdXN0IGNoZWNrIGIyKS4KKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDAgOCkKKwlkbworCQloYXZlX25vdF9zZW50IGIxLmMkaQorCWRvbmUgJiYKKwloYXZlX3NlbnQgYjIuYzEgYjIuYzAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTUzLXNldC11cHN0cmVhbS5zaCBiL3QvdDU1NTMtc2V0LXVwc3RyZWFtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgxOTc1YWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTUzLXNldC11cHN0cmVhbS5zaApAQCAtMCwwICsxLDE3OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249JyJnaXQgZmV0Y2gvcHVsbCAtLXNldC11cHN0cmVhbSIgYmFzaWMgdGVzdHMuJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX2NvbmZpZyAoKSB7CisJcHJpbnRmICIlc1xuIiAiJDIiICIkMyIgPiJleHBlY3QuJDEiICYmCisJeworCQlnaXQgY29uZmlnICJicmFuY2guJDEucmVtb3RlIiAmJiBnaXQgY29uZmlnICJicmFuY2guJDEubWVyZ2UiCisJfSA+ImFjdHVhbC4kMSIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0LiQxIiAiYWN0dWFsLiQxIgorfQorCitjaGVja19jb25maWdfbWlzc2luZyAoKSB7CisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb25maWcgImJyYW5jaC4kMS5yZW1vdGUiICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb25maWcgImJyYW5jaC4kMS5tZXJnZSIKK30KKworY2xlYXJfY29uZmlnICgpIHsKKwlmb3IgYnJhbmNoIGluICIkQCI7IGRvCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQtYWxsICJicmFuY2guJGJyYW5jaC5yZW1vdGUiCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQtYWxsICJicmFuY2guJGJyYW5jaC5tZXJnZSIKKwlkb25lCit9CisKK2Vuc3VyZV9mcmVzaF91cHN0cmVhbSAoKSB7CisJcm0gLXJmIHBhcmVudCAmJiBnaXQgaW5pdCAtLWJhcmUgcGFyZW50Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUgcGFyZW50IGZldGNoJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisJZ2l0IHJlbW90ZSBhZGQgdXBzdHJlYW0gcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdCBvbiBtYXN0ZXIgYW5kIG90aGVyIGZldGNoJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IHB1c2ggdXBzdHJlYW0gbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJZ2l0IHB1c2ggdXBzdHJlYW0gb3RoZXIKKycKKworIyB0ZXN0cyBmb3IgZmV0Y2ggLS1zZXQtdXBzdHJlYW0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1zZXQtdXBzdHJlYW0gZG9lcyBub3Qgc2V0IHVwc3RyZWFtIHcvbyBicmFuY2gnICcKKwljbGVhcl9jb25maWcgbWFzdGVyIG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBmZXRjaCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG1hc3RlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIG1hc3RlciBzZXRzIGJyYW5jaCBtYXN0ZXIgYnV0IG5vdCBvdGhlcicgJworCWNsZWFyX2NvbmZpZyBtYXN0ZXIgb3RoZXIgJiYKKwlnaXQgZmV0Y2ggLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gbWFzdGVyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciB1cHN0cmVhbSByZWZzL2hlYWRzL21hc3RlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIG90aGVyIHNldHMgYnJhbmNoIG90aGVyJyAnCisJY2xlYXJfY29uZmlnIG1hc3RlciBvdGhlciAmJgorCWdpdCBmZXRjaCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBvdGhlciAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tc2V0LXVwc3RyZWFtIG1hc3RlcjpvdGhlciBkb2VzIG5vdCBzZXQgdGhlIGJyYW5jaCBvdGhlcjInICcKKwljbGVhcl9jb25maWcgb3RoZXIyICYmCisJZ2l0IGZldGNoIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIG1hc3RlcjpvdGhlcjIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1zZXQtdXBzdHJlYW0gaHR0cDovL25vc3VjaGRvbWFpbi5leGFtcGxlLmNvbSBmYWlscyB3aXRoIGludmFsaWQgdXJsJyAnCisJIyBtYXN0ZXIgZXhwbGljaXRseSBub3QgY2xlYXJlZCwgd2UgY2hlY2sgdGhhdCBpdCBpcyBub3QgdG91Y2hlZCBmcm9tIHByZXZpb3VzIHZhbHVlCisJY2xlYXJfY29uZmlnIG90aGVyIG90aGVyMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLXNldC11cHN0cmVhbSBodHRwOi8vbm9zdWNoZG9tYWluLmV4YW1wbGUuY29tICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1zZXQtdXBzdHJlYW0gd2l0aCB2YWxpZCBVUkwgc2V0cyB1cHN0cmVhbSB0byBVUkwnICcKKwljbGVhcl9jb25maWcgb3RoZXIgb3RoZXIyICYmCisJdXJsPSJmaWxlOi8vJyIkUFdEIiciICYmCisJZ2l0IGZldGNoIC0tc2V0LXVwc3RyZWFtICIkdXJsIiAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgIiR1cmwiIEhFQUQgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyMgorJworCisjIHRlc3RzIGZvciBwdWxsIC0tc2V0LXVwc3RyZWFtCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUgcGFyZW50IHB1bGwnICcKKwlnaXQgcmVtb3RlIHJtIHVwc3RyZWFtICYmCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisJZ2l0IHJlbW90ZSBhZGQgdXBzdHJlYW0gcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdCBvbiBtYXN0ZXIgYW5kIG90aGVyIHB1bGwnICcKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCWdpdCBwdXNoIC0tdGFncyB1cHN0cmVhbSBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyICYmCisJZ2l0IHB1c2ggdXBzdHJlYW0gb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBtYXN0ZXIgc2V0cyBicmFuY2ggbWFzdGVyIGJ1dCBub3Qgb3RoZXInICcKKwljbGVhcl9jb25maWcgbWFzdGVyIG90aGVyICYmCisJZ2l0IHB1bGwgLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gbWFzdGVyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciB1cHN0cmVhbSByZWZzL2hlYWRzL21hc3RlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1zZXQtdXBzdHJlYW0gbWFzdGVyOm90aGVyMiBkb2VzIG5vdCBzZXQgdGhlIGJyYW5jaCBvdGhlcjInICcKKwljbGVhcl9jb25maWcgb3RoZXIyICYmCisJZ2l0IHB1bGwgLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gbWFzdGVyOm90aGVyMiAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIG90aGVyIHNldHMgYnJhbmNoIG1hc3RlcicgJworCWNsZWFyX2NvbmZpZyBtYXN0ZXIgb3RoZXIgJiYKKwlnaXQgcHVsbCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBvdGhlciAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gdGFnIGRvZXMgbm90IHNldCB0aGUgdGFnJyAnCisJY2xlYXJfY29uZmlnIHRocmVlICYmCisJZ2l0IHB1bGwgLS10YWdzIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIHRocmVlICYmCisJY2hlY2tfY29uZmlnX21pc3NpbmcgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXNldC11cHN0cmVhbSBodHRwOi8vbm9zdWNoZG9tYWluLmV4YW1wbGUuY29tIGZhaWxzIHdpdGggaW52YWxpZCB1cmwnICcKKwkjIG1hc3RlciBleHBsaWNpdGx5IG5vdCBjbGVhcmVkLCB3ZSBjaGVjayB0aGF0IGl0IGlzIG5vdCB0b3VjaGVkIGZyb20gcHJldmlvdXMgdmFsdWUKKwljbGVhcl9jb25maWcgb3RoZXIgb3RoZXIyIHRocmVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1zZXQtdXBzdHJlYW0gaHR0cDovL25vc3VjaGRvbWFpbi5leGFtcGxlLmNvbSAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG90aGVyICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIyICYmCisJY2hlY2tfY29uZmlnX21pc3NpbmcgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXNldC11cHN0cmVhbSB1cHN0cmVhbSBIRUFEIHNldHMgYnJhbmNoIEhFQUQnICcKKwljbGVhcl9jb25maWcgbWFzdGVyIG90aGVyICYmCisJZ2l0IHB1bGwgLS1zZXQtdXBzdHJlYW0gdXBzdHJlYW0gSEVBRCAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gSEVBRCAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBwdWxsIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIEhFQUQgJiYKKwljaGVja19jb25maWcgb3RoZXIgdXBzdHJlYW0gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIHdpdGggbW9yZSB0aGFuIG9uZSBicmFuY2ggZG9lcyBub3RoaW5nJyAnCisJY2xlYXJfY29uZmlnIG1hc3RlciB0aHJlZSAmJgorCWdpdCBwdWxsIC0tc2V0LXVwc3RyZWFtIHVwc3RyZWFtIG1hc3RlciB0aHJlZSAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIG1hc3RlciAmJgorCWNoZWNrX2NvbmZpZ19taXNzaW5nIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1zZXQtdXBzdHJlYW0gd2l0aCB2YWxpZCBVUkwgc2V0cyB1cHN0cmVhbSB0byBVUkwnICcKKwljbGVhcl9jb25maWcgbWFzdGVyIG90aGVyIG90aGVyMiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl1cmw9ImZpbGU6Ly8nIiRQV0QiJyIgJiYKKwlnaXQgcHVsbCAtLXNldC11cHN0cmVhbSAiJHVybCIgJiYKKwljaGVja19jb25maWcgbWFzdGVyICIkdXJsIiBIRUFEICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXNldC11cHN0cmVhbSB3aXRoIHZhbGlkIFVSTCBhbmQgYnJhbmNoIHNldHMgYnJhbmNoJyAnCisJY2xlYXJfY29uZmlnIG1hc3RlciBvdGhlciBvdGhlcjIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdXJsPSJmaWxlOi8vJyIkUFdEIiciICYmCisJZ2l0IHB1bGwgLS1zZXQtdXBzdHJlYW0gIiR1cmwiIG1hc3RlciAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgIiR1cmwiIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfY29uZmlnX21pc3Npbmcgb3RoZXIgJiYKKwljaGVja19jb25maWdfbWlzc2luZyBvdGhlcjIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTYwLWh0dHAtYmFja2VuZC1ub3NlcnZlci5zaCBiL3QvdDU1NjAtaHR0cC1iYWNrZW5kLW5vc2VydmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmYWZjZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTYwLWh0dHAtYmFja2VuZC1ub3NlcnZlci5zaApAQCAtMCwwICsxLDc0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQtaHR0cC1iYWNrZW5kLW5vc2VydmVyJworLiAuL3Rlc3QtbGliLnNoCisKK0hUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSD0iJFRSQVNIX0RJUkVDVE9SWSIKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBHUkVQX1NUUklQU19DUgordGhlbgorCUdSRVBfT1BUSU9OUz0tVQorCWV4cG9ydCBHUkVQX09QVElPTlMKK2ZpCisKK3J1bl9iYWNrZW5kKCkgeworCWVjaG8gIiQyIiB8CisJUVVFUllfU1RSSU5HPSIkezEjKls/XX0iIFwKKwlQQVRIX1RSQU5TTEFURUQ9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvJHsxJSVbP10qfSIgXAorCWdpdCBodHRwLWJhY2tlbmQgPmFjdC5vdXQgMj5hY3QuZXJyCit9CisKK0dFVCgpIHsKKwlSRVFVRVNUX01FVEhPRD0iR0VUIiAmJiBleHBvcnQgUkVRVUVTVF9NRVRIT0QgJiYKKwlydW5fYmFja2VuZCAiL3JlcG8uZ2l0LyQxIiAmJgorCXNhbmVfdW5zZXQgUkVRVUVTVF9NRVRIT0QgJiYKKwlpZiAhIGdyZXAgIlN0YXR1cyIgYWN0Lm91dCA+YWN0CisJdGhlbgorCQlwcmludGYgIlN0YXR1czogMjAwIE9LXHJcbiIgPmFjdAorCWZpCisJcHJpbnRmICJTdGF0dXM6ICQyXHJcbiIgPmV4cCAmJgorCXRlc3RfY21wIGV4cCBhY3QKK30KKworUE9TVCgpIHsKKwlSRVFVRVNUX01FVEhPRD0iUE9TVCIgJiYgZXhwb3J0IFJFUVVFU1RfTUVUSE9EICYmCisJQ09OVEVOVF9UWVBFPSJhcHBsaWNhdGlvbi94LSQxLXJlcXVlc3QiICYmIGV4cG9ydCBDT05URU5UX1RZUEUgJiYKKwlydW5fYmFja2VuZCAiL3JlcG8uZ2l0LyQxIiAiJDIiICYmCisJc2FuZV91bnNldCBSRVFVRVNUX01FVEhPRCAmJgorCXNhbmVfdW5zZXQgQ09OVEVOVF9UWVBFICYmCisJaWYgISBncmVwICJTdGF0dXMiIGFjdC5vdXQgPmFjdAorCXRoZW4KKwkJcHJpbnRmICJTdGF0dXM6IDIwMCBPS1xyXG4iID5hY3QKKwlmaQorCXByaW50ZiAiU3RhdHVzOiAkM1xyXG4iID5leHAgJiYKKwl0ZXN0X2NtcCBleHAgYWN0Cit9CisKKy4gIiRURVNUX0RJUkVDVE9SWSIvdDU1NnhfY29tbW9uCisKK2V4cGVjdF9hbGlhc2VkKCkgeworCVJFUVVFU1RfTUVUSE9EPSJHRVQiICYmIGV4cG9ydCBSRVFVRVNUX01FVEhPRCAmJgorCWlmIHRlc3QgJDEgPSAwOyB0aGVuCisJCXJ1bl9iYWNrZW5kICIkMiIKKwllbHNlCisJCXJ1bl9iYWNrZW5kICIkMiIgJiYKKwkJZWNobyAiZmF0YWw6ICckMic6IGFsaWFzZWQiID5leHAuZXJyICYmCisJCXRlc3RfY21wIGV4cC5lcnIgYWN0LmVycgorCWZpCisJdW5zZXQgUkVRVUVTVF9NRVRIT0QKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1iYWNrZW5kIGJsb2NrcyBiYWQgUEFUSF9JTkZPJyAnCisJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSB0cnVlICYmCisKKwlleHBlY3RfYWxpYXNlZCAwIC9yZXBvLmdpdC9IRUFEICYmCisKKwlleHBlY3RfYWxpYXNlZCAxIC9yZXBvLmdpdC8uLi9IRUFEICYmCisJZXhwZWN0X2FsaWFzZWQgMSAvLi4vZXRjL3Bhc3N3ZCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgLi4vZXRjL3Bhc3N3ZCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgL2V0Yy8vcGFzc3dkICYmCisJZXhwZWN0X2FsaWFzZWQgMSAvZXRjLy4vcGFzc3dkICYmCisJZXhwZWN0X2FsaWFzZWQgMSAvL2RvbWFpbi9kYXRhLnR4dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NjEtaHR0cC1iYWNrZW5kLnNoIGIvdC90NTU2MS1odHRwLWJhY2tlbmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmViMDI5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NjEtaHR0cC1iYWNrZW5kLnNoCkBAIC0wLDAgKzEsMTM1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQtaHR0cC1iYWNrZW5kJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgQ1VSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyByYXcgaHR0cC1iYWNrZW5kIHRlc3RzLCBjdXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCitzdGFydF9odHRwZAorCitHRVQoKSB7CisJY3VybCAtLWluY2x1ZGUgIiRIVFRQRF9VUkwvJFNNQVJUL3JlcG8uZ2l0LyQxIiA+b3V0ICYmCisJdHIgJ1wwMTUnIFEgPG91dCB8CisJc2VkICcKKwkJcy9RJC8vCisJCTFxCisJJyA+YWN0ICYmCisJZWNobyAiSFRUUC8xLjEgJDIiID5leHAgJiYKKwl0ZXN0X2NtcCBleHAgYWN0Cit9CisKK1BPU1QoKSB7CisJY3VybCAtLWluY2x1ZGUgLS1kYXRhICIkMiIgXAorCS0taGVhZGVyICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtJDEtcmVxdWVzdCIgXAorCSIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0LyQxIiA+b3V0ICYmCisJdHIgJ1wwMTUnIFEgPG91dCB8CisJc2VkICcKKwkJcy9RJC8vCisJCTFxCisJJyA+YWN0ICYmCisJZWNobyAiSFRUUC8xLjEgJDMiID5leHAgJiYKKwl0ZXN0X2NtcCBleHAgYWN0Cit9CisKKy4gIiRURVNUX0RJUkVDVE9SWSIvdDU1NnhfY29tbW9uCisKK2dyZXAgJ15bXiNdJyA+ZXhwIDw8RU9GCisKKyMjIyAgcmVmcy9oZWFkcy9tYXN0ZXIKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgSFRUUC8xLjEgNDA0IC0KKworIyMjICBnZXRhbnlmaWxlIGRlZmF1bHQKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvJFBBQ0tfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgMjAwCisKKyMjIyAgbm8gZ2l0LWRhZW1vbi1leHBvcnQtb2sKKyMjIworR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vcGFja3MgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRJRFhfVVJMIEhUVFAvMS4xIDQwNCAtCisKKyMjIyAgZ2l0LWRhZW1vbi1leHBvcnQtb2sKKyMjIworR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L2luZm8vcmVmcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJFBBQ0tfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgMjAwCisKKyMjIyAgZ2V0YW55ZmlsZSB0cnVlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L0hFQUQgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnMgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vcGFja3MgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBIVFRQLzEuMSAyMDAgLQorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyBIVFRQLzEuMSAyMDAgLQorR0VUICAvc21hcnQvcmVwby5naXQvJExPT1NFX1VSTCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRQQUNLX1VSTCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRJRFhfVVJMIEhUVFAvMS4xIDIwMAorCisjIyMgIGdldGFueWZpbGUgZmFsc2UKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vcGFja3MgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRJRFhfVVJMIEhUVFAvMS4xIDQwMyAtCisKKyMjIyAgdXBsb2FkcGFjayBkZWZhdWx0CisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAgLQorCisjIyMgIHVwbG9hZHBhY2sgdHJ1ZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwIC0KKworIyMjICB1cGxvYWRwYWNrIGZhbHNlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSA0MDMgLQorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDQwMyAtCisKKyMjIyAgcmVjZWl2ZXBhY2sgZGVmYXVsdAorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDQwMyAtCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDQwMyAtCisKKyMjIyAgcmVjZWl2ZXBhY2sgdHJ1ZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSAyMDAgLQorCisjIyMgIHJlY2VpdmVwYWNrIGZhbHNlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgNDAzIC0KK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgNDAzIC0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyIHJlcXVlc3QgbG9nIG1hdGNoZXMgdGVzdCByZXN1bHRzJyAnCisJY2hlY2tfYWNjZXNzX2xvZyBleHAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTYyLWh0dHAtYmFja2VuZC1jb250ZW50LWxlbmd0aC5zaCBiL3QvdDU1NjItaHR0cC1iYWNrZW5kLWNvbnRlbnQtbGVuZ3RoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhMTEwYjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTYyLWh0dHAtYmFja2VuZC1jb250ZW50LWxlbmd0aC5zaApAQCAtMCwwICsxLDE2OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0LWh0dHAtYmFja2VuZCByZXNwZWN0cyBDT05URU5UX0xFTkdUSCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2xhenlfcHJlcmVxIEdaSVAgJ2d6aXAgLS12ZXJzaW9uJworCit2ZXJpZnlfaHR0cF9yZXN1bHQoKSB7CisJIyBzb21lIGZhdGFsIGVycm9ycyBzdGlsbCBwcm9kdWNlIHN0YXR1cyAyMDAKKwkjIHNvIGNoZWNrIGlmIHRoZXJlIGlzIHRoZSBlcnJvciBtZXNzYWdlCisJaWYgZ3JlcCAnZmF0YWw6JyBhY3QuZXJyLiR0ZXN0X2NvdW50CisJdGhlbgorCQlyZXR1cm4gMQorCWZpCisKKwlpZiAhIGdyZXAgIlN0YXR1cyIgYWN0Lm91dC4kdGVzdF9jb3VudCA+YWN0CisJdGhlbgorCQlwcmludGYgIlN0YXR1czogMjAwIE9LXHJcbiIgPmFjdAorCWZpCisJcHJpbnRmICJTdGF0dXM6ICQxXHJcbiIgPmV4cCAmJgorCXRlc3RfY21wIGV4cCBhY3QKK30KKwordGVzdF9odHRwX2VudigpIHsKKwloYW5kbGVyX3R5cGU9IiQxIgorCXJlcXVlc3RfYm9keT0iJDIiCisJc2hpZnQKKwllbnYgXAorCQlDT05URU5UX1RZUEU9ImFwcGxpY2F0aW9uL3gtZ2l0LSRoYW5kbGVyX3R5cGUtcGFjay1yZXF1ZXN0IiBcCisJCVFVRVJZX1NUUklORz0iL3JlcG8uZ2l0L2dpdC0kaGFuZGxlcl90eXBlLXBhY2siIFwKKwkJUEFUSF9UUkFOU0xBVEVEPSIkUFdELy5naXQvZ2l0LSRoYW5kbGVyX3R5cGUtcGFjayIgXAorCQlHSVRfSFRUUF9FWFBPUlRfQUxMPVRSVUUgXAorCQlSRVFVRVNUX01FVEhPRD1QT1NUIFwKKwkJIiRQRVJMX1BBVEgiIFwKKwkJIiRURVNUX0RJUkVDVE9SWSIvdDU1NjIvaW52b2tlLXdpdGgtY29udGVudC1sZW5ndGgucGwgXAorCQkgICAgIiRyZXF1ZXN0X2JvZHkiIGdpdCBodHRwLWJhY2tlbmQgPmFjdC5vdXQuJHRlc3RfY291bnQgMj5hY3QuZXJyLiR0ZXN0X2NvdW50Cit9CisKK3NzaXplX2IxMDBkb3RzKCkgeworCSMgaGFyZGNvZGVkICgoc2l6ZV90KSBTU0laRV9NQVgpICsgMQorCWNhc2UgIiQoYnVpbGRfb3B0aW9uIHNpemVvZi1zaXplX3QpIiBpbgorCTgpIGVjaG8gOTIyMzM3MjAzNjg1NDc3NTgwODs7CisJNCkgZWNobyAyMTQ3NDgzNjQ4OzsKKwkqKSBkaWUgIlVuZXhwZWN0ZWQgc3NpemVfdCBzaXplOiAkKGJ1aWxkX29wdGlvbiBzaXplb2Ytc2l6ZV90KSI7OworCWVzYWMKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlIVFRQX0NPTlRFTlRfRU5DT0RJTkc9ImlkZW50aXR5IiAmJgorCWV4cG9ydCBIVFRQX0NPTlRFTlRfRU5DT0RJTkcgJiYKKwlnaXQgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCXRlc3RfY29tbWl0IGMwICYmCisJdGVzdF9jb21taXQgYzEgJiYKKwloYXNoX2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJaGFzaF9wcmV2PSQoZ2l0IHJldi1wYXJzZSBIRUFEfjEpICYmCisJcHJpbnRmICJ3YW50ICVzIiAiJGhhc2hfaGVhZCIgfCBwYWNrZXRpemUgPmZldGNoX2JvZHkgJiYKKwlwcmludGYgMDAwMCA+PmZldGNoX2JvZHkgJiYKKwlwcmludGYgImhhdmUgJXMiICIkaGFzaF9wcmV2IiB8IHBhY2tldGl6ZSA+PmZldGNoX2JvZHkgJiYKKwlwcmludGYgZG9uZSB8IHBhY2tldGl6ZSA+PmZldGNoX2JvZHkgJiYKKwl0ZXN0X2NvcHlfYnl0ZXMgMTAgPGZldGNoX2JvZHkgPmZldGNoX2JvZHkudHJ1bmMgJiYKKwloYXNoX25leHQ9JChnaXQgY29tbWl0LXRyZWUgLXAgSEVBRCAtbSBuZXh0IEhFQURee3RyZWV9KSAmJgorCXByaW50ZiAiJXMgJXMgcmVmcy9oZWFkcy9uZXdicmFuY2hcXDByZXBvcnQtc3RhdHVzXFxuIiAiJFpFUk9fT0lEIiAiJGhhc2hfbmV4dCIgfCBwYWNrZXRpemUgPnB1c2hfYm9keSAmJgorCXByaW50ZiAwMDAwID4+cHVzaF9ib2R5ICYmCisJZWNobyAiJGhhc2hfbmV4dCIgfCBnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0ID4+cHVzaF9ib2R5ICYmCisJdGVzdF9jb3B5X2J5dGVzIDEwIDxwdXNoX2JvZHkgPnB1c2hfYm9keS50cnVuYyAmJgorCTogPmVtcHR5X2JvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdzZXR1cCwgY29tcHJlc3Npb24gcmVsYXRlZCcgJworCWd6aXAgLWMgZmV0Y2hfYm9keSA+ZmV0Y2hfYm9keS5neiAmJgorCXRlc3RfY29weV9ieXRlcyAxMCA8ZmV0Y2hfYm9keS5neiA+ZmV0Y2hfYm9keS5nei50cnVuYyAmJgorCWd6aXAgLWMgcHVzaF9ib2R5ID5wdXNoX2JvZHkuZ3ogJiYKKwl0ZXN0X2NvcHlfYnl0ZXMgMTAgPHB1c2hfYm9keS5neiA+cHVzaF9ib2R5Lmd6LnRydW5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHBsYWluJyAnCisJdGVzdF9odHRwX2VudiB1cGxvYWQgZmV0Y2hfYm9keSAmJgorCXZlcmlmeV9odHRwX3Jlc3VsdCAiMjAwIE9LIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBwbGFpbiB0cnVuY2F0ZWQnICcKKwl0ZXN0X2h0dHBfZW52IHVwbG9hZCBmZXRjaF9ib2R5LnRydW5jICYmCisJISB2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcGxhaW4gZW1wdHknICcKKwl0ZXN0X2h0dHBfZW52IHVwbG9hZCBlbXB0eV9ib2R5ICYmCisJISB2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdmZXRjaCBnemlwcGVkJyAnCisJdGVzdF9lbnYgSFRUUF9DT05URU5UX0VOQ09ESU5HPSJnemlwIiB0ZXN0X2h0dHBfZW52IHVwbG9hZCBmZXRjaF9ib2R5Lmd6ICYmCisJdmVyaWZ5X2h0dHBfcmVzdWx0ICIyMDAgT0siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnZmV0Y2ggZ3ppcHBlZCB0cnVuY2F0ZWQnICcKKwl0ZXN0X2VudiBIVFRQX0NPTlRFTlRfRU5DT0RJTkc9Imd6aXAiIHRlc3RfaHR0cF9lbnYgdXBsb2FkIGZldGNoX2JvZHkuZ3oudHJ1bmMgJiYKKwkhIHZlcmlmeV9odHRwX3Jlc3VsdCAiMjAwIE9LIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2ZldGNoIGd6aXBwZWQgZW1wdHknICcKKwl0ZXN0X2VudiBIVFRQX0NPTlRFTlRfRU5DT0RJTkc9Imd6aXAiIHRlc3RfaHR0cF9lbnYgdXBsb2FkIGVtcHR5X2JvZHkgJiYKKwkhIHZlcmlmeV9odHRwX3Jlc3VsdCAiMjAwIE9LIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ3B1c2ggcGxhaW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgbmV3YnJhbmNoIiAmJgorCXRlc3RfaHR0cF9lbnYgcmVjZWl2ZSBwdXNoX2JvZHkgJiYKKwl2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIgJiYKKwlnaXQgcmV2LXBhcnNlIG5ld2JyYW5jaCA+YWN0LmhlYWQgJiYKKwllY2hvICIkaGFzaF9uZXh0IiA+ZXhwLmhlYWQgJiYKKwl0ZXN0X2NtcCBhY3QuaGVhZCBleHAuaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHBsYWluIHRydW5jYXRlZCcgJworCXRlc3RfaHR0cF9lbnYgcmVjZWl2ZSBwdXNoX2JvZHkudHJ1bmMgJiYKKwkhIHZlcmlmeV9odHRwX3Jlc3VsdCAiMjAwIE9LIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHBsYWluIGVtcHR5JyAnCisJdGVzdF9odHRwX2VudiByZWNlaXZlIGVtcHR5X2JvZHkgJiYKKwkhIHZlcmlmeV9odHRwX3Jlc3VsdCAiMjAwIE9LIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ3B1c2ggZ3ppcHBlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtRCBuZXdicmFuY2giICYmCisJdGVzdF9lbnYgSFRUUF9DT05URU5UX0VOQ09ESU5HPSJnemlwIiB0ZXN0X2h0dHBfZW52IHJlY2VpdmUgcHVzaF9ib2R5Lmd6ICYmCisJdmVyaWZ5X2h0dHBfcmVzdWx0ICIyMDAgT0siICYmCisJZ2l0IHJldi1wYXJzZSBuZXdicmFuY2ggPmFjdC5oZWFkICYmCisJZWNobyAiJGhhc2hfbmV4dCIgPmV4cC5oZWFkICYmCisJdGVzdF9jbXAgYWN0LmhlYWQgZXhwLmhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdwdXNoIGd6aXBwZWQgdHJ1bmNhdGVkJyAnCisJdGVzdF9lbnYgSFRUUF9DT05URU5UX0VOQ09ESU5HPSJnemlwIiB0ZXN0X2h0dHBfZW52IHJlY2VpdmUgcHVzaF9ib2R5Lmd6LnRydW5jICYmCisJISB2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdwdXNoIGd6aXBwZWQgZW1wdHknICcKKwl0ZXN0X2VudiBIVFRQX0NPTlRFTlRfRU5DT0RJTkc9Imd6aXAiIHRlc3RfaHR0cF9lbnYgcmVjZWl2ZSBlbXB0eV9ib2R5ICYmCisJISB2ZXJpZnlfaHR0cF9yZXN1bHQgIjIwMCBPSyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ09OVEVOVF9MRU5HVEggb3ZlcmZsb3cgc3NpdGVfdCcgJworCU5PVF9GSVRfSU5fU1NJWkU9JChzc2l6ZV9iMTAwZG90cykgJiYKKwllbnYgXAorCQlDT05URU5UX1RZUEU9YXBwbGljYXRpb24veC1naXQtdXBsb2FkLXBhY2stcmVxdWVzdCBcCisJCVFVRVJZX1NUUklORz0vcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIFwKKwkJUEFUSF9UUkFOU0xBVEVEPSIkUFdEIi8uZ2l0L2dpdC11cGxvYWQtcGFjayBcCisJCUdJVF9IVFRQX0VYUE9SVF9BTEw9VFJVRSBcCisJCVJFUVVFU1RfTUVUSE9EPVBPU1QgXAorCQlDT05URU5UX0xFTkdUSD0iJE5PVF9GSVRfSU5fU1NJWkUiIFwKKwkJZ2l0IGh0dHAtYmFja2VuZCA8L2Rldi9udWxsID4vZGV2L251bGwgMj5lcnIgJiYKKwlncmVwICJmYXRhbDouKkNPTlRFTlRfTEVOR1RIIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgQ09OVEVOVF9MRU5HVEgnICcKKwllbnYgXAorCQlRVUVSWV9TVFJJTkc9InNlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayIgXAorCQlQQVRIX1RSQU5TTEFURUQ9IiRQV0QiLy5naXQvaW5mby9yZWZzIFwKKwkJR0lUX0hUVFBfRVhQT1JUX0FMTD1UUlVFIFwKKwkJUkVRVUVTVF9NRVRIT0Q9R0VUIFwKKwkJQ09OVEVOVF9MRU5HVEg9IiIgXAorCQlnaXQgaHR0cC1iYWNrZW5kIDxlbXB0eV9ib2R5ID5hY3Qub3V0LiR0ZXN0X2NvdW50IDI+YWN0LmVyci4kdGVzdF9jb3VudCAmJgorCXZlcmlmeV9odHRwX3Jlc3VsdCAiMjAwIE9LIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NjIvaW52b2tlLXdpdGgtY29udGVudC1sZW5ndGgucGwgYi90L3Q1NTYyL2ludm9rZS13aXRoLWNvbnRlbnQtbGVuZ3RoLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDM0NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTYyL2ludm9rZS13aXRoLWNvbnRlbnQtbGVuZ3RoLnBsCkBAIC0wLDAgKzEsMzYgQEAKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK215ICRib2R5X2ZpbGVuYW1lID0gJEFSR1ZbMF07CitteSBAY29tbWFuZCA9IEBBUkdWWzEgLi4gJCNBUkdWXTsKKworIyByZWFkIGRhdGEKK215ICRib2R5X3NpemUgPSAtcyAkYm9keV9maWxlbmFtZTsKKyRFTlZ7IkNPTlRFTlRfTEVOR1RIIn0gPSAkYm9keV9zaXplOworb3BlbihteSAkYm9keV9maCwgIjwiLCAkYm9keV9maWxlbmFtZSkgb3IgZGllICJDYW5ub3Qgb3BlbiAkYm9keV9maWxlbmFtZTogJCEiOworbXkgJGJvZHlfZGF0YTsKK2RlZmluZWQgcmVhZCgkYm9keV9maCwgJGJvZHlfZGF0YSwgJGJvZHlfc2l6ZSkgb3IgZGllICJDYW5ub3QgcmVhZCAkYm9keV9maWxlbmFtZTogJCEiOworY2xvc2UoJGJvZHlfZmgpOworCitteSAkZXhpdGVkID0gMDsKKyRTSUd7IkNITEQifSA9IHN1YiB7CisgICAgICAgICRleGl0ZWQgPSAxOworfTsKKworIyB3cml0ZSBkYXRhCitteSAkcGlkID0gb3BlbihteSAkb3V0LCAifC0iLCBAY29tbWFuZCk7Cit7CisgICAgICAgICMgZGlzYWJsZSBidWZmZXJpbmcgYXQgJG91dAorICAgICAgICBteSAkb2xkX3NlbGVjdGVkID0gc2VsZWN0OworICAgICAgICBzZWxlY3QgJG91dDsKKyAgICAgICAgJHwgPSAxOworICAgICAgICBzZWxlY3QgJG9sZF9zZWxlY3RlZDsKK30KK3ByaW50ICRvdXQgJGJvZHlfZGF0YSBvciBkaWUgIkNhbm5vdCB3cml0ZSBkYXRhOiAkISI7CisKK3NsZWVwIDYwOyAjIGlzIGludGVycnVwdGVkIGJ5IFNJR0NITEQKK2lmICghJGV4aXRlZCkgeworICAgICAgICBjbG9zZSgkb3V0KTsKKyAgICAgICAgZGllICJDb21tYW5kIGRpZCBub3QgZXhpdCBhZnRlciByZWFkaW5nIHdob2xlIGJvZHkiOworfQpkaWZmIC0tZ2l0IGEvdC90NTU2eF9jb21tb24gYi90L3Q1NTZ4X2NvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNTlmY2ZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU2eF9jb21tb24KQEAgLTAsMCArMSwxMTAgQEAKKyMhL2Jpbi9zaAorCitmaW5kX2ZpbGUoKSB7CisJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZmluZCAkMSAtdHlwZSBmIHwKKwlzZWQgLWUgMXEKK30KKworY29uZmlnKCkgeworCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIGNvbmZpZyAkMSAkMgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKworCW1rZGlyICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgZ2l0IC0tYmFyZSBpbml0ICYmCisJIDogPm9iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJIDogPm9iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMKKwkpICYmCisJZ2l0IHJlbW90ZSBhZGQgcHVibGljICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBwdXNoIHB1YmxpYyBtYXN0ZXI6bWFzdGVyICYmCisKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJIGdpdCByZXBhY2sgLWEgLWQKKwkpICYmCisKKwllY2hvIG90aGVyID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlciAmJgorCisJTE9PU0VfVVJMPSQoZmluZF9maWxlIG9iamVjdHMvPz8pICYmCisJUEFDS19VUkw9JChmaW5kX2ZpbGUgb2JqZWN0cy9wYWNrLyoucGFjaykgJiYKKwlJRFhfVVJMPSQoZmluZF9maWxlIG9iamVjdHMvcGFjay8qLmlkeCkKKycKKworZ2V0X3N0YXRpY19maWxlcygpIHsKKwlHRVQgSEVBRCAiJDEiICYmCisJR0VUIGluZm8vcmVmcyAiJDEiICYmCisJR0VUIG9iamVjdHMvaW5mby9wYWNrcyAiJDEiICYmCisJR0VUIG9iamVjdHMvaW5mby9hbHRlcm5hdGVzICIkMSIgJiYKKwlHRVQgb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyAiJDEiICYmCisJR0VUICRMT09TRV9VUkwgIiQxIiAmJgorCUdFVCAkUEFDS19VUkwgIiQxIiAmJgorCUdFVCAkSURYX1VSTCAiJDEiCit9CisKK1NNQVJUPXNtYXJ0CitHSVRfSFRUUF9FWFBPUlRfQUxMPTEgJiYgZXhwb3J0IEdJVF9IVFRQX0VYUE9SVF9BTEwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdCByZWZzL2hlYWRzL21hc3RlciBub3QgZm91bmQnICcKKwlHRVQgcmVmcy9oZWFkcy9tYXN0ZXIgIjQwNCBOb3QgRm91bmQiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0aWMgZmlsZSBpcyBvaycgJworCWdldF9zdGF0aWNfZmlsZXMgIjIwMCBPSyIKKycKK1NNQVJUPXNtYXJ0X25vZXhwb3J0Cit1bnNldCBHSVRfSFRUUF9FWFBPUlRfQUxMCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBleHBvcnQgYnkgZGVmYXVsdCcgJworCWdldF9zdGF0aWNfZmlsZXMgIjQwNCBOb3QgRm91bmQiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBvcnQgaWYgZ2l0LWRhZW1vbi1leHBvcnQtb2snICcKKyAgICAgICAgKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSB0b3VjaCBnaXQtZGFlbW9uLWV4cG9ydC1vaworCSkgJiYKKyAgICAgICAgZ2V0X3N0YXRpY19maWxlcyAiMjAwIE9LIgorJworU01BUlQ9c21hcnQKK0dJVF9IVFRQX0VYUE9SVF9BTEw9MSAmJiBleHBvcnQgR0lUX0hUVFBfRVhQT1JUX0FMTAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGZpbGUgaWYgaHR0cC5nZXRhbnlmaWxlIHRydWUgaXMgb2snICcKKwljb25maWcgaHR0cC5nZXRhbnlmaWxlIHRydWUgJiYKKwlnZXRfc3RhdGljX2ZpbGVzICIyMDAgT0siCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0aWMgZmlsZSBpZiBodHRwLmdldGFueWZpbGUgZmFsc2UgZmFpbHMnICcKKwljb25maWcgaHR0cC5nZXRhbnlmaWxlIGZhbHNlICYmCisJZ2V0X3N0YXRpY19maWxlcyAiNDAzIEZvcmJpZGRlbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC51cGxvYWRwYWNrIGRlZmF1bHQgZW5hYmxlZCcgJworCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgIjIwMCBPSyIgICYmCisJUE9TVCBnaXQtdXBsb2FkLXBhY2sgMDAwMCAiMjAwIE9LIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC51cGxvYWRwYWNrIHRydWUnICcKKwljb25maWcgaHR0cC51cGxvYWRwYWNrIHRydWUgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrICIyMDAgT0siICYmCisJUE9TVCBnaXQtdXBsb2FkLXBhY2sgMDAwMCAiMjAwIE9LIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC51cGxvYWRwYWNrIGZhbHNlJyAnCisJY29uZmlnIGh0dHAudXBsb2FkcGFjayBmYWxzZSAmJgorCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2sgIjQwMyBGb3JiaWRkZW4iICYmCisJUE9TVCBnaXQtdXBsb2FkLXBhY2sgMDAwMCAiNDAzIEZvcmJpZGRlbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC5yZWNlaXZlcGFjayBkZWZhdWx0IGRpc2FibGVkJyAnCisJR0VUIGluZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgIjQwMyBGb3JiaWRkZW4iICAmJgorCVBPU1QgZ2l0LXJlY2VpdmUtcGFjayAwMDAwICI0MDMgRm9yYmlkZGVuIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC5yZWNlaXZlcGFjayB0cnVlJyAnCisJY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrICIyMDAgT0siICYmCisJUE9TVCBnaXQtcmVjZWl2ZS1wYWNrIDAwMDAgIjIwMCBPSyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAucmVjZWl2ZXBhY2sgZmFsc2UnICcKKwljb25maWcgaHR0cC5yZWNlaXZlcGFjayBmYWxzZSAmJgorCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrICI0MDMgRm9yYmlkZGVuIiAmJgorCVBPU1QgZ2l0LXJlY2VpdmUtcGFjayAwMDAwICI0MDMgRm9yYmlkZGVuIgorJwpkaWZmIC0tZ2l0IGEvdC90NTU3MC1naXQtZGFlbW9uLnNoIGIvdC90NTU3MC1naXQtZGFlbW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0NDg3YmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTcwLWdpdC1kYWVtb24uc2gKQEAgLTAsMCArMSwyMDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGZldGNoaW5nIG92ZXIgZ2l0IHByb3RvY29sJworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdpdC1kYWVtb24uc2gKK3N0YXJ0X2dpdF9kYWVtb24KKworY2hlY2tfdmVyYm9zZV9jb25uZWN0ICgpIHsKKwl0ZXN0X2kxOG5ncmVwIC1GICJMb29raW5nIHVwIDEyNy4wLjAuMSAuLi4iIHN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgLUYgIkNvbm5lY3RpbmcgdG8gMTI3LjAuMC4xIChwb3J0ICIgc3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtRiAiZG9uZS4iIHN0ZGVycgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZ2l0LWFjY2Vzc2libGUgYmFyZSByZXBvc2l0b3J5JyAnCisJbWtkaXIgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkoY2QgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgZ2l0IC0tYmFyZSBpbml0ICYmCisJIDogPmdpdC1kYWVtb24tZXhwb3J0LW9rCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBwdXNoIHB1YmxpYyBtYXN0ZXI6bWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGdpdCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lIC12ICIkR0lUX0RBRU1PTl9VUkwvcmVwby5naXQiIGNsb25lIDI+c3RkZXJyICYmCisJY2hlY2tfdmVyYm9zZV9jb25uZWN0ICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNoYW5nZXMgdmlhIGdpdCBwcm90b2NvbCcgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCBwdXNoIHB1YmxpYyAmJgorCShjZCBjbG9uZSAmJiBnaXQgcHVsbCAtdikgMj5zdGRlcnIgJiYKKwljaGVja192ZXJib3NlX2Nvbm5lY3QgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8tb3AgZmV0Y2ggLXYgc3RkZXJyIGlzIGFzIGV4cGVjdGVkJyAnCisJKGNkIGNsb25lICYmIGdpdCBmZXRjaCAtdikgMj5zdGRlcnIgJiYKKwljaGVja192ZXJib3NlX2Nvbm5lY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8tb3AgZmV0Y2ggd2l0aG91dCAiLXYiIGlzIHF1aWV0JyAnCisJKGNkIGNsb25lICYmIGdpdCBmZXRjaCAyPi4uL3N0ZGVycikgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBkZXRlY3RzIGNvcnJlY3QgSEVBRCcgJworCWdpdCBwdXNoIHB1YmxpYyBtYXN0ZXI6b3RoZXIgJiYKKwkoY2QgY2xvbmUgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCAtZCBvcmlnaW4gJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCAtYSBvcmlnaW4gJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPiBvdXRwdXQgJiYKKwkgZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+IGV4cGVjdCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHBhY2sgb2JqZWN0cycgJworCWNwIC1SICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG8uZ2l0ICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwkoY2QgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAmJgorCSBnaXQgLS1iYXJlIHJlcGFjayAtYSAtZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbm90aWNlcyBjb3JydXB0IHBhY2snICcKKwljcCAtUiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMS5naXQgJiYKKwkoY2QgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19iYWQxLmdpdCAmJgorCSBwPSQobHMgb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrKSAmJgorCSBjaG1vZCB1K3cgJHAgJiYKKwkgcHJpbnRmICUwMjU2ZCAwIHwgZGQgb2Y9JHAgYnM9MjU2IGNvdW50PTEgc2Vlaz0xIGNvbnY9bm90cnVuYworCSkgJiYKKwlta2RpciByZXBvX2JhZDEuZ2l0ICYmCisJKGNkIHJlcG9fYmFkMS5naXQgJiYKKwkgZ2l0IC0tYmFyZSBpbml0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCAtLWJhcmUgZmV0Y2ggIiRHSVRfREFFTU9OX1VSTC9yZXBvX2JhZDEuZ2l0IiAmJgorCSB0ZXN0IDAgPSAkKGxzIG9iamVjdHMvcGFjay9wYWNrLSoucGFjayB8IHdjIC1sKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbm90aWNlcyBjb3JydXB0IGlkeCcgJworCWNwIC1SICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19iYWQyLmdpdCAmJgorCShjZCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX2JhZDIuZ2l0ICYmCisJIHJtIC1mIG9iamVjdHMvcGFjay9tdWx0aS1wYWNrLWluZGV4ICYmCisJIHA9JChscyBvYmplY3RzL3BhY2svcGFjay0qLmlkeCkgJiYKKwkgY2htb2QgdSt3ICRwICYmCisJIHByaW50ZiAlMDI1NmQgMCB8IGRkIG9mPSRwIGJzPTI1NiBjb3VudD0xIHNlZWs9MSBjb252PW5vdHJ1bmMKKwkpICYmCisJbWtkaXIgcmVwb19iYWQyLmdpdCAmJgorCShjZCByZXBvX2JhZDIuZ2l0ICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgLS1iYXJlIGZldGNoICIkR0lUX0RBRU1PTl9VUkwvcmVwb19iYWQyLmdpdCIgJiYKKwkgdGVzdCAwID0gJChscyBvYmplY3RzL3BhY2sgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfcmVtb3RlX2Vycm9yKCkKK3sKKwlkb19leHBvcnQ9WWVzUGxlYXNlCisJd2hpbGUgdGVzdCAkIyAtZ3QgMAorCWRvCisJCWNhc2UgJDEgaW4KKwkJLXgpCisJCQlzaGlmdAorCQkJY2htb2QgLXggIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIKKwkJCTs7CisJCS1uKQorCQkJc2hpZnQKKwkJCWRvX2V4cG9ydD0KKwkJCTs7CisJCSopCisJCQlicmVhaworCQllc2FjCisJZG9uZQorCisJbXNnPSQxCisJc2hpZnQKKwljbWQ9JDEKKwlzaGlmdAorCXJlcG89JDEKKwlzaGlmdCB8fCBlcnJvciAiaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorCisJaWYgdGVzdCAteCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRILyRyZXBvIgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJGRvX2V4cG9ydCIKKwkJdGhlbgorCQkJOiA+IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8kcmVwby9naXQtZGFlbW9uLWV4cG9ydC1vayIKKwkJZWxzZQorCQkJcm0gLWYgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8kcmVwby9naXQtZGFlbW9uLWV4cG9ydC1vayIKKwkJZmkKKwlmaQorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0ICIkY21kIiAiJEdJVF9EQUVNT05fVVJMLyRyZXBvIiAiJEAiIDI+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IHJlbW90ZSBlcnJvcjogJG1zZzogLyRyZXBvIiBvdXRwdXQgJiYKKwlyZXQ9JD8KKwljaG1vZCAreCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IgorCShleGl0ICRyZXQpCit9CisKK21zZz0iYWNjZXNzIGRlbmllZCBvciByZXBvc2l0b3J5IG5vdCBleHBvcnRlZCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG5vbi1leGlzdGVudCcgInRlc3RfcmVtb3RlX2Vycm9yICAgICckbXNnJyBjbG9uZSBub3doZXJlLmdpdCAgICAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGRpc2FibGVkJyAgICAgICJ0ZXN0X3JlbW90ZV9lcnJvciAgICAnJG1zZycgcHVzaCAgcmVwby5naXQgbWFzdGVyIgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCBhY2Nlc3MgZGVuaWVkJyAidGVzdF9yZW1vdGVfZXJyb3IgLXggJyRtc2cnIGZldGNoIHJlcG8uZ2l0ICAgICAgICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBleHBvcnRlZCcgICAgICAgInRlc3RfcmVtb3RlX2Vycm9yIC1uICckbXNnJyBmZXRjaCByZXBvLmdpdCAgICAgICAiCisKK3N0b3BfZ2l0X2RhZW1vbgorc3RhcnRfZ2l0X2RhZW1vbiAtLWluZm9ybWF0aXZlLWVycm9ycworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBub24tZXhpc3RlbnQnICJ0ZXN0X3JlbW90ZV9lcnJvciAgICAnbm8gc3VjaCByZXBvc2l0b3J5JyAgICAgIGNsb25lIG5vd2hlcmUuZ2l0ICAgICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZGlzYWJsZWQnICAgICAgInRlc3RfcmVtb3RlX2Vycm9yICAgICdzZXJ2aWNlIG5vdCBlbmFibGVkJyAgICAgcHVzaCAgcmVwby5naXQgbWFzdGVyIgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCBhY2Nlc3MgZGVuaWVkJyAidGVzdF9yZW1vdGVfZXJyb3IgLXggJ25vIHN1Y2ggcmVwb3NpdG9yeScgICAgICBmZXRjaCByZXBvLmdpdCAgICAgICAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgZXhwb3J0ZWQnICAgICAgICJ0ZXN0X3JlbW90ZV9lcnJvciAtbiAncmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQnIGZldGNoIHJlcG8uZ2l0ICAgICAgICIKKworc3RvcF9naXRfZGFlbW9uCitzdGFydF9naXRfZGFlbW9uIC0taW50ZXJwb2xhdGVkLXBhdGg9IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8lSCVEIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhY2Nlc3MgcmVwbyB2aWEgaW50ZXJwb2xhdGVkIGhvc3RuYW1lJyAnCisJcmVwbz0iJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL2xvY2FsaG9zdC9pbnRlcnAuZ2l0IiAmJgorCWdpdCBpbml0IC0tYmFyZSAiJHJlcG8iICYmCisJZ2l0IHB1c2ggIiRyZXBvIiBIRUFEICYmCisJPiIkcmVwbyIvZ2l0LWRhZW1vbi1leHBvcnQtb2sgJiYKKwlHSVRfT1ZFUlJJREVfVklSVFVBTF9IT1NUPWxvY2FsaG9zdCBcCisJCWdpdCBscy1yZW1vdGUgIiRHSVRfREFFTU9OX1VSTC9pbnRlcnAuZ2l0IiAmJgorCUdJVF9PVkVSUklERV9WSVJUVUFMX0hPU1Q9TE9DQUxIT1NUIFwKKwkJZ2l0IGxzLXJlbW90ZSAiJEdJVF9EQUVNT05fVVJML2ludGVycC5naXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvc3RuYW1lIGNhbm5vdCBicmVhayBvdXQgb2YgZGlyZWN0b3J5JyAnCisJcmVwbz0iJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRILy4uL2VzY2FwZS5naXQiICYmCisJZ2l0IGluaXQgLS1iYXJlICIkcmVwbyIgJiYKKwlnaXQgcHVzaCAiJHJlcG8iIEhFQUQgJiYKKwk+IiRyZXBvIi9naXQtZGFlbW9uLWV4cG9ydC1vayAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZW52IEdJVF9PVkVSUklERV9WSVJUVUFMX0hPU1Q9Li4gXAorCQlnaXQgbHMtcmVtb3RlICIkR0lUX0RBRU1PTl9VUkwvZXNjYXBlLmdpdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGQUtFTkMgJ2hvc3RuYW1lIGludGVycG9sYXRpb24gd29ya3MgYWZ0ZXIgTEYtc3RyaXBwaW5nJyAnCisJeworCQlwcmludGYgImdpdC11cGxvYWQtcGFjayAvaW50ZXJwLmdpdFxuXDBob3N0PWxvY2FsaG9zdCIgfCBwYWNrZXRpemUKKwkJcHJpbnRmICIwMDAwIgorCX0gPmlucHV0ICYmCisJZmFrZV9uYyAiJEdJVF9EQUVNT05fSE9TVF9QT1JUIiA8aW5wdXQgPm91dHB1dCAmJgorCWRlcGFja2V0aXplIDxvdXRwdXQgPm91dHB1dC5yYXcgJiYKKworCSMganVzdCBwaWNrIG91dCB0aGUgdmFsdWUgb2YgbWFzdGVyLCB3aGljaCBhdm9pZHMgYW55IHByb3RvY29sCisJIyBwYXJ0aWN1bGFycworCXBlcmwgLWxuZSAicHJpbnQgXCQxIGlmIG17XihcXFMrKSByZWZzL2hlYWRzL21hc3Rlcn0iIDxvdXRwdXQucmF3ID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRyZXBvIiByZXYtcGFyc2UgbWFzdGVyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU3MS1wcmUtcHVzaC1ob29rLnNoIGIvdC90NTU3MS1wcmUtcHVzaC1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjNTNkNjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTcxLXByZS1wdXNoLWhvb2suc2gKQEAgLTAsMCArMSwxMjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBwcmUtcHVzaCBob29rcycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFNldHVwIGhvb2sgdGhhdCBhbHdheXMgc3VjY2VlZHMKK0hPT0tESVI9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2hvb2tzIgorSE9PSz0iJEhPT0tESVIvcHJlLXB1c2giCitta2RpciAtcCAiJEhPT0tESVIiCit3cml0ZV9zY3JpcHQgIiRIT09LIiA8PEVPRgorY2F0ID4vZGV2L251bGwKK2V4aXQgMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgdXBzdHJlYW0gJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVwbzEgJiYKKwlnaXQgcmVtb3RlIGFkZCBwYXJlbnQxIHJlcG8xICYmCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IHB1c2ggcGFyZW50MSBIRUFEOmZvcmVpZ24KKycKK3dyaXRlX3NjcmlwdCAiJEhPT0siIDw8RU9GCitjYXQgPi9kZXYvbnVsbAorZXhpdCAxCitFT0YKKworQ09NTUlUMT0iJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorZXhwb3J0IENPTU1JVDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGZhaWxpbmcgaG9vaycgJworCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHBhcmVudDEgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSBieXBhc3NlcyBob29rJyAnCisJZ2l0IHB1c2ggLS1uby12ZXJpZnkgcGFyZW50MSBIRUFECisnCisKK0NPTU1JVDI9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKK2V4cG9ydCBDT01NSVQyCisKK3dyaXRlX3NjcmlwdCAiJEhPT0siIDw8J0VPRicKK2VjaG8gIiQxIiA+YWN0dWFsCitlY2hvICIkMiIgPj5hY3R1YWwKK2NhdCA+PmFjdHVhbAorRU9GCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK3BhcmVudDEKK3JlcG8xCityZWZzL2hlYWRzL21hc3RlciAkQ09NTUlUMiByZWZzL2hlYWRzL2ZvcmVpZ24gJENPTU1JVDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggaG9vaycgJworCWdpdCBwdXNoIHBhcmVudDEgbWFzdGVyOmZvcmVpZ24gJiYKKwlkaWZmIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgcGFyZW50MS9mb3JlaWduICYmCisJdGVzdF9jb21taXQgdGhyZWUKKycKKworQ09NTUlUMz0iJChnaXQgcmV2LXBhcnNlIEhFQUQpIgorZXhwb3J0IENPTU1JVDMKKworY2F0ID5leHBlY3RlZCA8PEVPRgorcGFyZW50MQorcmVwbzEKK3JlZnMvaGVhZHMvb3RoZXIgJENPTU1JVDMgcmVmcy9oZWFkcy9mb3JlaWduICRDT01NSVQyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBkZWZhdWx0JyAnCisJZ2l0IHB1c2ggJiYKKwlkaWZmIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitwYXJlbnQxCityZXBvMQorcmVmcy90YWdzL29uZSAkQ09NTUlUMSByZWZzL3RhZ3MvdGFnMSAkWkVST19PSUQKK0hFQUR+ICRDT01NSVQyIHJlZnMvaGVhZHMvcHJldiAkWkVST19PSUQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG5vbi1icmFuY2hlcycgJworCWdpdCBwdXNoIHBhcmVudDEgb25lOnRhZzEgSEVBRH46cmVmcy9oZWFkcy9wcmV2ICYmCisJZGlmZiBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorcGFyZW50MQorcmVwbzEKKyhkZWxldGUpICRaRVJPX09JRCByZWZzL2hlYWRzL3ByZXYgJENPTU1JVDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGRlbGV0ZScgJworCWdpdCBwdXNoIHBhcmVudDEgOnByZXYgJiYKKwlkaWZmIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCityZXBvMQorcmVwbzEKK0hFQUQgJENPTU1JVDMgcmVmcy9oZWFkcy9vdGhlciAkWkVST19PSUQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIFVSTCcgJworCWdpdCBwdXNoIHJlcG8xIEhFQUQgJiYKKwlkaWZmIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbWFueS1yZWYgdGVzdHMnICcKKwl7CisJCW5yPTEwMDAKKwkJd2hpbGUgdGVzdCAkbnIgLWx0IDIwMDAKKwkJZG8KKwkJCW5yPSQoKCAkbnIgKyAxICkpCisJCQllY2hvICJjcmVhdGUgcmVmcy9oZWFkcy9iLyRuciAkQ09NTUlUMyIKKwkJZG9uZQorCX0gfCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ3BpcGUgZG9lcyBub3QgY2F1c2UgcHJlLXB1c2ggaG9vayBmYWlsdXJlJyAnCisJZWNobyAiZXhpdCAwIiB8IHdyaXRlX3NjcmlwdCAiJEhPT0siICYmCisJZ2l0IHB1c2ggcGFyZW50MSAicmVmcy9oZWFkcy9iLyo6cmVmcy9oZWFkcy9iLyoiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU3Mi1wdWxsLXN1Ym1vZHVsZS5zaCBiL3QvdDU1NzItcHVsbC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjkxNjcyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NzItcHVsbC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwxNTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsIGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK3Jlc2V0X2JyYW5jaF90b19IRUFEICgpIHsKKwlnaXQgYnJhbmNoIC1EICIkMSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgIiQxIiBIRUFEICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0ib3JpZ2luLyQxIiAiJDEiCit9CisKK2dpdF9wdWxsICgpIHsKKwlyZXNldF9icmFuY2hfdG9fSEVBRCAiJDEiICYmCisJZ2l0IHB1bGwKK30KKworIyBwdWxscyB3aXRob3V0IGNvbmZsaWN0cwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfcHVsbCIKKworZ2l0X3B1bGxfZmYgKCkgeworCXJlc2V0X2JyYW5jaF90b19IRUFEICIkMSIgJiYKKwlnaXQgcHVsbCAtLWZmCit9CisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3B1bGxfZmYiCisKK2dpdF9wdWxsX2ZmX29ubHkgKCkgeworCXJlc2V0X2JyYW5jaF90b19IRUFEICIkMSIgJiYKKwlnaXQgcHVsbCAtLWZmLW9ubHkKK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfcHVsbF9mZl9vbmx5IgorCitnaXRfcHVsbF9ub2ZmICgpIHsKKwlyZXNldF9icmFuY2hfdG9fSEVBRCAiJDEiICYmCisJZ2l0IHB1bGwgLS1uby1mZgorfQorCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfRE9FU05UX0NSRUFURV9FTVBUWV9TVUJNT0RVTEVfRElSPTEKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9BVFRFTVBUU19UT19NRVJHRV9SRU1PVkVEX1NVQk1PRFVMRV9GSUxFUz0xCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdF9wdWxsX25vZmYiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWN1cnNlLXN1Ym1vZHVsZSBzZXR1cCcgJworCXRlc3RfY3JlYXRlX3JlcG8gY2hpbGQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBjaGlsZCBiYXIgJiYKKworCXRlc3RfY3JlYXRlX3JlcG8gcGFyZW50ICYmCisJdGVzdF9jb21taXQgLUMgY2hpbGQgZm9vICYmCisKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSBhZGQgLi4vY2hpbGQgc3ViICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiICYmCisKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgcGFyZW50IHN1cGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBwdWxsIHVwZGF0ZXMgd29ya2luZyB0cmVlJyAnCisJdGVzdF9jb21taXQgLUMgY2hpbGQgbWVyZ2Vfc3RyYXRlZ3kgJiYKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgJiYKKwlnaXQgLUMgcGFyZW50IGFkZCBzdWIgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAidXBkYXRlIHN1Ym1vZHVsZSIgJiYKKworCWdpdCAtQyBzdXBlciBwdWxsIC0tbm8tcmViYXNlIC0tcmVjdXJzZS1zdWJtb2R1bGVzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VwZXIvc3ViL21lcmdlX3N0cmF0ZWd5LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic3VibW9kdWxlLnJlY3Vyc2Ugb3B0aW9uIHRyaWdnZXJzIHJlY3Vyc2l2ZSBwdWxsIiAnCisJdGVzdF9jb21taXQgLUMgY2hpbGQgbWVyZ2Vfc3RyYXRlZ3lfMiAmJgorCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCWdpdCAtQyBwYXJlbnQgYWRkIHN1YiAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJ1cGRhdGUgc3VibW9kdWxlIiAmJgorCisJZ2l0IC1DIHN1cGVyIC1jIHN1Ym1vZHVsZS5yZWN1cnNlIHB1bGwgLS1uby1yZWJhc2UgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdXBlci9zdWIvbWVyZ2Vfc3RyYXRlZ3lfMi50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiAtLVtuby1dcmVjdXJzZS1zdWJtb2R1bGUgYW5kIHN1Ym1vZHVsZS5yZWN1cnNlIiAnCisJdGVzdF9jb21taXQgLUMgY2hpbGQgbWVyZ2Vfc3RyYXRlZ3lfMyAmJgorCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCWdpdCAtQyBwYXJlbnQgYWRkIHN1YiAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJ1cGRhdGUgc3VibW9kdWxlIiAmJgorCisJZ2l0IC1DIHN1cGVyIC1jIHN1Ym1vZHVsZS5yZWN1cnNlIHB1bGwgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1uby1yZWJhc2UgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdXBlci9zdWIvbWVyZ2Vfc3RyYXRlZ3lfMy50ICYmCisJZ2l0IC1DIHN1cGVyIC1jIHN1Ym1vZHVsZS5yZWN1cnNlPWZhbHNlIHB1bGwgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1uby1yZWJhc2UgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdXBlci9zdWIvbWVyZ2Vfc3RyYXRlZ3lfMy50ICYmCisKKwl0ZXN0X2NvbW1pdCAtQyBjaGlsZCBtZXJnZV9zdHJhdGVneV80ICYmCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJZ2l0IC1DIHBhcmVudCBhZGQgc3ViICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gInVwZGF0ZSBzdWJtb2R1bGUiICYmCisKKwlnaXQgLUMgc3VwZXIgLWMgc3VibW9kdWxlLnJlY3Vyc2U9ZmFsc2UgcHVsbCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyAtLW5vLXJlYmFzZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1cGVyL3N1Yi9tZXJnZV9zdHJhdGVneV80LnQgJiYKKwlnaXQgLUMgc3VwZXIgLWMgc3VibW9kdWxlLnJlY3Vyc2U9dHJ1ZSBwdWxsIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8tcmViYXNlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3VwZXIvc3ViL21lcmdlX3N0cmF0ZWd5XzQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgcmViYXNpbmcgcHVsbCcgJworCSMgY2hhbmdlIHVwc3RyZWFtCisJdGVzdF9jb21taXQgLUMgY2hpbGQgcmViYXNlX3N0cmF0ZWd5ICYmCisJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJZ2l0IC1DIHBhcmVudCBhZGQgc3ViICYmCisJZ2l0IC1DIHBhcmVudCBjb21taXQgLW0gInVwZGF0ZSBzdWJtb2R1bGUiICYmCisKKwkjIGFsc28gaGF2ZSBsb2NhbCBjb21taXRzCisJdGVzdF9jb21taXQgLUMgc3VwZXIvc3ViIGxvY2FsX3N0dWZmICYmCisKKwlnaXQgLUMgc3VwZXIgcHVsbCAtLXJlYmFzZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1cGVyL3N1Yi9yZWJhc2Vfc3RyYXRlZ3kudCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1cGVyL3N1Yi9sb2NhbF9zdHVmZi50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmViYXNlIHJlY3Vyc2luZyBmYWlscyB3aXRoIGNvbmZsaWN0cycgJworCisJIyBsb2NhbCBjaGFuZ2VzIGluIHN1Ym1vZHVsZSByZWNvcmRlZCBpbiBzdXBlcnByb2plY3Q6CisJdGVzdF9jb21taXQgLUMgc3VwZXIvc3ViIGxvY2FsX3N0dWZmXzIgJiYKKwlnaXQgLUMgc3VwZXIgYWRkIHN1YiAmJgorCWdpdCAtQyBzdXBlciBjb21taXQgLW0gImxvY2FsIHVwZGF0ZSBzdWJtb2R1bGUiICYmCisKKwkjIGFuZCBpbiB0aGUgcmVtb3RlIGFzIHdlbGw6CisJdGVzdF9jb21taXQgLUMgY2hpbGQgaW1wb3J0YW50X3Vwc3RyZWFtX3dvcmsgJiYKKwlnaXQgLUMgcGFyZW50IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgJiYKKwlnaXQgLUMgcGFyZW50IGFkZCBzdWIgJiYKKwlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAicmVtb3RlIHVwZGF0ZSBzdWJtb2R1bGUiICYmCisKKwkjIFVuZm9ydHVuYXRlbHkgd2UgZmFpbCBoZXJlLCBkZXNwaXRlIG5vIGNvbmZsaWN0IGluIHRoZQorCSMgc3VibW9kdWxlIGl0c2VsZiwgYnV0IHRoZSBtZXJnZSBzdHJhdGVneSBpbiBzdWJtb2R1bGVzCisJIyBkb2VzIG5vdCBzdXBwb3J0IHJlYmFzZToKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgcHVsbCAtLXJlYmFzZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImxvY2FsbHkgcmVjb3JkZWQgc3VibW9kdWxlIG1vZGlmaWNhdGlvbnMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggaGFzIG5vIG1lcmdlIGJhc2Ugd2l0aCByZW1vdGUtdHJhY2tpbmcgY291bnRlcnBhcnQnICcKKwlybSAtcmYgcGFyZW50IGNoaWxkICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIGEtc3VibW9kdWxlICYmCisJdGVzdF9jb21taXQgLUMgYS1zdWJtb2R1bGUgZm9vICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHBhcmVudCAmJgorCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIGFkZCAiJChwd2QpL2Etc3VibW9kdWxlIiAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tIGZvbyAmJgorCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZCAmJgorCisJIyBSZXNldCBtYXN0ZXIgc28gdGhhdCBpdCBoYXMgbm8gbWVyZ2UgYmFzZSB3aXRoCisJIyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3Rlci4KKwlPVEhFUj0kKGdpdCAtQyBjaGlsZCBjb21taXQtdHJlZSAtbSBiYXIgXAorCQkkKGdpdCAtQyBjaGlsZCByZXYtcGFyc2UgSEVBRF57dHJlZX0pKSAmJgorCWdpdCAtQyBjaGlsZCByZXNldCAtLWhhcmQgIiRPVEhFUiIgJiYKKworCWdpdCAtQyBjaGlsZCBwdWxsIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tcmViYXNlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU3My1wdWxsLXZlcmlmeS1zaWduYXR1cmVzLnNoIGIvdC90NTU3My1wdWxsLXZlcmlmeS1zaWduYXR1cmVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1M2RkODUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTczLXB1bGwtdmVyaWZ5LXNpZ25hdHVyZXMuc2gKQEAgLTAsMCArMSwxNTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRlIHJlcG9zaXRvcmllcyB3aXRoIHNpZ25lZCBjb21taXRzJyAnCisJZWNobyAxID5hICYmIGdpdCBhZGQgYSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKworCWdpdCBjbG9uZSAuIHNpZ25lZCAmJgorCSgKKwkJY2Qgc2lnbmVkICYmCisJCWVjaG8gMiA+YiAmJiBnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVMgLW0gInNpZ25lZCIKKwkpICYmCisKKwlnaXQgY2xvbmUgLiB1bnNpZ25lZCAmJgorCSgKKwkJY2QgdW5zaWduZWQgJiYKKwkJZWNobyAzID5jICYmIGdpdCBhZGQgYyAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidW5zaWduZWQiCisJKSAmJgorCisJZ2l0IGNsb25lIC4gYmFkICYmCisJKAorCQljZCBiYWQgJiYKKwkJZWNobyA0ID5kICYmIGdpdCBhZGQgZCAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtUyAtbSAiYmFkIiAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCQlzZWQgLWUgInMvXmJhZC9mb3JnZWQgYmFkLyIgcmF3ID5mb3JnZWQgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBmb3JnZWQgPmZvcmdlZC5jb21taXQgJiYKKwkJZ2l0IGNoZWNrb3V0ICQoY2F0IGZvcmdlZC5jb21taXQpCisJKSAmJgorCisJZ2l0IGNsb25lIC4gdW50cnVzdGVkICYmCisJKAorCQljZCB1bnRydXN0ZWQgJiYKKwkJZWNobyA1ID5lICYmIGdpdCBhZGQgZSAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtU0I3MjI3MTg5IC1tICJ1bnRydXN0ZWQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCB1bnNpZ25lZCBjb21taXQgd2l0aCAtLXZlcmlmeS1zaWduYXR1cmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHVuc2lnbmVkIDI+cHVsbGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgd2l0aCBiYWQgc2lnbmF0dXJlIHdpdGggLS12ZXJpZnktc2lnbmF0dXJlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyBiYWQgMj5wdWxsZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSIgcHVsbGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIGNvbW1pdCB3aXRoIHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCAtLXZlcmlmeS1zaWduYXR1cmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHVudHJ1c3RlZCAyPnB1bGxlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgcHVsbGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIGNvbW1pdCB3aXRoIHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCAtLXZlcmlmeS1zaWduYXR1cmVzIGFuZCBtaW5UcnVzdExldmVsPXVsdGltYXRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfY29uZmlnIGdwZy5taW5UcnVzdExldmVsIHVsdGltYXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgdW50cnVzdGVkIDI+cHVsbGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlIiBwdWxsZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3B1bGwgY29tbWl0IHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIC0tdmVyaWZ5LXNpZ25hdHVyZXMgYW5kIG1pblRydXN0TGV2ZWw9bWFyZ2luYWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgbWFyZ2luYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyB1bnRydXN0ZWQgMj5wdWxsZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIHdpdGggLS12ZXJpZnktc2lnbmF0dXJlcyBhbmQgbWluVHJ1c3RMZXZlbD11bmRlZmluZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgdW5kZWZpbmVkICYmCisJZ2l0IHB1bGwgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgdW50cnVzdGVkID5wdWxsb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIiBwdWxsb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIHNpZ25lZCBjb21taXQgd2l0aCAtLXZlcmlmeS1zaWduYXR1cmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCWdpdCBwdWxsIC0tdmVyaWZ5LXNpZ25hdHVyZXMgc2lnbmVkID5wdWxsb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIiBwdWxsb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIGNvbW1pdCB3aXRoIGJhZCBzaWduYXR1cmUgd2l0aG91dCB2ZXJpZmljYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJZ2l0IHB1bGwgLS1mZi1vbmx5IGJhZCAyPnB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgd2l0aCBiYWQgc2lnbmF0dXJlIHdpdGggLS1uby12ZXJpZnktc2lnbmF0dXJlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS52ZXJpZnlTaWduYXR1cmVzIHRydWUgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnZlcmlmeVNpZ25hdHVyZXMgdHJ1ZSAmJgorCWdpdCBwdWxsIC0tZmYtb25seSAtLW5vLXZlcmlmeS1zaWduYXR1cmVzIGJhZCAyPnB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCB1bnNpZ25lZCBjb21taXQgaW50byB1bmJvcm4gYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZW1wdHktcmVwbyIgJiYKKwlnaXQgaW5pdCBlbXB0eS1yZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQlnaXQgLUMgZW1wdHktcmVwbyBwdWxsIC0tdmVyaWZ5LXNpZ25hdHVyZXMgLi4gIDI+cHVsbGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUiIHB1bGxlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAncHVsbCBjb21taXQgaW50byB1bmJvcm4gYnJhbmNoIHdpdGggYmFkIHNpZ25hdHVyZSBhbmQgLS12ZXJpZnktc2lnbmF0dXJlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGVtcHR5LXJlcG8iICYmCisJZ2l0IGluaXQgZW1wdHktcmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZ2l0IC1DIGVtcHR5LXJlcG8gcHVsbCAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyAuLi9iYWQgMj5wdWxsZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSIgcHVsbGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIGNvbW1pdCBpbnRvIHVuYm9ybiBicmFuY2ggd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIGFuZCAtLXZlcmlmeS1zaWduYXR1cmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZW1wdHktcmVwbyIgJiYKKwlnaXQgaW5pdCBlbXB0eS1yZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQlnaXQgLUMgZW1wdHktcmVwbyBwdWxsIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIC4uL3VudHJ1c3RlZCAyPnB1bGxlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgcHVsbGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIGNvbW1pdCBpbnRvIHVuYm9ybiBicmFuY2ggd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIGFuZCAtLXZlcmlmeS1zaWduYXR1cmVzIGFuZCBtaW5UcnVzdExldmVsPXVsdGltYXRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZW1wdHktcmVwbyIgJiYKKwlnaXQgaW5pdCBlbXB0eS1yZXBvICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGdwZy5taW5UcnVzdExldmVsIHVsdGltYXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQlnaXQgLUMgZW1wdHktcmVwbyBwdWxsIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIC4uL3VudHJ1c3RlZCAyPnB1bGxlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgcHVsbGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIGNvbW1pdCBpbnRvIHVuYm9ybiBicmFuY2ggd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIGFuZCAtLXZlcmlmeS1zaWduYXR1cmVzIGFuZCBtaW5UcnVzdExldmVsPW1hcmdpbmFsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZW1wdHktcmVwbyIgJiYKKwlnaXQgaW5pdCBlbXB0eS1yZXBvICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGdwZy5taW5UcnVzdExldmVsIG1hcmdpbmFsICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQlnaXQgLUMgZW1wdHktcmVwbyBwdWxsIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIC4uL3VudHJ1c3RlZCAyPnB1bGxlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgcHVsbGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdWxsIGNvbW1pdCBpbnRvIHVuYm9ybiBicmFuY2ggd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIGFuZCAtLXZlcmlmeS1zaWduYXR1cmVzIGFuZCBtaW5UcnVzdExldmVsPXVuZGVmaW5lZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGVtcHR5LXJlcG8iICYmCisJZ2l0IGluaXQgZW1wdHktcmVwbyAmJgorCXRlc3RfY29uZmlnX2dsb2JhbCBncGcubWluVHJ1c3RMZXZlbCB1bmRlZmluZWQgJiYKKwlnaXQgLUMgZW1wdHktcmVwbyBwdWxsIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIC4uL3VudHJ1c3RlZCA+cHVsbG91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSIgcHVsbG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1ODAtdW5jLXBhdGhzLnNoIGIvdC90NTU4MC11bmMtcGF0aHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Y3NjhiMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1ODAtdW5jLXBhdGhzLnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd2YXJpb3VzIFdpbmRvd3Mtb25seSBwYXRoIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgQ1lHV0lOCit0aGVuCisJYWxpYXMgd2lucHdkPSdjeWdwYXRoIC1hdyAuJworZWxpZiB0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXCit0aGVuCisJYWxpYXMgd2lucHdkPXB3ZAorZWxzZQorCXNraXBfYWxsPSdza2lwcGluZyBXaW5kb3dzLW9ubHkgcGF0aCB0ZXN0cycKKwl0ZXN0X2RvbmUKK2ZpCisKK1VOQ1BBVEg9IiQod2lucHdkKSIKK2Nhc2UgIiRVTkNQQVRIIiBpbgorW0EtWl06KikKKwkjIFVzZSBhZG1pbmlzdHJhdGl2ZSBzaGFyZSBlLmcuIFxcbG9jYWxob3N0XEMkXGdpdC1zZGstNjRcdXNyXHNyY1xnaXQKKwkjICh3ZSB1c2UgZm9yd2FyZCBzbGFzaGVzIGhlcmUgYmVjYXVzZSBNU1lTMiBhbmQgR2l0IGFjY2VwdCB0aGVtLCBhbmQKKwkjIHRoZXkgYXJlIGVhc2llciBvbiB0aGUgZXllcykKKwlVTkNQQVRIPSIvL2xvY2FsaG9zdC8ke1VOQ1BBVEglJToqfVwkLyR7VU5DUEFUSCM/On0iCisJdGVzdCAtZCAiJFVOQ1BBVEgiIHx8IHsKKwkJc2tpcF9hbGw9J2NvdWxkIG5vdCBhY2Nlc3MgYWRtaW5pc3RyYXRpdmUgc2hhcmU7IHNraXBwaW5nJworCQl0ZXN0X2RvbmUKKwl9CisJOzsKKyopCisJc2tpcF9hbGw9J3NraXBwaW5nIFVOQyBwYXRoIHRlc3RzLCBjYW5ub3QgZGV0ZXJtaW5lIGN1cnJlbnQgcGF0aCBhcyBVTkMnCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGNsb25lICcKKwlnaXQgY2xvbmUgImZpbGU6Ly8kVU5DUEFUSCIgY2xvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aG91dCBmaWxlOi8vJyAnCisJZ2l0IGNsb25lICIkVU5DUEFUSCIgY2xvbmUtd2l0aG91dC1maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggYmFja3NsYXNoZWQgcGF0aCcgJworCUJBQ0tTTEFTSEVEPSIkKGVjaG8gIiRVTkNQQVRIIiB8IHRyIC8gXFxcXCkiICYmCisJZ2l0IGNsb25lICIkQkFDS1NMQVNIRUQiIGJhY2tzbGFzaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgZmV0Y2ggJworCWdpdCBpbml0IHRvLWZldGNoICYmCisJKAorCQljZCB0by1mZXRjaCAmJgorCQlnaXQgZmV0Y2ggIiRVTkNQQVRIIiBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcHVzaCAnCisJKAorCQljZCBjbG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG8tcHVzaCAmJgorCQl0ZXN0X2NvbW1pdCB0by1wdXNoICYmCisJCWdpdCBwdXNoIG9yaWdpbiBIRUFECisJKSAmJgorCXJldj0iJChnaXQgLUMgY2xvbmUgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvdG8tcHVzaCkiICYmCisJdGVzdCAiJHJldiIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvdG8tcHVzaCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ3JlbW90ZSBuaWNrIGNhbm5vdCBjb250YWluIGJhY2tzbGFzaGVzJyAnCisJQkFDS1NMQVNIRUQ9IiQod2lucHdkIHwgdHIgLyBcXFxcKSIgJiYKKwlnaXQgbHMtcmVtb3RlICIkQkFDS1NMQVNIRUQiIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJ1bmFibGUgdG8gYWNjZXNzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5jIGFsdGVybmF0ZXMnICcKKwl0cmVlPSIkKGdpdCByZXYtcGFyc2UgSEVBRDopIiAmJgorCW1rZGlyIHRlc3QtdW5jLWFsdGVybmF0ZSAmJgorCSgKKwkJY2QgdGVzdC11bmMtYWx0ZXJuYXRlICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93ICR0cmVlICYmCisJCWVjaG8gIiRVTkNQQVRILy5naXQvb2JqZWN0cyIgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJZ2l0IHNob3cgJHRyZWUKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU4MS1odHRwLWN1cmwtdmVyYm9zZS5zaCBiL3QvdDU1ODEtaHR0cC1jdXJsLXZlcmJvc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTEyOWIwNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1ODEtaHR0cC1jdXJsLXZlcmJvc2Uuc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgR0lUX0NVUkxfVkVSQk9TRScKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwlta2RpciAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiIC0tYmFyZSBpbml0ICYmCisJZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsdXJlIGluIGdpdC11cGxvYWQtcGFjayBpcyBzaG93bicgJworCXRlc3RfbWlnaHRfZmFpbCBlbnYgR0lUX0NVUkxfVkVSQk9TRT0xIFwKKwkJZ2l0IGNsb25lICIkSFRUUERfVVJML2Vycm9yX2dpdF91cGxvYWRfcGFjay9zbWFydC9yZXBvLmdpdCIgXAorCQkyPmN1cmxfbG9nICYmCisJZ3JlcCAiPCBIVFRQLzEuMSA1MDAgSW50ZW50aW9uYWwgQnJlYWthZ2UiIGN1cmxfbG9nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwMC1jbG9uZS1mYWlsLWNsZWFudXAuc2ggYi90L3Q1NjAwLWNsb25lLWZhaWwtY2xlYW51cC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YTFhOTEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwMC1jbG9uZS1mYWlsLWNsZWFudXAuc2gKQEAgLTAsMCArMSwxMDAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgQ2FybCBELiBXb3J0aCA8Y3dvcnRoQGN3b3J0aC5vcmc+CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IGNsb25lIHRvIGNsZWFudXAgYWZ0ZXIgZmFpbHVyZQorCitUaGlzIHRlc3QgY292ZXJzIHRoZSBmYWN0IHRoYXQgaWYgZ2l0IGNsb25lIGZhaWxzLCBpdCBzaG91bGQgcmVtb3ZlCit0aGUgZGlyZWN0b3J5IGl0IGNyZWF0ZWQsIHRvIGF2b2lkIHRoZSB1c2VyIGhhdmluZyB0byBtYW51YWxseQorcmVtb3ZlIHRoZSBkaXJlY3RvcnkgYmVmb3JlIGF0dGVtcHRpbmcgYSBjbG9uZSBhZ2Fpbi4KKworVW5sZXNzIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMsIGluIHdoaWNoIGNhc2Ugd2UgY2xlYW4gdXAgb25seSB3aGF0IHdlCit3cm90ZS4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvcnJ1cHRfcmVwbyAoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkICJybWRpciBmb28vLmdpdC9vYmplY3RzLmJhayIgJiYKKwlta2RpciBmb28vLmdpdC9vYmplY3RzLmJhay8gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IGZvby8uZ2l0L29iamVjdHMuYmFrLyogZm9vLy5naXQvb2JqZWN0cy8iICYmCisJbXYgZm9vLy5naXQvb2JqZWN0cy8qIGZvby8uZ2l0L29iamVjdHMuYmFrLworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBvZiBub24tZXhpc3RlbnQgc291cmNlIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIGZvbyBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNsb25lIHNob3VsZCBub3QgbGVhdmUgYSBkaXJlY3RvcnknICcKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGEgcmVwbyB0byBjbG9uZScgJworCXRlc3RfY3JlYXRlX3JlcG8gZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBvYmplY3RzIGluIHJlcG8gZm9yIGxhdGVyIGNvcnJ1cHRpb24nICcKKwl0ZXN0X2NvbW1pdCAtQyBmb28gZmlsZQorJworCisjIHNvdXJjZSByZXBvc2l0b3J5IGdpdmVuIHRvIGdpdCBjbG9uZSBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlCisjIGN1cnJlbnQgcGF0aCBub3QgdG8gdGhlIHRhcmdldCBkaXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG9mIG5vbi1leGlzdGVudCAocmVsYXRpdmUgdG8gJFBXRCkgc291cmNlIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC4uL2ZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hvdWxkIHdvcmsgbm93IHRoYXQgc291cmNlIGV4aXN0cycgJworCWdpdCBjbG9uZSBmb28gYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgY2xvbmUgbXVzdCBsZWF2ZSB0aGUgZGlyZWN0b3J5JyAnCisJdGVzdF9wYXRoX2lzX2RpciBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpciBzaG91bGQgbm90IGxlYXZlIGFueSBkaXJlY3RvcmllcycgJworCWNvcnJ1cHRfcmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXIgZ2l0ZGlyIGZvbyB3b3JrdHJlZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdGRpciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHdvcmt0cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjbG9uZSBpbnRvIGVtcHR5IGxlYXZlcyBkaXJlY3RvcnkgKHZhbmlsbGEpJyAnCisJbWtkaXIgLXAgZW1wdHkgJiYKKwljb3JydXB0X3JlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgZm9vIGVtcHR5ICYmCisJdGVzdF9kaXJfaXNfZW1wdHkgZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNsb25lIGludG8gZW1wdHkgbGVhdmVzIGRpcmVjdG9yeSAoYmFyZSknICcKKwlta2RpciAtcCBlbXB0eSAmJgorCWNvcnJ1cHRfcmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLWJhcmUgZm9vIGVtcHR5ICYmCisJdGVzdF9kaXJfaXNfZW1wdHkgZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNsb25lIGludG8gZW1wdHkgbGVhdmVzIGRpcmVjdG9yeSAoc2VwYXJhdGUpJyAnCisJbWtkaXIgLXAgZW1wdHktZ2l0IGVtcHR5LXd0ICYmCisJY29ycnVwdF9yZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpciBlbXB0eS1naXQgZm9vIGVtcHR5LXd0ICYmCisJdGVzdF9kaXJfaXNfZW1wdHkgZW1wdHktZ2l0ICYmCisJdGVzdF9kaXJfaXNfZW1wdHkgZW1wdHktd3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNsb25lIGludG8gZW1wdHkgbGVhdmVzIGRpcmVjdG9yeSAoc2VwYXJhdGUsIGdpdCknICcKKwlta2RpciAtcCBlbXB0eS1naXQgJiYKKwljb3JydXB0X3JlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyIGVtcHR5LWdpdCBmb28gbm8td3QgJiYKKwl0ZXN0X2Rpcl9pc19lbXB0eSBlbXB0eS1naXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBuby13dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2xvbmUgaW50byBlbXB0eSBsZWF2ZXMgZGlyZWN0b3J5IChzZXBhcmF0ZSwgd3QpJyAnCisJbWtkaXIgLXAgZW1wdHktd3QgJiYKKwljb3JydXB0X3JlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyIG5vLWdpdCBmb28gZW1wdHktd3QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBuby1naXQgJiYKKwl0ZXN0X2Rpcl9pc19lbXB0eSBlbXB0eS13dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDEtY2xvbmUuc2ggYi90L3Q1NjAxLWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0ZWEyYTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjAxLWNsb25lLnNoCkBAIC0wLDAgKzEsNzQ1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj1jbG9uZQorCisuIC4vdGVzdC1saWIuc2gKKworWD0KK3Rlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXIHx8IFg9LmV4ZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXJtIC1mciAuZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyBzcmMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQk+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJCWVjaG8gMSA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSB1cGRhdGVkCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZXhjZXNzIHBhcmFtZXRlcnMgKDEpJyAnCisKKwlybSAtZnIgZHN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC1uIHNyYyBkc3QganVuaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZXhjZXNzIHBhcmFtZXRlcnMgKDIpJyAnCisKKwlybSAtZnIgZHN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC1uICJmaWxlOi8vJChwd2QpL3NyYyIgZHN0IGp1bmsKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnb3V0cHV0IGZyb20gY2xvbmUnICcKKwlybSAtZnIgZHN0ICYmCisJZ2l0IGNsb25lIC1uICJmaWxlOi8vJChwd2QpL3NyYyIgZHN0ID5vdXRwdXQgMj4mMSAmJgorCXRlc3QgJChncmVwIENsb24gb3V0cHV0IHwgd2MgLWwpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBkb2VzIG5vdCBrZWVwIHBhY2snICcKKworCXJtIC1mciBkc3QgJiYKKwlnaXQgY2xvbmUgLW4gImZpbGU6Ly8kKHB3ZCkvc3JjIiBkc3QgJiYKKwkhIHRlc3QgLWYgZHN0L2ZpbGUgJiYKKwkhIChlY2hvIGRzdC8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSogfCBncmVwICJcLmtlZXAiKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNoZWNrcyBvdXQgZmlsZXMnICcKKworCXJtIC1mciBkc3QgJiYKKwlnaXQgY2xvbmUgc3JjIGRzdCAmJgorCXRlc3QgLWYgZHN0L2ZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXNwZWN0cyBHSVRfV09SS19UUkVFJyAnCisKKwlHSVRfV09SS19UUkVFPXdvcmt0cmVlIGdpdCBjbG9uZSBzcmMgYmFyZSAmJgorCXRlc3QgLWYgYmFyZS9jb25maWcgJiYKKwl0ZXN0IC1mIHdvcmt0cmVlL2ZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIGhvb2tzJyAnCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHIwICYmCisJY2QgcjAgJiYKKwl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJY2QgLi4gJiYKKwlnaXQgaW5pdCByMSAmJgorCWNkIHIxICYmCisJY2F0ID4uZ2l0L2hvb2tzL3ByZS1jb21taXQgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCWdpdCBjbG9uZSAuLi9yMCAuLi9yMgorCWV4aXQgMQorCUVPRgorCWNobW9kIHUreCAuZ2l0L2hvb2tzL3ByZS1jb21taXQgJiYKKwk6ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbnZva2UtaG9vayAmJgorCWNkIC4uICYmCisJdGVzdF9jbXAgcjAvLmdpdC9IRUFEIHIyLy5naXQvSEVBRCAmJgorCXRlc3RfY21wIHIwL2luaXRpYWwudCByMi9pbml0aWFsLnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjcmVhdGVzIGludGVybWVkaWF0ZSBkaXJlY3RvcmllcycgJworCisJZ2l0IGNsb25lIHNyYyBsb25nL3BhdGgvdG8vZHN0ICYmCisJdGVzdCAtZiBsb25nL3BhdGgvdG8vZHN0L2ZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjcmVhdGVzIGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBmb3IgYmFyZSByZXBvJyAnCisKKwlnaXQgY2xvbmUgLS1iYXJlIHNyYyBsb25nL3BhdGgvdG8vYmFyZS9kc3QgJiYKKwl0ZXN0IC1mIGxvbmcvcGF0aC90by9iYXJlL2RzdC9jb25maWcKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW1pcnJvcicgJworCisJZ2l0IGNsb25lIC0tbWlycm9yIHNyYyBtaXJyb3IgJiYKKwl0ZXN0IC1mIG1pcnJvci9IRUFEICYmCisJdGVzdCAhIC1mIG1pcnJvci9maWxlICYmCisJRkVUQ0g9IiQoY2QgbWlycm9yICYmIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCkiICYmCisJdGVzdCAiK3JlZnMvKjpyZWZzLyoiID0gIiRGRVRDSCIgJiYKKwlNSVJST1I9IiQoY2QgbWlycm9yICYmIGdpdCBjb25maWcgLS1ib29sIHJlbW90ZS5vcmlnaW4ubWlycm9yKSIgJiYKKwl0ZXN0ICIkTUlSUk9SIiA9IHRydWUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW1pcnJvciB3aXRoIGRldGFjaGVkIEhFQUQnICcKKworCSggY2Qgc3JjICYmIGdpdCBjaGVja291dCBIRUFEXiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgPi4uL2V4cGVjdGVkICkgJiYKKwlnaXQgY2xvbmUgLS1taXJyb3Igc3JjIG1pcnJvci5kZXRhY2hlZCAmJgorCSggY2Qgc3JjICYmIGdpdCBjaGVja291dCAtICkgJiYKKwlHSVRfRElSPW1pcnJvci5kZXRhY2hlZCBnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tYmFyZSB3aXRoIGRldGFjaGVkIEhFQUQnICcKKworCSggY2Qgc3JjICYmIGdpdCBjaGVja291dCBIRUFEXiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgPi4uL2V4cGVjdGVkICkgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHNyYyBiYXJlLmRldGFjaGVkICYmCisJKCBjZCBzcmMgJiYgZ2l0IGNoZWNrb3V0IC0gKSAmJgorCUdJVF9ESVI9YmFyZS5kZXRhY2hlZCBnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tYmFyZSBuYW1lcyB0aGUgbG9jYWwgcmVwb3NpdG9yeSA8bmFtZT4uZ2l0JyAnCisKKwlnaXQgY2xvbmUgLS1iYXJlIHNyYyAmJgorCXRlc3QgLWQgc3JjLmdpdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbWlycm9yIGRvZXMgbm90IHJlcGVhdCB0YWdzJyAnCisKKwkoY2Qgc3JjICYmCisJIGdpdCB0YWcgc29tZS10YWcgSEVBRCkgJiYKKwlnaXQgY2xvbmUgLS1taXJyb3Igc3JjIG1pcnJvcjIgJiYKKwkoY2QgbWlycm9yMiAmJgorCSBnaXQgc2hvdy1yZWYgMj4gY2xvbmUuZXJyID4gY2xvbmUub3V0KSAmJgorCSEgZ3JlcCBEdXBsaWNhdGUgbWlycm9yMi9jbG9uZS5lcnIgJiYKKwlncmVwIHNvbWUtdGFnIG1pcnJvcjIvY2xvbmUub3V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gZGVzdGluYXRpb24gd2l0aCB0cmFpbGluZyAvJyAnCisKKwlnaXQgY2xvbmUgc3JjIHRhcmdldC0xLyAmJgorCVQ9JCggY2QgdGFyZ2V0LTEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwlTPSQoIGNkIHNyYyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgKSAmJgorCXRlc3QgIiRUIiA9ICIkUyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byBkZXN0aW5hdGlvbiB3aXRoIGV4dHJhIHRyYWlsaW5nIC8nICcKKworCWdpdCBjbG9uZSBzcmMgdGFyZ2V0LTIvLy8gJiYKKwlUPSQoIGNkIHRhcmdldC0yICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJUz0kKCBjZCBzcmMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwl0ZXN0ICIkVCIgPSAiJFMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gYW4gZXhpc3RpbmcgZW1wdHkgZGlyZWN0b3J5JyAnCisJbWtkaXIgdGFyZ2V0LTMgJiYKKwlnaXQgY2xvbmUgc3JjIHRhcmdldC0zICYmCisJVD0kKCBjZCB0YXJnZXQtMyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgKSAmJgorCVM9JCggY2Qgc3JjICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJdGVzdCAiJFQiID0gIiRTIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byBhbiBleGlzdGluZyBub24tZW1wdHkgZGlyZWN0b3J5JyAnCisJbWtkaXIgdGFyZ2V0LTQgJiYKKwk+dGFyZ2V0LTQvRmFrZWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgc3JjIHRhcmdldC00CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIGFuIGV4aXN0aW5nIHBhdGgnICcKKwk+dGFyZ2V0LTUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgc3JjIHRhcmdldC01CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGEgdm9pZCcgJworCW1rZGlyIHNyYy0wICYmCisJKAorCQljZCBzcmMtMCAmJiBnaXQgaW5pdAorCSkgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvc3JjLTAiIHRhcmdldC02IDI+ZXJyLTYgJiYKKwkhIGdyZXAgImZhdGFsOiIgZXJyLTYgJiYKKwkoCisJCWNkIHNyYy0wICYmIHRlc3RfY29tbWl0IEEKKwkpICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NyYy0wIiB0YXJnZXQtNyAyPmVyci03ICYmCisJISBncmVwICJmYXRhbDoiIGVyci03ICYmCisJIyBUaGVyZSBpcyBubyByZWFzb24gdG8gaW5zaXN0IHRoZXkgYXJlIGJpdC1mb3ItYml0CisJIyBpZGVudGljYWwsIGJ1dCB0aGlzIHRlc3Qgc2hvdWxkIHN1ZmZpY2UgZm9yIG5vdy4KKwl0ZXN0X2NtcCB0YXJnZXQtNi8uZ2l0L2NvbmZpZyB0YXJnZXQtNy8uZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXNwZWN0cyBnbG9iYWwgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZScgJworCSgKKwkJdGVzdF9jb25maWc9IiRIT01FLy5naXRjb25maWciICYmCisJCWdpdCBjb25maWcgLWYgIiR0ZXN0X2NvbmZpZyIgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwkJcm0gLWZyIGRzdCAmJgorCQlnaXQgY2xvbmUgc3JjIGRzdCAmJgorCQljZCBkc3QgJiYKKwkJYWN0dWFsPSJ6JChnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmViYXNlKSIgJiYKKwkJdGVzdCB6dHJ1ZSA9ICRhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgdXJsLWVuY29kaW5nIG9mIGZpbGU6Ly8nICcKKwlnaXQgaW5pdCB4K3kgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3greSIgeHktdXJsLTEgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3glMkJ5IiB4eS11cmwtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgcXVlcnktc3RyaW5nLWRlY29kZSArIGluIFVSTHMnICcKKwlybSAtcmYgeCt5ICYmCisJZ2l0IGluaXQgInggeSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3greSIgeHktbm8tcGx1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgcmVzcGVjdCB1cmwtZW5jb2Rpbmcgb2Ygbm9uLXVybCBwYXRoJyAnCisJZ2l0IGluaXQgeCt5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHglMkJ5IHh5LXJlZ3VsYXIgJiYKKwlnaXQgY2xvbmUgeCt5IHh5LXJlZ3VsYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2VwYXJhdGUgZ2l0ZGlyJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXIgcmVhbGdpdGRpciBzcmMgZHN0ICYmCisJdGVzdCAtZCByZWFsZ2l0ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2VwYXJhdGUgZ2l0ZGlyOiBvdXRwdXQnICcKKwllY2hvICJnaXRkaXI6ICQocHdkKS9yZWFsZ2l0ZGlyIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkc3QvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIC5naXQgZmlsZScgJworCWdpdCBjbG9uZSBkc3QvLmdpdCBkc3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZyb20gLmdpdCBnaXRmaWxlJyAnCisJKAorCQljZCBkc3QyICYmCisJCWdpdCBmZXRjaCAuLi9kc3QvLmdpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBnaXRmaWxlIHBhcmVudCcgJworCSgKKwkJY2QgZHN0MiAmJgorCQlnaXQgZmV0Y2ggLi4vZHN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzZXBhcmF0ZSBnaXRkaXIgd2hlcmUgdGFyZ2V0IGFscmVhZHkgZXhpc3RzJyAnCisJcm0gLXJmIGRzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXIgcmVhbGdpdGRpciBzcmMgZHN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tcmVmZXJlbmNlIGZyb20gb3JpZ2luYWwnICcKKwlnaXQgY2xvbmUgLS1zaGFyZWQgLS1iYXJlIHNyYyBzcmMtMSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgc3JjIHNyYy0yICYmCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlPXNyYy0yIC0tYmFyZSBzcmMtMSB0YXJnZXQtOCAmJgorCWdyZXAgL3NyYy0yLyB0YXJnZXQtOC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIG1vcmUgdGhhbiBvbmUgLS1yZWZlcmVuY2UnICcKKwlnaXQgY2xvbmUgLS1iYXJlIHNyYyBzcmMtMyAmJgorCWdpdCBjbG9uZSAtLWJhcmUgc3JjIHNyYy00ICYmCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlPXNyYy0zIC0tcmVmZXJlbmNlPXNyYy00IHNyYyB0YXJnZXQtOSAmJgorCWdyZXAgL3NyYy0zLyB0YXJnZXQtOS8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZ3JlcCAvc3JjLTQvIHRhcmdldC05Ly5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSBvcmlnaW5hbCB3aXRoIHJlbGF0aXZlIGFsdGVybmF0ZScgJworCW1rZGlyIG5lc3QgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHNyYyBuZXN0L3NyYy01ICYmCisJZWNobyAuLi8uLi8uLi9zcmMvLmdpdC9vYmplY3RzID5uZXN0L3NyYy01L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZ2l0IGNsb25lIC0tYmFyZSBuZXN0L3NyYy01IHRhcmdldC0xMCAmJgorCWdyZXAgL3NyYy9cXC5naXQvb2JqZWN0cyB0YXJnZXQtMTAvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2hlY2tpbmcgb3V0IGEgdGFnJyAnCisJZ2l0IGNsb25lIC0tYnJhbmNoPXNvbWUtdGFnIHNyYyBkc3QudGFnICYmCisJR0lUX0RJUj1zcmMvLmdpdCBnaXQgcmV2LXBhcnNlIHNvbWUtdGFnID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRzdC50YWcvLmdpdC9IRUFEICYmCisJR0lUX0RJUj1kc3QudGFnLy5naXQgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoID5mZXRjaC5hY3R1YWwgJiYKKwllY2hvICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgPmZldGNoLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZmV0Y2guZXhwZWN0ZWQgZmV0Y2guYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzc2ggd3JhcHBlcicgJworCWNwICIkR0lUX0JVSUxEX0RJUi90L2hlbHBlci90ZXN0LWZha2Utc3NoJFgiIFwKKwkJIiRUUkFTSF9ESVJFQ1RPUlkvc3NoJFgiICYmCisJR0lUX1NTSD0iJFRSQVNIX0RJUkVDVE9SWS9zc2gkWCIgJiYKKwlleHBvcnQgR0lUX1NTSCAmJgorCWV4cG9ydCBUUkFTSF9ESVJFQ1RPUlkgJiYKKwk+IiRUUkFTSF9ESVJFQ1RPUlkiL3NzaC1vdXRwdXQKKycKKworY29weV9zc2hfd3JhcHBlcl9hcyAoKSB7CisJcm0gLWYgIiR7MSUkWH0kWCIgJiYKKwljcCAiJFRSQVNIX0RJUkVDVE9SWS9zc2gkWCIgIiR7MSUkWH0kWCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtICQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkezElJFh9JFgiKSIgJiYKKwlHSVRfU1NIPSIkezElJFh9JFgiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJHSVRfU1NIPVwiXCRUUkFTSF9ESVJFQ1RPUlkvc3NoXCRYXCIiCit9CisKK2V4cGVjdF9zc2ggKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAnCisJCShjZCAiJFRSQVNIX0RJUkVDVE9SWSIgJiYgcm0gLWYgc3NoLWV4cGVjdCAmJiA+c3NoLW91dHB1dCkKKwknICYmCisJeworCQljYXNlICIkIyIgaW4KKwkJMSkKKwkJCTs7CisJCTIpCisJCQllY2hvICJzc2g6ICQxIGdpdC11cGxvYWQtcGFjayAnJDInIgorCQkJOzsKKwkJMykKKwkJCWVjaG8gInNzaDogJDEgJDIgZ2l0LXVwbG9hZC1wYWNrICckMyciCisJCQk7OworCQkqKQorCQkJZWNobyAic3NoOiAkMSAkMiBnaXQtdXBsb2FkLXBhY2sgJyQzJyAkNCIKKwkJZXNhYworCX0gPiIkVFJBU0hfRElSRUNUT1JZL3NzaC1leHBlY3QiICYmCisJKGNkICIkVFJBU0hfRElSRUNUT1JZIiAmJiB0ZXN0X2NtcCBzc2gtZXhwZWN0IHNzaC1vdXRwdXQpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG15aG9zdDpzcmMgdXNlcyBzc2gnICcKKwlHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgZ2l0IGNsb25lIG15aG9zdDpzcmMgc3NoLWNsb25lICYmCisJZXhwZWN0X3NzaCBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXLCFDWUdXSU4gJ2Nsb25lIGxvY2FsIHBhdGggZm9vOmJhcicgJworCWNwIC1SIHNyYyAiZm9vOmJhciIgJiYKKwlnaXQgY2xvbmUgImZvbzpiYXIiIGZvb2JhciAmJgorCWV4cGVjdF9zc2ggbm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFja2V0ZWQgaG9zdG5hbWVzIGFyZSBzdGlsbCBzc2gnICcKKwlHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZSAmJgorCWV4cGVjdF9zc2ggIi1wIDEyMyIgbXlob3N0IHNyYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPcGVuU1NIIHZhcmlhbnQgcGFzc2VzIC00JyAnCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBjbG9uZSAtNCAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWlwdjQtY2xvbmUgJiYKKwlleHBlY3Rfc3NoICItNCAtcCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFyaWFudCBjYW4gYmUgb3ZlcnJpZGRlbicgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvcHV0dHkiICYmCisJZ2l0IC1jIHNzaC52YXJpYW50PXB1dHR5IGNsb25lIC00ICJbbXlob3N0OjEyM106c3JjIiBzc2gtcHV0dHktY2xvbmUgJiYKKwlleHBlY3Rfc3NoICItNCAtUCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFyaWFudD1hdXRvIHBpY2tzIGJhc2VkIG9uIGJhc2VuYW1lJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9wbGluayIgJiYKKwlnaXQgLWMgc3NoLnZhcmlhbnQ9YXV0byBjbG9uZSAtNCAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWF1dG8tY2xvbmUgJiYKKwlleHBlY3Rfc3NoICItNCAtUCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIGRvZXMgbm90IHN1cHBvcnQgLTQvLTYnICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3NpbXBsZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLTQgIm15aG9zdDpzcmMiIHNzaC00LWNsb25lLXNpbXBsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgZG9lcyBub3Qgc3VwcG9ydCBwb3J0JyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9zaW1wbGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS1zaW1wbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsaW5rIGlzIHRyZWF0ZWQgYXMgc2ltcGxlJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS91cGxpbmsiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS11cGxpbmsgJiYKKwlnaXQgY2xvbmUgIm15aG9zdDpzcmMiIHNzaC1jbG9uZS11cGxpbmsgJiYKKwlleHBlY3Rfc3NoIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT3BlblNTSC1saWtlIHVwbGluayBpcyB0cmVhdGVkIGFzIHNzaCcgJworCXdyaXRlX3NjcmlwdCAiJFRSQVNIX0RJUkVDVE9SWS91cGxpbmsiIDw8LUVPRiAmJgorCWlmIHRlc3QgIlwkMSIgPSAiLUciCisJdGhlbgorCQlleGl0IDAKKwlmaSAmJgorCWV4ZWMgIlwkVFJBU0hfRElSRUNUT1JZL3NzaCRYIiAiXCRAIgorCUVPRgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCJcJFRSQVNIX0RJUkVDVE9SWS91cGxpbmtcIiIgJiYKKwlHSVRfU1NIPSIkVFJBU0hfRElSRUNUT1JZL3VwbGluayIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIkdJVF9TU0g9XCJcJFRSQVNIX0RJUkVDVE9SWS9zc2hcJFhcIiIgJiYKKwlHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS1zc2hsaWtlLXVwbGluayAmJgorCWV4cGVjdF9zc2ggIi1wIDEyMyIgbXlob3N0IHNyYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGluayBpcyB0cmVhdGVkIHNwZWNpYWxseSAoYXMgcHV0dHkpJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9wbGluayIgJiYKKwlnaXQgY2xvbmUgIltteWhvc3Q6MTIzXTpzcmMiIHNzaC1icmFja2V0LWNsb25lLXBsaW5rLTAgJiYKKwlleHBlY3Rfc3NoICItUCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxpbmsuZXhlIGlzIHRyZWF0ZWQgc3BlY2lhbGx5IChhcyBwdXR0eSknICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3BsaW5rLmV4ZSIgJiYKKwlnaXQgY2xvbmUgIltteWhvc3Q6MTIzXTpzcmMiIHNzaC1icmFja2V0LWNsb25lLXBsaW5rLTEgJiYKKwlleHBlY3Rfc3NoICItUCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG9ydG9pc2VwbGluayBpcyBsaWtlIHB1dHR5LCB3aXRoIGV4dHJhIGFyZ3VtZW50cycgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvdG9ydG9pc2VwbGluayIgJiYKKwlnaXQgY2xvbmUgIltteWhvc3Q6MTIzXTpzcmMiIHNzaC1icmFja2V0LWNsb25lLXBsaW5rLTIgJiYKKwlleHBlY3Rfc3NoICItYmF0Y2ggLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvdWJsZSBxdW90ZWQgcGxpbmsuZXhlIGluIEdJVF9TU0hfQ09NTUFORCcgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvcGxpbmsuZXhlIiAmJgorCUdJVF9TU0hfQ09NTUFORD0iXCIkVFJBU0hfRElSRUNUT1JZL3BsaW5rLmV4ZVwiIC12IiBcCisJCWdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUtcGxpbmstMyAmJgorCWV4cGVjdF9zc2ggIi12IC1QIDEyMyIgbXlob3N0IHNyYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgcXVvdGVkIHBsaW5rLmV4ZSBpbiBHSVRfU1NIX0NPTU1BTkQnICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3BsaW5rLmV4ZSIgJiYKKwlHSVRfU1NIX0NPTU1BTkQ9IiRTUSRUUkFTSF9ESVJFQ1RPUlkvcGxpbmsuZXhlJFNRIC12IiBcCisJCWdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUtcGxpbmstNCAmJgorCWV4cGVjdF9zc2ggIi12IC1QIDEyMyIgbXlob3N0IHNyYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfU1NIX1ZBUklBTlQgb3ZlcnJpZGVzIHBsaW5rIGRldGVjdGlvbicgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvcGxpbmsiICYmCisJR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIEdJVF9TU0hfVkFSSUFOVD1zc2ggXAorCQlnaXQgY2xvbmUgIltteWhvc3Q6MTIzXTpzcmMiIHNzaC1icmFja2V0LWNsb25lLXZhcmlhbnQtMSAmJgorCWV4cGVjdF9zc2ggIi1wIDEyMyIgbXlob3N0IHNyYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzc2gudmFyaWFudCBvdmVycmlkZXMgcGxpbmsgZGV0ZWN0aW9uJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9wbGluayIgJiYKKwlHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgZ2l0IC1jIHNzaC52YXJpYW50PXNzaCBcCisJCWNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS12YXJpYW50LTIgJiYKKwlleHBlY3Rfc3NoICItcCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1NTSF9WQVJJQU5UIG92ZXJyaWRlcyBwbGluayBkZXRlY3Rpb24gdG8gcGxpbmsnICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3BsaW5rIiAmJgorCUdJVF9TU0hfVkFSSUFOVD1wbGluayBcCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS12YXJpYW50LTMgJiYKKwlleHBlY3Rfc3NoICItUCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1NTSF9WQVJJQU5UIG92ZXJyaWRlcyBwbGluayB0byB0b3J0b2lzZXBsaW5rJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9wbGluayIgJiYKKwlHSVRfU1NIX1ZBUklBTlQ9dG9ydG9pc2VwbGluayBcCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS12YXJpYW50LTQgJiYKKwlleHBlY3Rfc3NoICItYmF0Y2ggLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuIGZhaWx1cmUgb24gYnJva2VuIHF1b3RpbmcnICcKKwl0ZXN0X211c3RfZmFpbCBcCisJCWVudiBHSVRfU1NIX0NPTU1BTkQ9IiR7U1F9cGxpbmsuZXhlIC12IiBcCisJCWdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3EtZmFpbHVyZQorJworCitjb3VudGVyPTAKKyMgJDEgdXJsCisjICQyIG5vbmV8aG9zdAorIyAkMyBwYXRoCit0ZXN0X2Nsb25lX3VybCAoKSB7CisJY291bnRlcj0kKCgkY291bnRlciArIDEpKQorCXRlc3RfbWlnaHRfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCBjbG9uZSAiJDEiIHRtcCRjb3VudGVyICYmCisJc2hpZnQgJiYKKwlleHBlY3Rfc3NoICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csIUNZR1dJTiAnY2xvbmUgYzp0ZW1wIGlzIHNzbCcgJworCXRlc3RfY2xvbmVfdXJsIGM6dGVtcCBjIHRlbXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAnY2xvbmUgYzp0ZW1wIGlzIGRvcyBkcml2ZScgJworCXRlc3RfY2xvbmVfdXJsIGM6dGVtcCBub25lCisnCisKKyNpcCB2NAorZm9yIHJlcG8gaW4gcmVwIHJlcC9ob21lL3Byb2plY3QgMTIzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIGhvc3Q6JHJlcG8iICcKKwkJdGVzdF9jbG9uZV91cmwgaG9zdDokcmVwbyBob3N0ICRyZXBvCisJJworZG9uZQorCisjaXB2NgorZm9yIHJlcG8gaW4gcmVwIHJlcC9ob21lL3Byb2plY3QgMTIzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIFs6OjFdOiRyZXBvIiAnCisJCXRlc3RfY2xvbmVfdXJsIFs6OjFdOiRyZXBvIDo6MSAiJHJlcG8iCisJJworZG9uZQorI2hvbWUgZGlyZWN0b3J5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBob3N0Oi9+cmVwbyIgJworCXRlc3RfY2xvbmVfdXJsIGhvc3Q6L35yZXBvIGhvc3QgIn5yZXBvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBbOjoxXTovfnJlcG8iICcKKwl0ZXN0X2Nsb25lX3VybCBbOjoxXTovfnJlcG8gOjoxICJ+cmVwbyIKKycKKworIyBDb3JuZXIgY2FzZXMKK2ZvciB1cmwgaW4gZm9vL2JhcjpiYXogW2Zvb11iYXIvYmF6OnF1eCBbZm9vL2Jhcl06YmF6CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lICR1cmwgaXMgbm90IHNzaCIgJworCQl0ZXN0X2Nsb25lX3VybCAkdXJsIG5vbmUKKwknCitkb25lCisKKyN3aXRoIHNzaDovLyBzY2hlbWUKKyNpZ25vcmUgdHJhaWxpbmcgY29sb24KK2ZvciB0Y29sIGluICIiIDoKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc3NoOi8vaG9zdC54eiR0Y29sL2hvbWUvdXNlci9yZXBvIiAnCisJCXRlc3RfY2xvbmVfdXJsICJzc2g6Ly9ob3N0Lnh6JHRjb2wvaG9tZS91c2VyL3JlcG8iIGhvc3QueHogL2hvbWUvdXNlci9yZXBvCisJJworCSMgZnJvbSBob21lIGRpcmVjdG9yeQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNzaDovL2hvc3QueHokdGNvbC9+cmVwbyIgJworCXRlc3RfY2xvbmVfdXJsICJzc2g6Ly9ob3N0Lnh6JHRjb2wvfnJlcG8iIGhvc3QueHogIn5yZXBvIgorJworZG9uZQorCisjIHdpdGggcG9ydCBudW1iZXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNzaDovL2hvc3QueHo6MjIvaG9tZS91c2VyL3JlcG8nICcKKwl0ZXN0X2Nsb25lX3VybCAic3NoOi8vaG9zdC54ejoyMi9ob21lL3VzZXIvcmVwbyIgIi1wIDIyIGhvc3QueHoiICIvaG9tZS91c2VyL3JlcG8iCisnCisKKyMgZnJvbSBob21lIGRpcmVjdG9yeSB3aXRoIHBvcnQgbnVtYmVyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzc2g6Ly9ob3N0Lnh6OjIyL35yZXBvJyAnCisJdGVzdF9jbG9uZV91cmwgInNzaDovL2hvc3QueHo6MjIvfnJlcG8iICItcCAyMiBob3N0Lnh6IiAifnJlcG8iCisnCisKKyNJUHY2Citmb3IgdHVhaCBpbiA6OjEgWzo6MV0gWzo6MV06IHVzZXJAOjoxIHVzZXJAWzo6MV0gdXNlckBbOjoxXTogW3VzZXJAOjoxXSBbdXNlckA6OjFdOgorZG8KKwllaG9zdD0kKGVjaG8gJHR1YWggfCBzZWQgLWUgInMvMV06LzFdLyIgfCB0ciAtZCAiW10iKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNzaDovLyR0dWFoL2hvbWUvdXNlci9yZXBvIiAiCisJICB0ZXN0X2Nsb25lX3VybCBzc2g6Ly8kdHVhaC9ob21lL3VzZXIvcmVwbyAkZWhvc3QgL2hvbWUvdXNlci9yZXBvCisJIgorZG9uZQorCisjSVB2NiBmcm9tIGhvbWUgZGlyZWN0b3J5Citmb3IgdHVhaCBpbiA6OjEgWzo6MV0gdXNlckA6OjEgdXNlckBbOjoxXSBbdXNlckA6OjFdCitkbworCWV1YWg9JChlY2hvICR0dWFoIHwgdHIgLWQgIltdIikKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzc2g6Ly8kdHVhaC9+cmVwbyIgIgorCSAgdGVzdF9jbG9uZV91cmwgc3NoOi8vJHR1YWgvfnJlcG8gJGV1YWggJ35yZXBvJworCSIKK2RvbmUKKworI0lQdjYgd2l0aCBwb3J0IG51bWJlcgorZm9yIHR1YWggaW4gWzo6MV0gdXNlckBbOjoxXSBbdXNlckA6OjFdCitkbworCWV1YWg9JChlY2hvICR0dWFoIHwgdHIgLWQgIltdIikKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzc2g6Ly8kdHVhaDoyMi9ob21lL3VzZXIvcmVwbyIgIgorCSAgdGVzdF9jbG9uZV91cmwgc3NoOi8vJHR1YWg6MjIvaG9tZS91c2VyL3JlcG8gJy1wIDIyJyAkZXVhaCAvaG9tZS91c2VyL3JlcG8KKwkiCitkb25lCisKKyNJUHY2IGZyb20gaG9tZSBkaXJlY3Rvcnkgd2l0aCBwb3J0IG51bWJlcgorZm9yIHR1YWggaW4gWzo6MV0gdXNlckBbOjoxXSBbdXNlckA6OjFdCitkbworCWV1YWg9JChlY2hvICR0dWFoIHwgdHIgLWQgIltdIikKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzc2g6Ly8kdHVhaDoyMi9+cmVwbyIgIgorCSAgdGVzdF9jbG9uZV91cmwgc3NoOi8vJHR1YWg6MjIvfnJlcG8gJy1wIDIyJyAkZXVhaCAnfnJlcG8nCisJIgorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIGEgcmVwb3NpdG9yeSB3aXRoIHR3byBpZGVudGljYWwgYnJhbmNoZXMnICcKKworCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBjaGVja291dCAtYiBhbm90aGVyIG1hc3RlcgorCSkgJiYKKwlnaXQgY2xvbmUgc3JjIHRhcmdldC0xMSAmJgorCXRlc3QgInokKCBjZCB0YXJnZXQtMTEgJiYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICkiID0genJlZnMvaGVhZHMvYW5vdGhlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgbG9jYWxseScgJworCWdpdCBjbG9uZSAtLWRlcHRoPTEgLS1uby1sb2NhbCBzcmMgc3NycmNjICYmCisJZ2l0IGNsb25lIHNzcnJjYyBkZHNzdHQgJiYKKwl0ZXN0X2NtcCBzc3JyY2MvLmdpdC9zaGFsbG93IGRkc3N0dC8uZ2l0L3NoYWxsb3cgJiYKKwkoIGNkIGRkc3N0dCAmJiBnaXQgZnNjayApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9UUkFDRV9QQUNLRklMRSBwcm9kdWNlcyBhIHVzYWJsZSBwYWNrJyAnCisJcm0gLXJmIGRzdC5naXQgJiYKKwlHSVRfVFJBQ0VfUEFDS0ZJTEU9JFBXRC90bXAucGFjayBnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgc3JjIGRzdC5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVwbGF5LmdpdCAmJgorCWdpdCAtQyByZXBsYXkuZ2l0IGluZGV4LXBhY2sgLXYgLS1zdGRpbiA8dG1wLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgb24gY2FzZS1pbnNlbnNpdGl2ZSBmcycgJworCWdpdCBpbml0IGljYXNlZnMgJiYKKwkoCisJCWNkIGljYXNlZnMgJiYKKwkJbz0kKGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIDwvZGV2L251bGwgfCBoZXgyb2N0KSAmJgorCQl0PSQocHJpbnRmICIxMDA2NDQgWFwwJHtvfTEwMDY0NCB4XDAke299IiB8CisJCQlnaXQgaGFzaC1vYmplY3QgLXcgLXQgdHJlZSAtLXN0ZGluKSAmJgorCQljPSQoZ2l0IGNvbW1pdC10cmVlIC1tIGJvZ3VzICR0KSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICRjICYmCisJCWdpdCBjbG9uZSAtYiBib2d1cyAuIGJvZ3VzIDI+d2FybmluZworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDQVNFX0lOU0VOU0lUSVZFX0ZTICdjb2xsaWRpbmcgZmlsZSBkZXRlY3Rpb24nICcKKwlncmVwIFggaWNhc2Vmcy93YXJuaW5nICYmCisJZ3JlcCB4IGljYXNlZnMvd2FybmluZyAmJgorCXRlc3RfaTE4bmdyZXAgInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCIgaWNhc2Vmcy93YXJuaW5nCisnCisKK3BhcnRpYWxfY2xvbmVfc2VydmVyICgpIHsKKwkgICAgICAgU0VSVkVSPSIkMSIgJiYKKworCXJtIC1yZiAiJFNFUlZFUiIgY2xpZW50ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJFNFUlZFUiIgJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJFNFUlZFUiIgb25lICYmCisJSEFTSDE9JChnaXQgLUMgIiRTRVJWRVIiIGhhc2gtb2JqZWN0IG9uZS50KSAmJgorCWdpdCAtQyAiJFNFUlZFUiIgcmV2ZXJ0IEhFQUQgJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJFNFUlZFUiIgdHdvICYmCisJSEFTSDI9JChnaXQgLUMgIiRTRVJWRVIiIGhhc2gtb2JqZWN0IHR3by50KSAmJgorCXRlc3RfY29uZmlnIC1DICIkU0VSVkVSIiB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMQorfQorCitwYXJ0aWFsX2Nsb25lICgpIHsKKwkgICAgICAgU0VSVkVSPSIkMSIgJiYKKwkgICAgICAgVVJMPSIkMiIgJiYKKworCXBhcnRpYWxfY2xvbmVfc2VydmVyICIke1NFUlZFUn0iICYmCisJZ2l0IGNsb25lIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiJFVSTCIgY2xpZW50ICYmCisKKwlnaXQgLUMgY2xpZW50IGZzY2sgJiYKKworCSMgRW5zdXJlIHRoYXQgdW5uZWVkZWQgYmxvYnMgYXJlIG5vdCBpbmFkdmVydGVudGx5IGZldGNoZWQuCisJdGVzdF9jb25maWcgLUMgY2xpZW50IHJlbW90ZS5vcmlnaW4ucHJvbWlzb3IgImZhbHNlIiAmJgorCWdpdCAtQyBjbGllbnQgY29uZmlnIC0tdW5zZXQgcmVtb3RlLm9yaWdpbi5wYXJ0aWFsY2xvbmVmaWx0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgY2xpZW50IGNhdC1maWxlIC1lICIkSEFTSDEiICYmCisKKwkjIEJ1dCB0aGlzIGJsb2Igd2FzIGZldGNoZWQsIGJlY2F1c2UgY2xvbmUgcGVyZm9ybXMgYW4gaW5pdGlhbCBjaGVja291dAorCWdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgIiRIQVNIMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZScgJworCXBhcnRpYWxfY2xvbmUgc2VydmVyICJmaWxlOi8vJChwd2QpL3NlcnZlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZSB3aXRoIC1vJyAnCisJcGFydGlhbF9jbG9uZV9zZXJ2ZXIgc2VydmVyICYmCisJZ2l0IGNsb25lIC1vIGJsYWggLS1maWx0ZXI9YmxvYjpsaW1pdD0wICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY2xvbmU6IHdhcm4gaWYgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgb2JqZWN0IGZpbHRlcmluZycgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50ICYmCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgb25lICYmCisKKwlnaXQgY2xvbmUgLS1maWx0ZXI9YmxvYjpsaW1pdD0wICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50IDI+IGVyciAmJgorCisJdGVzdF9pMThuZ3JlcCAiZmlsdGVyaW5nIG5vdCByZWNvZ25pemVkIGJ5IHNlcnZlciIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhdGNoIG1pc3NpbmcgYmxvYiByZXF1ZXN0IGR1cmluZyBjaGVja291dCcgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50ICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCWVjaG8gYSA+c2VydmVyL2EgJiYKKwllY2hvIGIgPnNlcnZlci9iICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYSBiICYmCisKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisJZWNobyBhYSA+c2VydmVyL2EgJiYKKwllY2hvIGJiID5zZXJ2ZXIvYiAmJgorCWdpdCAtQyBzZXJ2ZXIgYWRkIGEgYiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1tIHggJiYKKworCXRlc3RfY29uZmlnIC1DIHNlcnZlciB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJZ2l0IGNsb25lIC0tZmlsdGVyPWJsb2I6bGltaXQ9MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBuZWdvdGlhdGlvbiBieSBjaGVja2luZyB0aGF0IHRoZXJlIGlzCisJIyBvbmx5ICJkb25lIiBsaW5lIHNlbnQuICgiZG9uZSIgbWFya3MgdGhlIGVuZCBvZiBuZWdvdGlhdGlvbi4pCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IGNoZWNrb3V0IEhFQUReICYmCisJZ3JlcCAiZ2l0PiBkb25lIiB0cmFjZSA+ZG9uZV9saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgZG9uZV9saW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXRjaCBtaXNzaW5nIGJsb2IgcmVxdWVzdCBkb2VzIG5vdCBpbmFkdmVydGVudGx5IHRyeSB0byBmZXRjaCBnaXRsaW5rcycgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50ICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG9fZm9yX3N1Ym1vZHVsZSAmJgorCXRlc3RfY29tbWl0IC1DIHJlcG9fZm9yX3N1Ym1vZHVsZSB4ICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCWVjaG8gYSA+c2VydmVyL2EgJiYKKwllY2hvIGIgPnNlcnZlci9iICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYSBiICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0geCAmJgorCisJZWNobyBhYSA+c2VydmVyL2EgJiYKKwllY2hvIGJiID5zZXJ2ZXIvYiAmJgorCSMgQWxzbyBhZGQgYSBnaXRsaW5rIHBvaW50aW5nIHRvIGFuIGFyYml0cmFyeSByZXBvc2l0b3J5CisJZ2l0IC1DIHNlcnZlciBzdWJtb2R1bGUgYWRkICIkKHB3ZCkvcmVwb19mb3Jfc3VibW9kdWxlIiBjICYmCisJZ2l0IC1DIHNlcnZlciBhZGQgYSBiIGMgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSB4ICYmCisKKwl0ZXN0X2NvbmZpZyAtQyBzZXJ2ZXIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc2VydmVyIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKworCSMgTWFrZSBzdXJlIHRoYXQgaXQgc3VjY2VlZHMKKwlnaXQgY2xvbmUgLS1maWx0ZXI9YmxvYjpsaW1pdD0wICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50CisnCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNsb25lIHVzaW5nIEhUVFAnICcKKwlwYXJ0aWFsX2Nsb25lICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NlcnZlciIgIiRIVFRQRF9VUkwvc21hcnQvc2VydmVyIgorJworCisjIERPIE5PVCBhZGQgbm9uLWh0dHBkLXNwZWNpZmljIHRlc3RzIGhlcmUsIGJlY2F1c2UgdGhlIGxhc3QgcGFydCBvZiB0aGlzCisjIHRlc3Qgc2NyaXB0IGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBodHRwZCBpcyBhdmFpbGFibGUgYW5kIGVuYWJsZWQuCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwMi1jbG9uZS1yZW1vdGUtZXhlYy5zaCBiL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2JjY2VhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Y2xvbmUKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gIiMhL2Jpbi9zaCIgPiBub3Rfc3NoICYmCisJZWNobyAiZWNobyBcIlwkKlwiID4gbm90X3NzaF9vdXRwdXQiID4+IG5vdF9zc2ggJiYKKwllY2hvICJleGl0IDEiID4+IG5vdF9zc2ggJiYKKwljaG1vZCAreCBub3Rfc3NoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNhbGxzIGdpdCB1cGxvYWQtcGFjayB1bnF1YWxpZmllZCB3aXRoIG5vIC11IG9wdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfU1NIPS4vbm90X3NzaCBnaXQgY2xvbmUgbG9jYWxob3N0Oi9wYXRoL3RvL3JlcG8ganVuayAmJgorCWVjaG8gImxvY2FsaG9zdCBnaXQtdXBsb2FkLXBhY2sgJ1wnJy9wYXRoL3RvL3JlcG8nXCcnIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBub3Rfc3NoX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjYWxscyBzcGVjaWZpZWQgZ2l0IHVwbG9hZC1wYWNrIHdpdGggLXUgb3B0aW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9TU0g9Li9ub3Rfc3NoIFwKKwkJZ2l0IGNsb25lIC11IC4vc29tZXRoaW5nL2Jpbi9naXQtdXBsb2FkLXBhY2sgbG9jYWxob3N0Oi9wYXRoL3RvL3JlcG8ganVuayAmJgorCWVjaG8gImxvY2FsaG9zdCAuL3NvbWV0aGluZy9iaW4vZ2l0LXVwbG9hZC1wYWNrICdcJycvcGF0aC90by9yZXBvJ1wnJyIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbm90X3NzaF9vdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjAzLWNsb25lLWRpcm5hbWUuc2ggYi90L3Q1NjAzLWNsb25lLWRpcm5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTNiNWU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDMtY2xvbmUtZGlybmFtZS5zaApAQCAtMCwwICsxLDEwOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIG91dHB1dCBkaXJlY3RvcnkgbmFtZXMgdXNlZCBieSBnaXQtY2xvbmUnCisuIC4vdGVzdC1saWIuc2gKKworIyB3ZSB1c2UgYSBmYWtlIHNzaCB3cmFwcGVyIHRoYXQgaWdub3JlcyB0aGUgYXJndW1lbnRzCisjIGVudGlyZWx5OyB3ZSByZWFsbHkgb25seSBjYXJlIHRoYXQgd2UgZ2V0IF9zb21lXyByZXBvLAorIyBhcyB0aGUgcmVhbCB0ZXN0IGlzIHdoYXQgY2xvbmUgZG9lcyBvbiB0aGUgbG9jYWwgc2lkZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3NoIHdyYXBwZXInICcKKwl3cml0ZV9zY3JpcHQgIiRUUkFTSF9ESVJFQ1RPUlkvc3NoLXdyYXBwZXIiIDw8LVxFT0YgJiYKKwlnaXQgdXBsb2FkLXBhY2sgIiRUUkFTSF9ESVJFQ1RPUlkiCisJRU9GCisJR0lUX1NTSD0iJFRSQVNIX0RJUkVDVE9SWS9zc2gtd3JhcHBlciIgJiYKKwlHSVRfU1NIX1ZBUklBTlQ9c3NoICYmCisJZXhwb3J0IEdJVF9TU0ggJiYKKwlleHBvcnQgR0lUX1NTSF9WQVJJQU5UICYmCisJZXhwb3J0IFRSQVNIX0RJUkVDVE9SWQorJworCisjIG1ha2Ugc3VyZSB0aGF0IGNsb25pbmcgJDEgcmVzdWx0cyBpbiBsb2NhbCBkaXJlY3RvcnkgJDIKK3Rlc3RfY2xvbmVfZGlyICgpIHsKKwl1cmw9JDE7IHNoaWZ0CisJZGlyPSQxOyBzaGlmdAorCWV4cGVjdD1zdWNjZXNzCisJYmFyZT1ub24tYmFyZQorCWNsb25lX29wdHM9CisJZm9yIGkgaW4gIiRAIgorCWRvCisJCWNhc2UgIiRpIiBpbgorCQlmYWlsKQorCQkJZXhwZWN0PWZhaWx1cmUKKwkJCTs7CisJCWJhcmUpCisJCQliYXJlPWJhcmUKKwkJCWNsb25lX29wdHM9LS1iYXJlCisJCQk7OworCQllc2FjCisJZG9uZQorCXRlc3RfZXhwZWN0XyRleHBlY3QgImNsb25lIG9mICR1cmwgZ29lcyB0byAkZGlyICgkYmFyZSkiICIKKwkJcm0gLXJmICRkaXIgJiYKKwkJZ2l0IGNsb25lICRjbG9uZV9vcHRzICR1cmwgJiYKKwkJdGVzdF9wYXRoX2lzX2RpciAkZGlyCisJIgorfQorCisjIGJhc2ljIHN5bnRheCB3aXRoIGJhcmUgYW5kIG5vbi1iYXJlIHZhcmlhbnRzCit0ZXN0X2Nsb25lX2RpciBob3N0OmZvbyBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vIGZvby5naXQgYmFyZQordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28uZ2l0IGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28uZ2l0IGZvby5naXQgYmFyZQordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28vLmdpdCBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy5naXQgZm9vLmdpdCBiYXJlCisKKyMgc2ltaWxhciwgYnV0IHVzaW5nIHNzaCBVUkwgcmF0aGVyIHRoYW4gaG9zdDpwYXRoIHN5bnRheAordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28gZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2ZvbyBmb28uZ2l0IGJhcmUKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLmdpdCBmb28KK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLmdpdCBmb28uZ2l0IGJhcmUKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLy5naXQgZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby8uZ2l0IGZvby5naXQgYmFyZQorCisjIHdlIHNob3VsZCByZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBhbmQgLmdpdCBzdWZmaXhlcwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vLy8gZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby8uZ2l0LyBmb28KK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLmdpdC8gZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby5naXQvLy8gZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby8vLy5naXQvIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vLmdpdC8vLyBmb28KKwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28vIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28vLy8gZm9vCit0ZXN0X2Nsb25lX2RpciBob3N0OmZvby5naXQvIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28vLmdpdC8gZm9vCit0ZXN0X2Nsb25lX2RpciBob3N0OmZvby5naXQvLy8gZm9vCit0ZXN0X2Nsb25lX2RpciBob3N0OmZvby8vLy5naXQvIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28vLmdpdC8vLyBmb28KKworIyBvbWl0dGluZyB0aGUgcGF0aCBzaG91bGQgZGVmYXVsdCB0byB0aGUgaG9zdG5hbWUKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvIGhvc3QKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3Q6MTIzNC8gaG9zdAordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlckBob3N0LyBob3N0Cit0ZXN0X2Nsb25lX2RpciBob3N0Oi8gaG9zdAorCisjIGF1dGggbWF0ZXJpYWxzIHNob3VsZCBiZSByZWRhY3RlZAordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd29yZEBob3N0LyBob3N0Cit0ZXN0X2Nsb25lX2RpciBzc2g6Ly91c2VyOnBhc3N3b3JkQGhvc3Q6MTIzNC8gaG9zdAordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd0ByZEBob3N0OjEyMzQvIGhvc3QKK3Rlc3RfY2xvbmVfZGlyIHVzZXJAaG9zdDovIGhvc3QKK3Rlc3RfY2xvbmVfZGlyIHVzZXI6cGFzc3dvcmRAaG9zdDovIGhvc3QKK3Rlc3RfY2xvbmVfZGlyIHVzZXI6cGFzc3dAcmRAaG9zdDovIGhvc3QKKworIyBhdXRoLWxpa2UgbWF0ZXJpYWwgc2hvdWxkIG5vdCBiZSBkcm9wcGVkCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvb0BiYXIgZm9vQGJhcgordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb29AYmFyLmdpdCBmb29AYmFyCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly91c2VyOnBhc3N3b3JkQGhvc3QvZm9vQGJhciBmb29AYmFyCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly91c2VyOnBhc3N3QHJkQGhvc3QvZm9vQGJhci5naXQgZm9vQGJhcgorCit0ZXN0X2Nsb25lX2RpciBob3N0Oi9mb29AYmFyIGZvb0BiYXIKK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6L2Zvb0BiYXIuZ2l0IGZvb0BiYXIKK3Rlc3RfY2xvbmVfZGlyIHVzZXI6cGFzc3dvcmRAaG9zdDovZm9vQGJhciBmb29AYmFyCit0ZXN0X2Nsb25lX2RpciB1c2VyOnBhc3N3QHJkQGhvc3Q6L2Zvb0BiYXIuZ2l0IGZvb0BiYXIKKworIyB0cmFpbGluZyBwb3J0LWxpa2UgbnVtYmVycyBzaG91bGQgbm90IGJlIHN0cmlwcGVkIGZvciBwYXRocwordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd29yZEBob3N0L3Rlc3Q6MTIzNCAxMjM0Cit0ZXN0X2Nsb25lX2RpciBzc2g6Ly91c2VyOnBhc3N3b3JkQGhvc3QvdGVzdDoxMjM0LmdpdCAxMjM0CisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwNC1jbG9uZS1yZWZlcmVuY2Uuc2ggYi90L3Q1NjA0LWNsb25lLXJlZmVyZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzc0YjRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwNC1jbG9uZS1yZWZlcmVuY2Uuc2gKQEAgLTAsMCArMSwzNTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgTWFydGluIFdhaXR6IDx0YWxpQGFkbWluZ2lsZGUub3JnPgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNsb25lIC0tcmVmZXJlbmNlJworLiAuL3Rlc3QtbGliLnNoCisKK2Jhc2VfZGlyPSQocHdkKQorCitVPSRiYXNlX2Rpci9VUExPQURfTE9HCisKKyMgY3JlYXRlIGEgY29tbWl0IGluIHJlcG8gJDEgd2l0aCBuYW1lICQyCitjb21taXRfaW4gKCkgeworCSgKKwkJY2QgIiQxIiAmJgorCQllY2hvICIkMiIgPiIkMiIgJiYKKwkJZ2l0IGFkZCAiJDIiICYmCisJCWdpdCBjb21taXQgLW0gIiQyIgorCSkKK30KKworIyBjaGVjayB0aGF0IHRoZXJlIGFyZSAkMiBsb29zZSBvYmplY3RzIGluIHJlcG8gJDEKK3Rlc3Rfb2JqY291bnQgKCkgeworCWVjaG8gIiQyIiA+ZXhwZWN0ICYmCisJZ2l0IC1DICIkMSIgY291bnQtb2JqZWN0cyA+YWN0dWFsLnJhdyAmJgorCWN1dCAtZCcgJyAtZjEgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIGZpcnN0IHJlcG9zaXRvcnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYKKwljb21taXRfaW4gQSBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc2Vjb25kIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgQSBCICYmCisJY29tbWl0X2luIEIgZmlsZTIgJiYKKwlnaXQgLUMgQiByZXBhY2sgLWFkICYmCisJZ2l0IC1DIEIgcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRoIHJlZmVyZW5jZSAoLWwgLXMpJyAnCisJZ2l0IGNsb25lIC1sIC1zIC0tcmVmZXJlbmNlIEIgQSBDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0ZW5jZSBvZiBpbmZvL2FsdGVybmF0ZXMnICcKKwl0ZXN0X2xpbmVfY291bnQgPSAyIEMvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGZyb20gcmVmZXJlbmNlJyAnCisJZ2l0IC1DIEMgcHVsbCAuLi9CIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IHJlZmVyZW5jZSBnZXRzIHVzZWQnICcKKwl0ZXN0X29iamNvdW50IEMgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggcmVmZXJlbmNlIChubyAtbCAtcyknICcKKwlHSVRfVFJBQ0VfUEFDS0VUPSRVLkQgZ2l0IGNsb25lIC0tcmVmZXJlbmNlIEIgImZpbGU6Ly8kKHB3ZCkvQSIgRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGVkIG5vIG9iamVjdHMnICcKKwl0ZXN0IC1zICIkVS5EIiAmJgorCSEgZ3JlcCAiIHdhbnQiICIkVS5EIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGVuY2Ugb2YgaW5mby9hbHRlcm5hdGVzJyAnCisJdGVzdF9saW5lX2NvdW50ID0gMSBELy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBmcm9tIHJlZmVyZW5jZScgJworCWdpdCAtQyBEIHB1bGwgLi4vQiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkJyAnCisJdGVzdF9vYmpjb3VudCBEIDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgb3JpZ2luJyAnCisJY29tbWl0X2luIEEgZmlsZTMgJiYKKwlnaXQgLUMgQSByZXBhY2sgLWFkICYmCisJZ2l0IC1DIEEgcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBjaGFuZ2VzIGZyb20gb3JpZ2luJyAnCisJZ2l0IC1DIEMgcHVsbCBvcmlnaW4KKycKKworIyB0aGUgMiBsb2NhbCBvYmplY3RzIGFyZSBjb21taXQgYW5kIHRyZWUgZnJvbSB0aGUgbWVyZ2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgYWx0ZXJuYXRlIHRvIG9yaWdpbiBnZXRzIHVzZWQnICcKKwl0ZXN0X29iamNvdW50IEMgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGNoYW5nZXMgZnJvbSBvcmlnaW4nICcKKwlnaXQgLUMgRCBwdWxsIG9yaWdpbgorJworCisjIHRoZSA1IGxvY2FsIG9iamVjdHMgYXJlIGV4cGVjdGVkOyBmaWxlMyBibG9iLCBjb21taXQgaW4gQSB0byBhZGQgaXQKKyMgYW5kIGl0cyB0cmVlLCBhbmQgMiBhcmUgb3VyIHRyZWUgYW5kIHRoZSBtZXJnZSBjb21taXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBvYmplY3RzIGV4cGVjdGVkIHRvIGV4aXN0IGxvY2FsbHknICcKKwl0ZXN0X29iamNvdW50IEQgNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgYWx0ZXJuYXRlIHJlcG9zaXRvcnkgIzEnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIEYgJiYKKwljb21taXRfaW4gRiBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGFsdGVybmF0ZSByZXBvICMyIGFuZCBhZGRpbmcgY2hhbmdlcyB0byByZXBvICMxJyAnCisJZ2l0IGNsb25lIEYgRyAmJgorCWNvbW1pdF9pbiBGIGZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgYWx0ZXJuYXRlIHJlcG8gIzEsIHVzaW5nICMyIGFzIHJlZmVyZW5jZScgJworCWdpdCBjbG9uZSAtLXJlZmVyZW5jZSBHIEYgSAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggcmVmZXJlbmNlIGJlaW5nIHN1YnNldCBvZiBzb3VyY2UgKC1sIC1zKScgJworCWdpdCBjbG9uZSAtbCAtcyAtLXJlZmVyZW5jZSBBIEIgRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggbXVsdGlwbGUgcmVmZXJlbmNlcyBkcm9wcyBkdXBsaWNhdGVzJyAnCisJZ2l0IGNsb25lIC1zIC0tcmVmZXJlbmNlIEIgLS1yZWZlcmVuY2UgQSAtLXJlZmVyZW5jZSBCIEEgZHVwcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgZHVwcy8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggcmVmZXJlbmNlIGZyb20gYSB0YWdnZWQgcmVwb3NpdG9yeScgJworCSgKKwkJY2QgQSAmJiBnaXQgdGFnIC1hIC1tIHRhZ2dlZCBIRUFECisJKSAmJgorCWdpdCBjbG9uZSAtLXJlZmVyZW5jZT1BIEEgSQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGJyYW5jaGVkIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgQSBKICYmCisJKAorCQljZCBKICYmCisJCWdpdCBjaGVja291dCAtYiBvdGhlciBtYXN0ZXJeICYmCisJCWVjaG8gb3RoZXIgPm90aGVyZmlsZSAmJgorCQlnaXQgYWRkIG90aGVyZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIG90aGVyICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggaW5jb21wbGV0ZSBhbHRlcm5hdGVzJyAnCisJZ2l0IGluaXQgSyAmJgorCWVjaG8gIiRiYXNlX2Rpci9BLy5naXQvb2JqZWN0cyIgPksvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCSgKKwkJY2QgSyAmJgorCQlnaXQgcmVtb3RlIGFkZCBKICJmaWxlOi8vJGJhc2VfZGlyL0oiICYmCisJCUdJVF9UUkFDRV9QQUNLRVQ9JFUuSyBnaXQgZmV0Y2ggSgorCSkgJiYKKwltYXN0ZXJfb2JqZWN0PSQoY2QgQSAmJiBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpIiByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0IC1zICIkVS5LIiAmJgorCSEgZ3JlcCAiIHdhbnQgJG1hc3Rlcl9vYmplY3QiICIkVS5LIiAmJgorCXRhZ19vYmplY3Q9JChjZCBBICYmIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZSkiIHJlZnMvdGFncy9IRUFEKSAmJgorCSEgZ3JlcCAiIHdhbnQgJHRhZ19vYmplY3QiICIkVS5LIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyByZXBvIHdpdGggZ2l0ZmlsZSBhcyBhIHJlZmVyZW5jZScgJworCWdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXI9TCBBIE0gJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2U9TSBBIE4gJiYKKwllY2hvICIkYmFzZV9kaXIvTC9vYmplY3RzIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGJhc2VfZGlyL04vLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgcmVwbyBwb2ludGVkIGF0IGJ5IGdpdGZpbGUgYXMgcmVmZXJlbmNlJyAnCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlPU0vLmdpdCBBIE8gJiYKKwllY2hvICIkYmFzZV9kaXIvTC9vYmplY3RzIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGJhc2VfZGlyL08vLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYW5kIGRpc3NvY2lhdGUgZnJvbSByZWZlcmVuY2UnICcKKwlnaXQgaW5pdCBQICYmCisJKAorCQljZCBQICYmCXRlc3RfY29tbWl0IG9uZQorCSkgJiYKKwlnaXQgY2xvbmUgUCBRICYmCisJKAorCQljZCBRICYmIHRlc3RfY29tbWl0IHR3bworCSkgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLXJlZmVyZW5jZT1QIFEgUiAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tcmVmZXJlbmNlPVAgLS1kaXNzb2NpYXRlIFEgUyAmJgorCSMgcmVtb3ZpbmcgdGhlIHJlZmVyZW5jZSBQIHdvdWxkIGNvcnJ1cHQgUiBidXQgbm90IFMKKwlybSAtZnIgUCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBSIGZzY2sgJiYKKwlnaXQgLUMgUyBmc2NrCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSwgZGlzc29jaWF0ZSBmcm9tIHBhcnRpYWwgcmVmZXJlbmNlIGFuZCByZXBhY2snICcKKwlybSAtZnIgUCBRIFIgJiYKKwlnaXQgaW5pdCBQICYmCisJKAorCQljZCBQICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcmVwYWNrICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgcmVwYWNrCisJKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgUCBRICYmCisJKAorCQljZCBQICYmCisJCWdpdCBjaGVja291dCAtYiBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgdGhyZWUgJiYKKwkJZ2l0IHJlcGFjaworCSkgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZGlzc29jaWF0ZSAtLXJlZmVyZW5jZT1QIFEgUiAmJgorCWxzIFIvb2JqZWN0cy9wYWNrLyoucGFjayA+cGFja3MudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwYWNrcy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUsIGRpc3NvY2lhdGUgZnJvbSBhbHRlcm5hdGVzJyAnCisJcm0gLWZyIEEgQiBDICYmCisJdGVzdF9jcmVhdGVfcmVwbyBBICYmCisJY29tbWl0X2luIEEgZmlsZTEgJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2U9QSBBIEIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIEIvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWdpdCBjbG9uZSAtLWxvY2FsIC0tZGlzc29jaWF0ZSBCIEMgJiYKKwkhIHRlc3QgLWYgQy8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJKCBjZCBDICYmIGdpdCBmc2NrICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbyB3aXRoIGdhcmJhZ2UgaW4gb2JqZWN0cy8qJyAnCisJZ2l0IGluaXQgUyAmJgorCSgKKwkJY2QgUyAmJgorCQl0ZXN0X2NvbW1pdCBBICYmCisKKwkJY2QgLmdpdC9vYmplY3RzICYmCisJCT4uc29tZS1oaWRkZW4tZmlsZSAmJgorCQk+c29tZS1maWxlICYmCisJCW1rZGlyIC5zb21lLWhpZGRlbi1kaXIgJiYKKwkJPi5zb21lLWhpZGRlbi1kaXIvc29tZS1maWxlICYmCisJCT4uc29tZS1oaWRkZW4tZGlyLy5zb21lLWRvdC1maWxlICYmCisJCW1rZGlyIHNvbWUtZGlyICYmCisJCT5zb21lLWRpci9zb21lLWZpbGUgJiYKKwkJPnNvbWUtZGlyLy5zb21lLWRvdC1maWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBhIHJlcG8gd2l0aCBnYXJiYWdlIGluIG9iamVjdHMvKicgJworCWZvciBvcHRpb24gaW4gLS1sb2NhbCAtLW5vLWhhcmRsaW5rcyAtLXNoYXJlZCAtLWRpc3NvY2lhdGUKKwlkbworCQlnaXQgY2xvbmUgJG9wdGlvbiBTIFMkb3B0aW9uIHx8IHJldHVybiAxICYmCisJCWdpdCAtQyBTJG9wdGlvbiBmc2NrIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWZpbmQgUy0qIC1uYW1lICIqc29tZSoiIHwgc29ydCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTLS1kaXNzb2NpYXRlLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyCisJUy0tZGlzc29jaWF0ZS8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpci8uc29tZS1kb3QtZmlsZQorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1kaXIvc29tZS1maWxlCisJUy0tZGlzc29jaWF0ZS8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWZpbGUKKwlTLS1kaXNzb2NpYXRlLy5naXQvb2JqZWN0cy9zb21lLWRpcgorCVMtLWRpc3NvY2lhdGUvLmdpdC9vYmplY3RzL3NvbWUtZGlyLy5zb21lLWRvdC1maWxlCisJUy0tZGlzc29jaWF0ZS8uZ2l0L29iamVjdHMvc29tZS1kaXIvc29tZS1maWxlCisJUy0tZGlzc29jaWF0ZS8uZ2l0L29iamVjdHMvc29tZS1maWxlCisJUy0tbG9jYWwvLmdpdC9vYmplY3RzLy5zb21lLWhpZGRlbi1kaXIKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWRpci8uc29tZS1kb3QtZmlsZQorCVMtLWxvY2FsLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyL3NvbWUtZmlsZQorCVMtLWxvY2FsLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZmlsZQorCVMtLWxvY2FsLy5naXQvb2JqZWN0cy9zb21lLWRpcgorCVMtLWxvY2FsLy5naXQvb2JqZWN0cy9zb21lLWRpci8uc29tZS1kb3QtZmlsZQorCVMtLWxvY2FsLy5naXQvb2JqZWN0cy9zb21lLWRpci9zb21lLWZpbGUKKwlTLS1sb2NhbC8uZ2l0L29iamVjdHMvc29tZS1maWxlCisJUy0tbm8taGFyZGxpbmtzLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyCisJUy0tbm8taGFyZGxpbmtzLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyLy5zb21lLWRvdC1maWxlCisJUy0tbm8taGFyZGxpbmtzLy5naXQvb2JqZWN0cy8uc29tZS1oaWRkZW4tZGlyL3NvbWUtZmlsZQorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvLnNvbWUtaGlkZGVuLWZpbGUKKwlTLS1uby1oYXJkbGlua3MvLmdpdC9vYmplY3RzL3NvbWUtZGlyCisJUy0tbm8taGFyZGxpbmtzLy5naXQvb2JqZWN0cy9zb21lLWRpci8uc29tZS1kb3QtZmlsZQorCVMtLW5vLWhhcmRsaW5rcy8uZ2l0L29iamVjdHMvc29tZS1kaXIvc29tZS1maWxlCisJUy0tbm8taGFyZGxpbmtzLy5naXQvb2JqZWN0cy9zb21lLWZpbGUKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc2V0dXAgcmVwbyB3aXRoIG1hbnVhbGx5IHN5bWxpbmtlZCBvciB1bmtub3duIGZpbGVzIGF0IG9iamVjdHMvJyAnCisJZ2l0IGluaXQgVCAmJgorCSgKKwkJY2QgVCAmJgorCQlnaXQgY29uZmlnIGdjLmF1dG8gMCAmJgorCQl0ZXN0X2NvbW1pdCBBICYmCisJCWdpdCBnYyAmJgorCQl0ZXN0X2NvbW1pdCBCICYmCisKKwkJY2QgLmdpdC9vYmplY3RzICYmCisJCW12IHBhY2sgcGFja3MgJiYKKwkJbG4gLXMgcGFja3MgcGFjayAmJgorCQlmaW5kID8/IC10eXBlIGQgPmxvb3NlLWRpcnMgJiYKKwkJbGFzdF9sb29zZT0kKHRhaWwgLW4gMSBsb29zZS1kaXJzKSAmJgorCQltdiAkbGFzdF9sb29zZSBhLWxvb3NlLWRpciAmJgorCQlsbiAtcyBhLWxvb3NlLWRpciAkbGFzdF9sb29zZSAmJgorCQlmaXJzdF9sb29zZT0kKGhlYWQgLW4gMSBsb29zZS1kaXJzKSAmJgorCQlybSAtZiBsb29zZS1kaXJzICYmCisKKwkJY2QgJGZpcnN0X2xvb3NlICYmCisJCW9iaj0kKGxzICopICYmCisJCW12ICRvYmogLi4vYW4tb2JqZWN0ICYmCisJCWxuIC1zIC4uL2FuLW9iamVjdCAkb2JqICYmCisKKwkJY2QgLi4vICYmCisJCWZpbmQgLiAtdHlwZSBmIHwgc29ydCA+Li4vLi4vLi4vVC5vYmplY3RzLWZpbGVzLnJhdyAmJgorCQlmaW5kIC4gLXR5cGUgbCB8IHNvcnQgPi4uLy4uLy4uL1Qub2JqZWN0cy1zeW1saW5rcy5yYXcgJiYKKwkJZWNobyB1bmtub3duX2NvbnRlbnQgPnVua25vd25fZmlsZQorCSkgJiYKKwlnaXQgLUMgVCBmc2NrICYmCisJZ2l0IC1DIFQgcmV2LWxpc3QgLS1hbGwgLS1vYmplY3RzID5ULm9iamVjdHMKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjbG9uZSByZXBvIHdpdGggc3ltbGlua2VkIG9yIHVua25vd24gZmlsZXMgYXQgb2JqZWN0cy8nICcKKwlmb3Igb3B0aW9uIGluIC0tbG9jYWwgLS1uby1oYXJkbGlua3MgLS1zaGFyZWQgLS1kaXNzb2NpYXRlCisJZG8KKwkJZ2l0IGNsb25lICRvcHRpb24gVCBUJG9wdGlvbiB8fCByZXR1cm4gMSAmJgorCQlnaXQgLUMgVCRvcHRpb24gZnNjayB8fCByZXR1cm4gMSAmJgorCQlnaXQgLUMgVCRvcHRpb24gcmV2LWxpc3QgLS1hbGwgLS1vYmplY3RzID5UJG9wdGlvbi5vYmplY3RzICYmCisJCXRlc3RfY21wIFQub2JqZWN0cyBUJG9wdGlvbi5vYmplY3RzICYmCisJCSgKKwkJCWNkIFQkb3B0aW9uLy5naXQvb2JqZWN0cyAmJgorCQkJZmluZCAuIC10eXBlIGYgfCBzb3J0ID4uLi8uLi8uLi9UJG9wdGlvbi5vYmplY3RzLWZpbGVzLnJhdyAmJgorCQkJZmluZCAuIC10eXBlIGwgfCBzb3J0ID4uLi8uLi8uLi9UJG9wdGlvbi5vYmplY3RzLXN5bWxpbmtzLnJhdworCQkpCisJZG9uZSAmJgorCisJZm9yIHJhdyBpbiAkKGxzIFQqLnJhdykKKwlkbworCQlzZWQgLWUgInMhLy4uLyEvWS8hOyBzIVswLTlhLWZdXHszOCxcfSFaISIgLWUgIi9jb21taXQtZ3JhcGgvZCIgXAorCQkgICAgLWUgIi9tdWx0aS1wYWNrLWluZGV4L2QiIDwkcmF3ID4kcmF3LmRlLXNoYS0xICYmCisJCXNvcnQgJHJhdy5kZS1zaGEtMSA+JHJhdy5kZS1zaGEgfHwgcmV0dXJuIDEKKwlkb25lICYmCisKKwljYXQgPmV4cGVjdGVkLWZpbGVzIDw8LUVPRiAmJgorCS4vWS9aCisJLi9ZL1oKKwkuL1kvWgorCS4vYS1sb29zZS1kaXIvWgorCS4vYW4tb2JqZWN0CisJLi9pbmZvL3BhY2tzCisJLi9wYWNrL3BhY2stWi5pZHgKKwkuL3BhY2svcGFjay1aLnBhY2sKKwkuL3BhY2tzL3BhY2stWi5pZHgKKwkuL3BhY2tzL3BhY2stWi5wYWNrCisJLi91bmtub3duX2ZpbGUKKwlFT0YKKworCWZvciBvcHRpb24gaW4gLS1sb2NhbCAtLW5vLWhhcmRsaW5rcyAtLWRpc3NvY2lhdGUKKwlkbworCQl0ZXN0X2NtcCBleHBlY3RlZC1maWxlcyBUJG9wdGlvbi5vYmplY3RzLWZpbGVzLnJhdy5kZS1zaGEgfHwgcmV0dXJuIDEgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IFQkb3B0aW9uLm9iamVjdHMtc3ltbGlua3MucmF3LmRlLXNoYSB8fCByZXR1cm4gMQorCWRvbmUgJiYKKworCWVjaG8gLi9pbmZvL2FsdGVybmF0ZXMgPmV4cGVjdGVkLWZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtZmlsZXMgVC0tc2hhcmVkLm9iamVjdHMtZmlsZXMucmF3ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IFQtLXNoYXJlZC5vYmplY3RzLXN5bWxpbmtzLnJhdworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDUtY2xvbmUtbG9jYWwuc2ggYi90L3Q1NjA1LWNsb25lLWxvY2FsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMjM0MTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjA1LWNsb25lLWxvY2FsLnNoCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBsb2NhbCBjbG9uZScKKy4gLi90ZXN0LWxpYi5zaAorCityZXBvX2lzX2hhcmRsaW5rZWQoKSB7CisJZmluZCAiJDEvb2JqZWN0cyIgLXR5cGUgZiAtbGlua3MgMSA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBvdXRwdXQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIG9yaWdpbiByZXBvc2l0b3J5JyAnCisJOiA+ZmlsZSAmJiBnaXQgYWRkIC4gJiYgZ2l0IGNvbW1pdCAtbTEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYS5naXQgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC4geCAmJgorCXRlc3QgIiQoY2QgYS5naXQgJiYgZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5iYXJlKSIgPSB0cnVlICYmCisJdGVzdCAiJChjZCB4ICYmIGdpdCBjb25maWcgLS1ib29sIGNvcmUuYmFyZSkiID0gdHJ1ZSAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGIxLmJ1bmRsZSAtLWFsbCAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGIyLmJ1bmRsZSBtYXN0ZXIgJiYKKwlta2RpciBkaXIgJiYKKwljcCBiMS5idW5kbGUgZGlyL2IzICYmCisJY3AgYjEuYnVuZGxlIGI0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIHdpdGhvdXQgLmdpdCBzdWZmaXgnICcKKwlnaXQgY2xvbmUgLWwgLXMgYSBiICYmCisJKGNkIGIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuYmFyZSkiID0gZmFsc2UgJiYKKwlnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIHdpdGggLmdpdCBzdWZmaXgnICcKKwlnaXQgY2xvbmUgLWwgLXMgYS5naXQgYyAmJgorCShjZCBjICYmIGdpdCBmZXRjaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY2xvbmUgZnJvbSB4JyAnCisJZ2l0IGNsb25lIC1sIC1zIHggeSAmJgorCShjZCB5ICYmIGdpdCBmZXRjaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY2xvbmUgZnJvbSB4LmdpdCB0aGF0IGRvZXMgbm90IGV4aXN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC1sIC1zIHguZ2l0IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnV2l0aCAtbm8taGFyZGxpbmtzLCBsb2NhbCB3aWxsIG1ha2UgYSBjb3B5JyAnCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWhhcmRsaW5rcyB4IHcgJiYKKwkhIHJlcG9faXNfaGFyZGxpbmtlZCB3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0V2ZW4gd2l0aG91dCAtbCwgbG9jYWwgd2lsbCBtYWtlIGEgaGFyZGxpbmsnICcKKwlybSAtZnIgdyAmJgorCWdpdCBjbG9uZSAtbCAtLWJhcmUgeCB3ICYmCisJcmVwb19pc19oYXJkbGlua2VkIHcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgY2xvbmUgb2YgcmVwbyB3aXRoIG5vbmV4aXN0ZW50IHJlZiBpbiBIRUFEJyAnCisJZWNobyAicmVmOiByZWZzL2hlYWRzL25vbmV4aXN0ZW50IiA+IGEuZ2l0L0hFQUQgJiYKKwlnaXQgY2xvbmUgYSBkICYmCisJKGNkIGQgJiYKKwlnaXQgZmV0Y2ggJiYKKwl0ZXN0ICEgLWUgLmdpdC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBjbG9uZSB3aXRob3V0IC5idW5kbGUgc3VmZml4JyAnCisJZ2l0IGNsb25lIGRpci9iMyAmJgorCShjZCBiMyAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBjbG9uZSB3aXRoIC5idW5kbGUgc3VmZml4JyAnCisJZ2l0IGNsb25lIGIxLmJ1bmRsZSAmJgorCShjZCBiMSAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBjbG9uZSBmcm9tIGI0JyAnCisJZ2l0IGNsb25lIGI0IGJkbCAmJgorCShjZCBiZGwgJiYgZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgY2xvbmUgZnJvbSBiNC5idW5kbGUgdGhhdCBkb2VzIG5vdCBleGlzdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBiNC5idW5kbGUgYmIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVuZGxlIGNsb25lIHdpdGggbm9uZXhpc3RlbnQgSEVBRCcgJworCWdpdCBjbG9uZSBiMi5idW5kbGUgYjIgJiYKKwkoY2QgYjIgJiYKKwlnaXQgZmV0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBlbXB0eSByZXBvc2l0b3J5JyAnCisJbWtkaXIgZW1wdHkgJiYKKwkoY2QgZW1wdHkgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4pICYmCisJZ2l0IGNsb25lIGVtcHR5IGVtcHR5LWNsb25lICYmCisJdGVzdF90aWNrICYmCisJKGNkIGVtcHR5LWNsb25lICYmCisJIGVjaG8gImNvbnRlbnQiID4+IGZvbyAmJgorCSBnaXQgYWRkIGZvbyAmJgorCSBnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciAmJgorCSBleHBlY3RlZD0kKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCSBhY3R1YWw9JChnaXQgLS1naXQtZGlyPS4uL2VtcHR5Ly5naXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkgdGVzdCAkYWN0dWFsID0gJGV4cGVjdGVkKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBlbXB0eSByZXBvc2l0b3J5LCBhbmQgdGhlbiBwdXNoIHNob3VsZCBub3Qgc2VnZmF1bHQuJyAnCisJcm0gLWZyIGVtcHR5LyBlbXB0eS1jbG9uZS8gJiYKKwlta2RpciBlbXB0eSAmJgorCShjZCBlbXB0eSAmJiBnaXQgaW5pdCkgJiYKKwlnaXQgY2xvbmUgZW1wdHkgZW1wdHktY2xvbmUgJiYKKwkoY2QgZW1wdHktY2xvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBub24tZXhpc3RlbnQgZGlyZWN0b3J5IGZhaWxzJyAnCisJcm0gLXJmIGRvZXMtbm90LWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIGRvZXMtbm90LWV4aXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgbm9uLWdpdCBkaXJlY3RvcnkgZmFpbHMnICcKKwlybSAtcmYgbm90LWEtZ2l0LXJlcG8gbm90LWEtZ2l0LXJlcG8tY2xvbmUgJiYKKwlta2RpciBub3QtYS1naXQtcmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBub3QtYS1naXQtcmVwbyBub3QtYS1naXQtcmVwby1jbG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGZpbGU6Ly8gZG9lcyBub3QgaGFyZGxpbmsnICcKKwlnaXQgY2xvbmUgLS1iYXJlIGZpbGU6Ly8iJChwd2QpIi9hIG5vbi1sb2NhbCAmJgorCSEgcmVwb19pc19oYXJkbGlua2VkIG5vbi1sb2NhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGEgbG9jYWwgcGF0aCB3aXRoIC0tbm8tbG9jYWwgZG9lcyBub3QgaGFyZGxpbmsnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC0tbm8tbG9jYWwgYSBmb3JjZS1ub25sb2NhbCAmJgorCSEgcmVwb19pc19oYXJkbGlua2VkIGZvcmNlLW5vbmxvY2FsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgbG9jYWxseSByZXNwZWN0cyAiLXUiIGZvciBmZXRjaGluZyByZWZzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tYmFyZSAtdSBmYWxzZSBhIHNob3VsZF9ub3Rfd29yay5naXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjA2LWNsb25lLW9wdGlvbnMuc2ggYi90L3Q1NjA2LWNsb25lLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWUyNGVjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDYtY2xvbmUtb3B0aW9ucy5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgY2xvbmUgb3B0aW9ucycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJbWtkaXIgcGFyZW50ICYmCisJKGNkIHBhcmVudCAmJiBnaXQgaW5pdCAmJgorCSBlY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSBvbmUpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLW8nICcKKworCWdpdCBjbG9uZSAtbyBmb28gcGFyZW50IGNsb25lLW8gJiYKKwkoY2QgY2xvbmUtbyAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9mb28vbWFzdGVyKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0ZWQgY2xvbmUgZG9lcyBub3Qgc2hvdyBwcm9ncmVzcycgJworCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3BhcmVudCIgY2xvbmUtcmVkaXJlY3RlZCA+b3V0IDI+ZXJyICYmCisJISBncmVwICUgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJDaGVja2luZyBjb25uZWN0aXZpdHkiIGVycgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0ZWQgY2xvbmUgLXYgZG9lcyBzaG93IHByb2dyZXNzJyAnCisKKwlnaXQgY2xvbmUgLS1wcm9ncmVzcyAiZmlsZTovLyQocHdkKS9wYXJlbnQiIGNsb25lLXJlZGlyZWN0ZWQtcHJvZ3Jlc3MgXAorCQk+b3V0IDI+ZXJyICYmCisJZ3JlcCAlIGVycgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwNy1jbG9uZS1idW5kbGUuc2ggYi90L3Q1NjA3LWNsb25lLWJ1bmRsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTA4ZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwNy1jbG9uZS1idW5kbGUuc2gKQEAgLTAsMCArMSw5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NvbWUgYnVuZGxlIHJlbGF0ZWQgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtbSB0YWcgdGFnICYmCisJdGVzdF9jb21taXQgc2Vjb25kICYmCisJdGVzdF9jb21taXQgdGhpcmQgJiYKKwlnaXQgdGFnIC1kIGluaXRpYWwgJiYKKwlnaXQgdGFnIC1kIHNlY29uZCAmJgorCWdpdCB0YWcgLWQgdGhpcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInZlcmlmeSIgbmVlZHMgYSB3b3JrdHJlZScgJworCWdpdCBidW5kbGUgY3JlYXRlIHRpcC5idW5kbGUgLTEgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgbm9uZ2l0IGdpdCBidW5kbGUgdmVyaWZ5IC4uL3RpcC5idW5kbGUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJuZWVkIGEgcmVwb3NpdG9yeSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fubm90YXRlZCB0YWdzIGNhbiBiZSBleGNsdWRlZCBieSByZXYtbGlzdCBvcHRpb25zJyAnCisJZ2l0IGJ1bmRsZSBjcmVhdGUgYnVuZGxlIC0tYWxsIC0tc2luY2U9Ny5BcHIuMjAwNS4xNToxNDowMC4tMDcwMCAmJgorCWdpdCBscy1yZW1vdGUgYnVuZGxlID4gb3V0cHV0ICYmCisJZ3JlcCB0YWcgb3V0cHV0ICYmCisJZ2l0IGJ1bmRsZSBjcmVhdGUgYnVuZGxlIC0tYWxsIC0tc2luY2U9Ny5BcHIuMjAwNS4xNToxNjowMC4tMDcwMCAmJgorCWdpdCBscy1yZW1vdGUgYnVuZGxlID4gb3V0cHV0ICYmCisJISBncmVwIHRhZyBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGllIGlmIGJ1bmRsZSBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkJyAnCisJbWtkaXIgYWRpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBidW5kbGUgY3JlYXRlIGFkaXIgLS1hbGwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnYnVuZGxlIC0tc3RkaW4nICcKKwllY2hvIG1hc3RlciB8IGdpdCBidW5kbGUgY3JlYXRlIHN0ZGluLWJ1bmRsZS5iZGwgLS1zdGRpbiAmJgorCWdpdCBscy1yZW1vdGUgc3RkaW4tYnVuZGxlLmJkbCA+b3V0cHV0ICYmCisJZ3JlcCBtYXN0ZXIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2J1bmRsZSAtLXN0ZGluIDxyZXYtbGlzdCBvcHRpb25zPicgJworCWVjaG8gbWFzdGVyIHwgZ2l0IGJ1bmRsZSBjcmVhdGUgaHlicmlkLWJ1bmRsZS5iZGwgLS1zdGRpbiB0YWcgJiYKKwlnaXQgbHMtcmVtb3RlIGh5YnJpZC1idW5kbGUuYmRsID5vdXRwdXQgJiYKKwlncmVwIG1hc3RlciBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgYnVuZGxlIGZpbGUgaXMgcmVqZWN0ZWQnICcKKwk6ID5lbXB0eS1idW5kbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggZW1wdHktYnVuZGxlCisnCisKKyMgVGhpcyB0cmlnZ2VycyBhIGJ1ZyBpbiBvbGRlciB2ZXJzaW9ucyB3aGVyZSB0aGUgcmVzdWx0aW5nIGxpbmUgKHdpdGgKKyMgLS1wcmV0dHk9b25lbGluZSkgd2FzIGxvbmdlciB0aGFuIGEgMTAyNC1jaGFyIGJ1ZmZlci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZGljdWxvdXNseSBsb25nIHN1YmplY3QgaW4gYm91bmRhcnknICcKKwk6ID5maWxlNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhZGQgZmlsZTQgJiYKKwlwcmludGYgIiUwMTIwMGRcbiIgMCB8IGdpdCBjb21taXQgLUYgLSAmJgorCXRlc3RfY29tbWl0IGZpZnRoICYmCisJZ2l0IGJ1bmRsZSBjcmVhdGUgbG9uZy1zdWJqZWN0LWJ1bmRsZS5iZGwgSEVBRF4uLkhFQUQgJiYKKwlnaXQgYnVuZGxlIGxpc3QtaGVhZHMgbG9uZy1zdWJqZWN0LWJ1bmRsZS5iZGwgPmhlYWRzICYmCisJdGVzdCAtcyBoZWFkcyAmJgorCWdpdCBmZXRjaCBsb25nLXN1YmplY3QtYnVuZGxlLmJkbCAmJgorCXNlZCAtbiAiL14tL3twO3E7fSIgbG9uZy1zdWJqZWN0LWJ1bmRsZS5iZGwgPmJvdW5kYXJ5ICYmCisJZ3JlcCAiXi0kT0lEX1JFR0VYICIgYm91bmRhcnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcmVxdWlzaXRlcyB3aXRoIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlJyAnCisJOiA+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gIiIgJiYKKwl0ZXN0X2NvbW1pdCBmaWxlMiAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZSBIRUFEXi4uICYmCisJZ2l0IGJ1bmRsZSB2ZXJpZnkgYnVuZGxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBidW5kbGUgY3JlYXRpb24gZG9lcyBub3QgbGVhdmUgY3J1ZnQnICcKKwkjIFRoaXMgZmFpbHMgYmVjYXVzZSB0aGUgYnVuZGxlIHdvdWxkIGJlIGVtcHR5LgorCXRlc3RfbXVzdF9mYWlsIGdpdCBidW5kbGUgY3JlYXRlIGZhaWwuYnVuZGxlIG1hc3Rlci4ubWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmFpbC5idW5kbGUubG9jaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBTSEEtMSBmcm9tIGJ1bmRsZScgJworCXRlc3RfY3JlYXRlX3JlcG8gZm9vICYmCisJdGVzdF9jb21taXQgLUMgZm9vIHggJiYKKwlnaXQgLUMgZm9vIGJ1bmRsZSBjcmVhdGUgdGlwLmJ1bmRsZSAtMSBtYXN0ZXIgJiYKKwlnaXQgLUMgZm9vIHJldi1wYXJzZSBIRUFEID5oYXNoICYmCisKKwkjIEV4ZXJjaXNlIHRvIGVuc3VyZSB0aGF0IGZldGNoaW5nIGEgU0hBLTEgZnJvbSBhIGJ1bmRsZSB3b3JrcyB3aXRoIG5vCisJIyBlcnJvcnMKKwlnaXQgZmV0Y2ggLS1uby10YWdzIGZvby90aXAuYnVuZGxlICIkKGNhdCBoYXNoKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjA4LWNsb25lLTJnYi5zaCBiL3QvdDU2MDgtY2xvbmUtMmdiLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZTA4NDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjA4LWNsb25lLTJnYi5zaApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjbG9uaW5nIGEgcmVwb3NpdG9yeSBsYXJnZXIgdGhhbiAyIGdpZ2FieXRlJworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9DTE9ORV8yR0IgZmFsc2UKK3RoZW4KKwlzYXkgJ1NraXBwaW5nIGV4cGVuc2l2ZSAyR0IgY2xvbmUgdGVzdDsgZW5hYmxlIGl0IHdpdGggR0lUX1RFU1RfQ0xPTkVfMkdCPXQnCitlbHNlCisJdGVzdF9zZXRfcHJlcmVxIENMT05FXzJHQgorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDTE9ORV8yR0IgJ3NldHVwJyAnCisKKwlnaXQgY29uZmlnIHBhY2suY29tcHJlc3Npb24gMCAmJgorCWdpdCBjb25maWcgcGFjay5kZXB0aCAwICYmCisJYmxvYnNpemU9JCgoMTAwKjEwMjQqMTAyNCkpICYmCisJYmxvYmNvdW50PSQoKDIqMTAyNCoxMDI0KjEwMjQvJGJsb2JzaXplKzEpKSAmJgorCWk9MSAmJgorCSh3aGlsZSB0ZXN0ICRpIC1sZSAkYmxvYmNvdW50CisJIGRvCisJCXByaW50ZiAiR2VuZXJhdGluZyBibG9iICRpLyRibG9iY291bnRcciIgPiYyICYmCisJCXByaW50ZiAiYmxvYlxubWFyayA6JGlcbmRhdGEgJGJsb2JzaXplXG4iICYmCisJCSN0ZXN0LXRvb2wgZ2VucmFuZG9tICRpICRibG9ic2l6ZSAmJgorCQlwcmludGYgIiUtJHtibG9ic2l6ZX1zIiAkaSAmJgorCQllY2hvICJNIDEwMDY0NCA6JGkgJGkiID4+IGNvbW1pdCAmJgorCQlpPSQoKCRpKzEpKSB8fAorCQllY2hvICQ/ID4gZXhpdC1zdGF0dXMKKwkgZG9uZSAmJgorCSBlY2hvICJjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJIGVjaG8gImF1dGhvciBBIFUgVGhvciA8YXV0aG9yQGVtYWlsLmNvbT4gMTIzNDU2Nzg5ICswMDAwIiAmJgorCSBlY2hvICJjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGVtYWlsLmNvbT4gMTIzNDU2Nzg5ICswMDAwIiAmJgorCSBlY2hvICJkYXRhIDUiICYmCisJIGVjaG8gIj4yZ2IiICYmCisJIGNhdCBjb21taXQpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1iaWctZmlsZS10aHJlc2hvbGQ9MiAmJgorCXRlc3QgISAtZiBleGl0LXN0YXR1cworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0xPTkVfMkdCICdjbG9uZSAtIGJhcmUnICcKKworCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1oYXJkbGlua3MgLiBjbG9uZS1iYXJlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDTE9ORV8yR0IgJ2Nsb25lIC0gd2l0aCB3b3JrdHJlZSwgZmlsZTovLyBwcm90b2NvbCcgJworCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpIiBjbG9uZS13dAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwOS1jbG9uZS1icmFuY2guc2ggYi90L3Q1NjA5LWNsb25lLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTdhN2JlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwOS1jbG9uZS1icmFuY2guc2gKQEAgLTAsMCArMSw3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Nsb25lIC0tYnJhbmNoIG9wdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19IRUFEKCkgeworCWVjaG8gcmVmcy9oZWFkcy8iJDEiID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworY2hlY2tfZmlsZSgpIHsKKwllY2hvICIkMSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgcGFyZW50ICYmCisJKGNkIHBhcmVudCAmJiBnaXQgaW5pdCAmJgorCSBlY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHR3byAmJgorCSBlY2hvIHR3byA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlcikgJiYKKwlta2RpciBlbXB0eSAmJgorCShjZCBlbXB0eSAmJiBnaXQgaW5pdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSBjbG9uZSBjaG9vc2VzIEhFQUQnICcKKwlnaXQgY2xvbmUgcGFyZW50IGNsb25lICYmCisJKGNkIGNsb25lICYmCisJIGNoZWNrX0hFQUQgbWFzdGVyICYmCisJIGNoZWNrX2ZpbGUgb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBjaG9vc2VzIHNwZWNpZmllZCBicmFuY2gnICcKKwlnaXQgY2xvbmUgLWIgdHdvIHBhcmVudCBjbG9uZS10d28gJiYKKwkoY2QgY2xvbmUtdHdvICYmCisJIGNoZWNrX0hFQUQgdHdvICYmCisJIGNoZWNrX2ZpbGUgdHdvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBzZXRzIHVwIHRyYWNraW5nJyAnCisJKGNkIGNsb25lLXR3byAmJgorCSBlY2hvIG9yaWdpbiA+ZXhwZWN0ICYmCisJIGdpdCBjb25maWcgYnJhbmNoLnR3by5yZW1vdGUgPmFjdHVhbCAmJgorCSBlY2hvIHJlZnMvaGVhZHMvdHdvID4+ZXhwZWN0ICYmCisJIGdpdCBjb25maWcgYnJhbmNoLnR3by5tZXJnZSA+PmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBkb2VzIG5vdCBtdW5nZSByZW1vdGVzL29yaWdpbi9IRUFEJyAnCisJKGNkIGNsb25lLXR3byAmJgorCSBlY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiB3aXRoIGJvZ3VzIGJyYW5jaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtYiBib2d1cyBwYXJlbnQgY2xvbmUtYm9ndXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWIgbm90IGFsbG93ZWQgd2l0aCBlbXB0eSByZXBvcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtYiBicmFuY2ggZW1wdHkgY2xvbmUtYnJhbmNoLWVtcHR5CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYxMC1jbG9uZS1kZXRhY2hlZC5zaCBiL3QvdDU2MTAtY2xvbmUtZGV0YWNoZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGIwZDYwNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MTAtY2xvbmUtZGV0YWNoZWQuc2gKQEAgLTAsMCArMSw3NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2xvbmluZyBhIHJlcG9zaXRvcnkgd2l0aCBkZXRhY2hlZCBIRUFEJworLiAuL3Rlc3QtbGliLnNoCisKK2hlYWRfaXNfZGV0YWNoZWQoKSB7CisJZ2l0IC0tZ2l0LWRpcj0kMS8uZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tZ2l0LWRpcj0kMS8uZ2l0IHN5bWJvbGljLXJlZiBIRUFECit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gdHdvID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwlnaXQgdGFnIHR3byAmJgorCWVjaG8gdGhyZWUgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gKGRldGFjaGVkIEhFQUQgcG9pbnRzIHRvIGJyYW5jaCknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEIiBkZXRhY2hlZC1icmFuY2gKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lZCBIRUFEIG1hdGNoZXMnICcKKwllY2hvIHRocmVlID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWRldGFjaGVkLWJyYW5jaC8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2xvbmVkIEhFQUQgaXMgZGV0YWNoZWQnICcKKwloZWFkX2lzX2RldGFjaGVkIGRldGFjaGVkLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXBvIChkZXRhY2hlZCBIRUFEIHBvaW50cyB0byB0YWcpJyAnCisJZ2l0IGNoZWNrb3V0IHR3b14wICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRCIgZGV0YWNoZWQtdGFnCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBtYXRjaGVzJyAnCisJZWNobyB0d28gPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9ZGV0YWNoZWQtdGFnLy5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBpcyBkZXRhY2hlZCcgJworCWhlYWRfaXNfZGV0YWNoZWQgZGV0YWNoZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gKGRldGFjaGVkIEhFQUQgcG9pbnRzIHRvIGhpc3RvcnkpJyAnCisJZ2l0IGNoZWNrb3V0IHR3b14gJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEIiBkZXRhY2hlZC1oaXN0b3J5CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBtYXRjaGVzJyAnCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9ZGV0YWNoZWQtaGlzdG9yeS8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgaXMgZGV0YWNoZWQnICcKKwloZWFkX2lzX2RldGFjaGVkIGRldGFjaGVkLWhpc3RvcnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyAob3JwaGFuIGRldGFjaGVkIEhFQUQpJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZWNobyBmb3VyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBmb3VyICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRCIgZGV0YWNoZWQtb3JwaGFuCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBtYXRjaGVzJyAnCisJZWNobyBmb3VyID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWRldGFjaGVkLW9ycGhhbi8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgaXMgZGV0YWNoZWQnICcKKwloZWFkX2lzX2RldGFjaGVkIGRldGFjaGVkLW9ycGhhbgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTEtY2xvbmUtY29uZmlnLnNoIGIvdC90NTYxMS1jbG9uZS1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjBjMWJhOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MTEtY2xvbmUtY29uZmlnLnNoCkBAIC0wLDAgKzEsMTE1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdHMgZm9yIGdpdCBjbG9uZSAtYyBrZXk9dmFsdWUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWMgc2V0cyBjb25maWcgaW4gY2xvbmVkIHJlcG8nICcKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5mb289YmFyIC4gY2hpbGQgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1jaGlsZC8uZ2l0IGNvbmZpZyBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYyBjYW4gc2V0IG11bHRpLWtleXMnICcKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5mb289YmFyIC1jIGNvcmUuZm9vPWJheiAuIGNoaWxkICYmCisJeyBlY2hvIGJhcjsgZWNobyBiYXo7IH0gPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9Y2hpbGQvLmdpdCBjb25maWcgLS1nZXQtYWxsIGNvcmUuZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1jIGNhbiBzZXQgbXVsdGkta2V5cywgaW5jbHVkaW5nIHNvbWUgZW1wdHknICcKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY3JlZGVudGlhbC5oZWxwZXI9IC1jIGNyZWRlbnRpYWwuaGVscGVyPWhpIC4gY2hpbGQgJiYKKwlwcmludGYgIiVzXG4iICIiIGhpID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNoaWxkLy5naXQgY29uZmlnIC0tZ2V0LWFsbCBjcmVkZW50aWFsLmhlbHBlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYyB3aXRob3V0IGEgdmFsdWUgaXMgYm9vbGVhbiB0cnVlJyAnCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IGNsb25lIC1jIGNvcmUuZm9vIC4gY2hpbGQgJiYKKwllY2hvIHRydWUgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9Y2hpbGQvLmdpdCBjb25maWcgLS1ib29sIGNvcmUuZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1jIGNvbmZpZyBpcyBhdmFpbGFibGUgZHVyaW5nIGNsb25lJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5hdXRvY3JsZiAuIGNoaWxkICYmCisJcHJpbnRmICJjb250ZW50XFxyXFxuIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGNoaWxkL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5mZXRjaD08cmVmc3BlYz4gd29ya3MnICcKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2dyYWIvaXQgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2xlYXZlL291dCByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBjbG9uZSAtYyAicmVtb3RlLm9yaWdpbi5mZXRjaD0rcmVmcy9ncmFiLyo6cmVmcy9ncmFiLyoiIC4gY2hpbGQgJiYKKwlnaXQgLUMgY2hpbGQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9ncmFiL2l0CisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKwlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIHJlbW90ZS5vcmlnaW4uZmV0Y2g9PHJlZnNwZWM+IGNsb25lIHdvcmtzJyAnCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IC1jICJyZW1vdGUub3JpZ2luLmZldGNoPStyZWZzL2dyYWIvKjpyZWZzL2dyYWIvKiIgY2xvbmUgLiBjaGlsZCAmJgorCWdpdCAtQyBjaGlsZCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlyZWZzL2dyYWIvaXQKKwlyZWZzL2hlYWRzL21hc3RlcgorCXJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorCXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYyByZW1vdGUuPHJlbW90ZT4uZmV0Y2g9PHJlZnNwZWM+IC0tb3JpZ2luPTxuYW1lPicgJworCXJtIC1yZiBjaGlsZCAmJgorCWdpdCBjbG9uZSAtLW9yaWdpbj11cHN0cmVhbSBcCisJCSAgLWMgInJlbW90ZS51cHN0cmVhbS5mZXRjaD0rcmVmcy9ncmFiLyo6cmVmcy9ncmFiLyoiIFwKKwkJICAtYyAicmVtb3RlLm9yaWdpbi5mZXRjaD0rcmVmcy9sZWF2ZS8qOnJlZnMvbGVhdmUvKiIgXAorCQkgIC4gY2hpbGQgJiYKKwlnaXQgLUMgY2hpbGQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9ncmFiL2l0CisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL3JlbW90ZXMvdXBzdHJlYW0vSEVBRAorCXJlZnMvcmVtb3Rlcy91cHN0cmVhbS9tYXN0ZXIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdHMgZm9yIHRoZSBoaWRkZW4gZmlsZSBhdHRyaWJ1dGUgb24gd2luZG93cworaXNfaGlkZGVuICgpIHsKKwkjIFVzZSB0aGUgb3V0cHV0IG9mIGBhdHRyaWJgLCBpZ25vcmUgdGhlIGFic29sdXRlIHBhdGgKKwljYXNlICIkKGF0dHJpYiAiJDEiKSIgaW4gKkgqPzoqKSByZXR1cm4gMDs7IGVzYWMKKwlyZXR1cm4gMQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdjbG9uZSAtYyBjb3JlLmhpZGVEb3RGaWxlcycgJworCXRlc3RfY29tbWl0IGF0dHJpYnV0ZXMgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKwlybSAtcmYgY2hpbGQgJiYKKwlnaXQgY2xvbmUgLWMgY29yZS5oaWRlRG90RmlsZXM9ZmFsc2UgLiBjaGlsZCAmJgorCSEgaXNfaGlkZGVuIGNoaWxkLy5naXRhdHRyaWJ1dGVzICYmCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IGNsb25lIC1jIGNvcmUuaGlkZURvdEZpbGVzPWRvdEdpdE9ubHkgLiBjaGlsZCAmJgorCSEgaXNfaGlkZGVuIGNoaWxkLy5naXRhdHRyaWJ1dGVzICYmCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IGNsb25lIC1jIGNvcmUuaGlkZURvdEZpbGVzPXRydWUgLiBjaGlsZCAmJgorCWlzX2hpZGRlbiBjaGlsZC8uZ2l0YXR0cmlidXRlcworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTItY2xvbmUtcmVmc3BlYy5zaCBiL3QvdDU2MTItY2xvbmUtcmVmc3BlYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzZhYzAxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYxMi1jbG9uZS1yZWZzcGVjLnNoCkBAIC0wLDAgKzEsMjM0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCByZWZzcGVjIHdyaXR0ZW4gYnkgY2xvbmUtY29tbWFuZCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCSMgTWFrZSB0d28gYnJhbmNoZXMsICJtYXN0ZXIiIGFuZCAic2lkZSIKKwllY2hvIG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyB0d28gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCB0YWcgdHdvICYmCisJZWNobyB0aHJlZSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gZm91ciA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gZm91ciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdGFnIGZpdmUgJiYKKworCSMgZGVmYXVsdCBjbG9uZQorCWdpdCBjbG9uZSAuIGRpcl9hbGwgJiYKKworCSMgZGVmYXVsdCBjbG9uZSAtLW5vLXRhZ3MKKwlnaXQgY2xvbmUgLS1uby10YWdzIC4gZGlyX2FsbF9ub190YWdzICYmCisKKwkjIGRlZmF1bHQgLS1zaW5nbGUgdGhhdCBmb2xsb3dzIEhFQUQ9bWFzdGVyCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAuIGRpcl9tYXN0ZXIgJiYKKworCSMgZGVmYXVsdCAtLXNpbmdsZSB0aGF0IGZvbGxvd3MgSEVBRD1tYXN0ZXIgd2l0aCBubyB0YWdzCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLW5vLXRhZ3MgLiBkaXJfbWFzdGVyX25vX3RhZ3MgJiYKKworCSMgZGVmYXVsdCAtLXNpbmdsZSB0aGF0IGZvbGxvd3MgSEVBRD1zaWRlCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC4gZGlyX3NpZGUgJiYKKworCSMgZXhwbGljaXQgLS1zaW5nbGUgdGhhdCBmb2xsb3dzIHNpZGUKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLWJyYW5jaCBzaWRlIC4gZGlyX3NpZGUyICYmCisKKwkjIGRlZmF1bHQgLS1zaW5nbGUgd2l0aCAtLW1pcnJvcgorCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLS1taXJyb3IgLiBkaXJfbWlycm9yICYmCisKKwkjIGRlZmF1bHQgLS1zaW5nbGUgd2l0aCAtLWJyYW5jaCBhbmQgLS1taXJyb3IKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC0tbWlycm9yIC0tYnJhbmNoIHNpZGUgLiBkaXJfbWlycm9yX3NpZGUgJiYKKworCSMgLS1zaW5nbGUgdGhhdCBkb2VzIG5vdCBrbm93IHdoYXQgYnJhbmNoIHRvIGZvbGxvdworCWdpdCBjaGVja291dCB0d29eICYmCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAuIGRpcl9kZXRhY2hlZCAmJgorCisJIyBleHBsaWNpdCAtLXNpbmdsZSB3aXRoIHRhZworCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLS1icmFuY2ggdHdvIC4gZGlyX3RhZyAmJgorCisJIyBleHBsaWNpdCAtLXNpbmdsZSB3aXRoIHRhZyBhbmQgLS1uby10YWdzCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLW5vLXRhZ3MgLS1icmFuY2ggdHdvIC4gZGlyX3RhZ19ub190YWdzICYmCisKKwkjIGFkdmFuY2UgYm90aCAibWFzdGVyIiBhbmQgInNpZGUiIGJyYW5jaGVzCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIGZpdmUgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGZpdmUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBzaXggPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNpeCAmJgorCisJIyB1cGRhdGUgdGFnCisJZ2l0IHRhZyAtZCB0d28gJiYgZ2l0IHRhZyB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnkgZGVmYXVsdCBhbGwgYnJhbmNoZXMgd2lsbCBiZSBrZXB0IHVwZGF0ZWQnICcKKwkoCisJCWNkIGRpcl9hbGwgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8CisJCXNlZCAtZSAiL0hFQUQkL2QiIFwKKwkJICAgIC1lICJzfC9yZW1vdGVzL29yaWdpbi98L2hlYWRzL3wiID4uLi9hY3R1YWwKKwkpICYmCisJIyBmb2xsb3cgYm90aCBtYXN0ZXIgYW5kIHNpZGUKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnkgZGVmYXVsdCBubyB0YWdzIHdpbGwgYmUga2VwdCB1cGRhdGVkJyAnCisJKAorCQljZCBkaXJfYWxsICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+Li4vYWN0dWFsCisJKSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCAtLW5vLXRhZ3MnICcKKwkoCisJCWNkIGRpcl9hbGxfbm9fdGFncyAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2luZ2xlLWJyYW5jaCB3aGlsZSBIRUFEIHBvaW50aW5nIGF0IG1hc3RlcicgJworCSgKKwkJY2QgZGlyX21hc3RlciAmJgorCQlnaXQgZmV0Y2ggLS1mb3JjZSAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gfAorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiA+Li4vYWN0dWFsCisJKSAmJgorCSMgb25seSBmb2xsb3cgbWFzdGVyCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJIyBnZXQgJiBjaGVjayBsYXRlc3QgdGFncworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkoCisJCWNkIGRpcl9tYXN0ZXIgJiYKKwkJZ2l0IGZldGNoIC0tdGFncyAtLWZvcmNlICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID4uLi9hY3R1YWwKKwkpICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2hpbGUgSEVBRCBwb2ludGluZyBhdCBtYXN0ZXIgYW5kIC0tbm8tdGFncycgJworCSgKKwkJY2QgZGlyX21hc3Rlcl9ub190YWdzICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gfAorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiA+Li4vYWN0dWFsCisJKSAmJgorCSMgb25seSBmb2xsb3cgbWFzdGVyCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCSMgZ2V0IHRhZ3MgKG5vb3ApCisJKAorCQljZCBkaXJfbWFzdGVyX25vX3RhZ3MgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsICYmCisJIyBnZXQgdGFncyB3aXRoIC0tdGFncyBvdmVycmlkZXMgdGFnT3B0CisJKAorCQljZCBkaXJfbWFzdGVyX25vX3RhZ3MgJiYKKwkJZ2l0IGZldGNoIC0tdGFncyAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+Li4vYWN0dWFsCisJKSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdoaWxlIEhFQUQgcG9pbnRpbmcgYXQgc2lkZScgJworCSgKKwkJY2QgZGlyX3NpZGUgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8CisJCXNlZCAtZSAiL0hFQUQkL2QiIFwKKwkJICAgIC1lICJzfC9yZW1vdGVzL29yaWdpbi98L2hlYWRzL3wiID4uLi9hY3R1YWwKKwkpICYmCisJIyBvbmx5IGZvbGxvdyBzaWRlCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL3NpZGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZXhwbGljaXQgLS1icmFuY2ggc2lkZScgJworCSgKKwkJY2QgZGlyX3NpZGUyICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gfAorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiA+Li4vYWN0dWFsCisJKSAmJgorCSMgb25seSBmb2xsb3cgc2lkZQorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy9zaWRlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2luZ2xlLWJyYW5jaCB3aXRoIGV4cGxpY2l0IC0tYnJhbmNoIHdpdGggdGFnIGZldGNoZXMgdXBkYXRlZCB0YWcnICcKKwkoCisJCWNkIGRpcl90YWcgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID4uLi9hY3R1YWwKKwkpICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZXhwbGljaXQgLS1icmFuY2ggd2l0aCB0YWcgZmV0Y2hlcyB1cGRhdGVkIHRhZyBkZXNwaXRlIC0tbm8tdGFncycgJworCSgKKwkJY2QgZGlyX3RhZ19ub190YWdzICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+Li4vYWN0dWFsCisJKSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzL3R3byA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2luZ2xlLWJyYW5jaCB3aXRoIC0tbWlycm9yJyAnCisJKAorCQljZCBkaXJfbWlycm9yICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMgPiAuLi9hY3R1YWwKKwkpICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2luZ2xlLWJyYW5jaCB3aXRoIGV4cGxpY2l0IC0tYnJhbmNoIGFuZCAtLW1pcnJvcicgJworCSgKKwkJY2QgZGlyX21pcnJvcl9zaWRlICYmCisJCWdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMgPiAuLi9hY3R1YWwKKwkpICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2luZ2xlLWJyYW5jaCB3aXRoIGRldGFjaGVkJyAnCisJKAorCQljZCBkaXJfZGV0YWNoZWQgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8CisJCXNlZCAtZSAiL0hFQUQkL2QiIFwKKwkJICAgIC1lICJzfC9yZW1vdGVzL29yaWdpbi98L2hlYWRzL3wiID4uLi9hY3R1YWwKKwkpICYmCisJIyBub3RoaW5nCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTMtaW5mby1hbHRlcm5hdGUuc2ggYi90L3Q1NjEzLWluZm8tYWx0ZXJuYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5NWY0NmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjEzLWluZm8tYWx0ZXJuYXRlLnNoCkBAIC0wLDAgKzEsMTM5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IE1hcnRpbiBXYWl0eiA8dGFsaUBhZG1pbmdpbGRlLm9yZz4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0cmFuc2l0aXZlIGluZm8vYWx0ZXJuYXRlIGVudHJpZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIGZpcnN0IHJlcG9zaXRvcnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYgKAorCQljZCBBICYmCisJCWVjaG8gIkhlbGxvIFdvcmxkIiA+IGZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiIGZpbGUxICYmCisJCWdpdCByZXBhY2sgLWEgLWQgJiYKKwkJZ2l0IHBydW5lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc2Vjb25kIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgLWwgLXMgQSBCICYmICgKKwkJY2QgQiAmJgorCQllY2hvICJmb28gYmFyIiA+IGZpbGUyICYmCisJCWdpdCBhZGQgZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmV4dCBjb21taXQiIGZpbGUyICYmCisJCWdpdCByZXBhY2sgLWEgLWQgLWwgJiYKKwkJZ2l0IHBydW5lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgdGhpcmQgcmVwb3NpdG9yeScgJworCWdpdCBjbG9uZSAtbCAtcyBCIEMgJiYgKAorCQljZCBDICYmCisJCWVjaG8gIkdvb2RieWUsIGNydWVsIHdvcmxkIiA+IGZpbGUzICYmCisJCWdpdCBhZGQgZmlsZTMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAib25lIG1vcmUiIGZpbGUzICYmCisJCWdpdCByZXBhY2sgLWEgLWQgLWwgJiYKKwkJZ2l0IHBydW5lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3VudC1vYmplY3RzIHNob3dzIHRoZSBhbHRlcm5hdGVzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYWx0ZXJuYXRlOiAkKHB3ZCkvQi8uZ2l0L29iamVjdHMKKwlhbHRlcm5hdGU6ICQocHdkKS9BLy5naXQvb2JqZWN0cworCUVPRgorCWdpdCAtQyBDIGNvdW50LW9iamVjdHMgLXYgPmFjdHVhbCAmJgorCWdyZXAgXmFsdGVybmF0ZTogYWN0dWFsID5hY3R1YWwuYWx0ZXJuYXRlcyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuYWx0ZXJuYXRlcworJworCisjIE5vdGU6IFRoZXNlIHRlc3RzIGRlcGVuZCBvbiB0aGUgaGFyZC1jb2RlZCB2YWx1ZSBvZiA1IGFzIHRoZSBtYXhpbXVtIGRlcHRoCisjIHdlIHdpbGwgZm9sbG93IHJlY3Vyc2lvbi4gV2Ugc3RhcnQgdGhlIGRlcHRoIGF0IDAgYW5kIGNvdW50IGxpbmtzLCBub3QKKyMgcmVwb3NpdG9yaWVzLiBUaGlzIG1lYW5zIHRoYXQgaW4gYSBjaGFpbiBsaWtlOgorIworIyAgIEEgLS0+IEIgLS0+IEMgLS0+IEQgLS0+IEUgLS0+IEYgLS0+IEcgLS0+IEgKKyMgICAgICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2CisjCisjIHdlIGFyZSBPSyBhdCAiRyIsIGJ1dCBicmVhayBhdCAiSCIsIGV2ZW4gdGhvdWdoICJIIiBpcyBhY3R1YWxseSB0aGUgOHRoCisjIHJlcG9zaXRvcnksIG5vdCB0aGUgNnRoLCB3aGljaCB5b3UgbWlnaHQgZXhwZWN0LiBDb3VudGluZyB0aGUgbGlua3MgYWxsb3dzCisjIE4rMSByZXBvc2l0b3JpZXMsIGFuZCBjb3VudGluZyBmcm9tIDAgdG8gNSBpbmNsdXNpdmUgYWxsb3dzIDYgbGlua3MuCisjCisjIE5vdGUgYWxzbyB0aGF0IHdlIG11c3QgdXNlICItLWJhcmUgLWwiIHRvIG1ha2UgdGhlIGxpbmsgdG8gSC4gVGhlICItbCIKKyMgZW5zdXJlcyB3ZSBkbyBub3QgZG8gYSBjb25uZWN0aXZpdHkgY2hlY2ssIGFuZCB0aGUgIi0tYmFyZSIgbWFrZXMgc3VyZQorIyB3ZSBkbyBub3QgdHJ5IHRvIGNoZWNrb3V0IHRoZSByZXN1bHQgKHdoaWNoIG5lZWRzIG9iamVjdHMpLCBlaXRoZXIgb2YKKyMgd2hpY2ggd291bGQgY2F1c2UgdGhlIGNsb25lIHRvIGZhaWwuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyB0b28gZGVlcCBuZXN0aW5nJyAnCisJZ2l0IGNsb25lIC1sIC1zIEMgRCAmJgorCWdpdCBjbG9uZSAtbCAtcyBEIEUgJiYKKwlnaXQgY2xvbmUgLWwgLXMgRSBGICYmCisJZ2l0IGNsb25lIC1sIC1zIEYgRyAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLWwgLXMgRyBICisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkaXR5IG9mIHNldmVudGggcmVwb3NpdG9yeScgJworCWdpdCAtQyBHIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZGl0eSBvZiBlaWdodGggcmVwb3NpdG9yeScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBIIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJlYWtpbmcgb2YgbG9vcHMnICcKKwllY2hvICIkKHB3ZCkiL0IvLmdpdC9vYmplY3RzID4+QS8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZ2l0IC1DIEMgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IGluZm8vYWx0ZXJuYXRlcyBpcyBuZWNlc3NhcnknICcKKwlybSAtZiBDLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgQyBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgcmVsYXRpdmUgYWx0ZXJuYXRlIGlzIHBvc3NpYmxlIGZvciBjdXJyZW50IGRpcicgJworCWVjaG8gIi4uLy4uLy4uL0IvLmdpdC9vYmplY3RzIiA+Qy8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZ2l0IGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWxhdGl2ZSBhbHRlcm5hdGUgaXMgcmVjdXJzaXZlJyAnCisJZ2l0IC1DIEQgZnNjaworJworCisjIHdlIGNhbiByZWFjaCAiQSIgZnJvbSBvdXIgbmV3IHJlcG8gYm90aCBkaXJlY3RseSwgYW5kIHZpYSAiQyIuCisjIFRoZSBkZWVwL3N1YmRpciBpcyB0aGVyZSB0byBtYWtlIHN1cmUgd2UgYXJlIG5vdCBkb2luZyBhIHN0dXBpZAorIyBwdXJlLXRleHQgY29tcGFyaXNvbiBvZiB0aGUgYWx0ZXJuYXRlIG5hbWVzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgZHVwbGljYXRlcyBhcmUgZWxpbWluYXRlZCcgJworCW1rZGlyIC1wIGRlZXAvc3ViZGlyICYmCisJZ2l0IGluaXQgLS1iYXJlIGRlZXAvc3ViZGlyL2R1cGxpY2F0ZS5naXQgJiYKKwljYXQgPmRlZXAvc3ViZGlyL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgPDwtXEVPRiAmJgorCS4uLy4uLy4uLy4uL0MvLmdpdC9vYmplY3RzCisJLi4vLi4vLi4vLi4vQS8uZ2l0L29iamVjdHMKKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhbHRlcm5hdGU6ICQocHdkKS9DLy5naXQvb2JqZWN0cworCWFsdGVybmF0ZTogJChwd2QpL0IvLmdpdC9vYmplY3RzCisJYWx0ZXJuYXRlOiAkKHB3ZCkvQS8uZ2l0L29iamVjdHMKKwlFT0YKKwlnaXQgLUMgZGVlcC9zdWJkaXIvZHVwbGljYXRlLmdpdCBjb3VudC1vYmplY3RzIC12ID5hY3R1YWwgJiYKKwlncmVwIF5hbHRlcm5hdGU6IGFjdHVhbCA+YWN0dWFsLmFsdGVybmF0ZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmFsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDQVNFX0lOU0VOU0lUSVZFX0ZTICdkdXAgZmluZGluZyBjYW4gYmUgY2FzZS1pbnNlbnNpdGl2ZScgJworCWdpdCBpbml0IC0tYmFyZSBpbnNlbnNpdGl2ZS5naXQgJiYKKwkjIHRoZSBwcmV2aW91cyBlbnRyeSBmb3IgIkEiIHdpbGwgaGF2ZSB1c2VkIHVwcGVyY2FzZQorCWNhdCA+aW5zZW5zaXRpdmUuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIDw8LVxFT0YgJiYKKwkuLi8uLi9DLy5naXQvb2JqZWN0cworCS4uLy4uL2EvLmdpdC9vYmplY3RzCisJRU9GCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYWx0ZXJuYXRlOiAkKHB3ZCkvQy8uZ2l0L29iamVjdHMKKwlhbHRlcm5hdGU6ICQocHdkKS9CLy5naXQvb2JqZWN0cworCWFsdGVybmF0ZTogJChwd2QpL0EvLmdpdC9vYmplY3RzCisJRU9GCisJZ2l0IC1DIGluc2Vuc2l0aXZlLmdpdCBjb3VudC1vYmplY3RzIC12ID5hY3R1YWwgJiYKKwlncmVwIF5hbHRlcm5hdGU6IGFjdHVhbCA+YWN0dWFsLmFsdGVybmF0ZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmFsdGVybmF0ZXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjE0LWNsb25lLXN1Ym1vZHVsZXMtc2hhbGxvdy5zaCBiL3QvdDU2MTQtY2xvbmUtc3VibW9kdWxlcy1zaGFsbG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0ZTZlYTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjE0LWNsb25lLXN1Ym1vZHVsZXMtc2hhbGxvdy5zaApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc2hhbGxvdyBjbG9uaW5nIG9mIHJlcG9zIHdpdGggc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3B3ZD0kKHB3ZCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyICYmCisJdGVzdF9jb21taXQgY29tbWl0MSAmJgorCXRlc3RfY29tbWl0IGNvbW1pdDIgJiYKKwlta2RpciBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBzdWJjb21taXQxICYmCisJCXRlc3RfY29tbWl0IHN1YmNvbW1pdDIgJiYKKwkJdGVzdF9jb21taXQgc3ViY29tbWl0MworCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiZmlsZTovLyRwd2Qvc3ViIiBzdWIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25zaGFsbG93IGNsb25lIGltcGxpZXMgbm9uc2hhbGxvdyBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcyAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZS9zdWIgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgd2l0aCBzaGFsbG93IHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLWRlcHRoIDIgLS1zaGFsbG93LXN1Ym1vZHVsZXMgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZS9zdWIgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmUgZG9lcyBub3QgaW1wbHkgc2hhbGxvdyBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1kZXB0aCAyICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZSBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMgJiYKKwlnaXQgLUMgc3VwZXJfY2xvbmUvc3ViIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGNsb25lIHdpdGggbm9uIHNoYWxsb3cgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tZGVwdGggMiAtLW5vLXNoYWxsb3ctc3VibW9kdWxlcyAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwlnaXQgLUMgc3VwZXJfY2xvbmUgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJZ2l0IC1DIHN1cGVyX2Nsb25lL3N1YiBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIHNoYWxsb3cgY2xvbmUgd2l0aCBzaGFsbG93IHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLW5vLWxvY2FsIC0tc2hhbGxvdy1zdWJtb2R1bGVzICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCWdpdCAtQyBzdXBlcl9jbG9uZSBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMgJiYKKwlnaXQgLUMgc3VwZXJfY2xvbmUvc3ViIGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmb2xsb3dzIHNoYWxsb3cgcmVjb21tZW5kYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIuc2hhbGxvdyB0cnVlICYmCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCWdpdCBjb21taXQgLW0gInJlY29tbWVuZCBzaGFsbG93IGZvciBzdWIiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tbm8tbG9jYWwgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJKAorCQljZCBzdXBlcl9jbG9uZSAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBsaW5lcworCSkgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lL3N1YiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHVuc2hhbGxvdyByZWNvbW1lbmRlZCBzaGFsbG93IHN1Ym1vZHVsZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tbm8tcmVjb21tZW5kLXNoYWxsb3cgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgbGluZXMKKwkpICYmCisJKAorCQljZCBzdXBlcl9jbG9uZS9zdWIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZvbGxvd3Mgbm9uIHNoYWxsb3cgcmVjb21tZW5kYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIuc2hhbGxvdyBmYWxzZSAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tICJyZWNvbW1lbmQgbm9uIHNoYWxsb3cgZm9yIHN1YiIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1uby1sb2NhbCAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IGxpbmVzCisJKSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUvc3ViICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MTUtYWx0ZXJuYXRlLWVudi5zaCBiL3QvdDU2MTUtYWx0ZXJuYXRlLWVudi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNDkwNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTYxNS1hbHRlcm5hdGUtZW52LnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdoYW5kbGluZyBvZiBhbHRlcm5hdGVzIGluIGVudmlyb25tZW50IHZhcmlhYmxlcycKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19vYmogKCkgeworCWFsdD0kMTsgc2hpZnQKKwl3aGlsZSByZWFkIG9iaiBleHBlY3QKKwlkbworCQllY2hvICIkb2JqIiA+JjUgJiYKKwkJZWNobyAiJG9iaiAkZXhwZWN0IiA+JjYKKwlkb25lIDU+aW5wdXQgNj5leHBlY3QgJiYKKwlHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUz0kYWx0IFwKKwkJZ2l0ICIkQCIgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0nJShvYmplY3RuYW1lKSAlKG9iamVjdHR5cGUpJyBcCisJCTxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYWx0ZXJuYXRlIHJlcG9zaXRvcmllcycgJworCWdpdCBpbml0IC0tYmFyZSBvbmUuZ2l0ICYmCisJb25lPSQoZWNobyBvbmUgfCBnaXQgLUMgb25lLmdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWdpdCBpbml0IC0tYmFyZSB0d28uZ2l0ICYmCisJdHdvPSQoZWNobyB0d28gfCBnaXQgLUMgdHdvLmdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvYmplY3RzIGluYWNjZXNzaWJsZSB3aXRob3V0IGFsdGVybmF0ZXMnICcKKwljaGVja19vYmogIiIgPDwtRU9GCisJJG9uZSBtaXNzaW5nCisJJHR3byBtaXNzaW5nCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FjY2VzcyBhbHRlcm5hdGUgdmlhIGFic29sdXRlIHBhdGgnICcKKwljaGVja19vYmogIiRQV0Qvb25lLmdpdC9vYmplY3RzIiA8PC1FT0YKKwkkb25lIGJsb2IKKwkkdHdvIG1pc3NpbmcKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWNjZXNzIG11bHRpcGxlIGFsdGVybmF0ZXMnICcKKwljaGVja19vYmogIiRQV0Qvb25lLmdpdC9vYmplY3RzOiRQV0QvdHdvLmdpdC9vYmplY3RzIiA8PC1FT0YKKwkkb25lIGJsb2IKKwkkdHdvIGJsb2IKKwlFT0YKKycKKworIyBiYXJlIHBhdGhzIGFyZSByZWxhdGl2ZSBmcm9tICRHSVRfRElSCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhY2Nlc3MgYWx0ZXJuYXRlIHZpYSByZWxhdGl2ZSBwYXRoIChiYXJlKScgJworCWdpdCBpbml0IC0tYmFyZSBiYXJlLmdpdCAmJgorCWNoZWNrX29iaiAiLi4vb25lLmdpdC9vYmplY3RzIiAtQyBiYXJlLmdpdCA8PC1FT0YKKwkkb25lIGJsb2IKKwlFT0YKKycKKworIyBub24tYmFyZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdG9wIG9mIHdvcmt0cmVlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhY2Nlc3MgYWx0ZXJuYXRlIHZpYSByZWxhdGl2ZSBwYXRoICh3b3JrdHJlZSknICcKKwlnaXQgaW5pdCB3b3JrdHJlZSAmJgorCWNoZWNrX29iaiAiLi4vb25lLmdpdC9vYmplY3RzIiAtQyB3b3JrdHJlZSA8PC1FT0YKKwkkb25lIGJsb2IKKwlFT0YKKycKKworIyBwYXRoIGlzIGNvbXB1dGVkIGFmdGVyIG1vdmluZyB0byB0b3AtbGV2ZWwgb2Ygd29ya3RyZWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FjY2VzcyBhbHRlcm5hdGUgdmlhIHJlbGF0aXZlIHBhdGggKHN1YmRpciknICcKKwlta2RpciBzdWJkaXIgJiYKKwljaGVja19vYmogIm9uZS5naXQvb2JqZWN0cyIgLUMgc3ViZGlyIDw8LUVPRgorCSRvbmUgYmxvYgorCUVPRgorJworCisjIHNldCB2YXJpYWJsZXMgb3V0c2lkZSB0ZXN0IHRvIGF2b2lkIHF1b3RlIGluc2FuaXR5OyB0aGUgXDA1NyBpcyAnLycsCisjIHdoaWNoIGRvZXNuJ3QgbmVlZCBxdW90aW5nLCBidXQganVzdCBjb25maXJtcyB0aGF0IGRlLXF1b3RpbmcKKyMgaXMgd29ya2luZy4KK3F1b3RlZD0nIm9uZS5naXRcMDU3b2JqZWN0cyInCit1bnF1b3RlZD0ndHdvLmdpdC9vYmplY3RzJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4IG9mIHF1b3RlZCBhbmQgdW5xdW90ZWQgYWx0ZXJuYXRlcycgJworCWNoZWNrX29iaiAiJHF1b3RlZDokdW5xdW90ZWQiIDw8LUVPRgorCSRvbmUgYmxvYgorCSR0d28gYmxvYgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnYnJva2VuIHF1b3RpbmcgZmFsbHMgYmFjayB0byBpbnRlcnByZXRpbmcgcmF3JyAnCisJbXYgb25lLmdpdCBcIm9uZS5naXQgJiYKKwljaGVja19vYmogXCJvbmUuZ2l0L29iamVjdHMgPDwtRU9GCisJJG9uZSBibG9iCisJRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYxNi1wYXJ0aWFsLWNsb25lLnNoIGIvdC90NTYxNi1wYXJ0aWFsLWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc3YmI5MWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjE2LXBhcnRpYWwtY2xvbmUuc2gKQEAgLTAsMCArMSw2MDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGFydGlhbCBjbG9uZScKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgY3JlYXRlIGEgbm9ybWFsICJzcmMiIHJlcG8gd2hlcmUgd2UgY2FuIGxhdGVyIGNyZWF0ZSBuZXcgY29tbWl0cy4KKyMgZXhwZWN0XzEub2lkcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBPSURzIG9mIGFsbCBibG9icy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5vcm1hbCBzcmMgcmVwbycgJworCWVjaG8gIntwcmludCBcJDF9IiA+cHJpbnRfMS5hd2sgJiYKKwllY2hvICJ7cHJpbnQgXCQyfSIgPnByaW50XzIuYXdrICYmCisKKwlnaXQgaW5pdCBzcmMgJiYKKwlmb3IgbiBpbiAxIDIgMyA0CisJZG8KKwkJZWNobyAiVGhpcyBpcyBmaWxlOiAkbiIgPiBzcmMvZmlsZS4kbi50eHQKKwkJZ2l0IC1DIHNyYyBhZGQgZmlsZS4kbi50eHQKKwkJZ2l0IC1DIHNyYyBjb21taXQgLW0gImZpbGUgJG4iCisJCWdpdCAtQyBzcmMgbHMtZmlsZXMgLXMgZmlsZS4kbi50eHQgPj50ZW1wCisJZG9uZSAmJgorCWF3ayAtZiBwcmludF8yLmF3ayA8dGVtcCB8IHNvcnQgPmV4cGVjdF8xLm9pZHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IGV4cGVjdF8xLm9pZHMKKycKKworIyBiYXJlIGNsb25lICJzcmMiIGdpdmluZyAic3J2LmJhcmUiIGZvciB1c2UgYXMgb3VyIHNlcnZlci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUgY2xvbmUgZm9yIHNlcnZlcicgJworCWdpdCBjbG9uZSAtLWJhcmUgImZpbGU6Ly8kKHB3ZCkvc3JjIiBzcnYuYmFyZSAmJgorCWdpdCAtQyBzcnYuYmFyZSBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwlnaXQgLUMgc3J2LmJhcmUgY29uZmlnIC0tbG9jYWwgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMQorJworCisjIGRvIGJhc2ljIHBhcnRpYWwgY2xvbmUgZnJvbSAic3J2LmJhcmUiCisjIGNvbmZpcm0gd2UgYXJlIG1pc3NpbmcgYWxsIG9mIHRoZSBrbm93biBibG9icy4KKyMgY29uZmlybSBwYXJ0aWFsIGNsb25lIHdhcyByZWdpc3RlcmVkIGluIHRoZSBsb2NhbCBjb25maWcuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBwYXJ0aWFsIGNsb25lIDEnICcKKwlnaXQgY2xvbmUgLS1uby1jaGVja291dCAtLWZpbHRlcj1ibG9iOm5vbmUgImZpbGU6Ly8kKHB3ZCkvc3J2LmJhcmUiIHBjMSAmJgorCisJZ2l0IC1DIHBjMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvPy8vIiB8CisJc29ydCA+b2JzZXJ2ZWQub2lkcyAmJgorCisJdGVzdF9jbXAgZXhwZWN0XzEub2lkcyBvYnNlcnZlZC5vaWRzICYmCisJdGVzdCAiJChnaXQgLUMgcGMxIGNvbmZpZyAtLWxvY2FsIGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24pIiA9ICIxIiAmJgorCXRlc3QgIiQoZ2l0IC1DIHBjMSBjb25maWcgLS1sb2NhbCByZW1vdGUub3JpZ2luLnByb21pc29yKSIgPSAidHJ1ZSIgJiYKKwl0ZXN0ICIkKGdpdCAtQyBwYzEgY29uZmlnIC0tbG9jYWwgcmVtb3RlLm9yaWdpbi5wYXJ0aWFsY2xvbmVmaWx0ZXIpIiA9ICJibG9iOm5vbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IC5wcm9taXNvciBmaWxlIGNvbnRhaW5zIHJlZnMgZmV0Y2hlZCcgJworCWxzIHBjMS8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucHJvbWlzb3IgPnByb21pc29ybGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcHJvbWlzb3JsaXN0ICYmCisJZ2l0IC1DIHNydi5iYXJlIHJldi1saXN0IEhFQUQgPmhlYWRoYXNoICYmCisJZ3JlcCAiJChjYXQgaGVhZGhhc2gpIEhFQUQiICQoY2F0IHByb21pc29ybGlzdCkgJiYKKwlncmVwICIkKGNhdCBoZWFkaGFzaCkgcmVmcy9oZWFkcy9tYXN0ZXIiICQoY2F0IHByb21pc29ybGlzdCkKKycKKworIyBjaGVja291dCBtYXN0ZXIgdG8gZm9yY2UgZHluYW1pYyBvYmplY3QgZmV0Y2ggb2YgYmxvYnMgYXQgSEVBRC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBjaGVja291dCB3aXRoIGR5bmFtaWMgb2JqZWN0IGZldGNoJyAnCisJZ2l0IC1DIHBjMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgSEVBRCA+b2JzZXJ2ZWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IG9ic2VydmVkICYmCisJZ2l0IC1DIHBjMSBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgLUMgcGMxIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tbWlzc2luZz1wcmludCBIRUFEID5vYnNlcnZlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgb2JzZXJ2ZWQKKycKKworIyBjcmVhdGUgbmV3IGNvbW1pdHMgaW4gInNyYyIgcmVwbyB0byBlc3RhYmxpc2ggYSBibGFtZSBoaXN0b3J5IG9uIGZpbGUuMS50eHQKKyMgYW5kIHB1c2ggdG8gInNydi5iYXJlIi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbmV3IGNvbW1pdHMgdG8gc2VydmVyJyAnCisJZ2l0IC1DIHNyYyByZW1vdGUgYWRkIHNydiAiZmlsZTovLyQocHdkKS9zcnYuYmFyZSIgJiYKKwlmb3IgeCBpbiBhIGIgYyBkIGUKKwlkbworCQllY2hvICJNb2QgZmlsZS4xLnR4dCAkeCIgPj5zcmMvZmlsZS4xLnR4dAorCQlnaXQgLUMgc3JjIGFkZCBmaWxlLjEudHh0CisJCWdpdCAtQyBzcmMgY29tbWl0IC1tICJtb2QgJHgiCisJZG9uZSAmJgorCWdpdCAtQyBzcmMgYmxhbWUgbWFzdGVyIC0tIGZpbGUuMS50eHQgPmV4cGVjdC5ibGFtZSAmJgorCWdpdCAtQyBzcmMgcHVzaCAtdSBzcnYgbWFzdGVyCisnCisKKyMgKHBhcnRpYWwpIGZldGNoIGluIHRoZSBwYXJ0aWFsIGNsb25lIHJlcG8gZnJvbSB0aGUgcHJvbWlzb3IgcmVtb3RlLgorIyB2ZXJpZnkgdGhhdCBmZXRjaCBpbmhlcml0ZWQgdGhlIGZpbHRlci1zcGVjIGZyb20gdGhlIGNvbmZpZyBhbmQgRE9FUyBOT1QKKyMgaGF2ZSB0aGUgbmV3IGJsb2JzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBmZXRjaCBpbmhlcml0cyBmaWx0ZXIgc2V0dGluZ3MnICcKKwlnaXQgLUMgcGMxIGZldGNoIG9yaWdpbiAmJgorCWdpdCAtQyBwYzEgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IFwKKwkJbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5vYnNlcnZlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgb2JzZXJ2ZWQKKycKKworIyBmb3JjZSBkeW5hbWljIG9iamVjdCBmZXRjaCB1c2luZyBkaWZmLgorIyB3ZSBzaG91bGQgb25seSBnZXQgMSBuZXcgYmxvYiAoZm9yIHRoZSBmaWxlIGluIG9yaWdpbi9tYXN0ZXIpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGRpZmYgY2F1c2VzIGR5bmFtaWMgb2JqZWN0IGZldGNoJyAnCisJZ2l0IC1DIHBjMSBkaWZmIG1hc3Rlci4ub3JpZ2luL21hc3RlciAtLSBmaWxlLjEudHh0ICYmCisJZ2l0IC1DIHBjMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgXAorCQkgbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5vYnNlcnZlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb2JzZXJ2ZWQKKycKKworIyBmb3JjZSBmdWxsIGR5bmFtaWMgb2JqZWN0IGZldGNoIG9mIHRoZSBmaWxlJ3MgaGlzdG9yeSB1c2luZyBibGFtZS4KKyMgd2Ugc2hvdWxkIGdldCB0aGUgaW50ZXJtZWRpYXRlIGJsb2JzIGZvciB0aGUgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibGFtZSBjYXVzZXMgZHluYW1pYyBvYmplY3QgZmV0Y2gnICcKKwlnaXQgLUMgcGMxIGJsYW1lIG9yaWdpbi9tYXN0ZXIgLS0gZmlsZS4xLnR4dCA+b2JzZXJ2ZWQuYmxhbWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmxhbWUgb2JzZXJ2ZWQuYmxhbWUgJiYKKwlnaXQgLUMgcGMxIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tbWlzc2luZz1wcmludCBcCisJCW1hc3Rlci4ub3JpZ2luL21hc3RlciA+b2JzZXJ2ZWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIG9ic2VydmVkCisnCisKKyMgY3JlYXRlIG5ldyBjb21taXRzIGluICJzcmMiIHJlcG8gdG8gZXN0YWJsaXNoIGEgaGlzdG9yeSBvbiBmaWxlLjIudHh0CisjIGFuZCBwdXNoIHRvICJzcnYuYmFyZSIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG5ldyBjb21taXRzIHRvIHNlcnZlciBmb3IgZmlsZS4yLnR4dCcgJworCWZvciB4IGluIGEgYiBjIGQgZSBmCisJZG8KKwkJZWNobyAiTW9kIGZpbGUuMi50eHQgJHgiID4+c3JjL2ZpbGUuMi50eHQKKwkJZ2l0IC1DIHNyYyBhZGQgZmlsZS4yLnR4dAorCQlnaXQgLUMgc3JjIGNvbW1pdCAtbSAibW9kICR4IgorCWRvbmUgJiYKKwlnaXQgLUMgc3JjIHB1c2ggLXUgc3J2IG1hc3RlcgorJworCisjIERvIEZVTEwgZmV0Y2ggYnkgZGlzYWJsaW5nIGluaGVyaXRlZCBmaWx0ZXItc3BlYyB1c2luZyAtLW5vLWZpbHRlci4KKyMgVmVyaWZ5IHdlIGhhdmUgYWxsIHRoZSBuZXcgYmxvYnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBpbmhlcml0ZWQgZmlsdGVyLXNwZWMgdXNpbmcgLS1uby1maWx0ZXInICcKKwlnaXQgLUMgcGMxIGZldGNoIC0tbm8tZmlsdGVyIG9yaWdpbiAmJgorCWdpdCAtQyBwYzEgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IFwKKwkJbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5vYnNlcnZlZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgb2JzZXJ2ZWQKKycKKworIyBjcmVhdGUgbmV3IGNvbW1pdHMgaW4gInNyYyIgcmVwbyB0byBlc3RhYmxpc2ggYSBoaXN0b3J5IG9uIGZpbGUuMy50eHQKKyMgYW5kIHB1c2ggdG8gInNydi5iYXJlIi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbmV3IGNvbW1pdHMgdG8gc2VydmVyIGZvciBmaWxlLjMudHh0JyAnCisJZm9yIHggaW4gYSBiIGMgZCBlIGYKKwlkbworCQllY2hvICJNb2QgZmlsZS4zLnR4dCAkeCIgPj5zcmMvZmlsZS4zLnR4dAorCQlnaXQgLUMgc3JjIGFkZCBmaWxlLjMudHh0CisJCWdpdCAtQyBzcmMgY29tbWl0IC1tICJtb2QgJHgiCisJZG9uZSAmJgorCWdpdCAtQyBzcmMgcHVzaCAtdSBzcnYgbWFzdGVyCisnCisKKyMgRG8gYSBwYXJ0aWFsIGZldGNoIGFuZCB0aGVuIHRyeSB0byBtYW51YWxseSBmZXRjaCB0aGUgbWlzc2luZyBvYmplY3RzLgorIyBUaGlzIGNhbiBiZSB1c2VkIGFzIHRoZSBiYXNpcyBvZiBhIHByZS1jb21tYW5kIGhvb2sgdG8gYnVsayBmZXRjaCBvYmplY3RzCisjIHBlcmhhcHMgY29tYmluZWQgd2l0aCBhIGNvbW1hbmQgaW4gZHJ5LXJ1biBtb2RlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFudWFsIHByZWZldGNoIG9mIG1pc3Npbmcgb2JqZWN0cycgJworCWdpdCAtQyBwYzEgZmV0Y2ggLS1maWx0ZXI9YmxvYjpub25lIG9yaWdpbiAmJgorCisJZ2l0IC1DIHBjMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgXAorCQkgbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy8/Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZC5vaWRzICYmCisKKwl0ZXN0X2xpbmVfY291bnQgPSA2IG9ic2VydmVkLm9pZHMgJiYKKwlnaXQgLUMgcGMxIGZldGNoLXBhY2sgLS1zdGRpbiAiZmlsZTovLyQocHdkKS9zcnYuYmFyZSIgPG9ic2VydmVkLm9pZHMgJiYKKworCWdpdCAtQyBwYzEgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IFwKKwkJbWFzdGVyLi5vcmlnaW4vbWFzdGVyID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy8/Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZC5vaWRzICYmCisKKwl0ZXN0X2xpbmVfY291bnQgPSAwIG9ic2VydmVkLm9pZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZSB3aXRoIHRyYW5zZmVyLmZzY2tvYmplY3RzPTEgdXNlcyBpbmRleC1wYWNrIC0tZnNjay1vYmplY3RzJyAnCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIHggJiYKKwl0ZXN0X2NvbmZpZyAtQyBzcmMgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgc3JjIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKworCUdJVF9UUkFDRT0iJChwd2QpL3RyYWNlIiBnaXQgLWMgdHJhbnNmZXIuZnNja29iamVjdHM9MSBcCisJCWNsb25lIC0tZmlsdGVyPSJibG9iOm5vbmUiICJmaWxlOi8vJChwd2QpL3NyYyIgZHN0ICYmCisJZ3JlcCAiZ2l0IGluZGV4LXBhY2suKi0tZnNjay1vYmplY3RzIiB0cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgZnNjayBiZWZvcmUgYW5kIGFmdGVyIG1hbnVhbGx5IGZldGNoaW5nIGEgbWlzc2luZyBzdWJ0cmVlJyAnCisJIyBwdXNoIG5ldyBjb21taXQgc28gc2VydmVyIGhhcyBhIHN1YnRyZWUKKwlta2RpciBzcmMvZGlyICYmCisJZWNobyAiaW4gZGlyIiA+c3JjL2Rpci9maWxlLnR4dCAmJgorCWdpdCAtQyBzcmMgYWRkIGRpci9maWxlLnR4dCAmJgorCWdpdCAtQyBzcmMgY29tbWl0IC1tICJmaWxlIGluIGRpciIgJiYKKwlnaXQgLUMgc3JjIHB1c2ggLXUgc3J2IG1hc3RlciAmJgorCVNVQlRSRUU9JChnaXQgLUMgc3JjIHJldi1wYXJzZSBIRUFEOmRpcikgJiYKKworCXJtIC1yZiBkc3QgJiYKKwlnaXQgY2xvbmUgLS1uby1jaGVja291dCAtLWZpbHRlcj10cmVlOjAgImZpbGU6Ly8kKHB3ZCkvc3J2LmJhcmUiIGRzdCAmJgorCWdpdCAtQyBkc3QgZnNjayAmJgorCisJIyBNYWtlIHN1cmUgd2Ugb25seSBoYXZlIGNvbW1pdHMsIGFuZCBhbGwgdHJlZXMgYW5kIGJsb2JzIGFyZSBtaXNzaW5nLgorCWdpdCAtQyBkc3QgcmV2LWxpc3QgLS1taXNzaW5nPWFsbG93LWFueSAtLW9iamVjdHMgbWFzdGVyIFwKKwkJPmZldGNoZWRfb2JqZWN0cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayBmZXRjaGVkX29iamVjdHMgfAorCXhhcmdzIC1uMSBnaXQgLUMgZHN0IGNhdC1maWxlIC10ID5mZXRjaGVkX3R5cGVzICYmCisKKwlzb3J0IC11IGZldGNoZWRfdHlwZXMgPnVuaXF1ZV90eXBlcy5vYnNlcnZlZCAmJgorCWVjaG8gY29tbWl0ID51bmlxdWVfdHlwZXMuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCB1bmlxdWVfdHlwZXMuZXhwZWN0ZWQgdW5pcXVlX3R5cGVzLm9ic2VydmVkICYmCisKKwkjIEF1dG8tZmV0Y2ggYSB0cmVlIHdpdGggY2F0LWZpbGUuCisJZ2l0IC1DIGRzdCBjYXQtZmlsZSAtcCAkU1VCVFJFRSA+dHJlZV9jb250ZW50cyAmJgorCWdyZXAgZmlsZS50eHQgdHJlZV9jb250ZW50cyAmJgorCisJIyBmc2NrIHN0aWxsIHdvcmtzIGFmdGVyIGFuIGF1dG8tZmV0Y2ggb2YgYSB0cmVlLgorCWdpdCAtQyBkc3QgZnNjayAmJgorCisJIyBBdXRvLWZldGNoIGFsbCByZW1haW5pbmcgdHJlZXMgYW5kIGJsb2JzIHdpdGggLS1taXNzaW5nPWVycm9yCisJZ2l0IC1DIGRzdCByZXYtbGlzdCAtLW1pc3Npbmc9ZXJyb3IgLS1vYmplY3RzIG1hc3RlciA+ZmV0Y2hlZF9vYmplY3RzICYmCisJdGVzdF9saW5lX2NvdW50ID0gNzAgZmV0Y2hlZF9vYmplY3RzICYmCisKKwlhd2sgLWYgcHJpbnRfMS5hd2sgZmV0Y2hlZF9vYmplY3RzIHwKKwl4YXJncyAtbjEgZ2l0IC1DIGRzdCBjYXQtZmlsZSAtdCA+ZmV0Y2hlZF90eXBlcyAmJgorCisJc29ydCAtdSBmZXRjaGVkX3R5cGVzID51bmlxdWVfdHlwZXMub2JzZXJ2ZWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGJsb2IgY29tbWl0IHRyZWUgPnVuaXF1ZV90eXBlcy5leHBlY3RlZCAmJgorCXRlc3RfY21wIHVuaXF1ZV90eXBlcy5leHBlY3RlZCB1bmlxdWVfdHlwZXMub2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wbGljaXRseSBjb25zdHJ1Y3QgY29tYmluZTogZmlsdGVyIHdpdGggcmVwZWF0ZWQgZmxhZ3MnICcKKwlHSVRfVFJBQ0U9JChwd2QpL3RyYWNlIGdpdCBjbG9uZSAtLWJhcmUgXAorCQktLWZpbHRlcj1ibG9iOm5vbmUgLS1maWx0ZXI9dHJlZToxIFwKKwkJImZpbGU6Ly8kKHB3ZCkvc3J2LmJhcmUiIHBjMiAmJgorCWdyZXAgInRyYWNlOi4qIGdpdCBwYWNrLW9iamVjdHMgLiotLWZpbHRlcj1jb21iaW5lOmJsb2I6bm9uZSt0cmVlOjEiIFwKKwkJdHJhY2UgJiYKKwlnaXQgLUMgcGMyIHJldi1saXN0IC0tb2JqZWN0cyAtLW1pc3Npbmc9YWxsb3ctYW55IEhFQUQgPm9iamVjdHMgJiYKKworCSMgV2Ugc2hvdWxkIGhhdmUgZ290dGVuIHNvbWUgcm9vdCB0cmVlcy4KKwlncmVwICIgJCIgb2JqZWN0cyAmJgorCSMgU2hvdWxkIG5vdCBoYXZlIGdvdHRlbiBhbnkgbm9uLXJvb3QgdHJlZXMgb3IgYmxvYnMuCisJISBncmVwICIgLiIgb2JqZWN0cyAmJgorCisJeGFyZ3MgLW4gMSBnaXQgLUMgcGMyIGNhdC1maWxlIC10IDxvYmplY3RzID50eXBlcyAmJgorCXNvcnQgLXUgdHlwZXMgPnVuaXF1ZV90eXBlcy5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGNvbW1pdCB0cmVlID51bmlxdWVfdHlwZXMuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCB1bmlxdWVfdHlwZXMuZXhwZWN0ZWQgdW5pcXVlX3R5cGVzLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNsb25lIGZldGNoZXMgYmxvYnMgcG9pbnRlZCB0byBieSByZWZzIGV2ZW4gaWYgbm9ybWFsbHkgZmlsdGVyZWQgb3V0JyAnCisJcm0gLXJmIHNyYyBkc3QgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzcmMgeCAmJgorCXRlc3RfY29uZmlnIC1DIHNyYyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzcmMgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJIyBDcmVhdGUgYSB0YWcgcG9pbnRpbmcgdG8gYSBibG9iLgorCUJMT0I9JChlY2hvIGJsb2ItY29udGVudHMgfCBnaXQgLUMgc3JjIGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJZ2l0IC1DIHNyYyB0YWcgbXlibG9iICIkQkxPQiIgJiYKKworCWdpdCBjbG9uZSAtLWZpbHRlcj0iYmxvYjpub25lIiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCAyPmVyciAmJgorCSEgZ3JlcCAiZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QiIGVyciAmJgorCWdpdCAtQyBkc3QgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aGF0IGlzIHNwZWNpZmllZCBvbiBDTEkgZXZlbiBpZiBhbHJlYWR5IHByb21pc2VkJyAnCisJcm0gLXJmIHNyYyBkc3QuZ2l0ICYmCisJZ2l0IGluaXQgc3JjICYmCisJdGVzdF9jb21taXQgLUMgc3JjIGZvbyAmJgorCXRlc3RfY29uZmlnIC1DIHNyYyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzcmMgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPHNyYy9mb28udCA+YmxvYiAmJgorCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj1ibG9iOm5vbmUgImZpbGU6Ly8kKHB3ZCkvc3JjIiBkc3QuZ2l0ICYmCisJZ2l0IC1DIGRzdC5naXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tcXVpZXQgLS1taXNzaW5nPXByaW50IEhFQUQgPm1pc3NpbmdfYmVmb3JlICYmCisJZ3JlcCAiPyQoY2F0IGJsb2IpIiBtaXNzaW5nX2JlZm9yZSAmJgorCWdpdCAtQyBkc3QuZ2l0IGZldGNoIG9yaWdpbiAkKGNhdCBibG9iKSAmJgorCWdpdCAtQyBkc3QuZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLXF1aWV0IC0tbWlzc2luZz1wcmludCBIRUFEID5taXNzaW5nX2FmdGVyICYmCisJISBncmVwICI/JChjYXQgYmxvYikiIG1pc3NpbmdfYWZ0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3JjIHJlcG8gZm9yIHNwYXJzZSBmaWx0ZXInICcKKwlnaXQgaW5pdCBzcGFyc2Utc3JjICYmCisJZ2l0IC1DIHNwYXJzZS1zcmMgY29uZmlnIC0tbG9jYWwgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJZ2l0IC1DIHNwYXJzZS1zcmMgY29uZmlnIC0tbG9jYWwgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCXRlc3RfY29tbWl0IC1DIHNwYXJzZS1zcmMgb25lICYmCisJdGVzdF9jb21taXQgLUMgc3BhcnNlLXNyYyB0d28gJiYKKwllY2hvIC9vbmUudCA+c3BhcnNlLXNyYy9vbmx5LW9uZSAmJgorCWdpdCAtQyBzcGFyc2Utc3JjIGFkZCAuICYmCisJZ2l0IC1DIHNwYXJzZS1zcmMgY29tbWl0IC1tICJhZGQgc3BhcnNlIGNoZWNrb3V0IGZpbGVzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNsb25lIHdpdGggc3BhcnNlIGZpbHRlciBzdWNjZWVkcycgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIFwKKwkJICAtLWZpbHRlcj1zcGFyc2U6b2lkPW1hc3Rlcjpvbmx5LW9uZSBcCisJCSAgc3BhcnNlLXNyYyBkc3QuZ2l0ICYmCisJKAorCQljZCBkc3QuZ2l0ICYmCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IEhFQUQgPm91dCAmJgorCQlncmVwICJeJChnaXQgcmV2LXBhcnNlIEhFQUQ6b25lLnQpIiBvdXQgJiYKKwkJZ3JlcCAiXj8kKGdpdCByZXYtcGFyc2UgSEVBRDp0d28udCkiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjbG9uZSB3aXRoIHVucmVzb2x2YWJsZSBzcGFyc2UgZmlsdGVyIGZhaWxzIGNsZWFubHknICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBcCisJCQkJIC0tZmlsdGVyPXNwYXJzZTpvaWQ9bWFzdGVyOm5vLXN1Y2gtbmFtZSBcCisJCQkJIHNwYXJzZS1zcmMgZHN0LmdpdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byBhY2Nlc3Mgc3BhcnNlIGJsb2IgaW4gLm1hc3Rlcjpuby1zdWNoLW5hbWUiIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBcCisJCQkJIC0tZmlsdGVyPXNwYXJzZTpvaWQ9bWFzdGVyIFwKKwkJCQkgc3BhcnNlLXNyYyBkc3QuZ2l0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIHBhcnNlIHNwYXJzZSBmaWx0ZXIgZGF0YSBpbiIgZXJyCisnCisKK3NldHVwX3RyaWFuZ2xlICgpIHsKKwlybSAtcmYgYmlnLWJsb2IudHh0IHNlcnZlciBjbGllbnQgcHJvbWlzb3ItcmVtb3RlICYmCisKKwlwcmludGYgImxpbmUgJWRcbiIgJCh0ZXN0X3NlcSAxIDEwMCkgPmJpZy1ibG9iLnR4dCAmJgorCisJIyBDcmVhdGUgYSBzZXJ2ZXIgd2l0aCAyIGNvbW1pdHM6IGEgY29tbWl0IHdpdGggYSBiaWcgdHJlZSBhbmQgYSBjaGlsZAorCSMgY29tbWl0IHdpdGggYW4gaW5jcmVtZW50YWwgY2hhbmdlLiBBbHNvLCBjcmVhdGUgYSBwYXJ0aWFsIGNsb25lCisJIyBjbGllbnQgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBmaXJzdCBjb21taXQuCisJZ2l0IGluaXQgc2VydmVyICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTAwKQorCWRvCisJCWVjaG8gIm1ha2UgdGhlIHRyZWUgYmlnIiA+c2VydmVyL2ZpbGUkaSAmJgorCQlnaXQgLUMgc2VydmVyIGFkZCBmaWxlJGkKKwlkb25lICYmCisJZ2l0IC1DIHNlcnZlciBjb21taXQgLW0gImluaXRpYWwiICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLWZpbHRlcj10cmVlOjAgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKwllY2hvIGFub3RoZXIgbGluZSA+PnNlcnZlci9maWxlMSAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1hbSAiaW5jcmVtZW50YWwgY2hhbmdlIiAmJgorCisJIyBDcmVhdGUgYSBwcm9taXNvciByZW1vdGUgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSB0cmVlIGFuZCBibG9iIGZyb20KKwkjIHRoZSBmaXJzdCBjb21taXQuCisJZ2l0IGluaXQgcHJvbWlzb3ItcmVtb3RlICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCAxICYmCisJVFJFRV9IQVNIPSQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgSEVBRH4xXnt0cmVlfSkgJiYKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGZldGNoIC0ta2VlcCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiICIkVFJFRV9IQVNIIiAmJgorCWdpdCAtQyBwcm9taXNvci1yZW1vdGUgY291bnQtb2JqZWN0cyAtdiA+b2JqZWN0LWNvdW50ICYmCisJdGVzdF9pMThuZ3JlcCAiY291bnQ6IDAiIG9iamVjdC1jb3VudCAmJgorCXRlc3RfaTE4bmdyZXAgImluLXBhY2s6IDIiIG9iamVjdC1jb3VudCAmJgorCisJIyBTZXQgaXQgYXMgdGhlIHByb21pc29yIHJlbW90ZSBvZiBjbGllbnQuIFRodXMsIHdoZW5ldmVyCisJIyB0aGUgY2xpZW50IGxhenkgZmV0Y2hlcywgdGhlIGxhenkgZmV0Y2ggd2lsbCBzdWNjZWVkIG9ubHkgaWYgaXQgaXMKKwkjIGZvciB0aGlzIHRyZWUgb3IgYmxvYi4KKwl0ZXN0X2NvbW1pdCAtQyBwcm9taXNvci1yZW1vdGUgb25lICYmICMgc28gdGhhdCByZWYgYWR2ZXJ0aXNlbWVudCBpcyBub3QgZW1wdHkKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGNvbmZpZyAtLWxvY2FsIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgLUMgY2xpZW50IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAiZmlsZTovLyQocHdkKS9wcm9taXNvci1yZW1vdGUiCit9CisKKyMgTkVFRFNXT1JLOiBUaGUgdGVzdHMgYmVnaW5uaW5nIHdpdGggImZldGNoIGxhenktZmV0Y2hlcyIgYmVsb3cgb25seQorIyB0ZXN0IHRoYXQgImZldGNoIiBhdm9pZCBmZXRjaGluZyB0cmVlcyBhbmQgYmxvYnMsIGJ1dCBub3QgY29tbWl0cyBvcgorIyB0YWdzLiBSZXZpc2l0IHRoaXMgaWYgR2l0IGlzIGV2ZXIgdGF1Z2h0IHRvIHN1cHBvcnQgcGFydGlhbCBjbG9uZXMKKyMgd2l0aCBjb21taXRzIGFuZC9vciB0YWdzIGZpbHRlcmVkIG91dC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbGF6eS1mZXRjaGVzIG9ubHkgdG8gcmVzb2x2ZSBkZWx0YXMnICcKKwlzZXR1cF90cmlhbmdsZSAmJgorCisJIyBFeGVyY2lzZSB0byBtYWtlIHN1cmUgaXQgd29ya3MuIEdpdCB3aWxsIG5vdCBmZXRjaCBhbnl0aGluZyBmcm9tIHRoZQorCSMgcHJvbWlzb3IgcmVtb3RlIG90aGVyIHRoYW4gZm9yIHRoZSBiaWcgdHJlZSAoYmVjYXVzZSBpdCBuZWVkcyB0bworCSMgcmVzb2x2ZSB0aGUgZGVsdGEpLgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBcCisJCWZldGNoICJmaWxlOi8vJChwd2QpL3NlcnZlciIgbWFzdGVyICYmCisKKwkjIFZlcmlmeSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBjbGllbnQgbmVlZGVkIHRvIGZldGNoIHRoZSBkZWx0YSBiYXNlCisJIyB0byByZXNvbHZlIHRoZSBkZWx0YS4KKwlnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBIRUFEfjFee3RyZWV9ID5oYXNoICYmCisJZ3JlcCAid2FudCAkKGNhdCBoYXNoKSIgdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbGF6eS1mZXRjaGVzIG9ubHkgdG8gcmVzb2x2ZSBkZWx0YXMsIHByb3RvY29sIHYyJyAnCisJc2V0dXBfdHJpYW5nbGUgJiYKKworCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIC0tbG9jYWwgcHJvdG9jb2wudmVyc2lvbiAyICYmCisJZ2l0IC1DIGNsaWVudCBjb25maWcgLS1sb2NhbCBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGNvbmZpZyAtLWxvY2FsIHByb3RvY29sLnZlcnNpb24gMiAmJgorCisJIyBFeGVyY2lzZSB0byBtYWtlIHN1cmUgaXQgd29ya3MuIEdpdCB3aWxsIG5vdCBmZXRjaCBhbnl0aGluZyBmcm9tIHRoZQorCSMgcHJvbWlzb3IgcmVtb3RlIG90aGVyIHRoYW4gZm9yIHRoZSBiaWcgYmxvYiAoYmVjYXVzZSBpdCBuZWVkcyB0bworCSMgcmVzb2x2ZSB0aGUgZGVsdGEpLgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCBcCisJCWZldGNoICJmaWxlOi8vJChwd2QpL3NlcnZlciIgbWFzdGVyICYmCisKKwkjIFZlcmlmeSB0aGF0IHByb3RvY29sIHZlcnNpb24gMiB3YXMgdXNlZC4KKwlncmVwICJmZXRjaDwgdmVyc2lvbiAyIiB0cmFjZSAmJgorCisJIyBWZXJpZnkgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgY2xpZW50IG5lZWRlZCB0byBmZXRjaCB0aGUgZGVsdGEgYmFzZQorCSMgdG8gcmVzb2x2ZSB0aGUgZGVsdGEuCisJZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgSEVBRH4xXnt0cmVlfSA+aGFzaCAmJgorCWdyZXAgIndhbnQgJChjYXQgaGFzaCkiIHRyYWNlCisnCisKKyMgVGhlIGZvbGxvd2luZyB0d28gdGVzdHMgbXVzdCBiZSBpbiB0aGlzIG9yZGVyLCBvciBlbHNlCisjIHRoZSBmaXJzdCB3aWxsIG5vdCBmYWlsLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgc3J2LmJhcmUKKyMgcmVwb3NpdG9yeSBkaWQgbm90IGhhdmUgdGFncyBkdXJpbmcgY2xvbmUsIGJ1dCBoYXMgdGFncworIyBpbiB0aGUgZmV0Y2guCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ZlcmlmeSBmZXRjaCBzdWNjZWVkcyB3aGVuIGFza2luZyBmb3IgbmV3IHRhZ3MnICcKKwlnaXQgY2xvbmUgLS1maWx0ZXI9YmxvYjpub25lICJmaWxlOi8vJChwd2QpL3Nydi5iYXJlIiB0YWctdGVzdCAmJgorCWZvciBpIGluIEkgSiBLCisJZG8KKwkJdGVzdF9jb21taXQgLUMgc3JjICRpICYmCisJCWdpdCAtQyBzcmMgYnJhbmNoICRpIHx8IHJldHVybiAxCisJZG9uZSAmJgorCWdpdCAtQyBzcnYuYmFyZSBmZXRjaCAtLXRhZ3Mgb3JpZ2luICtyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qICYmCisJZ2l0IC1DIHRhZy10ZXN0IC1jIHByb3RvY29sLnZlcnNpb249MiBmZXRjaCAtLXRhZ3Mgb3JpZ2luCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBmZXRjaCBkb3dubG9hZHMgb25seSBvbmUgcGFjayB3aGVuIHVwZGF0aW5nIHJlZnMnICcKKwlnaXQgY2xvbmUgLS1maWx0ZXI9YmxvYjpub25lICJmaWxlOi8vJChwd2QpL3Nydi5iYXJlIiBwYWNrLXRlc3QgJiYKKwlscyBwYWNrLXRlc3QvLmdpdC9vYmplY3RzL3BhY2svKnBhY2sgPnBhY2stbGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgcGFjay1saXN0ICYmCisJZm9yIGkgaW4gQSBCIEMKKwlkbworCQl0ZXN0X2NvbW1pdCAtQyBzcmMgJGkgJiYKKwkJZ2l0IC1DIHNyYyBicmFuY2ggJGkgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IC1DIHNydi5iYXJlIGZldGNoIG9yaWdpbiArcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiAmJgorCWdpdCAtQyBwYWNrLXRlc3QgZmV0Y2ggb3JpZ2luICYmCisJbHMgcGFjay10ZXN0Ly5naXQvb2JqZWN0cy9wYWNrLypwYWNrID5wYWNrLWxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIHBhY2stbGlzdAorJworCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKworIyBDb252ZXJ0cyBieXRlcyBpbnRvIHRoZWlyIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLiBGb3IgZXhhbXBsZSwKKyMgInByaW50ZiAnYWJcclxuJyB8IGhleF91bnBhY2siIHJlc3VsdHMgaW4gJzYxNjIwZDBhJy4KK2hleF91bnBhY2sgKCkgeworCXBlcmwgLWUgJyQvID0gdW5kZWY7ICRpbnB1dCA9IDw+OyBwcmludCB1bnBhY2soIkgyIiB4IGxlbmd0aCgkaW5wdXQpLCAkaW5wdXQpJworfQorCisjIEluc2VydHMgJDEgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgYW5kIGV2ZXJ5IDIgY2hhcmFjdGVycyB0aGVyZWFmdGVyLgoraW50ZXJzcGVyc2UgKCkgeworCXNlZCAncy9cKC4uXCkvJyQxJ1wxL2cnCit9CisKKyMgQ3JlYXRlIGEgb25lLXRpbWUtcGVybCBjb21tYW5kIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHBhY2tmaWxlIHdpdGggJDEuCityZXBsYWNlX3BhY2tmaWxlICgpIHsKKwkjIFRoZSBwcm90b2NvbCByZXF1aXJlcyB0aGF0IHRoZSBwYWNrZmlsZSBiZSBzZW50IGluIHNpZGViYW5kIDEsIGhlbmNlCisJIyB0aGUgZXh0cmEgXHgwMSBieXRlIGF0IHRoZSBiZWdpbm5pbmcuCisJY3AgJDEgIiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGFjayIgJiYKKwllY2hvICdpZiAoL3BhY2tmaWxlLykgeworCQlwcmludDsKKwkJbXkgJGxlbmd0aCA9IC1zICJvbmUtdGltZS1wYWNrIjsKKwkJcHJpbnRmICIlMDR4XHgwMSIsICRsZW5ndGggKyA1OworCQlwcmludCBgY2F0IG9uZS10aW1lLXBhY2tgIC4gIjAwMDAiOworCQlsYXN0CisJfScgPiIkSFRUUERfUk9PVF9QQVRIL29uZS10aW1lLXBlcmwiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vwb24gY2xvbmluZywgY2hlY2sgdGhhdCBhbGwgcmVmcyBwb2ludCB0byBvYmplY3RzJyAnCisJU0VSVkVSPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NlcnZlciIgJiYKKwlybSAtcmYgIiRTRVJWRVIiIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkU0VSVkVSIiAmJgorCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBmb28gJiYKKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgIiRTRVJWRVIiIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKworCSMgQ3JlYXRlIGEgdGFnIHBvaW50aW5nIHRvIGEgYmxvYi4KKwlCTE9CPSQoZWNobyBibG9iLWNvbnRlbnRzIHwgZ2l0IC1DICIkU0VSVkVSIiBoYXNoLW9iamVjdCAtLXN0ZGluIC13KSAmJgorCWdpdCAtQyAiJFNFUlZFUiIgdGFnIG15YmxvYiAiJEJMT0IiICYmCisKKwkjIENyYWZ0IGEgcGFja2ZpbGUgbm90IGluY2x1ZGluZyB0aGF0IGJsb2IuCisJZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgSEVBRCB8CisJZ2l0IC1DICIkU0VSVkVSIiBwYWNrLW9iamVjdHMgLS1zdGRvdXQgPmluY29tcGxldGUucGFjayAmJgorCisJIyBSZXBsYWNlIHRoZSBleGlzdGluZyBwYWNrZmlsZSB3aXRoIHRoZSBjcmFmdGVkIG9uZS4gVGhlIHByb3RvY29sCisJIyByZXF1aXJlcyB0aGF0IHRoZSBwYWNrZmlsZSBiZSBzZW50IGluIHNpZGViYW5kIDEsIGhlbmNlIHRoZSBleHRyYQorCSMgXHgwMSBieXRlIGF0IHRoZSBiZWdpbm5pbmcuCisJcmVwbGFjZV9wYWNrZmlsZSBpbmNvbXBsZXRlLnBhY2sgJiYKKworCSMgVXNlIHByb3RvY29sIHYyIGJlY2F1c2UgdGhlIHBlcmwgY29tbWFuZCBsb29rcyBmb3IgdGhlICJwYWNrZmlsZSIKKwkjIHNlY3Rpb24gaGVhZGVyLgorCXRlc3RfY29uZmlnIC1DICIkU0VSVkVSIiBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIGNsb25lIFwKKwkJLS1maWx0ZXI9YmxvYjpub25lICRIVFRQRF9VUkwvb25lX3RpbWVfcGVybC9zZXJ2ZXIgcmVwbyAyPmVyciAmJgorCisJdGVzdF9pMThuZ3JlcCAiZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIgZXJyICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBvbmUtdGltZS1wZXJsIHNjcmlwdCB3YXMgdXNlZC4KKwkhIHRlc3QgLWUgIiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGVybCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hlbiBwYXJ0aWFsIGNsb25pbmcsIHRvbGVyYXRlIHNlcnZlciBub3Qgc2VuZGluZyB0YXJnZXQgb2YgdGFnJyAnCisJU0VSVkVSPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NlcnZlciIgJiYKKwlybSAtcmYgIiRTRVJWRVIiIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkU0VSVkVSIiAmJgorCXRlc3RfY29tbWl0IC1DICIkU0VSVkVSIiBmb28gJiYKKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJdGVzdF9jb25maWcgLUMgIiRTRVJWRVIiIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKworCSMgQ3JlYXRlIGFuIGFubm90YXRlZCB0YWcgcG9pbnRpbmcgdG8gYSBibG9iLgorCUJMT0I9JChlY2hvIGJsb2ItY29udGVudHMgfCBnaXQgLUMgIiRTRVJWRVIiIGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJZ2l0IC1DICIkU0VSVkVSIiB0YWcgLW0gbWVzc2FnZSAtYSBteWJsb2IgIiRCTE9CIiAmJgorCisJIyBDcmFmdCBhIHBhY2tmaWxlIGluY2x1ZGluZyB0aGUgdGFnLCBidXQgbm90IHRoZSBibG9iIGl0IHBvaW50cyB0by4KKwkjIEFsc28sIG9taXQgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gSEVBRCBpbiBvcmRlciB0byBmb3JjZSBhIHNlY29uZAorCSMgZmV0Y2ggKHRvIGZldGNoIG1pc3Npbmcgb2JqZWN0cykgdXBvbiB0aGUgYXV0b21hdGljIGNoZWNrb3V0IHRoYXQKKwkjIGhhcHBlbnMgYWZ0ZXIgYSBjbG9uZS4KKwlwcmludGYgIiVzXG4lc1xuLS1ub3RcbiVzXG4lc1xuIiBcCisJCSQoZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgSEVBRCkgXAorCQkkKGdpdCAtQyAiJFNFUlZFUiIgcmV2LXBhcnNlIG15YmxvYikgXAorCQkkKGdpdCAtQyAiJFNFUlZFUiIgcmV2LXBhcnNlIEhFQURee3RyZWV9KSBcCisJCSQoZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgbXlibG9iXntibG9ifSkgfAorCQlnaXQgLUMgIiRTRVJWRVIiIHBhY2stb2JqZWN0cyAtLXRoaW4gLS1zdGRvdXQgPmluY29tcGxldGUucGFjayAmJgorCisJIyBSZXBsYWNlIHRoZSBleGlzdGluZyBwYWNrZmlsZSB3aXRoIHRoZSBjcmFmdGVkIG9uZS4gVGhlIHByb3RvY29sCisJIyByZXF1aXJlcyB0aGF0IHRoZSBwYWNrZmlsZSBiZSBzZW50IGluIHNpZGViYW5kIDEsIGhlbmNlIHRoZSBleHRyYQorCSMgXHgwMSBieXRlIGF0IHRoZSBiZWdpbm5pbmcuCisJcmVwbGFjZV9wYWNrZmlsZSBpbmNvbXBsZXRlLnBhY2sgJiYKKworCSMgVXNlIHByb3RvY29sIHYyIGJlY2F1c2UgdGhlIHBlcmwgY29tbWFuZCBsb29rcyBmb3IgdGhlICJwYWNrZmlsZSIKKwkjIHNlY3Rpb24gaGVhZGVyLgorCXRlc3RfY29uZmlnIC1DICIkU0VSVkVSIiBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKworCSMgRXhlcmNpc2UgdG8gbWFrZSBzdXJlIGl0IHdvcmtzLgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgY2xvbmUgXAorCQktLWZpbHRlcj1ibG9iOm5vbmUgJEhUVFBEX1VSTC9vbmVfdGltZV9wZXJsL3NlcnZlciByZXBvIDI+IGVyciAmJgorCSEgZ3JlcCAibWlzc2luZyBvYmplY3QgcmVmZXJlbmNlZCBieSIgZXJyICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBvbmUtdGltZS1wZXJsIHNjcmlwdCB3YXMgdXNlZC4KKwkhIHRlc3QgLWUgIiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGVybCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG9sZXJhdGUgc2VydmVyIHNlbmRpbmcgUkVGX0RFTFRBIGFnYWluc3QgbWlzc2luZyBwcm9taXNvciBvYmplY3RzJyAnCisJU0VSVkVSPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3NlcnZlciIgJiYKKwlybSAtcmYgIiRTRVJWRVIiIHJlcG8gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkU0VSVkVSIiAmJgorCXRlc3RfY29uZmlnIC1DICIkU0VSVkVSIiB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0X2NvbmZpZyAtQyAiJFNFUlZFUiIgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCisJIyBDcmVhdGUgYSBjb21taXQgd2l0aCAyIGJsb2JzIHRvIGJlIHVzZWQgYXMgZGVsdGEgYmFzZXMuCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxMCkKKwlkbworCQllY2hvICJ0aGlzIGlzIGEgbGluZSIgPj4iJFNFUlZFUi9mb28udHh0IiAmJgorCQllY2hvICJ0aGlzIGlzIGFub3RoZXIgbGluZSIgPj4iJFNFUlZFUi9oYXZlLnR4dCIKKwlkb25lICYmCisJZ2l0IC1DICIkU0VSVkVSIiBhZGQgZm9vLnR4dCBoYXZlLnR4dCAmJgorCWdpdCAtQyAiJFNFUlZFUiIgY29tbWl0IC1tIGJhciAmJgorCWdpdCAtQyAiJFNFUlZFUiIgcmV2LXBhcnNlIEhFQUQ6Zm9vLnR4dCA+ZGVsdGFiYXNlX21pc3NpbmcgJiYKKwlnaXQgLUMgIiRTRVJWRVIiIHJldi1wYXJzZSBIRUFEOmhhdmUudHh0ID5kZWx0YWJhc2VfaGF2ZSAmJgorCisJIyBDbG9uZS4gVGhlIGNsaWVudCBoYXMgZGVsdGFiYXNlX2hhdmUgYnV0IG5vdCBkZWx0YWJhc2VfbWlzc2luZy4KKwlnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIGNsb25lIC0tbm8tY2hlY2tvdXQgXAorCQktLWZpbHRlcj1ibG9iOm5vbmUgJEhUVFBEX1VSTC9vbmVfdGltZV9wZXJsL3NlcnZlciByZXBvICYmCisJZ2l0IC1DIHJlcG8gaGFzaC1vYmplY3QgLXcgLS0gIiRTRVJWRVIvaGF2ZS50eHQiICYmCisKKwkjIFNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGUgY2xpZW50IGRvZXMgbm90IGhhdmUKKwkjIGRlbHRhYmFzZV9taXNzaW5nLgorCWdpdCAtQyByZXBvIHJldi1saXN0IC0tb2JqZWN0cyAtLWlnbm9yZS1taXNzaW5nIFwKKwkJLS0gJChjYXQgZGVsdGFiYXNlX21pc3NpbmcpID5vYmpsaXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBvYmpsaXN0ICYmCisKKwkjIEFub3RoZXIgY29tbWl0LiBUaGlzIGNvbW1pdCB3aWxsIGJlIGZldGNoZWQgYnkgdGhlIGNsaWVudC4KKwllY2hvICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgPj4iJFNFUlZFUi9mb28udHh0IiAmJgorCWVjaG8gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiA+PiIkU0VSVkVSL2hhdmUudHh0IiAmJgorCWdpdCAtQyAiJFNFUlZFUiIgYWRkIGZvby50eHQgaGF2ZS50eHQgJiYKKwlnaXQgLUMgIiRTRVJWRVIiIGNvbW1pdCAtbSBiYXogJiYKKworCSMgUGFjayBhIHRoaW4gcGFjayBjb250YWluaW5nLCBhbW9uZyBvdGhlciB0aGluZ3MsIEhFQUQ6Zm9vLnR4dAorCSMgZGVsdGEtZWQgYWdhaW5zdCBIRUFEXjpmb28udHh0IGFuZCBIRUFEOmhhdmUudHh0IGRlbHRhLWVkIGFnYWluc3QKKwkjIEhFQUReOmhhdmUudHh0LgorCXByaW50ZiAiJXNcbi0tbm90XG4lc1xuIiBcCisJCSQoZ2l0IC1DICIkU0VSVkVSIiByZXYtcGFyc2UgSEVBRCkgXAorCQkkKGdpdCAtQyAiJFNFUlZFUiIgcmV2LXBhcnNlIEhFQUReKSB8CisJCWdpdCAtQyAiJFNFUlZFUiIgcGFjay1vYmplY3RzIC0tdGhpbiAtLXN0ZG91dCA+dGhpbi5wYWNrICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBwYWNrIGNvbnRhaW5zIG9uZSBkZWx0YSBhZ2FpbnN0IEhFQUReOmZvby50eHQuIFNpbmNlCisJIyB0aGUgZGVsdGEgY29udGFpbnMgYXQgbGVhc3QgMjYgbm92ZWwgY2hhcmFjdGVycywgdGhlIHNpemUgY2Fubm90IGJlCisJIyBjb250YWluZWQgaW4gNCBiaXRzLCBzbyB0aGUgb2JqZWN0IGhlYWRlciB3aWxsIHRha2UgdXAgMiBieXRlcy4gVGhlCisJIyBtb3N0IHNpZ25pZmljYW50IG55YmJsZSBvZiB0aGUgZmlyc3QgYnl0ZSBpcyAwYjExMTEgKDBiMSB0byBpbmRpY2F0ZQorCSMgdGhhdCB0aGUgaGVhZGVyIGNvbnRpbnVlcywgYW5kIDBiMTExIHRvIGluZGljYXRlIFJFRl9ERUxUQSksIGZvbGxvd2VkCisJIyBieSBhbnkgMyBueWJibGVzLCB0aGVuIHRoZSBPSUQgb2YgdGhlIGRlbHRhIGJhc2UuCisJcHJpbnRmICJmLiwuLiVzIiAkKGludGVyc3BlcnNlICIsIiA8ZGVsdGFiYXNlX21pc3NpbmcpID53YW50ICYmCisJaGV4X3VucGFjayA8dGhpbi5wYWNrIHwgaW50ZXJzcGVyc2UgIiwiID5oYXZlICYmCisJZ3JlcCAkKGNhdCB3YW50KSBoYXZlICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBwYWNrIGNvbnRhaW5zIG9uZSBkZWx0YSBhZ2FpbnN0IEhFQUReOmhhdmUudHh0LAorCSMgc2ltaWxhciB0byB0aGUgYWJvdmUuCisJcHJpbnRmICJmLiwuLiVzIiAkKGludGVyc3BlcnNlICIsIiA8ZGVsdGFiYXNlX2hhdmUpID53YW50ICYmCisJaGV4X3VucGFjayA8dGhpbi5wYWNrIHwgaW50ZXJzcGVyc2UgIiwiID5oYXZlICYmCisJZ3JlcCAkKGNhdCB3YW50KSBoYXZlICYmCisKKwlyZXBsYWNlX3BhY2tmaWxlIHRoaW4ucGFjayAmJgorCisJIyBVc2UgcHJvdG9jb2wgdjIgYmVjYXVzZSB0aGUgcGVybCBjb21tYW5kIGxvb2tzIGZvciB0aGUgInBhY2tmaWxlIgorCSMgc2VjdGlvbiBoZWFkZXIuCisJdGVzdF9jb25maWcgLUMgIiRTRVJWRVIiIHByb3RvY29sLnZlcnNpb24gMiAmJgorCisJIyBGZXRjaCB0aGUgdGhpbiBwYWNrIGFuZCBlbnN1cmUgdGhhdCBpbmRleC1wYWNrIGlzIGFibGUgdG8gaGFuZGxlIHRoZQorCSMgUkVGX0RFTFRBIG9iamVjdCB3aXRoIGEgbWlzc2luZyBwcm9taXNvciBkZWx0YSBiYXNlLgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIHJlcG8gLWMgcHJvdG9jb2wudmVyc2lvbj0yIGZldGNoICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBtaXNzaW5nIGRlbHRhIGJhc2Ugd2FzIGRpcmVjdGx5IGZldGNoZWQsIGJ1dCBub3QgdGhlCisJIyBvbmUgdGhhdCB0aGUgY2xpZW50IGhhcy4KKwlncmVwICJ3YW50ICQoY2F0IGRlbHRhYmFzZV9taXNzaW5nKSIgdHJhY2UgJiYKKwkhIGdyZXAgIndhbnQgJChjYXQgZGVsdGFiYXNlX2hhdmUpIiB0cmFjZSAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgb25lLXRpbWUtcGVybCBzY3JpcHQgd2FzIHVzZWQuCisJISB0ZXN0IC1lICIkSFRUUERfUk9PVF9QQVRIL29uZS10aW1lLXBlcmwiCisnCisKKyMgRE8gTk9UIGFkZCBub24taHR0cGQtc3BlY2lmaWMgdGVzdHMgaGVyZSwgYmVjYXVzZSB0aGUgbGFzdCBwYXJ0IG9mIHRoaXMKKyMgdGVzdCBzY3JpcHQgaXMgb25seSBleGVjdXRlZCB3aGVuIGh0dHBkIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjE3LWNsb25lLXN1Ym1vZHVsZXMtcmVtb3RlLnNoIGIvdC90NTYxNy1jbG9uZS1zdWJtb2R1bGVzLXJlbW90ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYTA0MWRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYxNy1jbG9uZS1zdWJtb2R1bGVzLXJlbW90ZS5zaApAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjbG9uaW5nIHJlcG9zIHdpdGggc3VibW9kdWxlcyB1c2luZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitwd2Q9JChwd2QpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGNvbW1pdDEgJiYKKwlta2RpciBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBzdWJjb21taXQxICYmCisJCWdpdCB0YWcgc3ViX3doZW5fYWRkZWRfdG9fc3VwZXIgJiYKKwkJZ2l0IGJyYW5jaCBvdGhlcgorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiZmlsZTovLyRwd2Qvc3ViIiBzdWIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCXRlc3RfY29tbWl0IHN1YmNvbW1pdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLS1uby1yZW1vdGUtc3VibW9kdWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyX2Nsb25lIiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLW5vLXJlbW90ZS1zdWJtb2R1bGVzICJmaWxlOi8vJHB3ZC8uIiBzdXBlcl9jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJfY2xvbmUvc3ViICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHN1Yl93aGVuX2FkZGVkX3RvX3N1cGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIC0tcmVtb3RlLXN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLS1yZW1vdGUtc3VibW9kdWxlcyAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lL3N1YiAmJgorCQlnaXQgZGlmZiAtLWV4aXQtY29kZSByZW1vdGVzL29yaWdpbi9tYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoZSBkZWZhdWx0IGlzIC0tbm8tcmVtb3RlLXN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgImZpbGU6Ly8kcHdkLy4iIHN1cGVyX2Nsb25lICYmCisJKAorCQljZCBzdXBlcl9jbG9uZS9zdWIgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc3ViX3doZW5fYWRkZWRfdG9fc3VwZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLS1zaW5nbGUtYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tc2luZ2xlLWJyYW5jaCAiZmlsZTovLyRwd2QvLiIgc3VwZXJfY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyX2Nsb25lL3N1YiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG9yaWdpbi9tYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvcmlnaW4vb3RoZXIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYxOC1hbHRlcm5hdGUtcmVmcy5zaCBiL3QvdDU2MTgtYWx0ZXJuYXRlLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzM1MzIxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MTgtYWx0ZXJuYXRlLXJlZnMuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgaGFuZGxpbmcgb2YgLS1hbHRlcm5hdGUtcmVmcyB0cmF2ZXJzYWwnCisuIC4vdGVzdC1saWIuc2gKKworIyBBdm9pZCB0ZXN0X2NvbW1pdCBiZWNhdXNlIHdlIHdhbnQgYSBzcGVjaWZpYyBhbmQga25vd24gc2V0IG9mIHJlZnM6CisjCisjICBiYXNlIC0tIG9uZQorIyAgICAgIFwgICAgICBcCisjICAgICAgIHR3byAtLSBtZXJnZWQKKyMKKyMgd2hlcmUgIm9uZSIgYW5kICJ0d28iIGFyZSBvbiBzZXBhcmF0ZSByZWZzLCBhbmQgIm1lcmdlZCIgaXMgYXZhaWxhYmxlIG9ubHkgaW4KKyMgdGhlIGRlcGVuZGVudCBjaGlsZCByZXBvc2l0b3J5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGxvY2FsIHJlZnMnICcKKwlnaXQgY2hlY2tvdXQgLWIgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGJhc2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIHR3byBIRUFEXiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28KKycKKworIyBXZSdsbCBlbnRlciB0aGUgY2hpbGQgcmVwb3NpdG9yeSBhZnRlciBpdCdzIHNldCB1cCBzaW5jZSB0aGF0J3Mgd2hlcmUKKyMgYWxsIG9mIHRoZSBzdWJzZXF1ZW50IHRlc3RzIHdpbGwgd2FudCB0byBydW4gKGFuZCBpdCdzIGVhc3kgdG8gZm9yZ2V0IGEKKyMgIi1DIGNoaWxkIiBhbmQgZ2V0IG5vbnNlbnNlIHJlc3VsdHMpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHNoYXJlZCBjbG9uZScgJworCWdpdCBjbG9uZSAtcyAuIGNoaWxkICYmCisJY2QgY2hpbGQgJiYKKwlnaXQgbWVyZ2Ugb3JpZ2luL29uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWFsdGVybmF0ZS1yZWZzJyAnCisJZ2l0IHJldi1saXN0IC0tcmVtb3Rlcz1vcmlnaW4gPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFsdGVybmF0ZS1yZWZzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tbm90IC0tYWx0ZXJuYXRlLXJlZnMnICcKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIC0tbm90IC0tYWx0ZXJuYXRlLXJlZnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGltaXRpbmcgd2l0aCBhbHRlcm5hdGVSZWZzUHJlZml4ZXMnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmFsdGVybmF0ZVJlZnNQcmVmaXhlcyByZWZzL2hlYWRzL29uZSAmJgorCWdpdCByZXYtbGlzdCBvcmlnaW4vb25lID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbHRlcm5hdGUtcmVmcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1zb3VyY2Ugc2hvd3MgLmFsdGVybmF0ZSBtYXJrZXInICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLXNvdXJjZSAtLXJlbW90ZXM9b3JpZ2luID5leHBlY3Qub3JpZyAmJgorCXNlZCAicy9vcmlnaW4uKiAvLmFsdGVybmF0ZSAvIiA8ZXhwZWN0Lm9yaWcgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tc291cmNlIC0tYWx0ZXJuYXRlLXJlZnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzAwLXByb3RvY29sLXYxLnNoIGIvdC90NTcwMC1wcm90b2NvbC12MS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMjI5MDFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwMC1wcm90b2NvbC12MS5zaApAQCAtMCwwICsxLDI5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHdpcmUtcHJvdG9jb2wgdHJhbnNpdGlvbicKKworVEVTVF9OT19DUkVBVEVfUkVQTz0xCisKKyMgVGhpcyBpcyBhIHByb3RvY29sLXNwZWNpZmljIHRlc3QuCitHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAKK2V4cG9ydCBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3QgcHJvdG9jb2wgdjEgd2l0aCAnZ2l0Oi8vJyB0cmFuc3BvcnQKKyMKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdpdC1kYWVtb24uc2gKK3N0YXJ0X2dpdF9kYWVtb24gLS1leHBvcnQtYWxsIC0tZW5hYmxlPXJlY2VpdmUtcGFjaworZGFlbW9uX3BhcmVudD0kR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcGFyZW50CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZXBvIHRvIGJlIHNlcnZlZCBieSBnaXQtZGFlbW9uJyAnCisJZ2l0IGluaXQgIiRkYWVtb25fcGFyZW50IiAmJgorCXRlc3RfY29tbWl0IC1DICIkZGFlbW9uX3BhcmVudCIgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZ2l0Oi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQljbG9uZSAiJEdJVF9EQUVNT05fVVJML3BhcmVudCIgZGFlbW9uX2NoaWxkIDI+bG9nICYmCisKKwlnaXQgLUMgZGFlbW9uX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DICIkZGFlbW9uX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYxCisJZ3JlcCAiY2xvbmU+IC4qXFxcMFxcXDB2ZXJzaW9uPTFcXFwwJCIgbG9nICYmCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAiY2xvbmU8IHZlcnNpb24gMSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggZ2l0Oi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJdGVzdF9jb21taXQgLUMgIiRkYWVtb25fcGFyZW50IiB0d28gJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLUMgZGFlbW9uX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCWZldGNoIDI+bG9nICYmCisKKwlnaXQgLUMgZGFlbW9uX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRkYWVtb25fcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgQ2xpZW50IHJlcXVlc3RlZCB0byB1c2UgcHJvdG9jb2wgdjEKKwlncmVwICJmZXRjaD4gLipcXFwwXFxcMHZlcnNpb249MVxcXDAkIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB3aXRoIGdpdDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLUMgZGFlbW9uX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCXB1bGwgMj5sb2cgJiYKKworCWdpdCAtQyBkYWVtb25fY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRkYWVtb25fcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgQ2xpZW50IHJlcXVlc3RlZCB0byB1c2UgcHJvdG9jb2wgdjEKKwlncmVwICJmZXRjaD4gLipcXFwwXFxcMHZlcnNpb249MVxcXDAkIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGdpdDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCXRlc3RfY29tbWl0IC1DIGRhZW1vbl9jaGlsZCB0aHJlZSAmJgorCisJIyBQdXNoIHRvIGFub3RoZXIgYnJhbmNoLCBhcyB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkgaGFzIHRoZQorCSMgbWFzdGVyIGJyYW5jaCBjaGVja2VkIG91dCBhbmQgd2UgY2Fubm90IHB1c2ggaW50byBpdC4KKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1DIGRhZW1vbl9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQlwdXNoIG9yaWdpbiBIRUFEOmNsaWVudF9icmFuY2ggMj5sb2cgJiYKKworCWdpdCAtQyBkYWVtb25fY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRkYWVtb25fcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgY2xpZW50X2JyYW5jaCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBDbGllbnQgcmVxdWVzdGVkIHRvIHVzZSBwcm90b2NvbCB2MQorCWdyZXAgInB1c2g+IC4qXFxcMFxcXDB2ZXJzaW9uPTFcXFwwJCIgbG9nICYmCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAicHVzaDwgdmVyc2lvbiAxIiBsb2cKKycKKworc3RvcF9naXRfZGFlbW9uCisKKyMgVGVzdCBwcm90b2NvbCB2MSB3aXRoICdmaWxlOi8vJyB0cmFuc3BvcnQKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZXBvIHRvIGJlIHNlcnZlZCBieSBmaWxlOi8vIHRyYW5zcG9ydCcgJworCWdpdCBpbml0IGZpbGVfcGFyZW50ICYmCisJdGVzdF9jb21taXQgLUMgZmlsZV9wYXJlbnQgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZmlsZTovLyB1c2luZyBwcm90b2NvbCB2MScgJworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJY2xvbmUgImZpbGU6Ly8kKHB3ZCkvZmlsZV9wYXJlbnQiIGZpbGVfY2hpbGQgMj5sb2cgJiYKKworCWdpdCAtQyBmaWxlX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DIGZpbGVfcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAiY2xvbmU8IHZlcnNpb24gMSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggZmlsZTovLyB1c2luZyBwcm90b2NvbCB2MScgJworCXRlc3RfY29tbWl0IC1DIGZpbGVfcGFyZW50IHR3byAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBmaWxlX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCWZldGNoIDI+bG9nICYmCisKKwlnaXQgLUMgZmlsZV9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IC1DIGZpbGVfcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgd2l0aCBmaWxlOi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBmaWxlX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCXB1bGwgMj5sb2cgJiYKKworCWdpdCAtQyBmaWxlX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DIGZpbGVfcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBmaWxlOi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJdGVzdF9jb21taXQgLUMgZmlsZV9jaGlsZCB0aHJlZSAmJgorCisJIyBQdXNoIHRvIGFub3RoZXIgYnJhbmNoLCBhcyB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkgaGFzIHRoZQorCSMgbWFzdGVyIGJyYW5jaCBjaGVja2VkIG91dCBhbmQgd2UgY2Fubm90IHB1c2ggaW50byBpdC4KKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1DIGZpbGVfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJcHVzaCBvcmlnaW4gSEVBRDpjbGllbnRfYnJhbmNoIDI+bG9nICYmCisKKwlnaXQgLUMgZmlsZV9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyBmaWxlX3BhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgY2xpZW50X2JyYW5jaCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAicHVzaDwgdmVyc2lvbiAxIiBsb2cKKycKKworIyBUZXN0IHByb3RvY29sIHYxIHdpdGggJ3NzaDovLycgdHJhbnNwb3J0CisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzc2ggd3JhcHBlcicgJworCUdJVF9TU0g9IiRHSVRfQlVJTERfRElSL3QvaGVscGVyL3Rlc3QtZmFrZS1zc2giICYmCisJZXhwb3J0IEdJVF9TU0ggJiYKKwlHSVRfU1NIX1ZBUklBTlQ9c3NoICYmCisJZXhwb3J0IEdJVF9TU0hfVkFSSUFOVCAmJgorCWV4cG9ydCBUUkFTSF9ESVJFQ1RPUlkgJiYKKwk+IiRUUkFTSF9ESVJFQ1RPUlkiL3NzaC1vdXRwdXQKKycKKworZXhwZWN0X3NzaCAoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkICcoY2QgIiRUUkFTSF9ESVJFQ1RPUlkiICYmIHJtIC1mIHNzaC1leHBlY3QgJiYgPnNzaC1vdXRwdXQpJyAmJgorCWVjaG8gInNzaDogLW8gU2VuZEVudj1HSVRfUFJPVE9DT0wgbXlob3N0ICQxICckUFdEL3NzaF9wYXJlbnQnIiA+IiRUUkFTSF9ESVJFQ1RPUlkvc3NoLWV4cGVjdCIgJiYKKwkoY2QgIiRUUkFTSF9ESVJFQ1RPUlkiICYmIHRlc3RfY21wIHNzaC1leHBlY3Qgc3NoLW91dHB1dCkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gdG8gYmUgc2VydmVkIGJ5IHNzaDovLyB0cmFuc3BvcnQnICcKKwlnaXQgaW5pdCBzc2hfcGFyZW50ICYmCisJdGVzdF9jb21taXQgLUMgc3NoX3BhcmVudCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBzc2g6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwlHSVRfVFJBQ0VfUEFDS0VUPTEgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCWNsb25lICJzc2g6Ly9teWhvc3Q6JChwd2QpL3NzaF9wYXJlbnQiIHNzaF9jaGlsZCAyPmxvZyAmJgorCWV4cGVjdF9zc2ggZ2l0LXVwbG9hZC1wYWNrICYmCisKKwlnaXQgLUMgc3NoX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DIHNzaF9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJjbG9uZTwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBzc2g6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwl0ZXN0X2NvbW1pdCAtQyBzc2hfcGFyZW50IHR3byAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBzc2hfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJZmV0Y2ggMj5sb2cgJiYKKwlleHBlY3Rfc3NoIGdpdC11cGxvYWQtcGFjayAmJgorCisJZ2l0IC1DIHNzaF9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IC1DIHNzaF9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB3aXRoIHNzaDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLUMgc3NoX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCXB1bGwgMj5sb2cgJiYKKwlleHBlY3Rfc3NoIGdpdC11cGxvYWQtcGFjayAmJgorCisJZ2l0IC1DIHNzaF9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyBzc2hfcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYxCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBzc2g6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwl0ZXN0X2NvbW1pdCAtQyBzc2hfY2hpbGQgdGhyZWUgJiYKKworCSMgUHVzaCB0byBhbm90aGVyIGJyYW5jaCwgYXMgdGhlIHRhcmdldCByZXBvc2l0b3J5IGhhcyB0aGUKKwkjIG1hc3RlciBicmFuY2ggY2hlY2tlZCBvdXQgYW5kIHdlIGNhbm5vdCBwdXNoIGludG8gaXQuCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBzc2hfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0xIFwKKwkJcHVzaCBvcmlnaW4gSEVBRDpjbGllbnRfYnJhbmNoIDI+bG9nICYmCisJZXhwZWN0X3NzaCBnaXQtcmVjZWl2ZS1wYWNrICYmCisKKwlnaXQgLUMgc3NoX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DIHNzaF9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzIGNsaWVudF9icmFuY2ggPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgInB1c2g8IHZlcnNpb24gMSIgbG9nCisnCisKKyMgVGVzdCBwcm90b2NvbCB2MSB3aXRoICdodHRwOi8vJyB0cmFuc3BvcnQKKyMKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVwbyB0byBiZSBzZXJ2ZWQgYnkgaHR0cDovLyB0cmFuc3BvcnQnICcKKwlnaXQgaW5pdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgJiYKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwl0ZXN0X2NvbW1pdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggaHR0cDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCUdJVF9UUkFDRV9QQUNLRVQ9MSBHSVRfVFJBQ0VfQ1VSTD0xIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQljbG9uZSAiJEhUVFBEX1VSTC9zbWFydC9odHRwX3BhcmVudCIgaHR0cF9jaGlsZCAyPmxvZyAmJgorCisJZ2l0IC1DIGh0dHBfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBDbGllbnQgcmVxdWVzdGVkIHRvIHVzZSBwcm90b2NvbCB2MQorCWdyZXAgIkdpdC1Qcm90b2NvbDogdmVyc2lvbj0xIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJnaXQ8IHZlcnNpb24gMSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggaHR0cDovLyB1c2luZyBwcm90b2NvbCB2MScgJworCXRlc3RfY29tbWl0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiB0d28gJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLUMgaHR0cF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQlmZXRjaCAyPmxvZyAmJgorCisJZ2l0IC1DIGh0dHBfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjEKKwlncmVwICJnaXQ8IHZlcnNpb24gMSIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgd2l0aCBodHRwOi8vIHVzaW5nIHByb3RvY29sIHYxJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0xIGdpdCAtQyBodHRwX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MSBcCisJCXB1bGwgMj5sb2cgJiYKKworCWdpdCAtQyBodHRwX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgImdpdDwgdmVyc2lvbiAxIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGh0dHA6Ly8gdXNpbmcgcHJvdG9jb2wgdjEnICcKKwl0ZXN0X2NvbW1pdCAtQyBodHRwX2NoaWxkIHRocmVlICYmCisKKwkjIFB1c2ggdG8gYW5vdGhlciBicmFuY2gsIGFzIHRoZSB0YXJnZXQgcmVwb3NpdG9yeSBoYXMgdGhlCisJIyBtYXN0ZXIgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCB3ZSBjYW5ub3QgcHVzaCBpbnRvIGl0LgorCUdJVF9UUkFDRV9QQUNLRVQ9MSBnaXQgLUMgaHR0cF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTEgXAorCQlwdXNoIG9yaWdpbiBIRUFEOmNsaWVudF9icmFuY2ggJiYgIzI+bG9nICYmCisKKwlnaXQgLUMgaHR0cF9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzIGNsaWVudF9icmFuY2ggPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MQorCWdyZXAgImdpdDwgdmVyc2lvbiAxIiBsb2cKKycKKworIyBETyBOT1QgYWRkIG5vbi1odHRwZC1zcGVjaWZpYyB0ZXN0cyBoZXJlLCBiZWNhdXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhpcworIyB0ZXN0IHNjcmlwdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaHR0cGQgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDEtZ2l0LXNlcnZlLnNoIGIvdC90NTcwMS1naXQtc2VydmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmZiOTYxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MDEtZ2l0LXNlcnZlLnNoCkBAIC0wLDAgKzEsMjE1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBwcm90b2NvbCB2MiBzZXJ2ZXIgY29tbWFuZHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNhcGFiaWxpdHkgYWR2ZXJ0aXNlbWVudCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXZlcnNpb24gMgorCWFnZW50PWdpdC8kKGdpdCB2ZXJzaW9uIHwgY3V0IC1kIiAiIC1mMykKKwlscy1yZWZzCisJZmV0Y2g9c2hhbGxvdworCXNlcnZlci1vcHRpb24KKwkwMDAwCisJRU9GCisKKwlHSVRfVEVTVF9TSURFQkFORF9BTEw9MCB0ZXN0LXRvb2wgc2VydmUtdjIgXAorCQktLWFkdmVydGlzZS1jYXBhYmlsaXRpZXMgPm91dCAmJgorCXRlc3QtdG9vbCBwa3QtbGluZSB1bnBhY2sgPG91dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0ZWxlc3MtcnBjIGZsYWcgZG9lcyBub3QgbGlzdCBjYXBhYmlsaXRpZXMnICcKKwkjIEVtcHR5IHJlcXVlc3QKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJMDAwMAorCUVPRgorCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPm91dCA8aW4gJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisKKwkjIEVPRgorCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdCBpbnZhbGlkIGNhcGFiaWxpdHknICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJZm9vYmFyCisJMDAwMAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgMj5lcnIgPGluICYmCisJdGVzdF9pMThuZ3JlcCAidW5rbm93biBjYXBhYmlsaXR5IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdCB3aXRoIG5vIGNvbW1hbmQnICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJYWdlbnQ9Z2l0L3Rlc3QKKwkwMDAwCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyAyPmVyciA8aW4gJiYKKwl0ZXN0X2kxOG5ncmVwICJubyBjb21tYW5kIHJlcXVlc3RlZCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVlc3QgaW52YWxpZCBjb21tYW5kJyAnCisJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgorCWNvbW1hbmQ9Zm9vCisJYWdlbnQ9Z2l0L3Rlc3QKKwkwMDAwCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyAyPmVyciA8aW4gJiYKKwl0ZXN0X2kxOG5ncmVwICJpbnZhbGlkIGNvbW1hbmQiIGVycgorJworCisjIFRlc3QgdGhlIGJhc2ljcyBvZiBscy1yZWZzCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzb21lIHJlZnMgYW5kIHRhZ3MnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlnaXQgYnJhbmNoIGRldiBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvcmVsZWFzZSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCB0YWcgLWEgLW0gImFubm90YXRlZCB0YWciIGFubm90YXRlZC10YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWNzIG9mIGxzLXJlZnMnICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1scy1yZWZzCisJMDAwMAorCUVPRgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9kZXYpIHJlZnMvaGVhZHMvZGV2CisJJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSByZWZzL2hlYWRzL21hc3RlcgorCSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL3JlbGVhc2UpIHJlZnMvaGVhZHMvcmVsZWFzZQorCSQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvYW5ub3RhdGVkLXRhZykgcmVmcy90YWdzL2Fubm90YXRlZC10YWcKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL29uZSkgcmVmcy90YWdzL29uZQorCSQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvdHdvKSByZWZzL3RhZ3MvdHdvCisJMDAwMAorCUVPRgorCisJdGVzdC10b29sIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyA8aW4gPm91dCAmJgorCXRlc3QtdG9vbCBwa3QtbGluZSB1bnBhY2sgPG91dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyByZWYtcHJlZml4ZXMnICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1scy1yZWZzCisJMDAwMQorCXJlZi1wcmVmaXggcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWYtcHJlZml4IHJlZnMvdGFncy9vbmUKKwkwMDAwCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpIHJlZnMvaGVhZHMvbWFzdGVyCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9vbmUpIHJlZnMvdGFncy9vbmUKKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDxpbiA+b3V0ICYmCisJdGVzdC10b29sIHBrdC1saW5lIHVucGFjayA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMvaGVhZHMgcHJlZml4JyAnCisJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgorCWNvbW1hbmQ9bHMtcmVmcworCTAwMDEKKwlyZWYtcHJlZml4IHJlZnMvaGVhZHMvCisJMDAwMAorCUVPRgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvZGV2KSByZWZzL2hlYWRzL2RldgorCSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgcmVmcy9oZWFkcy9tYXN0ZXIKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9yZWxlYXNlKSByZWZzL2hlYWRzL3JlbGVhc2UKKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDxpbiA+b3V0ICYmCisJdGVzdC10b29sIHBrdC1saW5lIHVucGFjayA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlZWwgcGFyYW1ldGVyJyAnCisJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgorCWNvbW1hbmQ9bHMtcmVmcworCTAwMDEKKwlwZWVsCisJcmVmLXByZWZpeCByZWZzL3RhZ3MvCisJMDAwMAorCUVPRgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnKSByZWZzL3RhZ3MvYW5ub3RhdGVkLXRhZyBwZWVsZWQ6JChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9hbm5vdGF0ZWQtdGFnXnt9KQorCSQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3Mvb25lKSByZWZzL3RhZ3Mvb25lCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy90d28pIHJlZnMvdGFncy90d28KKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDxpbiA+b3V0ICYmCisJdGVzdC10b29sIHBrdC1saW5lIHVucGFjayA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bXJlZnMgcGFyYW1ldGVyJyAnCisJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgorCWNvbW1hbmQ9bHMtcmVmcworCTAwMDEKKwlzeW1yZWZzCisJcmVmLXByZWZpeCByZWZzL2hlYWRzLworCTAwMDAKKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2RldikgcmVmcy9oZWFkcy9kZXYKKwkkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpIHJlZnMvaGVhZHMvbWFzdGVyCisJJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvcmVsZWFzZSkgcmVmcy9oZWFkcy9yZWxlYXNlIHN5bXJlZi10YXJnZXQ6cmVmcy9oZWFkcy9tYXN0ZXIKKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDxpbiA+b3V0ICYmCisJdGVzdC10b29sIHBrdC1saW5lIHVucGFjayA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmRpbmcgc2VydmVyLW9wdGlvbnMnICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1scy1yZWZzCisJc2VydmVyLW9wdGlvbj1oZWxsbworCXNlcnZlci1vcHRpb249d29ybGQKKwkwMDAxCisJcmVmLXByZWZpeCBIRUFECisJMDAwMAorCUVPRgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQKKwkwMDAwCisJRU9GCisKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1zdGF0ZWxlc3MtcnBjIDxpbiA+b3V0ICYmCisJdGVzdC10b29sIHBrdC1saW5lIHVucGFjayA8b3V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuZXhwZWN0ZWQgbGluZXMgYXJlIG5vdCBhbGxvd2VkIGluIGZldGNoIHJlcXVlc3QnICcKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKworCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwljb21tYW5kPWZldGNoCisJMDAwMQorCXRoaXMtaXMtbm90LWEtY29tbWFuZAorCTAwMDAKKwlFT0YKKworCSgKKwkJY2Qgc2VydmVyICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMKKwkpIDxpbiA+L2Rldi9udWxsIDI+ZXJyICYmCisJZ3JlcCAidW5leHBlY3RlZCBsaW5lOiAudGhpcy1pcy1ub3QtYS1jb21tYW5kLiIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwMi1wcm90b2NvbC12Mi5zaCBiL3QvdDU3MDItcHJvdG9jb2wtdjIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTAzOWU2NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MDItcHJvdG9jb2wtdjIuc2gKQEAgLTAsMCArMSw3NTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCB3aXJlLXByb3RvY29sIHZlcnNpb24gMicKKworVEVTVF9OT19DUkVBVEVfUkVQTz0xCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3QgcHJvdG9jb2wgdjIgd2l0aCAnZ2l0Oi8vJyB0cmFuc3BvcnQKKyMKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdpdC1kYWVtb24uc2gKK3N0YXJ0X2dpdF9kYWVtb24gLS1leHBvcnQtYWxsIC0tZW5hYmxlPXJlY2VpdmUtcGFjaworZGFlbW9uX3BhcmVudD0kR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcGFyZW50CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZXBvIHRvIGJlIHNlcnZlZCBieSBnaXQtZGFlbW9uJyAnCisJZ2l0IGluaXQgIiRkYWVtb25fcGFyZW50IiAmJgorCXRlc3RfY29tbWl0IC1DICIkZGFlbW9uX3BhcmVudCIgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3QgcmVmcyB3aXRoIGdpdDovLyB1c2luZyBwcm90b2NvbCB2MicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWxzLXJlbW90ZSAtLXN5bXJlZiAiJEdJVF9EQUVNT05fVVJML3BhcmVudCIgPmFjdHVhbCAmJgorCisJIyBDbGllbnQgcmVxdWVzdGVkIHRvIHVzZSBwcm90b2NvbCB2MgorCWdyZXAgImdpdD4gLipcXFwwXFxcMHZlcnNpb249MlxcXDAkIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjIKKwlncmVwICJnaXQ8IHZlcnNpb24gMiIgbG9nICYmCisKKwlnaXQgbHMtcmVtb3RlIC0tc3ltcmVmICIkR0lUX0RBRU1PTl9VUkwvcGFyZW50IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNlbWVudCBpcyBmaWx0ZXJlZCB3aXRoIGxzLXJlbW90ZSB1c2luZyBwcm90b2NvbCB2MicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWxzLXJlbW90ZSAiJEdJVF9EQUVNT05fVVJML3BhcmVudCIgbWFzdGVyID5hY3R1YWwgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoZ2l0IC1DICIkZGFlbW9uX3BhcmVudCIgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSQocHJpbnRmICJcdCIpcmVmcy9oZWFkcy9tYXN0ZXIKKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBnaXQ6Ly8gdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQljbG9uZSAiJEdJVF9EQUVNT05fVVJML3BhcmVudCIgZGFlbW9uX2NoaWxkICYmCisKKwlnaXQgLUMgZGFlbW9uX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DICIkZGFlbW9uX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYyCisJZ3JlcCAiY2xvbmU+IC4qXFxcMFxcXDB2ZXJzaW9uPTJcXFwwJCIgbG9nICYmCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiY2xvbmU8IHZlcnNpb24gMiIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggZ2l0Oi8vIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwl0ZXN0X2NvbW1pdCAtQyAiJGRhZW1vbl9wYXJlbnQiIHR3byAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGRhZW1vbl9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCAmJgorCisJZ2l0IC1DIGRhZW1vbl9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IC1DICIkZGFlbW9uX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYyCisJZ3JlcCAiZmV0Y2g+IC4qXFxcMFxcXDB2ZXJzaW9uPTJcXFwwJCIgbG9nICYmCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGJ5IGhhc2ggd2l0aG91dCB0YWcgZm9sbG93aW5nIHdpdGggcHJvdG9jb2wgdjIgZG9lcyBub3QgbGlzdCByZWZzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwl0ZXN0X2NvbW1pdCAtQyAiJGRhZW1vbl9wYXJlbnQiIHR3b19hICYmCisJZ2l0IC1DICIkZGFlbW9uX3BhcmVudCIgcmV2LXBhcnNlIHR3b19hID50d29fYV9oYXNoICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgZGFlbW9uX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoIC0tbm8tdGFncyBvcmlnaW4gJChjYXQgdHdvX2FfaGFzaCkgJiYKKworCWdyZXAgImZldGNoPCB2ZXJzaW9uIDIiIGxvZyAmJgorCSEgZ3JlcCAiZmV0Y2g+IGNvbW1hbmQ9bHMtcmVmcyIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgd2l0aCBnaXQ6Ly8gdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBkYWVtb25fY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJcHVsbCAmJgorCisJZ2l0IC1DIGRhZW1vbl9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyAiJGRhZW1vbl9wYXJlbnQiIGxvZyAtMSAtLWZvcm1hdD0lcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBDbGllbnQgcmVxdWVzdGVkIHRvIHVzZSBwcm90b2NvbCB2MgorCWdyZXAgImZldGNoPiAuKlxcXDBcXFwwdmVyc2lvbj0yXFxcMCQiIGxvZyAmJgorCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MgorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDIiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggZ2l0Oi8vIGFuZCBhIGNvbmZpZyBvZiB2MiBkb2VzIG5vdCByZXF1ZXN0IHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwkjIFRpbGwgdjIgZm9yIHB1c2ggaXMgZGVzaWduZWQsIG1ha2Ugc3VyZSB0aGF0IGlmIGEgY2xpZW50IGhhcworCSMgcHJvdG9jb2wudmVyc2lvbiBjb25maWd1cmVkIHRvIHVzZSB2MiwgdGhhdCB0aGUgY2xpZW50IGluc3RlYWQgZmFsbHMKKwkjIGJhY2sgYW5kIHVzZXMgdjAuCisKKwl0ZXN0X2NvbW1pdCAtQyBkYWVtb25fY2hpbGQgdGhyZWUgJiYKKworCSMgUHVzaCB0byBhbm90aGVyIGJyYW5jaCwgYXMgdGhlIHRhcmdldCByZXBvc2l0b3J5IGhhcyB0aGUKKwkjIG1hc3RlciBicmFuY2ggY2hlY2tlZCBvdXQgYW5kIHdlIGNhbm5vdCBwdXNoIGludG8gaXQuCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGRhZW1vbl9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlwdXNoIG9yaWdpbiBIRUFEOmNsaWVudF9icmFuY2ggJiYKKworCWdpdCAtQyBkYWVtb25fY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwlnaXQgLUMgIiRkYWVtb25fcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgY2xpZW50X2JyYW5jaCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBDbGllbnQgcmVxdWVzdGVkIHRvIHVzZSBwcm90b2NvbCB2MgorCSEgZ3JlcCAicHVzaD4gLipcXFwwXFxcMHZlcnNpb249MlxcXDAkIiBsb2cgJiYKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjIKKwkhIGdyZXAgInB1c2g8IHZlcnNpb24gMiIgbG9nCisnCisKK3N0b3BfZ2l0X2RhZW1vbgorCisjIFRlc3QgcHJvdG9jb2wgdjIgd2l0aCAnZmlsZTovLycgdHJhbnNwb3J0CisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVwbyB0byBiZSBzZXJ2ZWQgYnkgZmlsZTovLyB0cmFuc3BvcnQnICcKKwlnaXQgaW5pdCBmaWxlX3BhcmVudCAmJgorCXRlc3RfY29tbWl0IC1DIGZpbGVfcGFyZW50IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IHJlZnMgd2l0aCBmaWxlOi8vIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJbHMtcmVtb3RlIC0tc3ltcmVmICJmaWxlOi8vJChwd2QpL2ZpbGVfcGFyZW50IiA+YWN0dWFsICYmCisKKwkjIFNlcnZlciByZXNwb25kZWQgdXNpbmcgcHJvdG9jb2wgdjIKKwlncmVwICJnaXQ8IHZlcnNpb24gMiIgbG9nICYmCisKKwlnaXQgbHMtcmVtb3RlIC0tc3ltcmVmICJmaWxlOi8vJChwd2QpL2ZpbGVfcGFyZW50IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNlbWVudCBpcyBmaWx0ZXJlZCB3aXRoIGxzLXJlbW90ZSB1c2luZyBwcm90b2NvbCB2MicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWxzLXJlbW90ZSAiZmlsZTovLyQocHdkKS9maWxlX3BhcmVudCIgbWFzdGVyID5hY3R1YWwgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoZ2l0IC1DIGZpbGVfcGFyZW50IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikkKHByaW50ZiAiXHQiKXJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlci1vcHRpb25zIGFyZSBzZW50IHdoZW4gdXNpbmcgbHMtcmVtb3RlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJbHMtcmVtb3RlIC1vIGhlbGxvIC1vIHdvcmxkICJmaWxlOi8vJChwd2QpL2ZpbGVfcGFyZW50IiBtYXN0ZXIgPmFjdHVhbCAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJChnaXQgLUMgZmlsZV9wYXJlbnQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKSQocHJpbnRmICJcdCIpcmVmcy9oZWFkcy9tYXN0ZXIKKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlncmVwICJzZXJ2ZXItb3B0aW9uPWhlbGxvIiBsb2cgJiYKKwlncmVwICJzZXJ2ZXItb3B0aW9uPXdvcmxkIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBpZiB1c2luZyBzZXJ2ZXItb3B0aW9uIHdpdGggbHMtcmVtb3RlIHdpdGggbGVnYWN5IHByb3RvY29sJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0wIFwKKwkJbHMtcmVtb3RlIC1vIGhlbGxvIC1vIHdvcmxkICJmaWxlOi8vJChwd2QpL2ZpbGVfcGFyZW50IiBtYXN0ZXIgMj5lcnIgJiYKKworCXRlc3RfaTE4bmdyZXAgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZmlsZTovLyB1c2luZyBwcm90b2NvbCB2MicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWNsb25lICJmaWxlOi8vJChwd2QpL2ZpbGVfcGFyZW50IiBmaWxlX2NoaWxkICYmCisKKwlnaXQgLUMgZmlsZV9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyBmaWxlX3BhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MgorCWdyZXAgImNsb25lPCB2ZXJzaW9uIDIiIGxvZyAmJgorCisJIyBDbGllbnQgc2VudCByZWYtcHJlZml4ZXMgdG8gZmlsdGVyIHRoZSByZWYtYWR2ZXJ0aXNlbWVudAorCWdyZXAgInJlZi1wcmVmaXggSEVBRCIgbG9nICYmCisJZ3JlcCAicmVmLXByZWZpeCByZWZzL2hlYWRzLyIgbG9nICYmCisJZ3JlcCAicmVmLXByZWZpeCByZWZzL3RhZ3MvIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBmaWxlOi8vIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwl0ZXN0X2NvbW1pdCAtQyBmaWxlX3BhcmVudCB0d28gJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBmaWxlX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoIG9yaWdpbiAmJgorCisJZ2l0IC1DIGZpbGVfY2hpbGQgbG9nIC0xIC0tZm9ybWF0PSVzIG9yaWdpbi9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCAtQyBmaWxlX3BhcmVudCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MgorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDIiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNlbWVudCBpcyBmaWx0ZXJlZCBkdXJpbmcgZmV0Y2ggdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXRlc3RfY29tbWl0IC1DIGZpbGVfcGFyZW50IHRocmVlICYmCisJZ2l0IC1DIGZpbGVfcGFyZW50IGJyYW5jaCB1bndhbnRlZC1icmFuY2ggdGhyZWUgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBmaWxlX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoIG9yaWdpbiBtYXN0ZXIgJiYKKworCWdpdCAtQyBmaWxlX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgLUMgZmlsZV9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlncmVwICJyZWZzL2hlYWRzL21hc3RlciIgbG9nICYmCisJISBncmVwICJyZWZzL2hlYWRzL3Vud2FudGVkLWJyYW5jaCIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlci1vcHRpb25zIGFyZSBzZW50IHdoZW4gZmV0Y2hpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXRlc3RfY29tbWl0IC1DIGZpbGVfcGFyZW50IGZvdXIgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBmaWxlX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoIC1vIGhlbGxvIC1vIHdvcmxkIG9yaWdpbiBtYXN0ZXIgJiYKKworCWdpdCAtQyBmaWxlX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgLUMgZmlsZV9wYXJlbnQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlncmVwICJzZXJ2ZXItb3B0aW9uPWhlbGxvIiBsb2cgJiYKKwlncmVwICJzZXJ2ZXItb3B0aW9uPXdvcmxkIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBpZiB1c2luZyBzZXJ2ZXItb3B0aW9uIHdpdGggZmV0Y2ggd2l0aCBsZWdhY3kgcHJvdG9jb2wnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0ZW1wX2NoaWxkIiAmJgorCisJZ2l0IGluaXQgdGVtcF9jaGlsZCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX1BST1RPQ09MX1ZFUlNJT049MCBnaXQgLUMgdGVtcF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTAgXAorCQlmZXRjaCAtbyBoZWxsbyAtbyB3b3JsZCAiZmlsZTovLyQocHdkKS9maWxlX3BhcmVudCIgbWFzdGVyIDI+ZXJyICYmCisKKwl0ZXN0X2kxOG5ncmVwICJzZWUgcHJvdG9jb2wudmVyc2lvbiBpbiIgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAic2VydmVyIG9wdGlvbnMgcmVxdWlyZSBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgbGF0ZXIiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXJ2ZXItb3B0aW9ucyBhcmUgc2VudCB3aGVuIGNsb25pbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBsb2cgbXljbG9uZSIgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQljbG9uZSAtLXNlcnZlci1vcHRpb249aGVsbG8gLS1zZXJ2ZXItb3B0aW9uPXdvcmxkIFwKKwkJImZpbGU6Ly8kKHB3ZCkvZmlsZV9wYXJlbnQiIG15Y2xvbmUgJiYKKworCWdyZXAgInNlcnZlci1vcHRpb249aGVsbG8iIGxvZyAmJgorCWdyZXAgInNlcnZlci1vcHRpb249d29ybGQiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YXJuIGlmIHVzaW5nIHNlcnZlci1vcHRpb24gd2l0aCBjbG9uZSB3aXRoIGxlZ2FjeSBwcm90b2NvbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG15Y2xvbmUiICYmCisKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RFU1RfUFJPVE9DT0xfVkVSU0lPTj0wIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTAgXAorCQljbG9uZSAtLXNlcnZlci1vcHRpb249aGVsbG8gLS1zZXJ2ZXItb3B0aW9uPXdvcmxkIFwKKwkJImZpbGU6Ly8kKHB3ZCkvZmlsZV9wYXJlbnQiIG15Y2xvbmUgMj5lcnIgJiYKKworCXRlc3RfaTE4bmdyZXAgInNlZSBwcm90b2NvbC52ZXJzaW9uIGluIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzZXJ2ZXIgb3B0aW9ucyByZXF1aXJlIHByb3RvY29sIHZlcnNpb24gMiBvciBsYXRlciIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIHJlc3BlY3RzIGNvbmZpZyB1c2luZyBwcm90b2NvbCB2MicgJworCWdpdCBpbml0IHNlcnZlciAmJgorCXdyaXRlX3NjcmlwdCBzZXJ2ZXIvLmdpdC9ob29rIDw8LVxFT0YgJiYKKwkJdG91Y2ggaG9va291dAorCQkiJEAiCisJRU9GCisJdGVzdF9jb21taXQgLUMgc2VydmVyIG9uZSAmJgorCisJdGVzdF9jb25maWdfZ2xvYmFsIHVwbG9hZHBhY2sucGFja29iamVjdHNob29rIC4vaG9vayAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHNlcnZlci8uZ2l0L2hvb2tvdXQgJiYKKwlnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIGNsb25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc2VydmVyLy5naXQvaG9va291dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmaWx0ZXIgdGVzdHMnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCAmJgorCWdpdCBpbml0IHNlcnZlciAmJgorCisJIyAxIGNvbW1pdCB0byBjcmVhdGUgYSBmaWxlLCBhbmQgMSBjb21taXQgdG8gbW9kaWZ5IGl0CisJdGVzdF9jb21taXQgLUMgc2VydmVyIG1lc3NhZ2UxIGEudHh0ICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIG1lc3NhZ2UyIGEudHh0ICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgcHJvdG9jb2wudmVyc2lvbiAyICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAxICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2FueXNoYTFpbndhbnQgMSAmJgorCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHByb3RvY29sLnZlcnNpb24gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNsb25lJyAnCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJY2xvbmUgLS1maWx0ZXI9YmxvYjpub25lICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisJZ3JlcCAidmVyc2lvbiAyIiB0cmFjZSAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgb2xkIHZlcnNpb24gb2YgdGhlIGZpbGUgaXMgbWlzc2luZworCWdpdCAtQyBjbGllbnQgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1taXNzaW5nPXByaW50IG1hc3RlciBcCisJCT5vYnNlcnZlZC5vaWRzICYmCisJZ3JlcCAiJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBtZXNzYWdlMTphLnR4dCkiIG9ic2VydmVkLm9pZHMgJiYKKworCSMgRW5zdXJlIHRoYXQgY2xpZW50IHBhc3NlcyBmc2NrCisJZ2l0IC1DIGNsaWVudCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2R5bmFtaWNhbGx5IGZldGNoIG1pc3Npbmcgb2JqZWN0JyAnCisJcm0gIiQocHdkKS90cmFjZSIgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJY2F0LWZpbGUgLXAgJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBtZXNzYWdlMTphLnR4dCkgJiYKKwlncmVwICJ2ZXJzaW9uIDIiIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4gZHluYW1pY2FsbHkgZmV0Y2hpbmcgbWlzc2luZyBvYmplY3QsIGRvIG5vdCBsaXN0IHJlZnMnICcKKwkhIGdyZXAgImdpdD4gY29tbWFuZD1scy1yZWZzIiB0cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGZldGNoJyAnCisJcm0gLXJmIGNsaWVudCAiJChwd2QpL3RyYWNlIiAmJgorCWdpdCBpbml0IGNsaWVudCAmJgorCVNFUlZFUj0iZmlsZTovLyQocHdkKS9zZXJ2ZXIiICYmCisJdGVzdF9jb25maWcgLUMgY2xpZW50IGV4dGVuc2lvbnMucGFydGlhbENsb25lICIkU0VSVkVSIiAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoIC0tZmlsdGVyPWJsb2I6bm9uZSAiJFNFUlZFUiIgbWFzdGVyOnJlZnMvaGVhZHMvb3RoZXIgJiYKKwlncmVwICJ2ZXJzaW9uIDIiIHRyYWNlICYmCisKKwkjIEVuc3VyZSB0aGF0IHRoZSBvbGQgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyBtaXNzaW5nCisJZ2l0IC1DIGNsaWVudCByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgb3RoZXIgXAorCQk+b2JzZXJ2ZWQub2lkcyAmJgorCWdyZXAgIiQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgbWVzc2FnZTE6YS50eHQpIiBvYnNlcnZlZC5vaWRzICYmCisKKwkjIEVuc3VyZSB0aGF0IGNsaWVudCBwYXNzZXMgZnNjaworCWdpdCAtQyBjbGllbnQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgYWR2ZXJ0aXNlIGZpbHRlciBpZiBub3QgY29uZmlndXJlZCB0byBkbyBzbycgJworCVNFUlZFUj0iZmlsZTovLyQocHdkKS9zZXJ2ZXIiICYmCisKKwlybSAiJChwd2QpL3RyYWNlIiAmJgorCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWxzLXJlbW90ZSAiJFNFUlZFUiIgJiYKKwlncmVwICJmZXRjaD0uKmZpbHRlciIgdHJhY2UgJiYKKworCXJtICIkKHB3ZCkvdHJhY2UiICYmCisJZ2l0IC1DIHNlcnZlciBjb25maWcgdXBsb2FkcGFjay5hbGxvd2ZpbHRlciAwICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJbHMtcmVtb3RlICIkU0VSVkVSIiAmJgorCWdyZXAgImZldGNoPSIgdHJhY2UgPmZldGNoX2NhcGFiaWxpdGllcyAmJgorCSEgZ3JlcCBmaWx0ZXIgZmV0Y2hfY2FwYWJpbGl0aWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY2xvbmUgd2FybnMgaWYgZmlsdGVyIGlzIG5vdCBhZHZlcnRpc2VkJyAnCisJcm0gLXJmIGNsaWVudCAmJgorCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMCAmJgorCWdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQljbG9uZSAtLWZpbHRlcj1ibG9iOm5vbmUgImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJmaWx0ZXJpbmcgbm90IHJlY29nbml6ZWQgYnkgc2VydmVyLCBpZ25vcmluZyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V2ZW4gd2l0aCBoYW5kY3JhZnRlZCByZXF1ZXN0LCBmaWx0ZXIgZG9lcyBub3Qgd29yayBpZiBub3QgYWR2ZXJ0aXNlZCcgJworCWdpdCAtQyBzZXJ2ZXIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMCAmJgorCisJIyBDdXN0b20gcmVxdWVzdCB0aGF0IHRyaWVzIHRvIGZpbHRlciBldmVuIHRob3VnaCBpdCBpcyBub3QgYWR2ZXJ0aXNlZC4KKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1mZXRjaAorCTAwMDEKKwl3YW50ICQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgbWFzdGVyKQorCWZpbHRlciBibG9iOm5vbmUKKwkwMDAwCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgLUMgc2VydmVyIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyBcCisJCTxpbiA+L2Rldi9udWxsIDI+ZXJyICYmCisJZ3JlcCAidW5leHBlY3RlZCBsaW5lOiAuZmlsdGVyIGJsb2I6bm9uZS4iIGVyciAmJgorCisJIyBFeGVyY2lzZSB0byBlbnN1cmUgdGhhdCBpZiBhZHZlcnRpc2VkLCBmaWx0ZXIgd29ya3MKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwl0ZXN0LXRvb2wgLUMgc2VydmVyIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyA8aW4gPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHJlZnNwZWMgaXMgdXNlZCB0byBmaWx0ZXIgcmVmIHdoZW4gZmV0Y2hjaW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgZmlsZV9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCBvcmlnaW4gJiYKKworCWdpdCAtQyBmaWxlX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyB0aHJlZSA+YWN0dWFsICYmCisJZ2l0IC1DIGZpbGVfcGFyZW50IGxvZyAtMSAtLWZvcm1hdD0lcyB0aHJlZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ3JlcCAicmVmLXByZWZpeCByZWZzL2hlYWRzLyIgbG9nICYmCisJZ3JlcCAicmVmLXByZWZpeCByZWZzL3RhZ3MvIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggc3VwcG9ydHMgdmFyaW91cyB3YXlzIG9mIGhhdmUgbGluZXMnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSAmJgorCWdpdCBpbml0IHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBkd2ltICYmCisJVFJFRT0kKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCWdpdCAtQyBzZXJ2ZXIgdGFnIGV4YWN0IFwKKwkJJChnaXQgLUMgc2VydmVyIGNvbW1pdC10cmVlIC1tIGEgIiRUUkVFIikgJiYKKwlnaXQgLUMgc2VydmVyIHRhZyBkd2ltLXVud2FudGVkIFwKKwkJJChnaXQgLUMgc2VydmVyIGNvbW1pdC10cmVlIC1tIGIgIiRUUkVFIikgJiYKKwlnaXQgLUMgc2VydmVyIHRhZyBleGFjdC11bndhbnRlZCBcCisJCSQoZ2l0IC1DIHNlcnZlciBjb21taXQtdHJlZSAtbSBjICIkVFJFRSIpICYmCisJZ2l0IC1DIHNlcnZlciB0YWcgcHJlZml4MSBcCisJCSQoZ2l0IC1DIHNlcnZlciBjb21taXQtdHJlZSAtbSBkICIkVFJFRSIpICYmCisJZ2l0IC1DIHNlcnZlciB0YWcgcHJlZml4MiBcCisJCSQoZ2l0IC1DIHNlcnZlciBjb21taXQtdHJlZSAtbSBlICIkVFJFRSIpICYmCisJZ2l0IC1DIHNlcnZlciB0YWcgZmV0Y2gtYnktc2hhMSBcCisJCSQoZ2l0IC1DIHNlcnZlciBjb21taXQtdHJlZSAtbSBmICIkVFJFRSIpICYmCisJZ2l0IC1DIHNlcnZlciB0YWcgY29tcGxldGVseS11bnJlbGF0ZWQgXAorCQkkKGdpdCAtQyBzZXJ2ZXIgY29tbWl0LXRyZWUgLW0gZyAiJFRSRUUiKSAmJgorCisJZ2l0IGluaXQgY2xpZW50ICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoICJmaWxlOi8vJChwd2QpL3NlcnZlciIgXAorCQlkd2ltIFwKKwkJcmVmcy90YWdzL2V4YWN0IFwKKwkJcmVmcy90YWdzL3ByZWZpeCo6cmVmcy90YWdzL3ByZWZpeCogXAorCQkiJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBmZXRjaC1ieS1zaGExKSIgJiYKKworCSMgRW5zdXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHByZWZpeGVzIGFyZSBzZW50ICh1c2luZyBhIHNhbXBsZSkKKwlncmVwICJmZXRjaD4gcmVmLXByZWZpeCBkd2ltIiB0cmFjZSAmJgorCWdyZXAgImZldGNoPiByZWYtcHJlZml4IHJlZnMvaGVhZHMvZHdpbSIgdHJhY2UgJiYKKwlncmVwICJmZXRjaD4gcmVmLXByZWZpeCByZWZzL3RhZ3MvcHJlZml4IiB0cmFjZSAmJgorCisJIyBFbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBvYmplY3RzIGFyZSByZXR1cm5lZAorCWdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBkd2ltKSAmJgorCWdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBleGFjdCkgJiYKKwlnaXQgLUMgY2xpZW50IGNhdC1maWxlIC1lICQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgcHJlZml4MSkgJiYKKwlnaXQgLUMgY2xpZW50IGNhdC1maWxlIC1lICQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgcHJlZml4MikgJiYKKwlnaXQgLUMgY2xpZW50IGNhdC1maWxlIC1lICQoZ2l0IC1DIHNlcnZlciByZXYtcGFyc2UgZmV0Y2gtYnktc2hhMSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgY2xpZW50IGNhdC1maWxlIC1lIFwKKwkJJChnaXQgLUMgc2VydmVyIHJldi1wYXJzZSBkd2ltLXVud2FudGVkKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgXAorCQkkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIGV4YWN0LXVud2FudGVkKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBjbGllbnQgY2F0LWZpbGUgLWUgXAorCQkkKGdpdCAtQyBzZXJ2ZXIgcmV2LXBhcnNlIGNvbXBsZXRlbHktdW5yZWxhdGVkKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBzdXBwb3J0cyBpbmNsdWRlLXRhZyBhbmQgdGFnIGZvbGxvd2luZycgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlICYmCisJZ2l0IGluaXQgc2VydmVyICYmCisKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgdG9fZmV0Y2ggJiYKKwlnaXQgLUMgc2VydmVyIHRhZyAtYSBhbm5vdGF0ZWRfdGFnIC1tIG1lc3NhZ2UgJiYKKworCWdpdCBpbml0IGNsaWVudCAmJgorCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS90cmFjZSIgZ2l0IC1DIGNsaWVudCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCAiJChwd2QpL3NlcnZlciIgdG9fZmV0Y2g6dG9fZmV0Y2ggJiYKKworCWdyZXAgImZldGNoPiByZWYtcHJlZml4IHRvX2ZldGNoIiB0cmFjZSAmJgorCWdyZXAgImZldGNoPiByZWYtcHJlZml4IHJlZnMvdGFncy8iIHRyYWNlICYmCisJZ3JlcCAiZmV0Y2g+IGluY2x1ZGUtdGFnIiB0cmFjZSAmJgorCisJZ2l0IC1DIGNsaWVudCBjYXQtZmlsZSAtZSAkKGdpdCAtQyBjbGllbnQgcmV2LXBhcnNlIGFubm90YXRlZF90YWcpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIHJlc3BlY3RzIGNsaWVudCBzaGFsbG93cycgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlICYmCisKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgYmFzZSAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBjbGllbnRfaGFzICYmCisKKwlnaXQgY2xvbmUgLS1kZXB0aD0xICJmaWxlOi8vJChwd2QpL3NlcnZlciIgY2xpZW50ICYmCisKKwkjIEFkZCBleHRyYSBjb21taXRzIHRvIHRoZSBjbGllbnQgc28gdGhhdCB0aGUgd2hvbGUgZmV0Y2ggdGFrZXMgbW9yZQorCSMgdGhhbiAxIHJlcXVlc3QgKGR1ZSB0byBuZWdvdGlhdGlvbikKKwl0ZXN0X2NvbW1pdF9idWxrIC1DIGNsaWVudCAtLWlkPWMgMzIgJiYKKworCWdpdCAtQyBzZXJ2ZXIgY2hlY2tvdXQgLWIgbmV3YnJhbmNoIGJhc2UgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgY2xpZW50X3dhbnRzICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggb3JpZ2luIG5ld2JyYW5jaCAmJgorCSMgRW5zdXJlIHRoYXQgcHJvdG9jb2wgdjIgaXMgdXNlZAorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDIiIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vuc3VyZSB0aGF0IG11bHRpcGxlIGZldGNoZXMgaW4gc2FtZSBwcm9jZXNzIGZyb20gYSBzaGFsbG93IHJlcG8gd29ya3MnICcKKwlybSAtcmYgc2VydmVyIGNsaWVudCB0cmFjZSAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBzZXJ2ZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgb25lICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIHR3byAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciB0aHJlZSAmJgorCWdpdCBjbG9uZSAtLXNoYWxsb3ctZXhjbHVkZSB0d28gImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBjbGllbnQgJiYKKworCWdpdCAtQyBzZXJ2ZXIgdGFnIC1hIC1tICJhbiBhbm5vdGF0ZWQgdGFnIiB0d290YWcgdHdvICYmCisKKwkjIFRyaWdnZXJzIHRhZyBmb2xsb3dpbmcgKHRodXMsIDIgZmV0Y2hlcyBpbiBvbmUgcHJvY2VzcykKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggLS1zaGFsbG93LWV4Y2x1ZGUgb25lIG9yaWdpbiAmJgorCSMgRW5zdXJlIHRoYXQgcHJvdG9jb2wgdjIgaXMgdXNlZAorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDIiIHRyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZXBlbi1yZWxhdGl2ZScgJworCXJtIC1yZiBzZXJ2ZXIgY2xpZW50IHRyYWNlICYmCisKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNlcnZlciAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBvbmUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzZXJ2ZXIgdHdvICYmCisJdGVzdF9jb21taXQgLUMgc2VydmVyIHRocmVlICYmCisJZ2l0IGNsb25lIC0tZGVwdGggMSAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCXRlc3RfY29tbWl0IC1DIHNlcnZlciBmb3VyICYmCisKKwkjIFNhbml0eSBjaGVjayB0aGF0IG9ubHkgInRocmVlIiBpcyBkb3dubG9hZGVkCisJZ2l0IC1DIGNsaWVudCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyBtYXN0ZXIgPmFjdHVhbCAmJgorCWVjaG8gdGhyZWUgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtQyBjbGllbnQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggLS1kZWVwZW49MSBvcmlnaW4gJiYKKwkjIEVuc3VyZSB0aGF0IHByb3RvY29sIHYyIGlzIHVzZWQKKwlncmVwICJmZXRjaDwgdmVyc2lvbiAyIiB0cmFjZSAmJgorCisJZ2l0IC1DIGNsaWVudCBsb2cgLS1wcmV0dHk9dGZvcm1hdDolcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlmb3VyCisJdGhyZWUKKwl0d28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyBUZXN0IHByb3RvY29sIHYyIHdpdGggJ2h0dHA6Ly8nIHRyYW5zcG9ydAorIworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZXBvIHRvIGJlIHNlcnZlZCBieSBodHRwOi8vIHRyYW5zcG9ydCcgJworCWdpdCBpbml0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCXRlc3RfY29tbWl0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBodHRwOi8vIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBHSVRfVFJBQ0VfQ1VSTD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWNsb25lICIkSFRUUERfVVJML3NtYXJ0L2h0dHBfcGFyZW50IiBodHRwX2NoaWxkICYmCisKKwlnaXQgLUMgaHR0cF9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIENsaWVudCByZXF1ZXN0ZWQgdG8gdXNlIHByb3RvY29sIHYyCisJZ3JlcCAiR2l0LVByb3RvY29sOiB2ZXJzaW9uPTIiIGxvZyAmJgorCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MgorCWdyZXAgImdpdDwgdmVyc2lvbiAyIiBsb2cgJiYKKwkjIFZlcmlmeSB0aGF0IHRoZSBjaHVua2VkIGVuY29kaW5nIHNlbmRpbmcgY29kZXBhdGggaXMgTk9UIGV4ZXJjaXNlZAorCSEgZ3JlcCAiU2VuZCBoZWFkZXI6IFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYmlnIHJlcG9zaXRvcnkgd2l0aCBodHRwOi8vIHVzaW5nIHByb3RvY29sIHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwlnaXQgaW5pdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9iaWciICYmCisJIyBFbnN1cmUgdGhhdCB0aGUgbGlzdCBvZiB3YW50cyBpcyBncmVhdGVyIHRoYW4gaHR0cC5wb3N0YnVmZmVyIGJlbG93CisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDE1MDApCisJZG8KKwkJIyBkbyBub3QgdXNlIGhlcmUtZG9jLCBiZWNhdXNlIGl0IHJlcXVpcmVzIGEgcHJvY2VzcworCQkjIHBlciBsb29wIGl0ZXJhdGlvbgorCQllY2hvICJjb21taXQgcmVmcy9oZWFkcy90b28tbWFueS1yZWZzLSRpIiAmJgorCQllY2hvICJjb21taXR0ZXIgZ2l0IDxnaXRAZXhhbXBsZS5jb20+ICRpICswMDAwIiAmJgorCQllY2hvICJkYXRhIDAiICYmCisJCWVjaG8gIk0gNjQ0IGlubGluZSBibGEudHh0IiAmJgorCQllY2hvICJkYXRhIDQiICYmCisJCWVjaG8gImJsYSIKKwlkb25lIHwgZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2JpZyIgZmFzdC1pbXBvcnQgJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIEdJVF9UUkFDRV9DVVJMPSIkKHB3ZCkvbG9nIiBnaXQgXAorCQktYyBwcm90b2NvbC52ZXJzaW9uPTIgLWMgaHR0cC5wb3N0YnVmZmVyPTY1NTM2IFwKKwkJY2xvbmUgIiRIVFRQRF9VUkwvc21hcnQvYmlnIiBiaWdfY2hpbGQgJiYKKworCSMgQ2xpZW50IHJlcXVlc3RlZCB0byB1c2UgcHJvdG9jb2wgdjIKKwlncmVwICJHaXQtUHJvdG9jb2w6IHZlcnNpb249MiIgbG9nICYmCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiZ2l0PCB2ZXJzaW9uIDIiIGxvZyAmJgorCSMgVmVyaWZ5IHRoYXQgdGhlIGNodW5rZWQgZW5jb2Rpbmcgc2VuZGluZyBjb2RlcGF0aCBpcyBleGVyY2lzZWQKKwlncmVwICJTZW5kIGhlYWRlcjogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGh0dHA6Ly8gdXNpbmcgcHJvdG9jb2wgdjInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXRlc3RfY29tbWl0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiB0d28gJiYKKworCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBodHRwX2NoaWxkIC1jIHByb3RvY29sLnZlcnNpb249MiBcCisJCWZldGNoICYmCisKKwlnaXQgLUMgaHR0cF9jaGlsZCBsb2cgLTEgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgU2VydmVyIHJlc3BvbmRlZCB1c2luZyBwcm90b2NvbCB2MgorCWdyZXAgImdpdDwgdmVyc2lvbiAyIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBodHRwOi8vIGJ5IGhhc2ggd2l0aG91dCB0YWcgZm9sbG93aW5nIHdpdGggcHJvdG9jb2wgdjIgZG9lcyBub3QgbGlzdCByZWZzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisKKwl0ZXN0X2NvbW1pdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgdHdvX2EgJiYKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIHJldi1wYXJzZSB0d29fYSA+dHdvX2FfaGFzaCAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGh0dHBfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggLS1uby10YWdzIG9yaWdpbiAkKGNhdCB0d29fYV9oYXNoKSAmJgorCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgbG9nICYmCisJISBncmVwICJmZXRjaD4gY29tbWFuZD1scy1yZWZzIiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBuYW1lc3BhY2VkIHJlcG8gcmVzcGVjdHMgbmFtZXNwYWNlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJZ2l0IGluaXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvbnNyZXBvIiAmJgorCXRlc3RfY29tbWl0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL25zcmVwbyIgb25lICYmCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvbnNyZXBvIiB0d28gJiYKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvbnNyZXBvIiBcCisJCXVwZGF0ZS1yZWYgcmVmcy9uYW1lc3BhY2VzL25zL3JlZnMvaGVhZHMvbWFzdGVyIG9uZSAmJgorCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGh0dHBfY2hpbGQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggIiRIVFRQRF9VUkwvc21hcnRfbmFtZXNwYWNlL25zcmVwbyIgXAorCQlyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3RoZWlycyAmJgorCisJIyBTZXJ2ZXIgcmVzcG9uZGVkIHVzaW5nIHByb3RvY29sIHYyCisJZ3JlcCAiZmV0Y2g8IHZlcnNpb24gMiIgbG9nICYmCisKKwlnaXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvbnNyZXBvIiByZXYtcGFyc2Ugb25lID5leHBlY3QgJiYKKwlnaXQgLUMgaHR0cF9jaGlsZCByZXYtcGFyc2UgdGhlaXJzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSB3aXRoIHYyIGh0dHAgc2VuZHMgb25seSBvbmUgUE9TVCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJZ2l0IGxzLXJlbW90ZSAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgPmV4cGVjdCAmJgorCUdJVF9UUkFDRV9DVVJMPSIkKHB3ZCkvbG9nIiBnaXQgLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJbHMtcmVtb3RlICIkSFRUUERfVVJML3NtYXJ0L2h0dHBfcGFyZW50IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ3JlcCAiU2VuZCBoZWFkZXI6IFBPU1QiIGxvZyA+cG9zdHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHBvc3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBodHRwOi8vIGFuZCBhIGNvbmZpZyBvZiB2MiBkb2VzIG5vdCByZXF1ZXN0IHYyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBsb2ciICYmCisJIyBUaWxsIHYyIGZvciBwdXNoIGlzIGRlc2lnbmVkLCBtYWtlIHN1cmUgdGhhdCBpZiBhIGNsaWVudCBoYXMKKwkjIHByb3RvY29sLnZlcnNpb24gY29uZmlndXJlZCB0byB1c2UgdjIsIHRoYXQgdGhlIGNsaWVudCBpbnN0ZWFkIGZhbGxzCisJIyBiYWNrIGFuZCB1c2VzIHYwLgorCisJdGVzdF9jb21taXQgLUMgaHR0cF9jaGlsZCB0aHJlZSAmJgorCisJIyBQdXNoIHRvIGFub3RoZXIgYnJhbmNoLCBhcyB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkgaGFzIHRoZQorCSMgbWFzdGVyIGJyYW5jaCBjaGVja2VkIG91dCBhbmQgd2UgY2Fubm90IHB1c2ggaW50byBpdC4KKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgaHR0cF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlwdXNoIG9yaWdpbiBIRUFEOmNsaWVudF9icmFuY2ggJiYKKworCWdpdCAtQyBodHRwX2NoaWxkIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZ2l0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBsb2cgLTEgLS1mb3JtYXQ9JXMgY2xpZW50X2JyYW5jaCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBDbGllbnQgZGlkIG5vdCByZXF1ZXN0IHRvIHVzZSBwcm90b2NvbCB2MgorCSEgZ3JlcCAiR2l0LVByb3RvY29sOiB2ZXJzaW9uPTIiIGxvZyAmJgorCSMgU2VydmVyIGRpZCBub3QgcmVzcG9uZCB1c2luZyBwcm90b2NvbCB2MgorCSEgZ3JlcCAiZ2l0PCB2ZXJzaW9uIDIiIGxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIHNlcnZlciBzZW5kcyAicmVhZHkiLCBleHBlY3QgREVMSU0nICcKKwlybSAtcmYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIGh0dHBfY2hpbGQgJiYKKworCWdpdCBpbml0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiAmJgorCXRlc3RfY29tbWl0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBvbmUgJiYKKworCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9zbWFydC9odHRwX3BhcmVudCIgaHR0cF9jaGlsZCAmJgorCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIHR3byAmJgorCisJIyBBZnRlciAicmVhZHkiIGluIHRoZSBhY2tub3dsZWRnbWVudHMgc2VjdGlvbiwgcHJldGVuZCB0aGF0IGEgRkxVU0gKKwkjICgwMDAwKSB3YXMgc2VudCBpbnN0ZWFkIG9mIGEgREVMSU0gKDAwMDEpLgorCXByaW50ZiAiXCRyZWFkeSA9IDEgaWYgL3JlYWR5LzsgXCRyZWFkeSAmJiBzLzAwMDEvMDAwMC8iIFwKKwkJPiIkSFRUUERfUk9PVF9QQVRIL29uZS10aW1lLXBlcmwiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgaHR0cF9jaGlsZCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXAorCQlmZXRjaCAiJEhUVFBEX1VSTC9vbmVfdGltZV9wZXJsL2h0dHBfcGFyZW50IiAyPiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJleHBlY3RlZCBwYWNrZmlsZSB0byBiZSBzZW50IGFmdGVyIC5yZWFkeS4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIHNlcnZlciBkb2VzIG5vdCBzZW5kICJyZWFkeSIsIGV4cGVjdCBGTFVTSCcgJworCXJtIC1yZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgaHR0cF9jaGlsZCBsb2cgJiYKKworCWdpdCBpbml0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiAmJgorCXRlc3RfY29tbWl0IC1DICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2h0dHBfcGFyZW50IiBvbmUgJiYKKworCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9zbWFydC9odHRwX3BhcmVudCIgaHR0cF9jaGlsZCAmJgorCisJdGVzdF9jb21taXQgLUMgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaHR0cF9wYXJlbnQiIHR3byAmJgorCisJIyBDcmVhdGUgbWFueSBjb21taXRzIHRvIGV4dGVuZCB0aGUgbmVnb3RpYXRpb24gcGhhc2UgYWNyb3NzIG11bHRpcGxlCisJIyByZXF1ZXN0cywgc28gdGhhdCB0aGUgc2VydmVyIGRvZXMgbm90IHNlbmQgInJlYWR5IiBpbiB0aGUgZmlyc3QKKwkjIHJlcXVlc3QuCisJdGVzdF9jb21taXRfYnVsayAtQyBodHRwX2NoaWxkIC0taWQ9YyAzMiAmJgorCisJIyBBZnRlciB0aGUgYWNrbm93bGVkZ21lbnRzIHNlY3Rpb24sIHByZXRlbmQgdGhhdCBhIERFTElNCisJIyAoMDAwMSkgd2FzIHNlbnQgaW5zdGVhZCBvZiBhIEZMVVNIICgwMDAwKS4KKwlwcmludGYgIlwkYWNrID0gMSBpZiAvYWNrbm93bGVkZ21lbnRzLzsgXCRhY2sgJiYgcy8wMDAwLzAwMDEvIiBcCisJCT4iJEhUVFBEX1JPT1RfUEFUSC9vbmUtdGltZS1wZXJsIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBodHRwX2NoaWxkIFwKKwkJLWMgcHJvdG9jb2wudmVyc2lvbj0yIFwKKwkJZmV0Y2ggIiRIVFRQRF9VUkwvb25lX3RpbWVfcGVybC9odHRwX3BhcmVudCIgMj4gZXJyICYmCisJZ3JlcCAiZmV0Y2g8IC4qYWNrbm93bGVkZ21lbnRzIiBsb2cgJiYKKwkhIGdyZXAgImZldGNoPCAuKnJlYWR5IiBsb2cgJiYKKwl0ZXN0X2kxOG5ncmVwICJleHBlY3RlZCBubyBvdGhlciBzZWN0aW9ucyB0byBiZSBzZW50IGFmdGVyIG5vIC5yZWFkeS4iIGVycgorJworCisjIERPIE5PVCBhZGQgbm9uLWh0dHBkLXNwZWNpZmljIHRlc3RzIGhlcmUsIGJlY2F1c2UgdGhlIGxhc3QgcGFydCBvZiB0aGlzCisjIHRlc3Qgc2NyaXB0IGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBodHRwZCBpcyBhdmFpbGFibGUgYW5kIGVuYWJsZWQuCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwMy11cGxvYWQtcGFjay1yZWYtaW4td2FudC5zaCBiL3QvdDU3MDMtdXBsb2FkLXBhY2stcmVmLWluLXdhbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2ZiYTMwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MDMtdXBsb2FkLXBhY2stcmVmLWluLXdhbnQuc2gKQEAgLTAsMCArMSwzOTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1cGxvYWQtcGFjayByZWYtaW4td2FudCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2dldF9hY3R1YWxfcmVmcyAoKSB7CisJc2VkIC1uIC1lICcvd2FudGVkLXJlZnMvLC8wMDAxL3sKKwkJL3dhbnRlZC1yZWZzL2QKKwkJLzAwMDEvZAorCQlwCisJCX0nIDxvdXQgfCB0ZXN0LXRvb2wgcGt0LWxpbmUgdW5wYWNrID5hY3R1YWxfcmVmcworfQorCitnZXRfYWN0dWFsX2NvbW1pdHMgKCkgeworCXNlZCAtbiAtZSAnL3BhY2tmaWxlLywvMDAwMC97CisJCS9wYWNrZmlsZS9kCisJCXAKKwkJfScgPG91dCB8IHRlc3QtdG9vbCBwa3QtbGluZSB1bnBhY2stc2lkZWJhbmQgPm8ucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIG8ucGFjayAmJgorCWdpdCB2ZXJpZnktcGFjayAtdiBvLmlkeCA+b2JqcyAmJgorCWdyZXAgY29tbWl0IG9ianMgfCBjdXQgLWQiICIgLWYxIHwgc29ydCA+YWN0dWFsX2NvbW1pdHMKK30KKworY2hlY2tfb3V0cHV0ICgpIHsKKwlnZXRfYWN0dWFsX3JlZnMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9yZWZzIGFjdHVhbF9yZWZzICYmCisJZ2V0X2FjdHVhbF9jb21taXRzICYmCisJc29ydCBleHBlY3RlZF9jb21taXRzID5zb3J0ZWRfY29tbWl0cyAmJgorCXRlc3RfY21wIHNvcnRlZF9jb21taXRzIGFjdHVhbF9jb21taXRzCit9CisKKyMgYyhvL2ZvbykgZChvL2JhcikKKyMgICAgICAgIFwgLworIyAgICAgICAgIGIgICBlKGJheikgIGYobWFzdGVyKQorIyAgICAgICAgICBcX18gIHwgIF9fLworIyAgICAgICAgICAgICBcIHwgLworIyAgICAgICAgICAgICAgIGEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwl0ZXN0X29pZF9pbml0ICYmCisJdGVzdF9jb21taXQgYSAmJgorCWdpdCBjaGVja291dCAtYiBvL2ZvbyAmJgorCXRlc3RfY29tbWl0IGIgJiYKKwl0ZXN0X2NvbW1pdCBjICYmCisJZ2l0IGNoZWNrb3V0IC1iIG8vYmFyIGIgJiYKKwl0ZXN0X2NvbW1pdCBkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJheiBhICYmCisJdGVzdF9jb21taXQgZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyBjb250cm9scyByZWYtaW4td2FudCBhZHZlcnRpc2VtZW50JyAnCisJdGVzdC10b29sIHNlcnZlLXYyIC0tYWR2ZXJ0aXNlLWNhcGFiaWxpdGllcyA+b3V0ICYmCisJISBncmVwIC1hIHJlZi1pbi13YW50IG91dCAmJgorCisJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93UmVmSW5XYW50IGZhbHNlICYmCisJdGVzdC10b29sIHNlcnZlLXYyIC0tYWR2ZXJ0aXNlLWNhcGFiaWxpdGllcyA+b3V0ICYmCisJISBncmVwIC1hIHJlZi1pbi13YW50IG91dCAmJgorCisJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93UmVmSW5XYW50IHRydWUgJiYKKwl0ZXN0LXRvb2wgc2VydmUtdjIgLS1hZHZlcnRpc2UtY2FwYWJpbGl0aWVzID5vdXQgJiYKKwlncmVwIC1hIHJlZi1pbi13YW50IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHdhbnQtcmVmIGxpbmUnICcKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1mZXRjaAorCTAwMDEKKwluby1wcm9ncmVzcworCXdhbnQtcmVmIHJlZnMvaGVhZHMvbm9uLWV4aXN0ZW50CisJZG9uZQorCTAwMDAKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIHRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgMj5vdXQgPGluICYmCisJZ3JlcCAidW5rbm93biByZWYiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyB3YW50LXJlZicgJworCW9pZD0kKGdpdCByZXYtcGFyc2UgZikgJiYKKwljYXQgPmV4cGVjdGVkX3JlZnMgPDwtRU9GICYmCisJJG9pZCByZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCWdpdCByZXYtcGFyc2UgZiA+ZXhwZWN0ZWRfY29tbWl0cyAmJgorCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBhKSAmJgorCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwljb21tYW5kPWZldGNoCisJMDAwMQorCW5vLXByb2dyZXNzCisJd2FudC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIKKwloYXZlICRvaWQKKwlkb25lCisJMDAwMAorCUVPRgorCisJdGVzdC10b29sIHNlcnZlLXYyIC0tc3RhdGVsZXNzLXJwYyA+b3V0IDxpbiAmJgorCWNoZWNrX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSB3YW50LXJlZiBsaW5lcycgJworCW9pZF9jPSQoZ2l0IHJldi1wYXJzZSBjKSAmJgorCW9pZF9kPSQoZ2l0IHJldi1wYXJzZSBkKSAmJgorCWNhdCA+ZXhwZWN0ZWRfcmVmcyA8PC1FT0YgJiYKKwkkb2lkX2MgcmVmcy9oZWFkcy9vL2ZvbworCSRvaWRfZCByZWZzL2hlYWRzL28vYmFyCisJRU9GCisJZ2l0IHJldi1wYXJzZSBjIGQgPmV4cGVjdGVkX2NvbW1pdHMgJiYKKworCW9pZD0kKGdpdCByZXYtcGFyc2UgYikgJiYKKwl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCisJY29tbWFuZD1mZXRjaAorCTAwMDEKKwluby1wcm9ncmVzcworCXdhbnQtcmVmIHJlZnMvaGVhZHMvby9mb28KKwl3YW50LXJlZiByZWZzL2hlYWRzL28vYmFyCisJaGF2ZSAkb2lkCisJZG9uZQorCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPm91dCA8aW4gJiYKKwljaGVja19vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4IHdhbnQgYW5kIHdhbnQtcmVmJyAnCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBmKSAmJgorCWNhdCA+ZXhwZWN0ZWRfcmVmcyA8PC1FT0YgJiYKKwkkb2lkIHJlZnMvaGVhZHMvbWFzdGVyCisJRU9GCisJZ2l0IHJldi1wYXJzZSBlIGYgPmV4cGVjdGVkX2NvbW1pdHMgJiYKKworCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKKwljb21tYW5kPWZldGNoCisJMDAwMQorCW5vLXByb2dyZXNzCisJd2FudC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIKKwl3YW50ICQoZ2l0IHJldi1wYXJzZSBlKQorCWhhdmUgJChnaXQgcmV2LXBhcnNlIGEpCisJZG9uZQorCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPm91dCA8aW4gJiYKKwljaGVja19vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FudC1yZWYgd2l0aCByZWYgd2UgYWxyZWFkeSBoYXZlIGNvbW1pdCBmb3InICcKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIGMpICYmCisJY2F0ID5leHBlY3RlZF9yZWZzIDw8LUVPRiAmJgorCSRvaWQgcmVmcy9oZWFkcy9vL2ZvbworCUVPRgorCT5leHBlY3RlZF9jb21taXRzICYmCisKKwlvaWQ9JChnaXQgcmV2LXBhcnNlIGMpICYmCisJdGVzdC10b29sIHBrdC1saW5lIHBhY2sgPmluIDw8LUVPRiAmJgorCWNvbW1hbmQ9ZmV0Y2gKKwkwMDAxCisJbm8tcHJvZ3Jlc3MKKwl3YW50LXJlZiByZWZzL2hlYWRzL28vZm9vCisJaGF2ZSAkb2lkCisJZG9uZQorCTAwMDAKKwlFT0YKKworCXRlc3QtdG9vbCBzZXJ2ZS12MiAtLXN0YXRlbGVzcy1ycGMgPm91dCA8aW4gJiYKKwljaGVja19vdXRwdXQKKycKKworUkVQTz0iJChwd2QpL3JlcG8iCitMT0NBTF9QUklTVElORT0iJChwd2QpL2xvY2FsX3ByaXN0aW5lIgorCisjICRSRVBPCisjIGMoby9mb28pIGQoby9iYXIpCisjICAgICAgICBcIC8KKyMgICAgICAgICBiICAgZShiYXopICBmKG1hc3RlcikKKyMgICAgICAgICAgXF9fICB8ICBfXy8KKyMgICAgICAgICAgICAgXCB8IC8KKyMgICAgICAgICAgICAgICBhCisjCisjICRMT0NBTF9QUklTVElORQorIwkJczMyKHNpZGUpCisjCQl8CisjCQkuCisjCQkuCisjCQl8CisjCQlhKG1hc3RlcikKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zIGZvciBmZXRjaGluZyB3aXRoIHJlZi1pbi13YW50IHRlc3RzJyAnCisJKAorCQlnaXQgaW5pdCAiJFJFUE8iICYmCisJCWNkICIkUkVQTyIgJiYKKwkJdGVzdF9jb21taXQgYSAmJgorCisJCSMgTG9jYWwgcmVwbyB3aXRoIG1hbnkgY29tbWl0cyAoc28gdGhhdCBuZWdvdGlhdGlvbiB3aWxsIHRha2UKKwkJIyBtb3JlIHRoYW4gMSByZXF1ZXN0L3Jlc3BvbnNlIHBhaXIpCisJCXJtIC1yZiAiJExPQ0FMX1BSSVNUSU5FIiAmJgorCQlnaXQgY2xvbmUgImZpbGU6Ly8kUkVQTyIgIiRMT0NBTF9QUklTVElORSIgJiYKKwkJY2QgIiRMT0NBTF9QUklTVElORSIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwkJdGVzdF9jb21taXRfYnVsayAtLWlkPXMgMzMgJiYKKworCQkjIEFkZCBub3ZlbCBjb21taXRzIHRvIHVwc3RyZWFtCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJY2QgIiRSRVBPIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgby9mb28gJiYKKwkJdGVzdF9jb21taXQgYiAmJgorCQl0ZXN0X2NvbW1pdCBjICYmCisJCWdpdCBjaGVja291dCAtYiBvL2JhciBiICYmCisJCXRlc3RfY29tbWl0IGQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGJheiBhICYmCisJCXRlc3RfY29tbWl0IGUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X2NvbW1pdCBmCisJKSAmJgorCWdpdCAtQyAiJFJFUE8iIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93UmVmSW5XYW50IHRydWUgJiYKKwlnaXQgLUMgIiRMT0NBTF9QUklTVElORSIgY29uZmlnIHByb3RvY29sLnZlcnNpb24gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGluZyB3aXRoIGV4YWN0IE9JRCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJcm0gLXJmIGxvY2FsICYmCisJY3AgLXIgIiRMT0NBTF9QUklTVElORSIgbG9jYWwgJiYKKwlvaWQ9JChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgZCkgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvbG9nIiBnaXQgLUMgbG9jYWwgZmV0Y2ggb3JpZ2luIFwKKwkJIiRvaWQiOnJlZnMvaGVhZHMvYWN0dWFsICYmCisKKwlnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgImQiID5leHBlY3RlZCAmJgorCWdpdCAtQyBsb2NhbCByZXYtcGFyc2UgcmVmcy9oZWFkcy9hY3R1YWwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdyZXAgIndhbnQgJG9pZCIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIG11bHRpcGxlIHJlZnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGxvY2FsIGZldGNoIG9yaWdpbiBtYXN0ZXIgYmF6ICYmCisKKwlnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgIm1hc3RlciIgImJheiIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGxvY2FsIHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciByZWZzL3JlbW90ZXMvb3JpZ2luL2JheiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ3JlcCAid2FudC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIiIGxvZyAmJgorCWdyZXAgIndhbnQtcmVmIHJlZnMvaGVhZHMvYmF6IiBsb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgcmVmIGFuZCBleGFjdCBPSUQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJb2lkPSQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIGIpICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGxvY2FsIGZldGNoIG9yaWdpbiBcCisJCW1hc3RlciAiJG9pZCI6cmVmcy9oZWFkcy9hY3R1YWwgJiYKKworCWdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAibWFzdGVyIiAiYiIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGxvY2FsIHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciByZWZzL2hlYWRzL2FjdHVhbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ3JlcCAid2FudCAkb2lkIiBsb2cgJiYKKwlncmVwICJ3YW50LXJlZiByZWZzL2hlYWRzL21hc3RlciIgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIHdpdGggd2lsZGNhcmQgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVmcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgorCisJcm0gLXJmIGxvY2FsICYmCisJY3AgLXIgIiRMT0NBTF9QUklTVElORSIgbG9jYWwgJiYKKwlnaXQgLUMgbG9jYWwgZmV0Y2ggb3JpZ2luIHJlZnMvaGVhZHMvbm9uZSo6cmVmcy9oZWFkcy8qID5vdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIHdpdGggd2lsZGNhcmQgdGhhdCBtYXRjaGVzIG11bHRpcGxlIHJlZnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKKworCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGxvY2FsIGZldGNoIG9yaWdpbiByZWZzL2hlYWRzL28qOnJlZnMvaGVhZHMvbyogJiYKKworCWdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAiby9mb28iICJvL2JhciIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGxvY2FsIHJldi1wYXJzZSAiby9mb28iICJvL2JhciIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdyZXAgIndhbnQtcmVmIHJlZnMvaGVhZHMvby9mb28iIGxvZyAmJgorCWdyZXAgIndhbnQtcmVmIHJlZnMvaGVhZHMvby9iYXIiIGxvZworJworCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKworUkVQTz0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvIgorTE9DQUxfUFJJU1RJTkU9IiQocHdkKS9sb2NhbF9wcmlzdGluZSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3MgZm9yIGNoYW5nZS13aGlsZS1uZWdvdGlhdGluZyB0ZXN0JyAnCisJKAorCQlnaXQgaW5pdCAiJFJFUE8iICYmCisJCWNkICIkUkVQTyIgJiYKKwkJPi5naXQvZ2l0LWRhZW1vbi1leHBvcnQtb2sgJiYKKwkJdGVzdF9jb21taXQgbTEgJiYKKwkJZ2l0IHRhZyAtZCBtMSAmJgorCisJCSMgTG9jYWwgcmVwbyB3aXRoIG1hbnkgY29tbWl0cyAoc28gdGhhdCBuZWdvdGlhdGlvbiB3aWxsIHRha2UKKwkJIyBtb3JlIHRoYW4gMSByZXF1ZXN0L3Jlc3BvbnNlIHBhaXIpCisJCXJtIC1yZiAiJExPQ0FMX1BSSVNUSU5FIiAmJgorCQlnaXQgY2xvbmUgImh0dHA6Ly8xMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUL3NtYXJ0L3JlcG8iICIkTE9DQUxfUFJJU1RJTkUiICYmCisJCWNkICIkTE9DQUxfUFJJU1RJTkUiICYmCisJCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJCXRlc3RfY29tbWl0X2J1bGsgLS1pZD1zIDMzICYmCisKKwkJIyBBZGQgbm92ZWwgY29tbWl0cyB0byB1cHN0cmVhbQorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWNkICIkUkVQTyIgJiYKKwkJdGVzdF9jb21taXQgbTIgJiYKKwkJdGVzdF9jb21taXQgbTMgJiYKKwkJZ2l0IHRhZyAtZCBtMiBtMworCSkgJiYKKwlnaXQgLUMgIiRMT0NBTF9QUklTVElORSIgcmVtb3RlIHNldC11cmwgb3JpZ2luICJodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC9vbmVfdGltZV9wZXJsL3JlcG8iICYmCisJZ2l0IC1DICIkTE9DQUxfUFJJU1RJTkUiIGNvbmZpZyBwcm90b2NvbC52ZXJzaW9uIDIKKycKKworaW5jb25zaXN0ZW5jeSAoKSB7CisJIyBTaW11bGF0ZSB0aGF0IHRoZSBzZXJ2ZXIgaW5pdGlhbGx5IHJlcG9ydHMgJDIgYXMgdGhlIHJlZgorCSMgY29ycmVzcG9uZGluZyB0byAkMSwgYW5kIGFmdGVyIHRoYXQsICQxIGFzIHRoZSByZWYgY29ycmVzcG9uZGluZyB0bworCSMgJDEuIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIHJlYWwtbGlmZSBzaXR1YXRpb24gd2hlcmUgdGhlIHNlcnZlcidzCisJIyByZXBvc2l0b3J5IGFwcGVhcnMgdG8gY2hhbmdlIGR1cmluZyBuZWdvdGlhdGlvbiwgZm9yIGV4YW1wbGUsIHdoZW4KKwkjIGRpZmZlcmVudCBzZXJ2ZXJzIGluIGEgbG9hZC1iYWxhbmNpbmcgYXJyYW5nZW1lbnQgc2VydmUgKHN0YXRlbGVzcykKKwkjIFJQQ3MgZHVyaW5nIGEgc2luZ2xlIG5lZ290aWF0aW9uLgorCW9pZDE9JChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgJDEpICYmCisJb2lkMj0kKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAkMikgJiYKKwllY2hvICJzLyRvaWQxLyRvaWQyLyIgPiIkSFRUUERfUk9PVF9QQVRIL29uZS10aW1lLXBlcmwiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlciBpcyBpbml0aWFsbHkgYWhlYWQgLSBubyByZWYgaW4gd2FudCcgJworCWdpdCAtQyAiJFJFUE8iIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93UmVmSW5XYW50IGZhbHNlICYmCisJcm0gLXJmIGxvY2FsICYmCisJY3AgLXIgIiRMT0NBTF9QUklTVElORSIgbG9jYWwgJiYKKwlpbmNvbnNpc3RlbmN5IG1hc3RlciAkKHRlc3Rfb2lkIG51bWVyaWMpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGxvY2FsIGZldGNoIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IHJlbW90ZSBlcnJvcjogdXBsb2FkLXBhY2s6IG5vdCBvdXIgcmVmIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyIGlzIGluaXRpYWxseSBhaGVhZCAtIHJlZiBpbiB3YW50JyAnCisJZ2l0IC1DICIkUkVQTyIgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dSZWZJbldhbnQgdHJ1ZSAmJgorCXJtIC1yZiBsb2NhbCAmJgorCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJaW5jb25zaXN0ZW5jeSBtYXN0ZXIgJCh0ZXN0X29pZCBudW1lcmljKSAmJgorCWdpdCAtQyBsb2NhbCBmZXRjaCAmJgorCisJZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlciA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgbG9jYWwgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyIGlzIGluaXRpYWxseSBiZWhpbmQgLSBubyByZWYgaW4gd2FudCcgJworCWdpdCAtQyAiJFJFUE8iIGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93UmVmSW5XYW50IGZhbHNlICYmCisJcm0gLXJmIGxvY2FsICYmCisJY3AgLXIgIiRMT0NBTF9QUklTVElORSIgbG9jYWwgJiYKKwlpbmNvbnNpc3RlbmN5IG1hc3RlciAibWFzdGVyXiIgJiYKKwlnaXQgLUMgbG9jYWwgZmV0Y2ggJiYKKworCWdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyXiIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGxvY2FsIHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlcnZlciBpcyBpbml0aWFsbHkgYmVoaW5kIC0gcmVmIGluIHdhbnQnICcKKwlnaXQgLUMgIiRSRVBPIiBjb25maWcgdXBsb2FkcGFjay5hbGxvd1JlZkluV2FudCB0cnVlICYmCisJcm0gLXJmIGxvY2FsICYmCisJY3AgLXIgIiRMT0NBTF9QUklTVElORSIgbG9jYWwgJiYKKwlpbmNvbnNpc3RlbmN5IG1hc3RlciAibWFzdGVyXiIgJiYKKwlnaXQgLUMgbG9jYWwgZmV0Y2ggJiYKKworCWdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgbG9jYWwgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyIGxvc2VzIGEgcmVmIC0gcmVmIGluIHdhbnQnICcKKwlnaXQgLUMgIiRSRVBPIiBjb25maWcgdXBsb2FkcGFjay5hbGxvd1JlZkluV2FudCB0cnVlICYmCisJcm0gLXJmIGxvY2FsICYmCisJY3AgLXIgIiRMT0NBTF9QUklTVElORSIgbG9jYWwgJiYKKwllY2hvICJzL21hc3Rlci9yYXN0ZXIvIiA+IiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtcGVybCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbG9jYWwgZmV0Y2ggMj5lcnIgJiYKKworCXRlc3RfaTE4bmdyZXAgImZhdGFsOiByZW1vdGUgZXJyb3I6IHVua25vd24gcmVmIHJlZnMvaGVhZHMvcmFzdGVyIiBlcnIKKycKKworIyBETyBOT1QgYWRkIG5vbi1odHRwZC1zcGVjaWZpYyB0ZXN0cyBoZXJlLCBiZWNhdXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhpcworIyB0ZXN0IHNjcmlwdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaHR0cGQgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MDEtcmVtb3RlLWhlbHBlcnMuc2ggYi90L3Q1ODAxLXJlbW90ZS1oZWxwZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEyMWU1YzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1ODAxLXJlbW90ZS1oZWxwZXJzLnNoCkBAIC0wLDAgKzEsMzE1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFN2ZXJyZSBSYWJiZWxpZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZW1vdGUtaGVscGVyIGltcG9ydCBhbmQgZXhwb3J0IGNvbW1hbmRzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorCitQQVRIPSIkVEVTVF9ESVJFQ1RPUlkvdDU4MDE6JFBBVEgiCisKK2NvbXBhcmVfcmVmcygpIHsKKwlnaXQgLS1naXQtZGlyPSIkMS8uZ2l0IiByZXYtcGFyc2UgLS12ZXJpZnkgJDIgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9IiQzLy5naXQiIHJldi1wYXJzZSAtLXZlcmlmeSAkNCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5JyAnCisJZ2l0IGluaXQgc2VydmVyICYmCisJKGNkIHNlcnZlciAmJgorCSBlY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGZyb20gbG9jYWwgcmVwbycgJworCWdpdCBjbG9uZSAidGVzdGdpdDo6JHtQV0R9L3NlcnZlciIgbG9jYWwgJiYKKwl0ZXN0X2NtcCBzZXJ2ZXIvZmlsZSBsb2NhbC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBuZXcgY29tbWl0IG9uIHJlbW90ZScgJworCShjZCBzZXJ2ZXIgJiYKKwkgZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tIHR3bykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBmcm9tIGxvY2FsIHJlcG8nICcKKwkoY2QgbG9jYWwgJiYgZ2l0IHB1bGwpICYmCisJdGVzdF9jbXAgc2VydmVyL2ZpbGUgbG9jYWwvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHRvIGxvY2FsIHJlcG8nICcKKwkoY2QgbG9jYWwgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZSAmJgorCWdpdCBwdXNoKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCBIRUFEIHNlcnZlciBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5ldyBicmFuY2gnICcKKwkoY2Qgc2VydmVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIG5ldyAmJgorCSBlY2hvIGNvbnRlbnQgPj5maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gZml2ZQorCSkgJiYKKwkoY2QgbG9jYWwgJiYKKwkgZ2l0IGZldGNoIG9yaWdpbiBuZXcKKwkpICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBIRUFEIGxvY2FsIEZFVENIX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbXVsdGlwbGUgYnJhbmNoZXMnICcKKwkoY2QgbG9jYWwgJiYKKwkgZ2l0IGZldGNoCisJKSAmJgorCWNvbXBhcmVfcmVmcyBzZXJ2ZXIgbWFzdGVyIGxvY2FsIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBuZXcgbG9jYWwgcmVmcy9yZW1vdGVzL29yaWdpbi9uZXcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aGVuIHJlbW90ZSBoYXMgZXh0cmEgcmVmcycgJworCShjZCBsb2NhbCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIgJiYKKwkgZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tIHNpeCAmJgorCSBnaXQgcHVzaAorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgbWFzdGVyIHNlcnZlciBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBuZXcgYnJhbmNoIGJ5IG5hbWUnICcKKwkoY2QgbG9jYWwgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIG5ldy1uYW1lICAmJgorCSBlY2hvIGNvbnRlbnQgPj5maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gc2V2ZW4gJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG5ldy1uYW1lCisJKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCBIRUFEIHNlcnZlciByZWZzL2hlYWRzL25ldy1uYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbmV3IGJyYW5jaCB3aXRoIG9sZDpuZXcgcmVmc3BlYycgJworCShjZCBsb2NhbCAmJgorCSBnaXQgcHVzaCBvcmlnaW4gbmV3LW5hbWU6bmV3LXJlZnNwZWMKKwkpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIEhFQUQgc2VydmVyIHJlZnMvaGVhZHMvbmV3LXJlZnNwZWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBuZXcgYnJhbmNoIHdpdGggSEVBRDpuZXcgcmVmc3BlYycgJworCShjZCBsb2NhbCAmJgorCSBnaXQgY2hlY2tvdXQgbmV3LW5hbWUgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIEhFQUQ6bmV3LXJlZnNwZWMtMgorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgSEVBRCBzZXJ2ZXIgcmVmcy9oZWFkcy9uZXctcmVmc3BlYy0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZGVsZXRlIGJyYW5jaCcgJworCShjZCBsb2NhbCAmJgorCSBnaXQgcHVzaCBvcmlnaW4gOm5ldy1uYW1lCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtLWdpdC1kaXI9InNlcnZlci8uZ2l0IiBcCisJIHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL25ldy1uYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlZCBwdXNoJyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvcmNlLXRlc3QgJiYKKwllY2hvIGNvbnRlbnQgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gZWlnaHQgJiYKKwlnaXQgcHVzaCBvcmlnaW4gZm9yY2UtdGVzdCAmJgorCWVjaG8gY29udGVudCA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtLWFtZW5kIC1tIGVpZ2h0LW1vZGlmaWVkICYmCisJZ2l0IHB1c2ggLS1mb3JjZSBvcmlnaW4gZm9yY2UtdGVzdAorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgcmVmcy9oZWFkcy9mb3JjZS10ZXN0IHNlcnZlciByZWZzL2hlYWRzL2ZvcmNlLXRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRob3V0IHJlZnNwZWMnICcKKwlHSVRfUkVNT1RFX1RFU1RHSVRfTk9SRUZTUEVDPTEgXAorCWdpdCBjbG9uZSAidGVzdGdpdDo6JHtQV0R9L3NlcnZlciIgbG9jYWwyIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0aGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkiIGVycm9yICYmCisJY29tcGFyZV9yZWZzIGxvY2FsMiBIRUFEIHNlcnZlciBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgd2l0aG91dCByZWZzcGVjcycgJworCShjZCBsb2NhbDIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PUkVGU1BFQz0xIGdpdCBwdWxsIDI+Li4vZXJyb3IpICYmCisJdGVzdF9pMThuZ3JlcCAidGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IiBlcnJvciAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbDIgSEVBRCBzZXJ2ZXIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHdpdGhvdXQgcmVmc3BlY3MnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIihjZCBsb2NhbDIgJiYgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4pIiAmJgorCShjZCBsb2NhbDIgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0ZW4gJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfTk9SRUZTUEVDPTEgJiYKKwlleHBvcnQgR0lUX1JFTU9URV9URVNUR0lUX05PUkVGU1BFQyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIDI+Li4vZXJyb3IpICYmCisJdGVzdF9pMThuZ3JlcCAicmVtb3RlLWhlbHBlciBkb2Vzbi50IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgd2l0aG91dCBtYXJrcycgJworCShjZCBsb2NhbDIgJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfTk9fTUFSS1M9MSBnaXQgcHVsbCkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwyIEhFQUQgc2VydmVyIEhFQUQKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncHVzaGluZyB3aXRob3V0IG1hcmtzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIoY2QgbG9jYWwyICYmIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luKSIgJiYKKwkoY2QgbG9jYWwyICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdlbHZlICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PX01BUktTPTEgZ2l0IHB1c2gpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsMiBIRUFEIHNlcnZlciBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYWxsIHdpdGggZXhpc3Rpbmcgb2JqZWN0JyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGJyYW5jaCBkdXAyIG1hc3RlciAmJgorCWdpdCBwdXNoIG9yaWdpbiAtLWFsbAorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgZHVwMiBzZXJ2ZXIgZHVwMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHJlZiB3aXRoIGV4aXN0aW5nIG9iamVjdCcgJworCShjZCBsb2NhbCAmJgorCWdpdCBicmFuY2ggZHVwIG1hc3RlciAmJgorCWdpdCBwdXNoIG9yaWdpbiBkdXAKKwkpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIGR1cCBzZXJ2ZXIgZHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdXNoIHNpZ25lZCB0YWcnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyAtcyAtbSBzaWduZWQtdGFnIHNpZ25lZC10YWcgJiYKKwlnaXQgcHVzaCBvcmlnaW4gc2lnbmVkLXRhZworCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgc2lnbmVkLXRhZ157fSBzZXJ2ZXIgc2lnbmVkLXRhZ157fSAmJgorCXRlc3RfbXVzdF9mYWlsIGNvbXBhcmVfcmVmcyBsb2NhbCBzaWduZWQtdGFnIHNlcnZlciBzaWduZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdXNoIHNpZ25lZCB0YWcgd2l0aCBzaWduZWQtdGFncyBjYXBhYmlsaXR5JyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB0YWcgLXMgLW0gc2lnbmVkLXRhZyBzaWduZWQtdGFnLTIgJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfU0lHTkVEX1RBR1M9MSBnaXQgcHVzaCBvcmlnaW4gc2lnbmVkLXRhZy0yCisJKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCBzaWduZWQtdGFnLTIgc2VydmVyIHNpZ25lZC10YWctMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVwZGF0ZSByZWZzJyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHVwZGF0ZSBtYXN0ZXIgJiYKKwllY2hvIHVwZGF0ZSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHVwZGF0ZSAmJgorCWdpdCBwdXNoIG9yaWdpbiB1cGRhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlbW90ZXMvb3JpZ2luL3VwZGF0ZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0ZXN0Z2l0L29yaWdpbi9oZWFkcy91cGRhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlIHJlZnMgZGlzYWJsZWQgYnkgbm8tcHJpdmF0ZS11cGRhdGUnICcKKwkoY2QgbG9jYWwgJiYKKwllY2hvIG1vcmUtdXBkYXRlID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gbW9yZS11cGRhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRlc3RnaXQvb3JpZ2luL2hlYWRzL3VwZGF0ZSA+ZXhwZWN0ICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PX1BSSVZBVEVfVVBEQVRFPXQgZ2l0IHB1c2ggb3JpZ2luIHVwZGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGVzdGdpdC9vcmlnaW4vaGVhZHMvdXBkYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVwZGF0ZSByZWZzIGZhaWx1cmUnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgdXBkYXRlICYmCisJZWNobyAidXBkYXRlIGZhaWwiID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZSBmYWlsIiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGVzdGdpdC9vcmlnaW4vaGVhZHMvdXBkYXRlID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZW52IEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFPSJub24tZmFzdCBmb3J3YXJkIiBcCisJCWdpdCBwdXNoIG9yaWdpbiB1cGRhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRlc3RnaXQvb3JpZ2luL2hlYWRzL3VwZGF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworY2xlYW5fbWFyayAoKSB7CisJY3V0IC1mIDIgLWQgJyAnICIkMSIgfAorCWdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIHwKKwlncmVwIGNvbW1pdCB8CisJc29ydCA+JChiYXNlbmFtZSAiJDEiKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXIgZmFpbHVyZSBjaGVja3MgZm9yIGZldGNoaW5nJyAnCisJKGNkIGxvY2FsICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFPTEgZ2l0IGZldGNoIDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJlcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IiBlcnJvcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGZhaWx1cmUgY2hlY2tzIGZvciBwdXNoaW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbG9jYWwvZ2l0Lm1hcmtzIGxvY2FsL3Rlc3RnaXQubWFya3MiICYmCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNyYXNoIG1hc3RlciAmJgorCWVjaG8gY3Jhc2ggPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBjcmFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfUkVNT1RFX1RFU1RHSVRfRkFJTFVSRT0xIGdpdCBwdXNoIC0tYWxsICYmCisJY2xlYW5fbWFyayAiLmdpdC90ZXN0Z2l0L29yaWdpbi9naXQubWFya3MiICYmCisJY2xlYW5fbWFyayAiLmdpdC90ZXN0Z2l0L29yaWdpbi90ZXN0Z2l0Lm1hcmtzIiAmJgorCXRlc3RfY21wIGdpdC5tYXJrcyB0ZXN0Z2l0Lm1hcmtzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1lc3NhZ2VzJyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ld19icmFuY2ggbWFzdGVyICYmCisJZWNobyBuZXcgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBuZXcgJiYKKwlnaXQgcHVzaCBvcmlnaW4gbmV3X2JyYW5jaCAmJgorCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwllY2hvIG5ldyA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG5ldyAmJgorCWdpdCBwdXNoIG9yaWdpbiBuZXdfYnJhbmNoIDI+IG1zZyAmJgorCSEgZ3JlcCAiXFtuZXcgYnJhbmNoXF0iIG1zZworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggSEVBRCcgJworCShjZCBzZXJ2ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBtb3JlID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gbW9yZQorCSkgJiYKKwkoY2QgbG9jYWwgJiYKKwlnaXQgZmV0Y2ggb3JpZ2luIEhFQUQKKwkpICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBIRUFEIGxvY2FsIEZFVENIX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdXJsJyAnCisJKGNkIHNlcnZlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG1vcmUgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtb3JlCisJKSAmJgorCShjZCBsb2NhbCAmJgorCWdpdCBmZXRjaCAidGVzdGdpdDo6JHtQV0R9Ly4uL3NlcnZlciIKKwkpICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBIRUFEIGxvY2FsIEZFVENIX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdGFnJyAnCisJKGNkIHNlcnZlciAmJgorCSBnaXQgdGFnIHYxLjAKKwkpICYmCisJKGNkIGxvY2FsICYmCisJIGdpdCBmZXRjaAorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgdjEuMCBzZXJ2ZXIgdjEuMAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MDEvZ2l0LXJlbW90ZS10ZXN0Z2l0IGIvdC90NTgwMS9naXQtcmVtb3RlLXRlc3RnaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI5ZjBiNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MDEvZ2l0LXJlbW90ZS10ZXN0Z2l0CkBAIC0wLDAgKzEsMTUxIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEZlbGlwZSBDb250cmVyYXMKKworIyBUaGUgZmlyc3QgYXJndW1lbnQgY2FuIGJlIGEgdXJsIHdoZW4gdGhlIGZldGNoL3B1c2ggY29tbWFuZCB3YXMgYSB1cmwKKyMgaW5zdGVhZCBvZiBhIGNvbmZpZ3VyZWQgcmVtb3RlLiBJbiB0aGlzIGNhc2UsIHVzZSBhIGdlbmVyaWMgYWxpYXMuCitpZiB0ZXN0ICIkMSIgPSAidGVzdGdpdDo6JDIiOyB0aGVuCisJYWxpYXM9XworZWxzZQorCWFsaWFzPSQxCitmaQordXJsPSQyCisKK2Rpcj0iJEdJVF9ESVIvdGVzdGdpdC8kYWxpYXMiCisKK2hfcmVmc3BlYz0icmVmcy9oZWFkcy8qOnJlZnMvdGVzdGdpdC8kYWxpYXMvaGVhZHMvKiIKK3RfcmVmc3BlYz0icmVmcy90YWdzLyo6cmVmcy90ZXN0Z2l0LyRhbGlhcy90YWdzLyoiCisKK2lmIHRlc3QgLW4gIiRHSVRfUkVNT1RFX1RFU1RHSVRfTk9SRUZTUEVDIgordGhlbgorCWhfcmVmc3BlYz0iIgorCXRfcmVmc3BlYz0iIgorZmkKKworR0lUX0RJUj0iJHVybC8uZ2l0IgorZXhwb3J0IEdJVF9ESVIKKworZm9yY2U9CisKK21rZGlyIC1wICIkZGlyIgorCitpZiB0ZXN0IC16ICIkR0lUX1JFTU9URV9URVNUR0lUX05PX01BUktTIgordGhlbgorCWdpdG1hcmtzPSIkZGlyL2dpdC5tYXJrcyIKKwl0ZXN0Z2l0bWFya3M9IiRkaXIvdGVzdGdpdC5tYXJrcyIKKwl0ZXN0IC1lICIkZ2l0bWFya3MiIHx8ID4iJGdpdG1hcmtzIgorCXRlc3QgLWUgIiR0ZXN0Z2l0bWFya3MiIHx8ID4iJHRlc3RnaXRtYXJrcyIKK2ZpCisKK3doaWxlIHJlYWQgbGluZQorZG8KKwljYXNlICRsaW5lIGluCisJY2FwYWJpbGl0aWVzKQorCQllY2hvICdpbXBvcnQnCisJCWVjaG8gJ2V4cG9ydCcKKwkJdGVzdCAtbiAiJGhfcmVmc3BlYyIgJiYgZWNobyAicmVmc3BlYyAkaF9yZWZzcGVjIgorCQl0ZXN0IC1uICIkdF9yZWZzcGVjIiAmJiBlY2hvICJyZWZzcGVjICR0X3JlZnNwZWMiCisJCWlmIHRlc3QgLW4gIiRnaXRtYXJrcyIKKwkJdGhlbgorCQkJZWNobyAiKmltcG9ydC1tYXJrcyAkZ2l0bWFya3MiCisJCQllY2hvICIqZXhwb3J0LW1hcmtzICRnaXRtYXJrcyIKKwkJZmkKKwkJdGVzdCAtbiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9TSUdORURfVEFHUyIgJiYgZWNobyAic2lnbmVkLXRhZ3MiCisJCXRlc3QgLW4gIiRHSVRfUkVNT1RFX1RFU1RHSVRfTk9fUFJJVkFURV9VUERBVEUiICYmIGVjaG8gIm5vLXByaXZhdGUtdXBkYXRlIgorCQllY2hvICdvcHRpb24nCisJCWVjaG8KKwkJOzsKKwlsaXN0KQorCQlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSc/ICUocmVmbmFtZSknICdyZWZzL2hlYWRzLycgJ3JlZnMvdGFncy8nCisJCWhlYWQ9JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpCisJCWVjaG8gIkAkaGVhZCBIRUFEIgorCQllY2hvCisJCTs7CisJaW1wb3J0KikKKwkJIyByZWFkIGFsbCBpbXBvcnQgbGluZXMKKwkJd2hpbGUgdHJ1ZQorCQlkbworCQkJcmVmPSIke2xpbmUjKiB9IgorCQkJcmVmcz0iJHJlZnMgJHJlZiIKKwkJCXJlYWQgbGluZQorCQkJdGVzdCAiJHtsaW5lJSUgKn0iICE9ICJpbXBvcnQiICYmIGJyZWFrCisJCWRvbmUKKworCQlpZiB0ZXN0IC1uICIkZ2l0bWFya3MiCisJCXRoZW4KKwkJCWVjaG8gImZlYXR1cmUgaW1wb3J0LW1hcmtzPSRnaXRtYXJrcyIKKwkJCWVjaG8gImZlYXR1cmUgZXhwb3J0LW1hcmtzPSRnaXRtYXJrcyIKKwkJZmkKKworCQlpZiB0ZXN0IC1uICIkR0lUX1JFTU9URV9URVNUR0lUX0ZBSUxVUkUiCisJCXRoZW4KKwkJCWVjaG8gImZlYXR1cmUgZG9uZSIKKwkJCWV4aXQgMQorCQlmaQorCisJCWVjaG8gImZlYXR1cmUgZG9uZSIKKwkJZ2l0IGZhc3QtZXhwb3J0IFwKKwkJCSR7aF9yZWZzcGVjOisiLS1yZWZzcGVjPSRoX3JlZnNwZWMifSBcCisJCQkke3RfcmVmc3BlYzorIi0tcmVmc3BlYz0kdF9yZWZzcGVjIn0gXAorCQkJJHt0ZXN0Z2l0bWFya3M6KyItLWltcG9ydC1tYXJrcz0kdGVzdGdpdG1hcmtzIn0gXAorCQkJJHt0ZXN0Z2l0bWFya3M6KyItLWV4cG9ydC1tYXJrcz0kdGVzdGdpdG1hcmtzIn0gXAorCQkJJHJlZnMKKwkJZWNobyAiZG9uZSIKKwkJOzsKKwlleHBvcnQpCisJCWlmIHRlc3QgLW4gIiRHSVRfUkVNT1RFX1RFU1RHSVRfRkFJTFVSRSIKKwkJdGhlbgorCQkJIyBjb25zdW1lIGlucHV0IHNvIGZhc3QtZXhwb3J0IGRvZXNuJ3QgZ2V0IFNJR1BJUEU7CisJCQkjIGdpdCB3b3VsZCBhbHNvIG5vdGljZSB0aGF0IGNhc2UsIGJ1dCB3ZSB3YW50CisJCQkjIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgZXhlcmNpc2luZyB0aGUgbGF0ZXIKKwkJCSMgZXJyb3IgY2hlY2tzCisJCQl3aGlsZSByZWFkIGxpbmU7IGRvCisJCQkJdGVzdCAiZG9uZSIgPSAiJGxpbmUiICYmIGJyZWFrCisJCQlkb25lCisJCQlleGl0IDEKKwkJZmkKKworCQliZWZvcmU9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PScgJShyZWZuYW1lKSAlKG9iamVjdG5hbWUpICcpCisKKwkJZ2l0IGZhc3QtaW1wb3J0IFwKKwkJCSR7Zm9yY2U6Ky0tZm9yY2V9IFwKKwkJCSR7dGVzdGdpdG1hcmtzOisiLS1pbXBvcnQtbWFya3M9JHRlc3RnaXRtYXJrcyJ9IFwKKwkJCSR7dGVzdGdpdG1hcmtzOisiLS1leHBvcnQtbWFya3M9JHRlc3RnaXRtYXJrcyJ9IFwKKwkJCS0tcXVpZXQKKworCQkjIGZpZ3VyZSBvdXQgd2hpY2ggcmVmcyB3ZXJlIHVwZGF0ZWQKKwkJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lKSAlKG9iamVjdG5hbWUpJyB8CisJCXdoaWxlIHJlYWQgcmVmIGEKKwkJZG8KKwkJCWNhc2UgIiRiZWZvcmUiIGluCisJCQkqIiAkcmVmICRhICIqKQorCQkJCWNvbnRpbnVlIDs7CSMgdW5jaGFuZ2VkCisJCQllc2FjCisJCQlpZiB0ZXN0IC16ICIkR0lUX1JFTU9URV9URVNUR0lUX1BVU0hfRVJST1IiCisJCQl0aGVuCisJCQkJZWNobyAib2sgJHJlZiIKKwkJCWVsc2UKKwkJCQllY2hvICJlcnJvciAkcmVmICRHSVRfUkVNT1RFX1RFU1RHSVRfUFVTSF9FUlJPUiIKKwkJCWZpCisJCWRvbmUKKworCQllY2hvCisJCTs7CisJb3B0aW9uXCAqKQorCQlyZWFkIGNtZCBvcHQgdmFsIDw8LUVPRgorCQkkbGluZQorCQlFT0YKKwkJY2FzZSAkb3B0IGluCisJCWZvcmNlKQorCQkJdGVzdCAkdmFsID0gInRydWUiICYmIGZvcmNlPSJ0cnVlIiB8fCBmb3JjZT0KKwkJCWVjaG8gIm9rIgorCQkJOzsKKwkJKikKKwkJCWVjaG8gInVuc3VwcG9ydGVkIgorCQkJOzsKKwkJZXNhYworCQk7OworCScnKQorCQlleGl0CisJCTs7CisJZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgwMi1jb25uZWN0LWhlbHBlci5zaCBiL3QvdDU4MDItY29ubmVjdC1oZWxwZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzZjMjY2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MDItY29ubmVjdC1oZWxwZXIuc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdleHQ6OmNtZCByZW1vdGUgImNvbm5lY3QiIGhlbHBlcicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHByb3RvY29sLmV4dC5hbGxvdyB1c2VyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gc2Vjb25kICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHRoaXJkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSAidGlwIHRocmVlIiB0aHJlZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvdXJ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGNsb25lICcKKwljbWQ9JChlY2hvICJlY2hvID4mMiBleHQ6OnNoIGludm9rZWQgJiYgJVMgLi4iIHwgc2VkIC1lICJzLyAvJSAvZyIpICYmCisJZ2l0IGNsb25lICJleHQ6OnNoIC1jICVTJSAuIiBkc3QgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHJlZnMvdGFncy8gPmV4cGVjdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgImV4dDo6c2ggLWMgJGNtZCIgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyByZWZzL3RhZ3MvCisJKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZm9sbG93aW5nIHRhZycgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmaWZ0aCAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gInRpcCBmaXZlIiBmaXZlICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyByZWZzL3RhZ3MvID5leHBlY3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHJlZnMvdGFncy8gPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBiYWNrZmlsbGVkIHRhZycgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBzaXh0aCAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gInRpcCB0d28iIHR3byB0aHJlZV4xICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyByZWZzL3RhZ3MvID5leHBlY3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHJlZnMvdGFncy8gPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBiYWNrZmlsbGVkIHRhZyB3aXRob3V0IHByaW1hcnkgdHJhbnNmZXInICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIC1hIC1tICJ0aXAgb25lICIgb25lIHR3b14xICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyByZWZzL3RhZ3MvID5leHBlY3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvIHJlZnMvdGFncy8gPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZha2UgZ2l0LWRhZW1vbicgJworCW1rZGlyIHJlbW90ZSAmJgorCWdpdCBpbml0IC0tYmFyZSByZW1vdGUvb25lLmdpdCAmJgorCW1rZGlyIHJlbW90ZS9ob3N0ICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlbW90ZS9ob3N0L3R3by5naXQgJiYKKwl3cml0ZV9zY3JpcHQgZmFrZS1kYWVtb24gPDwtXEVPRiAmJgorCWdpdCBkYWVtb24gLS1pbmV0ZCBcCisJCS0taW5mb3JtYXRpdmUtZXJyb3JzIFwKKwkJLS1leHBvcnQtYWxsIFwKKwkJLS1iYXNlLXBhdGg9IiRUUkFTSF9ESVJFQ1RPUlkvcmVtb3RlIiBcCisJCS0taW50ZXJwb2xhdGVkLXBhdGg9IiRUUkFTSF9ESVJFQ1RPUlkvcmVtb3RlLyVIJUQiIFwKKwkJIiRUUkFTSF9ESVJFQ1RPUlkvcmVtb3RlIgorCUVPRgorCWV4cG9ydCBUUkFTSF9ESVJFQ1RPUlkgJiYKKwlQQVRIPSRUUkFTSF9ESVJFQ1RPUlk6JFBBVEgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0IGNvbW1hbmQgY2FuIGNvbm5lY3QgdG8gZ2l0IGRhZW1vbiAobm8gdmhvc3QpJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBjbG9uZSAiZXh0OjpmYWtlLWRhZW1vbiAlRy9vbmUuZ2l0IiBkc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0IGNvbW1hbmQgY2FuIGNvbm5lY3QgdG8gZ2l0IGRhZW1vbiAodmhvc3QpJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBjbG9uZSAiZXh0OjpmYWtlLWRhZW1vbiAlRy90d28uZ2l0ICVWaG9zdCIgZHN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgxMC1wcm90by1kaXNhYmxlLWxvY2FsLnNoIGIvdC90NTgxMC1wcm90by1kaXNhYmxlLWxvY2FsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxZWY5OWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1ODEwLXByb3RvLWRpc2FibGUtbG9jYWwuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGlzYWJsaW5nIG9mIGxvY2FsIHBhdGhzIGluIGNsb25lL2ZldGNoJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLXByb3RvLWRpc2FibGUuc2giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgdG8gY2xvbmUnICcKKwl0ZXN0X2NvbW1pdCBvbmUKKycKKwordGVzdF9wcm90byAiZmlsZTovLyIgZmlsZSAiZmlsZTovLyRQV0QiCit0ZXN0X3Byb3RvICJwYXRoIiBmaWxlIC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbyB3aXRoIGRhc2gnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVwby5naXQgJiYKKwlnaXQgcHVzaCByZXBvLmdpdCBIRUFEICYmCisJbXYgcmVwby5naXQgIiRQV0QvLXJlcG8uZ2l0IgorJworCisjIFRoaXMgd2lsbCBmYWlsIGV2ZW4gd2l0aG91dCBvdXIgcmVqZWN0aW9uIGJlY2F1c2UgdXBsb2FkLXBhY2sgd2lsbAorIyBjb21wbGFpbiBhYm91dCB0aGUgYm9ndXMgb3B0aW9uLiBTbyBsZXQncyBtYWtlIHN1cmUgdGhhdCBHSVRfVFJBQ0UKKyMgZG9lc24ndCBzaG93IHVzIGV2ZW4gcnVubmluZyB1cGxvYWQtcGFjay4KKyMKKyMgV2UgbXVzdCBhbHNvIGJlIHN1cmUgdG8gdXNlICJmZXRjaCIgYW5kIG5vdCAiY2xvbmUiIGhlcmUsIGFzIHRoZSBsYXR0ZXIKKyMgYWN0dWFsbHkgY2Fub25pY2FsaXplcyBvdXIgaW5wdXQgaW50byBhbiBhYnNvbHV0ZSBwYXRoICh3aGljaCBpcyBmaW5lCisjIHRvIGFsbG93KS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcG8gbmFtZXMgc3RhcnRpbmcgd2l0aCBkYXNoIGFyZSByZWplY3RlZCcgJworCXJtIC1mIHRyYWNlLm91dCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVFJBQ0U9IiRQV0QvdHJhY2Uub3V0IiBnaXQgZmV0Y2ggLS0gLXJlcG8uZ2l0ICYmCisJISBncmVwIHVwbG9hZC1wYWNrIHRyYWNlLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdWxsIHBhdGhzIHN0aWxsIHdvcmsnICcKKwlnaXQgZmV0Y2ggIiRQV0QvLXJlcG8uZ2l0IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MTEtcHJvdG8tZGlzYWJsZS1naXQuc2ggYi90L3Q1ODExLXByb3RvLWRpc2FibGUtZ2l0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhYzZiMmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1ODExLXByb3RvLWRpc2FibGUtZ2l0LnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpc2FibGluZyBvZiBnaXQtb3Zlci10Y3AgaW4gY2xvbmUvZmV0Y2gnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItcHJvdG8tZGlzYWJsZS5zaCIKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ2l0LWRhZW1vbi5zaCIKK3N0YXJ0X2dpdF9kYWVtb24KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGdpdC1hY2Nlc3NpYmxlIHJlcG8nICcKKwliYXJlPSIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IC0tYmFyZSBpbml0ICIkYmFyZSIgJiYKKwlnaXQgcHVzaCAiJGJhcmUiIEhFQUQgJiYKKwk+IiRiYXJlL2dpdC1kYWVtb24tZXhwb3J0LW9rIiAmJgorCWdpdCAtQyAiJGJhcmUiIGNvbmZpZyBkYWVtb24ucmVjZWl2ZXBhY2sgdHJ1ZQorJworCit0ZXN0X3Byb3RvICJnaXQ6Ly8iIGdpdCAiJEdJVF9EQUVNT05fVVJML3JlcG8uZ2l0IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MTItcHJvdG8tZGlzYWJsZS1odHRwLnNoIGIvdC90NTgxMi1wcm90by1kaXNhYmxlLWh0dHAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWY4NzcyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MTItcHJvdG8tZGlzYWJsZS1odHRwLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpc2FibGluZyBvZiBnaXQtb3Zlci1odHRwIGluIGNsb25lL2ZldGNoJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLXByb3RvLWRpc2FibGUuc2giCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWh0dHBkLnNoIgorc3RhcnRfaHR0cGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGdpdC1hY2Nlc3NpYmxlIHJlcG8nICcKKwliYXJlPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCAtLWJhcmUgaW5pdCAiJGJhcmUiICYmCisJZ2l0IHB1c2ggIiRiYXJlIiBIRUFEICYmCisJZ2l0IC1DICIkYmFyZSIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZQorJworCit0ZXN0X3Byb3RvICJzbWFydCBodHRwIiBodHRwICIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXJsIHJlZGlyZWN0cyByZXNwZWN0IHdoaXRlbGlzdCcgJworCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfQUxMT1dfUFJPVE9DT0w9aHR0cDpodHRwcyBcCisJCQkgICBHSVRfU01BUlRfSFRUUD0wIFwKKwkJZ2l0IGNsb25lICIkSFRUUERfVVJML2Z0cC1yZWRpci9yZXBvLmdpdCIgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1FICIoZnRwLipkaXNhYmxlZHx5b3VyIGN1cmwgdmVyc2lvbiBpcyB0b28gb2xkKSIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1cmwgbGltaXRzIHJlZGlyZWN0cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiJEhUVFBEX1VSTC9sb29wLXJlZGlyL3NtYXJ0L3JlcG8uZ2l0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGNhbiBiZSBsaW1pdGVkIHRvIGZyb20tdXNlcicgJworCWdpdCAtYyBwcm90b2NvbC5odHRwLmFsbG93PXVzZXIgXAorCQljbG9uZSAiJEhUVFBEX1VSTC9zbWFydC9yZXBvLmdpdCIgcGxhaW4uZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHByb3RvY29sLmh0dHAuYWxsb3c9dXNlciBcCisJCWNsb25lICIkSFRUUERfVVJML3NtYXJ0LXJlZGlyLXBlcm0vcmVwby5naXQiIHJlZGlyLmdpdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MTMtcHJvdG8tZGlzYWJsZS1zc2guc2ggYi90L3Q1ODEzLXByb3RvLWRpc2FibGUtc3NoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmMDg0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1ODEzLXByb3RvLWRpc2FibGUtc3NoLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpc2FibGluZyBvZiBnaXQtb3Zlci1zc2ggaW4gY2xvbmUvZmV0Y2gnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItcHJvdG8tZGlzYWJsZS5zaCIKKworc2V0dXBfc3NoX3dyYXBwZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSB0byBjbG9uZScgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCW1rZGlyIHJlbW90ZSAmJgorCWdpdCBpbml0IC0tYmFyZSByZW1vdGUvcmVwby5naXQgJiYKKwlnaXQgcHVzaCByZW1vdGUvcmVwby5naXQgSEVBRAorJworCit0ZXN0X3Byb3RvICJob3N0OnBhdGgiIHNzaCAicmVtb3RlOnJlcG8uZ2l0IgordGVzdF9wcm90byAic3NoOi8vIiBzc2ggInNzaDovL3JlbW90ZSRQV0QvcmVtb3RlL3JlcG8uZ2l0IgordGVzdF9wcm90byAiZ2l0K3NzaDovLyIgc3NoICJnaXQrc3NoOi8vcmVtb3RlJFBXRC9yZW1vdGUvcmVwby5naXQiCisKKyMgRG9uJ3QgZXZlbiBib3RoZXIgc2V0dGluZyB1cCBhICItcmVtb3RlIiBkaXJlY3RvcnksIGFzIHNzaCB3b3VsZCBnZW5lcmFsbHkKKyMgY29tcGxhaW4gYWJvdXQgdGhlIGJvZ3VzIG9wdGlvbiByYXRoZXIgdGhhbiBjb21wbGV0aW5nIG91ciByZXF1ZXN0LiBPdXIKKyMgZmFrZSB3cmFwcGVyIGFjdHVhbGx5IF9jYW5fIGhhbmRsZSB0aGlzIGNhc2UsIGJ1dCBpdCdzIG1vcmUgcm9idXN0IHRvCisjIHNpbXBseSBjb25maXJtIGZyb20gaXRzIG91dHB1dCB0aGF0IGl0IGRpZCBub3QgcnVuIGF0IGFsbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvc3RuYW1lcyBzdGFydGluZyB3aXRoIGRhc2ggYXJlIHJlamVjdGVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHNzaDovLy1yZW1vdGUvcmVwby5naXQgZGFzaC1ob3N0IDI+c3RkZXJyICYmCisJISBncmVwIF5zc2g6IHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvIHdpdGggZGFzaCcgJworCWdpdCBpbml0IC0tYmFyZSByZW1vdGUvLXJlcG8uZ2l0ICYmCisJZ2l0IHB1c2ggcmVtb3RlLy1yZXBvLmdpdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcG8gbmFtZXMgc3RhcnRpbmcgd2l0aCBkYXNoIGFyZSByZWplY3RlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSByZW1vdGU6LXJlcG8uZ2l0IGRhc2gtcGF0aCAyPnN0ZGVyciAmJgorCSEgZ3JlcCBec3NoOiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVsbCBwYXRocyBzdGlsbCB3b3JrJyAnCisJZ2l0IGNsb25lICJyZW1vdGU6JFBXRC9yZW1vdGUvLXJlcG8uZ2l0IiBkYXNoLXBhdGgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1ODE0LXByb3RvLWRpc2FibGUtZXh0LnNoIGIvdC90NTgxNC1wcm90by1kaXNhYmxlLWV4dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZDZmN2RmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTgxNC1wcm90by1kaXNhYmxlLWV4dC5zaApAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBkaXNhYmxpbmcgb2YgcmVtb3RlLWhlbHBlciBwYXRocyBpbiBjbG9uZS9mZXRjaCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1wcm90by1kaXNhYmxlLnNoIgorCitzZXR1cF9leHRfd3JhcHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IHRvIGNsb25lJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJbWtkaXIgcmVtb3RlICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlbW90ZS9yZXBvLmdpdCAmJgorCWdpdCBwdXNoIHJlbW90ZS9yZXBvLmdpdCBIRUFECisnCisKK3Rlc3RfcHJvdG8gInJlbW90ZS1oZWxwZXIiIGV4dCAiZXh0OjpmYWtlLXJlbW90ZSAlUyByZXBvLmdpdCIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1ODE1LXN1Ym1vZHVsZS1wcm90b3Muc2ggYi90L3Q1ODE1LXN1Ym1vZHVsZS1wcm90b3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZmNTVhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MTUtc3VibW9kdWxlLXByb3Rvcy5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBwcm90b2NvbCB3aGl0ZWxpc3Rpbmcgd2l0aCBzdWJtb2R1bGVzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1wcm90by1kaXNhYmxlLnNoCisKK3NldHVwX2V4dF93cmFwcGVyCitzZXR1cF9zc2hfd3JhcHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IHdpdGggc3VibW9kdWxlcycgJworCW1rZGlyIHJlbW90ZSAmJgorCWdpdCBpbml0IHJlbW90ZS9yZXBvLmdpdCAmJgorCShjZCByZW1vdGUvcmVwby5naXQgJiYgdGVzdF9jb21taXQgb25lKSAmJgorCSMgc3VibW9kdWxlLWFkZCBzaG91bGQgcHJvYmFibHkgdHJ1c3Qgd2hhdCB3ZSBmZWVkIGl0IG9uIHRoZSBjbWRsaW5lLAorCSMgYnV0IGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBvdmVybHkgY29uc2VydmF0aXZlLgorCUdJVF9BTExPV19QUk9UT0NPTD1zc2ggZ2l0IHN1Ym1vZHVsZSBhZGQgcmVtb3RlOnJlcG8uZ2l0IHNzaC1tb2R1bGUgJiYKKwlHSVRfQUxMT1dfUFJPVE9DT0w9ZXh0IGdpdCBzdWJtb2R1bGUgYWRkICJleHQ6OmZha2UtcmVtb3RlICVTIHJlcG8uZ2l0IiBleHQtbW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1Ym1vZHVsZXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggcmVjdXJzZS1zdWJtb2R1bGVzIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC4gZHN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGluZGl2aWR1YWwgdXBkYXRlcycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgY2xvbmUgLiBkc3QgJiYKKwlnaXQgLUMgZHN0IHN1Ym1vZHVsZSBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBvZiBzc2ggYWxsb3dlZCcgJworCWdpdCAtQyBkc3Qgc3VibW9kdWxlIHVwZGF0ZSBzc2gtbW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBvZiBleHQgbm90IGFsbG93ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZHN0IHN1Ym1vZHVsZSB1cGRhdGUgZXh0LW1vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2VyIGNhbiBvdmVycmlkZSB3aGl0ZWxpc3QnICcKKwlHSVRfQUxMT1dfUFJPVE9DT0w9ZXh0IGdpdCAtQyBkc3Qgc3VibW9kdWxlIHVwZGF0ZSBleHQtbW9kdWxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTkwMC1yZXBvLXNlbGVjdGlvbi5zaCBiL3QvdDU5MDAtcmVwby1zZWxlY3Rpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTRlNTljNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU5MDAtcmVwby1zZWxlY3Rpb24uc2gKQEAgLTAsMCArMSwxMDAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzZWxlY3RpbmcgcmVtb3RlIHJlcG8gaW4gYW1iaWd1b3VzIGNhc2VzJworLiAuL3Rlc3QtbGliLnNoCisKK3Jlc2V0KCkgeworCXJtIC1yZiBmb28gZm9vLmdpdCBmZXRjaCBjbG9uZQorfQorCittYWtlX3RyZWUoKSB7CisJZ2l0IGluaXQgIiQxIiAmJgorCShjZCAiJDEiICYmIHRlc3RfY29tbWl0ICIkMSIpCit9CisKK21ha2VfYmFyZSgpIHsKKwlnaXQgaW5pdCAtLWJhcmUgIiQxIiAmJgorCShjZCAiJDEiICYmCisJIHRyZWU9JChnaXQgaGFzaC1vYmplY3QgLXcgLXQgdHJlZSAvZGV2L251bGwpICYmCisJIGNvbW1pdD0kKGVjaG8gIiQxIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwkgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0CisJKQorfQorCitnZXQoKSB7CisJZ2l0IGluaXQgLS1iYXJlIGZldGNoICYmCisJKGNkIGZldGNoICYmIGdpdCBmZXRjaCAiLi4vJDEiKSAmJgorCWdpdCBjbG9uZSAiJDEiIGNsb25lCit9CisKK2NoZWNrKCkgeworCWVjaG8gIiQxIiA+ZXhwZWN0ICYmCisJKGNkIGZldGNoICYmIGdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgRkVUQ0hfSEVBRCkgPmFjdHVhbC5mZXRjaCAmJgorCShjZCBjbG9uZSAmJiBnaXQgbG9nIC0xIC0tZm9ybWF0PSVzIEhFQUQpID5hY3R1YWwuY2xvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZldGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5jbG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIC5naXQgZGlyIGluIHdvcmt0cmVlJyAnCisJcmVzZXQgJiYKKwltYWtlX3RyZWUgZm9vICYmCisJZ2V0IGZvbyAmJgorCWNoZWNrIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvbWFnaWNhbGx5IGFkZCAuZ2l0IHN1ZmZpeCcgJworCXJlc2V0ICYmCisJbWFrZV9iYXJlIGZvby5naXQgJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvbWFnaWNhbGx5IGFkZCAuZ2l0IHN1ZmZpeCB0byB3b3JrdHJlZScgJworCXJlc2V0ICYmCisJbWFrZV90cmVlIGZvby5naXQgJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmZXIgd29ya3RyZWUgZm9vIG92ZXIgYmFyZSBmb28uZ2l0JyAnCisJcmVzZXQgJiYKKwltYWtlX3RyZWUgZm9vICYmCisJbWFrZV9iYXJlIGZvby5naXQgJiYKKwlnZXQgZm9vICYmCisJY2hlY2sgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZlciBiYXJlIGZvbyBvdmVyIGJhcmUgZm9vLmdpdCcgJworCXJlc2V0ICYmCisJbWFrZV9iYXJlIGZvbyAmJgorCW1ha2VfYmFyZSBmb28uZ2l0ICYmCisJZ2V0IGZvbyAmJgorCWNoZWNrIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGUgd2l0aCBmdWxsIGZvby5naXQnICcKKwlyZXNldCAmJgorCW1ha2VfYmFyZSBmb28gJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCWdldCBmb28uZ2l0ICYmCisJY2hlY2sgZm9vLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3ZSBhcmUgbm90IGZvb2xlZCBieSBub24tZ2l0IGZvbyBkaXJlY3RvcnknICcKKwlyZXNldCAmJgorCW1ha2VfYmFyZSBmb28uZ2l0ICYmCisJbWtkaXIgZm9vICYmCisJZ2V0IGZvbyAmJgorCWNoZWNrIGZvby5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlZmVyIGlubmVyIC5naXQgb3ZlciBvdXRlciBiYXJlJyAnCisJcmVzZXQgJiYKKwltYWtlX3RyZWUgZm9vICYmCisJbWFrZV9iYXJlIGZvby5naXQgJiYKKwltdiBmb28vLmdpdCBmb28uZ2l0ICYmCisJZ2V0IGZvby5naXQgJiYKKwljaGVjayBmb28KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDAwLXJldi1saXN0LW1pc2Muc2ggYi90L3Q2MDAwLXJldi1saXN0LW1pc2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2RjMWFkOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDAtcmV2LWxpc3QtbWlzYy5zaApAQCAtMCwwICsxLDE2NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21pc2NlbGxhbmVvdXMgcmV2LWxpc3QgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGNvbnRlbnQxID53YW50ZWRfZmlsZSAmJgorCWVjaG8gY29udGVudDIgPnVud2FudGVkX2ZpbGUgJiYKKwlnaXQgYWRkIHdhbnRlZF9maWxlIHVud2FudGVkX2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLW9iamVjdHMgaGVlZHMgcGF0aHNwZWNzJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFEIC0tIHdhbnRlZF9maWxlID5vdXRwdXQgJiYKKwlncmVwIHdhbnRlZF9maWxlIG91dHB1dCAmJgorCSEgZ3JlcCB1bndhbnRlZF9maWxlIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLW9iamVjdHMgd2l0aCBwYXRoc3BlY3MgYW5kIGRlZXBlciBwYXRocycgJworCW1rZGlyIGZvbyAmJgorCT5mb28vZmlsZSAmJgorCWdpdCBhZGQgZm9vL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHR3byAmJgorCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFEIC0tIGZvbyA+b3V0cHV0ICYmCisJZ3JlcCBmb28vZmlsZSBvdXRwdXQgJiYKKworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCAtLSBmb28vZmlsZSA+b3V0cHV0ICYmCisJZ3JlcCBmb28vZmlsZSBvdXRwdXQgJiYKKwkhIGdyZXAgdW53YW50ZWRfZmlsZSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1vYmplY3RzIHdpdGggcGF0aHNwZWNzIGFuZCBjb3BpZWQgZmlsZXMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4ganVuaW8tdGVzdGNhc2UgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKworCW1rZGlyIHR3byAmJgorCWVjaG8gZnJvdHogPm9uZSAmJgorCWNwIG9uZSB0d28vdGhyZWUgJiYKKwlnaXQgYWRkIG9uZSB0d28vdGhyZWUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRoYXQgJiYKKworCU9ORT0kKGdpdCByZXYtcGFyc2UgSEVBRDpvbmUpICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFEIHR3byA+b3V0cHV0ICYmCisJZ3JlcCAiJE9ORSB0d28vdGhyZWUiIG91dHB1dCAmJgorCSEgZ3JlcCBvbmUgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tb2JqZWN0cyAtLW5vLW9iamVjdC1uYW1lcyBoYXMgbm8gc3BhY2UvbmFtZXMnICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tbm8tb2JqZWN0LW5hbWVzIEhFQUQgPm91dHB1dCAmJgorCSEgZ3JlcCB3YW50ZWRfZmlsZSBvdXRwdXQgJiYKKwkhIGdyZXAgdW53YW50ZWRfZmlsZSBvdXRwdXQgJiYKKwkhIGdyZXAgIiAiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLW9iamVjdHMgLS1uby1vYmplY3QtbmFtZXMgd29ya3Mgd2l0aCBjYXQtZmlsZScgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1uby1vYmplY3QtbmFtZXMgLS1hbGwgPmxpc3Qtb3V0cHV0ICYmCisJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgPGxpc3Qtb3V0cHV0ID5jYXQtb3V0cHV0ICYmCisJISBncmVwIG1pc3NpbmcgY2F0LW91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLW9iamVjdC1uYW1lcyBhbmQgLS1vYmplY3QtbmFtZXMgYXJlIGxhc3Qtb25lLXdpbnMnICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tbm8tb2JqZWN0LW5hbWVzIC0tb2JqZWN0LW5hbWVzIC0tYWxsID5vdXRwdXQgJiYKKwlncmVwIHdhbnRlZF9maWxlIG91dHB1dCAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1vYmplY3QtbmFtZXMgLS1uby1vYmplY3QtbmFtZXMgLS1hbGwgPm91dHB1dCAmJgorCSEgZ3JlcCB3YW50ZWRfZmlsZSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgQS4uQiBhbmQgcmV2LWxpc3QgXkEgQiBhcmUgdGhlIHNhbWUnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYW5vdGhlciAmJgorCWdpdCB0YWcgLWEgLW0gImFubm90YXRlZCIgdjEuMCAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgXnYxLjBeIHYxLjAgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgdjEuMF4uLnYxLjAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGFnYXRlIHVuaW50ZXJlc3RpbmcgZmxhZyBkb3duIGNvcnJlY3RseScgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgXkhFQURee3RyZWV9IEhFQURee3RyZWV9ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWxlZnQgZmxhZyBiaXQgaXMgcHJvcGFnYXRlZCBkb3duIGZyb20gdGFnJyAnCisJZ2l0IGxvZyAtLWZvcm1hdD0iJW0gJXMiIC0tbGVmdC1yaWdodCB2MS4wLi4ubWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPiB0d28KKwk+IG9uZQorCTwgYW5vdGhlcgorCTwgdGhhdAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgY2FuIHNob3cgaW5kZXggb2JqZWN0cycgJworCSMgT2YgdGhlIGJsb2JzIGFuZCB0cmVlcyBpbiB0aGUgaW5kZXgsIG5vdGU6CisJIworCSMgICAtIHdlIGRvIG5vdCBzaG93IHR3by90aHJlZSwgYmVjYXVzZSBpdCBpcyB0aGUKKwkjICAgICBzYW1lIGJsb2IgYXMgIm9uZSIsIGFuZCB3ZSBzaG93IG9iamVjdHMgb25seSBvbmNlCisJIworCSMgICAtIHdlIGRvIHNob3cgdGhlIHRyZWUgInR3byIsIGJlY2F1c2UgaXQgaGFzIGEgdmFsaWQgY2FjaGUgdHJlZQorCSMgICAgIGZyb20gdGhlIGxhc3QgY29tbWl0CisJIworCSMgICAtIHdlIGRvIG5vdCBzaG93IHRoZSByb290IHRyZWU7IHNpbmNlIHdlIHVwZGF0ZWQgdGhlIGluZGV4LCBpdAorCSMgICAgIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjYWNoZSB0cmVlCisJIworCWVjaG8gb25seS1pbi1pbmRleCA+b25seS1pbi1pbmRleCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlyZXYxPSQoZ2l0IHJldi1wYXJzZSBIRUFEOm9uZSkgJiYKKwlyZXYyPSQoZ2l0IHJldi1wYXJzZSBIRUFEOnR3bykgJiYKKwlyZXZpPSQoZ2l0IGhhc2gtb2JqZWN0IG9ubHktaW4taW5kZXgpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHJldjEgb25lCisJJHJldmkgb25seS1pbi1pbmRleAorCSRyZXYyIHR3bworCUVPRgorCWdpdCBhZGQgb25seS1pbi1pbmRleCAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1pbmRleGVkLW9iamVjdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgY2FuIG5lZ2F0ZSBpbmRleCBvYmplY3RzJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLTEgLS1vYmplY3RzIEhFQUQgLS1ub3QgLS1pbmRleGVkLW9iamVjdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1iaXNlY3QgYW5kIC0tZmlyc3QtcGFyZW50IGNhbiBub3QgYmUgY29tYmluZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1iaXNlY3QgLS1maXJzdC1wYXJlbnQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWhlYWRlciBzaG93cyBhIE5VTCBhZnRlciBlYWNoIGNvbW1pdCcgJworCSMgV2Uga25vdyB0aGF0IHRoZXJlIGlzIG5vIFEgaW4gdGhlIHRydWUgcGF5bG9hZDsgbmFtZXMgYW5kCisJIyBhZGRyZXNzZXMgb2YgdGhlIGF1dGhvcnMgYW5kIHRoZSBjb21taXR0ZXJzIGRvIG5vdCBoYXZlCisJIyBhbnksIGFuZCBvYmplY3QgbmFtZXMgb3IgaGVhZGVyIG5hbWVzIGRvIG5vdCwgZWl0aGVyLgorCWdpdCByZXYtbGlzdCAtLWhlYWRlciAtLW1heC1jb3VudD0yIEhFQUQgfAorCW51bF90b19xIHwKKwlncmVwICJeUSIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVEkKGdpdCByZXYtcGFyc2UgSEVBRH4xKQorCVEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZW5kLW9mLW9wdGlvbnMnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzLy0tb3V0cHV0PXlpa2VzIEhFQUQgJiYKKwlnaXQgcmV2LWxpc3QgLS1lbmQtb2Ytb3B0aW9ucyAtLW91dHB1dD15aWtlcyA+YWN0dWFsICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgeWlrZXMgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWNvdW50JyAnCisJY291bnQ9JChnaXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEKSAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkY291bnQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tY291bnQgLS1vYmplY3RzJyAnCisJY291bnQ9JChnaXQgcmV2LWxpc3QgLS1jb3VudCAtLW9iamVjdHMgSEVBRCkgJiYKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICRjb3VudCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDAxLXJldi1saXN0LWdyYWZ0LnNoIGIvdC90NjAwMS1yZXYtbGlzdC1ncmFmdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTA0YmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwMS1yZXYtbGlzdC1ncmFmdC5zaApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1JldmlzaW9uIHRyYXZlcnNhbCB2cyBncmFmdHMgYW5kIHBhdGggbGltaXRlcicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIHN1YmRpciAmJgorCWVjaG8gPmZpbGVBIGZpbGVBICYmCisJZWNobyA+c3ViZGlyL2ZpbGVCIGZpbGVCICYmCisJZ2l0IGFkZCBmaWxlQSBzdWJkaXIvZmlsZUIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsIGluIG9uZSBoaXN0b3J5LiIgJiYKKwlBMD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKworCWVjaG8gPmZpbGVBIGZpbGVBIG1vZGlmaWVkICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kIGluIG9uZSBoaXN0b3J5LiIgJiYKKwlBMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKworCWVjaG8gPnN1YmRpci9maWxlQiBmaWxlQiBtb2RpZmllZCAmJgorCWdpdCBjb21taXQgLWEgLW0gIlRoaXJkIGluIG9uZSBoaXN0b3J5LiIgJiYKKwlBMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKworCXJtIC1mIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9pbmRleCAmJgorCisJZWNobyA+ZmlsZUEgZmlsZUEgYWdhaW4gJiYKKwllY2hvID5zdWJkaXIvZmlsZUIgZmlsZUIgYWdhaW4gJiYKKwlnaXQgYWRkIGZpbGVBIHN1YmRpci9maWxlQiAmJgorCWdpdCBjb21taXQgLWEgLW0gIkluaXRpYWwgaW4gYWx0ZXJuYXRlIGhpc3RvcnkuIiAmJgorCUIwPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJZWNobyA+ZmlsZUEgZmlsZUEgbW9kaWZpZWQgaW4gYWx0ZXJuYXRlIGhpc3RvcnkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJTZWNvbmQgaW4gYWx0ZXJuYXRlIGhpc3RvcnkuIiAmJgorCUIxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJZWNobyA+c3ViZGlyL2ZpbGVCIGZpbGVCIG1vZGlmaWVkIGluIGFsdGVybmF0ZSBoaXN0b3J5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiVGhpcmQgaW4gYWx0ZXJuYXRlIGhpc3RvcnkuIiAmJgorCUIyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCTogZG9uZQorJworCitjaGVjayAoKSB7CisJdHlwZT0kMQorCXNoaWZ0CisKKwlhcmc9CisJd2hpY2g9YXJnCisJcm0gLWYgdGVzdC5leHBlY3QKKwlmb3IgYQorCWRvCisJCWlmIHRlc3QgInokYSIgPSB6LS0KKwkJdGhlbgorCQkJd2hpY2g9ZXhwZWN0CisJCQljaGlsZD0KKwkJCWNvbnRpbnVlCisJCWZpCisJCWlmIHRlc3QgIiR3aGljaCIgPSBhcmcKKwkJdGhlbgorCQkJYXJnPSIkYXJnJGEgIgorCQkJY29udGludWUKKwkJZmkKKwkJaWYgdGVzdCAiJHR5cGUiID0gYmFzaWMKKwkJdGhlbgorCQkJZWNobyAiJGEiCisJCWVsc2UKKwkJCWlmIHRlc3QgInokY2hpbGQiICE9IHoKKwkJCXRoZW4KKwkJCQllY2hvICIkY2hpbGQgJGEiCisJCQlmaQorCQkJY2hpbGQ9IiRhIgorCQlmaQorCWRvbmUgPnRlc3QuZXhwZWN0CisJaWYgdGVzdCAiJHR5cGUiICE9IGJhc2ljICYmIHRlc3QgInokY2hpbGQiICE9IHoKKwl0aGVuCisJCWVjaG8gPj50ZXN0LmV4cGVjdCAkY2hpbGQKKwlmaQorCWlmIHRlc3QgJHR5cGUgPSBiYXNpYworCXRoZW4KKwkJZ2l0IHJldi1saXN0ICRhcmcgPnRlc3QuYWN0dWFsCisJZWxpZiB0ZXN0ICR0eXBlID0gcGFyZW50cworCXRoZW4KKwkJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAkYXJnID50ZXN0LmFjdHVhbAorCWVsaWYgdGVzdCAkdHlwZSA9IHBhcmVudHMtcmF3CisJdGhlbgorCQlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0tcHJldHR5PXJhdyAkYXJnIHwKKwkJc2VkIC1uIC1lICdzL15jb21taXQgLy9wJyA+dGVzdC5hY3R1YWwKKwlmaQorCXRlc3RfY21wIHRlc3QuZXhwZWN0IHRlc3QuYWN0dWFsCit9CisKK2ZvciB0eXBlIGluIGJhc2ljIHBhcmVudHMgcGFyZW50cy1yYXcKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCBncmFmdHMnICIKKwkJcm0gLWYgLmdpdC9pbmZvL2dyYWZ0cyAmJgorCQljaGVjayAkdHlwZSAkQjIgLS0gJEIyICRCMSAkQjAKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGdyYWZ0cycgIgorCQllY2hvICckQjAgJEEyJyA+LmdpdC9pbmZvL2dyYWZ0cyAmJgorCQljaGVjayAkdHlwZSAkQjIgLS0gJEIyICRCMSAkQjAgJEEyICRBMSAkQTAKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IGdyYWZ0cywgd2l0aCBwYXRobGltaXQnICIKKwkJcm0gLWYgLmdpdC9pbmZvL2dyYWZ0cyAmJgorCQljaGVjayAkdHlwZSAkQjIgc3ViZGlyIC0tICRCMiAkQjAKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGdyYWZ0cywgd2l0aCBwYXRobGltaXQnICIKKwkJZWNobyAnJEIwICRBMicgPi5naXQvaW5mby9ncmFmdHMgJiYKKwkJY2hlY2sgJHR5cGUgJEIyIHN1YmRpciAtLSAkQjIgJEIwICRBMiAkQTAKKwkiCisKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBhZHZpY2UgdGhhdCBncmFmdHMgYXJlIGRlcHJlY2F0ZWQnICcKKwlnaXQgc2hvdyBIRUFEIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZ2l0IHJlcGxhY2UiIGVyciAmJgorCXRlc3RfY29uZmlnIGFkdmljZS5ncmFmdEZpbGVEZXByZWNhdGVkIGZhbHNlICYmCisJZ2l0IHNob3cgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiZ2l0IHJlcGxhY2UiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoIGIvdC90NjAwMi1yZXYtbGlzdC1iaXNlY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTY2MTQwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCkBAIC0wLDAgKzEsMjY2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvbiBTZXltb3VyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBnaXQgcmV2LWxpc3QgLS1iaXNlY3QgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10NjAwMC5zaCAjIHQ2eHh4IHNwZWNpZmljIGZ1bmN0aW9ucworCisjIHVzYWdlOiB0ZXN0X2Jpc2VjdGlvbiBtYXgtZGlmZiBiaXNlY3Qtb3B0aW9uIGhlYWQgXnBydW5lLi4uCisjCisjIGUuZy4gdGVzdF9iaXNlY3Rpb24gMSAtLWJpc2VjdCBsMSBebDAKKyMKK3Rlc3RfYmlzZWN0aW9uX2RpZmYoKQoreworCV9tYXhfZGlmZj0kMQorCV9iaXNlY3Rfb3B0aW9uPSQyCisJc2hpZnQgMgorCV9iaXNlY3Rpb249JChnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uICIkQCIpCisJX2xpc3Rfc2l6ZT0kKGdpdCByZXYtbGlzdCAiJEAiIHwgd2MgLWwpCisgICAgICAgIF9oZWFkPSQxCisJc2hpZnQgMQorCV9iaXNlY3Rpb25fc2l6ZT0kKGdpdCByZXYtbGlzdCAkX2Jpc2VjdGlvbiAiJEAiIHwgd2MgLWwpCisJWyAtbiAiJF9saXN0X3NpemUiIC1hIC1uICIkX2Jpc2VjdGlvbl9zaXplIiBdIHx8CisJZXJyb3IgInRlc3RfYmlzZWN0aW9uX2RpZmYgZmFpbGVkIgorCisJIyBUZXN0IGlmIGJpc2VjdGlvbiBzaXplIGlzIGNsb3NlIHRvIGhhbGYgb2YgbGlzdCBzaXplIHdpdGhpbgorCSMgdG9sZXJhbmNlLgorCSMKKwlfYmlzZWN0X2Vycj0kKGV4cHIgJF9saXN0X3NpemUgLSAkX2Jpc2VjdGlvbl9zaXplIFwqIDIpCisJdGVzdCAiJF9iaXNlY3RfZXJyIiAtbHQgMCAmJiBfYmlzZWN0X2Vycj0kKGV4cHIgMCAtICRfYmlzZWN0X2VycikKKwlfYmlzZWN0X2Vycj0kKGV4cHIgJF9iaXNlY3RfZXJyIC8gMikgOyAjIGZsb29yCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiYmlzZWN0aW9uIGRpZmYgJF9iaXNlY3Rfb3B0aW9uICRfaGVhZCAkKiA8PSAkX21heF9kaWZmIiBcCisJJ3Rlc3QgJF9iaXNlY3RfZXJyIC1sZSAkX21heF9kaWZmJworfQorCitkYXRlID5wYXRoMAorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMAorc2F2ZV90YWcgdHJlZSBnaXQgd3JpdGUtdHJlZQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAwIiBoaWRlX2Vycm9yIHNhdmVfdGFnIHJvb3QgdW5pcXVlX2NvbW1pdCByb290IHRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMSIgc2F2ZV90YWcgbDAgdW5pcXVlX2NvbW1pdCBsMCB0cmVlIC1wIHJvb3QKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMiIgc2F2ZV90YWcgbDEgdW5pcXVlX2NvbW1pdCBsMSB0cmVlIC1wIGwwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDMiIHNhdmVfdGFnIGwyIHVuaXF1ZV9jb21taXQgbDIgdHJlZSAtcCBsMQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA0IiBzYXZlX3RhZyBhMCB1bmlxdWVfY29tbWl0IGEwIHRyZWUgLXAgbDIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNSIgc2F2ZV90YWcgYTEgdW5pcXVlX2NvbW1pdCBhMSB0cmVlIC1wIGEwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDYiIHNhdmVfdGFnIGIxIHVuaXF1ZV9jb21taXQgYjEgdHJlZSAtcCBhMAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA3IiBzYXZlX3RhZyBjMSB1bmlxdWVfY29tbWl0IGMxIHRyZWUgLXAgYjEKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowOCIgc2F2ZV90YWcgYjIgdW5pcXVlX2NvbW1pdCBiMiB0cmVlIC1wIGIxCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDkiIHNhdmVfdGFnIGIzIHVuaXF1ZV9jb21taXQgYjIgdHJlZSAtcCBiMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEwIiBzYXZlX3RhZyBjMiB1bmlxdWVfY29tbWl0IGMyIHRyZWUgLXAgYzEgLXAgYjIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMSIgc2F2ZV90YWcgYzMgdW5pcXVlX2NvbW1pdCBjMyB0cmVlIC1wIGMyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTIiIHNhdmVfdGFnIGEyIHVuaXF1ZV9jb21taXQgYTIgdHJlZSAtcCBhMQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEzIiBzYXZlX3RhZyBhMyB1bmlxdWVfY29tbWl0IGEzIHRyZWUgLXAgYTIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxNCIgc2F2ZV90YWcgYjQgdW5pcXVlX2NvbW1pdCBiNCB0cmVlIC1wIGIzIC1wIGEzCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTUiIHNhdmVfdGFnIGE0IHVuaXF1ZV9jb21taXQgYTQgdHJlZSAtcCBhMyAtcCBiNCAtcCBjMworb25fY29tbWl0dGVyX2RhdGUgIjAwOjE2IiBzYXZlX3RhZyBsMyB1bmlxdWVfY29tbWl0IGwzIHRyZWUgLXAgYTQKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxNyIgc2F2ZV90YWcgbDQgdW5pcXVlX2NvbW1pdCBsNCB0cmVlIC1wIGwzCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTgiIHNhdmVfdGFnIGw1IHVuaXF1ZV9jb21taXQgbDUgdHJlZSAtcCBsNAorZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKKworCisjICAgICBFCisjICAgIC8gXAorIyAgIGUxICB8CisjICAgfCAgIHwKKyMgICBlMiAgfAorIyAgIHwgICB8CisjICAgZTMgIHwKKyMgICB8ICAgfAorIyAgIGU0ICB8CisjICAgfCAgIHwKKyMgICB8ICAgZjEKKyMgICB8ICAgfAorIyAgIHwgICBmMgorIyAgIHwgICB8CisjICAgfCAgIGYzCisjICAgfCAgIHwKKyMgICB8ICAgZjQKKyMgICB8ICAgfAorIyAgIGU1ICB8CisjICAgfCAgIHwKKyMgICBlNiAgfAorIyAgIHwgICB8CisjICAgZTcgIHwKKyMgICB8ICAgfAorIyAgIGU4ICB8CisjICAgIFwgLworIyAgICAgRgorCisKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyBGIHVuaXF1ZV9jb21taXQgRiB0cmVlCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDEiIHNhdmVfdGFnIGU4IHVuaXF1ZV9jb21taXQgZTggdHJlZSAtcCBGCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDIiIHNhdmVfdGFnIGU3IHVuaXF1ZV9jb21taXQgZTcgdHJlZSAtcCBlOAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAzIiBzYXZlX3RhZyBlNiB1bmlxdWVfY29tbWl0IGU2IHRyZWUgLXAgZTcKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNCIgc2F2ZV90YWcgZTUgdW5pcXVlX2NvbW1pdCBlNSB0cmVlIC1wIGU2Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDUiIHNhdmVfdGFnIGY0IHVuaXF1ZV9jb21taXQgZjQgdHJlZSAtcCBGCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDYiIHNhdmVfdGFnIGYzIHVuaXF1ZV9jb21taXQgZjMgdHJlZSAtcCBmNAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA3IiBzYXZlX3RhZyBmMiB1bmlxdWVfY29tbWl0IGYyIHRyZWUgLXAgZjMKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowOCIgc2F2ZV90YWcgZjEgdW5pcXVlX2NvbW1pdCBmMSB0cmVlIC1wIGYyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDkiIHNhdmVfdGFnIGU0IHVuaXF1ZV9jb21taXQgZTQgdHJlZSAtcCBlNQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEwIiBzYXZlX3RhZyBlMyB1bmlxdWVfY29tbWl0IGUzIHRyZWUgLXAgZTQKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMSIgc2F2ZV90YWcgZTIgdW5pcXVlX2NvbW1pdCBlMiB0cmVlIC1wIGUzCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTIiIHNhdmVfdGFnIGUxIHVuaXF1ZV9jb21taXQgZTEgdHJlZSAtcCBlMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEzIiBzYXZlX3RhZyBFIHVuaXF1ZV9jb21taXQgRSB0cmVlIC1wIGUxIC1wIGYxCisKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyBVIHVuaXF1ZV9jb21taXQgVSB0cmVlCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDEiIHNhdmVfdGFnIHUwIHVuaXF1ZV9jb21taXQgdTAgdHJlZSAtcCBVCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDEiIHNhdmVfdGFnIHUxIHVuaXF1ZV9jb21taXQgdTEgdHJlZSAtcCB1MAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAyIiBzYXZlX3RhZyB1MiB1bmlxdWVfY29tbWl0IHUyIHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMyIgc2F2ZV90YWcgdTMgdW5pcXVlX2NvbW1pdCB1MyB0cmVlIC1wIHUwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDQiIHNhdmVfdGFnIHU0IHVuaXF1ZV9jb21taXQgdTQgdHJlZSAtcCB1MAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA1IiBzYXZlX3RhZyB1NSB1bmlxdWVfY29tbWl0IHU1IHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNiIgc2F2ZV90YWcgViB1bmlxdWVfY29tbWl0IFYgdHJlZSAtcCB1MSAtcCB1MiAtcCB1MyAtcCB1NCAtcCB1NQorCit0ZXN0X3NlcXVlbmNlKCkKK3sKKwlfYmlzZWN0X29wdGlvbj0kMQorCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBsMCBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gbDEgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGwyIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBhMCBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYTEgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGEyIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBhMyBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYjEgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGIyIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBiMyBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYzEgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGMyIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBjMyBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gRSBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTEgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGUyIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlMyBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTQgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGU1IF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlNiBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTcgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGYxIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBmMiBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZjMgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGY0IF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBFIF5GCisKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDEgJF9iaXNlY3Rfb3B0aW9uIFYgXlUKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIFYgXlUgXnUxIF51MiBedTMKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIHUxIF5VCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiB1MiBeVQorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gdTMgXlUKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIHU0IF5VCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiB1NSBeVQorCisjCisjIHRoZSBmb2xsb3dpbmcgaWxsdXN0cmF0ZXMgTGludXMnIGJpbmFyeSBidWcgYmxhdHQgaWRlYS4KKyMKKyMgYXNzdW1lIHRoZSBidWcgaXMgYWN0dWFsbHkgYXQgbDMsIGJ1dCB5b3UgZG9uJ3Qga25vdyB0aGF0IC0gYWxsIHlvdSBrbm93IGlzIHRoYXQgbDMgaXMgYnJva2VuCisjIGFuZCBpdCB3YXNuJ3QgYnJva2VuIGJlZm9yZQorIworIyBrZWVwIGJpc2VjdGluZyB0aGUgbGlzdCwgYWR2YW5jaW5nIHRoZSAiYmFkIiBoZWFkIGFuZCBhY2N1bXVsYXRpbmcgImdvb2QiIGhlYWRzIHVudGlsCisjIHRoZSBiaXNlY3Rpb24gcG9pbnQgaXMgdGhlIGhlYWQgLSB0aGlzIGlzIHRoZSBiYWQgcG9pbnQuCisjCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGw1IF5yb290JyA8PEVPRgorYzMKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw1IF5yb290IF5jMyIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QgXmMzJyA8PEVPRgorYjQKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw1IF5yb290IF5jMyBeYjQiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGw1IF5jMyBeYjQnIDw8RU9GCitsMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDMgXnJvb3QgXmMzIF5iNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDMgXnJvb3QgXmMzIF5iNCcgPDxFT0YKK2E0CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBsNSBeYjMgXmEzIF5iNCBeYTQiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGwzIF5iMyBeYTMgXmE0JyA8PEVPRgorbDMKK0VPRgorCisjCisjIGlmIGwzIGlzIGJhZCwgdGhlbiBsNCBpcyBiYWQgdG9vIC0gc28gYWR2YW5jZSB0aGUgYmFkIHBvaW50ZXIgYnkgbWFraW5nIGI0IHRoZSBrbm93biBiYWQgaGVhZAorIworCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw0IF5hMiBeYTMgXmIgXmE0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsNCBeYTIgXmEzIF5hNCcgPDxFT0YKK2wzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBsMyBeYTIgXmEzIF5iIF5hNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDMgXmEyIF5hMyBeYTQnIDw8RU9GCitsMworRU9GCisKKyMgZm91bmQhCisKKyMKKyMgYXMgYW5vdGhlciBleGFtcGxlLCBsZXQncyBjb25zaWRlciBhNCB0byBiZSB0aGUgYmFkIGhlYWQsIGluIHdoaWNoIGNhc2UKKyMKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQnIDw8RU9GCitjMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQgXmMyIiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCBeYzInIDw8RU9GCitjMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQgXmMyIF5jMyIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQgXmMyIF5jMycgPDxFT0YKK2E0CitFT0YKKworIyBmb3VuZCEKKworIworIyBvciBjb25zaWRlciBjMyB0byBiZSB0aGUgYmFkIGhlYWQKKyMKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQnIDw8RU9GCitjMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gYzMgXmEyIF5hMyBeYjQgXmMyIiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBjMyBeYTIgXmEzIF5iNCBeYzInIDw8RU9GCitjMworRU9GCisKKyMgZm91bmQhCisKK30KKwordGVzdF9zZXF1ZW5jZSAiLS1iaXNlY3QiCisKKyMKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZha2UgLS1iaXNlY3QgcmVmcycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvYmlzZWN0L2JhZCBjMyAmJgorCWdvb2Q9JChnaXQgcmV2LXBhcnNlIGIxKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvYmlzZWN0L2dvb2QtJGdvb2QgJGdvb2QgJiYKKwlnb29kPSQoZ2l0IHJldi1wYXJzZSBjMSkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2Jpc2VjdC9nb29kLSRnb29kICRnb29kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYmlzZWN0IGNhbiBkZWZhdWx0IHRvIGdvb2QvYmFkIHJlZnMnICcKKwkjIHRoZSBvbmx5IHRoaW5nIGJldHdlZW4gYzMgYW5kIGMxIGlzIGMyCisJZ2l0IHJldi1wYXJzZSBjMiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tYmlzZWN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWJpc2VjdCBjYW4gZGVmYXVsdCB0byBnb29kL2JhZCByZWZzJyAnCisJZ2l0IHJldi1wYXJzZSBjMyBeYjEgXmMxID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tYmlzZWN0ID5hY3R1YWwgJiYKKworCSMgb3V0cHV0IG9yZGVyIGRlcGVuZHMgb24gdGhlIHJlZm5hbWVzLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24KKwkjIHRoZSBleGFjdCBzaGExcy4gV2UganVzdCB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBzYW1lIHNldAorCSMgb2YgbGluZXMgaW4gYW55IG9yZGVyLgorCXNvcnQgPGV4cGVjdCA+ZXhwZWN0LnNvcnRlZCAmJgorCXNvcnQgPGFjdHVhbCA+YWN0dWFsLnNvcnRlZCAmJgorCXRlc3RfY21wIGV4cGVjdC5zb3J0ZWQgYWN0dWFsLnNvcnRlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDMtcmV2LWxpc3QtdG9wby1vcmRlci5zaCBiL3QvdDYwMDMtcmV2LWxpc3QtdG9wby1vcmRlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNGQxODM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoCkBAIC0wLDAgKzEsNDQ3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvbiBTZXltb3VyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGdpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10NjAwMC5zaCAjIHQ2eHh4IHNwZWNpZmljIGZ1bmN0aW9ucworCitsaXN0X2R1cGxpY2F0ZXMoKQoreworICAgICIkQCIgfCBzb3J0IHwgdW5pcSAtZAorfQorCitkYXRlID5wYXRoMAorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMAorc2F2ZV90YWcgdHJlZSBnaXQgd3JpdGUtdHJlZQorb25fZGF0ZXMgIjAwOjAwIiAiMDA6MDAiIGhpZGVfZXJyb3Igc2F2ZV90YWcgcm9vdCB1bmlxdWVfY29tbWl0IHJvb3QgdHJlZQorb25fZGF0ZXMgIjAwOjAxIiAiMDA6MDEiIHNhdmVfdGFnIGwwIHVuaXF1ZV9jb21taXQgbDAgdHJlZSAtcCByb290Citvbl9kYXRlcyAiMDA6MDIiICIwMDowMiIgc2F2ZV90YWcgbDEgdW5pcXVlX2NvbW1pdCBsMSB0cmVlIC1wIGwwCitvbl9kYXRlcyAiMDA6MDMiICIwMDowMyIgc2F2ZV90YWcgbDIgdW5pcXVlX2NvbW1pdCBsMiB0cmVlIC1wIGwxCitvbl9kYXRlcyAiMDA6MDQiICIwMDowNCIgc2F2ZV90YWcgYTAgdW5pcXVlX2NvbW1pdCBhMCB0cmVlIC1wIGwyCitvbl9kYXRlcyAiMDA6MDUiICIwMDowNSIgc2F2ZV90YWcgYTEgdW5pcXVlX2NvbW1pdCBhMSB0cmVlIC1wIGEwCitvbl9kYXRlcyAiMDA6MDYiICIwMDowNiIgc2F2ZV90YWcgYjEgdW5pcXVlX2NvbW1pdCBiMSB0cmVlIC1wIGEwCitvbl9kYXRlcyAiMDA6MDciICIwMDowNyIgc2F2ZV90YWcgYzEgdW5pcXVlX2NvbW1pdCBjMSB0cmVlIC1wIGIxCitvbl9kYXRlcyAiMDA6MDgiICIwMDowOCIgYXNfYXV0aG9yIGZvb2JhckBleGFtcGxlLmNvbSBzYXZlX3RhZyBiMiB1bmlxdWVfY29tbWl0IGIyIHRyZWUgLXAgYjEKK29uX2RhdGVzICIwMDowOSIgIjAwOjA5IiBzYXZlX3RhZyBiMyB1bmlxdWVfY29tbWl0IGIzIHRyZWUgLXAgYjIKK29uX2RhdGVzICIwMDoxMCIgIjAwOjEwIiBzYXZlX3RhZyBjMiB1bmlxdWVfY29tbWl0IGMyIHRyZWUgLXAgYzEgLXAgYjIKK29uX2RhdGVzICIwMDoxMSIgIjAwOjExIiBzYXZlX3RhZyBjMyB1bmlxdWVfY29tbWl0IGMzIHRyZWUgLXAgYzIKK29uX2RhdGVzICIwMDoxMiIgIjAwOjAwIiBzYXZlX3RhZyBhMiB1bmlxdWVfY29tbWl0IGEyIHRyZWUgLXAgYTEKK29uX2RhdGVzICIwMDoxMyIgIjAwOjAxIiBzYXZlX3RhZyBhMyB1bmlxdWVfY29tbWl0IGEzIHRyZWUgLXAgYTIKK29uX2RhdGVzICIwMDoxNCIgIjAwOjE0IiBzYXZlX3RhZyBiNCB1bmlxdWVfY29tbWl0IGI0IHRyZWUgLXAgYjMgLXAgYTMKK29uX2RhdGVzICIwMDoxNSIgIjAwOjE1IiBzYXZlX3RhZyBhNCB1bmlxdWVfY29tbWl0IGE0IHRyZWUgLXAgYTMgLXAgYjQgLXAgYzMKK29uX2RhdGVzICIwMDoxNiIgIjAwOjE2IiBzYXZlX3RhZyBsMyB1bmlxdWVfY29tbWl0IGwzIHRyZWUgLXAgYTQKK29uX2RhdGVzICIwMDoxNyIgIjAwOjE3IiBzYXZlX3RhZyBsNCB1bmlxdWVfY29tbWl0IGw0IHRyZWUgLXAgbDMKK29uX2RhdGVzICIwMDoxOCIgIjAwOjE4IiBzYXZlX3RhZyBsNSB1bmlxdWVfY29tbWl0IGw1IHRyZWUgLXAgbDQKK29uX2RhdGVzICIwMDoxOSIgIjAwOjE5IiBzYXZlX3RhZyBtMSB1bmlxdWVfY29tbWl0IG0xIHRyZWUgLXAgYTQgLXAgYzMKK29uX2RhdGVzICIwMDoyMCIgIjAwOjIwIiBzYXZlX3RhZyBtMiB1bmlxdWVfY29tbWl0IG0yIHRyZWUgLXAgYzMgLXAgYTQKK29uX2RhdGVzICIwMDoyMSIgIjAwOjIxIiBoaWRlX2Vycm9yIHNhdmVfdGFnIGFsdF9yb290IHVuaXF1ZV9jb21taXQgYWx0X3Jvb3QgdHJlZQorb25fZGF0ZXMgIjAwOjIyIiAiMDA6MjIiIHNhdmVfdGFnIHIwIHVuaXF1ZV9jb21taXQgcjAgdHJlZSAtcCBhbHRfcm9vdAorb25fZGF0ZXMgIjAwOjIzIiAiMDA6MjMiIHNhdmVfdGFnIHIxIHVuaXF1ZV9jb21taXQgcjEgdHJlZSAtcCByMAorb25fZGF0ZXMgIjAwOjI0IiAiMDA6MjQiIHNhdmVfdGFnIGw1cjEgdW5pcXVlX2NvbW1pdCBsNXIxIHRyZWUgLXAgbDUgLXAgcjEKK29uX2RhdGVzICIwMDoyNSIgIjAwOjI1IiBzYXZlX3RhZyByMWw1IHVuaXF1ZV9jb21taXQgcjFsNSB0cmVlIC1wIHIxIC1wIGw1CisKKworaGlkZV9lcnJvciBzYXZlX3RhZyBlMSBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGUxIHRyZWUKK3NhdmVfdGFnIGUyIGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTIgdHJlZSAtcCBlMQorc2F2ZV90YWcgZjEgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmMSB0cmVlIC1wIGUxCitzYXZlX3RhZyBlMyBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGUzIHRyZWUgLXAgZTIKK3NhdmVfdGFnIGYyIGFzX2F1dGhvciBmQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZjIgdHJlZSAtcCBmMQorc2F2ZV90YWcgZTQgYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlNCB0cmVlIC1wIGUzIC1wIGYyCitzYXZlX3RhZyBlNSBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU1IHRyZWUgLXAgZTQKK3NhdmVfdGFnIGYzIGFzX2F1dGhvciBmQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZjMgdHJlZSAtcCBmMgorc2F2ZV90YWcgZjQgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmNCB0cmVlIC1wIGYzCitzYXZlX3RhZyBlNiBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU2IHRyZWUgLXAgZTUgLXAgZjQKK3NhdmVfdGFnIGY1IGFzX2F1dGhvciBmQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZjUgdHJlZSAtcCBmNAorc2F2ZV90YWcgZjYgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmNiB0cmVlIC1wIGY1IC1wIGU2CitzYXZlX3RhZyBlNyBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU3IHRyZWUgLXAgZTYKK3NhdmVfdGFnIGU4IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTggdHJlZSAtcCBlNworc2F2ZV90YWcgZTkgYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlOSB0cmVlIC1wIGU4CitzYXZlX3RhZyBmNyBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY3IHRyZWUgLXAgZjYKK3NhdmVfdGFnIGY4IGFzX2F1dGhvciBmQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZjggdHJlZSAtcCBmNworc2F2ZV90YWcgZjkgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmOSB0cmVlIC1wIGY4CitzYXZlX3RhZyBlMTAgYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlMSB0cmVlIC1wIGU5IC1wIGY4CisKK2hpZGVfZXJyb3Igc2F2ZV90YWcgZzAgdW5pcXVlX2NvbW1pdCBnMCB0cmVlCitzYXZlX3RhZyBnMSB1bmlxdWVfY29tbWl0IGcxIHRyZWUgLXAgZzAKK3NhdmVfdGFnIGgxIHVuaXF1ZV9jb21taXQgZzIgdHJlZSAtcCBnMAorc2F2ZV90YWcgZzIgdW5pcXVlX2NvbW1pdCBnMyB0cmVlIC1wIGcxIC1wIGgxCitzYXZlX3RhZyBoMiB1bmlxdWVfY29tbWl0IGc0IHRyZWUgLXAgZzIKK3NhdmVfdGFnIGczIHVuaXF1ZV9jb21taXQgZzUgdHJlZSAtcCBnMgorc2F2ZV90YWcgZzQgdW5pcXVlX2NvbW1pdCBnNiB0cmVlIC1wIGczIC1wIGgyCisKK2dpdCB1cGRhdGUtcmVmIEhFQUQgJCh0YWcgbDUpCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBoYXMgY29ycmVjdCBudW1iZXIgb2YgZW50cmllcycgJ2dpdCByZXYtbGlzdCBIRUFEIHwgd2MgLWwgfCB0ciAtZCBcIiBcIicgPDxFT0YKKzE5CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSB0b3BvIG9yZGVyJyAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgSEVBRCcgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCithMQorYjMKK2IyCitiMQorYTAKK2wyCitsMQorbDAKK3Jvb3QKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIGRhdGUgb3JkZXInICdnaXQgcmV2LWxpc3QgLS1kYXRlLW9yZGVyICBIRUFEJyA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CithMworYTIKK2MzCitjMgorYjMKK2IyCitjMQorYjEKK2ExCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgYXV0aG9yLWRhdGUgb3JkZXInICdnaXQgcmV2LWxpc3QgLS1hdXRob3ItZGF0ZS1vcmRlciAgSEVBRCcgPDxFT0YKK2w1CitsNAorbDMKK2E0CitiNAorYzMKK2MyCitiMworYjIKK2MxCitiMQorYTMKK2EyCithMQorYTAKK2wyCitsMQorbDAKK3Jvb3QKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAndHdvIGRpYW1vbmRzIHRvcG8gb3JkZXIgKGc2KScgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGc0JyA8PEVPRgorZzQKK2gyCitnMworZzIKK2gxCitnMQorZzAKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgaGVhZHMnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGEzIGIzIGMzJyA8PEVPRgorYTMKK2EyCithMQorYzMKK2MyCitjMQorYjMKK2IyCitiMQorYTAKK2wyCitsMQorbDAKK3Jvb3QKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgaGVhZHMsIHBydW5lIGF0IGExJyAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBhMyBiMyBjMyBeYTEnIDw8RU9GCithMworYTIKK2MzCitjMgorYzEKK2IzCitiMgorYjEKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgaGVhZHMsIHBydW5lIGF0IGwxJyAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBhMyBiMyBjMyBebDEnIDw8RU9GCithMworYTIKK2ExCitjMworYzIKK2MxCitiMworYjIKK2IxCithMAorbDIKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnY3Jvc3MtZXBvY2gsIGhlYWQgYXQgbDUsIHBydW5lIGF0IGwxJyAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBsNSBebDEnIDw8RU9GCitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdkdXBsaWNhdGVkIGhlYWQgYXJndW1lbnRzJyAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBsNSBsNSBebDEnIDw8RU9GCitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBuZWFyIHRvcG8nICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGE0IF5jMycgPDxFT0YKK2E0CitiNAorYTMKK2EyCithMQorYjMKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiaGVhZCBoYXMgbm8gcGFyZW50IiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgcm9vdCcgPDxFT0YKK3Jvb3QKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAidHdvIG5vZGVzIC0gb25lIGhlYWQsIG9uZSBiYXNlIiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDAnIDw8RU9GCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJ0aHJlZSBub2RlcyBvbmUgaGVhZCwgb25lIGludGVybmFsLCBvbmUgYmFzZSIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGwxJyA8PEVPRgorbDEKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsMiBecm9vdCIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGwyIF5yb290JyA8PEVPRgorbDIKK2wxCitsMAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJsaW5lYXIgcHJ1bmUgbDIgXmwwIiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDIgXmwwJyA8PEVPRgorbDIKK2wxCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsMiBebDEiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsMiBebDEnIDw8RU9GCitsMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJsaW5lYXIgcHJ1bmUgbDUgXmE0IiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDUgXmE0JyA8PEVPRgorbDUKK2w0CitsMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJsaW5lYXIgcHJ1bmUgbDUgXmwzIiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDUgXmwzJyA8PEVPRgorbDUKK2w0CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsNSBebDQiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsNSBebDQnIDw8RU9GCitsNQorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJtYXgtY291bnQgMTAgLSB0b3BvIG9yZGVyIiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgLS1tYXgtY291bnQ9MTAgbDUnIDw8RU9GCitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJtYXgtY291bnQgMTAgLSBub24gdG9wbyBvcmRlciIgJ2dpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xMCBsNScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitiNAorYTMKK2EyCitjMworYzIKK2IzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJy0tbWF4LWFnZT1jMywgbm8gLS10b3BvLW9yZGVyJyAiZ2l0IHJldi1saXN0IC0tbWF4LWFnZT0kKGNvbW1pdF9kYXRlIGMzKSBsNSIgPDxFT0YKK2w1CitsNAorbDMKK2E0CitiNAorYTMKK2EyCitjMworRU9GCisKKyMKKyMgdGhpcyB0ZXN0IGZhaWxzIG9uIC0tdG9wby1vcmRlciAtIGEgZml4IGlzIHJlcXVpcmVkCisjCisjdGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJy0tbWF4LWFnZT1jMywgLS10b3BvLW9yZGVyJyAiZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAtLW1heC1hZ2U9JChjb21taXRfZGF0ZSBjMykgbDUiIDw8RU9GCisjbDUKKyNsNAorI2wzCisjYTQKKyNjMworI2I0CisjYTMKKyNhMgorI0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnb25lIHNwZWNpZmllZCBoZWFkIHJlYWNoYWJsZSBmcm9tIGFub3RoZXIgYTQsIGMzLCAtLXRvcG8tb3JkZXInICJsaXN0X2R1cGxpY2F0ZXMgZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBhNCBjMyIgPDxFT0YKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnb25lIHNwZWNpZmllZCBoZWFkIHJlYWNoYWJsZSBmcm9tIGFub3RoZXIgYzMsIGE0LCAtLXRvcG8tb3JkZXInICJsaXN0X2R1cGxpY2F0ZXMgZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBjMyBhNCIgPDxFT0YKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnb25lIHNwZWNpZmllZCBoZWFkIHJlYWNoYWJsZSBmcm9tIGFub3RoZXIgYTQsIGMzLCBubyAtLXRvcG8tb3JkZXInICJsaXN0X2R1cGxpY2F0ZXMgZ2l0IHJldi1saXN0IGE0IGMzIiA8PEVPRgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBjMywgYTQsIG5vIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgYzMgYTQiIDw8RU9GCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ2dyYXBoIHdpdGggYzMgYW5kIGE0IHBhcmVudHMgb2YgaGVhZCcgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgbTEiIDw8RU9GCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ2dyYXBoIHdpdGggYTQgYW5kIGMzIHBhcmVudHMgb2YgaGVhZCcgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgbTIiIDw8RU9GCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVhZCBeaGVhZCAtLXRvcG8tb3JkZXIiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBhMyBeYTMnIDw8RU9GCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVhZCBeaGVhZCBubyAtLXRvcG8tb3JkZXIiICdnaXQgcmV2LWxpc3QgYTMgXmEzJyA8PEVPRgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgdG9wbyBvcmRlciAobDVyMSknICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsNXIxJyA8PEVPRgorbDVyMQorcjEKK3IwCithbHRfcm9vdAorbDUKK2w0CitsMworYTQKK2MzCitjMgorYzEKK2I0CithMworYTIKK2ExCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgdG9wbyBvcmRlciAocjFsNSknICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICByMWw1JyA8PEVPRgorcjFsNQorbDUKK2w0CitsMworYTQKK2MzCitjMgorYzEKK2I0CithMworYTIKK2ExCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorcjEKK3IwCithbHRfcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJkb24ndCBwcmludCB0aGluZ3MgdW5yZWFjaGFibGUgZnJvbSBvbmUgYnJhbmNoIiAiZ2l0IHJldi1saXN0IGEzIF5iMyAtLXRvcG8tb3JkZXIiIDw8RU9GCithMworYTIKK2ExCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIi0tdG9wby1vcmRlciBhNCBsMyIgImdpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgYTQgbDMiIDw8RU9GCitsMworYTQKK2MzCitjMgorYzEKK2I0CithMworYTIKK2ExCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKKyMKKyMKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA0LXJldi1saXN0LXBhdGgtb3B0aW0uc2ggYi90L3Q2MDA0LXJldi1saXN0LXBhdGgtb3B0aW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2U4YzQyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDQtcmV2LWxpc3QtcGF0aC1vcHRpbS5zaApAQCAtMCwwICsxLDk2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IHRyaXZpYWwgcGF0aCBvcHRpbWl6YXRpb24gdGVzdAorCisgICBkL3oxCisgICBiMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEKKyAgIG8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLS0tLW8gbWFzdGVyCisgIC8gICAgICAgICAgICAgICAgICAgICAgICAvCisgby0tLS0tLS0tLW8tLS0tby0tLS1vLS0tLW8gc2lkZQorIGEwICAgICAgICBjMCAgIGMxICAgYTEgICBjMgorIGQvZjAgICAgICBkL2YxCisgZC96MAorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIEhlbGxvID5hICYmCisJbWtkaXIgZCAmJgorCWVjaG8gV29ybGQgPmQvZiAmJgorCWVjaG8gV29ybGQgPmQveiAmJgorCWdpdCBhZGQgYSBkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEICYmCisJZ2l0IHRhZyBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcGF0aC1vcHRpbWl6YXRpb24gJworCXRlc3RfdGljayAmJgorCWNvbW1pdD0kKGVjaG8gIlVuY2hhbmdlZCB0cmVlIiB8IGdpdCBjb21taXQtdHJlZSAiSEVBRF57dHJlZX0iIC1wIEhFQUQpICYmCisJdGVzdCAkKGdpdCByZXYtbGlzdCAkY29tbWl0IHwgd2MgLWwpID0gMiAmJgorCXRlc3QgJChnaXQgcmV2LWxpc3QgJGNvbW1pdCAtLSAuIHwgd2MgLWwpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdXJ0aGVyIHNldHVwJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwllY2hvIElycmVsZXZhbnQgPmMgJiYKKwllY2hvIElycmVsZXZhbnQgPmQvZiAmJgorCWdpdCBhZGQgYyBkL2YgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIGFuIGlycmVsZXZhbnQgY29tbWl0IiAmJgorCWdpdCB0YWcgc2lkZV9jMCAmJgorCWVjaG8gIk1vcmUgSXJyZWxldmFuY3kiID5jICYmCisJZ2l0IGFkZCBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSBtYWtlcyBhbm90aGVyIGlycmVsZXZhbnQgY29tbWl0IiAmJgorCWVjaG8gQnllID5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSB0b3VjaGVzIGEiICYmCisJZ2l0IHRhZyBzaWRlX2ExICYmCisJZWNobyAiWWV0IG1vcmUgSXJyZWxldmFuY3kiID5jICYmCisJZ2l0IGFkZCBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSBtYWtlcyB5ZXQgYW5vdGhlciBpcnJlbGV2YW50IGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBBbm90aGVyID5iICYmCisJZWNobyBNdW5nZWQgPmQveiAmJgorCWdpdCBhZGQgYiBkL3ogJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJNYXN0ZXIgdG91Y2hlcyBiIiAmJgorCWdpdCB0YWcgbWFzdGVyX2IwICYmCisJZ2l0IG1lcmdlIHNpZGUgJiYKKwllY2hvIFRvdWNoZWQgPmIgJiYKKwlnaXQgYWRkIGIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJNYXN0ZXIgdG91Y2hlcyBiIGFnYWluIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoIG9wdGltaXphdGlvbiAyJyAnCisJZ2l0IHJldi1wYXJzZSBzaWRlX2ExIGluaXRpYWwgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IEhFQUQgLS0gYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzcGVjIHdpdGggbGVhZGluZyBwYXRoJyAnCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXJeIG1hc3Rlcl9iMCBzaWRlX2MwIGluaXRpYWwgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IEhFQUQgLS0gZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzcGVjIHdpdGggZ2xvYiAoMSknICcKKwlnaXQgcmV2LXBhcnNlIG1hc3Rlcl4gbWFzdGVyX2IwIHNpZGVfYzAgaW5pdGlhbCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSAiZC8qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzcGVjIHdpdGggZ2xvYiAoMiknICcKKwlnaXQgcmV2LXBhcnNlIHNpZGVfYzAgaW5pdGlhbCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSAiZC9bYS1tXSoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA1LXJldi1saXN0LWNvdW50LnNoIGIvdC90NjAwNS1yZXYtbGlzdC1jb3VudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYjY0ODIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwNS1yZXYtbGlzdC1jb3VudC5zaApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50IGFuZCAtLXNraXAgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisgICAgZm9yIG4gaW4gMSAyIDMgNCA1IDsgZG8gXAorICAgICAgICBlY2hvICRuID4gYSA7IFwKKyAgICAgICAgZ2l0IGFkZCBhIDsgXAorICAgICAgICBnaXQgY29tbWl0IC1tICIkbiIgOyBcCisgICAgZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBvcHRpb25zJyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIHwgd2MgLWwpID0gNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1heC1jb3VudCcgJworICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLW1heC1jb3VudD0wIHwgd2MgLWwpID0gMCAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLW1heC1jb3VudD0zIHwgd2MgLWwpID0gMyAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLW1heC1jb3VudD01IHwgd2MgLWwpID0gNSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLW1heC1jb3VudD0xMCB8IHdjIC1sKSA9IDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1tYXgtY291bnQgYWxsIGZvcm1zJyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTEgfCB3YyAtbCkgPSAxICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0xIHwgd2MgLWwpID0gMSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtbjEgfCB3YyAtbCkgPSAxICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC1uIDEgfCB3YyAtbCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2tpcCcgJworICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MCB8IHdjIC1sKSA9IDUgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTMgfCB3YyAtbCkgPSAyICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD01IHwgd2MgLWwpID0gMCAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MTAgfCB3YyAtbCkgPSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2tpcCAtLW1heC1jb3VudCcgJworICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MCAtLW1heC1jb3VudD0wIHwgd2MgLWwpID0gMCAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MCAtLW1heC1jb3VudD0xMCB8IHdjIC1sKSA9IDUgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTMgLS1tYXgtY291bnQ9MCB8IHdjIC1sKSA9IDAgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTMgLS1tYXgtY291bnQ9MSB8IHdjIC1sKSA9IDEgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTMgLS1tYXgtY291bnQ9MiB8IHdjIC1sKSA9IDIgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTMgLS1tYXgtY291bnQ9MTAgfCB3YyAtbCkgPSAyICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD01IC0tbWF4LWNvdW50PTEwIHwgd2MgLWwpID0gMCAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MTAgLS1tYXgtY291bnQ9MTAgfCB3YyAtbCkgPSAwCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2ggYi90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZTgyZTQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKQEAgLTAsMCArMSw1MzEgQEAKKyMhL2Jpbi9zaAorCisjIENvcHlyaWdodCAoYykgMjAwOSBKZW5zIExlaG1hbm4KKyMgQ29weXJpZ2h0IChjKSAyMDExIEFsZXhleSBTaHVta2luICgrIG5vbi1VVEYtOCBjb21taXQgZW5jb2RpbmcgdGVzdHMpCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXYtbGlzdCAtLXByZXR0eT1mb3JtYXQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCit0ZXN0X3RpY2sKKyMgVGVzdGVkIG5vbi1VVEYtOCBlbmNvZGluZwordGVzdF9lbmNvZGluZz0iSVNPODg1OS0xIgorCisjIFN0cmluZyAiYWRkZWQiIGluIEdlcm1hbgorIyAodHJhbnNsYXRlZCB3aXRoIEdvb2dsZSBUcmFuc2xhdGUpLAorIyBlbmNvZGVkIGluIFVURi04LCB1c2VkIGFzIGEgY29tbWl0IGxvZyBtZXNzYWdlIGJlbG93LgorYWRkZWRfdXRmOF9wYXJ0PSQocHJpbnRmICJcMzAzXDI3NCIpCithZGRlZF91dGY4X3BhcnRfaXNvODg1OTE9JChlY2hvICIkYWRkZWRfdXRmOF9wYXJ0IiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nKQorYWRkZWQ9JChwcmludGYgImFkZGVkIChoaW56dWdlZiR7YWRkZWRfdXRmOF9wYXJ0fWd0KSBmb28iKQorYWRkZWRfaXNvODg1OTE9JChlY2hvICIkYWRkZWQiIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcpCisjIHNhbWUgYnV0ICJjaGFuZ2VkIgorY2hhbmdlZF91dGY4X3BhcnQ9JChwcmludGYgIlwzMDNcMjQ0IikKK2NoYW5nZWRfdXRmOF9wYXJ0X2lzbzg4NTkxPSQoZWNobyAiJGNoYW5nZWRfdXRmOF9wYXJ0IiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nKQorY2hhbmdlZD0kKHByaW50ZiAiY2hhbmdlZCAoZ2Uke2NoYW5nZWRfdXRmOF9wYXJ0fW5kZXJ0KSBmb28iKQorY2hhbmdlZF9pc284ODU5MT0kKGVjaG8gIiRjaGFuZ2VkIiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nKQorCisjIENvdW50IG9mIGNoYXIgdG8gdHJ1bmNhdGUKKyMgTnVtYmVyIGlzIGNob3NlbiBzbywgdGhhdCBub24tQUNTSUkgY2hhcmFjdGVycworIyAoc2VlICRhZGRlZF91dGY4X3BhcnQgYW5kICRjaGFuZ2VkX3V0ZjhfcGFydCkKKyMgZmFsbCBpbnRvIHRydW5jYXRlZCBwYXJ0cyBvZiBhcHByb3ByaWF0ZSB3b3JkcyBib3RoIGZyb20gbGVmdCBhbmQgcmlnaHQKK3RydW5jYXRlX2NvdW50PTIwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9vaWRfaW5pdCAmJgorCTogPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdEVuY29kaW5nICR0ZXN0X2VuY29kaW5nICYmCisJZWNobyAiJGFkZGVkX2lzbzg4NTkxIiB8IGdpdCBjb21taXQgLUYgLSAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWhlYWQxX3Nob3J0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0ICRoZWFkMSkgJiYKKwl0cmVlMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDopICYmCisJdHJlZTFfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgJHRyZWUxKSAmJgorCWVjaG8gIiRjaGFuZ2VkIiA+IGZvbyAmJgorCWVjaG8gIiRjaGFuZ2VkX2lzbzg4NTkxIiB8IGdpdCBjb21taXQgLWEgLUYgLSAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWhlYWQyX3Nob3J0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0ICRoZWFkMikgJiYKKwl0cmVlMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDopICYmCisJdHJlZTJfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgJHRyZWUyKSAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdEVuY29kaW5nCisnCisKKyMgdXNhZ2U6IHRlc3RfZm9ybWF0IG5hbWUgZm9ybWF0X3N0cmluZyBbZmFpbHVyZV0gPGV4cGVjdGVkX291dHB1dAordGVzdF9mb3JtYXQgKCkgeworCWNhdCA+ZXhwZWN0LiQxCisJdGVzdF9leHBlY3RfJHszOi1zdWNjZXNzfSAiZm9ybWF0ICQxIiAiCisJCWdpdCByZXYtbGlzdCAtLXByZXR0eT1mb3JtYXQ6JyQyJyBtYXN0ZXIgPm91dHB1dC4kMSAmJgorCQl0ZXN0X2NtcCBleHBlY3QuJDEgb3V0cHV0LiQxCisJIgorfQorCisjIEZlZWQgdG8gLS1mb3JtYXQgdG8gcHJvdmlkZSBwcmVkaWN0YWJsZSBjb2xvcmVkIHNlcXVlbmNlcy4KK0JBU0lDX0NPTE9SPSclQ3JlZGZvbyVDcmVzZXQnCitDT0xPUj0nJUMocmVkKWZvbyVDKHJlc2V0KScKK0FVVE9fQ09MT1I9JyVDKGF1dG8scmVkKWZvbyVDKGF1dG8scmVzZXQpJworQUxXQVlTX0NPTE9SPSclQyhhbHdheXMscmVkKWZvbyVDKGFsd2F5cyxyZXNldCknCitoYXNfY29sb3IgKCkgeworCXRlc3RfZGVjb2RlX2NvbG9yIDwiJDEiID5kZWNvZGVkICYmCisJZWNobyAiPFJFRD5mb288UkVTRVQ+IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGRlY29kZWQKK30KKworaGFzX25vX2NvbG9yICgpIHsKKwllY2hvIGZvbyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkMSIKK30KKwordGVzdF9mb3JtYXQgcGVyY2VudCAlJWggPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyVoCitjb21taXQgJGhlYWQxCislaAorRU9GCisKK3Rlc3RfZm9ybWF0IGhhc2ggJUglbiVoIDw8RU9GCitjb21taXQgJGhlYWQyCiskaGVhZDIKKyRoZWFkMl9zaG9ydAorY29tbWl0ICRoZWFkMQorJGhlYWQxCiskaGVhZDFfc2hvcnQKK0VPRgorCit0ZXN0X2Zvcm1hdCB0cmVlICVUJW4ldCA8PEVPRgorY29tbWl0ICRoZWFkMgorJHRyZWUyCiskdHJlZTJfc2hvcnQKK2NvbW1pdCAkaGVhZDEKKyR0cmVlMQorJHRyZWUxX3Nob3J0CitFT0YKKwordGVzdF9mb3JtYXQgcGFyZW50cyAlUCVuJXAgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyRoZWFkMQorJGhlYWQxX3Nob3J0Citjb21taXQgJGhlYWQxCisKKworRU9GCisKKyMgd2UgZG9uJ3QgdGVzdCByZWxhdGl2ZSBoZXJlCit0ZXN0X2Zvcm1hdCBhdXRob3IgJWFuJW4lYWUlbiVhbCVuJWFkJW4lYUQlbiVhdCA8PEVPRgorY29tbWl0ICRoZWFkMgorJEdJVF9BVVRIT1JfTkFNRQorJEdJVF9BVVRIT1JfRU1BSUwKKyRURVNUX0FVVEhPUl9MT0NBTE5BTUUKK1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCitUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKKzExMTI5MTE5OTMKK2NvbW1pdCAkaGVhZDEKKyRHSVRfQVVUSE9SX05BTUUKKyRHSVRfQVVUSE9SX0VNQUlMCiskVEVTVF9BVVRIT1JfTE9DQUxOQU1FCitUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAorVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCisxMTEyOTExOTkzCitFT0YKKwordGVzdF9mb3JtYXQgY29tbWl0dGVyICVjbiVuJWNlJW4lY2wlbiVjZCVuJWNEJW4lY3QgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyRHSVRfQ09NTUlUVEVSX05BTUUKKyRHSVRfQ09NTUlUVEVSX0VNQUlMCiskVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCitUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAorVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCisxMTEyOTExOTkzCitjb21taXQgJGhlYWQxCiskR0lUX0NPTU1JVFRFUl9OQU1FCiskR0lUX0NPTU1JVFRFUl9FTUFJTAorJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKK1RodSwgNyBBcHIgMjAwNSAxNToxMzoxMyAtMDcwMAorMTExMjkxMTk5MworRU9GCisKK3Rlc3RfZm9ybWF0IGVuY29kaW5nICVlIDw8RU9GCitjb21taXQgJGhlYWQyCiskdGVzdF9lbmNvZGluZworY29tbWl0ICRoZWFkMQorJHRlc3RfZW5jb2RpbmcKK0VPRgorCit0ZXN0X2Zvcm1hdCBzdWJqZWN0ICVzIDw8RU9GCitjb21taXQgJGhlYWQyCiskY2hhbmdlZAorY29tbWl0ICRoZWFkMQorJGFkZGVkCitFT0YKKwordGVzdF9mb3JtYXQgc3ViamVjdC10cnVuY2F0ZWQgIiU8KCR0cnVuY2F0ZV9jb3VudCx0cnVuYyklcyIgPDxFT0YKK2NvbW1pdCAkaGVhZDIKK2NoYW5nZWQgKGdlJHtjaGFuZ2VkX3V0ZjhfcGFydH1uZGVydCkuLgorY29tbWl0ICRoZWFkMQorYWRkZWQgKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnR9Z3QuLgorRU9GCisKK3Rlc3RfZm9ybWF0IGJvZHkgJWIgPDxFT0YKK2NvbW1pdCAkaGVhZDIKK2NvbW1pdCAkaGVhZDEKK0VPRgorCit0ZXN0X2Zvcm1hdCByYXctYm9keSAlQiA8PEVPRgorY29tbWl0ICRoZWFkMgorJGNoYW5nZWQKKworY29tbWl0ICRoZWFkMQorJGFkZGVkCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBjb2xvcnMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJGhlYWQyCisJPFJFRD5mb288R1JFRU4+YmFyPEJMVUU+YmF6PFJFU0VUPnh5enp5CisJRU9GCisJZm9ybWF0PSIlQ3JlZGZvbyVDZ3JlZW5iYXIlQ2JsdWViYXolQ3Jlc2V0eHl6enkiICYmCisJZ2l0IHJldi1saXN0IC0tY29sb3IgLS1mb3JtYXQ9IiRmb3JtYXQiIC0xIG1hc3RlciA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVTIGlzIG5vdCBhIHBsYWNlaG9sZGVyIGZvciByZXYtbGlzdCB5ZXQnICcKKwlnaXQgcmV2LWxpc3QgLS1mb3JtYXQ9IiVTIiAtMSBtYXN0ZXIgfCBncmVwICIlUyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWR2YW5jZWQgY29sb3JzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICRoZWFkMgorCTxCT0xEO1JFRDtCWUVMTE9XPmZvbzxSRVNFVD4KKwlFT0YKKwlmb3JtYXQ9IiVDKHJlZCB5ZWxsb3cgYm9sZClmb28lQyhyZXNldCkiICYmCisJZ2l0IHJldi1saXN0IC0tY29sb3IgLS1mb3JtYXQ9IiRmb3JtYXQiIC0xIG1hc3RlciA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2ZvciBzcGVjIGluIFwKKwkiJUNyZWQ6JEJBU0lDX0NPTE9SIiBcCisJIiVDKC4uLik6JENPTE9SIiBcCisJIiVDKGF1dG8sLi4uKTokQVVUT19DT0xPUiIKK2RvCisJZGVzYz0ke3NwZWMlJToqfQorCWNvbG9yPSR7c3BlYyMqOn0KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkZGVzYyBkb2VzIG5vdCBlbmFibGUgY29sb3IgYnkgZGVmYXVsdCIgJworCQlnaXQgbG9nIC0tZm9ybWF0PSRjb2xvciAtMSA+YWN0dWFsICYmCisJCWhhc19ub19jb2xvciBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkZGVzYyBlbmFibGVzIGNvbG9ycyBmb3IgY29sb3IuZGlmZiIgJworCQlnaXQgLWMgY29sb3IuZGlmZj1hbHdheXMgbG9nIC0tZm9ybWF0PSRjb2xvciAtMSA+YWN0dWFsICYmCisJCWhhc19jb2xvciBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkZGVzYyBlbmFibGVzIGNvbG9ycyBmb3IgY29sb3IudWkiICcKKwkJZ2l0IC1jIGNvbG9yLnVpPWFsd2F5cyBsb2cgLS1mb3JtYXQ9JGNvbG9yIC0xID5hY3R1YWwgJiYKKwkJaGFzX2NvbG9yIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRkZXNjIHJlc3BlY3RzIC0tY29sb3IiICcKKwkJZ2l0IGxvZyAtLWZvcm1hdD0kY29sb3IgLTEgLS1jb2xvciA+YWN0dWFsICYmCisJCWhhc19jb2xvciBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkZGVzYyByZXNwZWN0cyAtLW5vLWNvbG9yIiAnCisJCWdpdCAtYyBjb2xvci51aT1hbHdheXMgbG9nIC0tZm9ybWF0PSRjb2xvciAtMSAtLW5vLWNvbG9yID5hY3R1YWwgJiYKKwkJaGFzX25vX2NvbG9yIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICIkZGVzYyByZXNwZWN0cyAtLWNvbG9yPWF1dG8gKHN0ZG91dCBpcyB0dHkpIiAnCisJCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAtLWZvcm1hdD0kY29sb3IgLTEgLS1jb2xvcj1hdXRvID5hY3R1YWwgJiYKKwkJaGFzX2NvbG9yIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRkZXNjIHJlc3BlY3RzIC0tY29sb3I9YXV0byAoc3Rkb3V0IG5vdCB0dHkpIiAnCisJCSgKKwkJCVRFUk09dnQxMDAgJiYgZXhwb3J0IFRFUk0gJiYKKwkJCWdpdCBsb2cgLS1mb3JtYXQ9JGNvbG9yIC0xIC0tY29sb3I9YXV0byA+YWN0dWFsICYmCisJCQloYXNfbm9fY29sb3IgYWN0dWFsCisJCSkKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGFsd2F5cywuLi4pIGVuYWJsZXMgY29sb3IgZXZlbiB3aXRob3V0IHR0eScgJworCWdpdCBsb2cgLS1mb3JtYXQ9JEFMV0FZU19DT0xPUiAtMSA+YWN0dWFsICYmCisJaGFzX2NvbG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclQyhhdXRvKSByZXNwZWN0cyAtLWNvbG9yJyAnCisJZ2l0IGxvZyAtLWNvbG9yIC0tZm9ybWF0PSIlQyhhdXRvKSVIIiAtMSA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwllY2hvICI8WUVMTE9XPiQoZ2l0IHJldi1wYXJzZSBIRUFEKTxSRVNFVD4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIHJlc3BlY3RzIC0tbm8tY29sb3InICcKKwlnaXQgbG9nIC0tbm8tY29sb3IgLS1mb3JtYXQ9IiVDKGF1dG8pJUgiIC0xID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgJUMoYXV0bywuLi4pIHJlc3BlY3RzIC0tY29sb3InICcKKwlnaXQgcmV2LWxpc3QgLS1jb2xvciAtLWZvcm1hdD0iJUMoYXV0byxncmVlbilmb28lQyhhdXRvLHJlc2V0KSIgXAorCQktMSBIRUFEID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwk8R1JFRU4+Zm9vPFJFU0VUPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPiBjb21taXQtbXNnIDw8RU9GCitUZXN0IHByaW50aW5nIG9mIGNvbXBsZXggYm9kaWVzCisKK1RoaXMgY29tbWl0IG1lc3NhZ2UgaXMgbXVjaCBsb25nZXIgdGhhbiB0aGUgb3RoZXJzLAorYW5kIGl0IHdpbGwgYmUgZW5jb2RlZCBpbiAkdGVzdF9lbmNvZGluZy4gV2Ugc2hvdWxkIHRoZXJlZm9yZQoraW5jbHVkZSBhbiBJU084ODU5IGNoYXJhY3RlcjogwqFidWVubyEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21wbGV4IGJvZHknICcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJHRlc3RfZW5jb2RpbmcgJiYKKwllY2hvIGNoYW5nZTIgPmZvbyAmJiBnaXQgY29tbWl0IC1hIC1GIGNvbW1pdC1tc2cgJiYKKwloZWFkMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwloZWFkM19zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkaGVhZDMpCisnCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtZW5jb2RpbmcgJWUgPDxFT0YKK2NvbW1pdCAkaGVhZDMKKyR0ZXN0X2VuY29kaW5nCitjb21taXQgJGhlYWQyCiskdGVzdF9lbmNvZGluZworY29tbWl0ICRoZWFkMQorJHRlc3RfZW5jb2RpbmcKK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21wbGV4LXN1YmplY3QgJXMgPDxFT0YKK2NvbW1pdCAkaGVhZDMKK1Rlc3QgcHJpbnRpbmcgb2YgY29tcGxleCBib2RpZXMKK2NvbW1pdCAkaGVhZDIKKyRjaGFuZ2VkX2lzbzg4NTkxCitjb21taXQgJGhlYWQxCiskYWRkZWRfaXNvODg1OTEKK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21wbGV4LXN1YmplY3QtdHJ1bmMgIiU8KCR0cnVuY2F0ZV9jb3VudCx0cnVuYyklcyIgPDxFT0YKK2NvbW1pdCAkaGVhZDMKK1Rlc3QgcHJpbnRpbmcgb2YgYy4uCitjb21taXQgJGhlYWQyCitjaGFuZ2VkIChnZSR7Y2hhbmdlZF91dGY4X3BhcnRfaXNvODg1OTF9bmRlcnQpLi4KK2NvbW1pdCAkaGVhZDEKK2FkZGVkIChoaW56dWdlZiR7YWRkZWRfdXRmOF9wYXJ0X2lzbzg4NTkxfWd0Li4KK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21wbGV4LXN1YmplY3QtbXRydW5jICIlPCgkdHJ1bmNhdGVfY291bnQsbXRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMworVGVzdCBwcmluLi5leCBib2RpZXMKK2NvbW1pdCAkaGVhZDIKK2NoYW5nZWQgKC4uZGVydCkgZm9vCitjb21taXQgJGhlYWQxCithZGRlZCAoaGkuLmYke2FkZGVkX3V0ZjhfcGFydF9pc284ODU5MX1ndCkgZm9vCitFT0YKKwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0LWx0cnVuYyAiJTwoJHRydW5jYXRlX2NvdW50LGx0cnVuYyklcyIgPDxFT0YKK2NvbW1pdCAkaGVhZDMKKy4uIG9mIGNvbXBsZXggYm9kaWVzCitjb21taXQgJGhlYWQyCisuLmdlZCAoZ2Uke2NoYW5nZWRfdXRmOF9wYXJ0X2lzbzg4NTkxfW5kZXJ0KSBmb28KK2NvbW1pdCAkaGVhZDEKKy4uIChoaW56dWdlZiR7YWRkZWRfdXRmOF9wYXJ0X2lzbzg4NTkxfWd0KSBmb28KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGV4cGVjdGVkIG1lc3NhZ2VzIChmb3IgdGVzdCAlYiknICcKKwljYXQgPDwtRU9GID5leHBlY3RlZC51dGYtOCAmJgorCWNvbW1pdCAkaGVhZDMKKwlUaGlzIGNvbW1pdCBtZXNzYWdlIGlzIG11Y2ggbG9uZ2VyIHRoYW4gdGhlIG90aGVycywKKwlhbmQgaXQgd2lsbCBiZSBlbmNvZGVkIGluICR0ZXN0X2VuY29kaW5nLiBXZSBzaG91bGQgdGhlcmVmb3JlCisJaW5jbHVkZSBhbiBJU084ODU5IGNoYXJhY3RlcjogwqFidWVubyEKKworCWNvbW1pdCAkaGVhZDIKKwljb21taXQgJGhlYWQxCisJRU9GCisJaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgZXhwZWN0ZWQudXRmLTggPmV4cGVjdGVkLklTTzg4NTktMQorJworCit0ZXN0X2Zvcm1hdCBjb21wbGV4LWJvZHkgJWIgPGV4cGVjdGVkLklTTzg4NTktMQorCisjIEdpdCB1c2VzIGkxOG4uY29tbWl0RW5jb2RpbmcgaWYgbm8gaTE4bi5sb2dPdXRwdXRFbmNvZGluZyBzZXQKKyMgc28gdW5zZXQgaTE4bi5jb21taXRFbmNvZGluZyB0byB0ZXN0IGVuY29kaW5nIGNvbnZlcnNpb24KK2dpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdEVuY29kaW5nCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC1jb21taXRlbmNvZGluZy11bnNldCAlcyA8PEVPRgorY29tbWl0ICRoZWFkMworVGVzdCBwcmludGluZyBvZiBjb21wbGV4IGJvZGllcworY29tbWl0ICRoZWFkMgorJGNoYW5nZWQKK2NvbW1pdCAkaGVhZDEKKyRhZGRlZAorRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC1jb21taXRlbmNvZGluZy11bnNldC10cnVuYyAiJTwoJHRydW5jYXRlX2NvdW50LHRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMworVGVzdCBwcmludGluZyBvZiBjLi4KK2NvbW1pdCAkaGVhZDIKK2NoYW5nZWQgKGdlJHtjaGFuZ2VkX3V0ZjhfcGFydH1uZGVydCkuLgorY29tbWl0ICRoZWFkMQorYWRkZWQgKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnR9Z3QuLgorRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC1jb21taXRlbmNvZGluZy11bnNldC1tdHJ1bmMgIiU8KCR0cnVuY2F0ZV9jb3VudCxtdHJ1bmMpJXMiIDw8RU9GCitjb21taXQgJGhlYWQzCitUZXN0IHByaW4uLmV4IGJvZGllcworY29tbWl0ICRoZWFkMgorY2hhbmdlZCAoLi5kZXJ0KSBmb28KK2NvbW1pdCAkaGVhZDEKK2FkZGVkIChoaS4uZiR7YWRkZWRfdXRmOF9wYXJ0fWd0KSBmb28KK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21wbGV4LXN1YmplY3QtY29tbWl0ZW5jb2RpbmctdW5zZXQtbHRydW5jICIlPCgkdHJ1bmNhdGVfY291bnQsbHRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMworLi4gb2YgY29tcGxleCBib2RpZXMKK2NvbW1pdCAkaGVhZDIKKy4uZ2VkIChnZSR7Y2hhbmdlZF91dGY4X3BhcnR9bmRlcnQpIGZvbworY29tbWl0ICRoZWFkMQorLi4gKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnR9Z3QpIGZvbworRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtYm9keS1jb21taXRlbmNvZGluZy11bnNldCAlYiA8ZXhwZWN0ZWQudXRmLTgKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJXgwMCBzaG93cyBOVUwnICcKKwllY2hvICA+ZXhwZWN0IGNvbW1pdCAkaGVhZDMgJiYKKwllY2hvID4+ZXhwZWN0IGZvb1FiYXIgJiYKKwlnaXQgcmV2LWxpc3QgLTEgLS1mb3JtYXQ9Zm9vJXgwMGJhciBIRUFEID5hY3R1YWwubnVsICYmCisJbnVsX3RvX3EgPGFjdHVhbC5udWwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJWFkIHJlc3BlY3RzIC0tZGF0ZT0nICcKKwllY2hvIDIwMDUtMDQtMDcgPmV4cGVjdC5hZC1zaG9ydCAmJgorCWdpdCBsb2cgLTEgLS1kYXRlPXNob3J0IC0tcHJldHR5PXRmb3JtYXQ6JWFkID5vdXRwdXQuYWQtc2hvcnQgbWFzdGVyICYmCisJdGVzdF9jbXAgZXhwZWN0LmFkLXNob3J0IG91dHB1dC5hZC1zaG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBlbWFpbCcgJworCXRlc3RfdGljayAmJgorCUM9JChHSVRfQVVUSE9SX0VNQUlMPSBnaXQgY29tbWl0LXRyZWUgSEVBRF57dHJlZX0gPC9kZXYvbnVsbCkgJiYKKwlBPSQoZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVhbiwlYWUsJWFkJW4gLXMgJEMpICYmCisJdmVyYm9zZSB0ZXN0ICIkQSIgPSAiJEdJVF9BVVRIT1JfTkFNRSwsVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbCBMRiBiZWZvcmUgZW1wdHkgKDEpJyAnCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiIlcyVuJS1iJW5UaGFua3MlbiIgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWwgTEYgYmVmb3JlIGVtcHR5ICgyKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlbiUtYiVuVGhhbmtzJW4iIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDYgYWN0dWFsICYmCisJZ3JlcCAiXiQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgTEYgYmVmb3JlIG5vbi1lbXB0eSAoMSknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJStiJW5UaGFua3MlbiIgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgTEYgYmVmb3JlIG5vbi1lbXB0eSAoMiknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJStiJW5UaGFua3MlbiIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNiBhY3R1YWwgJiYKKwlncmVwICJeJCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBTUCBiZWZvcmUgbm9uLWVtcHR5ICgxKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlIGJUaGFua3MiIEhFQUReXiA+YWN0dWFsICYmCisJdGVzdCAkKHdjIC13IDxhY3R1YWwpID0gMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgU1AgYmVmb3JlIG5vbi1lbXB0eSAoMiknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJSBzVGhhbmtzIiBIRUFEXl4gPmFjdHVhbCAmJgorCXRlc3QgJCh3YyAtdyA8YWN0dWFsKSA9IDYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYmJyZXYnICcKKwllY2hvIFNIT1JUIFNIT1JUIFNIT1JUID5leHBlY3QyICYmCisJZWNobyBMT05HIExPTkcgTE9ORyA+ZXhwZWN0MyAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoICVoICVoIiBIRUFEID5hY3R1YWwxICYmCisJZ2l0IGxvZyAtMSAtLWFiYnJldj01IC0tZm9ybWF0PSIlaCAlaCAlaCIgSEVBRCA+YWN0dWFsMiAmJgorCWdpdCBsb2cgLTEgLS1hYmJyZXY9NSAtLWZvcm1hdD0iJUggJUggJUgiIEhFQUQgPmFjdHVhbDMgJiYKKwlzZWQgLWUgInMvJE9JRF9SRUdFWC9MT05HL2ciIC1lICJzLyRfeDA1L1NIT1JUL2ciIDxhY3R1YWwyID5mdXp6eTIgJiYKKwlzZWQgLWUgInMvJE9JRF9SRUdFWC9MT05HL2ciIC1lICJzLyRfeDA1L1NIT1JUL2ciIDxhY3R1YWwzID5mdXp6eTMgJiYKKwl0ZXN0X2NtcCBleHBlY3QyIGZ1enp5MiAmJgorCXRlc3RfY21wIGV4cGVjdDMgZnV6enkzICYmCisJISB0ZXN0X2NtcCBhY3R1YWwxIGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUggaXMgbm90IGFmZmVjdGVkIGJ5IC0tYWJicmV2LWNvbW1pdCcgJworCWV4cGVjdGVkPSQoKCQodGVzdF9vaWQgaGV4c3opICsgMSkpICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lSCAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MjAgSEVBRCA+YWN0dWFsICYmCisJbGVuPSQod2MgLWMgPGFjdHVhbCkgJiYKKwl0ZXN0ICRsZW4gPSAkZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJWggaXMgbm90IGFmZmVjdGVkIGJ5IC0tYWJicmV2LWNvbW1pdCcgJworCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JWggLS1hYmJyZXYtY29tbWl0IC0tYWJicmV2PTIwIEhFQUQgPmFjdHVhbCAmJgorCWxlbj0kKHdjIC1jIDxhY3R1YWwpICYmCisJdGVzdCAkbGVuID0gMjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIiVoICVnRDogJWdzIiBpcyBzYW1lIGFzIGdpdC1yZWZsb2cnICcKKwlnaXQgcmVmbG9nID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlaCAlZ0Q6ICVncyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIiVoICVnRDogJWdzIiBpcyBzYW1lIGFzIGdpdC1yZWZsb2cgKHdpdGggZGF0ZSknICcKKwlnaXQgcmVmbG9nIC0tZGF0ZT1yYXcgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVoICVnRDogJWdzIiAtLWRhdGU9cmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyIlaCAlZ0Q6ICVncyIgaXMgc2FtZSBhcyBnaXQtcmVmbG9nICh3aXRoIC0tYWJicmV2KScgJworCWdpdCByZWZsb2cgLS1hYmJyZXY9MTMgLS1kYXRlPXJhdyA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWFiYnJldj0xMyAtLWZvcm1hdD0iJWggJWdEOiAlZ3MiIC0tZGF0ZT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJWdkIHNob3J0ZW5zIHJlZiBuYW1lJyAnCisJZWNobyAibWFzdGVyQHswfSIgPmV4cGVjdC5nZC1zaG9ydCAmJgorCWdpdCBsb2cgLWcgLTEgLS1mb3JtYXQ9JWdkIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwuZ2Qtc2hvcnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZ2Qtc2hvcnQgYWN0dWFsLmdkLXNob3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBpZGVudGl0eScgJworCWVjaG8gIiRHSVRfQ09NTUlUVEVSX05BTUU6JEdJVF9DT01NSVRURVJfRU1BSUwiID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0xIC0tZm9ybWF0PSIlZ246JWdlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmVsaW5lIHdpdGggZW1wdHkgbWVzc2FnZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWNsZWFudXA9dmVyYmF0aW0gLW0gIiRMRiIgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlICYmCisJZ2l0IHJldi1saXN0IC0tb25lbGluZSBIRUFEID50ZXN0LnR4dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgdGVzdC50eHQgJiYKKwlnaXQgcmV2LWxpc3QgLS1vbmVsaW5lIC0tZ3JhcGggSEVBRCA+dGVzdGcudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSB0ZXN0Zy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWNoYXJhY3RlciBuYW1lIGlzIHBhcnNlZCBjb3JyZWN0bHknICcKKwlnaXQgY29tbWl0IC0tYXV0aG9yPSJhIDxhQGV4YW1wbGUuY29tPiIgLS1hbGxvdy1lbXB0eSAtbSBmb28gJiYKKwllY2hvICJhIDxhQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVhbiA8JWFlPiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW51c2VkICVHIHBsYWNlaG9sZGVycyBhcmUgcGFzc2VkIHRocm91Z2gnICcKKwllY2hvICIlR1ggJUciID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlR1ggJUciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwNy1yZXYtbGlzdC1jaGVycnktcGljay1maWxlLnNoIGIvdC90NjAwNy1yZXYtbGlzdC1jaGVycnktcGljay1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMjY4MzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA3LXJldi1saXN0LWNoZXJyeS1waWNrLWZpbGUuc2gKQEAgLTAsMCArMSwyNjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCByZXYtbGlzdCAtLWNoZXJyeS1waWNrIC0tIGZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIEEtLS1CLS0tRC0tLUYKKyMgIFwKKyMgICBcCisjICAgIEMtLS1FCisjCisjIEIgY2hhbmdlcyBhIGZpbGUgZm9vLmMsIGFkZGluZyBhIGxpbmUgb2YgdGV4dC4gIEMgY2hhbmdlcyBmb28uYyBhcworIyB3ZWxsIGFzIGJhci5jLCBidXQgdGhlIGNoYW5nZSBpbiBmb28uYyB3YXMgaWRlbnRpY2FsIHRvIGNoYW5nZSBCLgorIyBEIGFuZCBDIGNoYW5nZSBiYXIgaW4gdGhlIHNhbWUgd2F5LCBFIGFuZCBGIGRpZmZlcmVudGx5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIEhhbGxvID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJBIiAmJgorCWdpdCB0YWcgQSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2ggJiYKKwllY2hvIEJlbGxvID4gZm9vICYmCisJZWNobyBDZWxsbyA+IGJhciAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkMiICYmCisJZ2l0IHRhZyBDICYmCisJZWNobyBEZWxsbyA+IGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiRSIgJiYKKwlnaXQgdGFnIEUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJCIiAmJgorCWdpdCB0YWcgQiAmJgorCWVjaG8gQ2VsbG8gPiBiYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkQiICYmCisJZ2l0IHRhZyBEICYmCisJZWNobyBOZWxsbyA+IGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiRiIgJiYKKwlnaXQgdGFnIEYKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzx0YWdzL0IKKz50YWdzL0MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxlZnQtcmlnaHQnICcKKwlnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IEIuLi5DID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5uYW1lZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvdW50JyAnCisJZ2l0IHJldi1saXN0IC0tY291bnQgQi4uLkMgPiBhY3R1YWwgJiYKKwl0ZXN0ICIkKGNhdCBhY3R1YWwpIiA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayBmb28gY29tZXMgdXAgZW1wdHknICcKKwl0ZXN0IC16ICIkKGdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBCLi4uQyAtLSBmb28pIgorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPnRhZ3MvQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgYmFyIGRvZXMgbm90IGNvbWUgdXAgZW1wdHknICcKKwlnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IC0tY2hlcnJ5LXBpY2sgQi4uLkMgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5uYW1lZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXIgZG9lcyBub3QgY29tZSB1cCBlbXB0eScgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgQi4uLkMgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5uYW1lZAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPHRhZ3MvRgorPnRhZ3MvRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgYmFyIGRvZXMgbm90IGNvbWUgdXAgZW1wdHkgKElJKScgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLm5hbWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUtcmV2IG11bHRpcGxlIC0tcmVmcyBjb21iaW5lIGluY2x1c2l2ZScgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBGLi4uRSAtLSBiYXIgPmFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvRiIgLS1yZWZzPSIqdGFncy9FIiBcCisJCTxhY3R1YWwgPmFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubmFtZWQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzx0YWdzL0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lLXJldiAtLXJlZnMgZXhjbHVkZXMgbm9uLW1hdGNoZWQgcGF0dGVybnMnICcKKwlnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IC0tcmlnaHQtb25seSAtLWNoZXJyeS1waWNrIEYuLi5FIC0tIGJhciA+PmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBGLi4uRSAtLSBiYXIgPmFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvRiIgXAorCQk8YWN0dWFsID5hY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLm5hbWVkCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis8dGFncy9GCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFtZS1yZXYgLS1leGNsdWRlIGV4Y2x1ZGVzIG1hdGNoZWQgcGF0dGVybnMnICcKKwlnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IC0tcmlnaHQtb25seSAtLWNoZXJyeS1waWNrIEYuLi5FIC0tIGJhciA+PmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBGLi4uRSAtLSBiYXIgPmFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgLS1leGNsdWRlPSIqRSIgXAorCQk8YWN0dWFsID5hY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLm5hbWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25hbWUtcmV2IC0tbm8tcmVmcyBjbGVhcnMgdGhlIHJlZnMgbGlzdCcgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBGLi4uRSAtLSBiYXIgPmV4cGVjdCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvRiIgLS1yZWZzPSIqdGFncy9FIiAtLW5vLXJlZnMgLS1yZWZzPSIqdGFncy9HIiBcCisJCTxleHBlY3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyt0YWdzL0YKKz10YWdzL0QKKyt0YWdzL0UKKz10YWdzL0MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1tYXJrJyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LW1hcmsgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5uYW1lZAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPHRhZ3MvRgorPXRhZ3MvRAorPnRhZ3MvRQorPXRhZ3MvQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LW1hcmsgLS1sZWZ0LXJpZ2h0JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LW1hcmsgLS1sZWZ0LXJpZ2h0IEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubmFtZWQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3RhZ3MvRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgLS1yaWdodC1vbmx5JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LXBpY2sgLS1yaWdodC1vbmx5IEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubmFtZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayAtLWxlZnQtb25seScgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeS1waWNrIC0tbGVmdC1vbmx5IEUuLi5GIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubmFtZWQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyt0YWdzL0UKKz10YWdzL0MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeScgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeSBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLm5hbWVkCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisxCTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeSAtLWNvdW50JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5IC0tY291bnQgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorMgkyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktbWFyayAtLWNvdW50JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LW1hcmsgLS1jb3VudCBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisxCTEJMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LW1hcmsgLS1sZWZ0LXJpZ2h0IC0tY291bnQnICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnktbWFyayAtLWxlZnQtcmlnaHQgLS1jb3VudCBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgd2l0aCBpbmRlcGVuZGVudCwgYnV0IGlkZW50aWNhbCBicmFuY2hlcycgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL2luZGVwZW5kZW50ICYmCisJcm0gLmdpdC9pbmRleCAmJgorCWVjaG8gSGFsbG8gPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImluZGVwZW5kZW50IiAmJgorCWVjaG8gQmVsbG8gPiBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJpbmRlcGVuZGVudCwgdG9vIiBmb28gJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBcCisJCUhFQUQuLi5tYXN0ZXIgLS0gZm9vKSIKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzEJMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY291bnQgLS1sZWZ0LXJpZ2h0JyAnCisJZ2l0IHJldi1saXN0IC0tY291bnQgLS1sZWZ0LXJpZ2h0IEMuLi5EID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIENvcnJ1cHQgdGhlIG9iamVjdCBzdG9yZSBkZWxpYmVyYXRlbHkgdG8gbWFrZSBzdXJlCisjIHRoZSBvYmplY3QgaXMgbm90IGV2ZW4gY2hlY2tlZCBmb3IgaXRzIGV4aXN0ZW5jZS4KK3JlbW92ZV9sb29zZV9vYmplY3QgKCkgeworCXNoYTE9IiQoZ2l0IHJldi1wYXJzZSAiJDEiKSIgJiYKKwlyZW1haW5kZXI9JHtzaGExIz8/fSAmJgorCWZpcnN0dHdvPSR7c2hhMSUkcmVtYWluZGVyfSAmJgorCXJtIC5naXQvb2JqZWN0cy8kZmlyc3R0d28vJHJlbWFpbmRlcgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1waWNrIGF2b2lkcyBsb29raW5nIGF0IGZ1bGwgZGlmZnMnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2h5LWRpZmYgJiYKKwl0ZXN0X2NvbW1pdCBkb250LWxvb2stYXQtbWUgJiYKKwllY2hvIEhlbGxvID5kb250LWxvb2stYXQtbWUudCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGlwIGRvbnQtbG9vay1hdC1tZS50ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1haW5saW5lIEhFQUReICYmCisJdGVzdF9jb21taXQgdG8tY2hlcnJ5LXBpY2sgJiYKKwlyZW1vdmVfbG9vc2Vfb2JqZWN0IHNoeS1kaWZmXjpkb250LWxvb2stYXQtbWUudCAmJgorCWdpdCByZXYtbGlzdCAtLWNoZXJyeS1waWNrIC4uLnNoeS1kaWZmCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwOC1yZXYtbGlzdC1zdWJtb2R1bGUuc2ggYi90L3Q2MDA4LXJldi1saXN0LXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNGFmOWNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwOC1yZXYtbGlzdC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXYtbGlzdCBpbnZvbHZpbmcgc3VibW9kdWxlcyB0aGF0IHRoaXMgcmVwbyBoYXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCTogPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZWNobyAxID4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kIGZpbGUgJiYKKwllY2hvIDIgPiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCBmaWxlICYmCisKKwlybSAuZ2l0L2luZGV4ICYmCisKKwk6ID4gc3VwZXItZmlsZSAmJgorCWdpdCBhZGQgc3VwZXItZmlsZSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkICIkKHB3ZCkiIHN1YiAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL3N1cGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzdXBlci1pbml0aWFsICYmCisJZWNobyAxID4gc3VwZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VwZXItZmlyc3Qgc3VwZXItZmlsZSAmJgorCWVjaG8gMiA+IHN1cGVyLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVyLXNlY29uZCBzdXBlci1maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIklsYXJpJ3MgdGVzdCIgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgc3VwZXIgbWFzdGVyIF5zdXBlcl4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA5LXJldi1saXN0LXBhcmVudC5zaCBiL3QvdDYwMDktcmV2LWxpc3QtcGFyZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxNmQ5NjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA5LXJldi1saXN0LXBhcmVudC5zaApAQCAtMCwwICsxLDE0OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FuY2VzdG9yIGN1bGxpbmcgYW5kIGxpbWl0aW5nIGJ5IHBhcmVudCBudW1iZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19yZXZsaXN0ICgpIHsKKwlyZXZfbGlzdF9hcmdzPSIkMSIgJiYKKwlzaGlmdCAmJgorCWdpdCByZXYtcGFyc2UgIiRAIiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0ICRyZXZfbGlzdF9hcmdzIC0tYWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJdG91Y2ggZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCisJdGVzdF9jb21taXQgb25lICYmCisKKwl0ZXN0X3RpY2s9JCgoJHRlc3RfdGljayAtIDI0MDApKSAmJgorCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyICYmCisKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBpcyBhbmNlc3RvciBvZiBvdGhlcnMgYW5kIHNob3VsZCBub3QgYmUgc2hvd24nICcKKworCWdpdCByZXYtbGlzdCBvbmUgLS1ub3QgZm91ciA+cmVzdWx0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJlc3VsdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJvb3RzLCBtZXJnZXMgYW5kIG9jdG9wdXNlcycgJworCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ld3Jvb3QgJiYKKwl0ZXN0X2NvbW1pdCBmaXZlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGVicmFuY2ggdHdvICYmCisJdGVzdF9jb21taXQgc2l4ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXJicmFuY2ggdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBzZXZlbiAmJgorCWdpdCBjaGVja291dCAtYiB5ZXRhbm90aGVyYnJhbmNoIGZvdXIgJiYKKwl0ZXN0X2NvbW1pdCBlaWdodCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIC1tIG5vcm1hbG1lcmdlIG5ld3Jvb3QgJiYKKwlnaXQgdGFnIG5vcm1hbG1lcmdlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tIHRyaXB1cyBzaWRlYnJhbmNoIGFub3RoZXJicmFuY2ggJiYKKwlnaXQgdGFnIHRyaXB1cyAmJgorCWdpdCBjaGVja291dCAtYiB0ZXRyYWJyYW5jaCBub3JtYWxtZXJnZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbSB0ZXRyYXB1cyBzaWRlYnJhbmNoIGFub3RoZXJicmFuY2ggeWV0YW5vdGhlcmJyYW5jaCAmJgorCWdpdCB0YWcgdGV0cmFwdXMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IHJvb3RzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1heC1wYXJlbnRzPTAiIG9uZSBmaXZlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG5vIG1lcmdlcycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1tYXgtcGFyZW50cz0xIiBvbmUgZWlnaHQgc2V2ZW4gc2l4IGZpdmUgZm91ciB0aHJlZSB0d28gJiYKKwljaGVja19yZXZsaXN0ICItLW5vLW1lcmdlcyIgb25lIGVpZ2h0IHNldmVuIHNpeCBmaXZlIGZvdXIgdGhyZWUgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG5vIG9jdG9wdXNlcycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1tYXgtcGFyZW50cz0yIiBvbmUgbm9ybWFsbWVyZ2UgZWlnaHQgc2V2ZW4gc2l4IGZpdmUgZm91ciB0aHJlZSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgbm8gcm9vdHMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MSIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlIGVpZ2h0IHNldmVuIHNpeCBmb3VyIHRocmVlIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBtZXJnZXMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MiIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlICYmCisJY2hlY2tfcmV2bGlzdCAiLS1tZXJnZXMiIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBvY3RvcHVzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTMiIHRldHJhcHVzIHRyaXB1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBvcmRpbmFyeSBjb21taXRzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTEgLS1tYXgtcGFyZW50cz0xIiBlaWdodCBzZXZlbiBzaXggZm91ciB0aHJlZSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1tZXJnZXMgLS1uby1tZXJnZXMgeWllbGRzIGVtcHR5IHNldCcgJworCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0yIC0tbm8tbWVyZ2VzIiAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWVyZ2VzIC0tbm8tbWVyZ2VzIiAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbm8tbWVyZ2VzIC0tbWVyZ2VzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBvdmVycmlkZSBhbmQgaW5maW5pdGllcycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0yIC0tbWF4LXBhcmVudHM9MSAtLW1heC1wYXJlbnRzPTMiIHRyaXB1cyBub3JtYWxtZXJnZSAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MSAtLW1pbi1wYXJlbnRzPTIgLS1tYXgtcGFyZW50cz03IiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIgLS1tYXgtcGFyZW50cz04IiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIgLS1tYXgtcGFyZW50cz0tMSIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0yIC0tbm8tbWF4LXBhcmVudHMiIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZSAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWF4LXBhcmVudHM9MCAtLW1pbi1wYXJlbnRzPTEgLS1uby1taW4tcGFyZW50cyIgb25lIGZpdmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG9kZWNhcHVzJyAnCisKKwlyb290cz0gJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMQorCWRvCisJCWdpdCBjaGVja291dCAtYiByb290JGkgZml2ZSAmJgorCQl0ZXN0X2NvbW1pdCAkaSAmJgorCQlyb290cz0iJHJvb3RzIHJvb3QkaSIgfHwKKwkJcmV0dXJuCisJZG9uZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gZG9kZWNhcHVzICRyb290cyAmJgorCWdpdCB0YWcgZG9kZWNhcHVzICYmCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTQiIGRvZGVjYXB1cyB0ZXRyYXB1cyAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9OCIgZG9kZWNhcHVzICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0xMiIgZG9kZWNhcHVzICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0xMyIgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTQgLS1tYXgtcGFyZW50cz0xMSIgdGV0cmFwdXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5jZXN0b3JzIHdpdGggdGhlIHNhbWUgY29tbWl0IHRpbWUnICcKKworCXRlc3RfdGlja19rZWVwPSR0ZXN0X3RpY2sgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDg7IGRvCisJCXRlc3RfdGljaz0kdGVzdF90aWNrX2tlZXAKKwkJdGVzdF9jb21taXQgdCRpCisJZG9uZSAmJgorCWdpdCByZXYtbGlzdCB0MV4hIC0tbm90IHQkaSA+cmVzdWx0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJlc3VsdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaCBiL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NGM3MjZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMC1tZXJnZS1iYXNlLnNoCkBAIC0wLDAgKzEsMzA4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J01lcmdlIGJhc2UgYW5kIHBhcmVudCBsaXN0IGNvbXB1dGF0aW9uLgorJworCisuIC4vdGVzdC1saWIuc2gKKworTT0xMTMwMDAwMDAwCitaPSswMDAwCisKK0dJVF9DT01NSVRURVJfRU1BSUw9Z2l0QGNvbW0uaXRlci54egorR0lUX0NPTU1JVFRFUl9OQU1FPSdDIE8gTW1pdGVyJworR0lUX0FVVEhPUl9OQU1FPSdBIFUgVGhvcicKK0dJVF9BVVRIT1JfRU1BSUw9Z2l0QGF1LnRob3IueHoKK2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTAorCitkb2l0ICgpIHsKKwlPRkZTRVQ9JDEgJiYKKwlOQU1FPSQyICYmCisJc2hpZnQgMiAmJgorCisJUEFSRU5UUz0gJiYKKwlmb3IgUAorCWRvCisJCVBBUkVOVFM9IiR7UEFSRU5UU30tcCAkUCAiCisJZG9uZSAmJgorCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIkKCgkTSArICRPRkZTRVQpKSAkWiIgJiYKKwlHSVRfQVVUSE9SX0RBVEU9JEdJVF9DT01NSVRURVJfREFURSAmJgorCWV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFICYmCisKKwljb21taXQ9JChlY2hvICROQU1FIHwgZ2l0IGNvbW1pdC10cmVlICRUICRQQVJFTlRTKSAmJgorCisJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvdGFncy8kTkFNRSIgIiRjb21taXQiICYmCisJZWNobyAkY29tbWl0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJVD0kKGdpdCBta3RyZWUgPC9kZXYvbnVsbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIEcgYW5kIEgnICcKKwkjIEUtLS1ELS0tQy0tLUItLS1BCisJIyBcIi1fICAgICAgICAgXCAgIFwKKwkjICBcICBgLS0tLS0tLS0tRyAgIFwKKwkjICAgXCAgICAgICAgICAgICAgICBcCisJIyAgICBGLS0tLS0tLS0tLS0tLS0tLUgKKwlFPSQoZG9pdCA1IEUpICYmCisJRD0kKGRvaXQgNCBEICRFKSAmJgorCUY9JChkb2l0IDYgRiAkRSkgJiYKKwlDPSQoZG9pdCAzIEMgJEQpICYmCisJQj0kKGRvaXQgMiBCICRDKSAmJgorCUE9JChkb2l0IDEgQSAkQikgJiYKKwlHPSQoZG9pdCA3IEcgJEIgJEUpICYmCisJSD0kKGRvaXQgOCBIICRBICRGKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1iYXNlIEcgSCcgJworCWdpdCBuYW1lLXJldiAkQiA+ZXhwZWN0ZWQgJiYKKworCU1CPSQoZ2l0IG1lcmdlLWJhc2UgRyBIKSAmJgorCWdpdCBuYW1lLXJldiAiJE1CIiA+YWN0dWFsLnNpbmdsZSAmJgorCisJTUI9JChnaXQgbWVyZ2UtYmFzZSAtLWFsbCBHIEgpICYmCisJZ2l0IG5hbWUtcmV2ICIkTUIiID5hY3R1YWwuYWxsICYmCisKKwlNQj0kKGdpdCBzaG93LWJyYW5jaCAtLW1lcmdlLWJhc2UgRyBIKSAmJgorCWdpdCBuYW1lLXJldiAiJE1CIiA+YWN0dWFsLnNiICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuc2luZ2xlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLmFsbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5zYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1iYXNlL3Nob3ctYnJhbmNoIC0taW5kZXBlbmRlbnQnICcKKwlnaXQgbmFtZS1yZXYgIiRIIiA+ZXhwZWN0ZWQxICYmCisJZ2l0IG5hbWUtcmV2ICIkSCIgIiRHIiA+ZXhwZWN0ZWQyICYmCisKKwlwYXJlbnRzPSQoZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCBIKSAmJgorCWdpdCBuYW1lLXJldiAkcGFyZW50cyA+YWN0dWFsMS5tYiAmJgorCXBhcmVudHM9JChnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IEEgSCBHKSAmJgorCWdpdCBuYW1lLXJldiAkcGFyZW50cyA+YWN0dWFsMi5tYiAmJgorCisJcGFyZW50cz0kKGdpdCBzaG93LWJyYW5jaCAtLWluZGVwZW5kZW50IEgpICYmCisJZ2l0IG5hbWUtcmV2ICRwYXJlbnRzID5hY3R1YWwxLnNiICYmCisJcGFyZW50cz0kKGdpdCBzaG93LWJyYW5jaCAtLWluZGVwZW5kZW50IEEgSCBHKSAmJgorCWdpdCBuYW1lLXJldiAkcGFyZW50cyA+YWN0dWFsMi5zYiAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQxIGFjdHVhbDEubWIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgYWN0dWFsMi5tYiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMSBhY3R1YWwxLnNiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQyIGFjdHVhbDIuc2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zeW5jaHJvbml6ZWQgY2xvY2tzJyAnCisJIyBUaGlzIHRlc3QgaXMgdG8gZGVtb25zdHJhdGUgdGhhdCByZWx5aW5nIG9uIHRpbWVzdGFtcHMgaW4gYSBkaXN0cmlidXRlZAorCSMgU0NNIHRvIHByb3ZpZGUgYSBfY29uc2lzdGVudF8gcGFydGlhbCBvcmRlcmluZyBvZiBjb21taXRzIGxlYWRzIHRvCisJIyBpbnNhbml0eS4KKwkjCisJIyAgICAgICAgICAgICAgIFJlbGF0aXZlCisJIyBTdHJ1Y3R1cmUgICAgIHRpbWVzdGFtcHMKKwkjCisJIyAgIFBMICBQUiAgICAgICAgKzQgICs0CisJIyAgLyAgXC8gIFwgICAgICAvICBcLyAgXAorCSMgTDIgIEMyICBSMiAgICArMyAgLTEgICszCisJIyB8ICAgfCAgIHwgICAgIHwgICB8ICAgfAorCSMgTDEgIEMxICBSMSAgICArMiAgLTIgICsyCisJIyB8ICAgfCAgIHwgICAgIHwgICB8ICAgfAorCSMgTDAgIEMwICBSMCAgICArMSAgLTMgICsxCisJIyAgIFwgfCAgLyAgICAgICAgXCB8ICAvCisJIyAgICAgUyAgICAgICAgICAgICAwCisJIworCSMgVGhlIGxlZnQgYW5kIHJpZ2h0IGNoYWlucyBvZiBjb21taXRzIGNhbiBiZSBvZiBhbnkgbGVuZ3RoIGFuZCBjb21wbGV4aXR5IGFzCisJIyBsb25nIGFzIGFsbCBvZiB0aGUgdGltZXN0YW1wcyBhcmUgZ3JlYXRlciB0aGFuIHRoYXQgb2YgUy4KKworCVM9JChkb2l0ICAwIFMpICYmCisKKwlDMD0kKGRvaXQgLTMgQzAgJFMpICYmCisJQzE9JChkb2l0IC0yIEMxICRDMCkgJiYKKwlDMj0kKGRvaXQgLTEgQzIgJEMxKSAmJgorCisJTDA9JChkb2l0ICAxIEwwICRTKSAmJgorCUwxPSQoZG9pdCAgMiBMMSAkTDApICYmCisJTDI9JChkb2l0ICAzIEwyICRMMSkgJiYKKworCVIwPSQoZG9pdCAgMSBSMCAkUykgJiYKKwlSMT0kKGRvaXQgIDIgUjEgJFIwKSAmJgorCVIyPSQoZG9pdCAgMyBSMiAkUjEpICYmCisKKwlQTD0kKGRvaXQgIDQgUEwgJEwyICRDMikgJiYKKwlQUj0kKGRvaXQgIDQgUFIgJEMyICRSMikgJiYKKworCWdpdCBuYW1lLXJldiAkQzIgPmV4cGVjdGVkICYmCisKKwlNQj0kKGdpdCBtZXJnZS1iYXNlIFBMIFBSKSAmJgorCWdpdCBuYW1lLXJldiAiJE1CIiA+YWN0dWFsLnNpbmdsZSAmJgorCisJTUI9JChnaXQgbWVyZ2UtYmFzZSAtLWFsbCBQTCBQUikgJiYKKwlnaXQgbmFtZS1yZXYgIiRNQiIgPmFjdHVhbC5hbGwgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5zaW5nbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taW5kZXBlbmRlbnQgd2l0aCB1bnN5bmNocm9uaXplZCBjbG9ja3MnICcKKwlJQj0kKGRvaXQgMCBJQikgJiYKKwlJMT0kKGRvaXQgLTEwIEkxICRJQikgJiYKKwlJMj0kKGRvaXQgIC05IEkyICRJMSkgJiYKKwlJMz0kKGRvaXQgIC04IEkzICRJMikgJiYKKwlJND0kKGRvaXQgIC03IEk0ICRJMykgJiYKKwlJNT0kKGRvaXQgIC02IEk1ICRJNCkgJiYKKwlJNj0kKGRvaXQgIC01IEk2ICRJNSkgJiYKKwlJNz0kKGRvaXQgIC00IEk3ICRJNikgJiYKKwlJOD0kKGRvaXQgIC0zIEk4ICRJNykgJiYKKwlJSD0kKGRvaXQgIC0yIElIICRJOCkgJiYKKworCWVjaG8gJElIID5leHBlY3RlZCAmJgorCWdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgSUIgSUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1iYXNlIGZvciBvY3RvcHVzLXN0ZXAgKHNldHVwKScgJworCSMgQW5vdGhlciBzZXQgdG8gZGVtb25zdHJhdGUgYmFzZSBiZXR3ZWVuIG9uZSBjb21taXQgYW5kIGEgbWVyZ2UKKwkjIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCSMKKwkjICogQyAoTU1DKSAqIEIgKE1NQikgKiBBICAoTU1BKQorCSMgKiBvICAgICAgICogbyAgICAgICAqIG8KKwkjICogbyAgICAgICAqIG8gICAgICAgKiBvCisJIyAqIG8gICAgICAgKiBvICAgICAgICogbworCSMgKiBvICAgICAgIHwgX19fX19fXy8KKwkjIHwgICAgICAgICB8LworCSMgfCAgICAgICAgICogMSAoTU0xKQorCSMgfCBfX19fX19fLworCSMgfC8KKwkjICogcm9vdCAoTU1SKQorCisJdGVzdF9jb21taXQgTU1SICYmCisJdGVzdF9jb21taXQgTU0xICYmCisJdGVzdF9jb21taXQgTU0tbyAmJgorCXRlc3RfY29tbWl0IE1NLXAgJiYKKwl0ZXN0X2NvbW1pdCBNTS1xICYmCisJdGVzdF9jb21taXQgTU1BICYmCisJZ2l0IGNoZWNrb3V0IE1NMSAmJgorCXRlc3RfY29tbWl0IE1NLXIgJiYKKwl0ZXN0X2NvbW1pdCBNTS1zICYmCisJdGVzdF9jb21taXQgTU0tdCAmJgorCXRlc3RfY29tbWl0IE1NQiAmJgorCWdpdCBjaGVja291dCBNTVIgJiYKKwl0ZXN0X2NvbW1pdCBNTS11ICYmCisJdGVzdF9jb21taXQgTU0tdiAmJgorCXRlc3RfY29tbWl0IE1NLXcgJiYKKwl0ZXN0X2NvbW1pdCBNTS14ICYmCisJdGVzdF9jb21taXQgTU1DCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLWJhc2UgQSBCIEMnICcKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IE1NMSA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IE1NUiA+ZXhwZWN0ZWQuc2IgJiYKKworCWdpdCBtZXJnZS1iYXNlIC0tYWxsIE1NQSBNTUIgTU1DID5hY3R1YWwgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWFsbCAtLW9jdG9wdXMgTU1BIE1NQiBNTUMgPmFjdHVhbC5jb21tb24gJiYKKwlnaXQgc2hvdy1icmFuY2ggLS1tZXJnZS1iYXNlIE1NQSBNTUIgTU1DID5hY3R1YWwuc2IgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnNiIGFjdHVhbC5jb21tb24gJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zYiBhY3R1YWwuc2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jpc3MtY3Jvc3MgbWVyZ2UtYmFzZSBmb3Igb2N0b3B1cy1zdGVwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBNTVIgJiYKKwl0ZXN0X2NvbW1pdCBDQzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEUgJiYKKwl0ZXN0X2NvbW1pdCBDQzIgJiYKKwl0ZXN0X3RpY2sgJiYKKwkjIEUgaXMgYSByb290IGNvbW1pdCB1bnJlbGF0ZWQgdG8gTU1SIHJvb3Qgb24gd2hpY2ggQ0MxIGlzIGJhc2VkCisJZ2l0IG1lcmdlIC1zIG91cnMgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIENDMSAmJgorCXRlc3RfY29tbWl0IENDLW8gJiYKKwl0ZXN0X2NvbW1pdCBDQ0IgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIENDMSAmJgorCSMgRSBpcyBhIHJvb3QgY29tbWl0IHVucmVsYXRlZCB0byBNTVIgcm9vdCBvbiB3aGljaCBDQzEgaXMgYmFzZWQKKwlnaXQgbWVyZ2UgLXMgb3VycyAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgQ0MyICYmCisJdGVzdF9jb21taXQgQ0NBICYmCisKKwlnaXQgcmV2LXBhcnNlIENDMSBDQzIgPmV4cGVjdGVkICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1hbGwgQ0NCIENDQV5eIENDQV5eMiA+YWN0dWFsICYmCisKKwlzb3J0IGV4cGVjdGVkID5leHBlY3RlZC5zb3J0ZWQgJiYKKwlzb3J0IGFjdHVhbCA+YWN0dWFsLnNvcnRlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnNvcnRlZCBhY3R1YWwuc29ydGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIHJlZmxvZyB0byBmaW5kIHRoZSBmb3JrIHBvaW50JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBiYXNlICRFICYmCisKKwkoCisJCWZvciBjb3VudCBpbiAxIDIgMworCQlkbworCQkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJCYXNlIGNvbW1pdCAjJGNvdW50IiAmJgorCQkJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QkY291bnQgJiYKKwkJCWdpdCBjaGVja291dCAtQiBkZXJpdmVkICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkRlcml2ZWQgIyRjb3VudCIgJiYKKwkJCWdpdCByZXYtcGFyc2UgSEVBRCA+ZGVyaXZlZCRjb3VudCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1CIGJhc2UgJEUgfHwgZXhpdCAxCisJCWRvbmUgJiYKKworCQlmb3IgY291bnQgaW4gMSAyIDMKKwkJZG8KKwkJCWdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCBiYXNlICQoY2F0IGRlcml2ZWQkY291bnQpID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCRjb3VudCBhY3R1YWwgfHwgZXhpdCAxCisJCWRvbmUKKworCSkgJiYKKwkjIGNoZWNrIHRoYXQgd2UgY29ycmVjdGx5IGRlZmF1bHQgdG8gSEVBRAorCWdpdCBjaGVja291dCBkZXJpdmVkICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IGJhc2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdDMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZm9yay1wb2ludCB3b3JrcyB3aXRoIGVtcHR5IHJlZmxvZycgJworCWdpdCAtYyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXM9ZmFsc2UgYnJhbmNoIG5vLXJlZmxvZyBiYXNlICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IG5vLXJlZmxvZyBkZXJpdmVkICYmCisJdGVzdF9jbXAgZXhwZWN0MyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZSAtLW9jdG9wdXMgLS1hbGwgZm9yIGNvbXBsZXggdHJlZScgJworCSMgQmVzdCBjb21tb24gYW5jZXN0b3IgZm9yIEpFLCBKQUEgYW5kIEpERCBpcyBKQworCSMgICAgICAgICAgICAgSkUKKwkjICAgICAgICAgICAgLyB8CisJIyAgICAgICAgICAgLyAgfAorCSMgICAgICAgICAgLyAgIHwKKwkjICBKQUEgICAgLyAgICB8CisJIyAgIHxcICAgLyAgICAgfAorCSMgICB8IFwgIHwgSkREIHwKKwkjICAgfCAgXCB8LyB8ICB8CisJIyAgIHwgICBKQyBKRCAgfAorCSMgICB8ICAgIHwgL3wgIHwKKwkjICAgfCAgICB8LyB8ICB8CisJIyAgSkEgICAgfCAgfCAgfAorCSMgICB8XCAgL3wgIHwgIHwKKwkjICAgWCBKQiB8ICBYICBYCisJIyAgIFwgIFwgfCAvICAgLworCSMgICAgXF9fXHwvX19fLworCSMgICAgICAgIEoKKwl0ZXN0X2NvbW1pdCBKICYmCisJdGVzdF9jb21taXQgSkIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEogJiYKKwl0ZXN0X2NvbW1pdCBKQyAmJgorCWdpdCByZXNldCAtLWhhcmQgSiAmJgorCXRlc3RfY29tbWl0IEpURU1QMSAmJgorCXRlc3RfbWVyZ2UgSkEgSkIgJiYKKwl0ZXN0X21lcmdlIEpBQSBKQyAmJgorCWdpdCByZXNldCAtLWhhcmQgSiAmJgorCXRlc3RfY29tbWl0IEpURU1QMiAmJgorCXRlc3RfbWVyZ2UgSkQgSkIgJiYKKwl0ZXN0X21lcmdlIEpERCBKQyAmJgorCWdpdCByZXNldCAtLWhhcmQgSiAmJgorCXRlc3RfY29tbWl0IEpURU1QMyAmJgorCXRlc3RfbWVyZ2UgSkUgSkMgJiYKKwlnaXQgcmV2LXBhcnNlIEpDID5leHBlY3RlZCAmJgorCWdpdCBtZXJnZS1iYXNlIC0tYWxsIC0tb2N0b3B1cyBKQUEgSkREIEpFID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDExLXJldi1saXN0LXdpdGgtYmFkLWNvbW1pdC5zaCBiL3QvdDYwMTEtcmV2LWxpc3Qtd2l0aC1iYWQtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhZDAyY2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDExLXJldi1saXN0LXdpdGgtYmFkLWNvbW1pdC5zaApAQCAtMCwwICsxLDU5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IHNob3VsZCBub3RpY2UgYmFkIGNvbW1pdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIE5vdGU6CisjIC0gY29tcHJlc3Npb24gbGV2ZWwgaXMgc2V0IHRvIHplcm8gdG8gbWFrZSAiY29ycnVwdGlvbnMiIGVhc2llciB0byBwZXJmb3JtCisjIC0gcmVmbG9nIGlzIGRpc2FibGVkIHRvIGF2b2lkIGV4dHJhIHJlZmVyZW5jZXMgd2hpY2ggd291bGQgdHdhcnQgdGhlIHRlc3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnIFwKKyAgICcKKyAgIGdpdCBpbml0ICYmCisgICBnaXQgY29uZmlnIGNvcmUuY29tcHJlc3Npb24gMCAmJgorICAgZ2l0IGNvbmZpZyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgZmFsc2UgJiYKKyAgIGVjaG8gImZvbyIgPiBmb28gJiYKKyAgIGdpdCBhZGQgZm9vICYmCisgICBnaXQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiICYmCisgICBlY2hvICJiYXIiID4gYmFyICYmCisgICBnaXQgYWRkIGJhciAmJgorICAgZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGNvbW1pdCIgJiYKKyAgIGVjaG8gImJheiIgPiBiYXogJiYKKyAgIGdpdCBhZGQgYmF6ICYmCisgICBnaXQgY29tbWl0IC1tICJ0aGlyZCBjb21taXQiICYmCisgICBlY2hvICJmb28gYWdhaW4iID4+IGZvbyAmJgorICAgZ2l0IGFkZCBmb28gJiYKKyAgIGdpdCBjb21taXQgLW0gImZvdXJ0aCBjb21taXQiICYmCisgICBnaXQgcmVwYWNrIC1hIC1mIC1kCisgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBudW1iZXIgb2YgcmV2aXNpb25zJyBcCisgICAnCisgICByZXZzPSQoZ2l0IHJldi1saXN0IC0tYWxsIHwgd2MgLWwpICYmCisgICB0ZXN0ICRyZXZzIC1lcSA0ICYmCisgICBmaXJzdF9jb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykKKyAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycnVwdCBzZWNvbmQgY29tbWl0IG9iamVjdCcgXAorICAgJworICAgcGVybCAtaS5iYWsgLXBlICJzL3NlY29uZCBjb21taXQvc29jb25kIGNvbW1pdC8iIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjayAmJgorICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1mdWxsCisgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX0NPTU1JVF9HUkFQSD0wIGdpdCAtYyBjb3JlLmNvbW1pdEdyYXBoPWZhbHNlIHJldi1saXN0IC0tYWxsID4gL2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXBhY2sgX01VU1RfIGZhaWwnIFwKKyAgICcKKyAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBhY2sgLWEgLWYgLWQKKyAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgY29tbWl0IGlzIHN0aWxsIGF2YWlsYWJsZScgXAorICAgJworICAgZ2l0IGxvZyAkZmlyc3RfY29tbWl0CisgICAnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3Q2MDEyLXJldi1saXN0LXNpbXBsaWZ5LnNoIGIvdC90NjAxMi1yZXYtbGlzdC1zaW1wbGlmeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMTBmMGRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMi1yZXYtbGlzdC1zaW1wbGlmeS5zaApAQCAtMCwwICsxLDE1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlIHNpbXBsaWZpY2F0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworbm90ZSAoKSB7CisJZ2l0IHRhZyAiJDEiCit9CisKK3Vubm90ZSAoKSB7CisJZ2l0IG5hbWUtcmV2IC0tdGFncyAtLXN0ZGluIHwgc2VkIC1lICJzfCRPSURfUkVHRVggKHRhZ3MvXChbXildKlwpKSB8XDEgfGciCit9CisKKyMKKyMgQ3JlYXRlIGEgdGVzdCByZXBvIHdpdGggaW50ZXJlc3RpbmcgY29tbWl0IGdyYXBoOgorIworIyBBLS1CLS0tLS0tLS0tLUctLUgtLUktLUstLUwKKyMgIFwgIFwgICAgICAgICAgIC8gICAgIC8KKyMgICBcICBcICAgICAgICAgLyAgICAgLworIyAgICBDLS0tLS0tRS0tLUYgICAgIEoKKyMgICAgICAgIFxfLworIworIyBUaGUgY29tbWl0cyBhcmUgbGFpZCBvdXQgZnJvbSBsZWZ0LXRvLXJpZ2h0IHN0YXJ0aW5nIHdpdGgKKyMgdGhlIHJvb3QgY29tbWl0IEEgYW5kIHRlcm1pbmF0aW5nIGF0IHRoZSB0aXAgY29tbWl0IEwuCisjCisjIFRoZXJlIGFyZSBhIGZldyBwbGFjZXMgd2hlcmUgd2UgYWRqdXN0IHRoZSBjb21taXQgZGF0ZSBvcgorIyBhdXRob3IgZGF0ZSB0byBtYWtlIHRoZSAtLXRvcG8tb3JkZXIsIC0tZGF0ZS1vcmRlciwgYW5kCisjIC0tYXV0aG9yLWRhdGUtb3JkZXIgZmxhZ3MgcHJvZHVjZSBkaWZmZXJlbnQgb3V0cHV0LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvICJIaSB0aGVyZSIgPmZpbGUgJiYKKwllY2hvICJpbml0aWFsIiA+bG9zdCAmJgorCWdpdCBhZGQgZmlsZSBsb3N0ICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkluaXRpYWwgZmlsZSBhbmQgbG9zdCIgJiYKKwlub3RlIEEgJiYKKworCWdpdCBicmFuY2ggb3RoZXItYnJhbmNoICYmCisKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy91bnJlbGF0ZWQgJiYKKwlnaXQgcm0gLWYgIioiICYmCisJZWNobyAiVW5yZWxhdGVkIGJyYW5jaCIgPnNpZGUgJiYKKwlnaXQgYWRkIHNpZGUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiU2lkZSByb290IiAmJgorCW5vdGUgSiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWVjaG8gIkhlbGxvIiA+ZmlsZSAmJgorCWVjaG8gInNlY29uZCIgPmxvc3QgJiYKKwlnaXQgYWRkIGZpbGUgbG9zdCAmJgorCXRlc3RfdGljayAmJiBHSVRfQVVUSE9SX0RBVEU9JCgoJHRlc3RfdGljayArIDEyMCkpIGdpdCBjb21taXQgLW0gIk1vZGlmaWVkIGZpbGUgYW5kIGxvc3QiICYmCisJbm90ZSBCICYmCisKKwlnaXQgY2hlY2tvdXQgb3RoZXItYnJhbmNoICYmCisKKwllY2hvICJIZWxsbyIgPmZpbGUgJiYKKwk+bG9zdCAmJgorCWdpdCBhZGQgZmlsZSBsb3N0ICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIk1vZGlmaWVkIHRoZSBmaWxlIGlkZW50aWNhbGx5IiAmJgorCW5vdGUgQyAmJgorCisJZWNobyAiVGhpcyBpcyBhIHN0dXBpZCBleGFtcGxlIiA+YW5vdGhlci1maWxlICYmCisJZ2l0IGFkZCBhbm90aGVyLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiQWRkIGFub3RoZXIgZmlsZSIgJiYKKwlub3RlIEQgJiYKKworCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtbSAibWVyZ2UiIG1hc3RlciAmJgorCT5sb3N0ICYmIGdpdCBjb21taXQgLWEgLW0gIm1lcmdlIiAmJgorCW5vdGUgRSAmJgorCisJZWNobyAiWWV0IGFub3RoZXIiID5lbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIklycmVsZXZhbnQgY2hhbmdlIiAmJgorCW5vdGUgRiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gIllldCBhbm90aGVyIiA+ZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJBbm90aGVyIGlycmVsZXZhbnQgY2hhbmdlIiAmJgorCW5vdGUgRyAmJgorCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtbSAibWVyZ2UiIG90aGVyLWJyYW5jaCAmJgorCW5vdGUgSCAmJgorCisJZWNobyAiRmluYWwgY2hhbmdlIiA+ZmlsZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJGaW5hbCBjaGFuZ2UiICYmCisJbm90ZSBJICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgLW0gIkNvb2xlc3QiIHVucmVsYXRlZCAmJgorCW5vdGUgSyAmJgorCisJZWNobyAiSW1tYXRlcmlhbCIgPmVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiTGFzdCIgJiYKKwlub3RlIEwKKycKKworRk1UPSd0Zm9ybWF0OiVQIAklSCB8ICVzJworCitjaGVja19vdXRjb21lICgpIHsKKwlvdXRjb21lPSQxCisJc2hpZnQKKwlmb3IgYyBpbiAkMQorCWRvCisJCWVjaG8gIiRjIgorCWRvbmUgPmV4cGVjdCAmJgorCXNoaWZ0ICYmCisJcGFyYW09IiQqIiAmJgorCXRlc3RfZXhwZWN0XyRvdXRjb21lICJsb2cgJHBhcmFtIiAnCisJCWdpdCBsb2cgLS1wcmV0dHk9IiRGTVQiIC0tcGFyZW50cyAkcGFyYW0gfAorCQl1bm5vdGUgPmFjdHVhbCAmJgorCQlzZWQgLWUgInMvXi4qCVwoW14gXSpcKSAuKi9cMS8iID5jaGVjayA8YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBjaGVjaworCScKK30KKworY2hlY2tfcmVzdWx0ICgpIHsKKwljaGVja19vdXRjb21lIHN1Y2Nlc3MgIiRAIgorfQorCitjaGVja19yZXN1bHQgJ0wgSyBKIEkgSCBGIEUgRCBDIEcgQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLXRvcG8tb3JkZXIKK2NoZWNrX3Jlc3VsdCAnTCBLIEkgSCBHIEYgRSBEIEMgQiBKIEEnIC0tZnVsbC1oaXN0b3J5CitjaGVja19yZXN1bHQgJ0wgSyBJIEggRyBGIEUgRCBDIEIgSiBBJyAtLWZ1bGwtaGlzdG9yeSAtLWRhdGUtb3JkZXIKK2NoZWNrX3Jlc3VsdCAnTCBLIEkgSCBHIEYgRSBEIEIgQyBKIEEnIC0tZnVsbC1oaXN0b3J5IC0tYXV0aG9yLWRhdGUtb3JkZXIKK2NoZWNrX3Jlc3VsdCAnSyBJIEggRSBDIEIgQScgLS1mdWxsLWhpc3RvcnkgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdLIEkgSCBFIEMgQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLXRvcG8tb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdLIEkgSCBFIEMgQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLWRhdGUtb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdLIEkgSCBFIEIgQyBBJyAtLWZ1bGwtaGlzdG9yeSAtLWF1dGhvci1kYXRlLW9yZGVyIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBFIEMgQiBBJyAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0kgRSBDIEIgQScgLS1zaW1wbGlmeS1tZXJnZXMgLS10b3BvLW9yZGVyIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBFIEMgQiBBJyAtLXNpbXBsaWZ5LW1lcmdlcyAtLWRhdGUtb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdJIEUgQiBDIEEnIC0tc2ltcGxpZnktbWVyZ2VzIC0tYXV0aG9yLWRhdGUtb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdJIEIgQScgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdJIEIgQScgLS10b3BvLW9yZGVyIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBCIEEnIC0tZGF0ZS1vcmRlciAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0kgQiBBJyAtLWF1dGhvci1kYXRlLW9yZGVyIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSCcgLS1maXJzdC1wYXJlbnQgLS0gYW5vdGhlci1maWxlCitjaGVja19yZXN1bHQgJ0gnIC0tZmlyc3QtcGFyZW50IC0tdG9wby1vcmRlciAtLSBhbm90aGVyLWZpbGUKKworY2hlY2tfcmVzdWx0ICdFIEMgQiBBJyAtLWZ1bGwtaGlzdG9yeSBFIC0tIGxvc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1bGwgaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiB3aXRob3V0IHBhcmVudCcgJworCXByaW50ZiAiJXNcbiIgRSBDIEIgQSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLXByZXR0eT0iJEZNVCIgLS1mdWxsLWhpc3RvcnkgRSAtLSBsb3N0IHwKKwl1bm5vdGUgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eLioJXChbXiBdKlwpIC4qL1wxLyIgPmNoZWNrIDxhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mdWxsLWRpZmYgaXMgbm90IGFmZmVjdGVkIGJ5IC0tcGFyZW50cycgJworCWdpdCBsb2cgLXAgLS1wcmV0dHk9IiVIIiAtLWZ1bGwtZGlmZiAtLSBmaWxlID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLXAgLS1wcmV0dHk9IiVIIiAtLWZ1bGwtZGlmZiAtLXBhcmVudHMgLS0gZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxMy1yZXYtbGlzdC1yZXZlcnNlLXBhcmVudHMuc2ggYi90L3Q2MDEzLXJldi1saXN0LXJldmVyc2UtcGFyZW50cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OTQ1OGQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMy1yZXYtbGlzdC1yZXZlcnNlLXBhcmVudHMuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy0tcmV2ZXJzZSBjb21iaW5lcyB3aXRoIC0tcGFyZW50cycKKworLiAuL3Rlc3QtbGliLnNoCisKKworY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICQxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIC0tcmV2ZXJzZSBleGFtcGxlJyAnCisJY29tbWl0IG9uZSAmJgorCWdpdCB0YWcgcm9vdCAmJgorCWNvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCWNvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBzaWRlICYmCisJY29tbWl0IGZpdmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmV2ZXJzZSAtLXBhcmVudHMgLS1mdWxsLWhpc3RvcnkgY29tYmluZXMgY29ycmVjdGx5JyAnCisJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLWZ1bGwtaGlzdG9yeSBtYXN0ZXIgLS0gZm9vIHwKKwkJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLXJldmVyc2UgLS1wYXJlbnRzIC0tZnVsbC1oaXN0b3J5IG1hc3RlciAtLSBmb28gXAorCQk+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+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2ggYi90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODIxYTBjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaApAQCAtMCwwICsxLDkxNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBnaXQgYmlzZWN0IGZ1bmN0aW9uYWxpdHknCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2xpbmVfaW50b19maWxlKCkKK3sKKyAgICBfbGluZT0kMQorICAgIF9maWxlPSQyCisKKyAgICBpZiBbIC1mICIkX2ZpbGUiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJF9saW5lIiA+PiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQWRkIDwkX2xpbmU+IGludG8gPCRfZmlsZT4uIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJF9saW5lIiA+ICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgZ2l0IGFkZCAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQ3JlYXRlIGZpbGUgPCRfZmlsZT4gd2l0aCA8JF9saW5lPiBpbnNpZGUuIgorICAgIGZpCisKKyAgICB0ZXN0X3RpY2sKKyAgICBnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0ciICRfZmlsZQorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8gd2l0aCAxIGZpbGUgKGhlbGxvKSBhbmQgNCBjb21taXRzJyAnCisgICAgIGFkZF9saW5lX2ludG9fZmlsZSAiMTogSGVsbG8gV29ybGQiIGhlbGxvICYmCisgICAgIEhBU0gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBhZGRfbGluZV9pbnRvX2ZpbGUgIjI6IEEgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorICAgICBIQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgYWRkX2xpbmVfaW50b19maWxlICIzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKKyAgICAgSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGFkZF9saW5lX2ludG9fZmlsZSAiNDogQ2lhbyBmb3Igbm93IiBoZWxsbyAmJgorICAgICBIQVNIND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0cyB3aXRoIG9ubHkgb25lIGJhZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJZ2l0IGJpc2VjdCBuZXh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBkb2VzIG5vdCBzdGFydCB3aXRoIG9ubHkgb25lIGdvb2QnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0IHdpdGggb25lIGJhZCBhbmQgZ29vZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgorCWdpdCBiaXNlY3QgbmV4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZmFpbHMgaWYgZ2l2ZW4gYW55IGp1bmsgaW5zdGVhZCBvZiByZXZzJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgZm9vICRIQVNIMSAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSBiYXIgLS0gJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyoiKSIgJiYKKwl0ZXN0IC16ICIkKGxzIC5naXQvQklTRUNUXyogMj4vZGV2L251bGwpIiAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGdvb2QgZm9vICRIQVNIMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiYWQgZnJvdHogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJEhBU0g0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBza2lwIGJhciAkSEFTSDMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHNraXAgJEhBU0gxIGZvbyAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvKiIpIiAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0OiBiYWNrIGluIHRoZSBtYXN0ZXIgYnJhbmNoJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWVjaG8gIiogbWFzdGVyIiA+IGJyYW5jaC5leHBlY3QgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0OiBiYWNrIGluIGFub3RoZXIgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZWNobyAiICBtYXN0ZXIiID4gYnJhbmNoLmV4cGVjdCAmJgorCWVjaG8gIiogb3RoZXIiID4+IGJyYW5jaC5leHBlY3QgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0IHdoZW4gbm90IGJpc2VjdGluZycgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWNtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlc2V0IHJlbW92ZXMgcGFja2VkIHJlZnMnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlnaXQgYmlzZWN0IG5leHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2Jpc2VjdC8qIikiICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2hlYWRzL2Jpc2VjdCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVzZXQgcmVtb3ZlcyBiaXNlY3Qgc3RhdGUgYWZ0ZXIgLS1uby1jaGVja291dCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IC0tbm8tY2hlY2tvdXQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0gzICYmCisJZ2l0IGJpc2VjdCBuZXh0ICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvKiIpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9oZWFkcy9iaXNlY3QiKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgIkJJU0VDVF9IRUFEIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogYmFjayBpbiBnb29kIGJyYW5jaCcgJworCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgY3JlYXRlZCBpZiBqdW5rIHJldicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCBmb28gLS0gJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1lIC5naXQvQklTRUNUX1NUQVJUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogZXhpc3RpbmcgIi5naXQvQklTRUNUX1NUQVJUIiBub3QgbW9kaWZpZWQgaWYganVuayByZXYnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgLS0gJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwljcCAuZ2l0L0JJU0VDVF9TVEFSVCBzYXZlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0IGZvbyAtLSAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiKiAobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiBvdGhlcikiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwl0ZXN0X2NtcCBzYXZlZCAuZ2l0L0JJU0VDVF9TVEFSVAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0OiBubyAiLmdpdC9CSVNFQ1RfU1RBUlQiIGlmIG1pc3Rha2VuIHJldicgJworCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0gxICRIQVNINCAtLSAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWUgLmdpdC9CSVNFQ1RfU1RBUlQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0OiBubyAiLmdpdC9CSVNFQ1RfU1RBUlQiIGlmIGNoZWNrb3V0IGVycm9yJyAnCisJZWNobyAidGVtcCBzdHVmZiIgPiBoZWxsbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBicmFuY2ggJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1lIC5naXQvQklTRUNUX1NUQVJUICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2Jpc2VjdC8qIikiICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgaGVsbG8KKycKKworIyAkSEFTSDEgaXMgZ29vZCwgJEhBU0g0IGlzIGJhZCwgd2Ugc2tpcCAkSEFTSDMKKyMgYnV0ICRIQVNIMiBpcyBiYWQsCisjIHNvIHdlIHNob3VsZCBmaW5kICRIQVNIMiBhcyB0aGUgZmlyc3QgYmFkIGNvbW1pdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXA6IHN1Y2Nlc3NmdWwgcmVzdWx0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBiYWQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNIMiBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKworIyAkSEFTSDEgaXMgZ29vZCwgJEhBU0g0IGlzIGJhZCwgd2Ugc2tpcCAkSEFTSDMgYW5kICRIQVNIMgorIyBzbyB3ZSBzaG91bGQgbm90IGJlIGFibGUgdG8gdGVsbCB0aGUgZmlyc3QgYmFkIGNvbW1pdAorIyBhbW9uZyAkSEFTSDIsICRIQVNIMyBhbmQgJEhBU0g0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogY2Fubm90IHRlbGwgYmV0d2VlbiAzIGNvbW1pdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorCWdpdCBiaXNlY3Qgc2tpcCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgYmlzZWN0IHNraXAgPm15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJISBncmVwICRIQVNIMSBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0gyIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDMgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dAorJworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDQgaXMgYmFkLCB3ZSBza2lwICRIQVNIMworIyBidXQgJEhBU0gyIGlzIGdvb2QsCisjIHNvIHdlIHNob3VsZCBub3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBmaXJzdCBiYWQgY29tbWl0CisjIGFtb25nICRIQVNIMyBhbmQgJEhBU0g0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogY2Fubm90IHRlbGwgYmV0d2VlbiAyIGNvbW1pdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorCWdpdCBiaXNlY3Qgc2tpcCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgYmlzZWN0IGdvb2QgPm15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJISBncmVwICRIQVNIMSBteV9iaXNlY3RfbG9nLnR4dCAmJgorCSEgZ3JlcCAkSEFTSDIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNIMyBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0g0IG15X2Jpc2VjdF9sb2cudHh0CisnCisKKyMgJEhBU0gxIGlzIGdvb2QsICRIQVNINCBpcyBib3RoIHNraXBwZWQgYW5kIGJhZCwgd2Ugc2tpcCAkSEFTSDMKKyMgYW5kICRIQVNIMiBpcyBnb29kLAorIyBzbyB3ZSBzaG91bGQgbm90IGJlIGFibGUgdG8gdGVsbCB0aGUgZmlyc3QgYmFkIGNvbW1pdAorIyBhbW9uZyAkSEFTSDMgYW5kICRIQVNINAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXA6IHdpdGggY29tbWl0IGJvdGggYmFkIGFuZCBza2lwcGVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBiYWQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBiaXNlY3QgZ29vZCA+bXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZiIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkhIGdyZXAgJEhBU0gxIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJISBncmVwICRIQVNIMiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0gzIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQKKycKKworIyBXZSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgY29tbWl0IHRoYXQKKyMgaW50cm9kdWNlZCAiQW5vdGhlciIgaW50byBoZWxsby4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICciZ2l0IGJpc2VjdCBydW4iIHNpbXBsZSBjYXNlJyBcCisgICAgJ2VjaG8gIiMiXCEiL2Jpbi9zaCIgPiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBlY2hvICJncmVwIEFub3RoZXIgaGVsbG8gPiAvZGV2L251bGwiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGVjaG8gInRlc3QgXCQ/IC1uZSAwIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBjaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBnaXQgYmlzZWN0IHN0YXJ0ICYmCisgICAgIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKyAgICAgZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisgICAgIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBncmVwICIkSEFTSDMgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQnCisKKyMgV2Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IGZpbmQgdGhlIGNvbW1pdCB0aGF0CisjIGludHJvZHVjZWQgIkNpYW8iIGludG8gaGVsbG8uCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnImdpdCBiaXNlY3QgcnVuIiB3aXRoIG1vcmUgY29tcGxleCAiZ2l0IGJpc2VjdCBzdGFydCInIFwKKyAgICAnZWNobyAiIyJcISIvYmluL3NoIiA+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGVjaG8gImdyZXAgQ2lhbyBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgZWNobyAidGVzdCBcJD8gLW5lIDAiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGNobW9kICt4IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAmJgorICAgICBnaXQgYmlzZWN0IHJ1biAuL3Rlc3Rfc2NyaXB0LnNoID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKyAgICAgZ3JlcCAiJEhBU0g0IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBnaXQgYmlzZWN0IHJlc2V0JworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDUgaXMgYmFkLCB3ZSBza2lwICRIQVNIMworIyBidXQgJEhBU0g0IGlzIGdvb2QsCisjIHNvIHdlIHNob3VsZCBmaW5kICRIQVNINSBhcyB0aGUgZmlyc3QgYmFkIGNvbW1pdAorSEFTSDU9Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogYWRkIGxpbmUgYW5kIHRoZW4gYSBuZXcgdGVzdCcgJworCWFkZF9saW5lX2ludG9fZmlsZSAiNTogQW5vdGhlciBuZXcgbGluZS4iIGhlbGxvICYmCisJSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDUgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDUgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCBsb2cgPiBsb2dfdG9fcmVwbGF5LnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXAgYW5kIGJpc2VjdCByZXBsYXknICcKKwlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5LnR4dCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g1IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKworSEFTSDY9Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcnVuICYgc2tpcDogY2Fubm90IHRlbGwgYmV0d2VlbiAyJyAnCisJYWRkX2xpbmVfaW50b19maWxlICI2OiBZZXQgYSBsaW5lLiIgaGVsbG8gJiYKKwlIQVNINj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwllY2hvICIjIlwhIi9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJzZWQgLW5lIFxcXCRwIGhlbGxvIHwgZ3JlcCBDaWFvID4gL2Rldi9udWxsICYmIGV4aXQgMTI1IiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gImdyZXAgbGluZSBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwljaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g2ICRIQVNIMSAmJgorCWlmIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dAorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgaGF2ZSBmYWlsZWQuCisJCWZhbHNlCisJZWxzZQorCQl0ZXN0ICQ/IC1lcSAyICYmCisJCWdyZXAgImZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQkhIGdyZXAgJEhBU0gzIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJCSEgZ3JlcCAkSEFTSDYgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJZ3JlcCAkSEFTSDUgbXlfYmlzZWN0X2xvZy50eHQKKwlmaQorJworCitIQVNINz0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBydW4gJiBza2lwOiBmaW5kIGZpcnN0IGJhZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjc6IFNob3VsZCBiZSB0aGUgbGFzdCBsaW5lLiIgaGVsbG8gJiYKKwlIQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwllY2hvICIjIlwhIi9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJzZWQgLW5lIFxcXCRwIGhlbGxvIHwgZ3JlcCBDaWFvID4gL2Rldi9udWxsICYmIGV4aXQgMTI1IiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gInNlZCAtbmUgXFxcJHAgaGVsbG8gfCBncmVwIGRheSA+IC9kZXYvbnVsbCAmJiBleGl0IDEyNSIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJncmVwIFlldCBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwllY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKwljaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINiBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHNraXAgb25seSBvbmUgcmFuZ2UnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICRIQVNIMS4uJEhBU0g1ICYmCisJdGVzdCAiJEhBU0g2IiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiYWQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgImZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mIiBteV9iaXNlY3RfbG9nLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcCBtYW55IHJhbmdlcycgJworCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorCXRlc3QgIiRIQVNINCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorCWdpdCBiaXNlY3Qgc2tpcCAkSEFTSDIgJEhBU0gyLi4gLi4kSEFTSDUgJiYKKwl0ZXN0ICIkSEFTSDYiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydGluZyB3aXRoIGEgZGV0YWNoZWQgSEVBRCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXiAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCXRlc3QgJEhFQUQgPSAkKGNhdCAuZ2l0L0JJU0VDVF9TVEFSVCkgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZXJyb3JzIG91dCBpZiBiYWQgYW5kIGdvb2QgYXJlIG1pc3Rha2VuJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0gyICRIQVNINCAyPiByZXZfbGlzdF9lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgIm1pc3Rvb2sgZ29vZCBhbmQgYmFkIiByZXZfbGlzdF9lcnJvciAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGRvZXMgbm90IGNyZWF0ZSBhICJiaXNlY3QiIGJyYW5jaCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKwlnaXQgYnJhbmNoIGJpc2VjdCAmJgorCXJldl9oYXNoND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcmV2X2hhc2g0IiA9ICIkSEFTSDQiICYmCisJZ2l0IGJyYW5jaCAtRCBiaXNlY3QgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwlnaXQgYnJhbmNoIGJpc2VjdCAmJgorCXJldl9oYXNoNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcmV2X2hhc2g2IiA9ICIkSEFTSDYiICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDcgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXJldl9oYXNoNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmlzZWN0KSAmJgorCXRlc3QgIiRyZXZfaGFzaDYiID0gIiRIQVNINiIgJiYKKwlnaXQgYnJhbmNoIC1EIGJpc2VjdAorJworCisjIFRoaXMgY3JlYXRlcyBhICJzaWRlIiBicmFuY2ggdG8gdGVzdCAic2libGluZ3MiIGNhc2VzLgorIworIyBIMS1IMi1IMy1INC1INS1INi1INyAgPC0tb3RoZXIKKyMgICAgICAgICAgICBcCisjICAgICAgICAgICAgIFM1LVM2LVM3ICA8LS1zaWRlCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlIGJyYW5jaCBjcmVhdGlvbicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAkSEFTSDQgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjUoc2lkZSk6IGZpcnN0IGxpbmUgb24gYSBzaWRlIGJyYW5jaCIgaGVsbG8yICYmCisJU0lERV9IQVNINT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjYoc2lkZSk6IHNlY29uZCBsaW5lIG9uIGEgc2lkZSBicmFuY2giIGhlbGxvMiAmJgorCVNJREVfSEFTSDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI3KHNpZGUpOiB0aGlyZCBsaW5lIG9uIGEgc2lkZSBicmFuY2giIGhlbGxvMiAmJgorCVNJREVfSEFTSDc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvb2QgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciICIkU0lERV9IQVNINyIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCSEgZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNINiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwZWQgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkU0lERV9IQVNINyIgIiRIQVNINyIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHNraXAgPiBteV9iaXNlY3RfbG9nLnR4dCAyPiYxICYmCisJZ3JlcCAid2FybmluZyIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRTSURFX0hBU0g2IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWQgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciIEhFQUQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJtZXJnZSBiYXNlICRIQVNINCBpcyBiYWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJdGVzdF9pMThuZ3JlcCAiZml4ZWQgYmV0d2VlbiAkSEFTSDQgYW5kIFxbJFNJREVfSEFTSDdcXSIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKKyMgVGhpcyBjcmVhdGVzIGEgZmV3IG1vcmUgY29tbWl0cyAoQSBhbmQgQikgdG8gdGVzdCAic2libGluZ3MiIGNhc2VzCisjIHdoZW4gYSBnb29kIGFuZCBhIGJhZCByZXYgaGF2ZSBtYW55IG1lcmdlIGJhc2VzLgorIworIyBXZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nOgorIworIyBIMS1IMi1IMy1INC1INS1INi1INworIyAgICAgICAgICAgIFwgIFwgICAgIFwKKyMgICAgICAgICAgICAgUzUtQSAgICAgXAorIyAgICAgICAgICAgICAgXCAgICAgICAgXAorIyAgICAgICAgICAgICAgIFM2LVM3LS0tLUIKKyMKKyMgQW5kIHRoZXJlIEEgYW5kIEIgaGF2ZSAyIG1lcmdlIGJhc2VzIChTNSBhbmQgSDUpIHRoYXQgc2hvdWxkIGJlCisjIHJlcG9ydGVkIGJ5ICJnaXQgbWVyZ2UtYmFzZSAtLWFsbCBBIEIiLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFueSBtZXJnZSBiYXNlcyBjcmVhdGlvbicgJworCWdpdCBjaGVja291dCAiJFNJREVfSEFTSDUiICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBIQVNINSBhbmQgU0lERV9IQVNINSIgIiRIQVNINSIgJiYKKwlBX0hBU0g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLW0gIm1lcmdlIEhBU0g3IGFuZCBTSURFX0hBU0g3IiAiJEhBU0g3IiAmJgorCUJfSEFTSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWFsbCAiJEFfSEFTSCIgIiRCX0hBU0giID4gbWVyZ2VfYmFzZXMudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBtZXJnZV9iYXNlcy50eHQgJiYKKwlncmVwICIkSEFTSDUiIG1lcmdlX2Jhc2VzLnR4dCAmJgorCWdyZXAgIiRTSURFX0hBU0g1IiBtZXJnZV9iYXNlcy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ29vZCBtZXJnZSBiYXNlcyB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkQl9IQVNIIiAiJEFfSEFTSCIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZzIudHh0ICYmCisJdGVzdF9pMThuZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZzIudHh0ICYmCisJeworCQl7CisJCQlncmVwICIkU0lERV9IQVNINSIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJCWdyZXAgIiRIQVNINSIgbXlfYmlzZWN0X2xvZzIudHh0CisJCX0gfHwgeworCQkJZ3JlcCAiJFNJREVfSEFTSDUiIG15X2Jpc2VjdF9sb2cyLnR4dCAmJgorCQkJZ3JlcCAiJEhBU0g1IiBteV9iaXNlY3RfbG9nLnR4dAorCQl9CisJfSAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW1pemVkIG1lcmdlIGJhc2UgY2hlY2tzJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAiJEhBU0g3IiAiJFNJREVfSEFTSDciID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nMi50eHQgJiYKKwl0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCisJdGVzdCAiJEhBU0g2IiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCBnb29kICIkQV9IQVNIIiA+IG15X2Jpc2VjdF9sb2c0LnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2c0LnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWYgIi5naXQvQklTRUNUX0FOQ0VTVE9SU19PSyIKKycKKworIyBUaGlzIGNyZWF0ZXMgYW5vdGhlciBzaWRlIGJyYW5jaCBjYWxsZWQgInBhcmFsbGVsIiB3aXRoIHNvbWUgZmlsZXMKKyMgaW4gc29tZSBkaXJlY3RvcmllcywgdG8gdGVzdCBiaXNlY3Rpbmcgd2l0aCBwYXRocy4KKyMKKyMgV2Ugc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgUDEtUDItUDMtUDQtUDUtUDYtUDcKKyMgICAvICAgICAgICAvICAgICAgICAvCisjIEgxLUgyLUgzLUg0LUg1LUg2LUg3CisjICAgICAgICAgICAgXCAgXCAgICAgXAorIyAgICAgICAgICAgICBTNS1BICAgICBcCisjICAgICAgICAgICAgICBcICAgICAgICBcCisjICAgICAgICAgICAgICAgUzYtUzctLS0tQgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInBhcmFsbGVsIiBzaWRlIGJyYW5jaCBjcmVhdGlvbicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcGFyYWxsZWwgJEhBU0gxICYmCisJbWtkaXIgZGlyMSBkaXIyICYmCisJYWRkX2xpbmVfaW50b19maWxlICIxKHBhcmEpOiBsaW5lIDEgb24gcGFyYWxsZWwgYnJhbmNoIiBkaXIxL2ZpbGUxICYmCisJUEFSQV9IQVNIMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjIocGFyYSk6IGxpbmUgMiBvbiBwYXJhbGxlbCBicmFuY2giIGRpcjIvZmlsZTIgJiYKKwlQQVJBX0hBU0gyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMyhwYXJhKTogbGluZSAzIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMi9maWxlMyAmJgorCVBBUkFfSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBIQVNINCBhbmQgUEFSQV9IQVNIMyIgIiRIQVNINCIgJiYKKwlQQVJBX0hBU0g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNShwYXJhKTogYWRkIGxpbmUgb24gcGFyYWxsZWwgYnJhbmNoIiBkaXIxL2ZpbGUxICYmCisJUEFSQV9IQVNINT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjYocGFyYSk6IGFkZCBsaW5lIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMi9maWxlMiAmJgorCVBBUkFfSEFTSDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBIQVNINyBhbmQgUEFSQV9IQVNINiIgIiRIQVNINyIgJiYKKwlQQVJBX0hBU0g3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0cmljdGluZyBiaXNlY3Rpb24gb24gb25lIGRpcicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgJEhBU0gxIC0tIGRpcjEgJiYKKwlwYXJhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTEiID0gIiRQQVJBX0hBU0gxIiAmJgorCWdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkUEFSQV9IQVNIMSBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdHJpY3RpbmcgYmlzZWN0aW9uIG9uIG9uZSBkaXIgYW5kIGEgZmlsZScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgJEhBU0gxIC0tIGRpcjEgaGVsbG8gJiYKKwlwYXJhND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTQiID0gIiRQQVJBX0hBU0g0IiAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJaGFzaDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJGhhc2gzIiA9ICIkSEFTSDMiICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJaGFzaDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJGhhc2g0IiA9ICIkSEFTSDQiICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJcGFyYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmExIiA9ICIkUEFSQV9IQVNIMSIgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRQQVJBX0hBU0g0IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwcGluZyBhd2F5IGZyb20gc2tpcHBlZCBjb21taXQnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICRQQVJBX0hBU0g3ICRIQVNIMSAmJgorCXBhcmE0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRwYXJhNCIgPSAiJFBBUkFfSEFTSDQiICYmCisgICAgICAgIGdpdCBiaXNlY3Qgc2tpcCAmJgorCWhhc2g3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRoYXNoNyIgPSAiJEhBU0g3IiAmJgorICAgICAgICBnaXQgYmlzZWN0IHNraXAgJiYKKwlwYXJhMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTMiID0gIiRQQVJBX0hBU0gzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvcmluZyBvdXQgd2hlbiB1c2luZyBiYWQgcGF0aCBwYXJhbWV0ZXJzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkUEFSQV9IQVNINyAkSEFTSDEgLS0gZm9vYmFyIDI+IGVycm9yLnR4dCAmJgorCXRlc3RfaTE4bmdyZXAgImJhZCBwYXRoIHBhcmFtZXRlcnMiIGVycm9yLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGJpc2VjdGlvbiBvbiBiYXJlIHJlcG8gLSAtLW5vLWNoZWNrb3V0IHNwZWNpZmllZCcgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLm5vY2hlY2tvdXQgJiYKKwkoCisJCWNkIGJhcmUubm9jaGVja291dCAmJgorCQlnaXQgYmlzZWN0IHN0YXJ0IC0tbm8tY2hlY2tvdXQgJiYKKwkJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCQlnaXQgYmlzZWN0IGJhZCAkSEFTSDQgJiYKKwkJZ2l0IGJpc2VjdCBydW4gZXZhbCBcCisJCQkidGVzdCBcJChnaXQgcmV2LWxpc3QgQklTRUNUX0hFQUQgXiRIQVNIMiAtLW1heC1jb3VudD0xIHwgd2MgLWwpID0gMCIgXAorCQkJPi4uL25vY2hlY2tvdXQubG9nCisJKSAmJgorCWdyZXAgIiRIQVNIMyBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbm9jaGVja291dC5sb2cKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGJpc2VjdGlvbiBvbiBiYXJlIHJlcG8gLSAtLW5vLWNoZWNrb3V0IGRlZmF1bHRlZCcgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmRlZmF1bHRlZCAmJgorCSgKKwkJY2QgYmFyZS5kZWZhdWx0ZWQgJiYKKwkJZ2l0IGJpc2VjdCBzdGFydCAmJgorCQlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJCWdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgorCQlnaXQgYmlzZWN0IHJ1biBldmFsIFwKKwkJCSJ0ZXN0IFwkKGdpdCByZXYtbGlzdCBCSVNFQ1RfSEVBRCBeJEhBU0gyIC0tbWF4LWNvdW50PTEgfCB3YyAtbCkgPSAwIiBcCisJCQk+Li4vZGVmYXVsdGVkLmxvZworCSkgJiYKKwlncmVwICIkSEFTSDMgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIGRlZmF1bHRlZC5sb2cKKycKKworIworIyBUaGlzIGNyZWF0ZXMgYSBicm9rZW4gYnJhbmNoIHdoaWNoIGNhbm5vdCBiZSBjaGVja2VkIG91dCBiZWNhdXNlCisjIHRoZSB0cmVlIGNyZWF0ZWQgaGFzIGJlZW4gZGVsZXRlZC4KKyMKKyMgSDEtSDItSDMtSDQtSDUtSDYtSDcgIDwtLW90aGVyCisjICAgICAgICAgICAgXAorIyAgICAgICAgICAgICBTNS1TNictUzcnLVM4Jy1TOSAgPC0tYnJva2VuCisjCisjIENvbW1pdHMgbWFya2VkIHdpdGggJyBoYXZlIGEgbWlzc2luZyB0cmVlLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJva2VuIGJyYW5jaCBjcmVhdGlvbicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJva2VuICRIQVNINCAmJgorCWdpdCB0YWcgQlJPS0VOX0hBU0g0ICRIQVNINCAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNShicm9rZW4pOiBmaXJzdCBsaW5lIG9uIGEgYnJva2VuIGJyYW5jaCIgaGVsbG8yICYmCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDUgJiYKKwlta2RpciBtaXNzaW5nICYmCisJOj4gbWlzc2luZy9NSVNTSU5HICYmCisJZ2l0IGFkZCBtaXNzaW5nL01JU1NJTkcgJiYKKwlnaXQgY29tbWl0IC1tICI2KGJyb2tlbik6IEFkZGVkIGZpbGUgdGhhdCB3aWxsIGJlIGRlbGV0ZWQiICYmCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDYgJiYKKwlkZWxldGVkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOm1pc3NpbmcpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI3KGJyb2tlbik6IHNlY29uZCBsaW5lIG9uIGEgYnJva2VuIGJyYW5jaCIgaGVsbG8yICYmCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDcgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjgoYnJva2VuKTogdGhpcmQgbGluZSBvbiBhIGJyb2tlbiBicmFuY2giIGhlbGxvMiAmJgorCWdpdCB0YWcgQlJPS0VOX0hBU0g4ICYmCisJZ2l0IHJtIG1pc3NpbmcvTUlTU0lORyAmJgorCWdpdCBjb21taXQgLW0gIjkoYnJva2VuKTogUmVtb3ZlIG1pc3NpbmcgZmlsZSIgJiYKKwlnaXQgdGFnIEJST0tFTl9IQVNIOSAmJgorCXJtIC5naXQvb2JqZWN0cy8kKHRlc3Rfb2lkX3RvX3BhdGggJGRlbGV0ZWQpCisnCisKK2VjaG8gIiIgPiBleHBlY3RlZC5vaworY2F0ID4gZXhwZWN0ZWQubWlzc2luZy10cmVlLmRlZmF1bHQgPDxFT0YKK2ZhdGFsOiB1bmFibGUgdG8gcmVhZCB0cmVlICRkZWxldGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGZhaWxzIGlmIHRyZWUgaXMgYnJva2VuIG9uIHN0YXJ0IGNvbW1pdCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0IEJST0tFTl9IQVNINyBCUk9LRU5fSEFTSDQgMj5lcnJvci50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5taXNzaW5nLXRyZWUuZGVmYXVsdCBlcnJvci50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGZhaWxzIGlmIHRyZWUgaXMgYnJva2VuIG9uIHRyaWFsIGNvbW1pdCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0IEJST0tFTl9IQVNIOSBCUk9LRU5fSEFTSDQgMj5lcnJvci50eHQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGJyb2tlbiAmJgorCWdpdCBjaGVja291dCBicm9rZW4gJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5taXNzaW5nLXRyZWUuZGVmYXVsdCBlcnJvci50eHQKKycKKworY2hlY2tfc2FtZSgpCit7CisJZWNobyAiQ2hlY2tpbmcgJDEgaXMgdGhlIHNhbWUgYXMgJDIiICYmCisJdGVzdF9jbXBfcmV2ICIkMSIgIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Q6IC0tbm8tY2hlY2tvdXQgLSBzdGFydCBjb21taXQgYmFkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgQlJPS0VOX0hBU0g3IEJST0tFTl9IQVNINCAtLW5vLWNoZWNrb3V0ICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdDogLS1uby1jaGVja291dCAtIHRyaWFsIGNvbW1pdCBiYWQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBicm9rZW4gQlJPS0VOX0hBU0g0IC0tbm8tY2hlY2tvdXQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINiBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiAtLW5vLWNoZWNrb3V0IC0gdGFyZ2V0IGJlZm9yZSBicmVha2FnZScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IGJyb2tlbiBCUk9LRU5fSEFTSDQgLS1uby1jaGVja291dCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g2IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCBiYWQgQklTRUNUX0hFQUQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINSBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgYmFkIEJJU0VDVF9IRUFEICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDUgYmlzZWN0L2JhZCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiAtLW5vLWNoZWNrb3V0IC0gdGFyZ2V0IGluIGJyZWFrYWdlJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgYnJva2VuIEJST0tFTl9IQVNINCAtLW5vLWNoZWNrb3V0ICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IGJhZCBCSVNFQ1RfSEVBRCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g1IEJJU0VDVF9IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBnb29kIEJJU0VDVF9IRUFEICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgYmlzZWN0L2JhZCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiAtLW5vLWNoZWNrb3V0IC0gdGFyZ2V0IGFmdGVyIGJyZWFrYWdlJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgYnJva2VuIEJST0tFTl9IQVNINCAtLW5vLWNoZWNrb3V0ICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgQklTRUNUX0hFQUQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNIOCBCSVNFQ1RfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgZ29vZCBCSVNFQ1RfSEVBRCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g5IGJpc2VjdC9iYWQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdDogZGVtb25zdHJhdGUgaWRlbnRpZmljYXRpb24gb2YgZGFtYWdlIGJvdW5kYXJ5JyAiCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBjaGVja291dCBicm9rZW4gJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IGJyb2tlbiBtYXN0ZXIgLS1uby1jaGVja291dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgcnVuIFwiXCRTSEVMTF9QQVRIXCIgLWMgJworCQlHT09EPVwkKGdpdCBmb3ItZWFjaC1yZWYgXCItLWZvcm1hdD0lKG9iamVjdG5hbWUpXCIgcmVmcy9iaXNlY3QvZ29vZC0qKSAmJgorCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEJJU0VDVF9IRUFEIC0tbm90IFwkR09PRCA+dG1wLlwkXCQgJiYKKwkJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCA+L2Rldi9udWxsIDwgdG1wLlwkXCQKKwkJcmM9XCQ/CisJCXJtIC1mIHRtcC5cJFwkCisJCXRlc3QgXCRyYyA9IDAnICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgYmlzZWN0L2JhZCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKyIKKworY2F0ID4gZXhwZWN0ZWQuYmlzZWN0LWxvZyA8PEVPRgorIyBiYWQ6IFskSEFTSDRdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCisjIGdvb2Q6IFskSEFTSDJdIEFkZCA8MjogQSBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KK2dpdCBiaXNlY3Qgc3RhcnQgJyRIQVNINCcgJyRIQVNIMicKKyMgZ29vZDogWyRIQVNIM10gQWRkIDwzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgorZ2l0IGJpc2VjdCBnb29kICRIQVNIMworIyBmaXJzdCBiYWQgY29tbWl0OiBbJEhBU0g0XSBBZGQgPDQ6IENpYW8gZm9yIG5vdz4gaW50byA8aGVsbG8+LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBsb2c6IHN1Y2Nlc3NmdWwgcmVzdWx0JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMiAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWdpdCBiaXNlY3QgbG9nID5iaXNlY3QtbG9nLnR4dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmJpc2VjdC1sb2cgYmlzZWN0LWxvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK2NhdCA+IGV4cGVjdGVkLmJpc2VjdC1za2lwLWxvZyA8PEVPRgorIyBiYWQ6IFskSEFTSDRdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCisjIGdvb2Q6IFskSEFTSDJdIEFkZCA8MjogQSBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KK2dpdCBiaXNlY3Qgc3RhcnQgJyRIQVNINCcgJyRIQVNIMicKKyMgc2tpcDogWyRIQVNIM10gQWRkIDwzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgorZ2l0IGJpc2VjdCBza2lwICRIQVNIMworIyBvbmx5IHNraXBwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QKKyMgcG9zc2libGUgZmlyc3QgYmFkIGNvbW1pdDogWyRIQVNINF0gQWRkIDw0OiBDaWFvIGZvciBub3c+IGludG8gPGhlbGxvPi4KKyMgcG9zc2libGUgZmlyc3QgYmFkIGNvbW1pdDogWyRIQVNIM10gQWRkIDwzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBsb2c6IG9ubHkgc2tpcCBjb21taXRzIGxlZnQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBsb2cgPmJpc2VjdC1za2lwLWxvZy50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5iaXNlY3Qtc2tpcC1sb2cgYmlzZWN0LXNraXAtbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBiaXNlY3QgYmFkIEhFQUQiIGJlaGF2ZXMgYXMgImdpdCBiaXNlY3QgYmFkIicgJworCWdpdCBjaGVja291dCBwYXJhbGxlbCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgSEVBRCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGdvb2QgSEVBRCAmJgorCWdpdCBiaXNlY3QgYmFkIEhFQUQgJiYKKwl0ZXN0ICIkSEFTSDYiID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnRzIHdpdGggb25seSBvbmUgbmV3JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IG5ldyAkSEFTSDQgJiYKKwlnaXQgYmlzZWN0IG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGRvZXMgbm90IHN0YXJ0IHdpdGggb25seSBvbmUgb2xkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IG9sZCAkSEFTSDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0IHdpdGggb25lIG5ldyBhbmQgb2xkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IG9sZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IG5ldyAkSEFTSDQgJiYKKwlnaXQgYmlzZWN0IG5ldyAmJgorCWdpdCBiaXNlY3QgbmV3ID5iaXNlY3RfcmVzdWx0ICYmCisJZ3JlcCAiJEhBU0gyIGlzIHRoZSBmaXJzdCBuZXcgY29tbWl0IiBiaXNlY3RfcmVzdWx0ICYmCisJZ2l0IGJpc2VjdCBsb2cgPmxvZ190b19yZXBsYXkudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVwbGF5IHdpdGggb2xkIGFuZCBuZXcnICcKKwlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5LnR4dCA+YmlzZWN0X3Jlc3VsdCAmJgorCWdyZXAgIiRIQVNIMiBpcyB0aGUgZmlyc3QgbmV3IGNvbW1pdCIgYmlzZWN0X3Jlc3VsdCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGNhbm5vdCBtaXggb2xkL25ldyBhbmQgZ29vZC9iYWQnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBvbGQgJEhBU0gxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCB0ZXJtcyBuZWVkcyAwIG9yIDEgYXJndW1lbnQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyBvbmx5LW9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgdGVybXMgMSAyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyAyPmFjdHVhbCAmJgorCWVjaG8gImVycm9yOiBubyB0ZXJtcyBkZWZpbmVkIiA+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+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBiaXNlY3QgYmFkICRCQUQKK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfYmlzZWN0IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNDItbWVyZ2UtcmVuYW1lLWNvcm5lci1jYXNlcy5zaCBiL3QvdDYwNDItbWVyZ2UtcmVuYW1lLWNvcm5lci1jYXNlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDQ3Y2YxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjA0Mi1tZXJnZS1yZW5hbWUtY29ybmVyLWNhc2VzLnNoCkBAIC0wLDAgKzEsMTM4MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249InJlY3Vyc2l2ZSBtZXJnZSBjb3JuZXIgY2FzZXMgdy8gcmVuYW1lcyBidXQgbm90IGNyaXNzLWNyb3NzZXMiCisjIHQ2MDM2IGhhcyBjb3JuZXIgY2FzZXMgdGhhdCBpbnZvbHZlIGJvdGggY3Jpc3MtY3Jvc3MgbWVyZ2VzIGFuZCByZW5hbWVzCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3NldHVwX3JlbmFtZV9kZWxldGVfdW50cmFja2VkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1kZWxldGUtdW50cmFja2VkICYmCisJKAorCQljZCByZW5hbWUtZGVsZXRlLXVudHJhY2tlZCAmJgorCisJCWVjaG8gIkEgcHJldHR5IGluc2NyaXB0aW9uIiA+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+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBSLXRocmVlICYmCisKKwkJIyBDb21wYXJlIHRocmVlIHRvIGV4cGVjdGVkIGNvbnRlbnRzCisJCT5lbXB0eSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSAgICBcCisJCQktTCAiSEVBRCIgIC1MICIiICAtTCAiUl4wIiBcCisJCQlMLXRocmVlICAgIGVtcHR5ICBSLXRocmVlICYmCisJCXRlc3RfY21wIHRocmVlIEwtdGhyZWUKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjA0My1tZXJnZS1yZW5hbWUtZGlyZWN0b3JpZXMuc2ggYi90L3Q2MDQzLW1lcmdlLXJlbmFtZS1kaXJlY3Rvcmllcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Mzc5MmM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjA0My1tZXJnZS1yZW5hbWUtZGlyZWN0b3JpZXMuc2gKQEAgLTAsMCArMSw0NjkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0icmVjdXJzaXZlIG1lcmdlIHdpdGggZGlyZWN0b3J5IHJlbmFtZXMiCisjIGluY2x1ZGVzIGNoZWNraW5nIG9mIG1hbnkgY29ybmVyIGNhc2VzLCB3aXRoIGEgc2ltaWxhciBtZXRob2RvbG9neSB0bzoKKyMgICB0NjA0MjogY29ybmVyIGNhc2VzIHdpdGggcmVuYW1lcyBidXQgbm90IGNyaXNzLWNyb3NzIG1lcmdlcworIyAgIHQ2MDM2OiBjb3JuZXIgY2FzZXMgd2l0aCBib3RoIHJlbmFtZXMgYW5kIGNyaXNzLWNyb3NzIG1lcmdlcworIworIyBUaGUgc2V0dXAgZm9yIGFsbCBvZiB0aGVtLCBwaWN0b3JpYWxseSwgaXM6CisjCisjICAgICAgQQorIyAgICAgIG8KKyMgICAgIC8gXAorIyAgTyBvICAgPworIyAgICAgXCAvCisjICAgICAgbworIyAgICAgIEIKKyMKKyMgVG8gaGVscCBtYWtlIGl0IGVhc2llciB0byBmb2xsb3cgdGhlIGZsb3cgb2YgdGVzdHMsIHRoZXkgaGF2ZSBiZWVuCisjIGRpdmlkZWQgaW50byBzZWN0aW9ucyBhbmQgZWFjaCB0ZXN0IHdpbGwgc3RhcnQgd2l0aCBhIHF1aWNrIGV4cGxhbmF0aW9uCisjIG9mIHdoYXQgY29tbWl0cyBPLCBBLCBhbmQgQiBjb250YWluLgorIworIyBOb3RhdGlvbjoKKyMgICAgei97YixjfSAgIG1lYW5zICBmaWxlcyB6L2IgYW5kIHovYyBib3RoIGV4aXN0CisjICAgIHgvZF8xICAgICBtZWFucyAgZmlsZSB4L2QgZXhpc3RzIHdpdGggY29udGVudCBkMS4gIChQdXJwb3NlIG9mIHRoZQorIyAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmUgbm90YXRpb24gaXMgdG8gZGlmZmVyZW50aWF0ZSBkaWZmZXJlbnQKKyMgICAgICAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IG1pZ2h0IGJlIHJlbmFtZWQgaW50byBlYWNoIG90aGVyJ3MgcGF0aHMuKQorCisuIC4vdGVzdC1saWIuc2gKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiAxOiBCYXNpYyBjYXNlcyB3ZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDFhLCBCYXNpYyBkaXJlY3RvcnkgcmVuYW1lLgorIyAgIENvbW1pdCBPOiB6L3tiLGN9CisjICAgQ29tbWl0IEE6IHkve2IsY30KKyMgICBDb21taXQgQjogei97YixjLGQsZS9mfQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZCxlL2Z9CisKK3Rlc3Rfc2V0dXBfMWEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMWEgJiYKKwkoCisJCWNkIDFhICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gZCA+ei9kICYmCisJCW1rZGlyIHovZSAmJgorCQllY2hvIGYgPnovZS9mICYmCisJCWdpdCBhZGQgei9kIHovZS9mICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWE6IFNpbXBsZSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbicgJworCXRlc3Rfc2V0dXBfMWEgJiYKKwkoCisJCWNkIDFhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp5L2IgSEVBRDp5L2MgSEVBRDp5L2QgSEVBRDp5L2UvZiAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgQjp6L2QgICAgQjp6L2UvZiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IHkvZCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgQjp6L2QgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOnovZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6ei9lL2YgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9kICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZS9mCisJKQorJworCisjIFRlc3RjYXNlIDFiLCBNZXJnZSBhIGRpcmVjdG9yeSB3aXRoIGFub3RoZXIKKyMgICBDb21taXQgTzogei97YixjfSwgICB5L2QKKyMgICBDb21taXQgQTogei97YixjLGV9LCB5L2QKKyMgICBDb21taXQgQjogeS97YixjLGR9CisjICAgRXhwZWN0ZWQ6IHkve2IsYyxkLGV9CisKK3Rlc3Rfc2V0dXBfMWIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMWIgJiYKKwkoCisJCWNkIDFiICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB5ICYmCisJCWVjaG8gZCA+eS9kICYmCisJCWdpdCBhZGQgeiB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZWNobyBlID56L2UgJiYKKwkJZ2l0IGFkZCB6L2UgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHovYiB5ICYmCisJCWdpdCBtdiB6L2MgeSAmJgorCQlybWRpciB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWI6IE1lcmdlIGEgZGlyZWN0b3J5IHdpdGggYW5vdGhlcicgJworCXRlc3Rfc2V0dXBfMWIgJiYKKwkoCisJCWNkIDFiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eS9kIEhFQUQ6eS9lICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBPOnkvZCAgICBBOnovZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDp6L2UKKwkpCisnCisKKyMgVGVzdGNhc2UgMWMsIFRyYW5zaXRpdmUgcmVuYW1pbmcKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgM2EgYW5kIDZkIC0tIHdoZW4gc2hvdWxkIGEgdHJhbnNpdGl2ZSByZW5hbWUgYXBwbHk/KQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyA5YyBhbmQgOWQgLS0gY2FuIHRyYW5zaXRpdml0eSByZXBlYXQ/KQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDEyYiAtLSBqb2ludC10cmFuc2l0aXZpdHk/KQorIyAgIENvbW1pdCBPOiB6L3tiLGN9LCAgIHgvZAorIyAgIENvbW1pdCBBOiB5L3tiLGN9LCAgIHgvZAorIyAgIENvbW1pdCBCOiB6L3tiLGMsZH0KKyMgICBFeHBlY3RlZDogeS97YixjLGR9ICAoYmVjYXVzZSB4L2QgLT4gei9kIC0+IHkvZCkKKwordGVzdF9zZXR1cF8xYyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxYyAmJgorCSgKKwkJY2QgMWMgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCW1rZGlyIHggJiYKKwkJZWNobyBkID54L2QgJiYKKwkJZ2l0IGFkZCB6IHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Qgei9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWM6IFRyYW5zaXRpdmUgcmVuYW1pbmcnICcKKwl0ZXN0X3NldHVwXzFjICYmCisJKAorCQljZCAxYyAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eS9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBPOngvZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDp4L2QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOnovZCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2QKKwkpCisnCisKKyMgVGVzdGNhc2UgMWQsIERpcmVjdG9yeSByZW5hbWVzIChtZXJnaW5nIHR3byBkaXJlY3RvcmllcyBpbnRvIG9uZSBuZXcgb25lKQorIyAgICAgICAgICAgICAgY2F1c2UgYSByZW5hbWUvcmVuYW1lKDJ0bzEpIGNvbmZsaWN0CisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2VzIDFjIGFuZCA3YikKKyMgICBDb21taXQgTy4gei97YixjfSwgICAgICAgIHkve2QsZX0KKyMgICBDb21taXQgQS4geC97YixjfSwgICAgICAgIHkve2QsZSxtLHdoYW1fMX0KKyMgICBDb21taXQgQi4gei97YixjLG4sd2hhbV8yfSwgeC97ZCxlfQorIyAgIEV4cGVjdGVkOiB4L3tiLGMsZCxlLG0sbn0sIENPTkZMSUNUOih5L3doYW1fMSAmIHovd2hhbV8yIC0+IHgvd2hhbSkKKyMgICBOb3RlOiB5L20gJiB6L24gc2hvdWxkIGRlZmluaXRlbHkgbW92ZSBpbnRvIHguICBCeSB0aGUgc2FtZSB0b2tlbiwgYm90aAorIyAgICAgICAgIHkvd2hhbV8xICYgei93aGFtXzIgc2hvdWxkIHRvby4uLmdpdmluZyB1cyBhIGNvbmZsaWN0LgorCit0ZXN0X3NldHVwXzFkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDFkICYmCisJKAorCQljZCAxZCAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJbWtkaXIgeSAmJgorCQllY2hvIGQgPnkvZCAmJgorCQllY2hvIGUgPnkvZSAmJgorCQlnaXQgYWRkIHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHggJiYKKwkJZWNobyBtID55L20gJiYKKwkJZWNobyB3aGFtMSA+eS93aGFtICYmCisJCWdpdCBhZGQgeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeSB4ICYmCisJCWVjaG8gbiA+ei9uICYmCisJCWVjaG8gd2hhbTIgPnovd2hhbSAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxZDogRGlyZWN0b3J5IHJlbmFtZXMgY2F1c2UgYSByZW5hbWUvcmVuYW1lKDJ0bzEpIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF8xZCAmJgorCSgKKwkJY2QgMWQgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA4IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp4L2IgOjA6eC9jIDowOngvZCA6MDp4L2UgOjA6eC9tIDowOngvbiAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgTzp5L2QgIE86eS9lICBBOnkvbSAgQjp6L24gJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjA6eC93aGFtICYmCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6Mjp4L3doYW0gOjM6eC93aGFtICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgQTp5L3doYW0gIEI6ei93aGFtICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFRlc3QgdGhhdCB0aGUgdHdvLXdheSBtZXJnZSBpbiB4L3doYW0gaXMgYXMgZXhwZWN0ZWQKKwkJZ2l0IGNhdC1maWxlIC1wIDoyOngvd2hhbSA+ZXhwZWN0ICYmCisJCWdpdCBjYXQtZmlsZSAtcCA6Mzp4L3doYW0gPm90aGVyICYmCisJCT5lbXB0eSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCQktTCAiSEVBRCIgXAorCQkJLUwgIiIgXAorCQkJLUwgIkJeMCIgXAorCQkJZXhwZWN0IGVtcHR5IG90aGVyICYmCisJCXRlc3RfY21wIGV4cGVjdCB4L3doYW0KKwkpCisnCisKKyMgVGVzdGNhc2UgMWUsIFJlbmFtZWQgZGlyZWN0b3J5LCB3aXRoIGFsbCBmaWxlbmFtZXMgYmVpbmcgcmVuYW1lZCB0b28KKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgOWYgJiA5ZykKKyMgICBDb21taXQgTzogei97b2xkYixvbGRjfQorIyAgIENvbW1pdCBBOiB5L3tuZXdiLG5ld2N9CisjICAgQ29tbWl0IEI6IHove29sZGIsb2xkYyxkfQorIyAgIEV4cGVjdGVkOiB5L3tuZXdiLG5ld2MsZH0KKwordGVzdF9zZXR1cF8xZSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxZSAmJgorCSgKKwkJY2QgMWUgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9vbGRiICYmCisJCWVjaG8gYyA+ei9vbGRjICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHkgJiYKKwkJZ2l0IG12IHovb2xkYiB5L25ld2IgJiYKKwkJZ2l0IG12IHovb2xkYyB5L25ld2MgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyBkID56L2QgJiYKKwkJZ2l0IGFkZCB6L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxZTogUmVuYW1lZCBkaXJlY3RvcnksIHdpdGggYWxsIGZpbGVzIGJlaW5nIHJlbmFtZWQgdG9vJyAnCisJdGVzdF9zZXR1cF8xZSAmJgorCSgKKwkJY2QgMWUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp5L25ld2IgSEVBRDp5L25ld2MgSEVBRDp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86ei9vbGRiICAgIE86ei9vbGRjICAgIEI6ei9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOnovZAorCSkKKycKKworIyBUZXN0Y2FzZSAxZiwgU3BsaXQgYSBkaXJlY3RvcnkgaW50byB0d28gb3RoZXIgZGlyZWN0b3JpZXMKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgM2EsIGFsbCBvZiBzZWN0aW9uIDIsIGFuZCBhbGwgb2Ygc2VjdGlvbiA0KQorIyAgIENvbW1pdCBPOiB6L3tiLGMsZCxlLGZ9CisjICAgQ29tbWl0IEE6IHove2IsYyxkLGUsZixnfQorIyAgIENvbW1pdCBCOiB5L3tiLGN9LCB4L3tkLGUsZn0KKyMgICBFeHBlY3RlZDogeS97YixjfSwgeC97ZCxlLGYsZ30KKwordGVzdF9zZXR1cF8xZiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxZiAmJgorCSgKKwkJY2QgMWYgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWVjaG8gZCA+ei9kICYmCisJCWVjaG8gZSA+ei9lICYmCisJCWVjaG8gZiA+ei9mICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWVjaG8gZyA+ei9nICYmCisJCWdpdCBhZGQgei9nICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCW1rZGlyIHkgJiYKKwkJbWtkaXIgeCAmJgorCQlnaXQgbXYgei9iIHkvICYmCisJCWdpdCBtdiB6L2MgeS8gJiYKKwkJZ2l0IG12IHovZCB4LyAmJgorCQlnaXQgbXYgei9lIHgvICYmCisJCWdpdCBtdiB6L2YgeC8gJiYKKwkJcm1kaXIgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFmOiBTcGxpdCBhIGRpcmVjdG9yeSBpbnRvIHR3byBvdGhlciBkaXJlY3RvcmllcycgJworCXRlc3Rfc2V0dXBfMWYgJiYKKwkoCisJCWNkIDFmICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eC9kIEhFQUQ6eC9lIEhFQUQ6eC9mIEhFQUQ6eC9nICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBPOnovZCAgICBPOnovZSAgICBPOnovZiAgICBBOnovZyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6ei9nCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVsZXMgc3VnZ2VzdGVkIGJ5IHRlc3RjYXNlcyBpbiBzZWN0aW9uIDE6CisjCisjICAgV2Ugc2hvdWxkIHN0aWxsIGRldGVjdCB0aGUgZGlyZWN0b3J5IHJlbmFtZSBldmVuIGlmIGl0IHdhc24ndCBqdXN0CisjICAgdGhlIGRpcmVjdG9yeSByZW5hbWVkLCBidXQgdGhlIGZpbGVzIHdpdGhpbiBpdC4gKHNlZSAxYikKKyMKKyMgICBJZiByZW5hbWVzIHNwbGl0IGEgZGlyZWN0b3J5IGludG8gdHdvIG9yIG1vcmUgb3RoZXJzLCB0aGUgZGlyZWN0b3J5CisjICAgd2l0aCB0aGUgbW9zdCByZW5hbWVzLCAid2lucyIgKHNlZSAxYykuICBIb3dldmVyLCBzZWUgdGhlIHRlc3RjYXNlcworIyAgIGluIHNlY3Rpb24gMiwgcGx1cyB0ZXN0Y2FzZXMgM2EgYW5kIDRhLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gMjogU3BsaXQgaW50byBtdWx0aXBsZSBkaXJlY3Rvcmllcywgd2l0aCBlcXVhbCBudW1iZXIgb2YgcGF0aHMKKyMKKyMgRXhwbG9yZSB0aGUgc3BsaXR0aW5nLWEtZGlyZWN0b3J5IHJ1bGVzIGEgYml0OyB3aGF0IGhhcHBlbnMgaW4gdGhlCisjIGVkZ2UgY2FzZXM/CisjCisjIE5vdGUgdGhhdCB0aGVyZSBpcyBhIGNsb3NlbHkgcmVsYXRlZCBjYXNlIG9mIGEgZGlyZWN0b3J5IG5vdCBiZWluZworIyBzcGxpdCBvbiBlaXRoZXIgc2lkZSBvZiBoaXN0b3J5LCBidXQgYmVpbmcgcmVuYW1lZCBkaWZmZXJlbnRseSBvbgorIyBlYWNoIHNpZGUuICBTZWUgdGVzdGNhc2UgOGUgZm9yIHRoYXQuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSAyYSwgRGlyZWN0b3J5IHNwbGl0IGludG8gdHdvIG9uIG9uZSBzaWRlLCB3aXRoIGVxdWFsIG51bWJlcnMgb2YgcGF0aHMKKyMgICBDb21taXQgTzogei97YixjfQorIyAgIENvbW1pdCBBOiB5L2IsIHcvYworIyAgIENvbW1pdCBCOiB6L3tiLGMsZH0KKyMgICBFeHBlY3RlZDogeS9iLCB3L2MsIHovZCwgd2l0aCB3YXJuaW5nIGFib3V0IHovIC0+ICh5LyB2cy4gdy8pIGNvbmZsaWN0Cit0ZXN0X3NldHVwXzJhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDJhICYmCisJKAorCQljZCAyYSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJbWtkaXIgeSAmJgorCQlta2RpciB3ICYmCisJCWdpdCBtdiB6L2IgeS8gJiYKKwkJZ2l0IG12IHovYyB3LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGQgPnovZCAmJgorCQlnaXQgYWRkIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhOiBEaXJlY3Rvcnkgc3BsaXQgaW50byB0d28gb24gb25lIHNpZGUsIHdpdGggZXF1YWwgbnVtYmVycyBvZiBwYXRocycgJworCXRlc3Rfc2V0dXBfMmEgJiYKKwkoCisJCWNkIDJhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNULipkaXJlY3RvcnkgcmVuYW1lIHNwbGl0IiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2IgOjA6dy9jIDowOnovZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgQjp6L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSAyYiwgRGlyZWN0b3J5IHNwbGl0IGludG8gdHdvIG9uIG9uZSBzaWRlLCB3aXRoIGVxdWFsIG51bWJlcnMgb2YgcGF0aHMKKyMgICBDb21taXQgTzogei97YixjfQorIyAgIENvbW1pdCBBOiB5L2IsIHcvYworIyAgIENvbW1pdCBCOiB6L3tiLGN9LCB4L2QKKyMgICBFeHBlY3RlZDogeS9iLCB3L2MsIHgvZDsgTm8gd2FybmluZyBhYm91dCB6LyAtPiAoeS8gdnMuIHcvKSBjb25mbGljdAordGVzdF9zZXR1cF8yYiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAyYiAmJgorCSgKKwkJY2QgMmIgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHkgJiYKKwkJbWtkaXIgdyAmJgorCQlnaXQgbXYgei9iIHkvICYmCisJCWdpdCBtdiB6L2Mgdy8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJbWtkaXIgeCAmJgorCQllY2hvIGQgPngvZCAmJgorCQlnaXQgYWRkIHgvZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiOiBEaXJlY3Rvcnkgc3BsaXQgaW50byB0d28gb24gb25lIHNpZGUsIHdpdGggZXF1YWwgbnVtYmVycyBvZiBwYXRocycgJworCXRlc3Rfc2V0dXBfMmIgJiYKKwkoCisJCWNkIDJiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOncvYyA6MDp4L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIEI6eC9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9pMThuZ3JlcCAhICJDT05GTElDVC4qZGlyZWN0b3J5IHJlbmFtZSBzcGxpdCIgb3V0CisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVsZXMgc3VnZ2VzdGVkIGJ5IHNlY3Rpb24gMjoKKyMKKyMgICBOb25lOyB0aGUgcnVsZSB3YXMgYWxyZWFkeSBjb3ZlcmVkIGluIHNlY3Rpb24gMS4gIFRoZXNlIHRlc3RjYXNlcyBhcmUKKyMgICBoZXJlIGp1c3QgdG8gbWFrZSBzdXJlIHRoZSBjb25mbGljdCByZXNvbHV0aW9uIGFuZCBuZWNlc3Nhcnkgd2FybmluZworIyAgIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDM6IFBhdGggaW4gcXVlc3Rpb24gaXMgdGhlIHNvdXJjZSBwYXRoIGZvciBzb21lIHJlbmFtZSBhbHJlYWR5CisjCisjIENvbWJpbmluZyBjYXNlcyBmcm9tIFNlY3Rpb24gMSBhbmQgdHJ5aW5nIHRvIGhhbmRsZSB0aGVtIGNvdWxkIGxlYWQgdG8KKyMgZGlyZWN0b3J5IHJlbmFtaW5nIGRldGVjdGlvbiBiZWluZyBvdmVyLWFwcGxpZWQuICBTbywgdGhpcyBzZWN0aW9uCisjIHByb3ZpZGVzIHNvbWUgZ29vZCB0ZXN0Y2FzZXMgdG8gY2hlY2sgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gZG9lc24ndCBnbworIyB0b28gZmFyLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgM2EsIEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gb3RoZXIgc2lkZQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyAxYywgMWYsIGFuZCA5aCkKKyMgICBDb21taXQgTzogei97YixjLGR9CisjICAgQ29tbWl0IEE6IHove2IsYyxkfSAobm8gY2hhbmdlKQorIyAgIENvbW1pdCBCOiB5L3tiLGN9LCB4L2QKKyMgICBFeHBlY3RlZDogeS97YixjfSwgeC9kCit0ZXN0X3NldHVwXzNhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDNhICYmCisJKAorCQljZCAzYSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZWNobyBkID56L2QgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciB5ICYmCisJCW1rZGlyIHggJiYKKwkJZ2l0IG12IHovYiB5LyAmJgorCQlnaXQgbXYgei9jIHkvICYmCisJCWdpdCBtdiB6L2QgeC8gJiYKKwkJcm1kaXIgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhOiBBdm9pZCBpbXBsaWNpdCByZW5hbWUgaWYgaW52b2x2ZWQgYXMgc291cmNlIG9uIG90aGVyIHNpZGUnICcKKwl0ZXN0X3NldHVwXzNhICYmCisJKAorCQljZCAzYSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOngvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgTzp6L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSAzYiwgQXZvaWQgaW1wbGljaXQgcmVuYW1lIGlmIGludm9sdmVkIGFzIHNvdXJjZSBvbiBvdGhlciBzaWRlCisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2VzIDVjIGFuZCA3YywgYWxzbyBraW5kIG9mIDFlIGFuZCAxZikKKyMgICBDb21taXQgTzogei97YixjLGR9CisjICAgQ29tbWl0IEE6IHkve2IsY30sIHgvZAorIyAgIENvbW1pdCBCOiB6L3tiLGN9LCB3L2QKKyMgICBFeHBlY3RlZDogeS97YixjfSwgQ09ORkxJQ1Q6KHovZCAtPiB4L2QgdnMuIHcvZCkKKyMgICBOT1RFOiBXZSdyZSBwYXJ0aWN1bGFybHkgY2hlY2tpbmcgdGhhdCBzaW5jZSB6L2QgaXMgYWxyZWFkeSBpbnZvbHZlZCBhcworIyAgICAgICAgIGEgc291cmNlIGluIGEgZmlsZSByZW5hbWUgb24gdGhlIHNhbWUgc2lkZSBvZiBoaXN0b3J5LCB0aGF0IHdlIGRvbid0CisjICAgICAgICAgZ2V0IGl0IGludm9sdmVkIGluIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uLiAgSWYgaXQgd2VyZSwgd2UgbWlnaHQKKyMgICAgICAgICBlbmQgdXAgd2l0aCBDT05GTElDVDooei9kIC0+IHkvZCB2cy4geC9kIHZzLiB3L2QpLCBpLmUuIGEKKyMgICAgICAgICByZW5hbWUvcmVuYW1lL3JlbmFtZSgxdG8zKSBjb25mbGljdCwgd2hpY2ggaXMganVzdCB3ZWlyZC4KK3Rlc3Rfc2V0dXBfM2IgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gM2IgJiYKKwkoCisJCWNkIDNiICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQllY2hvIGQgPnovZCAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlta2RpciB5ICYmCisJCW1rZGlyIHggJiYKKwkJZ2l0IG12IHovYiB5LyAmJgorCQlnaXQgbXYgei9jIHkvICYmCisJCWdpdCBtdiB6L2QgeC8gJiYKKwkJcm1kaXIgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciB3ICYmCisJCWdpdCBtdiB6L2Qgdy8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczYjogQXZvaWQgaW1wbGljaXQgcmVuYW1lIGlmIGludm9sdmVkIGFzIHNvdXJjZSBvbiBjdXJyZW50IHNpZGUnICcKKwl0ZXN0X3NldHVwXzNiICYmCisJKAorCQljZCAzYiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwIENPTkZMSUNULipyZW5hbWUvcmVuYW1lLip6L2QuKngvZC4qdy9kIG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICEgQ09ORkxJQ1QuKnJlbmFtZS9yZW5hbWUuKnkvZCBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2IgOjA6eS9jIDoxOnovZCA6Mjp4L2QgOjM6dy9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2IgIE86ei9jICBPOnovZCAgTzp6L2QgIE86ei9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2QgJiYKKwkJZ2l0IGhhc2gtb2JqZWN0ID5hY3R1YWwgXAorCQkJeC9kICAgdy9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovZCBPOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVsZXMgc3VnZ2VzdGVkIGJ5IHNlY3Rpb24gMzoKKyMKKyMgICBBdm9pZCBkaXJlY3RvcnktcmVuYW1lLWRldGVjdGlvbiBmb3IgYSBwYXRoLCBpZiB0aGF0IHBhdGggaXMgdGhlIHNvdXJjZQorIyAgIG9mIGEgcmVuYW1lIG9uIGVpdGhlciBzaWRlIG9mIGEgbWVyZ2UuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiA0OiBQYXJ0aWFsbHkgcmVuYW1lZCBkaXJlY3Rvcnk7IHN0aWxsIGV4aXN0cyBvbiBib3RoIHNpZGVzIG9mIG1lcmdlCisjCisjIFdoYXQgaWYgd2Ugd2VyZSB0byBhdHRlbXB0IHRvIGRvIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIHdoZW4gc29tZW9uZQorIyAibW9zdGx5IiBtb3ZlZCBhIGRpcmVjdG9yeSBidXQgc3RpbGwgbGVmdCBzb21lIGZpbGVzIGFyb3VuZCwgb3IsCisjIGVxdWl2YWxlbnRseSwgZnVsbHkgcmVuYW1lZCBhIGRpcmVjdG9yeSBpbiBvbmUgY29tbWl0IGFuZCB0aGVuIHJlY3JlYXRlZAorIyB0aGF0IGRpcmVjdG9yeSBpbiBhIGxhdGVyIGNvbW1pdCBhZGRpbmcgc29tZSBuZXcgZmlsZXMgYW5kIHRoZW4gdHJpZWQgdG8KKyMgbWVyZ2U/CisjCisjIEl0J3MgaGFyZCB0byBkaXZpbmUgdXNlciBpbnRlbnQgaW4gdGhlc2UgY2FzZXMsIGJlY2F1c2UgeW91IGNhbiBtYWtlIGFuCisjIGFyZ3VtZW50IHRoYXQsIGRlcGVuZGluZyBvbiB0aGUgaW50ZXJtZWRpYXRlIGhpc3Rvcnkgb2YgdGhlIHNpZGUgYmVpbmcKKyMgbWVyZ2VkLCB0aGF0IHNvbWUgdXNlcnMgd2lsbCB3YW50IGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IHRvCisjIGF1dG9tYXRpY2FsbHkgYmUgZGV0ZWN0ZWQgYW5kIHJlbmFtZWQsIHdoaWxlIHVzZXJzIHdpdGggYSBkaWZmZXJlbnQKKyMgaW50ZXJtZWRpYXRlIGhpc3Rvcnkgd291bGRuJ3Qgd2FudCB0aGF0IHJlbmFtZSB0byBoYXBwZW4uCisjCisjIEkgdGhpbmsgdGhhdCBpdCBpcyBiZXN0IHRvIHNpbXBseSBub3QgaGF2ZSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbgorIyBhcHBseSB0byBzdWNoIGNhc2VzLiAgTXkgcmVhc29uaW5nIGZvciB0aGlzIGlzIGZvdXItZm9sZDogKDEpIGl0J3MKKyMgZWFzaWVzdCBmb3IgdXNlcnMgaW4gZ2VuZXJhbCB0byBmaWd1cmUgb3V0IHdoYXQgaGFwcGVuZWQgaWYgd2UgZG9uJ3QKKyMgYXBwbHkgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaW4gYW55IHN1Y2ggY2FzZSwgKDIpIGl0J3MgYW4gZWFzeSBydWxlCisjIHRvIGV4cGxhaW4gWyJXZSBkb24ndCBkbyBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBpZiB0aGUgZGlyZWN0b3J5CisjIHN0aWxsIGV4aXN0cyBvbiBib3RoIHNpZGVzIG9mIHRoZSBtZXJnZSJdLCAoMykgd2UgY2FuIGdldCBzb21lIGhhaXJ5CisjIGVkZ2UvY29ybmVyIGNhc2VzIHRoYXQgd291bGQgYmUgcmVhbGx5IGNvbmZ1c2luZyBhbmQgcG9zc2libHkgbm90IGV2ZW4KKyMgcmVwcmVzZW50YWJsZSBpbiB0aGUgaW5kZXggaWYgd2Ugd2VyZSB0byBldmVuIHRyeSwgYW5kIFtyZWxhdGVkIHRvIDNdICg0KQorIyBhdHRlbXB0aW5nIHRvIHJlc29sdmUgdGhpcyBpc3N1ZSBvZiBkaXZpbmluZyB1c2VyIGludGVudCBieSBleGFtaW5pbmcKKyMgaW50ZXJtZWRpYXRlIGhpc3RvcnkgZ29lcyBhZ2FpbnN0IHRoZSBzcGlyaXQgb2YgdGhyZWUtd2F5IG1lcmdlcyBhbmQgaXMgYQorIyBwYXRoIHRvd2FyZHMgY3JhenkgY29ybmVyIGNhc2VzIHRoYXQgYXJlIGZhciBtb3JlIGNvbXBsZXggdGhhbiB3aGF0IHdlJ3JlCisjIGFscmVhZHkgZGVhbGluZyB3aXRoLgorIworIyBOb3RlIHRoYXQgdGhlIHdvcmRpbmcgb2YgdGhlIHJ1bGUgKCJXZSBkb24ndCBkbyBkaXJlY3RvcnkgcmVuYW1lCisjIGRldGVjdGlvbiBpZiB0aGUgZGlyZWN0b3J5IHN0aWxsIGV4aXN0cyBvbiBib3RoIHNpZGVzIG9mIHRoZSBtZXJnZS4iKQorIyBhbHNvIGV4Y2x1ZGVzICJyZW5hbWluZyIgb2YgYSBkaXJlY3RvcnkgaW50byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYKKyMgKGUuZy4gL3NvbWUvZGlyLyogLT4gL3NvbWUvZGlyL3N1YmRpci8qKS4gIEl0IG1heSBiZSBwb3NzaWJsZSB0byBjYXJ2ZQorIyBvdXQgYW4gZXhjZXB0aW9uIGZvciAicmVuYW1pbmciLWJlbmVhdGgtaXRzZWxmIGNhc2VzIHdpdGhvdXQgb3BlbmluZworIyB3ZWlyZCBlZGdlL2Nvcm5lciBjYXNlcyBmb3Igb3RoZXIgcGFydGlhbCBkaXJlY3RvcnkgcmVuYW1lcywgYnV0IGZvciBub3cKKyMgd2UgYXJlIGtlZXBpbmcgdGhlIHJ1bGUgc2ltcGxlLgorIworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgYSB0ZXN0IGZvciBhIHBhcnRpYWxseS1yZW5hbWVkLWRpcmVjdG9yeSBjYXNlLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgNGEsIERpcmVjdG9yeSBzcGxpdCwgd2l0aCBvcmlnaW5hbCBkaXJlY3Rvcnkgc3RpbGwgcHJlc2VudAorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDFmKQorIyAgIENvbW1pdCBPOiB6L3tiLGMsZCxlfQorIyAgIENvbW1pdCBBOiB5L3tiLGMsZH0sIHovZQorIyAgIENvbW1pdCBCOiB6L3tiLGMsZCxlLGZ9CisjICAgRXhwZWN0ZWQ6IHkve2IsYyxkfSwgei97ZSxmfQorIyAgIE5PVEU6IEV2ZW4gdGhvdWdoIG1vc3QgZmlsZXMgZnJvbSB6IG1vdmVkIHRvIHksIHdlIGRvbid0IHdhbnQgZiB0byBmb2xsb3cuCisKK3Rlc3Rfc2V0dXBfNGEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNGEgJiYKKwkoCisJCWNkIDRhICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQllY2hvIGQgPnovZCAmJgorCQllY2hvIGUgPnovZSAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlta2RpciB5ICYmCisJCWdpdCBtdiB6L2IgeS8gJiYKKwkJZ2l0IG12IHovYyB5LyAmJgorCQlnaXQgbXYgei9kIHkvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gZiA+ei9mICYmCisJCWdpdCBhZGQgei9mICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNGE6IERpcmVjdG9yeSBzcGxpdCwgd2l0aCBvcmlnaW5hbCBkaXJlY3Rvcnkgc3RpbGwgcHJlc2VudCcgJworCXRlc3Rfc2V0dXBfNGEgJiYKKwkoCisJCWNkIDRhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eS9kIEhFQUQ6ei9lIEhFQUQ6ei9mICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBPOnovZCAgICBPOnovZSAgICBCOnovZiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVsZXMgc3VnZ2VzdGVkIGJ5IHNlY3Rpb24gNDoKKyMKKyMgICBEaXJlY3RvcnktcmVuYW1lLWRldGVjdGlvbiBzaG91bGQgYmUgdHVybmVkIG9mZiBmb3IgYW55IGRpcmVjdG9yaWVzIChhcworIyAgIGEgc291cmNlIGZvciByZW5hbWVzKSB0aGF0IGV4aXN0IG9uIGJvdGggc2lkZXMgb2YgdGhlIG1lcmdlLiAgKFRoZSAiYXMKKyMgICBhIHNvdXJjZSBmb3IgcmVuYW1lcyIgY2xhcmlmaWNhdGlvbiBpcyBkdWUgdG8gY2FzZXMgbGlrZSAxYyB3aGVyZQorIyAgIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGV4aXN0cyBvbiBib3RoIHNpZGVzIGFuZCB3ZSBkbyB3YW50IHRoZSByZW5hbWUKKyMgICBkZXRlY3Rpb24uKSAgQnV0LCBzYWRseSwgc2VlIHRlc3RjYXNlIDhiLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gNTogRmlsZXMvZGlyZWN0b3JpZXMgaW4gdGhlIHdheSBvZiBzdWJzZXQgb2YgdG8tYmUtcmVuYW1lZCBwYXRocworIworIyBJbXBsaWNpdGx5IHJlbmFtaW5nIGZpbGVzIGR1ZSB0byBhIGRldGVjdGVkIGRpcmVjdG9yeSByZW5hbWUgY291bGQgcnVuCisjIGludG8gcHJvYmxlbXMgaWYgdGhlcmUgYXJlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGluIHRoZSB3YXkgb2YgdGhlIHBhdGhzCisjIHdlIHdhbnQgdG8gcmVuYW1lLiAgRXhwbG9yZSBzdWNoIGNhc2VzIGluIHRoaXMgc2VjdGlvbi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDVhLCBNZXJnZSBkaXJlY3Rvcmllcywgb3RoZXIgc2lkZSBhZGRzIGZpbGVzIHRvIG9yaWdpbmFsIGFuZCB0YXJnZXQKKyMgICBDb21taXQgTzogei97YixjfSwgICAgICAgeS9kCisjICAgQ29tbWl0IEE6IHove2IsYyxlXzEsZn0sIHkve2QsZV8yfQorIyAgIENvbW1pdCBCOiB5L3tiLGMsZH0KKyMgICBFeHBlY3RlZDogei9lXzEsIHkve2IsYyxkLGVfMixmfSArIENPTkZMSUNUIHdhcm5pbmcKKyMgICBOT1RFOiBXaGlsZSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBpcyBhY3RpdmUgaGVyZSBjYXVzaW5nIHovZiB0bworIyAgICAgICAgIGJlY29tZSB5L2YsIHdlIGRpZCBub3QgYXBwbHkgdGhpcyBmb3Igei9lXzEgYmVjYXVzZSB0aGF0IHdvdWxkCisjICAgICAgICAgZ2l2ZSB1cyBhbiBhZGQvYWRkIGNvbmZsaWN0IGZvciB5L2VfMSB2cyB5L2VfMi4gIFRoaXMgcHJvYmxlbSB3aXRoCisjICAgICAgICAgdGhpcyBhZGQvYWRkLCBpcyB0aGF0IGJvdGggdmVyc2lvbnMgb2YgeS9lIGFyZSBmcm9tIHRoZSBzYW1lIHNpZGUKKyMgICAgICAgICBvZiBoaXN0b3J5LCBnaXZpbmcgdXMgbm8gd2F5IHRvIHJlcHJlc2VudCB0aGlzIGNvbmZsaWN0IGluIHRoZQorIyAgICAgICAgIGluZGV4LgorCit0ZXN0X3NldHVwXzVhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDVhICYmCisJKAorCQljZCA1YSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJbWtkaXIgeSAmJgorCQllY2hvIGQgPnkvZCAmJgorCQlnaXQgYWRkIHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWVjaG8gZTEgPnovZSAmJgorCQllY2hvIGYgPnovZiAmJgorCQllY2hvIGUyID55L2UgJiYKKwkJZ2l0IGFkZCB6L2Ugei9mIHkvZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgei9iIHkvICYmCisJCWdpdCBtdiB6L2MgeS8gJiYKKwkJcm1kaXIgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzVhOiBNZXJnZSBkaXJlY3Rvcmllcywgb3RoZXIgc2lkZSBhZGRzIGZpbGVzIHRvIG9yaWdpbmFsIGFuZCB0YXJnZXQnICcKKwl0ZXN0X3NldHVwXzVhICYmCisJKAorCQljZCA1YSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVC4qaW1wbGljaXQgZGlyIHJlbmFtZSIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOnkvYyA6MDp5L2QgOjA6eS9lIDowOnovZSA6MDp5L2YgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2MgIE86eS9kICBBOnkvZSAgQTp6L2UgIEE6ei9mICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgNWIsIFJlbmFtZS9kZWxldGUgaW4gb3JkZXIgdG8gZ2V0IGFkZC9hZGQvYWRkIGNvbmZsaWN0CisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgOGQ7IHRoZXNlIG1heSBhcHBlYXIgc2xpZ2h0bHkgaW5jb25zaXN0ZW50IHRvIHVzZXJzOworIyAgICBBbHNvIHJlbGF0ZWQgdG8gdGVzdGNhc2VzIDdkIGFuZCA3ZSkKKyMgICBDb21taXQgTzogei97YixjLGRfMX0KKyMgICBDb21taXQgQTogeS97YixjLGRfMn0KKyMgICBDb21taXQgQjogei97YixjLGRfMSxlfSwgeS9kXzMKKyMgICBFeHBlY3RlZDogeS97YixjLGV9LCBDT05GTElDVChhZGQvYWRkOiB5L2RfMiB2cy4geS9kXzMpCisjICAgTk9URTogSWYgei9kXzEgaW4gY29tbWl0IEIgd2VyZSB0byBiZSBpbnZvbHZlZCBpbiBkaXIgcmVuYW1lIGRldGVjdGlvbiwgYXMKKyMgICAgICAgICB3ZSBub3JtYWxseSB3b3VsZCBzaW5jZSB6LyBpcyBiZWluZyByZW5hbWVkIHRvIHkvLCB0aGVuIHRoaXMgd291bGQgYmUKKyMgICAgICAgICBhIHJlbmFtZS9kZWxldGUgKHovZF8xIC0+IHkvZF8xIHZzLiBkZWxldGVkKSBBTkQgYW4gYWRkL2FkZC9hZGQKKyMgICAgICAgICBjb25mbGljdCBvZiB5L2RfMSB2cy4geS9kXzIgdnMuIHkvZF8zLiAgQWRkL2FkZC9hZGQgaXMgbm90CisjICAgICAgICAgcmVwcmVzZW50YWJsZSBpbiB0aGUgaW5kZXgsIHNvIHRoZSBleGlzdGVuY2Ugb2YgeS9kXzMgbmVlZHMgdG8KKyMgICAgICAgICBjYXVzZSB1cyB0byBiYWlsIG9uIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGZvciB0aGF0IHBhdGgsIGZhbGxpbmcKKyMgICAgICAgICBiYWNrIHRvIGdpdCBiZWhhdmlvciB3aXRob3V0IHRoZSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbi4KKwordGVzdF9zZXR1cF81YiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA1YiAmJgorCSgKKwkJY2QgNWIgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWVjaG8gZDEgPnovZCAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgcm0gei9kICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZWNobyBkMiA+eS9kICYmCisJCWdpdCBhZGQgeS9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCW1rZGlyIHkgJiYKKwkJZWNobyBkMyA+eS9kICYmCisJCWVjaG8gZSA+ei9lICYmCisJCWdpdCBhZGQgeS9kIHovZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzViOiBSZW5hbWUvZGVsZXRlIGluIG9yZGVyIHRvIGdldCBhZGQvYWRkL2FkZCBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfNWIgJiYKKwkoCisJCWNkIDViICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChhZGQvYWRkKS4qIHkvZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOnkvYyA6MDp5L2UgOjI6eS9kIDozOnkvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgQjp6L2UgIEE6eS9kICBCOnkvZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MTp5L2QgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeS9kCisJKQorJworCisjIFRlc3RjYXNlIDVjLCBUcmFuc2l0aXZlIHJlbmFtZSB3b3VsZCBjYXVzZSByZW5hbWUvcmVuYW1lL3JlbmFtZS9hZGQvYWRkL2FkZAorIyAgIChEaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiB3b3VsZCByZXN1bHQgaW4gdHJhbnNpdGl2ZSByZW5hbWUgdnMuCisjICAgIHJlbmFtZS9yZW5hbWUoMXRvMikgYW5kIHR1cm4gaXQgaW50byBhIHJlbmFtZS9yZW5hbWUoMXRvMykuICBGdXJ0aGVyLAorIyAgICByZW5hbWUgcGF0aHMgY29uZmxpY3Qgd2l0aCBzZXBhcmF0ZSBhZGRzIG9uIHRoZSBvdGhlciBzaWRlKQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyAzYiBhbmQgN2MpCisjICAgQ29tbWl0IE86IHove2IsY30sIHgvZF8xCisjICAgQ29tbWl0IEE6IHkve2IsYyxkXzJ9LCB3L2RfMQorIyAgIENvbW1pdCBCOiB6L3tiLGMsZF8xLGV9LCB3L2RfMywgeS9kXzQKKyMgICBFeHBlY3RlZDogQSBtZXNzLCBidXQgb25seSBhIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkL2FkZCBtZXNzLiAgVXNlIHRoZQorIyAgICAgICAgICAgICBwcmVzZW5jZSBvZiB5L2RfNCBpbiBCIHRvIGF2b2lkIGRvaW5nIHRyYW5zaXRpdmUgcmVuYW1lIG9mCisjICAgICAgICAgICAgIHgvZF8xIC0+IHovZF8xIC0+IHkvZF8xLCBzbyB0aGF0IHRoZSBvbmx5IHBhdGhzIHdlIGhhdmUgYXQKKyMgICAgICAgICAgICAgeS9kIGFyZSB5L2RfMiBhbmQgeS9kXzQuICBXZSBzdGlsbCBkbyB0aGUgbW92ZSBmcm9tIHovZSB0byB5L2UsCisjICAgICAgICAgICAgIHRob3VnaCwgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW55dGhpbmcgaW4gdGhlIHdheS4KKwordGVzdF9zZXR1cF81YyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA1YyAmJgorCSgKKwkJY2QgNWMgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCW1rZGlyIHggJiYKKwkJZWNobyBkMSA+eC9kICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQllY2hvIGQyID55L2QgJiYKKwkJZ2l0IGFkZCB5L2QgJiYKKwkJZ2l0IG12IHggdyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeC9kIHovICYmCisJCW1rZGlyIHcgJiYKKwkJbWtkaXIgeSAmJgorCQllY2hvIGQzID53L2QgJiYKKwkJZWNobyBkNCA+eS9kICYmCisJCWVjaG8gZSA+ei9lICYmCisJCWdpdCBhZGQgdy8geS8gei9lICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNWM6IFRyYW5zaXRpdmUgcmVuYW1lIHdvdWxkIGNhdXNlIHJlbmFtZS9yZW5hbWUvcmVuYW1lL2FkZC9hZGQvYWRkJyAnCisJdGVzdF9zZXR1cF81YyAmJgorCSgKKwkJY2QgNWMgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpLip4L2QuKncvZC4qei9kIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKGFkZC9hZGQpLiogeS9kIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA5IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2IgOjA6eS9jIDowOnkvZSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgQjp6L2UgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6eS9kICYmCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6Mjp3L2QgOjM6dy9kIDoxOngvZCA6Mjp5L2QgOjM6eS9kIDozOnovZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86eC9kICBCOncvZCAgTzp4L2QgIEE6eS9kICBCOnkvZCAgTzp4L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCA+YWN0dWFsIFwKKwkJCXovZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp4L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB4L2QgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgeS9kICYmCisJCWdyZXAgLXEgIjw8PDwiIHkvZCAgIyBjb25mbGljdCBtYXJrZXJzIHNob3VsZCBiZSBwcmVzZW50CisJKQorJworCisjIFRlc3RjYXNlIDVkLCBEaXJlY3RvcnkvZmlsZS9maWxlIGNvbmZsaWN0IGR1ZSB0byBkaXJlY3RvcnkgcmVuYW1lCisjICAgQ29tbWl0IE86IHove2IsY30KKyMgICBDb21taXQgQTogeS97YixjLGRfMX0KKyMgICBDb21taXQgQjogei97YixjLGRfMixmfSwgeS9kL2UKKyMgICBFeHBlY3RlZDogeS97YixjLGQvZSxmfSwgei9kXzIsIENPTkZMSUNUKGZpbGUvZGlyZWN0b3J5KSwgeS9kXzF+SEVBRAorIyAgIE5vdGU6IFRoZSBmYWN0IHRoYXQgeS9kLyBleGlzdHMgaW4gQiBtYWtlcyB1cyBiYWlsIG9uIGRpcmVjdG9yeSByZW5hbWUKKyMgICAgICAgICBkZXRlY3Rpb24gZm9yIHovZF8yLCBidXQgdGhhdCBkb2Vzbid0IHByZXZlbnQgdXMgZnJvbSBhcHBseWluZyB0aGUKKyMgICAgICAgICBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBmb3Igei9mIC0+IHkvZi4KKwordGVzdF9zZXR1cF81ZCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA1ZCAmJgorCSgKKwkJY2QgNWQgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZWNobyBkMSA+eS9kICYmCisJCWdpdCBhZGQgeS9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCW1rZGlyIC1wIHkvZCAmJgorCQllY2hvIGUgPnkvZC9lICYmCisJCWVjaG8gZDIgPnovZCAmJgorCQllY2hvIGYgPnovZiAmJgorCQlnaXQgYWRkIHkvZC9lIHovZCB6L2YgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc1ZDogRGlyZWN0b3J5L2ZpbGUvZmlsZSBjb25mbGljdCBkdWUgdG8gZGlyZWN0b3J5IHJlbmFtZScgJworCXRlc3Rfc2V0dXBfNWQgJiYKKwkoCisJCWNkIDVkICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChmaWxlL2RpcmVjdG9yeSkuKnkvZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOnkvYyA6MDp6L2QgOjA6eS9mIDoyOnkvZCA6MDp5L2QvZSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgQjp6L2QgIEI6ei9mICBBOnkvZCAgQjp5L2QvZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IHkvZH5IRUFEID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBBOnkvZCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSdWxlcyBzdWdnZXN0ZWQgYnkgc2VjdGlvbiA1OgorIworIyAgIElmIGEgc3Vic2V0IG9mIHRvLWJlLXJlbmFtZWQgZmlsZXMgaGF2ZSBhIGZpbGUgb3IgZGlyZWN0b3J5IGluIHRoZSB3YXksCisjICAgInR1cm4gb2ZmIiB0aGUgZGlyZWN0b3J5IHJlbmFtZSBmb3IgdGhvc2Ugc3BlY2lmaWMgc3ViLXBhdGhzLCBmYWxsaW5nCisjICAgYmFjayB0byBvbGQgaGFuZGxpbmcuICBCdXQsIHNhZGx5LCBzZWUgdGVzdGNhc2VzIDhhIGFuZCA4Yi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDY6IFNhbWUgc2lkZSBvZiB0aGUgbWVyZ2Ugd2FzIHRoZSBvbmUgdGhhdCBkaWQgdGhlIHJlbmFtZQorIworIyBJdCBtYXkgc291bmQgb2J2aW91cyB0aGF0IHlvdSBvbmx5IHdhbnQgdG8gYXBwbHkgaW1wbGljaXQgZGlyZWN0b3J5CisjIHJlbmFtZXMgdG8gZGlyZWN0b3JpZXMgaWYgdGhlIF9vdGhlcl8gc2lkZSBvZiBoaXN0b3J5IGRpZCB0aGUgcmVuYW1pbmcuCisjIElmIHlvdSBkaWQgbWFrZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGRpZG4ndCBleHBsaWNpdGx5IGVuZm9yY2UgdGhpcworIyBydWxlLCB0aGUgbWFqb3JpdHkgb2YgY2FzZXMgdGhhdCB3b3VsZCBmYWxsIHVuZGVyIHRoaXMgc2VjdGlvbiB3b3VsZAorIyBhbHNvIGJlIHNvbHZlZCBieSBmb2xsb3dpbmcgdGhlIHJ1bGVzIGZyb20gdGhlIGFib3ZlIHNlY3Rpb25zLiAgQnV0CisjIHRoZXJlIGFyZSBzdGlsbCBhIGZldyB0aGF0IHN0aWNrIG91dCwgc28gdGhpcyBzZWN0aW9uIGNvdmVycyB0aGVtIGp1c3QKKyMgdG8gbWFrZSBzdXJlIHdlIGFsc28gZ2V0IHRoZW0gcmlnaHQuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSA2YSwgVHJpY2t5IHJlbmFtZS9kZWxldGUKKyMgICBDb21taXQgTzogei97YixjLGR9CisjICAgQ29tbWl0IEE6IHovYgorIyAgIENvbW1pdCBCOiB5L3tiLGN9LCB6L2QKKyMgICBFeHBlY3RlZDogeS9iLCBDT05GTElDVChyZW5hbWUvZGVsZXRlLCB6L2MgLT4geS9jIHZzLiBOVUxMKQorIyAgIE5vdGU6IFdlJ3JlIGp1c3QgY2hlY2tpbmcgaGVyZSB0aGF0IHRoZSByZW5hbWUgb2Ygei9iIGFuZCB6L2MgdG8gcHV0CisjICAgICAgICAgdGhlbSB1bmRlciB5LyBkb2Vzbid0IGFjY2lkZW50YWxseSBjYXRjaCB6L2QgYW5kIG1ha2UgaXQgbG9vayBsaWtlCisjICAgICAgICAgaXQgaXMgYWxzbyBpbnZvbHZlZCBpbiBhIHJlbmFtZS9kZWxldGUgY29uZmxpY3QuCisKK3Rlc3Rfc2V0dXBfNmEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNmEgJiYKKwkoCisJCWNkIDZhICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQllY2hvIGQgPnovZCAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgcm0gei9jICYmCisJCWdpdCBybSB6L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJbWtkaXIgeSAmJgorCQlnaXQgbXYgei9iIHkvICYmCisJCWdpdCBtdiB6L2MgeS8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc2YTogVHJpY2t5IHJlbmFtZS9kZWxldGUnICcKKwl0ZXN0X3NldHVwXzZhICYmCisJKAorCQljZCA2YSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL2RlbGV0ZSkuKnovYy4qeS9jIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2IgOjM6eS9jICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2IgIE86ei9jICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgNmIsIFNhbWUgcmVuYW1lIGRvbmUgb24gYm90aCBzaWRlcworIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyA2YyBhbmQgOGUpCisjICAgQ29tbWl0IE86IHove2IsY30KKyMgICBDb21taXQgQTogeS97YixjfQorIyAgIENvbW1pdCBCOiB5L3tiLGN9LCB6L2QKKyMgICBFeHBlY3RlZDogeS97YixjfSwgei9kCisjICAgTm90ZTogSWYgd2UgZGlkIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGhlcmUsIHdlJ2QgbW92ZSB6L2QgaW50byB5LywKKyMgICAgICAgICBidXQgQiBkaWQgdGhhdCByZW5hbWUgYW5kIHN0aWxsIGRlY2lkZWQgdG8gcHV0IHRoZSBmaWxlIGludG8gei8sCisjICAgICAgICAgc28gd2UgcHJvYmFibHkgc2hvdWxkbid0IGFwcGx5IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGZvciBpdC4KKwordGVzdF9zZXR1cF82YiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA2YiAmJgorCSgKKwkJY2QgNmIgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHogeSAmJgorCQlta2RpciB6ICYmCisJCWVjaG8gZCA+ei9kICYmCisJCWdpdCBhZGQgei9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNmI6IFNhbWUgcmVuYW1lIGRvbmUgb24gYm90aCBzaWRlcycgJworCXRlc3Rfc2V0dXBfNmIgJiYKKwkoCisJCWNkIDZiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6ei9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBCOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDZjLCBSZW5hbWUgb25seSBkb25lIG9uIHNhbWUgc2lkZQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyA2YiBhbmQgOGUpCisjICAgQ29tbWl0IE86IHove2IsY30KKyMgICBDb21taXQgQTogei97YixjfSAobm8gY2hhbmdlKQorIyAgIENvbW1pdCBCOiB5L3tiLGN9LCB6L2QKKyMgICBFeHBlY3RlZDogeS97YixjfSwgei9kCisjICAgTk9URTogU2VlbXMgb2J2aW91cywgYnV0IGp1c3QgY2hlY2tpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gZG9lc24ndAorIyAgICAgICAgICJhY2NpZGVudGFsbHkgZGV0ZWN0IGEgcmVuYW1lIiBhbmQgZ2l2ZSB1cyB5L3tiLGMsZH0uCisKK3Rlc3Rfc2V0dXBfNmMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNmMgJiYKKwkoCisJCWNkIDZjICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJbWtkaXIgeiAmJgorCQllY2hvIGQgPnovZCAmJgorCQlnaXQgYWRkIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZjOiBSZW5hbWUgb25seSBkb25lIG9uIHNhbWUgc2lkZScgJworCXRlc3Rfc2V0dXBfNmMgJiYKKwkoCisJCWNkIDZjICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6ei9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBCOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDZkLCBXZSBkb24ndCBhbHdheXMgd2FudCB0cmFuc2l0aXZlIHJlbmFtaW5nCisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgMWMpCisjICAgQ29tbWl0IE86IHove2IsY30sIHgvZAorIyAgIENvbW1pdCBBOiB6L3tiLGN9LCB4L2QgKG5vIGNoYW5nZSkKKyMgICBDb21taXQgQjogeS97YixjfSwgei9kCisjICAgRXhwZWN0ZWQ6IHkve2IsY30sIHovZAorIyAgIE5PVEU6IEFnYWluLCB0aGlzIHNlZW1zIG9idmlvdXMgYnV0IGp1c3QgY2hlY2tpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24KKyMgICAgICAgICBkb2Vzbid0ICJhY2NpZGVudGFsbHkgZGV0ZWN0IGEgcmVuYW1lIiBhbmQgZ2l2ZSB1cyB5L3tiLGMsZH0uCisKK3Rlc3Rfc2V0dXBfNmQgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNmQgJiYKKwkoCisJCWNkIDZkICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB4ICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeiB5ICYmCisJCWdpdCBtdiB4IHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc2ZDogV2UgZG8gbm90IGFsd2F5cyB3YW50IHRyYW5zaXRpdmUgcmVuYW1pbmcnICcKKwl0ZXN0X3NldHVwXzZkICYmCisJKAorCQljZCA2ZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnovZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgTzp4L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA2ZSwgQWRkL2FkZCBmcm9tIG9uZS1zaWRlCisjICAgQ29tbWl0IE86IHove2IsY30KKyMgICBDb21taXQgQTogei97YixjfSAobm8gY2hhbmdlKQorIyAgIENvbW1pdCBCOiB5L3tiLGMsZF8xfSwgei9kXzIKKyMgICBFeHBlY3RlZDogeS97YixjLGRfMX0sIHovZF8yCisjICAgTk9URTogQWdhaW4sIHRoaXMgc2VlbXMgb2J2aW91cyBidXQganVzdCBjaGVja2luZyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbgorIyAgICAgICAgIGRvZXNuJ3QgImFjY2lkZW50YWxseSBkZXRlY3QgYSByZW5hbWUiIGFuZCBnaXZlIHVzIHkve2IsY30gKworIyAgICAgICAgIGFkZC9hZGQgY29uZmxpY3Qgb24geS9kXzEgdnMgeS9kXzIuCisKK3Rlc3Rfc2V0dXBfNmUgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNmUgJiYKKwkoCisJCWNkIDZlICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZWNobyBkMSA+IHkvZCAmJgorCQlta2RpciB6ICYmCisJCWVjaG8gZDIgPiB6L2QgJiYKKwkJZ2l0IGFkZCB5L2Qgei9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNmU6IEFkZC9hZGQgZnJvbSBvbmUgc2lkZScgJworCXRlc3Rfc2V0dXBfNmUgJiYKKwkoCisJCWNkIDZlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eS9kIEhFQUQ6ei9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBCOnkvZCAgICBCOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVsZXMgc3VnZ2VzdGVkIGJ5IHNlY3Rpb24gNjoKKyMKKyMgICBPbmx5IGFwcGx5IGltcGxpY2l0IGRpcmVjdG9yeSByZW5hbWVzIHRvIGRpcmVjdG9yaWVzIGlmIHRoZSBvdGhlcgorIyAgIHNpZGUgb2YgaGlzdG9yeSBpcyB0aGUgb25lIGRvaW5nIHRoZSByZW5hbWluZy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDc6IE1vcmUgaW52b2x2ZWQgRWRnZS9Db3JuZXIgY2FzZXMKKyMKKyMgVGhlIHJ1bGVzZXQgd2UgaGF2ZSBnZW5lcmF0ZWQgaW4gdGhlIGFib3ZlIHNlY3Rpb25zIHNlZW1zIHRvIHByb3ZpZGUKKyMgd2VsbC1kZWZpbmVkIG1lcmdlcy4gIEJ1dCBjYW4gd2UgZmluZCBlZGdlL2Nvcm5lciBjYXNlcyB0aGF0IGVpdGhlciAoYSkKKyMgYXJlIGhhcmRlciBmb3IgdXNlcnMgdG8gdW5kZXJzdGFuZCwgb3IgKGIpIGhhdmUgYSByZXNvbHV0aW9uIHRoYXQgaXMKKyMgbm9uLWludHVpdGl2ZSBvciBzdWJvcHRpbWFsPworIworIyBUaGUgdGVzdGNhc2VzIGluIHRoaXMgc2VjdGlvbiBkaXZlIGludG8gY2FzZXMgdGhhdCBJJ3ZlIHRyaWVkIHRvIGNyYWZ0IGluCisjIGEgd2F5IHRvIGZpbmQgc29tZSB0aGF0IG1pZ2h0IGJlIHN1cnByaXNpbmcgdG8gdXNlcnMgb3IgZGlmZmljdWx0IGZvcgorIyB0aGVtIHRvIHVuZGVyc3RhbmQgKHRoZSBuZXh0IHNlY3Rpb24gd2lsbCBsb29rIGF0IG5vbi1pbnR1aXRpdmUgb3IKKyMgc3Vib3B0aW1hbCBtZXJnZSByZXN1bHRzKS4gIFNvbWUgb2YgdGhlIHRlc3RjYXNlcyBhcmUgc2ltaWxhciB0byBvbmVzCisjIGZyb20gcGFzdCBzZWN0aW9ucywgYnV0IGhhdmUgYmVlbiBzaW1wbGlmaWVkIHRvIHRyeSB0byBoaWdobGlnaHQgZXJyb3IKKyMgbWVzc2FnZXMgdXNpbmcgYSAibW9kaWZpZWQiIHBhdGggKGR1ZSB0byB0aGUgZGlyZWN0b3J5IHJlbmFtZSkuICBBcmUKKyMgdXNlcnMgb2theSB3aXRoIHRoZXNlPworIworIyBJbiBteSBvcGluaW9uLCB0ZXN0Y2FzZXMgdGhhdCBhcmUgZGlmZmljdWx0IHRvIHVuZGVyc3RhbmQgZnJvbSB0aGlzCisjIHNlY3Rpb24gaXMgZHVlIHRvIGRpZmZpY3VsdHkgaW4gdGhlIHRlc3RjYXNlIHJhdGhlciB0aGFuIHRoZSBkaXJlY3RvcnkKKyMgcmVuYW1pbmcgKHNpbWlsYXIgdG8gaG93IHQ2MDQyIGFuZCB0NjAzNiBoYXZlIGRpZmZpY3VsdCByZXNvbHV0aW9ucyBkdWUKKyMgdG8gdGhlIHByb2JsZW0gc2V0dXAgaXRzZWxmIGJlaW5nIGNvbXBsZXgpLiAgQW5kIEkgZG9uJ3QgdGhpbmsgdGhlCisjIGVycm9yIG1lc3NhZ2VzIGFyZSBhIHByb2JsZW0uCisjCisjIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgdGVzdGNhc2VzIGluIHNlY3Rpb24gOCB3b3JyeSBtZSBzbGlnaHRseSBtb3JlLi4uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSA3YSwgcmVuYW1lLWRpciB2cy4gcmVuYW1lLWRpciAoTk9UIHNwbGl0IGV2ZW5seSkgUExVUyBhZGQtb3RoZXItZmlsZQorIyAgIENvbW1pdCBPOiB6L3tiLGN9CisjICAgQ29tbWl0IEE6IHkve2IsY30KKyMgICBDb21taXQgQjogdy9iLCB4L2MsIHovZAorIyAgIEV4cGVjdGVkOiB5L2QsIENPTkZMSUNUKHJlbmFtZS9yZW5hbWUgZm9yIGJvdGggei9iIGFuZCB6L2MpCisjICAgTk9URTogVGhlcmUncyBhIHJlbmFtZSBvZiB6LyBoZXJlLCB5LyBoYXMgbW9yZSByZW5hbWVzLCBzbyB6L2QgLT4geS9kLgorCit0ZXN0X3NldHVwXzdhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDdhICYmCisJKAorCQljZCA3YSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciB3ICYmCisJCW1rZGlyIHggJiYKKwkJZ2l0IG12IHovYiB3LyAmJgorCQlnaXQgbXYgei9jIHgvICYmCisJCWVjaG8gZCA+IHovZCAmJgorCQlnaXQgYWRkIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdhOiByZW5hbWUtZGlyIHZzLiByZW5hbWUtZGlyIChOT1Qgc3BsaXQgZXZlbmx5KSBQTFVTIGFkZC1vdGhlci1maWxlJyAnCisJdGVzdF9zZXR1cF83YSAmJgorCSgKKwkJY2QgN2EgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpLip6L2IuKnkvYi4qdy9iIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpLip6L2MuKnkvYy4qeC9jIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA3IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MTp6L2IgOjI6eS9iIDozOncvYiA6MTp6L2MgOjI6eS9jIDozOngvYyA6MDp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2IgIE86ei9iICBPOnovYyAgTzp6L2MgIE86ei9jICBCOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0ID5hY3R1YWwgXAorCQkJeS9iICAgdy9iICAgeS9jICAgeC9jICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiBPOnovYiBPOnovYyBPOnovYyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDdiLCByZW5hbWUvcmVuYW1lKDJ0bzEpLCBidXQgb25seSBkdWUgdG8gdHJhbnNpdGl2ZSByZW5hbWUKKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZSAxZCkKKyMgICBDb21taXQgTzogei97YixjfSwgICAgIHgvZF8xLCB3L2RfMgorIyAgIENvbW1pdCBBOiB5L3tiLGMsZF8yfSwgeC9kXzEKKyMgICBDb21taXQgQjogei97YixjLGRfMX0sICAgICAgICB3L2RfMgorIyAgIEV4cGVjdGVkOiB5L3tiLGN9LCBDT05GTElDVChyZW5hbWUvcmVuYW1lKDJ0bzEpOiB4L2RfMSwgdy9kXzIgLT4geV9kKQorCit0ZXN0X3NldHVwXzdiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDdiICYmCisJKAorCQljZCA3YiAmJgorCisJCW1rZGlyIHogJiYKKwkJbWtkaXIgeCAmJgorCQlta2RpciB3ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWVjaG8gZDEgPiB4L2QgJiYKKwkJZWNobyBkMiA+IHcvZCAmJgorCQlnaXQgYWRkIHogeCB3ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQlnaXQgbXYgdy9kIHkvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Qgei8gJiYKKwkJcm1kaXIgeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdiOiByZW5hbWUvcmVuYW1lKDJ0bzEpLCBidXQgb25seSBkdWUgdG8gdHJhbnNpdGl2ZSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzdiICYmCisJKAorCQljZCA3YiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSkiIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYiA6MDp5L2MgOjI6eS9kIDozOnkvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgTzp3L2QgIE86eC9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFRlc3QgdGhhdCB0aGUgdHdvLXdheSBtZXJnZSBpbiB5L2QgaXMgYXMgZXhwZWN0ZWQKKwkJZ2l0IGNhdC1maWxlIC1wIDoyOnkvZCA+ZXhwZWN0ICYmCisJCWdpdCBjYXQtZmlsZSAtcCA6Mzp5L2QgPm90aGVyICYmCisJCT5lbXB0eSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCQktTCAiSEVBRCIgXAorCQkJLUwgIiIgXAorCQkJLUwgIkJeMCIgXAorCQkJZXhwZWN0IGVtcHR5IG90aGVyICYmCisJCXRlc3RfY21wIGV4cGVjdCB5L2QKKwkpCisnCisKKyMgVGVzdGNhc2UgN2MsIHJlbmFtZS9yZW5hbWUoMXRvLi4uMm9yMyk7IHRyYW5zaXRpdmUgcmVuYW1lIG1heSBhZGQgY29tcGxleGl0eQorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyAzYiBhbmQgNWMpCisjICAgQ29tbWl0IE86IHove2IsY30sIHgvZAorIyAgIENvbW1pdCBBOiB5L3tiLGN9LCB3L2QKKyMgICBDb21taXQgQjogei97YixjLGR9CisjICAgRXhwZWN0ZWQ6IHkve2IsY30sIENPTkZMSUNUKHgvZCAtPiB3L2QgdnMuIHkvZCkKKyMgICBOT1RFOiB6LyB3YXMgcmVuYW1lZCB0byB5LyBzbyB3ZSBkbyB3YW50IHRvIHJlcG9ydAorIyAgICAgICAgIG5laXRoZXIgQ09ORkxJQ1QoeC9kIC0+IHcvZCB2cy4gei9kKQorIyAgICAgICAgIG5vciBDT05GTGlDVCB4L2QgLT4gdy9kIHZzLiB5L2QgdnMuIHovZCkKKwordGVzdF9zZXR1cF83YyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA3YyAmJgorCSgKKwkJY2QgN2MgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCW1rZGlyIHggJiYKKwkJZWNobyBkID54L2QgJiYKKwkJZ2l0IGFkZCB6IHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeiB5ICYmCisJCWdpdCBtdiB4IHcgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHgvZCB6LyAmJgorCQlybWRpciB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnN2M6IHJlbmFtZS9yZW5hbWUoMXRvLi4uMm9yMyk7IHRyYW5zaXRpdmUgcmVuYW1lIG1heSBhZGQgY29tcGxleGl0eScgJworCXRlc3Rfc2V0dXBfN2MgJiYKKwkoCisJCWNkIDdjICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKS4qeC9kLip3L2QuKnkvZCIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9iIDowOnkvYyA6MTp4L2QgOjI6dy9kIDozOnkvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgTzp4L2QgIE86eC9kICBPOngvZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDdkLCB0cmFuc2l0aXZlIHJlbmFtZSBpbnZvbHZlZCBpbiByZW5hbWUvZGVsZXRlOyBob3cgaXMgaXQgcmVwb3J0ZWQ/CisjICAgKFJlbGF0ZWQgc29tZXdoYXQgdG8gdGVzdGNhc2VzIDViIGFuZCA4ZCkKKyMgICBDb21taXQgTzogei97YixjfSwgeC9kCisjICAgQ29tbWl0IEE6IHkve2IsY30KKyMgICBDb21taXQgQjogei97YixjLGR9CisjICAgRXhwZWN0ZWQ6IHkve2IsY30sIENPTkZMSUNUKGRlbGV0ZSB4L2QgdnMgcmVuYW1lIHRvIHkvZCkKKyMgICBOT1RFOiB6LT55IHNvIE5PVCBDT05GTElDVChkZWxldGUgeC9kIHZzIHJlbmFtZSB0byB6L2QpCisKK3Rlc3Rfc2V0dXBfN2QgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gN2QgJiYKKwkoCisJCWNkIDdkICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB4ICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQlnaXQgcm0gLXJmIHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHgvZCB6LyAmJgorCQlybWRpciB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnN2Q6IHRyYW5zaXRpdmUgcmVuYW1lIGludm9sdmVkIGluIHJlbmFtZS9kZWxldGU7IGhvdyBpcyBpdCByZXBvcnRlZD8nICcKKwl0ZXN0X3NldHVwXzdkICYmCisJKAorCQljZCA3ZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL2RlbGV0ZSkuKngvZC4qeS9kIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2IgOjA6eS9jIDozOnkvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9iICBPOnovYyAgTzp4L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA3ZSwgdHJhbnNpdGl2ZSByZW5hbWUgaW4gcmVuYW1lL2RlbGV0ZSBBTkQgZGlycyBpbiB0aGUgd2F5CisjICAgKFZlcnkgc2ltaWxhciB0byAnYm90aCByZW5hbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbnZvbHZlZCBpbiBEL0YgY29uZmxpY3QnIGZyb20gdDYwMjItbWVyZ2UtcmVuYW1lLnNoKQorIyAgIChBbHNvIHJlbGF0ZWQgdG8gdGVzdGNhc2VzIDljIGFuZCA5ZCkKKyMgICBDb21taXQgTzogei97YixjfSwgICAgIHgvZF8xCisjICAgQ29tbWl0IEE6IHkve2IsYyxkL2d9LCB4L2QvZgorIyAgIENvbW1pdCBCOiB6L3tiLGMsZF8xfQorIyAgIEV4cGVjdGVkOiByZW5hbWUvZGVsZXRlKHgvZF8xLT55L2RfMSB2cy4gTm9uZSkgKyBEL0YgY29uZmxpY3Qgb24geS9kCisjICAgICAgICAgICAgIHkve2IsYyxkL2d9LCB5L2RfMX5CXjAsIHgvZC9mCisKKyMgICBOT1RFOiBUaGUgbWFpbiBwYXRoIG9mIGludGVyZXN0IGhlcmUgaXMgZF8xIGFuZCB3aGVyZSBpdCBlbmRzIHVwLCBidXQKKyMgICAgICAgICB0aGlzIGlzIGFjdHVhbGx5IGEgY2FzZSB0aGF0IGhhcyB0d28gcG90ZW50aWFsIGRpcmVjdG9yeSByZW5hbWVzCisjICAgICAgICAgaW52b2x2ZWQgYW5kIEQvRiBjb25mbGljdChzKSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gd2FsayB0aHJvdWdoCisjICAgICAgICAgZWFjaCBzdGVwLgorIworIyAgICAgICAgIENvbW1pdCBBIHJlbmFtZXMgei8gLT4geS8uICBUaHVzIGV2ZXJ5dGhpbmcgdGhhdCBCIGFkZHMgdG8gei8KKyMgICAgICAgICBzaG91bGQgYmUgaW5zdGVhZCBtb3ZlZCB0byB5Ly4gIFRoaXMgZ2l2ZXMgdXMgdGhlIEQvRiBjb25mbGljdCBvbgorIyAgICAgICAgIHkvZCBiZWNhdXNlIHgvZF8xIC0+IHovZF8xIC0+IHkvZF8xIGNvbmZsaWN0cyB3aXRoIHkvZC9nLgorIworIyAgICAgICAgIEZ1cnRoZXIsIGNvbW1pdCBCIHJlbmFtZXMgeC8gLT4gei8sIHRodXMgZXZlcnl0aGluZyBBIGFkZHMgdG8geC8KKyMgICAgICAgICBzaG91bGQgaW5zdGVhZCBiZSBtb3ZlZCB0byB6Ly4uLkJVVCB3ZSByZW1vdmVkIHovIGFuZCByZW5hbWVkIGl0CisjICAgICAgICAgdG8geS8sIHNvIG1heWJlIGV2ZXJ5dGhpbmcgc2hvdWxkIG1vdmUgbm90IGZyb20geC8gdG8gei8sIGJ1dAorIyAgICAgICAgIGZyb20geC8gdG8gei8gdG8geS8uICBEb2luZyBzbyBtaWdodCBtYWtlIHNlbnNlIGZyb20gdGhlIGxvZ2ljIHNvCisjICAgICAgICAgZmFyLCBidXQgbm90ZSB0aGF0IGNvbW1pdCBBIGhhZCBib3RoIGFuIHgvIGFuZCBhIHkvOyBpdCBkaWQgdGhlCisjICAgICAgICAgcmVuYW1pbmcgb2Ygei8gdG8geS8gYW5kIGNyZWF0ZWQgeC9kL2YgYW5kIGl0IGNsZWFybHkgbWFkZSB0aGVzZQorIyAgICAgICAgIHRoaW5ncyBzZXBhcmF0ZSwgc28gaXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gcHVzaCB0aGVzZQorIyAgICAgICAgIHRvZ2V0aGVyLiAgRG9pbmcgc28gaXMgd2hhdCBJJ2QgY2FsbCBhIGRvdWJseSB0cmFuc2l0aXZlIHJlbmFtZTsKKyMgICAgICAgICBzZWUgdGVzdGNhc2VzIDljIGFuZCA5ZCBmb3IgZnVydGhlciBkaXNjdXNzaW9uIG9mIHRoaXMgaXNzdWUgYW5kCisjICAgICAgICAgaG93IGl0J3MgcmVzb2x2ZWQuCisKK3Rlc3Rfc2V0dXBfN2UgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gN2UgJiYKKwkoCisJCWNkIDdlICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB4ICYmCisJCWVjaG8gZDEgPngvZCAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZ2l0IHJtIHgvZCAmJgorCQlta2RpciAtcCB4L2QgJiYKKwkJbWtkaXIgLXAgeS9kICYmCisJCWVjaG8gZiA+eC9kL2YgJiYKKwkJZWNobyBnID55L2QvZyAmJgorCQlnaXQgYWRkIHgvZC9mIHkvZC9nICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Qgei8gJiYKKwkJcm1kaXIgeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdlOiB0cmFuc2l0aXZlIHJlbmFtZSBpbiByZW5hbWUvZGVsZXRlIEFORCBkaXJzIGluIHRoZSB3YXknICcKKwl0ZXN0X3NldHVwXzdlICYmCisJKAorCQljZCA3ZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL2RlbGV0ZSkuKngvZC4qeS9kIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp4L2QvZiA6MDp5L2QvZyA6MDp5L2IgOjA6eS9jIDozOnkvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIEE6eC9kL2YgIEE6eS9kL2cgIE86ei9iICBPOnovYyAgTzp4L2QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCB5L2R+Ql4wID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBPOngvZCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDg6IFN1Ym9wdGltYWwgbWVyZ2VzCisjCisjIEFzIGFsbHVkZWQgdG8gaW4gdGhlIGxhc3Qgc2VjdGlvbiwgdGhlIHJ1bGVzZXQgd2UgaGF2ZSBidWlsdCB1cCBmb3IKKyMgZGV0ZWN0aW5nIGRpcmVjdG9yeSByZW5hbWVzIHVuZm9ydHVuYXRlbHkgaGFzIHNvbWUgc3BlY2lhbCBjYXNlcyB3aGVyZSBpdAorIyByZXN1bHRzIGluIHNsaWdodGx5IHN1Ym9wdGltYWwgb3Igbm9uLWludHVpdGl2ZSBiZWhhdmlvci4gIFRoaXMgc2VjdGlvbgorIyBleHBsb3JlcyB0aGVzZSBjYXNlcy4KKyMKKyMgVG8gYmUgZmFpciwgd2UgYWxyZWFkeSBoYWQgbm9uLWludHVpdGl2ZSBvciBzdWJvcHRpbWFsIGJlaGF2aW9yIGZvciBtb3N0CisjIG9mIHRoZXNlIGNhc2VzIGluIGdpdCBiZWZvcmUgaW50cm9kdWNpbmcgaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZQorIyBkZXRlY3Rpb24sIGJ1dCBpdCdkIGJlIG5pY2UgaWYgdGhlcmUgd2FzIGEgbW9kaWZpZWQgcnVsZXNldCBvdXQgdGhlcmUKKyMgdGhhdCBoYW5kbGVkIHRoZXNlIGNhc2VzIGEgYml0IGJldHRlci4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDhhLCBEdWFsLWRpcmVjdG9yeSByZW5hbWUsIG9uZSBpbnRvIHRoZSBvdGhlcnMnIHdheQorIyAgIENvbW1pdCBPLiB4L3thLGJ9LCAgIHkve2MsZH0KKyMgICBDb21taXQgQS4geC97YSxiLGV9LCB5L3tjLGQsZn0KKyMgICBDb21taXQgQi4geS97YSxifSwgICB6L3tjLGR9CisjCisjIFBvc3NpYmxlIFJlc29sdXRpb25zOgorIyAgIHcvbyBkaXItcmVuYW1lIGRldGVjdGlvbjogeS97YSxiLGZ9LCAgIHove2MsZH0sICAgeC9lCisjICAgQ3VycmVudGx5IGV4cGVjdGVkOiAgICAgICB5L3thLGIsZSxmfSwgei97YyxkfQorIyAgIE9wdGltYWw6ICAgICAgICAgICAgICAgICAgeS97YSxiLGV9LCAgIHove2MsZCxmfQorIworIyBOb3RlOiBCb3RoIHggYW5kIHkgZ290IHJlbmFtZWQgYW5kIGl0J2QgYmUgbmljZSB0byBkZXRlY3QgYm90aCwgYW5kIHdlIGRvCisjIGJldHRlciB3aXRoIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIHRoYW4gZ2l0IGRpZCB3aXRob3V0LCBidXQgdGhlCisjIHNpbXBsZSBydWxlIGZyb20gc2VjdGlvbiA1IHByZXZlbnRzIG1lIGZyb20gaGFuZGxpbmcgdGhpcyBhcyBvcHRpbWFsbHkgYXMKKyMgd2UgcG90ZW50aWFsbHkgY291bGQuCisKK3Rlc3Rfc2V0dXBfOGEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOGEgJiYKKwkoCisJCWNkIDhhICYmCisKKwkJbWtkaXIgeCAmJgorCQlta2RpciB5ICYmCisJCWVjaG8gYSA+eC9hICYmCisJCWVjaG8gYiA+eC9iICYmCisJCWVjaG8gYyA+eS9jICYmCisJCWVjaG8gZCA+eS9kICYmCisJCWdpdCBhZGQgeCB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZWNobyBlID54L2UgJiYKKwkJZWNobyBmID55L2YgJiYKKwkJZ2l0IGFkZCB4L2UgeS9mICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB5IHogJiYKKwkJZ2l0IG12IHggeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhhOiBEdWFsLWRpcmVjdG9yeSByZW5hbWUsIG9uZSBpbnRvIHRoZSBvdGhlcnMgd2F5JyAnCisJdGVzdF9zZXR1cF84YSAmJgorCSgKKwkJY2QgOGEgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp5L2EgSEVBRDp5L2IgSEVBRDp5L2UgSEVBRDp5L2YgSEVBRDp6L2MgSEVBRDp6L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86eC9hICAgIE86eC9iICAgIEE6eC9lICAgIEE6eS9mICAgIE86eS9jICAgIE86eS9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgOGIsIER1YWwtZGlyZWN0b3J5IHJlbmFtZSwgb25lIGludG8gdGhlIG90aGVycycgd2F5LCB3aXRoIGNvbmZsaWN0aW5nIGZpbGVuYW1lcworIyAgIENvbW1pdCBPLiB4L3thXzEsYl8xfSwgICAgIHkve2FfMixiXzJ9CisjICAgQ29tbWl0IEEuIHgve2FfMSxiXzEsZV8xfSwgeS97YV8yLGJfMixlXzJ9CisjICAgQ29tbWl0IEIuIHkve2FfMSxiXzF9LCAgICAgei97YV8yLGJfMn0KKyMKKyMgICB3L28gZGlyLXJlbmFtZSBkZXRlY3Rpb246IHkve2FfMSxiXzEsZV8yfSwgei97YV8yLGJfMn0sIHgvZV8xCisjICAgQ3VycmVudGx5IGV4cGVjdGVkOiAgICAgICA8c2FtZT4KKyMgICBTY2FyeTogICAgICAgICAgICAgICAgICAgIHkve2FfMSxiXzF9LCAgICAgei97YV8yLGJfMn0sIENPTkZMSUNUKGFkZC9hZGQsIGVfMSB2cy4gZV8yKQorIyAgIE9wdGltYWw6ICAgICAgICAgICAgICAgICAgeS97YV8xLGJfMSxlXzF9LCB6L3thXzIsYl8yLGVfMn0KKyMKKyMgTm90ZTogVmVyeSBzaW1pbGFyIHRvIDhhLCBleGNlcHQgaW5zdGVhZCBvZiAnZScgYW5kICdmJyBpbiBkaXJlY3RvcmllcyB4IGFuZAorIyB5LCBib3RoIGFyZSBuYW1lZCAnZScuICBXaXRob3V0IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uLCBuZWl0aGVyIGZpbGUKKyMgbW92ZXMgZGlyZWN0b3JpZXMuICBJbXBsZW1lbnQgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gc3Vib3B0aW1hbGx5LCBhbmQKKyMgeW91IGdldCBhbiBhZGQvYWRkIGNvbmZsaWN0LCBidXQgYm90aCBmaWxlcyB3ZXJlIGFkZGVkIGluIGNvbW1pdCBBLCBzbyB0aGlzCisjIGlzIGFuIGFkZC9hZGQgY29uZmxpY3Qgd2hlcmUgb25lIHNpZGUgb2YgaGlzdG9yeSBhZGRlZCBib3RoIGZpbGVzIC0tCisjIHNvbWV0aGluZyB3ZSBjYW4ndCByZXByZXNlbnQgaW4gdGhlIGluZGV4LiAgT2J2aW91c2x5LCB3ZSdkIHByZWZlciB0aGUgbGFzdAorIyByZXNvbHV0aW9uLCBidXQgb3VyIHByZXZpb3VzIHJ1bGVzIGFyZSB0b28gY29hcnNlIHRvIGFsbG93IGl0LiAgVXNpbmcgYm90aAorIyB0aGUgcnVsZXMgZnJvbSBzZWN0aW9uIDQgYW5kIHNlY3Rpb24gNSBzYXZlIHVzIGZyb20gdGhlIFNjYXJ5IHJlc29sdXRpb24sCisjIG1ha2luZyB1cyBmYWxsIGJhY2sgdG8gcHJlLWRpcmVjdG9yeS1yZW5hbWUtZGV0ZWN0aW9uIGJlaGF2aW9yIGZvciBib3RoCisjIGVfMSBhbmQgZV8yLgorCit0ZXN0X3NldHVwXzhiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDhiICYmCisJKAorCQljZCA4YiAmJgorCisJCW1rZGlyIHggJiYKKwkJbWtkaXIgeSAmJgorCQllY2hvIGExID54L2EgJiYKKwkJZWNobyBiMSA+eC9iICYmCisJCWVjaG8gYTIgPnkvYSAmJgorCQllY2hvIGIyID55L2IgJiYKKwkJZ2l0IGFkZCB4IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQllY2hvIGUxID54L2UgJiYKKwkJZWNobyBlMiA+eS9lICYmCisJCWdpdCBhZGQgeC9lIHkvZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeSB6ICYmCisJCWdpdCBtdiB4IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4YjogRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzIHdheSwgd2l0aCBjb25mbGljdGluZyBmaWxlbmFtZXMnICcKKwl0ZXN0X3NldHVwXzhiICYmCisJKAorCQljZCA4YiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYSBIRUFEOnkvYiBIRUFEOnovYSBIRUFEOnovYiBIRUFEOngvZSBIRUFEOnkvZSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp4L2EgICAgTzp4L2IgICAgTzp5L2EgICAgTzp5L2IgICAgQTp4L2UgICAgQTp5L2UgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA4YywgbW9kaWZ5L2RlbGV0ZSBvciByZW5hbWUrbW9kaWZ5L2RlbGV0ZT8KKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZXMgNWIsIDhkLCBhbmQgOWgpCisjICAgQ29tbWl0IE86IHove2IsYyxkfQorIyAgIENvbW1pdCBBOiB5L3tiLGN9CisjICAgQ29tbWl0IEI6IHove2IsYyxkX21vZGlmaWVkLGV9CisjICAgRXhwZWN0ZWQ6IHkve2IsYyxlfSwgQ09ORkxJQ1QobW9kaWZ5L2RlbGV0ZTogb24gei9kKQorIworIyAgIE5vdGU6IEl0IGNvdWxkIGVhc2lseSBiZSBhcmd1ZWQgdGhhdCB0aGUgY29ycmVjdCByZXNvbHV0aW9uIGhlcmUgaXMKKyMgICAgICAgICB5L3tiLGMsZX0sIENPTkZMSUNUKHJlbmFtZS9kZWxldGU6IHovZCAtPiB5L2QgdnMgZGVsZXRlZCkKKyMgICAgICAgICBhbmQgdGhhdCB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiBkIHNob3VsZCBiZSBwcmVzZW50IGluIHkvIGFmdGVyCisjICAgICAgICAgdGhlIG1lcmdlLCBqdXN0IG1hcmtlZCBhcyBjb25mbGljdGVkLiAgSW5kZWVkLCBJIHByZXZpb3VzbHkgZGlkCisjICAgICAgICAgYXJndWUgdGhhdC4gIEJ1dCBhcHBseWluZyBkaXJlY3RvcnkgcmVuYW1lcyB0byB0aGUgc2lkZSBvZgorIyAgICAgICAgIGhpc3Rvcnkgd2hlcmUgYSBmaWxlIGlzIG1lcmVseSBtb2RpZmllZCByZXN1bHRzIGluIHNwdXJpb3VzCisjICAgICAgICAgcmVuYW1lL3JlbmFtZSgxdG8yKSBjb25mbGljdHMgLS0gc2VlIHRlc3RjYXNlIDloLiAgU2VlIGFsc28KKyMgICAgICAgICBub3RlcyBpbiA4ZC4KKwordGVzdF9zZXR1cF84YyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA4YyAmJgorCSgKKwkJY2QgOGMgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCXRlc3Rfc2VxIDEgMTAgPnovZCAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgcm0gei9kICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyAxMSA+ei9kICYmCisJCXRlc3RfY2htb2QgK3ggei9kICYmCisJCWVjaG8gZSA+ei9lICYmCisJCWdpdCBhZGQgei9kIHovZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhjOiBtb2RpZnkvZGVsZXRlIG9yIHJlbmFtZSttb2RpZnkvZGVsZXRlJyAnCisJdGVzdF9zZXR1cF84YyAmJgorCSgKKwkJY2QgOGMgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKG1vZGlmeS9kZWxldGUpLiogei9kIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2IgOjA6eS9jIDowOnkvZSA6MTp6L2QgOjM6ei9kICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2IgIE86ei9jICBCOnovZSAgTzp6L2QgIEI6ei9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoyOnovZCAmJgorCQlnaXQgbHMtZmlsZXMgLXMgei9kIHwgZ3JlcCBeMTAwNzU1ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHovZCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB5L2QKKwkpCisnCisKKyMgVGVzdGNhc2UgOGQsIHJlbmFtZS9kZWxldGUuLi5vciBub3Q/CisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgNWI7IHRoZXNlIG1heSBhcHBlYXIgc2xpZ2h0bHkgaW5jb25zaXN0ZW50IHRvIHVzZXJzOworIyAgICBBbHNvIHJlbGF0ZWQgdG8gdGVzdGNhc2VzIDdkIGFuZCA3ZSkKKyMgICBDb21taXQgTzogei97YixjLGR9CisjICAgQ29tbWl0IEE6IHkve2IsY30KKyMgICBDb21taXQgQjogei97YixjLGQsZX0KKyMgICBFeHBlY3RlZDogeS97YixjLGV9CisjCisjICAgTm90ZTogSXQgd291bGQgYWxzbyBiZSBzb21ld2hhdCByZWFzb25hYmxlIHRvIHJlc29sdmUgdGhpcyBhcworIyAgICAgICAgICAgICB5L3tiLGMsZX0sIENPTkZMSUNUKHJlbmFtZS9kZWxldGU6IHgvZCAtPiB5L2Qgb3IgZGVsZXRlZCkKKyMKKyMgICBJbiB0aGlzIGNhc2UsIEknbSBsZWFuaW5nIHRvd2FyZHM6IGNvbW1pdCBBIHdhcyB0aGUgb25lIHRoYXQgZGVsZXRlZCB6L2QKKyMgICBhbmQgaXQgZGlkIHRoZSByZW5hbWUgb2YgeiB0byB5LCBzbyB0aGUgdHdvICJjb25mbGljdHMiIChyZW5hbWUgdnMuCisjICAgZGVsZXRlKSBhcmUgYm90aCBjb21pbmcgZnJvbSBjb21taXQgQSwgd2hpY2ggaXMgaWxsb2dpY2FsLiAgQ29uZmxpY3RzCisjICAgZHVyaW5nIG1lcmdpbmcgYXJlIHN1cHBvc2VkIHRvIGJlIGFib3V0IG9wcG9zaXRlIHNpZGVzIGRvaW5nIHRoaW5ncworIyAgIGRpZmZlcmVudGx5LgorCit0ZXN0X3NldHVwXzhkICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDhkICYmCisJKAorCQljZCA4ZCAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJdGVzdF9zZXEgMSAxMCA+ei9kICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBybSB6L2QgJiYKKwkJZ2l0IG12IHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGUgPnovZSAmJgorCQlnaXQgYWRkIHovZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhkOiByZW5hbWUvZGVsZXRlLi4ub3Igbm90PycgJworCXRlc3Rfc2V0dXBfOGQgJiYKKwkoCisJCWNkIDhkICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eS9lICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBCOnovZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDhlLCBCb3RoIHNpZGVzIHJlbmFtZSwgb25lIHNpZGUgYWRkcyB0byBvcmlnaW5hbCBkaXJlY3RvcnkKKyMgICBDb21taXQgTzogei97YixjfQorIyAgIENvbW1pdCBBOiB5L3tiLGN9CisjICAgQ29tbWl0IEI6IHcve2IsY30sIHovZAorIworIyBQb3NzaWJsZSBSZXNvbHV0aW9uczoKKyMgICB3L28gZGlyLXJlbmFtZSBkZXRlY3Rpb246IHovZCwgQ09ORkxJQ1Qoei9iIC0+IHkvYiB2cy4gdy9iKSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORkxJQ1Qoei9jIC0+IHkvYyB2cy4gdy9jKQorIyAgIEN1cnJlbnRseSBleHBlY3RlZDogICAgICAgeS9kLCBDT05GTElDVCh6L2IgLT4geS9iIHZzLiB3L2IpLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GTElDVCh6L2MgLT4geS9jIHZzLiB3L2MpCisjICAgT3B0aW1hbDogICAgICAgICAgICAgICAgICA/PworIworIyBOb3RlczogSW4gY29tbWl0IEEsIGRpcmVjdG9yeSB6IGdvdCByZW5hbWVkIHRvIHkuICBJbiBjb21taXQgQiwgZGlyZWN0b3J5IHoKKyMgICAgICAgIGRpZCBOT1QgZ2V0IHJlbmFtZWQ7IHRoZSBkaXJlY3RvcnkgaXMgc3RpbGwgcHJlc2VudDsgaW5zdGVhZCBpdCBpcworIyAgICAgICAgY29uc2lkZXJlZCB0byBoYXZlIGp1c3QgcmVuYW1lZCBhIHN1YnNldCBvZiBwYXRocyBpbiBkaXJlY3RvcnkgegorIyAgICAgICAgZWxzZXdoZXJlLiAgVGhlcmVmb3JlLCB0aGUgZGlyZWN0b3J5IHJlbmFtZSBkb25lIGluIGNvbW1pdCBBIHRvIHovCisjICAgICAgICBhcHBsaWVzIHRvIHovZCBhbmQgbWFwcyBpdCB0byB5L2QuCisjCisjICAgICAgICBJdCdzIHBvc3NpYmxlIHRoYXQgdXNlcnMgd291bGQgZ2V0IGNvbmZ1c2VkIGFib3V0IHRoaXMsIGJ1dCB3aGF0CisjICAgICAgICBzaG91bGQgd2UgZG8gaW5zdGVhZD8gIFNpbGVudGx5IGxlYXZpbmcgYXQgei9kIHNlZW1zIGp1c3QgYXMgYmFkIG9yCisjICAgICAgICBtYXliZSBldmVuIHdvcnNlLiAgUGVyaGFwcyB3ZSBjb3VsZCBwcmludCBhIGJpZyB3YXJuaW5nIGFib3V0IHovZAorIyAgICAgICAgYW5kIGhvdyB3ZSdyZSBtb3ZpbmcgdG8geS9kIGluIHRoaXMgY2FzZSwgYnV0IHdoZW4gSSBzdGFydGVkIHRoaW5raW5nCisjICAgICAgICBhYm91dCB0aGUgcmFtaWZpY2F0aW9ucyBvZiBkb2luZyB0aGF0LCBJIGRpZG4ndCBrbm93IGhvdyB0byBydWxlIG91dAorIyAgICAgICAgdGhhdCBvcGVuaW5nIG90aGVyIHdlaXJkIGVkZ2UgYW5kIGNvcm5lciBjYXNlcyBzbyBJIGp1c3QgcHVudGVkLgorCit0ZXN0X3NldHVwXzhlICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDhlICYmCisJKAorCQljZCA4ZSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeiB3ICYmCisJCW1rZGlyIHogJiYKKwkJZWNobyBkID56L2QgJiYKKwkJZ2l0IGFkZCB6L2QgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4ZTogQm90aCBzaWRlcyByZW5hbWUsIG9uZSBzaWRlIGFkZHMgdG8gb3JpZ2luYWwgZGlyZWN0b3J5JyAnCisJdGVzdF9zZXR1cF84ZSAmJgorCSgKKwkJY2QgOGUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4qcmVuYW1lL3JlbmFtZS4qei9jLip5L2MuKncvYyBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4qcmVuYW1lL3JlbmFtZS4qei9iLip5L2IuKncvYiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA3IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MTp6L2IgOjI6eS9iIDozOncvYiA6MTp6L2MgOjI6eS9jIDozOncvYyA6MDp5L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYiAgTzp6L2IgIE86ei9iICBPOnovYyAgTzp6L2MgIE86ei9jICBCOnovZCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0ID5hY3R1YWwgXAorCQkJeS9iICAgdy9iICAgeS9jICAgdy9jICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiBPOnovYiBPOnovYyBPOnovYyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9iICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovYworCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gOTogT3RoZXIgdGVzdGNhc2VzCisjCisjIFRoaXMgc2VjdGlvbiBjb25zaXN0cyBvZiBtaXNjZWxsYW5lb3VzIHRlc3RjYXNlcyBJIHRob3VnaHQgb2YgZHVyaW5nCisjIHRoZSBpbXBsZW1lbnRhdGlvbiB3aGljaCByb3VuZCBvdXQgdGhlIHRlc3RpbmcuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSA5YSwgSW5uZXIgcmVuYW1lZCBkaXJlY3Rvcnkgd2l0aGluIG91dGVyIHJlbmFtZWQgZGlyZWN0b3J5CisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgMWYpCisjICAgQ29tbWl0IE86IHove2IsYyxkL3tlLGYsZ319CisjICAgQ29tbWl0IEE6IHkve2IsY30sIHgvdy97ZSxmLGd9CisjICAgQ29tbWl0IEI6IHove2IsYyxkL3tlLGYsZyxofSxpfQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsaX0sIHgvdy97ZSxmLGcsaH0KKyMgICBOT1RFOiBUaGUgb25seSByZWFzb24gdGhpcyBvbmUgaXMgaW50ZXJlc3RpbmcgaXMgYmVjYXVzZSB3aGVuIGEgZGlyZWN0b3J5CisjICAgICAgICAgaXMgc3BsaXQgaW50byBtdWx0aXBsZSBvdGhlciBkaXJlY3Rvcmllcywgd2UgZGV0ZXJtaW5lIGJ5IHRoZSB3ZWlnaHQKKyMgICAgICAgICBvZiB3aGljaCBvbmUgaGFkIHRoZSBtb3N0IHBhdGhzIGdvaW5nIHRvIGl0LiAgQSBuYWl2ZSBpbXBsZW1lbnRhdGlvbgorIyAgICAgICAgIG9mIHRoYXQgY291bGQgdGFrZSB0aGUgbmV3IGZpbGUgaW4gY29tbWl0IEIgYXQgei9pIHRvIHgvdy9pIG9yIHgvaS4KKwordGVzdF9zZXR1cF85YSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA5YSAmJgorCSgKKwkJY2QgOWEgJiYKKworCQlta2RpciAtcCB6L2QgJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZWNobyBlID56L2QvZSAmJgorCQllY2hvIGYgPnovZC9mICYmCisJCWVjaG8gZyA+ei9kL2cgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJbWtkaXIgeCAmJgorCQlnaXQgbXYgei9kIHgvdyAmJgorCQlnaXQgbXYgeiB5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gaCA+ei9kL2ggJiYKKwkJZWNobyBpID56L2kgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOWE6IElubmVyIHJlbmFtZWQgZGlyZWN0b3J5IHdpdGhpbiBvdXRlciByZW5hbWVkIGRpcmVjdG9yeScgJworCXRlc3Rfc2V0dXBfOWEgJiYKKwkoCisJCWNkIDlhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDcgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eS9pICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBCOnovaSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eC93L2UgSEVBRDp4L3cvZiBIRUFEOngvdy9nIEhFQUQ6eC93L2ggJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86ei9kL2UgICAgTzp6L2QvZiAgICBPOnovZC9nICAgIEI6ei9kL2ggJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA5YiwgVHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb250ZW50IG1lcmdlCisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgMWMpCisjICAgQ29tbWl0IE86IHove2IsY30sICAgeC9kXzEKKyMgICBDb21taXQgQTogeS97YixjfSwgICB4L2RfMgorIyAgIENvbW1pdCBCOiB6L3tiLGMsZF8zfQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZF9tZXJnZWR9CisKK3Rlc3Rfc2V0dXBfOWIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOWIgJiYKKwkoCisJCWNkIDliICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB4ICYmCisJCXRlc3Rfc2VxIDEgMTAgPngvZCAmJgorCQlnaXQgYWRkIHogeCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJdGVzdF9zZXEgMSAxMSA+eC9kICYmCisJCWdpdCBhZGQgeC9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3Rfc2VxIDAgMTAgPngvZCAmJgorCQlnaXQgbXYgeC9kIHovZCAmJgorCQlnaXQgYWRkIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzliOiBUcmFuc2l0aXZlIHJlbmFtZSB3aXRoIGNvbnRlbnQgbWVyZ2UnICcKKwl0ZXN0X3NldHVwXzliICYmCisJKAorCQljZCA5YiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCisJCXRlc3Rfc2VxIDAgMTEgPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIHkvZCAmJgorCQlnaXQgYWRkIGV4cGVjdGVkICYmCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnkvYiBIRUFEOnkvYyBIRUFEOnkvZCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgICAgTzp6L2MgICAgOjA6ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6eC9kICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDp6L2QgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9kICYmCisKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDp5L2QpICE9ICQoZ2l0IHJldi1wYXJzZSBPOngvZCkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDp5L2QpICE9ICQoZ2l0IHJldi1wYXJzZSBBOngvZCkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDp5L2QpICE9ICQoZ2l0IHJldi1wYXJzZSBCOnovZCkKKwkpCisnCisKKyMgVGVzdGNhc2UgOWMsIERvdWJseSB0cmFuc2l0aXZlIHJlbmFtZT8KKyMgICAoUmVsYXRlZCB0byB0ZXN0Y2FzZSAxYywgN2UsIGFuZCA5ZCkKKyMgICBDb21taXQgTzogei97YixjfSwgICAgIHgve2QsZX0sICAgIHcvZgorIyAgIENvbW1pdCBBOiB5L3tiLGN9LCAgICAgeC97ZCxlLGYsZ30KKyMgICBDb21taXQgQjogei97YixjLGQsZX0sICAgICAgICAgICAgIHcvZgorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZCxlfSwgeC97ZixnfQorIworIyAgIE5PVEU6IHgvZiBhbmQgeC9nIG1heSBiZSBzbGlnaHRseSBjb25mdXNpbmcgaGVyZS4gIFRoZSByZW5hbWUgZnJvbSB3L2YgdG8KKyMgICAgICAgICB4L2YgaXMgY2xlYXIuICBMZXQncyBsb29rIGJleW9uZCB0aGF0LiAgSGVyZSdzIHRoZSBsb2dpYzoKKyMgICAgICAgICAgICBDb21taXQgQiByZW5hbWVkIHgvIC0+IHovCisjICAgICAgICAgICAgQ29tbWl0IEEgcmVuYW1lZCB6LyAtPiB5LworIyAgICAgICAgIFNvLCB3ZSBjb3VsZCBwb3NzaWJseSBmdXJ0aGVyIHJlbmFtZSB4L2YgdG8gei9mIHRvIHkvZiwgYSBkb3VibHkKKyMgICAgICAgICB0cmFuc2llbnQgcmVuYW1lLiAgSG93ZXZlciwgd2hlcmUgZG9lcyBpdCBlbmQ/ICBXZSBjYW4gY2hhaW4gdGhlc2UKKyMgICAgICAgICBpbmRlZmluaXRlbHkgKHNlZSB0ZXN0Y2FzZSA5ZCkuICBXaGF0IGlmIHRoZXJlIGlzIGEgRC9GIGNvbmZsaWN0CisjICAgICAgICAgYXQgei9mLyBvciB5L2YvPyAgT3IganVzdCBhbm90aGVyIGZpbGUgY29uZmxpY3QgYXQgb25lIG9mIHRob3NlCisjICAgICAgICAgcGF0aHM/ICBJbiB0aGUgY2FzZSBvZiBhbiBOLWxvbmcgY2hhaW4gb2YgdHJhbnNpZW50IHJlbmFtaW5ncywKKyMgICAgICAgICB3aGVyZSBkbyB3ZSAiYWJvcnQiIHRoZSByZW5hbWUgYXQ/ICBDYW4gdGhlIHVzZXIgbWFrZSBzZW5zZSBvZgorIyAgICAgICAgIHRoZSByZXN1bHRpbmcgY29uZmxpY3QgYW5kIHJlc29sdmUgaXQ/CisjCisjICAgICAgICAgVG8gYXZvaWQgdGhpcyBjb25mdXNpb24gSSB1c2UgdGhlIHNpbXBsZSBydWxlIHRoYXQgaWYgdGhlIG90aGVyIHNpZGUKKyMgICAgICAgICBvZiBoaXN0b3J5IGRpZCBhIGRpcmVjdG9yeSByZW5hbWUgdG8gYSBwYXRoIHRoYXQgeW91ciBzaWRlIHJlbmFtZWQKKyMgICAgICAgICBhd2F5LCB0aGVuIGlnbm9yZSB0aGF0IHBhcnRpY3VsYXIgcmVuYW1lIGZyb20gdGhlIG90aGVyIHNpZGUgb2YKKyMgICAgICAgICBoaXN0b3J5IGZvciBhbnkgaW1wbGljaXQgZGlyZWN0b3J5IHJlbmFtZXMuCisKK3Rlc3Rfc2V0dXBfOWMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gOWMgJiYKKwkoCisJCWNkIDljICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlta2RpciB4ICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWVjaG8gZSA+eC9lICYmCisJCW1rZGlyIHcgJiYKKwkJZWNobyBmID53L2YgJiYKKwkJZ2l0IGFkZCB6IHggdyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZ2l0IG12IHcvZiB4LyAmJgorCQllY2hvIGcgPngvZyAmJgorCQlnaXQgYWRkIHgvZyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeC9kIHovZCAmJgorCQlnaXQgbXYgeC9lIHovZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzljOiBEb3VibHkgdHJhbnNpdGl2ZSByZW5hbWU/JyAnCisJdGVzdF9zZXR1cF85YyAmJgorCSgKKwkJY2QgOWMgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgeCAtPiB6IHJlbmFtZSB0byB4L2YiIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6eS9iIEhFQUQ6eS9jIEhFQUQ6eS9kIEhFQUQ6eS9lIEhFQUQ6eC9mIEhFQUQ6eC9nICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOnovYiAgICBPOnovYyAgICBPOngvZCAgICBPOngvZSAgICBPOncvZiAgICBBOngvZyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDlkLCBOLWZvbGQgdHJhbnNpdGl2ZSByZW5hbWU/CisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgOWMuLi5hbmQgMWMgYW5kIDdlKQorIyAgIENvbW1pdCBPOiB6L2EsIHkvYiwgeC9jLCB3L2QsIHYvZSwgdS9mCisjICAgQ29tbWl0IEE6ICB5L3thLGJ9LCAgdy97YyxkfSwgIHUve2UsZn0KKyMgICBDb21taXQgQjogei97YSx0fSwgeC97YixjfSwgdi97ZCxlfSwgdS9mCisjICAgRXhwZWN0ZWQ6IDxzZWUgTk9URSBmaXJzdD4KKyMKKyMgICBOT1RFOiB6LyAtPiB5LyAoaW4gY29tbWl0IEEpCisjICAgICAgICAgeS8gLT4geC8gKGluIGNvbW1pdCBCKQorIyAgICAgICAgIHgvIC0+IHcvIChpbiBjb21taXQgQSkKKyMgICAgICAgICB3LyAtPiB2LyAoaW4gY29tbWl0IEIpCisjICAgICAgICAgdi8gLT4gdS8gKGluIGNvbW1pdCBBKQorIyAgICAgICAgIFNvLCBpZiB3ZSBhZGQgYSBmaWxlIHRvIHosIHNheSB6L3QsIHdoZXJlIHNob3VsZCBpdCBlbmQgdXA/ICBJbiB1PworIyAgICAgICAgIFdoYXQgaWYgdGhlcmUncyBhbm90aGVyIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVkICd0JyBpbiBvbmUgb2YgdGhlCisjICAgICAgICAgaW50ZXJ2ZW5pbmcgZGlyZWN0b3JpZXMgYW5kL29yIGluIHUgaXRzZWxmPyAgQWxzbywgc2hvdWxkbid0IHRoZQorIyAgICAgICAgIHNhbWUgbG9naWMgdGhhdCBwbGFjZXMgJ3QnIGluIHUvIGFsc28gbW92ZSBBTEwgb3RoZXIgZmlsZXMgdG8gdS8/CisjICAgICAgICAgV2hhdCBpZiB0aGVyZSBhcmUgZmlsZSBvciBkaXJlY3RvcnkgY29uZmxpY3RzIGluIGFueSBvZiB0aGVtPyAgSWYKKyMgICAgICAgICB3ZSBhdHRlbXB0ZWQgdG8gZG8gTi13YXkgKE4tZm9sZD8gTi1hcnk/IE4tdXBsZT8pIHRyYW5zaXRpdmUgcmVuYW1lcworIyAgICAgICAgIGxpa2UgdGhpcywgd291bGQgdGhlIHVzZXIgaGF2ZSBhbnkgaG9wZSBvZiB1bmRlcnN0YW5kaW5nIGFueQorIyAgICAgICAgIGNvbmZsaWN0cyBvciBob3cgdGhlaXIgd29ya2luZyB0cmVlIGVuZGVkIHVwPyAgSSB0aGluayBub3QsIHNvIEknbQorIyAgICAgICAgIHJ1bGluZyBvdXQgTi1hcnkgdHJhbnNpdGl2ZSByZW5hbWVzIGZvciBOPjEuCisjCisjICAgVGhlcmVmb3JlIG91ciBleHBlY3RlZCByZXN1bHQgaXM6CisjICAgICB6L3QsIHkvYSwgeC9iLCB3L2MsIHUvZCwgdS9lLCB1L2YKKyMgICBUaGUgcmVhc29uIHRoYXQgdi9kIERPRVMgZ2V0IHRyYW5zaXRpdmVseSByZW5hbWVkIHRvIHUvZCBpcyB0aGF0IHUvIGlzbid0CisjICAgcmVuYW1lZCBzb21ld2hlcmUuICBBIHNsaWdodGx5IHN1Yi1vcHRpbWFsIHJlc3VsdCwgYnV0IGl0IHVzZXMgZmFpcmx5CisjICAgc2ltcGxlIHJ1bGVzIHRoYXQgYXJlIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHdlIG5lZWQgZm9yIGFsbCB0aGUgb3RoZXIKKyMgICB0ZXN0Y2FzZXMgYW5kIHNpbXBsaWZpZXMgdGhpbmdzIGZvciB0aGUgdXNlci4KKwordGVzdF9zZXR1cF85ZCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA5ZCAmJgorCSgKKwkJY2QgOWQgJiYKKworCQlta2RpciB6IHkgeCB3IHYgdSAmJgorCQllY2hvIGEgPnovYSAmJgorCQllY2hvIGIgPnkvYiAmJgorCQllY2hvIGMgPngvYyAmJgorCQllY2hvIGQgPncvZCAmJgorCQllY2hvIGUgPnYvZSAmJgorCQllY2hvIGYgPnUvZiAmJgorCQlnaXQgYWRkIHogeSB4IHcgdiB1ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHovYSB5LyAmJgorCQlnaXQgbXYgeC9jIHcvICYmCisJCWdpdCBtdiB2L2UgdS8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyB0ID56L3QgJiYKKwkJZ2l0IG12IHkvYiB4LyAmJgorCQlnaXQgbXYgdy9kIHYvICYmCisJCWdpdCBhZGQgei90ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOWQ6IE4td2F5IHRyYW5zaXRpdmUgcmVuYW1lPycgJworCXRlc3Rfc2V0dXBfOWQgJiYKKwkoCisJCWNkIDlkICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nIHogLT4geSByZW5hbWUgdG8gei90IiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiV0FSTklORzogQXZvaWRpbmcgYXBwbHlpbmcgeSAtPiB4IHJlbmFtZSB0byB5L2EiIG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJXQVJOSU5HOiBBdm9pZGluZyBhcHBseWluZyB4IC0+IHcgcmVuYW1lIHRvIHgvYiIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIldBUk5JTkc6IEF2b2lkaW5nIGFwcGx5aW5nIHcgLT4gdiByZW5hbWUgdG8gdy9jIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA3IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnovdCBcCisJCQlIRUFEOnkvYSBIRUFEOngvYiBIRUFEOncvYyBcCisJCQlIRUFEOnUvZCBIRUFEOnUvZSBIRUFEOnUvZiAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJQjp6L3QgICAgXAorCQkJTzp6L2EgICAgTzp5L2IgICAgTzp4L2MgICAgXAorCQkJTzp3L2QgICAgTzp2L2UgICAgQTp1L2YgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA5ZSwgTi10by0xIHdoYW1tbworIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDljLi4uYW5kIDFjIGFuZCA3ZSkKKyMgICBDb21taXQgTzogZGlyMS97YSxifSwgZGlyMi97ZCxlfSwgZGlyMy97ZyxofSwgZGlyTi97aixrfQorIyAgIENvbW1pdCBBOiBkaXIxL3thLGIsYyx5b30sIGRpcjIve2QsZSxmLHlvfSwgZGlyMy97ZyxoLGkseW99LCBkaXJOL3tqLGssbCx5b30KKyMgICBDb21taXQgQjogY29tYmluZWQve2EsYixkLGUsZyxoLGosa30KKyMgICBFeHBlY3RlZDogY29tYmluZWQve2EsYixjLGQsZSxmLGcsaCxpLGosayxsfSwgQ09ORkxJQ1QoTnRvMSkgd2FybmluZ3MsCisjICAgICAgICAgICAgIGRpcjEveW8sIGRpcjIveW8sIGRpcjMveW8sIGRpck4veW8KKwordGVzdF9zZXR1cF85ZSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA5ZSAmJgorCSgKKwkJY2QgOWUgJiYKKworCQlta2RpciBkaXIxIGRpcjIgZGlyMyBkaXJOICYmCisJCWVjaG8gYSA+ZGlyMS9hICYmCisJCWVjaG8gYiA+ZGlyMS9iICYmCisJCWVjaG8gZCA+ZGlyMi9kICYmCisJCWVjaG8gZSA+ZGlyMi9lICYmCisJCWVjaG8gZyA+ZGlyMy9nICYmCisJCWVjaG8gaCA+ZGlyMy9oICYmCisJCWVjaG8gaiA+ZGlyTi9qICYmCisJCWVjaG8gayA+ZGlyTi9rICYmCisJCWdpdCBhZGQgZGlyKiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWVjaG8gYyAgPmRpcjEvYyAmJgorCQllY2hvIHlvID5kaXIxL3lvICYmCisJCWVjaG8gZiAgPmRpcjIvZiAmJgorCQllY2hvIHlvID5kaXIyL3lvICYmCisJCWVjaG8gaSAgPmRpcjMvaSAmJgorCQllY2hvIHlvID5kaXIzL3lvICYmCisJCWVjaG8gbCAgPmRpck4vbCAmJgorCQllY2hvIHlvID5kaXJOL3lvICYmCisJCWdpdCBhZGQgZGlyKiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgZGlyMSBjb21iaW5lZCAmJgorCQlnaXQgbXYgZGlyMi8qIGNvbWJpbmVkLyAmJgorCQlnaXQgbXYgZGlyMy8qIGNvbWJpbmVkLyAmJgorCQlnaXQgbXYgZGlyTi8qIGNvbWJpbmVkLyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICc5ZTogTi10by0xIHdoYW1tbycgJworCXRlc3Rfc2V0dXBfOWUgJiYKKwkoCisJCWNkIDllICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0ICYmCisJCWdyZXAgIkNPTkZMSUNUIChpbXBsaWNpdCBkaXIgcmVuYW1lKTogQ2Fubm90IG1hcCBtb3JlIHRoYW4gb25lIHBhdGggdG8gY29tYmluZWQveW8iIG91dCA+ZXJyb3JfbGluZSAmJgorCQlncmVwIC1xIGRpcjEveW8gZXJyb3JfbGluZSAmJgorCQlncmVwIC1xIGRpcjIveW8gZXJyb3JfbGluZSAmJgorCQlncmVwIC1xIGRpcjMveW8gZXJyb3JfbGluZSAmJgorCQlncmVwIC1xIGRpck4veW8gZXJyb3JfbGluZSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDE2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDpjb21iaW5lZC9hIDowOmNvbWJpbmVkL2IgOjA6Y29tYmluZWQvYyBcCisJCQk6MDpjb21iaW5lZC9kIDowOmNvbWJpbmVkL2UgOjA6Y29tYmluZWQvZiBcCisJCQk6MDpjb21iaW5lZC9nIDowOmNvbWJpbmVkL2ggOjA6Y29tYmluZWQvaSBcCisJCQk6MDpjb21iaW5lZC9qIDowOmNvbWJpbmVkL2sgOjA6Y29tYmluZWQvbCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ZGlyMS9hICAgICAgTzpkaXIxL2IgICAgICBBOmRpcjEvYyBcCisJCQkgTzpkaXIyL2QgICAgICBPOmRpcjIvZSAgICAgIEE6ZGlyMi9mIFwKKwkJCSBPOmRpcjMvZyAgICAgIE86ZGlyMy9oICAgICAgQTpkaXIzL2kgXAorCQkJIE86ZGlyTi9qICAgICAgTzpkaXJOL2sgICAgICBBOmRpck4vbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOmRpcjEveW8gOjA6ZGlyMi95byA6MDpkaXIzL3lvIDowOmRpck4veW8gJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBBOmRpcjEveW8gIEE6ZGlyMi95byAgQTpkaXIzL3lvICBBOmRpck4veW8gJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSA5ZiwgUmVuYW1lZCBkaXJlY3RvcnkgdGhhdCBvbmx5IGNvbnRhaW5lZCBpbW1lZGlhdGUgc3ViZGlycworIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyAxZSAmIDlnKQorIyAgIENvbW1pdCBPOiBnb2FsL3thLGJ9LyRtb3JlX2ZpbGVzCisjICAgQ29tbWl0IEE6IHByaW9yaXR5L3thLGJ9LyRtb3JlX2ZpbGVzCisjICAgQ29tbWl0IEI6IGdvYWwve2EsYn0vJG1vcmVfZmlsZXMsIGdvYWwvYworIyAgIEV4cGVjdGVkOiBwcmlvcml0eS97YSxifS8kbW9yZV9maWxlcywgcHJpb3JpdHkvYworCit0ZXN0X3NldHVwXzlmICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDlmICYmCisJKAorCQljZCA5ZiAmJgorCisJCW1rZGlyIC1wIGdvYWwvYSAmJgorCQlta2RpciAtcCBnb2FsL2IgJiYKKwkJZWNobyBmb28gPmdvYWwvYS9mb28gJiYKKwkJZWNobyBiYXIgPmdvYWwvYi9iYXIgJiYKKwkJZWNobyBiYXogPmdvYWwvYi9iYXogJiYKKwkJZ2l0IGFkZCBnb2FsICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IGdvYWwvIHByaW9yaXR5ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gYyA+Z29hbC9jICYmCisJCWdpdCBhZGQgZ29hbC9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOWY6IFJlbmFtZWQgZGlyZWN0b3J5IHRoYXQgb25seSBjb250YWluZWQgaW1tZWRpYXRlIHN1YmRpcnMnICcKKwl0ZXN0X3NldHVwXzlmICYmCisJKAorCQljZCA5ZiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOnByaW9yaXR5L2EvZm9vIFwKKwkJCUhFQUQ6cHJpb3JpdHkvYi9iYXIgXAorCQkJSEVBRDpwcmlvcml0eS9iL2JheiBcCisJCQlIRUFEOnByaW9yaXR5L2MgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86Z29hbC9hL2ZvbyBcCisJCQlPOmdvYWwvYi9iYXIgXAorCQkJTzpnb2FsL2IvYmF6IFwKKwkJCUI6Z29hbC9jICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmdvYWwvYworCSkKKycKKworIyBUZXN0Y2FzZSA5ZywgUmVuYW1lZCBkaXJlY3RvcnkgdGhhdCBvbmx5IGNvbnRhaW5lZCBpbW1lZGlhdGUgc3ViZGlycywgaW1tZWRpYXRlIHN1YmRpcnMgcmVuYW1lZAorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyAxZSAmIDlmKQorIyAgIENvbW1pdCBPOiBnb2FsL3thLGJ9LyRtb3JlX2ZpbGVzCisjICAgQ29tbWl0IEE6IHByaW9yaXR5L3thbHBoYSxicmF2b30vJG1vcmVfZmlsZXMKKyMgICBDb21taXQgQjogZ29hbC97YSxifS8kbW9yZV9maWxlcywgZ29hbC9jCisjICAgRXhwZWN0ZWQ6IHByaW9yaXR5L3thbHBoYSxicmF2b30vJG1vcmVfZmlsZXMsIHByaW9yaXR5L2MKKwordGVzdF9zZXR1cF85ZyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA5ZyAmJgorCSgKKwkJY2QgOWcgJiYKKworCQlta2RpciAtcCBnb2FsL2EgJiYKKwkJbWtkaXIgLXAgZ29hbC9iICYmCisJCWVjaG8gZm9vID5nb2FsL2EvZm9vICYmCisJCWVjaG8gYmFyID5nb2FsL2IvYmFyICYmCisJCWVjaG8gYmF6ID5nb2FsL2IvYmF6ICYmCisJCWdpdCBhZGQgZ29hbCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHByaW9yaXR5ICYmCisJCWdpdCBtdiBnb2FsL2EvIHByaW9yaXR5L2FscGhhICYmCisJCWdpdCBtdiBnb2FsL2IvIHByaW9yaXR5L2JldGEgJiYKKwkJcm1kaXIgZ29hbC8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyBjID5nb2FsL2MgJiYKKwkJZ2l0IGFkZCBnb2FsL2MgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICc5ZzogUmVuYW1lZCBkaXJlY3RvcnkgdGhhdCBvbmx5IGNvbnRhaW5lZCBpbW1lZGlhdGUgc3ViZGlycywgaW1tZWRpYXRlIHN1YmRpcnMgcmVuYW1lZCcgJworCSgKKwkJY2QgOWcgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDpwcmlvcml0eS9hbHBoYS9mb28gXAorCQkJSEVBRDpwcmlvcml0eS9iZXRhL2JhciAgXAorCQkJSEVBRDpwcmlvcml0eS9iZXRhL2JheiAgXAorCQkJSEVBRDpwcmlvcml0eS9jICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOmdvYWwvYS9mb28gXAorCQkJTzpnb2FsL2IvYmFyIFwKKwkJCU86Z29hbC9iL2JheiBcCisJCQlCOmdvYWwvYyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpnb2FsL2MKKwkpCisnCisKKyMgVGVzdGNhc2UgOWgsIEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gb3RoZXIgc2lkZQorIyAgIChFeHRyZW1lbHkgY2xvc2VseSByZWxhdGVkIHRvIHRlc3RjYXNlIDNhKQorIyAgIENvbW1pdCBPOiB6L3tiLGMsZF8xfQorIyAgIENvbW1pdCBBOiB6L3tiLGMsZF8yfQorIyAgIENvbW1pdCBCOiB5L3tiLGN9LCB4L2RfMQorIyAgIEV4cGVjdGVkOiB5L3tiLGN9LCB4L2RfMgorIyAgIE5PVEU6IElmIHdlIGFwcGxpZWQgdGhlIHovIC0+IHkvIHJlbmFtZSB0byB6L2QsIHRoZW4gd2UnZCBlbmQgdXAgd2l0aAorIyAgICAgICAgIGEgcmVuYW1lL3JlbmFtZSgxdG8yKSBjb25mbGljdCAoei9kIC0+IHkvZCB2cy4geC9kKQordGVzdF9zZXR1cF85aCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyA5aCAmJgorCSgKKwkJY2QgOWggJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuZFxuIiA+ei9kICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCXRlc3RfdGljayAmJgorCQllY2hvIG1vcmUgPj56L2QgJiYKKwkJZ2l0IGFkZCB6L2QgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciB5ICYmCisJCW1rZGlyIHggJiYKKwkJZ2l0IG12IHovYiB5LyAmJgorCQlnaXQgbXYgei9jIHkvICYmCisJCWdpdCBtdiB6L2QgeC8gJiYKKwkJcm1kaXIgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzloOiBBdm9pZCBkaXIgcmVuYW1lIG9uIG1lcmVseSBtb2RpZmllZCBwYXRoJyAnCisJdGVzdF9zZXR1cF85aCAmJgorCSgKKwkJY2QgOWggJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDp5L2IgSEVBRDp5L2MgSEVBRDp4L2QgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86ei9iICAgIE86ei9jICAgIEE6ei9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSdWxlcyBzdWdnZXN0ZWQgYnkgc2VjdGlvbiA5OgorIworIyAgIElmIHRoZSBvdGhlciBzaWRlIG9mIGhpc3RvcnkgZGlkIGEgZGlyZWN0b3J5IHJlbmFtZSB0byBhIHBhdGggdGhhdCB5b3VyCisjICAgc2lkZSByZW5hbWVkIGF3YXksIHRoZW4gaWdub3JlIHRoYXQgcGFydGljdWxhciByZW5hbWUgZnJvbSB0aGUgb3RoZXIKKyMgICBzaWRlIG9mIGhpc3RvcnkgZm9yIGFueSBpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiAxMDogSGFuZGxpbmcgdW50cmFja2VkIGZpbGVzCisjCisjIHVucGFja190cmVlcygpLCB1cG9uIHdoaWNoIHRoZSByZWN1cnNpdmUgbWVyZ2UgYWxnb3JpdGhtIGlzIGJhc2VkLCBhYm9ydHMKKyMgdGhlIG9wZXJhdGlvbiBpZiB1bnRyYWNrZWQgb3IgZGlydHkgZmlsZXMgd291bGQgYmUgZGVsZXRlZCBvciBvdmVyd3JpdHRlbgorIyBieSB0aGUgbWVyZ2UuICBVbmZvcnR1bmF0ZWx5LCB1bnBhY2tfdHJlZXMoKSBkb2VzIG5vdCB1bmRlcnN0YW5kIHJlbmFtZXMsCisjIGFuZCBpZiBpdCBkb2Vzbid0IGFib3J0LCB0aGVuIGl0IG11ZGRpZXMgdXAgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGJlZm9yZQorIyB3ZSBldmVuIGdldCB0byB0aGUgcG9pbnQgb2YgZGV0ZWN0aW5nIHJlbmFtZXMsIHNvIHdlIG5lZWQgc29tZSBzcGVjaWFsCisjIGhhbmRsaW5nLCBhdCBsZWFzdCBpbiB0aGUgY2FzZSBvZiBkaXJlY3RvcnkgcmVuYW1lcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDEwYSwgT3ZlcndyaXRlIHVudHJhY2tlZDogbm9ybWFsIHJlbmFtZS9kZWxldGUKKyMgICBDb21taXQgTzogei97YixjXzF9CisjICAgQ29tbWl0IEE6IHovYiArIHVudHJhY2tlZCB6L2MgKyB1bnRyYWNrZWQgei9kCisjICAgQ29tbWl0IEI6IHove2IsZF8xfQorIyAgIEV4cGVjdGVkOiBBYm9ydGVkIE1lcmdlICsKKyMgICAgICAgRVJST1JfTVNHKHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UpCisKK3Rlc3Rfc2V0dXBfMTBhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEwYSAmJgorCSgKKwkJY2QgMTBhICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHogJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgcm0gei9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB6L2Mgei9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBhOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggbm9ybWFsIHJlbmFtZS9kZWxldGUnICcKKwl0ZXN0X3NldHVwXzEwYSAmJgorCSgKKwkJY2QgMTBhICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQllY2hvIHZlcnkgPnovYyAmJgorCQllY2hvIGltcG9ydGFudCA+ei9kICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlIiBlcnIgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCisJCWVjaG8gdmVyeSA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCB6L2MgJiYKKworCQllY2hvIGltcG9ydGFudCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCB6L2QgJiYKKworCQlnaXQgcmV2LXBhcnNlIEhFQUQ6ei9iID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBPOnovYiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgMTBiLCBPdmVyd3JpdGUgdW50cmFja2VkOiBkaXIgcmVuYW1lICsgZGVsZXRlCisjICAgQ29tbWl0IE86IHove2IsY18xfQorIyAgIENvbW1pdCBBOiB5L2IgKyB1bnRyYWNrZWQgeS97YyxkLGV9CisjICAgQ29tbWl0IEI6IHove2IsZF8xLGV9CisjICAgRXhwZWN0ZWQ6IEZhaWxlZCBNZXJnZTsgeS9iICsgdW50cmFja2VkIHkvYyArIHVudHJhY2tlZCB5L2Qgb24gZGlzayArCisjICAgICAgICAgICAgIHovY18xIC0+IHovZF8xIHJlbmFtZSByZWNvcmRlZCBhdCBzdGFnZSAzIGZvciB5L2QgKworIyAgICAgICBFUlJPUl9NU0cocmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAneS9kJykKKwordGVzdF9zZXR1cF8xMGIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTBiICYmCisJKAorCQljZCAxMGIgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBybSB6L2MgJiYKKwkJZ2l0IG12IHovIHkvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB6L2Mgei9kICYmCisJCWVjaG8gZSA+ei9lICYmCisJCWdpdCBhZGQgei9lICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBiOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZSArIGRlbGV0ZScgJworCXRlc3Rfc2V0dXBfMTBiICYmCisJKAorCQljZCAxMGIgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCWVjaG8gdmVyeSA+eS9jICYmCisJCWVjaG8gaW1wb3J0YW50ID55L2QgJiYKKwkJZWNobyBjb250ZW50cyA+eS9lICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9kZWxldGUpLipWZXJzaW9uIEJcXjAgb2YgeS9kIGxlZnQgaW4gdHJlZSBhdCB5L2R+QlxeMCIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkVycm9yOiBSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0IHkvZTsgd3JpdGluZyB0byB5L2V+QlxeMCBpbnN0ZWFkIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2IgOjM6eS9kIDozOnkvZSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzp6L2IgIE86ei9jICBCOnovZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZWNobyB2ZXJ5ID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHkvYyAmJgorCisJCWVjaG8gaW1wb3J0YW50ID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHkvZCAmJgorCisJCWVjaG8gY29udGVudHMgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgeS9lCisJKQorJworCisjIFRlc3RjYXNlIDEwYywgT3ZlcndyaXRlIHVudHJhY2tlZDogZGlyIHJlbmFtZS9yZW5hbWUoMXRvMikKKyMgICBDb21taXQgTzogei97YSxifSwgeC97YyxkfQorIyAgIENvbW1pdCBBOiB5L3thLGJ9LCB3L2MsIHgvZCArIGRpZmZlcmVudCB1bnRyYWNrZWQgeS9jCisjICAgQ29tbWl0IEI6IHove2EsYixjfSwgeC9kCisjICAgRXhwZWN0ZWQ6IEZhaWxlZCBNZXJnZTsgeS97YSxifSArIHgvZCArIHVudHJhY2tlZCB5L2MgKworIyAgICAgICAgICAgICBDT05GTElDVChyZW5hbWUvcmVuYW1lKSB4L2MgLT4gdy9jIHZzIHkvYyArCisjICAgICAgICAgICAgIHkvY35CXjAgKworIyAgICAgICAgICAgICBFUlJPUl9NU0coUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCB5L2MpCisKK3Rlc3Rfc2V0dXBfMTBjICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEwY18kMSAmJgorCSgKKwkJY2QgMTBjXyQxICYmCisKKwkJbWtkaXIgeiB4ICYmCisJCWVjaG8gYSA+ei9hICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+eC9jICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJbWtkaXIgdyAmJgorCQlnaXQgbXYgeC9jIHcvYyAmJgorCQlnaXQgbXYgei8geS8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHgvYyB6LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYzE6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKScgJworCXRlc3Rfc2V0dXBfMTBjIDEgJiYKKwkoCisJCWNkIDEwY18xICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQllY2hvIGltcG9ydGFudCA+eS9jICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCB5L2M7IGFkZGluZyBhcyB5L2N+QlxeMCBpbnN0ZWFkIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2EgOjA6eS9iIDowOngvZCA6MTp4L2MgOjI6dy9jIDozOnkvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9hICBPOnovYiAgTzp4L2QgIE86eC9jICBPOngvYyAgTzp4L2MgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCB5L2N+Ql4wID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBPOngvYyA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQllY2hvIGltcG9ydGFudCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCB5L2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYzI6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKSwgb3RoZXIgZGlyZWN0aW9uJyAnCisJdGVzdF9zZXR1cF8xMGMgMiAmJgorCSgKKwkJY2QgMTBjXzIgJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjbGVhbiAtZmRxeCAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKwkJbWtkaXIgeSAmJgorCQllY2hvIGltcG9ydGFudCA+eS9jICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQV4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCB5L2M7IGFkZGluZyBhcyB5L2N+SEVBRCBpbnN0ZWFkIiBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp5L2EgOjA6eS9iIDowOngvZCA6MTp4L2MgOjM6dy9jIDoyOnkvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9hICBPOnovYiAgTzp4L2QgIE86eC9jICBPOngvYyAgTzp4L2MgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCB5L2N+SEVBRCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgTzp4L2MgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZWNobyBpbXBvcnRhbnQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgeS9jCisJKQorJworCisjIFRlc3RjYXNlIDEwZCwgRGVsZXRlIHVudHJhY2tlZCB3LyBkaXIgcmVuYW1lL3JlbmFtZSgydG8xKQorIyAgIENvbW1pdCBPOiB6L3thLGIsY18xfSwgICAgICAgIHgve2QsZSxmXzJ9CisjICAgQ29tbWl0IEE6IHkve2EsYn0sICAgICAgICAgICAgeC97ZCxlLGZfMix3aGFtXzF9ICsgdW50cmFja2VkIHkvd2hhbQorIyAgIENvbW1pdCBCOiB6L3thLGIsY18xLHdoYW1fMn0sIHkve2QsZX0KKyMgICBFeHBlY3RlZDogRmFpbGVkIE1lcmdlOyB5L3thLGIsZCxlfSArIHVudHJhY2tlZCB5L3t3aGFtLHdoYW1+bWVyZ2VkfSsKKyMgICAgICAgICAgICAgQ09ORkxJQ1QocmVuYW1lL3JlbmFtZSkgei9jXzEgdnMgeC9mXzIgLT4geS93aGFtCisjICAgICAgICAgICAgIEVSUk9SX01TRyhSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0IHkvd2hhbSkKKwordGVzdF9zZXR1cF8xMGQgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTBkICYmCisJKAorCQljZCAxMGQgJiYKKworCQlta2RpciB6IHggJiYKKwkJZWNobyBhID56L2EgJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID56L2MgJiYKKwkJZWNobyBkID54L2QgJiYKKwkJZWNobyBlID54L2UgJiYKKwkJZWNobyBmID54L2YgJiYKKwkJZ2l0IGFkZCB6IHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgei9jIHgvd2hhbSAmJgorCQlnaXQgbXYgei8geS8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHgvZiB6L3doYW0gJiYKKwkJZ2l0IG12IHgvIHkvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBkOiBEZWxldGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMnRvMSknICcKKwl0ZXN0X3NldHVwXzEwZCAmJgorCSgKKwkJY2QgMTBkICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQllY2hvIGltcG9ydGFudCA+eS93aGFtICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiUmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCB5L3doYW0iIG91dCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYSA6MDp5L2IgOjA6eS9kIDowOnkvZSA6Mjp5L3doYW0gOjM6eS93aGFtICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQkgTzp6L2EgIE86ei9iICBPOngvZCAgTzp4L2UgIE86ei9jICAgICBPOngvZiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MTp5L3doYW0gJiYKKworCQllY2hvIGltcG9ydGFudCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCB5L3doYW0gJiYKKworCQkjIFRlc3QgdGhhdCB0aGUgdHdvLXdheSBtZXJnZSBpbiB5L3doYW1+bWVyZ2VkIGlzIGFzIGV4cGVjdGVkCisJCWdpdCBjYXQtZmlsZSAtcCA6Mjp5L3doYW0gPmV4cGVjdCAmJgorCQlnaXQgY2F0LWZpbGUgLXAgOjM6eS93aGFtID5vdGhlciAmJgorCQk+ZW1wdHkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgXAorCQkJLUwgIkhFQUQiIFwKKwkJCS1MICIiIFwKKwkJCS1MICJCXjAiIFwKKwkJCWV4cGVjdCBlbXB0eSBvdGhlciAmJgorCQl0ZXN0X2NtcCBleHBlY3QgeS93aGFtfm1lcmdlZAorCSkKKycKKworIyBUZXN0Y2FzZSAxMGUsIERvZXMgZ2l0IGNvbXBsYWluIGFib3V0IHVudHJhY2tlZCBmaWxlIHRoYXQncyBub3QgaW4gdGhlIHdheT8KKyMgICBDb21taXQgTzogei97YSxifQorIyAgIENvbW1pdCBBOiB5L3thLGJ9ICsgdW50cmFja2VkIHovYworIyAgIENvbW1pdCBCOiB6L3thLGIsY30KKyMgICBFeHBlY3RlZDogeS97YSxiLGN9ICsgdW50cmFja2VkIHovYworCit0ZXN0X3NldHVwXzEwZSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMGUgJiYKKwkoCisJCWNkIDEwZSAmJgorCisJCW1rZGlyIHogJiYKKwkJZWNobyBhID56L2EgJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHovIHkvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgei9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3RfZmFpbHVyZSAnMTBlOiBEb2VzIGdpdCBjb21wbGFpbiBhYm91dCB1bnRyYWNrZWQgZmlsZSB0aGF0IGlzIG5vdCByZWFsbHkgaW4gdGhlIHdheT8nICcKKwkoCisJCWNkIDEwZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJbWtkaXIgeiAmJgorCQllY2hvIHJhbmRvbSA+ei9jICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAhICJmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZSIgZXJyICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6eS9hIDowOnkvYiA6MDp5L2MgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCSBPOnovYSAgTzp6L2IgIEI6ei9jICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQllY2hvIHJhbmRvbSA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCB6L2MKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDExOiBIYW5kbGluZyBkaXJ0eSAobm90IHVwLXRvLWRhdGUpIGZpbGVzCisjCisjIHVucGFja190cmVlcygpLCB1cG9uIHdoaWNoIHRoZSByZWN1cnNpdmUgbWVyZ2UgYWxnb3JpdGhtIGlzIGJhc2VkLCBhYm9ydHMKKyMgdGhlIG9wZXJhdGlvbiBpZiB1bnRyYWNrZWQgb3IgZGlydHkgZmlsZXMgd291bGQgYmUgZGVsZXRlZCBvciBvdmVyd3JpdHRlbgorIyBieSB0aGUgbWVyZ2UuICBVbmZvcnR1bmF0ZWx5LCB1bnBhY2tfdHJlZXMoKSBkb2VzIG5vdCB1bmRlcnN0YW5kIHJlbmFtZXMsCisjIGFuZCBpZiBpdCBkb2Vzbid0IGFib3J0LCB0aGVuIGl0IG11ZGRpZXMgdXAgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGJlZm9yZQorIyB3ZSBldmVuIGdldCB0byB0aGUgcG9pbnQgb2YgZGV0ZWN0aW5nIHJlbmFtZXMsIHNvIHdlIG5lZWQgc29tZSBzcGVjaWFsCisjIGhhbmRsaW5nLiAgVGhpcyB3YXMgdHJ1ZSBldmVuIG9mIG5vcm1hbCByZW5hbWVzLCBidXQgdGhlcmUgYXJlIGFkZGl0aW9uYWwKKyMgY29kZXBhdGhzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIHdpdGggZGlyZWN0b3J5IHJlbmFtZXMuICBBZGQKKyMgdGVzdGNhc2VzIGZvciBib3RoIHJlbmFtZWQtYnktZGlyZWN0b3J5LXJlbmFtZS1kZXRlY3Rpb24gYW5kIHN0YW5kYXJkCisjIHJlbmFtZSBjYXNlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDExYSwgQXZvaWQgbG9zaW5nIGRpcnR5IGNvbnRlbnRzIHdpdGggc2ltcGxlIHJlbmFtZQorIyAgIENvbW1pdCBPOiB6L3thLGJfdjF9LAorIyAgIENvbW1pdCBBOiB6L3thLGNfdjF9LCBhbmQgei9jX3YxIGhhcyB1bmNvbW1pdHRlZCBtb2RzCisjICAgQ29tbWl0IEI6IHove2EsYl92Mn0KKyMgICBFeHBlY3RlZDogRVJST1JfTVNHKFJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB6L2MpICsKKyMgICAgICAgICAgICAgei9hLCBzdGFnZWQgdmVyc2lvbiBvZiB6L2MgaGFzIHNoYTFzdW0gbWF0Y2hpbmcgQjp6L2JfdjIsCisjICAgICAgICAgICAgIHovY35IRUFEIHdpdGggY29udGVudHMgb2YgQjp6L2JfdjIsCisjICAgICAgICAgICAgIHovYyB3aXRoIHVuY29tbWl0dGVkIG1vZHMgb24gdG9wIG9mIEE6ei9jX3YxCisKK3Rlc3Rfc2V0dXBfMTFhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDExYSAmJgorCSgKKwkJY2QgMTFhICYmCisKKwkJbWtkaXIgeiAmJgorCQllY2hvIGEgPnovYSAmJgorCQl0ZXN0X3NlcSAxIDEwID56L2IgJiYKKwkJZ2l0IGFkZCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHovYiB6L2MgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyAxMSA+PnovYiAmJgorCQlnaXQgYWRkIHovYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYTogQXZvaWQgbG9zaW5nIGRpcnR5IGNvbnRlbnRzIHdpdGggc2ltcGxlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTFhICYmCisJKAorCQljZCAxMWEgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCWVjaG8gc3R1ZmYgPj56L2MgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJSZWZ1c2luZyB0byBsb3NlIGRpcnR5IGZpbGUgYXQgei9jIiBvdXQgJiYKKworCQl0ZXN0X3NlcSAxIDEwID5leHBlY3RlZCAmJgorCQllY2hvIHN0dWZmID4+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgei9jICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjA6ei9hIDoyOnovYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9hICBCOnovYiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IHovY35IRUFEID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBCOnovYiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgMTFiLCBBdm9pZCBsb3NpbmcgZGlydHkgZmlsZSBpbnZvbHZlZCBpbiBkaXJlY3RvcnkgcmVuYW1lCisjICAgQ29tbWl0IE86IHovYSwgICAgICAgICB4L3tiLGNfdjF9CisjICAgQ29tbWl0IEE6IHove2EsY192MX0sICB4L2IsICAgICAgIGFuZCB6L2NfdjEgaGFzIHVuY29tbWl0dGVkIG1vZHMKKyMgICBDb21taXQgQjogeS9hLCAgICAgICAgIHgve2IsY192Mn0KKyMgICBFeHBlY3RlZDogeS97YSxjX3YyfSwgeC9iLCB6L2NfdjEgd2l0aCB1bmNvbW1pdHRlZCBtb2RzIHVudHJhY2tlZCwKKyMgICAgICAgICAgICAgRVJST1JfTVNHKFJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB6L2MpCisKKwordGVzdF9zZXR1cF8xMWIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTFiICYmCisJKAorCQljZCAxMWIgJiYKKworCQlta2RpciB6IHggJiYKKwkJZWNobyBhID56L2EgJiYKKwkJZWNobyBiID54L2IgJiYKKwkJdGVzdF9zZXEgMSAxMCA+eC9jICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHgvYyB6L2MgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHogeSAmJgorCQllY2hvIDExID4+eC9jICYmCisJCWdpdCBhZGQgeC9jICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFiOiBBdm9pZCBsb3NpbmcgZGlydHkgZmlsZSBpbnZvbHZlZCBpbiBkaXJlY3RvcnkgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF8xMWIgJiYKKwkoCisJCWNkIDExYiAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJZWNobyBzdHVmZiA+PnovYyAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB6L2MiIG91dCAmJgorCisJCWdyZXAgLXEgc3R1ZmYgei9jICYmCisJCXRlc3Rfc2VxIDEgMTAgPmV4cGVjdGVkICYmCisJCWVjaG8gc3R1ZmYgPj5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCB6L2MgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW0gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp4L2IgOjA6eS9hIDowOnkvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86eC9iICBPOnovYSAgQjp4L2MgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCB5L2MgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlIEI6eC9jID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSAxMWMsIEF2b2lkIGxvc2luZyBub3QtdXAtdG8tZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdAorIyAgIENvbW1pdCBPOiB5L2EsICAgICAgICAgeC97YixjX3YxfQorIyAgIENvbW1pdCBBOiB5L3thLGNfdjF9LCAgeC9iLCAgICAgICBhbmQgeS9jX3YxIGhhcyB1bmNvbW1pdHRlZCBtb2RzCisjICAgQ29tbWl0IEI6IHkve2EsYy9kfSwgICB4L3tiLGNfdjJ9CisjICAgRXhwZWN0ZWQ6IEFib3J0X21zZygiZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlIikgKworIyAgICAgICAgICAgICB5L2MgbGVmdCB1bnRvdWNoZWQgKHN0aWxsIGhhcyB1bmNvbW1pdHRlZCBtb2RzKQorCit0ZXN0X3NldHVwXzExYyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMWMgJiYKKwkoCisJCWNkIDExYyAmJgorCisJCW1rZGlyIHkgeCAmJgorCQllY2hvIGEgPnkvYSAmJgorCQllY2hvIGIgPngvYiAmJgorCQl0ZXN0X3NlcSAxIDEwID54L2MgJiYKKwkJZ2l0IGFkZCB5IHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgeC9jIHkvYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlta2RpciB5L2MgJiYKKwkJZWNobyBkID55L2MvZCAmJgorCQllY2hvIDExID4+eC9jICYmCisJCWdpdCBhZGQgeC9jIHkvYy9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFjOiBBdm9pZCBsb3Npbmcgbm90LXVwdG9kYXRlIHdpdGggcmVuYW1lICsgRC9GIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF8xMWMgJiYKKwkoCisJCWNkIDExYyAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJZWNobyBzdHVmZiA+PnkvYyAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgImZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZSIgZXJyICYmCisKKwkJZ3JlcCAtcSBzdHVmZiB5L2MgJiYKKwkJdGVzdF9zZXEgMSAxMCA+ZXhwZWN0ZWQgJiYKKwkJZWNobyBzdHVmZiA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIHkvYyAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtdSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0ICYmCisJCWdpdCBscy1maWxlcyAtbyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgb3V0CisJKQorJworCisjIFRlc3RjYXNlIDExZCwgQXZvaWQgbG9zaW5nIG5vdC11cC10by1kYXRlIHdpdGggcmVuYW1lICsgRC9GIGNvbmZsaWN0CisjICAgQ29tbWl0IE86IHovYSwgICAgICAgICB4L3tiLGNfdjF9CisjICAgQ29tbWl0IEE6IHove2EsY192MX0sICB4L2IsICAgICAgIGFuZCB6L2NfdjEgaGFzIHVuY29tbWl0dGVkIG1vZHMKKyMgICBDb21taXQgQjogeS97YSxjL2R9LCAgIHgve2IsY192Mn0KKyMgICBFeHBlY3RlZDogRC9GOiB5L2NfdjIgdnMgeS9jL2QpICsKKyMgICAgICAgICAgICAgV2FybmluZ19Nc2coIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB6L2MpICsKKyMgICAgICAgICAgICAgeS97YSxjfkhFQUQsYy9kfSwgeC9iLCBub3ctdW50cmFja2VkIHovY192MSB3aXRoIHVuY29tbWl0dGVkIG1vZHMKKwordGVzdF9zZXR1cF8xMWQgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTFkICYmCisJKAorCQljZCAxMWQgJiYKKworCQlta2RpciB6IHggJiYKKwkJZWNobyBhID56L2EgJiYKKwkJZWNobyBiID54L2IgJiYKKwkJdGVzdF9zZXEgMSAxMCA+eC9jICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHgvYyB6L2MgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHogeSAmJgorCQlta2RpciB5L2MgJiYKKwkJZWNobyBkID55L2MvZCAmJgorCQllY2hvIDExID4+eC9jICYmCisJCWdpdCBhZGQgeC9jIHkvYy9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFkOiBBdm9pZCBsb3Npbmcgbm90LXVwdG9kYXRlIHdpdGggcmVuYW1lICsgRC9GIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF8xMWQgJiYKKwkoCisJCWNkIDExZCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJZWNobyBzdHVmZiA+PnovYyAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIlJlZnVzaW5nIHRvIGxvc2UgZGlydHkgZmlsZSBhdCB6L2MiIG91dCAmJgorCisJCWdyZXAgLXEgc3R1ZmYgei9jICYmCisJCXRlc3Rfc2VxIDEgMTAgPmV4cGVjdGVkICYmCisJCWVjaG8gc3R1ZmYgPj5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCB6L2MgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIG91dCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQk6MDp4L2IgOjA6eS9hIDowOnkvYy9kIDozOnkvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86eC9iICBPOnovYSAgQjp5L2MvZCAgQjp4L2MgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCB5L2N+SEVBRCA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgQjp4L2MgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCisjIFRlc3RjYXNlIDExZSwgQXZvaWQgZGVsZXRpbmcgbm90LXVwLXRvLWRhdGUgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQKKyMgICBDb21taXQgTzogei97YSxifSwgICAgICB4L3tjXzEsZH0KKyMgICBDb21taXQgQTogeS97YSxiLGNfMn0sICB4L2QsIHcvY18xLCBhbmQgeS9jXzIgaGFzIHVuY29tbWl0dGVkIG1vZHMKKyMgICBDb21taXQgQjogei97YSxiLGNfMX0sICB4L2QKKyMgICBFeHBlY3RlZDogRmFpbGVkIE1lcmdlOyB5L3thLGJ9ICsgeC9kICsKKyMgICAgICAgICAgICAgQ09ORkxJQ1QocmVuYW1lL3JlbmFtZSkgeC9jXzEgLT4gdy9jXzEgdnMgeS9jXzEgKworIyAgICAgICAgICAgICBFUlJPUl9NU0coUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IHkvYykKKyMgICAgICAgICAgICAgeS9jfkJeMCBoYXMgTzp4L2NfMSBjb250ZW50cworIyAgICAgICAgICAgICB5L2N+SEVBRCBoYXMgQTp5L2NfMiBjb250ZW50cworIyAgICAgICAgICAgICB5L2MgaGFzIGRpcnR5IGZpbGUgZnJvbSBiZWZvcmUgbWVyZ2UKKwordGVzdF9zZXR1cF8xMWUgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTFlICYmCisJKAorCQljZCAxMWUgJiYKKworCQlta2RpciB6IHggJiYKKwkJZWNobyBhID56L2EgJiYKKwkJZWNobyBiID56L2IgJiYKKwkJZWNobyBjID54L2MgJiYKKwkJZWNobyBkID54L2QgJiYKKwkJZ2l0IGFkZCB6IHggJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgei8geS8gJiYKKwkJZWNobyBkaWZmZXJlbnQgPnkvYyAmJgorCQlta2RpciB3ICYmCisJCWdpdCBtdiB4L2Mgdy8gJiYKKwkJZ2l0IGFkZCB5L2MgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IHgvYyB6LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZTogQXZvaWQgZGVsZXRpbmcgbm90LXVwdG9kYXRlIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkJyAnCisJdGVzdF9zZXR1cF8xMWUgJiYKKwkoCisJCWNkIDExZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJZWNobyBtb2RzID4+eS9jICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IHkvYyIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQllY2hvIGRpZmZlcmVudCA+ZXhwZWN0ZWQgJiYKKwkJZWNobyBtb2RzID4+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgeS9jICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYSA6MDp5L2IgOjA6eC9kIDoxOngvYyA6Mjp3L2MgOjI6eS9jIDozOnkvYyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9hICBPOnovYiAgTzp4L2QgIE86eC9jICBPOngvYyAgQTp5L2MgIE86eC9jICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFNlZSBpZiB5L2N+bWVyZ2VkIGhhcyBleHBlY3RlZCBjb250ZW50czsgcmVxdWlyZXMgbWFudWFsbHkKKwkJIyBkb2luZyB0aGUgZXhwZWN0ZWQgZmlsZSBtZXJnZQorCQlnaXQgY2F0LWZpbGUgLXAgQTp5L2MgPmMxICYmCisJCWdpdCBjYXQtZmlsZSAtcCBCOnovYyA+YzIgJiYKKwkJPmVtcHR5ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJCS1MICJIRUFEIiBcCisJCQktTCAiIiBcCisJCQktTCAiQl4wIiBcCisJCQljMSBlbXB0eSBjMiAmJgorCQl0ZXN0X2NtcCBjMSB5L2N+bWVyZ2VkCisJKQorJworCisjIFRlc3RjYXNlIDExZiwgQXZvaWQgZGVsZXRpbmcgbm90LXVwLXRvLWRhdGUgdy8gZGlyIHJlbmFtZS9yZW5hbWUoMnRvMSkKKyMgICBDb21taXQgTzogei97YSxifSwgICAgICAgIHgve2NfMSxkXzJ9CisjICAgQ29tbWl0IEE6IHkve2EsYix3aGFtXzF9LCB4L2RfMiwgZXhjZXB0IHkvd2hhbSBoYXMgdW5jb21taXR0ZWQgbW9kcworIyAgIENvbW1pdCBCOiB6L3thLGIsd2hhbV8yfSwgeC9jXzEKKyMgICBFeHBlY3RlZDogRmFpbGVkIE1lcmdlOyB5L3thLGJ9ICsgdW50cmFja2VkIHkve3doYW1+bWVyZ2VkfSArCisjICAgICAgICAgICAgIHkvd2hhbSB3aXRoIGRpcnR5IGNoYW5nZXMgZnJvbSBiZWZvcmUgbWVyZ2UgKworIyAgICAgICAgICAgICBDT05GTElDVChyZW5hbWUvcmVuYW1lKSB4L2MgdnMgeC9kIC0+IHkvd2hhbQorIyAgICAgICAgICAgICBFUlJPUl9NU0coUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IHkvd2hhbSkKKwordGVzdF9zZXR1cF8xMWYgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTFmICYmCisJKAorCQljZCAxMWYgJiYKKworCQlta2RpciB6IHggJiYKKwkJZWNobyBhID56L2EgJiYKKwkJZWNobyBiID56L2IgJiYKKwkJdGVzdF9zZXEgMSAxMCA+eC9jICYmCisJCWVjaG8gZCA+eC9kICYmCisJCWdpdCBhZGQgeiB4ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHovIHkvICYmCisJCWdpdCBtdiB4L2MgeS93aGFtICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiB4L2Qgei93aGFtICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFmOiBBdm9pZCBkZWxldGluZyBub3QtdXB0b2RhdGUgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgydG8xKScgJworCXRlc3Rfc2V0dXBfMTFmICYmCisJKAorCQljZCAxMWYgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCWVjaG8gaW1wb3J0YW50ID4+eS93aGFtICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IHkvd2hhbSIgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKworCQl0ZXN0X3NlcSAxIDEwID5leHBlY3RlZCAmJgorCQllY2hvIGltcG9ydGFudCA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIHkvd2hhbSAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6eS93aGFtICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCTowOnkvYSA6MDp5L2IgOjI6eS93aGFtIDozOnkvd2hhbSAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJIE86ei9hICBPOnovYiAgTzp4L2MgICAgIE86eC9kICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIFRlc3QgdGhhdCB0aGUgdHdvLXdheSBtZXJnZSBpbiB5L3doYW1+bWVyZ2VkIGlzIGFzIGV4cGVjdGVkCisJCWdpdCBjYXQtZmlsZSAtcCA6Mjp5L3doYW0gPmV4cGVjdCAmJgorCQlnaXQgY2F0LWZpbGUgLXAgOjM6eS93aGFtID5vdGhlciAmJgorCQk+ZW1wdHkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgXAorCQkJLUwgIkhFQUQiIFwKKwkJCS1MICIiIFwKKwkJCS1MICJCXjAiIFwKKwkJCWV4cGVjdCBlbXB0eSBvdGhlciAmJgorCQl0ZXN0X2NtcCBleHBlY3QgeS93aGFtfm1lcmdlZAorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gMTI6IEV2ZXJ5dGhpbmcgZWxzZQorIworIyBUZXN0cyBzdWdnZXN0ZWQgYnkgb3RoZXJzLiAgVGVzdHMgYWRkZWQgYWZ0ZXIgaW1wbGVtZW50YXRpb24gY29tcGxldGVkCisjIGFuZCBzdWJtaXR0ZWQuICBHcmFiIGJhZy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRlc3RjYXNlIDEyYSwgTW92aW5nIG9uZSBkaXJlY3RvcnkgaGllcmFyY2h5IGludG8gYW5vdGhlcgorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDlhKQorIyAgIENvbW1pdCBPOiBub2RlMS97bGVhZjEsbGVhZjJ9LCBub2RlMi97bGVhZjMsbGVhZjR9CisjICAgQ29tbWl0IEE6IG5vZGUxL3tsZWFmMSxsZWFmMixub2RlMi97bGVhZjMsbGVhZjR9fQorIyAgIENvbW1pdCBCOiBub2RlMS97bGVhZjEsbGVhZjIsbGVhZjV9LCBub2RlMi97bGVhZjMsbGVhZjQsbGVhZjZ9CisjICAgRXhwZWN0ZWQ6IG5vZGUxL3tsZWFmMSxsZWFmMixsZWFmNSxub2RlMi97bGVhZjMsbGVhZjQsbGVhZjZ9fQorCit0ZXN0X3NldHVwXzEyYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMmEgJiYKKwkoCisJCWNkIDEyYSAmJgorCisJCW1rZGlyIC1wIG5vZGUxIG5vZGUyICYmCisJCWVjaG8gbGVhZjEgPm5vZGUxL2xlYWYxICYmCisJCWVjaG8gbGVhZjIgPm5vZGUxL2xlYWYyICYmCisJCWVjaG8gbGVhZjMgPm5vZGUyL2xlYWYzICYmCisJCWVjaG8gbGVhZjQgPm5vZGUyL2xlYWY0ICYmCisJCWdpdCBhZGQgbm9kZTEgbm9kZTIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgbm9kZTIvIG5vZGUxLyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQllY2hvIGxlYWY1ID5ub2RlMS9sZWFmNSAmJgorCQllY2hvIGxlYWY2ID5ub2RlMi9sZWFmNiAmJgorCQlnaXQgYWRkIG5vZGUxIG5vZGUyICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJhOiBNb3Zpbmcgb25lIGRpcmVjdG9yeSBoaWVyYXJjaHkgaW50byBhbm90aGVyJyAnCisJdGVzdF9zZXR1cF8xMmEgJiYKKwkoCisJCWNkIDEyYSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA2IG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOm5vZGUxL2xlYWYxIEhFQUQ6bm9kZTEvbGVhZjIgSEVBRDpub2RlMS9sZWFmNSBcCisJCQlIRUFEOm5vZGUxL25vZGUyL2xlYWYzIFwKKwkJCUhFQUQ6bm9kZTEvbm9kZTIvbGVhZjQgXAorCQkJSEVBRDpub2RlMS9ub2RlMi9sZWFmNiAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzpub2RlMS9sZWFmMSAgICBPOm5vZGUxL2xlYWYyICAgIEI6bm9kZTEvbGVhZjUgXAorCQkJTzpub2RlMi9sZWFmMyBcCisJCQlPOm5vZGUyL2xlYWY0IFwKKwkJCUI6bm9kZTIvbGVhZjYgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSAxMmIsIE1vdmluZyB0d28gZGlyZWN0b3J5IGhpZXJhcmNoaWVzIGludG8gZWFjaCBvdGhlcgorIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlcyAxYyBhbmQgMTJjKQorIyAgIENvbW1pdCBPOiBub2RlMS97bGVhZjEsIGxlYWYyfSwgbm9kZTIve2xlYWYzLCBsZWFmNH0KKyMgICBDb21taXQgQTogbm9kZTEve2xlYWYxLCBsZWFmMiwgbm9kZTIve2xlYWYzLCBsZWFmNH19CisjICAgQ29tbWl0IEI6IG5vZGUyL3tsZWFmMywgbGVhZjQsIG5vZGUxL3tsZWFmMSwgbGVhZjJ9fQorIyAgIEV4cGVjdGVkOiBub2RlMS9ub2RlMi9ub2RlMS97bGVhZjEsIGxlYWYyfSwKKyMgICAgICAgICAgICAgbm9kZTIvbm9kZTEvbm9kZTIve2xlYWYzLCBsZWFmNH0KKyMgICBOT1RFOiBXaXRob3V0IGRpcmVjdG9yeSByZW5hbWVzLCB3ZSB3b3VsZCBleHBlY3QKKyMgICAgICAgICAgICAgICAgICAgbm9kZTIvbm9kZTEve2xlYWYxLCBsZWFmMn0sCisjICAgICAgICAgICAgICAgICAgIG5vZGUxL25vZGUyL3tsZWFmMywgbGVhZjR9CisjICAgICAgICAgd2l0aCBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiwgd2Ugbm90ZSB0aGF0CisjICAgICAgICAgICAgIGNvbW1pdCBBIHJlbmFtZXMgbm9kZTIvIC0+IG5vZGUxL25vZGUyLworIyAgICAgICAgICAgICBjb21taXQgQiByZW5hbWVzIG5vZGUxLyAtPiBub2RlMi9ub2RlMS8KKyMgICAgICAgICB0aGVyZWZvcmUsIGFwcGx5aW5nIHRob3NlIGRpcmVjdG9yeSByZW5hbWVzIHRvIHRoZSBpbml0aWFsIHJlc3VsdAorIyAgICAgICAgIChtYWtpbmcgYWxsIGZvdXIgcGF0aHMgZXhwZXJpZW5jZSBhIHRyYW5zaXRpdmUgcmVuYW1pbmcpLCB5aWVsZHMKKyMgICAgICAgICB0aGUgZXhwZWN0ZWQgcmVzdWx0LgorIworIyAgICAgICAgIFlvdSBtYXkgYXNrLCBpcyBpdCB3ZWlyZCB0byBoYXZlIHR3byBkaXJlY3RvcmllcyByZW5hbWUgZWFjaCBvdGhlcj8KKyMgICAgICAgICBUbyB3aGljaCwgSSBjYW4gZG8gbm8gbW9yZSB0aGFuIHNocnVnIG15IHNob3VsZGVycyBhbmQgc2F5IHRoYXQKKyMgICAgICAgICBldmVuIHNpbXBsZSBydWxlcyBnaXZlIHdlaXJkIHJlc3VsdHMgd2hlbiBnaXZlbiB3ZWlyZCBpbnB1dHMuCisKK3Rlc3Rfc2V0dXBfMTJiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEyYiAmJgorCSgKKwkJY2QgMTJiICYmCisKKwkJbWtkaXIgLXAgbm9kZTEgbm9kZTIgJiYKKwkJZWNobyBsZWFmMSA+bm9kZTEvbGVhZjEgJiYKKwkJZWNobyBsZWFmMiA+bm9kZTEvbGVhZjIgJiYKKwkJZWNobyBsZWFmMyA+bm9kZTIvbGVhZjMgJiYKKwkJZWNobyBsZWFmNCA+bm9kZTIvbGVhZjQgJiYKKwkJZ2l0IGFkZCBub2RlMSBub2RlMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiBub2RlMi8gbm9kZTEvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWdpdCBtdiBub2RlMS8gbm9kZTIvICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJiOiBNb3ZpbmcgdHdvIGRpcmVjdG9yeSBoaWVyYXJjaGllcyBpbnRvIGVhY2ggb3RoZXInICcKKwl0ZXN0X3NldHVwXzEyYiAmJgorCSgKKwkJY2QgMTJiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6bm9kZTEvbm9kZTIvbm9kZTEvbGVhZjEgXAorCQkJSEVBRDpub2RlMS9ub2RlMi9ub2RlMS9sZWFmMiBcCisJCQlIRUFEOm5vZGUyL25vZGUxL25vZGUyL2xlYWYzIFwKKwkJCUhFQUQ6bm9kZTIvbm9kZTEvbm9kZTIvbGVhZjQgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86bm9kZTEvbGVhZjEgXAorCQkJTzpub2RlMS9sZWFmMiBcCisJCQlPOm5vZGUyL2xlYWYzIFwKKwkJCU86bm9kZTIvbGVhZjQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUZXN0Y2FzZSAxMmMsIE1vdmluZyB0d28gZGlyZWN0b3J5IGhpZXJhcmNoaWVzIGludG8gZWFjaCBvdGhlciB3LyBjb250ZW50IG1lcmdlCisjICAgKFJlbGF0ZWQgdG8gdGVzdGNhc2UgMTJiKQorIyAgIENvbW1pdCBPOiBub2RlMS97ICAgICAgIGxlYWYxXzEsIGxlYWYyXzF9LCBub2RlMi97bGVhZjNfMSwgbGVhZjRfMX0KKyMgICBDb21taXQgQTogbm9kZTEveyAgICAgICBsZWFmMV8yLCBsZWFmMl8yLCAgbm9kZTIve2xlYWYzXzIsIGxlYWY0XzJ9fQorIyAgIENvbW1pdCBCOiBub2RlMi97bm9kZTEve2xlYWYxXzMsIGxlYWYyXzN9LCAgICAgICAgbGVhZjNfMywgbGVhZjRfM30KKyMgICBFeHBlY3RlZDogQ29udGVudCBtZXJnZSBjb25mbGljdHMgZm9yIGVhY2ggb2Y6CisjICAgICAgICAgICAgICAgbm9kZTEvbm9kZTIvbm9kZTEve2xlYWYxLCBsZWFmMn0sCisjICAgICAgICAgICAgICAgbm9kZTIvbm9kZTEvbm9kZTIve2xlYWYzLCBsZWFmNH0KKyMgICBOT1RFOiBUaGlzIGlzICpleGFjdGx5KiBsaWtlIDEyYywgZXhjZXB0IHRoYXQgZXZlcnkgcGF0aCBpcyBtb2RpZmllZCBvbgorIyAgICAgICAgIGVhY2ggc2lkZSBvZiB0aGUgbWVyZ2UuCisKK3Rlc3Rfc2V0dXBfMTJjICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEyYyAmJgorCSgKKwkJY2QgMTJjICYmCisKKwkJbWtkaXIgLXAgbm9kZTEgbm9kZTIgJiYKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG5sZWFmMVxuIiA+bm9kZTEvbGVhZjEgJiYKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG5sZWFmMlxuIiA+bm9kZTEvbGVhZjIgJiYKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG5sZWFmM1xuIiA+bm9kZTIvbGVhZjMgJiYKKwkJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG44XG5sZWFmNFxuIiA+bm9kZTIvbGVhZjQgJiYKKwkJZ2l0IGFkZCBub2RlMSBub2RlMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiBub2RlMi8gbm9kZTEvICYmCisJCWZvciBpIGluIGBnaXQgbHMtZmlsZXNgOyBkbyBlY2hvIHNpZGUgQSA+PiRpOyBkb25lICYmCisJCWdpdCBhZGQgLXUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IG5vZGUxLyBub2RlMi8gJiYKKwkJZm9yIGkgaW4gYGdpdCBscy1maWxlc2A7IGRvIGVjaG8gc2lkZSBCID4+JGk7IGRvbmUgJiYKKwkJZ2l0IGFkZCAtdSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYzogTW92aW5nIG9uZSBkaXJlY3RvcnkgaGllcmFyY2h5IGludG8gYW5vdGhlciB3LyBjb250ZW50IG1lcmdlJyAnCisJdGVzdF9zZXR1cF8xMmMgJiYKKwkoCisJCWNkIDEyYyAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXUgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxMiBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJOjE6bm9kZTEvbm9kZTIvbm9kZTEvbGVhZjEgXAorCQkJOjE6bm9kZTEvbm9kZTIvbm9kZTEvbGVhZjIgXAorCQkJOjE6bm9kZTIvbm9kZTEvbm9kZTIvbGVhZjMgXAorCQkJOjE6bm9kZTIvbm9kZTEvbm9kZTIvbGVhZjQgXAorCQkJOjI6bm9kZTEvbm9kZTIvbm9kZTEvbGVhZjEgXAorCQkJOjI6bm9kZTEvbm9kZTIvbm9kZTEvbGVhZjIgXAorCQkJOjI6bm9kZTIvbm9kZTEvbm9kZTIvbGVhZjMgXAorCQkJOjI6bm9kZTIvbm9kZTEvbm9kZTIvbGVhZjQgXAorCQkJOjM6bm9kZTEvbm9kZTIvbm9kZTEvbGVhZjEgXAorCQkJOjM6bm9kZTEvbm9kZTIvbm9kZTEvbGVhZjIgXAorCQkJOjM6bm9kZTIvbm9kZTEvbm9kZTIvbGVhZjMgXAorCQkJOjM6bm9kZTIvbm9kZTEvbm9kZTIvbGVhZjQgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86bm9kZTEvbGVhZjEgXAorCQkJTzpub2RlMS9sZWFmMiBcCisJCQlPOm5vZGUyL2xlYWYzIFwKKwkJCU86bm9kZTIvbGVhZjQgXAorCQkJQTpub2RlMS9sZWFmMSBcCisJCQlBOm5vZGUxL2xlYWYyIFwKKwkJCUE6bm9kZTEvbm9kZTIvbGVhZjMgXAorCQkJQTpub2RlMS9ub2RlMi9sZWFmNCBcCisJCQlCOm5vZGUyL25vZGUxL2xlYWYxIFwKKwkJCUI6bm9kZTIvbm9kZTEvbGVhZjIgXAorCQkJQjpub2RlMi9sZWFmMyBcCisJCQlCOm5vZGUyL2xlYWY0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgMTJkLCBSZW5hbWUvbWVyZ2Ugb2Ygc3ViZGlyZWN0b3J5IGludG8gdGhlIHJvb3QKKyMgICBDb21taXQgTzogYS9iL3N1YmRpci9mb28KKyMgICBDb21taXQgQTogc3ViZGlyL2ZvbworIyAgIENvbW1pdCBCOiBhL2Ivc3ViZGlyL2ZvbywgYS9iL2JhcgorIyAgIEV4cGVjdGVkOiBzdWJkaXIvZm9vLCBiYXIKKwordGVzdF9zZXR1cF8xMmQgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTJkICYmCisJKAorCQljZCAxMmQgJiYKKworCQlta2RpciAtcCBhL2Ivc3ViZGlyICYmCisJCXRlc3RfY29tbWl0IGEvYi9zdWJkaXIvZm9vICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlta2RpciBzdWJkaXIgJiYKKwkJZ2l0IG12IGEvYi9zdWJkaXIvZm9vLnQgc3ViZGlyL2Zvby50ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3RfY29tbWl0IGEvYi9iYXIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyZDogUmVuYW1lL21lcmdlIHN1YmRpciBpbnRvIHRoZSByb290LCB2YXJpYW50IDEnICcKKwl0ZXN0X3NldHVwXzEyZCAmJgorCSgKKwkJY2QgMTJkICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCWdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0ICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIFwKKwkJCUhFQUQ6c3ViZGlyL2Zvby50ICAgSEVBRDpiYXIudCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzphL2Ivc3ViZGlyL2Zvby50ICBCOmEvYi9iYXIudCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGJhci50ID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBCOmEvYi9iYXIudCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YS9iL3N1YmRpci9mb28udCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YS9iL2Jhci50ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGEvICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGJhci50CisJKQorJworCisjIFRlc3RjYXNlIDEyZSwgUmVuYW1lL21lcmdlIG9mIHN1YmRpcmVjdG9yeSBpbnRvIHRoZSByb290CisjICAgQ29tbWl0IE86IGEvYi9mb28KKyMgICBDb21taXQgQTogZm9vCisjICAgQ29tbWl0IEI6IGEvYi9mb28sIGEvYi9iYXIKKyMgICBFeHBlY3RlZDogZm9vLCBiYXIKKwordGVzdF9zZXR1cF8xMmUgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTJlICYmCisJKAorCQljZCAxMmUgJiYKKworCQlta2RpciAtcCBhL2IgJiYKKwkJdGVzdF9jb21taXQgYS9iL2ZvbyAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJbWtkaXIgc3ViZGlyICYmCisJCWdpdCBtdiBhL2IvZm9vLnQgZm9vLnQgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJdGVzdF9jb21taXQgYS9iL2JhcgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJlOiBSZW5hbWUvbWVyZ2Ugc3ViZGlyIGludG8gdGhlIHJvb3QsIHZhcmlhbnQgMicgJworCXRlc3Rfc2V0dXBfMTJlICYmCisJKAorCQljZCAxMmUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDpmb28udCAgIEhFQUQ6YmFyLnQgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IFwKKwkJCU86YS9iL2Zvby50ICBCOmEvYi9iYXIudCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGJhci50ID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSBCOmEvYi9iYXIudCA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YS9iL2Zvby50ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDphL2IvYmFyLnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYS8gJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyLnQKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDEzOiBDaGVja2luZyBpbmZvcm1hdGlvbmFsIGFuZCBjb25mbGljdCBtZXNzYWdlcworIworIyBBIHllYXIgYWZ0ZXIgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gYmVjYW1lIHRoZSBkZWZhdWx0LCBpdCB3YXMKKyMgaW5zdGVhZCBkZWNpZGVkIHRvIHJlcG9ydCBjb25mbGljdHMgb24gdGhlIHBhdGhuYW1lIG9uIHRoZSBiYXNpcyB0aGF0CisjIHNvbWUgdXNlcnMgbWF5IGV4cGVjdCB0aGUgbmV3IGZpbGVzIGFkZGVkIG9yIG1vdmVkIGludG8gYSBkaXJlY3RvcnkgdG8KKyMgYmUgdW5yZWxhdGVkIHRvIGFsbCB0aGUgb3RoZXIgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnksIGFuZCB0aHVzIHRoYXQKKyMgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaXMgdW5leHBlY3RlZC4gIFRlc3QgdGhhdCB0aGUgbWVzc2FnZXMgcHJpbnRlZAorIyBtYXRjaCBvdXIgZXhwZWN0YXRpb24uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSAxM2EsIEJhc2ljIGRpcmVjdG9yeSByZW5hbWUgd2l0aCBuZXdseSBhZGRlZCBmaWxlcworIyAgIENvbW1pdCBPOiB6L3tiLGN9CisjICAgQ29tbWl0IEE6IHkve2IsY30KKyMgICBDb21taXQgQjogei97YixjLGQsZS9mfQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZCxlL2Z9LCB3aXRoIG5vdGljZXMvY29uZmxpY3RzIGZvciBib3RoIHkvZCBhbmQgeS9lL2YKKwordGVzdF9zZXR1cF8xM2EgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTNhXyQxICYmCisJKAorCQljZCAxM2FfJDEgJiYKKworCQlta2RpciB6ICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyBkID56L2QgJiYKKwkJbWtkaXIgei9lICYmCisJCWVjaG8gZiA+ei9lL2YgJiYKKwkJZ2l0IGFkZCB6L2Qgei9lL2YgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2EoY29uZmxpY3QpOiBtZXNzYWdlcyBmb3IgbmV3bHkgYWRkZWQgZmlsZXMnICcKKwl0ZXN0X3NldHVwXzEzYSBjb25mbGljdCAmJgorCSgKKwkJY2QgMTNhX2NvbmZsaWN0ICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X2kxOG5ncmVwIENPTkZMSUNULi5maWxlLmxvY2F0aW9uLip6L2UvZi5hZGRlZC5pbi5CXjAuKnkvZS9mIG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwIENPTkZMSUNULi5maWxlLmxvY2F0aW9uLip6L2QuYWRkZWQuaW4uQl4wLip5L2Qgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzID5wYXRocyAmJgorCQkhIGdyZXAgei8gcGF0aHMgJiYKKwkJZ3JlcCAieS9bZGVdIiBwYXRocyAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAgICB5L2QgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9lL2YgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgICAgeS9lL2YKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYShpbmZvKTogbWVzc2FnZXMgZm9yIG5ld2x5IGFkZGVkIGZpbGVzJyAnCisJdGVzdF9zZXR1cF8xM2EgaW5mbyAmJgorCSgKKwkJY2QgMTNhX2luZm8gJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfaTE4bmdyZXAgUGF0aC51cGRhdGVkOi4qei9lL2YuYWRkZWQuaW4uQl4wLip5L2UvZiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCBQYXRoLnVwZGF0ZWQ6Lip6L2QuYWRkZWQuaW4uQl4wLip5L2Qgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzID5wYXRocyAmJgorCQkhIGdyZXAgei8gcGF0aHMgJiYKKwkJZ3JlcCAieS9bZGVdIiBwYXRocyAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAgICB5L2QgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9lL2YgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgICAgeS9lL2YKKwkpCisnCisKKyMgVGVzdGNhc2UgMTNiLCBUcmFuc2l0aXZlIHJlbmFtZSB3aXRoIGNvbmZsaWN0ZWQgY29udGVudCBtZXJnZSBhbmQgZGVmYXVsdAorIyAgICAgICAgICAgICAgICJjb25mbGljdCIgc2V0dGluZworIyAgIChSZWxhdGVkIHRvIHRlc3RjYXNlIDFjLCA5YikKKyMgICBDb21taXQgTzogei97YixjfSwgICB4L2RfMQorIyAgIENvbW1pdCBBOiB5L3tiLGN9LCAgIHgvZF8yCisjICAgQ29tbWl0IEI6IHove2IsYyxkXzN9CisjICAgRXhwZWN0ZWQ6IHkve2IsYyxkX21lcmdlZH0sIHdpdGggdHdvIGNvbmZsaWN0IG1lc3NhZ2VzIGZvciB5L2QsCisjICAgICAgICAgICAgIG9uZSBhYm91dCBjb250ZW50LCBhbmQgb25lIGFib3V0IGZpbGUgbG9jYXRpb24KKwordGVzdF9zZXR1cF8xM2IgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTNiXyQxICYmCisJKAorCQljZCAxM2JfJDEgJiYKKworCQlta2RpciB4ICYmCisJCW1rZGlyIHogJiYKKwkJdGVzdF9zZXEgMSAxMCA+eC9kICYmCisJCWVjaG8gYiA+ei9iICYmCisJCWVjaG8gYyA+ei9jICYmCisJCWdpdCBhZGQgeCB6ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IHogeSAmJgorCQllY2hvIDExID4+eC9kICYmCisJCWdpdCBhZGQgeC9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCWVjaG8gZWxldmVuID4+eC9kICYmCisJCWdpdCBtdiB4L2Qgei9kICYmCisJCWdpdCBhZGQgei9kICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNiKGNvbmZsaWN0KTogbWVzc2FnZXMgZm9yIHRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29uZmxpY3RlZCBjb250ZW50JyAnCisJdGVzdF9zZXR1cF8xM2IgY29uZmxpY3QgJiYKKwkoCisJCWNkIDEzYl9jb25mbGljdCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4qY29udGVudC4qTWVyZ2UuY29uZmxpY3QuaW4ueS9kIG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwIENPTkZMSUNULi5maWxlLmxvY2F0aW9uLip4L2QucmVuYW1lZC50by56L2QuKm1vdmVkLnRvLnkvZCBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgPnBhdGhzICYmCisJCSEgZ3JlcCB6LyBwYXRocyAmJgorCQlncmVwICJ5L2QiIHBhdGhzICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgei9kICYmCisJCXRlc3RfcGF0aF9pc19maWxlICAgIHkvZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNiKGluZm8pOiBtZXNzYWdlcyBmb3IgdHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb25mbGljdGVkIGNvbnRlbnQnICcKKwl0ZXN0X3NldHVwXzEzYiBpbmZvICYmCisJKAorCQljZCAxM2JfaW5mbyAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9pMThuZ3JlcCBDT05GTElDVC4qY29udGVudC4qTWVyZ2UuY29uZmxpY3QuaW4ueS9kIG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwIFBhdGgudXBkYXRlZDouKngvZC5yZW5hbWVkLnRvLnovZC5pbi5CXjAuKm1vdmluZy5pdC50by55L2Qgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzID5wYXRocyAmJgorCQkhIGdyZXAgei8gcGF0aHMgJiYKKwkJZ3JlcCAieS9kIiBwYXRocyAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAgICB5L2QKKwkpCisnCisKKyMgVGVzdGNhc2UgMTNjLCBSZW5hbWUvcmVuYW1lKDF0bzEpIGR1ZSB0byBkaXJlY3RvcnkgcmVuYW1lCisjICAgQ29tbWl0IE86IHove2IsY30sICAgeC97ZCxlfQorIyAgIENvbW1pdCBBOiB5L3tiLGMsZH0sIHgvZQorIyAgIENvbW1pdCBCOiB6L3tiLGMsZH0sIHgvZQorIyAgIEV4cGVjdGVkOiB5L3tiLGMsZH0sIHdpdGggaW5mbyBvciBjb25mbGljdCBtZXNzYWdlcyBmb3IgZCAoCisjICAgICAgICAgICAgIEE6IHJlbmFtZWQgeC9kIC0+IHovZDsgQjogcmVuYW1lZCB6LyAtPiB5LyBBTkQgcmVuYW1lZCB4L2QgdG8geS9kCisjICAgICAgICAgICAgIE9uZSBjb3VsZCBhcmd1ZSBBIGhhZCBwYXJ0aWFsIGtub3dsZWRnZSBvZiB3aGF0IHdhcyBkb25lIHdpdGgKKyMgICAgICAgICAgICAgZCBhbmQgQiBoYWQgZnVsbCBrbm93bGVkZ2UsIGJ1dCB0aGF0J3MgYSBzbGlwcGVyeSBzbG9wZSBhcworIyAgICAgICAgICAgICBzaG93biBpbiB0ZXN0Y2FzZSAxM2QuCisKK3Rlc3Rfc2V0dXBfMTNjICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzY18kMSAmJgorCSgKKwkJY2QgMTNjXyQxICYmCisKKwkJbWtkaXIgeCAmJgorCQlta2RpciB6ICYmCisJCXRlc3Rfc2VxIDEgMTAgPngvZCAmJgorCQllY2hvIGUgPngvZSAmJgorCQllY2hvIGIgPnovYiAmJgorCQllY2hvIGMgPnovYyAmJgorCQlnaXQgYWRkIHggeiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCWdpdCBtdiB6IHkgJiYKKwkJZ2l0IG12IHgvZCB5LyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgeC9kIHovZCAmJgorCQlnaXQgYWRkIHovZCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYyhjb25mbGljdCk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSB0cmFuc2l0aXZlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTNjIGNvbmZsaWN0ICYmCisJKAorCQljZCAxM2NfY29uZmxpY3QgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfaTE4bmdyZXAgQ09ORkxJQ1QuLmZpbGUubG9jYXRpb24uKngvZC5yZW5hbWVkLnRvLnovZC4qbW92ZWQudG8ueS9kIG91dCAmJgorCisJCWdpdCBscy1maWxlcyA+cGF0aHMgJiYKKwkJISBncmVwIHovIHBhdGhzICYmCisJCWdyZXAgInkvZCIgcGF0aHMgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB6L2QgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgICAgeS9kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2MoaW5mbyk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSB0cmFuc2l0aXZlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTNjIGluZm8gJiYKKwkoCisJCWNkIDEzY19pbmZvICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X2kxOG5ncmVwIFBhdGgudXBkYXRlZDouKngvZC5yZW5hbWVkLnRvLnovZC5pbi5CXjAuKm1vdmluZy5pdC50by55L2Qgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzID5wYXRocyAmJgorCQkhIGdyZXAgei8gcGF0aHMgJiYKKwkJZ3JlcCAieS9kIiBwYXRocyAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHovZCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAgICB5L2QKKwkpCisnCisKKyMgVGVzdGNhc2UgMTNkLCBSZW5hbWUvcmVuYW1lKDF0bzEpIGR1ZSB0byBkaXJlY3RvcnkgcmVuYW1lIG9uIGJvdGggc2lkZXMKKyMgICBDb21taXQgTzogYS97eix5fSwgYi94LCAgICAgYy93CisjICAgQ29tbWl0IEE6IGEveiwgICAgIGIve3kseH0sIGQvdworIyAgIENvbW1pdCBCOiBhL3osICAgICBkL3gsICAgICBjL3t5LHd9CisjICAgRXhwZWN0ZWQ6IGEveiwgZC97eSx4LHd9IHdpdGggbm8gZmlsZSBsb2NhdGlvbiBjb25mbGljdCBmb3IgeAorIyAgICAgICAgICAgICBFYXN5IGNhc2VzOgorIyAgICAgICAgICAgICAgICogeiBpcyBhbHdheXMgaW4gYTsgc28gaXQgc3RheXMgaW4gYS4KKyMgICAgICAgICAgICAgICAqIHggc3RhcnRzIGluIGIsIG9ubHkgbW9kaWZpZWQgb24gb25lIHNpZGUgdG8gbW92ZSBpbnRvIGQvCisjICAgICAgICAgICAgICAgKiB3IHN0YXJ0cyBpbiBjLCBvbmx5IG1vZGlmaWVkIG9uIG9uZSBzaWRlIHRvIG1vdmUgaW50byBkLworIyAgICAgICAgICAgICBIYXJkIGNhc2U6CisjICAgICAgICAgICAgICAgKiBBIHJlbmFtZXMgYS95IHRvIGIveSwgYW5kIEIgcmVuYW1lcyBiLy0+ZC8gPT4gYS95IC0+IGQveQorIyAgICAgICAgICAgICAgICogQiByZW5hbWVzIGEveSB0byBjL3ksIGFuZCBBIHJlbmFtZXMgYy8tPmQvID0+IGEveSAtPiBkL3kKKyMgICAgICAgICAgICAgICBObyBjb25mbGljdCBpbiB3aGVyZSBhL3kgZW5kcyB1cCwgc28gcHV0IGl0IGluIGQveS4KKwordGVzdF9zZXR1cF8xM2QgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTNkXyQxICYmCisJKAorCQljZCAxM2RfJDEgJiYKKworCQlta2RpciBhICYmCisJCW1rZGlyIGIgJiYKKwkJbWtkaXIgYyAmJgorCQllY2hvIHogPmEveiAmJgorCQllY2hvIHkgPmEveSAmJgorCQllY2hvIHggPmIveCAmJgorCQllY2hvIHcgPmMvdyAmJgorCQlnaXQgYWRkIGEgYiBjICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJZ2l0IG12IGEveSBiLyAmJgorCQlnaXQgbXYgYy8gZC8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IGEveSBjLyAmJgorCQlnaXQgbXYgYi8gZC8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2QoY29uZmxpY3QpOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgZHVhbCB0cmFuc2l0aXZlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTNkIGNvbmZsaWN0ICYmCisJKAorCQljZCAxM2RfY29uZmxpY3QgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfaTE4bmdyZXAgQ09ORkxJQ1QuLmZpbGUubG9jYXRpb24uKmEveS5yZW5hbWVkLnRvLmIveS4qbW92ZWQudG8uZC95IG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwIENPTkZMSUNULi5maWxlLmxvY2F0aW9uLiphL3kucmVuYW1lZC50by5jL3kuKm1vdmVkLnRvLmQveSBvdXQgJiYKKworCQlnaXQgbHMtZmlsZXMgPnBhdGhzICYmCisJCSEgZ3JlcCBiLyBwYXRocyAmJgorCQkhIGdyZXAgYy8gcGF0aHMgJiYKKwkJZ3JlcCAiZC95IiBwYXRocyAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIveSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBjL3kgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgICAgZC95CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2QoaW5mbyk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSBkdWFsIHRyYW5zaXRpdmUgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF8xM2QgaW5mbyAmJgorCSgKKwkJY2QgMTNkX2luZm8gJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfaTE4bmdyZXAgUGF0aC51cGRhdGVkLiphL3kucmVuYW1lZC50by5iL3kuKm1vdmluZy5pdC50by5kL3kgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgUGF0aC51cGRhdGVkLiphL3kucmVuYW1lZC50by5jL3kuKm1vdmluZy5pdC50by5kL3kgb3V0ICYmCisKKwkJZ2l0IGxzLWZpbGVzID5wYXRocyAmJgorCQkhIGdyZXAgYi8gcGF0aHMgJiYKKwkJISBncmVwIGMvIHBhdGhzICYmCisJCWdyZXAgImQveSIgcGF0aHMgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiL3kgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYy95ICYmCisJCXRlc3RfcGF0aF9pc19maWxlICAgIGQveQorCSkKKycKKworIyBUZXN0Y2FzZSAxM2UsIGRpcmVjdG9yeSByZW5hbWUgaW4gdmlydHVhbCBtZXJnZSBiYXNlCisjCisjIFRoaXMgdGVzdGNhc2UgaGFzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHNldHVwIHRoYW4gYWxsIHRoZSBhYm92ZSBjYXNlcywgaW4KKyMgb3JkZXIgdG8gaW5jbHVkZSBhIHJlY3Vyc2l2ZSBjYXNlOgorIworIyAgICAgIEEgICBDCisjICAgICAgbyAtIG8KKyMgICAgIC8gXCAvIFwKKyMgIE8gbyAgIFggICA/CisjICAgICBcIC8gXCAvCisjICAgICAgbyAgIG8KKyMgICAgICBCICAgRAorIworIyAgIENvbW1pdCBPOiBhL3t6LHl9CisjICAgQ29tbWl0IEE6IGIve3oseX0KKyMgICBDb21taXQgQjogYS97eix5LHh9CisjICAgQ29tbWl0IEM6IGIve3oseSx4fQorIyAgIENvbW1pdCBEOiBiL3t6LHl9LCBhL3gKKyMgICBFeHBlY3RlZDogYi97eix5LHh9ICAoc29ydCBvZjsgc2VlIGJlbG93IGZvciB3aHkgdGhpcyBtaWdodCBub3QgYmUgZXhwZWN0ZWQpCisjCisjICAgTk9URVM6ICdYJyByZXByZXNlbnRzIGEgdmlydHVhbCBtZXJnZSBiYXNlLiAgV2l0aCB0aGUgZGVmYXVsdCBvZgorIyAgICAgICAgICBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiB5aWVsZGluZyBjb25mbGljdHMsIG1lcmdpbmcgQSBhbmQgQgorIyAgICAgICAgICByZXN1bHRzIGluIGEgY29uZmxpY3QgY29tcGxhaW5pbmcgYWJvdXQgd2hldGhlciAneCcgc2hvdWxkIGJlCisjICAgICAgICAgIHVuZGVyICdhLycgb3IgJ2IvJy4gIEhvd2V2ZXIsIHdoZW4gY3JlYXRpbmcgdGhlIHZpcnR1YWwgbWVyZ2UKKyMgICAgICAgICAgYmFzZSAnWCcsIHNpbmNlIHZpcnR1YWwgbWVyZ2UgYmFzZXMgbmVlZCB0byBiZSB3cml0dGVuIG91dCBhcyBhCisjICAgICAgICAgIHRyZWUsIHdlIGNhbm5vdCBoYXZlIGEgY29uZmxpY3QsIHNvIHNvbWUgcmVzb2x1dGlvbiBoYXMgdG8gYmUKKyMgICAgICAgICAgcGlja2VkLgorIworIyAgICAgICAgICBJbiBjaG9vc2luZyB0aGUgcmlnaHQgcmVzb2x1dGlvbiwgaXQncyB3b3J0aCBub3RpbmcgaGVyZSB0aGF0CisjICAgICAgICAgIGNvbW1pdHMgQyAmIEQgYXJlIG1lcmdlcyBvZiBBICYgQiB0aGF0IGNob29zZSBkaWZmZXJlbnQKKyMgICAgICAgICAgbG9jYXRpb25zIGZvciAneCcgKGkuZS4gdGhleSByZXNvbHZlIHRoZSBjb25mbGljdCBkaWZmZXJlbnRseSksCisjICAgICAgICAgIGFuZCBzbyBpdCB3b3VsZCBiZSBuaWNlIHdoZW4gbWVyZ2luZyBDICYgRCBpZiBnaXQgY291bGQgZGV0ZWN0CisjICAgICAgICAgIHRoaXMgZGlmZmVyZW5jZSBvZiBvcGluaW9uIGFuZCByZXBvcnQgYSBjb25mbGljdC4gIEJ1dCB0aGUgb25seQorIyAgICAgICAgICB3YXkgdG8gZG8gc28gdGhhdCBJIGNhbiB0aGluayBvZiB3b3VsZCBiZSB0byBoYXZlIHRoZSB2aXJ0dWFsCisjICAgICAgICAgIG1lcmdlIGJhc2UgcGxhY2UgJ3gnIGluIHNvbWUgZGlyZWN0b3J5IG90aGVyIHRoYW4gZWl0aGVyICdhLycgb3IKKyMgICAgICAgICAgJ2IvJywgd2hpY2ggc2VlbXMgYSBsaXR0bGUgd2VpcmQgLS0gZXNwZWNpYWxseSBzaW5jZSBpdCdkIHJlc3VsdAorIyAgICAgICAgICBpbiBhIHJlbmFtZS9yZW5hbWUoMXRvMikgY29uZmxpY3Qgd2l0aCBhIHNvdXJjZSBwYXRoIHRoYXQgbmV2ZXIKKyMgICAgICAgICAgZXhpc3RlZCBpbiBhbnkgdmVyc2lvbi4KKyMKKyMgICAgICAgICAgU28sIGZvciBub3csIHdoZW4gZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaXMgc2V0IHRvCisjICAgICAgICAgICdjb25mbGljdCcganVzdCBhdm9pZCBkb2luZyBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBhdCBhbGwgaW4KKyMgICAgICAgICAgdGhlIHJlY3Vyc2l2ZSBjYXNlLiAgVGhpcyB3aWxsIG5vdCBhbGxvdyB1cyB0byBkZXRlY3QgYSBjb25mbGljdAorIyAgICAgICAgICBpbiB0aGUgb3V0ZXIgbWVyZ2UgZm9yIHRoaXMgc3BlY2lhbCBraW5kIG9mIHNldHVwLCBidXQgaXQgYXQKKyMgICAgICAgICAgbGVhc3QgYXZvaWRzIGhpdHRpbmcgYSBCVUcoKS4KKyMKK3Rlc3Rfc2V0dXBfMTNlICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzZSAmJgorCSgKKwkJY2QgMTNlICYmCisKKwkJbWtkaXIgYSAmJgorCQllY2hvIHogPmEveiAmJgorCQllY2hvIHkgPmEveSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgYS8gYi8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyB4ID5hL3ggJiYKKwkJZ2l0IGFkZCBhICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIiAmJgorCisJCWdpdCBicmFuY2ggQyBBICYmCisJCWdpdCBicmFuY2ggRCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9Y29uZmxpY3QgbWVyZ2UgQiAmJgorCQlnaXQgYWRkIGIveCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQyIgJiYKKworCisJCWdpdCBjaGVja291dCBEICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPWNvbmZsaWN0IG1lcmdlIEEgJiYKKwkJZ2l0IGFkZCBiL3ggJiYKKwkJbWtkaXIgYSAmJgorCQlnaXQgbXYgYi94IGEveCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRCIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzZTogZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaW4gcmVjdXJzaXZlIGNhc2UnICcKKwl0ZXN0X3NldHVwXzEzZSAmJgorCSgKKwkJY2QgMTNlICYmCisKKwkJZ2l0IGNoZWNrb3V0IC0tcXVpZXQgRF4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9Y29uZmxpY3QgbWVyZ2UgLXMgcmVjdXJzaXZlIENeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9pMThuZ3JlcCAhIENPTkZMSUNUIG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICEgQlVHOiBlcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAhIGNvcmUuZHVtcGVkIGVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisKKwkJZ2l0IGxzLWZpbGVzID5wYXRocyAmJgorCQkhIGdyZXAgYS94IHBhdGhzICYmCisJCWdyZXAgYi94IHBhdGhzCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNDQtbWVyZ2UtdW5yZWxhdGVkLWluZGV4LWNoYW5nZXMuc2ggYi90L3Q2MDQ0LW1lcmdlLXVucmVsYXRlZC1pbmRleC1jaGFuZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlMzc3OWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDQ0LW1lcmdlLXVucmVsYXRlZC1pbmRleC1jaGFuZ2VzLnNoCkBAIC0wLDAgKzEsMjE2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ibWVyZ2VzIHdpdGggdW5yZWxhdGVkIGluZGV4IGNoYW5nZXMiCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3RjYXNlIGZvciBzb21lIHNpbXBsZSBtZXJnZXMKKyMgICBBCisjICAgby0tLS0tLS1vIEIKKyMgICAgXAorIyAgICAgXC0tLS0tbyBDCisjICAgICAgXAorIyAgICAgICBcLS0tbyBECisjICAgICAgICBcCisjICAgICAgICAgXC1vIEUKKyMgICAgICAgICAgXAorIyAgICAgICAgICAgbyBGCisjICAgQ29tbWl0IEE6IHNvbWUgZmlsZSBhCisjICAgQ29tbWl0IEI6IGFkZHMgZmlsZSBiLCBtb2RpZmllcyBlbmQgb2YgYQorIyAgIENvbW1pdCBDOiBhZGRzIGZpbGUgYworIyAgIENvbW1pdCBEOiBhZGRzIGZpbGUgZCwgbW9kaWZpZXMgYmVnaW5uaW5nIG9mIGEKKyMgICBDb21taXQgRTogcmVuYW1lcyBhLT5zdWJkaXIvYSwgYWRkcyBzdWJkaXIvZQorIyAgIENvbW1pdCBGOiBlbXB0eSBjb21taXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdHJpdmlhbCBtZXJnZXMnICcKKwl0ZXN0X3NlcSAxIDEwID5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gQSAmJgorCisJZ2l0IGJyYW5jaCBBICYmCisJZ2l0IGJyYW5jaCBCICYmCisJZ2l0IGJyYW5jaCBDICYmCisJZ2l0IGJyYW5jaCBEICYmCisJZ2l0IGJyYW5jaCBFICYmCisJZ2l0IGJyYW5jaCBGICYmCisKKwlnaXQgY2hlY2tvdXQgQiAmJgorCWVjaG8gYiA+YiAmJgorCWVjaG8gMTEgPj5hICYmCisJZ2l0IGFkZCBhIGIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgQyAmJgorCWVjaG8gYyA+YyAmJgorCWdpdCBhZGQgYyAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEMgJiYKKworCWdpdCBjaGVja291dCBEICYmCisJdGVzdF9zZXEgMiAxMCA+YSAmJgorCWVjaG8gZCA+ZCAmJgorCWdpdCBhZGQgYSBkICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gRCAmJgorCisJZ2l0IGNoZWNrb3V0IEUgJiYKKwlta2RpciBzdWJkaXIgJiYKKwlnaXQgbXYgYSBzdWJkaXIvYSAmJgorCWVjaG8gZSA+c3ViZGlyL2UgJiYKKwlnaXQgYWRkIHN1YmRpciAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEUgJiYKKworCWdpdCBjaGVja291dCBGICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBGCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZmIHVwZGF0ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwl0b3VjaCByYW5kb21fZmlsZSAmJiBnaXQgYWRkIHJhbmRvbV9maWxlICYmCisKKwlnaXQgbWVyZ2UgRV4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6cmFuZG9tX2ZpbGUgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmIC0tbmFtZS1vbmx5IC0tY2FjaGVkIEUpIiA9ICJyYW5kb21fZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmYgdXBkYXRlLCBpbXBvcnRhbnQgZmlsZSBtb2RpZmllZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwlta2RpciBzdWJkaXIgJiYKKwl0b3VjaCBzdWJkaXIvZSAmJgorCWdpdCBhZGQgc3ViZGlyL2UgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBFXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZSwgdHJpdmlhbCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwl0b3VjaCByYW5kb21fZmlsZSAmJiBnaXQgYWRkIHJhbmRvbV9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBDXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZSwgbm9uLXRyaXZpYWwnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJdG91Y2ggcmFuZG9tX2ZpbGUgJiYgZ2l0IGFkZCByYW5kb21fZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgRF4wICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwl0b3VjaCByYW5kb21fZmlsZSAmJiBnaXQgYWRkIHJhbmRvbV9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIENeMCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUsIHdoZW4gbWVyZ2UgYnJhbmNoIG1hdGNoZXMgbWVyZ2UgYmFzZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwl0b3VjaCByYW5kb21fZmlsZSAmJiBnaXQgYWRkIHJhbmRvbV9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEZeMCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUsIHdoZW4gaW5kZXg9PWhlYWQgYnV0IGhlYWQhPUhFQUQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCisJIyBNYWtlIGluZGV4IG1hdGNoIEIKKwlnaXQgZGlmZiBDIEIgLS0gfCBnaXQgYXBwbHkgLS1jYWNoZWQgJiYKKwkjIE1lcmdlIEIgJiBGLCB3aXRoIEIgYXMgImhlYWQiCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBBIC0tIEIgRiA+IG91dCAmJgorCXRlc3RfaTE4bmdyZXAgIkFscmVhZHkgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSwgd2hlbiBmaWxlIGhhcyBzdGFnZWQgY2hhbmdlcyBub3QgbWF0Y2hpbmcgSEVBRCBub3Igd2hhdCBhIG1lcmdlIHdvdWxkIGdpdmUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJbWtkaXIgc3ViZGlyICYmCisJdGVzdF9zZXEgMSAxMCA+c3ViZGlyL2EgJiYKKwlnaXQgYWRkIHN1YmRpci9hICYmCisKKwkjIFdlIGhhdmUgc3RhZ2VkIGNoYW5nZXM7IG1lcmdlIHNob3VsZCBlcnJvciBvdXQKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSwgd2hlbiBmaWxlIGhhcyBzdGFnZWQgY2hhbmdlcyBtYXRjaGluZyB3aGF0IGEgbWVyZ2Ugd291bGQgZ2l2ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwlta2RpciBzdWJkaXIgJiYKKwl0ZXN0X3NlcSAxIDExID5zdWJkaXIvYSAmJgorCWdpdCBhZGQgc3ViZGlyL2EgJiYKKworCSMgV2UgaGF2ZSBzdGFnZWQgY2hhbmdlczsgbWVyZ2Ugc2hvdWxkIGVycm9yIG91dAorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRV4wIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2N0b3B1cywgdW5yZWxhdGVkIGZpbGUgdG91Y2hlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwl0b3VjaCByYW5kb21fZmlsZSAmJiBnaXQgYWRkIHJhbmRvbV9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQ14wIEReMCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvY3RvcHVzLCByZWxhdGVkIGZpbGUgcmVtb3ZlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwlnaXQgcm0gYiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIENeMCBEXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2N0b3B1cywgcmVsYXRlZCBmaWxlIG1vZGlmaWVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBCXjAgJiYKKworCWVjaG8gMTIgPj5hICYmIGdpdCBhZGQgYSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIENeMCBEXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3VycycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwl0b3VjaCByYW5kb21fZmlsZSAmJiBnaXQgYWRkIHJhbmRvbV9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgb3VycyBDXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VidHJlZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwl0b3VjaCByYW5kb21fZmlsZSAmJiBnaXQgYWRkIHJhbmRvbV9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgc3VidHJlZSBFXjAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDQ1LW1lcmdlLXJlbmFtZS1kZWxldGUuc2ggYi90L3Q2MDQ1LW1lcmdlLXJlbmFtZS1kZWxldGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWQzMzU3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNDUtbWVyZ2UtcmVuYW1lLWRlbGV0ZS5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UtcmVjdXJzaXZlIHJlbmFtZS9kZWxldGUgY29uZmxpY3QgbWVzc2FnZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvZGVsZXRlJyAnCisJZWNobyBmb28gPkEgJiYKKwlnaXQgYWRkIEEgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZSAmJgorCWdpdCBtdiBBIEIgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJtIEEgJiYKKwlnaXQgY29tbWl0IC1tICJkZWxldGUiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgcmVuYW1lID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL2RlbGV0ZSk6IEEgZGVsZXRlZCBpbiBIRUFEIGFuZCByZW5hbWVkIHRvIEIgaW4gcmVuYW1lLiBWZXJzaW9uIHJlbmFtZSBvZiBCIGxlZnQgaW4gdHJlZS4iIG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNDYtbWVyZ2Utc2tpcC11bm5lZWRlZC11cGRhdGVzLnNoIGIvdC90NjA0Ni1tZXJnZS1za2lwLXVubmVlZGVkLXVwZGF0ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWRkYzllNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNDYtbWVyZ2Utc2tpcC11bm5lZWRlZC11cGRhdGVzLnNoCkBAIC0wLDAgKzEsNzcwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ibWVyZ2UgY2FzZXMiCisKKyMgVGhlIHNldHVwIGZvciBhbGwgb2YgdGhlbSwgcGljdG9yaWFsbHksIGlzOgorIworIyAgICAgIEEKKyMgICAgICBvCisjICAgICAvIFwKKyMgIE8gbyAgID8KKyMgICAgIFwgLworIyAgICAgIG8KKyMgICAgICBCCisjCisjIFRvIGhlbHAgbWFrZSBpdCBlYXNpZXIgdG8gZm9sbG93IHRoZSBmbG93IG9mIHRlc3RzLCB0aGV5IGhhdmUgYmVlbgorIyBkaXZpZGVkIGludG8gc2VjdGlvbnMgYW5kIGVhY2ggdGVzdCB3aWxsIHN0YXJ0IHdpdGggYSBxdWljayBleHBsYW5hdGlvbgorIyBvZiB3aGF0IGNvbW1pdHMgTywgQSwgYW5kIEIgY29udGFpbi4KKyMKKyMgTm90YXRpb246CisjICAgIHove2IsY30gICBtZWFucyAgZmlsZXMgei9iIGFuZCB6L2MgYm90aCBleGlzdAorIyAgICB4L2RfMSAgICAgbWVhbnMgIGZpbGUgeC9kIGV4aXN0cyB3aXRoIGNvbnRlbnQgZDEuICAoUHVycG9zZSBvZiB0aGUKKyMgICAgICAgICAgICAgICAgICAgICB1bmRlcnNjb3JlIG5vdGF0aW9uIGlzIHRvIGRpZmZlcmVudGlhdGUgZGlmZmVyZW50CisjICAgICAgICAgICAgICAgICAgICAgZmlsZXMgdGhhdCBtaWdodCBiZSByZW5hbWVkIGludG8gZWFjaCBvdGhlcidzIHBhdGhzLikKKworLiAuL3Rlc3QtbGliLnNoCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gMTogQ2FzZXMgaW52b2x2aW5nIG5vIHJlbmFtZXMgKG9uZSBzaWRlIGhhcyBzdWJzZXQgb2YgY2hhbmdlcyBvZgorIyAgICAgICAgICAgIHRoZSBvdGhlciBzaWRlKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgMWEsIENoYW5nZXMgb24gQSwgc3Vic2V0IG9mIGNoYW5nZXMgb24gQgorIyAgIENvbW1pdCBPOiBiXzEKKyMgICBDb21taXQgQTogYl8yCisjICAgQ29tbWl0IEI6IGJfMworIyAgIEV4cGVjdGVkOiBiXzIKKwordGVzdF9zZXR1cF8xYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxYV8kMSAmJgorCSgKKwkJY2QgMWFfJDEgJiYKKworCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgOCA5IDEwID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDUuNSA2IDcgOCA5IDEwIDEwLjUgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDUuNSA2IDcgOCA5IDEwID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLUw6IE1vZGlmeShBKS9Nb2RpZnkoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBJyAnCisJdGVzdF9zZXR1cF8xYSBMICYmCisJKAorCQljZCAxYV9MICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC0zNjAwIGIgPm9sZC1tdGltZSAmJgorCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCSMgTWFrZSBzdXJlIGIgd2FzIE5PVCB1cGRhdGVkCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGIgPm5ldy1tdGltZSAmJgorCQl0ZXN0X2NtcCBvbGQtbXRpbWUgbmV3LW10aW1lICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGluZGV4X2ZpbGVzICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIEhFQUQ6YiAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgQTpiICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYiAgID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSAgIEE6YiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFhLVI6IE1vZGlmeShBKS9Nb2RpZnkoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBJyAnCisJdGVzdF9zZXR1cF8xYSBSICYmCisJKAorCQljZCAxYV9SICYmCisKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC0zNjAwIGIgPm9sZC1tdGltZSAmJgorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBBXjAgPm91dCAyPmVyciAmJgorCisJCSMgTWFrZSBzdXJlIGIgV0FTIHVwZGF0ZWQKKwkJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgYiA+bmV3LW10aW1lICYmCisJCXRlc3QgJChjYXQgb2xkLW10aW1lKSAtbHQgJChjYXQgbmV3LW10aW1lKSAmJgorCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmluZGV4X2ZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgaW5kZXhfZmlsZXMgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgSEVBRDpiICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBBOmIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiICAgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlICAgQTpiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0VDVElPTiAyOiBDYXNlcyBpbnZvbHZpbmcgYmFzaWMgcmVuYW1lcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgMmEsIENoYW5nZXMgb24gQSwgcmVuYW1lIG9uIEIKKyMgICBDb21taXQgTzogYl8xCisjICAgQ29tbWl0IEE6IGJfMgorIyAgIENvbW1pdCBCOiBjXzEKKyMgICBFeHBlY3RlZDogY18yCisKK3Rlc3Rfc2V0dXBfMmEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMmFfJDEgJiYKKwkoCisJCWNkIDJhXyQxICYmCisKKwkJdGVzdF9zZXEgMSAxMCA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3NlcSAxIDExID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgYiBjICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMmEtTDogTW9kaWZ5L3JlbmFtZSwgbWVyZ2UgaW50byBtb2RpZnkgc2lkZScgJworCXRlc3Rfc2V0dXBfMmEgTCAmJgorCSgKKwkJY2QgMmFfTCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBjICYmCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYyAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBIRUFEOmMgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IEE6YiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGMgICA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgICBBOmIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMmEtUjogTW9kaWZ5L3JlbmFtZSwgbWVyZ2UgaW50byByZW5hbWUgc2lkZScgJworCXRlc3Rfc2V0dXBfMmEgUiAmJgorCSgKKwkJY2QgMmFfUiAmJgorCisJCWdpdCBjaGVja291dCBCXjAgJiYKKworCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAtMzYwMCBjID5vbGQtbXRpbWUgJiYKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQV4wID5vdXQgMj5lcnIgJiYKKworCQkjIE1ha2Ugc3VyZSBjIFdBUyB1cGRhdGVkCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGMgPm5ldy1tdGltZSAmJgorCQl0ZXN0ICQoY2F0IG9sZC1tdGltZSkgLWx0ICQoY2F0IG5ldy1tdGltZSkgJiYKKworCQl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGluZGV4X2ZpbGVzICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIEhFQUQ6YyAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgQTpiICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYyAgID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSAgIEE6YiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiCisJKQorJworCisjIFRlc3RjYXNlIDJiLCBDaGFuZ2VkIGFuZCByZW5hbWVkIG9uIEEsIHN1YnNldCBvZiBjaGFuZ2VzIG9uIEIKKyMgICBDb21taXQgTzogYl8xCisjICAgQ29tbWl0IEE6IGNfMgorIyAgIENvbW1pdCBCOiBiXzMKKyMgICBFeHBlY3RlZDogY18yCisKK3Rlc3Rfc2V0dXBfMmIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMmJfJDEgJiYKKwkoCisJCWNkIDJiXyQxICYmCisKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3IDggOSAxMCA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA1LjUgNiA3IDggOSAxMCAxMC41ID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQlnaXQgbXYgYiBjICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDUuNSA2IDcgOCA5IDEwID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiLUw6IFJlbmFtZStNb2QoQSkvTW9kKEIpLCBCIG1vZHMgc3Vic2V0IG9mIEEnICcKKwl0ZXN0X3NldHVwXzJiIEwgJiYKKwkoCisJCWNkIDJiX0wgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgLTM2MDAgYyA+b2xkLW10aW1lICYmCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCSMgTWFrZSBzdXJlIGMgV0FTIHVwZGF0ZWQKKwkJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgYyA+bmV3LW10aW1lICYmCisJCXRlc3RfY21wIG9sZC1tdGltZSBuZXctbXRpbWUgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmluZGV4X2ZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgaW5kZXhfZmlsZXMgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgSEVBRDpjICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBBOmMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBjICAgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlICAgQTpjID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiLVI6IFJlbmFtZStNb2QoQSkvTW9kKEIpLCBCIG1vZHMgc3Vic2V0IG9mIEEnICcKKwl0ZXN0X3NldHVwXzJiIFIgJiYKKwkoCisJCWNkIDJiX1IgJiYKKworCQlnaXQgY2hlY2tvdXQgQl4wICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYyAmJgorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBBXjAgPm91dCAyPmVyciAmJgorCisJCSMgTWFrZSBzdXJlIGMgbm93IHByZXNlbnQgKGFuZCB0aHVzIHdhcyB1cGRhdGVkKQorCQl0ZXN0X3BhdGhfaXNfZmlsZSBjICYmCisKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBIRUFEOmMgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IEE6YyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGMgICA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgICBBOmMgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYgorCSkKKycKKworIyBUZXN0Y2FzZSAyYywgQ2hhbmdlcyBvbiBBLCByZW5hbWUgb24gQgorIyAgIENvbW1pdCBPOiBiXzEKKyMgICBDb21taXQgQTogYl8yLCBjXzMKKyMgICBDb21taXQgQjogY18xCisjICAgRXhwZWN0ZWQ6IHJlbmFtZS9hZGQgY29uZmxpY3QgY18yIHZzIGNfMworIworIyAgIE5PVEU6IFNpbmNlIEEgbW9kaWZpZWQgYl8xLT5iXzIsIGFuZCBCIHJlbmFtZWQgYl8xLT5jXzEsIHRoZSB0aHJlZXdheQorIyAgICAgICAgIG1lcmdlIG9mIHRob3NlIGZpbGVzIHNob3VsZCByZXN1bHQgaW4gY18yLiAgV2UgdGhlbiBzaG91bGQgaGF2ZSBhCisjICAgICAgICAgcmVuYW1lL2FkZCBjb25mbGljdCBiZXR3ZWVuIGNfMiBhbmQgY18zLiAgSG93ZXZlciwgaWYgd2Ugbm90ZSBpbgorIyAgICAgICAgIG1lcmdlX2NvbnRlbnQoKSB0aGF0IEEgaGFkIHRoZSByaWdodCBjb250ZW50cyAoYl8yIGhhcyBzYW1lCisjICAgICAgICAgY29udGVudHMgYXMgY18yLCBqdXN0IGF0IGEgZGlmZmVyZW50IG5hbWUpLCBhbmQgdGhhdCBBIGhhZCB0aGUKKyMgICAgICAgICByaWdodCBwYXRoIHByZXNlbnQgKGNfMyBleGlzdGVkKSBhbmQgdGh1cyBkZWNpZGVzIHRoYXQgaXQgY2FuCisjICAgICAgICAgc2tpcCB0aGUgdXBkYXRlLCB0aGVuIHdlJ3JlIGluIHRyb3VibGUuICBUaGlzIHRlc3QgdmVyaWZpZXMgd2UgZG8KKyMgICAgICAgICBub3QgbWFrZSB0aGF0IHBhcnRpY3VsYXIgbWlzdGFrZS4KKwordGVzdF9zZXR1cF8yYyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAyYyAmJgorCSgKKwkJY2QgMmMgJiYKKworCQl0ZXN0X3NlcSAxIDEwID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCXRlc3Rfc2VxIDEgMTEgPmIgJiYKKwkJZWNobyB3aGF0ZXZlciA+YyAmJgorCQlnaXQgYWRkIGIgYyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQlnaXQgbXYgYiBjICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMmM6IE1vZGlmeSBiICYgYWRkIGMgVlMgcmVuYW1lIGItPmMnICcKKwl0ZXN0X3NldHVwXzJjICYmCisJKAorCQljZCAyYyAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAtMzYwMCBjID5vbGQtbXRpbWUgJiYKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0zICYmCisJCWV4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSBiLT5jIiBvdXQgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCSMgTWFrZSBzdXJlIGMgV0FTIHVwZGF0ZWQKKwkJdGVzdC10b29sIGNobXRpbWUgLS1nZXQgYyA+bmV3LW10aW1lICYmCisJCXRlc3QgJChjYXQgb2xkLW10aW1lKSAtbHQgJChjYXQgbmV3LW10aW1lKQorCisJCSMgRklYTUU6IHJlbmFtZS9hZGQgY29uZmxpY3RzIGFyZSBob3JyaWJseSBicm9rZW4gcmlnaHQgbm93OworCQkjIHdoZW4gSSBnZXQgYmFjayB0byBteSBwYXRjaCBzZXJpZXMgZml4aW5nIGl0IGFuZAorCQkjIHJlbmFtZS9yZW5hbWUoMnRvMSkgY29uZmxpY3RzIHRvIGJyaW5nIHRoZW0gaW4gbGluZSB3aXRoCisJCSMgaG93IGFkZC9hZGQgY29uZmxpY3RzIGJlaGF2ZSwgdGhlbiBjaGVja3MgbGlrZSB0aGUgYmVsb3cKKwkJIyBjb3VsZCBiZSBhZGRlZC4gIEJ1dCB0aGF0IHBhdGNoIHNlcmllcyBpcyB3YWl0aW5nIHVudGlsCisJCSMgdGhlIHJlbmFtZS1kaXJlY3RvcnktZGV0ZWN0aW9uIHNlcmllcyBsYW5kcywgd2hpY2ggdGhpcworCQkjIGlzIHBhcnQgb2YuICBBbmQgaW4gdGhlIG1lYW4gdGltZSwgSSBkbyBub3Qgd2FudCB0byBmdXJ0aGVyCisJCSMgZW5mb3JjZSBicm9rZW4gYmVoYXZpb3IuICBTbyBmb3Igbm93LCB0aGUgbWFpbiB0ZXN0IGlzIHRoZQorCQkjIG9uZSBhYm92ZSB0aGF0IGVyciBpcyBhbiBlbXB0eSBmaWxlLgorCisJCSNnaXQgbHMtZmlsZXMgLXMgPmluZGV4X2ZpbGVzICYmCisJCSN0ZXN0X2xpbmVfY291bnQgPSAyIGluZGV4X2ZpbGVzICYmCisKKwkJI2dpdCByZXYtcGFyc2UgPmFjdHVhbCA6MjpjIDozOmMgJiYKKwkJI2dpdCByZXYtcGFyc2UgPmV4cGVjdCBBOmIgIEE6YyAgJiYKKwkJI3Rlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjZ2l0IGNhdC1maWxlIC1wIEE6YiA+Pm1lcmdlZCAmJgorCQkjZ2l0IGNhdC1maWxlIC1wIEE6YyA+Pm1lcmdlLW1lICYmCisJCSM+ZW1wdHkgJiYKKwkJI3Rlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJIwktTCAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIiBcCisJCSMJLUwgIiIgXAorCQkjCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiIFwKKwkJIwltZXJnZWQgZW1wdHkgbWVyZ2UtbWUgJiYKKwkJI3NlZCAtZSAicy9eXChbPD0+XVwpL1wxXDFcMS8iIG1lcmdlZCA+bWVyZ2VkLWludGVybmFsICYmCisKKwkJI2dpdCBoYXNoLW9iamVjdCBjICAgICAgICAgICAgICAgPmFjdHVhbCAmJgorCQkjZ2l0IGhhc2gtb2JqZWN0IG1lcmdlZC1pbnRlcm5hbCA+ZXhwZWN0ICYmCisJCSN0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJI3Rlc3RfcGF0aF9pc19taXNzaW5nIGIKKwkpCisnCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNFQ1RJT04gMzogQ2FzZXMgaW52b2x2aW5nIGRpcmVjdG9yeSByZW5hbWVzCisjCisjIE5PVEU6CisjICAgRGlyZWN0b3J5IHJlbmFtZXMgb25seSBhcHBseSB3aGVuIG9uZSBzaWRlIHJlbmFtZXMgYSBkaXJlY3RvcnksIGFuZCB0aGUKKyMgICBvdGhlciBzaWRlIGFkZHMgb3IgcmVuYW1lcyBhIHBhdGggaW50byB0aGF0IGRpcmVjdG9yeS4gIEFwcGx5aW5nIHRoZQorIyAgIGRpcmVjdG9yeSByZW5hbWUgdG8gdGhhdCBuZXcgcGF0aCBjcmVhdGVzIGEgbmV3IHBhdGhuYW1lIHRoYXQgZGlkbid0CisjICAgZXhpc3Qgb24gZWl0aGVyIHNpZGUgb2YgaGlzdG9yeS4gIFRodXMsIGl0IGlzIGltcG9zc2libGUgZm9yIHRoZQorIyAgIG1lcmdlIGNvbnRlbnRzIHRvIGFscmVhZHkgYmUgYXQgdGhlIHJpZ2h0IHBhdGgsIHNvIGFsbCBvZiB0aGVzZSBjaGVja3MKKyMgICBleGlzdCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHVwZGF0ZXMgYXJlIG5vdCBza2lwcGVkLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGVzdGNhc2UgM2EsIENoYW5nZSArIHJlbmFtZSBpbnRvIGRpciBmb28gb24gQSwgZGlyIHJlbmFtZSBmb28tPmJhciBvbiBCCisjICAgQ29tbWl0IE86IGJxXzEsIGZvby93aGF0ZXZlcgorIyAgIENvbW1pdCBBOiBmb28ve2JxXzIsIHdoYXRldmVyfQorIyAgIENvbW1pdCBCOiBicV8xLCBiYXIvd2hhdGV2ZXIKKyMgICBFeHBlY3RlZDogYmFyL3ticV8yLCB3aGF0ZXZlcn0KKwordGVzdF9zZXR1cF8zYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAzYV8kMSAmJgorCSgKKwkJY2QgM2FfJDEgJiYKKworCQlta2RpciBmb28gJiYKKwkJdGVzdF9zZXEgMSAxMCA+YnEgJiYKKwkJdGVzdF93cml0ZV9saW5lcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgPmZvby93aGF0ZXZlciAmJgorCQlnaXQgYWRkIGJxIGZvby93aGF0ZXZlciAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiTyIgJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCXRlc3Rfc2VxIDEgMTEgPmJxICYmCisJCWdpdCBhZGQgYnEgJiYKKwkJZ2l0IG12IGJxIGZvby8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZ2l0IG12IGZvby8gYmFyLyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhLUw6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJworCXRlc3Rfc2V0dXBfM2EgTCAmJgorCSgKKwkJY2QgM2FfTCAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiYXIvYnEgJiYKKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCAtYyBtZXJnZS5kaXJlY3RvcnlSZW5hbWVzPXRydWUgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIGJhci9icSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBIRUFEOmJhci9icSBIRUFEOmJhci93aGF0ZXZlciAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgQTpmb28vYnEgICAgQTpmb28vd2hhdGV2ZXIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBiYXIvYnEgICBiYXIvd2hhdGV2ZXIgICA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgICBBOmZvby9icSBBOmZvby93aGF0ZXZlciA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YnEgSEVBRDpmb28vYnEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYnEgZm9vL2JxIGZvby93aGF0ZXZlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnM2EtUjogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCisJdGVzdF9zZXR1cF8zYSBSICYmCisJKAorCQljZCAzYV9SICYmCisKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGJhci9icSAmJgorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQV4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyL2JxICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGluZGV4X2ZpbGVzICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIEhFQUQ6YmFyL2JxIEhFQUQ6YmFyL3doYXRldmVyICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBBOmZvby9icSAgICBBOmZvby93aGF0ZXZlciAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGJhci9icSAgIGJhci93aGF0ZXZlciAgID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSAgIEE6Zm9vL2JxIEE6Zm9vL3doYXRldmVyID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpicSBIRUFEOmZvby9icSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBicSBmb28vYnEgZm9vL3doYXRldmVyCisJKQorJworCisjIFRlc3RjYXNlIDNiLCByZW5hbWUgaW50byBkaXIgZm9vIG9uIEEsIGRpciByZW5hbWUgZm9vLT5iYXIgKyBjaGFuZ2Ugb24gQgorIyAgIENvbW1pdCBPOiBicV8xLCBmb28vd2hhdGV2ZXIKKyMgICBDb21taXQgQTogZm9vL3ticV8xLCB3aGF0ZXZlcn0KKyMgICBDb21taXQgQjogYnFfMiwgYmFyL3doYXRldmVyCisjICAgRXhwZWN0ZWQ6IGJhci97YnFfMiwgd2hhdGV2ZXJ9CisKK3Rlc3Rfc2V0dXBfM2IgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gM2JfJDEgJiYKKwkoCisJCWNkIDNiXyQxICYmCisKKwkJbWtkaXIgZm9vICYmCisJCXRlc3Rfc2VxIDEgMTAgPmJxICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrID5mb28vd2hhdGV2ZXIgJiYKKwkJZ2l0IGFkZCBicSBmb28vd2hhdGV2ZXIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlnaXQgbXYgYnEgZm9vLyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQl0ZXN0X3NlcSAxIDExID5icSAmJgorCQlnaXQgYWRkIGJxICYmCisJCWdpdCBtdiBmb28vIGJhci8gJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkIiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczYi1MOiBicV8xLT5mb28vYnFfMiBvbiBBLCBmb28vLT5iYXIvIG9uIEInICcKKwl0ZXN0X3NldHVwXzNiIEwgJiYKKwkoCisJCWNkIDNiX0wgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmFyL2JxICYmCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyBnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIvYnEgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPmluZGV4X2ZpbGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgaW5kZXhfZmlsZXMgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgSEVBRDpiYXIvYnEgSEVBRDpiYXIvd2hhdGV2ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IEI6YnEgICAgICAgIEE6Zm9vL3doYXRldmVyICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYmFyL2JxIGJhci93aGF0ZXZlciAgID5hY3R1YWwgJiYKKwkJZ2l0IHJldi1wYXJzZSAgIEI6YnEgICBBOmZvby93aGF0ZXZlciA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6YnEgSEVBRDpmb28vYnEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYnEgZm9vL2JxIGZvby93aGF0ZXZlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnM2ItUjogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCisJdGVzdF9zZXR1cF8zYiBSICYmCisJKAorCQljZCAzYl9SICYmCisKKwkJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGJhci9icSAmJgorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQV4wID5vdXQgMj5lcnIgJiYKKworCQl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyL2JxICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGluZGV4X2ZpbGVzICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIEhFQUQ6YmFyL2JxIEhFQUQ6YmFyL3doYXRldmVyICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBCOmJxICAgICAgICBBOmZvby93aGF0ZXZlciAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGJhci9icSBiYXIvd2hhdGV2ZXIgICA+YWN0dWFsICYmCisJCWdpdCByZXYtcGFyc2UgICBCOmJxICAgQTpmb28vd2hhdGV2ZXIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmJxIEhFQUQ6Zm9vL2JxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGJxIGZvby9icSBmb28vd2hhdGV2ZXIKKwkpCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRUNUSU9OIDQ6IENhc2VzIGludm9sdmluZyBkaXJ0eSBjaGFuZ2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUZXN0Y2FzZSA0YSwgQ2hhbmdlZCBvbiBBLCBzdWJzZXQgb2YgY2hhbmdlcyBvbiBCLCBsb2NhbGx5IG1vZGlmaWVkCisjICAgQ29tbWl0IE86IGJfMQorIyAgIENvbW1pdCBBOiBiXzIKKyMgICBDb21taXQgQjogYl8zCisjICAgV29ya2luZyBjb3B5OiBiXzQKKyMgICBFeHBlY3RlZDogYl8yIGZvciBtZXJnZSwgYl80IGluIHdvcmtpbmcgY29weQorCit0ZXN0X3NldHVwXzRhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDRhICYmCisJKAorCQljZCA0YSAmJgorCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA4IDkgMTAgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJPIiAmJgorCisJCWdpdCBicmFuY2ggTyAmJgorCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNS41IDYgNyA4IDkgMTAgMTAuNSA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNS41IDYgNyA4IDkgMTAgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJCIgorCSkKK30KKworIyBOT1RFOiBGb3IgYXMgbG9uZyBhcyB3ZSBjb250aW51ZSB1c2luZyB1bnBhY2tfdHJlZXMoKSB3aXRob3V0IGluZGV4X29ubHkKKyMgICBzZXQgdG8gdHJ1ZSwgaXQgd2lsbCBlcnJvciBvdXQgb24gYSBjYXNlIGxpa2UgdGhpcyBjbGFpbWluZyB0aGUgdGhlIGxvY2FsbHkKKyMgICBtb2RpZmllZCBmaWxlIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBtZXJnZS4gIEdldHRpbmcgdGhpcyB0ZXN0Y2FzZQorIyAgIGNvcnJlY3QgcmVxdWlyZXMgZG9pbmcgdGhlIG1lcmdlIGluLW1lbW9yeSBmaXJzdCwgdGhlbiByZWFsaXppbmcgdGhhdCBubworIyAgIHVwZGF0ZXMgdG8gdGhlIGZpbGUgYXJlIG5lY2Vzc2FyeSwgYW5kIHRodXMgdGhhdCB3ZSBjYW4ganVzdCBsZWF2ZSB0aGUgcGF0aAorIyAgIGFsb25lLgordGVzdF9leHBlY3RfZmFpbHVyZSAnNGE6IENoYW5nZSBvbiBBLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQSwgZGlydHkgbW9kcyBwcmVzZW50JyAnCisJdGVzdF9zZXR1cF80YSAmJgorCSgKKwkJY2QgNGEgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCWVjaG8gIkZpbGUgcmV3cml0dGVuIiA+YiAmJgorCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IC0zNjAwIGIgPm9sZC1tdGltZSAmJgorCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MyBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCisJCSMgTWFrZSBzdXJlIGIgd2FzIE5PVCB1cGRhdGVkCisJCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0IGIgPm5ldy1tdGltZSAmJgorCQl0ZXN0X2NtcCBvbGQtbXRpbWUgbmV3LW10aW1lICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5pbmRleF9maWxlcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGluZGV4X2ZpbGVzICYmCisKKwkJZ2l0IHJldi1wYXJzZSA+YWN0dWFsIDowOmIgJiYKKwkJZ2l0IHJldi1wYXJzZSA+ZXhwZWN0IEE6YiAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZ2l0IGhhc2gtb2JqZWN0IGIgPmFjdHVhbCAmJgorCQllY2hvICJGaWxlIHJld3JpdHRlbiIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGVzdGNhc2UgNGIsIENoYW5nZWQrcmVuYW1lZCBvbiBBLCBzdWJzZXQgb2YgY2hhbmdlcyBvbiBCLCBsb2NhbGx5IG1vZGlmaWVkCisjICAgQ29tbWl0IE86IGJfMQorIyAgIENvbW1pdCBBOiBjXzIKKyMgICBDb21taXQgQjogYl8zCisjICAgV29ya2luZyBjb3B5OiBjXzQKKyMgICBFeHBlY3RlZDogY18yCisKK3Rlc3Rfc2V0dXBfNGIgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gNGIgJiYKKwkoCisJCWNkIDRiICYmCisKKwkJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3IDggOSAxMCA+YiAmJgorCQlnaXQgYWRkIGIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIk8iICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA1LjUgNiA3IDggOSAxMCAxMC41ID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQlnaXQgbXYgYiBjICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBIiAmJgorCisJCWdpdCBjaGVja291dCBCICYmCisJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDUuNSA2IDcgOCA5IDEwID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQiIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzRiOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgY2hhbmdlIG9uIEIgc3Vic2V0IG9mIEEsIGRpcnR5IG1vZHMgcHJlc2VudCcgJworCXRlc3Rfc2V0dXBfNGIgJiYKKwkoCisJCWNkIDRiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQllY2hvICJGaWxlIHJld3JpdHRlbiIgPmMgJiYKKworCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCAtMzYwMCBjID5vbGQtbXRpbWUgJiYKKworCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTMgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgPm91dCAyPmVyciAmJgorCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKworCQkjIE1ha2Ugc3VyZSBjIHdhcyBOT1QgdXBkYXRlZAorCQl0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBjID5uZXctbXRpbWUgJiYKKwkJdGVzdF9jbXAgb2xkLW10aW1lIG5ldy1tdGltZSAmJgorCisJCWdpdCBscy1maWxlcyAtcyA+aW5kZXhfZmlsZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBpbmRleF9maWxlcyAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCA6MDpjICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBBOmMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWdpdCBoYXNoLW9iamVjdCBjID5hY3R1YWwgJiYKKwkJZWNobyAiRmlsZSByZXdyaXR0ZW4iIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDQ3LWRpZmYzLWNvbmZsaWN0LW1hcmtlcnMuc2ggYi90L3Q2MDQ3LWRpZmYzLWNvbmZsaWN0LW1hcmtlcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQ2NTViYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNDctZGlmZjMtY29uZmxpY3QtbWFya2Vycy5zaApAQCAtMCwwICsxLDIxMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlY3Vyc2l2ZSBtZXJnZSBkaWZmMyBzdHlsZSBjb25mbGljdCBtYXJrZXJzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBTZXR1cDoKKyMgICAgICAgICAgTDEKKyMgICAgICAgICAgICBcCisjICAgICAgICAgICAgID8KKyMgICAgICAgICAgICAvCisjICAgICAgICAgIFIxCisjCisjIFdoZXJlOgorIyAgIEwxIGFuZCBSMSBib3RoIGhhdmUgYSBmaWxlIG5hbWVkICdjb250ZW50JyBidXQgaGF2ZSBubyBjb21tb24gaGlzdG9yeQorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBubyBtZXJnZSBiYXNlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBub19tZXJnZV9iYXNlICYmCisJKAorCQljZCBub19tZXJnZV9iYXNlICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIEwgJiYKKwkJdGVzdF9jb21taXQgQSBjb250ZW50IEEgJiYKKworCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gUiAmJgorCQl0ZXN0X2NvbW1pdCBCIGNvbnRlbnQgQgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbm8gbWVyZ2UgYmFzZScgJworCSgKKwkJY2Qgbm9fbWVyZ2VfYmFzZSAmJgorCisJCWdpdCBjaGVja291dCBMXjAgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuY29uZmxpY3RzdHlsZT1kaWZmMyBtZXJnZSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgLXMgcmVjdXJzaXZlIFJeMCAmJgorCisJCWdyZXAgInx8fHx8fCBlbXB0eSB0cmVlIiBjb250ZW50CisJKQorJworCisjIFNldHVwOgorIyAgICAgICAgICBMMQorIyAgICAgICAgIC8gIFwKKyMgICBtYXN0ZXIgICAgPworIyAgICAgICAgIFwgIC8KKyMgICAgICAgICAgUjEKKyMKKyMgV2hlcmU6CisjICAgTDEgYW5kIFIxIGhhdmUgbW9kaWZpZWQgdGhlIHNhbWUgZmlsZSAoJ2NvbnRlbnQnKSBpbiBjb25mbGljdGluZyB3YXlzCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVuaXF1ZSBtZXJnZSBiYXNlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyB1bmlxdWVfbWVyZ2VfYmFzZSAmJgorCSgKKwkJY2QgdW5pcXVlX21lcmdlX2Jhc2UgJiYKKworCQl0ZXN0X2NvbW1pdCBiYXNlIGNvbnRlbnQgIjEKKzIKKzMKKzQKKzUKKyIgJiYKKworCQlnaXQgYnJhbmNoIEwgJiYKKwkJZ2l0IGJyYW5jaCBSICYmCisKKwkJZ2l0IGNoZWNrb3V0IEwgJiYKKwkJdGVzdF9jb21taXQgTCBjb250ZW50ICIxCisyCiszCis0Cis1Cis3IiAmJgorCisJCWdpdCBjaGVja291dCBSICYmCisJCWdpdCBybSBjb250ZW50ICYmCisJCXRlc3RfY29tbWl0IFIgcmVuYW1lZCAiMQorMgorMworNAorNQorc2l4IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdW5pcXVlIG1lcmdlIGJhc2UnICcKKwkoCisJCWNkIHVuaXF1ZV9tZXJnZV9iYXNlICYmCisKKwkJZ2l0IGNoZWNrb3V0IExeMCAmJgorCQlNQVNURVI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgbWFzdGVyKSAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5jb25mbGljdHN0eWxlPWRpZmYzIG1lcmdlIC1zIHJlY3Vyc2l2ZSBSXjAgJiYKKworCQlncmVwICJ8fHx8fHwgJE1BU1RFUjpjb250ZW50IiByZW5hbWVkCisJKQorJworCisjIFNldHVwOgorIyAgICAgICAgICBMMS0tLUwyLS1MMworIyAgICAgICAgIC8gIFwgLyAgICAgIFwKKyMgICBtYXN0ZXIgICAgWDEgICAgICAgPworIyAgICAgICAgIFwgIC8gXCAgICAgIC8KKyMgICAgICAgICAgUjEtLS1SMi0tUjMKKyMKKyMgV2hlcmU6CisjICAgY29tbWl0cyBMMSBhbmQgUjEgaGF2ZSBtb2RpZmllZCB0aGUgc2FtZSBmaWxlIGluIG5vbi1jb25mbGljdGluZyB3YXlzCisjICAgWDEgaXMgYW4gYXV0by1nZW5lcmF0ZWQgbWVyZ2UtYmFzZSB1c2VkIHdoZW4gbWVyZ2luZyBMMSBhbmQgUjEKKyMgICBjb21taXRzIEwyIGFuZCBSMiBhcmUgbWVyZ2VzIG9mIFIxIGFuZCBMMSBpbnRvIEwxIGFuZCBSMSwgcmVzcGVjdGl2ZWx5CisjICAgY29tbWl0cyBMMyBhbmQgUjMgYm90aCBtb2RpZnkgJ2NvbnRlbnQnIGluIGNvbmZsaWN0aW5nIHdheXMKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbXVsdGlwbGUgbWVyZ2UgYmFzZXMnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIG11bHRpcGxlX21lcmdlX2Jhc2VzICYmCisJKAorCQljZCBtdWx0aXBsZV9tZXJnZV9iYXNlcyAmJgorCisJCXRlc3RfY29tbWl0IGluaXRpYWwgY29udGVudCAiMQorMgorMworNAorNSIgJiYKKworCQlnaXQgYnJhbmNoIEwgJiYKKwkJZ2l0IGJyYW5jaCBSICYmCisKKwkJIyBDcmVhdGUgTDEKKwkJZ2l0IGNoZWNrb3V0IEwgJiYKKwkJdGVzdF9jb21taXQgTDEgY29udGVudCAiMAorMQorMgorMworNAorNSIgJiYKKworCQkjIENyZWF0ZSBSMQorCQlnaXQgY2hlY2tvdXQgUiAmJgorCQl0ZXN0X2NvbW1pdCBSMSBjb250ZW50ICIxCisyCiszCis0Cis1Cis2IiAmJgorCisJCSMgQ3JlYXRlIEwyCisJCWdpdCBjaGVja291dCBMICYmCisJCWdpdCBtZXJnZSBSMSAmJgorCisJCSMgQ3JlYXRlIFIyCisJCWdpdCBjaGVja291dCBSICYmCisJCWdpdCBtZXJnZSBMMSAmJgorCisJCSMgQ3JlYXRlIEwzCisJCWdpdCBjaGVja291dCBMICYmCisJCXRlc3RfY29tbWl0IEwzIGNvbnRlbnQgIjAKKzEKKzIKKzMKKzQKKzUKK0EiICYmCisKKwkJIyBDcmVhdGUgUjMKKwkJZ2l0IGNoZWNrb3V0IFIgJiYKKwkJZ2l0IHJtIGNvbnRlbnQgJiYKKwkJdGVzdF9jb21taXQgUjMgcmVuYW1lZCAiMAorMgorMworNAorNQorc2l4IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbXVsdGlwbGUgbWVyZ2UgYmFzZXMnICcKKwkoCisJCWNkIG11bHRpcGxlX21lcmdlX2Jhc2VzICYmCisKKwkJZ2l0IGNoZWNrb3V0IExeMCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5jb25mbGljdHN0eWxlPWRpZmYzIG1lcmdlIC1zIHJlY3Vyc2l2ZSBSXjAgJiYKKworCQlncmVwICJ8fHx8fHwgbWVyZ2VkIGNvbW1vbiBhbmNlc3RvcnM6Y29udGVudCIgcmVuYW1lZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgZGVzY3JpYmVzIHBhcmVudCBvZiBjb21taXQgYmVpbmcgcGlja2VkJyAnCisJdGVzdF9jcmVhdGVfcmVwbyByZWJhc2UgJiYKKwkoCisJCWNkIHJlYmFzZSAmJgorCQl0ZXN0X2NvbW1pdCBiYXNlIGZpbGUgJiYKKwkJdGVzdF9jb21taXQgbWFzdGVyIGZpbGUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwkJdGVzdF9jb21taXQgc2lkZSBmaWxlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBtZXJnZS5jb25mbGljdHN0eWxlPWRpZmYzIHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCQlncmVwICJ8fHx8fHx8IHBhcmVudCBvZiIgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tYXBwbHkgZGVzY3JpYmVzIGZha2UgYW5jZXN0b3IgYmFzZScgJworCSgKKwkJY2QgcmViYXNlICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbWVyZ2UuY29uZmxpY3RzdHlsZT1kaWZmMyByZWJhc2UgLS1hcHBseSBtYXN0ZXIgJiYKKwkJZ3JlcCAifHx8fHx8fCBjb25zdHJ1Y3RlZCBtZXJnZSBiYXNlIiBmaWxlCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNTAtcmVwbGFjZS5zaCBiL3QvdDYwNTAtcmVwbGFjZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lN2U2NGUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjA1MC1yZXBsYWNlLnNoCkBAIC0wLDAgKzEsNTA3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENocmlzdGlhbiBDb3VkZXIKKyMKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHJlcGxhY2UgcmVmcyBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCithZGRfYW5kX2NvbW1pdF9maWxlICgpCit7CisgICAgX2ZpbGU9IiQxIgorICAgIF9tc2c9IiQyIgorCisgICAgZ2l0IGFkZCAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgdGVzdF90aWNrIHx8IHJldHVybiAkPworICAgIGdpdCBjb21taXQgLS1xdWlldCAtbSAiJF9maWxlOiAkX21zZyIKK30KKworY29tbWl0X2J1ZmZlcl9jb250YWluc19wYXJlbnRzICgpCit7CisgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiID5wYXlsb2FkICYmCisgICAgc2VkIC1uIC1lICcvXiQvcScgLWUgJy9ecGFyZW50IC9wJyA8cGF5bG9hZCA+YWN0dWFsICYmCisgICAgc2hpZnQgJiYKKyAgICBmb3IgX3BhcmVudAorICAgIGRvCisJZWNobyAicGFyZW50ICRfcGFyZW50IgorICAgIGRvbmUgPmV4cGVjdGVkICYmCisgICAgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKK2NvbW1pdF9wZWVsaW5nX3Nob3dzX3BhcmVudHMgKCkKK3sKKyAgICBfcGFyZW50X251bWJlcj0xCisgICAgX2NvbW1pdD0iJDEiCisgICAgc2hpZnQgJiYKKyAgICBmb3IgX3BhcmVudAorICAgIGRvCisJX2ZvdW5kPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkX2NvbW1pdF4kX3BhcmVudF9udW1iZXIpIHx8IHJldHVybiAxCisJdGVzdCAiJF9mb3VuZCIgPSAiJF9wYXJlbnQiIHx8IHJldHVybiAxCisJX3BhcmVudF9udW1iZXI9JCgoICRfcGFyZW50X251bWJlciArIDEgKSkKKyAgICBkb25lICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkX2NvbW1pdF4kX3BhcmVudF9udW1iZXIgMj5lcnIgJiYKKyAgICB0ZXN0X2kxOG5ncmVwICJOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24iIGVycgorfQorCitjb21taXRfaGFzX3BhcmVudHMgKCkKK3sKKyAgICBjb21taXRfYnVmZmVyX2NvbnRhaW5zX3BhcmVudHMgIiRAIiAmJgorICAgIGNvbW1pdF9wZWVsaW5nX3Nob3dzX3BhcmVudHMgIiRAIgorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KK0hBU0g1PQorSEFTSDY9CitIQVNINz0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJ1Z2d5IGJyYW5jaCcgJworICAgICBlY2hvICJsaW5lIDEiID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAyIiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMyIgPj5oZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDQiID4+aGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiNCBsaW5lcyIgJiYKKyAgICAgSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgQlVHIiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgNiIgPj5oZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDciID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSA4IiA+PmhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIjQgbW9yZSBsaW5lcyB3aXRoIGEgQlVHIiAmJgorICAgICBIQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZWNobyAibGluZSA5IiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTAiID4+aGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiMiBtb3JlIGxpbmVzIiAmJgorICAgICBIQVNIMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZWNobyAibGluZSAxMSIgPj5oZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICIxIG1vcmUgbGluZSIgJiYKKyAgICAgSEFTSDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIHNlZCAtZSAicy9CVUcvNS8iIGhlbGxvID5oZWxsby5uZXcgJiYKKyAgICAgbXYgaGVsbG8ubmV3IGhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIkJVRyBmaXhlZCIgJiYKKyAgICAgSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgMTIiID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAxMyIgPj5oZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICIyIG1vcmUgbGluZXMiICYmCisgICAgIEhBU0g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBlY2hvICJsaW5lIDE0IiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTUiID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAxNiIgPj5oZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICJhZ2FpbiAzIG1vcmUgbGluZXMiICYmCisgICAgIEhBU0g3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlIHRoZSBhdXRob3InICcKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisgICAgIFI9JChnaXQgY2F0LWZpbGUgY29tbWl0ICRIQVNIMiB8IHNlZCAtZSAicy9BIFUvTy8iIHwgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtLXN0ZGluIC13KSAmJgorICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRSIHwgZ3JlcCAiYXV0aG9yIE8gVGhvciIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZXBsYWNlLyRIQVNIMiAkUiAmJgorICAgICBnaXQgc2hvdyBIRUFEfjUgfCBncmVwICJPIFRob3IiICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIk8gVGhvciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyBvcHRpb24nICcKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgTyBUaG9yIiAmJgorICAgICBnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgY2F0LWZpbGUgY29tbWl0ICRIQVNIMiB8IGdyZXAgImF1dGhvciBBIFUgVGhvciIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICBnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTIGVudiB2YXJpYWJsZScgJworICAgICBHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTPTEgZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisgICAgIEdJVF9OT19SRVBMQUNFX09CSkVDVFM9MSBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjb3JlLnVzZXJlcGxhY2VyZWZzIGNvbmZpZyBvcHRpb24nICcKKwl0ZXN0X2NvbmZpZyBjb3JlLnVzZXJlcGxhY2VyZWZzIGZhbHNlICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisJZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiCisnCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRIQVNIMgordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDw+IDAgKzAwMDAKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhZyByZXBsYWNlZCBjb21taXQnICcKKyAgICAgZ2l0IG1rdGFnIDx0YWcuc2lnID4uZ2l0L3JlZnMvdGFncy9teXRhZyAyPm1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBmc2NrIiB3b3JrcycgJworICAgICBnaXQgZnNjayBtYXN0ZXIgPmZzY2tfbWFzdGVyLm91dCAmJgorICAgICB0ZXN0X2kxOG5ncmVwICJkYW5nbGluZyBjb21taXQgJFIiIGZzY2tfbWFzdGVyLm91dCAmJgorICAgICB0ZXN0X2kxOG5ncmVwICJkYW5nbGluZyB0YWcgJChjYXQgLmdpdC9yZWZzL3RhZ3MvbXl0YWcpIiBmc2NrX21hc3Rlci5vdXQgJiYKKyAgICAgdGVzdCAteiAiJChnaXQgZnNjaykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjaywgY2xvbmUgYW5kIGZldGNoIHdvcmsnICcKKyAgICAgZ2l0IHJlcGFjayAtYSAtZCAmJgorICAgICBnaXQgY2xvbmUgLS1uby1oYXJkbGlua3MgLiBjbG9uZV9kaXIgJiYKKyAgICAgKAorCSAgY2QgY2xvbmVfZGlyICYmCisJICBnaXQgc2hvdyBIRUFEfjUgfCBncmVwICJBIFUgVGhvciIgJiYKKwkgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIkEgVSBUaG9yIiAmJgorCSAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUiAmJgorCSAgZ2l0IHJlcGFjayAtYSAtZCAmJgorCSAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUiAmJgorCSAgZ2l0IGZldGNoIC4uLyAicmVmcy9yZXBsYWNlLyo6cmVmcy9yZXBsYWNlLyoiICYmCisJICBnaXQgc2hvdyBIRUFEfjUgfCBncmVwICJPIFRob3IiICYmCisJICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJPIFRob3IiICYmCisJICBnaXQgY2F0LWZpbGUgY29tbWl0ICRSCisgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCByZXBsYWNlIiBsaXN0aW5nIGFuZCBkZWxldGluZycgJworICAgICB0ZXN0ICIkSEFTSDIiID0gIiQoZ2l0IHJlcGxhY2UgLWwpIiAmJgorICAgICB0ZXN0ICIkSEFTSDIiID0gIiQoZ2l0IHJlcGxhY2UpIiAmJgorICAgICBhYT0ke0hBU0gyJT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/fSAmJgorICAgICB0ZXN0ICIkSEFTSDIiID0gIiQoZ2l0IHJlcGxhY2UgLS1saXN0ICIkYWEqIikiICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC1kICRSICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC0tZGVsZXRlICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC1sIC1kICRIQVNIMiAmJgorICAgICBnaXQgcmVwbGFjZSAtZCAkSEFTSDIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiICYmCisgICAgIHRlc3QgLXogIiQoZ2l0IHJlcGxhY2UgLWwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHJlcGxhY2UiIHJlcGxhY2luZycgJworICAgICBnaXQgcmVwbGFjZSAkSEFTSDIgJFIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAkSEFTSDIgJFIgJiYKKyAgICAgZ2l0IHJlcGxhY2UgLWYgJEhBU0gyICRSICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC1mICYmCisgICAgIHRlc3QgIiRIQVNIMiIgPSAiJChnaXQgcmVwbGFjZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgcmVwbGFjZSIgcmVzb2x2ZXMgc2hhMScgJworICAgICBTSE9SVEhBU0gyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTggJEhBU0gyKSAmJgorICAgICBnaXQgcmVwbGFjZSAtZCAkU0hPUlRIQVNIMiAmJgorICAgICBnaXQgcmVwbGFjZSAkU0hPUlRIQVNIMiAkUiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJPIFRob3IiICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlICRIQVNIMiAkUiAmJgorICAgICBnaXQgcmVwbGFjZSAtZiAkSEFTSDIgJFIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLS1mb3JjZSAmJgorICAgICB0ZXN0ICIkSEFTSDIiID0gIiQoZ2l0IHJlcGxhY2UpIgorJworCisjIFRoaXMgY3JlYXRlcyBhIHNpZGUgYnJhbmNoIHdoZXJlIHRoZSBidWcgaW4gSDIKKyMgZG9lcyBub3QgYXBwZWFyIGJlY2F1c2UgUDIgaXMgY3JlYXRlZCBieSBhcHBseWluZworIyBIMiBhbmQgc3F1YXNoaW5nIEg1IGludG8gaXQuCisjIFAzLCBQNCBhbmQgUDYgYXJlIGNyZWF0ZWQgYnkgY2hlcnJ5LXBpY2tpbmcgSDMsIEg0CisjIGFuZCBINiByZXNwZWN0aXZlbHkuCisjCisjIEF0IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmc6CisjCisjICAgIFAyLS1QMy0tUDQtLVA2CisjICAgLworIyBIMS1IMi1IMy1INC1INS1INi1INworIworIyBUaGVuIHdlIHJlcGxhY2UgSDYgd2l0aCBQNi4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYXJhbGxlbCBicmFuY2ggd2l0aG91dCB0aGUgYnVnJyAnCisgICAgIGdpdCByZXBsYWNlIC1kICRIQVNIMiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIgJiYKKyAgICAgZ2l0IGNoZWNrb3V0ICRIQVNIMSAmJgorICAgICBnaXQgY2hlcnJ5LXBpY2sgJEhBU0gyICYmCisgICAgIGdpdCBzaG93ICRIQVNINSB8IGdpdCBhcHBseSAmJgorICAgICBnaXQgY29tbWl0IC0tYW1lbmQgLW0gImhlbGxvOiA0IG1vcmUgbGluZXMgV0lUSE9VVCB0aGUgYnVnIiBoZWxsbyAmJgorICAgICBQQVJBMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZ2l0IGNoZXJyeS1waWNrICRIQVNIMyAmJgorICAgICBQQVJBMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZ2l0IGNoZXJyeS1waWNrICRIQVNINCAmJgorICAgICBQQVJBND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZ2l0IGNoZXJyeS1waWNrICRIQVNINiAmJgorICAgICBQQVJBNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZ2l0IHJlcGxhY2UgJEhBU0g2ICRQQVJBNiAmJgorICAgICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisgICAgIGN1cj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgdGVzdCAiJGN1ciIgPSAiJEhBU0g3IiAmJgorICAgICBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICRQQVJBMiAmJgorICAgICBnaXQgcmVtb3RlIGFkZCBjbG9uZWQgLi9jbG9uZV9kaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBjbG9uZWQgcmVwbycgJworICAgICBnaXQgcHVzaCBjbG9uZWQgJEhBU0g2XjpyZWZzL2hlYWRzL3BhcmFsbGVsICYmCisgICAgICgKKwkgIGNkIGNsb25lX2RpciAmJgorCSAgZ2l0IGNoZWNrb3V0IHBhcmFsbGVsICYmCisJICBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICRQQVJBMgorICAgICApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYnJhbmNoIHdpdGggcmVwbGFjZW1lbnQnICcKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkUEFSQTMgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisgICAgIFM9JChnaXQgY2F0LWZpbGUgY29tbWl0ICRQQVJBMyB8IHNlZCAtZSAicy9BIFUvTy8iIHwgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtLXN0ZGluIC13KSAmJgorICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRTIHwgZ3JlcCAiYXV0aG9yIE8gVGhvciIgJiYKKyAgICAgZ2l0IHJlcGxhY2UgJFBBUkEzICRTICYmCisgICAgIGdpdCBzaG93ICRIQVNINn4yIHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICBnaXQgc2hvdyAkUEFSQTMgfCBncmVwICJPIFRob3IiICYmCisgICAgIGdpdCBwdXNoIGNsb25lZCAkSEFTSDZeOnJlZnMvaGVhZHMvcGFyYWxsZWwyICYmCisgICAgICgKKwkgIGNkIGNsb25lX2RpciAmJgorCSAgZ2l0IGNoZWNrb3V0IHBhcmFsbGVsMiAmJgorCSAgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAkUEFSQTMgJiYKKwkgIGdpdCBzaG93ICRQQVJBMyB8IGdyZXAgIkEgVSBUaG9yIgorICAgICApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGJyYW5jaCB3aXRoIHJlcGxhY2VtZW50JyAnCisgICAgIGdpdCBicmFuY2ggdG9mZXRjaCAkSEFTSDYgJiYKKyAgICAgKAorCSAgY2QgY2xvbmVfZGlyICYmCisJICBnaXQgZmV0Y2ggb3JpZ2luIHJlZnMvaGVhZHMvdG9mZXRjaDpyZWZzL2hlYWRzL3BhcmFsbGVsMyAmJgorCSAgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHBhcmFsbGVsMyA+b3V0cHV0LnR4dCAmJgorCSAgISBncmVwICRQQVJBMyBvdXRwdXQudHh0ICYmCisJICBnaXQgc2hvdyAkUEFSQTMgPnBhcmEzLnR4dCAmJgorCSAgZ3JlcCAiQSBVIFRob3IiIHBhcmEzLnR4dCAmJgorCSAgZ2l0IGZldGNoIG9yaWdpbiAicmVmcy9yZXBsYWNlLyo6cmVmcy9yZXBsYWNlLyoiICYmCisJICBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcGFyYWxsZWwzID5vdXRwdXQudHh0ICYmCisJICBncmVwICRQQVJBMyBvdXRwdXQudHh0ICYmCisJICBnaXQgc2hvdyAkUEFSQTMgPnBhcmEzLnR4dCAmJgorCSAgZ3JlcCAiTyBUaG9yIiBwYXJhMy50eHQKKyAgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgYW5kIHJlcGxhY2VtZW50cycgJworICAgICBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKyAgICAgdGVzdCAiJFBBUkEzIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQgJiYKKyAgICAgR0lUX05PX1JFUExBQ0VfT0JKRUNUUz0xIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorICAgICB0ZXN0ICIkSEFTSDQiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKyAgICAgZ2l0IGJpc2VjdCByZXNldCAmJgorICAgICBnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKyAgICAgdGVzdCAiJEhBU0g0IiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayBhbmQgcmVwbGFjZW1lbnRzJyAnCisJZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIHJldi1saXN0IC0tb2JqZWN0cyBIRUFEIHwKKwlnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgcGFjay1vYmplY3RzIHRlc3QtICYmCisJZ2l0IGluZGV4LXBhY2sgdGVzdC0qLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IGp1c3QgY29tbWl0cycgJworCWVjaG8gcmVwbGFjZWQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlSRVBMQUNFRD0kKGdpdCByZXYtcGFyc2UgOmZpbGUpICYmCisJbXYgZmlsZSBmaWxlLnJlcGxhY2VkICYmCisKKwllY2hvIG9yaWdpbmFsID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJT1JJR0lOQUw9JChnaXQgcmV2LXBhcnNlIDpmaWxlKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVwbGFjZS8kT1JJR0lOQUwgJFJFUExBQ0VEICYmCisJbXYgZmlsZSBmaWxlLm9yaWdpbmFsICYmCisKKwlnaXQgY2hlY2tvdXQgZmlsZSAmJgorCXRlc3RfY21wIGZpbGUucmVwbGFjZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlZCBhbmQgcmVwbGFjZW1lbnQgb2JqZWN0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSBteXRhZyAkSEFTSDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSBIRUFEXnt0cmVlfSBIRUFEfjEgJiYKKwlCTE9CPSQoZ2l0IHJldi1wYXJzZSA6ZmlsZSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSBIRUFEXiAkQkxPQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctZiBvcHRpb24gYnlwYXNzZXMgdGhlIHR5cGUgY2hlY2snICcKKwlnaXQgcmVwbGFjZSAtZiBteXRhZyAkSEFTSDEgJiYKKwlnaXQgcmVwbGFjZSAtLWZvcmNlIEhFQURee3RyZWV9IEhFQUR+MSAmJgorCWdpdCByZXBsYWNlIC1mIEhFQUReICRCTE9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoIHdvcmtzIG9uIHJlcGxhY2Ugb2JqZWN0cycgJworCWdpdCByZXBsYWNlIHwgZ3JlcCAkUEFSQTMgJiYKKwllY2hvICRQQVJBMyB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1mb3JtYXQgYm9ndXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtLWZvcm1hdCBib2d1cyA+L2Rldi9udWxsIDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLWZvcm1hdCBzaG9ydCcgJworCWdpdCByZXBsYWNlIC0tZm9ybWF0PXNob3J0ID5hY3R1YWwgJiYKKwlnaXQgcmVwbGFjZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLWZvcm1hdCBtZWRpdW0nICcKKwlIMT0kKGdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyByZXYtcGFyc2UgSEVBRH4xKSAmJgorCUhUPSQoZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwlNWVRBRz0kKGdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyByZXYtcGFyc2UgbXl0YWcpICYmCisJeworCQllY2hvICIkSDEgLT4gJEJMT0IiICYmCisJCWVjaG8gIiRCTE9CIC0+ICRSRVBMQUNFRCIgJiYKKwkJZWNobyAiJEhUIC0+ICRIMSIgJiYKKwkJZWNobyAiJFBBUkEzIC0+ICRTIiAmJgorCQllY2hvICIkTVlUQUcgLT4gJEhBU0gxIgorCX0gfCBzb3J0ID5leHBlY3RlZCAmJgorCWdpdCByZXBsYWNlIC1sIC0tZm9ybWF0IG1lZGl1bSB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tZm9ybWF0IGxvbmcnICcKKwl7CisJCWVjaG8gIiRIMSAoY29tbWl0KSAtPiAkQkxPQiAoYmxvYikiICYmCisJCWVjaG8gIiRCTE9CIChibG9iKSAtPiAkUkVQTEFDRUQgKGJsb2IpIiAmJgorCQllY2hvICIkSFQgKHRyZWUpIC0+ICRIMSAoY29tbWl0KSIgJiYKKwkJZWNobyAiJFBBUkEzIChjb21taXQpIC0+ICRTIChjb21taXQpIiAmJgorCQllY2hvICIkTVlUQUcgKHRhZykgLT4gJEhBU0gxIChjb21taXQpIgorCX0gfCBzb3J0ID5leHBlY3RlZCAmJgorCWdpdCByZXBsYWNlIC0tZm9ybWF0PWxvbmcgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZmFrZSBlZGl0b3JzJyAnCisJd3JpdGVfc2NyaXB0IGZha2VlZGl0b3IgPDwtXEVPRiAmJgorCQlzZWQgLWUgInMvQSBVIFRob3IvQSBmYWtlIFRob3IvIiAiJDEiID4iJDEubmV3IgorCQltdiAiJDEubmV3IiAiJDEiCisJRU9GCisJd3JpdGVfc2NyaXB0IGZhaWxpbmdmYWtlZWRpdG9yIDw8LVxFT0YKKwkJLi9mYWtlZWRpdG9yICIkQCIKKwkJZmFsc2UKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1lZGl0IHdpdGggYW5kIHdpdGhvdXQgYWxyZWFkeSByZXBsYWNlZCBvYmplY3QnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHJlcGxhY2UgLS1lZGl0ICIkUEFSQTMiICYmCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHJlcGxhY2UgLS1mb3JjZSAtLWVkaXQgIiRQQVJBMyIgJiYKKwlnaXQgcmVwbGFjZSAtbCB8IGdyZXAgIiRQQVJBMyIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICIkUEFSQTMiIHwgZ3JlcCAiQSBmYWtlIFRob3IiICYmCisJZ2l0IHJlcGxhY2UgLWQgIiRQQVJBMyIgJiYKKwlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQgcmVwbGFjZSAtLWVkaXQgIiRQQVJBMyIgJiYKKwlnaXQgcmVwbGFjZSAtbCB8IGdyZXAgIiRQQVJBMyIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICIkUEFSQTMiIHwgZ3JlcCAiQSBmYWtlIFRob3IiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZWRpdCBhbmQgY2hhbmdlIG5vdGhpbmcgb3IgY29tbWFuZCBmYWlsZWQnICcKKwlnaXQgcmVwbGFjZSAtZCAiJFBBUkEzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRURJVE9SPXRydWUgZ2l0IHJlcGxhY2UgLS1lZGl0ICIkUEFSQTMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9FRElUT1I9Ii4vZmFpbGluZ2Zha2VlZGl0b3IiIGdpdCByZXBsYWNlIC0tZWRpdCAiJFBBUkEzIiAmJgorCUdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCByZXBsYWNlIC0tZWRpdCAiJFBBUkEzIiAmJgorCWdpdCByZXBsYWNlIC1sIHwgZ3JlcCAiJFBBUkEzIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgIiRQQVJBMyIgfCBncmVwICJBIGZha2UgVGhvciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSByZWYgY2xlYW51cCcgJworCXRlc3QgLW4gIiQoZ2l0IHJlcGxhY2UpIiAmJgorCWdpdCByZXBsYWNlIC1kICQoZ2l0IHJlcGxhY2UpICYmCisJdGVzdCAteiAiJChnaXQgcmVwbGFjZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhZnQgd2l0aCBhbmQgd2l0aG91dCBhbHJlYWR5IHJlcGxhY2VkIG9iamVjdCcgJworCWdpdCBsb2cgLS1vbmVsaW5lID5sb2cgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA3IGxvZyAmJgorCWdpdCByZXBsYWNlIC0tZ3JhZnQgJEhBU0g1ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmxvZyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgbG9nICYmCisJY29tbWl0X2hhc19wYXJlbnRzICRIQVNINSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC0tZ3JhZnQgJEhBU0g1ICRIQVNINCAkSEFTSDMgJiYKKwlnaXQgcmVwbGFjZSAtLWZvcmNlIC1nICRIQVNINSAkSEFTSDQgJEhBU0gzICYmCisJY29tbWl0X2hhc19wYXJlbnRzICRIQVNINSAkSEFTSDQgJEhBU0gzICYmCisJZ2l0IHJlcGxhY2UgLWQgJEhBU0g1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhZnQgdXNpbmcgYSB0YWcgYXMgdGhlIG5ldyBwYXJlbnQnICcKKwlnaXQgdGFnIG5ld19wYXJlbnQgJEhBU0g1ICYmCisJZ2l0IHJlcGxhY2UgLS1ncmFmdCAkSEFTSDcgbmV3X3BhcmVudCAmJgorCWNvbW1pdF9oYXNfcGFyZW50cyAkSEFTSDcgJEhBU0g1ICYmCisJZ2l0IHJlcGxhY2UgLWQgJEhBU0g3ICYmCisJZ2l0IHRhZyAtYSAtbSAiYW5ub3RhdGVkIG5ldyBwYXJlbnQgdGFnIiBhbm5vdGF0ZWRfbmV3X3BhcmVudCAkSEFTSDUgJiYKKwlnaXQgcmVwbGFjZSAtLWdyYWZ0ICRIQVNINyBhbm5vdGF0ZWRfbmV3X3BhcmVudCAmJgorCWNvbW1pdF9oYXNfcGFyZW50cyAkSEFTSDcgJEhBU0g1ICYmCisJZ2l0IHJlcGxhY2UgLWQgJEhBU0g3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhZnQgdXNpbmcgYSB0YWcgYXMgdGhlIHJlcGxhY2VkIG9iamVjdCcgJworCWdpdCB0YWcgcmVwbGFjZWRfb2JqZWN0ICRIQVNINyAmJgorCWdpdCByZXBsYWNlIC0tZ3JhZnQgcmVwbGFjZWRfb2JqZWN0ICRIQVNINSAmJgorCWNvbW1pdF9oYXNfcGFyZW50cyAkSEFTSDcgJEhBU0g1ICYmCisJZ2l0IHJlcGxhY2UgLWQgJEhBU0g3ICYmCisJZ2l0IHRhZyAtYSAtbSAiYW5ub3RhdGVkIHJlcGxhY2VkIG9iamVjdCB0YWciIGFubm90YXRlZF9yZXBsYWNlZF9vYmplY3QgJEhBU0g3ICYmCisJZ2l0IHJlcGxhY2UgLS1ncmFmdCBhbm5vdGF0ZWRfcmVwbGFjZWRfb2JqZWN0ICRIQVNINSAmJgorCWNvbW1pdF9oYXNfcGFyZW50cyAkSEFTSDcgJEhBU0g1ICYmCisJZ2l0IHJlcGxhY2UgLWQgJEhBU0g3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzZXQgdXAgYSBzaWduZWQgY29tbWl0JyAnCisJZWNobyAibGluZSAxNyIgPj5oZWxsbyAmJgorCWVjaG8gImxpbmUgMTgiID4+aGVsbG8gJiYKKwlnaXQgYWRkIGhlbGxvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1TIC1tICJoZWxsbzogMiBtb3JlIGxpbmVzIGluIGEgc2lnbmVkIGNvbW1pdCIgJiYKKwlIQVNIOD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgdmVyaWZ5LWNvbW1pdCAkSEFTSDgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJy0tZ3JhZnQgd2l0aCBhIHNpZ25lZCBjb21taXQnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICRIQVNIOCA+b3JpZyAmJgorCWdpdCByZXBsYWNlIC0tZ3JhZnQgJEhBU0g4ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDggPnJlcGwgJiYKKwljb21taXRfaGFzX3BhcmVudHMgJEhBU0g4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1jb21taXQgJEhBU0g4ICYmCisJc2VkIC1uIC1lICIvXnRyZWUgL3AiIC1lICIvXmF1dGhvciAvcCIgLWUgIi9eY29tbWl0dGVyIC9wIiBvcmlnID5leHBlY3RlZCAmJgorCWVjaG8gPj5leHBlY3RlZCAmJgorCXNlZCAtZSAiL14kL3EiIHJlcGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXBsYWNlIC1kICRIQVNIOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2V0IHVwIGEgbWVyZ2UgY29tbWl0IHdpdGggYSBtZXJnZXRhZycgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0X2JyYW5jaCBIRUFEfjIgJiYKKwllY2hvICJsaW5lIDEgZnJvbSB0ZXN0IGJyYW5jaCIgPj5oZWxsbyAmJgorCWVjaG8gImxpbmUgMiBmcm9tIHRlc3QgYnJhbmNoIiA+PmhlbGxvICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImhlbGxvOiAyIG1vcmUgbGluZXMgZnJvbSBhIHRlc3QgYnJhbmNoIiAmJgorCUhBU0g5PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCB0YWcgLXMgLW0gInRhZyBmb3IgdGVzdGluZyB3aXRoIGEgbWVyZ2V0YWciIHRlc3RfdGFnIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgdGVzdF90YWcgJiYKKwlIQVNIMTA9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDEwIHwgZ3JlcCAiXm1lcmdldGFnIG9iamVjdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJy0tZ3JhZnQgb24gYSBjb21taXQgd2l0aCBhIG1lcmdldGFnJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLS1ncmFmdCAkSEFTSDEwICRIQVNIOF4xICYmCisJZ2l0IHJlcGxhY2UgLS1ncmFmdCAkSEFTSDEwICRIQVNIOF4xICRIQVNIOSAmJgorCWdpdCByZXBsYWNlIC1kICRIQVNIMTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb252ZXJ0LWdyYWZ0LWZpbGUnICcKKwlnaXQgY2hlY2tvdXQgLWIgd2l0aC1ncmFmdC1maWxlICYmCisJdGVzdF9jb21taXQgcm9vdDIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHJvb3QyXiAmJgorCXRlc3RfY29tbWl0IHJvb3QxICYmCisJdGVzdF9jb21taXQgYWZ0ZXItcm9vdDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gbWVyZ2Utcm9vdDIgcm9vdDIgJiYKKworCTogYWRkIGFuZCBjb252ZXJ0IGdyYWZ0IGZpbGUgJiYKKwlwcmludGYgIiVzXG4lcyAlc1xuXG4jIGNvbW1lbnRcbiVzXG4iIFwKKwkJJChnaXQgcmV2LXBhcnNlIEhFQUReXiBIRUFEXiBIRUFEXl4gSEVBRF4yKSBcCisJCT4uZ2l0L2luZm8vZ3JhZnRzICYmCisJZ2l0IHN0YXR1cyAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImhpbnQ6LipncmFmdHMgaXMgZGVwcmVjYXRlZCIgc3RkZXJyICYmCisJZ2l0IHJlcGxhY2UgLS1jb252ZXJ0LWdyYWZ0LWZpbGUgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgImhpbnQ6LipncmFmdHMgaXMgZGVwcmVjYXRlZCIgc3RkZXJyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9pbmZvL2dyYWZ0cyAmJgorCisJOiB2ZXJpZnkgdGhhdCB0aGUgaGlzdG9yeSBpcyBub3cgImdyYWZ0ZWQiICYmCisJZ2l0IHJldi1saXN0IEhFQUQgPm91dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0ICYmCisKKwk6IGNyZWF0ZSBpbnZhbGlkIGdyYWZ0IGZpbGUgYW5kIHZlcmlmeSB0aGF0IGl0IGlzIG5vdCBkZWxldGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2luZm8vZ3JhZnRzIiAmJgorCWVjaG8gJEVNUFRZX0JMT0IgJEVNUFRZX1RSRUUgPi5naXQvaW5mby9ncmFmdHMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtLWNvbnZlcnQtZ3JhZnQtZmlsZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIiRFTVBUWV9CTE9CICRFTVBUWV9UUkVFIiBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICIkRU1QVFlfQkxPQiAkRU1QVFlfVFJFRSIgLmdpdC9pbmZvL2dyYWZ0cworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNjAtbWVyZ2UtaW5kZXguc2ggYi90L3Q2MDYwLW1lcmdlLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRkZjM0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDYwLW1lcmdlLWluZGV4LnNoCkBAIC0wLDAgKzEsOTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyBnaXQgbWVyZ2UtaW5kZXggLyBnaXQtbWVyZ2Utb25lLWZpbGUgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGl2ZXJnaW5nIGJyYW5jaGVzJyAnCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTA7IGRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHRhZyBiYXNlICYmCisJc2VkIHMvMi90d28vIDxmaWxlID50bXAgJiYKKwltdiB0bXAgZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHRhZyB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgSEVBRF4gJiYKKwlzZWQgcy8xMC90ZW4vIDxmaWxlID50bXAgJiYKKwltdiB0bXAgZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdGVuICYmCisJZ2l0IHRhZyB0ZW4KKycKKworY2F0ID5leHBlY3QtbWVyZ2VkIDw8J0VPRicKKzEKK3R3bworMworNAorNQorNgorNworOAorOQordGVuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIGRvZXMgbm90IHJlc29sdmUgY29udGVudCBtZXJnZScgJworCWdpdCByZWFkLXRyZWUgLWkgLW0gYmFzZSB0ZW4gdHdvICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSAtLWRpZmYtZmlsdGVyPVUgPnVubWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IHVubWVyZ2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgcmVzb2x2ZXMnICcKKwlnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIC1hICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1VID51bm1lcmdlZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bm1lcmdlZCAmJgorCXRlc3RfY21wIGV4cGVjdC1tZXJnZWQgZmlsZSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDpmaWxlID5maWxlLWluZGV4ICYmCisJdGVzdF9jbXAgZXhwZWN0LW1lcmdlZCBmaWxlLWluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUgbWVyZ2UnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5naXQgJiYKKwkoY2QgYmFyZS5naXQgJiYKKwkgR0lUX0lOREVYX0ZJTEU9JFBXRC9tZXJnZS5pbmRleCAmJgorCSBleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkgZ2l0IHJlYWQtdHJlZSAtaSAtbSBiYXNlIHRlbiB0d28KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW9uZS1maWxlIGZhaWxzIHdpdGhvdXQgYSB3b3JrIHRyZWUnICcKKwkoY2QgYmFyZS5naXQgJiYKKwkgR0lUX0lOREVYX0ZJTEU9JFBXRC9tZXJnZS5pbmRleCAmJgorCSBleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSAtYQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Utb25lLWZpbGUgcmVzcGVjdHMgR0lUX1dPUktfVFJFRScgJworCShjZCBiYXJlLmdpdCAmJgorCSBta2RpciB3b3JrICYmCisJIEdJVF9XT1JLX1RSRUU9JFBXRC93b3JrICYmCisJIGV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJIEdJVF9JTkRFWF9GSUxFPSRQV0QvbWVyZ2UuaW5kZXggJiYKKwkgZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgLWEgJiYKKwkgZ2l0IGNhdC1maWxlIGJsb2IgOmZpbGUgPndvcmsvZmlsZS1pbmRleAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbWVyZ2VkIGJhcmUuZ2l0L3dvcmsvZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdC1tZXJnZWQgYmFyZS5naXQvd29yay9maWxlLWluZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW9uZS1maWxlIHJlc3BlY3RzIGNvcmUud29ya3RyZWUnICcKKwlta2RpciBzdWJkaXIgJiYKKwlnaXQgY2xvbmUgLiBzdWJkaXIvY2hpbGQgJiYKKwkoY2Qgc3ViZGlyICYmCisJIEdJVF9ESVI9JFBXRC9jaGlsZC8uZ2l0ICYmCisJIGV4cG9ydCBHSVRfRElSICYmCisJIGdpdCBjb25maWcgY29yZS53b3JrdHJlZSAiJFBXRC9jaGlsZCIgJiYKKwkgZ2l0IHJlYWQtdHJlZSAtaSAtbSBiYXNlIHRlbiB0d28gJiYKKwkgZ2l0IG1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSAtYSAmJgorCSBnaXQgY2F0LWZpbGUgYmxvYiA6ZmlsZSA+ZmlsZS1pbmRleAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbWVyZ2VkIHN1YmRpci9jaGlsZC9maWxlICYmCisJdGVzdF9jbXAgZXhwZWN0LW1lcmdlZCBzdWJkaXIvZmlsZS1pbmRleAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMDAtcmV2LWxpc3QtaW4tb3JkZXIuc2ggYi90L3Q2MTAwLXJldi1saXN0LWluLW9yZGVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyYmIwYTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MTAwLXJldi1saXN0LWluLW9yZGVyLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXYtbGlzdCB0ZXN0aW5nIGluLWNvbW1pdC1vcmRlcicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgY29tbWl0IGhpc3Rvcnkgd2l0aCB0cmVlcywgYmxvYnMnICcKKwlmb3IgeCBpbiBvbmUgdHdvIHRocmVlIGZvdXIKKwlkbworCQllY2hvICR4ID4keCAmJgorCQlnaXQgYWRkICR4ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBmaWxlICR4IiB8fAorCQlyZXR1cm4gMQorCWRvbmUgJiYKKwlmb3IgeCBpbiBmb3VyIHRocmVlCisJZG8KKwkJZ2l0IHJtICR4ICYmCisJCWdpdCBjb21taXQgLW0gInJlbW92ZSAkeCIgfHwKKwkJcmV0dXJuIDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0taW4tY29tbWl0LW9yZGVyJyAnCisJZ2l0IHJldi1saXN0IC0taW4tY29tbWl0LW9yZGVyIC0tb2JqZWN0cyBIRUFEID5hY3R1YWwucmF3ICYmCisJY3V0IC1jIDEtNDAgPmFjdHVhbCA8YWN0dWFsLnJhdyAmJgorCisJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiUob2JqZWN0bmFtZSkiID5leHBlY3QucmF3IDw8LVxFT0YgJiYKKwkJSEVBRF57Y29tbWl0fQorCQlIRUFEXnt0cmVlfQorCQlIRUFEXnt0cmVlfTpvbmUKKwkJSEVBRF57dHJlZX06dHdvCisJCUhFQUR+MV57Y29tbWl0fQorCQlIRUFEfjFee3RyZWV9CisJCUhFQUR+MV57dHJlZX06dGhyZWUKKwkJSEVBRH4yXntjb21taXR9CisJCUhFQUR+Ml57dHJlZX0KKwkJSEVBRH4yXnt0cmVlfTpmb3VyCisJCUhFQUR+M157Y29tbWl0fQorCQkjIEhFQUR+M157dHJlZX0gc2tpcHBlZCwgc2FtZSBhcyBIRUFEfjFee3RyZWV9CisJCUhFQUR+NF57Y29tbWl0fQorCQkjIEhFQUR+NF57dHJlZX0gc2tpcHBlZCwgc2FtZSBhcyBIRUFEXnt0cmVlfQorCQlIRUFEfjVee2NvbW1pdH0KKwkJSEVBRH41Xnt0cmVlfQorCUVPRgorCWdyZXAgLXYgIiMiID5leHBlY3QgPGV4cGVjdC5yYXcgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgbGlzdHMgYmxvYnMgYW5kIHRyZWVzIGFmdGVyIGNvbW1pdHMnICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgPmFjdHVhbC5yYXcgJiYKKwljdXQgLWMgMS00MCA+YWN0dWFsIDxhY3R1YWwucmF3ICYmCisKKwlnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0iJShvYmplY3RuYW1lKSIgPmV4cGVjdC5yYXcgPDwtXEVPRiAmJgorCQlIRUFEXntjb21taXR9CisJCUhFQUR+MV57Y29tbWl0fQorCQlIRUFEfjJee2NvbW1pdH0KKwkJSEVBRH4zXntjb21taXR9CisJCUhFQUR+NF57Y29tbWl0fQorCQlIRUFEfjVee2NvbW1pdH0KKwkJSEVBRF57dHJlZX0KKwkJSEVBRF57dHJlZX06b25lCisJCUhFQURee3RyZWV9OnR3bworCQlIRUFEfjFee3RyZWV9CisJCUhFQUR+MV57dHJlZX06dGhyZWUKKwkJSEVBRH4yXnt0cmVlfQorCQlIRUFEfjJee3RyZWV9OmZvdXIKKwkJIyBIRUFEfjNee3RyZWV9IHNraXBwZWQsIHNhbWUgYXMgSEVBRH4xXnt0cmVlfQorCQkjIEhFQUR+NF57dHJlZX0gc2tpcHBlZCwgc2FtZSBhcyBIRUFEXnt0cmVlfQorCQlIRUFEfjVee3RyZWV9CisJRU9GCisJZ3JlcCAtdiAiIyIgPmV4cGVjdCA8ZXhwZWN0LnJhdyAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMDEtcmV2LXBhcnNlLXBhcmVudHMuc2ggYi90L3Q2MTAxLXJldi1wYXJzZS1wYXJlbnRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2ODNlNGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MTAxLXJldi1wYXJzZS1wYXJlbnRzLnNoCkBAIC0wLDAgKzEsMjI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgcmV2LXBhcnNlIHdpdGggZGlmZmVyZW50IHBhcmVudCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9jbXBfcmV2X291dHB1dCAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiID5leHBlY3QgJiYKKwlldmFsICIkMiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBzdGFydCAmJgorCXRlc3RfY29tbWl0IHNlY29uZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiB0bXAgJiYKKwl0ZXN0X2NvbW1pdCBzdGFydDIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1tIG5leHQgLS1hbGxvdy11bnJlbGF0ZWQtaGlzdG9yaWVzIHN0YXJ0MiAmJgorCXRlc3RfY29tbWl0IGZpbmFsICYmCisKKwl0ZXN0X3NlcSA0MCB8CisJd2hpbGUgcmVhZCBpCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuICJiJGkiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIiRpIiAmJgorCQljb21taXQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJCXByaW50ZiAiJGNvbW1pdCAiID4+LmdpdC9pbmZvL2dyYWZ0cworCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgaXMgdmFsaWQnICcKKwlnaXQgcmV2LXBhcnNlIHN0YXJ0IHwgZ3JlcCAiXlswLTlhLWZdXHs0MFx9JCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnReMCcgJworCXRlc3RfY21wX3Jldl9vdXRwdXQgdGFncy9zdGFydCAiZ2l0IHJldi1wYXJzZSBzdGFydF4wIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydF4xIG5vdCB2YWxpZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3RhcnReMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWNvbmReMSA9IHNlY29uZF4nICcKKwl0ZXN0X2NtcF9yZXZfb3V0cHV0IHNlY29uZF4gImdpdCByZXYtcGFyc2Ugc2Vjb25kXjEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMV4xJyAnCisJdGVzdF9jbXBfcmV2X291dHB1dCBzdGFydCAiZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjFeMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxeMV4xXjEgPSBmaW5hbF5eXicgJworCXRlc3RfY21wX3Jldl9vdXRwdXQgZmluYWxeXl4gImdpdCByZXYtcGFyc2UgZmluYWxeMV4xXjEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMicgJworCXRlc3RfY21wX3Jldl9vdXRwdXQgc3RhcnQyICJnaXQgcmV2LXBhcnNlIGZpbmFsXjFeMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxeMV4yICE9IGZpbmFsXjFeMScgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIGZpbmFsXjFeMikgIT0gJChnaXQgcmV2LXBhcnNlIGZpbmFsXjFeMSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxeMV4zIG5vdCB2YWxpZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZmluYWxeMV4zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tdmVyaWZ5IHN0YXJ0Ml4xJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdGFydDJeMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXZlcmlmeSBzdGFydDJeMCcgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3RhcnQyXjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxeMV5AID0gZmluYWxeMV4xIGZpbmFsXjFeMicgJworCWdpdCByZXYtcGFyc2UgZmluYWxeMV4xIGZpbmFsXjFeMiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBmaW5hbF4xXkAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMgZmluYWxeMV5AID0gZmluYWxeMV4xIGZpbmFsXjFeMicgJworCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyBmaW5hbF4xXjEgZmluYWxeMV4yID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgZmluYWxeMV5AID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeISA9IGZpbmFsXjEgXmZpbmFsXjFeMSBeZmluYWxeMV4yJyAnCisJZ2l0IHJldi1wYXJzZSBmaW5hbF4xIF5maW5hbF4xXjEgXmZpbmFsXjFeMiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBmaW5hbF4xXiEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMgZmluYWxeMV4hID0gZmluYWxeMSBeZmluYWxeMV4xIF5maW5hbF4xXjInICcKKwlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgZmluYWxeMSBeZmluYWxeMV4xIF5maW5hbF4xXjIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyBmaW5hbF4xXiEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFyZ2UgZ3JhZnQgb2N0b3B1cycgJworCXRlc3RfY21wX3Jldl9vdXRwdXQgYjMxICJnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGIxXjMwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgZm9yIG5leHQgdGVzdCcgJworCWdpdCByZXBhY2sgLWEgLWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgU0hBLTEgd29ya3MnICcKKwlzdGFydD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3RhcnQpICYmCisJdGVzdF9jbXBfcmV2X291dHB1dCBzdGFydCAiZ2l0IHJldi1wYXJzZSAke3N0YXJ0JT99IgorJworCisjIHJldl4tIHRlc3RzOyB3ZSBjYW4gdXNlIGEgc2ltcGxlciBzZXR1cCBmb3IgdGhlc2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHJldl4tIHRlc3RzJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKworCSMgTWVyZ2UgaW4gYSBicmFuY2ggZm9yIHRlc3RpbmcgcmV2Xi0KKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReXiAmJgorCWdpdCBtZXJnZSAtbSBtZXJnZSAtLW5vLWVkaXQgLS1uby1mZiBicmFuY2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2UKKycKKworIyBUaGUgbWVyZ2VkIGJyYW5jaCBoYXMgMiBjb21taXRzICsgdGhlIG1lcmdlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWNvdW50IG1lcmdlXi0gPSBtZXJnZV4uLm1lcmdlJyAnCisJZ2l0IHJldi1saXN0IC0tY291bnQgbWVyZ2VeLi5tZXJnZSA+ZXhwZWN0ICYmCisJZWNobyAzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgQWxsIHJldl4tIHJldi1wYXJzZSB0ZXN0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgbWVyZ2VeLSA9IG1lcmdlXi4ubWVyZ2UnICcKKwlnaXQgcmV2LXBhcnNlIG1lcmdlXi4ubWVyZ2UgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgbWVyZ2VeLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgbWVyZ2VeLTEgPSBtZXJnZV4uLm1lcmdlJyAnCisJZ2l0IHJldi1wYXJzZSBtZXJnZV4xLi5tZXJnZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBtZXJnZV4tMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgbWVyZ2VeLTIgPSBtZXJnZV4yLi5tZXJnZScgJworCWdpdCByZXYtcGFyc2UgbWVyZ2VeMi4ubWVyZ2UgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgbWVyZ2VeLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMgbWVyZ2VeLTEgPSBtZXJnZV4xLi5tZXJnZScgJworCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyBtZXJnZV4xLi5tZXJnZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIG1lcmdlXi0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSBtZXJnZV4tMCAoaW52YWxpZCBwYXJlbnQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBtZXJnZV4tMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgbWVyZ2VeLTMgKGludmFsaWQgcGFyZW50KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWVyZ2VeLTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIG1lcmdlXi1eIChnYXJiYWdlIGFmdGVyIF4tKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWVyZ2VeLV4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIG1lcmdlXi0xeCAoZ2FyYmFnZSBhZnRlciBeLTEpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBtZXJnZV4tMXgKKycKKworIyBBbGwgcmV2Xi0gcmV2LWxpc3QgdGVzdHMgKHNob3VsZCBiZSBtb3N0bHkgdGhlIHNhbWUgYXMgcmV2LXBhcnNlOyB0aGUgcmVhc29uCisjIGZvciB0aGUgZHVwbGljYXRpb24gaXMgdGhhdCByZXYtcGFyc2UgYW5kIHJldi1saXN0IHVzZSBkaWZmZXJlbnQgcGFyc2VycykuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG1lcmdlXi0gPSBtZXJnZV4uLm1lcmdlJyAnCisJZ2l0IHJldi1saXN0IG1lcmdlXi4ubWVyZ2UgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCBtZXJnZV4tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG1lcmdlXi0xID0gbWVyZ2VeMS4ubWVyZ2UnICcKKwlnaXQgcmV2LWxpc3QgbWVyZ2VeMS4ubWVyZ2UgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCBtZXJnZV4tMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBtZXJnZV4tMiA9IG1lcmdlXjIuLm1lcmdlJyAnCisJZ2l0IHJldi1saXN0IG1lcmdlXjIuLm1lcmdlID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgbWVyZ2VeLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgbWVyZ2VeLTAgKGludmFsaWQgcGFyZW50KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCBtZXJnZV4tMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBtZXJnZV4tMyAoaW52YWxpZCBwYXJlbnQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IG1lcmdlXi0zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG1lcmdlXi1eIChnYXJiYWdlIGFmdGVyIF4tKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCBtZXJnZV4tXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBtZXJnZV4tMXggKGdhcmJhZ2UgYWZ0ZXIgXi0xKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCBtZXJnZV4tMXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlICRnYXJiYWdlXkAgZG9lcyBub3Qgc2VnZmF1bHQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlICRFTVBUWV9UUkVFXkAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlICRnYXJiYWdlLi4uJGdhcmJhZ2UgZG9lcyBub3Qgc2VnZmF1bHQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlICRFTVBUWV9UUkVFLi4uJEVNUFRZX0JMT0IKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTAyLXJldi1saXN0LXVuZXhwZWN0ZWQtb2JqZWN0cy5zaCBiL3QvdDYxMDItcmV2LWxpc3QtdW5leHBlY3RlZC1vYmplY3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUyY2RlMDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MTAyLXJldi1saXN0LXVuZXhwZWN0ZWQtb2JqZWN0cy5zaApAQCAtMCwwICsxLDEyNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXYtbGlzdCBzaG91bGQgaGFuZGxlIHVuZXhwZWN0ZWQgb2JqZWN0IHR5cGVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgd2VsbC1mb3JtZWQgb2JqZWN0cycgJworCWJsb2I9IiQocHJpbnRmICJmb28iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pIiAmJgorCXRyZWU9IiQocHJpbnRmICIxMDA2NDQgYmxvYiAkYmxvYlx0Zm9vIiB8IGdpdCBta3RyZWUpIiAmJgorCWNvbW1pdD0iJChnaXQgY29tbWl0LXRyZWUgJHRyZWUgLW0gImZpcnN0IGNvbW1pdCIpIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgJGNvbW1pdCA+Z29vZC1jb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5leHBlY3RlZCBub24tYmxvYiBlbnRyeScgJworCXByaW50ZiAiMTAwNjQ0IGZvb1wwJChlY2hvICR0cmVlIHwgaGV4Mm9jdCkiID5icm9rZW4tdHJlZSAmJgorCWJyb2tlbl90cmVlPSIkKGdpdCBoYXNoLW9iamVjdCAtdyAtLWxpdGVyYWxseSAtdCB0cmVlIGJyb2tlbi10cmVlKSIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tYmxvYiBlbnRyeSAobG9uZSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRicm9rZW5fdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi1ibG9iIGVudHJ5IChzZWVuKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgJHRyZWUgJGJyb2tlbl90cmVlID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgImlzIG5vdCBhIGJsb2IiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmV4cGVjdGVkIG5vbi10cmVlIGVudHJ5JyAnCisJcHJpbnRmICI0MDAwMCBmb29cMCQoZWNobyAkYmxvYiB8IGhleDJvY3QpIiA+YnJva2VuLXRyZWUgJiYKKwlicm9rZW5fdHJlZT0iJChnaXQgaGFzaC1vYmplY3QgLXcgLS1saXRlcmFsbHkgLXQgdHJlZSBicm9rZW4tdHJlZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLXRyZWUgZW50cnkgKGxvbmUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkYnJva2VuX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tdHJlZSBlbnRyeSAoc2VlbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRibG9iICRicm9rZW5fdHJlZSA+b3V0cHV0IDI+JjEgJiYKKwl0ZXN0X2kxOG5ncmVwICJpcyBub3QgYSB0cmVlIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5leHBlY3RlZCBub24tY29tbWl0IHBhcmVudCcgJworCXNlZCAiL15hdXRob3IvIHsgaDsgcy8uKi9wYXJlbnQgJGJsb2IvOyBHOyB9IiA8Z29vZC1jb21taXQgXAorCQk+YnJva2VuLWNvbW1pdCAmJgorCWJyb2tlbl9jb21taXQ9IiQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tbGl0ZXJhbGx5IC10IGNvbW1pdCBcCisJCWJyb2tlbi1jb21taXQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi1jb21taXQgcGFyZW50IChsb25lKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGJyb2tlbl9jb21taXQgPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAibm90IGEgY29tbWl0IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tY29tbWl0IHBhcmVudCAoc2VlbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRibG9iICRicm9rZW5fY29tbWl0IFwKKwkJPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAibm90IGEgY29tbWl0IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5leHBlY3RlZCBub24tdHJlZSByb290JyAnCisJc2VkIC1lICJzLyR0cmVlLyRibG9iLyIgPGdvb2QtY29tbWl0ID5icm9rZW4tY29tbWl0ICYmCisJYnJva2VuX2NvbW1pdD0iJChnaXQgaGFzaC1vYmplY3QgLXcgLS1saXRlcmFsbHkgLXQgY29tbWl0IFwKKwkJYnJva2VuLWNvbW1pdCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLXRyZWUgcm9vdCAobG9uZSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRicm9rZW5fY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLXRyZWUgcm9vdCAoc2VlbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRibG9iICRicm9rZW5fY29tbWl0IFwKKwkJPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAibm90IGEgdHJlZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVuZXhwZWN0ZWQgbm9uLWNvbW1pdCB0YWcnICcKKwlnaXQgdGFnIC1hIC1tICJ0YWdnZWQgY29tbWl0IiB0YWcgJGNvbW1pdCAmJgorCWdpdCBjYXQtZmlsZSB0YWcgdGFnID5nb29kLXRhZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCB0YWciICYmCisJc2VkIC1lICJzLyRjb21taXQvJGJsb2IvIiA8Z29vZC10YWcgPmJyb2tlbi10YWcgJiYKKwl0YWc9JChnaXQgaGFzaC1vYmplY3QgLXcgLS1saXRlcmFsbHkgLXQgdGFnIGJyb2tlbi10YWcpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLWNvbW1pdCB0YWcgKGxvbmUpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLWNvbW1pdCB0YWcgKHNlZW4pJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkYmxvYiAkdGFnID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVuZXhwZWN0ZWQgbm9uLXRyZWUgdGFnJyAnCisJZ2l0IHRhZyAtYSAtbSAidGFnZ2VkIHRyZWUiIHRhZyAkdHJlZSAmJgorCWdpdCBjYXQtZmlsZSB0YWcgdGFnID5nb29kLXRhZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCB0YWciICYmCisJc2VkIC1lICJzLyR0cmVlLyRibG9iLyIgPGdvb2QtdGFnID5icm9rZW4tdGFnICYmCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tbGl0ZXJhbGx5IC10IHRhZyBicm9rZW4tdGFnKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi10cmVlIHRhZyAobG9uZSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICR0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tdHJlZSB0YWcgKHNlZW4pJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkYmxvYiAkdGFnID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBhIHRyZWUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmV4cGVjdGVkIG5vbi1ibG9iIHRhZycgJworCWdpdCB0YWcgLWEgLW0gInRhZ2dlZCBibG9iIiB0YWcgJGJsb2IgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZyA+Z29vZC10YWcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB0YWcgLWQgdGFnIiAmJgorCXNlZCAtZSAicy8kYmxvYi8kY29tbWl0LyIgPGdvb2QtdGFnID5icm9rZW4tdGFnICYmCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC0tbGl0ZXJhbGx5IC10IHRhZyBicm9rZW4tdGFnKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0cmF2ZXJzZSB1bmV4cGVjdGVkIG5vbi1ibG9iIHRhZyAobG9uZSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICR0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhdmVyc2UgdW5leHBlY3RlZCBub24tYmxvYiB0YWcgKHNlZW4pJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkY29tbWl0ICR0YWcgPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAibm90IGEgYmxvYiIgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjExMC1yZXYtbGlzdC1zcGFyc2Uuc2ggYi90L3Q2MTEwLXJldi1saXN0LXNwYXJzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NTZhYzdmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjExMC1yZXYtbGlzdC1zcGFyc2Uuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J29wZXJhdGlvbnMgdGhhdCBjdWxsIGhpc3RvcmllcyBpbiB1bnVzdWFsIHdheXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCBEICYmCisJdGVzdF9jb21taXQgRSAmJgorCWdpdCBtZXJnZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1ib3VuZGFyeScgJworCWdpdCByZXYtbGlzdCAtLWZpcnN0LXBhcmVudCAtLWJvdW5kYXJ5IEhFQUReLi4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTExLXJldi1saXN0LXRyZWVzYW1lLnNoIGIvdC90NjExMS1yZXYtbGlzdC10cmVlc2FtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjQ0NjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjExMS1yZXYtbGlzdC10cmVlc2FtZS5zaApAQCAtMCwwICsxLDE5MyBAQAorIyEvYmluL3NoCisjCisjICAgICAgICAsLS0tRS0tLiAgICpILS0tLS0tLS0tLS4gICAgICAgICAgICAgKiBtYXJrcyAhVFJFRVNBTUUgcGFyZW50IHBhdGhzCisjICAgICAgIC8gICAgICAgIFwgLyAgICAgICAgICAgICBcKgorIyAqQS0tKkItLS1ELS0qRi0qRy0tLS0tLS0tLUstKkwtKk0KKyMgICBcICAgICAvKiAgICAgICBcICAgICAgIC8KKyMgICAgYC1DLScgICAgICAgICAgYC0qSS0qSgorIworIyBBIGNyZWF0ZXMgImZpbGUiLCBCIGFuZCBGIGNoYW5nZSBpdC4KKyMgT2RkIG1lcmdlIEcgdGFrZXMgdGhlIG9sZCB2ZXJzaW9uIGZyb20gQi4KKyMgSSBjaGFuZ2VzIGl0LCBidXQgSiByZXZlcnRzIGl0LCBzbyBLIGlzIFRSRUVTQU1FIHRvIGJvdGggcGFyZW50cy4KKyMgSCBhbmQgTCBib3RoIGNoYW5nZSAiZmlsZSIsIGFuZCBNIG1lcmdlcyB0aG9zZSBjaGFuZ2VzLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUUkVFU0FNRSBhbmQgbGltaXRpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCitub3RlICgpIHsKKwlnaXQgdGFnICIkMSIKK30KKwordW5ub3RlICgpIHsKKwlnaXQgbmFtZS1yZXYgLS10YWdzIC0tc3RkaW4gfCBzZWQgLWUgInN8JE9JRF9SRUdFWCAodGFncy9cKFteKV0qXCkpXChbIAldXCl8XDFcMnxnIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCAiSW5pdGlhbCBmaWxlIiBmaWxlICJIaSB0aGVyZSIgQSAmJgorCWdpdCBicmFuY2ggb3RoZXItYnJhbmNoICYmCisKKwl0ZXN0X2NvbW1pdCAiZmlsZT1IZWxsbyIgZmlsZSAiSGVsbG8iIEIgJiYKKwlnaXQgYnJhbmNoIHRoaXJkLWJyYW5jaCAmJgorCisJZ2l0IGNoZWNrb3V0IG90aGVyLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0ICJBZGRlZCBvdGhlciIgb3RoZXIgIkhlbGxvIiBDICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tZXJnZSBEIG90aGVyLWJyYW5jaCAmJgorCisJZ2l0IGNoZWNrb3V0IHRoaXJkLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0ICJUaGlyZCBmaWxlIiB0aGlyZCAiTm90aGluZyIgRSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0ICJmaWxlPUJsYWgiIGZpbGUgIkJsYWgiIEYgJiYKKworCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLS1uby1jb21taXQgdGhpcmQtYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IHRoaXJkLWJyYW5jaCBmaWxlICYmCisJZ2l0IGNvbW1pdCAmJgorCW5vdGUgRyAmJgorCWdpdCBicmFuY2ggZmlkZGxlci1icmFuY2ggJiYKKworCWdpdCBjaGVja291dCAtYiBwYXJ0Mi1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAiZmlsZT1QYXJ0IDIiIGZpbGUgIlBhcnQgMiIgSCAmJgorCisJZ2l0IGNoZWNrb3V0IGZpZGRsZXItYnJhbmNoICYmCisJdGVzdF9jb21taXQgIkJhZCBjb21taXQiIGZpbGUgIlNpbGx5IiBJICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IHJldmVydCBJICYmIG5vdGUgSiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLS1uby1mZiBmaWRkbGVyLWJyYW5jaCAmJgorCW5vdGUgSyAmJgorCisJdGVzdF9jb21taXQgImZpbGU9UGFydCAxIiBmaWxlICJQYXJ0IDEiIEwgJiYKKworCXRlc3RfdGljayAmJiB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgcGFydDItYnJhbmNoICYmCisJdGVzdF9jb21taXQgTSBmaWxlICJQYXJ0cyAxKzIiCisnCisKK2NoZWNrX291dGNvbWUgKCkgeworCW91dGNvbWU9JDEKKwlzaGlmdAorCisJY2FzZSAiJDEiIGluCisJKiIoIiopCisJCUZNVD0iJVAJJUggfCAlcyIKKwkJbXVuZ2VfYWN0dWFsPSIKKwkJCXMvXlwoW14JXSpcKQlcKFteIF0qXCkgLiovKFwxKVwyLworCQkJcy8gLy9nCisJCQlzLygpLy8KKwkJIgorCQk7OworCSopCisJCUZNVD0iJUggfCAlcyIKKwkJbXVuZ2VfYWN0dWFsPSJzL15cKFteIF0qXCkgLiovXDEvIgorCQk7OworCWVzYWMgJiYKKwlwcmludGYgIiVzXG4iICQxID5leHBlY3QgJiYKKwlzaGlmdAorCisJcGFyYW09IiQqIiAmJgorCXRlc3RfZXhwZWN0XyRvdXRjb21lICJsb2cgJHBhcmFtIiAnCisJCWdpdCBsb2cgLS1mb3JtYXQ9IiRGTVQiICRwYXJhbSB8CisJCXVubm90ZSA+YWN0dWFsICYmCisJCXNlZCAtZSAiJG11bmdlX2FjdHVhbCIgPGFjdHVhbCA+Y2hlY2sgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGNoZWNrCisJJworfQorCitjaGVja19yZXN1bHQgKCkgeworCWNoZWNrX291dGNvbWUgc3VjY2VzcyAiJEAiCit9CisKKyMgT2RkIG1lcmdlIEcgZHJvcHMgYSBjaGFuZ2UgaW4gRi4gSW1wb3J0YW50IHRoYXQgRyBpcyBsaXN0ZWQgaW4gYWxsCisjIGV4Y2VwdCB0aGUgbW9zdCBiYXNpYyBsaXN0LiBBY2hpZXZpbmcgdGhpcyBtZWFucyBub3JtYWwgbWVyZ2UgRCB3aWxsIGFsc28gYmUKKyMgc2hvd24gaW4gbm9ybWFsIGZ1bGwtaGlzdG9yeSwgYXMgd2UgY2FuJ3QgZGlzdGluZ3Vpc2ggdW5sZXNzIHdlIGRvIGEKKyMgc2ltcGxpZmljYXRpb24gcGFzcy4gQWZ0ZXIgc2ltcGxpZmljYXRpb24sIEQgaXMgZHJvcHBlZCBidXQgRyByZW1haW5zLgorIyBBbHNvLCBtZXJnZSBzaW1wbGlmaWNhdGlvbiBvZiBHIHNob3VsZCBub3QgZHJvcCB0aGUgcGFyZW50IEIgdGhhdCB0aGUgZGVmYXVsdAorIyBzaW1wbGUgaGlzdG9yeSBmb2xsb3dzLgorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCBHIEYgRSBEIEMgQiBBJworY2hlY2tfcmVzdWx0ICcoTEgpTSAoSylMIChHSilLIChJKUogKEcpSSAoRylIIChGRSlHIChEKUYgKEIpRSAoQkMpRCAoQSlDIChBKUIgQScKK2NoZWNrX3Jlc3VsdCAnTSBIIEwgSyBKIEkgRyBFIEYgRCBDIEIgQScgLS10b3BvLW9yZGVyCitjaGVja19yZXN1bHQgJ00gTCBIIEIgQScgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoQilMIChCKUggKEEpQiBBJyAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEggRyBGIEQgQiBBJyAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChLKUwgKEdKKUsgKEkpSiAoRylJIChHKUggKEZCKUcgKEQpRiAoQkEpRCAoQSlCIEEnIC0tZnVsbC1oaXN0b3J5IC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChHKUggKEopTCAoSSlKIChHKUkgKEZCKUcgKEIpRiAoQSlCIEEnIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEsgRyBGIEQgQiBBJyAtLWZpcnN0LXBhcmVudAorY2hlY2tfcmVzdWx0ICdNIEwgRyBGIEIgQScgLS1maXJzdC1wYXJlbnQgLS0gZmlsZQorCisjIENoZWNrIHRoYXQgb2RkIG1lcmdlIEcgcmVtYWlucyBzaG93biB3aGVuIEYgaXMgdGhlIGJvdHRvbS4KK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEggRyBFJyBGLi5NCitjaGVja19yZXN1bHQgJ00gSCBMIEsgSiBJIEcgRScgRi4uTSAtLXRvcG8tb3JkZXIKK2NoZWNrX3Jlc3VsdCAnTSBMIEgnIEYuLk0gLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoQilMIChCKUgnIC0tcGFyZW50cyBGLi5NIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEogSSBIIEcnIEYuLk0gLS1mdWxsLWhpc3RvcnkgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoSylMIChHSilLIChJKUogKEcpSSAoRylIIChGQilHJyBGLi5NIC0tZnVsbC1oaXN0b3J5IC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChHKUggKEopTCAoSSlKIChHKUkgKEZCKUcnIEYuLk0gLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCBHJyBGLi5NIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEggRycgRi4uTSAtLWFuY2VzdHJ5LXBhdGggLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoSylMIChHSilLIChJKUogKEcpSSAoRylIIChGRSlHJyBGLi5NIC0tYW5jZXN0cnktcGF0aCAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoRylIIChKKUwgKEkpSiAoRylJIChGRSlHJyBGLi5NIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEcnIEYuLk0gLS1maXJzdC1wYXJlbnQKK2NoZWNrX3Jlc3VsdCAnTSBMIEcnIEYuLk0gLS1maXJzdC1wYXJlbnQgLS0gZmlsZQorCisjIE5vdGUgdGhhdCBHIGlzIHBydW5lZCB3aGVuIEUgaXMgdGhlIGJvdHRvbSwgZXZlbiBpZiBpdCdzIHRoZSBzYW1lIGNvbW1pdCBsaXN0CisjIElmIHdlIHdhbnQgaGlzdG9yeSBzaW5jZSBFLCB0aGVuIHdlJ3JlIHF1aXRlIGhhcHB5IHRvIGlnbm9yZSBHIHRoYXQgdG9vayBFLgorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCBHJyBFLi5NIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEgnIEUuLk0gLS1hbmNlc3RyeS1wYXRoIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEspTCAoRUopSyAoSSlKIChFKUkgKEUpSCcgRS4uTSAtLWFuY2VzdHJ5LXBhdGggLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEUpSCAoSilMIChJKUogKEUpSScgRS4uTSAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorCisjIFNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGlnbm9yZSBJLUogYnJhbmNoIGluIHNpbXBsZSBsb2csIGRlc3BpdGUgbGltaXRpbmcKKyMgdG8gRy4KK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEgnIEcuLk0KK2NoZWNrX3Jlc3VsdCAnTSBIIEwgSyBKIEknIEcuLk0gLS10b3BvLW9yZGVyCitjaGVja19yZXN1bHQgJ00gTCBIJyBHLi5NIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEcpTCAoRylIJyBHLi5NIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBKIEkgSCcgRy4uTSAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIJyBHLi5NIC0tZnVsbC1oaXN0b3J5IC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gSCBMIEogSScgRy4uTSAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIJyBHLi5NIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEgnIEcuLk0gLS1hbmNlc3RyeS1wYXRoIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEgnIEcuLk0gLS1hbmNlc3RyeS1wYXRoIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gSCBMIEogSScgRy4uTSAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorCisjIEIuLkYgc2hvdWxkIGJlIGFibGUgdG8gc2ltcGxpZnkgdGhlIG1lcmdlIEQgZnJvbSBpcnJlbGV2YW50IHNpZGUgYnJhbmNoIEMuCisjIERlZmF1bHQgbG9nIHNob3VsZCBhbHNvIGJlIGZyZWUgdG8gZm9sbG93IEItRCwgYW5kIGlnbm9yZSBDLgorIyBCdXQgLS1mdWxsLWhpc3Rvcnkgc2hvdWxkbid0IGRyb3AgRCBvbiBpdHMgb3duIC0gd2l0aG91dCBzaW1wbGlmaWNhdGlvbiwKKyMgd2UgY2FuJ3QgZGVjaWRlIGlmIHRoZSBtZXJnZSBmcm9tIElOVEVSRVNUSU5HIGNvbW1pdCBDIHdhcyBzZW5zaWJsZS4KK2NoZWNrX3Jlc3VsdCAnRiBEIEMnIEIuLkYKK2NoZWNrX3Jlc3VsdCAnRicgQi4uRiAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhCKUYnIEIuLkYgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBCLi5GIC0tZnVsbC1oaXN0b3J5IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKEQpRiAoQkEpRCcgQi4uRiAtLWZ1bGwtaGlzdG9yeSAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoQilGJyBCLi5GIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBCLi5GIC0tYW5jZXN0cnktcGF0aAorY2hlY2tfcmVzdWx0ICdGJyBCLi5GIC0tYW5jZXN0cnktcGF0aCAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YnIEIuLkYgLS1hbmNlc3RyeS1wYXRoIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YnIEIuLkYgLS1hbmNlc3RyeS1wYXRoIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBCLi5GIC0tZmlyc3QtcGFyZW50CitjaGVja19yZXN1bHQgJ0YnIEIuLkYgLS1maXJzdC1wYXJlbnQgLS0gZmlsZQorCisjIEUuLi5GIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvIEUgRiBeQiwgYW5kIGJlIGFibGUgdG8gZHJvcCBEIGFzIGFib3ZlLgorY2hlY2tfcmVzdWx0ICdGJyBFIEYgXkIgLS0gZmlsZSAjIGluY2x1ZGVzIEQKK2NoZWNrX3Jlc3VsdCAnRicgRS4uLkYgLS0gZmlsZSAjIGluY2x1ZGVzIEQKKworIyBBbnkgc29ydCBvZiBmdWxsIGhpc3Rvcnkgb2YgQy4uRiBzaG91bGQgc2hvdyBELCBhcyBpdCdzIHRoZSBjb25uZWN0aW9uIHRvIEMsCisjIGFuZCBpdCBkaWZmZXJzIGZyb20gaXQuCitjaGVja19yZXN1bHQgJ0YgRCBCJyBDLi5GCitjaGVja19yZXN1bHQgJ0YgQicgQy4uRiAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhCKUYgKEEpQicgQy4uRiAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQgQicgQy4uRiAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhEKUYgKEJDKUQgKEEpQicgQy4uRiAtLWZ1bGwtaGlzdG9yeSAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoRClGIChCQylEIChBKUInIEMuLkYgLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQnIEMuLkYgLS1hbmNlc3RyeS1wYXRoCitjaGVja19yZXN1bHQgJ0YgRCcgQy4uRiAtLWFuY2VzdHJ5LXBhdGggLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQnIEMuLkYgLS1hbmNlc3RyeS1wYXRoIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCcgQy4uRiAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQgQicgQy4uRiAtLWZpcnN0LXBhcmVudAorY2hlY2tfcmVzdWx0ICdGIEInIEMuLkYgLS1maXJzdC1wYXJlbnQgLS0gZmlsZQorCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjExMi1yZXYtbGlzdC1maWx0ZXJzLW9iamVjdHMuc2ggYi90L3Q2MTEyLXJldi1saXN0LWZpbHRlcnMtb2JqZWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZTBlNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjExMi1yZXYtbGlzdC1maWx0ZXJzLW9iamVjdHMuc2gKQEAgLTAsMCArMSw2MjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3QgdXNpbmcgb2JqZWN0IGZpbHRlcmluZycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGVzdCB0aGUgYmxvYjpub25lIGZpbHRlci4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcjEnICcKKwllY2hvICJ7cHJpbnQgXCQxfSIgPnByaW50XzEuYXdrICYmCisJZWNobyAie3ByaW50IFwkMn0iID5wcmludF8yLmF3ayAmJgorCisJZ2l0IGluaXQgcjEgJiYKKwlmb3IgbiBpbiAxIDIgMyA0IDUKKwlkbworCQllY2hvICJUaGlzIGlzIGZpbGU6ICRuIiA+IHIxL2ZpbGUuJG4KKwkJZ2l0IC1DIHIxIGFkZCBmaWxlLiRuCisJCWdpdCAtQyByMSBjb21taXQgLW0gIiRuIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2I6bm9uZSBvbWl0cyBhbGwgNSBibG9icycgJworCWdpdCAtQyByMSBscy1maWxlcyAtcyBmaWxlLjEgZmlsZS4yIGZpbGUuMyBmaWxlLjQgZmlsZS41IFwKKwkJPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjEgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCBcCisJCS0tZmlsdGVyPWJsb2I6bm9uZSBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy9+Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BlY2lmeSBibG9iIGV4cGxpY2l0bHkgcHJldmVudHMgZmlsdGVyaW5nJyAnCisJZmlsZV8zPSQoZ2l0IC1DIHIxIGxzLWZpbGVzIC1zIGZpbGUuMyB8CisJCSBhd2sgLWYgcHJpbnRfMi5hd2spICYmCisKKwlmaWxlXzQ9JChnaXQgLUMgcjEgbHMtZmlsZXMgLXMgZmlsZS40IHwKKwkJIGF3ayAtZiBwcmludF8yLmF3aykgJiYKKworCWdpdCAtQyByMSByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9YmxvYjpub25lIEhFQUQgJGZpbGVfMyA+b2JzZXJ2ZWQgJiYKKwlncmVwICIkZmlsZV8zIiBvYnNlcnZlZCAmJgorCSEgZ3JlcCAiJGZpbGVfNCIgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGVtaXR0ZWQrb21pdHRlZCA9PSBhbGwnICcKKwlnaXQgLUMgcjEgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgPnJldnMgJiYKKwlhd2sgLWYgcHJpbnRfMS5hd2sgcmV2cyB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByMSByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCAtLWZpbHRlcj1ibG9iOm5vbmUgXAorCQlIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy9+Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKworCisjIFRlc3QgYmxvYjpsaW1pdD08bj5ba21nXSBmaWx0ZXIuCisjIFdlIGJvdW5kYXJ5IHRlc3QgYXJvdW5kIHRoZSBzaXplIHBhcmFtZXRlci4gIFRoZSBmaWx0ZXIgaXMgc3RyaWN0bHkgbGVzcyB0aGFuCisjIHRoZSB2YWx1ZSwgc28gc2l6ZSA1MDAgYW5kIDEwMDAgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcmVzdWx0cywgYnV0IDEwMDEgc2hvdWxkCisjIGZpbHRlciBtb3JlLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByMicgJworCWdpdCBpbml0IHIyICYmCisJZm9yIG4gaW4gMTAwMCAxMDAwMAorCWRvCisJCXByaW50ZiAiJSIkbiJzIiBYID4gcjIvbGFyZ2UuJG4KKwkJZ2l0IC1DIHIyIGFkZCBsYXJnZS4kbgorCQlnaXQgLUMgcjIgY29tbWl0IC1tICIkbiIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTUwMCBvbWl0cyBhbGwgYmxvYnMnICcKKwlnaXQgLUMgcjIgbHMtZmlsZXMgLXMgbGFyZ2UuMTAwMCBsYXJnZS4xMDAwMCA+bHNfZmlsZXNfcmVzdWx0ICYmCisJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CisJc29ydCA+ZXhwZWN0ZWQgJiYKKworCWdpdCAtQyByMiByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLWZpbHRlci1wcmludC1vbWl0dGVkIFwKKwkJLS1maWx0ZXI9YmxvYjpsaW1pdD01MDAgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBlbWl0dGVkK29taXR0ZWQgPT0gYWxsJyAnCisJZ2l0IC1DIHIyIHJldi1saXN0IC0tb2JqZWN0cyBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1ibG9iOmxpbWl0PTUwMCBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy9+Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2I6bGltaXQ9MTAwMCcgJworCWdpdCAtQyByMiBscy1maWxlcyAtcyBsYXJnZS4xMDAwIGxhcmdlLjEwMDAwID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJZ2l0IC1DIHIyIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1ibG9iOmxpbWl0PTEwMDAgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTEwMDEnICcKKwlnaXQgLUMgcjIgbHMtZmlsZXMgLXMgbGFyZ2UuMTAwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCBcCisJCS0tZmlsdGVyPWJsb2I6bGltaXQ9MTAwMSBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy9+Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2I6bGltaXQ9MWsnICcKKwlnaXQgLUMgcjIgbHMtZmlsZXMgLXMgbGFyZ2UuMTAwMDAgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjIgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCBcCisJCS0tZmlsdGVyPWJsb2I6bGltaXQ9MWsgSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBibG9iOmxpbWl0PTFtJyAnCisJZ2l0IC1DIHIyIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLWZpbHRlcj1ibG9iOmxpbWl0PTFtIEhFQUQgPnJldnMgJiYKKwlhd2sgLWYgcHJpbnRfMS5hd2sgcmV2cyB8CisJc2VkICJzL34vLyIgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X211c3RfYmVfZW1wdHkgb2JzZXJ2ZWQKKycKKworIyBUZXN0IHNwYXJzZTpwYXRoPTxwYXRoPiBmaWx0ZXIuCisjICEhISEKKyMgTk9URTogc3BhcnNlOnBhdGggZmlsdGVyIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCBmb3Igc2VjdXJpdHkgcmVhc29ucywKKyMgc28gdGhlIHRlc3RzIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIG1ha2Ugc3VyZSB0aGF0IHVzaW5nIGl0IGZhaWxzLgorIyAhISEhCisjIFVzZSBhIGxvY2FsIGZpbGUgY29udGFpbmluZyBhIHNwYXJzZS1jaGVja291dCBzcGVjaWZpY2F0aW9uIHRvIGZpbHRlcgorIyBvdXQgYmxvYnMgbm90IHJlcXVpcmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBzcGFyc2UtY2hlY2tvdXQuICBXZSBkbyBub3QKKyMgcmVxdWlyZSBzcGFyc2UtY2hlY2tvdXQgdG8gYWN0dWFsbHkgYmUgZW5hYmxlZC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcjMnICcKKwlnaXQgaW5pdCByMyAmJgorCW1rZGlyIHIzL2RpcjEgJiYKKwlmb3IgbiBpbiBzcGFyc2UxIHNwYXJzZTIKKwlkbworCQllY2hvICJUaGlzIGlzIGZpbGU6ICRuIiA+IHIzLyRuCisJCWdpdCAtQyByMyBhZGQgJG4KKwkJZWNobyAiVGhpcyBpcyBmaWxlOiBkaXIxLyRuIiA+IHIzL2RpcjEvJG4KKwkJZ2l0IC1DIHIzIGFkZCBkaXIxLyRuCisJZG9uZSAmJgorCWdpdCAtQyByMyBjb21taXQgLW0gInNwYXJzZSIgJiYKKwllY2hvIGRpcjEvID5wYXR0ZXJuMSAmJgorCWVjaG8gc3BhcnNlMSA+cGF0dGVybjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNwYXJzZTpwYXRoPXBhdHRlcm4xIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHIzIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIFwKKwkJLS1maWx0ZXItcHJpbnQtb21pdHRlZCAtLWZpbHRlcj1zcGFyc2U6cGF0aD0uLi9wYXR0ZXJuMSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzcGFyc2U6cGF0aD1wYXR0ZXJuMiBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyByMyByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyBcCisJCS0tZmlsdGVyLXByaW50LW9taXR0ZWQgLS1maWx0ZXI9c3BhcnNlOnBhdGg9Li4vcGF0dGVybjIgSEVBRAorJworCisjIFRlc3Qgc3BhcnNlOm9pZD08b2lkLWlzaD4gZmlsdGVyLgorIyBVc2UgYSBibG9iIGNvbnRhaW5pbmcgYSBzcGFyc2UtY2hlY2tvdXQgc3BlY2lmaWNhdGlvbiB0byBmaWx0ZXIKKyMgb3V0IGJsb2JzIG5vdCByZXF1aXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3BhcnNlLWNoZWNrb3V0LiAgV2UgZG8gbm90CisjIHJlcXVpcmUgc3BhcnNlLWNoZWNrb3V0IHRvIGFjdHVhbGx5IGJlIGVuYWJsZWQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHIzIHBhcnQgMicgJworCWVjaG8gZGlyMS8gPnIzL3BhdHRlcm4gJiYKKwlnaXQgLUMgcjMgYWRkIHBhdHRlcm4gJiYKKwlnaXQgLUMgcjMgY29tbWl0IC1tICJwYXR0ZXJuIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc3BhcnNlOm9pZD1PSUQgb21pdHMgdG9wLWxldmVsIGZpbGVzJyAnCisJZ2l0IC1DIHIzIGxzLWZpbGVzIC1zIHBhdHRlcm4gc3BhcnNlMSBzcGFyc2UyID5sc19maWxlc19yZXN1bHQgJiYKKwlhd2sgLWYgcHJpbnRfMi5hd2sgbHNfZmlsZXNfcmVzdWx0IHwKKwlzb3J0ID5leHBlY3RlZCAmJgorCisJb2lkPSQoZ2l0IC1DIHIzIGxzLWZpbGVzIC1zIHBhdHRlcm4gfCBhd2sgLWYgcHJpbnRfMi5hd2spICYmCisKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCBcCisJCS0tZmlsdGVyPXNwYXJzZTpvaWQ9JG9pZCBIRUFEID5yZXZzICYmCisJYXdrIC1mIHByaW50XzEuYXdrIHJldnMgfAorCXNlZCAicy9+Ly8iIHwKKwlzb3J0ID5vYnNlcnZlZCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgb2JzZXJ2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNwYXJzZTpvaWQ9b2lkLWlzaCBvbWl0cyB0b3AtbGV2ZWwgZmlsZXMnICcKKwlnaXQgLUMgcjMgbHMtZmlsZXMgLXMgcGF0dGVybiBzcGFyc2UxIHNwYXJzZTIgPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1xdWlldCAtLW9iamVjdHMgLS1maWx0ZXItcHJpbnQtb21pdHRlZCBcCisJCS0tZmlsdGVyPXNwYXJzZTpvaWQ9bWFzdGVyOnBhdHRlcm4gSEVBRCA+cmV2cyAmJgorCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgInMvfi8vIiB8CisJc29ydCA+b2JzZXJ2ZWQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIG9ic2VydmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IFcvIC0tbWlzc2luZz1wcmludCBhbmQgLS1taXNzaW5nPWFsbG93LWFueSBmb3IgdHJlZXMnICcKKwlUUkVFPSQoZ2l0IC1DIHIzIHJldi1wYXJzZSBIRUFEOmRpcjEpICYmCisKKwkjIENyZWF0ZSBhIHNwYXJlIHJlcG8gYmVjYXVzZSB3ZSB3aWxsIGJlIGRlbGV0aW5nIG9iamVjdHMgZnJvbSB0aGlzIG9uZS4KKwlnaXQgY2xvbmUgcjMgcjMuYiAmJgorCisJcm0gcjMuYi8uZ2l0L29iamVjdHMvJChlY2hvICRUUkVFIHwgc2VkICJzfF4uLnwmL3wiKSAmJgorCisJZ2l0IC1DIHIzLmIgcmV2LWxpc3QgLS1xdWlldCAtLW1pc3Npbmc9cHJpbnQgLS1vYmplY3RzIEhFQUQgXAorCQk+bWlzc2luZ19vYmpzIDI+cmV2X2xpc3RfZXJyICYmCisJZWNobyAiPyRUUkVFIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBtaXNzaW5nX29ianMgJiYKKworCSMgZG8gbm90IGNvbXBsYWluIHdoZW4gYSBtaXNzaW5nIHRyZWUgY2Fubm90IGJlIHBhcnNlZAorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXZfbGlzdF9lcnIgJiYKKworCWdpdCAtQyByMy5iIHJldi1saXN0IC0tbWlzc2luZz1hbGxvdy1hbnkgLS1vYmplY3RzIEhFQUQgXAorCQk+b2JqcyAyPnJldl9saXN0X2VyciAmJgorCSEgZ3JlcCAkVFJFRSBvYmpzICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJldl9saXN0X2VycgorJworCisjIFRlc3QgdHJlZTowIGZpbHRlci4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRyZWU6MCBpbmNsdWRlcyB0cmVlcyBpbiAiZmlsdGVyZWQiIG91dHB1dCcgJworCWdpdCAtQyByMyByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLWZpbHRlci1wcmludC1vbWl0dGVkIFwKKwkJLS1maWx0ZXI9dHJlZTowIEhFQUQgPnJldnMgJiYKKworCWF3ayAtZiBwcmludF8xLmF3ayByZXZzIHwKKwlzZWQgcy9+Ly8gfAorCXhhcmdzIC1uMSBnaXQgLUMgcjMgY2F0LWZpbGUgLXQgPnVuc29ydGVkX2ZpbHRlcmVkX3R5cGVzICYmCisKKwlzb3J0IC11IHVuc29ydGVkX2ZpbHRlcmVkX3R5cGVzID5maWx0ZXJlZF90eXBlcyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYmxvYiB0cmVlID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbHRlcmVkX3R5cGVzCisnCisKKyMgTWFrZSBzdXJlIHRyZWU6MCBkb2VzIG5vdCBpdGVyYXRlIHRocm91Z2ggYW55IHRyZWVzLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc2tpcHBpbmcgdHJlZSBpdGVyYXRpb24gd2hlbiBub3QgY29sbGVjdGluZyBvbWl0cycgJworCUdJVF9UUkFDRT0xIGdpdCAtQyByMyByZXYtbGlzdCBcCisJCS0tb2JqZWN0cyAtLWZpbHRlcj10cmVlOjAgSEVBRCAyPmZpbHRlcl90cmFjZSAmJgorCWdyZXAgIlNraXBwaW5nIGNvbnRlbnRzIG9mIHRyZWUgWy5dWy5dWy5dIiBmaWx0ZXJfdHJhY2UgPmFjdHVhbCAmJgorCSMgT25lIGxpbmUgZm9yIGVhY2ggY29tbWl0IHRyYXZlcnNlZC4KKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbCAmJgorCisJIyBNYWtlIHN1cmUgbm8gb3RoZXIgdHJlZXMgd2VyZSBjb25zaWRlcmVkIGJlc2lkZXMgdGhlIHJvb3QuCisJISBncmVwICJTa2lwcGluZyBjb250ZW50cyBvZiB0cmVlIFteLl0iIGZpbHRlcl90cmFjZSAmJgorCisJIyBUcnkgdGhpcyBhZ2FpbiB3aXRoICJjb21iaW5lOiIuIElmIGJvdGggc3ViLWZpbHRlcnMgYXJlIHNraXBwaW5nCisJIyB0cmVlcywgdGhlIGNvbXBvc2l0ZSBmaWx0ZXIgc2hvdWxkIGFsc28gc2tpcCB0cmVlcy4gVGhpcyBpcyBub3QKKwkjIGltcG9ydGFudCB1bmxlc3MgdGhlIHVzZXIgZG9lcyBjb21iaW5lOnRyZWU6WCt0cmVlOlkgb3IgYW5vdGhlciBmaWx0ZXIKKwkjIGJlc2lkZXMgInRyZWU6IiBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZnV0dXJlIHdoaWNoIGNhbiBza2lwIHRyZWVzLgorCUdJVF9UUkFDRT0xIGdpdCAtQyByMyByZXYtbGlzdCBcCisJCS0tb2JqZWN0cyAtLWZpbHRlcj1jb21iaW5lOnRyZWU6MSt0cmVlOjMgSEVBRCAyPmZpbHRlcl90cmFjZSAmJgorCisJIyBPbmx5IHNraXAgdGhlIGRpcjEvIHRyZWUsIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gY29tbWl0cy4KKwlncmVwICJTa2lwcGluZyBjb250ZW50cyBvZiB0cmVlICIgZmlsdGVyX3RyYWNlID5hY3R1YWwgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICJTa2lwcGluZyBjb250ZW50cyBvZiB0cmVlIGRpcjEvLi4uIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyBUZXN0IHRyZWU6IyBmaWx0ZXJzLgorCitleHBlY3RfaGFzICgpIHsKKwljb21taXQ9JDEgJiYKKwluYW1lPSQyICYmCisKKwloYXNoPSQoZ2l0IC1DIHIzIHJldi1wYXJzZSAkY29tbWl0OiRuYW1lKSAmJgorCWdyZXAgIl4kaGFzaCAkbmFtZSQiIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdHJlZToxIGluY2x1ZGVzIHJvb3QgdHJlZXMnICcKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPXRyZWU6MSBIRUFEID5hY3R1YWwgJiYKKworCSMgV2Ugc2hvdWxkIGdldCB0d28gcm9vdCBkaXJlY3RvcmllcyBhbmQgdHdvIGNvbW1pdHMuCisJZXhwZWN0X2hhcyBIRUFEICIiICYmCisJZXhwZWN0X2hhcyBIRUFEfjEgIiIgICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRyZWU6MiBpbmNsdWRlcyByb290IHRyZWVzIGFuZCBpbW1lZGlhdGUgY2hpbGRyZW4nICcKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPXRyZWU6MiBIRUFEID5hY3R1YWwgJiYKKworCWV4cGVjdF9oYXMgSEVBRCAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRH4xICIiICYmCisJZXhwZWN0X2hhcyBIRUFEIGRpcjEgJiYKKwlleHBlY3RfaGFzIEhFQUQgcGF0dGVybiAmJgorCWV4cGVjdF9oYXMgSEVBRCBzcGFyc2UxICYmCisJZXhwZWN0X2hhcyBIRUFEIHNwYXJzZTIgJiYKKworCSMgVGhlcmUgYXJlIGFsc28gMiBjb21taXQgb2JqZWN0cworCXRlc3RfbGluZV9jb3VudCA9IDggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0cmVlOjMgaW5jbHVkZXMgZXZlcnl0aGluZyBleHBlY3RlZCcgJworCWdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9dHJlZTozIEhFQUQgPmFjdHVhbCAmJgorCisJZXhwZWN0X2hhcyBIRUFEICIiICYmCisJZXhwZWN0X2hhcyBIRUFEfjEgIiIgJiYKKwlleHBlY3RfaGFzIEhFQUQgZGlyMSAmJgorCWV4cGVjdF9oYXMgSEVBRCBkaXIxL3NwYXJzZTEgJiYKKwlleHBlY3RfaGFzIEhFQUQgZGlyMS9zcGFyc2UyICYmCisJZXhwZWN0X2hhcyBIRUFEIHBhdHRlcm4gJiYKKwlleHBlY3RfaGFzIEhFQUQgc3BhcnNlMSAmJgorCWV4cGVjdF9oYXMgSEVBRCBzcGFyc2UyICYmCisKKwkjIFRoZXJlIGFyZSBhbHNvIDIgY29tbWl0IG9iamVjdHMKKwl0ZXN0X2xpbmVfY291bnQgPSAxMCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZTouLi4gZm9yIGEgc2ltcGxlIGNvbWJpbmF0aW9uJyAnCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj1jb21iaW5lOnRyZWU6MitibG9iOm5vbmUgSEVBRCBcCisJCT5hY3R1YWwgJiYKKworCWV4cGVjdF9oYXMgSEVBRCAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRH4xICIiICYmCisJZXhwZWN0X2hhcyBIRUFEIGRpcjEgJiYKKworCSMgVGhlcmUgYXJlIGFsc28gMiBjb21taXQgb2JqZWN0cworCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisKKwljcCBhY3R1YWwgZXhwZWN0ZWQgJiYKKworCSMgVHJ5IGFnYWluIHVzaW5nIHJlcGVhdGVkIC0tZmlsdGVyIC0gdGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgbWFudWFsCisJIyBjb21iaW5lIHdpdGggImNvbWJpbmU6Li4uKy4uLiIKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPWNvbWJpbmU6dHJlZToyIFwKKwkJLS1maWx0ZXI9YmxvYjpub25lIEhFQUQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmU6Li4uIHdpdGggVVJMIGVuY29kaW5nJyAnCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyBcCisJCS0tZmlsdGVyPWNvbWJpbmU6dHJlZSUzYTIrYmxvYjolNkVvbiU2NSBIRUFEID5hY3R1YWwgJiYKKworCWV4cGVjdF9oYXMgSEVBRCAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRH4xICIiICYmCisJZXhwZWN0X2hhcyBIRUFEIGRpcjEgJiYKKworCSMgVGhlcmUgYXJlIGFsc28gMiBjb21taXQgb2JqZWN0cworCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsCisnCisKK2V4cGVjdF9pbnZhbGlkX2ZpbHRlcl9zcGVjICgpIHsKKwlzcGVjPSIkMSIgJiYKKwllcnI9IiQyIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj0iJHNwZWMiIEhFQUQgXAorCQk+YWN0dWFsIDI+YWN0dWFsX3N0ZGVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICIkZXJyIiBhY3R1YWxfc3RkZXJyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmU6Li4uIHdoaWxlIFVSTC1lbmNvZGluZyB0aGluZ3MgdGhhdCBzaG91bGQgbm90IGJlJyAnCisJZXhwZWN0X2ludmFsaWRfZmlsdGVyX3NwZWMgY29tYmluZSUzQXRyZWU6MitibG9iOm5vbmUgXAorCQkiaW52YWxpZCBmaWx0ZXItc3BlYyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZTogd2l0aCBub3RoaW5nIGFmdGVyIHRoZSA6JyAnCisJZXhwZWN0X2ludmFsaWRfZmlsdGVyX3NwZWMgY29tYmluZTogImV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciBjb21iaW5lOiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFyc2UgZXJyb3IgaW4gZmlyc3Qgc3ViLWZpbHRlciBpbiBjb21iaW5lOicgJworCWV4cGVjdF9pbnZhbGlkX2ZpbHRlcl9zcGVjIGNvbWJpbmU6dHJlZTphc2RmK2Jsb2I6bm9uZSBcCisJCSJleHBlY3RlZCAudHJlZTo8ZGVwdGg+LiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZTouLi4gd2l0aCBub24tZW5jb2RlZCByZXNlcnZlZCBjaGFycycgJworCWV4cGVjdF9pbnZhbGlkX2ZpbHRlcl9zcGVjIGNvbWJpbmU6dHJlZToyK3NwYXJzZTpAeHl6IFwKKwkJIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAuQC4iICYmCisJZXhwZWN0X2ludmFsaWRfZmlsdGVyX3NwZWMgY29tYmluZTp0cmVlOjIrc3BhcnNlOlxgIFwKKwkJIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAuXGAuIiAmJgorCWV4cGVjdF9pbnZhbGlkX2ZpbHRlcl9zcGVjIGNvbWJpbmU6dHJlZToyK3NwYXJzZTp+YWJjIFwKKwkJIm11c3QgZXNjYXBlIGNoYXIgaW4gc3ViLWZpbHRlci1zcGVjOiAuXH4uIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBlcnIgbXNnIGZvciAiY29tYmluZTo8dmFsaWQtZmlsdGVyPisiJyAnCisJZXhwZWN0X2ludmFsaWRfZmlsdGVyX3NwZWMgY29tYmluZTp0cmVlOjIrICJleHBlY3RlZCAudHJlZTo8ZGVwdGg+LiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZTouLi4gd2l0aCBlZGdlLWNhc2UgaGV4IGRpZ2l0czogRmYgQWEgMCA5JyAnCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj0iY29tYmluZTp0cmVlOjIrYmwlNkZiOm4lNmZuZSIgXAorCQlIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCWdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9ImNvbWJpbmU6dHJlZSUzQTIrYmxvYiUzYW5vbmUiIFwKKwkJSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwlnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPSJjb21iaW5lOnRyZWU6JTMwIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbCAmJgorCWdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9ImNvbWJpbmU6dHJlZTolMzkrYmxvYjpub25lIiBcCisJCUhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzcGFyc2UgcGF0dGVybiBibG9icyB3aG9zZSBwYXRocyBoYXZlIHJlc2VydmVkIGNoYXJzJyAnCisJY3AgcjMvcGF0dGVybiByMy9wYXR0ZXJuMStyZW5hbWVkJSAmJgorCWNwIHIzL3BhdHRlcm4gInIzL3A7YXQldGVyK24iICYmCisJY3AgcjMvcGF0dGVybiByMy9efnBhdHRlcm4gJiYKKwlnaXQgLUMgcjMgYWRkIHBhdHRlcm4xK3JlbmFtZWQlICJwO2F0JXRlcituIiBefnBhdHRlcm4gJiYKKwlnaXQgLUMgcjMgY29tbWl0IC1tICJhZGQgc3BhcnNlIHBhdHRlcm4gZmlsZXMgd2l0aCByZXNlcnZlZCBjaGFycyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZTouLi4gd2l0aCBtb3JlIHRoYW4gdHdvIHN1Yi1maWx0ZXJzJyAnCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyBcCisJCS0tZmlsdGVyPWNvbWJpbmU6dHJlZTozK2Jsb2I6bGltaXQ9NDArc3BhcnNlOm9pZD1tYXN0ZXI6cGF0dGVybiBcCisJCUhFQUQgPmFjdHVhbCAmJgorCisJZXhwZWN0X2hhcyBIRUFEICIiICYmCisJZXhwZWN0X2hhcyBIRUFEfjEgIiIgJiYKKwlleHBlY3RfaGFzIEhFQUR+MiAiIiAmJgorCWV4cGVjdF9oYXMgSEVBRCBkaXIxICYmCisJZXhwZWN0X2hhcyBIRUFEIGRpcjEvc3BhcnNlMSAmJgorCWV4cGVjdF9oYXMgSEVBRCBkaXIxL3NwYXJzZTIgJiYKKworCSMgU2hvdWxkIGFsc28gaGF2ZSAzIGNvbW1pdHMKKwl0ZXN0X2xpbmVfY291bnQgPSA5IGFjdHVhbCAmJgorCisJIyBUcnkgYWdhaW4sIHRoaXMgdGltZSBtYWtpbmcgc3VyZSB0aGUgbGFzdCBzdWItZmlsdGVyIGlzIG9ubHkKKwkjIFVSTC1kZWNvZGVkIG9uY2UuCisJY3AgYWN0dWFsIGV4cGVjdCAmJgorCisJZ2l0IC1DIHIzIHJldi1saXN0IC0tb2JqZWN0cyBcCisJCS0tZmlsdGVyPWNvbWJpbmU6dHJlZTozK2Jsb2I6bGltaXQ9NDArc3BhcnNlOm9pZD1tYXN0ZXI6cGF0dGVybjElMmJyZW5hbWVkJTI1IFwKKwkJSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBVc2UgdGhlIHNhbWUgY29tcG9zaXRlIGZpbHRlciBhZ2FpbiwgYnV0IHdpdGggYSBwYXR0ZXJuIGZpbGUgbmFtZSB0aGF0CisJIyByZXF1aXJlcyBlbmNvZGluZyBtdWx0aXBsZSBjaGFyYWN0ZXJzLCBhbmQgdXNlIGltcGxpY2l0IGZpbHRlcgorCSMgY29tYmluaW5nLgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgdHJhY2UxIiAmJgorCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2UxIGdpdCAtQyByMyByZXYtbGlzdCAtLW9iamVjdHMgXAorCQktLWZpbHRlcj10cmVlOjMgLS1maWx0ZXI9YmxvYjpsaW1pdD00MCBcCisJCS0tZmlsdGVyPXNwYXJzZTpvaWQ9Im1hc3RlcjpwO2F0JXRlcituIiBcCisJCUhFQUQgPmFjdHVhbCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdyZXAgIkFkZCB0byBjb21iaW5lIGZpbHRlci1zcGVjOiBzcGFyc2U6b2lkPW1hc3RlcjpwJTNiYXQlMjV0ZXIlMmJuIiBcCisJCXRyYWNlMSAmJgorCisJIyBSZXBlYXQgdGhlIGFib3ZlIHRlc3QsIGJ1dCB0aGlzIHRpbWUsIHRoZSBjaGFyYWN0ZXJzIHRvIGVuY29kZSBhcmUgaW4KKwkjIHRoZSBMSFMgb2YgdGhlIGNvbWJpbmVkIGZpbHRlci4KKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHRyYWNlMiIgJiYKKwlHSVRfVFJBQ0U9JChwd2QpL3RyYWNlMiBnaXQgLUMgcjMgcmV2LWxpc3QgLS1vYmplY3RzIFwKKwkJLS1maWx0ZXI9c3BhcnNlOm9pZD1tYXN0ZXI6Xn5wYXR0ZXJuIFwKKwkJLS1maWx0ZXI9dHJlZTozIC0tZmlsdGVyPWJsb2I6bGltaXQ9NDAgXAorCQlIRUFEID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlncmVwICJBZGQgdG8gY29tYmluZSBmaWx0ZXItc3BlYzogc3BhcnNlOm9pZD1tYXN0ZXI6JTVlJTdlcGF0dGVybiIgXAorCQl0cmFjZTIKKycKKworIyBUZXN0IHByb3Zpc2lvbmFsIG9taXQgY29sbGVjdGlvbiBsb2dpYyB3aXRoIGEgcmVwbyB0aGF0IGhhcyBvYmplY3RzIGFwcGVhcmluZworIyBhdCBtdWx0aXBsZSBkZXB0aHMgLSBmaXJzdCBkZWVwZXIgdGhhbiB0aGUgZmlsdGVyJ3MgdGhyZXNob2xkLCB0aGVuIHNoYWxsb3cuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHI0JyAnCisJZ2l0IGluaXQgcjQgJiYKKworCWVjaG8gZm9vID4gcjQvZm9vICYmCisJbWtkaXIgcjQvc3ViZGlyICYmCisJZWNobyBiYXIgPiByNC9zdWJkaXIvYmFyICYmCisKKwlta2RpciByNC9maWx0ICYmCisJY3AgLXIgcjQvZm9vIHI0L3N1YmRpciByNC9maWx0ICYmCisKKwlnaXQgLUMgcjQgYWRkIGZvbyBzdWJkaXIgZmlsdCAmJgorCWdpdCAtQyByNCBjb21taXQgLW0gImNvbW1pdCBtc2ciCisnCisKK2V4cGVjdF9oYXNfd2l0aF9kaWZmZXJlbnRfbmFtZSAoKSB7CisJcmVwbz0kMSAmJgorCW5hbWU9JDIgJiYKKworCWhhc2g9JChnaXQgLUMgJHJlcG8gcmV2LXBhcnNlIEhFQUQ6JG5hbWUpICYmCisJISBncmVwICJeJGhhc2ggJG5hbWUkIiBhY3R1YWwgJiYKKwlncmVwICJeJGhhc2ggIiBhY3R1YWwgJiYKKwkhIGdyZXAgIn4kaGFzaCIgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdHJlZTojIGZpbHRlciBwcm92aXNpb25hbCBvbWl0IGZvciBibG9iIGFuZCB0cmVlJyAnCisJZ2l0IC1DIHI0IHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlci1wcmludC1vbWl0dGVkIC0tZmlsdGVyPXRyZWU6MiBcCisJCUhFQUQgPmFjdHVhbCAmJgorCWV4cGVjdF9oYXNfd2l0aF9kaWZmZXJlbnRfbmFtZSByNCBmaWx0L2ZvbyAmJgorCWV4cGVjdF9oYXNfd2l0aF9kaWZmZXJlbnRfbmFtZSByNCBmaWx0L3N1YmRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc2tpcHBpbmcgdHJlZSBpdGVyYXRpb24gd2hlbiBjb2xsZWN0aW5nIG9taXRzJyAnCisJR0lUX1RSQUNFPTEgZ2l0IC1DIHI0IHJldi1saXN0IC0tZmlsdGVyLXByaW50LW9taXR0ZWQgXAorCQktLW9iamVjdHMgLS1maWx0ZXI9dHJlZTowIEhFQUQgMj5maWx0ZXJfdHJhY2UgJiYKKwlncmVwICJeU2tpcHBpbmcgY29udGVudHMgb2YgdHJlZSAiIGZpbHRlcl90cmFjZSA+YWN0dWFsICYmCisKKwllY2hvICJTa2lwcGluZyBjb250ZW50cyBvZiB0cmVlIHN1YmRpci8uLi4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHI1JyAnCisJZ2l0IGluaXQgcjUgJiYKKwlta2RpciAtcCByNS9zdWJkaXIgJiYKKworCWVjaG8gMSAgICAgPnI1L3Nob3J0LXJvb3QgICAgICAgICAgJiYKKwllY2hvIDEyMzQ1ID5yNS9sb25nLXJvb3QgICAgICAgICAgICYmCisJZWNobyBhICAgICA+cjUvc3ViZGlyL3Nob3J0LXN1YmRpciAmJgorCWVjaG8gYWJjZGUgPnI1L3N1YmRpci9sb25nLXN1YmRpciAgJiYKKworCWdpdCAtQyByNSBhZGQgc2hvcnQtcm9vdCBsb25nLXJvb3Qgc3ViZGlyICYmCisJZ2l0IC1DIHI1IGNvbW1pdCAtbSAiY29tbWl0IG1zZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGNvbGxlY3Rpbmcgb21pdHMgaW4gY29tYmluZWQ6IGZpbHRlcicgJworCSMgTm90ZSB0aGF0IHRoaXMgdGVzdCBndWFyZHMgYWdhaW5zdCB0aGUgbmFpdmUgaW1wbGVtZW50YXRpb24gb2Ygc2ltcGx5CisJIyBnaXZpbmcgYm90aCBmaWx0ZXJzIHRoZSBzYW1lICJvbWl0cyIgc2V0IGFuZCBleHBlY3RpbmcgaXQgdG8KKwkjIGF1dG9tYXRpY2FsbHkgbWVyZ2UgdGhlbS4KKwlnaXQgLUMgcjUgcmV2LWxpc3QgLS1vYmplY3RzIC0tcXVpZXQgLS1maWx0ZXItcHJpbnQtb21pdHRlZCBcCisJCS0tZmlsdGVyPWNvbWJpbmU6dHJlZToyK2Jsb2I6bGltaXQ9MyBIRUFEID5hY3R1YWwgJiYKKworCSMgRXhwZWN0IDAgdHJlZXMvY29tbWl0cywgMyBibG9icyBvbWl0dGVkIChhbGwgYmxvYnMgZXhjZXB0IHNob3J0LXJvb3QpCisJb21pdHRlZF8xPSQoZWNobyAxMjM0NSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCW9taXR0ZWRfMj0kKGVjaG8gYSAgICAgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwlvbWl0dGVkXzM9JChlY2hvIGFiY2RlIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisKKwlncmVwIH4kb21pdHRlZF8xIGFjdHVhbCAmJgorCWdyZXAgfiRvbWl0dGVkXzIgYWN0dWFsICYmCisJZ3JlcCB+JG9taXR0ZWRfMyBhY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbAorJworCisjIFRlc3QgdHJlZTo8ZGVwdGg+IHdoZXJlIGEgdHJlZSBpcyBpdGVyYXRlZCB0byB0d2ljZSAtIG9uY2Ugd2hlcmUgYSBzdWJlbnRyeSBpcworIyB0b28gZGVlcCB0byBiZSBpbmNsdWRlZCwgYW5kIGFnYWluIHdoZXJlIHRoZSBibG9iIGluc2lkZSBpdCBpcyBzaGFsbG93IGVub3VnaAorIyB0byBiZSBpbmNsdWRlZC4gVGhpcyBtYWtlcyBzdXJlIHdlIGRvbid0IHVzZSBMT0ZSX01BUktfU0VFTiBpbmNvcnJlY3RseSAod2UKKyMgY2FuJ3QgdXNlIGl0IGJlY2F1c2UgYSB0cmVlIGNhbiBiZSBpdGVyYXRlZCBvdmVyIGFnYWluIGF0IGEgbG93ZXIgZGVwdGgpLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlOjxkZXB0aD4gd2hlcmUgd2UgaXRlcmF0ZSBvdmVyIHRyZWUgYXQgdHdvIGxldmVscycgJworCWdpdCBpbml0IHI1ICYmCisKKwlta2RpciAtcCByNS9hL3N1YmRpci9iICYmCisJZWNobyBmb28gPiByNS9hL3N1YmRpci9iL2ZvbyAmJgorCisJbWtkaXIgLXAgcjUvc3ViZGlyL2IgJiYKKwllY2hvIGZvbyA+IHI1L3N1YmRpci9iL2ZvbyAmJgorCisJZ2l0IC1DIHI1IGFkZCBhIHN1YmRpciAmJgorCWdpdCAtQyByNSBjb21taXQgLW0gImNvbW1pdCBtc2ciICYmCisKKwlnaXQgLUMgcjUgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPXRyZWU6NCBIRUFEID5hY3R1YWwgJiYKKwlleHBlY3RfaGFzX3dpdGhfZGlmZmVyZW50X25hbWUgcjUgYS9zdWJkaXIvYi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZTo8ZGVwdGg+IHdoaWNoIGZpbHRlcnMgb3V0IGJsb2IgYnV0IGdpdmVuIGFzIGFyZycgJworCWJsb2JfaGFzaD0kKGdpdCAtQyByNCByZXYtcGFyc2UgSEVBRDpzdWJkaXIvYmFyKSAmJgorCisJZ2l0IC1DIHI0IHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj10cmVlOjEgSEVBRCAkYmxvYl9oYXNoID5hY3R1YWwgJiYKKwlncmVwIF4kYmxvYl9oYXNoIGFjdHVhbAorJworCisjIERlbGV0ZSBzb21lIGxvb3NlIG9iamVjdHMgYW5kIHVzZSByZXYtbGlzdCwgYnV0IFdJVEhPVVQgYW55IGZpbHRlcmluZy4KKyMgVGhpcyBtb2RlbHMgcHJldmlvdXNseSBvbWl0dGVkIG9iamVjdHMgdGhhdCB3ZSBkaWQgbm90IHJlY2VpdmUuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IFcvIC0tbWlzc2luZz1wcmludCcgJworCWdpdCAtQyByMSBscy1maWxlcyAtcyBmaWxlLjEgZmlsZS4yIGZpbGUuMyBmaWxlLjQgZmlsZS41IFwKKwkJPmxzX2ZpbGVzX3Jlc3VsdCAmJgorCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAorCXNvcnQgPmV4cGVjdGVkICYmCisKKwlmb3IgaWQgaW4gYGNhdCBleHBlY3RlZCB8IHNlZCAic3wuLnwmL3wiYAorCWRvCisJCXJtIHIxLy5naXQvb2JqZWN0cy8kaWQKKwlkb25lICYmCisKKwlnaXQgLUMgcjEgcmV2LWxpc3QgLS1xdWlldCAtLW1pc3Npbmc9cHJpbnQgLS1vYmplY3RzIEhFQUQgPnJldnMgJiYKKwlhd2sgLWYgcHJpbnRfMS5hd2sgcmV2cyB8CisJc2VkICJzLz8vLyIgfAorCXNvcnQgPm9ic2VydmVkICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBvYnNlcnZlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBXL08gLS1taXNzaW5nIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHIxIHJldi1saXN0IC0tcXVpZXQgLS1vYmplY3RzIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgVy8gbWlzc2luZz1hbGxvdy1hbnknICcKKwlnaXQgLUMgcjEgcmV2LWxpc3QgLS1xdWlldCAtLW1pc3Npbmc9YWxsb3ctYW55IC0tb2JqZWN0cyBIRUFECisnCisKKyMgVGVzdCBleHBhbnNpb24gb2YgZmlsdGVyIHNwZWNzLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBhbmQgYmxvYiBsaW1pdCBpbiBwcm90b2NvbCcgJworCWdpdCAtQyByMiBjb25maWcgLS1sb2NhbCB1cGxvYWRwYWNrLmFsbG93ZmlsdGVyIDEgJiYKKwlHSVRfVFJBQ0VfUEFDS0VUPSIkKHB3ZCkvdHJhY2UiIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgY2xvbmUgXAorCQktLWZpbHRlcj1ibG9iOmxpbWl0PTFrICJmaWxlOi8vJChwd2QpL3IyIiBsaW1pdCAmJgorCSEgZ3JlcCAiYmxvYjpsaW1pdD0xayIgdHJhY2UgJiYKKwlncmVwICJibG9iOmxpbWl0PTEwMjQiIHRyYWNlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjExMy1yZXYtbGlzdC1iaXRtYXAtZmlsdGVycy5zaCBiL3QvdDYxMTMtcmV2LWxpc3QtYml0bWFwLWZpbHRlcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQ1NjAzZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMTMtcmV2LWxpc3QtYml0bWFwLWZpbHRlcnMuc2gKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jldi1saXN0IGNvbWJpbmluZyBiaXRtYXBzIGFuZCBmaWx0ZXJzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBiaXRtYXBwZWQgcmVwbycgJworCSMgb25lIGNvbW1pdCB3aWxsIGhhdmUgYml0bWFwcywgdGhlIG90aGVyIHdpbGwgbm90CisJdGVzdF9jb21taXQgb25lICYmCisJdGVzdF9jb21taXQgbXVjaC1sYXJnZXItYmxvYi1vbmUgJiYKKwlnaXQgcmVwYWNrIC1hZGIgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCBtdWNoLWxhcmdlci1ibG9iLXR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXJzIGZhbGxiYWNrIHRvIG5vbi1iaXRtYXAgdHJhdmVyc2FsJyAnCisJIyB1c2UgYSBwYXRoLWJhc2VkIGZpbHRlciwgc2luY2UgdGhleSBhcmUgaW5oZXJlbnRseSBpbmNvbXBhdGlibGUgd2l0aAorCSMgYml0bWFwcyAoaS5lLiwgdGhpcyB0ZXN0IHdpbGwgbmV2ZXIgZ2V0IGNvbmZ1c2VkIGJ5IGxhdGVyIGNvZGUgdG8KKwkjIGNvbWJpbmUgdGhlIGZlYXR1cmVzKQorCWZpbHRlcj0kKGVjaG8gIiFvbmUiIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj1zcGFyc2U6b2lkPSRmaWx0ZXIgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCBcCisJCSAgICAgLS1vYmplY3RzIC0tZmlsdGVyPXNwYXJzZTpvaWQ9JGZpbHRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2I6bm9uZSBmaWx0ZXInICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tZmlsdGVyPWJsb2I6bm9uZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IFwKKwkJICAgICAtLW9iamVjdHMgLS1maWx0ZXI9YmxvYjpub25lIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfYml0bWFwX3RyYXZlcnNhbCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2I6bm9uZSBmaWx0ZXIgd2l0aCBzcGVjaWZpZWQgYmxvYicgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1maWx0ZXI9YmxvYjpub25lIEhFQUQgSEVBRDp0d28udCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCBcCisJCSAgICAgLS1vYmplY3RzIC0tZmlsdGVyPWJsb2I6bm9uZSBIRUFEIEhFQUQ6dHdvLnQgPmFjdHVhbCAmJgorCXRlc3RfYml0bWFwX3RyYXZlcnNhbCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2I6bGltaXQgZmlsdGVyJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj1ibG9iOmxpbWl0PTUgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tdXNlLWJpdG1hcC1pbmRleCBcCisJCSAgICAgLS1vYmplY3RzIC0tZmlsdGVyPWJsb2I6bGltaXQ9NSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2JpdG1hcF90cmF2ZXJzYWwgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iOmxpbWl0IGZpbHRlciB3aXRoIHNwZWNpZmllZCBibG9iJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWZpbHRlcj1ibG9iOmxpbWl0PTUgXAorCQkgICAgIEhFQUQgSEVBRDptdWNoLWxhcmdlci1ibG9iLXR3by50ID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IFwKKwkJICAgICAtLW9iamVjdHMgLS1maWx0ZXI9YmxvYjpsaW1pdD01IFwKKwkJICAgICBIRUFEIEhFQUQ6bXVjaC1sYXJnZXItYmxvYi10d28udCA+YWN0dWFsICYmCisJdGVzdF9iaXRtYXBfdHJhdmVyc2FsIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTIwLWRlc2NyaWJlLnNoIGIvdC90NjEyMC1kZXNjcmliZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDUwMmUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjEyMC1kZXNjcmliZS5zaApAQCAtMCwwICsxLDUzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGVzY3JpYmUnCisKKyMgIG8tLS1vLS0tLS1vLS0tLW8tLS0tby0tLS0tLS1vLS0tLXgKKyMgICAgICAgXCAgIEQsUiAgIGUgICAgICAgICAgIC8KKyMgICAgICAgIFwtLS1vLS0tLS0tLS0tLS0tLW8tJworIyAgICAgICAgIFwgIEIgICAgICAgICAgICAvCisjICAgICAgICAgIGAtby0tLS1vLS0tLW8tJworIyAgICAgICAgICAgICAgICAgQSAgICBjCisjCisjIEZpcnN0IHBhcmVudCBvZiBhIG1lcmdlIGNvbW1pdCBpcyBvbiB0aGUgc2FtZSBsaW5lLCBzZWNvbmQgcGFyZW50IGJlbG93LgorCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfZGVzY3JpYmUgKCkgeworCWV4cGVjdD0iJDEiCisJc2hpZnQKKwlkZXNjcmliZV9vcHRzPSIkQCIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXNjcmliZSAkZGVzY3JpYmVfb3B0cyIgJworCVI9JChnaXQgZGVzY3JpYmUgJGRlc2NyaWJlX29wdHMgMj5lcnIuYWN0dWFsKSAmJgorCWNhc2UgIiRSIiBpbgorCSRleHBlY3QpCWVjaG8gaGFwcHkgOzsKKwkqKQllY2hvICJPb3BzIC0gJFIgaXMgbm90ICRleHBlY3QiICYmCisJCWZhbHNlIDs7CisJZXNhYworCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJb25lPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJZ2l0IGRlc2NyaWJlIC0tYWx3YXlzIEhFQUQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdHdvID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCXR3bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdGhyZWUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gdGhpcmQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gQSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBBICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSBBIEEgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gYyA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyBjICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICR0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEIgPnNpZGUgJiYgZ2l0IGFkZCBzaWRlICYmIGdpdCBjb21taXQgLW0gQiAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gQiBCICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gTWVyZ2VkIGMgJiYKKwltZXJnZWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICR0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEQgPmFub3RoZXIgJiYgZ2l0IGFkZCBhbm90aGVyICYmIGdpdCBjb21taXQgLW0gRCAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gRCBEICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSBSIFIgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gREQgPmFub3RoZXIgJiYgZ2l0IGNvbW1pdCAtYSAtbSBhbm90aGVyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIGUgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gREREID5hbm90aGVyICYmIGdpdCBjb21taXQgLWEgLW0gInlldCBhbm90aGVyIiAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tIE1lcmdlZCAkbWVyZ2VkICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIFggPmZpbGUgJiYgZWNobyBYID5zaWRlICYmIGdpdCBhZGQgZmlsZSBzaWRlICYmCisJZ2l0IGNvbW1pdCAtbSB4CisKKycKKworY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUQKK2NoZWNrX2Rlc2NyaWJlIEEtKiBIRUFEXgorY2hlY2tfZGVzY3JpYmUgUi0qIEhFQUReXgorY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUReXjIKK2NoZWNrX2Rlc2NyaWJlIEIgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIFItKiBIRUFEXl5eCisKK2NoZWNrX2Rlc2NyaWJlIGMtKiAtLXRhZ3MgSEVBRAorY2hlY2tfZGVzY3JpYmUgYy0qIC0tdGFncyBIRUFEXgorY2hlY2tfZGVzY3JpYmUgZS0qIC0tdGFncyBIRUFEXl4KK2NoZWNrX2Rlc2NyaWJlIGMtKiAtLXRhZ3MgSEVBRF5eMgorY2hlY2tfZGVzY3JpYmUgQiAtLXRhZ3MgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIGUgLS10YWdzIEhFQUReXl4KKworY2hlY2tfZGVzY3JpYmUgaGVhZHMvbWFzdGVyIC0tYWxsIEhFQUQKK2NoZWNrX2Rlc2NyaWJlIHRhZ3MvYy0qIC0tYWxsIEhFQUReCitjaGVja19kZXNjcmliZSB0YWdzL2UgLS1hbGwgSEVBRF5eXgorCitjaGVja19kZXNjcmliZSBCLTAtKiAtLWxvbmcgSEVBRF5eMl4KK2NoZWNrX2Rlc2NyaWJlIEEtMy0qIC0tbG9uZyBIRUFEXl4yCisKK2NoZWNrX2Rlc2NyaWJlIGMtNy0qIC0tdGFncworY2hlY2tfZGVzY3JpYmUgZS0zLSogLS1maXJzdC1wYXJlbnQgLS10YWdzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tY29udGFpbnMgZGVmYXVsdHMgdG8gSEVBRCB3aXRob3V0IGNvbW1pdC1pc2gnICcKKwllY2hvICJBXjAiID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgQSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC0iICYmCisJZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2hlY2tfZGVzY3JpYmUgdGFncy9BIC0tYWxsIEFeMAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gd2FybmluZyB3YXMgZGlzcGxheWVkIGZvciBBJyAnCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyci5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHRhZyBBIHRvIFEgbG9jYWxseScgJworCW12IC5naXQvcmVmcy90YWdzL0EgLmdpdC9yZWZzL3RhZ3MvUQorJworY2F0IC0gPmVyci5leHBlY3QgPDxFT0YKK3dhcm5pbmc6IHRhZyAnQScgaXMgcmVhbGx5ICdRJyBoZXJlCitFT0YKK2NoZWNrX2Rlc2NyaWJlIEEtKiBIRUFECit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YXJuaW5nIHdhcyBkaXNwbGF5ZWQgZm9yIFEnICcKKwl0ZXN0X2kxOG5jbXAgZXJyLmV4cGVjdCBlcnIuYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgdGFnIFEgYmFjayB0byBBJyAnCisJbXYgLmdpdC9yZWZzL3RhZ3MvUSAuZ2l0L3JlZnMvdGFncy9BCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgdGFnIHJlZnMnICdnaXQgcGFjay1yZWZzJworY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgd29ya3MgZnJvbSBvdXRzaWRlIHJlcG8gdXNpbmcgLS1naXQtZGlyJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAiJFRSQVNIX0RJUkVDVE9SWSIgIiRUUkFTSF9ESVJFQ1RPUlkvYmFyZSIgJiYKKwlnaXQgLS1naXQtZGlyICIkVFJBU0hfRElSRUNUT1JZL2JhcmUiIGRlc2NyaWJlID5vdXQgJiYKKwlncmVwIC1FICJeQS1bMS05XVswLTldPy1nWzAtOWEtZl0rJCIgb3V0CisnCisKK2NoZWNrX2Rlc2NyaWJlICJBLSpbMC05YS1mXSIgLS1kaXJ0eQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZSAtLWRpcnR5IHdpdGggLS13b3JrLXRyZWUnICcKKwkoCisJCWNkICIkVEVTVF9ESVJFQ1RPUlkiICYmCisJCWdpdCAtLWdpdC1kaXIgIiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgLS13b3JrLXRyZWUgIiRUUkFTSF9ESVJFQ1RPUlkiIGRlc2NyaWJlIC0tZGlydHkgPiIkVFJBU0hfRElSRUNUT1JZL291dCIKKwkpICYmCisJZ3JlcCAtRSAiXkEtWzEtOV1bMC05XT8tZ1swLTlhLWZdKyQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtdXAgZGlydHkgd29yayB0cmVlJyAnCisJZWNobyA+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+ZXJyICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAib3V0c2lkZSByZXBvc2l0b3J5IiBlcnIgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS0gLi4gPm91dCAyPmVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIm91dHNpZGUgcmVwb3NpdG9yeSIgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgYW5kIGxzLWZpbGVzIGluIC5naXQgZGlyZWN0b3J5JyAnCisJKAorCQljZCAuZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS0gLi4gPm91dCAyPmVyciAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIm91dHNpZGUgcmVwb3NpdG9yeSIgZXJyICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tIC4uID5vdXQgMj5lcnIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJvdXRzaWRlIHJlcG9zaXRvcnkiIGVycgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2ggYi90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGE3MmI0YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaApAQCAtMCwwICsxLDUyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiwgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZm10LW1lcmdlLW1zZyB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKworCWdpdCBjbG9uZSAuIHJlbW90ZSAmJgorCisJZWNobyB1bm8gPm9uZSAmJgorCWVjaG8gZG9zID50d28gJiYKKwlnaXQgYWRkIHR3byAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlNlY29uZCIgJiYKKworCWdpdCBjaGVja291dCAtYiBsZWZ0ICYmCisKKwllY2hvICJjMSIgPm9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkNvbW1vbiAjMSIgJiYKKworCWVjaG8gImMyIiA+b25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ29tbW9uICMyIiAmJgorCisJZ2l0IGJyYW5jaCByaWdodCAmJgorCisJZWNobyAibDMiID50d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQ09NTUlUVEVSX05BTUU9IkFub3RoZXIgQ29tbWl0dGVyIiBcCisJR0lUX0FVVEhPUl9OQU1FPSJBbm90aGVyIEF1dGhvciIgZ2l0IGNvbW1pdCAtYSAtbSAiTGVmdCAjMyIgJiYKKworCWVjaG8gImw0IiA+dHdvICYmCisJdGVzdF90aWNrICYmCisJR0lUX0NPTU1JVFRFUl9OQU1FPSJBbm90aGVyIENvbW1pdHRlciIgXAorCUdJVF9BVVRIT1JfTkFNRT0iQW5vdGhlciBBdXRob3IiIGdpdCBjb21taXQgLWEgLW0gIkxlZnQgIzQiICYmCisKKwllY2hvICJsNSIgPnR3byAmJgorCXRlc3RfdGljayAmJgorCUdJVF9DT01NSVRURVJfTkFNRT0iQW5vdGhlciBDb21taXR0ZXIiIFwKKwlHSVRfQVVUSE9SX05BTUU9IkFub3RoZXIgQXV0aG9yIiBnaXQgY29tbWl0IC1hIC1tICJMZWZ0ICM1IiAmJgorCWdpdCB0YWcgdGFnLWw1ICYmCisKKwlnaXQgY2hlY2tvdXQgcmlnaHQgJiYKKworCWVjaG8gInIzIiA+dGhyZWUgJiYKKwlnaXQgYWRkIHRocmVlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmlnaHQgIzMiICYmCisJZ2l0IHRhZyB0YWctcjMgJiYKKworCWVjaG8gInI0IiA+dGhyZWUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJSaWdodCAjNCIgJiYKKworCWVjaG8gInI1IiA+dGhyZWUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJSaWdodCAjNSIgJiYKKworCWdpdCBjaGVja291dCAtYiBsb25nICYmCisJdGVzdF9jb21taXRfYnVsayAtLXN0YXJ0PTAgLS1tZXNzYWdlPSVzIC0tZmlsZW5hbWU9b25lIDMwICYmCisKKwlnaXQgc2hvdy1icmFuY2ggJiYKKworCWFwb3M9IidcJyciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2UgZm9yIG1lcmdpbmcgbG9jYWwgYnJhbmNoJyAnCisJZWNobyAiTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfSIgPmV4cGVjdGVkICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGZldGNoIC4gbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2UgZm9yIG1lcmdpbmcgZXh0ZXJuYWwgYnJhbmNoJyAnCisJZWNobyAiTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfSBvZiAkKHB3ZCkiID5leHBlY3RlZCAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBmZXRjaCAiJChwd2QpIiBsZWZ0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnW21lcmdlXSBzdW1tYXJ5L2xvZyBjb25maWd1cmF0aW9uJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF9jb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLnN1bW1hcnkgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwxICYmCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgdHJ1ZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIGxlZnQgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDIgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIEZFVENIX0hFQUQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5sb2c9MyBsaW1pdHMgc2hvcnRsb2cgbGVuZ3RoJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6ICg1IGNvbW1pdHMpCisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICAuLi4KKwlFT0YKKworCWdpdCAtYyBtZXJnZS5sb2c9MyBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5sb2c9NSBzaG93cyBhbGwgNSBjb21taXRzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJZ2l0IC1jIG1lcmdlLmxvZz01IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbG9nPTUgd2l0aCBjdXN0b20gY29tbWVudCBjaGFyYWN0ZXInICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCXggQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwl4IFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDoKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwlnaXQgLWMgY29yZS5jb21tZW50Y2hhcj0ieCIgZm10LW1lcmdlLW1zZyAtLWxvZz01IDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS5sb2c9MCBkaXNhYmxlcyBzaG9ydGxvZycgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30iID5leHBlY3RlZCAmJgorCWdpdCAtYyBtZXJnZS5sb2c9MCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvZz0zIGxpbWl0cyBzaG9ydGxvZyBsZW5ndGgnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDogKDUgY29tbWl0cykKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIC4uLgorCUVPRgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgLS1sb2c9MyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb2c9NSBzaG93cyBhbGwgNSBjb21taXRzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgLS1sb2c9NSA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1sb2cgZGlzYWJsZXMgc2hvcnRsb2cnICcKKwllY2hvICJNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtLW5vLWxvZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb2c9MCBkaXNhYmxlcyBzaG9ydGxvZycgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30iID5leHBlY3RlZCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbm8tbG9nIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmbXQtbWVyZ2UtbXNnIC1tJyAnCisJZWNobyAiU3luYyB3aXRoIGxlZnQiID5leHBlY3RlZCAmJgorCWNhdCA+ZXhwZWN0ZWQubG9nIDw8LUVPRiAmJgorCVN5bmMgd2l0aCBsZWZ0CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqICR7YXBvc31sZWZ0JHthcG9zfSBvZiAkKHB3ZCk6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLnN1bW1hcnkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGZldGNoICIkKHB3ZCkiIGxlZnQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtbSAiU3luYyB3aXRoIGxlZnQiIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbG9nIC1tICJTeW5jIHdpdGggbGVmdCIgXAorCQkJCQk8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtbSAiU3luYyB3aXRoIGxlZnQiIFwKKwkJCQkJPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsLmxvZy1jb25maWcgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtLW5vLWxvZyAtbSAiU3luYyB3aXRoIGxlZnQiIFwKKwkJCQkJPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsLm5vbG9nICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5sb2cgYWN0dWFsLmxvZyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmxvZyBhY3R1YWwubG9nLWNvbmZpZyAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5ub2xvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogZXhwZWN0ZWQgc2hvcnRsb2cgZm9yIHR3byBicmFuY2hlcycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GCisJTWVyZ2UgYnJhbmNoZXMgJHthcG9zfWxlZnQke2Fwb3N9IGFuZCAke2Fwb3N9cmlnaHQke2Fwb3N9CisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCisJKiByaWdodDoKKwkgIFJpZ2h0ICM1CisJICBSaWdodCAjNAorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIGZvciB0d28gYnJhbmNoZXMnICcKKwl0ZXN0X2NvbmZpZyBtZXJnZS5sb2cgdHJ1ZSAmJgorCXRlc3RfdW5jb25maWcgbWVyZ2Uuc3VtbWFyeSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsMSAmJgorCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDIgJiYKKworCXRlc3RfY29uZmlnIG1lcmdlLmxvZyB5ZXMgJiYKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLnN1bW1hcnkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDMgJiYKKworCXRlc3RfdW5jb25maWcgbWVyZ2UubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2Uuc3VtbWFyeSB5ZXMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDQgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMyAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIC1GJyAnCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgLUYgLmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIC1GIGluIHN1YmRpcmVjdG9yeScgJworCXRlc3RfdW5jb25maWcgbWVyZ2UubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2Uuc3VtbWFyeSB5ZXMgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCW1rZGlyIHN1YiAmJgorCWNwIC5naXQvRkVUQ0hfSEVBRCBzdWIvRkVUQ0hfSEVBRCAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBmbXQtbWVyZ2UtbXNnIC1GIEZFVENIX0hFQUQgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHdpdGggbm90aGluZyB0byBtZXJnZScgJworCXRlc3RfdW5jb25maWcgbWVyZ2UubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2Uuc3VtbWFyeSB5ZXMgJiYKKworCSgKKwkJY2QgcmVtb3RlICYmCisJCWdpdCBjaGVja291dCAtYiB1bnJlbGF0ZWQgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+Li4vYWN0dWFsCisJKSAmJgorCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGFnJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSB0YWcgJHthcG9zfXRhZy1yMyR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gdGFnIHRhZy1yMyAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0d28gdGFncycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgdGFncyAke2Fwb3N9dGFnLXIzJHthcG9zfSBhbmQgJHthcG9zfXRhZy1sNSR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIHRhZyAke2Fwb3N9dGFnLWw1JHthcG9zfToKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gdGFnIHRhZy1yMyB0YWcgdGFnLWw1ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRhZyBhbmQgYnJhbmNoJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9LCB0YWcgJHthcG9zfXRhZy1yMyR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIHRhZyB0YWctcjMgbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyBsb3RzIG9mIGNvbW1pdHMnICcKKwl7CisJCWNhdCA8PC1FT0YgJiYKKwkJTWVyZ2UgYnJhbmNoICR7YXBvc31sb25nJHthcG9zfQorCisJCSogbG9uZzogKDM1IGNvbW1pdHMpCisJCUVPRgorCisJCWk9MjkgJiYKKwkJd2hpbGUgdGVzdCAkaSAtZ3QgOQorCQlkbworCQkJZWNobyAiICAkaSIgJiYKKwkJCWk9JCgoJGktMSkpCisJCWRvbmUgJiYKKwkJZWNobyAiICAuLi4iCisJfSA+ZXhwZWN0ZWQgJiYKKworCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbG9uZyAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB3aXRoICJtZXJnaW5nIiBhbiBhbm5vdGF0ZWQgdGFnJyAnCisJdGVzdF9jb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiT25lIHN0ZXAgYWhlYWQiICYmCisJZ2l0IHRhZyAtYSAtbSAiQW4gYW5ub3RhdGVkIG9uZSIgYW5ub3RlIEhFQUQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgZmV0Y2ggLiBhbm5vdGUgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXsKKwkJY2F0IDw8LVxFT0YKKwkJTWVyZ2UgdGFnICdcJydhbm5vdGUnXCcnCisKKwkJQW4gYW5ub3RhdGVkIG9uZQorCisJCSogdGFnICdcJydhbm5vdGUnXCcnOgorCQkgIE9uZSBzdGVwIGFoZWFkCisJCUVPRgorCX0gPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJYW5ub3RlPSQoZ2l0IHJldi1wYXJzZSBhbm5vdGUpICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC0tbm8tZmYgJGFubm90ZSAmJgorCXsKKwkJY2F0IDw8LUVPRgorCQlNZXJnZSB0YWcgJ1wnJyRhbm5vdGUnXCcnCisKKwkJQW4gYW5ub3RhdGVkIG9uZQorCisJCSogdGFnICdcJyckYW5ub3RlJ1wnJzoKKwkJICBPbmUgc3RlcCBhaGVhZAorCQlFT0YKKwl9ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvTUVSR0VfTVNHCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2ggYi90L3Q2MzAwLWZvci1lYWNoLXJlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YzkxMGNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKQEAgLTAsMCArMSw4OTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQW5keSBQYXJraW5zCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2Zvci1lYWNoLXJlZiB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItdGVybWluYWwuc2gKKworIyBNb24gSnVsIDMgMjM6MTg6NDMgMjAwNiArMDAwMAorZGF0ZXN0YW1wPTExNTE5Njg3MjMKK3NldGRhdGVfYW5kX2luY3JlbWVudCAoKSB7CisgICAgR0lUX0NPTU1JVFRFUl9EQVRFPSIkZGF0ZXN0YW1wICswMjAwIgorICAgIGRhdGVzdGFtcD0kKGV4cHIgIiRkYXRlc3RhbXAiICsgMSkKKyAgICBHSVRfQVVUSE9SX0RBVEU9IiRkYXRlc3RhbXAgKzAyMDAiCisgICAgZGF0ZXN0YW1wPSQoZXhwciAiJGRhdGVzdGFtcCIgKyAxKQorICAgIGV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXNldGRhdGVfYW5kX2luY3JlbWVudCAmJgorCWVjaG8gIlVzaW5nICRkYXRlc3RhbXAiID4gb25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCXNldGRhdGVfYW5kX2luY3JlbWVudCAmJgorCWdpdCB0YWcgLWEgLW0gIlRhZ2dpbmcgYXQgJGRhdGVzdGFtcCIgdGVzdHRhZyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIG1hc3RlciAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBub3doZXJlICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBvcmlnaW4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVtb3RlIGFkZCBteWZvcmsgZWxzZXdoZXJlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucHVzaGRlZmF1bHQgbXlmb3JrICYmCisJZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgY3VycmVudAorJworCit0ZXN0X2F0b20oKSB7CisJY2FzZSAiJDEiIGluCisJCWhlYWQpIHJlZj1yZWZzL2hlYWRzL21hc3RlciA7OworCQkgdGFnKSByZWY9cmVmcy90YWdzL3Rlc3R0YWcgOzsKKwkJIHN5bSkgcmVmPXJlZnMvaGVhZHMvc3ltIDs7CisJCSAgICopIHJlZj0kMSA7OworCWVzYWMKKwlwcmludGYgJyVzXG4nICIkMyIgPmV4cGVjdGVkCisJdGVzdF9leHBlY3RfJHs0Oi1zdWNjZXNzfSAkUFJFUkVRICJiYXNpYyBhdG9tOiAkMSAkMiIgIgorCQlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKCQyKScgJHJlZiA+YWN0dWFsICYmCisJCXNhbml0aXplX3BncCA8YWN0dWFsID5hY3R1YWwuY2xlYW4gJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLmNsZWFuCisJIgorfQorCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lIHJlZnMvaGVhZHMvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOiByZWZzL2hlYWRzL21hc3RlcgordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpzaG9ydCBtYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHJlZm5hbWU6bHN0cmlwPTEgaGVhZHMvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOmxzdHJpcD0yIG1hc3RlcgordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpsc3RyaXA9LTEgbWFzdGVyCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOmxzdHJpcD0tMiBoZWFkcy9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHJlZm5hbWU6cnN0cmlwPTEgcmVmcy9oZWFkcwordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpyc3RyaXA9MiByZWZzCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOnJzdHJpcD0tMSByZWZzCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOnJzdHJpcD0tMiByZWZzL2hlYWRzCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOnN0cmlwPTEgaGVhZHMvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOnN0cmlwPTIgbWFzdGVyCit0ZXN0X2F0b20gaGVhZCByZWZuYW1lOnN0cmlwPS0xIG1hc3RlcgordGVzdF9hdG9tIGhlYWQgcmVmbmFtZTpzdHJpcD0tMiBoZWFkcy9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbTpzaG9ydCBvcmlnaW4vbWFzdGVyCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbTpsc3RyaXA9MiBvcmlnaW4vbWFzdGVyCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbTpsc3RyaXA9LTIgb3JpZ2luL21hc3RlcgordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW06cnN0cmlwPTIgcmVmcy9yZW1vdGVzCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbTpyc3RyaXA9LTIgcmVmcy9yZW1vdGVzCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbTpzdHJpcD0yIG9yaWdpbi9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtOnN0cmlwPS0yIG9yaWdpbi9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHB1c2ggcmVmcy9yZW1vdGVzL215Zm9yay9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHB1c2g6c2hvcnQgbXlmb3JrL21hc3RlcgordGVzdF9hdG9tIGhlYWQgcHVzaDpsc3RyaXA9MSByZW1vdGVzL215Zm9yay9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHB1c2g6bHN0cmlwPS0xIG1hc3RlcgordGVzdF9hdG9tIGhlYWQgcHVzaDpyc3RyaXA9MSByZWZzL3JlbW90ZXMvbXlmb3JrCit0ZXN0X2F0b20gaGVhZCBwdXNoOnJzdHJpcD0tMSByZWZzCit0ZXN0X2F0b20gaGVhZCBwdXNoOnN0cmlwPTEgcmVtb3Rlcy9teWZvcmsvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCBwdXNoOnN0cmlwPS0xIG1hc3RlcgordGVzdF9hdG9tIGhlYWQgb2JqZWN0dHlwZSBjb21taXQKK3Rlc3RfYXRvbSBoZWFkIG9iamVjdHNpemUgMTcxCit0ZXN0X2F0b20gaGVhZCBvYmplY3RzaXplOmRpc2sgMTM4Cit0ZXN0X2F0b20gaGVhZCBkZWx0YWJhc2UgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAordGVzdF9hdG9tIGhlYWQgb2JqZWN0bmFtZSAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpCit0ZXN0X2F0b20gaGVhZCBvYmplY3RuYW1lOnNob3J0ICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlZnMvaGVhZHMvbWFzdGVyKQordGVzdF9hdG9tIGhlYWQgb2JqZWN0bmFtZTpzaG9ydD0xICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTEgcmVmcy9oZWFkcy9tYXN0ZXIpCit0ZXN0X2F0b20gaGVhZCBvYmplY3RuYW1lOnNob3J0PTEwICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTEwIHJlZnMvaGVhZHMvbWFzdGVyKQordGVzdF9hdG9tIGhlYWQgdHJlZSAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXJee3RyZWV9KQordGVzdF9hdG9tIGhlYWQgcGFyZW50ICcnCit0ZXN0X2F0b20gaGVhZCBudW1wYXJlbnQgMAordGVzdF9hdG9tIGhlYWQgb2JqZWN0ICcnCit0ZXN0X2F0b20gaGVhZCB0eXBlICcnCit0ZXN0X2F0b20gaGVhZCAnKm9iamVjdG5hbWUnICcnCit0ZXN0X2F0b20gaGVhZCAnKm9iamVjdHR5cGUnICcnCit0ZXN0X2F0b20gaGVhZCBhdXRob3IgJ0EgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExNTE5Njg3MjQgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCBhdXRob3JuYW1lICdBIFUgVGhvcicKK3Rlc3RfYXRvbSBoZWFkIGF1dGhvcmVtYWlsICc8YXV0aG9yQGV4YW1wbGUuY29tPicKK3Rlc3RfYXRvbSBoZWFkIGF1dGhvcmRhdGUgJ1R1ZSBKdWwgNCAwMToxODo0NCAyMDA2ICswMjAwJwordGVzdF9hdG9tIGhlYWQgY29tbWl0dGVyICdDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExNTE5Njg3MjMgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCBjb21taXR0ZXJuYW1lICdDIE8gTWl0dGVyJwordGVzdF9hdG9tIGhlYWQgY29tbWl0dGVyZW1haWwgJzxjb21taXR0ZXJAZXhhbXBsZS5jb20+JwordGVzdF9hdG9tIGhlYWQgY29tbWl0dGVyZGF0ZSAnVHVlIEp1bCA0IDAxOjE4OjQzIDIwMDYgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCB0YWcgJycKK3Rlc3RfYXRvbSBoZWFkIHRhZ2dlciAnJwordGVzdF9hdG9tIGhlYWQgdGFnZ2VybmFtZSAnJwordGVzdF9hdG9tIGhlYWQgdGFnZ2VyZW1haWwgJycKK3Rlc3RfYXRvbSBoZWFkIHRhZ2dlcmRhdGUgJycKK3Rlc3RfYXRvbSBoZWFkIGNyZWF0b3IgJ0MgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTE1MTk2ODcyMyArMDIwMCcKK3Rlc3RfYXRvbSBoZWFkIGNyZWF0b3JkYXRlICdUdWUgSnVsIDQgMDE6MTg6NDMgMjAwNiArMDIwMCcKK3Rlc3RfYXRvbSBoZWFkIHN1YmplY3QgJ0luaXRpYWwnCit0ZXN0X2F0b20gaGVhZCBjb250ZW50czpzdWJqZWN0ICdJbml0aWFsJwordGVzdF9hdG9tIGhlYWQgYm9keSAnJwordGVzdF9hdG9tIGhlYWQgY29udGVudHM6Ym9keSAnJwordGVzdF9hdG9tIGhlYWQgY29udGVudHM6c2lnbmF0dXJlICcnCit0ZXN0X2F0b20gaGVhZCBjb250ZW50cyAnSW5pdGlhbAorJwordGVzdF9hdG9tIGhlYWQgSEVBRCAnKicKKwordGVzdF9hdG9tIHRhZyByZWZuYW1lIHJlZnMvdGFncy90ZXN0dGFnCit0ZXN0X2F0b20gdGFnIHJlZm5hbWU6c2hvcnQgdGVzdHRhZwordGVzdF9hdG9tIHRhZyB1cHN0cmVhbSAnJwordGVzdF9hdG9tIHRhZyBwdXNoICcnCit0ZXN0X2F0b20gdGFnIG9iamVjdHR5cGUgdGFnCit0ZXN0X2F0b20gdGFnIG9iamVjdHNpemUgMTU0Cit0ZXN0X2F0b20gdGFnIG9iamVjdHNpemU6ZGlzayAxMzgKK3Rlc3RfYXRvbSB0YWcgJypvYmplY3RzaXplOmRpc2snIDEzOAordGVzdF9hdG9tIHRhZyBkZWx0YWJhc2UgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAordGVzdF9hdG9tIHRhZyAnKmRlbHRhYmFzZScgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAordGVzdF9hdG9tIHRhZyBvYmplY3RuYW1lICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvdGVzdHRhZykKK3Rlc3RfYXRvbSB0YWcgb2JqZWN0bmFtZTpzaG9ydCAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWZzL3RhZ3MvdGVzdHRhZykKK3Rlc3RfYXRvbSBoZWFkIG9iamVjdG5hbWU6c2hvcnQ9MSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xIHJlZnMvaGVhZHMvbWFzdGVyKQordGVzdF9hdG9tIGhlYWQgb2JqZWN0bmFtZTpzaG9ydD0xMCAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMCByZWZzL2hlYWRzL21hc3RlcikKK3Rlc3RfYXRvbSB0YWcgdHJlZSAnJwordGVzdF9hdG9tIHRhZyBwYXJlbnQgJycKK3Rlc3RfYXRvbSB0YWcgbnVtcGFyZW50ICcnCit0ZXN0X2F0b20gdGFnIG9iamVjdCAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL3Rlc3R0YWdeMCkKK3Rlc3RfYXRvbSB0YWcgdHlwZSAnY29tbWl0JwordGVzdF9hdG9tIHRhZyAnKm9iamVjdG5hbWUnICdlYTEyMjg0MmY0OGJlNGFmYjJkMWZjNmE0Yjk2YzA1ODg1YWI3NDYzJwordGVzdF9hdG9tIHRhZyAnKm9iamVjdHR5cGUnICdjb21taXQnCit0ZXN0X2F0b20gdGFnIGF1dGhvciAnJwordGVzdF9hdG9tIHRhZyBhdXRob3JuYW1lICcnCit0ZXN0X2F0b20gdGFnIGF1dGhvcmVtYWlsICcnCit0ZXN0X2F0b20gdGFnIGF1dGhvcmRhdGUgJycKK3Rlc3RfYXRvbSB0YWcgY29tbWl0dGVyICcnCit0ZXN0X2F0b20gdGFnIGNvbW1pdHRlcm5hbWUgJycKK3Rlc3RfYXRvbSB0YWcgY29tbWl0dGVyZW1haWwgJycKK3Rlc3RfYXRvbSB0YWcgY29tbWl0dGVyZGF0ZSAnJwordGVzdF9hdG9tIHRhZyB0YWcgJ3Rlc3R0YWcnCit0ZXN0X2F0b20gdGFnIHRhZ2dlciAnQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTUxOTY4NzI1ICswMjAwJwordGVzdF9hdG9tIHRhZyB0YWdnZXJuYW1lICdDIE8gTWl0dGVyJwordGVzdF9hdG9tIHRhZyB0YWdnZXJlbWFpbCAnPGNvbW1pdHRlckBleGFtcGxlLmNvbT4nCit0ZXN0X2F0b20gdGFnIHRhZ2dlcmRhdGUgJ1R1ZSBKdWwgNCAwMToxODo0NSAyMDA2ICswMjAwJwordGVzdF9hdG9tIHRhZyBjcmVhdG9yICdDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExNTE5Njg3MjUgKzAyMDAnCit0ZXN0X2F0b20gdGFnIGNyZWF0b3JkYXRlICdUdWUgSnVsIDQgMDE6MTg6NDUgMjAwNiArMDIwMCcKK3Rlc3RfYXRvbSB0YWcgc3ViamVjdCAnVGFnZ2luZyBhdCAxMTUxOTY4NzI3JwordGVzdF9hdG9tIHRhZyBjb250ZW50czpzdWJqZWN0ICdUYWdnaW5nIGF0IDExNTE5Njg3MjcnCit0ZXN0X2F0b20gdGFnIGJvZHkgJycKK3Rlc3RfYXRvbSB0YWcgY29udGVudHM6Ym9keSAnJwordGVzdF9hdG9tIHRhZyBjb250ZW50czpzaWduYXR1cmUgJycKK3Rlc3RfYXRvbSB0YWcgY29udGVudHMgJ1RhZ2dpbmcgYXQgMTE1MTk2ODcyNworJwordGVzdF9hdG9tIHRhZyBIRUFEICcgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBpbnZhbGlkIGF0b21zIG5hbWVzIGFyZSBlcnJvcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKElOVkFMSUQpIiByZWZzL2hlYWRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBpZ25vcmVkIGluIG5hbWluZyBkYXRlIGF0b21zJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpkZWZhdWx0KSAlKGF1dGhvcmRhdGUpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlKSAlKGF1dGhvcmRhdGU6ZGVmYXVsdCkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6ZGVmYXVsdCkgJShhdXRob3JkYXRlOmRlZmF1bHQpIiByZWZzL2hlYWRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHZhbGlkIGZvcm1hdCBzcGVjaWZpZXJzIGZvciBkYXRlIGZpZWxkcycgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpkZWZhdWx0KSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpyZWxhdGl2ZSkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6c2hvcnQpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOmxvY2FsKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTppc284NjAxKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpyZmMyODIyKSIgcmVmcy9oZWFkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBpbnZhbGlkIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBlcnJvcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6SU5WQUxJRCkiIHJlZnMvaGVhZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJndW1lbnRzIHRvICUob2JqZWN0bmFtZTpzaG9ydD0pIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWU6c2hvcnQ9MCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lOnNob3J0PS0xKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWU6c2hvcnQ9Zm9vKSIKKycKKwordGVzdF9kYXRlICgpIHsKKwlmPSQxICYmCisJY29tbWl0dGVyX2RhdGU9JDIgJiYKKwlhdXRob3JfZGF0ZT0kMyAmJgorCXRhZ2dlcl9kYXRlPSQ0ICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkncmVmcy9oZWFkcy9tYXN0ZXInICckY29tbWl0dGVyX2RhdGUnICckYXV0aG9yX2RhdGUnCisJJ3JlZnMvdGFncy90ZXN0dGFnJyAnJHRhZ2dlcl9kYXRlJworCUVPRgorCSgKKwkJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIFwKKwkJCS0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZSR7ZjorOiRmfSkgJShhdXRob3JkYXRlJHtmOis6JGZ9KSIgXAorCQkJcmVmcy9oZWFkcyAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgXAorCQkJLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSh0YWdnZXJkYXRlJHtmOis6JGZ9KSIgXAorCQkJcmVmcy90YWdzCisJKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHVuZm9ybWF0dGVkIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSAiIiBcCisJCSJUdWUgSnVsIDQgMDE6MTg6NDMgMjAwNiArMDIwMCIgXAorCQkiVHVlIEp1bCA0IDAxOjE4OjQ0IDIwMDYgKzAyMDAiIFwKKwkJIlR1ZSBKdWwgNCAwMToxODo0NSAyMDA2ICswMjAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgImRlZmF1bHQiIGZvcm1hdHRlZCBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgZGVmYXVsdCBcCisJCSJUdWUgSnVsIDQgMDE6MTg6NDMgMjAwNiArMDIwMCIgXAorCQkiVHVlIEp1bCA0IDAxOjE4OjQ0IDIwMDYgKzAyMDAiIFwKKwkJIlR1ZSBKdWwgNCAwMToxODo0NSAyMDA2ICswMjAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgImRlZmF1bHQtbG9jYWwiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSBkZWZhdWx0LWxvY2FsICJNb24gSnVsIDMgMjM6MTg6NDMgMjAwNiIgIk1vbiBKdWwgMyAyMzoxODo0NCAyMDA2IiAiTW9uIEp1bCAzIDIzOjE4OjQ1IDIwMDYiCisnCisKKyMgRG9uJ3Qga25vdyBob3cgdG8gZG8gcmVsYXRpdmUgY2hlY2sgYmVjYXVzZSBJIGNhbid0IGtub3cgd2hlbiB0aGlzIHNjcmlwdAorIyBpcyBnb2luZyB0byBiZSBydW4gYW5kIGNhbid0IGZha2UgdGhlIGN1cnJlbnQgdGltZSB0byBnaXQsIGFuZCBoZW5jZSBjYW4ndAorIyBwcm92aWRlIGV4cGVjdGVkIG91dHB1dC4gIEluc3RlYWQsIEknbGwganVzdCBtYWtlIHN1cmUgdGhhdCAicmVsYXRpdmUiCisjIGRvZXNuJ3QgZXhpdCBpbiBlcnJvcgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJyZWxhdGl2ZSIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJZj1yZWxhdGl2ZSAmJgorCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlOiRmKSAlKGF1dGhvcmRhdGU6JGYpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZTokZikiIHJlZnMvdGFncykgPmFjdHVhbAorJworCisjIFdlIGp1c3QgY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzICJyZWxhdGl2ZSIgZm9yIG5vdy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAicmVsYXRpdmUtbG9jYWwiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByZWxhdGl2ZS1sb2NhbCBcCisJCSIkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoY29tbWl0dGVyZGF0ZTpyZWxhdGl2ZSkiIHJlZnMvaGVhZHMpIiBcCisJCSIkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpyZWxhdGl2ZSkiIHJlZnMvaGVhZHMpIiBcCisJCSIkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodGFnZ2VyZGF0ZTpyZWxhdGl2ZSkiIHJlZnMvdGFncykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAic2hvcnQiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSBzaG9ydCAyMDA2LTA3LTA0IDIwMDYtMDctMDQgMjAwNi0wNy0wNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgInNob3J0LWxvY2FsIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgc2hvcnQtbG9jYWwgMjAwNi0wNy0wMyAyMDA2LTA3LTAzIDIwMDYtMDctMDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJsb2NhbCIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIGxvY2FsIFwKKwkJIk1vbiBKdWwgMyAyMzoxODo0MyAyMDA2IiBcCisJCSJNb24gSnVsIDMgMjM6MTg6NDQgMjAwNiIgXAorCQkiTW9uIEp1bCAzIDIzOjE4OjQ1IDIwMDYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAiaXNvODYwMSIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIGlzbzg2MDEgXAorCQkiMjAwNi0wNy0wNCAwMToxODo0MyArMDIwMCIgXAorCQkiMjAwNi0wNy0wNCAwMToxODo0NCArMDIwMCIgXAorCQkiMjAwNi0wNy0wNCAwMToxODo0NSArMDIwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJpc284NjAxLWxvY2FsIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgaXNvODYwMS1sb2NhbCAiMjAwNi0wNy0wMyAyMzoxODo0MyArMDAwMCIgIjIwMDYtMDctMDMgMjM6MTg6NDQgKzAwMDAiICIyMDA2LTA3LTAzIDIzOjE4OjQ1ICswMDAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgInJmYzI4MjIiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByZmMyODIyIFwKKwkJIlR1ZSwgNCBKdWwgMjAwNiAwMToxODo0MyArMDIwMCIgXAorCQkiVHVlLCA0IEp1bCAyMDA2IDAxOjE4OjQ0ICswMjAwIiBcCisJCSJUdWUsIDQgSnVsIDIwMDYgMDE6MTg6NDUgKzAyMDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAicmZjMjgyMi1sb2NhbCIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIHJmYzI4MjItbG9jYWwgIk1vbiwgMyBKdWwgMjAwNiAyMzoxODo0MyArMDAwMCIgIk1vbiwgMyBKdWwgMjAwNiAyMzoxODo0NCArMDAwMCIgIk1vbiwgMyBKdWwgMjAwNiAyMzoxODo0NSArMDAwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJyYXciIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByYXcgIjExNTE5Njg3MjMgKzAyMDAiICIxMTUxOTY4NzI0ICswMjAwIiAiMTE1MTk2ODcyNSArMDIwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJyYXctbG9jYWwiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByYXctbG9jYWwgIjExNTE5Njg3MjMgKzAwMDAiICIxMTUxOTY4NzI0ICswMDAwIiAiMTE1MTk2ODcyNSArMDAwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0IG9mIHN0cmZ0aW1lIGRhdGUgZmllbGRzJyAnCisJZWNobyAibXkgZGF0ZSBpcyAyMDA2LTA3LTA0IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIFwKKwkgIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6Zm9ybWF0Om15IGRhdGUgaXMgJVktJW0tJWQpIiBcCisJICByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0IG9mIHN0cmZ0aW1lLWxvY2FsIGRhdGUgZmllbGRzJyAnCisJZWNobyAibXkgZGF0ZSBpcyAyMDA2LTA3LTAzIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIFwKKwkgIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6Zm9ybWF0LWxvY2FsOm15IGRhdGUgaXMgJVktJW0tJWQpIiBcCisJICByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhlcmNpc2Ugc3RyZnRpbWUgd2l0aCBvZGQgZmllbGRzJyAnCisJZWNobyA+ZXhwZWN0ZWQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6Zm9ybWF0OikiIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWxvbmc9ImxvbmcgZm9ybWF0IC0tICRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCRaRVJPX09JRCIgJiYKKwllY2hvICRsb25nID5leHBlY3RlZCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpmb3JtYXQ6JGxvbmcpIiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvaGVhZHMvbWFzdGVyCityZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorcmVmcy90YWdzL3Rlc3R0YWcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgYXNjZW5kaW5nIHNvcnQnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLXNvcnQ9cmVmbmFtZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvdGFncy90ZXN0dGFnCityZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorcmVmcy9oZWFkcy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgZGVzY2VuZGluZyBzb3J0JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgLS1zb3J0PS1yZWZuYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvdGFncy90ZXN0dGFnCityZWZzL3RhZ3MvdGVzdHRhZy0yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhlcmNpc2UgcGF0dGVybnMgd2l0aCBwcmVmaXhlcycgJworCWdpdCB0YWcgdGVzdHRhZy0yICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdGFnIC1kIHRlc3R0YWctMiIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiBcCisJCXJlZnMvdGFncy90ZXN0dGFnIHJlZnMvdGFncy90ZXN0dGFnLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorcmVmcy90YWdzL3Rlc3R0YWcKK3JlZnMvdGFncy90ZXN0dGFnLTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGVyY2lzZSBnbG9iIHBhdHRlcm5zIHdpdGggcHJlZml4ZXMnICcKKwlnaXQgdGFnIHRlc3R0YWctMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCB0ZXN0dGFnLTIiICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgXAorCQlyZWZzL3RhZ3MvdGVzdHRhZyAicmVmcy90YWdzL3Rlc3R0YWctKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorJ3JlZnMvaGVhZHMvbWFzdGVyJworJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJworJ3JlZnMvdGFncy90ZXN0dGFnJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHNoZWxsJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHBlcmwnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tcGVybCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdW90aW5nIHN0eWxlOiBweXRob24nICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tcHl0aG9uIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCisicmVmcy9oZWFkcy9tYXN0ZXIiCisicmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiCisicmVmcy90YWdzL3Rlc3R0YWciCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVvdGluZyBzdHlsZTogdGNsJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXRjbCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitmb3IgaSBpbiAiLS1wZXJsIC0tc2hlbGwiICItcyAtLXB5dGhvbiIgIi0tcHl0aG9uIC0tdGNsIiAiLS10Y2wgLS1wZXJsIjsgZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtb3JlIHRoYW4gb25lIHF1b3Rpbmcgc3R5bGU6ICRpIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgJGkgMj5lcnIgJiYKKwkJZ3JlcCAnXmVycm9yOiBtb3JlIHRoYW4gb25lIHF1b3Rpbmcgc3R5bGUnIGVycgorCSIKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHVwc3RyZWFtOnRyYWNrW3Nob3J0XScgJworCXRlc3RfY29tbWl0IHR3bworJworCit0ZXN0X2F0b20gaGVhZCB1cHN0cmVhbTp0cmFjayAnW2FoZWFkIDFdJwordGVzdF9hdG9tIGhlYWQgdXBzdHJlYW06dHJhY2tzaG9ydCAnPicKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtOnRyYWNrLG5vYnJhY2tldCAnYWhlYWQgMScKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtOm5vYnJhY2tldCx0cmFjayAnYWhlYWQgMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHB1c2g6dHJhY2tbc2hvcnRdJyAnCisJdGVzdF9jb21taXQgdGhpcmQgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbXlmb3JrL21hc3RlciBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgbWFzdGVyfjEKKycKKwordGVzdF9hdG9tIGhlYWQgcHVzaDp0cmFjayAnW2JlaGluZCAxXScKK3Rlc3RfYXRvbSBoZWFkIHB1c2g6dHJhY2tzaG9ydCAnPCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdGhhdCA6dHJhY2tbc2hvcnRdIGNhbm5vdCBiZSB1c2VkIHdpdGggb3RoZXIgYXRvbXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6dHJhY2spIiAyPi9kZXYvbnVsbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZTp0cmFja3Nob3J0KSIgMj4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdGhhdCA6dHJhY2tbc2hvcnRdIHdvcmtzIHdoZW4gdXBzdHJlYW0gaXMgaW52YWxpZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCVtnb25lXQorCisJRU9GCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZG9lcy1ub3QtZXhpc3QgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIFwKKwkJLS1mb3JtYXQ9IiUodXBzdHJlYW06dHJhY2spJExGJSh1cHN0cmVhbTp0cmFja3Nob3J0KSIgXAorCQlyZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9yIGludmFsaWQgcmVmbmFtZSBmb3JtYXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6SU5WQUxJRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBjb2xvciB0ZXN0cycgJworCWNhdCA+ZXhwZWN0ZWQuY29sb3IgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy9oZWFkcy9tYXN0ZXIpIDxHUkVFTj5tYXN0ZXI8UkVTRVQ+CisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy9yZW1vdGVzL215Zm9yay9tYXN0ZXIpIDxHUkVFTj5teWZvcmsvbWFzdGVyPFJFU0VUPgorCSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSA8R1JFRU4+b3JpZ2luL21hc3RlcjxSRVNFVD4KKwkkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWZzL3RhZ3MvdGVzdHRhZykgPEdSRUVOPnRlc3R0YWc8UkVTRVQ+CisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy90YWdzL3RoaXJkKSA8R1JFRU4+dGhpcmQ8UkVTRVQ+CisJJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy90YWdzL3R3bykgPEdSRUVOPnR3bzxSRVNFVD4KKwlFT0YKKwlzZWQgInMvPFtePl0qPi8vZyIgPGV4cGVjdGVkLmNvbG9yID5leHBlY3RlZC5iYXJlICYmCisJY29sb3JfZm9ybWF0PSIlKG9iamVjdG5hbWU6c2hvcnQpICUoY29sb3I6Z3JlZW4pJShyZWZuYW1lOnNob3J0KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJyUoY29sb3IpIHNob3dzIGNvbG9yIHdpdGggYSB0dHknICcKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiRjb2xvcl9mb3JtYXQiID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmNvbG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKGNvbG9yKSBkb2VzIG5vdCBzaG93IGNvbG9yIHdpdGhvdXQgdHR5JyAnCisJVEVSTT12dDEwMCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIkY29sb3JfZm9ybWF0IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYmFyZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb2xvciBjYW4gb3ZlcnJpZGUgdHR5IGNoZWNrJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWNvbG9yIC0tZm9ybWF0PSIkY29sb3JfZm9ybWF0IiA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5jb2xvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3IudWk9YWx3YXlzIGRvZXMgbm90IG92ZXJyaWRlIHR0eSBjaGVjaycgJworCWdpdCAtYyBjb2xvci51aT1hbHdheXMgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIkY29sb3JfZm9ybWF0IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYmFyZSBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2hlYWRzL21hc3RlcgordGFncy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBhbWJpZ3VvdXMgaGVhZCBhbmQgdGFnIHJlZnMgKHN0cmljdCknICcKKwlnaXQgY29uZmlnIC0tYm9vbCBjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3dGFnICYmCisJZWNobyAiVXNpbmcgJGRhdGVzdGFtcCIgPiBvbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIkJyYW5jaCIgJiYKKwlzZXRkYXRlX2FuZF9pbmNyZW1lbnQgJiYKKwlnaXQgdGFnIC1tICJUYWdnaW5nIGF0ICRkYXRlc3RhbXAiIG1hc3RlciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQgIiUocmVmbmFtZTpzaG9ydCkiIHJlZnMvaGVhZHMvbWFzdGVyIHJlZnMvdGFncy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgoraGVhZHMvbWFzdGVyCittYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBhbWJpZ3VvdXMgaGVhZCBhbmQgdGFnIHJlZnMgKGxvb3NlKScgJworCWdpdCBjb25maWcgLS1ib29sIGNvcmUud2FybmFtYmlndW91c3JlZnMgZmFsc2UgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0ICIlKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzL21hc3RlciByZWZzL3RhZ3MvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2hlYWRzL2FtYmlndW91cworYW1iaWd1b3VzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgYW1iaWd1b3VzIGhlYWQgYW5kIHRhZyByZWZzIElJIChsb29zZSknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyBhbWJpZ3VvdXMgdGVzdHRhZ14wICYmCisJZ2l0IGJyYW5jaCBhbWJpZ3VvdXMgdGVzdHRhZ14wICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdCAiJShyZWZuYW1lOnNob3J0KSIgcmVmcy9oZWFkcy9hbWJpZ3VvdXMgcmVmcy90YWdzL2FtYmlndW91cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB0YWcgd2l0aG91dCB0YWdnZXInICcKKwlnaXQgdGFnIC1hIC1tICJCcm9rZW4gdGFnIiB0YWdnZXJsZXNzICYmCisJZ2l0IHRhZyAtZiB0YWdnZXJsZXNzICQoZ2l0IGNhdC1maWxlIHRhZyB0YWdnZXJsZXNzIHwKKwkJc2VkIC1lICIvXnRhZ2dlciAvZCIgfAorCQlnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdyAtdCB0YWcpCisnCisKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyB0eXBlICdjb21taXQnCit0ZXN0X2F0b20gcmVmcy90YWdzL3RhZ2dlcmxlc3MgdGFnICd0YWdnZXJsZXNzJwordGVzdF9hdG9tIHJlZnMvdGFncy90YWdnZXJsZXNzIHRhZ2dlciAnJwordGVzdF9hdG9tIHJlZnMvdGFncy90YWdnZXJsZXNzIHRhZ2dlcm5hbWUgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyB0YWdnZXJlbWFpbCAnJwordGVzdF9hdG9tIHJlZnMvdGFncy90YWdnZXJsZXNzIHRhZ2dlcmRhdGUgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyBjb21taXR0ZXIgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyBjb21taXR0ZXJuYW1lICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3RhZ2dlcmxlc3MgY29tbWl0dGVyZW1haWwgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvdGFnZ2VybGVzcyBjb21taXR0ZXJkYXRlICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3RhZ2dlcmxlc3Mgc3ViamVjdCAnQnJva2VuIHRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW4gdW51c3VhbCB0YWcgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUnICcKKworCWdpdCB0YWcgLW0gImJvZ28iIGJvZ28gJiYKKwlib2dvPSQoZ2l0IGNhdC1maWxlIHRhZyBib2dvKSAmJgorCWJvZ289JChwcmludGYgIiVzIiAiJGJvZ28iIHwgZ2l0IG1rdGFnKSAmJgorCWdpdCB0YWcgLWYgYm9nbyAiJGJvZ28iICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdCAiJShib2R5KSIgcmVmcy90YWdzL2JvZ28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgdGFnIHdpdGggc3ViamVjdCBhbmQgYm9keSBjb250ZW50JyAnCisJY2F0ID4+bXNnIDw8LVxFT0YgJiYKKwkJdGhlIHN1YmplY3QgbGluZQorCisJCWZpcnN0IGJvZHkgbGluZQorCQlzZWNvbmQgYm9keSBsaW5lCisJRU9GCisJZ2l0IHRhZyAtRiBtc2cgc3ViamVjdC1ib2R5CisnCit0ZXN0X2F0b20gcmVmcy90YWdzL3N1YmplY3QtYm9keSBzdWJqZWN0ICd0aGUgc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zdWJqZWN0LWJvZHkgYm9keSAnZmlyc3QgYm9keSBsaW5lCitzZWNvbmQgYm9keSBsaW5lCisnCit0ZXN0X2F0b20gcmVmcy90YWdzL3N1YmplY3QtYm9keSBjb250ZW50cyAndGhlIHN1YmplY3QgbGluZQorCitmaXJzdCBib2R5IGxpbmUKK3NlY29uZCBib2R5IGxpbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHRhZyB3aXRoIG11bHRpbGluZSBzdWJqZWN0JyAnCisJY2F0ID5tc2cgPDwtXEVPRiAmJgorCQlmaXJzdCBzdWJqZWN0IGxpbmUKKwkJc2Vjb25kIHN1YmplY3QgbGluZQorCisJCWZpcnN0IGJvZHkgbGluZQorCQlzZWNvbmQgYm9keSBsaW5lCisJRU9GCisJZ2l0IHRhZyAtRiBtc2cgbXVsdGlsaW5lCisnCit0ZXN0X2F0b20gcmVmcy90YWdzL211bHRpbGluZSBzdWJqZWN0ICdmaXJzdCBzdWJqZWN0IGxpbmUgc2Vjb25kIHN1YmplY3QgbGluZScKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvbXVsdGlsaW5lIGNvbnRlbnRzOnN1YmplY3QgJ2ZpcnN0IHN1YmplY3QgbGluZSBzZWNvbmQgc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9tdWx0aWxpbmUgYm9keSAnZmlyc3QgYm9keSBsaW5lCitzZWNvbmQgYm9keSBsaW5lCisnCit0ZXN0X2F0b20gcmVmcy90YWdzL211bHRpbGluZSBjb250ZW50czpib2R5ICdmaXJzdCBib2R5IGxpbmUKK3NlY29uZCBib2R5IGxpbmUKKycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvbXVsdGlsaW5lIGNvbnRlbnRzOnNpZ25hdHVyZSAnJwordGVzdF9hdG9tIHJlZnMvdGFncy9tdWx0aWxpbmUgY29udGVudHMgJ2ZpcnN0IHN1YmplY3QgbGluZQorc2Vjb25kIHN1YmplY3QgbGluZQorCitmaXJzdCBib2R5IGxpbmUKK3NlY29uZCBib2R5IGxpbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0ZSBzaWduZWQgdGFncycgJworCWdpdCB0YWcgLXMgLW0gIiIgc2lnbmVkLWVtcHR5ICYmCisJZ2l0IHRhZyAtcyAtbSAic3ViamVjdCBsaW5lIiBzaWduZWQtc2hvcnQgJiYKKwljYXQgPm1zZyA8PC1cRU9GICYmCisJc3ViamVjdCBsaW5lCisKKwlib2R5IGNvbnRlbnRzCisJRU9GCisJZ2l0IHRhZyAtcyAtRiBtc2cgc2lnbmVkLWxvbmcKKycKKworc2lnPSctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQorLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCisnCisKK1BSRVJFUT1HUEcKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IHN1YmplY3QgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IGNvbnRlbnRzOnN1YmplY3QgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IGJvZHkgIiRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBjb250ZW50czpib2R5ICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBjb250ZW50czpzaWduYXR1cmUgIiRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1lbXB0eSBjb250ZW50cyAiJHNpZyIKKwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgc3ViamVjdCAnc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgY29udGVudHM6c3ViamVjdCAnc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgYm9keSAiJHNpZyIKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IGNvbnRlbnRzOmJvZHkgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IGNvbnRlbnRzOnNpZ25hdHVyZSAiJHNpZyIKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLXNob3J0IGNvbnRlbnRzICJzdWJqZWN0IGxpbmUKKyRzaWciCisKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWxvbmcgc3ViamVjdCAnc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtbG9uZyBjb250ZW50czpzdWJqZWN0ICdzdWJqZWN0IGxpbmUnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1sb25nIGJvZHkgImJvZHkgY29udGVudHMKKyRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1sb25nIGNvbnRlbnRzOmJvZHkgJ2JvZHkgY29udGVudHMKKycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWxvbmcgY29udGVudHM6c2lnbmF0dXJlICIkc2lnIgordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtbG9uZyBjb250ZW50cyAic3ViamVjdCBsaW5lCisKK2JvZHkgY29udGVudHMKKyRzaWciCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKyQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvYm9nbykgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gcmVmcy90YWdzL2JvZ28KKyQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvbWFzdGVyKSA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiByZWZzL3RhZ3MvbWFzdGVyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IHNvcnQgd2l0aCBtdWx0aXBsZSBrZXlzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSAlKHRhZ2dlcmVtYWlsKSAlKHJlZm5hbWUpIiAtLXNvcnQ9b2JqZWN0bmFtZSAtLXNvcnQ9dGFnZ2VyZW1haWwgXAorCQlyZWZzL3RhZ3MvYm9nbyByZWZzL3RhZ3MvbWFzdGVyID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGRlcmVmZXJlbmNlIE5VTEwgdXBvbiAlKEhFQUQpIG9uIHVuYm9ybiBicmFuY2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShIRUFEKSAlKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzLyA+YWN0dWFsICYmCisJc2VkIC1lICJzL15cKiAvICAvIiBhY3R1YWwgPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBvcnBoYW5lZC1icmFuY2ggJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKEhFQUQpICUocmVmbmFtZTpzaG9ydCkiIHJlZnMvaGVhZHMvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+dHJhaWxlcnMgPDxFT0YKK1Jldmlld2VkLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK1sgdjIgdXBkYXRlZCBwYXRjaCBkZXNjcmlwdGlvbiBdCitBY2tlZC1ieTogQSBVIFRob3IKKyAgPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgorCit1bmZvbGQgKCkgeworCXBlcmwgLTBwZSAncy9cblxzKy8gL2cnCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCB0cmFpbGVycyBmb3IgbmV4dCB0ZXN0JyAnCisJZWNobyAiU29tZSBjb250ZW50cyIgPiB0d28gJiYKKwlnaXQgYWRkIHR3byAmJgorCWdpdCBjb21taXQgLUYgLSA8PC1FT0YKKwl0cmFpbGVyczogdGhpcyBjb21taXQgbWVzc2FnZSBoYXMgdHJhaWxlcnMKKworCVNvbWUgbWVzc2FnZSBjb250ZW50cworCisJJChjYXQgdHJhaWxlcnMpCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6dW5mb2xkKSB1bmZvbGRzIHRyYWlsZXJzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJSh0cmFpbGVyczp1bmZvbGQpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJeworCQl1bmZvbGQgPHRyYWlsZXJzCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6b25seSkgc2hvd3Mgb25seSAia2V5OiB2YWx1ZSIgdHJhaWxlcnMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHRyYWlsZXJzOm9ubHkpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJeworCQlncmVwIC12IHBhdGNoLmRlc2NyaXB0aW9uIDx0cmFpbGVycyAmJgorCQllY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOm9ubHkpIGFuZCAlKHRyYWlsZXJzOnVuZm9sZCkgd29yayB0b2dldGhlcicgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodHJhaWxlcnM6b25seSx1bmZvbGQpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJSh0cmFpbGVyczp1bmZvbGQsb25seSkiIHJlZnMvaGVhZHMvbWFzdGVyID5yZXZlcnNlICYmCisJdGVzdF9jbXAgYWN0dWFsIHJldmVyc2UgJiYKKwl7CisJCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzIHwgdW5mb2xkICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoY29udGVudHM6dHJhaWxlcnM6dW5mb2xkKSB1bmZvbGRzIHRyYWlsZXJzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShjb250ZW50czp0cmFpbGVyczp1bmZvbGQpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJeworCQl1bmZvbGQgPHRyYWlsZXJzCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoY29udGVudHM6dHJhaWxlcnM6b25seSkgc2hvd3Mgb25seSAia2V5OiB2YWx1ZSIgdHJhaWxlcnMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGNvbnRlbnRzOnRyYWlsZXJzOm9ubHkpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJeworCQlncmVwIC12IHBhdGNoLmRlc2NyaXB0aW9uIDx0cmFpbGVycyAmJgorCQllY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKGNvbnRlbnRzOnRyYWlsZXJzOm9ubHkpIGFuZCAlKGNvbnRlbnRzOnRyYWlsZXJzOnVuZm9sZCkgd29yayB0b2dldGhlcicgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoY29udGVudHM6dHJhaWxlcnM6b25seSx1bmZvbGQpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShjb250ZW50czp0cmFpbGVyczp1bmZvbGQsb25seSkiIHJlZnMvaGVhZHMvbWFzdGVyID5yZXZlcnNlICYmCisJdGVzdF9jbXAgYWN0dWFsIHJldmVyc2UgJiYKKwl7CisJCWdyZXAgLXYgcGF0Y2guZGVzY3JpcHRpb24gPHRyYWlsZXJzIHwgdW5mb2xkICYmCisJCWVjaG8KKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnMpIHJlamVjdHMgdW5rbm93biB0cmFpbGVycyBhcmd1bWVudHMnICcKKwkjIGVycm9yIG1lc3NhZ2UgY2Fubm90IGJlIGNoZWNrZWQgdW5kZXIgaTE4bgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZhdGFsOiB1bmtub3duICUodHJhaWxlcnMpIGFyZ3VtZW50OiB1bnN1cHBvcnRlZAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodHJhaWxlcnM6dW5zdXBwb3J0ZWQpIiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoY29udGVudHM6dHJhaWxlcnMpIHJlamVjdHMgdW5rbm93biB0cmFpbGVycyBhcmd1bWVudHMnICcKKwkjIGVycm9yIG1lc3NhZ2UgY2Fubm90IGJlIGNoZWNrZWQgdW5kZXIgaTE4bgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZhdGFsOiB1bmtub3duICUodHJhaWxlcnMpIGFyZ3VtZW50OiB1bnN1cHBvcnRlZAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoY29udGVudHM6dHJhaWxlcnM6dW5zdXBwb3J0ZWQpIiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGF0b206IGhlYWQgY29udGVudHM6dHJhaWxlcnMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGNvbnRlbnRzOnRyYWlsZXJzKSIgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXNhbml0aXplX3BncCA8YWN0dWFsID5hY3R1YWwuY2xlYW4gJiYKKwkjIGdpdCBmb3ItZWFjaC1yZWYgZW5kcyB3aXRoIGEgYmxhbmsgbGluZQorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSQoY2F0IHRyYWlsZXJzKQorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5jbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGVyIHBhcnNpbmcgbm90IGZvb2xlZCBieSAtLS0gbGluZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiAtIDw8LVxFT0YgJiYKKwl0aGlzIGlzIHRoZSBzdWJqZWN0CisKKwlUaGlzIGlzIHRoZSBib2R5LiBUaGUgbWVzc2FnZSBoYXMgYSAiLS0tIiBsaW5lIHdoaWNoIHdvdWxkIGNvbmZ1c2UgYQorCW1lc3NhZ2UrcGF0Y2ggcGFyc2VyLiBCdXQgaGVyZSB3ZSBrbm93IHdlIGhhdmUgb25seSBhIGNvbW1pdCBtZXNzYWdlLAorCXNvIHdlIGdldCBpdCByaWdodC4KKworCXRyYWlsZXI6IHdyb25nCisJLS0tCisJVGhpcyBpcyBtb3JlIGJvZHkuCisKKwl0cmFpbGVyOiByaWdodAorCUVPRgorCisJeworCQllY2hvICJ0cmFpbGVyOiByaWdodCIgJiYKKwkJZWNobworCX0gPmV4cGVjdCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodHJhaWxlcnMpIiByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgc3ltYm9saWMgcmVmIGZvciB0aGUgZm9sbG93aW5nIHRlc3RzJyAnCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3N5bSByZWZzL2hlYWRzL21hc3RlcgorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCityZWZzL2hlYWRzL21hc3RlcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSB1c2FnZSBvZiAlKHN5bXJlZikgYXRvbScgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoc3ltcmVmKSIgcmVmcy9oZWFkcy9zeW0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWFkcy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgdXNhZ2Ugb2YgJShzeW1yZWY6c2hvcnQpIGF0b20nICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHN5bXJlZjpzaG9ydCkiIHJlZnMvaGVhZHMvc3ltID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorbWFzdGVyCitoZWFkcy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgdXNhZ2Ugb2YgJShzeW1yZWY6bHN0cmlwKSBhdG9tJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzeW1yZWY6bHN0cmlwPTIpIiByZWZzL2hlYWRzL3N5bSA+IGFjdHVhbCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoc3ltcmVmOmxzdHJpcD0tMikiIHJlZnMvaGVhZHMvc3ltID4+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzeW1yZWY6c3RyaXA9MikiIHJlZnMvaGVhZHMvc3ltID4gYWN0dWFsICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzeW1yZWY6c3RyaXA9LTIpIiByZWZzL2hlYWRzL3N5bSA+PiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorcmVmcworcmVmcy9oZWFkcworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSB1c2FnZSBvZiAlKHN5bXJlZjpyc3RyaXApIGF0b20nICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHN5bXJlZjpyc3RyaXA9MikiIHJlZnMvaGVhZHMvc3ltID4gYWN0dWFsICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShzeW1yZWY6cnN0cmlwPS0yKSIgcmVmcy9oZWFkcy9zeW0gPj4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzpyZW1vdGVuYW1lIGFuZCA6cmVtb3RlcmVmJyAnCisJZ2l0IGluaXQgcmVtb3RlLXRlc3RzICYmCisJKAorCQljZCByZW1vdGUtdGVzdHMgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCQlnaXQgcmVtb3RlIGFkZCBmcm9tIGZpZnRoLmNvZmZlZTpibHViICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgZnJvbSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9zdGFibGUgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgdG8gc291dGhyaWRnZS5hdWRpbzpyZXBvICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnRvLnB1c2ggInJlZnMvaGVhZHMvKjpyZWZzL2hlYWRzL3B1c2hlZC8qIiAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucHVzaFJlbW90ZSB0byAmJgorCQlmb3IgcGFpciBpbiAiJSh1cHN0cmVhbSk9cmVmcy9yZW1vdGVzL2Zyb20vc3RhYmxlIiBcCisJCQkiJSh1cHN0cmVhbTpyZW1vdGVuYW1lKT1mcm9tIiBcCisJCQkiJSh1cHN0cmVhbTpyZW1vdGVyZWYpPXJlZnMvaGVhZHMvc3RhYmxlIiBcCisJCQkiJShwdXNoKT1yZWZzL3JlbW90ZXMvdG8vcHVzaGVkL21hc3RlciIgXAorCQkJIiUocHVzaDpyZW1vdGVuYW1lKT10byIgXAorCQkJIiUocHVzaDpyZW1vdGVyZWYpPXJlZnMvaGVhZHMvcHVzaGVkL21hc3RlciIKKwkJZG8KKwkJCWVjaG8gIiR7cGFpciMqPX0iID5leHBlY3QgJiYKKwkJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiR7cGFpciU9Kn0iIFwKKwkJCQlyZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJCWRvbmUgJiYKKwkJZ2l0IGJyYW5jaCBwdXNoLXNpbXBsZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5wdXNoLXNpbXBsZS5wdXNoUmVtb3RlIGZyb20gJiYKKwkJYWN0dWFsPSIkKGdpdCBmb3ItZWFjaC1yZWYgXAorCQkJLS1mb3JtYXQ9IiUocHVzaDpyZW1vdGVuYW1lKSwlKHB1c2g6cmVtb3RlcmVmKSIgXAorCQkJcmVmcy9oZWFkcy9wdXNoLXNpbXBsZSkiICYmCisJCXRlc3QgZnJvbSwgPSAiJGFjdHVhbCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvci1lYWNoLXJlZiAtLWlnbm9yZS1jYXNlIGlnbm9yZXMgY2FzZScgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIHJlZnMvaGVhZHMvTUFTVEVSID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwllY2hvIHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLWlnbm9yZS1jYXNlIFwKKwkJcmVmcy9oZWFkcy9NQVNURVIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MzAxLWZvci1lYWNoLXJlZi1lcnJvcnMuc2ggYi90L3Q2MzAxLWZvci1lYWNoLXJlZi1lcnJvcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDljYzY1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYzMDEtZm9yLWVhY2gtcmVmLWVycm9ycy5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZm9yLWVhY2gtcmVmIGVycm9ycyBmb3IgYnJva2VuIHJlZnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitaRVJPUz0kWkVST19PSUQKK01JU1NJTkc9YWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkluaXRpYWwiICYmCisJZ2l0IHRhZyB0ZXN0dGFnICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+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+IDEyMzQgLTAwMDAKKworCXRoaXMgaXMgYSBicm9rZW4gdGFnCisJRU9GCisJdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyBicm9rZW4tdGFnKSAmJgorCWdpdCBnYyAtcSAyPnN0ZGVyciAmJgorCWdpdCBjYXQtZmlsZSAtZSAkdGFnICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDY2MDAtdGVzdC1yZWFjaC5zaCBiL3QvdDY2MDAtdGVzdC1yZWFjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMjRkODUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjYwMC10ZXN0LXJlYWNoLnNoCkBAIC0wLDAgKzEsNDA4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgY29tbWl0IHJlYWNoYWJpbGl0eSB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgQ29uc3RydWN0IGEgZ3JpZC1saWtlIGNvbW1pdCBncmFwaCB3aXRoIHBvaW50cyAoeCx5KQorIyB3aXRoIDEgPD0geCA8PSAxMCwgMSA8PSB5IDw9IDEwLCB3aGVyZSAoeCx5KSBoYXMKKyMgcGFyZW50cyAoeC0xLCB5KSBhbmQgKHgsIHktMSksIGtlZXBpbmcgaW4gbWluZCB0aGF0CisjIHdlIGRyb3AgYSBwYXJlbnQgaWYgYSBjb29yZGluYXRlIGlzIG5vbnBvc2l0aXZlLgorIworIyAgICAgICAgICAgICAoMTAsMTApCisjICAgICAgICAgICAgLyAgICAgICBcCisjICAgICAgICAgKDEwLDkpICAgICg5LDEwKQorIyAgICAgICAgLyAgICAgXCAgIC8gICAgICBcCisjICAgICgxMCw4KSAgICAoOSw5KSAgICAgICg4LDEwKQorIyAgIC8gICAgIFwgICAgLyAgIFwgICAgICAvICAgIFwKKyMgICAgICAgICAoIGNvbnRpbnVlZC4uLikKKyMgICBcICAgICAvICAgIFwgICAvICAgICAgXCAgICAvCisjICAgICgzLDEpICAgICAoMiwyKSAgICAgICgxLDMpCisjICAgICAgICBcICAgICAvICAgIFwgICAgIC8KKyMgICAgICAgICAoMiwxKSAgICAgICgyLDEpCisjICAgICAgICAgICAgICBcICAgIC8KKyMgICAgICAgICAgICAgICgxLDEpCisjCisjIFdlIHVzZSBicmFuY2ggJ2NvbW1pdC14LXknIHRvIHJlZmVyIHRvICh4LHkpLgorIyBUaGlzIGdyaWQgYWxsb3dzIGludGVyZXN0aW5nIHJlYWNoYWJpbGl0eSBhbmQKKyMgbm9uLXJlYWNoYWJpbGl0eSBxdWVyaWVzOiAoeCx5KSBjYW4gcmVhY2ggKHgnLHknKQorIyBpZiBhbmQgb25seSBpZiB4JyA8PSB4IGFuZCB5JyA8PSB5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMTApCisJZG8KKwkJdGVzdF9jb21taXQgIjEtJGkiICYmCisJCWdpdCBicmFuY2ggLWYgY29tbWl0LTEtJGkgJiYKKwkJZ2l0IHRhZyAtYSAtbSAiMS0kaSIgdGFnLTEtJGkgY29tbWl0LTEtJGkKKwlkb25lICYmCisJZm9yIGogaW4gJCh0ZXN0X3NlcSAxIDkpCisJZG8KKwkJZ2l0IHJlc2V0IC0taGFyZCBjb21taXQtJGotMSAmJgorCQl4PSQoKCRqICsgMSkpICYmCisJCXRlc3RfY29tbWl0ICIkeC0xIiAmJgorCQlnaXQgYnJhbmNoIC1mIGNvbW1pdC0keC0xICYmCisJCWdpdCB0YWcgLWEgLW0gIiR4LTEiIHRhZy0keC0xIGNvbW1pdC0keC0xICYmCisKKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSAyIDEwKQorCQlkbworCQkJZ2l0IG1lcmdlIGNvbW1pdC0kai0kaSAtbSAiJHgtJGkiICYmCisJCQlnaXQgYnJhbmNoIC1mIGNvbW1pdC0keC0kaSAmJgorCQkJZ2l0IHRhZyAtYSAtbSAiJHgtJGkiIHRhZy0keC0kaSBjb21taXQtJHgtJGkKKwkJZG9uZQorCWRvbmUgJiYKKwlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcmVhY2hhYmxlICYmCisJbXYgLmdpdC9vYmplY3RzL2luZm8vY29tbWl0LWdyYXBoIGNvbW1pdC1ncmFwaC1mdWxsICYmCisJZ2l0IHNob3ctcmVmIC1zIGNvbW1pdC01LTUgfCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyAmJgorCW12IC5naXQvb2JqZWN0cy9pbmZvL2NvbW1pdC1ncmFwaCBjb21taXQtZ3JhcGgtaGFsZiAmJgorCWdpdCBjb25maWcgY29yZS5jb21taXRHcmFwaCB0cnVlCisnCisKK3J1bl90aHJlZV9tb2RlcyAoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiAuZ2l0L29iamVjdHMvaW5mby9jb21taXQtZ3JhcGggJiYKKwkiJEAiIDxpbnB1dCA+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+bmV3ICYmCisJZ2l0IGFkZCBuZXcgJiYKKwluZXdfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCByZXBsYWNlICR0cmVlICRuZXdfdHJlZSAmJgorCWdpdCB0YWcgLWEgLW0gInRhZyB0byBhIHRyZWUiIHRyZWV0YWcgJG5ld190cmVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS0gLS1hbGwgPmZpbHRlci1vdXRwdXQgMj4mMSAmJgorCSEgZmdyZXAgZmF0YWwgZmlsdGVyLW91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDQtdGFnLnNoIGIvdC90NzAwNC10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmRiOTJiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDQtdGFnLnNoCkBAIC0wLDAgKzEsMjA5NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDYXJsb3MgUmljYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdGFnCisKK1Rlc3RzIGZvciBvcGVyYXRpb25zIHdpdGggdGFncy4nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCisjIGNyZWF0aW5nIGFuZCBsaXN0aW5nIGxpZ2h0d2VpZ2h0IHRhZ3M6CisKK3RhZ19leGlzdHMgKCkgeworCWdpdCBzaG93LXJlZiAtLXF1aWV0IC0tdmVyaWZ5IHJlZnMvdGFncy8iJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYWxsIHRhZ3MgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLWwgJiYKKwlnaXQgdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgYWxsIHRhZ3MgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgb3V0cHV0IG5vdGhpbmcnICcKKwl0ZXN0ICQoZ2l0IHRhZyAtbCB8IHdjIC1sKSAtZXEgMCAmJgorCXRlc3QgJChnaXQgdGFnIHwgd2MgLWwpIC1lcSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvcnQgdGFncywgaWdub3JlIGNhc2UnICcKKwkoCisJCWdpdCBpbml0IHNvcnQgJiYKKwkJY2Qgc29ydCAmJgorCQl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJCWdpdCB0YWcgdGFnLW9uZSAmJgorCQlnaXQgdGFnIFRBRy10d28gJiYKKwkJZ2l0IHRhZyAtbCA+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+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBvaW50cy1hdCBmaW5kcyBhbm5vdGF0ZWQgdGFncyBvZiB0YWdzJyAnCisJZ2l0IHRhZyAtbSAiZGVzY3JpYmluZyB0aGUgdjQuMCB0YWcgb2JqZWN0IiBcCisJCWFubm90YXRlZC1hZ2Fpbi12NC4wIGFubm90YXRlZC12NC4wICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWFubm90YXRlZC1hZ2Fpbi12NC4wCisJYW5ub3RhdGVkLXY0LjAKKwlFT0YKKwlnaXQgdGFnIC0tcG9pbnRzLWF0PWFubm90YXRlZC12NC4wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSB0YWdnaW5nIHNob3VsZCBnaXZlIGFkdmljZScgJworCXNlZCAtZSAicy98JC8vIiA8PC1FT0YgPmV4cGVjdCAmJgorCWhpbnQ6IFlvdSBoYXZlIGNyZWF0ZWQgYSBuZXN0ZWQgdGFnLiBUaGUgb2JqZWN0IHJlZmVycmVkIHRvIGJ5IHlvdXIgbmV3IHRhZyBpcworCWhpbnQ6IGFscmVhZHkgYSB0YWcuIElmIHlvdSBtZWFudCB0byB0YWcgdGhlIG9iamVjdCB0aGF0IGl0IHBvaW50cyB0bywgdXNlOgorCWhpbnQ6IHwKKwloaW50OiAJZ2l0IHRhZyAtZiBuZXN0ZWQgYW5ub3RhdGVkLXY0LjBee30KKwlFT0YKKwlnaXQgdGFnIC1tIG5lc3RlZCBuZXN0ZWQgYW5ub3RhdGVkLXY0LjAgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSAtLXBvaW50cy1hdCBhcmUgT1ItZWQgdG9nZXRoZXInICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdjIuMAorCXYzLjAKKwlFT0YKKwlnaXQgdGFnIC0tcG9pbnRzLWF0PXYyLjAgLS1wb2ludHMtYXQ9djMuMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZXhpY2FsIHNvcnQnICcKKwlnaXQgdGFnIGZvbzEuMyAmJgorCWdpdCB0YWcgZm9vMS42ICYmCisJZ2l0IHRhZyBmb28xLjEwICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9cmVmbmFtZSAiZm9vKiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjEwCisJZm9vMS4zCisJZm9vMS42CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJzaW9uIHNvcnQnICcKKwlnaXQgdGFnIC1sIC0tc29ydD12ZXJzaW9uOnJlZm5hbWUgImZvbyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS4zCisJZm9vMS42CisJZm9vMS4xMAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJzZSB2ZXJzaW9uIHNvcnQnICcKKwlnaXQgdGFnIC1sIC0tc29ydD0tdmVyc2lvbjpyZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMTAKKwlmb28xLjYKKwlmb28xLjMKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVyc2UgbGV4aWNhbCBzb3J0JyAnCisJZ2l0IHRhZyAtbCAtLXNvcnQ9LXJlZm5hbWUgImZvbyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS42CisJZm9vMS4zCisJZm9vMS4xMAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlndXJlZCBsZXhpY2FsIHNvcnQnICcKKwl0ZXN0X2NvbmZpZyB0YWcuc29ydCAidjpyZWZuYW1lIiAmJgorCWdpdCB0YWcgLWwgImZvbyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS4zCisJZm9vMS42CisJZm9vMS4xMAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uIG92ZXJyaWRlIGNvbmZpZ3VyZWQgc29ydCcgJworCXRlc3RfY29uZmlnIHRhZy5zb3J0ICJ2OnJlZm5hbWUiICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9LXJlZm5hbWUgImZvbyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS42CisJZm9vMS4zCisJZm9vMS4xMAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBzb3J0IHBhcmFtZXRlciBvbiBjb21tYW5kIGxpbmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1sIC0tc29ydD1ub3R2YWxpZCAiZm9vKiIgPmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHNvcnQgcGFyYW1ldGVyIGluIGNvbmZpZ3VyYXRvaW4nICcKKwl0ZXN0X2NvbmZpZyB0YWcuc29ydCAidjpub3R2YWxpZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1sICJmb28qIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJzaW9uIHNvcnQgd2l0aCBwcmVyZWxlYXNlIHJlb3JkZXJpbmcnICcKKwl0ZXN0X2NvbmZpZyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1yYyAmJgorCWdpdCB0YWcgZm9vMS42LXJjMSAmJgorCWdpdCB0YWcgZm9vMS42LXJjMiAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PXZlcnNpb246cmVmbmFtZSAiZm9vKiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjMKKwlmb28xLjYtcmMxCisJZm9vMS42LXJjMgorCWZvbzEuNgorCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVyc2UgdmVyc2lvbiBzb3J0IHdpdGggcHJlcmVsZWFzZSByZW9yZGVyaW5nJyAnCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQucHJlcmVsZWFzZVN1ZmZpeCAtcmMgJiYKKwlnaXQgdGFnIC1sIC0tc29ydD0tdmVyc2lvbjpyZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMTAKKwlmb28xLjYKKwlmb28xLjYtcmMyCisJZm9vMS42LXJjMQorCWZvbzEuMworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbiBzb3J0IHdpdGggcHJlcmVsZWFzZSByZW9yZGVyaW5nIGFuZCBjb21tb24gbGVhZGluZyBjaGFyYWN0ZXInICcKKwl0ZXN0X2NvbmZpZyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1iZWZvcmUgJiYKKwlnaXQgdGFnIGZvbzEuNy1iZWZvcmUxICYmCisJZ2l0IHRhZyBmb28xLjcgJiYKKwlnaXQgdGFnIGZvbzEuNy1hZnRlcjEgJiYKKwlnaXQgdGFnIC1sIC0tc29ydD12ZXJzaW9uOnJlZm5hbWUgImZvbzEuNyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS43LWJlZm9yZTEKKwlmb28xLjcKKwlmb28xLjctYWZ0ZXIxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJzaW9uIHNvcnQgd2l0aCBwcmVyZWxlYXNlIHJlb3JkZXJpbmcsIG11bHRpcGxlIHN1ZmZpeGVzIGFuZCBjb21tb24gbGVhZGluZyBjaGFyYWN0ZXInICcKKwl0ZXN0X2NvbmZpZyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1iZWZvcmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXggLWFmdGVyICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lICJmb28xLjcqIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuNy1iZWZvcmUxCisJZm9vMS43LWFmdGVyMQorCWZvbzEuNworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbiBzb3J0IHdpdGggcHJlcmVsZWFzZSByZW9yZGVyaW5nLCBtdWx0aXBsZSBzdWZmaXhlcyBtYXRjaCB0aGUgc2FtZSB0YWcnICcKKwl0ZXN0X2NvbmZpZyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1iYXIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXggLWZvby1iYXogJiYKKwlnaXQgY29uZmlnIC0tYWRkIHZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXggLWZvby1iYXIgJiYKKwlnaXQgdGFnIGZvbzEuOC1mb28tYmFyICYmCisJZ2l0IHRhZyBmb28xLjgtZm9vLWJheiAmJgorCWdpdCB0YWcgZm9vMS44ICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lICJmb28xLjgqIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuOC1mb28tYmF6CisJZm9vMS44LWZvby1iYXIKKwlmb28xLjgKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnNpb24gc29ydCB3aXRoIHByZXJlbGVhc2UgcmVvcmRlcmluZywgbXVsdGlwbGUgc3VmZml4ZXMgbWF0Y2ggc3RhcnRpbmcgYXQgdGhlIHNhbWUgcG9zaXRpb24nICcKKwl0ZXN0X2NvbmZpZyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1wcmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXggLXByZXJlbGVhc2UgJiYKKwlnaXQgdGFnIGZvbzEuOS1wcmUxICYmCisJZ2l0IHRhZyBmb28xLjktcHJlMiAmJgorCWdpdCB0YWcgZm9vMS45LXByZXJlbGVhc2UxICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lICJmb28xLjkqIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuOS1wcmUxCisJZm9vMS45LXByZTIKKwlmb28xLjktcHJlcmVsZWFzZTEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnNpb24gc29ydCB3aXRoIGdlbmVyYWwgc3VmZml4IHJlb3JkZXJpbmcnICcKKwl0ZXN0X2NvbmZpZyB2ZXJzaW9uc29ydC5zdWZmaXggLWFscGhhICYmCisJZ2l0IGNvbmZpZyAtLWFkZCB2ZXJzaW9uc29ydC5zdWZmaXggLWJldGEgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHZlcnNpb25zb3J0LnN1ZmZpeCAiIiAgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHZlcnNpb25zb3J0LnN1ZmZpeCAtZ2FtbWEgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHZlcnNpb25zb3J0LnN1ZmZpeCAtZGVsdGEgJiYKKwlnaXQgdGFnIGZvbzEuMTAtYWxwaGEgJiYKKwlnaXQgdGFnIGZvbzEuMTAtYmV0YSAmJgorCWdpdCB0YWcgZm9vMS4xMC1nYW1tYSAmJgorCWdpdCB0YWcgZm9vMS4xMC1kZWx0YSAmJgorCWdpdCB0YWcgZm9vMS4xMC11bmxpc3RlZC1zdWZmaXggJiYKKwlnaXQgdGFnIC1sIC0tc29ydD12ZXJzaW9uOnJlZm5hbWUgImZvbzEuMTAqIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMTAtYWxwaGEKKwlmb28xLjEwLWJldGEKKwlmb28xLjEwCisJZm9vMS4xMC11bmxpc3RlZC1zdWZmaXgKKwlmb28xLjEwLWdhbW1hCisJZm9vMS4xMC1kZWx0YQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbnNvcnQuc3VmZml4IG92ZXJyaWRlcyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4JyAnCisJdGVzdF9jb25maWcgdmVyc2lvbnNvcnQuc3VmZml4IC1iZWZvcmUgJiYKKwl0ZXN0X2NvbmZpZyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IC1hZnRlciAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PXZlcnNpb246cmVmbmFtZSAiZm9vMS43KiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjctYmVmb3JlMQorCWZvbzEuNworCWZvbzEuNy1hZnRlcjEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnNpb24gc29ydCB3aXRoIHZlcnkgbG9uZyBwcmVyZWxlYXNlIHN1ZmZpeCcgJworCXRlc3RfY29uZmlnIHZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXggLXZlcnktbG9vb29vb29vb29vb29vb29vb29vb29vb29uZy1wcmVyZWxlYXNlLXN1ZmZpeCAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PXZlcnNpb246cmVmbmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVMSU1JVF9TVEFDS19TSVpFICctLWNvbnRhaW5zIGFuZCAtLW5vLWNvbnRhaW5zIHdvcmsgaW4gYSBkZWVwIHJlcG8nICcKKwlpPTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sdCA4MDAwCisJZG8KKwkJZWNobyAiY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gJCgoMTAwMDAwMDAwMCArICRpICogMTAwKSkgKzAyMDAKK2RhdGEgPDxFT0YKK2NvbW1pdCAjJGkKK0VPRiIKKwkJdGVzdCAkaSA9IDEgJiYgZWNobyAiZnJvbSByZWZzL2hlYWRzL21hc3Rlcl4wIgorCQlpPSQoKCRpICsgMSkpCisJZG9uZSB8IGdpdCBmYXN0LWltcG9ydCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgdGFnIGZhci1mYXItYXdheSBIRUFEXiAmJgorCXJ1bl93aXRoX2xpbWl0ZWRfc3RhY2sgZ2l0IHRhZyAtLWNvbnRhaW5zIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwlydW5fd2l0aF9saW1pdGVkX3N0YWNrIGdpdCB0YWcgLS1uby1jb250YWlucyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgIi1ndCIgMTAgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZm9ybWF0IHNob3VsZCBsaXN0IHRhZ3MgYXMgcGVyIGZvcm1hdCBnaXZlbicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlyZWZuYW1lIDogcmVmcy90YWdzL3YxLjAKKwlyZWZuYW1lIDogcmVmcy90YWdzL3YxLjAuMQorCXJlZm5hbWUgOiByZWZzL3RhZ3MvdjEuMS4zCisJRU9GCisJZ2l0IHRhZyAtbCAtLWZvcm1hdD0icmVmbmFtZSA6ICUocmVmbmFtZSkiICJ2MSoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldCB1cCBjb2xvciB0ZXN0cyIgJworCWVjaG8gIjxSRUQ+djEuMDxSRVNFVD4iID5leHBlY3QuY29sb3IgJiYKKwllY2hvICJ2MS4wIiA+ZXhwZWN0LmJhcmUgJiYKKwljb2xvcl9hcmdzPSItLWZvcm1hdD0lKGNvbG9yOnJlZCklKHJlZm5hbWU6c2hvcnQpIC0tbGlzdCB2MS4wIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKGNvbG9yKSBvbWl0dGVkIHdpdGhvdXQgdHR5JyAnCisJVEVSTT12dDEwMCBnaXQgdGFnICRjb2xvcl9hcmdzID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5iYXJlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnJShjb2xvcikgcHJlc2VudCB3aXRoIHR0eScgJworCXRlc3RfdGVybWluYWwgZ2l0IHRhZyAkY29sb3JfYXJncyA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29sb3IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29sb3Igb3ZlcnJpZGVzIGF1dG8tY29sb3InICcKKwlnaXQgdGFnIC0tY29sb3IgJGNvbG9yX2FyZ3MgPmFjdHVhbC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvci51aT1hbHdheXMgb3ZlcnJpZGVzIGF1dG8tY29sb3InICcKKwlnaXQgLWMgY29sb3IudWk9YWx3YXlzIHRhZyAkY29sb3JfYXJncyA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29sb3IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0tbWVyZ2VkIHRlc3QgdGFncycgJworCWdpdCB0YWcgbWVyZ2V0ZXN0LTEgSEVBRH4yICYmCisJZ2l0IHRhZyBtZXJnZXRlc3QtMiBIRUFEfjEgJiYKKwlnaXQgdGFnIG1lcmdldGVzdC0zIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1tZXJnZWQgY2FuIGJlIHVzZWQgaW4gbm9uLWxpc3QgbW9kZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwltZXJnZXRlc3QtMQorCW1lcmdldGVzdC0yCisJRU9GCisJZ2l0IHRhZyAtLW1lcmdlZD1tZXJnZXRlc3QtMiAibWVyZ2V0ZXN0KiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1tZXJnZWQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1uby1tZXJnZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC0tbWVyZ2VkIEhFQUQgLS1uby1tZXJnZWQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1lcmdlZCBzaG93cyBtZXJnZWQgdGFncycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwltZXJnZXRlc3QtMQorCW1lcmdldGVzdC0yCisJRU9GCisJZ2l0IHRhZyAtbCAtLW1lcmdlZD1tZXJnZXRlc3QtMiBtZXJnZXRlc3QtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLW1lcmdlZCBzaG93IHVubWVyZ2VkIHRhZ3MnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWVyZ2V0ZXN0LTMKKwlFT0YKKwlnaXQgdGFnIC1sIC0tbm8tbWVyZ2VkPW1lcmdldGVzdC0yIG1lcmdldGVzdC0qID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tbWVyZ2VkIGNhbiBiZSB1c2VkIGluIG5vbi1saXN0IG1vZGUnICcKKwlnaXQgdGFnIC0tbm8tbWVyZ2VkPW1lcmdldGVzdC0yIG1lcmdldGVzdC0qID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyBicmFuY2gvdGFncyBub3QgbWFya2VkJyAnCisJZ2l0IHRhZyBhbWJpZ3VvdXMgJiYKKwlnaXQgYnJhbmNoIGFtYmlndW91cyAmJgorCWVjaG8gYW1iaWd1b3VzID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIGFtYmlndW91cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRhaW5zIGNvbWJpbmVkIHdpdGggLS1uby1jb250YWlucycgJworCSgKKwkJZ2l0IGluaXQgbm8tY29udGFpbnMgJiYKKwkJY2Qgbm8tY29udGFpbnMgJiYKKwkJdGVzdF9jb21taXQgdjAuMSAmJgorCQl0ZXN0X2NvbW1pdCB2MC4yICYmCisJCXRlc3RfY29tbWl0IHYwLjMgJiYKKwkJdGVzdF9jb21taXQgdjAuNCAmJgorCQl0ZXN0X2NvbW1pdCB2MC41ICYmCisJCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQl2MC4yCisJCXYwLjMKKwkJdjAuNAorCQlFT0YKKwkJZ2l0IHRhZyAtLWNvbnRhaW5zIHYwLjIgLS1uby1jb250YWlucyB2MC41ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCisjIEFzIHRoZSBkb2NzIHNheSwgbGlzdCB0YWdzIHdoaWNoIGNvbnRhaW4gYSBzcGVjaWZpZWQgKmNvbW1pdCouIFdlCisjIGRvbid0IHJlY3Vyc2UgZG93biB0byB0YWdzIGZvciB0cmVlcyBvciBibG9icyBwb2ludGVkIHRvIGJ5ICp0aG9zZSoKKyMgY29tbWl0cy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RvZXMgLS1bbm8tXWNvbnRhaW5zIHN0b3AgYXQgY29tbWl0cz8gWWVzIScgJworCWNkIG5vLWNvbnRhaW5zICYmCisJYmxvYj0kKGdpdCByZXYtcGFyc2UgdjAuMzp2MC4zLnQpICYmCisJdHJlZT0kKGdpdCByZXYtcGFyc2UgdjAuM157dHJlZX0pICYmCisJZ2l0IHRhZyB0YWctYmxvYiAkYmxvYiAmJgorCWdpdCB0YWcgdGFnLXRyZWUgJHRyZWUgJiYKKwlnaXQgdGFnIC0tY29udGFpbnMgdjAuMyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJdjAuMworCXYwLjQKKwl2MC41CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHRhZyAtLW5vLWNvbnRhaW5zIHYwLjMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCXYwLjEKKwl2MC4yCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNS1lZGl0b3Iuc2ggYi90L3Q3MDA1LWVkaXRvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZmNmMjgxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwNS1lZGl0b3Iuc2gKQEAgLTAsMCArMSwxMzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdHSVRfRURJVE9SLCBjb3JlLmVkaXRvciwgYW5kIHN0dWZmJworCisuIC4vdGVzdC1saWIuc2gKKwordW5zZXQgRURJVE9SIFZJU1VBTCBHSVRfRURJVE9SCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVybWluZSBkZWZhdWx0IGVkaXRvcicgJworCisJdmk9JChURVJNPXZ0MTAwIGdpdCB2YXIgR0lUX0VESVRPUikgJiYKKwl0ZXN0IC1uICIkdmkiCisKKycKKworaWYgISBleHByICIkdmkiIDogJ1thLXpdKiQnID4vZGV2L251bGwKK3RoZW4KKwl2aT0KK2ZpCisKK2ZvciBpIGluIEdJVF9FRElUT1IgY29yZV9lZGl0b3IgRURJVE9SIFZJU1VBTCAkdmkKK2RvCisJY2F0ID5lLSRpLnNoIDw8LUVPRgorCSMhJFNIRUxMX1BBVEgKKwllY2hvICJFZGl0ZWQgYnkgJGkiID4iXCQxIgorCUVPRgorCWNobW9kICt4IGUtJGkuc2gKK2RvbmUKKworaWYgISB0ZXN0IC16ICIkdmkiCit0aGVuCisJbXYgZS0kdmkuc2ggJHZpCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1zZz0iSGFuZC1lZGl0ZWQiICYmCisJdGVzdF9jb21taXQgIiRtc2ciICYmCisJZWNobyAiJG1zZyIgPmV4cGVjdCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK1RFUk09ZHVtYgorZXhwb3J0IFRFUk0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2R1bWIgc2hvdWxkIGVycm9yIG91dCB3aGVuIGZhbGxpbmcgYmFjayBvbiB2aScgJworCisJaWYgZ2l0IGNvbW1pdCAtLWFtZW5kCisJdGhlbgorCQllY2hvICJPb3BzPyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdW1iIHNob3VsZCBwcmVmZXIgRURJVE9SIHRvIFZJU1VBTCcgJworCisJRURJVE9SPS4vZS1FRElUT1Iuc2ggJiYKKwlWSVNVQUw9Li9lLVZJU1VBTC5zaCAmJgorCWV4cG9ydCBFRElUT1IgVklTVUFMICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJdGVzdCAiJChnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcykiID0gIkVkaXRlZCBieSBFRElUT1IiCisKKycKKworVEVSTT12dDEwMAorZXhwb3J0IFRFUk0KK2ZvciBpIGluICR2aSBFRElUT1IgVklTVUFMIGNvcmVfZWRpdG9yIEdJVF9FRElUT1IKK2RvCisJZWNobyAiRWRpdGVkIGJ5ICRpIiA+ZXhwZWN0CisJdW5zZXQgRURJVE9SIFZJU1VBTCBHSVRfRURJVE9SCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBjb3JlLmVkaXRvcgorCWNhc2UgIiRpIiBpbgorCWNvcmVfZWRpdG9yKQorCQlnaXQgY29uZmlnIGNvcmUuZWRpdG9yIC4vZS1jb3JlX2VkaXRvci5zaAorCQk7OworCVtBLVpdKikKKwkJZXZhbCAiJGk9Li9lLSRpLnNoIgorCQlleHBvcnQgJGkKKwkJOzsKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiVXNpbmcgJGkiICcKKwkJZ2l0IC0tZXhlYy1wYXRoPS4gY29tbWl0IC0tYW1lbmQgJiYKKwkJZ2l0IHNob3cgLXMgLS1wcmV0dHk9b25lbGluZSB8CisJCXNlZCAtZSAicy9eWzAtOWEtZl0qIC8vIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCitkb25lCisKK3Vuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgorZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBjb3JlLmVkaXRvcgorZm9yIGkgaW4gJHZpIEVESVRPUiBWSVNVQUwgY29yZV9lZGl0b3IgR0lUX0VESVRPUgorZG8KKwllY2hvICJFZGl0ZWQgYnkgJGkiID5leHBlY3QKKwljYXNlICIkaSIgaW4KKwljb3JlX2VkaXRvcikKKwkJZ2l0IGNvbmZpZyBjb3JlLmVkaXRvciAuL2UtY29yZV9lZGl0b3Iuc2gKKwkJOzsKKwlbQS1aXSopCisJCWV2YWwgIiRpPS4vZS0kaS5zaCIKKwkJZXhwb3J0ICRpCisJCTs7CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlVzaW5nICRpIChvdmVycmlkZSkiICcKKwkJZ2l0IC0tZXhlYy1wYXRoPS4gY29tbWl0IC0tYW1lbmQgJiYKKwkJZ2l0IHNob3cgLXMgLS1wcmV0dHk9b25lbGluZSB8CisJCXNlZCAtZSAicy9eWzAtOWEtZl0qIC8vIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXRvciB3aXRoIGEgc3BhY2UnICcKKwllY2hvICJlY2hvIHNwYWNlID5cIlwkMVwiIiA+ImUgc3BhY2Uuc2giICYmCisJY2htb2QgYSt4ICJlIHNwYWNlLnNoIiAmJgorCUdJVF9FRElUT1I9Ii4vZVwgc3BhY2Uuc2giIGdpdCBjb21taXQgLS1hbWVuZCAmJgorCXRlc3Qgc3BhY2UgPSAiJChnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMpIgorCisnCisKK3Vuc2V0IEdJVF9FRElUT1IKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUuZWRpdG9yIHdpdGggYSBzcGFjZScgJworCisJZ2l0IGNvbmZpZyBjb3JlLmVkaXRvciBcIi4vZVwgc3BhY2Uuc2hcIiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCXRlc3Qgc3BhY2UgPSAiJChnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMpIgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNi1wYWdlci5zaCBiL3QvdDcwMDYtcGFnZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDBlMDlhMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDYtcGFnZXIuc2gKQEAgLTAsMCArMSw2NTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGF1dG9tYXRpYyB1c2Ugb2YgYSBwYWdlci4nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcGFnZXIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJc2FuZV91bnNldCBHSVRfUEFHRVIgR0lUX1BBR0VSX0lOX1VTRSAmJgorCXRlc3RfdW5jb25maWcgY29yZS5wYWdlciAmJgorCisJUEFHRVI9ImNhdCA+cGFnaW5hdGVkLm91dCIgJiYKKwlleHBvcnQgUEFHRVIgJiYKKworCXRlc3RfY29tbWl0IGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3NvbWUgY29tbWFuZHMgdXNlIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgbG9nICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgVFRZICdwYWdlciBydW5zIGZyb20gc3ViZGlyJyAnCisJZWNobyBzdWJkaXIvcGFnaW5hdGVkLm91dCA+ZXhwZWN0ZWQgJiYKKwlta2RpciAtcCBzdWJkaXIgJiYKKwlybSAtZiBwYWdpbmF0ZWQub3V0IHN1YmRpci9wYWdpbmF0ZWQub3V0ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF90ZXJtaW5hbCBnaXQgbG9nCisJKSAmJgorCXsKKwkJbHMgcGFnaW5hdGVkLm91dCBzdWJkaXIvcGFnaW5hdGVkLm91dCB8fAorCQk6CisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdMRVNTIGFuZCBMViBlbnZ2YXJzIGFyZSBzZXQgZm9yIHBhZ2luYXRpb24nICcKKwkoCisJCXNhbmVfdW5zZXQgTEVTUyBMViAmJgorCQlQQUdFUj0iZW52ID5wYWdlci1lbnYub3V0OyB3YyIgJiYKKwkJZXhwb3J0IFBBR0VSICYmCisKKwkJdGVzdF90ZXJtaW5hbCBnaXQgbG9nCisJKSAmJgorCWdyZXAgXkxFU1M9IHBhZ2VyLWVudi5vdXQgJiYKKwlncmVwIF5MVj0gcGFnZXItZW52Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyxUVFkgJ0xFU1MgYW5kIExWIGVudnZhcnMgc2V0IGJ5IGdpdC1zaC1zZXR1cCcgJworCSgKKwkJc2FuZV91bnNldCBMRVNTIExWICYmCisJCVBBR0VSPSJlbnYgPnBhZ2VyLWVudi5vdXQ7IHdjIiAmJgorCQlleHBvcnQgUEFHRVIgJiYKKwkJUEFUSD0iJChnaXQgLS1leGVjLXBhdGgpOiRQQVRIIiAmJgorCQlleHBvcnQgUEFUSCAmJgorCQl0ZXN0X3Rlcm1pbmFsIHNoIC1jICIuIGdpdC1zaC1zZXR1cCAmJiBnaXRfcGFnZXIiCisJKSAmJgorCWdyZXAgXkxFU1M9IHBhZ2VyLWVudi5vdXQgJiYKKwlncmVwIF5MVj0gcGFnZXItZW52Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc29tZSBjb21tYW5kcyBkbyBub3QgdXNlIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcmV2LWxpc3QgSEVBRCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHBhZ2VyIHdoZW4gc3Rkb3V0IGlzIGEgcGlwZScgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwlnaXQgbG9nIHwgY2F0ICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gcGFnZXIgd2hlbiBzdGRvdXQgaXMgYSByZWd1bGFyIGZpbGUnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJZ2l0IGxvZyA+ZmlsZSAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCB1c2VzIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCBIRUFEICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHBhZ2VyIGV2ZW4gd2l0aCAtLXBhZ2luYXRlIHdoZW4gc3Rkb3V0IGlzIGEgcGlwZScgJworCXJtIC1mIGZpbGUgcGFnaW5hdGVkLm91dCAmJgorCWdpdCAtLXBhZ2luYXRlIGxvZyB8IGNhdCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdubyBwYWdlciB3aXRoIC0tbm8tcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1uby1wYWdlciBsb2cgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29uZmlndXJhdGlvbiBjYW4gZGlzYWJsZSBwYWdlcicgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3VuY29uZmlnIHBhZ2VyLmdyZXAgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBncmVwIGluaXRpYWwgJiYKKwl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQgJiYKKworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5ncmVwIGZhbHNlICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgZ3JlcCBpbml0aWFsICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbmZpZ3VyYXRpb24gY2FuIGVuYWJsZSBwYWdlciAoZnJvbSBzdWJkaXIpJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCW1rZGlyIC1wIHN1YmRpciAmJgorCXRlc3RfY29uZmlnIHBhZ2VyLmJ1bmRsZSB0cnVlICYmCisKKwlnaXQgYnVuZGxlIGNyZWF0ZSB0ZXN0LmJ1bmRsZSAtLWFsbCAmJgorCXJtIC1mIHBhZ2luYXRlZC5vdXQgc3ViZGlyL3BhZ2luYXRlZC5vdXQgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQl0ZXN0X3Rlcm1pbmFsIGdpdCBidW5kbGUgdW5idW5kbGUgLi4vdGVzdC5idW5kbGUKKwkpICYmCisJeworCQl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQgfHwKKwkJdGVzdCAtZSBzdWJkaXIvcGFnaW5hdGVkLm91dAorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgLWwgZGVmYXVsdHMgdG8gcGFnaW5nJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHRhZyAtbCAmJgorCXRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IHRhZyAtbCByZXNwZWN0cyBwYWdlci50YWcnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIudGFnPWZhbHNlIHRhZyAtbCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIC1sIHJlc3BlY3RzIC0tbm8tcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIudGFnIC0tbm8tcGFnZXIgdGFnIC1sICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgd2l0aCBubyBhcmdzIGRlZmF1bHRzIHRvIHBhZ2luZycgJworCSMgbm8gYXJncyBpbXBsaWVzIC1sIHNvIHRoaXMgc2hvdWxkIHBhZ2UgbGlrZSAtbAorCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCB0YWcgJiYKKwl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgd2l0aCBubyBhcmdzIHJlc3BlY3RzIHBhZ2VyLnRhZycgJworCSMgbm8gYXJncyBpbXBsaWVzIC1sIHNvIHRoaXMgc2hvdWxkIHBhZ2UgbGlrZSAtbAorCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtYyBwYWdlci50YWc9ZmFsc2UgdGFnICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgLS1jb250YWlucyBkZWZhdWx0cyB0byBwYWdpbmcnICcKKwkjIC0tY29udGFpbnMgaW1wbGllcyAtbCBzbyB0aGlzIHNob3VsZCBwYWdlIGxpa2UgLWwKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgdGFnIC0tY29udGFpbnMgJiYKKwl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgLS1jb250YWlucyByZXNwZWN0cyBwYWdlci50YWcnICcKKwkjIC0tY29udGFpbnMgaW1wbGllcyAtbCBzbyB0aGlzIHNob3VsZCBwYWdlIGxpa2UgLWwKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIudGFnPWZhbHNlIHRhZyAtLWNvbnRhaW5zICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgLWEgZGVmYXVsdHMgdG8gbm90IHBhZ2luZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCBuZXd0YWciICYmCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHRhZyAtYW0gbWVzc2FnZSBuZXd0YWcgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IHRhZyAtYSBpZ25vcmVzIHBhZ2VyLnRhZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCBuZXd0YWciICYmCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLnRhZyB0YWcgLWFtIG1lc3NhZ2UgbmV3dGFnICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgLWEgcmVzcGVjdHMgLS1wYWdpbmF0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHRhZyAtZCBuZXd0YWciICYmCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tcGFnaW5hdGUgdGFnIC1hbSBtZXNzYWdlIG5ld3RhZyAmJgorCXRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IHRhZyBhcyBhbGlhcyBpZ25vcmVzIHBhZ2VyLnRhZyB3aXRoIC1hJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdGFnIC1kIG5ld3RhZyIgJiYKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIudGFnIC1jIGFsaWFzLnQ9dGFnIHQgLWFtIG1lc3NhZ2UgbmV3dGFnICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCB0YWcgYXMgYWxpYXMgcmVzcGVjdHMgcGFnZXIudGFnIHdpdGggLWwnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIudGFnPWZhbHNlIC1jIGFsaWFzLnQ9dGFnIHQgLWwgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IGJyYW5jaCBkZWZhdWx0cyB0byBwYWdpbmcnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgYnJhbmNoICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgYnJhbmNoIHJlc3BlY3RzIHBhZ2VyLmJyYW5jaCcgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtYyBwYWdlci5icmFuY2g9ZmFsc2UgYnJhbmNoICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBicmFuY2ggcmVzcGVjdHMgLS1uby1wYWdlcicgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtLW5vLXBhZ2VyIGJyYW5jaCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiBpZ25vcmVzIHBhZ2VyLmJyYW5jaCcgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgZWRpdG9yLnVzZWQgJiYKKwl3cml0ZV9zY3JpcHQgZWRpdG9yIDw8LVxFT0YgJiYKKwkJZWNobyAiTmV3IGRlc2NyaXB0aW9uIiA+IiQxIgorCQl0b3VjaCBlZGl0b3IudXNlZAorCUVPRgorCUVESVRPUj0uL2VkaXRvciB0ZXN0X3Rlcm1pbmFsIGdpdCAtYyBwYWdlci5icmFuY2ggYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdCAtZSBlZGl0b3IudXNlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBpZ25vcmVzIHBhZ2VyLmJyYW5jaCcgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwlnaXQgYnJhbmNoIG90aGVyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIG90aGVyIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIHBhZ2VyLmJyYW5jaCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89b3RoZXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbSIgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZ2l0IGNvbmZpZyBpZ25vcmVzIHBhZ2VyLmNvbmZpZyB3aGVuIHNldHRpbmcnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIuY29uZmlnIGNvbmZpZyBmb28uYmFyIGJhciAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgY29uZmlnIC0tZWRpdCBpZ25vcmVzIHBhZ2VyLmNvbmZpZycgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgZWRpdG9yLnVzZWQgJiYKKwl3cml0ZV9zY3JpcHQgZWRpdG9yIDw8LVxFT0YgJiYKKwkJdG91Y2ggZWRpdG9yLnVzZWQKKwlFT0YKKwlFRElUT1I9Li9lZGl0b3IgdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIuY29uZmlnIGNvbmZpZyAtLWVkaXQgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dCAmJgorCXRlc3QgLWUgZWRpdG9yLnVzZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBjb25maWcgLS1nZXQgaWdub3JlcyBwYWdlci5jb25maWcnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLWMgcGFnZXIuY29uZmlnIGNvbmZpZyAtLWdldCBmb28uYmFyICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBjb25maWcgLS1nZXQtdXJsbWF0Y2ggZGVmYXVsdHMgdG8gcGFnaW5nJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC1jIGh0dHAuImh0dHBzOi8vZm9vLmNvbS8iLmJhcj1mb28gXAorCQkJICBjb25maWcgLS1nZXQtdXJsbWF0Y2ggaHR0cCBodHRwczovL2Zvby5jb20gJiYKKwl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBjb25maWcgLS1nZXQtYWxsIHJlc3BlY3RzIHBhZ2VyLmNvbmZpZycgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtYyBwYWdlci5jb25maWc9ZmFsc2UgY29uZmlnIC0tZ2V0LWFsbCBmb28uYmFyICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBjb25maWcgLS1saXN0IGRlZmF1bHRzIHRvIHBhZ2luZycgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBjb25maWcgLS1saXN0ICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKKworIyBBIGNvbG9yZWQgY29tbWl0IGxvZyB3aWxsIGJlZ2luIHdpdGggYW4gYXBwcm9wcmlhdGUgQU5TSSBlc2NhcGUKKyMgZm9yIHRoZSBmaXJzdCBjb2xvcjsgdGhlIHRleHQgImNvbW1pdCIgY29tZXMgbGF0ZXIuCitjb2xvcmZ1bCgpIHsKKwlyZWFkIGZpcnN0bGluZSA8JDEKKwkhIGV4cHIgIiRmaXJzdGxpbmUiIDogIlthLXpBLVpdIiA+L2Rldi9udWxsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3RzIGNhbiBkZXRlY3QgY29sb3InICcKKwlybSAtZiBjb2xvcmZ1bC5sb2cgY29sb3JsZXNzLmxvZyAmJgorCWdpdCBsb2cgLS1uby1jb2xvciA+Y29sb3JsZXNzLmxvZyAmJgorCWdpdCBsb2cgLS1jb2xvciA+Y29sb3JmdWwubG9nICYmCisJISBjb2xvcmZ1bCBjb2xvcmxlc3MubG9nICYmCisJY29sb3JmdWwgY29sb3JmdWwubG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbG9yIHdoZW4gc3Rkb3V0IGlzIGEgcmVndWxhciBmaWxlJyAnCisJcm0gLWYgY29sb3JsZXNzLmxvZyAmJgorCXRlc3RfY29uZmlnIGNvbG9yLnVpIGF1dG8gJiYKKwlnaXQgbG9nID5jb2xvcmxlc3MubG9nICYmCisJISBjb2xvcmZ1bCBjb2xvcmxlc3MubG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb2xvciB3aGVuIHdyaXRpbmcgdG8gYSBwYWdlcicgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgbG9nICYmCisJY29sb3JmdWwgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29sb3JzIGFyZSBzdXBwcmVzc2VkIGJ5IGNvbG9yLnBhZ2VyJyAnCisJcm0gLWYgcGFnaW5hdGVkLm91dCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLnVpIGF1dG8gJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5wYWdlciBmYWxzZSAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAmJgorCSEgY29sb3JmdWwgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvciB3aGVuIHdyaXRpbmcgdG8gYSBmaWxlIGludGVuZGVkIGZvciBhIHBhZ2VyJyAnCisJcm0gLWYgY29sb3JmdWwubG9nICYmCisJdGVzdF9jb25maWcgY29sb3IudWkgYXV0byAmJgorCSgKKwkJVEVSTT12dDEwMCAmJgorCQlHSVRfUEFHRVJfSU5fVVNFPXRydWUgJiYKKwkJZXhwb3J0IFRFUk0gR0lUX1BBR0VSX0lOX1VTRSAmJgorCQlnaXQgbG9nID5jb2xvcmZ1bC5sb2cKKwkpICYmCisJY29sb3JmdWwgY29sb3JmdWwubG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb2xvcnMgYXJlIHNlbnQgdG8gcGFnZXIgZm9yIGV4dGVybmFsIGNvbW1hbmRzJyAnCisJdGVzdF9jb25maWcgYWxpYXMuZXh0ZXJuYWxsb2cgIiFnaXQgbG9nIiAmJgorCXRlc3RfY29uZmlnIGNvbG9yLnVpIGF1dG8gJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtcCBleHRlcm5hbGxvZyAmJgorCWNvbG9yZnVsIHBhZ2luYXRlZC5vdXQKKycKKworIyBVc2UgdGhpcyBoZWxwZXIgdG8gbWFrZSBpdCBlYXN5IGZvciB0aGUgY2FsbGVyIG9mIHlvdXIKKyMgdGVybWluYWwtdXNpbmcgZnVuY3Rpb24gdG8gc3BlY2lmeSB3aGV0aGVyIGl0IHNob3VsZCBmYWlsLgorIyBJZiB5b3Ugd3JpdGUKKyMKKyMJeW91cl90ZXN0KCkgeworIwkJcGFyc2VfYXJncyAiJEAiCisjCisjCQkkdGVzdF9leHBlY3RhdGlvbiAiJGNtZCAtIGJlaGF2ZXMgd2VsbCIgIgorIwkJCS4uLgorIwkJCSRmdWxsX2NvbW1hbmQgJiYKKyMJCQkuLi4KKyMJCSIKKyMJfQorIworIyB0aGVuIHlvdXIgdGVzdCBjYW4gYmUgdXNlZCBsaWtlIHRoaXM6CisjCisjCXlvdXJfdGVzdCBleHBlY3RfKHN1Y2Nlc3N8ZmFpbHVyZSkgW3Rlc3RfbXVzdF9mYWlsXSAnZ2l0IGZvbycKKyMKK3BhcnNlX2FyZ3MoKSB7CisJdGVzdF9leHBlY3RhdGlvbj0idGVzdF8kMSIKKwlzaGlmdAorCWlmIHRlc3QgIiQxIiA9IHRlc3RfbXVzdF9mYWlsCisJdGhlbgorCQlmdWxsX2NvbW1hbmQ9InRlc3RfbXVzdF9mYWlsIHRlc3RfdGVybWluYWwgIgorCQlzaGlmdAorCWVsc2UKKwkJZnVsbF9jb21tYW5kPSJ0ZXN0X3Rlcm1pbmFsICIKKwlmaQorCWNtZD0kMQorCWZ1bGxfY29tbWFuZD0iJGZ1bGxfY29tbWFuZCAkMSIKK30KKwordGVzdF9kZWZhdWx0X3BhZ2VyKCkgeworCXBhcnNlX2FyZ3MgIiRAIgorCisJJHRlc3RfZXhwZWN0YXRpb24gU0lNUExFUEFHRVIsVFRZICIkY21kIC0gZGVmYXVsdCBwYWdlciBpcyB1c2VkIGJ5IGRlZmF1bHQiICIKKwkJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwkJdGVzdF91bmNvbmZpZyBjb3JlLnBhZ2VyICYmCisJCXJtIC1mIGRlZmF1bHRfcGFnZXJfdXNlZCAmJgorCQljYXQgPlwkbGVzcyA8PC1cRU9GICYmCisJCSMhL2Jpbi9zaAorCQl3YyA+ZGVmYXVsdF9wYWdlcl91c2VkCisJCUVPRgorCQljaG1vZCAreCBcJGxlc3MgJiYKKwkJKAorCQkJUEFUSD0uOlwkUEFUSCAmJgorCQkJZXhwb3J0IFBBVEggJiYKKwkJCSRmdWxsX2NvbW1hbmQKKwkJKSAmJgorCQl0ZXN0IC1lIGRlZmF1bHRfcGFnZXJfdXNlZAorCSIKK30KKwordGVzdF9QQUdFUl9vdmVycmlkZXMoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIiRjbWQgLSBQQUdFUiBvdmVycmlkZXMgZGVmYXVsdCBwYWdlciIgIgorCQlzYW5lX3Vuc2V0IEdJVF9QQUdFUiAmJgorCQl0ZXN0X3VuY29uZmlnIGNvcmUucGFnZXIgJiYKKwkJcm0gLWYgUEFHRVJfdXNlZCAmJgorCQlQQUdFUj0nd2MgPlBBR0VSX3VzZWQnICYmCisJCWV4cG9ydCBQQUdFUiAmJgorCQkkZnVsbF9jb21tYW5kICYmCisJCXRlc3QgLWUgUEFHRVJfdXNlZAorCSIKK30KKwordGVzdF9jb3JlX3BhZ2VyX292ZXJyaWRlcygpIHsKKwlpZl9sb2NhbF9jb25maWc9CisJdXNlZF9pZl93YW50ZWQ9J292ZXJyaWRlcyBQQUdFUicKKwl0ZXN0X2NvcmVfcGFnZXIgIiRAIgorfQorCit0ZXN0X2xvY2FsX2NvbmZpZ19pZ25vcmVkKCkgeworCWlmX2xvY2FsX2NvbmZpZz0nISAnCisJdXNlZF9pZl93YW50ZWQ9J2lzIG5vdCB1c2VkJworCXRlc3RfY29yZV9wYWdlciAiJEAiCit9CisKK3Rlc3RfY29yZV9wYWdlcigpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFRUWSAiJGNtZCAtIHJlcG9zaXRvcnktbG9jYWwgY29yZS5wYWdlciBzZXR0aW5nICR1c2VkX2lmX3dhbnRlZCIgIgorCQlzYW5lX3Vuc2V0IEdJVF9QQUdFUiAmJgorCQlybSAtZiBjb3JlLnBhZ2VyX3VzZWQgJiYKKwkJUEFHRVI9d2MgJiYKKwkJZXhwb3J0IFBBR0VSICYmCisJCXRlc3RfY29uZmlnIGNvcmUucGFnZXIgJ3djID5jb3JlLnBhZ2VyX3VzZWQnICYmCisJCSRmdWxsX2NvbW1hbmQgJiYKKwkJJHtpZl9sb2NhbF9jb25maWd9dGVzdCAtZSBjb3JlLnBhZ2VyX3VzZWQKKwkiCit9CisKK3Rlc3RfY29yZV9wYWdlcl9zdWJkaXIoKSB7CisJaWZfbG9jYWxfY29uZmlnPQorCXVzZWRfaWZfd2FudGVkPSdvdmVycmlkZXMgUEFHRVInCisJdGVzdF9wYWdlcl9zdWJkaXJfaGVscGVyICIkQCIKK30KKwordGVzdF9ub19sb2NhbF9jb25maWdfc3ViZGlyKCkgeworCWlmX2xvY2FsX2NvbmZpZz0nISAnCisJdXNlZF9pZl93YW50ZWQ9J2lzIG5vdCB1c2VkJworCXRlc3RfcGFnZXJfc3ViZGlyX2hlbHBlciAiJEAiCit9CisKK3Rlc3RfcGFnZXJfc3ViZGlyX2hlbHBlcigpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFRUWSAiJGNtZCAtIGNvcmUucGFnZXIgJHVzZWRfaWZfd2FudGVkIGZyb20gc3ViZGlyZWN0b3J5IiAiCisJCXNhbmVfdW5zZXQgR0lUX1BBR0VSICYmCisJCXJtIC1mIGNvcmUucGFnZXJfdXNlZCAmJgorCQlybSAtZnIgc3ViICYmCisJCVBBR0VSPXdjICYmCisJCXN0YW1wbmFtZT1cJChwd2QpL2NvcmUucGFnZXJfdXNlZCAmJgorCQlleHBvcnQgUEFHRVIgc3RhbXBuYW1lICYmCisJCXRlc3RfY29uZmlnIGNvcmUucGFnZXIgJ3djID5cIlwkc3RhbXBuYW1lXCInICYmCisJCW1rZGlyIHN1YiAmJgorCQkoCisJCQljZCBzdWIgJiYKKwkJCSRmdWxsX2NvbW1hbmQKKwkJKSAmJgorCQkke2lmX2xvY2FsX2NvbmZpZ310ZXN0IC1lIGNvcmUucGFnZXJfdXNlZAorCSIKK30KKwordGVzdF9HSVRfUEFHRVJfb3ZlcnJpZGVzKCkgeworCXBhcnNlX2FyZ3MgIiRAIgorCisJJHRlc3RfZXhwZWN0YXRpb24gVFRZICIkY21kIC0gR0lUX1BBR0VSIG92ZXJyaWRlcyBjb3JlLnBhZ2VyIiAiCisJCXJtIC1mIEdJVF9QQUdFUl91c2VkICYmCisJCXRlc3RfY29uZmlnIGNvcmUucGFnZXIgd2MgJiYKKwkJR0lUX1BBR0VSPSd3YyA+R0lUX1BBR0VSX3VzZWQnICYmCisJCWV4cG9ydCBHSVRfUEFHRVIgJiYKKwkJJGZ1bGxfY29tbWFuZCAmJgorCQl0ZXN0IC1lIEdJVF9QQUdFUl91c2VkCisJIgorfQorCit0ZXN0X2RvZXNudF9wYWdpbmF0ZSgpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFRUWSAibm8gcGFnZXIgZm9yICckY21kJyIgIgorCQlybSAtZiBHSVRfUEFHRVJfdXNlZCAmJgorCQlHSVRfUEFHRVI9J3djID5HSVRfUEFHRVJfdXNlZCcgJiYKKwkJZXhwb3J0IEdJVF9QQUdFUiAmJgorCQkkZnVsbF9jb21tYW5kICYmCisJCSEgdGVzdCAtZSBHSVRfUEFHRVJfdXNlZAorCSIKK30KKwordGVzdF9wYWdlcl9jaG9pY2VzKCkgeworCXRlc3RfZGVmYXVsdF9wYWdlciAgICAgICAgZXhwZWN0X3N1Y2Nlc3MgIiRAIgorCXRlc3RfUEFHRVJfb3ZlcnJpZGVzICAgICAgZXhwZWN0X3N1Y2Nlc3MgIiRAIgorCXRlc3RfY29yZV9wYWdlcl9vdmVycmlkZXMgZXhwZWN0X3N1Y2Nlc3MgIiRAIgorCXRlc3RfY29yZV9wYWdlcl9zdWJkaXIgICAgZXhwZWN0X3N1Y2Nlc3MgIiRAIgorCXRlc3RfR0lUX1BBR0VSX292ZXJyaWRlcyAgZXhwZWN0X3N1Y2Nlc3MgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogc29tZSBhbGlhc2VzJyAnCisJZ2l0IGNvbmZpZyBhbGlhcy5hbGlhc2VkbG9nIGxvZyAmJgorCWdpdCBjb25maWcgYWxpYXMudHJ1ZSAiIXRydWUiCisnCisKK3Rlc3RfcGFnZXJfY2hvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgJ2dpdCBsb2cnCit0ZXN0X3BhZ2VyX2Nob2ljZXMgICAgICAgICAgICAgICAgICAgICAgICdnaXQgLXAgbG9nJwordGVzdF9wYWdlcl9jaG9pY2VzICAgICAgICAgICAgICAgICAgICAgICAnZ2l0IGFsaWFzZWRsb2cnCisKK3Rlc3RfZGVmYXVsdF9wYWdlciAgICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBhbGlhc2VkbG9nJwordGVzdF9QQUdFUl9vdmVycmlkZXMgICAgICBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIGFsaWFzZWRsb2cnCit0ZXN0X2NvcmVfcGFnZXJfb3ZlcnJpZGVzIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgYWxpYXNlZGxvZycKK3Rlc3RfY29yZV9wYWdlcl9zdWJkaXIgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBhbGlhc2VkbG9nJwordGVzdF9HSVRfUEFHRVJfb3ZlcnJpZGVzICBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIGFsaWFzZWRsb2cnCisKK3Rlc3RfZGVmYXVsdF9wYWdlciAgICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCB0cnVlJwordGVzdF9QQUdFUl9vdmVycmlkZXMgICAgICBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIHRydWUnCit0ZXN0X2NvcmVfcGFnZXJfb3ZlcnJpZGVzIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgdHJ1ZScKK3Rlc3RfY29yZV9wYWdlcl9zdWJkaXIgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCB0cnVlJwordGVzdF9HSVRfUEFHRVJfb3ZlcnJpZGVzICBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIHRydWUnCisKK3Rlc3RfZGVmYXVsdF9wYWdlciAgICAgICAgZXhwZWN0X3N1Y2Nlc3MgdGVzdF9tdXN0X2ZhaWwgJ2dpdCAtcCByZXF1ZXN0LXB1bGwnCit0ZXN0X1BBR0VSX292ZXJyaWRlcyAgICAgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAgcmVxdWVzdC1wdWxsJwordGVzdF9jb3JlX3BhZ2VyX292ZXJyaWRlcyBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wIHJlcXVlc3QtcHVsbCcKK3Rlc3RfY29yZV9wYWdlcl9zdWJkaXIgICAgZXhwZWN0X3N1Y2Nlc3MgdGVzdF9tdXN0X2ZhaWwgJ2dpdCAtcCByZXF1ZXN0LXB1bGwnCit0ZXN0X0dJVF9QQUdFUl9vdmVycmlkZXMgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAgcmVxdWVzdC1wdWxsJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAnCit0ZXN0X1BBR0VSX292ZXJyaWRlcyAgICAgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAnCit0ZXN0X2xvY2FsX2NvbmZpZ19pZ25vcmVkIGV4cGVjdF9mYWlsdXJlIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAnCit0ZXN0X0dJVF9QQUdFUl9vdmVycmlkZXMgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb3JlLnBhZ2VyIGluIHJlcG8gY29uZmlnIHdvcmtzIGFuZCByZXRhaW5zIGN3ZCcgJworCXNhbmVfdW5zZXQgR0lUX1BBR0VSICYmCisJdGVzdF9jb25maWcgY29yZS5wYWdlciAiY2F0ID5jd2QtcmV0YWluZWQiICYmCisJKAorCQljZCBzdWIgJiYKKwkJcm0gLWYgY3dkLXJldGFpbmVkICYmCisJCXRlc3RfdGVybWluYWwgZ2l0IC1wIHJldi1wYXJzZSBIRUFEICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGN3ZC1yZXRhaW5lZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvcmUucGFnZXIgaXMgZm91bmQgdmlhIGFsaWFzIGluIHN1YmRpcmVjdG9yeScgJworCXNhbmVfdW5zZXQgR0lUX1BBR0VSICYmCisJdGVzdF9jb25maWcgY29yZS5wYWdlciAiY2F0ID52aWEtYWxpYXMiICYmCisJKAorCQljZCBzdWIgJiYKKwkJcm0gLWYgdmlhLWFsaWFzICYmCisJCXRlc3RfdGVybWluYWwgZ2l0IC1jIGFsaWFzLnI9Ii1wIHJldi1wYXJzZSIgciBIRUFEICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHZpYS1hbGlhcworCSkKKycKKwordGVzdF9kb2VzbnRfcGFnaW5hdGUgICAgICBleHBlY3RfZmFpbHVyZSB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wIG5vbnNlbnNlJworCit0ZXN0X3BhZ2VyX2Nob2ljZXMgICAgICAgICAgICAgICAgICAgICAgICdnaXQgc2hvcnRsb2cnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY29uZmlndXJlIHNob3J0bG9nIG5vdCB0byBwYWdpbmF0ZScgJworCWdpdCBjb25maWcgcGFnZXIuc2hvcnRsb2cgZmFsc2UKKycKK3Rlc3RfZG9lc250X3BhZ2luYXRlICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG9ydGxvZycKK3Rlc3Rfbm9fbG9jYWxfY29uZmlnX3N1YmRpciBleHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3J0bG9nJwordGVzdF9kZWZhdWx0X3BhZ2VyICAgICAgICBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIHNob3J0bG9nJwordGVzdF9jb3JlX3BhZ2VyX3N1YmRpciAgICBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIHNob3J0bG9nJworCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsIFwKKwkJCQkJICdnaXQgLXAgYXBwbHkgPC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbW1hbmQtc3BlY2lmaWMgcGFnZXInICcKKwlzYW5lX3Vuc2V0IFBBR0VSIEdJVF9QQUdFUiAmJgorCWVjaG8gImZvbzppbml0aWFsIiA+ZXhwZWN0ICYmCisJPmFjdHVhbCAmJgorCXRlc3RfdW5jb25maWcgY29yZS5wYWdlciAmJgorCXRlc3RfY29uZmlnIHBhZ2VyLmxvZyAic2VkIHMvXi9mb286LyA+YWN0dWFsIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAtLWZvcm1hdD0lcyAtMSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbW1hbmQtc3BlY2lmaWMgcGFnZXIgb3ZlcnJpZGVzIGNvcmUucGFnZXInICcKKwlzYW5lX3Vuc2V0IFBBR0VSIEdJVF9QQUdFUiAmJgorCWVjaG8gImZvbzppbml0aWFsIiA+ZXhwZWN0ICYmCisJPmFjdHVhbCAmJgorCXRlc3RfY29uZmlnIGNvcmUucGFnZXIgImV4aXQgMSIgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgInNlZCBzL14vZm9vOi8gPmFjdHVhbCIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb21tYW5kLXNwZWNpZmljIHBhZ2VyIG92ZXJyaWRkZW4gYnkgZW52aXJvbm1lbnQnICcKKwlHSVRfUEFHRVI9InNlZCBzL14vZm9vOi8gPmFjdHVhbCIgJiYgZXhwb3J0IEdJVF9QQUdFUiAmJgorCT5hY3R1YWwgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCXRlc3RfY29uZmlnIHBhZ2VyLmxvZyAiZXhpdCAxIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IGxvZyAtLWZvcm1hdD0lcyAtMSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXh0ZXJuYWwgY29tbWFuZCcgJworCWNhdCA+Z2l0LWV4dGVybmFsIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwlnaXQgIiRAIgorCUVPRgorCWNobW9kICt4IGdpdC1leHRlcm5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29tbWFuZC1zcGVjaWZpYyBwYWdlciB3b3JrcyBmb3IgZXh0ZXJuYWwgY29tbWFuZHMnICcKKwlzYW5lX3Vuc2V0IFBBR0VSIEdJVF9QQUdFUiAmJgorCWVjaG8gImZvbzppbml0aWFsIiA+ZXhwZWN0ICYmCisJPmFjdHVhbCAmJgorCXRlc3RfY29uZmlnIHBhZ2VyLmV4dGVybmFsICJzZWQgcy9eL2ZvbzovID5hY3R1YWwiICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1leGVjLXBhdGg9IiQocHdkKSIgZXh0ZXJuYWwgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc3ViLWNvbW1hbmRzIG9mIGV4dGVybmFscyB1c2UgdGhlaXIgb3duIHBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgInNlZCBzL14vZm9vOi8gPmFjdHVhbCIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtLWV4ZWMtcGF0aD0uIGV4dGVybmFsIGxvZyAtLWZvcm1hdD0lcyAtMSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2V4dGVybmFsIGNvbW1hbmQgcGFnZXJzIG92ZXJyaWRlIHN1Yi1jb21tYW5kcycgJworCXNhbmVfdW5zZXQgUEFHRVIgR0lUX1BBR0VSICYmCisJPmFjdHVhbCAmJgorCXRlc3RfY29uZmlnIHBhZ2VyLmV4dGVybmFsIGZhbHNlICYmCisJdGVzdF9jb25maWcgcGFnZXIubG9nICJzZWQgcy9eL2xvZzovID5hY3R1YWwiICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1leGVjLXBhdGg9LiBleHRlcm5hbCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgd2l0aCB1bmRlcnNjb3JlcyBkb2VzIG5vdCBjb21wbGFpbicgJworCXdyaXRlX3NjcmlwdCBnaXQtdW5kZXJfc2NvcmUgPDwtXEVPRiAmJgorCWVjaG8gb2sKKwlFT0YKKwlnaXQgLS1leGVjLXBhdGg9LiB1bmRlcl9zY29yZSA+YWN0dWFsIDI+JjEgJiYKKwllY2hvIG9rID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgdGFnIHdpdGggYXV0by1jb2x1bW5zICcgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCXRlc3RfY29tbWl0IGZpdmUgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJaW5pdGlhbCAgb25lICAgICAgdHdvICAgICAgdGhyZWUgICAgZm91ciAgICAgZml2ZQorCUVPRgorCXRlc3RfdGVybWluYWwgZW52IFBBR0VSPSJjYXQgPmFjdHVhbCIgQ09MVU1OUz04MCBcCisJCWdpdCAtYyBjb2x1bW4udWk9YXV0byB0YWcgLS1zb3J0PWF1dGhvcmRhdGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNy1zaG93LnNoIGIvdC90NzAwNy1zaG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQyZDNkYjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDA3LXNob3cuc2gKQEAgLTAsMCArMSwxMzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc2hvdycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gaGVsbG8gd29ybGQgPmZvbyAmJgorCUg9JChnaXQgaGFzaC1vYmplY3QgLXcgZm9vKSAmJgorCWdpdCB0YWcgLWEgZm9vLXRhZyAtbSAiVGFncyAkSCIgJEggJiYKKwlISD0kKGV4cHIgIiRIIiA6ICJcKC4uXCkiKSAmJgorCUgzOD0kKGV4cHIgIiRIIiA6ICIuLlwoLipcKSIpICYmCisJcm0gLWYgLmdpdC9vYmplY3RzLyRISC8kSDM4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgYSB0YWcgdGhhdCBwb2ludCBhdCBhIG1pc3Npbmcgb2JqZWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tbm8tcGFnZXIgc2hvdyBmb28tdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhIGJpdCBvZiBoaXN0b3J5JyAnCisJdGVzdF9jb21taXQgbWFpbjEgJiYKKwl0ZXN0X2NvbW1pdCBtYWluMiAmJgorCXRlc3RfY29tbWl0IG1haW4zICYmCisJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIHRhZyIgYW5ub3RhdGVkICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF5eICYmCisJdGVzdF9jb21taXQgc2lkZTIgJiYKKwl0ZXN0X2NvbW1pdCBzaWRlMyAmJgorCXRlc3RfbWVyZ2UgbWVyZ2UgbWFpbjMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0d28gY29tbWl0cycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjIpCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwlFT0YKKwlnaXQgc2hvdyBtYWluMiBtYWluMyA+YWN0dWFsICYmCisJZ3JlcCBeY29tbWl0IGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgcmFuZ2Ugd2Fsa3MgKGxpbmVhciknICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4zKQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjIpCisJRU9GCisJZ2l0IHNob3cgbWFpbjEuLm1haW4zID5hY3R1YWwgJiYKKwlncmVwIF5jb21taXQgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgYSByYW5nZSB3YWxrcyAoWSBzaGFwZSwgXiBmaXJzdCknICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4zKQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjIpCisJRU9GCisJZ2l0IHNob3cgXnNpZGUzIG1haW4zID5hY3R1YWwgJiYKKwlncmVwIF5jb21taXQgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgYSByYW5nZSB3YWxrcyAoWSBzaGFwZSwgXiBsYXN0KScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjMpCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMikKKwlFT0YKKwlnaXQgc2hvdyBtYWluMyBec2lkZTMgPmFjdHVhbCAmJgorCWdyZXAgXmNvbW1pdCBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB3aXRoIC1OIHdhbGtzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCUVPRgorCWdpdCBzaG93IC0yIG1haW4zID5hY3R1YWwgJiYKKwlncmVwIF5jb21taXQgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgYW5ub3RhdGVkIHRhZycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXRhZyBhbm5vdGF0ZWQKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIGFubm90YXRlZF57Y29tbWl0fSkKKwlFT0YKKwlnaXQgc2hvdyBhbm5vdGF0ZWQgPmFjdHVhbCAmJgorCWdyZXAgLUUgIl4oY29tbWl0fHRhZykiIGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGFubm90YXRlZCB0YWcgcGx1cyBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwl0YWcgYW5ub3RhdGVkCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBhbm5vdGF0ZWRee2NvbW1pdH0pCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBzaWRlMykKKwlFT0YKKwlnaXQgc2hvdyBhbm5vdGF0ZWQgc2lkZTMgPmFjdHVhbCAmJgorCWdyZXAgLUUgIl4oY29tbWl0fHRhZykiIGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHJhbmdlJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCUVPRgorCWdpdCBzaG93IF5zaWRlMyBhbm5vdGF0ZWQgPmFjdHVhbCAmJgorCWdyZXAgLUUgIl4oY29tbWl0fHRhZykiIGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctcyBzdXBwcmVzc2VzIGRpZmYnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWVyZ2UKKwltYWluMworCUVPRgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzIG1lcmdlIG1haW4zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpZXQgc3VwcHJlc3NlcyBkaWZmJyAnCisJZWNobyBtYWluMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgLS1xdWlldCAtLWZvcm1hdD0lcyBtYWluMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC0tZ3JhcGggaXMgZm9yYmlkZGVuJyAnCisgIHRlc3RfbXVzdF9mYWlsIGdpdCBzaG93IC0tZ3JhcGggSEVBRAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDgtZmlsdGVyLWJyYW5jaC1udWxsLXNoYTEuc2ggYi90L3Q3MDA4LWZpbHRlci1icmFuY2gtbnVsbC1zaGExLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliYTlmMjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDA4LWZpbHRlci1icmFuY2gtbnVsbC1zaGExLnNoCkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmaWx0ZXItYnJhbmNoIHJlbW92YWwgb2YgdHJlZXMgd2l0aCBudWxsIHNoYTEnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGJhc2UgY29tbWl0cycgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBhIGNvbW1pdCB3aXRoIGEgYm9ndXMgbnVsbCBzaGExIGluIHRoZSB0cmVlJyAnCisJeworCQlnaXQgbHMtdHJlZSBIRUFEICYmCisJCXByaW50ZiAiMTYwMDAwIGNvbW1pdCAkWkVST19PSURcXHRicm9rZW5cXG4iCisJfSA+YnJva2VuLXRyZWUgJiYKKwllY2hvICJhZGQgYnJva2VuIGVudHJ5IiA+bXNnICYmCisKKwl0cmVlPSQoZ2l0IG1rdHJlZSA8YnJva2VuLXRyZWUpICYmCisJdGVzdF90aWNrICYmCisJY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1wIEhFQUQgPG1zZykgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IgorJworCisjIHdlIGhhdmUgdG8gbWFrZSBvbmUgbW9yZSBjb21taXQgb24gdG9wIHJlbW92aW5nIHRoZSBicm9rZW4KKyMgZW50cnksIHNpbmNlIG90aGVyd2lzZSBvdXIgaW5kZXggZG9lcyBub3QgbWF0Y2ggSEVBRCAoYW5kIGZpbHRlci1icmFuY2ggd2lsbAorIyBjb21wbGFpbikuIFdlIGNvdWxkIG1ha2UgdGhlIGluZGV4IG1hdGNoIEhFQUQsIGJ1dCBkb2luZyBzbyB3b3VsZCBpbnZvbHZlCisjIHdyaXRpbmcgYSBudWxsIHNoYTEgaW50byB0aGUgaW5kZXguCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogYnJpbmcgSEVBRCBhbmQgaW5kZXggaW4gc3luYycgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gImJhY2sgdG8gbm9ybWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub29wIGZpbHRlci1icmFuY2ggY29tcGxhaW5zJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZpbHRlci1icmFuY2ggXAorCQktLWZvcmNlIC0tcHJ1bmUtZW1wdHkgXAorCQktLWluZGV4LWZpbHRlciAidHJ1ZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyIGNvbW1hbmRzIGFyZSBzdGlsbCBjaGVja2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZpbHRlci1icmFuY2ggXAorCQktLWZvcmNlIC0tcHJ1bmUtZW1wdHkgXAorCQktLWluZGV4LWZpbHRlciAiZ2l0IHJtIC0tY2FjaGVkIC0taWdub3JlLXVubWF0Y2ggdGhyZWUudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZpbmcgdGhlIGJyb2tlbiBlbnRyeSB3b3JrcycgJworCWVjaG8gdGhyZWUgPmV4cGVjdCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIFwKKwkJLS1mb3JjZSAtLXBydW5lLWVtcHR5IFwKKwkJLS1pbmRleC1maWx0ZXIgImdpdCBybSAtLWNhY2hlZCAtLWlnbm9yZS11bm1hdGNoIGJyb2tlbiIgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAxMC1zZXR1cC5zaCBiL3QvdDcwMTAtc2V0dXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDMzNWE5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMTAtc2V0dXAuc2gKQEAgLTAsMCArMSwxNjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzZXR1cCB0YWtpbmcgYW5kIHNhbml0aXppbmcgZnVubnkgcGF0aHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1rZGlyIC1wIGEvYi9jIGEvZSAmJgorCUQ9JChwd2QpICYmCisJPmEvYi9jL2QgJiYKKwk+YS9lL2YKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIChhYnNvbHV0ZSknICcKKworCWdpdCBhZGQgIiREL2EvYi9jL2QiICYmCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJZWNobyBhL2IvYy9kID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAoZnVubnkgcmVsYXRpdmUpJyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJKAorCQljZCBhL2IgJiYKKwkJZ2l0IGFkZCAiLi4vZS8uL2YiCisJKSAmJgorCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgorCWVjaG8gYS9lL2YgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJtIChhYnNvbHV0ZSknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgcm0gLWYgLS1jYWNoZWQgIiREL2EvYi9jL2QiICYmCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJZWNobyBhL2UvZiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcm0gKGZ1bm55IHJlbGF0aXZlKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCSgKKwkJY2QgYS9iICYmCisJCWdpdCBybSAtZiAtLWNhY2hlZCAiLi4vZS8uL2YiCisJKSAmJgorCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgorCWVjaG8gYS9iL2MvZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgKGFic29sdXRlKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBscy1maWxlcyAiJEQvYS9lLy4uL2IiID5jdXJyZW50ICYmCisJZWNobyBhL2IvYy9kID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAocmVsYXRpdmUgIzEpJyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJKAorCQljZCBhL2IgJiYKKwkJZ2l0IGxzLWZpbGVzICIuLi9iL2MiCisJKSAgPmN1cnJlbnQgJiYKKwllY2hvIGMvZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgKHJlbGF0aXZlICMyKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCSgKKwkJY2QgYS9iICYmCisJCWdpdCBscy1maWxlcyAtLWZ1bGwtbmFtZSAiLi4vZS9mIgorCSkgID5jdXJyZW50ICYmCisJZWNobyBhL2UvZiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgKHJlbGF0aXZlICMzKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCSgKKwkJY2QgYS9iICYmCisJCWdpdCBscy1maWxlcyAiLi4vZS9mIgorCSkgID5jdXJyZW50ICYmCisJZWNobyAuLi9lL2YgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHVzaW5nIGFic29sdXRlIHBhdGggbmFtZXMnICcKKwlnaXQgY29tbWl0IC1tICJmb28iICYmCisJZWNobyBhYSA+PmEvYi9jL2QgJiYKKwlnaXQgY29tbWl0IC1tICJhYSIgIiQocHdkKS9hL2IvYy9kIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgdXNpbmcgYWJzb2x1dGUgcGF0aCBuYW1lcycgJworCWVjaG8gYmIgPj5hL2IvYy9kICYmCisJZ2l0IGNvbW1pdCAtbSAiYmIiICIkKHB3ZCkvYS9iL2MvZCIgJiYKKworCWdpdCBsb2cgYS9iL2MvZCA+ZjEudHh0ICYmCisJZ2l0IGxvZyAiJChwd2QpL2EvYi9jL2QiID5mMi50eHQgJiYKKwl0ZXN0X2NtcCBmMS50eHQgZjIudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHVzaW5nIGFic29sdXRlIHBhdGggbmFtZXMnICcKKwlnaXQgYmxhbWUgYS9iL2MvZCA+ZjEudHh0ICYmCisJZ2l0IGJsYW1lICIkKHB3ZCkvYS9iL2MvZCIgPmYyLnR4dCAmJgorCXRlc3RfY21wIGYxLnR4dCBmMi50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGVlcGVyIHdvcmsgdHJlZScgJworCXRlc3RfY3JlYXRlX3JlcG8gdGVzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhIGRpcmVjdG9yeSBvdXRzaWRlIHRoZSB3b3JrIHRyZWUnICcoCisJY2QgdGVzdGVyICYmCisJZDE9IiQoY2QgLi4gOyBwd2QpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRkMSIKKyknCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgZmlsZSBvdXRzaWRlIHRoZSB3b3JrIHRyZWUsIG5hc3R5IGNhc2UgMScgJygKKwljZCB0ZXN0ZXIgJiYKKwlmPSIkKHB3ZCl4IiAmJgorCWVjaG8gIiRmIiAmJgorCXRvdWNoICIkZiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIkZiIKKyknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhIGZpbGUgb3V0c2lkZSB0aGUgd29yayB0cmVlLCBuYXN0eSBjYXNlIDInICcoCisJY2QgdGVzdGVyICYmCisJZj0iJChwd2QgfCBzZWQgInMvLiQvLyIpeCIgJiYKKwllY2hvICIkZiIgJiYKKwl0b3VjaCAiJGYiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAiJGYiCispJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoIGIvdC90NzAxMS1za2lwLXdvcmt0cmVlLXJlYWRpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzc1MjVjYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoCkBAIC0wLDAgKzEsMTYxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IE5ndXnhu4VuIFRow6FpIE5n4buNYyBEdXkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nc2tpcC13b3JrdHJlZSBiaXQgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+ZXhwZWN0LmZ1bGwgPDxFT0YKK0ggMQorSCAyCitIIGluaXQudAorSCBzdWIvMQorSCBzdWIvMgorRU9GCisKK2NhdCA+ZXhwZWN0LnNraXAgPDxFT0YKK1MgMQorSCAyCitIIGluaXQudAorUyBzdWIvMQorSCBzdWIvMgorRU9GCisKK3NldHVwX2Fic2VudCgpIHsKKwl0ZXN0IC1mIDEgJiYgcm0gMQorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICRFTVBUWV9CTE9CIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxCit9CisKK3Rlc3RfYWJzZW50KCkgeworCWVjaG8gIjEwMDY0NCAkRU1QVFlfQkxPQiAwCTEiID4gZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJdGVzdCAhIC1mIDEKK30KKworc2V0dXBfZGlydHkoKSB7CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAxICYmCisJZWNobyBkaXJ0eSA+IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkRU1QVFlfQkxPQiAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQorfQorCit0ZXN0X2RpcnR5KCkgeworCWVjaG8gIjEwMDY0NCAkRU1QVFlfQkxPQiAwCTEiID4gZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZWNobyBkaXJ0eSA+IGV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgMQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQgJiYKKwlta2RpciBzdWIgJiYKKwl0b3VjaCAuLzEgLi8yIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IGFkZCAxIDIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxIHN1Yi8xICYmCisJZ2l0IGxzLWZpbGVzIC10ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0LnNraXAgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCcgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCB1cGRhdGUtaW5kZXggMSAmJgorCXRlc3RfYWJzZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCcgJworCXNldHVwX2RpcnR5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAxICYmCisJdGVzdF9kaXJ0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1yZW1vdmUnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAxKSIgJiYKKwl0ZXN0ICEgLWYgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1yZW1vdmUnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgMSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIDEpIiAmJgorCWVjaG8gZGlydHkgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1kZWxldGVkJyAnCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLWRlbGV0ZWQnICcKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC1kKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1tb2RpZmllZCcgJworCXNldHVwX2Fic2VudCAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC1tKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1tb2RpZmllZCcgJworCXNldHVwX2RpcnR5ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLW0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHdpdGggc2tpcC13b3JrdHJlZSBmaWxlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgMSAmJgorCWVjaG8gdGVzdCA+IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxICYmCisJcm0gMSAmJgorCXRlc3QgIiQoZ2l0IGdyZXAgLS1uby1leHQtZ3JlcCB0ZXN0KSIgPSAiMTp0ZXN0IgorJworCitlY2hvICI6MDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJEVNUFRZX0JMT0IgQQkxIiA+IGV4cGVjdGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IGRvZXMgbm90IGV4YW1pbmUgc2tpcC13b3JrdHJlZSBhYnNlbnQgZW50cmllcycgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCBkaWZmLWluZGV4IEhFQUQgLS0gMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IGRvZXMgbm90IGV4YW1pbmUgc2tpcC13b3JrdHJlZSBkaXJ0eSBlbnRyaWVzJyAnCisJc2V0dXBfZGlydHkgJiYKKwlnaXQgZGlmZi1pbmRleCBIRUFEIC0tIDEgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyBkb2VzIG5vdCBleGFtaW5lIHNraXAtd29ya3RyZWUgYWJzZW50IGVudHJpZXMnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzIC0tIG9uZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgZG9lcyBub3QgZXhhbWluZSBza2lwLXdvcmt0cmVlIGRpcnR5IGVudHJpZXMnICcKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYtZmlsZXMgLS0gb25lKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LXJtIHN1Y2NlZWRzIG9uIHNraXAtd29ya3RyZWUgYWJzZW50IGVudHJpZXMnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgcm0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgb24gc2tpcC13b3JrdHJlZSBhYnNlbnQgZW50cmllcycgJworCWdpdCByZXNldCAmJgorCXNldHVwX2Fic2VudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gbnVsbCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBvbiBza2lwLXdvcmt0cmVlIGRpcnR5IGVudHJpZXMnICcKKwlnaXQgcmVzZXQgJiYKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gbnVsbCAxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2ggYi90L3Q3MDEyLXNraXAtd29ya3RyZWUtd3JpdGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDc2NzgxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKQEAgLTAsMCArMSwxNTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHdvcmt0cmVlIHdyaXRpbmcgb3BlcmF0aW9ucyB3aGVuIHNraXAtd29ya3RyZWUgaXMgdXNlZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdCAmJgorCWVjaG8gbW9kaWZpZWQgPj4gaW5pdC50ICYmCisJdG91Y2ggYWRkZWQgJiYKKwlnaXQgYWRkIGluaXQudCBhZGRlZCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGFuZCBhZGRlZCIgJiYKKwlnaXQgdGFnIHRvcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgdXBkYXRlcyB3b3JrdHJlZSwgYWJzZW50IGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgaW5pdC50ICYmCisJcm0gaW5pdC50ICYmCisJZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCWVjaG8gaW5pdCA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgaW5pdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB1cGRhdGVzIHdvcmt0cmVlLCBkaXJ0eSBjYXNlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGluaXQudCAmJgorCWVjaG8gZGlydHkgPj4gaW5pdC50ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCWdyZXAgLXEgZGlydHkgaW5pdC50ICYmCisJdGVzdCAiJChnaXQgbHMtZmlsZXMgLXQgaW5pdC50KSIgPSAiUyBpbml0LnQiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgaW5pdC50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSByZW1vdmVzIHdvcmt0cmVlLCBhYnNlbnQgY2FzZScgJworCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBhZGRlZCAmJgorCXJtIGFkZGVkICYmCisJZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCXRlc3QgISAtZiBhZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgcmVtb3ZlcyB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBhZGRlZCAmJgorCWVjaG8gZGlydHkgPj4gYWRkZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlIC1tIC11IEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBhZGRlZCAmJgorCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIC10IGFkZGVkKSIgPSAiUyBhZGRlZCIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZSBhZGRlZAorJworCitzZXR1cF9hYnNlbnQoKSB7CisJdGVzdCAtZiAxICYmIHJtIDEKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkRU1QVFlfQkxPQiAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQorfQorCit0ZXN0X2Fic2VudCgpIHsKKwllY2hvICIxMDA2NDQgJEVNUFRZX0JMT0IgMAkxIiA+IGV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCXRlc3QgISAtZiAxCit9CisKK3NldHVwX2RpcnR5KCkgeworCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgMSAmJgorCWVjaG8gZGlydHkgPiAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJEVNUFRZX0JMT0IgMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEKK30KKwordGVzdF9kaXJ0eSgpIHsKKwllY2hvICIxMDA2NDQgJEVNUFRZX0JMT0IgMAkxIiA+IGV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWVjaG8gZGlydHkgPiBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIDEKK30KKworY2F0ID5leHBlY3RlZCA8PEVPRgorUyAxCitIIDIKK0ggaW5pdC50CitTIHN1Yi8xCitIIHN1Yi8yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdCAmJgorCW1rZGlyIHN1YiAmJgorCXRvdWNoIC4vMSAuLzIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgYWRkIDEgMiBzdWIvMSBzdWIvMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEgc3ViLzEgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBpZ25vcmVzIHdvcmt0cmVlIGNvbnRlbnQnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgYWRkIDEgJiYKKwl0ZXN0X2Fic2VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtYWRkIGlnbm9yZXMgd29ya3RyZWUgY29udGVudCcgJworCXNldHVwX2RpcnR5ICYmCisJZ2l0IGFkZCAxICYmCisJdGVzdF9kaXJ0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtcm0gZmFpbHMgaWYgd29ya3RyZWUgaXMgZGlydHknICcKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAxICYmCisJdGVzdF9kaXJ0eQorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitXb3VsZCByZW1vdmUgZXhwZWN0ZWQKK1dvdWxkIHJlbW92ZSByZXN1bHQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWNsZWFuLCBhYnNlbnQgY2FzZScgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCBjbGVhbiAtbiA+IHJlc3VsdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWNsZWFuLCBkaXJ0eSBjYXNlJyAnCisJc2V0dXBfZGlydHkgJiYKKwlnaXQgY2xlYW4gLW4gPiByZXN1bHQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllcyBsZWF2ZXMgd29ya3RyZWUgYWxvbmUnICcKKwl0ZXN0X2NvbW1pdCBrZWVwLW1lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUga2VlcC1tZS50ICYmCisJcm0ga2VlcC1tZS50ICYmCisKKwk6IGlnbm9yaW5nIHRoZSB3b3JrdHJlZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIGtlZXAtbWUudCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQgJiYKKworCTogbm90IGlnbm9yaW5nIHRoZSB3b3JrdHJlZSwgYSBkZWxldGlvbiBpcyBzdGFnZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGtlZXAtbWUudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQgXAorCQktLWRpZmYtZmlsdGVyPUQgLS0ga2VlcC1tZS50CisnCisKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1hcHBseSBhZGRzIGZpbGUnIGZhbHNlCisjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtYXBwbHkgdXBkYXRlcyBmaWxlJyBmYWxzZQorI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWFwcGx5IHJlbW92ZXMgZmlsZScgZmFsc2UKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1tdiB0byBza2lwLXdvcmt0cmVlJyBmYWxzZQorI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LW12IGZyb20gc2tpcC13b3JrdHJlZScgZmFsc2UKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1jaGVja291dCcgZmFsc2UKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDMwLXZlcmlmeS10YWcuc2ggYi90L3Q3MDMwLXZlcmlmeS10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWM1YmMzMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMzAtdmVyaWZ5LXRhZy5zaApAQCAtMCwwICsxLDE5OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NpZ25lZCB0YWcgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRlIHNpZ25lZCB0YWdzJyAnCisJZWNobyAxID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIC1zIC1tIGluaXRpYWwgaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCisJZWNobyAyID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCWdpdCB0YWcgLXMgLW0gc2Vjb25kIHNlY29uZCAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIDMgPmVsaWYgJiYgZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInRoaXJkIG9uIHNpZGUiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtUyBzaWRlICYmCisJZ2l0IHRhZyAtcyAtbSBtZXJnZSBtZXJnZSAmJgorCisJZWNobyA0ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1TIC1tICJmb3VydGggdW5zaWduZWQiICYmCisJZ2l0IHRhZyAtYSAtbSBmb3VydGgtdW5zaWduZWQgZm91cnRoLXVuc2lnbmVkICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtLWFtZW5kIC1TIC1tICJmb3VydGggc2lnbmVkIiAmJgorCWdpdCB0YWcgLXMgLW0gZm91cnRoIGZvdXJ0aC1zaWduZWQgJiYKKworCWVjaG8gNSA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSAiZmlmdGgiICYmCisJZ2l0IHRhZyBmaWZ0aC11bnNpZ25lZCAmJgorCisJZ2l0IGNvbmZpZyBjb21taXQuZ3Bnc2lnbiB0cnVlICYmCisJZWNobyA2ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJzaXh0aCIgJiYKKwlnaXQgdGFnIC1hIC1tIHNpeHRoIHNpeHRoLXVuc2lnbmVkICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IHJlYmFzZSAtZiBIRUFEXl4gJiYgZ2l0IHRhZyAtcyAtbSA2dGggc2l4dGgtc2lnbmVkIEhFQUReICYmCisJZ2l0IHRhZyAtbSBzZXZlbnRoIC1zIHNldmVudGgtc2lnbmVkICYmCisKKwllY2hvIDggPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gZWlnaHRoICYmCisJZ2l0IHRhZyAtdUI3MjI3MTg5IC1tIGVpZ2h0aCBlaWdodGgtc2lnbmVkLWFsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdjcmVhdGUgc2lnbmVkIHRhZ3MgeDUwOSAnICcKKwl0ZXN0X2NvbmZpZyBncGcuZm9ybWF0IHg1MDkgJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgJEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwllY2hvIDkgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gIm5pbnRoIGdwZ3NtLXNpZ25lZCIgJiYKKwlnaXQgdGFnIC1zIC1tIG5pbnRoIG5pbnRoLXNpZ25lZC14NTA5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnkgYW5kIHNob3cgc2lnbmF0dXJlcycgJworCSgKKwkJZm9yIHRhZyBpbiBpbml0aWFsIHNlY29uZCBtZXJnZSBmb3VydGgtc2lnbmVkIHNpeHRoLXNpZ25lZCBzZXZlbnRoLXNpZ25lZAorCQlkbworCQkJZ2l0IHZlcmlmeS10YWcgJHRhZyAyPmFjdHVhbCAmJgorCQkJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJKAorCQlmb3IgdGFnIGluIGZvdXJ0aC11bnNpZ25lZCBmaWZ0aC11bnNpZ25lZCBzaXh0aC11bnNpZ25lZAorCQlkbworCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS10YWcgJHRhZyAyPmFjdHVhbCAmJgorCQkJISBncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCWVjaG8gJHRhZyBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwkoCisJCWZvciB0YWcgaW4gZWlnaHRoLXNpZ25lZC1hbHQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktdGFnICR0YWcgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJZ3JlcCAibm90IGNlcnRpZmllZCIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBhbmQgc2hvdyBzaWduYXR1cmVzIHg1MDknICcKKwlnaXQgdmVyaWZ5LXRhZyBuaW50aC1zaWduZWQteDUwOSAyPmFjdHVhbCAmJgorCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwllY2hvIG5pbnRoLXNpZ25lZC14NTA5IE9LCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBhbmQgc2hvdyBzaWduYXR1cmVzIHg1MDkgd2l0aCBsb3cgbWluVHJ1c3RMZXZlbCcgJworCXRlc3RfY29uZmlnIGdwZy5taW5UcnVzdExldmVsIHVuZGVmaW5lZCAmJgorCWdpdCB2ZXJpZnktdGFnIG5pbnRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCisJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCWVjaG8gbmludGgtc2lnbmVkLXg1MDkgT0sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAndmVyaWZ5IGFuZCBzaG93IHNpZ25hdHVyZXMgeDUwOSB3aXRoIG1hdGNoaW5nIG1pblRydXN0TGV2ZWwnICcKKwl0ZXN0X2NvbmZpZyBncGcubWluVHJ1c3RMZXZlbCBmdWxseSAmJgorCWdpdCB2ZXJpZnktdGFnIG5pbnRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCisJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCWVjaG8gbmludGgtc2lnbmVkLXg1MDkgT0sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAndmVyaWZ5IGFuZCBzaG93IHNpZ25hdHVyZXMgeDUwOSB3aXRoIGhpZ2ggbWluVHJ1c3RMZXZlbCcgJworCXRlc3RfY29uZmlnIGdwZy5taW5UcnVzdExldmVsIHVsdGltYXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS10YWcgbmludGgtc2lnbmVkLXg1MDkgMj5hY3R1YWwgJiYKKwlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJZWNobyBuaW50aC1zaWduZWQteDUwOSBPSworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBzaWduYXR1cmUnICcKKwlnaXQgY2F0LWZpbGUgdGFnIHNldmVudGgtc2lnbmVkID5yYXcgJiYKKwlzZWQgLWUgIi9edGFnIC8gcy9zZXZlbnRoLzd0aCBmb3JnZWQvIiByYXcgPmZvcmdlZDEgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgdGFnIGZvcmdlZDEgPmZvcmdlZDEudGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS10YWcgJChjYXQgZm9yZ2VkMS50YWcpIDI+YWN0dWFsMSAmJgorCWdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMSAmJgorCSEgZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IHNpZ25hdHVyZXMgd2l0aCAtLXJhdycgJworCSgKKwkJZm9yIHRhZyBpbiBpbml0aWFsIHNlY29uZCBtZXJnZSBmb3VydGgtc2lnbmVkIHNpeHRoLXNpZ25lZCBzZXZlbnRoLXNpZ25lZAorCQlkbworCQkJZ2l0IHZlcmlmeS10YWcgLS1yYXcgJHRhZyAyPmFjdHVhbCAmJgorCQkJZ3JlcCAiR09PRFNJRyIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRFNJRyIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJKAorCQlmb3IgdGFnIGluIGZvdXJ0aC11bnNpZ25lZCBmaWZ0aC11bnNpZ25lZCBzaXh0aC11bnNpZ25lZAorCQlkbworCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS10YWcgLS1yYXcgJHRhZyAyPmFjdHVhbCAmJgorCQkJISBncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEU0lHIiBhY3R1YWwgJiYKKwkJCWVjaG8gJHRhZyBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwkoCisJCWZvciB0YWcgaW4gZWlnaHRoLXNpZ25lZC1hbHQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktdGFnIC0tcmF3ICR0YWcgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdPT0RTSUciIGFjdHVhbCAmJgorCQkJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgorCQkJZ3JlcCAiVFJVU1RfVU5ERUZJTkVEIiBhY3R1YWwgJiYKKwkJCWVjaG8gJHRhZyBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAndmVyaWZ5IHNpZ25hdHVyZXMgd2l0aCAtLXJhdyB4NTA5JyAnCisJZ2l0IHZlcmlmeS10YWcgLS1yYXcgbmludGgtc2lnbmVkLXg1MDkgMj5hY3R1YWwgJiYKKwlncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKKwkhIGdyZXAgIkJBRFNJRyIgYWN0dWFsICYmCisJZWNobyBuaW50aC1zaWduZWQteDUwOSBPSworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IG11bHRpcGxlIHRhZ3MnICcKKwl0YWdzPSJmb3VydGgtc2lnbmVkIHNpeHRoLXNpZ25lZCBzZXZlbnRoLXNpZ25lZCIgJiYKKwlmb3IgaSBpbiAkdGFncworCWRvCisJCWdpdCB2ZXJpZnktdGFnIC12IC0tcmF3ICRpIHx8IHJldHVybiAxCisJZG9uZSA+ZXhwZWN0LnN0ZG91dCAyPmV4cGVjdC5zdGRlcnIuMSAmJgorCWdyZXAgIl4uR05VUEc6LiIgPGV4cGVjdC5zdGRlcnIuMSA+ZXhwZWN0LnN0ZGVyciAmJgorCWdpdCB2ZXJpZnktdGFnIC12IC0tcmF3ICR0YWdzID5hY3R1YWwuc3Rkb3V0IDI+YWN0dWFsLnN0ZGVyci4xICYmCisJZ3JlcCAiXi5HTlVQRzouIiA8YWN0dWFsLnN0ZGVyci4xID5hY3R1YWwuc3RkZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0LnN0ZG91dCBhY3R1YWwuc3Rkb3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0LnN0ZGVyciBhY3R1YWwuc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBtdWx0aXBsZSB0YWdzIHg1MDknICcKKwl0YWdzPSJzZXZlbnRoLXNpZ25lZCBuaW50aC1zaWduZWQteDUwOSIgJiYKKwlmb3IgaSBpbiAkdGFncworCWRvCisJCWdpdCB2ZXJpZnktdGFnIC12IC0tcmF3ICRpIHx8IHJldHVybiAxCisJZG9uZSA+ZXhwZWN0LnN0ZG91dCAyPmV4cGVjdC5zdGRlcnIuMSAmJgorCWdyZXAgIl4uR05VUEc6LiIgPGV4cGVjdC5zdGRlcnIuMSA+ZXhwZWN0LnN0ZGVyciAmJgorCWdpdCB2ZXJpZnktdGFnIC12IC0tcmF3ICR0YWdzID5hY3R1YWwuc3Rkb3V0IDI+YWN0dWFsLnN0ZGVyci4xICYmCisJZ3JlcCAiXi5HTlVQRzouIiA8YWN0dWFsLnN0ZGVyci4xID5hY3R1YWwuc3RkZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0LnN0ZG91dCBhY3R1YWwuc3Rkb3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0LnN0ZGVyciBhY3R1YWwuc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnlpbmcgdGFnIHdpdGggLS1mb3JtYXQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdGFnbmFtZSA6IGZvdXJ0aC1zaWduZWQKKwlFT0YKKwlnaXQgdmVyaWZ5LXRhZyAtLWZvcm1hdD0idGFnbmFtZSA6ICUodGFnKSIgImZvdXJ0aC1zaWduZWQiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnlpbmcgYSBmb3JnZWQgdGFnIHdpdGggLS1mb3JtYXQgc2hvdWxkIGZhaWwgc2lsZW50bHknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LXRhZyAtLWZvcm1hdD0idGFnbmFtZSA6ICUodGFnKSIgJChjYXQgZm9yZ2VkMS50YWcpID5hY3R1YWwtZm9yZ2VkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC1mb3JnZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDYwLXd0c3RhdHVzLnNoIGIvdC90NzA2MC13dHN0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNTIxODc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzA2MC13dHN0YXR1cy5zaApAQCAtMCwwICsxLDI1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHdvcmsgdHJlZSBzdGF0dXMgcmVwb3J0aW5nJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBhZHZpY2Uuc3RhdHVzdW9wdGlvbiBmYWxzZSAmJgorCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCIG9uZXNpZGUgYWRkZWQgJiYKKwlnaXQgY2hlY2tvdXQgQV4wICYmCisJdGVzdF9jb21taXQgQyBvbmVzaWRlIGNyZWF0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQS9BIGNvbmZsaWN0JyAnCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlcG9ydCBwYXRoIHdpdGggY29uZmxpY3QnICcKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzID5hY3R1YWwgJiYKKwllY2hvICJVCW9uZXNpZGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlcG9ydCBuZXcgcGF0aCB3aXRoIGNvbmZsaWN0JyAnCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyBIRUFEXiA+YWN0dWFsICYmCisJZWNobyAiVQlvbmVzaWRlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNL0QgY29uZmxpY3QgZG9lcyBub3Qgc2VnZmF1bHQnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIHNpZGUKK1lvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLgorICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuICJnaXQgY29tbWl0IikKKyAgKHVzZSAiZ2l0IG1lcmdlIC0tYWJvcnQiIHRvIGFib3J0IHRoZSBtZXJnZSkKKworVW5tZXJnZWQgcGF0aHM6CisgICh1c2UgImdpdCBhZGQvcm0gPGZpbGU+Li4uIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pCisJZGVsZXRlZCBieSB1czogICBmb28KKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCW1rZGlyIG1kY29uZmxpY3QgJiYKKwkoCisJCWNkIG1kY29uZmxpY3QgJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCBmb28gIiIgJiYKKwkJdGVzdF9jb21taXQgbW9kaWZ5IGZvbyBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwkJZ2l0IHJtIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tIGRlbGV0ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1kcnktcnVuID4uLi9hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwgJiYKKwkJZ2l0IHN0YXR1cyA+Li4vYWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgJiB1bm1lcmdlZCBzZXR1cCcgJworCWdpdCBybSAtZiAtciAuICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkvUkVBRE1FIiA+T05FICYmCisJZ2l0IGFkZCBPTkUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJPbmUgY29tbWl0IHdpdGggT05FIiAmJgorCisJZWNobyBNb2RpZmllZCA+VFdPICYmCisJY2F0IE9ORSA+PlRXTyAmJgorCWNhdCBPTkUgPj5USFJFRSAmJgorCWdpdCBhZGQgVFdPIFRIUkVFICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgOk9ORSkgJiYKKwlnaXQgcm0gLS1jYWNoZWQgT05FICYmCisJKAorCQllY2hvICIxMDA2NDQgJHNoYTEgMQlPTkUiICYmCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAyCU9ORSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDMJT05FIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWVjaG8gRnVydGhlciA+PlRIUkVFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSAmIHVubWVyZ2VkIHN0YXR1cycgJworCWdpdCBzdGF0dXMgLXN1bm8gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVVVIE9ORQorCUFNIFRIUkVFCisJQSAgVFdPCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBzaG93cyAyIGFkZGVkICsgMSB1bm1lcmdlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJVQlPTkUKKwlBCVRIUkVFCisJQQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtTSBzaG93cyAyIGFkZGVkICsgMSB1bm1lcmdlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJVQlPTkUKKwlBCVRIUkVFCisJQQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtTSAtLW5hbWUtc3RhdHVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtQyBzaG93cyAyIGNvcGllcyArIDEgdW5tZXJnZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVUJT05FCisJQwlPTkUJVEhSRUUKKwlDCU9ORQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtQyAtLW5hbWUtc3RhdHVzIEhFQUQgfAorCXNlZCAicy9eQ1swLTldKi9DL2ciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgd2l0aCBhZGQgYW5kIHJtIGFkdmljZSAoZGVsZXRlZCBieSB0aGVtKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgaW5pdCBtYWluLnR4dCBpbml0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZF9icmFuY2ggJiYKKwlnaXQgcm0gbWFpbi50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLnR4dCBkZWxldGVkIG9uIHNlY29uZF9icmFuY2giICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGNvbmZsaWN0LnR4dCBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgb25fc2Vjb25kIG1haW4udHh0IG9uX3NlY29uZCAmJgorCXRlc3RfY29tbWl0IG1hc3RlciBjb25mbGljdC50eHQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNlY29uZF9icmFuY2ggJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorICAodXNlICJnaXQgbWVyZ2UgLS1hYm9ydCIgdG8gYWJvcnQgdGhlIG1lcmdlKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IGFkZC9ybSA8ZmlsZT4uLi4iIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikKKwlib3RoIGFkZGVkOiAgICAgIGNvbmZsaWN0LnR4dAorCWRlbGV0ZWQgYnkgdGhlbTogbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgb25lIG1haW4udHh0IG9uZSAmJgorCWdpdCBicmFuY2ggY29uZmxpY3Rfc2Vjb25kICYmCisJZ2l0IG12IG1haW4udHh0IHN1Yl9tYXN0ZXIudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAibWFpbi50eHQgcmVuYW1lZCBpbiBzdWJfbWFzdGVyLnR4dCIgJiYKKwlnaXQgY2hlY2tvdXQgY29uZmxpY3Rfc2Vjb25kICYmCisJZ2l0IG12IG1haW4udHh0IHN1Yl9zZWNvbmQudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAibWFpbi50eHQgcmVuYW1lZCBpbiBzdWJfc2Vjb25kLnR4dCIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgd2l0aCBhZGQgYW5kIHJtIGFkdmljZSAoYm90aCBkZWxldGVkKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitPbiBicmFuY2ggY29uZmxpY3Rfc2Vjb25kCitZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNvbW1pdCIpCisgICh1c2UgImdpdCBtZXJnZSAtLWFib3J0IiB0byBhYm9ydCB0aGUgbWVyZ2UpCisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgYWRkL3JtIDxmaWxlPi4uLiIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKQorCWJvdGggZGVsZXRlZDogICAgbWFpbi50eHQKKwlhZGRlZCBieSB0aGVtOiAgIHN1Yl9tYXN0ZXIudHh0CisJYWRkZWQgYnkgdXM6ICAgICBzdWJfc2Vjb25kLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGNvbmZsaWN0cyB3aXRoIG9ubHkgcm0gYWR2aWNlIChib3RoIGRlbGV0ZWQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjb25mbGljdF9zZWNvbmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QgJiYKKwlnaXQgYWRkIHN1Yl9tYXN0ZXIudHh0ICYmCisJZ2l0IGFkZCBzdWJfc2Vjb25kLnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitPbiBicmFuY2ggY29uZmxpY3Rfc2Vjb25kCitZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNvbW1pdCIpCisgICh1c2UgImdpdCBtZXJnZSAtLWFib3J0IiB0byBhYm9ydCB0aGUgbWVyZ2UpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCW5ldyBmaWxlOiAgIHN1Yl9tYXN0ZXIudHh0CisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgcm0gPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCisJYm90aCBkZWxldGVkOiAgICBtYWluLnR4dAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1icmFuY2ggd2l0aCBkZXRhY2hlZCBIRUFEJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBzdGF0dXMgLS1icmFuY2ggLS1wb3JjZWxhaW4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJIyMgSEVBRCAobm8gYnJhbmNoKQorCT8/IC5naXRjb25maWcKKwk/PyBhY3R1YWwKKwk/PyBleHBlY3QKKwk/PyBleHBlY3RlZAorCT8/IG1kY29uZmxpY3QvCisJRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIyBEdXBsaWNhdGUgdGhlIGFib3ZlIHRlc3QgYW5kIHZlcmlmeSAtLXBvcmNlbGFpbj12MSBhcmcgcGFyc2luZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXBvcmNlbGFpbj12MSAtLWJyYW5jaCB3aXRoIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IHN0YXR1cyAtLWJyYW5jaCAtLXBvcmNlbGFpbj12MSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkjIyBIRUFEIChubyBicmFuY2gpCisJPz8gLmdpdGNvbmZpZworCT8/IGFjdHVhbAorCT8/IGV4cGVjdAorCT8/IGV4cGVjdGVkCisJPz8gbWRjb25mbGljdC8KKwlFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMjIFZlcmlmeSBwYXJzZXIgZXJyb3Igb24gaW52YWxpZCAtLXBvcmNlbGFpbiBhcmd1bWVudC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXBvcmNlbGFpbj1ib2d1cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGF0dXMgLS1wb3JjZWxhaW49Ym9ndXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDYxLXd0c3RhdHVzLWlnbm9yZS5zaCBiL3QvdDcwNjEtd3RzdGF0dXMtaWdub3JlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0Y2Y1NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDYxLXd0c3RhdHVzLWlnbm9yZS5zaApAQCAtMCwwICsxLDI5MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdGF0dXMgaWdub3JlZCBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCis/PyB1bnRyYWNrZWQvCishISB1bnRyYWNrZWQvaWdub3JlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmVkJyAnCisJZWNobyAiaWdub3JlZCIgPi5naXRpZ25vcmUgJiYKKwlta2RpciB1bnRyYWNrZWQgJiYKKwk6ID51bnRyYWNrZWQvaWdub3JlZCAmJgorCTogPnVudHJhY2tlZC91bmNvbW1pdHRlZCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSB3aXRoIGdpdGlnbm9yZSBzdGFydGluZyB3aXRoIEJPTScgJworCXByaW50ZiAiXDM1N1wyNzNcMjc3aWdub3JlZFxuIiA+LmdpdGlnbm9yZSAmJgorCW1rZGlyIC1wIHVudHJhY2tlZCAmJgorCTogPnVudHJhY2tlZC9pZ25vcmVkICYmCisJOiA+dW50cmFja2VkL3VuY29tbWl0dGVkICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorPz8gdW50cmFja2VkL3VuY29tbWl0dGVkCishISB1bnRyYWNrZWQvaWdub3JlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmVkIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IHVudHJhY2tlZC8KKyEhIHVudHJhY2tlZC9pZ25vcmVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIG9mIHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZWQgd29ya3Mgd2l0aCBvciB3aXRob3V0IHByZWZpeCcgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID50bXAgJiYKKwlncmVwIHVudHJhY2tlZC8gdG1wID5hY3R1YWwgJiYKKwlybSB0bXAgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIHVudHJhY2tlZC8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gdW50cmFja2VkL3VuY29tbWl0dGVkCishISB1bnRyYWNrZWQvaWdub3JlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBwcmVmaXhlZCB1bnRyYWNrZWQgc3ViLWRpcmVjdG9yeSB3aXRoIC0taWdub3JlZCAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11IHVudHJhY2tlZC8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgaWdub3JlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZScgJworCXJtIC1yZiB1bnRyYWNrZWQgJiYKKwlta2RpciBpZ25vcmVkICYmCisJOiA+aWdub3JlZC91bmNvbW1pdHRlZCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIGlnbm9yZWQvdW5jb21taXR0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZSAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZW1wdHkgdW50cmFja2VkIGRpcmVjdG9yeSB3aXRoIC0taWdub3JlJyAnCisJcm0gLXJmIGlnbm9yZWQgJiYKKwlta2RpciB1bnRyYWNrZWQtaWdub3JlZCAmJgorCW1rZGlyIHVudHJhY2tlZC1pZ25vcmVkL3Rlc3QgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGVtcHR5IHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZSAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIHVudHJhY2tlZC1pZ25vcmVkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggaWdub3JlZCBmaWxlcyB3aXRoIC0taWdub3JlJyAnCisJOiA+dW50cmFja2VkLWlnbm9yZWQvaWdub3JlZCAmJgorCTogPnVudHJhY2tlZC1pZ25vcmVkL3Rlc3QvaWdub3JlZCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIHVudHJhY2tlZC1pZ25vcmVkL2lnbm9yZWQKKyEhIHVudHJhY2tlZC1pZ25vcmVkL3Rlc3QvaWdub3JlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggaWdub3JlZCBmaWxlcyB3aXRoIC0taWdub3JlIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmUnICcKKwlybSAtcmYgdW50cmFja2VkLWlnbm9yZWQgJiYKKwlta2RpciB0cmFja2VkICYmCisJOiA+dHJhY2tlZC9jb21taXR0ZWQgJiYKKwlnaXQgYWRkIHRyYWNrZWQvY29tbWl0dGVkICYmCisJZ2l0IGNvbW1pdCAtbS4gJiYKKwllY2hvICJ0cmFja2VkIiA+LmdpdGlnbm9yZSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSB3aXRoIC0taWdub3JlIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IGFuZCBpZ25vcmVkIGZpbGUgd2l0aCAtLWlnbm9yZScgJworCWVjaG8gImNvbW1pdHRlZCIgPj4uZ2l0aWdub3JlICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IGFuZCBpZ25vcmVkIGZpbGUgd2l0aCAtLWlnbm9yZSAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIHRyYWNrZWQvdW5jb21taXR0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSBhbmQgdW5jb21taXR0ZWQgZmlsZSB3aXRoIC0taWdub3JlJyAnCisJZWNobyAidHJhY2tlZCIgPi5naXRpZ25vcmUgJiYKKwk6ID50cmFja2VkL3VuY29tbWl0dGVkICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgdHJhY2tlZC91bmNvbW1pdHRlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IGFuZCB1bmNvbW1pdHRlZCBmaWxlIHdpdGggLS1pZ25vcmUgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISB0cmFja2VkL2lnbm9yZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCB1bmNvbW1pdHRlZCBmaWxlIGluIHVudHJhY2tlZCBzdWJkaXIgd2l0aCAtLWlnbm9yZScgJworCXJtIC1yZiB0cmFja2VkL3VuY29tbWl0dGVkICYmCisJbWtkaXIgdHJhY2tlZC9pZ25vcmVkICYmCisJOiA+dHJhY2tlZC9pZ25vcmVkL3VuY29tbWl0dGVkICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgdHJhY2tlZC9pZ25vcmVkL3VuY29tbWl0dGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCB1bmNvbW1pdHRlZCBmaWxlIGluIHVudHJhY2tlZCBzdWJkaXIgd2l0aCAtLWlnbm9yZSAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIHRyYWNrZWQvaWdub3JlZC91bmNvbW1pdHRlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IHdpdGggdW5jb21taXR0ZWQgZmlsZSBpbiB0cmFja2VkIHN1YmRpciB3aXRoIC0taWdub3JlJyAnCisJOiA+dHJhY2tlZC9pZ25vcmVkL2NvbW1pdHRlZCAmJgorCWdpdCBhZGQgLWYgdHJhY2tlZC9pZ25vcmVkL2NvbW1pdHRlZCAmJgorCWdpdCBjb21taXQgLW0uICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgdHJhY2tlZC9pZ25vcmVkL3VuY29tbWl0dGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCB1bmNvbW1pdHRlZCBmaWxlIGluIHRyYWNrZWQgc3ViZGlyIHdpdGggLS1pZ25vcmUgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCishISB0cmFja2VkL3N1Ym1vZHVsZS8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlcyBzdWJtb2R1bGUgaW4gZXhjbHVkZWQgZGlyZWN0b3J5JyAnCisJZ2l0IGluaXQgdHJhY2tlZC9zdWJtb2R1bGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyB0cmFja2VkL3N1Ym1vZHVsZSBpbml0aWFsICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgdHJhY2tlZC9zdWJtb2R1bGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwNjItd3RzdGF0dXMtaWdub3JlY2FzZS5zaCBiL3QvdDcwNjItd3RzdGF0dXMtaWdub3JlY2FzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzcwOWRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzA2Mi13dHN0YXR1cy1pZ25vcmVjYXNlLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3RhdHVzIHdpdGggY29yZS5pZ25vcmVjYXNlPXRydWUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBoYXNoIGNvbGxpc2lvbnMnICcKKwkjIG5vdGU6ICJWLyIsICJWL1hRQU5ZLyIgYW5kICJXVVJaQVVQLyIgcHJvZHVjZSB0aGUgc2FtZSBoYXNoIGNvZGUKKwkjIGluIG5hbWUtaGFzaC5jOjpoYXNoX25hbWUKKwlta2RpciBWICYmCisJbWtkaXIgVi9YUUFOWSAmJgorCW1rZGlyIFdVUlpBVVAgJiYKKwl0b3VjaCBWL1hRQU5ZL3Rlc3QgJiYKKwlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSB0cnVlICYmCisJZ2l0IGFkZCAuICYmCisJIyB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgZ2l0IHN0YXR1cyBjb21wbGV0ZXMgKG5vIGVuZGxlc3MgbG9vcCkKKwlnaXQgc3RhdHVzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzA2My1zdGF0dXMtdW50cmFja2VkLWNhY2hlLnNoIGIvdC90NzA2My1zdGF0dXMtdW50cmFja2VkLWNhY2hlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5MGFlMTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDYzLXN0YXR1cy11bnRyYWNrZWQtY2FjaGUuc2gKQEAgLTAsMCArMSw3NzUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHVudHJhY2tlZCBjYWNoZScKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgT24gc29tZSBmaWxlc3lzdGVtcyAoZS5nLiBGcmVlQlNEJ3MgZXh0MiBhbmQgdWZzKSBkaXJlY3RvcnkgbXRpbWUKKyMgaXMgdXBkYXRlZCBsYXppbHkgYWZ0ZXIgY29udGVudHMgaW4gdGhlIGRpcmVjdG9yeSBjaGFuZ2VzLCB3aGljaAorIyBmb3JjZXMgdGhlIHVudHJhY2tlZCBjYWNoZSBjb2RlIHRvIHRha2UgdGhlIHNsb3cgcGF0aC4gIEEgdGVzdAorIyB0aGF0IHdhbnRzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmYXN0IHBhdGggd29ya3MgY29ycmVjdGx5IHNob3VsZAorIyBjYWxsIHRoaXMgaGVscGVyIHRvIG1ha2UgbXRpbWUgb2YgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGluIHN5bmMKKyMgd2l0aCB0aGUgcmVhbGl0eSBiZWZvcmUgY2hlY2tpbmcgdGhlIGZhc3QgcGF0aCBiZWhhdmlvdXIuCisjCisjIFNlZSA8MjAxNjA4MDMxNzQ1MjIuNTU3MS0xLXBjbG91ZHNAZ21haWwuY29tPiBpZiB5b3Ugd2FudCB0byBrbm93CisjIG1vcmUuCisKK0dJVF9GT1JDRV9VTlRSQUNLRURfQ0FDSEU9dHJ1ZQorZXhwb3J0IEdJVF9GT1JDRV9VTlRSQUNLRURfQ0FDSEUKKworc3luY19tdGltZSAoKSB7CisJZmluZCAuIC10eXBlIGQgLWxzID4vZGV2L251bGwKK30KKworYXZvaWRfcmFjeSgpIHsKKwlzbGVlcCAxCit9CisKK3N0YXR1c19pc19jbGVhbigpIHsKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IC4uL3N0YXR1cy5hY3R1YWwKK30KKwordGVzdF9sYXp5X3ByZXJlcSBVTlRSQUNLRURfQ0FDSEUgJworCXsgZ2l0IHVwZGF0ZS1pbmRleCAtLXRlc3QtdW50cmFja2VkLWNhY2hlOyByZXQ9JD87IH0gJiYKKwl0ZXN0ICRyZXQgLW5lIDEKKycKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFVOVFJBQ0tFRF9DQUNIRTsgdGhlbgorCXNraXBfYWxsPSdUaGlzIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IHVudHJhY2tlZCBjYWNoZScKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUudW50cmFja2VkQ2FjaGUgaXMgdW5zZXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IGNvcmUudW50cmFja2VkQ2FjaGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgaW5pdCB3b3JrdHJlZSAmJgorCWNkIHdvcmt0cmVlICYmCisJbWtkaXIgZG9uZSBkdHdvIGR0aHJlZSAmJgorCXRvdWNoIG9uZSB0d28gdGhyZWUgZG9uZS9vbmUgZHR3by90d28gZHRocmVlL3RocmVlICYmCisJZ2l0IGFkZCBvbmUgdHdvIGRvbmUvb25lICYmCisJOiA+LmdpdC9pbmZvL2V4Y2x1ZGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW50cmFja2VkLWNhY2hlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBjYWNoZSBpcyBlbXB0eScgJworCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJY2F0ID4uLi9leHBlY3QtZW1wdHkgPDxFT0YgJiYKK2luZm8vZXhjbHVkZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjb3JlLmV4Y2x1ZGVzZmlsZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitleGNsdWRlX3Blcl9kaXIgLmdpdGlnbm9yZQorZmxhZ3MgMDAwMDAwMDYKK0VPRgorCXRlc3RfY21wIC4uL2V4cGVjdC1lbXB0eSAuLi9hY3R1YWwKKycKKworY2F0ID4uLi9zdGF0dXMuZXhwZWN0IDw8RU9GICYmCitBICBkb25lL29uZQorQSAgb25lCitBICB0d28KKz8/IGR0aHJlZS8KKz8/IGR0d28vCis/PyB0aHJlZQorRU9GCisKK2NhdCA+Li4vZHVtcC5leHBlY3QgPDxFT0YgJiYKK2luZm8vZXhjbHVkZSAkRU1QVFlfQkxPQgorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorZHRocmVlLworZHR3by8KK3RocmVlCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordGhyZWUKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGZpcnN0IHRpbWUgKGVtcHR5IGNhY2hlKScgJworCWF2b2lkX3JhY3kgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAzCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAxCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiA0CitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIGFmdGVyIGZpcnN0IHN0YXR1cycgJworCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZHVtcC5leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzZWNvbmQgdGltZSAoZnVsbHkgcG9wdWxhdGVkIGNhY2hlKScgJworCWF2b2lkX3JhY3kgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAwCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiAwCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIGFmdGVyIHNlY29uZCBzdGF0dXMnICcKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2R1bXAuZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgaW4gcm9vdCBkaXJlY3RvcnksIG9uZSBkaXIgaW52YWxpZGF0aW9uJyAnCisJYXZvaWRfcmFjeSAmJgorCTogPmZvdXIgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKK0EgIHR3bworPz8gZHRocmVlLworPz8gZHR3by8KKz8/IGZvdXIKKz8/IHRocmVlCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAwCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAxCitvcGVuZGlyOiAxCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAnICcKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgJEVNUFRZX0JMT0IKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKK2R0aHJlZS8KK2R0d28vCitmb3VyCit0aHJlZQorL2RvbmUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3RocmVlCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgLmdpdGlnbm9yZSBpbnZhbGlkYXRlcyByZWN1cnNpdmVseScgJworCWF2b2lkX3JhY3kgJiYKKwllY2hvIGZvdXIgPi5naXRpZ25vcmUgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKK0EgIHR3bworPz8gLmdpdGlnbm9yZQorPz8gZHRocmVlLworPz8gZHR3by8KKz8/IHRocmVlCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAxCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAxCitvcGVuZGlyOiA0CitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAnICcKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgJEVNUFRZX0JMT0IKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0aHJlZS8KK2R0d28vCit0aHJlZQorL2RvbmUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3RocmVlCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgaW5mby9leGNsdWRlIGludmFsaWRhdGVzIGV2ZXJ5dGhpbmcnICcKKwlhdm9pZF9yYWN5ICYmCisJZWNobyB0aHJlZSA+Pi5naXQvaW5mby9leGNsdWRlICYmCisJOiA+Li4vdHJhY2UgJiYKKwlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlIiBcCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vYWN0dWFsICYmCisJY2F0ID4uLi9zdGF0dXMuZXhwZWN0IDw8RU9GICYmCitBICBkb25lL29uZQorQSAgb25lCitBICB0d28KKz8/IC5naXRpZ25vcmUKKz8/IGR0d28vCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAxCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiA0CitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHVudHJhY2tlZCBjYWNoZSBkdW1wJyAnCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorL2R0d28vIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCit0d28KK0VPRgorCXRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSB0d28gZnJvbSB0cmFja2VkIHRvIHVudHJhY2tlZCcgJworCWdpdCBybSAtLWNhY2hlZCB0d28gJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgMTMyNjNjMDk3OGZiOWZhZDE2YjJkNTgwZmI4MDBiNmQ4MTFjM2ZmMAorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIGU2ZmNjOGYyZWUzMWJhZTMyMWQ2NmFmZDE4M2ZjYjcyMzdhZmFlNmUgcmVjdXJzZQorL2RvbmUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBhZnRlciB0aGUgbW92ZScgJworCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorQSAgZG9uZS9vbmUKK0EgIG9uZQorPz8gLmdpdGlnbm9yZQorPz8gZHR3by8KKz8/IHR3bworRU9GCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMAorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMAorb3BlbmRpcjogMQorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB1bnRyYWNrZWQgY2FjaGUgZHVtcCcgJworCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJY2F0ID4uLi9leHBlY3QgPDxFT0YgJiYKK2luZm8vZXhjbHVkZSAxMzI2M2MwOTc4ZmI5ZmFkMTZiMmQ1ODBmYjgwMGI2ZDgxMWMzZmYwCitjb3JlLmV4Y2x1ZGVzZmlsZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitleGNsdWRlX3Blcl9kaXIgLmdpdGlnbm9yZQorZmxhZ3MgMDAwMDAwMDYKKy8gZTZmY2M4ZjJlZTMxYmFlMzIxZDY2YWZkMTgzZmNiNzIzN2FmYWU2ZSByZWN1cnNlIHZhbGlkCisuZ2l0aWdub3JlCitkdHdvLwordHdvCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorL2R0d28vIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCit0d28KK0VPRgorCXRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSB0d28gZnJvbSB1bnRyYWNrZWQgdG8gdHJhY2tlZCcgJworCWdpdCBhZGQgdHdvICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UKKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgYWZ0ZXIgdGhlIG1vdmUnICcKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKK0EgIHR3bworPz8gLmdpdGlnbm9yZQorPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDAKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDAKK29wZW5kaXI6IDEKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAnICcKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgMTMyNjNjMDk3OGZiOWZhZDE2YjJkNTgwZmI4MDBiNmQ4MTFjM2ZmMAorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIGU2ZmNjOGYyZWUzMWJhZTMyMWQ2NmFmZDE4M2ZjYjcyMzdhZmFlNmUgcmVjdXJzZSB2YWxpZAorLmdpdGlnbm9yZQorZHR3by8KKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZm9yIHNwYXJzZSBjaGVja291dCB0ZXN0aW5nJyAnCisJZWNobyB0d28gPmRvbmUvLmdpdGlnbm9yZSAmJgorCWVjaG8gdGhyZWUgPj5kb25lLy5naXRpZ25vcmUgJiYKKwllY2hvIHR3byA+ZG9uZS90d28gJiYKKwlnaXQgYWRkIC1mIGRvbmUvdHdvIGRvbmUvLmdpdGlnbm9yZSAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGFmdGVyIGNvbW1pdCcgJworCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorPz8gLmdpdGlnbm9yZQorPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDAKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDAKK29wZW5kaXI6IDIKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnRyYWNrZWQgY2FjaGUgY29ycmVjdCBhZnRlciBjb21taXQnICcKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgMTMyNjNjMDk3OGZiOWZhZDE2YjJkNTgwZmI4MDBiNmQ4MTFjM2ZmMAorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIGU2ZmNjOGYyZWUzMWJhZTMyMWQ2NmFmZDE4M2ZjYjcyMzdhZmFlNmUgcmVjdXJzZSB2YWxpZAorLmdpdGlnbm9yZQorZHR3by8KKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgc3BhcnNlIGNoZWNrb3V0JyAnCisJZWNobyAiZG9uZS9bYS16XSoiID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJdGVzdF9jb25maWcgY29yZS5zcGFyc2VjaGVja291dCB0cnVlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS11bnRyYWNrZWQtY2FjaGUgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4vZGV2L251bGwgJiYgIyBwcmltZSB0aGUgY2FjaGUKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkb25lLy5naXRpZ25vcmUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkb25lL29uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUvbW9kaWZ5IGZpbGVzLCBzb21lIG9mIHdoaWNoIGFyZSBnaXRpZ25vcmVkJyAnCisJZWNobyB0d28gYmlzID5kb25lL3R3byAmJgorCWVjaG8gdGhyZWUgPmRvbmUvdGhyZWUgJiYgIyB0aHJlZSBpcyBnaXRpZ25vcmVkCisJZWNobyBmb3VyID5kb25lL2ZvdXIgJiYgIyBmb3VyIGlzIGdpdGlnbm9yZWQgYXQgYSBoaWdoZXIgbGV2ZWwKKwllY2hvIGZpdmUgPmRvbmUvZml2ZSAmJiAjIGZpdmUgaXMgbm90IGdpdGlnbm9yZWQKKwllY2hvIHRlc3QgPmJhc2UgJiYgI3dlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJvb3QgZGlyIGlzIHRvdWNoZWQKKwlybSBiYXNlICYmCisJc3luY19tdGltZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNwYXJzZSBzdGF0dXMgd2l0aCB1bnRyYWNrZWQgY2FjaGUnICcKKwk6ID4uLi90cmFjZSAmJgorCWF2b2lkX3JhY3kgJiYKKwlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlIiBcCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLmFjdHVhbCAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorIE0gZG9uZS90d28KKz8/IC5naXRpZ25vcmUKKz8/IGRvbmUvZml2ZQorPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLmFjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAxCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAyCitvcGVuZGlyOiAyCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIGNvcnJlY3QgYWZ0ZXIgc3RhdHVzJyAnCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCisvZG9uZS8gMTk0NmYwNDM3ZjkwYzUwMDU1MzNjYmUxNzM2YTY0NTFjYTMwMTcxNCByZWN1cnNlIHZhbGlkCitmaXZlCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorL2R0d28vIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCit0d28KK0VPRgorCXRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzcGFyc2Ugc3RhdHVzIGFnYWluIHdpdGggdW50cmFja2VkIGNhY2hlJyAnCisJYXZvaWRfcmFjeSAmJgorCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKKyBNIGRvbmUvdHdvCis/PyAuZ2l0aWdub3JlCis/PyBkb25lL2ZpdmUKKz8/IGR0d28vCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMAorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMAorb3BlbmRpcjogMAorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmb3IgdGVzdCBvZiBzdWJkaXIgYW5kIHNwYXJzZSBjaGVja291dHMnICcKKwlta2RpciBkb25lL3N1YiAmJgorCW1rZGlyIGRvbmUvc3ViL3N1YiAmJgorCWVjaG8gInN1YiIgPiBkb25lL3N1Yi9zdWIvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNwYXJzZSBzdGF0dXMgd2l0aCB1bnRyYWNrZWQgY2FjaGUgYW5kIHN1YmRpcicgJworCWF2b2lkX3JhY3kgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuYWN0dWFsICYmCisJY2F0ID4uLi9zdGF0dXMuZXhwZWN0IDw8RU9GICYmCisgTSBkb25lL3R3bworPz8gLmdpdGlnbm9yZQorPz8gZG9uZS9maXZlCis/PyBkb25lL3N1Yi8KKz8/IGR0d28vCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMgorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMAorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMQorb3BlbmRpcjogMworRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB1bnRyYWNrZWQgY2FjaGUgZHVtcCAoc3BhcnNlL3N1YmRpcnMpJyAnCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdC1mcm9tLXRlc3QtZHVtcCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCisvZG9uZS8gMTk0NmYwNDM3ZjkwYzUwMDU1MzNjYmUxNzM2YTY0NTFjYTMwMTcxNCByZWN1cnNlIHZhbGlkCitmaXZlCitzdWIvCisvZG9uZS9zdWIvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCitzdWIvCisvZG9uZS9zdWIvc3ViLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorZmlsZQorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QtZnJvbS10ZXN0LWR1bXAgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc3BhcnNlIHN0YXR1cyBhZ2FpbiB3aXRoIHVudHJhY2tlZCBjYWNoZSBhbmQgc3ViZGlyJyAnCisJYXZvaWRfcmFjeSAmJgorCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMAorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMAorb3BlbmRpcjogMAorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgZW50cnkgaW4gc3ViZGlyIGZyb20gdW50cmFja2VkIHRvIGNhY2hlZCcgJworCWdpdCBhZGQgZHR3by90d28gJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuYWN0dWFsICYmCisJY2F0ID4uLi9zdGF0dXMuZXhwZWN0IDw8RU9GICYmCisgTSBkb25lL3R3bworQSAgZHR3by90d28KKz8/IC5naXRpZ25vcmUKKz8/IGRvbmUvZml2ZQorPz8gZG9uZS9zdWIvCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBlbnRyeSBpbiBzdWJkaXIgZnJvbSBjYWNoZWQgdG8gdW50cmFja2VkJyAnCisJZ2l0IHJtIC0tY2FjaGVkIGR0d28vdHdvICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLmFjdHVhbCAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorIE0gZG9uZS90d28KKz8/IC5naXRpZ25vcmUKKz8/IGRvbmUvZml2ZQorPz8gZG9uZS9zdWIvCis/PyBkdHdvLworRU9GCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9zdGF0dXMuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdW50cmFja2VkLWNhY2hlIHJlbW92ZXMgdGhlIGNhY2hlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXVudHJhY2tlZC1jYWNoZSAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJZWNobyAibm8gdW50cmFja2VkIGNhY2hlIiA+Li4vZXhwZWN0LW5vLXVjICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LW5vLXVjIC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3RhdHVzIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZycgJworCWdpdCBzdGF0dXMgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1uby11YyAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dGluZyBjb3JlLnVudHJhY2tlZENhY2hlIHRvIHRydWUgYW5kIHVzaW5nIGdpdCBzdGF0dXMgY3JlYXRlcyB0aGUgY2FjaGUnICcKKwlnaXQgY29uZmlnIGNvcmUudW50cmFja2VkQ2FjaGUgdHJ1ZSAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LW5vLXVjIC4uL2FjdHVhbCAmJgorCWdpdCBzdGF0dXMgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1mcm9tLXRlc3QtZHVtcCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1uby11bnRyYWNrZWQtY2FjaGUgZG9lcyBub3QgZmFpbCB3aGVuIGNvcmUudW50cmFja2VkQ2FjaGUgaXMgdHJ1ZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1uby11bnRyYWNrZWQtY2FjaGUgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1uby11YyAuLi9hY3R1YWwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW50cmFja2VkLWNhY2hlICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3QtZW1wdHkgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgY29yZS51bnRyYWNrZWRDYWNoZSB0byBmYWxzZSBhbmQgdXNpbmcgZ2l0IHN0YXR1cyByZW1vdmVzIHRoZSBjYWNoZScgJworCWdpdCBjb25maWcgY29yZS51bnRyYWNrZWRDYWNoZSBmYWxzZSAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LWVtcHR5IC4uL2FjdHVhbCAmJgorCWdpdCBzdGF0dXMgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1uby11YyAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS11bnRyYWNrZWQtY2FjaGUgZG9lcyBub3QgZmFpbCB3aGVuIGNvcmUudW50cmFja2VkQ2FjaGUgaXMgZmFsc2UnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW50cmFja2VkLWNhY2hlICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3QtZW1wdHkgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgY29yZS51bnRyYWNrZWRDYWNoZSB0byBrZWVwJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnVudHJhY2tlZENhY2hlIGtlZXAgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW50cmFja2VkLWNhY2hlICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3QtZW1wdHkgLi4vYWN0dWFsICYmCisJZ2l0IHN0YXR1cyAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LWZyb20tdGVzdC1kdW1wIC4uL2FjdHVhbCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1uby11bnRyYWNrZWQtY2FjaGUgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC1uby11YyAuLi9hY3R1YWwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtdW50cmFja2VkLWNhY2hlICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9leHBlY3QtZW1wdHkgLi4vYWN0dWFsICYmCisJZ2l0IHN0YXR1cyAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZXhwZWN0LWZyb20tdGVzdC1kdW1wIC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGlkZW50IGZpZWxkIGlzIHdvcmtpbmcnICcKKwlta2RpciAuLi9vdGhlcl93b3JrdHJlZSAmJgorCWNwIC1SIGRvbmUgZHRocmVlIGR0d28gZm91ciB0aHJlZSAuLi9vdGhlcl93b3JrdHJlZSAmJgorCUdJVF9XT1JLX1RSRUU9Li4vb3RoZXJfd29ya3RyZWUgZ2l0IHN0YXR1cyAyPi4uL2VyciAmJgorCWVjaG8gIndhcm5pbmc6IHVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbSBvciBsb2NhdGlvbiIgPi4uL2V4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCAuLi9leHBlY3QgLi4vZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBjYWNoZSBzdXJ2aXZlcyBhIGNoZWNrb3V0JyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGVtcHR5ICYmCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9iZWZvcmUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBvdGhlcl9icmFuY2ggJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FmdGVyICYmCisJdGVzdF9jbXAgLi4vYmVmb3JlIC4uL2FmdGVyICYmCisJdGVzdF9jb21taXQgdGVzdCAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYmVmb3JlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWZ0ZXIgJiYKKwl0ZXN0X2NtcCAuLi9iZWZvcmUgLi4vYWZ0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIHN1cnZpdmVzIGEgY29tbWl0JyAnCisJdGVzdC10b29sIGR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9iZWZvcmUgJiYKKwlnaXQgYWRkIGRvbmUvdHdvICYmCisJZ2l0IGNvbW1pdCAtbSBjb21taXQgJiYKKwl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FmdGVyICYmCisJdGVzdF9jbXAgLi4vYmVmb3JlIC4uL2FmdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RlYXJkb3duIHdvcmt0cmVlJyAnCisJY2QgLi4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc2V0dXAgd29ya3RyZWUgZm9yIHN5bWxpbmsgdGVzdCcgJworCWdpdCBpbml0IHdvcmt0cmVlLXN5bWxpbmsgJiYKKwljZCB3b3JrdHJlZS1zeW1saW5rICYmCisJZ2l0IGNvbmZpZyBjb3JlLnVudHJhY2tlZENhY2hlIHRydWUgJiYKKwlta2RpciBvbmUgdHdvICYmCisJdG91Y2ggb25lL2ZpbGUgdHdvL2ZpbGUgJiYKKwlnaXQgYWRkIG9uZS9maWxlIHR3by9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSJmaXJzdCBjb21taXQiICYmCisJZ2l0IHJtIC1yZiBvbmUgJiYKKwlsbiAtcyB0d28gb25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1tInNlY29uZCBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJyJzdGF0dXMiIGFmdGVyIHN5bWxpbmsgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIGNsZWFuIHdpdGggVUM9dHJ1ZScgJworCWdpdCBjaGVja291dCBIRUFEfiAmJgorCXN0YXR1c19pc19jbGVhbiAmJgorCXN0YXR1c19pc19jbGVhbiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlhdm9pZF9yYWN5ICYmCisJc3RhdHVzX2lzX2NsZWFuICYmCisJc3RhdHVzX2lzX2NsZWFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJyJzdGF0dXMiIGFmdGVyIHN5bWxpbmsgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIGNsZWFuIHdpdGggVUM9ZmFsc2UnICcKKwlnaXQgY29uZmlnIGNvcmUudW50cmFja2VkQ2FjaGUgZmFsc2UgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRH4gJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJYXZvaWRfcmFjeSAmJgorCXN0YXR1c19pc19jbGVhbiAmJgorCXN0YXR1c19pc19jbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB3b3JrdHJlZSBmb3Igbm9uLXN5bWxpbmsgdGVzdCcgJworCWdpdCBpbml0IHdvcmt0cmVlLW5vbi1zeW1saW5rICYmCisJY2Qgd29ya3RyZWUtbm9uLXN5bWxpbmsgJiYKKwlnaXQgY29uZmlnIGNvcmUudW50cmFja2VkQ2FjaGUgdHJ1ZSAmJgorCW1rZGlyIG9uZSB0d28gJiYKKwl0b3VjaCBvbmUvZmlsZSB0d28vZmlsZSAmJgorCWdpdCBhZGQgb25lL2ZpbGUgdHdvL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tImZpcnN0IGNvbW1pdCIgJiYKKwlnaXQgcm0gLXJmIG9uZSAmJgorCWNwIHR3by9maWxlIG9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZ2l0IGNvbW1pdCAtbSJzZWNvbmQgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzIiBhZnRlciBmaWxlIHJlcGxhY2VtZW50IHNob3VsZCBiZSBjbGVhbiB3aXRoIFVDPXRydWUnICcKKwlnaXQgY2hlY2tvdXQgSEVBRH4gJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJYXZvaWRfcmFjeSAmJgorCXN0YXR1c19pc19jbGVhbiAmJgorCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJZ3JlcCAtRiAicmVjdXJzZSB2YWxpZCIgLi4vYWN0dWFsID4uLi9hY3R1YWwuZ3JlcCAmJgorCWNhdCA+Li4vZXhwZWN0LmdyZXAgPDxFT0YgJiYKKy8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKK0VPRgorCXN0YXR1c19pc19jbGVhbiAmJgorCXRlc3RfY21wIC4uL2V4cGVjdC5ncmVwIC4uL2FjdHVhbC5ncmVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMiIGFmdGVyIGZpbGUgcmVwbGFjZW1lbnQgc2hvdWxkIGJlIGNsZWFuIHdpdGggVUM9ZmFsc2UnICcKKwlnaXQgY29uZmlnIGNvcmUudW50cmFja2VkQ2FjaGUgZmFsc2UgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRH4gJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlzdGF0dXNfaXNfY2xlYW4gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJYXZvaWRfcmFjeSAmJgorCXN0YXR1c19pc19jbGVhbiAmJgorCXN0YXR1c19pc19jbGVhbgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwNjQtd3RzdGF0dXMtcHYyLnNoIGIvdC90NzA2NC13dHN0YXR1cy1wdjIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTM3Nzg3ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwNjQtd3RzdGF0dXMtcHYyLnNoCkBAIC0wLDAgKzEsNjYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MgorCitUaGlzIHRlc3QgZXhlcmNpc2VzIHBvcmNlbGFpbiBWMiBvdXRwdXQgZm9yIGdpdCBzdGF0dXMuJworCisKKy4gLi90ZXN0LWxpYi5zaAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCWVjaG8geCA+ZmlsZV94ICYmCisJZWNobyB5ID5maWxlX3kgJiYKKwllY2hvIHogPmZpbGVfeiAmJgorCW1rZGlyIGRpcjEgJiYKKwllY2hvIGEgPmRpcjEvZmlsZV9hICYmCisJZWNobyBiID5kaXIxL2ZpbGVfYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiZWZvcmUgaW5pdGlhbCBjb21taXQsIG5vdGhpbmcgYWRkZWQsIG9ubHkgdW50cmFja2VkJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkIChpbml0aWFsKQorCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJPyBhY3R1YWwKKwk/IGRpcjEvCisJPyBleHBlY3QKKwk/IGZpbGVfeAorCT8gZmlsZV95CisJPyBmaWxlX3oKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9bm9ybWFsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JlZm9yZSBpbml0aWFsIGNvbW1pdCwgdGhpbmdzIGFkZGVkJyAnCisJZ2l0IGFkZCBmaWxlX3ggZmlsZV95IGZpbGVfeiBkaXIxICYmCisJT0lEX0E9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSBkaXIxL2ZpbGVfYSkgJiYKKwlPSURfQj0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIGRpcjEvZmlsZV9iKSAmJgorCU9JRF9YPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gZmlsZV94KSAmJgorCU9JRF9ZPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gZmlsZV95KSAmJgorCU9JRF9aPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gZmlsZV96KSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkIChpbml0aWFsKQorCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkT0lEX0EgZGlyMS9maWxlX2EKKwkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRPSURfQiBkaXIxL2ZpbGVfYgorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9YIGZpbGVfeAorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9ZIGZpbGVfeQorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9aIGZpbGVfegorCT8gYWN0dWFsCisJPyBleHBlY3QKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JlZm9yZSBpbml0aWFsIGNvbW1pdCwgdGhpbmdzIGFkZGVkICgteiknICcKKwlsZl90b19udWwgPmV4cGVjdCA8PC1FT0YgJiYKKwkjIGJyYW5jaC5vaWQgKGluaXRpYWwpCisJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRPSURfQSBkaXIxL2ZpbGVfYQorCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9CIGRpcjEvZmlsZV9iCisJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkT0lEX1ggZmlsZV94CisJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkT0lEX1kgZmlsZV95CisJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkT0lEX1ogZmlsZV96CisJPyBhY3R1YWwKKwk/IGV4cGVjdAorCUVPRgorCisJZ2l0IHN0YXR1cyAteiAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBmaXJzdCBjb21taXQsIGNvbWZpcm0gSEVBRCBvaWQgYW5kIGJyYW5jaCcgJworCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSMgYnJhbmNoLm9pZCAkSDAKKwkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCT8gYWN0dWFsCisJPyBleHBlY3QKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FmdGVyIGZpcnN0IGNvbW1pdCwgY3JlYXRlIHVuc3RhZ2VkIGNoYW5nZXMnICcKKwllY2hvIHggPj5maWxlX3ggJiYKKwlPSURfWDE9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSBmaWxlX3gpICYmCisJcm0gZmlsZV96ICYmCisJSDA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkjIGJyYW5jaC5vaWQgJEgwCisJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkxIC5NIE4uLi4gMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJE9JRF9YICRPSURfWCBmaWxlX3gKKwkxIC5EIE4uLi4gMTAwNjQ0IDEwMDY0NCAwMDAwMDAgJE9JRF9aICRPSURfWiBmaWxlX3oKKwk/IGFjdHVhbAorCT8gZXhwZWN0CisJRU9GCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZnRlciBmaXJzdCBjb21taXQgYnV0IG9taXQgdW50cmFja2VkIGZpbGVzIGFuZCBicmFuY2gnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkxIC5NIE4uLi4gMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJE9JRF9YICRPSURfWCBmaWxlX3gKKwkxIC5EIE4uLi4gMTAwNjQ0IDEwMDY0NCAwMDAwMDAgJE9JRF9aICRPSURfWiBmaWxlX3oKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWZ0ZXIgZmlyc3QgY29tbWl0LCBzdGFnZSBleGlzdGluZyBjaGFuZ2VzJyAnCisJZ2l0IGFkZCBmaWxlX3ggJiYKKwlnaXQgcm0gZmlsZV96ICYmCisJSDA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkjIGJyYW5jaC5vaWQgJEgwCisJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkxIE0uIE4uLi4gMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJE9JRF9YICRPSURfWDEgZmlsZV94CisJMSBELiBOLi4uIDEwMDY0NCAwMDAwMDAgMDAwMDAwICRPSURfWiAkWkVST19PSUQgZmlsZV96CisJPyBhY3R1YWwKKwk/IGV4cGVjdAorCUVPRgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGNhdXNlcyAyIHBhdGggbGluZXMnICcKKwlnaXQgbXYgZmlsZV95IHJlbmFtZWRfeSAmJgorCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJcV90b190YWIgPmV4cGVjdCA8PC1FT0YgJiYKKwkjIGJyYW5jaC5vaWQgJEgwCisJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkxIE0uIE4uLi4gMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJE9JRF9YICRPSURfWDEgZmlsZV94CisJMSBELiBOLi4uIDEwMDY0NCAwMDAwMDAgMDAwMDAwICRPSURfWiAkWkVST19PSUQgZmlsZV96CisJMiBSLiBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRPSURfWSAkT0lEX1kgUjEwMCByZW5hbWVkX3lRZmlsZV95CisJPyBhY3R1YWwKKwk/IGV4cGVjdAorCUVPRgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGNhdXNlcyAyIHBhdGggbGluZXMgKC16KScgJworCUgwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJIyMgTGluZXMgdXNlIE5VTCBwYXRoIHNlcGFyYXRvciBhbmQgbGluZSB0ZXJtaW5hdG9yLCBzbyBkb3VibGUgdHJhbnNmb3JtIGhlcmUuCisJcV90b19udWwgPDwtRU9GIHwgbGZfdG9fbnVsID5leHBlY3QgJiYKKwkjIGJyYW5jaC5vaWQgJEgwCisJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkxIE0uIE4uLi4gMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJE9JRF9YICRPSURfWDEgZmlsZV94CisJMSBELiBOLi4uIDEwMDY0NCAwMDAwMDAgMDAwMDAwICRPSURfWiAkWkVST19PSUQgZmlsZV96CisJMiBSLiBOLi4uIDEwMDY0NCAxMDA2NDQgMTAwNjQ0ICRPSURfWSAkT0lEX1kgUjEwMCByZW5hbWVkX3lRZmlsZV95CisJPyBhY3R1YWwKKwk/IGV4cGVjdAorCUVPRgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgLXogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzZWNvbmQgY29tbWl0LCBjb25maXJtIGNsZWFuIGFuZCBuZXcgSEVBRCBvaWQnICcKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCUgxPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkICRIMQorCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJPyBhY3R1YWwKKwk/IGV4cGVjdAorCUVPRgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlybSBpZ25vcmVkIGZpbGVzIGFyZSBub3QgcHJpbnRlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgeC5pZ24gLmdpdGlnbm9yZSIgJiYKKwllY2hvIHguaWduID4uZ2l0aWdub3JlICYmCisJZWNobyAiaWdub3JlIG1lIiA+eC5pZ24gJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCT8gLmdpdGlnbm9yZQorCT8gYWN0dWFsCisJPyBleHBlY3QKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZWQgZmlsZXMgYXJlIHByaW50ZWQgd2l0aCAtLWlnbm9yZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIHguaWduIC5naXRpZ25vcmUiICYmCisJZWNobyB4LmlnbiA+LmdpdGlnbm9yZSAmJgorCWVjaG8gImlnbm9yZSBtZSIgPnguaWduICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk/IC5naXRpZ25vcmUKKwk/IGFjdHVhbAorCT8gZXhwZWN0CisJISB4LmlnbgorCUVPRgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWlnbm9yZWQgLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhbmQgY29tbWl0IHBlcm1hbmVudCBpZ25vcmUgZmlsZScgJworCWNhdCA+LmdpdGlnbm9yZSA8PC1FT0YgJiYKKwlhY3R1YWwqCisJZXhwZWN0KgorCUVPRgorCisJZ2l0IGFkZCAuZ2l0aWdub3JlICYmCisJZ2l0IGNvbW1pdCAtbSBpZ25vcmVfdHJhc2ggJiYKKwlIMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCSMgYnJhbmNoLm9pZCAkSDEKKwkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCUVPRgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgLS1pbnRlbnQtdG8tYWRkIG91dHB1dCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC1mIGludGVudDEuYWRkIGludGVudDIuYWRkIiAmJgorCXRvdWNoIGludGVudDEuYWRkICYmCisJZWNobyB0ZXN0ID5pbnRlbnQyLmFkZCAmJgorCisJZ2l0IGFkZCAtLWludGVudC10by1hZGQgaW50ZW50MS5hZGQgaW50ZW50Mi5hZGQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTEgLkEgTi4uLiAwMDAwMDAgMDAwMDAwIDEwMDY0NCAkWkVST19PSUQgJFpFUk9fT0lEIGludGVudDEuYWRkCisJMSAuQSBOLi4uIDAwMDAwMCAwMDAwMDAgMTAwNjQ0ICRaRVJPX09JRCAkWkVST19PSUQgaW50ZW50Mi5hZGQKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IEFBIChhZGQtYWRkKSBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKworCWdpdCBicmFuY2ggQUFfQSBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgQUFfQSAmJgorCWVjaG8gIkJyYW5jaCBBQV9BIiA+Y29uZmxpY3QudHh0ICYmCisJT0lEX0FBX0E9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSBjb25mbGljdC50eHQpICYmCisJZ2l0IGFkZCBjb25mbGljdC50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJicmFuY2ggYWFfYSIgJiYKKworCWdpdCBicmFuY2ggQUFfQiBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgQUFfQiAmJgorCWVjaG8gIkJyYW5jaCBBQV9CIiA+Y29uZmxpY3QudHh0ICYmCisJT0lEX0FBX0I9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSBjb25mbGljdC50eHQpICYmCisJZ2l0IGFkZCBjb25mbGljdC50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJicmFuY2ggYWFfYiIgJiYKKworCWdpdCBicmFuY2ggQUFfTSBBQV9CICYmCisJZ2l0IGNoZWNrb3V0IEFBX00gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQUFfQSAmJgorCisJSE09JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkjIGJyYW5jaC5vaWQgJEhNCisJIyBicmFuY2guaGVhZCBBQV9NCisJdSBBQSBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJE9JRF9BQV9CICRPSURfQUFfQSBjb25mbGljdC50eHQKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBVVSAoZWRpdC1lZGl0KSBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKworCWdpdCBicmFuY2ggVVVfQU5DIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBVVV9BTkMgJiYKKwllY2hvICJBbmNlc3RvciIgPmNvbmZsaWN0LnR4dCAmJgorCU9JRF9VVV9BTkM9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSBjb25mbGljdC50eHQpICYmCisJZ2l0IGFkZCBjb25mbGljdC50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJVVV9BTkMiICYmCisKKwlnaXQgYnJhbmNoIFVVX0EgVVVfQU5DICYmCisJZ2l0IGNoZWNrb3V0IFVVX0EgJiYKKwllY2hvICJCcmFuY2ggVVVfQSIgPmNvbmZsaWN0LnR4dCAmJgorCU9JRF9VVV9BPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gY29uZmxpY3QudHh0KSAmJgorCWdpdCBhZGQgY29uZmxpY3QudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoIHV1X2EiICYmCisKKwlnaXQgYnJhbmNoIFVVX0IgVVVfQU5DICYmCisJZ2l0IGNoZWNrb3V0IFVVX0IgJiYKKwllY2hvICJCcmFuY2ggVVVfQiIgPmNvbmZsaWN0LnR4dCAmJgorCU9JRF9VVV9CPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gY29uZmxpY3QudHh0KSAmJgorCWdpdCBhZGQgY29uZmxpY3QudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoIHV1X2IiICYmCisKKwlnaXQgYnJhbmNoIFVVX00gVVVfQiAmJgorCWdpdCBjaGVja291dCBVVV9NICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIFVVX0EgJiYKKworCUhNPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJIyBicmFuY2gub2lkICRITQorCSMgYnJhbmNoLmhlYWQgVVVfTQorCXUgVVUgTi4uLiAxMDA2NDQgMTAwNjQ0IDEwMDY0NCAxMDA2NDQgJE9JRF9VVV9BTkMgJE9JRF9VVV9CICRPSURfVVVfQSBjb25mbGljdC50eHQKKwlFT0YKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB1cHN0cmVhbSBmaWVsZHMgaW4gYnJhbmNoIGhlYWRlcicgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdWJfcmVwbyIgJiYKKwlnaXQgY2xvbmUgLiBzdWJfcmVwbyAmJgorCSgKKwkJIyMgQ29uZmlybSBsb2NhbCBtYXN0ZXIgdHJhY2tzIHJlbW90ZSBtYXN0ZXIuCisJCWNkIHN1Yl9yZXBvICYmCisJCUhVRj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIVUYKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMCAtMAorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIyBUZXN0IGFoZWFkL2JlaGluZC4KKwkJZWNobyB4eXogPmZpbGVfeHl6ICYmCisJCWdpdCBhZGQgZmlsZV94eXogJiYKKwkJZ2l0IGNvbW1pdCAtbSB4eXogJiYKKworCQlIVUY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSMgYnJhbmNoLm9pZCAkSFVGCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzEgLTAKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyMgUmVwZWF0IHRoZSBhYm92ZSBidXQgd2l0aG91dCAtLWJyYW5jaC4KKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwkJIyMgVGVzdCB1cHN0cmVhbS1nb25lIGNhc2UuIEZha2UgdGhpcyBieSBwb2ludGluZyBvcmlnaW4vbWFzdGVyIGF0CisJCSMjIGEgbm9uLWV4aXN0aW5nIGNvbW1pdC4KKwkJT0xEPSQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyKSAmJgorCQlORVc9JFpFUk9fT0lEICYmCisJCW12IC5naXQvcGFja2VkLXJlZnMgLmdpdC9vbGQtcGFja2VkLXJlZnMgJiYKKwkJc2VkICJzLyRPTEQvJE5FVy9nIiA8LmdpdC9vbGQtcGFja2VkLXJlZnMgPi5naXQvcGFja2VkLXJlZnMgJiYKKworCQlIVUY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSMgYnJhbmNoLm9pZCAkSFVGCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgLS1bbm8tXWFoZWFkLWJlaGluZCB3aXRoIFYyIGZvcm1hdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdWJfcmVwbyIgJiYKKwlnaXQgY2xvbmUgLiBzdWJfcmVwbyAmJgorCSgKKwkJIyMgQ29uZmlybSBsb2NhbCBtYXN0ZXIgdHJhY2tzIHJlbW90ZSBtYXN0ZXIuCisJCWNkIHN1Yl9yZXBvICYmCisJCUhVRj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCQkjIENvbmZpcm0gLS1uby1haGVhZC1iZWhpbmQgcmVwb3J0cyB0cmFkaXRpb25hbCBicmFuY2guYWIgd2l0aCAwLzAgZm9yIGVxdWFsIGJyYW5jaGVzLgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIVUYKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMCAtMAorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tbm8tYWhlYWQtYmVoaW5kIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIENvbmZpcm0gLS1haGVhZC1iZWhpbmQgcmVwb3J0cyB0cmFkaXRpb25hbCBicmFuY2guYWIgd2l0aCAwLzAuCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhVRgorCQkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCQkjIGJyYW5jaC51cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisJCSMgYnJhbmNoLmFiICswIC0wCisJCUVPRgorCisJCWdpdCBzdGF0dXMgLS1haGVhZC1iZWhpbmQgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCSMjIFRlc3Qgbm9uLWVxdWFsIGFoZWFkL2JlaGluZC4KKwkJZWNobyB4eXogPmZpbGVfeHl6ICYmCisJCWdpdCBhZGQgZmlsZV94eXogJiYKKwkJZ2l0IGNvbW1pdCAtbSB4eXogJiYKKworCQlIVUY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkJIyBDb25maXJtIC0tbm8tYWhlYWQtYmVoaW5kIHJlcG9ydHMgYnJhbmNoLmFiIHdpdGggPy8/IGZvciBub24tZXF1YWwgYnJhbmNoZXMuCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhVRgorCQkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCQkjIGJyYW5jaC51cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisJCSMgYnJhbmNoLmFiICs/IC0/CisJCUVPRgorCisJCWdpdCBzdGF0dXMgLS1uby1haGVhZC1iZWhpbmQgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCSMgQ29uZmlybSAtLWFoZWFkLWJlaGluZCByZXBvcnRzIHRyYWRpdGlvbmFsIGJyYW5jaC5hYiB3aXRoIDEvMC4KKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSMgYnJhbmNoLm9pZCAkSFVGCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzEgLTAKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLWFoZWFkLWJlaGluZCAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJIyBDb25maXJtIHRoYXQgInN0YXR1cy5haGVhZGJlaGluZCIgRE9FUyBOT1Qgd29yayBvbiBWMiBmb3JtYXQuCisJCWdpdCAtYyBzdGF0dXMuYWhlYWRiZWhpbmQ9ZmFsc2Ugc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQkjIENvbmZpcm0gdGhhdCAic3RhdHVzLmFoZWFkYmVoaW5kIiBET0VTIE5PVCB3b3JrIG9uIFYyIGZvcm1hdC4KKwkJZ2l0IC1jIHN0YXR1cy5haGVhZGJlaGluZD10cnVlIHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5kIGFkZCBzdWJtb2R1bGUsIHN1Ym1vZHVsZSBhcHBlYXJzIGNsZWFuIChBLiBTLi4uKScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2xvbmUgLiBzdWJfcmVwbyAmJgorCWdpdCBjbG9uZSAuIHN1cGVyX3JlcG8gJiYKKwkoCWNkIHN1cGVyX3JlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViX3JlcG8gc3ViMSAmJgorCisJCSMjIENvbmZpcm0gc3RhZ2UvYWRkIG9mIGNsZWFuIHN1Ym1vZHVsZS4KKwkJSE1PRD0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tIC5naXRtb2R1bGVzKSAmJgorCQlIU1VQPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlIU1VCPSRIU1VQICYmCisKKwkJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCSMgYnJhbmNoLm9pZCAkSFNVUAorCQkjIGJyYW5jaC5oZWFkIG1hc3RlcgorCQkjIGJyYW5jaC51cHN0cmVhbSBvcmlnaW4vbWFzdGVyCisJCSMgYnJhbmNoLmFiICswIC0wCisJCTEgQS4gTi4uLiAwMDAwMDAgMTAwNjQ0IDEwMDY0NCAkWkVST19PSUQgJEhNT0QgLmdpdG1vZHVsZXMKKwkJMSBBLiBTLi4uIDAwMDAwMCAxNjAwMDAgMTYwMDAwICRaRVJPX09JRCAkSFNVQiBzdWIxCisJCUVPRgorCisJCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1icmFuY2ggLS11bnRyYWNrZWQtZmlsZXM9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNoYW5nZXMgaW4gYWRkZWQgc3VibW9kdWxlIChBTSBTLi5VKScgJworCSgJY2Qgc3VwZXJfcmVwbyAmJgorCQkjIyBjcmVhdGUgdW50cmFja2VkIGZpbGUgaW4gdGhlIHN1Ym1vZHVsZS4KKwkJKAljZCBzdWIxICYmCisJCQllY2hvICJ4eHh4IiA+ZmlsZV9pbl9zdWIKKwkJKSAmJgorCisJCUhNT0Q9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSAuZ2l0bW9kdWxlcykgJiYKKwkJSFNVUD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJSFNVQj0kSFNVUCAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhTVVAKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMCAtMAorCQkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRITU9EIC5naXRtb2R1bGVzCisJCTEgQU0gUy4uVSAwMDAwMDAgMTYwMDAwIDE2MDAwMCAkWkVST19PSUQgJEhTVUIgc3ViMQorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YWdlZCBjaGFuZ2VzIGluIGFkZGVkIHN1Ym1vZHVsZSAoQU0gUy5NLiknICcKKwkoCWNkIHN1cGVyX3JlcG8gJiYKKwkJIyMgc3RhZ2UgdGhlIGNoYW5nZXMgaW4gdGhlIHN1Ym1vZHVsZS4KKwkJKAljZCBzdWIxICYmCisJCQlnaXQgYWRkIGZpbGVfaW5fc3ViCisJCSkgJiYKKworCQlITU9EPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gLmdpdG1vZHVsZXMpICYmCisJCUhTVVA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCUhTVUI9JEhTVVAgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIU1VQCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzAgLTAKKwkJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkSE1PRCAuZ2l0bW9kdWxlcworCQkxIEFNIFMuTS4gMDAwMDAwIDE2MDAwMCAxNjAwMDAgJFpFUk9fT0lEICRIU1VCIHN1YjEKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFnZWQgYW5kIHVuc3RhZ2VkIGNoYW5nZXMgaW4gYWRkZWQgKEFNIFMuTS4pJyAnCisJKAljZCBzdXBlcl9yZXBvICYmCisJCSgJY2Qgc3ViMSAmJgorCQkJIyMgbWFrZSBhZGRpdGlvbmFsIHVuc3RhZ2VkIGNoYW5nZXMgKG9uIHRoZSBzYW1lIGZpbGUpIGluIHRoZSBzdWJtb2R1bGUuCisJCQkjIyBUaGlzIGRvZXMgbm90IGNhdXNlIHVzIHRvIGdldCBTLk1VIChiZWNhdXNlIHRoZSBzdWJtb2R1bGUgZG9lcyBub3QgcmVwb3J0CisJCQkjIyBhICI/IiBsaW5lIGZvciB0aGUgdW5zdGFnZWQgY2hhbmdlcykuCisJCQllY2hvICJtb3JlIGNoYW5nZXMiID4+ZmlsZV9pbl9zdWIKKwkJKSAmJgorCisJCUhNT0Q9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSAuZ2l0bW9kdWxlcykgJiYKKwkJSFNVUD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJSFNVQj0kSFNVUCAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhTVVAKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMCAtMAorCQkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRITU9EIC5naXRtb2R1bGVzCisJCTEgQU0gUy5NLiAwMDAwMDAgMTYwMDAwIDE2MDAwMCAkWkVST19PSUQgJEhTVUIgc3ViMQorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YWdlZCBhbmQgdW50cmFja2VkIGNoYW5nZXMgaW4gYWRkZWQgc3VibW9kdWxlIChBTSBTLk1VKScgJworCSgJY2Qgc3VwZXJfcmVwbyAmJgorCQkoCWNkIHN1YjEgJiYKKwkJCSMjIHN0YWdlIG5ldyBjaGFuZ2VzIGluIHRyYWNrZWQgZmlsZS4KKwkJCWdpdCBhZGQgZmlsZV9pbl9zdWIgJiYKKwkJCSMjIGNyZWF0ZSBuZXcgdW50cmFja2VkIGZpbGUuCisJCQllY2hvICJ5eXl5IiA+PmFub3RoZXJfZmlsZV9pbl9zdWIKKwkJKSAmJgorCisJCUhNT0Q9JChnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLSAuZ2l0bW9kdWxlcykgJiYKKwkJSFNVUD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJSFNVQj0kSFNVUCAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhTVVAKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMCAtMAorCQkxIEEuIE4uLi4gMDAwMDAwIDEwMDY0NCAxMDA2NDQgJFpFUk9fT0lEICRITU9EIC5naXRtb2R1bGVzCisJCTEgQU0gUy5NVSAwMDAwMDAgMTYwMDAwIDE2MDAwMCAkWkVST19PSUQgJEhTVUIgc3ViMQorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoaW4gdGhlIHN1Ym1vZHVsZSBhcHBlYXJzIGFzIG5ldyBjb21taXQgaW4gc3VwZXIgKEFNIFNDLi4pJyAnCisJKAljZCBzdXBlcl9yZXBvICYmCisJCSgJY2Qgc3ViMSAmJgorCQkJIyMgTWFrZSBhIG5ldyBjb21taXQgaW4gdGhlIHN1Ym1vZHVsZS4KKwkJCWdpdCBhZGQgZmlsZV9pbl9zdWIgJiYKKwkJCXJtIC1mIGFub3RoZXJfZmlsZV9pbl9zdWIgJiYKKwkJCWdpdCBjb21taXQgLW0gIm5ldyBjb21taXQiCisJCSkgJiYKKworCQlITU9EPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS0gLmdpdG1vZHVsZXMpICYmCisJCUhTVVA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCUhTVUI9JEhTVVAgJiYKKworCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJIyBicmFuY2gub2lkICRIU1VQCisJCSMgYnJhbmNoLmhlYWQgbWFzdGVyCisJCSMgYnJhbmNoLnVwc3RyZWFtIG9yaWdpbi9tYXN0ZXIKKwkJIyBicmFuY2guYWIgKzAgLTAKKwkJMSBBLiBOLi4uIDAwMDAwMCAxMDA2NDQgMTAwNjQ0ICRaRVJPX09JRCAkSE1PRCAuZ2l0bW9kdWxlcworCQkxIEFNIFNDLi4gMDAwMDAwIDE2MDAwMCAxNjAwMDAgJFpFUk9fT0lEICRIU1VCIHN1YjEKKwkJRU9GCisKKwkJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWJyYW5jaCAtLXVudHJhY2tlZC1maWxlcz1hbGwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFnZSBzdWJtb2R1bGUgaW4gc3VwZXIgYW5kIGNvbW1pdCcgJworCSgJY2Qgc3VwZXJfcmVwbyAmJgorCQkjIyBTdGFnZSB0aGUgbmV3IHN1Ym1vZHVsZSBjb21taXQgaW4gdGhlIHN1cGVyLgorCQlnaXQgYWRkIHN1YjEgJiYKKwkJIyMgQ29tbWl0IHRoZSBzdXBlciBzbyB0aGF0IHRoZSBzdWIgbm8gbG9uZ2VyIGFwcGVhcnMgYXMgYWRkZWQuCisJCWdpdCBjb21taXQgLW0gInN1cGVyIGNvbW1pdCIgJiYKKworCQlIU1VQPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhTVVAKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMSAtMAorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgdW5zdGFnZWQgY2hhbmdlcyBpbiBleGlzdGluZyBzdWJtb2R1bGUgKC5NIFMuTS4pJyAnCisJKAljZCBzdXBlcl9yZXBvICYmCisJCSgJY2Qgc3ViMSAmJgorCQkJZWNobyAienp6eiIgPj5maWxlX2luX3N1YgorCQkpICYmCisKKwkJSFNVUD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJSFNVQj0kKGNkIHN1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkjIGJyYW5jaC5vaWQgJEhTVVAKKwkJIyBicmFuY2guaGVhZCBtYXN0ZXIKKwkJIyBicmFuY2gudXBzdHJlYW0gb3JpZ2luL21hc3RlcgorCQkjIGJyYW5jaC5hYiArMSAtMAorCQkxIC5NIFMuTS4gMTYwMDAwIDE2MDAwMCAxNjAwMDAgJEhTVUIgJEhTVUIgc3ViMQorCQlFT0YKKworCQlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0tYnJhbmNoIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzEwMS1yZXNldC1lbXB0eS1zdWJkaXJzLnNoIGIvdC90NzEwMS1yZXNldC1lbXB0eS1zdWJkaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2ZTE2M2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTAxLXJlc2V0LWVtcHR5LXN1YmRpcnMuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBTaGF3biBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IHNob3VsZCBjdWxsIGVtcHR5IHN1YmRpcnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0aW5nIGluaXRpYWwgZmlsZXMnIFwKKyAgICAnbWtkaXIgcGF0aDAgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMC9DT1BZSU5HICYmCisgICAgIGdpdCBhZGQgcGF0aDAvQ09QWUlORyAmJgorICAgICBnaXQgY29tbWl0IC1tIGFkZCAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0aW5nIHNlY29uZCBmaWxlcycgXAorICAgICdta2RpciBwYXRoMSAmJgorICAgICBta2RpciBwYXRoMS9wYXRoMiAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIHBhdGgxL3BhdGgyL0NPUFlJTkcgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMS9DT1BZSU5HICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgQ09QWUlORyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIHBhdGgwL0NPUFlJTkctVE9PICYmCisgICAgIGdpdCBhZGQgcGF0aDEvcGF0aDIvQ09QWUlORyAmJgorICAgICBnaXQgYWRkIHBhdGgxL0NPUFlJTkcgJiYKKyAgICAgZ2l0IGFkZCBDT1BZSU5HICYmCisgICAgIGdpdCBhZGQgcGF0aDAvQ09QWUlORy1UT08gJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSBjaGFuZ2UgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZXNldHRpbmcgdHJlZSBIRUFEXicgXAorICAgICdnaXQgcmVzZXQgLS1oYXJkIEhFQUReJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgaW5pdGlhbCBmaWxlcyBleGlzdCBhZnRlciByZXdpbmQnIFwKKyAgICAndGVzdCAtZCBwYXRoMCAmJgorICAgICB0ZXN0IC1mIHBhdGgwL0NPUFlJTkcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBsYWNrIG9mIHBhdGgxL3BhdGgyL0NPUFlJTkcnIFwKKyAgICAnISB0ZXN0IC1mIHBhdGgxL3BhdGgyL0NPUFlJTkcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBsYWNrIG9mIHBhdGgxL0NPUFlJTkcnIFwKKyAgICAnISB0ZXN0IC1mIHBhdGgxL0NPUFlJTkcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBsYWNrIG9mIENPUFlJTkcnIFwKKyAgICAnISB0ZXN0IC1mIENPUFlJTkcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBjaGVja2luZyBsYWNrIG9mIHBhdGgxL0NPUFlJTkctVE9PJyBcCisgICAgJyEgdGVzdCAtZiBwYXRoMC9DT1BZSU5HLVRPTycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIGxhY2sgb2YgcGF0aDEvcGF0aDInIFwKKyAgICAnISB0ZXN0IC1kIHBhdGgxL3BhdGgyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgbGFjayBvZiBwYXRoMScgXAorICAgICchIHRlc3QgLWQgcGF0aDEnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzEwMi1yZXNldC5zaCBiL3QvdDcxMDItcmVzZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTdiZTBkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDItcmVzZXQuc2gKQEAgLTAsMCArMSw1NjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybG9zIFJpY2EKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0CisKK0RvY3VtZW50ZWQgdGVzdHMgZm9yIGdpdCByZXNldCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbW1pdF9tc2cgKCkgeworCSMgU3RyaW5nICJtb2RpZnkgMm5kIGZpbGUgKGNoYW5nZWQpIiBwYXJ0bHkgaW4gR2VybWFuCisJIyAodHJhbnNsYXRlZCB3aXRoIEdvb2dsZSBUcmFuc2xhdGUpLAorCSMgZW5jb2RlZCBpbiBVVEYtOCwgdXNlZCBhcyBhIGNvbW1pdCBsb2cgbWVzc2FnZSBiZWxvdy4KKwltc2c9Im1vZGlmeSAybmQgZmlsZSAoZ2VcMzAzXDI0NG5kZXJ0KVxuIgorCWlmIHRlc3QgLW4gIiQxIgorCXRoZW4KKwkJcHJpbnRmICIkbXNnIiB8IGljb252IC1mIHV0Zi04IC10ICIkMSIKKwllbHNlCisJCXByaW50ZiAiJG1zZyIKKwlmaQorfQorCisjIFRlc3RlZCBub24tVVRGLTggZW5jb2RpbmcKK3Rlc3RfZW5jb2Rpbmc9IklTTzg4NTktMSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgaW5pdGlhbCBmaWxlcyBhbmQgY29tbWl0cycgJworCXRlc3RfdGljayAmJgorCWVjaG8gIjFzdCBmaWxlIiA+Zmlyc3QgJiYKKwlnaXQgYWRkIGZpcnN0ICYmCisJZ2l0IGNvbW1pdCAtbSAiY3JlYXRlIDFzdCBmaWxlIiAmJgorCisJZWNobyAiMm5kIGZpbGUiID5zZWNvbmQgJiYKKwlnaXQgYWRkIHNlY29uZCAmJgorCWdpdCBjb21taXQgLW0gImNyZWF0ZSAybmQgZmlsZSIgJiYKKworCWVjaG8gIjJuZCBsaW5lIDFzdCBmaWxlIiA+PmZpcnN0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibW9kaWZ5IDFzdCBmaWxlIiAmJgorCisJZ2l0IHJtIGZpcnN0ICYmCisJZ2l0IG12IHNlY29uZCBzZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAicmVtb3ZlIDFzdCBhbmQgcmVuYW1lIDJuZCIgJiYKKworCWVjaG8gIjFzdCBsaW5lIDJuZCBmaWxlIiA+c2Vjb25kZmlsZSAmJgorCWVjaG8gIjJuZCBsaW5lIDJuZCBmaWxlIiA+PnNlY29uZGZpbGUgJiYKKwkjICJnaXQgY29tbWl0IC1tIiB3b3VsZCBicmVhayBNaW5HVywgYXMgV2luZG93cyByZWZ1c2UgdG8gcGFzcworCSMgJHRlc3RfZW5jb2RpbmcgZW5jb2RlZCBwYXJhbWV0ZXIgdG8gZ2l0LgorCWNvbW1pdF9tc2cgJHRlc3RfZW5jb2RpbmcgfCBnaXQgLWMgImkxOG4uY29tbWl0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmciIGNvbW1pdCAtYSAtRiAtICYmCisJaGVhZDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisjIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAjIHRvIHNlZSB0aG9zZSBTSEExIGludm9sdmVkCisKK2NoZWNrX2NoYW5nZXMgKCkgeworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJDEiICYmCisJZ2l0IGRpZmYgfCB0ZXN0X2NtcCAuZGlmZl9leHBlY3QgLSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIHwgdGVzdF9jbXAgLmNhY2hlZF9leHBlY3QgLSAmJgorCWZvciBGSUxFIGluICoKKwlkbworCQllY2hvICRGSUxFJzonCisJCWNhdCAkRklMRSB8fCByZXR1cm4KKwlkb25lIHwgdGVzdF9jbXAgLmNhdF9leHBlY3QgLQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgbWVzc2FnZScgJworCWhleD0kKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIikgJiYKKwlnaXQgcmVzZXQgLS1oYXJkID4gLmFjdHVhbCAmJgorCWVjaG8gSEVBRCBpcyBub3cgYXQgJGhleCAkKGNvbW1pdF9tc2cpID4gLmV4cGVjdGVkICYmCisJdGVzdF9pMThuY21wIC5leHBlY3RlZCAuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0taGFyZCBtZXNzYWdlIChJU084ODU5LTEgbG9nb3V0cHV0ZW5jb2RpbmcpJyAnCisJaGV4PSQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiKSAmJgorCWdpdCAtYyAiaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyIgcmVzZXQgLS1oYXJkID4gLmFjdHVhbCAmJgorCWVjaG8gSEVBRCBpcyBub3cgYXQgJGhleCAkKGNvbW1pdF9tc2cgJHRlc3RfZW5jb2RpbmcpID4gLmV4cGVjdGVkICYmCisJdGVzdF9pMThuY21wIC5leHBlY3RlZCAuYWN0dWFsCisnCisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyBhIG5vbiBleGlzdGluZyByZXZpc2lvbiBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCBhYWFhYWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1taXhlZCBhYWFhYWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IGFhYWFhYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgYWFhYWFhICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1zb2Z0IHdpdGggdW5tZXJnZWQgaW5kZXggc2hvdWxkIGZhaWwnICcKKwl0b3VjaCAuZ2l0L01FUkdFX0hFQUQgJiYKKwllY2hvICIxMDA2NDQgNDRjNWI1ODg0NTUwYzE3NzU4NzM3ZWRjY2VkNDYzNDQ3YjkxZDQyYiAxCXVuIiB8CisJCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCBIRUFEICYmCisJcm0gLmdpdC9NRVJHRV9IRUFEICYmCisJZ2l0IHJtIC0tY2FjaGVkIC0tIHVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdnaXZpbmcgcGF0aHMgd2l0aCBvcHRpb25zIGRpZmZlcmVudCB0aGFuIC0tbWl4ZWQgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IC0tIGZpcnN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCAtLSBmaXJzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgSEVBRF4gLS0gZmlyc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReIC0tIGZpcnN0ICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2aW5nIHVucmVjb2duaXplZCBvcHRpb25zIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLW8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1taXhlZCAtLW90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWl4ZWQgLW8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IC0tb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IC1vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCAtLW90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCAtbyAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0cnlpbmcgdG8gZG8gcmVzZXQgLS1zb2Z0IHdpdGggcGVuZGluZyBtZXJnZSBzaG91bGQgZmFpbCcgJworCWdpdCBicmFuY2ggYnJhbmNoMSAmJgorCWdpdCBicmFuY2ggYnJhbmNoMiAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwllY2hvICIzcmQgbGluZSBpbiBicmFuY2gxIiA+PnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMSIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMiIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDIiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgJiYKKworCXByaW50ZiAiMXN0IGxpbmUgMm5kIGZpbGVcbjJuZCBsaW5lIDJuZCBmaWxlXG4zcmQgbGluZSIgPnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGUgY2hhbmdlIGluIGJyYW5jaDIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBicmFuY2gxIGJyYW5jaDIgJiYKKwljaGVja19jaGFuZ2VzICRoZWFkNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGRvIHJlc2V0IC0tc29mdCB3aXRoIHBlbmRpbmcgY2hlY2tvdXQgbWVyZ2Ugc2hvdWxkIGZhaWwnICcKKwlnaXQgYnJhbmNoIGJyYW5jaDMgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaDQgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gzICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMyIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibGluZSBpbiBicmFuY2gzIiAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDQgJiYKKwllY2hvICIzcmQgbGluZSBpbiBicmFuY2g0IiA+PnNlY29uZGZpbGUgJiYKKworCWdpdCBjaGVja291dCAtbSBicmFuY2gzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCAmJgorCisJcHJpbnRmICIxc3QgbGluZSAybmQgZmlsZVxuMm5kIGxpbmUgMm5kIGZpbGVcbjNyZCBsaW5lIiA+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInRoZSBsaW5lIGluIGJyYW5jaDMiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBicmFuY2gzIGJyYW5jaDQgJiYKKwljaGVja19jaGFuZ2VzICRoZWFkNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncmVzZXR0aW5nIHRvIEhFQUQgd2l0aCBubyBjaGFuZ2VzIHNob3VsZCBzdWNjZWVkIGFuZCBkbyBub3RoaW5nJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQljaGVja19jaGFuZ2VzICRoZWFkNSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCQljaGVja19jaGFuZ2VzICRoZWFkNSAmJgorCWdpdCByZXNldCAtLXNvZnQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgLS1taXhlZCAmJgorCQljaGVja19jaGFuZ2VzICRoZWFkNSAmJgorCWdpdCByZXNldCAtLW1peGVkIEhFQUQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgSEVBRCAmJgorCQljaGVja19jaGFuZ2VzICRoZWFkNQorJworCis+LmRpZmZfZXhwZWN0CitjYXQgPi5jYWNoZWRfZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvc2Vjb25kZmlsZSBiL3NlY29uZGZpbGUKK2luZGV4IDFiYmJhNzkuLjQ0YzViNTggMTAwNjQ0CistLS0gYS9zZWNvbmRmaWxlCisrKysgYi9zZWNvbmRmaWxlCitAQCAtMSArMSwyIEBACistMm5kIGZpbGUKKysxc3QgbGluZSAybmQgZmlsZQorKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK2NhdCA+LmNhdF9leHBlY3QgPDxFT0YKK3NlY29uZGZpbGU6Cisxc3QgbGluZSAybmQgZmlsZQorMm5kIGxpbmUgMm5kIGZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zb2Z0IHJlc2V0IG9ubHkgc2hvdWxkIHNob3cgY2hhbmdlcyBpbiBkaWZmIC0tY2FjaGVkJyAnCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEXiAmJgorCWNoZWNrX2NoYW5nZXMgZDFhNGJjM2FiY2U0ODI5NjI4YWUyZGNiMGQ2MGVmM2QxYTc4YjFjNCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBPUklHX0hFQUQpIiA9IFwKKwkJCSRoZWFkNQorJworCis+LmRpZmZfZXhwZWN0Cis+LmNhY2hlZF9leHBlY3QKK2NhdCA+LmNhdF9leHBlY3QgPDxFT0YKK3NlY29uZGZpbGU6Cisxc3QgbGluZSAybmQgZmlsZQorMm5kIGxpbmUgMm5kIGZpbGUKKzNyZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjaGFuZ2luZyBmaWxlcyBhbmQgcmVkbyB0aGUgbGFzdCBjb21taXQgc2hvdWxkIHN1Y2NlZWQnICcKKwllY2hvICIzcmQgbGluZSAybmQgZmlsZSIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtQyBPUklHX0hFQUQgJiYKKwloZWFkND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwljaGVja19jaGFuZ2VzICRoZWFkNCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBPUklHX0hFQUQpIiA9IFwKKwkJCSRoZWFkNQorJworCis+LmRpZmZfZXhwZWN0Cis+LmNhY2hlZF9leHBlY3QKK2NhdCA+LmNhdF9leHBlY3QgPDxFT0YKK2ZpcnN0OgorMXN0IGZpbGUKKzJuZCBsaW5lIDFzdCBmaWxlCitzZWNvbmQ6CisybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLS1oYXJkIHJlc2V0IHNob3VsZCBjaGFuZ2UgdGhlIGZpbGVzIGFuZCB1bmRvIGNvbW1pdHMgcGVybWFuZW50bHknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MiAmJgorCWNoZWNrX2NoYW5nZXMgZGRhZWZlMDBmMWRhMTY4NjQ1OTFjNjFmZGM3YWRiNWQ3Y2Q2Yjc0ZSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBPUklHX0hFQUQpIiA9IFwKKwkJCSRoZWFkNAorJworCis+LmRpZmZfZXhwZWN0CitjYXQgPi5jYWNoZWRfZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlyc3QgYi9maXJzdAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA4MjA2YzIyLi4wMDAwMDAwCistLS0gYS9maXJzdAorKysrIC9kZXYvbnVsbAorQEAgLTEsMiArMCwwIEBACistMXN0IGZpbGUKKy0ybmQgbGluZSAxc3QgZmlsZQorZGlmZiAtLWdpdCBhL3NlY29uZCBiL3NlY29uZAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAxYmJiYTc5Li4wMDAwMDAwCistLS0gYS9zZWNvbmQKKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy0ybmQgZmlsZQorZGlmZiAtLWdpdCBhL3NlY29uZGZpbGUgYi9zZWNvbmRmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNDRjNWI1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvc2Vjb25kZmlsZQorQEAgLTAsMCArMSwyIEBACisrMXN0IGxpbmUgMm5kIGZpbGUKKysybmQgbGluZSAybmQgZmlsZQorRU9GCitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdyZWRvaW5nIGNoYW5nZXMgYWRkaW5nIHRoZW0gd2l0aG91dCBjb21taXQgdGhlbSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCBybSBmaXJzdCAmJgorCWdpdCBtdiBzZWNvbmQgc2Vjb25kZmlsZSAmJgorCisJZWNobyAiMXN0IGxpbmUgMm5kIGZpbGUiID5zZWNvbmRmaWxlICYmCisJZWNobyAiMm5kIGxpbmUgMm5kIGZpbGUiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBhZGQgc2Vjb25kZmlsZSAmJgorCWNoZWNrX2NoYW5nZXMgZGRhZWZlMDBmMWRhMTY4NjQ1OTFjNjFmZGM3YWRiNWQ3Y2Q2Yjc0ZQorJworCitjYXQgPi5kaWZmX2V4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpcnN0IGIvZmlyc3QKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggODIwNmMyMi4uMDAwMDAwMAorLS0tIGEvZmlyc3QKKysrKyAvZGV2L251bGwKK0BAIC0xLDIgKzAsMCBAQAorLTFzdCBmaWxlCistMm5kIGxpbmUgMXN0IGZpbGUKK2RpZmYgLS1naXQgYS9zZWNvbmQgYi9zZWNvbmQKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMWJiYmE3OS4uMDAwMDAwMAorLS0tIGEvc2Vjb25kCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistMm5kIGZpbGUKK0VPRgorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWl4ZWQgcmVzZXQgdG8gSEVBRCBzaG91bGQgdW5hZGQgdGhlIGZpbGVzJyAnCisJZ2l0IHJlc2V0ICYmCisJY2hlY2tfY2hhbmdlcyBkZGFlZmUwMGYxZGExNjg2NDU5MWM2MWZkYzdhZGI1ZDdjZDZiNzRlICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIE9SSUdfSEVBRCkiID0gXAorCQkJZGRhZWZlMDBmMWRhMTY4NjQ1OTFjNjFmZGM3YWRiNWQ3Y2Q2Yjc0ZQorJworCis+LmRpZmZfZXhwZWN0Cis+LmNhY2hlZF9leHBlY3QKK2NhdCA+LmNhdF9leHBlY3QgPDxFT0YKK3NlY29uZGZpbGU6Cisxc3QgbGluZSAybmQgZmlsZQorMm5kIGxpbmUgMm5kIGZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkb2luZyB0aGUgbGFzdCB0d28gY29tbWl0cyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCBhZGQgc2Vjb25kZmlsZSAmJgorCWdpdCByZXNldCAtLWhhcmQgZGRhZWZlMDBmMWRhMTY4NjQ1OTFjNjFmZGM3YWRiNWQ3Y2Q2Yjc0ZSAmJgorCisJZ2l0IHJtIGZpcnN0ICYmCisJZ2l0IG12IHNlY29uZCBzZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAicmVtb3ZlIDFzdCBhbmQgcmVuYW1lIDJuZCIgJiYKKworCWVjaG8gIjFzdCBsaW5lIDJuZCBmaWxlIiA+c2Vjb25kZmlsZSAmJgorCWVjaG8gIjJuZCBsaW5lIDJuZCBmaWxlIiA+PnNlY29uZGZpbGUgJiYKKwkjICJnaXQgY29tbWl0IC1tIiB3b3VsZCBicmVhayBNaW5HVywgYXMgV2luZG93cyByZWZ1c2UgdG8gcGFzcworCSMgJHRlc3RfZW5jb2RpbmcgZW5jb2RlZCBwYXJhbWV0ZXIgdG8gZ2l0LgorCWNvbW1pdF9tc2cgJHRlc3RfZW5jb2RpbmcgfCBnaXQgLWMgImkxOG4uY29tbWl0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmciIGNvbW1pdCAtYSAtRiAtICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCiszcmQgbGluZSBpbiBicmFuY2gyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taGFyZCByZXNldCB0byBIRUFEIHNob3VsZCBjbGVhciBhIGZhaWxlZCBtZXJnZScgJworCWdpdCBicmFuY2ggYnJhbmNoMSAmJgorCWdpdCBicmFuY2ggYnJhbmNoMiAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwllY2hvICIzcmQgbGluZSBpbiBicmFuY2gxIiA+PnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMSIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMiIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDIiICYmCisJaGVhZDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIGJyYW5jaDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDMKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSctLWhhcmQgcmVzZXQgdG8gT1JJR19IRUFEIHNob3VsZCBjbGVhciBhIGZhc3QtZm9yd2FyZCBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwljaGVja19jaGFuZ2VzICRoZWFkNSAmJgorCisJZ2l0IHB1bGwgLiBicmFuY2gxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBPUklHX0hFQUQgJiYKKwljaGVja19jaGFuZ2VzICRoZWFkNSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgYnJhbmNoMSBicmFuY2gyICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK2luZGV4IGQwMDQ5MWYuLjdlZDZmZjggMTAwNjQ0CistLS0gYS9maWxlMQorKysrIGIvZmlsZTEKK0BAIC0xICsxIEBACistMQorKzUKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDBjZmJmMDguLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistMgorRU9GCitjYXQgPiBjYWNoZWRfZXhwZWN0IDw8IEVPRgorZGlmZiAtLWdpdCBhL2ZpbGU0IGIvZmlsZTQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iODYyNmM0CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlNAorQEAgLTAsMCArMSBAQAorKzQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLW1peGVkIDxwYXRocz4nICcKKwllY2hvIDEgPiBmaWxlMSAmJgorCWVjaG8gMiA+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZmlsZXMgJiYKKwlnaXQgcm0gZmlsZTIgJiYKKwllY2hvIDMgPiBmaWxlMyAmJgorCWVjaG8gNCA+IGZpbGU0ICYmCisJZWNobyA1ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUzIGZpbGU0ICYmCisJZ2l0IHJlc2V0IEhFQUQgLS0gZmlsZTEgZmlsZTIgZmlsZTMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisJZ2l0IGRpZmYgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBjYWNoZWRfZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlc2V0dGluZyB0aGUgaW5kZXggYXQgZ2l2ZSBwYXRocycgJworCisJbWtkaXIgc3ViICYmCisJPnN1Yi9maWxlMSAmJgorCT5zdWIvZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHN1Yi9maWxlMSBzdWIvZmlsZTIgJiYKKwlUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZ2l0IHJlc2V0IEhFQUQgc3ViL2ZpbGUyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCVU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvICIkVCIgJiYKKwllY2hvICIkVSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZSAiJFQiICYmCisJdGVzdCAiJFQiICE9ICIkVSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldHRpbmcgYW4gdW5tb2RpZmllZCBwYXRoIGlzIGEgbm8tb3AnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHJlc2V0IC0tIGZpbGUxICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFECisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1Vuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6CitNCWZpbGUyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1taXhlZCByZWZyZXNoZXMgdGhlIGluZGV4JyAnCisJZWNobyAxMjMgPj4gZmlsZTIgJiYKKwlnaXQgcmVzZXQgLS1taXhlZCBIRUFEID4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXR0aW5nIHNwZWNpZmljIHBhdGggdGhhdCBpcyB1bm1lcmdlZCcgJworCWdpdCBybSAtLWNhY2hlZCBmaWxlMiAmJgorCUYxPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUxKSAmJgorCUYyPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUyKSAmJgorCUYzPSQoZ2l0IHJldi1wYXJzZSBIRUFEOnNlY29uZGZpbGUpICYmCisJeworCQllY2hvICIxMDA2NDQgJEYxIDEJZmlsZTIiICYmCisJCWVjaG8gIjEwMDY0NCAkRjIgMglmaWxlMiIgJiYKKwkJZWNobyAiMTAwNjQ0ICRGMyAzCWZpbGUyIgorCX0gfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWdpdCBscy1maWxlcyAtdSAmJgorCWdpdCByZXNldCBIRUFEIGZpbGUyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRpb24gKDEpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwlnaXQgcmVzZXQgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgLS0gc2Vjb25kZmlsZSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkpIiAmJgorCXRlc3QgLWYgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBzZWNvbmRmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRpb24gKDIpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwlybSAtZiBzZWNvbmRmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IHNlY29uZGZpbGUgJiYKKwl0ZXN0IC1uICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5IC0tIHNlY29uZGZpbGUpIiAmJgorCXRlc3QgISAtZiBzZWNvbmRmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRpb24gKDMpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwlybSAtZiBzZWNvbmRmaWxlICYmCisJZ2l0IHJlc2V0IEhFQUQgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKKwl0ZXN0ICEgLWYgc2Vjb25kZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICg0KScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJcm0gLWYgc2Vjb25kZmlsZSAmJgorCWdpdCByZXNldCAtLSBzZWNvbmRmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkpIiAmJgorCXRlc3QgISAtZiBzZWNvbmRmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHdpdGggcGF0aHMgYWNjZXB0cyB0cmVlJyAnCisJIyBmb3Igc2ltcGxlciB0ZXN0cywgZHJvcCBsYXN0IGNvbW1pdCBjb250YWluaW5nIGFkZGVkIGZpbGVzCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCByZXNldCBIRUFEXl57dHJlZX0gLS0gLiAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIEhFQUReIC0tZXhpdC1jb2RlICYmCisJZ2l0IGRpZmYgSEVBRCAtLWV4aXQtY29kZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtTiBrZWVwcyByZW1vdmVkIGZpbGVzIGFzIGludGVudC10by1hZGQnICcKKwllY2hvIG5ldy1maWxlID5uZXctZmlsZSAmJgorCWdpdCBhZGQgbmV3LWZpbGUgJiYKKwlnaXQgcmVzZXQgLU4gSEVBRCAmJgorCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCBscy10cmVlICR0cmVlIG5ldy1maWxlID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJZWNobyBuZXctZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1peGVkIHNldHMgdXAgd29yayB0cmVlJyAnCisJZ2l0IGluaXQgbWl4ZWRfd29ya3RyZWUgJiYKKwkoCisJCWNkIG1peGVkX3dvcmt0cmVlICYmCisJCXRlc3RfY29tbWl0IGR1bW15CisJKSAmJgorCWdpdCAtLWdpdC1kaXI9bWl4ZWRfd29ya3RyZWUvLmdpdCAtLXdvcmstdHJlZT1taXhlZF93b3JrdHJlZSByZXNldCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDMtcmVzZXQtYmFyZS5zaCBiL3QvdDcxMDMtcmVzZXQtYmFyZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZmUzNmE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzEwMy1yZXNldC1iYXJlLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVzZXQgaW4gYSBiYXJlIHJlcG9zaXRvcnknCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbm9uLWJhcmUnICcKKwllY2hvIG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyB0d28gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciaGFyZCIgcmVzZXQgcmVxdWlyZXMgYSB3b3JrdHJlZScgJworCShjZCAuZ2l0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJtZXJnZSIgcmVzZXQgcmVxdWlyZXMgYSB3b3JrdHJlZScgJworCShjZCAuZ2l0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW1lcmdlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcia2VlcCIgcmVzZXQgcmVxdWlyZXMgYSB3b3JrdHJlZScgJworCShjZCAuZ2l0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJtaXhlZCIgcmVzZXQgaXMgb2snICcKKwkoY2QgLmdpdCAmJiBnaXQgcmVzZXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzb2Z0IiByZXNldCBpcyBvaycgJworCShjZCAuZ2l0ICYmIGdpdCByZXNldCAtLXNvZnQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhcmQgcmVzZXQgd29ya3Mgd2l0aCBHSVRfV09SS19UUkVFJyAnCisJbWtkaXIgd29ya3RyZWUgJiYKKwlHSVRfV09SS19UUkVFPSRQV0Qvd29ya3RyZWUgR0lUX0RJUj0kUFdELy5naXQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfY21wIGZpbGUgd29ya3RyZWUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUuZ2l0ICYmCisJY2QgYmFyZS5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImhhcmQiIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGJhcmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJtZXJnZSIgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYmFyZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW1lcmdlIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJrZWVwIiByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBiYXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibWl4ZWQiIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGJhcmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1taXhlZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic29mdCIgcmVzZXQgaXMgYWxsb3dlZCBpbiBiYXJlJyAnCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEXiAmJgorCXRlc3QgIiQoZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVzIHwgaGVhZCAtbiAxKSIgPSAib25lIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDQtcmVzZXQtaGFyZC5zaCBiL3QvdDcxMDQtcmVzZXQtaGFyZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNmZhYTA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzEwNC1yZXNldC1oYXJkLnNoCkBAIC0wLDAgKzEsNDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXNldCAtLWhhcmQgdW5tZXJnZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1rZGlyIGJlZm9yZSBsYXRlciAmJgorCT5iZWZvcmUvMSAmJgorCT5iZWZvcmUvMiAmJgorCT5oZWxsbyAmJgorCT5sYXRlci8zICYmCisJZ2l0IGFkZCBiZWZvcmUgaGVsbG8gbGF0ZXIgJiYKKwlnaXQgY29tbWl0IC1tIHdvcmxkICYmCisKKwlIPSQoZ2l0IHJldi1wYXJzZSA6aGVsbG8pICYmCisJZ2l0IHJtIC0tY2FjaGVkIGhlbGxvICYmCisJZWNobyAiMTAwNjQ0ICRIIDIJaGVsbG8iIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKworCXJtIC1mIGhlbGxvICYmCisJbWtkaXIgLXAgaGVsbG8gJiYKKwk+aGVsbG8vd29ybGQgJiYKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyAtbykiID0gaGVsbG8vd29ybGQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgc2hvdWxkIHJlc3RvcmUgdW5tZXJnZWQgb25lcycgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYmVmb3JlLzEgYmVmb3JlLzIgaGVsbG8gbGF0ZXIvMyAmJgorCXRlc3QgLWYgaGVsbG8KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgZGlkIG5vdCBjb3JydXB0IGluZGV4IG9yIGNhY2hlZC10cmVlJyAnCisKKwlUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYmVmb3JlIGhlbGxvIGxhdGVyICYmCisJVT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3QgIiRUIiA9ICIkVSIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMDUtcmVzZXQtcGF0Y2guc2ggYi90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjMmE2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVzZXQgLS1wYXRjaCcKKy4gLi9saWItcGF0Y2gtbW9kZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwJyAnCisJbWtkaXIgZGlyICYmCisJZWNobyBwYXJlbnQgPiBkaXIvZm9vICYmCisJZWNobyBkdW1teSA+IGJhciAmJgorCWdpdCBhZGQgZGlyICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGRpci9mb28gaGVhZCAmJgorCXNldF9hbmRfc2F2ZV9zdGF0ZSBiYXIgYmFyX3dvcmsgYmFyX2luZGV4ICYmCisJc2F2ZV9oZWFkCisnCisKKyMgbm90ZTogYmFyIHNvcnRzIGJlZm9yZSBmb28sIHNvIHRoZSBmaXJzdCAnbicgaXMgYWx3YXlzIHRvIHNraXAgJ2JhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzYXlpbmcgIm4iIGRvZXMgbm90aGluZycgJworCXNldF9hbmRfc2F2ZV9zdGF0ZSBkaXIvZm9vIHdvcmsgd29yayAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiBuIHwgZ2l0IHJlc2V0IC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wJyAnCisJdGVzdF93cml0ZV9saW5lcyBuIHkgfCBnaXQgcmVzZXQgLXAgPm91dHB1dCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl0ZXN0X2kxOG5ncmVwICJVbnN0YWdlIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgSEVBRF4nICcKKwl0ZXN0X3dyaXRlX2xpbmVzIG4geSB8IGdpdCByZXNldCAtcCBIRUFEXiA+b3V0cHV0ICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBwYXJlbnQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdGVzdF9pMThuZ3JlcCAiQXBwbHkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXNldCAtcCBIRUFEXl57dHJlZX0nICcKKwl0ZXN0X3dyaXRlX2xpbmVzIG4geSB8IGdpdCByZXNldCAtcCBIRUFEXl57dHJlZX0gPm91dHB1dCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgcGFyZW50ICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXRlc3RfaTE4bmdyZXAgIkFwcGx5IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgSEVBRF46ZGlyL2ZvbyAoYmxvYiBmYWlscyknICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIHdvcmsgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLXAgSEVBRF46ZGlyL2ZvbyAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBkaXIvZm9vICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXNldCAtcCBhYWFhYWFhYSAodW5rbm93biBmYWlscyknICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIHdvcmsgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLXAgYWFhYWFhYWEgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgZGlyL2ZvbyAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKworIyBUaGUgaWRlYSBpbiB0aGUgcmVzdCBpcyB0aGF0IGJhciBzb3J0cyBmaXJzdCwgc28gd2UgYWx3YXlzIHNheSAneScKKyMgZmlyc3QgYW5kIGlmIHRoZSBwYXRoIGxpbWl0ZXIgZmFpbHMgaXQnbGwgYXBwbHkgdG8gYmFyIGluc3RlYWQgb2YKKyMgZGlyL2Zvby4gIFRoZXJlJ3MgYWx3YXlzIGFuIGV4dHJhICduJyB0byByZWplY3QgZWRpdHMgdG8gZGlyL2ZvbyBpbgorIyB0aGUgZmFpbHVyZSBjYXNlIChhbmQgdGh1cyBnZXQgb3V0IG9mIHRoZSBsb29wKS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJdGVzdF93cml0ZV9saW5lcyB5IG4gfCBnaXQgcmVzZXQgLXAgZGlyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXNldCAtcCAtLSBmb28gKGluc2lkZSBkaXIpJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJdGVzdF93cml0ZV9saW5lcyB5IG4gfCAoY2QgZGlyICYmIGdpdCByZXNldCAtcCAtLSBmb28pICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXNldCAtcCBIRUFEXiAtLSBkaXInICcKKwl0ZXN0X3dyaXRlX2xpbmVzIHkgbiB8IGdpdCByZXNldCAtcCBIRUFEXiAtLSBkaXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIHBhcmVudCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdub25lIG9mIHRoaXMgbW92ZWQgSEVBRCcgJworCXZlcmlmeV9zYXZlZF9oZWFkCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTA2LXJlc2V0LXVuYm9ybi1icmFuY2guc2ggYi90L3Q3MTA2LXJlc2V0LXVuYm9ybi1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWNiODVjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDYtcmVzZXQtdW5ib3JuLWJyYW5jaC5zaApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IHNob3VsZCB3b3JrIG9uIHVuYm9ybiBicmFuY2gnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGEgPmEgJiYKKwllY2hvIGIgPmIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQnICcKKwlnaXQgYWRkIGEgYiAmJgorCWdpdCByZXNldCAmJgorCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IEhFQUQnICcKKwlybSAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhIGIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAkZmlsZScgJworCXJtIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgYiAmJgorCWdpdCByZXNldCBhICYmCisKKwllY2hvIGIgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3Jlc2V0IC1wJyAnCisJcm0gLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCWVjaG8geSA+eWVzICYmCisJZ2l0IHJlc2V0IC1wIDx5ZXMgPm91dHB1dCAmJgorCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiVW5zdGFnZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tc29mdCBpcyBhIG5vLW9wJyAnCisJcm0gLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCByZXNldCAtLXNvZnQgJiYKKworCWVjaG8gYSA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0taGFyZCcgJworCXJtIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImVjaG8gYSA+YSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzEwNy1yZXNldC1wYXRoc3BlYy1maWxlLnNoIGIvdC90NzEwNy1yZXNldC1wYXRoc3BlYy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhZDNhOWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTA3LXJlc2V0LXBhdGhzcGVjLWZpbGUuc2gKQEAgLTAsMCArMSwxNzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfdGljaworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIEEgPmZpbGVBLnQgJiYKKwllY2hvIEIgPmZpbGVCLnQgJiYKKwllY2hvIEMgPmZpbGVDLnQgJiYKKwllY2hvIEQgPmZpbGVELnQgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC0taW5jbHVkZSAuIC1tICJDb21taXQiICYmCisJZ2l0IHRhZyBjaGVja3BvaW50CisnCisKK3Jlc3RvcmVfY2hlY2twb2ludCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBjaGVja3BvaW50Cit9CisKK3ZlcmlmeV9leHBlY3QgKCkgeworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS0gZmlsZUEudCBmaWxlQi50IGZpbGVDLnQgZmlsZUQudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIHN0ZGluJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCAmJgorCWVjaG8gZmlsZUEudCB8IGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgZnJvbSBmaWxlJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCAmJgorCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCWdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0ICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWdpdCBybSBmaWxlQS50IGZpbGVCLnQgJiYKKwlwcmludGYgImZpbGVBLnRcMGZpbGVCLnRcMCIgfCBnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXBhdGhzcGVjLWZpbGUtbnVsICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCSBEIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xGIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWdpdCBybSBmaWxlQS50IGZpbGVCLnQgJiYKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnRcbiIgfCBnaXQgcmVzZXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBEIGZpbGVBLnQKKwkgRCBmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB0cmFpbGluZyBkZWxpbWl0ZXInICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWdpdCBybSBmaWxlQS50IGZpbGVCLnQgJiYKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnQiIHwgZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgRCBmaWxlQS50CisJIEQgZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1JMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlnaXQgcm0gZmlsZUEudCBmaWxlQi50ICYmCisJcHJpbnRmICJmaWxlQS50XHJcbmZpbGVCLnRcclxuIiB8IGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIEQgZmlsZUEudAorCSBEIGZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcycgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJY2F0ID5saXN0IDw8LVxFT0YgJiYKKwkiZmlsZVwxMDEudCIKKwlFT0YKKworCWdpdCBybSBmaWxlQS50ICYmCisJZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgRCBmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMgbm90IGNvbXBhdGlibGUgd2l0aCAtLXBhdGhzcGVjLWZpbGUtbnVsJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmxpc3QgPDwtXEVPRiAmJgorCSJmaWxlXDEwMS50IgorCUVPRgorCisJIyBOb3RlOiAiZ2l0IHJlc2V0IiBoYXMgbm90IHlldCBsZWFybmVkIHRvIGZhaWwgb24gd3JvbmcgcGF0aHNwZWNzCisJZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLS1wYXRoc3BlYy1maWxlLW51bCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBEIGZpbGVBLnQKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCB2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgdG91Y2hlcyB3aGF0IHdhcyBsaXN0ZWQnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWdpdCBybSBmaWxlQS50IGZpbGVCLnQgZmlsZUMudCBmaWxlRC50ICYmCisJcHJpbnRmICJmaWxlQi50XG5maWxlQy50XG4iIHwgZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlEICBmaWxlQS50CisJIEQgZmlsZUIudAorCSBEIGZpbGVDLnQKKwlEICBmaWxlRC50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBjb25kaXRpb25zJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisJZ2l0IHJtIGZpbGVBLnQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0Y2ggMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXBhdGNoIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tIGZpbGVBLnQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZyb20tZmlsZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXRoc3BlYyBhcmd1bWVudHMiIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tcGF0aHNwZWMtZmlsZS1udWwgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgImZhdGFsOiBDYW5ub3QgZG8gc29mdCByZXNldCB3aXRoIHBhdGhzIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgImZhdGFsOiBDYW5ub3QgZG8gaGFyZCByZXNldCB3aXRoIHBhdGhzIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTEwLXJlc2V0LW1lcmdlLnNoIGIvdC90NzExMC1yZXNldC1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODJhMDdhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzExMC1yZXNldC1tZXJnZS5zaApAQCAtMCwwICsxLDI5NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBDaHJpc3RpYW4gQ291ZGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGZvciAiZ2l0IHJlc2V0IiB3aXRoICItLW1lcmdlIiBhbmQgIi0ta2VlcCIgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworICAgIGZvciBpIGluIDEgMiAzOyBkbyBlY2hvIGxpbmUgJGk7IGRvbmUgPmZpbGUxICYmCisgICAgY2F0IGZpbGUxID5maWxlMiAmJgorICAgIGdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKyAgICBnaXQgdGFnIGluaXRpYWwgJiYKKyAgICBlY2hvIGxpbmUgNCA+PmZpbGUxICYmCisgICAgY2F0IGZpbGUxID5maWxlMiAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLW0gImFkZCBsaW5lIDQgdG8gZmlsZTEiIGZpbGUxICYmCisgICAgZ2l0IHRhZyBzZWNvbmQKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLW1lcmdlICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEQgICAgIEQgICAgRCAgICAgLS1tZXJnZSAgQyAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGlzIG9rIHdpdGggY2hhbmdlcyBpbiBmaWxlIGl0IGRvZXMgbm90IHRvdWNoJyAnCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gJiYKKyAgICAhIGdyZXAgNCBmaWxlMSAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIGluaXRpYWwpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGlzIG9rIHdoZW4gc3dpdGNoaW5nIGJhY2snICcKKyAgICBnaXQgcmVzZXQgLS1tZXJnZSBzZWNvbmQgJiYKKyAgICBncmVwIDQgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQyAgICAgICBDICAgICBDICAgIEQgICAgIC0ta2VlcCAgIEQgICAgICAgRCAgICAgRAorIyBmaWxlMjogICAgIEMgICAgICAgRCAgICAgRCAgICBEICAgICAtLWtlZXAgICBDICAgICAgIEQgICAgIEQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0ta2VlcCBpcyBvayB3aXRoIGNoYW5nZXMgaW4gZmlsZSBpdCBkb2VzIG5vdCB0b3VjaCcgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgY2F0IGZpbGUxID5maWxlMiAmJgorICAgIGdpdCByZXNldCAtLWtlZXAgSEVBRF4gJiYKKyAgICAhIGdyZXAgNCBmaWxlMSAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIGluaXRpYWwpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAgaXMgb2sgd2hlbiBzd2l0Y2hpbmcgYmFjaycgJworICAgIGdpdCByZXNldCAtLWtlZXAgc2Vjb25kICYmCisgICAgZ3JlcCA0IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEIgICAgICAgQiAgICAgQyAgICBEICAgICAtLW1lcmdlICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEQgICAgIEQgICAgRCAgICAgLS1tZXJnZSAgQyAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGRpc2NhcmRzIGNoYW5nZXMgYWRkZWQgdG8gaW5kZXggKDEpJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBjYXQgZmlsZTEgPmZpbGUyICYmCisgICAgZWNobyAibGluZSA1IiA+PiBmaWxlMSAmJgorICAgIGdpdCBhZGQgZmlsZTEgJiYKKyAgICBnaXQgcmVzZXQgLS1tZXJnZSBIRUFEXiAmJgorICAgICEgZ3JlcCA0IGZpbGUxICYmCisgICAgISBncmVwIDUgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayBhZ2FpbiB3aGVuIHN3aXRjaGluZyBiYWNrICgxKScgJworICAgIGdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTIgJiYKKyAgICBnaXQgYWRkIGZpbGUyICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2Ugc2Vjb25kICYmCisgICAgISBncmVwIDQgZmlsZTIgJiYKKyAgICAhIGdyZXAgNSBmaWxlMSAmJgorICAgIGdyZXAgNCBmaWxlMSAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBCICAgICAgIEIgICAgIEMgICAgRCAgICAgLS1rZWVwICAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAgZmFpbHMgd2l0aCBjaGFuZ2VzIGluIGluZGV4IGluIGZpbGVzIGl0IHRvdWNoZXMnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTEgJiYKKyAgICBnaXQgYWRkIGZpbGUxICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCBIRUFEXgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQyAgICAgICBDICAgICBDICAgIEQgICAgIC0tbWVyZ2UgIEQgICAgICAgRCAgICAgRAorIyBmaWxlMjogICAgIEMgICAgICAgQyAgICAgRCAgICBEICAgICAtLW1lcmdlICBEICAgICAgIEQgICAgIEQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgZGlzY2FyZHMgY2hhbmdlcyBhZGRlZCB0byBpbmRleCAoMiknICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGVjaG8gImxpbmUgNCIgPj4gZmlsZTIgJiYKKyAgICBnaXQgYWRkIGZpbGUyICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gJiYKKyAgICAhIGdyZXAgNCBmaWxlMiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIGluaXRpYWwpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGlzIG9rIGFnYWluIHdoZW4gc3dpdGNoaW5nIGJhY2sgKDIpJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2Ugc2Vjb25kICYmCisgICAgISBncmVwIDQgZmlsZTIgJiYKKyAgICBncmVwIDQgZmlsZTEgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQyAgICAgICBDICAgICBDICAgIEQgICAgIC0ta2VlcCAgIEQgICAgICAgRCAgICAgRAorIyBmaWxlMjogICAgIEMgICAgICAgQyAgICAgRCAgICBEICAgICAtLWtlZXAgICBDICAgICAgIEQgICAgIEQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0ta2VlcCBrZWVwcyBjaGFuZ2VzIGl0IGRvZXMgbm90IHRvdWNoJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDQiID4+IGZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMiAmJgorICAgIGdpdCByZXNldCAtLWtlZXAgSEVBRF4gJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1rZWVwIGtlZXBzIGNoYW5nZXMgd2hlbiBzd2l0Y2hpbmcgYmFjaycgJworICAgIGdpdCByZXNldCAtLWtlZXAgc2Vjb25kICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgZ3JlcCA0IGZpbGUxICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEEgICAgICAgQiAgICAgQiAgICBDICAgICAtLW1lcmdlICAoZGlzYWxsb3dlZCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgZmFpbHMgd2l0aCBjaGFuZ2VzIGluIGZpbGUgaXQgdG91Y2hlcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZWNobyAibGluZSA1IiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLW0gImFkZCBsaW5lIDUiIGZpbGUxICYmCisgICAgc2VkIC1lICJzL2xpbmUgMS9jaGFuZ2VkIGxpbmUgMS8iIDxmaWxlMSA+ZmlsZTMgJiYKKyAgICBtdiBmaWxlMyBmaWxlMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW1lcmdlIEhFQUReIDI+ZXJyLmxvZyAmJgorICAgIGdyZXAgZmlsZTEgZXJyLmxvZyB8IGdyZXAgIm5vdCB1cHRvZGF0ZSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEEgICAgICAgQiAgICAgQiAgICBDICAgICAtLWtlZXAgICAoZGlzYWxsb3dlZCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0ta2VlcCBmYWlscyB3aXRoIGNoYW5nZXMgaW4gZmlsZSBpdCB0b3VjaGVzJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUxICYmCisgICAgdGVzdF90aWNrICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgNSIgZmlsZTEgJiYKKyAgICBzZWQgLWUgInMvbGluZSAxL2NoYW5nZWQgbGluZSAxLyIgPGZpbGUxID5maWxlMyAmJgorICAgIG12IGZpbGUzIGZpbGUxICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCBIRUFEXiAyPmVyci5sb2cgJiYKKyAgICBncmVwIGZpbGUxIGVyci5sb2cgfCBncmVwICJub3QgdXB0b2RhdGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDMgZGlmZmVyZW50IGJyYW5jaGVzJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDMgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorICAgIGVjaG8gImxpbmUgNSBpbiBicmFuY2gxIiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gxIiAmJgorICAgIGdpdCBjaGVja291dCBicmFuY2gyICYmCisgICAgZWNobyAibGluZSA1IGluIGJyYW5jaDIiID4+IGZpbGUxICYmCisgICAgdGVzdF90aWNrICYmCisgICAgZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDIiICYmCisgICAgZ2l0IHRhZyB0aGlyZCAmJgorICAgIGdpdCBjaGVja291dCBicmFuY2gzICYmCisgICAgZWNobyBhIG5ldyBmaWxlID5maWxlMyAmJgorICAgIHJtIC1mIGZpbGUxICYmCisgICAgZ2l0IGFkZCBmaWxlMyAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gzIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgWCAgICAgICBVICAgICBCICAgIEMgICAgIC0tbWVyZ2UgIEMgICAgICAgQyAgICAgQwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInJlc2V0IC0tbWVyZ2UgSEVBRF4iIGlzIG9rIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCBjaGVja291dCB0aGlyZCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gxICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYpIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgWCAgICAgICBVICAgICBCICAgIEMgICAgIC0ta2VlcCAgIChkaXNhbGxvd2VkKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnInJlc2V0IC0ta2VlcCBIRUFEXiIgZmFpbHMgd2l0aCBwZW5kaW5nIG1lcmdlJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCB0aGlyZCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gxICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCBIRUFEXiAyPmVyci5sb2cgJiYKKyAgICB0ZXN0X2kxOG5ncmVwICJtaWRkbGUgb2YgYSBtZXJnZSIgZXJyLmxvZworJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgWCAgICAgICBVICAgICBCICAgIEIgICAgIC0tbWVyZ2UgIEIgICAgICAgQiAgICAgQgordGVzdF9leHBlY3Rfc3VjY2VzcyAnInJlc2V0IC0tbWVyZ2UgSEVBRCIgaXMgb2sgd2l0aCBwZW5kaW5nIG1lcmdlJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCB0aGlyZCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gxICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRCAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHRoaXJkKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBCICAgICAtLWtlZXAgICAoZGlzYWxsb3dlZCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLWtlZXAgSEVBRCIgZmFpbHMgd2l0aCBwZW5kaW5nIG1lcmdlJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCB0aGlyZCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gxICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCBIRUFEIDI+ZXJyLmxvZyAmJgorICAgIHRlc3RfaTE4bmdyZXAgIm1pZGRsZSBvZiBhIG1lcmdlIiBlcnIubG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWVyZ2UgaXMgb2sgd2l0aCBhZGRlZC9kZWxldGVkIG1lcmdlJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCB0aGlyZCAmJgorICAgIHJtIC1mIGZpbGUyICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaDMgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTIgJiYKKyAgICB0ZXN0IC1mIGZpbGUzICYmCisgICAgZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmlsZTMgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSBicmFuY2gzIGZpbGUzICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRCAmJgorICAgICEgdGVzdCAtZiBmaWxlMyAmJgorICAgICEgdGVzdCAtZiBmaWxlMiAmJgorICAgIGdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0ta2VlcCBmYWlscyB3aXRoIGFkZGVkL2RlbGV0ZWQgbWVyZ2UnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHRoaXJkICYmCisgICAgcm0gLWYgZmlsZTIgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMyAmJgorICAgICEgdGVzdCAtZiBmaWxlMiAmJgorICAgIHRlc3QgLWYgZmlsZTMgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSBmaWxlMyAmJgorICAgIGdpdCBkaWZmIC0tZXhpdC1jb2RlIGJyYW5jaDMgZmlsZTMgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1rZWVwIEhFQUQgMj5lcnIubG9nICYmCisgICAgdGVzdF9pMThuZ3JlcCAibWlkZGxlIG9mIGEgbWVyZ2UiIGVyci5sb2cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTExLXJlc2V0LXRhYmxlLnNoIGIvdC90NzExMS1yZXNldC10YWJsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZTQyMWFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzExMS1yZXNldC10YWJsZS5zaApAQCAtMCwwICsxLDEyMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBDaHJpc3RpYW4gQ291ZGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHRvIGNoZWNrIHRoYXQgInJlc2V0IiBvcHRpb25zIGZvbGxvdyBhIGtub3duIHRhYmxlJworCisuIC4vdGVzdC1saWIuc2gKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBpbml0aWFsIGNvbW1pdHMnICcKKyAgICB0ZXN0X2NvbW1pdCBFIGZpbGUxICYmCisgICAgdGVzdF9jb21taXQgRCBmaWxlMSAmJgorICAgIHRlc3RfY29tbWl0IEMgZmlsZTEKKycKKword2hpbGUgcmVhZCBXMSBJMSBIMSBUIG9wdCBXMiBJMiBIMgorZG8KKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjazogJFcxICRJMSAkSDEgJFQgLS0kb3B0ICRXMiAkSTIgJEgyIiAnCisJZ2l0IHJlc2V0IC0taGFyZCBDICYmCisJaWYgdGVzdCAiJEkxIiAhPSAiJEgxIgorCXRoZW4KKwkgICAgZWNobyAiJEkxIiA+ZmlsZTEgJiYKKwkgICAgZ2l0IGFkZCBmaWxlMQorCWZpICYmCisJaWYgdGVzdCAiJFcxIiAhPSAiJEkxIgorCXRoZW4KKwkgICAgZWNobyAiJFcxIiA+ZmlsZTEKKwlmaSAmJgorCWlmIHRlc3QgIiRXMiIgIT0gIlhYWFhYIgorCXRoZW4KKwkgICAgZ2l0IHJlc2V0IC0tJG9wdCAkVCAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRXMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tIGZpbGUxICYmCisJICAgIHRlc3QgIiQoY2F0IGZpbGUxKSIgPSAiJEkyIiAmJgorCSAgICBnaXQgY2hlY2tvdXQgLWYgSEVBRCAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRIMiIKKwllbHNlCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLSRvcHQgJFQKKwlmaQorICAgICcKK2RvbmUgPDxcRU9GCitBIEIgQyBEIHNvZnQgICBBIEIgRAorQSBCIEMgRCBtaXhlZCAgQSBEIEQKK0EgQiBDIEQgaGFyZCAgIEQgRCBECitBIEIgQyBEIG1lcmdlICBYWFhYWAorQSBCIEMgRCBrZWVwICAgWFhYWFgKK0EgQiBDIEMgc29mdCAgIEEgQiBDCitBIEIgQyBDIG1peGVkICBBIEMgQworQSBCIEMgQyBoYXJkICAgQyBDIEMKK0EgQiBDIEMgbWVyZ2UgIFhYWFhYCitBIEIgQyBDIGtlZXAgICBBIEMgQworQiBCIEMgRCBzb2Z0ICAgQiBCIEQKK0IgQiBDIEQgbWl4ZWQgIEIgRCBECitCIEIgQyBEIGhhcmQgICBEIEQgRAorQiBCIEMgRCBtZXJnZSAgRCBEIEQKK0IgQiBDIEQga2VlcCAgIFhYWFhYCitCIEIgQyBDIHNvZnQgICBCIEIgQworQiBCIEMgQyBtaXhlZCAgQiBDIEMKK0IgQiBDIEMgaGFyZCAgIEMgQyBDCitCIEIgQyBDIG1lcmdlICBDIEMgQworQiBCIEMgQyBrZWVwICAgQiBDIEMKK0IgQyBDIEQgc29mdCAgIEIgQyBECitCIEMgQyBEIG1peGVkICBCIEQgRAorQiBDIEMgRCBoYXJkICAgRCBEIEQKK0IgQyBDIEQgbWVyZ2UgIFhYWFhYCitCIEMgQyBEIGtlZXAgICBYWFhYWAorQiBDIEMgQyBzb2Z0ICAgQiBDIEMKK0IgQyBDIEMgbWl4ZWQgIEIgQyBDCitCIEMgQyBDIGhhcmQgICBDIEMgQworQiBDIEMgQyBtZXJnZSAgQiBDIEMKK0IgQyBDIEMga2VlcCAgIEIgQyBDCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dGluZyB1cCBicmFuY2hlcyB0byB0ZXN0IHdpdGggdW5tZXJnZWQgZW50cmllcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgQyAmJgorICAgIGdpdCBicmFuY2ggYnJhbmNoMSAmJgorICAgIGdpdCBicmFuY2ggYnJhbmNoMiAmJgorICAgIGdpdCBjaGVja291dCBicmFuY2gxICYmCisgICAgdGVzdF9jb21taXQgQjEgZmlsZTEgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorICAgIHRlc3RfY29tbWl0IEIgZmlsZTEKKycKKword2hpbGUgcmVhZCBXMSBJMSBIMSBUIG9wdCBXMiBJMiBIMgorZG8KKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjazogJFcxICRJMSAkSDEgJFQgLS0kb3B0ICRXMiAkSTIgJEgyIiAnCisJZ2l0IHJlc2V0IC0taGFyZCBCICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaDEgJiYKKwljYXQgZmlsZTEgPlhfZmlsZTEgJiYKKwlpZiB0ZXN0ICIkVzIiICE9ICJYWFhYWCIKKwl0aGVuCisJICAgIGdpdCByZXNldCAtLSRvcHQgJFQgJiYKKwkgICAgaWYgdGVzdCAiJFcyIiA9ICJYIgorCSAgICB0aGVuCisJCXRlc3RfY21wIGZpbGUxIFhfZmlsZTEKKwkgICAgZWxzZQorCQl0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRXMiIKKwkgICAgZmkgJiYKKwkgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tIGZpbGUxICYmCisJICAgIHRlc3QgIiQoY2F0IGZpbGUxKSIgPSAiJEkyIiAmJgorCSAgICBnaXQgY2hlY2tvdXQgLWYgSEVBRCAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRIMiIKKwllbHNlCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLSRvcHQgJFQKKwlmaQorICAgICcKK2RvbmUgPDxcRU9GCitYIFUgQiBDIHNvZnQgICBYWFhYWAorWCBVIEIgQyBtaXhlZCAgWCBDIEMKK1ggVSBCIEMgaGFyZCAgIEMgQyBDCitYIFUgQiBDIG1lcmdlICBDIEMgQworWCBVIEIgQyBrZWVwICAgWFhYWFgKK1ggVSBCIEIgc29mdCAgIFhYWFhYCitYIFUgQiBCIG1peGVkICBYIEIgQgorWCBVIEIgQiBoYXJkICAgQiBCIEIKK1ggVSBCIEIgbWVyZ2UgIEIgQiBCCitYIFUgQiBCIGtlZXAgICBYWFhYWAorRU9GCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMi1yZXNldC1zdWJtb2R1bGUuc2ggYi90L3Q3MTEyLXJlc2V0LXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMWNiOWZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzExMi1yZXNldC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc2V0IGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK0tOT1dOX0ZBSUxVUkVfU1VCTU9EVUxFX1JFQ1VSU0lWRV9ORVNURUQ9MQorS05PV05fRkFJTFVSRV9ESVJFQ1RPUllfU1VCTU9EVUxFX0NPTkZMSUNUUz0xCitLTk9XTl9GQUlMVVJFX1NVQk1PRFVMRV9PVkVSV1JJVEVfSUdOT1JFRF9VTlRSQUNLRUQ9MQorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2hfcmVjdXJzaW5nX3dpdGhfYXJncyAicmVzZXQgLS1rZWVwIgorCit0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoX3JlY3Vyc2luZ193aXRoX2FyZ3MgInJlc2V0IC0taGFyZCIKKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXQgcmVzZXQgLS1rZWVwIgorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCByZXNldCAtLW1lcmdlIgorCit0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoICJnaXQgcmVzZXQgLS1oYXJkIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMTMtcG9zdC1pbmRleC1jaGFuZ2UtaG9vay5zaCBiL3QvdDcxMTMtcG9zdC1pbmRleC1jaGFuZ2UtaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDExYWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzExMy1wb3N0LWluZGV4LWNoYW5nZS1ob29rLnNoCkBAIC0wLDAgKzEsMTQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncG9zdCBpbmRleCBjaGFuZ2UgaG9vaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgLXAgZGlyMSAmJgorCXRvdWNoIGRpcjEvZmlsZTEudHh0ICYmCisJZWNobyB0ZXN0aW5nID5kaXIxL2ZpbGUyLnR4dCAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc3RhdHVzLCBhZGQsIGNvbW1pdCwgb3RoZXJzIHRyaWdnZXIgaG9vayB3aXRob3V0IGZsYWdzIHNldCcgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wb3N0LWluZGV4LWNoYW5nZSA8PC1cRU9GICYmCisJCWlmIHRlc3QgIiQxIiAtZXEgMTsgdGhlbgorCQkJZWNobyAiSW52YWxpZCBjb21iaW5hdGlvbiBvZiBmbGFncyBwYXNzZWQgdG8gaG9vazsgdXBkYXRlZF93b3JrZGlyIGlzIHNldC4iID50ZXN0ZmFpbHVyZQorCQkJZXhpdCAxCisJCWZpCisJCWlmIHRlc3QgIiQyIiAtZXEgMTsgdGhlbgorCQkJZWNobyAiSW52YWxpZCBjb21iaW5hdGlvbiBvZiBmbGFncyBwYXNzZWQgdG8gaG9vazsgdXBkYXRlZF9za2lwd29ya3RyZWUgaXMgc2V0LiIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDEKKwkJZmkKKwkJaWYgdGVzdCAtZiAiLmdpdC9pbmRleC5sb2NrIjsgdGhlbgorCQkJZWNobyAiLmdpdC9pbmRleC5sb2NrIGV4aXN0cyIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDMKKwkJZmkKKwkJaWYgISB0ZXN0IC1mICIuZ2l0L2luZGV4IjsgdGhlbgorCQkJZWNobyAiLmdpdC9pbmRleCBkb2VzIG5vdCBleGlzdCIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDMKKwkJZmkKKwkJZWNobyAic3VjY2VzcyIgPnRlc3RzdWNjZXNzCisJRU9GCisJbWtkaXIgLXAgZGlyMiAmJgorCXRvdWNoIGRpcjIvZmlsZTEudHh0ICYmCisJdG91Y2ggZGlyMi9maWxlMi50eHQgJiYKKwk6IGZvcmNlIGluZGV4IHRvIGJlIGRpcnR5ICYmCisJdGVzdC10b29sIGNobXRpbWUgKzYwIGRpcjEvZmlsZTEudHh0ICYmCisJZ2l0IHN0YXR1cyAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0c3VjY2VzcyAmJiBybSAtZiB0ZXN0c3VjY2VzcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlc3RmYWlsdXJlICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwlnaXQgY2hlY2tvdXQgLS0gZGlyMS9maWxlMS50eHQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0c3VjY2VzcyAmJiBybSAtZiB0ZXN0c3VjY2VzcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlc3RmYWlsdXJlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdHN1Y2Nlc3MgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXN0ZmFpbHVyZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNoZWNrb3V0IGFuZCByZXNldCB0cmlnZ2VyIHRoZSBob29rJyAnCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcG9zdC1pbmRleC1jaGFuZ2UgPDwtXEVPRiAmJgorCQlpZiB0ZXN0ICIkMSIgLWVxIDEgJiYgdGVzdCAiJDIiIC1lcSAxOyB0aGVuCisJCQllY2hvICJJbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGZsYWdzIHBhc3NlZCB0byBob29rOyB1cGRhdGVkX3dvcmtkaXIgYW5kIHVwZGF0ZWRfc2tpcHdvcmt0cmVlIGFyZSBib3RoIHNldC4iID50ZXN0ZmFpbHVyZQorCQkJZXhpdCAxCisJCWZpCisJCWlmIHRlc3QgIiQxIiAtZXEgMCAmJiB0ZXN0ICIkMiIgLWVxIDA7IHRoZW4KKwkJCWVjaG8gIkludmFsaWQgY29tYmluYXRpb24gb2YgZmxhZ3MgcGFzc2VkIHRvIGhvb2s7IG5laXRoZXIgdXBkYXRlZF93b3JrZGlyIG9yIHVwZGF0ZWRfc2tpcHdvcmt0cmVlIGFyZSBzZXQuIiA+dGVzdGZhaWx1cmUKKwkJCWV4aXQgMgorCQlmaQorCQlpZiB0ZXN0ICIkMSIgLWVxIDE7IHRoZW4KKwkJCWlmIHRlc3QgLWYgIi5naXQvaW5kZXgubG9jayI7IHRoZW4KKwkJCQllY2hvICJ1cGRhdGVkX3dvcmtkaXIgc2V0IGJ1dCAuZ2l0L2luZGV4LmxvY2sgZXhpc3RzIiA+dGVzdGZhaWx1cmUKKwkJCQlleGl0IDMKKwkJCWZpCisJCQlpZiAhIHRlc3QgLWYgIi5naXQvaW5kZXgiOyB0aGVuCisJCQkJZWNobyAidXBkYXRlZF93b3JrZGlyIHNldCBidXQgLmdpdC9pbmRleCBkb2VzIG5vdCBleGlzdCIgPnRlc3RmYWlsdXJlCisJCQkJZXhpdCAzCisJCQlmaQorCQllbHNlCisJCQllY2hvICJ1cGRhdGVfd29ya2RpciBzaG91bGQgYmUgc2V0IGZvciBjaGVja291dCIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDQKKwkJZmkKKwkJZWNobyAic3VjY2VzcyIgPnRlc3RzdWNjZXNzCisJRU9GCisJOiBmb3JjZSBpbmRleCB0byBiZSBkaXJ0eSAmJgorCXRlc3QtdG9vbCBjaG10aW1lICs2MCBkaXIxL2ZpbGUxLnR4dCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0c3VjY2VzcyAmJiBybSAtZiB0ZXN0c3VjY2VzcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlc3RmYWlsdXJlICYmCisJdGVzdC10b29sIGNobXRpbWUgKzYwIGRpcjEvZmlsZTEudHh0ICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0c3VjY2VzcyAmJiBybSAtZiB0ZXN0c3VjY2VzcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlc3RmYWlsdXJlICYmCisJdGVzdC10b29sIGNobXRpbWUgKzYwIGRpcjEvZmlsZTEudHh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwlnaXQgY2hlY2tvdXQgLUIgdGVzdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZXNldCAtLW1peGVkIGFuZCB1cGRhdGUtaW5kZXggdHJpZ2dlcnMgdGhlIGhvb2snICcKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wb3N0LWluZGV4LWNoYW5nZSA8PC1cRU9GICYmCisJCWlmIHRlc3QgIiQxIiAtZXEgMSAmJiB0ZXN0ICIkMiIgLWVxIDE7IHRoZW4KKwkJCWVjaG8gIkludmFsaWQgY29tYmluYXRpb24gb2YgZmxhZ3MgcGFzc2VkIHRvIGhvb2s7IHVwZGF0ZWRfd29ya2RpciBhbmQgdXBkYXRlZF9za2lwd29ya3RyZWUgYXJlIGJvdGggc2V0LiIgPnRlc3RmYWlsdXJlCisJCQlleGl0IDEKKwkJZmkKKwkJaWYgdGVzdCAiJDEiIC1lcSAwICYmIHRlc3QgIiQyIiAtZXEgMDsgdGhlbgorCQkJZWNobyAiSW52YWxpZCBjb21iaW5hdGlvbiBvZiBmbGFncyBwYXNzZWQgdG8gaG9vazsgbmVpdGhlciB1cGRhdGVkX3dvcmtkaXIgb3IgdXBkYXRlZF9za2lwd29ya3RyZWUgYXJlIHNldC4iID50ZXN0ZmFpbHVyZQorCQkJZXhpdCAyCisJCWZpCisJCWlmIHRlc3QgIiQyIiAtZXEgMTsgdGhlbgorCQkJaWYgdGVzdCAtZiAiLmdpdC9pbmRleC5sb2NrIjsgdGhlbgorCQkJCWVjaG8gInVwZGF0ZWRfc2tpcHdvcmt0cmVlIHNldCBidXQgLmdpdC9pbmRleC5sb2NrIGV4aXN0cyIgPnRlc3RmYWlsdXJlCisJCQkJZXhpdCAzCisJCQlmaQorCQkJaWYgISB0ZXN0IC1mICIuZ2l0L2luZGV4IjsgdGhlbgorCQkJCWVjaG8gInVwZGF0ZWRfc2tpcHdvcmt0cmVlIHNldCBidXQgLmdpdC9pbmRleCBkb2VzIG5vdCBleGlzdCIgPnRlc3RmYWlsdXJlCisJCQkJZXhpdCAzCisJCQlmaQorCQllbHNlCisJCQllY2hvICJ1cGRhdGVkX3NraXB3b3JrdHJlZSBzaG91bGQgYmUgc2V0IGZvciByZXNldCAtLW1peGVkIGFuZCB1cGRhdGUtaW5kZXgiID50ZXN0ZmFpbHVyZQorCQkJZXhpdCA0CisJCWZpCisJCWVjaG8gInN1Y2Nlc3MiID50ZXN0c3VjY2VzcworCUVPRgorCTogZm9yY2UgaW5kZXggdG8gYmUgZGlydHkgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSArNjAgZGlyMS9maWxlMS50eHQgJiYKKwlnaXQgcmVzZXQgLS1taXhlZCAtLXF1aWV0IEhFQUR+MSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8ZGlyMS9maWxlMi50eHQgPmV4cGVjdCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTAwNjQ0ICIkKGNhdCBleHBlY3QpIiBkaXIxL2ZpbGUxLnR4dCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRlc3RzdWNjZXNzICYmIHJtIC1mIHRlc3RzdWNjZXNzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGVzdGZhaWx1cmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBkaXIxL2ZpbGUyLnR4dCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgZGlyMS9maWxlMi50eHQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0c3VjY2VzcyAmJiBybSAtZiB0ZXN0c3VjY2VzcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlc3RmYWlsdXJlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzIwMS1jby5zaCBiL3QvdDcyMDEtY28uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjY5NmJhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcyMDEtY28uc2gKQEAgLTAsMCArMSw2NzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0IHRlc3RzLgorCitDcmVhdGVzIG1hc3RlciwgZm9ya3MgcmVuYW1lciBhbmQgc2lkZSBicmFuY2hlcyBmcm9tIGl0LgorVGVzdCBzd2l0Y2hpbmcgYWNyb3NzIHRoZW0uCisKKyAgISBbbWFzdGVyXSBJbml0aWFsIEEgb25lLCBBIHR3bworICAgKiBbcmVuYW1lcl0gUmVuYW1lciBSIG9uZS0+dW5vLCBNIHR3bworICAgICEgW3NpZGVdIFNpZGUgTSBvbmUsIEQgdHdvLCBBIHRocmVlCisgICAgICEgW3NpbXBsZV0gU2ltcGxlIEQgb25lLCBNIHR3bworICAtLS0tCisgICAgICsgW3NpbXBsZV0gU2ltcGxlIEQgb25lLCBNIHR3bworICAgICsgIFtzaWRlXSBTaWRlIE0gb25lLCBEIHR3bywgQSB0aHJlZQorICAgKiAgIFtyZW5hbWVyXSBSZW5hbWVyIFIgb25lLT51bm8sIE0gdHdvCisgICsqKysgW21hc3Rlcl0gSW5pdGlhbCBBIG9uZSwgQSB0d28KKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK2ZpbGwgKCkgeworCWZvciBpCisJZG8KKwkJZWNobyAiJGkiCisJZG9uZQorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZmlsbCB4IHkgeiA+IHNhbWUgJiYKKwlmaWxsIDEgMiAzIDQgNSA2IDcgOCA+b25lICYmCisJZmlsbCBhIGIgYyBkIGUgPnR3byAmJgorCWdpdCBhZGQgc2FtZSBvbmUgdHdvICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBBIG9uZSwgQSB0d28iICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lciAmJgorCXJtIC1mIG9uZSAmJgorCWZpbGwgMSAzIDQgNSA2IDcgOCA+dW5vICYmCisJZ2l0IGFkZCB1bm8gJiYKKwlmaWxsIGEgYiBjIGQgZSBmID50d28gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJSZW5hbWVyIFIgb25lLT51bm8sIE0gdHdvIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgbWFzdGVyICYmCisJZmlsbCAxIDIgMyA0IDUgNiA3ID5vbmUgJiYKKwlmaWxsIEEgQiBDIEQgRSA+dGhyZWUgJiYKKwlybSAtZiB0d28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIG9uZSB0d28gdGhyZWUgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIE0gb25lLCBEIHR3bywgQSB0aHJlZSIgJiYKKworCWdpdCBjaGVja291dCAtYiBzaW1wbGUgbWFzdGVyICYmCisJcm0gLWYgb25lICYmCisJZmlsbCBhIGMgZSA+IHR3byAmJgorCWdpdCBjb21taXQgLWEgLW0gIlNpbXBsZSBEIG9uZSwgTSB0d28iICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IGZyb20gbm9uLWV4aXN0aW5nIGJyYW5jaCIgJworCisJZ2l0IGNoZWNrb3V0IC1iIGRlbGV0ZS1tZSBtYXN0ZXIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCAtLW5vLWRlcmVmIHJlZnMvaGVhZHMvZGVsZXRlLW1lICYmCisJdGVzdCByZWZzL2hlYWRzL2RlbGV0ZS1tZSA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCB3aXRoIGRpcnR5IHRyZWUgd2l0aG91dCAtbSIgJworCisJZmlsbCAwIDEgMiAzIDQgNSA2IDcgOCA+b25lICYmCisJaWYgZ2l0IGNoZWNrb3V0IHNpZGUKKwl0aGVuCisJCWVjaG8gTm90IGhhcHB5CisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSAtIGZhaWxlZCBjb3JyZWN0bHkiCisJZmkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCB3aXRoIHVucmVsYXRlZCBkaXJ0eSB0cmVlIHdpdGhvdXQgLW0iICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlmaWxsIDAgMSAyIDMgNCA1IDYgNyA4ID5zYW1lICYmCisJY3Agc2FtZSBrZXB0ICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgPm1lc3NhZ2VzICYmCisJdGVzdF9jbXAgc2FtZSBrZXB0ICYmCisJcHJpbnRmICJNXHQlc1xuIiBzYW1lID5tZXNzYWdlcy5leHBlY3QgJiYKKwl0ZXN0X2NtcCBtZXNzYWdlcy5leHBlY3QgbWVzc2FnZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgLW0gd2l0aCBkaXJ0eSB0cmVlIiAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IGNsZWFuIC1mICYmCisKKwlmaWxsIDAgMSAyIDMgNCA1IDYgNyA4ID5vbmUgJiYKKwlnaXQgY2hlY2tvdXQgLW0gc2lkZSA+IG1lc3NhZ2VzICYmCisKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInJlZnMvaGVhZHMvc2lkZSIgJiYKKworCXByaW50ZiAiTVx0JXNcbiIgb25lID5leHBlY3QubWVzc2FnZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3QubWVzc2FnZXMgbWVzc2FnZXMgJiYKKworCWZpbGwgIk0Jb25lIiAiQQl0aHJlZSIgIkQJdHdvIiA+ZXhwZWN0Lm1hc3RlciAmJgorCWdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgbWFzdGVyID5jdXJyZW50Lm1hc3RlciAmJgorCXRlc3RfY21wIGV4cGVjdC5tYXN0ZXIgY3VycmVudC5tYXN0ZXIgJiYKKworCWZpbGwgIk0Jb25lIiA+ZXhwZWN0LnNpZGUgJiYKKwlnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIHNpZGUgPmN1cnJlbnQuc2lkZSAmJgorCXRlc3RfY21wIGV4cGVjdC5zaWRlIGN1cnJlbnQuc2lkZSAmJgorCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmN1cnJlbnQuaW5kZXggJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3VycmVudC5pbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCAtbSB3aXRoIGRpcnR5IHRyZWUsIHJlbmFtZWQiICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IGNsZWFuIC1mICYmCisKKwlmaWxsIDEgMiAzIDQgNSA3IDggPm9uZSAmJgorCWlmIGdpdCBjaGVja291dCByZW5hbWVyCisJdGhlbgorCQllY2hvIE5vdCBoYXBweQorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgLSBmYWlsZWQgY29ycmVjdGx5IgorCWZpICYmCisKKwlnaXQgY2hlY2tvdXQgLW0gcmVuYW1lciAmJgorCWZpbGwgMSAzIDQgNSA3IDggPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1bm8gJiYKKwkhIHRlc3QgLWYgb25lICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmN1cnJlbnQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1tIHdpdGggbWVyZ2UgY29uZmxpY3QnICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IGNsZWFuIC1mICYmCisKKwlmaWxsIDEgVCAzIDQgNSA2IFMgOCA+b25lICYmCisJaWYgZ2l0IGNoZWNrb3V0IHJlbmFtZXIKKwl0aGVuCisJCWVjaG8gTm90IGhhcHB5CisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSAtIGZhaWxlZCBjb3JyZWN0bHkiCisJZmkgJiYKKworCWdpdCBjaGVja291dCAtbSByZW5hbWVyICYmCisKKwlnaXQgZGlmZiBtYXN0ZXI6b25lIDozOnVubyB8CisJc2VkIC1lICIxLC9eQEAvZCIgLWUgIi9eIC9kIiAtZSAicy9eLS9kLyIgLWUgInMvXisvYS8iID5jdXJyZW50ICYmCisJZmlsbCBkMiBhVCBkNyBhUyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCB0d28gPmN1cnJlbnQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgb2YgbWVyZ2UgY29uZmxpY3QgZnJvbSBjaGVja291dCAtbScgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgYiBkID4gdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1tIHNpbXBsZSAmJgorCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJZmlsbCBzYW1lIHR3byB0d28gdHdvID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudCAmJgorCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJPDw8PDw8PCBzaW1wbGUKKwlhCisJYworCWUKKwk9PT09PT09CisJYgorCWQKKwk+Pj4+Pj4+IGxvY2FsCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLW1lcmdlIC0tY29uZmxpY3Q9ZGlmZjMgPGJyYW5jaD4nICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgYiBkID4gdHdvICYmCisJZ2l0IGNoZWNrb3V0IC0tbWVyZ2UgLS1jb25mbGljdD1kaWZmMyBzaW1wbGUgJiYKKworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCTw8PDw8PDwgc2ltcGxlCisJYQorCWMKKwllCisJfHx8fHx8fCBtYXN0ZXIKKwlhCisJYgorCWMKKwlkCisJZQorCT09PT09PT0KKwliCisJZAorCT4+Pj4+Pj4gbG9jYWwKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB3aGlsZSBjYXJyeWluZyBhIGRlbGV0aW9uJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNsZWFuIC1mICYmCisJZ2l0IHJtIHR3byAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHNpbXBsZSAyPmVycnMgJiYKKwl0ZXN0X2kxOG5ncmVwIG92ZXJ3cml0dGVuIGVycnMgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLS1xdWlldCAtbSAtdSBIRUFEIHNpbXBsZSAyPmVycnMgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB0byBkZXRhY2ggSEVBRCAod2l0aCBhZHZpY2UgZGVjbGluZWQpJyAnCisKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgZmFsc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWYgcmVuYW1lciAmJiBnaXQgY2xlYW4gLWYgJiYKKwlnaXQgY2hlY2tvdXQgcmVuYW1lcl4gMj5tZXNzYWdlcyAmJgorCXRlc3RfaTE4bmdyZXAgIkhFQUQgaXMgbm93IGF0IDczMjkzODgiIG1lc3NhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBtZXNzYWdlcyAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEJyAnCisJZ2l0IGNvbmZpZyBhZHZpY2UuZGV0YWNoZWRIZWFkIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgLWYgcmVuYW1lciAmJiBnaXQgY2xlYW4gLWYgJiYKKwlHSVRfVEVTVF9HRVRURVhUX1BPSVNPTj1mYWxzZSBnaXQgY2hlY2tvdXQgcmVuYW1lcl4gMj5tZXNzYWdlcyAmJgorCWdyZXAgIkhFQUQgaXMgbm93IGF0IDczMjkzODgiIG1lc3NhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50IC1ndCAxIG1lc3NhZ2VzICYmCisJSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlNPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgInokSCIgPSAieiRNIiAmJgorCWlmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCWVjaG8gIk9PUFMsIEhFQUQgaXMgc3RpbGwgc3ltYm9saWM/Pz8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdG8gZGV0YWNoIEhFQUQgd2l0aCBicmFuY2huYW1lXicgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gLWYgJiYKKwlnaXQgY2hlY2tvdXQgcmVuYW1lcl4gJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJaWYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiT09QUywgSEVBRCBpcyBzdGlsbCBzeW1ib2xpYz8/PyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB0byBkZXRhY2ggSEVBRCB3aXRoIDovbWVzc2FnZScgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gLWYgJiYKKwlnaXQgY2hlY2tvdXQgIjovSW5pdGlhbCIgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJaWYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiT09QUywgSEVBRCBpcyBzdGlsbCBzeW1ib2xpYz8/PyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB0byBkZXRhY2ggSEVBRCB3aXRoIEhFQUReMCcgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gLWYgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlNPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgInokSCIgPSAieiRNIiAmJgorCWlmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCWVjaG8gIk9PUFMsIEhFQUQgaXMgc3RpbGwgc3ltYm9saWM/Pz8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBhbWJpZ3VvdXMgdGFnL2JyYW5jaCBuYW1lcycgJworCisJZ2l0IHRhZyBib3RoIHNpZGUgJiYKKwlnaXQgYnJhbmNoIGJvdGggbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWdpdCBjaGVja291dCBib3RoICYmCisJSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlNPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgInokSCIgPSAieiRNIiAmJgorCW5hbWU9JChnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwpICYmCisJdGVzdCAieiRuYW1lIiA9IHpyZWZzL2hlYWRzL2JvdGgKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGFtYmlndW91cyB0YWcvYnJhbmNoIG5hbWVzJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJZ2l0IHRhZyBmcm90eiBzaWRlICYmCisJZ2l0IGJyYW5jaCBmcm90eiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IHRhZ3MvZnJvdHogJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCVM9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9zaWRlKSAmJgorCXRlc3QgInokSCIgPSAieiRTIiAmJgorCWlmIG5hbWU9JChnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwpCisJdGhlbgorCQllY2hvICJCYWQgLS0gc2hvdWxkIGhhdmUgZGV0YWNoZWQiCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggYnJhbmNoZXMgd2hpbGUgaW4gc3ViZGlyZWN0b3J5JyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJbWtkaXIgc3VicyAmJgorCSgKKwkJY2Qgc3VicyAmJgorCQlnaXQgY2hlY2tvdXQgc2lkZQorCSkgJiYKKwkhIHRlc3QgLWYgc3Vicy9vbmUgJiYKKwlybSAtZnIgc3VicworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHNwZWNpZmljIHBhdGggd2hpbGUgaW4gc3ViZGlyZWN0b3J5JyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlta2RpciBzdWJzICYmCisJPnN1YnMvYmVybyAmJgorCWdpdCBhZGQgc3Vicy9iZXJvICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1YnMvYmVybyIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlta2RpciAtcCBzdWJzICYmCisJKAorCQljZCBzdWJzICYmCisJCWdpdCBjaGVja291dCBzaWRlIC0tIGJlcm8KKwkpICYmCisJdGVzdCAtZiBzdWJzL2Jlcm8KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tvdXQgdy8tLXRyYWNrIHNldHMgdXAgdHJhY2tpbmcnICcKKyAgICBnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBmYWxzZSAmJgorICAgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKyAgICBnaXQgY2hlY2tvdXQgLS10cmFjayAtYiB0cmFjazEgJiYKKyAgICB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLnRyYWNrMS5yZW1vdGUpIiAmJgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gudHJhY2sxLm1lcmdlKSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja291dCB3L2F1dG9zZXR1cG1lcmdlPWFsd2F5cyBzZXRzIHVwIHRyYWNraW5nJyAnCisgICAgdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGZhbHNlICYmCisgICAgZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgYWx3YXlzICYmCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgIGdpdCBjaGVja291dCAtYiB0cmFjazIgJiYKKyAgICB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLnRyYWNrMi5yZW1vdGUpIiAmJgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gudHJhY2syLm1lcmdlKSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHcvLS10cmFjayBmcm9tIG5vbi1icmFuY2ggSEVBRCBmYWlscycgJworICAgIGdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRyYWNrICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0cmFjayAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorICAgIHRlc3QgInokKGdpdCByZXYtcGFyc2UgbWFzdGVyXjApIiA9ICJ6JChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3Ly0tdHJhY2sgZnJvbSB0YWcgZmFpbHMnICcKKyAgICBnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS10cmFjayAtYiB0cmFjayBmcm90eiAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdHJhY2sgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgJiYKKyAgICB0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4wKSIgPSAieiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0YWNoIGEgc3ltYm9saWMgbGluayBIRUFEJyAnCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgIGdpdCBjb25maWcgLS1ib29sIGNvcmUucHJlZmVyc3ltbGlua3JlZnMgeWVzICYmCisgICAgZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKyAgICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisgICAgaXQ9JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpICYmCisgICAgdGVzdCAieiRpdCIgPSB6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKyAgICBoZXJlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKyAgICBnaXQgY2hlY2tvdXQgc2lkZV4gJiYKKyAgICB0ZXN0ICJ6JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSIgPSAieiRoZXJlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tvdXQgd2l0aCAtLXRyYWNrIGZha2VzIGEgc2Vuc2libGUgLWIgPG5hbWU+JyAnCisgICAgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYKKyAgICBnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2tvYWxhL2JlYXIgcmVuYW1lciAmJgorCisgICAgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgb3JpZ2luL2tvYWxhL2JlYXIgJiYKKyAgICB0ZXN0ICJyZWZzL2hlYWRzL2tvYWxhL2JlYXIiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSByZW5hbWVyKSIgJiYKKworICAgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYgZ2l0IGJyYW5jaCAtRCBrb2FsYS9iZWFyICYmCisKKyAgICBnaXQgY2hlY2tvdXQgLS10cmFjayByZWZzL3JlbW90ZXMvb3JpZ2luL2tvYWxhL2JlYXIgJiYKKyAgICB0ZXN0ICJyZWZzL2hlYWRzL2tvYWxhL2JlYXIiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSByZW5hbWVyKSIgJiYKKworICAgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYgZ2l0IGJyYW5jaCAtRCBrb2FsYS9iZWFyICYmCisKKyAgICBnaXQgY2hlY2tvdXQgLS10cmFjayByZW1vdGVzL29yaWdpbi9rb2FsYS9iZWFyICYmCisgICAgdGVzdCAicmVmcy9oZWFkcy9rb2FsYS9iZWFyIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVuYW1lcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja291dCB3aXRoIC0tdHJhY2ssIGJ1dCB3aXRob3V0IC1iLCBmYWlscyB3aXRoIHRvbyBzaG9ydCB0cmFja2VkIG5hbWUnICcKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS10cmFjayByZW5hbWVyJworCitzZXR1cF9jb25mbGljdGluZ19pbmRleCAoKSB7CisJcm0gLWYgLmdpdC9pbmRleCAmJgorCU89JChlY2hvIG9yaWdpbmFsIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJQT0kKGVjaG8gb3Vyc2lkZSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCUI9JChlY2hvIHRoZWlyc2lkZSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRBIDAJZmlsZCIgJiYKKwkJZWNobyAiMTAwNjQ0ICRPIDEJZmlsZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRBIDIJZmlsZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRCIDMJZmlsZSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRBIDAJZmlsZiIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8KK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYW4gdW5tZXJnZWQgcGF0aCBzaG91bGQgZmFpbCcgJworCXNldHVwX2NvbmZsaWN0aW5nX2luZGV4ICYmCisJZWNobyAibm9uZSBvZiB0aGUgYWJvdmUiID5zYW1wbGUgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgZmlsZCBmaWxlIGZpbGYgJiYKKwl0ZXN0X2NtcCBzYW1wbGUgZmlsZCAmJgorCXRlc3RfY21wIHNhbXBsZSBmaWxmICYmCisJdGVzdF9jbXAgc2FtcGxlIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBhbiB1bm1lcmdlZCBwYXRoIGNhbiBiZSBpZ25vcmVkJyAnCisJc2V0dXBfY29uZmxpY3RpbmdfaW5kZXggJiYKKwllY2hvICJub25lIG9mIHRoZSBhYm92ZSIgPnNhbXBsZSAmJgorCWVjaG8gb3Vyc2lkZSA+ZXhwZWN0ICYmCisJY2F0IHNhbXBsZSA+ZmlsZCAmJgorCWNhdCBzYW1wbGUgPmZpbGUgJiYKKwljYXQgc2FtcGxlID5maWxmICYmCisJZ2l0IGNoZWNrb3V0IC1mIGZpbGQgZmlsZSBmaWxmICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIHNhbXBsZSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHVubWVyZ2VkIHN0YWdlJyAnCisJc2V0dXBfY29uZmxpY3RpbmdfaW5kZXggJiYKKwllY2hvICJub25lIG9mIHRoZSBhYm92ZSIgPnNhbXBsZSAmJgorCWVjaG8gb3Vyc2lkZSA+ZXhwZWN0ICYmCisJY2F0IHNhbXBsZSA+ZmlsZCAmJgorCWNhdCBzYW1wbGUgPmZpbGUgJiYKKwljYXQgc2FtcGxlID5maWxmICYmCisJZ2l0IGNoZWNrb3V0IC0tb3VycyAuICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IC0tdGhlaXJzIGZpbGUgJiYKKwl0ZXN0IHp0aGVpcnNpZGUgPSAieiQoY2F0IGZpbGUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIC0tbWVyZ2UnICcKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLW0gLS0gZmlsZCBmaWxlIGZpbGYgJiYKKwkoCisJCWVjaG8gIjw8PDw8PDwgb3VycyIgJiYKKwkJZWNobyBvdXJzaWRlICYmCisJCWVjaG8gIj09PT09PT0iICYmCisJCWVjaG8gdGhlaXJzaWRlICYmCisJCWVjaG8gIj4+Pj4+Pj4gdGhlaXJzIgorCSkgPm1lcmdlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGYgJiYKKwl0ZXN0X2NtcCBtZXJnZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIC0tbWVyZ2UsIGluIGRpZmYzIC1tIHN0eWxlJyAnCisJZ2l0IGNvbmZpZyBtZXJnZS5jb25mbGljdHN0eWxlIGRpZmYzICYmCisJc2V0dXBfY29uZmxpY3RpbmdfaW5kZXggJiYKKwllY2hvICJub25lIG9mIHRoZSBhYm92ZSIgPnNhbXBsZSAmJgorCWVjaG8gb3Vyc2lkZSA+ZXhwZWN0ICYmCisJY2F0IHNhbXBsZSA+ZmlsZCAmJgorCWNhdCBzYW1wbGUgPmZpbGUgJiYKKwljYXQgc2FtcGxlID5maWxmICYmCisJZ2l0IGNoZWNrb3V0IC1tIC0tIGZpbGQgZmlsZSBmaWxmICYmCisJKAorCQllY2hvICI8PDw8PDw8IG91cnMiICYmCisJCWVjaG8gb3Vyc2lkZSAmJgorCQllY2hvICJ8fHx8fHx8IGJhc2UiICYmCisJCWVjaG8gb3JpZ2luYWwgJiYKKwkJZWNobyAiPT09PT09PSIgJiYKKwkJZWNobyB0aGVpcnNpZGUgJiYKKwkJZWNobyAiPj4+Pj4+PiB0aGVpcnMiCisJKSA+bWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIG1lcmdlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tY29uZmxpY3Q9bWVyZ2UsIG92ZXJyaWRpbmcgY29uZmlnJyAnCisJZ2l0IGNvbmZpZyBtZXJnZS5jb25mbGljdHN0eWxlIGRpZmYzICYmCisJc2V0dXBfY29uZmxpY3RpbmdfaW5kZXggJiYKKwllY2hvICJub25lIG9mIHRoZSBhYm92ZSIgPnNhbXBsZSAmJgorCWVjaG8gb3Vyc2lkZSA+ZXhwZWN0ICYmCisJY2F0IHNhbXBsZSA+ZmlsZCAmJgorCWNhdCBzYW1wbGUgPmZpbGUgJiYKKwljYXQgc2FtcGxlID5maWxmICYmCisJZ2l0IGNoZWNrb3V0IC0tY29uZmxpY3Q9bWVyZ2UgLS0gZmlsZCBmaWxlIGZpbGYgJiYKKwkoCisJCWVjaG8gIjw8PDw8PDwgb3VycyIgJiYKKwkJZWNobyBvdXJzaWRlICYmCisJCWVjaG8gIj09PT09PT0iICYmCisJCWVjaG8gdGhlaXJzaWRlICYmCisJCWVjaG8gIj4+Pj4+Pj4gdGhlaXJzIgorCSkgPm1lcmdlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGYgJiYKKwl0ZXN0X2NtcCBtZXJnZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWNvbmZsaWN0PWRpZmYzJyAnCisJdGVzdF91bmNvbmZpZyBtZXJnZS5jb25mbGljdHN0eWxlICYmCisJc2V0dXBfY29uZmxpY3RpbmdfaW5kZXggJiYKKwllY2hvICJub25lIG9mIHRoZSBhYm92ZSIgPnNhbXBsZSAmJgorCWVjaG8gb3Vyc2lkZSA+ZXhwZWN0ICYmCisJY2F0IHNhbXBsZSA+ZmlsZCAmJgorCWNhdCBzYW1wbGUgPmZpbGUgJiYKKwljYXQgc2FtcGxlID5maWxmICYmCisJZ2l0IGNoZWNrb3V0IC0tY29uZmxpY3Q9ZGlmZjMgLS0gZmlsZCBmaWxlIGZpbGYgJiYKKwkoCisJCWVjaG8gIjw8PDw8PDwgb3VycyIgJiYKKwkJZWNobyBvdXJzaWRlICYmCisJCWVjaG8gInx8fHx8fHwgYmFzZSIgJiYKKwkJZWNobyBvcmlnaW5hbCAmJgorCQllY2hvICI9PT09PT09IiAmJgorCQllY2hvIHRoZWlyc2lkZSAmJgorCQllY2hvICI+Pj4+Pj4+IHRoZWlycyIKKwkpID5tZXJnZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgbWVyZ2VkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGluZyBjaGVja291dCAtYiBzaG91bGQgbm90IGJyZWFrIHdvcmtpbmcgdHJlZScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZXIgc2lkZV4gJiYKKwl0ZXN0ICQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLWV4aXQtY29kZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBvdXQgb2Ygbm9uLWJyYW5jaCcgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZWNobyBtb2RpZmllZCA+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHJlbmFtZXIgMj5lcnJvci5sb2cgJiYKKwkhIGdyZXAgIl5QcmV2aW91cyBIRUFEIiBlcnJvci5sb2cKKycKKworKAorIGVjaG8gIiMhJFNIRUxMX1BBVEgiCisgY2F0IDw8XEVPRgorTz0kMSBBPSQyIEI9JDMKK2NhdCAiJEEiID4udG1wCitleGVjID4iJEEiCitlY2hvICc8PDw8PDw8IGZpbGZyZS10aGVpcnMnCitjYXQgIiRCIgorZWNobyAnfHx8fHx8fCBmaWxmcmUtY29tbW9uJworY2F0ICIkTyIKK2VjaG8gJz09PT09PT0nCitjYXQgIi50bXAiCitlY2hvICc+Pj4+Pj4+IGZpbGZyZS1vdXJzJworcm0gLWYgLnRtcAorZXhpdCAxCitFT0YKKykgPmZpbGZyZS5zaAorY2htb2QgK3ggZmlsZnJlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBtZXJnZSBkcml2ZXIgd2l0aCBjaGVja291dCAtbScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjb25maWcgbWVyZ2UuZmlsZnJlLmRyaXZlciAiLi9maWxmcmUuc2ggJU8gJUEgJUIiICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5maWxmcmUubmFtZSAiRmVlbC1mcmVlIG1lcmdlIGRyaXZlciIgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmZpbGZyZS5yZWN1cnNpdmUgYmluYXJ5ICYmCisJZWNobyAiYXJtIG1lcmdlPWZpbGZyZSIgPi5naXRhdHRyaWJ1dGVzICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbGVmdCAmJgorCWVjaG8gbmV1dHJhbCA+YXJtICYmCisJZ2l0IGFkZCBhcm0gLmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG5ldXRyYWwgJiYKKwlnaXQgYnJhbmNoIHJpZ2h0ICYmCisKKwllY2hvIGxlZnQgPmFybSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gbGVmdCAmJgorCWdpdCBjaGVja291dCByaWdodCAmJgorCisJZWNobyByaWdodCA+YXJtICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSByaWdodCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGxlZnQgJiYKKwkoCisJCWZvciB0IGluIGZpbGZyZS1jb21tb24gbGVmdCByaWdodAorCQlkbworCQkJZ3JlcCAkdCBhcm0gfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisKKwltdiBhcm0gZXhwZWN0ICYmCisJZ2l0IGNoZWNrb3V0IC1tIGFybSAmJgorCXRlc3RfY21wIGV4cGVjdCBhcm0KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MzAwLWNsZWFuLnNoIGIvdC90NzMwMC1jbGVhbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYjVlMzRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzMwMC1jbGVhbi5zaApAQCAtMCwwICsxLDc0OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBNaWNoYWVsIFNwYW5nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjbGVhbiBiYXNpYyB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK2dpdCBjb25maWcgY2xlYW4ucmVxdWlyZUZvcmNlIG5vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAtcCBzcmMgJiYKKwl0b3VjaCBzcmMvcGFydDEuYyBNYWtlZmlsZSAmJgorCWVjaG8gYnVpbGQgPi5naXRpZ25vcmUgJiYKKwllY2hvIFwqLm8gPj4uZ2l0aWdub3JlICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBzZXR1cCAmJgorCXRvdWNoIHNyYy9wYXJ0Mi5jIFJFQURNRSAmJgorCWdpdCBhZGQgLgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiB3aXRoIHNraXAtd29ya3RyZWUgLmdpdGlnbm9yZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIC5naXRpZ25vcmUgJiYKKwlybSAuZ2l0aWdub3JlICYmCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgLmdpdGlnbm9yZSAmJgorCWdpdCBjaGVja291dCAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbicgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHNyYy8nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIHNyYy8gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiBzcmMvIHNyYy8nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIHNyYy8gc3JjLyAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdpdGggcHJlZml4JyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzIHNyYy90ZXN0ICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyBzcmMvdGVzdC8xLmMgJiYKKwkoY2Qgc3JjLyAmJiBnaXQgY2xlYW4pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvdGVzdC8xLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdnaXQgY2xlYW4gd2l0aCByZWxhdGl2ZSBwcmVmaXgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJd291bGRfY2xlYW49JCgKKwkJY2QgZG9jcyAmJgorCQlnaXQgY2xlYW4gLW4gLi4vc3JjIHwKKwkJZ3JlcCBwYXJ0MyB8CisJCXNlZCAtbiAtZSAic3xeV291bGQgcmVtb3ZlIHx8cCIKKwkpICYmCisJdmVyYm9zZSB0ZXN0ICIkd291bGRfY2xlYW4iID0gLi4vc3JjL3BhcnQzLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2dpdCBjbGVhbiB3aXRoIGFic29sdXRlIHBhdGgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJd291bGRfY2xlYW49JCgKKwkJY2QgZG9jcyAmJgorCQlnaXQgY2xlYW4gLW4gIiQocHdkKS8uLi9zcmMiIHwKKwkJZ3JlcCBwYXJ0MyB8CisJCXNlZCAtbiAtZSAic3xeV291bGQgcmVtb3ZlIHx8cCIKKwkpICYmCisJdmVyYm9zZSB0ZXN0ICIkd291bGRfY2xlYW4iID0gLi4vc3JjL3BhcnQzLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdpdGggb3V0IG9mIHdvcmsgdHJlZSByZWxhdGl2ZSBwYXRoJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCSgKKwkJY2QgZG9jcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2xlYW4gLW4gLi4vLi4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiB3aXRoIG91dCBvZiB3b3JrIHRyZWUgYWJzb2x1dGUgcGF0aCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlkZD0kKGNkIC4uICYmIHB3ZCkgJiYKKwkoCisJCWNkIGRvY3MgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuIC1uICRkZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIHdpdGggcHJlZml4IGFuZCBwYXRoJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzIHNyYy9mZWF0dXJlICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL2ZlYXR1cmUvZmlsZS5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoY2Qgc3JjLyAmJiBnaXQgY2xlYW4gLWQgZmVhdHVyZS8pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvZmVhdHVyZS9maWxlLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2dpdCBjbGVhbiBzeW1ib2xpYyBsaW5rJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWxuIC1zIGRvY3MvbWFudWFsLnR4dCBzcmMvcGFydDQuYyAmJgorCWdpdCBjbGVhbiAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gd2l0aCB3aWxkY2FyZCcgJworCisJdG91Y2ggYS5jbGVhbiBiLmNsZWFuIG90aGVyLmMgJiYKKwlnaXQgY2xlYW4gIiouY2xlYW4iICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5jbGVhbiAmJgorCXRlc3QgISAtZiBiLmNsZWFuICYmCisJdGVzdCAtZiBvdGhlci5jCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1uJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtbiAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZCBkb2NzICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIHNyYy8gZXhhbXBsZXMvJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzIGV4YW1wbGVzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyBleGFtcGxlcy8xLmMgJiYKKwlnaXQgY2xlYW4gLWQgc3JjLyBleGFtcGxlcy8gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgZXhhbXBsZXMvMS5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLXgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC14ICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIC14JyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtZCAteCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1kIGRvY3MgJiYKKwl0ZXN0ICEgLWYgb2JqLm8gJiYKKwl0ZXN0ICEgLWQgYnVpbGQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgLXggd2l0aCBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5JyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtZCAteCAtZSBzcmMgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWQgZG9jcyAmJgorCXRlc3QgISAtZiBvYmoubyAmJgorCXRlc3QgISAtZCBidWlsZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtWCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLVggJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCAtWCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLWQgLVggJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgb2JqLm8gJiYKKwl0ZXN0ICEgLWQgYnVpbGQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgLVggd2l0aCBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5JyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAtZCAtWCAtZSBzcmMgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBvYmoubyAmJgorCXRlc3QgISAtZCBidWlsZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY2xlYW4ucmVxdWlyZUZvcmNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4ucmVxdWlyZUZvcmNlJyAnCisKKwlnaXQgY29uZmlnIGNsZWFuLnJlcXVpcmVGb3JjZSB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4ucmVxdWlyZUZvcmNlIGFuZCAtbicgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLW4gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbi5yZXF1aXJlRm9yY2UgYW5kIC1mJyAnCisKKwlnaXQgY2xlYW4gLWYgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnY29yZS5leGNsdWRlc2ZpbGUnICcKKworCWVjaG8gZXhjbHVkZXMgPmV4Y2x1ZGVzICYmCisJZWNobyBpbmNsdWRlZCA+aW5jbHVkZWQgJiYKKwlnaXQgY29uZmlnIGNvcmUuZXhjbHVkZXNmaWxlIGV4Y2x1ZGVzICYmCisJb3V0cHV0PSQoZ2l0IGNsZWFuIC1uIGV4Y2x1ZGVzIGluY2x1ZGVkIDI+JjEpICYmCisJZXhwciAiJG91dHB1dCIgOiAiLippbmNsdWRlZCIgPi9kZXYvbnVsbCAmJgorCSEgZXhwciAiJG91dHB1dCIgOiAiLipleGNsdWRlcyIgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0FOSVRZICdyZW1vdmFsIGZhaWx1cmUnICcKKworCW1rZGlyIGZvbyAmJgorCXRvdWNoIGZvby9iYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc1NSBmb28iICYmCisJKGV4ZWMgPGZvby9iYXIgJiYKKwkgY2htb2QgMCBmb28gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuIC1mIC1kKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXN0ZWQgZ2l0IHdvcmsgdHJlZScgJworCXJtIC1mciBmb28gYmFyIGJheiAmJgorCW1rZGlyIC1wIGZvbyBiYXIgYmF6L2JvbyAmJgorCSgKKwkJY2QgZm9vICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IG5lc3RlZCBoZWxsby53b3JsZAorCSkgJiYKKwkoCisJCWNkIGJhciAmJgorCQk+Z29vZGJ5ZS5wZW9wbGUKKwkpICYmCisJKAorCQljZCBiYXovYm9vICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IGRlZXBseS5uZXN0ZWQgZGVlcGVyLndvcmxkCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3QgLWYgZm9vLy5naXQvaW5kZXggJiYKKwl0ZXN0IC1mIGZvby9oZWxsby53b3JsZCAmJgorCXRlc3QgLWYgYmF6L2Jvby8uZ2l0L2luZGV4ICYmCisJdGVzdCAtZiBiYXovYm9vL2RlZXBlci53b3JsZCAmJgorCSEgdGVzdCAtZCBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdWxkIGNsZWFuIHRoaW5ncyB0aGF0IGFsbW9zdCBsb29rIGxpa2UgZ2l0IGJ1dCBhcmUgbm90JyAnCisJcm0gLWZyIGFsbW9zdF9naXQgYWxtb3N0X2JhcmVfZ2l0IGFsbW9zdF9zdWJtb2R1bGUgJiYKKwlta2RpciAtcCBhbG1vc3RfZ2l0Ly5naXQvb2JqZWN0cyAmJgorCW1rZGlyIC1wIGFsbW9zdF9naXQvLmdpdC9yZWZzICYmCisJY2F0ID5hbG1vc3RfZ2l0Ly5naXQvSEVBRCA8PC1cRU9GICYmCisJZ2FyYmFnZQorCUVPRgorCWNwIC1yIGFsbW9zdF9naXQvLmdpdC8gYWxtb3N0X2JhcmVfZ2l0ICYmCisJbWtkaXIgYWxtb3N0X3N1Ym1vZHVsZS8gJiYKKwljYXQgPmFsbW9zdF9zdWJtb2R1bGUvLmdpdCA8PC1cRU9GICYmCisJZ2FyYmFnZQorCUVPRgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGFsbW9zdF8qIiAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFsbW9zdF9naXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhbG1vc3RfYmFyZV9naXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhbG1vc3Rfc3VibW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3VsZCBub3QgY2xlYW4gc3VibW9kdWxlcycgJworCXJtIC1mciByZXBvIHRvX2NsZWFuIHN1YjEgc3ViMiAmJgorCW1rZGlyIHJlcG8gdG9fY2xlYW4gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgbXNnIGhlbGxvLndvcmxkCisJKSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vcmVwby8uZ2l0IHN1YjEgJiYKKwlnaXQgY29tbWl0IC1tICJzdWIxIiAmJgorCWdpdCBicmFuY2ggYmVmb3JlX3N1YjIgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3JlcG8vLmdpdCBzdWIyICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViMiIgJiYKKwlnaXQgY2hlY2tvdXQgYmVmb3JlX3N1YjIgJiYKKwk+dG9fY2xlYW4vc2hvdWxkX2NsZWFuLnRoaXMgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZXBvLy5naXQvaW5kZXggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZXBvL2hlbGxvLndvcmxkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViMS8uZ2l0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViMS9oZWxsby53b3JsZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1YjIvLmdpdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1YjIvaGVsbG8ud29ybGQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0b19jbGVhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3Nob3VsZCBhdm9pZCBjbGVhbmluZyBwb3NzaWJsZSBzdWJtb2R1bGVzJyAnCisJcm0gLWZyIHRvX2NsZWFuIHBvc3NpYmxlX3N1YjEgJiYKKwlta2RpciB0b19jbGVhbiBwb3NzaWJsZV9zdWIxICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcG9zc2libGVfc3ViKiIgJiYKKwllY2hvICJnaXRkaXI6IGZvbyIgPnBvc3NpYmxlX3N1YjEvLmdpdCAmJgorCT5wb3NzaWJsZV9zdWIxL2hlbGxvLndvcmxkICYmCisJY2htb2QgMCBwb3NzaWJsZV9zdWIxLy5naXQgJiYKKwk+dG9fY2xlYW4vc2hvdWxkX2NsZWFuLnRoaXMgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBwb3NzaWJsZV9zdWIxLy5naXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBwb3NzaWJsZV9zdWIxL2hlbGxvLndvcmxkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG9fY2xlYW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIChlbXB0eSkgZ2l0IHNob3VsZCBiZSBrZXB0JyAnCisJcm0gLWZyIGVtcHR5X3JlcG8gdG9fY2xlYW4gJiYKKwlnaXQgaW5pdCBlbXB0eV9yZXBvICYmCisJbWtkaXIgdG9fY2xlYW4gJiYKKwk+dG9fY2xlYW4vc2hvdWxkX2NsZWFuLnRoaXMgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBlbXB0eV9yZXBvLy5naXQvSEVBRCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRvX2NsZWFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBiYXJlIHJlcG9zaXRvcmllcyBzaG91bGQgYmUgY2xlYW5lZCcgJworCXJtIC1mciBiYXJlMSBiYXJlMiBzdWJkaXIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgYmFyZTEgJiYKKwlnaXQgY2xvbmUgLS1sb2NhbCAtLWJhcmUgLiBiYXJlMiAmJgorCW1rZGlyIHN1YmRpciAmJgorCWNwIC1yIGJhcmUyIHN1YmRpci9iYXJlMyAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGJhcmUxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmFyZTIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJkaXIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbmVzdGVkIChlbXB0eSkgYmFyZSByZXBvc2l0b3JpZXMgc2hvdWxkIGJlIGNsZWFuZWQgZXZlbiB3aGVuIGluIC5naXQnICcKKwlybSAtZnIgc3RyYW5nZV9iYXJlICYmCisJbWtkaXIgc3RyYW5nZV9iYXJlICYmCisJZ2l0IGluaXQgLS1iYXJlIHN0cmFuZ2VfYmFyZS8uZ2l0ICYmCisJZ2l0IGNsZWFuIC1mIC1kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3RyYW5nZV9iYXJlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ25lc3RlZCAobm9uLWVtcHR5KSBiYXJlIHJlcG9zaXRvcmllcyBzaG91bGQgYmUgY2xlYW5lZCBldmVuIHdoZW4gaW4gLmdpdCcgJworCXJtIC1mciBzdHJhbmdlX2JhcmUgJiYKKwlta2RpciBzdHJhbmdlX2JhcmUgJiYKKwlnaXQgY2xvbmUgLS1sb2NhbCAtLWJhcmUgLiBzdHJhbmdlX2JhcmUvLmdpdCAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN0cmFuZ2VfYmFyZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZpbmcgcGF0aCBpbiBuZXN0ZWQgZ2l0IHdvcmsgdHJlZSB3aWxsIE5PVCByZW1vdmUgaXQnICcKKwlybSAtZnIgcmVwbyAmJgorCW1rZGlyIHJlcG8gJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJbWtkaXIgLXAgYmFyL2JheiAmJgorCQl0ZXN0X2NvbW1pdCBtc2cgYmFyL2Jhei9oZWxsby53b3JsZAorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWQgcmVwby9iYXIvYmF6ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVwby8uZ2l0L0hFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHJlcG8vYmFyLyAmJgorCXRlc3RfcGF0aF9pc19maWxlIHJlcG8vYmFyL2Jhei9oZWxsby53b3JsZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZpbmcgcGF0aCB0byBuZXN0ZWQgLmdpdCB3aWxsIG5vdCByZW1vdmUgaXQnICcKKwlybSAtZnIgcmVwbyAmJgorCW1rZGlyIHJlcG8gdW50cmFja2VkICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IG1zZyBoZWxsby53b3JsZAorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWQgcmVwby8uZ2l0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVwby8uZ2l0L0hFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHJlcG8vLmdpdC9yZWZzICYmCisJdGVzdF9wYXRoX2lzX2RpciByZXBvLy5naXQvb2JqZWN0cyAmJgorCXRlc3RfcGF0aF9pc19kaXIgdW50cmFja2VkLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZpbmcgcGF0aCB0byBuZXN0ZWQgLmdpdC8gd2lsbCBOT1QgcmVtb3ZlIGNvbnRlbnRzJyAnCisJcm0gLWZyIHJlcG8gdW50cmFja2VkICYmCisJbWtkaXIgcmVwbyB1bnRyYWNrZWQgJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgbXNnIGhlbGxvLndvcmxkCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZCByZXBvLy5naXQvICYmCisJdGVzdF9wYXRoX2lzX2RpciByZXBvLy5naXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZXBvLy5naXQvSEVBRCAmJgorCXRlc3RfcGF0aF9pc19kaXIgdW50cmFja2VkLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZSByZW1vdmFsIG9mIG5lc3RlZCBnaXQgd29yayB0cmVlJyAnCisJcm0gLWZyIGZvbyBiYXIgYmF6ICYmCisJbWtkaXIgLXAgZm9vIGJhciBiYXovYm9vICYmCisJKAorCQljZCBmb28gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgbmVzdGVkIGhlbGxvLndvcmxkCisJKSAmJgorCSgKKwkJY2QgYmFyICYmCisJCT5nb29kYnllLnBlb3BsZQorCSkgJiYKKwkoCisJCWNkIGJhei9ib28gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgZGVlcGx5Lm5lc3RlZCBkZWVwZXIud29ybGQKKwkpICYmCisJZ2l0IGNsZWFuIC1mIC1mIC1kICYmCisJISB0ZXN0IC1kIGZvbyAmJgorCSEgdGVzdCAtZCBiYXIgJiYKKwkhIHRlc3QgLWQgYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZScgJworCXJtIC1mciByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0b3VjaCBrbm93biAxIDIgMyAmJgorCQlnaXQgYWRkIGtub3duICYmCisJCWdpdCBjbGVhbiAtZiAtZSAxIC1lIDIgJiYKKwkJdGVzdCAtZSAxICYmCisJCXRlc3QgLWUgMiAmJgorCQkhICh0ZXN0IC1lIDMpICYmCisJCXRlc3QgLWUga25vd24KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0FOSVRZICdnaXQgY2xlYW4gLWQgd2l0aCBhbiB1bnJlYWRhYmxlIGVtcHR5IGRpcmVjdG9yeScgJworCW1rZGlyIGZvbyAmJgorCWNobW9kIGE9IGZvbyAmJgorCWdpdCBjbGVhbiAtZGZ4IGZvbyAmJgorCSEgdGVzdCAtZCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIHJlc3BlY3RzIHBhdGhzcGVjcyAoZGlyIGlzIHByZWZpeCBvZiBwYXRoc3BlYyknICcKKwlta2RpciAtcCBmb28gJiYKKwlta2RpciAtcCBmb29iYXIgJiYKKwlnaXQgY2xlYW4gLWRmIGZvb2JhciAmJgorCXRlc3RfcGF0aF9pc19kaXIgZm9vICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZm9vYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCByZXNwZWN0cyBwYXRoc3BlY3MgKHBhdGhzcGVjIGlzIHByZWZpeCBvZiBkaXIpJyAnCisJbWtkaXIgLXAgZm9vICYmCisJbWtkaXIgLXAgZm9vYmFyICYmCisJZ2l0IGNsZWFuIC1kZiBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIGZvb2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgc2tpcHMgdW50cmFja2VkIGRpcnMgY29udGFpbmluZyBpZ25vcmVkIGZpbGVzJyAnCisJZWNobyAvZm9vL2JhciA+LmdpdGlnbm9yZSAmJgorCWVjaG8gaWdub3JlbWUgPj4uZ2l0aWdub3JlICYmCisJcm0gLXJmIGZvbyAmJgorCW1rZGlyIC1wIGZvby9hL2FhL2FhYSBmb28vYi9iYi9iYmIgJiYKKwl0b3VjaCBmb28vYmFyIGZvby9iYXogZm9vL2EvYWEvaWdub3JlbWUgZm9vL2IvaWdub3JlbWUgZm9vL2IvYmIvMSBmb28vYi9iYi8yICYmCisJZ2l0IGNsZWFuIC1kZiAmJgorCXRlc3RfcGF0aF9pc19kaXIgZm9vICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZm9vL2JhciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZvby9iYXogJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmb28vYS9hYS9pZ25vcmVtZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZvby9hL2FhL2FhYSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZvby9iL2lnbm9yZW1lICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZm9vL2IvYmIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIHNraXBzIG5lc3RlZCByZXBvIGNvbnRhaW5pbmcgaWdub3JlZCBmaWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG5lc3RlZC1yZXBvLXdpdGgtaWdub3JlZC1maWxlIiAmJgorCisJZ2l0IGluaXQgbmVzdGVkLXJlcG8td2l0aC1pZ25vcmVkLWZpbGUgJiYKKwkoCisJCWNkIG5lc3RlZC1yZXBvLXdpdGgtaWdub3JlZC1maWxlICYmCisJCT5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKworCQkjIFRoaXMgZmlsZSBpcyBpZ25vcmVkIGJ5IGEgLmdpdGlnbm9yZSBydWxlIGluIHRoZSBvdXRlciByZXBvCisJCSMgYWRkZWQgaW4gdGhlIHByZXZpb3VzIHRlc3QuCisJCT5pZ25vcmVtZQorCSkgJiYKKworCWdpdCBjbGVhbiAtZmQgJiYKKworCXRlc3RfcGF0aF9pc19maWxlIG5lc3RlZC1yZXBvLXdpdGgtaWdub3JlZC1maWxlLy5naXQvaW5kZXggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBuZXN0ZWQtcmVwby13aXRoLWlnbm9yZWQtZmlsZS9pZ25vcmVtZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG5lc3RlZC1yZXBvLXdpdGgtaWdub3JlZC1maWxlL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIGhhbmRsZXMgYmVpbmcgdG9sZCB3aGF0IHRvIGNsZWFuJyAnCisJbWtkaXIgLXAgZDEgZDIgJiYKKwl0b3VjaCBkMS91dCBkMi91dCAmJgorCWdpdCBjbGVhbiAtZiAqL3V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZDEvdXQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkMi91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gaGFuZGxlcyBiZWluZyB0b2xkIHdoYXQgdG8gY2xlYW4sIHdpdGggLWQnICcKKwlta2RpciAtcCBkMSBkMiAmJgorCXRvdWNoIGQxL3V0IGQyL3V0ICYmCisJZ2l0IGNsZWFuIC1mZmQgKi91dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQxL3V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZDIvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdvcmtzIGlmIGEgZ2xvYiBpcyBwYXNzZWQgd2l0aG91dCAtZCcgJworCW1rZGlyIC1wIGQxIGQyICYmCisJdG91Y2ggZDEvdXQgZDIvdXQgJiYKKwlnaXQgY2xlYW4gLWYgIip1dCIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkMS91dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQyL3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiB3b3JrcyBpZiBhIGdsb2IgaXMgcGFzc2VkIHdpdGggLWQnICcKKwlta2RpciAtcCBkMSBkMiAmJgorCXRvdWNoIGQxL3V0IGQyL3V0ICYmCisJZ2l0IGNsZWFuIC1mZmQgIip1dCIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkMS91dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQyL3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2hhbmRsZSBjbGVhbiAmIGNvcmUubG9uZ3BhdGhzID0gZmFsc2UgbmljZWx5JyAnCisJdGVzdF9jb25maWcgY29yZS5sb25ncGF0aHMgZmFsc2UgJiYKKwlhNTA9YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgJiYKKwlta2RpciAtcCAkYTUwJGE1MC8kYTUwJGE1MC8kYTUwJGE1MCAmJgorCTogPiIkYTUwJGE1MC90ZXN0LnR4dCIgMj4iJGE1MCRhNTAvJGE1MCRhNTAvJGE1MCRhNTAvdGVzdC50eHQiICYmCisJIyBjcmVhdGUgYSB0ZW1wb3Jhcnkgb3V0c2lkZSB0aGUgd29ya2luZyB0cmVlIHRvIGhpZGUgZnJvbSAiZ2l0IGNsZWFuIgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbiAteGRmIDI+LmdpdC9lcnIgJiYKKwkjIGdyZXBwaW5nIGZvciBhIHN0cmVycm9yIHN0cmluZyBpcyB1bnBvcnRhYmxlIGJ1dCBpdCBpcyBPSyBoZXJlIHdpdGgKKwkjIE1JTkdXIHByZXJlcQorCXRlc3RfaTE4bmdyZXAgInRvbyBsb25nIiAuZ2l0L2VycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbiB1bnRyYWNrZWQgcGF0aHMgYnkgcGF0aHNwZWMnICcKKwlnaXQgaW5pdCB1bnRyYWNrZWQgJiYKKwlta2RpciB1bnRyYWNrZWQvZGlyICYmCisJZWNobyA+dW50cmFja2VkL2Rpci9maWxlLnR4dCAmJgorCWdpdCAtQyB1bnRyYWNrZWQgY2xlYW4gLWYgZGlyL2ZpbGUudHh0ICYmCisJbHMgdW50cmFja2VkL2RpciA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDczMDEtY2xlYW4taW50ZXJhY3RpdmUuc2ggYi90L3Q3MzAxLWNsZWFuLWludGVyYWN0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwN2U4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MzAxLWNsZWFuLWludGVyYWN0aXZlLnNoCkBAIC0wLDAgKzEsNDg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNsZWFuIC1pIGJhc2ljIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAtcCBzcmMgJiYKKwl0b3VjaCBzcmMvcGFydDEuYyBNYWtlZmlsZSAmJgorCWVjaG8gYnVpbGQgPi5naXRpZ25vcmUgJiYKKwllY2hvIFwqLm8gPj4uZ2l0aWdub3JlICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBzZXR1cCAmJgorCXRvdWNoIHNyYy9wYXJ0Mi5jIFJFQURNRSAmJgorCWdpdCBhZGQgLgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaSAoYzogY2xlYW4gaG90a2V5KScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZWNobyBjIHwgZ2l0IGNsZWFuIC1pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaSAoY2w6IGNsZWFuIHByZWZpeCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWVjaG8gY2wgfCBnaXQgY2xlYW4gLWkgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pIChxdWl0KScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZWNobyBxdWl0IHwgZ2l0IGNsZWFuIC1pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pIChDdHJsK0QpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwllY2hvICJcMDQiIHwgZ2l0IGNsZWFuIC1pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoZmlsdGVyIGFsbCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgZiAiKiIgIiIgYyB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKGZpbHRlciBwYXR0ZXJucyknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgZiAicGFydDMuKiAqLm91dCIgIiIgYyB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKGZpbHRlciBwYXR0ZXJucyAyKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBmICIqICEqLm91dCIgIiIgYyB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gYWxsKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBzICIqIiAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gbm9uZSknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gbnVtYmVyKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJdGVzdF93cml0ZV9saW5lcyBzIDMgIiIgYyB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gbnVtYmVyIDIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgIjIgMyIgNSAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gbnVtYmVyIDMpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgIjMsNCA1IiAiIiBjIHwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gZmlsZW5hbWVzKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IGZvby50eHQgYmFyLnR4dCBiYXoudHh0ICYmCisJdGVzdF93cml0ZV9saW5lcyBzICJhLm91dCBmbyBiYSBiYXIiICIiIGMgfAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGZvby50eHQgJiYKKwl0ZXN0ICEgLWYgYmFyLnR4dCAmJgorCXRlc3QgLWYgYmF6LnR4dCAmJgorCXJtIGJhei50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSByYW5nZSknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyAiMSwzLTQiIDIgIiIgYyB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gcmFuZ2UgMiknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgcyAiNC0gMSIgIiIgYyB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoaW52ZXJzZSBzZWxlY3QpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHMgIioiICItNS0gMSAtMiIgIiIgYyB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKGFzayknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYSBZIHkgbm8geWVzIGJhZCAiIiB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKGFzayAtIEN0cmwrRCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgYSBZIG5vIHllcyAiXDA0IiB8CisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIHdpdGggcHJlZml4IGFuZCBwYXRoIChmaWx0ZXIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoY2QgYnVpbGQvICYmCisJIHRlc3Rfd3JpdGVfbGluZXMgZiBkb2NzICIqLmgiICIiIGMgfAorCSBnaXQgY2xlYW4gLWlkIC4uKSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgd2l0aCBwcmVmaXggYW5kIHBhdGggKHNlbGVjdCBieSBuYW1lKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGNkIGJ1aWxkLyAmJgorCSB0ZXN0X3dyaXRlX2xpbmVzIHMgLi4vZG9jcy8gLi4vc3JjL3BhcnQzLmMgLi4vc3JjL3BhcnQ0LmMgIiIgYyB8CisJIGdpdCBjbGVhbiAtaWQgLi4pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCB3aXRoIHByZWZpeCBhbmQgcGF0aCAoYXNrKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGNkIGJ1aWxkLyAmJgorCSB0ZXN0X3dyaXRlX2xpbmVzIGEgWSB5IG5vIHllcyBiYWQgIiIgfAorCSBnaXQgY2xlYW4gLWlkIC4uKSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgY2xlYW4gLWkgcGFpbnRzIHRoZSBoZWFkZXIgaW4gSEVBREVSIGNvbG9yJyAnCisJPmEub3V0ICYmCisJZWNobyBxIHwKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBjbGVhbiAtaSB8CisJdGVzdF9kZWNvZGVfY29sb3IgfAorCWhlYWQgLW4gMSA+aGVhZGVyICYmCisJIyBub3QgaTE4bmdyZXAKKwlncmVwICJePEJPTEQ+IiBoZWFkZXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaCBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzZTJhYWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaApAQCAtMCwwICsxLDE0MDYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nQmFzaWMgcG9yY2VsYWluIHN1cHBvcnQgZm9yIHN1Ym1vZHVsZXMKKworVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSBiYXNpYyBzYW5pdHkgb2YgdGhlIGluaXQsIHVwZGF0ZSBhbmQgc3RhdHVzCitzdWJjb21tYW5kcyBvZiBnaXQgc3VibW9kdWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCB3b3JrcyBvbiBlbXB0eSByZXBvc2l0b3J5JyAnCisJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBpbml0aWFsIGNvbW1pdCcgJworCT50ICYmCisJZ2l0IGFkZCB0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZ2l0IGJyYW5jaCBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IGFib3J0cyBvbiBtaXNzaW5nIC5naXRtb2R1bGVzIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgc3ViIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwLCQoZ2l0IHJldi1wYXJzZSBIRUFEKSxzdWIgJiYKKwkjIG1pc3NpbmcgdGhlIC5naXRtb2R1bGVzIGZpbGUgaGVyZQorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgaW5pdCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIk5vIHVybCBmb3VuZCBmb3Igc3VibW9kdWxlIHBhdGgiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGFib3J0cyBvbiBtaXNzaW5nIC5naXRtb2R1bGVzIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgc3ViIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwLCQoZ2l0IHJldi1wYXJzZSBIRUFEKSxzdWIgJiYKKwkjIG1pc3NpbmcgdGhlIC5naXRtb2R1bGVzIGZpbGUgaGVyZQorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1YiAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIlN1Ym1vZHVsZSBwYXRoIC5zdWIuIG5vdCBpbml0aWFsaXplZCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgYWJvcnRzIG9uIG1pc3NpbmcgZ2l0bW9kdWxlcyB1cmwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgc3ViIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwLCQoZ2l0IHJldi1wYXJzZSBIRUFEKSxzdWIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXRtb2R1bGVzIiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnMucGF0aCBzdWIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFib3J0cyBvbiByZXBvc2l0b3J5IHdpdGggbm8gY29tbWl0cycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwknIidyZXBvLW5vLWNvbW1pdHMnIicgZG9lcyBub3QgaGF2ZSBhIGNvbW1pdCBjaGVja2VkIG91dAorCUVPRgorCWdpdCBpbml0IHJlcG8tbm8tY29tbWl0cyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgYWRkIC4uL2EgLi9yZXBvLW5vLWNvbW1pdHMgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGlnbm9yZSBpbm5lciBnaXQgcmVwbyB3aGVuIG5vdCBhZGRlZCcgJworCXJtIC1mciBpbm5lciAmJgorCW1rZGlyIGlubmVyICYmCisJKAorCQljZCBpbm5lciAmJgorCQlnaXQgaW5pdCAmJgorCQk+dCAmJgorCQlnaXQgYWRkIHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgaW5uZXIgMj5vdXRwdXQuZXJyICYmCisJcm0gLWZyIGlubmVyICYmCisJdGVzdF9pMThuZ3JlcCAiXmVycm9yOiAuKmRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0IiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gcmVwb3NpdG9yeSBpbiBpbml0IHN1YmRpcmVjdG9yeScgJworCW1rZGlyIGluaXQgJiYKKwkoCisJCWNkIGluaXQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBhID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgY29tbWl0IDEiICYmCisJCWdpdCB0YWcgLWEgLW0gInJldi0xIiByZXYtMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBjb21taXQgd2l0aCBnaXRsaW5rJyAnCisJZWNobyBhID5hICYmCisJZWNobyB6ID56ICYmCisJZ2l0IGFkZCBhIGluaXQgeiAmJgorCWdpdCBjb21taXQgLW0gInN1cGVyIGNvbW1pdCAxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGhpZGUgaW5pdCBzdWJkaXJlY3RvcnknICcKKwltdiBpbml0IC5zdWJyZXBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gcmVwb3NpdG9yeSB0byBhZGQgc3VibW9kdWxlcyB0bycgJworCWdpdCBpbml0IGFkZHRlc3QgJiYKKwlnaXQgaW5pdCBhZGR0ZXN0LWlnbm9yZQorJworCisjIFRoZSAnc3VibW9kdWxlIGFkZCcgdGVzdHMgbmVlZCBzb21lIHJlcG9zaXRvcnkgdG8gYWRkIGFzIGEgc3VibW9kdWxlLgorIyBUaGUgdHJhc2ggZGlyZWN0b3J5IGlzIGEgZ29vZCBvbmUgYXMgYW55LiBXZSBuZWVkIHRvIGNhbm9uaWNhbGl6ZQorIyB0aGUgbmFtZSwgdGhvdWdoLCBhcyBzb21lIHRlc3RzIGNvbXBhcmUgaXQgdG8gdGhlIGFic29sdXRlIHBhdGggZ2l0CisjIGdlbmVyYXRlcywgd2hpY2ggd2lsbCBleHBhbmQgc3ltYm9saWMgbGlua3MuCitzdWJtb2R1cmw9JChwd2QgLVApCisKK2xpc3RicmFuY2hlcygpIHsKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpJyAncmVmcy9oZWFkcy8qJworfQorCitpbnNwZWN0KCkgeworCWRpcj0kMSAmJgorCWRvdGRvdD0iJHsyOi0uLn0iICYmCisKKwkoCisJCWNkICIkZGlyIiAmJgorCQlsaXN0YnJhbmNoZXMgPiIkZG90ZG90L2hlYWRzIiAmJgorCQl7IGdpdCBzeW1ib2xpYy1yZWYgSEVBRCB8fCA6OyB9ID4iJGRvdGRvdC9oZWFkIiAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPiIkZG90ZG90L2hlYWQtc2hhMSIgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgJiYKKwkJZ2l0IGNsZWFuIC1uIC1kIC14ID4iJGRvdGRvdC91bnRyYWNrZWQiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkJyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtcSAiJHN1Ym1vZHVybCIgc3VibW9kID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCQllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9zdWJtb2QiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC8uZ2l0ICYmCisJCSgKKwkJCWNkIHN1Ym1vZCAmJgorCQkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlID5hY3R1YWwgJiYKKwkJCWVjaG8gIi4uLy4uLy4uL3N1Ym1vZCIgPmV4cGVjdCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQkJcm0gLWYgYWN0dWFsIGV4cGVjdAorCQkpICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3N1Ym1vZCAuLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwYXJlbnQgYW5kIG9uZSByZXBvc2l0b3J5JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBwYXJlbnQgJiYKKwl0ZXN0X2NvbW1pdCAtQyBwYXJlbnQgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZGlyZWN0ZWQgc3VibW9kdWxlIGFkZCBkb2VzIG5vdCBzaG93IHByb2dyZXNzJyAnCisJZ2l0IC1DIGFkZHRlc3Qgc3VibW9kdWxlIGFkZCAiZmlsZTovLyRzdWJtb2R1cmwvcGFyZW50IiBzdWJtb2QtcmVkaXJlY3RlZCBcCisJCTI+ZXJyICYmCisJISBncmVwICUgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJDaGVja2luZyBjb25uZWN0aXZpdHkiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdGVkIHN1Ym1vZHVsZSBhZGQgLS1wcm9ncmVzcyBkb2VzIHNob3cgcHJvZ3Jlc3MnICcKKwlnaXQgLUMgYWRkdGVzdCBzdWJtb2R1bGUgYWRkIC0tcHJvZ3Jlc3MgImZpbGU6Ly8kc3VibW9kdXJsL3BhcmVudCIgXAorCQlzdWJtb2QtcmVkaXJlY3RlZC1wcm9ncmVzcyAyPmVyciAmJiBcCisJZ3JlcCAlIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHRvIC5naXRpZ25vcmVkIHBhdGggZmFpbHMnICcKKwkoCisJCWNkIGFkZHRlc3QtaWdub3JlICYmCisJCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwkJVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOgorCQlzdWJtb2QKKwkJaGludDogVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS4KKwkJaGludDogVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5IHJ1bm5pbmcKKwkJaGludDogImdpdCBjb25maWcgYWR2aWNlLmFkZElnbm9yZWRGaWxlIGZhbHNlIgorCQlFT0YKKwkJIyBEb2VzIG5vdCB1c2UgdGVzdF9jb21taXQgZHVlIHRvIHRoZSBpZ25vcmUKKwkJZWNobyAiKiIgPiAuZ2l0aWdub3JlICYmCisJCWdpdCBhZGQgLS1mb3JjZSAuZ2l0aWdub3JlICYmCisJCWdpdCBjb21taXQgLW0iSWdub3JlIGV2ZXJ5dGhpbmciICYmCisJCSEgZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIHN1Ym1vZCA+YWN0dWFsIDI+JjEgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgdG8gLmdpdGlnbm9yZWQgcGF0aCB3aXRoIC0tZm9yY2UnICcKKwkoCisJCWNkIGFkZHRlc3QtaWdub3JlICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC0tZm9yY2UgIiRzdWJtb2R1cmwiIHN1Ym1vZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB0byByZWNvbmZpZ3VyZSBleGlzdGluZyBzdWJtb2R1bGUgd2l0aCAtLWZvcmNlJyAnCisJKAorCQljZCBhZGR0ZXN0LWlnbm9yZSAmJgorCQlib2d1c191cmw9IiQocHdkKS9ib2d1cy11cmwiICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC0tZm9yY2UgIiRib2d1c191cmwiIHN1Ym1vZCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtLWZvcmNlIC1iIGluaXRpYWwgIiRzdWJtb2R1cmwiIHN1Ym1vZC1icmFuY2ggJiYKKwkJdGVzdCAiJGJvZ3VzX3VybCIgPSAiJChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2QudXJsKSIgJiYKKwkJdGVzdCAiJGJvZ3VzX3VybCIgPSAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2QudXJsKSIgJiYKKwkJIyBSZXN0b3JlIHRoZSB1cmwKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS1mb3JjZSAiJHN1Ym1vZHVybCIgc3VibW9kICYmCisJCXRlc3QgIiRzdWJtb2R1cmwiID0gIiQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kLnVybCkiICYmCisJCXRlc3QgIiRzdWJtb2R1cmwiID0gIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kLnVybCkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHJlbGF5cyBhZGQgLS1kcnktcnVuIHN0ZGVycicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGFkZHRlc3QvLmdpdC9pbmRleC5sb2NrIiAmJgorCSgKKwkJY2QgYWRkdGVzdCAmJgorCQk6ID4uZ2l0L2luZGV4LmxvY2sgJiYKKwkJISBnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgc3ViLXdoaWxlLWxvY2tlZCAyPm91dHB1dC5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiXmZhdGFsOiAuKmluZGV4XC5sb2NrIiBvdXRwdXQuZXJyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Yi13aGlsZS1sb2NrZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgLS1icmFuY2gnICcKKwllY2hvICJyZWZzL2hlYWRzL2luaXRpYWwiID5leHBlY3QtaGVhZCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3QtaGVhZHMgJiYKKwlyZWZzL2hlYWRzL2luaXRpYWwKKwlyZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC1iIGluaXRpYWwgIiRzdWJtb2R1cmwiIHN1Ym1vZC1icmFuY2ggJiYKKwkJdGVzdCAiaW5pdGlhbCIgPSAiJChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2QtYnJhbmNoLmJyYW5jaCkiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3N1Ym1vZC1icmFuY2ggLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QtaGVhZHMgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QtaGVhZCBoZWFkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLi8gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIC4vLi9kb3RzdWJtb2QvLi9mcm90ei8uLyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisKKwlybSAtZiBoZWFkcyBoZWFkIHVudHJhY2tlZCAmJgorCWluc3BlY3QgYWRkdGVzdC9kb3RzdWJtb2QvZnJvdHogLi4vLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB3aXRoIC8uLy4vIGluIHBhdGgnICcKKwllY2hvICJyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsIiBkb3RzbGFzaGRvdHN1Ym1vZC8uLy4vZnJvdHovLi8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCisJcm0gLWYgaGVhZHMgaGVhZCB1bnRyYWNrZWQgJiYKKwlpbnNwZWN0IGFkZHRlc3QvZG90c2xhc2hkb3RzdWJtb2QvZnJvdHogLi4vLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB3aXRoIC8vIGluIHBhdGgnICcKKwllY2hvICJyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsIiBzbGFzaHNsYXNoc3VibW9kLy8vZnJvdHovLyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisKKwlybSAtZiBoZWFkcyBoZWFkIHVudHJhY2tlZCAmJgorCWluc3BlY3QgYWRkdGVzdC9zbGFzaHNsYXNoc3VibW9kL2Zyb3R6IC4uLy4uLy4uICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWRzICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCAvLi4gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIGRvdGRvdHN1Ym1vZC8uLi9yZWFsc3VibW9kL2Zyb3R6Ly4uICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3JlYWxzdWJtb2QgLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB3aXRoIC4vLCAvLi4gYW5kIC8vIGluIHBhdGgnICcKKwllY2hvICJyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsIiBkb3QvZG90c2xhc2hzdWJtb2QvLi8uLi8uLi8vLy9yZWFsc3VibW9kMi9hL2IvYy9kLy4uLy4uLy4uLy4uL2Zyb3R6Ly8uLiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisKKwlybSAtZiBoZWFkcyBoZWFkIHVudHJhY2tlZCAmJgorCWluc3BlY3QgYWRkdGVzdC9yZWFsc3VibW9kMiAuLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFDWUdXSU4gJ3N1Ym1vZHVsZSBhZGQgd2l0aCBcXCBpbiBwYXRoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcGFyZW50IHN1Ylxcd2l0aFxcYmFja3NsYXNoIiAmJgorCisJIyBJbml0aWFsaXplIGEgcmVwbyB3aXRoIGEgYmFja3NsYXNoIGluIGl0cyBuYW1lCisJZ2l0IGluaXQgc3ViXFx3aXRoXFxiYWNrc2xhc2ggJiYKKwl0b3VjaCBzdWJcXHdpdGhcXGJhY2tzbGFzaC9lbXB0eS5maWxlICYmCisJZ2l0IC1DIHN1Ylxcd2l0aFxcYmFja3NsYXNoIGFkZCBlbXB0eS5maWxlICYmCisJZ2l0IC1DIHN1Ylxcd2l0aFxcYmFja3NsYXNoIGNvbW1pdCAtbSAiQWRkZWQgZW1wdHkuZmlsZSIgJiYKKworCSMgQWRkIHRoYXQgcmVwb3NpdG9yeSBhcyBhIHN1Ym1vZHVsZQorCWdpdCBpbml0IHBhcmVudCAmJgorCWdpdCAtQyBwYXJlbnQgc3VibW9kdWxlIGFkZCAuLi9zdWJcXHdpdGhcXGJhY2tzbGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIGluIHN1YmRpcmVjdG9yeScgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisKKwlta2RpciBhZGR0ZXN0L3N1YiAmJgorCSgKKwkJY2QgYWRkdGVzdC9zdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIC4uL3JlYWxzdWJtb2QzICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3JlYWxzdWJtb2QzIC4uLy4uICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWRzICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgaW4gc3ViZGlyZWN0b3J5IHdpdGggcmVsYXRpdmUgcGF0aCBzaG91bGQgZmFpbCcgJworCSgKKwkJY2QgYWRkdGVzdC9zdWIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vLi4vIHN1Ym1vZDMgMj4uLi8uLi9vdXRwdXQuZXJyCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgdG9wbGV2ZWwgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGFkZCBhbiBleGFtcGxlIGVudHJ5IHRvIC5naXRtb2R1bGVzJyAnCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdG1vZHVsZXMgc3VibW9kdWxlLmV4YW1wbGUudXJsIGdpdDovL2V4YW1wbGUuY29tL2luaXQuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgZmFpbCBmb3IgdW5tYXBwZWQgcGF0aHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHN0YXR1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIG1hcCBwYXRoIGluIC5naXRtb2R1bGVzJyAnCisJY2F0IDw8XEVPRiA+ZXhwZWN0ICYmCitbc3VibW9kdWxlICJleGFtcGxlIl0KKwl1cmwgPSBnaXQ6Ly9leGFtcGxlLmNvbS9pbml0LmdpdAorCXBhdGggPSBpbml0CitFT0YKKworCWdpdCBjb25maWcgLS1maWxlPS5naXRtb2R1bGVzIHN1Ym1vZHVsZS5leGFtcGxlLnBhdGggaW5pdCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgb25seSBwcmludCBvbmUgbGluZScgJworCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGZyb20gc3ViZGlyZWN0b3J5IHNob3VsZCBoYXZlIHRoZSBzYW1lIFNIQTEnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtZGlyIGFkZHRlc3Qvc3ViZGlyIiAmJgorCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlta2RpciBzdWJkaXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPm91dHB1dCAmJgorCQlhd2sgIntwcmludCBcJDF9IiA8b3V0cHV0ID5leHBlY3QgJiYKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID4uLi9vdXRwdXQgJiYKKwkJYXdrICJ7cHJpbnQgXCQxfSIgPC4uL291dHB1dCA+Li4vYWN0dWFsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwgJiYKKwkJZ2l0IC1DIC4uL3N1Ym1vZCBjaGVja291dCBIRUFEXiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+Li4vb3V0cHV0ICYmCisJCWF3ayAie3ByaW50IFwkMX0iIDwuLi9vdXRwdXQgPi4uL2FjdHVhbDIgJiYKKwkJY2QgLi4gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPm91dHB1dCAmJgorCQlhd2sgIntwcmludCBcJDF9IiA8b3V0cHV0ID5leHBlY3QyICYmCisJCXRlc3RfY21wIGV4cGVjdDIgYWN0dWFsMiAmJgorCQkhIHRlc3RfY21wIGFjdHVhbCBhY3R1YWwyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGZldGNoIGNvbW1pdCBuYW1lIGZyb20gc3VibW9kdWxlJyAnCisJcmV2MT0kKGNkIC5zdWJyZXBvICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlwcmludGYgInJldjE6ICVzXG4iICIkcmV2MSIgJiYKKwl0ZXN0IC1uICIkcmV2MSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBpbml0aWFsbHkgYmUgIm1pc3NpbmciJyAnCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpbmVzICYmCisJZ3JlcCAiXi0kcmV2MSIgbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBzaG91bGQgcmVnaXN0ZXIgc3VibW9kdWxlIHVybCBpbiAuZ2l0L2NvbmZpZycgJworCWVjaG8gZ2l0Oi8vZXhhbXBsZS5jb20vaW5pdC5naXQgPmV4cGVjdCAmJgorCisJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgPnVybCAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUudXJsIC4vLnN1YnJlcG8gJiYKKworCXRlc3RfY21wIGV4cGVjdCB1cmwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBzdGlsbCBiZSAibWlzc2luZyIgYWZ0ZXIgaW5pdGlhbGl6aW5nJyAnCisJcm0gLWZyIGluaXQgJiYKKwlta2RpciBpbml0ICYmCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpbmVzICYmCisJcm0gLWZyIGluaXQgJiYKKwlncmVwICJeLSRyZXYxIiBsaW5lcworJworCit0ZXN0X2ZhaWx1cmVfd2l0aF91bmtub3duX3N1Ym1vZHVsZSAoKSB7CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSAkMSBuby1zdWNoLXN1Ym1vZHVsZSAyPm91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJeZXJyb3I6IC4qbm8tc3VjaC1zdWJtb2R1bGUiIG91dHB1dC5lcnIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBzaG91bGQgZmFpbCB3aXRoIHVua25vd24gc3VibW9kdWxlJyAnCisJdGVzdF9mYWlsdXJlX3dpdGhfdW5rbm93bl9zdWJtb2R1bGUgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgc2hvdWxkIGZhaWwgd2l0aCB1bmtub3duIHN1Ym1vZHVsZScgJworCXRlc3RfZmFpbHVyZV93aXRoX3Vua25vd25fc3VibW9kdWxlIHVwZGF0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGZhaWwgd2l0aCB1bmtub3duIHN1Ym1vZHVsZScgJworCXRlc3RfZmFpbHVyZV93aXRoX3Vua25vd25fc3VibW9kdWxlIHN0YXR1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW5jIHNob3VsZCBmYWlsIHdpdGggdW5rbm93biBzdWJtb2R1bGUnICcKKwl0ZXN0X2ZhaWx1cmVfd2l0aF91bmtub3duX3N1Ym1vZHVsZSBzeW5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgZmFpbCB3aGVuIHBhdGggaXMgdXNlZCBieSBhIGZpbGUnICcKKwllY2hvIGhlbGxvID5leHBlY3QgJiYKKworCWVjaG8gImhlbGxvIiA+aW5pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgc2hvdWxkIGZhaWwgd2hlbiBwYXRoIGlzIHVzZWQgYnkgYSBub25lbXB0eSBkaXJlY3RvcnknICcKKwllY2hvIGhlbGxvID5leHBlY3QgJiYKKworCXJtIC1mciBpbml0ICYmCisJbWtkaXIgaW5pdCAmJgorCWVjaG8gImhlbGxvIiA+aW5pdC9hICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGluaXQvYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgc2hvdWxkIHdvcmsgd2hlbiBwYXRoIGlzIGFuIGVtcHR5IGRpcicgJworCXJtIC1mciBpbml0ICYmCisJcm0gLWYgaGVhZC1zaGExICYmCisJZWNobyAiJHJldjEiID5leHBlY3QgJiYKKworCW1rZGlyIGluaXQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtcSA+dXBkYXRlLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSB1cGRhdGUub3V0ICYmCisKKwlpbnNwZWN0IGluaXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZC1zaGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgYmUgInVwLXRvLWRhdGUiIGFmdGVyIHVwZGF0ZScgJworCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5saXN0ICYmCisJZ3JlcCAiXiAkcmV2MSIgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgInVwLXRvLWRhdGUiIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPi4uL2xpc3QKKwkpICYmCisJZ3JlcCAiXiAkcmV2MSIgbGlzdCAmJgorCWdyZXAgIlxcLlxcLi9pbml0IiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAidXAtdG8tZGF0ZSIgZnJvbSBzdWJkaXJlY3Rvcnkgd2l0aCBwYXRoJyAnCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLi4vaW5pdCA+Li4vbGlzdAorCSkgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0ICYmCisJZ3JlcCAiXFwuXFwuL2luaXQiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBiZSAibW9kaWZpZWQiIGFmdGVyIHN1Ym1vZHVsZSBjb21taXQnICcKKwkoCisJCWNkIGluaXQgJiYKKwkJZWNobyBiID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgY29tbWl0IDIiCisJKSAmJgorCisJcmV2Mj0kKGNkIGluaXQgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgLW4gIiRyZXYyIiAmJgorCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5saXN0ICYmCisKKwlncmVwICJeKyRyZXYyIiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSAtLWNhY2hlZCBzaGExIHNob3VsZCBiZSByZXYxJyAnCisJZ2l0IHN1Ym1vZHVsZSAtLWNhY2hlZCBzdGF0dXMgPmxpc3QgJiYKKwlncmVwICJeKyRyZXYxIiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIHNob3VsZCByZXBvcnQgdGhlIFNIQTEgb2YgdGhlIG5ldyBzdWJtb2R1bGUgY29tbWl0JyAnCisJZ2l0IGRpZmYgPmRpZmYgJiYKKwlncmVwICJeK1N1YnByb2plY3QgY29tbWl0ICRyZXYyIiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgY2hlY2tvdXQgcmV2MScgJworCXJtIC1mIGhlYWQtc2hhMSAmJgorCWVjaG8gIiRyZXYxIiA+ZXhwZWN0ICYmCisKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSBpbml0ICYmCisJaW5zcGVjdCBpbml0ICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZC1zaGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgYmUgInVwLXRvLWRhdGUiIGFmdGVyIHVwZGF0ZScgJworCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5saXN0ICYmCisJZ3JlcCAiXiAkcmV2MSIgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBzdXBlcnByb2plY3Qgd2l0aCBzdWJwcm9qZWN0IGFscmVhZHkgcHJlc2VudCcgJworCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBzdWJtb2R1bGUgZGlmZicgJworCWdpdCBicmFuY2ggc2Vjb25kICYmCisJKAorCQljZCBpbml0ICYmCisJCWVjaG8gcyA+cyAmJgorCQlnaXQgYWRkIHMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIHN1YnByb2plY3QiCisJKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgaW5pdCAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZSBpbml0IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPlAuZGlmZiAmJgorCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBQLmRpZmYgJiYKKworCWdpdCBkaWZmIC0tY2FjaGVkIG1hc3RlciA+c3RhZ2VkICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0YWdlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgLS1pbml0JyAnCisJbXYgaW5pdCBpbml0MiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmV4YW1wbGUudXJsICIkKHB3ZCkvaW5pdDIiICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5leGFtcGxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgJiYKKworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIGluaXQgMj4gdXBkYXRlLm91dCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBpbml0aWFsaXplZCIgdXBkYXRlLm91dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgaW5pdC8uZ2l0ICYmCisKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgaW5pdCAmJgorCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgaW5pdC8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSAtLWluaXQgZnJvbSBzdWJkaXJlY3RvcnknICcKKwltdiBpbml0IGluaXQyICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgIiQocHdkKS9pbml0MiIgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLmV4YW1wbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLnVybCAmJgorCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLi4vaW5pdCAyPnVwZGF0ZS5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAibm90IGluaXRpYWxpemVkIiB1cGRhdGUub3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgLi4vaW5pdC8uZ2l0ICYmCisKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC4uL2luaXQKKwkpICYmCisJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBpbml0Ly5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGFkZCBmaWxlcyBmcm9tIGEgc3VibW9kdWxlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBpbml0L2EKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmFjZWZ1bGx5IGFkZC9yZXNldCBzdWJtb2R1bGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHN1YnByb2plY3QiIGluaXQgJiYKKwkoY2QgaW5pdCAmJgorCSBlY2hvIGIgPiBhKSAmJgorCWdpdCBhZGQgaW5pdC8gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZCBpbml0ICYmCisJY29tbWl0PSQoY2QgaW5pdCAmJgorCSBnaXQgY29tbWl0IC1tIHVwZGF0ZSBhID4vZGV2L251bGwgJiYKKwkgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBhZGQgaW5pdC8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZCBpbml0ICYmCisJdGVzdCAkY29tbWl0ID0gJChnaXQgbHMtZmlsZXMgLS1zdGFnZSB8CisJCXNlZCAtbiAicy9eMTYwMDAwIFwoW14gXSpcKS4qL1wxL3AiKSAmJgorCWdpdCByZXNldCBpbml0LyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIGluaXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBncmFjZWZ1bGx5IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2gnICcKKworCXRlc3QgImluaXQiID0gIiQoZ2l0IGxzLWZpbGVzIGluaXQvKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZpbmcgdG8gYSBjb21taXQgd2l0aG91dCBzdWJtb2R1bGUgZG9lcyBub3QgbGVhdmUgZW1wdHkgZGlyJyAnCisJcm0gLXJmIGluaXQgJiYKKwlta2RpciBpbml0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJdGVzdCAhIC1kIGluaXQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSA8aW52YWxpZC1zdWJjb21tYW5kPiBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgbm8tc3VjaC1zdWJjb21tYW5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWJtb2R1bGVzIHdpdGhvdXQgc3BlY2lmeWluZyBhbiBleHBsaWNpdCBwYXRoJyAnCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIHIgPnIgJiYKKwkJZ2l0IGFkZCByICYmCisJCWdpdCBjb21taXQgLW0gInJlcG8gY29tbWl0IDEiCisJKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgcmVwby8gYmFyZS5naXQgJiYKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvcmVwbyIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwby5wYXRoIHJlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvYmFyZS5naXQiICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmJhcmUucGF0aCBiYXJlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc2hvdWxkIGZhaWwgd2hlbiBwYXRoIGlzIHVzZWQgYnkgYSBmaWxlJyAnCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCXRvdWNoIGZpbGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvcmVwbyIgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHNob3VsZCBmYWlsIHdoZW4gcGF0aCBpcyB1c2VkIGJ5IGFuIGV4aXN0aW5nIGRpcmVjdG9yeScgJworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlta2RpciBlbXB0eS1kaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvcmVwbyIgZW1wdHktZGlyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2Ugc3VwZXJwcm9qZWN0IGFzIHVwc3RyZWFtIHdoZW4gcGF0aCBpcyByZWxhdGl2ZSBhbmQgbm8gdXJsIGlzIHNldCB0aGVyZScgJworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9yZXBvIHJlbGF0aXZlICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVsYXRpdmUudXJsKSIgPSAuLi9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyByZWxhdGl2ZSAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnJlbGF0aXZlLnVybCkiID0gIiRzdWJtb2R1cmwvcmVwbyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmb3IgcmVsYXRpdmUgcGF0aCB0ZXN0cycgJworCW1rZGlyIHJlbHRlc3QgJiYKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJZ2l0IGluaXQgJiYKKwkJbWtkaXIgc3ViICYmCisJCSgKKwkJCWNkIHN1YiAmJgorCQkJZ2l0IGluaXQgJiYKKwkJCXRlc3RfY29tbWl0IGZvbworCQkpICYmCisJCWdpdCBhZGQgc3ViICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoIHN1YiAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsIC4uL3N1YnJlcG8gJiYKKwkJY3AgLmdpdC9jb25maWcgcHJpc3RpbmUtLmdpdC1jb25maWcgJiYKKwkJY3AgLmdpdG1vZHVsZXMgcHJpc3RpbmUtLmdpdG1vZHVsZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCBVUkwgLSBzc2g6Ly9ob3N0bmFtZS9yZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgc3NoOi8vaG9zdG5hbWUvcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBzc2g6Ly9ob3N0bmFtZS9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcG9ydC1xdWFsaWZpZWQgVVJMIC0gc3NoOi8vaG9zdG5hbWU6MjIvcmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIHNzaDovL2hvc3RuYW1lOjIyL3JlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gc3NoOi8vaG9zdG5hbWU6MjIvc3VicmVwbworCSkKKycKKworIyBBYm91dCB0aGUgY2hvaWNlIG9mIHRoZSBwYXRoIGluIHRoZSBuZXh0IHRlc3Q6CisjIC0gZG91YmxlLXNsYXNoIHNpZGUtc3RlcHMgcGF0aCBtYW5nbGluZyBpc3N1ZXMgb24gV2luZG93cworIyAtIGl0IGlzIHN0aWxsIGFuIGFic29sdXRlIGxvY2FsIHBhdGgKKyMgLSB0aGVyZSBjYW5ub3QgYmUgYSBzZXJ2ZXIgd2l0aCBhIGJsYW5rIGluIGl0cyBuYW1lIGp1c3QgaW4gY2FzZSB0aGUKKyMgICBwYXRoIGlzIHVzZWQgZXJyb25lb3VzbHkgdG8gYWNjZXNzIGEgLy9zZXJ2ZXIvc2hhcmUgc3R5bGUgcGF0aAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyBwYXRoIHdvcmtzIHdpdGggbG9jYWwgcGF0aCAtIC8vc29tZXdoZXJlIGVsc2UvcmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsICIvL3NvbWV3aGVyZSBlbHNlL3JlcG8iICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9ICIvL3NvbWV3aGVyZSBlbHNlL3N1YnJlcG8iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggZmlsZSBVUkwgLSBmaWxlOi8vL3RtcC9yZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgZmlsZTovLy90bXAvcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBmaWxlOi8vL3RtcC9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggaGVscGVyIFVSTC0gaGVscGVyOjovL2hvc3RuYW1lL3JlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCBoZWxwZXI6Oi8vaG9zdG5hbWUvcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBoZWxwZXI6Oi8vaG9zdG5hbWUvc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHNjcC1zdHlsZSBVUkwgLSB1c2VyQGhvc3Q6cmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIHVzZXJAaG9zdDpyZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHVzZXJAaG9zdDpzdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggc2NwLXN0eWxlIFVSTCAtIHVzZXJAaG9zdDpwYXRoL3RvL3JlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCB1c2VyQGhvc3Q6cGF0aC90by9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHVzZXJAaG9zdDpwYXRoL3RvL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gZm9vJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgZm9vICYmCisJCSMgYWN0dWFsOiBmYWlscyB3aXRoIGFuIGVycm9yCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHN1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gZm9vL2JhcicgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIGZvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gZm9vL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gLi9mb28nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuL2ZvbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBzdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIC4vZm9vL2JhcicgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4vZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBmb28vc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSAuLi9mb28nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuLi9mb28gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gLi4vc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSAuLi9mb28vYmFyJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi4vZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSAuLi9mb28vc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vYmFyL2EvYi9jIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIC4uL2Zvby9iYXIuZ2l0JyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCW1rZGlyIC1wIGEvYi9jICYmCisJCShjZCBhL2IvYyAmJiBnaXQgaW5pdCAmJiB0ZXN0X2NvbW1pdCBtc2cpICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi4vZm9vL2Jhci5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vYmFyL2EvYi9jIC4vYS9iL2MgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuYS9iL2MudXJsKSIgPSAuLi9mb28vYmFyL2EvYi9jCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZpbmcgdGhlIHN1cGVycHJvamVjdCBkb2VzIG5vdCBicmVhayBzdWJtb2R1bGVzJyAnCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5leHBlY3QKKwkpICYmCisJbXYgYWRkdGVzdCBhZGR0ZXN0MiAmJgorCSgKKwkJY2QgYWRkdGVzdDIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZpbmcgdGhlIHN1Ym1vZHVsZSBkb2VzIG5vdCBicmVhayB0aGUgc3VwZXJwcm9qZWN0JyAnCisJKAorCQljZCBhZGR0ZXN0MiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cworCSkgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eIFwoW14gXSogcmVwb1wpIC4qLy1cMS8iIDxhY3R1YWwgPmV4cGVjdCAmJgorCW12IGFkZHRlc3QyL3JlcG8gYWRkdGVzdDIvcmVwby5iYWsgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IGFkZHRlc3QyL3JlcG8uYmFrIGFkZHRlc3QyL3JlcG8iICYmCisJKAorCQljZCBhZGR0ZXN0MiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cworCSkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCAtLW5hbWUgYWxsb3dzIHRvIHJlcGxhY2UgYSBzdWJtb2R1bGUgd2l0aCBhbm90aGVyIGF0IHRoZSBzYW1lIHBhdGgnICcKKwkoCisJCWNkIGFkZHRlc3QyICYmCisJCSgKKwkJCWNkIHJlcG8gJiYKKwkJCWVjaG8gIiRzdWJtb2R1cmwvcmVwbyIgPmV4cGVjdCAmJgorCQkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCQllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9yZXBvIiA+ZXhwZWN0ICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgLmdpdAorCQkpICYmCisJCXJtIC1yZiByZXBvICYmCisJCWdpdCBybSByZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC1xIC0tbmFtZSByZXBvX25ldyAiJHN1Ym1vZHVybC9iYXJlLmdpdCIgcmVwbyA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwkJZWNobyAiZ2l0ZGlyOiAuLi8uZ2l0L21vZHVsZXMvc3VibW9kIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvLmdpdCAmJgorCQkoCisJCQljZCByZXBvICYmCisJCQllY2hvICIkc3VibW9kdXJsL2JhcmUuZ2l0IiA+ZXhwZWN0ICYmCisJCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJCWVjaG8gImdpdGRpcjogLi4vLmdpdC9tb2R1bGVzL3JlcG9fbmV3IiA+ZXhwZWN0ICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgLmdpdAorCQkpICYmCisJCWVjaG8gInJlcG8iID5leHBlY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwby5wYXRoICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlcG9fbmV3LnBhdGggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJiYKKwkJZWNobyAiJHN1Ym1vZHVybC9yZXBvIiA+ZXhwZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlcG8udXJsICYmCisJCWVjaG8gIiRzdWJtb2R1cmwvYmFyZS5naXQiID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwb19uZXcudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQllY2hvICIkc3VibW9kdXJsL3JlcG8iID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmVwby51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWVjaG8gIiRzdWJtb2R1cmwvYmFyZS5naXQiID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmVwb19uZXcudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlIHJlbGF0aXZlIHN1Ym1vZHVsZXMgc3RheSByZWxhdGl2ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyIGNsb25lMiBzdWJzdWIgc3ViMyIgJiYKKwlta2RpciBzdWJzdWIgJiYKKwkoCisJCWNkIHN1YnN1YiAmJgorCQlnaXQgaW5pdCAmJgorCQk+dCAmJgorCQlnaXQgYWRkIHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisJKSAmJgorCW1rZGlyIHN1YjMgJiYKKwkoCisJCWNkIHN1YjMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJPnQgJiYKKwkJZ2l0IGFkZCB0ICYmCisJCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJzdWIgZGlyZGlyL3N1YnN1YiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIHN1YnN1YiIKKwkpICYmCisJbWtkaXIgc3VwZXIgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBpbml0ICYmCisJCT50ICYmCisJCWdpdCBhZGQgdCAmJgorCQlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViMyAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIHN1YiIKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lMiAmJgorCSgKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9zdWIzIiA+Li9zdWIzLy5naXRfZXhwZWN0ICYmCisJCWVjaG8gImdpdGRpcjogLi4vLi4vLi4vLmdpdC9tb2R1bGVzL3N1YjMvbW9kdWxlcy9kaXJkaXIvc3Vic3ViIiA+Li9zdWIzL2RpcmRpci9zdWJzdWIvLmdpdF9leHBlY3QKKwkpICYmCisJdGVzdF9jbXAgY2xvbmUyL3N1YjMvLmdpdF9leHBlY3QgY2xvbmUyL3N1YjMvLmdpdCAmJgorCXRlc3RfY21wIGNsb25lMi9zdWIzL2RpcmRpci9zdWJzdWIvLmdpdF9leHBlY3QgY2xvbmUyL3N1YjMvZGlyZGlyL3N1YnN1Yi8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCBhbiBleGlzdGluZyBuYW1lIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwkoCisJCWNkIGFkZHRlc3QyICYmCisJCXJtIC1yZiByZXBvICYmCisJCWdpdCBybSByZXBvICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgYWRkIC1xIC0tbmFtZSByZXBvX25ldyAiJHN1Ym1vZHVybC9yZXBvLmdpdCIgcmVwbyAmJgorCQl0ZXN0ICEgLWQgcmVwbyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvX25ldy5wYXRoICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlcG9fbmV3LnVybCAmJgorCQllY2hvICIkc3VibW9kdXJsL2JhcmUuZ2l0IiA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnJlcG9fbmV3LnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLWYgLXEgLS1uYW1lIHJlcG9fbmV3ICIkc3VibW9kdXJsL3JlcG8uZ2l0IiByZXBvICYmCisJCXRlc3QgLWQgcmVwbyAmJgorCQllY2hvICJyZXBvIiA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnJlcG9fbmV3LnBhdGggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJiYKKwkJZWNobyAiJHN1Ym1vZHVybC9yZXBvLmdpdCIgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvX25ldy51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWVjaG8gIiRzdWJtb2R1cmwvcmVwby5naXQiID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmVwb19uZXcudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGEgc2Vjb25kIHN1Ym1vZHVsZScgJworCWdpdCBzdWJtb2R1bGUgYWRkIC4vaW5pdDIgZXhhbXBsZTIgJiYKKwlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgZXhhbXBsZTIgYWRkZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgd29ya3Mgb24gcmVwb3NpdG9yeSB3aXRob3V0IHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBuZXdkaXJlY3RvcnkiICYmCisJbWtkaXIgbmV3ZGlyZWN0b3J5ICYmCisJKAorCQljZCBuZXdkaXJlY3RvcnkgJiYKKwkJZ2l0IGluaXQgJiYKKwkJPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gInJlcG8gc2hvdWxkIG5vdCBiZSBlbXB0eSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLiAmJgorCQlnaXQgc3VibW9kdWxlIGRlaW5pdCAtLWFsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBzaG91bGQgcmVtb3ZlIHRoZSB3aG9sZSBzdWJtb2R1bGUgc2VjdGlvbiBmcm9tIC5naXQvY29uZmlnJyAnCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS5mb28gYmFyICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZTIuZnJvdHogbml0Zm9sICYmCisJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgaW5pdCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdCAtbiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlMlwuIikiICYmCisJdGVzdCAtZiBleGFtcGxlMi8uZ2l0ICYmCisJcm1kaXIgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IHNob3VsZCB1bnNldCBjb3JlLndvcmt0cmVlJyAnCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9tb2R1bGVzL2V4YW1wbGUvY29uZmlnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0L21vZHVsZXMvZXhhbXBsZS9jb25maWcgY29yZS53b3JrdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IGZyb20gc3ViZGlyZWN0b3J5JyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS5mb28gYmFyICYmCisJbWtkaXIgLXAgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLi4vaW5pdCA+Li4vb3V0cHV0CisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIlxcLlxcLi9pbml0IiBvdXRwdXQgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLW4gIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZTJcLiIpIiAmJgorCXRlc3QgLWYgZXhhbXBsZTIvLmdpdCAmJgorCXJtZGlyIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCAuIGRlaW5pdHMgYWxsIGluaXRpYWxpemVkIHN1Ym1vZHVsZXMnICcKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLmZvbyBiYXIgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlMi5mcm90eiBuaXRmb2wgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGRlaW5pdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC4gPmFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlMlwuIikiICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5leGFtcGxlMiIgYWN0dWFsICYmCisJcm1kaXIgaW5pdCBleGFtcGxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IC0tYWxsIGRlaW5pdHMgYWxsIGluaXRpYWxpemVkIHN1Ym1vZHVsZXMnICcKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLmZvbyBiYXIgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlMi5mcm90eiBuaXRmb2wgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGRlaW5pdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC0tYWxsID5hY3R1YWwgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZTJcLiIpIiAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuZXhhbXBsZTIiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQgZXhhbXBsZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBkZWluaXRzIGEgc3VibW9kdWxlIHdoZW4gaXRzIHdvcmsgdHJlZSBpcyBtaXNzaW5nIG9yIGVtcHR5JyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJcm0gLXJmIGluaXQgZXhhbXBsZTIvKiBleGFtcGxlMi8uZ2l0ICYmCisJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgaW5pdCBleGFtcGxlMiA+YWN0dWFsICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGUyXC4iKSIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuZXhhbXBsZTIiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBmYWlscyB3aGVuIHRoZSBzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZpY2F0aW9ucyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZWNobyBYID4+aW5pdC9zICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBkZWluaXQgaW5pdCAmJgorCXRlc3QgLW4gIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdCAtZiBleGFtcGxlMi8uZ2l0ICYmCisJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLWYgaW5pdCA+YWN0dWFsICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuaW5pdCIgYWN0dWFsICYmCisJcm1kaXIgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IGZhaWxzIHdoZW4gdGhlIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgZmlsZXMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWVjaG8gWCA+PmluaXQvdW50cmFja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBkZWluaXQgaW5pdCAmJgorCXRlc3QgLW4gIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdCAtZiBleGFtcGxlMi8uZ2l0ICYmCisJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLWYgaW5pdCA+YWN0dWFsICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuaW5pdCIgYWN0dWFsICYmCisJcm1kaXIgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IGZhaWxzIHdoZW4gdGhlIHN1Ym1vZHVsZSBIRUFEIGRvZXMgbm90IG1hdGNoIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkoCisJCWNkIGluaXQgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUReCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLWYgZXhhbXBsZTIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC1mIGluaXQgPmFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBpcyBzaWxlbnQgd2hlbiB1c2VkIG9uIGFuIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlJyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgaW5pdCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiU3VibW9kdWxlIC5leGFtcGxlLiAoLiopIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgISAiU3VibW9kdWxlIC5leGFtcGxlLiAoLiopIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC4gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgISAiU3VibW9kdWxlIC5leGFtcGxlLiAoLiopIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiU3VibW9kdWxlIC5leGFtcGxlMi4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmV4YW1wbGUyIiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuaW5pdCIgYWN0dWFsICYmCisJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLiA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAhICJTdWJtb2R1bGUgLmV4YW1wbGUuICguKikgdW5yZWdpc3RlcmVkIGZvciBwYXRoIC5pbml0IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlN1Ym1vZHVsZSAuZXhhbXBsZTIuICguKikgdW5yZWdpc3RlcmVkIGZvciBwYXRoIC5leGFtcGxlMiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC0tYWxsID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlN1Ym1vZHVsZSAuZXhhbXBsZS4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmluaXQiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgISAiU3VibW9kdWxlIC5leGFtcGxlMi4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmV4YW1wbGUyIiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuaW5pdCIgYWN0dWFsICYmCisJcm1kaXIgaW5pdCBleGFtcGxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IGZhaWxzIHdoZW4gc3VibW9kdWxlIGhhcyBhIC5naXQgZGlyZWN0b3J5IGV2ZW4gd2hlbiBmb3JjZWQnICcKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkoCisJCWNkIGluaXQgJiYKKwkJcm0gLmdpdCAmJgorCQljcCAtUiAuLi8uZ2l0L21vZHVsZXMvZXhhbXBsZSAuZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9LiBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGRlaW5pdCBpbml0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLWYgaW5pdCAmJgorCXRlc3QgLWQgaW5pdC8uZ2l0ICYmCisJdGVzdCAtbiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggVVRGLTggbmFtZScgJworCXN2bmFtZT0kKHByaW50ZiAiXDMwM1wyNDUgXDMwM1wyNDRcMzAzXDI2NiIpICYmCisJbWtkaXIgIiRzdm5hbWUiICYmCisJKAorCQljZCAiJHN2bmFtZSIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJPnN1YiAmJgorCQlnaXQgYWRkIHN1YiAmJgorCQlnaXQgY29tbWl0IC1tICJpbml0IHN1YiIKKwkpICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi8iJHN2bmFtZSIgJiYKKwlnaXQgc3VibW9kdWxlID4mMiAmJgorCXRlc3QgLW4gIiQoZ2l0IHN1Ym1vZHVsZSB8IGdyZXAgIiRzdm5hbWUiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCBjbG9uZSBzaGFsbG93IHN1Ym1vZHVsZScgJworCW1rZGlyIHN1cGVyICYmCisJcHdkPSQocHdkKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS1kZXB0aD0xIGZpbGU6Ly8iJHB3ZCIvZXhhbXBsZTIgc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJdGVzdCAxID0gJChnaXQgbG9nIC0tb25lbGluZSB8IHdjIC1sKQorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaGVscGVyIGxpc3QgaXMgbm90IGNvbmZ1c2VkIGJ5IGNvbW1vbiBwcmVmaXhlcycgJworCW1rZGlyIC1wIGRpcjEvYiAmJgorCSgKKwkJY2QgZGlyMS9iICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gaGkgPnRlc3RmaWxlMiAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAidGVzdDEiCisJKSAmJgorCW1rZGlyIC1wIGRpcjIvYiAmJgorCSgKKwkJY2QgZGlyMi9iICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gaGVsbG8gPnRlc3RmaWxlMSAmJgorCQlnaXQgYWRkIC4gICYmCisJCWdpdCBjb21taXQgLW0gInRlc3QyIgorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAvZGlyMS9iIGRpcjEvYiAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC9kaXIyL2IgZGlyMi9iICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3Qgc3VibW9kdWxlIGNvbW1pdCIgJiYKKwlnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBkaXIxL2IgfGN1dCAtYzUxLSA+YWN0dWFsICYmCisJZWNobyAiZGlyMS9iIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdXBlcnByb2plY3Qgd2l0aCBzdWJtb2R1bGVzJyAnCisJZ2l0IGluaXQgc3ViMSAmJgorCXRlc3RfY29tbWl0IC1DIHN1YjEgdGVzdCAmJgorCXRlc3RfY29tbWl0IC1DIHN1YjEgdGVzdDIgJiYKKwlnaXQgaW5pdCBtdWx0aXN1cGVyICYmCisJZ2l0IC1DIG11bHRpc3VwZXIgc3VibW9kdWxlIGFkZCAuLi9zdWIxIHN1YjAgJiYKKwlnaXQgLUMgbXVsdGlzdXBlciBzdWJtb2R1bGUgYWRkIC4uL3N1YjEgc3ViMSAmJgorCWdpdCAtQyBtdWx0aXN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vc3ViMSBzdWIyICYmCisJZ2l0IC1DIG11bHRpc3VwZXIgc3VibW9kdWxlIGFkZCAuLi9zdWIxIHN1YjMgJiYKKwlnaXQgLUMgbXVsdGlzdXBlciBjb21taXQgLW0gImFkZCBzb21lIHN1Ym1vZHVsZXMiCisnCisKK2NhdCA+ZXhwZWN0IDw8LUVPRgorLXN1YjAKKyBzdWIxICh0ZXN0MikKKyBzdWIyICh0ZXN0MikKKyBzdWIzICh0ZXN0MikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCB3aXRoIGEgc3BlY2lmaWNhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG11bHRpc3VwZXJfY2xvbmUiICYmCisJcHdkPSQocHdkKSAmJgorCWdpdCBjbG9uZSBmaWxlOi8vIiRwd2QiL211bHRpc3VwZXIgbXVsdGlzdXBlcl9jbG9uZSAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC4gIjooZXhjbHVkZSlzdWIwIiAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSBzdGF0dXMgfGN1dCAtYyAxLDQzLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCB3aXRoIHN1Ym1vZHVsZS5hY3RpdmUgc2V0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXVsdGlzdXBlcl9jbG9uZSIgJiYKKwlwd2Q9JChwd2QpICYmCisJZ2l0IGNsb25lIGZpbGU6Ly8iJHB3ZCIvbXVsdGlzdXBlciBtdWx0aXN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgY29uZmlnIHN1Ym1vZHVsZS5hY3RpdmUgIi4iICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5hY3RpdmUgIjooZXhjbHVkZSlzdWIwIiAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgc3VibW9kdWxlIHN0YXR1cyB8Y3V0IC1jIDEsNDMtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgYW5kIHNldHRpbmcgc3VibW9kdWxlLjxuYW1lPi5hY3RpdmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtdWx0aXN1cGVyX2Nsb25lIiAmJgorCXB3ZD0kKHB3ZCkgJiYKKwlnaXQgY2xvbmUgZmlsZTovLyIkcHdkIi9tdWx0aXN1cGVyIG11bHRpc3VwZXJfY2xvbmUgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBjb25maWcgLS1ib29sIHN1Ym1vZHVsZS5zdWIwLmFjdGl2ZSAidHJ1ZSIgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBjb25maWcgLS1ib29sIHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZSAiZmFsc2UiICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgY29uZmlnIC0tYm9vbCBzdWJtb2R1bGUuc3ViMi5hY3RpdmUgInRydWUiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIHN1YjAgKHRlc3QyKQorCS1zdWIxCisJIHN1YjIgKHRlc3QyKQorCS1zdWIzCisJRU9GCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSBzdGF0dXMgfGN1dCAtYyAxLDQzLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBhY3RpdmUgc3VibW9kdWxlIHdpdGhvdXQgc3VibW9kdWxlIHVybCBzZXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0ZXN0L3Rlc3QiICYmCisJbWtkaXIgdGVzdCAmJgorCSMgYW5vdGhlciBkaXIgYnJlYWtzIGFjY2lkZW50YWwgcmVsYXRpdmUgcGF0aHMgc3RpbGwgYmVpbmcgY29ycmVjdAorCWdpdCBjbG9uZSBmaWxlOi8vIiRwd2QiL211bHRpc3VwZXIgdGVzdC90ZXN0ICYmCisJKAorCQljZCB0ZXN0L3Rlc3QgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuYWN0aXZlICIuIiAmJgorCisJCSMgZG8gbm90IHBhc3MgLS1pbml0IGZsYWcsIGFzIHRoZSBzdWJtb2R1bGUgaXMgYWxyZWFkeSBhY3RpdmU6CisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5hY3R1YWxfcmF3ICYmCisKKwkJY3V0IC1jIDEsNDMtIGFjdHVhbF9yYXcgPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCSBzdWIwICh0ZXN0MikKKwkJIHN1YjEgKHRlc3QyKQorCQkgc3ViMiAodGVzdDIpCisJCSBzdWIzICh0ZXN0MikKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIHdpdGggYSBwYXRoc3BlYyB3b3JrcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG11bHRpc3VwZXJfY2xvbmUiICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJIHN1YjAgKHRlc3QyKQorCS1zdWIxCisJLXN1YjIKKwktc3ViMworCUVPRgorCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzPSJzdWIwIiBtdWx0aXN1cGVyIG11bHRpc3VwZXJfY2xvbmUgJiYKKwlnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBzdWJtb2R1bGUgc3RhdHVzIHxjdXQgLWMxLDQzLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggbXVsdGlwbGUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgb3B0aW9ucycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG11bHRpc3VwZXJfY2xvbmUiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCS1zdWIwCisJIHN1YjEgKHRlc3QyKQorCS1zdWIyCisJIHN1YjMgKHRlc3QyKQorCUVPRgorCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzPSIuIiBcCisJCSAgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9IjooZXhjbHVkZSlzdWIwIiBcCisJCSAgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9IjooZXhjbHVkZSlzdWIyIiBcCisJCSAgbXVsdGlzdXBlciBtdWx0aXN1cGVyX2Nsb25lICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgc3VibW9kdWxlIHN0YXR1cyB8Y3V0IC1jMSw0My0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYW5kIHN1YnNlcXVlbnQgdXBkYXRlcyBjb3JyZWN0bHkgYXV0by1pbml0aWFsaXplIHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtdWx0aXN1cGVyX2Nsb25lIiAmJgorCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwktc3ViMAorCSBzdWIxICh0ZXN0MikKKwktc3ViMgorCSBzdWIzICh0ZXN0MikKKwlFT0YKKworCWNhdCA8PC1cRU9GID5leHBlY3QyICYmCisJLXN1YjAKKwkgc3ViMSAodGVzdDIpCisJLXN1YjIKKwkgc3ViMyAodGVzdDIpCisJLXN1YjQKKwkgc3ViNSAodGVzdDIpCisJRU9GCisKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Ii4iIFwKKwkJICAtLXJlY3Vyc2Utc3VibW9kdWxlcz0iOihleGNsdWRlKXN1YjAiIFwKKwkJICAtLXJlY3Vyc2Utc3VibW9kdWxlcz0iOihleGNsdWRlKXN1YjIiIFwKKwkJICAtLXJlY3Vyc2Utc3VibW9kdWxlcz0iOihleGNsdWRlKXN1YjQiIFwKKwkJICBtdWx0aXN1cGVyIG11bHRpc3VwZXJfY2xvbmUgJiYKKworCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSBzdGF0dXMgfGN1dCAtYzEsNDMtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgLUMgbXVsdGlzdXBlciBzdWJtb2R1bGUgYWRkIC4uL3N1YjEgc3ViNCAmJgorCWdpdCAtQyBtdWx0aXN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vc3ViMSBzdWI1ICYmCisJZ2l0IC1DIG11bHRpc3VwZXIgY29tbWl0IC1tICJhZGQgbW9yZSBzdWJtb2R1bGVzIiAmJgorCSMgb2J0YWluIHRoZSBuZXcgc3VwZXJwcm9qZWN0CisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgcHVsbCAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJZ2l0IC1DIG11bHRpc3VwZXJfY2xvbmUgc3VibW9kdWxlIHN0YXR1cyB8Y3V0IC1jMSw0My0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdDIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgcHJvcGVybHkgc2V0cyB0aGUgY29uZmlnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXVsdGlzdXBlcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Ii4iIFwKKwkJICAtLXJlY3Vyc2Utc3VibW9kdWxlcz0iOihleGNsdWRlKXN1YjAiIFwKKwkJICBtdWx0aXN1cGVyIG11bHRpc3VwZXJfY2xvbmUgJiYKKworCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIHN1Ym1vZHVsZSBpbml0IC0tIHN1YjAgc3ViMSAmJgorCWdpdCAtQyBtdWx0aXN1cGVyX2Nsb25lIGNvbmZpZyAtLWdldCBzdWJtb2R1bGUuc3ViMC5hY3RpdmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgbXVsdGlzdXBlcl9jbG9uZSBjb25maWcgLS1nZXQgc3VibW9kdWxlLnN1YjEuYWN0aXZlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBjbG9uZSByZXNwZWN0cyAtcScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG11bHRpc3VwZXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC1xIC0tcmVjdXJzZS1zdWJtb2R1bGVzIG11bHRpc3VwZXIgbXVsdGlzdXBlcl9jbG9uZSA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDEtc3VibW9kdWxlLXN1bW1hcnkuc2ggYi90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliYzg0MWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoCkBAIC0wLDAgKzEsMzA2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IFBpbmcgWWluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1N1bW1hcnkgc3VwcG9ydCBmb3Igc3VibW9kdWxlcworCitUaGlzIHRlc3QgdHJpZXMgdG8gdmVyaWZ5IHRoZSBzYW5pdHkgb2Ygc3VtbWFyeSBzdWJjb21tYW5kIG9mIGdpdCBzdWJtb2R1bGUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCithZGRfZmlsZSAoKSB7CisJc209JDEKKwlzaGlmdAorCW93ZD0kKHB3ZCkKKwljZCAiJHNtIgorCWZvciBuYW1lOyBkbworCQllY2hvICIkbmFtZSIgPiAiJG5hbWUiICYmCisJCWdpdCBhZGQgIiRuYW1lIiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkICRuYW1lIgorCWRvbmUgPi9kZXYvbnVsbAorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCB8IGN1dCAtYzEtNworCWNkICIkb3dkIgorfQorY29tbWl0X2ZpbGUgKCkgeworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgIiRAIiAtbSAiQ29tbWl0ICQqIiA+L2Rldi9udWxsCit9CisKK3Rlc3RfY3JlYXRlX3JlcG8gc20xICYmCithZGRfZmlsZSAuIGZvbyA+L2Rldi9udWxsCisKK2hlYWQxPSQoYWRkX2ZpbGUgc20xIGZvbzEgZm9vMikKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgc3VibW9kdWxlJyAiCisJZ2l0IGFkZCBzbTEgJiYKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAwMDAwMDAwLi4uJGhlYWQxICgyKToKKyAgPiBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgc3VibW9kdWxlIChzdWJkaXJlY3RvcnkpJyAiCisJbWtkaXIgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID4uLi9hY3R1YWwKKwkpICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogLi4vc20xIDAwMDAwMDAuLi4kaGVhZDEgKDIpOgorICA+IEFkZCBmb28yCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBzdWJtb2R1bGUgKHN1YmRpcmVjdG9yeSBvbmx5KScgIgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAuID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBzdWJtb2R1bGUgKHN1YmRpcmVjdG9yeSB3aXRoIGV4cGxpY2l0IHBhdGgpJyAiCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC4uL3NtMSA+Li4vYWN0dWFsCisJKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIC4uL3NtMSAwMDAwMDAwLi4uJGhlYWQxICgyKToKKyAgPiBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMj0kKGFkZF9maWxlIHNtMSBmb28zKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCknICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDEuLi4kaGVhZDIgKDEpOgorICA+IEFkZCBmb28zCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCksIC0tZmlsZXMnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1maWxlcyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkMS4uLiRoZWFkMiAoMSk6CisgID4gQWRkIGZvbzMKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGlnbm9yZT1hbGwgc2V0dGluZyBoYXMgYW55IGVmZmVjdCcgIgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnNtMS5wYXRoIHNtMSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnNtMS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc20xLmlnbm9yZSBhbGwgJiYKKwlnaXQgY29uZmlnIGRpZmYuaWdub3JlU3VibW9kdWxlcyBhbGwgJiYKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDEuLi4kaGVhZDIgKDEpOgorICA+IEFkZCBmb28zCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBjb25maWcgLS11bnNldCBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnNtMSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc20xCisiCisKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMz0kKAorCWNkIHNtMSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yID4vZGV2L251bGwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgfCBjdXQgLWMxLTcKKykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGJhY2t3YXJkKScgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkMi4uLiRoZWFkMyAoMik6CisgIDwgQWRkIGZvbzMKKyAgPCBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworaGVhZDQ9JChhZGRfZmlsZSBzbTEgZm9vNCBmb281KSAmJgoraGVhZDRfZnVsbD0kKEdJVF9ESVI9c20xLy5naXQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGJhY2t3YXJkIGFuZCBmb3J3YXJkKScgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkMi4uLiRoZWFkNCAoNCk6CisgID4gQWRkIGZvbzUKKyAgPiBBZGQgZm9vNAorICA8IEFkZCBmb28zCisgIDwgQWRkIGZvbzIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3VtbWFyeS1saW1pdCcgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtbiAzID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQyLi4uJGhlYWQ0ICg0KToKKyAgPiBBZGQgZm9vNQorICA+IEFkZCBmb280CisgIDwgQWRkIGZvbzMKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMSAmJgorbXYgc20xIHNtMS1iYWsgJiYKK2VjaG8gc20xID5zbTEgJiYKK2hlYWQ1PSQoZ2l0IGhhc2gtb2JqZWN0IHNtMSB8IGN1dCAtYzEtNykgJiYKK2dpdCBhZGQgc20xICYmCitybSAtZiBzbTEgJiYKK212IHNtMS1iYWsgc20xCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpLCAtLWNhY2hlZCcgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWNhY2hlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNChzdWJtb2R1bGUpLT4kaGVhZDUoYmxvYikgKDMpOgorICA8IEFkZCBmb281CisKK0VPRgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0ZWQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiksIC0tZmlsZXMnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1maWxlcyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNShibG9iKS0+JGhlYWQ0KHN1Ym1vZHVsZSkgKDMpOgorICA+IEFkZCBmb281CisKK0VPRgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0ZWQKKyIKKworcm0gLXJmIHNtMSAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiknICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDQoc3VibW9kdWxlKS0+JGhlYWQ1KGJsb2IpOgorCitFT0YKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdGVkCisiCisKK3JtIC1mIHNtMSAmJgordGVzdF9jcmVhdGVfcmVwbyBzbTEgJiYKK2hlYWQ2PSQoYWRkX2ZpbGUgc20xIGZvbzYgZm9vNykKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IGNvbW1pdCcgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNC4uLiRoZWFkNjoKKyAgV2Fybjogc20xIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJGhlYWQ0X2Z1bGwKKworRU9GCisJdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3RlZAorIgorCitjb21taXRfZmlsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKGJsb2ItPnN1Ym1vZHVsZSknICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDUoYmxvYiktPiRoZWFkNihzdWJtb2R1bGUpICgyKToKKyAgPiBBZGQgZm9vNworCitFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMSAmJgorcm0gLXJmIHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlZCBzdWJtb2R1bGUnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHNlY29uZCBzdWJtb2R1bGUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNtMiAmJgorCWhlYWQ3PSQoYWRkX2ZpbGUgc20yIGZvbzggZm9vOSkgJiYKKwlnaXQgYWRkIHNtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBzdWJtb2R1bGVzJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQ2Li4uMDAwMDAwMDoKKworKiBzbTIgMDAwMDAwMC4uLiRoZWFkNyAoMik6CisgID4gQWRkIGZvbzkKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggZmlsdGVyJyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IHNtMiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20yIDAwMDAwMDAuLi4kaGVhZDcgKDIpOgorICA+IEFkZCBmb285CisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCitjb21taXRfZmlsZSBzbTIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmVuIGNvbW1pdCcgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSBIRUFEXiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNi4uLjAwMDAwMDA6CisKKyogc20yIDAwMDAwMDAuLi4kaGVhZDcgKDIpOgorICA+IEFkZCBmb285CisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZvci1zdGF0dXMnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1mb3Itc3RhdHVzIEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIC0gPDxFT0YKKyogc20xICRoZWFkNi4uLjAwMDAwMDA6CisKKyogc20yIDAwMDAwMDAuLi4kaGVhZDcgKDIpOgorICA+IEFkZCBmb285CisKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHdoZW4gdXNpbmcgLS1maWxlcyB0b2dldGhlciB3aXRoIC0tY2FjaGVkJyAiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZmlsZXMgLS1jYWNoZWQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdWxkIG5vdCBmYWlsIGluIGFuIGVtcHR5IHJlcG8nICIKKwlnaXQgaW5pdCB4eXp6eSAmJgorCWNkIHh5enp5ICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAyLXN1Ym1vZHVsZS1yZWJhc2Uuc2ggYi90L3Q3NDAyLXN1Ym1vZHVsZS1yZWJhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGUzMmYxOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDItc3VibW9kdWxlLXJlYmFzZS5zaApAQCAtMCwwICsxLDExOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcmViYXNpbmcsIHN0YXNoaW5nLCBldGMuIHdpdGggc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBjbG9uZSAuIHN1Ym1vZHVsZSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzdWJtb2R1bGUgJiYKKwllY2hvIHNlY29uZCBsaW5lID4+IGZpbGUgJiYKKwkoY2Qgc3VibW9kdWxlICYmIGdpdCBwdWxsKSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZmlsZS1hbmQtc3VibW9kdWxlIC1hICYmCisJZ2l0IGJyYW5jaCBhZGRlZC1zdWJtb2R1bGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2l0aCBhIGRpcnR5IHN1Ym1vZHVsZScgJworCisJKGNkIHN1Ym1vZHVsZSAmJgorCSBlY2hvIDNyZCBsaW5lID4+IGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gZm9yayAtYSkgJiYKKwllY2hvIHVucmVsYXRlZCA+PiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVucmVsYXRlZCBmaWxlMiAmJgorCWVjaG8gb3RoZXIgbGluZSA+PiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1cGRhdGUgZmlsZSAmJgorCUNVUlJFTlQ9JChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCUVYUEVDVEVEPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjI6c3VibW9kdWxlKSAmJgorCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgLS1vbnRvIEhFQUR+MiBIRUFEXiAmJgorCVNUT1JFRD0kKGdpdCByZXYtcGFyc2UgSEVBRDpzdWJtb2R1bGUpICYmCisJdGVzdCAkRVhQRUNURUQgPSAkU1RPUkVEICYmCisJdGVzdCAkQ1VSUkVOVCA9ICQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKKworJworCitjYXQgPiBmYWtlLWVkaXRvci5zaCA8PCBcRU9GCisjIS9iaW4vc2gKK2VjaG8gJEVESVRPUl9URVhUCitFT0YKK2NobW9kIGEreCBmYWtlLWVkaXRvci5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmFjdGl2ZSByZWJhc2Ugd2l0aCBhIGRpcnR5IHN1Ym1vZHVsZScgJworCisJdGVzdCBzdWJtb2R1bGUgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5KSAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2hcIiIgRURJVE9SX1RFWFQ9InBpY2sgJEhFQUQiIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCXRlc3Qgc3VibW9kdWxlID0gJChnaXQgZGlmZiAtLW5hbWUtb25seSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2l0aCBkaXJ0eSBmaWxlIGFuZCBzdWJtb2R1bGUgZmFpbHMnICcKKworCWVjaG8geWV0IGFub3RoZXIgbGluZSA+PiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IGZpbGUgJiYKKwllY2hvIHJld3JpdGUgPiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByZXdyaXRlIGZpbGUgJiYKKwllY2hvIGRpcnR5ID4gZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIEhFQUR+MiBIRUFEXgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHdpdGggYSBkaXJ0eSBzdWJtb2R1bGUnICcKKworCWVjaG8gbmV3ID4gZmlsZSAmJgorCUNVUlJFTlQ9JChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3QgbmV3ICE9ICQoY2F0IGZpbGUpICYmCisJdGVzdCBzdWJtb2R1bGUgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5KSAmJgorCXRlc3QgJENVUlJFTlQgPSAkKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCBuZXcgPSAkKGNhdCBmaWxlKSAmJgorCXRlc3QgJENVUlJFTlQgPSAkKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNpbmcgc3VibW9kdWxlIHRoYXQgc2hvdWxkIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBhZGRlZC1zdWJtb2R1bGUgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZXh0cmEKKwkpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZvdXJ0aCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW9udG8gSEVBRF5eIEhFQUReIEhFQUReMCAmJgorCWdpdCBscy1maWxlcyAtcyBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWVjaG8gIjE2MDAwMCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pIDEJc3VibW9kdWxlIiAmJgorCQllY2hvICIxNjAwMDAgJChnaXQgcmV2LXBhcnNlIEhFQUReXikgMglzdWJtb2R1bGUiICYmCisJCWVjaG8gIjE2MDAwMCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgMwlzdWJtb2R1bGUiCisJKSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDMtc3VibW9kdWxlLXN5bmMuc2ggYi90L3Q3NDAzLXN1Ym1vZHVsZS1zeW5jLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3MjY3OTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDAzLXN1Ym1vZHVsZS1zeW5jLnNoCkBAIC0wLDAgKzEsMzUwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIEFndWlsYXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN1Ym1vZHVsZSBzeW5jCisKK1RoZXNlIHRlc3RzIGV4ZXJjaXNlIHRoZSAiZ2l0IHN1Ym1vZHVsZSBzeW5jIiBzdWJjb21tYW5kLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBmaWxlID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1cHN0cmVhbSAmJgorCWdpdCBjbG9uZSAuIHN1cGVyICYmCisJZ2l0IGNsb25lIHN1cGVyIHN1Ym1vZHVsZSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWItc3VibW9kdWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJzdWItc3VibW9kdWxlIgorCSkgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJtb2R1bGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSIKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIHN1cGVyLWNsb25lICYmCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIGVtcHR5LWNsb25lICYmCisJKAorCQljZCBlbXB0eS1jbG9uZSAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIHRvcC1vbmx5LWNsb25lICYmCisJZ2l0IGNsb25lIHN1cGVyIHJlbGF0aXZlLWNsb25lICYmCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIHJlY3Vyc2l2ZS1jbG9uZSAmJgorCSgKKwkJY2QgcmVjdXJzaXZlLWNsb25lICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIHN1Ym1vZHVsZScgJworCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWVjaG8gc2Vjb25kIGxpbmUgPj5maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2Ugc3VibW9kdWxlIgorCSkKKycKKworcmVzZXRfc3VibW9kdWxlX3VybHMgKCkgeworCSgKKwkJcm9vdD0kKHB3ZCkgJiYKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgIiRyb290L3N1Ym1vZHVsZSIKKwkpICYmCisJKAorCQlyb290PSQocHdkKSAmJgorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsICIkcm9vdC9zdWJtb2R1bGUiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc3VibW9kdWxlIHVybCcgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJY2Qgc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJbXYgc3VibW9kdWxlIG1vdmVkLXN1Ym1vZHVsZSAmJgorCSgKKwkJY2QgbW92ZWQtc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi1zdWJtb2R1bGUudXJsIC4uL21vdmVkLXN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBtb3ZlZC1zdWItc3VibW9kdWxlCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCAuLi9tb3ZlZC1zdWJtb2R1bGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gbW92ZWQtc3VibW9kdWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBzaG91bGQgdXBkYXRlIHN1Ym1vZHVsZSBVUkxzJyAnCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQlnaXQgcHVsbCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMKKwkpICYmCisJdGVzdCAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCXRlc3QgISAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcHVsbAorCSkgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCXRlc3QgLWQgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIC0tcmVjdXJzaXZlIiBzaG91bGQgdXBkYXRlIGFsbCBzdWJtb2R1bGUgVVJMcycgJworCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgcHVsbCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcworCQkpICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAtLXJlY3Vyc2l2ZQorCSkgJiYKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJdGVzdCAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBwdWxsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBzdWJtb2R1bGUgVVJMcycgJworCXJlc2V0X3N1Ym1vZHVsZV91cmxzIHN1cGVyLWNsb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIHNob3VsZCB1cGRhdGUgc3VibW9kdWxlIFVSTHMgLSBzdWJkaXJlY3RvcnknICcKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCWdpdCBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzICYmCisJCW1rZGlyIC1wIHN1YiAmJgorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jID4uLi8uLi9vdXRwdXQKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiXFwuXFwuL3N1Ym1vZHVsZSIgb3V0cHV0ICYmCisJdGVzdCAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwKKwkpIiAmJgorCXRlc3QgISAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcHVsbAorCSkgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCXRlc3QgLWQgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIC0tcmVjdXJzaXZlIiBzaG91bGQgdXBkYXRlIGFsbCBzdWJtb2R1bGUgVVJMcyAtIHN1YmRpcmVjdG9yeScgJworCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgcHVsbCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcworCQkpICYmCisJCW1rZGlyIC1wIHN1YiAmJgorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jIC0tcmVjdXJzaXZlID4uLi8uLi9vdXRwdXQKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiXFwuXFwuL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlIiBvdXRwdXQgJiYKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJdGVzdCAtZCAiJCgKKwkJY2Qgc3VwZXItY2xvbmUvc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBwdWxsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBzaG91bGQgdXBkYXRlIGtub3duIHN1Ym1vZHVsZSBVUkxzJyAnCisJKAorCQljZCBlbXB0eS1jbG9uZSAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJdGVzdCAtZCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIHNob3VsZCBub3Qgdml2aWZ5IHVuaW50ZXJlc3Rpbmcgc3VibW9kdWxlJyAnCisJKAorCQljZCB0b3Atb25seS1jbG9uZSAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJdGVzdCAteiAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jIHN1Ym1vZHVsZSAmJgorCQl0ZXN0IC16ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIGZvbycgJworCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiBmb28gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCBmYWlscyB3aXRoOiAiY2Fubm90IHN0cmlwIG9mZiB1cmwgZm9vCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9zdWJtb2R1bGUiCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSBmb28vYmFyJyAnCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIGZvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCBmb28vc3VibW9kdWxlCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9mb28vc3VibW9kdWxlIgorCQkpICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiAhPSAiLi4vLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyAtLXJlY3Vyc2l2ZSIgcHJvcGFnYXRlcyBjaGFuZ2VzIGluIG9yaWdpbicgJworCSgKKwkJY2QgcmVjdXJzaXZlLWNsb25lICYmCisJCWdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQkjYWN0dWFsIGZvby9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL2Zvby9zdWJtb2R1bGUiCisJCSkgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uLy4uL2Zvby9zdWJtb2R1bGUiCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSAuL2ZvbycgJworCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuL2ZvbyAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQkjYWN0dWFsIC4vc3VibW9kdWxlCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9zdWJtb2R1bGUiCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSAuL2Zvby9iYXInICcKKwkoCisJCWNkIHJlbGF0aXZlLWNsb25lICYmCisJCWdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi9mb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgLi9mb28vc3VibW9kdWxlCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi9mb28vc3VibW9kdWxlIgorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gLi4vZm9vJyAnCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4uL2ZvbyAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQkjYWN0dWFsIC4uL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vc3VibW9kdWxlIgorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gLi4vZm9vL2JhcicgJworCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuLi9mb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgLi4vZm9vL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4uL2Zvby9iYXIgd2l0aCBkZWVwbHkgbmVzdGVkIHN1Ym1vZHVsZScgJworCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuLi9mb28vYmFyICYmCisJCW1rZGlyIC1wIGEvYi9jICYmCisJCSgKKwkJCWNkIGEvYi9jICYmCisJCQlnaXQgaW5pdCAmJgorCQkJPi5naXRpZ25vcmUgJiYKKwkJCWdpdCBhZGQgLmdpdGlnbm9yZSAmJgorCQkJdGVzdF90aWNrICYmCisJCQlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIKKwkJKSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9iYXIvYS9iL2MgLi9hL2IvYyAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJKAorCQkJY2QgYS9iL2MgJiYKKwkJCSNhY3R1YWwgLi4vZm9vL2Jhci9hL2IvYworCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vLi4vLi4vZm9vL2Jhci9hL2IvYyIKKwkJKQorCSkKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDUtc3VibW9kdWxlLW1lcmdlLnNoIGIvdC90NzQwNS1zdWJtb2R1bGUtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWEzMzk3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDUtc3VibW9kdWxlLW1lcmdlLnNoCkBAIC0wLDAgKzEsNDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2luZyB3aXRoIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjCisjIGhpc3RvcnkKKyMKKyMgICAgICAgIGEgLS0tIGMKKyMgICAgICAvICAgXCAvCisjIHJvb3QgICAgICBYCisjICAgICAgXCAgIC8gXAorIyAgICAgICAgYiAtLS0gZAorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1rZGlyIHN1YiAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZWNobyBvcmlnaW5hbCA+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tIHN1Yi1yb290KSAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByb290ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYSBtYXN0ZXIgJiYKKwkoY2Qgc3ViICYmCisJIGVjaG8gQSA+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tIHN1Yi1hKSAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBhICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYiBtYXN0ZXIgJiYKKwkoY2Qgc3ViICYmCisJIGVjaG8gQiA+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tIHN1Yi1iKSAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYyBhICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgYiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGQgYiAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIGEKKycKKworIyBIaXN0b3J5IHNldHVwCisjCisjICAgICAgICAgICAgIGIKKyMgICAgICAgICAgIC8gICBcCisjICBpbml0IC0tIGEgICAgIGQKKyMgICAgXCAgICAgIFwgICAvCisjICAgICBnICAgICAgIGMKKyMKKyMgYSBpbiB0aGUgbWFpbiByZXBvc2l0b3J5IHJlY29yZHMgdG8gc3ViLWEgaW4gdGhlIHN1Ym1vZHVsZSBhbmQKKyMgYW5hbG9nb3VzIGIgYW5kIGMuIGQgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgZm91bmQgYnkgbWVyZ2luZyBjIGludG8KKyMgYiBpbiB0aGUgbWFpbiByZXBvc2l0b3J5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIG1lcmdlIHNlYXJjaCcgJworCW1rZGlyIG1lcmdlLXNlYXJjaCAmJgorCShjZCBtZXJnZS1zZWFyY2ggJiYKKwlnaXQgaW5pdCAmJgorCW1rZGlyIHN1YiAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZWNobyAiZmlsZS1hIiA+IGZpbGUtYSAmJgorCSBnaXQgYWRkIGZpbGUtYSAmJgorCSBnaXQgY29tbWl0IC1tICJzdWItYSIgJiYKKwkgZ2l0IGJyYW5jaCBzdWItYSkgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdCAmJgorCWdpdCBicmFuY2ggaW5pdCAmJgorCWdpdCBhZGQgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiYSIgJiYKKwlnaXQgYnJhbmNoIGEgJiYKKworCWdpdCBjaGVja291dCAtYiBiICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgc3ViLWIgJiYKKwkgZWNobyAiZmlsZS1iIiA+IGZpbGUtYiAmJgorCSBnaXQgYWRkIGZpbGUtYiAmJgorCSBnaXQgY29tbWl0IC1tICJzdWItYiIpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYiIgJiYKKworCWdpdCBjaGVja291dCAtYiBjIGEgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCAtYiBzdWItYyBzdWItYSAmJgorCSBlY2hvICJmaWxlLWMiID4gZmlsZS1jICYmCisJIGdpdCBhZGQgZmlsZS1jICYmCisJIGdpdCBjb21taXQgLW0gInN1Yi1jIikgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJjIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGQgYSAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1kIHN1Yi1iICYmCisJIGdpdCBtZXJnZSBzdWItYykgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJkIiAmJgorCWdpdCBicmFuY2ggdGVzdCBiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZyBpbml0ICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgc3ViLWcgc3ViLWMpICYmCisJZ2l0IGFkZCBzdWIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJnIikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2l0aCBvbmUgc2lkZSBhcyBhIGZhc3QtZm9yd2FyZCBvZiB0aGUgb3RoZXInICcKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJIGdpdCBjaGVja291dCAtYiB0ZXN0LWZvcndhcmQgYiAmJgorCSBnaXQgbWVyZ2UgZCAmJgorCSBnaXQgbHMtdHJlZSB0ZXN0LWZvcndhcmQgc3ViIHwgY3V0IC1mMSB8IGN1dCAtZjMgLWQiICIgPiBhY3R1YWwgJiYKKwkgKGNkIHN1YiAmJgorCSAgZ2l0IHJldi1wYXJzZSBzdWItZCA+IC4uL2V4cGVjdCkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyBzaG91bGQgY29uZmxpY3QgZm9yIG5vbiBmYXN0LWZvcndhcmQnICcKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJIGdpdCBjaGVja291dCAtYiB0ZXN0LW5vbmZvcndhcmQgYiAmJgorCSAoY2Qgc3ViICYmCisJICBnaXQgcmV2LXBhcnNlIHN1Yi1kID4gLi4vZXhwZWN0KSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYyAyPiBhY3R1YWwgICYmCisJIGdyZXAgJChjYXQgZXhwZWN0KSBhY3R1YWwgPiAvZGV2L251bGwgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyBzaG91bGQgZmFpbCBmb3IgYW1iaWd1b3VzIGNvbW1vbiBwYXJlbnQnICcKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QtYW1iaWd1b3VzIGIgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCAtYiBhbWJpZ3VvdXMgc3ViLWIgJiYKKwkgZ2l0IG1lcmdlIHN1Yi1jICYmCisJIGdpdCByZXYtcGFyc2Ugc3ViLWQgPiAuLi9leHBlY3QxICYmCisJIGdpdCByZXYtcGFyc2UgYW1iaWd1b3VzID4gLi4vZXhwZWN0MikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYyAyPiBhY3R1YWwgJiYKKwlncmVwICQoY2F0IGV4cGVjdDEpIGFjdHVhbCA+IC9kZXYvbnVsbCAmJgorCWdyZXAgJChjYXQgZXhwZWN0MikgYWN0dWFsID4gL2Rldi9udWxsICYmCisJZ2l0IHJlc2V0IC0taGFyZCkKKycKKworIyBpbiBhIHNpdHVhdGlvbiBsaWtlIHRoaXMKKyMKKyMgc3VibW9kdWxlIHRyZWU6CisjCisjICAgIHN1Yi1hIC0tLSBzdWItYiAtLS0gc3ViLWQKKyMKKyMgbWFpbiB0cmVlOgorIworIyAgICBlIChzdWItYSkKKyMgICAvCisjICBiYiAoc3ViLWIpCisjICAgXAorIyAgICBmIChzdWItZCkKKyMKKyMgQSBtZXJnZSBiZXR3ZWVuIGUgYW5kIGYgc2hvdWxkIGZhaWwgYmVjYXVzZSBvbmUgb2YgdGhlIHN1Ym1vZHVsZQorIyBjb21taXRzIChzdWItYSkgZG9lcyBub3QgZGVzY2VuZCBmcm9tIHRoZSBzdWJtb2R1bGUgbWVyZ2UtYmFzZSAoc3ViLWIpLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyBzaG91bGQgZmFpbCBmb3IgY2hhbmdlcyB0aGF0IGFyZSBiYWNrd2FyZHMnICcKKwkoY2QgbWVyZ2Utc2VhcmNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJiIGEgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCBzdWItYikgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJiYiIgJiYKKworCWdpdCBjaGVja291dCAtYiBlIGJiICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgc3ViLWEpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZSIgJiYKKworCWdpdCBjaGVja291dCAtYiBmIGJiICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgc3ViLWQpICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZiIgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0LWJhY2t3YXJkIGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZikKKycKKworCisjIENoZWNrIHRoYXQgdGhlIGNvbmZsaWN0aW5nIHN1Ym1vZHVsZSBpcyBkZXRlY3RlZCB3aGVuIGl0IGlzCisjIGluIHRoZSBjb21tb24gYW5jZXN0b3IuIHN0YXR1cyBzaG91bGQgYmUgJ1UwMC4uLjAwIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgc2hvdWxkIGRpc3BsYXkgdGhlIG1lcmdlIGNvbmZsaWN0IHByb3Blcmx5IHdpdGggbWVyZ2UgYmFzZScgJworICAgICAgIChjZCBtZXJnZS1zZWFyY2ggJiYKKyAgICAgICBjYXQgPi5naXRtb2R1bGVzIDw8RU9GICYmCitbc3VibW9kdWxlICJzdWIiXQorICAgICAgIHBhdGggPSBzdWIKKyAgICAgICB1cmwgPSAkVFJBU0hfRElSRUNUT1JZL3N1YgorRU9GCisgICAgICAgY2F0ID5leHBlY3QgPDxFT0YgJiYKK1UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHN1YgorRU9GCisgICAgICAgZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPiBhY3R1YWwgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCkKKycKKworIyBDaGVjayB0aGF0IHRoZSBjb25mbGljdGluZyBzdWJtb2R1bGUgaXMgZGV0ZWN0ZWQgd2hlbiBpdCBpcworIyBub3QgaW4gdGhlIGNvbW1vbiBhbmNlc3Rvci4gc3RhdHVzIHNob3VsZCBiZSAnVTAwLi4uMDAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3VibW9kdWxlIHN0YXR1cyBzaG91bGQgZGlzcGxheSB0aGUgbWVyZ2UgY29uZmxpY3QgcHJvcGVybHkgd2l0aG91dCBtZXJnZS1iYXNlJyAnCisgICAgICAgKGNkIG1lcmdlLXNlYXJjaCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0LW5vLW1lcmdlLWJhc2UgZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBiICYmCisgICAgICAgY2F0ID4uZ2l0bW9kdWxlcyA8PEVPRiAmJgorW3N1Ym1vZHVsZSAic3ViIl0KKyAgICAgICBwYXRoID0gc3ViCisgICAgICAgdXJsID0gJFRSQVNIX0RJUkVDVE9SWS9zdWIKK0VPRgorICAgICAgIGNhdCA+ZXhwZWN0IDw8RU9GICYmCitVMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBzdWIKK0VPRgorICAgICAgIGdpdCBzdWJtb2R1bGUgc3RhdHVzID4gYWN0dWFsICYmCisgICAgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgICAgIGdpdCByZXNldCAtLWhhcmQpCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyB3aXRoIGEgbW9kaWZ5L21vZGlmeSBjb25mbGljdCBiZXR3ZWVuIG1lcmdlIGJhc2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QyIGMgJiYKKwlnaXQgbWVyZ2UgZAorJworCisjIGNhbm9uaWNhbCBjcmlzcy1jcm9zcyBoaXN0b3J5IGluIHRvcCBhbmQgc3VibW9kdWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgcmVjdXJzaXZlIG1lcmdlIHdpdGggc3VibW9kdWxlJyAnCisJbWtkaXIgbWVyZ2UtcmVjdXJzaXZlICYmCisJKGNkIG1lcmdlLXJlY3Vyc2l2ZSAmJgorCSBnaXQgaW5pdCAmJgorCSBta2RpciBzdWIgJiYKKwkgKGNkIHN1YiAmJgorCSAgZ2l0IGluaXQgJiYKKwkgIHRlc3RfY29tbWl0IGEgJiYKKwkgIGdpdCBjaGVja291dCAtYiBzdWItYiBtYXN0ZXIgJiYKKwkgIHRlc3RfY29tbWl0IGIgJiYKKwkgIGdpdCBjaGVja291dCAtYiBzdWItYyBtYXN0ZXIgJiYKKwkgIHRlc3RfY29tbWl0IGMgJiYKKwkgIGdpdCBjaGVja291dCAtYiBzdWItYmMgc3ViLWIgJiYKKwkgIGdpdCBtZXJnZSBzdWItYyAmJgorCSAgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1jYiBzdWItYyAmJgorCSAgZ2l0IG1lcmdlIHN1Yi1iICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyKSAmJgorCSBnaXQgYWRkIHN1YiAmJgorCSBnaXQgY29tbWl0IC1tIGEgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHRvcC1iIG1hc3RlciAmJgorCSAoY2Qgc3ViICYmIGdpdCBjaGVja291dCBzdWItYikgJiYKKwkgZ2l0IGFkZCBzdWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBiICYmCisJIGdpdCBjaGVja291dCAtYiB0b3AtYyBtYXN0ZXIgJiYKKwkgKGNkIHN1YiAmJiBnaXQgY2hlY2tvdXQgc3ViLWMpICYmCisJIGdpdCBhZGQgc3ViICYmCisJIGdpdCBjb21taXQgLW0gYyAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdG9wLWJjIHRvcC1iICYmCisJIGdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IHRvcC1jICYmCisJIChjZCBzdWIgJiYgZ2l0IGNoZWNrb3V0IHN1Yi1iYykgJiYKKwkgZ2l0IGFkZCBzdWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBiYyAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdG9wLWNiIHRvcC1jICYmCisJIGdpdCBtZXJnZSAtcyBvdXJzIC0tbm8tY29tbWl0IHRvcC1iICYmCisJIChjZCBzdWIgJiYgZ2l0IGNoZWNrb3V0IHN1Yi1jYikgJiYKKwkgZ2l0IGFkZCBzdWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBjYikKKycKKworIyBtZXJnZSBzaG91bGQgbGVhdmUgc3VibW9kdWxlIHVubWVyZ2VkIGluIGluZGV4Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgbWVyZ2Ugd2l0aCBzdWJtb2R1bGUnICcKKwkoY2QgbWVyZ2UtcmVjdXJzaXZlICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0b3AtYmMgJiYKKwkgZWNobyAiMTYwMDAwICQoZ2l0IHJldi1wYXJzZSB0b3AtY2I6c3ViKSAyCXN1YiIgPiBleHBlY3QyICYmCisJIGVjaG8gIjE2MDAwMCAkKGdpdCByZXYtcGFyc2UgdG9wLWJjOnN1YikgMwlzdWIiID4gZXhwZWN0MyAmJgorCSBnaXQgbHMtZmlsZXMgLXUgPiBhY3R1YWwgJiYKKwkgZ3JlcCAiJChjYXQgZXhwZWN0MikiIGFjdHVhbCA+IC9kZXYvbnVsbCAmJgorCSBncmVwICIkKGNhdCBleHBlY3QzKSIgYWN0dWFsID4gL2Rldi9udWxsKQorJworCisjIEZpbGUvc3VibW9kdWxlIGNvbmZsaWN0CisjICAgQ29tbWl0IE86IDxlbXB0eT4KKyMgICBDb21taXQgQTogcGF0aCAoc3VibW9kdWxlKQorIyAgIENvbW1pdCBCOiBwYXRoCisjICAgRXhwZWN0ZWQ6IHBhdGgvIGlzIHN1Ym1vZHVsZSBhbmQgZmlsZSBjb250ZW50cyBmb3IgQidzIHBhdGggYXJlIHNvbWV3aGVyZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmaWxlL3N1Ym1vZHVsZSBjb25mbGljdCcgJworCXRlc3RfY3JlYXRlX3JlcG8gZmlsZS1zdWJtb2R1bGUgJiYKKwkoCisJCWNkIGZpbGUtc3VibW9kdWxlICYmCisKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIE8gJiYKKworCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJZWNobyBjb250ZW50ID5wYXRoICYmCisJCWdpdCBhZGQgcGF0aCAmJgorCQlnaXQgY29tbWl0IC1tIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQl0ZXN0X2NyZWF0ZV9yZXBvIHBhdGggJiYKKwkJdGVzdF9jb21taXQgLUMgcGF0aCB3b3JsZCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuL3BhdGggJiYKKwkJZ2l0IGNvbW1pdCAtbSBBCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdmaWxlL3N1Ym1vZHVsZSBjb25mbGljdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGZpbGUtc3VibW9kdWxlIHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCWNkIGZpbGUtc3VibW9kdWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKworCQkjIHBhdGgvIGlzIHN0aWxsIGEgc3VibW9kdWxlCisJCXRlc3RfcGF0aF9pc19kaXIgcGF0aC8uZ2l0ICYmCisKKwkJIyBUaGVyZSBpcyBhIHN1Ym1vZHVsZSBhdCAicGF0aCIsIHNvIEI6cGF0aCBjYW5ub3QgYmUgd3JpdHRlbgorCQkjIHRoZXJlLiAgV2UgZXhwZWN0IGl0IHRvIGJlIHdyaXR0ZW4gc29tZXdoZXJlIGluIHRoZSBzYW1lCisJCSMgZGlyZWN0b3J5LCB0aG91Z2gsIHNvIGp1c3QgZ3JlcCBmb3IgaXRzIGNvbnRlbnQgaW4gYWxsCisJCSMgZmlsZXMsIGFuZCBpZ25vcmUgImdyZXA6IHBhdGg6IElzIGEgZGlyZWN0b3J5IiBtZXNzYWdlCisJCWVjaG8gQ2hlY2tpbmcgaWYgY29udGVudHMgZnJvbSBCOnBhdGggc2hvd2VkIHVwIGFueXdoZXJlICYmCisJCWdyZXAgLXEgY29udGVudCAqIDI+L2Rldi9udWxsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlL3N1Ym1vZHVsZSBjb25mbGljdDsgbWVyZ2UgLS1hYm9ydCB3b3JrcyBhZnRlcndhcmQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBmaWxlLXN1Ym1vZHVsZSByZXNldCAtLWhhcmQiICYmCisJKAorCQljZCBmaWxlLXN1Ym1vZHVsZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEJeMCA+b3V0IDI+ZXJyICYmCisKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9NRVJHRV9IRUFEICYmCisJCWdpdCBtZXJnZSAtLWFib3J0CisJKQorJworCisjIERpcmVjdG9yeS9zdWJtb2R1bGUgY29uZmxpY3QKKyMgICBDb21taXQgTzogPGVtcHR5PgorIyAgIENvbW1pdCBBOiBwYXRoIChzdWJtb2R1bGUpLCB3aXRoIHNvbGUgdHJhY2tlZCBmaWxlIG5hbWVkICd3b3JsZCcKKyMgICBDb21taXQgQjE6IHBhdGgvZmlsZQorIyAgIENvbW1pdCBCMjogcGF0aC93b3JsZAorIworIyAgIEV4cGVjdGVkIGZyb20gbWVyZ2Ugb2YgQSAmIEIxOgorIyAgICAgQ29udGVudHMgdW5kZXIgcGF0aC8gZnJvbSBjb21taXQgQjEgYXJlIHJlbmFtZWQgZWxzZXdoZXJlOyB3ZSBkbyBub3QKKyMgICAgIHdhbnQgdG8gd3JpdGUgZmlsZXMgZnJvbSBvbmUgb2Ygb3VyIHRyYWNrZWQgZGlyZWN0b3JpZXMgaW50byBhIHN1Ym1vZHVsZQorIworIyAgIEV4cGVjdGVkIGZyb20gbWVyZ2Ugb2YgQSAmIEIyOgorIyAgICAgU2ltaWxhciB0byBsYXN0IG1lcmdlLCBidXQgd2l0aCBhIHNsaWdodCB0d2lzdDogd2UgZG9uJ3Qgd2FudCBwYXRocworIyAgICAgdW5kZXIgdGhlIHN1Ym1vZHVsZSB0byBiZSB0cmVhdGVkIGFzIHVudHJhY2tlZCBvciBpbiB0aGUgd2F5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaXJlY3Rvcnkvc3VibW9kdWxlIGNvbmZsaWN0JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBkaXJlY3Rvcnktc3VibW9kdWxlICYmCisJKAorCQljZCBkaXJlY3Rvcnktc3VibW9kdWxlICYmCisKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIE8gJiYKKworCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCMSAmJgorCQlnaXQgYnJhbmNoIEIyICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIxICYmCisJCW1rZGlyIHBhdGggJiYKKwkJZWNobyBjb250ZW50cyA+cGF0aC9maWxlICYmCisJCWdpdCBhZGQgcGF0aC9maWxlICYmCisJCWdpdCBjb21taXQgLW0gQjEgJiYKKworCQlnaXQgY2hlY2tvdXQgQjIgJiYKKwkJbWtkaXIgcGF0aCAmJgorCQllY2hvIGNvbnRlbnRzID5wYXRoL3dvcmxkICYmCisJCWdpdCBhZGQgcGF0aC93b3JsZCAmJgorCQlnaXQgY29tbWl0IC1tIEIyICYmCisKKwkJZ2l0IGNoZWNrb3V0IEEgJiYKKwkJdGVzdF9jcmVhdGVfcmVwbyBwYXRoICYmCisJCXRlc3RfY29tbWl0IC1DIHBhdGggaGVsbG8gd29ybGQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9wYXRoICYmCisJCWdpdCBjb21taXQgLW0gQQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZGlyZWN0b3J5L3N1Ym1vZHVsZSBjb25mbGljdDsga2VlcCBzdWJtb2R1bGUgY2xlYW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3Rvcnktc3VibW9kdWxlIHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCWNkIGRpcmVjdG9yeS1zdWJtb2R1bGUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBCMV4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBvdXQgJiYKKwkJZ2l0IGxzLWZpbGVzIC11ID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQgJiYKKworCQkjIHBhdGgvIGlzIHN0aWxsIGEgc3VibW9kdWxlCisJCXRlc3RfcGF0aF9pc19kaXIgcGF0aC8uZ2l0ICYmCisKKwkJZWNobyBDaGVja2luZyBpZiBjb250ZW50cyBmcm9tIEIxOnBhdGgvZmlsZSBzaG93ZWQgdXAgJiYKKwkJIyBXb3VsZCByYXRoZXIgdXNlIGdyZXAgLXIsIGJ1dCB0aGF0IGlzIEdOVSBleHRlbnNpb24uLi4KKwkJZ2l0IGxzLWZpbGVzIC1jbyB8IHhhcmdzIGdyZXAgLXEgY29udGVudHMgMj4vZGV2L251bGwgJiYKKworCQkjIEhvd2V2ZXIsIEIxOnBhdGgvZmlsZSBzaG91bGQgTk9UIGhhdmUgc2hvd24gdXAgYXQgcGF0aC9maWxlLAorCQkjIGJlY2F1c2Ugd2Ugc2hvdWxkIG5vdCB3cml0ZSBpbnRvIHRoZSBzdWJtb2R1bGUKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgcGF0aC9maWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICFGQUlMX1BSRVJFUVMgJ2RpcmVjdG9yeS9zdWJtb2R1bGUgY29uZmxpY3Q7IHNob3VsZCBub3QgdHJlYXQgc3VibW9kdWxlIGZpbGVzIGFzIHVudHJhY2tlZCBvciBpbiB0aGUgd2F5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGlyZWN0b3J5LXN1Ym1vZHVsZS9wYXRoIHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBkaXJlY3Rvcnktc3VibW9kdWxlIHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCWNkIGRpcmVjdG9yeS1zdWJtb2R1bGUgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBCMl4wID5vdXQgMj5lcnIgJiYKKworCQkjIFdlIGRvIG5vdCB3YW50IGZpbGVzIHdpdGhpbiB0aGUgc3VibW9kdWxlIHRvIHByZXZlbnQgdGhlCisJCSMgbWVyZ2UgZnJvbSBzdGFydGluZzsgd2Ugc2hvdWxkIG5vdCBiZSB3cml0aW5nIHRvIHN1Y2ggcGF0aHMKKwkJIyBhbnl3YXkuCisJCXRlc3RfaTE4bmdyZXAgISAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCIgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkaXJlY3Rvcnkvc3VibW9kdWxlIGNvbmZsaWN0OyBtZXJnZSAtLWFib3J0IHdvcmtzIGFmdGVyd2FyZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIGRpcmVjdG9yeS1zdWJtb2R1bGUvcGF0aCByZXNldCAtLWhhcmQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgZGlyZWN0b3J5LXN1Ym1vZHVsZSByZXNldCAtLWhhcmQiICYmCisJKAorCQljZCBkaXJlY3Rvcnktc3VibW9kdWxlICYmCisKKwkJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQjJeMCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L01FUkdFX0hFQUQgJiYKKworCQkjIG1lcmdlIC0tYWJvcnQgc2hvdWxkIHN1Y2NlZWQsIHNob3VsZCBjbGVhciAuZ2l0L01FUkdFX0hFQUQsCisJCSMgYW5kIHNob3VsZCBub3QgbGVhdmUgYmVoaW5kIGFueSBjb25mbGljdGVkIGZpbGVzCisJCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCQlnaXQgbHMtZmlsZXMgLXUgPmNvbmZsaWN0cyAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgY29uZmxpY3RzCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaCBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZmI0NDdhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoCkBAIC0wLDAgKzEsMTAwOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBSZWQgSGF0LCBJbmMuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdXBkYXRpbmcgc3VibW9kdWxlcworCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGRldGFjaGVzIHRoZSBIRUFEIG9mIHRoZQorc3VibW9kdWxlIGFuZCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2UvLS1tZXJnZSIgZG9lcyBub3QgZGV0YWNoIHRoZSBIRUFELgorJworCisuIC4vdGVzdC1saWIuc2gKKworCitjb21wYXJlX2hlYWQoKQoreworICAgIHNoYV9tYXN0ZXI9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBtYXN0ZXIpCisgICAgc2hhX2hlYWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKQorCisgICAgdGVzdCAiJHNoYV9tYXN0ZXIiID0gIiRzaGFfaGVhZCIKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHN1Ym1vZHVsZSB0cmVlJyAnCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBzdHJlYW0gJiYKKwlnaXQgY2xvbmUgLiBzdXBlciAmJgorCWdpdCBjbG9uZSBzdXBlciBzdWJtb2R1bGUgJiYKKwlnaXQgY2xvbmUgc3VwZXIgcmViYXNpbmcgJiYKKwlnaXQgY2xvbmUgc3VwZXIgbWVyZ2luZyAmJgorCWdpdCBjbG9uZSBzdXBlciBub25lICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJtb2R1bGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IHN1Ym1vZHVsZQorCSkgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJZWNobyAibGluZTIiID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1pdCAyIgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IHB1bGwgLS1yZWJhc2Ugb3JpZ2luCisJICkgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIHVwZGF0ZSIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3JlYmFzaW5nIHJlYmFzaW5nICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tICJyZWJhc2luZyIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL21lcmdpbmcgbWVyZ2luZyAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAicmViYXNpbmciCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9ub25lIG5vbmUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gIm5vbmUiCisJKSAmJgorCWdpdCBjbG9uZSAuIHJlY3Vyc2l2ZXN1cGVyICYmCisJKCBjZCByZWN1cnNpdmVzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdXBlciBzdXBlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBkZXRhY2hpbmcgdGhlIEhFQUQgJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBmcm9tIHN1YmRpcmVjdG9yeScgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJbWtkaXIgc3VwZXIvc3ViICYmCisJKGNkIHN1cGVyL3N1YiAmJgorCSAoY2QgLi4vc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAuLi9zdWJtb2R1bGUgJiYKKwkgY2QgLi4vc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCitzdXBlcnNoYTE9JChnaXQgLUMgc3VwZXIgcmV2LXBhcnNlIEhFQUQpCittZXJnaW5nc2hhMT0kKGdpdCAtQyBzdXBlci9tZXJnaW5nIHJldi1wYXJzZSBIRUFEKQorbm9uZXNoYTE9JChnaXQgLUMgc3VwZXIvbm9uZSByZXYtcGFyc2UgSEVBRCkKK3JlYmFzaW5nc2hhMT0kKGdpdCAtQyBzdXBlci9yZWJhc2luZyByZXYtcGFyc2UgSEVBRCkKK3N1Ym1vZHVsZXNoYTE9JChnaXQgLUMgc3VwZXIvc3VibW9kdWxlIHJldi1wYXJzZSBIRUFEKQorcHdkPSQocHdkKQorCitjYXQgPDxFT0YgPmV4cGVjdAorU3VibW9kdWxlIHBhdGggJy4uL3N1cGVyJzogY2hlY2tlZCBvdXQgJyRzdXBlcnNoYTEnCitTdWJtb2R1bGUgcGF0aCAnLi4vc3VwZXIvbWVyZ2luZyc6IGNoZWNrZWQgb3V0ICckbWVyZ2luZ3NoYTEnCitTdWJtb2R1bGUgcGF0aCAnLi4vc3VwZXIvbm9uZSc6IGNoZWNrZWQgb3V0ICckbm9uZXNoYTEnCitTdWJtb2R1bGUgcGF0aCAnLi4vc3VwZXIvcmViYXNpbmcnOiBjaGVja2VkIG91dCAnJHJlYmFzaW5nc2hhMScKK1N1Ym1vZHVsZSBwYXRoICcuLi9zdXBlci9zdWJtb2R1bGUnOiBjaGVja2VkIG91dCAnJHN1Ym1vZHVsZXNoYTEnCitFT0YKKworY2F0IDw8RU9GID5leHBlY3QyCitDbG9uaW5nIGludG8gJyRwd2QvcmVjdXJzaXZlc3VwZXIvc3VwZXIvbWVyZ2luZycuLi4KK0Nsb25pbmcgaW50byAnJHB3ZC9yZWN1cnNpdmVzdXBlci9zdXBlci9ub25lJy4uLgorQ2xvbmluZyBpbnRvICckcHdkL3JlY3Vyc2l2ZXN1cGVyL3N1cGVyL3JlYmFzaW5nJy4uLgorQ2xvbmluZyBpbnRvICckcHdkL3JlY3Vyc2l2ZXN1cGVyL3N1cGVyL3N1Ym1vZHVsZScuLi4KK1N1Ym1vZHVsZSAnbWVyZ2luZycgKCRwd2QvbWVyZ2luZykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnLi4vc3VwZXIvbWVyZ2luZycKK1N1Ym1vZHVsZSAnbm9uZScgKCRwd2Qvbm9uZSkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnLi4vc3VwZXIvbm9uZScKK1N1Ym1vZHVsZSAncmViYXNpbmcnICgkcHdkL3JlYmFzaW5nKSByZWdpc3RlcmVkIGZvciBwYXRoICcuLi9zdXBlci9yZWJhc2luZycKK1N1Ym1vZHVsZSAnc3VibW9kdWxlJyAoJHB3ZC9zdWJtb2R1bGUpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJy4uL3N1cGVyL3N1Ym1vZHVsZScKK2RvbmUuCitkb25lLgorZG9uZS4KK2RvbmUuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgZnJvbSBzdWJkaXJlY3RvcnknICcKKwlnaXQgLUMgcmVjdXJzaXZlc3VwZXIvc3VwZXIgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJKGNkIHJlY3Vyc2l2ZXN1cGVyICYmCisJIG1rZGlyIHRtcCAmJgorCSBjZCB0bXAgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIC4uL3N1cGVyID4uLi8uLi9hY3R1YWwgMj4uLi8uLi9hY3R1YWwyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJc29ydCBhY3R1YWwyID5hY3R1YWwyLnNvcnRlZCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QyIGFjdHVhbDIuc29ydGVkCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0MgorU3VibW9kdWxlICdmb28vc3ViJyAoJHB3ZC93aXRoc3Vicy8uLi9yZWJhc2luZykgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnc3ViJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IGZyb20gYW5kIG9mIHN1YmRpcmVjdG9yeScgJworCWdpdCBpbml0IHdpdGhzdWJzICYmCisJKGNkIHdpdGhzdWJzICYmCisJIG1rZGlyIGZvbyAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAiJChwd2QpLy4uL3JlYmFzaW5nIiBmb28vc3ViICYmCisJIChjZCBmb28gJiYKKwkgIGdpdCBzdWJtb2R1bGUgZGVpbml0IC1mIHN1YiAmJgorCSAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IHN1YiAyPi4uLy4uL2FjdHVhbDIKKwkgKQorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0MiBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgZG9lcyBub3QgZmV0Y2ggYWxyZWFkeSBwcmVzZW50IGNvbW1pdHMnICcKKwkoY2Qgc3VibW9kdWxlICYmCisJICBlY2hvIGxpbmUzID4+IGZpbGUgJiYKKwkgIGdpdCBhZGQgZmlsZSAmJgorCSAgdGVzdF90aWNrICYmCisJICBnaXQgY29tbWl0IC1tICJ1cHN0cmVhbSBsaW5lMyIKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkgIGVjaG8gIlN1Ym1vZHVsZSBwYXRoICR7U1F9c3VibW9kdWxlJFNROiBjaGVja2VkIG91dCAkU1EkaGVhZCRTUSIgPiAuLi8uLi9leHBlY3RlZCAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJICBnaXQgc3VibW9kdWxlIHVwZGF0ZSA+IC4uL2FjdHVhbCAyPiAuLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIHNob3VsZCBmYWlsIGR1ZSB0byBsb2NhbCBjaGFuZ2VzJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSAmJgorCSBlY2hvICJsb2NhbCBjaGFuZ2UiID4gZmlsZQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlCisJKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBzaG91bGQgdGhyb3cgYXdheSBjaGFuZ2VzIHdpdGggLS1mb3JjZSAnICcKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1mb3JjZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tZm9yY2UgZm9yY2libHkgY2hlY2tzIG91dCBzdWJtb2R1bGVzJyAnCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHJtIC1mIGZpbGUKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICB0ZXN0ICIkKGdpdCBzdGF0dXMgLXMgZmlsZSkiID0gIiIKKwkgKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSBzaG91bGQgZmV0Y2ggdXBzdHJlYW0gY2hhbmdlcycgJworCShjZCBzdWJtb2R1bGUgJiYKKwkgZWNobyBsaW5lNCA+PiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidXBzdHJlYW0gbGluZTQiCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgdGVzdCAiJChnaXQgbG9nIC0xIC0tb25lbGluZSkiID0gIiQoR0lUX0RJUj0uLi8uLi9zdWJtb2R1bGUvLmdpdCBnaXQgbG9nIC0xIC0tb25lbGluZSkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlIHNob3VsZCBmZXRjaCB1cHN0cmVhbSBjaGFuZ2VzIHdpdGggLicgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuInN1Ym1vZHVsZSIuYnJhbmNoICIuIiAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZXM6IHVwZGF0ZSBmcm9tIHRoZSByZXNwZWN0aXZlIHN1cGVycHJvamVjdCBicmFuY2giCisJKSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWVjaG8gbGluZTRhID4+IGZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJ1cHN0cmVhbSBsaW5lNGEiICYmCisJCWdpdCBjaGVja291dCAtYiB0ZXN0LWJyYW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbi10ZXN0LWJyYW5jaAorCSkgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlIC0tZm9yY2Ugc3VibW9kdWxlICYmCisJCWdpdCAtQyBzdWJtb2R1bGUgbG9nIC0xIC0tb25lbGluZSA+YWN0dWFsICYmCisJCWdpdCAtQyAuLi9zdWJtb2R1bGUgbG9nIC0xIC0tb25lbGluZSBtYXN0ZXIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBjaGVja291dCAtYiB0ZXN0LWJyYW5jaCAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCQlnaXQgLUMgc3VibW9kdWxlIGxvZyAtMSAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCQlnaXQgLUMgLi4vc3VibW9kdWxlIGxvZyAtMSAtLW9uZWxpbmUgdGVzdC1icmFuY2ggPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCAtZCB0ZXN0LWJyYW5jaCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBjb25maWcgc2hvdWxkIG92ZXJyaWRlIC5naXRtb2R1bGVzIGJyYW5jaCcgJworCShjZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNoZWNrb3V0IHRlc3QtYnJhbmNoICYmCisJIGVjaG8gbGluZTUgPj4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInVwc3RyZWFtIGxpbmU1IiAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUuYnJhbmNoIHRlc3QtYnJhbmNoICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlIC0tZm9yY2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSB0ZXN0ICIkKGdpdCBsb2cgLTEgLS1vbmVsaW5lKSIgPSAiJChHSVRfRElSPS4uLy4uL3N1Ym1vZHVsZS8uZ2l0IGdpdCBsb2cgLTEgLS1vbmVsaW5lIHRlc3QtYnJhbmNoKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3RheWluZyBvbiBtYXN0ZXInICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN0YXlpbmcgb24gbWFzdGVyJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tbWVyZ2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSByZWJhc2UgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSByZWJhc2UKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY2hlY2tvdXQgaW4gLmdpdC9jb25maWcgYnV0IC0tcmViYXNlIGdpdmVuJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgY2hlY2tvdXQKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gbWVyZ2UgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBtZXJnZQorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjaGVja291dCBpbiAuZ2l0L2NvbmZpZyBidXQgLS1tZXJnZSBnaXZlbicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0CisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY2hlY2tvdXQgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dAorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY29tbWFuZCBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICIhZ2l0IGNoZWNrb3V0IgorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY29tbWFuZCBpbiAuZ2l0bW9kdWxlcyBpcyByZWplY3RlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIHJlc2V0IC0taGFyZCBIRUFEXiIgJiYKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICIhZmFsc2UiICYmCisJZ2l0IC1DIHN1cGVyIGNvbW1pdCAtYSAtbSAiYWRkIGNvbW1hbmQgdG8gLmdpdG1vZHVsZXMgZmlsZSIgJiYKKwlnaXQgLUMgc3VwZXIvc3VibW9kdWxlIHJlc2V0IC0taGFyZCAkc3VibW9kdWxlc2hhMV4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBkZXRlY3RzIGNvbW1hbmQgaW4gLmdpdG1vZHVsZXMnICcKKwlnaXQgaW5pdCBjb21tYW5kLWluLWdpdG1vZHVsZXMgJiYKKwkoCisJCWNkIGNvbW1hbmQtaW4tZ2l0bW9kdWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3VibW9kdWxlICYmCisJCXRlc3RfY29tbWl0IGFkZGluZy1zdWJtb2R1bGUgJiYKKworCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICIhZmFsc2UiICYmCisJCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkJdGVzdF9jb21taXQgY29uZmlndXJpbmctdXBkYXRlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisJKQorJworCitjYXQgPDwgRU9GID5leHBlY3QKK0V4ZWN1dGlvbiBvZiAnZmFsc2UgJHN1Ym1vZHVsZXNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnc3VibW9kdWxlJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjb21tYW5kIGluIC5naXQvY29uZmlnIGNhdGNoZXMgZmFpbHVyZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICIhZmFsc2UiCisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgJHN1Ym1vZHVsZXNoYTFeCisJKSAmJgorCShjZCBzdXBlciAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgMj4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3QKKycKKworY2F0IDw8IEVPRiA+ZXhwZWN0CitFeGVjdXRpb24gb2YgJ2ZhbHNlICRzdWJtb2R1bGVzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJy4uL3N1Ym1vZHVsZScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY29tbWFuZCBpbiAuZ2l0L2NvbmZpZyBjYXRjaGVzIGZhaWx1cmUgLS0gc3ViZGlyZWN0b3J5JyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgIiFmYWxzZSIKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCAkc3VibW9kdWxlc2hhMV4KKwkpICYmCisJKGNkIHN1cGVyICYmCisJIG1rZGlyIHRtcCAmJiBjZCB0bXAgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLi4vc3VibW9kdWxlIDI+Li4vLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjb21tYW5kIHJ1biBmb3IgaW5pdGlhbCBwb3B1bGF0aW9uIG9mIHN1Ym1vZHVsZScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCUV4ZWN1dGlvbiBvZiAnXCcnZmFsc2UgJHN1Ym1vZHVsZXNoYTEnXCcnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnXCcnc3VibW9kdWxlJ1wnJworCUVPRgorCXJtIC1yZiBzdXBlci9zdWJtb2R1bGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgc3VibW9kdWxlIHVwZGF0ZSAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSB1cGRhdGUgLS1jaGVja291dAorJworCitjYXQgPDwgRU9GID5leHBlY3QKK0V4ZWN1dGlvbiBvZiAnZmFsc2UgJHN1Ym1vZHVsZXNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnLi4vc3VwZXIvc3VibW9kdWxlJworRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnLi4vc3VwZXInCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjdXJzaXZlIHN1Ym1vZHVsZSB1cGRhdGUgLSBjb21tYW5kIGluIC5naXQvY29uZmlnIGNhdGNoZXMgZmFpbHVyZSAtLSBzdWJkaXJlY3RvcnknICcKKwkoY2QgcmVjdXJzaXZlc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgc3VwZXIgJiYKKwkgZ2l0IGFkZCBzdXBlciAmJgorCSBnaXQgY29tbWl0IC1tICJ1cGRhdGUgdG8gbGF0ZXN0IHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBjb21taXQgaW4gc3VibW9kdWxlcyIKKwkpICYmCisJZ2l0IC1DIHJlY3Vyc2l2ZXN1cGVyL3N1cGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAiIWZhbHNlIiAmJgorCWdpdCAtQyByZWN1cnNpdmVzdXBlci9zdXBlci9zdWJtb2R1bGUgcmVzZXQgLS1oYXJkICRzdWJtb2R1bGVzaGExXiAmJgorCShjZCByZWN1cnNpdmVzdXBlciAmJgorCSBta2RpciAtcCB0bXAgJiYgY2QgdG1wICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlIC4uL3N1cGVyIDI+Li4vLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IGRvZXMgbm90IGNvcHkgY29tbWFuZCBpbnRvIC5naXQvY29uZmlnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIHN1Ym1vZHVsZTEiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjb25maWcgLWYgc3VwZXIvLmdpdG1vZHVsZXMgXAorCQktLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJtb2R1bGUxICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBscy1maWxlcyAtcyBzdWJtb2R1bGUgPm91dCAmJgorCSBIPSQoY3V0IC1kIiAiIC1mMiBvdXQpICYmCisJIG1rZGlyIHN1Ym1vZHVsZTEgJiYKKwkgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgJEggc3VibW9kdWxlMSAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUxLnBhdGggc3VibW9kdWxlMSAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUxLnVybCAuLi9zdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlMS51cGRhdGUgIWZhbHNlICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgaW5pdCBzdWJtb2R1bGUxICYmCisJIHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUxLnVwZGF0ZSA+YWN0dWFsICYmCisJIHRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IHBpY2tzIHVwIHJlYmFzZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZWJhc2luZy51cGRhdGUgcmViYXNlICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCByZWJhc2luZyAmJgorCSB0ZXN0ICJyZWJhc2UiID0gIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmViYXNpbmcudXBkYXRlKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IHBpY2tzIHVwIG1lcmdlJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLm1lcmdpbmcudXBkYXRlIG1lcmdlICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCBtZXJnaW5nICYmCisJIHRlc3QgIm1lcmdlIiA9ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLm1lcmdpbmcudXBkYXRlKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSAgLSBpZ25vcmVzIC0tbWVyZ2UgIGZvciBuZXcgc3VibW9kdWxlcycgJworCXRlc3RfY29uZmlnIC1DIHN1cGVyIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0ICYmCisJKGNkIHN1cGVyICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5leHBlY3QgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2UgLSBpZ25vcmVzIC0tcmViYXNlIGZvciBuZXcgc3VibW9kdWxlcycgJworCXRlc3RfY29uZmlnIC1DIHN1cGVyIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0ICYmCisJKGNkIHN1cGVyICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5leHBlY3QgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGlnbm9yZXMgdXBkYXRlPW1lcmdlIGNvbmZpZyBmb3IgbmV3IHN1Ym1vZHVsZXMnICcKKwkoY2Qgc3VwZXIgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmV4cGVjdCAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgbWVyZ2UgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5hY3R1YWwgJiYKKwkgZ2l0IGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgaWdub3JlcyB1cGRhdGU9cmViYXNlIGNvbmZpZyBmb3IgbmV3IHN1Ym1vZHVsZXMnICcKKwkoY2Qgc3VwZXIgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmV4cGVjdCAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgcmViYXNlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+YWN0dWFsICYmCisJIGdpdCBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW5pdCBwaWNrcyB1cCB1cGRhdGU9bm9uZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5ub25lLnVwZGF0ZSBub25lICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCBub25lICYmCisJIHRlc3QgIm5vbmUiID0gIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUubm9uZS51cGRhdGUpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIHVwZGF0ZT1ub25lIGluIC5naXQvY29uZmlnJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgbm9uZSAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgZGlmZiAtLW5hbWUtb25seSA+b3V0ICYmCisJIGdyZXAgXnN1Ym1vZHVsZSQgb3V0ICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIGdpdCBkaWZmIC0tbmFtZS1vbmx5ID5vdXQgJiYKKwkgZ3JlcCBec3VibW9kdWxlJCBvdXQgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtIHVwZGF0ZT1ub25lIGluIC5naXQvY29uZmlnIGJ1dCAtLWNoZWNrb3V0IGdpdmVuJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgbm9uZSAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgZGlmZiAtLW5hbWUtb25seSA+b3V0ICYmCisJIGdyZXAgXnN1Ym1vZHVsZSQgb3V0ICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tY2hlY2tvdXQgJiYKKwkgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPm91dCAmJgorCSAhIGdyZXAgXnN1Ym1vZHVsZSQgb3V0ICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgICEgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCBza2lwcyBzdWJtb2R1bGUgd2l0aCB1cGRhdGU9bm9uZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJIGdpdCBjb21taXQgLW0gIi5naXRtb2R1bGVzIgorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmVkICYmCisJKGNkIGNsb25lZCAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkgdGVzdF9wYXRoX2V4aXN0cyBzdWJtb2R1bGUvLmdpdCAmJgorCSB0ZXN0X3BhdGhfaXNfbWlzc2luZyBub25lLy5naXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgY29udGludWVzIGFmdGVyIGNoZWNrb3V0IGVycm9yJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3VibW9kdWxlMiAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkgZ2l0IGNvbW1pdCAtYW0gIm5ld19zdWJtb2R1bGUiICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2V4cGVjdAorCSApICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlIiBmaWxlCisJICkgJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlMiIgZmlsZQorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBhZGQgc3VibW9kdWxlMiAmJgorCSBnaXQgY29tbWl0IC1tICJ0d29fbmV3X3N1Ym1vZHVsZV9jb21taXRzIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBlY2hvICIiID4gZmlsZQorCSApICYmCisJIGdpdCBjaGVja291dCBIRUFEXiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBjb250aW51ZXMgYWZ0ZXIgcmVjdXJzaXZlIGNoZWNrb3V0IGVycm9yJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCSAgZ2l0IGNvbW1pdCAtbSAibmV3X3N1YnN1Ym1vZHVsZSIKKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1tICJ1cGRhdGVfc3VibW9kdWxlIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICAoY2Qgc3Vic3VibW9kdWxlICYmCisJICAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJzdWJtb2R1bGUiIGZpbGUKKwkgICkgJiYKKwkgIGdpdCBhZGQgc3Vic3VibW9kdWxlICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZV9hZ2FpbiIgZmlsZSAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3Vic3VibW9kdWxlX2FnYWluIiBmaWxlCisJICApICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZV9hZ2Fpbl9hZ2FpbiIgZmlsZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2V4cGVjdCAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGUyX2FnYWluIiBmaWxlCisJICkgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUyICYmCisJIGdpdCBjb21taXQgLW0gIm5ld19jb21taXRzIiAmJgorCSBnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJICAoY2Qgc3Vic3VibW9kdWxlICYmCisJICAgZWNobyAiIiA+IGZpbGUKKwkgICkKKwkgKSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGV4aXQgaW1tZWRpYXRlbHkgaW4gY2FzZSBvZiBtZXJnZSBjb25mbGljdCcgJworCShjZCBzdXBlciAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICAoY2Qgc3Vic3VibW9kdWxlICYmCisJICAgZ2l0IHJlc2V0IC0taGFyZCBIRUFECisJICApCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGVfMiIgZmlsZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZTJfMiIgZmlsZQorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBhZGQgc3VibW9kdWxlMiAmJgorCSBnaXQgY29tbWl0IC1tICJ0d29fbmV3X3N1Ym1vZHVsZV9jb21taXRzIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJICB0ZXN0X2NvbW1pdCAiY29uZmxpY3QiIGZpbGUgJiYKKwkgIGVjaG8gImNvbmZsaWN0IiA+IGZpbGUKKwkgKSAmJgorCSBnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vZXhwZWN0CisJICkgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBtZXJnZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVjdXJzaXZlIHJlYmFzZSBlcnJvcicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlCisJICkgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGVfMyIgZmlsZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZTJfMyIgZmlsZQorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBhZGQgc3VibW9kdWxlMiAmJgorCSBnaXQgY29tbWl0IC1tICJ0d29fbmV3X3N1Ym1vZHVsZV9jb21taXRzIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJICB0ZXN0X2NvbW1pdCAiY29uZmxpY3QyIiBmaWxlICYmCisJICBlY2hvICJjb25mbGljdCIgPiBmaWxlCisJICkgJiYKKwkgZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2V4cGVjdAorCSApICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgcmViYXNlICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2FjdHVhbAorCSApICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBkaWZmZXJlbnQgc3VibW9kdWxlcyB0byB0aGUgc2FtZSBwYXRoJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzMSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGFkZCAuLi9tZXJnaW5nIHMxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHBsYWNlcyBnaXQtZGlyIGluIHN1cGVycHJvamVjdHMgZ2l0LWRpcicgJworCShjZCBzdXBlciAmJgorCSBta2RpciBkZWVwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgKGNkIGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi9leHBlY3RlZAorCSApICYmCisJIChjZCAuZ2l0L21vZHVsZXMvZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uLy4uLy4uL2FjdHVhbAorCSApICYmCisJIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBwbGFjZXMgZ2l0LWRpciBpbiBzdXBlcnByb2plY3RzIGdpdC1kaXInICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3VibW9kdWxlIgorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VwZXIyICYmCisJKGNkIHN1cGVyMiAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2QgZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uL2V4cGVjdGVkCisJICkgJiYKKwkgKGNkIC5naXQvbW9kdWxlcy9kZWVwZXIvc3VibW9kdWxlICYmCisJICBnaXQgbG9nID4gLi4vLi4vLi4vLi4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHBsYWNlcyBnaXQtZGlyIGluIHN1cGVycHJvamVjdHMgZ2l0LWRpciByZWN1cnNpdmUnICcKKwkoY2Qgc3VwZXIyICYmCisJIChjZCBkZWVwZXIvc3VibW9kdWxlICYmCisJICBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3Vic3VibW9kdWxlICYmCisJICAoY2Qgc3Vic3VibW9kdWxlICYmCisJICAgZ2l0IGxvZyA+IC4uLy4uLy4uL2V4cGVjdGVkCisJICApICYmCisJICBnaXQgY29tbWl0IC1tICJhZGRlZCBzdWJzdWJtb2R1bGUiICYmCisJICBnaXQgcHVzaCBvcmlnaW4gOgorCSApICYmCisJIChjZCAuZ2l0L21vZHVsZXMvZGVlcGVyL3N1Ym1vZHVsZS9tb2R1bGVzL3N1YnN1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uLy4uLy4uLy4uL2FjdHVhbAorCSApICYmCisJIGdpdCBhZGQgZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1tICJ1cGRhdGUgc3VibW9kdWxlIiAmJgorCSBnaXQgcHVzaCBvcmlnaW4gOiAmJgorCSB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgcGxhY2VzIGdpdC1kaXIgaW4gc3VwZXJwcm9qZWN0cyBnaXQtZGlyIHJlY3Vyc2l2ZScgJworCW1rZGlyIHN1cGVyX3VwZGF0ZV9yICYmCisJKGNkIHN1cGVyX3VwZGF0ZV9yICYmCisJIGdpdCBpbml0IC0tYmFyZQorCSkgJiYKKwlta2RpciBzdWJzdXBlcl91cGRhdGVfciAmJgorCShjZCBzdWJzdXBlcl91cGRhdGVfciAmJgorCSBnaXQgaW5pdCAtLWJhcmUKKwkpICYmCisJbWtkaXIgc3Vic3Vic3VwZXJfdXBkYXRlX3IgJiYKKwkoY2Qgc3Vic3Vic3VwZXJfdXBkYXRlX3IgJiYKKwkgZ2l0IGluaXQgLS1iYXJlCisJKSAmJgorCWdpdCBjbG9uZSBzdWJzdWJzdXBlcl91cGRhdGVfciBzdWJzdWJzdXBlcl91cGRhdGVfcjIgJiYKKwkoY2Qgc3Vic3Vic3VwZXJfdXBkYXRlX3IyICYmCisJIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3Vic3Vic3VwZXIiIGZpbGUgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwlnaXQgY2xvbmUgc3Vic3VwZXJfdXBkYXRlX3Igc3Vic3VwZXJfdXBkYXRlX3IyICYmCisJKGNkIHN1YnN1cGVyX3VwZGF0ZV9yMiAmJgorCSB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1YnN1cGVyIiBmaWxlICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1YnN1YnN1cGVyX3VwZGF0ZV9yIHN1YnN1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1hbSAic3Vic3VibW9kdWxlIiAmJgorCSBnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCisJKSAmJgorCWdpdCBjbG9uZSBzdXBlcl91cGRhdGVfciBzdXBlcl91cGRhdGVfcjIgJiYKKwkoY2Qgc3VwZXJfdXBkYXRlX3IyICYmCisJIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VwZXIiIGZpbGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3Vic3VwZXJfdXBkYXRlX3Igc3VibW9kdWxlICYmCisJIGdpdCBjb21taXQgLWFtICJzdWJtb2R1bGUiICYmCisJIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJcm0gLXJmIHN1cGVyX3VwZGF0ZV9yMiAmJgorCWdpdCBjbG9uZSBzdXBlcl91cGRhdGVfciBzdXBlcl91cGRhdGVfcjIgJiYKKwkoY2Qgc3VwZXJfdXBkYXRlX3IyICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSA+YWN0dWFsICYmCisJIHRlc3RfaTE4bmdyZXAgIlN1Ym1vZHVsZSBwYXRoIC5zdWJtb2R1bGUvc3Vic3VibW9kdWxlLjogY2hlY2tlZCBvdXQiIGFjdHVhbCAmJgorCSAoY2Qgc3VibW9kdWxlL3N1YnN1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uL2V4cGVjdGVkCisJICkgJiYKKwkgKGNkIC5naXQvbW9kdWxlcy9zdWJtb2R1bGUvbW9kdWxlcy9zdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi8uLi8uLi8uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgcHJvcGVybHkgcmUtY3JlYXRlcyBkZWVwZXIgbGV2ZWwgc3VibW9kdWxlcycgJworCShjZCBzdXBlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCSBybSAtcmYgZGVlcGVyLyAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAtLWZvcmNlIC4uL3N1Ym1vZHVsZSBkZWVwZXIvc3VibW9kdWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIHByb3Blcmx5IHJldml2ZXMgYSBtb3ZlZCBzdWJtb2R1bGUnICcKKwkoY2Qgc3VwZXIgJiYKKwkgSD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCSBnaXQgY29tbWl0IC1hbSAicHJlIG1vdmUiICYmCisJIEgyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJIGdpdCBzdGF0dXMgPm91dCAmJgorCSBzZWQgInMvJEgvWFhYLyIgb3V0ID5leHBlY3QgJiYKKwkgSD0kKGNkIHN1Ym1vZHVsZTIgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCSBnaXQgcm0gLS1jYWNoZWQgc3VibW9kdWxlMiAmJgorCSBybSAtcmYgc3VibW9kdWxlMiAmJgorCSBta2RpciAtcCAibW92ZWQvc3ViIG1vZHVsZSIgJiYKKwkgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgJEggIm1vdmVkL3N1YiBtb2R1bGUiICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZTIucGF0aCAibW92ZWQvc3ViIG1vZHVsZSIgJiYKKwkgZ2l0IGNvbW1pdCAtYW0gInBvc3QgbW92ZSIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgZ2l0IHN0YXR1cyA+IG91dCAmJgorCSBzZWQgInMvJEgyL1hYWC8iIG91dCA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N1Ym1vZHVsZSB1cGRhdGUgY2FuIGhhbmRsZSBzeW1ib2xpYyBsaW5rcyBpbiBwd2QnICcKKwlta2RpciAtcCBsaW5rZWQvZGlyICYmCisJbG4gLXMgbGlua2VkL2RpciBsaW5rdG8gJiYKKwkoY2QgbGlua3RvICYmCisJIGdpdCBjbG9uZSAiJFRSQVNIX0RJUkVDVE9SWSIvc3VwZXJfdXBkYXRlX3IyIHN1cGVyICYmCisJIChjZCBzdXBlciAmJgorCSAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisJICkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgY2xvbmUgc2hhbGxvdyBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcjMiICYmCisJZmlyc3Q9JChnaXQgLUMgY2xvbmVkIHJldi1wYXJzZSBIRUFEOnN1Ym1vZHVsZSkgJiYKKwlzZWNvbmQ9JChnaXQgLUMgc3VibW9kdWxlIHJldi1wYXJzZSBIRUFEKSAmJgorCWNvbW1pdF9jb3VudD0kKGdpdCAtQyBzdWJtb2R1bGUgcmV2LWxpc3QgLS1jb3VudCAkZmlyc3ReLi4kc2Vjb25kKSAmJgorCWdpdCBjbG9uZSBjbG9uZWQgc3VwZXIzICYmCisJcHdkPSQocHdkKSAmJgorCSgKKwkJY2Qgc3VwZXIzICYmCisJCXNlZCAtZSAicyN1cmwgPSAuLi8jdXJsID0gZmlsZTovLyRwd2QvIyIgPC5naXRtb2R1bGVzID4uZ2l0bW9kdWxlcy50bXAgJiYKKwkJbXYgLWYgLmdpdG1vZHVsZXMudG1wIC5naXRtb2R1bGVzICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLWRlcHRoPSRjb21taXRfY291bnQgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBsb2cgLS1vbmVsaW5lID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgY2xvbmUgc2hhbGxvdyBzdWJtb2R1bGUgb3V0c2lkZSBvZiBkZXB0aCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyMyIgJiYKKwlnaXQgY2xvbmUgY2xvbmVkIHN1cGVyMyAmJgorCXB3ZD0kKHB3ZCkgJiYKKwkoCisJCWNkIHN1cGVyMyAmJgorCQlzZWQgLWUgInMjdXJsID0gLi4vI3VybCA9IGZpbGU6Ly8kcHdkLyMiIDwuZ2l0bW9kdWxlcyA+LmdpdG1vZHVsZXMudG1wICYmCisJCW12IC1mIC5naXRtb2R1bGVzLnRtcCAuZ2l0bW9kdWxlcyAmJgorCQkjIFNvbWUgcHJvdG9jb2wgdmVyc2lvbnMgKGUuZy4gMikgc3VwcG9ydCBmZXRjaGluZworCQkjIHVuYWR2ZXJ0aXNlZCBvYmplY3RzLCBzbyByZXN0cmljdCB0aGlzIHRlc3QgdG8gdjAuCisJCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfVEVTVF9QUk9UT0NPTF9WRVJTSU9OPTAgXAorCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tZGVwdGg9MSAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5ncmVwICJEaXJlY3QgZmV0Y2hpbmcgb2YgdGhhdCBjb21taXQgZmFpbGVkLiIgYWN0dWFsICYmCisJCWdpdCAtQyAuLi9zdWJtb2R1bGUgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dSZWFjaGFibGVTSEExSW5XYW50IHRydWUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tZGVwdGg9MSA+YWN0dWFsICYmCisJCWdpdCAtQyBzdWJtb2R1bGUgbG9nIC0tb25lbGluZSA+b3V0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlIGRyb3BzIG1vZHVsZSBuYW1lIGJlZm9yZSByZWN1cnNpbmcnICcKKwkoY2Qgc3VwZXIyICYmCisJIChjZCBkZWVwZXIvc3VibW9kdWxlL3N1YnN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IEhFQUReCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgZGVlcGVyL3N1Ym1vZHVsZSA+YWN0dWFsICYmCisJIHRlc3RfaTE4bmdyZXAgIlN1Ym1vZHVsZSBwYXRoIC5kZWVwZXIvc3VibW9kdWxlL3N1YnN1Ym1vZHVsZS46IGNoZWNrZWQgb3V0IiBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgY2FuIGJlIHJ1biBpbiBwYXJhbGxlbCcgJworCShjZCBzdXBlcjIgJiYKKwkgR0lUX1RSQUNFPSQocHdkKS90cmFjZS5vdXQgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1qb2JzIDcgJiYKKwkgZ3JlcCAiNyB0YXNrcyIgdHJhY2Uub3V0ICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLmZldGNoSm9icyA4ICYmCisJIEdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIGdyZXAgIjggdGFza3MiIHRyYWNlLm91dCAmJgorCSBHSVRfVFJBQ0U9JChwd2QpL3RyYWNlLm91dCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWpvYnMgOSAmJgorCSBncmVwICI5IHRhc2tzIiB0cmFjZS5vdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSBwYXNzZXMgdGhlIHBhcmFsbGVsIGpvYnMgY29uZmlnIG9uIHRvIHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlcjQiICYmCisJR0lUX1RSQUNFPSQocHdkKS90cmFjZS5vdXQgZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC0tam9icyA3IC4gc3VwZXI0ICYmCisJZ3JlcCAiNyB0YXNrcyIgdHJhY2Uub3V0ICYmCisJcm0gLXJmIHN1cGVyNCAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgc3VibW9kdWxlLmZldGNoSm9icyA4ICYmCisJR0lUX1RSQUNFPSQocHdkKS90cmFjZS5vdXQgZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC4gc3VwZXI0ICYmCisJZ3JlcCAiOCB0YXNrcyIgdHJhY2Uub3V0ICYmCisJcm0gLXJmIHN1cGVyNCAmJgorCUdJVF9UUkFDRT0kKHB3ZCkvdHJhY2Uub3V0IGdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLWpvYnMgOSAuIHN1cGVyNCAmJgorCWdyZXAgIjkgdGFza3MiIHRyYWNlLm91dCAmJgorCXJtIC1yZiBzdXBlcjQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDA3LXN1Ym1vZHVsZS1mb3JlYWNoLnNoIGIvdC90NzQwNy1zdWJtb2R1bGUtZm9yZWFjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjJhYTkxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNy1zdWJtb2R1bGUtZm9yZWFjaC5zaApAQCAtMCwwICsxLDQzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBKb2hhbiBIZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIgY29ycmVjdGx5IHZpc2l0cyBhbGwgc3VibW9kdWxlcwordGhhdCBhcmUgY3VycmVudGx5IGNoZWNrZWQgb3V0LgorJworCisuIC4vdGVzdC1saWIuc2gKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHN1Ym1vZHVsZSB0cmVlJyAnCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBzdHJlYW0gJiYKKwlnaXQgY2xvbmUgLiBzdXBlciAmJgorCWdpdCBjbG9uZSBzdXBlciBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWIxICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWIyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWIzICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW5hbWUtc2VjdGlvbiBcCisJCQlzdWJtb2R1bGUuc3ViMSBzdWJtb2R1bGUuZm9vMSAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVuYW1lLXNlY3Rpb24gXAorCQkJc3VibW9kdWxlLnN1YjIgc3VibW9kdWxlLmZvbzIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbmFtZS1zZWN0aW9uIFwKKwkJCXN1Ym1vZHVsZS5zdWIzIHN1Ym1vZHVsZS5mb28zICYmCisJCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZXMiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWIxICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWIyICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWIzCisJKSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWVjaG8gZGlmZmVyZW50ID4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gImRpZmZlcmVudCIKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQkoCisJCQljZCBzdWIzICYmCisJCQlnaXQgcHVsbAorCQkpICYmCisJCWdpdCBhZGQgc3ViMyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAidXBkYXRlIHN1YjMiCisJKQorJworCitzdWIxc2hhMT0kKGNkIHN1cGVyL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3ViM3NoYTE9JChjZCBzdXBlci9zdWIzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKKworcHdkPSQocHdkKQorCitjYXQgPiBleHBlY3QgPDxFT0YKK0VudGVyaW5nICdzdWIxJworJHB3ZC9jbG9uZS1mb28xLXN1YjEtJHN1YjFzaGExCitFbnRlcmluZyAnc3ViMycKKyRwd2QvY2xvbmUtZm9vMy1zdWIzLSRzdWIzc2hhMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYmFzaWMgInN1Ym1vZHVsZSBmb3JlYWNoIiB1c2FnZScgJworCWdpdCBjbG9uZSBzdXBlciBjbG9uZSAmJgorCSgKKwkJY2QgY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tIHN1YjEgc3ViMyAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggImVjaG8gXCR0b3BsZXZlbC1cJG5hbWUtXCRwYXRoLVwkc2hhMSIgPiAuLi9hY3R1YWwgJiYKKwkJZ2l0IGNvbmZpZyBmb28uYmFyIHphciAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggImdpdCBjb25maWcgLS1maWxlIFwiXCR0b3BsZXZlbC8uZ2l0L2NvbmZpZ1wiIGZvby5iYXIiCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitFbnRlcmluZyAnLi4vc3ViMScKKyRwd2QvY2xvbmUtZm9vMS1zdWIxLS4uL3N1YjEtJHN1YjFzaGExCitFbnRlcmluZyAnLi4vc3ViMycKKyRwd2QvY2xvbmUtZm9vMy1zdWIzLS4uL3N1YjMtJHN1YjNzaGExCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAic3VibW9kdWxlIGZvcmVhY2giIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJbWtkaXIgY2xvbmUvc3ViICYmCisJKAorCQljZCBjbG9uZS9zdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICJlY2hvIFwkdG9wbGV2ZWwtXCRuYW1lLVwkc21fcGF0aC1cJGRpc3BsYXlwYXRoLVwkc2hhMSIgPi4uLy4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBuZXN0ZWQgc3VibW9kdWxlcycgJworCWdpdCBjbG9uZSBzdWJtb2R1bGUgbmVzdGVkMSAmJgorCWdpdCBjbG9uZSBzdWJtb2R1bGUgbmVzdGVkMiAmJgorCWdpdCBjbG9uZSBzdWJtb2R1bGUgbmVzdGVkMyAmJgorCSgKKwkJY2QgbmVzdGVkMyAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3VibW9kdWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWJtb2R1bGUKKwkpICYmCisJKAorCQljZCBuZXN0ZWQyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL25lc3RlZDMgbmVzdGVkMyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmVzdGVkMyIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IG5lc3RlZDMKKwkpICYmCisJKAorCQljZCBuZXN0ZWQxICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL25lc3RlZDIgbmVzdGVkMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmVzdGVkMiIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IG5lc3RlZDIKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9uZXN0ZWQxIG5lc3RlZDEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZDEiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBuZXN0ZWQxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgInN1Ym1vZHVsZSBmb3JlYWNoIiB0byBjaGVja291dCAybmQgbGV2ZWwgc3VibW9kdWxlJyAnCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lMiAmJgorCSgKKwkJY2QgY2xvbmUyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjEvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjMvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJmb3JlYWNoIC0tcmVjdXJzaXZlIiB0byBjaGVja291dCBhbGwgc3VibW9kdWxlcycgJworCSgKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUvLmdpdAorCSkKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitFbnRlcmluZyAnbmVzdGVkMScKK0VudGVyaW5nICduZXN0ZWQxL25lc3RlZDInCitFbnRlcmluZyAnbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMnCitFbnRlcmluZyAnbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlJworRW50ZXJpbmcgJ3N1YjEnCitFbnRlcmluZyAnc3ViMicKK0VudGVyaW5nICdzdWIzJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbWVzc2FnZXMgZnJvbSAiZm9yZWFjaCAtLXJlY3Vyc2l2ZSInICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgInRydWUiID4gLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorRW50ZXJpbmcgJy4uL25lc3RlZDEnCitFbnRlcmluZyAnLi4vbmVzdGVkMS9uZXN0ZWQyJworRW50ZXJpbmcgJy4uL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzJworRW50ZXJpbmcgJy4uL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZScKK0VudGVyaW5nICcuLi9zdWIxJworRW50ZXJpbmcgJy4uL3N1YjInCitFbnRlcmluZyAnLi4vc3ViMycKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG1lc3NhZ2VzIGZyb20gImZvcmVhY2ggLS1yZWN1cnNpdmUiIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBjbG9uZTIgJiYKKwkJbWtkaXIgdW50cmFja2VkICYmCisJCWNkIHVudHJhY2tlZCAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgPi4uLy4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworc3ViMXNoYTE9JChjZCBjbG9uZTIvc3ViMSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIyc2hhMT0kKGNkIGNsb25lMi9zdWIyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjNzaGExPSQoY2QgY2xvbmUyL3N1YjMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorbmVzdGVkMXNoYTE9JChjZCBjbG9uZTIvbmVzdGVkMSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCituZXN0ZWQyc2hhMT0kKGNkIGNsb25lMi9uZXN0ZWQxL25lc3RlZDIgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorbmVzdGVkM3NoYTE9JChjZCBjbG9uZTIvbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3VibW9kdWxlc2hhMT0kKGNkIGNsb25lMi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCitjYXQgPmV4cGVjdCA8PEVPRgorRW50ZXJpbmcgJy4uL25lc3RlZDEnCit0b3BsZXZlbDogJHB3ZC9jbG9uZTIgbmFtZTogbmVzdGVkMSBwYXRoOiBuZXN0ZWQxIGRpc3BsYXlwYXRoOiAuLi9uZXN0ZWQxIGhhc2g6ICRuZXN0ZWQxc2hhMQorRW50ZXJpbmcgJy4uL25lc3RlZDEvbmVzdGVkMicKK3RvcGxldmVsOiAkcHdkL2Nsb25lMi9uZXN0ZWQxIG5hbWU6IG5lc3RlZDIgcGF0aDogbmVzdGVkMiBkaXNwbGF5cGF0aDogLi4vbmVzdGVkMS9uZXN0ZWQyIGhhc2g6ICRuZXN0ZWQyc2hhMQorRW50ZXJpbmcgJy4uL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzJwordG9wbGV2ZWw6ICRwd2QvY2xvbmUyL25lc3RlZDEvbmVzdGVkMiBuYW1lOiBuZXN0ZWQzIHBhdGg6IG5lc3RlZDMgZGlzcGxheXBhdGg6IC4uL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzIGhhc2g6ICRuZXN0ZWQzc2hhMQorRW50ZXJpbmcgJy4uL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZScKK3RvcGxldmVsOiAkcHdkL2Nsb25lMi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMyBuYW1lOiBzdWJtb2R1bGUgcGF0aDogc3VibW9kdWxlIGRpc3BsYXlwYXRoOiAuLi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUgaGFzaDogJHN1Ym1vZHVsZXNoYTEKK0VudGVyaW5nICcuLi9zdWIxJwordG9wbGV2ZWw6ICRwd2QvY2xvbmUyIG5hbWU6IGZvbzEgcGF0aDogc3ViMSBkaXNwbGF5cGF0aDogLi4vc3ViMSBoYXNoOiAkc3ViMXNoYTEKK0VudGVyaW5nICcuLi9zdWIyJwordG9wbGV2ZWw6ICRwd2QvY2xvbmUyIG5hbWU6IGZvbzIgcGF0aDogc3ViMiBkaXNwbGF5cGF0aDogLi4vc3ViMiBoYXNoOiAkc3ViMnNoYTEKK0VudGVyaW5nICcuLi9zdWIzJwordG9wbGV2ZWw6ICRwd2QvY2xvbmUyIG5hbWU6IGZvbzMgcGF0aDogc3ViMyBkaXNwbGF5cGF0aDogLi4vc3ViMyBoYXNoOiAkc3ViM3NoYTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSIgZnJvbSBzdWJkaXJlY3RvcnknICcKKwkoCisJCWNkIGNsb25lMi91bnRyYWNrZWQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIC0tcmVjdXJzaXZlICJlY2hvIHRvcGxldmVsOiBcJHRvcGxldmVsIG5hbWU6IFwkbmFtZSBwYXRoOiBcJHNtX3BhdGggZGlzcGxheXBhdGg6IFwkZGlzcGxheXBhdGggaGFzaDogXCRzaGExIiA+Li4vLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorbmVzdGVkMS1uZXN0ZWQxCituZXN0ZWQyLW5lc3RlZDIKK25lc3RlZDMtbmVzdGVkMworc3VibW9kdWxlLXN1Ym1vZHVsZQorZm9vMS1zdWIxCitmb28yLXN1YjIKK2ZvbzMtc3ViMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgImZvcmVhY2ggLS1xdWlldCAtLXJlY3Vyc2l2ZSInICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLXEgLS1yZWN1cnNpdmUgImVjaG8gXCRuYW1lLVwkcGF0aCIgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgInVwZGF0ZSAtLXJlY3Vyc2l2ZSIgdG8gY2hlY2tvdXQgYWxsIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmUzICYmCisJKAorCQljZCBjbG9uZTMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlLy5naXQKKwkpCisnCisKK25lc3RlZDFzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorbmVzdGVkMnNoYTE9JChjZCBjbG9uZTMvbmVzdGVkMS9uZXN0ZWQyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK25lc3RlZDNzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1Ym1vZHVsZXNoYTE9JChjZCBjbG9uZTMvbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjFzaGExPSQoY2QgY2xvbmUzL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3ViMnNoYTE9JChjZCBjbG9uZTMvc3ViMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIzc2hhMT0kKGNkIGNsb25lMy9zdWIzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjFzaGExX3Nob3J0PSQoY2QgY2xvbmUzL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpCitzdWIyc2hhMV9zaG9ydD0kKGNkIGNsb25lMy9zdWIyICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorCitjYXQgPiBleHBlY3QgPDxFT0YKKyAkbmVzdGVkMXNoYTEgbmVzdGVkMSAoaGVhZHMvbWFzdGVyKQorICRuZXN0ZWQyc2hhMSBuZXN0ZWQxL25lc3RlZDIgKGhlYWRzL21hc3RlcikKKyAkbmVzdGVkM3NoYTEgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMgKGhlYWRzL21hc3RlcikKKyAkc3VibW9kdWxlc2hhMSBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUgKGhlYWRzL21hc3RlcikKKyAkc3ViMXNoYTEgc3ViMSAoJHN1YjFzaGExX3Nob3J0KQorICRzdWIyc2hhMSBzdWIyICgkc3ViMnNoYTFfc2hvcnQpCisgJHN1YjNzaGExIHN1YjMgKGhlYWRzL21hc3RlcikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJzdGF0dXMgLS1yZWN1cnNpdmUiJyAnCisJKAorCQljZCBjbG9uZTMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLS1yZWN1cnNpdmUgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKKyAkbmVzdGVkMXNoYTEgbmVzdGVkMSAoaGVhZHMvbWFzdGVyKQorKyRuZXN0ZWQyc2hhMSBuZXN0ZWQxL25lc3RlZDIgKGZpbGUyfjEpCisgJG5lc3RlZDNzaGExIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzIChoZWFkcy9tYXN0ZXIpCisgJHN1Ym1vZHVsZXNoYTEgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlIChoZWFkcy9tYXN0ZXIpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5zdXJlICJzdGF0dXMgLS1jYWNoZWQgLS1yZWN1cnNpdmUiIHByZXNlcnZlcyB0aGUgLS1jYWNoZWQgZmxhZycgJworCSgKKwkJY2QgY2xvbmUzICYmCisJCSgKKwkJCWNkIG5lc3RlZDEvbmVzdGVkMiAmJgorCQkJdGVzdF9jb21taXQgZmlsZTIKKwkJKSAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyAtLWNhY2hlZCAtLXJlY3Vyc2l2ZSAtLSBuZXN0ZWQxID4gLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworbmVzdGVkMnNoYTE9JChnaXQgLUMgY2xvbmUzL25lc3RlZDEvbmVzdGVkMiByZXYtcGFyc2UgSEVBRCkKKworY2F0ID4gZXhwZWN0IDw8RU9GCisgJG5lc3RlZDFzaGExIC4uL25lc3RlZDEgKGhlYWRzL21hc3RlcikKKyskbmVzdGVkMnNoYTEgLi4vbmVzdGVkMS9uZXN0ZWQyIChmaWxlMikKKyAkbmVzdGVkM3NoYTEgLi4vbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMgKGhlYWRzL21hc3RlcikKKyAkc3VibW9kdWxlc2hhMSAuLi9uZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUgKGhlYWRzL21hc3RlcikKKyAkc3ViMXNoYTEgLi4vc3ViMSAoJHN1YjFzaGExX3Nob3J0KQorICRzdWIyc2hhMSAuLi9zdWIyICgkc3ViMnNoYTFfc2hvcnQpCisgJHN1YjNzaGExIC4uL3N1YjMgKGhlYWRzL21hc3RlcikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJzdGF0dXMgLS1yZWN1cnNpdmUiIGZyb20gc3ViIGRpcmVjdG9yeScgJworCSgKKwkJY2QgY2xvbmUzICYmCisJCW1rZGlyIHRtcCAmJiBjZCB0bXAgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLS1yZWN1cnNpdmUgPiAuLi8uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgImdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSIgdG8gY2hlY2tvdXQgYWxsIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgLS1yZWN1cnNpdmUgc3VwZXIgY2xvbmU0ICYmCisJKAorCQljZCBjbG9uZTQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciAuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlLy5naXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgInVwZGF0ZSAtLXJlY3Vyc2l2ZSIgd2l0aCBhIGZsYWcgd2l0aCBzcGFjZXMnICcKKwlnaXQgY2xvbmUgc3VwZXIgImNvbW1vbiBvYmplY3RzIiAmJgorCWdpdCBjbG9uZSBzdXBlciBjbG9uZTUgJiYKKwkoCisJCWNkIGNsb25lNSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIGQgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAtLXJlZmVyZW5jZT0iJChkaXJuYW1lICIkUFdEIikvY29tbW9uIG9iamVjdHMiICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCXRlc3QgLWYgLmdpdC9tb2R1bGVzL25lc3RlZDEvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJdGVzdCAtZiAuZ2l0L21vZHVsZXMvbmVzdGVkMS9tb2R1bGVzL25lc3RlZDIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJdGVzdCAtZiAuZ2l0L21vZHVsZXMvbmVzdGVkMS9tb2R1bGVzL25lc3RlZDIvbW9kdWxlcy9uZXN0ZWQzL29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgInVwZGF0ZSAtLXJlY3Vyc2l2ZSBuZXN0ZWQxIiB0byBjaGVja291dCBhbGwgc3VibW9kdWxlcyByb290ZWQgaW4gbmVzdGVkMScgJworCWdpdCBjbG9uZSBzdXBlciBjbG9uZTYgJiYKKwkoCisJCWNkIGNsb25lNiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjEvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjIvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjMvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgLS0gbmVzdGVkMSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjEvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjIvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjMvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzL3N1Ym1vZHVsZS8uZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kIHBhc3NlZCB0byBmb3JlYWNoIHJldGFpbnMgbm90aW9uIG9mIHN0ZGluJyAnCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggZWNobyBzdWNjZXNzID4uLi9leHBlY3RlZCAmJgorCQl5ZXMgfCBnaXQgc3VibW9kdWxlIGZvcmVhY2ggInJlYWQgeSAmJiB0ZXN0IFwieFwkeVwiID0geHkgJiYgZWNobyBzdWNjZXNzIiA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kIHBhc3NlZCB0byBmb3JlYWNoIC0tcmVjdXJzaXZlIHJldGFpbnMgbm90aW9uIG9mIHN0ZGluJyAnCisJKAorCQljZCBjbG9uZTIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIC0tcmVjdXJzaXZlIGVjaG8gc3VjY2VzcyA+Li4vZXhwZWN0ZWQgJiYKKwkJeWVzIHwgZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIC0tcmVjdXJzaXZlICJyZWFkIHkgJiYgdGVzdCBcInhcJHlcIiA9IHh5ICYmIGVjaG8gc3VjY2VzcyIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGktYXJndW1lbnQgY29tbWFuZCBwYXNzZWQgdG8gZm9yZWFjaCBpcyBub3Qgc2hlbGwtZXZhbHVhdGVkIHR3aWNlJyAnCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggImVjaG8gXFxcInF1b3RlZFxcXCIiID4gLi4vZXhwZWN0ZWQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIGVjaG8gXCJxdW90ZWRcIiA+IC4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uLWxpa2UgYXJndW1lbnRzIHBhc3NlZCB0byBmb3JlYWNoIGNvbW1hbmRzIGFyZSBub3QgbG9zdCcgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoICJlY2hvIGJlIC0tcXVpZXQiID4gLi4vZXhwZWN0ZWQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIGVjaG8gYmUgLS1xdWlldCA+IC4uL2FjdHVhbAorCSkgJiYKKwlncmVwIC1zcSAtZSAiLS1xdWlldCIgZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uLWxpa2UgYXJndW1lbnRzIHBhc3NlZCB0byBmb3JlYWNoIHJlY3Vyc2UgY29ycmVjdGx5JyAnCisJZ2l0IC1DIGNsb25lMiBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAiZWNobyBiZSAtLWFuLW9wdGlvbiIgPmV4cGVjdCAmJgorCWdpdCAtQyBjbG9uZTIgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgZWNobyBiZSAtLWFuLW9wdGlvbiA+YWN0dWFsICYmCisJZ3JlcCAtZSAiLS1hbi1vcHRpb24iIGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDA4LXN1Ym1vZHVsZS1yZWZlcmVuY2Uuc2ggYi90L3Q3NDA4LXN1Ym1vZHVsZS1yZWZlcmVuY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzRhYzI4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDgtc3VibW9kdWxlLXJlZmVyZW5jZS5zaApAQCAtMCwwICsxLDIxMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgUmVkIEhhdCBJbmMsIEF1dGhvcjogTWljaGFlbCBTLiBUc2lya2luIChtc3RAcmVkaGF0LmNvbSkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjbG9uZSAtLXJlZmVyZW5jZScKKy4gLi90ZXN0LWxpYi5zaAorCitiYXNlX2Rpcj0kKHB3ZCkKKwordGVzdF9hbHRlcm5hdGVfaXNfdXNlZCAoKSB7CisJYWx0ZXJuYXRlc19maWxlPSIkMSIgJiYKKwl3b3JraW5nX2Rpcj0iJDIiICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSAiJGFsdGVybmF0ZXNfZmlsZSIgJiYKKwllY2hvICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiA+ZXhwZWN0ICYmCisJZ2l0IC1DICIkd29ya2luZ19kaXIiIGNvdW50LW9iamVjdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIGZpcnN0IHJlcG9zaXRvcnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYKKwkoCisJCWNkIEEgJiYKKwkJZWNobyBmaXJzdCA+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tIEEtaW5pdGlhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIHNlY29uZCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lIEEgQiAmJgorCSgKKwkJY2QgQiAmJgorCQllY2hvIHNlY29uZCA+ZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tIEItYWRkaXRpb24gJiYKKwkJZ2l0IHJlcGFjayAtYSAtZCAmJgorCQlnaXQgcHJ1bmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzdXBlcnByb2plY3QnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1cGVyICYmCisJKAorCQljZCBzdXBlciAmJgorCQllY2hvIGZpbGUgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW0gQi1zdXBlci1pbml0aWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIC0tcmVmZXJlbmNlIHVzZXMgYWx0ZXJuYXRlcycgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS1yZWZlcmVuY2UgLi4vQiAiZmlsZTovLyRiYXNlX2Rpci9BIiBzdWIgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCLXN1cGVyLWFkZGVkICYmCisJCWdpdCByZXBhY2sgLWFkCisJKSAmJgorCXRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgc3VwZXIvLmdpdC9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBzdXBlci9zdWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCAtLXJlZmVyZW5jZSB3aXRoIC0tZGlzc29jaWF0ZSBkb2VzIG5vdCB1c2UgYWx0ZXJuYXRlcycgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS1yZWZlcmVuY2UgLi4vQiAtLWRpc3NvY2lhdGUgImZpbGU6Ly8kYmFzZV9kaXIvQSIgc3ViLWRpc3NvY2lhdGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBCLXN1cGVyLWFkZGVkICYmCisJCWdpdCByZXBhY2sgLWFkCisJKSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1cGVyLy5naXQvbW9kdWxlcy9zdWItZGlzc29jaWF0ZS9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IHJlZmVyZW5jZSBnZXRzIHVzZWQgd2l0aCBhZGQnICcKKwkoCisJCWNkIHN1cGVyL3N1YiAmJgorCQllY2hvICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgPmN1cnJlbnQgJiYKKwkJZGlmZiBleHBlY3RlZCBjdXJyZW50CisJKQorJworCisjIFRoZSB0ZXN0cyB1cCB0byB0aGlzIHBvaW50LCBhbmQgcmVwb3NpdG9yaWVzIGNyZWF0ZWQgYnkgdGhlbQorIyAoQSwgQiwgc3VwZXIgYW5kIHN1cGVyL3N1YiksIGFyZSBhYm91dCBzZXR0aW5nIHVwIHRoZSBzdGFnZQorIyBmb3Igc3Vic2VxdWVudCB0ZXN0cyBhbmQgbWVhbnQgdG8gYmUga2VwdCB0aHJvdWdob3V0IHRoZQorIyByZW1haW5kZXIgb2YgdGhlIHRlc3QuCisjIFRlc3RzIGZyb20gaGVyZSBvbiwgaWYgdGhleSBjcmVhdGUgdGhlaXIgb3duIHRlc3QgcmVwb3NpdG9yeSwKKyMgYXJlIGV4cGVjdGVkIHRvIGNsZWFuIGFmdGVyIHRoZW1zZWx2ZXMuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIHN1cGVycHJvamVjdCBrZWVwcyBhbHRlcm5hdGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXItY2xvbmUiICYmCisJZ2l0IGNsb25lIHN1cGVyIHN1cGVyLWNsb25lICYmCisJZ2l0IC1DIHN1cGVyLWNsb25lIHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVmZXJlbmNlIC4uL0IgJiYKKwl0ZXN0X2FsdGVybmF0ZV9pc191c2VkIHN1cGVyLWNsb25lLy5naXQvbW9kdWxlcy9zdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgc3VwZXItY2xvbmUvc3ViCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIHN1cGVycHJvamVjdCB3aXRoIC0tZGlzc29jaWF0ZSBkb2VzIG5vdCBrZWVwIGFsdGVybmF0ZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlci1jbG9uZSIgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VwZXItY2xvbmUgJiYKKwlnaXQgLUMgc3VwZXItY2xvbmUgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWZlcmVuY2UgLi4vQiAtLWRpc3NvY2lhdGUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdXBlci1jbG9uZS8uZ2l0L21vZHVsZXMvc3ViL29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZXMgdXNlIGFsdGVybmF0ZXMgd2hlbiBjbG9uaW5nIGEgc3VwZXJwcm9qZWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXItY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlIHN1cGVyIC0tcmVjdXJzaXZlIHN1cGVyIHN1cGVyLWNsb25lICYmCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQkjIHRlc3Qgc3VwZXJwcm9qZWN0IGhhcyBhbHRlcm5hdGVzIHNldHVwIGNvcnJlY3RseQorCQl0ZXN0X2FsdGVybmF0ZV9pc191c2VkIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgLiAmJgorCQkjIHRlc3Qgc3VibW9kdWxlIGhhcyBjb3JyZWN0IHNldHVwCisJCXRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgLmdpdC9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBzdWIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgc3VibW9kdWxlIGFsdGVybmF0ZSBmYWlscyBjbG9uZSBhbmQgc3VibW9kdWxlIHVwZGF0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyLWNsb25lIiAmJgorCWdpdCBjbG9uZSBzdXBlciBzdXBlcjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1yZWN1cnNpdmUgLS1yZWZlcmVuY2Ugc3VwZXIyIHN1cGVyMiBzdXBlci1jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJIyB0ZXN0IHN1cGVycHJvamVjdCBoYXMgYWx0ZXJuYXRlcyBzZXR1cCBjb3JyZWN0bHkKKwkJdGVzdF9hbHRlcm5hdGVfaXNfdXNlZCAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIC4gJiYKKwkJIyB1cGRhdGUgb2YgdGhlIHN1Ym1vZHVsZSBzdWNjZWVkcworCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkJIyBhbmQgd2UgaGF2ZSBubyBhbHRlcm5hdGVzOgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0X2FsdGVybmF0ZV9pc191c2VkIC5naXQvbW9kdWxlcy9zdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgc3ViICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3RfcGF0aF9pc19maWxlIHN1Yi9maWxlMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JpbmcgbWlzc2luZyBzdWJtb2R1bGUgYWx0ZXJuYXRlcyBwYXNzZXMgY2xvbmUgYW5kIHN1Ym1vZHVsZSB1cGRhdGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBzdXBlci1jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2UtaWYtYWJsZSBzdXBlcjIgLS1yZWN1cnNpdmUgc3VwZXIyIHN1cGVyLWNsb25lICYmCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQkjIHRlc3Qgc3VwZXJwcm9qZWN0IGhhcyBhbHRlcm5hdGVzIHNldHVwIGNvcnJlY3RseQorCQl0ZXN0X2FsdGVybmF0ZV9pc191c2VkIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgLiAmJgorCQkjIHVwZGF0ZSBvZiB0aGUgc3VibW9kdWxlIHN1Y2NlZWRzCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCQkjIGFuZCB3ZSBoYXZlIG5vIGFsdGVybmF0ZXM6CisJCXRlc3RfbXVzdF9mYWlsIHRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgLmdpdC9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBzdWIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgc3ViL2ZpbGUxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc2Vjb25kIHN1cGVycHJvamVjdCB3aXRoIGEgbmVzdGVkIHN1Ym1vZHVsZSBwbHVzIHBhcnRpYWwgY2xvbmUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1cGVyc3VwZXIgJiYKKwkoCisJCWNkIHN1cGVyc3VwZXIgJiYKKwkJZWNobyAiSSBhbSBzdXBlciBzdXBlci4iID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIEItc3VwZXItc3VwZXItaW5pdGlhbCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiZmlsZTovLyRiYXNlX2Rpci9zdXBlciIgc3Vid2l0aHN1YiAmJgorCQlnaXQgY29tbWl0IC1tIEItc3VwZXItc3VwZXItYWRkZWQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCWdpdCByZXBhY2sgLWFkCisJKSAmJgorCWdpdCBjbG9uZSBzdXBlcnN1cGVyIHN1cGVyc3VwZXIyICYmCisJKAorCQljZCBzdXBlcnN1cGVyMiAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQKKwkpCisnCisKKyMgQXQgdGhpcyBwb2ludCB0aGVyZSBhcmUgdGhyZWUgcm9vdC1sZXZlbCBwb3NpdG9yaWVzOiBBLCBCLCBzdXBlciBhbmQgc3VwZXIyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBzdWJtb2R1bGUgYWx0ZXJuYXRlIGluIHdvcmtzIGFuZCBpcyBhY3R1YWxseSB1c2VkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJzdXBlci1jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNpdmUgLS1yZWZlcmVuY2Ugc3VwZXJzdXBlciBzdXBlcnN1cGVyIHN1cGVyc3VwZXItY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyc3VwZXItY2xvbmUgJiYKKwkJIyB0ZXN0IHN1cGVycHJvamVjdCBoYXMgYWx0ZXJuYXRlcyBzZXR1cCBjb3JyZWN0bHkKKwkJdGVzdF9hbHRlcm5hdGVfaXNfdXNlZCAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIC4gJiYKKwkJIyBpbW1lZGlhdGUgc3VibW9kdWxlIGhhcyBhbHRlcm5hdGU6CisJCXRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgLmdpdC9tb2R1bGVzL3N1YndpdGhzdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgc3Vid2l0aHN1YiAmJgorCQkjIG5lc3RlZCBzdWJtb2R1bGUgYWxzbyBoYXMgYWx0ZXJuYXRlOgorCQl0ZXN0X2FsdGVybmF0ZV9pc191c2VkIC5naXQvbW9kdWxlcy9zdWJ3aXRoc3ViL21vZHVsZXMvc3ViL29iamVjdHMvaW5mby9hbHRlcm5hdGVzIHN1YndpdGhzdWIvc3ViCisJKQorJworCitjaGVja190aGF0X3R3b19vZl90aHJlZV9hbHRlcm5hdGVzX2FyZV91c2VkKCkgeworCXRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAuICYmCisJIyBpbW1lZGlhdGUgc3VibW9kdWxlIGhhcyBhbHRlcm5hdGU6CisJdGVzdF9hbHRlcm5hdGVfaXNfdXNlZCAuZ2l0L21vZHVsZXMvc3Vid2l0aHN1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBzdWJ3aXRoc3ViICYmCisJIyBidXQgbmVzdGVkIHN1Ym1vZHVsZSBoYXMgbm8gYWx0ZXJuYXRlOgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfYWx0ZXJuYXRlX2lzX3VzZWQgLmdpdC9tb2R1bGVzL3N1YndpdGhzdWIvbW9kdWxlcy9zdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgc3Vid2l0aHN1Yi9zdWIKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIG5lc3RlZCBzdWJtb2R1bGUgYWx0ZXJuYXRlIGZhaWxzIGNsb25lIGFuZCBzdWJtb2R1bGUgdXBkYXRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3VwZXJzdXBlci1jbG9uZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1yZWN1cnNpdmUgLS1yZWZlcmVuY2Ugc3VwZXJzdXBlcjIgc3VwZXJzdXBlcjIgc3VwZXJzdXBlci1jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJzdXBlci1jbG9uZSAmJgorCQljaGVja190aGF0X3R3b19vZl90aHJlZV9hbHRlcm5hdGVzX2FyZV91c2VkICYmCisJCSMgdXBkYXRlIG9mIHRoZSBzdWJtb2R1bGUgZmFpbHMKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIG5lc3RlZCBzdWJtb2R1bGUgYWx0ZXJuYXRlIGluIC0tcmVmZXJlbmNlLWlmLWFibGUgbW9kZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyc3VwZXItY2xvbmUiICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzaXZlIC0tcmVmZXJlbmNlLWlmLWFibGUgc3VwZXJzdXBlcjIgc3VwZXJzdXBlcjIgc3VwZXJzdXBlci1jbG9uZSAmJgorCSgKKwkJY2Qgc3VwZXJzdXBlci1jbG9uZSAmJgorCQljaGVja190aGF0X3R3b19vZl90aHJlZV9hbHRlcm5hdGVzX2FyZV91c2VkICYmCisJCSMgdXBkYXRlIG9mIHRoZSBzdWJtb2R1bGUgc3VjY2VlZHMKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDktc3VibW9kdWxlLWRldGFjaGVkLXdvcmstdHJlZS5zaCBiL3QvdDc0MDktc3VibW9kdWxlLWRldGFjaGVkLXdvcmstdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzAxOGUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwOS1zdWJtb2R1bGUtZGV0YWNoZWQtd29yay10cmVlLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgRGFuaWVsIEdyYcOxYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHN1Ym1vZHVsZXMgb24gZGV0YWNoZWQgd29ya2luZyB0cmVlCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0ICJnaXQgc3VibW9kdWxlIiBpbml0aWFsaXphdGlvbiwgdXBkYXRlIGFuZCBhZGRpdGlvbiB3b3Jrcworb24gZGV0YWNoZWQgd29ya2luZyB0cmVlcworJworCitURVNUX05PX0NSRUFURV9SRVBPPTEKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgb24gZGV0YWNoZWQgd29ya2luZyB0cmVlJyAnCisJZ2l0IGluaXQgLS1iYXJlIHJlbW90ZSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gYnVuZGxlMSAmJgorCSgKKwkJY2QgYnVuZGxlMSAmJgorCQl0ZXN0X2NvbW1pdCAic2hvb3QiICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vZXhwZWN0CisJKSAmJgorCW1rZGlyIGhvbWUgJiYKKwkoCisJCWNkIGhvbWUgJiYKKwkJR0lUX1dPUktfVFJFRT0iJChwd2QpIiAmJgorCQlHSVRfRElSPSIkKHB3ZCkvLmRvdGZpbGVzIiAmJgorCQlleHBvcnQgR0lUX1dPUktfVFJFRSBHSVRfRElSICYmCisJCWdpdCBjbG9uZSAtLWJhcmUgLi4vcmVtb3RlIC5kb3RmaWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9idW5kbGUxIC52aW0vYnVuZGxlL3NvZ29vZCAmJgorCQl0ZXN0X2NvbW1pdCAic29nb29kIiAmJgorCQkoCisJCQl1bnNldCBHSVRfV09SS19UUkVFIEdJVF9ESVIgJiYKKwkJCWNkIC52aW0vYnVuZGxlL3NvZ29vZCAmJgorCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIC4uLy4uLy4uLy4uL2V4cGVjdCBhY3R1YWwKKwkJKSAmJgorCQlnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCisJKSAmJgorCW1rZGlyIGhvbWUyICYmCisJKAorCQljZCBob21lMiAmJgorCQlnaXQgY2xvbmUgLS1iYXJlIC4uL3JlbW90ZSAuZG90ZmlsZXMgJiYKKwkJR0lUX1dPUktfVFJFRT0iJChwd2QpIiAmJgorCQlHSVRfRElSPSIkKHB3ZCkvLmRvdGZpbGVzIiAmJgorCQlleHBvcnQgR0lUX1dPUktfVFJFRSBHSVRfRElSICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJCSgKKwkJCXVuc2V0IEdJVF9XT1JLX1RSRUUgR0lUX0RJUiAmJgorCQkJY2QgLnZpbS9idW5kbGUvc29nb29kICYmCisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgLi4vLi4vLi4vLi4vZXhwZWN0IGFjdHVhbAorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgb24gZGV0YWNoZWQgd29ya2luZyBwb2ludGVkIGJ5IGNvcmUud29ya3RyZWUnICcKKwlta2RpciBob21lMyAmJgorCSgKKwkJY2QgaG9tZTMgJiYKKwkJR0lUX0RJUj0iJChwd2QpLy5kb3RmaWxlcyIgJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJZ2l0IGNsb25lIC0tYmFyZSAuLi9yZW1vdGUgIiRHSVRfRElSIiAmJgorCQlnaXQgY29uZmlnIGNvcmUuYmFyZSBmYWxzZSAmJgorCQlnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgLi4gJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9idW5kbGUxIC52aW0vYnVuZGxlL2R1cGUgJiYKKwkJdGVzdF9jb21taXQgImR1cGUiICYmCisJCWdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBob21lICYmCisJCUdJVF9ESVI9IiQocHdkKS8uZG90ZmlsZXMiICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCWdpdCBjb25maWcgY29yZS5iYXJlIGZhbHNlICYmCisJCWdpdCBjb25maWcgY29yZS53b3JrdHJlZSAuLiAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkJdGVzdCAtZiAudmltL2J1bmRsZS9kdXBlL3Nob290LnQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxMS1zdWJtb2R1bGUtY29uZmlnLnNoIGIvdC90NzQxMS1zdWJtb2R1bGUtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkMjhlOTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDExLXN1Ym1vZHVsZS1jb25maWcuc2gKQEAgLTAsMCArMSwyNTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgSGVpa28gVm9pZ3QKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzdWJtb2R1bGVzIGNvbmZpZyBjYWNoZSBpbmZyYXN0cnVjdHVyZQorCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBwYXJzaW5nIC5naXRtb2R1bGVzIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5Citmcm9tIHRoZSBkYXRhYmFzZSBhbmQgZnJvbSB0aGUgd29ya3RyZWUgd29ya3MuCisnCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89MQorLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb25maWcgY2FjaGUgc2V0dXAnICcKKwlta2RpciBzdWJtb2R1bGUgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gYSA+YSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbWEKKwkpICYmCisJbWtkaXIgc3VwZXIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBhICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhcyBzdWJtb2R1bGUgYW5kIGFzIGEiICYmCisJCWdpdCBtdiBhIGIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibW92ZSBhIHRvIGIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uIHBhcnNpbmcgd2l0aCBlcnJvcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHJlcG8iICYmCisJdGVzdF9jcmVhdGVfcmVwbyByZXBvICYmCisJY2F0ID5yZXBvLy5naXRtb2R1bGVzIDw8LVxFT0YgJiYKKwlbc3VibW9kdWxlICJzIl0KKwkJcGF0aAorCQlpZ25vcmUKKwlFT0YKKwkoCisJCWNkIHJlcG8gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdC10b29sIHN1Ym1vZHVsZS1jb25maWcgIiIgcyAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5ncmVwICJiYWQgY29uZmlnIiBhY3R1YWwKKwkpCisnCisKK2NhdCA+c3VwZXIvZXhwZWN0IDw8RU9GCitTdWJtb2R1bGUgbmFtZTogJ2EnIGZvciBwYXRoICdhJworU3VibW9kdWxlIG5hbWU6ICdhJyBmb3IgcGF0aCAnYicKK1N1Ym1vZHVsZSBuYW1lOiAnc3VibW9kdWxlJyBmb3IgcGF0aCAnc3VibW9kdWxlJworU3VibW9kdWxlIG5hbWU6ICdzdWJtb2R1bGUnIGZvciBwYXRoICdzdWJtb2R1bGUnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBwYXJzaW5nIGFuZCBsb29rdXAgb2Ygc3VibW9kdWxlIGNvbmZpZyBieSBwYXRoJyAnCisJKGNkIHN1cGVyICYmCisJCXRlc3QtdG9vbCBzdWJtb2R1bGUtY29uZmlnIFwKKwkJCUhFQUReIGEgXAorCQkJSEVBRCBiIFwKKwkJCUhFQUReIHN1Ym1vZHVsZSBcCisJCQlIRUFEIHN1Ym1vZHVsZSBcCisJCQkJPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHBhcnNpbmcgYW5kIGxvb2t1cCBvZiBzdWJtb2R1bGUgY29uZmlnIGJ5IG5hbWUnICcKKwkoY2Qgc3VwZXIgJiYKKwkJdGVzdC10b29sIHN1Ym1vZHVsZS1jb25maWcgLS1uYW1lIFwKKwkJCUhFQUReIGEgXAorCQkJSEVBRCBhIFwKKwkJCUhFQUReIHN1Ym1vZHVsZSBcCisJCQlIRUFEIHN1Ym1vZHVsZSBcCisJCQkJPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCitjYXQgPnN1cGVyL2V4cGVjdF9lcnJvciA8PEVPRgorU3VibW9kdWxlIG5hbWU6ICdhJyBmb3IgcGF0aCAnYicKK1N1Ym1vZHVsZSBuYW1lOiAnc3VibW9kdWxlJyBmb3IgcGF0aCAnc3VibW9kdWxlJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGluIGhpc3Rvcnkgb2Ygb25lIHN1Ym1vZHVsZSBjb25maWcgbGV0cyBjb250aW51ZSwgc3RkZXJyIG1lc3NhZ2UgY29udGFpbnMgYmxvYiByZWYnICcKKwlPUklHPSQoZ2l0IC1DIHN1cGVyIHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIHJlc2V0IC0taGFyZCAkT1JJRyIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJY3AgLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMuYmFrICYmCisJCWVjaG8gIgl2YWx1ZSA9IFwiIiA+Pi5naXRtb2R1bGVzICYmCisJCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkJbXYgLmdpdG1vZHVsZXMuYmFrIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBlcnJvciIgJiYKKwkJc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdC10b29sIHN1Ym1vZHVsZS1jb25maWcgXAorCQkJSEVBRCBiIFwKKwkJCUhFQUQgc3VibW9kdWxlIFwKKwkJCQk+YWN0dWFsIFwKKwkJCQkyPmFjdHVhbF9zdGRlcnIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0X2Vycm9yIGFjdHVhbCAmJgorCQl0ZXN0X2kxOG5ncmVwICJzdWJtb2R1bGUtYmxvYiAkc2hhMTouZ2l0bW9kdWxlcyIgYWN0dWFsX3N0ZGVyciA+L2Rldi9udWxsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBkaWZmZXJlbnQgdHJlZWlzaHMgd29ya3MnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCB0YWcgbmV3X3RhZyAmJgorCQl0cmVlPSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwkJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEXntjb21taXR9KSAmJgorCQl0ZXN0LXRvb2wgc3VibW9kdWxlLWNvbmZpZyAkY29tbWl0IGIgPmV4cGVjdCAmJgorCQl0ZXN0LXRvb2wgc3VibW9kdWxlLWNvbmZpZyAkdHJlZSBiID5hY3R1YWwuMSAmJgorCQl0ZXN0LXRvb2wgc3VibW9kdWxlLWNvbmZpZyBuZXdfdGFnIGIgPmFjdHVhbC4yICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuMSAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLjIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGluIGhpc3RvcnkgaW4gZmV0Y2hyZWN1cnNlc3VibW9kdWxlIGxldHMgY29udGludWUnICcKKwlPUklHPSQoZ2l0IC1DIHN1cGVyIHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIHJlc2V0IC0taGFyZCAkT1JJRyIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBcCisJCQlzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNocmVjdXJzZXN1Ym1vZHVsZXMgYmxhYmxhICYmCisJCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IC1mIC5naXRtb2R1bGVzIFwKKwkJCXN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hyZWN1cnNlc3VibW9kdWxlcyAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgZXJyb3IgaW4gZmV0Y2hyZWN1cnNlc3VibW9kdWxlcyIgJiYKKwkJdGVzdC10b29sIHN1Ym1vZHVsZS1jb25maWcgXAorCQkJSEVBRCBiIFwKKwkJCUhFQUQgc3VibW9kdWxlIFwKKwkJCQk+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdF9lcnJvciBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgc3VibW9kdWxlcyBjb25maWcgZnJvbSB0aGUgd29ya2luZyB0cmVlIHdpdGggInN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyInICcKKwkoY2Qgc3VwZXIgJiYKKwkJZWNobyAiLi4vc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnNldHRpbmcgc3VibW9kdWxlcyBjb25maWcgZnJvbSB0aGUgd29ya2luZyB0cmVlIHdpdGggInN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLXVuc2V0IicgJworCShjZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgJiYKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkpCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBzdWJtb2R1bGVzIGNvbmZpZyB3aXRoICJzdWJtb2R1bGUtLWhlbHBlciBjb25maWciJyAnCisJKGNkIHN1cGVyICYmCisJCWVjaG8gIm5ld191cmwiID5leHBlY3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCAibmV3X3VybCIgJiYKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJ3cml0aW5nIHVuc3RhZ2VkIHN1Ym1vZHVsZXMgY29uZmlnIHdpdGggInN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciBjaGVja291dCAuZ2l0bW9kdWxlcyIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZWNobyAibmV3ZXJfdXJsIiA+ZXhwZWN0ICYmCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgIm5ld2VyX3VybCIgJiYKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlYWJsZSAuZ2l0bW9kdWxlcyB3aGVuIGl0IGlzIGluIHRoZSB3b3JraW5nIHRyZWUnICcKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIC0tY2hlY2std3JpdGVhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlYWJsZSAuZ2l0bW9kdWxlcyB3aGVuIGl0IGlzIG5vd2hlcmUgaW4gdGhlIHJlcG9zaXRvcnknICcKKwlPUklHPSQoZ2l0IC1DIHN1cGVyIHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIHJlc2V0IC0taGFyZCAkT1JJRyIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IHJtIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gInJlbW92ZSAuZ2l0bW9kdWxlcyBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCIgJiYKKwkJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLXdyaXRlYWJsZSAuZ2l0bW9kdWxlcyB3aGVuIGl0IGlzIGluIHRoZSBpbmRleCBidXQgbm90IGluIHRoZSB3b3JraW5nIHRyZWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciBjaGVja291dCAuZ2l0bW9kdWxlcyIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJcm0gLWYgLmdpdG1vZHVsZXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLXdyaXRlYWJsZSAuZ2l0bW9kdWxlcyB3aGVuIGl0IGlzIGluIHRoZSBjdXJyZW50IGJyYW5jaCBidXQgbm90IGluIHRoZSBpbmRleCcgJworCU9SSUc9JChnaXQgLUMgc3VwZXIgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgcmVzZXQgLS1oYXJkICRPUklHIiAmJgorCShjZCBzdXBlciAmJgorCQlnaXQgcm0gLmdpdG1vZHVsZXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyAtLWNoZWNrLXdyaXRlYWJsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBzdWJtb2R1bGVzIGNvbmZpZyBmcm9tIHRoZSBpbmRleCB3aGVuIC5naXRtb2R1bGVzIGlzIG5vdCBpbiB0aGUgd29ya2luZyB0cmVlJyAnCisJT1JJRz0kKGdpdCAtQyBzdXBlciByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciByZXNldCAtLWhhcmQgJE9SSUciICYmCisJKGNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgInN0YWdlZF91cmwiICYmCisJCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkJcm0gLWYgLmdpdG1vZHVsZXMgJiYKKwkJZWNobyAic3RhZ2VkX3VybCIgPmV4cGVjdCAmJgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBzdWJtb2R1bGVzIGNvbmZpZyBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCB3aGVuIC5naXRtb2R1bGVzIGlzIG5vdCBpbiB0aGUgaW5kZXgnICcKKwlPUklHPSQoZ2l0IC1DIHN1cGVyIHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIHJlc2V0IC0taGFyZCAkT1JJRyIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IHJtIC5naXRtb2R1bGVzICYmCisJCWVjaG8gIi4uL3N1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBuZXN0ZWQgc3VibW9kdWxlcyBjb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IGluaXQgc3VibW9kdWxlL25lc3RlZF9zdWJtb2R1bGUgJiYKKwkJZWNobyAiYSIgPnN1Ym1vZHVsZS9uZXN0ZWRfc3VibW9kdWxlL2EgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZS9uZXN0ZWRfc3VibW9kdWxlIGFkZCBhICYmCisJCWdpdCAtQyBzdWJtb2R1bGUvbmVzdGVkX3N1Ym1vZHVsZSBjb21taXQgLW0gImFkZCBhIiAmJgorCQlnaXQgLUMgc3VibW9kdWxlIHN1Ym1vZHVsZSBhZGQgLi9uZXN0ZWRfc3VibW9kdWxlICYmCisJCWdpdCAtQyBzdWJtb2R1bGUgYWRkIG5lc3RlZF9zdWJtb2R1bGUgJiYKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBjb21taXQgLW0gImFkZGVkIG5lc3RlZF9zdWJtb2R1bGUiICYmCisJCWdpdCBhZGQgc3VibW9kdWxlICYmCisJCWdpdCBjb21taXQgLW0gInVwZGF0ZWQgc3VibW9kdWxlIiAmJgorCQllY2hvICIuL25lc3RlZF9zdWJtb2R1bGUiID5leHBlY3QgJiYKKwkJdGVzdC10b29sIHN1Ym1vZHVsZS1uZXN0ZWQtcmVwby1jb25maWcgXAorCQkJc3VibW9kdWxlIHN1Ym1vZHVsZS5uZXN0ZWRfc3VibW9kdWxlLnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgbmVzdGVkIHN1Ym1vZHVsZXMgY29uZmlnIHdoZW4gLmdpdG1vZHVsZXMgaXMgbm90IGluIHRoZSB3b3JraW5nIHRyZWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlci9zdWJtb2R1bGUgY2hlY2tvdXQgLmdpdG1vZHVsZXMiICYmCisJKGNkIHN1cGVyICYmCisJCWVjaG8gIi4vbmVzdGVkX3N1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCQlybSBzdWJtb2R1bGUvLmdpdG1vZHVsZXMgJiYKKwkJdGVzdC10b29sIHN1Ym1vZHVsZS1uZXN0ZWQtcmVwby1jb25maWcgXAorCQkJc3VibW9kdWxlIHN1Ym1vZHVsZS5uZXN0ZWRfc3VibW9kdWxlLnVybCA+YWN0dWFsIDI+d2FybmluZyAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgd2FybmluZyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MTItc3VibW9kdWxlLWFic29yYmdpdGRpcnMuc2ggYi90L3Q3NDEyLXN1Ym1vZHVsZS1hYnNvcmJnaXRkaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFjZmExNTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDEyLXN1Ym1vZHVsZS1hYnNvcmJnaXRkaXJzLnNoCkBAIC0wLDAgKzEsMTMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzdWJtb2R1bGUgYWJzb3JiZ2l0ZGlycworCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBgZ2l0IHN1Ym1vZHVlIGFic29yYmdpdGRpcnNgIG1vdmVzIGEgc3VibW9kdWxlcyBnaXQKK2RpcmVjdG9yeSBpbnRvIHRoZSBzdXBlcnByb2plY3QuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHJlYWwgc3VibW9kdWxlJyAnCisJZ2l0IGluaXQgc3ViMSAmJgorCXRlc3RfY29tbWl0IC1DIHN1YjEgZmlyc3QgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3N1YjEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVycHJvamVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvcmIgdGhlIGdpdCBkaXInICcKKwk+ZXhwZWN0LjEgJiYKKwk+ZXhwZWN0LjIgJiYKKwk+YWN0dWFsLjEgJiYKKwk+YWN0dWFsLjIgJiYKKwlnaXQgc3RhdHVzID5leHBlY3QuMSAmJgorCWdpdCAtQyBzdWIxIHJldi1wYXJzZSBIRUFEID5leHBlY3QuMiAmJgorCWdpdCBzdWJtb2R1bGUgYWJzb3JiZ2l0ZGlycyAmJgorCWdpdCBmc2NrICYmCisJdGVzdCAtZiBzdWIxLy5naXQgJiYKKwl0ZXN0IC1kIC5naXQvbW9kdWxlcy9zdWIxICYmCisJZ2l0IHN0YXR1cyA+YWN0dWFsLjEgJiYKKwlnaXQgLUMgc3ViMSByZXYtcGFyc2UgSEVBRCA+YWN0dWFsLjIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMSBhY3R1YWwuMSAmJgorCXRlc3RfY21wIGV4cGVjdC4yIGFjdHVhbC4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29yYmluZyBkb2VzIG5vdCBmYWlsIGZvciBkZWluaXRpYWxpemVkIHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCIgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAtLWFsbCAmJgorCWdpdCBzdWJtb2R1bGUgYWJzb3JiZ2l0ZGlycyAmJgorCXRlc3QgLWQgLmdpdC9tb2R1bGVzL3N1YjEgJiYKKwl0ZXN0IC1kIHN1YjEgJiYKKwkhIHRlc3QgLWUgc3ViMS8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5lc3RlZCBzdWJtb2R1bGUnICcKKwlnaXQgaW5pdCBzdWIxL25lc3RlZCAmJgorCXRlc3RfY29tbWl0IC1DIHN1YjEvbmVzdGVkIGZpcnN0X25lc3RlZCAmJgorCWdpdCAtQyBzdWIxIHN1Ym1vZHVsZSBhZGQgLi9uZXN0ZWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgLUMgc3ViMSBjb21taXQgLW0gImFkZCBuZXN0ZWQiICYmCisJZ2l0IGFkZCBzdWIxICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViMSB0byBpbmNsdWRlIG5lc3RlZCBzdWJtb2R1bGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29yYiB0aGUgZ2l0IGRpciBpbiBhIG5lc3RlZCBzdWJtb2R1bGUnICcKKwlnaXQgc3RhdHVzID5leHBlY3QuMSAmJgorCWdpdCAtQyBzdWIxL25lc3RlZCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0LjIgJiYKKwlnaXQgc3VibW9kdWxlIGFic29yYmdpdGRpcnMgJiYKKwl0ZXN0IC1mIHN1YjEvbmVzdGVkLy5naXQgJiYKKwl0ZXN0IC1kIC5naXQvbW9kdWxlcy9zdWIxL21vZHVsZXMvbmVzdGVkICYmCisJZ2l0IHN0YXR1cyA+YWN0dWFsLjEgJiYKKwlnaXQgLUMgc3ViMS9uZXN0ZWQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbC4yICYmCisJdGVzdF9jbXAgZXhwZWN0LjEgYWN0dWFsLjEgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMiBhY3R1YWwuMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1zZXR1cCBuZXN0ZWQgc3VibW9kdWxlJyAnCisJIyB1bi1hYnNvcmIgdGhlIGRpcmVjdCBzdWJtb2R1bGUsIHRvIHRlc3QgaWYgdGhlIG5lc3RlZCBzdWJtb2R1bGUKKwkjIGlzIHN0aWxsIGNvcnJlY3QgKG5lZWRzIGEgcmV3cml0ZSBvZiB0aGUgZ2l0ZmlsZSBvbmx5KQorCXJtIC1yZiBzdWIxLy5naXQgJiYKKwltdiAuZ2l0L21vZHVsZXMvc3ViMSBzdWIxLy5naXQgJiYKKwlHSVRfV09SS19UUkVFPS4gZ2l0IC1DIHN1YjEgY29uZmlnIC0tdW5zZXQgY29yZS53b3JrdHJlZSAmJgorCSMgZml4dXAgdGhlIG5lc3RlZCBzdWJtb2R1bGUKKwllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9uZXN0ZWQiID5zdWIxL25lc3RlZC8uZ2l0ICYmCisJR0lUX1dPUktfVFJFRT0uLi8uLi8uLi9uZXN0ZWQgZ2l0IC1DIHN1YjEvLmdpdC9tb2R1bGVzL25lc3RlZCBjb25maWcgXAorCQljb3JlLndvcmt0cmVlICIuLi8uLi8uLi9uZXN0ZWQiICYmCisJIyBtYWtlIHN1cmUgdGhpcyByZS1zZXR1cCBpcyBjb3JyZWN0CisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgJiYKKworCSMgYWxzbyBtYWtlIHN1cmUgdGhpcyBvbGQgc2V0dXAgZG9lcyBub3QgcmVncmVzcworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSA+b3V0IDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb3JiIHRoZSBnaXQgZGlyIGluIGEgbmVzdGVkIHN1Ym1vZHVsZScgJworCWdpdCBzdGF0dXMgPmV4cGVjdC4xICYmCisJZ2l0IC1DIHN1YjEvbmVzdGVkIHJldi1wYXJzZSBIRUFEID5leHBlY3QuMiAmJgorCWdpdCBzdWJtb2R1bGUgYWJzb3JiZ2l0ZGlycyAmJgorCXRlc3QgLWYgc3ViMS8uZ2l0ICYmCisJdGVzdCAtZiBzdWIxL25lc3RlZC8uZ2l0ICYmCisJdGVzdCAtZCAuZ2l0L21vZHVsZXMvc3ViMS9tb2R1bGVzL25lc3RlZCAmJgorCWdpdCBzdGF0dXMgPmFjdHVhbC4xICYmCisJZ2l0IC1DIHN1YjEvbmVzdGVkIHJldi1wYXJzZSBIRUFEID5hY3R1YWwuMiAmJgorCXRlc3RfY21wIGV4cGVjdC4xIGFjdHVhbC4xICYmCisJdGVzdF9jbXAgZXhwZWN0LjIgYWN0dWFsLjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBnaXRsaW5rIHdpdGggbWlzc2luZyAuZ2l0bW9kdWxlcyBlbnRyeScgJworCWdpdCBpbml0IHN1YjIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdWIyIGZpcnN0ICYmCisJZ2l0IGFkZCBzdWIyICYmCisJZ2l0IGNvbW1pdCAtbSBzdXBlcnByb2plY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb3JiaW5nIHRoZSBnaXQgZGlyIGZhaWxzIGZvciBpbmNvbXBsZXRlIHN1Ym1vZHVsZXMnICcKKwlnaXQgc3RhdHVzID5leHBlY3QuMSAmJgorCWdpdCAtQyBzdWIyIHJldi1wYXJzZSBIRUFEID5leHBlY3QuMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgYWJzb3JiZ2l0ZGlycyAmJgorCWdpdCAtQyBzdWIyIGZzY2sgJiYKKwl0ZXN0IC1kIHN1YjIvLmdpdCAmJgorCWdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCWdpdCAtQyBzdWIyIHJldi1wYXJzZSBIRUFEID5hY3R1YWwuMiAmJgorCXRlc3RfY21wIGV4cGVjdC4xIGFjdHVhbC4xICYmCisJdGVzdF9jbXAgZXhwZWN0LjIgYWN0dWFsLjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBzdWJtb2R1bGUgd2l0aCBtdWx0aXBsZSB3b3JrdHJlZXMnICcKKwkjIGZpcnN0IGNyZWF0ZSBhbm90aGVyIHVuZW1iZWRkZWQgZ2l0IGRpciBpbiBhIG5ldyBzdWJtb2R1bGUKKwlnaXQgaW5pdCBzdWIzICYmCisJdGVzdF9jb21taXQgLUMgc3ViMyBmaXJzdCAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vc3ViMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBhbm90aGVyIHN1Ym1vZHVsZSIgJiYKKwlnaXQgLUMgc3ViMyB3b3JrdHJlZSBhZGQgLi4vc3ViM19zZWNvbmRfd29ya190cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29yYmluZyBmYWlscyBmb3IgYSBzdWJtb2R1bGUgd2l0aCBtdWx0aXBsZSB3b3JrdHJlZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGFic29yYmdpdGRpcnMgc3ViMyAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAibm90IHN1cHBvcnRlZCIgZXJyb3IKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDEzLXN1Ym1vZHVsZS1pcy1hY3RpdmUuc2ggYi90L3Q3NDEzLXN1Ym1vZHVsZS1pcy1hY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzhlN2U5OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTMtc3VibW9kdWxlLWlzLWFjdGl2ZS5zaApAQCAtMCwwICsxLDEwNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlCisKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGBnaXQgc3VibW9kdWUtLWhlbHBlciBpcy1hY3RpdmVgIGNvcnJlY3RseSBpZGVudGlmaWVzCitzdWJtb2R1bGVzIHdoaWNoIGFyZSAiYWN0aXZlIiBhbmQgaW50ZXJlc3RpbmcgdG8gdGhlIHVzZXIuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBpbml0IHN1YiAmJgorCXRlc3RfY29tbWl0IC1DIHN1YiBpbml0aWFsICYmCisJZ2l0IGluaXQgc3VwZXIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdXBlciBpbml0aWFsICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vc3ViIHN1YjEgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIGFkZCAuLi9zdWIgc3ViMiAmJgorCisJIyBSZW1vdmUgc3VibW9kdWxlLjxuYW1lPi5hY3RpdmUgZW50cmllcyBpbiBvcmRlciB0byB0ZXN0IGluIGFuCisJIyBlbnZpcm9ubWVudCB3aGVyZSBvbmx5IFVSTHMgYXJlIHByZXNlbnQgaW4gdGhlIGNvbmlmZworCWdpdCAtQyBzdXBlciBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3ViMS5hY3RpdmUgJiYKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1YjIuYWN0aXZlICYmCisKKwlnaXQgLUMgc3VwZXIgY29tbWl0IC1hIC1tICJhZGQgMiBzdWJtb2R1bGVzIGF0IHN1YnsxLDJ9IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpcy1hY3RpdmUgd29ya3Mgd2l0aCB1cmxzJyAnCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIxICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIyICYmCisKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1YjEuVVJMICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIxICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyBzdWJtb2R1bGUuc3ViMS5VUkwgLi4vc3ViICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzLWFjdGl2ZSB3b3JrcyB3aXRoIHN1Ym1vZHVsZS48bmFtZT4uYWN0aXZlIGNvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciBjb25maWcgc3VibW9kdWxlLnN1YjEuVVJMIC4uL3N1YiIgJiYKKworCWdpdCAtQyBzdXBlciBjb25maWcgLS1ib29sIHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZSAiZmFsc2UiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIxICYmCisKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tYm9vbCBzdWJtb2R1bGUuc3ViMS5hY3RpdmUgInRydWUiICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWIxLlVSTCAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBpcy1hY3RpdmUgc3ViMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpcy1hY3RpdmUgd29ya3Mgd2l0aCBiYXNpYyBzdWJtb2R1bGUuYWN0aXZlIGNvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNvbmZpZyBzdWJtb2R1bGUuc3ViMS5VUkwgLi4vc3ViIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0LWFsbCBzdWJtb2R1bGUuYWN0aXZlIiAmJgorCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuYWN0aXZlICIuIiAmJgorCWdpdCAtQyBzdXBlciBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3ViMS5VUkwgJiYKKworCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBpcy1hY3RpdmUgc3ViMSAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBpcy1hY3RpdmUgc3ViMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpcy1hY3RpdmUgY29ycmVjdGx5IHdvcmtzIHdpdGggcGF0aHMgdGhhdCBhcmUgbm90IHN1Ym1vZHVsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciBjb25maWcgLS11bnNldC1hbGwgc3VibW9kdWxlLmFjdGl2ZSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlciBzdWJtb2R1bGUtLWhlbHBlciBpcy1hY3RpdmUgbm90LWEtc3VibW9kdWxlICYmCisKKwlnaXQgLUMgc3VwZXIgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5hY3RpdmUgIi4iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBub3QtYS1zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXMtYWN0aXZlIHdvcmtzIHdpdGggZXhjbHVzaW9ucyBpbiBzdWJtb2R1bGUuYWN0aXZlIGNvbmZpZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLXVuc2V0LWFsbCBzdWJtb2R1bGUuYWN0aXZlIiAmJgorCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuYWN0aXZlICIuIiAmJgorCWdpdCAtQyBzdXBlciBjb25maWcgLS1hZGQgc3VibW9kdWxlLmFjdGl2ZSAiOihleGNsdWRlKXN1YjEiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjEgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlLS1oZWxwZXIgaXMtYWN0aXZlIHN1YjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXMtYWN0aXZlIHdpdGggc3VibW9kdWxlLmFjdGl2ZSBhbmQgc3VibW9kdWxlLjxuYW1lPi5hY3RpdmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciBjb25maWcgLS11bnNldC1hbGwgc3VibW9kdWxlLmFjdGl2ZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyBzdXBlciBjb25maWcgLS11bnNldCBzdWJtb2R1bGUuc3ViMS5hY3RpdmUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1YjIuYWN0aXZlIiAmJgorCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuYWN0aXZlICJzdWIxIiAmJgorCWdpdCAtQyBzdXBlciBjb25maWcgLS1ib29sIHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZSAiZmFsc2UiICYmCisJZ2l0IC1DIHN1cGVyIGNvbmZpZyAtLWJvb2wgc3VibW9kdWxlLnN1YjIuYWN0aXZlICJ0cnVlIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIxICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGlzLWFjdGl2ZSBzdWIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzLWFjdGl2ZSwgc3VibW9kdWxlLmFjdGl2ZSBhbmQgc3VibW9kdWxlIGFkZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1cGVyMiIgJiYKKwlnaXQgaW5pdCBzdXBlcjIgJiYKKwl0ZXN0X2NvbW1pdCAtQyBzdXBlcjIgaW5pdGlhbCAmJgorCWdpdCAtQyBzdXBlcjIgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5hY3RpdmUgInN1YioiICYmCisKKwkjIHN1Ym1vZHVsZSBhZGQgc2hvdWxkIG9ubHkgYWRkIHN1Ym1vZHVsZS48bmFtZT4uYWN0aXZlCisJIyB0byB0aGUgY29uZmlnIGlmIG5vdCBtYXRjaGVkIGJ5IHRoZSBwYXRoc3BlYworCWdpdCAtQyBzdXBlcjIgc3VibW9kdWxlIGFkZCAuLi9zdWIgc3ViMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlcjIgY29uZmlnIC0tZ2V0IHN1Ym1vZHVsZS5zdWIxLmFjdGl2ZSAmJgorCisJZ2l0IC1DIHN1cGVyMiBzdWJtb2R1bGUgYWRkIC4uL3N1YiBtb2QgJiYKKwlnaXQgLUMgc3VwZXIyIGNvbmZpZyAtLWdldCBzdWJtb2R1bGUubW9kLmFjdGl2ZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MTQtc3VibW9kdWxlLW1pc3Rha2VzLnNoIGIvdC90NzQxNC1zdWJtb2R1bGUtbWlzdGFrZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJlN2RmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTQtc3VibW9kdWxlLW1pc3Rha2VzLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdoYW5kbGluZyBvZiBjb21tb24gbWlzdGFrZXMgcGVvcGxlIG1heSBtYWtlIHdpdGggc3VibW9kdWxlcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZW1iZWRkZWQgcmVwb3NpdG9yeScgJworCWdpdCBpbml0IGVtYmVkICYmCisJdGVzdF9jb21taXQgLUMgZW1iZWQgb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1hZGQgb24gZW1iZWRkZWQgcmVwb3NpdG9yeSB3YXJucycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC0tY2FjaGVkIC1mIGVtYmVkIiAmJgorCWdpdCBhZGQgZW1iZWQgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIHdhcm5pbmcgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8td2Fybi1lbWJlZGRlZC1yZXBvIHN1cHByZXNzZXMgd2FybmluZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC0tY2FjaGVkIC1mIGVtYmVkIiAmJgorCWdpdCBhZGQgLS1uby13YXJuLWVtYmVkZGVkLXJlcG8gZW1iZWQgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgd2FybmluZyBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gd2FybmluZyB3aGVuIHVwZGF0aW5nIGVudHJ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLS1jYWNoZWQgLWYgZW1iZWQiICYmCisJZ2l0IGFkZCBlbWJlZCAmJgorCWdpdCAtQyBlbWJlZCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0d28gJiYKKwlnaXQgYWRkIGVtYmVkIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhIHdhcm5pbmcgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgZG9lcyBub3Qgd2FybicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJtIC1yZiBzdWJtb2R1bGUgLmdpdG1vZHVsZXMiICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9lbWJlZCBzdWJtb2R1bGUgMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgd2FybmluZyBzdGRlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDE1LXN1Ym1vZHVsZS1uYW1lcy5zaCBiL3QvdDc0MTUtc3VibW9kdWxlLW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY3MDM2OGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDE1LXN1Ym1vZHVsZS1uYW1lcy5zaApAQCAtMCwwICsxLDI1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIGhhbmRsaW5nIG9mIC4uIGluIHN1Ym1vZHVsZSBuYW1lcworCitFeGVyY2lzZSB0aGUgbmFtZS1jaGVja2luZyBmdW5jdGlvbiBvbiBhIHZhcmlldHkgb2YgbmFtZXMsIGFuZCB0aGVuIGdpdmUgYQorcmVhbC13b3JsZCBzZXR1cCB0aGF0IGNvbmZpcm1zIHdlIGNhdGNoIHRoaXMgaW4gcHJhY3RpY2UuCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXBhY2suc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbmFtZXMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdmFsaWQKKwl2YWxpZC93aXRoL3BhdGhzCisJRU9GCisKKwlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2hlY2stbmFtZSA+YWN0dWFsIDw8LVxFT0YgJiYKKwl2YWxpZAorCXZhbGlkL3dpdGgvcGF0aHMKKworCS4uL2ZvbworCS8uLi9mb28KKwkuLlxmb28KKwlcLi5cZm9vCisJZm9vLy4uCisJZm9vLy4uLworCWZvb1wuLgorCWZvb1wuLlwKKwlmb28vLi4vYmFyCisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBpbm5vY2VudCBzdWJyZXBvJyAnCisJZ2l0IGluaXQgaW5ub2NlbnQgJiYKKwlnaXQgLUMgaW5ub2NlbnQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgcmVmdXNlcyBpbnZhbGlkIG5hbWVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgXAorCQlnaXQgc3VibW9kdWxlIGFkZCAtLW5hbWUgLi4vLi4vbW9kdWxlcy9ldmlsICIkUFdEL2lubm9jZW50IiBldmlsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBldmlsIHN1Ym1vZHVsZScgJworCWdpdCBzdWJtb2R1bGUgYWRkICIkUFdEL2lubm9jZW50IiBldmlsICYmCisKKwlta2RpciBtb2R1bGVzICYmCisJY3AgLXIgLmdpdC9tb2R1bGVzL2V2aWwgbW9kdWxlcyAmJgorCXdyaXRlX3NjcmlwdCBtb2R1bGVzL2V2aWwvaG9va3MvcG9zdC1jaGVja291dCA8PC1cRU9GICYmCisJZWNobyA+JjIgIlJVTk5JTkcgUE9TVCBDSEVDS09VVCIKKwlFT0YKKworCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmV2aWwudXBkYXRlIGNoZWNrb3V0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbmFtZS1zZWN0aW9uIFwKKwkJc3VibW9kdWxlLmV2aWwgc3VibW9kdWxlLi4uLy4uL21vZHVsZXMvZXZpbCAmJgorCWdpdCBhZGQgbW9kdWxlcyAmJgorCWdpdCBjb21taXQgLWFtIGV2aWwKKycKKworIyBUaGlzIHN0ZXAgc2VlbXMgbGlrZSBpdCBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgcGF5bG9hZCBpcworIyBjb250YWluZWQgZW50aXJlbHkgaW4gdGhlIGV2aWwgc3VibW9kdWxlLiBCdXQgZHVlIHRvIHRoZSB2YWdhcmllcyBvZiB0aGUKKyMgc3VibW9kdWxlIGNvZGUsIGNoZWNraW5nIG91dCB0aGUgZXZpbCBtb2R1bGUgd2lsbCBmYWlsIHVubGVzcyAiLmdpdC9tb2R1bGVzIgorIyBleGlzdHMuIEFkZGluZyBhbm90aGVyIHN1Ym1vZHVsZSAod2l0aCBhIG5hbWUgdGhhdCBzb3J0cyBiZWZvcmUgImV2aWwiKSBpcyBhbgorIyBlYXN5IHdheSB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY2FzZSBpbiB0aGUgdmljdGltIGNsb25lLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG90aGVyIHN1Ym1vZHVsZScgJworCWdpdCBzdWJtb2R1bGUgYWRkICIkUFdEL2lubm9jZW50IiBhbm90aGVyLW1vZHVsZSAmJgorCWdpdCBhZGQgYW5vdGhlci1tb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1hbSBhbm90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGV2aWwgc3VwZXJwcm9qZWN0JyAnCisJZ2l0IGNsb25lIC0tcmVjdXJzZS1zdWJtb2R1bGVzIC4gdmljdGltID5vdXRwdXQgMj4mMSAmJgorCSEgZ3JlcCAiUlVOTklORyBQT1NUIENIRUNLT1VUIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBkZXRlY3RzIGV2aWwgc3VwZXJwcm9qZWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhbnNmZXIuZnNja09iamVjdHMgZGV0ZWN0cyBldmlsIHN1cGVycHJvamVjdCAodW5wYWNrKScgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRzdC5naXQgJiYKKwlnaXQgLUMgZHN0LmdpdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIGRzdC5naXQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFuc2Zlci5mc2NrT2JqZWN0cyBkZXRlY3RzIGV2aWwgc3VwZXJwcm9qZWN0IChpbmRleCknICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QuZ2l0ICYmCisJZ2l0IC1DIGRzdC5naXQgY29uZmlnIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUgJiYKKwlnaXQgLUMgZHN0LmdpdCBjb25maWcgdHJhbnNmZXIudW5wYWNrTGltaXQgMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIGRzdC5naXQgSEVBRAorJworCisjIE5vcm1hbGx5IG91ciBwYWNrcyBjb250YWluIGNvbW1pdHMgZm9sbG93ZWQgYnkgdHJlZXMgZm9sbG93ZWQgYnkgYmxvYnMuIFRoaXMKKyMgcmV2ZXJzZXMgdGhlIG9yZGVyLCB3aGljaCByZXF1aXJlcyBiYWNrdHJhY2tpbmcgdG8gZmluZCB0aGUgY29udGV4dCBvZiBhCisjIGJsb2IuIFdlJ2xsIHN0YXJ0IHdpdGggYSBmcmVzaCBnaXRtb2R1bGVzLW9ubHkgdHJlZSB0byBtYWtlIGl0IHNpbXBsZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgb2RkbHkgb3JkZXJlZCBwYWNrJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9kZCAmJgorCWdpdCBybSAtcmYgLS1jYWNoZWQgLiAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tIG9kZCAmJgorCXsKKwkJcGFja19oZWFkZXIgMyAmJgorCQlwYWNrX29iaiAkKGdpdCByZXYtcGFyc2UgSEVBRDouZ2l0bW9kdWxlcykgJiYKKwkJcGFja19vYmogJChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCQlwYWNrX29iaiAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwl9ID5vZGQucGFjayAmJgorCXBhY2tfdHJhaWxlciBvZGQucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFuc2Zlci5mc2NrT2JqZWN0cyBoYW5kbGVzIG9kZCBwYWNrICh1bnBhY2spJyAnCisJcm0gLXJmIGRzdC5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0LmdpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkc3QuZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IDxvZGQucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFuc2Zlci5mc2NrT2JqZWN0cyBoYW5kbGVzIG9kZCBwYWNrIChpbmRleCknICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QuZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGRzdC5naXQgaW5kZXgtcGFjayAtLXN0cmljdCAtLXN0ZGluIDxvZGQucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIC0tc3RyaWN0IHdvcmtzIGZvciBub24tcmVwbyBwYWNrJyAnCisJcm0gLXJmIGRzdC5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0LmdpdCAmJgorCWNwIG9kZC5wYWNrIGRzdC5naXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZHN0LmdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IG9kZC5wYWNrIDI+b3V0cHV0ICYmCisJIyBNYWtlIHN1cmUgd2UgZmFpbCBkdWUgdG8gYmFkIGdpdG1vZHVsZXMgY29udGVudCwgbm90IGJlY2F1c2Ugd2UKKwkjIGNvdWxkIG5vdCByZWFkIHRoZSBibG9iIGluIHRoZSBmaXJzdCBwbGFjZS4KKwlncmVwIGdpdG1vZHVsZXNOYW1lIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGRldGVjdHMgc3ltbGlua2VkIC5naXRtb2R1bGVzIGZpbGUnICcKKwlnaXQgaW5pdCBzeW1saW5rICYmCisJKAorCQljZCBzeW1saW5rICYmCisKKwkJIyBNYWtlIHRoZSB0cmVlIGRpcmVjdGx5IHRvIGF2b2lkIGluZGV4IHJlc3RyaWN0aW9ucy4KKwkJIworCQkjIEJlY2F1c2Ugc3ltbGlua3Mgc3RvcmUgdGhlIHRhcmdldCBhcyBhIGJsb2IsIGNob29zZQorCQkjIGEgcGF0aG5hbWUgdGhhdCBjb3VsZCBiZSBwYXJzZWQgYXMgYSAuZ2l0bW9kdWxlcyBmaWxlCisJCSMgdG8gdHJpY2sgbmFpdmUgbm9uLXN5bWxpbmstYXdhcmUgY2hlY2tpbmcuCisJCXRyaWNreT0iW2Zvb11iYXI9dHJ1ZSIgJiYKKwkJY29udGVudD0kKGdpdCBoYXNoLW9iamVjdCAtdyAuLi8uZ2l0bW9kdWxlcykgJiYKKwkJdGFyZ2V0PSQocHJpbnRmICIkdHJpY2t5IiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQl7CisJCQlwcmludGYgIjEwMDY0NCBibG9iICRjb250ZW50XHQkdHJpY2t5XG4iICYmCisJCQlwcmludGYgIjEyMDAwMCBibG9iICR0YXJnZXRcdC5naXRtb2R1bGVzXG4iCisJCX0gfCBnaXQgbWt0cmVlICYmCisKKwkJIyBDaGVjayBub3Qgb25seSB0aGF0IHdlIGZhaWwsIGJ1dCB0aGF0IGl0IGlzIGR1ZSB0byB0aGUKKwkJIyBzeW1saW5rIGRldGVjdG9yOyB0aGlzIGdyZXAgc3RyaW5nIGNvbWVzIGZyb20gdGhlIGNvbmZpZworCQkjIHZhcmlhYmxlIG5hbWUgYW5kIHdpbGwgbm90IGJlIHRyYW5zbGF0ZWQuCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0cHV0ICYmCisJCXRlc3RfaTE4bmdyZXAgZ2l0bW9kdWxlc1N5bWxpbmsgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGRldGVjdHMgbm9uLWJsb2IgLmdpdG1vZHVsZXMnICcKKwlnaXQgaW5pdCBub24tYmxvYiAmJgorCSgKKwkJY2Qgbm9uLWJsb2IgJiYKKworCQkjIEFzIGFib3ZlLCBtYWtlIHRoZSBmdW5ueSB0cmVlIGRpcmVjdGx5IHRvIGF2b2lkIGluZGV4CisJCSMgcmVzdHJpY3Rpb25zLgorCQlta2RpciBzdWJkaXIgJiYKKwkJY3AgLi4vLmdpdG1vZHVsZXMgc3ViZGlyL2ZpbGUgJiYKKwkJZ2l0IGFkZCBzdWJkaXIvZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIG9rICYmCisJCWdpdCBscy10cmVlIEhFQUQgfCBzZWQgcy9zdWJkaXIvLmdpdG1vZHVsZXMvIHwgZ2l0IG1rdHJlZSAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0cHV0ICYmCisJCXRlc3RfaTE4bmdyZXAgZ2l0bW9kdWxlc0Jsb2Igb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGRldGVjdHMgY29ycnVwdCAuZ2l0bW9kdWxlcycgJworCWdpdCBpbml0IGNvcnJ1cHQgJiYKKwkoCisJCWNkIGNvcnJ1cHQgJiYKKworCQllY2hvICJbYnJva2VuIiA+LmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29tbWl0IC1tICJicm9rZW4gZ2l0bW9kdWxlcyIgJiYKKworCQlnaXQgZnNjayAyPm91dHB1dCAmJgorCQl0ZXN0X2kxOG5ncmVwIGdpdG1vZHVsZXNQYXJzZSBvdXRwdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAhICJiYWQgY29uZmlnIiBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ3ByZXZlbnQgZ2l0fjEgc3F1YXR0aW5nIG9uIFdpbmRvd3MnICcKKwlnaXQgaW5pdCBzcXVhdHRpbmcgJiYKKwkoCisJCWNkIHNxdWF0dGluZyAmJgorCQlta2RpciBhICYmCisJCXRvdWNoIGEvLi5naXQgJiYKKwkJZ2l0IGFkZCBhLy4uZ2l0ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCQltb2R1bGVzPSIkKHRlc3Rfd3JpdGVfbGluZXMgXAorCQkJIltzdWJtb2R1bGUgXCJiLlwiXSIgInVybCA9IC4iICJwYXRoID0gYyIgXAorCQkJIltzdWJtb2R1bGUgXCJiXCJdIiAidXJsID0gLiIgInBhdGggPSBkXFxcXGEiIHwKKwkJCWdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSIgJiYKKwkJcmV2PSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisJCWhhc2g9IiQoZWNobyB4IHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFwKKwkJCS0tY2FjaGVpbmZvIDE2MDAwMCwkcmV2LGRcXGEgMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiSW52YWxpZCBwYXRoIiBlcnIgJiYKKwkJZ2l0IC1jIGNvcmUucHJvdGVjdE5URlM9ZmFsc2UgdXBkYXRlLWluZGV4IC0tYWRkIFwKKwkJCS0tY2FjaGVpbmZvIDEwMDY0NCwkbW9kdWxlcywuZ2l0bW9kdWxlcyBcCisJCQktLWNhY2hlaW5mbyAxNjAwMDAsJHJldixjIFwKKwkJCS0tY2FjaGVpbmZvIDE2MDAwMCwkcmV2LGRcXGEgXAorCQkJLS1jYWNoZWluZm8gMTAwNjQ0LCRoYXNoLGQuL2EveCBcCisJCQktLWNhY2hlaW5mbyAxMDA2NDQsJGhhc2gsZC4vYS8uLmdpdCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IC1jIGNvcmUucHJvdGVjdE5URlM9ZmFsc2UgY29tbWl0IC1tICJtb2R1bGUiCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLnByb3RlY3ROVEZTPWZhbHNlIFwKKwkJY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgc3F1YXR0aW5nIHNxdWF0dGluZy1jbG9uZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgImRpcmVjdG9yeSBub3QgZW1wdHkiIC1lICJub3QgYW4gZW1wdHkgZGlyZWN0b3J5IiBlcnIgJiYKKwkhIGdyZXAgZ2l0ZGlyIHNxdWF0dGluZy1jbG9uZS9kL2EvZ2l0fjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpcnMgb2Ygc2libGluZyBzdWJtb2R1bGVzIG11c3Qgbm90IGJlIG5lc3RlZCcgJworCWdpdCBpbml0IG5lc3RlZCAmJgorCXRlc3RfY29tbWl0IC1DIG5lc3RlZCBuZXN0ZWQgJiYKKwkoCisJCWNkIG5lc3RlZCAmJgorCQljYXQgPi5naXRtb2R1bGVzIDw8LUVPRiAmJgorCQlbc3VibW9kdWxlICJoaXBwbyJdCisJCQl1cmwgPSAuCisJCQlwYXRoID0gdGhpbmcxCisJCVtzdWJtb2R1bGUgImhpcHBvL2hvb2tzIl0KKwkJCXVybCA9IC4KKwkJCXBhdGggPSB0aGluZzIKKwkJRU9GCisJCWdpdCBjbG9uZSAuIHRoaW5nMSAmJgorCQlnaXQgY2xvbmUgLiB0aGluZzIgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyB0aGluZzEgdGhpbmcyICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tIG5lc3RlZAorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgbmVzdGVkIGNsb25lIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiaXMgaW5zaWRlIGdpdCBkaXIiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MTYtc3VibW9kdWxlLWRhc2gtdXJsLnNoIGIvdC90NzQxNi1zdWJtb2R1bGUtZGFzaC11cmwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWJhMDQxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTYtc3VibW9kdWxlLWRhc2gtdXJsLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBoYW5kbGluZyBvZiAuZ2l0bW9kdWxlIHVybCB3aXRoIGRhc2gnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHN1Ym1vZHVsZSB3aXRoIHByb3RlY3RlZCBkYXNoIGluIHVybCcgJworCWdpdCBpbml0IHVwc3RyZWFtICYmCisJZ2l0IC1DIHVwc3RyZWFtIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGJhc2UgJiYKKwltdiB1cHN0cmVhbSAuLy11cHN0cmVhbSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vLXVwc3RyZWFtIHN1YiAmJgorCWdpdCBhZGQgc3ViIC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtbSBzdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2FuIHJlY3Vyc2Ugc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgZHN0IiAmJgorCWdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAuIGRzdCAmJgorCWVjaG8gYmFzZSA+ZXhwZWN0ICYmCisJZ2l0IC1DIGRzdC9zdWIgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgYWNjZXB0cyBwcm90ZWN0ZWQgZGFzaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCWdpdCBwdXNoIGRzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSAuLyBwcm90ZWN0aW9uIGZyb20gLmdpdG1vZHVsZXMgdXJsJyAnCisJcGVybCAtaSAtcGUgInN7XC4vfXt9IiAuZ2l0bW9kdWxlcyAmJgorCWdpdCBjb21taXQgLWFtICJkcm9wIHByb3RlY3Rpb24iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlamVjdHMgdW5wcm90ZWN0ZWQgZGFzaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLiBkc3QgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGlnbm9yaW5nIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIHJlamVjdHMgdW5wcm90ZWN0ZWQgZGFzaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIGRzdCBIRUFEIDI+ZXJyICYmCisJZ3JlcCBnaXRtb2R1bGVzVXJsIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBiYWNrc2xhc2ggaXMgaGFuZGxlZCBjb3JyZWN0bHknICcKKwlnaXQgaW5pdCB0ZXN0bW9kdWxlICYmCisJdGVzdF9jb21taXQgLUMgdGVzdG1vZHVsZSBjICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi90ZXN0bW9kdWxlICYmCisJOiBlbnN1cmUgdGhhdCB0aGUgbmFtZSBlbmRzIGluIGEgZG91YmxlIGJhY2tzbGFzaCAmJgorCXNlZCAtZSAic3xcXChzdWJtb2R1bGUgXCJ0ZXN0bW9kdWxlXFwpXCJ8XFwxXFxcXFxcXFxcInwiIFwKKwkJLWUgInN8dXJsID0gLip8dXJsID0gXCIgLS1zaG91bGQtbm90LWJlLWFuLW9wdGlvblwifCIgXAorCQk8LmdpdG1vZHVsZXMgPi5uZXcgJiYKKwltdiAubmV3IC5naXRtb2R1bGVzICYmCisJZ2l0IGNvbW1pdCAtYW0gIkFkZCB0ZXN0bW9kdWxlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXZlcmJvc2UgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLiBkb2xseSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAidW5rbm93biBvcHRpb24iIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MTctc3VibW9kdWxlLXBhdGgtdXJsLnNoIGIvdC90NzQxNy1zdWJtb2R1bGUtcGF0aC11cmwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjdlN2U5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTctc3VibW9kdWxlLXBhdGgtdXJsLnNoCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBoYW5kbGluZyBvZiAuZ2l0bW9kdWxlIHBhdGggd2l0aCBkYXNoJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBzdWJtb2R1bGUgd2l0aCBkYXNoIGluIHBhdGgnICcKKwlnaXQgaW5pdCB1cHN0cmVhbSAmJgorCWdpdCAtQyB1cHN0cmVhbSBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBiYXNlICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi91cHN0cmVhbSBzdWIgJiYKKwlnaXQgbXYgc3ViIC4vLXN1YiAmJgorCWdpdCBjb21taXQgLW0gc3VibW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlamVjdHMgdW5wcm90ZWN0ZWQgZGFzaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwlnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLiBkc3QgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIGlnbm9yaW5nIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIHJlamVjdHMgdW5wcm90ZWN0ZWQgZGFzaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdCIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJZ2l0IC1DIGRzdCBjb25maWcgdHJhbnNmZXIuZnNja09iamVjdHMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIGRzdCBIRUFEIDI+ZXJyICYmCisJZ3JlcCBnaXRtb2R1bGVzUGF0aCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAnc3VibW9kdWxlIHBhdGhzIGRpc2FsbG93cyB0cmFpbGluZyBzcGFjZXMnICcKKwlnaXQgaW5pdCBzdXBlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlciBzdWJtb2R1bGUgYWRkIC4uL3Vwc3RyZWFtICJzdWIgIiAmJgorCisJOiBhZGQgInN1YiIsIHRoZW4gcmVuYW1lICJzdWIiIHRvICJzdWIgIiwgdGhlIGhhcmQgd2F5ICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vdXBzdHJlYW0gc3ViICYmCisJdHJlZT0kKGdpdCAtQyBzdXBlciB3cml0ZS10cmVlKSAmJgorCWdpdCAtQyBzdXBlciBscy10cmVlICR0cmVlID50cmVlICYmCisJc2VkICJzL3N1Yi9zdWIgLyIgPHRyZWUgPnRyZWUubmV3ICYmCisJdHJlZT0kKGdpdCAtQyBzdXBlciBta3RyZWUgPHRyZWUubmV3KSAmJgorCWNvbW1pdD0kKGVjaG8gd2l0aCBzcGFjZSB8IGdpdCAtQyBzdXBlciBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwlnaXQgLUMgc3VwZXIgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkY29tbWl0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgc3VwZXIgZHN0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAic3ViICIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxOC1zdWJtb2R1bGUtc3BhcnNlLWdpdG1vZHVsZXMuc2ggYi90L3Q3NDE4LXN1Ym1vZHVsZS1zcGFyc2UtZ2l0bW9kdWxlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjdmMjcxOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MTgtc3VibW9kdWxlLXNwYXJzZS1naXRtb2R1bGVzLnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE4ICBBbnRvbmlvIE9zcGl0ZSA8YW8yQGFvMi5pdD4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZWFkaW5nL3dyaXRpbmcgLmdpdG1vZHVsZXMgd2hlbiBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZQorCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCwgd2hlbiAuZ2l0bW9kdWxlcyBpcyBpbiB0aGUgY3VycmVudCBicmFuY2ggYnV0IGlzIG5vdAoraW4gdGhlIHdvcmtpbmcgdHJlZSByZWFkaW5nIGZyb20gaXQgc3RpbGwgd29ya3MgYnV0IHdyaXRpbmcgdG8gaXQgZG9lcyBub3QuCisKK1RoZSB0ZXN0IHNldHVwIHVzZXMgYSBzcGFyc2UgY2hlY2tvdXQsIGhvd2V2ZXIgdGhlIHNhbWUgc2NlbmFyaW8gY2FuIGJlIHNldCB1cAorYWxzbyBieSBjb21taXR0aW5nIC5naXRtb2R1bGVzIGFuZCB0aGVuIGp1c3QgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgZmlsZXN5c3RlbS4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYXJzZSBjaGVja291dCBzZXR1cCB3aGljaCBoaWRlcyAuZ2l0bW9kdWxlcycgJworCWdpdCBpbml0IHVwc3RyZWFtICYmCisJZ2l0IGluaXQgc3VibW9kdWxlICYmCisJKGNkIHN1Ym1vZHVsZSAmJgorCQllY2hvIGZpbGUgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgZmlsZSIKKwkpICYmCisJKGNkIHVwc3RyZWFtICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIHN1Ym1vZHVsZSIKKwkpICYmCisJZ2l0IGNsb25lIHVwc3RyZWFtIHN1cGVyICYmCisJKGNkIHN1cGVyICYmCisJCWNhdCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PC1cRU9GICYmCisJCS8qCisJCSEvLmdpdG1vZHVsZXMKKwkJRU9GCisJCWdpdCBjb25maWcgY29yZS5zcGFyc2VjaGVja291dCB0cnVlICYmCisJCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0bW9kdWxlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBnaXRtb2R1bGVzIGNvbmZpZyBmaWxlIHdoZW4gaXQgaXMgbm90IGNoZWNrZWQgb3V0JyAnCisJZWNobyAiLi4vc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3Qgd3JpdGluZyBnaXRtb2R1bGVzIGNvbmZpZyBmaWxlIHdoZW4gaXQgaXMgbm90IGNoZWNrZWQgb3V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZS0taGVscGVyIGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCBuZXd1cmwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdXBlci8uZ2l0bW9kdWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXNpbmcgc3VibW9kdWxlIHdoZW4gdGhlIGdpdG1vZHVsZXMgY29uZmlnIGlzIG5vdCBjaGVja2VkIG91dCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlciBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIGluaXQgJiYKKwlnaXQgLUMgc3VwZXIgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsID5hY3R1YWwgJiYKKwllY2hvICIkKHB3ZCkvc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZyBzdWJtb2R1bGUgd2hlbiB0aGUgZ2l0bW9kdWxlcyBjb25maWcgaXMgbm90IGNoZWNrZWQgb3V0JyAnCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3VwZXIvc3VibW9kdWxlL2ZpbGUgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIHVwZGF0ZSAmJgorCXRlc3RfY21wIHN1Ym1vZHVsZS9maWxlIHN1cGVyL3N1Ym1vZHVsZS9maWxlCisnCisKK09SSUdfU1VCTU9EVUxFPSQoZ2l0IC1DIHN1Ym1vZHVsZSByZXYtcGFyc2UgSEVBRCkKK09SSUdfVVBTVFJFQU09JChnaXQgLUMgdXBzdHJlYW0gcmV2LXBhcnNlIEhFQUQpCitPUklHX1NVUEVSPSQoZ2l0IC1DIHN1cGVyIHJldi1wYXJzZSBIRUFEKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS11cGRhdGluZyBzdWJtb2R1bGUgd2hlbiB0aGUgZ2l0bW9kdWxlcyBjb25maWcgaXMgbm90IGNoZWNrZWQgb3V0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VibW9kdWxlIHJlc2V0IC0taGFyZCAkT1JJR19TVUJNT0RVTEU7CisJCQkgICAgZ2l0IC1DIHVwc3RyZWFtIHJlc2V0IC0taGFyZCAkT1JJR19VUFNUUkVBTTsKKwkJCSAgICBnaXQgLUMgc3VwZXIgcmVzZXQgLS1oYXJkICRPUklHX1NVUEVSOworCQkJICAgIGdpdCAtQyB1cHN0cmVhbSBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlOworCQkJICAgIGdpdCAtQyBzdXBlciBwdWxsOworCQkJICAgIGdpdCAtQyBzdXBlciBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlIiAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGZpbGUyIHRvIHN1Ym1vZHVsZSIKKwkpICYmCisJKGNkIHVwc3RyZWFtICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJCWdpdCBhZGQgc3VibW9kdWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJVcGRhdGUgc3VibW9kdWxlIgorCSkgJiYKKwlnaXQgLUMgc3VwZXIgcHVsbCAmJgorCSMgVGhlIC0tZm9yLXN0YXR1cyBvcHRpb25zIHJlYWRzIHRoZSBnaXRtb2R1bGVzIGNvbmZpZworCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUgc3VtbWFyeSAtLWZvci1zdGF0dXMgPmFjdHVhbCAmJgorCXJldjE9JChnaXQgLUMgc3VibW9kdWxlIHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJcmV2Mj0kKGdpdCAtQyBzdWJtb2R1bGUgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJKiBzdWJtb2R1bGUgJHtyZXYxfS4uLiR7cmV2Mn0gKDEpOgorCSAgPCBBZGQgZmlsZTIgdG8gc3VibW9kdWxlCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJIyBUZXN0IHRoYXQgdGhlIHVwZGF0ZSBhY3R1YWxseSBzdWNjZWVkcworCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1cGVyL3N1Ym1vZHVsZS9maWxlMiAmJgorCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUgdXBkYXRlICYmCisJdGVzdF9jbXAgc3VibW9kdWxlL2ZpbGUyIHN1cGVyL3N1Ym1vZHVsZS9maWxlMiAmJgorCWdpdCAtQyBzdXBlciBzdGF0dXMgLS1zaG9ydCA+b3V0cHV0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgYWRkaW5nIHN1Ym1vZHVsZXMgd2hlbiB0aGUgZ2l0bW9kdWxlcyBjb25maWcgaXMgbm90IGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNsb25lIHN1Ym1vZHVsZSBuZXdfc3VibW9kdWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vbmV3X3N1Ym1vZHVsZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXRtb2R1bGVzCisnCisKKyMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBwcmV2aW91cyAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGRpZCBub3QgbGVhdmUgdGhlCisjIHJlcG9zaXRvcnkgaW4gYSBzcHVyaW91cyBzdGF0ZSB3aGVuIGl0IGZhaWxlZC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgc3VibW9kdWxlIHN0aWxsIHdvcmtzIGV2ZW4gYWZ0ZXIgdGhlIHByZXZpb3VzIGFkZCBmYWlsZWQnICcKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIGluaXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDE5LXN1Ym1vZHVsZS1zZXQtYnJhbmNoLnNoIGIvdC90NzQxOS1zdWJtb2R1bGUtc2V0LWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDI1Zjc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzQxOS1zdWJtb2R1bGUtc2V0LWJyYW5jaC5zaApAQCAtMCwwICsxLDkzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE5IERlbnRvbiBMaXUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzdWJtb2R1bGVzIHNldC1icmFuY2ggc3ViY29tbWFuZAorCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB0aGUgc2V0LWJyYW5jaCBzdWJjb21tYW5kIG9mIGdpdC1zdWJtb2R1bGUgaXMgd29ya2luZworYXMgZXhwZWN0ZWQuCisnCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89MQorLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb25maWcgY2FjaGUgc2V0dXAnICcKKwlta2RpciBzdWJtb2R1bGUgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gYSA+YSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbWEgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljICYmCisJCWVjaG8gYiA+YSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbWIKKwkpICYmCisJbWtkaXIgc3VwZXIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbnN1cmUgc3VibW9kdWxlIGJyYW5jaCBpcyB1bnNldCcgJworCShjZCBzdXBlciAmJgorCQkhIGdyZXAgYnJhbmNoIC5naXRtb2R1bGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHN1Ym1vZHVsZSBzZXQtYnJhbmNoIC0tYnJhbmNoJyAnCisJKGNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgc2V0LWJyYW5jaCAtLWJyYW5jaCB0b3BpYyBzdWJtb2R1bGUgJiYKKwkJZ3JlcCAiYnJhbmNoID0gdG9waWMiIC5naXRtb2R1bGVzICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwkJYgorCQlFT0YKKwkJZ2l0IC1DIHN1Ym1vZHVsZSBzaG93IC1zIC0tcHJldHR5PSVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzdWJtb2R1bGUgc2V0LWJyYW5jaCAtLWRlZmF1bHQnICcKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzZXQtYnJhbmNoIC0tZGVmYXVsdCBzdWJtb2R1bGUgJiYKKwkJISBncmVwIGJyYW5jaCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCQljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJCWEKKwkJRU9GCisJCWdpdCAtQyBzdWJtb2R1bGUgc2hvdyAtcyAtLXByZXR0eT0lcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc3VibW9kdWxlIHNldC1icmFuY2ggLWInICcKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzZXQtYnJhbmNoIC1iIHRvcGljIHN1Ym1vZHVsZSAmJgorCQlncmVwICJicmFuY2ggPSB0b3BpYyIgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgJiYKKwkJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCQliCisJCUVPRgorCQlnaXQgLUMgc3VibW9kdWxlIHNob3cgLXMgLS1wcmV0dHk9JXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHN1Ym1vZHVsZSBzZXQtYnJhbmNoIC1kJyAnCisJKGNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgc2V0LWJyYW5jaCAtZCBzdWJtb2R1bGUgJiYKKwkJISBncmVwIGJyYW5jaCAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAmJgorCQljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJCWEKKwkJRU9GCisJCWdpdCAtQyBzdWJtb2R1bGUgc2hvdyAtcyAtLXByZXR0eT0lcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQyMC1zdWJtb2R1bGUtc2V0LXVybC5zaCBiL3QvdDc0MjAtc3VibW9kdWxlLXNldC11cmwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWYwY2I2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MjAtc3VibW9kdWxlLXNldC11cmwuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxOSBEZW50b24gTGl1CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc3VibW9kdWxlcyBzZXQtdXJsIHN1YmNvbW1hbmQKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIHNldC11cmwgc3ViY29tbWFuZCBvZiBnaXQtc3VibW9kdWxlIGlzIHdvcmtpbmcKK2FzIGV4cGVjdGVkLgorJworCitURVNUX05PX0NSRUFURV9SRVBPPTEKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29uZmlnIGNhY2hlIHNldHVwJyAnCisJbWtkaXIgc3VibW9kdWxlICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBhID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tYQorCSkgJiYKKwlta2RpciBzdXBlciAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBzdWJtb2R1bGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHN1Ym1vZHVsZSBzZXQtdXJsJyAnCisJIyBhZGQgYSBjb21taXQgYW5kIG1vdmUgdGhlIHN1Ym1vZHVsZSAoY2hhbmdlIHRoZSB1cmwpCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZWNobyBiID4+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbWIKKwkpICYmCisJbXYgc3VibW9kdWxlIG5ld3N1Ym1vZHVsZSAmJgorCisJZ2l0IC1DIG5ld3N1Ym1vZHVsZSBzaG93ID5leHBlY3QgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlICYmCisJCWdpdCBzdWJtb2R1bGUgc2V0LXVybCBzdWJtb2R1bGUgLi4vbmV3c3VibW9kdWxlICYmCisJCWdyZXAgLUYgInVybCA9IC4uL25ld3N1Ym1vZHVsZSIgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUKKwkpICYmCisJZ2l0IC1DIHN1cGVyL3N1Ym1vZHVsZSBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwMC1jb21taXQtdGVtcGxhdGUtc3F1YXNoLXNpZ25vZmYuc2ggYi90L3Q3NTAwLWNvbW1pdC10ZW1wbGF0ZS1zcXVhc2gtc2lnbm9mZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZDE5ZWNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC1jb21taXQtdGVtcGxhdGUtc3F1YXNoLXNpZ25vZmYuc2gKQEAgLTAsMCArMSwzOTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgU3RldmVuIEdyaW1tCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb21taXQKKworVGVzdHMgZm9yIHRlbXBsYXRlLCBzaWdub2ZmLCBzcXVhc2ggYW5kIC1GIGZ1bmN0aW9ucy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXRfbXNnX2lzICgpIHsKKwlleHBlY3Q9Y29tbWl0X21zZ19pcy5leHBlY3QKKwlhY3R1YWw9Y29tbWl0X21zZ19pcy5hY3R1YWwKKworCXByaW50ZiAiJXMiICIkKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVzJWIgLTEpIiA+IiRhY3R1YWwiICYmCisJcHJpbnRmICIlcyIgIiQxIiA+IiRleHBlY3QiICYmCisJdGVzdF9pMThuY21wICIkZXhwZWN0IiAiJGFjdHVhbCIKK30KKworIyBBIHNhbml0eSBjaGVjayB0byBzZWUgaWYgY29tbWl0IGlzIHdvcmtpbmcgYXQgYWxsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYSBiYXNpYyBjb21taXQgaW4gYW4gZW1wdHkgdHJlZSBzaG91bGQgc3VjY2VlZCcgJworCWVjaG8gY29udGVudCA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IHRlbXBsYXRlIGZpbGUgc2hvdWxkIHJldHVybiBlcnJvcicgJworCWVjaG8gY2hhbmdlcyA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCSgKKwkJR0lUX0VESVRPUj0iZWNobyBoZWxsbyA+XCJcJDFcIiIgJiYKKwkJZXhwb3J0IEdJVF9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkUFdEIi9ub3RleGlzdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZXhpc3RlbnQgdGVtcGxhdGUgZmlsZSBpbiBjb25maWcgc2hvdWxkIHJldHVybiBlcnJvcicgJworCXRlc3RfY29uZmlnIGNvbW1pdC50ZW1wbGF0ZSAiJFBXRCIvbm90ZXhpc3QgJiYKKwkoCisJCUdJVF9FRElUT1I9ImVjaG8gaGVsbG8gPlwiXCQxXCIiICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQKKwkpCisnCisKKyMgRnJvbSBub3cgb24gd2UnbGwgdXNlIGEgdGVtcGxhdGUgZmlsZSB0aGF0IGV4aXN0cy4KK1RFTVBMQVRFPSIkUFdEIi90ZW1wbGF0ZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmVkaXRlZCB0ZW1wbGF0ZSBzaG91bGQgbm90IGNvbW1pdCcgJworCWVjaG8gInRlbXBsYXRlIGxpbmUiID4gIiRURU1QTEFURSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5lZGl0ZWQgdGVtcGxhdGUgd2l0aCBjb21tZW50cyBzaG91bGQgbm90IGNvbW1pdCcgJworCWVjaG8gIiMgY29tbWVudCBpbiB0ZW1wbGF0ZSIgPj4gIiRURU1QTEFURSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYSBTaWduZWQtb2ZmLWJ5IGxpbmUgYnkgaXRzZWxmIHNob3VsZCBub3QgY29tbWl0JyAnCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLXNpZ25lZC1vZmYgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpbmcgY29tbWVudHMgdG8gYSB0ZW1wbGF0ZSBzaG91bGQgbm90IGNvbW1pdCcgJworCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb21tZW50cyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGluZyByZWFsIGNvbnRlbnQgdG8gYSB0ZW1wbGF0ZSBzaG91bGQgY29tbWl0JyAnCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQgJiYKKwkJZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgInRlbXBsYXRlIGxpbmVjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLXQgb3B0aW9uIHNob3VsZCBiZSBzaG9ydCBmb3IgLS10ZW1wbGF0ZScgJworCWVjaG8gInNob3J0IHRlbXBsYXRlIiA+ICIkVEVNUExBVEUiICYmCisJZWNobyAibmV3IGNvbnRlbnQiID4+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQgJiYKKwkJZ2l0IGNvbW1pdCAtdCAiJFRFTVBMQVRFIgorCSkgJiYKKwljb21taXRfbXNnX2lzICJzaG9ydCB0ZW1wbGF0ZWNvbW1pdCBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWctc3BlY2lmaWVkIHRlbXBsYXRlIHNob3VsZCBjb21taXQnICcKKwllY2hvICJuZXcgdGVtcGxhdGUiID4gIiRURU1QTEFURSIgJiYKKwl0ZXN0X2NvbmZpZyBjb21taXQudGVtcGxhdGUgIiRURU1QTEFURSIgJiYKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQgJiYKKwkJZ2l0IGNvbW1pdAorCSkgJiYKKwljb21taXRfbXNnX2lzICJuZXcgdGVtcGxhdGVjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIG92ZXJyaWRlIHRlbXBsYXRlJyAnCisJZWNobyAic3RpbGwgbW9yZSBjb250ZW50IiA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCUdJVF9FRElUT1I9IiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiIFwKKwkJLW0gImNvbW1hbmQgbGluZSBtc2ciICYmCisJY29tbWl0X21zZ19pcyAiY29tbWFuZCBsaW5lIG1zZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBmaWxlIHNob3VsZCBvdmVycmlkZSB0ZW1wbGF0ZScgJworCWVjaG8gImNvbnRlbnQgZ2Fsb3JlIiA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWVjaG8gInN0YW5kYXJkIGlucHV0IG1zZyIgfAorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJCWdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIiAtLWZpbGUgLQorCSkgJiYKKwljb21taXRfbXNnX2lzICJzdGFuZGFyZCBpbnB1dCBtc2ciCisnCisKK2NhdCA+IiRURU1QTEFURSIgPDxcRU9GCisKKworIyMjIHRlbXBsYXRlCisKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSB0ZW1wbGF0ZSB3aXRoIHdoaXRlc3BhY2UgaXNzdWUnICcKKwllY2hvICJjb250ZW50IGdhbG9yZSIgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCUdJVF9FRElUT1I9XCIiJFRFU1RfRElSRUNUT1JZIlwiL3Q3NTAwL2FkZC13aGl0ZXNwYWNlZC1jb250ZW50IFwKKwlnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIgJiYKKwljb21taXRfbXNnX2lzICJjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgYWx0ZXJuYXRlIEdJVF9JTkRFWF9GSUxFICgxKScgJworCisJY3AgLmdpdC9pbmRleCBzYXZlZC1pbmRleCAmJgorCSgKKwkJZWNobyBzb21lIG5ldyBjb250ZW50ID5maWxlICYmCisJICAgICAgICBHSVRfSU5ERVhfRklMRT0uZ2l0L2Fub3RoZXJfaW5kZXggJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJjb21taXQgdXNpbmcgYW5vdGhlciBpbmRleCIgJiYKKwkJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRCAmJgorCQlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZQorCSkgJiYKKwljbXAgLmdpdC9pbmRleCBzYXZlZC1pbmRleCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgYWx0ZXJuYXRlIEdJVF9JTkRFWF9GSUxFICgyKScgJworCisJY3AgLmdpdC9pbmRleCBzYXZlZC1pbmRleCAmJgorCSgKKwkJcm0gLWYgLmdpdC9uby1zdWNoLWluZGV4ICYmCisJCUdJVF9JTkRFWF9GSUxFPS5naXQvbm8tc3VjaC1pbmRleCAmJgorCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHVzaW5nIG5vbmV4aXN0ZW50IGluZGV4IiAmJgorCQl0ZXN0IC16ICIkKGdpdCBscy1maWxlcykiICYmCisJCXRlc3QgLXogIiQoZ2l0IGxzLXRyZWUgSEVBRCkiCisKKwkpICYmCisJY21wIC5naXQvaW5kZXggc2F2ZWQtaW5kZXggPi9kZXYvbnVsbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCit6b3J0CisKK1NpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpZ25vZmYnICcKKwllY2hvICJ5ZXQgYW5vdGhlciBjb250ZW50ICpuYXJmKiIgPj4gZm9vICYmCisJZWNobyAiem9ydCIgfCBnaXQgY29tbWl0IC1zIC1GIC0gZm9vICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkICIxLC9eXCQvZCIgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gZmlsZSAoMSknICcKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvICJMb2cgaW4gdG9wIGRpcmVjdG9yeSIgPmxvZyAmJgorCWVjaG8gIkxvZyBpbiBzdWIgZGlyZWN0b3J5IiA+c3ViZGlyL2xvZyAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiBsb2cKKwkpICYmCisJY29tbWl0X21zZ19pcyAiTG9nIGluIHN1YiBkaXJlY3RvcnkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gZmlsZSAoMiknICcKKwlybSAtZiBsb2cgJiYKKwllY2hvICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIgPnN1YmRpci9sb2cgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgbG9nCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgIkxvZyBpbiBzdWIgZGlyZWN0b3J5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIHN0ZGluJyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZWNobyAiTG9nIHdpdGggZm9vIHdvcmQiIHwgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIC0KKwkpICYmCisJY29tbWl0X21zZ19pcyAiTG9nIHdpdGggZm9vIHdvcmQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtRiBvdmVycmlkZXMgLXQnICcKKwkoCisJCWNkIHN1YmRpciAmJgorCQllY2hvICItRiBsb2ciID4gZi5sb2cgJiYKKwkJZWNobyAiLXQgdGVtcGxhdGUiID4gdC50ZW1wbGF0ZSAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgZi5sb2cgLXQgdC50ZW1wbGF0ZQorCSkgJiYKKwljb21taXRfbXNnX2lzICItRiBsb2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NvbW1pdCB3aXRob3V0IG1lc3NhZ2UgaXMgYWxsb3dlZCB3aXRoIC0tYWxsb3ctZW1wdHktbWVzc2FnZScgJworCWVjaG8gIm1vcmUgY29udGVudCIgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCT5lbXB0eSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIDxlbXB0eSAmJgorCWNvbW1pdF9tc2dfaXMgIiIgJiYKKwlnaXQgdGFnIGVtcHR5LW1lc3NhZ2UtY29tbWl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NvbW1pdCB3aXRob3V0IG1lc3NhZ2UgaXMgbm8tbm8gd2l0aG91dCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwk+ZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IDxlbXB0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDb21taXQgYSBtZXNzYWdlIHdpdGggLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJZWNobyAiZXZlbiBtb3JlIGNvbnRlbnQiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtbSJoZWxsbyB0aGVyZSIgJiYKKwljb21taXRfbXNnX2lzICJoZWxsbyB0aGVyZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC1DIGVtcHR5IHJlc3BlY3RzIC0tYWxsb3ctZW1wdHktbWVzc2FnZScgJworCWVjaG8gbW9yZSA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtQyBlbXB0eS1tZXNzYWdlLWNvbW1pdCAmJgorCWdpdCBjb21taXQgLUMgZW1wdHktbWVzc2FnZS1jb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlICYmCisJY29tbWl0X21zZ19pcyAiIgorJworCitjb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICgpIHsKKwllY2hvICJmaXJzdCBjb250ZW50IGxpbmUiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwljYXQgPmxvZyA8PEVPRiAmJgordGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lCisKK3RhcmdldCBtZXNzYWdlIGJvZHkgbGluZSAxCit0YXJnZXQgbWVzc2FnZSBib2R5IGxpbmUgMgorRU9GCisJZ2l0IGNvbW1pdCAtRiBsb2cgJiYKKwllY2hvICJzZWNvbmQgY29udGVudCBsaW5lIiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiaW50ZXJtZWRpYXRlIGNvbW1pdCIgJiYKKwllY2hvICJ0aGlyZCBjb250ZW50IGxpbmUiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28KK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tZml4dXAgcHJvdmlkZXMgY29ycmVjdCBvbmUtbGluZSBjb21taXQgbWVzc2FnZScgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwlnaXQgY29tbWl0IC0tZml4dXAgSEVBRH4xICYmCisJY29tbWl0X21zZ19pcyAiZml4dXAhIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tZml4dXAgLW0ic29tZXRoaW5nIiAtbSJleHRyYSInICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAtbSJzb21ldGhpbmciIC1tImV4dHJhIiAmJgorCWNvbW1pdF9tc2dfaXMgImZpeHVwISB0YXJnZXQgbWVzc2FnZSBzdWJqZWN0IGxpbmVzb21ldGhpbmcKKworZXh0cmEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXNxdWFzaCB3b3JrcyB3aXRoIC1GJyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCWVjaG8gImxvZyBtZXNzYWdlIGZyb20gZmlsZSIgPm1zZ2ZpbGUgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUR+MSAtRiBtc2dmaWxlICAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtbScgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUR+MSAtbSAiZm9vIGJhclxuYmF6IiAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lZm9vIGJhclxuYmF6IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtQycgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUR+MSAtQyBIRUFEICYmCisJY29tbWl0X21zZ19pcyAic3F1YXNoISB0YXJnZXQgbWVzc2FnZSBzdWJqZWN0IGxpbmVpbnRlcm1lZGlhdGUgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtYycgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvZWRpdC1jb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgLWMgSEVBRCAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lZWRpdGVkIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLUMgZm9yIHNhbWUgY29tbWl0JyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRCAtQyBIRUFEICYmCisJY29tbWl0X21zZ19pcyAic3F1YXNoISBpbnRlcm1lZGlhdGUgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtYyBmb3Igc2FtZSBjb21taXQnICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2VkaXQtY29udGVudCAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRCAtYyBIRUFEICYmCisJY29tbWl0X21zZ19pcyAic3F1YXNoISBlZGl0ZWQgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCBlZGl0b3InICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgJiYKKwljb21taXRfbXNnX2lzICJzcXVhc2ghIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZWNvbW1pdCBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIG1lc3NhZ2Ugb3B0aW9ucyB3aGVuIHVzaW5nIC0tZml4dXAnICcKKwllY2hvIGNoYW5nZXMgPj5mb28gJiYKKwllY2hvICJtZXNzYWdlIiA+bG9nICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZml4dXAgSEVBRH4xIC0tc3F1YXNoIEhFQUR+MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1maXh1cCBIRUFEfjEgLUMgSEVBRH4yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAtYyBIRUFEfjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZml4dXAgSEVBRH4xIC1GIGxvZworJworCitjYXQgPmV4cGVjdGVkLXRlbXBsYXRlIDw8RU9GCisKKyMgUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZworIyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LgorIworIyBBdXRob3I6ICAgIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisjCisjIE9uIGJyYW5jaCBjb21taXQtdGVtcGxhdGUtY2hlY2sKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjCW5ldyBmaWxlOiAgIGNvbW1pdC10ZW1wbGF0ZS1jaGVjaworIworIyBVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBsaW5lIGZvdW5kIGJlZm9yZSBzdGF0dXMgbWVzc2FnZSBpbiBjb21taXQgdGVtcGxhdGUnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29tbWl0LXRlbXBsYXRlLWNoZWNrICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJdG91Y2ggY29tbWl0LXRlbXBsYXRlLWNoZWNrICYmCisJZ2l0IGFkZCBjb21taXQtdGVtcGxhdGUtY2hlY2sgJiYKKwlHSVRfRURJVE9SPSJjYXQgPmVkaXRvci1pbnB1dCIgZ2l0IGNvbW1pdCAtLXVudHJhY2tlZC1maWxlcz1ubyAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQtdGVtcGxhdGUgZWRpdG9yLWlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGVtcHR5IGNvbW1pdCB3aXRoIHVuc3RhZ2VkIHJlbmFtZSBhbmQgY29weScgJworCXRlc3RfY3JlYXRlX3JlcG8gdW5zdGFnZWRfcmVuYW1lX2FuZF9jb3B5ICYmCisJKAorCQljZCB1bnN0YWdlZF9yZW5hbWVfYW5kX2NvcHkgJiYKKworCQllY2hvIGNvbnRlbnQgPm9yaWcgJiYKKwkJZ2l0IGFkZCBvcmlnICYmCisJCXRlc3RfY29tbWl0IG9yaWcgJiYKKworCQljcCBvcmlnIG5ld19jb3B5ICYmCisJCW12IG9yaWcgbmV3X3JlbmFtZSAmJgorCQlnaXQgYWRkIC1OIG5ld19jb3B5IG5ld19yZW5hbWUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbW1pdCB3aXRoIHVuc3RhZ2VkIHJlbmFtZSBhbmQgY29weScgJworCSgKKwkJY2QgdW5zdGFnZWRfcmVuYW1lX2FuZF9jb3B5ICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGRpZmYucmVuYW1lcz1jb3B5IGNvbW1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHdpdGhvdXQgc3RhZ2luZyBmaWxlcyBmYWlscyBhbmQgZGlzcGxheXMgaGludHMnICcKKwllY2hvICJpbml0aWFsIiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gImNoYW5nZXMiID4+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gdXBkYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIikiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDAvYWRkLWNvbW1lbnRzIGIvdC90NzUwMC9hZGQtY29tbWVudHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTcyZTY1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAvYWRkLWNvbW1lbnRzCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCitlY2hvICIjIHRoaXMgaXMgYSBuZXcgY29tbWVudCIgPj4gIiQxIgorZWNobyAiIyBhbmQgc28gaXMgdGhpcyIgPj4gIiQxIgorZXhpdCAwCmRpZmYgLS1naXQgYS90L3Q3NTAwL2FkZC1jb250ZW50IGIvdC90NzUwMC9hZGQtY29udGVudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmEzZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC9hZGQtY29udGVudApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorZWNobyAiY29tbWl0IG1lc3NhZ2UiID4+ICIkMSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdC90NzUwMC9hZGQtY29udGVudC1hbmQtY29tbWVudCBiL3QvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzRkY2NmZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKK2VjaG8gImNvbW1pdCBtZXNzYWdlIiA+PiAiJDEiCitlY2hvICIjIGNvbW1lbnQiID4+ICIkMSIKK2V4aXQgMAorCmRpZmYgLS1naXQgYS90L3Q3NTAwL2FkZC1zaWduZWQtb2ZmIGIvdC90NzUwMC9hZGQtc2lnbmVkLW9mZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMWQ4NTZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC9hZGQtc2lnbmVkLW9mZgpAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorZWNobyAiU2lnbmVkLW9mZi1ieTogZm9vIDxiYXJAZnJvdHo+IiA+PiAiJDEiCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvdDc1MDAvYWRkLXdoaXRlc3BhY2VkLWNvbnRlbnQgYi90L3Q3NTAwL2FkZC13aGl0ZXNwYWNlZC1jb250ZW50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjZjA3YzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwL2FkZC13aGl0ZXNwYWNlZC1jb250ZW50CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCitzZWQgLWUgJ3MvfCQvLycgPj4iJDEiIDw8XEVPRgorCisgfAorY29tbWl0IG1lc3NhZ2UgIAkgfAorCitFT0YKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdC90NzUwMC9lZGl0LWNvbnRlbnQgYi90L3Q3NTAwL2VkaXQtY29udGVudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOGRiOWZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC9lZGl0LWNvbnRlbnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKK3NlZCAtZSAicy9pbnRlcm1lZGlhdGUvZWRpdGVkL2ciIDwiJDEiID4iJDEtIgorbXYgIiQxLSIgIiQxIgorZXhpdCAwCmRpZmYgLS1naXQgYS90L3Q3NTAxLWNvbW1pdC1iYXNpYy1mdW5jdGlvbmFsaXR5LnNoIGIvdC90NzUwMS1jb21taXQtYmFzaWMtZnVuY3Rpb25hbGl0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTBiNGJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMS1jb21taXQtYmFzaWMtZnVuY3Rpb25hbGl0eS5zaApAQCAtMCwwICsxLDcxNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPgorIworCisjIEZJWE1FOiBUZXN0IHRoZSB2YXJpb3VzIGluZGV4IHVzYWdlcywgLWkgYW5kIC1vLCB0ZXN0IHJlZmxvZywKKyMgc2lnbm9mZgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29tbWl0JworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvZGlmZi1saWIuc2giCisKK2F1dGhvcj0nVGhlIFJlYWwgQXV0aG9yIDxzb21lZ3V5QGhpcy5lbWFpbC5vcmc+JworCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBzdGF0dXMnICcKKwllY2hvIGJvbmdvIGJvbmdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiTm8gY29tbWl0cyB5ZXQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIGluaXRpYWwgYW1lbmQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYW1lbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGluaXRpYWwgY29tbWl0JyAnCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIGFuZCAtRiBkbyBub3QgbWl4JyAnCisJZ2l0IGNoZWNrb3V0IEhFQUQgZmlsZSAmJiBlY2hvID4+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGZvbyAtbSBiYXIgLUYgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSBhbmQgLUMgZG8gbm90IG1peCcgJworCWdpdCBjaGVja291dCBIRUFEIGZpbGUgJiYgZWNobyA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtQyBIRUFEIC1tIGlsbGVnYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHMgYW5kIC1hIGRvIG5vdCBtaXgnICcKKwllY2hvIEtpbmcgb2YgdGhlIGJvbmdvID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBmb28gLWEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NhbiB1c2UgcGF0aHMgd2l0aCAtLWludGVyYWN0aXZlJyAnCisJZWNobyBib25nLW8tYm9uZyA+ZmlsZSAmJgorCSMgMjogdXBkYXRlLCAxOnN0IHBhdGgsIHRoYXQgaXMgYWxsLCA3OiBxdWl0CisJdGVzdF93cml0ZV9saW5lcyAyIDEgIiIgNyB8CisJZ2l0IGNvbW1pdCAtbSBmb28gLS1pbnRlcmFjdGl2ZSBmaWxlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmVkIGZpbGVzIGFuZCByZWxhdGl2ZSBwYXRocycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGZvbyIgJiYKKwlnaXQgaW5pdCBmb28gJiYKKwk+Zm9vL2Zvby50eHQgJiYKKwlnaXQgLUMgZm9vIGFkZCBmb28udHh0ICYmCisJZ2l0IC1DIGZvbyBjb21taXQgLW0gZmlyc3QgJiYKKwlnaXQgLUMgZm9vIHJtIGZvby50eHQgJiYKKworCW1rZGlyIC1wIGZvby9iYXIgJiYKKwlnaXQgLUMgZm9vL2JhciBjb21taXQgLW0gc2Vjb25kIC4uL2Zvby50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgaW52YWxpZCBjb21taXQgd2l0aCAtQycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtQyBib2d1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RoaW5nIHRvIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kcnktcnVuIGZhaWxzIHdpdGggbm90aGluZyB0byBjb21taXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGluaXRpYWwgLS1kcnktcnVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvcnQgZmFpbHMgd2l0aCBub3RoaW5nIHRvIGNvbW1pdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gaW5pdGlhbCAtLXNob3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcG9yY2VsYWluIGZhaWxzIHdpdGggbm90aGluZyB0byBjb21taXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGluaXRpYWwgLS1wb3JjZWxhaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb25nIGZhaWxzIHdpdGggbm90aGluZyB0byBjb21taXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGluaXRpYWwgLS1sb25nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBub24taW5pdGlhbCBjb21taXQnICcKKwllY2hvIGJvbmdvIGJvbmdvIGJvbmdvID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZHJ5LXJ1biB3aXRoIHN0dWZmIHRvIGNvbW1pdCByZXR1cm5zIG9rJyAnCisJZWNobyBib25nbyBib25nbyBib25nbyA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG5leHQgLWEgLS1kcnktcnVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvcnQgd2l0aCBzdHVmZiB0byBjb21taXQgcmV0dXJucyBvaycgJworCWVjaG8gYm9uZ28gYm9uZ28gYm9uZ28gPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IC1hIC0tc2hvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wb3JjZWxhaW4gd2l0aCBzdHVmZiB0byBjb21taXQgcmV0dXJucyBvaycgJworCWVjaG8gYm9uZ28gYm9uZ28gYm9uZ28gPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IC1hIC0tcG9yY2VsYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbG9uZyB3aXRoIHN0dWZmIHRvIGNvbW1pdCByZXR1cm5zIG9rJyAnCisJZWNobyBib25nbyBib25nbyBib25nbyA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG5leHQgLWEgLS1sb25nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gbm9uLWV4aXN0aW5nIGZpbGUnICcKKwllY2hvIG1vcmUgYm9uZ286IGJvbmdvIGJvbmdvIGJvbmdvIGJvbmdvID5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtRiBnYWggLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgY29tbWl0IG1lc3NhZ2UnICcKKwkjIEVtcHR5IGV4Y2VwdCBzdHJheSB0YWJzIGFuZCBzcGFjZXMgb24gYSBmZXcgbGluZXMuCisJc2VkIC1lICJzL0AvL2ciID5tc2cgPDwtXEVPRiAmJgorCQlACQlACisJCUBACisJCUAgIEAKKwkJQFNpZ25lZC1vZmYtYnk6IGh1bGFACisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtRiBtc2cgLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVtcGxhdGUgImVtcHR5bmVzcyIgY2hlY2sgZG9lcyBub3Qga2ljayBpbiB3aXRoIC1GJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUQgZmlsZSAmJiBlY2hvID4+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC10IGZpbGUgLUYgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZW1wbGF0ZSAiZW1wdHluZXNzIiBjaGVjaycgJworCWdpdCBjaGVja291dCBIRUFEIGZpbGUgJiYgZWNobyA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtdCBmaWxlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZGlkIG5vdCBlZGl0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvbW1pdCBtZXNzYWdlIGZyb20gZmlsZScgJworCWdpdCBjaGVja291dCBIRUFEIGZpbGUgJiYgZWNobyA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJZWNobyB0aGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZSwgY29taW5nIGZyb20gYSBmaWxlID5tc2cgJiYKKwlnaXQgY29tbWl0IC1GIG1zZyAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjb21taXQnICcKKwljYXQgPmVkaXRvciA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJc2VkIC1lICJzL2EgZmlsZS9hbiBhbWVuZCBjb21taXQvZyIgPCIkMSIgPiIkMS0iCisJbXYgIiQxLSIgIiQxIgorCUVPRgorCWNobW9kIDc1NSBlZGl0b3IgJiYKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtLWFtZW5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIC0tb25seSBpZ25vcmVzIHN0YWdlZCBjb250ZW50cycgJworCWNwIGZpbGUgZmlsZS5leHBlY3QgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tZWRpdCAtLWFtZW5kIC0tb25seSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6ZmlsZSA+ZmlsZS5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmaWxlLmV4cGVjdCBmaWxlLmFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93LWVtcHR5IC0tb25seSBpZ25vcmVzIHN0YWdlZCBjb250ZW50cycgJworCWVjaG8gY2hhbmdlZC1hZ2FpbiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLW9ubHkgLW0gImVtcHR5IiAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6ZmlsZSA+ZmlsZS5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmaWxlLmV4cGVjdCBmaWxlLmFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBlZGl0b3InICcKKwljYXQgPmVkaXRvciA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJc2VkIC1lICJzL3VuYW1lbmRlZC9hbWVuZGVkL2ciIDwiJDEiID4iJDEtIgorCW12ICIkMS0iICIkMSIKKwlFT0YKKwljaG1vZCA3NTUgZWRpdG9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIHdpdGhvdXQgbGF1bmNoaW5nIGVkaXRvcicgJworCWVjaG8gdW5hbWVuZGVkID5leHBlY3QgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gInVuYW1lbmRlZCIgJiYKKwllY2hvIG5lZWRzIG1vcmUgYm9uZ28gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtLW5vLWVkaXQgLS1hbWVuZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgLS0gZmlsZSAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1mb3JtYXQ9JXMgSEVBRCA+bXNnICYmCisJdGVzdF9jbXAgZXhwZWN0IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFtZW5kIC0tZWRpdCcgJworCWVjaG8gYW1lbmRlZCA+ZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJ1bmFtZW5kZWQiICYmCisJZWNobyBib25nbyBhZ2FpbiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC0tZWRpdCAtLWFtZW5kICYmCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWZvcm1hdD0lcyBIRUFEID5tc2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW1lbmQgLS1lZGl0IG9mIGVtcHR5IG1lc3NhZ2UnICcKKwljYXQgPnJlcGxhY2UgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCWVjaG8gImFtZW5kZWQiID4iJDEiCisJRU9GCisJY2htb2QgNzU1IHJlcGxhY2UgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICIiICYmCisJZWNobyBtb3JlIGJvbmdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJRURJVE9SPS4vcmVwbGFjZSBnaXQgY29tbWl0IC0tZWRpdCAtLWFtZW5kICYmCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWZvcm1hdD0lcyBIRUFEID5tc2cgJiYKKwkuL3JlcGxhY2UgZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFtZW5kIHRvIHNldCBtZXNzYWdlIHRvIGVtcHR5JyAnCisJZWNobyBiYXRhID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAidW5hbWVuZGVkIiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gIiIgJiYKKwlnaXQgZGlmZi10cmVlIC1zIC0tZm9ybWF0PSVzIEhFQUQgPm1zZyAmJgorCWVjaG8gIiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCB0byBzZXQgZW1wdHkgbWVzc2FnZSBuZWVkcyAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKKwllY2hvIGNvbmdhID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAidW5hbWVuZGVkIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1hbWVuZCAtbSAiIiAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1mb3JtYXQ9JXMgSEVBRCA+bXNnICYmCisJZWNobyAidW5hbWVuZGVkIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSAtLWVkaXQnICcKKwllY2hvIGFtZW5kZWQgPmV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBidWZmZXIgJiYKKwllY2hvIGJvbmdvIGJvbmdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLW0gdW5hbWVuZGVkIC0tZWRpdCAmJgorCWdpdCBkaWZmLXRyZWUgLXMgIC0tZm9ybWF0PSVzIEhFQUQgPm1zZyAmJgorCXRlc3RfY21wIGV4cGVjdCBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gYW5kIC1GIGRvIG5vdCBtaXgnICcKKwllY2hvIGVub3VnaCB3aXRoIHRoZSBib25nb3MgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1GIG1zZyAtbSBhbWVuZGluZyAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIG1lc3NhZ2UgZnJvbSBvdGhlciBjb21taXQnICcKKwlnaXQgY29tbWl0IC1DIEhFQUReIC4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdGluZyBtZXNzYWdlIGZyb20gb3RoZXIgY29tbWl0JyAnCisJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCXNlZCAtZSAicy9hbWVuZC9vbGRlci9nIiAgPCIkMSIgPiIkMS0iCisJbXYgIiQxLSIgIiQxIgorCUVPRgorCWNobW9kIDc1NSBlZGl0b3IgJiYKKwllY2hvIGh1bGEgaHVsYSA+ZmlsZSAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC1jIEhFQUReIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2UgZnJvbSBzdGRpbicgJworCWVjaG8gc2lsbHkgbmV3IGNvbnRlbnRzID5maWxlICYmCisJZWNobyBjb21taXQgbWVzc2FnZSBmcm9tIHN0ZGluIHwKKwlnaXQgY29tbWl0IC1GIC0gLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGluZyBhdXRob3IgZnJvbSBjb21tYW5kIGxpbmUnICcKKwllY2hvIGdhayA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYXV0aG9yIFwKKwkJLS1hdXRob3IgIlJ1YmJlciBEdWNrIDxyZHVja0Bjb252b3kub3JnPiIgLWEgPm91dHB1dCAyPiYxICYmCisJZ3JlcCBSdWJiZXIuRHVjayBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbnRlcmFjdGl2ZSBhZGQnICcKKwllY2hvIDcgfCB0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0taW50ZXJhY3RpdmUgPm91dCAmJgorCWdyZXAgIldoYXQgbm93IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICJjb21taXQgLS1pbnRlcmFjdGl2ZSBkb2Vzbid0IGNoYW5nZSBpbmRleCBpZiBlZGl0b3IgYWJvcnRzIiAnCisJZWNobyB6b28gPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSA+ZGlmZjEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIHUgIioiIHEgfAorCSgKKwkJRURJVE9SPTogJiYKKwkJZXhwb3J0IEVESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0taW50ZXJhY3RpdmUKKwkpICYmCisJZ2l0IGRpZmYgPmRpZmYyICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGRpZmYxIGRpZmYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXRvciBub3QgaW52b2tlZCBpZiAtRiBpcyBnaXZlbicgJworCWNhdCA+ZWRpdG9yIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwlzZWQgLWUgcy9nb29kL2JhZC9nIDwiJDEiID4iJDEtIgorCW12ICIkMS0iICIkMSIKKwlFT0YKKwljaG1vZCA3NTUgZWRpdG9yICYmCisKKwllY2hvIEEgZ29vZCBjb21taXQgbWVzc2FnZS4gPm1zZyAmJgorCWVjaG8gbW9vID5maWxlICYmCisKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtYSAtRiBtc2cgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMgPnN1YmplY3QgJiYKKwlncmVwIC1xIGdvb2Qgc3ViamVjdCAmJgorCisJZWNobyBxdWFjayA+ZmlsZSAmJgorCWVjaG8gQW5vdGhlciBnb29kIG1lc3NhZ2UuIHwKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtYSAtRiAtICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzID5zdWJqZWN0ICYmCisJZ3JlcCAtcSBnb29kIHN1YmplY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjb21taXQgdGhhdCBpbnZvbHZlcyByZW1vdmFsICgxKScgJworCisJZ2l0IHJtIC0tY2FjaGVkIGZpbGUgJiYKKwltdiBmaWxlIGVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwlnaXQgY29tbWl0IC1tICJQYXJ0aWFsOiBhZGQgZWxpZiIgZWxpZiAmJgorCWdpdCBkaWZmLXRyZWUgLS1uYW1lLXN0YXR1cyBIRUFEXiBIRUFEID5jdXJyZW50ICYmCisJZWNobyAiQQllbGlmIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBjb21taXQgdGhhdCBpbnZvbHZlcyByZW1vdmFsICgyKScgJworCisJZ2l0IGNvbW1pdCAtbSAiUGFydGlhbDogcmVtb3ZlIGZpbGUiIGZpbGUgJiYKKwlnaXQgZGlmZi10cmVlIC0tbmFtZS1zdGF0dXMgSEVBRF4gSEVBRCA+Y3VycmVudCAmJgorCWVjaG8gIkQJZmlsZSIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY29tbWl0IHRoYXQgaW52b2x2ZXMgcmVtb3ZhbCAoMyknICcKKworCWdpdCBybSAtLWNhY2hlZCBlbGlmICYmCisJZWNobyBlbGlmID5lbGlmICYmCisJZ2l0IGNvbW1pdCAtbSAiUGFydGlhbDogbW9kaWZ5IGVsaWYiIGVsaWYgJiYKKwlnaXQgZGlmZi10cmVlIC0tbmFtZS1zdGF0dXMgSEVBRF4gSEVBRCA+Y3VycmVudCAmJgorCWVjaG8gIk0JZWxpZiIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIGNvbW1pdCB0byBmaXggYXV0aG9yJyAnCisKKwlvbGR0aWNrPSRHSVRfQVVUSE9SX0RBVEUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAicy9hdXRob3IuKi9hdXRob3IgJGF1dGhvciAkb2xkdGljay8iIFwKKwkJLWUgInMvXlwoY29tbWl0dGVyLio+IFwpLiokL1wxJEdJVF9DT01NSVRURVJfREFURS8iIFwKKwkJY29tbWl0ID5leHBlY3RlZCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iJGF1dGhvciIgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjb21taXQgdG8gZml4IGRhdGUnICcKKworCXRlc3RfdGljayAmJgorCW5ld3RpY2s9JEdJVF9BVVRIT1JfREFURSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+Y29tbWl0ICYmCisJc2VkIC1lICJzL2F1dGhvci4qL2F1dGhvciAkYXV0aG9yICRuZXd0aWNrLyIgXAorCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgXAorCQljb21taXQgPmV4cGVjdGVkICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tZGF0ZT0iJG5ld3RpY2siICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lbnRpb25zIGZvcmNlZCBkYXRlIGluIG91dHB1dCcgJworCWdpdCBjb21taXQgLS1hbWVuZCAtLWRhdGU9MjAxMC0wMS0wMlQwMzowNDowNSA+b3V0cHV0ICYmCisJZ3JlcCAiRGF0ZTogKlNhdCBKYW4gMiAwMzowNDowNSAyMDEwIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbXBsYWlucyBhYm91dCBjb21wbGV0ZWx5IGJvZ3VzIGRhdGVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tZGF0ZT1zZXZlbnRlZW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tZGF0ZSBhbGxvd3MgYXBwcm94aWRhdGUnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgXAorCQktLWRhdGU9Im1pZG5pZ2h0IHRoZSAxMnRoIG9mIG9jdG9iZXIsIGFubm8gZG9taW5pIDE5NzkiICYmCisJZWNobyAiRnJpIE9jdCAxMiAwMDowMDowMCAxOTc5ICswMDAwIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lYWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbiBvZmYgKDEpJyAnCisKKwllY2hvIDEgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWdpdCBjb21taXQgLXMgLW0gInRoYW5rIHlvdSIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCisJKAorCQllY2hvIHRoYW5rIHlvdSAmJgorCQllY2hvICYmCisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+aWRlbnQgJiYKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIiBpZGVudAorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbiBvZmYgKDIpJyAnCisKKwllY2hvIDIgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWV4aXN0aW5nPSJTaWduZWQtb2ZmLWJ5OiBXYXRjaCBUaGlzIDx3YXRjaHRoaXNAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBjb21taXQgLXMgLW0gInRoYW5rIHlvdQorCiskZXhpc3RpbmciICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgorCSgKKwkJZWNobyB0aGFuayB5b3UgJiYKKwkJZWNobyAmJgorCQllY2hvICRleGlzdGluZyAmJgorCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPmlkZW50ICYmCisJCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIgaWRlbnQKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmYgZ2FwJyAnCisKKwllY2hvIDMgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWFsdD0iQWx0LVJGQy04MjItSGVhZGVyOiBWYWx1ZSIgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJ3ZWxjb21lCisKKyRhbHQiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgorCSgKKwkJZWNobyB3ZWxjb21lICYmCisJCWVjaG8gJiYKKwkJZWNobyAkYWx0ICYmCisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+aWRlbnQgJiYKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIiBpZGVudAorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmYgZ2FwIDInICcKKworCWVjaG8gNCA+cG9zaXRpdmUgJiYKKwlnaXQgYWRkIHBvc2l0aXZlICYmCisJYWx0PSJmaXhlZDogMzQiICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAid2VsY29tZQorCitXZSBoYXZlIG5vdworJGFsdCIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCisJKAorCQllY2hvIHdlbGNvbWUgJiYKKwkJZWNobyAmJgorCQllY2hvIFdlIGhhdmUgbm93ICYmCisJCWVjaG8gJGFsdCAmJgorCQllY2hvICYmCisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+aWRlbnQgJiYKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIiBpZGVudAorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmYgcmVzcGVjdHMgdHJhaWxlciBjb25maWcnICcKKworCWVjaG8gNSA+cG9zaXRpdmUgJiYKKwlnaXQgYWRkIHBvc2l0aXZlICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAic3ViamVjdAorCitub24tdHJhaWxlciBsaW5lCitNeWZvb3RlcjogeCIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCisJKAorCQllY2hvIHN1YmplY3QgJiYKKwkJZWNobyAmJgorCQllY2hvIG5vbi10cmFpbGVyIGxpbmUgJiYKKwkJZWNobyBNeWZvb3RlcjogeCAmJgorCQllY2hvICYmCisJCWVjaG8gIlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJZWNobyA2ID5wb3NpdGl2ZSAmJgorCWdpdCBhZGQgcG9zaXRpdmUgJiYKKwlnaXQgLWMgInRyYWlsZXIuTXlmb290ZXIuaWZleGlzdHM9YWRkIiBjb21taXQgLXMgLW0gInN1YmplY3QKKworbm9uLXRyYWlsZXIgbGluZQorTXlmb290ZXI6IHgiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiBjb21taXQgPmFjdHVhbCAmJgorCSgKKwkJZWNobyBzdWJqZWN0ICYmCisJCWVjaG8gJiYKKwkJZWNobyBub24tdHJhaWxlciBsaW5lICYmCisJCWVjaG8gTXlmb290ZXI6IHggJiYKKwkJZWNobyAiU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmYgbm90IGNvbmZ1c2VkIGJ5IC0tLScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCXN1YmplY3QKKworCQlib2R5CisJCS0tLQorCQl0aGVzZSBkYXNoZXMgY29uZnVzZSB0aGUgcGFyc2VyIQorCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCSMgc2hvdWxkIGJlIGEgbm9vcCwgc2luY2Ugd2UgYWxyZWFkeSBzaWduZWQKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1zaWdub2ZmIC1GIGV4cGVjdGVkICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSAtbScgJworCisJPm5lZ2F0aXZlICYmCisJZ2l0IGFkZCBuZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLW0gIm9uZSIgLW0gInR3byIgLW0gInRocmVlIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgY29tbWl0ID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gb25lICYmCisJCWVjaG8gJiYKKwkJZWNobyB0d28gJiYKKwkJZWNobyAmJgorCQllY2hvIHRocmVlCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjb21taXQgdG8gZml4IGF1dGhvcicgJworCisJb2xkdGljaz0kR0lUX0FVVEhPUl9EQVRFICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jb21taXQgJiYKKwlzZWQgLWUgInMvYXV0aG9yLiovYXV0aG9yICRhdXRob3IgJG9sZHRpY2svIiBcCisJCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiBcCisJCWNvbW1pdCA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3I9IiRhdXRob3IiICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdCA8ZmlsZT4gd2l0aCBkaXJ0eSBpbmRleCcgJworCWVjaG8gdGFjb2NhdCA+ZWxpZiAmJgorCWVjaG8gdGVobHVseiA+Y2h6ICYmCisJZ2l0IGFkZCBjaHogJiYKKwlnaXQgY29tbWl0IGVsaWYgLW0gInRhY29jYXQgaXMgYSBwYWxpbmRyb21lIiAmJgorCWdpdCBzaG93IC0tc3RhdCA+c3RhdCAmJgorCWdyZXAgZWxpZiBzdGF0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmRpZmYgJiYKKwlncmVwIGNoeiBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgdHJlZSAoc2luZ2xlIHBhcmVudCknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGVtcHR5CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSB0cmVlIChzaW5nbGUgcGFyZW50KSAtLWFsbG93LWVtcHR5JyAnCisKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZvcmNlZCBlbXB0eSIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCWdyZXAgZm9yY2VkIGNvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgdHJlZSAobWVyZ2UgYW5kIGFtZW5kIG1lcmdlKScgJworCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwllY2hvIHplcm8gPnplcm8gJiYKKwlnaXQgYWRkIHplcm8gJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgemVybyIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgbWVyZ2UgLXMgb3VycyBzaWRlIC1tICJlbXB0eSBvayIgJiYKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImVtcHR5IHJlYWxseSBvayIgJiYKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgdXNpbmcgdGhlIG1lc3NhZ2UgZnJvbSBhbm90aGVyIGNvbW1pdCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAib2xkIGNvbW1pdCIgJiYKKwlvbGQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJuZXcgY29tbWl0IiAmJgorCW5ldz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbWVuZCAtQyAiJG9sZCIgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT0iZm9ybWF0OiVhZCAlcyIgIiRvbGQiID5leHBlY3RlZCAmJgorCWdpdCBzaG93IC0tcHJldHR5PSJmb3JtYXQ6JWFkICVzIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCB1c2luZyB0aGUgbWVzc2FnZSBmcm9tIGEgY29tbWl0IG5hbWVkIHdpdGggdGFnJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJvbGQgY29tbWl0IiAmJgorCW9sZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgdGFnIC1hIC1tICJ0YWcgb24gb2xkIiB0YWdnZWQtb2xkIEhFQUQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIm5ldyBjb21taXQiICYmCisJbmV3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFtZW5kIC1DIHRhZ2dlZC1vbGQgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT0iZm9ybWF0OiVhZCAlcyIgIiRvbGQiID5leHBlY3RlZCAmJgorCWdpdCBzaG93IC0tcHJldHR5PSJmb3JtYXQ6JWFkICVzIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjYW4gY29weSBub3RlcycgJworCisJZ2l0IGNvbmZpZyBub3Rlcy5yZXdyaXRlLmFtZW5kIHRydWUgJiYKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwlnaXQgbm90ZXMgYWRkIC1tImEgbm90ZSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0ibmV3IGZvbyIgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyBzaG93KSIgPSAiYSBub3RlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBhIGZpbGUgd2hvc2UgbmFtZSBpcyBhIGRhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPi4vLSAmJgorCWdpdCBhZGQgLi8tICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGRhc2giID5vdXRwdXQgPC9kZXYvbnVsbCAmJgorCXRlc3RfaTE4bmdyZXAgIiBjaGFuZ2VkLCA1IGluc2VydGlvbnMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ubHkgd29ya3Mgb24gdG8tYmUtYm9ybiBicmFuY2gnICcKKwkjIFRoaXMgdGVzdCByZWxpZXMgb24gaGF2aW5nIHNvbWV0aGluZyBpbiB0aGUgaW5kZXgsIGFzIGl0CisJIyB3b3VsZCBub3Qgb3RoZXJ3aXNlIGFjdHVhbGx5IHByb3ZlIG11Y2guICBTbyBjaGVjayB0aGlzLgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuICYmCisJZWNobyBmb28gPm5ld2ZpbGUgJiYKKwlnaXQgYWRkIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC0tb25seSBuZXdmaWxlIC1tIi0tb25seSBvbiB1bmJvcm4gYnJhbmNoIiAmJgorCWVjaG8gbmV3ZmlsZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kcnktcnVuIHdpdGggY29uZmxpY3RzIGZpeGVkIGZyb20gYSBtZXJnZScgJworCSMgc2V0dXAgdHdvIGJyYW5jaGVzIHdpdGggY29uZmxpY3RpbmcgaW5mb3JtYXRpb24KKwkjIGluIHRoZSBzYW1lIGZpbGUsIHJlc29sdmUgdGhlIGNvbmZsaWN0LAorCSMgY2FsbCBjb21taXQgd2l0aCAtLWRyeS1ydW4KKwllY2hvICJJbml0aWFsIGNvbnRlbnRzLCB1bmltcG9ydGFudCIgPnRlc3QtZmlsZSAmJgorCWdpdCBhZGQgdGVzdC1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJZWNobyAiY29tbWl0LTEtc3RhdGUiID50ZXN0LWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMSIgLWkgdGVzdC1maWxlICYmCisJZ2l0IHRhZyBjb21taXQtMSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gtMiBIRUFEXjEgJiYKKwllY2hvICJjb21taXQtMi1zdGF0ZSIgPnRlc3QtZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCAyIiAtaSB0ZXN0LWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgY29tbWl0LTEgJiYKKwllY2hvICJjb21taXQtMi1zdGF0ZSIgPnRlc3QtZmlsZSAmJgorCWdpdCBhZGQgdGVzdC1maWxlICYmCisJZ2l0IGNvbW1pdCAtLWRyeS1ydW4gJiYKKwlnaXQgY29tbWl0IC1tICJjb25mbGljdHMgZml4ZWQgZnJvbSBtZXJnZS4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZHJ5LXJ1biAtLXNob3J0JyAnCisJPnRlc3QtZmlsZSAmJgorCWdpdCBhZGQgdGVzdC1maWxlICYmCisJZ2l0IGNvbW1pdCAtLWRyeS1ydW4gLS1zaG9ydAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDItY29tbWl0LXBvcmNlbGFpbi5zaCBiL3QvdDc1MDItY29tbWl0LXBvcmNlbGFpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNGM5MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMi1jb21taXQtcG9yY2VsYWluLnNoCkBAIC0wLDAgKzEsNjI4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1pdCBwb3JjZWxhaW4taXNoJworCisuIC4vdGVzdC1saWIuc2gKKworY29tbWl0X21zZ19pcyAoKSB7CisJZXhwZWN0PWNvbW1pdF9tc2dfaXMuZXhwZWN0CisJYWN0dWFsPWNvbW1pdF9tc2dfaXMuYWN0dWFsCisKKwlwcmludGYgIiVzIiAiJChnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyViIC0xKSIgPiRhY3R1YWwgJiYKKwlwcmludGYgIiVzIiAiJDEiID4kZXhwZWN0ICYmCisJdGVzdF9pMThuY21wICRleHBlY3QgJGFjdHVhbAorfQorCisjIEFyZ3VtZW50czogWzxwcmVmaXhdIFs8Y29tbWl0IG1lc3NhZ2U+XSBbPGNvbW1pdCBvcHRpb25zPl0KK2NoZWNrX3N1bW1hcnlfb25lbGluZSgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0ICR7MysiJDMifSAtbSAiJDIiID5yYXcgJiYKKwloZWFkIC1uIDEgcmF3ID5hY3QgJiYKKworCSMgYnJhbmNoIG5hbWUKKwlTVU1NQVJZX1BSRUZJWD0iJChnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgSEVBRCkiICYmCisKKwkjIGFwcGVuZCB0aGUgInNwZWNpYWwiIHByZWZpeCwgbGlrZSAicm9vdC1jb21taXQiLCAiZGV0YWNoZWQgSEVBRCIKKwlpZiB0ZXN0IC1uICIkMSIKKwl0aGVuCisJCVNVTU1BUllfUFJFRklYPSIkU1VNTUFSWV9QUkVGSVggKCQxKSIKKwlmaQorCisJIyBhYmJyZXYgU0hBLTEKKwlTVU1NQVJZX1BPU1RGSVg9IiQoZ2l0IGxvZyAtMSAtLXByZXR0eT0nZm9ybWF0OiVoJykiCisJZWNobyAiWyRTVU1NQVJZX1BSRUZJWCAkU1VNTUFSWV9QT1NURklYXSAkMiIgPmV4cCAmJgorCisJdGVzdF9pMThuY21wIGV4cCBhY3QKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHN1bW1hcnkgZm9ybWF0JyAnCisKKwllY2hvIG5ldyA+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJY2hlY2tfc3VtbWFyeV9vbmVsaW5lICJyb290LWNvbW1pdCIgImluaXRpYWwiICYmCisKKwllY2hvIGNoYW5nZSA+PmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgc3VtbWFyeSBmb3JtYXQ6IHJvb3QtY29tbWl0JyAnCisJY2hlY2tfc3VtbWFyeV9vbmVsaW5lICIiICJhIGNoYW5nZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHN1bW1hcnkgZm9ybWF0IGZvciBjb21taXQgd2l0aCBhbiBlbXB0eSBkaWZmJyAnCisKKwljaGVja19zdW1tYXJ5X29uZWxpbmUgIiIgImVtcHR5IiAiLS1hbGxvdy1lbXB0eSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHN1bW1hcnkgZm9ybWF0IGZvciBtZXJnZXMnICcKKworCWdpdCBjaGVja291dCAtYiByZWN1cnNpdmUtYmFzZSAmJgorCXRlc3RfY29tbWl0IGJhc2UgZmlsZTEgJiYKKworCWdpdCBjaGVja291dCAtYiByZWN1cnNpdmUtYSByZWN1cnNpdmUtYmFzZSAmJgorCXRlc3RfY29tbWl0IGNvbW1pdC1hIGZpbGUxICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVjdXJzaXZlLWIgcmVjdXJzaXZlLWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBjb21taXQtYiBmaWxlMSAmJgorCisJIyBjb25mbGljdAorCWdpdCBjaGVja291dCByZWN1cnNpdmUtYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSByZWN1cnNpdmUtYiAmJgorCSMgcmVzb2x2ZSB0aGUgY29uZmxpY3QKKwllY2hvIGNvbW1pdC1hID5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwljaGVja19zdW1tYXJ5X29uZWxpbmUgIiIgIk1lcmdlIgorJworCitvdXRwdXRfdGVzdHNfY2xlYW51cCgpIHsKKwkjIHRoaXMgaXMgbmVlZGVkIGZvciAiZG8gbm90IGZpcmUgZWRpdG9yIGluIHRoZSBwcmVzZW5jZSBvZiBjb25mbGljdHMiCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJIyB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlICJwYXJ0aWFsIHJlbW92YWwiIHRlc3QgdG8gcGFzcworCWdpdCBybSBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gImNsZWFudXAiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBiYXNpY3MnICcKKworCW91dHB1dF90ZXN0c19jbGVhbnVwICYmCisKKwllY2hvIGRvaW5nIHBhcnRpYWwgPiJjb21taXQgaXMiICYmCisJbWtkaXIgbm90ICYmCisJZWNobyB2ZXJ5IG11Y2ggZW5jb3VyYWdlZCBidXQgd2Ugc2hvdWxkID5ub3QvZm9yYmlkICYmCisJZ2l0IGFkZCAiY29tbWl0IGlzIiBub3QgJiYKKwllY2hvIHVwZGF0ZSBhZGRlZCAiY29tbWl0IGlzIiBmaWxlID4iY29tbWl0IGlzIiAmJgorCWVjaG8gYWxzbyB1cGRhdGUgYW5vdGhlciA+bm90L2ZvcmJpZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gImluaXRpYWwgd2l0aCAtYSIgJiYKKworCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6ImNvbW1pdCBpcyIgPmN1cnJlbnQuMSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6bm90L2ZvcmJpZCA+Y3VycmVudC4yICYmCisKKwljbXAgY3VycmVudC4xICJjb21taXQgaXMiICYmCisJY21wIGN1cnJlbnQuMiBub3QvZm9yYmlkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCcgJworCisJZWNobyBhbm90aGVyID4iY29tbWl0IGlzIiAmJgorCWVjaG8gYW5vdGhlciA+bm90L2ZvcmJpZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhcnRpYWwgY29tbWl0IHRvIGhhbmRsZSBhIGZpbGUiICJjb21taXQgaXMiICYmCisKKwljaGFuZ2VkPSQoZ2l0IGRpZmYtdHJlZSAtLW5hbWUtb25seSBIRUFEXiBIRUFEKSAmJgorCXRlc3QgIiRjaGFuZ2VkIiA9ICJjb21taXQgaXMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFydGlhbCBtb2RpZmljYXRpb24gaW4gYSBzdWJkaXJlY3RvcnknICcKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhcnRpYWwgY29tbWl0IHRvIHN1YmRpcmVjdG9yeSIgbm90ICYmCisKKwljaGFuZ2VkPSQoZ2l0IGRpZmYtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEXiBIRUFEKSAmJgorCXRlc3QgIiRjaGFuZ2VkIiA9ICJub3QvZm9yYmlkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgcmVtb3ZhbCcgJworCisJZ2l0IHJtIG5vdC9mb3JiaWQgJiYKKwlnaXQgY29tbWl0IC1tICJwYXJ0aWFsIGNvbW1pdCB0byByZW1vdmUgbm90L2ZvcmJpZCIgbm90ICYmCisKKwljaGFuZ2VkPSQoZ2l0IGRpZmYtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEXiBIRUFEKSAmJgorCXRlc3QgIiRjaGFuZ2VkIiA9ICJub3QvZm9yYmlkIiAmJgorCXJlbWFpbj0kKGdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5IEhFQUQpICYmCisJdGVzdCAiJHJlbWFpbiIgPSAiY29tbWl0IGlzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ24gb2ZmJyAnCisKKwk+cG9zaXRpdmUgJiYKKwlnaXQgYWRkIHBvc2l0aXZlICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAidGhhbmsgeW91IiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0Lm1zZyAmJgorCXNlZCAtbmUgInMvU2lnbmVkLW9mZi1ieTogLy9wIiBjb21taXQubXNnID5hY3R1YWwgJiYKKwlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPmlkZW50ICYmCisJc2VkIC1lICJzLz4uKi8+LyIgaWRlbnQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgLW0nICcKKworCT5uZWdhdGl2ZSAmJgorCWdpdCBhZGQgbmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC1tICJvbmUiIC1tICJ0d28iIC1tICJ0aHJlZSIgJiYKKwlhY3R1YWw9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnRtcCAmJiBzZWQgLWUgIjEsL15cJC9kIiB0bXAgJiYgcm0gdG1wKSAmJgorCWV4cGVjdGVkPSQodGVzdF93cml0ZV9saW5lcyAib25lIiAiIiAidHdvIiAiIiAidGhyZWUiKSAmJgorCXRlc3QgInokYWN0dWFsIiA9ICJ6JGV4cGVjdGVkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UnICcKKworCWVjaG8gbWludXMgPm5lZ2F0aXZlICYmCisJZ2l0IGFkZCBuZWdhdGl2ZSAmJgorCWdpdCBzdGF0dXMgLXYgPnJhdyAmJgorCXNlZCAtbmUgIi9eZGlmZiAtLWdpdCAvcCIgcmF3ID5hY3R1YWwgJiYKKwllY2hvICJkaWZmIC0tZ2l0IGEvbmVnYXRpdmUgYi9uZWdhdGl2ZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIHJlc3BlY3RzIGRpZmYgY29uZmlnJyAnCisKKwl0ZXN0X2NvbmZpZyBkaWZmLm5vcHJlZml4IHRydWUgJiYKKwlnaXQgc3RhdHVzIC12ID5hY3R1YWwgJiYKKwlncmVwICJkaWZmIC0tZ2l0IG5lZ2F0aXZlIG5lZ2F0aXZlIiBhY3R1YWwKKycKKworbWVzZ193aXRoX2NvbW1lbnRfYW5kX25ld2xpbmVzPScKKyMgdGV4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZmlsZSB3aXRoIGNvbW1lbnQgbGluZSBhbmQgdHJhaWxpbmcgbmV3bGluZXMnICAnCisJcHJpbnRmICIlcyIgIiRtZXNnX3dpdGhfY29tbWVudF9hbmRfbmV3bGluZXMiID5leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHZlcmJhdGltIG9wdGlvbiwtdCknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXZlcmJhdGltIC0tbm8tc3RhdHVzIC10IGV4cGVjdCAtYSAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAodmVyYmF0aW0gb3B0aW9uLC1GKScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9dmVyYmF0aW0gLUYgZXhwZWN0IC1hICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPnJhdyAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh2ZXJiYXRpbSBvcHRpb24sLW0pJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD12ZXJiYXRpbSAtbSAiJG1lc2dfd2l0aF9jb21tZW50X2FuZF9uZXdsaW5lcyIgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHdoaXRlc3BhY2Ugb3B0aW9uLC1GKScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJdGVzdF93cml0ZV9saW5lcyAiIiAiIyB0ZXh0IiAiIiA+dGV4dCAmJgorCWVjaG8gIiMgdGV4dCIgPmV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXdoaXRlc3BhY2UgLUYgdGV4dCAtYSAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAoc2Npc3NvcnMgb3B0aW9uLC1GLC1lKScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJY2F0ID50ZXh0IDw8LVxFT0YgJiYKKworCSMgdG8gYmUga2VwdAorCisJICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkjIHRvIGJlIGtlcHQsIHRvbworCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXRvIGJlIHJlbW92ZWQKKwkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl0byBiZSByZW1vdmVkLCB0b28KKwlFT0YKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkjIHRvIGJlIGtlcHQKKworCSAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIyB0byBiZSBrZXB0LCB0b28KKwlFT0YKKwlnaXQgY29tbWl0IC0tY2xlYW51cD1zY2lzc29ycyAtZSAtRiB0ZXh0IC1hICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPnJhdyAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAoc2Npc3NvcnMgb3B0aW9uLC1GLC1lLCBzY2lzc29ycyBvbiBmaXJzdCBsaW5lKScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJY2F0ID50ZXh0IDw8LVxFT0YgJiYKKwkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl0byBiZSByZW1vdmVkCisJRU9GCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9c2Npc3NvcnMgLWUgLUYgdGV4dCAtYSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzIChzdHJpcCBvcHRpb24sLUYpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICIiICIjIHRleHQiICJzYW1wbGUiICIiID50ZXh0ICYmCisJZWNobyBzYW1wbGUgPmV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXN0cmlwIC1GIHRleHQgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHN0cmlwIG9wdGlvbiwtRiwtZSknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCXRlc3Rfd3JpdGVfbGluZXMgIiIgInNhbXBsZSIgIiIgPnRleHQgJiYKKwlnaXQgY29tbWl0IC1lIC1GIHRleHQgLWEgJiYKKwloZWFkIC1uIDQgLmdpdC9DT01NSVRfRURJVE1TRyA+YWN0dWFsCisnCisKK2VjaG8gInNhbXBsZQorCisjIFBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmcKKyMgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC4iID5leHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHN0cmlwIG9wdGlvbiwtRiwtZSk6IG91dHB1dCcgJworCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKGZhaWwgb24gaW52YWxpZCBjbGVhbnVwIG1vZGUgb3B0aW9uKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1jbGVhbnVwPW5vbi1leGlzdGVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlIChmYWlsIG9uIGludmFsaWQgY2xlYW51cCBtb2RlIGNvbmZpZ3VyYXRpb24pJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvbW1pdC5jbGVhbnVwPW5vbi1leGlzdGVudCBjb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAobm8gY29uZmlnIGFuZCBubyBvcHRpb24gdXNlcyBkZWZhdWx0KScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoCisJICB0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQgJiYKKwkgIGdpdCBjb21taXQgLS1uby1zdGF0dXMKKwkpICYmCisJY29tbWl0X21zZ19pcyAiY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKG9wdGlvbiBvdmVycmlkZXMgZGVmYXVsdCknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJKAorCSAgdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50ICYmCisJICBnaXQgY29tbWl0IC0tY2xlYW51cD13aGl0ZXNwYWNlIC0tbm8tc3RhdHVzCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgImNvbW1pdCBtZXNzYWdlICMgY29tbWVudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAoY29uZmlnIG92ZXJyaWRlcyBkZWZhdWx0KScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoCisJICB0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQgJiYKKwkgIGdpdCAtYyBjb21taXQuY2xlYW51cD13aGl0ZXNwYWNlIGNvbW1pdCAtLW5vLXN0YXR1cworCSkgJiYKKwljb21taXRfbXNnX2lzICJjb21taXQgbWVzc2FnZSAjIGNvbW1lbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKG9wdGlvbiBvdmVycmlkZXMgY29uZmlnKScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoCisJICB0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQgJiYKKwkgIGdpdCAtYyBjb21taXQuY2xlYW51cD13aGl0ZXNwYWNlIGNvbW1pdCAtLWNsZWFudXA9ZGVmYXVsdAorCSkgJiYKKwljb21taXRfbXNnX2lzICJjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAoZGVmYXVsdCwgLW0pJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm1lc3NhZ2UgI2NvbW1lbnQgIiAmJgorCWNvbW1pdF9tc2dfaXMgIm1lc3NhZ2UgI2NvbW1lbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKHdoaXRlc3BhY2Ugb3B0aW9uLCAtbSknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9d2hpdGVzcGFjZSAtLW5vLXN0YXR1cyAtbSAibWVzc2FnZSAjY29tbWVudCAiICYmCisJY29tbWl0X21zZ19pcyAibWVzc2FnZSAjY29tbWVudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAod2hpdGVzcGFjZSBjb25maWcsIC1tKScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgLWMgY29tbWl0LmNsZWFudXA9d2hpdGVzcGFjZSBjb21taXQgLS1uby1zdGF0dXMgLW0gIm1lc3NhZ2UgI2NvbW1lbnQgIiAmJgorCWNvbW1pdF9tc2dfaXMgIm1lc3NhZ2UgI2NvbW1lbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2Ugc2hvd3MgYXV0aG9yIHdoZW4gaXQgaXMgbm90IGVxdWFsIHRvIGNvbW1pdHRlcicgJworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLWUgLW0gInNhbXBsZSIgLWEgJiYKKwl0ZXN0X2kxOG5ncmVwIFwKKwkgICJeIyBBdXRob3I6ICpBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPlwkIiBcCisJICAuZ2l0L0NPTU1JVF9FRElUTVNHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2Ugc2hvd3MgZGF0ZSB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgc2V0JyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1lIC1tIGZvbyAtLWRhdGU9IjIwMTAtMDEtMDJUMDM6MDQ6MDUiICYmCisJdGVzdF9pMThuZ3JlcCBcCisJICAiXiMgRGF0ZTogKlNhdCBKYW4gMiAwMzowNDowNSAyMDEwICswMDAwIiBcCisJICAuZ2l0L0NPTU1JVF9FRElUTVNHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQVVUT0lERU5UICdtZXNzYWdlIHNob3dzIGNvbW1pdHRlciB3aGVuIGl0IGlzIGF1dG9tYXRpYycgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX05BTUUgJiYKKwkJZ2l0IGNvbW1pdCAtZSAtbSAic2FtcGxlIiAtYQorCSkgJiYKKwkjIHRoZSBpZGVudCBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHN5c3RlbSwgc28gd2UgY2Fubm90CisJIyBjaGVjayB0aGUgYWN0dWFsIHZhbHVlLCBvbmx5IHRoYXQgaXQgaXMgdGhlcmUKKwl0ZXN0X2kxOG5ncmVwICJeIyBDb21taXR0ZXI6ICIgLmdpdC9DT01NSVRfRURJVE1TRworJworCit3cml0ZV9zY3JpcHQgLmdpdC9GQUtFX0VESVRPUiA8PEVPRgorZWNobyBlZGl0b3Igc3RhcnRlZCA+IiQocHdkKS8uZ2l0L3Jlc3VsdCIKK2V4aXQgMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUZBSUxfUFJFUkVRUywhQVVUT0lERU5UICdkbyBub3QgZmlyZSBlZGl0b3Igd2hlbiBjb21taXR0ZXIgaXMgYm9ndXMnICcKKwk+LmdpdC9yZXN1bHQgJiYKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FICYmCisJCUdJVF9FRElUT1I9IlwiJChwd2QpLy5naXQvRkFLRV9FRElUT1JcIiIgJiYKKwkJZXhwb3J0IEdJVF9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtZSAtbSBzYW1wbGUgLWEKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IC5naXQvcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBmaXJlIGVkaXRvciBpZiAtbSA8bXNnPiB3YXMgZ2l2ZW4nICcKKwllY2hvIHRpY2sgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJlZGl0b3Igbm90IHN0YXJ0ZWQiID4uZ2l0L3Jlc3VsdCAmJgorCShHSVRfRURJVE9SPSJcIiQocHdkKS8uZ2l0L0ZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLW0gdGljaykgJiYKKwl0ZXN0ICIkKGNhdCAuZ2l0L3Jlc3VsdCkiID0gImVkaXRvciBub3Qgc3RhcnRlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGZpcmUgZWRpdG9yIGlmIC1tICIiIHdhcyBnaXZlbicgJworCWVjaG8gdG9jayA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImVkaXRvciBub3Qgc3RhcnRlZCIgPi5naXQvcmVzdWx0ICYmCisJKEdJVF9FRElUT1I9IlwiJChwd2QpLy5naXQvRkFLRV9FRElUT1JcIiIgXAorCSBnaXQgY29tbWl0IC1tICIiIC0tYWxsb3ctZW1wdHktbWVzc2FnZSkgJiYKKwl0ZXN0ICIkKGNhdCAuZ2l0L3Jlc3VsdCkiID0gImVkaXRvciBub3Qgc3RhcnRlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGZpcmUgZWRpdG9yIGluIHRoZSBwcmVzZW5jZSBvZiBjb25mbGljdHMnICcKKworCWdpdCBjbGVhbiAtZiAmJgorCWVjaG8gZiA+ZyAmJgorCWdpdCBhZGQgZyAmJgorCWdpdCBjb21taXQgLW0gImFkZCBnIiAmJgorCWdpdCBicmFuY2ggc2Vjb25kICYmCisJZWNobyBtYXN0ZXIgPmcgJiYKKwllY2hvIGcgPmggJiYKKwlnaXQgYWRkIGcgaCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmeSBnIGFuZCBhZGQgaCIgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZWNobyBzZWNvbmQgPmcgJiYKKwlnaXQgYWRkIGcgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCSMgTXVzdCBmYWlsIGR1ZSB0byBjb25mbGljdAorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtbiBtYXN0ZXIgJiYKKwllY2hvICJlZGl0b3Igbm90IHN0YXJ0ZWQiID4uZ2l0L3Jlc3VsdCAmJgorCSgKKwkJR0lUX0VESVRPUj0iXCIkKHB3ZCkvLmdpdC9GQUtFX0VESVRPUlwiIiAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0CisJKSAmJgorCXRlc3QgIiQoY2F0IC5naXQvcmVzdWx0KSIgPSAiZWRpdG9yIG5vdCBzdGFydGVkIgorJworCit3cml0ZV9zY3JpcHQgLmdpdC9GQUtFX0VESVRPUiA8PEVPRgorIyBraWxsIC1URVJNIGNvbW1hbmQgYWRkZWQgYmVsb3cuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBFWEVDS0VFUFNQSUQgJ2EgU0lHVEVSTSBzaG91bGQgYnJlYWsgbG9ja3MnICcKKwllY2hvID4+bmVnYXRpdmUgJiYKKwkhICIkU0hFTExfUEFUSCIgLWMgJ1wnJworCSAgZWNobyBraWxsIC1URVJNICQkID4+LmdpdC9GQUtFX0VESVRPUgorCSAgR0lUX0VESVRPUj0uZ2l0L0ZBS0VfRURJVE9SCisJICBleHBvcnQgR0lUX0VESVRPUgorCSAgZXhlYyBnaXQgY29tbWl0IC1hJ1wnJyAmJgorCXRlc3QgISAtZiAuZ2l0L2luZGV4LmxvY2sKKycKKworcm0gLWYgLmdpdC9NRVJHRV9NU0cgLmdpdC9DT01NSVRfRURJVE1TRworZ2l0IHJlc2V0IC1xIC0taGFyZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIYW5kIGNvbW1pdHRpbmcgb2YgYSByZWR1bmRhbnQgbWVyZ2UgcmVtb3ZlcyBkdXBzJyAnCisKKwlnaXQgcmV2LXBhcnNlIHNlY29uZCBtYXN0ZXIgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzZWNvbmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciBnICYmCisJRURJVE9SPTogZ2l0IGNvbW1pdCAtYSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1uIC1lICJzL15wYXJlbnQgLy9wIiAtZSAiL14kL3EiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Egc2luZ2xlLWxpbmVyIHN1YmplY3Qgd2l0aCBhIHRva2VuIHBsdXMgY29sb24gaXMgbm90IGEgZm9vdGVyJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAiaGVsbG86IGtpdHR5IiAtLWFsbG93LWVtcHR5ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL14kL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLXMgcGxhY2VzIHNvYiBvbiB0aGlyZCBsaW5lIGFmdGVyIHR3byBlbXB0eSBsaW5lcycgJworCWdpdCBjb21taXQgLXMgLS1hbGxvdy1lbXB0eSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKworCisJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisKKwlFT0YKKwlzZWQgLWUgIi9eIy9kIiAtZSAicy9eOi4qLy8iIC5naXQvQ09NTUlUX0VESVRNU0cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKword3JpdGVfc2NyaXB0IC5naXQvRkFLRV9FRElUT1IgPDxcRU9GCittdiAiJDEiICIkMS5vcmlnIgorKAorCWVjaG8gbWVzc2FnZQorCWNhdCAiJDEub3JpZyIKKykgPiIkMSIKK0VPRgorCitlY2hvICcjIyBDdXN0b20gdGVtcGxhdGUnID50ZW1wbGF0ZQorCit0cnlfY29tbWl0ICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJR0lUX0VESVRPUj0uZ2l0L0ZBS0VfRURJVE9SIGdpdCBjb21taXQgLWEgJCogJHVzZV90ZW1wbGF0ZSAmJgorCWNhc2UgIiR1c2VfdGVtcGxhdGUiIGluCisJJycpCisJCXRlc3RfaTE4bmdyZXAgISAiXiMjIEN1c3RvbSB0ZW1wbGF0ZSIgLmdpdC9DT01NSVRfRURJVE1TRyA7OworCSopCisJCXRlc3RfaTE4bmdyZXAgIl4jIyBDdXN0b20gdGVtcGxhdGUiIC5naXQvQ09NTUlUX0VESVRNU0cgOzsKKwllc2FjCit9CisKK3RyeV9jb21taXRfc3RhdHVzX2NvbWJvICgpIHsKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCcgJworCQl0cnlfY29tbWl0ICIiICYmCisJCXRlc3RfaTE4bmdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXN0YXR1cycgJworCQl0cnlfY29tbWl0IC0tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLW5vLXN0YXR1cycgJworCQl0cnlfY29tbWl0IC0tbm8tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgISAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHdpdGggY29tbWl0LnN0YXR1cyA9IHllcycgJworCQl0ZXN0X2NvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0ICIiICYmCisJCXRlc3RfaTE4bmdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIGNvbW1pdC5zdGF0dXMgPSBubycgJworCQl0ZXN0X2NvbmZpZyBjb21taXQuc3RhdHVzIG5vICYmCisJCXRyeV9jb21taXQgIiIgJiYKKwkJdGVzdF9pMThuZ3JlcCAhICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zdGF0dXMgd2l0aCBjb21taXQuc3RhdHVzID0geWVzJyAnCisJCXRlc3RfY29uZmlnIGNvbW1pdC5zdGF0dXMgeWVzICYmCisJCXRyeV9jb21taXQgLS1zdGF0dXMgJiYKKwkJdGVzdF9pMThuZ3JlcCAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tbm8tc3RhdHVzIHdpdGggY29tbWl0LnN0YXR1cyA9IHllcycgJworCQl0ZXN0X2NvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0IC0tbm8tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgISAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3RhdHVzIHdpdGggY29tbWl0LnN0YXR1cyA9IG5vJyAnCisJCXRlc3RfY29uZmlnIGNvbW1pdC5zdGF0dXMgbm8gJiYKKwkJdHJ5X2NvbW1pdCAtLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1uby1zdGF0dXMgd2l0aCBjb21taXQuc3RhdHVzID0gbm8nICcKKwkJdGVzdF9jb25maWcgY29tbWl0LnN0YXR1cyBubyAmJgorCQl0cnlfY29tbWl0IC0tbm8tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgISAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCit9CisKK3RyeV9jb21taXRfc3RhdHVzX2NvbWJvCisKK3VzZV90ZW1wbGF0ZT0iLXQgdGVtcGxhdGUiCisKK3RyeV9jb21taXRfc3RhdHVzX2NvbWJvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXN0YXR1cyB3aXRoIGN1c3RvbSBjb21tZW50IGNoYXJhY3RlcicgJworCXRlc3RfY29uZmlnIGNvcmUuY29tbWVudGNoYXIgIjsiICYmCisJdHJ5X2NvbW1pdCAtLXN0YXR1cyAmJgorCXRlc3RfaTE4bmdyZXAgIl47IENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggY29yZS5jb21tZW50Y2hhcicgJworCXRlc3RfY29tbWl0ICIjZm9vIiBmb28gJiYKKwlHSVRfRURJVE9SPS5naXQvRkFLRV9FRElUT1IgZ2l0IC1jIGNvcmUuY29tbWVudENoYXI9YXV0byBjb21taXQgLS1hbWVuZCAmJgorCXRlc3RfaTE4bmdyZXAgIl47IENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggY29yZS5jb21tZW50Y2hhciBidXQgb3V0IG9mIG9wdGlvbnMnICcKKwljYXQgPnRleHQgPDxcRU9GICYmCisjIDEKKzsgMgorQCAzCishIDQKKyQgNQorJSA2CiteIDcKKyYgOAorfCA5Cis6IDEwCitFT0YKKwlnaXQgY29tbWl0IC0tYW1lbmQgLUYgdGV4dCAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yIC5naXQvRkFLRV9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvcmUuY29tbWVudENoYXI9YXV0byBjb21taXQgLS1hbWVuZAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAzLXByZS1jb21taXQtYW5kLXByZS1tZXJnZS1jb21taXQtaG9va3Muc2ggYi90L3Q3NTAzLXByZS1jb21taXQtYW5kLXByZS1tZXJnZS1jb21taXQtaG9va3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjM0ODU0NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDMtcHJlLWNvbW1pdC1hbmQtcHJlLW1lcmdlLWNvbW1pdC1ob29rcy5zaApAQCAtMCwwICsxLDI4MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ByZS1jb21taXQgYW5kIHByZS1tZXJnZS1jb21taXQgaG9va3MnCisKKy4gLi90ZXN0LWxpYi5zaAorCitIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIKK1BSRUNPTU1JVD0iJEhPT0tESVIvcHJlLWNvbW1pdCIKK1BSRU1FUkdFPSIkSE9PS0RJUi9wcmUtbWVyZ2UtY29tbWl0IgorCisjIFByZXBhcmUgc2FtcGxlIHNjcmlwdHMgdGhhdCB3cml0ZSB0aGVpciAkMCB0byBhY3R1YWxfaG9va3MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbXBsZSBzY3JpcHQgc2V0dXAnICcKKwlta2RpciAtcCAiJEhPT0tESVIiICYmCisJd3JpdGVfc2NyaXB0ICIkSE9PS0RJUi9zdWNjZXNzLnNhbXBsZSIgPDwtXEVPRiAmJgorCWVjaG8gJDAgPj5hY3R1YWxfaG9va3MKKwlleGl0IDAKKwlFT0YKKwl3cml0ZV9zY3JpcHQgIiRIT09LRElSL2ZhaWwuc2FtcGxlIiA8PC1cRU9GICYmCisJZWNobyAkMCA+PmFjdHVhbF9ob29rcworCWV4aXQgMQorCUVPRgorCXdyaXRlX3NjcmlwdCAiJEhPT0tESVIvbm9uLWV4ZWMuc2FtcGxlIiA8PC1cRU9GICYmCisJZWNobyAkMCA+PmFjdHVhbF9ob29rcworCWV4aXQgMQorCUVPRgorCWNobW9kIC14ICIkSE9PS0RJUi9ub24tZXhlYy5zYW1wbGUiICYmCisJd3JpdGVfc2NyaXB0ICIkSE9PS0RJUi9yZXF1aXJlLXByZWZpeC5zYW1wbGUiIDw8LVxFT0YgJiYKKwllY2hvICQwID4+YWN0dWFsX2hvb2tzCisJdGVzdCAkR0lUX1BSRUZJWCA9ICJzdWNjZXNzLyIKKwlFT0YKKwl3cml0ZV9zY3JpcHQgIiRIT09LRElSL2NoZWNrLWF1dGhvci5zYW1wbGUiIDw8LVxFT0YKKwllY2hvICQwID4+YWN0dWFsX2hvb2tzCisJdGVzdCAiJEdJVF9BVVRIT1JfTkFNRSIgPSAiTmV3IEF1dGhvciIgJiYKKwl0ZXN0ICIkR0lUX0FVVEhPUl9FTUFJTCIgPSAibmV3YXV0aG9yQGV4YW1wbGUuY29tIgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IGNvbW1pdCcgJworCWVjaG8gInJvb3QiID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiemVyb3RoIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJZWNobyAiZm9vIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJtYWtlIGl0IG5vbi1mZiIgJiYKKwlnaXQgYnJhbmNoIHNpZGUtb3JpZyBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb25mbGljdGluZyBicmFuY2hlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3RpbmctYSBtYXN0ZXIgJiYKKwllY2hvIGEgPmNvbmZsaWN0aW5nICYmCisJZ2l0IGFkZCBjb25mbGljdGluZyAmJgorCWdpdCBjb21taXQgLW0gY29uZmxpY3RpbmctYSAmJgorCWdpdCBjaGVja291dCAtYiBjb25mbGljdGluZy1iIG1hc3RlciAmJgorCWVjaG8gYiA+Y29uZmxpY3RpbmcgJiYKKwlnaXQgYWRkIGNvbmZsaWN0aW5nICYmCisJZ2l0IGNvbW1pdCAtbSBjb25mbGljdGluZy1iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgYWN0dWFsX2hvb2tzIiAmJgorCWVjaG8gImZvbyIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyBob29rIChtZXJnZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGFjdHVhbF9ob29rcyIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUgc2lkZS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLW0gIm1lcmdlIG1hc3RlciIgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIG5vIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGFjdHVhbF9ob29rcyIgJiYKKwllY2hvICJiYXIiID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAiYmFyIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIG5vIGhvb2sgKG1lcmdlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgYWN0dWFsX2hvb2tzIiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZSBzaWRlLW9yaWcgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBtZXJnZSAtLW5vLXZlcmlmeSAtbSAibWVyZ2UgbWFzdGVyIiBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggc3VjY2VlZGluZyBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVDT01NSVRcIiBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL3N1Y2Nlc3Muc2FtcGxlIiAiJFBSRUNPTU1JVCIgJiYKKwllY2hvICIkUFJFQ09NTUlUIiA+ZXhwZWN0ZWRfaG9va3MgJiYKKwllY2hvICJtb3JlIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJtb3JlIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIHN1Y2NlZWRpbmcgaG9vayAobWVyZ2UpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVNRVJHRVwiIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcyIgJiYKKwljcCAiJEhPT0tESVIvc3VjY2Vzcy5zYW1wbGUiICIkUFJFTUVSR0UiICYmCisJZWNobyAiJFBSRU1FUkdFIiA+ZXhwZWN0ZWRfaG9va3MgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBtZXJnZSAtbSAibWVyZ2UgbWFzdGVyIiBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9tYXRpYyBtZXJnZSBmYWlsczsgYm90aCBob29rcyBhcmUgYXZhaWxhYmxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVNRVJHRVwiIFwiJFBSRUNPTU1JVFwiIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwljcCAiJEhPT0tESVIvc3VjY2Vzcy5zYW1wbGUiICIkUFJFTUVSR0UiICYmCisJY3AgIiRIT09LRElSL3N1Y2Nlc3Muc2FtcGxlIiAiJFBSRUNPTU1JVCIgJiYKKworCWdpdCBjaGVja291dCBjb25mbGljdGluZy1hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1tICJtZXJnZSBjb25mbGljdGluZy1iIiBjb25mbGljdGluZy1iICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWN0dWFsX2hvb2tzICYmCisKKwllY2hvICIkUFJFQ09NTUlUIiA+ZXhwZWN0ZWRfaG9va3MgJiYKKwllY2hvIGErYiA+Y29uZmxpY3RpbmcgJiYKKwlnaXQgYWRkIGNvbmZsaWN0aW5nICYmCisJZ2l0IGNvbW1pdCAtbSAicmVzb2x2ZSBjb25mbGljdCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBzdWNjZWVkaW5nIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJFBSRUNPTU1JVFwiIGFjdHVhbF9ob29rcyIgJiYKKwljcCAiJEhPT0tESVIvc3VjY2Vzcy5zYW1wbGUiICIkUFJFQ09NTUlUIiAmJgorCWVjaG8gImV2ZW4gbW9yZSIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAiZXZlbiBtb3JlIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIHN1Y2NlZWRpbmcgaG9vayAobWVyZ2UpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVNRVJHRVwiIGFjdHVhbF9ob29rcyIgJiYKKwljcCAiJEhPT0tESVIvc3VjY2Vzcy5zYW1wbGUiICIkUFJFTUVSR0UiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlIHNpZGUtb3JpZyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IG1lcmdlIC0tbm8tdmVyaWZ5IC1tICJtZXJnZSBtYXN0ZXIiIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJFBSRUNPTU1JVFwiIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcyIgJiYKKwljcCAiJEhPT0tESVIvZmFpbC5zYW1wbGUiICIkUFJFQ09NTUlUIiAmJgorCWVjaG8gIiRQUkVDT01NSVQiID5leHBlY3RlZF9ob29rcyAmJgorCWVjaG8gImFub3RoZXIiID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gImFub3RoZXIiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggZmFpbGluZyBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVDT01NSVRcIiBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL2ZhaWwuc2FtcGxlIiAiJFBSRUNPTU1JVCIgJiYKKwllY2hvICJzdHVmZiIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAic3R1ZmYiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rIChtZXJnZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJFBSRU1FUkdFXCIgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzIiAmJgorCWNwICIkSE9PS0RJUi9mYWlsLnNhbXBsZSIgIiRQUkVNRVJHRSIgJiYKKwllY2hvICIkUFJFTUVSR0UiID5leHBlY3RlZF9ob29rcyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1tICJtZXJnZSBtYXN0ZXIiIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBmYWlsaW5nIGhvb2sgKG1lcmdlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFTUVSR0VcIiBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL2ZhaWwuc2FtcGxlIiAiJFBSRU1FUkdFIiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZSBzaWRlLW9yaWcgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBtZXJnZSAtLW5vLXZlcmlmeSAtbSAibWVyZ2UgbWFzdGVyIiBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJFBSRUNPTU1JVFwiIGFjdHVhbF9ob29rcyIgJiYKKwljcCAiJEhPT0tESVIvbm9uLWV4ZWMuc2FtcGxlIiAiJFBSRUNPTU1JVCIgJiYKKwllY2hvICJjb250ZW50IiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJjb250ZW50IiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBcIiRQUkVDT01NSVRcIiBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL25vbi1leGVjLnNhbXBsZSIgIiRQUkVDT01NSVQiICYmCisJZWNobyAibW9yZSBjb250ZW50IiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJtb3JlIGNvbnRlbnQiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2sgKG1lcmdlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFTUVSR0VcIiBhY3R1YWxfaG9va3MiICYmCisJY3AgIiRIT09LRElSL25vbi1leGVjLnNhbXBsZSIgIiRQUkVNRVJHRSIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUgc2lkZS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLW0gIm1lcmdlIG1hc3RlciIgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFjdHVhbF9ob29rcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rIChtZXJnZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIFwiJFBSRU1FUkdFXCIgYWN0dWFsX2hvb2tzIiAmJgorCWNwICIkSE9PS0RJUi9ub24tZXhlYy5zYW1wbGUiICIkUFJFTUVSR0UiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlIHNpZGUtb3JpZyAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IG1lcmdlIC0tbm8tdmVyaWZ5IC1tICJtZXJnZSBtYXN0ZXIiIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rIHJlcXVpcmluZyBHSVRfUFJFRklYJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgXCIkUFJFQ09NTUlUXCIgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzIHN1Y2Nlc3MiICYmCisJY3AgIiRIT09LRElSL3JlcXVpcmUtcHJlZml4LnNhbXBsZSIgIiRQUkVDT01NSVQiICYmCisJZWNobyAiJFBSRUNPTU1JVCIgPmV4cGVjdGVkX2hvb2tzICYmCisJZWNobyAibW9yZSBjb250ZW50IiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlta2RpciBzdWNjZXNzICYmCisJKAorCQljZCBzdWNjZXNzICYmCisJCWdpdCBjb21taXQgLW0gImhvb2sgcmVxdWlyZXMgR0lUX1BSRUZJWCA9IHN1Y2Nlc3MvIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2sgcmVxdWlyaW5nIEdJVF9QUkVGSVgnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBcIiRQUkVDT01NSVRcIiBleHBlY3RlZF9ob29rcyBhY3R1YWxfaG9va3MgZmFpbCIgJiYKKwljcCAiJEhPT0tESVIvcmVxdWlyZS1wcmVmaXguc2FtcGxlIiAiJFBSRUNPTU1JVCIgJiYKKwllY2hvICIkUFJFQ09NTUlUIiA+ZXhwZWN0ZWRfaG9va3MgJiYKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCW1rZGlyIGZhaWwgJiYKKwkoCisJCWNkIGZhaWwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSAiaG9vayBtdXN0IGZhaWwiCisJKSAmJgorCWdpdCBjaGVja291dCAtLSBmaWxlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoZSBhdXRob3IgaW4gaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCIkUFJFQ09NTUlUXCIgZXhwZWN0ZWRfaG9va3MgYWN0dWFsX2hvb2tzIiAmJgorCWNwICIkSE9PS0RJUi9jaGVjay1hdXRob3Iuc2FtcGxlIiAiJFBSRUNPTU1JVCIgJiYKKwljYXQgPmV4cGVjdGVkX2hvb2tzIDw8LUVPRiAmJgorCSRQUkVDT01NSVQKKwkkUFJFQ09NTUlUCisJJFBSRUNPTU1JVAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiYnkgYS51LnRob3IiICYmCisJKAorCQlHSVRfQVVUSE9SX05BTUU9Ik5ldyBBdXRob3IiICYmCisJCUdJVF9BVVRIT1JfRU1BSUw9Im5ld2F1dGhvckBleGFtcGxlLmNvbSIgJiYKKwkJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiYnkgbmV3LmF1dGhvciB2aWEgZW52IiAmJgorCQlnaXQgc2hvdyAtcworCSkgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yPSJOZXcgQXV0aG9yIDxuZXdhdXRob3JAZXhhbXBsZS5jb20+IiBcCisJCS0tYWxsb3ctZW1wdHkgLW0gImJ5IG5ldy5hdXRob3IgdmlhIGNvbW1hbmQgbGluZSIgJiYKKwlnaXQgc2hvdyAtcyAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2hvb2tzIGFjdHVhbF9ob29rcworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDQtY29tbWl0LW1zZy1ob29rLnNoIGIvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzFiOWM2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDQtY29tbWl0LW1zZy1ob29rLnNoCkBAIC0wLDAgKzEsMjk4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tbWl0LW1zZyBob29rJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyBob29rJyAnCisKKwllY2hvICJmb28iID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IgorCisnCisKKyMgc2V0IHVwIGZha2UgZWRpdG9yIGZvciBpbnRlcmFjdGl2ZSBlZGl0aW5nCitjYXQgPiBmYWtlLWVkaXRvciA8PCdFT0YnCisjIS9iaW4vc2gKK2NwIEZBS0VfTVNHICIkMSIKK2V4aXQgMAorRU9GCitjaG1vZCAreCBmYWtlLWVkaXRvcgorCisjIyBOb3QgdXNpbmcgdGVzdF9zZXRfZWRpdG9yIGhlcmUgc28gd2UgY2FuIGVhc2lseSBlbnN1cmUgdGhlIGVkaXRvciB2YXJpYWJsZQorIyMgaXMgb25seSBzZXQgZm9yIHRoZSBlZGl0b3IgdGVzdHMKK0ZBS0VfRURJVE9SPSIkKHB3ZCkvZmFrZS1lZGl0b3IiCitleHBvcnQgRkFLRV9FRElUT1IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIGZvbyIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgZm9vIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIG5vIGhvb2snICcKKworCWVjaG8gImJhciIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAiYmFyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggbm8gaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBiYXIiID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgYmFyIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKKworJworCisjIG5vdyBpbnN0YWxsIGhvb2sgdGhhdCBhbHdheXMgc3VjY2VlZHMKK0hPT0tESVI9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2hvb2tzIgorSE9PSz0iJEhPT0tESVIvY29tbWl0LW1zZyIKK21rZGlyIC1wICIkSE9PS0RJUiIKK2NhdCA+ICIkSE9PSyIgPDxFT0YKKyMhL2Jpbi9zaAorZXhpdCAwCitFT0YKK2NobW9kICt4ICIkSE9PSyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBzdWNjZWVkaW5nIGhvb2snICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJtb3JlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggc3VjY2VlZGluZyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIG1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJtb3JlIG1vcmUiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggc3VjY2VlZGluZyBob29rJyAnCisKKwllY2hvICJldmVuIG1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJldmVuIG1vcmUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBzdWNjZWVkaW5nIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gImV2ZW4gbW9yZSBtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAiZXZlbiBtb3JlIG1vcmUiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCisnCisKKyMgbm93IGEgaG9vayB0aGF0IGZhaWxzCitjYXQgPiAiJEhPT0siIDw8RU9GCisjIS9iaW4vc2gKK2V4aXQgMQorRU9GCisKK2NvbW1pdF9tc2dfaXMgKCkgeworCXRlc3QgIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JXMlYiAtMSkiID0gIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGZhaWxpbmcgaG9vaycgJworCisJZWNobyAiYW5vdGhlciIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gImFub3RoZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gIm1vcmUgYW5vdGhlciIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgYW5vdGhlciIgPiBGQUtFX01TRyAmJgorCSEgKEdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0KQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggZmFpbGluZyBob29rJyAnCisKKwllY2hvICJzdHVmZiIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gInN0dWZmIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggZmFpbGluZyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIHN0dWZmIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAibW9yZSBzdHVmZiIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZmFpbHMgd2l0aCBmYWlsaW5nIGhvb2snICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJyYW5jaCAtRCBuZXdicmFuY2giICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuZXdicmFuY2ggJiYKKwk6ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IGZpbGUyIC1tIGluLXNpZGUtYnJhbmNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBtYXN0ZXIgJiYKKwljb21taXRfbXNnX2lzICJpbi1zaWRlLWJyYW5jaCIgIyBIRUFEIGJlZm9yZSBtZXJnZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGJ5cGFzc2VzIGZhaWxpbmcgaG9vayB3aXRoIC0tbm8tdmVyaWZ5JyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgbmV3YnJhbmNoIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3YnJhbmNoICYmCisJZ2l0IHJtIC1mIGZpbGUgJiYKKwk6ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IGZpbGUyIC1tIGluLXNpZGUtYnJhbmNoICYmCisJZ2l0IG1lcmdlIC0tbm8tdmVyaWZ5IC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBtYXN0ZXIgJiYKKwljb21taXRfbXNnX2lzICJNZXJnZSBicmFuY2ggJ1wnJ21hc3RlcidcJycgaW50byBuZXdicmFuY2giCisnCisKKworY2htb2QgLXggIiRIT09LIgordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3dpdGggbm9uLWV4ZWN1dGFibGUgaG9vaycgJworCisJZWNobyAiY29udGVudCIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJjb250ZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gImNvbnRlbnQgYWdhaW4iID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJjb250ZW50IGFnYWluIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLW0gImNvbnRlbnQgYWdhaW4iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJy0tbm8tdmVyaWZ5IHdpdGggbm9uLWV4ZWN1dGFibGUgaG9vaycgJworCisJZWNobyAibW9yZSBjb250ZW50IiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAibW9yZSBjb250ZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICctLW5vLXZlcmlmeSB3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gImV2ZW4gbW9yZSBjb250ZW50IiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAiZXZlbiBtb3JlIGNvbnRlbnQiID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCisnCisKKyMgbm93IGEgaG9vayB0aGF0IGVkaXRzIHRoZSBjb21taXQgbWVzc2FnZQorY2F0ID4gIiRIT09LIiA8PCdFT0YnCisjIS9iaW4vc2gKK2VjaG8gIm5ldyBtZXNzYWdlIiA+ICIkMSIKK2V4aXQgMAorRU9GCitjaG1vZCAreCAiJEhPT0siCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2sgZWRpdHMgY29tbWl0IG1lc3NhZ2UnICcKKworCWVjaG8gImFkZGl0aW9uYWwiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRpdGlvbmFsIiAmJgorCWNvbW1pdF9tc2dfaXMgIm5ldyBtZXNzYWdlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hvb2sgZWRpdHMgY29tbWl0IG1lc3NhZ2UgKGVkaXRvciknICcKKworCWVjaG8gImFkZGl0aW9uYWwgY29udGVudCIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImFkZGl0aW9uYWwgY29udGVudCIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0ICYmCisJY29tbWl0X21zZ19pcyAibmV3IG1lc3NhZ2UiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiaG9vayBkb2Vzbid0IGVkaXQgY29tbWl0IG1lc3NhZ2UiICcKKworCWVjaG8gInBsdXMiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJwbHVzIiAmJgorCWNvbW1pdF9tc2dfaXMgInBsdXMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiaG9vayBkb2Vzbid0IGVkaXQgY29tbWl0IG1lc3NhZ2UgKGVkaXRvcikiICcKKworCWVjaG8gIm1vcmUgcGx1cyIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgcGx1cyIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5ICYmCisJY29tbWl0X21zZ19pcyAibW9yZSBwbHVzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob29rIGNhbGxlZCBpbiBnaXQtbWVyZ2UgcGlja3MgdXAgY29tbWl0IG1lc3NhZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgbmV3YnJhbmNoIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3YnJhbmNoICYmCisJZ2l0IHJtIC1mIGZpbGUgJiYKKwk6ID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IGZpbGUyIC1tIGluLXNpZGUtYnJhbmNoICYmCisJZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBtYXN0ZXIgJiYKKwljb21taXRfbXNnX2lzICJuZXcgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWVyZ2UgLS1jb250aW51ZSByZW1lbWJlcnMgLS1uby12ZXJpZnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLUQgbmV3YnJhbmNoIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBhID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJhZGQgZmlsZTIgdG8gbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBuZXdicmFuY2ggbWFzdGVyXiAmJgorCWVjaG8gYiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSBmaWxlMiAtbSBpbi1zaWRlLWJyYW5jaCAmJgorCWdpdCBtZXJnZSAtLW5vLXZlcmlmeSAtbSBub3QtcmV3cml0dGVuLWJ5LWhvb2sgbWFzdGVyICYmCisJIyByZXNvbHZlIGNvbmZsaWN0OgorCWVjaG8gYyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IG1lcmdlIC0tY29udGludWUgJiYKKwljb21taXRfbXNnX2lzIG5vdC1yZXdyaXR0ZW4tYnktaG9vaworJworCisjIHNldCB1cCBmYWtlIGVkaXRvciB0byByZXBsYWNlIGBwaWNrYCBieSBgcmV3b3JkYAorY2F0ID4gcmV3b3JkLWVkaXRvciA8PCdFT0YnCisjIS9iaW4vc2gKK212ICIkMSIgIiQxIi5idXAgJiYKK3NlZCAncy9ecGljay9yZXdvcmQvJyA8IiQxIi5idXAgPiIkMSIKK0VPRgorY2htb2QgK3ggcmV3b3JkLWVkaXRvcgorUkVXT1JEX0VESVRPUj0iJChwd2QpL3Jld29yZC1lZGl0b3IiCitleHBvcnQgUkVXT1JEX0VESVRPUgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob29rIGlzIGNhbGxlZCBmb3IgcmV3b3JkIGR1cmluZyBgcmViYXNlIC1pYCcgJworCisJR0lUX1NFUVVFTkNFX0VESVRPUj0iXCIkUkVXT1JEX0VESVRPUlwiIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJY29tbWl0X21zZ19pcyAibmV3IG1lc3NhZ2UiCisKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDUtcHJlcGFyZS1jb21taXQtbXNnLWhvb2suc2ggYi90L3Q3NTA1LXByZXBhcmUtY29tbWl0LW1zZy1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0Zjg1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA1LXByZXBhcmUtY29tbWl0LW1zZy1ob29rLnNoCkBAIC0wLDAgKzEsMzE0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJlcGFyZS1jb21taXQtbXNnIGhvb2snCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgY29tbWl0cyBmb3IgcmViYXNpbmcnICcKKwl0ZXN0X2NvbW1pdCByb290ICYmCisJdGVzdF9jb21taXQgYSBhIGEgJiYKKwl0ZXN0X2NvbW1pdCBiIGIgYiAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2UtbWUgcm9vdCAmJgorCXRlc3RfY29tbWl0IHJlYmFzZS1hIGEgYWEgJiYKKwl0ZXN0X2NvbW1pdCByZWJhc2UtYiBiIGJiICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDEzKQorCWRvCisJCXRlc3RfY29tbWl0IHJlYmFzZS0kaSBjICRpCisJZG9uZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWNhdCA+cmViYXNlLXRvZG8gPDwtRU9GCisJcGljayAkKGdpdCByZXYtcGFyc2UgcmViYXNlLWEpCisJcGljayAkKGdpdCByZXYtcGFyc2UgcmViYXNlLWIpCisJZml4dXAgJChnaXQgcmV2LXBhcnNlIHJlYmFzZS0xKQorCWZpeHVwICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtMikKKwlwaWNrICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtMykKKwlmaXh1cCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTQpCisJc3F1YXNoICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtNSkKKwlyZXdvcmQgJChnaXQgcmV2LXBhcnNlIHJlYmFzZS02KQorCXNxdWFzaCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTcpCisJZml4dXAgJChnaXQgcmV2LXBhcnNlIHJlYmFzZS04KQorCWZpeHVwICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtOSkKKwllZGl0ICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtMTApCisJc3F1YXNoICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtMTEpCisJc3F1YXNoICQoZ2l0IHJldi1wYXJzZSByZWJhc2UtMTIpCisJZWRpdCAkKGdpdCByZXYtcGFyc2UgcmViYXNlLTEzKQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vIGhvb2snICcKKworCWVjaG8gImZvbyIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiCisKKycKKworIyBzZXQgdXAgZmFrZSBlZGl0b3IgZm9yIGludGVyYWN0aXZlIGVkaXRpbmcKK2NhdCA+IGZha2UtZWRpdG9yIDw8J0VPRicKKyMhL2Jpbi9zaAorZXhpdCAwCitFT0YKK2NobW9kICt4IGZha2UtZWRpdG9yCisKKyMjIE5vdCB1c2luZyB0ZXN0X3NldF9lZGl0b3IgaGVyZSBzbyB3ZSBjYW4gZWFzaWx5IGVuc3VyZSB0aGUgZWRpdG9yIHZhcmlhYmxlCisjIyBpcyBvbmx5IHNldCBmb3IgdGhlIGVkaXRvciB0ZXN0cworRkFLRV9FRElUT1I9IiQocHdkKS9mYWtlLWVkaXRvciIKK2V4cG9ydCBGQUtFX0VESVRPUgorCisjIG5vdyBpbnN0YWxsIGhvb2sgdGhhdCBhbHdheXMgc3VjY2VlZHMgYW5kIGFkZHMgYSBtZXNzYWdlCitIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIKK0hPT0s9IiRIT09LRElSL3ByZXBhcmUtY29tbWl0LW1zZyIKK21rZGlyIC1wICIkSE9PS0RJUiIKK2VjaG8gIiMhJFNIRUxMX1BBVEgiID4gIiRIT09LIgorY2F0ID4+ICIkSE9PSyIgPDwnRU9GJworCitHSVRfRElSPSQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpCitpZiB0ZXN0IC1kICIkR0lUX0RJUi9yZWJhc2UtbWVyZ2UiCit0aGVuCisJcmViYXNpbmc9MQorZWxzZQorCXJlYmFzaW5nPTAKK2ZpCisKK2dldF9sYXN0X2NtZCAoKSB7CisJdGFpbCAtbjEgIiRHSVRfRElSL3JlYmFzZS1tZXJnZS9kb25lIiB8IHsKKwkJcmVhZCBjbWQgaWQgXworCQlnaXQgbG9nIC0tcHJldHR5PSJbJGNtZCAlc10iIC1uMSAkaWQKKwl9Cit9CisKK2lmIHRlc3QgIiQyIiA9IGNvbW1pdAordGhlbgorCWlmIHRlc3QgJHJlYmFzaW5nID0gMQorCXRoZW4KKwkJc291cmNlPSIkMyIKKwllbHNlCisJCXNvdXJjZT0kKGdpdCByZXYtcGFyc2UgIiQzIikKKwlmaQorZWxzZQorCXNvdXJjZT0kezItZGVmYXVsdH0KK2ZpCit0ZXN0ICIkR0lUX0VESVRPUiIgPSA6ICYmIHNvdXJjZT0iJHNvdXJjZSAobm8gZWRpdG9yKSIKKworaWYgdGVzdCAkcmViYXNpbmcgPSAxCit0aGVuCisJZWNobyAiJHNvdXJjZSAkKGdldF9sYXN0X2NtZCkiID4iJDEiCitlbHNlCisJc2VkIC1lICIxcy8uKi8kc291cmNlLyIgIiQxIiA+bXNnLnRtcAorCW12IG1zZy50bXAgIiQxIgorZmkKK2V4aXQgMAorRU9GCitjaG1vZCAreCAiJEhPT0siCisKK2VjaG8gZHVtbXkgdGVtcGxhdGUgPiAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvdGVtcGxhdGUiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLW0pJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibW9yZSIgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSAibWVzc2FnZSAobm8gZWRpdG9yKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1tIGVkaXRvciknICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtZSAtbSAibW9yZSBtb3JlIiAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMpIiA9IG1lc3NhZ2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC10KScgJworCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLXQgIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL3RlbXBsYXRlIiAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMpIiA9IHRlbXBsYXRlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtRiknICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoZWNobyBtb3JlIHwgZ2l0IGNvbW1pdCAtRiAtKSAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMpIiA9ICJtZXNzYWdlIChubyBlZGl0b3IpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLUYgZWRpdG9yKScgJworCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCShlY2hvIG1vcmUgbW9yZSB8IEdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1lIC1GIC0pICYmCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcykiID0gbWVzc2FnZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLUMpJyAnCisKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1DICRoZWFkICYmCisJdGVzdCAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcykiID0gIiRoZWFkIChubyBlZGl0b3IpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSBkZWZhdWx0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtLWFtZW5kKScgJworCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1hbWVuZCAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMpIiA9ICIkaGVhZCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1jKScgJworCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLWMgJGhlYWQgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSAiJGhlYWQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rIChtZXJnZSknICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgb3RoZXIgSEVBREB7MX0gJiYKKwllY2hvICJtb3JlIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBvdGhlciAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMpIiA9ICJtZXJnZSAobm8gZWRpdG9yKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rIGFuZCBlZGl0b3IgKG1lcmdlKScgJworCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtQiBvdGhlciBIRUFEQHsxfSAmJgorCWVjaG8gIm1vcmUiID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCWVudiBHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IG1lcmdlIC0tbm8tZmYgLWUgb3RoZXIgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSAibWVyZ2UiCisnCisKK3Rlc3RfcmViYXNlICgpIHsKKwlleHBlY3Q9JDEgJiYKKwltb2RlPSQyICYmCisJdGVzdF9leHBlY3RfJGV4cGVjdCBDX0xPQ0FMRV9PVVRQVVQgIndpdGggaG9vayAocmViYXNlICR7bW9kZTotLWl9KSIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgIlwKKwkJCWdpdCByZWJhc2UgLS1hYm9ydAorCQkJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlcgorCQkJZ2l0IGJyYW5jaCAtRCB0bXAiICYmCisJCWdpdCBjaGVja291dCAtYiB0bXAgcmViYXNlLW1lICYmCisJCUdJVF9TRVFVRU5DRV9FRElUT1I9ImNwIHJlYmFzZS10b2RvIiAmJgorCQlHSVRfRURJVE9SPSJcIiRGQUtFX0VESVRPUlwiIiAmJgorCQkoCisJCQlleHBvcnQgR0lUX1NFUVVFTkNFX0VESVRPUiBHSVRfRURJVE9SICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pICRtb2RlIGIgJiYKKwkJCWVjaG8geCA+YSAmJgorCQkJZ2l0IGFkZCBhICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJCWVjaG8geCA+YiAmJgorCQkJZ2l0IGFkZCBiICYmCisJCQlnaXQgY29tbWl0ICYmCisJCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJCWVjaG8geSA+YSAmJgorCQkJZ2l0IGFkZCBhICYmCisJCQlnaXQgY29tbWl0ICYmCisJCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJCWVjaG8geSA+YiAmJgorCQkJZ2l0IGFkZCBiICYmCisJCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkJKSAmJgorCQlnaXQgbG9nIC0tcHJldHR5PSVzIC1nIC1uMTggSEVBREB7MX0gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZL3Q3NTA1L2V4cGVjdGVkLXJlYmFzZSR7bW9kZTotLWl9IiBhY3R1YWwKKwknCit9CisKK3Rlc3RfcmViYXNlIHN1Y2Nlc3MKK3Rlc3RfaGF2ZV9wcmVyZXEgIVJFQkFTRV9QIHx8IHRlc3RfcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rIChjaGVycnktcGljayknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1CIG90aGVyIGIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgcmViYXNlLTEgJiYKKwl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzKSIgPSAibWVzc2FnZSAobm8gZWRpdG9yKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rIGFuZCBlZGl0b3IgKGNoZXJyeS1waWNrKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgb3RoZXIgYiAmJgorCWdpdCBjaGVycnktcGljayAtZSByZWJhc2UtMSAmJgorCXRlc3QgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMpIiA9IG1lcmdlCisnCisKK2NhdCA+ICIkSE9PSyIgPDwnRU9GJworIyEvYmluL3NoCitleGl0IDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGZhaWxpbmcgaG9vaycgJworCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgbWFzdGVyIiAmJgorCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtYyAkaGVhZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rICgtLW5vLXZlcmlmeSknICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwloZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkgLWMgJGhlYWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGZhaWxpbmcgaG9vayAobWVyZ2UpJyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1CIG90aGVyIEhFQURAezF9ICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXJtIC1mICIkSE9PSyIgJiYKKwlnaXQgY29tbWl0IC1tIG90aGVyICYmCisJd3JpdGVfc2NyaXB0ICIkSE9PSyIgPDwtRU9GICYmCisJZXhpdCAxCisJRU9GCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1mZiBvdGhlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICd3aXRoIGZhaWxpbmcgaG9vayAoY2hlcnJ5LXBpY2spJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtQiBvdGhlciBiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHJlYmFzZS0xIDI+YWN0dWFsICYmCisJdGVzdCAkKGdyZXAgLWMgcHJlcGFyZS1jb21taXQtbXNnIGFjdHVhbCkgPSAxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwNS9leHBlY3RlZC1yZWJhc2UtaSBiL3QvdDc1MDUvZXhwZWN0ZWQtcmViYXNlLWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiYWRhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDUvZXhwZWN0ZWQtcmViYXNlLWkKQEAgLTAsMCArMSwxOCBAQAorbWVzc2FnZSBbZWRpdCByZWJhc2UtMTNdCittZXNzYWdlIChubyBlZGl0b3IpIFtlZGl0IHJlYmFzZS0xM10KK21lc3NhZ2UgW3NxdWFzaCByZWJhc2UtMTJdCittZXNzYWdlIChubyBlZGl0b3IpIFtzcXVhc2ggcmViYXNlLTExXQorZGVmYXVsdCBbZWRpdCByZWJhc2UtMTBdCittZXNzYWdlIChubyBlZGl0b3IpIFtlZGl0IHJlYmFzZS0xMF0KK21lc3NhZ2UgW2ZpeHVwIHJlYmFzZS05XQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZml4dXAgcmViYXNlLThdCittZXNzYWdlIChubyBlZGl0b3IpIFtzcXVhc2ggcmViYXNlLTddCitIRUFEIFtyZXdvcmQgcmViYXNlLTZdCittZXNzYWdlIChubyBlZGl0b3IpIFtyZXdvcmQgcmViYXNlLTZdCittZXNzYWdlIFtzcXVhc2ggcmViYXNlLTVdCittZXNzYWdlIChubyBlZGl0b3IpIFtmaXh1cCByZWJhc2UtNF0KK21lc3NhZ2UgKG5vIGVkaXRvcikgW3BpY2sgcmViYXNlLTNdCittZXNzYWdlIChubyBlZGl0b3IpIFtmaXh1cCByZWJhc2UtMl0KK21lc3NhZ2UgKG5vIGVkaXRvcikgW2ZpeHVwIHJlYmFzZS0xXQorbWVyZ2UgW3BpY2sgcmViYXNlLWJdCittZXNzYWdlIFtwaWNrIHJlYmFzZS1hXQpkaWZmIC0tZ2l0IGEvdC90NzUwNS9leHBlY3RlZC1yZWJhc2UtcCBiL3QvdDc1MDUvZXhwZWN0ZWQtcmViYXNlLXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiYWRhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDUvZXhwZWN0ZWQtcmViYXNlLXAKQEAgLTAsMCArMSwxOCBAQAorbWVzc2FnZSBbZWRpdCByZWJhc2UtMTNdCittZXNzYWdlIChubyBlZGl0b3IpIFtlZGl0IHJlYmFzZS0xM10KK21lc3NhZ2UgW3NxdWFzaCByZWJhc2UtMTJdCittZXNzYWdlIChubyBlZGl0b3IpIFtzcXVhc2ggcmViYXNlLTExXQorZGVmYXVsdCBbZWRpdCByZWJhc2UtMTBdCittZXNzYWdlIChubyBlZGl0b3IpIFtlZGl0IHJlYmFzZS0xMF0KK21lc3NhZ2UgW2ZpeHVwIHJlYmFzZS05XQorbWVzc2FnZSAobm8gZWRpdG9yKSBbZml4dXAgcmViYXNlLThdCittZXNzYWdlIChubyBlZGl0b3IpIFtzcXVhc2ggcmViYXNlLTddCitIRUFEIFtyZXdvcmQgcmViYXNlLTZdCittZXNzYWdlIChubyBlZGl0b3IpIFtyZXdvcmQgcmViYXNlLTZdCittZXNzYWdlIFtzcXVhc2ggcmViYXNlLTVdCittZXNzYWdlIChubyBlZGl0b3IpIFtmaXh1cCByZWJhc2UtNF0KK21lc3NhZ2UgKG5vIGVkaXRvcikgW3BpY2sgcmViYXNlLTNdCittZXNzYWdlIChubyBlZGl0b3IpIFtmaXh1cCByZWJhc2UtMl0KK21lc3NhZ2UgKG5vIGVkaXRvcikgW2ZpeHVwIHJlYmFzZS0xXQorbWVyZ2UgW3BpY2sgcmViYXNlLWJdCittZXNzYWdlIFtwaWNrIHJlYmFzZS1hXQpkaWZmIC0tZ2l0IGEvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoIGIvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4NjI5YTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA2LXN0YXR1cy1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw0MDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RhdHVzIGZvciBzdWJtb2R1bGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2NyZWF0ZV9yZXBvX3dpdGhfY29tbWl0ICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkMSIgJiYKKwkoCisJCWNkICIkMSIgJiYKKwkJOiA+YmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIiBBZGQgYmFyIiAmJgorCQk6ID5mb28gJiYKKwkJZ2l0IGFkZCBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiIEFkZCBmb28iCisJKQorfQorCitzYW5pdGl6ZV9vdXRwdXQgKCkgeworCXNlZCAtZSAicy8kT0lEX1JFR0VYL0hBU0gvIiAtZSAicy8kT0lEX1JFR0VYL0hBU0gvIiBvdXRwdXQgPm91dHB1dDIgJiYKKwltdiBvdXRwdXQyIG91dHB1dAorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jcmVhdGVfcmVwb193aXRoX2NvbW1pdCBzdWIgJiYKKwllY2hvIG91dHB1dCA+IC5naXRpZ25vcmUgJiYKKwlnaXQgYWRkIHN1YiAuZ2l0aWdub3JlICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHN1Ym1vZHVsZSBzdWIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBjbGVhbicgJworCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdGhpbmcgdG8gY29tbWl0IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tZHJ5LXJ1biAtYSBjbGVhbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1kcnktcnVuIC1hID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3RoaW5nIHRvIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNoYW5nZWQiID5zdWIvZm9vICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIChtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNoYW5nZWQiID5zdWIvZm9vICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gc3VibW9kdWxlIChzaG9ydCknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQpICYmCisJZWNobyAiY2hhbmdlZCIgPnN1Yi9mb28gJiYKKwlnaXQgc3RhdHVzIC0tc2hvcnQgPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBtIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBmaWxlIGluIHN1Ym1vZHVsZScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIChtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBzdWJtb2R1bGUgKHNob3J0KScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZ2l0IHN0YXR1cyAtLXNob3J0ID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgbSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNvbnRlbnQiID5zdWIvbmV3LWZpbGUgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKHVudHJhY2tlZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdW5vIHdpdGggdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJZ2l0IHN0YXR1cyAtdW5vID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJebm90aGluZyB0byBjb21taXQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlIChzaG9ydCknICcKKwlnaXQgc3RhdHVzIC0tc2hvcnQgPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSA/IHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBhbmQgdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwllY2hvICJjb250ZW50IiA+c3ViL25ldy1maWxlICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIChtb2RpZmllZCBjb250ZW50LCB1bnRyYWNrZWQgY29udGVudCkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBhbmQgdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwllY2hvICJjb250ZW50IiA+c3ViL25ldy1maWxlICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCXJtIHN1Yi9uZXctZmlsZSAmJgorCShjZCBzdWIgJiYgZWNobyAibmV4dCBjaGFuZ2UiID5mb28gJiYgZ2l0IGNvbW1pdCAtbSAibmV4dCBjaGFuZ2UiIGZvbykgJiYKKwllY2hvICJjaGFuZ2VkIiA+c3ViL2ZvbyAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIG1vZGlmaWVkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggbW9kaWZpZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQpICYmCisJZWNobyAiY2hhbmdlZCIgPnN1Yi9mb28gJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUnICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIG1vZGlmaWVkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUnICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQpICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIHVudHJhY2tlZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHVudHJhY2tlZCBmaWxlIGluIG1vZGlmaWVkIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBhbmQgdW50cmFja2VkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwllY2hvICJjb250ZW50IiA+c3ViL25ldy1maWxlICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIChuZXcgY29tbWl0cywgbW9kaWZpZWQgY29udGVudCwgdW50cmFja2VkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgYW5kIHVudHJhY2tlZCBmaWxlIGluIG1vZGlmaWVkIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAuZ2l0IGZpbGUgZm9yIHN1YicgJworCShjZCBzdWIgJiYKKwkgcm0gLWYgbmV3LWZpbGUgJiYKKwkgUkVBTD0iJChwd2QpLy4uLy5yZWFsIiAmJgorCSBtdiAuZ2l0ICIkUkVBTCIgJiYKKwkgZWNobyAiZ2l0ZGlyOiAkUkVBTCIgPi5naXQpICYmCisJIGVjaG8gLnJlYWwgPj4uZ2l0aWdub3JlICYmCisJIGdpdCBjb21taXQgLW0gImFkZGVkIC5yZWFsIHRvIC5naXRpZ25vcmUiIC5naXRpZ25vcmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgd2l0aCAuZ2l0IGZpbGUnICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIG1vZGlmaWVkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYSBsb3Qgb2YgdW50cmFja2VkIGZpbGVzIGluIHRoZSBzdWJtb2R1bGUnICcKKwkoCisJCWNkIHN1YiAmJgorCQlpPTAgJiYKKwkJd2hpbGUgdGVzdCAkaSAtbHQgMTAyNAorCQlkbworCQkJPnNvbWUtZmlsZS0kaSAmJgorCQkJaT0kKCggJGkgKyAxICkpIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gc3ViIDI+ZXJyLmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIuYWN0dWFsICYmCisJcm0gZXJyLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBzdWJtb2R1bGUgY29udGVudHMnICcKKwlybSAtcmYgc3ViICYmCisJbWtkaXIgc3ViCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBjbGVhbiAoZW1wdHkgc3VibW9kdWxlIGRpciknICcKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3RoaW5nIHRvIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtYSBjbGVhbiAoZW1wdHkgc3VibW9kdWxlIGRpciknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biAtYSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAorJworCitjYXQgPnN0YXR1c19leHBlY3QgPDxcRU9GCitBQSAuZ2l0bW9kdWxlcworQSAgc3ViMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1lcmdlIGNvbmZsaWN0IGluIC5naXRtb2R1bGVzJyAnCisJZ2l0IGNsb25lIC4gc3VwZXIgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvX3dpdGhfY29tbWl0IHN1YjEgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvX3dpdGhfY29tbWl0IHN1YjIgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCXByZXY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBjaGVja291dCAtYiBhZGRfc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWIxICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBzdWIxIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYWRkX3N1YjIgJHByZXYgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViMiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3ViMiIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlX2NvbmZsaWN0X2dpdG1vZHVsZXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGFkZF9zdWIxICYmCisJCWdpdCBzdGF0dXMgLXMgPi4uL3N0YXR1c19hY3R1YWwgMj4mMQorCSkgJiYKKwl0ZXN0X2NtcCBzdGF0dXNfYWN0dWFsIHN0YXR1c19leHBlY3QKKycKKworc2hhMV9tZXJnZV9zdWIxPSQoY2Qgc3ViMSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzaGExX21lcmdlX3N1YjI9JChjZCBzdWIyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3Nob3J0X3NoYTFfbWVyZ2Vfc3ViMT0kKGNkIHN1YjEgJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpCitzaG9ydF9zaGExX21lcmdlX3N1YjI9JChjZCBzdWIyICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorY2F0ID5kaWZmX2V4cGVjdCA8PFxFT0YKK2RpZmYgLS1jYyAuZ2l0bW9kdWxlcworaW5kZXggYmFkYWE0Yyw0NGY5OTlhLi4wMDAwMDAwCistLS0gYS8uZ2l0bW9kdWxlcworKysrIGIvLmdpdG1vZHVsZXMKK0BAQCAtMSwzIC0xLDMgKzEsOSBAQEAKKysrPDw8PDw8PCBIRUFECisgK1tzdWJtb2R1bGUgInN1YjIiXQorICsJcGF0aCA9IHN1YjIKKyArCXVybCA9IC4uL3N1YjIKKysrPT09PT09PQorKyBbc3VibW9kdWxlICJzdWIxIl0KKysgCXBhdGggPSBzdWIxCisrIAl1cmwgPSAuLi9zdWIxCisrKz4+Pj4+Pj4gYWRkX3N1YjEKK0VPRgorCitjYXQgPmRpZmZfc3VibW9kdWxlX2V4cGVjdCA8PFxFT0YKK2RpZmYgLS1jYyAuZ2l0bW9kdWxlcworaW5kZXggYmFkYWE0Yyw0NGY5OTlhLi4wMDAwMDAwCistLS0gYS8uZ2l0bW9kdWxlcworKysrIGIvLmdpdG1vZHVsZXMKK0BAQCAtMSwzIC0xLDMgKzEsOSBAQEAKKysrPDw8PDw8PCBIRUFECisgK1tzdWJtb2R1bGUgInN1YjIiXQorICsJcGF0aCA9IHN1YjIKKyArCXVybCA9IC4uL3N1YjIKKysrPT09PT09PQorKyBbc3VibW9kdWxlICJzdWIxIl0KKysgCXBhdGggPSBzdWIxCisrIAl1cmwgPSAuLi9zdWIxCisrKz4+Pj4+Pj4gYWRkX3N1YjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHdpdGggbWVyZ2UgY29uZmxpY3QgaW4gLmdpdG1vZHVsZXMnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBkaWZmID4uLi9kaWZmX2FjdHVhbCAyPiYxCisJKSAmJgorCXRlc3RfY21wIGRpZmZfZXhwZWN0IGRpZmZfYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1zdWJtb2R1bGUgd2l0aCBtZXJnZSBjb25mbGljdCBpbiAuZ2l0bW9kdWxlcycgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IGRpZmYgLS1zdWJtb2R1bGUgPi4uL2RpZmZfc3VibW9kdWxlX2FjdHVhbCAyPiYxCisJKSAmJgorCXRlc3RfY21wIGRpZmZfc3VibW9kdWxlX2V4cGVjdCBkaWZmX3N1Ym1vZHVsZV9hY3R1YWwKKycKKworIyBXZSdsbCBzZXR1cCBkaWZmZXJlbnQgY2FzZXMgZm9yIGZ1cnRoZXIgdGVzdGluZzoKKyMgc3ViMSB3aWxsIGNvbnRhaW4gYSBuZXN0ZWQgc3VibW9kdWxlLAorIyBzdWIyIHdpbGwgaGF2ZSBhbiB1bnRyYWNrZWQgZmlsZQorIyBzdWIzIHdpbGwgaGF2ZSBhbiB1bnRyYWNrZWQgcmVwb3NpdG9yeQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VwZXJwcm9qZWN0IHdpdGggdW50cmFja2VkIGZpbGUgaW4gbmVzdGVkIHN1Ym1vZHVsZScgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IGNsZWFuIC1kZnggJiYKKwkJZ2l0IHJtIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gInJlbW92ZSAuZ2l0bW9kdWxlcyIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLWYgLi9zdWIxICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC1mIC4vc3ViMiAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtZiAuL3N1YjEgc3ViMyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJtZXNzeSBtZXJnZSBpbiBzdXBlcnByb2plY3QiICYmCisJCSgKKwkJCWNkIHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1YjIgJiYKKwkJCWdpdCBjb21taXQgLWEgLW0gImFkZCBzdWIyIHRvIHN1YjEiCisJCSkgJiYKKwkJZ2l0IGFkZCBzdWIxICYmCisJCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZSBzdWIxIHRvIGNvbnRhaW4gbmVzdGVkIHN1YiIKKwkpICYmCisJZWNobyBjb250ZW50ID5zdXBlci9zdWIxL3N1YjIvZmlsZSAmJgorCWVjaG8gY29udGVudCA+c3VwZXIvc3ViMi9maWxlICYmCisJZ2l0IC1DIHN1cGVyL3N1YjMgY2xvbmUgLi4vLi4vc3ViMiB1bnRyYWNrZWRfcmVwb3NpdG9yeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBuZXN0ZWQgc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJZ2l0IC1DIHN1cGVyIHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViMQorCSBNIHN1YjIKKwkgTSBzdWIzCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHVudHJhY2tlZCBmaWxlIGluIG5lc3RlZCBzdWJtb2R1bGUgKHBvcmNlbGFpbj0yKScgJworCWdpdCAtQyBzdXBlciBzdGF0dXMgLS1wb3JjZWxhaW49MiA+b3V0cHV0ICYmCisJc2FuaXRpemVfb3V0cHV0IG91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCTEgLk0gUy4uVSAxNjAwMDAgMTYwMDAwIDE2MDAwMCBIQVNIIEhBU0ggc3ViMQorCTEgLk0gUy4uVSAxNjAwMDAgMTYwMDAwIDE2MDAwMCBIQVNIIEhBU0ggc3ViMgorCTEgLk0gUy4uVSAxNjAwMDAgMTYwMDAwIDE2MDAwMCBIQVNIIEhBU0ggc3ViMworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBuZXN0ZWQgc3VibW9kdWxlIChzaG9ydCknICcKKwlnaXQgLUMgc3VwZXIgc3RhdHVzIC0tc2hvcnQgPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSA/IHN1YjEKKwkgPyBzdWIyCisJID8gc3ViMworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdXBlcnByb2plY3Qgd2l0aCBtb2RpZmllZCBmaWxlIGluIG5lc3RlZCBzdWJtb2R1bGUnICcKKwlnaXQgLUMgc3VwZXIvc3ViMS9zdWIyIGFkZCBmaWxlICYmCisJZ2l0IC1DIHN1cGVyL3N1YjIgYWRkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBuZXN0ZWQgc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJZ2l0IC1DIHN1cGVyIHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViMQorCSBNIHN1YjIKKwkgTSBzdWIzCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbmVzdGVkIHN1Ym1vZHVsZSAocG9yY2VsYWluPTIpJyAnCisJZ2l0IC1DIHN1cGVyIHN0YXR1cyAtLXBvcmNlbGFpbj0yID5vdXRwdXQgJiYKKwlzYW5pdGl6ZV9vdXRwdXQgb3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJMSAuTSBTLk0uIDE2MDAwMCAxNjAwMDAgMTYwMDAwIEhBU0ggSEFTSCBzdWIxCisJMSAuTSBTLk0uIDE2MDAwMCAxNjAwMDAgMTYwMDAwIEhBU0ggSEFTSCBzdWIyCisJMSAuTSBTLi5VIDE2MDAwMCAxNjAwMDAgMTYwMDAwIEhBU0ggSEFTSCBzdWIzCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gbmVzdGVkIHN1Ym1vZHVsZSAoc2hvcnQpJyAnCisJZ2l0IC1DIHN1cGVyIHN0YXR1cyAtLXNob3J0ID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgbSBzdWIxCisJIG0gc3ViMgorCSA/IHN1YjMKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA3LWNvbW1pdC12ZXJib3NlLnNoIGIvdC90NzUwNy1jb21taXQtdmVyYm9zZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZDI2NTNkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwNy1jb21taXQtdmVyYm9zZS5zaApAQCAtMCwwICsxLDE1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ZlcmJvc2UgY29tbWl0IHRlbXBsYXRlJworLiAuL3Rlc3QtbGliLnNoCisKK3dyaXRlX3NjcmlwdCAiY2hlY2stZm9yLWRpZmYiIDw8XEVPRiAmJgorZ3JlcCAnXmRpZmYgLS1naXQnICIkMSIgPm91dAorZXhpdCAwCitFT0YKK3Rlc3Rfc2V0X2VkaXRvciAiJFBXRC9jaGVjay1mb3ItZGlmZiIKKworY2F0ID5tZXNzYWdlIDw8J0VPRicKK3N1YmplY3QKKworYm9keQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtRiBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgY29tbWl0IHNob3dzIHZlcmJvc2UgZGlmZicgJworCWdpdCBjb21taXQgLS1hbWVuZCAtdiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY29uZCBjb21taXQnICcKKwllY2hvIGNvbnRlbnQgbW9kaWZpZWQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIG1lc3NhZ2UKKycKKworY2hlY2tfbWVzc2FnZSgpIHsKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcyVuJW4lYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgIiQxIiBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyYm9zZSBkaWZmIGlzIHN0cmlwcGVkIG91dCcgJworCWdpdCBjb21taXQgLS1hbWVuZCAtdiAmJgorCWNoZWNrX21lc3NhZ2UgbWVzc2FnZSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UgZGlmZiBpcyBzdHJpcHBlZCBvdXQgKG1uZW1vbmljcHJlZml4KScgJworCWdpdCBjb25maWcgZGlmZi5tbmVtb25pY3ByZWZpeCB0cnVlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC12ICYmCisJY2hlY2tfbWVzc2FnZSBtZXNzYWdlICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQKKycKKworY2F0ID5kaWZmIDw8J0VPRicKK1RoaXMgaXMgYW4gZXhhbXBsZSBjb21taXQgbWVzc2FnZSB0aGF0IGNvbnRhaW5zIGEgZGlmZi4KKworZGlmZiAtLWdpdCBjL2ZpbGUgaS9maWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjk1YzExZAorLS0tIC9kZXYvbnVsbAorKysrIGkvZmlsZQorQEAgLTAsMCArMSBAQAorK3RoaXMgaXMgc29tZSBjb250ZW50CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBpbiBtZXNzYWdlIGlzIHJldGFpbmVkIHdpdGhvdXQgLXYnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLUYgZGlmZiAmJgorCWNoZWNrX21lc3NhZ2UgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGluIG1lc3NhZ2UgaXMgcmV0YWluZWQgd2l0aCAtdicgJworCWdpdCBjb21taXQgLS1hbWVuZCAtRiBkaWZmIC12ICYmCisJY2hlY2tfbWVzc2FnZSBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBsb2cgaXMgc3RyaXBwZWQgb3V0IHRvbyB3aXRoIC12JyAnCisJZ2l0IGNvbmZpZyBkaWZmLnN1Ym1vZHVsZSBsb2cgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLy4gc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViIGFkZGVkIiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWVjaG8gIm1vcmUiID4+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJzdWJtb2R1bGUgY29tbWl0IgorCSkgJiYKKwkoCisJCUdJVF9FRElUT1I9Y2F0ICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWEgLXYgMj5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIGRpZmYgaXMgc3RyaXBwZWQgb3V0IHdpdGggc2V0IGNvcmUuY29tbWVudENoYXInICcKKwkoCisJCUdJVF9FRElUT1I9Y2F0ICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmNvbW1lbnRjaGFyPSI7IiBjb21taXQgLWEgLXYgMj5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZG9lcyBub3QgdmVyYm9zZSB3aXRob3V0IC0tdmVyYm9zZScgJworCWdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCSEgZ3JlcCAiXmRpZmYgLS1naXQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtdiAtdicgJworCWVjaG8gZGlydHkgPmZpbGUKKycKKworZm9yIGkgaW4gdHJ1ZSAxCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdC52ZXJib3NlPSRpIGFuZCAtLXZlcmJvc2Ugb21pdHRlZCIgIgorCQlnaXQgLWMgY29tbWl0LnZlcmJvc2U9JGkgY29tbWl0IC0tYW1lbmQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQKKwkiCitkb25lCisKK2ZvciBpIGluIGZhbHNlIC0yIC0xIDAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0LnZlcmJvc2U9JGkgYW5kIC0tdmVyYm9zZSBvbWl0dGVkIiAiCisJCWdpdCAtYyBjb21taXQudmVyYm9zZT0kaSBjb21taXQgLS1hbWVuZCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIG91dAorCSIKK2RvbmUKKworZm9yIGkgaW4gMiAzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdC52ZXJib3NlPSRpIGFuZCAtLXZlcmJvc2Ugb21pdHRlZCIgIgorCQlnaXQgLWMgY29tbWl0LnZlcmJvc2U9JGkgY29tbWl0IC0tYW1lbmQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQKKwkiCitkb25lCisKK2ZvciBpIGluIHRydWUgZmFsc2UgLTIgLTEgMCAxIDIgMworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQudmVyYm9zZT0kaSBhbmQgLS12ZXJib3NlIiAiCisJCWdpdCAtYyBjb21taXQudmVyYm9zZT0kaSBjb21taXQgLS1hbWVuZCAtLXZlcmJvc2UgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBvdXQKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQudmVyYm9zZT0kaSBhbmQgLS1uby12ZXJib3NlIiAiCisJCWdpdCAtYyBjb21taXQudmVyYm9zZT0kaSBjb21taXQgLS1hbWVuZCAtLW5vLXZlcmJvc2UgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBvdXQKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQudmVyYm9zZT0kaSBhbmQgLXYgLXYiICIKKwkJZ2l0IC1jIGNvbW1pdC52ZXJib3NlPSRpIGNvbW1pdCAtLWFtZW5kIC12IC12ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgb3V0CisJIgorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzdGF0dXMgaWdub3JlcyBjb21taXQudmVyYm9zZT10cnVlIiAnCisJZ2l0IC1jIGNvbW1pdC52ZXJib3NlPXRydWUgc3RhdHVzID5hY3R1YWwgJiYKKwkhIGdyZXAgIl5kaWZmIC0tZ2l0IGFjdHVhbCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA4LXN0YXR1cy5zaCBiL3QvdDc1MDgtc3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4MmNlMzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA4LXN0YXR1cy5zaApAQCAtMCwwICsxLDE2MjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RhdHVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtaCBpbiBicm9rZW4gcmVwb3NpdG9yeScgJworCWdpdCBjb25maWcgLS1nbG9iYWwgYWR2aWNlLnN0YXR1c3VvcHRpb24gZmFsc2UgJiYKKwlta2RpciBicm9rZW4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBicm9rZW4iICYmCisJKAorCQljZCBicm9rZW4gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAiW3N0YXR1c10gc2hvd3VudHJhY2tlZGZpbGVzID0gQ09SUlVQVCIgPj4uZ2l0L2NvbmZpZyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgc3RhdHVzIC1oID51c2FnZSAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlIiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC1oIGluIGJyb2tlbiByZXBvc2l0b3J5JyAnCisJbWtkaXIgYnJva2VuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgYnJva2VuIiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIltzdGF0dXNdIHNob3d1bnRyYWNrZWRmaWxlcyA9IENPUlJVUFQiID4+LmdpdC9jb25maWcgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGNvbW1pdCAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB1cHN0cmVhbSBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgdXBzdHJlYW0gJiYKKwl0ZXN0X2NvbW1pdCB1cHN0cmVhbTEgJiYKKwl0ZXN0X2NvbW1pdCB1cHN0cmVhbTIgJiYKKwkjIGxlYXZlIHRoZSBmaXJzdCBjb21taXQgb24gbWFzdGVyIGFzIHJvb3QgYmVjYXVzZSBzZXZlcmFsCisJIyB0ZXN0cyBkZXBlbmQgb24gdGhpcyBjYXNlOyBmb3Igb3VyIHVwc3RyZWFtIHdlIG9ubHkKKwkjIGNhcmUgYWJvdXQgY29tbWl0IGNvdW50cyBhbnl3YXksIHNvIGEgdG90YWxseSBkaXZlcmdlbnQKKwkjIGhpc3RvcnkgaXMgT0sKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJOiA+dHJhY2tlZCAmJgorCTogPm1vZGlmaWVkICYmCisJbWtkaXIgZGlyMSAmJgorCTogPmRpcjEvdHJhY2tlZCAmJgorCTogPmRpcjEvbW9kaWZpZWQgJiYKKwlta2RpciBkaXIyICYmCisJOiA+ZGlyMS90cmFja2VkICYmCisJOiA+ZGlyMS9tb2RpZmllZCAmJgorCWdpdCBhZGQgLiAmJgorCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwk6ID51bnRyYWNrZWQgJiYKKwk6ID5kaXIxL3VudHJhY2tlZCAmJgorCTogPmRpcjIvdW50cmFja2VkICYmCisJZWNobyAxID5kaXIxL21vZGlmaWVkICYmCisJZWNobyAyID5kaXIyL21vZGlmaWVkICYmCisJZWNobyAzID5kaXIyL2FkZGVkICYmCisJZ2l0IGFkZCBkaXIyL2FkZGVkICYmCisKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPXVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoMSknICcKKwl0ZXN0X2kxOG5ncmVwICJ1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+XC5cLlwuXCIgdG8gdW5zdGFnZSIgb3V0cHV0CisnCisKK3N0cmlwX2NvbW1lbnRzICgpIHsKKwl0YWI9JwknCisJc2VkICJzL15cIyAvLzsgcy9eXCMkLy87IHMvXiMkdGFiLyR0YWIvIiA8IiQxIiA+IiQxIi50bXAgJiYKKwlybSAiJDEiICYmIG12ICIkMSIudG1wICIkMSIKK30KKworY2F0ID4uZ2l0aWdub3JlIDw8XEVPRgorLmdpdGlnbm9yZQorZXhwZWN0Kgorb3V0cHV0KgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLWNvbHVtbicgJworCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgorIyBPbiBicmFuY2ggbWFzdGVyCisjIFlvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCisjIGFuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorIyAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorIworIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIwlkaXIxL3VudHJhY2tlZCBkaXIyL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkICB1bnRyYWNrZWQKKyMKK0VPRgorCUNPTFVNTlM9NTAgZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD10cnVlIHN0YXR1cyAtLWNvbHVtbj0iY29sdW1uIGRlbnNlIiA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC0tY29sdW1uIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD1mYWxzZScgJworCXN0cmlwX2NvbW1lbnRzIGV4cGVjdCAmJgorCUNPTFVNTlM9NDkgZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD1mYWxzZSBzdGF0dXMgLS1jb2x1bW49ImNvbHVtbiBkZW5zZSIgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIFlvdXIgYnJhbmNoIGFuZCAndXBzdHJlYW0nIGhhdmUgZGl2ZXJnZWQsCisjIGFuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorIyAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorIworIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIwlkaXIxL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkCisjCWRpcjIvdW50cmFja2VkCisjCXVudHJhY2tlZAorIworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD10cnVlJyAnCisJZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD10cnVlIHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4PWZhbHNlJyAnCisJc3RyaXBfY29tbWVudHMgZXhwZWN0ICYmCisJZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD1mYWxzZSBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdicgJworCShjYXQgZXhwZWN0ICYmIGdpdCBkaWZmIC0tY2FjaGVkKSA+ZXhwZWN0LXdpdGgtdiAmJgorCWdpdCBzdGF0dXMgLXYgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qtd2l0aC12IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXYgLXYnICcKKwkoY2F0IGV4cGVjdCAmJgorCSBlY2hvICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiICYmCisJIGdpdCAtYyBkaWZmLm1uZW1vbmljcHJlZml4PXRydWUgZGlmZiAtLWNhY2hlZCAmJgorCSBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgJiYKKwkgZWNobyAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IiAmJgorCSBnaXQgLWMgZGlmZi5tbmVtb25pY3ByZWZpeD10cnVlIGRpZmYpID5leHBlY3Qtd2l0aC12ICYmCisJZ2l0IHN0YXR1cyAtdiAtdiA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC13aXRoLXYgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZha2UgZWRpdG9yJyAnCisJY2F0ID4uZ2l0L2VkaXRvciA8PC1cRU9GICYmCisJIyEgL2Jpbi9zaAorCWNwICIkMSIgb3V0cHV0CitFT0YKKwljaG1vZCA3NTUgLmdpdC9lZGl0b3IKKycKKworY29tbWl0X3RlbXBsYXRlX2NvbW1lbnRlZCAoKSB7CisJKAorCQlFRElUT1I9LmdpdC9lZGl0b3IgJiYKKwkJZXhwb3J0IEVESVRPUiAmJgorCQkjIEZhaWxzIGR1ZSB0byBlbXB0eSBtZXNzYWdlCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQKKwkpICYmCisJISBncmVwICdeW14jXScgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBpZ25vcmVzIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD1mYWxzZSBpbiBDT01NSVRfRURJVE1TRycgJworCWNvbW1pdF90ZW1wbGF0ZV9jb21tZW50ZWQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ3Vwc3RyZWFtJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoYWR2aWNlLnN0YXR1c0hpbnRzIGZhbHNlKScgJworCXRlc3RfY29uZmlnIGFkdmljZS5zdGF0dXNIaW50cyBmYWxzZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcycgJworCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGdpdGlnbm9yZScgJworCXsKKwkJZWNobyAiLmdpdGlnbm9yZSIgJiYKKwkJZWNobyAiZXhwZWN0KiIgJiYKKwkJZWNobyAib3V0cHV0IiAmJgorCQllY2hvICJ1bnRyYWNrZWQiCisJfSA+LmdpdGlnbm9yZSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBNIGRpcjEvbW9kaWZpZWQKKwlBICBkaXIyL2FkZGVkCisJPz8gZGlyMi9tb2RpZmllZAorCUVPRgorCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBkaXIxL21vZGlmaWVkCisJQSAgZGlyMi9hZGRlZAorCT8/IGRpcjIvbW9kaWZpZWQKKwkhISAuZ2l0aWdub3JlCisJISEgZGlyMS91bnRyYWNrZWQKKwkhISBkaXIyL3VudHJhY2tlZAorCSEhIGV4cGVjdAorCSEhIGV4cGVjdC13aXRoLXYKKwkhISBvdXRwdXQKKwkhISB1bnRyYWNrZWQKKwlFT0YKKwlnaXQgc3RhdHVzIC1zIC0taWdub3JlZCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJZGlyMi9tb2RpZmllZAorCitJZ25vcmVkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIC1mIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCS5naXRpZ25vcmUKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvdW50cmFja2VkCisJZXhwZWN0CisJZXhwZWN0LXdpdGgtdgorCW91dHB1dAorCXVudHJhY2tlZAorCitFT0YKKwlnaXQgc3RhdHVzIC0taWdub3JlZCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggZ2l0aWdub3JlIChub3RoaW5nIHVudHJhY2tlZCknICcKKwl7CisJCWVjaG8gIi5naXRpZ25vcmUiICYmCisJCWVjaG8gImV4cGVjdCoiICYmCisJCWVjaG8gImRpcjIvbW9kaWZpZWQiICYmCisJCWVjaG8gIm91dHB1dCIgJiYKKwkJZWNobyAidW50cmFja2VkIgorCX0gPi5naXRpZ25vcmUgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBkaXIxL21vZGlmaWVkCisJQSAgZGlyMi9hZGRlZAorCUVPRgorCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgTSBkaXIxL21vZGlmaWVkCisJQSAgZGlyMi9hZGRlZAorCSEhIC5naXRpZ25vcmUKKwkhISBkaXIxL3VudHJhY2tlZAorCSEhIGRpcjIvbW9kaWZpZWQKKwkhISBkaXIyL3VudHJhY2tlZAorCSEhIGV4cGVjdAorCSEhIGV4cGVjdC13aXRoLXYKKwkhISBvdXRwdXQKKwkhISB1bnRyYWNrZWQKKwlFT0YKKwlnaXQgc3RhdHVzIC1zIC0taWdub3JlZCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitJZ25vcmVkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIC1mIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCS5naXRpZ25vcmUKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCWV4cGVjdAorCWV4cGVjdC13aXRoLXYKKwlvdXRwdXQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IHN0YXR1cyAtLWlnbm9yZWQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+LmdpdGlnbm9yZSA8PFxFT0YKKy5naXRpZ25vcmUKK2V4cGVjdCoKK291dHB1dCoKK0VPRgorCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMjIG1hc3Rlci4uLnVwc3RyZWFtIFthaGVhZCAxLCBiZWhpbmQgMl0KKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC1iJyAnCisKKwlnaXQgc3RhdHVzIC1zIC1iID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAteiAtYicgJworCXRyICJcXG4iIFEgPGV4cGVjdCA+ZXhwZWN0LnEgJiYKKwltdiBleHBlY3QucSBleHBlY3QgJiYKKwlnaXQgc3RhdHVzIC1zIC16IC1iID5vdXRwdXQgJiYKKwludWxfdG9fcSA8b3V0cHV0ID5vdXRwdXQucSAmJgorCW12IG91dHB1dC5xIG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpcjMnICcKKwlta2RpciBkaXIzICYmCisJOiA+ZGlyMy91bnRyYWNrZWQxICYmCisJOiA+ZGlyMy91bnRyYWNrZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdW5vJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtdW5vID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgbm8pJyAnCisJdGVzdF9jb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyBubyAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdW5vIChhZHZpY2Uuc3RhdHVzSGludHMgZmFsc2UpJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkCitFT0YKKwl0ZXN0X2NvbmZpZyBhZHZpY2Uuc3RhdHVzSGludHMgZmFsc2UgJiYKKwlnaXQgc3RhdHVzIC11bm8gPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLXVubycgJworCWdpdCBzdGF0dXMgLXMgLXVubyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgbm8pJyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIG5vICYmCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVub3JtYWwnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJZGlyMy8KKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IHN0YXR1cyAtdW5vcm1hbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIG5vcm1hbCknICcKKwl0ZXN0X2NvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIG5vcm1hbCAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IGRpcjMvCis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC11bm9ybWFsJyAnCisJZ2l0IHN0YXR1cyAtcyAtdW5vcm1hbCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgbm9ybWFsKScgJworCWdpdCBjb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyBub3JtYWwgJiYKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdWFsbCcgJworCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMSBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwlkaXIzL3VudHJhY2tlZDEKKwlkaXIzL3VudHJhY2tlZDIKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IHN0YXR1cyAtdWFsbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIGFsbCknICcKKwl0ZXN0X2NvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIGFsbCAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RlYXJkb3duIGRpcjMnICcKKwlybSAtcmYgZGlyMworJworCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC11YWxsJyAnCisJdGVzdF91bmNvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzICYmCisJZ2l0IHN0YXR1cyAtcyAtdWFsbCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIGFsbCknICcKKwl0ZXN0X2NvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIGFsbCAmJgorCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXJtIC1yZiBkaXIzICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCByZWxhdGl2ZSBwYXRocycgJworCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwluZXcgZmlsZTogICAuLi9kaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIG1vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwl1bnRyYWNrZWQKKwkuLi9kaXIyL21vZGlmaWVkCisJLi4vZGlyMi91bnRyYWNrZWQKKwkuLi91bnRyYWNrZWQKKworRU9GCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cykgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gbW9kaWZpZWQKK0EgIC4uL2RpcjIvYWRkZWQKKz8/IHVudHJhY2tlZAorPz8gLi4vZGlyMi9tb2RpZmllZAorPz8gLi4vZGlyMi91bnRyYWNrZWQKKz8/IC4uL3VudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgd2l0aCByZWxhdGl2ZSBwYXRocycgJworCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cyAtcykgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC0tcG9yY2VsYWluIGlnbm9yZXMgcmVsYXRpdmUgcGF0aHMgc2V0dGluZycgJworCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbikgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmlxdWUgY29sb3JzJyAnCisKKwlnaXQgY29uZmlnIHN0YXR1cy5jb2xvci51bnRyYWNrZWQgYmx1ZSAmJgorCWdpdCBjb25maWcgc3RhdHVzLmNvbG9yLmJyYW5jaCBncmVlbiAmJgorCWdpdCBjb25maWcgc3RhdHVzLmNvbG9yLmxvY2FsQnJhbmNoIHllbGxvdyAmJgorCWdpdCBjb25maWcgc3RhdHVzLmNvbG9yLnJlbW90ZUJyYW5jaCBjeWFuCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3N0YXR1cyB3aXRoIGNvbG9yLnVpJyAnCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitPbiBicmFuY2ggPEdSRUVOPm1hc3RlcjxSRVNFVD4KK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJPEdSRUVOPm5ldyBmaWxlOiAgIGRpcjIvYWRkZWQ8UkVTRVQ+CisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCTxSRUQ+bW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZDxSRVNFVD4KKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCTxCTFVFPmRpcjEvdW50cmFja2VkPFJFU0VUPgorCTxCTFVFPmRpcjIvbW9kaWZpZWQ8UkVTRVQ+CisJPEJMVUU+ZGlyMi91bnRyYWNrZWQ8UkVTRVQ+CisJPEJMVUU+dW50cmFja2VkPFJFU0VUPgorCitFT0YKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgc3RhdHVzIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzdGF0dXMgd2l0aCBjb2xvci5zdGF0dXMnICcKKwl0ZXN0X2NvbmZpZyBjb2xvci5zdGF0dXMgYXV0byAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHN0YXR1cyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyA8UkVEPk08UkVTRVQ+IGRpcjEvbW9kaWZpZWQKKzxHUkVFTj5BPFJFU0VUPiAgZGlyMi9hZGRlZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjEvdW50cmFja2VkCis8QkxVRT4/PzxSRVNFVD4gZGlyMi9tb2RpZmllZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjIvdW50cmFja2VkCis8QkxVRT4/PzxSRVNFVD4gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3N0YXR1cyAtcyB3aXRoIGNvbG9yLnVpJyAnCisKKwlnaXQgY29uZmlnIGNvbG9yLnVpIGF1dG8gJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBzdGF0dXMgLXMgfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzdGF0dXMgLXMgd2l0aCBjb2xvci5zdGF0dXMnICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb2xvci51aSAmJgorCWdpdCBjb25maWcgY29sb3Iuc3RhdHVzIGF1dG8gJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBzdGF0dXMgLXMgfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyMgPFlFTExPVz5tYXN0ZXI8UkVTRVQ+Li4uPENZQU4+dXBzdHJlYW08UkVTRVQ+IFthaGVhZCA8WUVMTE9XPjE8UkVTRVQ+LCBiZWhpbmQgPENZQU4+MjxSRVNFVD5dCisgPFJFRD5NPFJFU0VUPiBkaXIxL21vZGlmaWVkCis8R1JFRU4+QTxSRVNFVD4gIGRpcjIvYWRkZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIxL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjIvbW9kaWZpZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIyL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzdGF0dXMgLXMgLWIgd2l0aCBjb2xvci5zdGF0dXMnICcKKworCXRlc3RfdGVybWluYWwgZ2l0IHN0YXR1cyAtcyAtYiB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc3RhdHVzIC0tcG9yY2VsYWluIGlnbm9yZXMgY29sb3IudWknICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb2xvci5zdGF0dXMgJiYKKwlnaXQgY29uZmlnIGNvbG9yLnVpIGF1dG8gJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdzdGF0dXMgLS1wb3JjZWxhaW4gaWdub3JlcyBjb2xvci5zdGF0dXMnICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb2xvci51aSAmJgorCWdpdCBjb25maWcgY29sb3Iuc3RhdHVzIGF1dG8gJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKKyMgcmVjb3ZlciB1bmNvbmRpdGlvbmFsbHkgZnJvbSBjb2xvciB0ZXN0cworZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLnN0YXR1cworZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLnVpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXBvcmNlbGFpbiByZXNwZWN0cyAtYicgJworCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtYiA+b3V0cHV0ICYmCisJeworCQllY2hvICIjIyBtYXN0ZXIuLi51cHN0cmVhbSBbYWhlYWQgMSwgYmVoaW5kIDJdIiAmJgorCQljYXQgZXhwZWN0CisJfSA+dG1wICYmCisJbXYgdG1wIGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGhvdXQgcmVsYXRpdmUgcGF0aHMnICcKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitFT0YKKwl0ZXN0X2NvbmZpZyBzdGF0dXMucmVsYXRpdmVQYXRocyBmYWxzZSAmJgorCShjZCBkaXIxICYmIGdpdCBzdGF0dXMpID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgd2l0aG91dCByZWxhdGl2ZSBwYXRocycgJworCisJdGVzdF9jb25maWcgc3RhdHVzLnJlbGF0aXZlUGF0aHMgZmFsc2UgJiYKKwkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzIC1zKSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RyeS1ydW4gb2YgcGFydGlhbCBjb21taXQgZXhjbHVkaW5nIG5ldyBmaWxlIGluIGluZGV4JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyLworCXVudHJhY2tlZAorCitFT0YKKwlnaXQgY29tbWl0IC0tZHJ5LXJ1biBkaXIxL21vZGlmaWVkID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJEVNUFRZX0JMT0IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCWRpcjEvbW9kaWZpZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHJlZnJlc2hlcyB0aGUgaW5kZXgnICcKKwl0b3VjaCBkaXIyL2FkZGVkICYmCisJZ2l0IHN0YXR1cyAmJgorCWdpdCBkaWZmLWZpbGVzID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeScgJworCXRlc3RfY3JlYXRlX3JlcG8gc20gJiYgKAorCQljZCBzbSAmJgorCQk+Zm9vICYmCisJCWdpdCBhZGQgZm9vICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBmb28iCisJKSAmJgorCWdpdCBhZGQgc20KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisJbmV3IGZpbGU6ICAgc20KKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworIyB3ZSBleHBlY3QgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHRlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1hbGwgZG9lcyBub3Qgc2hvdyBzdWJtb2R1bGUnICcKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKK0EgIHNtCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IHVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgc3VibW9kdWxlIHN1bW1hcnkgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCcgJworCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworIyB3ZSBleHBlY3QgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHRlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtLXVudHJhY2tlZC1maWxlcz1hbGwgZG9lcyBub3Qgc2hvdyBzdWJtb2R1bGUnICcKKwlnaXQgc3RhdHVzIC1zIC0tdW50cmFja2VkLWZpbGVzPWFsbCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitoZWFkPSQoY2Qgc20gJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0PTcgLS12ZXJpZnkgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCW5ldyBmaWxlOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCisqIHNtIDAwMDAwMDAuLi4kaGVhZCAoMSk6CisgID4gQWRkIGZvbworCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IGNvbmZpZyBzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSAxMCAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeSB3aXRoIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD1mYWxzZScgJworCXN0cmlwX2NvbW1lbnRzIGV4cGVjdCAmJgorCWdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2Ugc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgd2l0aCBzdWJtb2R1bGUgc3VtbWFyeSBpZ25vcmVzIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeCcgJworCWNvbW1pdF90ZW1wbGF0ZV9jb21tZW50ZWQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKK0EgIHNtCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IHVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgc3VibW9kdWxlIHN1bW1hcnknICcKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeSAoY2xlYW4gc3VibW9kdWxlKTogY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdXIgYnJhbmNoIGFuZCAnXCcndXBzdHJlYW0nXCcnIGhhdmUgZGl2ZXJnZWQsCithbmQgaGF2ZSAyIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgY29tbWl0IC1tICJjb21taXQgc3VibW9kdWxlIiAmJgorCWdpdCBjb25maWcgc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkgMTAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHN1Ym1vZHVsZSBzdW1tYXJ5IChjbGVhbiBzdWJtb2R1bGUpJyAnCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXogaW1wbGllcyBwb3JjZWxhaW4nICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwKKwlwZXJsIC1wZSAicy9cMDEyL1wwMDAvZyIgPmV4cGVjdCAmJgorCWdpdCBzdGF0dXMgLXogPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tZHJ5LXJ1biBzdWJtb2R1bGUgc3VtbWFyeSAoLS1hbWVuZCknICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDIgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc291cmNlPUhFQUReMSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCW5ldyBmaWxlOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCisqIHNtIDAwMDAwMDAuLi4kaGVhZCAoMSk6CisgID4gQWRkIGZvbworCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IGNvbmZpZyBzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSAxMCAmJgorCWdpdCBjb21taXQgLS1kcnktcnVuIC0tYW1lbmQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnc3RhdHVzIHN1Y2NlZWRzIGluIGEgcmVhZC1vbmx5IHJlcG9zaXRvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuZ2l0IiAmJgorCSgKKwkJY2htb2QgYS13IC5naXQgJiYKKwkJIyBtYWtlIGRpcjEvdHJhY2tlZCBzdGF0LWRpcnR5CisJCT5kaXIxL3RyYWNrZWQxICYmIG12IC1mIGRpcjEvdHJhY2tlZDEgZGlyMS90cmFja2VkICYmCisJCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCQkhIGdyZXAgZGlyMS90cmFja2VkIG91dHB1dCAmJgorCQkjIG1ha2Ugc3VyZSAic3RhdHVzIiBzdWNjZWVkZWQgd2l0aG91dCB3cml0aW5nIGluZGV4IG91dAorCQlnaXQgZGlmZi1maWxlcyB8IGdyZXAgZGlyMS90cmFja2VkCisJKQorJworCisoY2Qgc20gJiYgZWNobyA+IGJhciAmJiBnaXQgYWRkIGJhciAmJiBnaXQgY29tbWl0IC1xIC1tICdBZGQgYmFyJykgJiYgZ2l0IGFkZCBzbQorbmV3X2hlYWQ9JChjZCBzbSAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9NyAtLXZlcmlmeSBIRUFEKQordG91Y2ggLmdpdG1vZHVsZXMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwljYXQgPiBleHBlY3QgPDwgRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMiBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW1vZGlmaWVkOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCisqIHNtICRoZWFkLi4uJG5ld19oZWFkICgxKToKKyAgPiBBZGQgYmFyCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkuZ2l0bW9kdWxlcworCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWVjaG8gbW9kaWZpZWQgIHNtL3VudHJhY2tlZCAmJgorCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRtb2R1bGVzIGlnbm9yZT11bnRyYWNrZWQgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgZGlydHkgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L2NvbmZpZyBpZ25vcmU9dW50cmFja2VkIHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIHVudHJhY2tlZCBjb250ZW50JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRtb2R1bGVzIGlnbm9yZT1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCB1bnRyYWNrZWQgY29udGVudCcgJworCXRlc3RfY29uZmlnIGRpZmYuaWdub3JlU3VibW9kdWxlcyBkaXJ0eSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L2NvbmZpZyBpZ25vcmU9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50JyAnCisJZWNobyBtb2RpZmllZCA+c20vZm9vICYmCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0bW9kdWxlcyBpZ25vcmU9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgY29udGVudCcgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXQvY29uZmlnIGlnbm9yZT1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQiICcKKwljYXQgPiBleHBlY3QgPDwgRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMiBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW1vZGlmaWVkOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCW1vZGlmaWVkOiAgIHNtIChtb2RpZmllZCBjb250ZW50KQorCitTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisKKyogc20gJGhlYWQuLi4kbmV3X2hlYWQgKDEpOgorICA+IEFkZCBiYXIKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCS5naXRtb2R1bGVzCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCA+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi5naXRtb2R1bGVzIGlnbm9yZT11bnRyYWNrZWQgZG9lc24ndCBzdXBwcmVzcyBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgY29udGVudCIgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIuZ2l0L2NvbmZpZyBpZ25vcmU9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK2hlYWQyPSQoY2Qgc20gJiYgZ2l0IGNvbW1pdCAtcSAtbSAiMm5kIGNvbW1pdCIgZm9vICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydD03IC0tdmVyaWZ5IEhFQUQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlIHN1bW1hcnkiICcKKwljYXQgPiBleHBlY3QgPDwgRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMiBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW1vZGlmaWVkOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKwltb2RpZmllZDogICBzbSAobmV3IGNvbW1pdHMpCisKK1N1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworKiBzbSAkaGVhZC4uLiRuZXdfaGVhZCAoMSk6CisgID4gQWRkIGJhcgorCitTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOgorCisqIHNtICRuZXdfaGVhZC4uLiRoZWFkMiAoMSk6CisgID4gMm5kIGNvbW1pdAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisJLmdpdG1vZHVsZXMKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitFT0YKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkID4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdG1vZHVsZXMgaWdub3JlPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi5naXQvY29uZmlnIGlnbm9yZT11bnRyYWNrZWQgZG9lc24ndCBzdXBwcmVzcyBzdWJtb2R1bGUgc3VtbWFyeSIgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi5naXRtb2R1bGVzIGlnbm9yZT1kaXJ0eSBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdC9jb25maWcgaWdub3JlPWRpcnR5IGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlIHN1bW1hcnkiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorOyBPbiBicmFuY2ggbWFzdGVyCis7IFlvdXIgYnJhbmNoIGFuZCAndXBzdHJlYW0nIGhhdmUgZGl2ZXJnZWQsCis7IGFuZCBoYXZlIDIgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorOyAgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorOworOyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKzsgICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCis7CW1vZGlmaWVkOiAgIHNtCis7Cis7IENoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorOyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKzsgICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKzsJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorOwltb2RpZmllZDogICBzbSAobmV3IGNvbW1pdHMpCis7Cis7IFN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKzsKKzsgKiBzbSAkaGVhZC4uLiRuZXdfaGVhZCAoMSk6Cis7ICAgPiBBZGQgYmFyCis7Cis7IFN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6Cis7Cis7ICogc20gJG5ld19oZWFkLi4uJGhlYWQyICgxKToKKzsgICA+IDJuZCBjb21taXQKKzsKKzsgVW50cmFja2VkIGZpbGVzOgorOyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCis7CS5naXRtb2R1bGVzCis7CWRpcjEvdW50cmFja2VkCis7CWRpcjIvbW9kaWZpZWQKKzsJZGlyMi91bnRyYWNrZWQKKzsJdW50cmFja2VkCis7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic3RhdHVzIChjb3JlLmNvbW1lbnRjaGFyIHdpdGggc3VibW9kdWxlIHN1bW1hcnkpIiAnCisJdGVzdF9jb25maWcgY29yZS5jb21tZW50Y2hhciAiOyIgJiYKKwlnaXQgLWMgc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4PXRydWUgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzdGF0dXMgKGNvcmUuY29tbWVudGNoYXIgd2l0aCB0d28gY2hhcnMgd2l0aCBzdWJtb2R1bGUgc3VtbWFyeSkiICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmNvbW1lbnRjaGFyICI7OyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4PXRydWUgc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0taWdub3JlLXN1Ym1vZHVsZXM9YWxsIHN1cHByZXNzZXMgc3VibW9kdWxlIHN1bW1hcnkiICcKKwljYXQgPiBleHBlY3QgPDwgRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3VyIGJyYW5jaCBhbmQgJ1wnJ3Vwc3RyZWFtJ1wnJyBoYXZlIGRpdmVyZ2VkLAorYW5kIGhhdmUgMiBhbmQgMiBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuCisgICh1c2UgImdpdCBwdWxsIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkuZ2l0bW9kdWxlcworCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9YWxsID4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdG1vZHVsZXMgaWdub3JlPWFsbCBzdXBwcmVzc2VzIHVuc3RhZ2VkIHN1Ym1vZHVsZSBzdW1tYXJ5JyAnCisJY2F0ID4gZXhwZWN0IDw8IEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91ciBicmFuY2ggYW5kICdcJyd1cHN0cmVhbSdcJycgaGF2ZSBkaXZlcmdlZCwKK2FuZCBoYXZlIDIgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LgorICAodXNlICJnaXQgcHVsbCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycykKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXN0b3JlIC0tc3RhZ2VkIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKwltb2RpZmllZDogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKwkuZ2l0bW9kdWxlcworCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGFsbCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdC9jb25maWcgaWdub3JlPWFsbCBzdXBwcmVzc2VzIHVuc3RhZ2VkIHN1Ym1vZHVsZSBzdW1tYXJ5JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGFsbCAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2YgdGVzdCBlbnZpcm9ubWVudCcgJworCWdpdCBjb25maWcgc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBubyAmJgorCWdpdCBzdGF0dXMgLXMgPmV4cGVjdGVkX3Nob3J0ICYmCisJZ2l0IHN0YXR1cyAtLW5vLXNob3J0ID5leHBlY3RlZF9ub3Nob3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuc2hvcnQ9dHJ1ZSIgc2FtZSBhcyAiLXMiJyAnCisJZ2l0IC1jIHN0YXR1cy5zaG9ydD10cnVlIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfc2hvcnQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuc2hvcnQ9dHJ1ZSIgd2Vha2VyIHRoYW4gIi0tbm8tc2hvcnQiJyAnCisJZ2l0IC1jIHN0YXR1cy5zaG9ydD10cnVlIHN0YXR1cyAtLW5vLXNob3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ub3Nob3J0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLnNob3J0PWZhbHNlIiBzYW1lIGFzICItLW5vLXNob3J0IicgJworCWdpdCAtYyBzdGF0dXMuc2hvcnQ9ZmFsc2Ugc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ub3Nob3J0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLnNob3J0PWZhbHNlIiB3ZWFrZXIgdGhhbiAiLXMiJyAnCisJZ2l0IC1jIHN0YXR1cy5zaG9ydD1mYWxzZSBzdGF0dXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3Nob3J0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLmJyYW5jaD10cnVlIiBzYW1lIGFzICItYiInICcKKwlnaXQgc3RhdHVzIC1zYiA+ZXhwZWN0ZWRfYnJhbmNoICYmCisJZ2l0IC1jIHN0YXR1cy5icmFuY2g9dHJ1ZSBzdGF0dXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgZGlmZmVyZW50IGZyb20gIi0tbm8tYnJhbmNoIicgJworCWdpdCBzdGF0dXMgLXMgLS1uby1icmFuY2ggID5leHBlY3RlZF9ub2JyYW5jaCAmJgorCWdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgd2Vha2VyIHRoYW4gIi0tbm8tYnJhbmNoIicgJworCWdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC1zIC0tbm8tYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgd2Vha2VyIHRoYW4gIi0tcG9yY2VsYWluIicgJworICAgICAgIGdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC0tcG9yY2VsYWluID5hY3R1YWwgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9ZmFsc2UiIHNhbWUgYXMgIi0tbm8tYnJhbmNoIicgJworCWdpdCAtYyBzdGF0dXMuYnJhbmNoPWZhbHNlIHN0YXR1cyAtcyA+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+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoIGIvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjMDZkMjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTEwLXNpZ25lZC1jb21taXQuc2gKQEAgLTAsMCArMSwzMjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzaWduZWQgY29tbWl0IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCitHTlVQR0hPTUVfTk9UX1VTRUQ9JEdOVVBHSE9NRQorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1ncGcuc2giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdjcmVhdGUgc2lnbmVkIGNvbW1pdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfdW5jb25maWcgY29tbWl0LmdwZ3NpZ24iICYmCisKKwllY2hvIDEgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVMgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCisJZWNobyAyID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1TIC1tIHNlY29uZCAmJgorCWdpdCB0YWcgc2Vjb25kICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gMyA+ZWxpZiAmJiBnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidGhpcmQgb24gc2lkZSIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1TIHNpZGUgJiYKKwlnaXQgdGFnIG1lcmdlICYmCisKKwllY2hvIDQgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gImZvdXJ0aCB1bnNpZ25lZCIgJiYKKwlnaXQgdGFnIGZvdXJ0aC11bnNpZ25lZCAmJgorCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLS1hbWVuZCAtUyAtbSAiZm91cnRoIHNpZ25lZCIgJiYKKwlnaXQgdGFnIGZvdXJ0aC1zaWduZWQgJiYKKworCWdpdCBjb25maWcgY29tbWl0LmdwZ3NpZ24gdHJ1ZSAmJgorCWVjaG8gNSA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSAiZmlmdGggc2lnbmVkIiAmJgorCWdpdCB0YWcgZmlmdGgtc2lnbmVkICYmCisKKwlnaXQgY29uZmlnIGNvbW1pdC5ncGdzaWduIGZhbHNlICYmCisJZWNobyA2ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJzaXh0aCIgJiYKKwlnaXQgdGFnIHNpeHRoLXVuc2lnbmVkICYmCisKKwlnaXQgY29uZmlnIGNvbW1pdC5ncGdzaWduIHRydWUgJiYKKwllY2hvIDcgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gInNldmVudGgiIC0tbm8tZ3BnLXNpZ24gJiYKKwlnaXQgdGFnIHNldmVudGgtdW5zaWduZWQgJiYKKworCXRlc3RfdGljayAmJiBnaXQgcmViYXNlIC1mIEhFQUReXiAmJiBnaXQgdGFnIHNpeHRoLXNpZ25lZCBIRUFEXiAmJgorCWdpdCB0YWcgc2V2ZW50aC1zaWduZWQgJiYKKworCWVjaG8gOCA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSBlaWdodGggLVNCNzIyNzE4OSAmJgorCWdpdCB0YWcgZWlnaHRoLXNpZ25lZC1hbHQgJiYKKworCSMgY29tbWl0LmdwZ3NpZ24gaXMgc3RpbGwgb24gYnV0IHRoaXMgbXVzdCBub3QgYmUgc2lnbmVkCisJZWNobyA5IHwgZ2l0IGNvbW1pdC10cmVlIEhFQURee3RyZWV9ID5vaWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG9pZCAmJgorCWdpdCB0YWcgbmludGgtdW5zaWduZWQgJChjYXQgb2lkKSAmJgorCSMgZXhwbGljaXQgLVMgb2YgY291cnNlIG11c3Qgc2lnbi4KKwllY2hvIDEwIHwgZ2l0IGNvbW1pdC10cmVlIC1TIEhFQURee3RyZWV9ID5vaWQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG9pZCAmJgorCWdpdCB0YWcgdGVudGgtc2lnbmVkICQoY2F0IG9pZCkgJiYKKworCSMgLS1ncGctc2lnbls9PGtleS1pZD5dIG11c3Qgc2lnbi4KKwllY2hvIDExIHwgZ2l0IGNvbW1pdC10cmVlIC0tZ3BnLXNpZ24gSEVBRF57dHJlZX0gPm9pZCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgb2lkICYmCisJZ2l0IHRhZyBlbGV2ZW50aC1zaWduZWQgJChjYXQgb2lkKSAmJgorCWVjaG8gMTIgfCBnaXQgY29tbWl0LXRyZWUgLS1ncGctc2lnbj1CNzIyNzE4OSBIRUFEXnt0cmVlfSA+b2lkICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvaWQgJiYKKwlnaXQgdGFnIHR3ZWxmdGgtc2lnbmVkLWFsdCAkKGNhdCBvaWQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnkgYW5kIHNob3cgc2lnbmF0dXJlcycgJworCSgKKwkJZm9yIGNvbW1pdCBpbiBpbml0aWFsIHNlY29uZCBtZXJnZSBmb3VydGgtc2lnbmVkIFwKKwkJCWZpZnRoLXNpZ25lZCBzaXh0aC1zaWduZWQgc2V2ZW50aC1zaWduZWQgdGVudGgtc2lnbmVkIFwKKwkJCWVsZXZlbnRoLXNpZ25lZAorCQlkbworCQkJZ2l0IHZlcmlmeS1jb21taXQgJGNvbW1pdCAmJgorCQkJZ2l0IHNob3cgLS1wcmV0dHk9c2hvcnQgLS1zaG93LXNpZ25hdHVyZSAkY29tbWl0ID5hY3R1YWwgJiYKKwkJCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJZWNobyAkY29tbWl0IE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIGNvbW1pdCBpbiBtZXJnZV4yIGZvdXJ0aC11bnNpZ25lZCBzaXh0aC11bnNpZ25lZCBcCisJCQlzZXZlbnRoLXVuc2lnbmVkIG5pbnRoLXVuc2lnbmVkCisJCWRvCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LWNvbW1pdCAkY29tbWl0ICYmCisJCQlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICRjb21taXQgPmFjdHVhbCAmJgorCQkJISBncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwkoCisJCWZvciBjb21taXQgaW4gZWlnaHRoLXNpZ25lZC1hbHQgdHdlbGZ0aC1zaWduZWQtYWx0CisJCWRvCisJCQlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICRjb21taXQgPmFjdHVhbCAmJgorCQkJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQlncmVwICJub3QgY2VydGlmaWVkIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeS1jb21taXQgZXhpdHMgc3VjY2VzcyBvbiB1bnRydXN0ZWQgc2lnbmF0dXJlJyAnCisJZ2l0IHZlcmlmeS1jb21taXQgZWlnaHRoLXNpZ25lZC1hbHQgMj5hY3R1YWwgJiYKKwlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJZ3JlcCAibm90IGNlcnRpZmllZCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnktY29tbWl0IGV4aXRzIHN1Y2Nlc3Mgd2l0aCBtYXRjaGluZyBtaW5UcnVzdExldmVsJyAnCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgdWx0aW1hdGUgJiYKKwlnaXQgdmVyaWZ5LWNvbW1pdCBzaXh0aC1zaWduZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeS1jb21taXQgZXhpdHMgc3VjY2VzcyB3aXRoIGxvdyBtaW5UcnVzdExldmVsJyAnCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgZnVsbHkgJiYKKwlnaXQgdmVyaWZ5LWNvbW1pdCBzaXh0aC1zaWduZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeS1jb21taXQgZXhpdHMgZmFpbHVyZSB3aXRoIGhpZ2ggbWluVHJ1c3RMZXZlbCcgJworCXRlc3RfY29uZmlnIGdwZy5taW5UcnVzdExldmVsIHVsdGltYXRlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1jb21taXQgZWlnaHRoLXNpZ25lZC1hbHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeSBzaWduYXR1cmVzIHdpdGggLS1yYXcnICcKKwkoCisJCWZvciBjb21taXQgaW4gaW5pdGlhbCBzZWNvbmQgbWVyZ2UgZm91cnRoLXNpZ25lZCBmaWZ0aC1zaWduZWQgc2l4dGgtc2lnbmVkIHNldmVudGgtc2lnbmVkCisJCWRvCisJCQlnaXQgdmVyaWZ5LWNvbW1pdCAtLXJhdyAkY29tbWl0IDI+YWN0dWFsICYmCisJCQlncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEU0lHIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwkoCisJCWZvciBjb21taXQgaW4gbWVyZ2VeMiBmb3VydGgtdW5zaWduZWQgc2l4dGgtdW5zaWduZWQgc2V2ZW50aC11bnNpZ25lZAorCQlkbworCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1jb21taXQgLS1yYXcgJGNvbW1pdCAyPmFjdHVhbCAmJgorCQkJISBncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEU0lHIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkgJiYKKwkoCisJCWZvciBjb21taXQgaW4gZWlnaHRoLXNpZ25lZC1hbHQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktY29tbWl0IC0tcmF3ICRjb21taXQgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdPT0RTSUciIGFjdHVhbCAmJgorCQkJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgorCQkJZ3JlcCAiVFJVU1RfVU5ERUZJTkVEIiBhY3R1YWwgJiYKKwkJCWVjaG8gJGNvbW1pdCBPSyB8fCBleGl0IDEKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Nob3cgc2lnbmVkIGNvbW1pdCB3aXRoIHNpZ25hdHVyZScgJworCWdpdCBzaG93IC1zIGluaXRpYWwgPmNvbW1pdCAmJgorCWdpdCBzaG93IC1zIC0tc2hvdy1zaWduYXR1cmUgaW5pdGlhbCA+c2hvdyAmJgorCWdpdCB2ZXJpZnktY29tbWl0IC12IGluaXRpYWwgPnZlcmlmeS4xIDI+dmVyaWZ5LjIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IGluaXRpYWwgPmNhdCAmJgorCWdyZXAgLXYgLWUgImdwZzogIiAtZSAiV2FybmluZzogIiBzaG93ID5zaG93LmNvbW1pdCAmJgorCWdyZXAgLWUgImdwZzogIiAtZSAiV2FybmluZzogIiBzaG93ID5zaG93LmdwZyAmJgorCWdyZXAgLXYgIl4gIiBjYXQgfCBncmVwIC12ICJeZ3Bnc2lnICIgPmNhdC5jb21taXQgJiYKKwl0ZXN0X2NtcCBzaG93LmNvbW1pdCBjb21taXQgJiYKKwl0ZXN0X2NtcCBzaG93LmdwZyB2ZXJpZnkuMiAmJgorCXRlc3RfY21wIGNhdC5jb21taXQgdmVyaWZ5LjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2RldGVjdCBmdWRnZWQgc2lnbmF0dXJlJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBzZXZlbnRoLXNpZ25lZCA+cmF3ICYmCisJc2VkIC1lICJzL15zZXZlbnRoLzd0aCBmb3JnZWQvIiByYXcgPmZvcmdlZDEgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IGZvcmdlZDEgPmZvcmdlZDEuY29tbWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1jb21taXQgJChjYXQgZm9yZ2VkMS5jb21taXQpICYmCisJZ2l0IHNob3cgLS1wcmV0dHk9c2hvcnQgLS1zaG93LXNpZ25hdHVyZSAkKGNhdCBmb3JnZWQxLmNvbW1pdCkgPmFjdHVhbDEgJiYKKwlncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbDEgJiYKKwkhIGdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2RldGVjdCBmdWRnZWQgc2lnbmF0dXJlIHdpdGggTlVMJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBzZXZlbnRoLXNpZ25lZCA+cmF3ICYmCisJY2F0IHJhdyA+Zm9yZ2VkMiAmJgorCWVjaG8gUXdpayB8IHRyICJRIiAiXDAwMCIgPj5mb3JnZWQyICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBmb3JnZWQyID5mb3JnZWQyLmNvbW1pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktY29tbWl0ICQoY2F0IGZvcmdlZDIuY29tbWl0KSAmJgorCWdpdCBzaG93IC0tcHJldHR5PXNob3J0IC0tc2hvdy1zaWduYXR1cmUgJChjYXQgZm9yZ2VkMi5jb21taXQpID5hY3R1YWwyICYmCisJZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwyICYmCisJISBncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdhbWVuZGluZyBhbHJlYWR5IHNpZ25lZCBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgZm91cnRoLXNpZ25lZF4wICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1TIC0tbm8tZWRpdCAmJgorCWdpdCB2ZXJpZnktY29tbWl0IEhFQUQgJiYKKwlnaXQgc2hvdyAtcyAtLXNob3ctc2lnbmF0dXJlIEhFQUQgPmFjdHVhbCAmJgorCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Nob3cgZ29vZCBzaWduYXR1cmUgd2l0aCBjdXN0b20gZm9ybWF0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUcKKwkxM0I2RjUxRUNEREU0MzBECisJQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCTczRDc1ODc0NEJFNzIxNjk4RUM1NEU4NzEzQjZGNTFFQ0RERTQzMEQKKwk3M0Q3NTg3NDRCRTcyMTY5OEVDNTRFODcxM0I2RjUxRUNEREU0MzBECisJRU9GCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJUc/JW4lR0slbiVHUyVuJUdGJW4lR1AiIHNpeHRoLXNpZ25lZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2hvdyBiYWQgc2lnbmF0dXJlIHdpdGggY3VzdG9tIGZvcm1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlCCisJMTNCNkY1MUVDRERFNDMwRAorCUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworCisJRU9GCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJUc/JW4lR0slbiVHUyVuJUdGJW4lR1AiICQoY2F0IGZvcmdlZDEuY29tbWl0KSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2hvdyB1bnRydXN0ZWQgc2lnbmF0dXJlIHdpdGggY3VzdG9tIGZvcm1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlVCisJNjVBMEVFQTAyRTMwQ0FENworCUVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PgorCUY4MzY0QTU5RTA3RkZFOUY0RDYzMDA1QTY1QTBFRUEwMkUzMENBRDcKKwlENEJFMjIzMTFBRDMxMzFFNUVEQTI5QTQ2MTA5MkU4NUI3MjI3MTg5CisJRU9GCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJUc/JW4lR0slbiVHUyVuJUdGJW4lR1AiIGVpZ2h0aC1zaWduZWQtYWx0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCB1bmRlZmluZWQgdHJ1c3QgbGV2ZWwnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJdW5kZWZpbmVkCisJNjVBMEVFQTAyRTMwQ0FENworCUVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PgorCUY4MzY0QTU5RTA3RkZFOUY0RDYzMDA1QTY1QTBFRUEwMkUzMENBRDcKKwlENEJFMjIzMTFBRDMxMzFFNUVEQTI5QTQ2MTA5MkU4NUI3MjI3MTg5CisJRU9GCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJUdUJW4lR0slbiVHUyVuJUdGJW4lR1AiIGVpZ2h0aC1zaWduZWQtYWx0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCB1bHRpbWF0ZSB0cnVzdCBsZXZlbCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl1bHRpbWF0ZQorCTEzQjZGNTFFQ0RERTQzMEQKKwlDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJNzNENzU4NzQ0QkU3MjE2OThFQzU0RTg3MTNCNkY1MUVDRERFNDMwRAorCTczRDc1ODc0NEJFNzIxNjk4RUM1NEU4NzEzQjZGNTFFQ0RERTQzMEQKKwlFT0YKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlR1QlbiVHSyVuJUdTJW4lR0YlbiVHUCIgc2l4dGgtc2lnbmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IHVua25vd24gc2lnbmF0dXJlIHdpdGggY3VzdG9tIGZvcm1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlFCisJNjVBMEVFQTAyRTMwQ0FENworCisKKworCUVPRgorCUdOVVBHSE9NRT0iJEdOVVBHSE9NRV9OT1RfVVNFRCIgZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJUc/JW4lR0slbiVHUyVuJUdGJW4lR1AiIGVpZ2h0aC1zaWduZWQtYWx0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IGxhY2sgb2Ygc2lnbmF0dXJlIHdpdGggY3VzdG9tIGZvcm1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlOCisKKworCisKKwlFT0YKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlRz8lbiVHSyVuJUdTJW4lR0YlbiVHUCIgc2V2ZW50aC11bnNpZ25lZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nLnNob3dzaWduYXR1cmUgYmVoYXZlcyBsaWtlIC0tc2hvdy1zaWduYXR1cmUnICcKKwl0ZXN0X2NvbmZpZyBsb2cuc2hvd3NpZ25hdHVyZSB0cnVlICYmCisJZ2l0IHNob3cgaW5pdGlhbCA+YWN0dWFsICYmCisJZ3JlcCAiZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiZ3BnOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdjaGVjayBjb25maWcgZ3BnLmZvcm1hdCB2YWx1ZXMnICcKKwl0ZXN0X2NvbmZpZyBncGcuZm9ybWF0IG9wZW5wZ3AgJiYKKwlnaXQgY29tbWl0IC1TIC0tYW1lbmQgLW0gInN1Y2Nlc3MiICYmCisJdGVzdF9jb25maWcgZ3BnLmZvcm1hdCBPcEVuUGdQICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtUyAtLWFtZW5kIC1tICJmYWlsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBjb21taXQgd2l0aCBkb3VibGUgc2lnbmF0dXJlJyAnCisJc2VkIC1lICIvZ3Bnc2lnLywvRU5EIFBHUC9kIiBmb3JnZWQxID5kb3VibGUtYmFzZSAmJgorCXNlZCAtbiAtZSAiL2dwZ3NpZy8sL0VORCBQR1AvcCIgZm9yZ2VkMSB8IFwKKwkJc2VkIC1lICJzL15ncGdzaWcvLztzL14gLy8iIHwgZ3BnIC0tZGVhcm1vciA+ZG91YmxlLXNpZzEuc2lnICYmCisJZ3BnIC1vIGRvdWJsZS1zaWcyLnNpZyAtdSAyOTQ3Mjc4NCAtLWRldGFjaC1zaWduIGRvdWJsZS1iYXNlICYmCisJY2F0IGRvdWJsZS1zaWcxLnNpZyBkb3VibGUtc2lnMi5zaWcgfCBncGcgLS1lbmFybW9yID5kb3VibGUtY29tYmluZWQuYXNjICYmCisJc2VkIC1lICJzL15cKC0uKlwpQVJNT1JFRCBGSUxFL1wxU0lHTkFUVVJFLzsxcy9eL2dwZ3NpZyAvOzIsXCRzL14vIC8iIFwKKwkJZG91YmxlLWNvbWJpbmVkLmFzYyA+IGRvdWJsZS1ncGdzaWcgJiYKKwlzZWQgLWUgIi9jb21taXR0ZXIvciBkb3VibGUtZ3Bnc2lnIiBkb3VibGUtYmFzZSA+ZG91YmxlLWNvbW1pdCAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgZG91YmxlLWNvbW1pdCA+ZG91YmxlLWNvbW1pdC5jb21taXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LWNvbW1pdCAkKGNhdCBkb3VibGUtY29tbWl0LmNvbW1pdCkgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICQoY2F0IGRvdWJsZS1jb21taXQuY29tbWl0KSA+ZG91YmxlLWFjdHVhbCAmJgorCWdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgZG91YmxlLWFjdHVhbCAmJgorCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGRvdWJsZS1hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Nob3cgZG91YmxlIHNpZ25hdHVyZSB3aXRoIGN1c3RvbSBmb3JtYXQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRQorCisKKworCisJRU9GCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJUc/JW4lR0slbiVHUyVuJUdGJW4lR1AiICQoY2F0IGRvdWJsZS1jb21taXQuY29tbWl0KSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTEtc3RhdHVzLWluZGV4LnNoIGIvdC90NzUxMS1zdGF0dXMtaW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjVmZGMwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTEtc3RhdHVzLWluZGV4LnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RhdHVzIHdpdGggY2VydGFpbiBmaWxlIG5hbWUgbGVuZ3RocycKKworLiAuL3Rlc3QtbGliLnNoCisKK2ZpbGVzPSIwIDEgMiAzIDQgNSA2IDcgOCA5IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiIKKworY2hlY2soKSB7CisJbGVuPSQxCisJcHJlZml4PSQyCisKKwlmb3IgaSBpbiAkZmlsZXMKKwlkbworCQk6ID4kcHJlZml4JGkKKwlkb25lCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzdGF0dXMsIGZpbGVuYW1lIGxlbmd0aCAkbGVuIiAiCisJCWdpdCBhZGQgJHByZWZpeCogJiYKKwkJZ2l0IHN0YXR1cworCSIKKwlybSAkcHJlZml4KiAuZ2l0L2luZGV4Cit9CisKK2NoZWNrICAxCitjaGVjayAgMiBwCitjaGVjayAgMyBweAorY2hlY2sgIDQgcHJlCitjaGVjayAgNSBwcmVmCitjaGVjayAgNiBwcmVmaQorY2hlY2sgIDcgcHJlZml4CitjaGVjayAgOCBwcmVmaXgtCitjaGVjayAgOSBwcmVmaXgtcAorY2hlY2sgMTAgcHJlZml4LXByCitjaGVjayAxMSBwcmVmaXgtcHJlCitjaGVjayAxMiBwcmVmaXgtcHJlZgorY2hlY2sgMTMgcHJlZml4LXByZWZpCitjaGVjayAxNCBwcmVmaXgtcHJlZml4CitjaGVjayAxNSBwcmVmaXgtcHJlZml4LQorY2hlY2sgMTYgcHJlZml4LXByZWZpeC1wCitjaGVjayAxNyBwcmVmaXgtcHJlZml4LXByCitjaGVjayAxOCBwcmVmaXgtcHJlZml4LXByZQorY2hlY2sgMTkgcHJlZml4LXByZWZpeC1wcmVmCitjaGVjayAyMCBwcmVmaXgtcHJlZml4LXByZWZpCitjaGVjayAyMSBwcmVmaXgtcHJlZml4LXByZWZpeAorY2hlY2sgMjIgcHJlZml4LXByZWZpeC1wcmVmaXgtCitjaGVjayAyMyBwcmVmaXgtcHJlZml4LXByZWZpeC1wCitjaGVjayAyNCBwcmVmaXgtcHJlZml4LXByZWZpeC1wcgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTItc3RhdHVzLWhlbHAuc2ggYi90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5NTE4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoCkBAIC0wLDAgKzEsMTAxMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBWYWxlbnRpbiBEdXBlcnJheSwgTHVjaWVuIEtvbmcsIEZyYW5jayBKb25hcywKKyMJCSAgICAgVGhvbWFzIE5ndXksIEtob2kgTmd1eWVuCisjCQkgICAgIEdyZW5vYmxlIElOUCBFbnNpbWFnCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMgYWR2aWNlJworCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciBjb25mbGljdHMnICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIGFkdmljZS5zdGF0dXN1b3B0aW9uIGZhbHNlICYmCisJdGVzdF9jb21taXQgaW5pdCBtYWluLnR4dCBpbml0ICYmCisJZ2l0IGJyYW5jaCBjb25mbGljdHMgJiYKKwl0ZXN0X2NvbW1pdCBvbl9tYXN0ZXIgbWFpbi50eHQgb25fbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0cyAmJgorCXRlc3RfY29tbWl0IG9uX2NvbmZsaWN0cyBtYWluLnR4dCBvbl9jb25mbGljdHMKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgdW5yZXNvbHZlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGNvbmZsaWN0cworWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorICAodXNlICJnaXQgbWVyZ2UgLS1hYm9ydCIgdG8gYWJvcnQgdGhlIG1lcmdlKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIG1hcmsgcmVzb2x1dGlvbikKKwlib3RoIG1vZGlmaWVkOiAgIG1haW4udHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gY29uZmxpY3RzIHJlc29sdmVkIGJlZm9yZSBjb21taXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbmZsaWN0cyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwllY2hvIG9uZSA+bWFpbi50eHQgJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK09uIGJyYW5jaCBjb25mbGljdHMKK0FsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCIgdG8gY29uY2x1ZGUgbWVyZ2UpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIHJlYmFzZSBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiByZWJhc2VfY29uZmxpY3RzICYmCisJdGVzdF9jb21taXQgb25lX3JlYmFzZSBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fcmViYXNlIG1haW4udHh0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlX3JlYmFzZSBtYWluLnR4dCB0aHJlZQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHJlYmFzZSAtLWFwcGx5IGluIHByb2dyZXNzIGJlZm9yZSByZXNvbHZpbmcgY29uZmxpY3RzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXl4pICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFwcGx5IEhFQUReIC0tb250byBIRUFEXl4gJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCityZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK1lvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2NvbmZsaWN0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorICAodXNlICJnaXQgcmViYXNlIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgcmViYXNlIC0tYWJvcnQiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCWJvdGggbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiByZWJhc2UgLS1hcHBseSBpbiBwcm9ncmVzcyBiZWZvcmUgcmViYXNlIC0tY29udGludWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHJlYmFzZV9jb25mbGljdHMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tYXBwbHkgSEVBRF4gLS1vbnRvIEhFQUReXiAmJgorCWVjaG8gdGhyZWUgPm1haW4udHh0ICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK3JlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICdcJydyZWJhc2VfY29uZmxpY3RzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIHJlYmFzZV9pX2NvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZV9pX2NvbmZsaWN0cyAmJgorCXRlc3RfY29tbWl0IG9uZV91bm1lcmdlIG1haW4udHh0IG9uZV91bm1lcmdlICYmCisJZ2l0IGJyYW5jaCByZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kICYmCisJdGVzdF9jb21taXQgb25lX21hc3RlciBtYWluLnR4dCBvbmVfbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IHJlYmFzZV9pX2NvbmZsaWN0c19zZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfc2Vjb25kIG1haW4udHh0IG9uZV9zZWNvbmQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZHVyaW5nIHJlYmFzZSAtaSB3aGVuIGNvbmZsaWN0cyB1bnJlc29sdmVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWJhc2VfaV9jb25mbGljdHMpICYmCisJTEFTVF9DT01NSVQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHJlYmFzZV9pX2NvbmZsaWN0cyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kIGRvbmUgKDEgY29tbWFuZCBkb25lKToKKyAgIHBpY2sgJExBU1RfQ09NTUlUIG9uZV9zZWNvbmQKK05vIGNvbW1hbmRzIHJlbWFpbmluZy4KK1lvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorICAodXNlICJnaXQgcmViYXNlIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgcmViYXNlIC0tYWJvcnQiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCWJvdGggbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZHVyaW5nIHJlYmFzZSAtaSBhZnRlciByZXNvbHZpbmcgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCByZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWJhc2VfaV9jb25mbGljdHMpICYmCisJTEFTVF9DT01NSVQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHJlYmFzZV9pX2NvbmZsaWN0cyAmJgorCWdpdCBhZGQgbWFpbi50eHQgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZCBkb25lICgxIGNvbW1hbmQgZG9uZSk6CisgICBwaWNrICRMQVNUX0NPTU1JVCBvbmVfc2Vjb25kCitObyBjb21tYW5kcyByZW1haW5pbmcuCitZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJ1wnJ3JlYmFzZV9pX2NvbmZsaWN0c19zZWNvbmQnXCcnIG9uICdcJyckT05UTydcJycuCisgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gcmViYXNpbmcgLWkgaW4gZWRpdCBtb2RlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlX2lfZWRpdCAmJgorCXRlc3RfY29tbWl0IG9uZV9yZWJhc2VfaSBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fcmViYXNlX2kgbWFpbi50eHQgdHdvICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWJhc2VfaV9lZGl0KSAmJgorCXRlc3RfY29tbWl0IHRocmVlX3JlYmFzZV9pIG1haW4udHh0IHRocmVlICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWJhc2VfaV9lZGl0KSAmJgorCUZBS0VfTElORVM9IjEgZWRpdCAyIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjIpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIHBpY2sgJENPTU1JVDIgdHdvX3JlYmFzZV9pCisgICBlZGl0ICRDT01NSVQzIHRocmVlX3JlYmFzZV9pCitObyBjb21tYW5kcyByZW1haW5pbmcuCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2lfZWRpdCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBzcGxpdHRpbmcgYSBjb21taXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBzcGxpdF9jb21taXQgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfc3BsaXQgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX3NwbGl0IG1haW4udHh0IHR3byAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc3BsaXRfY29tbWl0KSAmJgorCXRlc3RfY29tbWl0IHRocmVlX3NwbGl0IG1haW4udHh0IHRocmVlICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzcGxpdF9jb21taXQpICYmCisJdGVzdF9jb21taXQgZm91cl9zcGxpdCBtYWluLnR4dCBmb3VyICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzcGxpdF9jb21taXQpICYmCisJRkFLRV9MSU5FUz0iMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBwaWNrICRDT01NSVQyIHR3b19zcGxpdAorICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9zcGxpdAorTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9zcGxpdAorICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc3BsaXRfY29tbWl0J1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCByZXN0b3JlIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGFmdGVyIGVkaXRpbmcgdGhlIGxhc3QgY29tbWl0IHdpdGggLS1hbWVuZCBkdXJpbmcgYSByZWJhc2UgLWknICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBhbWVuZF9sYXN0ICYmCisJdGVzdF9jb21taXQgb25lX2FtZW5kIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19hbWVuZCBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9hbWVuZCBtYWluLnR4dCB0aHJlZSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgYW1lbmRfbGFzdCkgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyX2FtZW5kIG1haW4udHh0IGZvdXIgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IGFtZW5kX2xhc3QpICYmCisJRkFLRV9MSU5FUz0iMSAyIGVkaXQgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJmb28iICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDMgY29tbWFuZHMgZG9uZSk6CisgICBwaWNrICRDT01NSVQzIHRocmVlX2FtZW5kCisgICBlZGl0ICRDT01NSVQ0IGZvdXJfYW1lbmQKKyAgKHNlZSBtb3JlIGluIGZpbGUgLmdpdC9yZWJhc2UtbWVyZ2UvZG9uZSkKK05vIGNvbW1hbmRzIHJlbWFpbmluZy4KK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydhbWVuZF9sYXN0J1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIHNldmVyYWwgZWRpdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBzZXZlcmFsX2VkaXRzICYmCisJdGVzdF9jb21taXQgb25lX2VkaXRzIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19lZGl0cyBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9lZGl0cyBtYWluLnR4dCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IGZvdXJfZWRpdHMgbWFpbi50eHQgZm91cgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGNvbnRpbnVlIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0JyAnCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChjb250aW51ZSBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgc3BsaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChjb250aW51ZSBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgYW1lbmQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZm9vIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGFtZW5kIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImEiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoYW1lbmQgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQgYW5kIHNwbGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImIiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgcmVzdG9yZSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKwltb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGFtZW5kIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0IGFuZCBhbWVuZCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJjIiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZCIgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChzcGxpdCBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWdpdCBjb21taXQgLW0gImUiICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoc3BsaXQgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQgYW5kIHNwbGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJmIiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IHJlc3RvcmUgPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisJbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChzcGxpdCBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgYW1lbmQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCBhZGQgbWFpbi50eHQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImciICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJoIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgYW1fc2Vzc2lvbicgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFtX3Nlc3Npb24gJiYKKwl0ZXN0X2NvbW1pdCBvbmVfYW0gb25lLnR4dCAib25lIiAmJgorCXRlc3RfY29tbWl0IHR3b19hbSB0d28udHh0ICJ0d28iICYmCisJdGVzdF9jb21taXQgdGhyZWVfYW0gdGhyZWUudHh0ICJ0aHJlZSIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaW4gYW4gYW0gc2Vzc2lvbjogZmlsZSBhbHJlYWR5IGV4aXN0cycgJworCWdpdCBjaGVja291dCAtYiBhbV9hbHJlYWR5X2V4aXN0cyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gTWFpbGRpci8qICYmIGdpdCBhbSAtLWFib3J0IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW9NYWlsZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIE1haWxkaXIvKi5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitPbiBicmFuY2ggYW1fYWxyZWFkeV9leGlzdHMKK1lvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLgorICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gImdpdCBhbSAtLWNvbnRpbnVlIikKKyAgKHVzZSAiZ2l0IGFtIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgYW0gLS1hYm9ydCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpbiBhbiBhbSBzZXNzaW9uOiBmaWxlIGRvZXMgbm90IGV4aXN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBhbV9zZXNzaW9uICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFtX25vdF9leGlzdHMgJiYKKwlnaXQgcm0gdGhyZWUudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIHRocmVlLnR4dCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIE1haWxkaXIvKiAmJiBnaXQgYW0gLS1hYm9ydCIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC1vTWFpbGRpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBNYWlsZGlyLyoucGF0Y2ggJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGFtX25vdF9leGlzdHMKK1lvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLgorICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gImdpdCBhbSAtLWNvbnRpbnVlIikKKyAgKHVzZSAiZ2l0IGFtIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgYW0gLS1hYm9ydCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpbiBhbiBhbSBzZXNzaW9uOiBlbXB0eSBwYXRjaCcgJworCWdpdCByZXNldCAtLWhhcmQgYW1fc2Vzc2lvbiAmJgorCWdpdCBjaGVja291dCAtYiBhbV9lbXB0eSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gTWFpbGRpci8qICYmIGdpdCBhbSAtLWFib3J0IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTMgLW9NYWlsZGlyICYmCisJZ2l0IHJtIG9uZS50eHQgdHdvLnR4dCB0aHJlZS50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJkZWxldGUgYWxsIGFtX2VtcHR5IiAmJgorCWVjaG8gZXJyb3IgPk1haWxkaXIvMDAwMi10d29fYW0ucGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gTWFpbGRpci8qLnBhdGNoICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK09uIGJyYW5jaCBhbV9lbXB0eQorWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uCitUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4KKyAgKHVzZSAiZ2l0IGFtIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgYW0gLS1hYm9ydCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGJpc2VjdGluZycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJpc2VjdCAmJgorCXRlc3RfY29tbWl0IG9uZV9iaXNlY3QgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX2Jpc2VjdCBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9iaXNlY3QgbWFpbi50eHQgdGhyZWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBiaXNlY3QgcmVzZXQiICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCBnb29kIG9uZV9iaXNlY3QgJiYKKwlUR1Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgdHdvX2Jpc2VjdCkgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitIRUFEIGRldGFjaGVkIGF0ICRUR1QKK1lvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnXCcnYmlzZWN0J1wnJy4KKyAgKHVzZSAiZ2l0IGJpc2VjdCByZXNldCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiByZWJhc2UgLS1hcHBseSBjb25mbGljdHMgd2l0aCBzdGF0dXNoaW50cyBkaXNhYmxlZCcgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHN0YXR1c2hpbnRzX2Rpc2FibGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tbG9jYWwgYWR2aWNlLnN0YXR1c2hpbnRzIHRydWUiICYmCisJZ2l0IGNvbmZpZyAtLWxvY2FsIGFkdmljZS5zdGF0dXNoaW50cyBmYWxzZSAmJgorCXRlc3RfY29tbWl0IG9uZV9zdGF0dXNoaW50cyBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fc3RhdHVzaGludHMgbWFpbi50eHQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWVfc3RhdHVzaGludHMgbWFpbi50eHQgdGhyZWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tYXBwbHkgSEVBRF4gLS1vbnRvIEhFQUReXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK3JlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICdcJydzdGF0dXNoaW50c19kaXNhYmxlZCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKworVW5tZXJnZWQgcGF0aHM6CisJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdAorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIGNoZXJyeS1waWNrIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNoZXJyeV9icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBvbmVfY2hlcnJ5IG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19jaGVycmllcyBtYWluLnR4dCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgY2hlcnJ5X2JyYW5jaF9zZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmRfY2hlcnJ5IG1haW4udHh0IHNlY29uZCAmJgorCWdpdCBjaGVja291dCBjaGVycnlfYnJhbmNoICYmCisJdGVzdF9jb21taXQgdGhyZWVfY2hlcnJpZXMgbWFpbi50eHQgdGhyZWUKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjaGVycnktcGlja2luZyBiZWZvcmUgcmVzb2x2aW5nIGNvbmZsaWN0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGNoZXJyeV9icmFuY2hfc2Vjb25kICYmCisJVE9fQ0hFUlJZX1BJQ0s9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgQ0hFUlJZX1BJQ0tfSEVBRCkgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitPbiBicmFuY2ggY2hlcnJ5X2JyYW5jaAorWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICRUT19DSEVSUllfUElDSy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiKQorICAodXNlICJnaXQgY2hlcnJ5LXBpY2sgLS1za2lwIiB0byBza2lwIHRoaXMgcGF0Y2gpCisgICh1c2UgImdpdCBjaGVycnktcGljayAtLWFib3J0IiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikKKworVW5tZXJnZWQgcGF0aHM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCisJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGNoZXJyeS1waWNraW5nIGFmdGVyIHJlc29sdmluZyBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGNoZXJyeV9icmFuY2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVycnktcGljayAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBjaGVycnlfYnJhbmNoX3NlY29uZCAmJgorCVRPX0NIRVJSWV9QSUNLPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IENIRVJSWV9QSUNLX0hFQUQpICYmCisJZWNobyBlbmQgPm1haW4udHh0ICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK09uIGJyYW5jaCBjaGVycnlfYnJhbmNoCitZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJFRPX0NIRVJSWV9QSUNLLgorICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuICJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSIpCisgICh1c2UgImdpdCBjaGVycnktcGljayAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKwltb2RpZmllZDogICBtYWluLnR4dAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gY2hlcnJ5LXBpY2tpbmcgYWZ0ZXIgY29tbWl0dGluZyBjb25mbGljdCByZXNvbHV0aW9uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjaGVycnlfYnJhbmNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgY2hlcnJ5X2JyYW5jaF9zZWNvbmQgb25lX2NoZXJyeSAmJgorCWVjaG8gZW5kID5tYWluLnR4dCAmJgorCWdpdCBjb21taXQgLWEgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitPbiBicmFuY2ggY2hlcnJ5X2JyYW5jaAorQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLgorICAocnVuICJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSIgdG8gY29udGludWUpCisgICh1c2UgImdpdCBjaGVycnktcGljayAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvd3MgY2hlcnJ5LXBpY2sgd2l0aCBpbnZhbGlkIG9pZCcgJworCW1rZGlyIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF93cml0ZV9saW5lcyAicGljayBpbnZhbGlkLW9pZCIgPi5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgMj5lcnIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVyciAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGRvZXMgbm90IHNob3cgZXJyb3IgaWYgLmdpdC9zZXF1ZW5jZXIgaXMgYSBmaWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAuZ2l0L3NlcXVlbmNlciIgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGhlbGxvID4uZ2l0L3NlcXVlbmNlciAmJgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG93aW5nIGRldGFjaGVkIGF0IGFuZCBmcm9tIGEgdGFnJyAnCisJdGVzdF9jb21taXQgYXRhZyB0YWdnaW5nICYmCisJZ2l0IGNoZWNrb3V0IGF0YWcgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorSEVBRCBkZXRhY2hlZCBhdCBhdGFnCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitIRUFEIGRldGFjaGVkIGZyb20gYXRhZworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoaWxlIHJldmVydGluZyBjb21taXQgKGNvbmZsaWN0cyknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBiZWZvcmUgPnRvLXJldmVydC50eHQgJiYKKwl0ZXN0X2NvbW1pdCBiZWZvcmUgdG8tcmV2ZXJ0LnR4dCAmJgorCWVjaG8gb2xkID50by1yZXZlcnQudHh0ICYmCisJdGVzdF9jb21taXQgb2xkIHRvLXJldmVydC50eHQgJiYKKwllY2hvIG5ldyA+dG8tcmV2ZXJ0LnR4dCAmJgorCXRlc3RfY29tbWl0IG5ldyB0by1yZXZlcnQudHh0ICYmCisJVE9fUkVWRVJUPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgJFRPX1JFVkVSVCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJFRPX1JFVkVSVC4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IHJldmVydCAtLWNvbnRpbnVlIikKKyAgKHVzZSAiZ2l0IHJldmVydCAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IHJldmVydCAtLWFib3J0IiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pCisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCisJYm90aCBtb2RpZmllZDogICB0by1yZXZlcnQudHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGlsZSByZXZlcnRpbmcgY29tbWl0IChjb25mbGljdHMgcmVzb2x2ZWQpJyAnCisJZWNobyByZXZlcnRlZCA+dG8tcmV2ZXJ0LnR4dCAmJgorCWdpdCBhZGQgdG8tcmV2ZXJ0LnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK1lvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJFRPX1JFVkVSVC4KKyAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biAiZ2l0IHJldmVydCAtLWNvbnRpbnVlIikKKyAgKHVzZSAiZ2l0IHJldmVydCAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IHJldmVydCAtLWFib3J0IiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pCisKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzdG9yZSAtLXN0YWdlZCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisJbW9kaWZpZWQ6ICAgdG8tcmV2ZXJ0LnR4dAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGFmdGVyIHJldmVydGluZyBjb21taXQnICcKKwlnaXQgcmV2ZXJ0IC0tY29udGludWUgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIG1hc3Rlcgorbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoaWxlIHJldmVydGluZyBhZnRlciBjb21taXR0aW5nIGNvbmZsaWN0IHJlc29sdXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXZlcnQgLS1hYm9ydCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG5ldyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgb2xkIG5ldyAmJgorCWVjaG8gcmV2ZXJ0ZWQgPnRvLXJldmVydC50eHQgJiYKKwlnaXQgY29tbWl0IC1hICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorUmV2ZXJ0IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KKyAgKHJ1biAiZ2l0IHJldmVydCAtLWNvbnRpbnVlIiB0byBjb250aW51ZSkKKyAgKHVzZSAiZ2l0IHJldmVydCAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IHJldmVydCAtLWFib3J0IiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIGRpZmZlcmVudCBudW1iZXIgb2YgY29tbWl0cyByZWJhc2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2V2ZXJhbF9jb21taXRzICYmCisJdGVzdF9jb21taXQgb25lX2NvbW1pdCBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fY29tbWl0IG1haW4udHh0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlX2NvbW1pdCBtYWluLnR4dCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IGZvdXJfY29tbWl0IG1haW4udHh0IGZvdXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiBvbmUgY29tbWFuZCBkb25lIG5vdGhpbmcgcmVtYWluaW5nJyAnCisJRkFLRV9MSU5FUz0iZXhlY19leGl0XzE1IiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZCBkb25lICgxIGNvbW1hbmQgZG9uZSk6CisgICBleGVjIGV4aXQgMTUKK05vIGNvbW1hbmRzIHJlbWFpbmluZy4KK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2NvbW1pdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogdHdvIGNvbW1hbmRzIGRvbmUgd2l0aCBzb21lIHdoaXRlIGxpbmVzIGluIGRvbmUgZmlsZScgJworCUZBS0VfTElORVM9IjEgPiBleGVjX2V4aXRfMTUgIDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReKSAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5eKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBwaWNrICRDT01NSVQyIHR3b19jb21taXQKKyAgIGV4ZWMgZXhpdCAxNQorTmV4dCBjb21tYW5kcyB0byBkbyAoMiByZW1haW5pbmcgY29tbWFuZHMpOgorICAgcGljayAkQ09NTUlUMyB0aHJlZV9jb21taXQKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9jb21taXQKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2NvbW1pdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogdHdvIHJlbWFpbmluZyBjb21tYW5kcyB3aXRoIHNvbWUgd2hpdGUgbGluZXMgaW4gdG9kbyBmaWxlJyAnCisJRkFLRV9MSU5FUz0iMSAyIGV4ZWNfZXhpdF8xNSAzID4gNCIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH40KSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReKSAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5eKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgSEVBRH40ICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDMgY29tbWFuZHMgZG9uZSk6CisgICBwaWNrICRDT01NSVQyIHR3b19jb21taXQKKyAgIGV4ZWMgZXhpdCAxNQorICAoc2VlIG1vcmUgaW4gZmlsZSAuZ2l0L3JlYmFzZS1tZXJnZS9kb25lKQorTmV4dCBjb21tYW5kcyB0byBkbyAoMiByZW1haW5pbmcgY29tbWFuZHMpOgorICAgcGljayAkQ09NTUlUMyB0aHJlZV9jb21taXQKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9jb21taXQKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2NvbW1pdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogaGFuZGxlIG5vdC15ZXQtc3RhcnRlZCByZWJhc2UgLWkgZ3JhY2VmdWxseScgJworCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJQ09NTUlUPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJRURJVE9SPSJnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitPbiBicmFuY2ggc2V2ZXJhbF9jb21taXRzCitObyBjb21tYW5kcyBkb25lLgorTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVCBmb3VyX2NvbW1pdAorICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfY29tbWl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaCBiL3QvdDc1MTMtaW50ZXJwcmV0LXRyYWlsZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2MDI3OTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaApAQCAtMCwwICsxLDE0NzkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIDIwMTQgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgaW50ZXJwcmV0LXRyYWlsZXJzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBXaGVuIHdlIHdhbnQgb25lIHRyYWlsaW5nIHNwYWNlIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLCBsZXQncyB1c2Ugc2VkCisjIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHNwYWNlcyBhcmUgbm90IHJlbW92ZWQgYnkgYW55IGF1dG9tYXRpYyB0b29sLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCTogPmVtcHR5ICYmCisJY2F0ID5iYXNpY19tZXNzYWdlIDw8LVxFT0YgJiYKKwkJc3ViamVjdAorCisJCWJvZHkKKwlFT0YKKwljYXQgPmNvbXBsZXhfbWVzc2FnZV9ib2R5IDw8LVxFT0YgJiYKKwkJbXkgc3ViamVjdAorCisJCW15IGJvZHkgd2hpY2ggaXMgbG9uZworCQlhbmQgY29udGFpbnMgc29tZSBzcGVjaWFsCisJCWNoYXJzIGxpa2UgOiA9ID8gIQorCisJRU9GCisJc2VkIC1lICJzLyBaXCQvIC8iID5jb21wbGV4X21lc3NhZ2VfdHJhaWxlcnMgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieTogWgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJY2F0ID5iYXNpY19wYXRjaCA8PC1cRU9GCisJCS0tLQorCQkgZm9vLnR4dCB8IDIgKy0KKwkJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCisJCWRpZmYgLS1naXQgYS9mb28udHh0IGIvZm9vLnR4dAorCQlpbmRleCAwMzUzNzY3Li4xZDkxYWExIDEwMDY0NAorCQktLS0gYS9mb28udHh0CisJCSsrKyBiL2Zvby50eHQKKwkJQEAgLTEsMyArMSwzIEBACisKKwkJLWJhcgorCQkrYmF6CisKKwkJLS0KKwkJMS45LnJjMC4xMS5nYTU2MmRkYworCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhvdXQgY29uZmlnJyAnCisJc2VkIC1lICJzLyBaXCQvIC8iID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJYWNrOiBQZWZmCisJCVJldmlld2VkLWJ5OiBaCisJCUFja2VkLWJ5OiBKb2hhbgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2sgPSBQZWZmIiAtLXRyYWlsZXIgIlJldmlld2VkLWJ5IiBcCisJCS0tdHJhaWxlciAiQWNrZWQtYnk6IEpvaGFuIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhvdXQgY29uZmlnIGluIGFub3RoZXIgb3JkZXInICcKKwlzZWQgLWUgInMvIFpcJC8gLyIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlBY2tlZC1ieTogSm9oYW4KKwkJUmV2aWV3ZWQtYnk6IFoKKwkJYWNrOiBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIkFja2VkLWJ5OiBKb2hhbiIgLS10cmFpbGVyICJSZXZpZXdlZC1ieSIgXAorCQktLXRyYWlsZXIgImFjayA9IFBlZmYiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS10cmltLWVtcHR5IHdpdGhvdXQgY29uZmlnJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJYWNrOiBQZWZmCisJCUFja2VkLWJ5OiBKb2hhbgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciBhY2s9UGVmZiBcCisJCS0tdHJhaWxlciAiUmV2aWV3ZWQtYnkiIC0tdHJhaWxlciAiQWNrZWQtYnk6IEpvaGFuIiBcCisJCS0tdHJhaWxlciAic29iOiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbmZpZyBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCUFja2VkLWJ5OiBKb2hhbgorCQlSZXZpZXdlZC1ieTogUGVmZgorCUVPRgorCXsgZWNobzsgZWNobyAiQWNrZWQtYnk6IEpvaGFuIjsgfSB8CisJZ2l0IC1jICJ0cmFpbGVyLkFja2VkLWJ5LmlmZXhpc3RzPWFkZGlmZGlmZmVyZW50IiBpbnRlcnByZXQtdHJhaWxlcnMgXAorCQktLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBQZWZmIiAtLXRyYWlsZXIgIkFja2VkLWJ5OiBKb2hhbiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG9ubHkgYSB0aXRsZSBpbiB0aGUgbWVzc2FnZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlhcmVhOiBjaGFuZ2UKKworCQlSZXZpZXdlZC1ieTogUGVmZgorCQlBY2tlZC1ieTogSm9oYW4KKwlFT0YKKwllY2hvICJhcmVhOiBjaGFuZ2UiIHwKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJBY2tlZC1ieTogSm9oYW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBtdWx0aWxpbmUgdGl0bGUgaW4gdGhlIG1lc3NhZ2UnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJcGxhY2Ugb2YKKwkJY29kZTogY2hhbmdlCisKKwkJUmV2aWV3ZWQtYnk6IFBlZmYKKwkJQWNrZWQtYnk6IEpvaGFuCisJRU9GCisJcHJpbnRmICIlc1xuIiAicGxhY2Ugb2YiICJjb2RlOiBjaGFuZ2UiIHwKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJBY2tlZC1ieTogSm9oYW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBub24tdHJhaWxlciBsaW5lcyBtaXhlZCB3aXRoIFNpZ25lZC1vZmYtYnknICcKKwljYXQgPnBhdGNoIDw8LVxFT0YgJiYKKworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCVNpZ25lZC1vZmYtYnk6IGEgPGFAZXhhbXBsZS5jb20+CisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCUVPRgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJU2lnbmVkLW9mZi1ieTogYSA8YUBleGFtcGxlLmNvbT4KKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRva2VuOiB2YWx1ZQorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJ0b2tlbjogdmFsdWUiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBub24tdHJhaWxlciBsaW5lcyBtaXhlZCB3aXRoIGNoZXJyeSBwaWNrZWQgZnJvbScgJworCWNhdCA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgeCkKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJRU9GCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCB4KQorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdG9rZW46IHZhbHVlCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInRva2VuOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vbi10cmFpbGVyIGxpbmVzIG1peGVkIHdpdGggYSBjb25maWd1cmVkIHRyYWlsZXInICcKKwljYXQgPnBhdGNoIDw8LVxFT0YgJiYKKworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCU15LXRyYWlsZXI6IHgKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJRU9GCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQlNeS10cmFpbGVyOiB4CisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0b2tlbjogdmFsdWUKKwlFT0YKKwl0ZXN0X2NvbmZpZyB0cmFpbGVyLm15LmtleSAiTXktdHJhaWxlcjogIiAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJ0b2tlbjogdmFsdWUiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBub24tdHJhaWxlciBsaW5lcyBtaXhlZCB3aXRoIGEgbm9uLWNvbmZpZ3VyZWQgdHJhaWxlcicgJworCWNhdCA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJSS1hbS1ub3QtY29uZmlndXJlZDogeAorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwlFT0YKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCUktYW0tbm90LWNvbmZpZ3VyZWQ6IHgKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisKKwkJdG9rZW46IHZhbHVlCisJRU9GCisJdGVzdF9jb25maWcgdHJhaWxlci5teS5rZXkgIk15LXRyYWlsZXI6ICIgJiYKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAidG9rZW46IHZhbHVlIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggYWxsIG5vbi1jb25maWd1cmVkIHRyYWlsZXJzJyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GICYmCisKKwkJSS1hbS1ub3QtY29uZmlndXJlZDogeAorCQlJLWFtLWFsc28tbm90LWNvbmZpZ3VyZWQ6IHgKKwlFT0YKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlJLWFtLW5vdC1jb25maWd1cmVkOiB4CisJCUktYW0tYWxzby1ub3QtY29uZmlndXJlZDogeAorCQl0b2tlbjogdmFsdWUKKwlFT0YKKwl0ZXN0X2NvbmZpZyB0cmFpbGVyLm15LmtleSAiTXktdHJhaWxlcjogIiAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJ0b2tlbjogdmFsdWUiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBub24tdHJhaWxlciBsaW5lcyBvbmx5JyAnCisJY2F0ID5wYXRjaCA8PC1cRU9GICYmCisKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJRU9GCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisKKwkJdG9rZW46IHZhbHVlCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInRva2VuOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaW5lIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlIGlzIG5vdCB0cmFpbGVyJyAnCisJcV90b190YWIgPnBhdGNoIDw8LVxFT0YgJiYKKworCQlRdG9rZW46IHZhbHVlCisJRU9GCisJcV90b190YWIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlRdG9rZW46IHZhbHVlCisKKwkJdG9rZW46IHZhbHVlCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInRva2VuOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgZmllbGQgdHJlYXRlZCBhcyBvbmUgdHJhaWxlciBmb3IgMjUlIGNoZWNrJyAnCisJcV90b190YWIgPnBhdGNoIDw8LVxFT0YgJiYKKworCQlTaWduZWQtb2ZmLWJ5OiBhIDxhQGV4YW1wbGUuY29tPgorCQluYW1lOiB2YWx1ZSBvbgorCQlRbXVsdGlwbGUgbGluZXMKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwlFT0YKKwlxX3RvX3RhYiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCVNpZ25lZC1vZmYtYnk6IGEgPGFAZXhhbXBsZS5jb20+CisJCW5hbWU6IHZhbHVlIG9uCisJCVFtdWx0aXBsZSBsaW5lcworCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQl0aGlzIGlzIG5vdCBhIHRyYWlsZXIKKwkJdGhpcyBpcyBub3QgYSB0cmFpbGVyCisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQluYW1lOiB2YWx1ZQorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJuYW1lOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgZmllbGQgdHJlYXRlZCBhcyBhdG9taWMgZm9yIHBsYWNlbWVudCcgJworCXFfdG9fdGFiID5wYXRjaCA8PC1cRU9GICYmCisKKwkJYW5vdGhlcjogdHJhaWxlcgorCQluYW1lOiB2YWx1ZSBvbgorCQlRbXVsdGlwbGUgbGluZXMKKwkJYW5vdGhlcjogdHJhaWxlcgorCUVPRgorCXFfdG9fdGFiID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJYW5vdGhlcjogdHJhaWxlcgorCQluYW1lOiB2YWx1ZSBvbgorCQlRbXVsdGlwbGUgbGluZXMKKwkJbmFtZTogdmFsdWUKKwkJYW5vdGhlcjogdHJhaWxlcgorCUVPRgorCXRlc3RfY29uZmlnIHRyYWlsZXIubmFtZS53aGVyZSBhZnRlciAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJuYW1lOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgZmllbGQgdHJlYXRlZCBhcyBhdG9taWMgZm9yIHJlcGxhY2VtZW50JyAnCisJcV90b190YWIgPnBhdGNoIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IHZhbHVlIG9uCisJCVFtdWx0aXBsZSBsaW5lcworCQlhbm90aGVyOiB0cmFpbGVyCisJRU9GCisJcV90b190YWIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJbmFtZTogdmFsdWUKKwlFT0YKKwl0ZXN0X2NvbmZpZyB0cmFpbGVyLm5hbWUuaWZleGlzdHMgcmVwbGFjZSAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJuYW1lOiB2YWx1ZSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgZmllbGQgdHJlYXRlZCBhcyBhdG9taWMgZm9yIGRpZmZlcmVuY2UgY2hlY2snICcKKwlxX3RvX3RhYiA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRc2Vjb25kIGxpbmUKKwkJYW5vdGhlcjogdHJhaWxlcgorCUVPRgorCXRlc3RfY29uZmlnIHRyYWlsZXIubmFtZS5pZmV4aXN0cyBhZGRJZkRpZmZlcmVudCAmJgorCisJcV90b190YWIgPnRyYWlsZXIgPDwtXEVPRiAmJgorCQluYW1lOiBmaXJzdCBsaW5lCisJCVFzZWNvbmQgbGluZQorCUVPRgorCXFfdG9fdGFiID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJYW5vdGhlcjogdHJhaWxlcgorCQluYW1lOiBmaXJzdCBsaW5lCisJCVFzZWNvbmQgbGluZQorCQlhbm90aGVyOiB0cmFpbGVyCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIiQoY2F0IHRyYWlsZXIpIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlxX3RvX3RhYiA+dHJhaWxlciA8PC1cRU9GICYmCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUVFRUVFzZWNvbmQgbGluZQorCUVPRgorCXFfdG9fdGFiID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJYW5vdGhlcjogdHJhaWxlcgorCQluYW1lOiBmaXJzdCBsaW5lCisJCVFzZWNvbmQgbGluZQorCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUVFRUVFzZWNvbmQgbGluZQorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICIkKGNhdCB0cmFpbGVyKSIgcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJcV90b190YWIgPnRyYWlsZXIgPDwtXEVPRiAmJgorCQluYW1lOiBmaXJzdCBsaW5lICpESUZGRVJFTlQqCisJCVFzZWNvbmQgbGluZQorCUVPRgorCXFfdG9fdGFiID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJYW5vdGhlcjogdHJhaWxlcgorCQluYW1lOiBmaXJzdCBsaW5lCisJCVFzZWNvbmQgbGluZQorCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IGZpcnN0IGxpbmUgKkRJRkZFUkVOVCoKKwkJUXNlY29uZCBsaW5lCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIiQoY2F0IHRyYWlsZXIpIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpbGluZSBmaWVsZCB0cmVhdGVkIGFzIGF0b21pYyBmb3IgbmVpZ2hib3IgY2hlY2snICcKKwlxX3RvX3RhYiA+cGF0Y2ggPDwtXEVPRiAmJgorCisJCWFub3RoZXI6IHRyYWlsZXIKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRc2Vjb25kIGxpbmUKKwkJYW5vdGhlcjogdHJhaWxlcgorCUVPRgorCXRlc3RfY29uZmlnIHRyYWlsZXIubmFtZS53aGVyZSBhZnRlciAmJgorCXRlc3RfY29uZmlnIHRyYWlsZXIubmFtZS5pZmV4aXN0cyBhZGRJZkRpZmZlcmVudE5laWdoYm9yICYmCisKKwlxX3RvX3RhYiA+dHJhaWxlciA8PC1cRU9GICYmCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUXNlY29uZCBsaW5lCisJRU9GCisJcV90b190YWIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUXNlY29uZCBsaW5lCisJCWFub3RoZXI6IHRyYWlsZXIKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiJChjYXQgdHJhaWxlcikiIHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCXFfdG9fdGFiID50cmFpbGVyIDw8LVxFT0YgJiYKKwkJbmFtZTogZmlyc3QgbGluZQorCQlRUVFRUXNlY29uZCBsaW5lCisJRU9GCisJcV90b190YWIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhbm90aGVyOiB0cmFpbGVyCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUXNlY29uZCBsaW5lCisJCW5hbWU6IGZpcnN0IGxpbmUKKwkJUVFRUVFzZWNvbmQgbGluZQorCQlhbm90aGVyOiB0cmFpbGVyCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIiQoY2F0IHRyYWlsZXIpIiBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29uZmlnIHNldHVwJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5rZXkgIkFja2VkLWJ5OiAiICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJQWNrZWQtYnk6IFBlZmYKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgImFjayA9IFBlZmYiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgIkFja2VkLWJ5ID0gUGVmZiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQWNrZWQtYnkgOlBlZmYiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb25maWcgc2V0dXAgYW5kICI6PSIgYXMgc2VwYXJhdG9ycycgJworCWdpdCBjb25maWcgdHJhaWxlci5zZXBhcmF0b3JzICI6PSIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmtleSAiQWNrZWQtYnk9ICIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlBY2tlZC1ieT0gUGVmZgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiYWNrID0gUGVmZiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQWNrZWQtYnk9IFBlZmYiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgIkFja2VkLWJ5IDogUGVmZiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbmZpZyBzZXR1cCBhbmQgIiUiIGFzIHNlcGFyYXRvcnMnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2VwYXJhdG9ycyAiJSIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlidWclIDQyCisJCWNvdW50JSAxMAorCQlidWclIDQyMgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiYnVnID0gNDIiIFwKKwkJLS10cmFpbGVyIGNvdW50JTEwIC0tdHJhaWxlciAidGVzdDogc3R1ZmYiIFwKKwkJLS10cmFpbGVyICJidWcgJSA0MjIiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCAiJSIgYXMgc2VwYXJhdG9ycyBhbmQgYSBtZXNzYWdlIHdpdGggdHJhaWxlcnMnICcKKwljYXQgPnNwZWNpYWxfbWVzc2FnZSA8PC1cRU9GICYmCisJCVNwZWNpYWwgTWVzc2FnZQorCisJCWJ1ZyUgNDIKKwkJY291bnQlIDEwCisJCWJ1ZyUgNDIyCisJRU9GCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCVNwZWNpYWwgTWVzc2FnZQorCisJCWJ1ZyUgNDIKKwkJY291bnQlIDEwCisJCWJ1ZyUgNDIyCisJCWNvdW50JSAxMDAKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciBjb3VudCUxMDAgXAorCQlzcGVjaWFsX21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbmZpZyBzZXR1cCBhbmQgIjo9IyIgYXMgc2VwYXJhdG9ycycgJworCWdpdCBjb25maWcgdHJhaWxlci5zZXBhcmF0b3JzICI6PSMiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmJ1Zy5rZXkgIkJ1ZyAjIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCUJ1ZyAjNDIKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgImJ1ZyA9IDQyIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29tbWl0IGJhc2ljIG1lc3NhZ2UnICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwllY2hvID4+ZXhwZWN0ZWQgJiYKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIDxiYXNpY19tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBiYXNpYyBwYXRjaCcgJworCWNhdCBiYXNpY19tZXNzYWdlID5pbnB1dCAmJgorCWNhdCBiYXNpY19wYXRjaCA+PmlucHV0ICYmCisJY2F0IGJhc2ljX21lc3NhZ2UgPmV4cGVjdGVkICYmCisJZWNobyA+PmV4cGVjdGVkICYmCisJY2F0IGJhc2ljX3BhdGNoID4+ZXhwZWN0ZWQgJiYKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29tbWl0IGNvbXBsZXggbWVzc2FnZSBhcyBhcmd1bWVudCcgJworCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSBjb21wbGV4X21lc3NhZ2VfdHJhaWxlcnMgPmNvbXBsZXhfbWVzc2FnZSAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggMiBmaWxlcyBhcmd1bWVudHMnICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+PmV4cGVjdGVkICYmCisJZWNobyA+PmV4cGVjdGVkICYmCisJY2F0IGJhc2ljX3BhdGNoID4+ZXhwZWN0ZWQgJiYKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIGNvbXBsZXhfbWVzc2FnZSBpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMgQ292ZXIgbXVsdGlwbGUgY29tbWVudCBjaGFyYWN0ZXJzIHdpdGggdGhlIHNhbWUgdGVzdCBpbnB1dC4KK2ZvciBjaGFyIGluICIjIiAiOyIKK2RvCisJY2FzZSAiJGNoYXIiIGluCisJIiMiKQorCQkjIFRoaXMgaXMgdGhlIGRlZmF1bHQsIHNvIGxldCdzIGV4cGxpY2l0bHkgX25vdF8KKwkJIyBzZXQgYW55IGNvbmZpZyB0byBtYWtlIHN1cmUgaXQgYmVoYXZlcyBhcyB3ZSBleHBlY3QuCisJCTs7CisJKikKKwkJY29uZmlnPSItYyBjb3JlLmNvbW1lbnRDaGFyPSRjaGFyIgorCQk7OworCWVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIndpdGggbWVzc2FnZSB0aGF0IGhhcyBjb21tZW50cyAoJGNoYXIpIiAnCisJCWNhdCBiYXNpY19tZXNzYWdlID5tZXNzYWdlX3dpdGhfY29tbWVudHMgJiYKKwkJc2VkIC1lICJzLyBaXCQvIC8iIFwKKwkJICAgIC1lICJzLyMvJGNoYXIvZyIgPj5tZXNzYWdlX3dpdGhfY29tbWVudHMgPDwtRU9GICYmCisJCQkjIGNvbW1lbnQKKworCQkJIyBvdGhlciBjb21tZW50CisJCQlDYzogWgorCQkJIyB5ZXQgYW5vdGhlciBjb21tZW50CisJCQlSZXZpZXdlZC1ieTogSm9oYW4KKwkJCVJldmlld2VkLWJ5OiBaCisJCQkjIGxhc3QgY29tbWVudAorCisJCUVPRgorCQljYXQgYmFzaWNfcGF0Y2ggPj5tZXNzYWdlX3dpdGhfY29tbWVudHMgJiYKKwkJY2F0IGJhc2ljX21lc3NhZ2UgPmV4cGVjdGVkICYmCisJCXNlZCAtZSAicy8jLyRjaGFyL2ciID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQkJIyBjb21tZW50CisKKwkJCVJldmlld2VkLWJ5OiBKb2hhbgorCQkJQ2M6IFBlZmYKKwkJCSMgbGFzdCBjb21tZW50CisKKwkJRU9GCisJCWNhdCBiYXNpY19wYXRjaCA+PmV4cGVjdGVkICYmCisJCWdpdCAkY29uZmlnIGludGVycHJldC10cmFpbGVycyBcCisJCQktLXRyaW0tZW1wdHkgLS10cmFpbGVyICJDYzogUGVmZiIgXAorCQkJbWVzc2FnZV93aXRoX2NvbW1lbnRzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG1lc3NhZ2UgdGhhdCBoYXMgYW4gb2xkIHN0eWxlIGNvbmZsaWN0IGJsb2NrJyAnCisJY2F0IGJhc2ljX21lc3NhZ2UgPm1lc3NhZ2Vfd2l0aF9jb21tZW50cyAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+Pm1lc3NhZ2Vfd2l0aF9jb21tZW50cyA8PC1cRU9GICYmCisJCSMgY29tbWVudAorCisJCSMgb3RoZXIgY29tbWVudAorCQlDYzogWgorCQkjIHlldCBhbm90aGVyIGNvbW1lbnQKKwkJUmV2aWV3ZWQtYnk6IEpvaGFuCisJCVJldmlld2VkLWJ5OiBaCisJCSMgbGFzdCBjb21tZW50CisKKwkJQ29uZmxpY3RzOgorCisJRU9GCisJY2F0IGJhc2ljX21lc3NhZ2UgPmV4cGVjdGVkICYmCisJY2F0ID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQkjIGNvbW1lbnQKKworCQlSZXZpZXdlZC1ieTogSm9oYW4KKwkJQ2M6IFBlZmYKKwkJIyBsYXN0IGNvbW1lbnQKKworCQlDb25mbGljdHM6CisKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgIkNjOiBQZWZmIiBtZXNzYWdlX3dpdGhfY29tbWVudHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1pdCBjb21wbGV4IG1lc3NhZ2UgYW5kIHRyYWlsZXIgYXJncycgJworCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQnVnICM0MgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb21wbGV4IHBhdGNoLCBhcmdzIGFuZCAtLXRyaW0tZW1wdHknICcKKwljYXQgY29tcGxleF9tZXNzYWdlID5jb21wbGV4X3BhdGNoICYmCisJY2F0IGJhc2ljX3BhdGNoID4+Y29tcGxleF9wYXRjaCAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwljYXQgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUFja2VkLWJ5PSBQZWZmCisJCUJ1ZyAjNDIKKwlFT0YKKwljYXQgYmFzaWNfcGF0Y2ggPj5leHBlY3RlZCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgPGNvbXBsZXhfcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi1wbGFjZSBlZGl0aW5nIHdpdGggYmFzaWMgcGF0Y2gnICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+bWVzc2FnZSAmJgorCWNhdCBiYXNpY19wYXRjaCA+Pm1lc3NhZ2UgJiYKKwljYXQgYmFzaWNfbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwllY2hvID4+ZXhwZWN0ZWQgJiYKKwljYXQgYmFzaWNfcGF0Y2ggPj5leHBlY3RlZCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS1pbi1wbGFjZSBtZXNzYWdlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi1wbGFjZSBlZGl0aW5nIHdpdGggYWRkaXRpb25hbCB0cmFpbGVyJyAnCisJY2F0IGJhc2ljX21lc3NhZ2UgPm1lc3NhZ2UgJiYKKwljYXQgYmFzaWNfcGF0Y2ggPj5tZXNzYWdlICYmCisJY2F0IGJhc2ljX21lc3NhZ2UgPmV4cGVjdGVkICYmCisJZWNobyA+PmV4cGVjdGVkICYmCisJY2F0ID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlSZXZpZXdlZC1ieTogQWxpY2UKKwlFT0YKKwljYXQgYmFzaWNfcGF0Y2ggPj5leHBlY3RlZCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogQWxpY2UiIC0taW4tcGxhY2UgbWVzc2FnZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tcGxhY2UgZWRpdGluZyBvbiBzdGRpbiBkaXNhbGxvd2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBBbGljZSIgLS1pbi1wbGFjZSA8IGJhc2ljX21lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tcGxhY2UgZWRpdGluZyBvbiBub24tZXhpc3RpbmcgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogQWxpY2UiIC0taW4tcGxhY2Ugbm9uZXhpc3RpbmcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBub25leGlzdGluZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgImluLXBsYWNlIGVkaXRpbmcgZG9lc24ndCBjbG9iYmVyIG9yaWdpbmFsIGZpbGUgb24gZXJyb3IiICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+bWVzc2FnZSAmJgorCWNobW9kIC1yIG1lc3NhZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IEFsaWNlIiAtLWluLXBsYWNlIG1lc3NhZ2UgJiYKKwljaG1vZCArciBtZXNzYWdlICYmCisJdGVzdF9jbXAgbWVzc2FnZSBiYXNpY19tZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJ3aGVyZSA9IGJlZm9yZSInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYnVnLndoZXJlICJiZWZvcmUiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUFja2VkLWJ5PSBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRpbmcgY29uZmlndXJhdGlvbiB3aXRoICItLXdoZXJlIGFmdGVyIicgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImJlZm9yZSIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXdoZXJlIGFmdGVyIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCWNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJ3aGVyZSA9IGJlZm9yZSIgd2l0aCAiLS1uby13aGVyZSInICcKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0td2hlcmUgYWZ0ZXIgLS1uby13aGVyZSAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJ3aGVyZSA9IGFmdGVyIicgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImFmdGVyIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiBjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAid2hlcmUgPSBlbmQiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnJldmlldy5rZXkgIlJldmlld2VkLWJ5IiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5yZXZpZXcud2hlcmUgImVuZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVJldmlld2VkLWJ5OiBKdW5pbworCQlSZXZpZXdlZC1ieTogSm9oYW5uZXMKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IEp1bmlvIiAtLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBKb2hhbm5lcyIgXAorCQljb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAid2hlcmUgPSBzdGFydCInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIucmV2aWV3LmtleSAiUmV2aWV3ZWQtYnkiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnJldmlldy53aGVyZSAic3RhcnQiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJUmV2aWV3ZWQtYnk6IEpvaGFubmVzCisJCVJldmlld2VkLWJ5OiBKdW5pbworCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBKdW5pbyIgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogSm9oYW5uZXMiIFwKKwkJY29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgIndoZXJlID0gYmVmb3JlIiBmb3IgYSB0b2tlbiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBtZXNzYWdlJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnJldmlldy5rZXkgIlJldmlld2VkLWJ5OiIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIucmV2aWV3LndoZXJlICJiZWZvcmUiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTpKb2hhbgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQktLXRyYWlsZXIgInJldmlldzogSm9oYW4iIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAid2hlcmUgPSBiZWZvcmUiIGFuZCAtLXRyaW0tZW1wdHknICcKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJY2F0ID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQ2CisJCUJ1ZyAjNDIKKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6Sm9oYW4KKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAicmV2aWV3OiBKb2hhbiIgXAorCQktLXRyYWlsZXIgIkJ1ZzogNDYiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgZGVmYXVsdCBpcyAiaWZFeGlzdHMgPSBhZGRJZkRpZmZlcmVudE5laWdoYm9yIicgJworCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgImlmRXhpc3RzIiBpcyBub3cgImFkZElmRGlmZmVyZW50IicgJworCWdpdCBjb25maWcgdHJhaWxlci5pZmV4aXN0cyAiYWRkSWZEaWZmZXJlbnQiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiAtLXRyYWlsZXIgInJldmlldzoiIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gYWRkSWZEaWZmZXJlbnQiIHdpdGggIndoZXJlID0gZW5kIicgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2suaWZFeGlzdHMgImFkZElmRGlmZmVyZW50IiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImVuZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUFja2VkLWJ5PSBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGFkZElmRGlmZmVyZW50IiB3aXRoICJ3aGVyZSA9IGJlZm9yZSInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudCIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLndoZXJlICJiZWZvcmUiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZFeGlzdHMgPSBhZGRJZkRpZmZlcmVudE5laWdoYm9yIiB3aXRoICJ3aGVyZSA9IGVuZCInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudE5laWdoYm9yIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImVuZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlUZXN0ZWQtYnk6IEpha3ViCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQktLXRyYWlsZXIgIlRlc3RlZC1ieTogSmFrdWIiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgIHdpdGggIndoZXJlID0gYWZ0ZXIiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLndoZXJlICJhZnRlciIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlUZXN0ZWQtYnk6IEpha3ViCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJidWc6IDQyIiBcCisJCS0tdHJhaWxlciAiVGVzdGVkLWJ5OiBKYWt1YiIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJhY2s6IFBlZmYiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZFeGlzdHMgPSBhZGRJZkRpZmZlcmVudE5laWdoYm9yIiBhbmQgLS10cmltLWVtcHR5JyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJY2F0ID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiQWNrZWQtYnk9IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGFkZCIgd2l0aCAid2hlcmUgPSBlbmQiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5pZkV4aXN0cyAiYWRkIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImVuZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBQZWZmCisJCVRlc3RlZC1ieTogSmFrdWIKKwkJQWNrZWQtYnk9IEp1bmlvCisJCVRlc3RlZC1ieTogSm9oYW5uZXMKKwkJQWNrZWQtYnk9IFBlZmYKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiQWNrZWQtYnk9IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgIlRlc3RlZC1ieTogSmFrdWIiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiVGVzdGVkLWJ5OiBKb2hhbm5lcyIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGFkZCIgd2l0aCAid2hlcmUgPSBhZnRlciInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGQiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay53aGVyZSAiYWZ0ZXIiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiQWNrZWQtYnk9IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRpbmcgY29uZmlndXJhdGlvbiB3aXRoICItLWlmLWV4aXN0cyByZXBsYWNlIicgJworCWdpdCBjb25maWcgdHJhaWxlci5maXgua2V5ICJGaXhlczogIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5maXguaWZFeGlzdHMgImFkZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUZpeGVzOiAyMgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS1pZi1leGlzdHMgcmVwbGFjZSAtLXRyYWlsZXIgInJldmlldzoiIFwKKwkJLS10cmFpbGVyICJmaXg9NTMiIC0tdHJhaWxlciAiZml4PTIyIiAtLXRyYWlsZXIgImJ1ZzogNDIiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IHJlcGxhY2UiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5rZXkgIkZpeGVzOiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5pZkV4aXN0cyAicmVwbGFjZSIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlGaXhlczogMjIKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImZpeD01MyIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZFeGlzdHMgPSByZXBsYWNlIiB3aXRoICJ3aGVyZSA9IGFmdGVyIicgJworCWdpdCBjb25maWcgdHJhaWxlci5maXgud2hlcmUgImFmdGVyIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IDIyCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiZml4PTUzIiAtLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGRvTm90aGluZyInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuZml4LmlmRXhpc3RzICJkb05vdGhpbmciICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9NTMiIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgZGVmYXVsdCBpcyAiaWZNaXNzaW5nID0gYWRkIicgJworCWdpdCBjb25maWcgdHJhaWxlci5jYy5rZXkgIkNjOiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLndoZXJlICJiZWZvcmUiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlDYzogTGludXMKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTUzIiBcCisJCS0tdHJhaWxlciAiY2M9TGludXMiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImZpeD0yMiIgLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGluZyBjb25maWd1cmF0aW9uIHdpdGggIi0taWYtbWlzc2luZyBkb05vdGhpbmciJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmlmbWlzc2luZyAiYWRkIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS1pZi1taXNzaW5nIGRvTm90aGluZyBcCisJCS0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9NTMiIFwKKwkJLS10cmFpbGVyICJjYz1MaW51cyIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiZml4PTIyIiAtLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGVuIGRlZmF1bHQgImlmTWlzc2luZyIgaXMgImRvTm90aGluZyInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuaWZtaXNzaW5nICJkb05vdGhpbmciICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTUzIiBcCisJCS0tdHJhaWxlciAiY2M9TGludXMiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImZpeD0yMiIgLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuaWZtaXNzaW5nICJhZGQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZk1pc3NpbmcgPSBhZGQiIHdpdGggIndoZXJlID0gZW5kIicgJworCWdpdCBjb25maWcgdHJhaWxlci5jYy5rZXkgIkNjOiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLndoZXJlICJlbmQiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLmlmTWlzc2luZyAiYWRkIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUNjOiBMaW51cworCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD01MyIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJjYz1MaW51cyIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZk1pc3NpbmcgPSBhZGQiIHdpdGggIndoZXJlID0gYmVmb3JlIicgJworCWdpdCBjb25maWcgdHJhaWxlci5jYy5rZXkgIkNjOiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLndoZXJlICJiZWZvcmUiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLmlmTWlzc2luZyAiYWRkIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUNjOiBMaW51cworCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD01MyIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJjYz1MaW51cyIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZk1pc3NpbmcgPSBkb05vdGhpbmciJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLmlmTWlzc2luZyAiZG9Ob3RoaW5nIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTUzIiBcCisJCS0tdHJhaWxlciAiY2M9TGludXMiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImZpeD0yMiIgLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCAid2hlcmUiIGlzIG5vdyAiYWZ0ZXIiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLndoZXJlICJhZnRlciIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgdHJhaWxlci5hY2sud2hlcmUgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlUZXN0ZWQtYnk6IEpha3ViCisJCVRlc3RlZC1ieTogSm9oYW5uZXMKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiQWNrZWQtYnk9IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgIlRlc3RlZC1ieTogSmFrdWIiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiVGVzdGVkLWJ5OiBKb2hhbm5lcyIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggc2ltcGxlIGNvbW1hbmQnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5rZXkgIlNpZ25lZC1vZmYtYnk6ICIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi53aGVyZSAiYWZ0ZXIiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uaWZFeGlzdHMgImFkZElmRGlmZmVyZW50TmVpZ2hib3IiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uY29tbWFuZCAiZWNobyBcIkEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+XCIiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9MjIiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29tbWFuZCB1c2luZyBjb21taXR0ZXIgaW5mb3JtYXRpb24nICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnQiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uY29tbWFuZCAiZWNobyBcIlwkR0lUX0NPTU1JVFRFUl9OQU1FIDxcJEdJVF9DT01NSVRURVJfRU1BSUw+XCIiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb21tYW5kIHVzaW5nIGF1dGhvciBpbmZvcm1hdGlvbicgJworCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmtleSAiU2lnbmVkLW9mZi1ieTogIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5zaWduLndoZXJlICJhZnRlciIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5jb21tYW5kICJlY2hvIFwiXCRHSVRfQVVUSE9SX05BTUUgPFwkR0lUX0FVVEhPUl9FTUFJTD5cIiIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBjb21taXQnICcKKwllY2hvICJDb250ZW50IG9mIHRoZSBmaXJzdCBjb21taXQuIiA+IGEudHh0ICYmCisJZ2l0IGFkZCBhLnR4dCAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBmaWxlIGEudHh0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgdXNpbmcgJEFSRycgJworCWdpdCBjb25maWcgdHJhaWxlci5maXguaWZFeGlzdHMgInJlcGxhY2UiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5jb21tYW5kICJnaXQgbG9nIC0xIC0tb25lbGluZSAtLWZvcm1hdD1cIiVoICglcylcIiAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MTQgXCRBUkciICYmCisJRklYRUQ9JChnaXQgbG9nIC0xIC0tb25lbGluZSAtLWZvcm1hdD0iJWggKCVzKSIgLS1hYmJyZXYtY29tbWl0IC0tYWJicmV2PTE0IEhFQUQpICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LUVPRiAmJgorCQlGaXhlczogJEZJWEVECisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PUhFQUQiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBjb21tYW5kIHVzaW5nICRBUkcnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuZml4LmlmRXhpc3RzICJyZXBsYWNlIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5maXguY29tbWFuZCAiZmFsc2UgXCRBUkciICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LUVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD1IRUFEIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGVtcHR5IHRva2VucycgJworCWdpdCBjb25maWcgLS11bnNldCB0cmFpbGVyLmZpeC5jb21tYW5kICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKworCQlTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICI6IiAtLXRyYWlsZXIgIjp0ZXN0IiA+YWN0dWFsIDw8LUVPRiAmJgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgYnV0IG5vIGtleScgJworCWdpdCBjb25maWcgLS11bnNldCB0cmFpbGVyLnNpZ24ua2V5ICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKworCQlzaWduOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgPmFjdHVhbCA8PC1FT0YgJiYKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyBjb21tYW5kIGFuZCBubyBrZXknICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgdHJhaWxlci5yZXZpZXcua2V5ICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKworCQlyZXZpZXc6IEp1bmlvCisJCXNpZ246IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzpKdW5pbyIgPmFjdHVhbCA8PC1FT0YgJiYKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjdXQgbGluZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlteSBzdWJqZWN0CisKKwkJcmV2aWV3OiBCcmlhbgorCQlzaWduOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJaWdub3JlIHRoaXMKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciByZXZpZXc6QnJpYW4gPmFjdHVhbCA8PC1cRU9GICYmCisJCW15IHN1YmplY3QKKwkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWlnbm9yZSB0aGlzCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgdHJhaWxlcnMnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5jb21tYW5kICJlY2hvIGNvbmZpZy12YWx1ZSIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJZXhpc3Rpbmc6IGV4aXN0aW5nLXZhbHVlCisJCXNpZ246IGNvbmZpZy12YWx1ZQorCQlhZGRlZDogYWRkZWQtdmFsdWUKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFwKKwkJLS10cmFpbGVyIGFkZGVkOmFkZGVkLXZhbHVlIFwKKwkJLS1vbmx5LXRyYWlsZXJzID5hY3R1YWwgPDwtXEVPRiAmJgorCQlteSBzdWJqZWN0CisKKwkJbXkgYm9keQorCisJCWV4aXN0aW5nOiBleGlzdGluZy12YWx1ZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5LXRyYWlsZXJzIG9taXRzIG5vbi10cmFpbGVyIGluIG1pZGRsZSBvZiBibG9jaycgJworCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmNvbW1hbmQgImVjaG8gY29uZmlnLXZhbHVlIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlTaWduZWQtb2ZmLWJ5OiBub2JvZHkgPG5vYm9keUBub3doZXJlPgorCQlTaWduZWQtb2ZmLWJ5OiBzb21lYm9keSA8c29tZWJvZHlAc29tZXdoZXJlPgorCQlzaWduOiBjb25maWctdmFsdWUKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tb25seS10cmFpbGVycyA+YWN0dWFsIDw8LVxFT0YgJiYKKwkJc3ViamVjdAorCisJCWl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB0cmFpbGVycyBiZWxvdyBhcmUgc2lnbmVkLW9mZi1ieQorCQlzbyB0aGF0IHRoZXkgbWVldCB0aGUgIjI1JSB0cmFpbGVycyBHaXQga25vd3MgYWJvdXQiIGhldXJpc3RpYworCisJCVNpZ25lZC1vZmYtYnk6IG5vYm9keSA8bm9ib2R5QG5vd2hlcmU+CisJCXRoaXMgaXMgbm90IGEgdHJhaWxlcgorCQlTaWduZWQtb2ZmLWJ5OiBzb21lYm9keSA8c29tZWJvZHlAc29tZXdoZXJlPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IGlucHV0JyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uY29tbWFuZCAiZWNobyBjb25maWctdmFsdWUiICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCWV4aXN0aW5nOiBleGlzdGluZy12YWx1ZQorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgXAorCQktLW9ubHktdHJhaWxlcnMgLS1vbmx5LWlucHV0ID5hY3R1YWwgPDwtXEVPRiAmJgorCQlteSBzdWJqZWN0CisKKwkJbXkgYm9keQorCisJCWV4aXN0aW5nOiBleGlzdGluZy12YWx1ZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmZvbGQnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJZm9vOiBjb250aW51ZWQgYWNyb3NzIHNldmVyYWwgbGluZXMKKwlFT0YKKwkjIHBhc3MgdGhyb3VnaCB0ciB0byBtYWtlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgbW9yZSBvYnZpb3VzCisJdHIgXyAiICIgPDwtXEVPRiB8CisJCW15IHN1YmplY3QKKworCQlteSBib2R5CisKKwkJZm9vOl8KKwkJX19jb250aW51ZWQKKwkJX19fYWNyb3NzCisJCV9fX19zZXZlcmFsCisJCV9fX19fbGluZXMKKwkJX19fCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLW9ubHktdHJhaWxlcnMgLS1vbmx5LWlucHV0IC0tdW5mb2xkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxpbmcgb2YgLS0tIGxpbmVzIGluIGlucHV0JyAnCisJZWNobyAicmVhbC10cmFpbGVyOiBqdXN0IHJpZ2h0IiA+ZXhwZWN0ZWQgJiYKKworCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS1wYXJzZSA+YWN0dWFsIDw8LVxFT0YgJiYKKwlzdWJqZWN0CisKKwlib2R5CisKKwlub3QtYS10cmFpbGVyOiB0b28gc29vbgorCS0tLS0tLSB0aGlzIGlzIGp1c3QgYSBsaW5lIGluIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoIGEgYnVuY2ggb2YKKwktLS0tLS0gZGFzaGVzOyBpdCBkb2VzIG5vdCBoYXZlIGFueSBzeW50YWN0aWMgbWVhbmluZy4KKworCXJlYWwtdHJhaWxlcjoganVzdCByaWdodAorCS0tLQorCWJlbG93IHRoZSBkYXNoZWQgbGluZSBtYXkgYmUgYSBwYXRjaCwgZXRjLgorCisJbm90LWEtdHJhaWxlcjogdG9vIGxhdGUKKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdXBwcmVzcyAtLS0gaGFuZGxpbmcnICcKKwllY2hvICJyZWFsLXRyYWlsZXI6IGp1c3QgcmlnaHQiID5leHBlY3RlZCAmJgorCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXBhcnNlIC0tbm8tZGl2aWRlciA+YWN0dWFsIDw8LVxFT0YgJiYKKwlzdWJqZWN0CisKKwlUaGlzIGNvbW1pdCBtZXNzYWdlIGhhcyBhICItLS0iIGluIGl0LCBidXQgYmVjYXVzZSB3ZSB0ZWxsCisJaW50ZXJwcmV0LXRyYWlsZXJzIG5vdCB0byByZXNwZWN0IHRoYXQsIGl0IGhhcyBubyBlZmZlY3QuCisKKwlub3QtYS10cmFpbGVyOiB0b28gc29vbgorCS0tLQorCisJVGhpcyBpcyBzdGlsbCB0aGUgY29tbWl0IG1lc3NhZ2UgYm9keS4KKworCXJlYWwtdHJhaWxlcjoganVzdCByaWdodAorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxNC1jb21taXQtcGF0Y2guc2ggYi90L3Q3NTE0LWNvbW1pdC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OThhMjEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxNC1jb21taXQtcGF0Y2guc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2h1bmsgZWRpdCB3aXRoICJjb21taXQgLXAgLW0iJworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCit0aGVuCisJc2tpcF9hbGw9InNraXBwaW5nICckdGVzdF9kZXNjcmlwdGlvbicgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZSIKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbml0aWFsKScgJworCWVjaG8gbGluZTEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGNvbW1pdDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBodW5rICJjb21taXQgLXAgLW0gbWVzc2FnZSInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGVkaXRvcl93YXNfc3RhcnRlZCIgJiYKKwlybSAtZiBlZGl0b3Jfd2FzX3N0YXJ0ZWQgJiYKKwllY2hvIG1vcmUgPj5maWxlICYmCisJZWNobyBlIHwgZW52IEdJVF9FRElUT1I9IjogPmVkaXRvcl93YXNfc3RhcnRlZCIgZ2l0IGNvbW1pdCAtcCAtbSBjb21taXQyIGZpbGUgJiYKKwl0ZXN0IC1yIGVkaXRvcl93YXNfc3RhcnRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGh1bmsgImNvbW1pdCAtLWRyeS1ydW4gLXAgLW0gbWVzc2FnZSInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGVkaXRvcl93YXNfc3RhcnRlZCIgJiYKKwlybSAtZiBlZGl0b3Jfd2FzX3N0YXJ0ZWQgJiYKKwllY2hvIG1vcmUgPj5maWxlICYmCisJZWNobyBlIHwgZW52IEdJVF9FRElUT1I9IjogPmVkaXRvcl93YXNfc3RhcnRlZCIgZ2l0IGNvbW1pdCAtcCAtbSBjb21taXQzIGZpbGUgJiYKKwl0ZXN0IC1yIGVkaXRvcl93YXNfc3RhcnRlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTUtc3RhdHVzLXN5bWxpbmtzLnNoIGIvdC90NzUxNS1zdGF0dXMtc3ltbGlua3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWY5ODliZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTUtc3RhdHVzLXN5bWxpbmtzLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RhdHVzIGFuZCBzeW1saW5rcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAuZ2l0aWdub3JlID4uZ2l0aWdub3JlICYmCisJZWNobyBhY3R1YWwgPj4uZ2l0aWdub3JlICYmCisJZWNobyBleHBlY3QgPj4uZ2l0aWdub3JlICYmCisJbWtkaXIgZGlyICYmCisJZWNobyB4ID5kaXIvZmlsZTEgJiYKKwllY2hvIHkgPmRpci9maWxlMiAmJgorCWdpdCBhZGQgZGlyICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmsgdG8gYSBkaXJlY3RvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHN5bWxpbmsiICYmCisJbG4gLXMgZGlyIHN5bWxpbmsgJiYKKwllY2hvICI/PyBzeW1saW5rIiA+ZXhwZWN0ICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIHJlcGxhY2luZyBhIGRpcmVjdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGNvcHkgJiYgZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsIiAmJgorCW1rZGlyIGNvcHkgJiYKKwljcCBkaXIvZmlsZTEgY29weS9maWxlMSAmJgorCWVjaG8gImNoYW5nZWQgaW4gY29weSIgPmNvcHkvZmlsZTIgJiYKKwlnaXQgYWRkIGNvcHkgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCXJtIC1yZiBjb3B5ICYmCisJbG4gLXMgZGlyIGNvcHkgJiYKKwllY2hvICIgRCBjb3B5L2ZpbGUxIiA+ZXhwZWN0ICYmCisJZWNobyAiIEQgY29weS9maWxlMiIgPj5leHBlY3QgJiYKKwllY2hvICI/PyBjb3B5IiA+PmV4cGVjdCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTE2LWNvbW1pdC1yYWNlcy5zaCBiL3QvdDc1MTYtY29tbWl0LXJhY2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYyY2UxNGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE2LWNvbW1pdC1yYWNlcy5zaApAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1pdCByYWNlcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYWNlIHRvIGNyZWF0ZSBvcnBoYW4gY29tbWl0JyAnCisJd3JpdGVfc2NyaXB0IGhhcmUtZWRpdG9yIDw8LVxFT0YgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaGFyZQorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9Li9oYXJlLWVkaXRvciBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdG9ydG9pc2UgLWUgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMgPnN1YmplY3QgJiYKKwlncmVwIGhhcmUgc3ViamVjdCAmJgorCXRlc3QgLXogIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVQKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFjZSB0byBjcmVhdGUgbm9uLW9ycGhhbiBjb21taXQnICcKKwl3cml0ZV9zY3JpcHQgYWlycGxhbmUtZWRpdG9yIDw8LVxFT0YgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYWlycGxhbmUKKwlFT0YKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYnJhbmNoICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGJhc2UgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRURJVE9SPS4vYWlycGxhbmUtZWRpdG9yIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBzaGlwIC1lICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzID5zdWJqZWN0ICYmCisJZ3JlcCBhaXJwbGFuZSBzdWJqZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXiA+cGFyZW50ICYmCisJdGVzdF9jbXAgYmFzZSBwYXJlbnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTE3LXBlci1yZXBvLWVtYWlsLnNoIGIvdC90NzUxNy1wZXItcmVwby1lbWFpbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMjQwMWNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxNy1wZXItcmVwby1lbWFpbC5zaApAQCAtMCwwICsxLDE2MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxNiBEYW4gQWxvbmkKKyMgQ29weXJpZ2h0IChjKSAyMDE2IEplZmYgS2luZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdwZXItcmVwbyBmb3JjZWQgc2V0dGluZyBvZiBlbWFpbCBhZGRyZXNzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBsaWtlbHkgdXNlci51c2VDb25maWdPbmx5IHVzZSBjYXNlJyAnCisJIyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBhIHJlZmxvZyBpcyB3cml0dGVuLCBzaW5jZSB0aGF0IG5lZWRzCisJIyBhIG5vbi1zdHJpY3QgaWRlbnQuIFNvIGJlIHN1cmUgd2UgaGF2ZSBhbiBhY3R1YWwgY29tbWl0LgorCXRlc3RfY29tbWl0IGZvbyAmJgorCisJc2FuZV91bnNldCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCAmJgorCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FIEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwlnaXQgY29uZmlnIHVzZXIubmFtZSAidGVzdCIgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIudXNlQ29uZmlnT25seSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIGNvbW1pdHRpbmcgaWYgY2xvbmUgZW1haWwgaXMgbm90IHNldCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgY29tbWl0dGluZyBpZiBjbG9uZSBlbWFpbCBpcyBub3Qgc2V0LCBidXQgRU1BSUwgc2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEVNQUlMPXRlc3RAZmFpbC5jb20gZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZWVkcyBjb21taXR0aW5nIGlmIGNsb25lIGVtYWlsIGlzIHNldCcgJworCXRlc3RfY29uZmlnIHVzZXIuZW1haWwgInRlc3RAb2suY29tIiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2VlZHMgY2xvbmluZyBpZiBnbG9iYWwgZW1haWwgaXMgbm90IHNldCcgJworCWdpdCBjbG9uZSAuIGNsb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCByZWJhc2Ugc2NlbmFyaW9zJyAnCisJIyB0ZW1wb3JhcmlseSBlbmFibGUgYW4gYWN0dWFsIGlkZW50IGZvciB0aGlzIHNldHVwCisJdGVzdF9jb25maWcgdXNlci5lbWFpbCBmb29AZXhhbXBsZS5jb20gJiYKKwl0ZXN0X2NvbW1pdCBuZXcgJiYKKwlnaXQgYnJhbmNoIHNpZGUtd2l0aG91dC1jb21taXQgSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS13aXRoLWNvbW1pdCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIHJlYmFzZSBkb2VzIG5vdCBjYXJlIGFib3V0IGlkZW50JyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRtcCBzaWRlLXdpdGhvdXQtY29tbWl0ICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWZhc3QtZm9yd2FyZCByZWJhc2UgcmVmdXNlcyB0byB3cml0ZSBjb21taXRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHwgdHJ1ZSIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgdG1wIHNpZGUtd2l0aC1jb21taXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgcmViYXNlIGRvZXMgbm90IGNhcmUgYWJvdXQgaWRlbnQgKGludGVyYWN0aXZlKScgJworCWdpdCBjaGVja291dCAtQiB0bXAgc2lkZS13aXRob3V0LWNvbW1pdCAmJgorCWdpdCByZWJhc2UgLWkgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1mYXN0LWZvcndhcmQgcmViYXNlIHJlZnVzZXMgdG8gd3JpdGUgY29tbWl0cyAoaW50ZXJhY3RpdmUpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHwgdHJ1ZSIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgdG1wIHNpZGUtd2l0aC1jb21taXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub29wIGludGVyYWN0aXZlIHJlYmFzZSBkb2VzIG5vdCBjYXJlIGFib3V0IGlkZW50JyAnCisJZ2l0IGNoZWNrb3V0IC1CIHRtcCBzaWRlLXdpdGgtY29tbWl0ICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QIFwKKwknZmFzdC1mb3J3YXJkIHJlYmFzZSBkb2VzIG5vdCBjYXJlIGFib3V0IGlkZW50IChwcmVzZXJ2ZSknICcKKwlnaXQgY2hlY2tvdXQgLUIgdG1wIHNpZGUtd2l0aG91dC1jb21taXQgJiYKKwlnaXQgcmViYXNlIC1wIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QIFwKKwknbm9uLWZhc3QtZm9yd2FyZCByZWJhc2UgcmVmdXNlcyB0byB3cml0ZSBjb21taXRzIChwcmVzZXJ2ZSknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCB0cnVlIiAmJgorCWdpdCBjaGVja291dCAtQiB0bXAgc2lkZS13aXRoLWNvbW1pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXAgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvci5uYW1lIG92ZXJyaWRlcyB1c2VyLm5hbWUnICcKKwl0ZXN0X2NvbmZpZyB1c2VyLm5hbWUgdXNlciAmJgorCXRlc3RfY29uZmlnIHVzZXIuZW1haWwgdXNlckBleGFtcGxlLmNvbSAmJgorCXRlc3RfY29uZmlnIGF1dGhvci5uYW1lIGF1dGhvciAmJgorCXRlc3RfY29tbWl0IGF1dGhvci1uYW1lLW92ZXJyaWRlLXVzZXIgJiYKKwllY2hvIGF1dGhvciB1c2VyQGV4YW1wbGUuY29tID4gZXhwZWN0ZWQtYXV0aG9yICYmCisJZWNobyB1c2VyIHVzZXJAZXhhbXBsZS5jb20gPiBleHBlY3RlZC1jb21taXR0ZXIgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlYW4gJWFlIiAtMSA+IGFjdHVhbC1hdXRob3IgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSIlY24gJWNlIiAtMSA+IGFjdHVhbC1jb21taXR0ZXIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1hdXRob3IgYWN0dWFsLWF1dGhvciAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWNvbW1pdHRlciBhY3R1YWwtY29tbWl0dGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvci5lbWFpbCBvdmVycmlkZXMgdXNlci5lbWFpbCcgJworCXRlc3RfY29uZmlnIHVzZXIubmFtZSB1c2VyICYmCisJdGVzdF9jb25maWcgdXNlci5lbWFpbCB1c2VyQGV4YW1wbGUuY29tICYmCisJdGVzdF9jb25maWcgYXV0aG9yLmVtYWlsIGF1dGhvckBleGFtcGxlLmNvbSAmJgorCXRlc3RfY29tbWl0IGF1dGhvci1lbWFpbC1vdmVycmlkZS11c2VyICYmCisJZWNobyB1c2VyIGF1dGhvckBleGFtcGxlLmNvbSA+IGV4cGVjdGVkLWF1dGhvciAmJgorCWVjaG8gdXNlciB1c2VyQGV4YW1wbGUuY29tID4gZXhwZWN0ZWQtY29tbWl0dGVyICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWFuICVhZSIgLTEgPiBhY3R1YWwtYXV0aG9yICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWNuICVjZSIgLTEgPiBhY3R1YWwtY29tbWl0dGVyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtYXV0aG9yIGFjdHVhbC1hdXRob3IgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1jb21taXR0ZXIgYWN0dWFsLWNvbW1pdHRlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXR0ZXIubmFtZSBvdmVycmlkZXMgdXNlci5uYW1lJyAnCisJdGVzdF9jb25maWcgdXNlci5uYW1lIHVzZXIgJiYKKwl0ZXN0X2NvbmZpZyB1c2VyLmVtYWlsIHVzZXJAZXhhbXBsZS5jb20gJiYKKwl0ZXN0X2NvbmZpZyBjb21taXR0ZXIubmFtZSBjb21taXR0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBjb21taXR0ZXItbmFtZS1vdmVycmlkZS11c2VyICYmCisJZWNobyB1c2VyIHVzZXJAZXhhbXBsZS5jb20gPiBleHBlY3RlZC1hdXRob3IgJiYKKwllY2hvIGNvbW1pdHRlciB1c2VyQGV4YW1wbGUuY29tID4gZXhwZWN0ZWQtY29tbWl0dGVyICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWFuICVhZSIgLTEgPiBhY3R1YWwtYXV0aG9yICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWNuICVjZSIgLTEgPiBhY3R1YWwtY29tbWl0dGVyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtYXV0aG9yIGFjdHVhbC1hdXRob3IgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1jb21taXR0ZXIgYWN0dWFsLWNvbW1pdHRlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXR0ZXIuZW1haWwgb3ZlcnJpZGVzIHVzZXIuZW1haWwnICcKKwl0ZXN0X2NvbmZpZyB1c2VyLm5hbWUgdXNlciAmJgorCXRlc3RfY29uZmlnIHVzZXIuZW1haWwgdXNlckBleGFtcGxlLmNvbSAmJgorCXRlc3RfY29uZmlnIGNvbW1pdHRlci5lbWFpbCBjb21taXR0ZXJAZXhhbXBsZS5jb20gJiYKKwl0ZXN0X2NvbW1pdCBjb21taXR0ZXItZW1haWwtb3ZlcnJpZGUtdXNlciAmJgorCWVjaG8gdXNlciB1c2VyQGV4YW1wbGUuY29tID4gZXhwZWN0ZWQtYXV0aG9yICYmCisJZWNobyB1c2VyIGNvbW1pdHRlckBleGFtcGxlLmNvbSA+IGV4cGVjdGVkLWNvbW1pdHRlciAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVhbiAlYWUiIC0xID4gYWN0dWFsLWF1dGhvciAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVjbiAlY2UiIC0xID4gYWN0dWFsLWNvbW1pdHRlciAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWF1dGhvciBhY3R1YWwtYXV0aG9yICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtY29tbWl0dGVyIGFjdHVhbC1jb21taXR0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9yIGFuZCBjb21taXR0ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIGNvbmZpZyBzZXR0aW5ncycgJworCXRlc3RfY29uZmlnIHVzZXIubmFtZSB1c2VyICYmCisJdGVzdF9jb25maWcgdXNlci5lbWFpbCB1c2VyQGV4YW1wbGUuY29tICYmCisJdGVzdF9jb25maWcgYXV0aG9yLm5hbWUgYXV0aG9yICYmCisJdGVzdF9jb25maWcgYXV0aG9yLmVtYWlsIGF1dGhvckBleGFtcGxlLmNvbSAmJgorCXRlc3RfY29uZmlnIGNvbW1pdHRlci5uYW1lIGNvbW1pdHRlciAmJgorCXRlc3RfY29uZmlnIGNvbW1pdHRlci5lbWFpbCBjb21taXR0ZXJAZXhhbXBsZS5jb20gJiYKKwlHSVRfQVVUSE9SX05BTUU9ZW52X2F1dGhvciAmJiBleHBvcnQgR0lUX0FVVEhPUl9OQU1FICYmCisJR0lUX0FVVEhPUl9FTUFJTD1lbnZfYXV0aG9yQGV4YW1wbGUuY29tICYmIGV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMICYmCisJR0lUX0NPTU1JVFRFUl9OQU1FPWVudl9jb21taXQgJiYgZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRSAmJgorCUdJVF9DT01NSVRURVJfRU1BSUw9ZW52X2NvbW1pdEBleGFtcGxlLmNvbSAmJiBleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTCAmJgorCXRlc3RfY29tbWl0IGVudi1vdmVycmlkZS1jb25mICYmCisJZWNobyBlbnZfYXV0aG9yIGVudl9hdXRob3JAZXhhbXBsZS5jb20gPiBleHBlY3RlZC1hdXRob3IgJiYKKwllY2hvIGVudl9jb21taXQgZW52X2NvbW1pdEBleGFtcGxlLmNvbSA+IGV4cGVjdGVkLWNvbW1pdHRlciAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVhbiAlYWUiIC0xID4gYWN0dWFsLWF1dGhvciAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9IiVjbiAlY2UiIC0xID4gYWN0dWFsLWNvbW1pdHRlciAmJgorCXNhbmVfdW5zZXQgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwgJiYKKwlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtYXV0aG9yIGFjdHVhbC1hdXRob3IgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1jb21taXR0ZXIgYWN0dWFsLWNvbW1pdHRlcgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTgtaWRlbnQtY29ybmVyLWNhc2VzLnNoIGIvdC90NzUxOC1pZGVudC1jb3JuZXItY2FzZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjIyZjYzMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTgtaWRlbnQtY29ybmVyLWNhc2VzLnNoCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb3JuZXIgY2FzZXMgaW4gaWRlbnQgc3RyaW5ncycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGNvbmZpcm0gdGhhdCB3ZSBkbyBub3Qgc2VnZmF1bHQgX2FuZF8gdGhhdCB3ZSBkbyBub3Qgc2F5ICIobnVsbCkiLCBhcworIyBnbGliYyBzeXN0ZW1zIHdpbGwgcXVpZXRseSBoYW5kbGUgb3VyIE5VTEwgcG9pbnRlcgorIworIyBOb3RlIGFsc28gdGhhdCB3ZSBjYW4ndCB1c2UgImVudiIgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gdW5zZXQgYSB2YXJpYWJsZSwKKyMgYW5kICItdSIgaXMgbm90IHBvcnRhYmxlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgbmFtZSBhbmQgbWlzc2luZyBlbWFpbCcgJworCSgKKwkJc2FuZV91bnNldCBHSVRfQVVUSE9SX0VNQUlMICYmCisJCUdJVF9BVVRIT1JfTkFNRT0gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvbyAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICEgbnVsbCBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCByZWplY3RzIGFsbC1jcnVkIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0FVVEhPUl9OQU1FPSIgLjs8PiIgXAorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vCisnCisKKyMgV2UgbXVzdCB0ZXN0IHRoZSBhY3R1YWwgZXJyb3IgbWVzc2FnZSBoZXJlLCBhcyBhbiB1bndhbnRlZAorIyBhdXRvLWRldGVjdGlvbiBjb3VsZCBmYWlsIGZvciBvdGhlciByZWFzb25zLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgY29uZmlndXJlZCBuYW1lIGRvZXMgbm90IGF1dG8tZGV0ZWN0JyAnCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9BVVRIT1JfTkFNRSAmJgorCQl0ZXN0X211c3RfZmFpbCBcCisJCQlnaXQgLWMgdXNlci5uYW1lPSBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmb28gMj5lcnIgJiYKKwkJdGVzdF9pMThuZ3JlcCAiZW1wdHkgaWRlbnQgbmFtZSIgZXJyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTktc3RhdHVzLWZzbW9uaXRvci5zaCBiL3QvdDc1MTktc3RhdHVzLWZzbW9uaXRvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYmZkY2NhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxOS1zdGF0dXMtZnNtb25pdG9yLnNoCkBAIC0wLDAgKzEsMzg2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cyB3aXRoIGZpbGUgc3lzdGVtIHdhdGNoZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIE5vdGUsIGFmdGVyICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiIG5vIGV4dGVuc2lvbnMgZXhpc3Qgb3RoZXIgdGhhbiAnVFJFRScKKyMgImdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3IiIGNhbiBiZSB1c2VkIHRvIGdldCB0aGUgZXh0ZW5zaW9uIHdyaXR0ZW4KKyMgYmVmb3JlIHRlc3RpbmcgdGhlIHJlc3VsdHMuCisKK2NsZWFuX3JlcG8gKCkgeworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCBjbGVhbiAtZmQKK30KKworZGlydHlfcmVwbyAoKSB7CisJOiA+dW50cmFja2VkICYmCisJOiA+ZGlyMS91bnRyYWNrZWQgJiYKKwk6ID5kaXIyL3VudHJhY2tlZCAmJgorCWVjaG8gMSA+bW9kaWZpZWQgJiYKKwllY2hvIDIgPmRpcjEvbW9kaWZpZWQgJiYKKwllY2hvIDMgPmRpcjIvbW9kaWZpZWQgJiYKKwllY2hvIDQgPm5ldyAmJgorCWVjaG8gNSA+ZGlyMS9uZXcgJiYKKwllY2hvIDYgPmRpcjIvbmV3Cit9CisKK3dyaXRlX2ludGVncmF0aW9uX3NjcmlwdCAoKSB7CisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvZnNtb25pdG9yLXRlc3Q8PC1cRU9GCisJaWYgdGVzdCAiJCMiIC1uZSAyCisJdGhlbgorCQllY2hvICIkMDogZXhhY3RseSAyIGFyZ3VtZW50cyBleHBlY3RlZCIKKwkJZXhpdCAyCisJZmkKKwlpZiB0ZXN0ICIkMSIgIT0gMgorCXRoZW4KKwkJZWNobyAiVW5zdXBwb3J0ZWQgY29yZS5mc21vbml0b3IgaG9vayB2ZXJzaW9uLiIgPiYyCisJCWV4aXQgMQorCWZpCisJcHJpbnRmICJsYXN0X3VwZGF0ZV90b2tlblwwIgorCXByaW50ZiAidW50cmFja2VkXDAiCisJcHJpbnRmICJkaXIxL3VudHJhY2tlZFwwIgorCXByaW50ZiAiZGlyMi91bnRyYWNrZWRcMCIKKwlwcmludGYgIm1vZGlmaWVkXDAiCisJcHJpbnRmICJkaXIxL21vZGlmaWVkXDAiCisJcHJpbnRmICJkaXIyL21vZGlmaWVkXDAiCisJcHJpbnRmICJuZXdcMCIKKwlwcmludGYgImRpcjEvbmV3XDAiCisJcHJpbnRmICJkaXIyL25ld1wwIgorCUVPRgorfQorCit0ZXN0X2xhenlfcHJlcmVxIFVOVFJBQ0tFRF9DQUNIRSAnCisJeyBnaXQgdXBkYXRlLWluZGV4IC0tdGVzdC11bnRyYWNrZWQtY2FjaGU7IHJldD0kPzsgfSAmJgorCXRlc3QgJHJldCAtbmUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwk6ID50cmFja2VkICYmCisJOiA+bW9kaWZpZWQgJiYKKwlta2RpciBkaXIxICYmCisJOiA+ZGlyMS90cmFja2VkICYmCisJOiA+ZGlyMS9tb2RpZmllZCAmJgorCW1rZGlyIGRpcjIgJiYKKwk6ID5kaXIyL3RyYWNrZWQgJiYKKwk6ID5kaXIyL21vZGlmaWVkICYmCisJZ2l0IC1jIGNvcmUuZnNtb25pdG9yPSBhZGQgLiAmJgorCWdpdCAtYyBjb3JlLmZzbW9uaXRvcj0gY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIGNvcmUuZnNtb25pdG9yIC5naXQvaG9va3MvZnNtb25pdG9yLXRlc3QgJiYKKwljYXQgPi5naXRpZ25vcmUgPDwtXEVPRgorCS5naXRpZ25vcmUKKwlleHBlY3QqCisJYWN0dWFsKgorCW1hcmtlcioKKwlFT0YKKycKKworIyB0ZXN0IHRoYXQgdGhlIGZzbW9uaXRvciBleHRlbnNpb24gaXMgb2ZmIGJ5IGRlZmF1bHQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzbW9uaXRvciBleHRlbnNpb24gaXMgb2ZmIGJ5IGRlZmF1bHQnICcKKwl0ZXN0LXRvb2wgZHVtcC1mc21vbml0b3IgPmFjdHVhbCAmJgorCWdyZXAgIl5ubyBmc21vbml0b3IiIGFjdHVhbAorJworCisjIHRlc3QgdGhhdCAidXBkYXRlLWluZGV4IC0tZnNtb25pdG9yIiBhZGRzIHRoZSBmc21vbml0b3IgZXh0ZW5zaW9uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1mc21vbml0b3IiIGFkZHMgdGhlIGZzbW9uaXRvciBleHRlbnNpb24nICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tZnNtb25pdG9yICYmCisJdGVzdC10b29sIGR1bXAtZnNtb25pdG9yID5hY3R1YWwgJiYKKwlncmVwICJeZnNtb25pdG9yIGxhc3QgdXBkYXRlIiBhY3R1YWwKKycKKworIyB0ZXN0IHRoYXQgInVwZGF0ZS1pbmRleCAtLW5vLWZzbW9uaXRvciIgcmVtb3ZlcyB0aGUgZnNtb25pdG9yIGV4dGVuc2lvbgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yIiByZW1vdmVzIHRoZSBmc21vbml0b3IgZXh0ZW5zaW9uJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWZzbW9uaXRvciAmJgorCXRlc3QtdG9vbCBkdW1wLWZzbW9uaXRvciA+YWN0dWFsICYmCisJZ3JlcCAiXm5vIGZzbW9uaXRvciIgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GICYmCitoIGRpcjEvbW9kaWZpZWQKK0ggZGlyMS90cmFja2VkCitoIGRpcjIvbW9kaWZpZWQKK0ggZGlyMi90cmFja2VkCitoIG1vZGlmaWVkCitIIHRyYWNrZWQKK0VPRgorCisjIHRlc3QgdGhhdCAidXBkYXRlLWluZGV4IC0tZnNtb25pdG9yLXZhbGlkIiBzZXRzIHRoZSBmc21vbml0b3IgdmFsaWQgYml0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1mc21vbml0b3ItdmFsaWQiIHNldHMgdGhlIGZzbW9uaXRvciB2YWxpZCBiaXQnICcKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdDw8LVxFT0YgJiYKKwkJcHJpbnRmICJsYXN0X3VwZGF0ZV90b2tlblwwIgorCUVPRgorCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3IgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZnNtb25pdG9yLXZhbGlkIGRpcjEvbW9kaWZpZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZnNtb25pdG9yLXZhbGlkIGRpcjIvbW9kaWZpZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZnNtb25pdG9yLXZhbGlkIG1vZGlmaWVkICYmCisJZ2l0IGxzLWZpbGVzIC1mID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GICYmCitIIGRpcjEvbW9kaWZpZWQKK0ggZGlyMS90cmFja2VkCitIIGRpcjIvbW9kaWZpZWQKK0ggZGlyMi90cmFja2VkCitIIG1vZGlmaWVkCitIIHRyYWNrZWQKK0VPRgorCisjIHRlc3QgdGhhdCAidXBkYXRlLWluZGV4IC0tbm8tZnNtb25pdG9yLXZhbGlkIiBjbGVhcnMgdGhlIGZzbW9uaXRvciB2YWxpZCBiaXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLW5vLWZzbW9uaXRvci12YWxpZCIgY2xlYXJzIHRoZSBmc21vbml0b3IgdmFsaWQgYml0JyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWZzbW9uaXRvci12YWxpZCBkaXIxL21vZGlmaWVkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWZzbW9uaXRvci12YWxpZCBkaXIyL21vZGlmaWVkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWZzbW9uaXRvci12YWxpZCBtb2RpZmllZCAmJgorCWdpdCBscy1maWxlcyAtZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRiAmJgorSCBkaXIxL21vZGlmaWVkCitIIGRpcjEvdHJhY2tlZAorSCBkaXIyL21vZGlmaWVkCitIIGRpcjIvdHJhY2tlZAorSCBtb2RpZmllZAorSCB0cmFja2VkCitFT0YKKworIyB0ZXN0IHRoYXQgYWxsIGZpbGVzIHJldHVybmVkIGJ5IHRoZSBzY3JpcHQgZ2V0IGZsYWdnZWQgYXMgaW52YWxpZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIGZpbGVzIHJldHVybmVkIGJ5IGludGVncmF0aW9uIHNjcmlwdCBnZXQgZmxhZ2dlZCBhcyBpbnZhbGlkJyAnCisJd3JpdGVfaW50ZWdyYXRpb25fc2NyaXB0ICYmCisJZGlydHlfcmVwbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3IgJiYKKwlnaXQgbHMtZmlsZXMgLWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YgJiYKK0ggZGlyMS9tb2RpZmllZAoraCBkaXIxL25ldworSCBkaXIxL3RyYWNrZWQKK0ggZGlyMi9tb2RpZmllZAoraCBkaXIyL25ldworSCBkaXIyL3RyYWNrZWQKK0ggbW9kaWZpZWQKK2ggbmV3CitIIHRyYWNrZWQKK0VPRgorCisjIHRlc3QgdGhhdCBuZXdseSBhZGRlZCBmaWxlcyBhcmUgbWFya2VkIHZhbGlkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXdseSBhZGRlZCBmaWxlcyBhcmUgbWFya2VkIHZhbGlkJyAnCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvZnNtb25pdG9yLXRlc3Q8PC1cRU9GICYmCisJCXByaW50ZiAibGFzdF91cGRhdGVfdG9rZW5cMCIKKwlFT0YKKwlnaXQgYWRkIG5ldyAmJgorCWdpdCBhZGQgZGlyMS9uZXcgJiYKKwlnaXQgYWRkIGRpcjIvbmV3ICYmCisJZ2l0IGxzLWZpbGVzIC1mID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GICYmCitIIGRpcjEvbW9kaWZpZWQKK2ggZGlyMS9uZXcKK2ggZGlyMS90cmFja2VkCitIIGRpcjIvbW9kaWZpZWQKK2ggZGlyMi9uZXcKK2ggZGlyMi90cmFja2VkCitIIG1vZGlmaWVkCitoIG5ldworaCB0cmFja2VkCitFT0YKKworIyB0ZXN0IHRoYXQgYWxsIHVubW9kaWZpZWQgZmlsZXMgZ2V0IG1hcmtlZCB2YWxpZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIHVubW9kaWZpZWQgZmlsZXMgZ2V0IG1hcmtlZCB2YWxpZCcgJworCSMgbW9kaWZpZWQgZmlsZXMgcmVzdWx0IGluIHVwZGF0ZS1pbmRleCByZXR1cm5pbmcgMQorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC0tZm9yY2Utd3JpdGUtaW5kZXggJiYKKwlnaXQgbHMtZmlsZXMgLWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YgJiYKK0ggZGlyMS9tb2RpZmllZAoraCBkaXIxL3RyYWNrZWQKK2ggZGlyMi9tb2RpZmllZAoraCBkaXIyL3RyYWNrZWQKK2ggbW9kaWZpZWQKK2ggdHJhY2tlZAorRU9GCisKKyMgdGVzdCB0aGF0ICpvbmx5KiBmaWxlcyByZXR1cm5lZCBieSB0aGUgaW50ZWdyYXRpb24gc2NyaXB0IGdldCBmbGFnZ2VkIGFzIGludmFsaWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJypvbmx5KiBmaWxlcyByZXR1cm5lZCBieSB0aGUgaW50ZWdyYXRpb24gc2NyaXB0IGdldCBmbGFnZ2VkIGFzIGludmFsaWQnICcKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdDw8LVxFT0YgJiYKKwlwcmludGYgImxhc3RfdXBkYXRlX3Rva2VuXDAiCisJcHJpbnRmICJkaXIxL21vZGlmaWVkXDAiCisJRU9GCisJY2xlYW5fcmVwbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC0tZm9yY2Utd3JpdGUtaW5kZXggJiYKKwllY2hvIDEgPm1vZGlmaWVkICYmCisJZWNobyAyID5kaXIxL21vZGlmaWVkICYmCisJZWNobyAzID5kaXIyL21vZGlmaWVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLS1mb3JjZS13cml0ZS1pbmRleCAmJgorCWdpdCBscy1maWxlcyAtZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEVuc3VyZSBjb21tYW5kcyB0aGF0IGNhbGwgcmVmcmVzaF9pbmRleCgpIHRvIG1vdmUgdGhlIGluZGV4IGJhY2sgaW4gdGltZQorIyBwcm9wZXJseSBpbnZhbGlkYXRlIHRoZSBmc21vbml0b3IgY2FjaGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnJlc2hfaW5kZXgoKSBpbnZhbGlkYXRlcyBmc21vbml0b3IgY2FjaGUnICcKKwljbGVhbl9yZXBvICYmCisJZGlydHlfcmVwbyAmJgorCXdyaXRlX2ludGVncmF0aW9uX3NjcmlwdCAmJgorCWdpdCBhZGQgLiAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL2ZzbW9uaXRvci10ZXN0PDwtXEVPRiAmJgorCUVPRgorCWdpdCBjb21taXQgLW0gInRvIHJlc2V0IiAmJgorCWdpdCByZXNldCBIRUFEfjEgJiYKKwlnaXQgc3RhdHVzID5hY3R1YWwgJiYKKwlnaXQgLWMgY29yZS5mc21vbml0b3I9IHN0YXR1cyA+ZXhwZWN0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB0ZXN0IGZzbW9uaXRvciB3aXRoIGFuZCB3aXRob3V0IHByZWxvYWRJbmRleAorcHJlbG9hZF92YWx1ZXM9ImZhbHNlIHRydWUiCitmb3IgcHJlbG9hZF92YWwgaW4gJHByZWxvYWRfdmFsdWVzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHByZWxvYWRJbmRleCB0byAkcHJlbG9hZF92YWwiICcKKwkJZ2l0IGNvbmZpZyBjb3JlLnByZWxvYWRJbmRleCAkcHJlbG9hZF92YWwgJiYKKwkJaWYgdGVzdCAkcHJlbG9hZF92YWwgPSB0cnVlCisJCXRoZW4KKwkJCUdJVF9URVNUX1BSRUxPQURfSU5ERVg9JHByZWxvYWRfdmFsOyBleHBvcnQgR0lUX1RFU1RfUFJFTE9BRF9JTkRFWAorCQllbHNlCisJCQlzYW5lX3Vuc2V0IEdJVF9URVNUX1BSRUxPQURfSU5ERVgKKwkJZmkKKwknCisKKwkjIHRlc3QgZnNtb25pdG9yIHdpdGggYW5kIHdpdGhvdXQgdGhlIHVudHJhY2tlZCBjYWNoZSAoaWYgYXZhaWxhYmxlKQorCXVjX3ZhbHVlcz0iZmFsc2UiCisJdGVzdF9oYXZlX3ByZXJlcSBVTlRSQUNLRURfQ0FDSEUgJiYgdWNfdmFsdWVzPSJmYWxzZSB0cnVlIgorCWZvciB1Y192YWwgaW4gJHVjX3ZhbHVlcworCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHVudHJhY2tlZCBjYWNoZSB0byAkdWNfdmFsIiAnCisJCQlnaXQgY29uZmlnIGNvcmUudW50cmFja2VkY2FjaGUgJHVjX3ZhbAorCQknCisKKwkJIyBTdGF0dXMgaXMgd2VsbCB0ZXN0ZWQgZWxzZXdoZXJlIHNvIHdlJ2xsIGp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlc3VsdHMgYXJlCisJCSMgdGhlIHNhbWUgd2hlbiB1c2luZyBjb3JlLmZzbW9uaXRvci4KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGFyZSBzdGF0dXMgd2l0aCBhbmQgd2l0aG91dCBmc21vbml0b3InICcKKwkJCXdyaXRlX2ludGVncmF0aW9uX3NjcmlwdCAmJgorCQkJY2xlYW5fcmVwbyAmJgorCQkJZGlydHlfcmVwbyAmJgorCQkJZ2l0IGFkZCBuZXcgJiYKKwkJCWdpdCBhZGQgZGlyMS9uZXcgJiYKKwkJCWdpdCBhZGQgZGlyMi9uZXcgJiYKKwkJCWdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCQkJZ2l0IC1jIGNvcmUuZnNtb25pdG9yPSBzdGF0dXMgPmV4cGVjdCAmJgorCQkJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKwkJJworCisJCSMgTWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgc2tpcHBpbmcgdGhlIGNoZWNrIGZvciBtb2RpZmllZCBhbmQgdW50cmFja2VkCisJCSMgKGlmIGVuYWJsZWQpIGZpbGVzIHVubGVzcyBpdCBpcyB0b2xkIGFib3V0IHRoZW0uCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0YXR1cyBkb2Vzbid0IGRldGVjdCB1bnJlcG9ydGVkIG1vZGlmaWNhdGlvbnMiICcKKwkJCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL2ZzbW9uaXRvci10ZXN0PDwtXEVPRiAmJgorCQkJcHJpbnRmICJsYXN0X3VwZGF0ZV90b2tlblwwIgorCQkJOj5tYXJrZXIKKwkJCUVPRgorCQkJY2xlYW5fcmVwbyAmJgorCQkJZ2l0IHN0YXR1cyAmJgorCQkJdGVzdF9wYXRoX2lzX2ZpbGUgbWFya2VyICYmCisJCQlkaXJ0eV9yZXBvICYmCisJCQlybSAtZiBtYXJrZXIgJiYKKwkJCWdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCQkJdGVzdF9wYXRoX2lzX2ZpbGUgbWFya2VyICYmCisJCQl0ZXN0X2kxOG5ncmVwICEgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIgYWN0dWFsICYmCisJCQlpZiB0ZXN0ICR1Y192YWwgPSB0cnVlCisJCQl0aGVuCisJCQkJdGVzdF9pMThuZ3JlcCAhICJVbnRyYWNrZWQgZmlsZXM6IiBhY3R1YWwKKwkJCWZpICYmCisJCQlpZiB0ZXN0ICR1Y192YWwgPSBmYWxzZQorCQkJdGhlbgorCQkJCXRlc3RfaTE4bmdyZXAgIlVudHJhY2tlZCBmaWxlczoiIGFjdHVhbAorCQkJZmkgJiYKKwkJCXJtIC1mIG1hcmtlcgorCQknCisJZG9uZQorZG9uZQorCisjIHRlc3QgdGhhdCBzcGxpdHRpbmcgdGhlIGluZGV4IGRvZXNuJ3QgaW50ZXJmZXJlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdHRpbmcgdGhlIGluZGV4IHJlc3VsdHMgaW4gdGhlIHNhbWUgc3RhdGUnICcKKwl3cml0ZV9pbnRlZ3JhdGlvbl9zY3JpcHQgJiYKKwlkaXJ0eV9yZXBvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvciAgJiYKKwlnaXQgbHMtZmlsZXMgLWYgPmV4cGVjdCAmJgorCXRlc3QtdG9vbCBkdW1wLWZzbW9uaXRvciA+JjIgJiYgZWNobyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3IgLS1zcGxpdC1pbmRleCAmJgorCXRlc3QtdG9vbCBkdW1wLWZzbW9uaXRvciA+JjIgJiYgZWNobyAmJgorCWdpdCBscy1maWxlcyAtZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOVFJBQ0tFRF9DQUNIRSAnaWdub3JlIC5naXQgY2hhbmdlcyB3aGVuIGludmFsaWRhdGluZyBVTlRSJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBkb3QtZ2l0ICYmCisJKAorCQljZCBkb3QtZ2l0ICYmCisJCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwkJOiA+dHJhY2tlZCAmJgorCQk6ID5tb2RpZmllZCAmJgorCQlta2RpciBkaXIxICYmCisJCTogPmRpcjEvdHJhY2tlZCAmJgorCQk6ID5kaXIxL21vZGlmaWVkICYmCisJCW1rZGlyIGRpcjIgJiYKKwkJOiA+ZGlyMi90cmFja2VkICYmCisJCTogPmRpcjIvbW9kaWZpZWQgJiYKKwkJd3JpdGVfaW50ZWdyYXRpb25fc2NyaXB0ICYmCisJCWdpdCBjb25maWcgY29yZS5mc21vbml0b3IgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tdW50cmFja2VkLWNhY2hlICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3IgJiYKKwkJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZS1iZWZvcmUiIFwKKwkJZ2l0IHN0YXR1cyAmJgorCQl0ZXN0LXRvb2wgZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2JlZm9yZQorCSkgJiYKKwljYXQgPj5kb3QtZ2l0Ly5naXQvaG9va3MvZnNtb25pdG9yLXRlc3QgPDwtXEVPRiAmJgorCXByaW50ZiAiLmdpdFwwIgorCXByaW50ZiAiLmdpdC9pbmRleFwwIgorCXByaW50ZiAiZGlyMS8uZ2l0XDAiCisJcHJpbnRmICJkaXIxLy5naXQvaW5kZXhcMCIKKwlFT0YKKwkoCisJCWNkIGRvdC1naXQgJiYKKwkJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZS1hZnRlciIgXAorCQlnaXQgc3RhdHVzICYmCisJCXRlc3QtdG9vbCBkdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWZ0ZXIKKwkpICYmCisJZ3JlcCAiZGlyZWN0b3J5IGludmFsaWRhdGlvbiIgdHJhY2UtYmVmb3JlID4+YmVmb3JlICYmCisJZ3JlcCAiZGlyZWN0b3J5IGludmFsaWRhdGlvbiIgdHJhY2UtYWZ0ZXIgPj5hZnRlciAmJgorCSMgVU5UUiBleHRlbnNpb24gdW5jaGFuZ2VkLCBkaXIgaW52YWxpZGF0aW9uIGNvdW50IHVuY2hhbmdlZAorCXRlc3RfY21wIGJlZm9yZSBhZnRlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNjYXJkX2luZGV4KCkgYWxzbyBkaXNjYXJkcyBmc21vbml0b3IgaW5mbycgJworCXRlc3RfY29uZmlnIGNvcmUuZnNtb25pdG9yICIkVEVTVF9ESVJFQ1RPUlkvdDc1MTkvZnNtb25pdG9yLWFsbCIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwl0ZXN0LXRvb2wgcmVhZC1jYWNoZSAtLXByaW50LWFuZC1yZWZyZXNoPXRyYWNrZWQgMiA+YWN0dWFsICYmCisJcHJpbnRmICJ0cmFja2VkIGlzJXMgdXAgdG8gZGF0ZVxuIiAiIiAiIG5vdCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUZXN0IHVuc3RhZ2luZyBlbnRyaWVzIHRoYXQ6CisjICAtIEFyZSBub3QgZmxhZ2dlZCB3aXRoIENFX0ZTTU9OSVRPUl9WQUxJRAorIyAgLSBIYXZlIGEgcG9zaXRpb24gaW4gdGhlIGluZGV4ID49IHRoZSBudW1iZXIgb2YgZW50cmllcyBwcmVzZW50IGluIHRoZSBpbmRleAorIyAgICBhZnRlciB1bnN0YWdpbmcuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc3VjY2VlZHMgYWZ0ZXIgc3RhZ2luZy91bnN0YWdpbmcnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGZzbW9uaXRvci1zdGFnZS11bnN0YWdlICYmCisJKAorCQljZCBmc21vbml0b3Itc3RhZ2UtdW5zdGFnZSAmJgorCQl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1mc21vbml0b3IgJiYKKwkJcmVtb3ZlZD0kKHRlc3Rfc2VxIDEgMTAwIHwgc2VkICJzL14vei8iKSAmJgorCQl0b3VjaCAkcmVtb3ZlZCAmJgorCQlnaXQgYWRkICRyZW1vdmVkICYmCisJCWdpdCBjb25maWcgY29yZS5mc21vbml0b3IgIiRURVNUX0RJUkVDVE9SWS90NzUxOS9mc21vbml0b3ItZW52IiAmJgorCQlGU01PTklUT1JfTElTVD0iJHJlbW92ZWQiIGdpdCByZXN0b3JlIC1TICRyZW1vdmVkICYmCisJCUZTTU9OSVRPUl9MSVNUPSIkcmVtb3ZlZCIgZ2l0IHN0YXR1cworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTE5L2ZzbW9uaXRvci1hbGwgYi90L3Q3NTE5L2ZzbW9uaXRvci1hbGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTRhYjY2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTkvZnNtb25pdG9yLWFsbApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKyMKKyMgQW4gdGVzdCBob29rIHNjcmlwdCB0byBpbnRlZ3JhdGUgd2l0aCBnaXQgdG8gdGVzdCBmc21vbml0b3IuCisjCisjIFRoZSBob29rIGlzIHBhc3NlZCBhIHZlcnNpb24gKGN1cnJlbnRseSAxKSBhbmQgYSB0aW1lIGluIG5hbm9zZWNvbmRzCisjIGZvcm1hdHRlZCBhcyBhIHN0cmluZyBhbmQgb3V0cHV0cyB0byBzdGRvdXQgYWxsIGZpbGVzIHRoYXQgaGF2ZSBiZWVuCisjIG1vZGlmaWVkIHNpbmNlIHRoZSBnaXZlbiB0aW1lLiBQYXRocyBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mCisjIHRoZSB3b3JraW5nIHRyZWUgYW5kIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBOVUwuCisjCisjZWNobyAiJDAgJCoiID4mMgorCitpZiB0ZXN0ICIkIyIgLW5lIDIKK3RoZW4KKwllY2hvICIkMDogZXhhY3RseSAyIGFyZ3VtZW50cyBleHBlY3RlZCIgPiYyCisJZXhpdCAyCitmaQorCitpZiB0ZXN0ICIkMSIgIT0gMQordGhlbgorCWV4aXQgMQorZmkKKworZWNobyAiLyIKZGlmZiAtLWdpdCBhL3QvdDc1MTkvZnNtb25pdG9yLWFsbC12MiBiL3QvdDc1MTkvZnNtb25pdG9yLWFsbC12MgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNjE5MDdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxOS9mc21vbml0b3ItYWxsLXYyCkBAIC0wLDAgKzEsMjEgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworIworIyBBbiB0ZXN0IGhvb2sgc2NyaXB0IHRvIGludGVncmF0ZSB3aXRoIGdpdCB0byB0ZXN0IGZzbW9uaXRvci4KKyMKKyMgVGhlIGhvb2sgaXMgcGFzc2VkIGEgdmVyc2lvbiAoY3VycmVudGx5IDIpIGFuZCBzaW5jZSB0b2tlbgorIyBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcgYW5kIG91dHB1dHMgdG8gc3Rkb3V0IGFsbCBmaWxlcyB0aGF0IGhhdmUgYmVlbgorIyBtb2RpZmllZCBzaW5jZSB0aGUgZ2l2ZW4gdGltZS4gUGF0aHMgbXVzdCBiZSByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgorIyB0aGUgd29ya2luZyB0cmVlIGFuZCBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgTlVMLgorIworI2VjaG8gIiQwICQqIiA+JjIKK215ICgkdmVyc2lvbiwgJGxhc3RfdXBkYXRlX3Rva2VuKSA9IEBBUkdWOworCitpZiAoJHZlcnNpb24gbmUgMikgeworCXByaW50ICJVbnN1cHBvcnRlZCBxdWVyeS1mc21vbml0b3IgaG9vayB2ZXJzaW9uICckdmVyc2lvbicuXG4iOworCWV4aXQgMTsKK30KKworcHJpbnQgImxhc3RfdXBkYXRlX3Rva2VuXDAvXDAiCmRpZmYgLS1naXQgYS90L3Q3NTE5L2ZzbW9uaXRvci1lbnYgYi90L3Q3NTE5L2ZzbW9uaXRvci1lbnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGYxZjdhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTkvZnNtb25pdG9yLWVudgpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgQW4gdGVzdCBob29rIHNjcmlwdCB0byBpbnRlZ3JhdGUgd2l0aCBnaXQgdG8gdGVzdCBmc21vbml0b3IuCisjCisjIFRoZSBob29rIGlzIHBhc3NlZCBhIHZlcnNpb24gKGN1cnJlbnRseSAxKSBhbmQgYSB0aW1lIGluIG5hbm9zZWNvbmRzCisjIGZvcm1hdHRlZCBhcyBhIHN0cmluZyBhbmQgb3V0cHV0cyB0byBzdGRvdXQgYWxsIGZpbGVzIHRoYXQgaGF2ZSBiZWVuCisjIG1vZGlmaWVkIHNpbmNlIHRoZSBnaXZlbiB0aW1lLiBQYXRocyBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mCisjIHRoZSB3b3JraW5nIHRyZWUgYW5kIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBOVUwuCisjCisjZWNobyAiJDAgJCoiID4mMgorCitpZiB0ZXN0ICIkIyIgLW5lIDIKK3RoZW4KKwllY2hvICIkMDogZXhhY3RseSAyIGFyZ3VtZW50cyBleHBlY3RlZCIgPiYyCisJZXhpdCAyCitmaQorCitpZiB0ZXN0ICIkMSIgIT0gMQordGhlbgorCWVjaG8gIlVuc3VwcG9ydGVkIGNvcmUuZnNtb25pdG9yIGhvb2sgdmVyc2lvbi4iID4mMgorCWV4aXQgMQorZmkKKworcHJpbnRmICclc1xuJyAkRlNNT05JVE9SX0xJU1QKZGlmZiAtLWdpdCBhL3QvdDc1MTkvZnNtb25pdG9yLW5vbmUgYi90L3Q3NTE5L2ZzbW9uaXRvci1ub25lCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkOWNmNWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE5L2ZzbW9uaXRvci1ub25lCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIworIyBBbiB0ZXN0IGhvb2sgc2NyaXB0IHRvIGludGVncmF0ZSB3aXRoIGdpdCB0byB0ZXN0IGZzbW9uaXRvci4KKyMKKyMgVGhlIGhvb2sgaXMgcGFzc2VkIGEgdmVyc2lvbiAoY3VycmVudGx5IDEpIGFuZCBhIHRpbWUgaW4gbmFub3NlY29uZHMKKyMgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIGFuZCBvdXRwdXRzIHRvIHN0ZG91dCBhbGwgZmlsZXMgdGhhdCBoYXZlIGJlZW4KKyMgbW9kaWZpZWQgc2luY2UgdGhlIGdpdmVuIHRpbWUuIFBhdGhzIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKKyMgdGhlIHdvcmtpbmcgdHJlZSBhbmQgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIE5VTC4KKyMKKyNlY2hvICIkMCAkKiIgPiYyCisKK2lmIHRlc3QgIiQjIiAtbmUgMgordGhlbgorCWVjaG8gIiQwOiBleGFjdGx5IDIgYXJndW1lbnRzIGV4cGVjdGVkIiA+JjIKKwlleGl0IDIKK2ZpCisKK2lmIHRlc3QgIiQxIiAhPSAxCit0aGVuCisJZWNobyAiVW5zdXBwb3J0ZWQgY29yZS5mc21vbml0b3IgaG9vayB2ZXJzaW9uLiIgPiYyCisJZXhpdCAxCitmaQpkaWZmIC0tZ2l0IGEvdC90NzUxOS9mc21vbml0b3Itd2F0Y2htYW4gYi90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjRiOWRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxOS9mc21vbml0b3Itd2F0Y2htYW4KQEAgLTAsMCArMSwxMjcgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIElQQzo6T3BlbjI7CisKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBpbnRlZ3JhdGUgV2F0Y2htYW4KKyMgKGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3dhdGNobWFuLykgd2l0aCBnaXQgdG8gc3BlZWQgdXAgZGV0ZWN0aW5nCisjIG5ldyBhbmQgbW9kaWZpZWQgZmlsZXMuCisjCisjIFRoZSBob29rIGlzIHBhc3NlZCBhIHZlcnNpb24gKGN1cnJlbnRseSAxKSBhbmQgYSB0aW1lIGluIG5hbm9zZWNvbmRzCisjIGZvcm1hdHRlZCBhcyBhIHN0cmluZyBhbmQgb3V0cHV0cyB0byBzdGRvdXQgYWxsIGZpbGVzIHRoYXQgaGF2ZSBiZWVuCisjIG1vZGlmaWVkIHNpbmNlIHRoZSBnaXZlbiB0aW1lLiBQYXRocyBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mCisjIHRoZSB3b3JraW5nIHRyZWUgYW5kIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBOVUwuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInF1ZXJ5LXdhdGNobWFuIiBhbmQgc2V0CisjICdnaXQgY29uZmlnIGNvcmUuZnNtb25pdG9yIC5naXQvaG9va3MvcXVlcnktd2F0Y2htYW4nCisjCitteSAoJHZlcnNpb24sICR0aW1lKSA9IEBBUkdWOworI3ByaW50IFNUREVSUiAiJDAgJHZlcnNpb24gJHRpbWVcbiI7CisKKyMgQ2hlY2sgdGhlIGhvb2sgaW50ZXJmYWNlIHZlcnNpb24KKworaWYgKCR2ZXJzaW9uID09IDEpIHsKKwkjIGNvbnZlcnQgbmFub3NlY29uZHMgdG8gc2Vjb25kcworCSMgc3VidHJhY3Qgb25lIHNlY29uZCB0byBtYWtlIHN1cmUgd2F0Y2htYW4gd2lsbCByZXR1cm4gYWxsIGNoYW5nZXMKKwkkdGltZSA9IGludCAoJHRpbWUgLyAxMDAwMDAwMDAwKSAtIDE7Cit9IGVsc2UgeworCWV4aXQgMTsKK30KKworbXkgJGdpdF93b3JrX3RyZWU7CitpZiAoJF5PID1+ICdtc3lzJyB8fCAkXk8gPX4gJ2N5Z3dpbicpIHsKKwkkZ2l0X3dvcmtfdHJlZSA9IFdpbjMyOjpHZXRDd2QoKTsKKwkkZ2l0X3dvcmtfdHJlZSA9fiB0ci9cXC9cLy87Cit9IGVsc2UgeworCXJlcXVpcmUgQ3dkOworCSRnaXRfd29ya190cmVlID0gQ3dkOjpjd2QoKTsKK30KKworbXkgJHJldHJ5ID0gMTsKKworbGF1bmNoX3dhdGNobWFuKCk7CisKK3N1YiBsYXVuY2hfd2F0Y2htYW4geworCisJbXkgJHBpZCA9IG9wZW4yKFwqQ0hMRF9PVVQsIFwqQ0hMRF9JTiwgJ3dhdGNobWFuIC1qJykKKwkgICAgb3IgZGllICJvcGVuMigpIGZhaWxlZDogJCFcbiIgLgorCSAgICAiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iOworCisJIyBJbiB0aGUgcXVlcnkgZXhwcmVzc2lvbiBiZWxvdyB3ZSdyZSBhc2tpbmcgZm9yIG5hbWVzIG9mIGZpbGVzIHRoYXQKKwkjIGNoYW5nZWQgc2luY2UgJHRpbWUgYnV0IHdlcmUgbm90IHRyYW5zaWVudCAoaWUgY3JlYXRlZCBhZnRlcgorCSMgJHRpbWUgYnV0IG5vIGxvbmdlciBleGlzdCkuCisJIworCSMgVG8gYWNjb21wbGlzaCB0aGlzLCB3ZSdyZSB1c2luZyB0aGUgInNpbmNlIiBnZW5lcmF0b3IgdG8gdXNlIHRoZQorCSMgcmVjZW5jeSBpbmRleCB0byBzZWxlY3QgY2FuZGlkYXRlIG5vZGVzIGFuZCAiZmllbGRzIiB0byBsaW1pdCB0aGUKKwkjIG91dHB1dCB0byBmaWxlIG5hbWVzIG9ubHkuCisKKwlteSAkcXVlcnkgPSA8PCIJRU5EIjsKKwkJWyJxdWVyeSIsICIkZ2l0X3dvcmtfdHJlZSIsIHsKKwkJCSJzaW5jZSI6ICR0aW1lLAorCQkJImZpZWxkcyI6IFsibmFtZSJdCisJCX1dCisJRU5ECisJCisJb3BlbiAobXkgJGZoLCAiPiIsICIuZ2l0L3dhdGNobWFuLXF1ZXJ5Lmpzb24iKTsKKwlwcmludCAkZmggJHF1ZXJ5OworCWNsb3NlICRmaDsKKworCXByaW50IENITERfSU4gJHF1ZXJ5OworCWNsb3NlIENITERfSU47CisJbXkgJHJlc3BvbnNlID0gZG8ge2xvY2FsICQvOyA8Q0hMRF9PVVQ+fTsKKworCW9wZW4gKCRmaCwgIj4iLCAiLmdpdC93YXRjaG1hbi1yZXNwb25zZS5qc29uIik7CisJcHJpbnQgJGZoICRyZXNwb25zZTsKKwljbG9zZSAkZmg7CisKKwlkaWUgIldhdGNobWFuOiBjb21tYW5kIHJldHVybmVkIG5vIG91dHB1dC5cbiIgLgorCSAgICAiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIGlmICRyZXNwb25zZSBlcSAiIjsKKwlkaWUgIldhdGNobWFuOiBjb21tYW5kIHJldHVybmVkIGludmFsaWQgb3V0cHV0OiAkcmVzcG9uc2VcbiIgLgorCSAgICAiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIHVubGVzcyAkcmVzcG9uc2UgPX4gL15cey87CisKKwlteSAkanNvbl9wa2c7CisJZXZhbCB7CisJCXJlcXVpcmUgSlNPTjo6WFM7CisJCSRqc29uX3BrZyA9ICJKU09OOjpYUyI7CisJCTE7CisJfSBvciBkbyB7CisJCXJlcXVpcmUgSlNPTjo6UFA7CisJCSRqc29uX3BrZyA9ICJKU09OOjpQUCI7CisJfTsKKworCW15ICRvID0gJGpzb25fcGtnLT5uZXctPnV0ZjgtPmRlY29kZSgkcmVzcG9uc2UpOworCisJaWYgKCRyZXRyeSA+IDAgYW5kICRvLT57ZXJyb3J9IGFuZCAkby0+e2Vycm9yfSA9fiBtL3VuYWJsZSB0byByZXNvbHZlIHJvb3QgLiogZGlyZWN0b3J5ICguKikgaXMgbm90IHdhdGNoZWQvKSB7CisJCXByaW50IFNUREVSUiAiQWRkaW5nICckZ2l0X3dvcmtfdHJlZScgdG8gd2F0Y2htYW4ncyB3YXRjaCBsaXN0LlxuIjsKKwkJJHJldHJ5LS07CisJCXF4L3dhdGNobWFuIHdhdGNoICIkZ2l0X3dvcmtfdHJlZSIvOworCQlkaWUgIkZhaWxlZCB0byBtYWtlIHdhdGNobWFuIHdhdGNoICckZ2l0X3dvcmtfdHJlZScuXG4iIC4KKwkJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJD8gIT0gMDsKKworCQkjIFdhdGNobWFuIHdpbGwgYWx3YXlzIHJldHVybiBhbGwgZmlsZXMgb24gdGhlIGZpcnN0IHF1ZXJ5IHNvCisJCSMgcmV0dXJuIHRoZSBmYXN0ICJldmVyeXRoaW5nIGlzIGRpcnR5IiBmbGFnIHRvIGdpdCBhbmQgZG8gdGhlCisJCSMgV2F0Y2htYW4gcXVlcnkganVzdCB0byBnZXQgaXQgb3ZlciB3aXRoIG5vdyBzbyB3ZSB3b24ndCBwYXkKKwkJIyB0aGUgY29zdCBpbiBnaXQgdG8gbG9vayB1cCBlYWNoIGluZGl2aWR1YWwgZmlsZS4KKworCQlvcGVuICgkZmgsICI+IiwgIi5naXQvd2F0Y2htYW4tb3V0cHV0Lm91dCIpOworCQlwcmludCAiL1wwIjsKKwkJY2xvc2UgJGZoOworCisJCXByaW50ICIvXDAiOworCQlldmFsIHsgbGF1bmNoX3dhdGNobWFuKCkgfTsKKwkJZXhpdCAwOworCX0KKworCWRpZSAiV2F0Y2htYW46ICRvLT57ZXJyb3J9LlxuIiAuCisJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJG8tPntlcnJvcn07CisKKwlvcGVuICgkZmgsICI+IiwgIi5naXQvd2F0Y2htYW4tb3V0cHV0Lm91dCIpOworCWJpbm1vZGUgJGZoLCAiOnV0ZjgiOworCXByaW50ICRmaCBAeyRvLT57ZmlsZXN9fTsKKwljbG9zZSAkZmg7CisKKwliaW5tb2RlIFNURE9VVCwgIjp1dGY4IjsKKwlsb2NhbCAkLCA9ICJcMCI7CisJcHJpbnQgQHskby0+e2ZpbGVzfX07Cit9CmRpZmYgLS1naXQgYS90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbi12MiBiL3QvdDc1MTkvZnNtb25pdG9yLXdhdGNobWFuLXYyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0ZWQwYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbi12MgpAQCAtMCwwICsxLDE3MyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSVBDOjpPcGVuMjsKKworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIGludGVncmF0ZSBXYXRjaG1hbgorIyAoaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vd2F0Y2htYW4vKSB3aXRoIGdpdCB0byBzcGVlZCB1cCBkZXRlY3RpbmcKKyMgbmV3IGFuZCBtb2RpZmllZCBmaWxlcy4KKyMKKyMgVGhlIGhvb2sgaXMgcGFzc2VkIGEgdmVyc2lvbiAoY3VycmVudGx5IDIpIGFuZCBsYXN0IHVwZGF0ZSB0b2tlbgorIyBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcgYW5kIG91dHB1dHMgdG8gc3Rkb3V0IGEgbmV3IHVwZGF0ZSB0b2tlbiBhbmQKKyMgYWxsIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSB1cGRhdGUgdG9rZW4uIFBhdGhzIG11c3QKKyMgYmUgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZSBhbmQgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIE5VTC4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAicXVlcnktd2F0Y2htYW4iIGFuZCBzZXQKKyMgJ2dpdCBjb25maWcgY29yZS5mc21vbml0b3IgLmdpdC9ob29rcy9xdWVyeS13YXRjaG1hbicKKyMKK215ICgkdmVyc2lvbiwgJGxhc3RfdXBkYXRlX3Rva2VuKSA9IEBBUkdWOworCisjIFVuY29tbWVudCBmb3IgZGVidWdnaW5nCisjIHByaW50IFNUREVSUiAiJDAgJHZlcnNpb24gJGxhc3RfdXBkYXRlX3Rva2VuXG4iOworCisjIENoZWNrIHRoZSBob29rIGludGVyZmFjZSB2ZXJzaW9uCitpZiAoJHZlcnNpb24gbmUgMikgeworCWRpZSAiVW5zdXBwb3J0ZWQgcXVlcnktZnNtb25pdG9yIGhvb2sgdmVyc2lvbiAnJHZlcnNpb24nLlxuIiAuCisJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiI7Cit9CisKK215ICRnaXRfd29ya190cmVlID0gZ2V0X3dvcmtpbmdfZGlyKCk7CisKK215ICRyZXRyeSA9IDE7CisKK215ICRqc29uX3BrZzsKK2V2YWwgeworCXJlcXVpcmUgSlNPTjo6WFM7CisJJGpzb25fcGtnID0gIkpTT046OlhTIjsKKwkxOworfSBvciBkbyB7CisJcmVxdWlyZSBKU09OOjpQUDsKKwkkanNvbl9wa2cgPSAiSlNPTjo6UFAiOworfTsKKworbGF1bmNoX3dhdGNobWFuKCk7CisKK3N1YiBsYXVuY2hfd2F0Y2htYW4geworCW15ICRvID0gd2F0Y2htYW5fcXVlcnkoKTsKKwlpZiAoaXNfd29ya190cmVlX3dhdGNoZWQoJG8pKSB7CisJCW91dHB1dF9yZXN1bHQoJG8tPntjbG9ja30sIEB7JG8tPntmaWxlc319KTsKKwl9Cit9CisKK3N1YiBvdXRwdXRfcmVzdWx0IHsKKwlteSAoJGNsb2NraWQsIEBmaWxlcykgPSBAXzsKKworCSMgVW5jb21tZW50IGZvciBkZWJ1Z2dpbmcgd2F0Y2htYW4gb3V0cHV0CisJIyBvcGVuIChteSAkZmgsICI+IiwgIi5naXQvd2F0Y2htYW4tb3V0cHV0Lm91dCIpOworCSMgYmlubW9kZSAkZmgsICI6dXRmOCI7CisJIyBwcmludCAkZmggIiRjbG9ja2lkXG5AZmlsZXNcbiI7CisJIyBjbG9zZSAkZmg7CisKKwliaW5tb2RlIFNURE9VVCwgIjp1dGY4IjsKKwlwcmludCAkY2xvY2tpZDsKKwlwcmludCAiXDAiOworCWxvY2FsICQsID0gIlwwIjsKKwlwcmludCBAZmlsZXM7Cit9CisKK3N1YiB3YXRjaG1hbl9jbG9jayB7CisJbXkgJHJlc3BvbnNlID0gcXgvd2F0Y2htYW4gY2xvY2sgIiRnaXRfd29ya190cmVlIi87CisJZGllICJGYWlsZWQgdG8gZ2V0IGNsb2NrIGlkIG9uICckZ2l0X3dvcmtfdHJlZScuXG4iIC4KKwkJIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiBpZiAkPyAhPSAwOworCisJcmV0dXJuICRqc29uX3BrZy0+bmV3LT51dGY4LT5kZWNvZGUoJHJlc3BvbnNlKTsKK30KKworc3ViIHdhdGNobWFuX3F1ZXJ5IHsKKwlteSAkcGlkID0gb3BlbjIoXCpDSExEX09VVCwgXCpDSExEX0lOLCAnd2F0Y2htYW4gLWogLS1uby1wcmV0dHknKQorCW9yIGRpZSAib3BlbjIoKSBmYWlsZWQ6ICQhXG4iIC4KKwkiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iOworCisJIyBJbiB0aGUgcXVlcnkgZXhwcmVzc2lvbiBiZWxvdyB3ZSdyZSBhc2tpbmcgZm9yIG5hbWVzIG9mIGZpbGVzIHRoYXQKKwkjIGNoYW5nZWQgc2luY2UgJGxhc3RfdXBkYXRlX3Rva2VuIGJ1dCBub3QgZnJvbSB0aGUgLmdpdCBmb2xkZXIuCisJIworCSMgVG8gYWNjb21wbGlzaCB0aGlzLCB3ZSdyZSB1c2luZyB0aGUgInNpbmNlIiBnZW5lcmF0b3IgdG8gdXNlIHRoZQorCSMgcmVjZW5jeSBpbmRleCB0byBzZWxlY3QgY2FuZGlkYXRlIG5vZGVzIGFuZCAiZmllbGRzIiB0byBsaW1pdCB0aGUKKwkjIG91dHB1dCB0byBmaWxlIG5hbWVzIG9ubHkuIFRoZW4gd2UncmUgdXNpbmcgdGhlICJleHByZXNzaW9uIiB0ZXJtIHRvCisJIyBmdXJ0aGVyIGNvbnN0cmFpbiB0aGUgcmVzdWx0cy4KKwlpZiAoc3Vic3RyKCRsYXN0X3VwZGF0ZV90b2tlbiwgMCwgMSkgZXEgImMiKSB7CisJCSRsYXN0X3VwZGF0ZV90b2tlbiA9ICJcIiRsYXN0X3VwZGF0ZV90b2tlblwiIjsKKwl9CisJbXkgJHF1ZXJ5ID0gPDwiCUVORCI7CisJCVsicXVlcnkiLCAiJGdpdF93b3JrX3RyZWUiLCB7CisJCQkic2luY2UiOiAkbGFzdF91cGRhdGVfdG9rZW4sCisJCQkiZmllbGRzIjogWyJuYW1lIl0sCisJCQkiZXhwcmVzc2lvbiI6IFsibm90IiwgWyJkaXJuYW1lIiwgIi5naXQiXV0KKwkJfV0KKwlFTkQKKworCSMgVW5jb21tZW50IGZvciBkZWJ1Z2dpbmcgdGhlIHdhdGNobWFuIHF1ZXJ5CisJIyBvcGVuIChteSAkZmgsICI+IiwgIi5naXQvd2F0Y2htYW4tcXVlcnkuanNvbiIpOworCSMgcHJpbnQgJGZoICRxdWVyeTsKKwkjIGNsb3NlICRmaDsKKworCXByaW50IENITERfSU4gJHF1ZXJ5OworCWNsb3NlIENITERfSU47CisJbXkgJHJlc3BvbnNlID0gZG8ge2xvY2FsICQvOyA8Q0hMRF9PVVQ+fTsKKworCSMgVW5jb21tZW50IGZvciBkZWJ1Z2dpbmcgdGhlIHdhdGNoIHJlc3BvbnNlCisJIyBvcGVuICgkZmgsICI+IiwgIi5naXQvd2F0Y2htYW4tcmVzcG9uc2UuanNvbiIpOworCSMgcHJpbnQgJGZoICRyZXNwb25zZTsKKwkjIGNsb3NlICRmaDsKKworCWRpZSAiV2F0Y2htYW46IGNvbW1hbmQgcmV0dXJuZWQgbm8gb3V0cHV0LlxuIiAuCisJIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiBpZiAkcmVzcG9uc2UgZXEgIiI7CisJZGllICJXYXRjaG1hbjogY29tbWFuZCByZXR1cm5lZCBpbnZhbGlkIG91dHB1dDogJHJlc3BvbnNlXG4iIC4KKwkiRmFsbGluZyBiYWNrIHRvIHNjYW5uaW5nLi4uXG4iIHVubGVzcyAkcmVzcG9uc2UgPX4gL15cey87CisKKwlyZXR1cm4gJGpzb25fcGtnLT5uZXctPnV0ZjgtPmRlY29kZSgkcmVzcG9uc2UpOworfQorCitzdWIgaXNfd29ya190cmVlX3dhdGNoZWQgeworCW15ICgkb3V0cHV0KSA9IEBfOworCW15ICRlcnJvciA9ICRvdXRwdXQtPntlcnJvcn07CisJaWYgKCRyZXRyeSA+IDAgYW5kICRlcnJvciBhbmQgJGVycm9yID1+IG0vdW5hYmxlIHRvIHJlc29sdmUgcm9vdCAuKiBkaXJlY3RvcnkgKC4qKSBpcyBub3Qgd2F0Y2hlZC8pIHsKKwkJJHJldHJ5LS07CisJCW15ICRyZXNwb25zZSA9IHF4L3dhdGNobWFuIHdhdGNoICIkZ2l0X3dvcmtfdHJlZSIvOworCQlkaWUgIkZhaWxlZCB0byBtYWtlIHdhdGNobWFuIHdhdGNoICckZ2l0X3dvcmtfdHJlZScuXG4iIC4KKwkJICAgICJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJD8gIT0gMDsKKwkJJG91dHB1dCA9ICRqc29uX3BrZy0+bmV3LT51dGY4LT5kZWNvZGUoJHJlc3BvbnNlKTsKKwkJJGVycm9yID0gJG91dHB1dC0+e2Vycm9yfTsKKwkJZGllICJXYXRjaG1hbjogJGVycm9yLlxuIiAuCisJCSJGYWxsaW5nIGJhY2sgdG8gc2Nhbm5pbmcuLi5cbiIgaWYgJGVycm9yOworCisJCSMgVW5jb21tZW50IGZvciBkZWJ1Z2dpbmcgd2F0Y2htYW4gb3V0cHV0CisJCSMgb3BlbiAobXkgJGZoLCAiPiIsICIuZ2l0L3dhdGNobWFuLW91dHB1dC5vdXQiKTsKKwkJIyBjbG9zZSAkZmg7CisKKwkJIyBXYXRjaG1hbiB3aWxsIGFsd2F5cyByZXR1cm4gYWxsIGZpbGVzIG9uIHRoZSBmaXJzdCBxdWVyeSBzbworCQkjIHJldHVybiB0aGUgZmFzdCAiZXZlcnl0aGluZyBpcyBkaXJ0eSIgZmxhZyB0byBnaXQgYW5kIGRvIHRoZQorCQkjIFdhdGNobWFuIHF1ZXJ5IGp1c3QgdG8gZ2V0IGl0IG92ZXIgd2l0aCBub3cgc28gd2Ugd29uJ3QgcGF5CisJCSMgdGhlIGNvc3QgaW4gZ2l0IHRvIGxvb2sgdXAgZWFjaCBpbmRpdmlkdWFsIGZpbGUuCisJCW15ICRvID0gd2F0Y2htYW5fY2xvY2soKTsKKwkJJGVycm9yID0gJG91dHB1dC0+e2Vycm9yfTsKKworCQlkaWUgIldhdGNobWFuOiAkZXJyb3IuXG4iIC4KKwkJIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiBpZiAkZXJyb3I7CisKKwkJb3V0cHV0X3Jlc3VsdCgkby0+e2Nsb2NrfSwgKCIvIikpOworCQkkbGFzdF91cGRhdGVfdG9rZW4gPSAkby0+e2Nsb2NrfTsKKworCQlldmFsIHsgbGF1bmNoX3dhdGNobWFuKCkgfTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGllICJXYXRjaG1hbjogJGVycm9yLlxuIiAuCisJIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIiBpZiAkZXJyb3I7CisKKwlyZXR1cm4gMTsKK30KKworc3ViIGdldF93b3JraW5nX2RpciB7CisJbXkgJHdvcmtpbmdfZGlyOworCWlmICgkXk8gPX4gJ21zeXMnIHx8ICReTyA9fiAnY3lnd2luJykgeworCQkkd29ya2luZ19kaXIgPSBXaW4zMjo6R2V0Q3dkKCk7CisJCSR3b3JraW5nX2RpciA9fiB0ci9cXC9cLy87CisJfSBlbHNlIHsKKwkJcmVxdWlyZSBDd2Q7CisJCSR3b3JraW5nX2RpciA9IEN3ZDo6Y3dkKCk7CisJfQorCisJcmV0dXJuICR3b3JraW5nX2RpcjsKK30KZGlmZiAtLWdpdCBhL3QvdDc1MjAtaWdub3JlZC1ob29rLXdhcm5pbmcuc2ggYi90L3Q3NTIwLWlnbm9yZWQtaG9vay13YXJuaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzNGZiN2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTIwLWlnbm9yZWQtaG9vay13YXJuaW5nLnNoCkBAIC0wLDAgKzEsNDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdpZ25vcmVkIGhvb2sgd2FybmluZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWhvb2tkaXI9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2hvb2tzIiAmJgorCWhvb2s9IiRob29rZGlyL3ByZS1jb21taXQiICYmCisJbWtkaXIgLXAgIiRob29rZGlyIiAmJgorCXdyaXRlX3NjcmlwdCAiJGhvb2siIDw8LVxFT0YKKwlleGl0IDAKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gd2FybmluZyBpZiBob29rIGlzIG5vdCBpZ25vcmVkJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJtb3JlIiAyPm1lc3NhZ2UgJiYKKwl0ZXN0X2kxOG5ncmVwICEgLWUgImhvb2sgd2FzIGlnbm9yZWQiIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3dhcm5pbmcgaWYgaG9vayBpcyBpZ25vcmVkJyAnCisJY2htb2QgLXggIiRob29rIiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZXZlbiBtb3JlIiAyPm1lc3NhZ2UgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJob29rIHdhcyBpZ25vcmVkIiBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdubyB3YXJuaW5nIGlmIGFkdmljZS5pZ25vcmVkSG9vayBzZXQgdG8gZmFsc2UnICcKKwl0ZXN0X2NvbmZpZyBhZHZpY2UuaWdub3JlZEhvb2sgZmFsc2UgJiYKKwljaG1vZCAteCAiJGhvb2siICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJldmVuIG1vcmUiIDI+bWVzc2FnZSAmJgorCXRlc3RfaTE4bmdyZXAgISAtZSAiaG9vayB3YXMgaWdub3JlZCIgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIGlmIHVuc2V0IGFkdmljZS5pZ25vcmVkSG9vayBhbmQgaG9vayByZW1vdmVkJyAnCisJcm0gLWYgIiRob29rIiAmJgorCXRlc3RfdW5jb25maWcgYWR2aWNlLmlnbm9yZWRIb29rICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJldmVuIG1vcmUiIDI+bWVzc2FnZSAmJgorCXRlc3RfaTE4bmdyZXAgISAtZSAiaG9vayB3YXMgaWdub3JlZCIgbWVzc2FnZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MjEtaWdub3JlZC1tb2RlLnNoIGIvdC90NzUyMS1pZ25vcmVkLW1vZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTE3OTA5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MjEtaWdub3JlZC1tb2RlLnNoCkBAIC0wLDAgKzEsMjMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cyBpZ25vcmVkIG1vZGVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaW5pdGlhbCBjb21taXQgYW5kIGlnbm9yZSBmaWxlJyAnCisJY2F0ID4uZ2l0aWdub3JlIDw8LVxFT0YgJiYKKwkqLmlnbgorCWlnbm9yZWRfZGlyLworCSEqLnVuaWdub3JlCisJRU9GCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBiZWhhdmlvciBvZiBzdGF0dXMgb24gZGlyZWN0b3JpZXMgd2l0aCBpZ25vcmVkIGZpbGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2xlYW4gLWZkeCIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPyBleHBlY3QKKwk/IG91dHB1dAorCSEgZGlyL2lnbm9yZWQvaWdub3JlZF8xLmlnbgorCSEgZGlyL2lnbm9yZWQvaWdub3JlZF8yLmlnbgorCSEgaWdub3JlZC9pZ25vcmVkXzEuaWduCisJISBpZ25vcmVkL2lnbm9yZWRfMi5pZ24KKwlFT0YKKworCW1rZGlyIC1wIGlnbm9yZWQgZGlyL2lnbm9yZWQgJiYKKwl0b3VjaCBpZ25vcmVkL2lnbm9yZWRfMS5pZ24gaWdub3JlZC9pZ25vcmVkXzIuaWduIFwKKwkJZGlyL2lnbm9yZWQvaWdub3JlZF8xLmlnbiBkaXIvaWdub3JlZC9pZ25vcmVkXzIuaWduICYmCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD1tYXRjaGluZyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBzdGF0dXMgYmVoYXZpb3Igb24gZGlyZWN0b3J5IHdpdGggdHJhY2tlZCAmIGlnbm9yZWQgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4ICYmIGdpdCByZXNldCBIRUFEfjEgLS1oYXJkIiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGV4cGVjdAorCT8gb3V0cHV0CisJISBkaXIvdHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMS5pZ24KKwkhIGRpci90cmFja2VkX2lnbm9yZWQvaWdub3JlZF8yLmlnbgorCSEgdHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMS5pZ24KKwkhIHRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzIuaWduCisJRU9GCisKKwlta2RpciAtcCB0cmFja2VkX2lnbm9yZWQgZGlyL3RyYWNrZWRfaWdub3JlZCAmJgorCXRvdWNoIHRyYWNrZWRfaWdub3JlZC90cmFja2VkXzEgdHJhY2tlZF9pZ25vcmVkL3RyYWNrZWRfMiBcCisJCXRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzEuaWduIHRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzIuaWduIFwKKwkJZGlyL3RyYWNrZWRfaWdub3JlZC90cmFja2VkXzEgZGlyL3RyYWNrZWRfaWdub3JlZC90cmFja2VkXzIgXAorCQlkaXIvdHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMS5pZ24gZGlyL3RyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzIuaWduICYmCisKKwlnaXQgYWRkIHRyYWNrZWRfaWdub3JlZC90cmFja2VkXzEgdHJhY2tlZF9pZ25vcmVkL3RyYWNrZWRfMiBcCisJCWRpci90cmFja2VkX2lnbm9yZWQvdHJhY2tlZF8xIGRpci90cmFja2VkX2lnbm9yZWQvdHJhY2tlZF8yICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHRyYWNrZWQgZmlsZXMiICYmCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD1tYXRjaGluZyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBzdGF0dXMgYmVoYXZpb3Igb24gZGlyZWN0b3J5IHdpdGggdW50cmFja2VkIGFuZCBpZ25vcmVkIGZpbGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2xlYW4gLWZkeCIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPyBkaXIvdW50cmFja2VkX2lnbm9yZWQvdW50cmFja2VkXzEKKwk/IGRpci91bnRyYWNrZWRfaWdub3JlZC91bnRyYWNrZWRfMgorCT8gZXhwZWN0CisJPyBvdXRwdXQKKwk/IHVudHJhY2tlZF9pZ25vcmVkL3VudHJhY2tlZF8xCisJPyB1bnRyYWNrZWRfaWdub3JlZC91bnRyYWNrZWRfMgorCSEgZGlyL3VudHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMS5pZ24KKwkhIGRpci91bnRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzIuaWduCisJISB1bnRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzEuaWduCisJISB1bnRyYWNrZWRfaWdub3JlZC9pZ25vcmVkXzIuaWduCisJRU9GCisKKwlta2RpciAtcCB1bnRyYWNrZWRfaWdub3JlZCBkaXIvdW50cmFja2VkX2lnbm9yZWQgJiYKKwl0b3VjaCB1bnRyYWNrZWRfaWdub3JlZC91bnRyYWNrZWRfMSB1bnRyYWNrZWRfaWdub3JlZC91bnRyYWNrZWRfMiBcCisJCXVudHJhY2tlZF9pZ25vcmVkL2lnbm9yZWRfMS5pZ24gdW50cmFja2VkX2lnbm9yZWQvaWdub3JlZF8yLmlnbiBcCisJCWRpci91bnRyYWNrZWRfaWdub3JlZC91bnRyYWNrZWRfMSBkaXIvdW50cmFja2VkX2lnbm9yZWQvdW50cmFja2VkXzIgXAorCQlkaXIvdW50cmFja2VkX2lnbm9yZWQvaWdub3JlZF8xLmlnbiBkaXIvdW50cmFja2VkX2lnbm9yZWQvaWdub3JlZF8yLmlnbiAmJgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWlnbm9yZWQ9bWF0Y2hpbmcgLS11bnRyYWNrZWQtZmlsZXM9YWxsID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgc3RhdHVzIG1hdGNoaW5nIGlnbm9yZWQgZmlsZXMgb24gaWdub3JlZCBkaXJlY3RvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4IiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGV4cGVjdAorCT8gb3V0cHV0CisJISBpZ25vcmVkX2Rpci8KKwlFT0YKKworCW1rZGlyIGlnbm9yZWRfZGlyICYmCisJdG91Y2ggaWdub3JlZF9kaXIvaWdub3JlZF8xIGlnbm9yZWRfZGlyL2lnbm9yZWRfMiBcCisJCWlnbm9yZWRfZGlyL2lnbm9yZWRfMS5pZ24gaWdub3JlZF9kaXIvaWdub3JlZF8yLmlnbiAmJgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWlnbm9yZWQ9bWF0Y2hpbmcgLS11bnRyYWNrZWQtZmlsZXM9YWxsID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgc3RhdHVzIGJlaGF2aW9yIG9uIGlnbm9yZWQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdHJhY2tlZCBmaWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2xlYW4gLWZkeCAmJiBnaXQgcmVzZXQgSEVBRH4xIC0taGFyZCIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPyBleHBlY3QKKwk/IG91dHB1dAorCSEgaWdub3JlZF9kaXIvaWdub3JlZF8xCisJISBpZ25vcmVkX2Rpci9pZ25vcmVkXzEuaWduCisJISBpZ25vcmVkX2Rpci9pZ25vcmVkXzIKKwkhIGlnbm9yZWRfZGlyL2lnbm9yZWRfMi5pZ24KKwlFT0YKKworCW1rZGlyIGlnbm9yZWRfZGlyICYmCisJdG91Y2ggaWdub3JlZF9kaXIvaWdub3JlZF8xIGlnbm9yZWRfZGlyL2lnbm9yZWRfMiBcCisJCWlnbm9yZWRfZGlyL2lnbm9yZWRfMS5pZ24gaWdub3JlZF9kaXIvaWdub3JlZF8yLmlnbiBcCisJCWlnbm9yZWRfZGlyL3RyYWNrZWQgJiYKKwlnaXQgYWRkIC1mIGlnbm9yZWRfZGlyL3RyYWNrZWQgJiYKKwlnaXQgY29tbWl0IC1tICJGb3JjZSBhZGQgZmlsZSBpbiBpZ25vcmVkIGRpcmVjdG9yeSIgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD1tYXRjaGluZyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBtYXRjaGluZyBpZ25vcmVkIGZpbGVzIHdpdGggLS11bnRyYWNrZWQtZmlsZXM9bm9ybWFsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2xlYW4gLWZkeCIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPyBleHBlY3QKKwk/IG91dHB1dAorCT8gdW50cmFja2VkX2Rpci8KKwkhIGlnbm9yZWRfZGlyLworCSEgaWdub3JlZF9maWxlcy9pZ25vcmVkXzEuaWduCisJISBpZ25vcmVkX2ZpbGVzL2lnbm9yZWRfMi5pZ24KKwlFT0YKKworCW1rZGlyIGlnbm9yZWRfZGlyIGlnbm9yZWRfZmlsZXMgdW50cmFja2VkX2RpciAmJgorCXRvdWNoIGlnbm9yZWRfZGlyL2lnbm9yZWRfMSBpZ25vcmVkX2Rpci9pZ25vcmVkXzIgXAorCQlpZ25vcmVkX2ZpbGVzL2lnbm9yZWRfMS5pZ24gaWdub3JlZF9maWxlcy9pZ25vcmVkXzIuaWduIFwKKwkJdW50cmFja2VkX2Rpci91bnRyYWNrZWQgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD1tYXRjaGluZyAtLXVudHJhY2tlZC1maWxlcz1ub3JtYWwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBtYXRjaGluZyBpZ25vcmVkIGZpbGVzIHdpdGggLS11bnRyYWNrZWQtZmlsZXM9bm9ybWFsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2xlYW4gLWZkeCIgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPyBleHBlY3QKKwk/IG91dHB1dAorCT8gdW50cmFja2VkX2Rpci8KKwkhIGlnbm9yZWRfZGlyLworCSEgaWdub3JlZF9maWxlcy9pZ25vcmVkXzEuaWduCisJISBpZ25vcmVkX2ZpbGVzL2lnbm9yZWRfMi5pZ24KKwlFT0YKKworCW1rZGlyIGlnbm9yZWRfZGlyIGlnbm9yZWRfZmlsZXMgdW50cmFja2VkX2RpciAmJgorCXRvdWNoIGlnbm9yZWRfZGlyL2lnbm9yZWRfMSBpZ25vcmVkX2Rpci9pZ25vcmVkXzIgXAorCQlpZ25vcmVkX2ZpbGVzL2lnbm9yZWRfMS5pZ24gaWdub3JlZF9maWxlcy9pZ25vcmVkXzIuaWduIFwKKwkJdW50cmFja2VkX2Rpci91bnRyYWNrZWQgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD1tYXRjaGluZyAtLXVudHJhY2tlZC1maWxlcz1ub3JtYWwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBzdGF0dXMgYmVoYXZpb3Igb24gaWdub3JlZCBkaXJlY3RvcnkgY29udGFpbmluZyB0cmFja2VkIGZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4ICYmIGdpdCByZXNldCBIRUFEfjEgLS1oYXJkIiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGV4cGVjdAorCT8gb3V0cHV0CisJISBpZ25vcmVkX2Rpci9pZ25vcmVkXzEKKwkhIGlnbm9yZWRfZGlyL2lnbm9yZWRfMS5pZ24KKwkhIGlnbm9yZWRfZGlyL2lnbm9yZWRfMgorCSEgaWdub3JlZF9kaXIvaWdub3JlZF8yLmlnbgorCUVPRgorCisJbWtkaXIgaWdub3JlZF9kaXIgJiYKKwl0b3VjaCBpZ25vcmVkX2Rpci9pZ25vcmVkXzEgaWdub3JlZF9kaXIvaWdub3JlZF8yIFwKKwkJaWdub3JlZF9kaXIvaWdub3JlZF8xLmlnbiBpZ25vcmVkX2Rpci9pZ25vcmVkXzIuaWduIFwKKwkJaWdub3JlZF9kaXIvdHJhY2tlZCAmJgorCWdpdCBhZGQgLWYgaWdub3JlZF9kaXIvdHJhY2tlZCAmJgorCWdpdCBjb21taXQgLW0gIkZvcmNlIGFkZCBmaWxlIGluIGlnbm9yZWQgZGlyZWN0b3J5IiAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkPW1hdGNoaW5nIC0tdW50cmFja2VkLWZpbGVzPW5vcm1hbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IGJlaGF2aW9yIG9mIHN0YXR1cyB3aXRoIC0taWdub3JlZD1ubycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNsZWFuIC1mZHgiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCT8gZXhwZWN0CisJPyBvdXRwdXQKKwlFT0YKKworCW1rZGlyIC1wIGlnbm9yZWQgZGlyL2lnbm9yZWQgJiYKKwl0b3VjaCBpZ25vcmVkL2lnbm9yZWRfMS5pZ24gaWdub3JlZC9pZ25vcmVkXzIuaWduIFwKKwkJZGlyL2lnbm9yZWQvaWdub3JlZF8xLmlnbiBkaXIvaWdub3JlZC9pZ25vcmVkXzIuaWduICYmCisKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluPXYyIC0taWdub3JlZD1ubyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBiZWhhdmlvciBvZiBzdGF0dXMgd2l0aCAtLWlnbm9yZWQ9dHJhZGl0aW9uYWwgYW5kIC0tdW50cmFja2VkLWZpbGVzPWFsbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNsZWFuIC1mZHgiICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCT8gZXhwZWN0CisJPyBvdXRwdXQKKwkhIGRpci9pZ25vcmVkL2lnbm9yZWRfMS5pZ24KKwkhIGRpci9pZ25vcmVkL2lnbm9yZWRfMi5pZ24KKwkhIGlnbm9yZWQvaWdub3JlZF8xLmlnbgorCSEgaWdub3JlZC9pZ25vcmVkXzIuaWduCisJRU9GCisKKwlta2RpciAtcCBpZ25vcmVkIGRpci9pZ25vcmVkICYmCisJdG91Y2ggaWdub3JlZC9pZ25vcmVkXzEuaWduIGlnbm9yZWQvaWdub3JlZF8yLmlnbiBcCisJCWRpci9pZ25vcmVkL2lnbm9yZWRfMS5pZ24gZGlyL2lnbm9yZWQvaWdub3JlZF8yLmlnbiAmJgorCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MiAtLWlnbm9yZWQ9dHJhZGl0aW9uYWwgLS11bnRyYWNrZWQtZmlsZXM9YWxsID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgYmVoYXZpb3Igb2Ygc3RhdHVzIHdpdGggLS1pZ25vcmVkPXRyYWRpdGlvbmFsIGFuZCAtLXVudHJhY2tlZC1maWxlcz1ub3JtYWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4IiAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk/IGV4cGVjdAorCT8gb3V0cHV0CisJISBkaXIvCisJISBpZ25vcmVkLworCUVPRgorCisJbWtkaXIgLXAgaWdub3JlZCBkaXIvaWdub3JlZCAmJgorCXRvdWNoIGlnbm9yZWQvaWdub3JlZF8xLmlnbiBpZ25vcmVkL2lnbm9yZWRfMi5pZ24gXAorCQlkaXIvaWdub3JlZC9pZ25vcmVkXzEuaWduIGRpci9pZ25vcmVkL2lnbm9yZWRfMi5pZ24gJiYKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djIgLS1pZ25vcmVkPXRyYWRpdGlvbmFsIC0tdW50cmFja2VkLWZpbGVzPW5vcm1hbCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTI1LXN0YXR1cy1yZW5hbWUuc2ggYi90L3Q3NTI1LXN0YXR1cy1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTYyNzM2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MjUtc3RhdHVzLXJlbmFtZS5zaApAQCAtMCwwICsxLDExMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMgcmVuYW1lIGRldGVjdGlvbiBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIDEgPm9yaWdpbmFsICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSJBZGRpbmcgb3JpZ2luYWwgZmlsZS4iICYmCisJbXYgb3JpZ2luYWwgcmVuYW1lZCAmJgorCWVjaG8gMiA+PiByZW5hbWVkICYmCisJZ2l0IGFkZCAuICYmCisJY2F0ID4uZ2l0aWdub3JlIDw8LVxFT0YKKwkuZ2l0aWdub3JlCisJZXhwZWN0KgorCWFjdHVhbCoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIG5vLW9wdGlvbnMnICcKKwlnaXQgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLW5vLXJlbmFtZXMnICcKKwlnaXQgc3RhdHVzIC0tbm8tcmVuYW1lcyA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZGVsZXRlZDoiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm5ldyBmaWxlOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cy5yZW5hbWVzIGluaGVyaXRzIGZyb20gZGlmZi5yZW5hbWVzIGZhbHNlJyAnCisJZ2l0IC1jIGRpZmYucmVuYW1lcz1mYWxzZSBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImRlbGV0ZWQ6IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJuZXcgZmlsZToiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMucmVuYW1lcyBpbmhlcml0cyBmcm9tIGRpZmYucmVuYW1lcyB0cnVlJyAnCisJZ2l0IC1jIGRpZmYucmVuYW1lcz10cnVlIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMucmVuYW1lcyBvdmVycmlkZXMgZGlmZi5yZW5hbWVzIGZhbHNlJyAnCisJZ2l0IC1jIGRpZmYucmVuYW1lcz10cnVlIC1jIHN0YXR1cy5yZW5hbWVzPWZhbHNlIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiZGVsZXRlZDoiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIm5ldyBmaWxlOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cy5yZW5hbWVzIG92ZXJyaWRlcyBmcm9tIGRpZmYucmVuYW1lcyB0cnVlJyAnCisJZ2l0IC1jIGRpZmYucmVuYW1lcz1mYWxzZSAtYyBzdGF0dXMucmVuYW1lcz10cnVlIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc3RhdHVzLnJlbmFtZXM9ZmFsc2UnICcKKwlnaXQgLWMgc3RhdHVzLnJlbmFtZXM9ZmFsc2Ugc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJkZWxldGVkOiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAibmV3IGZpbGU6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN0YXR1cy5yZW5hbWVzPXRydWUnICcKKwlnaXQgLWMgc3RhdHVzLnJlbmFtZXM9dHJ1ZSBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGhvbm9ycyBzdGF0dXMucmVuYW1lcz1mYWxzZScgJworCWdpdCAtYyBzdGF0dXMucmVuYW1lcz1mYWxzZSBjb21taXQgLS1kcnktcnVuID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJkZWxldGVkOiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAibmV3IGZpbGU6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGhvbm9ycyBzdGF0dXMucmVuYW1lcz10cnVlJyAnCisJZ2l0IC1jIHN0YXR1cy5yZW5hbWVzPXRydWUgY29tbWl0IC0tZHJ5LXJ1biA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgY29uZmlnIG92ZXJyaWRkZW4nICcKKwlnaXQgLWMgc3RhdHVzLnJlbmFtZXM9dHJ1ZSBzdGF0dXMgLS1uby1yZW5hbWVzID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJkZWxldGVkOiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAibmV3IGZpbGU6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNjb3JlPTEwMCUnICcKKwlnaXQgc3RhdHVzIC1NPTEwMCUgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImRlbGV0ZWQ6IiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJuZXcgZmlsZToiIGFjdHVhbCAmJgorCisJZ2l0IHN0YXR1cyAtLWZpbmQtcmVuYW1lcz0xMDAlID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJkZWxldGVkOiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAibmV3IGZpbGU6IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNjb3JlPTAxJScgJworCWdpdCBzdGF0dXMgLU09MDElID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiIgYWN0dWFsICYmCisKKwlnaXQgc3RhdHVzIC0tZmluZC1yZW5hbWVzPTAxJSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDoiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3BpZXMgbm90IG92ZXJyaWRkZW4gYnkgZmluZC1yZW5hbWVzJyAnCisJY3AgcmVuYW1lZCBjb3B5ICYmCisJZ2l0IGFkZCBjb3B5ICYmCisKKwlnaXQgLWMgc3RhdHVzLnJlbmFtZXM9Y29waWVzIHN0YXR1cyAtTT0wMSUgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImNvcGllZDoiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgInJlbmFtZWQ6IiBhY3R1YWwgJiYKKworCWdpdCAtYyBzdGF0dXMucmVuYW1lcz1jb3BpZXMgc3RhdHVzIC0tZmluZC1yZW5hbWVzPTAxJSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiY29waWVkOiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAicmVuYW1lZDoiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MjYtY29tbWl0LXBhdGhzcGVjLWZpbGUuc2ggYi90L3Q3NTI2LWNvbW1pdC1wYXRoc3BlYy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVmYmU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTI2LWNvbW1pdC1wYXRoc3BlYy1maWxlLnNoCkBAIC0wLDAgKzEsMTY0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZpbGUwICYmCisJZ2l0IHRhZyBjaGVja3BvaW50ICYmCisKKwllY2hvIEEgPmZpbGVBLnQgJiYKKwllY2hvIEIgPmZpbGVCLnQgJiYKKwllY2hvIEMgPmZpbGVDLnQgJiYKKwllY2hvIEQgPmZpbGVELnQgJiYKKwlnaXQgYWRkIGZpbGVBLnQgZmlsZUIudCBmaWxlQy50IGZpbGVELnQKKycKKworcmVzdG9yZV9jaGVja3BvaW50ICgpIHsKKwlnaXQgcmVzZXQgLS1zb2Z0IGNoZWNrcG9pbnQKK30KKwordmVyaWZ5X2V4cGVjdCAoKSB7CisJZ2l0IGRpZmYtdHJlZSAtLW5vLWNvbW1pdC1pZCAtLW5hbWUtc3RhdHVzIC1yIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXRoc3BlYy1mcm9tLWZpbGUgZnJvbSBzdGRpbicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJZWNobyBmaWxlQS50IHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQS50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBhdGhzcGVjLWZyb20tZmlsZSBmcm9tIGZpbGUnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWVjaG8gZmlsZUEudCA+bGlzdCAmJgorCWdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtbSAiQ29tbWl0IiAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEJZmlsZUEudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTlVMIGRlbGltaXRlcnMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCXByaW50ZiAiZmlsZUEudFwwZmlsZUIudFwwIiB8IGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtLXBhdGhzcGVjLWZpbGUtbnVsIC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQS50CisJQQlmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcbmZpbGVCLnRcbiIgfCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPS0gLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVBLnQKKwlBCWZpbGVCLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRyYWlsaW5nIGRlbGltaXRlcicgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQS50XG5maWxlQi50IiB8IGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9LSAtbSAiQ29tbWl0IiAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEJZmlsZUEudAorCUEJZmlsZUIudAorCUVPRgorCXZlcmlmeV9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1JMRiBkZWxpbWl0ZXJzJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwlwcmludGYgImZpbGVBLnRcclxuZmlsZUIudFxyXG4iIHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQS50CisJQQlmaWxlQi50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMnICcKKwlyZXN0b3JlX2NoZWNrcG9pbnQgJiYKKworCWNhdCA+bGlzdCA8PC1cRU9GICYmCisJImZpbGVcMTAxLnQiCisJRU9GCisKKwlnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLW0gIkNvbW1pdCIgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBCWZpbGVBLnQKKwlFT0YKKwl2ZXJpZnlfZXhwZWN0IGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMgbm90IGNvbXBhdGlibGUgd2l0aCAtLXBhdGhzcGVjLWZpbGUtbnVsJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisKKwljYXQgPmxpc3QgPDwtXEVPRiAmJgorCSJmaWxlXDEwMS50IgorCUVPRgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1saXN0IC0tcGF0aHNwZWMtZmlsZS1udWwgLW0gIkNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSB0b3VjaGVzIHdoYXQgd2FzIGxpc3RlZCcgJworCXJlc3RvcmVfY2hlY2twb2ludCAmJgorCisJcHJpbnRmICJmaWxlQi50XG5maWxlQy50XG4iIHwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT0tIC1tICJDb21taXQiICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQQlmaWxlQi50CisJQQlmaWxlQy50CisJRU9GCisJdmVyaWZ5X2V4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBjb25kaXRpb25zJyAnCisJcmVzdG9yZV9jaGVja3BvaW50ICYmCisJZWNobyBmaWxlQS50ID5saXN0ICYmCisJPmVtcHR5X2xpc3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLWludGVyYWN0aXZlIC1tICJDb21taXQiIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLXBhdGNoIC1tICJDb21taXQiIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiLS1wYXRoc3BlYy1mcm9tLWZpbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9bGlzdCAtLWFsbCAtbSAiQ29tbWl0IiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZSIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZnJvbS1maWxlPWxpc3QgLW0gIkNvbW1pdCIgLS0gZmlsZUEudCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIi0tcGF0aHNwZWMtZnJvbS1maWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHBhdGhzcGVjIGFyZ3VtZW50cyIgZXJyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tcGF0aHNwZWMtZmlsZS1udWwgLW0gIkNvbW1pdCIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICItLXBhdGhzcGVjLWZpbGUtbnVsIHJlcXVpcmVzIC0tcGF0aHNwZWMtZnJvbS1maWxlIiBlcnIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1wYXRoc3BlYy1mcm9tLWZpbGU9ZW1wdHlfbGlzdCAtLWluY2x1ZGUgLW0gIkNvbW1pdCIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iIGVyciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXBhdGhzcGVjLWZyb20tZmlsZT1lbXB0eV9saXN0IC0tb25seSAtbSAiQ29tbWl0IiAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgLWUgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwMC1tZXJnZS5zaCBiL3QvdDc2MDAtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTMyNjA4OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDAtbWVyZ2Uuc2gKQEAgLTAsMCArMSw5MjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlCisKK1Rlc3RpbmcgYmFzaWMgbWVyZ2Ugb3BlcmF0aW9ucy9vcHRpb24gcGFyc2luZy4KKworISBbYzBdIGNvbW1pdCAwCisgISBbYzFdIGNvbW1pdCAxCisgICEgW2MyXSBjb21taXQgMgorICAgISBbYzNdIGNvbW1pdCAzCisgICAgISBbYzRdIGM0CisgICAgICEgW2M1XSBjNQorICAgICAgISBbYzZdIGM2CisgICAgICAgKiBbbWFzdGVyXSBNZXJnZSBjb21taXQgJ2MxJworLS0tLS0tLS0KKyAgICAgICAtIFttYXN0ZXJdIE1lcmdlIGNvbW1pdCAnYzEnCisgKyAgICAgKiBbYzFdIGNvbW1pdCAxCisgICAgICArICBbYzZdIGM2CisgICAgICsgICBbYzVdIGM1CisgICAgKysgICBbYzRdIGM0CisgICArKysrICBbYzNdIGNvbW1pdCAzCisgICsgICAgICBbYzJdIGNvbW1pdCAyCisrKysrKysrKiBbYzBdIGNvbW1pdCAwCisnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisKK3ByaW50ZiAnJXNcbicgMSAyIDMgNCA1IDYgNyA4IDkgPmZpbGUKK3ByaW50ZiAnJXNcbicgJzEgWCcgMiAzIDQgNSA2IDcgOCA5ID5maWxlLjEKK3ByaW50ZiAnJXNcbicgMSAyIDMgNCAnNSBYJyA2IDcgOCA5ID5maWxlLjUKK3ByaW50ZiAnJXNcbicgMSAyIDMgNCA1IDYgNyA4ICc5IFgnID5maWxlLjkKK3ByaW50ZiAnJXNcbicgMSAyIDMgNCA1IDYgNyA4ICc5IFknID5maWxlLjl5CitwcmludGYgJyVzXG4nICcxIFgnIDIgMyA0IDUgNiA3IDggOSA+cmVzdWx0LjEKK3ByaW50ZiAnJXNcbicgJzEgWCcgMiAzIDQgJzUgWCcgNiA3IDggOSA+cmVzdWx0LjEtNQorcHJpbnRmICclc1xuJyAnMSBYJyAyIDMgNCAnNSBYJyA2IDcgOCAnOSBYJyA+cmVzdWx0LjEtNS05CitwcmludGYgJyVzXG4nIDEgMiAzIDQgNSA2IDcgOCAnOSBaJyA+cmVzdWx0Ljl6CisKK2NyZWF0ZV9tZXJnZV9tc2dzICgpIHsKKwllY2hvICJNZXJnZSB0YWcgJ2MyJyIgPm1zZy4xLTUgJiYKKwllY2hvICJNZXJnZSB0YWdzICdjMicgYW5kICdjMyciID5tc2cuMS01LTkgJiYKKwl7CisJCWVjaG8gIlNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOiIgJiYKKwkJZWNobyAmJgorCQlnaXQgbG9nIC0tbm8tbWVyZ2VzIF5IRUFEIGMxCisJfSA+c3F1YXNoLjEgJiYKKwl7CisJCWVjaG8gIlNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOiIgJiYKKwkJZWNobyAmJgorCQlnaXQgbG9nIC0tbm8tbWVyZ2VzIF5IRUFEIGMyCisJfSA+c3F1YXNoLjEtNSAmJgorCXsKKwkJZWNobyAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6IiAmJgorCQllY2hvICYmCisJCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzIgYzMKKwl9ID5zcXVhc2guMS01LTkgJiYKKwl7CisJCWVjaG8gIiogdGFnICdjMyc6IiAmJgorCQllY2hvICIgIGNvbW1pdCAzIgorCX0gPm1zZy5sb2cKK30KKwordmVyaWZ5X21lcmdlICgpIHsKKwl0ZXN0X2NtcCAiJDIiICIkMSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJaWYgdGVzdCAtbiAiJDMiCisJdGhlbgorCQlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzIEhFQUQgPm1zZy5hY3QgJiYKKwkJdGVzdF9jbXAgIiQzIiBtc2cuYWN0CisJZmkKK30KKwordmVyaWZ5X2hlYWQgKCkgeworCWVjaG8gIiQxIiA+aGVhZC5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+aGVhZC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBoZWFkLmV4cGVjdGVkIGhlYWQuYWN0dWFsCit9CisKK3ZlcmlmeV9wYXJlbnRzICgpIHsKKwlwcmludGYgJyVzXG4nICIkQCIgPnBhcmVudHMuZXhwZWN0ZWQgJiYKKwk+cGFyZW50cy5hY3R1YWwgJiYKKwlpPTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkIworCWRvCisJCWdpdCByZXYtcGFyc2UgSEVBRF4kaSA+PnBhcmVudHMuYWN0dWFsICYmCisJCWk9JChleHByICRpICsgMSkgfHwKKwkJcmV0dXJuIDEKKwlkb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiSEVBRF4kaSIgJiYKKwl0ZXN0X2NtcCBwYXJlbnRzLmV4cGVjdGVkIHBhcmVudHMuYWN0dWFsCit9CisKK3ZlcmlmeV9tZXJnZWhlYWRzICgpIHsKKwlwcmludGYgJyVzXG4nICIkQCIgPm1lcmdlaGVhZC5leHBlY3RlZCAmJgorCXdoaWxlIHJlYWQgc2hhMSByZXN0CisJZG8KKwkJZ2l0IHJldi1wYXJzZSAkc2hhMQorCWRvbmUgPC5naXQvTUVSR0VfSEVBRCA+bWVyZ2VoZWFkLmFjdHVhbCAmJgorCXRlc3RfY21wIG1lcmdlaGVhZC5leHBlY3RlZCBtZXJnZWhlYWQuYWN0dWFsCit9CisKK3ZlcmlmeV9ub19tZXJnZWhlYWQgKCkgeworCSEgdGVzdCAtZSAuZ2l0L01FUkdFX0hFQUQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMCIgJiYKKwlnaXQgdGFnIGMwICYmCisJYzA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY3AgZmlsZS4xIGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMSIgJiYKKwlnaXQgdGFnIGMxICYmCisJYzE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAiJGMwIiAmJgorCWNwIGZpbGUuNSBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IDIiICYmCisJZ2l0IHRhZyBjMiAmJgorCWMyPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZXNldCAtLWhhcmQgIiRjMCIgJiYKKwljcCBmaWxlLjl5IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgNyIgJiYKKwlnaXQgdGFnIGM3ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAiJGMwIiAmJgorCWNwIGZpbGUuOSBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IDMiICYmCisJZ2l0IHRhZyBjMyAmJgorCWMzPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZXNldCAtLWhhcmQgIiRjMCIgJiYKKwljcmVhdGVfbWVyZ2VfbXNncworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgb3B0aW9uIHBhcnNpbmcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLSQgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1zdWNoIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIGZvb2JhciBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcz1mb29iYXIgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLW0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1hYm9ydCBmb29iYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1hYm9ydCAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tY29udGludWUgZm9vYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tY29udGludWUgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtaCB3aXRoIGludmFsaWQgaW5kZXgnICcKKwlta2RpciBicm9rZW4gJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQk+LmdpdC9pbmRleCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgbWVyZ2UgLWggMj51c2FnZQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IG1lcmdlIiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IG5vbi1zdHJhdGVneSB3aXRoIGEgZ2l0LW1lcmdlLWZvbyBuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIGluZGV4IGMxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEnICcKKwllY2hvICJPQkpJRCBIRUFEQHswfTogbWVyZ2UgYzE6IEZhc3QtZm9yd2FyZCIgPnJlZmxvZy5leHBlY3RlZCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgIiRjMSIgJiYKKworCWdpdCByZWZsb2cgLTEgPnJlZmxvZy5hY3R1YWwgJiYKKwlzZWQgInMvJF94MDVbMC05YS1mXSovT0JKSUQvZyIgcmVmbG9nLmFjdHVhbCA+cmVmbG9nLmZ1enp5ICYmCisJdGVzdF9jbXAgcmVmbG9nLmV4cGVjdGVkIHJlZmxvZy5mdXp6eQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgd2l0aCAtLWZmLW9ubHknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tZmYtb25seSBjMSAmJgorCWdpdCBtZXJnZSAtLWZmLW9ubHkgSEVBRCBjMCBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgIiRjMSIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBmcm9tIHVuYm9ybiBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQga2lkICYmCisKKwllY2hvICJPQkpJRCBIRUFEQHswfTogaW5pdGlhbCBwdWxsIiA+cmVmbG9nLmV4cGVjdGVkICYmCisKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4ga2lkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgbWFzdGVyIiAmJgorCWdpdCBybSAtZnIgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLWZmLW9ubHkgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9oZWFkICIkYzEiICYmCisKKwlnaXQgcmVmbG9nIC0xID5yZWZsb2cuYWN0dWFsICYmCisJc2VkICJzLyRfeDA1WzAtOWEtZl1bMC05YS1mXS9PQkpJRC9nIiByZWZsb2cuYWN0dWFsID5yZWZsb2cuZnV6enkgJiYKKwl0ZXN0X2NtcCByZWZsb2cuZXhwZWN0ZWQgcmVmbG9nLmZ1enp5CisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMicgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tc3F1YXNoIGMzIHdpdGggYzcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3F1YXNoIGM3ICYmCisJY2F0IHJlc3VsdC45eiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby1lZGl0IC1hICYmCisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlTcXVhc2hlZCBjb21taXQgb2YgdGhlIGZvbGxvd2luZzoKKworCSQoZ2l0IHNob3cgLXMgYzcpCisKKwkjIENvbmZsaWN0czoKKwkjCWZpbGUKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCXNlZCAtZSAnMSwvXiQvZCcgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMzIHdpdGggYzcgd2l0aCBjb21taXQuY2xlYW51cCA9IHNjaXNzb3JzJyAnCisJZ2l0IGNvbmZpZyBjb21taXQuY2xlYW51cCBzY2lzc29ycyAmJgorCWdpdCByZXNldCAtLWhhcmQgYzMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzcgJiYKKwljYXQgcmVzdWx0Ljl6ID5maWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLWVkaXQgLWEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlNZXJnZSB0YWcgJyInIidjNyciJyInCisKKwkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkjIERvIG5vdCBtb2RpZnkgb3IgcmVtb3ZlIHRoZSBsaW5lIGFib3ZlLgorCSMgRXZlcnl0aGluZyBiZWxvdyBpdCB3aWxsIGJlIGlnbm9yZWQuCisJIworCSMgQ29uZmxpY3RzOgorCSMJZmlsZQorCUVPRgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1lICcxLC9eJC9kJyByYXcgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMzIHdpdGggYzcgd2l0aCAtLXNxdWFzaCBjb21taXQuY2xlYW51cCA9IHNjaXNzb3JzJyAnCisJZ2l0IGNvbmZpZyBjb21taXQuY2xlYW51cCBzY2lzc29ycyAmJgorCWdpdCByZXNldCAtLWhhcmQgYzMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zcXVhc2ggYzcgJiYKKwljYXQgcmVzdWx0Ljl6ID5maWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLWVkaXQgLWEgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOgorCisJJChnaXQgc2hvdyAtcyBjNykKKworCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSMgRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuCisJIyBFdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4KKwkjCisJIyBDb25mbGljdHM6CisJIwlmaWxlCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgJzEsL14kL2QnIHJhdyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIGFuZCBjMycgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYzIgYzMgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01LTkgbXNnLjEtNS05ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMiAkYzMKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXMgd2l0aCAtLWZmLW9ubHknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSBjMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgYzMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IGMyIGMzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSBjMyAmJgorCXZlcmlmeV9oZWFkICRjMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXMgd2l0aCBtZXJnZS5mZj1vbmx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29uZmlnIG1lcmdlLmZmICJvbmx5IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiBjMyAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgYzMgJiYKKwl2ZXJpZnlfaGVhZCAkYzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAobm8tY29tbWl0KScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9oZWFkICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG5vLWNvbW1pdCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9tZXJnZWhlYWRzICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzIChuby1jb21taXQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjMiBjMyAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUtOSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9tZXJnZWhlYWRzICRjMiAkYzMKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChzcXVhc2gpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLXNxdWFzaCBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgJGMwICYmCisJdmVyaWZ5X25vX21lcmdlaGVhZCAmJgorCXRlc3RfY21wIHNxdWFzaC4xIC5naXQvU1FVQVNIX01TRworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKHNxdWFzaCwgZmYtb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tc3F1YXNoIC0tZmYtb25seSBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgJGMwICYmCisJdmVyaWZ5X25vX21lcmdlaGVhZCAmJgorCXRlc3RfY21wIHNxdWFzaC4xIC5naXQvU1FVQVNIX01TRworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKHNxdWFzaCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tc3F1YXNoIGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9ub19tZXJnZWhlYWQgJiYKKwl0ZXN0X2NtcCBzcXVhc2guMS01IC5naXQvU1FVQVNIX01TRworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3VjY2Vzc2Z1bCBtZXJnZSBvZiBjMSB3aXRoIGMyIChzcXVhc2gsIGZmLW9ubHkpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXNxdWFzaCAtLWZmLW9ubHkgYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIGFuZCBjMyAoc3F1YXNoKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1zcXVhc2ggYzIgYzMgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01LTkgJiYKKwl2ZXJpZnlfaGVhZCAkYzEgJiYKKwl2ZXJpZnlfbm9fbWVyZ2VoZWFkICYmCisJdGVzdF9jbXAgc3F1YXNoLjEtNS05IC5naXQvU1FVQVNIX01TRworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG5vLWNvbW1pdCBpbiBjb25maWcpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLW5vLWNvbW1pdCIgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisJdmVyaWZ5X2hlYWQgJGMxICYmCisJdmVyaWZ5X21lcmdlaGVhZHMgJGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobG9nIGluIGNvbmZpZyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tbG9nIGMyICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9dGZvcm1hdDolcyVuJWIgPmV4cGVjdCAmJgorCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tbG9nIiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzJW4lYiA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKGxvZyBpbiBjb25maWcgZ2V0cyBvdmVycmlkZGVuKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzJW4lYiA+ZXhwZWN0ICYmCisKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1uby1sb2ciICYmCisJdGVzdF9jb25maWcgbWVyZ2UubG9nICJ0cnVlIiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzJW4lYiA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKHNxdWFzaCBpbiBjb25maWcpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLXNxdWFzaCIgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisJdmVyaWZ5X2hlYWQgJGMxICYmCisJdmVyaWZ5X25vX21lcmdlaGVhZCAmJgorCXRlc3RfY21wIHNxdWFzaC4xLTUgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgY29uZmlnIG9wdGlvbiAtbiB3aXRoIC0tc3VtbWFyeScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLW4iICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tc3VtbWFyeSBjMiA+ZGlmZnN0YXQudHh0ICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMiAmJgorCWlmICEgZ3JlcCAiXiBmaWxlIHwgICoyICstJCIgZGlmZnN0YXQudHh0CisJdGhlbgorCQllY2hvICJbT09QU10gZGlmZnN0YXQgd2FzIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLXN1bW1hcnkiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgY29uZmlnIG9wdGlvbiAtbiB3aXRoIC0tc3RhdCcgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLW4iICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tc3RhdCBjMiA+ZGlmZnN0YXQudHh0ICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMiAmJgorCWlmICEgZ3JlcCAiXiBmaWxlIHwgICoyICstJCIgZGlmZnN0YXQudHh0CisJdGhlbgorCQllY2hvICJbT09QU10gZGlmZnN0YXQgd2FzIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLXN0YXQiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC0tc3RhdCcgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1zdGF0IiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbiBjMiA+ZGlmZnN0YXQudHh0ICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMiAmJgorCWlmIGdyZXAgIl4gZmlsZSB8ICAqMiArLSQiIGRpZmZzdGF0LnR4dAorCXRoZW4KKwkJZWNobyAiW09PUFNdIGRpZmZzdGF0IHdhcyBnZW5lcmF0ZWQiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIChvdmVycmlkZSAtLW5vLWNvbW1pdCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tbm8tY29tbWl0IiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLWNvbW1pdCBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgbXNnLjEtNSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMSAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIChvdmVycmlkZSAtLXNxdWFzaCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tc3F1YXNoIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtLW5vLXNxdWFzaCBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgbXNnLjEtNSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMSAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChuby1mZiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMCAkYzEKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChtZXJnZS5mZj1mYWxzZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgImZhbHNlIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X3BhcmVudHMgJGMwICRjMQorJwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zIHdpdGggbWVyZ2UuZmYnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tZmYiICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgImZhbHNlIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X3BhcmVudHMgIiRjMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG9sZXJhdGUgdW5rbm93biB2YWx1ZXMgZm9yIG1lcmdlLmZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29uZmlnIG1lcmdlLmZmICJzb21ldGhpbmctbmV3IiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBjMSAyPm1lc3NhZ2UgJiYKKwl2ZXJpZnlfaGVhZCAiJGMxIiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmluZyAtLXNxdWFzaCBhbmQgLS1uby1mZiBpcyByZWZ1c2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXNxdWFzaCAtLW5vLWZmIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tZmYgLS1zcXVhc2ggYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluaW5nIC0tc3F1YXNoIGFuZCAtLWNvbW1pdCBpcyByZWZ1c2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXNxdWFzaCAtLWNvbW1pdCBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWNvbW1pdCAtLXNxdWFzaCBjMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvcHRpb24gLS1mZi1vbmx5IG92ZXJ3cml0ZXMgLS1uby1mZicgJworCWdpdCBtZXJnZSAtLW5vLWZmIC0tZmYtb25seSBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWZmIC0tZmYtb25seSBjMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvcHRpb24gLS1uby1mZiBvdmVycmlkZXMgbWVyZ2UuZmY9b25seSBjb25maWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgb25seSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIGMxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKGZmIG92ZXJyaWRlcyBuby1mZiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tbm8tZmYiICYmCisJZ2l0IG1lcmdlIC0tZmYgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9oZWFkICRjMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBsb2cgbWVzc2FnZScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1uby1sb2cgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWIgSEVBRCA+bXNnLmFjdCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtc2cuYWN0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tbm8tZmYiICYmCisJZ2l0IG1lcmdlIC0tbm8tbG9nIGMyICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiViIEhFQUQgPm1zZy5hY3QgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgbXNnLmFjdCAmJgorCisJZ2l0IG1lcmdlIC0tbG9nIGMzICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiViIEhFQUQgPm1zZy5hY3QgJiYKKwl0ZXN0X2NtcCBtc2cubG9nIG1zZy5hY3QgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5sb2cgInllcyIgJiYKKwlnaXQgbWVyZ2UgYzMgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWIgSEVBRCA+bXNnLmFjdCAmJgorCXRlc3RfY21wIG1zZy5sb2cgbXNnLmFjdAorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzAsIGMyLCBjMCwgYW5kIGMxJyAnCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorICAgICAgIHRlc3RfdGljayAmJgorICAgICAgIGdpdCBtZXJnZSBjMCBjMiBjMCBjMSAmJgorICAgICAgIHZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgJiYKKyAgICAgICB2ZXJpZnlfcGFyZW50cyAkYzEgJGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMCwgYzIsIGMwLCBhbmQgYzEnICcKKyAgICAgICBnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisgICAgICAgdGVzdF90aWNrICYmCisgICAgICAgZ2l0IG1lcmdlIGMwIGMyIGMwIGMxICYmCisgICAgICAgdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSAmJgorICAgICAgIHZlcmlmeV9wYXJlbnRzICRjMSAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMxIGFuZCBjMicgJworICAgICAgIGdpdCByZXNldCAtLWhhcmQgYzEgJiYKKyAgICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgICBnaXQgbWVyZ2UgYzEgYzIgJiYKKyAgICAgICB2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisgICAgICAgdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZhc3QtZm9yd2FyZCBpbiBhIGRpcnR5IHRyZWUnICcKKyAgICAgICBnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisgICAgICAgbXYgZmlsZSBmaWxlMSAmJgorICAgICAgIGNhdCBmaWxlMSA+ZmlsZSAmJgorICAgICAgIHJtIC1mIGZpbGUxICYmCisgICAgICAgZ2l0IG1lcmdlIGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4taW5kZXggbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgLXMgcmVzb2x2ZSBjMSA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiV29uZGVyZnVsLiIgb3V0ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMwICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnJlc2ggdGhlIGluZGV4IGJlZm9yZSBtZXJnaW5nJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWNwIGZpbGUgZmlsZS5uICYmIG12IC1mIGZpbGUubiBmaWxlICYmCisJZ2l0IG1lcmdlIGMzCisnCisKK2NhdCA+ZXhwZWN0ZWQuYnJhbmNoIDw8XEVPRgorTWVyZ2UgYnJhbmNoICdjNS1icmFuY2gnIChlYXJseSBwYXJ0KQorRU9GCitjYXQgPmV4cGVjdGVkLnRhZyA8PFxFT0YKK01lcmdlIGNvbW1pdCAnYzV+MScKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBlYXJseSBwYXJ0IG9mIGMyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMyAmJgorCWVjaG8gYzQgPmM0LmMgJiYKKwlnaXQgYWRkIGM0LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM0ICYmCisJZ2l0IHRhZyBjNCAmJgorCWVjaG8gYzUgPmM1LmMgJiYKKwlnaXQgYWRkIGM1LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM1ICYmCisJZ2l0IHRhZyBjNSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzMgJiYKKwllY2hvIGM2ID5jNi5jICYmCisJZ2l0IGFkZCBjNi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjNiAmJgorCWdpdCB0YWcgYzYgJiYKKwlnaXQgYnJhbmNoIC1mIGM1LWJyYW5jaCBjNSAmJgorCWdpdCBtZXJnZSBjNS1icmFuY2h+MSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+YWN0dWFsLmJyYW5jaCAmJgorCWdpdCByZXNldCAtLWtlZXAgSEVBRF4gJiYKKwlnaXQgbWVyZ2UgYzV+MSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+YWN0dWFsLnRhZyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmJyYW5jaCBhY3R1YWwuYnJhbmNoICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudGFnIGFjdHVhbC50YWcKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLW5vLWZmIC0tbm8tY29tbWl0ICYmIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAtLW5vLWNvbW1pdCBjMSAmJgorCUVESVRPUj06IGdpdCBjb21taXQgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmRpbmcgbm8tZmYgbWVyZ2UgY29tbWl0JyAnCisJRURJVE9SPTogZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJdmVyaWZ5X3BhcmVudHMgJGMwICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK2NhdCA+ZWRpdG9yIDw8XEVPRgorIyEvYmluL3NoCisjIEFkZCBhIG5ldyBtZXNzYWdlIHN0cmluZyB0aGF0IHdhcyBub3QgaW4gdGhlIHRlbXBsYXRlCisoCisJZWNobyAiTWVyZ2Ugd29yayBkb25lIG9uIHRoZSBzaWRlIGJyYW5jaCBjMSIKKwllY2hvCisJY2F0ICIkMSIKKykgPiIkMS50bXAiICYmIG12ICIkMS50bXAiICIkMSIKKyMgc3RyaXAgY29tbWVudHMgYW5kIGJsYW5rIGxpbmVzIGZyb20gZW5kIG9mIG1lc3NhZ2UKK3NlZCAtZSAnL14jL2QnICIkMSIgfCBzZWQgLWUgOmEgLWUgJy9eXG4qJC97JGQ7TjtiYScgLWUgJ30nID5leHBlY3RlZAorRU9GCitjaG1vZCA3NTUgZWRpdG9yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tbm8tZmYgLS1lZGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgbWVyZ2UgLS1uby1mZiAtLWVkaXQgYzEgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlncmVwICJ3b3JrIGRvbmUgb24gdGhlIHNpZGUgYnJhbmNoIiByYXcgJiYKKwlzZWQgIjEsL14kL2QiID5hY3R1YWwgcmF3ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFubm90YXRlZC9zaWduZWQgdGFnIHcvbyB0cmFja2luZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGRzdDsgZ2l0IHRhZyAtZCBhbm5vMSIgJiYKKwlnaXQgdGFnIC1hIC1tICJhbm5vIGMxIiBhbm5vMSBjMSAmJgorCWdpdCBpbml0IGRzdCAmJgorCWdpdCByZXYtcGFyc2UgYzEgPmRzdC9leHBlY3QgJiYKKwkoCisJCSMgYzAgZmFzdC1mb3J3YXJkcyB0byBjMSBidXQgYmVjYXVzZSB0aGlzIHJlcG9zaXRvcnkKKwkJIyBpcyBub3QgYSAiZG93bnN0cmVhbSIgd2hvc2UgcmVmcy90YWdzIGZvbGxvd3MgYWxvbmcKKwkJIyB0YWcgZnJvbSB0aGUgInVwc3RyZWFtIiwgdGhpcyBwdWxsIGRlZmF1bHRzIHRvIC0tbm8tZmYKKwkJY2QgZHN0ICYmCisJCWdpdCBwdWxsIC4uIGMwICYmCisJCWdpdCBwdWxsIC4uIGFubm8xICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRF4yID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYW5ub3RhdGVkL3NpZ25lZCB0YWcgdy8gdHJhY2tpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBkc3Q7IGdpdCB0YWcgLWQgYW5ubzEiICYmCisJZ2l0IHRhZyAtYSAtbSAiYW5ubyBjMSIgYW5ubzEgYzEgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwlnaXQgcmV2LXBhcnNlIGMxID5kc3QvZXhwZWN0ICYmCisJKAorCQkjIGMwIGZhc3QtZm9yd2FyZHMgdG8gYzEgYW5kIGJlY2F1c2UgdGhpcyByZXBvc2l0b3J5CisJCSMgaXMgYSAiZG93bnN0cmVhbSIgd2hvc2UgcmVmcy90YWdzIGZvbGxvd3MgYWxvbmcKKwkJIyB0YWcgZnJvbSB0aGUgInVwc3RyZWFtIiwgdGhpcyBwdWxsIGRlZmF1bHRzIHRvIC0tZmYKKwkJY2QgZHN0ICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLiAmJgorCQlnaXQgcHVsbCBvcmlnaW4gYzAgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbiAmJgorCQlnaXQgbWVyZ2UgYW5ubzEgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIC0tZmYtb25seSB0YWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJBIG5ld2VyIGNvbW1pdCIgJiYKKwlnaXQgdGFnIC1zIC1tICJBIG5ld2VyIGNvbW1pdCIgc2lnbmVkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCisJZ2l0IG1lcmdlIC0tZmYtb25seSBzaWduZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHNpZ25lZF4wID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIC0tbm8tZWRpdCB0YWcgc2hvdWxkIHNraXAgZWRpdG9yJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQSBuZXdlciBjb21taXQiICYmCisJZ2l0IHRhZyAtZiAtcyAtbSAiQSBuZXdlciBjb21taXQiIHNpZ25lZCAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKworCUVESVRPUj1mYWxzZSBnaXQgbWVyZ2UgLS1uby1lZGl0IC0tbm8tZmYgc2lnbmVkICYmCisJZ2l0IHJldi1wYXJzZSBzaWduZWReMCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1vZC0yNTYgY29uZmxpY3Qgc2NlbmFyaW8nICcKKwkjIDI1NiBuZWFyLWlkZW50aWNhbCBzdGFuemFzLi4uCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDI1Nik7IGRvCisJCWZvciBqIGluIDEgMiAzIDQgNTsgZG8KKwkJCWVjaG8gJGktJGoKKwkJZG9uZQorCWRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCSMgb25lIHNpZGUgY2hhbmdlcyB0aGUgZmlyc3QgbGluZSBvZiBlYWNoIHRvICJtYXN0ZXIiCisJc2VkIHMvLTEvLW1hc3Rlci8gZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hbSBtYXN0ZXIgJiYKKworCSMgYW5kIHRoZSBvdGhlciB0byAic2lkZSI7IG1lcmdpbmcgdGhlIHR3byB3aWxsCisJIyB5aWVsZCAyNTYgc2VwYXJhdGUgY29uZmxpY3RzCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwlzZWQgcy8tMS8tc2lkZS8gZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hbSBzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGRldGVjdHMgbW9kLTI1NiBjb25mbGljdHMgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZGV0ZWN0cyBtb2QtMjU2IGNvbmZsaWN0cyAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG5vdGhpbmcgaW50byB2b2lkJyAnCisJZ2l0IGluaXQgdm9pZCAmJgorCSgKKwkJY2Qgdm9pZCAmJgorCQlnaXQgcmVtb3RlIGFkZCB1cCAuLiAmJgorCQlnaXQgZmV0Y2ggdXAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGNhbiBiZSBjb21wbGV0ZWQgd2l0aCAtLWNvbnRpbnVlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC0tbm8tY29tbWl0IGMxICYmCisJZ2l0IG1lcmdlIC0tY29udGludWUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCisKK3dyaXRlX3NjcmlwdCAuZ2l0L0ZBS0VfRURJVE9SIDw8RU9GCisjIGtpbGwgLVRFUk0gY29tbWFuZCBhZGRlZCBiZWxvdy4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEVYRUNLRUVQU1BJRCAna2lsbGVkIG1lcmdlIGNhbiBiZSBjb21wbGV0ZWQgd2l0aCAtLWNvbnRpbnVlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCSEgIiRTSEVMTF9QQVRIIiAtYyAnXCcnCisJICBlY2hvIGtpbGwgLVRFUk0gJCQgPj4uZ2l0L0ZBS0VfRURJVE9SCisJICBHSVRfRURJVE9SPS5naXQvRkFLRV9FRElUT1IKKwkgIGV4cG9ydCBHSVRfRURJVE9SCisJICBleGVjIGdpdCBtZXJnZSAtLW5vLWZmIC0tZWRpdCBjMSdcJycgJiYKKwlnaXQgbWVyZ2UgLS1jb250aW51ZSAmJgorCXZlcmlmeV9wYXJlbnRzICRjMCAkYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1xdWl0JyAnCisJZ2l0IGluaXQgbWVyZ2UtcXVpdCAmJgorCSgKKwkJY2QgbWVyZ2UtcXVpdCAmJgorCQl0ZXN0X2NvbW1pdCBiYXNlICYmCisJCWVjaG8gb25lID4+YmFzZS50ICYmCisJCWdpdCBjb21taXQgLWFtIG9uZSAmJgorCQlnaXQgYnJhbmNoIG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgYmFzZSAmJgorCQllY2hvIHR3byA+PmJhc2UudCAmJgorCQlnaXQgY29tbWl0IC1hbSB0d28gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIHJlcmVyZS5lbmFibGVkPXRydWUgbWVyZ2Ugb25lICYmCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXQvTUVSR0VfSEVBRCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L01FUkdFX01PREUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9NRVJHRV9NU0cgJiYKKwkJZ2l0IHJlcmVyZSBzdGF0dXMgPnJlcmVyZS5iZWZvcmUgJiYKKwkJZ2l0IG1lcmdlIC0tcXVpdCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9NT0RFICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfTVNHICYmCisJCWdpdCByZXJlcmUgc3RhdHVzID5yZXJlcmUuYWZ0ZXIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IHJlcmVyZS5hZnRlciAmJgorCQkhIHRlc3RfY21wIHJlcmVyZS5hZnRlciByZXJlcmUuYmVmb3JlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzdWdnZXN0cyBtYXRjaGluZyByZW1vdGUgcmVmbmFtZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBub3QtbG9jYWwgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL25vdC1sb2NhbCBIRUFEICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCisJIyBUaGlzIGlzIHdoaXRlLWJveCB0ZXN0aW5nIGhhY2tlcnk7IHdlIGhhcHBlbiB0byBrbm93CisJIyB0aGF0IHJlYWRpbmcgcGFja2VkIHJlZnMgaXMgbW9yZSBwaWNreSBhYm91dCB0aGUgbWVtb3J5CisJIyBvd25lcnNoaXAgb2Ygc3RyaW5ncyB3ZSBwYXNzIHRvIGZvcl9lYWNoX3JlZigpIGNhbGxiYWNrcy4KKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBub3QtbG9jYWwgMj5zdGRlcnIgJiYKKwlncmVwIG9yaWdpbi9ub3QtbG9jYWwgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Z2dlc3RlZCBuYW1lcyBhcmUgbm90IGFtYmlndW91cycgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvb3JpZ2luL25vdC1sb2NhbCBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG5vdC1sb2NhbCAyPnN0ZGVyciAmJgorCWdyZXAgcmVtb3Rlcy9vcmlnaW4vbm90LWxvY2FsIHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDEtbWVyZ2UtcHVsbC1jb25maWcuc2ggYi90L3Q3NjAxLW1lcmdlLXB1bGwtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2YzQ0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjAxLW1lcmdlLXB1bGwtY29uZmlnLnNoCkBAIC0wLDAgKzEsMTg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlCisKK1Rlc3RpbmcgcHVsbC4qIGNvbmZpZ3VyYXRpb24gcGFyc2luZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPmMwLmMgJiYKKwlnaXQgYWRkIGMwLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMwICYmCisJZ2l0IHRhZyBjMCAmJgorCWVjaG8gYzEgPmMxLmMgJiYKKwlnaXQgYWRkIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMxICYmCisJZ2l0IHRhZyBjMSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMyID5jMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMiAmJgorCWdpdCB0YWcgYzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMyA+YzMuYyAmJgorCWdpdCBhZGQgYzMuYyAmJgorCWdpdCBjb21taXQgLW0gYzMgJiYKKwlnaXQgdGFnIGMzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdCAtZiBjMC5jICYmCisJdGVzdCAtZiBjMS5jICYmCisJdGVzdCAhIC1mIGMyLmMgJiYKKwl0ZXN0ICEgLWYgYzMuYyAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgLWYgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgcHVsbCBzdWNjZWVkcyB3aXRoICJ0cnVlIiBpbiBwdWxsLmZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29uZmlnIHB1bGwuZmYgdHJ1ZSAmJgorCWdpdCBwdWxsIC4gYzEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBjMSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwuZmY9dHJ1ZSBvdmVycmlkZXMgbWVyZ2UuZmY9ZmFsc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLmZmIHRydWUgJiYKKwlnaXQgcHVsbCAuIGMxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgYzEpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgcHVsbCBjcmVhdGVzIG1lcmdlIHdpdGggImZhbHNlIiBpbiBwdWxsLmZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29uZmlnIHB1bGwuZmYgZmFsc2UgJiYKKwlnaXQgcHVsbCAuIGMxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBjMCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiID0gIiQoZ2l0IHJldi1wYXJzZSBjMSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcHJldmVudHMgbm9uLWZhc3QtZm9yd2FyZCB3aXRoICJvbmx5IiBpbiBwdWxsLmZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIHB1bGwuZmYgb25seSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gYzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAob3VycyBpbiBwdWxsLnR3b2hlYWQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBjb25maWcgcHVsbC50d29oZWFkIG91cnMgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwkhIHRlc3QgLWYgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIGFuZCBjMyAocmVjdXJzaXZlIGluIHB1bGwub2N0b3B1cyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IGNvbmZpZyBwdWxsLm9jdG9wdXMgInJlY3Vyc2l2ZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzIgYzMgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzIChyZWN1cnNpdmUgYW5kIG9jdG9wdXMgaW4gcHVsbC5vY3RvcHVzKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgY29uZmlnIHB1bGwub2N0b3B1cyAicmVjdXJzaXZlIG9jdG9wdXMiICYmCisJZ2l0IG1lcmdlIGMyIGMzICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzIpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzMpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4zKSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgLWYgYzIuYyAmJgorCXRlc3QgLWYgYzMuYworJworCitjb25mbGljdF9jb3VudCgpCit7CisJeworCQlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seQorCQlnaXQgbHMtZmlsZXMgLS11bm1lcmdlZAorCX0gfCB3YyAtbAorfQorCisjIGM0IC0gYzUKKyMgICAgXCBjNgorIworIyBUaGVyZSBhcmUgdHdvIGNvbmZsaWN0cyBoZXJlOgorIworIyAxKSBCZWNhdXNlIGZvby5jIGlzIHJlbmFtZWQgdG8gYmFyLmMsIHJlY3Vyc2l2ZSB3aWxsIGhhbmRsZSB0aGlzLAorIyByZXNvbHZlIHdvbid0LgorIworIyAyKSBPbmUgaW4gY29uZmxpY3QuYyBhbmQgdGhhdCB3aWxsIGFsd2F5cyBmYWlsLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb25mbGljdGVkIG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gQSA+Y29uZmxpY3QuYyAmJgorCWdpdCBhZGQgY29uZmxpY3QuYyAmJgorCWVjaG8gY29udGVudHMgPmZvby5jICYmCisJZ2l0IGFkZCBmb28uYyAmJgorCWdpdCBjb21taXQgLW0gYzQgJiYKKwlnaXQgdGFnIGM0ICYmCisJZWNobyBCID5jb25mbGljdC5jICYmCisJZ2l0IGFkZCBjb25mbGljdC5jICYmCisJZ2l0IG12IGZvby5jIGJhci5jICYmCisJZ2l0IGNvbW1pdCAtbSBjNSAmJgorCWdpdCB0YWcgYzUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM0ICYmCisJZWNobyBDID5jb25mbGljdC5jICYmCisJZ2l0IGFkZCBjb25mbGljdC5jICYmCisJZWNobyBzZWNvbmRsaW5lID4+IGZvby5jICYmCisJZ2l0IGFkZCBmb28uYyAmJgorCWdpdCBjb21taXQgLW0gYzYgJiYKKwlnaXQgdGFnIGM2CisnCisKKyMgRmlyc3QgZG8gdGhlIG1lcmdlIHdpdGggcmVzb2x2ZSBhbmQgcmVjdXJzaXZlIHRoZW4gdmVyaWZ5IHRoYXQKKyMgcmVjdXJzaXZlIGlzIGNob3Nlbi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcGlja3MgdXAgdGhlIGJlc3QgcmVzdWx0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBwdWxsLnR3b2hlYWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgYzYgJiYKKwlyZXNvbHZlX2NvdW50PSQoY29uZmxpY3RfY291bnQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgYzYgJiYKKwlyZWN1cnNpdmVfY291bnQ9JChjb25mbGljdF9jb3VudCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSAtcyByZXNvbHZlIGM2ICYmCisJYXV0b19jb3VudD0kKGNvbmZsaWN0X2NvdW50KSAmJgorCXRlc3QgJGF1dG9fY291bnQgPSAkcmVjdXJzaXZlX2NvdW50ICYmCisJdGVzdCAkYXV0b19jb3VudCAhPSAkcmVzb2x2ZV9jb3VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBwaWNrcyB1cCB0aGUgYmVzdCByZXN1bHQgKGZyb20gY29uZmlnKScgJworCWdpdCBjb25maWcgcHVsbC50d29oZWFkICJyZWN1cnNpdmUgcmVzb2x2ZSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgYzYgJiYKKwlyZXNvbHZlX2NvdW50PSQoY29uZmxpY3RfY291bnQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgYzYgJiYKKwlyZWN1cnNpdmVfY291bnQ9JChjb25mbGljdF9jb3VudCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGM2ICYmCisJYXV0b19jb3VudD0kKGNvbmZsaWN0X2NvdW50KSAmJgorCXRlc3QgJGF1dG9fY291bnQgPSAkcmVjdXJzaXZlX2NvdW50ICYmCisJdGVzdCAkYXV0b19jb3VudCAhPSAkcmVzb2x2ZV9jb3VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBlcnJvcnMgb3V0IG9uIGludmFsaWQgc3RyYXRlZ3knICcKKwlnaXQgY29uZmlnIHB1bGwudHdvaGVhZCAiZm9vYmFyIiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZXJyb3JzIG91dCBvbiBpbnZhbGlkIHN0cmF0ZWd5JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBwdWxsLnR3b2hlYWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zICJyZXNvbHZlIHJlY3Vyc2l2ZSIgYzYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaCBiL3QvdDc2MDItbWVyZ2Utb2N0b3B1cy1tYW55LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhYmU0NDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIG9jdG9wdXMgbWVyZ2Ugd2l0aCBtb3JlIHRoYW4gMjUgcmVmcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPiBjMC5jICYmCisJZ2l0IGFkZCBjMC5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMCAmJgorCWdpdCB0YWcgYzAgJiYKKwlpPTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAzMAorCWRvCisJCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwkJZWNobyBjJGkgPiBjJGkuYyAmJgorCQlnaXQgYWRkIGMkaS5jICYmCisJCWdpdCBjb21taXQgLW0gYyRpICYmCisJCWdpdCB0YWcgYyRpICYmCisJCWk9JChleHByICRpICsgMSkgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIsIGMzLCBjNCwgLi4uIGMyOScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlpPTIgJiYKKwlyZWZzPSIiICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgMzAKKwlkbworCQlyZWZzPSIkcmVmcyBjJGkiCisJCWk9JChleHByICRpICsgMSkKKwlkb25lICYmCisJZ2l0IG1lcmdlICRyZWZzICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwlpPTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAzMAorCWRvCisJCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjJGkpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4kaSkiICYmCisJCWk9JChleHByICRpICsgMSkgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlpPTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAzMAorCWRvCisJCXRlc3QgLWYgYyRpLmMgJiYKKwkJaT0kKGV4cHIgJGkgKyAxKSB8fCByZXR1cm4gMQorCWRvbmUKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK1RyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCBjMgorVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIGMzCitUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggYzQKK01lcmdlIG1hZGUgYnkgdGhlICdvY3RvcHVzJyBzdHJhdGVneS4KKyBjMi5jIHwgMSArCisgYzMuYyB8IDEgKworIGM0LmMgfCAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjMi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGMzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzQuYworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG91dHB1dCB1c2VzIHByZXR0eSBuYW1lcycgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgYzIgYzMgYzQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK01lcmdlIG1hZGUgYnkgdGhlICdyZWN1cnNpdmUnIHN0cmF0ZWd5LgorIGM1LmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzUuYworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHJlZHVjZXMgaXJyZWxldmFudCByZW1vdGUgaGVhZHMnICcKKwlHSVRfTUVSR0VfVkVSQk9TSVRZPTAgZ2l0IG1lcmdlIGM0IGM1ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitGYXN0LWZvcndhcmRpbmcgdG86IGMxCitUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggYzIKK01lcmdlIG1hZGUgYnkgdGhlICdvY3RvcHVzJyBzdHJhdGVneS4KKyBjMS5jIHwgMSArCisgYzIuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGMxLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzIuYworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZhc3QtZm9yd2FyZCBvdXRwdXQgdXNlcyBwcmV0dHkgbmFtZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIGMxIGMyID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwMy1tZXJnZS1yZWR1Y2UtaGVhZHMuc2ggYi90L3Q3NjAzLW1lcmdlLXJlZHVjZS1oZWFkcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODk0ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwMy1tZXJnZS1yZWR1Y2UtaGVhZHMuc2gKQEAgLTAsMCArMSwxNjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UKKworVGVzdGluZyBvY3RvcHVzIG1lcmdlIHdoZW4gcmVkdWNpbmcgcGFyZW50cyB0byBpbmRlcGVuZGVudCBicmFuY2hlcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIDAgLSAxCisjICAgXCAyCisjICAgXCAzCisjICAgXCA0IC0gNQorIworIyBTbyAxLCAyLCAzIGFuZCA1IHNob3VsZCBiZSBrZXB0LCA0IHNob3VsZCBiZSBhdm9pZGVkLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPiBjMC5jICYmCisJZ2l0IGFkZCBjMC5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMCAmJgorCWdpdCB0YWcgYzAgJiYKKwllY2hvIGMxID4gYzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCWdpdCBjb21taXQgLW0gYzEgJiYKKwlnaXQgdGFnIGMxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzIgPiBjMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMiAmJgorCWdpdCB0YWcgYzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMyA+IGMzLmMgJiYKKwlnaXQgYWRkIGMzLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMzICYmCisJZ2l0IHRhZyBjMyAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGM0ID4gYzQuYyAmJgorCWdpdCBhZGQgYzQuYyAmJgorCWdpdCBjb21taXQgLW0gYzQgJiYKKwlnaXQgdGFnIGM0ICYmCisJZWNobyBjNSA+IGM1LmMgJiYKKwlnaXQgYWRkIGM1LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM1ICYmCisJZ2l0IHRhZyBjNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyLCBjMywgYzQsIGM1JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiBjMyBjNCBjNSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMyKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMzKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMykiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGM1KSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReNCkiICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMgJiYKKwl0ZXN0IC1mIGMzLmMgJiYKKwl0ZXN0IC1mIGM0LmMgJiYKKwl0ZXN0IC1mIGM1LmMgJiYKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtcyA+YWN0dWFsICYmCisJISBncmVwIGMxIGFjdHVhbCAmJgorCWdyZXAgYzIgYWN0dWFsICYmCisJZ3JlcCBjMyBhY3R1YWwgJiYKKwkhIGdyZXAgYzQgYWN0dWFsICYmCisJZ3JlcCBjNSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBjMiwgYzMsIGM0LCBjNSBpbnRvIGMxJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBwdWxsIC4gYzIgYzMgYzQgYzUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiAhPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMykiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjMpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjNSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjQpIiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICYmCisJdGVzdCAtZiBjMC5jICYmCisJdGVzdCAtZiBjMS5jICYmCisJdGVzdCAtZiBjMi5jICYmCisJdGVzdCAtZiBjMy5jICYmCisJdGVzdCAtZiBjNC5jICYmCisJdGVzdCAtZiBjNS5jICYmCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLXMgPmFjdHVhbCAmJgorCSEgZ3JlcCBjMSBhY3R1YWwgJiYKKwlncmVwIGMyIGFjdHVhbCAmJgorCWdyZXAgYzMgYWN0dWFsICYmCisJISBncmVwIGM0IGFjdHVhbCAmJgorCWdyZXAgYzUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZm9yIGkgaW4gQSBCIEMgRCBFCisJZG8KKwkJZWNobyAkaSA+ICRpLmMgJiYKKwkJZ2l0IGFkZCAkaS5jICYmCisJCWdpdCBjb21taXQgLW0gJGkgJiYKKwkJZ2l0IHRhZyAkaQorCWRvbmUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwlmb3IgaSBpbiBGIEcgSCBJCisJZG8KKwkJZWNobyAkaSA+ICRpLmMgJiYKKwkJZ2l0IGFkZCAkaS5jICYmCisJCWdpdCBjb21taXQgLW0gJGkgJiYKKwkJZ2l0IHRhZyAkaQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgRSBhbmQgSScgJworCWdpdCByZXNldCAtLWhhcmQgQSAmJgorCWdpdCBtZXJnZSBFIEkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1lcmdlIHJlc3VsdCcgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReMSkgPSAkKGdpdCByZXYtcGFyc2UgRSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpID0gJChnaXQgcmV2LXBhcnNlIEkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEUgJiYKKwllY2hvIGZvbyA+IGZpbGUuYyAmJgorCWdpdCBhZGQgZmlsZS5jICYmCisJZ2l0IGNvbW1pdCAtbSBFMiAmJgorCWdpdCB0YWcgRTIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEkgJiYKKwllY2hvIGJhciA+ZmlsZS5jICYmCisJZ2l0IGFkZCBmaWxlLmMgJiYKKwlnaXQgY29tbWl0IC1tIEkyICYmCisJZ2l0IHRhZyBJMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBFMiBhbmQgSTIsIGNhdXNpbmcgYSBjb25mbGljdCBhbmQgcmVzb2x2ZSBpdCcgJworCWdpdCByZXNldCAtLWhhcmQgQSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBFMiBJMiAmJgorCWVjaG8gYmF6ID4gZmlsZS5jICYmCisJZ2l0IGFkZCBmaWxlLmMgJiYKKwlnaXQgY29tbWl0IC1tICJyZXNvbHZlIGNvbmZsaWN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgcmVzdWx0JyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSA9ICQoZ2l0IHJldi1wYXJzZSBFMikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpID0gJChnaXQgcmV2LXBhcnNlIEkyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgdG8gcmVkdW5kYW50IHJlZnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIGM0IGM1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSByZXN1bHQnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBjNSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgdXAtdG8tZGF0ZSByZWR1bmRhbnQgcmVmcycgJworCWdpdCByZXNldCAtLWhhcmQgYzUgJiYKKwlnaXQgbWVyZ2UgYzAgYzQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1lcmdlIHJlc3VsdCcgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIGM1KQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDQtbWVyZ2UtY3VzdG9tLW1lc3NhZ2Uuc2ggYi90L3Q3NjA0LW1lcmdlLWN1c3RvbS1tZXNzYWdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkNGY5NjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA0LW1lcmdlLWN1c3RvbS1tZXNzYWdlLnNoCkBAIC0wLDAgKzEsMTE1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlCisKK1Rlc3RpbmcgbWVyZ2Ugd2hlbiB1c2luZyBhIGN1c3RvbSBtZXNzYWdlIGZvciB0aGUgbWVyZ2UgY29tbWl0LicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NyZWF0ZV9tZXJnZV9tc2dzKCkgeworCWVjaG8gPmV4cC5zdWJqZWN0ICJjdXN0b20gbWVzc2FnZSIKKworCWNwIGV4cC5zdWJqZWN0IGV4cC5sb2cgJiYKKwllY2hvID4+ZXhwLmxvZyAiIiAmJgorCWVjaG8gPj5leHAubG9nICIqIHRhZyAnYzInOiIgJiYKKwllY2hvID4+ZXhwLmxvZyAiICBjMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGMwID5jMC5jICYmCisJZ2l0IGFkZCBjMC5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMCAmJgorCWdpdCB0YWcgYzAgJiYKKwllY2hvIGMxID5jMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMSAmJgorCWdpdCB0YWcgYzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMiA+YzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCWdpdCBjb21taXQgLW0gYzIgJiYKKwlnaXQgdGFnIGMyICYmCisJY3JlYXRlX21lcmdlX21zZ3MKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMiB3aXRoIGEgY3VzdG9tIG1lc3NhZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC1tICIkKGNhdCBleHAuc3ViamVjdCkiIGMyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL14kL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwLnN1YmplY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tbG9nIGFwcGVuZHMgdG8gY3VzdG9tIG1lc3NhZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tbG9nIC1tICIkKGNhdCBleHAuc3ViamVjdCkiIGMyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL14kL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwLmxvZyBhY3R1YWwKKycKKworbWVzZ193aXRoX2NvbW1lbnRfYW5kX25ld2xpbmVzPScKKyMgdGV4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZmlsZSB3aXRoIGNvbW1lbnQgbGluZSBhbmQgdHJhaWxpbmcgbmV3bGluZXMnICAnCisJcHJpbnRmICIlcyIgIiRtZXNnX3dpdGhfY29tbWVudF9hbmRfbmV3bGluZXMiID5leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHZlcmJhdGltIG9wdGlvbiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tY2xlYW51cD12ZXJiYXRpbSAtRiBleHBlY3QgYzIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCXNlZCAtZSAiMSwvXiQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh3aGl0ZXNwYWNlIG9wdGlvbiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF93cml0ZV9saW5lcyAiIiAiIyB0ZXh0IiAiIiA+dGV4dCAmJgorCWVjaG8gIiMgdGV4dCIgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSAtLWNsZWFudXA9d2hpdGVzcGFjZSAtRiB0ZXh0IGMyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL14kL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIG1lcmdlIG1lc3NhZ2VzIChzY2lzc29ycyBvcHRpb24pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWNhdCA+dGV4dCA8PC1cRU9GICYmCisKKwkjIHRvIGJlIGtlcHQKKworCSAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIyB0byBiZSBrZXB0LCB0b28KKwkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl0byBiZSByZW1vdmVkCisJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJdG8gYmUgcmVtb3ZlZCwgdG9vCisJRU9GCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIyB0byBiZSBrZXB0CisKKwkgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSMgdG8gYmUga2VwdCwgdG9vCisJRU9GCisJZ2l0IG1lcmdlIC0tY2xlYW51cD1zY2lzc29ycyAtZSAtRiB0ZXh0IGMyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlzZWQgLWUgIjEsL14kL2QiIHJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAoc3RyaXAgb3B0aW9uKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICIiICIjIHRleHQiICJzYW1wbGUiICIiID50ZXh0ICYmCisJZWNobyBzYW1wbGUgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSAtLWNsZWFudXA9c3RyaXAgLUYgdGV4dCBjMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+cmF3ICYmCisJc2VkIC1lICIxLC9eJC9kIiByYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjA1LW1lcmdlLXJlc29sdmUuc2ggYi90L3Q3NjA1LW1lcmdlLXJlc29sdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWQ1NmMzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDUtbWVyZ2UtcmVzb2x2ZS5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlCisKK1Rlc3RpbmcgdGhlIHJlc29sdmUgc3RyYXRlZ3kuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGMwID4gYzAuYyAmJgorCWdpdCBhZGQgYzAuYyAmJgorCWdpdCBjb21taXQgLW0gYzAgJiYKKwlnaXQgdGFnIGMwICYmCisJZWNobyBjMSA+IGMxLmMgJiYKKwlnaXQgYWRkIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMxICYmCisJZ2l0IHRhZyBjMSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMyID4gYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCWdpdCBjb21taXQgLW0gYzIgJiYKKwlnaXQgdGFnIGMyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzMgPiBjMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMyAmJgorCWdpdCB0YWcgYzMKKycKKworbWVyZ2VfYzFfdG9fYzJfY21kcz0nCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtcyByZXNvbHZlIGMyICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzIpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgLWYgYzIuYyAmJgorCXRlc3QgMyA9ICQoZ2l0IGxzLXRyZWUgLXIgSEVBRCB8IHdjIC1sKSAmJgorCXRlc3QgMyA9ICQoZ2l0IGxzLWZpbGVzIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHRvIGMyJyAgICAgICAgIiRtZXJnZV9jMV90b19jMl9jbWRzIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB0byBjMiwgYWdhaW4nICIkbWVyZ2VfYzFfdG9fYzJfY21kcyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzIgdG8gYzMgKGZhaWxzKScgJworCWdpdCByZXNldCAtLWhhcmQgYzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBjMworJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjA2LW1lcmdlLWN1c3RvbS5zaCBiL3QvdDc2MDYtbWVyZ2UtY3VzdG9tLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlOGM0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA2LW1lcmdlLWN1c3RvbS5zaApAQCAtMCwwICsxLDkzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iZ2l0IG1lcmdlCisKK1Rlc3RpbmcgYSBjdXN0b20gc3RyYXRlZ3kuCisKKyogICAoSEVBRCwgbWFzdGVyKSBNZXJnZSBjb21taXQgJ2MzJworfFwKK3wgKiAodGFnOiBjMykgYzMKKyogfCAodGFnOiBjMSkgYzEKK3wvCit8ICogdGFnOiBjMikgYzIKK3wvCisqICh0YWc6IGMwKSBjMAorIgorCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGN1c3RvbSBzdHJhdGVneScgJworCWNhdCA+Z2l0LW1lcmdlLXRoZWlycyA8PC1FT0YgJiYKKwkjISRTSEVMTF9QQVRICisJZXZhbCBnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgXFxcJFwkIworCUVPRgorCisJY2htb2QgK3ggZ2l0LW1lcmdlLXRoZWlycyAmJgorCVBBVEg9LjokUEFUSCAmJgorCWV4cG9ydCBQQVRICisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgYzAgYzAuYyAmJgorCXRlc3RfY29tbWl0IGMxIGMxLmMgJiYKKwlnaXQgcmVzZXQgLS1rZWVwIGMwICYmCisJZWNobyBjMWMxID5jMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJdGVzdF9jb21taXQgYzIgYzIuYyAmJgorCWdpdCByZXNldCAtLWtlZXAgYzAgJiYKKwl0ZXN0X2NvbW1pdCBjMyBjMy5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMyIHdpdGggYSBjdXN0b20gc3RyYXRlZ3knICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisKKwlnaXQgcmV2LXBhcnNlIGMxID5oZWFkLm9sZCAmJgorCWdpdCByZXYtcGFyc2UgYzIgPnNlY29uZC1wYXJlbnQuZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIGMyXnt0cmVlfSA+dHJlZS5leHBlY3RlZCAmJgorCWdpdCBtZXJnZSAtcyB0aGVpcnMgYzIgJiYKKworCWdpdCByZXYtcGFyc2UgSEVBRCA+aGVhZC5uZXcgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSA+Zmlyc3QtcGFyZW50ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjIgPnNlY29uZC1wYXJlbnQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9ID50cmVlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMyIEhFQUQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjMiAmJgorCisJISB0ZXN0X2NtcCBoZWFkLm9sZCBoZWFkLm5ldyAmJgorCXRlc3RfY21wIGhlYWQub2xkIGZpcnN0LXBhcmVudCAmJgorCXRlc3RfY21wIHNlY29uZC1wYXJlbnQuZXhwZWN0ZWQgc2Vjb25kLXBhcmVudCAmJgorCXRlc3RfY21wIHRyZWUuZXhwZWN0ZWQgdHJlZSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCWdyZXAgYzFjMSBjMS5jICYmCisJdGVzdCAtZiBjMi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyaXZpYWwgbWVyZ2Ugd2l0aCBjdXN0b20gc3RyYXRlZ3knICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisKKwlnaXQgcmV2LXBhcnNlIGMxID5oZWFkLm9sZCAmJgorCWdpdCByZXYtcGFyc2UgYzMgPnNlY29uZC1wYXJlbnQuZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIGMzXnt0cmVlfSA+dHJlZS5leHBlY3RlZCAmJgorCWdpdCBtZXJnZSAtcyB0aGVpcnMgYzMgJiYKKworCWdpdCByZXYtcGFyc2UgSEVBRCA+aGVhZC5uZXcgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSA+Zmlyc3QtcGFyZW50ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjIgPnNlY29uZC1wYXJlbnQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9ID50cmVlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMzIEhFQUQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjMyAmJgorCisJISB0ZXN0X2NtcCBoZWFkLm9sZCBoZWFkLm5ldyAmJgorCXRlc3RfY21wIGhlYWQub2xkIGZpcnN0LXBhcmVudCAmJgorCXRlc3RfY21wIHNlY29uZC1wYXJlbnQuZXhwZWN0ZWQgc2Vjb25kLXBhcmVudCAmJgorCXRlc3RfY21wIHRyZWUuZXhwZWN0ZWQgdHJlZSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCSEgdGVzdCAtZSBjMS5jICYmCisJdGVzdCAtZiBjMy5jCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwNy1tZXJnZS1vdmVyd3JpdGUuc2ggYi90L3Q3NjA3LW1lcmdlLW92ZXJ3cml0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDhhYjdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwNy1tZXJnZS1vdmVyd3JpdGUuc2gKQEAgLTAsMCArMSwxOTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtbWVyZ2UKKworRG8gbm90IG92ZXJ3cml0ZSBjaGFuZ2VzLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgYzAgYzAuYyAmJgorCXRlc3RfY29tbWl0IGMxIGMxLmMgJiYKKwl0ZXN0X2NvbW1pdCBjMWEgYzEuYyAiYzEgYSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb21taXQgYzIgYzIuYyAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlta2RpciBzdWIgJiYKKwllY2hvICJzdWIvZiIgPiBzdWIvZiAmJgorCW1rZGlyIHN1YjIgJiYKKwllY2hvICJzdWIyL2YiID4gc3ViMi9mICYmCisJZ2l0IGFkZCBzdWIvZiBzdWIyL2YgJiYKKwlnaXQgY29tbWl0IC1tIHN1YiAmJgorCWdpdCB0YWcgc3ViICYmCisJZWNobyAiVkVSWSBJTVBPUlRBTlQgQ0hBTkdFUyIgPiBpbXBvcnRhbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWNwIGltcG9ydGFudCBjMi5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IGMyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBvdmVyd3JpdGUgdHJhY2tlZCBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWNwIGltcG9ydGFudCBjMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBpbXBvcnRhbnQgJiYKKwlnaXQgY2hlY2tvdXQgYzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIG5ldyBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWNwIGltcG9ydGFudCBjMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IGMyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHN0YWdlZCBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWNwIGltcG9ydGFudCBjMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJcm0gYzIuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCWdpdCBjaGVja291dCBjMi5jICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IGMyLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHJlbW92ZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgcm0gYzEuYyAmJgorCWdpdCBjb21taXQgLW0gInJtIGMxLmMiICYmCisJY3AgaW1wb3J0YW50IGMxLmMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzFhICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IGMxLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHJlLWFkZGVkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IHJtIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tICJybSBjMS5jIiAmJgorCWNwIGltcG9ydGFudCBjMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMxYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMS5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSByZW1vdmVkIGZpbGUgd2l0aCBzdGFnZWQgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgcm0gYzEuYyAmJgorCWdpdCBjb21taXQgLW0gInJtIGMxLmMiICYmCisJY3AgaW1wb3J0YW50IGMxLmMgJiYKKwlnaXQgYWRkIGMxLmMgJiYKKwlybSBjMS5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMxYSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCWdpdCBjaGVja291dCBjMS5jICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IGMxLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVuc3RhZ2VkIGNoYW5nZXMgaW4gcmVuYW1lZCBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtdiBjMS5jIG90aGVyLmMgJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZSAmJgorCWNwIGltcG9ydGFudCBvdGhlci5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMxYSA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IG90aGVyLmMiIG91dCAmJgorCXRlc3RfcGF0aF9pc19maWxlIG90aGVyLmN+SEVBRCAmJgorCXRlc3QgJChnaXQgaGFzaC1vYmplY3Qgb3RoZXIuY35IRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBjMWE6YzEuYykgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgb3RoZXIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgdW50cmFja2VkIHN1YnRyZWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJcm0gLXJmIHN1YiAmJgorCW1rZGlyIC1wIHN1Yi9mICYmCisJY3AgaW1wb3J0YW50IHN1Yi9mL2ltcG9ydGFudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzdWIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgc3ViL2YvaW1wb3J0YW50CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToKKwlzdWIKKwlzdWIyCitQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLgorQWJvcnRpbmcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGUgaW4gbGVhZGluZyBwYXRoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXJtIC1yZiBzdWIgJiYKKwljcCBpbXBvcnRhbnQgc3ViICYmCisJY3AgaW1wb3J0YW50IHN1YjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc3ViIDI+b3V0ICYmCisJdGVzdF9pMThuY21wIG91dCBleHBlY3QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgc3ViICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IHN1YjIgJiYKKwlybSAtZiBzdWIgc3ViMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd3aWxsIG5vdCBvdmVyd3JpdGUgdW50cmFja2VkIHN5bWxpbmsgaW4gbGVhZGluZyBwYXRoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXJtIC1yZiBzdWIgJiYKKwlta2RpciBzdWIyICYmCisJbG4gLXMgc3ViMiBzdWIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc3ViICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IGJlIGNvbmZ1c2VkIGJ5IHN5bWxpbmsgaW4gbGVhZGluZyBwYXRoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXJtIC1yZiBzdWIgJiYKKwl0ZXN0X2xuX3NfYWRkIHN1YjIgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSBsbiAmJgorCWdpdCBjaGVja291dCBzdWIKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitlcnJvcjogVW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlICdjMC5jJyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZS4KK2ZhdGFsOiByZWFkLXRyZWUgZmFpbGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlIG9uIHVuYm9ybiBicmFuY2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IHJtIC1mciAuICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ldyAmJgorCWNwIGltcG9ydGFudCBjMC5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMwIDI+b3V0ICYmCisJdGVzdF9pMThuY21wIG91dCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlIG9uIHVuYm9ybiBicmFuY2ggLmdpdC9NRVJHRV9IRUFEIHNhbml0eSBldGMuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBjMC5jIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMC5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBtZXJnZSBsZWF2ZXMgdW5ib3JuIGJyYW5jaCBpbiB0aGUgd29tYicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgdW5ib3JuIGJyYW5jaCBhbmQgY29udGVudCcgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL3VuYm9ybiAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwllY2hvIGZvbyA+IHRyYWNrZWQtZmlsZSAmJgorCWdpdCBhZGQgdHJhY2tlZC1maWxlICYmCisJZWNobyBiYXIgPiB1bnRyYWNrZWQtZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBjbG9iYmVyIFdUL2luZGV4IHdoZW4gbWVyZ2luZyBpbnRvIHVuYm9ybicgJworCWdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlncmVwIGZvbyB0cmFja2VkLWZpbGUgJiYKKwlnaXQgc2hvdyA6dHJhY2tlZC1maWxlID5leHBlY3QgJiYKKwlncmVwIGZvbyBleHBlY3QgJiYKKwlncmVwIGJhciB1bnRyYWNrZWQtZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDgtbWVyZ2UtbWVzc2FnZXMuc2ggYi90L3Q3NjA4LW1lcmdlLW1lc3NhZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlN2UwYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA4LW1lcmdlLW1lc3NhZ2VzLnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGF1dG8tZ2VuZXJhdGVkIG1lcmdlIG1lc3NhZ2VzJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX29uZWxpbmUoKSB7CisJZWNobyAiJDEiIHwgc2VkICJzL1EvJy9nIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGxvY2FsIGJyYW5jaCcgJworCXRlc3RfY29tbWl0IG1hc3Rlci0xICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvY2FsLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IGJyYW5jaC0xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci0yICYmCisJZ2l0IG1lcmdlIGxvY2FsLWJyYW5jaCAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIGJyYW5jaCBRbG9jYWwtYnJhbmNoUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2N0b3B1cyBicmFuY2hlcycgJworCWdpdCBjaGVja291dCAtYiBvY3RvcHVzLWEgbWFzdGVyICYmCisJdGVzdF9jb21taXQgb2N0b3B1cy0xICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9jdG9wdXMtYiBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBvY3RvcHVzLTIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIG9jdG9wdXMtYSBvY3RvcHVzLWIgJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSBicmFuY2hlcyBRb2N0b3B1cy1hUSBhbmQgUW9jdG9wdXMtYlEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHRhZycgJworCWdpdCBjaGVja291dCAtYiB0YWctYnJhbmNoIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHRhZy0xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci0zICYmCisJZ2l0IG1lcmdlIHRhZy0xICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgdGFnIFF0YWctMVEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyB0YWcnICcKKwlnaXQgY2hlY2tvdXQgLWIgYW1iaWd1b3VzIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGFtYmlndW91cyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItNCAmJgorCWdpdCBtZXJnZSBhbWJpZ3VvdXMgJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSB0YWcgUWFtYmlndW91c1EiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZS10cmFja2luZyBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgcmVtb3RlIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHJlbW90ZS0xICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgcmVtb3RlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci01ICYmCisJZ2l0IG1lcmdlIG9yaWdpbi9tYXN0ZXIgJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIFFvcmlnaW4vbWFzdGVyUSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjA5LW1lcmdlLWNvLWVycm9yLW1zZ3Muc2ggYi90L3Q3NjA5LW1lcmdlLWNvLWVycm9yLW1zZ3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTkwNDEzMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDktbWVyZ2UtY28tZXJyb3ItbXNncy5zaApAQCAtMCwwICsxLDEzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3VucGFjay10cmVlcyBlcnJvciBtZXNzYWdlcycKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIEZpcnN0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoICYmCisJZWNobyB0d28gPnR3byAmJgorCWVjaG8gdGhyZWUgPnRocmVlICYmCisJZWNobyBmb3VyID5mb3VyICYmCisJZWNobyBmaXZlID5maXZlICYmCisJZ2l0IGFkZCB0d28gdGhyZWUgZm91ciBmaXZlICYmCisJZ2l0IGNvbW1pdCAtbSBTZWNvbmQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG90aGVyID50d28gJiYKKwllY2hvIG90aGVyID50aHJlZSAmJgorCWVjaG8gb3RoZXIgPmZvdXIgJiYKKwllY2hvIG90aGVyID5maXZlCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToKKwlmaXZlCisJZm91cgorCXRocmVlCisJdHdvCitQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLgorQWJvcnRpbmcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnRyYWNrZWQgZmlsZXMgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UgKGZhc3QgYW5kIG5vbi1mYXN0IGZvcndhcmQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaCAyPm91dCAmJgorCXRlc3RfaTE4bmNtcCBvdXQgZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGVtcHR5ICYmCisJKAorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTAgJiYKKwkJZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaCAyPm91dDIKKwkpICYmCisJdGVzdF9pMThuY21wIG91dDIgZXhwZWN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToKKwlmb3VyCisJdGhyZWUKKwl0d28KK1BsZWFzZSBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4KK2Vycm9yOiBUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6CisJZml2ZQorUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGZpbGVzIG9yIGxvY2FsIGNoYW5nZXMgb3Zld3JpdHRlbiBieSBtZXJnZScgJworCWdpdCBhZGQgdHdvICYmCisJZ2l0IGFkZCB0aHJlZSAmJgorCWdpdCBhZGQgZm91ciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2ggMj5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgb3V0IGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoKKwlyZXAvb25lCisJcmVwL3R3bworUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IHN3aXRjaCBicmFuY2hlcyBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMnICcKKwlnaXQgYWRkIGZpdmUgJiYKKwlta2RpciByZXAgJiYKKwllY2hvIG9uZSA+cmVwL29uZSAmJgorCWVjaG8gdHdvID5yZXAvdHdvICYmCisJZ2l0IGFkZCByZXAvb25lIHJlcC90d28gJiYKKwlnaXQgY29tbWl0IC1tIEZvdXJ0aCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIHVubyA+cmVwL29uZSAmJgorCWVjaG8gZG9zID5yZXAvdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGJyYW5jaCAyPm91dCAmJgorCXRlc3RfaTE4bmNtcCBvdXQgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OgorCXJlcC9vbmUKKwlyZXAvdHdvCitQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLgorQWJvcnRpbmcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgdXB0b2RhdGUgZmlsZSBwb3JjZWxhaW4gY2hlY2tvdXQgZXJyb3InICcKKwlnaXQgYWRkIHJlcC9vbmUgcmVwL3R3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBicmFuY2ggMj5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgb3V0IGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06CisJcmVwCisJcmVwMgorCitBYm9ydGluZworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdF91cHRvZGF0ZV9kaXIgcG9yY2VsYWluIGNoZWNrb3V0IGVycm9yJyAnCisJZ2l0IGluaXQgdXB0b2RhdGUgJiYKKwljZCB1cHRvZGF0ZSAmJgorCW1rZGlyIHJlcCAmJgorCW1rZGlyIHJlcDIgJiYKKwl0b3VjaCByZXAvZm9vICYmCisJdG91Y2ggcmVwMi9mb28gJiYKKwlnaXQgYWRkIHJlcC9mb28gcmVwMi9mb28gJiYKKwlnaXQgY29tbWl0IC1tIGluaXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoICYmCisJZ2l0IHJtIHJlcCAtciAmJgorCWdpdCBybSByZXAyIC1yICYmCisJPnJlcCAmJgorCT5yZXAyICYmCisJZ2l0IGFkZCByZXAgcmVwMiYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgdGVzdCBhcyBhIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCT5yZXAvdW50cmFja2VkLWZpbGUgJiYKKwk+cmVwMi91bnRyYWNrZWQtZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBicmFuY2ggMj5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgb3V0IC4uL2V4cGVjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MTAtbWVyZ2V0b29sLnNoIGIvdC90NzYxMC1tZXJnZXRvb2wuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWQyODhkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MTAtbWVyZ2V0b29sLnNoCkBAIC0wLDAgKzEsODA1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENoYXJsZXMgQmFpbGV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZXRvb2wKKworVGVzdGluZyBiYXNpYyBtZXJnZSB0b29sIGludm9jYXRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIEFsbCB0aGUgbWVyZ2V0b29sIHRlc3Qgd29yayBieSBjaGVja2luZyBvdXQgYSB0ZW1wb3JhcnkgYnJhbmNoIGJhc2VkCisjIG9mZiAnYnJhbmNoMScgYW5kIHRoZW4gbWVyZ2luZyBpbiBtYXN0ZXIgYW5kIGNoZWNraW5nIHRoZSByZXN1bHRzIG9mCisjIHJ1bm5pbmcgbWVyZ2V0b29sCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCWVjaG8gbWFzdGVyID5maWxlMSAmJgorCWVjaG8gbWFzdGVyIHNwYWNlZCA+InNwYWNlZCBuYW1lIiAmJgorCWVjaG8gbWFzdGVyIGZpbGUxMSA+ZmlsZTExICYmCisJZWNobyBtYXN0ZXIgZmlsZTEyID5maWxlMTIgJiYKKwllY2hvIG1hc3RlciBmaWxlMTMgPmZpbGUxMyAmJgorCWVjaG8gbWFzdGVyIGZpbGUxNCA+ZmlsZTE0ICYmCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyBtYXN0ZXIgc3ViID5zdWJkaXIvZmlsZTMgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1Ym1vZCAmJgorCSgKKwkJY2Qgc3VibW9kICYmCisJCTogPmZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgZm9vIgorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCBnaXQ6Ly9leGFtcGxlLmNvbS9zdWJtb2Qgc3VibW9kICYmCisJZ2l0IGFkZCBmaWxlMSAic3BhY2VkIG5hbWUiIGZpbGUxWzEtNF0gc3ViZGlyL2ZpbGUzIC5naXRtb2R1bGVzIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gImFkZCBpbml0aWFsIHZlcnNpb25zIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgbWFzdGVyICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvIGJyYW5jaDEgY2hhbmdlID5maWxlMSAmJgorCWVjaG8gYnJhbmNoMSBuZXdmaWxlID5maWxlMiAmJgorCWVjaG8gYnJhbmNoMSBzcGFjZWQgPiJzcGFjZWQgbmFtZSIgJiYKKwllY2hvIGJyYW5jaDEgYm90aCBhZGRlZCA+Ym90aCAmJgorCWVjaG8gYnJhbmNoMSBjaGFuZ2UgZmlsZTExID5maWxlMTEgJiYKKwllY2hvIGJyYW5jaDEgY2hhbmdlIGZpbGUxMyA+ZmlsZTEzICYmCisJZWNobyBicmFuY2gxIHN1YiA+c3ViZGlyL2ZpbGUzICYmCisJKAorCQljZCBzdWJtb2QgJiYKKwkJZWNobyBicmFuY2gxIHN1Ym1vZHVsZSA+YmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBiYXIgb24gYnJhbmNoMSIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHN1Ym1vZC1icmFuY2gxCisJKSAmJgorCWdpdCBhZGQgZmlsZTEgInNwYWNlZCBuYW1lIiBmaWxlMTEgZmlsZTEzIGZpbGUyIHN1YmRpci9maWxlMyBzdWJtb2QgJiYKKwlnaXQgYWRkIGJvdGggJiYKKwlnaXQgcm0gZmlsZTEyICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSBjaGFuZ2VzIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGRlbGV0ZS1iYXNlIGJyYW5jaDEgJiYKKwlta2RpciAtcCBhL2EgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG9uZSB0d28gMyA0ID5hL2EvZmlsZS50eHQgJiYKKwlnaXQgYWRkIGEvYS9maWxlLnR4dCAmJgorCWdpdCBjb21taXQgLW0iYmFzZSBmaWxlIiAmJgorCWdpdCBjaGVja291dCAtYiBtb3ZlLXRvLWIgZGVsZXRlLWJhc2UgJiYKKwlta2RpciAtcCBiL2IgJiYKKwlnaXQgbXYgYS9hL2ZpbGUudHh0IGIvYi9maWxlLnR4dCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgb25lIHR3byA0ID5iL2IvZmlsZS50eHQgJiYKKwlnaXQgY29tbWl0IC1hIC1tIm1vdmUgdG8gYiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbW92ZS10by1jIGRlbGV0ZS1iYXNlICYmCisJbWtkaXIgLXAgYy9jICYmCisJZ2l0IG12IGEvYS9maWxlLnR4dCBjL2MvZmlsZS50eHQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG9uZSB0d28gMyA+Yy9jL2ZpbGUudHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJtb3ZlIHRvIGMiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc3Rhc2gxIG1hc3RlciAmJgorCWVjaG8gc3Rhc2gxIGNoYW5nZSBmaWxlMTEgPmZpbGUxMSAmJgorCWdpdCBhZGQgZmlsZTExICYmCisJZ2l0IGNvbW1pdCAtbSAic3Rhc2gxIGNoYW5nZXMiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc3Rhc2gyIG1hc3RlciAmJgorCWVjaG8gc3Rhc2gyIGNoYW5nZSBmaWxlMTEgPmZpbGUxMSAmJgorCWdpdCBhZGQgZmlsZTExICYmCisJZ2l0IGNvbW1pdCAtbSAic3Rhc2gyIGNoYW5nZXMiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvIG1hc3RlciB1cGRhdGVkID5maWxlMSAmJgorCWVjaG8gbWFzdGVyIG5ldyA+ZmlsZTIgJiYKKwllY2hvIG1hc3RlciB1cGRhdGVkIHNwYWNlZCA+InNwYWNlZCBuYW1lIiAmJgorCWVjaG8gbWFzdGVyIGJvdGggYWRkZWQgPmJvdGggJiYKKwllY2hvIG1hc3RlciB1cGRhdGVkIGZpbGUxMiA+ZmlsZTEyICYmCisJZWNobyBtYXN0ZXIgdXBkYXRlZCBmaWxlMTQgPmZpbGUxNCAmJgorCWVjaG8gbWFzdGVyIG5ldyBzdWIgPnN1YmRpci9maWxlMyAmJgorCSgKKwkJY2Qgc3VibW9kICYmCisJCWVjaG8gbWFzdGVyIHN1Ym1vZHVsZSA+YmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBiYXIgb24gbWFzdGVyIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc3VibW9kLW1hc3RlcgorCSkgJiYKKwlnaXQgYWRkIGZpbGUxICJzcGFjZWQgbmFtZSIgZmlsZTEyIGZpbGUxNCBmaWxlMiBzdWJkaXIvZmlsZTMgc3VibW9kICYmCisJZ2l0IGFkZCBib3RoICYmCisJZ2l0IHJtIGZpbGUxMSAmJgorCWdpdCBjb21taXQgLW0gIm1hc3RlciB1cGRhdGVzIiAmJgorCisJZ2l0IGNsZWFuIC1mZHggJiYKKwlnaXQgY2hlY2tvdXQgLWIgb3JkZXItZmlsZS1zdGFydCBtYXN0ZXIgJiYKKwllY2hvIHN0YXJ0ID5hICYmCisJZWNobyBzdGFydCA+YiAmJgorCWdpdCBhZGQgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSBzdGFydCAmJgorCWdpdCBjaGVja291dCAtYiBvcmRlci1maWxlLXNpZGUxIG9yZGVyLWZpbGUtc3RhcnQgJiYKKwllY2hvIHNpZGUxID5hICYmCisJZWNobyBzaWRlMSA+YiAmJgorCWdpdCBhZGQgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSBzaWRlMSAmJgorCWdpdCBjaGVja291dCAtYiBvcmRlci1maWxlLXNpZGUyIG9yZGVyLWZpbGUtc3RhcnQgJiYKKwllY2hvIHNpZGUyID5hICYmCisJZWNobyBzaWRlMiA+YiAmJgorCWdpdCBhZGQgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSBzaWRlMiAmJgorCisJZ2l0IGNvbmZpZyBtZXJnZS50b29sIG15dG9vbCAmJgorCWdpdCBjb25maWcgbWVyZ2V0b29sLm15dG9vbC5jbWQgImNhdCBcIlwkUkVNT1RFXCIgPlwiXCRNRVJHRURcIiIgJiYKKwlnaXQgY29uZmlnIG1lcmdldG9vbC5teXRvb2wudHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJZ2l0IGNvbmZpZyBtZXJnZXRvb2wubXliYXNlLmNtZCAiY2F0IFwiXCRCQVNFXCIgPlwiXCRNRVJHRURcIiIgJiYKKwlnaXQgY29uZmlnIG1lcmdldG9vbC5teWJhc2UudHJ1c3RFeGl0Q29kZSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBtZXJnZXRvb2wnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMSAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTIgInNwYWNlZCBuYW1lIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyL2ZpbGUzICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJZWNobyAibWFzdGVyIHVwZGF0ZWQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEgJiYKKwllY2hvICJtYXN0ZXIgbmV3IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyICYmCisJZWNobyAibWFzdGVyIG5ldyBzdWIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViZGlyL2ZpbGUzICYmCisJZWNobyAiYnJhbmNoMSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2d1aSBtZXJnZXRvb2wnICcKKwl0ZXN0X2NvbmZpZyBtZXJnZS5ndWl0b29sIG15Z3VpdG9vbCAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWd1aXRvb2wuY21kICIocHJpbnRmIFwiZ3VpIFwiICYmIGNhdCBcIlwkUkVNT1RFXCIpID5cIlwkTUVSR0VEXCIiICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15Z3VpdG9vbC50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBib3RoICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtZyBmaWxlMSBmaWxlMSAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTIgInNwYWNlZCBuYW1lIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgc3ViZGlyL2ZpbGUzICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTExICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgc3VibW9kICYmCisJZWNobyAiZ3VpIG1hc3RlciB1cGRhdGVkIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUxICYmCisJZWNobyAiZ3VpIG1hc3RlciBuZXciID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIgJiYKKwllY2hvICJndWkgbWFzdGVyIG5ldyBzdWIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViZGlyL2ZpbGUzICYmCisJZWNobyAiYnJhbmNoMSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2d1aSBtZXJnZXRvb2wgd2l0aG91dCBtZXJnZS5ndWl0b29sIHNldCBmYWxscyBiYWNrIHRvIG1lcmdlLnRvb2wnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtLWd1aSBib3RoICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAtZyBmaWxlMSBmaWxlMSAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTIgInNwYWNlZCBuYW1lIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgc3ViZGlyL2ZpbGUzICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTExICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgLS1ndWkgc3VibW9kICYmCisJZWNobyAibWFzdGVyIHVwZGF0ZWQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEgJiYKKwllY2hvICJtYXN0ZXIgbmV3IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyICYmCisJZWNobyAibWFzdGVyIG5ldyBzdWIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViZGlyL2ZpbGUzICYmCisJZWNobyAiYnJhbmNoMSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBjcmxmJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCSMgVGhpcyB0ZXN0X2NvbmZpZyBsaW5lIG11c3QgZ28gYWZ0ZXIgdGhlIGFib3ZlIHJlc2V0IGxpbmUgc28gdGhhdAorCSMgY29yZS5hdXRvY3JsZiBpcyB1bmNvbmZpZ3VyZWQgYmVmb3JlIHJlc2V0IHJ1bnMuICAoVGhlCisJIyB0ZXN0X2NvbmZpZyBjb21tYW5kIHVzZXMgdGVzdF93aGVuX2ZpbmlzaGVkIGludGVybmFsbHkgYW5kCisJIyB0ZXN0X3doZW5fZmluaXNoZWQgaXMgTElGTy4pCisJdGVzdF9jb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUyICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAic3BhY2VkIG5hbWUiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgJiYKKwl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwl0ZXN0ICIkKHByaW50ZiB4IHwgY2F0IGZpbGUxIC0pIiA9ICIkKHByaW50ZiAibWFzdGVyIHVwZGF0ZWRcclxueCIpIiAmJgorCXRlc3QgIiQocHJpbnRmIHggfCBjYXQgZmlsZTIgLSkiID0gIiQocHJpbnRmICJtYXN0ZXIgbmV3XHJcbngiKSIgJiYKKwl0ZXN0ICIkKHByaW50ZiB4IHwgY2F0IHN1YmRpci9maWxlMyAtKSIgPSAiJChwcmludGYgIm1hc3RlciBuZXcgc3ViXHJcbngiKSIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wgLSBhdXRvY3JsZiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIGluIHN1YmRpcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwkJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMyAmJgorCQllY2hvICJtYXN0ZXIgbmV3IHN1YiIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZTMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBvbiBmaWxlIGluIHBhcmVudCBkaXInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTMgJiYKKwkJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMSAmJgorCQl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC4uL2ZpbGUyIC4uL3NwYWNlZFwgbmFtZSAmJgorCQl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC4uL2JvdGggJiYKKwkJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgLi4vZmlsZTExICYmCisJCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIC4uL2ZpbGUxMiAmJgorCQl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAuLi9zdWJtb2QgJiYKKwkJZWNobyAibWFzdGVyIHVwZGF0ZWQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL2ZpbGUxICYmCisJCWVjaG8gIm1hc3RlciBuZXciID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL2ZpbGUyICYmCisJCWVjaG8gImJyYW5jaDEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAuLi9zdWJtb2QvYmFyICYmCisJCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wgLSBzdWJkaXIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgc2tpcHMgYXV0b3Jlc29sdmVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgJiYKKwl5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgbWVyZ2VzIGFsbCBmcm9tIHN1YmRpciAocmVyZXJlIGRpc2FibGVkKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCBmYWxzZSAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwkJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgLi4vc3VibW9kICYmCisJCXllcyAiZCIgImQiIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCAmJgorCQllY2hvICJtYXN0ZXIgdXBkYXRlZCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLi4vZmlsZTEgJiYKKwkJZWNobyAibWFzdGVyIG5ldyIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLi4vZmlsZTIgJiYKKwkJZWNobyAibWFzdGVyIG5ldyBzdWIiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUzICYmCisJCSggY2QgLi4gJiYgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gKSAmJgorCQllY2hvICJtYXN0ZXIgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAuLi9zdWJtb2QvYmFyICYmCisJCWdpdCBjb21taXQgLW0gImJyYW5jaDIgcmVzb2x2ZWQgYnkgbWVyZ2V0b29sIGZyb20gc3ViZGlyIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIG1lcmdlcyBhbGwgZnJvbSBzdWJkaXIgKHJlcmVyZSBlbmFibGVkKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJcm0gLXJmIC5naXQvcnItY2FjaGUgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIC4uL3N1Ym1vZCAmJgorCQl5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgJiYKKwkJZWNobyAibWFzdGVyIHVwZGF0ZWQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL2ZpbGUxICYmCisJCWVjaG8gIm1hc3RlciBuZXciID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC4uL2ZpbGUyICYmCisJCWVjaG8gIm1hc3RlciBuZXcgc3ViIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlMyAmJgorCQkoIGNkIC4uICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICkgJiYKKwkJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLi4vc3VibW9kL2JhciAmJgorCQlnaXQgY29tbWl0IC1tICJicmFuY2gyIHJlc29sdmVkIGJ5IG1lcmdldG9vbCBmcm9tIHN1YmRpciIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBza2lwcyByZXNvbHZlZCBwYXRocyB3aGVuIHJlcmVyZSBpcyBhY3RpdmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgc3VibW9kICYmCisJeWVzICJkIiAiZCIgfCBnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0ICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwlvdXRwdXQ9IiQoeWVzICJuIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3RlZCBzdGFzaCBzZXRzIHVwIHJlcmVyZScgICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCWdpdCBjaGVja291dCBzdGFzaDEgJiYKKwllY2hvICJDb25mbGljdGluZyBzdGFzaCBjb250ZW50IiA+ZmlsZTExICYmCisJZ2l0IHN0YXNoICYmCisKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggc3Rhc2gyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5ICYmCisKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJY29uZmxpY3RzPSIkKGdpdCByZXJlcmUgcmVtYWluaW5nKSIgJiYKKwl0ZXN0ICIkY29uZmxpY3RzIiA9ICJmaWxlMTEiICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiICE9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisKKwlnaXQgY29tbWl0IC1hbSAic2F2ZSB0aGUgc3Rhc2ggcmVzb2x1dGlvbiIgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc3Rhc2gyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5ICYmCisKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJY29uZmxpY3RzPSIkKGdpdCByZXJlcmUgcmVtYWluaW5nKSIgJiYKKwl0ZXN0IC16ICIkY29uZmxpY3RzIiAmJgorCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCB0YWtlcyBwYXJ0aWFsIHBhdGgnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgZmFsc2UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKworCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyICYmCisKKwllY2hvICJtYXN0ZXIgbmV3IHN1YiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvZmlsZTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2V0b29sIGRlbGV0ZS9kZWxldGUgY29uZmxpY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBtb3ZlLXRvLWMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbW92ZS10by1iICYmCisJZWNobyBkIHwgZ2l0IG1lcmdldG9vbCBhL2EvZmlsZS50eHQgJiYKKwkhIHRlc3QgLWYgYS9hL2ZpbGUudHh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtb3ZlLXRvLWIgJiYKKwllY2hvIG0gfCBnaXQgbWVyZ2V0b29sIGEvYS9maWxlLnR4dCAmJgorCXRlc3QgLWYgYi9iL2ZpbGUudHh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtb3ZlLXRvLWIgJiYKKwkhIGVjaG8gYSB8IGdpdCBtZXJnZXRvb2wgYS9hL2ZpbGUudHh0ICYmCisJISB0ZXN0IC1mIGEvYS9maWxlLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgcHJvZHVjZXMgbm8gZXJyb3JzIHdoZW4ga2VlcEJhY2t1cCBpcyB1c2VkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgbW92ZS10by1jICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLmtlZXBCYWNrdXAgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtb3ZlLXRvLWIgJiYKKwllY2hvIGQgfCBnaXQgbWVyZ2V0b29sIGEvYS9maWxlLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwkhIHRlc3QgLWQgYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgaG9ub3JzIHRlbXBmaWxlIGNvbmZpZyBmb3IgZGVsZXRlZCBmaWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IG1vdmUtdG8tYyAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5rZWVwVGVtcG9yYXJpZXMgZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbW92ZS10by1iICYmCisJZWNobyBkIHwgZ2l0IG1lcmdldG9vbCBhL2EvZmlsZS50eHQgJiYKKwkhIHRlc3QgLWQgYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wga2VlcHMgdGVtcGZpbGVzIHdoZW4gYWJvcnRpbmcgZGVsZXRlL2RlbGV0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjbGVhbiAtZmR4IiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgbW92ZS10by1jICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLmtlZXBUZW1wb3JhcmllcyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1vdmUtdG8tYiAmJgorCSEgdGVzdF93cml0ZV9saW5lcyBhIG4gfCBnaXQgbWVyZ2V0b29sIGEvYS9maWxlLnR4dCAmJgorCXRlc3QgLWQgYS9hICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGVfQkFTRV8udHh0CisJZmlsZV9MT0NBTF8udHh0CisJZmlsZV9SRU1PVEVfLnR4dAorCUVPRgorCWxzIC0xIGEvYSB8IHNlZCAtZSAicy9bMC05XSovL2ciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZWQgdnMgbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJbXYgc3VibW9kIHN1Ym1vZC1tb3ZlZGFzaWRlICYmCisJZ2l0IHJtIC0tY2FjaGVkIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gIlN1Ym1vZHVsZSBkZWxldGVkIGZyb20gYnJhbmNoIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuYSB0ZXN0JHRlc3RfY291bnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyAmJgorCXllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCAmJgorCXllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgJiYKKwl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwlybWRpciBzdWJtb2QgJiYgbXYgc3VibW9kLW1vdmVkYXNpZGUgc3VibW9kICYmCisJZWNobyAiYnJhbmNoMSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIG1vZHVsZSIgJiYKKworCW12IHN1Ym1vZCBzdWJtb2QtbW92ZWRhc2lkZSAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuYiB0ZXN0JHRlc3RfY291bnQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCXRlc3QgISAtZSBzdWJtb2QgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGRlbGV0aW5nIG1vZHVsZSIgJiYKKworCW12IHN1Ym1vZC1tb3ZlZGFzaWRlIHN1Ym1vZCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuYyBtYXN0ZXIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0JHRlc3RfY291bnQgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCXRlc3QgISAtZSBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZC5vcmlnICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGRlbGV0aW5nIG1vZHVsZSIgJiYKKwltdiBzdWJtb2Qub3JpZyBzdWJtb2QgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuZCBtYXN0ZXIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0JHRlc3RfY291bnQgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIG1vZHVsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSB2cyBtb2RpZmllZCBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwltdiBzdWJtb2Qgc3VibW9kLW1vdmVkYXNpZGUgJiYKKwlnaXQgcm0gLS1jYWNoZWQgc3VibW9kICYmCisJZWNobyBub3QgYSBzdWJtb2R1bGUgPnN1Ym1vZCAmJgorCWdpdCBhZGQgc3VibW9kICYmCisJZ2l0IGNvbW1pdCAtbSAiU3VibW9kdWxlIHBhdGggYmVjb21lcyBmaWxlIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuYSBicmFuY2gxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJcm1kaXIgc3VibW9kICYmIG12IHN1Ym1vZC1tb3ZlZGFzaWRlIHN1Ym1vZCAmJgorCWVjaG8gImJyYW5jaDEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9iYXIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBtb2R1bGUiICYmCisKKwltdiBzdWJtb2Qgc3VibW9kLW1vdmVkYXNpZGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50LmIgdGVzdCR0ZXN0X2NvdW50ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvICJub3QgYSBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIGZpbGUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50LmMgbWFzdGVyICYmCisJcm1kaXIgc3VibW9kICYmIG12IHN1Ym1vZC1tb3ZlZGFzaWRlIHN1Ym1vZCAmJgorCXRlc3QgISAtZSBzdWJtb2Qub3JpZyAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QkdGVzdF9jb3VudCAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgJiYKKwl5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggJiYKKwl5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyICYmCisJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2Qub3JpZyAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAibm90IGEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZCAmJgorCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBmaWxlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5kIG1hc3RlciAmJgorCXJtZGlyIHN1Ym1vZCAmJiBtdiBzdWJtb2Qub3JpZyBzdWJtb2QgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0JHRlc3RfY291bnQgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzICYmCisJeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoICYmCisJeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWVjaG8gIm1hc3RlciBzdWJtb2R1bGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3VibW9kL2JhciAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBrZWVwaW5nIG1vZHVsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGluIHN1YmRpcmVjdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfY3JlYXRlX3JlcG8gc3ViZGlyX21vZHVsZSAmJgorCQkoCisJCWNkIHN1YmRpcl9tb2R1bGUgJiYKKwkJOiA+ZmlsZTE1ICYmCisJCWdpdCBhZGQgZmlsZTE1ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBpbml0aWFsIHZlcnNpb25zIgorCQkpCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHN1YmRpci9zdWJkaXJfbW9kdWxlIiAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIGdpdDovL2V4YW1wbGUuY29tL3N1YnN1Ym1vZHVsZSBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorCWdpdCBhZGQgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIGluIHN1YmRpcmVjdG9yeSIgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQuYSB0ZXN0JHRlc3RfY291bnQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCSgKKwljZCBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc3VwZXIxMC5hICYmCisJCWVjaG8gdGVzdCR0ZXN0X2NvdW50LmEgPmZpbGUxNSAmJgorCQlnaXQgYWRkIGZpbGUxNSAmJgorCQlnaXQgY29tbWl0IC1tICJvbiBicmFuY2ggMTAuYSIKKwkpICYmCisJZ2l0IGFkZCBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZSBzdWJtb2R1bGUgaW4gc3ViZGlyZWN0b3J5IG9uIHRlc3QkdGVzdF9jb3VudC5hIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudC5iIHRlc3QkdGVzdF9jb3VudCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJKAorCQljZCBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgc3VwZXIxMC5iICYmCisJCWVjaG8gdGVzdCR0ZXN0X2NvdW50LmIgPmZpbGUxNSAmJgorCQlnaXQgYWRkIGZpbGUxNSAmJgorCQlnaXQgY29tbWl0IC1tICJvbiBicmFuY2ggMTAuYiIKKwkpICYmCisJZ2l0IGFkZCBzdWJkaXIvc3ViZGlyX21vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZSBzdWJtb2R1bGUgaW4gc3ViZGlyZWN0b3J5IG9uIHRlc3QkdGVzdF9jb3VudC5iIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QkdGVzdF9jb3VudC5hICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyX21vZHVsZQorCSkgJiYKKwllY2hvICJ0ZXN0JHRlc3RfY291bnQuYiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvc3ViZGlyX21vZHVsZS9maWxlMTUgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCWVjaG8gInRlc3QkdGVzdF9jb3VudC5iIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QkdGVzdF9jb3VudC5hICYmCisJeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKwllY2hvICJ0ZXN0JHRlc3RfY291bnQuYiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJkaXIvc3ViZGlyX21vZHVsZS9maWxlMTUgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCWVjaG8gInRlc3QkdGVzdF9jb3VudC5hIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSAmJgorCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdG9yeSB2cyBtb2RpZmllZCBzdWJtb2R1bGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBicmFuY2gxICYmCisJbXYgc3VibW9kIHN1Ym1vZC1tb3ZlZGFzaWRlICYmCisJZ2l0IHJtIC0tY2FjaGVkIHN1Ym1vZCAmJgorCW1rZGlyIHN1Ym1vZCAmJgorCWVjaG8gbm90IGEgc3VibW9kdWxlID5zdWJtb2QvZmlsZTE2ICYmCisJZ2l0IGFkZCBzdWJtb2QvZmlsZTE2ICYmCisJZ2l0IGNvbW1pdCAtbSAiU3VibW9kdWxlIHBhdGggYmVjb21lcyBkaXJlY3RvcnkiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWVjaG8gIm5vdCBhIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvZmlsZTE2ICYmCisJcm0gLXJmIHN1Ym1vZC5vcmlnICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl0ZXN0ICEgLWUgc3VibW9kLm9yaWcgJiYKKwl5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZC5vcmlnICYmCisJZWNobyAibm90IGEgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC5vcmlnL2ZpbGUxNiAmJgorCXJtIC1yIHN1Ym1vZC5vcmlnICYmCisJbXYgc3VibW9kLW1vdmVkYXNpZGUvLmdpdCBzdWJtb2QgJiYKKwkoIGNkIHN1Ym1vZCAmJiBnaXQgY2xlYW4gLWYgJiYgZ2l0IHJlc2V0IC0taGFyZCApICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvICJtYXN0ZXIgc3VibW9kdWxlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC9iYXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLXJmIHN1Ym1vZC1tb3ZlZGFzaWRlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50LmMgbWFzdGVyICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50ICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyAibWFzdGVyIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvYmFyICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdCR0ZXN0X2NvdW50ICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXRlc3QgISAtZSBzdWJtb2Qub3JpZyAmJgorCXllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCAmJgorCWVjaG8gIm5vdCBhIHN1Ym1vZHVsZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJtb2QvZmlsZTE2ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCSggY2Qgc3VibW9kICYmIGdpdCBjbGVhbiAtZiAmJiBnaXQgcmVzZXQgLS1oYXJkICkgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHdpdGggbm8gYmFzZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCAtLXRvb2wgbXliYXNlIC0tIGJvdGggJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYm90aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gY29tbWFuZHMgb3ZlcnJpZGUgYnVpbHQtaW5zJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JHRlc3RfY291bnQgYnJhbmNoMSAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5kZWZhdWx0cy5jbWQgImNhdCBcIlwkUkVNT1RFXCIgPlwiXCRNRVJHRURcIiIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wuZGVmYXVsdHMudHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgLS10b29sIGRlZmF1bHRzIC0tIGJvdGggJiYKKwllY2hvIG1hc3RlciBib3RoIGFkZGVkID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGJvdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZW5hbWVzIHNlZW4gYnkgdG9vbHMgc3RhcnQgd2l0aCAuLycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wud3JpdGVUb1RlbXAgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wubXllY2hvLmNtZCAiZWNobyBcIlwkTE9DQUxcIiIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wubXllY2hvLnRydXN0RXhpdENvZGUgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0IC0tdG9vbCBteWVjaG8gLS0gYm90aCA+YWN0dWFsICYmCisJZ3JlcCBeXC4vYm90aF9MT0NBTF8gYWN0dWFsCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgTUtURU1QICcKKwl0ZW1wZGlyPSQobWt0ZW1wIC1kIC10IGZvby5YWFhYWFgpICYmCisJdGVzdCAtZCAiJHRlbXBkaXIiICYmCisJcm1kaXIgIiR0ZW1wZGlyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1LVEVNUCAndGVtcG9yYXJ5IGZpbGVuYW1lcyBhcmUgdXNlZCB3aXRoIG1lcmdldG9vbC53cml0ZVRvVGVtcCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCR0ZXN0X2NvdW50IGJyYW5jaDEgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wud3JpdGVUb1RlbXAgdHJ1ZSAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWVjaG8uY21kICJlY2hvIFwiXCRMT0NBTFwiIiAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWVjaG8udHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgLS10b29sIG15ZWNobyAtLSBib3RoID5hY3R1YWwgJiYKKwkhIGdyZXAgXlwuL2JvdGhfTE9DQUxfIGFjdHVhbCAmJgorCWdyZXAgL2JvdGhfTE9DQUxfIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLm9yZGVyRmlsZSBjb25maWd1cmF0aW9uIGlzIGhvbm9yZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBvcmRlci1maWxlLXNpZGUyICYmCisJdGVzdF9jb25maWcgZGlmZi5vcmRlckZpbGUgb3JkZXItZmlsZSAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWVjaG8uY21kICJlY2hvIFwiXCRMT0NBTFwiIiAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWVjaG8udHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJZWNobyBiID5vcmRlci1maWxlICYmCisJZWNobyBhID4+b3JkZXItZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBvcmRlci1maWxlLXNpZGUxICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlNZXJnaW5nOgorCQliCisJCWEKKwlFT0YKKworCSMgbWFrZSBzdXJlICJvcmRlci1maWxlIiB0aGF0IGlzIGFtYmlndW91cyBiZXR3ZWVuCisJIyByZXYgYW5kIHBhdGggaXMgdW5kZXJzdG9vZCBjb3JyZWN0bHkuCisJZ2l0IGJyYW5jaCBvcmRlci1maWxlIEhFQUQgJiYKKworCWdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgLS10b29sIG15ZWNobyA+b3V0cHV0ICYmCisJZ2l0IGdyZXAgLS1uby1pbmRleCAtaCAtQTIgTWVyZ2luZzogb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgLU9vcmRlci1maWxlIGlzIGhvbm9yZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkdGVzdF9jb3VudCBvcmRlci1maWxlLXNpZGUyICYmCisJdGVzdF9jb25maWcgZGlmZi5vcmRlckZpbGUgb3JkZXItZmlsZSAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWVjaG8uY21kICJlY2hvIFwiXCRMT0NBTFwiIiAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5teWVjaG8udHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJZWNobyBiID5vcmRlci1maWxlICYmCisJZWNobyBhID4+b3JkZXItZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBvcmRlci1maWxlLXNpZGUxICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlNZXJnaW5nOgorCQlhCisJCWIKKwlFT0YKKwlnaXQgbWVyZ2V0b29sIC1PL2Rldi9udWxsIC0tbm8tcHJvbXB0IC0tdG9vbCBteWVjaG8gPm91dHB1dCAmJgorCWdpdCBncmVwIC0tbm8taW5kZXggLWggLUEyIE1lcmdpbmc6IG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjb25maWcgLS11bnNldCBkaWZmLm9yZGVyRmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBvcmRlci1maWxlLXNpZGUxICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlNZXJnaW5nOgorCQliCisJCWEKKwlFT0YKKwlnaXQgbWVyZ2V0b29sIC1Pb3JkZXItZmlsZSAtLW5vLXByb21wdCAtLXRvb2wgbXllY2hvID5vdXRwdXQgJiYKKwlnaXQgZ3JlcCAtLW5vLWluZGV4IC1oIC1BMiBNZXJnaW5nOiBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjExLW1lcmdlLWFib3J0LnNoIGIvdC90NzYxMS1tZXJnZS1hYm9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Yzg0YTUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYxMS1tZXJnZS1hYm9ydC5zaApAQCAtMCwwICsxLDIwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgYWJvcnRpbmcgaW4tcHJvZ3Jlc3MgbWVyZ2VzCisKK1NldCB1cCByZXBvIHdpdGggY29uZmxpY3RpbmcgYW5kIG5vbi1jb25mbGljdGluZyBicmFuY2hlczoKKworVGhlcmUgYXJlIHRocmVlIGZpbGVzIGZvby9iYXIvYmF6LCBhbmQgdGhlIGZvbGxvd2luZyBncmFwaCBpbGx1c3RyYXRlcyB0aGUKK2NvbnRlbnQgb2YgdGhlc2UgZmlsZXMgaW4gZWFjaCBjb21taXQ6CisKKyMgZm9vL2Jhci9iYXogLS0tIGZvby9iYXIvYmF6eiAgICAgPC0tIG1hc3RlcgorIyAgICAgICAgICAgICBcCisjICAgICAgICAgICAgICAtLS0gZm9vL2JhcmYvYmF6ZiAgIDwtLSBjb25mbGljdF9icmFuY2gKKyMgICAgICAgICAgICAgICBcCisjICAgICAgICAgICAgICAgIC0tLSBmb28vYmFydC9iYXogIDwtLSBjbGVhbl9icmFuY2gKKworTmV4dCwgdGVzdCBnaXQgbWVyZ2UgLS1hYm9ydCB3aXRoIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorLSBiZWZvcmUvYWZ0ZXIgc3VjY2Vzc2Z1bCBtZXJnZSAoc2hvdWxkIGZhaWwgd2hlbiBub3QgaW4gbWVyZ2UgY29udGV4dCkKKy0gd2l0aC93aXRob3V0IGNvbmZsaWN0cworLSBjbGVhbi9kaXJ0eSBpbmRleCBiZWZvcmUgbWVyZ2UKKy0gY2xlYW4vZGlydHkgd29ya3RyZWUgYmVmb3JlIG1lcmdlCistIGRpcnR5IGluZGV4IGJlZm9yZSBtZXJnZSBtYXRjaGVzIGNvbnRlbnRzIG9uIHJlbW90ZSBicmFuY2gKKy0gY2hhbmdlZC91bmNoYW5nZWQgd29ya3RyZWUgYWZ0ZXIgbWVyZ2UKKy0gY2hhbmdlZC91bmNoYW5nZWQgaW5kZXggYWZ0ZXIgbWVyZ2UKKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCSMgQ3JlYXRlIHRoZSBhYm92ZSByZXBvCisJZWNobyBmb28gPiBmb28gJiYKKwllY2hvIGJhciA+IGJhciAmJgorCWVjaG8gYmF6ID4gYmF6ICYmCisJZ2l0IGFkZCBmb28gYmFyIGJheiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gYmF6eiA+IGJheiAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3RfYnJhbmNoIEhFQUReICYmCisJZWNobyBiYXJmID4gYmFyICYmCisJZWNobyBiYXpmID4gYmF6ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY29uZmxpY3QiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNsZWFuX2JyYW5jaCBIRUFEXiAmJgorCWVjaG8gYmFydCA+IGJhciAmJgorCWdpdCBjb21taXQgLWEgLW0gImNsZWFuIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKworcHJlX21lcmdlX2hlYWQ9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEICh1bnN0YXJ0ZWQgbWVyZ2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tYWJvcnQgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIE1FUkdFX0hFQUQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHdpdGhvdXQgTUVSR0VfSEVBRCAodW5zdGFydGVkIG1lcmdlKTogLmdpdC9NRVJHRV9IRUFEIHNhbml0eScgJworCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEIChjb21wbGV0ZWQgbWVyZ2UpJyAnCisJZ2l0IG1lcmdlIGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIE1lcmdlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQKKwlwb3N0X21lcmdlX2hlYWQ9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1hYm9ydCAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgTUVSR0VfSEVBRCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEIChjb21wbGV0ZWQgbWVyZ2UpOiAuZ2l0L01FUkdFX0hFQUQgc2FuaXR5JyAnCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwb3N0X21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRm9yZ2V0IHByZXZpb3VzIG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBYm9ydCBhZnRlciAtLW5vLWNvbW1pdCcgJworCSMgUmVkbyBtZXJnZSwgYnV0IHN0b3AgYmVmb3JlIGNyZWF0aW5nIG1lcmdlIGNvbW1pdAorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjbGVhbl9icmFuY2ggJiYKKwl0ZXN0IC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMgQWJvcnQgbm9uLWNvbmZsaWN0aW5nIG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IGFmdGVyIGNvbmZsaWN0cycgJworCSMgQ3JlYXRlIGNvbmZsaWN0aW5nIG1lcmdlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBBYm9ydCBjb25mbGljdGluZyBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbGVhbiBtZXJnZSB3aXRoIGRpcnR5IGluZGV4IGZhaWxzJyAnCisJZWNobyB4eXp6eSA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmKSIgJiYKKwlnaXQgZGlmZiAtLXN0YWdlZCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBkaXJ0eSBpbmRleCBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdF9icmFuY2ggJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc2V0IGluZGV4IChidXQgcHJlc2VydmUgd29ya3RyZWUgY2hhbmdlcyknICcKKwlnaXQgcmVzZXQgIiRwcmVfbWVyZ2VfaGVhZCIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWJvcnQgY2xlYW4gbWVyZ2Ugd2l0aCBub24tY29uZmxpY3RpbmcgZGlydHkgd29ya3RyZWUnICcKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIEFib3J0IG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IGNvbmZsaWN0aW5nIG1lcmdlIHdpdGggbm9uLWNvbmZsaWN0aW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBBYm9ydCBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXNldCB3b3JrdHJlZSBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYWlsIGNsZWFuIG1lcmdlIHdpdGggY29uZmxpY3RpbmcgZGlydHkgd29ya3RyZWUnICcKKwllY2hvIHh5enp5ID4+IGJhciAmJgorCWdpdCBkaWZmID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmFpbCBjb25mbGljdGluZyBtZXJnZSB3aXRoIGNvbmZsaWN0aW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVzZXQgd29ya3RyZWUgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgIiRwcmVfbWVyZ2VfaGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmFpbCBjbGVhbiBtZXJnZSB3aXRoIG1hdGNoaW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJZWNobyBiYXJ0ID4gYmFyICYmCisJZ2l0IGRpZmYgPiBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYWlsIGNvbmZsaWN0aW5nIG1lcmdlIHdpdGggbWF0Y2hpbmcgZGlydHkgd29ya3RyZWUnICcKKwllY2hvIGJhcmYgPiBiYXIgJiYKKwlnaXQgZGlmZiA+IGV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdF9icmFuY2ggJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYxMi1tZXJnZS12ZXJpZnktc2lnbmF0dXJlcy5zaCBiL3QvdDc2MTItbWVyZ2UtdmVyaWZ5LXNpZ25hdHVyZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQyNmYzYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MTItbWVyZ2UtdmVyaWZ5LXNpZ25hdHVyZXMuc2gKQEAgLTAsMCArMSwxMzUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0ZSBzaWduZWQgY29tbWl0cycgJworCWVjaG8gMSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS1zaWduZWQgJiYKKwllY2hvIDMgPmVsaWYgJiYgZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVMgLW0gInNpZ25lZCBvbiBzaWRlIiAmJgorCWdpdCBjaGVja291dCBpbml0aWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS11bnNpZ25lZCAmJgorCWVjaG8gMyA+Zm9vICYmIGdpdCBhZGQgZm9vICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInVuc2lnbmVkIG9uIHNpZGUiICYmCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlLWJhZCAmJgorCWVjaG8gMyA+YmFyICYmIGdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVMgLW0gImJhZCBvbiBzaWRlIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgc2lkZS1iYWQgPnJhdyAmJgorCXNlZCAtZSAicy9eYmFkL2ZvcmdlZCBiYWQvIiByYXcgPmZvcmdlZCAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgZm9yZ2VkID5mb3JnZWQuY29tbWl0ICYmCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlLXVudHJ1c3RlZCAmJgorCWVjaG8gMyA+YmF6ICYmIGdpdCBhZGQgYmF6ICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVNCNzIyNzE4OSAtbSAidW50cnVzdGVkIG9uIHNpZGUiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSB1bnNpZ25lZCBjb21taXQgd2l0aCB2ZXJpZmljYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHNpZGUtdW5zaWduZWQgMj5tZXJnZWVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUiIG1lcmdlZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIHVuc2lnbmVkIGNvbW1pdCB3aXRoIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXM9dHJ1ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS52ZXJpZnlTaWduYXR1cmVzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IHNpZGUtdW5zaWduZWQgMj5tZXJnZWVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUiIG1lcmdlZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIGNvbW1pdCB3aXRoIGJhZCBzaWduYXR1cmUgd2l0aCB2ZXJpZmljYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzICQoY2F0IGZvcmdlZC5jb21taXQpIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIiBtZXJnZWVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSBjb21taXQgd2l0aCBiYWQgc2lnbmF0dXJlIHdpdGggbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcz10cnVlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXMgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgJChjYXQgZm9yZ2VkLmNvbW1pdCkgMj5tZXJnZWVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUiIG1lcmdlZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIGNvbW1pdCB3aXRoIHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCB2ZXJpZmljYXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHNpZGUtdW50cnVzdGVkIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgbWVyZ2VlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIHZlcmlmaWNhdGlvbiBhbmQgaGlnaCBtaW5UcnVzdExldmVsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfY29uZmlnIGdwZy5taW5UcnVzdExldmVsIG1hcmdpbmFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHNpZGUtdW50cnVzdGVkIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgbWVyZ2VlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggdW50cnVzdGVkIHNpZ25hdHVyZSB3aXRoIHZlcmlmaWNhdGlvbiBhbmQgbG93IG1pblRydXN0TGV2ZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgdW5kZWZpbmVkICYmCisJZ2l0IG1lcmdlIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHNpZGUtdW50cnVzdGVkID5tZXJnZW91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSIgbWVyZ2VvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIGNvbW1pdCB3aXRoIHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCBtZXJnZS52ZXJpZnlTaWduYXR1cmVzPXRydWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcyB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSBzaWRlLXVudHJ1c3RlZCAyPm1lcmdlZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUiIG1lcmdlZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIGNvbW1pdCB3aXRoIHVudHJ1c3RlZCBzaWduYXR1cmUgd2l0aCBtZXJnZS52ZXJpZnlTaWduYXR1cmVzPXRydWUgYW5kIG1pblRydXN0TGV2ZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcyB0cnVlICYmCisJdGVzdF9jb25maWcgZ3BnLm1pblRydXN0TGV2ZWwgbWFyZ2luYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IHNpZGUtdW50cnVzdGVkIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgbWVyZ2VlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2Ugc2lnbmVkIGNvbW1pdCB3aXRoIHZlcmlmaWNhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwlnaXQgbWVyZ2UgLS12ZXJib3NlIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHNpZGUtc2lnbmVkID5tZXJnZW91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSIgbWVyZ2VvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIHNpZ25lZCBjb21taXQgd2l0aCBtZXJnZS52ZXJpZnlTaWduYXR1cmVzPXRydWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcyB0cnVlICYmCisJZ2l0IG1lcmdlIC0tdmVyYm9zZSAtLWZmLW9ubHkgc2lkZS1zaWduZWQgPm1lcmdlb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIiBtZXJnZW91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggYmFkIHNpZ25hdHVyZSB3aXRob3V0IHZlcmlmaWNhdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgaW5pdGlhbCIgJiYKKwlnaXQgbWVyZ2UgJChjYXQgZm9yZ2VkLmNvbW1pdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIGNvbW1pdCB3aXRoIGJhZCBzaWduYXR1cmUgd2l0aCBtZXJnZS52ZXJpZnlTaWduYXR1cmVzPWZhbHNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnZlcmlmeVNpZ25hdHVyZXMgZmFsc2UgJiYKKwlnaXQgbWVyZ2UgJChjYXQgZm9yZ2VkLmNvbW1pdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIGNvbW1pdCB3aXRoIGJhZCBzaWduYXR1cmUgd2l0aCBtZXJnZS52ZXJpZnlTaWduYXR1cmVzPXRydWUgYW5kIC0tbm8tdmVyaWZ5LXNpZ25hdHVyZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGluaXRpYWwiICYmCisJdGVzdF9jb25maWcgbWVyZ2UudmVyaWZ5U2lnbmF0dXJlcyB0cnVlICYmCisJZ2l0IG1lcmdlIC0tbm8tdmVyaWZ5LXNpZ25hdHVyZXMgJChjYXQgZm9yZ2VkLmNvbW1pdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIHVuc2lnbmVkIGNvbW1pdCBpbnRvIHVuYm9ybiBicmFuY2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBpbml0aWFsIiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bmJvcm4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS12ZXJpZnktc2lnbmF0dXJlcyBzaWRlLXVuc2lnbmVkIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlIiBtZXJnZWVycm9yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYxMy1tZXJnZS1zdWJtb2R1bGUuc2ggYi90L3Q3NjEzLW1lcmdlLXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMWU5ZmNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYxMy1tZXJnZS1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwxOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlIGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKKyMgbWVyZ2VzIHdpdGhvdXQgY29uZmxpY3RzCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCBtZXJnZSIKKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXQgbWVyZ2UgLS1mZiIKKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXQgbWVyZ2UgLS1mZi1vbmx5IgorCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfRE9FU05UX0NSRUFURV9FTVBUWV9TVUJNT0RVTEVfRElSPTEKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9BVFRFTVBUU19UT19NRVJHRV9SRU1PVkVEX1NVQk1PRFVMRV9GSUxFUz0xCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCBtZXJnZSAtLW5vLWZmIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MTQtbWVyZ2Utc2lnbm9mZi5zaCBiL3QvdDc2MTQtbWVyZ2Utc2lnbm9mZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMWI4NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzYxNC1tZXJnZS1zaWdub2ZmLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbWVyZ2UgLS1zaWdub2ZmCisKK1RoaXMgdGVzdCBydW5zIGdpdCBtZXJnZSAtLXNpZ25vZmYgYW5kIG1ha2VzIHN1cmUgdGhhdCBpdCB3b3Jrcy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgU2V0dXAgdGVzdCBmaWxlcwordGVzdF9zZXR1cCgpIHsKKwkjIEV4cGVjdGVkIGNvbW1pdCBtZXNzYWdlIGFmdGVyIG1lcmdlIC0tc2lnbm9mZgorCWNhdCA+ZXhwZWN0ZWQtc2lnbmVkIDw8RU9GICYmCitNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byBvdGhlci1icmFuY2gKKworU2lnbmVkLW9mZi1ieTogJChnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfCBzZWQgLWUgInMvPi4qLz4vIikKK0VPRgorCisJIyBFeHBlY3RlZCBjb21taXQgbWVzc2FnZSBhZnRlciBtZXJnZSB3aXRob3V0IC0tc2lnbm9mZiAob3Igd2l0aCAtLW5vLXNpZ25vZmYpCisJY2F0ID5leHBlY3RlZC11bnNpZ25lZCA8PEVPRiAmJgorTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gb3RoZXItYnJhbmNoCitFT0YKKworCSMgSW5pdGlhbCBjb21taXQgYW5kIGZlYXR1cmUgYnJhbmNoIHRvIG1lcmdlIG1hc3RlciBpbnRvIGl0LgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiSW5pdGlhbCBlbXB0eSBjb21taXQiICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IG90aGVyLWJyYW5jaCBmaWxlMSAxCit9CisKKyMgU2V0dXAgcmVwb3NpdG9yeSwgZmlsZXMgJiBmZWF0dXJlIGJyYW5jaAorIyBUaGlzIHN0ZXAgbXVzdCBiZSBydW4gaWYgWW91IHdhbnQgdG8gdGVzdCAyLDMgb3IgNAorIyBPcmRlciBvZiAyLDMsNCBpcyBub3QgaW1wb3J0YW50LCBidXQgMSBtdXN0IGJlIHJ1biBiZWZvcmUKKyMgRm9yIGV4YW1wbGUgYC1yIDEsNGAgb3IgYC1yIDEsNCwyIC12YCBldGMKKyMgQnV0IG5vdCBgLXIgMmAgb3IgYC1yIDQsMywyLDFgCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3Rfc2V0dXAKKycKKworIyBUZXN0IHdpdGggLS1zaWdub2ZmIGZsYWcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtZXJnZSAtLXNpZ25vZmYgYWRkcyBhIHNpZ24tb2ZmIGxpbmUnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgbWFzdGVyLWJyYW5jaC0yIGZpbGUyIDIgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXItYnJhbmNoICYmCisJZ2l0IG1lcmdlIG1hc3RlciAtLXNpZ25vZmYgLS1uby1lZGl0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXNpZ25lZCBhY3R1YWwKKycKKworIyBUZXN0IHdpdGhvdXQgLS1zaWdub2ZmIGZsYWcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtZXJnZSBkb2VzIG5vdCBhZGQgYSBzaWduLW9mZiBsaW5lJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci1icmFuY2gtMyBmaWxlMyAzICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyLWJyYW5jaCAmJgorCWdpdCBtZXJnZSBtYXN0ZXIgLS1uby1lZGl0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXVuc2lnbmVkIGFjdHVhbAorJworCisjIFRlc3QgZm9yIC0tbm8tc2lnbm9mZiBmbGFnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbWVyZ2UgLS1uby1zaWdub2ZmIGZsYWcgY2FuY2VscyAtLXNpZ25vZmYgZmxhZycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItYnJhbmNoLTQgZmlsZTQgNCAmJgorCWdpdCBjaGVja291dCBvdGhlci1icmFuY2ggJiYKKwlnaXQgbWVyZ2UgbWFzdGVyIC0tbm8tZWRpdCAtLXNpZ25vZmYgLS1uby1zaWdub2ZmICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXVuc2lnbmVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc3MDAtcmVwYWNrLnNoIGIvdC90NzcwMC1yZXBhY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjViMjM1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc3MDAtcmVwYWNrLnNoCkBAIC0wLDAgKzEsMjMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlcGFjayB3b3JrcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXRfYW5kX3BhY2sgKCkgeworCXRlc3RfY29tbWl0ICIkQCIgMT4mMiAmJgorCWluY3JwYWNraWQ9JChnaXQgcGFjay1vYmplY3RzIC0tYWxsIC0tdW5wYWNrZWQgLS1pbmNyZW1lbnRhbCAuZ2l0L29iamVjdHMvcGFjay9wYWNrIDwvZGV2L251bGwpICYmCisJZWNobyBwYWNrLSR7aW5jcnBhY2tpZH0ucGFjaworfQorCit0ZXN0X25vX21pc3NpbmdfaW5fcGFja3MgKCkgeworCW15aWR4PSQobHMgLTEgLmdpdC9vYmplY3RzL3BhY2svKi5pZHgpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRteWlkeCIgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgYWx0X29iamVjdHMvcGFjay8qLmlkeCA+b3JpZy5yYXcgJiYKKwlzZWQgLW4gLWUgInMvXlwoJE9JRF9SRUdFWFwpLiovXDEvcCIgb3JpZy5yYXcgfCBzb3J0ID5vcmlnICYmCisJZ2l0IHZlcmlmeS1wYWNrIC12ICRteWlkeCA+ZGVzdC5yYXcgJiYKKwljdXQgLWQiICIgLWYxIGRlc3QucmF3IHwgc29ydCA+ZGVzdCAmJgorCWNvbW0gLTIzIG9yaWcgZGVzdCA+bWlzc2luZyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtaXNzaW5nCit9CisKKyMgd2UgZXhwZWN0ICRwYWNraWQgYW5kICRvaWQgdG8gYmUgZGVmaW5lZAordGVzdF9oYXNfZHVwbGljYXRlX29iamVjdCAoKSB7CisJd2FudF9kdXBsaWNhdGVfb2JqZWN0PSIkMSIKKwlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PWZhbHNlCisJZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5pZHgKKwlkbworCQlpZHg9JChiYXNlbmFtZSAkcCkKKwkJdGVzdCAicGFjay0kcGFja2lkLmlkeCIgPSAiJGlkeCIgJiYgY29udGludWUKKwkJZ2l0IHZlcmlmeS1wYWNrIC12ICRwID5wYWNrbGlzdCB8fCByZXR1cm4gJD8KKwkJaWYgZ3JlcCAiXiRvaWQiIHBhY2tsaXN0CisJCXRoZW4KKwkJCWZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9dHJ1ZQorCQkJZWNobyAiRFVQTElDQVRFIE9CSkVDVCBGT1VORCIKKwkJCWJyZWFrCisJCWZpCisJZG9uZSAmJgorCXRlc3QgIiR3YW50X2R1cGxpY2F0ZV9vYmplY3QiID0gIiRmb3VuZF9kdXBsaWNhdGVfb2JqZWN0IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvYmplY3RzIGluIHBhY2tzIG1hcmtlZCAua2VlcCBhcmUgbm90IHJlcGFja2VkJyAnCisJZWNobyBjb250ZW50MSA+ZmlsZTEgJiYKKwllY2hvIGNvbnRlbnQyID5maWxlMiAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbF9jb21taXQgJiYKKwkjIENyZWF0ZSB0d28gcGFja3MKKwkjIFRoZSBmaXJzdCBwYWNrIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIG9iamVjdHMgZXhjZXB0IG9uZQorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1hbGwgPm9ianMgJiYKKwlncmVwIC12IGZpbGUyIG9ianMgfCBnaXQgcGFjay1vYmplY3RzIHBhY2sgJiYKKwkjIFRoZSBzZWNvbmQgcGFjayB3aWxsIGNvbnRhaW4gdGhlIGV4Y2x1ZGVkIG9iamVjdAorCXBhY2tpZD0kKGdyZXAgZmlsZTIgb2JqcyB8IGdpdCBwYWNrLW9iamVjdHMgcGFjaykgJiYKKwk+cGFjay0kcGFja2lkLmtlZXAgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgcGFjay0kcGFja2lkLmlkeCA+cGFja2xpc3QgJiYKKwlvaWQ9JChoZWFkIC1uIDEgcGFja2xpc3QgfCBzZWQgLWUgInMvXlwoJE9JRF9SRUdFWFwpLiovXDEvIikgJiYKKwltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCisJZ2l0IHJlcGFjayAtQSAtZCAtbCAmJgorCWdpdCBwcnVuZS1wYWNrZWQgJiYKKwl0ZXN0X2hhc19kdXBsaWNhdGVfb2JqZWN0IGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgYml0bWFwcyB2aWEgY29tbWFuZC1saW5lIGNhbiBkdXBsaWNhdGUgLmtlZXAgb2JqZWN0cycgJworCSMgYnVpbGQgb24gJG9pZCwgJHBhY2tpZCwgYW5kIC5rZWVwIHN0YXRlIGZyb20gcHJldmlvdXMKKwlnaXQgcmVwYWNrIC1BZGJsICYmCisJdGVzdF9oYXNfZHVwbGljYXRlX29iamVjdCB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgYml0bWFwcyB2aWEgY29uZmlnIGNhbiBkdXBsaWNhdGUgLmtlZXAgb2JqZWN0cycgJworCSMgYnVpbGQgb24gJG9pZCwgJHBhY2tpZCwgYW5kIC5rZWVwIHN0YXRlIGZyb20gcHJldmlvdXMKKwlnaXQgLWMgcmVwYWNrLndyaXRlYml0bWFwcz10cnVlIHJlcGFjayAtQWRsICYmCisJdGVzdF9oYXNfZHVwbGljYXRlX29iamVjdCB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb3NlIG9iamVjdHMgaW4gYWx0ZXJuYXRlIE9EQiBhcmUgbm90IHJlcGFja2VkJyAnCisJbWtkaXIgYWx0X29iamVjdHMgJiYKKwllY2hvICQocHdkKS9hbHRfb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWVjaG8gY29udGVudDMgPmZpbGUzICYmCisJb2lkPSQoR0lUX09CSkVDVF9ESVJFQ1RPUlk9YWx0X29iamVjdHMgZ2l0IGhhc2gtb2JqZWN0IC13IGZpbGUzKSAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGNvbW1pdF9maWxlMyAmJgorCWdpdCByZXBhY2sgLWEgLWQgLWwgJiYKKwlnaXQgcHJ1bmUtcGFja2VkICYmCisJdGVzdF9oYXNfZHVwbGljYXRlX29iamVjdCBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgb2JzIGluIGFsdCBPREIgYXJlIHJlcGFja2VkIGV2ZW4gd2hlbiBsb2NhbCByZXBvIGlzIHBhY2tsZXNzJyAnCisJbWtkaXIgYWx0X29iamVjdHMvcGFjayAmJgorCW12IC5naXQvb2JqZWN0cy9wYWNrLyogYWx0X29iamVjdHMvcGFjayAmJgorCWdpdCByZXBhY2sgLWEgJiYKKwl0ZXN0X25vX21pc3NpbmdfaW5fcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja2VkIG9icyBpbiBhbHQgT0RCIGFyZSByZXBhY2tlZCB3aGVuIGxvY2FsIHJlcG8gaGFzIHBhY2tzJyAnCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorCWVjaG8gbmV3X2NvbnRlbnQgPj5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG1vcmVfY29udGVudCAmJgorCWdpdCByZXBhY2sgJiYKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJdGVzdF9ub19taXNzaW5nX2luX3BhY2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tlZCBvYnMgaW4gYWx0ZXJuYXRlIE9EQiBrZXB0IHBhY2sgYXJlIHJlcGFja2VkJyAnCisJIyBzd2FwIHRoZSAua2VlcCBzbyB0aGUgY29tbWl0IG9iamVjdCBpcyBpbiB0aGUgcGFjayB3aXRoIC5rZWVwCisJZm9yIHAgaW4gYWx0X29iamVjdHMvcGFjay8qLnBhY2sKKwlkbworCQliYXNlX25hbWU9JChiYXNlbmFtZSAkcCAucGFjaykgJiYKKwkJaWYgdGVzdF9wYXRoX2lzX2ZpbGUgYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKKwkJdGhlbgorCQkJcm0gYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKKwkJZWxzZQorCQkJdG91Y2ggYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKKwkJZmkKKwlkb25lICYmCisJZ2l0IHJlcGFjayAtYSAtZCAmJgorCXRlc3Rfbm9fbWlzc2luZ19pbl9wYWNrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgdW5yZWFjaGFibGUgb2JzIGluIGFsdGVybmF0ZSBPREIgYXJlIG5vdCBsb29zZW5lZCcgJworCXJtIC1mIGFsdF9vYmplY3RzL3BhY2svKi5rZWVwICYmCisJbXYgLmdpdC9vYmplY3RzL3BhY2svKiBhbHRfb2JqZWN0cy9wYWNrLyAmJgorCWNvaWQ9JChnaXQgcmV2LXBhcnNlIEhFQURee2NvbW1pdH0pICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPSR0ZXN0X3RpY2sgLS1leHBpcmUtdW5yZWFjaGFibGU9JHRlc3RfdGljayAtLWFsbCAmJgorCSMgVGhlIHBhY2stb2JqZWN0cyBjYWxsIG9uIHRoZSBuZXh0IGxpbmUgaXMgZXF1aXZhbGVudCB0bworCSMgZ2l0IHJlcGFjayAtQSAtZCB3aXRob3V0IHRoZSBjYWxsIHRvIHBydW5lLXBhY2tlZAorCWdpdCBwYWNrLW9iamVjdHMgLS1ob25vci1wYWNrLWtlZXAgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgXAorCSAgICAtLXVucGFjay11bnJlYWNoYWJsZSA8L2Rldi9udWxsIHBhY2sgJiYKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCWdpdCB2ZXJpZnktcGFjayAtdiAtLSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCA+cGFja2xpc3QgJiYKKwkhIGdyZXAgIl4kY29pZCAiIHBhY2tsaXN0ICYmCisJZWNobyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93ICRjb2lkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIHBhY2tlZCB1bnJlYWNoYWJsZSBvYnMgdGhhdCBleGlzdCBpbiBhbHRlcm5hdGUgT0RCIGFyZSBub3QgbG9vc2VuZWQnICcKKwllY2hvICQocHdkKS9hbHRfb2JqZWN0cyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWVjaG8gIiRjb2lkIiB8IGdpdCBwYWNrLW9iamVjdHMgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgcGFjayAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKwltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCisJIyBUaGUgcGFjay1vYmplY3RzIGNhbGwgb24gdGhlIG5leHQgbGluZSBpcyBlcXVpdmFsZW50IHRvCisJIyBnaXQgcmVwYWNrIC1BIC1kIHdpdGhvdXQgdGhlIGNhbGwgdG8gcHJ1bmUtcGFja2VkCisJZ2l0IHBhY2stb2JqZWN0cyAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyBcCisJICAgIC0tdW5wYWNrLXVucmVhY2hhYmxlIDwvZGV2L251bGwgcGFjayAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKwltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCisJZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4ID5wYWNrbGlzdCAmJgorCSEgZ3JlcCAiXiRjb2lkICIgJiYKKwllY2hvID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgJGNvaWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2JqZWN0cyBtYWRlIHVucmVhY2hhYmxlIGJ5IGdyYWZ0cyBvbmx5IGFyZSBrZXB0JyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJjb21taXQgNCIgJiYKKwlIMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlIMT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJSDI9JChnaXQgcmV2LXBhcnNlIEhFQUReXikgJiYKKwllY2hvICIkSDAgJEgyIiA+LmdpdC9pbmZvL2dyYWZ0cyAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPSR0ZXN0X3RpY2sgLS1leHBpcmUtdW5yZWFjaGFibGU9JHRlc3RfdGljayAtLWFsbCAmJgorCWdpdCByZXBhY2sgLWEgLWQgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJEgxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayAtLWtlZXAtcGFjaycgJworCXRlc3RfY3JlYXRlX3JlcG8ga2VlcC1wYWNrICYmCisJKAorCQljZCBrZWVwLXBhY2sgJiYKKwkJUDE9JChjb21taXRfYW5kX3BhY2sgMSkgJiYKKwkJUDI9JChjb21taXRfYW5kX3BhY2sgMikgJiYKKwkJUDM9JChjb21taXRfYW5kX3BhY2sgMykgJiYKKwkJUDQ9JChjb21taXRfYW5kX3BhY2sgNCkgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrID5vbGQtY291bnRzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgb2xkLWNvdW50cyAmJgorCQlnaXQgcmVwYWNrIC1hIC1kIC0ta2VlcC1wYWNrICRQMSAtLWtlZXAtcGFjayAkUDQgJiYKKwkJbHMgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrID5uZXctY291bnRzICYmCisJCWdyZXAgLXEgJFAxIG5ldy1jb3VudHMgJiYKKwkJZ3JlcCAtcSAkUDQgbmV3LWNvdW50cyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIG5ldy1jb3VudHMgJiYKKwkJZ2l0IGZzY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpdG1hcHMgYXJlIGNyZWF0ZWQgYnkgZGVmYXVsdCBpbiBiYXJlIHJlcG9zJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAuZ2l0IGJhcmUuZ2l0ICYmCisJZ2l0IC1DIGJhcmUuZ2l0IHJlcGFjayAtYWQgJiYKKwliaXRtYXA9JChscyBiYXJlLmdpdC9vYmplY3RzL3BhY2svKi5iaXRtYXApICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRiaXRtYXAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY3JlbWVudGFsIHJlcGFjayBkb2VzIG5vdCBjb21wbGFpbicgJworCWdpdCAtQyBiYXJlLmdpdCByZXBhY2sgLXEgMj5yZXBhY2suZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHJlcGFjay5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYml0bWFwcyBjYW4gYmUgZGlzYWJsZWQgb24gYmFyZSByZXBvcycgJworCWdpdCAtYyByZXBhY2sud3JpdGVCaXRtYXBzPWZhbHNlIC1DIGJhcmUuZ2l0IHJlcGFjayAtYWQgJiYKKwliaXRtYXA9JChscyBiYXJlLmdpdC9vYmplY3RzL3BhY2svKi5iaXRtYXAgfHwgOikgJiYKKwl0ZXN0IC16ICIkYml0bWFwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBiaXRtYXBzIGNyZWF0ZWQgaWYgLmtlZXAgZmlsZXMgcHJlc2VudCcgJworCXBhY2s9JChscyBiYXJlLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkcGFjayIgJiYKKwlrZWVwPSR7cGFjayUucGFja30ua2VlcCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCJcJGtlZXBcIiIgJiYKKwk+IiRrZWVwIiAmJgorCWdpdCAtQyBiYXJlLmdpdCByZXBhY2sgLWFkIDI+c3RkZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZGVyciAmJgorCWZpbmQgYmFyZS5naXQvb2JqZWN0cy9wYWNrLyAtdHlwZSBmIC1uYW1lICIqLmJpdG1hcCIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0by1iaXRtYXBzIGRvIG5vdCBjb21wbGFpbiBpZiB1bmF2YWlsYWJsZScgJworCXRlc3RfY29uZmlnIC1DIGJhcmUuZ2l0IHBhY2sucGFja1NpemVMaW1pdCAxTSAmJgorCWJsb2I9JCh0ZXN0LXRvb2wgZ2VucmFuZG9tIGJpZyAkKCgxMDI0KjEwMjQpKSB8CisJICAgICAgIGdpdCAtQyBiYXJlLmdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWdpdCAtQyBiYXJlLmdpdCB1cGRhdGUtcmVmIHJlZnMvdGFncy9iaWcgJGJsb2IgJiYKKwlnaXQgLUMgYmFyZS5naXQgcmVwYWNrIC1hZCAyPnN0ZGVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBzdGRlcnIgJiYKKwlmaW5kIGJhcmUuZ2l0L29iamVjdHMvcGFjayAtdHlwZSBmIC1uYW1lICIqLmJpdG1hcCIgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NzAxLXJlcGFjay11bnBhY2stdW5yZWFjaGFibGUuc2ggYi90L3Q3NzAxLXJlcGFjay11bnBhY2stdW5yZWFjaGFibGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDgyNjFiYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaApAQCAtMCwwICsxLDE1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXBhY2sgd29ya3MgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKworZnNoYTE9Citjc2hhMT0KK3RzaGExPQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctQSB3aXRoIC1kIG9wdGlvbiBsZWF2ZXMgdW5yZWFjaGFibGUgb2JqZWN0cyB1bnBhY2tlZCcgJworCWVjaG8gY29udGVudCA+IGZpbGUxICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsX2NvbW1pdCAmJgorCSMgY3JlYXRlIGEgdHJhbnNpZW50IGJyYW5jaCB3aXRoIHVuaXF1ZSBjb250ZW50CisJZ2l0IGNoZWNrb3V0IC1iIHRyYW5zaWVudF9icmFuY2ggJiYKKwllY2hvIG1vcmUgY29udGVudCA+PiBmaWxlMSAmJgorCSMgcmVjb3JkIHRoZSBvYmplY3RzIGNyZWF0ZWQgaW4gdGhlIGRhdGFiYXNlIGZvciBmaWxlLCBjb21taXQsIHRyZWUKKwlmc2hhMT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG1vcmVfY29udGVudCAmJgorCWNzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEXntjb21taXR9KSAmJgorCXRzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBldmVuIG1vcmUgY29udGVudCA+PiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gZXZlbl9tb3JlX2NvbnRlbnQgJiYKKwkjIGRlbGV0ZSB0aGUgdHJhbnNpZW50IGJyYW5jaAorCWdpdCBicmFuY2ggLUQgdHJhbnNpZW50X2JyYW5jaCAmJgorCSMgcGFjayB0aGUgcmVwbworCWdpdCByZXBhY2sgLUEgLWQgLWwgJiYKKwkjIHZlcmlmeSBvYmplY3RzIGFyZSBwYWNrZWQgaW4gcmVwb3NpdG9yeQorCXRlc3QgMyA9ICQoZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4IHwKKwkJICAgZWdyZXAgIl4oJGZzaGExfCRjc2hhMXwkdHNoYTEpICIgfAorCQkgICBzb3J0IHwgdW5pcSB8IHdjIC1sKSAmJgorCWdpdCBzaG93ICRmc2hhMSAmJgorCWdpdCBzaG93ICRjc2hhMSAmJgorCWdpdCBzaG93ICR0c2hhMSAmJgorCSMgbm93IGV4cGlyZSB0aGUgcmVmbG9nLCB3aGlsZSBrZWVwaW5nIHJlYWNoYWJsZSBvbmVzIGJ1dCBleHBpcmluZworCSMgdW5yZWFjaGFibGVzIGltbWVkaWF0ZWx5CisJdGVzdF90aWNrICYmCisJc29tZXRpbWVhZ289JCgoICR0ZXN0X3RpY2sgLSAxMDAwMCApKSAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPSRzb21ldGltZWFnbyAtLWV4cGlyZS11bnJlYWNoYWJsZT0kdGVzdF90aWNrIC0tYWxsICYmCisJIyBhbmQgcmVwYWNrCisJZ2l0IHJlcGFjayAtQSAtZCAtbCAmJgorCSMgdmVyaWZ5IG9iamVjdHMgYXJlIHJldGFpbmVkIHVucGFja2VkCisJdGVzdCAwID0gJChnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggfAorCQkgICBlZ3JlcCAiXigkZnNoYTF8JGNzaGExfCR0c2hhMSkgIiB8CisJCSAgIHNvcnQgfCB1bmlxIHwgd2MgLWwpICYmCisJZ2l0IHNob3cgJGZzaGExICYmCisJZ2l0IHNob3cgJGNzaGExICYmCisJZ2l0IHNob3cgJHRzaGExCisnCisKK2NvbXBhcmVfbXRpbWVzICgpCit7CisJcmVhZCB0cmVmICYmCisJd2hpbGUgcmVhZCB0OyBkbworCQl0ZXN0ICIkdHJlZiIgPSAiJHQiIHx8IHJldHVybiAxCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctQSB3aXRob3V0IC1kIG9wdGlvbiBsZWF2ZXMgdW5yZWFjaGFibGUgb2JqZWN0cyBwYWNrZWQnICcKKwlmc2hhMXBhdGg9JChlY2hvICIkZnNoYTEiIHwgc2VkIC1lICJzfFwoLi5cKXxcMS98IikgJiYKKwlmc2hhMXBhdGg9Ii5naXQvb2JqZWN0cy8kZnNoYTFwYXRoIiAmJgorCWNzaGExcGF0aD0kKGVjaG8gIiRjc2hhMSIgfCBzZWQgLWUgInN8XCguLlwpfFwxL3wiKSAmJgorCWNzaGExcGF0aD0iLmdpdC9vYmplY3RzLyRjc2hhMXBhdGgiICYmCisJdHNoYTFwYXRoPSQoZWNobyAiJHRzaGExIiB8IHNlZCAtZSAic3xcKC4uXCl8XDEvfCIpICYmCisJdHNoYTFwYXRoPSIuZ2l0L29iamVjdHMvJHRzaGExcGF0aCIgJiYKKwlnaXQgYnJhbmNoIHRyYW5zaWVudF9icmFuY2ggJGNzaGExICYmCisJZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgorCXRlc3QgISAtZiAiJGZzaGExcGF0aCIgJiYKKwl0ZXN0ICEgLWYgIiRjc2hhMXBhdGgiICYmCisJdGVzdCAhIC1mICIkdHNoYTFwYXRoIiAmJgorCXRlc3QgMSA9ICQobHMgLTEgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2sgfCB3YyAtbCkgJiYKKwlwYWNrZmlsZT0kKGxzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrKSAmJgorCWdpdCBicmFuY2ggLUQgdHJhbnNpZW50X2JyYW5jaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXBhY2sgLUEgLWwgJiYKKwl0ZXN0ICEgLWYgIiRmc2hhMXBhdGgiICYmCisJdGVzdCAhIC1mICIkY3NoYTFwYXRoIiAmJgorCXRlc3QgISAtZiAiJHRzaGExcGF0aCIgJiYKKwlnaXQgc2hvdyAkZnNoYTEgJiYKKwlnaXQgc2hvdyAkY3NoYTEgJiYKKwlnaXQgc2hvdyAkdHNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNrZWQgb2JqZWN0cyByZWNlaXZlIHRpbWVzdGFtcCBvZiBwYWNrIGZpbGUnICcKKwl0bXBwYWNrPSIuZ2l0L29iamVjdHMvcGFjay90bXBfcGFjayIgJiYKKwlsbiAiJHBhY2tmaWxlIiAiJHRtcHBhY2siICYmCisJZ2l0IHJlcGFjayAtQSAtbCAtZCAmJgorCXRlc3QtdG9vbCBjaG10aW1lIC0tZ2V0ICIkdG1wcGFjayIgIiRmc2hhMXBhdGgiICIkY3NoYTFwYXRoIiAiJHRzaGExcGF0aCIgXAorCQk+IG10aW1lcyAmJgorCWNvbXBhcmVfbXRpbWVzIDwgbXRpbWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBib3RoZXIgbG9vc2VuaW5nIG9sZCBvYmplY3RzJyAnCisJb2JqMT0kKGVjaG8gb25lIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2JqMj0kKGVjaG8gdHdvIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJcGFjazE9JChlY2hvICRvYmoxIHwgZ2l0IHBhY2stb2JqZWN0cyAuZ2l0L29iamVjdHMvcGFjay9wYWNrKSAmJgorCXBhY2syPSQoZWNobyAkb2JqMiB8IGdpdCBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjaykgJiYKKwlnaXQgcHJ1bmUtcGFja2VkICYmCisJZ2l0IGNhdC1maWxlIC1wICRvYmoxICYmCisJZ2l0IGNhdC1maWxlIC1wICRvYmoyICYmCisJdGVzdC10b29sIGNobXRpbWUgPS04NjQwMCAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSRwYWNrMi5wYWNrICYmCisJZ2l0IHJlcGFjayAtQSAtZCAtLXVucGFjay11bnJlYWNoYWJsZT0xLmhvdXIuYWdvICYmCisJZ2l0IGNhdC1maWxlIC1wICRvYmoxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC1wICRvYmoyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tlZXAgcGFja2VkIG9iamVjdHMgZm91bmQgb25seSBpbiBpbmRleCcgJworCWVjaG8gbXktdW5pcXVlLWNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJtYWtlIGl0IHJlYWNoYWJsZSIgJiYKKwlnaXQgZ2MgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgLS1hbGwgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0LXRvb2wgY2htdGltZSA9LTg2NDAwIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKwlnaXQgZ2MgLS1wcnVuZT0xLmhvdXIuYWdvICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOmZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIC1rIGtlZXBzIHVucmVhY2hhYmxlIHBhY2tlZCBvYmplY3RzJyAnCisJIyBjcmVhdGUgcGFja2VkLWJ1dC11bnJlYWNoYWJsZSBvYmplY3QKKwlzaGExPSQoZWNobyB1bnJlYWNoYWJsZS1wYWNrZWQgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlwYWNrPSQoZWNobyAkc2hhMSB8IGdpdCBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjaykgJiYKKwlnaXQgcHJ1bmUtcGFja2VkICYmCisKKwkjIC1rIHNob3VsZCBrZWVwIGl0CisJZ2l0IHJlcGFjayAtYWRrICYmCisJZ2l0IGNhdC1maWxlIC1wICRzaGExICYmCisKKwkjIGFuZCBkb3VibGUgY2hlY2sgdGhhdCB3aXRob3V0IC1rIGl0IHdvdWxkIGhhdmUgYmVlbiByZW1vdmVkCisJZ2l0IHJlcGFjayAtYWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLXAgJHNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrIC1rIHBhY2tzIHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHMnICcKKwkjIGNyZWF0ZSBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3QKKwlzaGExPSQoZWNobyB3b3VsZC1iZS1kZWxldGVkLWxvb3NlIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2JqcGF0aD0uZ2l0L29iamVjdHMvJChlY2hvICRzaGExIHwgc2VkICJzLC4uLCYvLCIpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJG9ianBhdGggJiYKKworCSMgYW5kIGNvbmZpcm0gdGhhdCB0aGUgbG9vc2Ugb2JqZWN0IGdvZXMgYXdheSwgYnV0IHdlIGNhbgorCSMgc3RpbGwgYWNjZXNzIGl0IChlcmdvLCBpdCBpcyBwYWNrZWQpCisJZ2l0IHJlcGFjayAtYWRrICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJG9ianBhdGggJiYKKwlnaXQgY2F0LWZpbGUgLXAgJHNoYTEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NzAyLXJlcGFjay1jeWNsaWMtYWx0ZXJuYXRlLnNoIGIvdC90NzcwMi1yZXBhY2stY3ljbGljLWFsdGVybmF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45M2I3NDg2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzcwMi1yZXBhY2stY3ljbGljLWFsdGVybmF0ZS5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEVwaHJpbSBLaG9uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXBhY2sgaW52b2x2aW5nIGN5Y2xpYyBhbHRlcm5hdGUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdC8vLi4vLmdpdC9vYmplY3RzICYmCisJZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisJdG91Y2ggYSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gMSAmJgorCWdpdCByZXBhY2sgLWFkbCAmJgorCWVjaG8gIiQocHdkKSIvLmdpdC9vYmplY3RzLy4uL29iamVjdHMgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtcGFja2luZyByZXBvc2l0b3J5IHdpdGggaXRzc2VsZiBhcyBhbHRlcm5hdGUnICcKKwlnaXQgcmVwYWNrIC1hZGwgJiYKKwlnaXQgZnNjaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc4MDAtZGlmZnRvb2wuc2ggYi90L3Q3ODAwLWRpZmZ0b29sLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5YjkyOTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3ODAwLWRpZmZ0b29sLnNoCkBAIC0wLDAgKzEsNzQxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIERhdmlkIEFndWlsYXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWRpZmZ0b29sCisKK1Rlc3RpbmcgYmFzaWMgZGlmZiB0b29sIGludm9jYXRpb24KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2RpZmZ0b29sX3Rlc3Rfc2V0dXAgKCkKK3sKKwl0ZXN0X2NvbmZpZyBkaWZmLnRvb2wgdGVzdC10b29sICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wudGVzdC10b29sLmNtZCAnY2F0ICIkTE9DQUwiJyAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLmJvZ3VzLXRvb2wuY21kIGZhbHNlCit9CisKK3Byb21wdF9naXZlbiAoKQoreworCXByb21wdD0iJDEiCisJdGVzdCAiJHByb21wdCIgPSAiTGF1bmNoICd0ZXN0LXRvb2wnIFtZL25dPyBicmFuY2giCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHVzYWdlIHJlcXVpcmVzIG5vIHJlcG8nICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgZGlmZnRvb2wgLWggPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgXnVzYWdlOiBvdXRwdXQgJiYKKwkjIGNyZWF0ZSBhIGNlaWxpbmcgZGlyZWN0b3J5IHRvIHByZXZlbnQgR2l0IGZyb20gZmluZGluZyBhIHJlcG8KKwlta2RpciAtcCBub3QvcmVwbyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtciBub3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBcCisJZW52IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkKHB3ZCkvbm90IiBcCisJZ2l0IC1DIG5vdC9yZXBvIGRpZmZ0b29sIC1oID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIF51c2FnZTogb3V0cHV0CisnCisKKyMgQ3JlYXRlIGEgZmlsZSBvbiBtYXN0ZXIgYW5kIGNoYW5nZSBpdCBvbiBicmFuY2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBtYXN0ZXIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBmaWxlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCBtYXN0ZXIgJiYKKwllY2hvIGJyYW5jaCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImJyYW5jaCBjaGFuZ2VkIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCisjIENvbmZpZ3VyZSBhIGN1c3RvbSBkaWZmdG9vbC48dG9vbD4uY21kIGFuZCB1c2UgaXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBjb21tYW5kcycgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50ZXN0LXRvb2wuY21kICJjYXQgXCJcJFJFTU9URVwiIiAmJgorCWVjaG8gbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50ZXN0LXRvb2wuY21kICJjYXQgXCJcJExPQ0FMXCIiICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIHRvb2wgY29tbWFuZHMgb3ZlcnJpZGUgYnVpbHQtaW5zJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wudmltZGlmZi5jbWQgImNhdCBcIlwkUkVNT1RFXCIiICYmCisJZWNobyBtYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLXRvb2wgdmltZGlmZiAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgaWdub3JlcyBiYWQgLS10b29sIHZhbHVlcycgJworCTogPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIFwKKwkJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tdG9vbD1iYWQtdG9vbCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgZm9yd2FyZHMgYXJndW1lbnRzIHRvIGRpZmYnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJPmZvci1kaWZmICYmCisJZ2l0IGFkZCBmb3ItZGlmZiAmJgorCWVjaG8gY2hhbmdlcz5mb3ItZGlmZiAmJgorCWdpdCBhZGQgZm9yLWRpZmYgJiYKKwk6ID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1jYWNoZWQgLS1uby1wcm9tcHQgLS0gZm9yLWRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmVzZXQgLS0gZm9yLWRpZmYgJiYKKwlybSBmb3ItZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBpZ25vcmVzIGV4aXQgY29kZScgJworCXRlc3RfY29uZmlnIGRpZmZ0b29sLmVycm9yLmNtZCBmYWxzZSAmJgorCWdpdCBkaWZmdG9vbCAteSAtdCBlcnJvciBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgZm9yd2FyZHMgZXhpdCBjb2RlIHdpdGggLS10cnVzdC1leGl0LWNvZGUnICcKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5lcnJvci5jbWQgZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLXkgLS10cnVzdC1leGl0LWNvZGUgLXQgZXJyb3IgYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIGZvcndhcmRzIGV4aXQgY29kZSB3aXRoIC0tdHJ1c3QtZXhpdC1jb2RlIGZvciBidWlsdC1pbnMnICcKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC52aW1kaWZmLnBhdGggZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLXkgLS10cnVzdC1leGl0LWNvZGUgLXQgdmltZGlmZiBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgaG9ub3JzIGRpZmZ0b29sLnRydXN0RXhpdENvZGUgPSB0cnVlJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wuZXJyb3IuY21kIGZhbHNlICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wudHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmZ0b29sIC15IC10IGVycm9yIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBob25vcnMgZGlmZnRvb2wudHJ1c3RFeGl0Q29kZSA9IGZhbHNlJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wuZXJyb3IuY21kIGZhbHNlICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wudHJ1c3RFeGl0Q29kZSBmYWxzZSAmJgorCWdpdCBkaWZmdG9vbCAteSAtdCBlcnJvciBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgaWdub3JlcyBleGl0IGNvZGUgd2l0aCAtLW5vLXRydXN0LWV4aXQtY29kZScgJworCXRlc3RfY29uZmlnIGRpZmZ0b29sLmVycm9yLmNtZCBmYWxzZSAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLnRydXN0RXhpdENvZGUgdHJ1ZSAmJgorCWdpdCBkaWZmdG9vbCAteSAtLW5vLXRydXN0LWV4aXQtY29kZSAtdCBlcnJvciBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgc3RvcHMgb24gZXJyb3Igd2l0aCAtLXRydXN0LWV4aXQtY29kZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZm9yLWRpZmYgLmdpdC9mYWlsLXJpZ2h0LWZpbGUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS0gZm9yLWRpZmYiICYmCisJd3JpdGVfc2NyaXB0IC5naXQvZmFpbC1yaWdodC1maWxlIDw8LVxFT0YgJiYKKwllY2hvIGZhaWxlZAorCWV4aXQgMQorCUVPRgorCT5mb3ItZGlmZiAmJgorCWdpdCBhZGQgZm9yLWRpZmYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLXkgLS10cnVzdC1leGl0LWNvZGUgXAorCQktLWV4dGNtZCAuZ2l0L2ZhaWwtcmlnaHQtZmlsZSBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIGhvbm9ycyBleGl0IHN0YXR1cyBpZiBjb21tYW5kIG5vdCBmb3VuZCcgJworCXRlc3RfY29uZmlnIGRpZmZ0b29sLm5vbmV4aXN0ZW50LmNtZCBpLWRvbnQtZXhpc3QgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50cnVzdEV4aXRDb2RlIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmZ0b29sIC15IC10IG5vbmV4aXN0ZW50IGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBob25vcnMgLS1ndWknICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgbWVyZ2UudG9vbCBib2d1cy10b29sICYmCisJdGVzdF9jb25maWcgZGlmZi50b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmd1aXRvb2wgdGVzdC10b29sICYmCisKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZ3VpIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtLWd1aSBsYXN0IHNldHRpbmcgd2lucycgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwk6ID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1ndWkgLS1uby1ndWkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIGRpZmYudG9vbCBib2d1cy10b29sICYmCisJdGVzdF9jb25maWcgZGlmZi5ndWl0b29sIHRlc3QtdG9vbCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1uby1ndWkgLS1ndWkgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZ3VpIHdvcmtzIHdpdGhvdXQgY29uZmlndXJlZCBkaWZmLmd1aXRvb2wnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLWd1aSBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBTcGVjaWZ5IHRoZSBkaWZmIHRvb2wgdXNpbmcgJEdJVF9ESUZGX1RPT0wKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESUZGX1RPT0wgdmFyaWFibGUnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYudG9vbCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlHSVRfRElGRl9UT09MPXRlc3QtdG9vbCBnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCB0aGUgJEdJVF8qX1RPT0wgdmFyaWFibGVzIGFuZCBlbnN1cmUKKyMgdGhhdCAkR0lUX0RJRkZfVE9PTCBhbHdheXMgd2lucyB1bmxlc3MgLS10b29sIGlzIHNwZWNpZmllZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0RJRkZfVE9PTCBvdmVycmlkZXMnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgZGlmZi50b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS50b29sIGJvZ3VzLXRvb2wgJiYKKworCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlHSVRfRElGRl9UT09MPXRlc3QtdG9vbCBnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X2NvbmZpZyBkaWZmLnRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCUdJVF9ESUZGX1RPT0w9Ym9ndXMtdG9vbCBcCisJCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLXRvb2w9dGVzdC10b29sIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRlc3QgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgLS1uby1wcm9tcHQgdG8gZGlmZnRvb2wKKyMgd2hlbiAkR0lUX0RJRkZUT09MX05PX1BST01QVCBpcyB0cnVlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElGRlRPT0xfTk9fUFJPTVBUIHZhcmlhYmxlJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlHSVRfRElGRlRPT0xfTk9fUFJPTVBUPXRydWUgZ2l0IGRpZmZ0b29sIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIGdpdC1kaWZmdG9vbCBzdXBwb3J0cyB0aGUgZGlmZnRvb2wucHJvbXB0IHZhcmlhYmxlLgorIyBUZXN0IHRoYXQgR0lUX0RJRkZUT09MX1BST01QVCBjYW4gb3ZlcnJpZGUgZGlmZnRvb2wucHJvbXB0ID0gZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESUZGVE9PTF9QUk9NUFQgdmFyaWFibGUnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wucHJvbXB0IGZhbHNlICYmCisJZWNobyA+aW5wdXQgJiYKKwlHSVRfRElGRlRPT0xfUFJPTVBUPXRydWUgZ2l0IGRpZmZ0b29sIGJyYW5jaCA8aW5wdXQgPm91dHB1dCAmJgorCXByb21wdD0kKHRhaWwgLTEgPG91dHB1dCkgJiYKKwlwcm9tcHRfZ2l2ZW4gIiRwcm9tcHQiCisnCisKKyMgVGVzdCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcGFzcyAtLW5vLXByb21wdCB3aGVuIGRpZmZ0b29sLnByb21wdCBpcyBmYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wucHJvbXB0IGNvbmZpZyB2YXJpYWJsZSBpcyBmYWxzZScgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5wcm9tcHQgZmFsc2UgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRlc3QgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgLS1uby1wcm9tcHQgd2hlbiBtZXJnZXRvb2wucHJvbXB0IGlzIGZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCBtZXJnZS5wcm9tcHQgPSBmYWxzZScgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmZ0b29sLnByb21wdCAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC5wcm9tcHQgZmFsc2UgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRlc3QgdGhhdCB0aGUgLXkgZmxhZyBjYW4gb3ZlcnJpZGUgZGlmZnRvb2wucHJvbXB0ID0gdHJ1ZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wucHJvbXB0IGNhbiBvdmVycmlkZGVuIHdpdGggLXknICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wucHJvbXB0IHRydWUgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC15IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRlc3QgdGhhdCB0aGUgLS1wcm9tcHQgZmxhZyBjYW4gb3ZlcnJpZGUgZGlmZnRvb2wucHJvbXB0ID0gZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sLnByb21wdCBjYW4gb3ZlcnJpZGRlbiB3aXRoIC0tcHJvbXB0JyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLnByb21wdCBmYWxzZSAmJgorCWVjaG8gPmlucHV0ICYmCisJZ2l0IGRpZmZ0b29sIC0tcHJvbXB0IGJyYW5jaCA8aW5wdXQgPm91dHB1dCAmJgorCXByb21wdD0kKHRhaWwgLTEgPG91dHB1dCkgJiYKKwlwcm9tcHRfZ2l2ZW4gIiRwcm9tcHQiCisnCisKKyMgVGVzdCB0aGF0IHRoZSBsYXN0IGZsYWcgcGFzc2VkIG9uIHRoZSBjb21tYW5kLWxpbmUgd2lucwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgbGFzdCBmbGFnIHdpbnMnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLXByb21wdCAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvID5pbnB1dCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLXByb21wdCBicmFuY2ggPGlucHV0ID5vdXRwdXQgJiYKKwlwcm9tcHQ9JCh0YWlsIC0xIDxvdXRwdXQpICYmCisJcHJvbXB0X2dpdmVuICIkcHJvbXB0IgorJworCisjIGdpdC1kaWZmdG9vbCBmYWxscyBiYWNrIHRvIGdpdC1tZXJnZXRvb2wgY29uZmlnIHZhcmlhYmxlcworIyBzbyB0ZXN0IHRoYXQgYmVoYXZpb3IgaGVyZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgKyBtZXJnZXRvb2wgY29uZmlnIHZhcmlhYmxlcycgJworCXRlc3RfY29uZmlnIG1lcmdlLnRvb2wgdGVzdC10b29sICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLnRlc3QtdG9vbC5jbWQgImNhdCBcJExPQ0FMIiAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGRpZmZ0b29sIC0tZ3VpIC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBzZXQgbWVyZ2UudG9vbCB0byBzb21ldGhpbmcgYm9ndXMsIGRpZmYudG9vbCB0byB0ZXN0LXRvb2wKKwl0ZXN0X2NvbmZpZyBtZXJnZS50b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLnRvb2wgdGVzdC10b29sICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBkaWZmdG9vbCAtLWd1aSAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgc2V0IG1lcmdlLnRvb2wsIGRpZmYudG9vbCB0byBzb21ldGhpbmcgYm9ndXMsIG1lcmdlLmd1aXRvb2wgdG8gdGVzdC10b29sCisJdGVzdF9jb25maWcgZGlmZi50b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5ndWl0b29sIHRlc3QtdG9vbCAmJgorCWdpdCBkaWZmdG9vbCAtLWd1aSAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgc2V0IG1lcmdlLnRvb2wsIGRpZmYudG9vbCwgbWVyZ2UuZ3VpdG9vbCB0byBzb21ldGhpbmcgYm9ndXMsIGRpZmYuZ3VpdG9vbCB0byB0ZXN0LXRvb2wKKwl0ZXN0X2NvbmZpZyBtZXJnZS5ndWl0b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmd1aXRvb2wgdGVzdC10b29sICYmCisJZ2l0IGRpZmZ0b29sIC0tZ3VpIC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbC48dG9vbD4ucGF0aCcgJworCXRlc3RfY29uZmlnIGRpZmZ0b29sLnRrZGlmZi5wYXRoIGVjaG8gJiYKKwlnaXQgZGlmZnRvb2wgLS10b29sPXRrZGlmZiAtLW5vLXByb21wdCBicmFuY2ggPm91dHB1dCAmJgorCWdyZXAgZmlsZSBvdXRwdXQgPmdyZXAtb3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBncmVwLW91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtLWV4dGNtZD1jYXQnICcKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZWNobyBtYXN0ZXIgPj5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQ9Y2F0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtLWV4dGNtZCBjYXQnICcKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZWNobyBtYXN0ZXIgPj5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQ9Y2F0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAteCBjYXQnICcKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZWNobyBtYXN0ZXIgPj5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLXggY2F0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtLWV4dGNtZCBlY2hvIGFyZzEnICcKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBcCisJCS0tZXh0Y21kIHNoXCAtY1wgXCJlY2hvXCBcJDFcIiBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgLS1leHRjbWQgY2F0IGFyZzEnICcKKwllY2hvIG1hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IFwKKwkJLS1leHRjbWQgc2hcIC1jXCBcImNhdFwgXCQxXCIgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZXh0Y21kIGNhdCBhcmcyJyAnCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBcCisJCS0tZXh0Y21kIHNoXCAtY1wgXCJjYXRcIFxcXCJcJDJcXFwiXCIgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgQ3JlYXRlIGEgc2Vjb25kIGZpbGUgb24gbWFzdGVyIGFuZCBhIGRpZmZlcmVudCB2ZXJzaW9uIG9uIGJyYW5jaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgd2l0aCAyIGZpbGVzIGRpZmZlcmVudCcgJworCWVjaG8gbTIgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIGZpbGUyIiAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaCAmJgorCWVjaG8gYnIyID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJicmFuY2ggY2hhbmdlZCBmaWxlMiIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NheSBubyB0byB0aGUgZmlyc3QgZmlsZScgJworCShlY2hvIG4gJiYgZWNobykgPmlucHV0ICYmCisJZ2l0IGRpZmZ0b29sIC14IGNhdCBicmFuY2ggPGlucHV0ID5vdXRwdXQgJiYKKwlncmVwIG0yIG91dHB1dCAmJgorCWdyZXAgYnIyIG91dHB1dCAmJgorCSEgZ3JlcCBtYXN0ZXIgb3V0cHV0ICYmCisJISBncmVwIGJyYW5jaCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2F5IG5vIHRvIHRoZSBzZWNvbmQgZmlsZScgJworCShlY2hvICYmIGVjaG8gbikgPmlucHV0ICYmCisJZ2l0IGRpZmZ0b29sIC14IGNhdCBicmFuY2ggPGlucHV0ID5vdXRwdXQgJiYKKwlncmVwIG1hc3RlciBvdXRwdXQgJiYKKwlncmVwIGJyYW5jaCBvdXRwdXQgJiYKKwkhIGdyZXAgbTIgb3V0cHV0ICYmCisJISBncmVwIGJyMiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5kaW5nIHByb21wdCBpbnB1dCB3aXRoIEVPRicgJworCWdpdCBkaWZmdG9vbCAteCBjYXQgYnJhbmNoIDwvZGV2L251bGwgPm91dHB1dCAmJgorCSEgZ3JlcCBtYXN0ZXIgb3V0cHV0ICYmCisJISBncmVwIGJyYW5jaCBvdXRwdXQgJiYKKwkhIGdyZXAgbTIgb3V0cHV0ICYmCisJISBncmVwIGJyMiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgLS10b29sLWhlbHAnICcKKwlnaXQgZGlmZnRvb2wgLS10b29sLWhlbHAgPm91dHB1dCAmJgorCWdyZXAgdG9vbCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY2hhbmdlIGluIHN1YmRpcmVjdG9yeScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlta2RpciBzdWIgJiYKKwllY2hvIG1hc3RlciA+c3ViL3N1YiAmJgorCWdpdCBhZGQgc3ViL3N1YiAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIHN1Yi9zdWIiICYmCisJZ2l0IHRhZyB2MSAmJgorCWVjaG8gdGVzdCA+PmZpbGUgJiYKKwllY2hvIHRlc3QgPj5zdWIvc3ViICYmCisJZ2l0IGFkZCBmaWxlIHN1Yi9zdWIgJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZmllZCBib3RoIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmdG9vbCAtZCB3aXRoIGdyb3dpbmcgcGF0aHMnICcKKwlhPWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgJiYKKwlnaXQgaW5pdCBncm93aW5nICYmCisJKAorCQljZCBncm93aW5nICYmCisJCWVjaG8gInRlc3QgLWYgXCJcJDIvYlwiIiB8IHdyaXRlX3NjcmlwdCAuZ2l0L3Rlc3QtZm9yLWIuc2ggJiYKKwkJb25lPSQocHJpbnRmIDEgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJdHdvPSQocHJpbnRmIDIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBcCisJCQktLWNhY2hlaW5mbyAxMDA2NDQsJG9uZSwkYSAtLWNhY2hlaW5mbyAxMDA2NDQsJHR3byxiICYmCisJCXRyZWUxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgXAorCQkJLS1jYWNoZWluZm8gMTAwNjQ0LCR0d28sJGEgLS1jYWNoZWluZm8gMTAwNjQ0LCRvbmUsYiAmJgorCQl0cmVlMj0kKGdpdCB3cml0ZS10cmVlKSAmJgorCQlnaXQgY2hlY2tvdXQgLS0gJGEgJiYKKwkJZ2l0IGRpZmZ0b29sIC1kIC0tZXh0Y21kIC5naXQvdGVzdC1mb3ItYi5zaCAkdHJlZTEgJHRyZWUyCisJKQorJworCitydW5fZGlyX2RpZmZfdGVzdCAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDEgLS1uby1zeW1saW5rcyIgIgorCQlzeW1saW5rcz0tLW5vLXN5bWxpbmtzICYmCisJCSQyCisJIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgIiQxIC0tc3ltbGlua3MiICIKKwkJc3ltbGlua3M9LS1zeW1saW5rcyAmJgorCQkkMgorCSIKK30KKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC1kJyAnCisJZ2l0IGRpZmZ0b29sIC1kICRzeW1saW5rcyAtLWV4dGNtZCBscyBicmFuY2ggPm91dHB1dCAmJgorCWdyZXAgc3ViIG91dHB1dCAmJgorCWdyZXAgZmlsZSBvdXRwdXQKKycKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYnICcKKwlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLS1leHRjbWQgbHMgYnJhbmNoID5vdXRwdXQgJiYKKwlncmVwIHN1YiBvdXRwdXQgJiYKKwlncmVwIGZpbGUgb3V0cHV0CisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIGlnbm9yZXMgLS1wcm9tcHQnICcKKwlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLS1wcm9tcHQgLS1leHRjbWQgbHMgYnJhbmNoID5vdXRwdXQgJiYKKwlncmVwIHN1YiBvdXRwdXQgJiYKKwlncmVwIGZpbGUgb3V0cHV0CisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIGJyYW5jaCBmcm9tIHN1YmRpcmVjdG9yeScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmICRzeW1saW5rcyAtLWV4dGNtZCBscyBicmFuY2ggPm91dHB1dCAmJgorCQkjICJzdWIiIG11c3Qgb25seSBleGlzdCBpbiAicmlnaHQiCisJCSMgImZpbGUiIGFuZCAiZmlsZTIiIG11c3QgYmUgbGlzdGVkIGluIGJvdGggImxlZnQiIGFuZCAicmlnaHQiCisJCWdyZXAgc3ViIG91dHB1dCA+c3ViLW91dHB1dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIHN1Yi1vdXRwdXQgJiYKKwkJZ3JlcCBmaWxlIiQiIG91dHB1dCA+ZmlsZS1vdXRwdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBmaWxlLW91dHB1dCAmJgorCQlncmVwIGZpbGUyIG91dHB1dCA+ZmlsZTItb3V0cHV0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZmlsZTItb3V0cHV0CisJKQorJworCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiB2MSBmcm9tIHN1YmRpcmVjdG9yeScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmICRzeW1saW5rcyAtLWV4dGNtZCBscyB2MSA+b3V0cHV0ICYmCisJCSMgInN1YiIgYW5kICJmaWxlIiBleGlzdCBpbiBib3RoIHYxIGFuZCBIRUFELgorCQkjICJmaWxlMiIgaXMgdW5jaGFuZ2VkLgorCQlncmVwIHN1YiBvdXRwdXQgPnN1Yi1vdXRwdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBzdWItb3V0cHV0ICYmCisJCWdyZXAgZmlsZSBvdXRwdXQgPmZpbGUtb3V0cHV0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZmlsZS1vdXRwdXQgJiYKKwkJISBncmVwIGZpbGUyIG91dHB1dAorCSkKKycKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgYnJhbmNoIGZyb20gc3ViZGlyZWN0b3J5IHcvIHBhdGhzcGVjJyAnCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgJHN5bWxpbmtzIC0tZXh0Y21kIGxzIGJyYW5jaCAtLSAuPm91dHB1dCAmJgorCQkjICJzdWIiIG9ubHkgZXhpc3RzIGluICJyaWdodCIKKwkJIyAiZmlsZSIgYW5kICJmaWxlMiIgbXVzdCBub3QgYmUgbGlzdGVkCisJCWdyZXAgc3ViIG91dHB1dCA+c3ViLW91dHB1dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIHN1Yi1vdXRwdXQgJiYKKwkJISBncmVwIGZpbGUgb3V0cHV0CisJKQorJworCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiB2MSBmcm9tIHN1YmRpcmVjdG9yeSB3LyBwYXRoc3BlYycgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmICRzeW1saW5rcyAtLWV4dGNtZCBscyB2MSAtLSAuPm91dHB1dCAmJgorCQkjICJzdWIiIGV4aXN0cyBpbiB2MSBhbmQgSEVBRAorCQkjICJmaWxlIiBpcyBmaWx0ZXJlZCBvdXQgYnkgdGhlIHBhdGhzcGVjCisJCWdyZXAgc3ViIG91dHB1dCA+c3ViLW91dHB1dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIHN1Yi1vdXRwdXQgJiYKKwkJISBncmVwIGZpbGUgb3V0cHV0CisJKQorJworCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIEdJVF9ESVIgc2V0JyAnCisJKAorCQlHSVRfRElSPSQocHdkKS8uZ2l0ICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCUdJVF9XT1JLX1RSRUU9JChwd2QpICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCWNkIHN1YiAmJgorCQlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLS1leHRjbWQgbHMgXAorCQkJYnJhbmNoIC0tIHN1YiA+b3V0cHV0ICYmCisJCWdyZXAgc3ViIG91dHB1dCAmJgorCQkhIGdyZXAgZmlsZSBvdXRwdXQKKwkpCisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIHdoZW4gd29ya3RyZWUgZmlsZSBpcyBtaXNzaW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJiYKKwlybSBmaWxlMiAmJgorCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmICRzeW1saW5rcyAtLWV4dGNtZCBscyBicmFuY2ggbWFzdGVyID5vdXRwdXQgJiYKKwlncmVwIGZpbGUyIG91dHB1dAorJworCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiB3aXRoIHVubWVyZ2VkIGZpbGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5lY2hvLmNtZCAiZWNobyBvayIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgY29uZmxpY3QtYSAmJgorCWdpdCBjaGVja291dCAtQiBjb25mbGljdC1iICYmCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0LWEgJiYKKwllY2hvIGEgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBjb25mbGljdC1hICYmCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0LWIgJiYKKwllY2hvIGIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBjb25mbGljdC1iICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSBjb25mbGljdC1hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0LWIgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJb2sKKwlFT0YKKwlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLXQgZWNobyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit3cml0ZV9zY3JpcHQgLmdpdC9DSEVDS19TWU1MSU5LUyA8PFxFT0YKK2ZvciBmIGluIGZpbGUgZmlsZTIgc3ViL3N1YgorZG8KKwllY2hvICIkZiIKKwlscyAtbGQgIiQyLyRmIiB8IHNlZCAtZSAncy8uKiAtPiAvLycKK2RvbmUgPmFjdHVhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgLS1zeW1saW5rcyB3aXRob3V0IHVuc3RhZ2VkIGNoYW5nZXMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmaWxlCisJJFBXRC9maWxlCisJZmlsZTIKKwkkUFdEL2ZpbGUyCisJc3ViL3N1YgorCSRQV0Qvc3ViL3N1YgorCUVPRgorCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIC0tc3ltbGlua3MgXAorCQktLWV4dGNtZCAiLi8uZ2l0L0NIRUNLX1NZTUxJTktTIiBicmFuY2ggSEVBRCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKword3JpdGVfc2NyaXB0IG1vZGlmeS1yaWdodC1maWxlIDw8XEVPRgorZWNobyAibmV3IGNvbnRlbnQiID4iJDIvZmlsZSIKK0VPRgorCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiBzeW5jcyB3b3JrdHJlZSB3aXRoIHVuc3RhZ2VkIGNoYW5nZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAib3JpZyBjb250ZW50IiA+ZmlsZSAmJgorCWdpdCBkaWZmdG9vbCAtZCAkc3ltbGlua3MgLS1leHRjbWQgIiRQV0QvbW9kaWZ5LXJpZ2h0LWZpbGUiIGJyYW5jaCAmJgorCWVjaG8gIm5ldyBjb250ZW50IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgc3luY3Mgd29ya3RyZWUgd2l0aG91dCB1bnN0YWdlZCBjaGFuZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBkaWZmdG9vbCAtZCAkc3ltbGlua3MgLS1leHRjbWQgIiRQV0QvbW9kaWZ5LXJpZ2h0LWZpbGUiIGJyYW5jaCAmJgorCWVjaG8gIm5ldyBjb250ZW50IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKword3JpdGVfc2NyaXB0IG1vZGlmeS1maWxlIDw8XEVPRgorZWNobyAibmV3IGNvbnRlbnQiID5maWxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnRvb2wgLS1uby1zeW1saW5rcyBkb2VzIG5vdCBvdmVyd3JpdGUgd29ya2luZyB0cmVlIGZpbGUgJyAnCisJZWNobyAib3JpZyBjb250ZW50IiA+ZmlsZSAmJgorCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIC0tbm8tc3ltbGlua3MgLS1leHRjbWQgIiRQV0QvbW9kaWZ5LWZpbGUiIGJyYW5jaCAmJgorCWVjaG8gIm5ldyBjb250ZW50IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKword3JpdGVfc2NyaXB0IG1vZGlmeS1ib3RoLWZpbGVzIDw8XEVPRgorZWNobyAid3QgY29udGVudCIgPmZpbGUgJiYKK2VjaG8gInRtcCBjb250ZW50IiA+IiQyL2ZpbGUiICYmCitlY2hvICIkMiIgPnRtcGRpcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tbm8tc3ltbGlua3MgZGV0ZWN0cyBjb25mbGljdCAnICcKKwkoCisJCVRNUERJUj0kVFJBU0hfRElSRUNUT1JZICYmCisJCWV4cG9ydCBUTVBESVIgJiYKKwkJZWNobyAib3JpZyBjb250ZW50IiA+ZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAtLW5vLXN5bWxpbmtzIC0tZXh0Y21kICIkUFdEL21vZGlmeS1ib3RoLWZpbGVzIiBicmFuY2ggJiYKKwkJZWNobyAid3QgY29udGVudCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCQllY2hvICJ0bXAgY29udGVudCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgIiQoY2F0IHRtcGRpcikvZmlsZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIHByb3Blcmx5IGhvbm9ycyBnaXRsaW5rIGFuZCBjb3JlLndvcmt0cmVlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yZiBzdWJtb2QvdWxlICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi8uIHN1Ym1vZC91bGUgJiYKKwl0ZXN0X2NvbmZpZyAtQyBzdWJtb2QvdWxlIGRpZmYudG9vbCBjaGVja3RyZWVzICYmCisJdGVzdF9jb25maWcgLUMgc3VibW9kL3VsZSBkaWZmdG9vbC5jaGVja3RyZWVzLmNtZCAnXCcnCisJCXRlc3QgLWQgIiRMT0NBTCIgJiYgdGVzdCAtZCAiJFJFTU9URSIgJiYgZWNobyBnb29kCisJCSdcJycgJiYKKwkoCisJCWNkIHN1Ym1vZC91bGUgJiYKKwkJZWNobyBnb29kID5leHBlY3QgJiYKKwkJZ2l0IGRpZmZ0b29sIC0tdG9vbD1jaGVja3RyZWVzIC0tZGlyLWRpZmYgSEVBRH4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXJtIC1mIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RpZmZ0b29sIC0tZGlyLWRpZmYgc3ltbGlua2VkIGRpcmVjdG9yaWVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgaW5pdCBkaXJsaW5rcyAmJgorCSgKKwkJY2QgZGlybGlua3MgJiYKKwkJZ2l0IGNvbmZpZyBkaWZmLnRvb2wgY2hlY2t0cmVlcyAmJgorCQlnaXQgY29uZmlnIGRpZmZ0b29sLmNoZWNrdHJlZXMuY21kICJlY2hvIGdvb2QiICYmCisJCW1rZGlyIGZvbyAmJgorCQk6ID5mb28vYmFyICYmCisJCWdpdCBhZGQgZm9vL2JhciAmJgorCQl0ZXN0X2NvbW1pdCBzeW1saW5rLW9uZSAmJgorCQlsbiAtcyBmb28gbGluayAmJgorCQlnaXQgYWRkIGxpbmsgJiYKKwkJdGVzdF9jb21taXQgc3ltbGluay10d28gJiYKKwkJZWNobyBnb29kID5leHBlY3QgJiYKKwkJZ2l0IGRpZmZ0b29sIC0tdG9vbD1jaGVja3RyZWVzIC0tZGlyLWRpZmYgSEVBRH4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkaWZmdG9vbCAtLWRpci1kaWZmIGhhbmRsZXMgbW9kaWZpZWQgc3ltbGlua3MnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRvdWNoIGIgJiYKKwlsbiAtcyBiIGMgJiYKKwlnaXQgYWRkIGIgYyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRvdWNoIGQgJiYKKwlybSBjICYmCisJbG4gLXMgZCBjICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWIKKwkJYworCisJCWMKKwlFT0YKKwlnaXQgZGlmZnRvb2wgLS1zeW1saW5rcyAtLWRpci1kaWZmIC0tZXh0Y21kIGxzID5vdXRwdXQgJiYKKwlncmVwIC12IF4vIG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IGRpZmZ0b29sIC0tbm8tc3ltbGlua3MgLS1kaXItZGlmZiAtLWV4dGNtZCBscyA+b3V0cHV0ICYmCisJZ3JlcCAtdiBeLyBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCSMgVGhlIGxlZnQgc2lkZSBjb250YWlucyBzeW1saW5rICJjIiB0aGF0IHBvaW50cyB0byAiYiIKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5jYXQuY21kICJjYXQgXCRMT0NBTC9jIiAmJgorCXByaW50ZiAiJXNcbiIgYiA+ZXhwZWN0ICYmCisKKwlnaXQgZGlmZnRvb2wgLS1zeW1saW5rcyAtLWRpci1kaWZmIC0tdG9vbCBjYXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBkaWZmdG9vbCAtLXN5bWxpbmtzIC0tbm8tc3ltbGlua3MgLS1kaXItZGlmZiAtLXRvb2wgY2F0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIFRoZSByaWdodCBzaWRlIGNvbnRhaW5zIHN5bWxpbmsgImMiIHRoYXQgcG9pbnRzIHRvICJkIgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLmNhdC5jbWQgImNhdCBcJFJFTU9URS9jIiAmJgorCXByaW50ZiAiJXNcbiIgZCA+ZXhwZWN0ICYmCisKKwlnaXQgZGlmZnRvb2wgLS1zeW1saW5rcyAtLWRpci1kaWZmIC0tdG9vbCBjYXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBkaWZmdG9vbCAtLW5vLXN5bWxpbmtzIC0tZGlyLWRpZmYgLS10b29sIGNhdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJIyBEZWxldGVkIHN5bWxpbmtzCisJcm0gLWYgYyAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQliCisJCWMKKworCUVPRgorCWdpdCBkaWZmdG9vbCAtLXN5bWxpbmtzIC0tZGlyLWRpZmYgLS1leHRjbWQgbHMgPm91dHB1dCAmJgorCWdyZXAgLXYgXi8gb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgZGlmZnRvb2wgLS1uby1zeW1saW5rcyAtLWRpci1kaWZmIC0tZXh0Y21kIGxzID5vdXRwdXQgJiYKKwlncmVwIC12IF4vIG91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRzaWRlIHdvcmt0cmVlJyAnCisJZWNobyAxID4xICYmCisJZWNobyAyID4yICYmCisJdGVzdF9leHBlY3RfY29kZSAxIG5vbmdpdCBnaXQgXAorCQktYyBkaWZmLnRvb2w9ZWNobyAtYyBkaWZmdG9vbC5lY2hvLmNtZD0iZWNobyBcJExPQ0FMIFwkUkVNT1RFIiBcCisJCWRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tbm8taW5kZXggLi4vMSAuLi8yID5hY3R1YWwgJiYKKwllY2hvICIuLi8xIC4uLzIiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZ0b29sIC0tZ3VpLCAtLXRvb2wgYW5kIC0tZXh0Y21kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmZ0b29sIC0tZ3VpIC0tdG9vbD10ZXN0LXRvb2wgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLS1ndWkgLS1leHRjbWQ9Y2F0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmZ0b29sIC0tdG9vbD10ZXN0LXRvb2wgLS1leHRjbWQ9Y2F0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmZ0b29sIC0tZ3VpIC0tdG9vbD10ZXN0LXRvb2wgLS1leHRjbWQ9Y2F0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzgxMC1ncmVwLnNoIGIvdC90NzgxMC1ncmVwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkN2IzOTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3ODEwLWdyZXAuc2gKQEAgLTAsMCArMSwxNzA0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBncmVwIHZhcmlvdXMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmhlbGxvLmMgPDxFT0YKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworCXJldHVybiAwOworCS8qIGNoYXIgPz8gKi8KK30KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl7CisJCWVjaG8gZm9vIG1tYXAgYmFyCisJCWVjaG8gZm9vX21tYXAgYmFyCisJCWVjaG8gZm9vX21tYXAgYmFyIG1tYXAKKwkJZWNobyBmb28gbW1hcCBiYXJfbW1hcAorCQllY2hvIGZvb19tbWFwIGJhciBtbWFwIGJhegorCX0gPmZpbGUgJiYKKwl7CisJCWVjaG8gSGVsbG8gd29ybGQKKwkJZWNobyBIZUxMbyB3b3JsZAorCQllY2hvIEhlbGxvX3dvcmxkCisJCWVjaG8gSGVMTG9fd29ybGQKKwl9ID5oZWxsb193b3JsZCAmJgorCXsKKwkJZWNobyAiYStiKmMiCisJCWVjaG8gImErYmMiCisJCWVjaG8gImFiYyIKKwl9ID5hYiAmJgorCXsKKwkJZWNobyBkICYmCisJCWVjaG8gMAorCX0gPmQwICYmCisJZWNobyB2dnYgPnYgJiYKKwllY2hvIHd3IHcgPncgJiYKKwllY2hvIHggeCB4eCB4ID54ICYmCisJZWNobyB5IHl5ID55ICYmCisJZWNobyB6enogPiB6ICYmCisJbWtkaXIgdCAmJgorCWVjaG8gdGVzdCA+dC90ICYmCisJZWNobyB2dnYgPnQvdiAmJgorCW1rZGlyIHQvYSAmJgorCWVjaG8gdnZ2ID50L2EvdiAmJgorCXsKKwkJZWNobyAibGluZSB3aXRob3V0IGxlYWRpbmcgc3BhY2UxIgorCQllY2hvICIgbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UxIgorCQllY2hvICIgbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UyIgorCQllY2hvICIgbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UzIgorCQllY2hvICJsaW5lIHdpdGhvdXQgbGVhZGluZyBzcGFjZTIiCisJfSA+c3BhY2UgJiYKKwljYXQgPmhlbGxvLnBzMSA8PC1cRU9GICYmCisJIyBOby1vcC4KKwlmdW5jdGlvbiBkdW1teSgpIHt9CisKKwkjIFNheSBoZWxsby4KKwlmdW5jdGlvbiBoZWxsbygpIHsKKwkgIGVjaG8gIkhlbGxvIHdvcmxkLiIKKwl9ICMgaGVsbG8KKworCSMgU3RpbGwgYSBuby1vcC4KKwlmdW5jdGlvbiBkdW1teSgpIHt9CisJRU9GCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgc2hvdWxkIG5vdCBzZWdmYXVsdCB3aXRoIGEgYmFkIGlucHV0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgIigiCisnCisKK2ZvciBIIGluIEhFQUQgJycKK2RvCisJY2FzZSAiJEgiIGluCisJSEVBRCkJSEM9J0hFQUQ6JyBMPSdIRUFEJyA7OworCScnKQlIQz0gTD0naW4gd29ya2luZyB0cmVlJyA7OworCWVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6MTpmb28gbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlOjM6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjQ6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjU6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLmxpbmVudW1iZXI9ZmFsc2UgZ3JlcCAtbiAtdyAtZSBtbWFwICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAod2l0aCAtLWNvbHVtbikiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6NTpmb28gbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlOjE0OmZvb19tbWFwIGJhciBtbWFwCisJCQllY2hvICR7SEN9ZmlsZTo1OmZvbyBtbWFwIGJhcl9tbWFwCisJCQllY2hvICR7SEN9ZmlsZToxNDpmb29fbW1hcCBiYXIgbW1hcCBiYXoKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1jb2x1bW4gLXcgLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHdpdGggLS1jb2x1bW4sIGV4dGVuZGVkIE9SKSIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZToxNDpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6MTk6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tY29sdW1uIC13IC1lIG1tYXAkIC0tb3IgLWUgYmF6ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAod2l0aCAtLWNvbHVtbiwgLS1pbnZlcnQtbWF0Y2gpIiAnCisJCXsKKwkJCWVjaG8gJHtIQ31maWxlOjE6Zm9vIG1tYXAgYmFyCisJCQllY2hvICR7SEN9ZmlsZToxOmZvb19tbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6MTpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6MTpmb28gbW1hcCBiYXJfbW1hcAorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLWNvbHVtbiAtLWludmVydC1tYXRjaCAtdyAtZSBiYXogJEggLS0gZmlsZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgKHdpdGggLS1jb2x1bW4sIC0taW52ZXJ0LW1hdGNoLCBleHRlbmRlZCBPUikiICcKKwkJeworCQkJZWNobyAke0hDfWhlbGxvX3dvcmxkOjY6SGVMTG9fd29ybGQKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1jb2x1bW4gLS1pbnZlcnQtbWF0Y2ggLWUgbGwgLS1vciAtLW5vdCAtZSBfICRIIC0tIGhlbGxvX3dvcmxkIFwKKwkJCT5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAod2l0aCAtLWNvbHVtbiwgLS1pbnZlcnQtbWF0Y2gsIGV4dGVuZGVkIEFORCkiICcKKwkJeworCQkJZWNobyAke0hDfWhlbGxvX3dvcmxkOjM6SGVsbG8gd29ybGQKKwkJCWVjaG8gJHtIQ31oZWxsb193b3JsZDozOkhlbGxvX3dvcmxkCisJCQllY2hvICR7SEN9aGVsbG9fd29ybGQ6NjpIZUxMb193b3JsZAorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLWNvbHVtbiAtLWludmVydC1tYXRjaCAtLW5vdCAtZSBfIC0tYW5kIC0tbm90IC1lIGxsICRIIC0tIGhlbGxvX3dvcmxkIFwKKwkJCT5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAod2l0aCAtLWNvbHVtbiwgZG91YmxlLW5lZ2F0aW9uKSIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZToxOmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLWNvbHVtbiAtLW5vdCBcKCAtLW5vdCAtZSBmb28gLS1vciAtLW5vdCAtZSBiYXogXCkgJEggLS0gZmlsZSBcCisJCQk+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHdpdGggLS1jb2x1bW4sIC1DKSIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZTo1OmZvbyBtbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGUtZm9vX21tYXAgYmFyCisJCQllY2hvICR7SEN9ZmlsZToxNDpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NTpmb28gbW1hcCBiYXJfbW1hcAorCQkJZWNobyAke0hDfWZpbGU6MTQ6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tY29sdW1uIC13IC1DMSAtZSBtbWFwICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAod2l0aCAtLWxpbmUtbnVtYmVyLCAtLWNvbHVtbikiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6MTo1OmZvbyBtbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6MzoxNDpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NDo1OmZvbyBtbWFwIGJhcl9tbWFwCisJCQllY2hvICR7SEN9ZmlsZTo1OjE0OmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtbiAtLWNvbHVtbiAtdyAtZSBtbWFwICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAod2l0aCBub24tZXh0ZW5kZWQgcGF0dGVybnMsIC0tY29sdW1uKSIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZTo1OmZvbyBtbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6MTA6Zm9vX21tYXAgYmFyCisJCQllY2hvICR7SEN9ZmlsZToxMDpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NTpmb28gbW1hcCBiYXJfbW1hcAorCQkJZWNobyAke0hDfWZpbGU6MTA6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tY29sdW1uIC13IC1lIGJhciAtZSBtbWFwICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZToxOmZvbyBtbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6Mzpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NDpmb28gbW1hcCBiYXJfbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAubGluZW51bWJlcj10cnVlIGdyZXAgLXcgLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6Zm9vIG1tYXAgYmFyCisJCQllY2hvICR7SEN9ZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5saW5lbnVtYmVyPXRydWUgZ3JlcCAtLW5vLWxpbmUtbnVtYmVyIC13IC1lIG1tYXAgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh3KSIgJworCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtbiAtdyAtZSAiXnciICRIID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHgpIiAnCisJCXsKKwkJCWVjaG8gJHtIQ314OjE6eCB4IHh4IHgKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLW4gLXcgLWUgInggeHgqIHgiICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAoeS0xKSIgJworCQl7CisJCQllY2hvICR7SEN9eToxOnkgeXkKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLW4gLXcgLWUgIl55IiAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHktMikiICcKKwkJaWYgZ2l0IGdyZXAgLW4gLXcgLWUgIl55IHkiICRIID5hY3R1YWwKKwkJdGhlbgorCQkJZWNobyBzaG91bGQgbm90IGhhdmUgbWF0Y2hlZAorCQkJY2F0IGFjdHVhbAorCQkJZmFsc2UKKwkJZWxzZQorCQkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCQlmaQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwgKHopIiAnCisJCWlmIGdpdCBncmVwIC1uIC13IC1lICJeeiIgJEggPmFjdHVhbAorCQl0aGVuCisJCQllY2hvIHNob3VsZCBub3QgaGF2ZSBtYXRjaGVkCisJCQljYXQgYWN0dWFsCisJCQlmYWxzZQorCQllbHNlCisJCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisJCWZpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAod2l0aCAtLWNvbHVtbiwgLS1vbmx5LW1hdGNoaW5nKSIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZToxOjU6bW1hcAorCQkJZWNobyAke0hDfWZpbGU6Mjo1Om1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjM6NTptbWFwCisJCQllY2hvICR7SEN9ZmlsZTozOjEzOm1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjQ6NTptbWFwCisJCQllY2hvICR7SEN9ZmlsZTo0OjEzOm1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjU6NTptbWFwCisJCQllY2hvICR7SEN9ZmlsZTo1OjEzOm1tYXAKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1jb2x1bW4gLW4gLW8gLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgKHQtMSkiICcKKwkJZWNobyAiJHtIQ310L3Q6MTp0ZXN0IiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLW4gLWUgdGVzdCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgKHQtMikiICcKKwkJZWNobyAiJHtIQ310OjE6dGVzdCIgPmV4cGVjdGVkICYmCisJCSgKKwkJCWNkIHQgJiYKKwkJCWdpdCBncmVwIC1uIC1lIHRlc3QgJEgKKwkJKSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgKHQtMykiICcKKwkJZWNobyAiJHtIQ310L3Q6MTp0ZXN0IiA+ZXhwZWN0ZWQgJiYKKwkJKAorCQkJY2QgdCAmJgorCQkJZ2l0IGdyZXAgLS1mdWxsLW5hbWUgLW4gLWUgdGVzdCAkSAorCQkpID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtYyAkTCAobm8gL2Rldi9udWxsKSIgJworCQkhIGdpdCBncmVwIC1jIHRlc3QgJEggfCBncmVwIC9kZXYvbnVsbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggLTEgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXQvYS92OjE6dnZ2CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAtMSAtbiAtZSB2dnYgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJZ2l0IGdyZXAgLS1yZWN1cnNpdmUgLW4gLWUgdnZ2ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAwICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDAgLW4gLWUgdnZ2ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCBncmVwIC0tbm8tcmVjdXJzaXZlIC1uIC1lIHZ2diAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggMCAtLSAnKicgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXQvYS92OjE6dnZ2CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAwIC1uIC1lIHZ2diAkSCAtLSAiKiIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJZ2l0IGdyZXAgLS1uby1yZWN1cnNpdmUgLW4gLWUgdnZ2ICRIIC0tICIqIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggMSAkTCIgJworCQl7CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAxIC1uIC1lIHZ2diAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggMCAtLSB0ICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMCAtbiAtZSB2dnYgJEggLS0gdCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQlnaXQgZ3JlcCAtLW5vLXJlY3Vyc2l2ZSAtbiAtZSB2dnYgJEggLS0gdCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggMCAtLSAuIHQgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMCAtbiAtZSB2dnYgJEggLS0gLiB0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCBncmVwIC0tbm8tcmVjdXJzaXZlIC1uIC1lIHZ2diAkSCAtLSAuIHQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgLS0gdCAuICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDAgLW4gLWUgdnZ2ICRIIC0tIHQgLiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQlnaXQgZ3JlcCAtLW5vLXJlY3Vyc2l2ZSAtbiAtZSB2dnYgJEggLS0gdCAuID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLmV4dGVuZGVkUmVnZXhwPWZhbHNlIiAnCisJCWVjaG8gIiR7SEN9YWI6YStiYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLmV4dGVuZGVkUmVnZXhwPWZhbHNlIGdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUiICcKKwkJZWNobyAiJHtIQ31hYjphYmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIGdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm50eXBlPWJhc2ljIiAnCisJCWVjaG8gIiR7SEN9YWI6YStiYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIGdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm50eXBlPWV4dGVuZGVkIiAnCisJCWVjaG8gIiR7SEN9YWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9ZXh0ZW5kZWQgZ3JlcCAiYStiKmMiICRIIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCB3aXRoIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQiICcKKwkJZWNobyAiJHtIQ31hYjphK2IqYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIGdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUENSRSAiZ3JlcCAkTCB3aXRoIGdyZXAucGF0dGVybnR5cGU9cGVybCIgJworCQllY2hvICIke0hDfWFiOmErYipjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9cGVybCBncmVwICJhXHh7MmJ9Ylx4ezJhfWMiICRIIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAhRkFJTF9QUkVSRVFTLCFQQ1JFICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJudHlwZT1wZXJsIGVycm9ycyB3aXRob3V0IFBDUkUiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9cGVybCBncmVwICJmb28uKmJhciIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1kZWZhdWx0IGFuZCBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUiICcKKwkJZWNobyAiJHtIQ31hYjphYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1kZWZhdWx0IFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBcCisJCQlncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIGFuZCBncmVwLnBhdHRlcm5UeXBlPWRlZmF1bHQiICcKKwkJZWNobyAiJHtIQ31hYjphYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIFwKKwkJCS1jIGdyZXAucGF0dGVyblR5cGU9ZGVmYXVsdCBcCisJCQlncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCBhbmQgZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSIgJworCQllY2hvICIke0hDfWFiOmFiYyIgPmV4cGVjdGVkICYmCisJCWdpdCBcCisJCQktYyBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkIFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9ZmFsc2UgXAorCQkJZ3JlcCAiYStiKmMiICRIIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCB3aXRoIGdyZXAucGF0dGVyblR5cGU9YmFzaWMgYW5kIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSIgJworCQllY2hvICIke0hDfWFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBcCisJCQktYyBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUgXAorCQkJZ3JlcCAiYStiKmMiICRIIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCB3aXRoIGdyZXAuZXh0ZW5kZWRSZWdleHA9ZmFsc2UgYW5kIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQiICcKKwkJZWNobyAiJHtIQ31hYjphYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSBcCisJCQktYyBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkIFwKKwkJCWdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUgYW5kIGdyZXAucGF0dGVyblR5cGU9YmFzaWMiICcKKwkJZWNobyAiJHtIQ31hYjphK2JjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBcCisJCQktYyBncmVwLnBhdHRlcm5UeXBlPWJhc2ljIFwKKwkJCWdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1jb3VudCAkTCIgJworCQllY2hvICR7SEN9YWI6MyA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1jb3VudCAtZSBiICRIIC0tIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLWNvdW50IC1oICRMIiAnCisJCWVjaG8gMyA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1jb3VudCAtaCAtZSBiICRIIC0tIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworZG9uZQorCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWwgLUMnICcKKwlnaXQgZ3JlcCAtbCAtQzEgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTo1CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWMgLUMnICcKKwlnaXQgZ3JlcCAtYyAtQzEgZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtTCAtQycgJworCWdpdCBscy1maWxlcyA+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+YWN0dWFsICYmCisJZWNobyAiZGlzdGltZGlzdGltIHdhcyBjYWxsZWQiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAwNC1leGFtcGxlLnNoIGIvdC90OTAwNC1leGFtcGxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlODg5NGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDA0LWV4YW1wbGUuc2gKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIHRoYXQgZXhhbXBsZSBjb2RlIGNvbXBpbGVzIGFuZCBydW5zJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlY29yYXRlJyAnCisJdGVzdC10b29sIGV4YW1wbGUtZGVjb3JhdGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDEwLXN2bi1mZS5zaCBiL3QvdDkwMTAtc3ZuLWZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5MGZkYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDEwLXN2bi1mZS5zaApAQCAtMCwwICsxLDExMDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBzdm4gZHVtcGZpbGUgaW1wb3J0ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiB0ZXN0X2hhdmVfcHJlcmVxICFQSVBFCit0aGVuCisJc2tpcF9hbGw9InN2biBkdW1wZmlsZSBpbXBvcnRlciB0ZXN0aW5nIHJlcXVpcmVzIHRoZSBQSVBFIHByZXJlcXVpc2l0ZSIKKwl0ZXN0X2RvbmUKK2ZpCisKK3JlaW5pdF9naXQgKCkgeworCXJtIC1mciAuZ2l0ICYmCisJcm0gLWYgc3RyZWFtIGJhY2tmbG93ICYmCisJZ2l0IGluaXQgJiYKKwlta2ZpZm8gc3RyZWFtIGJhY2tmbG93Cit9CisKK3RyeV9kdW1wICgpIHsKKwlpbnB1dD0kMSAmJgorCW1heWJlX2ZhaWxfc3ZuZmU9JHsyOit0ZXN0XyQyfSAmJgorCW1heWJlX2ZhaWxfZmk9JHszOit0ZXN0XyQzfSAmJgorCisJeworCQkkbWF5YmVfZmFpbF9zdm5mZSB0ZXN0LXN2bi1mZSAiJGlucHV0IiA+c3RyZWFtIDM8YmFja2Zsb3cgJgorCX0gJiYKKwkkbWF5YmVfZmFpbF9maSBnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDxzdHJlYW0gMz5iYWNrZmxvdyAmJgorCXdhaXQgJCEKK30KKworcHJvcGVydGllcyAoKSB7CisJd2hpbGUgdGVzdCAiJCMiIC1uZSAwCisJZG8KKwkJcHJvcGVydHk9IiQxIiAmJgorCQl2YWx1ZT0iJDIiICYmCisJCXByaW50ZiAiJXNcbiIgIksgJHsjcHJvcGVydHl9IiAmJgorCQlwcmludGYgIiVzXG4iICIkcHJvcGVydHkiICYmCisJCXByaW50ZiAiJXNcbiIgIlYgJHsjdmFsdWV9IiAmJgorCQlwcmludGYgIiVzXG4iICIkdmFsdWUiICYmCisJCXNoaWZ0IDIgfHwKKwkJcmV0dXJuIDEKKwlkb25lCit9CisKK3RleHRfbm9fcHJvcHMgKCkgeworCXRleHQ9IiQxCisiICYmCisJcHJpbnRmICIlc1xuIiAiUHJvcC1jb250ZW50LWxlbmd0aDogMTAiICYmCisJcHJpbnRmICIlc1xuIiAiVGV4dC1jb250ZW50LWxlbmd0aDogJHsjdGV4dH0iICYmCisJcHJpbnRmICIlc1xuIiAiQ29udGVudC1sZW5ndGg6ICQoKCR7I3RleHR9ICsgMTApKSIgJiYKKwlwcmludGYgIiVzXG4iICIiICJQUk9QUy1FTkQiICYmCisJcHJpbnRmICIlc1xuIiAiJHRleHQiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGR1bXAnICcKKwlyZWluaXRfZ2l0ICYmCisJZWNobyAiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIiID5pbnB1dCAmJgorCXRyeV9kdW1wIGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Y0IGR1bXBzIG5vdCBzdXBwb3J0ZWQnICcKKwlyZWluaXRfZ2l0ICYmCisJZWNobyAiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDQiID52NC5kdW1wICYmCisJdHJ5X2R1bXAgdjQuZHVtcCBtdXN0X2ZhaWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZW1wdHkgcmV2aXNpb24nICcKKwlyZWluaXRfZ2l0ICYmCisJcHJpbnRmICJyZXYgPG5vYm9keSwgbm9ib2R5QGxvY2FsPjogJXNcbiIgIiIgIiIgPmV4cGVjdCAmJgorCWNhdCA+ZW1wdHlyZXYuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDAKKwlDb250ZW50LWxlbmd0aDogMAorCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMAorCUNvbnRlbnQtbGVuZ3RoOiAwCisKKwlFT0YKKwl0cnlfZHVtcCBlbXB0eXJldi5kdW1wICYmCisJZ2l0IGxvZyAtcCAtLWZvcm1hdD0icmV2IDwlYW4sICVhZT46ICVzIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHByb3BlcnRpZXMnICcKKwlyZWluaXRfZ2l0ICYmCisJcHJpbnRmICJyZXYgPG5vYm9keSwgbm9ib2R5QGxvY2FsPjogJXNcbiIgIiIgIiIgPmV4cGVjdCAmJgorCWNhdCA+ZW1wdHlwcm9wLmR1bXAgPDwtXEVPRiAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlSZXZpc2lvbi1udW1iZXI6IDIKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisJRU9GCisJdHJ5X2R1bXAgZW1wdHlwcm9wLmR1bXAgJiYKKwlnaXQgbG9nIC1wIC0tZm9ybWF0PSJyZXYgPCVhbiwgJWFlPjogJXMiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9yIG5hbWUgYW5kIGNvbW1pdCBtZXNzYWdlJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gIjxhdXRob3JAZXhhbXBsZS5jb20sIGF1dGhvckBleGFtcGxlLmNvbUBsb2NhbD4iID5leHBlY3QuYXV0aG9yICYmCisJY2F0ID5tZXNzYWdlIDw8LVxFT0YgJiYKKwlBIGNvbmNpc2Ugc3VtbWFyeSBvZiB0aGUgY2hhbmdlCisKKwlBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjaGFuZ2UsIHdoeSBpdCBpcyBuZWVkZWQsIHdoYXQKKwl3YXMgYnJva2VuIGFuZCB3aHkgYXBwbHlpbmcgdGhpcyBpcyB0aGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uLgorCisJKiBmaWxlLmMKKwkgICAgRGV0YWlscyBwZXJ0YWluaW5nIHRvIGFuIGluZGl2aWR1YWwgZmlsZS4KKwlFT0YKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmxvZyAiJChjYXQgbWVzc2FnZSkiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMgJiYKKwl7CisJCWVjaG8gIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzIiAmJgorCQllY2hvICYmCisJCWVjaG8gIlJldmlzaW9uLW51bWJlcjogMSIgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzCisJfSA+bG9nLmR1bXAgJiYKKwl0cnlfZHVtcCBsb2cuZHVtcCAmJgorCWdpdCBsb2cgLXAgLS1mb3JtYXQ9IiVCIiBIRUFEID5hY3R1YWwubG9nICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iPCVhbiwgJWFlPiIgPmFjdHVhbC5hdXRob3IgJiYKKwl0ZXN0X2NtcCBtZXNzYWdlIGFjdHVhbC5sb2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYXV0aG9yIGFjdHVhbC5hdXRob3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdXBwb3J0ZWQgcHJvcGVydGllcyBhcmUgaWdub3JlZCcgJworCXJlaW5pdF9naXQgJiYKKwllY2hvIGF1dGhvciA+ZXhwZWN0ICYmCisJY2F0ID5leHRyYXByb3AuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDU2CisJQ29udGVudC1sZW5ndGg6IDU2CisKKwlLIDgKKwlub25zZW5zZQorCVYgMQorCXkKKwlLIDEwCisJc3ZuOmF1dGhvcgorCVYgNgorCWF1dGhvcgorCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIGV4dHJhcHJvcC5kdW1wICYmCisJZ2l0IGxvZyAtcCAtLWZvcm1hdD0lYW4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0aW1lc3RhbXAgYW5kIGVtcHR5IGZpbGUnICcKKwllY2hvIGF1dGhvckBleGFtcGxlLmNvbSA+ZXhwZWN0LmF1dGhvciAmJgorCWVjaG8gMTk5OS0wMS0wMSA+ZXhwZWN0LmRhdGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdC5maWxlcyAmJgorCXJlaW5pdF9naXQgJiYKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjE5OTktMDEtMDFUMDA6MDE6MDAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgImFkZCBlbXB0eSBmaWxlIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzICYmCisJeworCQljYXQgPDwtRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMgJiYKKwkJY2F0IDw8LVxFT0YKKworCQlOb2RlLXBhdGg6IGVtcHR5LWZpbGUKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJQ29udGVudC1sZW5ndGg6IDAKKworCQlFT0YKKwl9ID5lbXB0eWZpbGUuZHVtcCAmJgorCXRyeV9kdW1wIGVtcHR5ZmlsZS5kdW1wICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lYW4gSEVBRCA+YWN0dWFsLmF1dGhvciAmJgorCWdpdCBsb2cgLS1kYXRlPXNob3J0IC0tZm9ybWF0PSVhZCBIRUFEID5hY3R1YWwuZGF0ZSAmJgorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5IEhFQUQgPmFjdHVhbC5maWxlcyAmJgorCXRlc3RfY21wIGV4cGVjdC5hdXRob3IgYWN0dWFsLmF1dGhvciAmJgorCXRlc3RfY21wIGV4cGVjdC5kYXRlIGFjdHVhbC5kYXRlICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpbGVzIGFjdHVhbC5maWxlcyAmJgorCWdpdCBjaGVja291dCBIRUFEIGVtcHR5LWZpbGUgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3Rvcnkgd2l0aCBmaWxlcycgJworCXJlaW5pdF9naXQgJiYKKwlwcmludGYgIiVzXG4iIGRpcmVjdG9yeS9maWxlMSBkaXJlY3RvcnkvZmlsZTIgPmV4cGVjdC5maWxlcyAmJgorCWVjaG8gaGkgPmhpICYmCisJZWNobyBoZWxsbyA+aGVsbG8gJiYKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjE5OTktMDItMDFUMDA6MDE6MDAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgImFkZCBkaXJlY3Rvcnkgd2l0aCBzb21lIGZpbGVzIGluIGl0IiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzICYmCisJeworCQljYXQgPDwtRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlOb2RlLXBhdGg6IGRpcmVjdG9yeQorCQlOb2RlLWtpbmQ6IGRpcgorCQlOb2RlLWFjdGlvbjogYWRkCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogZGlyZWN0b3J5L2ZpbGUxCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUVPRgorCQl0ZXh0X25vX3Byb3BzIGhlbGxvICYmCisJCWNhdCA8PC1cRU9GICYmCisJCU5vZGUtcGF0aDogZGlyZWN0b3J5L2ZpbGUyCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUVPRgorCQl0ZXh0X25vX3Byb3BzIGhpCisJfSA+ZGlyZWN0b3J5LmR1bXAgJiYKKwl0cnlfZHVtcCBkaXJlY3RvcnkuZHVtcCAmJgorCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRCA+YWN0dWFsLmZpbGVzICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgZGlyZWN0b3J5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmZpbGVzIGFjdHVhbC5maWxlcyAmJgorCXRlc3RfY21wIGhlbGxvIGRpcmVjdG9yeS9maWxlMSAmJgorCXRlc3RfY21wIGhpIGRpcmVjdG9yeS9maWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggbmFtZSB3aXRoIGJhY2tzbGFzaCcgJworCXJlaW5pdF9naXQgJiYKKwlzb3J0IDw8LVxFT0YgPmV4cGVjdC5icmFuY2gtZmlsZXMgJiYKKwl0cnVuay9maWxlMQorCXRydW5rL2ZpbGUyCisJImJyYW5jaGVzL1VwZGF0ZUZPUHRvMDk0XFwvZmlsZTEiCisJImJyYW5jaGVzL1VwZGF0ZUZPUHRvMDk0XFwvZmlsZTIiCisJRU9GCisKKwllY2hvIGhpID5oaSAmJgorCWVjaG8gaGVsbG8gPmhlbGxvICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIxOTk5LTAyLTAyVDAwOjAxOjAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgImFkZCBkaXJlY3Rvcnkgd2l0aCBzb21lIGZpbGVzIGluIGl0IiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzLnNldHVwICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYnJhbmNoZXJAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjIwMDctMTItMDZUMjE6Mzg6MzQuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAiVXBkYXRpbmcgZm9wIHRvIC45NCBhbmQgYWRqdXN0IGZvLXN0eWxlc2hlZXRzIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzLmJyYW5jaCAmJgorCXsKKwkJY2F0IDw8LUVPRiAmJgorCQlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJCVJldmlzaW9uLW51bWJlcjogMQorCQlFT0YKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcy5zZXR1cCkgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMuc2V0dXApICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzLnNldHVwICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJTm9kZS1wYXRoOiB0cnVuaworCQlOb2RlLWtpbmQ6IGRpcgorCQlOb2RlLWFjdGlvbjogYWRkCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogYnJhbmNoZXMKKwkJTm9kZS1raW5kOiBkaXIKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IHRydW5rL2ZpbGUxCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUVPRgorCQl0ZXh0X25vX3Byb3BzIGhlbGxvICYmCisJCWNhdCA8PC1cRU9GICYmCisJCU5vZGUtcGF0aDogdHJ1bmsvZmlsZTIKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJRU9GCisJCXRleHRfbm9fcHJvcHMgaGkgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlSZXZpc2lvbi1udW1iZXI6IDIKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMuYnJhbmNoKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcy5icmFuY2gpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzLmJyYW5jaCAmJgorCQljYXQgPDwtXEVPRgorCisJCU5vZGUtcGF0aDogYnJhbmNoZXMvVXBkYXRlRk9QdG8wOTRcCisJCU5vZGUta2luZDogZGlyCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJTm9kZS1jb3B5ZnJvbS1yZXY6IDEKKwkJTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisJCU5vZGUta2luZDogZGlyCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMzQKKwkJQ29udGVudC1sZW5ndGg6IDM0CisKKwkJSyAxMworCQlzdm46bWVyZ2VpbmZvCisJCVYgMAorCisJCVBST1BTLUVORAorCQlFT0YKKwl9ID5icmFuY2guZHVtcCAmJgorCXRyeV9kdW1wIGJyYW5jaC5kdW1wICYmCisKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEIHwKKwlzb3J0ID5hY3R1YWwuYnJhbmNoLWZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0LmJyYW5jaC1maWxlcyBhY3R1YWwuYnJhbmNoLWZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vZGUgd2l0aG91dCBhY3Rpb24nICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5pbmFjdGlvbi5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBkaXJlY3RvcnkKKwlOb2RlLWtpbmQ6IGRpcgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKwlFT0YKKwl0cnlfZHVtcCBpbmFjdGlvbi5kdW1wIG11c3RfZmFpbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhY3Rpb246IGFkZCBub2RlIHdpdGhvdXQgdGV4dCcgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPnRleHRsZXNzLmR1bXAgPDwtXEVPRiAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IHRleHRsZXNzCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGFkZAorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKwlFT0YKKwl0cnlfZHVtcCB0ZXh0bGVzcy5kdW1wIG11c3RfZmFpbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaGFuZ2UgZmlsZSBtb2RlIGJ1dCBrZWVwIG9sZCBjb250ZW50JyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMjAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIFQJZ3JlZXRpbmcKKwlPQkpJRAorCToxMDA2NDQgMTIwMDAwIE9CSklEIE9CSklEIFQJZ3JlZXRpbmcKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZ3JlZXRpbmcKKwlFT0YKKwllY2hvICJsaW5rIGhlbGxvIiA+ZXhwZWN0LmJsb2IgJiYKKwllY2hvIGhlbGxvID5oZWxsbyAmJgorCWNhdCA+ZmlsZW1vZGUuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCUNvbnRlbnQtbGVuZ3RoOiAyMQorCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworCUNvbnRlbnQtbGVuZ3RoOiAzMworCisJSyAxMQorCXN2bjpzcGVjaWFsCisJViAxCisJKgorCVBST1BTLUVORAorCisJUmV2aXNpb24tbnVtYmVyOiAzCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisJRU9GCisJdHJ5X2R1bXAgZmlsZW1vZGUuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRPSURfUkVHRVgvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwlnaXQgc2hvdyBIRUFEOmdyZWV0aW5nID5hY3R1YWwuYmxvYiAmJgorCWdpdCBzaG93IEhFQUReOmdyZWV0aW5nID5hY3R1YWwudGFyZ2V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ibG9iIGFjdHVhbC5ibG9iICYmCisJdGVzdF9jbXAgaGVsbG8gYWN0dWFsLnRhcmdldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgaW4gcHJvcGVydHkgdmFsdWUnICcKKwlyZWluaXRfZ2l0ICYmCisJZWNobyAiY29tbWl0IG1lc3NhZ2UiID5leHBlY3QubWVzc2FnZSAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQl1bmltcG9ydGFudCAic29tZXRoaW5nIHdpdGggYSBOVUwgKFEpIiBcCisJCQlzdm46bG9nICJjb21taXQgbWVzc2FnZSImJgorCQllY2hvIFBST1BTLUVORAorCX0gfAorCXFfdG9fbnVsID5wcm9wcyAmJgorCXsKKwkJY2F0IDw8LVxFT0YgJiYKKwkJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCQlSZXZpc2lvbi1udW1iZXI6IDEKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcworCX0gPm51bHByb3AuZHVtcCAmJgorCXRyeV9kdW1wIG51bHByb3AuZHVtcCAmJgorCWdpdCBkaWZmLXRyZWUgLS1hbHdheXMgLXMgLS1mb3JtYXQ9JXMgSEVBRCA+YWN0dWFsLm1lc3NhZ2UgJiYKKwl0ZXN0X2NtcCBleHBlY3QubWVzc2FnZSBhY3R1YWwubWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgaW4gbG9nIG1lc3NhZ2UsIGZpbGUgY29udGVudCwgYW5kIHByb3BlcnR5IG5hbWUnICcKKwkjIENhdmVhdDogc3ZuYWRtaW4gMS42LjE2IChyMTA3MzUyOSkgdHJ1bmNhdGVzIGF0IFwwIGluIHRoZQorCSMgc3ZuOnNwZWNpYWxRbm90cmVhbGx5IGV4YW1wbGUuCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZ3JlZXRpbmcKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZ3JlZXRpbmcKKwlFT0YKKwlwcmludGYgIlxuJXNcbiIgInNvbWV0aGluZyB3aXRoIGFuIEFTQ0lJIE5VTCAoUSkiID5leHBlY3QubWVzc2FnZSAmJgorCXByaW50ZiAiJXNcbiIgImhlbFFvIiA+ZXhwZWN0LmhlbGxvMSAmJgorCXByaW50ZiAiJXNcbiIgImxpbmsgaGVsbG8iID5leHBlY3QuaGVsbG8yICYmCisJeworCQlwcm9wZXJ0aWVzIHN2bjpsb2cgInNvbWV0aGluZyB3aXRoIGFuIEFTQ0lJIE5VTCAoUSkiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSB8CisJcV90b19udWwgPnByb3BzICYmCisJeworCQlxX3RvX251bCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJVGV4dC1jb250ZW50LWxlbmd0aDogNgorCQlDb250ZW50LWxlbmd0aDogMTYKKworCQlQUk9QUy1FTkQKKwkJaGVsUW8KKworCQlSZXZpc2lvbi1udW1iZXI6IDIKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcyAmJgorCQlxX3RvX251bCA8PC1cRU9GCisKKwkJTm9kZS1wYXRoOiBncmVldGluZworCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGNoYW5nZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiA0MworCQlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCQlDb250ZW50LWxlbmd0aDogNTQKKworCQlLIDIxCisJCXN2bjpzcGVjaWFsUW5vdHJlYWxseQorCQlWIDEKKwkJKgorCQlQUk9QUy1FTkQKKwkJbGluayBoZWxsbworCQlFT0YKKwl9ID44Yml0Y2xlYW4uZHVtcCAmJgorCXRyeV9kdW1wIDhiaXRjbGVhbi5kdW1wICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCXsKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgbnVsX3RvX3EgJiYKKwkJZWNobworCX0gfAorCXNlZCAtbmUgIi9eXCQvLFwkIHAiID5hY3R1YWwubWVzc2FnZSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmdyZWV0aW5nIHwgbnVsX3RvX3EgPmFjdHVhbC5oZWxsbzEgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmdyZWV0aW5nIHwgbnVsX3RvX3EgPmFjdHVhbC5oZWxsbzIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0Lm1lc3NhZ2UgYWN0dWFsLm1lc3NhZ2UgJiYKKwl0ZXN0X2NtcCBleHBlY3QuaGVsbG8xIGFjdHVhbC5oZWxsbzEgJiYKKwl0ZXN0X2NtcCBleHBlY3QuaGVsbG8yIGFjdHVhbC5oZWxsbzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIGZpbGUgbW9kZSBhbmQgcmVpdGVyYXRlIGNvbnRlbnQnICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEyMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgVAlncmVldGluZworCU9CSklECisJOjEwMDY0NCAxMjAwMDAgT0JKSUQgT0JKSUQgVAlncmVldGluZworCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlncmVldGluZworCUVPRgorCWVjaG8gImxpbmsgaGVsbG8iID5leHBlY3QuYmxvYiAmJgorCWVjaG8gaGVsbG8gPmhlbGxvICYmCisJY2F0ID5maWxlbW9kZTIuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCUNvbnRlbnQtbGVuZ3RoOiAyMQorCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworCVRleHQtY29udGVudC1sZW5ndGg6IDExCisJQ29udGVudC1sZW5ndGg6IDQ0CisKKwlLIDExCisJc3ZuOnNwZWNpYWwKKwlWIDEKKwkqCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCisJUmV2aXNpb24tbnVtYmVyOiAzCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCVRleHQtY29udGVudC1sZW5ndGg6IDExCisJQ29udGVudC1sZW5ndGg6IDIxCisKKwlQUk9QUy1FTkQKKwlsaW5rIGhlbGxvCisJRU9GCisJdHJ5X2R1bXAgZmlsZW1vZGUyLmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kT0lEX1JFR0VYL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJZ2l0IHNob3cgSEVBRDpncmVldGluZyA+YWN0dWFsLmJsb2IgJiYKKwlnaXQgc2hvdyBIRUFEXjpncmVldGluZyA+YWN0dWFsLnRhcmdldCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmxvYiBhY3R1YWwuYmxvYiAmJgorCXRlc3RfY21wIGhlbGxvIGFjdHVhbC50YXJnZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsdGFzIHN1cHBvcnRlZCcgJworCXJlaW5pdF9naXQgJiYKKwl7CisJCSMgKG9sZCkgaCArIChpbmxpbmUpIGVsbG8gKyAob2xkKSBcbgorCQlwcmludGYgIlNWTlElYiViJXMiICJRXDAwM1wwMDZcMDA1XDAwNCIgIlwwMDFRXDAyMDRcMDAxXDAwMiIgImVsbG8iIHwKKwkJcV90b19udWwKKwl9ID5kZWx0YSAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMS0wNVQwMDowMTowMDIuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAiYWRkIGdyZWV0aW5nIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIxOTk5LTAxLTA2VDAwOjAxOjAwMi4wMDAwMDBaIiBcCisJCQlzdm46bG9nICJjaGFuZ2UgaXQiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMyICYmCisJeworCQllY2hvIFNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzICYmCisJCWVjaG8gJiYKKwkJZWNobyBSZXZpc2lvbi1udW1iZXI6IDEgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJTm9kZS1wYXRoOiBoZWxsbworCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCisJCUNvbnRlbnQtbGVuZ3RoOiAxMworCisJCVBST1BTLUVORAorCQloaQorCisJCUVPRgorCQllY2hvIFJldmlzaW9uLW51bWJlcjogMiAmJgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzMikgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMyKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wczIgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlOb2RlLXBhdGg6IGhlbGxvCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogY2hhbmdlCisJCVRleHQtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJRU9GCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8ZGVsdGEpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQoKDEwICsgJCh3YyAtYyA8ZGVsdGEpKSkgJiYKKwkJZWNobyAmJgorCQllY2hvIFBST1BTLUVORCAmJgorCQljYXQgZGVsdGEKKwl9ID5kZWx0YS5kdW1wICYmCisJdHJ5X2R1bXAgZGVsdGEuZHVtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXJ0eSBkZWx0YXMgc3VwcG9ydGVkJyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA3NTUgMTAwNjQ0IE9CSklEIE9CSklEIE0Jc2NyaXB0LnNoCisJRU9GCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIxOTk5LTAzLTA2VDAwOjAxOjAwMi4wMDAwMDBaIiBcCisJCQlzdm46bG9nICJtYWtlIGFuIGV4ZWN1dGFibGUsIG9yIGNobW9kIC14IGl0IiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnJldnByb3BzICYmCisJeworCQllY2hvIFNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzICYmCisJCWVjaG8gJiYKKwkJZWNobyBSZXZpc2lvbi1udW1iZXI6IDEgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxyZXZwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cmV2cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHJldnByb3BzICYmCisJCWVjaG8gJiYKKwkJY2F0IDw8LVxFT0YgJiYKKwkJTm9kZS1wYXRoOiBzY3JpcHQuc2gKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJVGV4dC1jb250ZW50LWxlbmd0aDogMAorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzOQorCQlDb250ZW50LWxlbmd0aDogMzkKKworCQlLIDE0CisJCXN2bjpleGVjdXRhYmxlCisJCVYgNAorCQl0cnVlCisJCVBST1BTLUVORAorCisJCUVPRgorCQllY2hvIFJldmlzaW9uLW51bWJlcjogMiAmJgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHJldnByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxyZXZwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcmV2cHJvcHMgJiYKKwkJZWNobyAmJgorCQljYXQgPDwtXEVPRgorCQlOb2RlLXBhdGg6IHNjcmlwdC5zaAorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGNoYW5nZQorCQlQcm9wLWRlbHRhOiB0cnVlCisJCVByb3AtY29udGVudC1sZW5ndGg6IDMwCisJCUNvbnRlbnQtbGVuZ3RoOiAzMAorCisJCUQgMTQKKwkJc3ZuOmV4ZWN1dGFibGUKKwkJUFJPUFMtRU5ECisJCUVPRgorCX0gPnByb3BkZWx0YS5kdW1wICYmCisJdHJ5X2R1bXAgcHJvcGRlbHRhLmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXN0ZGluIHwKKwkJc2VkICJzLyRPSURfUkVHRVgvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3BlcnRpZXMgb24gLycgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJT0JKSUQKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZ3JlZXRpbmcKKwlFT0YKKwlzZWQgLWUgInMvWCQvLyIgPDwtXEVPRiA+Y2hhbmdlcm9vdC5kdW1wICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJVGV4dC1jb250ZW50LWxlbmd0aDogMAorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCVJldmlzaW9uLW51bWJlcjogMgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogWAorCU5vZGUta2luZDogZGlyCisJTm9kZS1hY3Rpb246IGNoYW5nZQorCVByb3AtZGVsdGE6IHRydWUKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiA0MworCUNvbnRlbnQtbGVuZ3RoOiA0MworCisJSyAxMAorCXN2bjppZ25vcmUKKwlWIDExCisJYnVpbGQtYXJlYQorCisJUFJPUFMtRU5ECisJRU9GCisJdHJ5X2R1bXAgY2hhbmdlcm9vdC5kdW1wICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tYWx3YXlzIC0tc3RkaW4gfAorCQlzZWQgInMvJE9JRF9SRUdFWC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsdGFzIGZvciB0eXBlY2hhbmdlJyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMjAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIFQJdGVzdC1maWxlCisJT0JKSUQKKwk6MTAwNzU1IDEyMDAwMCBPQkpJRCBPQkpJRCBUCXRlc3QtZmlsZQorCU9CSklECisJOjAwMDAwMCAxMDA3NTUgT0JKSUQgT0JKSUQgQQl0ZXN0LWZpbGUKKwlFT0YKKwljYXQgPmRlbGV0ZXByb3AuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogdGVzdC1maWxlCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGFkZAorCVByb3AtZGVsdGE6IHRydWUKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNQorCVRleHQtY29udGVudC1sZW5ndGg6IDE3CisJQ29udGVudC1sZW5ndGg6IDUyCisKKwlLIDE0CisJc3ZuOmV4ZWN1dGFibGUKKwlWIDAKKworCVBST1BTLUVORAorCWxpbmsgdGVzdGluZyAxMjMKKworCVJldmlzaW9uLW51bWJlcjogMgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogdGVzdC1maWxlCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGNoYW5nZQorCVByb3AtZGVsdGE6IHRydWUKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1MworCVRleHQtY29udGVudC1sZW5ndGg6IDE3CisJQ29udGVudC1sZW5ndGg6IDcwCisKKwlLIDExCisJc3ZuOnNwZWNpYWwKKwlWIDEKKwkqCisJRCAxNAorCXN2bjpleGVjdXRhYmxlCisJUFJPUFMtRU5ECisJbGluayB0ZXN0aW5nIDIzMQorCisJUmV2aXNpb24tbnVtYmVyOiAzCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiB0ZXN0LWZpbGUKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1kZWx0YTogdHJ1ZQorCVByb3AtY29udGVudC1sZW5ndGg6IDI3CisJVGV4dC1jb250ZW50LWxlbmd0aDogMTcKKwlDb250ZW50LWxlbmd0aDogNDQKKworCUQgMTEKKwlzdm46c3BlY2lhbAorCVBST1BTLUVORAorCWxpbmsgdGVzdGluZyAzMjEKKwlFT0YKKwl0cnlfZHVtcCBkZWxldGVwcm9wLmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kT0lEX1JFR0VYL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWx0YXMgbmVlZCBub3QgY29uc3VtZSB0aGUgd2hvbGUgcHJlaW1hZ2UnICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEyMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgVAlwb3N0aW1hZ2UKKwlPQkpJRAorCToxMDA2NDQgMTIwMDAwIE9CSklEIE9CSklEIFQJcG9zdGltYWdlCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCXBvc3RpbWFnZQorCUVPRgorCWVjaG8gImZpcnN0IHByZWltYWdlIiA+ZXhwZWN0LjEgJiYKKwlwcmludGYgdGFyZ2V0ID5leHBlY3QuMiAmJgorCXByaW50ZiBsbmsgPmV4cGVjdC4zICYmCisJeworCQlwcmludGYgIlNWTlElYiViJWIiICJRUVwwMTdcMDAxXDAxNyIgIlwwMjE3IiAiZmlyc3QgcHJlaW1hZ2VcbiIgfAorCQlxX3RvX251bAorCX0gPmRlbHRhLjEgJiYKKwl7CisJCXByb3BlcnRpZXMgc3ZuOnNwZWNpYWwgIioiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+c3ltbGluay5wcm9wcyAmJgorCXsKKwkJcHJpbnRmICJTVk5RJWIlYiViIiAiUVwwMDJcMDEzXDAwNFwwMTIiICJcMDIwMVwwMDFcMDAxXDAyMTEiICJsbmsgdGFyZ2V0IiB8CisJCXFfdG9fbnVsCisJfSA+ZGVsdGEuMiAmJgorCXsKKwkJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDA0XDAwM1wwMDRRIiAiXDAwMVFcMDAyXDAwMiIgfAorCQlxX3RvX251bAorCX0gPmRlbHRhLjMgJiYKKwl7CisJCWNhdCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogcG9zdGltYWdlCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCVRleHQtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJRU9GCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8ZGVsdGEuMSkgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCgoMTAgKyAkKHdjIC1jIDxkZWx0YS4xKSkpICYmCisJCWVjaG8gJiYKKwkJZWNobyBQUk9QUy1FTkQgJiYKKwkJY2F0IGRlbHRhLjEgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlSZXZpc2lvbi1udW1iZXI6IDIKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiBwb3N0aW1hZ2UKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwkJVGV4dC1kZWx0YTogdHJ1ZQorCQlFT0YKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxzeW1saW5rLnByb3BzKSAmJgorCQllY2hvIFRleHQtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPGRlbHRhLjIpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQoKCQod2MgLWMgPHN5bWxpbmsucHJvcHMpICsgJCh3YyAtYyA8ZGVsdGEuMikpKSAmJgorCQllY2hvICYmCisJCWNhdCBzeW1saW5rLnByb3BzICYmCisJCWNhdCBkZWx0YS4yICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJUmV2aXNpb24tbnVtYmVyOiAzCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogcG9zdGltYWdlCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogY2hhbmdlCisJCVRleHQtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJRU9GCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8ZGVsdGEuMykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCgoMTAgKyAkKHdjIC1jIDxkZWx0YS4zKSkpICYmCisJCWVjaG8gJiYKKwkJZWNobyBQUk9QUy1FTkQgJiYKKwkJY2F0IGRlbHRhLjMgJiYKKwkJZWNobworCX0gPmRlbHRhcGFydGlhbC5kdW1wICYmCisJdHJ5X2R1bXAgZGVsdGFwYXJ0aWFsLmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kT0lEX1JFR0VYL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUQ6cG9zdGltYWdlID5hY3R1YWwuMyAmJgorCWdpdCBzaG93IEhFQUReOnBvc3RpbWFnZSA+YWN0dWFsLjIgJiYKKwlnaXQgc2hvdyBIRUFEXl46cG9zdGltYWdlID5hY3R1YWwuMSAmJgorCXRlc3RfY21wIGV4cGVjdC4xIGFjdHVhbC4xICYmCisJdGVzdF9jbXAgZXhwZWN0LjIgYWN0dWFsLjIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMyBhY3R1YWwuMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBoYW5nIGZvciBkZWx0YSB0cnlpbmcgdG8gcmVhZCBwYXN0IGVuZCBvZiBwcmVpbWFnZScgJworCXJlaW5pdF9naXQgJiYKKwl7CisJCSMgQ09QWSAxCisJCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwMVwwMDFcMDAyUSIgIlwwMDFRIiB8CisJCXFfdG9fbnVsCisJfSA+Z3JlZWR5LmRlbHRhICYmCisJeworCQljYXQgPDwtXEVPRiAmJgorCQlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJCVJldmlzaW9uLW51bWJlcjogMQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IGJvb3RzdHJhcAorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlUZXh0LWRlbHRhOiB0cnVlCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUVPRgorCQllY2hvIFRleHQtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPGdyZWVkeS5kZWx0YSkgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCgoMTAgKyAkKHdjIC1jIDxncmVlZHkuZGVsdGEpKSkgJiYKKwkJZWNobyAmJgorCQllY2hvIFBST1BTLUVORCAmJgorCQljYXQgZ3JlZWR5LmRlbHRhICYmCisJCWVjaG8KKwl9ID5ncmVlZHlkZWx0YS5kdW1wICYmCisJdHJ5X2R1bXAgZ3JlZWR5ZGVsdGEuZHVtcCBtdXN0X2ZhaWwgbWlnaHRfZmFpbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgc3ZuIHJlcG8nICcKKwlzdm5jb25mPSRQV0Qvc3ZuY29uZiAmJgorCW1rZGlyIC1wICIkc3ZuY29uZiIgJiYKKworCWlmCisJCXN2bmFkbWluIC1oID4vZGV2L251bGwgMj4mMSAmJgorCQlzdm5hZG1pbiBjcmVhdGUgc2ltcGxlLXN2biAmJgorCQlzdm5hZG1pbiBsb2FkIHNpbXBsZS1zdm4gPCIkVEVTVF9ESVJFQ1RPUlkvdDkxMzUvc3ZuLmR1bXAiICYmCisJCXN2biBleHBvcnQgLS1jb25maWctZGlyICIkc3ZuY29uZiIgImZpbGU6Ly8kUFdEL3NpbXBsZS1zdm4iIHNpbXBsZS1zdm5jbworCXRoZW4KKwkJdGVzdF9zZXRfcHJlcmVxIFNWTlJFUE8KKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNWTlJFUE8gJ3Q5MTM1L3N2bi5kdW1wJyAnCisJbWtkaXIgLXAgc2ltcGxlLWdpdCAmJgorCSgKKwkJY2Qgc2ltcGxlLWdpdCAmJgorCQlyZWluaXRfZ2l0ICYmCisJCXRyeV9kdW1wICIkVEVTVF9ESVJFQ1RPUlkvdDkxMzUvc3ZuLmR1bXAiCisJKSAmJgorCSgKKwkJY2Qgc2ltcGxlLXN2bmNvICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgZmV0Y2ggLi4vc2ltcGxlLWdpdCBtYXN0ZXIgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgRkVUQ0hfSEVBRAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDExLXN2bi1kYS5zaCBiL3QvdDkwMTEtc3ZuLWRhLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiMWVmMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDExLXN2bi1kYS5zaApAQCAtMCwwICsxLDI0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgcGFyc2luZyBvZiBzdm5kaWZmMCBmaWxlcworCitVc2luZyB0aGUgInRlc3Qtc3ZuLWZlIC1kIiBoZWxwZXIsIGNoZWNrIHRoYXQgc3ZuLWZlIGNvcnJlY3RseQoraW50ZXJwcmV0cyBkZWx0YXMgdXNpbmcgdmFyaW91cyBmYWNpbGl0aWVzIChzb21lIGZyb20gdGhlIHNwZWMsCitzb21lIG9ubHkgbGVhcm5lZCBmcm9tIHByYWN0aWNlKS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCis+ZW1wdHkKK3ByaW50ZiBmb28gPnByZWltYWdlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCBlbXB0eSBkZWx0YScgJworCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGVtcHR5IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsdGEgY2FuIGVtcHR5IGZpbGUnICcKKwlwcmludGYgIlNWTlEiIHwgcV90b19udWwgPmNsZWFyLmRlbHRhICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIuZGVsdGEgNCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3Qgc3ZuZGlmZjInICcKKwlwcmludGYgIlNWTlwwMDIiID5iYWQuZmlsZXR5cGUgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBiYWQuZmlsZXR5cGUgNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmUtd2luZG93IGVtcHR5IGRlbHRhJyAnCisJcHJpbnRmICJTVk5RJXMiICJRUVFRUSIgfCBxX3RvX251bCA+Y2xlYXIub25ld2luZG93ICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIub25ld2luZG93IDkgPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IGluY29tcGxldGUgd2luZG93IGhlYWRlcicgJworCXByaW50ZiAiU1ZOUSVzIiAiUVFRUVEiIHwgcV90b19udWwgPmNsZWFyLm9uZXdpbmRvdyAmJgorCXByaW50ZiAiU1ZOUSVzIiAiUVEiIHwgcV90b19udWwgPmNsZWFyLnBhcnRpYWx3aW5kb3cgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5vbmV3aW5kb3cgNiAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnBhcnRpYWx3aW5kb3cgNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgZGVjbGFyZWQgZGVsdGEgbG9uZ2VyIHRoYW4gYWN0dWFsIGRlbHRhJyAnCisJcHJpbnRmICJTVk5RJXMiICJRUVFRUSIgfCBxX3RvX251bCA+Y2xlYXIub25ld2luZG93ICYmCisJcHJpbnRmICJTVk5RJXMiICJRUSIgfCBxX3RvX251bCA+Y2xlYXIucGFydGlhbHdpbmRvdyAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLm9uZXdpbmRvdyAxNCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnBhcnRpYWx3aW5kb3cgOQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28td2luZG93IGVtcHR5IGRlbHRhJyAnCisJcHJpbnRmICJTVk5RJXMlcyIgIlFRUVFRIiAiUVFRUVEiIHwgcV90b19udWwgPmNsZWFyLnR3b3dpbmRvdyAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnR3b3dpbmRvdyAxNCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIudHdvd2luZG93IDEzICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub2lzeSB6ZXJvZXMnICcKKwlwcmludGYgIlNWTlElcyIgXAorCQkiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJRUVFRUSIgfAorCQl0ciBSICJcMjAwIiB8CisJCXFfdG9fbnVsID5jbGVhci5ub2lzeSAmJgorCWxlbj0kKHdjIC1jIDxjbGVhci5ub2lzeSkgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5ub2lzeSAkbGVuICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgdmFyaWFibGUtbGVuZ3RoIGludCBpbiBtYWdpYycgJworCXByaW50ZiAiU1ZOUlEiIHwgdHIgUiAiXDIwMCIgfCBxX3RvX251bCA+Y2xlYXIuYmFkbWFnaWMgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5iYWRtYWdpYyA1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCB0cnVuY2F0ZWQgaW50ZWdlcicgJworCXByaW50ZiAiU1ZOUSVzJXMiICJRUVFRUSIgIlFRUVFSUlEiIHwKKwkJdHIgUiAiXDIwMCIgfAorCQlxX3RvX251bCA+Y2xlYXIuZnVsbGludCAmJgorCXByaW50ZiAiU1ZOUSVzJXMiICJRUVFRUSIgIlFRUVFSUiIgfAorCQl0ciBSVCAiXDIwMSIgfAorCQlxX3RvX251bCA+Y2xlYXIucGFydGlhbGludCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLmZ1bGxpbnQgMTUgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5mdWxsaW50IDE2ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucGFydGlhbGludCAxNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25lbXB0eSAoYnV0IHVudXNlZCkgcHJlaW1hZ2UgdmlldycgJworCXByaW50ZiAiU1ZOUSViIiAiUVwwMDNRUVEiIHwgcV90b19udWwgPmNsZWFyLnJlYWRwcmVpbWFnZSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnJlYWRwcmVpbWFnZSA5ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWltYWdlIHZpZXc6IHJpZ2h0IGVuZHBvaW50IGNhbm5vdCBiYWNrdHJhY2snICcKKwlwcmludGYgIlNWTlElYiViIiAiUVwwMDNRUVEiICJRXDAwMlFRUSIgfAorCQlxX3RvX251bCA+Y2xlYXIuYmFja3RyYWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIuYmFja3RyYWNrIDE0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWltYWdlIHZpZXc6IGxlZnQgZW5kcG9pbnQgY2FuIGFkdmFuY2UnICcKKwlwcmludGYgIlNWTlElYiViIiAiUVwwMDNRUVEiICJcMDAxXDAwMlFRUSIgfAorCQlxX3RvX251bCA+Y2xlYXIucHJlc2hyaW5rICYmCisJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDAzUVFRIiAiXDAwMVwwMDFRUVEiIHwKKwkJcV90b19udWwgPmNsZWFyLnNocmlua2JhY2t0cmFjayAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnByZXNocmluayAxNCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIuc2hyaW5rYmFja3RyYWNrIDE0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVpbWFnZSB2aWV3OiBvZmZzZXRzIGNvbXBhcmVkIGJ5IHZhbHVlJyAnCisJcHJpbnRmICJTVk5RJWIlYiIgIlwwMDFcMDAxUVFRIiAiXDAyMDBRXDAwM1FRUSIgfAorCQlxX3RvX251bCA+Y2xlYXIubm9pc3liYWNrdHJhY2sgJiYKKwlwcmludGYgIlNWTlElYiViIiAiXDAwMVwwMDFRUVEiICJcMDIwMFwwMDFcMDAyUVFRIiB8CisJCXFfdG9fbnVsID5jbGVhci5ub2lzeWFkdmFuY2UgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5ub2lzeWJhY2t0cmFjayAxNSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLm5vaXN5YWR2YW5jZSAxNSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2UgdmlldzogcmVqZWN0IHRydW5jYXRlZCBwcmVpbWFnZScgJworCXByaW50ZiAiU1ZOUSViIiAiXDAxMFFRUVEiIHwgcV90b19udWwgPmNsZWFyLmxhdGVlbXB0eXJlYWQgJiYKKwlwcmludGYgIlNWTlElYiIgIlwwMTBcMDAxUVFRIiB8IHFfdG9fbnVsID5jbGVhci5sYXRlbm9uZW1wdHlyZWFkICYmCisJcHJpbnRmICJTVk5RJWIiICJcMDAxXDAxMFFRUSIgfCBxX3RvX251bCA+Y2xlYXIubG9uZ3JlYWQgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sYXRlZW1wdHlyZWFkIDkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sYXRlbm9uZW1wdHlyZWFkIDkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sb25ncmVhZCA5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmJpZCB1bmNvbnN1bWVkIGlubGluZSBkYXRhJyAnCisJcHJpbnRmICJTVk5RJWIlcyViJXMiICJRUVFRXDAwMyIgImJhciIgIlFRUVFcMDAxIiAieCIgfAorCQlxX3RvX251bCA+aW5saW5lLmNsZWFyICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgaW5saW5lLmNsZWFyIDE4ID5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IHRydW5jYXRlZCBpbmxpbmUgZGF0YScgJworCXByaW50ZiAiU1ZOUSViJXMiICJRUVFRXDAwMyIgImIiIHwgcV90b19udWwgPmlubGluZS50cnVuYyAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGlubGluZS50cnVuYyAxMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgdHJ1bmNhdGVkIGlubGluZSBkYXRhIChhZnRlciBpbnN0cnVjdGlvbiBzZWN0aW9uKScgJworCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAwMVwwMDFcMDAzIiAiXDAyMDEiICJiIiB8IHFfdG9fbnVsID5pbnNuLnRydW5jICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgaW5zbi50cnVuYyAxMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5ZnJvbV9kYXRhJyAnCisJZWNobyBoaSA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiViIiAiUVFcMDAzXDAwMVwwMDMiICJcMDIwMyIgImhpXG4iIHwgcV90b19udWwgPmNvcHlkYXQgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5ZGF0IDEzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGNvcHlmcm9tX2RhdGEnICcKKwllY2hvIGhpID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViJWIlYiViIiAiUVFcMDAzXDAwMlwwMDMiICJcMDIwMVwwMjAyIiAiaGlcbiIgXAorCQkiUVFRXDAwMlEiICJcMDIwMFEiIHwgcV90b19udWwgPmNvcHkubXVsdGkgJiYKKwlsZW49JCh3YyAtYyA8Y29weS5tdWx0aSkgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5Lm11bHRpICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb21wbGV0ZSBtdWx0aXBsZSBpbnNuJyAnCisJcHJpbnRmICJTVk5RJWIlYiViIiAiUVFcMDAzXDAwMlwwMDMiICJcMDIwM1wwMjAwIiAiaGlcbiIgfAorCQlxX3RvX251bCA+Y29weS5wYXJ0aWFsICYmCisJbGVuPSQod2MgLWMgPGNvcHkucGFydGlhbCkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5LnBhcnRpYWwgJGxlbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXRjaCBhdHRlbXB0IHRvIGNvcHkgbWlzc2luZyBkYXRhJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzJWIlcyIgIlFRXDAwMlwwMDJcMDAxIiAiXDAyMDFcMDIwMSIgIlgiIFwKKwkJCSJRUVFRXDAwMiIgIllaIiB8CisJCXFfdG9fbnVsID5jb3B5LmluY29tcGxldGUgJiYKKwlsZW49JCh3YyAtYyA8Y29weS5pbmNvbXBsZXRlKSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHkuaW5jb21wbGV0ZSAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHRhcmdldCB0byByZXBlYXQgZGF0YScgJworCXByaW50ZiBmb29mb28gPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAwNlwwMDRcMDAzIiAiXDAyMDNcMDEwMFwwMDNRIiAiZm9vIiB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0LnJlcGVhdCAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0LnJlcGVhdCkgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5dGFyZ2V0LnJlcGVhdCAkbGVuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHRhcmdldCBvdXQgb2Ygb3JkZXInICcKKwlwcmludGYgZm9vb29mID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViJXMiIFwKKwkJIlFRXDAwNlwwMDdcMDAzIiAiXDAyMDNcMDEwMVwwMDJcMDEwMVwwMDFcMDEwMVEiICJmb28iIHwKKwkJcV90b19udWwgPmNvcHl0YXJnZXQucmV2ZXJzZSAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0LnJldmVyc2UpICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5yZXZlcnNlICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0Y2ggY29weWZyb20gZnV0dXJlJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzIiAiUVFcMDA0XDAwNFwwMDMiICJcMDIwMlwwMTAxXDAwMlwwMjAxIiAiWFlaIiB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0LmluZnV0dXJlICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQuaW5mdXR1cmUpICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5pbmZ1dHVyZSAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgdG8gc3VzdGFpbicgJworCXByaW50ZiBYWVhZWFlYWVhZWFogPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAxNFwwMDRcMDAzIiAiXDAyMDJcMDExMVFcMDIwMSIgIlhZWiIgfAorCQlxX3RvX251bCA+Y29weXRhcmdldC5zdXN0YWluICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQuc3VzdGFpbikgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5dGFyZ2V0LnN1c3RhaW4gJGxlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXRjaCBjb3B5IHRoYXQgb3ZlcmZsb3dzJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzIiAiUVFcMDAzXDAwM1wwMDEiICJcMDIwMVwwMTc3USIgWCB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0Lm92ZXJmbG93ICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQub3ZlcmZsb3cpICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5vdmVyZmxvdyAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHNvdXJjZScgJworCXByaW50ZiBmb28gPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1wwMDNcMDAyUSIgIlwwMDNRIiB8IHFfdG9fbnVsID5jb3B5c291cmNlLmFsbCAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UuYWxsIDExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgYmFja3dhcmRzJyAnCisJcHJpbnRmIG9vZiA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDAzXDAwM1wwMDZRIiAiXDAwMVwwMDJcMDAxXDAwMVwwMDFRIiB8CisJCXFfdG9fbnVsID5jb3B5c291cmNlLnJldiAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UucmV2IDE1ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29mZnNldHMgYXJlIHJlbGF0aXZlIHRvIHdpbmRvdycgJworCXByaW50ZiBmbyA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiViJWIiICJRXDAwM1wwMDFcMDAyUSIgIlwwMDFRIiBcCisJCSJcMDAyXDAwMVwwMDFcMDAyUSIgIlwwMDFRIiB8CisJCXFfdG9fbnVsID5jb3B5c291cmNlLnR3byAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UudHdvIDE4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4YW1wbGUgZnJvbSBub3Rlcy9zdm5kaWZmJyAnCisJcHJpbnRmIGFhYWFjY2NjZGRkZGRkZGQgPmV4cGVjdCAmJgorCXByaW50ZiBhYWFhYmJiYmNjY2MgPnNvdXJjZSAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFcMDE0XDAyMFwwMDdcMDAxIiBcCisJCSJcMDA0UVwwMDRcMDEwXDAyMDFcMDEwN1wwMTAiIGQgfAorCQlxX3RvX251bCA+ZGVsdGEuZXhhbXBsZSAmJgorCWxlbj0kKHdjIC1jIDxkZWx0YS5leGFtcGxlKSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHNvdXJjZSBkZWx0YS5leGFtcGxlICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDIwLXJlbW90ZS1zdm4uc2ggYi90L3Q5MDIwLXJlbW90ZS1zdm4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmZjYTA4ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkwMjAtcmVtb3RlLXN2bi5zaApAQCAtMCwwICsxLDg5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdHMgcmVtb3RlLXN2bicKKworLiAuL3Rlc3QtbGliLnNoCisKK01BUktTUEFUSD0uZ2l0L2luZm8vZmFzdC1pbXBvcnQvcmVtb3RlLXN2bgorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUFlUSE9OCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHJlbW90ZS1zdm4gdGVzdHMsIHB5dGhvbiBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworIyBPdmVycmlkZSBzdm5yZHVtcCB3aXRoIG91ciBzaW11bGF0b3IKK1BBVEg9IiRIT01FOiRQQVRIIgorZXhwb3J0IFBBVEggUFlUSE9OX1BBVEggR0lUX0JVSUxEX0RJUgorCit3cml0ZV9zY3JpcHQgIiRIT01FL3N2bnJkdW1wIiA8PFxFT0YKK2V4ZWMgIiRQWVRIT05fUEFUSCIgIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvc3ZuLWZlL3N2bnJkdW1wX3NpbS5weSIgIiRAIgorRU9GCisKK2luaXRfZ2l0ICgpIHsKKwlybSAtZnIgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJI2dpdCByZW1vdGUgYWRkIHN2bnNpbSB0ZXN0c3ZuOjpzaW06Ly8vJFRFU1RfRElSRUNUT1JZL3Q5MDIwL2V4YW1wbGUuc3ZucmR1bXAKKwkjIGxldCdzIHJldXNlIGFuIGV4aXN0aW5nIGR1bXAgZmlsZSE/CisJZ2l0IHJlbW90ZSBhZGQgc3Zuc2ltICJ0ZXN0c3ZuOjpzaW06Ly8kVEVTVF9ESVJFQ1RPUlkvdDkxNTQvc3ZuLmR1bXAiCisJZ2l0IHJlbW90ZSBhZGQgc3ZuZmlsZSAidGVzdHN2bjo6ZmlsZTovLyRURVNUX0RJUkVDVE9SWS90OTE1NC9zdm4uZHVtcCIKK30KKworaWYgdGVzdCAtZSAiJEdJVF9CVUlMRF9ESVIvZ2l0LXJlbW90ZS10ZXN0c3ZuIgordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBSRU1PVEVfU1ZOCitmaQorCit0ZXN0X2RlYnVnICcKKwlnaXQgLS12ZXJzaW9uCisJdHlwZSBnaXQKKwl0eXBlIHN2bnJkdW1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVNT1RFX1NWTiAnc2ltcGxlIGZldGNoJyAnCisJaW5pdF9naXQgJiYKKwlnaXQgZmV0Y2ggc3Zuc2ltICYmCisJdGVzdF9jbXAgLmdpdC9yZWZzL3N2bi9zdm5zaW0vbWFzdGVyIC5naXQvcmVmcy9yZW1vdGVzL3N2bnNpbS9tYXN0ZXIgICYmCisJY3AgLmdpdC9yZWZzL3JlbW90ZXMvc3Zuc2ltL21hc3RlciBtYXN0ZXIuZ29vZAorJworCit0ZXN0X2RlYnVnICcKKwljYXQgLmdpdC9yZWZzL3N2bi9zdm5zaW0vbWFzdGVyCisJY2F0IC5naXQvcmVmcy9yZW1vdGVzL3N2bnNpbS9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRU1PVEVfU1ZOICdyZXBlYXRlZCBmZXRjaCwgbm90aGluZyBzaGFsbCBjaGFuZ2UnICcKKwlnaXQgZmV0Y2ggc3Zuc2ltICYmCisJdGVzdF9jbXAgbWFzdGVyLmdvb2QgLmdpdC9yZWZzL3JlbW90ZXMvc3Zuc2ltL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFTU9URV9TVk4gJ2ZldGNoIGZyb20gYSBmaWxlOi8vIHVybCBnaXZlcyB0aGUgc2FtZSByZXN1bHQnICcKKwlnaXQgZmV0Y2ggc3ZuZmlsZQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFJFTU9URV9TVk4gJ3RoZSBzaGExIGRpZmZlciBiZWNhdXNlIHRoZSBnaXQtc3ZuLWlkIGxpbmUgaW4gdGhlIGNvbW1pdCBtc2cgY29udGFpbnMgdGhlIHVybCcgJworCXRlc3RfY21wIC5naXQvcmVmcy9yZW1vdGVzL3N2bmZpbGUvbWFzdGVyIC5naXQvcmVmcy9yZW1vdGVzL3N2bnNpbS9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRU1PVEVfU1ZOICdtYXJrLWZpbGUgcmVnZW5lcmF0aW9uJyAnCisJIyBmaWx0ZXIgb3V0IGFueSBvdGhlciBtYXJrcywgdGhhdCBjYW4gbm90IGJlIHJlZ2VuZXJhdGVkLiBPbmx5IHVwIHRvIDMgZGlnaXQgcmV2aXNpb25zIGFyZSBhbGxvd2VkIGhlcmUKKwlncmVwICI6WzAtOV1cezEsM1x9ICIgJE1BUktTUEFUSC9zdm5zaW0ubWFya3MgPiAkTUFSS1NQQVRIL3N2bnNpbS5tYXJrcy5vbGQgJiYKKwlybSAkTUFSS1NQQVRIL3N2bnNpbS5tYXJrcyAmJgorCWdpdCBmZXRjaCBzdm5zaW0gJiYKKwl0ZXN0X2NtcCAkTUFSS1NQQVRIL3N2bnNpbS5tYXJrcy5vbGQgJE1BUktTUEFUSC9zdm5zaW0ubWFya3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRU1PVEVfU1ZOICdpbmNyZW1lbnRhbCBpbXBvcnRzIG11c3QgbGVhZCB0byB0aGUgc2FtZSBoZWFkJyAnCisJU1ZOUk1BWD0zICYmCisJZXhwb3J0IFNWTlJNQVggJiYKKwlpbml0X2dpdCAmJgorCWdpdCBmZXRjaCBzdm5zaW0gJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlZnMvc3ZuL3N2bnNpbS9tYXN0ZXIgLmdpdC9yZWZzL3JlbW90ZXMvc3Zuc2ltL21hc3RlciAgJiYKKwl1bnNldCBTVk5STUFYICYmCisJZ2l0IGZldGNoIHN2bnNpbSAmJgorCXRlc3RfY21wIG1hc3Rlci5nb29kIC5naXQvcmVmcy9yZW1vdGVzL3N2bnNpbS9tYXN0ZXIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGJyYW5jaCAtYScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2ggYi90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMzMDlhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaApAQCAtMCwwICsxLDMyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBiYXNpYyB0ZXN0cycKK0dJVF9TVk5fTENfQUxMPSR7TENfQUxMOi0kTEFOR30KKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2Nhc2UgIiRHSVRfU1ZOX0xDX0FMTCIgaW4KKyouVVRGLTgpCisJdGVzdF9zZXRfcHJlcmVxIFVURjgKKwk7OworKikKKwlzYXkgIiMgVVRGLTggbG9jYWxlIG5vdCBzZXQsIHNvbWUgdGVzdHMgc2tpcHBlZCAoJEdJVF9TVk5fTENfQUxMKSIKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIC0tdmVyc2lvbiB3b3JrcyBhbnl3aGVyZScgJworCW5vbmdpdCBnaXQgc3ZuIC0tdmVyc2lvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGhlbHAgd29ya3MgYW55d2hlcmUnICcKKwlub25naXQgZ2l0IHN2biBoZWxwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbml0aWFsaXplIGdpdCBzdm4nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQllY2hvIGZvbyA+Zm9vICYmCisJCWxuIC1zIGZvbyBmb28ubGluayAmJgorCQlta2RpciAtcCBkaXIvYS9iL2MvZC9lICYmCisJCWVjaG8gImRlZXAgZGlyIiA+ZGlyL2EvYi9jL2QvZS9maWxlICYmCisJCW1rZGlyIGJhciAmJgorCQllY2hvICJ6enoiID5iYXIvenp6ICYmCisJCWVjaG8gIiMhL2Jpbi9zaCIgPmV4ZWMuc2ggJiYKKwkJY2htb2QgK3ggZXhlYy5zaCAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorCSkgJiYKKwlybSAtcmYgaW1wb3J0ICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbXBvcnQgYW4gU1ZOIHJldmlzaW9uIGludG8gZ2l0JyBcCisgICAgJ2dpdCBzdm4gZmV0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IGZyb20gc3ZuIiAnc3ZuIGNvICIkc3ZucmVwbyIgIiRTVk5fVFJFRSInCisKK25hbWU9J3RyeSBhIGRlZXAgLS1ybWRpciB3aXRoIGEgY29tbWl0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2ggcmVtb3Rlcy9naXQtc3ZuICYmCisJbXYgZGlyL2EvYi9jL2QvZS9maWxlIGRpci9maWxlICYmCisJY3AgZGlyL2ZpbGUgZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgZGlyL2EvYi9jL2QvZS9maWxlIGRpci9maWxlIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLWQgIiRTVk5fVFJFRSIvZGlyICYmIHRlc3QgISAtZCAiJFNWTl9UUkVFIi9kaXIvYScKKworCituYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBmaWxlIHRvIGRpcmVjdG9yeSAjMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCisJbWtkaXIgZGlyL25ld19maWxlICYmCisJbXYgZGlyL2ZpbGUgZGlyL25ld19maWxlL2ZpbGUgJiYKKwltdiBkaXIvbmV3X2ZpbGUgZGlyL2ZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGRpci9maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkaXIvZmlsZS9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAnJG5hbWUnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaAorIgorCisKK25hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGRpcmVjdG9yeSB0byBmaWxlICMxJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtcmYgZGlyICIkR0lUX0RJUiIvaW5kZXggJiYKKwlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2gyIHJlbW90ZXMvZ2l0LXN2biAmJgorCW12IGJhci96enogenp6ICYmCisJcm0gLXJmIGJhciAmJgorCW12IHp6eiBiYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tIGJhci96enogJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIGJhciAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2gyCisnCisKKworbmFtZT0nZGV0ZWN0IG5vZGUgY2hhbmdlIGZyb20gZmlsZSB0byBkaXJlY3RvcnkgIzInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJworCXJtIC1mICIkR0lUX0RJUiIvaW5kZXggJiYKKwlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2gzIHJlbW90ZXMvZ2l0LXN2biAmJgorCXJtIGJhci96enogJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGJhci96enogJiYKKwlta2RpciBiYXIvenp6ICYmCisJZWNobyB5eXkgPiBiYXIvenp6L3l5eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYmFyL3p6ei95eXkgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoMyAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC1kICIkU1ZOX1RSRUUiL2Jhci96enogJiYKKwl0ZXN0IC1lICIkU1ZOX1RSRUUiL2Jhci96enoveXl5CisnCisKK25hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGRpcmVjdG9yeSB0byBmaWxlICMyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtZiAiJEdJVF9ESVIiL2luZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoNCByZW1vdGVzL2dpdC1zdm4gJiYKKwlybSAtcmYgZGlyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAtLSBkaXIvZmlsZSAmJgorCXRvdWNoIGRpciAmJgorCWVjaG8gYXNkZiA+IGRpciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDQKKycKKworCituYW1lPSdyZW1vdmUgZXhlY3V0YWJsZSBiaXQgZnJvbSBhIGZpbGUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAiJG5hbWUiICcKKwlybSAtZiAiJEdJVF9ESVIiL2luZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoNSByZW1vdGVzL2dpdC1zdm4gJiYKKwljaG1vZCAteCBleGVjLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAhIC14ICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCisKKworbmFtZT0nYWRkIGV4ZWN1dGFibGUgYml0IGJhY2sgZmlsZScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICIkbmFtZSIgJworCWNobW9kICt4IGV4ZWMuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IGV4ZWMuc2ggJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoNSAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC14ICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCisKKworbmFtZT0nZXhlY3V0YWJsZSBmaWxlIGJlY29tZXMgYSBzeW1saW5rIHRvIGZpbGUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICIkbmFtZSIgJworCXJtIGV4ZWMuc2ggJiYKKwlsbiAtcyBmaWxlIGV4ZWMuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IGV4ZWMuc2ggJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoNSAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC1oICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCisKK25hbWU9J25ldyBzeW1saW5rIGlzIGFkZGVkIHRvIGEgZmlsZSB0aGF0IHdhcyBhbHNvIGp1c3QgbWFkZSBleGVjdXRhYmxlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTWU1MSU5LUyAiJG5hbWUiICcKKwljaG1vZCAreCBmaWxlICYmCisJbG4gLXMgZmlsZSBleGVjLTIuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUgZXhlYy0yLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAteCAiJFNWTl9UUkVFIi9maWxlICYmCisJdGVzdCAtaCAiJFNWTl9UUkVFIi9leGVjLTIuc2gnCisKK25hbWU9J21vZGlmeSBhIHN5bWxpbmsgdG8gYmVjb21lIGEgZmlsZScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNZTUxJTktTICIkbmFtZSIgJworCWVjaG8gZ2l0IGhlbHAgPmhlbHAgJiYKKwlybSBleGVjLTIuc2ggJiYKKwljcCBoZWxwIGV4ZWMtMi5zaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggZXhlYy0yLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAtZiAiJFNWTl9UUkVFIi9leGVjLTIuc2ggJiYKKwl0ZXN0ICEgLWggIiRTVk5fVFJFRSIvZXhlYy0yLnNoICYmCisJdGVzdF9jbXAgaGVscCAiJFNWTl9UUkVFIi9leGVjLTIuc2gnCisKK25hbWU9ImNvbW1pdCB3aXRoIFVURi04IG1lc3NhZ2U6IGxvY2FsZTogJEdJVF9TVk5fTENfQUxMIgorTENfQUxMPSIkR0lUX1NWTl9MQ19BTEwiCitleHBvcnQgTENfQUxMCisjIFRoaXMgdGVzdCByZWxpZXMgb24gdGhlIHByZXZpb3VzIHRlc3QsIGhlbmNlIHJlcXVpcmVzIFBPU0lYUEVSTSxTWU1MSU5LUwordGVzdF9leHBlY3Rfc3VjY2VzcyBVVEY4LFBPU0lYUEVSTSxTWU1MSU5LUyAiJG5hbWUiICIKKwllY2hvICcjIGhlbGxvJyA+PiBleGVjLTIuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IGV4ZWMtMi5zaCAmJgorCWdpdCBjb21taXQgLW0gJ8Opw6/iiI8nICYmCisJZ2l0IHN2biBzZXQtdHJlZSBIRUFEIgordW5zZXQgTENfQUxMCisKK25hbWU9J3Rlc3QgZmV0Y2ggZnVuY3Rpb25hbGl0eSAoc3ZuID0+IGdpdCkgd2l0aCBhbHRlcm5hdGUgR0lUX1NWTl9JRCcKK0dJVF9TVk5fSUQ9YWx0CitleHBvcnQgR0lUX1NWTl9JRAordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiIFwKKyAgICAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYgZ2l0IHN2biBmZXRjaCAmJgorICAgICBnaXQgcmV2LWxpc3QgLS1wcmV0dHk9cmF3IHJlbW90ZXMvZ2l0LXN2biB8IGdyZXAgXnRyZWUgfCB1bmlxID4gYSAmJgorICAgICBnaXQgcmV2LWxpc3QgLS1wcmV0dHk9cmF3IHJlbW90ZXMvYWx0IHwgZ3JlcCBedHJlZSB8IHVuaXEgPiBiICYmCisgICAgIHRlc3RfY21wIGEgYicKKworbmFtZT0nY2hlY2sgaW1wb3J0ZWQgdHJlZSBjaGVja3N1bXMgZXhwZWN0ZWQgdHJlZSBjaGVja3N1bXMnCitybSAtZiBleHBlY3RlZAoraWYgdGVzdF9oYXZlX3ByZXJlcSBVVEY4Cit0aGVuCisJZWNobyB0cmVlIGRjNjhiMTRiNzMzZTRlYzg1YjA0YWI2ZjcxMjM0MGVkYzVkYzkzNmUgPiBleHBlY3RlZAorZmkKK2NhdCA+PiBleHBlY3RlZCA8PFxFT0YKK3RyZWUgYzMzMjI4OTBkY2Y3NDkwMWYzMmQyMTZmMDVjNTA0NGY2NzBjZTYzMgordHJlZSBkM2NjZDUwMzVmZWFmZDE3YjAzMGM1NzMyZTc4MDhjYzQ5MTIyODUzCit0cmVlIGQwM2UxNjMwMzYzZDQ4ODFlNjg5MjlkNTMyNzQ2YjIwYjA5ODZiODMKK3RyZWUgMTQ5ZDYzY2Q1ODc4MTU1Yzg0NmU4YzU1ZDdkODQ4N2RlMjgzZjg5ZQordHJlZSAzMTJiNzZlNGY2NGNlMTQ4OTNhZWFjODU5MWViMzk2MGIwNjVlMjQ3Cit0cmVlIDE0OWQ2M2NkNTg3ODE1NWM4NDZlOGM1NWQ3ZDg0ODdkZTI4M2Y4OWUKK3RyZWUgZDY2NzI3MGExZjdiMTA5ZjVlYjNhYWVhMjFlZGUxNGI1NmJmZGQ2ZQordHJlZSA4ZjUxZjc0Y2YwMTYzYWZjOWFkNjhhNGIxNTM3Mjg4YzQ1NThiNWE0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU1lNTElOS1MgIiRuYW1lIiAidGVzdF9jbXAgZXhwZWN0ZWQgYSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCBpZiByZW1vdGUgcmVmcyBhcmUgYW1iaWdpb3VzJyAnCisgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorCQliYXI6cmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIG1pZ3JhdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCBpZiBpbml0LWluZyBhIHdvdWxkIGNsb2JiZXIgYSBVUkwnICcKKyAgICAgICAgc3ZuYWRtaW4gY3JlYXRlICIke1BXRH0vc3ZucmVwbzIiICYmCisgICAgICAgIHN2biBta2RpciAtbSAibWtkaXIgYmFyIiAiJHtzdm5yZXBvfTIvYmFyIiAmJgorICAgICAgICBnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorCQkiXmJhcjpyZWZzL3JlbW90ZXMvZ2l0LXN2biQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbml0ICIke3N2bnJlcG99Mi9iYXIiCisgICAgICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICdpbml0IGFsbG93cyB1cyB0byBjb25uZWN0IHRvIGFub3RoZXIgZGlyZWN0b3J5IGluIHRoZSBzYW1lIHJlcG8nICcKKyAgICAgICAgZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGJhciAiJHN2bnJlcG8vYmFyIiAmJgorICAgICAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeYmFyOnJlZnMvcmVtb3Rlcy9iYXIkIiAmJgorICAgICAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkJCSAgICAgICJeOnJlZnMvcmVtb3Rlcy9naXQtc3ZuJCIKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0ICRyZXYgZG9lcyBub3QgY2xvYmJlciBjdXJyZW50IGJyYW5jaCcgJworCWdpdCBzdm4gZmV0Y2ggLWkgYmFyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15LWJhciByZWZzL3JlbW90ZXMvYmFyICYmCisJZWNobyAxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UgMSIgJiYKKwllY2hvIDIgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZSAyIiAmJgorCW9sZF9oZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzdm4gZGNvbW1pdCAtaSBiYXIgSEVBRF4gJiYKKwl0ZXN0ICRvbGRfaGVhZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgcmVmcy9oZWFkcy9teS1iYXIgPSAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwlnaXQgbG9nIHJlZnMvcmVtb3Rlcy9iYXIgfCBncmVwICJjaGFuZ2UgMSIgJiYKKwkhIGdpdCBsb2cgcmVmcy9yZW1vdGVzL2JhciB8IGdyZXAgImNoYW5nZSAyIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1EIG15LWJhcgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJsZSB0byBkY29tbWl0IHRvIGEgc3ViZGlyZWN0b3J5JyAnCisJZ2l0IHN2biBmZXRjaCAtaSBiYXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXIgJiYKKwllY2hvIGFiYyA+IGQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGQgJiYKKwlnaXQgY29tbWl0IC1tICIvYmFyL2Qgc2hvdWxkIGJlIGluIHRoZSBsb2ciICYmCisJZ2l0IHN2biBkY29tbWl0IC1pIGJhciAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgcmVmcy9oZWFkcy9teS1iYXIgcmVmcy9yZW1vdGVzL2JhcikiICYmCisJbWtkaXIgbmV3ZGlyICYmCisJZWNobyBuZXcgPiBuZXdkaXIvZGlyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuZXdkaXIvZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgbmV3IGRpcmVjdG9yeSIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLWkgYmFyICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiByZWZzL2hlYWRzL215LWJhciByZWZzL3JlbW90ZXMvYmFyKSIgJiYKKwllY2hvIGZvbyA+PiBuZXdkaXIvZGlyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBuZXdkaXIvZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAibW9kaWZ5IGEgZmlsZSBpbiBuZXcgZGlyZWN0b3J5IiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtaSBiYXIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIHJlZnMvaGVhZHMvbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IHNob3VsZCBub3QgZmFpbCB3aXRoIGEgdG91Y2hlZCBmaWxlJyAnCisJdGVzdF9jb21taXQgImNvbW1pdC1uZXctZmlsZS1mb28yIiBmb28yICYmCisJdGVzdC10b29sIGNobXRpbWUgPS02MCBmb28gJiYKKwlnaXQgc3ZuIGRjb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHNob3VsZCBub3QgZmFpbCB3aXRoIGEgdG91Y2hlZCBmaWxlJyAnCisJdGVzdC10b29sIGNobXRpbWUgPS02MCBmb28gJiYKKwlnaXQgc3ZuIHJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYmxlIHRvIHNldC10cmVlIHRvIGEgc3ViZGlyZWN0b3J5JyAnCisJZWNobyBjYmEgPiBkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBkICYmCisJZ2l0IGNvbW1pdCAtbSAidXBkYXRlIC9iYXIvZCIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC1pIGJhciBIRUFEICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiByZWZzL2hlYWRzL215LWJhciByZWZzL3JlbW90ZXMvYmFyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LXN2biB3b3JrcyBpbiBhIGJhcmUgcmVwb3NpdG9yeScgJworCW1rZGlyIGJhcmUtcmVwbyAmJgorCSggY2QgYmFyZS1yZXBvICYmCisJZ2l0IGluaXQgLS1iYXJlICYmCisJR0lUX0RJUj0uIGdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCApICYmCisJcm0gLXJmIGJhcmUtcmVwbworCScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1zdm4gd29ya3MgaW4gaW4gYSByZXBvc2l0b3J5IHdpdGggYSBnaXRkaXI6IGxpbmsnICcKKwlta2RpciB3b3JrdHJlZSBnaXRkaXIgJiYKKwkoIGNkIHdvcmt0cmVlICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgaW5pdCAtLXNlcGFyYXRlLWdpdC1kaXIgLi4vZ2l0ZGlyICYmCisJZ2l0IHN2biBmZXRjaCApICYmCisJcm0gLXJmIHdvcmt0cmVlIGdpdGRpcgorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2ggYi90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI2YzRiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaApAQCAtMCwwICsxLDIzMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBwcm9wZXJ0eSB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCitta2RpciBpbXBvcnQKKworYV9jcmxmPQorYV9sZj0KK2FfY3I9CithX25lX2NybGY9CithX25lX2xmPQorYV9uZV9jcj0KK2FfZW1wdHk9CithX2VtcHR5X2xmPQorYV9lbXB0eV9jcj0KK2FfZW1wdHlfY3JsZj0KKworY2QgaW1wb3J0CisJY2F0ID4+IGt3LmMgPDxcRU9GCisvKiBTb21lYm9keSBwcmVtYXR1cmVseSBwdXQgYSBrZXl3b3JkIGludG8gdGhpcyBmaWxlICovCisvKiAkSWQkICovCitFT0YKKworCXByaW50ZiAiSGVsbG9cclxuV29ybGRcclxuIiA+IGNybGYKKwlhX2NybGY9JChnaXQgaGFzaC1vYmplY3QgLXcgY3JsZikKKwlwcmludGYgIkhlbGxvXHJXb3JsZFxyIiA+IGNyCisJYV9jcj0kKGdpdCBoYXNoLW9iamVjdCAtdyBjcikKKwlwcmludGYgIkhlbGxvXG5Xb3JsZFxuIiA+IGxmCisJYV9sZj0kKGdpdCBoYXNoLW9iamVjdCAtdyBsZikKKworCXByaW50ZiAiSGVsbG9cclxuV29ybGQiID4gbmVfY3JsZgorCWFfbmVfY3JsZj0kKGdpdCBoYXNoLW9iamVjdCAtdyBuZV9jcmxmKQorCXByaW50ZiAiSGVsbG9cbldvcmxkIiA+IG5lX2xmCisJYV9uZV9sZj0kKGdpdCBoYXNoLW9iamVjdCAtdyBuZV9sZikKKwlwcmludGYgIkhlbGxvXHJXb3JsZCIgPiBuZV9jcgorCWFfbmVfY3I9JChnaXQgaGFzaC1vYmplY3QgLXcgbmVfY3IpCisKKwl0b3VjaCBlbXB0eQorCWFfZW1wdHk9JChnaXQgaGFzaC1vYmplY3QgLXcgZW1wdHkpCisJcHJpbnRmICJcbiIgPiBlbXB0eV9sZgorCWFfZW1wdHlfbGY9JChnaXQgaGFzaC1vYmplY3QgLXcgZW1wdHlfbGYpCisJcHJpbnRmICJcciIgPiBlbXB0eV9jcgorCWFfZW1wdHlfY3I9JChnaXQgaGFzaC1vYmplY3QgLXcgZW1wdHlfY3IpCisJcHJpbnRmICJcclxuIiA+IGVtcHR5X2NybGYKKwlhX2VtcHR5X2NybGY9JChnaXQgaGFzaC1vYmplY3QgLXcgZW1wdHlfY3JsZikKKworCXN2bl9jbWQgaW1wb3J0IC0tbm8tYXV0by1wcm9wcyAtbSAnaW1wb3J0IGZvciBnaXQgc3ZuJyAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorY2QgLi4KKworcm0gLXJmIGltcG9ydAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd29ya2luZyBjb3B5IGZyb20gc3ZuJyAnc3ZuIGNvICIkc3ZucmVwbyIgdGVzdF93YycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNvbWUgY29tbWl0cyB0byBzdm4nICcKKwkoCisJCWNkIHRlc3Rfd2MgJiYKKwkJZWNobyBHcmVldGluZ3MgPj4ga3cuYyAmJgorCQlwb2tlIGt3LmMgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk5vdCB5ZXQgYW4gSWQiICYmCisJCWVjaG8gSGVsbG8gd29ybGQgPj4ga3cuYyAmJgorCQlwb2tlIGt3LmMgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk1vZGlmaWVkIGZpbGUsIGJ1dCBzdGlsbCBub3QgeWV0IGFuIElkIiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIGt3LmMgJiYKKwkJcG9rZSBrdy5jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJQcm9wc2V0IElkIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCByZXZpc2lvbnMgZnJvbSBzdm4nICdnaXQgc3ZuIGZldGNoJworCituYW1lPSd0ZXN0IHN2bjprZXl3b3JkcyBpZ25vcmluZycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiBcCisJJ2dpdCBjaGVja291dCAtYiBteWJyYW5jaCByZW1vdGVzL2dpdC1zdm4gJiYKKwllY2hvIEhpIGFnYWluID4+IGt3LmMgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0ZXN0IGtleXdvcmRzIGlnbm9yaW5nIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaCAmJgorCWdpdCBwdWxsIC4gcmVtb3Rlcy9naXQtc3ZuJworCitleHBlY3Q9Jy8qICRJZCQgKi8nCitnb3Q9IiQoc2VkIC1uZSAycCBrdy5jKSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhdyAkSWQkIGZvdW5kIGluIGt3LmMnICJ0ZXN0ICckZXhwZWN0JyA9ICckZ290JyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicHJvcHNldCBDUiBvbiBjcmxmIGZpbGVzIiAnCisJKAorCQljZCB0ZXN0X3djICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIGVtcHR5ICYmCisJCXN2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSIGNybGYgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgbmVfY3JsZiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAicHJvcHNldCBDUiBvbiBjcmxmIGZpbGVzIgorCSApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGFuZCBwdWxsIGxhdGVzdCBmcm9tIHN2biBhbmQgY2hlY2tvdXQgYSBuZXcgd2MnIFwKKwknZ2l0IHN2biBmZXRjaCAmJgorCSBnaXQgcHVsbCAuIHJlbW90ZXMvZ2l0LXN2biAmJgorCSBzdm5fY21kIGNvICIkc3ZucmVwbyIgbmV3X3djJworCitmb3IgaSBpbiBjcmxmIG5lX2NybGYgbGYgbmVfbGYgY3IgbmVfY3IgZW1wdHlfY3IgZW1wdHlfbGYgZW1wdHkgZW1wdHlfY3JsZgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJDb21wYXJpbmcgJGkiICJjbXAgJGkgbmV3X3djLyRpIgorZG9uZQorCisKK2NkIHRlc3Rfd2MKKwlwcmludGYgJyRJZCRcckhlbGxvXHJXb3JsZFxyJyA+IGNyCisJcHJpbnRmICckSWQkXHJIZWxsb1xyV29ybGQnID4gbmVfY3IKKwlhX2NyPSQocHJpbnRmICckSWQkXHJcbkhlbGxvXHJcbldvcmxkXHJcbicgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikKKwlhX25lX2NyPSQocHJpbnRmICckSWQkXHJcbkhlbGxvXHJcbldvcmxkJyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldCBDUkxGIG9uIGNyIGZpbGVzJyBcCisJJ3N2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSTEYgY3IgJiYKKwkgc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1JMRiBuZV9jciAmJgorCSBzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIGNyICYmCisJIHN2bl9jbWQgcHJvcHNldCBzdm46a2V5d29yZHMgSWQgbmVfY3IgJiYKKwkgc3ZuX2NtZCBjb21taXQgLW0gInByb3BzZXQgQ1JMRiBvbiBjciBmaWxlcyInCitjZCAuLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYW5kIHB1bGwgbGF0ZXN0IGZyb20gc3ZuJyBcCisJJ2dpdCBzdm4gZmV0Y2ggJiYgZ2l0IHB1bGwgLiByZW1vdGVzL2dpdC1zdm4nCisKK2JfY3I9IiQoZ2l0IGhhc2gtb2JqZWN0IGNyKSIKK2JfbmVfY3I9IiQoZ2l0IGhhc2gtb2JqZWN0IG5lX2NyKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1JMRiArICRJZCQnICJ0ZXN0ICckYV9jcicgPSAnJGJfY3InIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ1JMRiArICRJZCQgKG5vIG5ld2xpbmUpJyAidGVzdCAnJGFfbmVfY3InID0gJyRiX25lX2NyJyIKKworY2F0ID4gc2hvdy1pZ25vcmUuZXhwZWN0IDw8XEVPRgorCisjIC8KKy9uby1zdWNoLWZpbGUqCisKKyMgL2RlZXBseS8KKy9kZWVwbHkvbm8tc3VjaC1maWxlKgorCisjIC9kZWVwbHkvbmVzdGVkLworL2RlZXBseS9uZXN0ZWQvbm8tc3VjaC1maWxlKgorCisjIC9kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS8KKy9kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9uby1zdWNoLWZpbGUqCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzaG93LWlnbm9yZScgIgorCSgKKwkJY2QgdGVzdF93YyAmJgorCQlta2RpciAtcCBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeSAmJgorCQl0b3VjaCBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS8ua2VlcCAmJgorCQlzdm5fY21kIGFkZCBkZWVwbHkgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIHByb3BzZXQgLVIgc3ZuOmlnbm9yZSAnCituby1zdWNoLWZpbGUqCisnIC4gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gJ3Byb3BzZXQgc3ZuOmlnbm9yZScKKwkpICYmCisJZ2l0IHN2biBzaG93LWlnbm9yZSA+IHNob3ctaWdub3JlLmdvdCAmJgorCWNtcCBzaG93LWlnbm9yZS5leHBlY3Qgc2hvdy1pZ25vcmUuZ290CisiCisKK2NhdCA+Y3JlYXRlLWlnbm9yZS5leHBlY3QgPDxcRU9GCisvbm8tc3VjaC1maWxlKgorRU9GCisKK2NhdCA+Y3JlYXRlLWlnbm9yZS1pbmRleC5leHBlY3QgPDxcRU9GCisxMDA2NDQgOGM1MmU1ZGZjZDBhOGI2YjZiY2ZlNmI0MWI4OWJjYmY0OTM3MThhNSAwCS5naXRpZ25vcmUKKzEwMDY0NCA4YzUyZTVkZmNkMGE4YjZiNmJjZmU2YjQxYjg5YmNiZjQ5MzcxOGE1IDAJZGVlcGx5Ly5naXRpZ25vcmUKKzEwMDY0NCA4YzUyZTVkZmNkMGE4YjZiNmJjZmU2YjQxYjg5YmNiZjQ5MzcxOGE1IDAJZGVlcGx5L25lc3RlZC8uZ2l0aWdub3JlCisxMDA2NDQgOGM1MmU1ZGZjZDBhOGI2YjZiY2ZlNmI0MWI4OWJjYmY0OTM3MThhNSAwCWRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5Ly5naXRpZ25vcmUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNyZWF0ZS1pZ25vcmUnICIKKwlnaXQgc3ZuIGZldGNoICYmIGdpdCBwdWxsIC4gcmVtb3Rlcy9naXQtc3ZuICYmCisJZ2l0IHN2biBjcmVhdGUtaWdub3JlICYmCisJY21wIC4vLmdpdGlnbm9yZSBjcmVhdGUtaWdub3JlLmV4cGVjdCAmJgorCWNtcCAuL2RlZXBseS8uZ2l0aWdub3JlIGNyZWF0ZS1pZ25vcmUuZXhwZWN0ICYmCisJY21wIC4vZGVlcGx5L25lc3RlZC8uZ2l0aWdub3JlIGNyZWF0ZS1pZ25vcmUuZXhwZWN0ICYmCisJY21wIC4vZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvLmdpdGlnbm9yZSBjcmVhdGUtaWdub3JlLmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyAtcyA+bHNfZmlsZXNfcmVzdWx0ICYmCisJZ3JlcCBnaXRpZ25vcmUgbHNfZmlsZXNfcmVzdWx0IHwgY21wIC0gY3JlYXRlLWlnbm9yZS1pbmRleC5leHBlY3QKKwkiCisKK2NhdCA+cHJvcC5leHBlY3QgPDxcRU9GCisKK25vLXN1Y2gtZmlsZSoKKworRU9GCitjYXQgPnByb3AyLmV4cGVjdCA8PFxFT0YKKzgKK0VPRgorCisjIFRoaXMgdGVzdCBjYW4gYmUgaW1wcm92ZWQ6IHNpbmNlIGFsbCB0aGUgc3ZuOmlnbm9yZSBjb250YWluIHRoZSBzYW1lCisjIHBhdHRlcm4sIGl0IGNhbiBwYXNzIGV2ZW4gdGhvdWdoIHRoZSBwcm9wZ2V0IGRpZCBub3QgZXhlY3V0ZSBvbiB0aGUKKyMgcmlnaHQgZGlyZWN0b3J5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBwcm9wZ2V0JyAnCisJdGVzdF9wcm9wZ2V0ICgpIHsKKwkJZ2l0IHN2biBwcm9wZ2V0ICQxICQyID5hY3R1YWwgJiYKKwkJY21wICQzIGFjdHVhbAorCX0gJiYKKwl0ZXN0X3Byb3BnZXQgc3ZuOmlnbm9yZSAuIHByb3AuZXhwZWN0ICYmCisJY2QgZGVlcGx5ICYmCisJdGVzdF9wcm9wZ2V0IHN2bjppZ25vcmUgLiAuLi9wcm9wLmV4cGVjdCAmJgorCXRlc3RfcHJvcGdldCBzdm46ZW50cnk6Y29tbWl0dGVkLXJldiBuZXN0ZWQvZGlyZWN0b3J5Ly5rZWVwIFwKKwkJLi4vcHJvcDIuZXhwZWN0ICYmCisJdGVzdF9wcm9wZ2V0IHN2bjppZ25vcmUgLi4gLi4vcHJvcC5leHBlY3QgJiYKKwl0ZXN0X3Byb3BnZXQgc3ZuOmlnbm9yZSBuZXN0ZWQvIC4uL3Byb3AuZXhwZWN0ICYmCisJdGVzdF9wcm9wZ2V0IHN2bjppZ25vcmUgLi9uZXN0ZWQgLi4vcHJvcC5leHBlY3QgJiYKKwl0ZXN0X3Byb3BnZXQgc3ZuOmlnbm9yZSAuLi8uL2RlZXBseS9uZXN0ZWQgLi4vcHJvcC5leHBlY3QKKwknCisKK2NhdCA+cHJvcC5leHBlY3QgPDxcRU9GCitQcm9wZXJ0aWVzIG9uICcuJzoKKyAgc3ZuOmVudHJ5OmNvbW1pdHRlZC1kYXRlCisgIHN2bjplbnRyeTpjb21taXR0ZWQtcmV2CisgIHN2bjplbnRyeTpsYXN0LWF1dGhvcgorICBzdm46ZW50cnk6dXVpZAorICBzdm46aWdub3JlCitFT0YKK2NhdCA+cHJvcDIuZXhwZWN0IDw8XEVPRgorUHJvcGVydGllcyBvbiAnbmVzdGVkL2RpcmVjdG9yeS8ua2VlcCc6CisgIHN2bjplbnRyeTpjb21taXR0ZWQtZGF0ZQorICBzdm46ZW50cnk6Y29tbWl0dGVkLXJldgorICBzdm46ZW50cnk6bGFzdC1hdXRob3IKKyAgc3ZuOmVudHJ5OnV1aWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHByb3BsaXN0JyAiCisJZ2l0IHN2biBwcm9wbGlzdCAuID5hY3R1YWwgJiYKKwljbXAgcHJvcC5leHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc3ZuIHByb3BsaXN0IG5lc3RlZC9kaXJlY3RvcnkvLmtlZXAgPmFjdHVhbCAmJgorCWNtcCBwcm9wMi5leHBlY3QgYWN0dWFsCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoIGIvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjZjZDUxMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBybWRpcicKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQlta2RpciAtcCBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMSAmJgorCQlta2RpciAtcCBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMiAmJgorCQllY2hvIGZvbyA+ZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEvZmlsZSAmJgorCQllY2hvIGZvbyA+ZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIvYW5vdGhlciAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXJyb3IgdmlhIGdpdCBzdm4nICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgY2hlY2tvdXQgLWYgLWIgdGVzdC1ybWRpciByZW1vdGVzL2dpdC1zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RyeSBhIGNvbW1pdCBvbiBybWRpcicgJworCWdpdCBybSAtZiBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMi9hbm90aGVyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAicmVtb3ZlIGFub3RoZXIiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLXJtZGlyIEhFQUQgJiYKKwlzdm5fY21kIGxzIC1SICIkc3ZucmVwbyIgfCBncmVwIF5kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMQorCScKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoIGIvdC90OTEwMy1naXQtc3ZuLXRyYWNrZWQtZGlyZWN0b3J5LXJlbW92ZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjI4MjcxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCkBAIC0wLDAgKzEsNDEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gdHJhY2tpbmcgcmVtb3ZlZCB0b3AtbGV2ZWwgcGF0aCcKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGhpc3RvcnkgZm9yIHRyYWNraW5nJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJbWtkaXIgaW1wb3J0L3RydW5rICYmCisJZWNobyBoZWxsbyA+PiBpbXBvcnQvdHJ1bmsvUkVBRE1FICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gaW5pdGlhbCBpbXBvcnQgIiRzdm5yZXBvIiAmJgorCXJtIC1yZiBpbXBvcnQgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKKwllY2hvIGJ5ZSBieWUgPj4gdHJ1bmsvUkVBRE1FICYmCisJc3ZuX2NtZCBybSAtbSAiZ29uZSIgIiRzdm5yZXBvIi90cnVuayAmJgorCXJtIC1yZiB0cnVuayAmJgorCW1rZGlyIHRydW5rICYmCisJZWNobyAibmV3IiA+IHRydW5rL0ZPTExPV01FICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIm5ldyB0cnVuayIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXBvIHdpdGggZ2l0JyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iIHggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB4L0ZPTExPV01FICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgeC9SRUFETUUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIHIyIHN0aWxsIGhhcyBvbGQgZmlsZScgJworCSgKKwkJY2QgeCAmJgorCQl0ZXN0IC1uICIkKGdpdCBzdm4gZmluZC1yZXYgcjEpIiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICIkKGdpdCBzdm4gZmluZC1yZXYgcjEpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBSRUFETUUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRk9MTE9XTUUgJiYKKwkJdGVzdCAteiAiJChnaXQgc3ZuIGZpbmQtcmV2IHIyKSIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2ggYi90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZTBhZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2gKQEAgLTAsMCArMSwyMjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZmV0Y2hpbmcnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJbWtkaXIgLXAgdHJ1bmsgJiYKKwkJZWNobyBoZWxsbyA+dHJ1bmsvcmVhZG1lICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIKKwkpICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHdjICYmCisJKAorCQljZCB3YyAmJgorCQllY2hvIHdvcmxkID4+dHJ1bmsvcmVhZG1lICYmCisJCXBva2UgdHJ1bmsvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJhbm90aGVyIGNvbW1pdCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIG12IHRydW5rIHRodW5rICYmCisJCWVjaG8gZ29vZGJ5ZSA+PnRodW5rL3JlYWRtZSAmJgorCQlwb2tlIHRodW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYnllIG5vdyIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFuZCBmZXRjaCBhIG1vdmVkIGRpcmVjdG9yeScgJworCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSB0aHVuayAiJHN2bnJlcG8iL3RodW5rICYmCisJZ2l0IHN2biBmZXRjaCAtaSB0aHVuayAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvdGh1bmtAMikiIFwKKwkgICA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RodW5rfjEpIiAmJgorCWdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy90aHVuazpyZWFkbWUgPmFjdHVhbCAmJgorCXRlc3QgIiQoc2VkIC1uIC1lICIzcCIgYWN0dWFsKSIgPSBnb29kYnllICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkJICJedHJ1bms6cmVmcy9yZW1vdGVzL3RodW5rQDIkIikiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFuZCBmZXRjaCBmcm9tIG9uZSBzdm4tcmVtb3RlJyAnCisgICAgICAgIGdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4udXJsICIkc3ZucmVwbyIgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAgdHJ1bms6cmVmcy9yZW1vdGVzL3N2bi90cnVuayAmJgorICAgICAgICBnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKyAgICAgICAgICB0aHVuazpyZWZzL3JlbW90ZXMvc3ZuL3RodW5rICYmCisgICAgICAgIGdpdCBzdm4gZmV0Y2ggLWkgc3ZuL3RodW5rICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm4vdHJ1bmspIiBcCisJICAgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm4vdGh1bmt+MSkiICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL3N2bi90aHVuazpyZWFkbWUgPmFjdHVhbCAmJgorCXRlc3QgIiQoc2VkIC1uIC1lICIzcCIgYWN0dWFsKSIgPSBnb29kYnllCisgICAgICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGRlbGV0ZWQgcGFyZW50JyAnCisgICAgICAgIChzdm5fY21kIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAorICAgICAgICAgICAgICAgIiRzdm5yZXBvIi90cnVua0AyICIkc3ZucmVwbyIvanVuayB8fAorICAgICAgICAgc3ZuIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAorICAgICAgICAgICAgICAgLXIyICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9qdW5rKSAmJgorICAgICAgICBnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKyAgICAgICAgICBqdW5rOnJlZnMvcmVtb3Rlcy9zdm4vanVuayAmJgorICAgICAgICBnaXQgc3ZuIGZldGNoIC1pIHN2bi90aHVuayAmJgorICAgICAgICBnaXQgc3ZuIGZldGNoIC1pIHN2bi9qdW5rICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBzdm4vanVuayBzdm4vdHJ1bmspIiAmJgorCXRlc3QgIiQoZ2l0IG1lcmdlLWJhc2Ugc3ZuL2p1bmsgc3ZuL3RydW5rKSIgXAorCSAgID0gIiQoZ2l0IHJldi1wYXJzZSBzdm4vdHJ1bmspIgorICAgICAgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBsYXJnZXIgcGFyZW50JyAnCisgICAgICAgIG1rZGlyIC1wIGltcG9ydC90cnVuay90aHVuay9idW1wL3RodWQgJiYKKyAgICAgICAgZWNobyBoaSA+IGltcG9ydC90cnVuay90aHVuay9idW1wL3RodWQvZmlsZSAmJgorICAgICAgICBzdm4gaW1wb3J0IC1tICJpbXBvcnQgYSBsYXJnZXIgcGFyZW50IiBpbXBvcnQgIiRzdm5yZXBvIi9sYXJnZXItcGFyZW50ICYmCisgICAgICAgIHN2biBjcCAtbSAiaGkiICIkc3ZucmVwbyIvbGFyZ2VyLXBhcmVudCAiJHN2bnJlcG8iL2Fub3RoZXItbGFyZ2VyICYmCisgICAgICAgIGdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBsYXJnZXIgXAorCSAgIiRzdm5yZXBvIi9sYXJnZXItcGFyZW50L3RydW5rL3RodW5rL2J1bXAvdGh1ZCAmJgorICAgICAgICBnaXQgc3ZuIGZldGNoIC1pIGxhcmdlciAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBsYXJnZXItcGFyZW50IFwKKwkgICIkc3ZucmVwbyIvYW5vdGhlci1sYXJnZXIvdHJ1bmsvdGh1bmsvYnVtcC90aHVkICYmCisJZ2l0IHN2biBmZXRjaCAtaSBsYXJnZXItcGFyZW50ICYmCisgICAgICAgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL2xhcmdlciAmJgorICAgICAgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFwKKwkgICByZWZzL3JlbW90ZXMvbGFyZ2VyLXBhcmVudCAmJgorCXRlc3QgIiQoZ2l0IG1lcmdlLWJhc2UgXAorCQkgcmVmcy9yZW1vdGVzL2xhcmdlci1wYXJlbnQgXAorCQkgcmVmcy9yZW1vdGVzL2xhcmdlcikiID0gXAorCSAgICAgIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvbGFyZ2VyKSIKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgaGlnaGVyLWxldmVsIHBhcmVudCcgJworCXN2biBta2RpciAtbSAiZm9sbG93IGhpZ2hlci1sZXZlbCBwYXJlbnQiICIkc3ZucmVwbyIvYmxvYiAmJgorCXN2biBjbyAiJHN2bnJlcG8iL2Jsb2IgYmxvYiAmJgorCSgKKwkJY2QgYmxvYiAmJgorCQllY2hvIGhpID4gaGkgJiYKKwkJc3ZuIGFkZCBoaSAmJgorCQlzdm4gY29tbWl0IC1tICJoaWhpIgorCSkgJiYKKwlzdm4gbWtkaXIgLW0gIm5ldyBnbG9iIGF0IHRvcCBsZXZlbCIgIiRzdm5yZXBvIi9nbG9iICYmCisJc3ZuIG12IC1tICJtb3ZlIGJsb2IgZG93biBhIGxldmVsIiAiJHN2bnJlcG8iL2Jsb2IgIiRzdm5yZXBvIi9nbG9iL2Jsb2IgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgYmxvYiAiJHN2bnJlcG8iL2dsb2IvYmxvYiAmJgorICAgICAgICBnaXQgc3ZuIGZldGNoIC1pIGJsb2IKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgZGVsZXRlZCBkaXJlY3RvcnknICcKKwlzdm5fY21kIG12IC1tICJieWUhIiAiJHN2bnJlcG8iL2dsb2IvYmxvYi9oaSAiJHN2bnJlcG8iL2dsb2IvYmxvYi9ieWUgJiYKKwlzdm5fY21kIHJtIC1tICJyZW1vdmUgZ2xvYiIgIiRzdm5yZXBvIi9nbG9iICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGdsb2IgIiRzdm5yZXBvIi9nbG9iICYmCisJZ2l0IHN2biBmZXRjaCAtaSBnbG9iICYmCisJdGVzdCAiJChnaXQgY2F0LWZpbGUgYmxvYiByZWZzL3JlbW90ZXMvZ2xvYjpibG9iL2J5ZSkiID0gaGkgJiYKKwlnaXQgbHMtdHJlZSByZWZzL3JlbW90ZXMvZ2xvYiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwKKwknCisKKyMgcmVmOiByOTI3MCBvZiB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5OiAoaHR0cDovL3N2bi5jb2xsYWIubmV0L3JlcG9zL3N2bikKKyMgaW4gdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdy1wYXJlbnQgYXZvaWRzIGRlbGV0aW5nIHJlbGV2YW50IGluZm8nICcKKwlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdCAmJgorCWZvciBpIGluIGEgYiBjIDsgZG8gXAorCSAgZWNobyAkaSA+IGltcG9ydC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC8kaS5wbSAmJgorCSAgZWNobyBfJGkgPiBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdC8kaS50OyBcCisJZG9uZSAmJgorCSAgZWNobyAiYmFkIGRlbGV0ZSB0ZXN0IiA+IFwKKwkgICBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdC9sYXJnZXItcGFyZW50ICYmCisJICBlY2hvICJiYWQgZGVsZXRlIHRlc3QgMiIgPiBcCisJICAgaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL2Fub3RoZXItbGFyZ2VyICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJc3ZuIGltcG9ydCAtbSAicjkyNzAgdGVzdCIgLiAiJHN2bnJlcG8iL3I5MjcwCisJKSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybCByOTI3MCAmJgorCSgKKwkJY2QgcjkyNzAgJiYKKwkJc3ZuIG1rZGlyIG5hdGl2ZSAmJgorCQlzdm4gbXYgdCBuYXRpdmUvdCAmJgorCQlmb3IgaSBpbiBhIGIgYworCQlkbworCQkJc3ZuIG12ICRpLnBtIG5hdGl2ZS8kaS5wbQorCQlkb25lICYmCisJCWVjaG8geiA+Pm5hdGl2ZS90L2MudCAmJgorCQlwb2tlIG5hdGl2ZS90L2MudCAmJgorCQlzdm4gY29tbWl0IC1tICJyZW9yZyB0ZXN0IgorCSkgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgcjkyNzAtdCBcCisJICAiJHN2bnJlcG8iL3I5MjcwL3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCisJZ2l0IHN2biBmZXRjaCAtaSByOTI3MC10ICYmCisJdGVzdCAkKGdpdCByZXYtbGlzdCByOTI3MC10IHwgd2MgLWwpIC1lcSAyICYmCisJdGVzdCAiJChnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC10fjEpIiA9IFwKKwkgICAgICIkKGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXQpIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidHJhY2sgaW5pdGlhbCBjaGFuZ2UgaWYgaXQgd2FzIG9ubHkgbWFkZSB0byBwYXJlbnQiICcKKwlzdm5fY21kIGNwIC1tICJ3aGVlZSEiICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsgIiRzdm5yZXBvIi9yOTI3MC9kcnVuayAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSByOTI3MC1kIFwKKwkgICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvbmF0aXZlL3QgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIHI5MjcwLWQgJiYKKwl0ZXN0ICQoZ2l0IHJldi1saXN0IHI5MjcwLWQgfCB3YyAtbCkgLWVxIDMgJiYKKwl0ZXN0ICIkKGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXQpIiA9IFwKKwkgICAgICIkKGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLWQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByOTI3MC10KSIgPSBcCisJICAgICAiJChnaXQgcmV2LXBhcnNlIHI5MjcwLWR+MSkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb2xsb3ctcGFyZW50IGlzIGF0b21pYyIgJworCSgKKwkJY2Qgd2MgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIG1rZGlyIHN0dW5rICYmCisJCWVjaG8gInRydW5rIHN0dW5rIiA+IHN0dW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGFkZCBzdHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidHJ1bmsgc3R1bmsiICYmCisJCWVjaG8gInN0dW5rIGxpa2UganVuayIgPj4gc3R1bmsvcmVhZG1lICYmCisJCXN2bl9jbWQgY2kgLW0gInJlYWxseSBzdHVuayIgJiYKKwkJZWNobyAic3Rpbmsgc3Rhbmsgc3R1bmsiID4+IHN0dW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNpIC1tICJldmVuIHRoZSBncmluY2ggYWdyZWVzIgorCSkgJiYKKwlzdm5fY21kIGNvcHkgLW0gInN0dW5rIGZsdW5rZWQiICIkc3ZucmVwbyIvc3R1bmsgIiRzdm5yZXBvIi9mbHVuayAmJgorCXsgc3ZuIGNwIC1tICJlYXJseSBzdHVuayBmbHVua2VkIHRvbyIgXAorCQkiJHN2bnJlcG8iL3N0dW5rQDE3ICIkc3ZucmVwbyIvZmx1bmtlZCB8fAorCXN2bl9jbWQgY3AgLW0gImVhcmx5IHN0dW5rIGZsdW5rZWQgdG9vIiBcCisJCS1yMTcgIiRzdm5yZXBvIi9zdHVuayAiJHN2bnJlcG8iL2ZsdW5rZWQ7IH0gJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgc3R1bmsgIiRzdm5yZXBvIi9zdHVuayAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgc3R1bmsgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvZmx1bmtAMTggcmVmcy9yZW1vdGVzL3N0dW5rfjIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3JlbW90ZXMvc3R1bmsgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggc3R1bmsgJiYKKwlta2RpciAtcCAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvZmx1bmtAMTggJiYKKwlyZXZfbWFwPSQoY2QgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3N0dW5rICYmIGxzIC5yZXZfbWFwKikgJiYKKwlkZCBpZj0iJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvc3R1bmsvJHJldl9tYXAgXAorCSAgIG9mPSIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9mbHVua0AxOC8kcmV2X21hcCBicz0yNCBjb3VudD0xICYmCisJcm0gLXJmICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9zdHVuayAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBmbHVuayAiJHN2bnJlcG8iL2ZsdW5rICYmCisJZ2l0IHN2biBmZXRjaCAtaSBmbHVuayAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBzdHVuayAiJHN2bnJlcG8iL3N0dW5rICYmCisJZ2l0IHN2biBmZXRjaCAtaSBzdHVuayAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBmbHVua2VkICIkc3ZucmVwbyIvZmx1bmtlZCAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgZmx1bmtlZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZmx1bmtAMTgpIiBcCisJICAgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdHVuaykiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9mbHVua34xKSIgXAorCSAgID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3R1bmspIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZmx1bmtlZH4xKSIgXAorCSAgID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3R1bmt+MSkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0cmFjayBtdWx0aS1wYXJlbnQgcGF0aHMiICcKKwlzdm5fY21kIGNwIC1tICJyZXN1cnJlY3QgL2dsb2IiICIkc3ZucmVwbyIvcjkyNzAgIiRzdm5yZXBvIi9nbG9iICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dsb2IgPmFjdHVhbCAmJgorCWdyZXAgIl5wYXJlbnQgIiBhY3R1YWwgPmFjdHVhbDIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbDIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm11bHRpLWZldGNoIGNvbnRpbnVlcyB0byB3b3JrIiAiCisJZ2l0IHN2biBtdWx0aS1mZXRjaAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAibXVsdGktZmV0Y2ggd29ya3Mgb2ZmIGEgJ2NsZWFuJyByZXBvc2l0b3J5IiAnCisJcm0gLXJmICIkR0lUX0RJUi9zdm4iICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0ib3B0aW9uIG5vLWRlcmVmJTBhZGVsZXRlICUocmVmbmFtZSkiIHJlZnMvcmVtb3RlcyB8CisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tYWxsIC0tZXhwaXJlPWFsbCAmJgorCW1rZGlyICIkR0lUX0RJUi9zdm4iICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaAorCScKKwordGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCAmJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaCBiL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZWQ1Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNvbW1pdC1kaWZmJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCWVjaG8gaGVsbG8gPnJlYWRtZSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iCisJKSAmJgorCWVjaG8gaGVsbG8gPiByZWFkbWUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlYWRtZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImluaXRpYWwiICYmCisJZWNobyB3b3JsZCA+PiByZWFkbWUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhbm90aGVyIgorCScKKworaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4wKQorcHJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4xKQorCisjIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGNvbW1pdC1kaWZmIGNvbW1hbmQgYXJlIHRoZSBzYW1lIGFzIHRoZSByZWd1bGFyCisjIGNvbW1pdCwgc28gb25seSBhIGJhc2ljIHRlc3Qgb2YgZnVuY3Rpb25hbGl0eSBpcyBuZWVkZWQgc2luY2Ugd2UndmUKKyMgYWxyZWFkeSB0ZXN0ZWQgY29tbWl0IGV4dGVuc2l2ZWx5IGVsc2V3aGVyZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRoZSBjb21taXQtZGlmZiBjb21tYW5kJyAnCisJdGVzdCAtbiAiJHByZXYiICYmIHRlc3QgLW4gIiRoZWFkIiAmJgorCWdpdCBzdm4gY29tbWl0LWRpZmYgLXIxICIkcHJldiIgIiRoZWFkIiAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHdjICYmCisJY21wIHJlYWRtZSB3Yy9yZWFkbWUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdC1kaWZmIHRvIGEgc3ViLWRpcmVjdG9yeSAod2l0aCBnaXQgc3ZuIGNvbmZpZyknICcKKwlzdm5fY21kIGltcG9ydCAtbSAic3ViLWRpcmVjdG9yeSIgaW1wb3J0ICIkc3ZucmVwbyIvc3ViZGlyICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsICIkc3ZucmVwbyIvc3ViZGlyICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBzdm4gY29tbWl0LWRpZmYgLXIzICIkcHJldiIgIiRoZWFkIiAmJgorCXN2bl9jbWQgY2F0ICIkc3ZucmVwbyIvc3ViZGlyL3JlYWRtZSA+IHJlYWRtZS4yICYmCisJY21wIHJlYWRtZSByZWFkbWUuMgorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaCBiL3QvdDkxMDYtZ2l0LXN2bi1jb21taXQtZGlmZi1jbG9iYmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlYzQ1YmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaApAQCAtMCwwICsxLDEwNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY29tbWl0LWRpZmYgY2xvYmJlcicKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQllY2hvIGluaXRpYWwgPmZpbGUgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIgorCSkgJiYKKwllY2hvIGluaXRpYWwgPiBmaWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiaW5pdGlhbCIKKwknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgY2hhbmdlIGZyb20gc3ZuIHNpZGUnICcKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKKwkoCisJCWNkIHQuc3ZuICYmCisJCWVjaG8gc2Vjb25kIGxpbmUgZnJvbSBzdm4gPj5maWxlICYmCisJCXBva2UgZmlsZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic2Vjb25kIGxpbmUgZnJvbSBzdm4iCisJKSAmJgorCXJtIC1yZiB0LnN2bgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIGdpdCcgJworCWVjaG8gc2Vjb25kIGxpbmUgZnJvbSBnaXQgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCBsaW5lIGZyb20gZ2l0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gY29tbWl0LWRpZmYgLXIxIEhFQUR+MSBIRUFEICIkc3ZucmVwbyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbXBsZW1lbnRpbmcgY2hhbmdlIGZyb20gZ2l0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwllY2hvIHNlY29uZCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgbGluZSBmcm9tIHN2biIgJiYKKwllY2hvIHRoaXJkIGxpbmUgZnJvbSBnaXQgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInRoaXJkIGxpbmUgZnJvbSBnaXQiICYmCisJZ2l0IHN2biBjb21taXQtZGlmZiAtcjIgSEVBRH4xIEhFQUQgIiRzdm5yZXBvIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBmYWlscyB0byBjb21taXQgYmVjYXVzZSBvZiBjb25mbGljdCcgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKKwkoCisJCWNkIHQuc3ZuICYmCisJCWVjaG8gZm91cnRoIGxpbmUgZnJvbSBzdm4gPj5maWxlICYmCisJCXBva2UgZmlsZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiZm91cnRoIGxpbmUgZnJvbSBzdm4iCisJKSAmJgorCXJtIC1yZiB0LnN2biAmJgorCWVjaG8gImZvdXJ0aCBsaW5lIGZyb20gZ2l0IiA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZm91cnRoIGxpbmUgZnJvbSBnaXQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGRvZXMgdGhlIHN2biBlcXVpdmFsZW50IG9mIGFuIGluZGV4IG1lcmdlJyAiCisJZ2l0IHJlc2V0IC0taGFyZCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgorCWVjaG8gJ2luZGV4IG1lcmdlJyA+IGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLWEgLW0gJ2luZGV4IG1lcmdlJyAmJgorCWVjaG8gJ21vcmUgY2hhbmdlcycgPj4gZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAnbW9yZSBjaGFuZ2VzJyAmJgorCWdpdCBzdm4gZGNvbW1pdAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGFub3RoZXIgY2hhbmdlIGZyb20gc3ZuIHNpZGUnICcKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKKwkoCisJCWNkIHQuc3ZuICYmCisJCWVjaG8gdGhpcmQgbGluZSBmcm9tIHN2biA+PmZpbGUgJiYKKwkJcG9rZSBmaWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0aGlyZCBsaW5lIGZyb20gc3ZuIgorCSkgJiYKKwlybSAtcmYgdC5zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGRjb21taXQgZnJvbSBnaXQgc3ZuIHdpbGwgbm90IGNsb2JiZXIgc3ZuJyAiCisJZ2l0IHJlc2V0IC0taGFyZCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgorCWVjaG8gbmV3IGZpbGUgPj4gbmV3LWZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG5ldy1maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAnbmV3IGZpbGUnICYmCisJZWNobyBjbG9iYmVyID4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gJ2Nsb2JiZXInICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0CisJIgorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgcmViYXNlIHJlYWxseSBmYWlsZWQnICcKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwlncmVwIGN1cnJlbnRseS5yZWJhc2luZyBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZSwgY29udGludWUgdGhlIHJlYmFzZSBhbmQgZGNvbW1pdCcgIgorCWVjaG8gY2xvYmJlciBhbmQgSSByZWFsbHkgbWVhbiBpdCA+IGZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2ggYi90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZWFhNWJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2gKQEAgLTAsMCArMSwxMzYgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIG1ldGFkYXRhIG1pZ3JhdGlvbnMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvbGQtbG9va2luZyBtZXRhZGF0YScgJworCWNwICIkR0lUX0RJUiIvY29uZmlnICIkR0lUX0RJUiIvY29uZmlnLW9sZC1naXQtc3ZuICYmCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZm9yIGkgaW4gdHJ1bmsgYnJhbmNoZXMvYSBicmFuY2hlcy9iIHRhZ3MvMC4xIHRhZ3MvMC4yIHRhZ3MvMC4zCisJCWRvCisJCQlta2RpciAtcCAkaSAmJgorCQkJZWNobyBoZWxsbyA+PiRpL1JFQURNRSB8fAorCQkJZXhpdCAxCisJCWRvbmUgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKKwkpICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJcm0gLXJmICIkR0lUX0RJUiIvc3ZuICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9naXQtc3ZuLUhFQUQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3N2bi1IRUFEIHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gcmVmcy9yZW1vdGVzL2dpdC1zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1zdm4tSEVBRCBpcyBhIHJlYWwgSEVBRCcgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9naXQtc3ZuLUhFQUReMAorJworCitzdm5yZXBvX2VzY2FwZWQ9JChlY2hvICRzdm5yZXBvIHwgc2VkICdzLyAvJTIwL2cnKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIG9sZC1zdHlsZSAodjApIGdpdCBzdm4gbGF5b3V0JyAnCisJbWtkaXIgLXAgIiRHSVRfRElSIi9naXQtc3ZuL2luZm8gIiRHSVRfRElSIi9zdm4vaW5mbyAmJgorCWVjaG8gIiRzdm5yZXBvIiA+ICIkR0lUX0RJUiIvZ2l0LXN2bi9pbmZvL3VybCAmJgorCWVjaG8gIiRzdm5yZXBvIiA+ICIkR0lUX0RJUiIvc3ZuL2luZm8vdXJsICYmCisJZ2l0IHN2biBtaWdyYXRlICYmCisJISB0ZXN0IC1kICIkR0lUX0RJUiIvZ2l0LXN2biAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL2dpdC1zdm5eMCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N2bl4wICYmCisJdGVzdCAiJChnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLnVybCkiID0gIiRzdm5yZXBvX2VzY2FwZWQiICYmCisJdGVzdCAkKGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2gpID0gXAorCQkiOnJlZnMvcmVtb3Rlcy9naXQtc3ZuIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBhIG11bHRpLXJlcG9zaXRvcnkgcmVwbycgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIC1UIHRydW5rIC10IHRhZ3MgLWIgYnJhbmNoZXMgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgorCWdyZXAgIl50cnVuazpyZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rJCIgZmV0Y2gub3V0ICYmCisJdGVzdCAtbiAiJChnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKKwkJICAgICJeYnJhbmNoZXMvXCo6cmVmcy9yZW1vdGVzL29yaWdpbi9cKiQiKSIgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4udGFncyBcCisJCSAgICAiXnRhZ3MvXCo6cmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL1wqJCIpIiAmJgorCWdpdCBjb25maWcgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAgICAgICAgIl5icmFuY2hlcy9cKjpyZWZzL3JlbW90ZXMvb3JpZ2luL1wqJCIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4udGFncyBcCisJICAgICAgICAgICAgICAgICAgICAgICAgIl50YWdzL1wqOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy9cKiQiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCAiYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvb3JpZ2luL2EiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCAiYnJhbmNoZXMvYjpyZWZzL3JlbW90ZXMvb3JpZ2luL2IiICYmCisJZm9yIGkgaW4gdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjMKKwlkbworCQlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkJCSRpOnJlZnMvcmVtb3Rlcy9vcmlnaW4vJGkgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggPiBmZXRjaC5vdXQgJiYKKwlncmVwICJedHJ1bms6cmVmcy9yZW1vdGVzL29yaWdpbi90cnVuayQiIGZldGNoLm91dCAmJgorCWdyZXAgIl5icmFuY2hlcy9hOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYSQiIGZldGNoLm91dCAmJgorCWdyZXAgIl5icmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYiQiIGZldGNoLm91dCAmJgorCWdyZXAgIl50YWdzLzBcLjE6cmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzBcLjEkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4yOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8wXC4yJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMzpyZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMFwuMyQiIGZldGNoLm91dCAmJgorCWdyZXAgIl46cmVmcy9yZW1vdGVzL2dpdC1zdm4iIGZldGNoLm91dAorCScKKworIyByZWZzIHNob3VsZCBhbGwgYmUgZGlmZmVyZW50LCBidXQgdGhlIHRyZWVzIHNob3VsZCBhbGwgYmUgdGhlIHNhbWU6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1mZXRjaCB3b3JrcyBvbiBwYXJ0aWFsIHVybHMgKyBwYXRocycgJworCXJlZnM9InRydW5rIGEgYiB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMyIgJiYKKwlnaXQgc3ZuIG11bHRpLWZldGNoICYmCisJZm9yIGkgaW4gJHJlZnMKKwlkbworCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vJGleMCB8fCByZXR1cm4gMTsKKwlkb25lID5yZWZzLm91dCAmJgorCXRlc3QgLXogIiQoc29ydCA8cmVmcy5vdXQgfCB1bmlxIC1kKSIgJiYKKwlmb3IgaSBpbiAkcmVmcworCWRvCisJCWZvciBqIGluICRyZWZzCisJCWRvCisJCQlnaXQgZGlmZiAtLWV4aXQtY29kZSByZWZzL3JlbW90ZXMvb3JpZ2luLyRpIFwKKwkJCQkJICAgICByZWZzL3JlbW90ZXMvb3JpZ2luLyRqIHx8CisJCQkJcmV0dXJuIDEKKwkJZG9uZQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlncmF0ZSAtLW1pbmltaXplIG9uIG9sZCBpbml0ZWQgbGF5b3V0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCAmJgorCWdpdCBjb25maWcgLS11bnNldC1hbGwgc3ZuLXJlbW90ZS5zdm4udXJsICYmCisJcm0gLXJmICIkR0lUX0RJUiIvc3ZuICYmCisJZm9yIGkgaW4gJChjYXQgZmV0Y2gub3V0KQorCWRvCisJCXBhdGg9JChleHByICRpIDogIlwoW146XSpcKTouKiQiKQorCQlyZWY9JChleHByICRpIDogIlteOl0qOlwocmVmcy9yZW1vdGVzLy4qXCkkIikKKwkJaWYgdGVzdCAteiAiJHJlZiI7IHRoZW4gY29udGludWU7IGZpCisJCWlmIHRlc3QgLW4gIiRwYXRoIjsgdGhlbiBwYXRoPSIvJHBhdGgiOyBmaQorCQlta2RpciAtcCAiJEdJVF9ESVIiL3N2bi8kcmVmL2luZm8vICYmCisJCWVjaG8gIiRzdm5yZXBvIiRwYXRoID4iJEdJVF9ESVIiL3N2bi8kcmVmL2luZm8vdXJsIHx8CisJCXJldHVybiAxCisJZG9uZSAmJgorCWdpdCBzdm4gbWlncmF0ZSAtLW1pbmltaXplICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC1sIHwgZ3JlcCAiXnN2bi1yZW1vdGVcLmdpdC1zdm5cLiIpIiAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoID4gZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRydW5rOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmskIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvb3JpZ2luL2EkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeYnJhbmNoZXMvYjpyZWZzL3JlbW90ZXMvb3JpZ2luL2IkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4xOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8wXC4xJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMjpyZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMFwuMiQiIGZldGNoLm91dCAmJgorCWdyZXAgIl50YWdzLzBcLjM6cmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzBcLjMkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeOnJlZnMvcmVtb3Rlcy9naXQtc3ZuIiBmZXRjaC5vdXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgICIucmV2X2RiIGF1dG8tY29udmVydGVkIHRvIC5yZXZfbWFwLlVVSUQiICcKKwlnaXQgc3ZuIGZldGNoIC1pIHRydW5rICYmCisJdGVzdCAteiAiJChscyAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rLy5yZXZfZGIuKiAyPi9kZXYvbnVsbCkiICYmCisJZXhwZWN0PSIkKGxzICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmsvLnJldl9tYXAuKikiICYmCisJdGVzdCAtbiAiJGV4cGVjdCIgJiYKKwlyZXZfZGI9IiQoZWNobyAkZXhwZWN0IHwgc2VkIC1lICJzLF9tYXAsX2RiLCIpIiAmJgorCWNvbnZlcnRfdG9fcmV2X2RiICIkZXhwZWN0IiAiJHJldl9kYiIgJiYKKwlybSAtZiAiJGV4cGVjdCIgJiYKKwl0ZXN0IC1mICIkcmV2X2RiIiAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgdHJ1bmsgJiYKKwl0ZXN0IC16ICIkKGxzICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmsvLnJldl9kYi4qIDI+L2Rldi9udWxsKSIgJiYKKwl0ZXN0ICEgLWUgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL29yaWdpbi90cnVuay8ucmV2X2RiICYmCisJdGVzdCAtZiAiJGV4cGVjdCIKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2ggYi90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OTkwZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKQEAgLTAsMCArMSwxMTYgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGdsb2JiaW5nIHJlZnNwZWNzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NhdCA+IGV4cGVjdC5lbmQgPDxFT0YKK3RoZSBlbmQKK2hpCitzdGFydCBhIG5ldyBicmFuY2gKK2luaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlZnNwZWMgZ2xvYmJpbmcnICcKKwlta2RpciAtcCB0cnVuay9zcmMvYSB0cnVuay9zcmMvYiB0cnVuay9kb2MgJiYKKwllY2hvICJoZWxsbyB3b3JsZCIgPiB0cnVuay9zcmMvYS9yZWFkbWUgJiYKKwllY2hvICJnb29kYnllIHdvcmxkIiA+IHRydW5rL3NyYy9iL3JlYWRtZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCSgKKwkJY2QgdG1wICYmCisJCW1rZGlyIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBhZGQgYnJhbmNoZXMgdGFncyAmJgorCQlzdm5fY21kIGNwIHRydW5rIGJyYW5jaGVzL3N0YXJ0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJzdGFydCBhIG5ldyBicmFuY2giICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyAiaGkiID4+IGJyYW5jaGVzL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJoZXkiID4+IGJyYW5jaGVzL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaGkiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBjcCBicmFuY2hlcy9zdGFydCB0YWdzL2VuZCAmJgorCQllY2hvICJieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJheWUiID4+IHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidGhlIGVuZCIgJiYKKwkJZWNobyAiYnllYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCisJKSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4udXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkgICAgICAgICAgICAgICAgICJ0cnVuay9zcmMvYTpyZWZzL3JlbW90ZXMvdHJ1bmsiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKi9zcmMvYTpyZWZzL3JlbW90ZXMvYnJhbmNoZXMvKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnRhZ3NcCisJICAgICAgICAgICAgICAgICAidGFncy8qL3NyYy9hOnJlZnMvcmVtb3Rlcy90YWdzLyoiICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdGFncy9lbmQgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eLlx7NDFcfS8vIiBhY3R1YWwgPm91dHB1dC5lbmQgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZW5kIG91dHB1dC5lbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kfjEpIiA9IFwKKwkJIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvc3RhcnQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvc3RhcnR+MikiID0gXAorCQkiJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90cnVuaykiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmRAMworCScKKworZWNobyB0cnkgdG8gdHJ5ID4gZXhwZWN0LnR3bworZWNobyBub3RoaW5nIHRvIHNlZSBoZXJlID4+IGV4cGVjdC50d28KK2NhdCBleHBlY3QuZW5kID4+IGV4cGVjdC50d28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBsZWZ0LWhhbmQtc2lkZSBvbmx5IGdsb2JiaW5nJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uZmV0Y2ggdHJ1bms6cmVmcy9yZW1vdGVzL3R3by90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyo6cmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28udGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qOnJlZnMvcmVtb3Rlcy90d28vdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJZ2l0IHN2biBmZXRjaCB0d28gJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNiBhY3R1YWwgJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy9zdGFydCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0fjIpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdHJ1bmspICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZH4zKSA9IFwKKwkgICAgICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0KSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXi5cezQxXH0vLyIgYWN0dWFsID5vdXRwdXQudHdvICYmCisJdGVzdF9jbXAgZXhwZWN0LnR3byBvdXRwdXQudHdvCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHRlc3QgZGlzYWxsb3cgbXVsdGktZ2xvYnMnICIKK2NhdCA+ZXhwZWN0LnRocmVlIDw8RU9GCitPbmx5IG9uZSBzZXQgb2Ygd2lsZGNhcmRzIChlLmcuICcqJyBvciAnKi8qLyonKSBpcyBzdXBwb3J0ZWQ6IGJyYW5jaGVzLyovdC8qCisKK0VPRgorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkaXNhbGxvdyBtdWx0aS1nbG9icycgJworCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS5mZXRjaCBcCisJICAgICAgICAgICAgICAgICB0cnVuazpyZWZzL3JlbW90ZXMvdGhyZWUvdHJ1bmsgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUuYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovdC8qOnJlZnMvcmVtb3Rlcy90aHJlZS9icmFuY2hlcy8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS50YWdzIFwKKwkgICAgICAgICAgICAgICAgICJ0YWdzLyovKjpyZWZzL3JlbW90ZXMvdGhyZWUvdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCB0aHJlZSAyPiBzdGRlcnIudGhyZWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGhyZWUgc3RkZXJyLnRocmVlCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDktZ2l0LXN2bi1tdWx0aS1nbG9iLnNoIGIvdC90OTEwOS1naXQtc3ZuLW11bHRpLWdsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzFlNzU0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDktZ2l0LXN2bi1tdWx0aS1nbG9iLnNoCkBAIC0wLDAgKzEsMTY3IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBnbG9iYmluZyByZWZzcGVjcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCitjYXQgPiBleHBlY3QuZW5kIDw8RU9GCit0aGUgZW5kCitoaQorc3RhcnQgYSBuZXcgYnJhbmNoCitpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZWZzcGVjIGdsb2JiaW5nJyAnCisJbWtkaXIgLXAgdHJ1bmsvc3JjL2EgdHJ1bmsvc3JjL2IgdHJ1bmsvZG9jICYmCisJZWNobyAiaGVsbG8gd29ybGQiID4gdHJ1bmsvc3JjL2EvcmVhZG1lICYmCisJZWNobyAiZ29vZGJ5ZSB3b3JsZCIgPiB0cnVuay9zcmMvYi9yZWFkbWUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKKwkoCisJCWNkIHRtcCAmJgorCQlta2RpciBicmFuY2hlcyBicmFuY2hlcy92MSB0YWdzICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy92MS9zdGFydCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic3RhcnQgYSBuZXcgYnJhbmNoIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gImhpIiA+PiBicmFuY2hlcy92MS9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy92MS9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiaGV5IiA+PiBicmFuY2hlcy92MS9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy92MS9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImhpIiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvdjEvc3RhcnQgdGFncy9lbmQgJiYKKwkJZWNobyAiYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiYXllIiA+PiB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRoZSBlbmQiICYmCisJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgorCSkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJICAgICAgICAgICAgICAgICAidHJ1bmsvc3JjL2E6cmVmcy9yZW1vdGVzL3RydW5rIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovKi9zcmMvYTpyZWZzL3JlbW90ZXMvYnJhbmNoZXMvKi8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4udGFnc1wKKwkgICAgICAgICAgICAgICAgICJ0YWdzLyovc3JjL2E6cmVmcy9yZW1vdGVzL3RhZ3MvKiIgJiYKKwlnaXQgc3ZuIG11bHRpLWZldGNoICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy90YWdzL2VuZCA+YWN0dWFsICYmCisJc2VkIC1lICJzL14uXHs0MVx9Ly8iIGFjdHVhbCA+b3V0cHV0LmVuZCAmJgorCXRlc3RfY21wIGV4cGVjdC5lbmQgb3V0cHV0LmVuZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmR+MSkiID0gXAorCQkiJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9icmFuY2hlcy92MS9zdGFydCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9icmFuY2hlcy92MS9zdGFydH4yKSIgPSBcCisJCSIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RydW5rKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL2VuZEAzCisJJworCitlY2hvIHRyeSB0byB0cnkgPiBleHBlY3QudHdvCitlY2hvIG5vdGhpbmcgdG8gc2VlIGhlcmUgPj4gZXhwZWN0LnR3bworY2F0IGV4cGVjdC5lbmQgPj4gZXhwZWN0LnR3bworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGxlZnQtaGFuZC1zaWRlIG9ubHkgZ2xvYmJpbmcnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5mZXRjaCB0cnVuazpyZWZzL3JlbW90ZXMvdHdvL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKi8qOnJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvKi8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28udGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qOnJlZnMvcmVtb3Rlcy90d28vdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJZ2l0IHN2biBmZXRjaCB0d28gJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNiBhY3R1YWwgJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy92MS9zdGFydCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3YxL3N0YXJ0fjIpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdHJ1bmspICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZH4zKSA9IFwKKwkgICAgICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3YxL3N0YXJ0KSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXi5cezQxXH0vLyIgYWN0dWFsID5vdXRwdXQudHdvICYmCisJdGVzdF9jbXAgZXhwZWN0LnR3byBvdXRwdXQudHdvCisJJworY2F0ID4gZXhwZWN0LmZvdXIgPDxFT0YKK2FkaW9zCithZGRpbmcgbW9yZQorQ2hhbmdlZCAyIGluIHYyL3N0YXJ0CitBbm90aGVyIHZlcnNpb25lZCBicmFuY2gKK2luaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFub3RoZXIgYnJhbmNoJyAnCisJKAorCQljZCB0bXAgJiYKKwkJbWtkaXIgYnJhbmNoZXMvdjIgJiYKKwkJc3ZuX2NtZCBhZGQgYnJhbmNoZXMvdjIgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy92Mi9zdGFydCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQW5vdGhlciB2ZXJzaW9uZWQgYnJhbmNoIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gImhlbGxvIiA+PiBicmFuY2hlcy92Mi9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy92Mi9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiaG93ZHkiID4+IGJyYW5jaGVzL3YyL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL3YyL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQ2hhbmdlZCAyIGluIHYyL3N0YXJ0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvdjIvc3RhcnQgdGFncy9uZXh0ICYmCisJCWVjaG8gImJ5ZSIgPj4gdGFncy9uZXh0L3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiYXllIiA+PiB0YWdzL25leHQvc3JjL2EvcmVhZG1lICYmCisJCXBva2UgdGFncy9uZXh0L3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYWRkaW5nIG1vcmUiICYmCisJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9uZXh0L3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkaW9zIgorCSkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZm91ci51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLmZldGNoIHRydW5rOnJlZnMvcmVtb3Rlcy9mb3VyL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIuYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovKjpyZWZzL3JlbW90ZXMvZm91ci9icmFuY2hlcy8qLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIudGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qOnJlZnMvcmVtb3Rlcy9mb3VyL3RhZ3MvKiIgJiYKKwlnaXQgc3ZuIGZldGNoIGZvdXIgJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2ZvdXIvdGFncy9uZXh0ID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IGFjdHVhbCAmJgorCWdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZm91ci9icmFuY2hlcy92Mi9zdGFydCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZm91ci9icmFuY2hlcy92Mi9zdGFydH4yKSA9IFwKKwkgICAgICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZm91ci90cnVuaykgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZm91ci90YWdzL25leHR+MikgPSBcCisJICAgICAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZvdXIvYnJhbmNoZXMvdjIvc3RhcnQpICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy9mb3VyL3RhZ3MvbmV4dCA+YWN0dWFsICYmCisJc2VkIC1lICJzL14uXHs0MVx9Ly8iIGFjdHVhbCA+b3V0cHV0LmZvdXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZm91ciBvdXRwdXQuZm91cgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSB0ZXN0IGRpc2FsbG93IG11bHRpcGxlIGdsb2JzJyAiCitjYXQgPmV4cGVjdC50aHJlZSA8PEVPRgorT25seSBvbmUgc2V0IG9mIHdpbGRjYXJkcyAoZS5nLiAnKicgb3IgJyovKi8qJykgaXMgc3VwcG9ydGVkOiBicmFuY2hlcy8qL3QvKgorCitFT0YKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGlzYWxsb3cgbXVsdGlwbGUgZ2xvYnMnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUuZmV0Y2ggXAorCSAgICAgICAgICAgICAgICAgdHJ1bms6cmVmcy9yZW1vdGVzL3RocmVlL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qL3QvKjpyZWZzL3JlbW90ZXMvdGhyZWUvYnJhbmNoZXMvKi8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS50YWdzIFwKKwkgICAgICAgICAgICAgICAgICJ0YWdzLyo6cmVmcy9yZW1vdGVzL3RocmVlL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggdGhyZWUgMj4gc3RkZXJyLnRocmVlICYmCisJdGVzdF9jbXAgZXhwZWN0LnRocmVlIHN0ZGVyci50aHJlZQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTEwLWdpdC1zdm4tdXNlLXN2bS1wcm9wcy5zaCBiL3QvdDkxMTAtZ2l0LXN2bi11c2Utc3ZtLXByb3BzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkMzdkOTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTEwLWdpdC1zdm4tdXNlLXN2bS1wcm9wcy5zaApAQCAtMCwwICsxLDYxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHVzZVN2bVByb3BzIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2bSByZXBvJyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgIiRURVNUX0RJUkVDVE9SWSIvdDkxMTAvc3ZtLmR1bXAgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJyIC1pIGJhciAiJHN2bnJlcG8iL21pcnJvci9hcnIgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBkaXIgIiRzdm5yZXBvIi9taXJyb3IvYXJnaCAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcmdoIC1pIGUgXAorCSAgIiRzdm5yZXBvIi9taXJyb3IvYXJnaC9hL2IvYy9kL2UgJiYKKwlnaXQgY29uZmlnIHN2bi51c2VTdm1Qcm9wcyB0cnVlICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCScKKwordXVpZD0xNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKKworYmFyX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vYmFyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9iYXInICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXIgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEAxMiAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn4xID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxAMTEgJHV1aWQkJyBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+MiA+YWN0dWFsICYmCisJZ3JlcCAnXmdpdC1zdm4taWQ6ICRiYXJfdXJsQDEwICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjMgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEA5ICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjQgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEA2ICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjUgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEAxICR1dWlkJCcgYWN0dWFsCisJIgorCitlX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vZGlyL2EvYi9jL2QvZQordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvZGlyL2EvYi9jL2QvZScgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2UgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkZV91cmxAMSAkdXVpZCQnIGFjdHVhbAorCSIKKworZGlyX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vZGlyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9kaXInICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9kaXIgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkZGlyX3VybEAyICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZGlyfjEgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkZGlyX3VybEAxICR1dWlkJCcgYWN0dWFsCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIGNvbW1pdCBiYXNlZCBvbiBTVk4gcmV2aXNpb24gbnVtYmVyJyAiCisJZ2l0IHN2biBmaW5kLXJldiByMTIgPmFjdHVhbCAmJgorCWdyZXAgJChnaXQgcmV2LXBhcnNlIEhFQUQpIGFjdHVhbAorICAgICAgICAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHJlYmFzZScgIgorCWdpdCBzdm4gcmViYXNlCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTAvc3ZtLmR1bXAgYi90L3Q5MTEwL3N2bS5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNzk5YzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTEwL3N2bS5kdW1wCkBAIC0wLDAgKzEsNTExIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBkZTU5NzNjNi01NDVkLTQxZGEtYWRlZC1jMjY1ZjkwMzllNzQKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDY6NTQ6NTkuNzkzMTA0WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMjAwCitDb250ZW50LWxlbmd0aDogMjAwCisKK0sgNworc3ZuOmxvZworViA0MAorU1ZNOiBpbml0aWFsaXppbmcgbWlycm9yIGZvciAvbWlycm9yL2FycgorSyAxMAorc3ZuOmF1dGhvcgorViAzCitzdm0KK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MAorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA2OjU1OjAwLjEyMTY0N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDQ0CitDb250ZW50LWxlbmd0aDogNDQKKworSyAxMAorc3ZtOm1pcnJvcgorViAxMgorL21pcnJvci9hcnIKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FycgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDEwCitzdm06c291cmNlCitWIDI5CitodHRwOi8vbWF5b25haXNlL3N2bnJlcG8hL2JhcgorSyA4Citzdm06dXVpZAorViAzNgorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDE4MgorQ29udGVudC1sZW5ndGg6IDE4MgorCitLIDcKK3N2bjpsb2cKK1YgMTgKK2ltcG9ydCBmb3IgZ2l0LXN2bgorSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViAzOQorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjEKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1Mi4xMDg4NDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgMTAKK3N2bTpzb3VyY2UKK1YgMjkKK2h0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwbyEvYmFyCitLIDgKK3N2bTp1dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2Fyci96enoKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDMzYjAyYmMxNWNlOTU1N2QyZGQ4NDg0ZDU4Zjk1YWM0CitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECit6enoKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDIzMAorQ29udGVudC1sZW5ndGg6IDIzMAorCitLIDcKK3N2bjpsb2cKK1YgNjYKK25ldyBzeW1saW5rIGlzIGFkZGVkIHRvIGEgZmlsZSB0aGF0IHdhcyBhbHNvIGp1c3QgbWFkZSBleGVjdXRhYmxlCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OTo2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDEuNjg2ODkxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2Fyci96enoKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMzYKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDMzYjAyYmMxNWNlOTU1N2QyZGQ4NDg0ZDU4Zjk1YWM0CitDb250ZW50LWxlbmd0aDogNDAKKworSyAxNAorc3ZuOmV4ZWN1dGFibGUKK1YgMQorKgorUFJPUFMtRU5ECit6enoKKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDE5MgorQ29udGVudC1sZW5ndGg6IDE5MgorCitLIDcKK3N2bjpsb2cKK1YgMjgKKy9iYXIvZCBzaG91bGQgYmUgaW4gdGhlIGxvZworCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6OQorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA3LjY4NjU1MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvZAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogMGJlZTg5YjA3YTI0OGUyN2M4M2ZjM2Q1OTUxMjEzYzEKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK2FiYworCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTg1CitDb250ZW50LWxlbmd0aDogMTg1CisKK0sgNworc3ZuOmxvZworViAyMAorYWRkIGEgbmV3IGRpcmVjdG9yeQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDQwCisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MTAKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowOC40MDU5NTNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL25ld2RpcgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL25ld2Rpci9kaXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDljZDU5OWEzNTIzODk4ZTZhMTJlMTNlYzc4N2RhNTBhCitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECituZXcKKworCitSZXZpc2lvbi1udW1iZXI6IDYKK1Byb3AtY29udGVudC1sZW5ndGg6IDE5NgorQ29udGVudC1sZW5ndGg6IDE5NgorCitLIDcKK3N2bjpsb2cKK1YgMzEKK21vZGlmeSBhIGZpbGUgaW4gbmV3IGRpcmVjdG9yeQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDQwCisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MTEKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowOS4xMjY2NDVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL25ld2Rpci9kaXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogYTk1MGUyMDMzMjM1OGU1MjNhNWU5ZDU3MWU0N2ZhNjQKK0NvbnRlbnQtbGVuZ3RoOiA4CisKK25ldworZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiA3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNzkKK0NvbnRlbnQtbGVuZ3RoOiAxNzkKKworSyA3Citzdm46bG9nCitWIDE0Cit1cGRhdGUgL2Jhci9kCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgNDAKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OToxMgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA5Ljg0NjIyMVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvZAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiA3YWJiNzhkZTdmMjc1NmNhOGI1MTFjYmM4NzlmZDVlNworQ29udGVudC1sZW5ndGg6IDQKKworY2JhCisKKworUmV2aXNpb24tbnVtYmVyOiA4CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyMDEKK0NvbnRlbnQtbGVuZ3RoOiAyMDEKKworSyA3Citzdm46bG9nCitWIDQxCitTVk06IGluaXRpYWxpemluZyBtaXJyb3IgZm9yIC9taXJyb3IvYXJnaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCitzdm0KK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MAorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA2OjU2OjAzLjcwMzY3N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU3CitDb250ZW50LWxlbmd0aDogNTcKKworSyAxMAorc3ZtOm1pcnJvcgorViAyNQorL21pcnJvci9hcmdoCisvbWlycm9yL2FycgorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgMTAKK3N2bTpzb3VyY2UKK1YgMjkKK2h0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwbyEvZGlyCitLIDgKK3N2bTp1dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTgyCitDb250ZW50LWxlbmd0aDogMTgyCisKK0sgNworc3ZuOmxvZworViAxOAoraW1wb3J0IGZvciBnaXQtc3ZuCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MQorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjUyLjEwODg0N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgMTAKK3N2bTpzb3VyY2UKK1YgMjkKK2h0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwbyEvZGlyCitLIDgKK3N2bTp1dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYS9iL2MKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYS9iL2MvZAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IvYy9kL2UKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYS9iL2MvZC9lL2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDNmZDQ2ZmU0NmZjZGNmMDYyYzgwMmNhNjBkYzgyNmQ1CitDb250ZW50LWxlbmd0aDogMTkKKworUFJPUFMtRU5ECitkZWVwIGRpcgorCisKK1JldmlzaW9uLW51bWJlcjogMTAKK1Byb3AtY29udGVudC1sZW5ndGg6IDE5NworQ29udGVudC1sZW5ndGg6IDE5NworCitLIDcKK3N2bjpsb2cKK1YgMzMKK3RyeSBhIGRlZXAgLS1ybWRpciB3aXRoIGEgY29tbWl0CisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OToyCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTQuODQ3MDE1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogOQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IvYy9kL2UvZmlsZQorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogM2ZkNDZmZTQ2ZmNkY2YwNjJjODAyY2E2MGRjODI2ZDUKK0NvbnRlbnQtbGVuZ3RoOiA5CisKK2RlZXAgZGlyCisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKwpkaWZmIC0tZ2l0IGEvdC90OTExMS1naXQtc3ZuLXVzZS1zdm5zeW5jLXByb3BzLnNoIGIvdC90OTExMS1naXQtc3ZuLXVzZS1zdm5zeW5jLXByb3BzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjOTMwNzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTExLWdpdC1zdm4tdXNlLXN2bnN5bmMtcHJvcHMuc2gKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biB1c2VTdm5zeW5jUHJvcHMgdGVzdCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3Zuc3luYyByZXBvJyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgIiRURVNUX0RJUkVDVE9SWSIvdDkxMTEvc3Zuc3luYy5kdW1wICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyciAtaSBiYXIgIiRzdm5yZXBvIi9iYXIgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBkaXIgIiRzdm5yZXBvIi9kaXIgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBlICIkc3ZucmVwbyIvZGlyL2EvYi9jL2QvZSAmJgorCWdpdCBjb25maWcgc3ZuLnVzZVN2bnN5bmNQcm9wcyB0cnVlICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCScKKwordXVpZD0xNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKKworYmFyX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vYmFyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9iYXInICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXIgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEAxMiAkdXVpZCQnIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn4xID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogJGJhcl91cmxAMTEgJHV1aWQkJyBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+MiA+YWN0dWFsICYmCisJZ3JlcCAnXmdpdC1zdm4taWQ6ICRiYXJfdXJsQDEwICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjMgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEA5ICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjQgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEA2ICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjUgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkYmFyX3VybEAxICR1dWlkJCcgYWN0dWFsCisJIgorCitlX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vZGlyL2EvYi9jL2QvZQordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvZGlyL2EvYi9jL2QvZScgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2UgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkZV91cmxAMSAkdXVpZCQnIGFjdHVhbAorCSIKKworZGlyX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vZGlyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9kaXInICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9kaXIgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkZGlyX3VybEAyICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZGlyfjEgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAkZGlyX3VybEAxICR1dWlkJCcgYWN0dWFsCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTEvc3Zuc3luYy5kdW1wIGIvdC90OTExMS9zdm5zeW5jLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk5ZmE5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTEvc3Zuc3luYy5kdW1wCkBAIC0wLDAgKzEsNTYwIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBiNGJmZTM1ZS1mMjU2LTQwOTYtODc0Yy0wOGM1NjM5ZWNhZDcKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyNDAKK0NvbnRlbnQtbGVuZ3RoOiAyNDAKKworSyAxOAorc3ZuOnN5bmMtZnJvbS11dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAyNAorc3ZuOnN5bmMtbGFzdC1tZXJnZWQtcmV2CitWIDIKKzEyCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjUyLjAxNzU1MloKK0sgMTcKK3N2bjpzeW5jLWZyb20tdXJsCitWIDI0CitodHRwOi8vbWF5b25haXNlL3N2bnJlcG8KK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMAorQ29udGVudC1sZW5ndGg6IDEyMAorCitLIDcKK3N2bjpsb2cKK1YgMTgKK2ltcG9ydCBmb3IgZ2l0LXN2bgorSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjUyLjEwODg0N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhcgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBiYXIvenp6CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiAzM2IwMmJjMTVjZTk1NTdkMmRkODQ4NGQ1OGY5NWFjNAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorenp6CisKKworTm9kZS1wYXRoOiBkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EvYgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBkaXIvYS9iL2MKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EvYi9jL2QKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EvYi9jL2QvZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBkaXIvYS9iL2MvZC9lL2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDNmZDQ2ZmU0NmZjZGNmMDYyYzgwMmNhNjBkYzgyNmQ1CitDb250ZW50LWxlbmd0aDogMTkKKworUFJPUFMtRU5ECitkZWVwIGRpcgorCisKK05vZGUtcGF0aDogZXhlYy5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDNlMmIzMWM3MjE4MWI4NzE0OWZmOTk1ZTcyMDJjMGUzCitDb250ZW50LWxlbmd0aDogNDUKKworSyAxNAorc3ZuOmV4ZWN1dGFibGUKK1YgMAorCitQUk9QUy1FTkQKKyMhL2Jpbi9zaAorCisKK05vZGUtcGF0aDogZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBkM2IwNzM4NGQxMTNlZGVjNDllYWE2MjM4YWQ1ZmYwMAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorZm9vCisKKworTm9kZS1wYXRoOiBmb28ubGluaworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogMTA0MzE0NmU0OWVmMDJjYWIxMmVlZjg2NWNiMzRmZjMKK0NvbnRlbnQtbGVuZ3RoOiA0MQorCitLIDExCitzdm46c3BlY2lhbAorViAxCisqCitQUk9QUy1FTkQKK2xpbmsgZm9vCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTM1CitDb250ZW50LWxlbmd0aDogMTM1CisKK0sgNworc3ZuOmxvZworViAzMwordHJ5IGEgZGVlcCAtLXJtZGlyIHdpdGggYSBjb21taXQKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjU0Ljg0NzAxNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGRpci9maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IGRpci9hL2IvYy9kL2UvZmlsZQorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogM2ZkNDZmZTQ2ZmNkY2YwNjJjODAyY2E2MGRjODI2ZDUKK0NvbnRlbnQtbGVuZ3RoOiA5CisKK2RlZXAgZGlyCisKKworTm9kZS1wYXRoOiBkaXIvYQorTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKK05vZGUtcGF0aDogZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBkaXIvYS9iL2MvZC9lL2ZpbGUKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDNmZDQ2ZmU0NmZjZGNmMDYyYzgwMmNhNjBkYzgyNmQ1CitDb250ZW50LWxlbmd0aDogOQorCitkZWVwIGRpcgorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTM2CitDb250ZW50LWxlbmd0aDogMTM2CisKK0sgNworc3ZuOmxvZworViAzNAorcmVtb3ZlIGV4ZWN1dGFibGUgYml0IGZyb20gYSBmaWxlCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1OC4yMzI2OTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBleGVjLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogM2UyYjMxYzcyMTgxYjg3MTQ5ZmY5OTVlNzIwMmMwZTMKK0NvbnRlbnQtbGVuZ3RoOiAyMAorCitQUk9QUy1FTkQKKyMhL2Jpbi9zaAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgNworc3ZuOmxvZworViAyOQorYWRkIGV4ZWN1dGFibGUgYml0IGJhY2sgZmlsZQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTkuNjY2NTYwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNgorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDNlMmIzMWM3MjE4MWI4NzE0OWZmOTk1ZTcyMDJjMGUzCitDb250ZW50LWxlbmd0aDogNDYKKworSyAxNAorc3ZuOmV4ZWN1dGFibGUKK1YgMQorKgorUFJPUFMtRU5ECisjIS9iaW4vc2gKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDE1NAorQ29udGVudC1sZW5ndGg6IDE1NAorCitLIDcKK3N2bjpsb2cKK1YgNTIKK2V4ZWN1dGFibGUgZmlsZSBiZWNvbWVzIGEgc3ltbGluayB0byBiYXIvenp6IChmaWxlKQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDAuNjc2NDk1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworVGV4dC1jb250ZW50LWxlbmd0aDogMTIKK1RleHQtY29udGVudC1tZDU6IGYxMzg2OTMzNzE2NjVjYzExNzc0MjUwODc2MWQ2ODRkCitDb250ZW50LWxlbmd0aDogNDUKKworSyAxMQorc3ZuOnNwZWNpYWwKK1YgMQorKgorUFJPUFMtRU5ECitsaW5rIGJhci96enoKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNjgKK0NvbnRlbnQtbGVuZ3RoOiAxNjgKKworSyA3Citzdm46bG9nCitWIDY2CituZXcgc3ltbGluayBpcyBhZGRlZCB0byBhIGZpbGUgdGhhdCB3YXMgYWxzbyBqdXN0IG1hZGUgZXhlY3V0YWJsZQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDEuNjg2ODkxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL3p6egorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNgorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogMzNiMDJiYzE1Y2U5NTU3ZDJkZDg0ODRkNThmOTVhYzQKK0NvbnRlbnQtbGVuZ3RoOiA0MAorCitLIDE0Citzdm46ZXhlY3V0YWJsZQorViAxCisqCitQUk9QUy1FTkQKK3p6egorCisKK05vZGUtcGF0aDogZXhlYy0yLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA1CitOb2RlLWNvcHlmcm9tLXBhdGg6IGV4ZWMuc2gKK1RleHQtY29udGVudC1sZW5ndGg6IDEyCitUZXh0LWNvbnRlbnQtbWQ1OiBmMTM4NjkzMzcxNjY1Y2MxMTc3NDI1MDg3NjFkNjg0ZAorQ29udGVudC1sZW5ndGg6IDEyCisKK2xpbmsgYmFyL3p6egorCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNgorQ29udGVudC1sZW5ndGg6IDEzNgorCitLIDcKK3N2bjpsb2cKK1YgMzQKK21vZGlmeSBhIHN5bWxpbmsgdG8gYmVjb21lIGEgZmlsZQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDIuNjc3MDM1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy0yLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiA4ZTkyZWZmOWU5MTE4ODZjZWRlMjdkNDIwZjg5YzczNQorQ29udGVudC1sZW5ndGg6IDE5CisKK1BST1BTLUVORAorZ2l0IGhlbHAKKworCitSZXZpc2lvbi1udW1iZXI6IDgKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwOQorQ29udGVudC1sZW5ndGg6IDEwOQorCitLIDcKK3N2bjpsb2cKK1YgOAorw6nDr+KIjworCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDMuNjc2ODYyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy0yLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDE3CitUZXh0LWNvbnRlbnQtbWQ1OiA0OTg4MTk1NDA2M2NmMjZjYTQ4YzIxMjM5NmE5NTdjYQorQ29udGVudC1sZW5ndGg6IDE3CisKK2dpdCBoZWxwCisjIGhlbGxvCisKKworUmV2aXNpb24tbnVtYmVyOiA5CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzAKK0NvbnRlbnQtbGVuZ3RoOiAxMzAKKworSyA3Citzdm46bG9nCitWIDI4CisvYmFyL2Qgc2hvdWxkIGJlIGluIHRoZSBsb2cKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA3LjY4NjU1MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhci9kCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiAwYmVlODliMDdhMjQ4ZTI3YzgzZmMzZDU5NTEyMTNjMQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorYWJjCisKKworUmV2aXNpb24tbnVtYmVyOiAxMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIyCitDb250ZW50LWxlbmd0aDogMTIyCisKK0sgNworc3ZuOmxvZworViAyMAorYWRkIGEgbmV3IGRpcmVjdG9yeQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDguNDA1OTUzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL25ld2RpcgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBiYXIvbmV3ZGlyL2RpcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogOWNkNTk5YTM1MjM4OThlNmExMmUxM2VjNzg3ZGE1MGEKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK25ldworCisKK1JldmlzaW9uLW51bWJlcjogMTEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMworQ29udGVudC1sZW5ndGg6IDEzMworCitLIDcKK3N2bjpsb2cKK1YgMzEKK21vZGlmeSBhIGZpbGUgaW4gbmV3IGRpcmVjdG9yeQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDkuMTI2NjQ1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL25ld2Rpci9kaXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogYTk1MGUyMDMzMjM1OGU1MjNhNWU5ZDU3MWU0N2ZhNjQKK0NvbnRlbnQtbGVuZ3RoOiA4CisKK25ldworZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiAxMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgNworc3ZuOmxvZworViAxNAordXBkYXRlIC9iYXIvZAorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDkuODQ2MjIxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL2QKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogN2FiYjc4ZGU3ZjI3NTZjYThiNTExY2JjODc5ZmQ1ZTcKK0NvbnRlbnQtbGVuZ3RoOiA0CisKK2NiYQpkaWZmIC0tZ2l0IGEvdC90OTExMi1naXQtc3ZuLW1kNWxlc3MtZmlsZS5zaCBiL3QvdDkxMTItZ2l0LXN2bi1tZDVsZXNzLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTg2MWM3MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTItZ2l0LXN2bi1tZDVsZXNzLWZpbGUuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdGhhdCBnaXQgaGFuZGxlcyBhbiBzdm4gcmVwb3NpdG9yeSB3aXRoIG1pc3NpbmcgbWQ1c3VtcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgTG9hZGluZyBhIG5vZGUgZnJvbSBhIHN2biBkdW1wZmlsZSB3aXRob3V0IGEgVGV4dC1Db250ZW50LUxlbmd0aAorIyBmaWVsZCBjYXVzZXMgc3ZuIHRvIG5lZ2xlY3QgdG8gc3RvcmUgb3IgcmVwb3J0IGFuIG1kNXN1bS4gIChpdCB3aWxsCisjIGNhbGN1bGF0ZSBvbmUgaWYgeW91IGhhZCBwdXQgVGV4dC1Db250ZW50LUxlbmd0aDogMCkuICBUaGlzIHNob3dlZAorIyB1cCBpbiBhIHJlcG9zaXRvcnkgY3JlYXRlZCB3aXRoIGN2czJzdm4uCisKK2NhdCA+IGR1bXBmaWxlLnN2biA8PEVPRgorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDEKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA5OAorQ29udGVudC1sZW5ndGg6IDk4CisKK0sgNworc3ZuOmxvZworViAwCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNAordGVzdAorSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wNS0wNlQxMjozNzowMS4xNTMzMzlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtZDVsZXNzLWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAnc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDwgZHVtcGZpbGUuc3ZuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIGdpdCBzdm4nICdnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHJldmlzaW9ucyBmcm9tIHN2bicgJ2dpdCBzdm4gZmV0Y2gnCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoIGIvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTg0NzljZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKKyMgRG9uJ3QgcnVuIHRoaXMgdGVzdCBieSBkZWZhdWx0IHVubGVzcyB0aGUgdXNlciByZWFsbHkgd2FudHMgaXQKKyMgSSBkb24ndCBsaWtlIHRoZSBpZGVhIG9mIHRha2luZyBhIHBvcnQgYW5kIHBvc3NpYmx5IGxlYXZpbmcgYQorIyBkYWVtb24gcnVubmluZyBvbiBhIHVzZXJzIHN5c3RlbSBpZiB0aGUgdGVzdCBmYWlscy4KKyMgTm90IGFsbCBnaXQgdXNlcnMgd2lsbCBuZWVkIHRvIGludGVyYWN0IHdpdGggU1ZOLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgbmV3IGZpbGVzIG92ZXIgc3ZuOi8vIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCityZXF1aXJlX3N2bnNlcnZlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHRyYWNraW5nIGFuIGVtcHR5IHJlcG8nICcKKwlzdm5fY21kIG1rZGlyIC1tICJlbXB0eSBkaXIiICIkc3ZucmVwbyIvZW1wdHktZGlyICYmCisJZWNobyAiW2dlbmVyYWxdIiA+ICIkcmF3c3ZucmVwbyIvY29uZi9zdm5zZXJ2ZS5jb25mICYmCisJZWNobyBhbm9uLWFjY2VzcyA9IHdyaXRlID4+ICIkcmF3c3ZucmVwbyIvY29uZi9zdm5zZXJ2ZS5jb25mICYmCisJc3RhcnRfc3Zuc2VydmUgJiYKKwlnaXQgc3ZuIGluaXQgc3ZuOi8vMTI3LjAuMC4xOiRTVk5TRVJWRV9QT1JUICYmCisJZ2l0IHN2biBmZXRjaAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGVzIGluIG5ldyBkaXJlY3Rvcnkgd2l0aCBkY29tbWl0JyAiCisJbWtkaXIgZ2l0LW5ldy1kaXIgJiYKKwllY2hvIGhlbGxvID4gZ2l0LW5ldy1kaXIvd29ybGQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGdpdC1uZXctZGlyL3dvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBoZWxsbyAmJgorCXN0YXJ0X3N2bnNlcnZlICYmCisJZ2l0IHN2biBkY29tbWl0CisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoIGIvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzIzMTdkNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjIEJhc2VkIG9uIGEgc2NyaXB0IGJ5IEpvYWtpbSBUamVybmx1bmQgPGpvYWtpbS50amVybmx1bmRAdHJhbnNtb2RlLnNlPgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgaGFuZGxlcyBtZXJnZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitiaWdfdGV4dF9ibG9jayAoKSB7CitjYXQgPDwgRU9GCisjCisjIChDKSBDb3B5cmlnaHQgMjAwMCAtIDIwMDUKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIG15c3Zud29yayAmJgorCW1rZGlyIC1wIG15c3Zud29yay90cnVuayAmJgorCSgKKwkJY2QgbXlzdm53b3JrICYmCisJCWJpZ190ZXh0X2Jsb2NrID4+dHJ1bmsvUkVBRE1FICYmCisJCXN2bl9jbWQgYWRkIHRydW5rICYmCisJCXN2bl9jbWQgY2kgLW0gImZpcnN0IGNvbW1pdCIgdHJ1bmsKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBnaXQgbWlycm9yIGFuZCBtZXJnZScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIC10IHRhZ3MgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIHN2biByZW1vdGVzL29yaWdpbi90cnVuayAmJgorCWdpdCBjaGVja291dCAtYiBtZXJnZSAmJgorCWVjaG8gbmV3IGZpbGUgPiBuZXdfZmlsZSAmJgorCWdpdCBhZGQgbmV3X2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJOZXcgZmlsZSIgJiYKKwllY2hvIGhlbGxvID4+IFJFQURNRSAmJgorCWdpdCBjb21taXQgLWEgLW0gImhlbGxvIiAmJgorCWVjaG8gYWRkIHNvbWUgc3R1ZmYgPj4gbmV3X2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhZGQgc29tZSBzdHVmZiIgJiYKKwlnaXQgY2hlY2tvdXQgc3ZuICYmCisJbXYgLWYgUkVBRE1FIHRtcCAmJgorCWVjaG8gZnJpZW5kID4gUkVBRE1FICYmCisJY2F0IHRtcCA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJmcmllbmQiICYmCisJZ2l0IG1lcmdlIG1lcmdlCisJJworCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHByZS1tZXJnZSBhbmNlc3RyeScgIgorCXRlc3QgeFwkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zdm5eMikgPSBcCisJICAgICB4XCQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21lcmdlKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9oZWFkcy9zdm5eID5hY3R1YWwgJiYKKwlncmVwICdeZnJpZW5kJCcgYWN0dWFsCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGRjb21taXQgbWVyZ2VzJyAiCisJZ2l0IHN2biBkY29tbWl0CisJIgorCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHBvc3QtbWVyZ2UgYW5jZXN0cnknICIKKwl0ZXN0IHhcJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc3ZuKSA9IFwKKwkgICAgIHhcJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmspICYmCisJdGVzdCB4XCQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3N2bl4yKSA9IFwKKwkgICAgIHhcJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWVyZ2UpICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL2hlYWRzL3N2bl4gPmFjdHVhbCAmJgorCWdyZXAgJ15mcmllbmQkJyBhY3R1YWwKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSBjb21taXQgbWVzc2FnZScgIgorCWdpdCByZXYtbGlzdCAtLXByZXR0eT1yYXcgLTEgcmVmcy9oZWFkcy9zdm4gPmFjdHVhbCAmJgorCWdyZXAgXCIgICAgTWVyZ2UgYnJhbmNoICdtZXJnZScgaW50byBzdm5cIiBhY3R1YWwKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExNS1naXQtc3ZuLWRjb21taXQtZnVua3ktcmVuYW1lcy5zaCBiL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWI0NGE0NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2gKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IGNhbiBjb21taXQgcmVuYW1lcyBvZiBmaWxlcyB3aXRoIHVnbHkgbmFtZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHJlcG9zaXRvcnkgd2l0aCBzdHJhbmdlIG5hbWVzJyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwiJFRFU1RfRElSRUNUT1JZIi90OTExNS9mdW5reS1uYW1lcy5kdW1wCisnCisKK21heWJlX3N0YXJ0X2h0dHBkIGd0aysKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggcmVwb3NpdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgZ2l0LXN2bgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGUgaW4gZXhpc3RpbmcgdWdseSBhbmQgZW1wdHkgZGlyJyAnCisJbWtkaXIgLXAgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfSIgJiYKKwllY2hvIGhpID4gIiN7YmFkX2RpcmVjdG9yeV9uYW1lfS8gZm9vIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfS8gZm9vIiAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBmaWxlIGluIHVnbHkgcGFyZW50IiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHVnbHkgZmlsZScgJworCWdpdCBtdiAiI3tiYWRfZGlyZWN0b3J5X25hbWV9LyBmb28iICJmaWxlIG5hbWUgd2l0aCBmZWNlcyIgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgdWdseSBmaWxlIiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHByZXR0eSBmaWxlJyAnCisJZWNobyA6eCA+IHByZXR0eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcHJldHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAicHJldHR5IDp4IiAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCW1rZGlyIC1wIHJlZ3VsYXJfZGlyX25hbWUgJiYKKwlnaXQgbXYgcHJldHR5IHJlZ3VsYXJfZGlyX25hbWUvcHJldHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAibW92ZWQgcHJldHR5IGZpbGUiICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgcHJldHR5IGZpbGUgaW50byB1Z2x5IG9uZScgJworCWdpdCBtdiByZWd1bGFyX2Rpcl9uYW1lL3ByZXR0eSAiI3tiYWRfZGlyZWN0b3J5X25hbWV9LyBib29ib28iICYmCisJZ2l0IGNvbW1pdCAtbSBib29ib28gJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhIGZpbGUgd2l0aCBwbHVzIHNpZ25zJyAnCisJZWNobyAuLiA+ICtfKyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgK18rICYmCisJZ2l0IGNvbW1pdCAtbSBwbHVzICYmCisJbWtkaXIgZ3RrKyAmJgorCWdpdCBtdiArXysgZ3RrKy9fK18gJiYKKwlnaXQgY29tbWl0IC1tIHBsdXNfZGlyICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0aGUgcmVwb3NpdG9yeSB0byB0ZXN0IHJlYmFzZScgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB0ZXN0LXJlYmFzZSAmJgorCSgKKwkJY2QgdGVzdC1yZWJhc2UgJiYKKwkJZWNobyB0ZXN0LXJlYmFzZSA+dGVzdC1yZWJhc2UgJiYKKwkJZ2l0IGFkZCB0ZXN0LXJlYmFzZSAmJgorCQlnaXQgY29tbWl0IC1tIHRlc3QtcmViYXNlCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBhIGNvbW1pdCB0byB0ZXN0IHJlYmFzZScgJworCQllY2hvIHRlc3QtcmViYXNlLW1haW4gPiB0ZXN0LXJlYmFzZS1tYWluICYmCisJCWdpdCBhZGQgdGVzdC1yZWJhc2UtbWFpbiAmJgorCQlnaXQgY29tbWl0IC1tIHRlc3QtcmViYXNlLW1haW4gJiYKKwkJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIHJlYmFzZSB3b3JrcyBpbnNpZGUgYSBmcmVzaC1jbG9uZWQgcmVwb3NpdG9yeScgJworCSgKKwkJY2QgdGVzdC1yZWJhc2UgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJdGVzdCAtZSB0ZXN0LXJlYmFzZS1tYWluICYmCisJCXRlc3QgLWUgdGVzdC1yZWJhc2UKKwkpJworCisjIFdpdGhvdXQgdGhpcywgTENfQUxMPUMgYXMgc2V0IGluIHRlc3QtbGliLnNoLCBhbmQgQ3lnd2luIGNvbnZlcnRzCisjIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIGZpbGVuYW1lcyB1bmV4cGVjdGVkbHksIGFuZCBjYXVzZXMgZXJyb3JzLgorIyBodHRwczovL2N5Z3dpbi5jb20vY3lnd2luLXVnLW5ldC91c2luZy1zcGVjaWFsbmFtZXMuaHRtbCNwYXRobmFtZXMtc3BlY2lhbGNoYXJzCisjID4gU29tZSBjaGFyYWN0ZXJzIGFyZSBkaXNhbGxvd2VkIGluIGZpbGVuYW1lcyBvbiBXaW5kb3dzIGZpbGVzeXN0ZW1zLiAuLi4KKyMgLi4uCisjID4gLi4uIEFsbCBvZiB0aGUgYWJvdmUgY2hhcmFjdGVycywgZXhjZXB0IGZvciB0aGUgYmFja3NsYXNoLCBhcmUgY29udmVydGVkCisjID4gdG8gc3BlY2lhbCBVTklDT0RFIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIDB4ZjAwMCB0byAweGYwZmYgKHRoZQorIyA+ICJQcml2YXRlIHVzZSBhcmVhIikgd2hlbiBjcmVhdGluZyBvciBhY2Nlc3NpbmcgZmlsZXMuCitwcmVwYXJlX2FfdXRmOF9sb2NhbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCwhTUlOR1csIVVURjhfTkZEX1RPX05GQyAnc3ZuLnBhdGhuYW1lZW5jb2Rpbmc9Y3A5MzIgbmV3IGZpbGUgb24gZGNvbW1pdCcgJworCUxDX0FMTD0kYV91dGY4X2xvY2FsZSAmJgorCWV4cG9ydCBMQ19BTEwgJiYKKwluZXE9JChwcmludGYgIlwyMDFcMjAyIikgJiYKKwlnaXQgY29uZmlnIHN2bi5wYXRobmFtZWVuY29kaW5nIGNwOTMyICYmCisJZWNobyBuZXEgPiIkbmVxIiAmJgorCWdpdCBhZGQgIiRuZXEiICYmCisJZ2l0IGNvbW1pdCAtbSAibmVxIiAmJgorCWdpdCBzdm4gZGNvbW1pdAorJworCisjIFNlZSB0aGUgY29tbWVudCBvbiB0aGUgYWJvdmUgdGVzdCBmb3Igc2V0dGluZyBvZiBMQ19BTEwuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVywhVVRGOF9ORkRfVE9fTkZDICdzdm4ucGF0aG5hbWVlbmNvZGluZz1jcDkzMiByZW5hbWUgb24gZGNvbW1pdCcgJworCUxDX0FMTD0kYV91dGY4X2xvY2FsZSAmJgorCWV4cG9ydCBMQ19BTEwgJiYKKwlpbmY9JChwcmludGYgIlwyMDFcMjA3IikgJiYKKwlnaXQgY29uZmlnIHN2bi5wYXRobmFtZWVuY29kaW5nIGNwOTMyICYmCisJZWNobyBpbmYgPiIkaW5mIiAmJgorCWdpdCBhZGQgIiRpbmYiICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5mIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCWdpdCBtdiAiJGluZiIgaW5mICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5mIHJlbmFtZSIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTE1L2Z1bmt5LW5hbWVzLmR1bXAgYi90L3Q5MTE1L2Z1bmt5LW5hbWVzLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0MjJmNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTUvZnVua3ktbmFtZXMuZHVtcApAQCAtMCwwICsxLDEwMyBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogODE5YzQ0ZmUtMmJjYy00MDY2LTg4ZTQtOTg1ZTJiYzBiNDE4CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTA3LTEyVDA3OjU0OjI2LjA2MjkxNFoKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDE1MgorQ29udGVudC1sZW5ndGg6IDE1MgorCitLIDcKK3N2bjpsb2cKK1YgNDQKK3doYXQgd2lsbCB0aG9zZSB3YWNreSBwZW9wbGUgdGhpbmsgb2YgbmV4dD8KKworSyAxMAorc3ZuOmF1dGhvcgorViAxMgorbm9ybWFscGVyc29uCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTA3LTEyVDA4OjAwOjA1LjAxMTU3M1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6ICBsZWFkaW5nIHNwYWNlCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6ICBsZWFkaW5nIHNwYWNlIGZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDUKK1RleHQtY29udGVudC1tZDU6IGU0ZmEyMGM2NzU0MmNkYzIxMjcxZTA4ZDMyOTM5N2FiCitDb250ZW50LWxlbmd0aDogMTUKKworUFJPUFMtRU5ECit1Z2x5CisKKworTm9kZS1wYXRoOiAje2JhZF9kaXJlY3RvcnlfbmFtZX0KK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogI3tjb29sX25hbWV9CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxOAorVGV4dC1jb250ZW50LW1kNTogODdkYWM0MGNhMzM3ZGZhM2RjYzg5MTEzODhjM2RkZGEKK0NvbnRlbnQtbGVuZ3RoOiAyOAorCitQUk9QUy1FTkQKK3N0cmFuZ2UgbmFtZSBoZXJlCisKKworTm9kZS1wYXRoOiBkaXIgbmFtZSB3aXRoIHNwYWNlcworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBmaWxlIG5hbWUgd2l0aCBzcGFjZXMKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDcKK1RleHQtY29udGVudC1tZDU6IGMxZjEwY2ZkNjQwNjE4NDg0YTJhNDc1YzExNDEwZmQzCitDb250ZW50LWxlbmd0aDogMTcKKworUFJPUFMtRU5ECitzcGFjZXMKKworCitOb2RlLXBhdGg6IHJlZ3VsYXJfZGlyX25hbWUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORApkaWZmIC0tZ2l0IGEvdC90OTExNi1naXQtc3ZuLWxvZy5zaCBiL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGE5ZjFlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2gKQEAgLTAsMCArMSwxNDkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbG9nIHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgYW5kIGltcG9ydCcgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCWZvciBpIGluIHRydW5rIGJyYW5jaGVzL2EgYnJhbmNoZXMvYiB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMworCQlkbworCQkJbWtkaXIgLXAgJGkgJiYKKwkJCWVjaG8gaGVsbG8gPj4kaS9SRUFETUUgfHwKKwkJCWV4aXQgMQorCQlkb25lICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tIHRlc3QgLiAiJHN2bnJlcG8iCisJKSAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIC1UIHRydW5rIC1iIGJyYW5jaGVzIC10IHRhZ3MgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwllY2hvIGJ5ZSA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGJ5ZSAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL2EgJiYKKwllY2hvIHdoeSA+PiBGRUVETUUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEZFRURNRSAmJgorCWdpdCBjb21taXQgLW0gZmVlZG1lICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwllY2hvIGF5ZSA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGF5ZSAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL2IgJiYKKwllY2hvIHNweSA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNweSAmJgorCWVjaG8gdHJ5ID4+IFJFQURNRSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHJ5ICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gbG9nJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vYSAmJgorCWdpdCBzdm4gbG9nIC1yMiBvcmlnaW4vdHJ1bmsgPm91dCAmJgorCWdyZXAgXnIyIG91dCAmJgorCWdpdCBzdm4gbG9nIC1yNCBvcmlnaW4vdHJ1bmsgPm91dCAmJgorCWdyZXAgXnI0IG91dCAmJgorCWdpdCBzdm4gbG9nIC1yMyA+b3V0ICYmCisJZ3JlcCBecjMgb3V0CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gbG9nIGFnYWluc3QgYSBmcm9tIHRydW5rJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtcjMgb3JpZ2luL2EgPm91dCAmJgorCWdyZXAgXnIzIG91dAorCSIKKworcHJpbnRmICdyMSBcbnIyIFxucjQgXG4nID4gZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2UnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDE6NCB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0IC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggLS1zaG93LWNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLS1zaG93LWNvbW1pdCAtciAxOjQgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMS1yMi1yNCAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIC0tc2hvdy1jb21taXQgKHNoYTEpJyAiCisJZ2l0IHN2biBmaW5kLXJldiByMSA+ZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQtc2hhMSAmJgorCWdpdCBzdm4gZmluZC1yZXYgcjIgPj5leHBlY3RlZC1yYW5nZS1yMS1yMi1yNC1zaGExICYmCisJZ2l0IHN2biBmaW5kLXJldiByNCA+PmV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0LXNoYTEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC0tc2hvdy1jb21taXQgLXIgMTo0IHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYyID5vdXQgJiYKKwlnaXQgcmV2LXBhcnNlIFwkKGNhdCBvdXQpID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMS1yMi1yNC1zaGExIGFjdHVhbAorCSIKKworcHJpbnRmICdyNCBcbnIyIFxucjEgXG4nID4gZXhwZWN0ZWQtcmFuZ2UtcjQtcjItcjEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciA0OjEgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yNC1yMi1yMSAtCisJIgorCitwcmludGYgJ3IxIFxucjIgXG4nID4gZXhwZWN0ZWQtcmFuZ2UtcjEtcjIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSByZXZpc2lvbicgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMTozIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjEtcjIgLQorCSIKKworcHJpbnRmICdyMiBcbnIxIFxuJyA+IGV4cGVjdGVkLXJhbmdlLXIyLXIxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIHJldmlzaW9uJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAzOjEgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMi1yMSAtCisJIgorCitwcmludGYgJ3IyIFxuJyA+IGV4cGVjdGVkLXJhbmdlLXIyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgdXBwZXIgYm91bmRhcnkgcmV2aXNpb24gYW5kIDEgY29tbWl0JyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAyOjMgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMiAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRlc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSB1cHBlciBib3VuZGFyeSByZXZpc2lvbiBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDM6MiB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIyIC0KKwkiCisKK3ByaW50ZiAncjQgXG4nID4gZXhwZWN0ZWQtcmFuZ2UtcjQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBsb3dlciBib3VuZGFyeSByZXZpc2lvbiBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDM6NCB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXI0IC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGxvd2VyIGJvdW5kYXJ5IHJldmlzaW9uIGFuZCAxIGNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgNDozIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjQgLQorCSIKKworcHJpbnRmIC0tICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbicgPiBleHBlY3RlZC1zZXBhcmF0b3IKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBib3VuZGFyeSByZXZpc2lvbnMgYW5kIG5vIGNvbW1pdHMnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDU6NiB8IHRlc3RfY21wIGV4cGVjdGVkLXNlcGFyYXRvciAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRlc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSBib3VuZGFyeSByZXZpc2lvbnMgYW5kIG5vIGNvbW1pdHMnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDY6NSB8IHRlc3RfY21wIGV4cGVjdGVkLXNlcGFyYXRvciAtCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGJvdW5kYXJ5IHJldmlzaW9ucyBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDM6NSB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXI0IC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGJvdW5kYXJ5IHJldmlzaW9ucyBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDU6MyB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXI0IC0KKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExNy1naXQtc3ZuLWluaXQtY2xvbmUuc2ggYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNDRmNjVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTExNy1naXQtc3ZuLWluaXQtY2xvbmUuc2gKQEAgLTAsMCArMSwxMjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gaW5pdC9jbG9uZSB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgc2V0dXAsIHJ1biBpbnNpZGUgdG1wIHNvIHdlIGRvbid0IGhhdmUgYW55IGNvbmZsaWN0cyB3aXRoICRzdm5yZXBvCitzZXQgLWUKK3JtIC1yIC5naXQKK21rZGlyIHRtcAorY2QgdG1wCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKKwllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwbyIvcHJvamVjdCAmJgorCXJtIC1yZiBwcm9qZWN0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBjbG9uZScgJworCXRlc3QgISAtZCB0cnVuayAmJgorCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi9wcm9qZWN0L3RydW5rICYmCisJdGVzdCAtZCB0cnVuay8uZ2l0L3N2biAmJgorCXRlc3QgLWUgdHJ1bmsvZm9vICYmCisJcm0gLXJmIHRydW5rCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byB0YXJnZXQgZGlyZWN0b3J5JyAnCisJdGVzdCAhIC1kIHRhcmdldCAmJgorCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi9wcm9qZWN0L3RydW5rIHRhcmdldCAmJgorCXRlc3QgLWQgdGFyZ2V0Ly5naXQvc3ZuICYmCisJdGVzdCAtZSB0YXJnZXQvZm9vICYmCisJcm0gLXJmIHRhcmdldAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCAtLXN0ZGxheW91dCcgJworCXRlc3QgISAtZCBwcm9qZWN0ICYmCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iL3Byb2plY3QgJiYKKwl0ZXN0IC1kIHByb2plY3QvLmdpdC9zdm4gJiYKKwl0ZXN0IC1lIHByb2plY3QvZm9vICYmCisJcm0gLXJmIHByb2plY3QKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIHRhcmdldCBkaXJlY3Rvcnkgd2l0aCAtLXN0ZGxheW91dCcgJworCXRlc3QgISAtZCB0YXJnZXQgJiYKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIvcHJvamVjdCB0YXJnZXQgJiYKKwl0ZXN0IC1kIHRhcmdldC8uZ2l0L3N2biAmJgorCXRlc3QgLWUgdGFyZ2V0L2ZvbyAmJgorCXJtIC1yZiB0YXJnZXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aG91dCAtcy8tVC8tYi8tdCBkb2VzIG5vdCB3YXJuJyAnCisJdGVzdCAhIC1kIHRydW5rICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayB0cnVuayAyPndhcm5pbmcgJiYKKwkhIGdyZXAgLXEgcHJlZml4IHdhcm5pbmcgJiYKKwlybSAtcmYgdHJ1bmsgJiYKKwlybSAtZiB3YXJuaW5nCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRob3V0IC1zLy1ULy1iLy10IGRvZXMgbm90IHdhcm4nICcKKwl0ZXN0ICEgLWQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayAyPndhcm5pbmcgJiYKKwkhIGdyZXAgLXEgcHJlZml4IHdhcm5pbmcgJiYKKwlybSAtcmYgdHJ1bmsgJiYKKwlybSAtZiB3YXJuaW5nCisJJworCit0ZXN0X3N2bl9jb25maWd1cmVkX3ByZWZpeCAoKSB7CisJcHJlZml4PSQxICYmCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK3Byb2plY3QvdHJ1bms6cmVmcy9yZW1vdGVzLyR7cHJlZml4fXRydW5rCitwcm9qZWN0L2JyYW5jaGVzLyo6cmVmcy9yZW1vdGVzLyR7cHJlZml4fSoKK3Byb2plY3QvdGFncy8qOnJlZnMvcmVtb3Rlcy8ke3ByZWZpeH10YWdzLyoKK0VPRgorCXRlc3QgISAtZiBhY3R1YWwgJiYKKwlnaXQgLS1naXQtZGlyPXByb2plY3QvLmdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggPj5hY3R1YWwgJiYKKwlnaXQgLS1naXQtZGlyPXByb2plY3QvLmdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgPj5hY3R1YWwgJiYKKwlnaXQgLS1naXQtZGlyPXByb2plY3QvLmdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4udGFncyA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlybSAtZiBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCAtcy8tVC8tYi8tdCBhc3N1bWVzIC0tcHJlZml4PW9yaWdpbi8nICcKKwl0ZXN0ICEgLWQgcHJvamVjdCAmJgorCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iL3Byb2plY3QgcHJvamVjdCAyPndhcm5pbmcgJiYKKwkhIGdyZXAgLXEgcHJlZml4IHdhcm5pbmcgJiYKKwl0ZXN0X3N2bl9jb25maWd1cmVkX3ByZWZpeCAib3JpZ2luLyIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXJtIC1mIHdhcm5pbmcKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLXMvLVQvLWIvLXQgYXNzdW1lcyAtLXByZWZpeD1vcmlnaW4vJyAnCisJdGVzdCAhIC1kIHByb2plY3QgJiYKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIvcHJvamVjdCAyPndhcm5pbmcgJiYKKwkhIGdyZXAgLXEgcHJlZml4IHdhcm5pbmcgJiYKKwl0ZXN0X3N2bl9jb25maWd1cmVkX3ByZWZpeCAib3JpZ2luLyIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXJtIC1mIHdhcm5pbmcKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCAtcy8tVC8tYi8tdCBhbmQgLS1wcmVmaXggIiIgc3RpbGwgd29ya3MnICcKKwl0ZXN0ICEgLWQgcHJvamVjdCAmJgorCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iL3Byb2plY3QgcHJvamVjdCAtLXByZWZpeCAiIiAyPndhcm5pbmcgJiYKKwkhIGdyZXAgLXEgcHJlZml4IHdhcm5pbmcgJiYKKwl0ZXN0X3N2bl9jb25maWd1cmVkX3ByZWZpeCAiIiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJcm0gLWYgd2FybmluZworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCAtcy8tVC8tYi8tdCBhbmQgLS1wcmVmaXggIiIgc3RpbGwgd29ya3MnICcKKwl0ZXN0ICEgLWQgcHJvamVjdCAmJgorCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIi9wcm9qZWN0IC0tcHJlZml4ICIiIDI+d2FybmluZyAmJgorCSEgZ3JlcCAtcSBwcmVmaXggd2FybmluZyAmJgorCXRlc3Rfc3ZuX2NvbmZpZ3VyZWRfcHJlZml4ICIiICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlybSAtZiB3YXJuaW5nCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggLVQgYXMgYSBmdWxsIHVybCB3b3JrcycgJworCXRlc3QgISAtZCBwcm9qZWN0ICYmCisJZ2l0IHN2biBpbml0IC1UICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayBwcm9qZWN0ICYmCisJcm0gLXJmIHByb2plY3QKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaCBiL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTE1OWZmOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmdW5reSBicmFuY2ggbmFtZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBBYm8tVWViZXJuYWhtZSAoQnVnICM5OTQpCitzY2FyeV91cmk9J0Fiby1VZWJlcm5haG1lJTIwJTI4QnVnJTIwJTIzOTk0JTI5Jworc2NhcnlfcmVmPSdBYm8tVWViZXJuYWhtZSUyMChCdWclMjAjOTk0KScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIHByb2plY3QvdGFncyAmJgorCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3ByIGplY3QiICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlzdm5fY21kIGNwIC1tICJmdW4iICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJICAgICAgICAgICAgICAgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2Z1biBwbHVnaW4iICYmCisJc3ZuX2NtZCBjcCAtbSAibW9yZSBmdW4hIiAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiBcCisJICAgICAgICAgICAgICAgICAgICAgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL21vcmUgZnVuIHBsdWdpbiEiICYmCisJc3ZuX2NtZCBjcCAtbSAic2NhcnkiICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2Z1biBwbHVnaW4iIFwKKwkgICAgICAgICAgICAgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzLyRzY2FyeV91cmkiICYmCisJc3ZuX2NtZCBjcCAtbSAibGVhZGluZyBkb3QiICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJCQkiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy8ubGVhZGluZ19kb3QiICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1cKKwl0aGVuCisJCXN2bl9jbWQgY3AgLW0gInRyYWlsaW5nIGRvdCIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkJCSIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL3RyYWlsaW5nX2RvdC4iCisJZmkgJiYKKwlzdm5fY21kIGNwIC1tICJ0cmFpbGluZyAubG9jayIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkJCSIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL3RyYWlsaW5nX2RvdGxvY2subG9jayIgJiYKKwlzdm5fY21kIGNwIC1tICJyZWZsb2ciICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJCQkiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9ub3QtYUB7MH1yZWZsb2dAIiAmJgorCW1heWJlX3N0YXJ0X2h0dHBkCisJJworCisjIFNWTiAxLjcgd2lsbCB0cnVuY2F0ZSAibm90LWElNDB7MF0iIHRvIGp1c3QgIm5vdC1hIi4KKyMgTG9vayBhdCB3aGF0IFNWTiB3b3VuZCB1cCBuYW1pbmcgdGhlIGJyYW5jaCBhbmQgdXNlIHRoYXQuCisjIEJlIHN1cmUgdG8gZXNjYXBlIHRoZSBAIGlmIGl0IHNob3dzIHVwLgorbm9uX3JlZmxvZz0kKHN2bl9jbWQgbHMgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMiIHwgZ3JlcCBub3QtYSB8IHNlZCAncy9cLy8vJyB8IHNlZCAncy9ALyU0MC8nKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHdpdGggZnVua3kgYnJhbmNoIG5hbWVzJyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8vcHIgamVjdCIgcHJvamVjdCAmJgorCSgKKwkJY2QgcHJvamVjdCAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luL2Z1biUyMHBsdWdpbiIgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi9tb3JlJTIwZnVuJTIwcGx1Z2luISIgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi8kc2NhcnlfcmVmIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luLyUyRWxlYWRpbmdfZG90IiAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVworCQl0aGVuCisJCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luL3RyYWlsaW5nX2RvdCUyRSIKKwkJZmkgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi90cmFpbGluZ19kb3Rsb2NrJTJFbG9jayIgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi8kbm9uX3JlZmxvZyIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRjb21taXQgdG8gZnVua3kgYnJhbmNoJyAiCisJKAorCQljZCBwcm9qZWN0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbW9yZSUyMGZ1biUyMHBsdWdpbiEnICYmCisJCWVjaG8gaGVsbG8gPj4gZm9vICYmCisJCWdpdCBjb21taXQgLW0gJ2hlbGxvJyAtLSBmb28gJiYKKwkJZ2l0IHN2biBkY29tbWl0CisJKQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkY29tbWl0IHRvIHNjYXJ5IGJyYW5jaCcgJworCSgKKwkJY2QgcHJvamVjdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICJyZWZzL3JlbW90ZXMvb3JpZ2luLyRzY2FyeV9yZWYiICYmCisJCWVjaG8gdXJscyBhcmUgc2NhcnkgPj4gZm9vICYmCisJCWdpdCBjb21taXQgLW0gImVlcCIgLS0gZm9vICYmCisJCWdpdCBzdm4gZGNvbW1pdAorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGNvbW1pdCB0byB0cmFpbGluZ19kb3Rsb2NrIGJyYW5jaCcgJworCSgKKwkJY2QgcHJvamVjdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICJyZWZzL3JlbW90ZXMvb3JpZ2luL3RyYWlsaW5nX2RvdGxvY2slMkVsb2NrIiAmJgorCQllY2hvIHdobyBuYW1lcyBicmFuY2hlcyBsaWtlIHRoaXMgYW55d2F5PyA+PiBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYmFyIiAtLSBmb28gJiYKKwkJZ2l0IHN2biBkY29tbWl0CisJKQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTE5LWdpdC1zdm4taW5mby5zaCBiL3QvdDkxMTktZ2l0LXN2bi1pbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyMDFjM2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE5LWdpdC1zdm4taW5mby5zaApAQCAtMCwwICsxLDM5MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBEYXZpZCBELiBLaWx6ZXIKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBpbmZvJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBUZXN0ZWQgd2l0aDogc3ZuLCB2ZXJzaW9uIDEuNC40IChyMjUxODgpCisjIFRlc3RlZCB3aXRoOiBzdm4sIHZlcnNpb24gMS42LlsxMjM0NTY4OV0KK3Y9JChzdm5fY21kIC0tdmVyc2lvbiB8IHNlZCAtbiAtZSAncy9ec3ZuLCB2ZXJzaW9uIFwoMVwuWzAtOV0qXC5bMC05XSpcKS4qJC9cMS9wJykKK2Nhc2UgJHYgaW4KKzEuWzQ1Nl0uKikKKwk7OworKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgc3ZuLWluZm8gdGVzdCAoU1ZOIHZlcnNpb246ICR2IG5vdCBzdXBwb3J0ZWQpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKKyMgT24gdGhlICJUZXh0IExhc3QgVXBkYXRlZCIgbGluZSwgImdpdCBzdm4gaW5mbyIgZG9lcyBub3QgcmV0dXJuIHRoZQorIyBzYW1lIHZhbHVlIGFzICJzdm4gaW5mbyIgKGkuZS4gdGhlIGNvbW1pdCB0aW1lc3RhbXAgdGhhdCB0b3VjaGVkIHRoZQorIyBwYXRoIG1vc3QgcmVjZW50bHkpOyBkbyBub3QgZXhwZWN0IHRoYXQgZmllbGQgdG8gbWF0Y2guCit0ZXN0X2NtcF9pbmZvICgpIHsKKwlzZWQgLWUgJy9eVGV4dCBMYXN0IFVwZGF0ZWQ6L2QnICIkMSIgPnRtcC5leHBlY3QgJiYKKwlzZWQgLWUgJy9eVGV4dCBMYXN0IFVwZGF0ZWQ6L2QnICIkMiIgPnRtcC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0bXAuZXhwZWN0IHRtcC5hY3R1YWwgJiYKKwlybSAtZiB0bXAuZXhwZWN0IHRtcC5hY3R1YWwKK30KKworcXVvdGVkX3N2bnJlcG89IiQoZWNobyAkc3ZucmVwbyB8IHNlZCAncy8gLyUyMC8nKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSBhbmQgaW1wb3J0JyAnCisJbWtkaXIgaW5mbyAmJgorCSgKKwkJY2QgaW5mbyAmJgorCQllY2hvIEZJUlNUID5BICYmCisJCWVjaG8gb25lID5maWxlICYmCisJCWxuIC1zIGZpbGUgc3ltbGluay1maWxlICYmCisJCW1rZGlyIGRpcmVjdG9yeSAmJgorCQl0b3VjaCBkaXJlY3RvcnkvLnBsYWNlaG9sZGVyICYmCisJCWxuIC1zIGRpcmVjdG9yeSBzeW1saW5rLWRpcmVjdG9yeSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iCisJKSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm53YyAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJZWNobyBmb28gPmZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNoYW5nZSBvdXRzaWRlIGRpcmVjdG9yeSIgJiYKKwkJc3ZuX2NtZCB1cGRhdGUKKwkpICYmCisJbWtkaXIgZ2l0d2MgJiYKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJCWdpdCBzdm4gZmV0Y2gKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvJyAiCisJKGNkIHN2bndjICYmIHN2biBpbmZvKSA+IGV4cGVjdGVkLmluZm8gJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvKSA+IGFjdHVhbC5pbmZvICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvIGFjdHVhbC5pbmZvCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsJyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwpIiA9ICIkcXVvdGVkX3N2bnJlcG8iCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC4nICIKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gLikgPiBleHBlY3RlZC5pbmZvLWRvdCAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLikgPiBhY3R1YWwuaW5mby1kb3QgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZG90IGFjdHVhbC5pbmZvLWRvdAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAkKHB3ZCknICcKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gIiQocHdkKSIpID5leHBlY3RlZC5pbmZvLXB3ZCAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gIiQocHdkKSIpID5hY3R1YWwuaW5mby1wd2QgJiYKKwlncmVwIC12IF5QYXRoOiA8ZXhwZWN0ZWQuaW5mby1wd2QgPmV4cGVjdGVkLmluZm8tbnAgJiYKKwlncmVwIC12IF5QYXRoOiA8YWN0dWFsLmluZm8tcHdkID5hY3R1YWwuaW5mby1ucCAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1ucCBhY3R1YWwuaW5mby1ucCAmJgorCXRlc3QgIiQoc2VkIC1uZSBcIi9eUGF0aDovIHMhL3N2bndjISFcIiA8ZXhwZWN0ZWQuaW5mby1wd2QpIiA9IFwKKwkgICAgICIkKHNlZCAtbmUgXCIvXlBhdGg6LyBzIS9naXR3YyEhXCIgPGFjdHVhbC5pbmZvLXB3ZCkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvICQocHdkKS8uLi9fX193YycgJworCShjZCBzdm53YyAmJiBzdm4gaW5mbyAiJChwd2QpLy4uL3N2bndjIikgPmV4cGVjdGVkLmluZm8tcHdkICYmCisJKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAiJChwd2QpLy4uL2dpdHdjIikgPmFjdHVhbC5pbmZvLXB3ZCAmJgorCWdyZXAgLXYgXlBhdGg6IDxleHBlY3RlZC5pbmZvLXB3ZCA+ZXhwZWN0ZWQuaW5mby1ucCAmJgorCWdyZXAgLXYgXlBhdGg6IDxhY3R1YWwuaW5mby1wd2QgPmFjdHVhbC5pbmZvLW5wICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLW5wIGFjdHVhbC5pbmZvLW5wICYmCisJdGVzdCAiJChzZWQgLW5lIFwiL15QYXRoOi8gcyEvc3Zud2MhIVwiIDxleHBlY3RlZC5pbmZvLXB3ZCkiID0gXAorCSAgICAgIiQoc2VkIC1uZSBcIi9eUGF0aDovIHMhL2dpdHdjISFcIiA8YWN0dWFsLmluZm8tcHdkKSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gJChwd2QpLy4uL19fX3djLy9maWxlJyAnCisJKGNkIHN2bndjICYmIHN2biBpbmZvICIkKHB3ZCkvLi4vc3Zud2MvL2ZpbGUiKSA+ZXhwZWN0ZWQuaW5mby1wd2QgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvICIkKHB3ZCkvLi4vZ2l0d2MvL2ZpbGUiKSA+YWN0dWFsLmluZm8tcHdkICYmCisJZ3JlcCAtdiBeUGF0aDogPGV4cGVjdGVkLmluZm8tcHdkID5leHBlY3RlZC5pbmZvLW5wICYmCisJZ3JlcCAtdiBeUGF0aDogPGFjdHVhbC5pbmZvLXB3ZCA+YWN0dWFsLmluZm8tbnAgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tbnAgYWN0dWFsLmluZm8tbnAgJiYKKwl0ZXN0ICIkKHNlZCAtbmUgXCIvXlBhdGg6LyBzIS9zdm53YyEhXCIgPGV4cGVjdGVkLmluZm8tcHdkKSIgPSBcCisJICAgICAiJChzZWQgLW5lIFwiL15QYXRoOi8gcyEvZ2l0d2MhIVwiIDxhY3R1YWwuaW5mby1wd2QpIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCAuJyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgLikiID0gIiRxdW90ZWRfc3ZucmVwbyIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZmlsZScgIgorCShjZCBzdm53YyAmJiBzdm4gaW5mbyBmaWxlKSA+IGV4cGVjdGVkLmluZm8tZmlsZSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gZmlsZSkgPiBhY3R1YWwuaW5mby1maWxlICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWZpbGUgYWN0dWFsLmluZm8tZmlsZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBmaWxlJyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgZmlsZSkiID0gIiRxdW90ZWRfc3ZucmVwby9maWxlIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBkaXJlY3RvcnknICIKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gZGlyZWN0b3J5KSA+IGV4cGVjdGVkLmluZm8tZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyBkaXJlY3RvcnkpID4gYWN0dWFsLmluZm8tZGlyZWN0b3J5ICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gaW5zaWRlIGRpcmVjdG9yeScgIgorCShjZCBzdm53Yy9kaXJlY3RvcnkgJiYgc3ZuIGluZm8pID4gZXhwZWN0ZWQuaW5mby1pbnNpZGUtZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjL2RpcmVjdG9yeSAmJiBnaXQgc3ZuIGluZm8pID4gYWN0dWFsLmluZm8taW5zaWRlLWRpcmVjdG9yeSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1pbnNpZGUtZGlyZWN0b3J5IGFjdHVhbC5pbmZvLWluc2lkZS1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgZGlyZWN0b3J5JyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgZGlyZWN0b3J5KSIgPSAiJHF1b3RlZF9zdm5yZXBvL2RpcmVjdG9yeSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gc3ltbGluay1maWxlJyAiCisJKGNkIHN2bndjICYmIHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPiBleHBlY3RlZC5pbmZvLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gc3ltbGluay1maWxlKSA+IGFjdHVhbC5pbmZvLXN5bWxpbmstZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1zeW1saW5rLWZpbGUgYWN0dWFsLmluZm8tc3ltbGluay1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHN5bWxpbmstZmlsZScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIHN5bWxpbmstZmlsZSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9zeW1saW5rLWZpbGUiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIHN5bWxpbmstZGlyZWN0b3J5JyAiCisJKGNkIHN2bndjICYmIHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gZXhwZWN0ZWQuaW5mby1zeW1saW5rLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gc3ltbGluay1kaXJlY3RvcnkpIFwKKwkJPiBhY3R1YWwuaW5mby1zeW1saW5rLWRpcmVjdG9yeSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1zeW1saW5rLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1zeW1saW5rLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBzeW1saW5rLWRpcmVjdG9yeScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIHN5bWxpbmstZGlyZWN0b3J5KSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL3N5bWxpbmstZGlyZWN0b3J5IgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBhZGRlZC1maWxlJyAiCisJZWNobyB0d28gPiBnaXR3Yy9hZGRlZC1maWxlICYmCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgYWRkIGFkZGVkLWZpbGUKKwkpICYmCisJY3AgZ2l0d2MvYWRkZWQtZmlsZSBzdm53Yy9hZGRlZC1maWxlICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1maWxlID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53YyAmJiBzdm4gaW5mbyBhZGRlZC1maWxlKSA+IGV4cGVjdGVkLmluZm8tYWRkZWQtZmlsZSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gYWRkZWQtZmlsZSkgPiBhY3R1YWwuaW5mby1hZGRlZC1maWxlICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWFkZGVkLWZpbGUgYWN0dWFsLmluZm8tYWRkZWQtZmlsZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBhZGRlZC1maWxlJyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgYWRkZWQtZmlsZSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9hZGRlZC1maWxlIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBhZGRlZC1kaXJlY3RvcnknICIKKwlta2RpciBnaXR3Yy9hZGRlZC1kaXJlY3Rvcnkgc3Zud2MvYWRkZWQtZGlyZWN0b3J5ICYmCisJdG91Y2ggZ2l0d2MvYWRkZWQtZGlyZWN0b3J5Ly5wbGFjZWhvbGRlciAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJc3ZuX2NtZCBhZGQgYWRkZWQtZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJZ2l0IGFkZCBhZGRlZC1kaXJlY3RvcnkKKwkpICYmCisJKGNkIHN2bndjICYmIHN2biBpbmZvIGFkZGVkLWRpcmVjdG9yeSkgXAorCQk+IGV4cGVjdGVkLmluZm8tYWRkZWQtZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyBhZGRlZC1kaXJlY3RvcnkpIFwKKwkJPiBhY3R1YWwuaW5mby1hZGRlZC1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tYWRkZWQtZGlyZWN0b3J5IGFjdHVhbC5pbmZvLWFkZGVkLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBhZGRlZC1kaXJlY3RvcnknICcKKwl0ZXN0ICIkKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAtLXVybCBhZGRlZC1kaXJlY3RvcnkpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vYWRkZWQtZGlyZWN0b3J5IgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBhZGRlZC1zeW1saW5rLWZpbGUnICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWxuIC1zIGFkZGVkLWZpbGUgYWRkZWQtc3ltbGluay1maWxlICYmCisJCWdpdCBhZGQgYWRkZWQtc3ltbGluay1maWxlCisJKSAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJbG4gLXMgYWRkZWQtZmlsZSBhZGRlZC1zeW1saW5rLWZpbGUgJiYKKwkJc3ZuX2NtZCBhZGQgYWRkZWQtc3ltbGluay1maWxlID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53YyAmJiBzdm4gaW5mbyBhZGRlZC1zeW1saW5rLWZpbGUpIFwKKwkJPiBleHBlY3RlZC5pbmZvLWFkZGVkLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gYWRkZWQtc3ltbGluay1maWxlKSBcCisJCT4gYWN0dWFsLmluZm8tYWRkZWQtc3ltbGluay1maWxlICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWFkZGVkLXN5bWxpbmstZmlsZSBcCisJCWFjdHVhbC5pbmZvLWFkZGVkLXN5bWxpbmstZmlsZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBhZGRlZC1zeW1saW5rLWZpbGUnICcKKwl0ZXN0ICIkKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAtLXVybCBhZGRlZC1zeW1saW5rLWZpbGUpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vYWRkZWQtc3ltbGluay1maWxlIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJbG4gLXMgYWRkZWQtZGlyZWN0b3J5IGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJCWdpdCBhZGQgYWRkZWQtc3ltbGluay1kaXJlY3RvcnkKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlsbiAtcyBhZGRlZC1kaXJlY3RvcnkgYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwkJc3ZuX2NtZCBhZGQgYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjICYmIHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gZXhwZWN0ZWQuaW5mby1hZGRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gYWRkZWQtc3ltbGluay1kaXJlY3RvcnkpIFwKKwkJPiBhY3R1YWwuaW5mby1hZGRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1hZGRlZC1zeW1saW5rLWRpcmVjdG9yeSBcCisJCWFjdHVhbC5pbmZvLWFkZGVkLXN5bWxpbmstZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5JyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgYWRkZWQtc3ltbGluay1kaXJlY3RvcnkpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vYWRkZWQtc3ltbGluay1kaXJlY3RvcnkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGRlbGV0ZWQtZmlsZScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJZ2l0IHJtIC1mIGZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIHJtIC0tZm9yY2UgZmlsZSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gZmlsZSkgPmV4cGVjdGVkLmluZm8tZGVsZXRlZC1maWxlICYmCisJKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyBmaWxlKSA+YWN0dWFsLmluZm8tZGVsZXRlZC1maWxlICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRlbGV0ZWQtZmlsZSBhY3R1YWwuaW5mby1kZWxldGVkLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgZmlsZSAoZGVsZXRlZCknICcKKwl0ZXN0ICIkKGNkIGdpdHdjICYmIGdpdCBzdm4gaW5mbyAtLXVybCBmaWxlKSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL2ZpbGUiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGRlbGV0ZWQtZGlyZWN0b3J5JyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgcm0gLXIgLWYgZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJc3ZuX2NtZCBybSAtLWZvcmNlIGRpcmVjdG9yeSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gZGlyZWN0b3J5KSA+ZXhwZWN0ZWQuaW5mby1kZWxldGVkLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gZGlyZWN0b3J5KSA+YWN0dWFsLmluZm8tZGVsZXRlZC1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZGVsZXRlZC1kaXJlY3RvcnkgYWN0dWFsLmluZm8tZGVsZXRlZC1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgZGlyZWN0b3J5IChkZWxldGVkKScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIGRpcmVjdG9yeSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9kaXJlY3RvcnkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGRlbGV0ZWQtc3ltbGluay1maWxlJyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgcm0gLWYgc3ltbGluay1maWxlID4gL2Rldi9udWxsCisJKSAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJc3ZuX2NtZCBybSAtLWZvcmNlIHN5bWxpbmstZmlsZSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gc3ltbGluay1maWxlKSA+ZXhwZWN0ZWQuaW5mby1kZWxldGVkLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gc3ltbGluay1maWxlKSA+YWN0dWFsLmluZm8tZGVsZXRlZC1zeW1saW5rLWZpbGUgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZGVsZXRlZC1zeW1saW5rLWZpbGUgYWN0dWFsLmluZm8tZGVsZXRlZC1zeW1saW5rLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgc3ltbGluay1maWxlIChkZWxldGVkKScgJworCXRlc3QgIiQoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIC0tdXJsIHN5bWxpbmstZmlsZSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9zeW1saW5rLWZpbGUiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGRlbGV0ZWQtc3ltbGluay1kaXJlY3RvcnknICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBybSAtZiBzeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBzeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoY2Qgc3Zud2MgJiYgc3ZuIGluZm8gc3ltbGluay1kaXJlY3RvcnkpID5leHBlY3RlZC5pbmZvLWRlbGV0ZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwkoY2QgZ2l0d2MgJiYgZ2l0IHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSA+YWN0dWFsLmluZm8tZGVsZXRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1kZWxldGVkLXN5bWxpbmstZGlyZWN0b3J5IGFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgc3ltbGluay1kaXJlY3RvcnkgKGRlbGV0ZWQpJyAnCisJdGVzdCAiJChjZCBnaXR3YyAmJiBnaXQgc3ZuIGluZm8gLS11cmwgc3ltbGluay1kaXJlY3RvcnkpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vc3ltbGluay1kaXJlY3RvcnkiCisJJworCisjIE5PVEU6IGdpdCBkb2VzIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIHJlcGxhY2VkIG9iamVjdHMsCisjIHNvIHdlIGNhbid0IHRlc3QgZm9yIGZpbGVzIGluIHRoYXQgc3RhdGUuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gdW5rbm93bi1maWxlJyAiCisJZWNobyB0d28gPiBnaXR3Yy91bmtub3duLWZpbGUgJiYKKwkoY2QgZ2l0d2MgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIHVua25vd24tZmlsZSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdW5rbm93bi1maWxlICYmCisJZ3JlcCB1bmtub3duLWZpbGUgYWN0dWFsLmluZm8tdW5rbm93bi1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHVua25vd24tZmlsZScgJworCWVjaG8gdHdvID4gZ2l0d2MvdW5rbm93bi1maWxlICYmCisJKGNkIGdpdHdjICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyAtLXVybCB1bmtub3duLWZpbGUpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVybC11bmtub3duLWZpbGUgJiYKKwlncmVwIHVua25vd24tZmlsZSBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1maWxlCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIHVua25vd24tZGlyZWN0b3J5JyAiCisJbWtkaXIgZ2l0d2MvdW5rbm93bi1kaXJlY3Rvcnkgc3Zud2MvdW5rbm93bi1kaXJlY3RvcnkgJiYKKwkoY2QgZ2l0d2MgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIHVua25vd24tZGlyZWN0b3J5KSBcCisJCSAyPiBhY3R1YWwuaW5mby11bmtub3duLWRpcmVjdG9yeSAmJgorCWdyZXAgdW5rbm93bi1kaXJlY3RvcnkgYWN0dWFsLmluZm8tdW5rbm93bi1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgdW5rbm93bi1kaXJlY3RvcnknICcKKwkoY2QgZ2l0d2MgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIC0tdXJsIHVua25vd24tZGlyZWN0b3J5KSBcCisJCSAyPiBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1kaXJlY3RvcnkgJiYKKwlncmVwIHVua25vd24tZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVybC11bmtub3duLWRpcmVjdG9yeQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLXN5bWxpbmstZmlsZScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJbG4gLXMgdW5rbm93bi1maWxlIHVua25vd24tc3ltbGluay1maWxlCisJKSAmJgorCShjZCBnaXR3YyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gdW5rbm93bi1zeW1saW5rLWZpbGUpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVua25vd24tc3ltbGluay1maWxlICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZmlsZSBhY3R1YWwuaW5mby11bmtub3duLXN5bWxpbmstZmlsZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCB1bmtub3duLXN5bWxpbmstZmlsZScgJworCShjZCBnaXR3YyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gLS11cmwgdW5rbm93bi1zeW1saW5rLWZpbGUpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVybC11bmtub3duLXN5bWxpbmstZmlsZSAmJgorCWdyZXAgdW5rbm93bi1zeW1saW5rLWZpbGUgYWN0dWFsLmluZm8tdXJsLXVua25vd24tc3ltbGluay1maWxlCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIHVua25vd24tc3ltbGluay1kaXJlY3RvcnknICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWxuIC1zIHVua25vd24tZGlyZWN0b3J5IHVua25vd24tc3ltbGluay1kaXJlY3RvcnkKKwkpICYmCisJKGNkIGdpdHdjICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCSAyPiBhY3R1YWwuaW5mby11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVua25vd24tc3ltbGluay1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeScgJworCShjZCBnaXR3YyAmJiB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gLS11cmwgdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdXJsLXVua25vd24tc3ltbGluay1kaXJlY3RvcnkgJiYKKwlncmVwIHVua25vd24tc3ltbGluay1kaXJlY3RvcnkgYWN0dWFsLmluZm8tdXJsLXVua25vd24tc3ltbGluay1kaXJlY3RvcnkKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwYjcxNGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTIwLWdpdC1zdm4tY2xvbmUtd2l0aC1wZXJjZW50LWVzY2FwZXMuc2gKQEAgLTAsMCArMSw3NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBLZXZpbiBCYWxsYXJkCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY2xvbmUgd2l0aCBwZXJjZW50IGVzY2FwZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIHByb2plY3QvdGFncyAmJgorCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3ByIGplY3QiICYmCisJc3ZuX2NtZCBjcCAtbSAiYnJhbmNoIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCSAgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvYiIgJiYKKwlzdm5fY21kIGNwIC1tICJ0YWciICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJICAiJHN2bnJlcG8vcHIgamVjdC90YWdzL3YxIiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJbWF5YmVfc3RhcnRfaHR0cGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdCIgY2xvbmUgJiYKKwkoCisJCWNkIGNsb25lICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2dpdC1zdm4KKwkpCisnCisKKyMgU1ZOIHdvcmtzIGVpdGhlciB3YXksIHNvIHNob3VsZCB3ZS4uLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdm4gY2hlY2tvdXQgd2l0aCBwZXJjZW50IGVzY2FwZXMnICcKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwby9wciUyMGplY3QiIHN2bi5wZXJjZW50ICYmCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8vcHIlMjBqZWN0L3RydW5rIiBzdm4ucGVyY2VudC50cnVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdm4gY2hlY2tvdXQgd2l0aCBzcGFjZScgJworCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvL3ByIGplY3QiIHN2bi5zcGFjZSAmJgorCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIHN2bi5zcGFjZS50cnVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHRydW5rIHdpdGggcGVyY2VudCBlc2NhcGVzIGFuZCBtaW5pbWl6ZS11cmwnICcKKwlnaXQgc3ZuIGNsb25lIC0tbWluaW1pemUtdXJsICIkc3ZucmVwby9wciUyMGplY3QvdHJ1bmsiIG1pbmltaXplICYmCisJKAorCQljZCBtaW5pbWl6ZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9naXQtc3ZuCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHRydW5rIHdpdGggcGVyY2VudCBlc2NhcGVzJyAnCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8vcHIlMjBqZWN0L3RydW5rIiB0cnVuayAmJgorCSgKKwkJY2QgdHJ1bmsgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZ2l0LXN2bgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSAtLXN0ZGxheW91dCB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCWdpdCBzdm4gY2xvbmUgLS1zdGRsYXlvdXQgIiRzdm5yZXBvL3ByJTIwamVjdCIgcGVyY2VudCAmJgorCSgKKwkJY2QgcGVyY2VudCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmteMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYl4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3YxXjAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgLXMgd2l0aCB1bmVzY2FwZWQgc3BhY2UnICcKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwby9wciBqZWN0IiAtLXByZWZpeCBvcmlnaW4vIHNwYWNlICYmCisJKAorCQljZCBzcGFjZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmteMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYl4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3YxXjAKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoIGIvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwMGNhZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTIxLWdpdC1zdm4tZmV0Y2gtcmVuYW1lZC1kaXIuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBTYW50aG9zaCBLdW1hciBNYW5pCisKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBjYW4gZmV0Y2ggcmVuYW1lZCBkaXJlY3RvcmllcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgcmVwb3NpdG9yeSB3aXRoIHJlbmFtZWQgZGlyZWN0b3J5JyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgIiRURVNUX0RJUkVDVE9SWSIvdDkxMjEvcmVuYW1lZC1kaXIuZHVtcAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggcmVwb3NpdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8vbmV3bmFtZSIgJiYKKwlnaXQgc3ZuIGZldGNoCisJJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90OTEyMS9yZW5hbWVkLWRpci5kdW1wIGIvdC90OTEyMS9yZW5hbWVkLWRpci5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOTEyN2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTIxL3JlbmFtZWQtZGlyLmR1bXAKQEAgLTAsMCArMSw5MCBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogMDZiOWIzYWQtZjU0Ni00ZmJlLTgzMjgtZmNiNGU2ZWY1YzNmCisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA0LTAyVDA5OjExOjU5Ljc3ODU1N1oKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNworQ29udGVudC1sZW5ndGg6IDExNworCitLIDcKK3N2bjpsb2cKK1YgMTQKK2luaXRpYWwgaW1wb3J0CitLIDEwCitzdm46YXV0aG9yCitWIDgKK3NhbnRob3NoCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA0LTAyVDA5OjEzOjAzLjE3MDg2M1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG5hbWUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbmFtZS9hLnR4dAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA3MQorVGV4dC1jb250ZW50LWxlbmd0aDogNgorVGV4dC1jb250ZW50LW1kNTogYjE5NDZhYzkyNDkyZDIzNDdjNjIzNWI0ZDI2MTExODQKK0NvbnRlbnQtbGVuZ3RoOiA3NworCitLIDEzCitzdm46bWltZS10eXBlCitWIDEwCit0ZXh0L3BsYWluCitLIDEzCitzdm46ZW9sLXN0eWxlCitWIDIKK0xGCitQUk9QUy1FTkQKK2hlbGxvCisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDkKK0NvbnRlbnQtbGVuZ3RoOiAxMDkKKworSyA3Citzdm46bG9nCitWIDcKK3JlbmFtZWQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAorc2FudGhvc2gKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDQtMDJUMDk6MTQ6MjIuOTUyMTg2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbmV3bmFtZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IG5hbWUKKworCitOb2RlLXBhdGg6IG5hbWUKK05vZGUtYWN0aW9uOiBkZWxldGUKKworCmRpZmYgLS1naXQgYS90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoIGIvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZThmZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBhdXRob3JzaGlwJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8iIHdvcmsuc3ZuICYmCisJKAorCQljZCB3b3JrLnN2biAmJgorCQllY2hvID5maWxlICYmCisJCXN2bl9jbWQgYWRkIGZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3Qgd2l0aCBpdCB2aWEgZ2l0IHN2bicgJworCW1rZGlyIHdvcmsuZ2l0ICYmCisJKAorCQljZCB3b3JrLmdpdCAmJgorCQlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCQlnaXQgc3ZuIGZldGNoICYmCisKKwkJZWNobyBtb2RpZmljYXRpb24gPmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisKKwkJdGVzdF90aWNrICYmCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCisJCWVjaG8gImZ1cnRoZXIgbW9kaWZpY2F0aW9uIiA+ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSB0aGlyZCAmJgorCisJCXRlc3RfdGljayAmJgorCQlnaXQgc3ZuIC0tYWRkLWF1dGhvci1mcm9tIGRjb21taXQgJiYKKworCQllY2hvICJ5ZXQgZnVydGhlciBtb2RpZmljYXRpb24iID5maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGZvdXJ0aCAmJgorCisJCXRlc3RfdGljayAmJgorCQlnaXQgc3ZuIC0tYWRkLWF1dGhvci1mcm9tIC0tdXNlLWxvZy1hdXRob3IgZGNvbW1pdCAmJgorCisJCWdpdCBsb2cgJiYKKworCQlnaXQgc2hvdyAtcyBIRUFEXl4gPi4uL2FjdHVhbC4yICYmCisJCWdpdCBzaG93IC1zIEhFQUReICA+Li4vYWN0dWFsLjMgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRCAgID4uLi9hY3R1YWwuNAorCisJKSAmJgorCisJIyBNYWtlIHN1cmUgdGhhdCAtLWFkZC1hdXRob3ItZnJvbSB3aXRob3V0IC0tdXNlLWxvZy1hdXRob3IKKwkjIGRpZCBub3QgYWZmZWN0IHRoZSBhdXRob3JzaGlwIGluZm9ybWF0aW9uCisJbXlzZWxmPSQoZ3JlcCAiXkF1dGhvcjogIiBhY3R1YWwuMikgJiYKKwl1bmFmZmVjdGVkPSQoZ3JlcCAiXkF1dGhvcjogIiBhY3R1YWwuMykgJiYKKwl0ZXN0ICJ6JG15c2VsZiIgPSAieiR1bmFmZmVjdGVkIiAmJgorCisJIyBNYWtlIHN1cmUgbGFjayBvZiAtLWFkZC1hdXRob3ItZnJvbSBkaWQgbm90IGFkZCBjcnVmdAorCSEgZ3JlcCAiXiAgICBGcm9tOiBBIFUgVGhvciAiIGFjdHVhbC4yICYmCisKKwkjIE1ha2Ugc3VyZSAtLWFkZC1hdXRob3ItZnJvbSBhZGRlZCBjcnVmdAorCWdyZXAgIl4gICAgRnJvbTogQSBVIFRob3IgIiBhY3R1YWwuMyAmJgorCWdyZXAgIl4gICAgRnJvbTogQSBVIFRob3IgIiBhY3R1YWwuNCAmJgorCisJIyBNYWtlIHN1cmUgLS1hZGQtYXV0aG9yLWZyb20gd2l0aCAtLXVzZS1sb2ctYXV0aG9yIGFmZmVjdGVkCisJIyB0aGUgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbgorCWdyZXAgIl5BdXRob3I6IEEgVSBUaG9yICIgYWN0dWFsLjQgJiYKKworCSMgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBjb21taXQgbWVzc2FnZXMgd2l0aCBleGNlc3MgYmxhbmsgbGluZXMKKwl0ZXN0ICQoZ3JlcCAiXiAiIGFjdHVhbC4yIHwgd2MgLWwpID0gMyAmJgorCXRlc3QgJChncmVwICJeICIgYWN0dWFsLjMgfCB3YyAtbCkgPSA1ICYmCisJdGVzdCAkKGdyZXAgIl4gIiBhY3R1YWwuNCB8IHdjIC1sKSA9IDUgJiYKKworCSMgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdm4gY29tbWl0IG1lc3NhZ2VzIHdpdGggZXhjZXNzIGJsYW5rIGxpbmVzCisJKAorCQljZCB3b3JrLnN2biAmJgorCQlzdm5fY21kIHVwICYmCisJCQorCQl0ZXN0ICQoc3ZuX2NtZCBsb2cgLXIyOjIgfCB3YyAtbCkgPSA1ICYmCisJCXRlc3QgJChzdm5fY21kIGxvZyAtcjQ6NCB8IHdjIC1sKSA9IDcKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaCBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWFkNDA0NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBKYW4gS3LDvGdlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlc3BlY3RzIHJld3JpdGVSb290IGR1cmluZyByZWJ1aWxkJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworbWtkaXIgaW1wb3J0CisoY2QgaW1wb3J0CisJdG91Y2ggZm9vCisJc3ZuX2NtZCBpbXBvcnQgLW0gJ2ltcG9ydCBmb3IgZ2l0IHN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKykKK3JtIC1yZiBpbXBvcnQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCwgZmV0Y2ggYW5kIGNoZWNrb3V0IHJlcG9zaXRvcnknICcKKwlnaXQgc3ZuIGluaXQgLS1yZXdyaXRlLXJvb3Q9aHR0cDovL2ludmFsaWQuaW52YWxpZC8gIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggcmVtb3Rlcy9naXQtc3ZuCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmV2X21hcCcgJworCXJtICIkR0lUX1NWTl9ESVIiLy5yZXZfbWFwLioKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYnVpbGQgcmV2X21hcCcgJworCWdpdCBzdm4gcmViYXNlID4vZGV2L251bGwKKwknCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3Q5MTI0LWdpdC1zdm4tZGNvbW1pdC1hdXRvLXByb3BzLnNoIGIvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZjcyMzFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaApAQCAtMCwwICsxLDEwNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBCcmFkIEtpbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IGhvbm9ycyBhdXRvLXByb3BzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworZ2VuZXJhdGVfYXV0b19wcm9wcygpIHsKK2NhdCA8PCBFT0YKK1ttaXNjZWxsYW55XQorZW5hYmxlLWF1dG8tcHJvcHM9JDEKK1thdXRvLXByb3BzXQorKi5zaCAgPSBzdm46bWltZS10eXBlPWFwcGxpY2F0aW9uL3gtc2hlbGxzY3JpcHQ7IHN2bjplb2wtc3R5bGU9TEYKKyoudHh0ID0gc3ZuOm1pbWUtdHlwZT10ZXh0L3BsYWluOyBzdm46ZW9sLXN0eWxlID0gbmF0aXZlCitFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZWNobyBmb28gPmZvbyAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIKKwkpICYmCisJcm0gLXJmIGltcG9ydCAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgYXV0by1wcm9wcyBjb25maWcnICcKKwlta2RpciB1c2VyICYmCisJZ2VuZXJhdGVfYXV0b19wcm9wcyB5ZXMgPnVzZXIvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaWxlcyBtYXRjaGluZyBhdXRvLXByb3BzJyAnCisJd3JpdGVfc2NyaXB0IGV4ZWMxLnNoIDwvZGV2L251bGwgJiYKKwllY2hvICJoZWxsbyIgPmhlbGxvLnR4dCAmJgorCWVjaG8gYmFyID5iYXIgJiYKKwlnaXQgYWRkIGV4ZWMxLnNoIGhlbGxvLnR4dCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlcyBmb3IgZW5hYmxlZCBhdXRvLXByb3BzIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLWNvbmZpZy1kaXI9dXNlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIGF1dG8tcHJvcHMgY29uZmlnJyAnCisJZ2VuZXJhdGVfYXV0b19wcm9wcyBubyA+dXNlci9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGZpbGVzIG1hdGNoaW5nIGRpc2FibGVkIGF1dG8tcHJvcHMnICcKKwl3cml0ZV9zY3JpcHQgZXhlYzIuc2ggPC9kZXYvbnVsbCAmJgorCWVjaG8gIndvcmxkIiA+d29ybGQudHh0ICYmCisJZWNobyB6b3QgPnpvdCAmJgorCWdpdCBhZGQgZXhlYzIuc2ggd29ybGQudHh0IHpvdCAmJgorCWdpdCBjb21taXQgLW0gImZpbGVzIGZvciBkaXNhYmxlZCBhdXRvLXByb3BzIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLWNvbmZpZy1kaXI9dXNlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZXN1bHRpbmcgc3ZuIHJlcG9zaXRvcnknICcKKygKKwlta2RpciB3b3JrICYmCisJY2Qgd29yayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiAmJgorCWNkIHN2bnJlcG8gJiYKKworCSMgQ2hlY2sgcHJvcGVydGllcyBmcm9tIGZpcnN0IGNvbW1pdC4KKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFBPU0lYUEVSTQorCXRoZW4KKwkJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjpleGVjdXRhYmxlIGV4ZWMxLnNoKSIgPSAieCoiCisJZmkgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBleGVjMS5zaCkiID0gXAorCSAgICAgInhhcHBsaWNhdGlvbi94LXNoZWxsc2NyaXB0IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGhlbGxvLnR4dCkiID0gInh0ZXh0L3BsYWluIiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZW9sLXN0eWxlIGhlbGxvLnR4dCkiID0gInhuYXRpdmUiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgYmFyKSIgPSAieCIgJiYKKworCSMgQ2hlY2sgcHJvcGVydGllcyBmcm9tIHNlY29uZCBjb21taXQuCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBQT1NJWFBFUk0KKwl0aGVuCisJCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZXhlY3V0YWJsZSBleGVjMi5zaCkiID0gIngqIgorCWZpICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgZXhlYzIuc2gpIiA9ICJ4IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIHdvcmxkLnR4dCkiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgd29ybGQudHh0KSIgPSAieCIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSB6b3QpIiA9ICJ4IgorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZW5hbWVkIGZpbGUnICcKKwl0ZXN0IC1kIHVzZXIgJiYKKwlnZW5lcmF0ZV9hdXRvX3Byb3BzIHllcyA+IHVzZXIvY29uZmlnICYmCisJZ2l0IG12IGZvbyBmb28uc2ggJiYKKwlnaXQgY29tbWl0IC1tICJmb28gPT4gZm9vLnNoIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLWNvbmZpZy1kaXI9dXNlciAmJgorCSgKKwkJY2Qgd29yay9zdm5yZXBvICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJdGVzdCAhIC1lIGZvbyAmJgorCQl0ZXN0IC1lIGZvby5zaCAmJgorCQl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBmb28uc2gpIiA9IFwKKwkJICAgICAieGFwcGxpY2F0aW9uL3gtc2hlbGxzY3JpcHQiICYmCisJCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZW9sLXN0eWxlIGZvby5zaCkiID0gInhMRiIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoIGIvdC90OTEyNS1naXQtc3ZuLW11bHRpLWdsb2ItYnJhbmNoLW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkNTNmYzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwOCBNYXJjdXMgR3JpZXAKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtdWx0aS1nbG9iIGJyYW5jaCBuYW1lcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgXAorCQkJcHJvamVjdC9icmFuY2hlcy92MTQuMSBwcm9qZWN0L3RhZ3MgJiYKKwllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wcm9qZWN0IiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJc3ZuX2NtZCBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCSAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHJvamVjdC9icmFuY2hlcy92MTQuMS9iZXRhIiAmJgorCXN2bl9jbWQgY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3Byb2plY3QvYnJhbmNoZXMvdjE0LjEvYmV0YSIgXAorCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHJvamVjdC9icmFuY2hlcy92MTQuMS9nb2xkIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIG11bHRpLWdsb2IgaW4gYnJhbmNoIG5hbWVzJyAnCisJZ2l0IHN2biBjbG9uZSAtVCB0cnVuayAtYiBicmFuY2hlcy8qLyogLXQgdGFncyBcCisJICAgICAgICAgICAgICAiJHN2bnJlcG8vcHJvamVjdCIgcHJvamVjdCAmJgorCShjZCBwcm9qZWN0ICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vdjE0LjEvYmV0YSIgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi92MTQuMS9nb2xkIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGNvbW1pdCB0byBtdWx0aS1nbG9iYmVkIGJyYW5jaCcgIgorCShjZCBwcm9qZWN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAncmVmcy9yZW1vdGVzL29yaWdpbi92MTQuMS9nb2xkJyAmJgorCWVjaG8gaGVsbG8gPj4gZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAnaGVsbG8nIC0tIGZvbyAmJgorCWdpdCBzdm4gZGNvbW1pdAorCSkKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyNi1naXQtc3ZuLWZvbGxvdy1kZWxldGVkLXJlYWRkZWQtZGlyZWN0b3J5LnNoIGIvdC90OTEyNi1naXQtc3ZuLWZvbGxvdy1kZWxldGVkLXJlYWRkZWQtZGlyZWN0b3J5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkZWM2NDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI2LWdpdC1zdm4tZm9sbG93LWRlbGV0ZWQtcmVhZGRlZC1kaXJlY3Rvcnkuc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBBbGVjIEJlcnJ5bWFuCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZmV0Y2ggcmVwb3NpdG9yeSB3aXRoIGRlbGV0ZWQgYW5kIHJlYWRkZWQgZGlyZWN0b3J5JworCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBEb24ndCBydW4gdGhpcyBieSBkZWZhdWx0OyBpdCBvcGVucyB1cCBhIHBvcnQuCityZXF1aXJlX3N2bnNlcnZlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgcmVwb3NpdG9yeScgJworICAgIHN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8ICIkVEVTVF9ESVJFQ1RPUlkiL3Q5MTI2L2ZvbGxvdy1kZWxldGVkLXJlYWRkZWQuZHVtcAorICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmVwb3NpdG9yeScgJworICAgIHN0YXJ0X3N2bnNlcnZlICYmCisgICAgZ2l0IHN2biBpbml0IHN2bjovLzEyNy4wLjAuMTokU1ZOU0VSVkVfUE9SVCAmJgorICAgIGdpdCBzdm4gZmV0Y2gKKyAgICAnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyNi9mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLmR1bXAgYi90L3Q5MTI2L2ZvbGxvdy1kZWxldGVkLXJlYWRkZWQuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRhNWQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyNi9mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLmR1bXAKQEAgLTAsMCArMSwyMDEgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDE4MDdkYzZmLWM2OTMtNGNkYS05NzEwLTAwZTFiZThjMWYyMQorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxMy4wMDY3NDhaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDEyCitDcmVhdGUgdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxMy4yMzk2ODlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTkKK0NvbnRlbnQtbGVuZ3RoOiAxMTkKKworSyA3Citzdm46bG9nCitWIDIwCitDcmVhdGUgdHJ1bmsvcHJvamVjdAorSyAxMAorc3ZuOmF1dGhvcgorViA0CithbGVjCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjEzLjU0ODg2MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Byb2plY3QKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViAxMgorYWRkIG5ldyBmaWxlCitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTUuNDMzNjMwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdC9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGQzYjA3Mzg0ZDExM2VkZWM0OWVhYTYyMzhhZDVmZjAwCitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECitmb28KKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTcKK2NoYW5nZSBmb28gdG8gYmFyCitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTcuMzM5ODg0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdC9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogYzE1N2E3OTAzMWUxYzQwZjg1OTMxODI5YmM1ZmM1NTIKK0NvbnRlbnQtbGVuZ3RoOiA0CisKK2JhcgorCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE0CitDb250ZW50LWxlbmd0aDogMTE0CisKK0sgNworc3ZuOmxvZworViAxNQorZG9uJ3QgbGlrZSB0aGF0CitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTkuMzM1MDAxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdAorTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMQorcmVzZXQgdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxOS44NDU4OTdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9wcm9qZWN0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDQKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvcHJvamVjdAorCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTEzCitDb250ZW50LWxlbmd0aDogMTEzCisKK0sgNworc3ZuOmxvZworViAxNAorY2hhbmdlIHRvIHF1dXgKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoyMS4zNjc5NDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9wcm9qZWN0L2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA1CitUZXh0LWNvbnRlbnQtbWQ1OiBkM2IwN2EzODJlYzAxMGMwMTg4OTI1MGZjZTY2ZmIxMworQ29udGVudC1sZW5ndGg6IDUKKworcXV1eAorCisKZGlmZiAtLWdpdCBhL3QvdDkxMjctZ2l0LXN2bi1wYXJ0aWFsLXJlYnVpbGQuc2ggYi90L3Q5MTI3LWdpdC1zdm4tcGFydGlhbC1yZWJ1aWxkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlNDc4OWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI3LWdpdC1zdm4tcGFydGlhbC1yZWJ1aWxkLnNoCkBAIC0wLDAgKzEsNTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRGVza2luIE1pbGxlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHBhcnRpYWwtcmVidWlsZCB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHN2bnJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCShjZCBpbXBvcnQgJiYKKwkJbWtkaXIgdHJ1bmsgYnJhbmNoZXMgdGFncyAmJgorCQkoY2QgdHJ1bmsgJiYKKwkJZWNobyBmb28gPiBmb28KKwkJKSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQtc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbCAmJgorCQlzdm5fY21kIGNvcHkgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgXAorCQkJLW0gImNyZWF0ZWQgYnJhbmNoIGEiCisJCSkgJiYKKwkJcm0gLXJmIGltcG9ydCAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKKwkJKGNkIHRydW5rICYmCisJCWVjaG8gYmFyID4+IGZvbyAmJgorCQlzdm5fY21kIGNpIC1tICJ1cGRhdGVkIHRydW5rIgorCQkpICYmCisJCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9icmFuY2hlcy9hIGEgJiYKKwkJKGNkIGEgJiYKKwkJZWNobyBiYXogPj4gYSAmJgorCQlzdm5fY21kIGFkZCBhICYmCisJCXN2bl9jbWQgY2kgLW0gInVwZGF0ZWQgYSIKKwkJKSAmJgorCQlnaXQgc3ZuIGluaXQgLS1zdGRsYXlvdXQgIiRzdm5yZXBvIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGFuIGVhcmx5IFNWTiByZXZpc2lvbiBpbnRvIGdpdCcgJworCWdpdCBzdm4gZmV0Y2ggLXIxOjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBmdWxsIGdpdCBtaXJyb3Igb2YgU1ZOJyAnCisJbWtkaXIgbWlycm9yICYmCisJKAorCQkoY2QgbWlycm9yICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iICYmCisJCWdpdCBzdm4gZmV0Y2gKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBnaXQgbWlycm9yIGFuZCBwYXJ0aWFsLXJlYnVpbGQnICcKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4udXJsICJmaWxlOi8vJFBXRC9taXJyb3IvLmdpdCIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyogJiYKKwlnaXQgZmV0Y2ggb3JpZ2luICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjgtZ2l0LXN2bi1jbWQtYnJhbmNoLnNoIGIvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGU5NWY3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjgtZ2l0LXN2bi1jbWQtYnJhbmNoLnNoCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRGVza2luIE1pbGxlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHBhcnRpYWwtcmVidWlsZCB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHN2bnJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCShjZCBpbXBvcnQgJiYKKwkJbWtkaXIgdHJ1bmsgYnJhbmNoZXMgdGFncyAmJgorCQkoY2QgdHJ1bmsgJiYKKwkJZWNobyBmb28gPiBmb28KKwkJKSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQtc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorCQkpICYmCisJCXJtIC1yZiBpbXBvcnQgJiYKKwkJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCisJCShjZCB0cnVuayAmJgorCQllY2hvIGJhciA+PiBmb28gJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCB0cnVuayIKKwkJKSAmJgorCQlybSAtcmYgdHJ1bmsKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBpbnRvIGdpdCcgJworCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBjaGVja291dCByZW1vdGVzL29yaWdpbi90cnVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGJyYW5jaCB0ZXN0cycgJworCWdpdCBzdm4gYnJhbmNoIGEgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEOikgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL2E6KSAmJgorCWdpdCBzdm4gYnJhbmNoIC1tICJjcmVhdGVkIGJyYW5jaCBiIGJsYWgiIGIgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL2I6KSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gIm5vIGJyYW5jaG5hbWUiICYmCisJZ2l0IHN2biBicmFuY2ggLW4gYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIGEgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtdCB0YWcxICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi90YWdzL3RhZzE6KSAmJgorCWdpdCBzdm4gYnJhbmNoIC0tdGFnIHRhZzIgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL3RhZ3MvdGFnMjopICYmCisJZ2l0IHN2biB0YWcgdGFnMyAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vdGFncy90YWczOikgJiYKKwlnaXQgc3ZuIHRhZyAtbSAiY3JlYXRlZCB0YWc0IGZvbyIgdGFnNCAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vdGFncy90YWc0OikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIHRhZyAtbSAibm8gdGFnbmFtZSIgJiYKKwlnaXQgc3ZuIHRhZyAtbiB0YWc1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi90YWdzL3RhZzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIHRhZyB0YWcxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCB1c2VzIGNvcnJlY3Qgc3ZuLXJlbW90ZScgJworCShzdm5fY21kIGNvICIkc3ZucmVwbyIgc3ZuICYmCisJY2Qgc3ZuICYmCisJbWtkaXIgbWlycm9yICYmCisJc3ZuX2NtZCBhZGQgbWlycm9yICYmCisJc3ZuX2NtZCBjb3B5IHRydW5rIG1pcnJvci8gJiYKKwlzdm5fY21kIGNvcHkgdGFncyBtaXJyb3IvICYmCisJc3ZuX2NtZCBjb3B5IGJyYW5jaGVzIG1pcnJvci8gJiYKKwlzdm5fY21kIGNpIC1tICJtYWRlIG1pcnJvciIgKSAmJgorCXJtIC1yZiBzdm4gJiYKKwlnaXQgc3ZuIGluaXQgLXMgLVIgbWlycm9yIC0tcHJlZml4PW1pcnJvci8gIiRzdm5yZXBvIi9taXJyb3IgJiYKKwlnaXQgc3ZuIGZldGNoIC1SIG1pcnJvciAmJgorCWdpdCBjaGVja291dCBtaXJyb3IvdHJ1bmsgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEOikgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtbSAiYnJhbmNoIGluIG1pcnJvciIgZCAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9taXJyb3IvZDopICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZW1vdGVzL2QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaCBiL3QvdDkxMjktZ2l0LXN2bi1pMThuLWNvbW1pdGVuY29kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMjEzYWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI5LWdpdC1zdm4taTE4bi1jb21taXRlbmNvZGluZy5zaApAQCAtMCwwICsxLDkxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEVyaWMgV29uZworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGhvbm9ycyBpMThuLmNvbW1pdEVuY29kaW5nIGluIGNvbmZpZycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NvbXBhcmVfZ2l0X2hlYWRfd2l0aCAoKSB7CisJbnI9JCh3YyAtbCA8ICIkMSIpCisJYT03CisJYj0kKCgkYSArICRuciAtIDEpKQorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgIiRhLCR7Yn1wIiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGN1cnJlbnQgIiQxIgorfQorCitwcmVwYXJlX2FfdXRmOF9sb2NhbGUKKworY29tcGFyZV9zdm5faGVhZF93aXRoICgpIHsKKwkjIGV4dHJhY3QganVzdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHN0cmlwIG91dCBjb21taXR0ZXIgaW5mby4KKwkjIGRvbid0IHVzZSAtLWxpbWl0IGhlcmUgc2luY2Ugc3ZuIDEuMS54IGRvZXNuJ3QgaGF2ZSBpdCwKKwlMQ19BTEw9IiRhX3V0ZjhfbG9jYWxlIiBzdm4gbG9nICQoZ2l0IHN2biBpbmZvIC0tdXJsKSB8IHBlcmwgLXcgLWUgJworCQl1c2UgYnl0ZXM7CisJCSQvID0gKCItIng3MikgLiAiXG4iOworCQlteSBAeCA9IDxTVERJTj47CisJCUB4ID0gc3BsaXQoL1xuLywgJHhbMV0pOworCQlzcGxpY2UoQHgsIDAsIDIpOworCQkkeFstMV0gPSAiIjsKKwkJcHJpbnQgam9pbigiXG4iLCBAeCk7CisJJyA+IGN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBjdXJyZW50ICIkMSIKK30KKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCisJCW1rZGlyICRIICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICIkSCB0ZXN0IiAkSCAiJHN2bnJlcG8iLyRIICYmCisJCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi8kSCAkSAorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGNvbW1pdCBvbiBnaXQgc2lkZSIgJworCSgKKwkJY2QgJEggJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRIICYmCisJCWdpdCBjaGVja291dCAtYiB0IHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJCWVjaG8gJEggPkYgJiYKKwkJZ2l0IGFkZCBGICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJEgudHh0ICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInokSCIgJiYKKwkJY29tcGFyZV9naXRfaGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dAorCSkKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBkY29tbWl0IHRvIHN2biIgJworCSgKKwkJY2QgJEggJiYKKwkJZ2l0IHN2biBkY29tbWl0ICYmCisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgZ2l0LXN2bi1pZDogJiYKKwkJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCisJCXRlc3QgInokRSIgPSAieiRIIiAmJgorCQljb21wYXJlX2dpdF9oZWFkX3dpdGggIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJEgudHh0CisJKQorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVVEY4ICdJU08tODg1OS0xIHNob3VsZCBtYXRjaCBVVEYtOCBpbiBzdm4nICcKKwkoCisJCWNkIElTTzg4NTktMSAmJgorCQljb21wYXJlX3N2bl9oZWFkX3dpdGggIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQKKwkpCisnCisKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCAiJEggc2hvdWxkIG1hdGNoIFVURi04IGluIHN2biIgJworCQkoCisJCQljZCAkSCAmJgorCQkJY29tcGFyZV9zdm5faGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzItVVRGLTgudHh0CisJCSkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzMC1naXQtc3ZuLWF1dGhvcnMtZmlsZS5zaCBiL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2I3NjRiYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2gKQEAgLTAsMCArMSwxMzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gYXV0aG9ycyBmaWxlIHRlc3RzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworY2F0ID4gc3ZuLWF1dGhvcnMgPDxFT0YKK2FhID0gQUFBQUFBQSBBQUFBQUFBIDxhYUBleGFtcGxlLmNvbT4KK2JiID0gQkJCQkJCQiBCQkJCQkJCIDxiYkBleGFtcGxlLmNvbT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJZm9yIGkgaW4gYWEgYmIgY2MgZGQKKwlkbworCQlzdm5fY21kIG1rZGlyIC1tICRpIC0tdXNlcm5hbWUgJGkgIiRzdm5yZXBvIi8kaQorCWRvbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IGltcG9ydCB3aXRoIGluY29tcGxldGUgYXV0aG9ycyBmaWxlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBjbG9uZSAtLWF1dGhvcnMtZmlsZT1zdm4tYXV0aG9ycyAiJHN2bnJlcG8iIHgKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydGVkIDIgcmV2aXNpb25zIHN1Y2Nlc3NmdWxseScgJworCSgKKwkJY2QgeCAmJgorCQlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID5hY3R1YWwgJiYKKwkJZ3JlcCAiXmF1dGhvciBCQkJCQkJCIEJCQkJCQkIgPGJiQGV4YW1wbGVcLmNvbT4gIiBhY3R1YWwgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4xID5hY3R1YWwgJiYKKwkJZ3JlcCAiXmF1dGhvciBBQUFBQUFBIEFBQUFBQUEgPGFhQGV4YW1wbGVcLmNvbT4gIiBhY3R1YWwKKwkpCisJJworCitjYXQgPj4gc3ZuLWF1dGhvcnMgPDxFT0YKK2NjID0gQ0NDQ0NDQyBDQ0NDQ0NDIDxjY0BleGFtcGxlLmNvbT4KK2RkID0gRERERERERCBEREREREREIDxkZEBleGFtcGxlLmNvbT4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb250aW51ZXMgdG8gaW1wb3J0IG9uY2UgYXV0aG9ycyBoYXZlIGJlZW4gYWRkZWQnICcKKwkoCisJCWNkIHggJiYKKwkJZ2l0IHN2biBmZXRjaCAtLWF1dGhvcnMtZmlsZT0uLi9zdm4tYXV0aG9ycyAmJgorCQlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IGFjdHVhbCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID5hY3R1YWwgJiYKKwkJZ3JlcCAiXmF1dGhvciBEREREREREIEREREREREQgPGRkQGV4YW1wbGVcLmNvbT4gIiBhY3R1YWwgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4xID5hY3R1YWwgJiYKKwkJZ3JlcCAiXmF1dGhvciBDQ0NDQ0NDIENDQ0NDQ0MgPGNjQGV4YW1wbGVcLmNvbT4gIiBhY3R1YWwKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLWZpbGUgYWdhaW5zdCBnbG9icycgJworCXN2bl9jbWQgbWtkaXIgLW0gZ2xvYnMgLS11c2VybmFtZSBhYSBcCisJICAiJHN2bnJlcG8iL2FhL3RydW5rICIkc3ZucmVwbyIvYWEvYnJhbmNoZXMgIiRzdm5yZXBvIi9hYS90YWdzICYmCisJZ2l0IHN2biBjbG9uZSAtLWF1dGhvcnMtZmlsZT1zdm4tYXV0aG9ycyAtcyAiJHN2bnJlcG8iL2FhIGFhLXdvcmsgJiYKKwlmb3IgaSBpbiBiYiBlZSBjYworCWRvCisJCWJyYW5jaD0iYWEvYnJhbmNoZXMvJGkiCisJCXN2bl9jbWQgbWtkaXIgLW0gIiRicmFuY2giIC0tdXNlcm5hbWUgJGkgIiRzdm5yZXBvLyRicmFuY2giCisJZG9uZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZmFpbHMgb24gZWUnICcKKwkoIGNkIGFhLXdvcmsgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCAtLWF1dGhvcnMtZmlsZT0uLi9zdm4tYXV0aG9ycyApCisJJworCit0bXBfY29uZmlnX2dldCAoKSB7CisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zdm4vLm1ldGFkYXRhIC0tZ2V0ICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHVyZSBoYXBwZW5lZCB3aXRob3V0IG5lZ2F0aXZlIHNpZGUgZWZmZWN0cycgJworCSgKKwkJY2QgYWEtd29yayAmJgorCQl0ZXN0IDYgLWVxICIkKHRtcF9jb25maWdfZ2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzLW1heFJldikiICYmCisJCXRlc3QgNiAtZXEgIiQodG1wX2NvbmZpZ19nZXQgc3ZuLXJlbW90ZS5zdm4udGFncy1tYXhSZXYpIgorCSkKKwknCisKK2NhdCA+PiBzdm4tYXV0aG9ycyA8PEVPRgorZWUgPSBFRUVFRUVFIEVFRUVFRUUgPGVlQGV4YW1wbGUuY29tPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNvbnRpbnVlcyBhZnRlciBhdXRob3JzLWZpbGUgaXMgZml4ZWQnICcKKwkoCisJCWNkIGFhLXdvcmsgJiYKKwkJZ2l0IHN2biBmZXRjaCAtLWF1dGhvcnMtZmlsZT0uLi9zdm4tYXV0aG9ycyAmJgorCQl0ZXN0IDggLWVxICIkKHRtcF9jb25maWdfZ2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzLW1heFJldikiICYmCisJCXRlc3QgOCAtZXEgIiQodG1wX2NvbmZpZ19nZXQgc3ZuLXJlbW90ZS5zdm4udGFncy1tYXhSZXYpIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdmcmVzaCBjbG9uZSB3aXRoIHN2bi5hdXRob3JzLWZpbGUgaW4gY29uZmlnJyAnCisJKAorCQlybSAtciAiJEdJVF9ESVIiICYmCisJCXRlc3QgeCA9IHgiJChnaXQgY29uZmlnIHN2bi5hdXRob3JzZmlsZSkiICYmCisJCXRlc3RfY29uZmlnPSIkSE9NRSIvLmdpdGNvbmZpZyAmJgorCQlzYW5lX3Vuc2V0IEdJVF9ESVIgJiYKKwkJZ2l0IGNvbmZpZyAtLWdsb2JhbCBcCisJCSAgc3ZuLmF1dGhvcnNmaWxlICIkSE9NRSIvc3ZuLWF1dGhvcnMgJiYKKwkJdGVzdCB4IiRIT01FIi9zdm4tYXV0aG9ycyA9IHgiJChnaXQgY29uZmlnIHN2bi5hdXRob3JzZmlsZSkiICYmCisJCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiBnaXRjb25maWcuY2xvbmUgJiYKKwkJY2QgZ2l0Y29uZmlnLmNsb25lICYmCisJCWdpdCBsb2cgPmFjdHVhbCAmJgorCQlucl9leD0kKGdyZXAgIl5BdXRob3I6LipleGFtcGxlLmNvbSIgYWN0dWFsIHwgd2MgLWwpICYmCisJCWdpdCByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwkJbnJfcmV2PSQod2MgLWwgPGFjdHVhbCkgJiYKKwkJdGVzdCAkbnJfcmV2IC1lcSAkbnJfZXgKKwkpCisnCisKK2NhdCA+PiBzdm4tYXV0aG9ycyA8PEVPRgorZmYgPSBGRkZGRkZGIEZGRkZGRkYgPD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLWZpbGUgaW1wb3J0ZWQgdXNlciB3aXRob3V0IGVtYWlsJyAnCisJc3ZuX2NtZCBta2RpciAtbSBhYS9icmFuY2hlcy9mZiAtLXVzZXJuYW1lIGZmICIkc3ZucmVwby9hYS9icmFuY2hlcy9mZiIgJiYKKwkoCisJCWNkIGFhLXdvcmsgJiYKKwkJZ2l0IHN2biBmZXRjaCAtLWF1dGhvcnMtZmlsZT0uLi9zdm4tYXV0aG9ycyAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9vcmlnaW4vZmYgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBGRkZGRkZGIEZGRkZGRkYgPD4gIgorCSkKKwknCisKK3Rlc3RfZGVidWcgJ0dJVF9ESVI9Z2l0Y29uZmlnLmNsb25lLy5naXQgZ2l0IGxvZycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTMxLWdpdC1zdm4tZW1wdHktc3ltbGluay5zaCBiL3QvdDkxMzEtZ2l0LXN2bi1lbXB0eS1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiZjQyNTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMxLWdpdC1zdm4tZW1wdHktc3ltbGluay5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdGhhdCBnaXQgaGFuZGxlcyBhbiBzdm4gcmVwb3NpdG9yeSB3aXRoIGVtcHR5IHN5bWxpbmtzJworCisuIC4vbGliLWdpdC1zdm4uc2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAnCisJc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDw8RU9GCitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiA2MDc4MGY5YS03ZGY1LTQzYjQtODNhYi02MGUyYzA2NzNlZjcKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjZUMDc6MTc6MjcuNTkwNTc3WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViA0Cit0ZXN0CitLIDEwCitzdm46YXV0aG9yCitWIDEyCitub3JtYWxwZXJzb24KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjZUMDc6MTg6MDMuNTExODM2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDMzCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorQ29udGVudC1sZW5ndGg6IDMzCisKK0sgMTEKK3N2bjpzcGVjaWFsCitWIDEKKyoKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTMKK2JhciA9PiBkb2luaworCitLIDEwCitzdm46YXV0aG9yCitWIDEyCitub3JtYWxwZXJzb24KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjdUMDM6NTU6MzEuNjAxNjcyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbWQ1OiA5MmNhNGZlN2E5NzIxZjg3N2Y3NjVjMjUyZGNkNjZjOQorQ29udGVudC1sZW5ndGg6IDEwCisKK2xpbmsgZG9pbmsKKworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHgnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgYnJva2VuIHN5bWxpbmsgd29ya2Fyb3VuZCcgXAorICAnKGNkIHggJiYgZ2l0IGNvbmZpZyBzdm4uYnJva2VuU3ltbGlua1dvcmthcm91bmQgdHJ1ZSknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYmFyIiBpcyBhbiBlbXB0eSBmaWxlJyAndGVzdF9tdXN0X2JlX2VtcHR5IHgvYmFyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0ICJiYXIiID0+IHN5bWxpbmsgZml4IGZyb20gc3ZuJyBcCisJCScoY2QgeCAmJiBnaXQgc3ZuIHJlYmFzZSknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICciYmFyIiBiZWNvbWVzIGEgc3ltbGluaycgJ3Rlc3QgLWggeC9iYXInCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXIxICIkc3ZucmVwbyIgeScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGUgYnJva2VuIHN5bWxpbmsgd29ya2Fyb3VuZCcgXAorICAnKGNkIHkgJiYgZ2l0IGNvbmZpZyBzdm4uYnJva2VuU3ltbGlua1dvcmthcm91bmQgZmFsc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgaXMgYW4gZW1wdHkgZmlsZScgJ3Rlc3RfbXVzdF9iZV9lbXB0eSB5L2JhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgXAorCQknKGNkIHkgJiYgZ2l0IHN2biByZWJhc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgZG9lcyBub3QgYmVjb21lIGEgc3ltbGluaycgJyEgdGVzdCAtTCB5L2JhcicKKworIyBzdm4uYnJva2VuU3ltbGlua1dvcmthcm91bmQgaXMgdW5zZXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHonCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYmFyIiBpcyBhbiBlbXB0eSBmaWxlJyAndGVzdF9tdXN0X2JlX2VtcHR5IHovYmFyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0ICJiYXIiID0+IHN5bWxpbmsgZml4IGZyb20gc3ZuJyBcCisJCScoY2QgeiAmJiBnaXQgc3ZuIHJlYmFzZSknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYmFyIiBkb2VzIG5vdCBiZWNvbWUgYSBzeW1saW5rJyAnISB0ZXN0IC1MIHovYmFyJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzMi1naXQtc3ZuLWJyb2tlbi1zeW1saW5rLnNoIGIvdC90OTEzMi1naXQtc3ZuLWJyb2tlbi1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlY2VmZmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMyLWdpdC1zdm4tYnJva2VuLXN5bWxpbmsuc2gKQEAgLTAsMCArMSwxMDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRoYXQgZ2l0IGhhbmRsZXMgYW4gc3ZuIHJlcG9zaXRvcnkgd2l0aCBlbXB0eSBzeW1saW5rcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wZmlsZScgJworCXN2bmFkbWluIGxvYWQgIiRyYXdzdm5yZXBvIiA8PEVPRgorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogNjA3ODBmOWEtN2RmNS00M2I0LTgzYWItNjBlMmMwNjczZWY3CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI2VDA3OjE3OjI3LjU5MDU3N1oKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgNAordGVzdAorSyAxMAorc3ZuOmF1dGhvcgorViAxMgorbm9ybWFscGVyc29uCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI2VDA3OjE4OjAzLjUxMTgzNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogOTEyZWM4MDNiMmNlNDllNGE1NDEwNjhkNDk1YWI1NzAKK0NvbnRlbnQtbGVuZ3RoOiAzNworCitLIDExCitzdm46c3BlY2lhbAorViAxCisqCitQUk9QUy1FTkQKK2FzZGYKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDEzCitiYXIgPT4gZG9pbmsKKworSyAxMAorc3ZuOmF1dGhvcgorViAxMgorbm9ybWFscGVyc29uCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTExLTI3VDAzOjU1OjMxLjYwMTY3MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogOTJjYTRmZTdhOTcyMWY4NzdmNzY1YzI1MmRjZDY2YzkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitsaW5rIGRvaW5rCisKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBnaXQgc3ZuJyAnZ2l0IHN2biBjbG9uZSAtcjEgIiRzdm5yZXBvIiB4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICciYmFyIiBpcyBhIHN5bWxpbmsgdGhhdCBwb2ludHMgdG8gImFzZGYiJyAnCisJdGVzdCAtTCB4L2JhciAmJgorCShjZCB4ICYmIHRlc3QgeGFzZGYgPSB4IiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpiYXIpIikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0ICJiYXIiID0+IHN5bWxpbmsgZml4IGZyb20gc3ZuJyAnCisJKGNkIHggJiYgZ2l0IHN2biByZWJhc2UpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJyJiYXIiIHJlbWFpbnMgYSBwcm9wZXIgc3ltbGluaycgJworCXRlc3QgLUwgeC9iYXIgJiYKKwkoY2QgeCAmJiB0ZXN0IHhkb2luayA9IHgiJChnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmJhcikiKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2ggYi90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4OTQ4NjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BlcnR5IHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBhIGdpdCByZXBvIGluc2lkZSBpdCcgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3QgLWYgLmdpdC9IRUFEICYmCisJCT4gLmdpdC9hICYmCisJCWVjaG8gYSA+IGEgJiYKKwkJc3ZuX2NtZCBhZGQgLmdpdCBhICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgYSBuZXN0ZWQgZ2l0IHJlcG8iICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBoaSA+PiAuZ2l0L2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSAuZ2l0L2EiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGFuIFNWTiByZXBvIGNvbnRhaW5pbmcgYSBnaXQgcmVwbycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiBnICYmCisJZWNobyBhID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGcvYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gYiA+PiBhICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIC5naXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbycgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQllY2hvIGEgPiBleHBlY3QgJiYKKwkJZWNobyBiID4+IGV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYSAmJgorCQlybSBleHBlY3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCcgJworCSgKKwkJY2QgcyAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgaW5zaWRlIGFuIFNWTiByZXBvIiAmJgorCQlnaXQgbG9nICYmCisJCXN2bl9jbWQgYWRkIC0tZm9yY2UgLmdpdCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCWVjaG8gYSA+IGV4cGVjdCAmJgorCQllY2hvIGIgPj4gZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhICYmCisJCXJtIGV4cGVjdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCcgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGMgPj4gYSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgaW5zaWRlIGFuIFNWTiByZXBvIiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiAuZ2l0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4nICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJZWNobyBhID4gZXhwZWN0ICYmCisJCWVjaG8gYiA+PiBleHBlY3QgJiYKKwkJZWNobyBjID4+IGV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYSAmJgorCQlybSBleHBlY3QKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNC1naXQtc3ZuLWlnbm9yZS1wYXRocy5zaCBiL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmZmNDljNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2gKQEAgLTAsMCArMSwxNDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgVml0YWx5IFNodWtlbGEKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BlcnR5IHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHFxcSB3d3cgJiYKKwkJZWNobyB0ZXN0X3FxcSA+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJZWNobyB0ZXN0X3d3dyA+IHd3dy90ZXN0X3d3dy50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgcXFxICYmCisJCXN2bl9jbWQgYWRkIHd3dyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIHNvbWUgZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBoaSA+PiB3d3cvdGVzdF93d3cudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtb2RpZnkgd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBpZ25vcmVkIHd3dyBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGNsb25lIC0taWdub3JlLXBhdGhzPSJed3d3IiAiJHN2bnJlcG8iIGcgJiYKKwllY2hvIHRlc3RfcXFxID4gZXhwZWN0ICYmCisJZm9yIGkgaW4gZy8qLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCXRlc3RfY21wIGV4cGVjdCBleHBlY3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQrZmV0Y2ggYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBpZ25vcmVkIHd3dyBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiBjICYmCisJKCBjZCBjICYmIGdpdCBzdm4gZmV0Y2ggLS1pZ25vcmUtcGF0aHM9Il53d3ciICkgJiYKKwlybSBleHBlY3QyICYmCisJZWNobyB0ZXN0X3FxcSA+IGV4cGVjdCAmJgorCWZvciBpIGluIGMvKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaWdub3JlLXBhdGhzIGNvbmZpZyBzYXZlZCBieSBjbG9uZScgJworCSgKKwkgICAgY2QgZyAmJgorCSAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmlnbm9yZS1wYXRocyB8IGZncmVwICJ3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3cnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyBiID4+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAoY29uZmlnIGlnbm9yZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIGlnbm9yZWQgd3d3JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gemFxID4+IHd3dy90ZXN0X3d3dy50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAoY29uZmlnIGlnbm9yZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiBpZ25vcmVkIHd3dycgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGN2ZiA+PiB3d3cvdGVzdF93d3cudHh0ICYmCisJCWVjaG8geWdnID4+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4gKGNvbmZpZyBpZ25vcmUpJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbnlnZ1xuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG55Z2dcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNS1naXQtc3ZuLW1vdmVkLWJyYW5jaC1lbXB0eS1maWxlLnNoIGIvdC90OTEzNS1naXQtc3ZuLW1vdmVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmODBiMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM1LWdpdC1zdm4tbW92ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbW92ZWQgc3ZuIGJyYW5jaCB3aXRoIG1pc3NpbmcgZW1wdHkgZmlsZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICAnCisJc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDwgIiR7VEVTVF9ESVJFQ1RPUll9L3Q5MTM1L3N2bi5kdW1wIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRoYXQgYjEgZXhpc3RzIGFuZCBpcyBlbXB0eScgJworCSgKKwkJY2QgeCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9icmFuY2gtYyAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYjEKKwkpCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzUvc3ZuLmR1bXAgYi90L3Q5MTM1L3N2bi5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MWMwY2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM1L3N2bi5kdW1wCkBAIC0wLDAgKzEsMTkyIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiAxZjgwZTkxOS1lOWUzLTRkODAtYTNhZS1kOWYyMTA5NWUyN2IKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MTYuNDI0MDI3WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyMAoraW5pdCBzdGFuZGFyZCBsYXlvdXQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MTcuMTk1MDcyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxOAorYnJhbmNoLWIgb2ZmIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjE5LjE2MDA5NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1iCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKK1Byb3AtY29udGVudC1sZW5ndGg6IDM0CitDb250ZW50LWxlbmd0aDogMzQKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTIwCitDb250ZW50LWxlbmd0aDogMTIwCisKK0sgNworc3ZuOmxvZworViAxNworYWRkIGVtcHR5IGZpbGUgYjEKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MjAuMTk0NTY4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnJhbmNoLWIvYjEKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDgKK2JyYW5jaC1jCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjIxLjE2OTEwMFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1jCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNgorQ29udGVudC1sZW5ndGg6IDEyNgorCitLIDcKK3N2bjpsb2cKK1YgMjMKK29vcHMsIHdyb25nIGJyYW5jaHBvaW50CitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTEwVDE5OjIzOjIxLjI1MzU1N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1jCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjcKK0NvbnRlbnQtbGVuZ3RoOiAxMjcKKworSyA3Citzdm46bG9nCitWIDI0CiticmFuY2gtYyBvZmYgb2YgYnJhbmNoLWIKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MjEuMzE0NjU5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnJhbmNoLWMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYgorUHJvcC1jb250ZW50LWxlbmd0aDogMzQKK0NvbnRlbnQtbGVuZ3RoOiAzNAorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDAKKworUFJPUFMtRU5ECisKKwpkaWZmIC0tZ2l0IGEvdC90OTEzNi1naXQtc3ZuLXJlY3JlYXRlZC1icmFuY2gtZW1wdHktZmlsZS5zaCBiL3QvdDkxMzYtZ2l0LXN2bi1yZWNyZWF0ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzMzZDE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzYtZ2l0LXN2bi1yZWNyZWF0ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgcmVjcmVhdGVkIHN2biBicmFuY2ggd2l0aCBlbXB0eSBmaWxlcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biBkdW1wZmlsZScgICcKKwlzdm5hZG1pbiBsb2FkICIkcmF3c3ZucmVwbyIgPCAiJHtURVNUX0RJUkVDVE9SWX0vdDkxMzYvc3ZuLmR1bXAiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBnaXQgc3ZuJyAnZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iIHgnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNi9zdm4uZHVtcCBiL3QvdDkxMzYvc3ZuLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxY2UwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzYvc3ZuLmR1bXAKQEAgLTAsMCArMSwxOTIgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IGVlY2FlMDIxLThmMTYtNDhkYS05NjlkLTc5YmViOGFlNmVhNQorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1Ni4yOTI4OTBaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDYKK0NvbnRlbnQtbGVuZ3RoOiAxMDYKKworSyA3Citzdm46bG9nCitWIDQKK2luaXQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTcuMTkyMzg0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdGFncworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTA1CitDb250ZW50LWxlbmd0aDogMTA1CisKK0sgNworc3ZuOmxvZworViAzCisxLjAKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTguMTI0NzI0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy8xLjAKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViA5CisxLjAuMS1iYWQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTguMTUxNzI3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy8xLjAuMQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRhZ3MvMS4wCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDkKK1dyb25nIHRhZworSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1OC4xNjc0MjdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0YWdzLzEuMC4xCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTMKK0NvbnRlbnQtbGVuZ3RoOiAxMTMKKworSyA3Citzdm46bG9nCitWIDEwCisxLjAtYnJhbmNoCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjE4NDQ5OFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzLzEuMAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA0CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRhZ3MvMS4wCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTMKK0NvbnRlbnQtbGVuZ3RoOiAxMTMKKworSyA3Citzdm46bG9nCitWIDEwCisxLjAuMS1nb29kCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjIwMDY5NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvMS4wLjEKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy8xLjAKKworCmRpZmYgLS1naXQgYS90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaCBiL3QvdDkxMzctZ2l0LXN2bi1kY29tbWl0LWNsb2JiZXItc2VyaWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2N2IxNWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM3LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaApAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IGNsb2JiZXIgc2VyaWVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCShjZCBpbXBvcnQgJiYKKwlhd2sgIkJFR0lOIHsgZm9yIChpID0gMTsgaSA8IDY0OyBpKyspIHsgcHJpbnQgaSB9IH0iID4gZmlsZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIKKwkpICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJdGVzdCAtZSBmaWxlCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcoc3VwcG9zZWRseSkgbm9uLWNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIFNWTicgJworCXRlc3QgeCIkKHNlZCAtbiAtZSA1OHAgPCBmaWxlKSIgPSB4NTggJiYKKwl0ZXN0IHgiJChzZWQgLW4gLWUgNjFwIDwgZmlsZSkiID0geDYxICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCShjZCB0bXAgJiYKKwkJcGVybCAtaS5iYWsgLXAgLWUgInMvXjU4JC81NTg4LyIgZmlsZSAmJgorCQlwZXJsIC1pLmJhayAtcCAtZSAicy9eNjEkLzY2MTEvIiBmaWxlICYmCisJCXBva2UgZmlsZSAmJgorCQl0ZXN0IHgiJChzZWQgLW4gLWUgNThwIDwgZmlsZSkiID0geDU1ODggJiYKKwkJdGVzdCB4IiQoc2VkIC1uIC1lIDYxcCA8IGZpbGUpIiA9IHg2NjExICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICI1OCA9PiA1NTg4LCA2MSA9PiA2NjExIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvbWUgdW5yZWxhdGVkIGNoYW5nZXMgdG8gZ2l0JyAiCisJZWNobyBoaSA+IGxpZmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGxpZmUgJiYKKwlnaXQgY29tbWl0IC1tIGhpLWxpZmUgJiYKKwllY2hvIGJ5ZSA+PiBsaWZlICYmCisJZ2l0IGNvbW1pdCAtbSBieWUtbGlmZSBsaWZlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2UgZmlsZSBidXQgaW4gdW5yZWxhdGVkIGFyZWEnICIKKwl0ZXN0IHhcIlwkKHNlZCAtbiAtZSA0cCA8IGZpbGUpXCIgPSB4NCAmJgorCXRlc3QgeFwiXCQoc2VkIC1uIC1lIDdwIDwgZmlsZSlcIiA9IHg3ICYmCisJcGVybCAtaS5iYWsgLXAgLWUgJ3MvXjRcJC80NDQ0LycgZmlsZSAmJgorCXBlcmwgLWkuYmFrIC1wIC1lICdzL143XCQvNzc3Ny8nIGZpbGUgJiYKKwl0ZXN0IHhcIlwkKHNlZCAtbiAtZSA0cCA8IGZpbGUpXCIgPSB4NDQ0NCAmJgorCXRlc3QgeFwiXCQoc2VkIC1uIC1lIDdwIDwgZmlsZSlcIiA9IHg3Nzc3ICYmCisJZ2l0IGNvbW1pdCAtbSAnNCA9PiA0NDQ0LCA3ID0+IDc3NzcnIGZpbGUgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlzdm5fY21kIHVwIHRtcCAmJgorCWNkIHRtcCAmJgorCQl0ZXN0IHhcIlwkKHNlZCAtbiAtZSA0cCA8IGZpbGUpXCIgPSB4NDQ0NCAmJgorCQl0ZXN0IHhcIlwkKHNlZCAtbiAtZSA3cCA8IGZpbGUpXCIgPSB4Nzc3NyAmJgorCQl0ZXN0IHhcIlwkKHNlZCAtbiAtZSA1OHAgPCBmaWxlKVwiID0geDU1ODggJiYKKwkJdGVzdCB4XCJcJChzZWQgLW4gLWUgNjFwIDwgZmlsZSlcIiA9IHg2NjExCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRlbXB0IHRvIGRjb21taXQgd2l0aCBhIGRpcnR5IGluZGV4JyAnCisJZWNobyBmb28gPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzOC1naXQtc3ZuLWF1dGhvcnMtcHJvZy5zaCBiL3QvdDkxMzgtZ2l0LXN2bi1hdXRob3JzLXByb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDI3YjQxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzgtZ2l0LXN2bi1hdXRob3JzLXByb2cuc2gKQEAgLTAsMCArMSwxMDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nLCBNYXJrIExvZGF0bworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGF1dGhvcnMgcHJvZyB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3dyaXRlX3NjcmlwdCBzdm4tYXV0aG9ycy1wcm9nICIkUEVSTF9QQVRIIiA8PC1cRU9GCisJJF8gPSBzaGlmdDsKKwlpZiAocy8taGVybWl0Ly8pIHsKKwkJcHJpbnQgIiRfIDw+XG4iOworCX0gZWxzaWYgKHMvLXN1YiQvLykgIHsKKwkJcHJpbnQgIiRfIDwkX1xAc3ViLmV4YW1wbGUuY29tPlxuIjsKKwl9IGVsc2UgeworCQlwcmludCAiJF8gPCRfXEBleGFtcGxlLmNvbT5cbiI7CisJfQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N2bi1hdXRob3JzIHNldHVwJyAnCisJY2F0ID5zdm4tYXV0aG9ycyA8PC1cRU9GCisJZmYgPSBGRkZGRkZGIEZGRkZGRkYgPGZGZkBvdGhlci5leGFtcGxlLmNvbT4KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCWZvciBpIGluIGFhIGJiIGNjLXN1YiBkZC1zdWIgZWUtZm9vIGZmCisJZG8KKwkJc3ZuIG1rZGlyIC1tICRpIC0tdXNlcm5hbWUgJGkgIiRzdm5yZXBvIi8kaQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGF1dGhvcnMgd2l0aCBwcm9nIGFuZCBmaWxlJyAnCisJZ2l0IHN2biBjbG9uZSAtLWF1dGhvcnMtcHJvZz0uL3N2bi1hdXRob3JzLXByb2cgXAorCSAgICAtLWF1dGhvcnMtZmlsZT1zdm4tYXV0aG9ycyAiJHN2bnJlcG8iIHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0ZWQgNiByZXZpc2lvbnMgc3VjY2Vzc2Z1bGx5JyAnCisJKAorCQljZCB4ICYmCisJCWdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZ2l0LXN2biA+YWN0dWFsICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDYgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3JzLXByb2cgcmFuIGNvcnJlY3RseScgJworCSgKKwkJY2QgeCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjEgPmFjdHVhbCAmJgorCQlncmVwICJeYXV0aG9yIGVlLWZvbyA8ZWUtZm9vQGV4YW1wbGVcLmNvbT4gIiBhY3R1YWwgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4yID5hY3R1YWwgJiYKKwkJZ3JlcCAiXmF1dGhvciBkZCA8ZGRAc3ViXC5leGFtcGxlXC5jb20+ICIgYWN0dWFsICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MyA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgY2MgPGNjQHN1YlwuZXhhbXBsZVwuY29tPiAiIGFjdHVhbCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjQgPmFjdHVhbCAmJgorCQlncmVwICJeYXV0aG9yIGJiIDxiYkBleGFtcGxlXC5jb20+ICIgYWN0dWFsICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+NSA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgYWEgPGFhQGV4YW1wbGVcLmNvbT4gIiBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtZmlsZSBvdmVycm9kZSBhdXRob3JzLXByb2cnICcKKwkoCisJCWNkIHggJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgRkZGRkZGRiBGRkZGRkZGIDxmRmZAb3RoZXJcLmV4YW1wbGVcLmNvbT4gIiBhY3R1YWwKKwkpCisnCisKK2dpdCAtLWdpdC1kaXI9eC8uZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi5hdXRob3JzZmlsZQorZ2l0IC0tZ2l0LWRpcj14Ly5naXQgY29uZmlnIC0tdW5zZXQgc3ZuLmF1dGhvcnNwcm9nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtcHJvZyBpbXBvcnRlZCB1c2VyIHdpdGhvdXQgZW1haWwnICcKKwlzdm4gbWtkaXIgLW0gZ2cgLS11c2VybmFtZSBnZy1oZXJtaXQgIiRzdm5yZXBvIi9nZyAmJgorCSgKKwkJY2QgeCAmJgorCQlnaXQgc3ZuIGZldGNoIC0tYXV0aG9ycy1wcm9nPS4uL3N2bi1hdXRob3JzLXByb2cgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IFwKKwkJICBncmVwICJeYXV0aG9yIGdnIDw+ICIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydGVkIHdpdGhvdXQgYXV0aG9ycy1wcm9nIGFuZCBhdXRob3JzLWZpbGUnICcKKwlzdm4gbWtkaXIgLW0gaGggLS11c2VybmFtZSBoaCAiJHN2bnJlcG8iL2hoICYmCisJKAorCQl1dWlkPSQoc3ZuIGluZm8gIiRzdm5yZXBvIiB8CisJCQlzZWQgLW4gInMvXlJlcG9zaXRvcnkgVVVJRDogLy9wIikgJiYKKwkJY2QgeCAmJgorCQlnaXQgc3ZuIGZldGNoICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm4gfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBoaCA8aGhAJHV1aWQ+ICIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtcHJvZyBoYW5kbGVkIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB1c2VybmFtZScgJworCXN2biBta2RpciAtbSBiYWQgLS11c2VybmFtZSAieHl6OyB0b3VjaCBldmlsIiAiJHN2bnJlcG8iL2JhZCAmJgorCSgKKwkJY2QgeCAmJgorCQlnaXQgc3ZuIC0tYXV0aG9ycy1wcm9nPS4uL3N2bi1hdXRob3JzLXByb2cgZmV0Y2ggJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biA+YWN0dWFsICYmCisJCWdyZXAgIl5hdXRob3IgeHl6OyB0b3VjaCBldmlsIDx4eXo7IHRvdWNoIGV2aWxAZXhhbXBsZVwuY29tPiAiIGFjdHVhbCAmJgorCQkhIHRlc3QgLWYgZXZpbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTM5LWdpdC1zdm4tbm9uLXV0ZjgtY29tbWl0ZW5jb2Rpbmcuc2ggYi90L3Q5MTM5LWdpdC1zdm4tbm9uLXV0ZjgtY29tbWl0ZW5jb2Rpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjJkODBiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzktZ2l0LXN2bi1ub24tdXRmOC1jb21taXRlbmNvZGluZy5zaApAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlZnVzZXMgdG8gZGNvbW1pdCBub24tVVRGOCBtZXNzYWdlcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgSVNPLTIwMjItSlAgY2FuIHBhc3MgZm9yIHZhbGlkIFVURi04LCBzbyBza2lwcGluZyB0aGF0IGluIHRoaXMgdGVzdAorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggc2V0dXAiICcKKwkJbWtkaXIgJEggJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gIiRIIHRlc3QiICRIICIkc3ZucmVwbyIvJEggJiYKKwkJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iLyRIICRICisJJworZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggY29tbWl0IG9uIGdpdCBzaWRlIiAnCisJKAorCQljZCAkSCAmJgorCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJEggJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKKwkJZWNobyAkSCA+RiAmJgorCQlnaXQgYWRkIEYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8kSC50eHQgJiYKKwkJRT0kKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCisJCXRlc3QgInokRSIgPSAieiRIIgorCSkKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBkY29tbWl0IHRvIHN2biIgJworCSgKKwkJY2QgJEggJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0CisJKQorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2ggYi90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTg1NTkwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDAtZ2l0LXN2bi1yZXNldC5zaApAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEJlbiBKYWNrc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcmVzZXQnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHMgJiYKKwkoCisJCWNkIHMgJiYKKwkJbWtkaXIgdmlzICYmCisJCWVjaG8gYWx3YXlzIHZpc2libGUgPiB2aXMvdmlzLnR4dCAmJgorCQlzdm5fY21kIGFkZCB2aXMgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNyZWF0ZSB2aXNpYmxlIGZpbGVzIiAmJgorCQlta2RpciBoaWQgJiYKKwkJZWNobyBpbml0aWFsbHkgaGlkZGVuID4gaGlkL2hpZC50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgaGlkICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgaW5pdGlhbGx5IGhpZGRlbiBmaWxlcyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvIG1vZCA+PiB2aXMvdmlzLnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IHZpcyIgJiYKKwkJc3ZuX2NtZCB1cAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgU1ZOIHJlcG9zaXRvcnkgd2l0aCBoaWRkZW4gZGlyZWN0b3J5JyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgZyAmJgorCSggY2QgZyAmJiBnaXQgc3ZuIGZldGNoIC0taWdub3JlLXBhdGhzPSJeaGlkIiApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmeSBoaWRkZW4gZmlsZSBpbiBTVk4gcmVwbycgJworCSggY2QgcyAmJgorCSAgZWNobyBtb2QgaGlkZGVuID4+IGhpZC9oaWQudHh0ICYmCisJICBzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IGhpZCIgJiYKKwkgIHN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZhaWxzIG9uIG1vZGlmaWVkIGhpZGRlbiBmaWxlJyAnCisJKCBjZCBnICYmCisJICBnaXQgc3ZuIGZpbmQtcmV2IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID4gLi4vZXhwZWN0ICYmCisJICB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGZldGNoIDI+IC4uL2Vycm9ycyAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdDIgKSAmJgorCWZncmVwICJub3QgZm91bmQgaW4gY29tbWl0IiBlcnJvcnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB1bndpbmRzIGJhY2sgdG8gcjEnICcKKwkoIGNkIGcgJiYKKwkgIGdpdCBzdm4gcmVzZXQgLXIxICYmCisJICBnaXQgc3ZuIGZpbmQtcmV2IHJlZnMvcmVtb3Rlcy9naXQtc3ZuID4gLi4vZXhwZWN0MiApICYmCisJZWNobyAxID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZldGNoIHN1Y2NlZWRzIG5vdCBpZ25vcmluZyBhbnkgZmlsZXMnICcKKwkoIGNkIGcgJiYKKwkgIGdpdCBzdm4gZmV0Y2ggJiYKKwkgIGdpdCBzdm4gcmViYXNlICYmCisJICBmZ3JlcCAibW9kIGhpZGRlbiIgaGlkL2hpZC50eHQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoIGIvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlN2Y3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQxLWdpdC1zdm4tbXVsdGlwbGUtYnJhbmNoZXMuc2gKQEAgLTAsMCArMSwxMjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgTWFyYyBCcmFuY2hhdWQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtdWx0aXBsZSBicmFuY2ggYW5kIHRhZyBwYXRocyBpbiB0aGUgc3ZuIHJlcG8nCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCW1rZGlyCXByb2plY3QgXAorCQlwcm9qZWN0L3RydW5rIFwKKwkJcHJvamVjdC9iX29uZSBcCisJCXByb2plY3QvYl90d28gXAorCQlwcm9qZWN0L3RhZ3NfQSBcCisJCXByb2plY3QvdGFnc19CICYmCisJZWNobyAxID4gcHJvamVjdC90cnVuay9hLmZpbGUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3Byb2plY3QiICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlzdm5fY21kIGNwIC1tICJCcmFuY2ggMSIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgIiRzdm5yZXBvL3Byb2plY3QvYl9vbmUvZmlyc3QiICYmCisJc3ZuX2NtZCBjcCAtbSAiVGFnIDEiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvMS4wIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvL3Byb2plY3QiIHN2bl9wcm9qZWN0ICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQllY2hvIDIgPiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDEiIHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJCcmFuY2ggMiIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkJICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL3NlY29uZCIgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDIiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzIuMCIgJiYKKwkJZWNobyAzID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAyIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDMiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8xIiAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgMyIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvMy4wIiAmJgorCQllY2hvIDQgPiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDMiIHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJCcmFuY2ggNCIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkJICIkc3ZucmVwby9wcm9qZWN0L2JfdHdvLzIiICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA0IiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQS80LjAiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyA1ID4gYl9vbmUvZmlyc3QvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA0IiBiX29uZS9maXJzdC9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDUiICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL2ZpcnN0IiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y1IiAmJgorCQllY2hvIDYgPiBiX29uZS9zZWNvbmQvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA1IiBiX29uZS9zZWNvbmQvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA2IiAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9zZWNvbmQiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0IvdjYiICYmCisJCWVjaG8gNyA+IGJfdHdvLzEvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA2IiBiX3R3by8xL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNyIgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMSIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92NyIgJiYKKwkJZWNobyA4ID4gYl90d28vMi9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiQ2hhbmdlIDciIGJfdHdvLzIvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA4IiAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8yIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y4IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgbXVsdGlwbGUgYnJhbmNoIGFuZCB0YWcgcGF0aHMnICcKKwlnaXQgc3ZuIGNsb25lIC1UIHRydW5rIFwKKwkJICAgICAgLWIgYl9vbmUvKiAtLWJyYW5jaGVzIGJfdHdvLyogXAorCQkgICAgICAtdCB0YWdzX0EvKiAtLXRhZ3MgdGFnc19CIFwKKwkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QiIGdpdF9wcm9qZWN0ICYmCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vZmlyc3QgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NlY29uZCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vMSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vMiAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8xLjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMi4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzMuMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy80LjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvdjUgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvdjYgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvdjcgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvdjgKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ011bHRpcGxlIGJyYW5jaCBvciB0YWcgcGF0aHMgcmVxdWlyZSAtZCcgJworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBicmFuY2ggLW0gIk5vIG5ldyBicmFuY2giIE5vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biB0YWcgLW0gIk5vIG5ldyB0YWciIFRhZ2xlc3MgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL05vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvVGFnbGVzcworCSkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZCBiX29uZS9Ob3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWQgYl90d28vTm9wZSAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIHRhZ3NfQS9UYWdsZXNzICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWQgdGFnc19CL1RhZ2xlc3MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBuZXcgYnJhbmNoZXMgYW5kIHRhZ3MnICcKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gYnJhbmNoIC1tICJOZXcgYnJhbmNoIDEiIC1kIGJfb25lIE5ldzEgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIGJfb25lL05ldzEvYS5maWxlICkgJiYKKworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biBicmFuY2ggLW0gIk5ldyBicmFuY2ggMiIgLWQgYl90d28gTmV3MiApICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmIHRlc3QgLWUgYl90d28vTmV3Mi9hLmZpbGUgKSAmJgorCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIGJyYW5jaCAtdCAtbSAiTmV3IHRhZyAxIiAtZCB0YWdzX0EgVGFnMSApICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmIHRlc3QgLWUgdGFnc19BL1RhZzEvYS5maWxlICkgJiYKKworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biB0YWcgLW0gIk5ldyB0YWcgMiIgLWQgdGFnc19CIFRhZzIgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIHRhZ3NfQi9UYWcyL2EuZmlsZSApCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0Mi1naXQtc3ZuLXNoYWxsb3ctY2xvbmUuc2ggYi90L3Q5MTQyLWdpdC1zdm4tc2hhbGxvdy1jbG9uZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzA3MzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0Mi1naXQtc3ZuLXNoYWxsb3ctY2xvbmUuc2gKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBzaGFsbG93IGNsb25lJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSBzdGFuZGFyZCBsYXlvdXQiIFwKKwkgICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcyAiJHN2bnJlcG8iL3RhZ3MgJiYKKwlzdm5fY21kIGNwIC1tICJicmFuY2ggb2ZmIHRydW5rIiBcCisJICAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi9icmFuY2hlcy9hICYmCisJKAorCQljZCBhICYmCisJCT4gZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYWRkIGZvbyIKKwkpICYmCisJbWF5YmVfc3RhcnRfaHR0cGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHJ1bmsgd2l0aCAiLXIgSEVBRCInICcKKwlnaXQgc3ZuIGNsb25lIC1yIEhFQUQgIiRzdm5yZXBvL3RydW5rIiBnICYmCisJKCBjZCBnICYmIGdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyAtLXZlcmlmeSBIRUFEICkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQzLWdpdC1zdm4tZ2Muc2ggYi90L3Q5MTQzLWdpdC1zdm4tZ2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDU5NGUxYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDMtZ2l0LXN2bi1nYy5zaApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFJvYmVydCBBbGxhbiBaZWgKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBnYyBiYXNpYyB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpcmVjdG9yaWVzIGFuZCB0ZXN0IHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwlta2RpciB0bXAgJiYKKwllY2hvICJTYW1wbGUgdGV4dCBmb3IgU3VidmVyc2lvbiByZXBvc2l0b3J5LiIgPiBpbXBvcnQvdGVzdC50eHQgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiBpbXBvcnQgIiRzdm5yZXBvIiA+IC9kZXYvbnVsbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd29ya2luZyBjb3B5IGZyb20gc3ZuJyBcCisJJ3N2bl9jbWQgY28gIiRzdm5yZXBvIiB0ZXN0X3djJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgc29tZSBwcm9wZXJ0aWVzIHRvIGNyZWF0ZSBhbiB1bmhhbmRsZWQubG9nIGZpbGUnICcKKwkoCisJCWNkIHRlc3Rfd2MgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IGZvbyBiYXIgdGVzdC50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInByb3BlcnR5IHNldCIKKwkpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCByZXBvJyAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0ZldGNoIHJlcG8nICdnaXQgc3ZuIGZldGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGJhY2t1cCBjb3B5IG9mIHVuaGFuZGxlZC5sb2cnICcKKwkgY3AgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vdW5oYW5kbGVkLmxvZyB0bXAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBsZWZ0b3ZlciBpbmRleCcgJz4gLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vaW5kZXgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gZ2MgcnVucycgJ2dpdCBzdm4gZ2MnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gaW5kZXggcmVtb3ZlZCcgJyEgdGVzdCAtZiAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi9pbmRleCcKKworaWYgdGVzdCAtciAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi91bmhhbmRsZWQubG9nLmd6Cit0aGVuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBwcm9kdWNlcyBhIHZhbGlkIGd6aXAgZmlsZScgJworCQkgZ3VuemlwIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cuZ3oKKwkJJworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBkb2VzIG5vdCBjaGFuZ2UgdW5oYW5kbGVkLmxvZyBmaWxlcycgJworCSB0ZXN0X2NtcCAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi91bmhhbmRsZWQubG9nIHRtcC91bmhhbmRsZWQubG9nCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDQtZ2l0LXN2bi1vbGQtcmV2X21hcC5zaCBiL3QvdDkxNDQtZ2l0LXN2bi1vbGQtcmV2X21hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NjAwYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0NC1naXQtc3ZuLW9sZC1yZXZfbWFwLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gb2xkIHJldl9tYXAgcHJlc2VydmQnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5IHdpdGggb2xkIGxheW91dCcgJworCW1rZGlyIGkgJiYKKwkoY2QgaSAmJiA+IGEpICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0tIGkgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCXRlc3QgLWQgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vICYmCisJISB0ZXN0IC1lIC5naXQvc3ZuL2dpdC1zdm4vICYmCisJbXYgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4gLmdpdC9zdm4vICYmCisJcm0gLXIgLmdpdC9zdm4vcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbGQgbGF5b3V0IGNvbnRpbnVlcyB0byB3b3JrJyAnCisJc3ZuX2NtZCBpbXBvcnQgLW0tIGkgIiRzdm5yZXBvL2IiICYmCisJZ2l0IHN2biByZWJhc2UgJiYKKwllY2hvIGEgPj4gYi9hICYmCisJZ2l0IGFkZCBiL2EgJiYKKwlnaXQgY29tbWl0IC1tLSAtYSAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCSEgdGVzdCAtZCAuZ2l0L3N2bi9yZWZzLyAmJgorCXRlc3QgLWUgLmdpdC9zdm4vZ2l0LXN2bi8KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQ1LWdpdC1zdm4tbWFzdGVyLWJyYW5jaC5zaCBiL3QvdDkxNDUtZ2l0LXN2bi1tYXN0ZXItYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiYmYzNDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQ1LWdpdC1zdm4tbWFzdGVyLWJyYW5jaC5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBpbml0aWFsIG1hc3RlciBicmFuY2ggaXMgInRydW5rIiBpZiBwb3NzaWJsZScKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwlta2RpciBpICYmCisJPiBpL2EgJiYKKwlzdm5fY21kIGltcG9ydCAtbSB0cnVuayBpICIkc3ZucmVwby90cnVuayIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSBiL2EgaSAiJHN2bnJlcG8vYnJhbmNoZXMvYSIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSBiL2IgaSAiJHN2bnJlcG8vYnJhbmNoZXMvYiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBjbG9uZSAtLXN0ZGxheW91dCBzZXRzIHVwIHRydW5rIGFzIG1hc3RlcicgJworCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiBnICYmCisJKAorCQljZCBnICYmCisJCXRlc3QgeCQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rXjApID0gXAorCQkgICAgIHgkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXJeMCkKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0Ni1naXQtc3ZuLWVtcHR5LWRpcnMuc2ggYi90L3Q5MTQ2LWdpdC1zdm4tZW1wdHktZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZjkxYzBkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0Ni1naXQtc3ZuLWVtcHR5LWRpcnMuc2gKQEAgLTAsMCArMSwxNTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gY3JlYXRlcyBlbXB0eSBkaXJlY3RvcmllcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlmb3IgaSBpbiBhIGIgYyBkIGQvZSBkL2UvZiAid2VpcmQgZmlsZSBuYW1lIgorCWRvCisJCXN2bl9jbWQgbWtkaXIgLW0gIm1rZGlyICRpIiAiJHN2bnJlcG8iLyIkaSIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lJyAnZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIGNsb25lZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgZGlyZWN0b3JpZXMgZXhpc3QnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlmb3IgaSBpbiBhIGIgYyBkIGQvZSBkL2UvZiAid2VpcmQgZmlsZSBuYW1lIgorCQlkbworCQkJaWYgISB0ZXN0IC1kICIkaSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGkgZG9lcyBub3QgZXhpc3QiICYmCisJCQkJZXhpdCAxCisJCQlmaQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvcHRpb24gYXV0b21rZGlycyBzZXQgdG8gZmFsc2UnICcKKwkoCisJCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIGNsb25lZC1uby1ta2RpcnMgJiYKKwkJY2QgY2xvbmVkLW5vLW1rZGlycyAmJgorCQlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmF1dG9ta2RpcnMgZmFsc2UgJiYKKwkJZ2l0IHN2biBmZXRjaCAmJgorCQlmb3IgaSBpbiBhIGIgYyBkIGQvZSBkL2UvZiAid2VpcmQgZmlsZSBuYW1lIgorCQlkbworCQkJaWYgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGV4aXN0cyIgJiYKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vcmUgZW1wdGluZXNzJyAnCisJc3ZuX2NtZCBta2RpciAtbSAiYmFuZyBiYW5nIiAgIiRzdm5yZXBvIi8iISAhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIHJlYmFzZSBjcmVhdGVzIGVtcHR5IGRpcmVjdG9yeScgJworCSggY2QgY2xvbmVkICYmIGdpdCBzdm4gcmViYXNlICkgJiYKKwl0ZXN0IC1kIGNsb25lZC8iISAhIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIG1rZGlycyByZWNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlybSAtciAqICYmCisJCWdpdCBzdm4gbWtkaXJzICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiICIhICEiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIgJiYKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gbWtkaXJzIC1yIHdvcmtzJyAnCisJKAorCQljZCBjbG9uZWQgJiYKKwkJcm0gLXIgKiAmJgorCQlnaXQgc3ZuIG1rZGlycyAtcjcgJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IiAmJgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZSAmJgorCisJCWlmIHRlc3QgLWQgIiEgISIKKwkJdGhlbgorCQkJZWNobyA+JjIgIiRpIHNob3VsZCBub3QgZXhpc3QiICYmCisJCQlleGl0IDEKKwkJZmkgJiYKKworCQlnaXQgc3ZuIG1rZGlycyAtcjggJiYKKwkJaWYgISB0ZXN0IC1kICIhICEiCisJCXRoZW4KKwkJCWVjaG8gPiYyICIkaSBub3QgZXhpc3QiICYmCisJCQlleGl0IDEKKwkJZmkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgdHJ1bmsnICcKKwlmb3IgaSBpbiB0cnVuayB0cnVuay9hIHRydW5rLyJ3ZWlyZCBmaWxlIG5hbWUiCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAibWtkaXIgJGkiICIkc3ZucmVwbyIvIiRpIgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHJ1bmsnICdnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIgdHJ1bmsnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yaWVzIGluIHRydW5rIGV4aXN0JyAnCisJKAorCQljZCB0cnVuayAmJgorCQlmb3IgaSBpbiBhICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIgJiYKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBhIHRvcC1sZXZlbCBkaXJlY3RvcnkgZnJvbSBzdm4nICcKKwlzdm5fY21kIHJtIC1tICJyZW1vdmUgZCIgIiRzdm5yZXBvIi9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZWQgdG9wLWxldmVsIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCcgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiByZW1vdmVkICYmCisJdGVzdCAhIC1lIHJlbW92ZWQvZAorCisnCit1bmhhbmRsZWQ9LmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vdW5oYW5kbGVkLmxvZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYy1lZCBmaWxlcyB3b3JrJyAnCisJKAorCQljZCByZW1vdmVkICYmCisJCWdpdCBzdm4gZ2MgJiYKKwkJOiBDb21wcmVzczo6WmxpYiBtYXkgbm90IGJlIGF2YWlsYWJsZSAmJgorCQlpZiB0ZXN0IC1mICIkdW5oYW5kbGVkIi5negorCQl0aGVuCisJCQlzdm5fY21kIG1rZGlyIC1tIGd6ICIkc3ZucmVwbyIvZ3ogJiYKKwkJCWdpdCByZXNldCAtLWhhcmQgJChnaXQgcmV2LWxpc3QgSEVBRCB8IHRhaWwgLTEpICYmCisJCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQkJdGVzdCAtZiAiJHVuaGFuZGxlZCIuZ3ogJiYKKwkJCXRlc3QgLWYgIiR1bmhhbmRsZWQiICYmCisJCQlmb3IgaSBpbiBhIGIgYyAid2VpcmQgZmlsZSBuYW1lIiBneiAiISAhIgorCQkJZG8KKwkJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJCXRoZW4KKwkJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IiAmJgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQ3LWdpdC1zdm4taW5jbHVkZS1wYXRocy5zaCBiL3QvdDkxNDctZ2l0LXN2bi1pbmNsdWRlLXBhdGhzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyOTJiZjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQ3LWdpdC1zdm4taW5jbHVkZS1wYXRocy5zaApAQCAtMCwwICsxLDE0OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMyBQYXVsIFdhbG1zbGV5IC0gYmFzZWQgb24gdDkxMzQgYnkgVml0YWx5IFNodWtlbGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBwcm9wZXJ0eSB0ZXN0cycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgcyAmJgorCSgKKwkJY2QgcyAmJgorCQlta2RpciBxcXEgd3d3IHh4eCAmJgorCQllY2hvIHRlc3RfcXFxID4gcXFxL3Rlc3RfcXFxLnR4dCAmJgorCQllY2hvIHRlc3Rfd3d3ID4gd3d3L3Rlc3Rfd3d3LnR4dCAmJgorCQllY2hvIHRlc3RfeHh4ID4geHh4L3Rlc3RfeHh4LnR4dCAmJgorCQlzdm5fY21kIGFkZCBxcXEgJiYKKwkJc3ZuX2NtZCBhZGQgd3d3ICYmCisJCXN2bl9jbWQgYWRkIHh4eCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIHNvbWUgZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBoaSA+PiB3d3cvdGVzdF93d3cudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtb2RpZnkgd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBmaWx0ZXIgdG8gaW5jbHVkZSBxcXEgZGlyZWN0b3J5JyAnCisJZ2l0IHN2biBjbG9uZSAtLWluY2x1ZGUtcGF0aHM9InFxcSIgIiRzdm5yZXBvIiBnICYmCisJZWNobyB0ZXN0X3FxcSA+IGV4cGVjdCAmJgorCWZvciBpIGluIGcvKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQrZmV0Y2ggYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBpbmNsdWRlZCBxcXEgZGlyZWN0b3J5JyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgYyAmJgorCSggY2QgYyAmJiBnaXQgc3ZuIGZldGNoIC0taW5jbHVkZS1wYXRocz0icXFxIiApICYmCisJcm0gZXhwZWN0MiAmJgorCWVjaG8gdGVzdF9xcXEgPiBleHBlY3QgJiYKKwlmb3IgaSBpbiBjLyovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGluY2x1ZGUtcGF0aHMgY29uZmlnIHNhdmVkIGJ5IGNsb25lJyAnCisJKAorCSAgICBjZCBnICYmCisJICAgIGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uaW5jbHVkZS1wYXRocyB8IGZncmVwICJxcXEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3cnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyBiID4+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAoY29uZmlnIGluY2x1ZGUpJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIChvcHRpb24gaW5jbHVkZSknICcKKwkoCisJCWNkIGMgJiYKKwkJZ2l0IHN2biByZWJhc2UgLS1pbmNsdWRlLXBhdGhzPSJxcXEiICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgaWdub3JlZCB3d3cnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyB6YXEgPj4gd3d3L3Rlc3Rfd3d3LnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiB3d3cvdGVzdF93d3cudHh0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIChjb25maWcgaW5jbHVkZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKG9wdGlvbiBpbmNsdWRlKScgJworCSgKKwkJY2QgYyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAtLWluY2x1ZGUtcGF0aHM9InFxcSIgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaW5jbHVkZWQgcXFxJyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gY3ZmID4+IHd3dy90ZXN0X3d3dy50eHQgJiYKKwkJZWNobyB5Z2cgPj4gcXFxL3Rlc3RfcXFxLnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgaWdub3JlZCB3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyBhZ2FpbiAoY29uZmlnIGluY2x1ZGUpJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbnlnZ1xuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4gKG9wdGlvbiBpbmNsdWRlKScgJworCSgKKwkJY2QgYyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAtLWluY2x1ZGUtcGF0aHM9InFxcSIgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxueWdnXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDgtZ2l0LXN2bi1wcm9wc2V0LnNoIGIvdC90OTE0OC1naXQtc3ZuLXByb3BzZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTAyNjM5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDgtZ2l0LXN2bi1wcm9wc2V0LnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQWxmcmVkIFBlcmxzdGVpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BzZXQgdGVzdHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitmb29fc3ViZGlyMj0ic3ViZGlyL3N1YmRpcjIvZm9vX3N1YmRpcjIiCisKK3NldCAtZQorbWtkaXIgaW1wb3J0ICYmCisoc2V0IC1lIDsgY2QgaW1wb3J0CisJbWtkaXIgc3ViZGlyCisJbWtkaXIgc3ViZGlyL3N1YmRpcjIKKwl0b3VjaCBmb28gCQkjIGZvciAnYWRkIHByb3BzIHRvcCBsZXZlbCcKKwl0b3VjaCBzdWJkaXIvZm9vX3N1YmRpciAjIGZvciAnYWRkIHByb3BzIHJlbGF0aXZlJworCXRvdWNoICIkZm9vX3N1YmRpcjIiCSMgZm9yICdhZGQgcHJvcHMgc3ViZGlyJworCXN2bl9jbWQgaW1wb3J0IC1tICdpbXBvcnQgZm9yIGdpdCBzdm4nIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCispCitybSAtcmYgaW1wb3J0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0IHN2bicgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCByZXZpc2lvbnMgZnJvbSBzdm4nICcKKwlnaXQgc3ZuIGZldGNoCisJJworCitzZXRfcHJvcHMgKCkgeworCXN1YmRpcj0iJDEiCisJZmlsZT0iJDIiCisJc2hpZnQ7c2hpZnQ7CisJKGNkICIkc3ViZGlyIiAmJgorCQl3aGlsZSBbICQjIC1ndCAwIF0gOyBkbworCQkJZ2l0IHN2biBwcm9wc2V0ICIkMSIgIiQyIiAiJGZpbGUiIHx8IGV4aXQgMQorCQkJc2hpZnQ7c2hpZnQ7CisJCWRvbmUgJiYKKwkJZWNobyBoZWxsbyA+PiAiJGZpbGUiICYmCisJCWdpdCBjb21taXQgLW0gInRlc3RpbmcgcHJvcHNldCIgIiRmaWxlIikKK30KKworY29uZmlybV9wcm9wcyAoKSB7CisJc3ViZGlyPSIkMSIKKwlmaWxlPSIkMiIKKwlzaGlmdDtzaGlmdDsKKwkoc2V0IC1lIDsgY2QgInN2bl9wcm9qZWN0LyRzdWJkaXIiICYmCisJCXdoaWxlIFsgJCMgLWd0IDAgXSA7IGRvCisJCQl0ZXN0ICIkKHN2bl9jbWQgcHJvcGdldCAiJDEiICIkZmlsZSIpIiA9ICIkMiIgfHwgZXhpdCAxCisJCQlzaGlmdDtzaGlmdDsKKwkJZG9uZSkKK30KKworCisjVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaGFzIGEgcmVzdHJpY3Rpb246Cisjc3ZuIHByb3BzZXQgd2lsbCBiZSB0YWtlbiBhcyBhIGRlbHRhIGZvciBzdm4gZGNvbW1pdCBvbmx5CisjaWYgdGhlIGZpbGUgY29udGVudCBpcyBhbHNvIG1vZGlmaWVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcHJvcHMgdG9wIGxldmVsJyAnCisJc2V0X3Byb3BzICIuIiAiZm9vIiAic3ZuOmtleXdvcmRzIiAiRnJlZUJTRD0lSCIgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgc3ZuX3Byb2plY3QgJiYKKwljb25maXJtX3Byb3BzICIuIiAiZm9vIiAic3ZuOmtleXdvcmRzIiAiRnJlZUJTRD0lSCIgJiYKKwlybSAtcmYgc3ZuX3Byb2plY3QKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtdWx0aXBsZSBwcm9wcycgJworCXNldF9wcm9wcyAiLiIgImZvbyIgXAorCQkic3ZuOmtleXdvcmRzIiAiRnJlZUJTRD0lSCIgZmJzZDpub2tleXdvcmRzIHllcyAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm5fcHJvamVjdCAmJgorCWNvbmZpcm1fcHJvcHMgIi4iICJmb28iIFwKKwkJInN2bjprZXl3b3JkcyIgIkZyZWVCU0Q9JUgiIGZic2Q6bm9rZXl3b3JkcyB5ZXMgJiYKKwlybSAtcmYgc3ZuX3Byb2plY3QKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwcm9wcyBzdWJkaXInICcKKwlzZXRfcHJvcHMgIi4iICIkZm9vX3N1YmRpcjIiIHN2bjprZXl3b3JkcyAiRnJlZUJTRD0lSCIgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgc3ZuX3Byb2plY3QgJiYKKwljb25maXJtX3Byb3BzICIuIiAiJGZvb19zdWJkaXIyIiAic3ZuOmtleXdvcmRzIiAiRnJlZUJTRD0lSCIgJiYKKwlybSAtcmYgc3ZuX3Byb2plY3QKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwcm9wcyByZWxhdGl2ZScgJworCXNldF9wcm9wcyAic3ViZGlyL3N1YmRpcjIiICIuLi9mb29fc3ViZGlyIiBcCisJCXN2bjprZXl3b3JkcyAiRnJlZUJTRD0lSCIgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgc3ZuX3Byb2plY3QgJiYKKwljb25maXJtX3Byb3BzICJzdWJkaXIvc3ViZGlyMiIgIi4uL2Zvb19zdWJkaXIiIFwKKwkJc3ZuOmtleXdvcmRzICJGcmVlQlNEPSVIIiAmJgorCXJtIC1yZiBzdm5fcHJvamVjdAorCScKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1MC1zdmstbWVyZ2V0aWNrZXRzLnNoIGIvdC90OTE1MC1zdmstbWVyZ2V0aWNrZXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiYjY3NmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUwLXN2ay1tZXJnZXRpY2tldHMuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTYW0gVmlsYWluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gc3ZrIG1lcmdlIHRpY2tldHMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2ayBkZXBvdCcgIgorCXN2bmFkbWluIGxvYWQgLXEgJyRyYXdzdm5yZXBvJyBcCisJICA8ICckVEVTVF9ESVJFQ1RPUlkvdDkxNTAvc3ZrLW1lcmdlLmR1bXAnICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIHN2a21lcmdlIFwKKwkgIC0tcmV3cml0ZS1yb290PWh0dHA6Ly9zdm4uZXhhbXBsZS5vcmcgXAorCSAgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgJyRzdm5yZXBvJyAmJgorCWdpdCBzdm4gZmV0Y2ggLS1hbGwKKwkiCisKK3V1aWQ9YjQ4Mjg5YjItOWMwOC00ZDcyLWFmMzctMDM1OGE0MGI5YzE1CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N2ayBtZXJnZXMgd2VyZSByZXByZXNlbnRlZCBjb21pbmcgaW4nICIKKwlbICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBwYXJlbnQgfCB3YyAtbCkgLWVxIDIgXQorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUwL21ha2Utc3ZrLWR1bXAgYi90L3Q5MTUwL21ha2Utc3ZrLWR1bXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjI0MmYxNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTAvbWFrZS1zdmstZHVtcApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKyMKKyMgdGhpcyBzY3JpcHQgc2V0cyB1cCBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBmb3IgTWFrZWZpbGUgaW4gdGhlCisjIGZpcnN0IGV2ZXIgZ2l0IG1lcmdlLCBhcyBpZiBpdCB3ZXJlIGRvbmUgd2l0aCBzdmsuCisjCisKK3NldCAtZQorCitzdmsgZGVwb3RtYXAgZm9vIH4vLnN2ay9mb28KK3N2ayBjbyAvZm9vLyBmb28KK2NkIGZvbworbWtkaXIgdHJ1bmsKK21rZGlyIGJyYW5jaGVzCitzdmsgYWRkIHRydW5rIGJyYW5jaGVzCitzdmsgY29tbWl0IC1tICJTZXR1cCB0cnVuayBhbmQgYnJhbmNoZXMiCitjZCB0cnVuaworCitnaXQgY2F0LWZpbGUgYmxvYiA2NjgzNDYzZTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdmsgYWRkIE1ha2VmaWxlIAorCitzdmsgY29tbWl0IC1tICJhbmNlc3RvciIKK2NkIC4uCitzdmsgY3AgdHJ1bmsgYnJhbmNoZXMvbGVmdAorCitzdmsgY29tbWl0IC1tICJtYWtlIGxlZnQgYnJhbmNoIgorY2QgYnJhbmNoZXMvbGVmdC8KKworZ2l0IGNhdC1maWxlIGJsb2IgNTg3M2I2N2U6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZrIGNvbW1pdCAtbSAibGVmdCB1cGRhdGUgMSIKKworY2QgLi4vLi4vdHJ1bmsKK2dpdCBjYXQtZmlsZSBibG9iIDc1MTE4YjEzOk1ha2VmaWxlID4gTWFrZWZpbGUKK3N2ayBjb21taXQgLW0gInRydW5rIHVwZGF0ZSIKKworY2QgLi4vYnJhbmNoZXMvbGVmdAorZ2l0IGNhdC1maWxlIGJsb2IgYjUwMzlkYjY6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZrIGNvbW1pdCAtbSAibGVmdCB1cGRhdGUgMiIKKworY2QgLi4vLi4vdHJ1bmsKK3N2ayBzbSAvZm9vL2JyYW5jaGVzL2xlZnQKKyMgaW4gdGhlb3J5IHdlIGNvdWxkIGRlbGV0ZSB0aGUgImxlZnQiIGJyYW5jaCBoZXJlLCBidXQgaXQncyBub3QKKyMgcmVxdWlyZWQgc28gZG9uJ3QgZG8gaXQsIGluIGNhc2UgcGVvcGxlIHN0YXJ0IGdldHRpbmcgaWRlYXMgOykKK3N2ayBjb21taXQgLW0gIm1lcmdlIGJyYW5jaCAnbGVmdCcgaW50byAndHJ1bmsnIgorCitnaXQgY2F0LWZpbGUgYmxvYiBiNTFhZDQzMTpNYWtlZmlsZSA+IE1ha2VmaWxlCisKK3N2ayBkaWZmIE1ha2VmaWxlICYmIGVjaG8gIkhleSEgIE5vIGRpZmZlcmVuY2VzLCBtYWdpYyIKKworY2QgLi4vLi4KKworc3ZuYWRtaW4gZHVtcCB+Ly5zdmsvZm9vID4gc3ZrLW1lcmdlLmR1bXAKKworc3ZrIGNvIC1kIGZvbworcm0gLXJmIGZvbworc3ZrIGRlcG90bWFwIC1kIC9mb28vCitybSAtcmYgfi8uc3ZrL2ZvbworCmRpZmYgLS1naXQgYS90L3Q5MTUwL3N2ay1tZXJnZS5kdW1wIGIvdC90OTE1MC9zdmstbWVyZ2UuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmY3MGRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MC9zdmstbWVyZ2UuZHVtcApAQCAtMCwwICsxLDYxNiBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogYjQ4Mjg5YjItOWMwOC00ZDcyLWFmMzctMDM1OGE0MGI5YzE1CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjAzLjcyMjk2OVoKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjQKK1NldHVwIHRydW5rIGFuZCBicmFuY2hlcworSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA0LjkyNzUzM1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwNgorQ29udGVudC1sZW5ndGg6IDEwNgorCitLIDcKK3N2bjpsb2cKK1YgOAorYW5jZXN0b3IKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorc2FtdgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0xMC0xOVQyMzo0NDowNS44MzU1ODVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMjQwMQorVGV4dC1jb250ZW50LW1kNTogYmZkOGZmNzc4ZDE0OTJkYzY3NTg1NjczNzMxNzZhODkKK0NvbnRlbnQtbGVuZ3RoOiAyNDExCisKK1BST1BTLUVORAorIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTE1CitDb250ZW50LWxlbmd0aDogMTE1CisKK0sgNworc3ZuOmxvZworViAxNgorbWFrZSBsZWZ0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA2LjcxOTczN1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEyCitDb250ZW50LWxlbmd0aDogMTEyCisKK0sgNworc3ZuOmxvZworViAxMworbGVmdCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA3LjE2NzY2NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjQ2NQorVGV4dC1jb250ZW50LW1kNTogMTZlMzhkOTc1M2IwNjE3MzE2NTA1NjFjZTAxYjExOTUKK0NvbnRlbnQtbGVuZ3RoOiAyNDY1CisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDEyCit0cnVuayB1cGRhdGUKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorc2FtdgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0xMC0xOVQyMzo0NDowNy42MTk2MzNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTIxCitUZXh0LWNvbnRlbnQtbWQ1OiAwNjY4NDE4YTYyMTMzM2Y0YWE4YjY2MzJjZDYzZTJhMAorQ29udGVudC1sZW5ndGg6IDI1MjEKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEyCitDb250ZW50LWxlbmd0aDogMTEyCisKK0sgNworc3ZuOmxvZworViAxMworbGVmdCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA4LjA2NzU1NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjU5MworVGV4dC1jb250ZW50LW1kNTogNWNjZmY2ODlmYjI5MGUwMGI4NWZlMThlZTUwYzU0YmEKK0NvbnRlbnQtbGVuZ3RoOiAyNTkzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMQorQ29udGVudC1sZW5ndGg6IDEzMQorCitLIDcKK3N2bjpsb2cKK1YgMzIKK21lcmdlIGJyYW5jaCAnbGVmdCcgaW50byAndHJ1bmsnCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDguOTcxODAxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA4MworQ29udGVudC1sZW5ndGg6IDgzCisKK0sgOQorc3ZrOm1lcmdlCitWIDUzCitiNDgyODliMi05YzA4LTRkNzItYWYzNy0wMzU4YTQwYjljMTU6L2JyYW5jaGVzL2xlZnQ6NgorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNzEzCitUZXh0LWNvbnRlbnQtbWQ1OiAwYWZiZTM0ZjI0NGNkNjYyYjFmOTdkNzA4YzY4N2Y5MAorQ29udGVudC1sZW5ndGg6IDI3MTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKZGlmZiAtLWdpdCBhL3QvdDkxNTEtc3ZuLW1lcmdlaW5mby5zaCBiL3QvdDkxNTEtc3ZuLW1lcmdlaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjZjMDZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS1zdm4tbWVyZ2VpbmZvLnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgU2FtIFZpbGFpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIHN2biBtZXJnZWluZm8gcHJvcGVydGllcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXAnICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgXAorCSAgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTUxL3N2bi1tZXJnZWluZm8uZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgc3ZubWVyZ2UgXAorCSAgLS1yZXdyaXRlLXJvb3Q9aHR0cDovL3N2bi5leGFtcGxlLm9yZyBcCisJICAtVCB0cnVuayAtYiBicmFuY2hlcyAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIHN2biBtZXJnZXMgYmVjYW1lIGdpdCBtZXJnZSBjb21taXRzJyAnCisJdW5tYXJrZWQ9JChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0tYWxsIC0tZ3JlcD1NZXJnZSB8CisJCWdyZXAgLXYgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikgJiYKKwlbIC16ICIkdW5tYXJrZWQiIF0KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrcyBkaWQgbm90IGJlY29tZSBnaXQgbWVyZ2UgY29tbWl0cycgJworCWJhZF9jaGVycmllcz0kKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1hbGwgLS1ncmVwPUNoZXJyeSB8CisJCWdyZXAgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikgJiYKKwlbIC16ICIkYmFkX2NoZXJyaWVzIiBdCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdm4gbm9uLW1lcmdlIG1lcmdlIGNvbW1pdHMgZGlkIG5vdCBiZWNvbWUgZ2l0IG1lcmdlIGNvbW1pdHMnICcKKwliYWRfbm9uX21lcmdlcz0kKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1hbGwgLS1ncmVwPW5vbi1tZXJnZSB8CisJCWdyZXAgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikgJiYKKwlbIC16ICIkYmFkX25vbl9tZXJnZXMiIF0KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtYWRlIHRvIG1lcmdlZCBicmFuY2ggaXMgcmVhY2hhYmxlIGZyb20gdGhlIG1lcmdlJyAnCisJYmVmb3JlX2NvbW1pdD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9InRydW5rIGNvbW1pdCBiZWZvcmUgbWVyZ2luZyB0cnVuayB0byBiMiIpICYmCisJbWVyZ2VfY29tbWl0PSQoZ2l0IHJldi1saXN0IC0tYWxsIC0tZ3JlcD0iTWVyZ2UgdHJ1bmsgdG8gYjIiKSAmJgorCW5vdF9yZWFjaGFibGU9JChnaXQgcmV2LWxpc3QgLTEgJGJlZm9yZV9jb21taXQgLS1ub3QgJG1lcmdlX2NvbW1pdCkgJiYKKwlbIC16ICIkbm90X3JlYWNoYWJsZSIgXQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyB0d28gYnJhbmNoZXMgaW4gb25lIGNvbW1pdCBpcyBkZXRlY3RlZCBjb3JyZWN0bHknICcKKwlmMV9jb21taXQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJtYWtlIGYxIGJyYW5jaCBmcm9tIHRydW5rIikgJiYKKwlmMl9jb21taXQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJtYWtlIGYyIGJyYW5jaCBmcm9tIHRydW5rIikgJiYKKwltZXJnZV9jb21taXQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJNZXJnZSBmMSBhbmQgZjIgdG8gdHJ1bmsiKSAmJgorCW5vdF9yZWFjaGFibGU9JChnaXQgcmV2LWxpc3QgLTEgJGYxX2NvbW1pdCAkZjJfY29tbWl0IC0tbm90ICRtZXJnZV9jb21taXQpICYmCisJWyAteiAiJG5vdF9yZWFjaGFibGUiIF0KKwknCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2V2ZXJ5dGhpbmcgZ290IG1lcmdlZCBpbiB0aGUgZW5kJyAnCisJdW5tZXJnZWQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ub3QgbWFzdGVyKSAmJgorCVsgLXogIiR1bm1lcmdlZCIgXQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUxLy5naXRpZ25vcmUgYi90L3Q5MTUxLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3YzM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTEvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2ZvbworZm9vLnN2bgpkaWZmIC0tZ2l0IGEvdC90OTE1MS9tYWtlLXN2bm1lcmdlLWR1bXAgYi90L3Q5MTUxL21ha2Utc3ZubWVyZ2UtZHVtcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMWUxMzhjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS9tYWtlLXN2bm1lcmdlLWR1bXAKQEAgLTAsMCArMSwzMDUgQEAKKyMhL2Jpbi9zaAorIworIyB0aGlzIHNjcmlwdCBzZXRzIHVwIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGZvciBNYWtlZmlsZSBpbiB0aGUKKyMgZmlyc3QgZXZlciBnaXQgbWVyZ2UsIGFzIGlmIGl0IHdlcmUgZG9uZSB3aXRoIHN2bm1lcmdlIChTVk4gMS41KykKKyMKKworcm0gLXJmIGZvby5zdm4gZm9vCitzZXQgLWUKKworbWtkaXIgZm9vLnN2bgorc3ZuYWRtaW4gY3JlYXRlIGZvby5zdm4KK3N2biBjbyBmaWxlOi8vYHB3ZGAvZm9vLnN2biBmb28KKworY29tbWl0KCkgeworICAgIGk9JCgoICQxICsgMSApKQorICAgIHNoaWZ0OworICAgIHN2biBjb21taXQgLW0gIihyJGkpICQqIiA+L2Rldi9udWxsIHx8IGV4aXQgMQorICAgIGVjaG8gJGkKK30KKworc2F5KCkgeworICAgIGVjaG8gIhtbMW0gKiAkKhtbMG0iCit9CisKK2k9MAorY2QgZm9vCitta2RpciB0cnVuaworbWtkaXIgYnJhbmNoZXMKK21rZGlyIHRhZ3MKK3N2biBhZGQgdHJ1bmsgYnJhbmNoZXMgdGFncworaT0kKGNvbW1pdCAkaSAiU2V0dXAgdHJ1bmssIGJyYW5jaGVzLCBhbmQgdGFncyIpCisKK2dpdCBjYXQtZmlsZSBibG9iIDY2ODM0NjNlOk1ha2VmaWxlID4gdHJ1bmsvTWFrZWZpbGUKK3N2biBhZGQgdHJ1bmsvTWFrZWZpbGUgCisKK3NheSAiQ29tbWl0dGluZyBBTkNFU1RPUiIKK2k9JChjb21taXQgJGkgImFuY2VzdG9yIikKK3N2biBjcCB0cnVuayBicmFuY2hlcy9sZWZ0CisKK3NheSAiQ29tbWl0dGluZyBCUkFOQ0ggUE9JTlQiCitpPSQoY29tbWl0ICRpICJtYWtlIGxlZnQgYnJhbmNoIikKK3N2biBjcCB0cnVuayBicmFuY2hlcy9yaWdodAorCitzYXkgIkNvbW1pdHRpbmcgb3RoZXIgQlJBTkNIIFBPSU5UIgoraT0kKGNvbW1pdCAkaSAibWFrZSByaWdodCBicmFuY2giKQorCitzYXkgIkNvbW1pdHRpbmcgTEVGVCBVUERBVEUiCitnaXQgY2F0LWZpbGUgYmxvYiA1ODczYjY3ZTpNYWtlZmlsZSA+IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDEiKQorCitnaXQgY2F0LWZpbGUgYmxvYiA3NTExOGIxMzpNYWtlZmlsZSA+IGJyYW5jaGVzL3JpZ2h0L01ha2VmaWxlCitzYXkgIkNvbW1pdHRpbmcgUklHSFQgVVBEQVRFIgorcHJlX3JpZ2h0X3VwZGF0ZV8xPSRpCitpPSQoY29tbWl0ICRpICJyaWdodCB1cGRhdGUgMSIpCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBMRUZUIgorZ2l0IGNhdC1maWxlIGJsb2IgZmY1ZWJlMzk6TWFrZWZpbGUgPiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSAyIikKK2dpdCBjYXQtZmlsZSBibG9iIGI1MDM5ZGI2Ok1ha2VmaWxlID4gYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAibGVmdCB1cGRhdGUgMyIpCisKK3NheSAiTWFraW5nIGEgTEVGVCBTVUItQlJBTkNIIgorc3ZuIGNwIGJyYW5jaGVzL2xlZnQgYnJhbmNoZXMvbGVmdC1zdWIKK3N1Yl9sZWZ0X21ha2U9JGkKK2k9JChjb21taXQgJGkgIm1ha2UgbGVmdCBzdWItYnJhbmNoIikKKworc2F5ICJNYWtpbmcgYSBjb21taXQgb24gTEVGVCBTVUItQlJBTkNIIgorZWNobyAiY3J1bmNoIiA+IGJyYW5jaGVzL2xlZnQtc3ViL1JFQURNRQorc3ZuIGFkZCBicmFuY2hlcy9sZWZ0LXN1Yi9SRUFETUUKK2k9JChjb21taXQgJGkgImxlZnQgc3ViLWJyYW5jaCB1cGRhdGUgMSIpCisKK3NheSAiTWVyZ2luZyBMRUZUIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9sZWZ0IC0tYWNjZXB0IHBvc3Rwb25lCitnaXQgY2F0LWZpbGUgYmxvYiBiNTAzOWRiNjpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdm4gcmVzb2x2ZWQgTWFrZWZpbGUKK2k9JChjb21taXQgJGkgIk1lcmdlIGxlZnQgdG8gdHJ1bmsgMSIpCitjZCAuLgorCitzYXkgIk1ha2luZyBtb3JlIGNvbW1pdHMgb24gTEVGVCBhbmQgUklHSFQiCitlY2hvICJ0b3VjaGUiID4gYnJhbmNoZXMvbGVmdC96bG9uaworc3ZuIGFkZCBicmFuY2hlcy9sZWZ0L3psb25rCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSA0IikKK2VjaG8gInRod2Fja2UiID4gYnJhbmNoZXMvcmlnaHQvYmFuZworc3ZuIGFkZCBicmFuY2hlcy9yaWdodC9iYW5nCitpPSQoY29tbWl0ICRpICJyaWdodCB1cGRhdGUgMiIpCisKK3NheSAiU3F1YXNoIG1lcmdlIG9mIFJJR0hUIHRpcCAyIGNvbW1pdHMgb250byBUUlVOSyIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLXIkcHJlX3JpZ2h0X3VwZGF0ZV8xOiRpIC4uL2JyYW5jaGVzL3JpZ2h0CitpPSQoY29tbWl0ICRpICJDaGVycnktcGljayByaWdodCAyIGNvbW1pdHMgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJNZXJnaW5nIFJJR0hUIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9yaWdodCAtLWFjY2VwdCBwb3N0cG9uZQorZ2l0IGNhdC1maWxlIGJsb2IgYjUxYWQ0MzE6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZuIHJlc29sdmVkIE1ha2VmaWxlCitpPSQoY29tbWl0ICRpICJNZXJnZSByaWdodCB0byB0cnVuayAxIikKK2NkIC4uCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBSSUdIVCBhbmQgVFJVTksiCitlY2hvICJ3aGFtbSIgPiBicmFuY2hlcy9yaWdodC91cmtraworc3ZuIGFkZCBicmFuY2hlcy9yaWdodC91cmtraworaT0kKGNvbW1pdCAkaSAicmlnaHQgdXBkYXRlIDMiKQorZWNobyAicG93IiA+IHRydW5rL3Zyb25rCitzdm4gYWRkIHRydW5rL3Zyb25rCitpPSQoY29tbWl0ICRpICJ0cnVuayB1cGRhdGUgMSIpCisKK3NheSAiTWVyZ2luZyBSSUdIVCB0byBMRUZUIFNVQi1CUkFOQ0giCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0LXN1Ygorc3ZuIG1lcmdlIC4uL3JpZ2h0IC0tYWNjZXB0IHBvc3Rwb25lCitnaXQgY2F0LWZpbGUgYmxvYiBiNTFhZDQzMTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdm4gcmVzb2x2ZWQgTWFrZWZpbGUKK2k9JChjb21taXQgJGkgIk1lcmdlIHJpZ2h0IHRvIGxlZnQgc3ViLWJyYW5jaCIpCitjZCAuLi8uLgorCitzYXkgIk1ha2luZyBtb3JlIGNvbW1pdHMgb24gTEVGVCBTVUItQlJBTkNIIGFuZCBMRUZUIgorZWNobyAiem93aWUiID4gYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK3N2biBhZGQgYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK3ByZV9zdWJfbGVmdF91cGRhdGVfMj0kaQoraT0kKGNvbW1pdCAkaSAibGVmdCBzdWItYnJhbmNoIHVwZGF0ZSAyIikKK3N1Yl9sZWZ0X3VwZGF0ZV8yPSRpCitlY2hvICJlZWVfeW93IiA+IGJyYW5jaGVzL2xlZnQvZ2x1cnBwCitzdm4gYWRkIGJyYW5jaGVzL2xlZnQvZ2x1cnBwCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSA1IikKKworc2F5ICJDaGVycnkgcGljayBMRUZUIFNVQi1CUkFOQ0ggY29tbWl0IHRvIExFRlQiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0Citzdm4gbWVyZ2UgLXIkcHJlX3N1Yl9sZWZ0X3VwZGF0ZV8yOiRzdWJfbGVmdF91cGRhdGVfMiAuLi9sZWZ0LXN1YgoraT0kKGNvbW1pdCAkaSAiQ2hlcnJ5LXBpY2sgbGVmdCBzdWItYnJhbmNoIGNvbW1pdCB0byBsZWZ0IikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2luZyBMRUZUIFNVQi1CUkFOQ0ggYmFjayB0byBMRUZUIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvbGVmdAorIyBpdCdzIG9ubHkgYSBtZXJnZSBiZWNhdXNlIHRoZSBwcmV2aW91cyBtZXJnZSBjaGVycnktcGlja2VkIHRoZSB0b3AgY29tbWl0Citzdm4gbWVyZ2UgLXIkc3ViX2xlZnRfbWFrZTokc3ViX2xlZnRfdXBkYXRlXzIgLi4vbGVmdC1zdWIgLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIk1lcmdlIGxlZnQgc3ViLWJyYW5jaCB0byBsZWZ0IikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2luZyBFVkVSWVRISU5HIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9sZWZ0IC0tYWNjZXB0IHBvc3Rwb25lCitzdm4gcmVzb2x2ZWQgYmFuZworaT0kKGNvbW1pdCAkaSAiTWVyZ2UgbGVmdCB0byB0cnVuayAyIikKKyMgdGhpcyBtZXJnZSwgc3ZuIGhhcHBpbHkgdXBkYXRlcyB0aGUgbWVyZ2VpbmZvLCBidXQgdGhlcmUgaXMgYWN0dWFsbHkKKyMgbm90aGluZyB0byBtZXJnZS4gIGdpdC1zdm4gd2lsbCBub3QgbWFrZSBhIG1lYW5pbmdsZXNzIG1lcmdlIGNvbW1pdC4KK3N2biBtZXJnZSAuLi9icmFuY2hlcy9yaWdodCAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAibm9uLW1lcmdlIHJpZ2h0IHRvIHRydW5rIDIiKQorY2QgLi4KKworc2F5ICJCcmFuY2hpbmcgYjEgZnJvbSB0cnVuayIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayBicmFuY2hlcy9iMQoraT0kKGNvbW1pdCAkaSAibWFrZSBiMSBicmFuY2ggZnJvbSB0cnVuayIpCisKK3NheSAiQnJhbmNoaW5nIGIyIGZyb20gdHJ1bmsiCitzdm4gdXBkYXRlCitzdm4gY3AgdHJ1bmsgYnJhbmNoZXMvYjIKK2k9JChjb21taXQgJGkgIm1ha2UgYjIgYnJhbmNoIGZyb20gdHJ1bmsiKQorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gYjIiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9iMgorZWNobyAiYjIiID4gYjJmaWxlCitzdm4gYWRkIGIyZmlsZQoraT0kKGNvbW1pdCAkaSAiYjIgdXBkYXRlIDEiKQorY2QgLi4vLi4KKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIGIxIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvYjEKK2VjaG8gImIxIiA+IGIxZmlsZQorc3ZuIGFkZCBiMWZpbGUKK2k9JChjb21taXQgJGkgImIxIHVwZGF0ZSAxIikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2UgYjEgdG8gdHJ1bmsiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2IxLyAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgYjEgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIHRydW5rIGJlZm9yZSBtZXJnaW5nIHRydW5rIHRvIGIyIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK2VjaG8gInRydW5rIiA+IHRydW5rZmlsZQorc3ZuIGFkZCB0cnVua2ZpbGUKK2k9JChjb21taXQgJGkgInRydW5rIGNvbW1pdCBiZWZvcmUgbWVyZ2luZyB0cnVuayB0byBiMiIpCitjZCAuLgorCitzYXkgIk1lcmdlIHRydW5rIHRvIGIyIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvYjIKK3N2biBtZXJnZSAuLi8uLi90cnVuay8gLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIk1lcmdlIHRydW5rIHRvIGIyIikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2UgYjIgdG8gdHJ1bmsiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2IyLyAtLWFjY2VwdCBwb3N0cG9uZQorc3ZuIHJlc29sdmVkIGIxZmlsZQorc3ZuIHJlc29sdmVkIHRydW5rZmlsZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgYjIgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJDcmVhdGluZyBmMSBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZSIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayBicmFuY2hlcy9mMQorY2QgYnJhbmNoZXMvZjEKK2VjaG8gImYxIiA+IGYxZmlsZQorc3ZuIGFkZCBmMWZpbGUKK2NkIC4uLy4uCitpPSQoY29tbWl0ICRpICJtYWtlIGYxIGJyYW5jaCBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZSIpCisKK3NheSAiQ3JlYXRpbmcgZjIgZnJvbSB0cnVuayB3aXRoIGEgbmV3IGZpbGUiCitzdm4gdXBkYXRlCitzdm4gY3AgdHJ1bmsgYnJhbmNoZXMvZjIKK2NkIGJyYW5jaGVzL2YyCitlY2hvICJmMiIgPiBmMmZpbGUKK3N2biBhZGQgZjJmaWxlCitjZCAuLi8uLgoraT0kKGNvbW1pdCAkaSAibWFrZSBmMiBicmFuY2ggZnJvbSB0cnVuayB3aXRoIGEgbmV3IGZpbGUiKQorCitzYXkgIk1lcmdlIGYxIGFuZCBmMiB0byB0cnVuayBpbiBvbmUgZ28iCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2YxLyAtLWFjY2VwdCBwb3N0cG9uZQorc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2YyLyAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgZjEgYW5kIGYyIHRvIHRydW5rIikKK2NkIC4uCisKK3NheSAiQWRkaW5nIHN1YmRpcmVjdG9yeSB0byBMRUZUIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvbGVmdAorbWtkaXIgc3ViZGlyCitlY2hvICJZZWVoYXciID4gc3ViZGlyL2Nvd2JveQorc3ZuIGFkZCBzdWJkaXIKK2k9JChjb21taXQgJGkgImFkZCBzdWJkaXJlY3RvcnkgdG8gbGVmdCBicmFuY2giKQorY2QgLi4vLi4vCisKK3NheSAiTWVyZ2luZyBMRUZUIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9sZWZ0IC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJtZXJnZSBsZWZ0IHRvIHRydW5rIikKK2NkIC4uCisKK3NheSAiTWFrZSBQQVJUSUFMIGJyYW5jaCIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuay9zdWJkaXIgYnJhbmNoZXMvcGFydGlhbAoraT0kKGNvbW1pdCAkaSAibWFrZSBwYXJ0aWFsIGJyYW5jaCIpCisKK3NheSAiTWFrZSBhIGNvbW1pdCB0byBQQVJUSUFMIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvcGFydGlhbAorZWNobyAicmFjZWNhciIgPiBwYWxpbmRyb21lcworc3ZuIGFkZCBwYWxpbmRyb21lcworaT0kKGNvbW1pdCAkaSAicGFydGlhbCB1cGRhdGUiKQorY2QgLi4vLi4vCisKK3NheSAiTWVyZ2UgUEFSVElBTCB0byBUUlVOSyIKK3N2biB1cGRhdGUKK2NkIHRydW5rL3N1YmRpcgorc3ZuIG1lcmdlIC4uLy4uL2JyYW5jaGVzL3BhcnRpYWwgLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIm1lcmdlIHBhcnRpYWwgdG8gdHJ1bmsiKQorY2QgLi4vLi4vCisKK3NheSAiVGFnZ2luZyB0cnVuayIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayB0YWdzL3YxLjAKK2k9JChjb21taXQgJGkgInRhZ2dpbmcgdjEuMCIpCisKK3NheSAiQnJhbmNoaW5nIEJVR0ZJWCBmcm9tIHYxLjAiCitzdm4gdXBkYXRlCitzdm4gY3AgdGFncy92MS4wIGJyYW5jaGVzL2J1Z2ZpeAoraT0kKGNvbW1pdCAkaSAibWFrZSBidWdmaXggYnJhbmNoIGZyb20gdGFnIikKKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIEJVR0ZJWCIKK3N2biB1cGRhdGUKK2NkIGJyYW5jaGVzL2J1Z2ZpeC8KK2VjaG8gImtheWFrIiA+PiBzdWJkaXIvcGFsaW5kcm9tZXMKK2k9JChjb21taXQgJGkgImNvbW1pdCB0byBidWdmaXgiKQorY2QgLi4vLi4vCisKK3NheSAiTWVyZ2UgQlVHRklYIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9idWdmaXgvIC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJNZXJnZSBCVUdGSVggdG8gVFJVTksiKQorY2QgLi4KKworY2QgLi4KK3N2bmFkbWluIGR1bXAgZm9vLnN2biA+IHN2bi1tZXJnZWluZm8uZHVtcAorCitybSAtcmYgZm9vIGZvby5zdm4KZGlmZiAtLWdpdCBhL3QvdDkxNTEvc3ZuLW1lcmdlaW5mby5kdW1wIGIvdC90OTE1MS9zdm4tbWVyZ2VpbmZvLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjYWZjZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTEvc3ZuLW1lcmdlaW5mby5kdW1wCkBAIC0wLDAgKzEsMjM4OCBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogZDYxOTE1MzAtMjY5My00YThlLTk4ZTctYjE5NGQ0YzNlZGQ4CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjAyLjgzMjQwNloKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNAorQ29udGVudC1sZW5ndGg6IDEzNAorCitLIDcKK3N2bjpsb2cKK1YgMzYKKyhyMSkgU2V0dXAgdHJ1bmssIGJyYW5jaGVzLCBhbmQgdGFncworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDMuMDU1MTcyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdGFncworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDEzCisocjIpIGFuY2VzdG9yCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowNC4wNjQ1MDZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMjQwMQorVGV4dC1jb250ZW50LW1kNTogYmZkOGZmNzc4ZDE0OTJkYzY3NTg1NjczNzMxNzZhODkKK1RleHQtY29udGVudC1zaGExOiAxMDMyMDVjZTMzMWY3ZDY0MDg2ZGJhNDk3NTc0NzM0Zjc4NDM5NTkwCitDb250ZW50LWxlbmd0aDogMjQxMQorCitQUk9QUy1FTkQKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOQorQ29udGVudC1sZW5ndGg6IDExOQorCitLIDcKK3N2bjpsb2cKK1YgMjEKKyhyMykgbWFrZSBsZWZ0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDYuMDQwMzg5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rL01ha2VmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogYmZkOGZmNzc4ZDE0OTJkYzY3NTg1NjczNzMxNzZhODkKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMTAzMjA1Y2UzMzFmN2Q2NDA4NmRiYTQ5NzU3NDczNGY3ODQzOTU5MAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIwCitDb250ZW50LWxlbmd0aDogMTIwCisKK0sgNworc3ZuOmxvZworViAyMgorKHI0KSBtYWtlIHJpZ2h0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDguMDQwOTA1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvTWFrZWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxMDMyMDVjZTMzMWY3ZDY0MDg2ZGJhNDk3NTc0NzM0Zjc4NDM5NTkwCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyA3Citzdm46bG9nCitWIDE4CisocjUpIGxlZnQgdXBkYXRlIDEKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjA5LjA0OTE2OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjQ2NQorVGV4dC1jb250ZW50LW1kNTogMTZlMzhkOTc1M2IwNjE3MzE2NTA1NjFjZTAxYjExOTUKK1RleHQtY29udGVudC1zaGExOiAzNmRhNGI4NGVhOWI2NDIxOGFiNDgxNzFkZmM1YzQ4YWUwMjVmMzhiCitDb250ZW50LWxlbmd0aDogMjQ2NQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE3CitDb250ZW50LWxlbmd0aDogMTE3CisKK0sgNworc3ZuOmxvZworViAxOQorKHI2KSByaWdodCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTAuMDQ5MzUwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjUyMQorVGV4dC1jb250ZW50LW1kNTogMDY2ODQxOGE2MjEzMzNmNGFhOGI2NjMyY2Q2M2UyYTAKK1RleHQtY29udGVudC1zaGExOiA0ZjI5YWZkMDM4ZTUyZjQ1YWNiNWVmOGM0MWFjZmM3MDA2MmE3NDFhCitDb250ZW50LWxlbmd0aDogMjUyMQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyA3Citzdm46bG9nCitWIDE4CisocjcpIGxlZnQgdXBkYXRlIDIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjExLjA0OTIwOVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjUyOQorVGV4dC1jb250ZW50LW1kNTogZjZiMTk3Y2MzZjJlODlhODNlNTQ1ZDRiYjAwM2RlNzMKK1RleHQtY29udGVudC1zaGExOiAyZjY1NjY3N2NmZWMwYmNlZWM4NWU1MzAzNmZmYjYzZTI1MTI2ZjhlCitDb250ZW50LWxlbmd0aDogMjUyOQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDgKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyOCkgbGVmdCB1cGRhdGUgMworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTIuMDQ5MjM0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTkzCitUZXh0LWNvbnRlbnQtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorVGV4dC1jb250ZW50LXNoYTE6IGExM2RlOGUyM2YxNDgzZWZjYTNlNTdiMmI2NGIwYWU2Zjc0MGNlMTAKK0NvbnRlbnQtbGVuZ3RoOiAyNTkzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjUKKyhyOSkgbWFrZSBsZWZ0IHN1Yi1icmFuY2gKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjE0LjA0MDg5NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGRlbGV0ZQorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBhMTNkZThlMjNmMTQ4M2VmY2EzZTU3YjJiNjRiMGFlNmY3NDBjZTEwCisKKworCisKK1JldmlzaW9uLW51bWJlcjogMTAKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOAorQ29udGVudC1sZW5ndGg6IDEyOAorCitLIDcKK3N2bjpsb2cKK1YgMzAKKyhyMTApIGxlZnQgc3ViLWJyYW5jaCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTUuMDQ5OTM1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvUkVBRE1FCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiBmZGJjZmI2YmU5YWZlMTEyMTg2MjE0M2YyMjZiNTFjZgorVGV4dC1jb250ZW50LXNoYTE6IDFkMWY1ZWE0Y2ViNTg0MzM3ZmZlNTliODk4MGQ5MmUzYjc4ZGZlZjQKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK2NydW5jaAorCisKK1JldmlzaW9uLW51bWJlcjogMTEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNQorQ29udGVudC1sZW5ndGg6IDEyNQorCitLIDcKK3N2bjpsb2cKK1YgMjcKKyhyMTEpIE1lcmdlIGxlZnQgdG8gdHJ1bmsgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTguMDU2NTk0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NAorQ29udGVudC1sZW5ndGg6IDU0CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTkKKy9icmFuY2hlcy9sZWZ0OjItMTAKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjU5MworVGV4dC1jb250ZW50LW1kNTogNWNjZmY2ODlmYjI5MGUwMGI4NWZlMThlZTUwYzU0YmEKK1RleHQtY29udGVudC1zaGExOiBhMTNkZThlMjNmMTQ4M2VmY2EzZTU3YjJiNjRiMGFlNmY3NDBjZTEwCitDb250ZW50LWxlbmd0aDogMjU5MworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiAxMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE3CitDb250ZW50LWxlbmd0aDogMTE3CisKK0sgNworc3ZuOmxvZworViAxOQorKHIxMikgbGVmdCB1cGRhdGUgNAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTkuMDQ5NjIwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC96bG9uaworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNworVGV4dC1jb250ZW50LW1kNTogOGI5ZDhjN2MyYWFhNjE2N2U3ZDM0MDdhNzczYmJiYmEKK1RleHQtY29udGVudC1zaGExOiA5NzE2NTI3ZWJkNzBhNzVjMjc2MjVjYWNiZWIyZDg5N2M2ZTg2MTc4CitDb250ZW50LWxlbmd0aDogMTcKKworUFJPUFMtRU5ECit0b3VjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDEzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjEzKSByaWdodCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjAuMDQ5NjU5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvYmFuZworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogMzRjMjhmMWQyZGM2YTlhZGVjY2M0MjY1YmY3NTE2Y2IKK1RleHQtY29udGVudC1zaGExOiAwYmM1YmIzNDVjMGU3MWQyOGY3ODRmMTJlMGJkMmQzODRjMjgzMDYyCitDb250ZW50LWxlbmd0aDogMTgKKworUFJPUFMtRU5ECit0aHdhY2tlCisKKworUmV2aXNpb24tbnVtYmVyOiAxNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTQwCitDb250ZW50LWxlbmd0aDogMTQwCisKK0sgNworc3ZuOmxvZworViA0MgorKHIxNCkgQ2hlcnJ5LXBpY2sgcmlnaHQgMiBjb21taXRzIHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoyMy4wNDE5OTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDc1CitDb250ZW50LWxlbmd0aDogNzUKKworSyAxMworc3ZuOm1lcmdlaW5mbworViA0MAorL2JyYW5jaGVzL2xlZnQ6Mi0xMAorL2JyYW5jaGVzL3JpZ2h0OjYtMTMKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjcxMworVGV4dC1jb250ZW50LW1kNTogMGFmYmUzNGYyNDRjZDY2MmIxZjk3ZDcwOGM2ODdmOTAKK1RleHQtY29udGVudC1zaGExOiA0NmQ5Mzc3ZDc4M2U2N2E5YjU4MWRhMTEwMzUyZTc5OTUxN2M4YTE0CitDb250ZW50LWxlbmd0aDogMjcxMworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworTm9kZS1wYXRoOiB0cnVuay9iYW5nCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxMworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9yaWdodC9iYW5nCitUZXh0LWNvcHktc291cmNlLW1kNTogMzRjMjhmMWQyZGM2YTlhZGVjY2M0MjY1YmY3NTE2Y2IKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMGJjNWJiMzQ1YzBlNzFkMjhmNzg0ZjEyZTBiZDJkMzg0YzI4MzA2MgorCisKK1JldmlzaW9uLW51bWJlcjogMTUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNgorQ29udGVudC1sZW5ndGg6IDEyNgorCitLIDcKK3N2bjpsb2cKK1YgMjgKKyhyMTUpIE1lcmdlIHJpZ2h0IHRvIHRydW5rIDEKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjI2LjA1NDQ1NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNzUKK0NvbnRlbnQtbGVuZ3RoOiA3NQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDQwCisvYnJhbmNoZXMvbGVmdDoyLTEwCisvYnJhbmNoZXMvcmlnaHQ6Mi0xNAorUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAxNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE4CitDb250ZW50LWxlbmd0aDogMTE4CisKK0sgNworc3ZuOmxvZworViAyMAorKHIxNikgcmlnaHQgdXBkYXRlIDMKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjI3LjA0OTk1NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3JpZ2h0L3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA2CitUZXh0LWNvbnRlbnQtbWQ1OiA1ODg5YzgzOTJlMTYyNTFiMGM4MDkyNzYwN2EwMzAzNgorVGV4dC1jb250ZW50LXNoYTE6IDM5MzQyNjRkMjc3YTBjZjg4NmI2YjFjN2YyYjllNTZkYTI1MjUzMDIKK0NvbnRlbnQtbGVuZ3RoOiAxNgorCitQUk9QUy1FTkQKK3doYW1tCisKKworUmV2aXNpb24tbnVtYmVyOiAxNworUHJvcC1jb250ZW50LWxlbmd0aDogMTE4CitDb250ZW50LWxlbmd0aDogMTE4CisKK0sgNworc3ZuOmxvZworViAyMAorKHIxNykgdHJ1bmsgdXBkYXRlIDEKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjI4LjA0OTYxNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Zyb25rCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBiMmY4MGZhMDJhN2YxMzY0YjljMjlkM2RhNDRiZjlmOQorVGV4dC1jb250ZW50LXNoYTE6IGU5OTRkOTgwYzBmMmQ3YTNmNzYxMzhiZjk2ZDU3ZjM2Zjk2MzM4MjgKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK3BvdworCisKK1JldmlzaW9uLW51bWJlcjogMTgKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNAorQ29udGVudC1sZW5ndGg6IDEzNAorCitLIDcKK3N2bjpsb2cKK1YgMzYKKyhyMTgpIE1lcmdlIHJpZ2h0IHRvIGxlZnQgc3ViLWJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzEuMDYxNDYwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NQorQ29udGVudC1sZW5ndGg6IDU1CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMjAKKy9icmFuY2hlcy9yaWdodDoyLTE3CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI3MTMKK1RleHQtY29udGVudC1tZDU6IDBhZmJlMzRmMjQ0Y2Q2NjJiMWY5N2Q3MDhjNjg3ZjkwCitUZXh0LWNvbnRlbnQtc2hhMTogNDZkOTM3N2Q3ODNlNjdhOWI1ODFkYTExMDM1MmU3OTk1MTdjOGExNAorQ29udGVudC1sZW5ndGg6IDI3MTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvYmFuZworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMTcKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvcmlnaHQvYmFuZworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDM0YzI4ZjFkMmRjNmE5YWRlY2NjNDI2NWJmNzUxNmNiCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDBiYzViYjM0NWMwZTcxZDI4Zjc4NGYxMmUwYmQyZDM4NGMyODMwNjIKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxNworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9yaWdodC91cmtraworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDM5MzQyNjRkMjc3YTBjZjg4NmI2YjFjN2YyYjllNTZkYTI1MjUzMDIKKworCitSZXZpc2lvbi1udW1iZXI6IDE5CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjgKK0NvbnRlbnQtbGVuZ3RoOiAxMjgKKworSyA3Citzdm46bG9nCitWIDMwCisocjE5KSBsZWZ0IHN1Yi1icmFuY2ggdXBkYXRlIDIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjMyLjA0OTI0NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3doYW1fZXRoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA2CitUZXh0LWNvbnRlbnQtbWQ1OiA3NTdiY2Q1ODE4NTcyZWYzZjk1ODAwNTI2MTdjMWM4YgorVGV4dC1jb250ZW50LXNoYTE6IGIxNjUwMTliMDA1YzE5OTIzN2JhODIyYzQ0MDRlNzcxZTkzYjY1NGEKK0NvbnRlbnQtbGVuZ3RoOiAxNgorCitQUk9QUy1FTkQKK3pvd2llCisKKworUmV2aXNpb24tbnVtYmVyOiAyMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE3CitDb250ZW50LWxlbmd0aDogMTE3CisKK0sgNworc3ZuOmxvZworViAxOQorKHIyMCkgbGVmdCB1cGRhdGUgNQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzMuMDQ5MzMyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9nbHVycHAKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDgKK1RleHQtY29udGVudC1tZDU6IDE0YTE2OWY2MjhlMGJiNTlkZjljMjE2MDY0OWQwYTMwCitUZXh0LWNvbnRlbnQtc2hhMTogZWY3ZDkyOWU1MjE3Nzc2N2VjZmNkMjg5NDFmNmI3ZjA0YjQxMzFlMworQ29udGVudC1sZW5ndGg6IDE4CisKK1BST1BTLUVORAorZWVlX3lvdworCisKK1JldmlzaW9uLW51bWJlcjogMjEKK1Byb3AtY29udGVudC1sZW5ndGg6IDE0NgorQ29udGVudC1sZW5ndGg6IDE0NgorCitLIDcKK3N2bjpsb2cKK1YgNDgKKyhyMjEpIENoZXJyeS1waWNrIGxlZnQgc3ViLWJyYW5jaCBjb21taXQgdG8gbGVmdAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzYuMDQxODM5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyMQorL2JyYW5jaGVzL2xlZnQtc3ViOjE5CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvd2hhbV9ldGgKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE5CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3doYW1fZXRoCitUZXh0LWNvcHktc291cmNlLW1kNTogNzU3YmNkNTgxODU3MmVmM2Y5NTgwMDUyNjE3YzFjOGIKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYjE2NTAxOWIwMDVjMTk5MjM3YmE4MjJjNDQwNGU3NzFlOTNiNjU0YQorCisKK1JldmlzaW9uLW51bWJlcjogMjIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMworQ29udGVudC1sZW5ndGg6IDEzMworCitLIDcKK3N2bjpsb2cKK1YgMzUKKyhyMjIpIE1lcmdlIGxlZnQgc3ViLWJyYW5jaCB0byBsZWZ0CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozOS4wNDUwMTRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNzkKK0NvbnRlbnQtbGVuZ3RoOiA3OQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDQ0CisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMTcKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNzEzCitUZXh0LWNvbnRlbnQtbWQ1OiAwYWZiZTM0ZjI0NGNkNjYyYjFmOTdkNzA4YzY4N2Y5MAorVGV4dC1jb250ZW50LXNoYTE6IDQ2ZDkzNzdkNzgzZTY3YTliNTgxZGExMTAzNTJlNzk5NTE3YzhhMTQKK0NvbnRlbnQtbGVuZ3RoOiAyNzEzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UgbWVyZ2UtY2FjaGUKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCittZXJnZS1jYWNoZTogbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtY2FjaGUgbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvUkVBRE1FCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxOAorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9SRUFETUUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBmZGJjZmI2YmU5YWZlMTEyMTg2MjE0M2YyMjZiNTFjZgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxZDFmNWVhNGNlYjU4NDMzN2ZmZTU5Yjg5ODBkOTJlM2I3OGRmZWY0CisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L2JhbmcKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL2JhbmcKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAzNGMyOGYxZDJkYzZhOWFkZWNjYzQyNjViZjc1MTZjYgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAwYmM1YmIzNDVjMGU3MWQyOGY3ODRmMTJlMGJkMmQzODRjMjgzMDYyCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxOAorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi91cmtraworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDM5MzQyNjRkMjc3YTBjZjg4NmI2YjFjN2YyYjllNTZkYTI1MjUzMDIKKworCitSZXZpc2lvbi1udW1iZXI6IDIzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjUKK0NvbnRlbnQtbGVuZ3RoOiAxMjUKKworSyA3Citzdm46bG9nCitWIDI3CisocjIzKSBNZXJnZSBsZWZ0IHRvIHRydW5rIDIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjQyLjA1Mjc5OFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogOTkKK0NvbnRlbnQtbGVuZ3RoOiA5OQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDY0CisvYnJhbmNoZXMvbGVmdDoyLTIyCisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMTcKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvUkVBRE1FCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L1JFQURNRQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGZkYmNmYjZiZTlhZmUxMTIxODYyMTQzZjIyNmI1MWNmCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDFkMWY1ZWE0Y2ViNTg0MzM3ZmZlNTliODk4MGQ5MmUzYjc4ZGZlZjQKKworCitOb2RlLXBhdGg6IHRydW5rL2dsdXJwcAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjIKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC9nbHVycHAKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAxNGExNjlmNjI4ZTBiYjU5ZGY5YzIxNjA2NDlkMGEzMAorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBlZjdkOTI5ZTUyMTc3NzY3ZWNmY2QyODk0MWY2YjdmMDRiNDEzMWUzCisKKworTm9kZS1wYXRoOiB0cnVuay91cmtraworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjIKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC91cmtraworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDM5MzQyNjRkMjc3YTBjZjg4NmI2YjFjN2YyYjllNTZkYTI1MjUzMDIKKworCitOb2RlLXBhdGg6IHRydW5rL3doYW1fZXRoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L3doYW1fZXRoCitUZXh0LWNvcHktc291cmNlLW1kNTogNzU3YmNkNTgxODU3MmVmM2Y5NTgwMDUyNjE3YzFjOGIKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYjE2NTAxOWIwMDVjMTk5MjM3YmE4MjJjNDQwNGU3NzFlOTNiNjU0YQorCisKK05vZGUtcGF0aDogdHJ1bmsvemxvbmsKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIyCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvemxvbmsKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA4YjlkOGM3YzJhYWE2MTY3ZTdkMzQwN2E3NzNiYmJiYQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiA5NzE2NTI3ZWJkNzBhNzVjMjc2MjVjYWNiZWIyZDg5N2M2ZTg2MTc4CisKKworUmV2aXNpb24tbnVtYmVyOiAyNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTMwCitDb250ZW50LWxlbmd0aDogMTMwCisKK0sgNworc3ZuOmxvZworViAzMgorKHIyNCkgbm9uLW1lcmdlIHJpZ2h0IHRvIHRydW5rIDIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjQ0LjAzODQzNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogOTkKK0NvbnRlbnQtbGVuZ3RoOiA5OQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDY0CisvYnJhbmNoZXMvbGVmdDoyLTIyCisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMjUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOQorQ29udGVudC1sZW5ndGg6IDEyOQorCitLIDcKK3N2bjpsb2cKK1YgMzEKKyhyMjUpIG1ha2UgYjEgYnJhbmNoIGZyb20gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE4OjU2LjA4NDU4OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2IxCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDI0CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAyNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTI5CitDb250ZW50LWxlbmd0aDogMTI5CisKK0sgNworc3ZuOmxvZworViAzMQorKHIyNikgbWFrZSBiMiBicmFuY2ggZnJvbSB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTg6NTkuMDc2OTQwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjUKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDI3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTUKK0NvbnRlbnQtbGVuZ3RoOiAxMTUKKworSyA3Citzdm46bG9nCitWIDE3CisocjI3KSBiMiB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MDEuMDk1NzYyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjIvYjJmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCitUZXh0LWNvbnRlbnQtbWQ1OiA1ZWRiZGQ1N2NiYTYyMWViM2M2ZTYwMWJmNTYzYjRkYworVGV4dC1jb250ZW50LXNoYTE6IDlkNGIzODA0OTc3NmJkMGEyMDc0ZDY3Y2FkMjNmOGVhZWQzNWEzYjMKK0NvbnRlbnQtbGVuZ3RoOiAxMworCitQUk9QUy1FTkQKK2IyCisKKworUmV2aXNpb24tbnVtYmVyOiAyOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE1CitDb250ZW50LWxlbmd0aDogMTE1CisKK0sgNworc3ZuOmxvZworViAxNworKHIyOCkgYjEgdXBkYXRlIDEKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjAzLjA5NzQ2NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2IxL2IxZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMworVGV4dC1jb250ZW50LW1kNTogMDg3NzhkZmQ5YWM0ZjYwMzIzMTg5NmFiYTdhYWQ1MjMKK1RleHQtY29udGVudC1zaGExOiBiNTUxNzcxYWE0YWQ1YjE0MTIzZmMzYmQ5OGQ4OWRiMmJjMGVkZDRmCitDb250ZW50LWxlbmd0aDogMTMKKworUFJPUFMtRU5ECitiMQorCisKK1JldmlzaW9uLW51bWJlcjogMjkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMjMKKyhyMjkpIE1lcmdlIGIxIHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTowNi4wNzMxNzVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOAorQ29udGVudC1sZW5ndGg6IDExOAorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDgzCisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9iMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDI4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2IxL2IxZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDA4Nzc4ZGZkOWFjNGY2MDMyMzE4OTZhYmE3YWFkNTIzCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGI1NTE3NzFhYTRhZDViMTQxMjNmYzNiZDk4ZDg5ZGIyYmMwZWRkNGYKKworCitSZXZpc2lvbi1udW1iZXI6IDMwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNDMKK0NvbnRlbnQtbGVuZ3RoOiAxNDMKKworSyA3Citzdm46bG9nCitWIDQ1CisocjMwKSB0cnVuayBjb21taXQgYmVmb3JlIG1lcmdpbmcgdHJ1bmsgdG8gYjIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjA4LjA5NjM1M1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3RydW5rZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNgorVGV4dC1jb250ZW50LW1kNTogZWRmNDVmZTVjOThjNTM2NzczM2IzOWJiYjJiYjIwZDkKK1RleHQtY29udGVudC1zaGExOiA3MzYxZDE2ODVlNWM4NmRmYzUyMzYyMGNmYWY1OThmMTk2Zjg2MjM5CitDb250ZW50LWxlbmd0aDogMTYKKworUFJPUFMtRU5ECit0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMzEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMjMKKyhyMzEpIE1lcmdlIHRydW5rIHRvIGIyCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOToxMS4wODE1NDFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9iMgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMQorQ29udGVudC1sZW5ndGg6IDEzMQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDk2CisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorL3RydW5rOjI2LTMwCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2IyL2IxZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzAKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvYjFmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogMDg3NzhkZmQ5YWM0ZjYwMzIzMTg5NmFiYTdhYWQ1MjMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYjU1MTc3MWFhNGFkNWIxNDEyM2ZjM2JkOThkODlkYjJiYzBlZGQ0ZgorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjIvdHJ1bmtmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzMAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay90cnVua2ZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBlZGY0NWZlNWM5OGM1MzY3NzMzYjM5YmJiMmJiMjBkOQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiA3MzYxZDE2ODVlNWM4NmRmYzUyMzYyMGNmYWY1OThmMTk2Zjg2MjM5CisKKworUmV2aXNpb24tbnVtYmVyOiAzMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAyMworKHIzMikgTWVyZ2UgYjIgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjE0LjExNzkzOVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTM4CitDb250ZW50LWxlbmd0aDogMTM4CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTAyCisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9iMjoyNi0zMQorL2JyYW5jaGVzL2xlZnQ6Mi0yMgorL2JyYW5jaGVzL2xlZnQtc3ViOjQtMTkKKy9icmFuY2hlcy9yaWdodDoyLTIyCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2IyZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzEKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvYjIvYjJmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogNWVkYmRkNTdjYmE2MjFlYjNjNmU2MDFiZjU2M2I0ZGMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogOWQ0YjM4MDQ5Nzc2YmQwYTIwNzRkNjdjYWQyM2Y4ZWFlZDM1YTNiMworCisKK1JldmlzaW9uLW51bWJlcjogMzMKK1Byb3AtY29udGVudC1sZW5ndGg6IDE0NQorQ29udGVudC1sZW5ndGg6IDE0NQorCitLIDcKK3N2bjpsb2cKK1YgNDcKKyhyMzMpIG1ha2UgZjEgYnJhbmNoIGZyb20gdHJ1bmsgd2l0aCBhIG5ldyBmaWxlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOToxNy4xMDU4MzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9mMQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK05vZGUtcGF0aDogYnJhbmNoZXMvZjEvZjFmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCitUZXh0LWNvbnRlbnQtbWQ1OiAyYjFhYmM2YjZjNWMwMDE4ODUxZjlmOGU2NDc1NTYzYgorVGV4dC1jb250ZW50LXNoYTE6IGFlY2U2ZGZiYTU4ODkwMGUwMGQ5NTYwMWQyMmI0NDA4ZDQ5NTgwYWYKK0NvbnRlbnQtbGVuZ3RoOiAxMworCitQUk9QUy1FTkQKK2YxCisKKworUmV2aXNpb24tbnVtYmVyOiAzNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTQ1CitDb250ZW50LWxlbmd0aDogMTQ1CisKK0sgNworc3ZuOmxvZworViA0NworKHIzNCkgbWFrZSBmMiBicmFuY2ggZnJvbSB0cnVuayB3aXRoIGEgbmV3IGZpbGUKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjIwLjExMDA1N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2YyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMzCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9mMi9mMmZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDMKK1RleHQtY29udGVudC1tZDU6IDU3NWM1NjM4ZDYwMjcxNDU3ZTU0YWI3ZDA3MzA5NTAyCitUZXh0LWNvbnRlbnQtc2hhMTogMWM0OWE0NDBjMzUyZjM0NzNlZmE5NTEyMjU1MDMzYjk0ZGM3ZGVmMAorQ29udGVudC1sZW5ndGg6IDEzCisKK1BST1BTLUVORAorZjIKKworCitSZXZpc2lvbi1udW1iZXI6IDM1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjgKK0NvbnRlbnQtbGVuZ3RoOiAxMjgKKworSyA3Citzdm46bG9nCitWIDMwCisocjM1KSBNZXJnZSBmMSBhbmQgZjIgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjI0LjA4MTQ5MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTczCitDb250ZW50LWxlbmd0aDogMTczCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTM3CisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9iMjoyNi0zMQorL2JyYW5jaGVzL2YxOjMzLTM0CisvYnJhbmNoZXMvZjI6MzQKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9mMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDM0CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2YxL2YxZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDJiMWFiYzZiNmM1YzAwMTg4NTFmOWY4ZTY0NzU1NjNiCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGFlY2U2ZGZiYTU4ODkwMGUwMGQ5NTYwMWQyMmI0NDA4ZDQ5NTgwYWYKKworCitOb2RlLXBhdGg6IHRydW5rL2YyZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzQKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvZjIvZjJmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogNTc1YzU2MzhkNjAyNzE0NTdlNTRhYjdkMDczMDk1MDIKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMWM0OWE0NDBjMzUyZjM0NzNlZmE5NTEyMjU1MDMzYjk0ZGM3ZGVmMAorCisKK1JldmlzaW9uLW51bWJlcjogMzYKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNQorQ29udGVudC1sZW5ndGg6IDEzNQorCitLIDcKK3N2bjpsb2cKK1YgMzcKKyhyMzYpIGFkZCBzdWJkaXJlY3RvcnkgdG8gbGVmdCBicmFuY2gKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjI2LjExMzUxNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvc3ViZGlyL2Nvd2JveQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNworVGV4dC1jb250ZW50LW1kNTogZjFkNjUzMDI3OGFkNDA5ZTY4Y2M2NzU0NzZhZDk5NWYKK1RleHQtY29udGVudC1zaGExOiA3MzJkOWUzZTVjMzkxZmZkNzY3YTk4YjQ1ZGRjYzg0OGRlNzc4Y2VhCitDb250ZW50LWxlbmd0aDogMTcKKworUFJPUFMtRU5ECitZZWVoYXcKKworCitSZXZpc2lvbi1udW1iZXI6IDM3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjMKK0NvbnRlbnQtbGVuZ3RoOiAxMjMKKworSyA3Citzdm46bG9nCitWIDI1CisocjM3KSBtZXJnZSBsZWZ0IHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOToyOS4wNzM2OTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDE3MworQ29udGVudC1sZW5ndGg6IDE3MworCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDEzNworL2JyYW5jaGVzL2IxOjI1LTI4CisvYnJhbmNoZXMvYjI6MjYtMzEKKy9icmFuY2hlcy9mMTozMy0zNAorL2JyYW5jaGVzL2YyOjM0CisvYnJhbmNoZXMvbGVmdDoyLTM2CisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDM2CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvc3ViZGlyCisKKworUmV2aXNpb24tbnVtYmVyOiAzOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyNQorKHIzOCkgbWFrZSBwYXJ0aWFsIGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MzIuMDcyMjQzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcGFydGlhbAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzNworTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay9zdWJkaXIKKworCitSZXZpc2lvbi1udW1iZXI6IDM5CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjM5KSBwYXJ0aWFsIHVwZGF0ZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MzQuMDk3OTYxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcGFydGlhbC9wYWxpbmRyb21lcworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogNWQxYzIwMjRmYjVlZmM0ZWVmODEyODU2ZGYxYjA4MGMKK1RleHQtY29udGVudC1zaGExOiA1Zjg1MDlkZGQxNGM5MWE1Mjg2NGRkMTQ0NzM0NGU3MDZmOWJiYzY5CitDb250ZW50LWxlbmd0aDogMTgKKworUFJPUFMtRU5ECityYWNlY2FyCisKKworUmV2aXNpb24tbnVtYmVyOiA0MAorUHJvcC1jb250ZW50LWxlbmd0aDogMTI2CitDb250ZW50LWxlbmd0aDogMTI2CisKK0sgNworc3ZuOmxvZworViAyOAorKHI0MCkgbWVyZ2UgcGFydGlhbCB0byB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MzcuMDgwMjExWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMjQ2CitDb250ZW50LWxlbmd0aDogMjQ2CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMjEwCisvYnJhbmNoZXMvYjEvc3ViZGlyOjI1LTI4CisvYnJhbmNoZXMvYjIvc3ViZGlyOjI2LTMxCisvYnJhbmNoZXMvZjEvc3ViZGlyOjMzLTM0CisvYnJhbmNoZXMvZjIvc3ViZGlyOjM0CisvYnJhbmNoZXMvbGVmdC9zdWJkaXI6Mi0zNgorL2JyYW5jaGVzL2xlZnQtc3ViL3N1YmRpcjo0LTE5CisvYnJhbmNoZXMvcGFydGlhbDozOC0zOQorL2JyYW5jaGVzL3JpZ2h0L3N1YmRpcjoyLTIyCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL3N1YmRpci9wYWxpbmRyb21lcworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzkKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvcGFydGlhbC9wYWxpbmRyb21lcworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDVkMWMyMDI0ZmI1ZWZjNGVlZjgxMjg1NmRmMWIwODBjCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDVmODUwOWRkZDE0YzkxYTUyODY0ZGQxNDQ3MzQ0ZTcwNmY5YmJjNjkKKworCitSZXZpc2lvbi1udW1iZXI6IDQxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyA3Citzdm46bG9nCitWIDE4CisocjQxKSB0YWdnaW5nIHYxLjAKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjQwLjA4MzQ2MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvdjEuMAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA0MAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMQorQ29udGVudC1sZW5ndGg6IDEzMQorCitLIDcKK3N2bjpsb2cKK1YgMzMKKyhyNDIpIG1ha2UgYnVnZml4IGJyYW5jaCBmcm9tIHRhZworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6NDMuMTE4MDc1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnVnZml4CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDQxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRhZ3MvdjEuMAorCisKK1JldmlzaW9uLW51bWJlcjogNDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMAorQ29udGVudC1sZW5ndGg6IDEyMAorCitLIDcKK3N2bjpsb2cKK1YgMjIKKyhyNDMpIGNvbW1pdCB0byBidWdmaXgKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjQ1LjA3OTUzNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2J1Z2ZpeC9zdWJkaXIvcGFsaW5kcm9tZXMKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTQKK1RleHQtY29udGVudC1tZDU6IDNiMTJkOTg1NzhhM2Y0MzIwYmE5N2U2NmRhNTRmZTVmCitUZXh0LWNvbnRlbnQtc2hhMTogNjcyOTMxYzllOGFjMmM0MDgyMDllZmFiMmYwMTU2MzhiNmQ2NDA0MgorQ29udGVudC1sZW5ndGg6IDE0CisKK3JhY2VjYXIKK2theWFrCisKKworUmV2aXNpb24tbnVtYmVyOiA0NAorUHJvcC1jb250ZW50LWxlbmd0aDogMTI1CitDb250ZW50LWxlbmd0aDogMTI1CisKK0sgNworc3ZuOmxvZworViAyNworKHI0NCkgTWVyZ2UgQlVHRklYIHRvIFRSVU5LCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTo0OC4wNzg5MTRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDIxMAorQ29udGVudC1sZW5ndGg6IDIxMAorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDE3NAorL2JyYW5jaGVzL2IxOjI1LTI4CisvYnJhbmNoZXMvYjI6MjYtMzEKKy9icmFuY2hlcy9idWdmaXg6NDItNDMKKy9icmFuY2hlcy9mMTozMy0zNAorL2JyYW5jaGVzL2YyOjM0CisvYnJhbmNoZXMvbGVmdDoyLTM2CisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKKy90YWdzL3YxLjA6NDEKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMjk3CitDb250ZW50LWxlbmd0aDogMjk3CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMjYxCisvYnJhbmNoZXMvYjEvc3ViZGlyOjI1LTI4CisvYnJhbmNoZXMvYjIvc3ViZGlyOjI2LTMxCisvYnJhbmNoZXMvYnVnZml4L3N1YmRpcjo0Mi00MworL2JyYW5jaGVzL2YxL3N1YmRpcjozMy0zNAorL2JyYW5jaGVzL2YyL3N1YmRpcjozNAorL2JyYW5jaGVzL2xlZnQvc3ViZGlyOjItMzYKKy9icmFuY2hlcy9sZWZ0LXN1Yi9zdWJkaXI6NC0xOQorL2JyYW5jaGVzL3BhcnRpYWw6MzgtMzkKKy9icmFuY2hlcy9yaWdodC9zdWJkaXI6Mi0yMgorL3RhZ3MvdjEuMC9zdWJkaXI6NDEKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyL3BhbGluZHJvbWVzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDE0CitUZXh0LWNvbnRlbnQtbWQ1OiAzYjEyZDk4NTc4YTNmNDMyMGJhOTdlNjZkYTU0ZmU1ZgorVGV4dC1jb250ZW50LXNoYTE6IDY3MjkzMWM5ZThhYzJjNDA4MjA5ZWZhYjJmMDE1NjM4YjZkNjQwNDIKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCityYWNlY2FyCitrYXlhaworCisKZGlmZiAtLWdpdCBhL3QvdDkxNTItc3ZuLWVtcHR5LWRpcnMtYWZ0ZXItZ2Muc2ggYi90L3Q5MTUyLXN2bi1lbXB0eS1kaXJzLWFmdGVyLWdjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5ZjI4NWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUyLXN2bi1lbXB0eS1kaXJzLWFmdGVyLWdjLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgUm9iZXJ0IFplaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMsIGNhbGxzIGdpdCBnYywgbWFrZXMgc3VyZSB0aGV5IGFyZSBzdGlsbCBlbXB0eScKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlmb3IgaSBpbiBhIGIgYyBkIGQvZSBkL2UvZiAid2VpcmQgZmlsZSBuYW1lIgorCWRvCisJCXN2bl9jbWQgbWtkaXIgLW0gIm1rZGlyICRpIiAiJHN2bnJlcG8iLyIkaSIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lJyAnZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIGNsb25lZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBydW5zJyAnCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IHN2biBnYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBta2RpcnMgcmVjcmVhdGVzIGVtcHR5IGRpcmVjdG9yaWVzIGFmdGVyIGdpdCBzdm4gZ2MnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlybSAtciAqICYmCisJCWdpdCBzdm4gbWtkaXJzICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIgJiYKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1My1naXQtc3ZuLXJld3JpdGUtdXVpZC5zaCBiL3QvdDkxNTMtZ2l0LXN2bi1yZXdyaXRlLXV1aWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGNiMmI1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTMtZ2l0LXN2bi1yZXdyaXRlLXV1aWQuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKYXkgU29mZmlhbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIC0tcmV3cml0ZS11dWlkIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit1dWlkPTZjYzhhZGE0LTU5MzItNGI0YS04MjQyLTM1MzRlZDhhMzIzMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biByZXBvJyAiCisJc3ZuYWRtaW4gbG9hZCAtcSAnJHJhd3N2bnJlcG8nIDwgJyRURVNUX0RJUkVDVE9SWS90OTE1My9zdm4uZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLS1yZXdyaXRlLXV1aWQ9JyR1dWlkJyAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHV1aWQnICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjAgPmFjdHVhbCAmJgorCWdyZXAgJ15naXQtc3ZuLWlkOiAuKkAyICR1dWlkJCcgYWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZ2l0LXN2bn4xID5hY3R1YWwgJiYKKwlncmVwICdeZ2l0LXN2bi1pZDogLipAMSAkdXVpZCQnIGFjdHVhbAorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUzL3N2bi5kdW1wIGIvdC90OTE1My9zdm4uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRmZTcwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1My9zdm4uZHVtcApAQCAtMCwwICsxLDc1IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBiNDg4NTYyNi1jOTRmLTRhNmMtYjE3OS0wMGMwMzBmYzY4ZTgKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDY6NDE6MDMuOTA4NTc2WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTA5CitDb250ZW50LWxlbmd0aDogMTA5CisKK0sgNworc3ZuOmxvZworViAxMQoraW5pdGlhbCBmb28KK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA2OjQxOjQ4LjM1Mzc3NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogZDNiMDczODRkMTEzZWRlYzQ5ZWFhNjIzOGFkNWZmMDAKK1RleHQtY29udGVudC1zaGExOiBmMWQyZDJmOTI0ZTk4NmFjODZmZGY3YjM2Yzk0YmNkZjMyYmVlYzE1CitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECitmb28KKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgMTIKK25vdyB3aXRoIGJhcgorSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDY6NDI6MTQuMjE0NjQwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDgKK1RleHQtY29udGVudC1tZDU6IGY0N2M3NTYxNDA4N2E4ZGQ5MzhiYTRhY2ZmMjUyNDk0CitUZXh0LWNvbnRlbnQtc2hhMTogNGU0OGUyYzlhM2QyY2E4YTcwOGNiMGNjNTQ1NzAwNTQ0ZWZiNTAyMQorQ29udGVudC1sZW5ndGg6IDgKKworZm9vCitiYXIKKworCmRpZmYgLS1naXQgYS90L3Q5MTU0LWdpdC1zdm4tZmFuY3ktZ2xvYi5zaCBiL3QvdDkxNTQtZ2l0LXN2bi1mYW5jeS1nbG9iLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwMTUwZjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU0LWdpdC1zdm4tZmFuY3ktZ2xvYi5zaApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpheSBTb2ZmaWFuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZmFuY3kgZ2xvYiB0ZXN0JworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gcmVwbycgIgorCXN2bmFkbWluIGxvYWQgLXEgJyRyYXdzdm5yZXBvJyA8ICckVEVTVF9ESVJFQ1RPUlkvdDkxNTQvc3ZuLmR1bXAnICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1UIHRydW5rICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVkIGJyYW5jaCcgIgorCWdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgJ2JyYW5jaGVzL3tyZWR9OnJlZnMvcmVtb3Rlcy8qJyAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9yZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ncmVlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JsdWUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBncmUgYnJhbmNoJyAiCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zdm4vLm1ldGFkYXRhIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMtbWF4UmV2ICYmCisJZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyAnYnJhbmNoZXMve3JlZCxncmV9OnJlZnMvcmVtb3Rlcy8qJyAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9yZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ncmVlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JsdWUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBncmVlbiBicmFuY2gnICIKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0L3N2bi8ubWV0YWRhdGEgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYgJiYKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy97cmVkLGdyZWVufTpyZWZzL3JlbW90ZXMvKicgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcmVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZ3JlZW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ibHVlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYWxsIGJyYW5jaGVzJyAiCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zdm4vLm1ldGFkYXRhIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMtbWF4UmV2ICYmCisJZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyAnYnJhbmNoZXMvKjpyZWZzL3JlbW90ZXMvKicgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcmVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZ3JlZW4gJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ibHVlCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTQvc3ZuLmR1bXAgYi90L3Q5MTU0L3N2bi5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmFiYjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU0L3N2bi5kdW1wCkBAIC0wLDAgKzEsMjIyIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBhMTgwOTNhMC01ZjBiLTQ0ZTAtOGQ4OC04OTExYWM3MDc4ZGIKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDA6MjUuNjYwMDUzWgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTA0CitDb250ZW50LWxlbmd0aDogMTA0CisKK0sgNworc3ZuOmxvZworViA3Citpbml0aWFsCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MTozMy42MzYzNjVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IGQzYjA3Mzg0ZDExM2VkZWM0OWVhYTYyMzhhZDVmZjAwCitUZXh0LWNvbnRlbnQtc2hhMTogZjFkMmQyZjkyNGU5ODZhYzg2ZmRmN2IzNmM5NGJjZGYzMmJlZWMxNQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDEyCithZGQgYnJhbmNoZXMKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQyOjM3LjI5MDY5NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JsdWUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK05vZGUtcGF0aDogYnJhbmNoZXMvZ3JlZW4KK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmVkCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwOAorQ29udGVudC1sZW5ndGg6IDEwOAorCitLIDcKK3N2bjpsb2cKK1YgMTAKK3JlZCBjaGFuZ2UKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQzOjAyLjIwODkxOFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3JlZC9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogNjRjM2M4Y2Y3ZDAyMzNhYjc2Mjc2MjNhNjg4ODhiZDEKK1RleHQtY29udGVudC1zaGExOiA5NWEwNDkyMDI3ODc2YWRmZDM4OTFlYzcxZWUzN2I3OWVlNDRkNjQwCitDb250ZW50LWxlbmd0aDogOAorCitmb28KK3JlZAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMgorZ3JlZW4gY2hhbmdlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MzoxNS43NDY1ODZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9ncmVlbi9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDAyMDliNjQ1MDg5MWFiYzAzM2Q1ZWFhYTlkM2E4MDIzCitUZXh0LWNvbnRlbnQtc2hhMTogODdmYzNiZWY5ZmFlZWM0OGMwY2Q2MWRmYzk4NTFkYjM3N2ZkY2NmNworQ29udGVudC1sZW5ndGg6IDEwCisKK2ZvbworZ3JlZW4KKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwOQorQ29udGVudC1sZW5ndGg6IDEwOQorCitLIDcKK3N2bjpsb2cKK1YgMTEKK2JsdWUgY2hhbmdlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MzoyOS4zNjQ4MTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9ibHVlL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiA5ZmJlNGMxM2QwYmFlODYzODZhZTUyMDliMmU2YjI3NQorVGV4dC1jb250ZW50LXNoYTE6IGNjNDU3NTA4MzQ1OWExNmY5YWFlZjc5NmM0YTI0NTZkNjQ2OTFiYTAKK0NvbnRlbnQtbGVuZ3RoOiA5CisKK2ZvbworYmx1ZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMgordHJ1bmsgY2hhbmdlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0NDowMS4zMTMxMzBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9mb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDFjNGRiOTc3ZDdhNTdjM2JhZTU4MmFhYjg3OTQ4NTE2CitUZXh0LWNvbnRlbnQtc2hhMTogNDY5YzA4ZGY0NDllNzAyY2YyYTFmZTc0NjI0NGE5ZWYzZjgzN2ZhZAorQ29udGVudC1sZW5ndGg6IDEwCisKK2ZvbwordHJ1bmsKKworCmRpZmYgLS1naXQgYS90L3Q5MTU1LWdpdC1zdm4tZmV0Y2gtZGVsZXRlZC10YWcuc2ggYi90L3Q5MTU1LWdpdC1zdm4tZmV0Y2gtZGVsZXRlZC10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTg0MzM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTUtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmZXRjaCBkZWxldGVkIHRhZycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvJyAnCisJbWtkaXIgLXAgaW1wb3J0L3RydW5rL3N1YmRpciAmJgorCW1rZGlyIC1wIGltcG9ydC9icmFuY2hlcyAmJgorCW1rZGlyIC1wIGltcG9ydC90YWdzICYmCisJZWNobyAiYmFzZSIgPmltcG9ydC90cnVuay9zdWJkaXIvZmlsZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIGltcG9ydCAiJHN2bnJlcG8iICYmCisJcm0gLXJmIGltcG9ydCAmJgorCisJc3ZuX2NtZCBta2RpciAtbSAiY3JlYXRlIG15YnJhbmNoIGRpcmVjdG9yeSIgIiRzdm5yZXBvL2JyYW5jaGVzL215YnJhbmNoIiAmJgorCXN2bl9jbWQgY3AgLW0gImNyZWF0ZSBicmFuY2ggbXlicmFuY2giICIkc3ZucmVwby90cnVuayIgIiRzdm5yZXBvL2JyYW5jaGVzL215YnJhbmNoL3RydW5rIiAmJgorCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8vdHJ1bmsiIHN2bl9wcm9qZWN0ICYmCisJKGNkIHN2bl9wcm9qZWN0ICYmCisJCWVjaG8gInRydW5rIGNoYW5nZSIgPj5zdWJkaXIvZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJ0cnVuayBjaGFuZ2UiIHN1YmRpci9maWxlICYmCisKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvL2JyYW5jaGVzL215YnJhbmNoL3RydW5rIiAmJgorCQllY2hvICJicmFuY2ggY2hhbmdlIiA+PnN1YmRpci9maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gImJyYW5jaCBjaGFuZ2UiIHN1YmRpci9maWxlCisJKSAmJgorCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIG15dGFnIGF0dGVtcHQgMSIgLXI1ICIkc3ZucmVwby90cnVuay9zdWJkaXIiICIkc3ZucmVwby90YWdzL215dGFnIiAmJgorCXN2bl9jbWQgcm0gLW0gImRlbGV0ZSBteXRhZyBhdHRlbXB0IDEiICIkc3ZucmVwby90YWdzL215dGFnIiAmJgorCXN2bl9jbWQgY3AgLW0gImNyZWF0ZSBteXRhZyBhdHRlbXB0IDIiIC1yNSAiJHN2bnJlcG8vYnJhbmNoZXMvbXlicmFuY2gvdHJ1bmsvc3ViZGlyIiAiJHN2bnJlcG8vdGFncy9teXRhZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZGVsZXRlZCB0YWdzIGZyb20gc2FtZSByZXZpc2lvbiB3aXRoIGNoZWNrc3VtIGVycm9yJyAnCisJZ2l0IHN2biBpbml0IC0tc3RkbGF5b3V0ICIkc3ZucmVwbyIgZ2l0X3Byb2plY3QgJiYKKwljZCBnaXRfcHJvamVjdCAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKworCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG9yaWdpbi9teWJyYW5jaDp0cnVuay9zdWJkaXIvZmlsZSBvcmlnaW4vdGFncy9teXRhZzpmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyOnN1YmRpci9maWxlIG9yaWdpbi90YWdzL215dGFnXjpmaWxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1Ni1naXQtc3ZuLWZldGNoLWRlbGV0ZWQtdGFnLTIuc2ggYi90L3Q5MTU2LWdpdC1zdm4tZmV0Y2gtZGVsZXRlZC10YWctMi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YTZlMzNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1Ni1naXQtc3ZuLWZldGNoLWRlbGV0ZWQtdGFnLTIuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZmV0Y2ggZGVsZXRlZCB0YWcgMicKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvJyAnCisJbWtkaXIgLXAgaW1wb3J0L2JyYW5jaGVzICYmCisJbWtkaXIgLXAgaW1wb3J0L3RhZ3MgJiYKKwlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3ViZGlyMSAmJgorCW1rZGlyIC1wIGltcG9ydC90cnVuay9zdWJkaXIyICYmCisJbWtkaXIgLXAgaW1wb3J0L3RydW5rL3N1YmRpcjMgJiYKKwllY2hvICJmaWxlMSIgPmltcG9ydC90cnVuay9zdWJkaXIxL2ZpbGUgJiYKKwllY2hvICJmaWxlMiIgPmltcG9ydC90cnVuay9zdWJkaXIyL2ZpbGUgJiYKKwllY2hvICJmaWxlMyIgPmltcG9ydC90cnVuay9zdWJkaXIzL2ZpbGUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiBpbXBvcnQgIiRzdm5yZXBvIiAmJgorCXJtIC1yZiBpbXBvcnQgJiYKKworCXN2bl9jbWQgY28gIiRzdm5yZXBvL3RydW5rIiBzdm5fcHJvamVjdCAmJgorCShjZCBzdm5fcHJvamVjdCAmJgorCQllY2hvICJjaGFuZ2UxIiA+PnN1YmRpcjEvZmlsZSAmJgorCQllY2hvICJjaGFuZ2UyIiA+PnN1YmRpcjIvZmlsZSAmJgorCQllY2hvICJjaGFuZ2UzIiA+PnN1YmRpcjMvZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJjaGFuZ2UiIC4KKwkpICYmCisKKwlzdm5fY21kIGNwIC1tICJjcmVhdGUgbXl0YWcgMSIgLXIyICIkc3ZucmVwby90cnVuay9zdWJkaXIxIiAiJHN2bnJlcG8vdGFncy9teXRhZyIgJiYKKwlzdm5fY21kIHJtIC1tICJkZWxldGUgbXl0YWcgMSIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIG15dGFnIDIiIC1yMiAiJHN2bnJlcG8vdHJ1bmsvc3ViZGlyMiIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBybSAtbSAiZGVsZXRlIG15dGFnIDIiICIkc3ZucmVwby90YWdzL215dGFnIiAmJgorCXN2bl9jbWQgY3AgLW0gImNyZWF0ZSBteXRhZyAzIiAtcjIgIiRzdm5yZXBvL3RydW5rL3N1YmRpcjMiICIkc3ZucmVwby90YWdzL215dGFnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBkZWxldGVkIHRhZ3MgZnJvbSBzYW1lIHJldmlzaW9uIHdpdGggbm8gY2hlY2tzdW0gZXJyb3InICcKKwlnaXQgc3ZuIGluaXQgLS1zdGRsYXlvdXQgIiRzdm5yZXBvIiBnaXRfcHJvamVjdCAmJgorCWNkIGdpdF9wcm9qZWN0ICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyOnN1YmRpcjMvZmlsZSBvcmlnaW4vdGFncy9teXRhZzpmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyOnN1YmRpcjIvZmlsZSBvcmlnaW4vdGFncy9teXRhZ146ZmlsZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlcjpzdWJkaXIxL2ZpbGUgb3JpZ2luL3RhZ3MvbXl0YWdeXjpmaWxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1Ny1naXQtc3ZuLWZldGNoLW1lcmdlLnNoIGIvdC90OTE1Ny1naXQtc3ZuLWZldGNoLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5MWQyYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU3LWdpdC1zdm4tZmV0Y2gtbWVyZ2Uuc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBTdGV2ZW4gV2FsdGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbWVyZ2UgZGV0ZWN0aW9uJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3N2bl92ZXI9IiQoc3ZuIC0tdmVyc2lvbiAtLXF1aWV0KSIKK2Nhc2UgJHN2bl92ZXIgaW4KKzAuKiB8IDEuWzAtNF0uKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgZ2l0LXN2biB0ZXN0IC0gU1ZOIHRvbyBvbGQgKCRzdm5fdmVyKSIKKwl0ZXN0X2RvbmUKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvYnJhbmNoZXMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCXRvdWNoIGZvbyAmJgorCQlzdm4gYWRkIGZvbyAmJgorCQlzdm4gY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwkJc3ZuIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQl0b3VjaCBiYXIgJiYKKwkJc3ZuIGFkZCBiYXIgJiYKKwkJc3ZuIGNvbW1pdCAtbSB4ICYmCisJCXN2biBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJdG91Y2ggYmF6ICYmCisJCXN2biBhZGQgYmF6ICYmCisJCXN2biBjb21taXQgLW0geCAmJgorCQlzdm4gc3dpdGNoICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwkJc3ZuIG1lcmdlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm4gY29tbWl0IC1tICJtZXJnZSIgJiYKKwkJc3ZuIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJc3ZuIGNvbW1pdCAtbSB4ICYmCisJCXN2biBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXN2biBtZXJnZSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJc3ZuIGNvbW1pdCAtbSAibWVyZ2UgYnJhbmNoMSIgJiYKKwkJc3ZuIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXN2biBtZXJnZSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuIHJlc29sdmVkIGJheiAmJgorCQlzdm4gY29tbWl0IC1tICJtZXJnZSBicmFuY2gyIgorCSkgJiYKKwlybSAtcmYgIiRTVk5fVFJFRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc3ZuIHJlcG8nICcKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1lcmdlIGNvbW1pdCcgJ2dpdCByZXYtcGFyc2UgSEVBRF4yJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTgtZ2l0LXN2bi1tZXJnZWluZm8uc2ggYi90L3Q5MTU4LWdpdC1zdm4tbWVyZ2VpbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4NzViNDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU4LWdpdC1zdm4tbWVyZ2VpbmZvLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgU3RldmVuIFdhbHRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIG1lcmdlaW5mbyBwcm9wYWdhdGlvbicKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc291cmNlIHN2biByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCXRvdWNoIGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IgorCSkgJiYKKwlybSAtcmYgIiRTVk5fVFJFRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc3ZuIHJlcG8nICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIi90cnVuayAmJgorCWdpdCBzdm4gZmV0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIHN2bjptZXJnZWluZm8nICcKKwl0b3VjaCBiYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gImJhciIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLS1tZXJnZWluZm89Ii9icmFuY2hlcy9mb286MS0xMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHN2bjptZXJnZWluZm8nICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL3RydW5rKSAmJgorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9mb286MS0xMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIHN2bjptZXJnZWluZm8gbXVsdGlsaW5lJyAnCisJdG91Y2ggYmF6ICYmCisJZ2l0IGFkZCBiYXogJiYKKwlnaXQgY29tbWl0IC1tICJiYXoiICYmCisJZ2l0IHN2biBkY29tbWl0IC0tbWVyZ2VpbmZvPSIvYnJhbmNoZXMvYmFyOjEtMTAgL2JyYW5jaGVzL290aGVyOjMtNSw4LDEwLTExIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc3ZuOm1lcmdlaW5mbyBtdWx0aWxpbmUnICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL3RydW5rKSAmJgorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9iYXI6MS0xMAorL2JyYW5jaGVzL290aGVyOjMtNSw4LDEwLTExIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTktZ2l0LXN2bi1uby1wYXJlbnQtbWVyZ2VpbmZvLnNoIGIvdC90OTE1OS1naXQtc3ZuLW5vLXBhcmVudC1tZXJnZWluZm8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjllNDgxNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTktZ2l0LXN2bi1uby1wYXJlbnQtbWVyZ2VpbmZvLnNoCkBAIC0wLDAgKzEsNDEgQEAKKyMhL2Jpbi9zaAordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBoYW5kbGluZyBvZiByb290IGNvbW1pdHMgaW4gbWVyZ2UgcmFuZ2VzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3N2bl92ZXI9IiQoc3ZuIC0tdmVyc2lvbiAtLXF1aWV0KSIKK2Nhc2UgJHN2bl92ZXIgaW4KKzAuKiB8IDEuWzAtNF0uKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgZ2l0LXN2biB0ZXN0IC0gU1ZOIHRvbyBvbGQgKCRzdm5fdmVyKSIKKwl0ZXN0X2RvbmUKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGhhbmRsaW5nIG9mIHJvb3QgY29tbWl0cyBpbiBtZXJnZSByYW5nZXMnICcKKwlta2RpciAtcCBpbml0L3RydW5rIGluaXQvYnJhbmNoZXMgaW5pdC90YWdzICYmCisJZWNobyAicjEiID4gaW5pdC90cnVuay9maWxlLnR4dCAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIGltcG9ydCIgaW5pdCAiJHN2bnJlcG8iICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInIyIiA+IHRydW5rL2ZpbGUudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJNb2RpZnkgZmlsZS50eHQgb24gdHJ1bmsiICYmCisJCXN2bl9jbWQgY3AgdHJ1bmtAMSBicmFuY2hlcy9hICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJDcmVhdGUgYnJhbmNoIGEgZnJvbSB0cnVuayByMSIgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjptZXJnZWluZm8gL3RydW5rOjEtMiBicmFuY2hlcy9hICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJGYWtlIG1lcmdlIG9mIHRydW5rIHIyIGludG8gYnJhbmNoIGEiICYmCisJCW1rZGlyIGJyYW5jaGVzL2IgJiYKKwkJZWNobyAicjUiID4gYnJhbmNoZXMvYi9maWxlMi50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgYnJhbmNoZXMvYiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQ3JlYXRlIGJyYW5jaCBiIGZyb20gdGhpbiBhaXIiICYmCisJCWVjaG8gInI2IiA+IGJyYW5jaGVzL2IvZmlsZTIudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJNb2RpZnkgZmlsZTIudHh0IG9uIGJyYW5jaCBiIiAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL2JANSBicmFuY2hlcy9jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJDcmVhdGUgYnJhbmNoIGMgZnJvbSBicmFuY2ggYiByNSIgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjptZXJnZWluZm8gL2JyYW5jaGVzL2I6NS02IGJyYW5jaGVzL2MgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkZha2UgbWVyZ2Ugb2YgYnJhbmNoIGIgcjYgaW50byBicmFuY2ggYyIKKwkpICYmCisJZ2l0IHN2biBpbml0IC1zICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjAtZ2l0LXN2bi1wcmVzZXJ2ZS1lbXB0eS1kaXJzLnNoIGIvdC90OTE2MC1naXQtc3ZuLXByZXNlcnZlLWVtcHR5LWRpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGVkZTNjZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjAtZ2l0LXN2bi1wcmVzZXJ2ZS1lbXB0eS1kaXJzLnNoCkBAIC0wLDAgKzEsMTUyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIFJheSBDaGVuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gdGVzdCAob3B0aW9uIC0tcHJlc2VydmUtZW1wdHktZGlycykKKworVGhpcyB0ZXN0IHVzZXMgZ2l0IHRvIGNsb25lIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IHRoYXQgY29udGFpbnMgZW1wdHkKK2RpcmVjdG9yaWVzLCBhbmQgY2hlY2tzIHRoYXQgY29ycmVzcG9uZGluZyBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZCBpbiB0aGUKK2xvY2FsIEdpdCByZXBvc2l0b3J5IHdpdGggcGxhY2Vob2xkZXIgZmlsZXMuJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworR0lUX1JFUE89Z2l0LXN2bi1yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc291cmNlIHN2biByZXBvIGNvbnRhaW5pbmcgZW1wdHkgZGlycycgJworCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJFNWTl9UUkVFIiAmJgorCQlta2RpciAtcCAxIDIgMy9hIDMvYiA0IDUgNiAmJgorCQllY2hvICJGaXJzdCBub24tZW1wdHkgZmlsZSIgID4gMi9maWxlMS50eHQgJiYKKwkJZWNobyAiU2Vjb25kIG5vbi1lbXB0eSBmaWxlIiA+IDIvZmlsZTIudHh0ICYmCisJCWVjaG8gIlRoaXJkIG5vbi1lbXB0eSBmaWxlIiAgPiAzL2EvZmlsZTEudHh0ICYmCisJCWVjaG8gIkZvdXJ0aCBub24tZW1wdHkgZmlsZSIgPiAzL2IvZmlsZTEudHh0ICYmCisJCXN2bl9jbWQgYWRkIDEgMiAzIDQgNSA2ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKworCQlta2RpciA0L2EgJiYKKwkJc3ZuX2NtZCBhZGQgNC9hICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJuZXN0ZWQgZW1wdHkgZGlyZWN0b3J5IiAmJgorCQlta2RpciA0L2EvYiAmJgorCQlzdm5fY21kIGFkZCA0L2EvYiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiZGVlcGx5IG5lc3RlZCBlbXB0eSBkaXJlY3RvcnkiICYmCisJCW1rZGlyIDQvYS9iL2MgJiYKKwkJc3ZuX2NtZCBhZGQgNC9hL2IvYyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAicmVhbGx5IGRlZXBseSBuZXN0ZWQgZW1wdHkgZGlyZWN0b3J5IiAmJgorCQllY2hvICJLaWxsIHRoZSBwbGFjZWhvbGRlciBmaWxlIiA+IDQvYS9iL2MvZm9vICYmCisJCXN2bl9jbWQgYWRkIDQvYS9iL2MvZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJSZWd1bGFyIGZpbGUgdG8gcmVtb3ZlIHBsYWNlaG9sZGVyIiAmJgorCisJCXN2bl9jbWQgZGVsIDIvZmlsZTIudHh0ICYmCisJCXN2bl9jbWQgZGVsIDMvYiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiZGVsZXRlIG5vbi1sYXN0IGVudHJ5IGluIGRpcmVjdG9yeSIgJiYKKworCQlzdm5fY21kIGRlbCAyL2ZpbGUxLnR4dCAmJgorCQlzdm5fY21kIGRlbCAzL2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImRlbGV0ZSBsYXN0IGVudHJ5IGluIGRpcmVjdG9yeSIgJiYKKworCQllY2hvICJDb25mbGljdCBmaWxlIiA+IDUvLnBsYWNlaG9sZGVyICYmCisJCW1rZGlyIDYvLnBsYWNlaG9sZGVyICYmCisJCXN2bl9jbWQgYWRkIDUvLnBsYWNlaG9sZGVyIDYvLnBsYWNlaG9sZGVyICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJQbGFjZWhvbGRlciBOYW1lc3BhY2UgY29uZmxpY3QiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbyB3aXRoIC0tcHJlc2VydmUtZW1wdHktZGlycycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi90cnVuayAtLXByZXNlcnZlLWVtcHR5LWRpcnMgIiRHSVRfUkVQTyIKKycKKworIyAiJEdJVF9SRVBPIi8xIHNob3VsZCBvbmx5IGNvbnRhaW4gdGhlIHBsYWNlaG9sZGVyIGZpbGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3RvcnkgZW1wdHkgZnJvbSBpbmNlcHRpb24nICcKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzEvLmdpdGlnbm9yZSAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzEgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIgorJworCisjICIkR0lUX1JFUE8iLzIgYW5kICIkR0lUX1JFUE8iLzMgc2hvdWxkIG9ubHkgY29udGFpbiB0aGUgcGxhY2Vob2xkZXIgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdG9yeSBlbXB0eSBmcm9tIHN1YnNlcXVlbnQgc3ZuIGNvbW1pdCcgJworCXRlc3QgLWYgIiRHSVRfUkVQTyIvMi8uZ2l0aWdub3JlICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvMiAtdHlwZSBmIHwgd2MgLWwpID0gIjEiICYmCisJdGVzdCAtZiAiJEdJVF9SRVBPIi8zLy5naXRpZ25vcmUgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi8zIC10eXBlIGYgfCB3YyAtbCkgPSAiMSIKKycKKworIyBObyBwbGFjZWhvbGRlciBmaWxlcyBzaG91bGQgZXhpc3QgaW4gIiRHSVRfUkVQTyIvNCwgZXZlbiB0aG91Z2ggb25lIHdhcworIyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IHN1Yi1kaXJlY3RvcnkgYXQgc29tZSBwb2ludCBpbiB0aGUgcmVwbydzIGhpc3RvcnkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZW50cnkgdG8gcHJldmlvdXNseSBlbXB0eSBkaXJlY3RvcnknICcKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi80IC10eXBlIGYgfCB3YyAtbCkgPSAiMSIgJiYKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzQvYS9iL2MvZm9vCisnCisKKyMgVGhlIEhFQUR+MiBjb21taXQgc2hvdWxkIG5vdCBoYXZlIGludHJvZHVjZWQgLmdpdGlnbm9yZSBwbGFjZWhvbGRlciBmaWxlcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBub24tbGFzdCBlbnRyeSBmcm9tIGRpcmVjdG9yeScgJworCSgKKwkJY2QgIiRHSVRfUkVQTyIgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUR+MgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1mICIkR0lUX1JFUE8iLzIvLmdpdGlnbm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWYgIiRHSVRfUkVQTyIvMy8uZ2l0aWdub3JlCisnCisKKyMgQWZ0ZXIgcmUtY2xvbmluZyB0aGUgcmVwb3NpdG9yeSB3aXRoIC0tcGxhY2Vob2xkZXItZmlsZSBzcGVjaWZpZWQsIHRoZXJlCisjIHNob3VsZCBiZSA1IGZpbGVzIG5hbWVkICIucGxhY2Vob2xkZXIiIGluIHRoZSBsb2NhbCBHaXQgcmVwby4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvIHdpdGggLS1wbGFjZWhvbGRlci1maWxlIHNwZWNpZmllZCcgJworCXJtIC1yZiAiJEdJVF9SRVBPIiAmJgorCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi90cnVuayAtLXByZXNlcnZlLWVtcHR5LWRpcnMgXAorCQktLXBsYWNlaG9sZGVyLWZpbGU9LnBsYWNlaG9sZGVyICIkR0lUX1JFUE8iICYmCisJZmluZCAiJEdJVF9SRVBPIiAtdHlwZSBmIC1uYW1lICIucGxhY2Vob2xkZXIiICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIgLXR5cGUgZiAtbmFtZSAiLnBsYWNlaG9sZGVyIiB8IHdjIC1sKSA9ICI1IgorJworCisjICIkR0lUX1JFUE8iLzUvLnBsYWNlaG9sZGVyIHNob3VsZCBiZSBhIGZpbGUsIGFuZCBub24tZW1wdHkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFjZWhvbGRlciBuYW1lc3BhY2UgY29uZmxpY3Qgd2l0aCBmaWxlJyAnCisJdGVzdCAtcyAiJEdJVF9SRVBPIi81Ly5wbGFjZWhvbGRlcgorJworCisjICIkR0lUX1JFUE8iLzYvLnBsYWNlaG9sZGVyIHNob3VsZCBiZSBhIGRpcmVjdG9yeSwgYW5kIHRoZSAiJEdJVF9SRVBPIi82IHRyZWUKKyMgc2hvdWxkIG9ubHkgY29udGFpbiBvbmUgZmlsZTogdGhlIHBsYWNlaG9sZGVyLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhY2Vob2xkZXIgbmFtZXNwYWNlIGNvbmZsaWN0IHdpdGggZGlyZWN0b3J5JyAnCisJdGVzdCAtZCAiJEdJVF9SRVBPIi82Ly5wbGFjZWhvbGRlciAmJgorCXRlc3QgLWYgIiRHSVRfUkVQTyIvNi8ucGxhY2Vob2xkZXIvLnBsYWNlaG9sZGVyICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvNiAtdHlwZSBmIHwgd2MgLWwpID0gIjEiCisnCisKKyMgUHJlcGFyZSBhIHNlY29uZCBzZXQgb2Ygc3ZuIGNvbW1pdHMgdG8gdGVzdCBwZXJzaXN0ZW5jZSBkdXJpbmcgcmViYXNlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIHNldCBvZiBzdm4gY29tbWl0cyBhbmQgcmViYXNlJyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJFNWTl9UUkVFIiAmJgorCQlta2RpciAtcCA3ICYmCisJCWVjaG8gIlRoaXMgc2hvdWxkIHJlbW92ZSBwbGFjZWhvbGRlciIgPiAxL2ZpbGUxLnR4dCAmJgorCQllY2hvICJUaGlzIHNob3VsZCBub3QgcmVtb3ZlIHBsYWNlaG9sZGVyIiA+IDUvZmlsZTEudHh0ICYmCisJCXN2bl9jbWQgYWRkIDcgMS9maWxlMS50eHQgNS9maWxlMS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInN1YnNlcXVlbnQgc3ZuIGNvbW1pdCBmb3IgcGVyc2lzdGVuY2UgdGVzdHMiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRHSVRfUkVQTyIgJiYKKwkJZ2l0IHN2biByZWJhc2UKKwkpCisnCisKKyMgQ2hlY2sgdGhhdCAtLXByZXNlcnZlLWVtcHR5LWRpcnMgYW5kIC0tcGxhY2Vob2xkZXItZmlsZSBmbGFnIHN0YXRlCisjIHN0YXlzIHBlcnNpc3RlbnQgb3ZlciBtdWx0aXBsZSBpbnZvY2F0aW9ucy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZsYWcgcGVyc2lzdGVuY2UgZHVyaW5nIHN1YnNxZXVlbnQgcmViYXNlJyAnCisJdGVzdCAtZiAiJEdJVF9SRVBPIi83Ly5wbGFjZWhvbGRlciAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzcgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIgorJworCisjIENoZWNrIHRoYXQgcGxhY2Vob2xkZXIgZmlsZXMgYXJlIHByb3Blcmx5IHJlbW92ZWQgd2hlbiB1bm5lY2Vzc2FyeSwKKyMgZXZlbiBhY3Jvc3MgbXVsdGlwbGUgaW52b2NhdGlvbnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFjZWhvbGRlciBsaXN0IHBlcnNpc3RlbmNlIGR1cmluZyBzdWJzcWV1ZW50IHJlYmFzZScgJworCXRlc3QgLWYgIiRHSVRfUkVQTyIvMS9maWxlMS50eHQgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi8xIC10eXBlIGYgfCB3YyAtbCkgPSAiMSIgJiYKKworCXRlc3QgLWYgIiRHSVRfUkVQTyIvNS9maWxlMS50eHQgJiYKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzUvLnBsYWNlaG9sZGVyICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvNSAtdHlwZSBmIHwgd2MgLWwpID0gIjIiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2MS1naXQtc3ZuLW1lcmdlaW5mby1wdXNoLnNoIGIvdC90OTE2MS1naXQtc3ZuLW1lcmdlaW5mby1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxMTNhY2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTYxLWdpdC1zdm4tbWVyZ2VpbmZvLXB1c2guc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorIworIyBQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgU2FtIFZpbGFpbgorIyBQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIwMTEgQnJ5YW4gSmFjb2JzCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gc3ZuIG1lcmdlaW5mbyBwcm9wYWdhdGlvbicKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXAnICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgXAorCSAgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTYxL2JyYW5jaGVzLmR1bXAnICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIHN2bm1lcmdlIFwKKwkgIC1UIHRydW5rIC1iIGJyYW5jaGVzICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoIC0tYWxsCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wYWdhdGUgbWVyZ2UgaW5mb3JtYXRpb24nICcKKwlnaXQgY29uZmlnIHN2bi5wdXNobWVyZ2VpbmZvIHllcyAmJgorCWdpdCBjaGVja291dCBvcmlnaW4vc3ZuYjEgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBvcmlnaW4vc3ZuYjIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN2bjptZXJnZWluZm8nICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL2JyYW5jaGVzL3N2bmIxKSAmJgorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9zdm5iMjozLDgiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBhbm90aGVyIGJyYW5jaCcgJworCWdpdCBtZXJnZSAtLW5vLWZmIG9yaWdpbi9zdm5iMyAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcHJpbWFyeSBwYXJlbnQgbWVyZ2VpbmZvIHJlc3BlY3RlZCcgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvYnJhbmNoZXMvc3ZuYjEpICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL3N2bmIyOjMsOAorL2JyYW5jaGVzL3N2bmIzOjQsOSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGV4aXN0aW5nIG1lcmdlJyAnCisJZ2l0IG1lcmdlIC0tbm8tZmYgb3JpZ2luL3N2bmI0ICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayBib3RoIHBhcmVudHMnIG1lcmdlaW5mbyByZXNwZWN0ZWQiICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL2JyYW5jaGVzL3N2bmIxKSAmJgorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9zdm5iMjozLDgKKy9icmFuY2hlcy9zdm5iMzo0LDkKKy9icmFuY2hlcy9zdm5iNDo1LTYsMTAtMTIKKy9icmFuY2hlcy9zdm5iNTo2LDExIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBmdXJ0aGVyIGNvbW1pdHMgdG8gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IG9yaWdpbi9zdm5iMiAmJgorCXRvdWNoIG5ld2IyZmlsZSAmJgorCWdpdCBhZGQgbmV3YjJmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibGF0ZXIgYjIgY29tbWl0IiAmJgorCXRvdWNoIG5ld2IyZmlsZS0yICYmCisJZ2l0IGFkZCBuZXdiMmZpbGUtMiAmJgorCWdpdCBjb21taXQgLW0gImxhdGVyIGIyIGNvbW1pdCAyIiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIGZvcndhcmQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL3N2bmIxICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgb3JpZ2luL3N2bmIyICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBuZXcgbWVyZ2VpbmZvIGFkZGVkJyAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi9icmFuY2hlcy9zdm5iMSkgJiYKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvc3ZuYjI6Myw4LDE2LTE3CisvYnJhbmNoZXMvc3ZuYjM6NCw5CisvYnJhbmNoZXMvc3ZuYjQ6NS02LDEwLTEyCisvYnJhbmNoZXMvc3ZuYjU6NiwxMSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlaW50ZWdyYXRpb24gbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL3N2bmI0ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgb3JpZ2luL3N2bmIxICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZWludGVncmF0aW9uIG1lcmdlaW5mbycgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvYnJhbmNoZXMvc3ZuYjQpICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL3N2bmIxOjItNCw3LTksMTMtMTgKKy9icmFuY2hlcy9zdm5iMjozLDgsMTYtMTcKKy9icmFuY2hlcy9zdm5iMzo0LDkKKy9icmFuY2hlcy9zdm5iNTo2LDExIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBhIG1lcmdlIGF0IHRoZSB0b3Agb2YgYSBzdGFjaycgJworCWdpdCBjaGVja291dCBvcmlnaW4vc3ZuYjEgJiYKKwl0b3VjaCBhbm90aGVyZmlsZSAmJgorCWdpdCBhZGQgYW5vdGhlcmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhIGNvbW1pdCIgJiYKKwlnaXQgbWVyZ2Ugb3JpZ2luL3N2bmI0ICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjEvYnJhbmNoZXMuZHVtcCBiL3QvdDkxNjEvYnJhbmNoZXMuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjFjM2U3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2MS9icmFuY2hlcy5kdW1wCkBAIC0wLDAgKzEsMzc0IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiAxZWYwODU1My1mMmQxLTQ1ZGYtYjM4Yy0xOWFmNmI3YzkyNmQKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDg6MDIuOTQxMzg0WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE0CitDb250ZW50LWxlbmd0aDogMTE0CisKK0sgNworc3ZuOmxvZworViAxMgorQmFzZSBjb21taXQKKworSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA4OjI3LjIwNTA2MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTkKK0NyZWF0ZSBicmFuY2ggc3ZuYjEKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjowOTo0My42MjgxMzdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE5CitDcmVhdGUgYnJhbmNoIHN2bmIyCitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDk6NDYuMzM5OTMwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxOQorQ3JlYXRlIGJyYW5jaCBzdm5iMworSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA5OjQ5LjM5NDUxNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmIzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTkKK0NyZWF0ZSBicmFuY2ggc3ZuYjQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjowOTo1NC4xMTQ2MDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iNAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE5CitDcmVhdGUgYnJhbmNoIHN2bmI1CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDk6NTguNjAyNjIzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMSBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDoyMC4yOTIzNjlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMS9iMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMiBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDozOC40MjkxOTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMi9iMmZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMyBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDo1Mi44NDMwMjNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMy9iM2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMTAKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgOQorYjQgY29tbWl0CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MTE6MTcuNDg5ODcwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjQvYjRmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorVGV4dC1jb250ZW50LXNoYTE6IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDExCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDkKK2I1IGNvbW1pdAorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjExOjMyLjI3NzQwNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI1L2I1ZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK1RleHQtY29udGVudC1zaGExOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5CitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAxMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTkyCitDb250ZW50LWxlbmd0aDogMTkyCisKK0sgNworc3ZuOmxvZworViA5MAorTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnc3ZuYjUnIGludG8gSEVBRAorCisqIHN2bmI1OgorICBiNSBjb21taXQKKyAgQ3JlYXRlIGJyYW5jaCBzdm5iNQorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjExOjU0LjI3NDcyMloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDIxCisvYnJhbmNoZXMvc3ZuYjU6NiwxMQorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI0L2I1ZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK1RleHQtY29udGVudC1zaGExOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5CitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKwpkaWZmIC0tZ2l0IGEvdC90OTE2Mi1naXQtc3ZuLWRjb21taXQtaW50ZXJhY3RpdmUuc2ggYi90L3Q5MTYyLWdpdC1zdm4tZGNvbW1pdC1pbnRlcmFjdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzhkOWZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2Mi1naXQtc3ZuLWRjb21taXQtaW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSw2NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMSBGcsOpZMOpcmljIEhlaXR6bWFubgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSBzZXJpZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSJta2RpciB0ZXN0LWludGVyYWN0aXZlIiAiJHN2bnJlcG8vdGVzdC1pbnRlcmFjdGl2ZSIgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwby90ZXN0LWludGVyYWN0aXZlIiB0ZXN0LWludGVyYWN0aXZlICYmCisJY2QgdGVzdC1pbnRlcmFjdGl2ZSAmJgorCXRvdWNoIGZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tImZvbzogZmlyc3QgY29tbWl0IiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5zd2VyczogeSBbXG5dIHllcycgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJ5CisKK3kiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKQorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fuc3dlcnM6IHllcyB5ZXMgbm8nICcKKwkoCisJCWVjaG8gImNoYW5nZSAjMSIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMxIiAmJgorCQllY2hvICJjaGFuZ2UgIzIiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMiIgJiYKKwkJZWNobyAiY2hhbmdlICMzIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzMiICYmCisJCSggZWNobyAieWVzCit5ZXMKK25vIiB8IEdJVF9TVk5fTk9UVFk9MSBnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSApICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXl4pID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvZ2l0LXN2bikgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCByZW1vdGVzL2dpdC1zdm4KKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbnN3ZXJzOiB5ZXMgcXVpdCcgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJ5ZXMKK3F1aXQiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eXikgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHJlbW90ZXMvZ2l0LXN2bgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fuc3dlcnM6IGFsbCcgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJhbGwiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHJlbW90ZXMvZ2l0LXN2bgorCSkKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2My1naXQtc3ZuLXJlc2V0LWNsZWFycy1jYWNoZXMuc2ggYi90L3Q5MTYzLWdpdC1zdm4tcmVzZXQtY2xlYXJzLWNhY2hlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNjI0NWNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2My1naXQtc3ZuLXJlc2V0LWNsZWFycy1jYWNoZXMuc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBQZXRlciBCYXVtYW5uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcmVzZXQgY2xlYXJzIG1lbW9pemVkIGNhY2hlcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzdm5fdmVyPSIkKHN2biAtLXZlcnNpb24gLS1xdWlldCkiCitjYXNlICRzdm5fdmVyIGluCiswLiogfCAxLlswLTRdLiopCisJc2tpcF9hbGw9InNraXBwaW5nIGdpdC1zdm4gdGVzdCAtIFNWTiB0b28gb2xkICgkc3ZuX3ZlcikiCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKworIyAuLi4gYSAgLSAgYiAtIG0gICA8LSB0cnVuaworIyAgICAgIFwgICAgICAgLworIyAgICAgICAuLi4gYyAgICAgICA8LSBicmFuY2gxCisjCisjIFNWTiBDb21taXRzIG5vdCBpbnRlcmVzdGluZyBmb3IgdGhpcyB0ZXN0IGFyZSBhYmJyZXZpYXRlZCB3aXRoICIuLi4iCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSB0cnVuayIgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSBicmFuY2hlcyIgIiRzdm5yZXBvL2JyYW5jaGVzIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYSIgJiYKKwkJc3ZuX2NtZCBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXRvdWNoIGJhciAmJgorCQlzdm5fY21kIGFkZCBiYXIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXRvdWNoIGJheiAmJgorCQlzdm5fY21kIGFkZCBiYXogJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYyAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbWVyZ2UgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtIgorCSkgJiYKKwlybSAtcmYgIiRTVk5fVFJFRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdG8gbWVyZ2UtYmFzZSAoYSknICcKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggLS1yZXZpc2lvbiBCQVNFOjMKKycKKworIyBnaXQgc3ZuIHJlYmFzZSBsb29zZXMgdGhlIG1lcmdlIGNvbW1pdAorIworIyAuLi4gYSAgLSAgYiAtIG0gIDwtIHRydW5rCisjICAgICAgXAorIyAgICAgICAuLi4gYworIwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGxvb3NlcyBTVk4gbWVyZ2UgKG0pJyAnCisJZ2l0IHN2biByZWJhc2UgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgLXAgbWFzdGVyfGdyZXAgcGFyZW50fHdjIC1sKQorJworCisjIGdpdCBzdm4gZmV0Y2ggY3JlYXRlcyBjb3JyZWN0IGhpc3Rvcnkgd2l0aCBtZXJnZSBjb21taXQKKyMKKyMgLi4uIGEgIC0gIGIgLSBtICA8LSB0cnVuaworIyAgICAgIFwgICAgICAgLworIyAgICAgICAuLi4gYyAgICAgIDwtIGJyYW5jaDEKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IGFuZCBmZXRjaCBnZXRzIHRoZSBTVk4gbWVyZ2UgKG0pIGNvcnJlY3RseScgJworCWdpdCBzdm4gcmVzZXQgLXIgMyAmJgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCXRlc3QgMiA9ICQoZ2l0IGNhdC1maWxlIC1wIG9yaWdpbi90cnVua3xncmVwIHBhcmVudHx3YyAtbCkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTY0LWdpdC1zdm4tZGNvbW1pdC1jb25jdXJyZW50LnNoIGIvdC90OTE2NC1naXQtc3ZuLWRjb21taXQtY29uY3VycmVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MDM0NmZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2NC1naXQtc3ZuLWRjb21taXQtY29uY3VycmVudC5zaApAQCAtMCwwICsxLDIxNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBSb2JlcnQgTHViZXJkYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb25jdXJyZW50IGdpdCBzdm4gZGNvbW1pdCcKKy4gLi9saWItZ2l0LXN2bi5zaAorCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG9zaXRvcnknICcKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwbyIgd29yay5zdm4gJiYKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCWVjaG8gPmZpbGUgJiYgZWNobyA+IGF1dG9fdXBkYXRlZF9maWxlICYmCisJCXN2bl9jbWQgYWRkIGZpbGUgYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IgorCSkgJiYKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwbyIgd29yay1hdXRvLWNvbW1pdHMuc3ZuCisnCitOPTAKK25leHRfTigpCit7CisJTj0kKCggJE4gKyAxICkpCit9CisKKyMgU2V0dXAgU1ZOIHJlcG9zaXRvcnkgaG9va3MgdG8gZW11bGF0ZSBTVk4gZmFpbHVyZXMgb3IgY29uY3VycmVudCBjb21taXRzCisjIFRoZSBmdW5jdGlvbiBhZGRzCisjIGVpdGhlciBwcmUtY29tbWl0ICBob29rLCB3aGljaCBjYXVzZXMgU1ZOIGNvbW1pdCBnaXZlbiBpbiBzZWNvbmQgYXJndW1lbnQKKyMgICAgICAgICAgICAgICAgICAgIHRvIGZhaWwKKyMgb3IgICAgIHBvc3QtY29tbWl0IGhvb2ssIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29tbWl0IChhIG5ldyBsaW5lIGFkZGVkIHRvCisjICAgICAgICAgICAgICAgICAgICBhdXRvX3VwZGF0ZWRfZmlsZSkgYWZ0ZXIgZ2l2ZW4gU1ZOIGNvbW1pdAorIyBUaGUgZmlyc3QgYXJndW1lbnQgY29udGFpbnMgYSB0eXBlIG9mIHRoZSBob29rCisjIFRoZSBzZWNvbmQgYXJndW1lbnQgY29udGFpbnMgYSBudW1iZXIgKG5vdCBTVk4gcmV2aXNpb24pIG9mIGNvbW1pdAorIyB0aGUgaG9vayBzaG91bGQgYmUgYXBwbGllZCBmb3IgKGVhY2ggdGltZSB0aGUgaG9vayBpcyBydW4sIHRoZSBnaXZlbgorIyBudW1iZXIgaXMgZGVjcmVhc2VkIGJ5IG9uZSB1bnRpbCBpdCBnZXRzIDAsIGluIHdoaWNoIGNhc2UgdGhlIGhvb2sKKyMgd2lsbCBleGVjdXRlIGl0cyByZWFsIGFjdGlvbikKK3NldHVwX2hvb2soKQoreworCWhvb2tfdHlwZT0iJDEiICAjICJwcmUtY29tbWl0IiBvciAicG9zdC1jb21taXQiCisJc2tpcF9yZXZzPSIkMiIKKwlbICIkaG9va190eXBlIiA9ICJwcmUtY29tbWl0IiBdIHx8CisJCVsgIiRob29rX3R5cGUiID0gInBvc3QtY29tbWl0IiBdIHx8CisJCXsgZWNobyAiRVJST1I6IGludmFsaWQgYXJndW1lbnQgKCRob29rX3R5cGUpIiBcCisJCQkicGFzc2VkIHRvIHNldHVwX2hvb2siID4mMiA7IHJldHVybiAxOyB9CisJZWNobyAiY250PSRza2lwX3JldnMiID4gIiRob29rX3R5cGUtY291bnRlciIKKwlybSAtZiAiJHJhd3N2bnJlcG8vaG9va3MvIiotY29tbWl0ICMgZHJvcCBwcmV2aW91cyBob29rcworCWhvb2s9IiRyYXdzdm5yZXBvL2hvb2tzLyRob29rX3R5cGUiCisJY2F0ID4gIiRob29rIiA8PC0gJ0VPRjEnCisJCSMhL2Jpbi9zaAorCQlzZXQgLWUKKwkJY2QgIiQxLy4uIiAgIyAiJDEiIGlzIHJlcG9zaXRvcnkgbG9jYXRpb24KKwkJZXhlYyA+PiBzdm4taG9vay5sb2cgMj4mMQorCQlob29rPSIkKGJhc2VuYW1lICIkMCIpIgorCQllY2hvICIqKiogRXhlY3V0aW5nICRob29rICRAIgorCQlzZXQgLXgKKwkJLiAuLyRob29rLWNvdW50ZXIKKwkJY250PSIkKCgkY250IC0gMSkpIgorCQllY2hvICJjbnQ9JGNudCIgPiAuLyRob29rLWNvdW50ZXIKKwkJWyAiJGNudCIgPSAiMCIgXSB8fCBleGl0IDAKK0VPRjEKKwlpZiBbICIkaG9va190eXBlIiA9ICJwcmUtY29tbWl0IiBdOyB0aGVuCisJCWVjaG8gImVjaG8gJ2NvbW1pdCBkaXNhbGxvd2VkJyA+JjI7IGV4aXQgMSIgPj4iJGhvb2siCisJZWxzZQorCQllY2hvICJQQVRIPVwiJFBBVEhcIjsgZXhwb3J0IFBBVEgiID4+IiRob29rIgorCQllY2hvICJzdm5jb25mPVwiJHN2bmNvbmZcIiIgPj4iJGhvb2siCisJCWNhdCA+PiIkaG9vayIgPDwtICdFT0YyJworCQkJY2Qgd29yay1hdXRvLWNvbW1pdHMuc3ZuCisJCQlzdm4gdXAgLS1jb25maWctZGlyICIkc3ZuY29uZiIKKwkJCWVjaG8gIiQkIiA+PiBhdXRvX3VwZGF0ZWRfZmlsZQorCQkJc3ZuIGNvbW1pdCAtLWNvbmZpZy1kaXIgIiRzdm5jb25mIiBcCisJCQkJLW0gImF1dG8tY29tbWl0dGluZyBjb25jdXJyZW50IGNoYW5nZSIKKwkJCWV4aXQgMAorRU9GMgorCWZpCisJY2htb2QgNzU1ICIkaG9vayIKK30KKworY2hlY2tfY29udGVudHMoKQoreworCWdpdGRpcj0iJDEiCisJKGNkIC4uL3dvcmsuc3ZuICYmIHN2bl9jbWQgdXApICYmCisJdGVzdF9jbXAgZmlsZSAuLi93b3JrLnN2bi9maWxlICYmCisJdGVzdF9jbXAgYXV0b191cGRhdGVkX2ZpbGUgLi4vd29yay5zdm4vYXV0b191cGRhdGVkX2ZpbGUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgcG9zdC1jb21taXQgaG9vayBjcmVhdGVzIGEgY29uY3VycmVudCBjb21taXQnICcKKwlzZXR1cF9ob29rIHBvc3QtY29tbWl0IDEgJiYKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCWNwIGF1dG9fdXBkYXRlZF9maWxlIGF1X2ZpbGVfc2F2ZWQgJiYKKwkJZWNobyAxID4+IGZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNoYW5naW5nIGZpbGUiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdF9jbXAgYXV0b191cGRhdGVkX2ZpbGUgYXVfZmlsZV9zYXZlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgcHJlLWNvbW1pdCBob29rIGZhaWxzJyAnCisJc2V0dXBfaG9vayBwcmUtY29tbWl0IDIgJiYKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCWVjaG8gMiA+PiBmaWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjaGFuZ2luZyBmaWxlIG9uY2UgYWdhaW4iICYmCisJCWVjaG8gMyA+PiBmaWxlICYmCisJCXRlc3RfbXVzdF9mYWlsIHN2bl9jbWQgY29tbWl0IC1tICJ0aGlzIGNvbW1pdCBzaG91bGQgZmFpbCIgJiYKKwkJc3ZuX2NtZCByZXZlcnQgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBlcnJvciBoYW5kbGluZycgJworCXNldHVwX2hvb2sgcHJlLWNvbW1pdCAyICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWVjaG8gMSA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjEiICYmCisJCWVjaG8gMiA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjIiICYmCisJCWVjaG8gMyA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjMiICYmCisJCSMgc2hvdWxkIGZhaWwgdG8gZGNvbW1pdCAybmQgYW5kIDNyZCBjaGFuZ2UKKwkJIyBidXQgc3RpbGwgc2hvdWxkIGxlYXZlIHRoZSByZXBvc2l0b3J5IGluIHJlYXNvbmFibGUgc3RhdGUKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0ICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJCWdpdCBzaG93IEhFQUR+MiAgIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCSEgZ2l0IHNob3cgSEVBRH4xIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCSEgZ2l0IHNob3cgSEVBRCAgIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGNvbmN1cnJlbnQgY2hhbmdlIGluIG5vbi1jaGFuZ2VkIGZpbGUnICcKKwlzZXR1cF9ob29rIHBvc3QtY29tbWl0IDIgJiYKKwluZXh0X04gJiYgZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIHdvcmskTi5naXQgJiYKKwkoCisJCWNkIHdvcmskTi5naXQgJiYKKwkJZWNobyAxID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMSIgJiYKKwkJZWNobyAyID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMiIgJiYKKwkJZWNobyAzID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMyIgJiYKKwkJIyBzaG91bGQgcmViYXNlIGFuZCBsZWF2ZSB0aGUgcmVwb3NpdG9yeSBpbiByZWFzb25hYmxlIHN0YXRlCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCQljaGVja19jb250ZW50cyAmJgorCQlnaXQgc2hvdyBIRUFEfjMgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJZ2l0IHNob3cgSEVBRH4yIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCWdpdCBzaG93IEhFQUR+MSB8IGdyZXAgLXEgYXV0by1jb21taXR0aW5nICYmCisJCWdpdCBzaG93IEhFQUQgICB8IGdyZXAgLXEgZ2l0LXN2bi1pZAorCSkKKycKKworIyBBbiB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgaW4gdGhlIGZvbGxvd2luZyB0ZXN0CitkZWxldGVfZmlyc3RfbGluZSgpCit7CisJZmlsZT0iJDEiICYmCisJc2VkIDFkIDwgIiRmaWxlIiA+ICIke2ZpbGV9LnRtcCIgJiYKKwlybSAiJGZpbGUiICYmCisJbXYgIiR7ZmlsZX0udG1wIiAiJGZpbGUiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgY29uY3VycmVudCBub24tY29uZmxpY3RpbmcgY2hhbmdlJyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAyICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWNhdCBmaWxlID4+IGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4xIiAmJgorCQlkZWxldGVfZmlyc3RfbGluZSBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMiIgJiYKKwkJZGVsZXRlX2ZpcnN0X2xpbmUgYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjMiICYmCisJCSMgc2hvdWxkIHJlYmFzZSBhbmQgbGVhdmUgdGhlIHJlcG9zaXRvcnkgaW4gcmVhc29uYWJsZSBzdGF0ZQorCQlnaXQgc3ZuIGRjb21taXQgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkJY2hlY2tfY29udGVudHMgJiYKKwkJZ2l0IHNob3cgSEVBRH4zIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCWdpdCBzaG93IEhFQUR+MiB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQlnaXQgc2hvdyBIRUFEfjEgfCBncmVwIC1xIGF1dG8tY29tbWl0dGluZyAmJgorCQlnaXQgc2hvdyBIRUFEICAgfCBncmVwIC1xIGdpdC1zdm4taWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgLS1uby1yZWJhc2UgY29uY3VycmVudCBub24tY29uZmxpY3RpbmcgY2hhbmdlJyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAyICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWNhdCBmaWxlID4+IGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4xIiAmJgorCQlkZWxldGVfZmlyc3RfbGluZSBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMiIgJiYKKwkJZGVsZXRlX2ZpcnN0X2xpbmUgYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjMiICYmCisJCSMgc2hvdWxkIGZhaWwgYXMgcmViYXNlIGlzIG5lZWRlZAorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGRjb21taXQgLS1uby1yZWJhc2UgJiYKKwkJIyBidXQgc2hvdWxkIGxlYXZlIEhFQUQgdW5jaGFuZ2VkCisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJCSEgZ2l0IHNob3cgSEVBRH4yIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCSEgZ2l0IHNob3cgSEVBRH4xIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCSEgZ2l0IHNob3cgSEVBRCAgIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGZhaWxzIG9uIGNvbmN1cnJlbnQgY29uZmxpY3RpbmcgY2hhbmdlJyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAxICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWVjaG8gYSA+PiBmaWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4xIiAmJgorCQllY2hvIGIgPj4gYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjIiICYmCisJCWVjaG8gYyA+PiBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMyIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0ICYmICMgcmViYXNlIHNob3VsZCBmYWlsCisJCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjUtZ2l0LXN2bi1mZXRjaC1tZXJnZS1icmFuY2gtb2YtYnJhbmNoLnNoIGIvdC90OTE2NS1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQ4MTNjMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjUtZ2l0LXN2bi1mZXRjaC1tZXJnZS1icmFuY2gtb2YtYnJhbmNoLnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgU3RldmVuIFdhbHRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIG1lcmdlIGRldGVjdGlvbicKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzdm5fdmVyPSIkKHN2biAtLXZlcnNpb24gLS1xdWlldCkiCitjYXNlICRzdm5fdmVyIGluCiswLiogfCAxLlswLTRdLiopCisJc2tpcF9hbGw9InNraXBwaW5nIGdpdC1zdm4gdGVzdCAtIFNWTiB0b28gb2xkICgkc3ZuX3ZlcikiCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8nICcKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL2JyYW5jaGVzICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJFNWTl9UUkVFIiAmJgorCQl0b3VjaCBmb28gJiYKKwkJc3ZuX2NtZCBhZGQgZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwkJc3ZuX2NtZCBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXRvdWNoIGJhciAmJgorCQlzdm5fY21kIGFkZCBiYXIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYnJhbmNoMSAmJgorCQlzdm5fY21kIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQl0b3VjaCBiYXogJiYKKwkJc3ZuX2NtZCBhZGQgYmF6ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tIGJyYW5jaDIgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi90cnVuayAmJgorCQl0b3VjaCBiYXIyICYmCisJCXN2bl9jbWQgYWRkIGJhcjIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gdHJ1bmsgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXN2bl9jbWQgbWVyZ2UgIiRzdm5yZXBvIi90cnVuayAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibWVyZ2UgdHJ1bmsiICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwkJc3ZuX2NtZCBtZXJnZSAtLXJlaW50ZWdyYXRlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibWVyZ2UgYnJhbmNoMiIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvJyAnCisJZ2l0IHN2biBpbml0IC1zICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSBjb21taXQnICd4PSQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpICYmCisJeT0kKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2JyYW5jaDIpICYmCisJdGVzdCAieCR4IiA9ICJ4JHkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2Ni1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2gyLnNoIGIvdC90OTE2Ni1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2gyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUyZjJlNDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTY2LWdpdC1zdm4tZmV0Y2gtbWVyZ2UtYnJhbmNoLW9mLWJyYW5jaDIuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBTdGV2ZW4gV2FsdGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbWVyZ2UgZGV0ZWN0aW9uJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3N2bl92ZXI9IiQoc3ZuIC0tdmVyc2lvbiAtLXF1aWV0KSIKK2Nhc2UgJHN2bl92ZXIgaW4KKzAuKiB8IDEuWzAtNF0uKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgZ2l0LXN2biB0ZXN0IC0gU1ZOIHRvbyBvbGQgKCRzdm5fdmVyKSIKKwl0ZXN0X2RvbmUKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvYnJhbmNoZXMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCXRvdWNoIGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCQlzdm5fY21kIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJdG91Y2ggYmFyICYmCisJCXN2bl9jbWQgYWRkIGJhciAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSBicmFuY2gxICYmCisJCXN2bl9jbWQgY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXRvdWNoIGJheiAmJgorCQlzdm5fY21kIGFkZCBiYXogJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYnJhbmNoMiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXN2bl9jbWQgbWVyZ2UgLS1yZWludGVncmF0ZSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1lcmdlIGJyYW5jaDIiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbycgJworCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgY29tbWl0JyAneD0kKGdpdCByZXYtcGFyc2UgSEVBRF4yKSAmJgorCXk9JChnaXQgcmV2LXBhcnNlIG9yaWdpbi9icmFuY2gyKSAmJgorCXRlc3QgIngkeCIgPSAieCR5IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjctZ2l0LXN2bi1jbWQtYnJhbmNoLXN1YnByb2plY3Quc2ggYi90L3Q5MTY3LWdpdC1zdm4tY21kLWJyYW5jaC1zdWJwcm9qZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhMzVmYzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTY3LWdpdC1zdm4tY21kLWJyYW5jaC1zdWJwcm9qZWN0LnNoCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgVG9iaWFzIFNjaHVsdGUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBicmFuY2ggZm9yIHN1YnByb2plY3QgY2xvbmVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc3ZucmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCW1rZGlyIC1wIHRydW5rL3Byb2plY3QgYnJhbmNoZXMgdGFncyAmJgorCQkoCisJCQljZCB0cnVuay9wcm9qZWN0ICYmCisJCQllY2hvIGZvbyA+IGZvbworCQkpICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCisJKSAmJgorCXJtIC1yZiBpbXBvcnQgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsvcHJvamVjdCB0cnVuay9wcm9qZWN0ICYmCisJKAorCQljZCB0cnVuay9wcm9qZWN0ICYmCisJCWVjaG8gYmFyID4+IGZvbyAmJgorCQlzdm5fY21kIGNpIC1tICJ1cGRhdGVkIHRydW5rIgorCSkgJiYKKwlybSAtcmYgdHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGludG8gZ2l0JyAnCisJZ2l0IHN2biBpbml0IC0tdHJ1bms9dHJ1bmsvcHJvamVjdCAtLWJyYW5jaGVzPWJyYW5jaGVzLyovcHJvamVjdCBcCisJCS0tdGFncz10YWdzLyovcHJvamVjdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBjaGVja291dCByZW1vdGVzL29yaWdpbi90cnVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGJyYW5jaCB0ZXN0cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIGEgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtLXBhcmVudHMgYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIC10IHRhZzEgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtLXBhcmVudHMgLXQgdGFnMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIC0tdGFnIHRhZzIgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtLXBhcmVudHMgLS10YWcgdGFnMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gdGFnIHRhZzMgJiYKKwlnaXQgc3ZuIHRhZyAtLXBhcmVudHMgdGFnMworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjgtZ2l0LXN2bi1wYXJ0aWFsbHktZ2xvYmJlZC1uYW1lcy5zaCBiL3QvdDkxNjgtZ2l0LXN2bi1wYXJ0aWFsbHktZ2xvYmJlZC1uYW1lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZGY2ZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2OC1naXQtc3ZuLXBhcnRpYWxseS1nbG9iYmVkLW5hbWVzLnNoCkBAIC0wLDAgKzEsMjI5IEBACisjIS9iaW4vc2gKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gZ2xvYmJpbmcgcmVmc3BlY3Mgd2l0aCBwcmVmaXhlZCBnbG9icycKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHRlc3QgcmVmc3BlYyBwcmVmaXhlZCBnbG9iYmluZycgJworCWNhdCA+ZXhwZWN0LmVuZCA8PEVPRgordGhlIGVuZAoraGkKK3N0YXJ0IGEgbmV3IGJyYW5jaAoraW5pdGlhbAorRU9GCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlZnNwZWMgcHJlZml4ZWQgZ2xvYmJpbmcnICcKKwlta2RpciAtcCB0cnVuay9zcmMvYSB0cnVuay9zcmMvYiB0cnVuay9kb2MgJiYKKwllY2hvICJoZWxsbyB3b3JsZCIgPnRydW5rL3NyYy9hL3JlYWRtZSAmJgorCWVjaG8gImdvb2RieWUgd29ybGQiID50cnVuay9zcmMvYi9yZWFkbWUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKKwkoCisJCWNkIHRtcCAmJgorCQlta2RpciBicmFuY2hlcyB0YWdzICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy9iX3N0YXJ0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJzdGFydCBhIG5ldyBicmFuY2giICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyAiaGkiID4+YnJhbmNoZXMvYl9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy9iX3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJoZXkiID4+YnJhbmNoZXMvYl9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy9iX3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaGkiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBjcCBicmFuY2hlcy9iX3N0YXJ0IHRhZ3MvdF9lbmQgJiYKKwkJZWNobyAiYnllIiA+PnRhZ3MvdF9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy90X2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiYXllIiA+PnRhZ3MvdF9lbmQvc3JjL2EvcmVhZG1lICYmCisJCXBva2UgdGFncy90X2VuZC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRoZSBlbmQiICYmCisJCWVjaG8gImJ5ZWJ5ZSIgPj50YWdzL3RfZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvdF9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgorCSkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJCQkgInRydW5rL3NyYy9hOnJlZnMvcmVtb3Rlcy90cnVuayIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKKwkJCSAiYnJhbmNoZXMvYl8qL3NyYy9hOnJlZnMvcmVtb3Rlcy9icmFuY2hlcy9iXyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi50YWdzXAorCQkJICJ0YWdzL3RfKi9zcmMvYTpyZWZzL3JlbW90ZXMvdGFncy90XyoiICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdGFncy90X2VuZCA+YWN0dWFsICYmCisJc2VkIC1lICJzL14uXHs0MVx9Ly8iIGFjdHVhbCA+b3V0cHV0LmVuZCAmJgorCXRlc3RfY21wIGV4cGVjdC5lbmQgb3V0cHV0LmVuZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy90X2VuZH4xKSIgPSBcCisJCSIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL2Jfc3RhcnQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvYl9zdGFydH4yKSIgPSBcCisJCSIkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RydW5rKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90YWdzL3RfZW5kQDMKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgdGVzdCBsZWZ0LWhhbmQtc2lkZSBvbmx5IHByZWZpeGVkIGdsb2JiaW5nJyAnCisJZWNobyB0cnkgdG8gdHJ5ID5leHBlY3QudHdvICYmCisJZWNobyBub3RoaW5nIHRvIHNlZSBoZXJlID4+ZXhwZWN0LnR3byAmJgorCWNhdCBleHBlY3QuZW5kID4+ZXhwZWN0LnR3bworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBsZWZ0LWhhbmQtc2lkZSBvbmx5IHByZWZpeGVkIGdsb2JiaW5nJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uZmV0Y2ggdHJ1bms6cmVmcy9yZW1vdGVzL3R3by90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uYnJhbmNoZXMgXAorCQkJICJicmFuY2hlcy9iXyo6cmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28udGFncyBcCisJCQkgInRhZ3MvdF8qOnJlZnMvcmVtb3Rlcy90d28vdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+dGFncy90X2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL3RfZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJZ2l0IHN2biBmZXRjaCB0d28gJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by90YWdzL3RfZW5kID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA2IGFjdHVhbCAmJgorCWdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL2Jfc3RhcnQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy9iX3N0YXJ0fjIpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdHJ1bmspICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90YWdzL3RfZW5kfjMpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvYl9zdGFydCkgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3R3by90YWdzL3RfZW5kID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXi5cezQxXH0vLyIgYWN0dWFsID5vdXRwdXQudHdvICYmCisJdGVzdF9jbXAgZXhwZWN0LnR3byBvdXRwdXQudHdvCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHRlc3QgcHJlZml4ZWQgZ2xvYnMgbWF0Y2gganVzdCBwcmVmaXgnICcKKwljYXQgPmV4cGVjdC50aHJlZSA8PEVPRgorVGFnIGNvbW1pdCB0byB0XworQnJhbmNoIGNvbW1pdCB0byBiXworaW5pdGlhbAorRU9GCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHByZWZpeGVkIGdsb2JzIG1hdGNoIGp1c3QgcHJlZml4JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLmZldGNoIFwKKwkJCSB0cnVuazpyZWZzL3JlbW90ZXMvdGhyZWUvdHJ1bmsgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUuYnJhbmNoZXMgXAorCQkJICJicmFuY2hlcy9iXyo6cmVmcy9yZW1vdGVzL3RocmVlL2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLnRhZ3MgXAorCQkJICJ0YWdzL3RfKjpyZWZzL3JlbW90ZXMvdGhyZWUvdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvYl8gJiYKKwkJZWNobyAiQnJhbmNoIGNvbW1pdCB0byBiXyIgPj5icmFuY2hlcy9iXy9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy9iXy9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkJyYW5jaCBjb21taXQgdG8gYl8iICYmCisJCXN2bl9jbWQgdXAgJiYgc3ZuX2NtZCBjcCBicmFuY2hlcy9iXyB0YWdzL3RfICYmCisJCWVjaG8gIlRhZyBjb21taXQgdG8gdF8iID4+dGFncy90Xy9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL3RfL3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiVGFnIGNvbW1pdCB0byB0XyIgJiYKKwkJc3ZuX2NtZCB1cAorCSkgJiYKKwlnaXQgc3ZuIGZldGNoIHRocmVlICYmCisJZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90aHJlZS9icmFuY2hlcy9iXyA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwgJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3RocmVlL3RhZ3MvdF8gPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RocmVlL2JyYW5jaGVzL2JffjEpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90aHJlZS90cnVuaykgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGhyZWUvdGFncy90X34xKSA9IFwKKwkgICAgICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGhyZWUvYnJhbmNoZXMvYl8pICYmCisJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy90aHJlZS90YWdzL3RfID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXi5cezQxXH0vLyIgYWN0dWFsID5vdXRwdXQudGhyZWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGhyZWUgb3V0cHV0LnRocmVlCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHRlc3QgZGlzYWxsb3cgcHJlZml4ZWQgbXVsdGktZ2xvYnMnICIKK2NhdCA+ZXhwZWN0LmZvdXIgPDxFT0YKK09ubHkgb25lIHNldCBvZiB3aWxkY2FyZHMgKGUuZy4gJyonIG9yICcqLyovKicpIGlzIHN1cHBvcnRlZDogYnJhbmNoZXMvYl8qL3QvKgorCitFT0YKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGlzYWxsb3cgcHJlZml4ZWQgbXVsdGktZ2xvYnMnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZm91ci51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLmZldGNoIFwKKwkJCSB0cnVuazpyZWZzL3JlbW90ZXMvZm91ci90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLmJyYW5jaGVzIFwKKwkJCSAiYnJhbmNoZXMvYl8qL3QvKjpyZWZzL3JlbW90ZXMvZm91ci9icmFuY2hlcy8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLnRhZ3MgXAorCQkJICJ0YWdzL3RfKi8qOnJlZnMvcmVtb3Rlcy9mb3VyL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PnRhZ3MvdF9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy90X2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggZm91ciAyPnN0ZGVyci5mb3VyICYmCisJdGVzdF9jbXAgZXhwZWN0LmZvdXIgc3RkZXJyLmZvdXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5mb3VyLmJyYW5jaGVzICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuZm91ci50YWdzCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHRlc3QgZ2xvYmJpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgd29yZCcgJworCWNhdCA+ZXhwZWN0LmZpdmUgPDxFT0YKK1RhZyBjb21taXQgdG8gZmdoaWoKK0JyYW5jaCBjb21taXQgdG8gYWJjZGUKK2luaXRpYWwKK0VPRgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBnbG9iYmluZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSB3b3JkJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZpdmUudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZml2ZS5mZXRjaCBcCisJCQkgdHJ1bms6cmVmcy9yZW1vdGVzL2ZpdmUvdHJ1bmsgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZml2ZS5icmFuY2hlcyBcCisJCQkgImJyYW5jaGVzL2EqZTpyZWZzL3JlbW90ZXMvZml2ZS9icmFuY2hlcy8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5maXZlLnRhZ3MgXAorCQkJICJ0YWdzL2YqajpyZWZzL3JlbW90ZXMvZml2ZS90YWdzLyoiICYmCisJKAorCQljZCB0bXAgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy9hYmNkZSAmJgorCQllY2hvICJCcmFuY2ggY29tbWl0IHRvIGFiY2RlIiA+PmJyYW5jaGVzL2FiY2RlL3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL2JfL3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiQnJhbmNoIGNvbW1pdCB0byBhYmNkZSIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL2FiY2RlIHRhZ3MvZmdoaWogJiYKKwkJZWNobyAiVGFnIGNvbW1pdCB0byBmZ2hpaiIgPj50YWdzL2ZnaGlqL3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZmdoaWovc3JjL2EvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJUYWcgY29tbWl0IHRvIGZnaGlqIiAmJgorCQlzdm5fY21kIHVwCisJKSAmJgorCWdpdCBzdm4gZmV0Y2ggZml2ZSAmJgorCWdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZml2ZS9icmFuY2hlcy9hYmNkZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBhY3R1YWwgJiYKKwlnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL2ZpdmUvdGFncy9mZ2hpaiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZml2ZS9icmFuY2hlcy9hYmNkZX4xKSA9IFwKKwkgICAgICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZml2ZS90cnVuaykgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZml2ZS90YWdzL2ZnaGlqfjEpID0gXAorCSAgICAgJChnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9maXZlL2JyYW5jaGVzL2FiY2RlKSAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvZml2ZS90YWdzL2ZnaGlqID5hY3R1YWwgJiYKKwlzZWQgLWUgInMvXi5cezQxXH0vLyIgYWN0dWFsID5vdXRwdXQuZml2ZSAmJgorCXRlc3RfY21wIGV4cGVjdC5maXZlIG91dHB1dC5maXZlCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHRlc3QgZGlzYWxsb3cgbXVsdGlwbGUgYXN0ZXJpc2tzIGluIG9uZSB3b3JkJyAiCisJZWNobyBcIk9ubHkgb25lICcqJyBpcyBhbGxvd2VkIGluIGEgcGF0dGVybjogJ2EqYyplJ1wiID5leHBlY3Quc2l4ICYmCisJZWNobyBcIlwiID4+ZXhwZWN0LnNpeAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkaXNhbGxvdyBtdWx0aXBsZSBhc3Rlcmlza3MgaW4gb25lIHdvcmQnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc2l4LnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnNpeC5mZXRjaCBcCisJCQkgdHJ1bms6cmVmcy9yZW1vdGVzL3NpeC90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zaXguYnJhbmNoZXMgXAorCQkJICJicmFuY2hlcy9hKmMqZTpyZWZzL3JlbW90ZXMvc2l4L2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnNpeC50YWdzIFwKKwkJCSAidGFncy9mKmgqajpyZWZzL3JlbW90ZXMvc2l4L3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PnRhZ3MvZmdoaWovc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9mZ2hpai9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggc2l4IDI+c3RkZXJyLnNpeCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaXggc3RkZXJyLnNpeAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTY5LWdpdC1zdm4tZGNvbW1pdC1jcmxmLnNoIGIvdC90OTE2OS1naXQtc3ZuLWRjb21taXQtY3JsZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NGIxZjYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2OS1naXQtc3ZuLWRjb21taXQtY3JsZi5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IENSTEYnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0IHJlcG9zaXRvcnknICcKKwlzdm5fY21kIG1rZGlyIC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgIiRzdm5yZXBvL2RpciIgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgd29yayAmJgorCSgKKwkJY2Qgd29yayAmJgorCQllY2hvIGZvbyA+PmZvbyAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyAmJgorCQlwcmludGYgImFcXHJcXG5cXHJcXG5iXFxyXFxuY1xcclxcbiIgPmNtdCAmJgorCQlwPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQl0PSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCWNtdD0kKGdpdCBjb21taXQtdHJlZSAtcCAkcCAkdCA8Y210KSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciAkY210ICYmCisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHRhaWwgLW40ID5vdXQgJiYKKwkJdGVzdF9jbXAgY210IG91dCAmJgorCQlnaXQgc3ZuIGRjb21taXQgJiYKKwkJcHJpbnRmICJhXFxuXFxuYlxcbmNcXG4iID5leHAgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSA2LDlwID5vdXQgJiYKKwkJdGVzdF9jbXAgZXhwIG91dAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2ggYi90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzU5NDZjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaApAQCAtMCwwICsxLDM0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgUm9iaW4gUm9zZW5iZXJnCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGV4cG9ydCBvZiBjb21taXRzIHRvIENWUycKKworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBjdnNleHBvcnRjb21taXQgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK2N2cyA+L2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgJD8gLW5lIDEKK3RoZW4KKyAgICBza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IGN2c2V4cG9ydGNvbW1pdCB0ZXN0cywgY3ZzIG5vdCBmb3VuZCcKKyAgICB0ZXN0X2RvbmUKK2ZpCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBOT1RfUk9PVDsgdGhlbgorCXNraXBfYWxsPSdXaGVuIGN2cyBpcyBjb21waWxlZCB3aXRoIENWU19CQURST09UIGNvbW1pdHMgYXMgcm9vdCBmYWlsJworCXRlc3RfZG9uZQorZmkKKworQ1ZTUk9PVD0kUFdEL3RtcGN2c3Jvb3QKK0NWU1dPUks9JFBXRC9jdnN3b3JrCitHSVRfRElSPSRQV0QvLmdpdAorZXhwb3J0IENWU1JPT1QgQ1ZTV09SSyBHSVRfRElSCisKK3JtIC1yZiAiJENWU1JPT1QiICIkQ1ZTV09SSyIKKworY3ZzIGluaXQgJiYKK3Rlc3QgLWQgIiRDVlNST09UIiAmJgorY3ZzIC1RIGNvIC1kICIkQ1ZTV09SSyIgLiAmJgorZWNobyA+ZW1wdHkgJiYKK2dpdCBhZGQgZW1wdHkgJiYKK2dpdCBjb21taXQgLXEgLWEgLW0gIkluaXRpYWwiIDI+L2Rldi9udWxsIHx8CitleGl0IDEKKworY2hlY2tfZW50cmllcyAoKSB7CisJIyAkMSA9PSBkaXJlY3RvcnksICQyID09IGV4cGVjdGVkCisJc2VkIC1uZSAnL15cLy9wJyAiJDEvQ1ZTL0VudHJpZXMiIHwgc29ydCB8IGN1dCAtZC8gLWYyLDMsNSA+YWN0dWFsCisJaWYgdGVzdCAteiAiJDIiCisJdGhlbgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCisJZWxzZQorCQlwcmludGYgJyVzXG4nICIkMiIgfCB0ciAnfCcgJ1wwMTInID5leHBlY3RlZAorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwlmaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnTmV3IGZpbGUnIFwKKyAgICAnbWtkaXIgQSBCIEMgRCBFIEYgJiYKKyAgICAgZWNobyBoZWxsbzEgPkEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGVjaG8gaGVsbG8yID5CL25ld2ZpbGUyLnR4dCAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBDL25ld2ZpbGUzLnBuZyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBEL25ld2ZpbGU0LnBuZyAmJgorICAgICBnaXQgYWRkIEEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGdpdCBhZGQgQi9uZXdmaWxlMi50eHQgJiYKKyAgICAgZ2l0IGFkZCBDL25ld2ZpbGUzLnBuZyAmJgorICAgICBnaXQgYWRkIEQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gIlRlc3Q6IE5ldyBmaWxlIiAmJgorICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkICYmCisgICAgIGNoZWNrX2VudHJpZXMgQSAibmV3ZmlsZTEudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgQiAibmV3ZmlsZTIudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgQyAibmV3ZmlsZTMucG5nLzEuMS8ta2IiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRCAibmV3ZmlsZTQucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEEvbmV3ZmlsZTEudHh0IC4uL0EvbmV3ZmlsZTEudHh0ICYmCisgICAgIHRlc3RfY21wIEIvbmV3ZmlsZTIudHh0IC4uL0IvbmV3ZmlsZTIudHh0ICYmCisgICAgIHRlc3RfY21wIEMvbmV3ZmlsZTMucG5nIC4uL0MvbmV3ZmlsZTMucG5nICYmCisgICAgIHRlc3RfY21wIEQvbmV3ZmlsZTQucG5nIC4uL0QvbmV3ZmlsZTQucG5nCisgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSZW1vdmUgdHdvIGZpbGVzLCBhZGQgdHdvIGFuZCB1cGRhdGUgdHdvJyBcCisgICAgJ2VjaG8gSGVsbG8xID4+QS9uZXdmaWxlMS50eHQgJiYKKyAgICAgcm0gLWYgQi9uZXdmaWxlMi50eHQgJiYKKyAgICAgcm0gLWYgQy9uZXdmaWxlMy5wbmcgJiYKKyAgICAgZWNobyBIZWxsbzUgID5FL25ld2ZpbGU1LnR4dCAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0yLnBuZyBEL25ld2ZpbGU0LnBuZyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBGL25ld2ZpbGU2LnBuZyAmJgorICAgICBnaXQgYWRkIEUvbmV3ZmlsZTUudHh0ICYmCisgICAgIGdpdCBhZGQgRi9uZXdmaWxlNi5wbmcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiVGVzdDogUmVtb3ZlLCBhZGQgYW5kIHVwZGF0ZSIgJiYKKyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZCAmJgorICAgICBjaGVja19lbnRyaWVzIEEgIm5ld2ZpbGUxLnR4dC8xLjIvIiAmJgorICAgICBjaGVja19lbnRyaWVzIEIgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBDICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRCAibmV3ZmlsZTQucG5nLzEuMi8ta2IiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRSAibmV3ZmlsZTUudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgRiAibmV3ZmlsZTYucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEEvbmV3ZmlsZTEudHh0IC4uL0EvbmV3ZmlsZTEudHh0ICYmCisgICAgIHRlc3RfY21wIEQvbmV3ZmlsZTQucG5nIC4uL0QvbmV3ZmlsZTQucG5nICYmCisgICAgIHRlc3RfY21wIEUvbmV3ZmlsZTUudHh0IC4uL0UvbmV3ZmlsZTUudHh0ICYmCisgICAgIHRlc3RfY21wIEYvbmV3ZmlsZTYucG5nIC4uL0YvbmV3ZmlsZTYucG5nCisgICAgICknCisKKyMgU2hvdWxkIGZhaWwgKGJ1dCBvbmx5IG9uIHRoZSBnaXQgY3ZzZXhwb3J0Y29tbWl0IHN0YWdlKQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0ZhaWwgdG8gY2hhbmdlIGJpbmFyeSBtb3JlIHRoYW4gb25lIGdlbmVyYXRpb24gb2xkJyBcCisgICAgJ2NhdCBGL25ld2ZpbGU2LnBuZyA+PkQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gImdlbmVyYXRpaW9uIDEiICYmCisgICAgIGNhdCBGL25ld2ZpbGU2LnBuZyA+PkQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gImdlbmVyYXRpb24gMiIgJiYKKyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZAorICAgICApJworCisjdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisjICAgICdGYWlsIHRvIHJlbW92ZSBiaW5hcnkgZmlsZSBtb3JlIHRoYW4gb25lIGdlbmVyYXRpb24gb2xkJyBcCisjICAgICdnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisjICAgICBjYXQgRi9uZXdmaWxlNi5wbmcgPj5EL25ld2ZpbGU0LnBuZyAmJgorIyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiZ2VuZXJhdGlvbiAyIChhZ2FpbikiICYmCisjICAgICBybSAtZiBEL25ld2ZpbGU0LnBuZyAmJgorIyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiZ2VuZXJhdGlvbiAzIiAmJgorIyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorIyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyMgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkCisjICAgICApJworCisjIFdlIHJldXNlIHRoZSBzdGF0ZSBmcm9tIHR3byB0ZXN0cyBiYWNrIGhlcmUKKworIyBUaGlzIHRlc3QgaXMgaGVyZSBiZWNhdXNlIGEgcGF0Y2ggZm9yIG9ubHkgYmluYXJ5IGZpbGVzIHdpbGwKKyMgZmFpbCB3aXRoIGdudSBwYXRjaCwgc28gY3ZzZXhwb3J0Y29tbWl0IG11c3QgaGFuZGxlIHRoYXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUmVtb3ZlIG9ubHkgYmluYXJ5IGZpbGVzJyBcCisgICAgJ2dpdCByZXNldCAtLWhhcmQgSEVBRF5eICYmCisgICAgIHJtIC1mIEQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gInRlc3Q6IHJlbW92ZSBvbmx5IGEgYmluYXJ5IGZpbGUiICYmCisgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgY2hlY2tfZW50cmllcyBBICJuZXdmaWxlMS50eHQvMS4yLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBCICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgQyAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEQgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBFICJuZXdmaWxlNS50eHQvMS4xLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBGICJuZXdmaWxlNi5wbmcvMS4xLy1rYiIgJiYKKyAgICAgdGVzdF9jbXAgQS9uZXdmaWxlMS50eHQgLi4vQS9uZXdmaWxlMS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRS9uZXdmaWxlNS50eHQgLi4vRS9uZXdmaWxlNS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRi9uZXdmaWxlNi5wbmcgLi4vRi9uZXdmaWxlNi5wbmcKKyAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1JlbW92ZSBvbmx5IGEgdGV4dCBmaWxlJyBcCisgICAgJ3JtIC1mIEEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gInRlc3Q6IHJlbW92ZSBvbmx5IGEgYmluYXJ5IGZpbGUiICYmCisgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgY2hlY2tfZW50cmllcyBBICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgQiAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEMgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBEICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRSAibmV3ZmlsZTUudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgRiAibmV3ZmlsZTYucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEUvbmV3ZmlsZTUudHh0IC4uL0UvbmV3ZmlsZTUudHh0ICYmCisgICAgIHRlc3RfY21wIEYvbmV3ZmlsZTYucG5nIC4uL0YvbmV3ZmlsZTYucG5nCisgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnTmV3IGZpbGUgd2l0aCBzcGFjZXMgaW4gZmlsZSBuYW1lJyBcCisgICAgICdta2RpciAiRyBnIiAmJgorICAgICAgZWNobyBvayB0aGVuID4iRyBnL3dpdGggc3BhY2VzLnR4dCIgJiYKKyAgICAgIGdpdCBhZGQgIkcgZy93aXRoIHNwYWNlcy50eHQiICYmIFwKKyAgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nICJHIGcvd2l0aCBzcGFjZXMucG5nIiAmJiBcCisgICAgICBnaXQgYWRkICJHIGcvd2l0aCBzcGFjZXMucG5nIiAmJgorICAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiV2l0aCBzcGFjZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgIGNoZWNrX2VudHJpZXMgIkcgZyIgIndpdGggc3BhY2VzLnBuZy8xLjEvLWtifHdpdGggc3BhY2VzLnR4dC8xLjEvIgorICAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICdVcGRhdGUgZmlsZSB3aXRoIHNwYWNlcyBpbiBmaWxlIG5hbWUnIFwKKyAgICAgJ2VjaG8gT2sgdGhlbiA+PiJHIGcvd2l0aCBzcGFjZXMudHh0IiAmJgorICAgICAgY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nID4+IkcgZy93aXRoIHNwYWNlcy5wbmciICYmIFwKKyAgICAgIGdpdCBhZGQgIkcgZy93aXRoIHNwYWNlcy5wbmciICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJVcGRhdGUgd2l0aCBzcGFjZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgIGNoZWNrX2VudHJpZXMgIkcgZyIgIndpdGggc3BhY2VzLnBuZy8xLjIvLWtifHdpdGggc3BhY2VzLnR4dC8xLjIvIgorICAgICAgKScKKworIyBTb21lIGZpbGVzeXN0ZW1zIG1hbmdsZSBwYXRobmFtZXMgd2l0aCBVVEYtOCBjaGFyYWN0ZXJzIC0tCisjIGNoZWNrIGFuZCBza2lwCitpZiBwPSLDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2IiAmJgorCW1rZGlyIC1wICJ0c3QvJHAiICYmCisJZGF0ZSA+InRzdC8kcC9kYXkiICYmCisJZm91bmQ9JChmaW5kIHRzdCAtdHlwZSBmIC1wcmludCkgJiYKKwl0ZXN0ICJ6JGZvdW5kIiA9ICJ6dHN0LyRwL2RheSIgJiYKKwlybSAtZnIgdHN0Cit0aGVuCisKKyMgVGhpcyB0ZXN0IGNvbnRhaW5zIFVURi04IGNoYXJhY3RlcnMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXIFwKKyAgICAgJ0ZpbGUgd2l0aCBub24tYXNjaWkgZmlsZSBuYW1lJyBcCisgICAgICdta2RpciAtcCDDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2ICYmCisgICAgICBlY2hvIEZvbyA+w4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/Dti9nw6VyZGV0c8OlZ8OlcmRldC50eHQgJiYKKyAgICAgIGdpdCBhZGQgw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/Dti9nw6VyZGV0c8OlZ8OlcmRldC50eHQgJiYKKyAgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nIMOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YvZ8OlcmRldHPDpWfDpXJkZXQucG5nICYmCisgICAgICBnaXQgYWRkIMOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YvZ8OlcmRldHPDpWfDpXJkZXQucG5nICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJHw6VyIGRldCBzw6UgZ8OlciBkZXQiICYmIFwKKyAgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC12IC1jICRpZCAmJgorICAgICAgY2hlY2tfZW50cmllcyBcCisgICAgICAiw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/DtiIgXAorICAgICAgImfDpXJkZXRzw6Vnw6VyZGV0LnBuZy8xLjEvLWtifGfDpXJkZXRzw6Vnw6VyZGV0LnR4dC8xLjEvIgorICAgICAgKScKKworZmkKKworcm0gLWZyIHRzdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgJ01pc21hdGNoaW5nIHBhdGNoIHNob3VsZCBmYWlsJyBcCisgICAgICdkYXRlID4+IkUvbmV3ZmlsZTUudHh0IiAmJgorICAgICAgZ2l0IGFkZCAiRS9uZXdmaWxlNS50eHQiICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJVcGRhdGUgb25lIiAmJgorICAgICAgZGF0ZSA+PiJFL25ld2ZpbGU1LnR4dCIgJiYKKyAgICAgIGdpdCBhZGQgIkUvbmV3ZmlsZTUudHh0IiAmJgorICAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiVXBkYXRlIHR3byIgJiYKKyAgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZAorICAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSBcCisgICAgICdSZXRhaW4gZXhlY3V0ZSBiaXQnIFwKKyAgICAgJ21rZGlyIEcgJiYKKyAgICAgIGVjaG8gZXhlY3V0ZW9uID5HL29uICYmCisgICAgICBjaG1vZCAreCBHL29uICYmCisgICAgICBlY2hvIGV4ZWN1dGVvZmYgPkcvb2ZmICYmCisgICAgICBnaXQgYWRkIEcvb24gJiYKKyAgICAgIGdpdCBhZGQgRy9vZmYgJiYKKyAgICAgIGdpdCBjb21taXQgLWEgLW0gIkV4ZWN1dGUgdGVzdCIgJiYKKyAgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jIEhFQUQgJiYKKyAgICAgIHRlc3QgLXggRy9vbiAmJgorICAgICAgISB0ZXN0IC14IEcvb2ZmCisgICAgICApJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctdyBvcHRpb24gc2hvdWxkIHdvcmsgd2l0aCByZWxhdGl2ZSBHSVRfRElSJyAnCisgICAgICBta2RpciBXICYmCisgICAgICBlY2hvIGZvb2JhciA+Vy9maWxlMS50eHQgJiYKKyAgICAgIGVjaG8gYmF6emxlID5XL2ZpbGUyLnR4dCAmJgorICAgICAgZ2l0IGFkZCBXL2ZpbGUxLnR4dCAmJgorICAgICAgZ2l0IGFkZCBXL2ZpbGUyLnR4dCAmJgorICAgICAgZ2l0IGNvbW1pdCAtbSAiTW9yZSB1cGRhdGVzIiAmJgorICAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAgKGNkICIkR0lUX0RJUiIgJiYKKyAgICAgIEdJVF9ESVI9LiBnaXQgY3ZzZXhwb3J0Y29tbWl0IC13ICIkQ1ZTV09SSyIgLWMgJGlkICYmCisgICAgICBjaGVja19lbnRyaWVzICIkQ1ZTV09SSy9XIiAiZmlsZTEudHh0LzEuMS98ZmlsZTIudHh0LzEuMS8iICYmCisgICAgICB0ZXN0X2NtcCAiJENWU1dPUksvVy9maWxlMS50eHQiIC4uL1cvZmlsZTEudHh0ICYmCisgICAgICB0ZXN0X2NtcCAiJENWU1dPUksvVy9maWxlMi50eHQiIC4uL1cvZmlsZTIudHh0CisgICAgICApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZpbGVzIGJlZm9yZSBkaXJlY3RvcmllcycgJworCisJZWNobyBOb3RlcyA+IHJlbGVhc2Utbm90ZXMgJiYKKwlnaXQgYWRkIHJlbGVhc2Utbm90ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgcmVsZWFzZSBub3RlcyIgcmVsZWFzZS1ub3RlcyAmJgorCWlkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyAkaWQgJiYKKworCWVjaG8gbmV3ID4gRFMgJiYKKwllY2hvIG5ldyA+IEUvRFMgJiYKKwllY2hvIG1vZGlmaWVkID4gcmVsZWFzZS1ub3RlcyAmJgorCWdpdCBhZGQgRFMgRS9EUyByZWxlYXNlLW5vdGVzICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHR3byBmaWxlcyB3aXRoIHRoZSBzYW1lIGJhc2VuYW1lIiAmJgorCWlkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyAkaWQgJiYKKwljaGVja19lbnRyaWVzICIkQ1ZTV09SSy9FIiAiRFMvMS4xL3xuZXdmaWxlNS50eHQvMS4xLyIgJiYKKwljaGVja19lbnRyaWVzICIkQ1ZTV09SSyIgIkRTLzEuMS98cmVsZWFzZS1ub3Rlcy8xLjIvIiAmJgorCXRlc3RfY21wICIkQ1ZTV09SSy9EUyIgRFMgJiYKKwl0ZXN0X2NtcCAiJENWU1dPUksvRS9EUyIgRS9EUyAmJgorCXRlc3RfY21wICIkQ1ZTV09SSy9yZWxlYXNlLW5vdGVzIiByZWxlYXNlLW5vdGVzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtY29tbWl0IGEgcmVtb3ZlZCBmaWxlbmFtZSB3aGljaCByZW1haW5zIGluIENWUyBhdHRpYycgJworCisgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgZWNobyA+YXR0aWNfZ3JlbWxpbiAmJgorICAgICBjdnMgLVEgYWRkIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIGNpIC1tICJhZGRlZCBhdHRpY19ncmVtbGluIiAmJgorICAgICBybSBhdHRpY19ncmVtbGluICYmCisgICAgIGN2cyAtUSBybSBhdHRpY19ncmVtbGluICYmCisgICAgIGN2cyAtUSBjaSAtbSAicmVtb3ZlZCBhdHRpY19ncmVtbGluIikgJiYKKworICAgIGVjaG8gPiBhdHRpY19ncmVtbGluICYmCisgICAgZ2l0IGFkZCBhdHRpY19ncmVtbGluICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiQWRkZWQgYXR0aWNfZ3JlbWxpbiIgJiYKKwlnaXQgY3ZzZXhwb3J0Y29tbWl0IC13ICIkQ1ZTV09SSyIgLWMgSEVBRCAmJgorICAgIChjZCAiJENWU1dPUksiICYmIGN2cyAtUSB1cGRhdGUgLWQpICYmCisgICAgdGVzdCAtZiAiJENWU1dPUksvYXR0aWNfZ3JlbWxpbiIKKycKKworIyB0aGUgc3RhdGUgb2YgdGhlIENWUyBzYW5kYm94IG1heSBiZSBpbmRldGVybWluYXRlIGZvciAnIHNwYWNlJworIyBhZnRlciB0aGlzIHRlc3Qgb24gc29tZSBwbGF0Zm9ybXMgLyB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgQ1ZTCisjIGNvbnNpZGVyIGFkZGluZyBuZXcgdGVzdHMgYWJvdmUgdGhpcyBwb2ludAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGEgZmlsZSB3aXRoIGxlYWRpbmcgc3BhY2VzIGluIHRoZSBuYW1lJyAnCisKKwllY2hvIHNwYWNlID4gIiBzcGFjZSIgJiYKKwlnaXQgYWRkICIgc3BhY2UiICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIGEgZmlsZSB3aXRoIGEgbGVhZGluZyBzcGFjZSIgJiYKKwlpZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY3ZzZXhwb3J0Y29tbWl0IC13ICIkQ1ZTV09SSyIgLWMgJGlkICYmCisJY2hlY2tfZW50cmllcyAiJENWU1dPUksiICIgc3BhY2UvMS4xL3xEUy8xLjEvfGF0dGljX2dyZW1saW4vMS4zL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLLyBzcGFjZSIgIiBzcGFjZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgdGhlIHNhbWUgY2hlY2tvdXQgZm9yIEdpdCBhbmQgQ1ZTJyAnCisKKwkobWtkaXIgc2hhcmVkICYmCisJIGNkIHNoYXJlZCAmJgorCSBzYW5lX3Vuc2V0IEdJVF9ESVIgJiYKKwkgY3ZzIGNvIC4gJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IGFkZCAiIHNwYWNlIiAmJgorCSBnaXQgY29tbWl0IC1tICJmYWtlIGluaXRpYWwgY29tbWl0IiAmJgorCSBlY2hvIEhlbGxvID4+ICIgc3BhY2UiICYmCisJIGdpdCBjb21taXQgLW0gIkFub3RoZXIgY2hhbmdlIiAiIHNwYWNlIiAmJgorCSBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1XIC1wIC11IC1jIEhFQUQgJiYKKwkgZ3JlcCBIZWxsbyAiIHNwYWNlIiAmJgorCSBnaXQgZGlmZi1maWxlcykKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2ggYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlNDFjNTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCkBAIC0wLDAgKzEsMzM4NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTaGF3biBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgZmFzdC1pbXBvcnQgdXRpbGl0eScKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKwordmVyaWZ5X3BhY2tzICgpIHsKKwlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sKKwlkbworCQlnaXQgdmVyaWZ5LXBhY2sgIiRAIiAiJHAiIHx8IHJldHVybgorCWRvbmUKK30KKworZmlsZTJfZGF0YT0nZmlsZTIKK3NlY29uZCBsaW5lIG9mIEVPRicKKworZmlsZTNfZGF0YT0nRU9GCitpbiAzcmQgZmlsZQorIEVORCcKKworZmlsZTRfZGF0YT1hYmNkCitmaWxlNF9sZW49NAorCitmaWxlNV9kYXRhPSdhbiBpbmxpbmUgZmlsZS4KKyAgd2Ugc2hvdWxkIHNlZSBpdCBsYXRlci4nCisKK2ZpbGU2X2RhdGE9JyMhL2Jpbi9zaAorZWNobyAiJEAiJworCisjIyMKKyMjIyBzZXJpZXMgQQorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHN0cmVhbSBzdWNjZWVkcycgJworCWdpdCBjb25maWcgZmFzdGltcG9ydC51bnBhY2tMaW1pdCAwICYmCisJZ2l0IGZhc3QtaW1wb3J0IDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJ1bmNhdGVkIHN0cmVhbSBjb21wbGFpbnMnICcKKwllY2hvICJ0YWcgZm9vIiB8IHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiBjcmVhdGUgcGFjayBmcm9tIHN0ZGluJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlibG9iCisJbWFyayA6MgorCWRhdGEgPDxFT0YKKwkkZmlsZTJfZGF0YQorCUVPRgorCisJYmxvYgorCW1hcmsgOjMKKwlkYXRhIDw8RU5ECisJJGZpbGUzX2RhdGEKKwlFTkQKKworCWJsb2IKKwltYXJrIDo0CisJZGF0YSAkZmlsZTRfbGVuCisJJGZpbGU0X2RhdGEKKwljb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKKwltYXJrIDo1CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWluaXRpYWwKKwlDT01NSVQKKworCU0gNjQ0IDoyIGZpbGUyCisJTSA2NDQgOjMgZmlsZTMKKwlNIDc1NSA6NCBmaWxlNAorCisJdGFnIHNlcmllcy1BCisJZnJvbSA6NQorCWRhdGEgPDxFT0YKKwlBbiBhbm5vdGF0ZWQgdGFnIHdpdGhvdXQgYSB0YWdnZXIKKwlFT0YKKworCXRhZyBzZXJpZXMtQS1ibG9iCisJZnJvbSA6MworCWRhdGEgPDxFT0YKKwlBbiBhbm5vdGF0ZWQgdGFnIHRoYXQgYW5ub3RhdGVzIGEgYmxvYi4KKwlFT0YKKworCXRhZyB0by1iZS1kZWxldGVkCisJZnJvbSA6MworCWRhdGEgPDxFT0YKKwlBbm90aGVyIGFubm90YXRlZCB0YWcgdGhhdCBhbm5vdGF0ZXMgYSBibG9iLgorCUVPRgorCisJcmVzZXQgcmVmcy90YWdzL3RvLWJlLWRlbGV0ZWQKKwlmcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworCXRhZyBuZXN0ZWQKKwltYXJrIDo2CisJZnJvbSA6NAorCWRhdGEgPDxFT0YKKwlUYWcgb2Ygb3VyIGxvdmVseSBjb21taXQKKwlFT0YKKworCXJlc2V0IHJlZnMvdGFncy9uZXN0ZWQKKwlmcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworCXRhZyBuZXN0ZWQKKwltYXJrIDo3CisJZnJvbSA6NgorCWRhdGEgPDxFT0YKKwlUYWcgb2YgdGFnIG9mIG91ciBsb3ZlbHkgY29tbWl0CisJRU9GCisKKwlhbGlhcworCW1hcmsgOjgKKwl0byA6NQorCisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzLm91dCA8aW5wdXQgJiYKKwlnaXQgd2hhdGNoYW5nZWQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCWluaXRpYWwKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IG1hc3RlciB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgdHJlZScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTEwMDY0NCBibG9iIGZpbGUyCisJMTAwNjQ0IGJsb2IgZmlsZTMKKwkxMDA3NTUgYmxvYiBmaWxlNAorCUVPRgorCWdpdCBjYXQtZmlsZSAtcCBtYXN0ZXJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgZmlsZTInICcKKwllY2hvICIkZmlsZTJfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgZmlsZTMnICcKKwllY2hvICIkZmlsZTNfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgZmlsZTQnICcKKwlwcmludGYgIiRmaWxlNF9kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGU0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSB0YWcvc2VyaWVzLUEnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlvYmplY3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKQorCXR5cGUgY29tbWl0CisJdGFnIHNlcmllcy1BCisKKwlBbiBhbm5vdGF0ZWQgdGFnIHdpdGhvdXQgYSB0YWdnZXIKKwlFT0YKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZ3Mvc2VyaWVzLUEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IHRhZy9zZXJpZXMtQS1ibG9iJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcjpmaWxlMykKKwl0eXBlIGJsb2IKKwl0YWcgc2VyaWVzLUEtYmxvYgorCisJQW4gYW5ub3RhdGVkIHRhZyB0aGF0IGFubm90YXRlcyBhIGJsb2IuCisJRU9GCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IHRhZyBkZWxldGlvbiBpcyBzdWNjZXNzZnVsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvdG8tYmUtZGVsZXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgbWFya3Mgb3V0cHV0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjIgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlMikKKwk6MyAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyOmZpbGUzKQorCTo0ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXI6ZmlsZTQpCisJOjUgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3Rlcl4wKQorCTo2ICQoZ2l0IGNhdC1maWxlIHRhZyBuZXN0ZWQgfCBncmVwIG9iamVjdCB8IGN1dCAtZCIgIiAtZiAyKQorCTo3ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBuZXN0ZWQpCisJOjggJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3Rlcl4wKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBtYXJrcy5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IG1hcmtzIGltcG9ydCcgJworCWdpdCBmYXN0LWltcG9ydCBcCisJCS0taW1wb3J0LW1hcmtzPW1hcmtzLm91dCBcCisJCS0tZXhwb3J0LW1hcmtzPW1hcmtzLm5ldyBcCisJCTwvZGV2L251bGwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbWFya3MubmV3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHRhZyBibG9iIGJ5IHNoYTEnICcKKwl0ZXN0X3RpY2sgJiYKKwluZXdfYmxvYj0kKGVjaG8gdGVzdGluZyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJdGFnIHNlcmllcy1BLWJsb2ItMgorCWZyb20gJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyOmZpbGUzKQorCWRhdGEgPDxFT0YKKwlUYWcgYmxvYiBieSBzaGExLgorCUVPRgorCisJYmxvYgorCW1hcmsgOjYKKwlkYXRhIDw8RU9GCisJdGVzdGluZworCUVPRgorCisJY29tbWl0IHJlZnMvaGVhZHMvbmV3X2Jsb2IKKwljb21taXR0ZXIgIDw+IDAgKzAwMDAKKwlkYXRhIDAKKwlNIDY0NCA6NiBuZXdfYmxvYgorCSNwcmV0ZW5kIHdlIGdvdCBzaGExIGZyb20gZmFzdC1pbXBvcnQKKwlscyAibmV3X2Jsb2IiCisKKwl0YWcgc2VyaWVzLUEtYmxvYi0zCisJZnJvbSAkbmV3X2Jsb2IKKwlkYXRhIDw8RU9GCisJVGFnIG5ld19ibG9iLgorCUVPRgorCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcjpmaWxlMykKKwl0eXBlIGJsb2IKKwl0YWcgc2VyaWVzLUEtYmxvYi0yCisKKwlUYWcgYmxvYiBieSBzaGExLgorCW9iamVjdCAkbmV3X2Jsb2IKKwl0eXBlIGJsb2IKKwl0YWcgc2VyaWVzLUEtYmxvYi0zCisKKwlUYWcgbmV3X2Jsb2IuCisJRU9GCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2ItMiA+YWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2ItMyA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IG1hcmtzIGltcG9ydCBkb2VzIG5vdCBjcmFzaCcgJworCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvdmVyaWZ5LS1pbXBvcnQtbWFya3MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJcmVjcmVhdGUgZnJvbSA6NQorCUNPTU1JVAorCisJZnJvbSA6NQorCU0gNzU1IDoyIGNvcHktb2YtZmlsZTIKKworCUlOUFVUX0VORAorCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzLm91dCA8aW5wdXQgJiYKKwlnaXQgd2hhdGNoYW5nZWQgdmVyaWZ5LS1pbXBvcnQtbWFya3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IGRpZmYnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MDAwMDAwIDEwMDc1NSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQQljb3B5LW9mLWZpbGUyCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtTSAtciBtYXN0ZXIgdmVyaWZ5LS1pbXBvcnQtbWFya3MgPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlMikgXAorCSAgICA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB2ZXJpZnktLWltcG9ydC1tYXJrczpjb3B5LW9mLWZpbGUyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiBleHBvcnQgbWFya3Mgd2l0aCBsYXJnZSB2YWx1ZXMnICcKKwl0ZXN0X3RpY2sgJiYKKwltdD0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwgL2Rldi9udWxsKSAmJgorCT5pbnB1dC5ibG9iICYmCisJPm1hcmtzLmV4cCAmJgorCT50cmVlLmV4cCAmJgorCisJY2F0ID5pbnB1dC5jb21taXQgPDwtRU9GICYmCisJY29tbWl0IHJlZnMvaGVhZHMvdmVyaWZ5LS1kdW1wLW1hcmtzCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXRlc3QgdGhlIHNwYXJzZSBhcnJheSBkdW1waW5nIHJvdXRpbmVzIHdpdGggZXhwb25lbnRpYWxseSBncm93aW5nIG1hcmtzCisJQ09NTUlUCisJRU9GCisKKwlpPTAgbD00IG09NiBuPTcgJiYKKwl3aGlsZSB0ZXN0ICIkaSIgLWx0IDI3CisJZG8KKwkJY2F0ID4+aW5wdXQuYmxvYiA8PC1FT0YgJiYKKwkJYmxvYgorCQltYXJrIDokbAorCQlkYXRhIDAKKwkJYmxvYgorCQltYXJrIDokbQorCQlkYXRhIDAKKwkJYmxvYgorCQltYXJrIDokbgorCQlkYXRhIDAKKwkJRU9GCisJCWVjaG8gIk0gMTAwNjQ0IDokbCBsJGkiID4+aW5wdXQuY29tbWl0ICYmCisJCWVjaG8gIk0gMTAwNjQ0IDokbSBtJGkiID4+aW5wdXQuY29tbWl0ICYmCisJCWVjaG8gIk0gMTAwNjQ0IDokbiBuJGkiID4+aW5wdXQuY29tbWl0ICYmCisKKwkJZWNobyAiOiRsICRtdCIgPj5tYXJrcy5leHAgJiYKKwkJZWNobyAiOiRtICRtdCIgPj5tYXJrcy5leHAgJiYKKwkJZWNobyAiOiRuICRtdCIgPj5tYXJrcy5leHAgJiYKKworCQlwcmludGYgIjEwMDY0NCBibG9iICRtdFx0bCRpXG4iID4+dHJlZS5leHAgJiYKKwkJcHJpbnRmICIxMDA2NDQgYmxvYiAkbXRcdG0kaVxuIiA+PnRyZWUuZXhwICYmCisJCXByaW50ZiAiMTAwNjQ0IGJsb2IgJG10XHRuJGlcbiIgPj50cmVlLmV4cCAmJgorCisJCWw9JCgoJGwgKyAkbCkpICYmCisJCW09JCgoJG0gKyAkbSkpICYmCisJCW49JCgoJGwgKyAkbikpICYmCisKKwkJaT0kKCgxICsgJGkpKSB8fCByZXR1cm4gMQorCWRvbmUgJiYKKworCXNvcnQgdHJlZS5leHAgPiB0cmVlLmV4cF9zICYmCisKKwljYXQgaW5wdXQuYmxvYiBpbnB1dC5jb21taXQgfCBnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9bWFya3MubGFyZ2UgJiYKKwlnaXQgbHMtdHJlZSByZWZzL2hlYWRzL3ZlcmlmeS0tZHVtcC1tYXJrcyA+dHJlZS5vdXQgJiYKKwl0ZXN0X2NtcCB0cmVlLmV4cF9zIHRyZWUub3V0ICYmCisJdGVzdF9jbXAgbWFya3MuZXhwIG1hcmtzLmxhcmdlCisnCisKKyMjIworIyMjIHNlcmllcyBCCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGJsb2Igc2hhMScgJworCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvYnJhbmNoCisJbWFyayA6MQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3JydXB0CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvbWFzdGVyCisJTSA3NTUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSB6ZXJvMQorCisJSU5QVVRfRU5ECisKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrXyogLmdpdC9vYmplY3RzL2luZGV4XyoiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBhY2NlcHQgYnJhbmNoIG5hbWUgIlRFTVBfVEFHIicgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IFRFTVBfVEFHCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXRhZyBiYXNlCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvbWFzdGVyCisKKwlJTlBVVF9FTkQKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9URU1QX1RBRworCQlnaXQgZ2MKKwkJZ2l0IHBydW5lIiAmJgorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwl0ZXN0IC1mIC5naXQvVEVNUF9UQUcgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gJChnaXQgcmV2LXBhcnNlIFRFTVBfVEFHXikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogYWNjZXB0IGVtcHR5IGNvbW1pdHRlcicgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvZW1wdHktY29tbWl0dGVyLTEKKwljb21taXR0ZXIgIDw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZW1wdHkgY29tbWl0CisJQ09NTUlUCisJSU5QVVRfRU5ECisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvZW1wdHktY29tbWl0dGVyLTEKKwkJZ2l0IGdjCisJCWdpdCBwcnVuZSIgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJb3V0PSQoZ2l0IGZzY2spICYmCisJZWNobyAiJG91dCIgJiYKKwl0ZXN0IC16ICIkb3V0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBhY2NlcHQgYW5kIGZpeHVwIGNvbW1pdHRlciB3aXRoIG5vIG5hbWUnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2VtcHR5LWNvbW1pdHRlci0yCisJY29tbWl0dGVyIDxhQGIuY29tPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWVtcHR5IGNvbW1pdAorCUNPTU1JVAorCUlOUFVUX0VORAorCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2VtcHR5LWNvbW1pdHRlci0yCisJCWdpdCBnYworCQlnaXQgcHJ1bmUiICYmCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCW91dD0kKGdpdCBmc2NrKSAmJgorCWVjaG8gIiRvdXQiICYmCisJdGVzdCAteiAiJG91dCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGNvbW1pdHRlciAoMSknICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyCisJY29tbWl0dGVyIE5hbWUgZW1haWw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZW1wdHkgY29tbWl0CisJQ09NTUlUCisJSU5QVVRfRU5ECisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgY29tbWl0dGVyICgyKScgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIKKwljb21taXR0ZXIgTmFtZSA8ZTxtYWlsPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWVtcHR5IGNvbW1pdAorCUNPTU1JVAorCUlOUFVUX0VORAorCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGNvbW1pdHRlciAoMyknICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyCisJY29tbWl0dGVyIE5hbWUgPGVtYWlsPj4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwllbXB0eSBjb21taXQKKwlDT01NSVQKKwlJTlBVVF9FTkQKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGZhaWwgb24gaW52YWxpZCBjb21taXR0ZXIgKDQpJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlcgorCWNvbW1pdHRlciBOYW1lIDxlbWFpbCAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWVtcHR5IGNvbW1pdAorCUNPTU1JVAorCUlOUFVUX0VORAorCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGNvbW1pdHRlciAoNSknICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyCisJY29tbWl0dGVyIE5hbWU8ZW1haWw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZW1wdHkgY29tbWl0CisJQ09NTUlUCisJSU5QVVRfRU5ECisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCisjIyMKKyMjIyBzZXJpZXMgQworIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0M6IGluY3JlbWVudGFsIGltcG9ydCBjcmVhdGUgcGFjayBmcm9tIHN0ZGluJyAnCisJbmV3Zj0kKGVjaG8gaGkgbmV3ZiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCW9sZGY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlMikgJiYKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlzZWNvbmQKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9tYXN0ZXIKKwlNIDY0NCAkb2xkZiBmaWxlMi9vbGRmCisJTSA3NTUgJG5ld2YgZmlsZTIvbmV3ZgorCUQgZmlsZTMKKworCUlOUFVUX0VORAorCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCB3aGF0Y2hhbmdlZCBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQzogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQzogdmFsaWRhdGUgcmV1c2UgZXhpc3RpbmcgYmxvYicgJworCXRlc3QgJG5ld2YgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoOmZpbGUyL25ld2YpICYmCisJdGVzdCAkb2xkZiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2g6ZmlsZTIvb2xkZikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQzogdmVyaWZ5IGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXBhcmVudCAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyXjApCisJYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKKwlzZWNvbmQKKwlFT0YKKworCWdpdCBjYXQtZmlsZSBjb21taXQgYnJhbmNoIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0M6IHZhbGlkYXRlIHJlbmFtZSByZXN1bHQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MDAwMDAwIDEwMDc1NSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQQlmaWxlMi9uZXdmCisJOjEwMDY0NCAxMDA2NDQgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIFIxMDAJZmlsZTIJZmlsZTIvb2xkZgorCToxMDA2NDQgMDAwMDAwIDBkOTJlOWYzMzc0YWUyOTQ3YzIzYWE0NzdjYmM2OGNlNTk4MTM1ZjEgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUzCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtTSAtciBtYXN0ZXIgYnJhbmNoID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKworIyMjCisjIyMgc2VyaWVzIEQKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEOiBpbmxpbmUgZGF0YSBpbiBjb21taXQnICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl0aGlyZAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJTSA2NDQgaW5saW5lIG5ld2Rpci9pbnRlcmVzdGluZworCWRhdGEgPDxFT0YKKwkkZmlsZTVfZGF0YQorCUVPRgorCisJTSA3NTUgaW5saW5lIG5ld2Rpci9leGVjLnNoCisJZGF0YSA8PEVPRgorCSRmaWxlNl9kYXRhCisJRU9GCisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgd2hhdGNoYW5nZWQgYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Q6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Q6IHZhbGlkYXRlIG5ldyBmaWxlcyBhZGRlZCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTowMDAwMDAgMTAwNzU1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZTc0YjdkNDY1ZTUyNzQ2YmUyYjRiYWU5ODM2NzA3MTFlNmU2NjY1NyBBCW5ld2Rpci9leGVjLnNoCisJOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIEEJbmV3ZGlyL2ludGVyZXN0aW5nCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtTSAtciBicmFuY2heIGJyYW5jaCA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Q6IHZlcmlmeSBmaWxlNScgJworCWVjaG8gIiRmaWxlNV9kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgYnJhbmNoOm5ld2Rpci9pbnRlcmVzdGluZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEOiB2ZXJpZnkgZmlsZTYnICcKKwllY2hvICIkZmlsZTZfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIGJyYW5jaDpuZXdkaXIvZXhlYy5zaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIyMKKyMjIyBzZXJpZXMgRQorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0U6IHJmYzI4MjIgZGF0ZSwgLS1kYXRlLWZvcm1hdD1yYXcnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorCWF1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gVHVlIEZlYiA2IDExOjIyOjE4IDIwMDcgLTA1MDAKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IFR1ZSBGZWIgNiAxMjozNTowMiAyMDA3IC0wNTAwCisJZGF0YSA8PENPTU1JVAorCVJGQyAyODIyIHR5cGUgZGF0ZQorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisKKwlJTlBVVF9FTkQKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWRhdGUtZm9ybWF0PXJhdyA8aW5wdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0U6IHJmYzI4MjIgZGF0ZSwgLS1kYXRlLWZvcm1hdD1yZmMyODIyJyAnCisJZ2l0IGZhc3QtaW1wb3J0IC0tZGF0ZS1mb3JtYXQ9cmZjMjgyMiA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRTogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRTogdmVyaWZ5IGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWF1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gMTE3MDc3ODkzOCAtMDUwMAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTE3MDc4MzMwMiAtMDUwMAorCisJUkZDIDI4MjIgdHlwZSBkYXRlCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBicmFuY2ggfCBzZWQgMSwyZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIyMKKyMjIyBzZXJpZXMgRgorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Y6IG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlIHNraXBzJyAnCisJb2xkX2JyYW5jaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoXjApICYmCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9icmFuY2gKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJbG9zaW5nIHRoaW5ncyBhbHJlYWR5PworCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaH4xCisKKwlyZXNldCByZWZzL2hlYWRzL290aGVyCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaAorCisJSU5QVVRfRU5ECisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIyBicmFuY2ggbXVzdCByZW1haW4gdW5hZmZlY3RlZAorCXRlc3QgJG9sZF9icmFuY2ggPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoXjApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Y6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Y6IHZlcmlmeSBvdGhlciBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwl0cmVlICQoZ2l0IHJldi1wYXJzZSBicmFuY2h+MV57dHJlZX0pCisJcGFyZW50ICQoZ2l0IHJldi1wYXJzZSBicmFuY2h+MSkKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCWxvc2luZyB0aGluZ3MgYWxyZWFkeT8KKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IG90aGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMjIworIyMjIHNlcmllcyBHCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRzogbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgZm9yY2VkJyAnCisJb2xkX2JyYW5jaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoXjApICYmCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9icmFuY2gKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJbG9zaW5nIHRoaW5ncyBhbHJlYWR5PworCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaH4xCisKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgLS1mb3JjZSA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRzogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRzogYnJhbmNoIGNoYW5nZWQsIGJ1dCBsb2dnZWQnICcKKwl0ZXN0ICRvbGRfYnJhbmNoICE9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2heMCkgJiYKKwl0ZXN0ICRvbGRfYnJhbmNoID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaEB7MX0pCisnCisKKyMjIworIyMjIHNlcmllcyBICisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSDogZGVsZXRhbGwsIGFkZCAxJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9ICisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXRoaXJkCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDY0NCBpbmxpbmUgaS13aWxsLWRpZQorCWRhdGEgPDxFT0YKKwl0aGlzIGZpbGUgd2lsbCBuZXZlciBleGlzdC4KKwlFT0YKKworCWRlbGV0ZWFsbAorCU0gNjQ0IGlubGluZSBoL2UvbC9sbworCWRhdGEgPDxFT0YKKwkkZmlsZTVfZGF0YQorCUVPRgorCisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCB3aGF0Y2hhbmdlZCBICisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0g6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0g6IHZhbGlkYXRlIG9sZCBmaWxlcyByZW1vdmVkLCBuZXcgZmlsZXMgYWRkZWQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNzU1IDAwMDAwMCBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMi9uZXdmCisJOjEwMDY0NCAwMDAwMDAgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTIvb2xkZgorCToxMDA3NTUgMDAwMDAwIDg1ZGY1MDc4NWQ2MmQzYjA1YWIwM2Q5Y2JmN2U0YTBiNDk0NDk3MzAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGU0CisJOjEwMDY0NCAxMDA2NDQgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIFIxMDAJbmV3ZGlyL2ludGVyZXN0aW5nCWgvZS9sL2xvCisJOjEwMDc1NSAwMDAwMDAgZTc0YjdkNDY1ZTUyNzQ2YmUyYjRiYWU5ODM2NzA3MTFlNmU2NjY1NyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJbmV3ZGlyL2V4ZWMuc2gKKwlFT0YKKwlnaXQgZGlmZi10cmVlIC1NIC1yIEheIEggPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIOiB2ZXJpZnkgZmlsZScgJworCWVjaG8gIiRmaWxlNV9kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSDpoL2UvbC9sbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIyMKKyMjIyBzZXJpZXMgSQorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0k6IGV4cG9ydC1wYWNrLWVkZ2VzJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9leHBvcnQtYm91bmRhcnkKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJd2UgaGF2ZSBhIGJvcmRlci4gIGl0cyBvbmx5IDQwIGNoYXJhY3RlcnMgd2lkZS4KKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2gKKworCUlOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1wYWNrLWVkZ2VzPWVkZ2VzLmxpc3QgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0k6IHZlcmlmeSBlZGdlIGxpc3QnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkuZ2l0L29iamVjdHMvcGFjay9wYWNrLS5wYWNrOiAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXhwb3J0LWJvdW5kYXJ5KQorCUVPRgorCXNlZCAtZSBzL3BhY2stLipwYWNrL3BhY2stLnBhY2svIGVkZ2VzLmxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyMjCisjIyMgc2VyaWVzIEoKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdKOiByZXNldCBleGlzdGluZyBicmFuY2ggY3JlYXRlcyBlbXB0eSBjb21taXQnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL0oKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY3JlYXRlIEoKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2gKKworCXJlc2V0IHJlZnMvaGVhZHMvSgorCisJY29tbWl0IHJlZnMvaGVhZHMvSgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlpbml0aWFsaXplIEoKKwlDT01NSVQKKworCUlOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0o6IGJyYW5jaCBoYXMgMSBjb21taXQsIGVtcHR5IHRyZWUnICcKKwl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCBKIHwgd2MgLWwpICYmCisJdGVzdCAwID0gJChnaXQgbHMtdHJlZSBKIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0o6IHRhZyBtdXN0IGZhaWwgb24gZW1wdHkgYnJhbmNoJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlyZXNldCByZWZzL2hlYWRzL0oyCisKKwl0YWcgd3JvbmdfdGFnCisJZnJvbSByZWZzL2hlYWRzL0oyCisJZGF0YSA8PEVPRgorCVRhZyBicmFuY2ggdGhhdCB3YXMgcmVzZXQuCisJRU9GCisJSU5QVVRfRU5ECisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCisjIyMKKyMjIyBzZXJpZXMgSworIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0s6IHJlaW5pdCBicmFuY2ggd2l0aCBmcm9tJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9LCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNyZWF0ZSBLCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoCisKKwljb21taXQgcmVmcy9oZWFkcy9LCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXJlZG8gSworCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4xCisKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdLOiB2ZXJpZnkgS14xID0gYnJhbmNoXjEnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2heMSkgXAorCQk9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBLXjEpCisnCisKKyMjIworIyMjIHNlcmllcyBMCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTDogdmVyaWZ5IGludGVybmFsIHRyZWUgc29ydGluZycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDw8RU9GCisJc29tZSBkYXRhCisJRU9GCisKKwlibG9iCisJbWFyayA6MgorCWRhdGEgPDxFT0YKKwlvdGhlciBkYXRhCisJRU9GCisKKwljb21taXQgcmVmcy9oZWFkcy9MCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNyZWF0ZSBMCisJQ09NTUlUCisKKwlNIDY0NCA6MSBiLgorCU0gNjQ0IDoxIGIvb3RoZXIKKwlNIDY0NCA6MSBiYQorCisJY29tbWl0IHJlZnMvaGVhZHMvTAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl1cGRhdGUgTAorCUNPTU1JVAorCisJTSA2NDQgOjIgYi4KKwlNIDY0NCA6MiBiL290aGVyCisJTSA2NDQgOjIgYmEKKwlJTlBVVF9FTkQKKworCWNhdCA+ZXhwZWN0IDw8LUVYUEVDVF9FTkQgJiYKKwk6MTAwNjQ0IDEwMDY0NCA0MjY4NjMyLi4uIDU1ZDNhNTIuLi4gTQliLgorCTowNDAwMDAgMDQwMDAwIDBhZTVjYWMuLi4gNDQzYzc2OC4uLiBNCWIKKwk6MTAwNjQ0IDEwMDY0NCA0MjY4NjMyLi4uIDU1ZDNhNTIuLi4gTQliYQorCUVYUEVDVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfUFJJTlRfU0hBMV9FTExJUFNJUz0ieWVzIiBnaXQgZGlmZi10cmVlIC0tYWJicmV2IC0tcmF3IExeIEwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTDogbmVzdGVkIHRyZWUgY29weSBkb2VzIG5vdCBjb3JydXB0IGRlbHRhcycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDw8RU9GCisJdGhlIGRhdGEKKwlFT0YKKworCWNvbW1pdCByZWZzL2hlYWRzL0wyCisJY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjQ3MyAtMDcwMAorCWRhdGEgPDxDT01NSVQKKwlpbml0IEwyCisJQ09NTUlUCisJTSA2NDQgOjEgYS9iL2MKKwlNIDY0NCA6MSBhL2IvZAorCU0gNjQ0IDoxIGEvZS9mCisKKwljb21taXQgcmVmcy9oZWFkcy9MMgorCWNvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI0NzMgLTA3MDAKKwlkYXRhIDw8Q09NTUlUCisJdXBkYXRlIEwyCisJQ09NTUlUCisJQyBhIGcKKwlDIGEvZSBnL2IKKwlNIDY0NCA6MSBnL2IvaAorCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWcvYi9mCisJZy9iL2gKKwlFT0YKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9MMiIgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGxzLXRyZWUgTDIgZy9iLyA+dG1wICYmCisJY2F0IHRtcCB8IGN1dCAtZiAyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGZzY2sgJChnaXQgcmV2LXBhcnNlIEwyKQorJworCisjIyMKKyMjIyBzZXJpZXMgTQorIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ006IHJlbmFtZSBmaWxlIGluIHNhbWUgc3ViZGlyZWN0b3J5JyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9NMQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlmaWxlIHJlbmFtZQorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJUiBmaWxlMi9uZXdmIGZpbGUyL24uZS53LmYKKworCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIFIxMDAJZmlsZTIvbmV3ZglmaWxlMi9uLmUudy5mCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLU0gLXIgTTFeIE0xID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTTogcmVuYW1lIGZpbGUgdG8gbmV3IHN1YmRpcmVjdG9yeScgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTTIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZmlsZSByZW5hbWUKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCVIgZmlsZTIvbmV3ZiBpL2FtL25ldy90by95b3UKKworCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIFIxMDAJZmlsZTIvbmV3ZglpL2FtL25ldy90by95b3UKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGRpZmYtdHJlZSAtTSAtciBNMl4gTTIgPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNOiByZW5hbWUgc3ViZGlyZWN0b3J5IHRvIG5ldyBzdWJkaXJlY3RvcnknICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL00zCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWZpbGUgcmVuYW1lCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvTTJeMAorCVIgaSBvdGhlci9zdWIKKworCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIFIxMDAJaS9hbS9uZXcvdG8veW91CW90aGVyL3N1Yi9hbS9uZXcvdG8veW91CisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLU0gLXIgTTNeIE0zID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTTogcmVuYW1lIHJvb3QgdG8gc3ViZGlyZWN0b3J5JyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9NNAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlyZW5hbWUgcm9vdAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL00yXjAKKwlSICIiIHN1YgorCisJSU5QVVRfRU5ECisKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgUjEwMAlmaWxlMi9vbGRmCXN1Yi9maWxlMi9vbGRmCisJOjEwMDc1NSAxMDA3NTUgODVkZjUwNzg1ZDYyZDNiMDVhYjAzZDljYmY3ZTRhMGI0OTQ0OTczMCA4NWRmNTA3ODVkNjJkM2IwNWFiMDNkOWNiZjdlNGEwYjQ5NDQ5NzMwIFIxMDAJZmlsZTQJc3ViL2ZpbGU0CisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIFIxMDAJaS9hbS9uZXcvdG8veW91CXN1Yi9pL2FtL25ldy90by95b3UKKwk6MTAwNzU1IDEwMDc1NSBlNzRiN2Q0NjVlNTI3NDZiZTJiNGJhZTk4MzY3MDcxMWU2ZTY2NjU3IGU3NGI3ZDQ2NWU1Mjc0NmJlMmI0YmFlOTgzNjcwNzExZTZlNjY2NTcgUjEwMAluZXdkaXIvZXhlYy5zaAlzdWIvbmV3ZGlyL2V4ZWMuc2gKKwk6MTAwNjQ0IDEwMDY0NCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgUjEwMAluZXdkaXIvaW50ZXJlc3RpbmcJc3ViL25ld2Rpci9pbnRlcmVzdGluZworCUVPRgorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgZGlmZi10cmVlIC1NIC1yIE00XiBNNCA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKKyMjIworIyMjIHNlcmllcyBOCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogY29weSBmaWxlIGluIHNhbWUgc3ViZGlyZWN0b3J5JyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9OMQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlmaWxlIGNvcHkKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCUMgZmlsZTIvbmV3ZiBmaWxlMi9uLmUudy5mCisKKwlJTlBVVF9FTkQKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBDMTAwCWZpbGUyL25ld2YJZmlsZTIvbi5lLncuZgorCUVPRgorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgZGlmZi10cmVlIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC1yIE4xXiBOMSA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IGNvcHkgdGhlbiBtb2RpZnkgc3ViZGlyZWN0b3J5JyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9OMgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljbGVhbiBkaXJlY3RvcnkgY29weQorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJQyBmaWxlMiBmaWxlMworCisJY29tbWl0IHJlZnMvaGVhZHMvTjIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJbW9kaWZ5IGRpcmVjdG9yeSBjb3B5CisJQ09NTUlUCisKKwlNIDY0NCBpbmxpbmUgZmlsZTMvZmlsZTUKKwlkYXRhIDw8RU9GCisJJGZpbGU1X2RhdGEKKwlFT0YKKworCUlOUFVUX0VORAorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEwMDY0NCAxMDA2NDQgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIEMxMDAJbmV3ZGlyL2ludGVyZXN0aW5nCWZpbGUzL2ZpbGU1CisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglmaWxlMy9uZXdmCisJOjEwMDY0NCAxMDA2NDQgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIEMxMDAJZmlsZTIvb2xkZglmaWxlMy9vbGRmCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjJeXiBOMiA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IGNvcHkgZGlydHkgc3ViZGlyZWN0b3J5JyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9OMworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlkaXJ0eSBkaXJlY3RvcnkgY29weQorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJTSA2NDQgaW5saW5lIGZpbGUyL2ZpbGU1CisJZGF0YSA8PEVPRgorCSRmaWxlNV9kYXRhCisJRU9GCisKKwlDIGZpbGUyIGZpbGUzCisJRCBmaWxlMi9maWxlNQorCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgTjJee3RyZWV9KSA9ICQoZ2l0IHJldi1wYXJzZSBOM157dHJlZX0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IGNvcHkgZGlyZWN0b3J5IGJ5IGlkJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBDMTAwCWZpbGUyL25ld2YJZmlsZTMvbmV3ZgorCToxMDA2NDQgMTAwNjQ0IDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSBDMTAwCWZpbGUyL29sZGYJZmlsZTMvb2xkZgorCUVPRgorCXN1YmRpcj0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9icmFuY2heMDpmaWxlMikgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL040CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgYnkgdHJlZSBoYXNoCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDA0MDAwMCAkc3ViZGlyIGZpbGUzCisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjReIE40ID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdOOiByZWFkIGFuZCBjb3B5IGRpcmVjdG9yeScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQzEwMAlmaWxlMi9uZXdmCWZpbGUzL25ld2YKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQzEwMAlmaWxlMi9vbGRmCWZpbGUzL29sZGYKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL040ICYmCisJcm0gLWYgYmFja2Zsb3cgJiYKKwlta2ZpZm8gYmFja2Zsb3cgJiYKKwkoCisJCWV4ZWMgPGJhY2tmbG93ICYmCisJCWNhdCA8PC1FT0YgJiYKKwkJY29tbWl0IHJlZnMvaGVhZHMvTjQKKwkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCWRhdGEgPDxDT01NSVQKKwkJY29weSBieSB0cmVlIGhhc2gsIHBhcnQgMgorCQlDT01NSVQKKworCQlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwkJbHMgImZpbGUyIgorCQlFT0YKKwkJcmVhZCBtb2RlIHR5cGUgdHJlZSBmaWxlbmFtZSAmJgorCQllY2hvICJNIDA0MDAwMCAkdHJlZSBmaWxlMyIKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDM+YmFja2Zsb3cgJiYKKwlnaXQgZGlmZi10cmVlIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC1yIE40XiBONCA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnTjogZW1wdHkgZGlyZWN0b3J5IHJlYWRzIGFzIG1pc3NpbmcnICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJT0JKTkFNRQorCTowMDAwMDAgMTAwNjQ0IE9CSk5BTUUgT0JKTkFNRSBBCXVucmVsYXRlZAorCUVPRgorCWVjaG8gIm1pc3Npbmcgc3JjIiA+ZXhwZWN0LnJlc3BvbnNlICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9yZWFkLWVtcHR5ICYmCisJcm0gLWYgYmFja2Zsb3cgJiYKKwlta2ZpZm8gYmFja2Zsb3cgJiYKKwkoCisJCWV4ZWMgPGJhY2tmbG93ICYmCisJCWNhdCA8PC1FT0YgJiYKKwkJY29tbWl0IHJlZnMvaGVhZHMvcmVhZC1lbXB0eQorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQlyZWFkICJlbXB0eSIgKG1pc3NpbmcpIGRpcmVjdG9yeQorCQlDT01NSVQKKworCQlNIDEwMDY0NCBpbmxpbmUgc3JjL2dyZWV0aW5nCisJCWRhdGEgPDxCTE9CCisJCWhlbGxvCisJCUJMT0IKKwkJQyBzcmMvZ3JlZXRpbmcgZHN0MS9ub24tZ3JlZXRpbmcKKwkJQyBzcmMvZ3JlZXRpbmcgdW5yZWxhdGVkCisJCSMgbGVhdmUgYmVoaW5kICJlbXB0eSIgc3JjIGRpcmVjdG9yeQorCQlEIHNyYy9ncmVldGluZworCQlscyAic3JjIgorCQlFT0YKKwkJcmVhZCAtciBsaW5lICYmCisJCXByaW50ZiAiJXNcbiIgIiRsaW5lIiA+cmVzcG9uc2UgJiYKKwkJY2F0IDw8LVxFT0YKKwkJRCBkc3QxCisJCUQgZHN0MgorCQlFT0YKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDM+YmFja2Zsb3cgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVzcG9uc2UgcmVzcG9uc2UgJiYKKwlnaXQgcmV2LWxpc3QgcmVhZC1lbXB0eSB8CisJZ2l0IGRpZmYtdHJlZSAtciAtLXJvb3QgLS1zdGRpbiB8CisJc2VkICJzLyRPSURfUkVHRVgvT0JKTkFNRS9nIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOOiBjb3B5IHJvb3QgZGlyZWN0b3J5IGJ5IHRyZWUgaGFzaCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNzU1IDAwMDAwMCBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMy9uZXdmCisJOjEwMDY0NCAwMDAwMDAgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTMvb2xkZgorCUVPRgorCXJvb3Q9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvYnJhbmNoXjBee3RyZWV9KSAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjYKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSByb290IGRpcmVjdG9yeSBieSB0cmVlIGhhc2gKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCU0gMDQwMDAwICRyb290ICIiCisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjQgTjYgPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOOiBjb3B5IHJvb3QgYnkgcGF0aCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQzEwMAlmaWxlMi9uZXdmCW9sZHJvb3QvZmlsZTIvbmV3ZgorCToxMDA2NDQgMTAwNjQ0IDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSBDMTAwCWZpbGUyL29sZGYJb2xkcm9vdC9maWxlMi9vbGRmCisJOjEwMDc1NSAxMDA3NTUgODVkZjUwNzg1ZDYyZDNiMDVhYjAzZDljYmY3ZTRhMGI0OTQ0OTczMCA4NWRmNTA3ODVkNjJkM2IwNWFiMDNkOWNiZjdlNGEwYjQ5NDQ5NzMwIEMxMDAJZmlsZTQJb2xkcm9vdC9maWxlNAorCToxMDA3NTUgMTAwNzU1IGU3NGI3ZDQ2NWU1Mjc0NmJlMmI0YmFlOTgzNjcwNzExZTZlNjY2NTcgZTc0YjdkNDY1ZTUyNzQ2YmUyYjRiYWU5ODM2NzA3MTFlNmU2NjY1NyBDMTAwCW5ld2Rpci9leGVjLnNoCW9sZHJvb3QvbmV3ZGlyL2V4ZWMuc2gKKwk6MTAwNjQ0IDEwMDY0NCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgQzEwMAluZXdkaXIvaW50ZXJlc3RpbmcJb2xkcm9vdC9uZXdkaXIvaW50ZXJlc3RpbmcKKwlFT0YKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL04tY29weS1yb290LXBhdGgKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSByb290IGRpcmVjdG9yeSBieSAoZW1wdHkpIHBhdGgKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCUMgIiIgb2xkcm9vdAorCUlOUFVUX0VORAorCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgZGlmZi10cmVlIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC1yIGJyYW5jaCBOLWNvcHktcm9vdC1wYXRoID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogZGVsZXRlIGRpcmVjdG9yeSBieSBjb3B5aW5nJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDY0NCAwMDAwMDAgT0JKSUQgT0JKSUQgRAlmb28vYmFyL3F1eAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28vYmFyL2JhegorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZm9vL2Jhci9xdXgKKwlFT0YKKwllbXB0eV90cmVlPSQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKSAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTi1kZWxldGUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29sbGVjdCBkYXRhIHRvIGJlIGRlbGV0ZWQKKwlDT01NSVQKKworCWRlbGV0ZWFsbAorCU0gMTAwNjQ0IGlubGluZSBmb28vYmFyL2JhegorCWRhdGEgPDxEQVRBX0VORAorCWhlbGxvCisJREFUQV9FTkQKKwlDICJmb28vYmFyL2JheiIgImZvby9iYXIvcXV4IgorCUMgImZvby9iYXIvYmF6IiAiZm9vL2Jhci9xdXV4LzEiCisJQyAiZm9vL2Jhci9iYXoiICJmb28vYmFyL3F1dXV4IgorCU0gMDQwMDAwICRlbXB0eV90cmVlIGZvby9iYXIvcXV1eAorCU0gMDQwMDAwICRlbXB0eV90cmVlIGZvby9iYXIvcXV1dXgKKworCWNvbW1pdCByZWZzL2hlYWRzL04tZGVsZXRlCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWRlbGV0ZSBzdWJkaXJlY3RvcnkKKwlDT01NSVQKKworCU0gMDQwMDAwICRlbXB0eV90cmVlIGZvby9iYXIvcXV4CisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCByZXYtbGlzdCBOLWRlbGV0ZSB8CisJCWdpdCBkaWZmLXRyZWUgLXIgLS1zdGRpbiAtLXJvb3QgLS1hbHdheXMgfAorCQlzZWQgLWUgInMvJE9JRF9SRUdFWC9PQkpJRC9nIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOOiBtb2RpZnkgY29waWVkIHRyZWUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJOjEwMDY0NCAxMDA2NDQgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIEMxMDAJbmV3ZGlyL2ludGVyZXN0aW5nCWZpbGUzL2ZpbGU1CisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglmaWxlMy9uZXdmCisJOjEwMDY0NCAxMDA2NDQgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIEMxMDAJZmlsZTIvb2xkZglmaWxlMy9vbGRmCisJRU9GCisJc3ViZGlyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2JyYW5jaF4wOmZpbGUyKSAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSBieSB0cmVlIGhhc2gKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCU0gMDQwMDAwICRzdWJkaXIgZmlsZTMKKworCWNvbW1pdCByZWZzL2hlYWRzL041CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCW1vZGlmeSBkaXJlY3RvcnkgY29weQorCUNPTU1JVAorCisJTSA2NDQgaW5saW5lIGZpbGUzL2ZpbGU1CisJZGF0YSA8PEVPRgorCSRmaWxlNV9kYXRhCisJRU9GCisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjVeXiBONSA+YWN0dWFsICYmCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IHJlamVjdCBmb28vIHN5bnRheCcgJworCXN1YmRpcj0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9icmFuY2heMDpmaWxlMikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVCCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgd2l0aCBpbnZhbGlkIHN5bnRheAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJTSAwNDAwMDAgJHN1YmRpciBmaWxlMy8KKwlJTlBVVF9FTkQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogcmVqZWN0IGZvby8gc3ludGF4IGluIGNvcHkgc291cmNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDw8LUlOUFVUX0VORAorCWNvbW1pdCByZWZzL2hlYWRzL041QworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3B5IHdpdGggaW52YWxpZCBzeW50YXgKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCUMgZmlsZTIvIGZpbGUzCisJSU5QVVRfRU5ECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IHJlamVjdCBmb28vIHN5bnRheCBpbiByZW5hbWUgc291cmNlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDw8LUlOUFVUX0VORAorCWNvbW1pdCByZWZzL2hlYWRzL041RAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlyZW5hbWUgd2l0aCBpbnZhbGlkIHN5bnRheAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJUiBmaWxlMi8gZmlsZTMKKwlJTlBVVF9FTkQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogcmVqZWN0IGZvby8gc3ludGF4IGluIGxzIGFyZ3VtZW50JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDw8LUlOUFVUX0VORAorCWNvbW1pdCByZWZzL2hlYWRzL041RQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3B5IHdpdGggaW52YWxpZCBzeW50YXgKKwlDT01NSVQKKworCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCWxzICJmaWxlMi8iCisJSU5QVVRfRU5ECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IGNvcHkgdG8gcm9vdCBieSBpZCBhbmQgbW9kaWZ5JyAnCisJZWNobyAiaGVsbG8sIHdvcmxkIiA+ZXhwZWN0LmZvbyAmJgorCWVjaG8gaGVsbG8gPmV4cGVjdC5iYXIgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPDwtU0VUVVBfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjcKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJaGVsbG8sIHRyZWUKKwlDT01NSVQKKworCWRlbGV0ZWFsbAorCU0gNjQ0IGlubGluZSBmb28vYmFyCisJZGF0YSA8PEVPRgorCWhlbGxvCisJRU9GCisJU0VUVVBfRU5ECisKKwl0cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBONzopICYmCisJZ2l0IGZhc3QtaW1wb3J0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL044CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgdG8gcm9vdCBieSBpZCBhbmQgbW9kaWZ5CisJQ09NTUlUCisKKwlNIDA0MDAwMCAkdHJlZSAiIgorCU0gNjQ0IGlubGluZSBmb28vZm9vCisJZGF0YSA8PEVPRgorCWhlbGxvLCB3b3JsZAorCUVPRgorCUlOUFVUX0VORAorCWdpdCBzaG93IE44OmZvby9mb28gPmFjdHVhbC5mb28gJiYKKwlnaXQgc2hvdyBOODpmb28vYmFyID5hY3R1YWwuYmFyICYmCisJdGVzdF9jbXAgZXhwZWN0LmZvbyBhY3R1YWwuZm9vICYmCisJdGVzdF9jbXAgZXhwZWN0LmJhciBhY3R1YWwuYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ046IGV4dHJhY3Qgc3VidHJlZScgJworCWJyYW5jaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9icmFuY2hee3RyZWV9KSAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjkKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJZXh0cmFjdCBzdWJ0cmVlIGJyYW5jaDpuZXdkaXIKKwlDT01NSVQKKworCU0gMDQwMDAwICRicmFuY2ggIiIKKwlDICJuZXdkaXIiICIiCisJSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGJyYW5jaDpuZXdkaXIgTjkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTjogbW9kaWZ5IHN1YnRyZWUsIGV4dHJhY3QgaXQsIGFuZCBtb2RpZnkgYWdhaW4nICcKKwllY2hvIGhlbGxvID5leHBlY3QuYmF6ICYmCisJZWNobyBoZWxsbywgd29ybGQgPmV4cGVjdC5xdXggJiYKKwlnaXQgZmFzdC1pbXBvcnQgPDwtU0VUVVBfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjEwCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWhlbGxvLCB0cmVlCisJQ09NTUlUCisKKwlkZWxldGVhbGwKKwlNIDY0NCBpbmxpbmUgZm9vL2Jhci9iYXoKKwlkYXRhIDw8RU9GCisJaGVsbG8KKwlFT0YKKwlTRVRVUF9FTkQKKworCXRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IE4xMDopICYmCisJZ2l0IGZhc3QtaW1wb3J0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL04xMQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3B5IHRvIHJvb3QgYnkgaWQgYW5kIG1vZGlmeQorCUNPTU1JVAorCisJTSAwNDAwMDAgJHRyZWUgIiIKKwlNIDEwMDY0NCBpbmxpbmUgZm9vL2Jhci9xdXgKKwlkYXRhIDw8RU9GCisJaGVsbG8sIHdvcmxkCisJRU9GCisJUiAiZm9vIiAiIgorCUMgImJhci9xdXgiICJiYXIvcXV1eCIKKwlJTlBVVF9FTkQKKwlnaXQgc2hvdyBOMTE6YmFyL2JheiA+YWN0dWFsLmJheiAmJgorCWdpdCBzaG93IE4xMTpiYXIvcXV4ID5hY3R1YWwucXV4ICYmCisJZ2l0IHNob3cgTjExOmJhci9xdXV4ID5hY3R1YWwucXV1eCAmJgorCXRlc3RfY21wIGV4cGVjdC5iYXogYWN0dWFsLmJheiAmJgorCXRlc3RfY21wIGV4cGVjdC5xdXggYWN0dWFsLnF1eCAmJgorCXRlc3RfY21wIGV4cGVjdC5xdXggYWN0dWFsLnF1dXgnCisKKyMjIworIyMjIHNlcmllcyBPCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTzogY29tbWVudHMgYXJlIGFsbCBza2lwcGVkJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwkjd2Ugd2lsbAorCWNvbW1pdCByZWZzL2hlYWRzL08xCisJIyAtLSBpZ25vcmUgYWxsIG9mIHRoaXMgdGV4dAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCSMgJEdJVF9DT01NSVRURVJfTkFNRSBoYXMgaW5zZXJ0ZWQgaGVyZSBmb3IgaGlzIGJlbmVmaXQuCisJZGF0YSA8PENPTU1JVAorCWRpcnR5IGRpcmVjdG9yeSBjb3B5CisJQ09NTUlUCisKKwkjIGRvIG5vdCBmb3JnZXQgdGhlIGltcG9ydCBibGFuayBsaW5lIQorCSMKKwkjIHllcywgd2Ugc3RhcnRlZCBmcm9tIG91ciB1c3VhbCBiYXNlIG9mIGJyYW5jaF4wLgorCSMgaSBsaWtlIGJyYW5jaF4wLgorCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCSMgYW5kIHdlIG5lZWQgdG8gcmV1c2UgZmlsZTIvZmlsZTUgZnJvbSBOMyBhYm92ZS4KKwlNIDY0NCBpbmxpbmUgZmlsZTIvZmlsZTUKKwkjIG90aGVyd2lzZSB0aGUgdHJlZSB3aWxsIGJlIGRpZmZlcmVudAorCWRhdGEgPDxFT0YKKwkkZmlsZTVfZGF0YQorCUVPRgorCisJIyBkbyBub3QgZm9yZ2V0IHRvIGNvcHkgZmlsZTIgdG8gZmlsZTMKKwlDIGZpbGUyIGZpbGUzCisJIworCSMgb3IgdG8gZGVsZXRlIGZpbGU1IGZyb20gZmlsZTIuCisJRCBmaWxlMi9maWxlNQorCSMgYXJlIHdlIGRvbmUgeWV0PworCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgTjMpID0gJChnaXQgcmV2LXBhcnNlIE8xKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPOiBibGFuayBsaW5lcyBub3QgbmVjZXNzYXJ5IGFmdGVyIGRhdGEgY29tbWFuZHMnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL08yCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWRpcnR5IGRpcmVjdG9yeSBjb3B5CisJQ09NTUlUCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJTSA2NDQgaW5saW5lIGZpbGUyL2ZpbGU1CisJZGF0YSA8PEVPRgorCSRmaWxlNV9kYXRhCisJRU9GCisJQyBmaWxlMiBmaWxlMworCUQgZmlsZTIvZmlsZTUKKworCUlOUFVUX0VORAorCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIE4zKSA9ICQoZ2l0IHJldi1wYXJzZSBPMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTzogcmVwYWNrIGJlZm9yZSBuZXh0IHRlc3QnICcKKwlnaXQgcmVwYWNrIC1hIC1kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ086IGJsYW5rIGxpbmVzIG5vdCBuZWNlc3NhcnkgYWZ0ZXIgb3RoZXIgY29tbWFuZHMnICcKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL08zCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXpzdHJpbmcKKwlDT01NSVQKKwljb21taXQgcmVmcy9oZWFkcy9PMworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl6b2YKKwlDT01NSVQKKwljaGVja3BvaW50CisJY29tbWl0IHJlZnMvaGVhZHMvTzMKKwltYXJrIDo1CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXplbXB0eQorCUNPTU1JVAorCWNoZWNrcG9pbnQKKwljb21taXQgcmVmcy9oZWFkcy9PMworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl6Y29tbWl0cworCUNPTU1JVAorCXJlc2V0IHJlZnMvdGFncy9PMy0ybmQKKwlmcm9tIDo1CisJcmVzZXQgcmVmcy90YWdzL08zLTNyZAorCWZyb20gOjUKKwlJTlBVVF9FTkQKKworCWNhdCA+ZXhwZWN0IDw8LUlOUFVUX0VORCAmJgorCXN0cmluZworCW9mCisJZW1wdHkKKwljb21taXRzCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJdGVzdCA4ID0gJChmaW5kIC5naXQvb2JqZWN0cy9wYWNrIC10eXBlIGYgfCBncmVwIC12IG11bHRpLXBhY2staW5kZXggfCB3YyAtbCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvTzMtMm5kKSA9ICQoZ2l0IHJldi1wYXJzZSBPM14pICYmCisJZ2l0IGxvZyAtLXJldmVyc2UgLS1wcmV0dHk9b25lbGluZSBPMyB8IHNlZCBzL14uKnovLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPOiBwcm9ncmVzcyBvdXRwdXRzIGFzIHJlcXVlc3RlZCBieSBpbnB1dCcgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTzQKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJenN0cmluZworCUNPTU1JVAorCWNvbW1pdCByZWZzL2hlYWRzL080CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXpvZgorCUNPTU1JVAorCXByb2dyZXNzIFR3byBjb21taXRzIGRvd24sIDIgdG8gZ28hCisJY29tbWl0IHJlZnMvaGVhZHMvTzQKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJemVtcHR5CisJQ09NTUlUCisJcHJvZ3Jlc3MgVGhyZWUgY29tbWl0cyBkb3duLCAxIHRvIGdvIQorCWNvbW1pdCByZWZzL2hlYWRzL080CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXpjb21taXRzCisJQ09NTUlUCisJcHJvZ3Jlc3MgZG9uZSEKKwlJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ID5hY3R1YWwgJiYKKwlncmVwICJwcm9ncmVzcyAiIDxpbnB1dCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIyMKKyMjIyBzZXJpZXMgUCAoZ2l0bGlua3MpCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUDogc3VwZXJwcm9qZWN0ICYgc3VibW9kdWxlIG1peCcgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDEwCisJdGVzdCBmaWxlCisKKwlyZXNldCByZWZzL2hlYWRzL3N1YgorCWNvbW1pdCByZWZzL2hlYWRzL3N1YgorCW1hcmsgOjIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDEyCisJc3ViX2luaXRpYWwKKwlNIDEwMDY0NCA6MSBmaWxlCisKKwlibG9iCisJbWFyayA6MworCWRhdGEgPDxEQVRBRU5ECisJW3N1Ym1vZHVsZSAic3ViIl0KKwkJcGF0aCA9IHN1YgorCQl1cmwgPSAiJChwd2QpL3N1YiIKKwlEQVRBRU5ECisKKwljb21taXQgcmVmcy9oZWFkcy9zdWJ1c2UxCisJbWFyayA6NAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgOAorCWluaXRpYWwKKwlmcm9tIHJlZnMvaGVhZHMvbWFzdGVyCisJTSAxMDA2NDQgOjMgLmdpdG1vZHVsZXMKKwlNIDE2MDAwMCA6MiBzdWIKKworCWJsb2IKKwltYXJrIDo1CisJZGF0YSAyMAorCXRlc3QgZmlsZQorCW1vcmUgZGF0YQorCisJY29tbWl0IHJlZnMvaGVhZHMvc3ViCisJbWFyayA6NgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgMTEKKwlzdWJfc2Vjb25kCisJZnJvbSA6MgorCU0gMTAwNjQ0IDo1IGZpbGUKKworCWNvbW1pdCByZWZzL2hlYWRzL3N1YnVzZTEKKwltYXJrIDo3CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA3CisJc2Vjb25kCisJZnJvbSA6NAorCU0gMTYwMDAwIDo2IHN1YgorCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGNoZWNrb3V0IHN1YnVzZTEgJiYKKwlybSAtcmYgc3ViICYmCisJbWtkaXIgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGZldGNoIC0tdXBkYXRlLWhlYWQtb2sgLi4gcmVmcy9oZWFkcy9zdWI6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQOiB2ZXJiYXRpbSBTSEEgZ2l0bGlua3MnICcKKwlTVUJMQVNUPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWIpICYmCisJU1VCUFJFVj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3ViXikgJiYKKworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDw8REFUQUVORAorCVtzdWJtb2R1bGUgInN1YiJdCisJCXBhdGggPSBzdWIKKwkJdXJsID0gIiQocHdkKS9zdWIiCisJREFUQUVORAorCisJY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMgorCW1hcmsgOjIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDgKKwlpbml0aWFsCisJZnJvbSByZWZzL2hlYWRzL21hc3RlcgorCU0gMTAwNjQ0IDoxIC5naXRtb2R1bGVzCisJTSAxNjAwMDAgJFNVQlBSRVYgc3ViCisKKwljb21taXQgcmVmcy9oZWFkcy9zdWJ1c2UyCisJbWFyayA6MworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgNworCXNlY29uZAorCWZyb20gOjIKKwlNIDE2MDAwMCAkU1VCTEFTVCBzdWIKKworCUlOUFVUX0VORAorCisJZ2l0IGJyYW5jaCAtRCBzdWIgJiYKKwlnaXQgZ2MgJiYKKwlnaXQgcHJ1bmUgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3VidXNlMikgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3VidXNlMSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUDogZmFpbCBvbiBpbmxpbmUgZ2l0bGluaycgJworCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMworCW1hcmsgOjEKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29ycnVwdAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL3N1YnVzZTIKKwlNIDE2MDAwMCBpbmxpbmUgc3ViCisJZGF0YSA8PERBVEEKKwkkU1VCUFJFVgorCURBVEEKKworCUlOUFVUX0VORAorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQOiBmYWlsIG9uIGJsb2IgbWFyayBpbiBnaXRsaW5rJyAnCisJdGVzdF90aWNrICYmCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgPDxEQVRBCisJJFNVQlBSRVYKKwlEQVRBCisKKwljb21taXQgcmVmcy9oZWFkcy9zdWJ1c2UzCisJbWFyayA6MgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3JydXB0CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvc3VidXNlMgorCU0gMTYwMDAwIDoxIHN1YgorCisJSU5QVVRfRU5ECisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKKyMjIworIyMjIHNlcmllcyBRIChub3RlcykKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiBjb21taXQgbm90ZXMnICcKKwlub3RlMV9kYXRhPSJUaGUgZmlyc3Qgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIgJiYKKwlub3RlMl9kYXRhPSJUaGUgZmlyc3Qgbm90ZSBmb3IgdGhlIHNlY29uZCBjb21taXQiICYmCisJbm90ZTNfZGF0YT0iVGhlIGZpcnN0IG5vdGUgZm9yIHRoZSB0aGlyZCBjb21taXQiICYmCisJbm90ZTFiX2RhdGE9IlRoZSBzZWNvbmQgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIgJiYKKwlub3RlMWNfZGF0YT0iVGhlIHRoaXJkIG5vdGUgZm9yIHRoZSBmaXJzdCBjb21taXQiICYmCisJbm90ZTJiX2RhdGE9IlRoZSBzZWNvbmQgbm90ZSBmb3IgdGhlIHNlY29uZCBjb21taXQiICYmCisKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWJsb2IKKwltYXJrIDoyCisJZGF0YSA8PEVPRgorCSRmaWxlMl9kYXRhCisJRU9GCisKKwljb21taXQgcmVmcy9oZWFkcy9ub3Rlcy10ZXN0CisJbWFyayA6MworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlmaXJzdCAoOjMpCisJQ09NTUlUCisKKwlNIDY0NCA6MiBmaWxlMgorCisJYmxvYgorCW1hcmsgOjQKKwlkYXRhICRmaWxlNF9sZW4KKwkkZmlsZTRfZGF0YQorCWNvbW1pdCByZWZzL2hlYWRzL25vdGVzLXRlc3QKKwltYXJrIDo1CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXNlY29uZCAoOjUpCisJQ09NTUlUCisKKwlNIDY0NCA6NCBmaWxlNAorCisJY29tbWl0IHJlZnMvaGVhZHMvbm90ZXMtdGVzdAorCW1hcmsgOjYKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJdGhpcmQgKDo2KQorCUNPTU1JVAorCisJTSA2NDQgaW5saW5lIGZpbGU1CisJZGF0YSA8PEVPRgorCSRmaWxlNV9kYXRhCisJRU9GCisKKwlNIDc1NSBpbmxpbmUgZmlsZTYKKwlkYXRhIDw8RU9GCisJJGZpbGU2X2RhdGEKKwlFT0YKKworCWJsb2IKKwltYXJrIDo3CisJZGF0YSA8PEVPRgorCSRub3RlMV9kYXRhCisJRU9GCisKKwlibG9iCisJbWFyayA6OAorCWRhdGEgPDxFT0YKKwkkbm90ZTJfZGF0YQorCUVPRgorCisJY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyCisJbWFyayA6OQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlub3RlcyAoOjkpCisJQ09NTUlUCisKKwlOIDo3IDozCisJTiA6OCA6NQorCU4gaW5saW5lIDo2CisJZGF0YSA8PEVPRgorCSRub3RlM19kYXRhCisJRU9GCisKKwljb21taXQgcmVmcy9ub3Rlcy9mb29iYXIKKwltYXJrIDoxMAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlub3RlcyAoOjEwKQorCUNPTU1JVAorCisJTiBpbmxpbmUgOjMKKwlkYXRhIDw8RU9GCisJJG5vdGUxYl9kYXRhCisJRU9GCisKKwljb21taXQgcmVmcy9ub3Rlcy9mb29iYXIyCisJbWFyayA6MTEKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJbm90ZXMgKDoxMSkKKwlDT01NSVQKKworCU4gaW5saW5lIDozCisJZGF0YSA8PEVPRgorCSRub3RlMWNfZGF0YQorCUVPRgorCisJY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyCisJbWFyayA6MTIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJbm90ZXMgKDoxMikKKwlDT01NSVQKKworCWRlbGV0ZWFsbAorCU4gaW5saW5lIDo1CisJZGF0YSA8PEVPRgorCSRub3RlMmJfZGF0YQorCUVPRgorCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IHdoYXRjaGFuZ2VkIG5vdGVzLXRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IGZpcnN0IGNvbW1pdCcgJworCWNvbW1pdDE9JChnaXQgcmV2LXBhcnNlIG5vdGVzLXRlc3R+MikgJiYKKwljb21taXQyPSQoZ2l0IHJldi1wYXJzZSBub3Rlcy10ZXN0XikgJiYKKwljb21taXQzPSQoZ2l0IHJldi1wYXJzZSBub3Rlcy10ZXN0KSAmJgorCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKKwlmaXJzdCAoOjMpCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBub3Rlcy10ZXN0fjIgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHNlY29uZCBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlwYXJlbnQgJGNvbW1pdDEKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCXNlY29uZCAoOjUpCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBub3Rlcy10ZXN0XiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgdGhpcmQgY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJcGFyZW50ICRjb21taXQyCisJYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKKwl0aGlyZCAoOjYpCisJRU9GCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBub3Rlcy10ZXN0IHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSBmaXJzdCBub3RlcyBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlhdXRob3IgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworCW5vdGVzICg6OSkKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyfjIgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IGZpcnN0IG5vdGVzIHRyZWUnICcKKwljYXQgPmV4cGVjdC51bnNvcnRlZCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkY29tbWl0MQorCTEwMDY0NCBibG9iICRjb21taXQyCisJMTAwNjQ0IGJsb2IgJGNvbW1pdDMKKwlFT0YKKwljYXQgZXhwZWN0LnVuc29ydGVkIHwgc29ydCA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvZm9vYmFyfjJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgZmlyc3Qgbm90ZSBmb3IgZmlyc3QgY29tbWl0JyAnCisJZWNobyAiJG5vdGUxX2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcn4yOiRjb21taXQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciBzZWNvbmQgY29tbWl0JyAnCisJZWNobyAiJG5vdGUyX2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcn4yOiRjb21taXQyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciB0aGlyZCBjb21taXQnICcKKwllY2hvICIkbm90ZTNfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyfjI6JGNvbW1pdDMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHNlY29uZCBub3RlcyBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlwYXJlbnQgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvZm9vYmFyfjIpCisJYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKKwlub3RlcyAoOjEwKQorCUVPRgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9ub3Rlcy9mb29iYXJeIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSBzZWNvbmQgbm90ZXMgdHJlZScgJworCWNhdCA+ZXhwZWN0LnVuc29ydGVkIDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICRjb21taXQxCisJMTAwNjQ0IGJsb2IgJGNvbW1pdDIKKwkxMDA2NDQgYmxvYiAkY29tbWl0MworCUVPRgorCWNhdCBleHBlY3QudW5zb3J0ZWQgfCBzb3J0ID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJeXnt0cmVlfSB8IHNlZCAicy8gWzAtOWEtZl0qCS8gLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHNlY29uZCBub3RlIGZvciBmaXJzdCBjb21taXQnICcKKwllY2hvICIkbm90ZTFiX2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcl46JGNvbW1pdDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IGZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQnICcKKwllY2hvICIkbm90ZTJfZGF0YSIgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyXjokY29tbWl0MiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgZmlyc3Qgbm90ZSBmb3IgdGhpcmQgY29tbWl0JyAnCisJZWNobyAiJG5vdGUzX2RhdGEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcl46JGNvbW1pdDMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHRoaXJkIG5vdGVzIGNvbW1pdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWF1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCisJbm90ZXMgKDoxMSkKKwlFT0YKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyMiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgdGhpcmQgbm90ZXMgdHJlZScgJworCWNhdCA+ZXhwZWN0LnVuc29ydGVkIDw8LUVPRiAmJgorCTEwMDY0NCBibG9iICRjb21taXQxCisJRU9GCisJY2F0IGV4cGVjdC51bnNvcnRlZCB8IHNvcnQgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL2Zvb2JhcjJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdROiB2ZXJpZnkgdGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0JyAnCisJZWNobyAiJG5vdGUxY19kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXIyOiRjb21taXQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1E6IHZlcmlmeSBmb3VydGggbm90ZXMgY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJcGFyZW50ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2Zvb2Jhcl4pCisJYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKKwlub3RlcyAoOjEyKQorCUVPRgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9ub3Rlcy9mb29iYXIgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IGZvdXJ0aCBub3RlcyB0cmVlJyAnCisJY2F0ID5leHBlY3QudW5zb3J0ZWQgPDwtRU9GICYmCisJMTAwNjQ0IGJsb2IgJGNvbW1pdDIKKwlFT0YKKwljYXQgZXhwZWN0LnVuc29ydGVkIHwgc29ydCA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvZm9vYmFyXnt0cmVlfSB8IHNlZCAicy8gWzAtOWEtZl0qCS8gLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHNlY29uZCBub3RlIGZvciBzZWNvbmQgY29tbWl0JyAnCisJZWNobyAiJG5vdGUyYl9kYXRhIiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXI6JGNvbW1pdDIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogZGVueSBub3RlIG9uIGVtcHR5IGJyYW5jaCcgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJcmVzZXQgcmVmcy9oZWFkcy9RMAorCisJY29tbWl0IHJlZnMvaGVhZHMvbm90ZS1RMAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlOb3RlIGZvciBhbiBlbXB0eSBicmFuY2guCisJQ09NTUlUCisKKwlOIGlubGluZSByZWZzL2hlYWRzL1EwCisJZGF0YSA8PE5PVEUKKwlzb21lIG5vdGUKKwlOT1RFCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworIyMjCisjIyMgc2VyaWVzIFIgKGZlYXR1cmUgYW5kIG9wdGlvbikKKyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBhYm9ydCBvbiB1bnN1cHBvcnRlZCBmZWF0dXJlJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlmZWF0dXJlIG5vLXN1Y2gtZmVhdHVyZS1leGlzdHMKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogc3VwcG9ydGVkIGZlYXR1cmUgaXMgYWNjZXB0ZWQnICcKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCWZlYXR1cmUgZGF0ZS1mb3JtYXQ9bm93CisJRU9GCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGFib3J0IG9uIHJlY2VpdmluZyBmZWF0dXJlIGFmdGVyIGRhdGEgY29tbWFuZCcgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJYmxvYgorCWRhdGEgMworCWhpCisJZmVhdHVyZSBkYXRlLWZvcm1hdD1ub3cKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogaW1wb3J0LW1hcmtzIGZlYXR1cmVzIGZvcmJpZGRlbiBieSBkZWZhdWx0JyAnCisJPmdpdC5tYXJrcyAmJgorCWVjaG8gImZlYXR1cmUgaW1wb3J0LW1hcmtzPWdpdC5tYXJrcyIgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWVjaG8gImZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1naXQubWFya3MiID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogb25seSBvbmUgaW1wb3J0LW1hcmtzIGZlYXR1cmUgYWxsb3dlZCBwZXIgc3RyZWFtJyAnCisJPmdpdC5tYXJrcyAmJgorCT5naXQyLm1hcmtzICYmCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlmZWF0dXJlIGltcG9ydC1tYXJrcz1naXQubWFya3MKKwlmZWF0dXJlIGltcG9ydC1tYXJrcz1naXQyLm1hcmtzCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGV4cG9ydC1tYXJrcyBmZWF0dXJlIGZvcmJpZGRlbiBieSBkZWZhdWx0JyAnCisJZWNobyAiZmVhdHVyZSBleHBvcnQtbWFya3M9Z2l0Lm1hcmtzIiA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGV4cG9ydC1tYXJrcyBmZWF0dXJlIHJlc3VsdHMgaW4gYSBtYXJrcyBmaWxlIGJlaW5nIGNyZWF0ZWQnICcKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCWZlYXR1cmUgZXhwb3J0LW1hcmtzPWdpdC5tYXJrcworCWJsb2IKKwltYXJrIDoxCisJZGF0YSAzCisJaGkKKworCUVPRgorCisJZ2l0IGZhc3QtaW1wb3J0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDxpbnB1dCAmJgorCWdyZXAgOjEgZ2l0Lm1hcmtzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGV4cG9ydC1tYXJrcyBvcHRpb25zIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGNvbW1hbmRsaW5lIG9wdGlvbnMnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlmZWF0dXJlIGV4cG9ydC1tYXJrcz1mZWF0dXJlLXN1Yi9naXQubWFya3MKKwlibG9iCisJbWFyayA6MQorCWRhdGEgMworCWhpCisKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgXAorCQkJLS1leHBvcnQtbWFya3M9Y21kbGluZS1zdWIvb3RoZXIubWFya3MgPGlucHV0ICYmCisJZ3JlcCA6MSBjbWRsaW5lLXN1Yi9vdGhlci5tYXJrcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZlYXR1cmUtc3ViCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGNhdGNoIHR5cG8gaW4gbWFya3MgZmlsZSBuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW5vbmV4aXN0ZW50Lm1hcmtzIDwvZGV2L251bGwgJiYKKwllY2hvICJmZWF0dXJlIGltcG9ydC1tYXJrcz1ub25leGlzdGVudC5tYXJrcyIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBpbXBvcnQgYW5kIG91dHB1dCBtYXJrcyBjYW4gYmUgdGhlIHNhbWUgZmlsZScgJworCXJtIC1mIGlvLm1hcmtzICYmCisJYmxvYj0kKGVjaG8gaGkgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MSAkYmxvYgorCToyICRibG9iCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIDw8LVxFT0YgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgMworCWhpCisKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9aW8ubWFya3MgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRiAmJgorCWJsb2IKKwltYXJrIDoyCisJZGF0YSAzCisJaGkKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBpby5tYXJrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiAtLWltcG9ydC1tYXJrcz1mb28gLS1vdXRwdXQtbWFya3M9Zm9vIHRvIGNyZWF0ZSBmb28gZmFpbHMnICcKKwlybSAtZiBpby5tYXJrcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1pby5tYXJrcyAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDMKKwloaQorCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cycgJworCXJtIC1mIGlvLm1hcmtzICYmCisJYmxvYj0kKGVjaG8gaGkgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwllY2hvICI6MSAkYmxvYiIgPmV4cGVjdCAmJgorCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHM9aW8ubWFya3MgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRiAmJgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSAzCisJaGkKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBpby5tYXJrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIGltcG9ydC1tYXJrcy1pZi1leGlzdHMnICcKKwlybSAtZiBpby5tYXJrcyAmJgorCisJZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIFwKKwkJCS0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDw8LVxFT0YgJiYKKwlmZWF0dXJlIGltcG9ydC1tYXJrcy1pZi1leGlzdHM9bm90X2lvLm1hcmtzCisJRU9GCisJdGVzdF9tdXN0X2JlX2VtcHR5IGlvLm1hcmtzICYmCisKKwlibG9iPSQoZWNobyBoaSB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCisJZWNobyAiOjEgJGJsb2IiID5pby5tYXJrcyAmJgorCWVjaG8gIjoxICRibG9iIiA+ZXhwZWN0ICYmCisJZWNobyAiOjIgJGJsb2IiID4+ZXhwZWN0ICYmCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgXAorCQkJLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPDwtXEVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1pby5tYXJrcworCWJsb2IKKwltYXJrIDoyCisJZGF0YSAzCisJaGkKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBpby5tYXJrcyAmJgorCisJZWNobyAiOjMgJGJsb2IiID4+ZXhwZWN0ICYmCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9aW8ubWFya3MgXAorCQkJLS1leHBvcnQtbWFya3M9aW8ubWFya3MgXAorCQkJLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPDwtXEVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1ub3RfaW8ubWFya3MKKwlibG9iCisJbWFyayA6MworCWRhdGEgMworCWhpCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgaW8ubWFya3MgJiYKKworCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHM9bm90X2lvLm1hcmtzIFwKKwkJCS0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIFwKKwkJCS0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDw8LVxFT0YgJiYKKwlmZWF0dXJlIGltcG9ydC1tYXJrcy1pZi1leGlzdHM9aW8ubWFya3MKKwlFT0YKKwl0ZXN0X211c3RfYmVfZW1wdHkgaW8ubWFya3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogaW1wb3J0IHRvIG91dHB1dCBtYXJrcyB3b3JrcyB3aXRob3V0IGFueSBjb250ZW50JyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlmZWF0dXJlIGltcG9ydC1tYXJrcz1tYXJrcy5vdXQKKwlmZWF0dXJlIGV4cG9ydC1tYXJrcz1tYXJrcy5uZXcKKwlFT0YKKworCWdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8aW5wdXQgJiYKKwl0ZXN0X2NtcCBtYXJrcy5vdXQgbWFya3MubmV3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGltcG9ydCBtYXJrcyBwcmVmZXJzIGNvbW1hbmRsaW5lIG1hcmtzIGZpbGUgb3ZlciB0aGUgc3RyZWFtJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlmZWF0dXJlIGltcG9ydC1tYXJrcz1ub25leGlzdGVudC5tYXJrcworCWZlYXR1cmUgZXhwb3J0LW1hcmtzPW1hcmtzLm5ldworCUVPRgorCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzLm91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8aW5wdXQgJiYKKwl0ZXN0X2NtcCBtYXJrcy5vdXQgbWFya3MubmV3CisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogbXVsdGlwbGUgLS1pbXBvcnQtbWFya3M9IHNob3VsZCBiZSBob25vdXJlZCcgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJZmVhdHVyZSBpbXBvcnQtbWFya3M9bm9uZXhpc3RlbnQubWFya3MKKwlmZWF0dXJlIGV4cG9ydC1tYXJrcz1jb21iaW5lZC5tYXJrcworCUVPRgorCisJaGVhZCAtbjIgbWFya3Mub3V0ID4gb25lLm1hcmtzICYmCisJdGFpbCAtbiArMyBtYXJrcy5vdXQgPiB0d28ubWFya3MgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9b25lLm1hcmtzIC0taW1wb3J0LW1hcmtzPXR3by5tYXJrcyBcCisJCS0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDxpbnB1dCAmJgorCXRlc3RfY21wIG1hcmtzLm91dCBjb21iaW5lZC5tYXJrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIHJlbGF0aXZlLW1hcmtzIHNob3VsZCBiZSBob25vdXJlZCcgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJZmVhdHVyZSByZWxhdGl2ZS1tYXJrcworCWZlYXR1cmUgaW1wb3J0LW1hcmtzPXJlbGF0aXZlLmluCisJZmVhdHVyZSBleHBvcnQtbWFya3M9cmVsYXRpdmUub3V0CisJRU9GCisKKwlta2RpciAtcCAuZ2l0L2luZm8vZmFzdC1pbXBvcnQvICYmCisJY3AgbWFya3MubmV3IC5naXQvaW5mby9mYXN0LWltcG9ydC9yZWxhdGl2ZS5pbiAmJgorCWdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8aW5wdXQgJiYKKwl0ZXN0X2NtcCBtYXJrcy5uZXcgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0L3JlbGF0aXZlLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIG5vLXJlbGF0aXZlLW1hcmtzIHNob3VsZCBiZSBob25vdXJlZCcgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJZmVhdHVyZSByZWxhdGl2ZS1tYXJrcworCWZlYXR1cmUgaW1wb3J0LW1hcmtzPXJlbGF0aXZlLmluCisJZmVhdHVyZSBuby1yZWxhdGl2ZS1tYXJrcworCWZlYXR1cmUgZXhwb3J0LW1hcmtzPW5vbi1yZWxhdGl2ZS5vdXQKKwlFT0YKKworCWdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8aW5wdXQgJiYKKwl0ZXN0X2NtcCBtYXJrcy5uZXcgbm9uLXJlbGF0aXZlLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIGxzIHN1cHBvcnRlZCcgJworCWVjaG8gImZlYXR1cmUgbHMiIHwKKwlnaXQgZmFzdC1pbXBvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBjYXQtYmxvYiBzdXBwb3J0ZWQnICcKKwllY2hvICJmZWF0dXJlIGNhdC1ibG9iIiB8CisJZ2l0IGZhc3QtaW1wb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGNhdC1ibG9iLWZkIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9LTEgPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnUjogcHJpbnQgb2xkIGJsb2InICcKKwlibG9iPSQoZWNobyAieWVzIGl0IGNhbiIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkke2Jsb2J9IGJsb2IgMTEKKwl5ZXMgaXQgY2FuCisKKwlFT0YKKwllY2hvICJjYXQtYmxvYiAkYmxvYiIgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTYgNj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdSOiBpbi1zdHJlYW0gY2F0LWJsb2ItZmQgbm90IHJlc3BlY3RlZCcgJworCWVjaG8gaGVsbG8gPmdyZWV0aW5nICYmCisJYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAtdyBncmVldGluZykgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkke2Jsb2J9IGJsb2IgNgorCWhlbGxvCisKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDM+YWN0dWFsLjMgPmFjdHVhbC4xIDw8LUVPRiAmJgorCWNhdC1ibG9iICRibG9iCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC4zICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbC4xICYmCisJZ2l0IGZhc3QtaW1wb3J0IDM+YWN0dWFsLjMgPmFjdHVhbC4xIDw8LUVPRiAmJgorCW9wdGlvbiBjYXQtYmxvYi1mZD0zCisJY2F0LWJsb2IgJGJsb2IKKwlFT0YKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsLjMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ1I6IHByaW50IG1hcmsgZm9yIG5ldyBibG9iJyAnCisJZWNobyAiZWZmbHVlbnRpc2giIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPmV4cGVjdCAmJgorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTYgNj5hY3R1YWwgPDwtXEVPRiAmJgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSA8PEJMT0JfRU5ECisJZWZmbHVlbnRpc2gKKwlCTE9CX0VORAorCWdldC1tYXJrIDoxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnUjogcHJpbnQgbmV3IGJsb2InICcKKwlibG9iPSQoZWNobyAieWVwIHllcCB5ZXAiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHtibG9ifSBibG9iIDEyCisJeWVwIHllcCB5ZXAKKworCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTYgNj5hY3R1YWwgPDwtXEVPRiAmJgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSA8PEJMT0JfRU5ECisJeWVwIHllcCB5ZXAKKwlCTE9CX0VORAorCWNhdC1ibG9iIDoxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnUjogcHJpbnQgbmV3IGJsb2IgYnkgc2hhMScgJworCWJsb2I9JChlY2hvICJhIG5ldyBibG9iIG5hbWVkIGJ5IHNoYTEiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHtibG9ifSBibG9iIDI1CisJYSBuZXcgYmxvYiBuYW1lZCBieSBzaGExCisKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD02IDY+YWN0dWFsIDw8LUVPRiAmJgorCWJsb2IKKwlkYXRhIDw8QkxPQl9FTkQKKwlhIG5ldyBibG9iIG5hbWVkIGJ5IHNoYTEKKwlCTE9CX0VORAorCWNhdC1ibG9iICRibG9iCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogYmlnIGZpbGUnICcKKwkoCisJCWVjaG8gInRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2ciID5iaWcgJiYKKwkJZm9yIGkgaW4gMSAyIDMKKwkJZG8KKwkJCWNhdCBiaWcgYmlnIGJpZyBiaWcgPmJpZ2dlciAmJgorCQkJY2F0IGJpZ2dlciBiaWdnZXIgYmlnZ2VyIGJpZ2dlciA+YmlnIHx8CisJCQlleGl0CisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHByaW50IHR3byBibG9icyB0byBzdGRvdXQnICcKKwlibG9iMT0kKGdpdCBoYXNoLW9iamVjdCBiaWcpICYmCisJYmxvYjFfbGVuPSQod2MgLWMgPGJpZykgJiYKKwlibG9iMj0kKGVjaG8gaGVsbG8gfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwl7CisJCWVjaG8gJHtibG9iMX0gYmxvYiAkYmxvYjFfbGVuICYmCisJCWNhdCBiaWcgJiYKKwkJY2F0IDw8LUVPRgorCisJCSR7YmxvYjJ9IGJsb2IgNgorCQloZWxsbworCisJCUVPRgorCX0gPmV4cGVjdCAmJgorCXsKKwkJY2F0IDw8LVxFTkRfUEFSVDEgJiYKKwkJCWJsb2IKKwkJCW1hcmsgOjEKKwkJCWRhdGEgPDxkYXRhX2VuZAorCQlFTkRfUEFSVDEKKwkJY2F0IGJpZyAmJgorCQljYXQgPDwtXEVPRgorCQkJZGF0YV9lbmQKKwkJCWJsb2IKKwkJCW1hcmsgOjIKKwkJCWRhdGEgPDxkYXRhX2VuZAorCQkJaGVsbG8KKwkJCWRhdGFfZW5kCisJCQljYXQtYmxvYiA6MQorCQkJY2F0LWJsb2IgOjIKKwkJRU9GCisJfSB8CisJZ2l0IGZhc3QtaW1wb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnUjogY29weSB1c2luZyBjYXQtZmlsZScgJworCWV4cGVjdF9pZD0kKGdpdCBoYXNoLW9iamVjdCBiaWcpICYmCisJZXhwZWN0X2xlbj0kKHdjIC1jIDxiaWcpICYmCisJZWNobyAkZXhwZWN0X2lkIGJsb2IgJGV4cGVjdF9sZW4gPmV4cGVjdC5yZXNwb25zZSAmJgorCisJcm0gLWYgYmxvYnMgJiYKKworCW1rZmlmbyBibG9icyAmJgorCSgKKwkJZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQ09NTUlUVEVSX0VNQUlMIEdJVF9DT01NSVRURVJfREFURSAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlmZWF0dXJlIGNhdC1ibG9iCisJCWJsb2IKKwkJbWFyayA6MQorCQlkYXRhIDw8QkxPQgorCQlFT0YKKwkJY2F0IGJpZyAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlCTE9CCisJCWNhdC1ibG9iIDoxCisJCUVPRgorCisJCXJlYWQgYmxvYl9pZCB0eXBlIHNpemUgPCYzICYmCisJCWVjaG8gIiRibG9iX2lkICR0eXBlICRzaXplIiA+cmVzcG9uc2UgJiYKKwkJdGVzdF9jb3B5X2J5dGVzICRzaXplID5ibG9iIDwmMyAmJgorCQlyZWFkIG5ld2xpbmUgPCYzICYmCisKKwkJY2F0IDw8LUVPRiAmJgorCQljb21taXQgcmVmcy9oZWFkcy9jb3BpZWQKKwkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCWRhdGEgPDxDT01NSVQKKwkJY29weSBiaWcgZmlsZSBhcyBmaWxlMworCQlDT01NSVQKKwkJTSA2NDQgaW5saW5lIGZpbGUzCisJCWRhdGEgPDxCTE9CCisJCUVPRgorCQljYXQgYmxvYiAmJgorCQllY2hvIEJMT0IKKwkpIDM8YmxvYnMgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5ibG9icyAmJgorCWdpdCBzaG93IGNvcGllZDpmaWxlMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnJlc3BvbnNlIHJlc3BvbnNlICYmCisJdGVzdF9jbXAgYmlnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ1I6IHByaW50IGJsb2IgbWlkLWNvbW1pdCcgJworCXJtIC1mIGJsb2JzICYmCisJZWNobyAiQSBibG9iIGZyb20gX2JlZm9yZV8gdGhlIGNvbW1pdC4iID5leHBlY3QgJiYKKwlta2ZpZm8gYmxvYnMgJiYKKwkoCisJCWV4ZWMgMzxibG9icyAmJgorCQljYXQgPDwtRU9GICYmCisJCWZlYXR1cmUgY2F0LWJsb2IKKwkJYmxvYgorCQltYXJrIDoxCisJCWRhdGEgPDxCTE9CCisJCUEgYmxvYiBmcm9tIF9iZWZvcmVfIHRoZSBjb21taXQuCisJCUJMT0IKKwkJY29tbWl0IHJlZnMvaGVhZHMvdGVtcG9yYXJ5CisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCUVtcHR5IGNvbW1pdAorCQlDT01NSVQKKwkJY2F0LWJsb2IgOjEKKwkJRU9GCisKKwkJcmVhZCBibG9iX2lkIHR5cGUgc2l6ZSA8JjMgJiYKKwkJdGVzdF9jb3B5X2J5dGVzICRzaXplID5hY3R1YWwgPCYzICYmCisJCXJlYWQgbmV3bGluZSA8JjMgJiYKKworCQllY2hvCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJsb2JzICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ1I6IHByaW50IHN0YWdlZCBibG9iIHdpdGhpbiBjb21taXQnICcKKwlybSAtZiBibG9icyAmJgorCWVjaG8gIkEgYmxvYiBmcm9tIF93aXRoaW5fIHRoZSBjb21taXQuIiA+ZXhwZWN0ICYmCisJbWtmaWZvIGJsb2JzICYmCisJKAorCQlleGVjIDM8YmxvYnMgJiYKKwkJY2F0IDw8LUVPRiAmJgorCQlmZWF0dXJlIGNhdC1ibG9iCisJCWNvbW1pdCByZWZzL2hlYWRzL3dpdGhpbgorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQlFbXB0eSBjb21taXQKKwkJQ09NTUlUCisJCU0gNjQ0IGlubGluZSB3aXRoaW4KKwkJZGF0YSA8PEJMT0IKKwkJQSBibG9iIGZyb20gX3dpdGhpbl8gdGhlIGNvbW1pdC4KKwkJQkxPQgorCQlFT0YKKworCQl0b19nZXQ9JCgKKwkJCWVjaG8gIkEgYmxvYiBmcm9tIF93aXRoaW5fIHRoZSBjb21taXQuIiB8CisJCQlnaXQgaGFzaC1vYmplY3QgLS1zdGRpbgorCQkpICYmCisJCWVjaG8gImNhdC1ibG9iICR0b19nZXQiICYmCisKKwkJcmVhZCBibG9iX2lkIHR5cGUgc2l6ZSA8JjMgJiYKKwkJdGVzdF9jb3B5X2J5dGVzICRzaXplID5hY3R1YWwgPCYzICYmCisJCXJlYWQgbmV3bGluZSA8JjMgJiYKKworCQllY2hvIGRlbGV0ZWFsbAorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5ibG9icyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogcXVpZXQgb3B0aW9uIHJlc3VsdHMgaW4gbm8gc3RhdHMgYmVpbmcgb3V0cHV0JyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlvcHRpb24gZ2l0IHF1aWV0CisJYmxvYgorCWRhdGEgMworCWhpCisKKwlFT0YKKworCWdpdCBmYXN0LWltcG9ydCAyPm91dHB1dCA8aW5wdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgZG9uZSBtZWFucyB0ZXJtaW5hdGluZyAiZG9uZSIgaXMgbWFuZGF0b3J5JyAnCisJZWNobyBmZWF0dXJlIGRvbmUgfCB0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1kb25lIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogdGVybWluYXRpbmcgImRvbmUiIHdpdGggdHJhaWxpbmcgZ2liYmVyaXNoIGlzIG9rJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDw8LVxFT0YgJiYKKwlmZWF0dXJlIGRvbmUKKwlkb25lCisJdHJhaWxpbmcgZ2liYmVyaXNoCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IDw8LVxFT0YKKwlkb25lCisJbW9yZSB0cmFpbGluZyBnaWJiZXJpc2gKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogdGVybWluYXRpbmcgImRvbmUiIHdpdGhpbiBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWhlbGxvLmMKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWhlbGxvMi5jCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IDw8LUVPRiAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2RvbmUtZW5kcworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxFT1QKKwlDb21taXQgdGVybWluYXRlZCBieSAiZG9uZSIgY29tbWFuZAorCUVPVAorCU0gMTAwNjQ0IGlubGluZSBoZWxsby5jCisJZGF0YSA8PEVPVAorCUhlbGxvLCB3b3JsZC4KKwlFT1QKKwlDIGhlbGxvLmMgaGVsbG8yLmMKKwlkb25lCisJRU9GCisJZ2l0IHJldi1saXN0IGRvbmUtZW5kcyB8CisJZ2l0IGRpZmYtdHJlZSAtciAtLXN0ZGluIC0tcm9vdCAtLWFsd2F5cyB8CisJc2VkIC1lICJzLyRPSURfUkVHRVgvT0JKSUQvZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZGllIG9uIHVua25vd24gb3B0aW9uJyAnCisJY2F0ID5pbnB1dCA8PC1FT0YgJiYKKwlvcHRpb24gZ2l0IG5vbi1leGlzdGluZy1vcHRpb24KKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogdW5rbm93biBjb21tYW5kbGluZSBvcHRpb25zIGFyZSByZWplY3RlZCcgJ1wKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1ub24tZXhpc3Rpbmctb3B0aW9uIDwgL2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGRpZSBvbiBpbnZhbGlkIG9wdGlvbiBhcmd1bWVudCcgJworCWVjaG8gIm9wdGlvbiBnaXQgYWN0aXZlLWJyYW5jaGVzPS01IiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0ICYmCisJZWNobyAib3B0aW9uIGdpdCBkZXB0aD0iIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1kZXB0aD0iNSBlbGVwaGFudHMiIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogaWdub3JlIG5vbi1naXQgb3B0aW9ucycgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJb3B0aW9uIG5vbi1leGlzdGluZy12Y3Mgbm9uLWV4aXN0aW5nLW9wdGlvbgorCUVPRgorCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBjb3JydXB0IGxpbmVzIGRvIG5vdCBtZXNzIG1hcmtzIGZpbGUnICcKKwlybSAtZiBpby5tYXJrcyAmJgorCWJsb2I9JChlY2hvIGhpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjMgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCToxICRibG9iCisJOjIgJGJsb2IKKwlFT0YKKwljcCBleHBlY3QgaW8ubWFya3MgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9aW8ubWFya3MgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRiAmJgorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGlvLm1hcmtzCisnCisKKyMjCisjIyBSOiB2ZXJ5IGxhcmdlIGJsb2JzCisjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogYmxvYiBiaWdnZXIgdGhhbiB0aHJlc2hvbGQnICcKKwlibG9ic2l6ZT0kKCgyKjEwMjQqMTAyNCArIDUzKSkgJiYKKwl0ZXN0LXRvb2wgZ2VucmFuZG9tIGJhciAkYmxvYnNpemUgPmV4cGVjdCAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvYmlnLWZpbGUKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJUiAtIGJpZyBmaWxlCisJQ09NTUlUCisKKwlNIDY0NCBpbmxpbmUgYmlnMQorCWRhdGEgJGJsb2JzaXplCisJSU5QVVRfRU5ECisJY2F0IGV4cGVjdCA+PmlucHV0ICYmCisJY2F0ID4+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJTSA2NDQgaW5saW5lIGJpZzIKKwlkYXRhICRibG9ic2l6ZQorCUlOUFVUX0VORAorCWNhdCBleHBlY3QgPj5pbnB1dCAmJgorCWVjaG8gPj5pbnB1dCAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBSICYmCisJZ2l0IC0tZ2l0LWRpcj1SLy5naXQgY29uZmlnIGZhc3RpbXBvcnQudW5wYWNrTGltaXQgMCAmJgorCWdpdCAtLWdpdC1kaXI9Ui8uZ2l0IGZhc3QtaW1wb3J0IC0tYmlnLWZpbGUtdGhyZXNob2xkPTEgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHZlcmlmeSBjcmVhdGVkIHBhY2snICcKKwkoCisJCWNkIFIgJiYKKwkJdmVyaWZ5X3BhY2tzIC12ID4gLi4vdmVyaWZ5CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiB2ZXJpZnkgd3JpdHRlbiBvYmplY3RzJyAnCisJZ2l0IC0tZ2l0LWRpcj1SLy5naXQgY2F0LWZpbGUgYmxvYiBiaWctZmlsZTpiaWcxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcF9iaW4gZXhwZWN0IGFjdHVhbCAmJgorCWE9JChnaXQgLS1naXQtZGlyPVIvLmdpdCByZXYtcGFyc2UgYmlnLWZpbGU6YmlnMSkgJiYKKwliPSQoZ2l0IC0tZ2l0LWRpcj1SLy5naXQgcmV2LXBhcnNlIGJpZy1maWxlOmJpZzIpICYmCisJdGVzdCAkYSA9ICRiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGJsb2IgYXBwZWFycyBvbmx5IG9uY2UnICcKKwluPSQoZ3JlcCAkYSB2ZXJpZnkgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgPSAkbgorJworCisjIyMKKyMjIyBzZXJpZXMgUworIyMjCisjCisjIE1ha2Ugc3VyZSBtaXNzaW5nIHNwYWNlcyBhbmQgRU9McyBhZnRlciBtYXJrIHJlZmVyZW5jZXMKKyMgY2F1c2UgZXJyb3JzLgorIworIyBTZXR1cDoKKyMKKyMgICAxLS0yLS00CisjICAgIFwgICAvCisjICAgICAtMy0KKyMKKyMgICBjb21taXQgbWFya3M6ICAzMDEsIDMwMiwgMzAzLCAzMDQKKyMgICBibG9iIG1hcmtzOiAgICAgICAgICAgICAgNDAzLCA0MDQsIHJlc3AuCisjICAgbm90ZSBtYXJrOiAgICAgICAgICAyMDIKKyMKKyMgVGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiBhIHNwYWNlIGlzIG1pc3Npbmcgbm90IGF0IHRoZQorIyBlbmQgb2YgdGhlIGxpbmUgaXM6CisjCisjICAgTWlzc2luZyBzcGFjZSBhZnRlciAuLgorIworIyBvciB3aGVuIGV4dHJhIGNoYXJhY3RlcnMgY29tZSBhZnRlciB0aGUgbWFyayBhdCB0aGUgZW5kCisjIG9mIHRoZSBsaW5lOgorIworIyAgIEdhcmJhZ2UgYWZ0ZXIgLi4KKyMKKyMgb3Igd2hlbiB0aGUgZGF0YXJlZiBpcyBuZWl0aGVyICJpbmxpbmUgIiBvciBhIGtub3duIFNIQTEsCisjCisjICAgSW52YWxpZCBkYXRhcmVmIC4uCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBpbml0aWFsaXplIGZvciBTIHRlc3RzJyAnCisJdGVzdF90aWNrICYmCisKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwltYXJrIDozMDEKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IDEKKwlDT01NSVQKKwlNIDEwMDY0NCBpbmxpbmUgaGVsbG8uYworCWRhdGEgPDxCTE9CCisJYmxvYiAxCisJQkxPQgorCisJY29tbWl0IHJlZnMvaGVhZHMvUworCW1hcmsgOjMwMgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgMgorCUNPTU1JVAorCWZyb20gOjMwMQorCU0gMTAwNjQ0IGlubGluZSBoZWxsby5jCisJZGF0YSA8PEJMT0IKKwlibG9iIDIKKwlCTE9CCisKKwlibG9iCisJbWFyayA6NDAzCisJZGF0YSA8PEJMT0IKKwlibG9iIDMKKwlCTE9CCisKKwlibG9iCisJbWFyayA6MjAyCisJZGF0YSA8PEJMT0IKKwlub3RlIDIKKwlCTE9CCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9bWFya3MgPGlucHV0CisnCisKKyMKKyMgZmlsZW1vZGlmeSwgdGhyZWUgZGF0YXJlZnMKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGZpbGVtb2RpZnkgd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IE4KKwlDT01NSVQKKwlNIDEwMDY0NCA6NDAzeCBoZWxsby5jCisJRU9GCisJdGVzdF9pMThuZ3JlcCAic3BhY2UgYWZ0ZXIgbWFyayIgZXJyCisnCisKKyMgaW5saW5lIGlzIG1pc3NwZWxsZWQ7IGZhc3QtaW1wb3J0IHRoaW5rcyBpdCBpcyBzb21lIHVua25vd24gZGF0YXJlZgordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogZmlsZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgaW5saW5lIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCBOCisJQ09NTUlUCisJTSAxMDA2NDQgaW5saW5lWCBoZWxsby5jCisJZGF0YSA8PEJMT0IKKwlpbmxpbmUKKwlCTE9CCisJRU9GCisJdGVzdF9pMThuZ3JlcCAibnZhbGlkIGRhdGFyZWYiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBmaWxlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBzaGExIG11c3QgZmFpbCcgJworCXNoYTE9JChncmVwIDo0MDMgbWFya3MgfCBjdXQgLWRcICAtZjIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IE4KKwlDT01NSVQKKwlNIDEwMDY0NCAke3NoYTF9eCBoZWxsby5jCisJRU9GCisJdGVzdF9pMThuZ3JlcCAic3BhY2UgYWZ0ZXIgU0hBMSIgZXJyCisnCisKKyMKKyMgbm90ZW1vZGlmeSwgdGhyZWUgd2F5cyB0byBzYXkgZGF0YXJlZgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbm90ZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgbWFyayBkYXRhcmVmIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCBTIG5vdGUgZGF0YXJlZiBtYXJrcmVmCisJQ09NTUlUCisJTiA6MjAyeCA6MzAyCisJRU9GCisJdGVzdF9pMThuZ3JlcCAic3BhY2UgYWZ0ZXIgbWFyayIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IG5vdGVtb2RpZnkgd2l0aCBnYXJiYWdlIGFmdGVyIGlubGluZSBkYXRhcmVmIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCBTIG5vdGUgZGF0YXJlZiBpbmxpbmUKKwlDT01NSVQKKwlOIGlubGluZVggOjMwMgorCWRhdGEgPDxCTE9CCisJbm90ZSBibG9iCisJQkxPQgorCUVPRgorCXRlc3RfaTE4bmdyZXAgIm52YWxpZCBkYXRhcmVmIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbm90ZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgc2hhMSBkYXRhcmVmIG11c3QgZmFpbCcgJworCXNoYTE9JChncmVwIDoyMDIgbWFya3MgfCBjdXQgLWRcICAtZjIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBkYXRhcmVmIHNoYTEKKwlDT01NSVQKKwlOICR7c2hhMX14IDozMDIKKwlFT0YKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBTSEExIiBlcnIKKycKKworIworIyBub3RlbW9kaWZ5LCBtYXJrIGluIGNvbW1pdC1pc2gKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IG5vdGVtb2RpZnkgd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgY29tbWl0LWlzaCBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJY29tbWl0IHJlZnMvaGVhZHMvU25vdGVzCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCBTIG5vdGUgY29tbWl0LWlzaAorCUNPTU1JVAorCU4gOjIwMiA6MzAyeAorCUVPRgorCXRlc3RfaTE4bmdyZXAgImFmdGVyIG1hcmsiIGVycgorJworCisjCisjIGZyb20KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGZyb20gd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgXAorCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyAtLWV4cG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TMgorCW1hcmsgOjMwMworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgMworCUNPTU1JVAorCWZyb20gOjMwMXgKKwlNIDEwMDY0NCA6NDAzIGhlbGxvLmMKKwlFT0YKKworCisJIyBnbyBjcmVhdGUgdGhlIGNvbW1pdCwgbmVlZCBpdCBmb3IgbWVyZ2UgdGVzdAorCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyAtLWV4cG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TMgorCW1hcmsgOjMwMworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgMworCUNPTU1JVAorCWZyb20gOjMwMQorCU0gMTAwNjQ0IDo0MDMgaGVsbG8uYworCUVPRgorCisJIyBub3cgZXZhbHVhdGUgdGhlIGVycm9yCisJdGVzdF9pMThuZ3JlcCAiYWZ0ZXIgbWFyayIgZXJyCisnCisKKworIworIyBtZXJnZQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbWVyZ2Ugd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwltYXJrIDozMDQKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJbWVyZ2UgNAorCUNPTU1JVAorCWZyb20gOjMwMgorCW1lcmdlIDozMDN4CisJTSAxMDA2NDQgOjQwMyBoZWxsby5jCisJRU9GCisJdGVzdF9pMThuZ3JlcCAiYWZ0ZXIgbWFyayIgZXJyCisnCisKKyMKKyMgdGFnLCBmcm9tIG1hcmtyZWYKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IHRhZyB3aXRoIGdhcmJhZ2UgYWZ0ZXIgbWFyayBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJdGFnIHJlZnMvdGFncy9TdGFnCisJZnJvbSA6MzAyeAorCXRhZ2dlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxUQUcKKwl0YWcgUworCVRBRworCUVPRgorCXRlc3RfaTE4bmdyZXAgImFmdGVyIG1hcmsiIGVycgorJworCisjCisjIGNhdC1ibG9iIG1hcmtyZWYKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGNhdC1ibG9iIHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljYXQtYmxvYiA6NDAzeAorCUVPRgorCXRlc3RfaTE4bmdyZXAgImFmdGVyIG1hcmsiIGVycgorJworCisjCisjIGxzIG1hcmtyZWYKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGxzIHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwlscyA6MzAyeCBoZWxsby5jCisJRU9GCisJdGVzdF9pMThuZ3JlcCAic3BhY2UgYWZ0ZXIgbWFyayIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGxzIHdpdGggZ2FyYmFnZSBhZnRlciBzaGExIG11c3QgZmFpbCcgJworCXNoYTE9JChncmVwIDozMDIgbWFya3MgfCBjdXQgLWRcICAtZjIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWxzICR7c2hhMX14IGhlbGxvLmMKKwlFT0YKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciB0cmVlLWlzaCIgZXJyCisnCisKKyMjIworIyMjIHNlcmllcyBUIChscykKKyMjIworIyBTZXR1cCBpcyBjYXJyaWVkIG92ZXIgZnJvbSBzZXJpZXMgUy4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVDogbHMgcm9vdCB0cmVlJyAnCisJc2VkIC1lICJzL1pcJC8vIiA+ZXhwZWN0IDw8LUVPRiAmJgorCTA0MDAwMCB0cmVlICQoZ2l0IHJldi1wYXJzZSBTXnt0cmVlfSkJWgorCUVPRgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFMpICYmCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiA+YWN0dWFsICYmCisJbHMgJHNoYTEgIiIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Q6IGRlbGV0ZSBicmFuY2gnICcKKwlnaXQgYnJhbmNoIHRvLWRlbGV0ZSAmJgorCWdpdCBmYXN0LWltcG9ydCA8PC1FT0YgJiYKKwlyZXNldCByZWZzL2hlYWRzL3RvLWRlbGV0ZQorCWZyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy90by1kZWxldGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVDogZW1wdHkgcmVzZXQgZG9lc250IGRlbGV0ZSBicmFuY2gnICcKKwlnaXQgYnJhbmNoIG5vdC10by1kZWxldGUgJiYKKwlnaXQgZmFzdC1pbXBvcnQgPDwtRU9GICYmCisJcmVzZXQgcmVmcy9oZWFkcy9ub3QtdG8tZGVsZXRlCisJRU9GCisJZ2l0IHNob3ctcmVmICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL25vdC10by1kZWxldGUKKycKKworIyMjCisjIyMgc2VyaWVzIFUgKGZpbGVkZWxldGUpCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVTogaW5pdGlhbGl6ZSBmb3IgVSB0ZXN0cycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvVQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwl0ZXN0IHNldHVwCisJQ09NTUlUCisJTSAxMDA2NDQgaW5saW5lIGhlbGxvLmMKKwlkYXRhIDw8QkxPQgorCWJsb2IgMQorCUJMT0IKKwlNIDEwMDY0NCBpbmxpbmUgZ29vZC9uaWdodC50eHQKKwlkYXRhIDw8QkxPQgorCXNsZWVwIHdlbGwKKwlCTE9CCisJTSAxMDA2NDQgaW5saW5lIGdvb2QvYnllLnR4dAorCWRhdGEgPDxCTE9CCisJYXUgcmV2b2lyCisJQkxPQgorCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IGZpbGVkZWxldGUgZmlsZSBzdWNjZWVkcycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvVQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlkZWxldGUgZ29vZC9uaWdodC50eHQKKwlDT01NSVQKKwlmcm9tIHJlZnMvaGVhZHMvVV4wCisJRCBnb29kL25pZ2h0LnR4dAorCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IHZhbGlkYXRlIGZpbGUgZGVsZXRlIHJlc3VsdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxMDA2NDQgMDAwMDAwIDI5MDdlYmI0YmY4NWQ5MWJmMDcxNmJiM2JkOGE2OGVmNDhkNmRhNzYgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWdvb2QvbmlnaHQudHh0CisJRU9GCisKKwlnaXQgZGlmZi10cmVlIC1NIC1yIFVeMSBVID5hY3R1YWwgJiYKKworCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVOiBmaWxlZGVsZXRlIGRpcmVjdG9yeSBzdWNjZWVkcycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvVQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlkZWxldGUgZ29vZCBkaXIKKwlDT01NSVQKKwlmcm9tIHJlZnMvaGVhZHMvVV4wCisJRCBnb29kCisKKwlJTlBVVF9FTkQKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVTogdmFsaWRhdGUgZGlyZWN0b3J5IGRlbGV0ZSByZXN1bHQnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk6MTAwNjQ0IDAwMDAwMCA2OWNiNzU3OTJmNTUxMjNkODM4OWMxNTZiMGI0MWMyZmYwMGVkNTA3IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlnb29kL2J5ZS50eHQKKwlFT0YKKworCWdpdCBkaWZmLXRyZWUgLU0gLXIgVV4xIFUgPmFjdHVhbCAmJgorCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IGZpbGVkZWxldGUgcm9vdCBzdWNjZWVkcycgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvVQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwltdXN0IHN1Y2NlZWQKKwlDT01NSVQKKwlmcm9tIHJlZnMvaGVhZHMvVV4wCisJRCAiIgorCisJSU5QVVRfRU5ECisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IHZhbGlkYXRlIHJvb3QgZGVsZXRlIHJlc3VsdCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCToxMDA2NDQgMDAwMDAwIGMxODE0N2RjNjQ4NDgxZWViNjVkYzVlNjY2Mjg0MjlhNjQ4NDMzMjcgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWhlbGxvLmMKKwlFT0YKKworCWdpdCBkaWZmLXRyZWUgLU0gLXIgVV4xIFUgPmFjdHVhbCAmJgorCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKKyMjIworIyMjIHNlcmllcyBWIChjaGVja3BvaW50KQorIyMjCisKKyMgVGhlIGNvbW1hbmRzIGluIGlucHV0X2ZpbGUgc2hvdWxkIG5vdCBwcm9kdWNlIGFueSBvdXRwdXQgb24gdGhlIGZpbGUKKyMgZGVzY3JpcHRvciBzZXQgd2l0aCAtLWNhdC1ibG9iLWZkIChvciBzdGRvdXQgaWYgdW5zcGVjaWZpZWQpLgorIworIyBUbyBtYWtlIHN1cmUgeW91J3JlIG9ic2VydmluZyB0aGUgc2lkZSBlZmZlY3RzIG9mIGNoZWNrcG9pbnQgKmJlZm9yZSoKKyMgZmFzdC1pbXBvcnQgdGVybWluYXRlcyAoYW5kIHRodXMgd3JpdGVzIG91dCBpdHMgc3RhdGUpLCBjaGVjayB0aGF0IHRoZQorIyBmYXN0LWltcG9ydCBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcgdXNpbmcgYmFja2dyb3VuZF9pbXBvcnRfc3RpbGxfcnVubmluZworIyAqYWZ0ZXIqIGV2YWx1YXRpbmcgdGhlIHRlc3QgY29uZGl0aW9ucy4KK2JhY2tncm91bmRfaW1wb3J0X3RoZW5fY2hlY2twb2ludCAoKSB7CisJb3B0aW9ucz0kMQorCWlucHV0X2ZpbGU9JDIKKworCW1rZmlmbyBWLmlucHV0CisJZXhlYyA4PD5WLmlucHV0CisJcm0gVi5pbnB1dAorCisJbWtmaWZvIFYub3V0cHV0CisJZXhlYyA5PD5WLm91dHB1dAorCXJtIFYub3V0cHV0CisKKwkoCisJCWdpdCBmYXN0LWltcG9ydCAkb3B0aW9ucyA8JjggPiY5ICYKKwkJZWNobyAkISA+JjkKKwkJd2FpdCAkIQorCQllY2hvID4mMiAiYmFja2dyb3VuZCBmYXN0LWltcG9ydCB0ZXJtaW5hdGVkIHRvbyBlYXJseSB3aXRoIGV4aXQgY29kZSAkPyIKKwkJIyBVbi1ibG9jayB0aGUgcmVhZCBsb29wIGluIHRoZSBtYWluIHNoZWxsIHByb2Nlc3MuCisJCWVjaG8gPiY5IFVORVhQRUNURUQKKwkpICYKKwlzaF9waWQ9JCEKKwlyZWFkIGZpX3BpZCA8JjkKKwkjIFdlIGRvbid0IG1pbmQgaWYgZmFzdC1pbXBvcnQgaGFzIGFscmVhZHkgZGllZCBieSB0aGUgdGltZSB0aGUgdGVzdAorCSMgZW5kcy4KKwl0ZXN0X3doZW5fZmluaXNoZWQgIgorCQlleGVjIDg+Ji07IGV4ZWMgOT4mLTsKKwkJa2lsbCAkc2hfcGlkICYmIHdhaXQgJHNoX3BpZAorCQlraWxsICRmaV9waWQgJiYgd2FpdCAkZmlfcGlkCisJCXRydWUiCisKKwkjIFN0YXJ0IGluIHRoZSBiYWNrZ3JvdW5kIHRvIGVuc3VyZSB3ZSBhZGhlcmUgc3RyaWN0bHkgdG8gKGJsb2NraW5nKQorCSMgcGlwZXMgd3JpdGluZyBzZXF1ZW5jZS4gV2Ugd2FudCB0byBhc3N1bWUgdGhhdCB0aGUgd3JpdGUgYmVsb3cgY291bGQKKwkjIGJsb2NrLCBlLmcuIGlmIGZhc3QtaW1wb3J0IGJsb2NrcyB3cml0aW5nIGl0cyBvd24gb3V0cHV0IHRvICY5CisJIyBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYWRlciBvbiAmOSB5ZXQuCisJKAorCQljYXQgIiRpbnB1dF9maWxlIgorCQllY2hvICJjaGVja3BvaW50IgorCQllY2hvICJwcm9ncmVzcyBjaGVja3BvaW50IgorCSkgPiY4ICYKKworCWVycm9yPTEgOyMgYXNzdW1lIHRoZSB3b3JzdAorCXdoaWxlIHJlYWQgb3V0cHV0IDwmOQorCWRvCisJCWlmIHRlc3QgIiRvdXRwdXQiID0gInByb2dyZXNzIGNoZWNrcG9pbnQiCisJCXRoZW4KKwkJCWVycm9yPTAKKwkJCWJyZWFrCisJCWVsaWYgdGVzdCAiJG91dHB1dCIgPSAiVU5FWFBFQ1RFRCIKKwkJdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJIyBvdGhlcndpc2UgaWdub3JlIGNydWZ0CisJCWVjaG8gPiYyICJjcnVmdDogJG91dHB1dCIKKwlkb25lCisKKwlpZiB0ZXN0ICRlcnJvciAtZXEgMQorCXRoZW4KKwkJZmFsc2UKKwlmaQorfQorCitiYWNrZ3JvdW5kX2ltcG9ydF9zdGlsbF9ydW5uaW5nICgpIHsKKwlpZiAhIGtpbGwgLTAgIiRmaV9waWQiCisJdGhlbgorCQllY2hvID4mMiAiYmFja2dyb3VuZCBmYXN0LWltcG9ydCB0ZXJtaW5hdGVkIHRvbyBlYXJseSIKKwkJZmFsc2UKKwlmaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ1Y6IGNoZWNrcG9pbnQgaGVscGVyIGRvZXMgbm90IGdldCBzdHVjayB3aXRoIGV4dHJhIG91dHB1dCcgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJcHJvZ3Jlc3MgZm9vCisJcHJvZ3Jlc3MgYmFyCisKKwlJTlBVVF9FTkQKKworCWJhY2tncm91bmRfaW1wb3J0X3RoZW5fY2hlY2twb2ludCAiIiBpbnB1dCAmJgorCWJhY2tncm91bmRfaW1wb3J0X3N0aWxsX3J1bm5pbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdWOiBjaGVja3BvaW50IHVwZGF0ZXMgcmVmcyBhZnRlciByZXNldCcgJworCWNhdCA+aW5wdXQgPDwtXElOUFVUX0VORCAmJgorCXJlc2V0IHJlZnMvaGVhZHMvVgorCWZyb20gcmVmcy9oZWFkcy9VCisKKwlJTlBVVF9FTkQKKworCWJhY2tncm91bmRfaW1wb3J0X3RoZW5fY2hlY2twb2ludCAiIiBpbnB1dCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBWKSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFUpIiAmJgorCWJhY2tncm91bmRfaW1wb3J0X3N0aWxsX3J1bm5pbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdWOiBjaGVja3BvaW50IHVwZGF0ZXMgcmVmcyBhbmQgbWFya3MgYWZ0ZXIgY29tbWl0JyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9WCisJbWFyayA6MQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgMAorCWZyb20gcmVmcy9oZWFkcy9VCisKKwlJTlBVVF9FTkQKKworCWJhY2tncm91bmRfaW1wb3J0X3RoZW5fY2hlY2twb2ludCAiLS1leHBvcnQtbWFya3M9bWFya3MuYWN0dWFsIiBpbnB1dCAmJgorCisJZWNobyAiOjEgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFYpIiA+bWFya3MuZXhwZWN0ZWQgJiYKKworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBWXikiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBVKSIgJiYKKwl0ZXN0X2NtcCBtYXJrcy5leHBlY3RlZCBtYXJrcy5hY3R1YWwgJiYKKwliYWNrZ3JvdW5kX2ltcG9ydF9zdGlsbF9ydW5uaW5nCisnCisKKyMgUmUtY3JlYXRlIHRoZSBleGFjdCBzYW1lIGNvbW1pdCwgYnV0IG9uIGEgZGlmZmVyZW50IGJyYW5jaDogbm8gbmV3IG9iamVjdCBpcworIyBjcmVhdGVkIGluIHRoZSBkYXRhYmFzZSwgYnV0IHRoZSByZWZzIGFuZCBtYXJrcyBzdGlsbCBuZWVkIHRvIGJlIHVwZGF0ZWQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ1Y6IGNoZWNrcG9pbnQgdXBkYXRlcyByZWZzIGFuZCBtYXJrcyBhZnRlciBjb21taXQgKG5vIG5ldyBvYmplY3RzKScgJworCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvVjIKKwltYXJrIDoyCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSAwCisJZnJvbSByZWZzL2hlYWRzL1UKKworCUlOUFVUX0VORAorCisJYmFja2dyb3VuZF9pbXBvcnRfdGhlbl9jaGVja3BvaW50ICItLWV4cG9ydC1tYXJrcz1tYXJrcy5hY3R1YWwiIGlucHV0ICYmCisKKwllY2hvICI6MiAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgVjIpIiA+bWFya3MuZXhwZWN0ZWQgJiYKKworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBWMikiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBWKSIgJiYKKwl0ZXN0X2NtcCBtYXJrcy5leHBlY3RlZCBtYXJrcy5hY3R1YWwgJiYKKwliYWNrZ3JvdW5kX2ltcG9ydF9zdGlsbF9ydW5uaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnVjogY2hlY2twb2ludCB1cGRhdGVzIHRhZ3MgYWZ0ZXIgdGFnJyAnCisJY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwl0YWcgVnRhZworCWZyb20gcmVmcy9oZWFkcy9WCisJdGFnZ2VyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSAwCisKKwlJTlBVVF9FTkQKKworCWJhY2tncm91bmRfaW1wb3J0X3RoZW5fY2hlY2twb2ludCAiIiBpbnB1dCAmJgorCWdpdCBzaG93LXJlZiAtZCBWdGFnICYmCisJYmFja2dyb3VuZF9pbXBvcnRfc3RpbGxfcnVubmluZworJworCisjIyMKKyMjIyBzZXJpZXMgVyAoZ2V0LW1hcmsgYW5kIGVtcHR5IG9ycGhhbiBjb21taXRzKQorIyMjCisKK2NhdCA+PlctaW5wdXQgPDwtV19JTlBVVF9FTkQKKwljb21taXQgcmVmcy9oZWFkcy9XLWJyYW5jaAorCW1hcmsgOjEKKwlhdXRob3IgRnVsbCBOYW1lIDx1c2VyQGNvbXBhbnkudGxkPiAxMDAwMDAwMDAwICswMTAwCisJY29tbWl0dGVyIEZ1bGwgTmFtZSA8dXNlckBjb21wYW55LnRsZD4gMTAwMDAwMDAwMCArMDEwMAorCWRhdGEgMjcKKwlJbnRlbnRpb25hbGx5IGVtcHR5IGNvbW1pdAorCUxGc2dldC1tYXJrIDoxCisJV19JTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ1c6IGdldC1tYXJrICYgZW1wdHkgb3JwaGFuIGNvbW1pdCB3aXRoIG5vIG5ld2xpbmVzJyAnCisJc2VkIC1lIHMvTEZzLy8gVy1pbnB1dCB8IHRyIEwgIlxuIiB8IGdpdCBmYXN0LWltcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnVzogZ2V0LW1hcmsgJiBlbXB0eSBvcnBoYW4gY29tbWl0IHdpdGggb25lIG5ld2xpbmUnICcKKwlzZWQgLWUgcy9MRnMvTC8gVy1pbnB1dCB8IHRyIEwgIlxuIiB8IGdpdCBmYXN0LWltcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnVzogZ2V0LW1hcmsgJiBlbXB0eSBvcnBoYW4gY29tbWl0IHdpdGggdWdseSBzZWNvbmQgbmV3bGluZScgJworCSMgVGVjaG5pY2FsbHksIHRoaXMgc2hvdWxkIGZhaWwgYXMgaXQgaGFzIHRvbyBtYW55IGxpbmVmZWVkcworCSMgYWNjb3JkaW5nIHRvIHRoZSBncmFtbWFyIGluIGZhc3QtaW1wb3J0LnR4dC4gIEJ1dCwgZm9yIHdoYXRldmVyCisJIyByZWFzb24sIGl0IHdvcmtzLiAgU2luY2UgdXNpbmcgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIG5ld2xpbmVzCisJIyBkb2VzIG5vdCB3b3JrIHdpdGggb2xkZXIgKHByZS0yLjIyKSB2ZXJzaW9ucyBvZiBnaXQsIGFsbG93IGFwcHMKKwkjIHRoYXQgdXNlZCB0aGlzIHNlY29uZC1uZXdsaW5lIHdvcmthcm91bmQgdG8ga2VlcCB3b3JraW5nIGJ5CisJIyBjaGVja2luZyBpdCB3aXRoIHRoaXMgdGVzdC4uLgorCXNlZCAtZSBzL0xGcy9MTC8gVy1pbnB1dCB8IHRyIEwgIlxuIiB8IGdpdCBmYXN0LWltcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnVzogZ2V0LW1hcmsgJiBlbXB0eSBvcnBoYW4gY29tbWl0IHdpdGggZXJyb25lb3VzIHRoaXJkIG5ld2xpbmUnICcKKwkjIC4uLmJ1dCBkbyBOT1QgYWxsb3cgbW9yZSBlbXB0eSBsaW5lcyB0aGFuIHRoYXQgKHNlZSBwcmV2aW91cyB0ZXN0KS4KKwlzZWQgLWUgcy9MRnMvTExMLyBXLWlucHV0IHwgdHIgTCAiXG4iIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0CisnCisKKyMjIworIyMjIHNlcmllcyBYIChvdGhlciBuZXcgZmVhdHVyZXMpCisjIyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnWDogaGFuZGxpbmcgZW5jb2RpbmcnICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL2VuY29kaW5nCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZW5jb2RpbmcgaXNvLTg4NTktNworCWRhdGEgPDxDT01NSVQKKwlJTlBVVF9FTkQKKworCXByaW50ZiAiUGk6IFwzNjBcbkNPTU1JVFxuIiA+PmlucHV0ICYmCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGNhdC1maWxlIC1wIGVuY29kaW5nIHwgZ3JlcCAkKHByaW50ZiAiXDM2MCIpICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQiBlbmNvZGluZyB8IGdyZXAgJChwcmludGYgIlwzMTdcMjAwIikKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MzAxLWZhc3QtaW1wb3J0LW5vdGVzLnNoIGIvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYTIyM2RjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaApAQCAtMCwwICsxLDcyNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBKb2hhbiBIZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IGZhc3QtaW1wb3J0IG9mIG5vdGVzIG9iamVjdHMnCisuIC4vdGVzdC1saWIuc2gKKworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaXJzdCBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZm9vCitkYXRhIDw8RU9GCitmaWxlIGZvbyBpbiBmaXJzdCBjb21taXQKK0VPRgorCitNIDc1NSBpbmxpbmUgYmFyCitkYXRhIDw8RU9GCitmaWxlIGJhciBpbiBmaXJzdCBjb21taXQKK0VPRgorCitNIDY0NCBpbmxpbmUgYmF6L3h5enp5CitkYXRhIDw8RU9GCitmaWxlIGJhei94eXp6eSBpbiBmaXJzdCBjb21taXQKK0VPRgorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorc2Vjb25kIGNvbW1pdAorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmb28KK2RhdGEgPDxFT0YKK2ZpbGUgZm9vIGluIHNlY29uZCBjb21taXQKK0VPRgorCitNIDc1NSBpbmxpbmUgYmF6L3h5enp5CitkYXRhIDw8RU9GCitmaWxlIGJhei94eXp6eSBpbiBzZWNvbmQgY29tbWl0CitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3RoaXJkIGNvbW1pdAorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmb28KK2RhdGEgPDxFT0YKK2ZpbGUgZm9vIGluIHRoaXJkIGNvbW1pdAorRU9GCisKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmb3VydGggY29tbWl0CitDT01NSVQKKworTSA3NTUgaW5saW5lIGJhcgorZGF0YSA8PEVPRgorZmlsZSBiYXIgaW4gZm91cnRoIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbWFzdGVyIGJyYW5jaCcgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCB3aGF0Y2hhbmdlZCBtYXN0ZXIKKycKKworY29tbWl0ND0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpCitjb21taXQzPSQoZ2l0IHJldi1wYXJzZSAiJGNvbW1pdDReIikKK2NvbW1pdDI9JChnaXQgcmV2LXBhcnNlICIkY29tbWl0NH4yIikKK2NvbW1pdDE9JChnaXQgcmV2LXBhcnNlICIkY29tbWl0NH4zIikKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2ZpcnN0IG5vdGVzIGNvbW1pdAorQ09NTUlUCisKK00gNjQ0IGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFT0YKKworTSA3NTUgaW5saW5lICRjb21taXQyCitkYXRhIDw8RU9GCitmaXJzdCBub3RlIGZvciBzZWNvbmQgY29tbWl0CitFT0YKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgZmlyc3Qgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbm90ZXMgd2l0aCBzaW1wbGUgTSBjb21tYW5kJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2ZlYXR1cmUgbm90ZXMKK2NvbW1pdCByZWZzL25vdGVzL3Rlc3QKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorc2Vjb25kIG5vdGVzIGNvbW1pdAorQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy90ZXN0XjAKK04gaW5saW5lICRjb21taXQzCitkYXRhIDw8RU9GCitmaXJzdCBub3RlIGZvciB0aGlyZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0NAorZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgZmlyc3Qgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorICAgIHRoaXJkIGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgZmlyc3Qgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBub3RlcyB3aXRoIHNpbXBsZSBOIGNvbW1hbmQnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit0aGlyZCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQyCitkYXRhIDw8RU9GCitzZWNvbmQgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQzCitkYXRhIDw8RU9GCitzZWNvbmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDQKK2RhdGEgPDxFT0YKK3NlY29uZCBub3RlIGZvciBmb3VydGggY29tbWl0CitFT0YKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGZvdXJ0aCBjb21taXQKKyAgICBzZWNvbmQgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorICAgIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBub3RlIGZvciB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgc2Vjb25kIG5vdGUgZm9yIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKKyAgICBzZWNvbmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBleGlzdGluZyBub3RlcyB3aXRoIE4gY29tbWFuZCcgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2ZvdXJ0aCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitNIDY0NCBpbmxpbmUgJChlY2hvICIkY29tbWl0MyIgfCBzZWQgInN8Xi4ufCYvfCIpCitkYXRhIDw8RU9GCitwcmVmaXggb2Ygbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lICQoZWNobyAiJGNvbW1pdDQiIHwgc2VkICJzfF4uLnwmL3wiKQorZGF0YSA8PEVPRgorcHJlZml4IG9mIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCitNIDY0NCBpbmxpbmUgJChlY2hvICIkY29tbWl0NCIgfCBzZWQgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IikKK2RhdGEgPDxFT0YKK3ByZS1wcmVmaXggb2Ygbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCit0aGlyZCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQzCitkYXRhIDw8RU9GCit0aGlyZCBub3RlIGZvciB0aGlyZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0NAorZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorRU9GCisKKworSU5QVVRfRU5ECisKK3doaXRlc3BhY2U9IiAgICAiCisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGZvdXJ0aCBjb21taXQKKyAgICBwcmUtcHJlZml4IG9mIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyR3aGl0ZXNwYWNlCisgICAgcHJlZml4IG9mIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyR3aGl0ZXNwYWNlCisgICAgdGhpcmQgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorICAgIHRoaXJkIGNvbW1pdAorICAgIHByZWZpeCBvZiBub3RlIGZvciB0aGlyZCBjb21taXQKKyR3aGl0ZXNwYWNlCisgICAgdGhpcmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIHRoaXJkIG5vdGUgZm9yIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKKyAgICB0aGlyZCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGNvbmNhdGVuYXRpb24gbm90ZXMgd2l0aCBNIGNvbW1hbmQnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaWZ0aCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitkZWxldGVhbGwKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGRlbGV0ZWFsbCBhbHNvIHJlbW92ZXMgbm90ZXMnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitzaXh0aCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitNIDY0NCBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK00gNjQ0IGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK2ZvdXJ0aCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgorZm91cnRoIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgdGhpcmQgY29tbWl0CisgICAgZm91cnRoIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKKyAgICBmb3VydGggbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGxhdGVyIE4gY29tbWFuZHMgb3ZlcnJpZGUgZWFybGllciBNIGNvbW1hbmRzJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCisjIFdyaXRlIGZhc3QtaW1wb3J0IGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGNvbW1pdHMKK2Zhc3RfaW1wb3J0X2NvbW1pdHMgKCkgeworCW15X3JlZj0kMQorCW15X251bV9jb21taXRzPSQyCisJbXlfYXBwZW5kX3RvX2ZpbGU9JDMKKwlteV9pPTAKKwl3aGlsZSB0ZXN0ICRteV9pIC1sdCAkbXlfbnVtX2NvbW1pdHMKKwlkbworCQlteV9pPSQoKCRteV9pICsgMSkpCisJCXRlc3RfdGljaworCQljYXQgPj4iJG15X2FwcGVuZF90b19maWxlIiA8PElOUFVUX0VORAorY29tbWl0ICRteV9yZWYKK21hcmsgOiRteV9pCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAjJG15X2kKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZmlsZQorZGF0YSA8PEVPRgorZmlsZSBjb250ZW50cyBpbiBjb21taXQgIyRteV9pCitFT0YKKworSU5QVVRfRU5ECisJZG9uZQorfQorCisjIFdyaXRlIGZhc3QtaW1wb3J0IGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG5vdGVzIGFubm90YXRpbmcKKyMgdGhlIGNvbW1pdHMgY3JlYXRlZCBieSBmYXN0X2ltcG9ydF9jb21taXRzKCkKK2Zhc3RfaW1wb3J0X25vdGVzICgpIHsKKwlteV9ub3Rlc19yZWY9JDEKKwlteV9udW1fY29tbWl0cz0kMgorCW15X2FwcGVuZF90b19maWxlPSQzCisJbXlfbm90ZV9hcHBlbmQ9JDQKKwl0ZXN0X3RpY2sKKwljYXQgPj4iJG15X2FwcGVuZF90b19maWxlIiA8PElOUFVUX0VORAorY29tbWl0ICRteV9ub3Rlc19yZWYKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0dGluZyAkbXlfbnVtX2NvbW1pdHMgbm90ZXMKK0NPTU1JVAorCitJTlBVVF9FTkQKKworCW15X2k9MAorCXdoaWxlIHRlc3QgJG15X2kgLWx0ICRteV9udW1fY29tbWl0cworCWRvCisJCW15X2k9JCgoJG15X2kgKyAxKSkKKwkJY2F0ID4+IiRteV9hcHBlbmRfdG9fZmlsZSIgPDxJTlBVVF9FTkQKK04gaW5saW5lIDokbXlfaQorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMkbXlfaSRteV9ub3RlX2FwcGVuZAorRU9GCisKK0lOUFVUX0VORAorCWRvbmUKK30KKworCitybSBpbnB1dCBleHBlY3QKK251bV9jb21taXRzPTQwMAorIyBDcmVhdGUgbG90cyBvZiBjb21taXRzCitmYXN0X2ltcG9ydF9jb21taXRzICJyZWZzL2hlYWRzL21hbnlfY29tbWl0cyIgJG51bV9jb21taXRzIGlucHV0CisjIENyZWF0ZSBvbmUgbm90ZSBwZXIgYWJvdmUgY29tbWl0CitmYXN0X2ltcG9ydF9ub3RlcyAicmVmcy9ub3Rlcy9tYW55X25vdGVzIiAkbnVtX2NvbW1pdHMgaW5wdXQKKyMgQWRkIGEgY291cGxlIG9mIG5vbi1ub3RlcyBhcyB3ZWxsCit0ZXN0X3RpY2sKK2NhdCA+PmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9tYW55X25vdGVzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdHRpbmcgc29tZSBub24tbm90ZXMgdG8gdGhlIG5vdGVzIHRyZWUKK0NPTU1JVAorCitNIDc1NSBpbmxpbmUgZm9vYmFyL25vbi1ub3RlLnR4dAorZGF0YSA8PEVPRgorVGhpcyBpcyBub3QgYSBub3RlLCBidXQgcmF0aGVyIGEgcmVndWxhciBmaWxlIHJlc2lkaW5nIGluIGEgbm90ZXMgdHJlZQorRU9GCisKK00gNjQ0IGlubGluZSBkZWFkYmVlZgorZGF0YSA8PEVPRgorTm9uLW5vdGUgZmlsZQorRU9GCisKK00gNjQ0IGlubGluZSBkZS9hZGJlZWYKK2RhdGEgPDxFT0YKK0Fub3RoZXIgbm9uLW5vdGUgZmlsZQorRU9GCisKK0lOUFVUX0VORAorIyBGaW5hbGx5IGNyZWF0ZSB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gYWxsIHRoZXNlIG5vdGVzIGFuZCBjb21taXRzCitpPSRudW1fY29tbWl0cword2hpbGUgdGVzdCAkaSAtZ3QgMAorZG8KKwljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMkaQorICAgIG5vdGUgZm9yIGNvbW1pdCAjJGkKK0VYUEVDVF9FTkQKKwlpPSQoKCRpIC0gMSkpCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBsb3RzIG9mIGNvbW1pdHMgYW5kIG5vdGVzJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL21hbnlfbm90ZXMgZ2l0IGxvZyByZWZzL2hlYWRzL21hbnlfY29tbWl0cyB8CisJICAgIGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBsb3RzIG9mIG5vdGVzIHRyaWdnZXIgYSBmYW5vdXQgc2NoZW1lJyAnCisKKwkjIE5vbmUgb2YgdGhlIGVudHJpZXMgaW4gdGhlIHRvcC1sZXZlbCBub3RlcyB0cmVlIHNob3VsZCBiZSBhIGZ1bGwgU0hBMQorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHJlZnMvbm90ZXMvbWFueV9ub3RlcyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJaWYgdGVzdCAkKGV4cHIgbGVuZ3RoICIkcGF0aCIpIC1nZSA0MAorCQl0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCWRvbmUKKworJworCisjIENyZWF0ZSBhbm90aGVyIG5vdGVzIHRyZWUgZnJvbSB0aGUgb25lIGFib3ZlCitTUD0iICIKK2NhdCA+PmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9vdGhlcl9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAjJCgoJG51bV9jb21taXQgKyAxKSkKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvbWFueV9jb21taXRzCitNIDY0NCBpbmxpbmUgZmlsZQorZGF0YSA8PEVPRgorZmlsZSBjb250ZW50cyBpbiBjb21taXQgIyQoKCRudW1fY29tbWl0ICsgMSkpCitFT0YKKworY29tbWl0IHJlZnMvbm90ZXMvb3RoZXJfbm90ZXMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0dGluZyBvbmUgbW9yZSBub3RlIG9uIGEgdHJlZSBpbXBvcnRlZCBmcm9tIGEgcHJldmlvdXMgbm90ZXMgdHJlZQorQ09NTUlUCisKK00gMDQwMDAwICQoZ2l0IGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9JVQgcmVmcy9ub3Rlcy9tYW55X25vdGVzKSRTUAorTiBpbmxpbmUgOiQoKCRudW1fY29tbWl0ICsgMSkpCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyQoKCRudW1fY29tbWl0ICsgMSkpCitFT0YKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBpbXBvcnRpbmcgYSBub3RlcyB0cmVlIHJlc3BlY3RzIHRoZSBmYW5vdXQgc2NoZW1lJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCisJIyBOb25lIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB0b3AtbGV2ZWwgbm90ZXMgdHJlZSBzaG91bGQgYmUgYSBmdWxsIFNIQTEKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByZWZzL25vdGVzL290aGVyX25vdGVzIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQlpZiB0ZXN0ICQoZXhwciBsZW5ndGggIiRwYXRoIikgLWdlIDQwCisJCXRoZW4KKwkJCXJldHVybiAxCisJCWZpCisJZG9uZQorJworCitjYXQgPj5leHBlY3Rfbm9uLW5vdGUxIDw8IEVPRgorVGhpcyBpcyBub3QgYSBub3RlLCBidXQgcmF0aGVyIGEgcmVndWxhciBmaWxlIHJlc2lkaW5nIGluIGEgbm90ZXMgdHJlZQorRU9GCisKK2NhdCA+PmV4cGVjdF9ub24tbm90ZTIgPDwgRU9GCitOb24tbm90ZSBmaWxlCitFT0YKKworY2F0ID4+ZXhwZWN0X25vbi1ub3RlMyA8PCBFT0YKK0Fub3RoZXIgbm9uLW5vdGUgZmlsZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IG5vbi1ub3RlcyBhcmUgdW50b3VjaGVkIGJ5IGEgZmFub3V0IGNoYW5nZScgJworCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvbWFueV9ub3Rlczpmb29iYXIvbm9uLW5vdGUudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMSBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmRlYWRiZWVmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmRlL2FkYmVlZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub24tbm90ZTMgYWN0dWFsCisKKycKKworIyBDaGFuZ2UgdGhlIG5vdGVzIGZvciB0aGUgdGhyZWUgdG9wIGNvbW1pdHMKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvbWFueV9ub3RlcworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjaGFuZ2luZyBub3RlcyBmb3IgdGhlIHRvcCB0aHJlZSBjb21taXRzCitDT01NSVQKK2Zyb20gcmVmcy9ub3Rlcy9tYW55X25vdGVzXjAKK0lOUFVUX0VORAorCitybSBleHBlY3QKK2k9JG51bV9jb21taXRzCitqPTAKK3doaWxlIHRlc3QgJGogLWx0IDMKK2RvCisJY2F0ID4+aW5wdXQgPDxJTlBVVF9FTkQKK04gaW5saW5lIHJlZnMvaGVhZHMvbWFueV9jb21taXRzfiRqCitkYXRhIDw8RU9GCitjaGFuZ2VkIG5vdGUgZm9yIGNvbW1pdCAjJGkKK0VPRgorSU5QVVRfRU5ECisJY2F0ID4+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGNvbW1pdCAjJGkKKyAgICBjaGFuZ2VkIG5vdGUgZm9yIGNvbW1pdCAjJGkKK0VYUEVDVF9FTkQKKwlpPSQoKCRpIC0gMSkpCisJaj0kKCgkaiArIDEpKQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2UgYSBmZXcgZXhpc3Rpbmcgbm90ZXMnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvbWFueV9ub3RlcyBnaXQgbG9nIC1uMyByZWZzL2hlYWRzL21hbnlfY29tbWl0cyB8CisJICAgIGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBjaGFuZ2luZyBub3RlcyByZXNwZWN0IGV4aXN0aW5nIGZhbm91dCcgJworCisJIyBOb25lIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB0b3AtbGV2ZWwgbm90ZXMgdHJlZSBzaG91bGQgYmUgYSBmdWxsIFNIQTEKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByZWZzL25vdGVzL21hbnlfbm90ZXMgfAorCXdoaWxlIHJlYWQgcGF0aAorCWRvCisJCWlmIHRlc3QgJChleHByIGxlbmd0aCAiJHBhdGgiKSAtZ2UgNDAKKwkJdGhlbgorCQkJcmV0dXJuIDEKKwkJZmkKKwlkb25lCisKKycKKworcmVtYWluaW5nX25vdGVzPTEwCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL21hbnlfbm90ZXMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorcmVtb3ZpbmcgYWxsIG5vdGVzIGJ1dCAkcmVtYWluaW5nX25vdGVzCitDT01NSVQKK2Zyb20gcmVmcy9ub3Rlcy9tYW55X25vdGVzXjAKK0lOUFVUX0VORAorCitpPSQoKCRudW1fY29tbWl0cyAtICRyZW1haW5pbmdfbm90ZXMpKQorZm9yIHNoYTEgaW4gJChnaXQgcmV2LWxpc3QgLW4gJGkgcmVmcy9oZWFkcy9tYW55X2NvbW1pdHMpCitkbworCWNhdCA+PmlucHV0IDw8SU5QVVRfRU5ECitOIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgJHNoYTEKK0lOUFVUX0VORAorZG9uZQorCitpPSRudW1fY29tbWl0cworcm0gZXhwZWN0Cit3aGlsZSB0ZXN0ICRpIC1ndCAwCitkbworCWNhdCA+PmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBjb21taXQgIyRpCitFWFBFQ1RfRU5ECisJaWYgdGVzdCAkaSAtbGUgJHJlbWFpbmluZ19ub3RlcworCXRoZW4KKwkJY2F0ID4+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIG5vdGUgZm9yIGNvbW1pdCAjJGkKK0VYUEVDVF9FTkQKKwlmaQorCWk9JCgoJGkgLSAxKSkKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGxvdHMgb2Ygbm90ZXMnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvbWFueV9ub3RlcyBnaXQgbG9nIHJlZnMvaGVhZHMvbWFueV9jb21taXRzIHwKKwkgICAgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IHJlbW92aW5nIG5vdGVzIHRyaWdnZXIgZmFub3V0IGNvbnNvbGlkYXRpb24nICcKKworCSMgQWxsIGVudHJpZXMgaW4gdGhlIHRvcC1sZXZlbCBub3RlcyB0cmVlIHNob3VsZCBiZSBhIGZ1bGwgU0hBMQorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yIHJlZnMvbm90ZXMvbWFueV9ub3RlcyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJIyBFeHBsaWNpdGx5IGlnbm9yZSB0aGUgbm9uLW5vdGUgcGF0aHMKKwkJdGVzdCAiJHBhdGgiID0gImZvb2Jhci9ub24tbm90ZS50eHQiICYmIGNvbnRpbnVlCisJCXRlc3QgIiRwYXRoIiA9ICJkZWFkYmVlZiIgJiYgY29udGludWUKKwkJdGVzdCAiJHBhdGgiID0gImRlL2FkYmVlZiIgJiYgY29udGludWUKKworCQlpZiB0ZXN0ICQoZXhwciBsZW5ndGggIiRwYXRoIikgLW5lIDQwCisJCXRoZW4KKwkJCXJldHVybiAxCisJCWZpCisJZG9uZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IG5vbi1ub3RlcyBhcmUgdW50b3VjaGVkIGJ5IGEgZmFub3V0IGNoYW5nZScgJworCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvbWFueV9ub3Rlczpmb29iYXIvbm9uLW5vdGUudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMSBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmRlYWRiZWVmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmRlL2FkYmVlZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub24tbm90ZTMgYWN0dWFsCisKKycKKworCitybSBpbnB1dCBleHBlY3QKK251bV9ub3Rlc19yZWZzPTEwCitudW1fY29tbWl0cz0xNgorc29tZV9jb21taXRzPTgKKyMgQ3JlYXRlIGNvbW1pdHMKK2Zhc3RfaW1wb3J0X2NvbW1pdHMgInJlZnMvaGVhZHMvbW9yZV9jb21taXRzIiAkbnVtX2NvbW1pdHMgaW5wdXQKKyMgQ3JlYXRlIG9uZSBub3RlIHBlciBhYm92ZSBjb21taXQgcGVyIG5vdGVzIHJlZgoraT0wCit3aGlsZSB0ZXN0ICRpIC1sdCAkbnVtX25vdGVzX3JlZnMKK2RvCisJaT0kKCgkaSArIDEpKQorCWZhc3RfaW1wb3J0X25vdGVzICJyZWZzL25vdGVzL21vcmVfbm90ZXNfJGkiICRudW1fY29tbWl0cyBpbnB1dAorZG9uZQorIyBUcmlnZ2VyIGJyYW5jaCByZWxvYWRpbmcgaW4gZ2l0LWZhc3QtaW1wb3J0IGJ5IHJlcGVhdGluZyB0aGUgbm90ZSBjcmVhdGlvbgoraT0wCit3aGlsZSB0ZXN0ICRpIC1sdCAkbnVtX25vdGVzX3JlZnMKK2RvCisJaT0kKCgkaSArIDEpKQorCWZhc3RfaW1wb3J0X25vdGVzICJyZWZzL25vdGVzL21vcmVfbm90ZXNfJGkiICRzb21lX2NvbW1pdHMgaW5wdXQgIiAoMikiCitkb25lCisjIEZpbmFsbHkgY3JlYXRlIHRoZSBleHBlY3RlZCBvdXRwdXQgZnJvbSB0aGUgbm90ZXMgaW4gcmVmcy9ub3Rlcy9tb3JlX25vdGVzXzEKK2k9JG51bV9jb21taXRzCit3aGlsZSB0ZXN0ICRpIC1ndCAwCitkbworCW5vdGVfZGF0YT0ibm90ZSBmb3IgY29tbWl0ICMkaSIKKwlpZiB0ZXN0ICRpIC1sZSAkc29tZV9jb21taXRzCisJdGhlbgorCQlub3RlX2RhdGE9IiRub3RlX2RhdGEgKDIpIgorCWZpCisJY2F0ID4+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGNvbW1pdCAjJGkKKyAgICAkbm90ZV9kYXRhCitFWFBFQ1RfRU5ECisJaT0kKCgkaSAtIDEpKQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJhZGQgbm90ZXMgdG8gJG51bV9jb21taXRzIGNvbW1pdHMgaW4gZWFjaCBvZiAkbnVtX25vdGVzX3JlZnMgcmVmcyIgJworCisJZ2l0IGZhc3QtaW1wb3J0IC0tYWN0aXZlLWJyYW5jaGVzPTUgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL21vcmVfbm90ZXNfMSBnaXQgbG9nIHJlZnMvaGVhZHMvbW9yZV9jb21taXRzIHwKKwkgICAgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTMwMi1mYXN0LWltcG9ydC11bnBhY2stbGltaXQuc2ggYi90L3Q5MzAyLWZhc3QtaW1wb3J0LXVucGFjay1saW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjFjMzljCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTMwMi1mYXN0LWltcG9ydC11bnBhY2stbGltaXQuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgZmFzdC1pbXBvcnQgdW5wYWNrIGxpbWl0JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBsb29zZSBvYmplY3RzIG9uIGltcG9ydCcgJworCXRlc3RfdGljayAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWluaXRpYWwKKwlDT01NSVQKKworCWRvbmUKKwlJTlBVVF9FTkQKKworCWdpdCAtYyBmYXN0aW1wb3J0LnVucGFja0xpbWl0PTIgZmFzdC1pbXBvcnQgLS1kb25lIDxpbnB1dCAmJgorCWdpdCBmc2NrIC0tbm8tcHJvZ3Jlc3MgJiYKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvPz8gLXR5cGUgZiB8IHdjIC1sKSAtZXEgMiAmJgorCXRlc3QgJChmaW5kIC5naXQvb2JqZWN0cy9wYWNrIC10eXBlIGYgfCB3YyAtbCkgLWVxIDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlnZ2VyIHBhY2tzIGFyZSBwcmVzZXJ2ZWQnICcKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlpbmNyZW1lbnRhbCBzaG91bGQgY3JlYXRlIGEgcGFjaworCUNPTU1JVAorCWZyb20gcmVmcy9oZWFkcy9tYXN0ZXJeMAorCisJY29tbWl0IHJlZnMvaGVhZHMvYnJhbmNoCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWJyYW5jaAorCUNPTU1JVAorCisJZG9uZQorCUlOUFVUX0VORAorCisJZ2l0IC1jIGZhc3RpbXBvcnQudW5wYWNrTGltaXQ9MiBmYXN0LWltcG9ydCAtLWRvbmUgPGlucHV0ICYmCisJZ2l0IGZzY2sgLS1uby1wcm9ncmVzcyAmJgorCXRlc3QgJChmaW5kIC5naXQvb2JqZWN0cy8/PyAtdHlwZSBmIHwgd2MgLWwpIC1lcSAyICYmCisJdGVzdCAkKGZpbmQgLmdpdC9vYmplY3RzL3BhY2sgLXR5cGUgZiB8IHdjIC1sKSAtZXEgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29rdXBzIGFmdGVyIGNoZWNrcG9pbnQgd29ya3MnICcKKwloZWxsb19pZD0kKGVjaG8gaGVsbG8gfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdCBibG9iKSAmJgorCWlkPSIkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURSIgJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyXjApICYmCisJKAorCQljYXQgPDwtSU5QVVRfRU5EICYmCisJCWJsb2IKKwkJbWFyayA6MQorCQlkYXRhIDYKKwkJaGVsbG8KKworCQljb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJbWFyayA6MgorCQljb21taXR0ZXIgJGlkCisJCWRhdGEgPDxDT01NSVQKKwkJY2hlY2twb2ludCBhZnRlciB0aGlzCisJCUNPTU1JVAorCQlmcm9tIHJlZnMvaGVhZHMvbWFzdGVyXjAKKwkJTSAxMDA2NDQgOjEgaGVsbG8KKworCQkjIHByZS1jaGVja3BvaW50CisJCWNhdC1ibG9iIDoxCisJCWNhdC1ibG9iICRoZWxsb19pZAorCQljaGVja3BvaW50CisJCSMgcG9zdC1jaGVja3BvaW50CisJCWNhdC1ibG9iIDoxCisJCWNhdC1ibG9iICRoZWxsb19pZAorCQlJTlBVVF9FTkQKKworCQluPTAgJiYKKwkJZnJvbT0kYmVmb3JlICYmCisJCXdoaWxlIHRlc3QgeCIkZnJvbSIgPSB4IiRiZWZvcmUiCisJCWRvCisJCQlpZiB0ZXN0ICRuIC1ndCAzMAorCQkJdGhlbgorCQkJCWVjaG8gPiYyICJjaGVja3BvaW50IGRpZCBub3QgdXBkYXRlIGJyYW5jaCIgJiYKKwkJCQlleGl0IDEKKwkJCWVsc2UKKwkJCQluPSQoKCRuICsgMSkpCisJCQlmaSAmJgorCQkJc2xlZXAgMSAmJgorCQkJZnJvbT0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXJeMCkKKwkJZG9uZSAmJgorCQljYXQgPDwtSU5QVVRfRU5EICYmCisJCWNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorCQljb21taXR0ZXIgJGlkCisJCWRhdGEgPDxDT01NSVQKKwkJbWFrZSBzdXJlIGZyb20gInVucGFja2VkIHNoYTEgcmVmZXJlbmNlIiB3b3JrcywgdG9vCisJCUNPTU1JVAorCQlmcm9tICRmcm9tCisJCUlOUFVUX0VORAorCQllY2hvIGRvbmUKKwkpIHwgZ2l0IC1jIGZhc3RpbXBvcnQudW5wYWNrTGltaXQ9MTAwIGZhc3QtaW1wb3J0IC0tZG9uZSAmJgorCXRlc3QgJChmaW5kIC5naXQvb2JqZWN0cy8/PyAtdHlwZSBmIHwgd2MgLWwpIC1lcSA2ICYmCisJdGVzdCAkKGZpbmQgLmdpdC9vYmplY3RzL3BhY2sgLXR5cGUgZiB8IHdjIC1sKSAtZXEgMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkzMDMtZmFzdC1pbXBvcnQtY29tcHJlc3Npb24uc2ggYi90L3Q5MzAzLWZhc3QtaW1wb3J0LWNvbXByZXNzaW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwNDVmMDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzAzLWZhc3QtaW1wb3J0LWNvbXByZXNzaW9uLnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb21wcmVzc2lvbiBzZXR0aW5nIG9mIGZhc3QtaW1wb3J0IHV0aWxpdHknCisuIC4vdGVzdC1saWIuc2gKKworIyBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byB0ZXN0LWxpYi5zaCB0b2dldGhlciB3aXRoIHRoZQorIyBjb3B5IGluIHQwMDIxIGFmdGVyIGJvdGggdG9waWNzIGhhdmUgZ3JhZHVhdGVkIHRvICdtYXN0ZXInLgorZmlsZV9zaXplICgpIHsKKwl0ZXN0LXRvb2wgcGF0aC11dGlscyBmaWxlLXNpemUgIiQxIgorfQorCitpbXBvcnRfbGFyZ2UgKCkgeworCSgKKwkJZWNobyBibG9iCisJCWVjaG8gImRhdGEgPDxFT0QiCisJCXByaW50ZiAiJTIwMDAwMDBzXG4iICIkKiIKKwkJZWNobyBFT0QKKwkpIHwgZ2l0ICIkQCIgZmFzdC1pbXBvcnQKK30KKword2hpbGUgcmVhZCBleHBlY3QgY29uZmlnCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhc3QtaW1wb3J0IChwYWNrZWQpIHdpdGggJGNvbmZpZyIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi4qIiAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiAuZ2l0L29iamVjdHMvPz8iICYmCisJCWltcG9ydF9sYXJnZSAtYyBmYXN0aW1wb3J0LnVucGFja2xpbWl0PTAgJGNvbmZpZyAmJgorCQlzej0kKGZpbGVfc2l6ZSAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjaykgJiYKKwkJY2FzZSAiJGV4cGVjdCIgaW4KKwkJc21hbGwpIHRlc3QgIiRzeiIgLWxlIDEwMDAwMCA7OworCQlsYXJnZSkgdGVzdCAiJHN6IiAtZ2UgMTAwMDAwIDs7CisJCWVzYWMKKwknCitkb25lIDw8XEVPRgorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj0wCitzbWFsbCAtYyBjb3JlLmNvbXByZXNzaW9uPTkKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249MCAtYyBwYWNrLmNvbXByZXNzaW9uPTAKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249OSAtYyBwYWNrLmNvbXByZXNzaW9uPTAKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249MCAtYyBwYWNrLmNvbXByZXNzaW9uPTkKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249OSAtYyBwYWNrLmNvbXByZXNzaW9uPTkKK2xhcmdlIC1jIHBhY2suY29tcHJlc3Npb249MAorc21hbGwgLWMgcGFjay5jb21wcmVzc2lvbj05CitFT0YKKword2hpbGUgcmVhZCBleHBlY3QgY29uZmlnCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhc3QtaW1wb3J0IChsb29zZSkgd2l0aCAkY29uZmlnIiAnCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLioiICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIC5naXQvb2JqZWN0cy8/PyIgJiYKKwkJaW1wb3J0X2xhcmdlIC1jIGZhc3RpbXBvcnQudW5wYWNrbGltaXQ9OSAkY29uZmlnICYmCisJCXN6PSQoZmlsZV9zaXplIC5naXQvb2JqZWN0cy8/Py8/Pz8/KikgJiYKKwkJY2FzZSAiJGV4cGVjdCIgaW4KKwkJc21hbGwpIHRlc3QgIiRzeiIgLWxlIDEwMDAwMCA7OworCQlsYXJnZSkgdGVzdCAiJHN6IiAtZ2UgMTAwMDAwIDs7CisJCWVzYWMKKwknCitkb25lIDw8XEVPRgorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj0wCitzbWFsbCAtYyBjb3JlLmNvbXByZXNzaW9uPTkKK2xhcmdlIC1jIGNvcmUuY29tcHJlc3Npb249MCAtYyBjb3JlLmxvb3NlY29tcHJlc3Npb249MAorbGFyZ2UgLWMgY29yZS5jb21wcmVzc2lvbj05IC1jIGNvcmUubG9vc2Vjb21wcmVzc2lvbj0wCitzbWFsbCAtYyBjb3JlLmNvbXByZXNzaW9uPTAgLWMgY29yZS5sb29zZWNvbXByZXNzaW9uPTkKK3NtYWxsIC1jIGNvcmUuY29tcHJlc3Npb249OSAtYyBjb3JlLmxvb3NlY29tcHJlc3Npb249OQorbGFyZ2UgLWMgY29yZS5sb29zZWNvbXByZXNzaW9uPTAKK3NtYWxsIC1jIGNvcmUubG9vc2Vjb21wcmVzc2lvbj05CitFT0YKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OTBjOTBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApAQCAtMCwwICsxLDc1MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBmYXN0LWV4cG9ydCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZWNobyBicmVhayBpdCA+IGZpbGUwICYmCisJZ2l0IGFkZCBmaWxlMCAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gV29obGF1ZiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIGRpZSBMdWZ0ID4gZmlsZSAmJgorCWVjaG8gZ2VodCBmcmlzY2ggPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZSBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZWNobyB1bmQgPiBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIHJlaW4gJiYKKwlnaXQgY2hlY2tvdXQgLWIgd2VyIEhFQUReICYmCisJZWNobyBsYW5nZSA+IGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzaXR6dCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gdmFsZW50aW4gbXVzcyAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IHwgZmFzdC1pbXBvcnQnICcKKworCU1BU1RFUj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCVJFSU49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlaW4pICYmCisJV0VSPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB3ZXIpICYmCisJTVVTUz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbXVzcykgJiYKKwlta2RpciBuZXcgJiYKKwlnaXQgLS1naXQtZGlyPW5ldy8uZ2l0IGluaXQgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1hbGwgPmFjdHVhbCAmJgorCShjZCBuZXcgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJIHRlc3QgJE1BU1RFUiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwkgdGVzdCAkUkVJTiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvcmVpbikgJiYKKwkgdGVzdCAkV0VSID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvd2VyKSAmJgorCSB0ZXN0ICRNVVNTID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9tdXNzKSkgPGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IF5tdXNzXntjb21taXR9IG11c3MnICcKKwlnaXQgZmFzdC1leHBvcnQgLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PXJld3JpdGUgXm11c3Nee2NvbW1pdH0gbXVzcyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwl0YWcgbXVzcworCWZyb20gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG11c3Nee2NvbW1pdH0pCisJJChnaXQgY2F0LWZpbGUgdGFnIG11c3MgfCBncmVwIHRhZ2dlcikKKwlkYXRhIDkKKwl2YWxlbnRpbgorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IC0tbWFyay10YWdzIF5tdXNzXntjb21taXR9IG11c3MnICcKKwlnaXQgZmFzdC1leHBvcnQgLS1tYXJrLXRhZ3MgLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PXJld3JpdGUgXm11c3Nee2NvbW1pdH0gbXVzcyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwl0YWcgbXVzcworCW1hcmsgOjEKKwlmcm9tICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtdXNzXntjb21taXR9KQorCSQoZ2l0IGNhdC1maWxlIHRhZyBtdXNzIHwgZ3JlcCB0YWdnZXIpCisJZGF0YSA5CisJdmFsZW50aW4KKworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCBtYXN0ZXJ+Mi4ubWFzdGVyJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgbWFzdGVyfjIuLm1hc3RlciA+YWN0dWFsICYmCisJc2VkICJzL21hc3Rlci9wYXJ0aWFsLyIgYWN0dWFsIHwKKwkJKGNkIG5ldyAmJgorCQkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJCSB0ZXN0ICRNQVNURVIgIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcGFydGlhbCkgJiYKKwkJIGdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciBwYXJ0aWFsICYmCisJCSBnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeIHBhcnRpYWxeICYmCisJCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHBhcnRpYWx+MikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCAtLXJlZmVyZW5jZS1leGNsdWRlZC1wYXJlbnRzIG1hc3Rlcn4yLi5tYXN0ZXInICcKKworCWdpdCBmYXN0LWV4cG9ydCAtLXJlZmVyZW5jZS1leGNsdWRlZC1wYXJlbnRzIG1hc3Rlcn4yLi5tYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgY29tbWl0LnJlZnMvaGVhZHMvbWFzdGVyIGFjdHVhbCA+Y29tbWl0LWNvdW50ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBjb21taXQtY291bnQgJiYKKwlzZWQgInMvbWFzdGVyL3Jld3JpdGUvIiBhY3R1YWwgfAorCQkoY2QgbmV3ICYmCisJCSBnaXQgZmFzdC1pbXBvcnQgJiYKKwkJIHRlc3QgJE1BU1RFUiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3Jld3JpdGUpKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCAtLXNob3ctb3JpZ2luYWwtaWRzJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgLS1zaG93LW9yaWdpbmFsLWlkcyBtYXN0ZXIgPm91dHB1dCAmJgorCWdyZXAgXm9yaWdpbmFsLW9pZCBvdXRwdXR8IHNlZCAtZSBzL15vcmlnaW5hbC1vaWQuLy8gfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIG1hc3RlciBtdXNzID5vYmplY3RzLWFuZC1uYW1lcyAmJgorCWF3ayAie3ByaW50IFwkMX0iIG9iamVjdHMtYW5kLW5hbWVzIHwgc29ydCA+Y29tbWl0cy10cmVlcy1ibG9icyAmJgorCWNvbW0gLTIzIGFjdHVhbCBjb21taXRzLXRyZWVzLWJsb2JzID51bmZvdW5kICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVuZm91bmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1leHBvcnQgLS1zaG93LW9yaWdpbmFsLWlkcyB8IGdpdCBmYXN0LWltcG9ydCcgJworCisJZ2l0IGZhc3QtZXhwb3J0IC0tc2hvdy1vcmlnaW5hbC1pZHMgbWFzdGVyIG11c3MgfCBnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCAmJgorCXRlc3QgJE1BU1RFUiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICRNVVNTID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9tdXNzKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWVuY29kaW5nIGlzby04ODU5LTcnICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEiICYmCisJdGVzdF9jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBpc28tODg1OS03ICYmCisJdGVzdF90aWNrICYmCisJZWNobyByb3N0ZW4gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1zIC1GICIkVEVTVF9ESVJFQ1RPUlkvdDkzNTAvc2ltcGxlLWlzby04ODU5LTctY29tbWl0LW1lc3NhZ2UudHh0IiBmaWxlICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tcmVlbmNvZGU9eWVzIHdlcl4uLndlciA+aXNvLTg4NTktNy5maSAmJgorCXNlZCAicy93ZXIvaTE4bi8iIGlzby04ODU5LTcuZmkgfAorCQkoY2QgbmV3ICYmCisJCSBnaXQgZmFzdC1pbXBvcnQgJiYKKwkJICMgVGhlIGNvbW1pdCBvYmplY3QsIGlmIG5vdCByZS1lbmNvZGVkLCB3b3VsZCBiZSAyNDAgYnl0ZXMuCisJCSAjIFJlbW92aW5nIHRoZSAiZW5jb2RpbmcgaXNvLTg4NTktN1xuIiBoZWFkZXIgZHJvcHMgMjAgYnl0ZXMuCisJCSAjIFJlLWVuY29kaW5nIHRoZSBQaSBjaGFyYWN0ZXIgZnJvbSBceEYwIChcMzYwKSBpbiBpc28tODg1OS03CisJCSAjIHRvIFx4Q0ZceDgwIChcMzE3XDIwMCkgaW4gVVRGLTggYWRkcyBhIGJ5dGUuICBDaGVjayBmb3IKKwkJICMgdGhlIGV4cGVjdGVkIHNpemUuCisJCSB0ZXN0IDIyMSAtZXEgIiQoZ2l0IGNhdC1maWxlIC1zIGkxOG4pIiAmJgorCQkgIyAuLi5hbmQgZm9yIHRoZSBleHBlY3RlZCB0cmFuc2xhdGlvbiBvZiBieXRlcy4KKwkJIGdpdCBjYXQtZmlsZSBjb21taXQgaTE4biA+YWN0dWFsICYmCisJCSBncmVwICQocHJpbnRmICJcMzE3XDIwMCIpIGFjdHVhbCAmJgorCQkgIyBBbHNvIG1ha2Ugc3VyZSB0aGUgY29tbWl0IGRvZXMgbm90IGhhdmUgdGhlICJlbmNvZGluZyIgaGVhZGVyCisJCSAhIGdyZXAgXmVuY29kaW5nIGFjdHVhbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnRpbmcgb24gaXNvLTg4NTktNycgJworCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSIgJiYKKwl0ZXN0X2NvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGlzby04ODU5LTcgJiYKKwllY2hvIHJvc3RlbiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLXMgLUYgIiRURVNUX0RJUkVDVE9SWS90OTM1MC9zaW1wbGUtaXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQiIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1leHBvcnQgLS1yZWVuY29kZT1hYm9ydCB3ZXJeLi53ZXIgPmlzby04ODU5LTcuZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmluZyBpc28tODg1OS03JyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRH4xIiAmJgorCXRlc3RfY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgaXNvLTg4NTktNyAmJgorCWVjaG8gcm9zdGVuID5maWxlICYmCisJZ2l0IGNvbW1pdCAtcyAtRiAiJFRFU1RfRElSRUNUT1JZL3Q5MzUwL3NpbXBsZS1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dCIgZmlsZSAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXJlZW5jb2RlPW5vIHdlcl4uLndlciA+aXNvLTg4NTktNy5maSAmJgorCXNlZCAicy93ZXIvaTE4bi1uby1yZWNvZGluZy8iIGlzby04ODU5LTcuZmkgfAorCQkoY2QgbmV3ICYmCisJCSBnaXQgZmFzdC1pbXBvcnQgJiYKKwkJICMgVGhlIGNvbW1pdCBvYmplY3QsIGlmIG5vdCByZS1lbmNvZGVkLCBpcyAyNDAgYnl0ZXMuCisJCSAjIFJlbW92aW5nIHRoZSAiZW5jb2RpbmcgaXNvLTg4NTktN1xuIiBoZWFkZXIgd291bGQgZHJvcHMgMjAKKwkJICMgYnl0ZXMuICBSZS1lbmNvZGluZyB0aGUgUGkgY2hhcmFjdGVyIGZyb20gXHhGMCAoXDM2MCkgaW4KKwkJICMgaXNvLTg4NTktNyB0byBceENGXHg4MCAoXDMxN1wyMDApIGluIFVURi04IGFkZHMgYSBieXRlLgorCQkgIyBDaGVjayBmb3IgdGhlIGV4cGVjdGVkIHNpemUuLi4KKwkJIHRlc3QgMjQwIC1lcSAiJChnaXQgY2F0LWZpbGUgLXMgaTE4bi1uby1yZWNvZGluZykiICYmCisJCSAjIC4uLmFzIHdlbGwgYXMgdGhlIGV4cGVjdGVkIGJ5dGUuCisJCSBnaXQgY2F0LWZpbGUgY29tbWl0IGkxOG4tbm8tcmVjb2RpbmcgPmFjdHVhbCAmJgorCQkgZ3JlcCAkKHByaW50ZiAiXDM2MCIpIGFjdHVhbCAmJgorCQkgIyBBbHNvIG1ha2Ugc3VyZSB0aGUgY29tbWl0IGhhcyB0aGUgImVuY29kaW5nIiBoZWFkZXIKKwkJIGdyZXAgXmVuY29kaW5nIGFjdHVhbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5jb2RpbmcgcHJlc2VydmVkIGlmIHJlZW5jb2RpbmcgZmFpbHMnICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEiICYmCisJdGVzdF9jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBpc28tODg1OS03ICYmCisJZWNobyByb3N0ZW4gPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1zIC1GICIkVEVTVF9ESVJFQ1RPUlkvdDkzNTAvYnJva2VuLWlzby04ODU5LTctY29tbWl0LW1lc3NhZ2UudHh0IiBmaWxlICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tcmVlbmNvZGU9eWVzIHdlcl4uLndlciA+aXNvLTg4NTktNy5maSAmJgorCXNlZCAicy93ZXIvaTE4bi1pbnZhbGlkLyIgaXNvLTg4NTktNy5maSB8CisJCShjZCBuZXcgJiYKKwkJIGdpdCBmYXN0LWltcG9ydCAmJgorCQkgZ2l0IGNhdC1maWxlIGNvbW1pdCBpMThuLWludmFsaWQgPmFjdHVhbCAmJgorCQkgIyBNYWtlIHN1cmUgdGhlIGNvbW1pdCBzdGlsbCBoYXMgdGhlIGVuY29kaW5nIGhlYWRlcgorCQkgZ3JlcCBeZW5jb2RpbmcgYWN0dWFsICYmCisJCSAjIFZlcmlmeSB0aGF0IHRoZSBjb21taXQgaGFzIHRoZSBleHBlY3RlZCBzaXplOyBpLmUuCisJCSAjIHRoYXQgbm8gYnl0ZXMgd2VyZSByZS1lbmNvZGVkIHRvIGEgZGlmZmVyZW50IGVuY29kaW5nLgorCQkgdGVzdCAyNTIgLWVxICIkKGdpdCBjYXQtZmlsZSAtcyBpMThuLWludmFsaWQpIiAmJgorCQkgIyAuLi5hbmQgY2hlY2sgZm9yIHRoZSBvcmlnaW5hbCBzcGVjaWFsIGJ5dGVzCisJCSBncmVwICQocHJpbnRmICJcMzYwIikgYWN0dWFsICYmCisJCSBncmVwICQocHJpbnRmICJcMzc3IikgYWN0dWFsKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQvZXhwb3J0LW1hcmtzJyAnCisKKwlnaXQgY2hlY2tvdXQgLWIgbWFya3MgbWFzdGVyICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBIRUFEICYmCisJdGVzdCAtcyB0bXAtbWFya3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIHRtcC1tYXJrcyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWltcG9ydC1tYXJrcz10bXAtbWFya3MgXAorCQktLWV4cG9ydC1tYXJrcz10bXAtbWFya3MgSEVBRCA+YWN0dWFsICYmCisJdGVzdCAkKGdyZXAgXmNvbW1pdCBhY3R1YWwgfCB3YyAtbCkgLWVxIDAgJiYKKwllY2hvIGNoYW5nZSA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJsYXN0IGNvbW1pdCIgZmlsZSAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWltcG9ydC1tYXJrcz10bXAtbWFya3MgXAorCQktLWV4cG9ydC1tYXJrcz10bXAtbWFya3MgSEVBRCA+YWN0dWFsICYmCisJdGVzdCAkKGdyZXAgXmNvbW1pdFwgIGFjdHVhbCB8IHdjIC1sKSAtZXEgMSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgdG1wLW1hcmtzCisKKycKKworY2F0ID4gc2lnbmVkLXRhZy1pbXBvcnQgPDwgRU9GCit0YWcgc2lnbi15b3VyLW5hbWUKK2Zyb20gJChnaXQgcmV2LXBhcnNlIEhFQUQpCit0YWdnZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTExOTkzIC0wNzAwCitkYXRhIDIxMAorQSBtZXNzYWdlIGZvciBhIHNpZ24KKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiBHbnVQRyB2MS40LjUgKEdOVS9MaW51eCkKKworZmFrZWRzaWduYXR1cmVmYWtlZHNpZ25hdHVyZWZha2Vkc2lnbmF0dXJlZmFrZWRzaWduYXR1cmZha2Vkc2lnbgorYXR1cmVmYWtlZHNpZ25hdHVyZWZha2U9Cis9LzU5dgorLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZha2VkIHNpZ25lZCB0YWcnICcKKworCWNhdCBzaWduZWQtdGFnLWltcG9ydCB8IGdpdCBmYXN0LWltcG9ydAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPWFib3J0JyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz1hYm9ydCBzaWduLXlvdXItbmFtZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPXZlcmJhdGltJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz12ZXJiYXRpbSBzaWduLXlvdXItbmFtZSA+IG91dHB1dCAmJgorCWdyZXAgUEdQIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPXN0cmlwJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz1zdHJpcCBzaWduLXlvdXItbmFtZSA+IG91dHB1dCAmJgorCSEgZ3JlcCBQR1Agb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbmVkLXRhZ3M9d2Fybi1zdHJpcCcgJworCWdpdCBmYXN0LWV4cG9ydCAtLXNpZ25lZC10YWdzPXdhcm4tc3RyaXAgc2lnbi15b3VyLW5hbWUgPm91dHB1dCAyPmVyciAmJgorCSEgZ3JlcCBQR1Agb3V0cHV0ICYmCisJdGVzdCAtcyBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VibW9kdWxlJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJbWtkaXIgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGluaXQgICYmCisJCWVjaG8gdGVzdCBmaWxlID4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBzdWJfaW5pdGlhbAorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiJChwd2QpL3N1YiIgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJKAorCQljZCBzdWIgJiYKKwkJZWNobyBtb3JlIGRhdGEgPj4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBzdWJfc2Vjb25kCisJKSAmJgorCWdpdCBhZGQgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZmFzdC1leHBvcnQgfCBmYXN0LWltcG9ydCcgJworCisJU1VCRU5UMT0kKGdpdCBscy10cmVlIG1hc3Rlcl4gc3ViKSAmJgorCVNVQkVOVDI9JChnaXQgbHMtdHJlZSBtYXN0ZXIgc3ViKSAmJgorCXJtIC1yZiBuZXcgJiYKKwlta2RpciBuZXcgJiYKKwlnaXQgLS1naXQtZGlyPW5ldy8uZ2l0IGluaXQgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz1zdHJpcCAtLWFsbCA+YWN0dWFsICYmCisJKGNkIG5ldyAmJgorCSBnaXQgZmFzdC1pbXBvcnQgJiYKKwkgdGVzdCAiJFNVQkVOVDEiID0gIiQoZ2l0IGxzLXRyZWUgcmVmcy9oZWFkcy9tYXN0ZXJeIHN1YikiICYmCisJIHRlc3QgIiRTVUJFTlQyIiA9ICIkKGdpdCBscy10cmVlIHJlZnMvaGVhZHMvbWFzdGVyIHN1YikiICYmCisJIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIGNtcCBzdWIvZmlsZSAuLi9zdWIvZmlsZSkgPGFjdHVhbAorCisnCisKK0dJVF9BVVRIT1JfTkFNRT0nQSBVIFRob3InOyBleHBvcnQgR0lUX0FVVEhPUl9OQU1FCitHSVRfQ09NTUlUVEVSX05BTUU9J0MgTyBNaXR0ZXInOyBleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvcGllcycgJworCisJZ2l0IGNoZWNrb3V0IC1iIGNvcHkgcmVpbiAmJgorCWdpdCBtdiBmaWxlIGZpbGUzICYmCisJZ2l0IGNvbW1pdCAtbSBtb3ZlMSAmJgorCXRlc3RfdGljayAmJgorCWNwIGZpbGUyIGZpbGU0ICYmCisJZ2l0IGFkZCBmaWxlNCAmJgorCWdpdCBtdiBmaWxlMiBmaWxlNSAmJgorCWdpdCBjb21taXQgLW0gY29weTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwljcCBmaWxlMyBmaWxlNiAmJgorCWdpdCBhZGQgZmlsZTYgJiYKKwlnaXQgY29tbWl0IC1tIGNvcHkyICYmCisJdGVzdF90aWNrICYmCisJZWNobyBtb3JlIHRleHQgPj4gZmlsZTYgJiYKKwllY2hvIGV2ZW4gbW9yZSB0ZXh0ID4+IGZpbGU2ICYmCisJZ2l0IGFkZCBmaWxlNiAmJgorCWdpdCBjb21taXQgLW0gbW9kaWZ5ICYmCisJdGVzdF90aWNrICYmCisJY3AgZmlsZTYgZmlsZTcgJiYKKwllY2hvIHRlc3QgPj4gZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJZ2l0IGNvbW1pdCAtbSBjb3B5X21vZGlmeQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IC1DIC1DIHwgZmFzdC1pbXBvcnQnICcKKworCUVOVFJZPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBjb3B5KSAmJgorCXJtIC1yZiBuZXcgJiYKKwlta2RpciBuZXcgJiYKKwlnaXQgLS1naXQtZGlyPW5ldy8uZ2l0IGluaXQgJiYKKwlnaXQgZmFzdC1leHBvcnQgLUMgLUMgLS1zaWduZWQtdGFncz1zdHJpcCAtLWFsbCA+IG91dHB1dCAmJgorCWdyZXAgIl5DIGZpbGUyIGZpbGU0XCQiIG91dHB1dCAmJgorCWNhdCBvdXRwdXQgfAorCShjZCBuZXcgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJIHRlc3QgJEVOVFJZID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvY29weSkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1leHBvcnQgfCBmYXN0LWltcG9ydCB3aGVuIG1hc3RlciBpcyB0YWdnZWQnICcKKworCWdpdCB0YWcgLW0gbXNnIGxhc3QgJiYKKwlnaXQgZmFzdC1leHBvcnQgLUMgLUMgLS1zaWduZWQtdGFncz1zdHJpcCAtLWFsbCA+IG91dHB1dCAmJgorCXRlc3QgJChncmVwIC1jICJedGFnICIgb3V0cHV0KSA9IDMKKworJworCitjYXQgPiB0YWctY29udGVudCA8PCBFT0YKK29iamVjdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkKK3R5cGUgY29tbWl0Cit0YWcgcm9zdGVuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29wZSB3aXRoIHRhZ2dlci1sZXNzIHRhZ3MnICcKKworCVRBRz0kKGdpdCBoYXNoLW9iamVjdCAtdCB0YWcgLXcgdGFnLWNvbnRlbnQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy90YWdzL3Nvbm5lbnNjaGVpbiAkVEFHICYmCisJZ2l0IGZhc3QtZXhwb3J0IC1DIC1DIC0tc2lnbmVkLXRhZ3M9c3RyaXAgLS1hbGwgPiBvdXRwdXQgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiXnRhZyAiIG91dHB1dCkgPSA0ICYmCisJISBncmVwICJVbnNwZWNpZmllZCBUYWdnZXIiIG91dHB1dCAmJgorCWdpdCBmYXN0LWV4cG9ydCAtQyAtQyAtLXNpZ25lZC10YWdzPXN0cmlwIC0tYWxsIFwKKwkJLS1mYWtlLW1pc3NpbmctdGFnZ2VyID4gb3V0cHV0ICYmCisJdGVzdCAkKGdyZXAgLWMgIl50YWcgIiBvdXRwdXQpID0gNCAmJgorCWdyZXAgIlVuc3BlY2lmaWVkIFRhZ2dlciIgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIGxpbWl0aW5nIGV4cG9ydHMgYnkgUEFUSCcgJworCW1rZGlyIGxpbWl0LWJ5LXBhdGhzICYmCisJKAorCQljZCBsaW1pdC1ieS1wYXRocyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGhpID4gdGhlcmUgJiYKKwkJZ2l0IGFkZCB0aGVyZSAmJgorCQlnaXQgY29tbWl0IC1tICJGaXJzdCBmaWxlIiAmJgorCQllY2hvIGZvbyA+IGJhciAmJgorCQlnaXQgYWRkIGJhciAmJgorCQlnaXQgY29tbWl0IC1tICJTZWNvbmQgZmlsZSIgJiYKKwkJZ2l0IHRhZyAtYSAtbSBtc2cgbXl0YWcgJiYKKwkJZWNobyBtb3JlZm9vID4+IGJhciAmJgorCQlnaXQgYWRkIGJhciAmJgorCQlnaXQgY29tbWl0IC1tICJDaGFuZ2UgdG8gc2Vjb25kIGZpbGUiCisJKQorJworCitjYXQgPiBsaW1pdC1ieS1wYXRocy9leHBlY3RlZCA8PCBFT0YKK2Jsb2IKK21hcmsgOjEKK2RhdGEgMworaGkKKworcmVzZXQgcmVmcy90YWdzL215dGFnCitjb21taXQgcmVmcy90YWdzL215dGFnCittYXJrIDoyCithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjcxMyAtMDcwMAorZGF0YSAxMQorRmlyc3QgZmlsZQorTSAxMDA2NDQgOjEgdGhlcmUKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3BwaW5nIHRhZyBvZiBmaWx0ZXJlZCBvdXQgb2JqZWN0JyAnCisoCisJY2QgbGltaXQtYnktcGF0aHMgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PWRyb3AgbXl0YWcgLS0gdGhlcmUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQKKykKKycKKworY2F0ID4+IGxpbWl0LWJ5LXBhdGhzL2V4cGVjdGVkIDw8IEVPRgordGFnIG15dGFnCitmcm9tIDoyCit0YWdnZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitkYXRhIDQKK21zZworCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0aW5nIHRhZyBvZiBmaWx0ZXJlZCBvdXQgb2JqZWN0JyAnCisoCisJY2QgbGltaXQtYnktcGF0aHMgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PXJld3JpdGUgbXl0YWcgLS0gdGhlcmUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSB0YWcgcHJlZGF0aW5nIHBhdGhzcGVjcyB0byBub3RoaW5nJyAnCisJdGVzdF9jcmVhdGVfcmVwbyByZXdyaXRlX3RhZ19wcmVkYXRpbmdfcGF0aHNwZWNzICYmCisJKAorCQljZCByZXdyaXRlX3RhZ19wcmVkYXRpbmdfcGF0aHNwZWNzICYmCisKKwkJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCisJCWdpdCB0YWcgLWEgLW0gIlNvbWUgb2xkIHRhZyIgdjAuMC4wLjAuMC4wLjEgJiYKKworCQl0ZXN0X2NvbW1pdCBiYXIgJiYKKworCQlnaXQgZmFzdC1leHBvcnQgLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PXJld3JpdGUgLS1hbGwgLS0gYmFyLnQgPm91dHB1dCAmJgorCQlncmVwIGZyb20uJFpFUk9fT0lEIG91dHB1dAorCSkKKycKKworY2F0ID4gbGltaXQtYnktcGF0aHMvZXhwZWN0ZWQgPDwgRU9GCitibG9iCittYXJrIDoxCitkYXRhIDQKK2ZvbworCitibG9iCittYXJrIDoyCitkYXRhIDMKK2hpCisKK3Jlc2V0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjMKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitkYXRhIDEyCitTZWNvbmQgZmlsZQorTSAxMDA2NDQgOjEgYmFyCitNIDEwMDY0NCA6MiB0aGVyZQorCitFT0YKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbm8gZXhhY3QtcmVmIHJldmlzaW9ucyBpbmNsdWRlZCcgJworCSgKKwkJY2QgbGltaXQtYnktcGF0aHMgJiYKKwkJZ2l0IGZhc3QtZXhwb3J0IG1hc3Rlcn4yLi5tYXN0ZXJ+MSA+IG91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggbGltaXRpbmcgd2l0aCBpbXBvcnQtbWFya3MgZG9lcyBub3QgbG9zZSB1bm1vZGlmaWVkIGZpbGVzJyAgICAgICAgJworCWdpdCBjaGVja291dCAtYiBzaW1wbGUgbWFya3N+MiAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcyBzaW1wbGUgLS0gZmlsZSA+IC9kZXYvbnVsbCAmJgorCWVjaG8gbW9yZSBjb250ZW50ID4+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tbmV4dCBmaWxlICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIHNpbXBsZSAtLSBmaWxlIGZpbGUwID5hY3R1YWwgJiYKKwlncmVwIGZpbGUwIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCBjb3JydXB0IHN0cmVhbSB3aXRoIG5vbi1leGlzdGVudCBtYXJrJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBhdm9pZF9ub25fZXhpc3RlbnRfbWFyayAmJgorCSgKKwkJY2QgYXZvaWRfbm9uX2V4aXN0ZW50X21hcmsgJiYKKworCQl0ZXN0X2NvbW1pdCBpbXBvcnRhbnQtcGF0aCAmJgorCisJCXRlc3RfY29tbWl0IGlnbm9yZWQgJiYKKworCQlnaXQgYnJhbmNoIEEgJiYKKwkJZ2l0IGJyYW5jaCBCICYmCisKKwkJZWNobyBmb28gPj5pbXBvcnRhbnQtcGF0aC50ICYmCisJCWdpdCBhZGQgaW1wb3J0YW50LXBhdGgudCAmJgorCQl0ZXN0X2NvbW1pdCBtb3JlIGNoYW5nZXMgJiYKKworCQlnaXQgZmFzdC1leHBvcnQgLS1hbGwgLS0gaW1wb3J0YW50LXBhdGgudCB8IGdpdCBmYXN0LWltcG9ydCAtLWZvcmNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdWxsLXRyZWUgcmUtc2hvd3MgdW5tb2RpZmllZCBmaWxlcycgICAgICAgICcKKwlnaXQgY2hlY2tvdXQgLWYgc2ltcGxlICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tZnVsbC10cmVlIHNpbXBsZSA+YWN0dWFsICYmCisJdGVzdCAkKGdyZXAgLWMgZmlsZTAgYWN0dWFsKSAtZXEgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtdXAgYSBmZXcgbW9yZSB0YWdzIGZvciB0YWcgZXhwb3J0IHRlc3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCUhFQURfVFJFRT0kKGdpdCBzaG93IC1zIC0tcHJldHR5PXJhdyBIRUFEIHwgZ3JlcCB0cmVlIHwgc2VkICJzL3RyZWUgLy8iKSAmJgorCWdpdCB0YWcgICAgdHJlZV90YWcgICAgICAgIC1tICJ0YWdnaW5nIGEgdHJlZSIgJEhFQURfVFJFRSAmJgorCWdpdCB0YWcgLWEgdHJlZV90YWctb2JqICAgIC1tICJ0YWdnaW5nIGEgdHJlZSIgJEhFQURfVFJFRSAmJgorCWdpdCB0YWcgICAgdGFnLW9ial90YWcgICAgIC1tICJ0YWdnaW5nIGEgdGFnIiB0cmVlX3RhZy1vYmogJiYKKwlnaXQgdGFnIC1hIHRhZy1vYmpfdGFnLW9iaiAtbSAidGFnZ2luZyBhIHRhZyIgdHJlZV90YWctb2JqCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfdGFnJyAgICAgICAgJworCW1rZGlyIHJlc3VsdCAmJgorCShjZCByZXN1bHQgJiYgZ2l0IGluaXQpICYmCisJZ2l0IGZhc3QtZXhwb3J0IHRyZWVfdGFnID4gZmUtc3RyZWFtICYmCisJKGNkIHJlc3VsdCAmJiBnaXQgZmFzdC1pbXBvcnQgPCAuLi9mZS1zdHJlYW0pCisnCisKKyMgTkVFRFNXT1JLOiBub3QganVzdCBjaGVjayByZXR1cm4gc3RhdHVzLCBidXQgdmFsaWRhdGUgdGhlIG91dHB1dAorIyBOb3RlIHRoYXQgdGhlc2UgdGVzdHMgRE8gTk9USElORyBvdGhlciB0aGFuIHByaW50IGEgd2FybmluZyB0aGF0CisjIHRoZXkgYXJlIG9taXR0aW5nIHRoZSBvbmUgdGFnIHdlIGFza2VkIHRoZW0gdG8gZXhwb3J0IChiZWNhdXNlIHRoZQorIyB0YWdzIHJlc29sdmUgdG8gYSB0cmVlKS4gIFRoZXkgZXhpc3QganVzdCB0byBtYWtlIHN1cmUgd2UgZG8gbm90CisjIGFib3J0IGJ1dCBpbnN0ZWFkIGp1c3Qgd2Fybi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfdGFnLW9iaicgICAgJ2dpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZy1vYmonCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZycgICAgICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWcnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZy1vYmonICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWctb2JqJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGluZyB0YWdzIG9mIGJsb2JzJyAnCisJZ2l0IHRhZyAtYSAtbSAiVGFnIG9mIGEgYmxvYiIgYmxvYnRhZyAkKGdpdCByZXYtcGFyc2UgbWFzdGVyOmZpbGUpICYmCisJZ2l0IGZhc3QtZXhwb3J0IGJsb2J0YWcgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSA5CisJZGllIEx1ZnQKKworCXRhZyBibG9idGFnCisJZnJvbSA6MQorCXRhZ2dlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgMTQKKwlUYWcgb2YgYSBibG9iCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsaW5nIG5lc3RlZCB0YWdzJyAnCisJZ2l0IHRhZyAtYSAtbSAiVGhpcyBpcyBhIG5lc3RlZCB0YWciIG5lc3RlZCBtdXNzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tbWFyay10YWdzIG5lc3RlZCA+b3V0cHV0ICYmCisJZ3JlcCAiXmZyb20gJFpFUk9fT0lEJCIgb3V0cHV0ICYmCisJZ3JlcCAiXnRhZyBuZXN0ZWQkIiBvdXRwdXQgPnRhZ19saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgdGFnX2xpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdG9yeSBiZWNvbWVzIHN5bWxpbmsnICAgICAgICAnCisJZ2l0IGluaXQgZGlydG9zeW1saW5rICYmCisJZ2l0IGluaXQgcmVzdWx0ICYmCisJKAorCQljZCBkaXJ0b3N5bWxpbmsgJiYKKwkJbWtkaXIgZm9vICYmCisJCW1rZGlyIGJhciAmJgorCQllY2hvIGhlbGxvID4gZm9vL3dvcmxkICYmCisJCWVjaG8gaGVsbG8gPiBiYXIvd29ybGQgJiYKKwkJZ2l0IGFkZCBmb28vd29ybGQgYmFyL3dvcmxkICYmCisJCWdpdCBjb21taXQgLXEgLW1vbmUgJiYKKwkJZ2l0IHJtIC1yIGZvbyAmJgorCQl0ZXN0X2xuX3NfYWRkIGJhciBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbXR3bworCSkgJiYKKwkoCisJCWNkIGRpcnRvc3ltbGluayAmJgorCQlnaXQgZmFzdC1leHBvcnQgbWFzdGVyIC0tIGZvbyB8CisJCShjZCAuLi9yZXN1bHQgJiYgZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQpCisJKSAmJgorCShjZCByZXN1bHQgJiYgZ2l0IHNob3cgbWFzdGVyOmZvbykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1leHBvcnQgcXVvdGVzIHBhdGhuYW1lcycgJworCWdpdCBpbml0IGNyYXp5LXBhdGhzICYmCisJdGVzdF9jb25maWcgLUMgY3JhenktcGF0aHMgY29yZS5wcm90ZWN0TlRGUyBmYWxzZSAmJgorCShjZCBjcmF6eS1wYXRocyAmJgorCSBibG9iPSQoZWNobyBmb28gfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkgZ2l0IC1jIGNvcmUucHJvdGVjdE5URlM9ZmFsc2UgdXBkYXRlLWluZGV4IC0tYWRkIFwKKwkJLS1jYWNoZWluZm8gMTAwNjQ0ICRibG9iICIkKHByaW50ZiAicGF0aCB3aXRoXFxubmV3bGluZSIpIiBcCisJCS0tY2FjaGVpbmZvIDEwMDY0NCAkYmxvYiAicGF0aCB3aXRoIFwicXVvdGVcIiIgXAorCQktLWNhY2hlaW5mbyAxMDA2NDQgJGJsb2IgInBhdGggd2l0aCBcXGJhY2tzbGFzaCIgXAorCQktLWNhY2hlaW5mbyAxMDA2NDQgJGJsb2IgInBhdGggd2l0aCBzcGFjZSIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBhZGRpdGlvbiAmJgorCSBnaXQgbHMtZmlsZXMgLXogLXMgfCBwZXJsIC0wcGUgInN7XFx0fXskJnN1YmRpci99IiA+aW5kZXggJiYKKwkgZ2l0IHJlYWQtdHJlZSAtLWVtcHR5ICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLXogLS1pbmRleC1pbmZvIDxpbmRleCAmJgorCSBnaXQgY29tbWl0IC1tIHJlbmFtZSAmJgorCSBnaXQgcmVhZC10cmVlIC0tZW1wdHkgJiYKKwkgZ2l0IGNvbW1pdCAtbSBkZWxldGlvbiAmJgorCSBnaXQgZmFzdC1leHBvcnQgLU0gSEVBRCA+ZXhwb3J0Lm91dCAmJgorCSBnaXQgcmV2LWxpc3QgSEVBRCA+ZXhwZWN0ICYmCisJIGdpdCBpbml0IHJlc3VsdCAmJgorCSBjZCByZXN1bHQgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDwuLi9leHBvcnQub3V0ICYmCisJIGdpdCByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBiaWRpcmVjdGlvbmFsaXR5JyAnCisJZ2l0IGluaXQgbWFya3MtdGVzdCAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcy1jdXIgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzPW1hcmtzLWN1ciAtLWJyYW5jaGVzIHwgXAorCWdpdCAtLWdpdC1kaXI9bWFya3MtdGVzdC8uZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzLW5ldyAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHM9bWFya3MtbmV3ICYmCisJKGNkIG1hcmtzLXRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBXb2hsYXVmID4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImJhY2sgaW4gdGltZSIpICYmCisJZ2l0IC0tZ2l0LWRpcj1tYXJrcy10ZXN0Ly5naXQgZmFzdC1leHBvcnQgLS1leHBvcnQtbWFya3M9bWFya3MtbmV3IC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1tYXJrcy1uZXcgLS1icmFuY2hlcyB8IFwKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9bWFya3MtY3VyIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1tYXJrcy1jdXIKKycKKworY2F0ID4gZXhwZWN0ZWQgPDwgRU9GCitibG9iCittYXJrIDoxMworZGF0YSA1CitidW1wCisKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorbWFyayA6MTQKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTEyOTEyNzczIC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNzczIC0wNzAwCitkYXRhIDUKK2J1bXAKK2Zyb20gOjEyCitNIDEwMDY0NCA6MTMgZmlsZQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgdW5pbnRlcmVzdGluZyByZWZzJyAnCisJPiB0bXAtbWFya3MgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1pbXBvcnQtbWFya3M9dG1wLW1hcmtzIFwKKwkJLS1leHBvcnQtbWFya3M9dG1wLW1hcmtzIG1hc3RlciA+IC9kZXYvbnVsbCAmJgorCWdpdCB0YWcgdjEuMCAmJgorCWdpdCBicmFuY2ggdW5pbnRlcmVzdGluZyAmJgorCWVjaG8gYnVtcCA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGJ1bXAgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1pbXBvcnQtbWFya3M9dG1wLW1hcmtzIFwKKwkJLS1leHBvcnQtbWFya3M9dG1wLW1hcmtzIF51bmludGVyZXN0aW5nIF52MS4wIG1hc3RlciA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPiBleHBlY3RlZCA8PCBFT0YKK3Jlc2V0IHJlZnMvaGVhZHMvbWFzdGVyCitmcm9tIDoxNAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcyBhcmUgdXBkYXRlZCBldmVuIGlmIG5vIGNvbW1pdHMgbmVlZCB0byBiZSBleHBvcnRlZCcgJworCT4gdG1wLW1hcmtzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrcyBcCisJCS0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBtYXN0ZXIgPiAvZGV2L251bGwgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1pbXBvcnQtbWFya3M9dG1wLW1hcmtzIFwKKwkJLS1leHBvcnQtbWFya3M9dG1wLW1hcmtzIG1hc3RlciA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgcmVmc3BlYycgJworCWdpdCBmYXN0LWV4cG9ydCAtLXJlZnNwZWMgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9mb29iYXIgbWFzdGVyID5hY3R1YWwyICYmCisJZ3JlcCAiXmNvbW1pdCAiIGFjdHVhbDIgfCBzb3J0IHwgdW5pcSA+YWN0dWFsICYmCisJZWNobyAiY29tbWl0IHJlZnMvaGVhZHMvZm9vYmFyIiA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSByZWYgYmVjYXVzZSBlbnRpcmUgaGlzdG9yeSBleGNsdWRlZCcgJworCWdpdCBicmFuY2ggdG8tZGVsZXRlICYmCisJZ2l0IGZhc3QtZXhwb3J0IHRvLWRlbGV0ZSBedG8tZGVsZXRlID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXJlc2V0IHJlZnMvaGVhZHMvdG8tZGVsZXRlCisJZnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIHJlZnNwZWMnICcKKwlnaXQgZmFzdC1leHBvcnQgLS1yZWZzcGVjIDpyZWZzL2hlYWRzL3RvLWRlbGV0ZSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlyZXNldCByZWZzL2hlYWRzL3RvLWRlbGV0ZQorCWZyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4gdXNpbmcgLUMsIGRvIG5vdCBkZWNsYXJlIGNvcHkgd2hlbiBzb3VyY2Ugb2YgY29weSBpcyBhbHNvIG1vZGlmaWVkJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzcmMgJiYKKwllY2hvIGFfbGluZSA+c3JjL2ZpbGUudHh0ICYmCisJZ2l0IC1DIHNyYyBhZGQgZmlsZS50eHQgJiYKKwlnaXQgLUMgc3JjIGNvbW1pdCAtbSAxc3RfY29tbWl0ICYmCisKKwljcCBzcmMvZmlsZS50eHQgc3JjL2ZpbGUyLnR4dCAmJgorCWVjaG8gYW5vdGhlcl9saW5lID4+c3JjL2ZpbGUudHh0ICYmCisJZ2l0IC1DIHNyYyBhZGQgZmlsZS50eHQgZmlsZTIudHh0ICYmCisJZ2l0IC1DIHNyYyBjb21taXQgLW0gMm5kX2NvbW1pdCAmJgorCisJdGVzdF9jcmVhdGVfcmVwbyBkc3QgJiYKKwlnaXQgLUMgc3JjIGZhc3QtZXhwb3J0IC0tYWxsIC1DID5hY3R1YWwgJiYKKwlnaXQgLUMgZHN0IGZhc3QtaW1wb3J0IDxhY3R1YWwgJiYKKwlnaXQgLUMgc3JjIHNob3cgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGRzdCBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgY29tbWl0IGdldHMgZXhwb3J0ZWQgd2l0aCAtLWltcG9ydC1tYXJrcycgJworCXRlc3RfY3JlYXRlX3JlcG8gbWVyZ2luZyAmJgorCSgKKwkJY2QgbWVyZ2luZyAmJgorCQl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYyAmJgorCQl0ZXN0X2NvbW1pdCBvbi10b3BpYyAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IG9uLW1hc3RlciAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tZmYgLW0gWWVhaCB0b3BpYyAmJgorCisJCWVjaG8gIjoxICQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiA+bWFya3MgJiYKKwkJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIG1hc3RlciA+b3V0ICYmCisJCWdyZXAgWWVhaCBvdXQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTM1MC9icm9rZW4taXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQgYi90L3Q5MzUwL2Jyb2tlbi1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZhZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTM1MC9icm9rZW4taXNvLTg4NTktNy1jb21taXQtbWVzc2FnZS50eHQKQEAgLTAsMCArMSBAQAorUGk6IPA7IEludmFsaWQ6IP8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q5MzUwL3NpbXBsZS1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dCBiL3QvdDkzNTAvc2ltcGxlLWlzby04ODU5LTctY29tbWl0LW1lc3NhZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiM2YwYzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzUwL3NpbXBsZS1pc28tODg1OS03LWNvbW1pdC1tZXNzYWdlLnR4dApAQCAtMCwwICsxIEBACitQaTog8ApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDkzNTEtZmFzdC1leHBvcnQtYW5vbnltaXplLnNoIGIvdC90OTM1MS1mYXN0LWV4cG9ydC1hbm9ueW1pemUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODk3ZGM1MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzNTEtZmFzdC1leHBvcnQtYW5vbnltaXplLnNoCkBAIC0wLDAgKzEsMTEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgdGVzdHMgZm9yIGZhc3QtZXhwb3J0IC0tYW5vbnltaXplJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNpbXBsZSByZXBvJyAnCisJdGVzdF9jb21taXQgYmFzZSAmJgorCXRlc3RfY29tbWl0IGZvbyAmJgorCWdpdCBjaGVja291dCAtYiBvdGhlciBIRUFEXiAmJgorCW1rZGlyIHN1YmRpciAmJgorCXRlc3RfY29tbWl0IHN1YmRpci9iYXIgJiYKKwl0ZXN0X2NvbW1pdCBzdWJkaXIveHl6enkgJiYKKwlnaXQgdGFnIC1tICJhbm5vdGF0ZWQgdGFnIiBteXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBvcnQgYW5vbnltaXplZCBzdHJlYW0nICcKKwlnaXQgZmFzdC1leHBvcnQgLS1hbm9ueW1pemUgLS1hbGwgPnN0cmVhbQorJworCisjIHRoaXMgYWxzbyBjb3ZlcnMgY29tbWl0IG1lc3NhZ2VzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJlYW0gb21pdHMgcGF0aCBuYW1lcycgJworCSEgZ3JlcCBiYXNlIHN0cmVhbSAmJgorCSEgZ3JlcCBmb28gc3RyZWFtICYmCisJISBncmVwIHN1YmRpciBzdHJlYW0gJiYKKwkhIGdyZXAgYmFyIHN0cmVhbSAmJgorCSEgZ3JlcCB4eXp6eSBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyZWFtIGFsbG93cyBtYXN0ZXIgYXMgcmVmbmFtZScgJworCWdyZXAgbWFzdGVyIHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJlYW0gb21pdHMgb3RoZXIgcmVmbmFtZXMnICcKKwkhIGdyZXAgb3RoZXIgc3RyZWFtICYmCisJISBncmVwIG15dGFnIHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJlYW0gb21pdHMgaWRlbnRpdGllcycgJworCSEgZ3JlcCAiJEdJVF9DT01NSVRURVJfTkFNRSIgc3RyZWFtICYmCisJISBncmVwICIkR0lUX0NPTU1JVFRFUl9FTUFJTCIgc3RyZWFtICYmCisJISBncmVwICIkR0lUX0FVVEhPUl9OQU1FIiBzdHJlYW0gJiYKKwkhIGdyZXAgIiRHSVRfQVVUSE9SX0VNQUlMIiBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyZWFtIG9taXRzIHRhZyBtZXNzYWdlJyAnCisJISBncmVwICJhbm5vdGF0ZWQgdGFnIiBzdHJlYW0KKycKKworIyBOT1RFOiB3ZSBjaGRpciB0byB0aGUgbmV3LCBhbm9ueW1pemVkIHJlcG9zaXRvcnkKKyMgYWZ0ZXIgdGhpcy4gQWxsIGZ1cnRoZXIgdGVzdHMgc2hvdWxkIGFzc3VtZSB0aGlzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IHN0cmVhbSB0byBuZXcgcmVwb3NpdG9yeScgJworCWdpdCBpbml0IG5ldyAmJgorCWNkIG5ldyAmJgorCWdpdCBmYXN0LWltcG9ydCA8Li4vc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3VsdCBoYXMgdHdvIGJyYW5jaGVzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgcmVmcy9oZWFkcyA+YnJhbmNoZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGJyYW5jaGVzICYmCisJb3RoZXJfYnJhbmNoPSQoZ3JlcCAtdiByZWZzL2hlYWRzL21hc3RlciBicmFuY2hlcykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbyBoYXMgb3JpZ2luYWwgc2hhcGUgYW5kIHRpbWVzdGFtcHMnICcKKwlzaGFwZSAoKSB7CisJCWdpdCBsb2cgLS1mb3JtYXQ9IiVtICVjdCIgLS1sZWZ0LXJpZ2h0IC0tYm91bmRhcnkgIiRAIgorCX0gJiYKKwkoY2QgLi4gJiYgc2hhcGUgbWFzdGVyLi4ub3RoZXIpID5leHBlY3QgJiYKKwlzaGFwZSBtYXN0ZXIuLi4kb3RoZXJfYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jvb3QgdHJlZSBoYXMgb3JpZ2luYWwgc2hhcGUnICcKKwkjIHRoZSBvdXRwdXQgZW50cmllcyBhcmUgbm90IG5lY2Vzc2FyaWx5IGluIHRoZSBzYW1lCisJIyBvcmRlciwgYnV0IHdlIGtub3cgYXQgbGVhc3QgdGhhdCB3ZSB3aWxsIGhhdmUgb25lIHRyZWUKKwkjIGFuZCBvbmUgYmxvYiwgc28ganVzdCBjaGVjayB0aGUgc29ydGVkIG9yZGVyCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJsb2IKKwl0cmVlCisJRU9GCisJZ2l0IGxzLXRyZWUgJG90aGVyX2JyYW5jaCA+cm9vdCAmJgorCWN1dCAtZCIgIiAtZjIgPHJvb3QgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzIGluIHN1YmRpciBlbmRlZCB1cCBpbiBvbmUgdHJlZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlibG9iCisJYmxvYgorCUVPRgorCXRyZWU9JChncmVwIHRyZWUgcm9vdCB8IGN1dCAtZjIpICYmCisJZ2l0IGxzLXRyZWUgJG90aGVyX2JyYW5jaDokdHJlZSA+dHJlZSAmJgorCWN1dCAtZCIgIiAtZjIgPHRyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHBvaW50cyB0byBicmFuY2ggdGlwJyAnCisJZ2l0IHJldi1wYXJzZSAkb3RoZXJfYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKCpvYmplY3RuYW1lKSIgfCBncmVwIC4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWRlbnRzIGFyZSBzaGFyZWQnICcKKwlnaXQgbG9nIC0tYWxsIC0tZm9ybWF0PSIlYW4gPCVhZT4iID5hdXRob3JzICYmCisJc29ydCAtdSBhdXRob3JzID51bmlxdWUgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHVuaXF1ZSAmJgorCWdpdCBsb2cgLS1hbGwgLS1mb3JtYXQ9IiVjbiA8JWNlPiIgPmNvbW1pdHRlcnMgJiYKKwlzb3J0IC11IGNvbW1pdHRlcnMgPnVuaXF1ZSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgdW5pcXVlICYmCisJISB0ZXN0X2NtcCBhdXRob3JzIGNvbW1pdHRlcnMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NDAwLWdpdC1jdnNzZXJ2ZXItc2VydmVyLnNoIGIvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWU1ZGNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaApAQCAtMCwwICsxLDYzNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBGcmFuayBMaWNodGVuaGVsZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtY3Zzc2VydmVyIGFjY2VzcworCit0ZXN0cyByZWFkIGFjY2VzcyB0byBhIGdpdCByZXBvc2l0b3J5IHdpdGggdGhlCitjdnMgQ0xJIGNsaWVudCB2aWEgZ2l0LWN2c3NlcnZlciBzZXJ2ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgY3Zzc2VydmVyIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorY3ZzID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJworICAgIHRlc3RfZG9uZQorZmkKK3BlcmwgLWUgJ3VzZSBEQkk7IHVzZSBEQkQ6OlNRTGl0ZScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKyAgICBza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgUGVybCBTUUxpdGUgaW50ZXJmYWNlIHVuYXZhaWxhYmxlJworICAgIHRlc3RfZG9uZQorfQorCitXT1JLRElSPSRQV0QKK1NFUlZFUkRJUj0kUFdEL2dpdGN2cy5naXQKK2dpdF9jb25maWc9IiRTRVJWRVJESVIvY29uZmlnIgorQ1ZTUk9PVD0iOmZvcms6JFNFUlZFUkRJUiIKK0NWU1dPUks9IiRQV0QvY3Zzd29yayIKK0NWU19TRVJWRVI9Z2l0LWN2c3NlcnZlcgorZXhwb3J0IENWU1JPT1QgQ1ZTX1NFUlZFUgorCitybSAtcmYgIiRDVlNXT1JLIiAiJFNFUlZFUkRJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisgIGdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisgIGVjaG8gPmVtcHR5ICYmCisgIGdpdCBhZGQgZW1wdHkgJiYKKyAgZ2l0IGNvbW1pdCAtcSAtbSAiRmlyc3QgQ29tbWl0IiAmJgorICBta2RpciBzZWNvbmRyb290ICYmCisgICggY2Qgc2Vjb25kcm9vdCAmJgorICBnaXQgaW5pdCAmJgorICB0b3VjaCBzZWNvbmRyb290ZmlsZSAmJgorICBnaXQgYWRkIHNlY29uZHJvb3RmaWxlICYmCisgIGdpdCBjb21taXQgLW0gInNlY29uZCByb290IikgJiYKKyAgZ2l0IGZldGNoIHNlY29uZHJvb3QgbWFzdGVyICYmCisgIGdpdCBtZXJnZSAtLWFsbG93LXVucmVsYXRlZC1oaXN0b3JpZXMgRkVUQ0hfSEVBRCAmJgorICBnaXQgY2xvbmUgLXEgLS1iYXJlICIkV09SS0RJUi8uZ2l0IiAiJFNFUlZFUkRJUiIgPi9kZXYvbnVsbCAyPiYxICYmCisgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKKyAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIiAmJgorICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5hdXRoZGIgIiRTRVJWRVJESVIvYXV0aC5kYiIgJiYKKyAgZWNobyBjdnN1c2VyOmN2R1ZFYXJNTG5obEEgPiAiJFNFUlZFUkRJUi9hdXRoLmRiIgorJworCisjIG5vdGUgdGhhdCBjdnMgZG9lc24ndCBhY2NlcHQgYWJzb2x1dGUgcGF0aG5hbWVzCisjIGFzIGFyZ3VtZW50IHRvIGNvIC1kCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBjaGVja291dCcgXAorICAnR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciAmJgorICAgdGVzdCAiJChlY2hvICQoZ3JlcCAtdiBeRCBjdnN3b3JrL0NWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSB8IGhlYWQgLW4gMSkpIiA9ICJlbXB0eS8xLjEvIiAmJgorICAgdGVzdCAiJChlY2hvICQoZ3JlcCAtdiBeRCBjdnN3b3JrL0NWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSB8IHNlZCAtbmUgXCRwKSkiID0gInNlY29uZHJvb3RmaWxlLzEuMS8iJworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBTRVJWRVIgQVVUSEVOVElDQVRJT04KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2F0ID5yZXF1ZXN0LWFub255bW91cyAgPDxFT0YKK0JFR0lOIEFVVEggUkVRVUVTVAorJFNFUlZFUkRJUgorYW5vbnltb3VzCisKK0VORCBBVVRIIFJFUVVFU1QKK0VPRgorCitjYXQgPnJlcXVlc3QtZ2l0ICA8PEVPRgorQkVHSU4gQVVUSCBSRVFVRVNUCiskU0VSVkVSRElSCitnaXQKKworRU5EIEFVVEggUkVRVUVTVAorRU9GCisKK2NhdCA+bG9naW4tYW5vbnltb3VzIDw8RU9GCitCRUdJTiBWRVJJRklDQVRJT04gUkVRVUVTVAorJFNFUlZFUkRJUgorYW5vbnltb3VzCisKK0VORCBWRVJJRklDQVRJT04gUkVRVUVTVAorRU9GCisKK2NhdCA+bG9naW4tZ2l0IDw8RU9GCitCRUdJTiBWRVJJRklDQVRJT04gUkVRVUVTVAorJFNFUlZFUkRJUgorZ2l0CisKK0VORCBWRVJJRklDQVRJT04gUkVRVUVTVAorRU9GCisKK2NhdCA+bG9naW4tZ2l0LW9rIDw8RU9GCitCRUdJTiBWRVJJRklDQVRJT04gUkVRVUVTVAorJFNFUlZFUkRJUgorY3ZzdXNlcgorQWg8Wjp5WlozMCBlCitFTkQgVkVSSUZJQ0FUSU9OIFJFUVVFU1QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uJyBcCisgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHNlcnZlciBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIChub24tYW5vbnltb3VzIHVzZXIpJyBcCisgICdpZiBjYXQgcmVxdWVzdC1naXQgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxCisgICB0aGVuCisgICAgICAgZmFsc2UKKyAgIGVsc2UKKyAgICAgICB0cnVlCisgICBmaSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgSEFURSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BzZXJ2ZXIgYXV0aGVudGljYXRpb24gc3VjY2VzcyAobm9uLWFub255bW91cyB1c2VyIHdpdGggcGFzc3dvcmQpJyBcCisgICdjYXQgbG9naW4tZ2l0LW9rIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BzZXJ2ZXIgYXV0aGVudGljYXRpb24gKGxvZ2luKScgXAorICAnY2F0IGxvZ2luLWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgKGxvZ2luL25vbi1hbm9ueW1vdXMgdXNlciknIFwKKyAgJ2lmIGNhdCBsb2dpbi1naXQgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxCisgICB0aGVuCisgICAgICAgZmFsc2UKKyAgIGVsc2UKKyAgICAgICB0cnVlCisgICBmaSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgSEFURSBZT1VcJCInCisKKworIyBtaXN1c2UgcHNlcnZlciBhdXRoZW50aWNhdGlvbiBmb3IgdGVzdGluZyBvZiByZXFfUm9vdAorCitjYXQgPnJlcXVlc3QtcmVsYXRpdmUgIDw8RU9GCitCRUdJTiBBVVRIIFJFUVVFU1QKK2dpdGN2cy5naXQKK2Fub255bW91cworCitFTkQgQVVUSCBSRVFVRVNUCitFT0YKKworY2F0ID5yZXF1ZXN0LWNvbmZsaWN0ICA8PEVPRgorQkVHSU4gQVVUSCBSRVFVRVNUCiskU0VSVkVSRElSCithbm9ueW1vdXMKKworRU5EIEFVVEggUkVRVUVTVAorUm9vdCAkV09SS0RJUgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKHJlbGF0aXZlIHBhdGhuYW1lKScgXAorICAnaWYgY2F0IHJlcXVlc3QtcmVsYXRpdmUgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxCisgICB0aGVuCisgICAgICAgZWNobyB1bmV4cGVjdGVkIHN1Y2Nlc3MKKyAgICAgICBmYWxzZQorICAgZWxzZQorICAgICAgIHRydWUKKyAgIGZpICYmCisgICB0YWlsIGxvZyB8IGdyZXAgIl5lcnJvciAxIFJvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRobmFtZSQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChjb25mbGljdGluZyByb290cyknIFwKKyAgJ2NhdCByZXF1ZXN0LWNvbmZsaWN0IHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMSAmJgorICAgdGFpbCBsb2cgfCBncmVwICJeZXJyb3IgMSBDb25mbGljdGluZyByb290cyBzcGVjaWZpZWQkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKHN0cmljdCBwYXRocyknIFwKKyAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAoc3RyaWN0LXBhdGhzKScgJworICAgICEgY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwKKyAgICBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIHBzZXJ2ZXIgIiRXT1JLRElSIiA+bG9nIDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKHcvbyBzdHJpY3QtcGF0aHMpJyBcCisgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgIiRXT1JLRElSLyIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAody9vIHN0cmljdC1wYXRocyknICcKKyAgICAhIGNhdCByZXF1ZXN0LWFub255bW91cyB8CisgICAgZ2l0LWN2c3NlcnZlciBwc2VydmVyICIkV09SS0RJUi9naXRjdnMiID5sb2cgMj4mMQorJworCitjYXQgPnJlcXVlc3QtYmFzZSAgPDxFT0YKK0JFR0lOIEFVVEggUkVRVUVTVAorL2dpdGN2cy5naXQKK2Fub255bW91cworCitFTkQgQVVUSCBSRVFVRVNUCitSb290IC9naXRjdnMuZ2l0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKGJhc2UtcGF0aCknIFwKKyAgJ2NhdCByZXF1ZXN0LWJhc2UgfCBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIC0tYmFzZS1wYXRoICIkV09SS0RJUi8iIHBzZXJ2ZXIgIiRTRVJWRVJESVIiID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKGJhc2UtcGF0aCknICcKKyAgICAhIGNhdCByZXF1ZXN0LWFub255bW91cyB8CisgICAgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyAtLWJhc2UtcGF0aCAiJFdPUktESVIiIHBzZXJ2ZXIgIiRTRVJWRVJESVIiID5sb2cgMj4mMQorJworCitHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCBmYWxzZSB8fCBleGl0IDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKGV4cG9ydC1hbGwpJyBcCisgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIC0tZXhwb3J0LWFsbCBwc2VydmVyICIkV09SS0RJUiIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAoZXhwb3J0LWFsbCB3L28gd2hpdGVsaXN0KScgXAorICAnISAoY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgcHNlcnZlciA+bG9nIDI+JjEgfHwgZmFsc2UpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoZXZlcnl0aGluZyB0b2dldGhlciknIFwKKyAgJ2NhdCByZXF1ZXN0LWJhc2UgfCBnaXQtY3Zzc2VydmVyIC0tZXhwb3J0LWFsbCAtLXN0cmljdC1wYXRocyAtLWJhc2UtcGF0aCAiJFdPUktESVIvIiBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCitHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlIHx8IGV4aXQgMQorCisjLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHIFRFU1RTCisjLS0tLS0tLS0tLS0tLS0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0Y3ZzLmVuYWJsZWQgPSBmYWxzZScgXAorICAnR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgZmFsc2UgJiYKKyAgIGlmIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEKKyAgIHRoZW4KKyAgICAgZWNobyB1bmV4cGVjdGVkIGN2cyBzdWNjZXNzCisgICAgIGZhbHNlCisgICBlbHNlCisgICAgIHRydWUKKyAgIGZpICYmCisgICBncmVwICJHSVRDVlMgZW11bGF0aW9uIGRpc2FibGVkIiBjdnMubG9nICYmCisgICB0ZXN0ICEgLWQgY3Zzd29yazInCisKK3JtIC1mciBjdnN3b3JrMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0Y3ZzLmV4dC5lbmFibGVkID0gdHJ1ZScgXAorICAnR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmV4dC5lbmFibGVkIHRydWUgJiYKKyAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIGZhbHNlICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICB0ZXN0X2NtcCBjdnN3b3JrIGN2c3dvcmsyJworCitybSAtZnIgY3Zzd29yazIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGN2cy5leHQuZW5hYmxlZCA9IGZhbHNlJyBcCisgICdHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZXh0LmVuYWJsZWQgZmFsc2UgJiYKKyAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKKyAgIGlmIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEKKyAgIHRoZW4KKyAgICAgZWNobyB1bmV4cGVjdGVkIGN2cyBzdWNjZXNzCisgICAgIGZhbHNlCisgICBlbHNlCisgICAgIHRydWUKKyAgIGZpICYmCisgICBncmVwICJHSVRDVlMgZW11bGF0aW9uIGRpc2FibGVkIiBjdnMubG9nICYmCisgICB0ZXN0ICEgLWQgY3Zzd29yazInCisKK3JtIC1mciBjdnN3b3JrMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0Y3ZzLmRibmFtZScgXAorICAnR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmV4dC5lbmFibGVkIHRydWUgJiYKKyAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmRibmFtZSAlR2dpdGN2cy4lYS4lbS5zcWxpdGUgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgIHRlc3RfY21wIGN2c3dvcmsgY3Zzd29yazIgJiYKKyAgIHRlc3QgLWYgIiRTRVJWRVJESVIvZ2l0Y3ZzLmV4dC5tYXN0ZXIuc3FsaXRlIiAmJgorICAgY21wICIkU0VSVkVSRElSL2dpdGN2cy5tYXN0ZXIuc3FsaXRlIiAiJFNFUlZFUkRJUi9naXRjdnMuZXh0Lm1hc3Rlci5zcWxpdGUiJworCitybSAtZnIgY3Zzd29yazIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGN2cy5leHQuZGJuYW1lJyBcCisgICdHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZXh0LmVuYWJsZWQgdHJ1ZSAmJgorICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMuZXh0LmRibmFtZSAlR2dpdGN2czEuJWEuJW0uc3FsaXRlICYmCisgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5kYm5hbWUgJUdnaXRjdnMyLiVhLiVtLnNxbGl0ZSAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgdGVzdF9jbXAgY3Zzd29yayBjdnN3b3JrMiAmJgorICAgdGVzdCAtZiAiJFNFUlZFUkRJUi9naXRjdnMxLmV4dC5tYXN0ZXIuc3FsaXRlIiAmJgorICAgdGVzdCAhIC1mICIkU0VSVkVSRElSL2dpdGN2czIuZXh0Lm1hc3Rlci5zcWxpdGUiICYmCisgICBjbXAgIiRTRVJWRVJESVIvZ2l0Y3ZzLm1hc3Rlci5zcWxpdGUiICIkU0VSVkVSRElSL2dpdGN2czEuZXh0Lm1hc3Rlci5zcWxpdGUiJworCisKKyMtLS0tLS0tLS0tLS0KKyMgQ1ZTIFVQREFURQorIy0tLS0tLS0tLS0tLQorCitybSAtZnIgIiRTRVJWRVJESVIiCitjZCAiJFdPUktESVIiICYmCitnaXQgY2xvbmUgLXEgLS1iYXJlICIkV09SS0RJUi8uZ2l0IiAiJFNFUlZFUkRJUiIgPi9kZXYvbnVsbCAyPiYxICYmCitHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCitHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5sb2dmaWxlICIkU0VSVkVSRElSL2dpdGN2cy5sb2ciIHx8CitleGl0IDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAoY3JlYXRlIG5ldyBmaWxlKScgXAorICAnZWNobyB0ZXN0ZmlsZTEgPnRlc3RmaWxlMSAmJgorICAgZ2l0IGFkZCB0ZXN0ZmlsZTEgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIkFkZCB0ZXN0ZmlsZTEiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIHRlc3RmaWxlMSBDVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAidGVzdGZpbGUxLzEuMS8iICYmCisgICB0ZXN0X2NtcCB0ZXN0ZmlsZTEgLi4vdGVzdGZpbGUxJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlICh1cGRhdGUgZXhpc3RpbmcgZmlsZSknIFwKKyAgJ2VjaG8gbGluZSAyID4+dGVzdGZpbGUxICYmCisgICBnaXQgYWRkIHRlc3RmaWxlMSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiQXBwZW5kIHRvIHRlc3RmaWxlMSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgIHRlc3QgIiQoZWNobyAkKGdyZXAgdGVzdGZpbGUxIENWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICJ0ZXN0ZmlsZTEvMS4yLyIgJiYKKyAgIHRlc3RfY21wIHRlc3RmaWxlMSAuLi90ZXN0ZmlsZTEnCisKK2NkICIkV09SS0RJUiIKKyNUT0RPOiBjdnNzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHVwZGF0ZSB3L28gLWQKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgImN2cyB1cGRhdGUgdy9vIC1kIGRvZXNuJ3QgY3JlYXRlIHN1YmRpciAoVE9ETykiICcKKyAgIG1rZGlyIHRlc3QgJiYKKyAgIGVjaG8gPnRlc3QvZW1wdHkgJiYKKyAgIGdpdCBhZGQgdGVzdCAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiU2luZ2xlIFN1YmRpcmVjdG9yeSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgIHRlc3QgISAtZCB0ZXN0CisnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKHN1YmRpcmVjdG9yaWVzKScgXAorICAnKGZvciBkaXIgaW4gQSBBL0IgQS9CL0MgQS9EIEU7IGRvCisgICAgICBta2RpciAkZGlyICYmCisgICAgICBlY2hvICJ0ZXN0IGZpbGUgaW4gJGRpciIgPiIkZGlyL2ZpbGVfaW5fJChlY2hvICRkaXJ8c2VkIC1lICJzIy8jICNnIikiICAmJgorICAgICAgZ2l0IGFkZCAkZGlyCisgICBkb25lKSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiZGVlcCBzdWIgZGlyZWN0b3J5IHN0cnVjdHVyZSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgLWQgJiYKKyAgIChmb3IgZGlyIGluIEEgQS9CIEEvQi9DIEEvRCBFOyBkbworICAgICAgZmlsZW5hbWU9ImZpbGVfaW5fJChlY2hvICRkaXJ8c2VkIC1lICJzIy8jICNnIikiICYmCisgICAgICBpZiB0ZXN0ICIkKGVjaG8gJChncmVwIC12IF5EICRkaXIvQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gIiRmaWxlbmFtZS8xLjEvIiAmJgorCXRlc3RfY21wICIkZGlyLyRmaWxlbmFtZSIgIi4uLyRkaXIvJGZpbGVuYW1lIjsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGVjaG8gPmZhaWx1cmUKKyAgICAgIGZpCisgICAgZG9uZSkgJiYKKyAgIHRlc3QgISAtZiBmYWlsdXJlJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChkZWxldGUgZmlsZSknIFwKKyAgJ2dpdCBybSB0ZXN0ZmlsZTEgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIlJlbW92ZSB0ZXN0ZmlsZTEiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0IC16ICIkKGdyZXAgdGVzdGZpbGUxIENWUy9FbnRyaWVzKSIgJiYKKyAgIHRlc3QgISAtZiB0ZXN0ZmlsZTEnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKHJlLWFkZCBkZWxldGVkIGZpbGUpJyBcCisgICdlY2hvIHJlYWRkZWQgdGVzdGZpbGUgPnRlc3RmaWxlMSAmJgorICAgZ2l0IGFkZCB0ZXN0ZmlsZTEgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIlJlLUFkZCB0ZXN0ZmlsZTEiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIHRlc3RmaWxlMSBDVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAidGVzdGZpbGUxLzEuNC8iICYmCisgICB0ZXN0X2NtcCB0ZXN0ZmlsZTEgLi4vdGVzdGZpbGUxJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChtZXJnZSknIFwKKyAgJ2VjaG8gTGluZSAwID5leHBlY3RlZCAmJgorICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNworICAgZG8KKyAgICAgZWNobyBMaW5lICRpID4+bWVyZ2UgJiYKKyAgICAgZWNobyBMaW5lICRpID4+ZXhwZWN0ZWQKKyAgIGRvbmUgJiYKKyAgIGVjaG8gTGluZSA4ID4+ZXhwZWN0ZWQgJiYKKyAgIGdpdCBhZGQgbWVyZ2UgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIk1lcmdlIHRlc3QgKHByZS1tZXJnZSkiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIG1lcmdlIENWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICJtZXJnZS8xLjEvIiAmJgorICAgdGVzdF9jbXAgbWVyZ2UgLi4vbWVyZ2UgJiYKKyAgICggZWNobyBMaW5lIDAgJiYgY2F0IG1lcmdlICkgPm1lcmdlLnRtcCAmJgorICAgbXYgbWVyZ2UudG1wIG1lcmdlICYmCisgICBjZCAiJFdPUktESVIiICYmCisgICBlY2hvIExpbmUgOCA+Pm1lcmdlICYmCisgICBnaXQgYWRkIG1lcmdlICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJNZXJnZSB0ZXN0IChtZXJnZSkiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIHNsZWVwIDEgJiYgdG91Y2ggbWVyZ2UgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0X2NtcCBtZXJnZSAuLi9leHBlY3RlZCcKKworY2QgIiRXT1JLRElSIgorCitjYXQgPmV4cGVjdGVkLkMgPDxFT0YKKzw8PDw8PDwgbWVyZ2UubWluZQorTGluZSAwCis9PT09PT09CitMSU5FIDAKKz4+Pj4+Pj4gbWVyZ2UuMS4zCitFT0YKKworZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4CitkbworICBlY2hvIExpbmUgJGkgPj5leHBlY3RlZC5DCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKGNvbmZsaWN0IG1lcmdlKScgXAorICAnKCBlY2hvIExJTkUgMCAmJiBjYXQgbWVyZ2UgKSA+bWVyZ2UudG1wICYmCisgICBtdiBtZXJnZS50bXAgbWVyZ2UgJiYKKyAgIGdpdCBhZGQgbWVyZ2UgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIk1lcmdlIHRlc3QgKGNvbmZsaWN0KSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgIHRlc3RfY21wIG1lcmdlIC4uL2V4cGVjdGVkLkMnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKC1DKScgXAorICAnY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgLUMgJiYKKyAgIHRlc3RfY21wIG1lcmdlIC4uL21lcmdlJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChtZXJnZSBuby1vcCknIFwKKyAgICdlY2hvIExpbmUgOSA+Pm1lcmdlICYmCisgICAgY3AgbWVyZ2UgY3Zzd29yay9tZXJnZSAmJgorICAgIGdpdCBhZGQgbWVyZ2UgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJNZXJnZSB0ZXN0IChuby1vcCkiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgY2QgY3Zzd29yayAmJgorICAgIHNsZWVwIDEgJiYgdG91Y2ggbWVyZ2UgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgIHRlc3RfY21wIG1lcmdlIC4uL21lcmdlJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlICgtcCknICcKKyAgICB0b3VjaCByZWFsbHktZW1wdHkgJiYKKyAgICBlY2hvIExpbmUgMSA+IG5vLWxmICYmCisgICAgcHJpbnRmICJMaW5lIDIiID4+IG5vLWxmICYmCisgICAgZ2l0IGFkZCByZWFsbHktZW1wdHkgbm8tbGYgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJVcGRhdGUgLXAgdGVzdCIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgICBjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyB1cGRhdGUgJiYKKyAgICBmb3IgaSBpbiBtZXJnZSBuby1sZiBlbXB0eSByZWFsbHktZW1wdHk7IGRvCisJR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyB1cGRhdGUgLXAgIiRpIiA+JGkub3V0ICYmCisJdGVzdF9jbXAgJGkub3V0IC4uLyRpIHx8IHJldHVybiAxCisgICAgZG9uZQorJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChtb2R1bGUgbGlzdCBzdXBwb3J0cyBwYWNrZWQgcmVmcyknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgcGFjay1yZWZzIC0tYWxsICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtbiB1cCAtZCAyPiBvdXQgJiYKKyAgICBncmVwICJjdnMgdXBkYXRlOiBOZXcgZGlyZWN0b3J5IFxgbWFzdGVyJ1wnJyIgPCBvdXQKKycKKworIy0tLS0tLS0tLS0tLQorIyBDVlMgU1RBVFVTCisjLS0tLS0tLS0tLS0tCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBzdGF0dXMnICcKKyAgICBta2RpciBzdGF0dXMuZGlyICYmCisgICAgZWNobyBMaW5lID4gc3RhdHVzLmRpci9zdGF0dXMuZmlsZSAmJgorICAgIGVjaG8gTGluZSA+IHN0YXR1cy5maWxlICYmCisgICAgZ2l0IGFkZCBzdGF0dXMuZGlyIHN0YXR1cy5maWxlICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiU3RhdHVzIHRlc3QiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgdXBkYXRlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyBzdGF0dXMgfCBncmVwICJeRmlsZTogc3RhdHVzLmZpbGUiID4uLi9vdXQgJiYKKyAgICB0ZXN0X2xpbmVfY291bnQgPSAyIC4uL291dAorJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgc3RhdHVzIChub25yZWN1cnNpdmUpJyAnCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgc3RhdHVzIC1sIHwgZ3JlcCAiXkZpbGU6IHN0YXR1cy5maWxlIiA+Li4vb3V0ICYmCisgICAgdGVzdF9saW5lX2NvdW50ID0gMSAuLi9vdXQKKycKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHN0YXR1cyAobm8gc3ViZGlycyBpbiBoZWFkZXIpJyAnCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgc3RhdHVzIHwgZ3JlcCBeRmlsZTogPi4uL291dCAmJgorICAgICEgZ3JlcCAvIDwuLi9vdXQKKycKKworIy0tLS0tLS0tLS0tLQorIyBDVlMgQ0hFQ0tPVVQKKyMtLS0tLS0tLS0tLS0KKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIC1jIChzaG93cyBtb2R1bGUgZGF0YWJhc2UpJyAnCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyBjbyAtYyA+IG91dCAmJgorICAgIGdyZXAgIl5tYXN0ZXJbCSBdWyAJXSptYXN0ZXIkIiA8b3V0ICYmCisgICAgISBncmVwIC12ICJebWFzdGVyWwkgXVsgCV0qbWFzdGVyJCIgPG91dAorJworCisjLS0tLS0tLS0tLS0tCisjIENWUyBMT0cKKyMtLS0tLS0tLS0tLS0KKworIyBLbm93biBpc3N1ZXMgd2l0aCBnaXQtY3Zzc2VydmVyIGN1cnJlbnQgbG9nIG91dHB1dDoKKyMgIC0gSGFyZCBjb2RlZCAibGluZXM6ICsyIC0zIiBwbGFjZWhvbGRlciwgaW5zdGVhZCBvZiByZWFsIG51bWJlcnMuCisjICAtIENWUyBub3JtYWxseSBkb2VzIG5vdCBpbnRlcm5hbGx5IGFkZCBhIGJsYW5rIGZpcnN0IGxpbmUKKyMgICAgb3IgYSBsYXN0IGxpbmUgd2l0aCBub3RoaW5nIGJ1dCBhIHNwYWNlIHRvIGxvZyBtZXNzYWdlcy4KKyMgIC0gVGhlIGxhdGVzdCBjdnMgMS4xMi54IHNlcnZlciBzZW5kcyArMDAwMCB0aW1lem9uZSAod2l0aCBzb21lIGhpZGRlbiAiTVQiCisjICAgIHRhZ2dpbmcgaW4gdGhlIHByb3RvY29sKSwgYW5kIGlmIGN2cyAxLjEyLnggY2xpZW50IHNlZXMgdGhlIE1UIHRhZ3MsCisjICAgIGl0IGNvbnZlcnRzIHRvIGxvY2FsIHRpbWUgem9uZS4gIGdpdC1jdnNzZXJ2ZXIgZG9lc24ndCBkbyB0aGUgKzAwMDAKKyMgICAgb3IgdGhlIE1UIHRhZ3MuLi4KKyMgIC0gVGhlIGxhdGVzdCAxLjEyLnggcmVsZWFzZXMgYWRkIGEgImNvbW1pdGlkOiIgZmllbGQgb24gdG8gdGhlIGVuZCBvZiB0aGUKKyMgICAgImRhdGU6IiBsaW5lIChhZnRlciAibGluZXM6IikuICBNYXliZSB3ZSBjb3VsZCBzdGljayBnaXQncyBjb21taXQgaWQKKyMgICAgaW4gaXQ/ICBPciBkb2VzIENWUyBleHBlY3QgYSBjZXJ0YWluIG51bWJlciBvZiBiaXRzICh0b28gZmV3IGZvcgorIyAgICBhIGZ1bGwgc2hhMSk/CisjCisjIEdpdmVuIHRoZSBhYm92ZSwgZXhwZWN0IHRoZSBmb2xsb3dpbmcgdGVzdCB0byBicmVhayBpZiBnaXQtY3Zzc2VydmVyJ3MKKyMgbG9nIG91dHB1dCBpcyBpbXByb3ZlZC4gIFRoZSB0ZXN0IGlzIGp1c3QgdG8gZW5zdXJlIGl0IGRvZXNuJ3QKKyMgYWNjaWRlbnRhbGx5IGdldCB3b3JzZS4KKworc2VkIC1lICdzL154Ly8nIC1lICdzL1NQJC8gLycgPiAiJFdPUktESVIvZXhwZWN0IiA8PEVPRgoreAoreFJDUyBmaWxlOiAkV09SS0RJUi9naXRjdnMuZ2l0L21hc3Rlci9tZXJnZSx2Cit4V29ya2luZyBmaWxlOiBtZXJnZQoreGhlYWQ6IDEuNAoreGJyYW5jaDoKK3hsb2Nrczogc3RyaWN0Cit4YWNjZXNzIGxpc3Q6Cit4c3ltYm9saWMgbmFtZXM6Cit4a2V5d29yZCBzdWJzdGl0dXRpb246IGt2Cit4dG90YWwgcmV2aXNpb25zOiA0OwlzZWxlY3RlZCByZXZpc2lvbnM6IDQKK3hkZXNjcmlwdGlvbjoKK3gtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit4cmV2aXNpb24gMS40Cit4ZGF0ZTogX19EQVRFX187ICBhdXRob3I6IGF1dGhvcjsgIHN0YXRlOiBFeHA7ICBsaW5lczogKzIgLTMKK3gKK3hNZXJnZSB0ZXN0IChuby1vcCkKK3hTUAoreC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3hyZXZpc2lvbiAxLjMKK3hkYXRlOiBfX0RBVEVfXzsgIGF1dGhvcjogYXV0aG9yOyAgc3RhdGU6IEV4cDsgIGxpbmVzOiArMiAtMworeAoreE1lcmdlIHRlc3QgKGNvbmZsaWN0KQoreFNQCit4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoreHJldmlzaW9uIDEuMgoreGRhdGU6IF9fREFURV9fOyAgYXV0aG9yOiBhdXRob3I7ICBzdGF0ZTogRXhwOyAgbGluZXM6ICsyIC0zCit4Cit4TWVyZ2UgdGVzdCAobWVyZ2UpCit4U1AKK3gtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit4cmV2aXNpb24gMS4xCit4ZGF0ZTogX19EQVRFX187ICBhdXRob3I6IGF1dGhvcjsgIHN0YXRlOiBFeHA7ICBsaW5lczogKzIgLTMKK3gKK3hNZXJnZSB0ZXN0IChwcmUtbWVyZ2UpCit4U1AKK3g9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRU9GCitleHBlY3RTdGF0PSIkPyIKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGxvZycgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICB0ZXN0IHgiJGV4cGVjdFN0YXQiID0geCIwIiAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgbG9nIG1lcmdlID4uLi9vdXQgJiYKKyAgICBzZWQgLWUgInMlMlswLTldWzAtOV1bMC05XS9bMDFdWzAtOV0vWzAtM11bMC05XSBbMC0yXVswLTldOlswLTVdWzAtOV06WzAtNV1bMC05XSVfX0RBVEVfXyUiIC4uL291dCA+IC4uL2FjdHVhbCAmJgorICAgIHRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKworIy0tLS0tLS0tLS0tLQorIyBDVlMgQU5OT1RBVEUKKyMtLS0tLS0tLS0tLS0KKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGFubm90YXRlJyAnCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgYW5ub3RhdGUgbWVyZ2UgPi4uL291dCAmJgorICAgIHNlZCAtZSAicy8gLiovLyIgLi4vb3V0ID4uLi9hY3R1YWwgJiYKKyAgICBmb3IgaSBpbiAzIDEgMSAxIDEgMSAxIDEgMiA0OyBkbyBlY2hvIDEuJGk7IGRvbmUgPi4uL2V4cGVjdCAmJgorICAgIHRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKworIy0tLS0tLS0tLS0tLQorIyBydW5uaW5nIHZpYSBnaXQtc2hlbGwKKyMtLS0tLS0tLS0tLS0KKworY2QgIiRXT1JLRElSIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVtb3RlLWN2cyBoZWxwZXInICcKKwl3cml0ZV9zY3JpcHQgcmVtb3RlLWN2cyA8PC1cRU9GCisJZXhlYyBnaXQgc2hlbGwgLWMgImN2cyBzZXJ2ZXIiCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBzZXJ2ZXIgZG9lcyBub3QgcnVuIHdpdGggdmFuaWxsYSBnaXQtc2hlbGwnICcKKwkoCisJCWNkIGN2c3dvcmsgJiYKKwkJQ1ZTX1NFUlZFUj0kV09SS0RJUi9yZW1vdGUtY3ZzICYmCisJCWV4cG9ydCBDVlNfU0VSVkVSICYmCisJCXRlc3RfbXVzdF9mYWlsIGN2cyBsb2cgbWVyZ2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyZSBnaXQgc2hlbGwgdG8gcnVuIGN2cyBzZXJ2ZXInICcKKwlta2RpciAiJEhPTUUiL2dpdC1zaGVsbC1jb21tYW5kcyAmJgorCisJd3JpdGVfc2NyaXB0ICIkSE9NRSIvZ2l0LXNoZWxsLWNvbW1hbmRzL2N2cyA8PC1cRU9GICYmCisJaWYgISB0ZXN0ICQjID0gMSAmJiB0ZXN0ICIkMSIgPSAic2VydmVyIgorCXRoZW4KKwkJZWNobyA+JjIgImdpdC1jdnNzZXJ2ZXIgb25seSBoYW5kbGVzIFwic2VydmVyXCIiCisJCWV4aXQgMQorCWZpCisJZXhlYyBnaXQgY3Zzc2VydmVyIHNlcnZlcgorCUVPRgorCisJIyBTaG91bGQgbm90IGJlIHVzZWQsIGJ1dCBwYXJ0IG9mIHRoZSByZWNvbW1lbmRlZCBzZXR1cAorCXdyaXRlX3NjcmlwdCAiJEhPTUUiL2dpdC1zaGVsbC1jb21tYW5kcy9uby1pbnRlcmFjdGl2ZS1sb2dpbiA8PC1cRU9GCisJZWNobyBJbnRlcmFjdGl2ZSBsb2dpbiBmb3JiaWRkZW4KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHNlcnZlciBjYW4gcnVuIHdpdGggcmVjb21tZW5kZWQgY29uZmlnJyAnCisJKAorCQljZCBjdnN3b3JrICYmCisJCUNWU19TRVJWRVI9JFdPUktESVIvcmVtb3RlLWN2cyAmJgorCQlleHBvcnQgQ1ZTX1NFUlZFUiAmJgorCQljdnMgbG9nIG1lcmdlCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk0MDEtZ2l0LWN2c3NlcnZlci1jcmxmLnNoIGIvdC90OTQwMS1naXQtY3Zzc2VydmVyLWNybGYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODQ3ODdlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk0MDEtZ2l0LWN2c3NlcnZlci1jcmxmLnNoCkBAIC0wLDAgKzEsMzY5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoZXcgT2dpbHZpZQorIyBQYXJ0cyBhZGFwdGVkIGZyb20gb3RoZXIgdGVzdHMuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1jdnNzZXJ2ZXIgLWtiIG1vZGVzCisKK3Rlc3RzIC1rYiBtb2RlIGZvciBiaW5hcnkgZmlsZXMgd2hlbiBhY2Nlc3NpbmcgYSBnaXQKK3JlcG9zaXRvcnkgdXNpbmcgY3ZzIENMSSBjbGllbnQgdmlhIGdpdC1jdnNzZXJ2ZXIgc2VydmVyJworCisuIC4vdGVzdC1saWIuc2gKKworbWFya2VkX2FzICgpIHsKKyAgICBmb3VuZEVudHJ5PSIkKGdyZXAgIl4vJDIvIiAiJDEvQ1ZTL0VudHJpZXMiKSIKKyAgICBpZiBbIHgiJGZvdW5kRW50cnkiID0geCIiIF0gOyB0aGVuCisgICAgICAgZWNobyAiTk9UIEZPVU5EOiAkMSAkMiAxICQzIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgICAgIHJldHVybiAxCisgICAgZmkKKyAgICB0ZXN0IHgiJChncmVwICJeLyQyLyIgIiQxL0NWUy9FbnRyaWVzIiB8IGN1dCAtZC8gLWY1KSIgPSB4IiQzIgorICAgIHN0YXQ9JD8KKyAgICBlY2hvICIkMSAkMiAkc3RhdCAnJDMnIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgIHJldHVybiAkc3RhdAorfQorCitub3RfcHJlc2VudCgpIHsKKyAgICBmb3VuZEVudHJ5PSIkKGdyZXAgIl4vJDIvIiAiJDEvQ1ZTL0VudHJpZXMiKSIKKyAgICBpZiBbIC1yICIkMS8kMiIgXSA7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IEZpbGUgc3RpbGwgZXhpc3RzOiAkMSAkMiIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZmkKKyAgICBpZiBbIHgiJGZvdW5kRW50cnkiICE9IHgiIiBdIDsgdGhlbgorICAgICAgICBlY2hvICJFcnJvcjogc2hvdWxkIG5vdCBoYXZlIGZvdW5kOiAkMSAkMiIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAgICAgICBlY2hvICJDb3JyZWN0bHkgbm90IGZvdW5kOiAkMSAkMiIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZmkKK30KKworY2hlY2tfc3RhdHVzX29wdGlvbnMoKSB7CisgICAgKGNkICIkMSIgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHN0YXR1cyAiJDIiID4gIiR7V09SS0RJUn0vc3RhdHVzLm91dCIgMj4mMQorICAgICkKKyAgICBpZiBbIHgiJD8iICE9IHgiMCIgXSA7IHRoZW4KKwllY2hvICJFcnJvciBmcm9tIGN2cyBzdGF0dXM6ICQxICQyIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorCXJldHVybiAxOworICAgIGZpCisgICAgZ290PSIkKHNlZCAtbiAtZSAncy9eWyAJXSpTdGlja3kgT3B0aW9uczpbIAldKi8vcCcgIiR7V09SS0RJUn0vc3RhdHVzLm91dCIpIgorICAgIGV4cGVjdD0iJDMiCisgICAgaWYgWyB4IiRleHBlY3QiID0geCIiIF0gOyB0aGVuCisJZXhwZWN0PSIobm9uZSkiCisgICAgZmkKKyAgICB0ZXN0IHgiJGdvdCIgPSB4IiRleHBlY3QiCisgICAgc3RhdD0kPworICAgIGVjaG8gImN2cyBzdGF0dXM6ICQxICQyICRzdGF0ICckMycgJyRnb3QnIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgIHJldHVybiAkc3RhdAorfQorCitjdnMgPi9kZXYvbnVsbCAyPiYxCitpZiB0ZXN0ICQ/IC1uZSAxCit0aGVuCisgICAgc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIGN2cyBub3QgZm91bmQnCisgICAgdGVzdF9kb25lCitmaQoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKK3RoZW4KKyAgICBza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworICAgIHRlc3RfZG9uZQorZmkKK3BlcmwgLWUgJ3VzZSBEQkk7IHVzZSBEQkQ6OlNRTGl0ZScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKyAgICBza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgUGVybCBTUUxpdGUgaW50ZXJmYWNlIHVuYXZhaWxhYmxlJworICAgIHRlc3RfZG9uZQorfQorCit1bnNldCBHSVRfRElSIEdJVF9DT05GSUcKK1dPUktESVI9JFBXRAorU0VSVkVSRElSPSRQV0QvZ2l0Y3ZzLmdpdAorZ2l0X2NvbmZpZz0iJFNFUlZFUkRJUi9jb25maWciCitDVlNST09UPSI6Zm9yazokU0VSVkVSRElSIgorQ1ZTV09SSz0iJFBXRC9jdnN3b3JrIgorQ1ZTX1NFUlZFUj1naXQtY3Zzc2VydmVyCitleHBvcnQgQ1ZTUk9PVCBDVlNfU0VSVkVSCisKK3JtIC1yZiAiJENWU1dPUksiICIkU0VSVkVSRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKyAgICBnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorICAgIGVjaG8gIlNpbXBsZSB0ZXh0IGZpbGUiID50ZXh0ZmlsZS5jICYmCisgICAgZWNobyAiRmlsZSB3aXRoIGVtYmVkZGVkIE5VTDogUSA8LSB0aGVyZSIgfCBxX3RvX251bCA+IGJpbmZpbGUuYmluICYmCisgICAgbWtkaXIgc3ViZGlyICYmCisgICAgZWNobyAiQW5vdGhlciB0ZXh0IGZpbGUiID4gc3ViZGlyL2ZpbGUuaCAmJgorICAgIGVjaG8gIkFub3RoZXIgYmluYXJ5OiBRICh0aGlzIHRpbWUgQ1IpIiB8IHFfdG9fY3IgPiBzdWJkaXIvd2l0aENyLmJpbiAmJgorICAgIGVjaG8gIk1peGVkIHVwIE5VTCwgYnV0IG1hcmtlZCB0ZXh0OiBRIDwtIHRoZXJlIiB8IHFfdG9fbnVsID4gbWl4ZWRVcC5jICYmCisgICAgZWNobyAiVW5zcGVjaWZpZWQiID4gc3ViZGlyL3Vuc3BlY2lmaWVkLm90aGVyICYmCisgICAgZWNobyAiLyouYmluIC1jcmxmIiA+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZWNobyAiLyouYyBjcmxmIiA+PiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gInN1YmRpci8qLmJpbiAtY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBlY2hvICJzdWJkaXIvKi5jIGNybGYiID4+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZWNobyAic3ViZGlyL2ZpbGUuaCBjcmxmIiA+PiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgdGV4dGZpbGUuYyBiaW5maWxlLmJpbiBtaXhlZFVwLmMgc3ViZGlyLyogJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJGaXJzdCBDb21taXQiICYmCisgICAgZ2l0IGNsb25lIC1xIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5sb2dmaWxlICIkU0VSVkVSRElSL2dpdGN2cy5sb2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAoZGVmYXVsdCBjcmxmKScgJworICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIHRlc3QgeCIkKGdyZXAgJy8taycgY3Zzd29yay9DVlMvRW50cmllcyBjdnN3b3JrL3N1YmRpci9DVlMvRW50cmllcykiID0geCIiCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGFsbGJpbmFyeSknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuYWxsYmluYXJ5IHRydWUgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAta2IKKycKKworcm0gLXJmIGN2c3dvcmsgY3ZzLmxvZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvICh1c2UgYXR0cmlidXRlcy9hbGxiaW5hcnkpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLnVzZWNybGZhdHRyIHRydWUgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbWl4ZWRVcC5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAta2IKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAodXNlIGF0dHJpYnV0ZXMpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmFsbGJpbmFyeSBmYWxzZSAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaW5nIGZpbGVzJyAnCisgICAgKGNkIGN2c3dvcmsgJiYKKyAgICAoY2Qgc3ViZGlyICYmCisgICAgZWNobyAibW9yZSB0ZXh0IiA+IHNyYy5jICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc3JjLmMgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyAuIHNyYy5jICIiICYmCisgICAgZWNobyAicHNldWRvLWJpbmFyeSIgPiB0ZW1wLmJpbgorICAgICkgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzdWJkaXIvdGVtcC5iaW4gPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBzdWJkaXIgdGVtcC5iaW4gIi1rYiIgJiYKKyAgICBjZCBzdWJkaXIgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNpIC1tICJhZGRpbmcgZmlsZXMiID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgLiB0ZW1wLmJpbiAiLWtiIiAmJgorICAgIG1hcmtlZF9hcyAuIHNyYy5jICIiCisgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZycgJworICAgIGdpdCBwdWxsIGdpdGN2cy5naXQgJiYKKyAgICBlY2hvICdoaScgPiBzdWJkaXIvbmV3ZmlsZS5iaW4gJiYKKyAgICBlY2hvICdqdW5rJyA+IHN1YmRpci9maWxlLmggJiYKKyAgICBlY2hvICdoaScgPiBzdWJkaXIvbmV3ZmlsZS5jICYmCisgICAgZWNobyAnaGVsbG8nID4+IGJpbmZpbGUuYmluICYmCisgICAgZ2l0IGFkZCBzdWJkaXIvbmV3ZmlsZS5iaW4gc3ViZGlyL2ZpbGUuaCBzdWJkaXIvbmV3ZmlsZS5jIGJpbmZpbGUuYmluICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiQWRkIGFuZCBjaGFuZ2Ugc29tZSBmaWxlcyIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgICAoY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlCisgICAgKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIGVjaG8gIkZpbGUgd2l0aCBlbWJlZGRlZCBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiB0bXBFeHBlY3QxICYmCisgICAgZWNobyAiaGVsbG8iID4+IHRtcEV4cGVjdDEgJiYKKyAgICBjbXAgY3Zzd29yay9iaW5maWxlLmJpbiB0bXBFeHBlY3QxCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKHVzZSBhdHRyaWJ1dGVzL2d1ZXNzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmFsbGJpbmFyeSBndWVzcyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtdWx0aS1saW5lIGZpbGVzJyAnCisgICAgKCBlY2hvICJsaW5lIDEiICYmCisgICAgICBlY2hvICJsaW5lIDIiICYmCisgICAgICBlY2hvICJsaW5lIDMiICYmCisgICAgICBlY2hvICJsaW5lIDQgd2l0aCBOVUw6IFEgPC0iICkgfCBxX3RvX251bCA+IG11bHRpbGluZS5jICYmCisgICAgZ2l0IGFkZCBtdWx0aWxpbmUuYyAmJgorICAgICggZWNobyAibGluZSAxIiAmJgorICAgICAgZWNobyAibGluZSAyIiAmJgorICAgICAgZWNobyAibGluZSAzIiAmJgorICAgICAgZWNobyAibGluZSA0IiApIHwgcV90b19udWwgPiBtdWx0aWxpbmVUeHQuYyAmJgorICAgIGdpdCBhZGQgbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJtdWx0aWxpbmUgZmlsZXMiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGd1ZXNzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy51c2VjcmxmYXR0ciBmYWxzZSAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyBhbm90aGVyIGNvcHkgKGd1ZXNzKScgJworICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBzdGF0dXMgLSBzdGlja3kgb3B0aW9ucycgJworICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyIHRleHRmaWxlLmMgIiIgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyIG1peGVkVXAuYyAta2IgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyIHN1YmRpci93aXRoQ3IuYmluIC1rYiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiBzdWJkaXIvZmlsZS5oICIiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgdGV4dCAoZ3Vlc3MpJyAnCisgICAgKGNkIGN2c3dvcmsgJiYKKyAgICBlY2hvICJzaW1wbGVUZXh0IiA+IHNpbXBsZVRleHQuYyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgYWRkIHNpbXBsZVRleHQuYworICAgICkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBzaW1wbGVUZXh0LmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGJpbiAoZ3Vlc3MpJyAnCisgICAgKGNkIGN2c3dvcmsgJiYKKyAgICBlY2hvICJzaW1wbGVCaW46IE5VTDogUSA8LSB0aGVyZSIgfCBxX3RvX251bCA+IHNpbXBsZUJpbi5iaW4gJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzaW1wbGVCaW4uYmluCisgICAgKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHNpbXBsZUJpbi5iaW4gLWtiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBmaWxlcyAoZ3Vlc3MpJyAnCisgICAgKGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHJtIC1mIHN1YmRpci9maWxlLmggJiYKKyAgICAoY2Qgc3ViZGlyICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBybSAtZiB3aXRoQ3IuYmluCisgICAgKSkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjaSAoZ3Vlc3MpJyAnCisgICAgKGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNpIC1tICJhZGQvcm0gZmlsZXMiID5jdnMubG9nIDI+JjEKKyAgICApICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG11bHRpbGluZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBzaW1wbGVCaW4uYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHNpbXBsZVRleHQuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgc3ViZGlyIG9mIG90aGVyIGNvcHkgKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrMi9zdWJkaXIgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZQorICAgICkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMi9zdWJkaXIgd2l0aENyLmJpbiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyL3N1YmRpciBmaWxlLmggJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5jICIiICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIgc2ltcGxlQmluLmJpbiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyIHNpbXBsZVRleHQuYworJworCitlY2hvICJzdGFydGluZyB1cGRhdGUvbWVyZ2UiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUvbWVyZ2UgZnVsbCBvdGhlciBjb3B5IChndWVzcyknICcKKyAgICBnaXQgcHVsbCBnaXRjdnMuZ2l0IG1hc3RlciAmJgorICAgIHNlZCAicy8zL3JlcGxhY2VkXzMvIiA8IG11bHRpbGluZVR4dC5jID4gbWwudGVtcCAmJgorICAgIG12IG1sLnRlbXAgbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgYWRkIG11bHRpbGluZVR4dC5jICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAibW9kaWZ5IG11bHRpbGluZSBmaWxlIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIiAmJgorICAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgIChjZCBjdnN3b3JrMiAmJgorICAgIHNlZCAicy8xL3JlcGxhY2VkXzEvIiA8IG11bHRpbGluZVR4dC5jID4gbWwudGVtcCAmJgorICAgIG12IG1sLnRlbXAgbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIHVwZGF0ZSA+IGN2cy5sb2cgMj4mMQorICAgICkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMi9zdWJkaXIgd2l0aENyLmJpbiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyL3N1YmRpciBmaWxlLmggJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHNpbXBsZUJpbi5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHNpbXBsZVRleHQuYyAiIiAmJgorICAgIGVjaG8gImxpbmUgcmVwbGFjZWRfMSIgPiB0bXBFeHBlY3QyICYmCisgICAgZWNobyAibGluZSAyIiA+PiB0bXBFeHBlY3QyICYmCisgICAgZWNobyAibGluZSByZXBsYWNlZF8zIiA+PiB0bXBFeHBlY3QyICYmCisgICAgZWNobyAibGluZSA0IiB8IHFfdG9fbnVsID4+IHRtcEV4cGVjdDIgJiYKKyAgICBjbXAgY3Zzd29yazIvbXVsdGlsaW5lVHh0LmMgdG1wRXhwZWN0MgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk0MDItZ2l0LWN2c3NlcnZlci1yZWZzLnNoIGIvdC90OTQwMi1naXQtY3Zzc2VydmVyLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2YzMWFjZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk0MDItZ2l0LWN2c3NlcnZlci1yZWZzLnNoCkBAIC0wLDAgKzEsNTUxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWN2c3NlcnZlciBhbmQgZ2l0IHJlZnNwZWNzCisKK3Rlc3RzIGFiaWxpdHkgZm9yIGdpdC1jdnNzZXJ2ZXIgdG8gc3dpdGNoIGJldHdlZW4gYW5kIGNvbXBhcmUKK3RhZ3MsIGJyYW5jaGVzIGFuZCBvdGhlciBnaXQgcmVmc3BlY3MnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIyMjIyMjIyMKKworY2hlY2tfc3RhcnRfdHJlZSgpIHsKKwlybSAtZiAiJFdPUktESVIvbGlzdC5leHBlY3RlZCIKKwllY2hvICJzdGFydCAkMSIgPj4iJHtXT1JLRElSfS9jaGVjay5sb2ciCit9CisKK2NoZWNrX2ZpbGUoKSB7CisJc2FuZGJveD0iJDEiCisJZmlsZT0iJDIiCisJdmVyPSIkMyIKKwlHSVRfRElSPSRTRVJWRVJESVIgZ2l0IHNob3cgIiR7dmVyfToke2ZpbGV9IiBcCisJCT4iJFdPUktESVIvY2hlY2suZ290IiAyPiIkV09SS0RJUi9jaGVjay5zdGRlcnIiCisJdGVzdF9jbXAgIiRXT1JLRElSL2NoZWNrLmdvdCIgIiRzYW5kYm94LyRmaWxlIgorCXN0YXQ9JD8KKwllY2hvICJjaGVja19maWxlICRzYW5kYm94ICRmaWxlICR2ZXIgOiAkc3RhdCIgPj4iJFdPUktESVIvY2hlY2subG9nIgorCWVjaG8gIiRmaWxlIiA+PiIkV09SS0RJUi9saXN0LmV4cGVjdGVkIgorCXJldHVybiAkc3RhdAorfQorCitjaGVja19lbmRfdHJlZSgpIHsKKwlzYW5kYm94PSIkMSIgJiYKKwlmaW5kICIkc2FuZGJveCIgLW5hbWUgQ1ZTIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludCA+IiRXT1JLRElSL2xpc3QuYWN0dWFsIiAmJgorCXNvcnQgPCIkV09SS0RJUi9saXN0LmV4cGVjdGVkIiA+ZXhwZWN0ZWQgJiYKKwlzb3J0IDwiJFdPUktESVIvbGlzdC5hY3R1YWwiIHwgc2VkIC1lICJzJWN2c3dvcmsvJSUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlybSBleHBlY3RlZCBhY3R1YWwKK30KKworY2hlY2tfZW5kX2Z1bGxfdHJlZSgpIHsKKwlzYW5kYm94PSIkMSIgJiYKKwlzb3J0IDwiJFdPUktESVIvbGlzdC5leHBlY3RlZCIgPmV4cGVjdGVkICYmCisJZmluZCAiJHNhbmRib3giIC1uYW1lIENWUyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQgfAorCXNlZCAtZSAicyUkc2FuZGJveC8lJSIgfCBzb3J0ID5hY3QxICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0MSAmJgorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yICIkMiIgfCBzb3J0ID5hY3QyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0MiAmJgorCXJtIGV4cGVjdGVkIGFjdDEgYWN0MgorfQorCisjIyMjIyMjIyMKKworY2hlY2tfZGlmZigpIHsKKwlkaWZmRmlsZT0iJDEiCisJdk9sZD0iJDIiCisJdk5ldz0iJDMiCisJcm0gLXJmIGRpZmZTYW5kYm94CisJZ2l0IGNsb25lIC1xIC1uIC4gZGlmZlNhbmRib3ggJiYKKwkoCisJCWNkIGRpZmZTYW5kYm94ICYmCisJCWdpdCBjaGVja291dCAiJHZPbGQiICYmCisJCWdpdCBhcHBseSAtcDAgLS1pbmRleCA8Ii4uLyRkaWZmRmlsZSIgJiYKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgIiR2TmV3IgorCSkgPmNoZWNrX2RpZmZfYXBwbHkub3V0IDI+JjEKK30KKworIyMjIyMjIyMjCisKK2N2cyA+L2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgJD8gLW5lIDEKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgY3ZzIG5vdCBmb3VuZCcKKwl0ZXN0X2RvbmUKK2ZpCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorcGVybCAtZSAndXNlIERCSTsgdXNlIERCRDo6U1FMaXRlJyA+L2Rldi9udWxsIDI+JjEgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBQZXJsIFNRTGl0ZSBpbnRlcmZhY2UgdW5hdmFpbGFibGUnCisJdGVzdF9kb25lCit9CisKK3Vuc2V0IEdJVF9ESVIgR0lUX0NPTkZJRworV09SS0RJUj0kUFdECitTRVJWRVJESVI9JFBXRC9naXRjdnMuZ2l0CitnaXRfY29uZmlnPSIkU0VSVkVSRElSL2NvbmZpZyIKK0NWU1JPT1Q9Ijpmb3JrOiRTRVJWRVJESVIiCitDVlNXT1JLPSIkUFdEL2N2c3dvcmsiCitDVlNfU0VSVkVSPWdpdC1jdnNzZXJ2ZXIKK2V4cG9ydCBDVlNST09UIENWU19TRVJWRVIKKworcm0gLXJmICIkQ1ZTV09SSyIgIiRTRVJWRVJESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB2MSwgYjEnICcKKwllY2hvICJTaW1wbGUgdGV4dCBmaWxlIiA+dGV4dGZpbGUuYyAmJgorCWVjaG8gInQyIiA+dDIgJiYKKwlta2RpciBhZGlyICYmCisJZWNobyAiYWRpci9hZmlsZSBsaW5lMSIgPmFkaXIvYWZpbGUgJiYKKwllY2hvICJhZGlyL2FmaWxlIGxpbmUyIiA+PmFkaXIvYWZpbGUgJiYKKwllY2hvICJhZGlyL2FmaWxlIGxpbmUzIiA+PmFkaXIvYWZpbGUgJiYKKwllY2hvICJhZGlyL2FmaWxlIGxpbmU0IiA+PmFkaXIvYWZpbGUgJiYKKwllY2hvICJhZGlyL2EyZmlsZSIgPj5hZGlyL2EyZmlsZSAmJgorCW1rZGlyIGFkaXIvYmRpciAmJgorCWVjaG8gImFkaXIvYmRpci9iZmlsZSBsaW5lIDEiID5hZGlyL2JkaXIvYmZpbGUgJiYKKwllY2hvICJhZGlyL2JkaXIvYmZpbGUgbGluZSAyIiA+PmFkaXIvYmRpci9iZmlsZSAmJgorCWVjaG8gImFkaXIvYmRpci9iMmZpbGUiID5hZGlyL2JkaXIvYjJmaWxlICYmCisJZ2l0IGFkZCB0ZXh0ZmlsZS5jIHQyIGFkaXIgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJGaXJzdCBDb21taXQgKHYxKSIgJiYKKwlnaXQgdGFnIHYxICYmCisJZ2l0IGJyYW5jaCBiMSAmJgorCWdpdCBjbG9uZSAtcSAtLWJhcmUgIiRXT1JLRElSLy5naXQiICIkU0VSVkVSRElSIiA+L2Rldi9udWxsIDI+JjEgJiYKKwlHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisJR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIgorJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIHYxJyAnCisJY3ZzIC1mIC1RIGNvIC1yIHYxIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIGIxJyAnCisJY3ZzIC1mIGNvIC1yIGIxIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gYjEgW2N2c3dvcmszXScgJworCWN2cyAtZiBjbyAtciBiMSAtZCBjdnN3b3JrMyBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yazMgJiYKKwljaGVja19maWxlIGN2c3dvcmszIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmszIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9iZGlyL2JmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrMyB2MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGN2c3dvcmszIGFuZCBzYXZlIGRpZmYnICcKKwkoCisJCWNkIGN2c3dvcmszICYmCisJCXNlZCAtZSAicy9saW5lMS9saW5lMSAtIGRhdGEvIiBhZGlyL2FmaWxlID5hZGlyL2FmaWxlTkVXICYmCisJCW12IC1mIGFkaXIvYWZpbGVORVcgYWRpci9hZmlsZSAmJgorCQllY2hvICJhZmlsZTUiID5hZGlyL2FmaWxlNSAmJgorCQlybSB0MiAmJgorCQljdnMgLWYgYWRkIGFkaXIvYWZpbGU1ICYmCisJCWN2cyAtZiBybSB0MiAmJgorCQkhIGN2cyAtZiBkaWZmIC1OIC11ID4iJFdPUktESVIvY3Zzd29yazNlZGl0LmRpZmYiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB2MS4yIG9uIGIxJyAnCisJZ2l0IGNoZWNrb3V0IGIxICYmCisJZWNobyAibmV3IHYxLjIiID50MyAmJgorCXJtIHQyICYmCisJc2VkIC1lICJzL2xpbmUzL2xpbmUzIC0gbW9yZSBkYXRhLyIgYWRpci9hZmlsZSA+YWRpci9hZmlsZU5FVyAmJgorCW12IC1mIGFkaXIvYWZpbGVORVcgYWRpci9hZmlsZSAmJgorCXJtIGFkaXIvYTJmaWxlICYmCisJZWNobyAiYTNmaWxlIiA+PmFkaXIvYTNmaWxlICYmCisJZWNobyAiYmZpbGUgbGluZSAzIiA+PmFkaXIvYmRpci9iZmlsZSAmJgorCXJtIGFkaXIvYmRpci9iMmZpbGUgJiYKKwllY2hvICJiM2ZpbGUiID5hZGlyL2JkaXIvYjNmaWxlICYmCisJbWtkaXIgY2RpciAmJgorCWVjaG8gImNkaXIvY2ZpbGUiID5jZGlyL2NmaWxlICYmCisJZ2l0IGFkZCAtQSBjZGlyIGFkaXIgdDMgdDIgJiYKKwlnaXQgY29tbWl0IC1xIC1tICd2MS4yJyAmJgorCWdpdCB0YWcgdjEuMiAmJgorCWdpdCBwdXNoIC0tdGFncyBnaXRjdnMuZ2l0IGIxOmIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyAtZiB1cCAob24gYjEgYWRpciknICcKKwkoIGNkIGN2c3dvcmsvYWRpciAmJiBjdnMgLWYgdXAgLWQgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTNmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IzZmlsZSB2MS4yICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgKG9uIGIxIC8pJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCAtZCApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQzIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTNmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGNkaXIvY2ZpbGUgdjEuMiAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKworIyBNYWtlIHN1cmUgIkNWUy9UYWciIGZpbGVzIGRpZG4ndCBnZXQgbWVzc2VkIHVwOgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIChvbiBiMSAvKSAoYWdhaW47IGNoZWNrIENWUy9UYWcgZmlsZXMpJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCAtZCApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQzIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTNmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGNkaXIvY2ZpbGUgdjEuMiAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKworIyB1cGRhdGUgdG8gYW5vdGhlciB2ZXJzaW9uOgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIC1yIHYxJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCAtciB2MSApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAnICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hMmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iMmZpbGUgdjEgJiYKKwljaGVja19lbmRfdHJlZSBjdnN3b3JrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAoYWdhaW47IGNoZWNrIENWUy9UYWcgZmlsZXMpJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCAtZCApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzaW1wbGUgYjInICcKKwlnaXQgYnJhbmNoIGIyIHYxICYmCisJZ2l0IHB1c2ggLS10YWdzIGdpdGN2cy5naXQgYjI6YjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIGIyIFtpbnRvIGN2c3dvcmsyXScgJworCWN2cyAtZiBjbyAtciBiMiAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hMmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iMmZpbGUgdjEgJiYKKwljaGVja19lbmRfdHJlZSBjdnN3b3JrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jvb3QgZGlyIGVkaXQgW2N2c3dvcmsyXScgJworCSgKKwkJY2QgY3Zzd29yazIgJiYgZWNobyAiTGluZSAyIiA+PnRleHRmaWxlLmMgJiYKKwkJISBjdnMgLWYgZGlmZiAtdSA+IiRXT1JLRElSL2N2c0VkaXQxLmRpZmYiICYmCisJCWN2cyAtZiBjb21taXQgLW0gImVkaXQgdGV4dGZpbGUuYyIgdGV4dGZpbGUuYworCSkgPmN2c0VkaXQxLmxvZyAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jvb3QgZGlyIHJtIGZpbGUgW2N2c3dvcmsyXScgJworCSgKKwkJY2QgY3Zzd29yazIgJiYKKwkJY3ZzIC1mIHJtIC1mIHQyICYmCisJCWN2cyAtZiBkaWZmIC11ID4uLi9jdnNFZGl0Mi1lbXB0eS5kaWZmICYmCisJCSEgY3ZzIC1mIGRpZmYgLU4gLXUgPiIkV09SS0RJUi9jdnNFZGl0Mi1OLmRpZmYiICYmCisJCWN2cyAtZiBjb21taXQgLW0gInJtIHQyIgorCSkgPmN2c0VkaXQyLmxvZyAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBlZGl0L2FkZC9ybSBmaWxlcyBbY3Zzd29yazJdJyAnCisJKAorCQljZCBjdnN3b3JrMiAmJgorCQlzZWQgLWUgInMvbGluZSAxL2xpbmUgMSAodjIpLyIgYWRpci9iZGlyL2JmaWxlID5hZGlyL2JkaXIvYmZpbGVORVcgJiYKKwkJbXYgLWYgYWRpci9iZGlyL2JmaWxlTkVXIGFkaXIvYmRpci9iZmlsZSAmJgorCQlybSBhZGlyL2JkaXIvYjJmaWxlICYmCisJCWNkIGFkaXIgJiYKKwkJY3ZzIC1mIHJtIGJkaXIvYjJmaWxlICYmCisJCWVjaG8gIjR0aCBmaWxlIiA+YmRpci9iNGZpbGUgJiYKKwkJY3ZzIC1mIGFkZCBiZGlyL2I0ZmlsZSAmJgorCQkhIGN2cyAtZiBkaWZmIC1OIC11ID4iJFdPUktESVIvY3ZzRWRpdDMuZGlmZiIgJiYKKwkJZ2l0IGZldGNoIGdpdGN2cy5naXQgYjI6YjIgJiYKKwkJKAorCQkgIGNkIC4uICYmCisJCSAgISBjdnMgLWYgZGlmZiAtdSAtTiAtciB2MS4yID4iJFdPUktESVIvY3ZzRWRpdDMtdjEuMi5kaWZmIiAmJgorCQkgICEgY3ZzIC1mIGRpZmYgLXUgLU4gLXIgdjEuMiAtciB2MSA+IiRXT1JLRElSL2N2c0VkaXQzLXYxLjItdjEuZGlmZiIKKwkJKSAmJgorCQljdnMgLWYgY29tbWl0IC1tICJ2YXJpb3VzIGFkZC9ybS9lZGl0IgorCSkgPmN2cy5sb2cgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSByZXN1bHQgb2YgZWRpdHMgW2N2c3dvcmsyXScgJworCWdpdCBmZXRjaCBnaXRjdnMuZ2l0IGIyOmIyICYmCisJZ2l0IHRhZyB2MiBiMiAmJgorCWdpdCBwdXNoIC0tdGFncyBnaXRjdnMuZ2l0IGIyOmIyICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazIgdGV4dGZpbGUuYyB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazIgYWRpci9hZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazIgYWRpci9hMmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYmRpci9iZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazIgYWRpci9iZGlyL2I0ZmlsZSB2MiAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yazIgdjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgYmFzaWMgZGlmZnMgc2F2ZWQgZHVyaW5nIGFib3ZlIGN2c3dvcmsyIGVkaXRzJyAnCisJdGVzdCAkKGdyZXAgSW5kZXg6IGN2c0VkaXQxLmRpZmYgfCB3YyAtbCkgPSAxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGN2c0VkaXQyLWVtcHR5LmRpZmYgJiYKKwl0ZXN0ICQoZ3JlcCBJbmRleDogY3ZzRWRpdDItTi5kaWZmIHwgd2MgLWwpID0gMSAmJgorCXRlc3QgJChncmVwIEluZGV4OiBjdnNFZGl0My5kaWZmIHwgd2MgLWwpID0gMyAmJgorCXJtIC1yZiBkaWZmU2FuZGJveCAmJgorCWdpdCBjbG9uZSAtcSAtbiAuIGRpZmZTYW5kYm94ICYmCisJKAorCQljZCBkaWZmU2FuZGJveCAmJgorCQlnaXQgY2hlY2tvdXQgdjEgJiYKKwkJZ2l0IGFwcGx5IC1wMCAtLWluZGV4IDwiJFdPUktESVIvY3ZzRWRpdDEuZGlmZiIgJiYKKwkJZ2l0IGFwcGx5IC1wMCAtLWluZGV4IDwiJFdPUktESVIvY3ZzRWRpdDItTi5kaWZmIiAmJgorCQlnaXQgYXBwbHkgLXAwIC0tZGlyZWN0b3J5PWFkaXIgLS1pbmRleCA8IiRXT1JLRElSL2N2c0VkaXQzLmRpZmYiICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHYyCisJKSA+ImNoZWNrX2RpZmZfYXBwbHkub3V0IiAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIHYxLjIgZGlmZiBzYXZlZCBkdXJpbmcgbGFzdCBjdnN3b3JrMiBlZGl0JyAnCisJdGVzdCAkKGdyZXAgSW5kZXg6IGN2c0VkaXQzLXYxLjIuZGlmZiB8IHdjIC1sKSA9IDkgJiYKKwljaGVja19kaWZmIGN2c0VkaXQzLXYxLjIuZGlmZiB2MS4yIHYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIHYxLjIgdjEgZGlmZiBzYXZlZCBkdXJpbmcgbGFzdCBjdnN3b3JrMiBlZGl0JyAnCisJdGVzdCAkKGdyZXAgSW5kZXg6IGN2c0VkaXQzLXYxLjItdjEuZGlmZiB8IHdjIC1sKSA9IDkgJiYKKwljaGVja19kaWZmIGN2c0VkaXQzLXYxLjItdjEuZGlmZiB2MS4yIHYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCBbY3Zzd29yazJdJyAnCisJKCBjZCBjdnN3b3JrMiAmJiBjdnMgLWYgdXAgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazIgdGV4dGZpbGUuYyB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazIgYWRpci9hZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazIgYWRpci9hMmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYmRpci9iZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazIgYWRpci9iZGlyL2I0ZmlsZSB2MiAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yazIgdjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIC1yIGIyIFtiYWNrIHRvIGN2c3dvcmtdJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCAtciBiMiApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjRmaWxlIHYyICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAtciBiMScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLXIgYjEgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MyB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBjZGlyL2NmaWxlIHYxLjIgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsgdjEuMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgLUEnICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1BICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hMmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iMmZpbGUgdjEgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsgdjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIChjaGVjayBDVlMvVGFnIGZpbGVzKScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yayB2MQorJworCisjIFRoaXMgaXMgbm90IHJlYWxseSBsZWdhbCBDVlMsIGJ1dCBpdCBzZWVtcyB0byB3b3JrIGFueXdheToKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAtciBoZWFkcy9iMScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLXIgaGVhZHMvYjEgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MyB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBjZGlyL2NmaWxlIHYxLjIgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsgdjEuMgorJworCisjIEJ1dCB0aGlzIHNob3VsZCB3b3JrIGV2ZW4gaWYgQ1ZTIGNsaWVudCBjaGVja3MgLXIgbW9yZSBjYXJlZnVsbHk6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgLXIgaGVhZHNfLXMtYjIgKGN2c3NlcnZlciBlc2NhcGUgbWVjaGFuaXNtKScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLXIgaGVhZHNfLXMtYjIgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2I0ZmlsZSB2MiAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yayB2MgorJworCit2MWhhc2g9JChnaXQgcmV2LXBhcnNlIHYxKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIC1yICQoZ2l0IHJldi1wYXJzZSB2MSknICcKKwl0ZXN0IC1uICIkdjFoYXNoIiAmJgorCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLXIgIiR2MWhhc2giICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hMmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iMmZpbGUgdjEgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsgdjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGRpZmYgLXIgdjEgLXUnICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIGRpZmYgLXIgdjEgLXUgPi4uL2N2c0RpZmYub3V0IDI+Li4vY3ZzLmxvZyApICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGN2c0RpZmYub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGN2cy5sb2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGRpZmYgLU4gLXIgdjIgLXUnICcKKwkoIGNkIGN2c3dvcmsgJiYgISBjdnMgLWYgZGlmZiAtTiAtciB2MiAtdSA+Li4vY3ZzRGlmZi5vdXQgMj4uLi9jdnMubG9nICkgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3ZzLmxvZyAmJgorCXRlc3QgLXMgY3ZzRGlmZi5vdXQgJiYKKwljaGVja19kaWZmIGN2c0RpZmYub3V0IHYyIHYxID5jaGVja19kaWZmLm91dCAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBkaWZmIC1OIC1yIHYyIC1yIHYxLjInICcKKwkoIGNkIGN2c3dvcmsgJiYgISBjdnMgLWYgZGlmZiAtTiAtciB2MiAtciB2MS4yIC11ID4uLi9jdnNEaWZmLm91dCAyPi4uL2N2cy5sb2cgKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnMubG9nICYmCisJdGVzdCAtcyBjdnNEaWZmLm91dCAmJgorCWNoZWNrX2RpZmYgY3ZzRGlmZi5vdXQgdjIgdjEuMiA+Y2hlY2tfZGlmZi5vdXQgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBlYXJseSBbY3Zzd29yazNdIGRpZmYgdG8gYjMnICcKKwlnaXQgY2xvbmUgLXEgLiBnaXR3b3JrMyAmJgorCSgKKwkJY2QgZ2l0d29yazMgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGIzIHYxICYmCisJCWdpdCBhcHBseSAtcDAgLS1pbmRleCA8IiRXT1JLRElSL2N2c3dvcmszZWRpdC5kaWZmIiAmJgorCQlnaXQgY29tbWl0IC1tICJjdnN3b3JrMyBlZGl0cyBhcHBsaWVkIgorCSkgJiYKKwlnaXQgZmV0Y2ggZ2l0d29yazMgYjM6YjMgJiYKKwlnaXQgdGFnIHYzIGIzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIFtjdnN3b3JrM10gZGlmZicgJworCSggY2QgY3Zzd29yazMgJiYgISBjdnMgLWYgZGlmZiAtTiAtdSA+IiRXT1JLRElSL2N2c0RpZmYub3V0IiAyPi4uL2N2cy5sb2cgKSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnMubG9nICYmCisJdGVzdCAtcyBjdnNEaWZmLm91dCAmJgorCXRlc3QgJChncmVwIEluZGV4OiBjdnNEaWZmLm91dCB8IHdjIC1sKSA9IDMgJiYKKwl0ZXN0X2NtcCBjdnNEaWZmLm91dCBjdnN3b3JrM2VkaXQuZGlmZiAmJgorCWNoZWNrX2RpZmYgY3ZzRGlmZi5vdXQgdjEgdjMgPmNoZWNrX2RpZmYub3V0IDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZWFybHkgW2N2c3dvcmszXSBiMyB3aXRoIGIxJyAnCisJKCBjZCBnaXR3b3JrMyAmJiBnaXQgbWVyZ2UgLW0gIm1lc3NhZ2UiIGIxICkgJiYKKwlnaXQgZmV0Y2ggZ2l0d29yazMgYjM6YjMgJiYKKwlnaXQgdGFnIHYzbWVyZ2VkIGIzICYmCisJZ2l0IHB1c2ggLS10YWdzIGdpdGN2cy5naXQgYjM6YjMKKycKKworIyBUaGlzIHRlc3Qgd291bGQgZmFpbCBpZiBjdnNzZXJ2ZXIgcHJvcGVybHkgY3JlYXRlZCBhICIuI2FmaWxlIiogZmlsZQorIyBmb3IgdGhlIG1lcmdlLgorIyBUT0RPOiBWYWxpZGF0ZSB0aGF0IHRoZSAuIyBmaWxlIHdhcyBzYXZlZCBwcm9wZXJseSwgYW5kIHRoZW4KKyMgICBkZWxldGUvaWdub3JlIGl0IHdoZW4gY2hlY2tpbmcgdGhlIHRyZWUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgZGlydHkgW2N2c3dvcmszXScgJworCSgKKwkJY2QgY3Zzd29yazMgJiYKKwkJY3ZzIC1mIHVwICYmCisJCSEgY3ZzIC1mIGRpZmYgLU4gLXUgPiIkV09SS0RJUi9jdnNEaWZmLm91dCIKKwkpID5jdnMubG9nIDI+JjEgJiYKKwl0ZXN0IC1zIGN2c0RpZmYub3V0ICYmCisJdGVzdCAkKGdyZXAgSW5kZXg6IGN2c0RpZmYub3V0IHwgd2MgLWwpID0gMiAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yazMgJiYKKwljaGVja19maWxlIGN2c3dvcmszIHRleHRmaWxlLmMgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIHQzIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2FmaWxlIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2EzZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hZmlsZTUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYmRpci9iZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9iZGlyL2IzZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgY2Rpci9jZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yazMgdjNtZXJnZWQKKycKKworIyBUT0RPOiB0ZXN0IGN2cyBzdGF0dXMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvbW1pdCBbY3Zzd29yazNdJyAnCisJKAorCQljZCBjdnN3b3JrMyAmJgorCQljdnMgLWYgY29tbWl0IC1tICJkaXJ0eSBzYW5kYm94IGFmdGVyIGF1dG8tbWVyZ2UiCisJKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrMyAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgdGV4dGZpbGUuYyB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgdDMgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYWZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYTNmaWxlIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2FmaWxlNSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9iZGlyL2JmaWxlIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2JkaXIvYjNmaWxlIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBjZGlyL2NmaWxlIHYzbWVyZ2VkICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrMyB2M21lcmdlZCAmJgorCWdpdCBmZXRjaCBnaXRjdnMuZ2l0IGIzOmI0ICYmCisJZ2l0IHRhZyB2NC4xIGI0ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgdjQuMSB2M21lcmdlZCA+Y2hlY2tfZGlmZl9hcHBseS5vdXQgMj4mMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk1MDAtZ2l0d2ViLXN0YW5kYWxvbmUtbm8tZXJyb3JzLnNoIGIvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2M4ZDQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk1MDAtZ2l0d2ViLXN0YW5kYWxvbmUtbm8tZXJyb3JzLnNoCkBAIC0wLDAgKzEsNzk3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpha3ViIE5hcmVic2tpCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdHdlYiBhcyBzdGFuZGFsb25lIHNjcmlwdCAoYmFzaWMgdGVzdHMpLgorCitUaGlzIHRlc3QgcnVucyBnaXR3ZWIgKGdpdCB3ZWIgaW50ZXJmYWNlKSBhcyBDR0kgc2NyaXB0IGZyb20KK2NvbW1hbmRsaW5lLCBhbmQgY2hlY2tzIHRoYXQgaXQgd291bGQgbm90IHdyaXRlIGFueSBlcnJvcnMKK29yIHdhcm5pbmdzIHRvIGxvZy4nCisKKworLiAuL2dpdHdlYi1saWIuc2gKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIG5vIGNvbW1pdHMgKGVtcHR5LCBqdXN0IGluaXRpYWxpemVkIHJlcG9zaXRvcnkpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiBwcm9qZWN0c19saXN0IChpbXBsaWNpdCknIFwKKwknZ2l0d2ViX3J1bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IHByb2plY3RzX2luZGV4JyBcCisJJ2dpdHdlYl9ydW4gImE9cHJvamVjdF9pbmRleCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiAuZ2l0IHN1bW1hcnkgKGltcGxpY2l0KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogLmdpdCBjb21taXQgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiAuZ2l0IGNvbW1pdGRpZmYgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogLmdpdCB0cmVlIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgaGVhZHMnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9aGVhZHMiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogLmdpdCB0YWdzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRhZ3MiJworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbml0aWFsIGNvbW1pdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTWFrZSBpbml0aWFsIGNvbW1pdCcgXAorCSdlY2hvICJOb3QgYW4gZW1wdHkgZmlsZS4iID4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiSW5pdGlhbCBjb21taXQuIiAmJgorCSBnaXQgYnJhbmNoIGInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwcm9qZWN0c19saXN0IChpbXBsaWNpdCknIFwKKwknZ2l0d2ViX3J1bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3Byb2plY3RzX2luZGV4JyBcCisJJ2dpdHdlYl9ydW4gImE9cHJvamVjdF9pbmRleCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IHN1bW1hcnkgKGltcGxpY2l0KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXQgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdGRpZmYgKGltcGxpY2l0IEhFQUQsIHJvb3QgY29tbWl0KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgY29tbWl0ZGlmZl9wbGFpbiAoaW1wbGljaXQgSEVBRCwgcm9vdCBjb21taXQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmZfcGxhaW4iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXQgKEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdDtoPUhFQUQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCB0cmVlIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgYmxvYiAoZmlsZSknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYjtmPWZpbGUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBibG9iX3BsYWluIChmaWxlKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1ibG9iX3BsYWluO2Y9ZmlsZSInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBub25leGlzdGVudCBvYmplY3RzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdCAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQ7aD1ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXRkaWZmIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXRkaWZmIChub24tZXhpc3RlbnQgdnMgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1ub24tZXhpc3RlbnQ7aD1IRUFEIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgdHJlZSAoMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZTtoPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCB0YWcgKDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRhZztoPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBibG9iIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWJsb2I7Zj1ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBibG9iX3BsYWluIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWJsb2JfcGxhaW47Zj1ub24tZXhpc3RlbnQiJworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb21taXRkaWZmIHRlc3RpbmcgKGltcGxpY2l0LCBvbmUgaW1wbGljaXQgdHJlZS1pc2gpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiByb290JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogZmlsZSBhZGRlZCcgXAorCSdlY2hvICJOZXcgZmlsZSIgPiBuZXdfZmlsZSAmJgorCSBnaXQgYWRkIG5ld19maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgYWRkZWQuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IG1vZGUgY2hhbmdlJyBcCisJJ3Rlc3RfY2htb2QgK3ggbmV3X2ZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiTW9kZSBjaGFuZ2VkLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBmaWxlIHJlbmFtZWQnIFwKKwknZ2l0IG12IG5ld19maWxlIHJlbmFtZWRfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHJlbmFtZWQuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgdG8gc3ltbGluaycgXAorCSdybSByZW5hbWVkX2ZpbGUgJiYKKwkgdGVzdF9sbl9zX2FkZCBmaWxlIHJlbmFtZWRfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHRvIHN5bWxpbmsuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgZGVsZXRlZCcgXAorCSdnaXQgcm0gcmVuYW1lZF9maWxlICYmCisJIHJtIC1mIHJlbmFtZWRfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHJlbW92ZWQuIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgY29waWVkIC8gbmV3IGZpbGUnIFwKKwknY3AgZmlsZSBmaWxlMiAmJgorCSBnaXQgYWRkIGZpbGUyICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgY29waWVkLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBtb2RlIGNoYW5nZSBhbmQgbW9kaWZpZWQnIFwKKwknZWNobyAiTmV3IGxpbmUiID4+IGZpbGUyICYmCisJIHRlc3RfY2htb2QgK3ggZmlsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiTW9kZSBjaGFuZ2UgYW5kIG1vZGlmaWNhdGlvbi4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogcmVuYW1lZCBhbmQgbW9kaWZpZWQnIFwKKwknY2F0ID5maWxlMjw8RU9GICYmCitEb21pbnVzIHJlZ2l0IG1lLAorZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK0VPRgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIGFkZGVkLiIgJiYKKwkgZ2l0IG12IGZpbGUyIGZpbGUzICYmCisJIGVjaG8gIlByb3B0ZXIgbm9tZW4gc3V1bS4iID4+IGZpbGUzICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkZpbGUgcmVuYW1lIGFuZCBtb2RpZmljYXRpb24uIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IHJlbmFtZWQsIG1vZGUgY2hhbmdlIGFuZCBtb2RpZmllZCcgXAorCSdnaXQgbXYgZmlsZTMgZmlsZTIgJiYKKwkgZWNobyAiUHJvcHRlciBub21lbiBzdXVtLiIgPj4gZmlsZTIgJiYKKwkgdGVzdF9jaG1vZCAreCBmaWxlMiAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHJlbmFtZSwgbW9kZSBjaGFuZ2UgYW5kIG1vZGlmaWNhdGlvbi4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29tbWl0ZGlmZiB0ZXN0aW5nICh0YWtlbiBmcm9tIHQ0MTE0LWFwcGx5LXR5cGVjaGFuZ2Uuc2gpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHR5cGVjaGFuZ2UgY29tbWl0cycgJworCWVjaG8gImhlbGxvIHdvcmxkIiA+IGZvbyAmJgorCWVjaG8gImhpIHBsYW5ldCIgPiBiYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIGluaXRpYWwgJiYKKwlybSAtZiBmb28gJiYKKwl0ZXN0X2xuX3NfYWRkIGJhciBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJmb28gc3ltbGlua2VkIHRvIGJhciIgJiYKKwlnaXQgYnJhbmNoIGZvby1zeW1saW5rZWQtdG8tYmFyICYmCisJcm0gLWYgZm9vICYmCisJZWNobyAiaG93IGZhciBpcyB0aGUgc3VuPyIgPiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZvbyAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiYWNrIHRvIGZpbGUiICYmCisJZ2l0IGJyYW5jaCBmb28tYmFjay10by1maWxlICYmCisJcm0gLWYgZm9vICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBmb28gJiYKKwlta2RpciBmb28gJiYKKwllY2hvICJpZiBvbmx5IEkga25ldyIgPiBmb28vYmF6ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28vYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIGJlY29tZXMgYSBkaXJlY3RvcnkiICYmCisJZ2l0IGJyYW5jaCAiZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkiICYmCisJZWNobyAiaGVsbG8gd29ybGQiID4gZm9vL2JheiAmJgorCWdpdCB1cGRhdGUtaW5kZXggZm9vL2JheiAmJgorCWdpdCBjb21taXQgLW0gImZvby9iYXogaXMgdGhlIG9yaWdpbmFsIGZvbyIgJiYKKwlnaXQgYnJhbmNoIGZvby1iYXotcmVuYW1lZC1mcm9tLWZvbworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGZpbGUgcmVuYW1lZCBmcm9tIGZvbyB0byBmb28vYmF6JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1iYXotcmVuYW1lZC1mcm9tLWZvbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBmaWxlIHJlbmFtZWQgZnJvbSBmb28vYmF6IHRvIGZvbycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWZvby1iYXotcmVuYW1lZC1mcm9tLWZvbztoPWluaXRpYWwiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigyKTogZGlyZWN0b3J5IGJlY29tZXMgZmlsZScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5O2g9aW5pdGlhbCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBmaWxlIGJlY29tZXMgZGlyZWN0b3J5JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGZpbGUgYmVjb21lcyBzeW1saW5rJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9aW5pdGlhbDtoPWZvby1zeW1saW5rZWQtdG8tYmFyIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IHN5bWxpbmsgYmVjb21lcyBmaWxlJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9Zm9vLXN5bWxpbmtlZC10by1iYXI7aD1mb28tYmFjay10by1maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IHN5bWxpbmsgYmVjb21lcyBkaXJlY3RvcnknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1mb28tc3ltbGlua2VkLXRvLWJhcjtoPWZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGRpcmVjdG9yeSBiZWNvbWVzIHN5bWxpbmsnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1mb28tYmVjb21lcy1hLWRpcmVjdG9yeTtoPWZvby1zeW1saW5rZWQtdG8tYmFyIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbW1pdGRpZmYgdGVzdGluZyAoaW5jb21wbGV0ZSBsaW5lcykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaW5jb21wbGV0ZSBsaW5lcycgJworCWNhdCA+ZmlsZTw8LVxFT0YgJiYKKwlEb21pbnVzIHJlZ2l0IG1lLAorCWV0IG5paGlsIG1paGkgZGVlcml0LgorCUluIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKKwlzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKKwlhbmltYW0gbWVhbSBjb252ZXJ0aXQsCisJZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorCXByb3B0ZXIgbm9tZW4gc3V1bS4KKwlDSEFOR0VfTUUKKwlFT0YKKwlnaXQgY29tbWl0IC1hIC1tICJQcmVwYXJpbmcgZm9yIGluY29tcGxldGUgbGluZXMiICYmCisJZWNobyAiaW5jb21wbGV0ZSIgfCB0ciAtZCAiXFwwMTIiID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIkFkZCBpbmNvbXBsZXRlIGxpbmUiICYmCisJZ2l0IHRhZyBpbmNvbXBsZXRlX2xpbmVzX2FkZCAmJgorCXNlZCAtZSBzL0NIQU5HRV9NRS9jaGFuZ2VfbWUvIDxmaWxlID5maWxlKyAmJgorCW12IC1mIGZpbGUrIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJJbmNvbXBsZXRlIGNvbnRleHQgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfY3R4ICYmCisJZWNobyAiRG9taW51cyByZWdpdCBtZSwiID5maWxlICYmCisJZWNobyAiaW5jb21wbGV0ZSBsaW5lIiB8IHRyIC1kICJcXDAxMiIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIGluY29tcGxldGUgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfY2hnICYmCisJZWNobyAiRG9taW51cyByZWdpdCBtZSwiID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiUmVtb3ZlIGluY29tcGxldGUgbGluZSIgJiYKKwlnaXQgdGFnIGluY29tcGxldGVfbGluZXNfcmVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdGRpZmYoMSk6IGFkZGl0aW9uIG9mIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2FkZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogaW5jb21wbGV0ZSBsaW5lIGFzIGNvbnRleHQgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2N0eCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogY2hhbmdlIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2NoZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0ZGlmZigxKTogcmVtb3ZhbCBvZiBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19yZW0iCisnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb21taXQsIGNvbW1pdGRpZmY6IG1lcmdlLCBsYXJnZQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0NyZWF0ZSBhIG1lcmdlJyBcCisJJ2dpdCBjaGVja291dCBiICYmCisJIGVjaG8gIkJyYW5jaCIgPj4gYiAmJgorCSBnaXQgYWRkIGIgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiT24gYnJhbmNoIiAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBtZXJnZSBiICYmCisJIGdpdCB0YWcgbWVyZ2VfY29tbWl0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0KDApOiBtZXJnZSBjb21taXQnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IG1lcmdlIGNvbW1pdCcgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1ByZXBhcmUgbGFyZ2UgY29tbWl0JyBcCisJJ2dpdCBjaGVja291dCBiICYmCisJIGVjaG8gIlRvIGJlIGNoYW5nZWQiID4gMDEtY2hhbmdlICYmCisJIGVjaG8gIlRvIGJlIHJlbmFtZWQiID4gMDItcHVyZS1yZW5hbWUtZnJvbSAmJgorCSBlY2hvICJUbyBiZSBkZWxldGVkIiA+IDAzLWRlbGV0ZSAmJgorCSBlY2hvICJUbyBiZSByZW5hbWVkIGFuZCBjaGFuZ2VkIiA+IDA0LXJlbmFtZS1mcm9tICYmCisJIGVjaG8gIlRvIGhhdmUgbW9kZSBjaGFuZ2VkIiA+IDA1LW1vZGUtY2hhbmdlICYmCisJIGVjaG8gIkZpbGUgdG8gc3ltbGluayIgPiAwNi1maWxlLW9yLXN5bWxpbmsgJiYKKwkgZWNobyAiVG8gYmUgY2hhbmdlZCBhbmQgaGF2ZSBtb2RlIGNoYW5nZWQiID4gMDctY2hhbmdlLW1vZGUtY2hhbmdlCSYmCisJIGdpdCBhZGQgMCogJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiUHJlcGFyZSBsYXJnZSBjb21taXQiICYmCisJIGVjaG8gIkNoYW5nZWQiID4gMDEtY2hhbmdlICYmCisJIGdpdCBtdiAwMi1wdXJlLXJlbmFtZS1mcm9tIDAyLXB1cmUtcmVuYW1lLXRvICYmCisJIGdpdCBybSAwMy1kZWxldGUgJiYgcm0gLWYgMDMtZGVsZXRlICYmCisJIGVjaG8gIkEgbmV3IGZpbGUiID4gMDMtbmV3ICYmCisJIGdpdCBhZGQgMDMtbmV3ICYmCisJIGdpdCBtdiAwNC1yZW5hbWUtZnJvbSAwNC1yZW5hbWUtdG8gJiYKKwkgZWNobyAiQ2hhbmdlZCIgPj4gMDQtcmVuYW1lLXRvICYmCisJIHRlc3RfY2htb2QgK3ggMDUtbW9kZS1jaGFuZ2UgJiYKKwkgcm0gLWYgMDYtZmlsZS1vci1zeW1saW5rICYmCisJIHRlc3RfbG5fc19hZGQgMDEtY2hhbmdlIDA2LWZpbGUtb3Itc3ltbGluayAmJgorCSBlY2hvICJDaGFuZ2VkIGFuZCBoYXZlIG1vZGUgY2hhbmdlZCIgPiAwNy1jaGFuZ2UtbW9kZS1jaGFuZ2UJJiYKKwkgdGVzdF9jaG1vZCAreCAwNy1jaGFuZ2UtbW9kZS1jaGFuZ2UgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiTGFyZ2UgY29tbWl0IiAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0KDEpOiBsYXJnZSBjb21taXQnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0O2g9YiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDEpOiBsYXJnZSBjb21taXQnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPWIiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2lkZS1ieS1zaWRlIGRpZmYKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZS1ieS1zaWRlOiBhZGRpdGlvbiBvZiBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19hZGQ7ZHM9c2lkZWJ5c2lkZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZS1ieS1zaWRlOiBpbmNvbXBsZXRlIGxpbmUgYXMgY29udGV4dCBsaW5lJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPWluY29tcGxldGVfbGluZXNfY3R4O2RzPXNpZGVieXNpZGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGUtYnktc2lkZTogY2hhbmdlZCBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19jaGc7ZHM9c2lkZWJ5c2lkZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZS1ieS1zaWRlOiByZW1vdmFsIG9mIGluY29tcGxldGUgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX3JlbTtkcz1zaWRlYnlzaWRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlLWJ5LXNpZGU6IG1lcmdlIGNvbW1pdCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1tZXJnZV9jb21taXQ7ZHM9c2lkZWJ5c2lkZSIKKycKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRhZ3MgdGVzdGluZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndGFnczogbGlzdCBvZiBkaWZmZXJlbnQgdHlwZXMgb2YgdGFncycgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCB0YWcgLWEgLW0gIlRhZyBjb21taXQgb2JqZWN0IiB0YWctY29tbWl0IEhFQUQgJiYKKwkgZ2l0IHRhZyAtYSAtbSAiIiB0YWctY29tbWl0LW5vbWVzc2FnZSBIRUFEICYmCisJIGdpdCB0YWcgLWEgLW0gIlRhZyB0YWcgb2JqZWN0IiB0YWctdGFnIHRhZy1jb21taXQgJiYKKwkgZ2l0IHRhZyAtYSAtbSAiVGFnIHRyZWUgb2JqZWN0IiB0YWctdHJlZSBIRUFEXnt0cmVlfSAmJgorCSBnaXQgdGFnIC1hIC1tICJUYWcgYmxvYiBvYmplY3QiIHRhZy1ibG9iIEhFQUQ6ZmlsZSAmJgorCSBnaXQgdGFnIGxpZ2h0d2VpZ2h0L3RhZy1jb21taXQgSEVBRCAmJgorCSBnaXQgdGFnIGxpZ2h0d2VpZ2h0L3RhZy10YWcgdGFnLWNvbW1pdCAmJgorCSBnaXQgdGFnIGxpZ2h0d2VpZ2h0L3RhZy10cmVlIEhFQURee3RyZWV9ICYmCisJIGdpdCB0YWcgbGlnaHR3ZWlnaHQvdGFnLWJsb2IgSEVBRDpmaWxlICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPXRhZ3MiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndGFnOiBUYWcgdG8gY29tbWl0IG9iamVjdCcgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10YWc7aD10YWctY29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RhZzogb24gbGlnaHR3ZWlnaHQgdGFnIChpbnZhbGlkKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10YWc7aD1saWdodHdlaWdodC90YWctY29tbWl0IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvZ3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xvZ3M6IGxvZyAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xvZ3M6IHNob3J0bG9nIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zaG9ydGxvZyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsb2dzOiBoaXN0b3J5IChpbXBsaWNpdCBIRUFELCBmaWxlKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1oaXN0b3J5O2Y9ZmlsZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsb2dzOiBoaXN0b3J5IChpbXBsaWNpdCBIRUFELCBub24tZXhpc3RlbnQgZmlsZSknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9aGlzdG9yeTtmPW5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsb2dzOiBoaXN0b3J5IChpbXBsaWNpdCBIRUFELCBkZWxldGVkIGZpbGUpJyBcCisJJ2dpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgZWNobyAidG8gYmUgZGVsZXRlZCIgPiBkZWxldGVkX2ZpbGUgJiYKKwkgZ2l0IGFkZCBkZWxldGVkX2ZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiQWRkIGZpbGUgdG8gYmUgZGVsZXRlZCIgJiYKKwkgZ2l0IHJtIGRlbGV0ZWRfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1tICJEZWxldGUgZmlsZSIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9aGlzdG9yeTtmPWRlbGV0ZWRfZmlsZSInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBwYXRoX2luZm8gbGlua3MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QnIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaCcgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9iIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6ZmlsZScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9tYXN0ZXI6ZmlsZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoOmRpci8nIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvbWFzdGVyOmZvby8iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaCAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaDpmaWxlbmFtZSAobm9uLWV4aXN0ZW50IGJyYW5jaCknIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvbm9uLWV4aXN0ZW50Om5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoOmZpbGUgKG5vbi1leGlzdGVudCknIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvbWFzdGVyOm5vbi1leGlzdGVudCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoOmRpci8gKG5vbi1leGlzdGVudCknIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvbWFzdGVyOm5vbi1leGlzdGVudC8iJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoOi9maWxlJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L21hc3RlcjovZmlsZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvOi9maWxlIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC86L2ZpbGUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0LzovIChpbXBsaWNpdCBIRUFELCB0b3AgdHJlZSknIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvOi8iJworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmZWVkIGdlbmVyYXRpb24KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2ZlZWRzOiBPUE1MJyBcCisJJ2dpdHdlYl9ydW4gImE9b3BtbCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdmZWVkOiBSU1MnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9cnNzIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2ZlZWQ6IEF0b20nIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9YXRvbSInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBlbmNvZGluZy9kZWNvZGluZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZW5jb2RlKGNvbW1pdCk6IHV0ZjgnIFwKKwknLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS91dGY4LnR4dCAmJgorCSB0ZXN0X3doZW5fZmluaXNoZWQgIkdJVF9BVVRIT1JfTkFNRT1cIkEgVSBUaG9yXCIiICYmCisJIHRlc3Rfd2hlbl9maW5pc2hlZCAiR0lUX0NPTU1JVFRFUl9OQU1FPVwiQyBPIE1pdHRlclwiIiAmJgorCSBlY2hvICJVVEYtOCIgPj4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8xLVVURi04LnR4dCAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZW5jb2RlKGNvbW1pdCk6IGlzby04ODU5LTEnIFwKKwknLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS84ODU5LTEudHh0ICYmCisJIHRlc3Rfd2hlbl9maW5pc2hlZCAiR0lUX0FVVEhPUl9OQU1FPVwiQSBVIFRob3JcIiIgJiYKKwkgdGVzdF93aGVuX2ZpbmlzaGVkICJHSVRfQ09NTUlUVEVSX05BTUU9XCJDIE8gTWl0dGVyXCIiICYmCisJIGVjaG8gIklTTy04ODU5LTEiID4+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIHRlc3RfY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCSBnaXQgY29tbWl0IC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwL0lTTzg4NTktMS50eHQgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2VuY29kZShsb2cpOiB1dGYtOCBhbmQgaXNvLTg4NTktMScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1sb2ciJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZXh0cmEgb3B0aW9ucworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3B0OiBsb2cgLS1uby1tZXJnZXMnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nO29wdD0tLW5vLW1lcmdlcyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdvcHQ6IGF0b20gLS1uby1tZXJnZXMnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nO29wdD0tLW5vLW1lcmdlcyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdvcHQ6ICJmaWxlIiBoaXN0b3J5IC0tbm8tbWVyZ2VzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWhpc3Rvcnk7Zj1maWxlO29wdD0tLW5vLW1lcmdlcyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdvcHQ6IGxvZyAtLW5vLXN1Y2gtb3B0aW9uIChpbnZhbGlkIG9wdGlvbiknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nO29wdD0tLW5vLXN1Y2gtb3B0aW9uIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ29wdDogdHJlZSAtLW5vLW1lcmdlcyAoaW52YWxpZCBvcHRpb24gZm9yIGFjdGlvbiknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZTtvcHQ9LS1uby1tZXJnZXMiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdGVzdGluZyBjb25maWdfdG9fbXVsdGkgLyBjbG9uZXVybAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgICAnVVJMOiBubyBwcm9qZWN0IFVSTHMsIG5vIGJhc2UgVVJMJyBcCisgICAgICAgJ2dpdHdlYl9ydW4gInA9LmdpdDthPXN1bW1hcnkiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgICAnVVJMOiBwcm9qZWN0IFVSTHMgdmlhIGdpdHdlYi51cmwnIFwKKyAgICAgICAnZ2l0IGNvbmZpZyAtLWFkZCBnaXR3ZWIudXJsIGdpdDovL2V4YW1wbGUuY29tL2dpdC90cmFzaC5naXQgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBnaXR3ZWIudXJsIGh0dHA6Ly9leGFtcGxlLmNvbS9naXQvdHJhc2guZ2l0ICYmCisgICAgICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXN1bW1hcnkiJworCitjYXQgPi5naXQvY2xvbmV1cmwgPDxcRU9GCitnaXQ6Ly9leGFtcGxlLmNvbS9naXQvdHJhc2guZ2l0CitodHRwOi8vZXhhbXBsZS5jb20vZ2l0L3RyYXNoLmdpdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAgICdVUkw6IHByb2plY3QgVVJMcyB2aWEgY2xvbmV1cmwgZmlsZScgXAorICAgICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGdpdHdlYiBjb25maWcgYW5kIHJlcG8gY29uZmlnCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKworIyB0dXJuIG9uIG92ZXJyaWRlIGZvciBlYWNoIG92ZXJyaWRhYmxlIGZlYXR1cmUKK2ZvcmVhY2ggbXkgJGtleSAoa2V5cyAlZmVhdHVyZSkgeworCWlmICgkZmVhdHVyZXska2V5fXsnc3ViJ30pIHsKKwkJJGZlYXR1cmV7JGtleX17J292ZXJyaWRlJ30gPSAxOworCX0KK30KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29uZmlnIG92ZXJyaWRlOiBwcm9qZWN0cyBsaXN0IChpbXBsaWNpdCknIFwKKwknZ2l0d2ViX3J1bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBub3Qgb3ZlcnJpZGRlbiBpbiByZXBvIGNvbmZpZycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBkaXNhYmxlZCBpbiByZXBvIGNvbmZpZycgXAorCSdnaXQgY29uZmlnIGdpdHdlYi5ibGFtZSBubyAmJgorCSBnaXQgY29uZmlnIGdpdHdlYi5zbmFwc2hvdCBub25lICYmCisJIGdpdCBjb25maWcgZ2l0d2ViLmF2YXRhciBncmF2YXRhciAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogdHJlZSB2aWV3LCBmZWF0dXJlcyBlbmFibGVkIGluIHJlcG8gY29uZmlnICgxKScgXAorCSdnaXQgY29uZmlnIGdpdHdlYi5ibGFtZSB5ZXMgJiYKKwkgZ2l0IGNvbmZpZyBnaXR3ZWIuc25hcHNob3QgInppcCx0Z3osIHRiejIiICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPXRyZWUiJworCitjYXQgPi5naXQvY29uZmlnIDw8XEVPRgorIyB0ZXN0aW5nIG5vdmFsIGFuZCBhbHRlcm5hdGUgc2VwYXJhdG9yCitbZ2l0d2ViXQorCWJsYW1lCisJc25hcHNob3QgPSB6aXAgdGd6CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZW5hYmxlZCBpbiByZXBvIGNvbmZpZyAoMiknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzZWFyY2hpbmcKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorCisjIGVuYWJsZSBzZWFyY2gKKyRmZWF0dXJleydzZWFyY2gnfXsnZGVmYXVsdCd9ID0gWzFdOworJGZlYXR1cmV7J2dyZXAnfXsnZGVmYXVsdCd9ID0gWzFdOworJGZlYXR1cmV7J3BpY2theGUnfXsnZGVmYXVsdCd9ID0gWzFdOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdzZWFyY2g6IHByZXBhcmF0aW9uJyBcCisJJ2VjaG8gIjFzdCBNQVRDSCIgPj5maWxlICYmCisJIGVjaG8gIjJuZCBNQVRDSCIgPj5maWxlICYmCisJIGVjaG8gIk1BVENIIiA+PmJhciAmJgorCSBnaXQgYWRkIGZpbGUgYmFyICYmCisJIGdpdCBjb21taXQgLW0gIkFkZGVkIE1BVENIIHdvcmQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBjb21taXQgYXV0aG9yJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNlYXJjaDtoPUhFQUQ7c3Q9YXV0aG9yO3M9QStVK1Rob3IiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBjb21taXQgbWVzc2FnZScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zZWFyY2g7aD1IRUFEO3N0PWNvbW1pdHI7cz1NQVRDSCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdzZWFyY2g6IGdyZXAnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9c2VhcmNoO2g9SEVBRDtzdD1ncmVwO3M9TUFUQ0giJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBwaWNrYXhlJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNlYXJjaDtoPUhFQUQ7c3Q9cGlja2F4ZTtzPU1BVENIIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3NlYXJjaDogcHJvamVjdHMnIFwKKwknZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2xpc3Q7cz0uZ2l0IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIG5vbi1BU0NJSSBpbiBSRUFETUUuaHRtbAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUkVBRE1FLmh0bWwgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyAodXRmLTgpJyBcCisJJ2VjaG8gIjxiPlVURi04IGV4YW1wbGU6PC9iPjxiciAvPiIgPiAuZ2l0L1JFQURNRS5odG1sICYmCisJIGNhdCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8xLVVURi04LnR4dCA+PiAuZ2l0L1JFQURNRS5odG1sICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPXN1bW1hcnkiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc3ludGF4IGhpZ2hsaWdodGluZworCisKK2hpZ2hsaWdodF92ZXJzaW9uPSQoaGlnaGxpZ2h0IC0tdmVyc2lvbiA8L2Rldi9udWxsIDI+L2Rldi9udWxsKQoraWYgWyAkPyAtZXEgMTI3IF07IHRoZW4KKwlzYXkgIlNraXBwaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgdGVzdHM6ICdoaWdobGlnaHQnIG5vdCBmb3VuZCIKK2VsaWYgdGVzdCAteiAiJGhpZ2hsaWdodF92ZXJzaW9uIjsgdGhlbgorCXNheSAiU2tpcHBpbmcgc3ludGF4IGhpZ2hsaWdodGluZyB0ZXN0czogaW5jb3JyZWN0ICdoaWdobGlnaHQnIGZvdW5kIgorZWxzZQorCXRlc3Rfc2V0X3ByZXJlcSBISUdITElHSFQKKwljYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDwtXEVPRgorCW91ciAkaGlnaGxpZ2h0X2JpbiA9ICJoaWdobGlnaHQiOworCSRmZWF0dXJleydoaWdobGlnaHQnfXsnb3ZlcnJpZGUnfSA9IDE7CisJRU9GCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhJR0hMSUdIVCBcCisJJ3N5bnRheCBoaWdobGlnaHRpbmcgKG5vIGhpZ2hsaWdodCwgdW5rbm93biBzeW50YXgpJyBcCisJJ2dpdCBjb25maWcgZ2l0d2ViLmhpZ2hsaWdodCB5ZXMgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYjtmPWZpbGUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhJR0hMSUdIVCBcCisJJ3N5bnRheCBoaWdobGlnaHRpbmcgKGhpZ2hsaWdodGVkLCBzaGVsbCBzY3JpcHQpJyBcCisJJ2dpdCBjb25maWcgZ2l0d2ViLmhpZ2hsaWdodCB5ZXMgJiYKKwkgZWNobyAiIyEvdXNyL2Jpbi9zaCIgPiB0ZXN0LnNoICYmCisJIGdpdCBhZGQgdGVzdC5zaCAmJgorCSBnaXQgY29tbWl0IC1tICJBZGQgdGVzdC5zaCIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYjtmPXRlc3Quc2giJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhJR0hMSUdIVCBcCisJJ3N5bnRheCBoaWdobGlnaHRpbmcgKGhpZ2hsaWdodGVyIGxhbmd1YWdlIGF1dG9kZXRlY3Rpb24pJyBcCisJJ2dpdCBjb25maWcgZ2l0d2ViLmhpZ2hsaWdodCB5ZXMgJiYKKwkgZWNobyAiIyEvdXNyL2Jpbi9wZXJsIiA+IHRlc3QgJiYKKwkgZ2l0IGFkZCB0ZXN0ICYmCisJIGdpdCBjb21taXQgLW0gIkFkZCB0ZXN0IiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1ibG9iO2Y9dGVzdCInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmb3JrcyBvZiBwcm9qZWN0cworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GICYmCiskZmVhdHVyZXsnZm9ya3MnfXsnZGVmYXVsdCd9ID0gWzFdOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdmb3JrczogcHJlcGFyZScgXAorCSdnaXQgaW5pdCAtLWJhcmUgZm9vLmdpdCAmJgorCSBnaXQgLS1naXQtZGlyPWZvby5naXQgLS13b3JrLXRyZWU9LiBhZGQgZmlsZSAmJgorCSBnaXQgLS1naXQtZGlyPWZvby5naXQgLS13b3JrLXRyZWU9LiBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCSBlY2hvICJmb28iID4gZm9vLmdpdC9kZXNjcmlwdGlvbiAmJgorCSBta2RpciAtcCBmb28gJiYKKwkgKGNkIGZvbyAmJgorCSAgZ2l0IGNsb25lIC0tc2hhcmVkIC0tYmFyZSAuLi9mb28uZ2l0IGZvby1mb3JrZWQuZ2l0ICYmCisJICBlY2hvICJmb3JrIG9mIGZvbyIgPiBmb28tZm9ya2VkLmdpdC9kZXNjcmlwdGlvbiknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdmb3JrczogcHJvamVjdHMgbGlzdCcgXAorCSdnaXR3ZWJfcnVuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZm9ya3M6IGZvcmtzIGFjdGlvbicgXAorCSdnaXR3ZWJfcnVuICJwPWZvby5naXQ7YT1mb3JrcyInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb250ZW50IHRhZ3MgKHRhZyBjbG91ZCkKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8LVxFT0YgJiYKKyMgd2UgZG9uJ3QgdGVzdCBfc2V0dGluZ18gY29udGVudCB0YWdzLCBzbyBhbnkgdHJ1ZSB2YWx1ZSBpcyBnb29kCiskZmVhdHVyZXsnY3RhZ3MnfXsnZGVmYXVsdCd9ID0gWydjdGFnc19zY3JpcHQuY2dpJ107CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2N0YWdzOiB0YWcgY2xvdWQgaW4gcHJvamVjdHMgbGlzdCcgXAorCSdta2RpciAuZ2l0L2N0YWdzICYmCisJIGVjaG8gIjIiID4gLmdpdC9jdGFncy9mb28gJiYKKwkgZWNobyAiMSIgPiAuZ2l0L2N0YWdzL2JhciAmJgorCWdpdHdlYl9ydW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjdGFnczogc2VhcmNoIHByb2plY3RzIGJ5IGV4aXN0aW5nIHRhZycgXAorCSdnaXR3ZWJfcnVuICJieV90YWc9Zm9vIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2N0YWdzOiBzZWFyY2ggcHJvamVjdHMgYnkgbm9uIGV4aXN0ZW50IHRhZycgXAorCSdnaXR3ZWJfcnVuICJieV90YWc9bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2N0YWdzOiBtYWxmb3JtZWQgdGFnIHdlaWdodHMnIFwKKwknbWtkaXIgLXAgLmdpdC9jdGFncyAmJgorCSBlY2hvICJub3QtYS1udW1iZXIiID4gLmdpdC9jdGFncy9uYW4gJiYKKwkgZWNobyAibm90LWEtbnVtYmVyLTIiID4gLmdpdC9jdGFncy9uYW4yICYmCisJIGVjaG8gIjAuMSIgPi5naXQvY3RhZ3MvZmxvYXRpbmctcG9pbnQgJiYKKwkgZ2l0d2ViX3J1bicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNhdGVnb3JpZXMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NhdGVnb3JpZXM6IHByb2plY3RzIGxpc3QsIG9ubHkgZGVmYXVsdCBjYXRlZ29yeScgXAorCSdlY2hvICJcJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllcyA9IDE7IiA+PmdpdHdlYl9jb25maWcucGVybCAmJgorCSBnaXR3ZWJfcnVuJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdW5ib3JuIGJyYW5jaGVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd1bmJvcm4gSEVBRDogInN1bW1hcnkiIHBhZ2UgKHdpdGggImhlYWRzIiBzdWJ2aWV3KScgXAorCSd7CisJCWdpdCBjaGVja291dCBvcnBoYW5fYnJhbmNoIHx8CisJCWdpdCBjaGVja291dCAtLW9ycGhhbiBvcnBoYW5fYnJhbmNoCisJIH0gJiYKKwkgdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NTAxLWdpdHdlYi1zdGFuZGFsb25lLWh0dHAtc3RhdHVzLnNoIGIvdC90OTUwMS1naXR3ZWItc3RhbmRhbG9uZS1odHRwLXN0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTBmZmVkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTUwMS1naXR3ZWItc3RhbmRhbG9uZS1odHRwLXN0YXR1cy5zaApAQCAtMCwwICsxLDIxNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBNYXJrIFJhZGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0d2ViIGFzIHN0YW5kYWxvbmUgc2NyaXB0IChodHRwIHN0YXR1cyB0ZXN0cykuCisKK1RoaXMgdGVzdCBydW5zIGdpdHdlYiAoZ2l0IHdlYiBpbnRlcmZhY2UpIGFzIGEgQ0dJIHNjcmlwdCBmcm9tIHRoZQorY29tbWFuZGxpbmUsIGFuZCBjaGVja3MgdGhhdCBpdCByZXR1cm5zIHRoZSBleHBlY3RlZCBIVFRQIHN0YXR1cworY29kZSBhbmQgbWVzc2FnZS4nCisKKworLiAuL2dpdHdlYi1saWIuc2gKKworIworIyBHaXR3ZWIgb25seSBwcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eSB0ZXN0ZWQgYnkgdGhlICdtb2RpZmljYXRpb24gdGltZXMnCisjIHRlc3RzIGlmIGl0IGNhbiBhY2Nlc3MgYSBkYXRlIHBhcnNlciBmcm9tIG9uZSBvZiB0aGVzZSBtb2R1bGVzOgorIworcGVybCAtTUhUVFA6OkRhdGUgLWUgMCA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdF9zZXRfcHJlcmVxIERBVEVfUEFSU0VSCitwZXJsIC1NVGltZTo6UGFyc2VEYXRlIC1lIDAgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3Rfc2V0X3ByZXJlcSBEQVRFX1BBUlNFUgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc25hcHNob3Qgc2V0dGluZ3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICIKKwl0ZXN0X2NvbW1pdCAnU25hcHNob3RUZXN0cycgJ2kgY2FuIGhhcyBzbmFwc2hvdCcKKyIKKworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiskZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogdGd6IG9ubHkgZGVmYXVsdCBmb3JtYXQgZW5hYmxlZCcgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGd6IiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRiejIiICYmCisgICAgZ3JlcCAiNDAzIC0gVW5zdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0IiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXR4eiIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9emlwIiAmJgorICAgIGdyZXAgIjQwMyAtIFVuc3VwcG9ydGVkIHNuYXBzaG90IGZvcm1hdCIgZ2l0d2ViLm91dHB1dCcKKworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiskZmVhdHVyZXsnc25hcHNob3QnfXsnZGVmYXVsdCd9ID0gWyd0Z3onLCd0YnoyJywndHh6JywnemlwJ107CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogYWxsIGVuYWJsZWQgaW4gZGVmYXVsdCwgdXNlIGRlZmF1bHQgZGlzYWJsZWQgdmFsdWUnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRneiIgJiYKKyAgICBncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLm91dHB1dCAmJgorICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj10YnoyIiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXR4eiIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9emlwIiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0JworCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd6aXAnfXsnZGlzYWJsZWQnfSA9IDE7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogemlwIGV4cGxpY2l0bHkgZGlzYWJsZWQnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXppcCIgJiYKKyAgICBncmVwICI0MDMgLSBTbmFwc2hvdCBmb3JtYXQgbm90IGFsbG93ZWQiIGdpdHdlYi5vdXRwdXQnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCiska25vd25fc25hcHNob3RfZm9ybWF0c3sndGd6J317J2Rpc2FibGVkJ30gPSAwOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzbmFwc2hvdHM6IHRneiBleHBsaWNpdGx5IGVuYWJsZWQnIFwKKyAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRneiIgJiYKKyAgICBncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLm91dHB1dCcKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc25hcHNob3QgaGFzaCBpZHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBnb29kIHRyZWUtaXNoIGlkJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90czogYmFkIHRyZWUtaXNoIGlkJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1mcml6enVtRnJhenp1bTtzZj10Z3oiICYmCisJZ3JlcCAiNDA0IC0gT2JqZWN0IGRvZXMgbm90IGV4aXN0IiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBiYWQgdHJlZS1pc2ggaWQgKHRhZ2dlZCBvYmplY3QpJyAnCisJZWNobyBvYmplY3QgPiB0YWctb2JqZWN0ICYmCisJZ2l0IGFkZCB0YWctb2JqZWN0ICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIk9iamVjdCB0byBiZSB0YWdnZWQiICYmCisJZ2l0IHRhZyB0YWdnZWQtb2JqZWN0ICQoZ2l0IGhhc2gtb2JqZWN0IHRhZy1vYmplY3QpICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD10YWdnZWQtb2JqZWN0O3NmPXRneiIgJiYKKwlncmVwICI0MDAgLSBPYmplY3QgaXMgbm90IGEgdHJlZS1pc2giIGdpdHdlYi5vdXRwdXQKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIub3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdHM6IGdvb2Qgb2JqZWN0IGlkJyAnCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kSUQ7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90czogYmFkIG9iamVjdCBpZCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9YWJjZGVmMDEyMzQ7c2Y9dGd6IiAmJgorCWdyZXAgIjQwNCAtIE9iamVjdCBkb2VzIG5vdCBleGlzdCIgZ2l0d2ViLm91dHB1dAorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5vdXRwdXQnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBtb2RpZmljYXRpb24gdGltZXMgKExhc3QtTW9kaWZpZWQgYW5kIElmLU1vZGlmaWVkLVNpbmNlKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IGZlZWQgbGFzdC1tb2RpZmllZCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWF0b207aD1tYXN0ZXIiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5oZWFkZXJzICYmCisJZ3JlcCAiTGFzdC1tb2RpZmllZDogVGh1LCA3IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IGZlZWQgaWYtbW9kaWZpZWQtc2luY2UgKG1vZGlmaWVkKScgJworCUhUVFBfSUZfTU9ESUZJRURfU0lOQ0U9IldlZCwgNiBBcHIgMjAwNSAyMjoxNDoxMyArMDAwMCIgJiYKKwlleHBvcnQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSIgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1hdG9tO2g9bWFzdGVyIiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IGZlZWQgaWYtbW9kaWZpZWQtc2luY2UgKHVubW9kaWZpZWQpJyAnCisJSFRUUF9JRl9NT0RJRklFRF9TSU5DRT0iVGh1LCA3IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiAmJgorCWV4cG9ydCBIVFRQX0lGX01PRElGSUVEX1NJTkNFICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ1bnNldCBIVFRQX0lGX01PRElGSUVEX1NJTkNFIiAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPWF0b207aD1tYXN0ZXIiICYmCisJZ3JlcCAiU3RhdHVzOiAzMDQgTm90IE1vZGlmaWVkIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHNuYXBzaG90IGxhc3QtbW9kaWZpZWQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5oZWFkZXJzICYmCisJZ3JlcCAiTGFzdC1tb2RpZmllZDogVGh1LCA3IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHNuYXBzaG90IGlmLW1vZGlmaWVkLXNpbmNlIChtb2RpZmllZCknICcKKwlIVFRQX0lGX01PRElGSUVEX1NJTkNFPSJXZWQsIDYgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiICYmCisJZXhwb3J0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInVuc2V0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UiICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHNuYXBzaG90IGlmLW1vZGlmaWVkLXNpbmNlICh1bm1vZGlmaWVkKScgJworCUhUVFBfSUZfTU9ESUZJRURfU0lOQ0U9IlRodSwgNyBBcHIgMjAwNSAyMjoxNDoxMyArMDAwMCIgJiYKKwlleHBvcnQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSIgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAzMDQgTm90IE1vZGlmaWVkIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHRyZWUgc25hcHNob3QnICcKKwlJRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF57dHJlZX0pICYmCisJSFRUUF9JRl9NT0RJRklFRF9TSU5DRT0iV2VkLCA2IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiAmJgorCWV4cG9ydCBIVFRQX0lGX01PRElGSUVEX1NJTkNFICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ1bnNldCBIVFRQX0lGX01PRElGSUVEX1NJTkNFIiAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9JElEO3NmPXRneiIgJiYKKwlncmVwICJTdGF0dXM6IDIwMCBPSyIgZ2l0d2ViLmhlYWRlcnMgJiYKKwkhIGdyZXAgLWkgImxhc3QtbW9kaWZpZWQiIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsb2FkIGNoZWNraW5nCisKKyMgYWx3YXlzIGhpdCB0aGUgbG9hZCBsaW1pdAorY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorb3VyICRtYXhsb2FkID0gLTE7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBjaGVja2luZzogbG9hZCB0b28gaGlnaCAoZGVmYXVsdCBhY3Rpb24pJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0IiAmJgorCWdyZXAgIlN0YXR1czogNTAzIFNlcnZpY2UgVW5hdmFpbGFibGUiIGdpdHdlYi5oZWFkZXJzICYmCisJZ3JlcCAiNTAzIC0gVGhlIGxvYWQgYXZlcmFnZSBvbiB0aGUgc2VydmVyIGlzIHRvbyBoaWdoIiBnaXR3ZWIuYm9keQorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCisjIHR1cm4gb2ZmIGxvYWQgY2hlY2tpbmcKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKK291ciAkbWF4bG9hZCA9IHVuZGVmOworRU9GCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGludmFsaWQgYXJndW1lbnRzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgYXJndW1lbnRzOiBpbnZhbGlkIHJlZ2V4cCAoaW4gcHJvamVjdCBzZWFyY2gpJyAnCisJZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2xpc3Q7cz0qXC5naXQ7c3I9MSIgJiYKKwlncmVwICJTdGF0dXM6IDQwMCIgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwICI0MDAgLSBJbnZhbGlkLipyZWdleHAiIGdpdHdlYi5ib2R5CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2ggYi90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzhjYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTUwMi1naXR3ZWItc3RhbmRhbG9uZS1wYXJzZS1vdXRwdXQuc2gKQEAgLTAsMCArMSwyMDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgTWFyayBSYWRhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdHdlYiBhcyBzdGFuZGFsb25lIHNjcmlwdCAocGFyc2luZyBzY3JpcHQgb3V0cHV0KS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0d2ViIChnaXQgd2ViIGludGVyZmFjZSkgYXMgYSBDR0kgc2NyaXB0IGZyb20gdGhlCitjb21tYW5kbGluZSwgYW5kIGNoZWNrcyB0aGF0IGl0IHByb2R1Y2VzIHRoZSBjb3JyZWN0IG91dHB1dCwgZWl0aGVyCitpbiB0aGUgSFRUUCBoZWFkZXIgb3IgdGhlIGFjdHVhbCBzY3JpcHQgb3V0cHV0LicKKworCisuIC4vZ2l0d2ViLWxpYi5zaAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc25hcHNob3QgZmlsZSBuYW1lIGFuZCBwcmVmaXgKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorCiska25vd25fc25hcHNob3RfZm9ybWF0c3sndGFyJ30gPSB7CisJJ2Rpc3BsYXknID0+ICd0YXInLAorCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC10YXInLAorCSdzdWZmaXgnID0+ICcudGFyJywKKwknZm9ybWF0JyA9PiAndGFyJywKK307CisKKyRmZWF0dXJleydzbmFwc2hvdCd9eydkZWZhdWx0J30gPSBbJ3RhciddOworRU9GCisKKyMgQ2FsbCBjaGVja19zbmFwc2hvdCB3aXRoIHRoZSBhcmd1bWVudHMgIjxiYXNlbmFtZT4gWzxwcmVmaXg+XSIKKyMKKyMgVGhpcyB3aWxsIGNoZWNrIHRoYXQgZ2l0d2ViIEhUVFAgaGVhZGVyIGNvbnRhaW5zIHByb3Bvc2VkIGZpbGVuYW1lCisjIGFzIDxiYXNlbmFtZT4gd2l0aCAnLnRhcicgc3VmZml4IGFkZGVkLCBhbmQgdGhhdCBnZW5lcmF0ZWQgdGFyZmlsZQorIyAoZ2l0d2ViIG1lc3NhZ2UgYm9keSkgaGFzIDxwcmVmaXg+IGFzIHByZWZpeCBmb3IgYWwgZmlsZXMgaW4gdGFyZmlsZQorIworIyA8cHJlZml4PiBkZWZhdWx0IHRvIDxiYXNlbmFtZT4KK2NoZWNrX3NuYXBzaG90ICgpIHsKKwliYXNlbmFtZT0kMQorCXByZWZpeD0kezI6LSIkMSJ9CisJZWNobyAiYmFzZW5hbWU9JGJhc2VuYW1lIgorCWdyZXAgImZpbGVuYW1lPS4qJGJhc2VuYW1lLnRhciIgZ2l0d2ViLmhlYWRlcnMgPi9kZXYvbnVsbCAyPiYxICYmCisJIiRUQVIiIHRmIGdpdHdlYi5ib2R5ID5maWxlX2xpc3QgJiYKKwkhIGdyZXAgLXYgLWUgIl4kcHJlZml4JCIgLWUgIl4kcHJlZml4LyIgLWUgIl5wYXhfZ2xvYmFsX2hlYWRlciQiIGZpbGVfbGlzdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBmaXJzdCBmb28gJiYKKwlnaXQgYnJhbmNoIHh4L3Rlc3QgJiYKKwlGVUxMX0lEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCVNIT1JUX0lEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0PTcgSEVBRCkKKycKK3Rlc3RfZGVidWcgJworCWVjaG8gIkZVTExfSUQgID0gJEZVTExfSUQiCisJZWNobyAiU0hPUlRfSUQgPSAkU0hPUlRfSUQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBmdWxsIHNoYTEnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRGVUxMX0lEO3NmPXRhciIgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC0kU0hPUlRfSUQiCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMgJiYgY2F0IGZpbGVfbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IHNob3J0ZW5lZCBzaGExJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kU0hPUlRfSUQ7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogYWxtb3N0IGZ1bGwgc2hhMScgJworCUlEPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0PTMwIEhFQUQpICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kSUQ7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogSEVBRCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj10YXIiICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtSEVBRC0kU0hPUlRfSUQiCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMgJiYgY2F0IGZpbGVfbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IHNob3J0IGJyYW5jaCBuYW1lIChtYXN0ZXIpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9dGFyIiAmJgorCUlEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0PTcgbWFzdGVyKSAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LW1hc3Rlci0kSUQiCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMgJiYgY2F0IGZpbGVfbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IHNob3J0IHRhZyBuYW1lIChmaXJzdCknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPWZpcnN0O3NmPXRhciIgJiYKKwlJRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydD03IGZpcnN0KSAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LWZpcnN0LSRJRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogZnVsbCBicmFuY2ggbmFtZSAocmVmcy9oZWFkcy9tYXN0ZXIpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1yZWZzL2hlYWRzL21hc3RlcjtzZj10YXIiICYmCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQ9NyBtYXN0ZXIpICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtbWFzdGVyLSRJRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogZnVsbCB0YWcgbmFtZSAocmVmcy90YWdzL2ZpcnN0KScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9cmVmcy90YWdzL2ZpcnN0O3NmPXRhciIgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC1maXJzdCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogaGllcmFyY2hpY2FsIGJyYW5jaCBuYW1lICh4eC90ZXN0KScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9eHgvdGVzdDtzZj10YXIiICYmCisJISBncmVwICJmaWxlbmFtZT0uKi8iIGdpdHdlYi5oZWFkZXJzCisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmb3JrcyBvZiBwcm9qZWN0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3Jrczogc2V0dXAnICcKKwlnaXQgaW5pdCAtLWJhcmUgZm9vLmdpdCAmJgorCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgLS1naXQtZGlyPWZvby5naXQgLS13b3JrLXRyZWU9LiBhZGQgZmlsZSAmJgorCWdpdCAtLWdpdC1kaXI9Zm9vLmdpdCAtLXdvcmstdHJlZT0uIGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJZWNobyAiZm9vIiA+IGZvby5naXQvZGVzY3JpcHRpb24gJiYKKwlnaXQgY2xvbmUgLS1iYXJlIGZvby5naXQgZm9vLmJhci5naXQgJiYKKwllY2hvICJmb28uYmFyIiA+IGZvby5iYXIuZ2l0L2Rlc2NyaXB0aW9uICYmCisJZ2l0IGNsb25lIC0tYmFyZSBmb28uZ2l0IGZvb19iYXouZ2l0ICYmCisJZWNobyAiZm9vX2JheiIgPiBmb29fYmF6LmdpdC9kZXNjcmlwdGlvbiAmJgorCXJtIC1mciAgIGZvbyAmJgorCW1rZGlyIC1wIGZvbyAmJgorCSgKKwkJY2QgZm9vICYmCisJCWdpdCBjbG9uZSAtLXNoYXJlZCAtLWJhcmUgLi4vZm9vLmdpdCBmb28tZm9ya2VkLmdpdCAmJgorCQllY2hvICJmb3JrIG9mIGZvbyIgPiBmb28tZm9ya2VkLmdpdC9kZXNjcmlwdGlvbgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ya3M6IG5vdCBza2lwcGVkIHVubGVzcyAiZm9ya3MiIGZlYXR1cmUgZW5hYmxlZCcgJworCWdpdHdlYl9ydW4gImE9cHJvamVjdF9saXN0IiAmJgorCWdyZXAgLXEgIj5cXC5naXQ8IiAgICAgICAgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb1xcLmdpdDwiICAgICAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vX2JhelxcLmdpdDwiICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29cXC5iYXJcXC5naXQ8IiAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb19iYXpcXC5naXQ8IiAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vL2Zvby1mb3JrZWRcXC5naXQ8IiBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb3JrIG9mIC4qPCIgICAgICAgICAgIGdpdHdlYi5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSBmb3JrcyBmZWF0dXJlJyAnCisJY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8LVxFT0YKKwkkZmVhdHVyZXsiZm9ya3MifXsiZGVmYXVsdCJ9ID0gWzFdOworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JrczogZm9ya3Mgc2tpcHBlZCBpZiAiZm9ya3MiIGZlYXR1cmUgZW5hYmxlZCcgJworCWdpdHdlYl9ydW4gImE9cHJvamVjdF9saXN0IiAmJgorCWdyZXAgLXEgIj5cXC5naXQ8IiAgICAgICAgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb1xcLmdpdDwiICAgICAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vX2JhelxcLmdpdDwiICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29cXC5iYXJcXC5naXQ8IiAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb19iYXpcXC5naXQ8IiAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC12ICI+Zm9vL2Zvby1mb3JrZWRcXC5naXQ8IiBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXYgIj5mb3JrIG9mIC4qPCIgICAgICAgICAgIGdpdHdlYi5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmtzOiAiZm9ya3MiIGFjdGlvbiBmb3IgZm9ya2VkIHJlcG9zaXRvcnknICcKKwlnaXR3ZWJfcnVuICJwPWZvby5naXQ7YT1mb3JrcyIgJiYKKwlncmVwIC1xICI+Zm9vL2Zvby1mb3JrZWRcXC5naXQ8IiBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb3JrIG9mIGZvbzwiICAgICAgICAgIGdpdHdlYi5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmtzOiBjYW4gYWNjZXNzIGZvcmtlZCByZXBvc2l0b3J5JyAnCisJZ2l0d2ViX3J1biAicD1mb28vZm9vLWZvcmtlZC5naXQ7YT1zdW1tYXJ5IiAmJgorCWdyZXAgLXEgIjIwMCBPSyIgICAgICAgIGdpdHdlYi5oZWFkZXJzICYmCisJZ3JlcCAtcSAiPmZvcmsgb2YgZm9vPCIgZ2l0d2ViLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ya3M6IHByb2plY3RfaW5kZXggbGlzdHMgYWxsIHByb2plY3RzIChpbmNsLiBmb3JrcyknICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkuZ2l0CisJZm9vLmJhci5naXQKKwlmb28uZ2l0CisJZm9vL2Zvby1mb3JrZWQuZ2l0CisJZm9vX2Jhei5naXQKKwlFT0YKKwlnaXR3ZWJfcnVuICJhPXByb2plY3RfaW5kZXgiICYmCisJc2VkIC1lICJzLyAuKi8vIiA8Z2l0d2ViLmJvZHkgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworeHNzKCkgeworCWVjaG8gPiYyICJDaGVja2luZyAkKi4uLiIgJiYKKwlnaXR3ZWJfcnVuICIkQCIgJiYKKwlpZiBncmVwICIkVEFHIiBnaXR3ZWIuYm9keTsgdGhlbgorCQllY2hvID4mMiAieHNzOiAkVEFHIHNob3VsZCBoYXZlIGJlZW4gcXVvdGVkIGluIG91dHB1dCIKKwkJcmV0dXJuIDEKKwlmaQorCXJldHVybiAwCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3hzcyBjaGVja3MnICcKKwlUQUc9IjxtYWdpYy14c3MtdGFnPiIgJiYKKwl4c3MgImE9cnNzJnA9JFRBRyIgJiYKKwl4c3MgImE9cnNzJnA9Zm9vLmdpdCZmPSRUQUciICYmCisJeHNzICIiICIkVEFHKyIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAwLWN2c2ltcG9ydC5zaCBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1MWZkZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAwLWN2c2ltcG9ydC5zaApAQCAtMCwwICsxLDE2NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgYmFzaWMgdGVzdHMnCisuIC4vbGliLWN2cy5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgTk9UX1JPT1Q7IHRoZW4KKwlza2lwX2FsbD0nV2hlbiBjdnMgaXMgY29tcGlsZWQgd2l0aCBDVlNfQkFEUk9PVCBjb21taXRzIGFzIHJvb3QgZmFpbCcKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgY3Zzcm9vdCBlbnZpcm9ubWVudCcgJworCUNWU1JPT1Q9JChwd2QpL2N2c3Jvb3QgJiYKKwlleHBvcnQgQ1ZTUk9PVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGN2c3Jvb3QnICckQ1ZTIGluaXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgYSBjdnMgbW9kdWxlJyAnCisKKwlta2RpciAiJENWU1JPT1QvbW9kdWxlIiAmJgorCSRDVlMgY28gLWQgbW9kdWxlLWN2cyBtb2R1bGUgJiYKKwkoY2QgbW9kdWxlLWN2cyAmJgorCWNhdCA8PEVPRiA+b19mb3J0dW5hICYmCitPIEZvcnR1bmEKK3ZlbHV0IGx1bmEKK3N0YXR1IHZhcmlhYmlsaXMsCisKK3NlbXBlciBjcmVzY2lzCithdXQgZGVjcmVzY2lzOwordml0YSBkZXRlc3RhYmlsaXMKKworbnVuYyBvYmR1cmF0CitldCB0dW5jIGN1cmF0CitsdWRvIG1lbnRpcyBhY2llbSwKKworZWdlc3RhdGVtLAorcG90ZXN0YXRlbQorZGlzc29sdml0IHV0IGdsYWNpZW0uCitFT0YKKwkkQ1ZTIGFkZCBvX2ZvcnR1bmEgJiYKKwljYXQgPDxFT0YgPm1lc3NhZ2UgJiYKK2FkZCAiTyBGb3J0dW5hIiBseXJpY3MKKworVGhlc2UgcHVibGljIGRvbWFpbiBseXJpY3MgbWFrZSBhbiBleGNlbGxlbnQgc2FtcGxlIHRleHQuCitFT0YKKwkkQ1ZTIGNvbW1pdCAtRiBtZXNzYWdlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ltcG9ydCBhIHRyaXZpYWwgbW9kdWxlJyAnCisKKwlnaXQgY3ZzaW1wb3J0IC1hIC1SIC16IDAgLUMgbW9kdWxlLWdpdCBtb2R1bGUgJiYKKwl0ZXN0X2NtcCBtb2R1bGUtY3ZzL29fZm9ydHVuYSBtb2R1bGUtZ2l0L29fZm9ydHVuYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGFjayByZWZzJyAnKGNkIG1vZHVsZS1naXQgJiYgZ2l0IGdjKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbml0aWFsIGltcG9ydCBoYXMgY29ycmVjdCAuZ2l0L2N2cy1yZXZpc2lvbnMnICcKKworCShjZCBtb2R1bGUtZ2l0ICYmCisJIGdpdCBsb2cgLS1mb3JtYXQ9Im9fZm9ydHVuYSAxLjEgJUgiIC0xKSA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbW9kdWxlLWdpdC8uZ2l0L2N2cy1yZXZpc2lvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd1cGRhdGUgY3ZzIG1vZHVsZScgJworCShjZCBtb2R1bGUtY3ZzICYmCisJY2F0IDw8RU9GID5vX2ZvcnR1bmEgJiYKK08gRm9ydHVuZSwKK2xpa2UgdGhlIG1vb24KK3lvdSBhcmUgY2hhbmdlYWJsZSwKKworZXZlciB3YXhpbmcKK2FuZCB3YW5pbmc7CitoYXRlZnVsIGxpZmUKKworZmlyc3Qgb3BwcmVzc2VzCithbmQgdGhlbiBzb290aGVzCithcyBmYW5jeSB0YWtlcyBpdDsKKworcG92ZXJ0eQorYW5kIHBvd2VyCitpdCBtZWx0cyB0aGVtIGxpa2UgaWNlLgorRU9GCisJY2F0IDw8RU9GID5tZXNzYWdlICYmCit0cmFuc2xhdGUgdG8gRW5nbGlzaAorCitNeSBMYXRpbiBpcyB0ZXJyaWJsZS4KK0VPRgorCSRDVlMgY29tbWl0IC1GIG1lc3NhZ2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndXBkYXRlIGdpdCBtb2R1bGUnICcKKworCShjZCBtb2R1bGUtZ2l0ICYmCisJZ2l0IGNvbmZpZyBjdnNpbXBvcnQudHJhY2tSZXZpc2lvbnMgdHJ1ZSAmJgorCWdpdCBjdnNpbXBvcnQgLWEgLXogMCBtb2R1bGUgJiYKKwlnaXQgbWVyZ2Ugb3JpZ2luCisJKSAmJgorCXRlc3RfY21wIG1vZHVsZS1jdnMvb19mb3J0dW5hIG1vZHVsZS1naXQvb19mb3J0dW5hCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd1cGRhdGUgaGFzIGNvcnJlY3QgLmdpdC9jdnMtcmV2aXNpb25zJyAnCisKKwkoY2QgbW9kdWxlLWdpdCAmJgorCSBnaXQgbG9nIC0tZm9ybWF0PSJvX2ZvcnR1bmEgMS4xICVIIiAtMSBIRUFEXiAmJgorCSBnaXQgbG9nIC0tZm9ybWF0PSJvX2ZvcnR1bmEgMS4yICVIIiAtMSBIRUFEKSA+IGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbW9kdWxlLWdpdC8uZ2l0L2N2cy1yZXZpc2lvbnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd1cGRhdGUgY3ZzIG1vZHVsZScgJworCisJKGNkIG1vZHVsZS1jdnMgJiYKKwkJZWNobyAxID50aWNrICYmCisJCSRDVlMgYWRkIHRpY2sgJiYKKwkJJENWUyBjb21taXQgLW0gMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjdnNpbXBvcnQubW9kdWxlIGNvbmZpZyB3b3JrcycgJworCisJKGNkIG1vZHVsZS1naXQgJiYKKwkJZ2l0IGNvbmZpZyBjdnNpbXBvcnQubW9kdWxlIG1vZHVsZSAmJgorCQlnaXQgY29uZmlnIGN2c2ltcG9ydC50cmFja1JldmlzaW9ucyB0cnVlICYmCisJCWdpdCBjdnNpbXBvcnQgLWEgLXowICYmCisJCWdpdCBtZXJnZSBvcmlnaW4KKwkpICYmCisJdGVzdF9jbXAgbW9kdWxlLWN2cy90aWNrIG1vZHVsZS1naXQvdGljaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2Vjb25kIHVwZGF0ZSBoYXMgY29ycmVjdCAuZ2l0L2N2cy1yZXZpc2lvbnMnICcKKworCShjZCBtb2R1bGUtZ2l0ICYmCisJIGdpdCBsb2cgLS1mb3JtYXQ9Im9fZm9ydHVuYSAxLjEgJUgiIC0xIEhFQUReXiAmJgorCSBnaXQgbG9nIC0tZm9ybWF0PSJvX2ZvcnR1bmEgMS4yICVIIiAtMSBIRUFEXiAmJgorCSBnaXQgbG9nIC0tZm9ybWF0PSJ0aWNrIDEuMSAlSCIgLTEgSEVBRCkgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG1vZHVsZS1naXQvLmdpdC9jdnMtcmV2aXNpb25zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnaW1wb3J0IGZyb20gYSBDVlMgd29ya2luZyB0cmVlJyAnCisKKwkkQ1ZTIGNvIC1kIGltcG9ydC1mcm9tLXd0IG1vZHVsZSAmJgorCShjZCBpbXBvcnQtZnJvbS13dCAmJgorCQlnaXQgY29uZmlnIGN2c2ltcG9ydC50cmFja1JldmlzaW9ucyBmYWxzZSAmJgorCQlnaXQgY3ZzaW1wb3J0IC1hIC16MCAmJgorCQllY2hvIDEgPmV4cGVjdCAmJgorCQlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolcyVuID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ25vIC5naXQvY3ZzLXJldmlzaW9ucyBjcmVhdGVkIGJ5IGRlZmF1bHQnICcKKworCSEgdGVzdCAtZSBpbXBvcnQtZnJvbS13dC8uZ2l0L2N2cy1yZXZpc2lvbnMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3Rlc3QgZW50aXJlIEhFQUQnICd0ZXN0X2NtcF9icmFuY2hfdHJlZSBtYXN0ZXInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwMS1jdnNpbXBvcnQtdmVuZG9yLWJyYW5jaC5zaCBiL3QvdDk2MDEtY3ZzaW1wb3J0LXZlbmRvci1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODI3ZDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEtY3ZzaW1wb3J0LXZlbmRvci1icmFuY2guc2gKQEAgLTAsMCArMSw4NSBAQAorIyEvYmluL3NoCisKKyMgRGVzY3JpcHRpb24gb2YgdGhlIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5OgorIworIyAgICBpbXBvcnRlZC1vbmNlLnR4dDoKKyMKKyMgICAgICAgSW1wb3J0ZWQgb25jZS4gIDEuMSBhbmQgMS4xLjEuMSBzaG91bGQgYmUgaWRlbnRpY2FsLgorIworIyAgICBpbXBvcnRlZC10d2ljZS50eHQ6CisjCisjICAgICAgIEltcG9ydGVkIHR3aWNlLiAgSEVBRCBzaG91bGQgcmVmbGVjdCB0aGUgY29udGVudHMgb2YgdGhlCisjICAgICAgIHNlY29uZCBpbXBvcnQgKGkuZS4sIGhhdmUgdGhlIHNhbWUgY29udGVudHMgYXMgMS4xLjEuMikuCisjCisjICAgIGltcG9ydGVkLW1vZGlmaWVkLnR4dDoKKyMKKyMgICAgICAgSW1wb3J0ZWQsIHRoZW4gbW9kaWZpZWQgb24gSEVBRC4gIEhFQUQgc2hvdWxkIHJlZmxlY3QgdGhlCisjICAgICAgIG1vZGlmaWNhdGlvbi4KKyMKKyMgICAgaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0OgorIworIyAgICAgICBJbXBvcnRlZCwgdGhlbiBtb2RpZmllZCBvbiBIRUFELCB0aGVuIGltcG9ydGVkIGFnYWluLgorIworIyAgICBhZGRlZC1pbXBvcnRlZC50eHQsdjoKKyMKKyMgICAgICAgQWRkZWQgd2l0aCAnY3ZzIGFkZCcgdG8gY3JlYXRlIDEuMSwgdGhlbiBpbXBvcnRlZCB3aXRoCisjICAgICAgIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvbnRlbnRzIHRvIGNyZWF0ZSAxLjEuMS4xLCB0aGVyZWZvcmUgdGhlCisjICAgICAgIHZlbmRvciBicmFuY2ggd2FzIG5ldmVyIHRoZSBkZWZhdWx0IGJyYW5jaC4KKyMKKyMgICAgaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0OgorIworIyAgICAgICBMaWtlIGltcG9ydGVkLXR3aWNlLnR4dCwgYnV0IHdpdGggYSB2ZW5kb3IgYnJhbmNoIHdob3NlIGJyYW5jaAorIyAgICAgICB0YWcgaGFzIGJlZW4gcmVtb3ZlZC4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGN2c2ltcG9ydCBoYW5kbGluZyBvZiB2ZW5kb3IgYnJhbmNoZXMnCisuIC4vbGliLWN2cy5zaAorCitzZXR1cF9jdnNfdGVzdF9yZXBvc2l0b3J5IHQ5NjAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnaW1wb3J0IGEgbW9kdWxlIHdpdGggYSB2ZW5kb3IgYnJhbmNoJyAnCisKKwlnaXQgY3ZzaW1wb3J0IC1DIG1vZHVsZS1naXQgbW9kdWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayBIRUFEIG91dCBvZiBjdnMgcmVwb3NpdG9yeScgJ3Rlc3RfY3ZzX2NvIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayBtYXN0ZXIgb3V0IG9mIGdpdCByZXBvc2l0b3J5JyAndGVzdF9naXRfY28gbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBpbXBvcnRlZCBvbmNlJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgaW1wb3J0ZWQtb25jZS50eHQKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBpbXBvcnRlZCB0d2ljZScgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLXR3aWNlLnR4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgYSBmaWxlIHRoYXQgd2FzIGltcG9ydGVkIHRoZW4gbW9kaWZpZWQgb24gSEVBRCcgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLW1vZGlmaWVkLnR4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgYSBmaWxlIHRoYXQgd2FzIGltcG9ydGVkLCBtb2RpZmllZCwgdGhlbiBpbXBvcnRlZCBhZ2FpbicgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgYSBmaWxlIHRoYXQgd2FzIGFkZGVkIHRvIEhFQUQgdGhlbiBpbXBvcnRlZCcgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGFkZGVkLWltcG9ydGVkLnR4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnYSB2ZW5kb3IgYnJhbmNoIHdob3NlIHRhZyBoYXMgYmVlbiByZW1vdmVkJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfZmlsZSBtYXN0ZXIgaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0CisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMgYi90L3Q5NjAxL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYjEyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlIGIvdC90OTYwMS9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI5YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2hpc3RvcnkKK3ZhbC10YWdzCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2FkZGVkLWltcG9ydGVkLnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9hZGRlZC1pbXBvcnRlZC50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjgzMDcyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9hZGRlZC1pbXBvcnRlZC50eHQsdgpAQCAtMCwwICsxLDQ0IEBACitoZWFkCTEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTQ6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xNTsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xNjsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitAQWRkIGEgZmlsZSB0byB0aGUgd29ya2luZyBjb3B5LgorQAordGV4dAorQEFkZGluZyB0aGlzIGZpbGUsIGJlZm9yZSBpbXBvcnRpbmcgaXQgd2l0aCBkaWZmZXJlbnQgY29udGVudHMuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy00KS4KK0AKK3RleHQKK0BkMSAxCithMSAxCitUaGlzIGlzIHZ0YWctNCAob24gdmJyYW5jaEEpIG9mIGFkZGVkLXRoZW4taW1wb3J0ZWQudHh0LgorQAorCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLWFub255bW91c2x5LnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1hbm9ueW1vdXNseS50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUxYjBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1hbm9ueW1vdXNseS50eHQsdgpAQCAtMCwwICsxLDQyIEBACitoZWFkCTEuMTsKK2JyYW5jaAkxLjEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTE6MS4xLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BUaGlzIGlzIHZ0YWctMSAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLWFub255bW91c2x5LnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTgzMGFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQsdgpAQCAtMCwwICsxLDc2IEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTI6MS4xLjEuMgorCXZ0YWctMToxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjE0OwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMS4xLjI7CisKKzEuMS4xLjIKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitARmlyc3QgcmVndWxhciBjb21taXQsIHRvIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dCwgb24gSEVBRC4KK0AKK3RleHQKK0BUaGlzIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dCBvbiBIRUFELgorSXQgc2hvdWxkIHN1cGVyc2VkZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSB2ZW5kb3IgYnJhbmNoLgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQxIDIKK2EyIDEKK1RoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMSkuCitACit0ZXh0CitAQAorCisKKzEuMS4xLjIKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMikuCitACit0ZXh0CitAZDEgMQorYTEgMQorVGhpcyBpcyB2dGFnLTIgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQuCitACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjZmU0NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQudHh0LHYKQEAgLTAsMCArMSw1OSBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0xOjEuMS4xLjEKKwl2YnJhbmNoQToxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTQ7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4yCitsb2cKK0BDb21taXQgb24gSEVBRC4KK0AKK3RleHQKK0BUaGlzIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGltcG9ydGVkLW1vZGlmaWVkLnR4dCBvbiBIRUFELgorSXQgc2hvdWxkIHN1cGVyc2VkZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSB2ZW5kb3IgYnJhbmNoLgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQxIDIKK2EyIDEKK1RoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtbW9kaWZpZWQudHh0LgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMSkuCitACit0ZXh0CitAQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtb25jZS50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtb25jZS50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRkODJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1vbmNlLnR4dCx2CkBAIC0wLDAgKzEsNDMgQEAKK2hlYWQJMS4xOworYnJhbmNoCTEuMS4xOworYWNjZXNzOworc3ltYm9scworCXZ0YWctMToxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAVGhpcyBpcyB2dGFnLTEgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC1vbmNlLnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLXR3aWNlLnR4dCx2IGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC10d2ljZS50eHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWYzZjFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC10d2ljZS50eHQsdgpAQCAtMCwwICsxLDYwIEBACitoZWFkCTEuMTsKK2JyYW5jaAkxLjEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTI6MS4xLjEuMgorCXZ0YWctMToxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xLjEuMjsKKworMS4xLjEuMgorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAVGhpcyBpcyB2dGFnLTEgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC10d2ljZS50eHQuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0xKS4KK0AKK3RleHQKK0BACisKKworMS4xLjEuMgorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0yKS4KK0AKK3RleHQKK0BkMSAxCithMSAxCitUaGlzIGlzIHZ0YWctMiAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLXR3aWNlLnR4dC4KK0AKKworCmRpZmYgLS1naXQgYS90L3Q5NjAyLWN2c2ltcG9ydC1icmFuY2hlcy10YWdzLnNoIGIvdC90OTYwMi1jdnNpbXBvcnQtYnJhbmNoZXMtdGFncy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMWRiMzIzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi1jdnNpbXBvcnQtYnJhbmNoZXMtdGFncy5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKworIyBBIGRlc2NyaXB0aW9uIG9mIHRoZSByZXBvc2l0b3J5IHVzZWQgZm9yIHRoaXMgdGVzdCBjYW4gYmUgZm91bmQgaW4KKyMgdDk2MDIvUkVBRE1FLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY3ZzaW1wb3J0IGhhbmRsaW5nIG9mIGJyYW5jaGVzIGFuZCB0YWdzJworLiAuL2xpYi1jdnMuc2gKKworc2V0dXBfY3ZzX3Rlc3RfcmVwb3NpdG9yeSB0OTYwMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ltcG9ydCBtb2R1bGUnICcKKworCWdpdCBjdnNpbXBvcnQgLUMgbW9kdWxlLWdpdCBtb2R1bGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3Rlc3QgYnJhbmNoIG1hc3RlcicgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd0ZXN0IGJyYW5jaCB2ZW5kb3JicmFuY2gnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIHZlbmRvcmJyYW5jaAorCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAndGVzdCBicmFuY2ggQl9GUk9NX0lOSVRJQUxTJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBCX0ZST01fSU5JVElBTFMKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgYnJhbmNoIEJfRlJPTV9JTklUSUFMU19CVVRfT05FJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBCX0ZST01fSU5JVElBTFNfQlVUX09ORQorCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAndGVzdCBicmFuY2ggQl9NSVhFRCcgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgQl9NSVhFRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndGVzdCBicmFuY2ggQl9TUExJVCcgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgQl9TUExJVAorCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAndGVzdCB0YWcgdmVuZG9ydGFnJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSB2ZW5kb3J0YWcKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3Rlc3QgdGFnIFRfQUxMX0lOSVRJQUxfRklMRVMnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIFRfQUxMX0lOSVRJQUxfRklMRVMKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgdGFnIFRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORScgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICd0ZXN0IHRhZyBUX01JWEVEJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBUX01JWEVECisKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk2MDIvUkVBRE1FIGIvdC90OTYwMi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzMWUwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvUkVBRE1FCkBAIC0wLDAgKzEsNjIgQEAKK1RoaXMgcmVwb3NpdG9yeSBpcyBmb3IgdGVzdGluZyB0aGUgYWJpbGl0eSB0byBncm91cCByZXZpc2lvbnMKK2NvcnJlY3RseSBhbG9uZyB0YWdzIGFuZCBicmFuY2hlcy4gIEhlcmUgaXMgaXRzIGhpc3Rvcnk6CisKKyAgMS4gIFRoZSBpbml0aWFsIGltcG9ydCAocmV2aXNpb24gMS4xIG9mIGV2ZXJ5Ym9keSkgY3JlYXRlZCBhCisgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpdGggYSBmaWxlIG5hbWVkIGBkZWZhdWx0JyBpbiBlYWNoIGRpcjoKKworICAgICAgICAgICAgLi8KKyAgICAgICAgICAgICAgZGVmYXVsdAorICAgICAgICAgICAgICBzdWIxL2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICBzdWJzdWJBL2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICBzdWJzdWJCL2RlZmF1bHQKKyAgICAgICAgICAgICAgc3ViMi9kZWZhdWx0CisgICAgICAgICAgICAgICAgICAgc3Vic3ViQS9kZWZhdWx0CisgICAgICAgICAgICAgIHN1YjMvZGVmYXVsdAorCisgIDIuICBUaGVuIHRhZ2dlZCBldmVyeW9uZSB3aXRoIFRfQUxMX0lOSVRJQUxfRklMRVMuCisKKyAgMy4gIFRoZW4gdGFnZ2VkIGV2ZXJ5b25lIGV4Y2VwdCBzdWIxL3N1YnN1YkIvZGVmYXVsdCB3aXRoCisgICAgICBUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkUuCisKKyAgNC4gIFRoZW4gY3JlYXRlZCBicmFuY2ggQl9GUk9NX0lOSVRJQUxTIG9uIGV2ZXJ5b25lLgorCisgIDUuICBUaGVuIGNyZWF0ZWQgYnJhbmNoIEJfRlJPTV9JTklUSUFMU19CVVRfT05FIG9uIGV2ZXJ5b25lIGV4Y2VwdAorICAgICAgL3N1YjEvc3Vic3ViQi9kZWZhdWx0LgorCisgIDYuICBUaGVuIGNvbW1pdHRlZCBtb2RpZmljYXRpb25zIHRvIHR3byBmaWxlczogc3ViMy9kZWZhdWx0LCBhbmQKKyAgICAgIHN1YjEvc3Vic3ViQS9kZWZhdWx0LgorCisgIDcuICBUaGVuIGNvbW1pdHRlZCBhIG1vZGlmaWNhdGlvbiB0byBhbGwgNyBmaWxlcy4KKworICA4LiAgVGhlbiBiYWNrZGF0ZWQgc3ViMy9kZWZhdWx0IHRvIHJldmlzaW9uIDEuMiwgYW5kCisgICAgICBzdWIyL3N1YnN1YkEvZGVmYXVsdCB0byByZXZpc2lvbiAxLjEsIGFuZCB0YWdnZWQgd2l0aCBUX01JWEVELgorCisgIDkuICBTYW1lIGFzIDgsIGJ1dCB0YWdnZWQgd2l0aCAtYiB0byBjcmVhdGUgYnJhbmNoIEJfTUlYRUQuCisKKyAgMTAuIFN3aXRjaGVkIHRoZSB3b3JraW5nIGNvcHkgdG8gQl9NSVhFRCwgYW5kIGFkZGVkCisgICAgICBzdWIyL2JyYW5jaF9CX01JWEVEX29ubHkuICAoVGhhdCdzIHdoeSB0aGUgUkNTIGZpbGUgaXMgaW4KKyAgICAgIHN1YjIvQXR0aWMvIC0tIGl0IG5ldmVyIGV4aXN0ZWQgb24gdHJ1bmsuKQorCisgIDExLiBJbiBvbmUgY29tbWl0LCBtb2RpZmllZCBkZWZhdWx0LCBzdWIxL2RlZmF1bHQsIGFuZAorICAgICAgc3ViMi9zdWJzdWJBL2RlZmF1bHQsIG9uIGJyYW5jaCBCX01JWEVELgorCisgIDEyLiBEaWQgImN2cyB1cCAtQSIgb24gc3ViMi9kZWZhdWx0LCB0aGVuIGluIG9uZSBjb21taXQsIG1hZGUgYQorICAgICAgY2hhbmdlIHRvIHN1YjIvZGVmYXVsdCBhbmQgc3ViMi9icmFuY2hfQl9NSVhFRF9vbmx5LiAgU28gdGhpcworICAgICAgY29tbWl0IHNob3VsZCBiZSBzcHJlYWQgYmV0d2VlbiB0aGUgYnJhbmNoIGFuZCB0aGUgdHJ1bmsuCisKKyAgMTMuIERvICJjdnMgdXAgLUEiIHRvIGdldCBldmVyeW9uZSBiYWNrIHRvIHRydW5rLCB0aGVuIG1ha2UgYSBuZXcKKyAgICAgIGJyYW5jaCBCX1NQTElUIG9uIGV2ZXJ5b25lIGV4Y2VwdCBzdWIxL3N1YnN1YkIvZGVmYXVsdCx2LgorCisgIDE0LiBTd2l0Y2ggdG8gYnJhbmNoIEJfU1BMSVQgKHNlZSBzdWIxL3N1YnN1YkIvZGVmYXVsdCBkaXNhcHBlYXIpCisgICAgICBhbmQgY29tbWl0IGEgY2hhbmdlIHRoYXQgYWZmZWN0cyBldmVyeW9uZSBleGNlcHQgc3ViMy9kZWZhdWx0LgorCisgIDE1LiBBbiBob3VyIG9yIHNvIGxhdGVyLCAiY3ZzIHVwIC1BIiB0byBnZXQgc3ViMS9zdWJzdWJCL2RlZmF1bHQKKyAgICAgIGJhY2ssIHRoZW4gY29tbWl0IGEgY2hhbmdlIG9uIHRoYXQgZmlsZSwgb24gdHJ1bmsuICAoSXQncworICAgICAgaW1wb3J0YW50IHRoYXQgdGhpcyBjaGFuZ2UgaGFwcGVuZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGNvbW1pdHMKKyAgICAgIG9uIEJfU1BMSVQuKQorCisgIDE2LiBCcmFuY2ggc3ViMS9zdWJzdWJCL2RlZmF1bHQgdG8gQl9TUExJVCwgdGhlbiAiY3ZzIHVwIC1yIEJfU1BMSVQiCisgICAgICB0byBzd2l0Y2ggdGhlIHdob2xlIHdvcmtpbmcgY29weSB0byB0aGUgYnJhbmNoLgorCisgIDE3LiBDb21taXQgYSBjaGFuZ2Ugb24gQl9TUExJVCwgdG8gc3ViMS9zdWJzdWJCL2RlZmF1bHQgYW5kCisgICAgICBzdWIzL2RlZmF1bHQuCmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMgYi90L3Q5NjAyL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYjEyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlIGIvdC90OTYwMi9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI5YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2hpc3RvcnkKK3ZhbC10YWdzCmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNjgzODIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwMiBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjIuMC40CisJQl9NSVhFRDoxLjIuMC4yCisJVF9NSVhFRDoxLjIKKwlCX0ZST01fSU5JVElBTFNfQlVUX09ORToxLjEuMS4xLjAuNAorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORToxLjEuMS4xCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjIuMi4xCisJMS4yLjQuMTsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuMi4xCitkYXRlCTIwMDMuMDUuMjMuMDAuMzEuMzY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuNC4xCitkYXRlCTIwMDMuMDYuMDMuMDMuMjAuMzE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4yCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BUaGlzIGlzIHRoZSBmaWxlIGBkZWZhdWx0JyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBwcm9qZWN0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorQAorCisKKzEuMi40LjEKK2xvZworQEZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KKworVGhpcyBjaGFuZ2UgZXhjbHVkZXMgc3ViMy9kZWZhdWx0LCBiZWNhdXNlIGl0IHdhcyBub3QgcGFydCBvZiB0aGlzCitjb21taXQsIGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgd2hpY2ggaXMgbm90IGV2ZW4gb24gdGhlIGJyYW5jaCB5ZXQuCitACit0ZXh0CitAYTUgMgorCitGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCitACisKKworMS4yLjIuMQorbG9nCitATW9kaWZ5IHRocmVlIGZpbGVzLCBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BhNSAyCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgb24gYnJhbmNoIEJfTUlYRUQgb25seSAoYWZmZWN0aW5nIDMgZmlsZXMpLgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZkY2NkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwMiBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjIuMC40CisJQl9NSVhFRDoxLjIuMC4yCisJVF9NSVhFRDoxLjIKKwlCX0ZST01fSU5JVElBTFNfQlVUX09ORToxLjEuMS4xLjAuNAorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORToxLjEuMS4xCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjIuMi4xCisJMS4yLjQuMTsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuMi4xCitkYXRlCTIwMDMuMDUuMjMuMDAuMzEuMzY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuNC4xCitkYXRlCTIwMDMuMDYuMDMuMDMuMjAuMzE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4yCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjEvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjIuNC4xCitsb2cKK0BGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCisKK1RoaXMgY2hhbmdlIGV4Y2x1ZGVzIHN1YjMvZGVmYXVsdCwgYmVjYXVzZSBpdCB3YXMgbm90IHBhcnQgb2YgdGhpcworY29tbWl0LCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIHdoaWNoIGlzIG5vdCBldmVuIG9uIHRoZSBicmFuY2ggeWV0LgorQAordGV4dAorQGE1IDIKKworRmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorQAorCisKKzEuMi4yLjEKK2xvZworQE1vZGlmeSB0aHJlZSBmaWxlcywgb24gYnJhbmNoIEJfTUlYRUQuCitACit0ZXh0CitAYTUgMgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIG9uIGJyYW5jaCBCX01JWEVEIG9ubHkgKGFmZmVjdGluZyAzIGZpbGVzKS4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL3N1YnN1YkEvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL3N1YnN1YkEvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MmI3YjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQS9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDEgQEAKK2hlYWQJMS4zOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4zLjAuNAorCUJfTUlYRUQ6MS4zLjAuMgorCVRfTUlYRUQ6MS4zCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjMKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4zLjQuMTsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNS4yNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMy40LjEKK2RhdGUJMjAwMy4wNi4wMy4wMy4yMC4zMTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjMKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgc3ViMS9zdWJzdWJBL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgYnkgdGhlIGZpcnN0IGNvbW1pdCAoYWZmZWN0aW5nIHR3byBmaWxlcykuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCitACisKKworMS4zLjQuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhNyAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjIKK2xvZworQEZpcnN0IGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgdHdvIGZpbGVzLgorQAordGV4dAorQGQ2IDIKK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL3N1YnN1YkIvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL3N1YnN1YkIvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmVmYTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjEvc3Vic3ViQi9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDcgQEAKK2hlYWQJMS4zOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4zLjAuMgorCUJfTUlYRUQ6MS4yLjAuMgorCVRfTUlYRUQ6MS4yCisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMworZGF0ZQkyMDAzLjA2LjAzLjA0LjI5LjE0OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjMuMi4xOworbmV4dAkxLjI7CisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4zLjIuMQorZGF0ZQkyMDAzLjA2LjAzLjA0LjMzLjEzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMworbG9nCitAQSB0cnVuayBjaGFuZ2UgdG8gc3ViMS9zdWJzdWJCL2RlZmF1bHQuICBUaGlzIHdhcyBjb21taXR0ZWQgYWJvdXQgYW4KK2hvdXIgYWZ0ZXIgYW4gZWFybGllciBjaGFuZ2UgdGhhdCBhZmZlY3RlZCBtb3N0IGZpbGVzIG9uIGJyYW5jaAorQl9TUExJVC4gIFRoaXMgZmlsZSBpcyBub3Qgb24gdGhhdCBicmFuY2ggeWV0LCBidXQgYWZ0ZXIgdGhpcyBjb21taXQsCit3ZSdsbCBicmFuY2ggdG8gQl9TUExJVCwgYWxiZWl0IHJvb3RlZCBpbiBhIHJldmlzaW9uIHRoYXQgZGlkbid0IGV4aXN0CithdCB0aGUgdGltZSB0aGUgcmVzdCBvZiBCX1NQTElUIHdhcyBjcmVhdGVkLgorQAordGV4dAorQFRoaXMgaXMgc3ViMS9zdWJzdWJCL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCisKK1RoaXMgYml0IHdhcyBjb21taXR0ZWQgb24gdHJ1bmsgYWJvdXQgYW4gaG91ciBhZnRlciBhbiBlYXJsaWVyIGNoYW5nZQordG8gZXZlcnlvbmUgZWxzZSBvbiBicmFuY2ggQl9TUExJVC4gIEFmdGVyd2FyZHMsIHdlJ2xsIGZpbmFsbHkgYnJhbmNoCit0aGlzIGZpbGUgdG8gQl9TUExJVCwgYnV0IHJvb3RlZCBpbiBhIHJldmlzaW9uIHRoYXQgZGlkbid0IGV4aXN0IGF0Cit0aGUgdGltZSB0aGUgcmVzdCBvZiBCX1NQTElUIHdhcyBjcmVhdGVkLgorQAorCisKKzEuMy4yLjEKK2xvZworQFRoaXMgY2hhbmdlIGFmZmVjdHMgc3ViMy9kZWZhdWx0IGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgb24gYnJhbmNoCitCX1NQTElULiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZmlsZSBkaWQgbm90IGV2ZW4gZXhpc3Qgb24gdGhpcyBicmFuY2gKK3VudGlsIGFmdGVyIHNvbWUgb3RoZXIgZmlsZXMgaGFkIGhhZCByZXZpc2lvbnMgY29tbWl0dGVkIG9uIEJfU1BMSVQuCitACit0ZXh0CitAYTEwIDQKKworVGhpcyBjaGFuZ2UgYWZmZWN0cyBzdWIzL2RlZmF1bHQgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCBvbiBicmFuY2gKK0JfU1BMSVQuICBOb3RlIHRoYXQgdGhlIGxhdHRlciBmaWxlIGRpZCBub3QgZXZlbiBleGlzdCBvbiB0aGlzIGJyYW5jaAordW50aWwgYWZ0ZXIgc29tZSBvdGhlciBmaWxlcyBoYWQgaGFkIHJldmlzaW9ucyBjb21taXR0ZWQgb24gQl9TUExJVC4KK0AKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQGQ2IDUKK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL0F0dGljL2JyYW5jaF9CX01JWEVEX29ubHksdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9BdHRpYy9icmFuY2hfQl9NSVhFRF9vbmx5LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjOTc4OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9BdHRpYy9icmFuY2hfQl9NSVhFRF9vbmx5LHYKQEAgLTAsMCArMSw1OSBAQAoraGVhZAkxLjE7CithY2Nlc3M7CitzeW1ib2xzCisJQl9NSVhFRDoxLjEuMC4yOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4yNS4yNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIGRlYWQ7CiticmFuY2hlcworCTEuMS4yLjE7CituZXh0CTsKKworMS4xLjIuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjI1LjI2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMS4yLjI7CisKKzEuMS4yLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC40OC41MTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjEKK2xvZworQGZpbGUgYnJhbmNoX0JfTUlYRURfb25seSB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCX01JWEVELgorQAordGV4dAorQEAKKworCisxLjEuMi4xCitsb2cKK0BBZGQgYSBmaWxlIG9uIGJyYW5jaCBCX01JWEVELgorQAordGV4dAorQGEwIDEKK1RoaXMgZmlsZSB3YXMgYWRkZWQgb24gYnJhbmNoIEJfTUlYRUQuICBJdCBuZXZlciBleGlzdGVkIG9uIHRydW5rLgorQAorCisKKzEuMS4yLjIKK2xvZworQEEgc2luZ2xlIGNvbW1pdCBhZmZlY3Rpbmcgb25lIGZpbGUgb24gYnJhbmNoIEJfTUlYRUQgYW5kIG9uZSBvbiB0cnVuay4KK0AKK3RleHQKK0BhMSAzCisKK1RoZSBzYW1lIGNvbW1pdCBhZGRlZCB0aGVzZSB0d28gbGluZXMgaGVyZSBvbiBicmFuY2ggQl9NSVhFRCwgYW5kIHR3bworc2ltaWxhciBsaW5lcyB0byAuL2RlZmF1bHQgb24gdHJ1bmsuCitACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4ZjdmOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4zOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4zLjAuMgorCUJfTUlYRUQ6MS4yLjAuMgorCVRfTUlYRUQ6MS4yCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjMKK2RhdGUJMjAwMy4wNS4yMy4wMC40OC41MTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4zLjIuMTsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMy4yLjEKK2RhdGUJMjAwMy4wNi4wMy4wMy4yMC4zMTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjMKK2xvZworQEEgc2luZ2xlIGNvbW1pdCBhZmZlY3Rpbmcgb25lIGZpbGUgb24gYnJhbmNoIEJfTUlYRUQgYW5kIG9uZSBvbiB0cnVuay4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjIvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KKworVGhlIHNhbWUgY29tbWl0IGFkZGVkIHRoZXNlIHR3byBsaW5lcyBoZXJlIG9uIHRydW5rLCBhbmQgdHdvIHNpbWlsYXIKK2xpbmVzIHRvIC4vYnJhbmNoX0JfTUlYRURfb25seSBvbiBicmFuY2ggQl9NSVhFRC4KK0AKKworCisxLjMuMi4xCitsb2cKK0BGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCisKK1RoaXMgY2hhbmdlIGV4Y2x1ZGVzIHN1YjMvZGVmYXVsdCwgYmVjYXVzZSBpdCB3YXMgbm90IHBhcnQgb2YgdGhpcworY29tbWl0LCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIHdoaWNoIGlzIG5vdCBldmVuIG9uIHRoZSBicmFuY2ggeWV0LgorQAordGV4dAorQGE4IDIKKworRmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAZDYgMworQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvc3Vic3ViQS9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvc3Vic3ViQS9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzMjQyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9zdWJzdWJBL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwMiBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjIuMC4yCisJQl9NSVhFRDoxLjEuMC4yCisJVF9NSVhFRDoxLjEKKwlCX0ZST01fSU5JVElBTFNfQlVUX09ORToxLjEuMS4xLjAuNAorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORToxLjEuMS4xCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjIuMi4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xCisJMS4xLjIuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjEuMi4xCitkYXRlCTIwMDMuMDUuMjMuMDAuMzEuMzY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuMi4xCitkYXRlCTIwMDMuMDYuMDMuMDMuMjAuMzE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4yCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjIvc3Vic3ViMi9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorQAorCisKKzEuMi4yLjEKK2xvZworQEZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KKworVGhpcyBjaGFuZ2UgZXhjbHVkZXMgc3ViMy9kZWZhdWx0LCBiZWNhdXNlIGl0IHdhcyBub3QgcGFydCBvZiB0aGlzCitjb21taXQsIGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgd2hpY2ggaXMgbm90IGV2ZW4gb24gdGhlIGJyYW5jaCB5ZXQuCitACit0ZXh0CitAYTUgMgorCitGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4yLjEKK2xvZworQE1vZGlmeSB0aHJlZSBmaWxlcywgb24gYnJhbmNoIEJfTUlYRUQuCitACit0ZXh0CitAYTMgMgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIG9uIGJyYW5jaCBCX01JWEVEIG9ubHkgKGFmZmVjdGluZyAzIGZpbGVzKS4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjMvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIzL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGU0NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIzL2RlZmF1bHQsdgpAQCAtMCwwICsxLDEwMiBAQAoraGVhZAkxLjM7CithY2Nlc3M7CitzeW1ib2xzCisJQl9TUExJVDoxLjMuMC4yCisJQl9NSVhFRDoxLjIuMC4yCisJVF9NSVhFRDoxLjIKKwlCX0ZST01fSU5JVElBTFNfQlVUX09ORToxLjEuMS4xLjAuNAorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORToxLjEuMS4xCisJVF9BTExfSU5JVElBTF9GSUxFUzoxLjEuMS4xCisJdmVuZG9ydGFnOjEuMS4xLjEKKwl2ZW5kb3JicmFuY2g6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMworZGF0ZQkyMDAzLjA1LjIzLjAwLjE3LjUzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjMuMi4xOworbmV4dAkxLjI7CisKKzEuMgorZGF0ZQkyMDAzLjA1LjIzLjAwLjE1LjI2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4zLjIuMQorZGF0ZQkyMDAzLjA2LjAzLjA0LjMzLjEzOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMworbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyBzdWIzL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgYnkgdGhlIGZpcnN0IGNvbW1pdCAoYWZmZWN0aW5nIHR3byBmaWxlcykuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCitACisKKworMS4zLjIuMQorbG9nCitAVGhpcyBjaGFuZ2UgYWZmZWN0cyBzdWIzL2RlZmF1bHQgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCBvbiBicmFuY2gKK0JfU1BMSVQuICBOb3RlIHRoYXQgdGhlIGxhdHRlciBmaWxlIGRpZCBub3QgZXZlbiBleGlzdCBvbiB0aGlzIGJyYW5jaAordW50aWwgYWZ0ZXIgc29tZSBvdGhlciBmaWxlcyBoYWQgaGFkIHJldmlzaW9ucyBjb21taXR0ZWQgb24gQl9TUExJVC4KK0AKK3RleHQKK0BhNyA0CisKK1RoaXMgY2hhbmdlIGFmZmVjdHMgc3ViMy9kZWZhdWx0IGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgb24gYnJhbmNoCitCX1NQTElULiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZmlsZSBkaWQgbm90IGV2ZW4gZXhpc3Qgb24gdGhpcyBicmFuY2gKK3VudGlsIGFmdGVyIHNvbWUgb3RoZXIgZmlsZXMgaGFkIGhhZCByZXZpc2lvbnMgY29tbWl0dGVkIG9uIEJfU1BMSVQuCitACisKKworMS4yCitsb2cKK0BGaXJzdCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIHR3byBmaWxlcy4KK0AKK3RleHQKK0BkNiAyCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDMtY3ZzaW1wb3J0LXBhdGNoc2V0cy5zaCBiL3QvdDk2MDMtY3ZzaW1wb3J0LXBhdGNoc2V0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZTY0YjExCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMy1jdnNpbXBvcnQtcGF0Y2hzZXRzLnNoCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorCisjIFN0cnVjdHVyZSBvZiB0aGUgdGVzdCBjdnMgcmVwb3NpdG9yeQorIworIyBNZXNzYWdlICAgRmlsZTpDb250ZW50ICAgICAgICAgQ29tbWl0IFRpbWUKKyMgUmV2IDEgICAgIGE6IDEuMSAgICAgICAgICAgICAgIDIwMDktMDItMjEgMTk6MTE6NDMgKzAxMDAKKyMgUmV2IDIgICAgIGE6IDEuMiAgICBiOiAxLjEgICAgIDIwMDktMDItMjEgMTk6MTE6MTQgKzAxMDAKKyMgUmV2IDMgICAgICAgICAgICAgICBiOiAxLjIgICAgIDIwMDktMDItMjEgMTk6MTE6NDMgKzAxMDAKKyMKKyMgQXMgeW91IGNhbiBzZWUgdGhlIGNvbW1pdCBvZiBSZXYgMyBoYXMgdGhlIHNhbWUgdGltZSBhcworIyBSZXYgMSB0aGlzIGxlYWRzIHRvIGEgYnJva2VuIGltcG9ydCBiZWNhdXNlIG9mIGEgY3ZzcHMKKyMgYnVnLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY3ZzaW1wb3J0IHRlc3RpbmcgZm9yIGNvcnJlY3QgcGF0Y2hzZXQgZXN0aW1hdGlvbicKKy4gLi9saWItY3ZzLnNoCisKK3NldHVwX2N2c190ZXN0X3JlcG9zaXRvcnkgdDk2MDMKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICdpbXBvcnQgd2l0aCBjcmlzcyBjcm9zcyB0aW1lcyBvbiByZXZpc2lvbnMnICcKKworICAgIGdpdCBjdnNpbXBvcnQgLXAiLXgiIC1DIG1vZHVsZS1naXQgbW9kdWxlICYmCisgICAgKGNkIG1vZHVsZS1naXQgJiYKKyAgICAgICAgZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JXMgPiAuLi9hY3R1YWwtbWFzdGVyICYmCisgICAgICAgIGdpdCBsb2cgQX4yLi5BIC0tcHJldHR5PSJmb3JtYXQ6JXMgJWFkIiAtLSA+IC4uL2FjdHVhbC1BICYmCisgICAgICAgIGVjaG8gIiIgPj4gLi4vYWN0dWFsLW1hc3RlciAmJgorCWVjaG8gIiIgPj4gLi4vYWN0dWFsLUEKKyAgICApICYmCisgICAgZWNobyAiUmV2IDQKK1JldiAzCitSZXYgMgorUmV2IDEiID4gZXhwZWN0LW1hc3RlciAmJgorICAgIHRlc3RfY21wIGV4cGVjdC1tYXN0ZXIgYWN0dWFsLW1hc3RlciAmJgorCisgICAgZWNobyAiUmV2IDUgQnJhbmNoIEEgV2VkIE1hciAxMSAxOTowOToxMCAyMDA5ICswMDAwCitSZXYgNCBCcmFuY2ggQSBXZWQgTWFyIDExIDE5OjAzOjUyIDIwMDkgKzAwMDAiID4gZXhwZWN0LUEgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QtQSBhY3R1YWwtQQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk2MDMvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcyBiL3QvdDk2MDMvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJiMTJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMy9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKKyogLXdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL3QvdDk2MDMvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUgYi90L3Q5NjAzL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjliMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAoraGlzdG9yeQordmFsLXRhZ3MKZGlmZiAtLWdpdCBhL3QvdDk2MDMvY3Zzcm9vdC9tb2R1bGUvYSx2IGIvdC90OTYwMy9jdnNyb290L21vZHVsZS9hLHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4ZmQ1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDMvY3Zzcm9vdC9tb2R1bGUvYSx2CkBAIC0wLDAgKzEsNzQgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCUE6MS4yLjAuMjsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4yCitkYXRlCTIwMDkuMDIuMjEuMTguMTEuMTQ7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMTsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwOS4wMi4yMS4xOC4xMS40MzsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDA5LjAzLjExLjE5LjAzLjUyOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4yLjIuMjsKKworMS4yLjIuMgorZGF0ZQkyMDA5LjAzLjExLjE5LjA5LjEwOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4yCitsb2cKK0BSZXYgMgorQAordGV4dAorQDEuMgorQAorCisKKzEuMi4yLjEKK2xvZworQFJldiA0IEJyYW5jaCBBCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4yLjIuMQorQAorCisKKzEuMi4yLjIKK2xvZworQFJldiA1IEJyYW5jaCBBCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4yLjIuMgorQAorCisKKzEuMQorbG9nCitAUmV2IDEKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjEKK0AKZGlmZiAtLWdpdCBhL3QvdDk2MDMvY3Zzcm9vdC9tb2R1bGUvYix2IGIvdC90OTYwMy9jdnNyb290L21vZHVsZS9iLHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI2ODg1NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDMvY3Zzcm9vdC9tb2R1bGUvYix2CkBAIC0wLDAgKzEsOTAgQEAKK2hlYWQJMS4zOworYWNjZXNzOworc3ltYm9scworCUE6MS4yLjAuMjsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDkuMDMuMTEuMTkuMDUuMDg7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjI7CisKKzEuMgorZGF0ZQkyMDA5LjAyLjIxLjE4LjExLjQzOwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDkuMDIuMjEuMTguMTEuMTQ7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwOS4wMy4xMS4xOS4wMy41MjsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMi4yLjI7CisKKzEuMi4yLjIKK2RhdGUJMjAwOS4wMy4xMS4xOS4wOS4xMDsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMworbG9nCitAUmV2IDQKK0AKK3RleHQKK0AxLjMKK0AKKworCisxLjIKK2xvZworQFJldiAzCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4yCitACisKKworMS4yLjIuMQorbG9nCitAUmV2IDQgQnJhbmNoIEEKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjIuMi4xCitACisKKworMS4yLjIuMgorbG9nCitAUmV2IDUgQnJhbmNoIEEKK0AKK3RleHQKK0BkMSAxCithMSAxCisxLjIKK0AKKworCisxLjEKK2xvZworQFJldiAyCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4xCitACmRpZmYgLS1naXQgYS90L3Q5NjA0LWN2c2ltcG9ydC10aW1lc3RhbXBzLnNoIGIvdC90OTYwNC1jdnNpbXBvcnQtdGltZXN0YW1wcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmY0YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwNC1jdnNpbXBvcnQtdGltZXN0YW1wcy5zaApAQCAtMCwwICsxLDcxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGN2c2ltcG9ydCB0aW1lc3RhbXBzJworLiAuL2xpYi1jdnMuc2gKKworc2V0dXBfY3ZzX3Rlc3RfcmVwb3NpdG9yeSB0OTYwNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIHRpbWVzdGFtcHMgYXJlIFVUQyAoVFo9Q1NUNkNEVCknICcKKworCVRaPUNTVDZDRFQgZ2l0IGN2c2ltcG9ydCAtcCIteCIgLUMgbW9kdWxlLTEgbW9kdWxlICYmCisJZ2l0IGN2c2ltcG9ydCAtcCIteCIgLUMgbW9kdWxlLTEgbW9kdWxlICYmCisJKAorCQljZCBtb2R1bGUtMSAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSIlcyAlYWkiCisJKSA+YWN0dWFsLTEgJiYKKwljYXQgPmV4cGVjdC0xIDw8LUVPRiAmJgorCVJldiAxNiAyMDA2LTEwLTI5IDA3OjAwOjAxICswMDAwCisJUmV2IDE1IDIwMDYtMTAtMjkgMDY6NTk6NTkgKzAwMDAKKwlSZXYgMTQgMjAwNi0wNC0wMiAwODowMDowMSArMDAwMAorCVJldiAxMyAyMDA2LTA0LTAyIDA3OjU5OjU5ICswMDAwCisJUmV2IDEyIDIwMDUtMTItMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgMTEgMjAwNS0xMS0wMSAwMDowMDowMCArMDAwMAorCVJldiAxMCAyMDA1LTEwLTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICA5IDIwMDUtMDktMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDggMjAwNS0wOC0wMSAwMDowMDowMCArMDAwMAorCVJldiAgNyAyMDA1LTA3LTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICA2IDIwMDUtMDYtMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDUgMjAwNS0wNS0wMSAwMDowMDowMCArMDAwMAorCVJldiAgNCAyMDA1LTA0LTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICAzIDIwMDUtMDMtMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDIgMjAwNS0wMi0wMSAwMDowMDowMCArMDAwMAorCVJldiAgMSAyMDA1LTAxLTAxIDAwOjAwOjAwICswMDAwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0LTEgYWN0dWFsLTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayB0aW1lc3RhbXBzIHdpdGggYXV0aG9yLXNwZWNpZmljIHRpbWV6b25lcycgJworCisJY2F0ID5jdnMtYXV0aG9ycyA8PC1FT0YgJiYKKwl1c2VyMT1Vc2VyIE9uZSA8dXNlcjFAZG9tYWluLm9yZz4KKwl1c2VyMj1Vc2VyIFR3byA8dXNlcjJAZG9tYWluLm9yZz4gQ1NUNkNEVAorCXVzZXIzPVVzZXIgVGhyZWUgPHVzZXIzQGRvbWFpbi5vcmc+IEVTVDVFRFQKKwl1c2VyND1Vc2VyIEZvdXIgPHVzZXI0QGRvbWFpbi5vcmc+IE1TVDdNRFQKKwlFT0YKKwlnaXQgY3ZzaW1wb3J0IC1wIi14IiAtQSBjdnMtYXV0aG9ycyAtQyBtb2R1bGUtMiBtb2R1bGUgJiYKKwkoCisJCWNkIG1vZHVsZS0yICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9IiVzICVhaSAlYW4iCisJKSA+YWN0dWFsLTIgJiYKKwljYXQgPmV4cGVjdC0yIDw8LUVPRiAmJgorCVJldiAxNiAyMDA2LTEwLTI5IDAxOjAwOjAxIC0wNjAwIFVzZXIgVHdvCisJUmV2IDE1IDIwMDYtMTAtMjkgMDE6NTk6NTkgLTA1MDAgVXNlciBUd28KKwlSZXYgMTQgMjAwNi0wNC0wMiAwMzowMDowMSAtMDUwMCBVc2VyIFR3bworCVJldiAxMyAyMDA2LTA0LTAyIDAxOjU5OjU5IC0wNjAwIFVzZXIgVHdvCisJUmV2IDEyIDIwMDUtMTEtMzAgMTc6MDA6MDAgLTA3MDAgVXNlciBGb3VyCisJUmV2IDExIDIwMDUtMTAtMzEgMTk6MDA6MDAgLTA1MDAgVXNlciBUaHJlZQorCVJldiAxMCAyMDA1LTA5LTMwIDE5OjAwOjAwIC0wNTAwIFVzZXIgVHdvCisJUmV2ICA5IDIwMDUtMDktMDEgMDA6MDA6MDAgKzAwMDAgVXNlciBPbmUKKwlSZXYgIDggMjAwNS0wNy0zMSAxODowMDowMCAtMDYwMCBVc2VyIEZvdXIKKwlSZXYgIDcgMjAwNS0wNi0zMCAyMDowMDowMCAtMDQwMCBVc2VyIFRocmVlCisJUmV2ICA2IDIwMDUtMDUtMzEgMTk6MDA6MDAgLTA1MDAgVXNlciBUd28KKwlSZXYgIDUgMjAwNS0wNS0wMSAwMDowMDowMCArMDAwMCBVc2VyIE9uZQorCVJldiAgNCAyMDA1LTAzLTMxIDE3OjAwOjAwIC0wNzAwIFVzZXIgRm91cgorCVJldiAgMyAyMDA1LTAyLTI4IDE5OjAwOjAwIC0wNTAwIFVzZXIgVGhyZWUKKwlSZXYgIDIgMjAwNS0wMS0zMSAxODowMDowMCAtMDYwMCBVc2VyIFR3bworCVJldiAgMSAyMDA1LTAxLTAxIDAwOjAwOjAwICswMDAwIFVzZXIgT25lCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0LTIgYWN0dWFsLTIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjA0L2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMgYi90L3Q5NjA0L2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYjEyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDQvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS90L3Q5NjA0L2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlIGIvdC90OTYwNC9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI5YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwNC9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2hpc3RvcnkKK3ZhbC10YWdzCmRpZmYgLS1naXQgYS90L3Q5NjA0L2N2c3Jvb3QvbW9kdWxlL2EsdiBiL3QvdDk2MDQvY3Zzcm9vdC9tb2R1bGUvYSx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNjU4YzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjA0L2N2c3Jvb3QvbW9kdWxlL2EsdgpAQCAtMCwwICsxLDI2NCBAQAoraGVhZAkxLjE2OworYWNjZXNzOworc3ltYm9sczsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xNgorZGF0ZQkyMDA2LjEwLjI5LjA3LjAwLjAxOwlhdXRob3IgdXNlcjI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE1OworCisxLjE1CitkYXRlCTIwMDYuMTAuMjkuMDYuNTkuNTk7CWF1dGhvciB1c2VyMjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTQ7CisKKzEuMTQKK2RhdGUJMjAwNi4wNC4wMi4wOC4wMC4wMTsJYXV0aG9yIHVzZXIyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xMzsKKworMS4xMworZGF0ZQkyMDA2LjA0LjAyLjA3LjU5LjU5OwlhdXRob3IgdXNlcjI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjEyOworCisxLjEyCitkYXRlCTIwMDUuMTIuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyNDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTE7CisKKzEuMTEKK2RhdGUJMjAwNS4xMS4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIzOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xMDsKKworMS4xMAorZGF0ZQkyMDA1LjEwLjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjk7CisKKzEuOQorZGF0ZQkyMDA1LjA5LjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjE7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjg7CisKKzEuOAorZGF0ZQkyMDA1LjA4LjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjQ7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjc7CisKKzEuNworZGF0ZQkyMDA1LjA3LjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjM7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjY7CisKKzEuNgorZGF0ZQkyMDA1LjA2LjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjU7CisKKzEuNQorZGF0ZQkyMDA1LjA1LjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjE7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjQ7CisKKzEuNAorZGF0ZQkyMDA1LjA0LjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjQ7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjM7CisKKzEuMworZGF0ZQkyMDA1LjAzLjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjM7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjI7CisKKzEuMgorZGF0ZQkyMDA1LjAyLjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDA1LjAxLjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjE7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjE2Citsb2cKK0BSZXYgMTYKK0AKK3RleHQKK0BSZXYgMTYKK0AKKworCisxLjE1Citsb2cKK0BSZXYgMTUKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMTUKK0AKKworCisxLjE0Citsb2cKK0BSZXYgMTQKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMTQKK0AKKworCisxLjEzCitsb2cKK0BSZXYgMTMKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMTMKK0AKKworCisxLjEyCitsb2cKK0BSZXYgMTIKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMTIKK0AKKworCisxLjExCitsb2cKK0BSZXYgMTEKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMTEKK0AKKworCisxLjEwCitsb2cKK0BSZXYgMTAKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMTAKK0AKKworCisxLjkKK2xvZworQFJldiAgOQorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiA5CitACisKKworMS44Citsb2cKK0BSZXYgIDgKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgOAorQAorCisKKzEuNworbG9nCitAUmV2ICA3CitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDcKK0AKKworCisxLjYKK2xvZworQFJldiAgNgorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiA2CitACisKKworMS41Citsb2cKK0BSZXYgIDUKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgNQorQAorCisKKzEuNAorbG9nCitAUmV2ICA0CitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDQKK0AKKworCisxLjMKK2xvZworQFJldiAgMworQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAzCitACisKKworMS4yCitsb2cKK0BSZXYgIDIKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMgorQAorCisKKzEuMQorbG9nCitAUmV2ICAxCitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDEKK0AKZGlmZiAtLWdpdCBhL3QvdDk3MDAtcGVybC1naXQuc2ggYi90L3Q5NzAwLXBlcmwtZ2l0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwMmMxMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NzAwLXBlcmwtZ2l0LnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTGVhIFdpZW1hbm4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVybCBpbnRlcmZhY2UgKEdpdC5wbSknCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK3BlcmwgLU1UZXN0OjpNb3JlIC1lIDAgMj4vZGV2L251bGwgfHwgeworCXNraXBfYWxsPSJQZXJsIFRlc3Q6Ok1vcmUgdW5hdmFpbGFibGUsIHNraXBwaW5nIHRlc3QiCisJdGVzdF9kb25lCit9CisKKyMgc2V0IHVwIHRlc3QgcmVwb3NpdG9yeQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0IHVwIHRlc3QgcmVwb3NpdG9yeScgXAorICAgICdlY2hvICJ0ZXN0IGZpbGUgMSIgPiBmaWxlMSAmJgorICAgICBlY2hvICJ0ZXN0IGZpbGUgMiIgPiBmaWxlMiAmJgorICAgICBta2RpciBkaXJlY3RvcnkxICYmCisgICAgIGVjaG8gImluIGRpcmVjdG9yeTEiID4+IGRpcmVjdG9yeTEvZmlsZSAmJgorICAgICBta2RpciBkaXJlY3RvcnkyICYmCisgICAgIGVjaG8gImluIGRpcmVjdG9yeTIiID4+IGRpcmVjdG9yeTIvZmlsZSAmJgorICAgICBnaXQgYWRkIC4gJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiAmJgorCisgICAgIGVjaG8gIm5ldyBmaWxlIGluIHN1YmRpciAyIiA+IGRpcmVjdG9yeTIvZmlsZTIgJiYKKyAgICAgZ2l0IGFkZCAuICYmCisgICAgIGdpdCBjb21taXQgLW0gImNvbW1pdCBpbiBkaXJlY3RvcnkyIiAmJgorCisgICAgIGVjaG8gImNoYW5nZWQgZmlsZSAxIiA+IGZpbGUxICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gInNlY29uZCBjb21taXQiICYmCisKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCBjb2xvci50ZXN0LnNsb3QxIGdyZWVuICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5zdHJpbmcgdmFsdWUgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LmR1cHN0cmluZyB2YWx1ZTEgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LmR1cHN0cmluZyB2YWx1ZTIgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LmJvb2x0cnVlIHRydWUgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LmJvb2xmYWxzZSBubyAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuYm9vbG90aGVyIG90aGVyICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5pbnQgMmsgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LnBhdGggIn4vZm9vIiAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QucGF0aGV4cGFuZGVkICIkSE9NRS9mb28iICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5wYXRobXVsdGkgZm9vICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5wYXRobXVsdGkgYmFyCisgICAgICcKKworIyBUaGUgZXh0ZXJuYWwgdGVzdCB3aWxsIG91dHB1dHMgaXRzIG93biBwbGFuCit0ZXN0X2V4dGVybmFsX2hhc190YXA9MQorCit0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFwKKyAgICAnUGVybCBBUEknIFwKKyAgICBwZXJsICIkVEVTVF9ESVJFQ1RPUlkiL3Q5NzAwL3Rlc3QucGwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NzAwL3Rlc3QucGwgYi90L3Q5NzAwL3Rlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzRjZDAxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk3MDAvdGVzdC5wbApAQCAtMCwwICsxLDE0NiBAQAorIyEvdXNyL2Jpbi9wZXJsCit1c2UgbGliIChzcGxpdCgvOi8sICRFTlZ7R0lUUEVSTExJQn0pKTsKKwordXNlIDUuMDA4OwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKKwordXNlIFRlc3Q6Ok1vcmUgcXcobm9fcGxhbik7CisKK0JFR0lOIHsKKwkjIHQ5NzAwLXBlcmwtZ2l0LnNoIGtpY2tzIG9mZiBvdXIgdGVzdGluZywgc28gd2UgaGF2ZSB0byBnbyBmcm9tCisJIyB0aGVyZS4KKwlUZXN0OjpNb3JlLT5idWlsZGVyLT5jdXJyZW50X3Rlc3QoMSk7CisJVGVzdDo6TW9yZS0+YnVpbGRlci0+bm9fZW5kaW5nKDEpOworfQorCit1c2UgQ3dkOwordXNlIEZpbGU6OkJhc2VuYW1lOworCitzdWIgYWRqdXN0X2RpcnNlcCB7CisJbXkgJHBhdGggPSBzaGlmdDsKKwkkcGF0aCA9fiBze1xcfXsvfWc7CisJcmV0dXJuICRwYXRoOworfQorCitCRUdJTiB7IHVzZV9vaygnR2l0JykgfQorCisjIHNldCB1cAorb3VyICRhYnNfcmVwb19kaXIgPSBjd2QoKTsKK29rKG91ciAkciA9IEdpdC0+cmVwb3NpdG9yeShEaXJlY3RvcnkgPT4gIi4iKSwgIm9wZW4gcmVwb3NpdG9yeSIpOworCisjIGNvbmZpZworaXMoJHItPmNvbmZpZygidGVzdC5zdHJpbmciKSwgInZhbHVlIiwgImNvbmZpZyBzY2FsYXI6IHN0cmluZyIpOworaXNfZGVlcGx5KFskci0+Y29uZmlnKCJ0ZXN0LmR1cHN0cmluZyIpXSwgWyJ2YWx1ZTEiLCAidmFsdWUyIl0sCisJICAiY29uZmlnIGFycmF5OiBzdHJpbmciKTsKK2lzKCRyLT5jb25maWcoInRlc3Qubm9uZXhpc3RlbnQiKSwgdW5kZWYsICJjb25maWcgc2NhbGFyOiBub25leGlzdGVudCIpOworaXNfZGVlcGx5KFskci0+Y29uZmlnKCJ0ZXN0Lm5vbmV4aXN0ZW50IildLCBbXSwgImNvbmZpZyBhcnJheTogbm9uZXhpc3RlbnQiKTsKK2lzKCRyLT5jb25maWdfaW50KCJ0ZXN0LmludCIpLCAyMDQ4LCAiY29uZmlnX2ludDogaW50ZWdlciIpOworaXMoJHItPmNvbmZpZ19pbnQoInRlc3Qubm9uZXhpc3RlbnQiKSwgdW5kZWYsICJjb25maWdfaW50OiBub25leGlzdGVudCIpOworb2soJHItPmNvbmZpZ19ib29sKCJ0ZXN0LmJvb2x0cnVlIiksICJjb25maWdfYm9vbDogdHJ1ZSIpOworb2soISRyLT5jb25maWdfYm9vbCgidGVzdC5ib29sZmFsc2UiKSwgImNvbmZpZ19ib29sOiBmYWxzZSIpOworaXMoYWRqdXN0X2RpcnNlcCgkci0+Y29uZmlnX3BhdGgoInRlc3QucGF0aCIpKSwgJHItPmNvbmZpZygidGVzdC5wYXRoZXhwYW5kZWQiKSwKKyAgICJjb25maWdfcGF0aDogfi9mb28gZXhwYW5zaW9uIik7Citpc19kZWVwbHkoWyRyLT5jb25maWdfcGF0aCgidGVzdC5wYXRobXVsdGkiKV0sIFsiZm9vIiwgImJhciJdLAorICAgImNvbmZpZ19wYXRoOiBtdWx0aXBsZSB2YWx1ZXMiKTsKK291ciAkYW5zaV9ncmVlbiA9ICJceDFiWzMybSI7Citpcygkci0+Z2V0X2NvbG9yKCJjb2xvci50ZXN0LnNsb3QxIiwgInJlZCIpLCAkYW5zaV9ncmVlbiwgImdldF9jb2xvciIpOworIyBDYW5ub3QgdGVzdCAkci0+Z2V0X2NvbG9yYm9vbCgiY29sb3IuZm9vIikpIGJlY2F1c2Ugd2UgZG8gbm90CisjIGNvbnRyb2wgd2hldGhlciBvdXIgU1RET1VUIGlzIGEgdGVybWluYWwuCisKKyMgRmFpbHVyZSBjYXNlcyBmb3IgY29uZmlnOgorIyBTYXZlIGFuZCByZXN0b3JlIFNUREVSUjsgd2Ugd2lsbCBwcm9iYWJseSBleHRyYWN0IHRoaXMgaW50byBhCisjICJkaWVzX29rIiBtZXRob2QgYW5kIHBvc3NpYmx5IG1vdmUgdGhlIFNUREVSUiBoYW5kbGluZyB0byBHaXQucG0uCitvcGVuIG91ciAkdG1wc3RkZXJyLCAiPiZTVERFUlIiIG9yIGRpZSAiY2Fubm90IHNhdmUgU1RERVJSIjsKK29wZW4gU1RERVJSLCAiPiIsICIvZGV2L251bGwiIG9yIGRpZSAiY2Fubm90IHJlZGlyZWN0IFNUREVSUiB0byAvZGV2L251bGwiOworaXMoJHItPmNvbmZpZygidGVzdC5kdXBzdHJpbmciKSwgInZhbHVlMiIsICJjb25maWc6IG11bHRpdmFyIik7CitldmFsIHsgJHItPmNvbmZpZ19ib29sKCJ0ZXN0LmJvb2xvdGhlciIpIH07CitvaygkQCwgImNvbmZpZ19ib29sOiBub24tYm9vbGVhbiB2YWx1ZXMgZmFpbCIpOworb3BlbiBTVERFUlIsICI+JiIsICR0bXBzdGRlcnIgb3IgZGllICJjYW5ub3QgcmVzdG9yZSBTVERFUlIiOworCisjIGlkZW50CitsaWtlKCRyLT5pZGVudCgiYVV0aG9yIiksIHFyL15BIFUgVGhvciA8YXV0aG9yXEBleGFtcGxlLmNvbT4gWzAtOV0rIFwrMDAwMCQvLAorICAgICAiaWRlbnQgc2NhbGFyOiBhdXRob3IgKHR5cGUpIik7CitsaWtlKCRyLT5pZGVudCgiY09tbWl0dGVyIiksIHFyL15DIE8gTWl0dGVyIDxjb21taXR0ZXJcQGV4YW1wbGUuY29tPiBbMC05XSsgXCswMDAwJC8sCisgICAgICJpZGVudCBzY2FsYXI6IGNvbW1pdHRlciAodHlwZSkiKTsKK2lzKCRyLT5pZGVudCgiaW52YWxpZCIpLCAiaW52YWxpZCIsICJpZGVudCBzY2FsYXI6IGludmFsaWQgaWRlbnQgc3RyaW5nIChubyBwYXJzaW5nKSIpOworbXkgKCRuYW1lLCAkZW1haWwsICR0aW1lX3R6KSA9ICRyLT5pZGVudCgnYXV0aG9yJyk7Citpc19kZWVwbHkoWyRuYW1lLCAkZW1haWxdLCBbIkEgVSBUaG9yIiwgImF1dGhvclxAZXhhbXBsZS5jb20iXSwKKwkgImlkZW50IGFycmF5OiBhdXRob3IiKTsKK2xpa2UoJHRpbWVfdHosIHFyL1swLTldKyBcKzAwMDAvLCAiaWRlbnQgYXJyYXk6IGF1dGhvciIpOworaXNfZGVlcGx5KFskci0+aWRlbnQoIk5hbWUgPGVtYWlsPiAxMjMgKzAwMDAiKV0sIFsiTmFtZSIsICJlbWFpbCIsICIxMjMgKzAwMDAiXSwKKwkgICJpZGVudCBhcnJheTogaWRlbnQgc3RyaW5nIik7Citpc19kZWVwbHkoWyRyLT5pZGVudCgiaW52YWxpZCIpXSwgW10sICJpZGVudCBhcnJheTogaW52YWxpZCBpZGVudCBzdHJpbmciKTsKKworIyBpZGVudF9wZXJzb24KK2lzKCRyLT5pZGVudF9wZXJzb24oImFVdGhvciIpLCAiQSBVIFRob3IgPGF1dGhvclxAZXhhbXBsZS5jb20+IiwKKyAgICJpZGVudF9wZXJzb246IGF1dGhvciAodHlwZSkiKTsKK2lzKCRyLT5pZGVudF9wZXJzb24oIk5hbWUgPGVtYWlsPiAxMjMgKzAwMDAiKSwgIk5hbWUgPGVtYWlsPiIsCisgICAiaWRlbnRfcGVyc29uOiBpZGVudCBzdHJpbmciKTsKK2lzKCRyLT5pZGVudF9wZXJzb24oIk5hbWUiLCAiZW1haWwiLCAiMTIzICswMDAwIiksICJOYW1lIDxlbWFpbD4iLAorICAgImlkZW50X3BlcnNvbjogYXJyYXkiKTsKKworIyBvYmplY3RzIGFuZCBoYXNoZXMKK29rKG91ciAkZmlsZTFoYXNoID0gJHItPmNvbW1hbmRfb25lbGluZSgncmV2LXBhcnNlJywgIkhFQUQ6ZmlsZTEiKSwgIihnZXQgZmlsZSBoYXNoKSIpOworbXkgJHRtcGZpbGUgPSAiZmlsZS50bXAiOworb3BlbiBURU1QRklMRSwgIis+JHRtcGZpbGUiIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkdG1wZmlsZTogJCEiOworaXMoJHItPmNhdF9ibG9iKCRmaWxlMWhhc2gsIFwqVEVNUEZJTEUpLCAxNSwgImNhdF9ibG9iOiBzaXplIik7CitvdXIgJGJsb2Jjb250ZW50czsKK3sgbG9jYWwgJC87IHNlZWsgVEVNUEZJTEUsIDAsIDA7ICRibG9iY29udGVudHMgPSA8VEVNUEZJTEU+OyB9CitpcygkYmxvYmNvbnRlbnRzLCAiY2hhbmdlZCBmaWxlIDFcbiIsICJjYXRfYmxvYjogZGF0YSIpOworY2xvc2UgVEVNUEZJTEUgb3IgZGllICJGYWlsZWQgd3JpdGluZyB0byAkdG1wZmlsZTogJCEiOworaXMoR2l0OjpoYXNoX29iamVjdCgiYmxvYiIsICR0bXBmaWxlKSwgJGZpbGUxaGFzaCwgImhhc2hfb2JqZWN0OiByb3VuZHRyaXAiKTsKK29wZW4gVEVNUEZJTEUsICI+JHRtcGZpbGUiIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkdG1wZmlsZTogJCEiOworcHJpbnQgVEVNUEZJTEUgbXkgJHRlc3RfdGV4dCA9ICJ0ZXN0IGJsb2IsIHRvIGJlIGluc2VydGVkXG4iOworY2xvc2UgVEVNUEZJTEUgb3IgZGllICJGYWlsZWQgd3JpdGluZyB0byAkdG1wZmlsZTogJCEiOworbGlrZShvdXIgJG5ld2hhc2ggPSAkci0+aGFzaF9hbmRfaW5zZXJ0X29iamVjdCgkdG1wZmlsZSksIHFyL1swLTlhLWZBLUZdezQwfS8sCisgICAgICJoYXNoX2FuZF9pbnNlcnRfb2JqZWN0OiByZXR1cm5zIGhhc2giKTsKK29wZW4gVEVNUEZJTEUsICIrPiR0bXBmaWxlIiBvciBkaWUgIkNhbid0IG9wZW4gJHRtcGZpbGU6ICQhIjsKK2lzKCRyLT5jYXRfYmxvYigkbmV3aGFzaCwgXCpURU1QRklMRSksIGxlbmd0aCAkdGVzdF90ZXh0LCAiY2F0X2Jsb2I6IHJvdW5kdHJpcCBzaXplIik7Cit7IGxvY2FsICQvOyBzZWVrIFRFTVBGSUxFLCAwLCAwOyAkYmxvYmNvbnRlbnRzID0gPFRFTVBGSUxFPjsgfQoraXMoJGJsb2Jjb250ZW50cywgJHRlc3RfdGV4dCwgImNhdF9ibG9iOiByb3VuZHRyaXAgZGF0YSIpOworY2xvc2UgVEVNUEZJTEU7Cit1bmxpbmsgJHRtcGZpbGU7CisKKyMgcGF0aHMKK2lzKCRyLT5yZXBvX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLy5naXQiLCAicmVwb19wYXRoIik7Citpcygkci0+d2NfcGF0aCwgJGFic19yZXBvX2RpciAuICIvIiwgIndjX3BhdGgiKTsKK2lzKCRyLT53Y19zdWJkaXIsICIiLCAid2Nfc3ViZGlyIGluaXRpYWwiKTsKKyRyLT53Y19jaGRpcigiZGlyZWN0b3J5MSIpOworaXMoJHItPndjX3N1YmRpciwgImRpcmVjdG9yeTEiLCAid2Nfc3ViZGlyIGFmdGVyIHdjX2NoZGlyIik7Citpcygkci0+Y29uZmlnKCJ0ZXN0LnN0cmluZyIpLCAidmFsdWUiLCAiY29uZmlnIGFmdGVyIHdjX2NoZGlyIik7CisKKyMgT2JqZWN0IGdlbmVyYXRpb24gaW4gc3ViIGRpcmVjdG9yeQorY2hkaXIoImRpcmVjdG9yeTIiKTsKK215ICRyMiA9IEdpdC0+cmVwb3NpdG9yeSgpOworaXMoJHIyLT5yZXBvX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLy5naXQiLCAicmVwb19wYXRoICgyKSIpOworaXMoJHIyLT53Y19wYXRoLCAkYWJzX3JlcG9fZGlyIC4gIi8iLCAid2NfcGF0aCAoMikiKTsKK2lzKCRyMi0+d2Nfc3ViZGlyLCAiZGlyZWN0b3J5Mi8iLCAid2Nfc3ViZGlyIGluaXRpYWwgKDIpIik7CisKKyMgY29tbWFuZHMgaW4gc3ViIGRpcmVjdG9yeQorbXkgJGxhc3RfY29tbWl0ID0gJHIyLT5jb21tYW5kX29uZWxpbmUocXcocmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKTsKK2xpa2UoJGxhc3RfY29tbWl0LCBxci9eWzAtOWEtZkEtRl17NDB9JC8sICdyZXYtcGFyc2UgcmV0dXJuZWQgaGFzaCcpOworbXkgJGRpcl9jb21taXQgPSAkcjItPmNvbW1hbmRfb25lbGluZSgnbG9nJywgJy1uMScsICctLXByZXR0eT1mb3JtYXQ6JUgnLCAnLicpOworaXNudCgkbGFzdF9jb21taXQsICRkaXJfY29tbWl0LCAnbG9nIC4gZG9lcyBub3Qgc2hvdyBsYXN0IGNvbW1pdCcpOworCisjIGNvbW1hbmRzIG91dHNpZGUgd29ya2luZyB0cmVlCitjaGRpcigkYWJzX3JlcG9fZGlyIC4gJy8uLicpOworbXkgJHIzID0gR2l0LT5yZXBvc2l0b3J5KERpcmVjdG9yeSA9PiAkYWJzX3JlcG9fZGlyKTsKK215ICR0bXBmaWxlMyA9ICIkYWJzX3JlcG9fZGlyL2ZpbGUzLnRtcCI7CitvcGVuIFRFTVBGSUxFMywgIis+JHRtcGZpbGUzIiBvciBkaWUgIkNhbid0IG9wZW4gJHRtcGZpbGUzOiAkISI7CitpcygkcjMtPmNhdF9ibG9iKCRmaWxlMWhhc2gsIFwqVEVNUEZJTEUzKSwgMTUsICJjYXRfYmxvYihvdXRzaWRlKTogc2l6ZSIpOworY2xvc2UgVEVNUEZJTEUzOwordW5saW5rICR0bXBmaWxlMzsKK2NoZGlyKCRhYnNfcmVwb19kaXIpOworCisjIHVucXVvdGluZyBwYXRocworaXMoR2l0Ojp1bnF1b3RlX3BhdGgoJ2FiYycpLCAnYWJjJywgJ3VucXVvdGUgdW5xdW90ZWQgcGF0aCcpOworaXMoR2l0Ojp1bnF1b3RlX3BhdGgoJyJhYmMgZGVmIicpLCAnYWJjIGRlZicsICd1bnF1b3RlIHNpbXBsZSBxdW90ZWQgcGF0aCcpOworaXMoR2l0Ojp1bnF1b3RlX3BhdGgoJyJhYmNcIlxcXFwgXGFcYlx0XG5cdlxmXHJcMDAxXDA0MCInKSwKKwkJICAgICAiYWJjXCJcXCBceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwMSAiLAorCQkgICAgICd1bnF1b3RlIGVzY2FwZSBzZXF1ZW5jZXMnKTsKKworcHJpbnRmICIxLi4lZFxuIiwgVGVzdDo6TW9yZS0+YnVpbGRlci0+Y3VycmVudF90ZXN0OworCitteSAkaXNfcGFzc2luZyA9IGV2YWwgeyBUZXN0OjpNb3JlLT5pc19wYXNzaW5nIH07CitleGl0KCRpc19wYXNzaW5nID8gMCA6IDEpIHVubGVzcyAkQCA9fiAvQ2FuJ3QgbG9jYXRlIG9iamVjdCBtZXRob2QvOwpkaWZmIC0tZ2l0IGEvdC90OTgwMC1naXQtcDQtYmFzaWMuc2ggYi90L3Q5ODAwLWdpdC1wNC1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOThjMWRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwMC1naXQtcDQtYmFzaWMuc2gKQEAgLTAsMCArMSwzMjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcDQgZmlsZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMSIgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZTIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBnaXQgcDQgY2xvbmUnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlcG90IHR5cG8gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvZGVwb3QgMj5lcnJzICYmCisJZ3JlcCAiRGVwb3QgcGF0aHMgbXVzdCBzdGFydCB3aXRoIiBlcnJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBjbG9uZSBAYWxsJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IHN5bmMgdW5pbml0aWFsaXplZCByZXBvJyAnCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3luYyAyPmVycnMgJiYKKwkJdGVzdF9pMThuZ3JlcCAiUGVyaGFwcyB5b3UgbmV2ZXIgZGlkIiBlcnJzCisJKQorJworCisjCisjIENyZWF0ZSBhIGdpdCByZXBvIGJ5IGhhbmQuICBBZGQgYSBjb21taXQgc28gdGhhdCBIRUFEIGlzIHZhbGlkLgorIyBUZXN0IGltcG9ydHMgYSBuZXcgcDQgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGdpdCBicmFuY2guCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgc3luYyBuZXcgYnJhbmNoJyAnCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCBoZWFkICYmCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPXJlZnMvcmVtb3Rlcy9wNC9kZXBvdCAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tb25lbGluZSBwNC9kZXBvdCA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHdvIGRpcnMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciBzdWIxIHN1YjIgJiYKKwkJZWNobyBzdWIxL2YxID5zdWIxL2YxICYmCisJCWVjaG8gc3ViMi9mMiA+c3ViMi9mMiAmJgorCQlwNCBhZGQgc3ViMS9mMSAmJgorCQlwNCBzdWJtaXQgLWQgInN1YjEvZjEiICYmCisJCXA0IGFkZCBzdWIyL2YyICYmCisJCXA0IHN1Ym1pdCAtZCAic3ViMi9mMiIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9zdWIxIC8vZGVwb3Qvc3ViMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBscy1maWxlcyA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCQlnaXQgbG9nIC0tb25lbGluZSBwNC9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHR3byBkaXJzLCBAYWxsJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBzdWIxL2YzID5zdWIxL2YzICYmCisJCXA0IGFkZCBzdWIxL2YzICYmCisJCXA0IHN1Ym1pdCAtZCAic3ViMS9mMyIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9zdWIxQGFsbCAvL2RlcG90L3N1YjJAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxzLWZpbGVzID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHA0L21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHdvIGRpcnMsIEBhbGwsIGNvbmZsaWN0aW5nIGZpbGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBzdWIyL2YzID5zdWIyL2YzICYmCisJCXA0IGFkZCBzdWIyL2YzICYmCisJCXA0IHN1Ym1pdCAtZCAic3ViMi9mMyIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9zdWIxQGFsbCAvL2RlcG90L3N1YjJAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxzLWZpbGVzID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHA0L21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBsaW5lcyAmJgorCQllY2hvIHN1YjIvZjMgPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGYzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0d28gZGlycywgZWFjaCBlZGl0ZWQgYnkgc3VibWl0LCBzaW5nbGUgZ2l0IGNvbW1pdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gc3ViMS9mNCA+c3ViMS9mNCAmJgorCQlwNCBhZGQgc3ViMS9mNCAmJgorCQllY2hvIHN1YjIvZjQgPnN1YjIvZjQgJiYKKwkJcDQgYWRkIHN1YjIvZjQgJiYKKwkJcDQgc3VibWl0IC1kICJzdWIxL2Y0IGFuZCBzdWIyL2Y0IgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L3N1YjFAYWxsIC8vZGVwb3Qvc3ViMkBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbHMtZmlsZXMgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgbGluZXMgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IGxpbmVzCisJKQorJworCityZXZpc2lvbl9yYW5nZXM9IjIwMDAvMDEvMDEsI2hlYWQgXAorCQkgMSwyMDgwLzAxLzAxIFwKKwkJIDIwMDAvMDEvMDEsMjA4MC8wMS8wMSBcCisJCSAyMDAwLzAxLzAxLDEwMDAgXAorCQkgMSwxMDAwIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBub24tbnVtZXJpYyByZXZpc2lvbiByYW5nZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlmb3IgciBpbiAkcmV2aXNpb25fcmFuZ2VzCisJZG8KKwkJcm0gLWZyICIkZ2l0IiAmJgorCQl0ZXN0ICEgLWQgIiRnaXQiICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAJHIgJiYKKwkJKAorCQkJY2QgIiRnaXQiICYmCisJCQlnaXQgbHMtZmlsZXMgPmxpbmVzICYmCisJCQl0ZXN0X2xpbmVfY291bnQgPSA4IGxpbmVzCisJCSkKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZGF0ZSByYW5nZSwgZXhjbHVkaW5nIHNvbWUgY2hhbmdlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWJlZm9yZT0kKGRhdGUgKyVZLyVtLyVkOiVIOiVNOiVTKSAmJgorCXNsZWVwIDIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQk6PmRhdGVfcmFuZ2VfdGVzdCAmJgorCQlwNCBhZGQgZGF0ZV9yYW5nZV90ZXN0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkaW5nIGZpbGUiCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAMSwkYmVmb3JlICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGF0ZV9yYW5nZV90ZXN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGl0IHdoZW4gcDQgZmFpbHMgdG8gcHJvZHVjZSBtYXJzaGFsZWQgb3V0cHV0JyAnCisJbWtkaXIgYmFkcDRkaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIGJhZHA0ZGlyL3A0ICYmIHJtZGlyIGJhZHA0ZGlyIiAmJgorCWNhdCA+YmFkcDRkaXIvcDQgPDwtRU9GICYmCisJIyEkU0hFTExfUEFUSAorCWV4aXQgMQorCUVPRgorCWNobW9kIDc1NSBiYWRwNGRpci9wNCAmJgorCSgKKwkJUEFUSD0iJFRSQVNIX0RJUkVDVE9SWS9iYWRwNGRpcjokUEFUSCIgJiYKKwkJZXhwb3J0IFBBVEggJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgPmVycnMgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICEgVHJhY2ViYWNrIGVycnMKKycKKworIyBIaWRlIGEgZmlsZSBmcm9tIHA0ZCwgbWFrZSBzdXJlIHdlIGNhdGNoIGl0cyBjb21wbGFpbnQuICBUaGlzIHdvbid0IGZhaWwgaW4KKyMgcDQgY2hhbmdlcywgZmlsZXMsIG9yIGRlc2NyaWJlOyBqdXN0IGluIHA0IHByaW50LiAgSWYgUDRDTElFTlQgaXMgdW5zZXQsIHRoZQorIyBtZXNzYWdlIHdpbGwgaW5jbHVkZSAiTGlicmFyaWFuIGNoZWNrb3V0Ii4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXQgZ3JhY2VmdWxseSBmb3IgcDQgc2VydmVyIGVycm9ycycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgXCIkZGJcIi9kZXBvdC9maWxlMSx2LGhpZGRlbiBcIiRkYlwiL2RlcG90L2ZpbGUxLHYiICYmCisJbXYgIiRkYiIvZGVwb3QvZmlsZTEsdiAiJGRiIi9kZXBvdC9maWxlMSx2LGhpZGRlbiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QDEgPm91dCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkVycm9yIGZyb20gcDQgcHJpbnQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWJhcmUgc2hvdWxkIG1ha2UgYSBiYXJlIHJlcG9zaXRvcnknICcKKwlybSAtcmYgIiRnaXQiICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1iYXJlIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0ICYmCisJCWdpdCBjb25maWcgLS1nZXQgLS1ib29sIGNvcmUuYmFyZSB0cnVlICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3A0L21hc3RlciAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9wNC9IRUFEICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFECisJKQorJworCisjIFNsZWVwIGEgYml0IHNvIHRoYXQgdGhlIHRvcC1tb3N0IHA0IGNoYW5nZSBkaWQgbm90IGhhcHBlbiAibm93Ii4gIFRoZW4KKyMgaW1wb3J0IHRoZSByZXBvIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgaW5pdGlhbCBpbXBvcnQgaGFzIHRoZSBzYW1lIHRpbWUKKyMgYXMgdGhlIHRvcC1tb3N0IGNoYW5nZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgaW1wb3J0IHRpbWUgZnJvbSB0b3AgY2hhbmdlIHRpbWUnICcKKwlwNGNoYW5nZT0kKHA0IC1HIGNoYW5nZXMgLW0gMSAvL2RlcG90Ly4uLiB8IG1hcnNoYWxfZHVtcCBjaGFuZ2UpICYmCisJcDR0aW1lPSQocDQgLUcgY2hhbmdlcyAtbSAxIC8vZGVwb3QvLi4uIHwgbWFyc2hhbF9kdW1wIHRpbWUpICYmCisJc2xlZXAgMyAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXR0aW1lPSQoZ2l0IHNob3cgLXMgLS1yYXcgLS1wcmV0dHk9Zm9ybWF0OiVhdCBIRUFEKSAmJgorCQllY2hvICRwNHRpbWUgJGdpdHRpbWUgJiYKKwkJdGVzdCAkcDR0aW1lID0gJGdpdHRpbWUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucmVzb2x2YWJsZSBob3N0IGluIFA0UE9SVCBzaG91bGQgZGlzcGxheSBlcnJvcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlQNFBPUlQ9bm9zdWNoaG9zdDo2NTUzNyAmJgorCQlleHBvcnQgUDRQT1JUICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3luYyA+b3V0IDI+ZXJyICYmCisJCWdyZXAgImNvbm5lY3QgdG8gbm9zdWNoaG9zdCIgZXJyCisJKQorJworCisjIFRlc3QgZm9sbG93aW5nIHNjZW5hcmlvczoKKyMgICAtIFdpdGhvdXQgIi5naXQvaG9va3MvcDQtcHJlLXN1Ym1pdCIgLCBzdWJtaXQgc2hvdWxkIGNvbnRpbnVlCisjICAgLSBXaXRoIHRoZSBob29rIHJldHVybmluZyAwLCBzdWJtaXQgc2hvdWxkIGNvbnRpbnVlCisjICAgLSBXaXRoIHRoZSBob29rIHJldHVybmluZyAxLCBzdWJtaXQgc2hvdWxkIGFib3J0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gaG9vayBwNC1wcmUtc3VibWl0IGJlZm9yZSBzdWJtaXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5oZWxsby50eHQgJiYKKwkJZ2l0IGFkZCBoZWxsby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGhlbGxvLnR4dCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tZHJ5LXJ1biA+b3V0ICYmCisJCWdyZXAgIldvdWxkIGFwcGx5IiBvdXQgJiYKKwkJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCQl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wNC1wcmUtc3VibWl0IDw8LVxFT0YgJiYKKwkJZXhpdCAwCisJCUVPRgorCQlnaXQgcDQgc3VibWl0IC0tZHJ5LXJ1biA+b3V0ICYmCisJCWdyZXAgIldvdWxkIGFwcGx5IiBvdXQgJiYKKwkJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcDQtcHJlLXN1Ym1pdCA8PC1cRU9GICYmCisJCWV4aXQgMQorCQlFT0YKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCAtLWRyeS1ydW4gPmVycnMgMj4mMSAmJgorCQkhIGdyZXAgIldvdWxkIGFwcGx5IiBlcnJzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgZnJvbSBkZXRhY2hlZCBoZWFkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjaGVja291dCBwNC9tYXN0ZXIgJiYKKwkJPmRldGFjaGVkX2hlYWRfdGVzdCAmJgorCQlnaXQgYWRkIGRldGFjaGVkX2hlYWRfdGVzdCAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgZGV0YWNoZWRfaGVhZCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCWdpdCBwNCByZWJhc2UgJiYKKwkJZ2l0IGxvZyBwNC9tYXN0ZXIgfCBncmVwIGRldGFjaGVkX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBmcm9tIHdvcmt0cmVlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLi4vd29ya3RyZWUtdGVzdAorCSkgJiYKKwkoCisJCWNkICIkZ2l0Ly4uL3dvcmt0cmVlLXRlc3QiICYmCisJCXRlc3RfY29tbWl0ICJ3b3JrdHJlZS1jb21taXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHdvcmt0cmVlLWNvbW1pdC50CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDEtZ2l0LXA0LWJyYW5jaC5zaCBiL3QvdDk4MDEtZ2l0LXA0LWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42N2ZmMjcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwMS1naXQtcDQtYnJhbmNoLnNoCkBAIC0wLDAgKzEsNzQ1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHRlc3RzIGZvciBwNCBicmFuY2hlcycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKKyMKKyMgMTogLy9kZXBvdC9tYWluL2YxCisjIDI6IC8vZGVwb3QvbWFpbi9mMgorIyAzOiBpbnRlZ3JhdGUgLy9kZXBvdC9tYWluLy4uLiAtPiAvL2RlcG90L2JyYW5jaDEvLi4uCisjIDQ6IC8vZGVwb3QvbWFpbi9mNAorIyA1OiAvL2RlcG90L2JyYW5jaDEvZjUKKyMgLjogbmFtZWQgYnJhbmNoIGJyYW5jaDIKKyMgNjogaW50ZWdyYXRlIC1iIGJyYW5jaDIKKyMgNzogLy9kZXBvdC9icmFuY2gyL2Y3CisjIDg6IC8vZGVwb3QvbWFpbi9mOAorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgcDQgYnJhbmNoZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBtYWluICYmCisKKwkJZWNobyBmMSA+bWFpbi9mMSAmJgorCQlwNCBhZGQgbWFpbi9mMSAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjEiICYmCisKKwkJZWNobyBmMiA+bWFpbi9mMiAmJgorCQlwNCBhZGQgbWFpbi9mMiAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjIiICYmCisKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvbWFpbi8uLi4gLy9kZXBvdC9icmFuY2gxLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgImludGVncmF0ZSBtYWluIHRvIGJyYW5jaDEiICYmCisKKwkJZWNobyBmNCA+bWFpbi9mNCAmJgorCQlwNCBhZGQgbWFpbi9mNCAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjQiICYmCisKKwkJZWNobyBmNSA+YnJhbmNoMS9mNSAmJgorCQlwNCBhZGQgYnJhbmNoMS9mNSAmJgorCQlwNCBzdWJtaXQgLWQgImJyYW5jaDEvZjUiICYmCisKKwkJcDQgYnJhbmNoIC1pIDw8LUVPRiAmJgorCQlCcmFuY2g6IGJyYW5jaDIKKwkJVmlldzogLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaDIvLi4uCisJCUVPRgorCisJCXA0IGludGVncmF0ZSAtYiBicmFuY2gyICYmCisJCXA0IHN1Ym1pdCAtZCAiaW50ZWdyYXRlIG1haW4gdG8gYnJhbmNoMiIgJiYKKworCQllY2hvIGY3ID5icmFuY2gyL2Y3ICYmCisJCXA0IGFkZCBicmFuY2gyL2Y3ICYmCisJCXA0IHN1Ym1pdCAtZCAiYnJhbmNoMi9mNyIgJiYKKworCQllY2hvIGY4ID5tYWluL2Y4ICYmCisJCXA0IGFkZCBtYWluL2Y4ICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mOCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBtYWluLCBubyBicmFuY2ggZGV0ZWN0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9tYWluQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLWFsbCAmJgorCQlnaXQgcmV2LWxpc3QgbWFzdGVyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgYnJhbmNoMSwgbm8gYnJhbmNoIGRldGVjdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvYnJhbmNoMUBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSAtLWdyYXBoIC0tZGVjb3JhdGUgLS1hbGwgJiYKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGJyYW5jaDIsIG5vIGJyYW5jaCBkZXRlY3Rpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2JyYW5jaDJAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgLS1ncmFwaCAtLWRlY29yYXRlIC0tYWxsICYmCisJCWdpdCByZXYtbGlzdCBtYXN0ZXIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBkZXBvdCwgbm8gYnJhbmNoIGRldGVjdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgLS1ncmFwaCAtLWRlY29yYXRlIC0tYWxsICYmCisJCWdpdCByZXYtbGlzdCBtYXN0ZXIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDggd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBkZXBvdCwgYnJhbmNoIGRldGVjdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKworCQlnaXQgbG9nIC0tb25lbGluZSAtLWdyYXBoIC0tZGVjb3JhdGUgLS1hbGwgJiYKKworCQkjIDQgbWFpbiBjb21taXRzCisJCWdpdCByZXYtbGlzdCBtYXN0ZXIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgd2MgJiYKKworCQkjIDMgbWFpbiwgMSBpbnRlZ3JhdGUsIDEgb24gYnJhbmNoMgorCQlnaXQgcmV2LWxpc3QgcDQvZGVwb3QvYnJhbmNoMiA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSB3YyAmJgorCisJCSMgbm8gYnJhbmNoMSwgc2luY2Ugbm8gcDQgYnJhbmNoIGNyZWF0ZWQgZm9yIGl0CisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiBwNC9kZXBvdC9icmFuY2gxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgZGVwb3QsIGJyYW5jaCBkZXRlY3Rpb24sIGJyYW5jaExpc3QgYnJhbmNoIGRlZmluaXRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgbWFpbjpicmFuY2gxICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCisJCWdpdCBsb2cgLS1vbmVsaW5lIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLWFsbCAmJgorCisJCSMgNCBtYWluIGNvbW1pdHMKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCB3YyAmJgorCisJCSMgMyBtYWluLCAxIGludGVncmF0ZSwgMSBvbiBicmFuY2gyCisJCWdpdCByZXYtbGlzdCBwNC9kZXBvdC9icmFuY2gyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA1IHdjICYmCisKKwkJIyAyIG1haW4sIDEgaW50ZWdyYXRlLCAxIG9uIGJyYW5jaDEKKwkJZ2l0IHJldi1saXN0IHA0L2RlcG90L2JyYW5jaDEgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RhcnQgcDRkJyAnCisJc3RvcF9hbmRfY2xlYW51cF9wNGQgJiYKKwlzdGFydF9wNGQKKycKKworIworIyAxOiAvL2RlcG90L2JyYW5jaDEvZmlsZTEKKyMgICAgLy9kZXBvdC9icmFuY2gxL2ZpbGUyCisjIDI6IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvLi4uIC0+IC8vZGVwb3QvYnJhbmNoMi8uLi4KKyMgMzogLy9kZXBvdC9icmFuY2gxL2ZpbGUzCisjIDQ6IC8vZGVwb3QvYnJhbmNoMS9maWxlMiAoZWRpdCkKKyMgNTogaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi4gLT4gLy9kZXBvdC9icmFuY2gzLy4uLgorIworIyMgQ3JlYXRlIGEgc2ltcGxlIGJyYW5jaCBzdHJ1Y3R1cmUgaW4gUDQgZGVwb3QuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc2ltcGxlIHA0IGJyYW5jaGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgYnJhbmNoMSAmJgorCQljZCBicmFuY2gxICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCWVjaG8gZmlsZTIgPmZpbGUyICYmCisJCXA0IGFkZCBmaWxlMSBmaWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgIkNyZWF0ZSBicmFuY2gxIiAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxLy4uLiAvL2RlcG90L2JyYW5jaDIvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiSW50ZWdyYXRlIGJyYW5jaDIgZnJvbSBicmFuY2gxIiAmJgorCQllY2hvIGZpbGUzID5maWxlMyAmJgorCQlwNCBhZGQgZmlsZTMgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZmlsZTMgaW4gYnJhbmNoMSIgJiYKKwkJcDQgb3BlbiBmaWxlMiAmJgorCQllY2hvIHVwZGF0ZSA+PmZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAidXBkYXRlIGZpbGUyIGluIGJyYW5jaDEiICYmCisJCXA0IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvLi4uIC8vZGVwb3QvYnJhbmNoMy8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgYnJhbmNoMyBmcm9tIGJyYW5jaDEiCisJKQorJworCisjIENvbmZpZ3VyZSBicmFuY2hlcyB0aHJvdWdoIGdpdC1jb25maWcgYW5kIGNsb25lIHRoZW0uCisjIEFsbCBmaWxlcyBhcmUgdGVzdGVkIHRvIG1ha2Ugc3VyZSBicmFuY2hlcyB3ZXJlIGNsb25lZCBjb3JyZWN0bHkuCisjIEZpbmFsbHksIG1ha2UgYW4gdXBkYXRlIHRvIGJyYW5jaDEgb24gUDQgc2lkZSB0byBjaGVjayBpZiBpdCBpcyBpbXBvcnRlZAorIyBjb3JyZWN0bHkgYnkgZ2l0IHA0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGNsb25lIHNpbXBsZSBicmFuY2hlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdCAtZiBmaWxlMSAmJgorCQl0ZXN0IC1mIGZpbGUyICYmCisJCXRlc3QgLWYgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3QgLWYgZmlsZTEgJiYKKwkJdGVzdCAtZiBmaWxlMiAmJgorCQl0ZXN0ICEgLWYgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDMgJiYKKwkJdGVzdCAtZiBmaWxlMSAmJgorCQl0ZXN0IC1mIGZpbGUyICYmCisJCXRlc3QgLWYgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJY2QgIiRjbGkiICYmCisJCWNkIGJyYW5jaDEgJiYKKwkJcDQgZWRpdCBmaWxlMiAmJgorCQllY2hvIGZpbGUyXyA+PmZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAidXBkYXRlIGZpbGUyIGluIGJyYW5jaDEiICYmCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJZ2l0IHA0IHJlYmFzZSAmJgorCQlncmVwIGZpbGUyXyBmaWxlMgorCSkKKycKKworIyBDcmVhdGUgYSBjb21wbGV4IGJyYW5jaCBzdHJ1Y3R1cmUgaW4gUDQgZGVwb3QgdG8gY2hlY2sgaWYgdGhleSBhcmUgY29ycmVjdGx5CisjIGNsb25lZC4gVGhlIGJyYW5jaGVzIGFyZSBjcmVhdGVkIGZyb20gb2xkZXIgY2hhbmdlbGlzdHMgdG8gY2hlY2sgaWYgZ2l0IHA0IGlzCisjIGFibGUgdG8gY29ycmVjdGx5IGRldGVjdCB0aGVtLgorIyBUaGUgZmluYWwgZXhwZWN0ZWQgc3RydWN0dXJlIGlzOgorIyBgYnJhbmNoMQorIyB8IGAtIGZpbGUxCisjIHwgYC0gZmlsZTIgKHVwZGF0ZWQpCisjIHwgYC0gZmlsZTMKKyMgYGJyYW5jaDIKKyMgfCBgLSBmaWxlMQorIyB8IGAtIGZpbGUyCisjIGBicmFuY2gzCisjIHwgYC0gZmlsZTEKKyMgfCBgLSBmaWxlMiAodXBkYXRlZCkKKyMgfCBgLSBmaWxlMworIyBgYnJhbmNoNAorIyB8IGAtIGZpbGUxCisjIHwgYC0gZmlsZTIKKyMgYGJyYW5jaDUKKyMgICBgLSBmaWxlMQorIyAgIGAtIGZpbGUyCisjICAgYC0gZmlsZTMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBhZGQgY29tcGxleCBicmFuY2hlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWNoYW5nZWxpc3Q9JChwNCBjaGFuZ2VzIC1tMSAvL2RlcG90Ly4uLiB8IGN1dCAtZCIgIiAtZjIpICYmCisJCWNoYW5nZWxpc3Q9JCgoJGNoYW5nZWxpc3QgLSA1KSkgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi5AJGNoYW5nZWxpc3QgLy9kZXBvdC9icmFuY2g0Ly4uLiAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBicmFuY2g0IGZyb20gYnJhbmNoMUAke2NoYW5nZWxpc3R9IiAmJgorCQljaGFuZ2VsaXN0PSQoKCRjaGFuZ2VsaXN0ICsgMikpICYmCisJCXA0IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvLi4uQCRjaGFuZ2VsaXN0IC8vZGVwb3QvYnJhbmNoNS8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgYnJhbmNoNSBmcm9tIGJyYW5jaDFAJHtjaGFuZ2VsaXN0fSIKKwkpCisnCisKKyMgQ29uZmlndXJlIGJyYW5jaGVzIHRocm91Z2ggZ2l0LWNvbmZpZyBhbmQgY2xvbmUgdGhlbS4gZ2l0IHA0IHdpbGwgb25seSBiZSBhYmxlCisjIHRvIGNsb25lIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUgaWYgaXQgaXMgYWJsZSB0byBkZXRlY3QgdGhlIG9yaWdpbiBjaGFuZ2VsaXN0CisjIG9mIGVhY2ggYnJhbmNoLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGNsb25lIGNvbXBsZXggYnJhbmNoZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gyICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gzICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g0ICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g1ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9naXQtcDQtdG1wCisJKQorJworCisjIE1vdmUgYnJhbmNoMy9maWxlMyB0byBicmFuY2g0L2ZpbGUzIGluIGEgc2luZ2xlIGNoYW5nZWxpc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBzdWJtaXQgdG8gdHdvIGJyYW5jaGVzIGluIGEgc2luZ2xlIGNoYW5nZWxpc3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gzL2ZpbGUzIC8vZGVwb3QvYnJhbmNoNC9maWxlMyAmJgorCQlwNCBkZWxldGUgLy9kZXBvdC9icmFuY2gzL2ZpbGUzICYmCisJCXA0IHN1Ym1pdCAtZCAiTW92ZSBicmFuY2gzL2ZpbGUzIHRvIGJyYW5jaDQvZmlsZTMiCisJKQorJworCisjIENvbmZpcm0gdGhhdCBjaGFuZ2VzIHRvIHR3byBicmFuY2hlcyBkb25lIGluIGEgc2luZ2xlIGNoYW5nZWxpc3QKKyMgYXJlIGNvcnJlY3RseSBpbXBvcnRlZCBieSBnaXQgcDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBzeW5jIGNoYW5nZXMgdG8gdHdvIGJyYW5jaGVzIGluIHRoZSBzYW1lIGNoYW5nZWxpc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gyICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gzICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g0ICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g1ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9naXQtcDQtdG1wCisJKQorJworCisjIENyZWF0ZSBhIGJyYW5jaCBieSBpbnRlZ3JhdGluZyBhIHNpbmdsZSBmaWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgZmlsZSBzdWJzZXQgYnJhbmNoJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS9maWxlMSAvL2RlcG90L2JyYW5jaDYvZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgZmlsZTEgYWxvbmUgZnJvbSBicmFuY2gxIHRvIGJyYW5jaDYiCisJKQorJworCisjIENoZWNrIGlmIGdpdCBwNCBjcmVhdGVzIGEgbmV3IGJyYW5jaCBjb250YWluaW5nIGEgc2luZ2xlIGZpbGUsCisjIGluc3RlYWQgb2Yga2VlcGluZyB0aGUgb2xkIGZpbGVzIGZyb20gdGhlIG9yaWdpbmFsIGJyYW5jaAordGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0IHA0IGNsb25lIGZpbGUgc3Vic2V0IGJyYW5jaCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDQgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDUgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDYgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMworCSkKKycKKworIyBDaGVjayB0aGF0IGV4Y2x1ZGVkIGZpbGVzIGFyZSBvbWl0dGVkIGR1cmluZyBpbXBvcnQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBjbG9uZSBjb21wbGV4IGJyYW5jaGVzIHdpdGggZXhjbHVkZWQgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gyICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gzICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g0ICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g1ICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g2ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAtLy9kZXBvdC9icmFuY2gxL2ZpbGUyIC0vL2RlcG90L2JyYW5jaDIvZmlsZTIgLS8vZGVwb3QvYnJhbmNoMy9maWxlMiAtLy9kZXBvdC9icmFuY2g0L2ZpbGUyIC0vL2RlcG90L2JyYW5jaDUvZmlsZTIgLS8vZGVwb3QvYnJhbmNoNi9maWxlMiAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoNSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDYgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMKKwkpCisnCisKKyMgRnJvbSBhIHJlcG9ydCBpbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzExODkzNjg4CisjIHdoZXJlIC0tdXNlLWNsaWVudC1zcGVjIGNhdXNlZCBicmFuY2ggcHJlZml4ZXMgbm90IHRvIGJlIHJlbW92ZWQ7CisjIGV2ZXJ5IGZpbGUgaW4gZ2l0IGFwcGVhcmVkIGludG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGJyYW5jaCBuYW1lLgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlLWNsaWVudC1zcGVjIGRldGVjdC1icmFuY2hlcyBzZXR1cCcgJworCXJtIC1yZiAiJGNsaSIgJiYKKwlta2RpciAiJGNsaSIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQljbGllbnRfdmlldyAiLy9kZXBvdC91c2Vjcy8uLi4gLy9jbGllbnQvLi4uIiAmJgorCQlta2RpciBiMSAmJgorCQllY2hvIGIxL2IxLWZpbGUxID5iMS9iMS1maWxlMSAmJgorCQlwNCBhZGQgYjEvYjEtZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJiMS9iMS1maWxlMSIgJiYKKworCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC91c2Vjcy9iMS8uLi4gLy9kZXBvdC91c2Vjcy9iMi8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJiMSAtPiBiMiIgJiYKKwkJcDQgYnJhbmNoIC1pIDw8LUVPRiAmJgorCQlCcmFuY2g6IGIyCisJCVZpZXc6IC8vZGVwb3QvdXNlY3MvYjEvLi4uIC8vZGVwb3QvdXNlY3MvYjIvLi4uCisJCUVPRgorCisJCWVjaG8gYjIvYjItZmlsZTIgPmIyL2IyLWZpbGUyICYmCisJCXA0IGFkZCBiMi9iMi1maWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgImIyL2IyLWZpbGUyIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlLWNsaWVudC1zcGVjIGRldGVjdC1icmFuY2hlcyBmaWxlcyBpbiB0b3AtbGV2ZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tZGV0ZWN0LWJyYW5jaGVzIC0tdXNlLWNsaWVudC1zcGVjIC8vZGVwb3QvdXNlY3NAYWxsICYmCisJCWdpdCBjaGVja291dCAtYiBtYXN0ZXIgcDQvdXNlY3MvYjEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYjEtZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjItZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgYjIgcDQvdXNlY3MvYjIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYjEtZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYjItZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZS1jbGllbnQtc3BlYyBkZXRlY3QtYnJhbmNoZXMgc2tpcHMgYnJhbmNoZXMgc2V0dXAnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCXA0IGludGVncmF0ZSAvL2RlcG90L3VzZWNzL2IxLy4uLiAvL2RlcG90L3VzZWNzL2IzLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgImIxIC0+IGIzIiAmJgorCQlwNCBicmFuY2ggLWkgPDwtRU9GICYmCisJCUJyYW5jaDogYjMKKwkJVmlldzogLy9kZXBvdC91c2Vjcy9iMS8uLi4gLy9kZXBvdC91c2Vjcy9iMy8uLi4KKwkJRU9GCisKKwkJZWNobyBiMy9iMy1maWxlM18xID5iMy9iMy1maWxlM18xICYmCisJCWVjaG8gYjMvYjMtZmlsZTNfMiA+YjMvYjMtZmlsZTNfMiAmJgorCQlwNCBhZGQgYjMvYjMtZmlsZTNfMSAmJgorCQlwNCBhZGQgYjMvYjMtZmlsZTNfMiAmJgorCQlwNCBzdWJtaXQgLWQgImIzL2IzLWZpbGUzXzEgYjMvYjMtZmlsZTNfMiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZS1jbGllbnQtc3BlYyBkZXRlY3QtYnJhbmNoZXMgc2tpcHMgYnJhbmNoZXMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC91c2Vjcy8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiLS8vZGVwb3QvdXNlY3MvYjMvLi4uIC8vY2xpZW50L2IzLy4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tZGV0ZWN0LWJyYW5jaGVzIC0tdXNlLWNsaWVudC1zcGVjIC8vZGVwb3QvdXNlY3NAYWxsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3A0L3VzZWNzL2IzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UtY2xpZW50LXNwZWMgZGV0ZWN0LWJyYW5jaGVzIHNraXBzIGZpbGVzIGluIGJyYW5jaGVzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvdXNlY3MvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIi0vL2RlcG90L3VzZWNzL2IzL2IzLWZpbGUzXzEgLy9jbGllbnQvYjMvYjMtZmlsZTNfMSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tZGV0ZWN0LWJyYW5jaGVzIC0tdXNlLWNsaWVudC1zcGVjIC8vZGVwb3QvdXNlY3NAYWxsICYmCisJCWdpdCBjaGVja291dCAtYiBtYXN0ZXIgcDQvdXNlY3MvYjMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYjEtZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYjMtZmlsZTNfMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMy1maWxlM18xCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0YXJ0IHA0ZCcgJworCXN0b3BfYW5kX2NsZWFudXBfcDRkICYmCisJc3RhcnRfcDRkCisnCisKKyMKKyMgMTogLy9kZXBvdC9icmFuY2gxL2Jhc2UvZmlsZTEKKyMgICAgLy9kZXBvdC9icmFuY2gxL2Jhc2UvZmlsZTIKKyMgICAgLy9kZXBvdC9icmFuY2gxL2Jhc2UvZGlyL3N1Yl9maWxlMQorIyAyOiBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxL2Jhc2UvLi4uIC0+IC8vZGVwb3QvYnJhbmNoMi9iYXNlLy4uLgorIyAzOiAvL2RlcG90L2JyYW5jaDEvYmFzZS9maWxlMworIyA0OiAvL2RlcG90L2JyYW5jaDEvYmFzZS9maWxlMiAoZWRpdCkKKyMgNTogaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS9iYXNlLy4uLiAtPiAvL2RlcG90L2JyYW5jaDMvYmFzZS8uLi4KKyMKKyMgTm90ZTogdGhlIGNsaWVudCB2aWV3IHJlbW92ZXMgdGhlICJiYXNlIiBmb2xkZXIgZnJvbSB0aGUgd29ya3NwYWNlCisjICAgICAgIGFuZCBtb3ZlcyBzdWJfZmlsZTEgb25lIGxldmVsIHVwLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHNpbXBsZSBwNCBicmFuY2hlcyB3aXRoIGNvbW1vbiBiYXNlIGZvbGRlciBvbiBlYWNoIGJyYW5jaCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWNsaWVudF92aWV3ICIvL2RlcG90L2JyYW5jaDEvYmFzZS8uLi4gLy9jbGllbnQvYnJhbmNoMS8uLi4iIFwKKwkJCSAgICAiLy9kZXBvdC9icmFuY2gxL2Jhc2UvZGlyL3N1Yl9maWxlMSAvL2NsaWVudC9icmFuY2gxL3N1Yl9maWxlMSIgXAorCQkJICAgICIvL2RlcG90L2JyYW5jaDIvYmFzZS8uLi4gLy9jbGllbnQvYnJhbmNoMi8uLi4iIFwKKwkJCSAgICAiLy9kZXBvdC9icmFuY2gzL2Jhc2UvLi4uIC8vY2xpZW50L2JyYW5jaDMvLi4uIiAmJgorCQlta2RpciAtcCBicmFuY2gxICYmCisJCWNkIGJyYW5jaDEgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJbWtkaXIgZGlyICYmCisJCWVjaG8gc3ViX2ZpbGUxID5zdWJfZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxIGZpbGUyIHN1Yl9maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgIkNyZWF0ZSBicmFuY2gxIiAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxL2Jhc2UvLi4uIC8vZGVwb3QvYnJhbmNoMi9iYXNlLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBicmFuY2gyIGZyb20gYnJhbmNoMSIgJiYKKwkJZWNobyBmaWxlMyA+ZmlsZTMgJiYKKwkJcDQgYWRkIGZpbGUzICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGUzIGluIGJyYW5jaDEiICYmCisJCXA0IG9wZW4gZmlsZTIgJiYKKwkJZWNobyB1cGRhdGUgPj5maWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgInVwZGF0ZSBmaWxlMiBpbiBicmFuY2gxIiAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxL2Jhc2UvLi4uIC8vZGVwb3QvYnJhbmNoMy9iYXNlLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBicmFuY2gzIGZyb20gYnJhbmNoMSIKKwkpCisnCisKKyMgQ29uZmlndXJlIGJyYW5jaGVzIHRocm91Z2ggZ2l0LWNvbmZpZyBhbmQgY2xvbmUgdGhlbS4KKyMgQWxsIGZpbGVzIGFyZSB0ZXN0ZWQgdG8gbWFrZSBzdXJlIGJyYW5jaGVzIHdlcmUgY2xvbmVkIGNvcnJlY3RseS4KKyMgRmluYWxseSwgbWFrZSBhbiB1cGRhdGUgdG8gYnJhbmNoMSBvbiBQNCBzaWRlIHRvIGNoZWNrIGlmIGl0IGlzIGltcG9ydGVkCisjIGNvcnJlY3RseSBieSBnaXQgcDQuCisjIGdpdCBwNCBpcyBleHBlY3RlZCB0byB1c2UgdGhlIGNsaWVudCB2aWV3IHRvIGFsc28gbm90IGluY2x1ZGUgdGhlIGNvbW1vbgorIyAiYmFzZSIgZm9sZGVyIGluIHRoZSBpbXBvcnRlZCBkaXJlY3Rvcnkgc3RydWN0dXJlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IGNsb25lIHNpbXBsZSBicmFuY2hlcyB3aXRoIGJhc2UgZm9sZGVyIG9uIHNlcnZlciBzaWRlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMyAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS11c2UtY2xpZW50LXNwZWMgIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsICYmCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJdGVzdCAtZiBmaWxlMSAmJgorCQl0ZXN0IC1mIGZpbGUyICYmCisJCXRlc3QgLWYgZmlsZTMgJiYKKwkJdGVzdCAtZiBzdWJfZmlsZTEgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gyICYmCisJCXRlc3QgLWYgZmlsZTEgJiYKKwkJdGVzdCAtZiBmaWxlMiAmJgorCQl0ZXN0ICEgLWYgZmlsZTMgJiYKKwkJdGVzdCAtZiBzdWJfZmlsZTEgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDMgJiYKKwkJdGVzdCAtZiBmaWxlMSAmJgorCQl0ZXN0IC1mIGZpbGUyICYmCisJCXRlc3QgLWYgZmlsZTMgJiYKKwkJdGVzdCAtZiBzdWJfZmlsZTEgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJY2QgIiRjbGkiICYmCisJCWNkIGJyYW5jaDEgJiYKKwkJcDQgZWRpdCBmaWxlMiAmJgorCQllY2hvIGZpbGUyXyA+PmZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAidXBkYXRlIGZpbGUyIGluIGJyYW5jaDEiICYmCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJZ2l0IHA0IHJlYmFzZSAmJgorCQlncmVwIGZpbGUyXyBmaWxlMgorCSkKKycKKworIyBOb3cgdXBkYXRlIGEgZmlsZSBpbiBvbmUgb2YgdGhlIGJyYW5jaGVzIGluIGdpdCBhbmQgc3VibWl0IHRvIFA0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVcGRhdGUgYSBmaWxlIGluIGdpdCBzaWRlIGFuZCBzdWJtaXQgdG8gUDQgdXNpbmcgY2xpZW50IHZpZXcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDEgJiYKKwkJZWNobyAiY2xpZW50IHNwZWMiID4+IGZpbGUxICYmCisJCWdpdCBhZGQgLXUgLiAmJgorCQlnaXQgY29tbWl0IC1tICJ1cGRhdGUgZmlsZTEgaW4gYnJhbmNoMSIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tdmVyYm9zZSAmJgorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJY2QgYnJhbmNoMSAmJgorCQlncmVwICJjbGllbnQgc3BlYyIgZmlsZTEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RhcnQgcDRkIChjYXNlIGZvbGRpbmcgZW5hYmxlZCknICcKKwlzdG9wX2FuZF9jbGVhbnVwX3A0ZCAmJgorCXN0YXJ0X3A0ZCAtQzEKKycKKworIworIyAxOiAvL2RlcG90L21haW4vbWYxCisjIDI6IGludGVncmF0ZSAvL2RlcG90L21haW4vLi4uIC0+IC8vZGVwb3QvYnJhbmNoMS8uLi4KKyMgMzogLy9kZXBvdC9tYWluL21mMgorIyA0OiAvL2RlcG90L0JSQU5DSDEvQjFmMworIyA1OiAvL2RlcG90L2JyYW5jaDEvYjFmNAorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAhQ0FTRV9JTlNFTlNJVElWRV9GUyAnYmFzaWMgcDQgYnJhbmNoZXMgZm9yIGNhc2UgZm9sZGluZycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQllY2hvIG1mMSA+bWFpbi9tZjEgJiYKKwkJcDQgYWRkIG1haW4vbWYxICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9tZjEiICYmCisKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvbWFpbi8uLi4gLy9kZXBvdC9icmFuY2gxLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgImludGVncmF0ZSBtYWluIHRvIGJyYW5jaDEiICYmCisKKwkJZWNobyBtZjIgPm1haW4vbWYyICYmCisJCXA0IGFkZCBtYWluL21mMiAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vbWYyIiAmJgorCisJCW1rZGlyIEJSQU5DSDEgJiYKKwkJZWNobyBCMWYzID5CUkFOQ0gxL0IxZjMgJiYKKwkJcDQgYWRkIEJSQU5DSDEvQjFmMyAmJgorCQlwNCBzdWJtaXQgLWQgIkJSQU5DSDEvQjFmMyIgJiYKKworCQllY2hvIGIxZjQgPmJyYW5jaDEvYjFmNCAmJgorCQlwNCBhZGQgYnJhbmNoMS9iMWY0ICYmCisJCXA0IHN1Ym1pdCAtZCAiYnJhbmNoMS9iMWY0IgorCSkKKycKKworIyBDaGVjayB0aGF0IGZpbGVzIGFyZSBwcm9wZXJseSBzcGxpdCBhY3Jvc3MgYnJhbmNoZXMgd2hlbiBpZ25vcmVjYXNlIGlzIHNldAordGVzdF9leHBlY3Rfc3VjY2VzcyAhQ0FTRV9JTlNFTlNJVElWRV9GUyAnZ2l0IHA0IGNsb25lLCBicmFuY2hMaXN0IGJyYW5jaCBkZWZpbml0aW9uLCBpZ25vcmVjYXNlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoMSAmJgorCQlnaXQgY29uZmlnIC0tdHlwZT1ib29sIGNvcmUuaWdub3JlQ2FzZSB0cnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCisJCWdpdCBsb2cgLS1hbGwgLS1ncmFwaCAtLWRlY29yYXRlIC0tc3RhdCAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgcDQvbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG1mMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBtZjIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgQjFmMyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiMWY0ICYmCisKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG1mMSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtZjIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgQjFmMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiMWY0CisJKQorJworCisjIENoZWNrIHRoYXQgZmlsZXMgYXJlIHByb3Blcmx5IHNwbGl0IGFjcm9zcyBicmFuY2hlcyB3aGVuIGlnbm9yZWNhc2UgaXMgc2V0LCB1c2UtY2xpZW50LXNwZWMgY2FzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAhQ0FTRV9JTlNFTlNJVElWRV9GUyAnZ2l0IHA0IGNsb25lIHdpdGggY2xpZW50LXNwZWMsIGJyYW5jaExpc3QgYnJhbmNoIGRlZmluaXRpb24sIGlnbm9yZWNhc2UnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaDEgJiYKKwkJZ2l0IGNvbmZpZyAtLXR5cGU9Ym9vbCBjb3JlLmlnbm9yZUNhc2UgdHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS11c2UtY2xpZW50LXNwZWMgLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKworCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKworCQlnaXQgcmVzZXQgLS1oYXJkIHA0L21hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBtZjEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgbWYyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEIxZjMgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjFmNCAmJgorCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBtZjEgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgbWYyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIEIxZjMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYjFmNAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODAyLWdpdC1wNC1maWxldHlwZS5zaCBiL3QvdDk4MDItZ2l0LXA0LWZpbGV0eXBlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0ZWRlYmUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwMi1naXQtcDQtZmlsZXR5cGUuc2gKQEAgLTAsMCArMSwzMzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgZmlsZXR5cGUgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjCisjIFRoaXMgc2VyaWVzIG9mIHRlc3RzIGNoZWNrcyBuZXdsaW5lIGhhbmRsaW5nICBCb3RoIHA0IGFuZAorIyBnaXQgc3RvcmUgbmV3bGluZXMgYXMgXG4sIGFuZCBoYXZlIG9wdGlvbnMgdG8gY2hvb3NlIGhvdworIyBuZXdsaW5lcyBhcHBlYXIgaW4gY2hlY2tlZC1vdXQgZmlsZXMuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwNCBjbGllbnQgbmV3bGluZXMsIHVuaXgnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJcHJpbnRmICJ1bml4XG5jcmxmXG4iID5mLXVuaXggJiYKKwkJcHJpbnRmICJ1bml4XHJcbmNybGZcclxuIiA+Zi11bml4LWFzLWNybGYgJiYKKwkJcDQgYWRkIC10IHRleHQgZi11bml4ICYmCisJCXA0IHN1Ym1pdCAtZCBmLXVuaXggJiYKKworCQkjIExpbmVFbmQ6IHVuaXg7IHNob3VsZCBiZSBubyBjaGFuZ2UgYWZ0ZXIgc3luYworCQljcCBmLXVuaXggZi11bml4LW9yaWcgJiYKKwkJcDQgc3luYyAtZiAmJgorCQl0ZXN0X2NtcCBmLXVuaXgtb3JpZyBmLXVuaXggJiYKKworCQkjIG1ha2Ugc3VyZSBzdG9yZWQgaW4gcmVwbyBhcyB1bml4IG5ld2xpbmVzCisJCSMgdXNlIHNlZCB0byBlYXQgcHl0aG9uLWFwcGVuZGVkIG5ld2xpbmUKKwkJcDQgLUcgcHJpbnQgLy9kZXBvdC9mLXVuaXggfCBtYXJzaGFsX2R1bXAgZGF0YSAyIHxcCisJCSAgICBzZWQgXCRkID5mLXVuaXgtcDQtcHJpbnQgJiYKKwkJdGVzdF9jbXAgZi11bml4LW9yaWcgZi11bml4LXA0LXByaW50ICYmCisKKwkJIyBzd2l0Y2ggdG8gd2luLCBtYWtlIHN1cmUgbGYgLT4gY3JsZgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp3aW4vIiB8IHA0IGNsaWVudCAtaSAmJgorCQlwNCBzeW5jIC1mICYmCisJCXRlc3RfY21wIGYtdW5peC1hcy1jcmxmIGYtdW5peAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncDQgY2xpZW50IG5ld2xpbmVzLCB3aW4nICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp3aW4vIiB8IHA0IGNsaWVudCAtaSAmJgorCQlwcmludGYgIndpblxyXG5jcmxmXHJcbiIgPmYtd2luICYmCisJCXByaW50ZiAid2luXG5jcmxmXG4iID5mLXdpbi1hcy1sZiAmJgorCQlwNCBhZGQgLXQgdGV4dCBmLXdpbiAmJgorCQlwNCBzdWJtaXQgLWQgZi13aW4gJiYKKworCQkjIExpbmVFbmQ6IHdpbjsgc2hvdWxkIGJlIG5vIGNoYW5nZSBhZnRlciBzeW5jCisJCWNwIGYtd2luIGYtd2luLW9yaWcgJiYKKwkJcDQgc3luYyAtZiAmJgorCQl0ZXN0X2NtcCBmLXdpbi1vcmlnIGYtd2luICYmCisKKwkJIyBtYWtlIHN1cmUgc3RvcmVkIGluIHJlcG8gYXMgdW5peCBuZXdsaW5lcworCQkjIHVzZSBzZWQgdG8gZWF0IHB5dGhvbi1hcHBlbmVkIG5ld2xpbmUKKwkJcDQgLUcgcHJpbnQgLy9kZXBvdC9mLXdpbiB8IG1hcnNoYWxfZHVtcCBkYXRhIDIgfFwKKwkJICAgIHNlZCBcJGQgPmYtd2luLXA0LXByaW50ICYmCisJCXRlc3RfY21wIGYtd2luLWFzLWxmIGYtd2luLXA0LXByaW50ICYmCisKKwkJIyBzd2l0Y2ggdG8gdW5peCwgbWFrZSBzdXJlIGxmIC0+IGNybGYKKwkJcDQgY2xpZW50IC1vIHwgc2VkICIvTGluZUVuZC9zLzouKi86dW5peC8iIHwgcDQgY2xpZW50IC1pICYmCisJCXA0IHN5bmMgLWYgJiYKKwkJdGVzdF9jbXAgZi13aW4tYXMtbGYgZi13aW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vuc3VyZSBibG9icyBzdG9yZSBvbmx5IGxmIG5ld2xpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHA0IHN5bmMgLy9kZXBvdEBhbGwgJiYKKworCQkjIHZlcmlmeSB0aGUgZmlsZXMgaW4gLmdpdCBhcmUgc3RvcmVkIG9ubHkgd2l0aCBuZXdsaW5lcworCQlvPSQoZ2l0IGxzLXRyZWUgcDQvbWFzdGVyIC0tIGYtdW5peCB8IGN1dCAtZjEgfCBjdXQgLWRcICAtZjMpICYmCisJCWdpdCBjYXQtZmlsZSBibG9iICRvID5mLXVuaXgtYmxvYiAmJgorCQl0ZXN0X2NtcCAiJGNsaSIvZi11bml4LW9yaWcgZi11bml4LWJsb2IgJiYKKworCQlvPSQoZ2l0IGxzLXRyZWUgcDQvbWFzdGVyIC0tIGYtd2luIHwgY3V0IC1mMSB8IGN1dCAtZFwgIC1mMykgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgJG8gPmYtd2luLWJsb2IgJiYKKwkJdGVzdF9jbXAgIiRjbGkiL2Ytd2luLWFzLWxmIGYtd2luLWJsb2IgJiYKKworCQlybSBmLXVuaXgtYmxvYiBmLXdpbi1ibG9iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRhdHRyaWJ1dGVzIHNldHRpbmcgZW9sPWxmIHByb2R1Y2VzIGxmIG5ld2xpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQkjIGNoZWNrb3V0IHRoZSBmaWxlcyBhbmQgbWFrZSBzdXJlIGNvcmUuZW9sIHdvcmtzIGFzIHBsYW5uZWQKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIiogZW9sPWxmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJZ2l0IHA0IHN5bmMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBwNC9tYXN0ZXIgJiYKKwkJdGVzdF9jbXAgIiRjbGkiL2YtdW5peC1vcmlnIGYtdW5peCAmJgorCQl0ZXN0X2NtcCAiJGNsaSIvZi13aW4tYXMtbGYgZi13aW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGF0dHJpYnV0ZXMgc2V0dGluZyBlb2w9Y3JsZiBwcm9kdWNlcyBjcmxmIG5ld2xpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQkjIGNoZWNrb3V0IHRoZSBmaWxlcyBhbmQgbWFrZSBzdXJlIGNvcmUuZW9sIHdvcmtzIGFzIHBsYW5uZWQKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIiogZW9sPWNybGYiID4uZ2l0YXR0cmlidXRlcyAmJgorCQlnaXQgcDQgc3luYyAvL2RlcG90QGFsbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L21hc3RlciAmJgorCQl0ZXN0X2NtcCAiJGNsaSIvZi11bml4LWFzLWNybGYgZi11bml4ICYmCisJCXRlc3RfY21wICIkY2xpIi9mLXdpbi1vcmlnIGYtd2luCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmxmIGNsZWFudXAnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlybSBmLXVuaXgtb3JpZyBmLXVuaXgtYXMtY3JsZiAmJgorCQlybSBmLXdpbi1vcmlnIGYtd2luLWFzLWxmICYmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOnVuaXgvIiB8IHA0IGNsaWVudCAtaSAmJgorCQlwNCBzeW5jIC1mCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1dGYtMTYgZmlsZSBjcmVhdGUnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCSMgcDQgc2F2ZXMgdGhpcyB2ZXJiYXRpbQorCQlwcmludGYgInRocmVlXG5saW5lXG50ZXh0XG4iID5mLWFzY2lpICYmCisJCXA0IGFkZCAtdCB0ZXh0IGYtYXNjaWkgJiYKKworCQkjIHA0IGFkZHMgXDM3N1wzNzYgaGVhZGVyCisJCWNwIGYtYXNjaWkgZi1hc2NpaS1hcy11dGYxNiAmJgorCQlwNCBhZGQgLXQgdXRmMTYgZi1hc2NpaS1hcy11dGYxNiAmJgorCisJCSMgcDQgc2F2ZXMgdGhpcyBleGFjdGx5IGFzIGljb252IHByb2R1Y2VkIGl0CisJCXByaW50ZiAidGhyZWVcbmxpbmVcbnRleHRcbiIgfCBpY29udiAtZiBhc2NpaSAtdCB1dGYtMTYgPmYtdXRmMTYgJiYKKwkJcDQgYWRkIC10IHV0ZjE2IGYtdXRmMTYgJiYKKworCQkjIHRoaXMgYWxzbyBpcyB1bmNoYW5nZWQKKwkJY3AgZi11dGYxNiBmLXV0ZjE2LWFzLXRleHQgJiYKKwkJcDQgYWRkIC10IHRleHQgZi11dGYxNi1hcy10ZXh0ICYmCisKKwkJcDQgc3VibWl0IC1kICJmIGZpbGVzIiAmJgorCisJCSMgZm9yY2UgdXBkYXRlIG9mIGNsaWVudCBmaWxlcworCQlwNCBzeW5jIC1mCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1dGYtMTYgZmlsZSB0ZXN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCisJCXRlc3RfY21wICIkY2xpL2YtYXNjaWkiIGYtYXNjaWkgJiYKKwkJdGVzdF9jbXAgIiRjbGkvZi1hc2NpaS1hcy11dGYxNiIgZi1hc2NpaS1hcy11dGYxNiAmJgorCQl0ZXN0X2NtcCAiJGNsaS9mLXV0ZjE2IiBmLXV0ZjE2ICYmCisJCXRlc3RfY21wICIkY2xpL2YtdXRmMTYtYXMtdGV4dCIgZi11dGYxNi1hcy10ZXh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXl3b3JkIGZpbGUgY3JlYXRlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKworCQlwcmludGYgImlkXG5cJElkXCRcblwkQXV0aG9yXCRcbnRleHRcbiIgPmstdGV4dC1rICYmCisJCXA0IGFkZCAtdCB0ZXh0K2sgay10ZXh0LWsgJiYKKworCQljcCBrLXRleHQtayBrLXRleHQta28gJiYKKwkJcDQgYWRkIC10IHRleHQra28gay10ZXh0LWtvICYmCisKKwkJY2F0IGstdGV4dC1rIHwgaWNvbnYgLWYgYXNjaWkgLXQgdXRmLTE2ID5rLXV0ZjE2LWsgJiYKKwkJcDQgYWRkIC10IHV0ZjE2K2sgay11dGYxNi1rICYmCisKKwkJY3Agay11dGYxNi1rIGstdXRmMTYta28gJiYKKwkJcDQgYWRkIC10IHV0ZjE2K2tvIGstdXRmMTYta28gJiYKKworCQlwNCBzdWJtaXQgLWQgImsgZmlsZXMiICYmCisJCXA0IHN5bmMgLWYKKwkpCisnCisKK2J1aWxkX3NtdXNoKCkgeworCWNhdCA+a19zbXVzaC5weSA8PC1cRU9GICYmCisJaW1wb3J0IHJlLCBzeXMKKwlzeXMuc3Rkb3V0LndyaXRlKHJlLnN1YihyJyg/aSlcJChJZHxIZWFkZXJ8QXV0aG9yfERhdGV8RGF0ZVRpbWV8Q2hhbmdlfEZpbGV8UmV2aXNpb24pOlteJF0qXCQnLCByJyRcMSQnLCBzeXMuc3RkaW4ucmVhZCgpKSkKKwlFT0YKKwljYXQgPmtvX3NtdXNoLnB5IDw8LVxFT0YKKwlpbXBvcnQgcmUsIHN5cworCXN5cy5zdGRvdXQud3JpdGUocmUuc3ViKHInKD9pKVwkKElkfEhlYWRlcik6W14kXSpcJCcsIHInJFwxJCcsIHN5cy5zdGRpbi5yZWFkKCkpKQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXl3b3JkIGZpbGUgdGVzdCcgJworCWJ1aWxkX3NtdXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIGtfc211c2gucHkga29fc211c2gucHkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisKKwkJIyB0ZXh0LCBlbnN1cmUgdW5leHBhbmRlZAorCQkiJFBZVEhPTl9QQVRIIiAiJFRSQVNIX0RJUkVDVE9SWS9rX3NtdXNoLnB5IiA8IiRjbGkvay10ZXh0LWsiID5jbGktay10ZXh0LWstc211c2ggJiYKKwkJdGVzdF9jbXAgY2xpLWstdGV4dC1rLXNtdXNoIGstdGV4dC1rICYmCisJCSIkUFlUSE9OX1BBVEgiICIkVFJBU0hfRElSRUNUT1JZL2tvX3NtdXNoLnB5IiA8IiRjbGkvay10ZXh0LWtvIiA+Y2xpLWstdGV4dC1rby1zbXVzaCAmJgorCQl0ZXN0X2NtcCBjbGktay10ZXh0LWtvLXNtdXNoIGstdGV4dC1rbyAmJgorCisJCSMgdXRmMTYsIGV2ZW4gdGhvdWdoIHA0IGV4cGFuZHMga2V5d29yZHMsIGdpdCBwNCBkb2VzIG5vdAorCQkjIHRyeSB0byB1bmRvIHRoYXQKKwkJdGVzdF9jbXAgIiRjbGkvay11dGYxNi1rIiBrLXV0ZjE2LWsgJiYKKwkJdGVzdF9jbXAgIiRjbGkvay11dGYxNi1rbyIgay11dGYxNi1rbworCSkKKycKKworYnVpbGRfZ2VuZG91YmxlKCkgeworCWNhdCA+Z2VuZG91YmxlLnB5IDw8LVxFT0YKKwlpbXBvcnQgc3lzCisJaW1wb3J0IHN0cnVjdAorCisJcyA9IHN0cnVjdC5wYWNrKGIiPkxMMThzIiwKKwkJCTB4MDAwNTE2MDcsICAjIEFwcGxlRG91YmxlCisJCQkweDAwMDIwMDAwLCAgIyB2ZXJzaW9uIDIKKwkJCWIiIiAgICAgICAgICAjIHBhZCB0byAyNiBieXRlcworCSkKKwlnZXRhdHRyKHN5cy5zdGRvdXQsICdidWZmZXInLCBzeXMuc3Rkb3V0KS53cml0ZShzKQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUgYXBwbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgcm0gLWYgZ2VuZG91YmxlLnB5ICYmCisJYnVpbGRfZ2VuZG91YmxlICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdC10b29sIGdlbnJhbmRvbSBhcHBsZSAxMDI0ID5kb3VibGUucG5nICYmCisJCSIkUFlUSE9OX1BBVEgiICIkVFJBU0hfRElSRUNUT1JZL2dlbmRvdWJsZS5weSIgPiVkb3VibGUucG5nICYmCisJCXA0IGFkZCAtdCBhcHBsZSBkb3VibGUucG5nICYmCisJCXA0IHN1Ym1pdCAtZCBhcHBsZWRvdWJsZQorCSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3QgISAtZiBkb3VibGUucG5nCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjcmVhdGUgcDQgc3ltbGluaycgJworCWNkICIkY2xpIiAmJgorCWxuIC1zIHN5bWxpbmstdGFyZ2V0IHN5bWxpbmsgJiYKKwlwNCBhZGQgc3ltbGluayAmJgorCXA0IHN1Ym1pdCAtZCAiYWRkIHN5bWxpbmsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2Vuc3VyZSBwNCBzeW1saW5rIHBhcnNlZCBjb3JyZWN0bHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3QgLUwgc3ltbGluayAmJgorCQl0ZXN0ICQocmVhZGxpbmsgc3ltbGluaykgPSBzeW1saW5rLXRhcmdldAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZW1wdHkgc3ltbGluayB0YXJnZXQnICcKKwkoCisJCSMgZmlyc3QgY3JlYXRlIHRoZSBmaWxlIGFzIGEgZmlsZQorCQljZCAiJGNsaSIgJiYKKwkJPmVtcHR5LXN5bWxpbmsgJiYKKwkJcDQgYWRkIGVtcHR5LXN5bWxpbmsgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgZW1wdHktc3ltbGluayBhcyBhIGZpbGUiCisJKSAmJgorCSgKKwkJIyBub3cgY2hhbmdlIGl0IHRvIGJlIGEgc3ltbGluayB0byAidGFyZ2V0MSIKKwkJY2QgIiRjbGkiICYmCisJCXA0IGVkaXQgZW1wdHktc3ltbGluayAmJgorCQlwNCByZW9wZW4gLXQgc3ltbGluayBlbXB0eS1zeW1saW5rICYmCisJCXJtIGVtcHR5LXN5bWxpbmsgJiYKKwkJbG4gLXMgdGFyZ2V0MSBlbXB0eS1zeW1saW5rICYmCisJCXA0IGFkZCBlbXB0eS1zeW1saW5rICYmCisJCXA0IHN1Ym1pdCAtZCAibWFrZSBlbXB0eS1zeW1saW5rIHBvaW50IHRvIHRhcmdldDEiCisJKSAmJgorCSgKKwkJIyBIYWNrIHRoZSBwNCBkZXBvdCB0byBtYWtlIHRoZSBzeW1saW5rIHBvaW50IHRvIG5vdGhpbmc7CisJCSMgdGhpcyBzaG91bGQgbm90IGhhcHBlbiBpbiByZWFsaXR5LCBidXQgc2hvd3MgdXAKKwkJIyBpbiBwNCByZXBvcyBpbiB0aGUgd2lsZC4KKwkJIworCQkjIFRoZSBzZWQgZXhwcmVzc2lvbiBjaGFuZ2VzIHRoaXM6CisJCSMgICAgIEBACisJCSMgICAgIHRleHQKKwkJIyAgICAgQHRhcmdldDEKKwkJIyAgICAgQAorCQkjIHRvIHRoaXM6CisJCSMgICAgIEBACisJCSMgICAgIHRleHQKKwkJIyAgICAgQEAKKwkJIworCQljZCAiJGRiL2RlcG90IiAmJgorCQlzZWQgIi9AdGFyZ2V0MS97OyBzL3RhcmdldDEvQC87IG47IGQ7IH0iIFwKKwkJICAgIGVtcHR5LXN5bWxpbmssdiA+ZW1wdHktc3ltbGluayx2LnRtcCAmJgorCQltdiBlbXB0eS1zeW1saW5rLHYudG1wIGVtcHR5LXN5bWxpbmssdgorCSkgJiYKKwkoCisJCSMgTWFrZSBzdXJlIHN5bWxpbmsgcmVhbGx5IGlzIGVtcHR5LiAgQXNraW5nCisJCSMgcDQgdG8gc3luYyBoZXJlIHdpbGwgbWFrZSBpdCBnZW5lcmF0ZSBlcnJvcnMuCisJCWNkICIkY2xpIiAmJgorCQlwNCBwcmludCAtcSAvL2RlcG90L2VtcHR5LXN5bWxpbmsjMiA+b3V0ICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisKKwkjIG1ha2Ugc3VyZSBnaXQgcDQgaGFuZGxlcyBpdCB3aXRob3V0IGVycm9yCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCSMgZml4IHRoZSBzeW1saW5rLCBtYWtlIGl0IHBvaW50IHRvICJ0YXJnZXQyIgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZW1wdHktc3ltbGluayAmJgorCQlybSBlbXB0eS1zeW1saW5rICYmCisJCWxuIC1zIHRhcmdldDIgZW1wdHktc3ltbGluayAmJgorCQlwNCBzdWJtaXQgLWQgIm1ha2UgZW1wdHktc3ltbGluayBwb2ludCB0byB0YXJnZXQyIgorCSkgJiYKKwljbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdCAkKHJlYWRsaW5rIGVtcHR5LXN5bWxpbmspID0gdGFyZ2V0MgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODAzLWdpdC1wNC1zaGVsbC1tZXRhY2hhcnMuc2ggYi90L3Q5ODAzLWdpdC1wNC1zaGVsbC1tZXRhY2hhcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjkxMzI3NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDMtZ2l0LXA0LXNoZWxsLW1ldGFjaGFycy5zaApAQCAtMCwwICsxLDEwOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB0cmFuc3BhcmVuY3kgdG8gc2hlbGwgbWV0YWNoYXJzIGluIGZpbGVuYW1lcycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoZWxsIG1ldGFjaGFycyBpbiBmaWxlbmFtZXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjayB0cnVlICYmCisJCWVjaG8gZjEgPmZvb1wkYmFyICYmCisJCWdpdCBhZGQgZm9vXCRiYXIgJiYKKwkJZWNobyBmMiA+ImZpbGUgd2l0aCBzcGFjZXMiICYmCisJCWdpdCBhZGQgImZpbGUgd2l0aCBzcGFjZXMiICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBmaWxlcyIgJiYKKwkJUDRFRElUT1I9InRlc3QtdG9vbCBjaG10aW1lICs1IiBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgLi4uICYmCisJCXRlc3QgLWUgImZpbGUgd2l0aCBzcGFjZXMiICYmCisJCXRlc3QgLWUgImZvb1wkYmFyIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgd2l0aCBzaGVsbCBtZXRhY2hhcnMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjayB0cnVlICYmCisJCWdpdCBybSBmb29cJGJhciAmJgorCQlnaXQgcm0gZmlsZVwgd2l0aFwgc3BhY2VzICYmCisJCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlcyIgJiYKKwkJUDRFRElUT1I9InRlc3QtdG9vbCBjaG10aW1lICs1IiBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgLi4uICYmCisJCXRlc3QgISAtZSAiZmlsZSB3aXRoIHNwYWNlcyIgJiYKKwkJdGVzdCAhIC1lIGZvb1wkYmFyCisJKQorJworCisjIENyZWF0ZSBhIGJyYW5jaCB3aXRoIGEgc2hlbGwgbWV0YWNoYXIgaW4gaXRzIG5hbWUKKyMKKyMgMS4gLy9kZXBvdC9tYWluCisjIDIuIC8vZGVwb3QvYnJhbmNoJDMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHdpdGggc2hlbGwgY2hhcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGNsaSIgJiYKKworCQlta2RpciAtcCBtYWluICYmCisKKwkJZWNobyBmMSA+bWFpbi9mMSAmJgorCQlwNCBhZGQgbWFpbi9mMSAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjEiICYmCisKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvbWFpbi8uLi4gLy9kZXBvdC9icmFuY2hcJDMvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiaW50ZWdyYXRlIG1haW4gdG8gYnJhbmNoXCQzIiAmJgorCisJCWVjaG8gZjEgPmJyYW5jaFwkMy9zaGVsbF9jaGFyX2JyYW5jaF9maWxlICYmCisJCXA0IGFkZCBicmFuY2hcJDMvc2hlbGxfY2hhcl9icmFuY2hfZmlsZSAmJgorCQlwNCBzdWJtaXQgLWQgImJyYW5jaFwkMy9zaGVsbF9jaGFyX2JyYW5jaF9maWxlIiAmJgorCisJCXA0IGJyYW5jaCAtaSA8PC1FT0YgJiYKKwkJQnJhbmNoOiBicmFuY2hcJDMKKwkJVmlldzogLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaFwkMy8uLi4KKwkJRU9GCisKKwkJcDQgZWRpdCBtYWluL2YxICYmCisJCWVjaG8gImEgY2hhbmdlIiA+PiBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAiYSBjaGFuZ2UiIG1haW4vZjEgJiYKKworCQlwNCBpbnRlZ3JhdGUgLWIgYnJhbmNoXCQzICYmCisJCXA0IHJlc29sdmUgLWFtIGJyYW5jaFwkMy8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJpbnRlZ3JhdGUgbWFpbiB0byBicmFuY2hcJDMiICYmCisKKwkJY2QgIiRnaXQiICYmCisKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaFwkMyAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoXCQzICYmCisJCXRlc3QgLWYgc2hlbGxfY2hhcl9icmFuY2hfZmlsZSAmJgorCQl0ZXN0IC1mIGYxCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDQtZ2l0LXA0LWxhYmVsLnNoIGIvdC90OTgwNC1naXQtcDQtbGFiZWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzIzNjQ1NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDQtZ2l0LXA0LWxhYmVsLnNoCkBAIC0wLDAgKzEsMTExIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGxhYmVsIHRlc3RzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIyBCYXNpYyBwNCBsYWJlbCB0ZXN0cy4KKyMKKyMgTm90ZTogY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGxhYmVsIHBlciBjb21taXQgLSBvdGhlcnMKKyMgYXJlIHNpbGVudGx5IGRpc2NhcmRlZC4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHA0IGxhYmVscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQllY2hvIGYxID5tYWluL2YxICYmCisJCXA0IGFkZCBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMSIgJiYKKworCQllY2hvIGYyID5tYWluL2YyICYmCisJCXA0IGFkZCBtYWluL2YyICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMiIgJiYKKworCQllY2hvIGYzID5tYWluL2ZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisJCXA0IGFkZCBtYWluL2ZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZSB3aXRoIG1ldGFjaGFyIiAmJgorCisJCXA0IHRhZyAtbCB0YWdfZjFfb25seSBtYWluL2YxICYmCisJCXA0IHRhZyAtbCB0YWdfd2l0aFwkX3NoZWxsX2NoYXIgbWFpbi8uLi4gJiYKKworCQllY2hvIGY0ID5tYWluL2Y0ICYmCisJCXA0IGFkZCBtYWluL2Y0ICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mNCIgJiYKKworCQlwNCBsYWJlbCAtaSA8PC1FT0YgJiYKKwkJTGFiZWw6IGxvbmdfbGFiZWwKKwkJRGVzY3JpcHRpb246CisJCSAgIEEgTGFiZWwgZmlyc3QgbGluZQorCQkgICBBIExhYmVsIHNlY29uZCBsaW5lCisJCVZpZXc6CS8vZGVwb3QvLi4uCisJCUVPRgorCisJCXA0IHRhZyAtbCBsb25nX2xhYmVsIC4uLiAmJgorCisJCXA0IGxhYmVscyAuLi4gJiYKKworCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLWRldGVjdC1sYWJlbHMgLy9kZXBvdEBhbGwgJiYKKwkJY2QgIiRnaXQiICYmCisKKwkJZ2l0IHRhZyAmJgorCQlnaXQgdGFnID50YWdsaXN0ICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgdGFnbGlzdCAmJgorCisJCWNkIG1haW4gJiYKKwkJZ2l0IGNoZWNrb3V0IHRhZ190YWdfZjFfb25seSAmJgorCQkhIHRlc3QgLWYgZjIgJiYKKwkJZ2l0IGNoZWNrb3V0IHRhZ190YWdfd2l0aFwkX3NoZWxsX2NoYXIgJiYKKwkJdGVzdCAtZiBmMSAmJiB0ZXN0IC1mIGYyICYmIHRlc3QgLWYgZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKworCQlnaXQgc2hvdyB0YWdfbG9uZ19sYWJlbCB8IGdyZXAgLXEgIkEgTGFiZWwgc2Vjb25kIGxpbmUiCisJKQorJworCisjIFRlc3Qgc29tZSBsYWJlbCBjb3JuZXIgY2FzZXM6CisjCisjIC0gdHdvIHRhZ3Mgb24gdGhlIHNhbWUgZmlsZTsgYm90aCBzaG91bGQgYmUgYXZhaWxhYmxlCisjIC0gYSB0YWcgdGhhdCBpcyBvbmx5IG9uIG9uZSBmaWxlOyB0aGlzIGtpbmQgb2YgdGFnCisjICAgY2Fubm90IGJlIGltcG9ydGVkIChhdCBsZWFzdCBub3QgZWFzaWx5KS4KKwordGVzdF9leHBlY3RfZmFpbHVyZSAndHdvIGxhYmVscyBvbiB0aGUgc2FtZSBjaGFuZ2VsaXN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCXA0IGVkaXQgbWFpbi9mMSBtYWluL2YyICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+bWFpbi9mMSAmJgorCQllY2hvICJub3QgaW4gdGhlIHRhZyIgPm1haW4vZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2ZbMTJdOiB0ZXN0aW5nIHR3byBsYWJlbHMiICYmCisKKwkJcDQgdGFnIC1sIHRhZ19mMV8xIG1haW4vLi4uICYmCisJCXA0IHRhZyAtbCB0YWdfZjFfMiBtYWluLy4uLiAmJgorCisJCXA0IGxhYmVscyAuLi4gJiYKKworCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLWRldGVjdC1sYWJlbHMgLy9kZXBvdEBhbGwgJiYKKwkJY2QgIiRnaXQiICYmCisKKwkJZ2l0IHRhZyB8IGdyZXAgdGFnX2YxICYmCisJCWdpdCB0YWcgfCBncmVwIC1xIHRhZ19mMV8xICYmCisJCWdpdCB0YWcgfCBncmVwIC1xIHRhZ19mMV8yICYmCisKKwkJY2QgbWFpbiAmJgorCisJCWdpdCBjaGVja291dCB0YWdfdGFnX2YxXzEgJiYKKwkJbHMgJiYKKwkJdGVzdCAtZiBmMSAmJgorCisJCWdpdCBjaGVja291dCB0YWdfdGFnX2YxXzIgJiYKKwkJbHMgJiYKKwkJdGVzdCAtZiBmMQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA1LWdpdC1wNC1za2lwLXN1Ym1pdC1lZGl0LnNoIGIvdC90OTgwNS1naXQtcDQtc2tpcC1zdWJtaXQtZWRpdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MGVmNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwNS1naXQtcDQtc2tpcC1zdWJtaXQtZWRpdC5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBza2lwU3VibWl0RWRpdCBjb25maWcgdmFyaWFibGVzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIgorCSkKKycKKworIyB0aGlzIHdvcmtzIGJlY2F1c2UgUDRFRElUT1IgaXMgc2V0IHRvIHRydWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbmZpZywgdW5lZGl0ZWQsIHNheSB5ZXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIDIiICYmCisJCWVjaG8geSB8IGdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgY2hhbmdlcyAvL2RlcG90Ly4uLiA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gY29uZmlnLCB1bmVkaXRlZCwgc2F5IG5vJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZSA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSAzIChub3QgcmVhbGx5KSIgJiYKKwkJcHJpbnRmICJiYWQgcmVzcG9uc2Vcbm5cbiIgfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBjaGFuZ2VzIC8vZGVwb3QvLi4uID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwU3VibWl0RWRpdCcgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgd2lsbCBmYWlsIGlmIGVkaXRvciBpcyBldmVuIGludm9rZWQKKwkJZ2l0IGNvbmZpZyBjb3JlLmVkaXRvciAvYmluL2ZhbHNlICYmCisJCWVjaG8gbGluZSA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSAzIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGNoYW5nZXMgLy9kZXBvdC8uLi4gPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBTdWJtaXRFZGl0Q2hlY2snICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjayB0cnVlICYmCisJCWVjaG8gbGluZSA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSA0IiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGNoYW5nZXMgLy9kZXBvdC8uLi4gPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgd2MKKwkpCisnCisKKyMgY2hlY2sgdGhlIG5vcm1hbCBjYXNlLCB3aGVyZSB0aGUgdGVtcGxhdGUgcmVhbGx5IGlzIGVkaXRlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gY29uZmlnLCBlZGl0ZWQnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBlZC5zaCIgJiYKKwljYXQgPmVkLnNoIDw8LUVPRiAmJgorCQkjISRTSEVMTF9QQVRICisJCXNsZWVwIDEKKwkJdG91Y2ggIlwkMSIKKwkJZXhpdCAwCisJRU9GCisJY2htb2QgNzU1IGVkLnNoICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIDUiICYmCisJCVA0RURJVE9SPSJcIiRUUkFTSF9ESVJFQ1RPUlkvZWQuc2hcIiIgJiYKKwkJZXhwb3J0IFA0RURJVE9SICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgY2hhbmdlcyAvL2RlcG90Ly4uLiA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSB3YworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA2LWdpdC1wNC1vcHRpb25zLnNoIGIvdC90OTgwNi1naXQtcDQtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZTc5NGEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwNi1naXQtcDQtb3B0aW9ucy5zaApAQCAtMCwwICsxLDMwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBvcHRpb25zJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIiAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMiIgJiYKKwkJZWNobyBmaWxlMyA+ZmlsZTMgJiYKKwkJcDQgYWRkIGZpbGUzICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDMiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBubyAtLWdpdC1kaXInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1naXQtZGlyPXh4IC8vZGVwb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1icmFuY2ggc2hvdWxkIGNoZWNrb3V0IG1hc3RlcicgJworCWdpdCBwNCBjbG9uZSAtLWJyYW5jaD1yZWZzL3JlbW90ZXMvcDQvc2IgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcDQvc2IgPnNiICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIgPm1hc3RlciAmJgorCQl0ZXN0X2NtcCBzYiBtYXN0ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEID5oZWFkICYmCisJCXRlc3RfY21wIHNiIGhlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgd2hlbiBubyBtYXN0ZXIgYnJhbmNoIHByaW50cyBhIG5pY2UgZXJyb3InICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L3NiIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEAyICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN5bmMgMj5lcnIgJiYKKwkJZ3JlcCAiRXJyb3I6IG5vIGJyYW5jaCByZWZzL3JlbW90ZXMvcDQvbWFzdGVyIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgLS1icmFuY2ggYnVpbGRzIHRoZSBmdWxsIHJlZiBuYW1lIGNvcnJlY3RseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9YjEgLy9kZXBvdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9wNC9iMSAmJgorCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1wNC9iMiAvL2RlcG90ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3A0L2IyICYmCisKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbG9jYWwgLS1icmFuY2g9aDEgLy9kZXBvdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcDQvaDEgJiYKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbG9jYWwgLS1icmFuY2g9cDQvaDIgLy9kZXBvdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcDQvaDIgJiYKKworCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1yZWZzL3N0dWZmIC8vZGVwb3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3N0dWZmCisJKQorJworCisjIGVuZ2FnZXMgLS1kZXRlY3QtYnJhbmNoZXMgY29kZSwgd2hpY2ggd2lsbCBkbyBmaWxlbmFtZSBmaWx0ZXJpbmcgc28KKyMgbm8gc3luYyB0byBlaXRoZXIgYjEgb3IgYjIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgd2hlbiB0d28gYnJhbmNoZXMgYnV0IG5vIG1hc3RlciBzaG91bGQgbm9vcCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPXJlZnMvcmVtb3Rlcy9wNC9iMSAvL2RlcG90QDIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L2IyIC8vZGVwb3RAMiAmJgorCQlnaXQgcDQgc3luYyAmJgorCQlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyByZWZzL3JlbW90ZXMvcDQvYjEgPnNob3cgJiYKKwkJZ3JlcCAiSW5pdGlhbCBpbXBvcnQiIHNob3cgJiYKKwkJZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMgcmVmcy9yZW1vdGVzL3A0L2IyID5zaG93ICYmCisJCWdyZXAgIkluaXRpYWwgaW1wb3J0IiBzaG93CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW5jIC0tYnJhbmNoIHVwZGF0ZXMgc3BlY2lmaWMgYnJhbmNoLCBubyBkZXRlY3Rpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1iMSAvL2RlcG90QDIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9YjIgLy9kZXBvdEAyICYmCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPWIyICYmCisJCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzIHJlZnMvcmVtb3Rlcy9wNC9iMSA+c2hvdyAmJgorCQlncmVwICJJbml0aWFsIGltcG9ydCIgc2hvdyAmJgorCQlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyByZWZzL3JlbW90ZXMvcDQvYjIgPnNob3cgJiYKKwkJZ3JlcCAiY2hhbmdlIDMiIHNob3cKKwkpCisnCisKKyMgYWxsb3dzIHVzaW5nIHRoZSByZWZuYW1lICJwNCIgYXMgYSBzaG9ydCBuYW1lIGZvciBwNC9tYXN0ZXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNyZWF0ZXMgSEVBRCBzeW1ib2xpYyByZWZlcmVuY2UnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvcDQvbWFzdGVyID5tYXN0ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBwNCA+cDQgJiYKKwkJdGVzdF9jbXAgbWFzdGVyIHA0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWJyYW5jaCBjcmVhdGVzIEhFQUQgc3ltYm9saWMgcmVmZXJlbmNlJyAnCisJZ2l0IHA0IGNsb25lIC0tYnJhbmNoPXJlZnMvcmVtb3Rlcy9wNC9zYiAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9wNC9zYiA+c2IgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBwNCA+cDQgJiYKKwkJdGVzdF9jbXAgc2IgcDQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tY2hhbmdlc2ZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIGNmIiAmJgorCXByaW50ZiAiMVxuM1xuIiA+Y2YgJiYKKwlnaXQgcDQgY2xvbmUgLS1jaGFuZ2VzZmlsZT0iJFRSQVNIX0RJUkVDVE9SWS9jZiIgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWNoYW5nZXNmaWxlLCBAYWxsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBjZiIgJiYKKwlwcmludGYgIjFcbjNcbiIgPmNmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC0tY2hhbmdlc2ZpbGU9IiRUUkFTSF9ESVJFQ1RPUlkvY2YiIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwKKycKKworIyBpbXBvcnRzIGJvdGggbWFzdGVyIGFuZCBwNC9tYXN0ZXIgaW4gcmVmcy9oZWFkcworIyByZXF1aXJlcyAtLWltcG9ydC1sb2NhbCBvbiBzeW5jIHRvIGZpbmQgcDQgcmVmcy9oZWFkcworIyBkb2VzIG5vdCB1cGRhdGUgbWFzdGVyIG9uIHN5bmMsIGp1c3QgcDQvbWFzdGVyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZS9zeW5jIC0taW1wb3J0LWxvY2FsJyAnCisJZ2l0IHA0IGNsb25lIC0taW1wb3J0LWxvY2FsIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEAxLDIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSByZWZzL2hlYWRzL21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCQlnaXQgbG9nIC0tb25lbGluZSByZWZzL2hlYWRzL3A0L21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3luYyAmJgorCisJCWdpdCBwNCBzeW5jIC0taW1wb3J0LWxvY2FsICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHJlZnMvaGVhZHMvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHJlZnMvaGVhZHMvcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW1heC1jaGFuZ2VzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1tYXgtY2hhbmdlcyAyIC8vZGVwb3RAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcmVmcy9oZWFkcy9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0ta2VlcC1wYXRoJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgc3ViL2RpciAmJgorCQllY2hvIGY0ID5zdWIvZGlyL2Y0ICYmCisJCXA0IGFkZCBzdWIvZGlyL2Y0ICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDQiCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0ta2VlcC1wYXRoIC8vZGVwb3Qvc3ViL2RpckBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmNCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBzdWIvZGlyL2Y0CisJKSAmJgorCWNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9zdWIvZGlyQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGY0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Yi9kaXIvZjQKKwkpCisnCisKKyMgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgbXVzdCBzdGlsbCBzcGVjaWZ5IGEgZGVwb3QgcGF0aAorIyBpZiBnaXZlbiwgaXQgc2hvdWxkIHJlYXJyYW5nZSBmaWxlcyBhY2NvcmRpbmcgdG8gY2xpZW50IHNwZWMKKyMgd2hlbiBpdCBoYXMgdmlldyBsaW5lcyB0aGF0IG1hdGNoIHRoZSBkZXBvdCBwYXRoCisjIFhYWDogc2hvdWxkIGNsb25lL3N5bmMganVzdCB1c2UgdGhlIGNsaWVudCBzcGVjIGV4YWN0bHksIHJhdGhlcgorIyB0aGFuIG5lZWRpbmcgZGVwb3QgcGF0aHM/Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLXVzZS1jbGllbnQtc3BlYycgJworCSgKKwkJIyBiaWcgdXNhZ2UgbWVzc2FnZQorCQlleGVjID4vZGV2L251bGwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS11c2UtY2xpZW50LXNwZWMKKwkpICYmCisJIyBidWlsZCBhIGRpZmZlcmVudCBjbGllbnQKKwljbGkyPSIkVFJBU0hfRElSRUNUT1JZL2NsaTIiICYmCisJbWtkaXIgLXAgIiRjbGkyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm1kaXIgXCIkY2xpMlwiIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJIyBncm91cCBQNENMSUVOVCBhbmQgY2xpIGNoYW5nZXMgaW4gYSBzdWItc2hlbGwKKwkJUDRDTElFTlQ9Y2xpZW50MiAmJgorCQljbGk9IiRjbGkyIiAmJgorCQljbGllbnRfdmlldyAiLy9kZXBvdC9zdWIvLi4uIC8vY2xpZW50Mi9idXMvLi4uIiAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLXVzZS1jbGllbnQtc3BlYyAvL2RlcG90Ly4uLiAmJgorCQkoCisJCQljZCAiJGdpdCIgJiYKKwkJCXRlc3RfcGF0aF9pc19maWxlIGJ1cy9kaXIvZjQgJiYKKwkJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxCisJCSkgJiYKKwkJY2xlYW51cF9naXQgJiYKKwkJIyBzYW1lIHRoaW5nIGFnYWluLCB0aGlzIHRpbWUgd2l0aCB2YXJpYWJsZSBpbnN0ZWFkIG9mIG9wdGlvbgorCQkoCisJCQljZCAiJGdpdCIgJiYKKwkJCWdpdCBpbml0ICYmCisJCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJCWdpdCBwNCBzeW5jIC8vZGVwb3QvLi4uICYmCisJCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L21hc3RlciAmJgorCQkJdGVzdF9wYXRoX2lzX2ZpbGUgYnVzL2Rpci9mNCAmJgorCQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTEKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IHdvcmtzIHdpdGggbm8gcDQvbWFzdGVyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tYnJhbmNoPWIxIC8vZGVwb3RAMSwyIC0tZGVzdGluYXRpb249IiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgc3VibWl0LTEtYnJhbmNoICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWJyYW5jaD1iMQorCSkKKycKKworIyBUaGUgc3luYy9yZWJhc2UgcGFydCBwb3N0LXN1Ym1pdCB3aWxsIGVuZ2FnZSBkZXRlY3QtYnJhbmNoZXMKKyMgbWFjaGluZXJ5IHdoaWNoIHdpbGwgbm90IGRvIGFueXRoaW5nIGluIHRoaXMgcGFydGljdWxhciB0ZXN0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IHdvcmtzIHdpdGggdHdvIGJyYW5jaGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tYnJhbmNoPWIxIC8vZGVwb3RAMSwyIC0tZGVzdGluYXRpb249IiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9YjIgLy9kZXBvdEAxLDMgJiYKKwkJdGVzdF9jb21taXQgc3VibWl0LTItYnJhbmNoZXMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1naXQtZGlyIG9wdGlvbiBhbmQgR0lUX0RJUicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAvL2RlcG90IC0tZGVzdGluYXRpb249IiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQl0ZXN0X2NvbW1pdCBmaXJzdC1jaGFuZ2UgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWdpdC1kaXIgIiRnaXQiCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlyc3QtY2hhbmdlLnQgJiYKKwkJZWNobyAiY2xpX2ZpbGUiID5jbGlfZmlsZS50ICYmCisJCXA0IGFkZCBjbGlfZmlsZS50ICYmCisJCXA0IHN1Ym1pdCAtZCAiY2xpIGNoYW5nZSIKKwkpICYmCisJKGdpdCAtLWdpdC1kaXIgIiRnaXQiIHA0IHN5bmMpICYmCisJKGNkICIkZ2l0IiAmJiBnaXQgY2hlY2tvdXQgLXEgcDQvbWFzdGVyKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkZ2l0Ii9jbGlfZmlsZS50ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyAiY2xpX2ZpbGUyIiA+Y2xpX2ZpbGUyLnQgJiYKKwkJcDQgYWRkIGNsaV9maWxlMi50ICAmJgorCQlwNCBzdWJtaXQgLWQgImNsaSBjaGFuZ2UyIgorCSkgJiYKKwkoR0lUX0RJUj0iJGdpdCIgZ2l0IHA0IHN5bmMpICYmCisJKGNkICIkZ2l0IiAmJiBnaXQgY2hlY2tvdXQgLXEgcDQvbWFzdGVyKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkZ2l0Ii9jbGlfZmlsZTIudAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDctZ2l0LXA0LXN1Ym1pdC5zaCBiL3QvdDk4MDctZ2l0LXA0LXN1Ym1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYWFhZTQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwNy1naXQtcDQtc3VibWl0LnNoCkBAIC0wLDAgKzEsNTk2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHN1Ym1pdCcKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lzX2NsaV9maWxlX3dyaXRlYWJsZSBmdW5jdGlvbicgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gYSA+YSAmJgorCQlpc19jbGlfZmlsZV93cml0ZWFibGUgYSAmJgorCQkhIGlzX2NsaV9maWxlX3dyaXRlYWJsZSBmaWxlMSAmJgorCQlybSBhCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgd2l0aCBubyBjbGllbnQgZGlyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZmlsZTIgPmZpbGUyICYmCisJCWdpdCBhZGQgZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZ2l0IGNvbW1pdCAyIiAmJgorCQlybSAtcmYgIiRjbGkiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMgorCSkKKycKKworIyBtYWtlIHR3byBjb21taXRzLCBidXQgdGVsbCBpdCB0byBhcHBseSBvbmx5IGZyb20gSEVBRF4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLW9yaWdpbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTMiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlNCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tb3JpZ2luPUhFQUReCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICJmaWxlMy50IiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAiZmlsZTQudCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLWRyeS1ydW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgImRyeS1ydW4xIiAmJgorCQl0ZXN0X2NvbW1pdCAiZHJ5LXJ1bjIiICYmCisJCWdpdCBwNCBzdWJtaXQgLS1kcnktcnVuID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiV291bGQgYXBwbHkiIG91dAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZHJ5LXJ1bjEudCIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgImRyeS1ydW4yLnQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgLS1kcnktcnVuIC0tZXhwb3J0LWxhYmVscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGRyeS1ydW4xID5kcnktcnVuMSAmJgorCQlnaXQgYWRkIGRyeS1ydW4xICYmCisJCWdpdCBjb21taXQgLW0gImRyeS1ydW4xIiBkcnktcnVuMSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJZWNobyBkcnktcnVuMiA+ZHJ5LXJ1bjIgJiYKKwkJZ2l0IGFkZCBkcnktcnVuMiAmJgorCQlnaXQgY29tbWl0IC1tICJkcnktcnVuMiIgZHJ5LXJ1bjIgJiYKKwkJZ2l0IHRhZyAtbSAiZHJ5LXJ1bi10YWcxIiBkcnktcnVuLXRhZzEgSEVBRF4gJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWRyeS1ydW4gLS1leHBvcnQtbGFiZWxzID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiV291bGQgY3JlYXRlIHA0IGxhYmVsIiBvdXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgImRyeS1ydW4xIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZHJ5LXJ1bjIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgd2l0aCBhbGxvd1N1Ym1pdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTUiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYWxsb3dTdWJtaXQgIm5vYnJhbmNoIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3VibWl0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmFsbG93U3VibWl0ICJub2JyYW5jaCxtYXN0ZXIiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCB3aXRoIG1hc3RlciBicmFuY2ggbmFtZSBmcm9tIGFyZ3YnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgImZpbGU2IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzdWJtaXQgbm9icmFuY2ggJiYKKwkJZ2l0IGJyYW5jaCBvdGhlcmJyYW5jaCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCXRlc3RfY29tbWl0ICJmaWxlNyIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCBvdGhlcmJyYW5jaAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAiZmlsZTYudCIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgImZpbGU3LnQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBzdWJtaXQgZnJvbSBicmFuY2ggd2l0aCBzYW1lIHJldmlzaW9uIGJ1dCBkaWZmZXJlbnQgbmFtZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTgiICYmCisJCWdpdCBjaGVja291dCAtYiBicmFuY2gxICYmCisJCWdpdCBjaGVja291dCAtYiBicmFuY2gyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYWxsb3dTdWJtaXQgImJyYW5jaDEiICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKworIyBtYWtlIHR3byBjb21taXRzLCBidXQgdGVsbCBpdCB0byBhcHBseSBvbmx5IG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgLS1jb21taXQgb25lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlOSIgJiYKKwkJdGVzdF9jb21taXQgImZpbGUxMCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tY29tbWl0IEhFQUQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgImZpbGU5LnQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlICJmaWxlMTAudCIKKwkpCisnCisKKyMgbWFrZSB0aHJlZSBjb21taXRzLCBidXQgdGVsbCBpdCB0byBhcHBseSBvbmx5IHJhbmdlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLWNvbW1pdCByYW5nZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTExIiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTEyIiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTEzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS1jb21taXQgSEVBRH4yLi5IRUFECisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICJmaWxlMTEudCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgImZpbGUxMi50IiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAiZmlsZTEzLnQiCisJKQorJworCisjCisjIEJhc2ljIHN1Ym1pdCB0ZXN0cywgdGhlIGZpdmUgaGFuZGxlZCBjYXNlcworIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgbW9kaWZ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBsaW5lID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tIGZpbGUxICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBmaWxlMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IGFkZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWVjaG8gZmlsZTEzID5maWxlMTMgJiYKKwkJZ2l0IGFkZCBmaWxlMTMgJiYKKwkJZ2l0IGNvbW1pdCAtbSBmaWxlMTMgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMTMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBkZWxldGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcm0gZmlsZTQudCAmJgorCQlnaXQgY29tbWl0IC1tICJkZWxldGUgZmlsZTQudCIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNC50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgY29weScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCWNwIGZpbGU1LnQgZmlsZTUudGEgJiYKKwkJZ2l0IGFkZCBmaWxlNS50YSAmJgorCQlnaXQgY29tbWl0IC1tICJjb3B5IHRvIGZpbGU1LnRhIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGU1LnRhICYmCisJCSEgaXNfY2xpX2ZpbGVfd3JpdGVhYmxlIGZpbGU1LnRhCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgcmVuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCWdpdCBtdiBmaWxlNi50IGZpbGU2LnRhICYmCisJCWdpdCBjb21taXQgLW0gInJlbmFtZSBmaWxlNi50IHRvIGZpbGU2LnRhIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU2LnQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTYudGEgJiYKKwkJISBpc19jbGlfZmlsZV93cml0ZWFibGUgZmlsZTYudGEKKwkpCisnCisKKyMKKyMgQ29udmVydGluZyBnaXQgY29tbWl0IG1lc3NhZ2UgdG8gcDQgY2hhbmdlIGRlc2NyaXB0aW9uLCBpbmNsdWRpbmcKKyMgcGFyc2luZyBvdXQgdGhlIG9wdGlvbmFsIEpvYnM6IGxpbmUuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgb25lLWxpbmUgZGVzY3JpcHRpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjMiA+ZGVzYzIgJiYKKwkJZ2l0IGFkZCBkZXNjMiAmJgorCQljYXQgPm1zZyA8PC1FT0YgJiYKKwkJT25lLWxpbmUgZGVzY3JpcHRpb24gbGluZSBmb3IgZGVzYzIuCisJCUVPRgorCQlnaXQgY29tbWl0IC1GIC0gPG1zZyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJY2hhbmdlPSQocDQgLUcgY2hhbmdlcyAtbSAxIC8vZGVwb3QvLi4uIHwgXAorCQkJIG1hcnNoYWxfZHVtcCBjaGFuZ2UpICYmCisJCSMgbWFyc2hhbF9kdW1wIGFsd2F5cyBhZGRzIGEgbmV3bGluZQorCQlwNCAtRyBkZXNjcmliZSAkY2hhbmdlIHwgbWFyc2hhbF9kdW1wIGRlc2MgfCBzZWQgXCRkID5wbXNnICYmCisJCXRlc3RfY21wIG1zZyBwbXNnCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmlwdGlvbiB3aXRoIG9kZCBmb3JtYXR0aW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZGVzYzMgPmRlc2MzICYmCisJCWdpdCBhZGQgZGVzYzMgJiYKKwkJKAorCQkJcHJpbnRmICJzdWJqZWN0IGxpbmVcblxuXHRFeHRyYSB0YWJcbmxpbmUuXG5cbiIgJiYKKwkJCXByaW50ZiAiRGVzY3JpcHRpb246XG5cdEJvZ3VzIGRlc2NyaXB0aW9uIG1hcmtlclxuXG4iICYmCisJCQkjIGdpdCBjb21taXQgZWF0cyB0cmFpbGluZyBuZXdsaW5lczsgb25seSB1c2Ugb25lCisJCQlwcmludGYgIkZpbGVzOlxuXHRCb2d1cyBkZXNjcyBtYXJrZXJcbiIKKwkJKSA+bXNnICYmCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJIyBtYXJzaGFsX2R1bXAgYWx3YXlzIGFkZHMgYSBuZXdsaW5lCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgZGVzYyB8IHNlZCBcJGQgPnBtc2cgJiYKKwkJdGVzdF9jbXAgbXNnIHBtc2cKKwkpCisnCisKK21ha2Vfam9iKCkgeworCW5hbWU9IiQxIiAmJgorCXRhYj0iJChwcmludGYgXFx0KSIgJiYKKwlwNCBqb2IgLW8gfCBcCisJc2VkIC1lICIvXkpvYjovcy8uKi9Kb2I6ICRuYW1lLyIgXAorCSAgICAtZSAiL15EZXNjcmlwdGlvbi97IG47IHMvLiovJHRhYiBqb2IgdGV4dC87IH0iIHwgXAorCXA0IGpvYiAtaQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmlwdGlvbiB3aXRoIEpvYnMgc2VjdGlvbiBhdCBlbmQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjNCA+ZGVzYzQgJiYKKwkJZ2l0IGFkZCBkZXNjNCAmJgorCQllY2hvIDYwNjA4NDIgPmpvYm5hbWUgJiYKKwkJKAorCQkJcHJpbnRmICJzdWJqZWN0IGxpbmVcblxuXHRFeHRyYSB0YWJcbmxpbmUuXG5cbiIgJiYKKwkJCXByaW50ZiAiRmlsZXM6XG5cdEJvZ3VzIGZpbGVzIG1hcmtlclxuIiAmJgorCQkJcHJpbnRmICJKdW5rOiAzMTY0MTc1XG4iICYmCisJCQlwcmludGYgIkpvYnM6ICQoY2F0IGpvYm5hbWUpXG4iCisJCSkgPm1zZyAmJgorCQlnaXQgY29tbWl0IC1GIC0gPG1zZyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgYnVpbGQgYSBqb2IKKwkJbWFrZV9qb2IgJChjYXQgam9ibmFtZSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJIyBtYXJzaGFsX2R1bXAgYWx3YXlzIGFkZHMgYSBuZXdsaW5lCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgZGVzYyB8IHNlZCBcJGQgPnBtc2cgJiYKKwkJIyBtYWtlIHN1cmUgSm9icyBsaW5lIGFuZCBhbGwgZm9sbG93aW5nIGlzIGdvbmUKKwkJc2VkICIvXkpvYnM6LyxcJGQiIG1zZyA+am1zZyAmJgorCQl0ZXN0X2NtcCBqbXNnIHBtc2cgJiYKKwkJIyBtYWtlIHN1cmUgcDQga25vd3MgYWJvdXQgam9iCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgam9iMCA+am9iMCAmJgorCQl0ZXN0X2NtcCBqb2JuYW1lIGpvYjAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaXB0aW9uIHdpdGggSm9icyBhbmQgdmFsdWVzIG9uIHNlcGFyYXRlIGxpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZGVzYzUgPmRlc2M1ICYmCisJCWdpdCBhZGQgZGVzYzUgJiYKKwkJZWNobyBQUk9KLTYwNjA4NDIgPmpvYm5hbWUxICYmCisJCWVjaG8gUFJPSi02MDYwODQ3ID5qb2JuYW1lMiAmJgorCQkoCisJCQlwcmludGYgInN1YmplY3QgbGluZVxuXG5cdEV4dHJhIHRhYlxubGluZS5cblxuIiAmJgorCQkJcHJpbnRmICJGaWxlczpcblx0Qm9ndXMgZmlsZXMgbWFya2VyXG4iICYmCisJCQlwcmludGYgIkp1bms6IDMxNjQxNzVcbiIgJiYKKwkJCXByaW50ZiAiSm9iczpcbiIgJiYKKwkJCXByaW50ZiAiXHQkKGNhdCBqb2JuYW1lMSlcbiIgJiYKKwkJCXByaW50ZiAiXHQkKGNhdCBqb2JuYW1lMilcbiIKKwkJKSA+bXNnICYmCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyBidWlsZCB0d28gam9icworCQltYWtlX2pvYiAkKGNhdCBqb2JuYW1lMSkgJiYKKwkJbWFrZV9qb2IgJChjYXQgam9ibmFtZTIpICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJY2hhbmdlPSQocDQgLUcgY2hhbmdlcyAtbSAxIC8vZGVwb3QvLi4uIHwgXAorCQkJIG1hcnNoYWxfZHVtcCBjaGFuZ2UpICYmCisJCSMgbWFyc2hhbF9kdW1wIGFsd2F5cyBhZGRzIGEgbmV3bGluZQorCQlwNCAtRyBkZXNjcmliZSAkY2hhbmdlIHwgbWFyc2hhbF9kdW1wIGRlc2MgfCBzZWQgXCRkID5wbXNnICYmCisJCSMgbWFrZSBzdXJlIEpvYnMgbGluZSBhbmQgYWxsIGZvbGxvd2luZyBpcyBnb25lCisJCXNlZCAiL15Kb2JzOi8sXCRkIiBtc2cgPmptc2cgJiYKKwkJdGVzdF9jbXAgam1zZyBwbXNnICYmCisJCSMgbWFrZSBzdXJlIHA0IGtub3dzIGFib3V0IHRoZSB0d28gam9icworCQlwNCAtRyBkZXNjcmliZSAkY2hhbmdlID5jaGFuZ2UgJiYKKwkJKAorCQkJbWFyc2hhbF9kdW1wIGpvYjAgPGNoYW5nZSAmJgorCQkJbWFyc2hhbF9kdW1wIGpvYjEgPGNoYW5nZQorCQkpIHwgc29ydCA+am9icyAmJgorCQljYXQgam9ibmFtZTEgam9ibmFtZTIgfCBzb3J0ID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBqb2JzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmlwdGlvbiB3aXRoIEpvYnMgc2VjdGlvbiBhbmQgYm9ndXMgZm9sbG93aW5nIHRleHQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjNiA+ZGVzYzYgJiYKKwkJZ2l0IGFkZCBkZXNjNiAmJgorCQllY2hvIDYwNjA4NDMgPmpvYm5hbWUgJiYKKwkJKAorCQkJcHJpbnRmICJzdWJqZWN0IGxpbmVcblxuXHRFeHRyYSB0YWJcbmxpbmUuXG5cbiIgJiYKKwkJCXByaW50ZiAiRmlsZXM6XG5cdEJvZ3VzIGZpbGVzIG1hcmtlclxuIiAmJgorCQkJcHJpbnRmICJKdW5rOiAzMTY0MTc1XG4iICYmCisJCQlwcmludGYgIkpvYnM6ICQoY2F0IGpvYm5hbWUpXG4iICYmCisJCQlwcmludGYgIk1vcmVKdW5rOiAzNzExXG4iCisJCSkgPm1zZyAmJgorCQlnaXQgY29tbWl0IC1GIC0gPG1zZyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgYnVpbGQgYSBqb2IKKwkJbWFrZV9qb2IgJChjYXQgam9ibmFtZSkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwICJVbmtub3duIGZpZWxkIG5hbWUiIGVycgorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCByZXZlcnQgZGVzYzYgJiYKKwkJcm0gLWYgZGVzYzYKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLXByZXBhcmUtcDQtb25seScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIHByZXAtb25seS1hZGQgPnByZXAtb25seS1hZGQgJiYKKwkJZ2l0IGFkZCBwcmVwLW9ubHktYWRkICYmCisJCWdpdCBjb21taXQgLW0gInByZXAgb25seSBhZGQiICYmCisJCWdpdCBwNCBzdWJtaXQgLS1wcmVwYXJlLXA0LW9ubHkgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJwcmVwYXJlZCBmb3Igc3VibWlzc2lvbiIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIm11c3QgYmUgZGVsZXRlZCIgb3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgISAiZXZlcnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgaXMganVzdCB0aGUgZGlmZiIgb3V0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHByZXAtb25seS1hZGQgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHByZXAtb25seS1hZGQgfCBncmVwIC13IGFkZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tc2hlbHZlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHJldmVydCAuLi4gJiYKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJdGVzdF9jb21taXQgInNoZWx2ZW1lMSIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLW9yaWdpbj1IRUFEXiAmJgorCisJCWVjaG8gNjU0MzIxID5zaGVsdmVtZTIudCAmJgorCQllY2hvIDEyMzQ1NiA+PnNoZWx2ZW1lMS50ICYmCisJCWdpdCBhZGQgc2hlbHZlbWUqICYmCisJCWdpdCBjb21taXQgLW0ic2hlbHZldGVzdCIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXNoZWx2ZSAtLW9yaWdpbj1IRUFEXiAmJgorCisJCXRlc3RfcGF0aF9pc19maWxlIHNoZWx2ZW1lMS50ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHNoZWx2ZW1lMi50CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWNoYW5nZT0kKHA0IC1HIGNoYW5nZXMgLXMgc2hlbHZlZCAtbSAxIC8vZGVwb3QvLi4uIHwgXAorCQkJIG1hcnNoYWxfZHVtcCBjaGFuZ2UpICYmCisJCXA0IGRlc2NyaWJlIC1TICRjaGFuZ2UgfCBncmVwIHNoZWx2ZW1lMiAmJgorCQlwNCBkZXNjcmliZSAtUyAkY2hhbmdlIHwgZ3JlcCAxMjM0NTYgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgc2hlbHZlbWUxLnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgc2hlbHZlbWUyLnQKKwkpCisnCisKK2xhc3Rfc2hlbHZlICgpIHsKKwlwNCAtRyBjaGFuZ2VzIC1zIHNoZWx2ZWQgLW0gMSAvL2RlcG90Ly4uLiB8IG1hcnNoYWxfZHVtcCBjaGFuZ2UKK30KKworbWFrZV9zaGVsdmVkX2NsKCkgeworCXRlc3RfY29tbWl0ICIkMSIgPi9kZXYvbnVsbCAmJgorCWdpdCBwNCBzdWJtaXQgLS1vcmlnaW4gSEVBRF4gLS1zaGVsdmUgPi9kZXYvbnVsbCAmJgorCXA0IC1HIGNoYW5nZXMgLXMgc2hlbHZlZCAtbSAxIHwgbWFyc2hhbF9kdW1wIGNoYW5nZQorfQorCisjIFVwZGF0ZSBleGlzdGluZyBzaGVsdmVkIGNoYW5nZWxpc3RzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLXVwZGF0ZS1zaGVsdmUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgcmV2ZXJ0IC4uLiAmJgorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlzaGVsdmVkX2NsMD0kKG1ha2Vfc2hlbHZlZF9jbCAic2hlbHZlZC1jaGFuZ2UtMCIpICYmCisJCWVjaG8gc2hlbHZlZF9jbDA9JHNoZWx2ZWRfY2wwICYmCisJCXNoZWx2ZWRfY2wxPSQobWFrZV9zaGVsdmVkX2NsICJzaGVsdmVkLWNoYW5nZS0xIikgJiYKKworCQllY2hvICJ1cGRhdGluZyBzaGVsdmVkIGNoYW5nZSBsaXN0cyAkc2hlbHZlZF9jbDAgYW5kICRzaGVsdmVkX2NsMSIgJiYKKworCQllY2hvICJ1cGRhdGVkLWxpbmUiID4+c2hlbGYudCAmJgorCQllY2hvIGFkZGVkLWZpbGUudCA+YWRkZWQtZmlsZS50ICYmCisJCWdpdCBhZGQgc2hlbGYudCBhZGRlZC1maWxlLnQgJiYKKwkJZ2l0IHJtIC1mIHNoZWx2ZWQtY2hhbmdlLTEudCAmJgorCQlnaXQgY29tbWl0IC0tYW1lbmQgLUMgSEVBRCAmJgorCQlnaXQgc2hvdyAtLXN0YXQgSEVBRCAmJgorCQlnaXQgcDQgc3VibWl0IC12IC0tb3JpZ2luIEhFQUR+MiAtLXVwZGF0ZS1zaGVsdmUgJHNoZWx2ZWRfY2wwIC0tdXBkYXRlLXNoZWx2ZSAkc2hlbHZlZF9jbDEgJiYKKwkJZWNobyAiZG9uZSBnaXQgcDQgc3VibWl0IgorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQljaGFuZ2U9JChsYXN0X3NoZWx2ZSkgJiYKKwkJcDQgdW5zaGVsdmUgLWMgJGNoYW5nZSAtcyAkY2hhbmdlICYmCisJCWdyZXAgLXEgdXBkYXRlZC1saW5lIHNoZWxmLnQgJiYKKwkJcDQgZGVzY3JpYmUgLVMgJGNoYW5nZSB8IGdyZXAgYWRkZWQtZmlsZS50ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHNoZWx2ZWQtY2hhbmdlLTEudCAmJgorCQlwNCByZXZlcnQgLi4uCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgYSBzaGVsdmUgaW52b2x2aW5nIG1vdmVkIGFuZCBjb3BpZWQgZmlsZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQk6ID5maWxlX3RvX21vdmUgJiYKKwkJcDQgYWRkIGZpbGVfdG9fbW92ZSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZTEiICYmCisJCXA0IGVkaXQgZmlsZV90b19tb3ZlICYmCisJCWVjaG8gY2hhbmdlID4+ZmlsZV90b19tb3ZlICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlMiIgJiYKKwkJcDQgb3BlbmVkCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlta2RpciBtb3ZlZCAmJgorCQljcCBmaWxlX3RvX21vdmUgY29weV9vZl9maWxlICYmCisJCWdpdCBhZGQgY29weV9vZl9maWxlICYmCisJCWdpdCBtdiBmaWxlX3RvX21vdmUgbW92ZWQvICYmCisJCWdpdCBjb21taXQgLW0gInJlbmFtZSBhIGZpbGUiICYmCisJCWdpdCBwNCBzdWJtaXQgLU0gLS1zaGVsdmUgLS1vcmlnaW4gSEVBRF4gJiYKKwkJOiA+bmV3X2ZpbGUgJiYKKwkJZ2l0IGFkZCBuZXdfZmlsZSAmJgorCQlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwkJZ2l0IHNob3cgLS1zdGF0IEhFQUQgJiYKKwkJY2hhbmdlPSQobGFzdF9zaGVsdmUpICYmCisJCWdpdCBwNCBzdWJtaXQgLU0gLS11cGRhdGUtc2hlbHZlICRjaGFuZ2UgLS1jb21taXQgSEVBRAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQljaGFuZ2U9JChsYXN0X3NoZWx2ZSkgJiYKKwkJZWNobyBjaGFuZ2U9JGNoYW5nZSAmJgorCQlwNCB1bnNoZWx2ZSAtcyAkY2hhbmdlICYmCisJCXA0IHN1Ym1pdCAtZCAiVGVzdGluZyB1cGRhdGUtc2hlbHZlIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBjb3B5X29mX2ZpbGUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgbW92ZWQvZmlsZV90b19tb3ZlICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGVfdG9fbW92ZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBuZXdfZmlsZSAmJgorCQllY2hvICJ1bnNoZWx2ZWQgYW5kIHN1Ym1pdHRlZCBjaGFuZ2UgJGNoYW5nZSIgJiYKKwkJcDQgY2hhbmdlcyBtb3ZlZC9maWxlX3RvX21vdmUgfCBncmVwICJUZXN0aW5nIHVwZGF0ZS1zaGVsdmUiICYmCisJCXA0IGNoYW5nZXMgY29weV9vZl9maWxlIHwgZ3JlcCAiVGVzdGluZyB1cGRhdGUtc2hlbHZlIgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA4LWdpdC1wNC1jaGRpci5zaCBiL3QvdDk4MDgtZ2l0LXA0LWNoZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4YTliM2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODA4LWdpdC1wNC1jaGRpci5zaApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHJlbGF0aXZlIGNoZGlyJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIgorCSkKKycKKworIyBQNCByZWFkcyBmcm9tIFA0Q09ORklHIGZpbGUgdG8gZmluZCBpdHMgc2VydmVyIHBhcmFtcywgaWYgdGhlCisjIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldAordGVzdF9leHBlY3Rfc3VjY2VzcyAnUDRDT05GSUcgYW5kIGFic29sdXRlIGRpciBjbG9uZScgJworCXByaW50ZiAiUDRQT1JUPSRQNFBPUlRcblA0Q0xJRU5UPSRQNENMSUVOVFxuIiA+cDRjb25maWcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIHA0Y29uZmlnIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJUDRDT05GSUc9cDRjb25maWcgJiYgZXhwb3J0IFA0Q09ORklHICYmCisJCXNhbmVfdW5zZXQgUDRQT1JUIFA0Q0xJRU5UICYmCisJCWdpdCBwNCBjbG9uZSAtLXZlcmJvc2UgLS1kZXN0PSIkZ2l0IiAvL2RlcG90CisJKQorJworCisjIHNhbWUgdGhpbmcsIGJ1dCB3aXRoIHJlbGF0aXZlIGRpcmVjdG9yeSBuYW1lLCBub3RlIG1pc3NpbmcgJCBvbiAtLWRlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1A0Q09ORklHIGFuZCByZWxhdGl2ZSBkaXIgY2xvbmUnICcKKwlwcmludGYgIlA0UE9SVD0kUDRQT1JUXG5QNENMSUVOVD0kUDRDTElFTlRcbiIgPnA0Y29uZmlnICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBwNGNvbmZpZyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCVA0Q09ORklHPXA0Y29uZmlnICYmIGV4cG9ydCBQNENPTkZJRyAmJgorCQlzYW5lX3Vuc2V0IFA0UE9SVCBQNENMSUVOVCAmJgorCQlnaXQgcDQgY2xvbmUgLS12ZXJib3NlIC0tZGVzdD0iZ2l0IiAvL2RlcG90CisJKQorJworCisjIENvbW1vbiBzZXR1cCB1c2luZyAucDRjb25maWcgdG8gc2V0IFA0Q0xJRU5UIGFuZCBQNFBPUlQgYnJlYWtzCisjIGlmIGNsb25lIGRlc3RpbmF0aW9uIGlzIHJlbGF0aXZlLiAgTWFrZSBzdXJlIHRoYXQgY2hkaXIoKSBleHBhbmRzCisjIHRoZSByZWxhdGl2ZSBwYXRoIGluIC0tZGVzdCB0byBhYnNvbHV0ZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3A0IGNsaWVudCByb290IHdvdWxkIGJlIHJlbGF0aXZlIGR1ZSB0byBjbG9uZSAtLWRlc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWVjaG8gUDRQT1JUPSRQNFBPUlQgPmdpdC8ucDRjb25maWcgJiYKKwkJUDRDT05GSUc9LnA0Y29uZmlnICYmCisJCWV4cG9ydCBQNENPTkZJRyAmJgorCQl1bnNldCBQNFBPUlQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0iZ2l0IiAvL2RlcG90CisJKQorJworCisjIFdoZW4gdGhlIHA0IGNsaWVudCBSb290IGlzIGEgc3ltbGluaywgbWFrZSBzdXJlIGNoZGlyKCkgZG9lcyBub3QgdXNlCisjIGdldGN3ZCgpIHRvIGNvbnZlcnQgaXQgdG8gYSBwaHlzaWNhbCBwYXRoLgordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncDQgY2xpZW50IHJvb3Qgc3ltbGluayBzaG91bGQgc3RheSBzeW1ib2xpYycgJworCXBoeXNpY2FsPSIkVFJBU0hfRElSRUNUT1JZL3BoeXNpY2FsIiAmJgorCXN5bWJvbGljPSIkVFJBU0hfRElSRUNUT1JZL3N5bWJvbGljIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIFwiJHBoeXNpY2FsXCIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBcIiRzeW1ib2xpY1wiIiAmJgorCW1rZGlyIC1wICIkcGh5c2ljYWwiICYmCisJbG4gLXMgIiRwaHlzaWNhbCIgIiRzeW1ib2xpYyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCVA0Q0xJRU5UPWNsaWVudC1zeW0gJiYKKwkJcDQgY2xpZW50IC1pIDw8LUVPRiAmJgorCQlDbGllbnQ6ICRQNENMSUVOVAorCQlEZXNjcmlwdGlvbjogJFA0Q0xJRU5UCisJCVJvb3Q6ICRzeW1ib2xpYworCQlMaW5lRW5kOiB1bml4CisJCVZpZXc6IC8vZGVwb3QvLi4uIC8vJFA0Q0xJRU5ULy4uLgorCQlFT0YKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgZmlsZTIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoIGIvdC90OTgwOS1naXQtcDQtY2xpZW50LXZpZXcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWM5NzEwZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoCkBAIC0wLDAgKzEsODM5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGNsaWVudCB2aWV3JworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIworIyBWZXJpZnkgdGhlc2UgZmlsZXMgZXhpc3QsIGV4YWN0bHkuICBDYWxsZXIgY3JlYXRlcworIyBhIGxpc3Qgb2YgZmlsZXMgaW4gZmlsZSAiZmlsZXMiLgorIworY2hlY2tfZmlsZXNfZXhpc3QoKSB7CisJb2s9MCAmJgorCW51bT0kIyAmJgorCWZvciBhcmcgOyBkbworCQl0ZXN0X3BhdGhfaXNfZmlsZSAiJGFyZyIgJiYKKwkJb2s9JCgoJG9rICsgMSkpCisJZG9uZSAmJgorCXRlc3QgJG9rIC1lcSAkbnVtICYmCisJdGVzdF9saW5lX2NvdW50ID0gJG51bSBmaWxlcworfQorCisjCisjIFN5bmMgdXAgdGhlIHA0IGNsaWVudCwgbWFrZSBzdXJlIHRoZSBnaXZlbiBmaWxlcyAoYW5kIG9ubHkKKyMgdGhvc2UpIGV4aXN0LgorIworY2xpZW50X3ZlcmlmeSgpIHsKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWZpbmQgLiAtdHlwZSBmICEgLW5hbWUgZmlsZXMgPmZpbGVzICYmCisJCWNoZWNrX2ZpbGVzX2V4aXN0ICIkQCIKKwkpCit9CisKKyMKKyMgTWFrZSBzdXJlIHRoZSBuYW1lZCBmaWxlcywgZXhhY3RseSwgZXhpc3QuCisjCitnaXRfdmVyaWZ5KCkgeworCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBscy1maWxlcyA+ZmlsZXMgJiYKKwkJY2hlY2tfZmlsZXNfZXhpc3QgIiRAIgorCSkKK30KKworIyAvL2RlcG90CisjICAgLSBkaXIxCisjICAgICAtIGZpbGUxMQorIyAgICAgLSBmaWxlMTIKKyMgICAtIGRpcjIKKyMgICAgIC0gZmlsZTIxCisjICAgICAtIGZpbGUyMgoraW5pdF9kZXBvdCgpIHsKKwlmb3IgZCBpbiAxIDIgOyBkbworCQlta2RpciAtcCBkaXIkZCAmJgorCQlmb3IgZiBpbiAxIDIgOyBkbworCQkJZWNobyBkaXIkZC9maWxlJGQkZiA+ZGlyJGQvZmlsZSRkJGYgJiYKKwkJCXA0IGFkZCBkaXIkZC9maWxlJGQkZiAmJgorCQkJcDQgc3VibWl0IC1kICJkaXIkZC9maWxlJGQkZiIKKwkJZG9uZQorCWRvbmUgJiYKKwlmaW5kIC4gLXR5cGUgZiAhIC1uYW1lIGZpbGVzID5maWxlcyAmJgorCWNoZWNrX2ZpbGVzX2V4aXN0IGRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIFwKKwkJCSAgZGlyMi9maWxlMjEgZGlyMi9maWxlMjIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWluaXRfZGVwb3QKKwkpCisnCisKKyMgZG91YmxlICUgZm9yIHByaW50ZgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmlldyB3aWxkY2FyZCAlJW4nICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8lJSUlMS9zdWIvLi4uIC8vY2xpZW50L3N1Yi8lJSUlMS8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2aWV3IHdpbGRjYXJkIConICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8qL2Jhci8uLi4gLy9jbGllbnQvKi9iYXIvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgLi4uIGluIHRoZSBtaWRkbGUnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4vZmlsZTExIC8vY2xpZW50Ly4uLi9maWxlMTEiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCAuLi4gaW4gdGhlIG1pZGRsZSBhbmQgYXQgdGhlIGVuZCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLi9hLy4uLiAvL2NsaWVudC8uLi4vYS8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBtYXAnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9jbGkxLy4uLiIgJiYKKwlmaWxlcz0iY2xpMS9maWxlMTEgY2xpMS9maWxlMTIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xpZW50IHZpZXcgd2l0aCBubyBtYXBwaW5ncycgJworCWNsaWVudF92aWV3ICYmCisJY2xpZW50X3ZlcmlmeSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBmaWxlIG1hcCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvZmlsZTExIC8vY2xpZW50L2ZpbGUxMSIgJiYKKwlmaWxlcz0iZmlsZTExIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhdGVyIG1hcHBpbmcgdGFrZXMgcHJlY2VkZW5jZSAoZW50aXJlIHJlcG8pJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpMS8uLi4iIFwKKwkJICAgICIvL2RlcG90Ly4uLiAvL2NsaWVudC9jbGkyLy4uLiIgJiYKKwlmaWxlcz0iY2xpMi9kaXIxL2ZpbGUxMSBjbGkyL2RpcjEvZmlsZTEyCisJICAgICAgIGNsaTIvZGlyMi9maWxlMjEgY2xpMi9kaXIyL2ZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXRlciBtYXBwaW5nIHRha2VzIHByZWNlZGVuY2UgKHBhcnRpYWwgcmVwbyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTIxIGZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCisjIFJlYWRpbmcgdGhlIHZpZXcgYmFja3dhcmRzLAorIyAgIGRpcjIgZ29lcyB0byBjbGkxMgorIyAgIGRpcjEgY2Fubm90IGdvIHRvIGNsaTEyIHNpbmNlIGl0IHdhcyBmaWxsZWQgYnkgZGlyMgorIyAgIGRpcjEgYWxzbyBkb2VzIG5vdCBnbyB0byBjbGkzLCBzaW5jZSB0aGUgc2Vjb25kIHJ1bGUKKyMgICAgIG5vdGljZWQgdGhhdCBpdCBtYXRjaGVkLCBidXQgd2FzIGFscmVhZHkgZmlsbGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXBvdCBwYXRoIG1hdGNoaW5nIHJlamVjdGVkIGNsaWVudCBwYXRoJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpMy8uLi4iIFwKKwkJICAgICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2NsaTEyLy4uLiIgXAorCQkgICAgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvY2xpMTIvLi4uIiAmJgorCWZpbGVzPSJjbGkxMi9maWxlMjEgY2xpMTIvZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKKyMgc2luY2UgYm90aCBoYXZlIHRoZSBzYW1lIC8vY2xpZW50Ly4uLiwgdGhlIGV4Y2x1c2lvbgorIyBydWxlIGtlZXBzIGV2ZXJ5dGhpbmcgb3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNsdXNpb24gd2lsZGNhcmQsIGNsaWVudCByaHMgc2FtZSAob2RkKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJY2xpZW50X3ZlcmlmeSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1c2lvbiB3aWxkY2FyZCwgY2xpZW50IHJocyBkaWZmZXJlbnQgKG5vcm1hbCknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiLS8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMi8uLi4iICYmCisJZmlsZXM9ImRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1c2lvbiBzaW5nbGUgZmlsZScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC9kaXIyL2ZpbGUyMiAvL2NsaWVudC9maWxlMjIiICYmCisJZmlsZXM9ImRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIGRpcjIvZmlsZTIxIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgd2lsZGNhcmQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9jbGkvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvY2xpLy4uLiIgJiYKKwlmaWxlcz0iY2xpL2ZpbGUxMSBjbGkvZmlsZTEyIGNsaS9maWxlMjEgY2xpL2ZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHNpbmdsZSBmaWxlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpLy4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvZmlsZTIxIC8vY2xpZW50L2NsaS9maWxlMjEiICYmCisJZmlsZXM9ImNsaS9maWxlMTEgY2xpL2ZpbGUxMiBjbGkvZmlsZTIxIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1c2lvbiB3aXRoIGxhdGVyIGluY2x1c2lvbicgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgXAorCQkgICAgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMmluY2wvLi4uIiAmJgorCWZpbGVzPSJkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMiBkaXIyaW5jbC9maWxlMjEgZGlyMmluY2wvZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBvbiByaHMgb25seScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIFwiLy9jbGllbnQvY2RpciAxLy4uLlwiIiAmJgorCWNsaWVudF92ZXJpZnkgImNkaXIgMS9maWxlMTEiICJjZGlyIDEvZmlsZTEyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICJjZGlyIDEvZmlsZTExIiAiY2RpciAxL2ZpbGUxMiIKKycKKworIworIyBTdWJtaXQgdGVzdHMKKyMKKworIyBjbG9uZSBzZXRzIHZhcmlhYmxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyBzZXRzIHVzZUNsaWVudFNwZWMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIC0tYm9vbCBnaXQtcDQudXNlQ2xpZW50U3BlYyA+YWN0dWFsICYmCisJCWVjaG8gdHJ1ZSA+dHJ1ZSAmJgorCQl0ZXN0X2NtcCBhY3R1YWwgdHJ1ZQorCSkKKycKKworIyBjbG9uZSBqdXN0IGEgc3ViZGlyIG9mIHRoZSBjbGllbnQgc3BlYwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZGlyMS9maWxlMTEgZGlyMS9maWxlMTIgZGlyMi9maWxlMjEgZGlyMi9maWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwlnaXRfdmVyaWZ5IGRpcjEvZmlsZTExIGRpcjEvZmlsZTEyCisnCisKKyMKKyMgc3VibWl0IGJhY2ssIHNlZSB3aGF0IGhhcHBlbnM6ICBmaXZlIGNhc2VzCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgY2xvbmUsIHN1Ym1pdCBtb2RpZnknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBsaW5lID4+ZGlyMS9maWxlMTIgJiYKKwkJZ2l0IGFkZCBkaXIxL2ZpbGUxMiAmJgorCQlnaXQgY29tbWl0IC1tIGRpcjEvZmlsZTEyICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9maWxlMTIgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBkaXIxL2ZpbGUxMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lLCBzdWJtaXQgYWRkJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWVjaG8gZmlsZTEzID5kaXIxL2ZpbGUxMyAmJgorCQlnaXQgYWRkIGRpcjEvZmlsZTEzICYmCisJCWdpdCBjb21taXQgLW0gZGlyMS9maWxlMTMgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2ZpbGUxMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lLCBzdWJtaXQgZGVsZXRlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBybSBkaXIxL2ZpbGUxMiAmJgorCQlnaXQgY29tbWl0IC1tICJkZWxldGUgZGlyMS9maWxlMTIiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlyMS9maWxlMTIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBjbG9uZSwgc3VibWl0IGNvcHknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJY3AgZGlyMS9maWxlMTEgZGlyMS9maWxlMTFhICYmCisJCWdpdCBhZGQgZGlyMS9maWxlMTFhICYmCisJCWdpdCBjb21taXQgLW0gImNvcHkgdG8gZGlyMS9maWxlMTFhIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZmlsZTExYSAmJgorCQkhIGlzX2NsaV9maWxlX3dyaXRlYWJsZSBkaXIxL2ZpbGUxMWEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBjbG9uZSwgc3VibWl0IHJlbmFtZScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9kaXIxICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IG12IGRpcjEvZmlsZTEzIGRpcjEvZmlsZTEzYSAmJgorCQlnaXQgY29tbWl0IC1tICJyZW5hbWUgZGlyMS9maWxlMTMgdG8gZGlyMS9maWxlMTNhIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpcjEvZmlsZTEzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZmlsZTEzYSAmJgorCQkhIGlzX2NsaV9maWxlX3dyaXRlYWJsZSBkaXIxL2ZpbGUxM2EKKwkpCisnCisKKyMgc2VlIHQ5ODAwIGZvciB0aGUgbm9uLWNsaWVudC1zcGVjIGNhc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgd2lsZGNhcmQgdGVzdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCBjbGllbnQtc3BlYyBjYXNlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGdpdC13aWxkLWhhc2ggPmRpcjEvZ2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCWVjaG8gZ2l0LXdpbGQtc3RhciA+ZGlyMS9naXQtd2lsZFwqc3RhcgorCQlmaSAmJgorCQllY2hvIGdpdC13aWxkLWF0ID5kaXIxL2dpdC13aWxkQGF0ICYmCisJCWVjaG8gZ2l0LXdpbGQtcGVyY2VudCA+ZGlyMS9naXQtd2lsZCVwZXJjZW50ICYmCisJCWdpdCBhZGQgZGlyMS9naXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHNvbWUgd2lsZGNhcmQgZmlsZW5hbWVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2dpdC13aWxkI2hhc2ggJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorCQl0aGVuCisJCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2dpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZ2l0LXdpbGRAYXQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9naXQtd2lsZCVwZXJjZW50CisJKSAmJgorCSgKKwkJIyBkZWxldGUgdGhlc2UgY2FyZWZ1bGx5LCBjYW5ub3QganVzdCBkbyAicDQgZGVsZXRlIgorCQkjIG9uIGZpbGVzIHdpdGggd2lsZGNhcmRzOyBidXQgZ2l0LXA0IGtub3dzIGhvdworCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJtIGRpcjEvZ2l0LXdpbGQqICYmCisJCWdpdCBjb21taXQgLW0gImNsZWFuIHVwIHRoZSB3aWxkY2FyZHMiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXJtIGZpbGVzICYmCisJCXA0IGRlbGV0ZSAqLyogJiYKKwkJcDQgc3VibWl0IC1kICJkZWxldGUgYWxsIGZpbGVzIiAmJgorCQlpbml0X2RlcG90CisJKQorJworCisjCisjIFdoYXQgaGFwcGVucyB3aGVuIHR3byBmaWxlcyBvZiB0aGUgc2FtZSBuYW1lIGFyZSBvdmVybGFpZCB0b2dldGhlcj8KKyMgVGhlIGxhc3QtbGlzdGVkIGZpbGUgc2hvdWxkIHRha2UgcHJlZmVyZW5jZS4KKyMKKyMgLy9kZXBvdAorIyAgIC0gZGlyMQorIyAgICAgLSBmaWxlMTEKKyMgICAgIC0gZmlsZTEyCisjICAgICAtIGZpbGVjb2xsaWRlCisjICAgLSBkaXIyCisjICAgICAtIGZpbGUyMQorIyAgICAgLSBmaWxlMjIKKyMgICAgIC0gZmlsZWNvbGxpZGUKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgY29sbGlzaW9uIHNldHVwJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMS9maWxlY29sbGlkZSA+ZGlyMS9maWxlY29sbGlkZSAmJgorCQlwNCBhZGQgZGlyMS9maWxlY29sbGlkZSAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMS9maWxlY29sbGlkZSAmJgorCQllY2hvIGRpcjIvZmlsZWNvbGxpZGUgPmRpcjIvZmlsZWNvbGxpZGUgJiYKKwkJcDQgYWRkIGRpcjIvZmlsZWNvbGxpZGUgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjIvZmlsZWNvbGxpZGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgY29sbGlzaW9uIDEgdG8gMicgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGZpbGVjb2xsaWRlIiAmJgorCWVjaG8gZGlyMi9maWxlY29sbGlkZSA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2ZpbGVjb2xsaWRlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9maWxlY29sbGlkZQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdvdmVybGF5IGNvbGxpc2lvbiAyIHRvIDEnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBmaWxlY29sbGlkZSIgJiYKKwllY2hvIGRpcjEvZmlsZWNvbGxpZGUgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9maWxlY29sbGlkZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvZmlsZWNvbGxpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBjb2xsaXNpb24gZGVsZXRlIDInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJcDQgZGVsZXRlIGRpcjIvZmlsZWNvbGxpZGUgJiYKKwkJcDQgc3VibWl0IC1kICJyZW1vdmUgZGlyMi9maWxlY29sbGlkZSIKKwkpCisnCisKKyMgbm8gZmlsZWNvbGxpZGUsIGdvdCBkZWxldGVkIHdpdGggZGlyMgordGVzdF9leHBlY3RfZmFpbHVyZSAnb3ZlcmxheSBjb2xsaXNpb24gMSB0byAyLCBidXQgMiBkZWxldGVkJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBjb2xsaXNpb24gdXBkYXRlIDEnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9kaXIxLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IG9wZW4gZGlyMS9maWxlY29sbGlkZSAmJgorCQllY2hvIGRpcjEvZmlsZWNvbGxpZGUgdXBkYXRlID5kaXIxL2ZpbGVjb2xsaWRlICYmCisJCXA0IHN1Ym1pdCAtZCAidXBkYXRlIGRpcjEvZmlsZWNvbGxpZGUiCisJKQorJworCisjIHN0aWxsIG5vIGZpbGVjb2xsaWRlLCBkaXIyIHN0aWxsIHdpbnMgd2l0aCB0aGUgZGVsZXRpb24gZXZlbiB0aG91Z2ggdGhlCisjIGNoYW5nZSB0byBkaXIxIGlzIG1vcmUgcmVjZW50Cit0ZXN0X2V4cGVjdF9mYWlsdXJlICdvdmVybGF5IGNvbGxpc2lvbiAxIHRvIDIsIGJ1dCAyIGRlbGV0ZWQsIHRoZW4gMSB1cGRhdGVkJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBjb2xsaXNpb24gZGVsZXRlIGZpbGVjb2xsaWRlcycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlwNCBkZWxldGUgZGlyMS9maWxlY29sbGlkZSBkaXIyL2ZpbGVjb2xsaWRlICYmCisJCXA0IHN1Ym1pdCAtZCAicmVtb3ZlIGZpbGVjb2xsaWRlcyIKKwkpCisnCisKKyMKKyMgT3ZlcmxheXMgYXMgcGFydCBvZiBzeW5jLCByYXRoZXIgdGhhbiBpbml0aWFsIGNoZWNrb3V0OgorIyAgIDEuICBhZGQgYSBmaWxlIGluIGRpcjEKKyMgICAyLiAgc3luYyB0byBpbmNsdWRlIGl0CisjICAgMy4gIGFkZCBzYW1lIGZpbGUgaW4gZGlyMgorIyAgIDQuICBzeW5jLCBtYWtlIHN1cmUgY29udGVudCBzd2l0Y2hlcyBhcyBkaXIyIGhhcyBwcmlvcml0eQorIyAgIDUuICBhZGQgYW5vdGhlciBmaWxlIGluIGRpcjEKKyMgICA2LiAgc3luYworIyAgIDcuICBhZGQvZGVsZXRlIHNhbWUgZmlsZSBpbiBkaXIyCisjICAgOC4gIHN5bmMsIG1ha2Ugc3VyZSBpdCBkaXNhcHBlYXJzLCBhZ2FpbiBkaXIyIHdpbnMKKyMgICA5LiAgY2xlYW51cAorIworIyAvL2RlcG90CisjICAgLSBkaXIxCisjICAgICAtIGZpbGUxMQorIyAgICAgLSBmaWxlMTIKKyMgICAgIC0gY29sQQorIyAgICAgLSBjb2xCCisjICAgLSBkaXIyCisjICAgICAtIGZpbGUyMQorIyAgICAgLSBmaWxlMjIKKyMgICAgIC0gY29sQQorIyAgICAgLSBjb2xCCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGFkZCBjb2xBIGluIGRpcjEnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9kaXIxLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMS9jb2xBID5kaXIxL2NvbEEgJiYKKwkJcDQgYWRkIGRpcjEvY29sQSAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMS9jb2xBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGluaXRpYWwgZ2l0IGNoZWNrb3V0JyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSIgJiYKKwllY2hvIGRpcjEvY29sQSA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEEgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2NvbEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBhZGQgY29sQSBpbiBkaXIyJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMi8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjIvY29sQSA+ZGlyMi9jb2xBICYmCisJCXA0IGFkZCBkaXIyL2NvbEEgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjIvY29sQQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBjb2xBIGNvbnRlbnQgc3dpdGNoJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSIgJiYKKwllY2hvIGRpcjIvY29sQSA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLXVzZS1jbGllbnQtc3BlYyAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IHA0L21hc3RlcgorCSkgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvY29sQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGFkZCBjb2xCIGluIGRpcjEnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9kaXIxLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMS9jb2xCID5kaXIxL2NvbEIgJiYKKwkJcDQgYWRkIGRpcjEvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMS9jb2xCCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGNvbEIgYXBwZWFycycgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEgY29sQiIgJiYKKwllY2hvIGRpcjEvY29sQiA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLXVzZS1jbGllbnQtc3BlYyAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IHA0L21hc3RlcgorCSkgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvY29sQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGFkZC9kZWxldGUgY29sQiBpbiBkaXIyJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMi8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjIvY29sQiA+ZGlyMi9jb2xCICYmCisJCXA0IGFkZCBkaXIyL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjIvY29sQiAmJgorCQlwNCBkZWxldGUgZGlyMi9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCAiZGVsZXRlIGRpcjIvY29sQiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogY29sQiBkaXNhcHBlYXJzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogY2xlYW51cCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlwNCBkZWxldGUgZGlyMS9jb2xBIGRpcjIvY29sQSBkaXIxL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kICJyZW1vdmUgb3ZlcmxheSBzeW5jIGZpbGVzIgorCSkKKycKKworIworIyBPdmVybGF5IHRlc3RzIGFnYWluLCBidXQgc3dhcHBlZCBzbyBkaXIxIGhhcyBwcmlvcml0eS4KKyMgICAxLiAgYWRkIGEgZmlsZSBpbiBkaXIxCisjICAgMi4gIHN5bmMgdG8gaW5jbHVkZSBpdAorIyAgIDMuICBhZGQgc2FtZSBmaWxlIGluIGRpcjIKKyMgICA0LiAgc3luYywgbWFrZSBzdXJlIGNvbnRlbnQgZG9lcyBub3Qgc3dpdGNoCisjICAgNS4gIGFkZCBhbm90aGVyIGZpbGUgaW4gZGlyMQorIyAgIDYuICBzeW5jCisjICAgNy4gIGFkZC9kZWxldGUgc2FtZSBmaWxlIGluIGRpcjIKKyMgICA4LiAgc3luYywgbWFrZSBzdXJlIGl0IGlzIHN0aWxsIHRoZXJlCisjICAgOS4gIGNsZWFudXAKKyMKKyMgLy9kZXBvdAorIyAgIC0gZGlyMQorIyAgICAgLSBmaWxlMTEKKyMgICAgIC0gZmlsZTEyCisjICAgICAtIGNvbEEKKyMgICAgIC0gY29sQgorIyAgIC0gZGlyMgorIyAgICAgLSBmaWxlMjEKKyMgICAgIC0gZmlsZTIyCisjICAgICAtIGNvbEEKKyMgICAgIC0gY29sQgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jIHN3YXA6IGFkZCBjb2xBIGluIGRpcjEnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9kaXIxLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMS9jb2xBID5kaXIxL2NvbEEgJiYKKwkJcDQgYWRkIGRpcjEvY29sQSAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMS9jb2xBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogaW5pdGlhbCBnaXQgY2hlY2tvdXQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIiAmJgorCWVjaG8gZGlyMS9jb2xBID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQSAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvY29sQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogYWRkIGNvbEEgaW4gZGlyMicgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50L2RpcjIvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIyL2NvbEEgPmRpcjIvY29sQSAmJgorCQlwNCBhZGQgZGlyMi9jb2xBICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIyL2NvbEEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ292ZXJsYXkgc3luYyBzd2FwOiBjb2xBIG5vIGNvbnRlbnQgc3dpdGNoJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSIgJiYKKwllY2hvIGRpcjEvY29sQSA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLXVzZS1jbGllbnQtc3BlYyAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IHA0L21hc3RlcgorCSkgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvY29sQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogYWRkIGNvbEIgaW4gZGlyMScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2RpcjEvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIxL2NvbEIgPmRpcjEvY29sQiAmJgorCQlwNCBhZGQgZGlyMS9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIxL2NvbEIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBjb2xCIGFwcGVhcnMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIGNvbEIiICYmCisJZWNobyBkaXIxL2NvbEIgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xCICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS11c2UtY2xpZW50LXNwZWMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIKKwkpICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2NvbEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jIHN3YXA6IGFkZC9kZWxldGUgY29sQiBpbiBkaXIyJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMi8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjIvY29sQiA+ZGlyMi9jb2xCICYmCisJCXA0IGFkZCBkaXIyL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjIvY29sQiAmJgorCQlwNCBkZWxldGUgZGlyMi9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCAiZGVsZXRlIGRpcjIvY29sQiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ292ZXJsYXkgc3luYyBzd2FwOiBjb2xCIG5vIGNoYW5nZScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEgY29sQiIgJiYKKwllY2hvIGRpcjEvY29sQiA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLXVzZS1jbGllbnQtc3BlYyAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IHA0L21hc3RlcgorCSkgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogY2xlYW51cCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlwNCBkZWxldGUgZGlyMS9jb2xBIGRpcjIvY29sQSBkaXIxL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kICJyZW1vdmUgb3ZlcmxheSBzeW5jIGZpbGVzIgorCSkKKycKKworIworIyBSZW5hbWUgZGlyZWN0b3JpZXMgdG8gdGVzdCBxdW90aW5nIGluIGRlcG90LXNpZGUgbWFwcGluZ3MKKyMgLy9kZXBvdAorIyAgICAtICJkaXIgMSIKKyMgICAgICAgLSBmaWxlMTEKKyMgICAgICAgLSBmaWxlMTIKKyMgICAgLSAiZGlyIDIiCisjICAgICAgIC0gZmlsZTIxCisjICAgICAgIC0gZmlsZTIyCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgZmlsZXMgdG8gaW50cm9kdWNlIHNwYWNlcycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJY2xpZW50X3ZlcmlmeSBkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMiBcCisJCSAgICAgIGRpcjIvZmlsZTIxIGRpcjIvZmlsZTIyICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBkaXIxLy4uLiAmJgorCQlwNCBtb3ZlIGRpcjEvLi4uICJkaXIgMSIvLi4uICYmCisJCXA0IG9wZW4gZGlyMi8uLi4gJiYKKwkJcDQgbW92ZSBkaXIyLy4uLiAiZGlyIDIiLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgInJlbmFtZSB3aXRoIHNwYWNlcyIKKwkpICYmCisJY2xpZW50X3ZlcmlmeSAiZGlyIDEvZmlsZTExIiAiZGlyIDEvZmlsZTEyIiBcCisJCSAgICAgICJkaXIgMi9maWxlMjEiICJkaXIgMi9maWxlMjIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBvbiBsaHMgb25seScgJworCWNsaWVudF92aWV3ICJcIi8vZGVwb3QvZGlyIDEvLi4uXCIgLy9jbGllbnQvY2RpcjEvLi4uIiAmJgorCWZpbGVzPSJjZGlyMS9maWxlMTEgY2RpcjEvZmlsZTEyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBvbiBib3RoIHNpZGVzJyAnCisJY2xpZW50X3ZpZXcgIlwiLy9kZXBvdC9kaXIgMS8uLi5cIiBcIi8vY2xpZW50L2NkaXIgMS8uLi5cIiIgJiYKKwljbGllbnRfdmVyaWZ5ICJjZGlyIDEvZmlsZTExIiAiY2RpciAxL2ZpbGUxMiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAiY2RpciAxL2ZpbGUxMSIgImNkaXIgMS9maWxlMTIiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxMC1naXQtcDQtcmNzLnNoIGIvdC90OTgxMC1naXQtcDQtcmNzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzODM2ODgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODEwLWdpdC1wNC1yY3Muc2gKQEAgLTAsMCArMSwzNjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgcmNzIGtleXdvcmRzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIworIyBNYWtlIG9uZSBmaWxlIHdpdGgga2V5d29yZCBsaW5lcyBhdCB0aGUgdG9wLCBhbmQKKyMgZW5vdWdoIHBsYWluIHRleHQgdG8gYmUgYWJsZSB0byB0ZXN0IG1vZGlmaWNhdGlvbnMKKyMgZmFyIGF3YXkgZnJvbSB0aGUga2V5d29yZHMuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2F0IDw8LVxFT0YgPmZpbGVrICYmCisJCSRJZCQKKwkJLyogJFJldmlzaW9uJCAqLworCQkjICRDaGFuZ2UkCisJCWxpbmU0CisJCWxpbmU1CisJCWxpbmU2CisJCWxpbmU3CisJCWxpbmU4CisJCUVPRgorCQlzZWQgInMvUmV2aXNpb24vUmV2aXNpb246IGRvIG5vdCBzY3J1YiBtZS8iIDxmaWxlayA+ZmlsZWtvICYmCisJCXNlZCAicy9JZC9JZDogZG8gbm90IHNjcnViIG1lLyIgPGZpbGVrbyA+ZmlsZV90ZXh0ICYmCisJCXA0IGFkZCAtdCB0ZXh0K2sgZmlsZWsgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlayIgJiYKKwkJcDQgYWRkIC10IHRleHQra28gZmlsZWtvICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZWtvIiAmJgorCQlwNCBhZGQgLXQgdGV4dCBmaWxlX3RleHQgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlX3RleHQiCisJKQorJworCisjCisjIEdlbmVyYXRlIHRoZXNlIGluIGEgZnVuY3Rpb24gdG8gbWFrZSBpdCBlYXN5IHRvIHVzZSBzaW5nbGUgcXVvdGUgbWFya3MuCisjCit3cml0ZV9zY3J1Yl9zY3JpcHRzICgpIHsKKwljYXQgPiIkVFJBU0hfRElSRUNUT1JZL3NjcnViX2sucHkiIDw8LVxFT0YgJiYKKwlpbXBvcnQgcmUsIHN5cworCXN5cy5zdGRvdXQud3JpdGUocmUuc3ViKHInKD9pKVwkKElkfEhlYWRlcnxBdXRob3J8RGF0ZXxEYXRlVGltZXxDaGFuZ2V8RmlsZXxSZXZpc2lvbik6W14kXSpcJCcsIHInJFwxJCcsIHN5cy5zdGRpbi5yZWFkKCkpKQorCUVPRgorCWNhdCA+IiRUUkFTSF9ESVJFQ1RPUlkvc2NydWJfa28ucHkiIDw8LVxFT0YKKwlpbXBvcnQgcmUsIHN5cworCXN5cy5zdGRvdXQud3JpdGUocmUuc3ViKHInKD9pKVwkKElkfEhlYWRlcik6W14kXSpcJCcsIHInJFwxJCcsIHN5cy5zdGRpbi5yZWFkKCkpKQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzY3J1YiBzY3JpcHRzJyAnCisJd3JpdGVfc2NydWJfc2NyaXB0cworJworCisjCisjIENvbXBhcmUgJGNsaS9maWxlIHRvIGl0cyBzY3J1YmJlZCB2ZXJzaW9uLCBzaG91bGQgYmUgZGlmZmVyZW50LgorIyBDb21wYXJlIHNjcnViYmVkICRjbGkvZmlsZSB0byAkZ2l0L2ZpbGUsIHNob3VsZCBiZSBzYW1lLgorIworc2NydWJfa19jaGVjayAoKSB7CisJZmlsZT0iJDEiICYmCisJc2NydWI9IiRUUkFTSF9ESVJFQ1RPUlkvJGZpbGUiICYmCisJIiRQWVRIT05fUEFUSCIgIiRUUkFTSF9ESVJFQ1RPUlkvc2NydWJfay5weSIgPCIkZ2l0LyRmaWxlIiA+IiRzY3J1YiIgJiYKKwkhIHRlc3RfY21wICIkY2xpLyRmaWxlIiAiJHNjcnViIiAmJgorCXRlc3RfY21wICIkZ2l0LyRmaWxlIiAiJHNjcnViIiAmJgorCXJtICIkc2NydWIiCit9CitzY3J1Yl9rb19jaGVjayAoKSB7CisJZmlsZT0iJDEiICYmCisJc2NydWI9IiRUUkFTSF9ESVJFQ1RPUlkvJGZpbGUiICYmCisJIiRQWVRIT05fUEFUSCIgIiRUUkFTSF9ESVJFQ1RPUlkvc2NydWJfa28ucHkiIDwiJGdpdC8kZmlsZSIgPiIkc2NydWIiICYmCisJISB0ZXN0X2NtcCAiJGNsaS8kZmlsZSIgIiRzY3J1YiIgJiYKKwl0ZXN0X2NtcCAiJGdpdC8kZmlsZSIgIiRzY3J1YiIgJiYKKwlybSAiJHNjcnViIgorfQorCisjCisjIE1vZGlmeSBmYXIgYXdheSBmcm9tIGtleXdvcmRzLiAgSWYgbm8gUkNTIGxpbmVzIHNob3cgdXAKKyMgaW4gdGhlIGRpZmYsIHRoZXJlIGlzIG5vIGNvbmZsaWN0LgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBmYXIgYXdheSBmcm9tIFJDUyBsaW5lcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCXNlZCAicy9ebGluZTcvbGluZTcgZWRpdC8iIDxmaWxlayA+ZmlsZWsudG1wICYmCisJCW12IC1mIGZpbGVrLnRtcCBmaWxlayAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxlayBsaW5lNyBlZGl0IiBmaWxlayAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXNjcnViX2tfY2hlY2sgZmlsZWsKKwkpCisnCisKKyMKKyMgTW9kaWZ5IG5lYXIgdGhlIGtleXdvcmRzLiAgVGhpcyB3aWxsIHJlcXVpcmUgUkNTIHNjcnViYmluZy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXQgbmVhciBSQ1MgbGluZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCXNlZCAicy9ebGluZTQvbGluZTQgZWRpdC8iIDxmaWxlayA+ZmlsZWsudG1wICYmCisJCW12IC1mIGZpbGVrLnRtcCBmaWxlayAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxlayBsaW5lNCBlZGl0IiBmaWxlayAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXNjcnViX2tfY2hlY2sgZmlsZWsKKwkpCisnCisKKyMKKyMgTW9kaWZ5IHRoZSBrZXl3b3JkcyB0aGVtc2VsdmVzLiAgVGhpcyBhbHNvIHdpbGwgcmVxdWlyZSBSQ1Mgc2NydWJiaW5nLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBrZXl3b3JkIGxpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgIi9SZXZpc2lvbi9kIiA8ZmlsZWsgPmZpbGVrLnRtcCAmJgorCQltdiAtZiBmaWxlay50bXAgZmlsZWsgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZmlsZWsgcmVtb3ZlIFJldmlzaW9uIGxpbmUiIGZpbGVrICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJc2NydWJfa19jaGVjayBmaWxlaworCSkKKycKKworIworIyBTY3J1YmJpbmcgdGV4dCtrbyBmaWxlcyBzaG91bGQgbm90IGFsdGVyIGFsbCBrZXl3b3JkcywganVzdCBJZCwgSGVhZGVyLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2NydWIga28gZmlsZXMgZGlmZmVyZW50bHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCXNlZCAicy9ebGluZTQvbGluZTQgZWRpdC8iIDxmaWxla28gPmZpbGVrby50bXAgJiYKKwkJbXYgLWYgZmlsZWtvLnRtcCBmaWxla28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZmlsZWtvIGxpbmU0IGVkaXQiIGZpbGVrbyAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXNjcnViX2tvX2NoZWNrIGZpbGVrbyAmJgorCQkhIHNjcnViX2tfY2hlY2sgZmlsZWtvCisJKQorJworCisjIGhhY2s7IGdpdCBwNCBzdWJtaXQgc2hvdWxkIGRvIGl0IG9uIGl0cyBvd24KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWZ0ZXIgZmFpbHVyZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHJldmVydCAuLi4KKwkpCisnCisKKyMgcGVybCAkRmlsZTo6IGJ1ZyBjaGVjawordGVzdF9leHBlY3Rfc3VjY2VzcyAna3RleHQgZXhwYW5zaW9uIHNob3VsZCBub3QgZXhwYW5kIG11bHRpLWxpbmUgJEZpbGU6OicgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWNhdCA+bHYucG0gPDwtXEVPRiAmJgorCQlteSAkd2FudGVkID0gc3ViIHsgbXkgJGYgPSAkRmlsZTo6RmluZDo6bmFtZTsKKwkJCQkgICAgaWYgKCAtZiAmJiAkZiA9fiAvZm9vLyApIHsKKwkJRU9GCisJCXA0IGFkZCAtdCBrdGV4dCBsdi5wbSAmJgorCQlwNCBzdWJtaXQgLWQgImx2LnBtIgorCSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jbXAgIiRjbGkvbHYucG0iIGx2LnBtCisJKQorJworCisjCisjIERvIG5vdCBzY3J1YiBhbnl0aGluZyBidXQgK2sgb3IgK2tvIGZpbGVzLiAgU25lYWsgYSBjaGFuZ2UgaW50bworIyB0aGUgY2xpIGZpbGUgc28gdGhhdCBzdWJtaXQgd2lsbCBnZXQgYSBjb25mbGljdC4gIE1ha2Ugc3VyZSB0aGF0CisjIHNjcnViYmluZyBkb2Vzbid0IG1ha2UgYSBtZXNzIG9mIHRoaW5ncy4KKyMKKyMgVGhpcyBtaWdodCBoYXBwZW4gb25seSBpZiB0aGUgZ2l0IHJlcG8gaXMgYmVoaW5kIHRoZSBwNCByZXBvIGF0CisjIHN1Ym1pdCB0aW1lLCBhbmQgdGhlcmUgaXMgYSBjb25mbGljdC4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBzY3J1YiBwbGFpbiB0ZXh0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgInMvXmxpbmU0L2xpbmU0IGVkaXQvIiA8ZmlsZV90ZXh0ID5maWxlX3RleHQudG1wICYmCisJCW12IC1mIGZpbGVfdGV4dC50bXAgZmlsZV90ZXh0ICYmCisJCWdpdCBjb21taXQgLW0gImZpbGVfdGV4dCBsaW5lNCBlZGl0IiBmaWxlX3RleHQgJiYKKwkJKAorCQkJY2QgIiRjbGkiICYmCisJCQlwNCBvcGVuIGZpbGVfdGV4dCAmJgorCQkJc2VkICJzL15saW5lNS9saW5lNSBwNCBlZGl0LyIgPGZpbGVfdGV4dCA+ZmlsZV90ZXh0LnRtcCAmJgorCQkJbXYgLWYgZmlsZV90ZXh0LnRtcCBmaWxlX3RleHQgJiYKKwkJCXA0IHN1Ym1pdCAtZCAiZmlsZTUgcDQgZWRpdCIKKwkJKSAmJgorCQllY2hvIHMgfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCAmJgorCQkoCisJCQkjIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcyBub3QgbGVmdCBvcGVuCisJCQljZCAiJGNsaSIgJiYKKwkJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIGZpbGVfdGV4dAorCQkpCisJKQorJworCisjIGhhY2s7IGdpdCBwNCBzdWJtaXQgc2hvdWxkIGRvIGl0IG9uIGl0cyBvd24KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWZ0ZXIgZmFpbHVyZSAyJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgcmV2ZXJ0IC4uLgorCSkKKycKKworY3JlYXRlX2t3X2ZpbGUgKCkgeworCWNhdCA8PFxFT0YgPiIkMSIKKy8qIEEgZmlsZQorCUlkOiAkSWQkCisJUmV2aXNpb246ICRSZXZpc2lvbiQKKwlGaWxlOiAkRmlsZSQKKyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KSB7CisJcmV0dXJuIDA7Cit9CitFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGt3ZmlsZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUgMSIgJiYKKwkJY3JlYXRlX2t3X2ZpbGUga3dmaWxlMS5jICYmCisJCXA0IGFkZCBrd2ZpbGUxLmMgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgcmN3IGt3IGZpbGUiIGt3ZmlsZTEuYworCSkKKycKKworcDRfYXBwZW5kX3RvX2ZpbGUgKCkgeworCWY9IiQxIiAmJgorCXA0IGVkaXQgLXQga3RleHQgIiRmIiAmJgorCWVjaG8gIi8qICQoZGF0ZSkgKi8iID4+IiRmIiAmJgorCXA0IHN1Ym1pdCAtZCAiYXBwZW5kaW5nIGEgbGluZSBpbiBwNCIKK30KKworIyBDcmVhdGUgc29tZSBmaWxlcyB3aXRoIFJDUyBrZXl3b3Jkcy4gSWYgdGhleSBnZXQgbW9kaWZpZWQKKyMgZWxzZXdoZXJlIHRoZW4gdGhlIHZlcnNpb24gbnVtYmVyIGdldHMgYnVtcGVkIHdoaWNoIHRoZW4KKyMgcmVzdWx0cyBpbiBhIG1lcmdlIGNvbmZsaWN0IGlmIHdlIHRvdWNoIHRoZSBSQ1Mga3cgbGluZXMsCisjIGV2ZW4gdGhvdWdoIHRoZSBjaGFuZ2UgaXRzZWxmIHdvdWxkIG90aGVyd2lzZSBhcHBseSBjbGVhbmx5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29wZSB3aXRoIHJjcyBrZXl3b3JkIGV4cGFuc2lvbiBkYW1hZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCShjZCAiJGNsaSIgJiYgcDRfYXBwZW5kX3RvX2ZpbGUga3dmaWxlMS5jKSAmJgorCQlvbGRfbGluZXM9JCh3YyAtbCA8a3dmaWxlMS5jKSAmJgorCQlwZXJsIC1uIC1pIC1lICJwcmludCB1bmxlc3MgbS9SZXZpc2lvbjovIiBrd2ZpbGUxLmMgJiYKKwkJbmV3X2xpbmVzPSQod2MgLWwgPGt3ZmlsZTEuYykgJiYKKwkJdGVzdCAkbmV3X2xpbmVzID0gJCgoJG9sZF9saW5lcyAtIDEpKSAmJgorCisJCWdpdCBhZGQga3dmaWxlMS5jICYmCisJCWdpdCBjb21taXQgLW0gIlphcCBhbiBSQ1Mga3cgbGluZSIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgcDQgcmViYXNlICYmCisJCWdpdCBkaWZmIHA0L21hc3RlciAmJgorCQlnaXQgcDQgY29tbWl0ICYmCisJCWVjaG8gInRyeSBtb2RpZnlpbmcgaW4gYm90aCIgJiYKKwkJY2QgIiRjbGkiICYmCisJCXA0IGVkaXQga3dmaWxlMS5jICYmCisJCWVjaG8gImxpbmUgZnJvbSBwNCIgPj5rd2ZpbGUxLmMgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgYSBsaW5lIGluIHA0IiBrd2ZpbGUxLmMgJiYKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gImxpbmUgZnJvbSBnaXQgYXQgdGhlIHRvcCIgfCBjYXQgLSBrd2ZpbGUxLmMgPmt3ZmlsZTEuYy5uZXcgJiYKKwkJbXYga3dmaWxlMS5jLm5ldyBrd2ZpbGUxLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGxpbmUgaW4gZ2l0IGF0IHRoZSB0b3AiIGt3ZmlsZTEuYyAmJgorCQlnaXQgcDQgcmViYXNlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcGUgd2l0aCByY3Mga2V5d29yZCBmaWxlIGRlbGV0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyAiXCRSZXZpc2lvblwkIiA+a3dkZWxmaWxlLmMgJiYKKwkJcDQgYWRkIC10IGt0ZXh0IGt3ZGVsZmlsZS5jICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgdG8gYmUgZGVsZXRlZCIgJiYKKwkJZ3JlcCAxIGt3ZGVsZmlsZS5jCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlncmVwIFJldmlzaW9uIGt3ZGVsZmlsZS5jICYmCisJCWdpdCBybSAtZiBrd2RlbGZpbGUuYyAmJgorCQlnaXQgY29tbWl0IC1tICJEZWxldGUgYSBmaWxlIGNvbnRhaW5pbmcgUkNTIGtleXdvcmRzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCSEgdGVzdCAtZiBrd2RlbGZpbGUuYworCSkKKycKKworIyBJZiB5b3UgYWRkIGtleXdvcmRzIGluIGdpdCBvZiB0aGUgZm9ybSAkSGVhZGVyJCB0aGVuIGV2ZXJ5dGhpbmcgc2hvdWxkCisjIHdvcmsgZmluZSB3aXRob3V0IGFueSBzcGVjaWFsIGhhbmRsaW5nLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWRkIGtleXdvcmRzIGluIGdpdCB3aGljaCBtYXRjaCB0aGUgZGVmYXVsdCBwNCB2YWx1ZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyAiTmV3S1c6IFwkUmV2aXNpb25cJCIgPj5rd2ZpbGUxLmMgJiYKKwkJZ2l0IGFkZCBrd2ZpbGUxLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkaW5nIFJDUyBrZXl3b3JkcyBpbiBnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJdGVzdCAtZiBrd2ZpbGUxLmMgJiYKKwkJZ3JlcCAiTmV3S1cuKlJldmlzaW9uLipbMC05XSIga3dmaWxlMS5jCisKKwkpCisnCisKKyMgSWYgeW91IGFkZCBrZXl3b3JkcyBpbiBnaXQgb2YgdGhlIGZvcm0gJEhlYWRlcjojMSQgdGhlbiB0aGluZ3Mgd2lsbCBmYWlsCisjIHVubGVzcyBnaXQtcDQgdGFrZXMgc3RlcHMgdG8gc2NydWIgdGhlICpnaXQqIGNvbW1pdC4KKyMKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ0FkZCBrZXl3b3JkcyBpbiBnaXQgd2hpY2ggZG8gbm90IG1hdGNoIHRoZSBkZWZhdWx0IHA0IHZhbHVlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvICJOZXdLVzI6IFwkUmV2aXNpb246MVwkIiA+Pmt3ZmlsZTEuYyAmJgorCQlnaXQgYWRkIGt3ZmlsZTEuYyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGRpbmcgUkNTIGtleXdvcmRzIGluIGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlncmVwICJOZXdLVzIuKlJldmlzaW9uLipbMC05XSIga3dmaWxlMS5jCisKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxMS1naXQtcDQtbGFiZWwtaW1wb3J0LnNoIGIvdC90OTgxMS1naXQtcDQtbGFiZWwtaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxNDQ2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODExLWdpdC1wNC1sYWJlbC1pbXBvcnQuc2gKQEAgLTAsMCArMSwyNjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgbGFiZWwgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjIEJhc2ljIHA0IGxhYmVsIGltcG9ydCB0ZXN0cy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHA0IGxhYmVscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQllY2hvIGYxID5tYWluL2YxICYmCisJCXA0IGFkZCBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMSIgJiYKKworCQllY2hvIGYyID5tYWluL2YyICYmCisJCXA0IGFkZCBtYWluL2YyICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMiIgJiYKKworCQllY2hvIGYzID5tYWluL2ZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisJCXA0IGFkZCBtYWluL2ZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZSB3aXRoIG1ldGFjaGFyIiAmJgorCisJCXA0IHRhZyAtbCBUQUdfRjFfT05MWSBtYWluL2YxICYmCisJCXA0IHRhZyAtbCBUQUdfV0lUSFwkX1NIRUxMX0NIQVIgbWFpbi8uLi4gJiYKKwkJcDQgdGFnIC1sIHRoaXNfdGFnX3dpbGxfYmVcIHNraXBwZWQgbWFpbi8uLi4gJiYKKworCQllY2hvIGY0ID5tYWluL2Y0ICYmCisJCXA0IGFkZCBtYWluL2Y0ICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mNCIgJiYKKworCQlwNCBsYWJlbCAtaSA8PC1FT0YgJiYKKwkJTGFiZWw6IFRBR19MT05HX0xBQkVMCisJCURlc2NyaXB0aW9uOgorCQkgICBBIExhYmVsIGZpcnN0IGxpbmUKKwkJICAgQSBMYWJlbCBzZWNvbmQgbGluZQorCQlWaWV3OgkvL2RlcG90Ly4uLgorCQlFT0YKKworCQlwNCB0YWcgLWwgVEFHX0xPTkdfTEFCRUwgLi4uICYmCisKKwkJcDQgbGFiZWxzIC4uLiAmJgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYWJlbEltcG9ydFJlZ2V4cCAiLipUQUcuKiIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbGFiZWxzIC0tdmVyYm9zZSAmJgorCisJCWdpdCB0YWcgJiYKKwkJZ2l0IHRhZyA+dGFnbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIHRhZ2xpc3QgJiYKKworCQljZCBtYWluICYmCisJCWdpdCBjaGVja291dCBUQUdfRjFfT05MWSAmJgorCQkhIHRlc3QgLWYgZjIgJiYKKwkJZ2l0IGNoZWNrb3V0IFRBR19XSVRIXCRfU0hFTExfQ0hBUiAmJgorCQl0ZXN0IC1mIGYxICYmIHRlc3QgLWYgZjIgJiYgdGVzdCAtZiBmaWxlX3dpdGhfXCRtZXRhY2hhciAmJgorCisJCWdpdCBzaG93IFRBR19MT05HX0xBQkVMIHwgZ3JlcCAtcSAiQSBMYWJlbCBzZWNvbmQgbGluZSIKKwkpCisnCisjIFRlc3Qgc29tZSBsYWJlbCBjb3JuZXIgY2FzZXM6CisjCisjIC0gdHdvIHRhZ3Mgb24gdGhlIHNhbWUgZmlsZTsgYm90aCBzaG91bGQgYmUgYXZhaWxhYmxlCisjIC0gYSB0YWcgdGhhdCBpcyBvbmx5IG9uIG9uZSBmaWxlOyB0aGlzIGtpbmQgb2YgdGFnCisjICAgY2Fubm90IGJlIGltcG9ydGVkIChhdCBsZWFzdCBub3QgZWFzaWx5KS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIGxhYmVscyBvbiB0aGUgc2FtZSBjaGFuZ2VsaXN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCXA0IGVkaXQgbWFpbi9mMSBtYWluL2YyICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+bWFpbi9mMSAmJgorCQllY2hvICJub3QgaW4gdGhlIHRhZyIgPm1haW4vZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2ZbMTJdOiB0ZXN0aW5nIHR3byBsYWJlbHMiICYmCisKKwkJcDQgdGFnIC1sIFRBR19GMV8xIG1haW4vLi4uICYmCisJCXA0IHRhZyAtbCBUQUdfRjFfMiBtYWluLy4uLiAmJgorCisJCXA0IGxhYmVscyAuLi4gJiYKKworCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbGFiZWxzICYmCisKKwkJZ2l0IHRhZyB8IGdyZXAgVEFHX0YxICYmCisJCWdpdCB0YWcgfCBncmVwIC1xIFRBR19GMV8xICYmCisJCWdpdCB0YWcgfCBncmVwIC1xIFRBR19GMV8yICYmCisKKwkJY2QgbWFpbiAmJgorCisJCWdpdCBjaGVja291dCBUQUdfRjFfMSAmJgorCQlscyAmJgorCQl0ZXN0IC1mIGYxICYmCisKKwkJZ2l0IGNoZWNrb3V0IFRBR19GMV8yICYmCisJCWxzICYmCisJCXRlc3QgLWYgZjEKKwkpCisnCisKKyMgRXhwb3J0IHNvbWUgZ2l0IHRhZ3MgdG8gcDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cG9ydCBnaXQgdGFncyB0byBwNCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHRhZyAtbSAiQSB0YWcgY3JlYXRlZCBpbiBnaXQ6eHl6enkiIEdJVF9UQUdfMSAmJgorCQllY2hvICJoZWxsbyB3b3JsZCIgPm1haW4vZjEwICYmCisJCWdpdCBhZGQgbWFpbi9mMTAgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkaW5nIGZpbGUgZm9yIGV4cG9ydCB0ZXN0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IHRhZyAtbSAiQW5vdGhlciBnaXQgdGFnIiBHSVRfVEFHXzIgJiYKKwkJZ2l0IHRhZyBMSUdIVFdFSUdIVF9UQUcgJiYKKwkJZ2l0IHA0IHJlYmFzZSAtLWltcG9ydC1sYWJlbHMgLS12ZXJib3NlICYmCisJCWdpdCBwNCBzdWJtaXQgLS1leHBvcnQtbGFiZWxzIC0tdmVyYm9zZQorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jIC4uLiAmJgorCQlwNCBsYWJlbHMgLi4uIHwgZ3JlcCBHSVRfVEFHXzEgJiYKKwkJcDQgbGFiZWxzIC4uLiB8IGdyZXAgR0lUX1RBR18yICYmCisJCXA0IGxhYmVscyAuLi4gfCBncmVwIExJR0hUV0VJR0hUX1RBRyAmJgorCQlwNCBsYWJlbCAtbyBHSVRfVEFHXzEgfCBncmVwICJ0YWcgY3JlYXRlZCBpbiBnaXQ6eHl6enkiICYmCisJCXA0IHN5bmMgLi4uQEdJVF9UQUdfMSAmJgorCQkhIHRlc3QgLWYgbWFpbi9mMTAgJiYKKwkJcDQgc3luYyAuLi5AR0lUX1RBR18yICYmCisJCXRlc3QgLWYgbWFpbi9mMTAKKwkpCisnCisKKyMgRXhwb3J0IGEgdGFnIGZyb20gZ2l0IHdoZXJlIGFuIGFmZmVjdGVkIGZpbGUgaXMgZGVsZXRlZCBsYXRlciBvbgorIyBOZWVkIHRvIGNyZWF0ZSBnaXQgdGFncyBhZnRlciByZWJhc2UsIHNpbmNlIG9ubHkgdGhlbiBjYW4gdGhlCisjIGdpdCBjb21taXRzIGJlIG1hcHBlZCB0byBwNCBjaGFuZ2VsaXN0cy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cG9ydCBnaXQgdGFncyB0byBwNCB3aXRoIGRlbGV0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWltcG9ydC1sYWJlbHMgJiYKKwkJZWNobyAiZGVsZXRlZCBmaWxlIiA+bWFpbi9kZWxldGVkX2ZpbGUgJiYKKwkJZ2l0IGFkZCBtYWluL2RlbGV0ZWRfZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJjcmVhdGUgZGVsZXRlZCBmaWxlIiAmJgorCQlnaXQgcm0gbWFpbi9kZWxldGVkX2ZpbGUgJiYKKwkJZWNobyAibmV3IGZpbGUiID5tYWluL2YxMSAmJgorCQlnaXQgYWRkIG1haW4vZjExICYmCisJCWdpdCBjb21taXQgLW0gImRlbGV0ZSB0aGUgZGVsZXRlZCBmaWxlIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IHA0IHJlYmFzZSAtLWltcG9ydC1sYWJlbHMgLS12ZXJib3NlICYmCisJCWdpdCB0YWcgLW0gInRhZyBvbiBkZWxldGVkIGZpbGUiIEdJVF9UQUdfT05fREVMRVRFRCBIRUFEfjEgJiYKKwkJZ2l0IHRhZyAtbSAidGFnIGFmdGVyIGRlbGV0aW9uIiBHSVRfVEFHX0FGVEVSX0RFTEVUSU9OIEhFQUQgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWV4cG9ydC1sYWJlbHMgLS12ZXJib3NlCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgLi4uICYmCisJCXA0IHN5bmMgLi4uQEdJVF9UQUdfT05fREVMRVRFRCAmJgorCQl0ZXN0IC1mIG1haW4vZGVsZXRlZF9maWxlICYmCisJCXA0IHN5bmMgLi4uQEdJVF9UQUdfQUZURVJfREVMRVRJT04gJiYKKwkJISB0ZXN0IC1mIG1haW4vZGVsZXRlZF9maWxlICYmCisJCWVjaG8gImNoZWNraW5nIGxhYmVsIGNvbnRlbnRzIiAmJgorCQlwNCBsYWJlbCAtbyBHSVRfVEFHX09OX0RFTEVURUQgfCBncmVwICJ0YWcgb24gZGVsZXRlZCBmaWxlIgorCSkKKycKKworIyBDcmVhdGUgYSB0YWcgaW4gZ2l0IHRoYXQgY2Fubm90IGJlIGV4cG9ydGVkIHRvIHA0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgdGhhdCBjYW5ub3QgYmUgZXhwb3J0ZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjaGVja291dCAtYiBhX2JyYW5jaCAmJgorCQllY2hvICJoZWxsbyIgPm1haW4vZjEyICYmCisJCWdpdCBhZGQgbWFpbi9mMTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkaW5nIGYxMiIgJiYKKwkJZ2l0IHRhZyAtbSAidGFnIG9uIGFfYnJhbmNoIiBHSVRfVEFHX09OX0FfQlJBTkNIICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWV4cG9ydC1sYWJlbHMKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJISBwNCBsYWJlbHMgfCBncmVwIEdJVF9UQUdfT05fQV9CUkFOQ0gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBnaXQgY29uZmlnIHRvIGVuYWJsZSBpbXBvcnQvZXhwb3J0IG9mIHRhZ3MnICcKKwlnaXQgcDQgY2xvbmUgLS12ZXJib3NlIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5leHBvcnRMYWJlbHMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5pbXBvcnRMYWJlbHMgdHJ1ZSAmJgorCQlnaXQgdGFnIENGR19BX0dJVF9UQUcgJiYKKwkJZ2l0IHA0IHJlYmFzZSAtLXZlcmJvc2UgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXZlcmJvc2UgJiYKKwkJZ2l0IHRhZyAmJgorCQlnaXQgdGFnIHwgZ3JlcCBUQUdfRjFfMQorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBsYWJlbHMgJiYKKwkJcDQgbGFiZWxzIHwgZ3JlcCBDRkdfQV9HSVRfVEFHCisJKQorJworCitwNF9oZWFkX3JldmlzaW9uKCkgeworCXA0IGNoYW5nZXMgLW0gMSAiJEAiIHwgYXdrICd7cHJpbnQgJDJ9JworfQorCisjIEltcG9ydGluZyBhIGxhYmVsIHRoYXQgcmVmZXJlbmNlcyBhIFA0IGNvbW1pdCB0aGF0CisjIGhhcyBub3QgYmVlbiBzZWVuLiBUaGUgcHJlc2VuY2Ugb2YgYSBsYWJlbCBvbiBhIGNvbW1pdAorIyB3ZSBoYXZlbid0IHNlZW4gc2hvdWxkIG5vdCBjYXVzZSBnaXQtcDQgdG8gZmFpbC4gSXQgc2hvdWxkCisjIG1lcmVseSBza2lwIHRoYXQgbGFiZWwsIGFuZCBzdGlsbCBpbXBvcnQgb3RoZXIgbGFiZWxzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0aW5nIGxhYmVscyB3aXRoIG1pc3NpbmcgcmV2aXNpb25zJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQlybSAtZnIgIiRjbGkiICIkZ2l0IiAmJgorCQlta2RpciAiJGNsaSIgJiYKKwkJUDRDTElFTlQ9bWlzc2luZy1yZXZpc2lvbiAmJgorCQljbGllbnRfdmlldyAiLy9kZXBvdC9taXNzaW5nLXJldmlzaW9uLy4uLiAvL21pc3NpbmctcmV2aXNpb24vLi4uIiAmJgorCQljZCAiJGNsaSIgJiYKKwkJPmYxICYmIHA0IGFkZCBmMSAmJiBwNCBzdWJtaXQgLWQgInN0YXJ0IiAmJgorCisJCXA0IHRhZyAtbCBUQUdfUzAgLi4uICYmCisKKwkJPmYyICYmIHA0IGFkZCBmMiAmJiBwNCBzdWJtaXQgLWQgInNlY29uZCIgJiYKKworCQlzdGFydHJldj0kKHA0X2hlYWRfcmV2aXNpb24gLy9kZXBvdC9taXNzaW5nLXJldmlzaW9uLy4uLikgJiYKKworCQk+ZjMgJiYgcDQgYWRkIGYzICYmIHA0IHN1Ym1pdCAtZCAidGhpcmQiICYmCisKKwkJcDQgZWRpdCBmMiAmJiBkYXRlID5mMiAmJiBwNCBzdWJtaXQgLWQgImNoYW5nZSIgZjIgJiYKKworCQllbmRyZXY9JChwNF9oZWFkX3JldmlzaW9uIC8vZGVwb3QvbWlzc2luZy1yZXZpc2lvbi8uLi4pICYmCisKKwkJcDQgdGFnIC1sIFRBR19TMSAuLi4gJiYKKworCQkjIHdlIHNob3VsZCBza2lwIFRBR19TMCBzaW5jZSBpdCBpcyBiZWZvcmUgb3VyIHN0YXJ0cG9pbnQsCisJCSMgYnV0IHBpY2sgdXAgVEFHX1MxLgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0taW1wb3J0LWxhYmVscyAtdiBcCisJCQkvL2RlcG90L21pc3NpbmctcmV2aXNpb24vLi4uQCRzdGFydHJldiwkZW5kcmV2ICYmCisJCSgKKwkJCWNkICIkZ2l0IiAmJgorCQkJZ2l0IHJldi1wYXJzZSBUQUdfUzEgJiYKKwkJCSEgZ2l0IHJldi1wYXJzZSBUQUdfUzAKKwkJKQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODEyLWdpdC1wNC13aWxkY2FyZHMuc2ggYi90L3Q5ODEyLWdpdC1wNC13aWxkY2FyZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU0YTdjMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTItZ2l0LXA0LXdpbGRjYXJkcy5zaApAQCAtMCwwICsxLDIxNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB3aWxkY2FyZHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcDQgZmlsZXMgd2l0aCB3aWxkY2FyZHMgaW4gdGhlIG5hbWVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcHJpbnRmICJmaWxlMlxuaGFzXG5zb21lXG5yYW5kb21cbnRleHRcbiIgPmZpbGUyICYmCisJCXA0IGFkZCBmaWxlMiAmJgorCQllY2hvIGZpbGUtd2lsZC1oYXNoID5maWxlLXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCWVjaG8gZmlsZS13aWxkLXN0YXIgPmZpbGUtd2lsZFwqc3RhcgorCQlmaSAmJgorCQllY2hvIGZpbGUtd2lsZC1hdCA+ZmlsZS13aWxkQGF0ICYmCisJCWVjaG8gZmlsZS13aWxkLXBlcmNlbnQgPmZpbGUtd2lsZCVwZXJjZW50ICYmCisJCXA0IGFkZCAtZiBmaWxlLXdpbGQqICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZSB3aWxkY2FyZHMiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCBmaWxlcyBnaXQgcDQgY2xvbmUnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdCAtZiBmaWxlLXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCXRlc3QgLWYgZmlsZS13aWxkXCpzdGFyCisJCWZpICYmCisJCXRlc3QgLWYgZmlsZS13aWxkQGF0ICYmCisJCXRlc3QgLWYgZmlsZS13aWxkJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCBhZGQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBnaXQtd2lsZC1oYXNoID5naXQtd2lsZCNoYXNoICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4KKwkJdGhlbgorCQkJZWNobyBnaXQtd2lsZC1zdGFyID5naXQtd2lsZFwqc3RhcgorCQlmaSAmJgorCQllY2hvIGdpdC13aWxkLWF0ID5naXQtd2lsZEBhdCAmJgorCQllY2hvIGdpdC13aWxkLXBlcmNlbnQgPmdpdC13aWxkJXBlcmNlbnQgJiYKKwkJZ2l0IGFkZCBnaXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHNvbWUgd2lsZGNhcmQgZmlsZW5hbWVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCXRlc3RfcGF0aF9pc19maWxlIGdpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGdpdC13aWxkQGF0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGdpdC13aWxkJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCBtb2RpZnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBuZXctbGluZSA+PmdpdC13aWxkI2hhc2ggJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorCQl0aGVuCisJCQllY2hvIG5ldy1saW5lID4+Z2l0LXdpbGRcKnN0YXIKKwkJZmkgJiYKKwkJZWNobyBuZXctbGluZSA+PmdpdC13aWxkQGF0ICYmCisJCWVjaG8gbmV3LWxpbmUgPj5naXQtd2lsZCVwZXJjZW50ICYmCisJCWdpdCBhZGQgZ2l0LXdpbGQqICYmCisJCWdpdCBjb21taXQgLW0gIm1vZGlmeSB0aGUgd2lsZGNhcmQgZmlsZXMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGdpdC13aWxkI2hhc2ggJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorCQl0aGVuCisJCQl0ZXN0X2xpbmVfY291bnQgPSAyIGdpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZ2l0LXdpbGRAYXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBnaXQtd2lsZCVwZXJjZW50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCBmaWxlcyBzdWJtaXQgYmFjayB0byBwNCwgY29weScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljcCBmaWxlMiBnaXQtd2lsZC1jcCNoYXNoICYmCisJCWdpdCBhZGQgZ2l0LXdpbGQtY3AjaGFzaCAmJgorCQljcCBnaXQtd2lsZCNoYXNoIGZpbGUtd2lsZC0zICYmCisJCWdpdCBhZGQgZmlsZS13aWxkLTMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAid2lsZGNhcmQgY29waWVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXNIYXJkZXIgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGQtY3AjaGFzaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlLXdpbGQtMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIHJlbmFtZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbXYgZ2l0LXdpbGRAYXQgZmlsZS13aWxkLTQgJiYKKwkJZ2l0IG12IGZpbGUtd2lsZC0zIGdpdC13aWxkLWNwJXBlcmNlbnQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAid2lsZGNhcmQgcmVuYW1lcyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBnaXQtd2lsZEBhdCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBnaXQtd2lsZC1jcCVwZXJjZW50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCBmaWxlcyBzdWJtaXQgYmFjayB0byBwNCwgZGVsZXRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBybSBnaXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIHRoZSB3aWxkY2FyZCBmaWxlcyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkI2hhc2ggJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorCQl0aGVuCisJCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBnaXQtd2lsZFwqc3RhcgorCQlmaSAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBnaXQtd2lsZEBhdCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBnaXQtd2lsZCVwZXJjZW50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwNCBkZWxldGVkIGEgd2lsZGNhcmQgZmlsZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gIndpbGQgZGVsZXRlIHRlc3QiID53aWxkQGRlbGV0ZSAmJgorCQlwNCBhZGQgLWYgd2lsZEBkZWxldGUgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgd2lsZEBkZWxldGUiCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB3aWxkQGRlbGV0ZQorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQkjIG11c3QgdXNlIGl0cyBlbmNvZGVkIG5hbWUKKwkJcDQgZGVsZXRlIHdpbGQlNDBkZWxldGUgJiYKKwkJcDQgc3VibWl0IC1kICJkZWxldGUgd2lsZEBkZWxldGUiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHdpbGRAZGVsZXRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCBmaWxlcyByZXF1aXJpbmcga2V5d29yZCBzY3J1YicgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWNhdCA8PC1cRU9GID5zY3J1YkB3aWxkICYmCisJCSRJZCQKKwkJbGluZTIKKwkJRU9GCisJCXA0IGFkZCAtdCB0ZXh0K2sgLWYgc2NydWJAd2lsZCAmJgorCQlwNCBzdWJtaXQgLWQgInNjcnViIGF0IHdpbGQiCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJc2VkICJzL15saW5lMi9saW5lMiBlZGl0LyIgPHNjcnViQHdpbGQgPnNjcnViQHdpbGQudG1wICYmCisJCW12IC1mIHNjcnViQHdpbGQudG1wIHNjcnViQHdpbGQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic2NydWIgYXQgd2lsZCBsaW5lMiBlZGl0IiBzY3J1YkB3aWxkICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxMy1naXQtcDQtcHJlc2VydmUtdXNlcnMuc2ggYi90L3Q5ODEzLWdpdC1wNC1wcmVzZXJ2ZS11c2Vycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDAxOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxMy1naXQtcDQtcHJlc2VydmUtdXNlcnMuc2gKQEAgLTAsMCArMSwxNDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgcHJlc2VydmUgdXNlcnMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZmlsZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUxIGZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGVzIgorCSkKKycKKworcDRfZ3JhbnRfYWRtaW4oKSB7CisJbmFtZT0kMSAmJgorCXsKKwkJcDQgcHJvdGVjdCAtbyAmJgorCQllY2hvICIgICAgYWRtaW4gdXNlciAkbmFtZSAqIC8vZGVwb3QvLi4uIgorCX0gfCBwNCBwcm90ZWN0IC1pCit9CisKK3A0X2NoZWNrX2NvbW1pdF9hdXRob3IoKSB7CisJZmlsZT0kMSB1c2VyPSQyICYmCisJcDQgY2hhbmdlcyAtbSAxIC8vZGVwb3QvJGZpbGUgfCBncmVwIC1xICR1c2VyCit9CisKK21ha2VfY2hhbmdlX2J5X3VzZXIoKSB7CisJZmlsZT0kMSBuYW1lPSQyIGVtYWlsPSQzICYmCisJZWNobyAidXNlcm5hbWU6IGEgY2hhbmdlIGJ5ICRuYW1lIiA+PiIkZmlsZSIgJiYKKwlnaXQgYWRkICIkZmlsZSIgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICIkbmFtZSA8JGVtYWlsPiIgLW0gImEgY2hhbmdlIGJ5ICRuYW1lIgorfQorCisjIFRlc3QgdXNlcm5hbWUgc3VwcG9ydCwgc3VibWl0dGluZyBhcyB1c2VyICdhbGljZScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXNlcnZlIHVzZXJzJyAnCisJcDRfYWRkX3VzZXIgYWxpY2UgJiYKKwlwNF9hZGRfdXNlciBib2IgJiYKKwlwNF9ncmFudF9hZG1pbiBhbGljZSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvICJ1c2VybmFtZTogYSBjaGFuZ2UgYnkgYWxpY2UiID4+ZmlsZTEgJiYKKwkJZWNobyAidXNlcm5hbWU6IGEgY2hhbmdlIGJ5IGJvYiIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC0tYXV0aG9yICJBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+IiAtbSAiYSBjaGFuZ2UgYnkgYWxpY2UiIGZpbGUxICYmCisJCWdpdCBjb21taXQgLS1hdXRob3IgIkJvYiA8Ym9iQGV4YW1wbGUuY29tPiIgLW0gImEgY2hhbmdlIGJ5IGJvYiIgZmlsZTIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjayB0cnVlICYmCisJCVA0RURJVE9SPSJ0ZXN0LXRvb2wgY2htdGltZSArNSIgUDRVU0VSPWFsaWNlIFA0UEFTU1dEPXNlY3JldCAmJgorCQlleHBvcnQgUDRFRElUT1IgUDRVU0VSIFA0UEFTU1dEICYmCisJCWdpdCBwNCBjb21taXQgLS1wcmVzZXJ2ZS11c2VyICYmCisJCXA0X2NoZWNrX2NvbW1pdF9hdXRob3IgZmlsZTEgYWxpY2UgJiYKKwkJcDRfY2hlY2tfY29tbWl0X2F1dGhvciBmaWxlMiBib2IKKwkpCisnCisKKyMgVGVzdCB1c2VybmFtZSBzdXBwb3J0LCBzdWJtaXR0aW5nIGFzIGJvYiwgd2hvIGxhY2tzIGFkbWluIHJpZ2h0cy4gU2hvdWxkCisjIG5vdCBzdWJtaXQgY2hhbmdlIHRvIHA0IChnaXQgZGlmZiBzaG91bGQgc2hvdyBkZWx0YXMpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHRvIHByZXNlcnZlIHVzZXJzIHdpdGhvdXQgcGVybXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXRDaGVjayB0cnVlICYmCisJCWVjaG8gInVzZXJuYW1lLW5vcGVybXM6IGEgY2hhbmdlIGJ5IGFsaWNlIiA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLS1hdXRob3IgIkFsaWNlIDxhbGljZUBleGFtcGxlLmNvbT4iIC1tICJwZXJtczogYSBjaGFuZ2UgYnkgYWxpY2UiIGZpbGUxICYmCisJCVA0RURJVE9SPSJ0ZXN0LXRvb2wgY2htdGltZSArNSIgUDRVU0VSPWJvYiBQNFBBU1NXRD1zZWNyZXQgJiYKKwkJZXhwb3J0IFA0RURJVE9SIFA0VVNFUiBQNFBBU1NXRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY29tbWl0IC0tcHJlc2VydmUtdXNlciAmJgorCQkhIGdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQuLnA0L21hc3RlcgorCSkKKycKKworIyBXaGF0IGhhcHBlbnMgd2l0aCB1bmtub3duIGF1dGhvcj8gV2l0aG91dCBhbGxvd01pc3NpbmdQNFVzZXJzIGl0IHNob3VsZCBmYWlsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgdXNlciB3aGVyZSBhdXRob3IgaXMgdW5rbm93biB0byBwNCcgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZWNobyAidXNlcm5hbWUtYm9iOiBhIGNoYW5nZSBieSBib2IiID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQm9iIDxib2JAZXhhbXBsZS5jb20+IiAtbSAicHJlc2VydmU6IGEgY2hhbmdlIGJ5IGJvYiIgZmlsZTEgJiYKKwkJZWNobyAidXNlcm5hbWUtdW5rbm93bjogYSBjaGFuZ2UgYnkgY2hhcmxpZSIgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC0tYXV0aG9yICJDaGFybGllIDxjaGFybGllQGV4YW1wbGUuY29tPiIgLW0gInByZXNlcnZlOiBhIGNoYW5nZSBieSBjaGFybGllIiBmaWxlMSAmJgorCQlQNEVESVRPUj0idGVzdC10b29sIGNobXRpbWUgKzUiIFA0VVNFUj1hbGljZSBQNFBBU1NXRD1zZWNyZXQgJiYKKwkJZXhwb3J0IFA0RURJVE9SIFA0VVNFUiBQNFBBU1NXRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY29tbWl0IC0tcHJlc2VydmUtdXNlciAmJgorCQkhIGdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQuLnA0L21hc3RlciAmJgorCisJCWVjaG8gIiQwOiByZXBlYXQgd2l0aCBhbGxvd01pc3NpbmdQNFVzZXJzIGVuYWJsZWQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmFsbG93TWlzc2luZ1A0VXNlcnMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5wcmVzZXJ2ZVVzZXIgdHJ1ZSAmJgorCQlnaXQgcDQgY29tbWl0ICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQuLnA0L21hc3RlciAmJgorCQlwNF9jaGVja19jb21taXRfYXV0aG9yIGZpbGUxIGFsaWNlCisJKQorJworCisjIElmIHdlJ3JlICpub3QqIHVzaW5nIC0tcHJlc2VydmUtdXNlciwgZ2l0LXA0IHNob3VsZCB3YXJuIGlmIHdlJ3JlIHN1Ym1pdHRpbmcKKyMgY2hhbmdlcyB0aGF0IGFyZSBub3QgYWxsIG91cnMuCisjIFRlc3Q6IHVzZXIgaW4gcDQgYW5kIHVzZXIgdW5rbm93biB0byBwNC4KKyMgVGVzdDogd2FybmluZyBkaXNhYmxlZCBhbmQgdXNlciBpcyB0aGUgc2FtZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBwcmVzZXJ2aW5nIHVzZXIgd2l0aCBtaXhlZCBhdXRob3JzaGlwJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQlwNF9hZGRfdXNlciBkZXJlayAmJgorCisJCW1ha2VfY2hhbmdlX2J5X3VzZXIgdXNlcm5hbWVmaWxlMyBEZXJlayBkZXJla0BleGFtcGxlLmNvbSAmJgorCQlQNEVESVRPUj1jYXQgUDRVU0VSPWFsaWNlIFA0UEFTU1dEPXNlY3JldCAmJgorCQlleHBvcnQgUDRFRElUT1IgUDRVU0VSIFA0UEFTU1dEICYmCisJCWdpdCBwNCBjb21taXQgPmFjdHVhbCAmJgorCQlncmVwICJnaXQgYXV0aG9yIGRlcmVrQGV4YW1wbGUuY29tIGRvZXMgbm90IG1hdGNoIiBhY3R1YWwgJiYKKworCQltYWtlX2NoYW5nZV9ieV91c2VyIHVzZXJuYW1lZmlsZTMgQ2hhcmxpZSBjaGFybGllQGV4YW1wbGUuY29tICYmCisJCWdpdCBwNCBjb21taXQgPmFjdHVhbCAmJgorCQlncmVwICJnaXQgYXV0aG9yIGNoYXJsaWVAZXhhbXBsZS5jb20gZG9lcyBub3QgbWF0Y2giIGFjdHVhbCAmJgorCisJCW1ha2VfY2hhbmdlX2J5X3VzZXIgdXNlcm5hbWVmaWxlMyBhbGljZSBhbGljZUBleGFtcGxlLmNvbSAmJgorCQlnaXQgcDQgY29tbWl0ID5hY3R1YWwgJiYKKwkJISBncmVwICJnaXQgYXV0aG9yLipkb2VzIG5vdCBtYXRjaCIgYWN0dWFsICYmCisKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFVzZXJOYW1lQ2hlY2sgdHJ1ZSAmJgorCQltYWtlX2NoYW5nZV9ieV91c2VyIHVzZXJuYW1lZmlsZTMgQ2hhcmxpZSBjaGFybGllQGV4YW1wbGUuY29tICYmCisJCWdpdCBwNCBjb21taXQgPmFjdHVhbCAmJgorCQkhIGdyZXAgImdpdCBhdXRob3IuKmRvZXMgbm90IG1hdGNoIiBhY3R1YWwgJiYKKworCQlwNF9jaGVja19jb21taXRfYXV0aG9yIHVzZXJuYW1lZmlsZTMgYWxpY2UKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxNC1naXQtcDQtcmVuYW1lLnNoIGIvdC90OTgxNC1naXQtcDQtcmVuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2ODc2N2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODE0LWdpdC1wNC1yZW5hbWUuc2gKQEAgLTAsMCArMSwyNDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgcmVuYW1lJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIyBXZSByZWx5IG9uIHRoaXMgYmVoYXZpb3IgdG8gZGV0ZWN0IGZvciBwNCBtb3ZlIGF2YWlsYWJpbGl0eS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJwNCBoZWxwIHVua25vd24iIGVycm9ycyBvdXQnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBoZWxwIGNsaWVudCAmJgorCQkhIHA0IGhlbHAgbm9zdWNoY29tbWFuZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgY2xpZW50IC1vIHwgc2VkICIvTGluZUVuZC9zLzouKi86dW5peC8iIHwgcDQgY2xpZW50IC1pICYmCisJCWNhdCA+ZmlsZTEgPDwtRU9GICYmCisJCUEgbGFyZ2UgYmxvY2sgb2YgdGV4dAorCQlpbiBmaWxlMSB0aGF0IHdpbGwgZ2VuZXJhdGUKKwkJZW5vdWdoIGNvbnRleHQgc28gdGhhdCByZW5hbWUKKwkJYW5kIGNvcHkgZGV0ZWN0aW9uIHdpbGwgZmluZAorCQlzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZG8uCisJCUVPRgorCQljYXQgPmZpbGUyIDw8LUVPRiAmJgorCQkvKgorCQkgKiBUaGlzIGJsb2IgbG9va3MgYSBiaXQKKwkJICogZGlmZmVyZW50LgorCQkgKi8KKwkJaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorCQl7CisJCQljaGFyIHRleHRbMjAwXTsKKworCQkJc3RyY3B5KHRleHQsICJjb3B5L3JlbmFtZSB0aGlzIik7CisJCQlwcmludGYoInRleHQgaXMgJXNcbiIsIHRleHQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJRU9GCisJCXA0IGFkZCBmaWxlMSBmaWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBmaWxlcyIKKwkpCisnCisKKyMgUmVuYW1lIGEgZmlsZSBhbmQgY29uZmlybSB0aGF0IHJlbmFtZSBpcyBub3QgZGV0ZWN0ZWQgaW4gUDQuCisjIFJlbmFtZSB0aGUgbmV3IGZpbGUgYWdhaW4gd2l0aCBkZXRlY3RSZW5hbWVzIG9wdGlvbiBlbmFibGVkIGFuZCBjb25maXJtIHRoYXQKKyMgdGhpcyBpcyBkZXRlY3RlZCBpbiBQNC4KKyMgUmVuYW1lIHRoZSBuZXcgZmlsZSBhZ2FpbiBhZGRpbmcgYW4gZXh0cmEgbGluZSwgY29uZmlndXJlIGEgYmlnIHRocmVzaG9sZCBpbgorIyBkZXRlY3RSZW5hbWVzIGFuZCBjb25maXJtIHRoYXQgcmVuYW1lIGlzIG5vdCBkZXRlY3RlZCBpbiBQNC4KKyMgUmVwZWF0LCB0aGlzIHRpbWUgd2l0aCBhIHNtYWxsZXIgdGhyZXNob2xkIGFuZCBjb25maXJtIHRoYXQgdGhlIHJlbmFtZSBpcworIyBkZXRlY3RlZCBpbiBQNC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCByZW5hbWVzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisKKwkJZ2l0IG12IGZpbGUxIGZpbGU0ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIlJlbmFtZSBmaWxlMSB0byBmaWxlNCIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGU0ID5maWxlbG9nICYmCisJCSEgZ3JlcCAiIGZyb20gLy9kZXBvdCIgZmlsZWxvZyAmJgorCisJCWdpdCBtdiBmaWxlNCBmaWxlNSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJSZW5hbWUgZmlsZTQgdG8gZmlsZTUiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTUgPmZpbGVsb2cgJiYKKwkJZ3JlcCAiIGZyb20gLy9kZXBvdC9maWxlNCIgZmlsZWxvZyAmJgorCisJCWdpdCBtdiBmaWxlNSBmaWxlNiAmJgorCQllY2hvIHVwZGF0ZSA+PmZpbGU2ICYmCisJCWdpdCBhZGQgZmlsZTYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiUmVuYW1lIGZpbGU1IHRvIGZpbGU2IHdpdGggY2hhbmdlcyIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEICYmCisJCWxldmVsPSQoZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMSB8IGN1dCAtZCIgIiAtZjUgfCBzZWQgInMvUjAqLy8iKSAmJgorCQl0ZXN0IC1uICIkbGV2ZWwiICYmIHRlc3QgIiRsZXZlbCIgLWd0IDAgJiYgdGVzdCAiJGxldmVsIiAtbHQgOTggJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyAkKCgkbGV2ZWwgKyAyKSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTYgPmZpbGVsb2cgJiYKKwkJISBncmVwICIgZnJvbSAvL2RlcG90IiBmaWxlbG9nICYmCisKKwkJZ2l0IG12IGZpbGU2IGZpbGU3ICYmCisJCWVjaG8gdXBkYXRlID4+ZmlsZTcgJiYKKwkJZ2l0IGFkZCBmaWxlNyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJSZW5hbWUgZmlsZTYgdG8gZmlsZTcgd2l0aCBjaGFuZ2VzIiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgJiYKKwkJbGV2ZWw9JChnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYxIHwgY3V0IC1kIiAiIC1mNSB8IHNlZCAicy9SMCovLyIpICYmCisJCXRlc3QgLW4gIiRsZXZlbCIgJiYgdGVzdCAiJGxldmVsIiAtZ3QgMiAmJiB0ZXN0ICIkbGV2ZWwiIC1sdCAxMDAgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyAkKCgkbGV2ZWwgLSAyKSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTcgPmZpbGVsb2cgJiYKKwkJZ3JlcCAiIGZyb20gLy9kZXBvdC9maWxlNiIgZmlsZWxvZworCSkKKycKKworIyBDb3B5IGEgZmlsZSBhbmQgY29uZmlybSB0aGF0IGNvcHkgaXMgbm90IGRldGVjdGVkIGluIFA0LgorIyBDb3B5IGEgZmlsZSB3aXRoIGRldGVjdENvcGllcyBvcHRpb24gZW5hYmxlZCBhbmQgY29uZmlybSB0aGF0IGNvcHkgaXMgbm90CisjIGRldGVjdGVkIGluIFA0LgorIyBNb2RpZnkgYW5kIGNvcHkgYSBmaWxlIHdpdGggZGV0ZWN0Q29waWVzIG9wdGlvbiBlbmFibGVkIGFuZCBjb25maXJtIHRoYXQgY29weQorIyBpcyBkZXRlY3RlZCBpbiBQNC4KKyMgQ29weSBhIGZpbGUgd2l0aCBkZXRlY3RDb3BpZXMgYW5kIGRldGVjdENvcGllc0hhcmRlciBvcHRpb25zIGVuYWJsZWQgYW5kCisjIGNvbmZpcm0gdGhhdCBjb3B5IGlzIGRldGVjdGVkIGluIFA0LgorIyBNb2RpZnkgYW5kIGNvcHkgYSBmaWxlLCBjb25maWd1cmUgYSBiaWdnZXIgdGhyZXNob2xkIGluIGRldGVjdENvcGllcyBhbmQKKyMgY29uZmlybSB0aGF0IGNvcHkgaXMgbm90IGRldGVjdGVkIGluIFA0LgorIyBNb2RpZnkgYW5kIGNvcHkgYSBmaWxlLCBjb25maWd1cmUgYSBzbWFsbGVyIHRocmVzaG9sZCBpbiBkZXRlY3RDb3BpZXMgYW5kCisjIGNvbmZpcm0gdGhhdCBjb3B5IGlzIGRldGVjdGVkIGluIFA0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGNvcGllcycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCisJCWVjaG8gImZpbGU4IiA+PmZpbGUyICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkRpZmZlcmVudGlhdGUgZmlsZTIiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJY3AgZmlsZTIgZmlsZTggJiYKKwkJZ2l0IGFkZCBmaWxlOCAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDb3B5IGZpbGUyIHRvIGZpbGU4IiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1DIEhFQUQgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTggJiYKKwkJISBwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTggfCBncmVwIC1xICJicmFuY2ggZnJvbSIgJiYKKworCQllY2hvICJmaWxlOSIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJEaWZmZXJlbnRpYXRlIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisKKwkJY3AgZmlsZTIgZmlsZTkgJiYKKwkJZ2l0IGFkZCBmaWxlOSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDb3B5IGZpbGUyIHRvIGZpbGU5IiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1DIEhFQUQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTkgJiYKKwkJISBwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTkgfCBncmVwIC1xICJicmFuY2ggZnJvbSIgJiYKKworCQllY2hvICJmaWxlMTAiID4+ZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiRGlmZmVyZW50aWF0ZSBmaWxlMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCisJCWVjaG8gImZpbGUyIiA+PmZpbGUyICYmCisJCWNwIGZpbGUyIGZpbGUxMCAmJgorCQlnaXQgYWRkIGZpbGUyIGZpbGUxMCAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgYW5kIGNvcHkgZmlsZTIgdG8gZmlsZTEwIiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1DIEhFQUQgJiYKKwkJc3JjPSQoZ2l0IGRpZmYtdHJlZSAtciAtQyBIRUFEIHwgc2VkIDFkIHwgc2VkIDJkIHwgY3V0IC1mMikgJiYKKwkJdGVzdCAiJHNyYyIgPSBmaWxlMiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTAgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMCB8IGdyZXAgLXEgImJyYW5jaCBmcm9tIC8vZGVwb3QvZmlsZTIiICYmCisKKwkJZWNobyAiZmlsZTExIiA+PmZpbGUyICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkRpZmZlcmVudGlhdGUgZmlsZTIiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKworCQljcCBmaWxlMiBmaWxlMTEgJiYKKwkJZ2l0IGFkZCBmaWxlMTEgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQ29weSBmaWxlMiB0byBmaWxlMTEiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCAmJgorCQlzcmM9JChnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYyKSAmJgorCQl0ZXN0ICIkc3JjIiA9IGZpbGUyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMSAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTExIHwgZ3JlcCAtcSAiYnJhbmNoIGZyb20gLy9kZXBvdC9maWxlMiIgJiYKKworCQllY2hvICJmaWxlMTIiID4+ZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiRGlmZmVyZW50aWF0ZSBmaWxlMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCisJCWNwIGZpbGUyIGZpbGUxMiAmJgorCQllY2hvICJzb21lIHRleHQiID4+ZmlsZTEyICYmCisJCWdpdCBhZGQgZmlsZTEyICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTEyIHdpdGggY2hhbmdlcyIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEICYmCisJCWxldmVsPSQoZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMSB8IGN1dCAtZCIgIiAtZjUgfCBzZWQgInMvQzAqLy8iKSAmJgorCQl0ZXN0IC1uICIkbGV2ZWwiICYmIHRlc3QgIiRsZXZlbCIgLWd0IDAgJiYgdGVzdCAiJGxldmVsIiAtbHQgOTggJiYKKwkJc3JjPSQoZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMikgJiYKKwkJdGVzdCAiJHNyYyIgPSBmaWxlMiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgJCgoJGxldmVsICsgMikpICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMiAmJgorCQkhIHA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTIgfCBncmVwIC1xICJicmFuY2ggZnJvbSIgJiYKKworCQllY2hvICJmaWxlMTMiID4+ZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiRGlmZmVyZW50aWF0ZSBmaWxlMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCisJCWNwIGZpbGUyIGZpbGUxMyAmJgorCQllY2hvICJkaWZmZXJlbnQgdGV4dCIgPj5maWxlMTMgJiYKKwkJZ2l0IGFkZCBmaWxlMTMgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQ29weSBmaWxlMiB0byBmaWxlMTMgd2l0aCBjaGFuZ2VzIiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgJiYKKwkJbGV2ZWw9JChnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYxIHwgY3V0IC1kIiAiIC1mNSB8IHNlZCAicy9DMCovLyIpICYmCisJCXRlc3QgLW4gIiRsZXZlbCIgJiYgdGVzdCAiJGxldmVsIiAtZ3QgMiAmJiB0ZXN0ICIkbGV2ZWwiIC1sdCAxMDAgJiYKKwkJc3JjPSQoZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMikgJiYKKwkJdGVzdCAiJHNyYyIgPSBmaWxlMiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgJCgoJGxldmVsIC0gMikpICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMyAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTEzIHwgZ3JlcCAtcSAiYnJhbmNoIGZyb20gLy9kZXBvdC9maWxlMiIKKwkpCisnCisKKyMgU2VlIGlmIGNvbmZpZ3VyYWJsZXMgY2FuIGJlIHNldCwgYW5kIGluIHBhcnRpY3VsYXIgaWYgdGhlIHJ1bi5tb3ZlLmFsbG93CisjIHZhcmlhYmxlIGV4aXN0cywgd2hpY2ggYWxsb3dzIGFkbWlucyB0byBkaXNhYmxlIHRoZSAicDQgbW92ZSIgY29tbWFuZC4KK3Rlc3RfbGF6eV9wcmVyZXEgUDREX0hBVkVfQ09ORklHVVJBQkxFX1JVTl9NT1ZFX0FMTE9XICcKKwlwNCBjb25maWd1cmUgc2hvdyBydW4ubW92ZS5hbGxvdyA+b3V0ICYmCisJZWdyZXAgXnJ1bi5tb3ZlLmFsbG93OiBvdXQKKycKKworIyBJZiBtb3ZlIGNhbiBiZSBkaXNhYmxlZCwgdHVybiBpdCBvZmYgYW5kIHRlc3QgcDQgbW92ZSBoYW5kbGluZwordGVzdF9leHBlY3Rfc3VjY2VzcyBQNERfSEFWRV9DT05GSUdVUkFCTEVfUlVOX01PVkVfQUxMT1cgXAorCQkgICAgJ2RvIG5vdCB1c2UgcDQgbW92ZSB3aGVuIGFkbWluaXN0cmF0aXZlbHkgZGlzYWJsZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInA0IGNvbmZpZ3VyZSBzZXQgcnVuLm1vdmUuYWxsb3c9MSIgJiYKKwlwNCBjb25maWd1cmUgc2V0IHJ1bi5tb3ZlLmFsbG93PTAgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIG1vdmUtZGlzYWxsb3ctZmlsZSA+bW92ZS1kaXNhbGxvdy1maWxlICYmCisJCXA0IGFkZCBtb3ZlLWRpc2FsbG93LWZpbGUgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgbW92ZS1kaXNhbGxvdy1maWxlIgorCSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IG12IG1vdmUtZGlzYWxsb3ctZmlsZSBtb3ZlLWRpc2FsbG93LWZpbGUtbW92ZWQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibW92ZSBtb3ZlLWRpc2FsbG93LWZpbGUiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxNS1naXQtcDQtc3VibWl0LWZhaWwuc2ggYi90L3Q5ODE1LWdpdC1wNC1zdWJtaXQtZmFpbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45Nzc5ZGMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxNS1naXQtcDQtc3VibWl0LWZhaWwuc2gKQEAgLTAsMCArMSw0MjUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgc3VibWl0IGZhaWx1cmUgaGFuZGxpbmcnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgY2xpZW50IC1vIHwgc2VkICIvTGluZUVuZC9zLzouKi86dW5peC8iIHwgcDQgY2xpZW50IC1pICYmCisJCWVjaG8gbGluZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImxpbmUxIGluIGZpbGUxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgb24gb25lIGNvbW1pdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGZpbGUxICYmCisJCWVjaG8gbGluZTIgPj5maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImxpbmUyIGluIGZpbGUxIgorCSkgJiYKKwkoCisJCSMgbm93IHRoaXMgY29tbWl0IHNob3VsZCBjYXVzZSBhIGNvbmZsaWN0CisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWVjaG8gbGluZTMgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmUzIGluIGZpbGUxIHdpbGwgY29uZmxpY3QiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiTm8gY29tbWl0cyBhcHBsaWVkIiBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IG9uIHNlY29uZCBvZiB0d28gY29tbWl0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGZpbGUxICYmCisJCWVjaG8gbGluZTMgPj5maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImxpbmUzIGluIGZpbGUxIgorCSkgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgdGhpcyBjb21taXQgaXMgb2theQorCQl0ZXN0X2NvbW1pdCAiZmlyc3RfY29tbWl0X29rYXkiICYmCisJCSMgbm93IHRoaXMgc3VibWl0IHNob3VsZCBjYXVzZSBhIGNvbmZsaWN0CisJCWVjaG8gbGluZTQgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmU0IGluIGZpbGUxIHdpbGwgY29uZmxpY3QiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiQXBwbGllZCBvbmx5IHRoZSBjb21taXRzIiBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IG9uIGZpcnN0IG9mIHR3byBjb21taXRzLCBza2lwJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lNCA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAibGluZTQgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB0aGlzIHN1Ym1pdCBzaG91bGQgY2F1c2UgYSBjb25mbGljdAorCQllY2hvIGxpbmU1ID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJsaW5lNSBpbiBmaWxlMSB3aWxsIGNvbmZsaWN0IiAmJgorCQkjIGJ1dCB0aGlzIGNvbW1pdCBpcyBva2F5CisJCXRlc3RfY29tbWl0ICJva2F5X2NvbW1pdF9hZnRlcl9za2lwIiAmJgorCQllY2hvIHMgfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkFwcGxpZWQgb25seSB0aGUgY29tbWl0cyIgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBvbiBmaXJzdCBvZiB0d28gY29tbWl0cywgcXVpdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGZpbGUxICYmCisJCWVjaG8gbGluZTcgPj5maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImxpbmU3IGluIGZpbGUxIgorCSkgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgdGhpcyBzdWJtaXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJZWNobyBsaW5lOCA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTggaW4gZmlsZTEgd2lsbCBjb25mbGljdCIgJiYKKwkJIyBidXQgdGhpcyBjb21taXQgaXMgb2theQorCQl0ZXN0X2NvbW1pdCAib2theV9jb21taXRfYWZ0ZXJfcXVpdCIgJiYKKwkJZWNobyBxIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJObyBjb21taXRzIGFwcGxpZWQiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3QgY2xpIGFuZCBjb25maWcgb3B0aW9ucycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3VibWl0IC0tY29uZmxpY3Q9YXNrICYmCisJCWdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1za2lwICYmCisJCWdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1xdWl0ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgcDQgc3VibWl0IC0tY29uZmxpY3Q9Zm9vICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgcDQgc3VibWl0IC0tY29uZmxpY3QgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuY29uZmxpY3QgZm9vICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ICYmCisJCWdpdCBjb25maWcgLS11bnNldCBnaXQtcDQuY29uZmxpY3QgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgb24gZmlyc3Qgb2YgdHdvIGNvbW1pdHMsIC0tY29uZmxpY3Q9c2tpcCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGZpbGUxICYmCisJCWVjaG8gbGluZTkgPj5maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImxpbmU5IGluIGZpbGUxIgorCSkgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgdGhpcyBzdWJtaXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJZWNobyBsaW5lMTAgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmUxMCBpbiBmaWxlMSB3aWxsIGNvbmZsaWN0IiAmJgorCQkjIGJ1dCB0aGlzIGNvbW1pdCBpcyBva2F5CisJCXRlc3RfY29tbWl0ICJva2F5X2NvbW1pdF9hZnRlcl9hdXRvX3NraXAiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0IC0tY29uZmxpY3Q9c2tpcCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkFwcGxpZWQgb25seSB0aGUgY29tbWl0cyIgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBvbiBmaXJzdCBvZiB0d28gY29tbWl0cywgLS1jb25mbGljdD1xdWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyBsaW5lMTEgPj5maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImxpbmUxMSBpbiBmaWxlMSIKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIHRoaXMgc3VibWl0IHNob3VsZCBjYXVzZSBhIGNvbmZsaWN0CisJCWVjaG8gbGluZTEyID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJsaW5lMTIgaW4gZmlsZTEgd2lsbCBjb25mbGljdCIgJiYKKwkJIyBidXQgdGhpcyBjb21taXQgaXMgb2theQorCQl0ZXN0X2NvbW1pdCAib2theV9jb21taXRfYWZ0ZXJfYXV0b19xdWl0IiAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0PXF1aXQgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJObyBjb21taXRzIGFwcGxpZWQiIG91dAorCSkKKycKKworIworIyBDbGVhbnVwIGFmdGVyIHN1Ym1pdCBmYWlsLCBhbGwgY2FzZXMuICBTb21lIG1vZGlmaWNhdGlvbnMgaGFwcGVuCisjIGJlZm9yZSB0cnlpbmcgdG8gYXBwbHkgdGhlIHBhdGNoLiAgTWFrZSBzdXJlIHRoZXNlIGFyZSB1bndvdW5kCisjIHByb3Blcmx5LiAgUHV0IGVhY2ggb25lIGluIGEgZGlmZiBhbG9uZyB3aXRoIHNvbWV0aGluZyB0aGF0IHdpbGwKKyMgb2J2aW91c2x5IGNvbmZsaWN0LiAgTWFrZSBzdXJlIGl0IGlzIGJhY2sgdG8gbm9ybWFsIGFmdGVyLgorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGVkaXQgcDQgcG9wdWxhdGUnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIHRleHQgZmlsZSA+dGV4dCAmJgorCQlwNCBhZGQgdGV4dCAmJgorCQllY2hvIHRleHQreCBmaWxlID50ZXh0K3ggJiYKKwkJY2htb2QgNzU1IHRleHQreCAmJgorCQlwNCBhZGQgdGV4dCt4ICYmCisJCXA0IHN1Ym1pdCAtZCAicG9wdWxhdGUgcDQiCisJKQorJworCitzZXR1cF9jb25mbGljdCgpIHsKKwkjIGNsb25lIGJlZm9yZSBtb2RpZnlpbmcgZmlsZTEgdG8gZm9yY2UgaXQgdG8gY29uZmxpY3QKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJIyB0aWNrcyBvdXRzaWRlIHN1YnNoZWxscworCXRlc3RfdGljayAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZmlsZTEgJiYKKwkJZWNobyAkdGVzdF90aWNrID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICIkdGVzdF90aWNrIGluIGZpbGUxIgorCSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgZWFzeSBjb25mbGljdAorCQllY2hvICR0ZXN0X3RpY2sgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxCisJCSMgY2FsbGVyIHdpbGwgYWRkIG1vcmUgYW5kIHN1Ym1pdAorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBlZGl0IGFmdGVyIHN1Ym1pdCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGFub3RoZXIgbGluZSA+PnRleHQgJiYKKwkJZ2l0IGFkZCB0ZXh0ICYmCisJCWdpdCBjb21taXQgLW0gImNvbmZsaWN0IiAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQkjIG1ha2Ugc3VyZSBpdCBpcyBub3Qgb3BlbgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGFkZCBhZnRlciBzdWJtaXQgZmFpbCcgJworCXNldHVwX2NvbmZsaWN0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBuZXcgZmlsZSA+dGV4dG5ldyAmJgorCQlnaXQgYWRkIHRleHRuZXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29uZmxpY3QiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCSMgbWFrZSBzdXJlIGl0IGlzIG5vdCB0aGVyZQorCQkjIGFuZCB0aGF0IHA0IHRoaW5rcyBpdCBpcyBub3QgYWRkZWQKKwkJIyAgIFA0IHJldHVybnMgMCBib3RoIGZvciAibm90IHRoZXJlIGJ1dCBhZGRlZCIgYW5kCisJCSMgICAibm90IHRoZXJlIiwgc28gZ3JlcC4KKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dG5ldyAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dG5ldyAyPiYxIHwgZ3JlcCAibm8gc3VjaCBmaWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBkZWxldGUgYWZ0ZXIgc3VibWl0IGZhaWwnICcKKwlzZXR1cF9jb25mbGljdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBybSB0ZXh0K3ggJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29uZmxpY3QiICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCSMgbWFrZSBzdXJlIGl0IGlzIHRoZXJlCisJCXRlc3RfcGF0aF9pc19maWxlIHRleHQreCAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0K3gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29weSBhZnRlciBzdWJtaXQgZmFpbCcgJworCXNldHVwX2NvbmZsaWN0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJY3AgdGV4dCB0ZXh0MiAmJgorCQlnaXQgYWRkIHRleHQyICYmCisJCWdpdCBjb21taXQgLW0gImNvbmZsaWN0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXNIYXJkZXIgdHJ1ZSAmJgorCQkjIG1ha2Ugc3VyZSBzZXR1cCBpcyBva2F5CisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IGdyZXAgdGV4dDIgfCBncmVwIEMxMDAgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dDIgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQyIDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIHJlbmFtZSBhZnRlciBzdWJtaXQgZmFpbCcgJworCXNldHVwX2NvbmZsaWN0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IG12IHRleHQgdGV4dDIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29uZmxpY3QiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQkjIG1ha2Ugc3VyZSBzZXR1cCBpcyBva2F5CisJCWdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCB8IGdyZXAgdGV4dDIgfCBncmVwIFIxMDAgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgdGV4dDIgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQyIDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiCisJKQorJworCisjCisjIENsZWFudXAgYWZ0ZXIgZGVjaWRpbmcgbm90IHRvIHN1Ym1pdCBkdXJpbmcgZWRpdFRlbXBsYXRlLiAgVGhpcworIyBpbnZvbHZlcyB1bndpbmRpbmcgbW9yZSB3b3JrLCBiZWNhdXNlIGZpbGVzIGhhdmUgYmVlbiBhZGRlZCwgZGVsZXRlZAorIyBhbmQgY2htb2QtZWQgbm93LiAgU2FtZSBhcHByb2FjaCBhcyBhYm92ZS4KKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBlZGl0IGFmdGVyIHN1Ym1pdCBjYW5jZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lID4+dGV4dCAmJgorCQlnaXQgYWRkIHRleHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXh0ICYmCisJCWVjaG8gbiB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJISBwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dCAmJgorCQl0ZXN0X2NtcCAiJGdpdCIvdGV4dCB0ZXh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGFkZCBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZSA+dGV4dG5ldyAmJgorCQlnaXQgYWRkIHRleHRuZXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXh0bmV3ICYmCisJCWVjaG8gbiB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHRleHRuZXcgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHRleHRuZXcgMj4mMSB8IGdyZXAgIm5vIHN1Y2ggZmlsZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgZGVsZXRlIGFmdGVyIHN1Ym1pdCBjYW5jZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJtIHRleHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicm0gdGV4dCIgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgdGV4dCAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvcHkgYWZ0ZXIgc3VibWl0IGNhbmNlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljcCB0ZXh0IHRleHQyICYmCisJCWdpdCBhZGQgdGV4dDIgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXh0MiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXNIYXJkZXIgdHJ1ZSAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgfCBncmVwIHRleHQyIHwgZ3JlcCBDMTAwICYmCisJCWVjaG8gbiB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHRleHQyICYmCisJCXA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0MiAyPiYxIHwgZ3JlcCAibm8gc3VjaCBmaWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCByZW5hbWUgYWZ0ZXIgc3VibWl0IGNhbmNlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbXYgdGV4dCB0ZXh0MiAmJgorCQlnaXQgY29tbWl0IC1tIHRleHQyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgfCBncmVwIHRleHQyIHwgZ3JlcCBSMTAwICYmCisJCWVjaG8gbiB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHRleHQyICYmCisJCXA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0MiAyPiYxIHwgZ3JlcCAibm8gc3VjaCBmaWxlIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXh0ICYmCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY2htb2QgYWZ0ZXIgc3VibWl0IGNhbmNlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NobW9kICt4IHRleHQgJiYKKwkJdGVzdF9jaG1vZCAteCB0ZXh0K3ggJiYKKwkJZ2l0IGFkZCB0ZXh0IHRleHQreCAmJgorCQlnaXQgY29tbWl0IC1tICJjaG1vZCB0ZXh0cyIgJiYKKwkJZWNobyBuIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgdGV4dCAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHRleHQreCAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0K3ggJiYKKwkJbHMgLWwgdGV4dCB8IGVncmVwIF4tci0tICYmCisJCWxzIC1sIHRleHQreCB8IGVncmVwIF4tci14CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTYtZ2l0LXA0LWxvY2tlZC5zaCBiL3QvdDk4MTYtZ2l0LXA0LWxvY2tlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MzI4NDEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxNi1naXQtcDQtbG9ja2VkLnNoCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGxvY2tlZCBmaWxlIGJlaGF2aW9yJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIyBTZWUKKyMgaHR0cDovL3d3dy5wZXJmb3JjZS5jb20vcGVyZm9yY2UvZG9jLmN1cnJlbnQvbWFudWFscy9wNHNhZy8wM19zdXBlcnVzZXIuaHRtbCMxMDg4NTYzCisjIGZvciBzdWdnZXN0aW9ucyBvbiBob3cgdG8gY29uZmlndXJlICJzaXRld2lkZSBwZXNzaW1pc3RpYyBsb2NraW5nIgorIyB3aGVyZSBvbmx5IG9uZSBwZXJzb24gY2FuIGhhdmUgYSBmaWxlIG9wZW4gZm9yIGVkaXQgYXQgYSB0aW1lLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gIlR5cGVNYXA6ICtsIC8vZGVwb3QvLi4uIiB8IHA0IHR5cGVtYXAgLWkgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGUxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCB3aXRoIGxvY2sgbm90IHRha2VuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZTIgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmUyIGluIGZpbGUxIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB3aXRoIGxvY2sgbm90IHRha2VuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZTEgPj5hZGQtbG9jay1ub3QtdGFrZW4gJiYKKwkJZ2l0IGFkZCBhZGQtbG9jay1ub3QtdGFrZW4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGFkZC1sb2NrLW5vdC10YWtlbiIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tdmVyYm9zZQorCSkKKycKKworbG9ja19pbl9hbm90aGVyX2NsaWVudCgpIHsKKwkjIGJ1aWxkIGEgZGlmZmVyZW50IGNsaWVudAorCWNsaTI9IiRUUkFTSF9ESVJFQ1RPUlkvY2xpMiIgJiYKKwlta2RpciAtcCAiJGNsaTIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJwNCBjbGllbnQgLWYgLWQgY2xpZW50MiAmJiBybSAtcmYgXCIkY2xpMlwiIiAmJgorCSgKKwkJY2QgIiRjbGkyIiAmJgorCQlQNENMSUVOVD1jbGllbnQyICYmCisJCWNsaT0iJGNsaTIiICYmCisJCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudDIvLi4uIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IG9wZW4gZmlsZTEKKwkpCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2VkaXQgd2l0aCBsb2NrIHRha2VuJyAnCisJbG9ja19pbl9hbm90aGVyX2NsaWVudCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgXCIkY2xpXCIgJiYgcDQgc3luYyAtZiBmaWxlMSIgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lMyA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTMgaW4gZmlsZTEiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXZlcmJvc2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RlbGV0ZSB3aXRoIGxvY2sgdGFrZW4nICcKKwlsb2NrX2luX2Fub3RoZXJfY2xpZW50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCBcIiRjbGlcIiAmJiBwNCBzeW5jIC1mIGZpbGUxIiAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcm0gZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIGZpbGUxIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaG1vZCB3aXRoIGxvY2sgdGFrZW4nICcKKwlsb2NrX2luX2Fub3RoZXJfY2xpZW50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCBcIiRjbGlcIiAmJiBwNCBzeW5jIC1mIGZpbGUxIiAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljaG1vZCAreCBmaWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImNobW9kICt4IGZpbGUxIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IHdpdGggbG9jayB0YWtlbicgJworCWxvY2tfaW5fYW5vdGhlcl9jbGllbnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIFwiJGNsaVwiICYmIHA0IHJldmVydCBmaWxlMiAmJiBybSAtZiBmaWxlMiIgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJY3AgZmlsZTEgZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJjcCBmaWxlMSB0byBmaWxlMiIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tdmVyYm9zZQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbW92ZSB3aXRoIGxvY2sgdGFrZW4nICcKKwlsb2NrX2luX2Fub3RoZXJfY2xpZW50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCBcIiRjbGlcIiAmJiBwNCBzeW5jIGZpbGUxICYmIHJtIC1mIGZpbGUyIiAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbXYgZmlsZTEgZmlsZTMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibXYgZmlsZTEgdG8gZmlsZTMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTctZ2l0LXA0LWV4Y2x1ZGUuc2ggYi90L3Q5ODE3LWdpdC1wNC1leGNsdWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjM2Q5MzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODE3LWdpdC1wNC1leGNsdWRlLnNoCkBAIC0wLDAgKzEsMTA4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHRlc3RzIGZvciBleGNsdWRlZCBwYXRocyBkdXJpbmcgY2xvbmUgYW5kIHN5bmMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjIENyZWF0ZSBhIHJlcG8gd2l0aCB0aGUgc3RydWN0dXJlOgorIworIyAgICAvL2RlcG90L3dhbnRlZC9mb28KKyMgICAgLy9kZXBvdC9kaXNjYXJkL2ZvbworIworIyBDaGVjayB0aGF0IHdlIGNhbiBleGNsdWRlIGEgc3ViZGlyZWN0b3J5IHdpdGggYm90aAorIyBjbG9uZSBhbmQgc3luYyBvcGVyYXRpb25zLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZXhjbHVkZSByZXBvJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgd2FudGVkIGRpc2NhcmQgJiYKKwkJZWNobyB3YW50ZWQgPndhbnRlZC9mb28gJiYKKwkJZWNobyBkaXNjYXJkID5kaXNjYXJkL2ZvbyAmJgorCQllY2hvIGRpc2NhcmRfZmlsZSA+ZGlzY2FyZF9maWxlICYmCisJCWVjaG8gZGlzY2FyZF9maWxlX25vdCA+ZGlzY2FyZF9maWxlX25vdCAmJgorCQlwNCBhZGQgd2FudGVkL2ZvbyBkaXNjYXJkL2ZvbyBkaXNjYXJkX2ZpbGUgZGlzY2FyZF9maWxlX25vdCAmJgorCQlwNCBzdWJtaXQgLWQgImluaXRpYWwgcmV2aXNpb24iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0aGUgcmVwbyB3YXMgY3JlYXRlZCBjb3JyZWN0bHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90Ly4uLkBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB3YW50ZWQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkX2ZpbGVfbm90CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSwgZXhjbHVkaW5nIHBhcnQgb2YgcmVwbycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLy9kZXBvdC9kaXNjYXJkLy4uLiAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvLi4uQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHdhbnRlZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlzY2FyZC9mb28gJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlzY2FyZF9maWxlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpc2NhcmRfZmlsZV9ub3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lLCBleGNsdWRpbmcgc2luZ2xlIGZpbGUsIG5vIHRyYWlsaW5nIC8nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS8vZGVwb3QvZGlzY2FyZF9maWxlIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC8uLi5AYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgd2FudGVkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXNjYXJkX2ZpbGUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlzY2FyZF9maWxlX25vdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUsIHRoZW4gc3luYyB3aXRoIGV4Y2x1ZGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS8vZGVwb3QvZGlzY2FyZC8uLi4gLS1kZXN0PSIkZ2l0IiAvL2RlcG90Ly4uLkBhbGwgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBlZGl0IHdhbnRlZC9mb28gZGlzY2FyZC9mb28gZGlzY2FyZF9maWxlX25vdCAmJgorCQlkYXRlID4+d2FudGVkL2ZvbyAmJgorCQlkYXRlID4+ZGlzY2FyZC9mb28gJiYKKwkJZGF0ZSA+PmRpc2NhcmRfZmlsZV9ub3QgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGluZyIgJiYKKworCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS8vZGVwb3QvZGlzY2FyZC8uLi4gJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgd2FudGVkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXNjYXJkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkX2ZpbGUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlzY2FyZF9maWxlX25vdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUsIHRoZW4gc3luYyB3aXRoIGV4Y2x1ZGUsIG5vIHRyYWlsaW5nIC8nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS8vZGVwb3QvZGlzY2FyZC8uLi4gLS8vZGVwb3QvZGlzY2FyZF9maWxlIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC8uLi5AYWxsICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgZWRpdCB3YW50ZWQvZm9vIGRpc2NhcmQvZm9vIGRpc2NhcmRfZmlsZV9ub3QgJiYKKwkJZGF0ZSA+PndhbnRlZC9mb28gJiYKKwkJZGF0ZSA+PmRpc2NhcmQvZm9vICYmCisJCWRhdGUgPj5kaXNjYXJkX2ZpbGVfbm90ICYmCisJCXA0IHN1Ym1pdCAtZCAidXBkYXRpbmciICYmCisKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0vL2RlcG90L2Rpc2NhcmQvLi4uIC0vL2RlcG90L2Rpc2NhcmRfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB3YW50ZWQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpc2NhcmQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpc2NhcmRfZmlsZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkX2ZpbGVfbm90CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTgtZ2l0LXA0LWJsb2NrLnNoIGIvdC90OTgxOC1naXQtcDQtYmxvY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGRiN2FiOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTgtZ2l0LXA0LWJsb2NrLnNoCkBAIC0wLDAgKzEsMTQ5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGZldGNoaW5nIGNoYW5nZXMgaW4gbXVsdGlwbGUgYmxvY2tzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworY3JlYXRlX3Jlc3RyaWN0ZWRfZ3JvdXAoKSB7CisJcDQgZ3JvdXAgLWkgPDwtRU9GCisJR3JvdXA6IHJlc3RyaWN0ZWQKKwlNYXhSZXN1bHRzOiA3CisJTWF4U2NhblJvd3M6IDQwCisJVXNlcnM6IGF1dGhvcgorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgZ3JvdXAgd2l0aCBsaW1pdGVkIG1heHJvd3MnICcKKwljcmVhdGVfcmVzdHJpY3RlZF9ncm91cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgYSByZXBvIHdpdGggbWFueSBjaGFuZ2VzJyAnCisJKAorCQljbGllbnRfdmlldyAiLy9kZXBvdC9pbmNsdWRlZC8uLi4gLy9jbGllbnQvaW5jbHVkZWQvLi4uIiBcCisJCQkgICAgIi8vZGVwb3QvZXhjbHVkZWQvLi4uIC8vY2xpZW50L2V4Y2x1ZGVkLy4uLiIgJiYKKwkJbWtkaXIgLXAgIiRjbGkvaW5jbHVkZWQiICIkY2xpL2V4Y2x1ZGVkIiAmJgorCQljZCAiJGNsaS9pbmNsdWRlZCIgJiYKKwkJPmZpbGUudHh0ICYmCisJCXA0IGFkZCBmaWxlLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlLnR4dCIgJiYKKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSAwIDUpCisJCWRvCisJCQk+b3V0ZXIkaS50eHQgJiYKKwkJCXA0IGFkZCBvdXRlciRpLnR4dCAmJgorCQkJcDQgc3VibWl0IC1kICJBZGRpbmcgb3V0ZXIkaS50eHQiICYmCisJCQlmb3IgaiBpbiAkKHRlc3Rfc2VxIDAgNSkKKwkJCWRvCisJCQkJcDQgZWRpdCBmaWxlLnR4dCAmJgorCQkJCWVjaG8gJGkkaiA+ZmlsZS50eHQgJiYKKwkJCQlwNCBzdWJtaXQgLWQgIkNvbW1pdCAkaSRqIiB8fCBleGl0CisJCQlkb25lIHx8IGV4aXQKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRGVmYXVsdCB1c2VyIGNhbm5vdCBmZXRjaCBjaGFuZ2VzJyAnCisJISBwNCBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgdGhlIHJlcG8nICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLWNoYW5nZXMtYmxvY2stc2l6ZT03IC0tdmVyYm9zZSAvL2RlcG90L2luY2x1ZGVkQGFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBbGwgZmlsZXMgYXJlIHByZXNlbnQnICcKKwllY2hvIGZpbGUudHh0ID5leHBlY3RlZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgb3V0ZXIwLnR4dCBvdXRlcjEudHh0IG91dGVyMi50eHQgb3V0ZXIzLnR4dCBvdXRlcjQudHh0ID4+ZXhwZWN0ZWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG91dGVyNS50eHQgPj5leHBlY3RlZCAmJgorCWxzICIkZ2l0IiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZS50eHQgaXMgY29ycmVjdCcgJworCWVjaG8gNTUgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRnaXQvZmlsZS50eHQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NvcnJlY3QgbnVtYmVyIG9mIGNvbW1pdHMnICcKKwkoY2QgIiRnaXQiICYmIGdpdCBsb2cgLS1vbmVsaW5lKSA+bG9nICYmCisJd2MgLWwgbG9nICYmCisJdGVzdF9saW5lX2NvdW50ID0gNDMgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ByZXZpb3VzIHZlcnNpb24gb2YgZmlsZS50eHQgaXMgY29ycmVjdCcgJworCShjZCAiJGdpdCIgJiYgZ2l0IGNoZWNrb3V0IEhFQUReXikgJiYKKwllY2hvIDUzID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkZ2l0L2ZpbGUudHh0IgorJworCisjIFRlc3QgZ2l0LXA0IHN5bmMsIHdpdGggc29tZSBmaWxlcyBvdXRzaWRlIHRoZSBjbGllbnQgc3BlY2lmaWNhdGlvbi4KKworcDRfYWRkX2ZpbGUoKSB7CisJKGNkICIkY2xpIiAmJgorCQk+JDEgJiYKKwkJcDQgYWRkICQxICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkZWQgZmlsZSAkMSIgJDEKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FkZCBzb21lIG1vcmUgZmlsZXMnICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDAgMTApCisJZG8KKwkJcDRfYWRkX2ZpbGUgImluY2x1ZGVkL3gkaSIgJiYKKwkJcDRfYWRkX2ZpbGUgImV4Y2x1ZGVkL3gkaSIKKwlkb25lICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAwIDEwKQorCWRvCisJCXA0X2FkZF9maWxlICJleGNsdWRlZC95JGkiCisJZG9uZQorJworCisjIFRoaXMgc2hvdWxkIHBpY2sgdXAgdGhlIDEwIG5ldyBmaWxlcyBpbiAiaW5jbHVkZWQiLCBidXQgbm90IGJlIGNvbmZ1c2VkCisjIGJ5IHRoZSBhZGRpdGlvbmFsIGZpbGVzIGluICJleGNsdWRlZCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1N5bmNpbmcgZmlsZXMnICcKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWNoYW5nZXMtYmxvY2stc2l6ZT03ICYmCisJCWdpdCBjaGVja291dCBwNC9tYXN0ZXIgJiYKKwkJbHMgLWwgeCogPiBsb2cgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMTEgbG9nCisJKQorJworCisjIEhhbmRsaW5nIG9mIG11bHRpcGxlIGRlcG90IHBhdGhzOgorIyAgICBnaXQgcDQgY2xvbmUgLy9kZXBvdC9wYXRoQSAvL2RlcG90L3BhdGhCCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgYSByZXBvIHdpdGggbXVsdGlwbGUgZGVwb3QgcGF0aHMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9wYXRoQS8uLi4gLy9jbGllbnQvcGF0aEEvLi4uIiBcCisJCSAgICAiLy9kZXBvdC9wYXRoQi8uLi4gLy9jbGllbnQvcGF0aEIvLi4uIiAmJgorCW1rZGlyIC1wICIkY2xpL3BhdGhBIiAiJGNsaS9wYXRoQiIgJiYKKwlmb3IgcCBpbiBwYXRoQSBwYXRoQgorCWRvCisJCWZvciBpIGluICQodGVzdF9zZXEgMSAxMCkKKwkJZG8KKwkJCXA0X2FkZF9maWxlICIkcC9maWxlJHAkaSIKKwkJZG9uZQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcmVwbyB3aXRoIG11bHRpcGxlIGRlcG90IHBhdGhzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IGNsb25lIC0tY2hhbmdlcy1ibG9jay1zaXplPTQgLy9kZXBvdC9wYXRoQUBhbGwgLy9kZXBvdC9wYXRoQkBhbGwgXAorCQkJLS1kZXN0aW5hdGlvbj1kZXN0ICYmCisJCWxzIC0xIGRlc3QgPmxvZyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyMCBsb2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHJlcG8gd2l0aCBzZWxmLXNpemluZyBibG9jayBzaXplJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tY2hhbmdlcy1ibG9jay1zaXplPTEwMDAwMDAgLy9kZXBvdEBhbGwgLS1kZXN0aW5hdGlvbj0iJGdpdCIgJiYKKwlnaXQgLUMgIiRnaXQiIGxvZyAtLW9uZWxpbmUgPmxvZyAmJgorCXRlc3RfbGluZV9jb3VudCBcPiAxMCBsb2cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODE5LWdpdC1wNC1jYXNlLWZvbGRpbmcuc2ggYi90L3Q5ODE5LWdpdC1wNC1jYXNlLWZvbGRpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjAwY2UxZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTktZ2l0LXA0LWNhc2UtZm9sZGluZy5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naW50ZXJhY3Rpb24gd2l0aCBQNCBjYXNlLWZvbGRpbmcnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgQ0FTRV9JTlNFTlNJVElWRV9GUwordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBQNCBjYXNlLWZvbGRpbmcgdGVzdHM7IGNhc2UgaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0gZGV0ZWN0ZWQnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQgd2l0aCBjYXNlIGZvbGRpbmcgZW5hYmxlZCcgJworCXN0YXJ0X3A0ZCAtQzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIGEgcmVwbywgbmFtZSBpcyBsb3dlcmNhc2UnICcKKwkoCisJCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBsYyBVQyAmJgorCQk+bGMvZmlsZS50eHQgJiYgPlVDL2ZpbGUudHh0ICYmCisJCXA0IGFkZCBsYy9maWxlLnR4dCBVQy9maWxlLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBpbml0aWFsIGxjIGFuZCBVQyByZXBvcyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHA0IGlzIGluIGNhc2UtZm9sZGluZyBtb2RlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJPmxjL0ZJTEUuVFhUICYmCisJCXA0IGFkZCBsYy9GSUxFLlRYVCAmJgorCQl0ZXN0X211c3RfZmFpbCBwNCBzdWJtaXQgLWQgIkNhbm5vdCBhZGQgZmlsZSBkaWZmZXJpbmcgb25seSBpbiBjYXNlIiBsYy9GSUxFLlRYVAorCSkKKycKKworIyBDaGVjayB3ZSBjcmVhdGVkIHRoZSByZXBvIHByb3Blcmx5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSBsYyByZXBvIHVzaW5nIGxjIG5hbWUnICcKKwlnaXQgcDQgY2xvbmUgLy9kZXBvdC9sYy8uLi4gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBsYy9maWxlLnR4dCAmJgorCWdpdCBwNCBjbG9uZSAvL2RlcG90L1VDLy4uLiAmJgorCXRlc3RfcGF0aF9pc19maWxlIFVDL2ZpbGUudHh0CisnCisKKyMgVGhlIGNsb25lIHNob3VsZCBmYWlsLCBzaW5jZSB0aGVyZSBpcyBubyByZXBvIGNhbGxlZCBMQywgYnV0IGJlY2F1c2UKKyMgd2UgaGF2ZSBjYXNlLWluc2Vuc2l0aXZlIHA0ZCBlbmFibGVkLCBpdCBhcHBlYXJzIHRvIGdvIGFoZWFkIGFuZCB3b3JrLAorIyBidXQgbGVhdmVzIGFuIGVtcHR5IGdpdCByZXBvIGluIHBsYWNlLgordGVzdF9leHBlY3RfZmFpbHVyZSAnQ2xvbmUgbGMgcmVwbyB1c2luZyB1YyBuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC8vZGVwb3QvTEMvLi4uCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ0Nsb25lIFVDIHJlcG8gd2l0aCBsYyBuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC8vZGVwb3QvdWMvLi4uCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgyMC1naXQtcDQtZWRpdG9yLWhhbmRsaW5nLnNoIGIvdC90OTgyMC1naXQtcDQtZWRpdG9yLWhhbmRsaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhMWJiYTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODIwLWdpdC1wNC1lZGl0b3ItaGFuZGxpbmcuc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBoYW5kbGluZyBvZiBFRElUT1InCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZTEiCisJKQorJworCisjIENoZWNrIHRoYXQgdGhlIFA0RURJVE9SIGFyZ3VtZW50IGNhbiBiZSBnaXZlbiBjb21tYW5kLWxpbmUKKyMgb3B0aW9ucywgd2hpY2ggZ2l0LXA0IHdpbGwgdGhlbiBwYXNzIHRocm91Z2ggdG8gdGhlIHNoZWxsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnRURJVE9SIHdpdGggb3B0aW9ucycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGNoYW5nZSA+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY2hhbmdlIiBmaWxlMSAmJgorCQlQNEVESVRPUj0iOiA+XCIkZ2l0L3RvdWNoZWRcIiAmJiB0ZXN0LXRvb2wgY2htdGltZSArNSIgZ2l0IHA0IHN1Ym1pdCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAiJGdpdC90b3VjaGVkIgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODIxLWdpdC1wNC1wYXRoLXZhcmlhdGlvbnMuc2ggYi90L3Q5ODIxLWdpdC1wNC1wYXRoLXZhcmlhdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWY4MGYxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MjEtZ2l0LXA0LXBhdGgtdmFyaWF0aW9ucy5zaApAQCAtMCwwICsxLDE5NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0Nsb25lIHJlcG9zaXRvcmllcyB3aXRoIHBhdGggY2FzZSB2YXJpYXRpb25zJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQgd2l0aCBjYXNlIGZvbGRpbmcgZW5hYmxlZCcgJworCXN0YXJ0X3A0ZCAtQzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIGEgcmVwbyB3aXRoIHBhdGggY2FzZSB2YXJpYXRpb25zJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCW1rZGlyIC1wIFBhdGgvdG8gJiYKKwkJPlBhdGgvdG8vRmlsZTIudHh0ICYmCisJCXA0IGFkZCBQYXRoL3RvL0ZpbGUyLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlMiIgJiYKKwkJcm0gLXJmIFBhdGggJiYKKworCQlta2RpciAtcCBwYXRoL1RPICYmCisJCT5wYXRoL1RPL2ZpbGUxLnR4dCAmJgorCQlwNCBhZGQgcGF0aC9UTy9maWxlMS50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZTEiICYmCisJCXJtIC1yZiBwYXRoICYmCisKKwkJbWtkaXIgLXAgcGF0aC90byAmJgorCQk+cGF0aC90by9maWxlMy50eHQgJiYKKwkJcDQgYWRkIHBhdGgvdG8vZmlsZTMudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUzIiAmJgorCQlybSAtcmYgcGF0aCAmJgorCisJCW1rZGlyIC1wIHgtb3V0c2lkZS1zcGVjICYmCisJCT54LW91dHNpZGUtc3BlYy9maWxlNC50eHQgJiYKKwkJcDQgYWRkIHgtb3V0c2lkZS1zcGVjL2ZpbGU0LnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlNCIgJiYKKwkJcm0gLXJmIHgtb3V0c2lkZS1zcGVjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByb290JyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIGZhbHNlICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisJCSMgVGhpcyBtZXRob2QgaXMgdXNlZCBpbnN0ZWFkIG9mICJ0ZXN0IC1mIiB0byBlbnN1cmUgdGhlIGNhc2UgaXMKKwkJIyBjaGVja2VkIGV2ZW4gaWYgdGhlIHRlc3QgaXMgZXhlY3V0ZWQgb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMuCisJCSMgQWxsIGZpbGVzIGFyZSB0aGVyZSBhcyBleHBlY3RlZCBhbHRob3VnaCB0aGUgcGF0aCBjYXNlcyBsb29rIHJhbmRvbS4KKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlQYXRoL3RvL0ZpbGUyLnR4dAorCQlwYXRoL1RPL2ZpbGUxLnR4dAorCQlwYXRoL3RvL2ZpbGUzLnR4dAorCQl4LW91dHNpZGUtc3BlYy9maWxlNC50eHQKKwkJRU9GCisJCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHJvb3QgKGlnbm9yZWNhc2UpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIHRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJIyBUaGlzIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQgb2YgInRlc3QgLWYiIHRvIGVuc3VyZSB0aGUgY2FzZSBpcworCQkjIGNoZWNrZWQgZXZlbiBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcy4KKwkJIyBBbGwgZmlsZXMgYXJlIHRoZXJlIGFzIGV4cGVjdGVkIGFsdGhvdWdoIHRoZSBwYXRoIGNhc2VzIGxvb2sgcmFuZG9tLgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCXBhdGgvVE8vRmlsZTIudHh0CisJCXBhdGgvVE8vZmlsZTEudHh0CisJCXBhdGgvVE8vZmlsZTMudHh0CisJCXgtb3V0c2lkZS1zcGVjL2ZpbGU0LnR4dAorCQlFT0YKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcm9vdCBhbmQgaWdub3JlIG9uZSBmaWxlJyAnCisJY2xpZW50X3ZpZXcgXAorCQkiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSItLy9kZXBvdC9wYXRoL1RPL2ZpbGUxLnR4dCAvL2NsaWVudC9wYXRoL1RPL2ZpbGUxLnR4dCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIGZhbHNlICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisJCSMgV2UgaWdub3JlIG9uZSBmaWxlIGluIHRoZSBjbGllbnQgc3BlYyBhbmQgYWxsIHBhdGggY2FzZXMgY2hhbmdlIGZyb20KKwkJIyAiVE8iIHRvICJ0byIhCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJUGF0aC90by9GaWxlMi50eHQKKwkJcGF0aC90by9maWxlMy50eHQKKwkJeC1vdXRzaWRlLXNwZWMvZmlsZTQudHh0CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByb290IGFuZCBpZ25vcmUgb25lIGZpbGUgKGlnbm9yZWNhc2UpJyAnCisJY2xpZW50X3ZpZXcgXAorCQkiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSItLy9kZXBvdC9wYXRoL1RPL2ZpbGUxLnR4dCAvL2NsaWVudC9wYXRoL1RPL2ZpbGUxLnR4dCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIHRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJIyBXZSBpZ25vcmUgb25lIGZpbGUgaW4gdGhlIGNsaWVudCBzcGVjIGFuZCBhbGwgcGF0aCBjYXNlcyBjaGFuZ2UgZnJvbQorCQkjICJUTyIgdG8gInRvIiEKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlQYXRoL3RvL0ZpbGUyLnR4dAorCQlQYXRoL3RvL2ZpbGUzLnR4dAorCQl4LW91dHNpZGUtc3BlYy9maWxlNC50eHQKKwkJRU9GCisJCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHBhdGgnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9QYXRoLy4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSBmYWxzZSAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCXRvL0ZpbGUyLnR4dAorCQlFT0YKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcGF0aCAoaWdub3JlY2FzZSknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9QYXRoLy4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSB0cnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJVE8vRmlsZTIudHh0CisJCVRPL2ZpbGUxLnR4dAorCQlUTy9maWxlMy50eHQKKwkJRU9GCisJCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgSXQgbG9va3MgbGlrZSBQNCBkZXRlcm1pbmVzIHRoZSBwYXRoIGNhc2UgYmFzZWQgb24gdGhlIGZpcnN0IGZpbGUgaW4KKyMgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyLiBQbGVhc2Ugbm90ZSB0aGUgbG93ZXIgY2FzZSAidG8iIGRpcmVjdG9yeSBmb3IgYWxsCisjIGZpbGVzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBhZGRpdGlvbiBvZiAiRmlsZTAudHh0Ii4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FkZCBhIG5ldyBmaWxlIGFuZCBjbG9uZSBwYXRoIHdpdGggbmV3IGZpbGUgKGlnbm9yZWNhc2UpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBQYXRoL3RvICYmCisJCT5QYXRoL3RvL0ZpbGUwLnR4dCAmJgorCQlwNCBhZGQgUGF0aC90by9GaWxlMC50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSIgJiYKKwkJcm0gLXJmIFBhdGgKKwkpICYmCisKKwljbGllbnRfdmlldyAiLy9kZXBvdC9QYXRoLy4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSB0cnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJdG8vRmlsZTAudHh0CisJCXRvL0ZpbGUyLnR4dAorCQl0by9maWxlMS50eHQKKwkJdG8vZmlsZTMudHh0CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MjItZ2l0LXA0LXBhdGgtZW5jb2Rpbmcuc2ggYi90L3Q5ODIyLWdpdC1wNC1wYXRoLWVuY29kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3MmQzOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODIyLWdpdC1wNC1wYXRoLWVuY29kaW5nLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDbG9uZSByZXBvc2l0b3JpZXMgd2l0aCBub24gQVNDSUkgcGF0aHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK1VURjhfRVNDQVBFRD0iYS1cMzAzXDI0NF9vLVwzMDNcMjY2X3UtXDMwM1wyNzQudHh0IgorSVNPODg1OV9FU0NBUEVEPSJhLVwzNDRfby1cMzY2X3UtXDM3NC50eHQiCisKK0lTTzg4NTk9IiQocHJpbnRmICIkSVNPODg1OV9FU0NBUEVEIikiICYmCitlY2hvIGNvbnRlbnQxMjMgPiIkSVNPODg1OSIgJiYKK3JtICIkSVNPODg1OSIgfHwgeworCXNraXBfYWxsPSJmcyBkb2VzIG5vdCBhY2NlcHQgSVNPLTg4NTktMSBmaWxlbmFtZXMiCisJdGVzdF9kb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgYSByZXBvIGNvbnRhaW5pbmcgaXNvODg1OS0xIGVuY29kZWQgcGF0aHMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlJU084ODU5PSIkKHByaW50ZiAiJElTTzg4NTlfRVNDQVBFRCIpIiAmJgorCQllY2hvIGNvbnRlbnQxMjMgPiIkSVNPODg1OSIgJiYKKwkJcDQgYWRkICIkSVNPODg1OSIgJiYKKwkJcDQgc3VibWl0IC1kICJ0ZXN0IGNvbW1pdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ0Nsb25lIGF1dG8tZGV0ZWN0cyBkZXBvdCB3aXRoIGlzbzg4NTktMSBwYXRocycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJVVRGOD0iJChwcmludGYgIiRVVEY4X0VTQ0FQRUQiKSIgJiYKKwkJZWNobyAiJFVURjgiID5leHBlY3QgJiYKKwkJZ2l0IC1jIGNvcmUucXVvdGVwYXRoPWZhbHNlIGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcmVwbyBjb250YWluaW5nIGlzbzg4NTktMSBlbmNvZGVkIHBhdGhzIHdpdGggZ2l0LXA0LnBhdGhFbmNvZGluZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQucGF0aEVuY29kaW5nIGlzbzg4NTktMSAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCQlVVEY4PSIkKHByaW50ZiAiJFVURjhfRVNDQVBFRCIpIiAmJgorCQllY2hvICIkVVRGOCIgPmV4cGVjdCAmJgorCQlnaXQgLWMgY29yZS5xdW90ZXBhdGg9ZmFsc2UgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJZWNobyBjb250ZW50MTIzID5leHBlY3QgJiYKKwkJY2F0ICIkVVRGOCIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEZWxldGUgaXNvODg1OS0xIGVuY29kZWQgcGF0aHMgYW5kIGNsb25lJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJSVNPODg1OT0iJChwcmludGYgIiRJU084ODU5X0VTQ0FQRUQiKSIgJiYKKwkJcDQgZGVsZXRlICIkSVNPODg1OSIgJiYKKwkJcDQgc3VibWl0IC1kICJyZW1vdmUgZmlsZSIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IC1jIGNvcmUucXVvdGVwYXRoPWZhbHNlIGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODIzLWdpdC1wNC1tb2NrLWxmcy5zaCBiL3QvdDk4MjMtZ2l0LXA0LW1vY2stbGZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4Yjc2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODIzLWdpdC1wNC1tb2NrLWxmcy5zaApAQCAtMCwwICsxLDE4OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0Nsb25lIHJlcG9zaXRvcmllcyBhbmQgc3RvcmUgZmlsZXMgaW4gTW9jayBMRlMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgKCkgeworCUZJTEU9IiQxIiAmJgorCUNPTlRFTlQ9IiQyIiAmJgorCWVjaG8gIiRDT05URU5UIiA+ZXhwZWN0X2NvbnRlbnQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJEZJTEUiICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbnRlbnQgIiRGSUxFIgorfQorCit0ZXN0X2ZpbGVfaXNfaW5fbW9ja19sZnMgKCkgeworCUZJTEU9IiQxIiAmJgorCUNPTlRFTlQ9IiQyIiAmJgorCUxPQ0FMX1NUT1JBR0U9Ii5naXQvbW9jay1zdG9yYWdlL2xvY2FsLyRDT05URU5UIiAmJgorCVNFUlZFUl9TVE9SQUdFPSIuZ2l0L21vY2stc3RvcmFnZS9yZW1vdGUvJENPTlRFTlQiICYmCisJZWNobyAicG9pbnRlci0kQ09OVEVOVCIgPmV4cGVjdF9wb2ludGVyICYmCisJZWNobyAiJENPTlRFTlQiID5leHBlY3RfY29udGVudCAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkRklMRSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJExPQ0FMX1NUT1JBR0UiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRTRVJWRVJfU1RPUkFHRSIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfcG9pbnRlciAiJEZJTEUiICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbnRlbnQgIiRMT0NBTF9TVE9SQUdFIiAmJgorCXRlc3RfY21wIGV4cGVjdF9jb250ZW50ICIkU0VSVkVSX1NUT1JBR0UiCit9CisKK3Rlc3RfZmlsZV9pc19kZWxldGVkX2luX21vY2tfbGZzICgpIHsKKwlGSUxFPSIkMSIgJiYKKwlDT05URU5UPSIkMiIgJiYKKwlMT0NBTF9TVE9SQUdFPSIuZ2l0L21vY2stc3RvcmFnZS9sb2NhbC8kQ09OVEVOVCIgJiYKKwlTRVJWRVJfU1RPUkFHRT0iLmdpdC9tb2NrLXN0b3JhZ2UvcmVtb3RlLyRDT05URU5UIiAmJgorCWVjaG8gInBvaW50ZXItJENPTlRFTlQiID5leHBlY3RfcG9pbnRlciAmJgorCWVjaG8gIiRDT05URU5UIiA+ZXhwZWN0X2NvbnRlbnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEZJTEUiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRMT0NBTF9TVE9SQUdFIiAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkU0VSVkVSX1NUT1JBR0UiICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbnRlbnQgIiRMT0NBTF9TVE9SQUdFIiAmJgorCXRlc3RfY21wIGV4cGVjdF9jb250ZW50ICIkU0VSVkVSX1NUT1JBR0UiCit9CisKK3Rlc3RfZmlsZV9jb3VudF9pbl9kaXIgKCkgeworCURJUj0iJDEiICYmCisJRVhQRUNURURfQ09VTlQ9IiQyIiAmJgorCWZpbmQgIiRESVIiIC10eXBlIGYgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICRFWFBFQ1RFRF9DT1VOVCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NyZWF0ZSByZXBvIHdpdGggYmluYXJ5IGZpbGVzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCWVjaG8gImNvbnRlbnQgMSB0eHQgMjMgYnl0ZXMiID5maWxlMS50eHQgJiYKKwkJcDQgYWRkIGZpbGUxLnR4dCAmJgorCQllY2hvICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiID5maWxlMi5kYXQgJiYKKwkJcDQgYWRkIGZpbGUyLmRhdCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCB0ZXh0IGFuZCBiaW5hcnkgZmlsZSIgJiYKKworCQlta2RpciAicGF0aCB3aXRoIHNwYWNlcyIgJiYKKwkJZWNobyAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiA+InBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAmJgorCQlwNCBhZGQgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBhbm90aGVyIGJpbmFyeSBmaWxlIHdpdGggc2FtZSBjb250ZW50IGFuZCBzcGFjZXMgaW4gcGF0aCIgJiYKKworCQllY2hvICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiA+ZmlsZTQuYmluICYmCisJCXA0IGFkZCBmaWxlNC5iaW4gJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgYW5vdGhlciBiaW5hcnkgZmlsZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3RvcmUgZmlsZXMgaW4gTW9jayBMRlMgYmFzZWQgb24gc2l6ZSAoPjI0IGJ5dGVzKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIE1vY2tMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkIDI0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVB1c2ggVHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCQl0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzIGZpbGUxLnR4dCAiY29udGVudCAxIHR4dCAyMyBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX2luX21vY2tfbGZzIGZpbGUyLmRhdCAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfaW5fbW9ja19sZnMgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfaW5fbW9ja19sZnMgZmlsZTQuYmluICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiAmJgorCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbW9jay1zdG9yYWdlL2xvY2FsIiAyICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbW9jay1zdG9yYWdlL3JlbW90ZSIgMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3RvcmUgZmlsZXMgaW4gTW9jayBMRlMgYmFzZWQgb24gZXh0ZW5zaW9uIChkYXQpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gTW9ja0xGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVFeHRlbnNpb25zIGRhdCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVQdXNoIFRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyBmaWxlMS50eHQgImNvbnRlbnQgMSB0eHQgMjMgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19pbl9tb2NrX2xmcyBmaWxlMi5kYXQgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgZmlsZTQuYmluICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiAmJgorCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbW9jay1zdG9yYWdlL2xvY2FsIiAxICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbW9jay1zdG9yYWdlL3JlbW90ZSIgMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3RvcmUgZmlsZXMgaW4gTW9jayBMRlMgYmFzZWQgb24gZXh0ZW5zaW9uIChkYXQpIGFuZCB1c2UgZ2l0IHA0IHN5bmMgYW5kIG5vIGNsaWVudCBzcGVjJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBNb2NrTEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZUV4dGVuc2lvbnMgZGF0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVB1c2ggVHJ1ZSAmJgorCQlnaXQgcDQgc3luYyAvL2RlcG90ICYmCisJCWdpdCBjaGVja291dCBwNC9tYXN0ZXIgJiYKKworCQl0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzIGZpbGUxLnR4dCAiY29udGVudCAxIHR4dCAyMyBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX2luX21vY2tfbGZzIGZpbGUyLmRhdCAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzICJwYXRoIHdpdGggc3BhY2VzL2ZpbGUzLmJpbiIgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyBmaWxlNC5iaW4gImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiICYmCisKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9tb2NrLXN0b3JhZ2UvbG9jYWwiIDEgJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9tb2NrLXN0b3JhZ2UvcmVtb3RlIiAxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW1vdmUgZmlsZSBmcm9tIHJlcG8gYW5kIHN0b3JlIGZpbGVzIGluIE1vY2sgTEZTIGJhc2VkIG9uIHNpemUgKD4yNCBieXRlcyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGRlbGV0ZSBmaWxlNC5iaW4gJiYKKwkJcDQgc3VibWl0IC1kICJSZW1vdmUgZmlsZSIKKwkpICYmCisKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBNb2NrTEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCAyNCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVQdXNoIFRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyBmaWxlMS50eHQgImNvbnRlbnQgMSB0eHQgMjMgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19pbl9tb2NrX2xmcyBmaWxlMi5kYXQgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX2luX21vY2tfbGZzICJwYXRoIHdpdGggc3BhY2VzL2ZpbGUzLmJpbiIgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX2RlbGV0ZWRfaW5fbW9ja19sZnMgZmlsZTQuYmluICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiAmJgorCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbW9jay1zdG9yYWdlL2xvY2FsIiAyICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbW9jay1zdG9yYWdlL3JlbW90ZSIgMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUnVuIGdpdCBwNCBzdWJtaXQgaW4gcmVwbyBjb25maWd1cmVkIHdpdGggbGFyZ2UgZmlsZSBzeXN0ZW0nICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBNb2NrTEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCAyNCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVQdXNoIFRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODI0LWdpdC1wNC1naXQtbGZzLnNoIGIvdC90OTgyNC1naXQtcDQtZ2l0LWxmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMjhkYmJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyNC1naXQtcDQtZ2l0LWxmcy5zaApAQCAtMCwwICsxLDI5MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0Nsb25lIHJlcG9zaXRvcmllcyBhbmQgc3RvcmUgZmlsZXMgaW4gR2l0IExGUycKKworLiAuL2xpYi1naXQtcDQuc2gKKworZ2l0IGxmcyBoZWxwID4vZGV2L251bGwgMj4mMSB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBwNCBHaXQgTEZTIHRlc3RzOyBHaXQgTEZTIG5vdCBmb3VuZCcKKwl0ZXN0X2RvbmUKK30KKwordGVzdF9maWxlX2luX2xmcyAoKSB7CisJRklMRT0iJDEiICYmCisJU0laRT0iJDIiICYmCisJRVhQRUNURURfQ09OVEVOVD0iJDMiICYmCisJc2VkIC1uICcxLDEgcCcgIiRGSUxFIiB8IGdyZXAgIl52ZXJzaW9uICIgJiYKKwlzZWQgLW4gJzIsMiBwJyAiJEZJTEUiIHwgZ3JlcCAiXm9pZCAiICYmCisJc2VkIC1uICczLDMgcCcgIiRGSUxFIiB8IGdyZXAgIl5zaXplICIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzICIkRklMRSIgJiYKKwljYXQgIiRGSUxFIiB8IGdyZXAgInNpemUgJFNJWkUiICYmCisJSEFTSD0kKGNhdCAiJEZJTEUiIHwgZ3JlcCAib2lkIHNoYTI1NjoiIHwgc2VkIC1lICJzL29pZCBzaGEyNTY6Ly9nIikgJiYKKwlMRlNfRklMRT0iLmdpdC9sZnMvb2JqZWN0cy8kKGVjaG8gIiRIQVNIIiB8IGN1dCAtYzEtMikvJChlY2hvICIkSEFTSCIgfCBjdXQgLWMzLTQpLyRIQVNIIiAmJgorCWVjaG8gJEVYUEVDVEVEX0NPTlRFTlQgPmV4cGVjdCAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkRklMRSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJExGU19GSUxFIiAmJgorCXRlc3RfY21wIGV4cGVjdCAiJExGU19GSUxFIgorfQorCit0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICgpIHsKKwlESVI9IiQxIiAmJgorCUVYUEVDVEVEX0NPVU5UPSIkMiIgJiYKKwlmaW5kICIkRElSIiAtdHlwZSBmID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkRVhQRUNURURfQ09VTlQgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgcmVwbyB3aXRoIGJpbmFyeSBmaWxlcycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKworCQk+ZmlsZTAuZGF0ICYmCisJCXA0IGFkZCBmaWxlMC5kYXQgJiYKKwkJZWNobyAiY29udGVudCAxIHR4dCAyMyBieXRlcyIgPmZpbGUxLnR4dCAmJgorCQlwNCBhZGQgZmlsZTEudHh0ICYmCisJCWVjaG8gImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgPmZpbGUyLmRhdCAmJgorCQlwNCBhZGQgZmlsZTIuZGF0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIHRleHQgYW5kIGJpbmFyeSBmaWxlIiAmJgorCisJCW1rZGlyICJwYXRoIHdpdGggc3BhY2VzIiAmJgorCQllY2hvICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiID4icGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iICYmCisJCXA0IGFkZCAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGFub3RoZXIgYmluYXJ5IGZpbGUgd2l0aCBzYW1lIGNvbnRlbnQgYW5kIHNwYWNlcyBpbiBwYXRoIiAmJgorCisJCWVjaG8gImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiID5maWxlNC5iaW4gJiYKKwkJcDQgYWRkIGZpbGU0LmJpbiAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBhbm90aGVyIGJpbmFyeSBmaWxlIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdG9yZSBmaWxlcyBpbiBMRlMgYmFzZWQgb24gc2l6ZSAoPjI0IGJ5dGVzKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIEdpdExGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlMi5kYXQgMjUgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2luX2xmcyAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iIDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTQuYmluIDI2ICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiAmJgorCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbGZzL29iamVjdHMiIDIgJiYKKworCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJL2ZpbGUyLmRhdCBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQkvZmlsZTQuYmluIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCS9wYXRoW1s6c3BhY2U6XV13aXRoW1s6c3BhY2U6XV1zcGFjZXMvZmlsZTMuYmluIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1N0b3JlIGZpbGVzIGluIExGUyBiYXNlZCBvbiBzaXplICg+MjUgYnl0ZXMpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gR2l0TEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCAyNSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCQl0ZXN0X2ZpbGVfaW5fbGZzIGZpbGU0LmJpbiAyNiAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9sZnMvb2JqZWN0cyIgMSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKworCQkjCisJCSMgR2l0IExGUyAoc2VlIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tLykKKwkJIworCQkvZmlsZTQuYmluIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1N0b3JlIGZpbGVzIGluIExGUyBiYXNlZCBvbiBleHRlbnNpb24gKGRhdCknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucyBkYXQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlMi5kYXQgMjUgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9sZnMvb2JqZWN0cyIgMSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKworCQkjCisJCSMgR2l0IExGUyAoc2VlIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tLykKKwkJIworCQkqLmRhdCBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdG9yZSBmaWxlcyBpbiBMRlMgYmFzZWQgb24gc2l6ZSAoPjI1IGJ5dGVzKSBhbmQgZXh0ZW5zaW9uIChkYXQpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gR2l0TEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZUV4dGVuc2lvbnMgZGF0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCAyNSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCQl0ZXN0X2ZpbGVfaW5fbGZzIGZpbGUyLmRhdCAyNSAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaW5fbGZzIGZpbGU0LmJpbiAyNiAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9sZnMvb2JqZWN0cyIgMiAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKworCQkjCisJCSMgR2l0IExGUyAoc2VlIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tLykKKwkJIworCQkqLmRhdCBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorCQkvZmlsZTQuYmluIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbW92ZSBmaWxlIGZyb20gcmVwbyBhbmQgc3RvcmUgZmlsZXMgaW4gTEZTIGJhc2VkIG9uIHNpemUgKD4yNCBieXRlcyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGRlbGV0ZSBmaWxlNC5iaW4gJiYKKwkJcDQgc3VibWl0IC1kICJSZW1vdmUgZmlsZSIKKwkpICYmCisKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkIDI0ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTIuZGF0IDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pbl9sZnMgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAyNSAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNC5iaW4gJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9sZnMvb2JqZWN0cyIgMiAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKworCQkjCisJCSMgR2l0IExGUyAoc2VlIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tLykKKwkJIworCQkvZmlsZTIuZGF0IGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCS9wYXRoW1s6c3BhY2U6XV13aXRoW1s6c3BhY2U6XV1zcGFjZXMvZmlsZTMuYmluIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FkZCAuZ2l0YXR0cmlidXRlcyBhbmQgc3RvcmUgZmlsZXMgaW4gTEZTIGJhc2VkIG9uIHNpemUgKD4yNCBieXRlcyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gIioudHh0IHRleHQiID4uZ2l0YXR0cmlidXRlcyAmJgorCQlwNCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgLmdpdGF0dHJpYnV0ZXMiCisJKSAmJgorCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gR2l0TEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZCAyNCAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCQl0ZXN0X2ZpbGVfaW5fbGZzIGZpbGUyLmRhdCAyNSAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaW5fbGZzICJwYXRoIHdpdGggc3BhY2VzL2ZpbGUzLmJpbiIgMjUgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTQuYmluICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbGZzL29iamVjdHMiIDIgJiYKKworCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCSoudHh0IHRleHQKKworCQkjCisJCSMgR2l0IExGUyAoc2VlIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tLykKKwkJIworCQkvZmlsZTIuZGF0IGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCS9wYXRoW1s6c3BhY2U6XV13aXRoW1s6c3BhY2U6XV1zcGFjZXMvZmlsZTMuYmluIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FkZCBiaWcgZmlsZXMgdG8gcmVwbyBhbmQgc3RvcmUgZmlsZXMgaW4gTEZTIGJhc2VkIG9uIGNvbXByZXNzZWQgc2l6ZSAoPjI4IGJ5dGVzKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyAiY29udGVudCA1IGJpbiA0MCBieXRlcyBYWFhYWFhYWFhYWFhYWFhYIiA+ZmlsZTUuYmluICYmCisJCXA0IGFkZCBmaWxlNS5iaW4gJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSB3aXRoIHNtYWxsIGZvb3RwcmludCBhZnRlciBjb21wcmVzc2lvbiIgJiYKKworCQllY2hvICJjb250ZW50IDYgYmluIDM5IGJ5dGVzIFhYWFhYWVlZWVlaWlpaWiIgPmZpbGU2LmJpbiAmJgorCQlwNCBhZGQgZmlsZTYuYmluICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgd2l0aCBsYXJnZSBmb290cHJpbnQgYWZ0ZXIgY29tcHJlc3Npb24iCisJKSAmJgorCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gR2l0TEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZUNvbXByZXNzZWRUaHJlc2hvbGQgMjggJiYKKwkJIyBXZSBvbmx5IGltcG9ydCBIRUFEIGhlcmUgKCJAYWxsIiBpcyBtaXNzaW5nISkKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKworCQl0ZXN0X2ZpbGVfaW5fbGZzIGZpbGU2LmJpbiAzOSAiY29udGVudCA2IGJpbiAzOSBieXRlcyBYWFhYWFlZWVlZWlpaWloiICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbGZzL29iamVjdHMiIDEgJiYKKworCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCSoudHh0IHRleHQKKworCQkjCisJCSMgR2l0IExGUyAoc2VlIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tLykKKwkJIworCQkvZmlsZTYuYmluIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgyNS1naXQtcDQtaGFuZGxlLXV0ZjE2LXdpdGhvdXQtYm9tLnNoIGIvdC90OTgyNS1naXQtcDQtaGFuZGxlLXV0ZjE2LXdpdGhvdXQtYm9tLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwNDlmZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODI1LWdpdC1wNC1oYW5kbGUtdXRmMTYtd2l0aG91dC1ib20uc2gKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBoYW5kbGluZyBvZiBVVEYtMTYgZmlsZXMgd2l0aG91dCBCT00nCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK1VURjE2PSJcMjI3XDAwMFwyMjdcMDAwIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCB3aXRoIFVURi0xNiBlbmNvZGVkIGZpbGUgYW5kIGFydGlmaWNpYWxseSByZW1vdmUgQk9NJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcHJpbnRmICIkVVRGMTYiID5maWxlMSAmJgorCQlwNCBhZGQgLXQgdXRmMTYgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMSIKKwkpICYmCisKKwkoCisJCWNkIGRiICYmCisJCXA0ZCAtamMgJiYKKwkJIyBQNEQgYXV0b21hdGljYWxseSBhZGRzIGEgQk9NLiBSZW1vdmUgaXQgaGVyZSB0byBtYWtlIHRoZSBmaWxlIGludmFsaWQuCisJCXNlZCAtZSAiXCRkIiBkZXBvdC9maWxlMSx2ID5kZXBvdC9maWxlMSx2Lm5ldyAmJgorCQltdiBkZXBvdC9maWxlMSx2Lm5ldyBkZXBvdC9maWxlMSx2ICYmCisJCXByaW50ZiAiQCRVVEYxNkAiID4+ZGVwb3QvZmlsZTEsdiAmJgorCQlwNGQgLWpyRiBjaGVja3BvaW50LjEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGRlcG90IHdpdGggaW52YWxpZCBVVEYtMTYgZmlsZSBpbiB2ZXJib3NlIG1vZGUnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLXZlcmJvc2UgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXByaW50ZiAiJFVURjE2IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wX2JpbiBleHBlY3QgZmlsZTEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2Nsb25lIGRlcG90IHdpdGggaW52YWxpZCBVVEYtMTYgZmlsZSBpbiBub24tdmVyYm9zZSBtb2RlJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MjYtZ2l0LXA0LWtlZXAtZW1wdHktY29tbWl0cy5zaCBiL3QvdDk4MjYtZ2l0LXA0LWtlZXAtZW1wdHktY29tbWl0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDY0YWZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyNi1naXQtcDQta2VlcC1lbXB0eS1jb21taXRzLnNoCkBAIC0wLDAgKzEsMTMwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ2xvbmUgcmVwb3NpdG9yaWVzIGFuZCBrZWVwIGVtcHR5IGNvbW1pdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgYSByZXBvJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCW1rZGlyIC1wIHN1YmRpciAmJgorCisJCT5zdWJkaXIvZmlsZTEudHh0ICYmCisJCXA0IGFkZCBzdWJkaXIvZmlsZTEudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgMSIgJiYKKworCQk+ZmlsZTIudHh0ICYmCisJCXA0IGFkZCBmaWxlMi50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSAyIiAmJgorCisJCT5zdWJkaXIvZmlsZTMudHh0ICYmCisJCXA0IGFkZCBzdWJkaXIvZmlsZTMudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgMyIgJiYKKworCQk+ZmlsZTQudHh0ICYmCisJCXA0IGFkZCBmaWxlNC50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSA0IiAmJgorCisJCXA0IGRlbGV0ZSBzdWJkaXIvZmlsZTMudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiUmVtb3ZlIGZpbGUgMyIgJiYKKworCQlwNCBkZWxldGUgZmlsZTQudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiUmVtb3ZlIGZpbGUgNCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHJlcG8gcm9vdCBwYXRoIHdpdGggYWxsIGhpc3RvcnknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJUmVtb3ZlIGZpbGUgNAorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDZdCisKKwkJUmVtb3ZlIGZpbGUgMworCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDVdCisKKwkJQWRkIGZpbGUgNAorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDRdCisKKwkJQWRkIGZpbGUgMworCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDNdCisKKwkJQWRkIGZpbGUgMgorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDJdCisKKwkJQWRkIGZpbGUgMQorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDFdCisKKwkJRU9GCisJCWdpdCBsb2cgLS1mb3JtYXQ9JUIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByZXBvIHN1YmRpciB3aXRoIGFsbCBoaXN0b3J5IGJ1dCBrZWVwIGVtcHR5IGNvbW1pdHMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9zdWJkaXIvLi4uIC8vY2xpZW50L3N1YmRpci8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5rZWVwRW1wdHlDb21taXRzIHRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJUmVtb3ZlIGZpbGUgNAorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDZdCisKKwkJUmVtb3ZlIGZpbGUgMworCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDVdCisKKwkJQWRkIGZpbGUgNAorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDRdCisKKwkJQWRkIGZpbGUgMworCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDNdCisKKwkJQWRkIGZpbGUgMgorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDJdCisKKwkJQWRkIGZpbGUgMQorCQlbZ2l0LXA0OiBkZXBvdC1wYXRocyA9ICIvL2RlcG90LyI6IGNoYW5nZSA9IDFdCisKKwkJRU9GCisJCWdpdCBsb2cgLS1mb3JtYXQ9JUIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByZXBvIHN1YmRpciB3aXRoIGFsbCBoaXN0b3J5JyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3Qvc3ViZGlyLy4uLiAvL2NsaWVudC9zdWJkaXIvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC0tdmVyYm9zZSAvL2RlcG90QGFsbCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCVJlbW92ZSBmaWxlIDMKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSA1XQorCisJCUFkZCBmaWxlIDMKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSAzXQorCisJCUFkZCBmaWxlIDEKKwkJW2dpdC1wNDogZGVwb3QtcGF0aHMgPSAiLy9kZXBvdC8iOiBjaGFuZ2UgPSAxXQorCisJCUVPRgorCQlnaXQgbG9nIC0tZm9ybWF0PSVCID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODI3LWdpdC1wNC1jaGFuZ2UtZmlsZXR5cGUuc2ggYi90L3Q5ODI3LWdpdC1wNC1jaGFuZ2UtZmlsZXR5cGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDM2NzBiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MjctZ2l0LXA0LWNoYW5nZS1maWxldHlwZS5zaApAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHN1cHBvcnQgZm9yIGZpbGUgdHlwZSBjaGFuZ2UnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZmlsZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJY2F0ID5maWxlMSA8PC1FT0YgJiYKKwkJdGV4dCB3aXRob3V0IGFueSBmdW5ueSBzdWJzdGl0dXRpb24gYnVzaW5lc3MKKwkJRU9GCisJCWNhdCA+ZmlsZTIgPDwtRU9GICYmCisJCXNlY29uZCBmaWxlIHdob3NlIHR5cGUgd2lsbCBjaGFuZ2UKKwkJRU9GCisJCXA0IGFkZCBmaWxlMSBmaWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBmaWxlcyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NoYW5nZSBmaWxlIHRvIHN5bWJvbGljIGxpbmsnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKworCQlybSBmaWxlMiAmJgorCQlsbiAtcyBmaWxlMSBmaWxlMiAmJgorCQlnaXQgYWRkIGZpbGUyICYmCisJCWdpdCBjb21taXQgLW0gInN5bWxpbmsgZmlsZTEgdG8gZmlsZTIiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAtbSAxIC8vZGVwb3QvZmlsZTIgPmZpbGVsb2cgJiYKKwkJZ3JlcCAiKHN5bWxpbmspIiBmaWxlbG9nCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjaGFuZ2Ugc3ltYm9saWMgbGluayB0byBmaWxlJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisKKwkJcm0gZmlsZTIgJiYKKwkJY2F0ID5maWxlMiA8PC1FT0YgJiYKKwkJVGhpcyBpcyBhbm90aGVyIGNvbnRlbnQgZm9yIHRoZSBzZWNvbmQgZmlsZS4KKwkJRU9GCisJCWdpdCBhZGQgZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmUtd3JpdGUgZmlsZTIiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgZmlsZWxvZyAtbSAxIC8vZGVwb3QvZmlsZTIgPmZpbGVsb2cgJiYKKwkJZ3JlcCAiKHRleHQpIiBmaWxlbG9nCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MjgtZ2l0LXA0LW1hcC11c2VyLnNoIGIvdC90OTgyOC1naXQtcDQtbWFwLXVzZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2E2YzI5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MjgtZ2l0LXA0LW1hcC11c2VyLnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDbG9uZSByZXBvc2l0b3JpZXMgYW5kIG1hcCB1c2VycycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NyZWF0ZSBhIHJlcG8gd2l0aCBkaWZmZXJlbnQgdXNlcnMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisKKwkJPmF1dGhvci50eHQgJiYKKwkJcDQgYWRkIGF1dGhvci50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSBhdXRob3JcXG4iICYmCisKKwkJUDRVU0VSPW1tYXggJiYKKwkJPm1heC50eHQgJiYKKwkJcDQgYWRkIG1heC50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSBtYXgiICYmCisKKwkJUDRVU0VSPWVyaSAmJgorCQk+bW9yaXR6LnR4dCAmJgorCQlwNCBhZGQgbW9yaXR6LnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlIG1vcml0eiIgJiYKKworCQlQNFVTRVI9bm8gJiYKKwkJPm5vYm9keS50eHQgJiYKKwkJcDQgYWRkIG5vYm9keS50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSBub2JvZHkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByZXBvIHJvb3QgcGF0aCB3aXRoIGFsbCBoaXN0b3J5JyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0Lm1hcFVzZXIgIm1tYXggPSBNYXggTXVzdGVybWFuICAgPG1heEBleGFtcGxlLmNvbT4gIiAgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQubWFwVXNlciAiICBlcmk9RXJpa2EgTXVzdGVybWFuIDxlcmlrYUBleGFtcGxlLmNvbT4iICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCQlubyA8bm9AY2xpZW50PgorCQkJRXJpa2EgTXVzdGVybWFuIDxlcmlrYUBleGFtcGxlLmNvbT4KKwkJCU1heCBNdXN0ZXJtYW4gPG1heEBleGFtcGxlLmNvbT4KKwkJCURyLiBhdXRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRU9GCisJCWdpdCBsb2cgLS1mb3JtYXQ9IiVhbiA8JWFlPiIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MjktZ2l0LXA0LWpvYnMuc2ggYi90L3Q5ODI5LWdpdC1wNC1qb2JzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4Y2ZiMWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODI5LWdpdC1wNC1qb2JzLnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgcmV0cmlldmUgam9iIGluZm8nCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcDQgam9icycgJworCSgKKwkJcDRfYWRkX2pvYiBURVNUSk9CLUEgJiYKKwkJcDRfYWRkX2pvYiBURVNUSk9CLUIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwNCBmaWxlcycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlIDEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBsb2cgbWVzc2FnZSBvZiBjaGFuZ2VsaXN0IHdpdGggbm8gam9icycgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlBZGQgZmlsZSAxCisJCVtnaXQtcDQ6IGRlcG90LXBhdGhzID0gIi8vZGVwb3QvIjogY2hhbmdlID0gMV0KKworCQlFT0YKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lQiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBURVNUSk9CLUEgdG8gY2hhbmdlIDEnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBmaXggLWMgMSBURVNUSk9CLUEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGxvZyBtZXNzYWdlIG9mIGNoYW5nZWxpc3Qgd2l0aCBvbmUgam9iJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCUFkZCBmaWxlIDEKKwkJSm9iczogVEVTVEpPQi1BCisJCVtnaXQtcDQ6IGRlcG90LXBhdGhzID0gIi8vZGVwb3QvIjogY2hhbmdlID0gMV0KKworCQlFT0YKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lQiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBURVNUSk9CLUIgdG8gY2hhbmdlIDEnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBmaXggLWMgMSBURVNUSk9CLUIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGxvZyBtZXNzYWdlIG9mIGNoYW5nZWxpc3Qgd2l0aCBtb3JlIGpvYnMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJQWRkIGZpbGUgMQorCQlKb2JzOiBURVNUSk9CLUEgVEVTVEpPQi1CCisJCVtnaXQtcDQ6IGRlcG90LXBhdGhzID0gIi8vZGVwb3QvIjogY2hhbmdlID0gMV0KKworCQlFT0YKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lQiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgzMC1naXQtcDQtc3ltbGluay1kaXIuc2ggYi90L3Q5ODMwLWdpdC1wNC1zeW1saW5rLWRpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZmI2OTYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgzMC1naXQtcDQtc3ltbGluay1kaXIuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBzeW1saW5rZWQgZGlyZWN0b3JpZXMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1saW5rZWQgZGlyZWN0b3J5JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJOiA+Zmlyc3RfZmlsZS50ICYmCisJCXA0IGFkZCBmaXJzdF9maWxlLnQgJiYKKwkJcDQgc3VibWl0IC1kICJmaXJzdCBjaGFuZ2UiCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3QgIiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlta2RpciAtcCBzb21lL3N1Yi9kaXJlY3RvcnkgJiYKKwkJbWtkaXIgLXAgb3RoZXIvc3ViZGlyMiAmJgorCQk6ID4gb3RoZXIvc3ViZGlyMi9maWxlLnQgJiYKKwkJKGNkIHNvbWUvc3ViL2RpcmVjdG9yeSAmJiBsbiAtcyAuLi8uLi8uLi9vdGhlci9zdWJkaXIyIC4pICYmCisJCWdpdCBhZGQgc29tZSBvdGhlciAmJgorCQlnaXQgY29tbWl0IC1tICJzeW1saW5rcyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC12CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJdGVzdCAtTCBzb21lL3N1Yi9kaXJlY3Rvcnkvc3ViZGlyMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBzb21lL3N1Yi9kaXJlY3Rvcnkvc3ViZGlyMi9maWxlLnQKKwkpCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODMxLWdpdC1wNC10cmlnZ2Vycy5zaCBiL3QvdDk4MzEtZ2l0LXA0LXRyaWdnZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3NDNjYTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODMxLWdpdC1wNC10cmlnZ2Vycy5zaApAQCAtMCwwICsxLDk5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHdpdGggc2VydmVyIHRyaWdnZXJzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIiAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZXh0cmEgaW5mbyBsaW5lcyBmcm9tIHZlcmJvc2UgcDQgdHJpZ2dlcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJcDQgdHJpZ2dlcnMgLWkgPDwtRU9GCisJCVRyaWdnZXJzOiBwNHRyaWdnZXJ0ZXN0LWNvbW1hbmQgY29tbWFuZCBwcmUtdXNlci1jaGFuZ2UgImVjaG8gdmVyYm9zZSB0cmlnZ2VyIgorCQlFT0YKKwkpICYmCisJKAorCQlwNCBjaGFuZ2UgLW8gfCAgZ3JlcCAtcyAidmVyYm9zZSB0cmlnZ2VyIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L0BhbGwgJiYKKwkoCisJCXA0IHRyaWdnZXJzIC1pIDw8LUVPRgorCQlUcmlnZ2VyczoKKwkJRU9GCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgd2l0aCBleHRyYSBpbmZvIGxpbmVzIGZyb20gdmVyYm9zZSBwNCB0cmlnZ2VyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMyA+ZmlsZTMgJiYKKwkJcDQgYWRkIGZpbGUzICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDMiCisJKSAmJgorCSgKKwkJcDQgdHJpZ2dlcnMgLWkgPDwtRU9GCisJCVRyaWdnZXJzOiBwNHRyaWdnZXJ0ZXN0LWNvbW1hbmQgY29tbWFuZCBwcmUtdXNlci1kZXNjcmliZSAiZWNobyB2ZXJib3NlIHRyaWdnZXIiCisJCUVPRgorCSkgJiYKKwkoCisJCXA0IGRlc2NyaWJlIDEgfCAgZ3JlcCAtcyAidmVyYm9zZSB0cmlnZ2VyIgorCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L0BhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYworCSkmJgorCSgKKwkJcDQgdHJpZ2dlcnMgLWkgPDwtRU9GCisJCVRyaWdnZXJzOgorCQlFT0YKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBkZXNjcmlwdGlvbiB3aXRoIGV4dHJhIGluZm8gbGluZXMgZnJvbSB2ZXJib3NlIHA0IGNoYW5nZSB0cmlnZ2VyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQlwNCB0cmlnZ2VycyAtaSA8PC1FT0YKKwkJVHJpZ2dlcnM6IHA0dHJpZ2dlcnRlc3QtY29tbWFuZCBjb21tYW5kIHByZS11c2VyLWNoYW5nZSAiZWNobyB2ZXJib3NlIHRyaWdnZXIiCisJCUVPRgorCSkgJiYKKwkoCisJCXA0IGNoYW5nZSAtbyB8ICBncmVwIC1zICJ2ZXJib3NlIHRyaWdnZXIiCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWVjaG8gZmlsZTQgPmZpbGU0ICYmCisJCWdpdCBhZGQgZmlsZTQgJiYKKwkJZ2l0IGNvbW1pdCAtbSBmaWxlNCAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJcDQgdHJpZ2dlcnMgLWkgPDwtRU9GCisJCVRyaWdnZXJzOgorCQlFT0YKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgzMi11bnNoZWx2ZS5zaCBiL3QvdDk4MzItdW5zaGVsdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTkyNzZjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MzItdW5zaGVsdmUuc2gKQEAgLTAsMCArMSwxODQgQEAKKyMhL2Jpbi9zaAorCitsYXN0X3NoZWx2ZWRfY2hhbmdlICgpIHsKKwlwNCBjaGFuZ2VzIC1zIHNoZWx2ZWQgLW0xIHwgY3V0IC1kICIgIiAtZiAyCit9CisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB1bnNoZWx2ZScKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMSIgJiYKKwkJOiA+ZmlsZV90b19kZWxldGUgJiYKKwkJOiA+ZmlsZV90b19tb3ZlICYmCisJCXA0IGFkZCBmaWxlX3RvX2RlbGV0ZSAmJgorCQlwNCBhZGQgZmlsZV90b19tb3ZlICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGVzIHRvIGRlbGV0ZSIgJiYKKwkJZWNobyBmaWxlX3RvX2ludGVncmF0ZSA+ZmlsZV90b19pbnRlZ3JhdGUgJiYKKwkJcDQgYWRkIGZpbGVfdG9faW50ZWdyYXRlICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGUgdG8gaW50ZWdyYXRlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBjbG9uZScgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvQGFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc2hlbHZlZCBjaGFuZ2VsaXN0JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgZWRpdCBmaWxlMSAmJgorCQllY2hvICJhIGNoYW5nZSIgPj5maWxlMSAmJgorCQllY2hvICJuZXcgZmlsZSIgPmZpbGUyICYmCisJCXA0IGFkZCBmaWxlMiAmJgorCQlwNCBkZWxldGUgZmlsZV90b19kZWxldGUgJiYKKwkJcDQgZWRpdCBmaWxlX3RvX21vdmUgJiYKKwkJcDQgbW92ZSBmaWxlX3RvX21vdmUgbW92ZWRfZmlsZSAmJgorCQlwNCBpbnRlZ3JhdGUgZmlsZV90b19pbnRlZ3JhdGUgaW50ZWdyYXRlZF9maWxlICYmCisJCXA0IG9wZW5lZCAmJgorCQlwNCBzaGVsdmUgLWkgPDxFT0YKK0NoYW5nZTogbmV3CitEZXNjcmlwdGlvbjoKKwlUZXN0IGNvbW1pdAorCisJRnVydGhlciBkZXNjcmlwdGlvbgorRmlsZXM6CisJLy9kZXBvdC9maWxlMQorCS8vZGVwb3QvZmlsZTIKKwkvL2RlcG90L2ZpbGVfdG9fZGVsZXRlCisJLy9kZXBvdC9maWxlX3RvX21vdmUKKwkvL2RlcG90L21vdmVkX2ZpbGUKKwkvL2RlcG90L2ludGVncmF0ZWRfZmlsZQorRU9GCisKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJY2hhbmdlPSQobGFzdF9zaGVsdmVkX2NoYW5nZSkgJiYKKwkJZ2l0IHA0IHVuc2hlbHZlICRjaGFuZ2UgJiYKKwkJZ2l0IHNob3cgcmVmcy9yZW1vdGVzL3A0LXVuc2hlbHZlZC8kY2hhbmdlIHwgZ3JlcCAtcSAiRnVydGhlciBkZXNjcmlwdGlvbiIgJiYKKwkJZ2l0IGNoZXJyeS1waWNrIHJlZnMvcmVtb3Rlcy9wNC11bnNoZWx2ZWQvJGNoYW5nZSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X2NtcCBmaWxlMSAiJGNsaSIvZmlsZTEgJiYKKwkJdGVzdF9jbXAgZmlsZTIgIiRjbGkiL2ZpbGUyICYmCisJCXRlc3RfY21wIGZpbGVfdG9faW50ZWdyYXRlICIkY2xpIi9pbnRlZ3JhdGVkX2ZpbGUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZV90b19kZWxldGUgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZV90b19tb3ZlICYmCisJCXRlc3RfcGF0aF9pc19maWxlIG1vdmVkX2ZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaGVsdmVkIGNoYW5nZWxpc3QgYW5kIHJlLXVuc2hlbHZlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2hhbmdlPSQobGFzdF9zaGVsdmVkX2NoYW5nZSkgJiYKKwkJZWNobyAiZmlsZTMiID5maWxlMyAmJgorCQlwNCBhZGQgLWMgJGNoYW5nZSBmaWxlMyAmJgorCQlwNCBzaGVsdmUgLWkgLXIgPDxFT0YgJiYKK0NoYW5nZTogJGNoYW5nZQorRGVzY3JpcHRpb246CisJVGVzdCBjb21taXQKKworCUZ1cnRoZXIgZGVzY3JpcHRpb24KK0ZpbGVzOgorCS8vZGVwb3QvZmlsZTEKKwkvL2RlcG90L2ZpbGUyCisJLy9kZXBvdC9maWxlMworCS8vZGVwb3QvZmlsZV90b19kZWxldGUKK0VPRgorCQlwNCBkZXNjcmliZSAkY2hhbmdlCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNoYW5nZT0kKGxhc3Rfc2hlbHZlZF9jaGFuZ2UpICYmCisJCWdpdCBwNCB1bnNoZWx2ZSAkY2hhbmdlICYmCisJCWdpdCBkaWZmIHJlZnMvcmVtb3Rlcy9wNC11bnNoZWx2ZWQvJGNoYW5nZS4wIHJlZnMvcmVtb3Rlcy9wNC11bnNoZWx2ZWQvJGNoYW5nZSB8IGdyZXAgLXEgZmlsZTMKKwkpCisnCisKK3NoZWx2ZV9vbmVfZmlsZSAoKSB7CisJZGVzY3JpcHRpb249IkNoYW5nZSB0byBiZSB1bnNoZWx2ZWQiICYmCisJZmlsZT0iJDEiICYmCisJcDQgc2hlbHZlIC1pIDw8RU9GCitDaGFuZ2U6IG5ldworRGVzY3JpcHRpb246CisJJGRlc2NyaXB0aW9uCitGaWxlczoKKwkkZmlsZQorRU9GCit9CisKKyMgVGhpcyBpcyB0aGUgdHJpY2t5IGNhc2Ugd2hlcmUgdGhlIHNoZWx2ZWQgY2hhbmdlbGlzdCBiYXNlIHJldmlzaW9uIGRvZXNuJ3QKKyMgbWF0Y2ggZ2l0LXA0J3MgaWRlYSBvZiB0aGUgYmFzZSByZXZpc2lvbgorIworIyBXZSB3aWxsIGF0dGVtcHQgdG8gdW5zaGVsdmUgYSBjaGFuZ2UgdGhhdCBpcyBiYXNlZCBvbiBhIGNoYW5nZSBvbmUgY29tbWl0CisjIGFoZWFkIG9mIHA0L21hc3RlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc2hlbHZlZCBjaGFuZ2VsaXN0IGJhc2VkIG9uIHA0IGNoYW5nZSBhaGVhZCBvZiBwNC9tYXN0ZXInICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L0BhbGwgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCByZXZlcnQgLi4uICYmCisJCXA0IGVkaXQgZmlsZTEgJiYKKwkJZWNobyAiZm9vIiA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlOmZvbyIgJiYKKwkJcDQgZWRpdCBmaWxlMSAmJgorCQllY2hvICJiYXIiID4+ZmlsZTEgJiYKKwkJc2hlbHZlX29uZV9maWxlIC8vZGVwb3QvZmlsZTEgJiYKKwkJY2hhbmdlPSQobGFzdF9zaGVsdmVkX2NoYW5nZSkgJiYKKwkJcDQgZGVzY3JpYmUgLVMgJGNoYW5nZSA+b3V0LnR4dCAmJgorCQlncmVwIC1xICJDaGFuZ2UgdG8gYmUgdW5zaGVsdmVkIiBvdXQudHh0CisJKQorJworCisjIE5vdyB0cnkgdG8gdW5zaGVsdmUgaXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnkgdG8gdW5zaGVsdmUgdGhlIGNoYW5nZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2hhbmdlPSQobGFzdF9zaGVsdmVkX2NoYW5nZSkgJiYKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCB1bnNoZWx2ZSAkY2hhbmdlID5vdXQudHh0ICYmCisJCWdyZXAgLXEgInVuc2hlbHZlZCBjaGFuZ2VsaXN0ICRjaGFuZ2UiIG91dC50eHQKKwkpCisnCisKKyMgU3BlY2lmeSB0aGUgb3JpZ2luLiBDcmVhdGUgMiB1bnJlbGF0ZWQgZmlsZXMsIGFuZCBjaGVjayB0aGF0CisjIHdlIG9ubHkgZ2V0IHRoZSBvbmUgaW4gSEVBRH4sIG5vdCB0aGUgb25lIGluIEhFQUQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2hlbHZlIHNwZWNpZnlpbmcgdGhlIG9yaWdpbicgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCTogPnVucmVsYXRlZF9maWxlMCAmJgorCQlwNCBhZGQgdW5yZWxhdGVkX2ZpbGUwICYmCisJCXA0IHN1Ym1pdCAtZCAidW5yZWxhdGVkIiAmJgorCQk6ID51bnJlbGF0ZWRfZmlsZTEgJiYKKwkJcDQgYWRkIHVucmVsYXRlZF9maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgInVucmVsYXRlZCIgJiYKKwkJOiA+ZmlsZV90b19zaGVsdmUgJiYKKwkJcDQgYWRkIGZpbGVfdG9fc2hlbHZlICYmCisJCXNoZWx2ZV9vbmVfZmlsZSAvL2RlcG90L2ZpbGVfdG9fc2hlbHZlCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNoYW5nZT0kKGxhc3Rfc2hlbHZlZF9jaGFuZ2UpICYmCisJCWdpdCBwNCB1bnNoZWx2ZSAtLW9yaWdpbiBIRUFEfiAkY2hhbmdlICYmCisJCWdpdCBjaGVja291dCByZWZzL3JlbW90ZXMvcDQtdW5zaGVsdmVkLyRjaGFuZ2UgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgdW5yZWxhdGVkX2ZpbGUwICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHVucmVsYXRlZF9maWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlX3RvX3NoZWx2ZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODMzLWVycm9ycy5zaCBiL3QvdDk4MzMtZXJyb3JzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyMjM2OWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODMzLWVycm9ycy5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGVycm9ycycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwNCBmaWxlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUxIgorCSkKKycKKworIyBhZnRlciB0aGlzIHRlc3QsIHRoZSBkZWZhdWx0IHVzZXIgcmVxdWlyZXMgYSBwYXNzd29yZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3IgaGFuZGxpbmcnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCVA0UE9SVD06IHRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzdWJtaXQgMj5lcnJtc2cKKwkpICYmCisJcDQgcGFzc3dkIC1QIG5ld3Bhc3N3b3JkICYmCisJKAorCQlQNFBBU1NXRD1iYWRwYXNzd29yZCAmJgorCQlleHBvcnQgUDRQQVNTV0QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC8vZGVwb3QvZm9vIDI+ZXJybXNnICYmCisJCWdyZXAgLXEgImZhaWx1cmUgYWNjZXNzaW5nIGRlcG90LipQNFBBU1NXRCIgZXJybXNnCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aWNrZXQgbG9nZ2VkIG91dCcgJworCVA0VElDS0VUUz0iJGNsaS90aWNrZXRzIiAmJgorCWVjaG8gIm5ld3Bhc3N3b3JkIiB8IHA0IGxvZ2luICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgInRpY2tldC1hdXRoLWNoZWNrIiAmJgorCQlwNCBsb2dvdXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCAyPmVycm1zZyAmJgorCQlncmVwIC1xICJmYWlsdXJlIGFjY2Vzc2luZyBkZXBvdCIgZXJybXNnCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk5MDEtZ2l0LXdlYi0tYnJvd3NlLnNoIGIvdC90OTkwMS1naXQtd2ViLS1icm93c2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU3MTUyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk5MDEtZ2l0LXdlYi0tYnJvd3NlLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgd2ViLS1icm93c2UgYmFzaWMgdGVzdHMKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdpdCB3ZWItLWJyb3dzZSBjYW4gaGFuZGxlIHZhcmlvdXMgdmFsaWQgVVJMcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X3dlYl9icm93c2UgKCkgeworCSMgYnJvd3Nlcj0kMSB1cmw9JDIKKwlnaXQgd2ViLS1icm93c2UgLS1icm93c2VyPSIkMSIgIiQyIiA+YWN0dWFsICYmCisJdHIgLWQgJ1wwMTUnIDxhY3R1YWwgPnRleHQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdGV4dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYW4gYW1wZXJzYW5kIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vXCZiYXIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJvd3Nlci5jdXN0b20uY21kIGVjaG8gJiYKKwl0ZXN0X3dlYl9icm93c2UgY3VzdG9tIGh0dHA6Ly9leGFtcGxlLmNvbS9mb29cJmJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYSBzZW1pLWNvbG9uIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vXDtiYXIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJvd3Nlci5jdXN0b20uY21kIGVjaG8gJiYKKwl0ZXN0X3dlYl9icm93c2UgY3VzdG9tIGh0dHA6Ly9leGFtcGxlLmNvbS9mb29cO2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknVVJMIHdpdGggYSBoYXNoIGluIGl0JyAnCisJZWNobyBodHRwOi8vZXhhbXBsZS5jb20vZm9vI2JhciA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicm93c2VyLmN1c3RvbS5jbWQgZWNobyAmJgorCXRlc3Rfd2ViX2Jyb3dzZSBjdXN0b20gaHR0cDovL2V4YW1wbGUuY29tL2ZvbyNiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2Jyb3dzZXIgcGF0aHMgYXJlIHByb3Blcmx5IHF1b3RlZCcgJworCWVjaG8gZmFrZTogaHR0cDovL2V4YW1wbGUuY29tL2ZvbyA+ZXhwZWN0ICYmCisJY2F0ID4iZmFrZSBicm93c2VyIiA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJZWNobyBmYWtlOiAiJEAiCisJRU9GCisJY2htb2QgK3ggImZha2UgYnJvd3NlciIgJiYKKwlnaXQgY29uZmlnIGJyb3dzZXIudzNtLnBhdGggIiQocHdkKS9mYWtlIGJyb3dzZXIiICYmCisJdGVzdF93ZWJfYnJvd3NlIHczbSBodHRwOi8vZXhhbXBsZS5jb20vZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdicm93c2VyIGNvbW1hbmQgYWxsb3dzIGFyYml0cmFyeSBzaGVsbCBjb2RlJyAnCisJZWNobyAiYXJnOiBodHRwOi8vZXhhbXBsZS5jb20vZm9vIiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicm93c2VyLmN1c3RvbS5jbWQgIgorCQlmKCkgeworCQkJZm9yIGkgaW4gXCJcJEBcIjsgZG8KKwkJCQllY2hvIGFyZzogXCRpCisJCQlkb25lCisJCX0KKwkJZiIgJiYKKwl0ZXN0X3dlYl9icm93c2UgY3VzdG9tIGh0dHA6Ly9leGFtcGxlLmNvbS9mb28KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5OTAyLWNvbXBsZXRpb24uc2ggYi90L3Q5OTAyLWNvbXBsZXRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTUwNWU1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk5MDItY29tcGxldGlvbi5zaApAQCAtMCwwICsxLDE4NTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgRmVsaXBlIENvbnRyZXJhcworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGJhc2ggY29tcGxldGlvbicKKworLiAuL2xpYi1iYXNoLnNoCisKK2NvbXBsZXRlICgpCit7CisJIyBkbyBub3RoaW5nCisJcmV0dXJuIDAKK30KKworIyBCZSBjYXJlZnVsIHdoZW4gdXBkYXRpbmcgdGhlc2UgbGlzdHM6CisjCisjICgxKSBUaGUgYnVpbGQgdHJlZSBtYXkgaGF2ZSBidWlsZCBhcnRpZmFjdCBmcm9tIGRpZmZlcmVudCBicmFuY2gsIG9yCisjICAgICB0aGUgdXNlcidzICRQQVRIIG1heSBoYXZlIGEgcmFuZG9tIGV4ZWN1dGFibGUgdGhhdCBtYXkgYmVnaW4KKyMgICAgIHdpdGggImdpdC1jaGVjayIgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIHN1YmNvbW1hbmRzIHRoaXMgYnVpbGQKKyMgICAgIHdpbGwgc2hpcCwgZS5nLiAgImNoZWNrLWlnbm9yZSIuICBUaGUgdGVzdHMgZm9yIGNvbXBsZXRpb24gZm9yCisjICAgICBzdWJjb21tYW5kIG5hbWVzIHRlc3RzIGhvdyAiY2hlY2siIGlzIGV4cGFuZGVkOyB3ZSBsaW1pdCB0aGUKKyMgICAgIHBvc3NpYmxlIGNhbmRpZGF0ZXMgdG8gImNoZWNrb3V0IiBhbmQgImNoZWNrLWF0dHIiIHRvIG1ha2Ugc3VyZQorIyAgICAgImNoZWNrLWF0dHIiLCB3aGljaCBpcyBrbm93biBieSB0aGUgZmlsdGVyIGZ1bmN0aW9uIGFzIGEKKyMgICAgIHN1YmNvbW1hbmQgdG8gYmUgdGhyb3duIG91dCwgd2hpbGUgZXhjbHVkaW5nIG90aGVyIHJhbmRvbSBmaWxlcworIyAgICAgdGhhdCBoYXBwZW4gdG8gYmVnaW4gd2l0aCAiY2hlY2siIHRvIGF2b2lkIGxldHRpbmcgdGhlbSBnZXQgaW4KKyMgICAgIHRoZSB3YXkuCisjCisjICgyKSBBIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGNvbW1vbiBzdWJjb21tYW5kcyBhcmUgaW5jbHVkZWQgaW4gdGhlCisjICAgICBjb21wbGV0aW9uIGZvciAiZ2l0IDxUQUI+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+PiAuZ2l0aWdub3JlICYmCisKKwlnaXQgYWRkIC5naXRpZ25vcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjb21taXQgIiAiLmdpdGlnbm9yZSIgJiYKKworCWdpdCBjb21taXQgLW0gaWdub3JlICYmCisKKwl0b3VjaCBuZXcgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgIiAibmV3IiAmJgorCisJZ2l0IGFkZCBuZXcgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG5ldyAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGFkZCAiICIiICYmCisKKwlnaXQgbXYgbmV3IG1vZGlmaWVkICYmCisJZWNobyBtb2RpZnkgPiBtb2RpZmllZCAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGFkZCAiICJtb2RpZmllZCIgJiYKKworCXRvdWNoIHVudHJhY2tlZCAmJgorCisJOiBUT0RPIC5naXRpZ25vcmUgc2hvdWxkIG5vdCBiZSBoZXJlICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgcm0gIiA8PC1cRU9GICYmCisJLmdpdGlnbm9yZQorCW1vZGlmaWVkCisJRU9GCisKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjbGVhbiAiICJ1bnRyYWNrZWQiICYmCisKKwk6IFRPRE8gLmdpdGlnbm9yZSBzaG91bGQgbm90IGJlIGhlcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBtdiAiIDw8LVxFT0YgJiYKKwkuZ2l0aWdub3JlCisJbW9kaWZpZWQKKwlFT0YKKworCW1rZGlyIGRpciAmJgorCXRvdWNoIGRpci9maWxlLWluLWRpciAmJgorCWdpdCBhZGQgZGlyL2ZpbGUtaW4tZGlyICYmCisJZ2l0IGNvbW1pdCAtbSBkaXIgJiYKKworCW1rZGlyIHVudHJhY2tlZC1kaXIgJiYKKworCTogVE9ETyAuZ2l0aWdub3JlIHNob3VsZCBub3QgYmUgaGVyZSAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IG12IG1vZGlmaWVkICIgPDwtXEVPRiAmJgorCS5naXRpZ25vcmUKKwlkaXIKKwltb2RpZmllZAorCXVudHJhY2tlZAorCXVudHJhY2tlZC1kaXIKKwlFT0YKKworCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNvbW1pdCAiICJtb2RpZmllZCIgJiYKKworCTogVE9ETyAuZ2l0aWdub3JlIHNob3VsZCBub3QgYmUgaGVyZSAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGxzLWZpbGVzICIgPDwtXEVPRiAmJgorCS5naXRpZ25vcmUKKwlkaXIKKwltb2RpZmllZAorCUVPRgorCisJdG91Y2ggbW9taWZpZWQgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgbW9tIiAibW9taWZpZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsZXRpb24gdXNlcyA8Y21kPiBjb21wbGV0aW9uIGZvciBhbGlhczogIXNoIC1jICdnaXQgPGNtZD4gLi4uJyIgJworCXRlc3RfY29uZmlnIGFsaWFzLmNvICIhc2ggLWMgJyInIidnaXQgY2hlY2tvdXQgLi4uJyInIiciICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY28gbSIgPDwtXEVPRgorCW1hc3RlciBaCisJbXlicmFuY2ggWgorCW15dGFnIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxldGlvbiB1c2VzIDxjbWQ+IGNvbXBsZXRpb24gZm9yIGFsaWFzOiAhZiAoKSB7IFZBUj12YWwgZ2l0IDxjbWQ+IC4uLiB9JyAnCisJdGVzdF9jb25maWcgYWxpYXMuY28gIiFmICgpIHsgVkFSPXZhbCBnaXQgY2hlY2tvdXQgLi4uIDsgfSBmIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNvIG0iIDw8LVxFT0YKKwltYXN0ZXIgWgorCW15YnJhbmNoIFoKKwlteXRhZyBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsZXRpb24gdXNlZCA8Y21kPiBjb21wbGV0aW9uIGZvciBhbGlhczogIWYoKSB7IDogZ2l0IDxjbWQ+IDsgLi4uIH0nICcKKwl0ZXN0X2NvbmZpZyBhbGlhcy5jbyAiIWYoKSB7IDogZ2l0IGNoZWNrb3V0IDsgaWYgLi4uIH0gZiIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjbyBtIiA8PC1cRU9GCisJbWFzdGVyIFoKKwlteWJyYW5jaCBaCisJbXl0YWcgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0aW9uIHdpdGhvdXQgZXhwbGljaXQgX2dpdF94eHggZnVuY3Rpb24nICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCB2ZXJzaW9uIC0tIiA8PC1cRU9GCisJLS1idWlsZC1vcHRpb25zIFoKKwktLW5vLWJ1aWxkLW9wdGlvbnMgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb21wbGV0ZSB3aXRoIHRpbGRlIGV4cGFuc2lvbicgJworCWdpdCBpbml0IHRtcCAmJiBjZCB0bXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisKKwl0b3VjaCB+L3RtcC9maWxlICYmCisKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgfi90bXAvIiAifi90bXAvZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb3RoZXIgcmVtb3RlIGZvciByZW1vdGUgcmVmZXJlbmNlIGNvbXBsZXRpb24nICcKKwlnaXQgcmVtb3RlIGFkZCBvdGhlciBvdGhlcnJlcG8gJiYKKwlnaXQgZmV0Y2ggb3RoZXIKKycKKworZm9yIGZsYWcgaW4gLWQgLS1kZWxldGUKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMgLSBwdXNoICRmbGFnIG90aGVyIiAnCisJCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCW1hc3Rlci1pbi1vdGhlciBaCisJCUVPRgorCQkoCisJCQl3b3Jkcz0oZ2l0IHB1c2ggJyRmbGFnJyBvdGhlciBtYSkgJiYKKwkJCWN3b3JkPSR7I3dvcmRzW0BdfSBjdXI9JHt3b3Jkc1tjd29yZC0xXX0gJiYKKwkJCV9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjICYmCisJCQlwcmludF9jb21wCisJCSkgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0CisJJworCisJdGVzdF9leHBlY3RfZmFpbHVyZSAiX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMgLSBwdXNoIG90aGVyICRmbGFnIiAnCisJCXNlZCAtZSAicy9aJC8vIiA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJCW1hc3Rlci1pbi1vdGhlciBaCisJCUVPRgorCQkoCisJCQl3b3Jkcz0oZ2l0IHB1c2ggb3RoZXIgJyRmbGFnJyBtYSkgJiYKKwkJCWN3b3JkPSR7I3dvcmRzW0BdfSBjdXI9JHt3b3Jkc1tjd29yZC0xXX0gJiYKKwkJCV9fZ2l0X2NvbXBsZXRlX3JlbW90ZV9vcl9yZWZzcGVjICYmCisJCQlwcmludF9jb21wCisJCSkgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0CisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIC0gc2VjdGlvbicgJworCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNvbmZpZyBiciIgPDwtXEVPRgorCWJyYW5jaC5aCisJYnJvd3Nlci5aCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgLSB2YXJpYWJsZSBuYW1lJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY29uZmlnIGxvZy5kIiA8PC1cRU9GCisJbG9nLmRhdGUgWgorCWxvZy5kZWNvcmF0ZSBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgLSB2YWx1ZScgJworCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNvbmZpZyBjb2xvci5wYWdlciAiIDw8LVxFT0YKKwlmYWxzZSBaCisJdHJ1ZSBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyAtIHNlY3Rpb24nICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtYyBiciIgPDwtXEVPRgorCWJyYW5jaC5aCisJYnJvd3Nlci5aCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyAtIHZhcmlhYmxlIG5hbWUnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtYyBsb2cuZCIgPDwtXEVPRgorCWxvZy5kYXRlPVoKKwlsb2cuZGVjb3JhdGU9WgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgLSB2YWx1ZScgJworCXRlc3RfY29tcGxldGlvbiAiZ2l0IC1jIGNvbG9yLnBhZ2VyPSIgPDwtXEVPRgorCWZhbHNlIFoKKwl0cnVlIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIC0tY29uZmlnPSAtIHNlY3Rpb24nICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjbG9uZSAtLWNvbmZpZz1iciIgPDwtXEVPRgorCWJyYW5jaC5aCisJYnJvd3Nlci5aCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSAtLWNvbmZpZz0gLSB2YXJpYWJsZSBuYW1lJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY2xvbmUgLS1jb25maWc9bG9nLmQiIDw8LVxFT0YKKwlsb2cuZGF0ZT1aCisJbG9nLmRlY29yYXRlPVoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIC0tY29uZmlnPSAtIHZhbHVlJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY2xvbmUgLS1jb25maWc9Y29sb3IucGFnZXI9IiA8PC1cRU9GCisJZmFsc2UgWgorCXRydWUgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb3VyY2luZyB0aGUgY29tcGxldGlvbiBzY3JpcHQgY2xlYXJzIGNhY2hlZCBjb21tYW5kcycgJworCV9fZ2l0X2NvbXB1dGVfYWxsX2NvbW1hbmRzICYmCisJdmVyYm9zZSB0ZXN0IC1uICIkX19naXRfYWxsX2NvbW1hbmRzIiAmJgorCS4gIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIiAmJgorCXZlcmJvc2UgdGVzdCAteiAiJF9fZ2l0X2FsbF9jb21tYW5kcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc291cmNpbmcgdGhlIGNvbXBsZXRpb24gc2NyaXB0IGNsZWFycyBjYWNoZWQgbWVyZ2Ugc3RyYXRlZ2llcycgJworCUdJVF9URVNUX0dFVFRFWFRfUE9JU09OPWZhbHNlICYmCisJX19naXRfY29tcHV0ZV9tZXJnZV9zdHJhdGVnaWVzICYmCisJdmVyYm9zZSB0ZXN0IC1uICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIgJiYKKwkuICIkR0lUX0JVSUxEX0RJUi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCIgJiYKKwl2ZXJib3NlIHRlc3QgLXogIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb3VyY2luZyB0aGUgY29tcGxldGlvbiBzY3JpcHQgY2xlYXJzIGNhY2hlZCAtLW9wdGlvbnMnICcKKwlfX2dpdGNvbXBfYnVpbHRpbiBjaGVja291dCAmJgorCXZlcmJvc2UgdGVzdCAtbiAiJF9fZ2l0Y29tcF9idWlsdGluX2NoZWNrb3V0IiAmJgorCV9fZ2l0Y29tcF9idWlsdGluIG5vdGVzX2VkaXQgJiYKKwl2ZXJib3NlIHRlc3QgLW4gIiRfX2dpdGNvbXBfYnVpbHRpbl9ub3Rlc19lZGl0IiAmJgorCS4gIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIiAmJgorCXZlcmJvc2UgdGVzdCAteiAiJF9fZ2l0Y29tcF9idWlsdGluX2NoZWNrb3V0IiAmJgorCXZlcmJvc2UgdGVzdCAteiAiJF9fZ2l0Y29tcF9idWlsdGluX25vdGVzX2VkaXQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTkwMy1iYXNoLXByb21wdC5zaCBiL3QvdDk5MDMtYmFzaC1wcm9tcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWI1ZGEyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk5MDMtYmFzaC1wcm9tcHQuc2gKQEAgLTAsMCArMSw3NTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgU1pFREVSIEfDoWJvcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdC1zcGVjaWZpYyBiYXNoIHByb21wdCBmdW5jdGlvbnMnCisKKy4gLi9saWItYmFzaC5zaAorCisuICIkR0lUX0JVSUxEX0RJUi9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaCIKKworYWN0dWFsPSIkVFJBU0hfRElSRUNUT1JZL2FjdHVhbCIKK2NfcmVkPSdcXFtcXGVbMzFtXFxdJworY19ncmVlbj0nXFxbXFxlWzMybVxcXScKK2NfbGJsdWU9J1xcW1xcZVsxOzM0bVxcXScKK2NfY2xlYXI9J1xcW1xcZVswbVxcXScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHByb21wdCB0ZXN0cycgJworCWdpdCBpbml0IG90aGVycmVwbyAmJgorCWVjaG8gMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgLWEgLW0gbXNnMSB0MSAmJgorCWdpdCBjaGVja291dCAtYiBiMSAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBiMSIgZmlsZSAmJgorCWVjaG8gMyA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIGIxIiBmaWxlICYmCisJZ2l0IHRhZyAtYSAtbSBtc2cyIHQyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIyIG1hc3RlciAmJgorCWVjaG8gMCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInNlY29uZCBiMiIgZmlsZSAmJgorCWVjaG8gMDAgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhbm90aGVyIGIyIiBmaWxlICYmCisJZWNobyAwMDAgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJ5ZXQgYW5vdGhlciBiMiIgZmlsZSAmJgorCW1rZGlyIGlnbm9yZWRfZGlyICYmCisJZWNobyAiaWdub3JlZF9kaXIvIiA+Pi5naXRpZ25vcmUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJyYW5jaCBuYW1lJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3Byb21wdCAtIGJyYW5jaCBuYW1lIC0gc3ltbGluayBzeW1yZWYnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCXRlc3RfY29uZmlnIGNvcmUucHJlZmVyU3ltbGlua1JlZnMgdHJ1ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bmJvcm4gYnJhbmNoJyAnCisJcHJpbnRmICIgKHVuYm9ybikiID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bmJvcm4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKworaWYgdGVzdF9oYXZlX3ByZXJlcSAhRlVOTllOQU1FUzsgdGhlbgorCXNheSAnWW91ciBmaWxlc3lzdGVtIGRvZXMgbm90IGFsbG93IG5ld2xpbmVzIGluIGZpbGVuYW1lcy4nCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ3Byb21wdCAtIHdpdGggbmV3bGluZSBpbiBwYXRoJyAnCisgICAgcmVwb193aXRoX25ld2xpbmU9InJlcG8KK3dpdGgKK25ld2xpbmUiICYmCisJbWtkaXIgIiRyZXBvX3dpdGhfbmV3bGluZSIgJiYKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJZ2l0IGluaXQgIiRyZXBvX3dpdGhfbmV3bGluZSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBcIiRyZXBvX3dpdGhfbmV3bGluZVwiIiAmJgorCW1rZGlyICIkcmVwb193aXRoX25ld2xpbmUiL3N1YmRpciAmJgorCSgKKwkJY2QgIiRyZXBvX3dpdGhfbmV3bGluZS9zdWJkaXIiICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXRhY2hlZCBoZWFkJyAnCisJcHJpbnRmICIgKCglcy4uLikpIiAkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIiAtLWFiYnJldj0xMyBiMV4pID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGNvcmUuYWJicmV2IDEzICYmCisJZ2l0IGNoZWNrb3V0IGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXNjcmliZSBkZXRhY2hlZCBoZWFkIC0gY29udGFpbnMnICcKKwlwcmludGYgIiAoKHQyfjEpKSIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwkoCisJCUdJVF9QUzFfREVTQ1JJQkVfU1RZTEU9Y29udGFpbnMgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlc2NyaWJlIGRldGFjaGVkIGhlYWQgLSBicmFuY2gnICcKKwlwcmludGYgIiAoKHRhZ3MvdDJ+MSkpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjFeICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCSgKKwkJR0lUX1BTMV9ERVNDUklCRV9TVFlMRT1icmFuY2ggJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlc2NyaWJlIGRldGFjaGVkIGhlYWQgLSBkZXNjcmliZScgJworCXByaW50ZiAiICgodDEtMS1nJXMpKSIgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIgYjFeKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjFeICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCSgKKwkJR0lUX1BTMV9ERVNDUklCRV9TVFlMRT1kZXNjcmliZSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGVzY3JpYmUgZGV0YWNoZWQgaGVhZCAtIGRlZmF1bHQnICcKKwlwcmludGYgIiAoKHQyKSkiID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCBiMSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBpbnNpZGUgLmdpdCBkaXJlY3RvcnknICcKKwlwcmludGYgIiAoR0lUX0RJUiEpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIC5naXQgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRlZXAgaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPmV4cGVjdGVkICYmCisJKAorCQljZCAuZ2l0L29iamVjdHMgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGluc2lkZSBiYXJlIHJlcG9zaXRvcnknICcKKwlwcmludGYgIiAoQkFSRTptYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgYmFyZS5naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBiYXJlLmdpdCIgJiYKKwkoCisJCWNkIGJhcmUuZ2l0ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBpbnRlcmFjdGl2ZSByZWJhc2UnICcKKwlwcmludGYgIiAoYjF8UkVCQVNFIDIvMykiID5leHBlY3RlZCAmJgorCXdyaXRlX3NjcmlwdCBmYWtlX2VkaXRvci5zaCA8PC1cRU9GICYmCisJCWVjaG8gImV4ZWMgZWNobyIgPiIkMSIKKwkJZWNobyAiZWRpdCAkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIikiID4+IiQxIgorCQllY2hvICJleGVjIGVjaG8iID4+IiQxIgorCUVPRgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZmFrZV9lZGl0b3Iuc2giICYmCisJdGVzdF9zZXRfZWRpdG9yICIkVFJBU0hfRElSRUNUT1JZL2Zha2VfZWRpdG9yLnNoIiAmJgorCWdpdCBjaGVja291dCBiMSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUReICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcmViYXNlIG1lcmdlJyAnCisJcHJpbnRmICIgKGIyfFJFQkFTRSAxLzMpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIGIxIGIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcmViYXNlIGFtJyAnCisJcHJpbnRmICIgKGIyfFJFQkFTRSAxLzMpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFwcGx5IGIxIGIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gbWVyZ2UnICcKKwlwcmludGYgIiAoYjF8TUVSR0lORykiID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYjIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gY2hlcnJ5LXBpY2snICcKKwlwcmludGYgIiAobWFzdGVyfENIRVJSWS1QSUNLSU5HKSIgPmV4cGVjdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGIxIGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIgJiYKKwlnaXQgcmVzZXQgLS1tZXJnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHJldmVydCcgJworCXByaW50ZiAiIChtYXN0ZXJ8UkVWRVJUSU5HKSIgPmV4cGVjdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBiMV4gYjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXZlcnQgLS1hYm9ydCIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIiAmJgorCWdpdCByZXNldCAtLW1lcmdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBSRVZFUlRfSEVBRCAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJpc2VjdCcgJworCXByaW50ZiAiIChtYXN0ZXJ8QklTRUNUSU5HKSIgPmV4cGVjdGVkICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGJpc2VjdCByZXNldCIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gY2xlYW4nICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSB3b3JrdHJlZScgJworCXByaW50ZiAiIChtYXN0ZXIgKikiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IGluZGV4JyAnCisJcHJpbnRmICIgKG1hc3RlciArKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBhZGQgLXUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IGluZGV4IGFuZCB3b3JrdHJlZScgJworCXByaW50ZiAiIChtYXN0ZXIgKispIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSBpbmRleCIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGFkZCAtdSAmJgorCWVjaG8gImRpcnR5IHdvcmt0cmVlIiA+ZmlsZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gb3JwaGFuIGJyYW5jaCAtIGNsZWFuJyAnCisJcHJpbnRmICIgKG9ycGhhbiAjKSIgPmV4cGVjdGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBvcnBoYW4gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBvcnBoYW4gYnJhbmNoIC0gZGlydHkgaW5kZXgnICcKKwlwcmludGYgIiAob3JwaGFuICspIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gb3JwaGFuIGJyYW5jaCAtIGRpcnR5IGluZGV4IGFuZCB3b3JrdHJlZScgJworCXByaW50ZiAiIChvcnBoYW4gKispIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbiAmJgorCT5maWxlICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSB1bnNldCB3aXRoIGNvbmZpZyBkaXNhYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJdGVzdF9jb25maWcgYmFzaC5zaG93RGlydHlTdGF0ZSBmYWxzZSAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfUFMxX1NIT1dESVJUWVNUQVRFICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgdW5zZXQgd2l0aCBjb25maWcgZW5hYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJdGVzdF9jb25maWcgYmFzaC5zaG93RGlydHlTdGF0ZSB0cnVlICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9QUzFfU0hPV0RJUlRZU1RBVEUgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSBzZXQgd2l0aCBjb25maWcgZGlzYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd0RpcnR5U3RhdGUgZmFsc2UgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHNldCB3aXRoIGNvbmZpZyBlbmFibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlciAqKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd0RpcnR5U3RhdGUgdHJ1ZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gbm90IHNob3duIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJworCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQljZCAuZ2l0ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBzdGFzaCBzdGF0dXMgaW5kaWNhdG9yIC0gbm8gc3Rhc2gnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHN0YXNoIHN0YXR1cyBpbmRpY2F0b3IgLSBzdGFzaCcgJworCXByaW50ZiAiIChtYXN0ZXIgJCkiID5leHBlY3RlZCAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XU1RBU0hTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBzdGFzaCBzdGF0dXMgaW5kaWNhdG9yIC0gbm90IHNob3duIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJworCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJKAorCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBubyB1bnRyYWNrZWQgZmlsZXMnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCWNkIG90aGVycmVwbyAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSB1bnRyYWNrZWQgZmlsZXMnICcKKwlwcmludGYgIiAobWFzdGVyICUlKSIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIGVtcHR5IHVudHJhY2tlZCBkaXInICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJbWtkaXIgb3RoZXJyZXBvL3VudHJhY2tlZC1kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBvdGhlcnJlcG8vdW50cmFja2VkLWRpciIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJY2Qgb3RoZXJyZXBvICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIG5vbi1lbXB0eSB1bnRyYWNrZWQgZGlyJyAnCisJcHJpbnRmICIgKG1hc3RlciAlJSkiID5leHBlY3RlZCAmJgorCW1rZGlyIG90aGVycmVwby91bnRyYWNrZWQtZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgb3RoZXJyZXBvL3VudHJhY2tlZC1kaXIiICYmCisJPm90aGVycmVwby91bnRyYWNrZWQtZGlyL3VudHJhY2tlZC1maWxlICYmCisJKAorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCWNkIG90aGVycmVwbyAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSB1bnRyYWNrZWQgZmlsZXMgb3V0c2lkZSBjd2QnICcKKwlwcmludGYgIiAobWFzdGVyICUlKSIgPmV4cGVjdGVkICYmCisJKAorCQlta2RpciAtcCBpZ25vcmVkX2RpciAmJgorCQljZCBpZ25vcmVkX2RpciAmJgorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHVuc2V0IHdpdGggY29uZmlnIGRpc2FibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzIGZhbHNlICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHVuc2V0IHdpdGggY29uZmlnIGVuYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJdGVzdF9jb25maWcgYmFzaC5zaG93VW50cmFja2VkRmlsZXMgdHJ1ZSAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUyAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSBzZXQgd2l0aCBjb25maWcgZGlzYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJdGVzdF9jb25maWcgYmFzaC5zaG93VW50cmFja2VkRmlsZXMgZmFsc2UgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgc2V0IHdpdGggY29uZmlnIGVuYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyICUlKSIgPmV4cGVjdGVkICYmCisJdGVzdF9jb25maWcgYmFzaC5zaG93VW50cmFja2VkRmlsZXMgdHJ1ZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBub3Qgc2hvd24gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCWNkIC5naXQgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGZvcm1hdCBzdHJpbmcgc3RhcnRpbmcgd2l0aCBkYXNoJyAnCisJcHJpbnRmIC0tICItbWFzdGVyIiA+ZXhwZWN0ZWQgJiYKKwlfX2dpdF9wczEgIi0lcyIgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBwYyBtb2RlJyAnCisJcHJpbnRmICJCRUZPUkU6IChcJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJKAorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiID4iJGFjdHVhbCIgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5ICIkYWN0dWFsIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBicmFuY2ggbmFtZScgJworCXByaW50ZiAiQkVGT1JFOiAoJHtjX2dyZWVufVwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0ke2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiA+IiRhY3R1YWwiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGRldGFjaGVkIGhlYWQnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19yZWR9XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0pOkFGVEVSXFxuKCVzLi4uKSIgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIgYjFeKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjFeICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlc1xcbiVzIiAiJFBTMSIgIiR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IHdvcmt0cmVlJyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX3JlZH0qJHtjX2NsZWFyfSk6QUZURVJcXG5tYXN0ZXIiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlydHkgaW5kZXgnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1cJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9JHtjX2NsZWFyfSAke2NfZ3JlZW59KyR7Y19jbGVhcn0pOkFGVEVSXFxubWFzdGVyIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGFkZCAtdSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSBpbmRleCBhbmQgd29ya3RyZWUnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1cJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9JHtjX2NsZWFyfSAke2NfcmVkfSoke2NfZ3JlZW59KyR7Y19jbGVhcn0pOkFGVEVSXFxubWFzdGVyIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSBpbmRleCIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZ2l0IGFkZCAtdSAmJgorCWVjaG8gImRpcnR5IHdvcmt0cmVlIiA+ZmlsZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBiZWZvcmUgcm9vdCBjb21taXQnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1cJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9JHtjX2NsZWFyfSAke2NfZ3JlZW59IyR7Y19jbGVhcn0pOkFGVEVSXFxubWFzdGVyIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJY2Qgb3RoZXJyZXBvICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlc1xcbiVzIiAiJFBTMSIgIiR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0pOkFGVEVSXFxuR0lUX0RJUiEiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIHN0YXNoIHN0YXR1cyBpbmRpY2F0b3InICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1cJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9JHtjX2NsZWFyfSAke2NfbGJsdWV9XCQke2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgc3Rhc2ggZHJvcCIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1NUQVNIU1RBVEU9eSAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvcicgJworCXByaW50ZiAiQkVGT1JFOiAoJHtjX2dyZWVufVwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0ke2NfY2xlYXJ9ICR7Y19yZWR9JSUke2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHpzaCBjb2xvciBwYyBtb2RlJyAnCisJcHJpbnRmICJCRUZPUkU6ICglJUZ7Z3JlZW59bWFzdGVyJSVmKTpBRlRFUiIgPmV4cGVjdGVkICYmCisJKAorCQlaU0hfVkVSU0lPTj01LjAuMCAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgdW5zZXQsIGNvbmZpZyBkaXNhYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLmhpZGVJZlB3ZElnbm9yZWQgZmFsc2UgJiYKKwkoCisJCWNkIGlnbm9yZWRfZGlyICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciB1bnNldCwgY29uZmlnIGRpc2FibGVkLCBwYyBtb2RlJyAnCisJcHJpbnRmICJCRUZPUkU6IChcJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9KTpBRlRFUiIgPmV4cGVjdGVkICYmCisJdGVzdF9jb25maWcgYmFzaC5oaWRlSWZQd2RJZ25vcmVkIGZhbHNlICYmCisJKAorCQljZCBpZ25vcmVkX2RpciAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciB1bnNldCwgY29uZmlnIHVuc2V0JyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGhpZGUgaWYgcHdkIGlnbm9yZWQgLSBlbnYgdmFyIHVuc2V0LCBjb25maWcgdW5zZXQsIHBjIG1vZGUnICcKKwlwcmludGYgIkJFRk9SRTogKFwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0pOkFGVEVSIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIGlnbm9yZWRfZGlyICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlcyIgIiRQUzEiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGhpZGUgaWYgcHdkIGlnbm9yZWQgLSBlbnYgdmFyIHNldCwgY29uZmlnIGRpc2FibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guaGlkZUlmUHdkSWdub3JlZCBmYWxzZSAmJgorCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGhpZGUgaWYgcHdkIGlnbm9yZWQgLSBlbnYgdmFyIHNldCwgY29uZmlnIGRpc2FibGVkLCBwYyBtb2RlJyAnCisJcHJpbnRmICJCRUZPUkU6IChcJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9KTpBRlRFUiIgPmV4cGVjdGVkICYmCisJdGVzdF9jb25maWcgYmFzaC5oaWRlSWZQd2RJZ25vcmVkIGZhbHNlICYmCisJKAorCQljZCBpZ25vcmVkX2RpciAmJgorCQlHSVRfUFMxX0hJREVfSUZfUFdEX0lHTk9SRUQ9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciBzZXQsIGNvbmZpZyB1bnNldCcgJworCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5ICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciBzZXQsIGNvbmZpZyB1bnNldCwgcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOjpBRlRFUiIgPmV4cGVjdGVkICYmCisJKAorCQljZCBpZ25vcmVkX2RpciAmJgorCQlHSVRfUFMxX0hJREVfSUZfUFdEX0lHTk9SRUQ9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gaW5zaWRlIGdpdGRpcicgJworCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Rlc3QtYmluYXJ5LTEucG5nIGIvdC90ZXN0LWJpbmFyeS0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE4MWQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LWJpbmFyeS0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Rlc3QtYmluYXJ5LTIucG5nIGIvdC90ZXN0LWJpbmFyeS0yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzIyY2NiCi0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LWJpbmFyeS0yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCBiL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MmMyMTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaApAQCAtMCwwICsxLDE1NDUgQEAKKyMgTGlicmFyeSBvZiBmdW5jdGlvbnMgc2hhcmVkIGJ5IGFsbCB0ZXN0cyBzY3JpcHRzLCBpbmNsdWRlZCBieQorIyB0ZXN0LWxpYi5zaC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAuCisKKyMgVGhlIHNlbWFudGljcyBvZiB0aGUgZWRpdG9yIHZhcmlhYmxlcyBhcmUgdGhhdCBvZiBpbnZva2luZworIyBzaCAtYyAiJEVESVRPUiBcIiRAXCIiIGZpbGVzIC4uLgorIworIyBJZiBvdXIgdHJhc2ggZGlyZWN0b3J5IGNvbnRhaW5zIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLCB0aGV5IHdpbGwgYmUKKyMgaW50ZXJwcmV0ZWQgaWYgd2UganVzdCBzZXQgJEVESVRPUiBkaXJlY3RseSwgc28gZG8gYSBsaXR0bGUgZGFuY2Ugd2l0aAorIyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gd29yayBhcm91bmQgdGhpcy4KKyMKKyMgSW4gcGFydGljdWxhciwgcXVvdGluZyBpc24ndCBlbm91Z2gsIGFzIHRoZSBwYXRoIG1heSBjb250YWluIHRoZSBzYW1lIHF1b3RlCisjIHRoYXQgd2UncmUgdXNpbmcuCit0ZXN0X3NldF9lZGl0b3IgKCkgeworCUZBS0VfRURJVE9SPSIkMSIKKwlleHBvcnQgRkFLRV9FRElUT1IKKwlFRElUT1I9JyIkRkFLRV9FRElUT1IiJworCWV4cG9ydCBFRElUT1IKK30KKwordGVzdF9zZXRfaW5kZXhfdmVyc2lvbiAoKSB7CisgICAgR0lUX0lOREVYX1ZFUlNJT049IiQxIgorICAgIGV4cG9ydCBHSVRfSU5ERVhfVkVSU0lPTgorfQorCit0ZXN0X2RlY29kZV9jb2xvciAoKSB7CisJYXdrICcKKwkJZnVuY3Rpb24gbmFtZShuKSB7CisJCQlpZiAobiA9PSAwKSByZXR1cm4gIlJFU0VUIjsKKwkJCWlmIChuID09IDEpIHJldHVybiAiQk9MRCI7CisJCQlpZiAobiA9PSAyKSByZXR1cm4gIkZBSU5UIjsKKwkJCWlmIChuID09IDMpIHJldHVybiAiSVRBTElDIjsKKwkJCWlmIChuID09IDcpIHJldHVybiAiUkVWRVJTRSI7CisJCQlpZiAobiA9PSAzMCkgcmV0dXJuICJCTEFDSyI7CisJCQlpZiAobiA9PSAzMSkgcmV0dXJuICJSRUQiOworCQkJaWYgKG4gPT0gMzIpIHJldHVybiAiR1JFRU4iOworCQkJaWYgKG4gPT0gMzMpIHJldHVybiAiWUVMTE9XIjsKKwkJCWlmIChuID09IDM0KSByZXR1cm4gIkJMVUUiOworCQkJaWYgKG4gPT0gMzUpIHJldHVybiAiTUFHRU5UQSI7CisJCQlpZiAobiA9PSAzNikgcmV0dXJuICJDWUFOIjsKKwkJCWlmIChuID09IDM3KSByZXR1cm4gIldISVRFIjsKKwkJCWlmIChuID09IDQwKSByZXR1cm4gIkJMQUNLIjsKKwkJCWlmIChuID09IDQxKSByZXR1cm4gIkJSRUQiOworCQkJaWYgKG4gPT0gNDIpIHJldHVybiAiQkdSRUVOIjsKKwkJCWlmIChuID09IDQzKSByZXR1cm4gIkJZRUxMT1ciOworCQkJaWYgKG4gPT0gNDQpIHJldHVybiAiQkJMVUUiOworCQkJaWYgKG4gPT0gNDUpIHJldHVybiAiQk1BR0VOVEEiOworCQkJaWYgKG4gPT0gNDYpIHJldHVybiAiQkNZQU4iOworCQkJaWYgKG4gPT0gNDcpIHJldHVybiAiQldISVRFIjsKKwkJfQorCQl7CisJCQl3aGlsZSAobWF0Y2goJDAsIC9cMDMzXFtbMC05O10qbS8pICE9IDApIHsKKwkJCQlwcmludGYgIiVzPCIsIHN1YnN0cigkMCwgMSwgUlNUQVJULTEpOworCQkJCWNvZGVzID0gc3Vic3RyKCQwLCBSU1RBUlQrMiwgUkxFTkdUSC0zKTsKKwkJCQlpZiAobGVuZ3RoKGNvZGVzKSA9PSAwKQorCQkJCQlwcmludGYgIiVzIiwgbmFtZSgwKQorCQkJCWVsc2UgeworCQkJCQluID0gc3BsaXQoY29kZXMsIGFyeSwgIjsiKTsKKwkJCQkJc2VwID0gIiI7CisJCQkJCWZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CisJCQkJCQlwcmludGYgIiVzJXMiLCBzZXAsIG5hbWUoYXJ5W2ldKTsKKwkJCQkJCXNlcCA9ICI7IgorCQkJCQl9CisJCQkJfQorCQkJCXByaW50ZiAiPiI7CisJCQkJJDAgPSBzdWJzdHIoJDAsIFJTVEFSVCArIFJMRU5HVEgsIGxlbmd0aCgkMCkgLSBSU1RBUlQgLSBSTEVOR1RIICsgMSk7CisJCQl9CisJCQlwcmludAorCQl9CisJJworfQorCitsZl90b19udWwgKCkgeworCXBlcmwgLXBlICd5L1wwMTIvXDAwMC8nCit9CisKK251bF90b19xICgpIHsKKwlwZXJsIC1wZSAneS9cMDAwL1EvJworfQorCitxX3RvX251bCAoKSB7CisJcGVybCAtcGUgJ3kvUS9cMDAwLycKK30KKworcV90b19jciAoKSB7CisJdHIgUSAnXDAxNScKK30KKworcV90b190YWIgKCkgeworCXRyIFEgJ1wwMTEnCit9CisKK3F6X3RvX3RhYl9zcGFjZSAoKSB7CisJdHIgUVogJ1wwMTFcMDQwJworfQorCithcHBlbmRfY3IgKCkgeworCXNlZCAtZSAncy8kL1EvJyB8IHRyIFEgJ1wwMTUnCit9CisKK3JlbW92ZV9jciAoKSB7CisJdHIgJ1wwMTUnIFEgfCBzZWQgLWUgJ3MvUSQvLycKK30KKworIyBHZW5lcmF0ZSBhbiBvdXRwdXQgb2YgJDEgYnl0ZXMgb2YgYWxsIHplcm9lcyAoTlVMcywgbm90IEFTQ0lJIHplcm9lcykuCisjIElmICQxIGlzICdpbmZpbml0eScsIG91dHB1dCBmb3JldmVyIG9yIHVudGlsIHRoZSByZWNlaXZpbmcgcGlwZSBzdG9wcyByZWFkaW5nLAorIyB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCitnZW5lcmF0ZV96ZXJvX2J5dGVzICgpIHsKKwl0ZXN0LXRvb2wgZ2VuemVyb3MgIiRAIgorfQorCisjIEluIHNvbWUgYm91cm5lIHNoZWxsIGltcGxlbWVudGF0aW9ucywgdGhlICJ1bnNldCIgYnVpbHRpbiByZXR1cm5zCisjIG5vbnplcm8gc3RhdHVzIHdoZW4gYSB2YXJpYWJsZSB0byBiZSB1bnNldCB3YXMgbm90IHNldCBpbiB0aGUgZmlyc3QKKyMgcGxhY2UuCisjCisjIFVzZSBzYW5lX3Vuc2V0IHdoZW4gdGhhdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IuCisKK3NhbmVfdW5zZXQgKCkgeworCXVuc2V0ICIkQCIKKwlyZXR1cm4gMAorfQorCit0ZXN0X3RpY2sgKCkgeworCWlmIHRlc3QgLXogIiR7dGVzdF90aWNrK3NldH0iCisJdGhlbgorCQl0ZXN0X3RpY2s9MTExMjkxMTk5MworCWVsc2UKKwkJdGVzdF90aWNrPSQoKCR0ZXN0X3RpY2sgKyA2MCkpCisJZmkKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IiR0ZXN0X3RpY2sgLTA3MDAiCisJR0lUX0FVVEhPUl9EQVRFPSIkdGVzdF90aWNrIC0wNzAwIgorCWV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFCit9CisKKyMgU3RvcCBleGVjdXRpb24gYW5kIHN0YXJ0IGEgc2hlbGwuIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGVzdHMuCisjCisjIEJlIHN1cmUgdG8gcmVtb3ZlIGFsbCBpbnZvY2F0aW9ucyBvZiB0aGlzIGNvbW1hbmQgYmVmb3JlIHN1Ym1pdHRpbmcuCisKK3Rlc3RfcGF1c2UgKCkgeworCSIkU0hFTExfUEFUSCIgPCY2ID4mNSAyPiY3Cit9CisKKyMgV3JhcCBnaXQgd2l0aCBhIGRlYnVnZ2VyLiBBZGRpbmcgdGhpcyB0byBhIGNvbW1hbmQgY2FuIG1ha2UgaXQgZWFzaWVyCisjIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBnb2luZyBvbiBpbiBhIGZhaWxpbmcgdGVzdC4KKyMKKyMgRXhhbXBsZXM6CisjICAgICBkZWJ1ZyBnaXQgY2hlY2tvdXQgbWFzdGVyCisjICAgICBkZWJ1ZyAtLWRlYnVnZ2VyPW5lbWl2ZXIgZ2l0ICRBUkdTCisjICAgICBkZWJ1ZyAtZCAidmFsZ3JpbmQgLS10b29sPW1lbWNoZWNrIC0tdHJhY2stb3JpZ2lucz15ZXMiIGdpdCAkQVJHUworZGVidWcgKCkgeworCWNhc2UgIiQxIiBpbgorCS1kKQorCQlHSVRfREVCVUdHRVI9IiQyIiAmJgorCQlzaGlmdCAyCisJCTs7CisJLS1kZWJ1Z2dlcj0qKQorCQlHSVRfREVCVUdHRVI9IiR7MSMqPX0iICYmCisJCXNoaWZ0IDEKKwkJOzsKKwkqKQorCQlHSVRfREVCVUdHRVI9MQorCQk7OworCWVzYWMgJiYKKwlHSVRfREVCVUdHRVI9IiR7R0lUX0RFQlVHR0VSfSIgIiRAIiA8JjYgPiY1IDI+JjcKK30KKworIyBDYWxsIHRlc3RfY29tbWl0IHdpdGggdGhlIGFyZ3VtZW50cworIyBbLUMgPGRpcmVjdG9yeT5dIDxtZXNzYWdlPiBbPGZpbGU+IFs8Y29udGVudHM+IFs8dGFnPl1dXSIKKyMKKyMgVGhpcyB3aWxsIGNvbW1pdCBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gY29udGVudHMgYW5kIHRoZSBnaXZlbiBjb21taXQKKyMgbWVzc2FnZSwgYW5kIHRhZyB0aGUgcmVzdWx0aW5nIGNvbW1pdCB3aXRoIHRoZSBnaXZlbiB0YWcgbmFtZS4KKyMKKyMgPGZpbGU+LCA8Y29udGVudHM+LCBhbmQgPHRhZz4gYWxsIGRlZmF1bHQgdG8gPG1lc3NhZ2U+LgorIworIyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgIi1DIiwgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB1c2VkIGFzIGEgcGF0aCBmb3IKKyMgdGhlIGdpdCBpbnZvY2F0aW9ucy4KKwordGVzdF9jb21taXQgKCkgeworCW5vdGljaz0gJiYKKwlzaWdub2ZmPSAmJgorCWluZGlyPSAmJgorCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktLW5vdGljaykKKwkJCW5vdGljaz15ZXMKKwkJCTs7CisJCS0tc2lnbm9mZikKKwkJCXNpZ25vZmY9IiQxIgorCQkJOzsKKwkJLUMpCisJCQlpbmRpcj0iJDIiCisJCQlzaGlmdAorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZSAmJgorCWluZGlyPSR7aW5kaXI6KyIkaW5kaXIiL30gJiYKKwlmaWxlPSR7MjotIiQxLnQifSAmJgorCWVjaG8gIiR7My0kMX0iID4gIiRpbmRpciRmaWxlIiAmJgorCWdpdCAke2luZGlyOisgLUMgIiRpbmRpciJ9IGFkZCAiJGZpbGUiICYmCisJaWYgdGVzdCAteiAiJG5vdGljayIKKwl0aGVuCisJCXRlc3RfdGljaworCWZpICYmCisJZ2l0ICR7aW5kaXI6KyAtQyAiJGluZGlyIn0gY29tbWl0ICRzaWdub2ZmIC1tICIkMSIgJiYKKwlnaXQgJHtpbmRpcjorIC1DICIkaW5kaXIifSB0YWcgIiR7NDotJDF9IgorfQorCisjIENhbGwgdGVzdF9tZXJnZSB3aXRoIHRoZSBhcmd1bWVudHMgIjxtZXNzYWdlPiA8Y29tbWl0PiIsIHdoZXJlIDxjb21taXQ+CisjIGNhbiBiZSBhIHRhZyBwb2ludGluZyB0byB0aGUgY29tbWl0LXRvLW1lcmdlLgorCit0ZXN0X21lcmdlICgpIHsKKwlsYWJlbD0iJDEiICYmCisJc2hpZnQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gIiRsYWJlbCIgIiRAIiAmJgorCWdpdCB0YWcgIiRsYWJlbCIKK30KKworIyBFZmZpY2llbnRseSBjcmVhdGUgPG5yPiBjb21taXRzLCBlYWNoIHdpdGggYSB1bmlxdWUgbnVtYmVyIChmcm9tIDEgdG8gPG5yPgorIyBieSBkZWZhdWx0KSBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuCisjCisjIFVzYWdlOiB0ZXN0X2NvbW1pdF9idWxrIFtvcHRpb25zXSA8bnI+CisjICAgLUMgPGRpcj46CisjCVJ1biBhbGwgZ2l0IGNvbW1hbmRzIGluIGRpcmVjdG9yeSA8ZGlyPgorIyAgIC0tcmVmPTxuPjoKKyMJcmVmIG9uIHdoaWNoIHRvIGNyZWF0ZSBjb21taXRzIChkZWZhdWx0OiBIRUFEKQorIyAgIC0tc3RhcnQ9PG4+OgorIwludW1iZXIgY29tbWl0IG1lc3NhZ2VzIGZyb20gPG4+IChkZWZhdWx0OiAxKQorIyAgIC0tbWVzc2FnZT08bXNnPjoKKyMJdXNlIDxtc2c+IGFzIHRoZSBjb21taXQgbWVzYXNnZSAoZGVmYXVsdDogImNvbW1pdCAlcyIpCisjICAgLS1maWxlbmFtZT08Zm4+OgorIwltb2RpZnkgPGZuPiBpbiBlYWNoIGNvbW1pdCAoZGVmYXVsdDogJXMudCkKKyMgICAtLWNvbnRlbnRzPTxzdHJpbmc+OgorIwlwbGFjZSA8c3RyaW5nPiBpbiBlYWNoIGZpbGUgKGRlZmF1bHQ6ICJjb250ZW50ICVzIikKKyMgICAtLWlkPTxzdHJpbmc+OgorIwlzaG9ydGhhbmQgdG8gdXNlIDxzdHJpbmc+IGFuZCAlcyBpbiBtZXNzYWdlLCBmaWxlbmFtZSwgYW5kIGNvbnRlbnRzCisjCisjIFRoZSBtZXNzYWdlLCBmaWxlbmFtZSwgYW5kIGNvbnRlbnRzIHN0cmluZ3MgYXJlIGV2YWx1YXRlZCBieSBwcmludGYsIHdpdGggdGhlCisjIGZpcnN0ICIlcyIgcmVwbGFjZWQgYnkgdGhlIGN1cnJlbnQgY29tbWl0IG51bWJlci4gU28geW91IGNhbiBkbzoKKyMKKyMgICB0ZXN0X2NvbW1pdF9idWxrIC0tZmlsZW5hbWU9ZmlsZSAtLWNvbnRlbnRzPSJtb2RpZmljYXRpb24gJXMiCisjCisjIHRvIGhhdmUgZXZlcnkgY29tbWl0IHRvdWNoIHRoZSBzYW1lIGZpbGUsIGJ1dCB3aXRoIHVuaXF1ZSBjb250ZW50LgorIwordGVzdF9jb21taXRfYnVsayAoKSB7CisJdG1wZmlsZT0uYnVsay1jb21taXQuaW5wdXQKKwlpbmRpcj0uCisJcmVmPUhFQUQKKwluPTEKKwltZXNzYWdlPSdjb21taXQgJXMnCisJZmlsZW5hbWU9JyVzLnQnCisJY29udGVudHM9J2NvbnRlbnQgJXMnCisJd2hpbGUgdGVzdCAkIyAtZ3QgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktQykKKwkJCWluZGlyPSQyCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWY9KikKKwkJCXJlZj0kezEjLS0qPX0KKwkJCTs7CisJCS0tc3RhcnQ9KikKKwkJCW49JHsxIy0tKj19CisJCQk7OworCQktLW1lc3NhZ2U9KikKKwkJCW1lc3NhZ2U9JHsxIy0tKj19CisJCQk7OworCQktLWZpbGVuYW1lPSopCisJCQlmaWxlbmFtZT0kezEjLS0qPX0KKwkJCTs7CisJCS0tY29udGVudHM9KikKKwkJCWNvbnRlbnRzPSR7MSMtLSo9fQorCQkJOzsKKwkJLS1pZD0qKQorCQkJbWVzc2FnZT0iJHsxIy0tKj19ICVzIgorCQkJZmlsZW5hbWU9IiR7MSMtLSo9fS0lcy50IgorCQkJY29udGVudHM9IiR7MSMtLSo9fSAlcyIKKwkJCTs7CisJCS0qKQorCQkJQlVHICJpbnZhbGlkIHRlc3RfY29tbWl0X2J1bGsgb3B0aW9uOiAkMSIKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKwl0b3RhbD0kMQorCisJYWRkX2Zyb209CisJaWYgZ2l0IC1DICIkaW5kaXIiIHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICIkcmVmIgorCXRoZW4KKwkJYWRkX2Zyb209dAorCWZpCisKKwl3aGlsZSB0ZXN0ICIkdG90YWwiIC1ndCAwCisJZG8KKwkJdGVzdF90aWNrICYmCisJCWVjaG8gImNvbW1pdCAkcmVmIgorCQlwcmludGYgJ2F1dGhvciAlcyA8JXM+ICVzXG4nIFwKKwkJCSIkR0lUX0FVVEhPUl9OQU1FIiBcCisJCQkiJEdJVF9BVVRIT1JfRU1BSUwiIFwKKwkJCSIkR0lUX0FVVEhPUl9EQVRFIgorCQlwcmludGYgJ2NvbW1pdHRlciAlcyA8JXM+ICVzXG4nIFwKKwkJCSIkR0lUX0NPTU1JVFRFUl9OQU1FIiBcCisJCQkiJEdJVF9DT01NSVRURVJfRU1BSUwiIFwKKwkJCSIkR0lUX0NPTU1JVFRFUl9EQVRFIgorCQllY2hvICJkYXRhIDw8RU9GIgorCQlwcmludGYgIiRtZXNzYWdlXG4iICRuCisJCWVjaG8gIkVPRiIKKwkJaWYgdGVzdCAtbiAiJGFkZF9mcm9tIgorCQl0aGVuCisJCQllY2hvICJmcm9tICRyZWZeMCIKKwkJCWFkZF9mcm9tPQorCQlmaQorCQlwcmludGYgIk0gNjQ0IGlubGluZSAkZmlsZW5hbWVcbiIgJG4KKwkJZWNobyAiZGF0YSA8PEVPRiIKKwkJcHJpbnRmICIkY29udGVudHNcbiIgJG4KKwkJZWNobyAiRU9GIgorCQllY2hvCisJCW49JCgobiArIDEpKQorCQl0b3RhbD0kKCh0b3RhbCAtIDEpKQorCWRvbmUgPiIkdG1wZmlsZSIKKworCWdpdCAtQyAiJGluZGlyIiBcCisJICAgIC1jIGZhc3RpbXBvcnQudW5wYWNrbGltaXQ9MCBcCisJICAgIGZhc3QtaW1wb3J0IDwiJHRtcGZpbGUiIHx8IHJldHVybiAxCisKKwkjIFRoaXMgd2lsbCBiZSBsZWZ0IGluIHBsYWNlIG9uIGZhaWx1cmUsIHdoaWNoIG1heSBhaWQgZGVidWdnaW5nLgorCXJtIC1mICIkdG1wZmlsZSIKKworCSMgSWYgd2UgdXBkYXRlZCBIRUFELCB0aGVuIGJlIG5pY2UgYW5kIHVwZGF0ZSB0aGUgaW5kZXggYW5kIHdvcmtpbmcKKwkjIHRyZWUsIHRvby4KKwlpZiB0ZXN0ICIkcmVmIiA9ICJIRUFEIgorCXRoZW4KKwkJZ2l0IC1DICIkaW5kaXIiIGNoZWNrb3V0IC1mIEhFQUQgfHwgcmV0dXJuIDEKKwlmaQorCit9CisKKyMgVGhpcyBmdW5jdGlvbiBoZWxwcyBzeXN0ZW1zIHdoZXJlIGNvcmUuZmlsZW1vZGU9ZmFsc2UgaXMgc2V0LgorIyBVc2UgaXQgaW5zdGVhZCBvZiBwbGFpbiAnY2htb2QgK3gnIHRvIHNldCBvciB1bnNldCB0aGUgZXhlY3V0YWJsZSBiaXQKKyMgb2YgYSBmaWxlIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgYWRkIGl0IHRvIHRoZSBpbmRleC4KKwordGVzdF9jaG1vZCAoKSB7CisJY2htb2QgIiRAIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIi0tY2htb2Q9JEAiCit9CisKKyMgR2V0IHRoZSBtb2RlYml0cyBmcm9tIGEgZmlsZS4KK3Rlc3RfbW9kZWJpdHMgKCkgeworCWxzIC1sICIkMSIgfCBzZWQgLWUgJ3N8XlwoLi4uLi4uLi4uLlwpLip8XDF8JworfQorCisjIFVuc2V0IGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYnV0IGRvbid0IGZhaWwgaWYgaXQgZG9lc24ndCBleGlzdC4KK3Rlc3RfdW5jb25maWcgKCkgeworCWNvbmZpZ19kaXI9CisJaWYgdGVzdCAiJDEiID0gLUMKKwl0aGVuCisJCXNoaWZ0CisJCWNvbmZpZ19kaXI9JDEKKwkJc2hpZnQKKwlmaQorCWdpdCAke2NvbmZpZ19kaXI6Ky1DICIkY29uZmlnX2RpciJ9IGNvbmZpZyAtLXVuc2V0LWFsbCAiJEAiCisJY29uZmlnX3N0YXR1cz0kPworCWNhc2UgIiRjb25maWdfc3RhdHVzIiBpbgorCTUpICMgb2ssIG5vdGhpbmcgdG8gdW5zZXQKKwkJY29uZmlnX3N0YXR1cz0wCisJCTs7CisJZXNhYworCXJldHVybiAkY29uZmlnX3N0YXR1cworfQorCisjIFNldCBnaXQgY29uZmlnLCBhdXRvbWF0aWNhbGx5IHVuc2V0dGluZyBpdCBhZnRlciB0aGUgdGVzdCBpcyBvdmVyLgordGVzdF9jb25maWcgKCkgeworCWNvbmZpZ19kaXI9CisJaWYgdGVzdCAiJDEiID0gLUMKKwl0aGVuCisJCXNoaWZ0CisJCWNvbmZpZ19kaXI9JDEKKwkJc2hpZnQKKwlmaQorCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF91bmNvbmZpZyAke2NvbmZpZ19kaXI6Ky1DICckY29uZmlnX2Rpcid9ICckMSciICYmCisJZ2l0ICR7Y29uZmlnX2RpcjorLUMgIiRjb25maWdfZGlyIn0gY29uZmlnICIkQCIKK30KKwordGVzdF9jb25maWdfZ2xvYmFsICgpIHsKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfdW5jb25maWcgLS1nbG9iYWwgJyQxJyIgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsICIkQCIKK30KKword3JpdGVfc2NyaXB0ICgpIHsKKwl7CisJCWVjaG8gIiMhJHsyLSIkU0hFTExfUEFUSCJ9IiAmJgorCQljYXQKKwl9ID4iJDEiICYmCisJY2htb2QgK3ggIiQxIgorfQorCisjIFVzZSB0ZXN0X3NldF9wcmVyZXEgdG8gdGVsbCB0aGF0IGEgcGFydGljdWxhciBwcmVyZXF1aXNpdGUgaXMgYXZhaWxhYmxlLgorIyBUaGUgcHJlcmVxdWlzaXRlIGNhbiBsYXRlciBiZSBjaGVja2VkIGZvciBpbiB0d28gd2F5czoKKyMKKyMgLSBFeHBsaWNpdGx5IHVzaW5nIHRlc3RfaGF2ZV9wcmVyZXEuCisjCisjIC0gSW1wbGljaXRseSBieSBzcGVjaWZ5aW5nIHRoZSBwcmVyZXF1aXNpdGUgdGFnIGluIHRoZSBjYWxscyB0bworIyAgIHRlc3RfZXhwZWN0X3tzdWNjZXNzLGZhaWx1cmUsY29kZX0uCisjCisjIFRoZSBzaW5nbGUgcGFyYW1ldGVyIGlzIHRoZSBwcmVyZXF1aXNpdGUgdGFnIChhIHNpbXBsZSB3b3JkLCBpbiBhbGwKKyMgY2FwaXRhbCBsZXR0ZXJzIGJ5IGNvbnZlbnRpb24pLgorCit0ZXN0X3Vuc2V0X3ByZXJlcSAoKSB7CisJISB0ZXN0X2hhdmVfcHJlcmVxICIkMSIgfHwKKwlzYXRpc2ZpZWRfcHJlcmVxPSIke3NhdGlzZmllZF9wcmVyZXElICQxICp9ICR7c2F0aXNmaWVkX3ByZXJlcSMqICQxIH0iCit9CisKK3Rlc3Rfc2V0X3ByZXJlcSAoKSB7CisJaWYgdGVzdCAtbiAiJEdJVF9URVNUX0ZBSUxfUFJFUkVRU19JTlRFUk5BTCIKKwl0aGVuCisJCWNhc2UgIiQxIiBpbgorCQkjIFRoZSAiISIgY2FzZSBpcyBoYW5kbGVkIGJlbG93IHdpdGgKKwkJIyB0ZXN0X3Vuc2V0X3ByZXJlcSgpCisJCSEqKQorCQkJOzsKKwkJIyAoVGVtcG9yYXJ5Pykgd2hpdGVsaXN0IG9mIHRoaW5ncyB3ZSBjYW4ndCBlYXNpbHkKKwkJIyBwcmV0ZW5kIG5vdCB0byBzdXBwb3J0CisJCVNZTUxJTktTKQorCQkJOzsKKwkJIyBJbnNwZWN0aW5nIHdoZXRoZXIgR0lUX1RFU1RfRkFJTF9QUkVSRVFTIGlzIG9uCisJCSMgc2hvdWxkIGJlIHVuYWZmZWN0ZWQuCisJCUZBSUxfUFJFUkVRUykKKwkJCTs7CisJCSopCisJCQlyZXR1cm4KKwkJZXNhYworCWZpCisKKwljYXNlICIkMSIgaW4KKwkhKikKKwkJdGVzdF91bnNldF9wcmVyZXEgIiR7MSMhfSIKKwkJOzsKKwkqKQorCQlzYXRpc2ZpZWRfcHJlcmVxPSIkc2F0aXNmaWVkX3ByZXJlcSQxICIKKwkJOzsKKwllc2FjCit9CitzYXRpc2ZpZWRfcHJlcmVxPSIgIgorbGF6aWx5X3Rlc3RhYmxlX3ByZXJlcT0gbGF6aWx5X3Rlc3RlZF9wcmVyZXE9CisKKyMgVXNhZ2U6IHRlc3RfbGF6eV9wcmVyZXEgUFJFUkVRICdzY3JpcHQnCit0ZXN0X2xhenlfcHJlcmVxICgpIHsKKwlsYXppbHlfdGVzdGFibGVfcHJlcmVxPSIkbGF6aWx5X3Rlc3RhYmxlX3ByZXJlcSQxICIKKwlldmFsIHRlc3RfcHJlcmVxX2xhemlseV8kMT1cJDIKK30KKwordGVzdF9ydW5fbGF6eV9wcmVyZXFfICgpIHsKKwlzY3JpcHQ9JworbWtkaXIgLXAgIiRUUkFTSF9ESVJFQ1RPUlkvcHJlcmVxLXRlc3QtZGlyIiAmJgorKAorCWNkICIkVFJBU0hfRElSRUNUT1JZL3ByZXJlcS10ZXN0LWRpciIgJiYnIiQyIicKKyknCisJc2F5ID4mMyAiY2hlY2tpbmcgcHJlcmVxdWlzaXRlOiAkMSIKKwlzYXkgPiYzICIkc2NyaXB0IgorCXRlc3RfZXZhbF8gIiRzY3JpcHQiCisJZXZhbF9yZXQ9JD8KKwlybSAtcmYgIiRUUkFTSF9ESVJFQ1RPUlkvcHJlcmVxLXRlc3QtZGlyIgorCWlmIHRlc3QgIiRldmFsX3JldCIgPSAwOyB0aGVuCisJCXNheSA+JjMgInByZXJlcXVpc2l0ZSAkMSBvayIKKwllbHNlCisJCXNheSA+JjMgInByZXJlcXVpc2l0ZSAkMSBub3Qgc2F0aXNmaWVkIgorCWZpCisJcmV0dXJuICRldmFsX3JldAorfQorCit0ZXN0X2hhdmVfcHJlcmVxICgpIHsKKwkjIHByZXJlcXVpc2l0ZXMgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoICcsJworCXNhdmVfSUZTPSRJRlMKKwlJRlM9LAorCXNldCAtLSAkKgorCUlGUz0kc2F2ZV9JRlMKKworCXRvdGFsX3ByZXJlcT0wCisJb2tfcHJlcmVxPTAKKwltaXNzaW5nX3ByZXJlcT0KKworCWZvciBwcmVyZXF1aXNpdGUKKwlkbworCQljYXNlICIkcHJlcmVxdWlzaXRlIiBpbgorCQkhKikKKwkJCW5lZ2F0aXZlX3ByZXJlcT10CisJCQlwcmVyZXF1aXNpdGU9JHtwcmVyZXF1aXNpdGUjIX0KKwkJCTs7CisJCSopCisJCQluZWdhdGl2ZV9wcmVyZXE9CisJCWVzYWMKKworCQljYXNlICIgJGxhemlseV90ZXN0ZWRfcHJlcmVxICIgaW4KKwkJKiIgJHByZXJlcXVpc2l0ZSAiKikKKwkJCTs7CisJCSopCisJCQljYXNlICIgJGxhemlseV90ZXN0YWJsZV9wcmVyZXEgIiBpbgorCQkJKiIgJHByZXJlcXVpc2l0ZSAiKikKKwkJCQlldmFsICJzY3JpcHQ9XCR0ZXN0X3ByZXJlcV9sYXppbHlfJHByZXJlcXVpc2l0ZSIgJiYKKwkJCQlpZiB0ZXN0X3J1bl9sYXp5X3ByZXJlcV8gIiRwcmVyZXF1aXNpdGUiICIkc2NyaXB0IgorCQkJCXRoZW4KKwkJCQkJdGVzdF9zZXRfcHJlcmVxICRwcmVyZXF1aXNpdGUKKwkJCQlmaQorCQkJCWxhemlseV90ZXN0ZWRfcHJlcmVxPSIkbGF6aWx5X3Rlc3RlZF9wcmVyZXEkcHJlcmVxdWlzaXRlICIKKwkJCWVzYWMKKwkJCTs7CisJCWVzYWMKKworCQl0b3RhbF9wcmVyZXE9JCgoJHRvdGFsX3ByZXJlcSArIDEpKQorCQljYXNlICIkc2F0aXNmaWVkX3ByZXJlcSIgaW4KKwkJKiIgJHByZXJlcXVpc2l0ZSAiKikKKwkJCXNhdGlzZmllZF90aGlzX3ByZXJlcT10CisJCQk7OworCQkqKQorCQkJc2F0aXNmaWVkX3RoaXNfcHJlcmVxPQorCQllc2FjCisKKwkJY2FzZSAiJHNhdGlzZmllZF90aGlzX3ByZXJlcSwkbmVnYXRpdmVfcHJlcmVxIiBpbgorCQl0LHwsdCkKKwkJCW9rX3ByZXJlcT0kKCgkb2tfcHJlcmVxICsgMSkpCisJCQk7OworCQkqKQorCQkJIyBLZWVwIGEgbGlzdCBvZiBtaXNzaW5nIHByZXJlcXVpc2l0ZXM7IHJlc3RvcmUKKwkJCSMgdGhlIG5lZ2F0aXZlIG1hcmtlciBpZiBuZWNlc3NhcnkuCisJCQlwcmVyZXF1aXNpdGU9JHtuZWdhdGl2ZV9wcmVyZXE6KyF9JHByZXJlcXVpc2l0ZQorCQkJaWYgdGVzdCAteiAiJG1pc3NpbmdfcHJlcmVxIgorCQkJdGhlbgorCQkJCW1pc3NpbmdfcHJlcmVxPSRwcmVyZXF1aXNpdGUKKwkJCWVsc2UKKwkJCQltaXNzaW5nX3ByZXJlcT0iJHByZXJlcXVpc2l0ZSwkbWlzc2luZ19wcmVyZXEiCisJCQlmaQorCQllc2FjCisJZG9uZQorCisJdGVzdCAkdG90YWxfcHJlcmVxID0gJG9rX3ByZXJlcQorfQorCit0ZXN0X2RlY2xhcmVkX3ByZXJlcSAoKSB7CisJY2FzZSAiLCR0ZXN0X3ByZXJlcSwiIGluCisJKiwkMSwqKQorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKKwlyZXR1cm4gMQorfQorCit0ZXN0X3ZlcmlmeV9wcmVyZXEgKCkgeworCXRlc3QgLXogIiR0ZXN0X3ByZXJlcSIgfHwKKwlleHByID4vZGV2L251bGwgIiR0ZXN0X3ByZXJlcSIgOiAnW0EtWjAtOV8sIV0qJCcgfHwKKwlCVUcgIickdGVzdF9wcmVyZXEnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHByZXJlcSIKK30KKwordGVzdF9leHBlY3RfZmFpbHVyZSAoKSB7CisJdGVzdF9zdGFydF8KKwl0ZXN0ICIkIyIgPSAzICYmIHsgdGVzdF9wcmVyZXE9JDE7IHNoaWZ0OyB9IHx8IHRlc3RfcHJlcmVxPQorCXRlc3QgIiQjIiA9IDIgfHwKKwlCVUcgIm5vdCAyIG9yIDMgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1mYWlsdXJlIgorCXRlc3RfdmVyaWZ5X3ByZXJlcQorCWV4cG9ydCB0ZXN0X3ByZXJlcQorCWlmICEgdGVzdF9za2lwICIkQCIKKwl0aGVuCisJCXNheSA+JjMgImNoZWNraW5nIGtub3duIGJyZWFrYWdlIG9mICRURVNUX05VTUJFUi4kdGVzdF9jb3VudCAnJDEnOiAkMiIKKwkJaWYgdGVzdF9ydW5fICIkMiIgZXhwZWN0aW5nX2ZhaWx1cmUKKwkJdGhlbgorCQkJdGVzdF9rbm93bl9icm9rZW5fb2tfICIkMSIKKwkJZWxzZQorCQkJdGVzdF9rbm93bl9icm9rZW5fZmFpbHVyZV8gIiQxIgorCQlmaQorCWZpCisJdGVzdF9maW5pc2hfCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgKCkgeworCXRlc3Rfc3RhcnRfCisJdGVzdCAiJCMiID0gMyAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAyIHx8CisJQlVHICJub3QgMiBvciAzIHBhcmFtZXRlcnMgdG8gdGVzdC1leHBlY3Qtc3VjY2VzcyIKKwl0ZXN0X3ZlcmlmeV9wcmVyZXEKKwlleHBvcnQgdGVzdF9wcmVyZXEKKwlpZiAhIHRlc3Rfc2tpcCAiJEAiCisJdGhlbgorCQlzYXkgPiYzICJleHBlY3Rpbmcgc3VjY2VzcyBvZiAkVEVTVF9OVU1CRVIuJHRlc3RfY291bnQgJyQxJzogJDIiCisJCWlmIHRlc3RfcnVuXyAiJDIiCisJCXRoZW4KKwkJCXRlc3Rfb2tfICIkMSIKKwkJZWxzZQorCQkJdGVzdF9mYWlsdXJlXyAiJEAiCisJCWZpCisJZmkKKwl0ZXN0X2ZpbmlzaF8KK30KKworIyB0ZXN0X2V4dGVybmFsIHJ1bnMgZXh0ZXJuYWwgdGVzdCBzY3JpcHRzIHRoYXQgcHJvdmlkZSBjb250aW51b3VzCisjIHRlc3Qgb3V0cHV0IGFib3V0IHRoZWlyIHByb2dyZXNzLCBhbmQgc3VjY2VlZHMvZmFpbHMgb24KKyMgemVyby9ub24temVybyBleGl0IGNvZGUuICBJdCBvdXRwdXRzIHRoZSB0ZXN0IG91dHB1dCBvbiBzdGRvdXQgZXZlbgorIyBpbiBub24tdmVyYm9zZSBtb2RlLCBhbmQgYW5ub3VuY2VzIHRoZSBleHRlcm5hbCBzY3JpcHQgd2l0aCAiIyBydW4KKyMgPG4+OiAuLi4iIGJlZm9yZSBydW5uaW5nIGl0LiAgV2hlbiBwcm92aWRpbmcgcmVsYXRpdmUgcGF0aHMsIGtlZXAgaW4KKyMgbWluZCB0aGF0IGFsbCBzY3JpcHRzIHJ1biBpbiAidHJhc2ggZGlyZWN0b3J5Ii4KKyMgVXNhZ2U6IHRlc3RfZXh0ZXJuYWwgZGVzY3JpcHRpb24gY29tbWFuZCBhcmd1bWVudHMuLi4KKyMgRXhhbXBsZTogdGVzdF9leHRlcm5hbCAnUGVybCBBUEknIHBlcmwgLi4vcGF0aC90by90ZXN0LnBsCit0ZXN0X2V4dGVybmFsICgpIHsKKwl0ZXN0ICIkIyIgPSA0ICYmIHsgdGVzdF9wcmVyZXE9JDE7IHNoaWZ0OyB9IHx8IHRlc3RfcHJlcmVxPQorCXRlc3QgIiQjIiA9IDMgfHwKKwlCVUcgIm5vdCAzIG9yIDQgcGFyYW1ldGVycyB0byB0ZXN0X2V4dGVybmFsIgorCWRlc2NyPSIkMSIKKwlzaGlmdAorCXRlc3RfdmVyaWZ5X3ByZXJlcQorCWV4cG9ydCB0ZXN0X3ByZXJlcQorCWlmICEgdGVzdF9za2lwICIkZGVzY3IiICIkQCIKKwl0aGVuCisJCSMgQW5ub3VuY2UgdGhlIHNjcmlwdCB0byByZWR1Y2UgY29uZnVzaW9uIGFib3V0IHRoZQorCQkjIHRlc3Qgb3V0cHV0IHRoYXQgZm9sbG93cy4KKwkJc2F5X2NvbG9yICIiICIjIHJ1biAkdGVzdF9jb3VudDogJGRlc2NyICgkKikiCisJCSMgRXhwb3J0IFRFU1RfRElSRUNUT1JZLCBUUkFTSF9ESVJFQ1RPUlkgYW5kIEdJVF9URVNUX0xPTkcKKwkJIyB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGluIHNjcmlwdAorCQlleHBvcnQgVEVTVF9ESVJFQ1RPUlkgVFJBU0hfRElSRUNUT1JZIEdJVF9URVNUX0xPTkcKKwkJIyBSdW4gY29tbWFuZDsgcmVkaXJlY3QgaXRzIHN0ZGVyciB0byAmNCBhcyBpbgorCQkjIHRlc3RfcnVuXywgYnV0IGtlZXAgaXRzIHN0ZG91dCBvbiBvdXIgc3Rkb3V0IGV2ZW4gaW4KKwkJIyBub24tdmVyYm9zZSBtb2RlLgorCQkiJEAiIDI+JjQKKwkJaWYgdGVzdCAiJD8iID0gMAorCQl0aGVuCisJCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDA7IHRoZW4KKwkJCQl0ZXN0X29rXyAiJGRlc2NyIgorCQkJZWxzZQorCQkJCXNheV9jb2xvciAiIiAiIyB0ZXN0X2V4dGVybmFsIHRlc3QgJGRlc2NyIHdhcyBvayIKKwkJCQl0ZXN0X3N1Y2Nlc3M9JCgoJHRlc3Rfc3VjY2VzcyArIDEpKQorCQkJZmkKKwkJZWxzZQorCQkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwOyB0aGVuCisJCQkJdGVzdF9mYWlsdXJlXyAiJGRlc2NyIiAiJEAiCisJCQllbHNlCisJCQkJc2F5X2NvbG9yIGVycm9yICIjIHRlc3RfZXh0ZXJuYWwgdGVzdCAkZGVzY3IgZmFpbGVkOiAkQCIKKwkJCQl0ZXN0X2ZhaWx1cmU9JCgoJHRlc3RfZmFpbHVyZSArIDEpKQorCQkJZmkKKwkJZmkKKwlmaQorfQorCisjIExpa2UgdGVzdF9leHRlcm5hbCwgYnV0IGluIGFkZGl0aW9uIHRlc3RzIHRoYXQgdGhlIGNvbW1hbmQgZ2VuZXJhdGVkCisjIG5vIG91dHB1dCBvbiBzdGRlcnIuCit0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyICgpIHsKKwkjIFRoZSB0ZW1wb3JhcnkgZmlsZSBoYXMgbm8gKGFuZCBtdXN0IGhhdmUgbm8pIHNlY3VyaXR5CisJIyBpbXBsaWNhdGlvbnMuCisJdG1wPSR7VE1QRElSOi0vdG1wfQorCXN0ZGVycj0iJHRtcC9naXQtZXh0ZXJuYWwtc3RkZXJyLiQkLnRtcCIKKwl0ZXN0X2V4dGVybmFsICIkQCIgND4gIiRzdGRlcnIiCisJdGVzdCAtZiAiJHN0ZGVyciIgfHwgZXJyb3IgIkludGVybmFsIGVycm9yOiAkc3RkZXJyIGRpc2FwcGVhcmVkLiIKKwlkZXNjcj0ibm8gc3RkZXJyOiAkMSIKKwlzaGlmdAorCXNheSA+JjMgIiMgZXhwZWN0aW5nIG5vIHN0ZGVyciBmcm9tIHByZXZpb3VzIGNvbW1hbmQiCisJaWYgdGVzdCAhIC1zICIkc3RkZXJyIgorCXRoZW4KKwkJcm0gIiRzdGRlcnIiCisKKwkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwOyB0aGVuCisJCQl0ZXN0X29rXyAiJGRlc2NyIgorCQllbHNlCisJCQlzYXlfY29sb3IgIiIgIiMgdGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciB0ZXN0ICRkZXNjciB3YXMgb2siCisJCQl0ZXN0X3N1Y2Nlc3M9JCgoJHRlc3Rfc3VjY2VzcyArIDEpKQorCQlmaQorCWVsc2UKKwkJaWYgdGVzdCAiJHZlcmJvc2UiID0gdAorCQl0aGVuCisJCQlvdXRwdXQ9JChlY2hvOyBlY2hvICIjIFN0ZGVyciBpczoiOyBjYXQgIiRzdGRlcnIiKQorCQllbHNlCisJCQlvdXRwdXQ9CisJCWZpCisJCSMgcm0gZmlyc3QgaW4gY2FzZSB0ZXN0X2ZhaWx1cmUgZXhpdHMuCisJCXJtICIkc3RkZXJyIgorCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDA7IHRoZW4KKwkJCXRlc3RfZmFpbHVyZV8gIiRkZXNjciIgIiRAIiAiJG91dHB1dCIKKwkJZWxzZQorCQkJc2F5X2NvbG9yIGVycm9yICIjIHRlc3RfZXh0ZXJuYWxfd2l0aG91dF9zdGRlcnIgdGVzdCAkZGVzY3IgZmFpbGVkOiAkQDogJG91dHB1dCIKKwkJCXRlc3RfZmFpbHVyZT0kKCgkdGVzdF9mYWlsdXJlICsgMSkpCisJCWZpCisJZmkKK30KKworIyBkZWJ1Z2dpbmctZnJpZW5kbHkgYWx0ZXJuYXRpdmVzIHRvICJ0ZXN0IFstZnwtZHwtZV0iCisjIFRoZSBjb21tYW5kcyB0ZXN0IHRoZSBleGlzdGVuY2Ugb3Igbm9uLWV4aXN0ZW5jZSBvZiAkMS4gJDIgY2FuIGJlCisjIGdpdmVuIHRvIHByb3ZpZGUgYSBtb3JlIHByZWNpc2UgZGlhZ25vc2lzLgordGVzdF9wYXRoX2lzX2ZpbGUgKCkgeworCWlmICEgdGVzdCAtZiAiJDEiCisJdGhlbgorCQllY2hvICJGaWxlICQxIGRvZXNuJ3QgZXhpc3QuICQyIgorCQlmYWxzZQorCWZpCit9CisKK3Rlc3RfcGF0aF9pc19kaXIgKCkgeworCWlmICEgdGVzdCAtZCAiJDEiCisJdGhlbgorCQllY2hvICJEaXJlY3RvcnkgJDEgZG9lc24ndCBleGlzdC4gJDIiCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9wYXRoX2V4aXN0cyAoKSB7CisJaWYgISB0ZXN0IC1lICIkMSIKKwl0aGVuCisJCWVjaG8gIlBhdGggJDEgZG9lc24ndCBleGlzdC4gJDIiCisJCWZhbHNlCisJZmkKK30KKworIyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgZW1wdHkgYXMgZXhwZWN0ZWQsIGJhcmYgb3RoZXJ3aXNlLgordGVzdF9kaXJfaXNfZW1wdHkgKCkgeworCXRlc3RfcGF0aF9pc19kaXIgIiQxIiAmJgorCWlmIHRlc3QgLW4gIiQobHMgLWExICIkMSIgfCBlZ3JlcCAtdiAnXlwuXC4/JCcpIgorCXRoZW4KKwkJZWNobyAiRGlyZWN0b3J5ICckMScgaXMgbm90IGVtcHR5LCBpdCBjb250YWluczoiCisJCWxzIC1sYSAiJDEiCisJCXJldHVybiAxCisJZmkKK30KKworIyBDaGVjayBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIGhhcyBhIHNpemUgZ3JlYXRlciB0aGFuIHplcm8KK3Rlc3RfZmlsZV9ub3RfZW1wdHkgKCkgeworCWlmICEgdGVzdCAtcyAiJDEiCisJdGhlbgorCQllY2hvICInJDEnIGlzIG5vdCBhIG5vbi1lbXB0eSBmaWxlLiIKKwkJZmFsc2UKKwlmaQorfQorCit0ZXN0X3BhdGhfaXNfbWlzc2luZyAoKSB7CisJaWYgdGVzdCAtZSAiJDEiCisJdGhlbgorCQllY2hvICJQYXRoIGV4aXN0czoiCisJCWxzIC1sZCAiJDEiCisJCWlmIHRlc3QgJCMgLWdlIDEKKwkJdGhlbgorCQkJZWNobyAiJCoiCisJCWZpCisJCWZhbHNlCisJZmkKK30KKworIyB0ZXN0X2xpbmVfY291bnQgY2hlY2tzIHRoYXQgYSBmaWxlIGhhcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGl0CisjIG91Z2h0IHRvLiBGb3IgZXhhbXBsZToKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZHVjZSBleGFjdGx5IG9uZSBsaW5lIG9mIG91dHB1dCcgJworIwkJZG8gc29tZXRoaW5nID5vdXRwdXQgJiYKKyMJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0cHV0CisjCScKKyMKKyMgaXMgbGlrZSAidGVzdCAkKHdjIC1sIDxvdXRwdXQpID0gMSIgZXhjZXB0IHRoYXQgaXQgcGFzc2VzIHRoZQorIyBvdXRwdXQgdGhyb3VnaCB3aGVuIHRoZSBudW1iZXIgb2YgbGluZXMgaXMgd3JvbmcuCisKK3Rlc3RfbGluZV9jb3VudCAoKSB7CisJaWYgdGVzdCAkIyAhPSAzCisJdGhlbgorCQlCVUcgIm5vdCAzIHBhcmFtZXRlcnMgdG8gdGVzdF9saW5lX2NvdW50IgorCWVsaWYgISB0ZXN0ICQod2MgLWwgPCIkMyIpICIkMSIgIiQyIgorCXRoZW4KKwkJZWNobyAidGVzdF9saW5lX2NvdW50OiBsaW5lIGNvdW50IGZvciAkMyAhJDEgJDIiCisJCWNhdCAiJDMiCisJCXJldHVybiAxCisJZmkKK30KKworIyBSZXR1cm5zIHN1Y2Nlc3MgaWYgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXdvcmRzICgkMSkgY29udGFpbnMgYQorIyBnaXZlbiBrZXl3b3JkICgkMikuCisjIEV4YW1wbGVzOgorIyBgbGlzdF9jb250YWlucyAiZm9vLGJhciIgYmFyYCByZXR1cm5zIDAKKyMgYGxpc3RfY29udGFpbnMgImZvbyIgYmFyYCByZXR1cm5zIDEKKworbGlzdF9jb250YWlucyAoKSB7CisJY2FzZSAiLCQxLCIgaW4KKwkqLCQyLCopCisJCXJldHVybiAwCisJCTs7CisJZXNhYworCXJldHVybiAxCit9CisKKyMgVGhpcyBpcyBub3QgYW1vbmcgdG9wLWxldmVsICh0ZXN0X2V4cGVjdF9zdWNjZXNzIHwgdGVzdF9leHBlY3RfZmFpbHVyZSkKKyMgYnV0IGlzIGEgcHJlZml4IHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHRlc3Qgc2NyaXB0LCBsaWtlOgorIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGFpbiBhbmQgZGllJyAnCisjICAgICAgICAgICBkbyBzb21ldGhpbmcgJiYKKyMgICAgICAgICAgIGRvIHNvbWV0aGluZyBlbHNlICYmCisjCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLi4vb3V0ZXJzcGFjZQorIwknCisjCisjIFdyaXRpbmcgdGhpcyBhcyAiISBnaXQgY2hlY2tvdXQgLi4vb3V0ZXJzcGFjZSIgaXMgd3JvbmcsIGJlY2F1c2UKKyMgdGhlIGZhaWx1cmUgY291bGQgYmUgZHVlIHRvIGEgc2Vndi4gIFdlIHdhbnQgYSBjb250cm9sbGVkIGZhaWx1cmUuCisjCisjIEFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorIworIyAgIG9rPTxzaWduYWwtbmFtZT5bLDwuLi4+XToKKyMgICAgIERvbid0IHRyZWF0IGFuIGV4aXQgY2F1c2VkIGJ5IHRoZSBnaXZlbiBzaWduYWwgYXMgZXJyb3IuCisjICAgICBNdWx0aXBsZSBzaWduYWxzIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4KKyMgICAgIEN1cnJlbnRseSByZWNvZ25pemVkIHNpZ25hbCBuYW1lcyBhcmU6IHNpZ3BpcGUsIHN1Y2Nlc3MuCisjICAgICAoRG9uJ3QgdXNlICdzdWNjZXNzJywgdXNlICd0ZXN0X21pZ2h0X2ZhaWwnIGluc3RlYWQuKQorCit0ZXN0X211c3RfZmFpbCAoKSB7CisJY2FzZSAiJDEiIGluCisJb2s9KikKKwkJX3Rlc3Rfb2s9JHsxI29rPX0KKwkJc2hpZnQKKwkJOzsKKwkqKQorCQlfdGVzdF9vaz0KKwkJOzsKKwllc2FjCisJIiRAIiAyPiY3CisJZXhpdF9jb2RlPSQ/CisJaWYgdGVzdCAkZXhpdF9jb2RlIC1lcSAwICYmICEgbGlzdF9jb250YWlucyAiJF90ZXN0X29rIiBzdWNjZXNzCisJdGhlbgorCQllY2hvID4mNCAidGVzdF9tdXN0X2ZhaWw6IGNvbW1hbmQgc3VjY2VlZGVkOiAkKiIKKwkJcmV0dXJuIDEKKwllbGlmIHRlc3RfbWF0Y2hfc2lnbmFsIDEzICRleGl0X2NvZGUgJiYgbGlzdF9jb250YWlucyAiJF90ZXN0X29rIiBzaWdwaXBlCisJdGhlbgorCQlyZXR1cm4gMAorCWVsaWYgdGVzdCAkZXhpdF9jb2RlIC1ndCAxMjkgJiYgdGVzdCAkZXhpdF9jb2RlIC1sZSAxOTIKKwl0aGVuCisJCWVjaG8gPiY0ICJ0ZXN0X211c3RfZmFpbDogZGllZCBieSBzaWduYWwgJCgoJGV4aXRfY29kZSAtIDEyOCkpOiAkKiIKKwkJcmV0dXJuIDEKKwllbGlmIHRlc3QgJGV4aXRfY29kZSAtZXEgMTI3CisJdGhlbgorCQllY2hvID4mNCAidGVzdF9tdXN0X2ZhaWw6IGNvbW1hbmQgbm90IGZvdW5kOiAkKiIKKwkJcmV0dXJuIDEKKwllbGlmIHRlc3QgJGV4aXRfY29kZSAtZXEgMTI2CisJdGhlbgorCQllY2hvID4mNCAidGVzdF9tdXN0X2ZhaWw6IHZhbGdyaW5kIGVycm9yOiAkKiIKKwkJcmV0dXJuIDEKKwlmaQorCXJldHVybiAwCit9IDc+JjIgMj4mNAorCisjIFNpbWlsYXIgdG8gdGVzdF9tdXN0X2ZhaWwsIGJ1dCB0b2xlcmF0ZXMgc3VjY2VzcywgdG9vLiAgVGhpcyBpcworIyBtZWFudCB0byBiZSB1c2VkIGluIGNvbnRleHRzIGxpa2U6CisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvbWUgY29tbWFuZCB3b3JrcyB3aXRob3V0IGNvbmZpZ3VyYXRpb24nICcKKyMJCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgYWxsLmNvbmZpZ3VyYXRpb24gJiYKKyMJCWRvIHNvbWV0aGluZworIwknCisjCisjIFdyaXRpbmcgImdpdCBjb25maWcgLS11bnNldCBhbGwuY29uZmlndXJhdGlvbiB8fCA6IiB3b3VsZCBiZSB3cm9uZywKKyMgYmVjYXVzZSB3ZSB3YW50IHRvIG5vdGljZSBpZiBpdCBmYWlscyBkdWUgdG8gc2Vndi4KKyMKKyMgQWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIHRlc3RfbXVzdF9mYWlsLgorCit0ZXN0X21pZ2h0X2ZhaWwgKCkgeworCXRlc3RfbXVzdF9mYWlsIG9rPXN1Y2Nlc3MgIiRAIiAyPiY3Cit9IDc+JjIgMj4mNAorCisjIFNpbWlsYXIgdG8gdGVzdF9tdXN0X2ZhaWwgYW5kIHRlc3RfbWlnaHRfZmFpbCwgYnV0IGNoZWNrIHRoYXQgYQorIyBnaXZlbiBjb21tYW5kIGV4aXRlZCB3aXRoIGEgZ2l2ZW4gZXhpdCBjb2RlLiBNZWFudCB0byBiZSB1c2VkIGFzOgorIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSB3aXRoIGQvZiBjb25mbGljdHMnICcKKyMJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UgIm1lcmdlIG1zZyIgQiBtYXN0ZXIKKyMJJworCit0ZXN0X2V4cGVjdF9jb2RlICgpIHsKKwl3YW50X2NvZGU9JDEKKwlzaGlmdAorCSIkQCIgMj4mNworCWV4aXRfY29kZT0kPworCWlmIHRlc3QgJGV4aXRfY29kZSA9ICR3YW50X2NvZGUKKwl0aGVuCisJCXJldHVybiAwCisJZmkKKworCWVjaG8gPiY0ICJ0ZXN0X2V4cGVjdF9jb2RlOiBjb21tYW5kIGV4aXRlZCB3aXRoICRleGl0X2NvZGUsIHdlIHdhbnRlZCAkd2FudF9jb2RlICQqIgorCXJldHVybiAxCit9IDc+JjIgMj4mNAorCisjIHRlc3RfY21wIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGNvbXBhcmUgYWN0dWFsIGFuZCBleHBlY3RlZCBvdXRwdXQuCisjIFlvdSBjYW4gdXNlIGl0IGxpa2U6CisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbyB3b3JrcycgJworIwkJZWNobyBleHBlY3RlZCA+ZXhwZWN0ZWQgJiYKKyMJCWZvbyA+YWN0dWFsICYmCisjCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyMJJworIworIyBUaGlzIGNvdWxkIGJlIHdyaXR0ZW4gYXMgZWl0aGVyICJjbXAiIG9yICJkaWZmIC11IiwgYnV0OgorIyAtIGNtcCdzIG91dHB1dCBpcyBub3QgbmVhcmx5IGFzIGVhc3kgdG8gcmVhZCBhcyBkaWZmIC11CisjIC0gbm90IGFsbCBkaWZmIHZlcnNpb25zIHVuZGVyc3RhbmQgIi11IgorCit0ZXN0X2NtcCgpIHsKKwkkR0lUX1RFU1RfQ01QICIkQCIKK30KKworIyBDaGVjayB0aGF0IHRoZSBnaXZlbiBjb25maWcga2V5IGhhcyB0aGUgZXhwZWN0ZWQgdmFsdWUuCisjCisjICAgIHRlc3RfY21wX2NvbmZpZyBbLUMgPGRpcj5dIDxleHBlY3RlZC12YWx1ZT4KKyMgICAgICAgICAgICAgICAgICAgIFs8Z2l0LWNvbmZpZy1vcHRpb25zPi4uLl0gPGNvbmZpZy1rZXk+CisjCisjIGZvciBleGFtcGxlIHRvIGNoZWNrIHRoYXQgdGhlIHZhbHVlIG9mIGNvcmUuYmFyIGlzIGZvbworIworIyAgICB0ZXN0X2NtcF9jb25maWcgZm9vIGNvcmUuYmFyCisjCit0ZXN0X2NtcF9jb25maWcoKSB7CisJbG9jYWwgR0QgJiYKKwlpZiB0ZXN0ICIkMSIgPSAiLUMiCisJdGhlbgorCQlzaGlmdCAmJgorCQlHRD0iLUMgJDEiICYmCisJCXNoaWZ0CisJZmkgJiYKKwlwcmludGYgIiVzXG4iICIkMSIgPmV4cGVjdC5jb25maWcgJiYKKwlzaGlmdCAmJgorCWdpdCAkR0QgY29uZmlnICIkQCIgPmFjdHVhbC5jb25maWcgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29uZmlnIGFjdHVhbC5jb25maWcKK30KKworIyB0ZXN0X2NtcF9iaW4gLSBoZWxwZXIgdG8gY29tcGFyZSBiaW5hcnkgZmlsZXMKKwordGVzdF9jbXBfYmluKCkgeworCWNtcCAiJEAiCit9CisKKyMgVXNlIHRoaXMgaW5zdGVhZCBvZiB0ZXN0X2NtcCB0byBjb21wYXJlIGZpbGVzIHRoYXQgY29udGFpbiBleHBlY3RlZCBhbmQKKyMgYWN0dWFsIG91dHB1dCBmcm9tIGdpdCBjb21tYW5kcyB0aGF0IGNhbiBiZSB0cmFuc2xhdGVkLiAgV2hlbiBydW5uaW5nCisjIHVuZGVyIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OIHRoaXMgcHJldGVuZHMgdGhhdCB0aGUgY29tbWFuZCBwcm9kdWNlZCBleHBlY3RlZAorIyByZXN1bHRzLgordGVzdF9pMThuY21wICgpIHsKKwkhIHRlc3RfaGF2ZV9wcmVyZXEgQ19MT0NBTEVfT1VUUFVUIHx8IHRlc3RfY21wICIkQCIKK30KKworIyBVc2UgdGhpcyBpbnN0ZWFkIG9mICJncmVwIGV4cGVjdGVkLXN0cmluZyBhY3R1YWwiIHRvIHNlZSBpZiB0aGUKKyMgb3V0cHV0IGZyb20gYSBnaXQgY29tbWFuZCB0aGF0IGNhbiBiZSB0cmFuc2xhdGVkIGVpdGhlciBjb250YWlucyBhbgorIyBleHBlY3RlZCBzdHJpbmcsIG9yIGRvZXMgbm90IGNvbnRhaW4gYW4gdW53YW50ZWQgb25lLiAgV2hlbiBydW5uaW5nCisjIHVuZGVyIEdJVF9URVNUX0dFVFRFWFRfUE9JU09OIHRoaXMgcHJldGVuZHMgdGhhdCB0aGUgY29tbWFuZCBwcm9kdWNlZCBleHBlY3RlZAorIyByZXN1bHRzLgordGVzdF9pMThuZ3JlcCAoKSB7CisJZXZhbCAibGFzdF9hcmc9XCR7JCN9IgorCisJdGVzdCAtZiAiJGxhc3RfYXJnIiB8fAorCUJVRyAidGVzdF9pMThuZ3JlcCByZXF1aXJlcyBhIGZpbGUgdG8gcmVhZCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIiCisKKwlpZiB0ZXN0ICQjIC1sdCAyIHx8CisJICAgeyB0ZXN0ICJ4ISIgPSAieCQxIiAmJiB0ZXN0ICQjIC1sdCAzIDsgfQorCXRoZW4KKwkJQlVHICJ0b28gZmV3IHBhcmFtZXRlcnMgdG8gdGVzdF9pMThuZ3JlcCIKKwlmaQorCisJaWYgdGVzdF9oYXZlX3ByZXJlcSAhQ19MT0NBTEVfT1VUUFVUCisJdGhlbgorCQkjIHByZXRlbmQgc3VjY2VzcworCQlyZXR1cm4gMAorCWZpCisKKwlpZiB0ZXN0ICJ4ISIgPSAieCQxIgorCXRoZW4KKwkJc2hpZnQKKwkJISBncmVwICIkQCIgJiYgcmV0dXJuIDAKKworCQllY2hvID4mNCAiZXJyb3I6ICchIGdyZXAgJEAnIGRpZCBmaW5kIGEgbWF0Y2ggaW46IgorCWVsc2UKKwkJZ3JlcCAiJEAiICYmIHJldHVybiAwCisKKwkJZWNobyA+JjQgImVycm9yOiAnZ3JlcCAkQCcgZGlkbid0IGZpbmQgYSBtYXRjaCBpbjoiCisJZmkKKworCWlmIHRlc3QgLXMgIiRsYXN0X2FyZyIKKwl0aGVuCisJCWNhdCA+JjQgIiRsYXN0X2FyZyIKKwllbHNlCisJCWVjaG8gPiY0ICI8RmlsZSAnJGxhc3RfYXJnJyBpcyBlbXB0eT4iCisJZmkKKworCXJldHVybiAxCit9CisKKyMgQ2FsbCBhbnkgY29tbWFuZCAiJEAiIGJ1dCBiZSBtb3JlIHZlcmJvc2UgYWJvdXQgaXRzCisjIGZhaWx1cmUuIFRoaXMgaXMgaGFuZHkgZm9yIGNvbW1hbmRzIGxpa2UgInRlc3QiIHdoaWNoIGRvCisjIG5vdCBvdXRwdXQgYW55dGhpbmcgd2hlbiB0aGV5IGZhaWwuCit2ZXJib3NlICgpIHsKKwkiJEAiICYmIHJldHVybiAwCisJZWNobyA+JjQgImNvbW1hbmQgZmFpbGVkOiAkKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiKSIKKwlyZXR1cm4gMQorfQorCisjIENoZWNrIGlmIHRoZSBmaWxlIGV4cGVjdGVkIHRvIGJlIGVtcHR5IGlzIGluZGVlZCBlbXB0eSwgYW5kIGJhcmZzCisjIG90aGVyd2lzZS4KKwordGVzdF9tdXN0X2JlX2VtcHR5ICgpIHsKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJDEiICYmCisJaWYgdGVzdCAtcyAiJDEiCisJdGhlbgorCQllY2hvICInJDEnIGlzIG5vdCBlbXB0eSwgaXQgY29udGFpbnM6IgorCQljYXQgIiQxIgorCQlyZXR1cm4gMQorCWZpCit9CisKKyMgVGVzdHMgdGhhdCBpdHMgdHdvIHBhcmFtZXRlcnMgcmVmZXIgdG8gdGhlIHNhbWUgcmV2aXNpb24sIG9yIGlmICchJyBpcworIyBwcm92aWRlZCBmaXJzdCwgdGhhdCBpdHMgb3RoZXIgdHdvIHBhcmFtZXRlcnMgcmVmZXIgdG8gZGlmZmVyZW50CisjIHJldmlzaW9ucy4KK3Rlc3RfY21wX3JldiAoKSB7CisJbG9jYWwgb3A9Jz0nIHdyb25nX3Jlc3VsdD1kaWZmZXJlbnQKKworCWlmIHRlc3QgJCMgLWdlIDEgJiYgdGVzdCAieCQxIiA9ICd4IScKKwl0aGVuCisJICAgIG9wPSchPScKKwkgICAgd3JvbmdfcmVzdWx0PSd0aGUgc2FtZScKKwkgICAgc2hpZnQKKwlmaQorCWlmIHRlc3QgJCMgIT0gMgorCXRoZW4KKwkJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IHRlc3RfY21wX3JldiByZXF1aXJlcyB0d28gcmV2aXNpb25zLCBidXQgZ290ICQjIgorCWVsc2UKKwkJbG9jYWwgcjEgcjIKKwkJcjE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIpICYmCisJCXIyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDIiKSB8fCByZXR1cm4gMQorCisJCWlmICEgdGVzdCAiJHIxIiAiJG9wIiAiJHIyIgorCQl0aGVuCisJCQljYXQgPiY0IDw8LUVPRgorCQkJZXJyb3I6IHR3byByZXZpc2lvbnMgcG9pbnQgdG8gJHdyb25nX3Jlc3VsdCBvYmplY3RzOgorCQkJICAnJDEnOiAkcjEKKwkJCSAgJyQyJzogJHIyCisJCQlFT0YKKwkJCXJldHVybiAxCisJCWZpCisJZmkKK30KKworIyBDb21wYXJlIHBhdGhzIHJlc3BlY3RpbmcgY29yZS5pZ25vcmVDYXNlCit0ZXN0X2NtcF9mc3BhdGggKCkgeworCWlmIHRlc3QgIngkMSIgPSAieCQyIgorCXRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCisJaWYgdGVzdCB0cnVlICE9ICIkKGdpdCBjb25maWcgLS1nZXQgLS10eXBlPWJvb2wgY29yZS5pZ25vcmVjYXNlKSIKKwl0aGVuCisJCXJldHVybiAxCisJZmkKKworCXRlc3QgIngkKGVjaG8gIiQxIiB8IHRyIEEtWiBhLXopIiA9ICAieCQoZWNobyAiJDIiIHwgdHIgQS1aIGEteikiCit9CisKKyMgUHJpbnQgYSBzZXF1ZW5jZSBvZiBpbnRlZ2VycyBpbiBpbmNyZWFzaW5nIG9yZGVyLCBlaXRoZXIgd2l0aAorIyB0d28gYXJndW1lbnRzIChzdGFydCBhbmQgZW5kKToKKyMKKyMgICAgIHRlc3Rfc2VxIDEgNSAtLSBvdXRwdXRzIDEgMiAzIDQgNSBvbmUgbGluZSBhdCBhIHRpbWUKKyMKKyMgb3Igd2l0aCBvbmUgYXJndW1lbnQgKGVuZCksIGluIHdoaWNoIGNhc2UgaXQgc3RhcnRzIGNvdW50aW5nCisjIGZyb20gMS4KKwordGVzdF9zZXEgKCkgeworCWNhc2UgJCMgaW4KKwkxKQlzZXQgMSAiJEAiIDs7CisJMikJOzsKKwkqKQlCVUcgIm5vdCAxIG9yIDIgcGFyYW1ldGVycyB0byB0ZXN0X3NlcSIgOzsKKwllc2FjCisJdGVzdF9zZXFfY291bnRlcl9fPSQxCisJd2hpbGUgdGVzdCAiJHRlc3Rfc2VxX2NvdW50ZXJfXyIgLWxlICIkMiIKKwlkbworCQllY2hvICIkdGVzdF9zZXFfY291bnRlcl9fIgorCQl0ZXN0X3NlcV9jb3VudGVyX189JCgoICR0ZXN0X3NlcV9jb3VudGVyX18gKyAxICkpCisJZG9uZQorfQorCisjIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2NoZWR1bGUgc29tZSBjb21tYW5kcyB0byBiZSBydW4KKyMgdW5jb25kaXRpb25hbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QgdG8gcmVzdG9yZSBzYW5pdHk6CisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY29yZS5jYXBzbG9jaycgJworIwkJZ2l0IGNvbmZpZyBjb3JlLmNhcHNsb2NrIHRydWUgJiYKKyMJCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuY2Fwc2xvY2siICYmCisjCQloZWxsbyB3b3JsZAorIwknCisjCisjIFRoYXQgd291bGQgYmUgcm91Z2hseSBlcXVpdmFsZW50IHRvCisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY29yZS5jYXBzbG9jaycgJworIwkJZ2l0IGNvbmZpZyBjb3JlLmNhcHNsb2NrIHRydWUgJiYKKyMJCWhlbGxvIHdvcmxkCisjCQlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5jYXBzbG9jaworIwknCisjCisjIGV4Y2VwdCB0aGF0IHRoZSBncmVldGluZyBhbmQgY29uZmlnIC0tdW5zZXQgbXVzdCBib3RoIHN1Y2NlZWQgZm9yCisjIHRoZSB0ZXN0IHRvIHBhc3MuCisjCisjIE5vdGUgdGhhdCB1bmRlciAtLWltbWVkaWF0ZSBtb2RlLCBubyBjbGVhbi11cCBpcyBkb25lIHRvIGhlbHAgZGlhZ25vc2UKKyMgd2hhdCB3ZW50IHdyb25nLgorCit0ZXN0X3doZW5fZmluaXNoZWQgKCkgeworCSMgV2UgY2Fubm90IGRldGVjdCB3aGVuIHdlIGFyZSBpbiBhIHN1YnNoZWxsIGluIGdlbmVyYWwsIGJ1dCBieQorCSMgZG9pbmcgc28gb24gQmFzaCBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nICh0aGUgdGVzdCB3aWxsCisJIyBzaWxlbnRseSBwYXNzIG9uIG90aGVyIHNoZWxscykuCisJdGVzdCAiJHtCQVNIX1NVQlNIRUxMLTB9IiA9IDAgfHwKKwlCVUcgInRlc3Rfd2hlbl9maW5pc2hlZCBkb2VzIG5vdGhpbmcgaW4gYSBzdWJzaGVsbCIKKwl0ZXN0X2NsZWFudXA9InsgJCoKKwkJfSAmJiAoZXhpdCBcIlwkZXZhbF9yZXRcIik7IGV2YWxfcmV0PVwkPzsgJHRlc3RfY2xlYW51cCIKK30KKworIyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHNjaGVkdWxlIHNvbWUgY29tbWFuZHMgdG8gYmUgcnVuCisjIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHNjcmlwdCwgZS5nLiB0byBzdG9wIGEgZGFlbW9uOgorIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGdpdCBkYWVtb24nICcKKyMJCWdpdCBkYWVtb24gJgorIwkJZGFlbW9uX3BpZD0kISAmJgorIwkJdGVzdF9hdGV4aXQgJ2tpbGwgJGRhZW1vbl9waWQnICYmCisjCQloZWxsbyB3b3JsZAorIwknCisjCisjIFRoZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdHJhc2ggZGlyZWN0b3J5IGlzIHJlbW92ZWQsCisjIGkuZS4gdGhlIGF0ZXhpdCBjb21tYW5kcyB3aWxsIHN0aWxsIGJlIGFibGUgdG8gYWNjZXNzIGFueSBwaWRmaWxlcyBvcgorIyBzb2NrZXQgZmlsZXMuCisjCisjIE5vdGUgdGhhdCB0aGVzZSBjb21tYW5kcyB3aWxsIGJlIHJ1biBldmVuIHdoZW4gYSB0ZXN0IHNjcmlwdCBydW4KKyMgd2l0aCAnLS1pbW1lZGlhdGUnIGZhaWxzLiAgQmUgY2FyZWZ1bCB3aXRoIHlvdXIgYXRleGl0IGNvbW1hbmRzIHRvCisjIG1pbmltaXplIGFueSBjaGFuZ2VzIHRvIHRoZSBmYWlsZWQgc3RhdGUuCisKK3Rlc3RfYXRleGl0ICgpIHsKKwkjIFdlIGNhbm5vdCBkZXRlY3Qgd2hlbiB3ZSBhcmUgaW4gYSBzdWJzaGVsbCBpbiBnZW5lcmFsLCBidXQgYnkKKwkjIGRvaW5nIHNvIG9uIEJhc2ggaXMgYmV0dGVyIHRoYW4gbm90aGluZyAodGhlIHRlc3Qgd2lsbAorCSMgc2lsZW50bHkgcGFzcyBvbiBvdGhlciBzaGVsbHMpLgorCXRlc3QgIiR7QkFTSF9TVUJTSEVMTC0wfSIgPSAwIHx8CisJZXJyb3IgImJ1ZyBpbiB0ZXN0IHNjcmlwdDogdGVzdF9hdGV4aXQgZG9lcyBub3RoaW5nIGluIGEgc3Vic2hlbGwiCisJdGVzdF9hdGV4aXRfY2xlYW51cD0ieyAkKgorCQl9ICYmIChleGl0IFwiXCRldmFsX3JldFwiKTsgZXZhbF9yZXQ9XCQ/OyAkdGVzdF9hdGV4aXRfY2xlYW51cCIKK30KKworIyBNb3N0IHRlc3RzIGNhbiB1c2UgdGhlIGNyZWF0ZWQgcmVwb3NpdG9yeSwgYnV0IHNvbWUgbWF5IG5lZWQgdG8gY3JlYXRlIG1vcmUuCisjIFVzYWdlOiB0ZXN0X2NyZWF0ZV9yZXBvIDxkaXJlY3Rvcnk+Cit0ZXN0X2NyZWF0ZV9yZXBvICgpIHsKKwl0ZXN0ICIkIyIgPSAxIHx8CisJQlVHICJub3QgMSBwYXJhbWV0ZXIgdG8gdGVzdC1jcmVhdGUtcmVwbyIKKwlyZXBvPSIkMSIKKwlta2RpciAtcCAiJHJlcG8iCisJKAorCQljZCAiJHJlcG8iIHx8IGVycm9yICJDYW5ub3Qgc2V0dXAgdGVzdCBlbnZpcm9ubWVudCIKKwkJIiR7R0lUX1RFU1RfSU5TVEFMTEVEOi0kR0lUX0VYRUNfUEFUSH0vZ2l0JFgiIGluaXQgXAorCQkJIi0tdGVtcGxhdGU9JEdJVF9CVUlMRF9ESVIvdGVtcGxhdGVzL2JsdC8iID4mMyAyPiY0IHx8CisJCWVycm9yICJjYW5ub3QgcnVuIGdpdCBpbml0IC0tIGhhdmUgeW91IGJ1aWx0IHRoaW5ncyB5ZXQ/IgorCQltdiAuZ2l0L2hvb2tzIC5naXQvaG9va3MtZGlzYWJsZWQKKwkpIHx8IGV4aXQKK30KKworIyBUaGlzIGZ1bmN0aW9uIGhlbHBzIG9uIHN5bWxpbmsgY2hhbGxlbmdlZCBmaWxlIHN5c3RlbXMgd2hlbiBpdCBpcyBub3QKKyMgaW1wb3J0YW50IHRoYXQgdGhlIGZpbGUgc3lzdGVtIGVudHJ5IGlzIGEgc3ltYm9saWMgbGluay4KKyMgVXNlIHRlc3RfbG5fc19hZGQgaW5zdGVhZCBvZiAibG4gLXMgeCB5ICYmIGdpdCBhZGQgeSIgdG8gYWRkIGEKKyMgc3ltYm9saWMgbGluayBlbnRyeSB5IHRvIHRoZSBpbmRleC4KKwordGVzdF9sbl9zX2FkZCAoKSB7CisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUworCXRoZW4KKwkJbG4gLXMgIiQxIiAiJDIiICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiQyIgorCWVsc2UKKwkJcHJpbnRmICclcycgIiQxIiA+IiQyIiAmJgorCQlsbl9zX29iaj0kKGdpdCBoYXNoLW9iamVjdCAtdyAiJDIiKSAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEyMDAwMCAkbG5fc19vYmogIiQyIiAmJgorCQkjIHBpY2sgdXAgc3RhdCBpbmZvIGZyb20gdGhlIGZpbGUKKwkJZ2l0IHVwZGF0ZS1pbmRleCAiJDIiCisJZmkKK30KKworIyBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBvdXQgaXRzIHBhcmFtZXRlcnMsIG9uZSBwZXIgbGluZQordGVzdF93cml0ZV9saW5lcyAoKSB7CisJcHJpbnRmICIlc1xuIiAiJEAiCit9CisKK3BlcmwgKCkgeworCWNvbW1hbmQgIiRQRVJMX1BBVEgiICIkQCIgMj4mNworfSA3PiYyIDI+JjQKKworIyBHaXZlbiB0aGUgbmFtZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGEgYm9vbCB2YWx1ZSwgbm9ybWFsaXplCisjIGl0cyB2YWx1ZSB0byBhIDAgKHRydWUpIG9yIDEgKGZhbHNlIG9yIGVtcHR5IHN0cmluZykgcmV0dXJuIGNvZGUuCisjCisjICAgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9IVFRQRCA8ZGVmYXVsdC12YWx1ZT4KKyMKKyMgUmV0dXJuIHdpdGggY29kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBkZWZhdWx0IHZhbHVlIGlmIHRoZSB2YXJpYWJsZQorIyBpcyB1bnNldC4KKyMgQWJvcnQgdGhlIHRlc3Qgc2NyaXB0IGlmIGVpdGhlciB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIG9yIHRoZSBkZWZhdWx0CisjIGFyZSBub3QgdmFsaWQgYm9vbCB2YWx1ZXMuCisKK3Rlc3RfYm9vbF9lbnYgKCkgeworCWlmIHRlc3QgJCMgIT0gMgorCXRoZW4KKwkJQlVHICJ0ZXN0X2Jvb2xfZW52IHJlcXVpcmVzIHR3byBwYXJhbWV0ZXJzICh2YXJpYWJsZSBuYW1lIGFuZCBkZWZhdWx0IHZhbHVlKSIKKwlmaQorCisJZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD0iJDIiIC0tZXhpdC1jb2RlICIkMSIKKwlyZXQ9JD8KKwljYXNlICRyZXQgaW4KKwkwfDEpCSMgdW5zZXQgb3IgdmFsaWQgYm9vbCB2YWx1ZQorCQk7OworCSopCSMgaW52YWxpZCBib29sIHZhbHVlIG9yIHNvbWV0aGluZyB1bmV4cGVjdGVkCisJCWVycm9yID4mNyAidGVzdF9ib29sX2VudiByZXF1aXJlcyBib29sIHZhbHVlcyBib3RoIGZvciBcJCQxIGFuZCBmb3IgdGhlIGRlZmF1bHQgZmFsbGJhY2siCisJCTs7CisJZXNhYworCXJldHVybiAkcmV0Cit9CisKKyMgRXhpdCB0aGUgdGVzdCBzdWl0ZSwgZWl0aGVyIGJ5IHNraXBwaW5nIGFsbCByZW1haW5pbmcgdGVzdHMgb3IgYnkKKyMgZXhpdGluZyB3aXRoIGFuIGVycm9yLiBJZiBvdXIgcHJlcmVxdWlzaXRlIHZhcmlhYmxlICQxIGZhbGxzIGJhY2sKKyMgb24gYSBkZWZhdWx0IGFzc3VtZSB3ZSB3ZXJlIG9wcG9ydHVuaXN0aWNhbGx5IHRyeWluZyB0byBzZXQgdXAgc29tZQorIyB0ZXN0cyBhbmQgd2Ugc2tpcC4gSWYgaXQgaXMgZXhwbGljaXRseSAidHJ1ZSIsIHRoZW4gd2UgcmVwb3J0IGEgZmFpbHVyZS4KKyMKKyMgVGhlIGVycm9yL3NraXAgbWVzc2FnZSBzaG91bGQgYmUgZ2l2ZW4gYnkgJDIuCisjCit0ZXN0X3NraXBfb3JfZGllICgpIHsKKwlpZiAhIHRlc3RfYm9vbF9lbnYgIiQxIiBmYWxzZQorCXRoZW4KKwkJc2tpcF9hbGw9JDIKKwkJdGVzdF9kb25lCisJZmkKKwllcnJvciAiJDIiCit9CisKKyMgVGhlIGZvbGxvd2luZyBtaW5nd18qIGZ1bmN0aW9ucyBvYmV5IFBPU0lYIHNoZWxsIHN5bnRheCwgYnV0IGFyZSBhY3R1YWxseQorIyBiYXNoIHNjcmlwdHMsIGFuZCBhcmUgbWVhbnQgdG8gYmUgdXNlZCBvbmx5IHdpdGggYmFzaCBvbiBXaW5kb3dzLgorCisjIEEgdGVzdF9jbXAgZnVuY3Rpb24gdGhhdCB0cmVhdHMgTEYgYW5kIENSTEYgZXF1YWwgYW5kIGF2b2lkcyB0byBmb3JrCisjIGRpZmYgd2hlbiBwb3NzaWJsZS4KK21pbmd3X3Rlc3RfY21wICgpIHsKKwkjIFJlYWQgdGV4dCBpbnRvIHNoZWxsIHZhcmlhYmxlcyBhbmQgY29tcGFyZSB0aGVtLiBJZiB0aGUgcmVzdWx0cworCSMgYXJlIGRpZmZlcmVudCwgdXNlIHJlZ3VsYXIgZGlmZiB0byByZXBvcnQgdGhlIGRpZmZlcmVuY2UuCisJbG9jYWwgdGVzdF9jbXBfYT0gdGVzdF9jbXBfYj0KKworCSMgV2hlbiB0ZXh0IGNhbWUgZnJvbSBzdGRpbiAob25lIGFyZ3VtZW50IGlzICctJykgd2UgbXVzdCBmZWVkIGl0CisJIyB0byBkaWZmLgorCWxvY2FsIHN0ZGluX2Zvcl9kaWZmPQorCisJIyBTaW5jZSBpdCBpcyBkaWZmaWN1bHQgdG8gZGV0ZWN0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYW4KKwkjIGVtcHR5IGlucHV0IGZpbGUgYW5kIGEgZmFpbHVyZSB0byByZWFkIHRoZSBmaWxlcywgd2UgZ28gc3RyYWlnaHQKKwkjIHRvIGRpZmYgaWYgb25lIG9mIHRoZSBpbnB1dHMgaXMgZW1wdHkuCisJaWYgdGVzdCAtcyAiJDEiICYmIHRlc3QgLXMgIiQyIgorCXRoZW4KKwkJIyByZWd1bGFyIGNhc2U6IGJvdGggZmlsZXMgbm9uLWVtcHR5CisJCW1pbmd3X3JlYWRfZmlsZV9zdHJpcF9jcl8gdGVzdF9jbXBfYSA8IiQxIgorCQltaW5nd19yZWFkX2ZpbGVfc3RyaXBfY3JfIHRlc3RfY21wX2IgPCIkMiIKKwllbGlmIHRlc3QgLXMgIiQxIiAmJiB0ZXN0ICIkMiIgPSAtCisJdGhlbgorCQkjIHJlYWQgMm5kIGZpbGUgZnJvbSBzdGRpbgorCQltaW5nd19yZWFkX2ZpbGVfc3RyaXBfY3JfIHRlc3RfY21wX2EgPCIkMSIKKwkJbWluZ3dfcmVhZF9maWxlX3N0cmlwX2NyXyB0ZXN0X2NtcF9iCisJCXN0ZGluX2Zvcl9kaWZmPSc8PDwiJHRlc3RfY21wX2IiJworCWVsaWYgdGVzdCAiJDEiID0gLSAmJiB0ZXN0IC1zICIkMiIKKwl0aGVuCisJCSMgcmVhZCAxc3QgZmlsZSBmcm9tIHN0ZGluCisJCW1pbmd3X3JlYWRfZmlsZV9zdHJpcF9jcl8gdGVzdF9jbXBfYQorCQltaW5nd19yZWFkX2ZpbGVfc3RyaXBfY3JfIHRlc3RfY21wX2IgPCIkMiIKKwkJc3RkaW5fZm9yX2RpZmY9Jzw8PCIkdGVzdF9jbXBfYSInCisJZmkKKwl0ZXN0IC1uICIkdGVzdF9jbXBfYSIgJiYKKwl0ZXN0IC1uICIkdGVzdF9jbXBfYiIgJiYKKwl0ZXN0ICIkdGVzdF9jbXBfYSIgPSAiJHRlc3RfY21wX2IiIHx8CisJZXZhbCAiZGlmZiAtdSBcIlwkQFwiICRzdGRpbl9mb3JfZGlmZiIKK30KKworIyAkMSBpcyB0aGUgbmFtZSBvZiB0aGUgc2hlbGwgdmFyaWFibGUgdG8gZmlsbCBpbgorbWluZ3dfcmVhZF9maWxlX3N0cmlwX2NyXyAoKSB7CisJIyBSZWFkIGxpbmUtd2lzZSB1c2luZyBMRiBhcyB0aGUgbGluZSBzZXBhcmF0b3IKKwkjIGFuZCB1c2UgSUZTIHRvIHN0cmlwIENSLgorCWxvY2FsIGxpbmUKKwl3aGlsZSA6CisJZG8KKwkJaWYgSUZTPSQnXHInIHJlYWQgLXIgLWQgJCdcbicgbGluZQorCQl0aGVuCisJCQkjIGdvb2QKKwkJCWxpbmU9JGxpbmUkJ1xuJworCQllbHNlCisJCQkjIHdlIGdldCBoZXJlIGF0IEVPRiwgYnV0IGFsc28gaWYgdGhlIGxhc3QgbGluZQorCQkJIyB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgTEY7IGluIHRoZSBsYXR0ZXIgY2FzZSwKKwkJCSMgc29tZSB0ZXh0IHdhcyByZWFkCisJCQlpZiB0ZXN0IC16ICIkbGluZSIKKwkJCXRoZW4KKwkJCQkjIEVPRiwgcmVhbGx5CisJCQkJYnJlYWsKKwkJCWZpCisJCWZpCisJCWV2YWwgIiQxPVwkJDFcJGxpbmUiCisJZG9uZQorfQorCisjIExpa2UgImVudiBGT089QkFSIHNvbWUtcHJvZ3JhbSIsIGJ1dCBydW4gaW5zaWRlIGEgc3Vic2hlbGwsIHdoaWNoIG1lYW5zCisjIGl0IGFsc28gd29ya3MgZm9yIHNoZWxsIGZ1bmN0aW9ucyAodGhvdWdoIHRob3NlIGZ1bmN0aW9ucyBjYW5ub3QgaW1wYWN0CisjIHRoZSBlbnZpcm9ubWVudCBvdXRzaWRlIG9mIHRoZSB0ZXN0X2VudiBpbnZvY2F0aW9uKS4KK3Rlc3RfZW52ICgpIHsKKwkoCisJCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwkJZG8KKwkJCWNhc2UgIiQxIiBpbgorCQkJKj0qKQorCQkJCWV2YWwgIiR7MSUlPSp9PVwkezEjKj19IgorCQkJCWV2YWwgImV4cG9ydCAkezElJT0qfSIKKwkJCQlzaGlmdAorCQkJCTs7CisJCQkqKQorCQkJCSIkQCIgMj4mNworCQkJCWV4aXQKKwkJCQk7OworCQkJZXNhYworCQlkb25lCisJKQorfSA3PiYyIDI+JjQKKworIyBSZXR1cm5zIHRydWUgaWYgdGhlIG51bWVyaWMgZXhpdCBjb2RlIGluICIkMiIgcmVwcmVzZW50cyB0aGUgZXhwZWN0ZWQgc2lnbmFsCisjIGluICIkMSIuIFNpZ25hbHMgc2hvdWxkIGJlIGdpdmVuIG51bWVyaWNhbGx5LgordGVzdF9tYXRjaF9zaWduYWwgKCkgeworCWlmIHRlc3QgIiQyIiA9ICIkKCgxMjggKyAkMSkpIgorCXRoZW4KKwkJIyBQT1NJWAorCQlyZXR1cm4gMAorCWVsaWYgdGVzdCAiJDIiID0gIiQoKDI1NiArICQxKSkiCisJdGhlbgorCQkjIGtzaAorCQlyZXR1cm4gMAorCWZpCisJcmV0dXJuIDEKK30KKworIyBSZWFkIHVwIHRvICIkMSIgYnl0ZXMgKG9yIHRvIEVPRikgZnJvbSBzdGRpbiBhbmQgd3JpdGUgdGhlbSB0byBzdGRvdXQuCit0ZXN0X2NvcHlfYnl0ZXMgKCkgeworCXBlcmwgLWUgJworCQlteSAkbGVuID0gJEFSR1ZbMV07CisJCXdoaWxlICgkbGVuID4gMCkgeworCQkJbXkgJHM7CisJCQlteSAkbnJlYWQgPSBzeXNyZWFkKFNURElOLCAkcywgJGxlbik7CisJCQlkaWUgImNhbm5vdCByZWFkOiAkISIgdW5sZXNzIGRlZmluZWQoJG5yZWFkKTsKKwkJCWxhc3QgdW5sZXNzICRucmVhZDsKKwkJCXByaW50ICRzOworCQkJJGxlbiAtPSAkbnJlYWQ7CisJCX0KKwknIC0gIiQxIgorfQorCisjIHJ1biAiJEAiIGluc2lkZSBhIG5vbi1naXQgZGlyZWN0b3J5Citub25naXQgKCkgeworCXRlc3QgLWQgbm9uLXJlcG8gfHwKKwlta2RpciBub24tcmVwbyB8fAorCXJldHVybiAxCisKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSQocHdkKSAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uLXJlcG8gJiYKKwkJIiRAIiAyPiY3CisJKQorfSA3PiYyIDI+JjQKKworIyBjb252ZXJ0IHN0ZGluIHRvIHBrdGxpbmUgcmVwcmVzZW50YXRpb247IG5vdGUgdGhhdCBlbXB0eSBpbnB1dCBiZWNvbWVzIGFuCisjIGVtcHR5IHBhY2tldCwgbm90IGEgZmx1c2ggcGFja2V0IChmb3IgdGhhdCB5b3UgY2FuIGp1c3QgcHJpbnQgMDAwMCB5b3Vyc2VsZikuCitwYWNrZXRpemUoKSB7CisJY2F0ID5wYWNrZXRpemUudG1wICYmCisJbGVuPSQod2MgLWMgPHBhY2tldGl6ZS50bXApICYmCisJcHJpbnRmICclMDR4JXMnICIkKCgkbGVuICsgNCkpIiAmJgorCWNhdCBwYWNrZXRpemUudG1wICYmCisJcm0gLWYgcGFja2V0aXplLnRtcAorfQorCisjIFBhcnNlIHRoZSBpbnB1dCBhcyBhIHNlcmllcyBvZiBwa3RsaW5lcywgd3JpdGluZyB0aGUgcmVzdWx0IHRvIHN0ZG91dC4KKyMgU2lkZWJhbmQgbWFya2VycyBhcmUgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5LCBhbmQgdGhlIG91dHB1dCBpcyByb3V0ZWQgdG8KKyMgc3RkZXJyIGlmIGFwcHJvcHJpYXRlLgorIworIyBOVUwgYnl0ZXMgYXJlIGNvbnZlcnRlZCB0byAiXFwwIiBmb3IgZWFzZSBvZiBwYXJzaW5nIHdpdGggdGV4dCB0b29scy4KK2RlcGFja2V0aXplICgpIHsKKwlwZXJsIC1lICcKKwkJd2hpbGUgKHJlYWQoU1RESU4sICRsZW4sIDQpID09IDQpIHsKKwkJCWlmICgkbGVuIGVxICIwMDAwIikgeworCQkJCXByaW50ICJGTFVTSFxuIjsKKwkJCX0gZWxzZSB7CisJCQkJcmVhZChTVERJTiwgJGJ1ZiwgaGV4KCRsZW4pIC0gNCk7CisJCQkJJGJ1ZiA9fiBzL1wwL1xcMC9nOworCQkJCWlmICgkYnVmID1+IHMvXltceDJceDNdLy8pIHsKKwkJCQkJcHJpbnQgU1RERVJSICRidWY7CisJCQkJfSBlbHNlIHsKKwkJCQkJJGJ1ZiA9fiBzL15ceDEvLzsKKwkJCQkJcHJpbnQgJGJ1ZjsKKwkJCQl9CisJCQl9CisJCX0KKwknCit9CisKKyMgQ29udmVydHMgYmFzZS0xNiBkYXRhIGludG8gYmFzZS04LiBUaGUgb3V0cHV0IGlzIGdpdmVuIGFzIGEgc2VxdWVuY2Ugb2YKKyMgZXNjYXBlZCBvY3RhbHMsIHN1aXRhYmxlIGZvciBjb25zdW1wdGlvbiBieSAncHJpbnRmJy4KK2hleDJvY3QgKCkgeworCXBlcmwgLW5lICdwcmludGYgIlxcJTAzbyIsIGhleCBmb3IgLy4uL2cnCit9CisKKyMgU2V0IHRoZSBoYXNoIGFsZ29yaXRobSBpbiB1c2UgdG8gJDEuICBPbmx5IHVzZWZ1bCB3aGVuIHRlc3RpbmcgdGhlIHRlc3RzdWl0ZS4KK3Rlc3Rfc2V0X2hhc2ggKCkgeworCXRlc3RfaGFzaF9hbGdvPSIkMSIKK30KKworIyBEZXRlY3QgdGhlIGhhc2ggYWxnb3JpdGhtIGluIHVzZS4KK3Rlc3RfZGV0ZWN0X2hhc2ggKCkgeworCSMgQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBTSEEtMSwgYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBmdW5jdGlvbiB3aWxsCisJIyBhY3R1YWxseSBkZXRlY3QgdGhlIGFsZ29yaXRobSBpbiB1c2UuCisJdGVzdF9oYXNoX2FsZ289J3NoYTEnCit9CisKKyMgTG9hZCBjb21tb24gaGFzaCBtZXRhZGF0YSBhbmQgY29tbW9uIHBsYWNlaG9sZGVyIG9iamVjdCBJRHMgZm9yIHVzZSB3aXRoCisjIHRlc3Rfb2lkLgordGVzdF9vaWRfaW5pdCAoKSB7CisJdGVzdCAtbiAiJHRlc3RfaGFzaF9hbGdvIiB8fCB0ZXN0X2RldGVjdF9oYXNoICYmCisJdGVzdF9vaWRfY2FjaGUgPCIkVEVTVF9ESVJFQ1RPUlkvb2lkLWluZm8vaGFzaC1pbmZvIiAmJgorCXRlc3Rfb2lkX2NhY2hlIDwiJFRFU1RfRElSRUNUT1JZL29pZC1pbmZvL29pZCIKK30KKworIyBMb2FkIGtleS12YWx1ZSBwYWlycyBmcm9tIHN0ZGluIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0ZXN0X29pZC4gIEJsYW5rIGxpbmVzCisjIGFuZCBsaW5lcyBzdGFydGluZyB3aXRoICIjIiBhcmUgaWdub3JlZC4gIEtleXMgbXVzdCBiZSBzaGVsbCBpZGVudGlmaWVyCisjIGNoYXJhY3RlcnMuCisjCisjIEV4YW1wbGVzOgorIyByYXdzeiBzaGExOjIwCisjIHJhd3N6IHNoYTI1NjozMgordGVzdF9vaWRfY2FjaGUgKCkgeworCWxvY2FsIHRhZyByZXN0IGsgdiAmJgorCisJeyB0ZXN0IC1uICIkdGVzdF9oYXNoX2FsZ28iIHx8IHRlc3RfZGV0ZWN0X2hhc2g7IH0gJiYKKwl3aGlsZSByZWFkIHRhZyByZXN0CisJZG8KKwkJY2FzZSAkdGFnIGluCisJCVwjKikKKwkJCWNvbnRpbnVlOzsKKwkJPyopCisJCQkjIG5vbi1lbXB0eQorCQkJOzsKKwkJKikKKwkJCSMgYmxhbmsgbGluZQorCQkJY29udGludWU7OworCQllc2FjICYmCisKKwkJaz0iJHtyZXN0JToqfSIgJiYKKwkJdj0iJHtyZXN0Iyo6fSIgJiYKKworCQlpZiAhIGV4cHIgIiRrIiA6ICdbYS16MC05XVthLXowLTldKiQnID4vZGV2L251bGwKKwkJdGhlbgorCQkJQlVHICdiYWQgaGFzaCBhbGdvcml0aG0nCisJCWZpICYmCisJCWV2YWwgInRlc3Rfb2lkXyR7a31fJHRhZz1cIlwkdlwiIgorCWRvbmUKK30KKworIyBMb29rIHVwIGEgcGVyLWhhc2ggdmFsdWUgYmFzZWQgb24gYSBrZXkgKCQxKS4gIFRoZSB2YWx1ZSBtdXN0IGhhdmUgYmVlbiBsb2FkZWQKKyMgYnkgdGVzdF9vaWRfaW5pdCBvciB0ZXN0X29pZF9jYWNoZS4KK3Rlc3Rfb2lkICgpIHsKKwlsb2NhbCB2YXI9InRlc3Rfb2lkXyR7dGVzdF9oYXNoX2FsZ299XyQxIiAmJgorCisJIyBJZiB0aGUgdmFyaWFibGUgaXMgdW5zZXQsIHdlIG11c3QgYmUgbWlzc2luZyBhbiBlbnRyeSBmb3IgdGhpcworCSMga2V5LWhhc2ggcGFpciwgc28gZXhpdCB3aXRoIGFuIGVycm9yLgorCWlmIGV2YWwgInRlc3QgLXogXCJcJHskdmFyK3NldH1cIiIKKwl0aGVuCisJCUJVRyAidW5kZWZpbmVkIGtleSAnJDEnIgorCWZpICYmCisJZXZhbCAicHJpbnRmICclcycgXCJcJHskdmFyfVwiIgorfQorCisjIEluc2VydCBhIHNsYXNoIGludG8gYW4gb2JqZWN0IElEIHNvIGl0IGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZSBhIGxvY2F0aW9uCisjIHVuZGVyICIuZ2l0L29iamVjdHMiLiAgRm9yIGV4YW1wbGUsICJkZWFkYmVlZi4uLiIgYmVjb21lcyAiZGUvYWRiZWVmLi4iLgordGVzdF9vaWRfdG9fcGF0aCAoKSB7CisJbG9jYWwgYmFzZW5hbWU9JHsxIz8/fQorCWVjaG8gIiR7MSUkYmFzZW5hbWV9LyRiYXNlbmFtZSIKK30KKworIyBDaG9vc2UgYSBwb3J0IG51bWJlciBiYXNlZCBvbiB0aGUgdGVzdCBzY3JpcHQncyBudW1iZXIgYW5kIHN0b3JlIGl0IGluCisjIHRoZSBnaXZlbiB2YXJpYWJsZSBuYW1lLCB1bmxlc3MgdGhhdCB2YXJpYWJsZSBhbHJlYWR5IGNvbnRhaW5zIGEgbnVtYmVyLgordGVzdF9zZXRfcG9ydCAoKSB7CisJbG9jYWwgdmFyPSQxIHBvcnQKKworCWlmIHRlc3QgJCMgLW5lIDEgfHwgdGVzdCAteiAiJHZhciIKKwl0aGVuCisJCUJVRyAidGVzdF9zZXRfcG9ydCByZXF1aXJlcyBhIHZhcmlhYmxlIG5hbWUiCisJZmkKKworCWV2YWwgcG9ydD1cJCR2YXIKKwljYXNlICIkcG9ydCIgaW4KKwkiIikKKwkJIyBObyBwb3J0IGlzIHNldCBpbiB0aGUgZ2l2ZW4gZW52IHZhciwgdXNlIHRoZSB0ZXN0CisJCSMgbnVtYmVyIGFzIHBvcnQgbnVtYmVyIGluc3RlYWQuCisJCSMgUmVtb3ZlIG5vdCBvbmx5IHRoZSBsZWFkaW5nICd0JywgYnV0IGFsbCBsZWFkaW5nIHplcm9zCisJCSMgYXMgd2VsbCwgc28gdGhlIGFyaXRobWV0aWMgYmVsb3cgd29uJ3QgKG1pcylpbnRlcnByZXQKKwkJIyBhIHRlc3QgbnVtYmVyIGxpa2UgJzAxMjMnIGFzIGFuIG9jdGFsIHZhbHVlLgorCQlwb3J0PSR7dGhpc190ZXN0IyR7dGhpc190ZXN0JSVbMS05XSp9fQorCQlpZiB0ZXN0ICIke3BvcnQ6LTB9IiAtbHQgMTAyNAorCQl0aGVuCisJCQkjIHJvb3Qtb25seSBwb3J0LCB1c2UgYSBsYXJnZXIgb25lIGluc3RlYWQuCisJCQlwb3J0PSQoKCRwb3J0ICsgMTAwMDApKQorCQlmaQorCQk7OworCSpbITAtOV0qfDAqKQorCQllcnJvciA+JjcgImludmFsaWQgcG9ydCBudW1iZXI6ICRwb3J0IgorCQk7OworCSopCisJCSMgVGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgcG9ydC4KKwkJOzsKKwllc2FjCisKKwkjIE1ha2Ugc3VyZSB0aGF0IHBhcmFsbGVsICctLXN0cmVzcycgdGVzdCBqb2JzIGdldCBkaWZmZXJlbnQKKwkjIHBvcnRzLgorCXBvcnQ9JCgoJHBvcnQgKyAke0dJVF9URVNUX1NUUkVTU19KT0JfTlI6LTB9KSkKKwlldmFsICR2YXI9JHBvcnQKK30KKworIyBDb21wYXJlIGEgZmlsZSBjb250YWluaW5nIHJldi1saXN0IGJpdG1hcCB0cmF2ZXJzYWwgb3V0cHV0IHRvIGl0cyBub24tYml0bWFwCisjIGNvdW50ZXJwYXJ0LiBZb3UgY2FuJ3QganVzdCB1c2UgdGVzdF9jbXAgZm9yIHRoaXMsIGJlY2F1c2UgdGhlIHR3byBwcm9kdWNlCisjIHN1YnRseSBkaWZmZXJlbnQgb3V0cHV0OgorIworIyAgIC0gcmVndWxhciBvdXRwdXQgaXMgaW4gdHJhdmVyc2FsIG9yZGVyLCB3aGVyZWFzIGJpdG1hcCBpcyBzcGxpdCBieSB0eXBlLAorIyAgICAgd2l0aCBub24tcGFja2VkIG9iamVjdHMgYXQgdGhlIGVuZAorIworIyAgIC0gcmVndWxhciBvdXRwdXQgaGFzIGEgc3BhY2UgYW5kIHRoZSBwYXRobmFtZSBhcHBlbmRlZCB0byBub24tY29tbWl0CisjICAgICBvYmplY3RzOyBiaXRtYXAgb3V0cHV0IG9taXRzIHRoaXMKKyMKKyMgVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIGFuZCBjb21wYXJlcyB0aGUgdHdvLiBUaGUgc2Vjb25kIGZpbGUgc2hvdWxkCisjIGFsd2F5cyBiZSB0aGUgYml0bWFwIG91dHB1dC4KK3Rlc3RfYml0bWFwX3RyYXZlcnNhbCAoKSB7CisJaWYgdGVzdCAiJDEiID0gIi0tbm8tY29uZmlybS1iaXRtYXBzIgorCXRoZW4KKwkJc2hpZnQKKwllbGlmIGNtcCAiJDEiICIkMiIKKwl0aGVuCisJCWVjaG8gPiYyICJpZGVudGljYWwgcmF3IG91dHB1dHM7IGFyZSB5b3Ugc3VyZSBiaXRtYXBzIHdlcmUgdXNlZD8iCisJCXJldHVybiAxCisJZmkgJiYKKwljdXQgLWQnICcgLWYxICIkMSIgfCBzb3J0ID4iJDEubm9ybWFsaXplZCIgJiYKKwlzb3J0ICIkMiIgPiIkMi5ub3JtYWxpemVkIiAmJgorCXRlc3RfY21wICIkMS5ub3JtYWxpemVkIiAiJDIubm9ybWFsaXplZCIgJiYKKwlybSAtZiAiJDEubm9ybWFsaXplZCIgIiQyLm5vcm1hbGl6ZWQiCit9CmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLnNoIGIvdC90ZXN0LWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWExZTVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtMCwwICsxLDE2NDcgQEAKKyMgVGVzdCBmcmFtZXdvcmsgZm9yIGdpdC4gIFNlZSB0L1JFQURNRSBmb3IgdXNhZ2UuCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8gLgorCisjIFRlc3QgdGhlIGJpbmFyaWVzIHdlIGhhdmUganVzdCBidWlsdC4gIFRoZSB0ZXN0cyBhcmUga2VwdCBpbgorIyB0LyBzdWJkaXJlY3RvcnkgYW5kIGFyZSBydW4gaW4gJ3RyYXNoIGRpcmVjdG9yeScgc3ViZGlyZWN0b3J5LgoraWYgdGVzdCAteiAiJFRFU1RfRElSRUNUT1JZIgordGhlbgorCSMgV2UgYWxsb3cgdGVzdHMgdG8gb3ZlcnJpZGUgdGhpcywgaW4gY2FzZSB0aGV5IHdhbnQgdG8gcnVuIHRlc3RzCisJIyBvdXRzaWRlIG9mIHQvLCBlLmcuIGZvciBydW5uaW5nIHRlc3RzIG9uIHRoZSB0ZXN0IGxpYnJhcnkKKwkjIGl0c2VsZi4KKwlURVNUX0RJUkVDVE9SWT0kKHB3ZCkKK2Vsc2UKKwkjIGVuc3VyZSB0aGF0IFRFU1RfRElSRUNUT1JZIGlzIGFuIGFic29sdXRlIHBhdGggc28gdGhhdCBpdAorCSMgaXMgdmFsaWQgZXZlbiBpZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBjaGFuZ2VkCisJVEVTVF9ESVJFQ1RPUlk9JChjZCAiJFRFU1RfRElSRUNUT1JZIiAmJiBwd2QpIHx8IGV4aXQgMQorZmkKK2lmIHRlc3QgLXogIiRURVNUX09VVFBVVF9ESVJFQ1RPUlkiCit0aGVuCisJIyBTaW1pbGFybHksIG92ZXJyaWRlIHRoaXMgdG8gc3RvcmUgdGhlIHRlc3QtcmVzdWx0cyBzdWJkaXIKKwkjIGVsc2V3aGVyZQorCVRFU1RfT1VUUFVUX0RJUkVDVE9SWT0kVEVTVF9ESVJFQ1RPUlkKK2ZpCitHSVRfQlVJTERfRElSPSIkVEVTVF9ESVJFQ1RPUlkiLy4uCisKKyMgSWYgd2Ugd2VyZSBidWlsdCB3aXRoIEFTQU4sIGl0IG1heSBjb21wbGFpbiBhYm91dCBsZWFrcworIyBvZiBwcm9ncmFtLWxpZmV0aW1lIHZhcmlhYmxlcy4gRGlzYWJsZSBpdCBieSBkZWZhdWx0IHRvIGxvd2VyCisjIHRoZSBub2lzZSBsZXZlbC4gVGhpcyBuZWVkcyB0byBoYXBwZW4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY3JpcHQsCisjIGJlZm9yZSB3ZSBldmVuIGRvIG91ciAiZGlkIHdlIGJ1aWxkIGdpdCB5ZXQiIGNoZWNrIChzaW5jZSB3ZSBkb24ndAorIyB3YW50IHRoYXQgb25lIHRvIGNvbXBsYWluIHRvIHN0ZGVycikuCis6ICR7QVNBTl9PUFRJT05TPWRldGVjdF9sZWFrcz0wOmFib3J0X29uX2Vycm9yPTF9CitleHBvcnQgQVNBTl9PUFRJT05TCisKKyMgSWYgTFNBTiBpcyBpbiBlZmZlY3Qgd2UgX2RvXyB3YW50IGxlYWsgY2hlY2tpbmcsIGJ1dCB3ZSBzdGlsbAorIyB3YW50IHRvIGFib3J0IHNvIHRoYXQgd2Ugbm90aWNlIHRoZSBwcm9ibGVtcy4KKzogJHtMU0FOX09QVElPTlM9YWJvcnRfb25fZXJyb3I9MX0KK2V4cG9ydCBMU0FOX09QVElPTlMKKworaWYgdGVzdCAhIC1mICIkR0lUX0JVSUxEX0RJUiIvR0lULUJVSUxELU9QVElPTlMKK3RoZW4KKwllY2hvID4mMiAnZXJyb3I6IEdJVC1CVUlMRC1PUFRJT05TIG1pc3NpbmcgKGhhcyBHaXQgYmVlbiBidWlsdD8pLicKKwlleGl0IDEKK2ZpCisuICIkR0lUX0JVSUxEX0RJUiIvR0lULUJVSUxELU9QVElPTlMKK2V4cG9ydCBQRVJMX1BBVEggU0hFTExfUEFUSAorCisjIERpc2FsbG93IHRoZSB1c2Ugb2YgYWJicmV2aWF0ZWQgb3B0aW9ucyBpbiB0aGUgdGVzdCBzdWl0ZSBieSBkZWZhdWx0CitpZiB0ZXN0IC16ICIke0dJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlN9IgordGhlbgorCUdJVF9URVNUX0RJU0FMTE9XX0FCQlJFVklBVEVEX09QVElPTlM9dHJ1ZQorCWV4cG9ydCBHSVRfVEVTVF9ESVNBTExPV19BQkJSRVZJQVRFRF9PUFRJT05TCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEl0IGFwcGVhcnMgdGhhdCBwZW9wbGUgdHJ5IHRvIHJ1biB0ZXN0cyB3aXRob3V0IGJ1aWxkaW5nLi4uCisiJHtHSVRfVEVTVF9JTlNUQUxMRUQ6LSRHSVRfQlVJTERfRElSfS9naXQkWCIgPi9kZXYvbnVsbAoraWYgdGVzdCAkPyAhPSAxCit0aGVuCisJaWYgdGVzdCAtbiAiJEdJVF9URVNUX0lOU1RBTExFRCIKKwl0aGVuCisJCWVjaG8gPiYyICJlcnJvcjogdGhlcmUgaXMgbm8gd29ya2luZyBHaXQgYXQgJyRHSVRfVEVTVF9JTlNUQUxMRUQnIgorCWVsc2UKKwkJZWNobyA+JjIgJ2Vycm9yOiB5b3UgZG8gbm90IHNlZW0gdG8gaGF2ZSBidWlsdCBnaXQgeWV0LicKKwlmaQorCWV4aXQgMQorZmkKKworIyBQYXJzZSBvcHRpb25zIHdoaWxlIHRha2luZyBjYXJlIHRvIGxlYXZlICRAIGludGFjdCwgc28gd2Ugd2lsbCBzdGlsbAorIyBoYXZlIGFsbCB0aGUgb3JpZ2luYWwgY29tbWFuZCBsaW5lIG9wdGlvbnMgd2hlbiBleGVjdXRpbmcgdGhlIHRlc3QKKyMgc2NyaXB0IGFnYWluIGZvciAnLS10ZWUnIGFuZCAnLS12ZXJib3NlLWxvZycgYmVsb3cuCitzdG9yZV9hcmdfdG89CitwcmV2X29wdD0KK2ZvciBvcHQKK2RvCisJaWYgdGVzdCAtbiAiJHN0b3JlX2FyZ190byIKKwl0aGVuCisJCWV2YWwgJHN0b3JlX2FyZ190bz1cJG9wdAorCQlzdG9yZV9hcmdfdG89CisJCXByZXZfb3B0PQorCQljb250aW51ZQorCWZpCisKKwljYXNlICIkb3B0IiBpbgorCS1kfC0tZHwtLWRlfC0tZGVifC0tZGVidXwtLWRlYnVnKQorCQlkZWJ1Zz10IDs7CisJLWl8LS1pfC0taW18LS1pbW18LS1pbW1lfC0taW1tZWR8LS1pbW1lZGl8LS1pbW1lZGlhfC0taW1tZWRpYXR8LS1pbW1lZGlhdGUpCisJCWltbWVkaWF0ZT10IDs7CisJLWx8LS1sfC0tbG98LS1sb258LS1sb25nfC0tbG9uZy18LS1sb25nLXR8LS1sb25nLXRlfC0tbG9uZy10ZXN8LS1sb25nLXRlc3R8LS1sb25nLXRlc3RzKQorCQlHSVRfVEVTVF9MT05HPXQ7IGV4cG9ydCBHSVRfVEVTVF9MT05HIDs7CisJLXIpCisJCXN0b3JlX2FyZ190bz1ydW5fbGlzdAorCQk7OworCS0tcnVuPSopCisJCXJ1bl9saXN0PSR7b3B0Iy0tKj19IDs7CisJLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorCQloZWxwPXQgOzsKKwktdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcmJ8LS12ZXJib3wtLXZlcmJvc3wtLXZlcmJvc2UpCisJCXZlcmJvc2U9dCA7OworCS0tdmVyYm9zZS1vbmx5PSopCisJCXZlcmJvc2Vfb25seT0ke29wdCMtLSo9fQorCQk7OworCS1xfC0tcXwtLXF1fC0tcXVpfC0tcXVpZXwtLXF1aWV0KQorCQkjIElnbm9yZSAtLXF1aWV0IHVuZGVyIGEgVEFQOjpIYXJuZXNzLiBTYXlpbmcgaG93IG1hbnkgdGVzdHMKKwkJIyBwYXNzZWQgd2l0aG91dCB0aGUgb2svbm90IG9rIGRldGFpbHMgaXMgYWx3YXlzIGFuIGVycm9yLgorCQl0ZXN0IC16ICIkSEFSTkVTU19BQ1RJVkUiICYmIHF1aWV0PXQgOzsKKwktLXdpdGgtZGFzaGVzKQorCQl3aXRoX2Rhc2hlcz10IDs7CisJLS1uby1iaW4td3JhcHBlcnMpCisJCW5vX2Jpbl93cmFwcGVycz10IDs7CisJLS1uby1jb2xvcikKKwkJY29sb3I9IDs7CisJLS12YXwtLXZhbHwtLXZhbGd8LS12YWxncnwtLXZhbGdyaXwtLXZhbGdyaW58LS12YWxncmluZCkKKwkJdmFsZ3JpbmQ9bWVtY2hlY2sKKwkJdGVlPXQKKwkJOzsKKwktLXZhbGdyaW5kPSopCisJCXZhbGdyaW5kPSR7b3B0Iy0tKj19CisJCXRlZT10CisJCTs7CisJLS12YWxncmluZC1vbmx5PSopCisJCXZhbGdyaW5kX29ubHk9JHtvcHQjLS0qPX0KKwkJdGVlPXQKKwkJOzsKKwktLXRlZSkKKwkJdGVlPXQgOzsKKwktLXJvb3Q9KikKKwkJcm9vdD0ke29wdCMtLSo9fSA7OworCS0tY2hhaW4tbGludCkKKwkJR0lUX1RFU1RfQ0hBSU5fTElOVD0xIDs7CisJLS1uby1jaGFpbi1saW50KQorCQlHSVRfVEVTVF9DSEFJTl9MSU5UPTAgOzsKKwkteCkKKwkJdHJhY2U9dCA7OworCS1WfC0tdmVyYm9zZS1sb2cpCisJCXZlcmJvc2VfbG9nPXQKKwkJdGVlPXQKKwkJOzsKKwktLXdyaXRlLWp1bml0LXhtbCkKKwkJd3JpdGVfanVuaXRfeG1sPXQKKwkJOzsKKwktLXN0cmVzcykKKwkJc3RyZXNzPXQgOzsKKwktLXN0cmVzcz0qKQorCQllY2hvICJlcnJvcjogLS1zdHJlc3MgZG9lcyBub3QgYWNjZXB0IGFuIGFyZ3VtZW50OiAnJG9wdCciID4mMgorCQllY2hvICJkaWQgeW91IG1lYW4gLS1zdHJlc3Mtam9icz0ke29wdCMqPX0gb3IgLS1zdHJlc3MtbGltaXQ9JHtvcHQjKj19PyIgPiYyCisJCWV4aXQgMQorCQk7OworCS0tc3RyZXNzLWpvYnM9KikKKwkJc3RyZXNzPXQ7CisJCXN0cmVzcz0ke29wdCMtLSo9fQorCQljYXNlICIkc3RyZXNzIiBpbgorCQkqWyEwLTldKnwwKnwiIikKKwkJCWVjaG8gImVycm9yOiAtLXN0cmVzcy1qb2JzPTxOPiByZXF1aXJlcyB0aGUgbnVtYmVyIG9mIGpvYnMgdG8gcnVuIiA+JjIKKwkJCWV4aXQgMQorCQkJOzsKKwkJKikJIyBHb29kLgorCQkJOzsKKwkJZXNhYworCQk7OworCS0tc3RyZXNzLWxpbWl0PSopCisJCXN0cmVzcz10OworCQlzdHJlc3NfbGltaXQ9JHtvcHQjLS0qPX0KKwkJY2FzZSAiJHN0cmVzc19saW1pdCIgaW4KKwkJKlshMC05XSp8MCp8IiIpCisJCQllY2hvICJlcnJvcjogLS1zdHJlc3MtbGltaXQ9PE4+IHJlcXVpcmVzIHRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMiID4mMgorCQkJZXhpdCAxCisJCQk7OworCQkqKQkjIEdvb2QuCisJCQk7OworCQllc2FjCisJCTs7CisJKikKKwkJZWNobyAiZXJyb3I6IHVua25vd24gdGVzdCBvcHRpb24gJyRvcHQnIiA+JjI7IGV4aXQgMSA7OworCWVzYWMKKworCXByZXZfb3B0PSRvcHQKK2RvbmUKK2lmIHRlc3QgLW4gIiRzdG9yZV9hcmdfdG8iCit0aGVuCisJZWNobyAiZXJyb3I6ICRwcmV2X29wdCByZXF1aXJlcyBhbiBhcmd1bWVudCIgPiYyCisJZXhpdCAxCitmaQorCitpZiB0ZXN0IC1uICIkdmFsZ3JpbmRfb25seSIKK3RoZW4KKwl0ZXN0IC16ICIkdmFsZ3JpbmQiICYmIHZhbGdyaW5kPW1lbWNoZWNrCisJdGVzdCAteiAiJHZlcmJvc2UiICYmIHZlcmJvc2Vfb25seT0iJHZhbGdyaW5kX29ubHkiCitlbGlmIHRlc3QgLW4gIiR2YWxncmluZCIKK3RoZW4KKwl0ZXN0IC16ICIkdmVyYm9zZV9sb2ciICYmIHZlcmJvc2U9dAorZmkKKworaWYgdGVzdCAtbiAiJHN0cmVzcyIKK3RoZW4KKwl2ZXJib3NlPXQKKwl0cmFjZT10CisJaW1tZWRpYXRlPXQKK2ZpCisKK1RFU1RfU1RSRVNTX0pPQl9TRlg9IiR7R0lUX1RFU1RfU1RSRVNTX0pPQl9OUjorLnN0cmVzcy0kR0lUX1RFU1RfU1RSRVNTX0pPQl9OUn0iCitURVNUX05BTUU9IiQoYmFzZW5hbWUgIiQwIiAuc2gpIgorVEVTVF9OVU1CRVI9IiR7VEVTVF9OQU1FJSUtKn0iCitURVNUX05VTUJFUj0iJHtURVNUX05VTUJFUiN0fSIKK1RFU1RfUkVTVUxUU19ESVI9IiRURVNUX09VVFBVVF9ESVJFQ1RPUlkvdGVzdC1yZXN1bHRzIgorVEVTVF9SRVNVTFRTX0JBU0U9IiRURVNUX1JFU1VMVFNfRElSLyRURVNUX05BTUUkVEVTVF9TVFJFU1NfSk9CX1NGWCIKK1RSQVNIX0RJUkVDVE9SWT0idHJhc2ggZGlyZWN0b3J5LiRURVNUX05BTUUkVEVTVF9TVFJFU1NfSk9CX1NGWCIKK3Rlc3QgLW4gIiRyb290IiAmJiBUUkFTSF9ESVJFQ1RPUlk9IiRyb290LyRUUkFTSF9ESVJFQ1RPUlkiCitjYXNlICIkVFJBU0hfRElSRUNUT1JZIiBpbgorLyopIDs7ICMgYWJzb2x1dGUgcGF0aCBpcyBnb29kCisgKikgVFJBU0hfRElSRUNUT1JZPSIkVEVTVF9PVVRQVVRfRElSRUNUT1JZLyRUUkFTSF9ESVJFQ1RPUlkiIDs7Citlc2FjCisKKyMgSWYgLS1zdHJlc3Mgd2FzIHBhc3NlZCwgcnVuIHRoaXMgdGVzdCByZXBlYXRlZGx5IGluIHNldmVyYWwgcGFyYWxsZWwgbG9vcHMuCitpZiB0ZXN0ICIkR0lUX1RFU1RfU1RSRVNTX1NUQVJURUQiID0gImRvbmUiCit0aGVuCisJOiAjIERvbid0IHN0cmVzcyB0ZXN0IGFnYWluLgorZWxpZiB0ZXN0IC1uICIkc3RyZXNzIgordGhlbgorCWlmIHRlc3QgIiRzdHJlc3MiICE9IHQKKwl0aGVuCisJCWpvYl9jb3VudD0kc3RyZXNzCisJZWxpZiB0ZXN0IC1uICIkR0lUX1RFU1RfU1RSRVNTX0xPQUQiCisJdGhlbgorCQlqb2JfY291bnQ9IiRHSVRfVEVTVF9TVFJFU1NfTE9BRCIKKwllbGlmIGpvYl9jb3VudD0kKGdldGNvbmYgX05QUk9DRVNTT1JTX09OTE4gMj4vZGV2L251bGwpICYmCisJICAgICB0ZXN0IC1uICIkam9iX2NvdW50IgorCXRoZW4KKwkJam9iX2NvdW50PSQoKDIgKiAkam9iX2NvdW50KSkKKwllbHNlCisJCWpvYl9jb3VudD04CisJZmkKKworCW1rZGlyIC1wICIkVEVTVF9SRVNVTFRTX0RJUiIKKwlzdHJlc3NmYWlsPSIkVEVTVF9SRVNVTFRTX0JBU0Uuc3RyZXNzLWZhaWxlZCIKKwlybSAtZiAiJHN0cmVzc2ZhaWwiCisKKwlzdHJlc3NfZXhpdD0wCisJdHJhcCAnCisJCWtpbGwgJGpvYl9waWRzIDI+L2Rldi9udWxsCisJCXdhaXQKKwkJc3RyZXNzX2V4aXQ9MQorCScgVEVSTSBJTlQgSFVQCisKKwlqb2JfcGlkcz0KKwlqb2JfbnI9MAorCXdoaWxlIHRlc3QgJGpvYl9uciAtbHQgIiRqb2JfY291bnQiCisJZG8KKwkJKAorCQkJR0lUX1RFU1RfU1RSRVNTX1NUQVJURUQ9ZG9uZQorCQkJR0lUX1RFU1RfU1RSRVNTX0pPQl9OUj0kam9iX25yCisJCQlleHBvcnQgR0lUX1RFU1RfU1RSRVNTX1NUQVJURUQgR0lUX1RFU1RfU1RSRVNTX0pPQl9OUgorCisJCQl0cmFwICcKKwkJCQlraWxsICR0ZXN0X3BpZCAyPi9kZXYvbnVsbAorCQkJCXdhaXQKKwkJCQlleGl0IDEKKwkJCScgVEVSTSBJTlQKKworCQkJY250PTEKKwkJCXdoaWxlICEgdGVzdCAtZSAiJHN0cmVzc2ZhaWwiICYmCisJCQkgICAgICB7IHRlc3QgLXogIiRzdHJlc3NfbGltaXQiIHx8CisJCQkJdGVzdCAkY250IC1sZSAkc3RyZXNzX2xpbWl0IDsgfQorCQkJZG8KKwkJCQkkVEVTVF9TSEVMTF9QQVRIICIkMCIgIiRAIiA+IiRURVNUX1JFU1VMVFNfQkFTRS5zdHJlc3MtJGpvYl9uci5vdXQiIDI+JjEgJgorCQkJCXRlc3RfcGlkPSQhCisKKwkJCQlpZiB3YWl0ICR0ZXN0X3BpZAorCQkJCXRoZW4KKwkJCQkJcHJpbnRmICJPSyAgICUyZC4lZFxuIiAkR0lUX1RFU1RfU1RSRVNTX0pPQl9OUiAkY250CisJCQkJZWxzZQorCQkJCQllY2hvICRHSVRfVEVTVF9TVFJFU1NfSk9CX05SID4+IiRzdHJlc3NmYWlsIgorCQkJCQlwcmludGYgIkZBSUwgJTJkLiVkXG4iICRHSVRfVEVTVF9TVFJFU1NfSk9CX05SICRjbnQKKwkJCQlmaQorCQkJCWNudD0kKCgkY250ICsgMSkpCisJCQlkb25lCisJCSkgJgorCQlqb2JfcGlkcz0iJGpvYl9waWRzICQhIgorCQlqb2JfbnI9JCgoJGpvYl9uciArIDEpKQorCWRvbmUKKworCXdhaXQKKworCWlmIHRlc3QgLWYgIiRzdHJlc3NmYWlsIgorCXRoZW4KKwkJc3RyZXNzX2V4aXQ9MQorCQllY2hvICJMb2cocykgb2YgZmFpbGVkIHRlc3QgcnVuKHMpOiIKKwkJZm9yIGZhaWxlZF9qb2JfbnIgaW4gJChzb3J0IC1uICIkc3RyZXNzZmFpbCIpCisJCWRvCisJCQllY2hvICJDb250ZW50cyBvZiAnJFRFU1RfUkVTVUxUU19CQVNFLnN0cmVzcy0kZmFpbGVkX2pvYl9uci5vdXQnOiIKKwkJCWNhdCAiJFRFU1RfUkVTVUxUU19CQVNFLnN0cmVzcy0kZmFpbGVkX2pvYl9uci5vdXQiCisJCWRvbmUKKwkJcm0gLXJmICIkVFJBU0hfRElSRUNUT1JZLnN0cmVzcy1mYWlsZWQiCisJCSMgTW92ZSB0aGUgbGFzdCBvbmUuCisJCW12ICIkVFJBU0hfRElSRUNUT1JZLnN0cmVzcy0kZmFpbGVkX2pvYl9uciIgIiRUUkFTSF9ESVJFQ1RPUlkuc3RyZXNzLWZhaWxlZCIKKwlmaQorCisJZXhpdCAkc3RyZXNzX2V4aXQKK2ZpCisKKyMgaWYgLS10ZWUgd2FzIHBhc3NlZCwgd3JpdGUgdGhlIG91dHB1dCBub3Qgb25seSB0byB0aGUgdGVybWluYWwsIGJ1dAorIyBhZGRpdGlvbmFsbHkgdG8gdGhlIGZpbGUgdGVzdC1yZXN1bHRzLyRCQVNFTkFNRS5vdXQsIHRvby4KK2lmIHRlc3QgIiRHSVRfVEVTVF9URUVfU1RBUlRFRCIgPSAiZG9uZSIKK3RoZW4KKwk6ICMgZG8gbm90IHJlZGlyZWN0IGFnYWluCitlbGlmIHRlc3QgLW4gIiR0ZWUiCit0aGVuCisJbWtkaXIgLXAgIiRURVNUX1JFU1VMVFNfRElSIgorCisJIyBNYWtlIHRoaXMgZmlsZW5hbWUgYXZhaWxhYmxlIHRvIHRoZSBzdWItcHJvY2VzcyBpbiBjYXNlIGl0IGlzIHVzaW5nCisJIyAtLXZlcmJvc2UtbG9nLgorCUdJVF9URVNUX1RFRV9PVVRQVVRfRklMRT0kVEVTVF9SRVNVTFRTX0JBU0Uub3V0CisJZXhwb3J0IEdJVF9URVNUX1RFRV9PVVRQVVRfRklMRQorCisJIyBUcnVuY2F0ZSBiZWZvcmUgY2FsbGluZyAidGVlIC1hIiB0byBnZXQgcmlkIG9mIHRoZSByZXN1bHRzCisJIyBmcm9tIGFueSBwcmV2aW91cyBydW5zLgorCT4iJEdJVF9URVNUX1RFRV9PVVRQVVRfRklMRSIKKworCShHSVRfVEVTVF9URUVfU1RBUlRFRD1kb25lICR7VEVTVF9TSEVMTF9QQVRIfSAiJDAiICIkQCIgMj4mMTsKKwkgZWNobyAkPyA+IiRURVNUX1JFU1VMVFNfQkFTRS5leGl0IikgfCB0ZWUgLWEgIiRHSVRfVEVTVF9URUVfT1VUUFVUX0ZJTEUiCisJdGVzdCAiJChjYXQgIiRURVNUX1JFU1VMVFNfQkFTRS5leGl0IikiID0gMAorCWV4aXQKK2ZpCisKK2lmIHRlc3QgLW4gIiR0cmFjZSIgJiYgdGVzdCAtbiAiJHRlc3RfdW50cmFjZWFibGUiCit0aGVuCisJIyAnLXgnIHRyYWNpbmcgcmVxdWVzdGVkLCBidXQgdGhpcyB0ZXN0IHNjcmlwdCBjYW4ndCBiZSByZWxpYWJseQorCSMgdHJhY2VkLCB1bmxlc3MgaXQgaXMgcnVuIHdpdGggYSBCYXNoIHZlcnNpb24gc3VwcG9ydGluZworCSMgQkFTSF9YVFJBQ0VGRCAoaW50cm9kdWNlZCBpbiBCYXNoIHY0LjEpLgorCSMKKwkjIFBlcmZvcm0gdGhpcyB2ZXJzaW9uIGNoZWNrIF9hZnRlcl8gdGhlIHRlc3Qgc2NyaXB0IHdhcworCSMgcG90ZW50aWFsbHkgcmUtZXhlY3V0ZWQgd2l0aCAkVEVTVF9TSEVMTF9QQVRIIGZvciAnLS10ZWUnIG9yCisJIyAnLS12ZXJib3NlLWxvZycsIHNvIHRoZSByaWdodCBzaGVsbCBpcyBjaGVja2VkIGFuZCB0aGUKKwkjIHdhcm5pbmcgaXMgaXNzdWVkIG9ubHkgb25jZS4KKwlpZiB0ZXN0IC1uICIkQkFTSF9WRVJTSU9OIiAmJiBldmFsICcKKwkgICAgIHRlc3QgJHtCQVNIX1ZFUlNJTkZPWzBdfSAtZ3QgNCB8fCB7CisJICAgICAgIHRlc3QgJHtCQVNIX1ZFUlNJTkZPWzBdfSAtZXEgNCAmJgorCSAgICAgICB0ZXN0ICR7QkFTSF9WRVJTSU5GT1sxXX0gLWdlIDEKKwkgICAgIH0KKwkgICAnCisJdGhlbgorCQk6IEV4ZWN1dGVkIGJ5IGEgQmFzaCB2ZXJzaW9uIHN1cHBvcnRpbmcgQkFTSF9YVFJBQ0VGRC4gIEdvb2QuCisJZWxzZQorCQllY2hvID4mMiAid2FybmluZzogaWdub3JpbmcgLXg7ICckMCcgaXMgdW50cmFjZWFibGUgd2l0aG91dCBCQVNIX1hUUkFDRUZEIgorCQl0cmFjZT0KKwlmaQorZmkKK2lmIHRlc3QgLW4gIiR0cmFjZSIgJiYgdGVzdCAteiAiJHZlcmJvc2VfbG9nIgordGhlbgorCXZlcmJvc2U9dAorZmkKKworIyBGb3IgcmVwZWF0YWJpbGl0eSwgcmVzZXQgdGhlIGVudmlyb25tZW50IHRvIGtub3duIHZhbHVlLgorIyBURVJNIGlzIHNhbml0aXplZCBiZWxvdywgYWZ0ZXIgc2F2aW5nIGNvbG9yIGNvbnRyb2wgc2VxdWVuY2VzLgorTEFORz1DCitMQ19BTEw9QworUEFHRVI9Y2F0CitUWj1VVEMKK2V4cG9ydCBMQU5HIExDX0FMTCBQQUdFUiBUWgorRURJVE9SPToKKworIyBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTiBzaG91bGQgbm90IGluZmx1ZW5jZSBnaXQgY29tbWFuZHMgZXhlY3V0ZWQKKyMgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIHRlc3QtbGliIGFuZCB0aGUgdGVzdCByZXBvLiBCYWNrIGl0IHVwLAorIyB1bnNldCBhbmQgdGhlbiByZXN0b3JlIGFmdGVyIGluaXRpYWxpemF0aW9uIGlzIGZpbmlzaGVkLgoraWYgdGVzdCAtbiAiJEdJVF9URVNUX0dFVFRFWFRfUE9JU09OIgordGhlbgorCUdJVF9URVNUX0dFVFRFWFRfUE9JU09OX09SSUc9JEdJVF9URVNUX0dFVFRFWFRfUE9JU09OCisJdW5zZXQgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04KK2ZpCisKKyMgQSBjYWxsIHRvICJ1bnNldCIgd2l0aCBubyBhcmd1bWVudHMgY2F1c2VzIGF0IGxlYXN0IFNvbGFyaXMgMTAKKyMgL3Vzci94cGc0L2Jpbi9zaCBhbmQgL2Jpbi9rc2ggdG8gYmFpbCBvdXQuICBTbyBrZWVwIHRoZSB1bnNldHMKKyMgZGVyaXZpbmcgZnJvbSB0aGUgY29tbWFuZCBzdWJzdGl0dXRpb24gY2x1c3RlcmVkIHdpdGggdGhlIG90aGVyCisjIG9uZXMuCit1bnNldCBWSVNVQUwgRU1BSUwgTEFOR1VBR0UgQ09MVU1OUyAkKCIkUEVSTF9QQVRIIiAtZSAnCisJbXkgQGVudiA9IGtleXMgJUVOVjsKKwlteSAkb2sgPSBqb2luKCJ8IiwgcXcoCisJCVRSQUNFCisJCURFQlVHCisJCVRFU1QKKwkJLipfVEVTVAorCQlQUk9WRQorCQlWQUxHUklORAorCQlVTlpJUAorCQlQRVJGXworCQlDVVJMX1ZFUkJPU0UKKwkJVFJBQ0VfQ1VSTAorCSkpOworCW15IEB2YXJzID0gZ3JlcCgvXkdJVF8vICYmICEvXkdJVF8oJG9rKS9vLCBAZW52KTsKKwlwcmludCBqb2luKCJcbiIsIEB2YXJzKTsKKycpCit1bnNldCBYREdfQ0FDSEVfSE9NRQordW5zZXQgWERHX0NPTkZJR19IT01FCit1bnNldCBHSVRQRVJMTElCCitURVNUX0FVVEhPUl9MT0NBTE5BTUU9YXV0aG9yCitURVNUX0FVVEhPUl9ET01BSU49ZXhhbXBsZS5jb20KK0dJVF9BVVRIT1JfRU1BSUw9JHtURVNUX0FVVEhPUl9MT0NBTE5BTUV9QCR7VEVTVF9BVVRIT1JfRE9NQUlOfQorR0lUX0FVVEhPUl9OQU1FPSdBIFUgVGhvcicKK1RFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRT1jb21taXR0ZXIKK1RFU1RfQ09NTUlUVEVSX0RPTUFJTj1leGFtcGxlLmNvbQorR0lUX0NPTU1JVFRFUl9FTUFJTD0ke1RFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRX1AJHtURVNUX0NPTU1JVFRFUl9ET01BSU59CitHSVRfQ09NTUlUVEVSX05BTUU9J0MgTyBNaXR0ZXInCitHSVRfTUVSR0VfVkVSQk9TSVRZPTUKK0dJVF9NRVJHRV9BVVRPRURJVD1ubworZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFkgR0lUX01FUkdFX0FVVE9FRElUCitleHBvcnQgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQVVUSE9SX05BTUUKK2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRQorZXhwb3J0IEVESVRPUgorCisjIFRlc3RzIHVzaW5nIEdJVF9UUkFDRSB0eXBpY2FsbHkgZG9uJ3Qgd2FudCA8dGltZXN0YW1wPiA8ZmlsZT46PGxpbmU+IG91dHB1dAorR0lUX1RSQUNFX0JBUkU9MQorZXhwb3J0IEdJVF9UUkFDRV9CQVJFCisKK2NoZWNrX3Zhcl9taWdyYXRpb24gKCkgeworCSMgdGhlIHdhcm5pbmdzIGFuZCBoaW50cyBnaXZlbiBmcm9tIHRoaXMgaGVscGVyIGRlcGVuZHMKKwkjIG9uIGVuZC11c2VyIHNldHRpbmdzLCB3aGljaCB3aWxsIGRpc3J1cHQgdGhlIHNlbGYtdGVzdAorCSMgZG9uZSBvbiB0aGUgdGVzdCBmcmFtZXdvcmsgaXRzZWxmLgorCWNhc2UgIiRHSVRfVEVTVF9GUkFNRVdPUktfU0VMRlRFU1QiIGluCisJdCkJcmV0dXJuIDs7CisJZXNhYworCisJb2xkX25hbWU9JDEgbmV3X25hbWU9JDIKKwlldmFsICJvbGRfaXNzZXQ9XCR7JHtvbGRfbmFtZX06K2lzc2V0fSIKKwlldmFsICJuZXdfaXNzZXQ9XCR7JHtuZXdfbmFtZX06K2lzc2V0fSIKKworCWNhc2UgIiRvbGRfaXNzZXQsJG5ld19pc3NldCIgaW4KKwlpc3NldCwpCisJCWVjaG8gPiYyICJ3YXJuaW5nOiAkb2xkX25hbWUgaXMgbm93ICRuZXdfbmFtZSIKKwkJZWNobyA+JjIgImhpbnQ6IHNldCAkbmV3X25hbWUgdG9vIGR1cmluZyB0aGUgdHJhbnNpdGlvbiBwZXJpb2QiCisJCWV2YWwgIiRuZXdfbmFtZT1cJCRvbGRfbmFtZSIKKwkJOzsKKwlpc3NldCxpc3NldCkKKwkJIyBkbyB0aGlzIGxhdGVyCisJCSMgZWNobyA+JjIgIndhcm5pbmc6ICRvbGRfbmFtZSBpcyBub3cgJG5ld19uYW1lIgorCQkjIGVjaG8gPiYyICJoaW50OiByZW1vdmUgJG9sZF9uYW1lIgorCQk7OworCWVzYWMKK30KKworY2hlY2tfdmFyX21pZ3JhdGlvbiBHSVRfRlNNT05JVE9SX1RFU1QgR0lUX1RFU1RfRlNNT05JVE9SCitjaGVja192YXJfbWlncmF0aW9uIFRFU1RfR0lUX0lOREVYX1ZFUlNJT04gR0lUX1RFU1RfSU5ERVhfVkVSU0lPTgorY2hlY2tfdmFyX21pZ3JhdGlvbiBHSVRfRk9SQ0VfUFJFTE9BRF9URVNUIEdJVF9URVNUX1BSRUxPQURfSU5ERVgKKworIyBVc2Ugc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgaW5kZXggZmlsZSBmb3JtYXQKK2lmIHRlc3QgLW4gIiR7R0lUX1RFU1RfSU5ERVhfVkVSU0lPTjoraXNzZXR9IgordGhlbgorCUdJVF9JTkRFWF9WRVJTSU9OPSIkR0lUX1RFU1RfSU5ERVhfVkVSU0lPTiIKKwlleHBvcnQgR0lUX0lOREVYX1ZFUlNJT04KK2ZpCisKKyMgQWRkIGxpYmMgTUFMTE9DIGFuZCBNQUxMT0NfUEVSVFVSQiB0ZXN0CisjIG9ubHkgaWYgd2UgYXJlIG5vdCBleGVjdXRpbmcgdGhlIHRlc3Qgd2l0aCB2YWxncmluZAoraWYgdGVzdCAtbiAiJHZhbGdyaW5kIiB8fAorICAgdGVzdCAtbiAiJFRFU1RfTk9fTUFMTE9DX0NIRUNLIgordGhlbgorCXNldHVwX21hbGxvY19jaGVjayAoKSB7CisJCTogbm90aGluZworCX0KKwl0ZWFyZG93bl9tYWxsb2NfY2hlY2sgKCkgeworCQk6IG5vdGhpbmcKKwl9CitlbHNlCisJc2V0dXBfbWFsbG9jX2NoZWNrICgpIHsKKwkJTUFMTE9DX0NIRUNLXz0zCU1BTExPQ19QRVJUVVJCXz0xNjUKKwkJZXhwb3J0IE1BTExPQ19DSEVDS18gTUFMTE9DX1BFUlRVUkJfCisJfQorCXRlYXJkb3duX21hbGxvY19jaGVjayAoKSB7CisJCXVuc2V0IE1BTExPQ19DSEVDS18gTUFMTE9DX1BFUlRVUkJfCisJfQorZmkKKworIyBQcm90ZWN0IG91cnNlbHZlcyBmcm9tIGNvbW1vbiBtaXNjb25maWd1cmF0aW9uIHRvIGV4cG9ydAorIyBDRFBBVEggaW50byB0aGUgZW52aXJvbm1lbnQKK3Vuc2V0IENEUEFUSAorCit1bnNldCBHUkVQX09QVElPTlMKK3Vuc2V0IFVOWklQCisKK2Nhc2UgJChlY2hvICRHSVRfVFJBQ0UgfHRyICJbQS1aXSIgIlthLXpdIikgaW4KKzF8Mnx0cnVlKQorCUdJVF9UUkFDRT00CisJOzsKK2VzYWMKKworIyBDb252ZW5pZW5jZQorIworIyBBIHJlZ2V4cCB0byBtYXRjaCA1LCAzNSBhbmQgNDAgaGV4ZGlnaXRzCitfeDA1PSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJworX3gzNT0iJF94MDUkX3gwNSRfeDA1JF94MDUkX3gwNSRfeDA1JF94MDUiCitfeDQwPSIkX3gzNSRfeDA1IgorCisjIFplcm8gU0hBLTEKK196NDA9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitPSURfUkVHRVg9IiRfeDQwIgorWkVST19PSUQ9JF96NDAKK0VNUFRZX1RSRUU9NGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAorRU1QVFlfQkxPQj1lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCisKKyMgTGluZSBmZWVkCitMRj0nCisnCisKKyMgU2luZ2xlIHF1b3RlCitTUT1cJworCisjIFVURi04IFpFUk8gV0lEVEggTk9OLUpPSU5FUiwgd2hpY2ggSEZTKyBpZ25vcmVzCisjIHdoZW4gY2FzZS1mb2xkaW5nIGZpbGVuYW1lcwordTIwMGM9JChwcmludGYgJ1wzNDJcMjAwXDIxNCcpCisKK2V4cG9ydCBfeDA1IF94MzUgX3g0MCBfejQwIExGIHUyMDBjIEVNUFRZX1RSRUUgRU1QVFlfQkxPQiBaRVJPX09JRCBPSURfUkVHRVgKKworIyBFYWNoIHRlc3Qgc2hvdWxkIHN0YXJ0IHdpdGggc29tZXRoaW5nIGxpa2UgdGhpcywgYWZ0ZXIgY29weXJpZ2h0IG5vdGljZXM6CisjCisjIHRlc3RfZGVzY3JpcHRpb249J0Rlc2NyaXB0aW9uIG9mIHRoaXMgdGVzdC4uLgorIyBUaGlzIHRlc3QgY2hlY2tzIGlmIGNvbW1hbmQgeHl6enkgZG9lcyB0aGUgcmlnaHQgdGhpbmcuLi4KKyMgJworIyAuIC4vdGVzdC1saWIuc2gKK3Rlc3QgIngkVEVSTSIgIT0gInhkdW1iIiAmJiAoCisJCXRlc3QgLXQgMSAmJgorCQl0cHV0IGJvbGQgPi9kZXYvbnVsbCAyPiYxICYmCisJCXRwdXQgc2V0YWYgMSA+L2Rldi9udWxsIDI+JjEgJiYKKwkJdHB1dCBzZ3IwID4vZGV2L251bGwgMj4mMQorCSkgJiYKKwljb2xvcj10CisKK2lmIHRlc3QgLW4gIiRjb2xvciIKK3RoZW4KKwkjIFNhdmUgdGhlIGNvbG9yIGNvbnRyb2wgc2VxdWVuY2VzIG5vdyByYXRoZXIgdGhhbiBydW4gdHB1dAorCSMgZWFjaCB0aW1lIHNheV9jb2xvcigpIGlzIGNhbGxlZC4gIFRoaXMgaXMgZG9uZSBmb3IgdHdvCisJIyByZWFzb25zOgorCSMgICAqIFRFUk0gd2lsbCBiZSBjaGFuZ2VkIHRvIGR1bWIKKwkjICAgKiBIT01FIHdpbGwgYmUgY2hhbmdlZCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIHRwdXQKKwkjICAgICBtaWdodCBuZWVkIHRvIHJlYWQgfi8udGVybWluZm8gZnJvbSB0aGUgb3JpZ2luYWwgSE9NRQorCSMgICAgIGRpcmVjdG9yeSB0byBnZXQgdGhlIGNvbnRyb2wgc2VxdWVuY2VzCisJIyBOb3RlOiAgVGhpcyBhcHByb2FjaCBhc3N1bWVzIHRoZSBjb250cm9sIHNlcXVlbmNlcyBkb24ndCBlbmQKKwkjIGluIGEgbmV3bGluZSBmb3IgYW55IHRlcm1pbmFsIG9mIGludGVyZXN0IChjb21tYW5kCisJIyBzdWJzdGl0dXRpb25zIHN0cmlwIHRyYWlsaW5nIG5ld2xpbmVzKS4gIEdpdmVuIHRoYXQgbW9zdAorCSMgKGFsbD8pIHRlcm1pbmFscyBpbiBjb21tb24gdXNlIGFyZSByZWxhdGVkIHRvIEVDTUEtNDgsIHRoaXMKKwkjIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uCisJc2F5X2NvbG9yX2Vycm9yPSQodHB1dCBib2xkOyB0cHV0IHNldGFmIDEpICMgYm9sZCByZWQKKwlzYXlfY29sb3Jfc2tpcD0kKHRwdXQgc2V0YWYgNCkgIyBibHVlCisJc2F5X2NvbG9yX3dhcm49JCh0cHV0IHNldGFmIDMpICMgYnJvd24veWVsbG93CisJc2F5X2NvbG9yX3Bhc3M9JCh0cHV0IHNldGFmIDIpICMgZ3JlZW4KKwlzYXlfY29sb3JfaW5mbz0kKHRwdXQgc2V0YWYgNikgIyBjeWFuCisJc2F5X2NvbG9yX3Jlc2V0PSQodHB1dCBzZ3IwKQorCXNheV9jb2xvcl89IiIgIyBubyBmb3JtYXR0aW5nIGZvciBub3JtYWwgdGV4dAorCXNheV9jb2xvciAoKSB7CisJCXRlc3QgLXogIiQxIiAmJiB0ZXN0IC1uICIkcXVpZXQiICYmIHJldHVybgorCQlldmFsICJzYXlfY29sb3JfY29sb3I9XCRzYXlfY29sb3JfJDEiCisJCXNoaWZ0CisJCXByaW50ZiAiJXNcXG4iICIkc2F5X2NvbG9yX2NvbG9yJCokc2F5X2NvbG9yX3Jlc2V0IgorCX0KK2Vsc2UKKwlzYXlfY29sb3IoKSB7CisJCXRlc3QgLXogIiQxIiAmJiB0ZXN0IC1uICIkcXVpZXQiICYmIHJldHVybgorCQlzaGlmdAorCQlwcmludGYgIiVzXG4iICIkKiIKKwl9CitmaQorCitURVJNPWR1bWIKK2V4cG9ydCBURVJNCisKK2Vycm9yICgpIHsKKwlzYXlfY29sb3IgZXJyb3IgImVycm9yOiAkKiIKKwlmaW5hbGl6ZV9qdW5pdF94bWwKKwlHSVRfRVhJVF9PSz10CisJZXhpdCAxCit9CisKK0JVRyAoKSB7CisJZXJyb3IgPiY3ICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiAkKiIKK30KKworc2F5ICgpIHsKKwlzYXlfY29sb3IgaW5mbyAiJCoiCit9CisKK2lmIHRlc3QgLW4gIiRIQVJORVNTX0FDVElWRSIKK3RoZW4KKwlpZiB0ZXN0ICIkdmVyYm9zZSIgPSB0IHx8IHRlc3QgLW4gIiR2ZXJib3NlX29ubHkiCisJdGhlbgorCQlwcmludGYgJ0JhaWwgb3V0ISAlc1xuJyBcCisJCSAndmVyYm9zZSBtb2RlIGZvcmJpZGRlbiB1bmRlciBUQVAgaGFybmVzczsgdHJ5IC0tdmVyYm9zZS1sb2cnCisJCWV4aXQgMQorCWZpCitmaQorCit0ZXN0ICIke3Rlc3RfZGVzY3JpcHRpb259IiAhPSAiIiB8fAorZXJyb3IgIlRlc3Qgc2NyaXB0IGRpZCBub3Qgc2V0IHRlc3RfZGVzY3JpcHRpb24uIgorCitpZiB0ZXN0ICIkaGVscCIgPSAidCIKK3RoZW4KKwlwcmludGYgJyVzXG4nICIkdGVzdF9kZXNjcmlwdGlvbiIKKwlleGl0IDAKK2ZpCisKK2V4ZWMgNT4mMQorZXhlYyA2PCYwCitleGVjIDc+JjIKK2lmIHRlc3QgIiR2ZXJib3NlX2xvZyIgPSAidCIKK3RoZW4KKwlleGVjIDM+PiIkR0lUX1RFU1RfVEVFX09VVFBVVF9GSUxFIiA0PiYzCitlbGlmIHRlc3QgIiR2ZXJib3NlIiA9ICJ0IgordGhlbgorCWV4ZWMgND4mMiAzPiYxCitlbHNlCisJZXhlYyA0Pi9kZXYvbnVsbCAzPi9kZXYvbnVsbAorZmkKKworIyBTZW5kIGFueSAiLXgiIG91dHB1dCBkaXJlY3RseSB0byBzdGRlcnIgdG8gYXZvaWQgcG9sbHV0aW5nIHRlc3RzCisjIHdoaWNoIGNhcHR1cmUgc3RkZXJyLiBXZSBjYW4gZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgc2luY2UgaXQKKyMgaGFzIG5vIGVmZmVjdCBpZiB0cmFjaW5nIGlzbid0IHR1cm5lZCBvbi4KKyMKKyMgTm90ZSB0aGF0IHRoaXMgc2V0cyB1cCB0aGUgdHJhY2UgZmQgYXMgc29vbiBhcyB3ZSBhc3NpZ24gdGhlIHZhcmlhYmxlLCBzbyBpdAorIyBtdXN0IGNvbWUgYWZ0ZXIgdGhlIGNyZWF0aW9uIG9mIGRlc2NyaXB0b3IgNCBhYm92ZS4gTGlrZXdpc2UsIHdlIG11c3QgbmV2ZXIKKyMgdW5zZXQgdGhpcywgYXMgaXQgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBjbG9zaW5nIGRlc2NyaXB0b3IgNCwgd2hpY2ggd2UKKyMgdXNlIHRvIHNob3cgdmVyYm9zZSB0ZXN0cyB0byB0aGUgdXNlci4KKyMKKyMgTm90ZSBhbHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCBvciB3YW50IHRvIGV4cG9ydCBpdC4gVGhlIHRyYWNpbmcgaXMgbG9jYWwgdG8KKyMgdGhpcyBzaGVsbCwgYW5kIHdlIHdvdWxkIG5vdCB3YW50IHRvIGluZmx1ZW5jZSBhbnkgc2hlbGxzIHdlIGV4ZWMuCitCQVNIX1hUUkFDRUZEPTQKKwordGVzdF9mYWlsdXJlPTAKK3Rlc3RfY291bnQ9MAordGVzdF9maXhlZD0wCit0ZXN0X2Jyb2tlbj0wCit0ZXN0X3N1Y2Nlc3M9MAorCit0ZXN0X2V4dGVybmFsX2hhc190YXA9MAorCitkaWUgKCkgeworCWNvZGU9JD8KKwkjIFRoaXMgaXMgcmVzcG9uc2libGUgZm9yIHJ1bm5pbmcgdGhlIGF0ZXhpdCBjb21tYW5kcyBldmVuIHdoZW4gYQorCSMgdGVzdCBzY3JpcHQgcnVuIHdpdGggJy0taW1tZWRpYXRlJyBmYWlscywgb3Igd2hlbiB0aGUgdXNlciBoaXRzCisJIyBjdHJsLUMsIGkuZS4gd2hlbiAndGVzdF9kb25lJyBpcyBub3QgaW52b2tlZCBhdCBhbGwuCisJdGVzdF9hdGV4aXRfaGFuZGxlciB8fCBjb2RlPSQ/CisJaWYgdGVzdCAtbiAiJEdJVF9FWElUX09LIgorCXRoZW4KKwkJZXhpdCAkY29kZQorCWVsc2UKKwkJZWNobyA+JjUgIkZBVEFMOiBVbmV4cGVjdGVkIGV4aXQgd2l0aCBjb2RlICRjb2RlIgorCQlleGl0IDEKKwlmaQorfQorCitHSVRfRVhJVF9PSz0KK3RyYXAgJ2RpZScgRVhJVAorIyBEaXNhYmxlICcteCcgdHJhY2luZywgYmVjYXVzZSB3aXRoIHNvbWUgc2hlbGxzLCBub3RhYmx5IGRhc2gsIGl0CisjIHByZXZlbnRzIHJ1bm5pbmcgdGhlIGNsZWFudXAgY29tbWFuZHMgd2hlbiBhIHRlc3Qgc2NyaXB0IHJ1biB3aXRoCisjICctLXZlcmJvc2UtbG9nIC14JyBpcyBpbnRlcnJ1cHRlZC4KK3RyYXAgJ3sgY29kZT0kPzsgc2V0ICt4OyB9IDI+L2Rldi9udWxsOyBleGl0ICRjb2RlJyBJTlQgVEVSTSBIVVAKKworIyBUaGUgdXNlci1mYWNpbmcgZnVuY3Rpb25zIGFyZSBsb2FkZWQgZnJvbSBhIHNlcGFyYXRlIGZpbGUgc28gdGhhdAorIyB0ZXN0X3BlcmYgc3Vic2hlbGxzIGNhbiBoYXZlIHRoZW0gdG9vCisuICIkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWItZnVuY3Rpb25zLnNoIgorCisjIFlvdSBhcmUgbm90IGV4cGVjdGVkIHRvIGNhbGwgdGVzdF9va18gYW5kIHRlc3RfZmFpbHVyZV8gZGlyZWN0bHksIHVzZQorIyB0aGUgdGVzdF9leHBlY3RfKiBmdW5jdGlvbnMgaW5zdGVhZC4KKwordGVzdF9va18gKCkgeworCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiCisJdGhlbgorCQl3cml0ZV9qdW5pdF94bWxfdGVzdGNhc2UgIiQqIgorCWZpCisJdGVzdF9zdWNjZXNzPSQoKCR0ZXN0X3N1Y2Nlc3MgKyAxKSkKKwlzYXlfY29sb3IgIiIgIm9rICR0ZXN0X2NvdW50IC0gJEAiCit9CisKK3Rlc3RfZmFpbHVyZV8gKCkgeworCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiCisJdGhlbgorCQlqdW5pdF9pbnNlcnQ9IjxmYWlsdXJlIG1lc3NhZ2U9XCJub3Qgb2sgJHRlc3RfY291bnQgLSIKKwkJanVuaXRfaW5zZXJ0PSIkanVuaXRfaW5zZXJ0ICQoeG1sX2F0dHJfZW5jb2RlICIkMSIpXCI+IgorCQlqdW5pdF9pbnNlcnQ9IiRqdW5pdF9pbnNlcnQgJCh4bWxfYXR0cl9lbmNvZGUgXAorCQkJIiQoaWYgdGVzdCAtbiAiJEdJVF9URVNUX1RFRV9PVVRQVVRfRklMRSIKKwkJCSAgIHRoZW4KKwkJCQl0ZXN0LXRvb2wgcGF0aC11dGlscyBza2lwLW4tYnl0ZXMgXAorCQkJCQkiJEdJVF9URVNUX1RFRV9PVVRQVVRfRklMRSIgJEdJVF9URVNUX1RFRV9PRkZTRVQKKwkJCSAgIGVsc2UKKwkJCQlwcmludGYgJyVzXG4nICIkQCIgfCBzZWQgMWQKKwkJCSAgIGZpKSIpIgorCQlqdW5pdF9pbnNlcnQ9IiRqdW5pdF9pbnNlcnQ8L2ZhaWx1cmU+IgorCQlpZiB0ZXN0IC1uICIkR0lUX1RFU1RfVEVFX09VVFBVVF9GSUxFIgorCQl0aGVuCisJCQlqdW5pdF9pbnNlcnQ9IiRqdW5pdF9pbnNlcnQ8c3lzdGVtLWVycj4kKHhtbF9hdHRyX2VuY29kZSBcCisJCQkJIiQoY2F0ICIkR0lUX1RFU1RfVEVFX09VVFBVVF9GSUxFIikiKTwvc3lzdGVtLWVycj4iCisJCWZpCisJCXdyaXRlX2p1bml0X3htbF90ZXN0Y2FzZSAiJDEiICIgICAgICAkanVuaXRfaW5zZXJ0IgorCWZpCisJdGVzdF9mYWlsdXJlPSQoKCR0ZXN0X2ZhaWx1cmUgKyAxKSkKKwlzYXlfY29sb3IgZXJyb3IgIm5vdCBvayAkdGVzdF9jb3VudCAtICQxIgorCXNoaWZ0CisJcHJpbnRmICclc1xuJyAiJCoiIHwgc2VkIC1lICdzL14vIwkvJworCXRlc3QgIiRpbW1lZGlhdGUiID0gIiIgfHwgeyBmaW5hbGl6ZV9qdW5pdF94bWw7IEdJVF9FWElUX09LPXQ7IGV4aXQgMTsgfQorfQorCit0ZXN0X2tub3duX2Jyb2tlbl9va18gKCkgeworCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiCisJdGhlbgorCQl3cml0ZV9qdW5pdF94bWxfdGVzdGNhc2UgIiQqIChicmVha2FnZSBmaXhlZCkiCisJZmkKKwl0ZXN0X2ZpeGVkPSQoKCR0ZXN0X2ZpeGVkKzEpKQorCXNheV9jb2xvciBlcnJvciAib2sgJHRlc3RfY291bnQgLSAkQCAjIFRPRE8ga25vd24gYnJlYWthZ2UgdmFuaXNoZWQiCit9CisKK3Rlc3Rfa25vd25fYnJva2VuX2ZhaWx1cmVfICgpIHsKKwlpZiB0ZXN0IC1uICIkd3JpdGVfanVuaXRfeG1sIgorCXRoZW4KKwkJd3JpdGVfanVuaXRfeG1sX3Rlc3RjYXNlICIkKiAoa25vd24gYnJlYWthZ2UpIgorCWZpCisJdGVzdF9icm9rZW49JCgoJHRlc3RfYnJva2VuKzEpKQorCXNheV9jb2xvciB3YXJuICJub3Qgb2sgJHRlc3RfY291bnQgLSAkQCAjIFRPRE8ga25vd24gYnJlYWthZ2UiCit9CisKK3Rlc3RfZGVidWcgKCkgeworCXRlc3QgIiRkZWJ1ZyIgPSAiIiB8fCBldmFsICIkMSIKK30KKworbWF0Y2hfcGF0dGVybl9saXN0ICgpIHsKKwlhcmc9IiQxIgorCXNoaWZ0CisJdGVzdCAteiAiJCoiICYmIHJldHVybiAxCisJZm9yIHBhdHRlcm5fCisJZG8KKwkJY2FzZSAiJGFyZyIgaW4KKwkJJHBhdHRlcm5fKQorCQkJcmV0dXJuIDAKKwkJZXNhYworCWRvbmUKKwlyZXR1cm4gMQorfQorCittYXRjaF90ZXN0X3NlbGVjdG9yX2xpc3QgKCkgeworCXRpdGxlPSIkMSIKKwlzaGlmdAorCWFyZz0iJDEiCisJc2hpZnQKKwl0ZXN0IC16ICIkMSIgJiYgcmV0dXJuIDAKKworCSMgQm90aCBjb21tYXMgYW5kIHdoaXRlc3BhY2UgYXJlIGFjY2VwdGVkIGFzIHNlcGFyYXRvcnMuCisJT0xESUZTPSRJRlMKKwlJRlM9JyAJLCcKKwlzZXQgLS0gJDEKKwlJRlM9JE9MRElGUworCisJIyBJZiB0aGUgZmlyc3Qgc2VsZWN0b3IgaXMgbmVnYXRpdmUgd2UgaW5jbHVkZSBieSBkZWZhdWx0LgorCWluY2x1ZGU9CisJY2FzZSAiJDEiIGluCisJCSEqKSBpbmNsdWRlPXQgOzsKKwllc2FjCisKKwlmb3Igc2VsZWN0b3IKKwlkbworCQlvcmlnX3NlbGVjdG9yPSRzZWxlY3RvcgorCisJCXBvc2l0aXZlPXQKKwkJY2FzZSAiJHNlbGVjdG9yIiBpbgorCQkJISopCisJCQkJcG9zaXRpdmU9CisJCQkJc2VsZWN0b3I9JHtzZWxlY3RvciMjP30KKwkJCQk7OworCQllc2FjCisKKwkJdGVzdCAteiAiJHNlbGVjdG9yIiAmJiBjb250aW51ZQorCisJCWNhc2UgIiRzZWxlY3RvciIgaW4KKwkJCSotKikKKwkJCQlpZiBleHByICJ6JHtzZWxlY3RvciUlLSp9IiA6ICJ6WzAtOV0qW14wLTldIiA+L2Rldi9udWxsCisJCQkJdGhlbgorCQkJCQllY2hvICJlcnJvcjogJHRpdGxlOiBpbnZhbGlkIG5vbi1udW1lcmljIGluIHJhbmdlIiBcCisJCQkJCQkic3RhcnQ6ICckb3JpZ19zZWxlY3RvciciID4mMgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQkJCWlmIGV4cHIgInoke3NlbGVjdG9yIyotfSIgOiAielswLTldKlteMC05XSIgPi9kZXYvbnVsbAorCQkJCXRoZW4KKwkJCQkJZWNobyAiZXJyb3I6ICR0aXRsZTogaW52YWxpZCBub24tbnVtZXJpYyBpbiByYW5nZSIgXAorCQkJCQkJImVuZDogJyRvcmlnX3NlbGVjdG9yJyIgPiYyCisJCQkJCWV4aXQgMQorCQkJCWZpCisJCQkJOzsKKwkJCSopCisJCQkJaWYgZXhwciAieiRzZWxlY3RvciIgOiAielswLTldKlteMC05XSIgPi9kZXYvbnVsbAorCQkJCXRoZW4KKwkJCQkJZWNobyAiZXJyb3I6ICR0aXRsZTogaW52YWxpZCBub24tbnVtZXJpYyBpbiB0ZXN0IiBcCisJCQkJCQkic2VsZWN0b3I6ICckb3JpZ19zZWxlY3RvciciID4mMgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQllc2FjCisKKwkJIyBTaG9ydCBjdXQgZm9yICJvYnZpb3VzIiBjYXNlcworCQl0ZXN0IC16ICIkaW5jbHVkZSIgJiYgdGVzdCAteiAiJHBvc2l0aXZlIiAmJiBjb250aW51ZQorCQl0ZXN0IC1uICIkaW5jbHVkZSIgJiYgdGVzdCAtbiAiJHBvc2l0aXZlIiAmJiBjb250aW51ZQorCisJCWNhc2UgIiRzZWxlY3RvciIgaW4KKwkJCS0qKQorCQkJCWlmIHRlc3QgJGFyZyAtbGUgJHtzZWxlY3RvciMtfQorCQkJCXRoZW4KKwkJCQkJaW5jbHVkZT0kcG9zaXRpdmUKKwkJCQlmaQorCQkJCTs7CisJCQkqLSkKKwkJCQlpZiB0ZXN0ICRhcmcgLWdlICR7c2VsZWN0b3IlLX0KKwkJCQl0aGVuCisJCQkJCWluY2x1ZGU9JHBvc2l0aXZlCisJCQkJZmkKKwkJCQk7OworCQkJKi0qKQorCQkJCWlmIHRlc3QgJHtzZWxlY3RvciUlLSp9IC1sZSAkYXJnIFwKKwkJCQkJJiYgdGVzdCAkYXJnIC1sZSAke3NlbGVjdG9yIyotfQorCQkJCXRoZW4KKwkJCQkJaW5jbHVkZT0kcG9zaXRpdmUKKwkJCQlmaQorCQkJCTs7CisJCQkqKQorCQkJCWlmIHRlc3QgJGFyZyAtZXEgJHNlbGVjdG9yCisJCQkJdGhlbgorCQkJCQlpbmNsdWRlPSRwb3NpdGl2ZQorCQkJCWZpCisJCQkJOzsKKwkJZXNhYworCWRvbmUKKworCXRlc3QgLW4gIiRpbmNsdWRlIgorfQorCittYXliZV90ZWFyZG93bl92ZXJib3NlICgpIHsKKwl0ZXN0IC16ICIkdmVyYm9zZV9vbmx5IiAmJiByZXR1cm4KKwlleGVjIDQ+L2Rldi9udWxsIDM+L2Rldi9udWxsCisJdmVyYm9zZT0KK30KKworbGFzdF92ZXJib3NlPXQKK21heWJlX3NldHVwX3ZlcmJvc2UgKCkgeworCXRlc3QgLXogIiR2ZXJib3NlX29ubHkiICYmIHJldHVybgorCWlmIG1hdGNoX3BhdHRlcm5fbGlzdCAkdGVzdF9jb3VudCAkdmVyYm9zZV9vbmx5CisJdGhlbgorCQlleGVjIDQ+JjIgMz4mMQorCQkjIEVtaXQgYSBkZWxpbWl0aW5nIGJsYW5rIGxpbmUgd2hlbiBnb2luZyBmcm9tCisJCSMgbm9uLXZlcmJvc2UgdG8gdmVyYm9zZS4gIFdpdGhpbiB2ZXJib3NlIG1vZGUgdGhlCisJCSMgZGVsaW1pdGVyIGlzIHByaW50ZWQgYnkgdGVzdF9leHBlY3RfKi4gIFRoZSBjaG9pY2UKKwkJIyBvZiB0aGUgaW5pdGlhbCAkbGFzdF92ZXJib3NlIGlzIHN1Y2ggdGhhdCBiZWZvcmUKKwkJIyB0ZXN0IDEsIHdlIGRvIG5vdCBwcmludCBpdC4KKwkJdGVzdCAteiAiJGxhc3RfdmVyYm9zZSIgJiYgZWNobyA+JjMgIiIKKwkJdmVyYm9zZT10CisJZWxzZQorCQlleGVjIDQ+L2Rldi9udWxsIDM+L2Rldi9udWxsCisJCXZlcmJvc2U9CisJZmkKKwlsYXN0X3ZlcmJvc2U9JHZlcmJvc2UKK30KKworbWF5YmVfdGVhcmRvd25fdmFsZ3JpbmQgKCkgeworCXRlc3QgLXogIiRHSVRfVkFMR1JJTkQiICYmIHJldHVybgorCUdJVF9WQUxHUklORF9FTkFCTEVEPQorfQorCittYXliZV9zZXR1cF92YWxncmluZCAoKSB7CisJdGVzdCAteiAiJEdJVF9WQUxHUklORCIgJiYgcmV0dXJuCisJaWYgdGVzdCAteiAiJHZhbGdyaW5kX29ubHkiCisJdGhlbgorCQlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJCXJldHVybgorCWZpCisJR0lUX1ZBTEdSSU5EX0VOQUJMRUQ9CisJaWYgbWF0Y2hfcGF0dGVybl9saXN0ICR0ZXN0X2NvdW50ICR2YWxncmluZF9vbmx5CisJdGhlbgorCQlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJZmkKK30KKword2FudF90cmFjZSAoKSB7CisJdGVzdCAiJHRyYWNlIiA9IHQgJiYgeworCQl0ZXN0ICIkdmVyYm9zZSIgPSB0IHx8IHRlc3QgIiR2ZXJib3NlX2xvZyIgPSB0CisJfQorfQorCisjIFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBiZWNhdXNlIHNvbWUgdGVzdHMgdXNlCisjICJyZXR1cm4iIHRvIGVuZCBhIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgYmxvY2sgZWFybHkKKyMgKGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBydW4gYW55IGNsZWFudXAgbGlrZQorIyAic2V0ICt4IikuCit0ZXN0X2V2YWxfaW5uZXJfICgpIHsKKwkjIERvIG5vdCBhZGQgYW55dGhpbmcgZXh0cmEgKGluY2x1ZGluZyBMRikgYWZ0ZXIgJyQqJworCWV2YWwgIgorCQl3YW50X3RyYWNlICYmIHNldCAteAorCQkkKiIKK30KKwordGVzdF9ldmFsXyAoKSB7CisJIyBJZiAiLXgiIHRyYWNpbmcgaXMgaW4gZWZmZWN0LCB0aGVuIHdlIHdhbnQgdG8gYXZvaWQgcG9sbHV0aW5nIHN0ZGVycgorCSMgd2l0aCBub24tdGVzdCBjb21tYW5kcy4gQnV0IG9uY2UgaW4gInNldCAteCIgbW9kZSwgd2UgY2Fubm90IHByZXZlbnQKKwkjIHRoZSBzaGVsbCBmcm9tIHByaW50aW5nIHRoZSAic2V0ICt4IiB0byB0dXJuIGl0IG9mZiAobm9yIHRoZSBzYXZpbmcKKwkjIG9mICQ/IGJlZm9yZSB0aGF0KS4gQnV0IHdlIGNhbiBtYWtlIHN1cmUgdGhhdCB0aGUgb3V0cHV0IGdvZXMgdG8KKwkjIC9kZXYvbnVsbC4KKwkjCisJIyBUaGVyZSBhcmUgYSBmZXcgc3VidGxldGllcyBoZXJlOgorCSMKKwkjICAgLSB3ZSBoYXZlIHRvIHJlZGlyZWN0IGRlc2NyaXB0b3IgNCBpbiBhZGRpdGlvbiB0byAyLCB0byBjb3ZlcgorCSMgICAgIEJBU0hfWFRSQUNFRkQKKwkjCisJIyAgIC0gdGhlIGFjdHVhbCBldmFsIGhhcyB0byBjb21lIGJlZm9yZSB0aGUgcmVkaXJlY3Rpb24gYmxvY2sgKHNpbmNlCisJIyAgICAgaXQgbmVlZHMgdG8gc2VlIGRlc2NyaXB0b3IgNCB0byBzZXQgdXAgaXRzIHN0ZGVycikKKwkjCisJIyAgIC0gbGlrZXdpc2UsIGFueSBlcnJvciBtZXNzYWdlIHdlIHByaW50IG11c3QgYmUgb3V0c2lkZSB0aGUgYmxvY2sgdG8KKwkjICAgICBhY2Nlc3MgZGVzY3JpcHRvciA0CisJIworCSMgICAtIGNoZWNraW5nICQ/IGhhcyB0byBjb21lIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBldmFsLCBidXQgaXQgbXVzdAorCSMgICAgIGJlIF9pbnNpZGVfIHRoZSBibG9jayB0byBhdm9pZCBwb2xsdXRpbmcgdGhlICJzZXQgLXgiIG91dHB1dAorCSMKKworCXRlc3RfZXZhbF9pbm5lcl8gIiRAIiA8L2Rldi9udWxsID4mMyAyPiY0CisJeworCQl0ZXN0X2V2YWxfcmV0Xz0kPworCQlpZiB3YW50X3RyYWNlCisJCXRoZW4KKwkJCXNldCAreAorCQlmaQorCX0gMj4vZGV2L251bGwgND4mMgorCisJaWYgdGVzdCAiJHRlc3RfZXZhbF9yZXRfIiAhPSAwICYmIHdhbnRfdHJhY2UKKwl0aGVuCisJCXNheV9jb2xvciBlcnJvciA+JjQgImVycm9yOiBsYXN0IGNvbW1hbmQgZXhpdGVkIHdpdGggXCQ/PSR0ZXN0X2V2YWxfcmV0XyIKKwlmaQorCXJldHVybiAkdGVzdF9ldmFsX3JldF8KK30KKwordGVzdF9ydW5fICgpIHsKKwl0ZXN0X2NsZWFudXA9OgorCWV4cGVjdGluZ19mYWlsdXJlPSQyCisKKwlpZiB0ZXN0ICIke0dJVF9URVNUX0NIQUlOX0xJTlQ6LTF9IiAhPSAwOyB0aGVuCisJCSMgdHVybiBvZmYgdHJhY2luZyBmb3IgdGhpcyB0ZXN0LWV2YWwsIGFzIGl0IHNpbXBseSBjcmVhdGVzCisJCSMgY29uZnVzaW5nIG5vaXNlIGluIHRoZSAiLXgiIG91dHB1dAorCQl0cmFjZV90bXA9JHRyYWNlCisJCXRyYWNlPQorCQkjIDExNyBpcyBtYWdpYyBiZWNhdXNlIGl0IGlzIHVubGlrZWx5IHRvIG1hdGNoIHRoZSBleGl0CisJCSMgY29kZSBvZiBvdGhlciBwcm9ncmFtcworCQlpZiAkKHByaW50ZiAnJXNcbicgIiQxIiB8IHNlZCAtZiAiJEdJVF9CVUlMRF9ESVIvdC9jaGFpbmxpbnQuc2VkIiB8IGdyZXAgLXEgJz8hW0EtWl1bQS1aXSo/IScpIHx8CisJCQl0ZXN0ICJPSy0xMTciICE9ICIkKHRlc3RfZXZhbF8gIihleGl0IDExNykgJiYgJDEke0xGfSR7TEZ9ZWNobyBPSy1cJD8iIDM+JjEpIgorCQl0aGVuCisJCQlCVUcgImJyb2tlbiAmJi1jaGFpbiBvciBydW4tYXdheSBIRVJFLURPQzogJDEiCisJCWZpCisJCXRyYWNlPSR0cmFjZV90bXAKKwlmaQorCisJc2V0dXBfbWFsbG9jX2NoZWNrCisJdGVzdF9ldmFsXyAiJDEiCisJZXZhbF9yZXQ9JD8KKwl0ZWFyZG93bl9tYWxsb2NfY2hlY2sKKworCWlmIHRlc3QgLXogIiRpbW1lZGlhdGUiIHx8IHRlc3QgJGV2YWxfcmV0ID0gMCB8fAorCSAgIHRlc3QgLW4gIiRleHBlY3RpbmdfZmFpbHVyZSIgJiYgdGVzdCAiJHRlc3RfY2xlYW51cCIgIT0gIjoiCisJdGhlbgorCQlzZXR1cF9tYWxsb2NfY2hlY2sKKwkJdGVzdF9ldmFsXyAiJHRlc3RfY2xlYW51cCIKKwkJdGVhcmRvd25fbWFsbG9jX2NoZWNrCisJZmkKKwlpZiB0ZXN0ICIkdmVyYm9zZSIgPSAidCIgJiYgdGVzdCAtbiAiJEhBUk5FU1NfQUNUSVZFIgorCXRoZW4KKwkJZWNobyAiIgorCWZpCisJcmV0dXJuICIkZXZhbF9yZXQiCit9CisKK3Rlc3Rfc3RhcnRfICgpIHsKKwl0ZXN0X2NvdW50PSQoKCR0ZXN0X2NvdW50KzEpKQorCW1heWJlX3NldHVwX3ZlcmJvc2UKKwltYXliZV9zZXR1cF92YWxncmluZAorCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiCisJdGhlbgorCQlqdW5pdF9zdGFydD0kKHRlc3QtdG9vbCBkYXRlIGdldG5hbm9zKQorCWZpCit9CisKK3Rlc3RfZmluaXNoXyAoKSB7CisJZWNobyA+JjMgIiIKKwltYXliZV90ZWFyZG93bl92YWxncmluZAorCW1heWJlX3RlYXJkb3duX3ZlcmJvc2UKKwlpZiB0ZXN0IC1uICIkR0lUX1RFU1RfVEVFX09GRlNFVCIKKwl0aGVuCisJCUdJVF9URVNUX1RFRV9PRkZTRVQ9JCh0ZXN0LXRvb2wgcGF0aC11dGlscyBmaWxlLXNpemUgXAorCQkJIiRHSVRfVEVTVF9URUVfT1VUUFVUX0ZJTEUiKQorCWZpCit9CisKK3Rlc3Rfc2tpcCAoKSB7CisJdG9fc2tpcD0KKwlza2lwcGVkX3JlYXNvbj0KKwlpZiBtYXRjaF9wYXR0ZXJuX2xpc3QgJHRoaXNfdGVzdC4kdGVzdF9jb3VudCAkR0lUX1NLSVBfVEVTVFMKKwl0aGVuCisJCXRvX3NraXA9dAorCQlza2lwcGVkX3JlYXNvbj0iR0lUX1NLSVBfVEVTVFMiCisJZmkKKwlpZiB0ZXN0IC16ICIkdG9fc2tpcCIgJiYgdGVzdCAtbiAiJHJ1bl9saXN0IiAmJgorCSAgICEgbWF0Y2hfdGVzdF9zZWxlY3Rvcl9saXN0ICctLXJ1bicgJHRlc3RfY291bnQgIiRydW5fbGlzdCIKKwl0aGVuCisJCXRvX3NraXA9dAorCQlza2lwcGVkX3JlYXNvbj0iLS1ydW4iCisJZmkKKwlpZiB0ZXN0IC16ICIkdG9fc2tpcCIgJiYgdGVzdCAtbiAiJHRlc3RfcHJlcmVxIiAmJgorCSAgICEgdGVzdF9oYXZlX3ByZXJlcSAiJHRlc3RfcHJlcmVxIgorCXRoZW4KKwkJdG9fc2tpcD10CisKKwkJb2ZfcHJlcmVxPQorCQlpZiB0ZXN0ICIkbWlzc2luZ19wcmVyZXEiICE9ICIkdGVzdF9wcmVyZXEiCisJCXRoZW4KKwkJCW9mX3ByZXJlcT0iIG9mICR0ZXN0X3ByZXJlcSIKKwkJZmkKKwkJc2tpcHBlZF9yZWFzb249Im1pc3NpbmcgJG1pc3NpbmdfcHJlcmVxJHtvZl9wcmVyZXF9IgorCWZpCisKKwljYXNlICIkdG9fc2tpcCIgaW4KKwl0KQorCQlpZiB0ZXN0IC1uICIkd3JpdGVfanVuaXRfeG1sIgorCQl0aGVuCisJCQltZXNzYWdlPSIkKHhtbF9hdHRyX2VuY29kZSAiJHNraXBwZWRfcmVhc29uIikiCisJCQl3cml0ZV9qdW5pdF94bWxfdGVzdGNhc2UgIiQxIiBcCisJCQkJIiAgICAgIDxza2lwcGVkIG1lc3NhZ2U9XCIkbWVzc2FnZVwiIC8+IgorCQlmaQorCisJCXNheV9jb2xvciBza2lwID4mMyAic2tpcHBpbmcgdGVzdDogJEAiCisJCXNheV9jb2xvciBza2lwICJvayAkdGVzdF9jb3VudCAjIHNraXAgJDEgKCRza2lwcGVkX3JlYXNvbikiCisJCTogdHJ1ZQorCQk7OworCSopCisJCWZhbHNlCisJCTs7CisJZXNhYworfQorCisjIHN0dWI7IHBlcmYtbGliIG92ZXJyaWRlcyBpdAordGVzdF9hdF9lbmRfaG9va18gKCkgeworCToKK30KKword3JpdGVfanVuaXRfeG1sICgpIHsKKwljYXNlICIkMSIgaW4KKwktLXRydW5jYXRlKQorCQk+IiRqdW5pdF94bWxfcGF0aCIKKwkJanVuaXRfaGF2ZV90ZXN0Y2FzZT0KKwkJc2hpZnQKKwkJOzsKKwllc2FjCisJcHJpbnRmICclc1xuJyAiJEAiID4+IiRqdW5pdF94bWxfcGF0aCIKK30KKworeG1sX2F0dHJfZW5jb2RlICgpIHsKKwlwcmludGYgJyVzXG4nICIkQCIgfCB0ZXN0LXRvb2wgeG1sLWVuY29kZQorfQorCit3cml0ZV9qdW5pdF94bWxfdGVzdGNhc2UgKCkgeworCWp1bml0X2F0dHJzPSJuYW1lPVwiJCh4bWxfYXR0cl9lbmNvZGUgIiR0aGlzX3Rlc3QuJHRlc3RfY291bnQgJDEiKVwiIgorCXNoaWZ0CisJanVuaXRfYXR0cnM9IiRqdW5pdF9hdHRycyBjbGFzc25hbWU9XCIkdGhpc190ZXN0XCIiCisJanVuaXRfYXR0cnM9IiRqdW5pdF9hdHRycyB0aW1lPVwiJCh0ZXN0LXRvb2wgXAorCQlkYXRlIGdldG5hbm9zICRqdW5pdF9zdGFydClcIiIKKwl3cml0ZV9qdW5pdF94bWwgIiQocHJpbnRmICclc1xuJyBcCisJCSIgICAgPHRlc3RjYXNlICRqdW5pdF9hdHRycz4iICIkQCIgIiAgICA8L3Rlc3RjYXNlPiIpIgorCWp1bml0X2hhdmVfdGVzdGNhc2U9dAorfQorCitmaW5hbGl6ZV9qdW5pdF94bWwgKCkgeworCWlmIHRlc3QgLW4gIiR3cml0ZV9qdW5pdF94bWwiICYmIHRlc3QgLW4gIiRqdW5pdF94bWxfcGF0aCIKKwl0aGVuCisJCXRlc3QgLW4gIiRqdW5pdF9oYXZlX3Rlc3RjYXNlIiB8fCB7CisJCQlqdW5pdF9zdGFydD0kKHRlc3QtdG9vbCBkYXRlIGdldG5hbm9zKQorCQkJd3JpdGVfanVuaXRfeG1sX3Rlc3RjYXNlICJhbGwgdGVzdHMgc2tpcHBlZCIKKwkJfQorCisJCSMgYWRqdXN0IHRoZSBvdmVyYWxsIHRpbWUKKwkJanVuaXRfdGltZT0kKHRlc3QtdG9vbCBkYXRlIGdldG5hbm9zICRqdW5pdF9zdWl0ZV9zdGFydCkKKwkJc2VkIC1lICJzL1woPHRlc3RzdWl0ZS4qXCkgdGltZT1cIlteXCJdKlwiL1wxLyIgXAorCQkJLWUgInMvPHRlc3RzdWl0ZSBbXj5dKi8mIHRpbWU9XCIkanVuaXRfdGltZVwiLyIgXAorCQkJPCIkanVuaXRfeG1sX3BhdGgiID4iJGp1bml0X3htbF9wYXRoLm5ldyIKKwkJbXYgIiRqdW5pdF94bWxfcGF0aC5uZXciICIkanVuaXRfeG1sX3BhdGgiCisKKwkJd3JpdGVfanVuaXRfeG1sICIgIDwvdGVzdHN1aXRlPiIgIjwvdGVzdHN1aXRlcz4iCisJCXdyaXRlX2p1bml0X3htbD0KKwlmaQorfQorCit0ZXN0X2F0ZXhpdF9jbGVhbnVwPToKK3Rlc3RfYXRleGl0X2hhbmRsZXIgKCkgeworCSMgSW4gYSBzdWNjZWVkaW5nIHRlc3Qgc2NyaXB0ICd0ZXN0X2F0ZXhpdF9oYW5kbGVyJyBpcyBpbnZva2VkCisJIyB0d2ljZTogZmlyc3QgZnJvbSAndGVzdF9kb25lJywgdGhlbiBmcm9tICdkaWUnIGluIHRoZSB0cmFwIG9uCisJIyBFWElULgorCSMgVGhpcyBjb25kaXRpb24gYW5kIHJlc2V0dGluZyAndGVzdF9hdGV4aXRfY2xlYW51cCcgYmVsb3cgbWFrZXMKKwkjIHN1cmUgdGhhdCB0aGUgcmVnaXN0ZXJlZCBjbGVhbnVwIGNvbW1hbmRzIGFyZSBydW4gb25seSBvbmNlLgorCXRlc3QgOiAhPSAiJHRlc3RfYXRleGl0X2NsZWFudXAiIHx8IHJldHVybiAwCisKKwlzZXR1cF9tYWxsb2NfY2hlY2sKKwl0ZXN0X2V2YWxfICIkdGVzdF9hdGV4aXRfY2xlYW51cCIKKwl0ZXN0X2F0ZXhpdF9jbGVhbnVwPToKKwl0ZWFyZG93bl9tYWxsb2NfY2hlY2sKK30KKwordGVzdF9kb25lICgpIHsKKwlHSVRfRVhJVF9PSz10CisKKwkjIFJ1biB0aGUgYXRleGl0IGNvbW1hbmRzIF9iZWZvcmVfIHRoZSB0cmFzaCBkaXJlY3RvcnkgaXMKKwkjIHJlbW92ZWQsIHNvIHRoZSBjb21tYW5kcyBjYW4gYWNjZXNzIHBpZGZpbGVzIGFuZCBzb2NrZXQgZmlsZXMuCisJdGVzdF9hdGV4aXRfaGFuZGxlcgorCisJZmluYWxpemVfanVuaXRfeG1sCisKKwlpZiB0ZXN0IC16ICIkSEFSTkVTU19BQ1RJVkUiCisJdGhlbgorCQlta2RpciAtcCAiJFRFU1RfUkVTVUxUU19ESVIiCisKKwkJY2F0ID4iJFRFU1RfUkVTVUxUU19CQVNFLmNvdW50cyIgPDwtRU9GCisJCXRvdGFsICR0ZXN0X2NvdW50CisJCXN1Y2Nlc3MgJHRlc3Rfc3VjY2VzcworCQlmaXhlZCAkdGVzdF9maXhlZAorCQlicm9rZW4gJHRlc3RfYnJva2VuCisJCWZhaWxlZCAkdGVzdF9mYWlsdXJlCisKKwkJRU9GCisJZmkKKworCWlmIHRlc3QgIiR0ZXN0X2ZpeGVkIiAhPSAwCisJdGhlbgorCQlzYXlfY29sb3IgZXJyb3IgIiMgJHRlc3RfZml4ZWQga25vd24gYnJlYWthZ2UocykgdmFuaXNoZWQ7IHBsZWFzZSB1cGRhdGUgdGVzdChzKSIKKwlmaQorCWlmIHRlc3QgIiR0ZXN0X2Jyb2tlbiIgIT0gMAorCXRoZW4KKwkJc2F5X2NvbG9yIHdhcm4gIiMgc3RpbGwgaGF2ZSAkdGVzdF9icm9rZW4ga25vd24gYnJlYWthZ2UocykiCisJZmkKKwlpZiB0ZXN0ICIkdGVzdF9icm9rZW4iICE9IDAgfHwgdGVzdCAiJHRlc3RfZml4ZWQiICE9IDAKKwl0aGVuCisJCXRlc3RfcmVtYWluaW5nPSQoKCAkdGVzdF9jb3VudCAtICR0ZXN0X2Jyb2tlbiAtICR0ZXN0X2ZpeGVkICkpCisJCW1zZz0icmVtYWluaW5nICR0ZXN0X3JlbWFpbmluZyB0ZXN0KHMpIgorCWVsc2UKKwkJdGVzdF9yZW1haW5pbmc9JHRlc3RfY291bnQKKwkJbXNnPSIkdGVzdF9jb3VudCB0ZXN0KHMpIgorCWZpCisJY2FzZSAiJHRlc3RfZmFpbHVyZSIgaW4KKwkwKQorCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDAKKwkJdGhlbgorCQkJaWYgdGVzdCAkdGVzdF9yZW1haW5pbmcgLWd0IDAKKwkJCXRoZW4KKwkJCQlzYXlfY29sb3IgcGFzcyAiIyBwYXNzZWQgYWxsICRtc2ciCisJCQlmaQorCisJCQkjIE1heWJlIHByaW50IFNLSVAgbWVzc2FnZQorCQkJdGVzdCAteiAiJHNraXBfYWxsIiB8fCBza2lwX2FsbD0iIyBTS0lQICRza2lwX2FsbCIKKwkJCWNhc2UgIiR0ZXN0X2NvdW50IiBpbgorCQkJMCkKKwkJCQlzYXkgIjEuLiR0ZXN0X2NvdW50JHtza2lwX2FsbDorICRza2lwX2FsbH0iCisJCQkJOzsKKwkJCSopCisJCQkJdGVzdCAteiAiJHNraXBfYWxsIiB8fAorCQkJCXNheV9jb2xvciB3YXJuICIkc2tpcF9hbGwiCisJCQkJc2F5ICIxLi4kdGVzdF9jb3VudCIKKwkJCQk7OworCQkJZXNhYworCQlmaQorCisJCWlmIHRlc3QgLXogIiRkZWJ1ZyIKKwkJdGhlbgorCQkJdGVzdCAtZCAiJFRSQVNIX0RJUkVDVE9SWSIgfHwKKwkJCWVycm9yICJUZXN0cyBwYXNzZWQgYnV0IHRyYXNoIGRpcmVjdG9yeSBhbHJlYWR5IHJlbW92ZWQgYmVmb3JlIHRlc3QgY2xlYW51cDsgYWJvcnRpbmciCisKKwkJCWNkICIkVFJBU0hfRElSRUNUT1JZLy4uIiAmJgorCQkJcm0gLWZyICIkVFJBU0hfRElSRUNUT1JZIiB8fCB7CisJCQkJIyB0cnkgYWdhaW4gaW4gYSBiaXQKKwkJCQlzbGVlcCA1OworCQkJCXJtIC1mciAiJFRSQVNIX0RJUkVDVE9SWSIKKwkJCX0gfHwKKwkJCWVycm9yICJUZXN0cyBwYXNzZWQgYnV0IHRlc3QgY2xlYW51cCBmYWlsZWQ7IGFib3J0aW5nIgorCQlmaQorCQl0ZXN0X2F0X2VuZF9ob29rXworCisJCWV4aXQgMCA7OworCisJKikKKwkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwCisJCXRoZW4KKwkJCXNheV9jb2xvciBlcnJvciAiIyBmYWlsZWQgJHRlc3RfZmFpbHVyZSBhbW9uZyAkbXNnIgorCQkJc2F5ICIxLi4kdGVzdF9jb3VudCIKKwkJZmkKKworCQlleGl0IDEgOzsKKworCWVzYWMKK30KKworaWYgdGVzdCAtbiAiJHZhbGdyaW5kIgordGhlbgorCW1ha2Vfc3ltbGluayAoKSB7CisJCXRlc3QgLWggIiQyIiAmJgorCQl0ZXN0ICIkMSIgPSAiJChyZWFkbGluayAiJDIiKSIgfHwgeworCQkJIyBiZSBzdXBlciBwYXJhbm9pZAorCQkJaWYgbWtkaXIgIiQyIi5sb2NrCisJCQl0aGVuCisJCQkJcm0gLWYgIiQyIiAmJgorCQkJCWxuIC1zICIkMSIgIiQyIiAmJgorCQkJCXJtIC1yICIkMiIubG9jaworCQkJZWxzZQorCQkJCXdoaWxlIHRlc3QgLWQgIiQyIi5sb2NrCisJCQkJZG8KKwkJCQkJc2F5ICJXYWl0aW5nIGZvciBsb2NrIG9uICQyLiIKKwkJCQkJc2xlZXAgMQorCQkJCWRvbmUKKwkJCWZpCisJCX0KKwl9CisKKwltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgKCkgeworCQkjIGhhbmRsZSBvbmx5IGV4ZWN1dGFibGVzLCB1bmxlc3MgdGhleSBhcmUgc2hlbGwgbGlicmFyaWVzIHRoYXQKKwkJIyBuZWVkIHRvIGJlIGluIHRoZSBleGVjLXBhdGguCisJCXRlc3QgLXggIiQxIiB8fAorCQl0ZXN0ICIjICIgPSAiJCh0ZXN0X2NvcHlfYnl0ZXMgMiA8IiQxIikiIHx8CisJCXJldHVybjsKKworCQliYXNlPSQoYmFzZW5hbWUgIiQxIikKKwkJY2FzZSAiJGJhc2UiIGluCisJCXRlc3QtKikKKwkJCXN5bWxpbmtfdGFyZ2V0PSIkR0lUX0JVSUxEX0RJUi90L2hlbHBlci8kYmFzZSIKKwkJCTs7CisJCSopCisJCQlzeW1saW5rX3RhcmdldD0iJEdJVF9CVUlMRF9ESVIvJGJhc2UiCisJCQk7OworCQllc2FjCisJCSMgZG8gbm90IG92ZXJyaWRlIHNjcmlwdHMKKwkJaWYgdGVzdCAteCAiJHN5bWxpbmtfdGFyZ2V0IiAmJgorCQkgICAgdGVzdCAhIC1kICIkc3ltbGlua190YXJnZXQiICYmCisJCSAgICB0ZXN0ICIjISIgIT0gIiQodGVzdF9jb3B5X2J5dGVzIDIgPCIkc3ltbGlua190YXJnZXQiKSIKKwkJdGhlbgorCQkJc3ltbGlua190YXJnZXQ9Li4vdmFsZ3JpbmQuc2gKKwkJZmkKKwkJY2FzZSAiJGJhc2UiIGluCisJCSouc2h8Ki5wZXJsKQorCQkJc3ltbGlua190YXJnZXQ9Li4vdW5wcm9jZXNzZWQtc2NyaXB0CisJCWVzYWMKKwkJIyBjcmVhdGUgdGhlIGxpbmssIG9yIHJlcGxhY2UgaXQgaWYgaXQgaXMgb3V0IG9mIGRhdGUKKwkJbWFrZV9zeW1saW5rICIkc3ltbGlua190YXJnZXQiICIkR0lUX1ZBTEdSSU5EL2Jpbi8kYmFzZSIgfHwgZXhpdAorCX0KKworCSMgb3ZlcnJpZGUgYWxsIGdpdCBleGVjdXRhYmxlcyBpbiBURVNUX0RJUkVDVE9SWS8uLgorCUdJVF9WQUxHUklORD0kVEVTVF9ESVJFQ1RPUlkvdmFsZ3JpbmQKKwlta2RpciAtcCAiJEdJVF9WQUxHUklORCIvYmluCisJZm9yIGZpbGUgaW4gJEdJVF9CVUlMRF9ESVIvZ2l0KiAkR0lUX0JVSUxEX0RJUi90L2hlbHBlci90ZXN0LSoKKwlkbworCQltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgJGZpbGUKKwlkb25lCisJIyBzcGVjaWFsLWNhc2UgdGhlIG1lcmdldG9vbHMgbG9hZGFibGVzCisJbWFrZV9zeW1saW5rICIkR0lUX0JVSUxEX0RJUiIvbWVyZ2V0b29scyAiJEdJVF9WQUxHUklORC9iaW4vbWVyZ2V0b29scyIKKwlPTERJRlM9JElGUworCUlGUz06CisJZm9yIHBhdGggaW4gJFBBVEgKKwlkbworCQlscyAiJHBhdGgiL2dpdC0qIDI+IC9kZXYvbnVsbCB8CisJCXdoaWxlIHJlYWQgZmlsZQorCQlkbworCQkJbWFrZV92YWxncmluZF9zeW1saW5rICIkZmlsZSIKKwkJZG9uZQorCWRvbmUKKwlJRlM9JE9MRElGUworCVBBVEg9JEdJVF9WQUxHUklORC9iaW46JFBBVEgKKwlHSVRfRVhFQ19QQVRIPSRHSVRfVkFMR1JJTkQvYmluCisJZXhwb3J0IEdJVF9WQUxHUklORAorCUdJVF9WQUxHUklORF9NT0RFPSIkdmFsZ3JpbmQiCisJZXhwb3J0IEdJVF9WQUxHUklORF9NT0RFCisJR0lUX1ZBTEdSSU5EX0VOQUJMRUQ9dAorCXRlc3QgLW4gIiR2YWxncmluZF9vbmx5IiAmJiBHSVRfVkFMR1JJTkRfRU5BQkxFRD0KKwlleHBvcnQgR0lUX1ZBTEdSSU5EX0VOQUJMRUQKK2VsaWYgdGVzdCAtbiAiJEdJVF9URVNUX0lOU1RBTExFRCIKK3RoZW4KKwlHSVRfRVhFQ19QQVRIPSQoJEdJVF9URVNUX0lOU1RBTExFRC9naXQgLS1leGVjLXBhdGgpICB8fAorCWVycm9yICJDYW5ub3QgcnVuIGdpdCBmcm9tICRHSVRfVEVTVF9JTlNUQUxMRUQuIgorCVBBVEg9JEdJVF9URVNUX0lOU1RBTExFRDokR0lUX0JVSUxEX0RJUi90L2hlbHBlcjokUEFUSAorCUdJVF9FWEVDX1BBVEg9JHtHSVRfVEVTVF9FWEVDX1BBVEg6LSRHSVRfRVhFQ19QQVRIfQorZWxzZSAjIG5vcm1hbCBjYXNlLCB1c2UgLi4vYmluLXdyYXBwZXJzIG9ubHkgdW5sZXNzICR3aXRoX2Rhc2hlczoKKwlpZiB0ZXN0IC1uICIkbm9fYmluX3dyYXBwZXJzIgorCXRoZW4KKwkJd2l0aF9kYXNoZXM9dAorCWVsc2UKKwkJZ2l0X2Jpbl9kaXI9IiRHSVRfQlVJTERfRElSL2Jpbi13cmFwcGVycyIKKwkJaWYgISB0ZXN0IC14ICIkZ2l0X2Jpbl9kaXIvZ2l0IgorCQl0aGVuCisJCQlpZiB0ZXN0IC16ICIkd2l0aF9kYXNoZXMiCisJCQl0aGVuCisJCQkJc2F5ICIkZ2l0X2Jpbl9kaXIvZ2l0IGlzIG5vdCBleGVjdXRhYmxlOyB1c2luZyBHSVRfRVhFQ19QQVRIIgorCQkJZmkKKwkJCXdpdGhfZGFzaGVzPXQKKwkJZmkKKwkJUEFUSD0iJGdpdF9iaW5fZGlyOiRQQVRIIgorCWZpCisJR0lUX0VYRUNfUEFUSD0kR0lUX0JVSUxEX0RJUgorCWlmIHRlc3QgLW4gIiR3aXRoX2Rhc2hlcyIKKwl0aGVuCisJCVBBVEg9IiRHSVRfQlVJTERfRElSOiRHSVRfQlVJTERfRElSL3QvaGVscGVyOiRQQVRIIgorCWZpCitmaQorR0lUX1RFTVBMQVRFX0RJUj0iJEdJVF9CVUlMRF9ESVIiL3RlbXBsYXRlcy9ibHQKK0dJVF9DT05GSUdfTk9TWVNURU09MQorR0lUX0FUVFJfTk9TWVNURU09MQorZXhwb3J0IFBBVEggR0lUX0VYRUNfUEFUSCBHSVRfVEVNUExBVEVfRElSIEdJVF9DT05GSUdfTk9TWVNURU0gR0lUX0FUVFJfTk9TWVNURU0KKworaWYgdGVzdCAteiAiJEdJVF9URVNUX0NNUCIKK3RoZW4KKwlpZiB0ZXN0IC1uICIkR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVCIKKwl0aGVuCisJCUdJVF9URVNUX0NNUD0iJERJRkYgLWMiCisJZWxzZQorCQlHSVRfVEVTVF9DTVA9IiRESUZGIC11IgorCWZpCitmaQorCitHSVRQRVJMTElCPSIkR0lUX0JVSUxEX0RJUiIvcGVybC9idWlsZC9saWIKK2V4cG9ydCBHSVRQRVJMTElCCit0ZXN0IC1kICIkR0lUX0JVSUxEX0RJUiIvdGVtcGxhdGVzL2JsdCB8fCB7CisJZXJyb3IgIllvdSBoYXZlbid0IGJ1aWx0IHRoaW5ncyB5ZXQsIGhhdmUgeW91PyIKK30KKworaWYgISB0ZXN0IC14ICIkR0lUX0JVSUxEX0RJUiIvdC9oZWxwZXIvdGVzdC10b29sJFgKK3RoZW4KKwllY2hvID4mMiAnWW91IG5lZWQgdG8gYnVpbGQgdGVzdC10b29sOicKKwllY2hvID4mMiAnUnVuICJtYWtlIHQvaGVscGVyL3Rlc3QtdG9vbCIgaW4gdGhlIHNvdXJjZSAodG9wbGV2ZWwpIGRpcmVjdG9yeScKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCByZXBvc2l0b3J5CitybSAtZnIgIiRUUkFTSF9ESVJFQ1RPUlkiIHx8IHsKKwlHSVRfRVhJVF9PSz10CisJZWNobyA+JjUgIkZBVEFMOiBDYW5ub3QgcHJlcGFyZSB0ZXN0IGFyZWEiCisJZXhpdCAxCit9CisKK0hPTUU9IiRUUkFTSF9ESVJFQ1RPUlkiCitHTlVQR0hPTUU9IiRIT01FL2dudXBnLWhvbWUtbm90LXVzZWQiCitleHBvcnQgSE9NRSBHTlVQR0hPTUUKKworaWYgdGVzdCAteiAiJFRFU1RfTk9fQ1JFQVRFX1JFUE8iCit0aGVuCisJdGVzdF9jcmVhdGVfcmVwbyAiJFRSQVNIX0RJUkVDVE9SWSIKK2Vsc2UKKwlta2RpciAtcCAiJFRSQVNIX0RJUkVDVE9SWSIKK2ZpCisKKyMgVXNlIC1QIHRvIHJlc29sdmUgc3ltbGlua3MgaW4gb3VyIHdvcmtpbmcgZGlyZWN0b3J5IHNvIHRoYXQgdGhlIGN3ZAorIyBpbiBzdWJwcm9jZXNzZXMgbGlrZSBnaXQgZXF1YWxzIG91ciAkUFdEIChmb3IgcGF0aG5hbWUgY29tcGFyaXNvbnMpLgorY2QgLVAgIiRUUkFTSF9ESVJFQ1RPUlkiIHx8IGV4aXQgMQorCit0aGlzX3Rlc3Q9JHswIyMqL30KK3RoaXNfdGVzdD0ke3RoaXNfdGVzdCUlLSp9CitpZiBtYXRjaF9wYXR0ZXJuX2xpc3QgIiR0aGlzX3Rlc3QiICRHSVRfU0tJUF9URVNUUwordGhlbgorCXNheV9jb2xvciBpbmZvID4mMyAic2tpcHBpbmcgdGVzdCAkdGhpc190ZXN0IGFsdG9nZXRoZXIiCisJc2tpcF9hbGw9InNraXAgYWxsIHRlc3RzIGluICR0aGlzX3Rlc3QiCisJdGVzdF9kb25lCitmaQorCitpZiB0ZXN0IC1uICIkd3JpdGVfanVuaXRfeG1sIgordGhlbgorCWp1bml0X3htbF9kaXI9IiRURVNUX09VVFBVVF9ESVJFQ1RPUlkvb3V0IgorCW1rZGlyIC1wICIkanVuaXRfeG1sX2RpciIKKwlqdW5pdF94bWxfYmFzZT0kezAjIyovfQorCWp1bml0X3htbF9wYXRoPSIkanVuaXRfeG1sX2Rpci9URVNULSR7anVuaXRfeG1sX2Jhc2UlLnNofS54bWwiCisJanVuaXRfYXR0cnM9Im5hbWU9XCIke2p1bml0X3htbF9iYXNlJS5zaH1cIiIKKwlqdW5pdF9hdHRycz0iJGp1bml0X2F0dHJzIHRpbWVzdGFtcD1cIiQoVFo9VVRDIFwKKwkJZGF0ZSArJVktJW0tJWRUJUg6JU06JVMpXCIiCisJd3JpdGVfanVuaXRfeG1sIC0tdHJ1bmNhdGUgIjx0ZXN0c3VpdGVzPiIgIiAgPHRlc3RzdWl0ZSAkanVuaXRfYXR0cnM+IgorCWp1bml0X3N1aXRlX3N0YXJ0PSQodGVzdC10b29sIGRhdGUgZ2V0bmFub3MpCisJaWYgdGVzdCAtbiAiJEdJVF9URVNUX1RFRV9PVVRQVVRfRklMRSIKKwl0aGVuCisJCUdJVF9URVNUX1RFRV9PRkZTRVQ9MAorCWZpCitmaQorCisjIFByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlICd5ZXMnIHV0aWxpdHk7IHRoZSB1cHBlciBib3VuZAorIyBsaW1pdCBpcyB0aGVyZSB0byBoZWxwIFdpbmRvd3MgdGhhdCBjYW5ub3Qgc3RvcCB0aGlzIGxvb3AgZnJvbQorIyB3YXN0aW5nIGN5Y2xlcyB3aGVuIHRoZSBkb3duc3RyZWFtIHN0b3BzIHJlYWRpbmcsIHNvIGRvIG5vdCBiZQorIyB0ZW1wdGVkIHRvIHR1cm4gaXQgaW50byBhbiBpbmZpbml0ZSBsb29wLiBjZi4gNjEyOWM5MzAgKCJ0ZXN0LWxpYjoKKyMgbGltaXQgdGhlIG91dHB1dCBvZiB0aGUgeWVzIHV0aWxpdHkiLCAyMDE2LTAyLTAyKQoreWVzICgpIHsKKwlpZiB0ZXN0ICQjID0gMAorCXRoZW4KKwkJeT15CisJZWxzZQorCQl5PSIkKiIKKwlmaQorCisJaT0wCisJd2hpbGUgdGVzdCAkaSAtbHQgOTkKKwlkbworCQllY2hvICIkeSIKKwkJaT0kKCgkaSsxKSkKKwlkb25lCit9CisKKyMgVGhlIEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBjb2RlIGhvb2tzIGludG8gdGVzdF9zZXRfcHJlcmVxKCksIGFuZAorIyB0aHVzIG5lZWRzIHRvIGJlIHNldCB1cCByZWFsbHkgZWFybHksIGFuZCBzZXQgYW4gaW50ZXJuYWwgdmFyaWFibGUKKyMgZm9yIGNvbnZlbmllbmNlIHNvIHRoZSBob3QgdGVzdF9zZXRfcHJlcmVxKCkgY29kZXBhdGggZG9lc24ndCBuZWVkCisjIHRvIGNhbGwgImdpdCBlbnYtLWhlbHBlciIgKHZpYSB0ZXN0X2Jvb2xfZW52KS4gT25seSBkbyB0aGF0IHdvcmsKKyMgaWYgbmVlZGVkIGJ5IHNlZWluZyBpZiBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgaXMgc2V0IGF0IGFsbC4KK0dJVF9URVNUX0ZBSUxfUFJFUkVRU19JTlRFUk5BTD0KK2lmIHRlc3QgLW4gIiRHSVRfVEVTVF9GQUlMX1BSRVJFUVMiCit0aGVuCisJaWYgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgZmFsc2UKKwl0aGVuCisJCUdJVF9URVNUX0ZBSUxfUFJFUkVRU19JTlRFUk5BTD10cnVlCisJCXRlc3Rfc2V0X3ByZXJlcSBGQUlMX1BSRVJFUVMKKwlmaQorZWxzZQorCXRlc3RfbGF6eV9wcmVyZXEgRkFJTF9QUkVSRVFTICcKKwkJdGVzdF9ib29sX2VudiBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgZmFsc2UKKwknCitmaQorCisjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MsIGFuZCBvdGhlciBPUy1zcGVjaWZpYyB0aGluZ3MKK3VuYW1lX3M9JCh1bmFtZSAtcykKK2Nhc2UgJHVuYW1lX3MgaW4KKypNSU5HVyopCisJIyBXaW5kb3dzIGhhcyBpdHMgb3duIChpbmNvbXBhdGlibGUpIHNvcnQgYW5kIGZpbmQKKwlzb3J0ICgpIHsKKwkJL3Vzci9iaW4vc29ydCAiJEAiCisJfQorCWZpbmQgKCkgeworCQkvdXNyL2Jpbi9maW5kICIkQCIKKwl9CisJIyBnaXQgc2VlcyBXaW5kb3dzLXN0eWxlIHB3ZAorCXB3ZCAoKSB7CisJCWJ1aWx0aW4gcHdkIC1XCisJfQorCSMgbm8gUE9TSVggcGVybWlzc2lvbnMKKwkjIGJhY2tzbGFzaGVzIGluIHBhdGhzcGVjIGFyZSBjb252ZXJ0ZWQgdG8gJy8nCisJIyBleGVjIGRvZXMgbm90IGluaGVyaXQgdGhlIFBJRAorCXRlc3Rfc2V0X3ByZXJlcSBNSU5HVworCXRlc3Rfc2V0X3ByZXJlcSBOQVRJVkVfQ1JMRgorCXRlc3Rfc2V0X3ByZXJlcSBTRURfU1RSSVBTX0NSCisJdGVzdF9zZXRfcHJlcmVxIEdSRVBfU1RSSVBTX0NSCisJR0lUX1RFU1RfQ01QPW1pbmd3X3Rlc3RfY21wCisJOzsKKypDWUdXSU4qKQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KKwl0ZXN0X3NldF9wcmVyZXEgRVhFQ0tFRVBTUElECisJdGVzdF9zZXRfcHJlcmVxIENZR1dJTgorCXRlc3Rfc2V0X3ByZXJlcSBTRURfU1RSSVBTX0NSCisJdGVzdF9zZXRfcHJlcmVxIEdSRVBfU1RSSVBTX0NSCisJOzsKK0ZyZWVCU0QpCisJdGVzdF9zZXRfcHJlcmVxIFJFR0VYX0lMTFNFUQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KKwl0ZXN0X3NldF9wcmVyZXEgQlNMQVNIUFNQRUMKKwl0ZXN0X3NldF9wcmVyZXEgRVhFQ0tFRVBTUElECisJOzsKKyopCisJdGVzdF9zZXRfcHJlcmVxIFBPU0lYUEVSTQorCXRlc3Rfc2V0X3ByZXJlcSBCU0xBU0hQU1BFQworCXRlc3Rfc2V0X3ByZXJlcSBFWEVDS0VFUFNQSUQKKwk7OworZXNhYworCisoIENPTFVNTlM9MSAmJiB0ZXN0ICRDT0xVTU5TID0gMSApICYmIHRlc3Rfc2V0X3ByZXJlcSBDT0xVTU5TX0NBTl9CRV8xCit0ZXN0IC16ICIkTk9fUEVSTCIgJiYgdGVzdF9zZXRfcHJlcmVxIFBFUkwKK3Rlc3QgLXogIiROT19QVEhSRUFEUyIgJiYgdGVzdF9zZXRfcHJlcmVxIFBUSFJFQURTCit0ZXN0IC16ICIkTk9fUFlUSE9OIiAmJiB0ZXN0X3NldF9wcmVyZXEgUFlUSE9OCit0ZXN0IC1uICIkVVNFX0xJQlBDUkUxJFVTRV9MSUJQQ1JFMiIgJiYgdGVzdF9zZXRfcHJlcmVxIFBDUkUKK3Rlc3QgLW4gIiRVU0VfTElCUENSRTEiICYmIHRlc3Rfc2V0X3ByZXJlcSBMSUJQQ1JFMQordGVzdCAtbiAiJFVTRV9MSUJQQ1JFMiIgJiYgdGVzdF9zZXRfcHJlcmVxIExJQlBDUkUyCit0ZXN0IC16ICIkTk9fR0VUVEVYVCIgJiYgdGVzdF9zZXRfcHJlcmVxIEdFVFRFWFQKKworaWYgdGVzdCAtbiAiJEdJVF9URVNUX0dFVFRFWFRfUE9JU09OX09SSUciCit0aGVuCisJR0lUX1RFU1RfR0VUVEVYVF9QT0lTT049JEdJVF9URVNUX0dFVFRFWFRfUE9JU09OX09SSUcKKwlleHBvcnQgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04KKwl1bnNldCBHSVRfVEVTVF9HRVRURVhUX1BPSVNPTl9PUklHCitmaQorCit0ZXN0X2xhenlfcHJlcmVxIENfTE9DQUxFX09VVFBVVCAnCisJISB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0dFVFRFWFRfUE9JU09OIGZhbHNlCisnCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9DSEVDS19DQUNIRV9UUkVFIgordGhlbgorCUdJVF9URVNUX0NIRUNLX0NBQ0hFX1RSRUU9dHJ1ZQorCWV4cG9ydCBHSVRfVEVTVF9DSEVDS19DQUNIRV9UUkVFCitmaQorCit0ZXN0X2xhenlfcHJlcmVxIFBJUEUgJworCSMgdGVzdCB3aGV0aGVyIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIEZJRk9zCisJdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTiAmJgorCXJtIC1mIHRlc3RmaWZvICYmIG1rZmlmbyB0ZXN0ZmlmbworJworCit0ZXN0X2xhenlfcHJlcmVxIFNZTUxJTktTICcKKwkjIHRlc3Qgd2hldGhlciB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBzeW1ib2xpYyBsaW5rcworCWxuIC1zIHggeSAmJiB0ZXN0IC1oIHkKKycKKwordGVzdF9sYXp5X3ByZXJlcSBGSUxFTU9ERSAnCisJdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmZpbGVtb2RlKSIgPSB0cnVlCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgQ0FTRV9JTlNFTlNJVElWRV9GUyAnCisJZWNobyBnb29kID5DYW1lbENhc2UgJiYKKwllY2hvIGJhZCA+Y2FtZWxjYXNlICYmCisJdGVzdCAiJChjYXQgQ2FtZWxDYXNlKSIgIT0gZ29vZAorJworCit0ZXN0X2xhenlfcHJlcmVxIEZVTk5ZTkFNRVMgJworCXRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXICYmCisJdG91Y2ggLS0gXAorCQkiRlVOTllOQU1FUyB0YWIJZW1iZWRkZWQiIFwKKwkJIkZVTk5ZTkFNRVMgXCJxdW90ZSBlbWJlZGRlZFwiIiBcCisJCSJGVU5OWU5BTUVTIG5ld2xpbmUKK2VtYmVkZGVkIiAyPi9kZXYvbnVsbCAmJgorCXJtIC0tIFwKKwkJIkZVTk5ZTkFNRVMgdGFiCWVtYmVkZGVkIiBcCisJCSJGVU5OWU5BTUVTIFwicXVvdGUgZW1iZWRkZWRcIiIgXAorCQkiRlVOTllOQU1FUyBuZXdsaW5lCitlbWJlZGRlZCIgMj4vZGV2L251bGwKKycKKwordGVzdF9sYXp5X3ByZXJlcSBVVEY4X05GRF9UT19ORkMgJworCSMgY2hlY2sgd2hldGhlciBGUyBjb252ZXJ0cyBuZmQgdW5pY29kZSB0byBuZmMKKwlhdW1sPSQocHJpbnRmICJcMzAzXDI0NCIpCisJYXVtbGNkaWFyPSQocHJpbnRmICJcMTQxXDMxNFwyMTAiKQorCT4iJGF1bWwiICYmCisJdGVzdCAtZiAiJGF1bWxjZGlhciIKKycKKwordGVzdF9sYXp5X3ByZXJlcSBBVVRPSURFTlQgJworCXNhbmVfdW5zZXQgR0lUX0FVVEhPUl9OQU1FICYmCisJc2FuZV91bnNldCBHSVRfQVVUSE9SX0VNQUlMICYmCisJZ2l0IHZhciBHSVRfQVVUSE9SX0lERU5UCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgRVhQRU5TSVZFICcKKwl0ZXN0IC1uICIkR0lUX1RFU1RfTE9ORyIKKycKKwordGVzdF9sYXp5X3ByZXJlcSBFWFBFTlNJVkVfT05fV0lORE9XUyAnCisJdGVzdF9oYXZlX3ByZXJlcSBFWFBFTlNJVkUgfHwgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorJworCit0ZXN0X2xhenlfcHJlcmVxIFVTUl9CSU5fVElNRSAnCisJdGVzdCAteCAvdXNyL2Jpbi90aW1lCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgTk9UX1JPT1QgJworCXVpZD0kKGlkIC11KSAmJgorCXRlc3QgIiR1aWQiICE9IDAKKycKKwordGVzdF9sYXp5X3ByZXJlcSBKR0lUICcKKwlqZ2l0IC0tdmVyc2lvbgorJworCisjIFNBTklUWSBpcyBhYm91dCAiY2FuIHlvdSBjb3JyZWN0bHkgcHJlZGljdCB3aGF0IHRoZSBmaWxlc3lzdGVtIHdvdWxkCisjIGRvIGJ5IG9ubHkgbG9va2luZyBhdCB0aGUgcGVybWlzc2lvbiBiaXRzIG9mIHRoZSBmaWxlcyBhbmQKKyMgZGlyZWN0b3JpZXM/IiAgQSB0eXBpY2FsIGV4YW1wbGUgb2YgIVNBTklUWSBpcyBydW5uaW5nIHRoZSB0ZXN0CisjIHN1aXRlIGFzIHJvb3QsIHdoZXJlIGEgdGVzdCBtYXkgZXhwZWN0ICJjaG1vZCAtciBmaWxlICYmIGNhdCBmaWxlIgorIyB0byBmYWlsIGJlY2F1c2UgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB1bnJlYWRhYmxlIGFmdGVyIGEgc3VjY2Vzc2Z1bAorIyBjaG1vZC4gIEluIGFuIGVudmlyb25tZW50IChpLmUuIGNvbWJpbmF0aW9uIG9mIHdoYXQgZmlsZXN5c3RlbSBpcworIyBiZWluZyB1c2VkIGFuZCB3aG8gaXMgcnVubmluZyB0aGUgdGVzdHMpIHRoYXQgbGFja3MgU0FOSVRZLCB5b3UgbWF5CisjIGJlIGFibGUgdG8gZGVsZXRlIG9yIGNyZWF0ZSBhIGZpbGUgd2hlbiB0aGUgY29udGFpbmluZyBkaXJlY3RvcnkKKyMgZG9lc24ndCBoYXZlIHdyaXRlIHBlcm1pc3Npb25zLCBvciBhY2Nlc3MgYSBmaWxlIGV2ZW4gaWYgdGhlCisjIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSByZWFkIG9yIGV4ZWN1dGUgcGVybWlzc2lvbnMuCisKK3Rlc3RfbGF6eV9wcmVyZXEgU0FOSVRZICcKKwlta2RpciBTQU5FVEVTVEQuMSBTQU5FVEVTVEQuMiAmJgorCisJY2htb2QgK3cgU0FORVRFU1RELjEgU0FORVRFU1RELjIgJiYKKwk+U0FORVRFU1RELjEveCAyPlNBTkVURVNURC4yL3ggJiYKKwljaG1vZCAtdyBTQU5FVEVTVEQuMSAmJgorCWNobW9kIC1yIFNBTkVURVNURC4xL3ggJiYKKwljaG1vZCAtcnggU0FORVRFU1RELjIgfHwKKwlCVUcgImNhbm5vdCBwcmVwYXJlIFNBTkVURVNURCIKKworCSEgdGVzdCAtciBTQU5FVEVTVEQuMS94ICYmCisJISBybSBTQU5FVEVTVEQuMS94ICYmICEgdGVzdCAtZiBTQU5FVEVTVEQuMi94CisJc3RhdHVzPSQ/CisKKwljaG1vZCArcnd4IFNBTkVURVNURC4xIFNBTkVURVNURC4yICYmCisJcm0gLXJmIFNBTkVURVNURC4xIFNBTkVURVNURC4yIHx8CisJQlVHICJjYW5ub3QgY2xlYW4gU0FORVRFU1REIgorCXJldHVybiAkc3RhdHVzCisnCisKK3Rlc3QgRnJlZUJTRCAhPSAkdW5hbWVfcyB8fCBHSVRfVU5aSVA9JHtHSVRfVU5aSVA6LS91c3IvbG9jYWwvYmluL3VuemlwfQorR0lUX1VOWklQPSR7R0lUX1VOWklQOi11bnppcH0KK3Rlc3RfbGF6eV9wcmVyZXEgVU5aSVAgJworCSIkR0lUX1VOWklQIiAtdgorCXRlc3QgJD8gLW5lIDEyNworJworCitydW5fd2l0aF9saW1pdGVkX2NtZGxpbmUgKCkgeworCSh1bGltaXQgLXMgMTI4ICYmICIkQCIpCit9CisKK3Rlc3RfbGF6eV9wcmVyZXEgQ01ETElORV9MSU1JVCAnCisJdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTiAmJgorCXJ1bl93aXRoX2xpbWl0ZWRfY21kbGluZSB0cnVlCisnCisKK3J1bl93aXRoX2xpbWl0ZWRfc3RhY2sgKCkgeworCSh1bGltaXQgLXMgMTI4ICYmICIkQCIpCit9CisKK3Rlc3RfbGF6eV9wcmVyZXEgVUxJTUlUX1NUQUNLX1NJWkUgJworCXRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4gJiYKKwlydW5fd2l0aF9saW1pdGVkX3N0YWNrIHRydWUKKycKKworYnVpbGRfb3B0aW9uICgpIHsKKwlnaXQgdmVyc2lvbiAtLWJ1aWxkLW9wdGlvbnMgfAorCXNlZCAtbmUgInMvXiQxOiAvL3AiCit9CisKK3Rlc3RfbGF6eV9wcmVyZXEgTE9OR19JU182NEJJVCAnCisJdGVzdCA4IC1sZSAiJChidWlsZF9vcHRpb24gc2l6ZW9mLWxvbmcpIgorJworCit0ZXN0X2xhenlfcHJlcmVxIFRJTUVfSVNfNjRCSVQgJ3Rlc3QtdG9vbCBkYXRlIGlzNjRiaXQnCit0ZXN0X2xhenlfcHJlcmVxIFRJTUVfVF9JU182NEJJVCAndGVzdC10b29sIGRhdGUgdGltZV90LWlzNjRiaXQnCisKK3Rlc3RfbGF6eV9wcmVyZXEgQ1VSTCAnCisJY3VybCAtLXZlcnNpb24KKycKKworIyBTSEExIGlzIGEgdGVzdCBpZiB0aGUgaGFzaCBhbGdvcml0aG0gaW4gdXNlIGlzIFNIQS0xLiAgVGhpcyBpcyBib3RoIGZvciB0ZXN0cworIyB3aGljaCB3aWxsIG5vdCB3b3JrIHdpdGggb3RoZXIgaGFzaCBhbGdvcml0aG1zIGFuZCB0ZXN0cyB0aGF0IHdvcmsgYnV0IGRvbid0CisjIHRlc3QgYW55dGhpbmcgbWVhbmluZ2Z1bCAoZS5nLiBzcGVjaWFsIHZhbHVlcyB3aGljaCBjYXVzZSBzaG9ydCBjb2xsaXNpb25zKS4KK3Rlc3RfbGF6eV9wcmVyZXEgU0hBMSAnCisJdGVzdCAkKGdpdCBoYXNoLW9iamVjdCAvZGV2L251bGwpID0gZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQorJworCit0ZXN0X2xhenlfcHJlcmVxIFJFQkFTRV9QICcKKwl0ZXN0IC16ICIkR0lUX1RFU1RfU0tJUF9SRUJBU0VfUCIKKycKZGlmZiAtLWdpdCBhL3QvdGVzdC10ZXJtaW5hbC5wZXJsIGIvdC90ZXN0LXRlcm1pbmFsLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDZiZjYxOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdGVzdC10ZXJtaW5hbC5wZXJsCkBAIC0wLDAgKzEsMTA1IEBACisjIS91c3IvYmluL3BlcmwKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSU86OlB0eTsKK3VzZSBGaWxlOjpDb3B5OworCisjIFJ1biBAJGFyZ3YgaW4gdGhlIGJhY2tncm91bmQgd2l0aCBzdGRpbyByZWRpcmVjdGVkIHRvICRpbiwgJG91dCBhbmQgJGVyci4KK3N1YiBzdGFydF9jaGlsZCB7CisJbXkgKCRhcmd2LCAkaW4sICRvdXQsICRlcnIpID0gQF87CisJbXkgJHBpZCA9IGZvcms7CisJaWYgKG5vdCBkZWZpbmVkICRwaWQpIHsKKwkJZGllICJmb3JrIGZhaWxlZDogJCEiCisJfSBlbHNpZiAoJHBpZCA9PSAwKSB7CisJCW9wZW4gU1RESU4sICI8JiIsICRpbjsKKwkJb3BlbiBTVERPVVQsICI+JiIsICRvdXQ7CisJCW9wZW4gU1RERVJSLCAiPiYiLCAkZXJyOworCQljbG9zZSAkaW47CisJCWNsb3NlICRvdXQ7CisJCWV4ZWMoQCRhcmd2KSBvciBkaWUgImNhbm5vdCBleGVjICckYXJndi0+WzBdJzogJCEiCisJfQorCXJldHVybiAkcGlkOworfQorCisjIFdhaXQgZm9yICRwaWQgdG8gZmluaXNoLgorc3ViIGZpbmlzaF9jaGlsZCB7CisJIyBTaW1wbGlmaWVkIGZyb20gd2FpdF9vcl93aGluZSgpIGluIHJ1bi1jb21tYW5kLmMuCisJbXkgKCRwaWQpID0gQF87CisKKwlteSAkd2FpdGluZyA9IHdhaXRwaWQoJHBpZCwgMCk7CisJaWYgKCR3YWl0aW5nIDwgMCkgeworCQlkaWUgIndhaXRwaWQgZmFpbGVkOiAkISI7CisJfSBlbHNpZiAoJD8gJiAxMjcpIHsKKwkJbXkgJGNvZGUgPSAkPyAmIDEyNzsKKwkJd2FybiAiZGllZCBvZiBzaWduYWwgJGNvZGUiOworCQlyZXR1cm4gJGNvZGUgKyAxMjg7CisJfSBlbHNlIHsKKwkJcmV0dXJuICQ/ID4+IDg7CisJfQorfQorCitzdWIgeHNlbmRmaWxlIHsKKwlteSAoJG91dCwgJGluKSA9IEBfOworCisJIyBOb3RlOiB0aGUgcmVhbCBzZW5kZmlsZSgpIGNhbm5vdCByZWFkIGZyb20gYSB0ZXJtaW5hbC4KKworCSMgSXQgaXMgdW5zcGVjaWZpZWQgYnkgUE9TSVggd2hldGhlciByZWFkcworCSMgZnJvbSBhIGRpc2Nvbm5lY3RlZCB0ZXJtaW5hbCB3aWxsIHJldHVybgorCSMgRUlPIChhcyBpbiBBSVggNC54LCBJUklYLCBhbmQgTGludXgpIG9yCisJIyBlbmQtb2YtZmlsZS4gIEVpdGhlciBpcyBmaW5lLgorCWNvcHkoJGluLCAkb3V0LCA0MDk2KSBvciAkIXtFSU99IG9yIGRpZSAiY2Fubm90IGNvcHkgZnJvbSBjaGlsZDogJCEiOworfQorCitzdWIgY29weV9zdGRpbiB7CisJbXkgKCRpbikgPSBAXzsKKwlteSAkcGlkID0gZm9yazsKKwlpZiAoISRwaWQpIHsKKwkJeHNlbmRmaWxlKCRpbiwgXCpTVERJTik7CisJCWV4aXQgMDsKKwl9CisJY2xvc2UoJGluKTsKKwlyZXR1cm4gJHBpZDsKK30KKworc3ViIGNvcHlfc3RkaW8geworCW15ICgkb3V0LCAkZXJyKSA9IEBfOworCW15ICRwaWQgPSBmb3JrOworCWRlZmluZWQgJHBpZCBvciBkaWUgImZvcmsgZmFpbGVkOiAkISI7CisJaWYgKCEkcGlkKSB7CisJCWNsb3NlKCRvdXQpOworCQl4c2VuZGZpbGUoXCpTVERFUlIsICRlcnIpOworCQlleGl0IDA7CisJfQorCWNsb3NlKCRlcnIpOworCXhzZW5kZmlsZShcKlNURE9VVCwgJG91dCk7CisJZmluaXNoX2NoaWxkKCRwaWQpID09IDAKKwkJb3IgZXhpdCAxOworfQorCitpZiAoJCNBUkdWIDwgMSkgeworCWRpZSAidXNhZ2U6IHRlc3QtdGVybWluYWwgcHJvZ3JhbSBhcmdzIjsKK30KKyRFTlZ7VEVSTX0gPSAndnQxMDAnOworbXkgJG1hc3Rlcl9pbiA9IG5ldyBJTzo6UHR5OworbXkgJG1hc3Rlcl9vdXQgPSBuZXcgSU86OlB0eTsKK215ICRtYXN0ZXJfZXJyID0gbmV3IElPOjpQdHk7CiskbWFzdGVyX2luLT5zZXRfcmF3KCk7CiskbWFzdGVyX291dC0+c2V0X3JhdygpOworJG1hc3Rlcl9lcnItPnNldF9yYXcoKTsKKyRtYXN0ZXJfaW4tPnNsYXZlLT5zZXRfcmF3KCk7CiskbWFzdGVyX291dC0+c2xhdmUtPnNldF9yYXcoKTsKKyRtYXN0ZXJfZXJyLT5zbGF2ZS0+c2V0X3JhdygpOworbXkgJHBpZCA9IHN0YXJ0X2NoaWxkKFxAQVJHViwgJG1hc3Rlcl9pbi0+c2xhdmUsICRtYXN0ZXJfb3V0LT5zbGF2ZSwgJG1hc3Rlcl9lcnItPnNsYXZlKTsKK2Nsb3NlICRtYXN0ZXJfaW4tPnNsYXZlOworY2xvc2UgJG1hc3Rlcl9vdXQtPnNsYXZlOworY2xvc2UgJG1hc3Rlcl9lcnItPnNsYXZlOworbXkgJGluX3BpZCA9IGNvcHlfc3RkaW4oJG1hc3Rlcl9pbik7Citjb3B5X3N0ZGlvKCRtYXN0ZXJfb3V0LCAkbWFzdGVyX2Vycik7CitteSAkcmV0ID0gZmluaXNoX2NoaWxkKCRwaWQpOworIyBJZiB0aGUgY2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVzIGJlZm9yZSBvdXIgY29weV9zdGRpbigpIHByb2Nlc3MgaXMgYWJsZSB0bworIyB3cml0ZSBhbGwgb2YgaXRzIGRhdGEgdG8gJG1hc3Rlcl9pbiwgdGhlIGNvcHlfc3RkaW4oKSBwcm9jZXNzIGNvdWxkIHN0YWxsLgorIyBTZW5kIFNJR1RFUk0gdG8gaXQgdG8gZW5zdXJlIGl0IHRlcm1pbmF0ZXMuCitraWxsICdURVJNJywgJGluX3BpZDsKK2ZpbmlzaF9jaGlsZCgkaW5fcGlkKTsKK2V4aXQoJHJldCk7CmRpZmYgLS1naXQgYS90L3ZhbGdyaW5kLy5naXRpZ25vcmUgYi90L3ZhbGdyaW5kLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhZTY2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdmFsZ3JpbmQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKy9iaW4vCisvdGVtcGxhdGVzCmRpZmYgLS1naXQgYS90L3ZhbGdyaW5kL2FuYWx5emUuc2ggYi90L3ZhbGdyaW5kL2FuYWx5emUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZmYzgwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdmFsZ3JpbmQvYW5hbHl6ZS5zaApAQCAtMCwwICsxLDEyNyBAQAorIyEvYmluL3NoCisKKyMgR2V0IFRFU1RfT1VUUFVUX0RJUkVDVE9SWSBmcm9tIEdJVC1CVUlMRC1PUFRJT05TIGlmIGl0J3MgdGhlcmUuLi4KKy4gIiQoZGlybmFtZSAiJDAiKS8uLi8uLi9HSVQtQlVJTEQtT1BUSU9OUyIKKyMgLi4uIG90aGVyd2lzZSBzZXQgaXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuCis6ICR7VEVTVF9PVVRQVVRfRElSRUNUT1JZPSQoZGlybmFtZSAiJDAiKS8uLn0KKworb3V0cHV0PQorY291bnQ9MAordG90YWxfY291bnQ9MAorbWlzc2luZ19tZXNzYWdlPQorbmV3X2xpbmU9JworJworCisjIHN0YXJ0IG91dHB1dHRpbmcgdGhlIGN1cnJlbnQgdmFsZ3JpbmQgZXJyb3IgaW4gJG91dF9wcmVmaXguKyskY291bnQsCisjIGFuZCB0aGUgdGVzdCBjYXNlIHdoaWNoIGZhaWxlZCBpbiB0aGUgY29ycmVzcG9uZGluZyAubWVzc2FnZSBmaWxlCitzdGFydF9vdXRwdXQgKCkgeworCXRlc3QgLXogIiRvdXRwdXQiIHx8IHJldHVybgorCisJIyBwcm9ncmVzcworCXRvdGFsX2NvdW50PSQoKCR0b3RhbF9jb3VudCsxKSkKKwl0ZXN0IC10IDIgJiYgcHJpbnRmICJcckZvdW5kICVkIGVycm9ycyIgJHRvdGFsX2NvdW50ID4mMgorCisJY291bnQ9JCgoJGNvdW50KzEpKQorCW91dHB1dD0kb3V0X3ByZWZpeC4kY291bnQKKwk6ID4gJG91dHB1dAorCisJZWNobyAiKioqICQxICoqKiIgPiAkb3V0cHV0Lm1lc3NhZ2UKK30KKworZmluaXNoX291dHB1dCAoKSB7CisJdGVzdCAhIC16ICIkb3V0cHV0IiB8fCByZXR1cm4KKwlvdXRwdXQ9CisKKwkjIGlmIGEgdGVzdCBjYXNlIGhhcyBtb3JlIHRoYW4gb25lIHZhbGdyaW5kIGVycm9yLCB3ZSBuZWVkIHRvCisJIyBjb3B5IHRoZSBsYXN0IC5tZXNzYWdlIGZpbGUgdG8gdGhlIHByZXZpb3VzIGVycm9ycworCXRlc3QgLXogIiRtaXNzaW5nX21lc3NhZ2UiIHx8IHsKKwkJd2hpbGUgdGVzdCAkbWlzc2luZ19tZXNzYWdlIC1sdCAkY291bnQKKwkJZG8KKwkJCWNwICRvdXRfcHJlZml4LiRjb3VudC5tZXNzYWdlIFwKKwkJCQkkb3V0X3ByZWZpeC4kbWlzc2luZ19tZXNzYWdlLm1lc3NhZ2UKKwkJCW1pc3NpbmdfbWVzc2FnZT0kKCgkbWlzc2luZ19tZXNzYWdlKzEpKQorCQlkb25lCisJCW1pc3NpbmdfbWVzc2FnZT0KKwl9Cit9CisKKyMgZ3JvdXAgdGhlIHZhbGdyaW5kIGVycm9ycyBieSBiYWNrdHJhY2UKK291dHB1dF9hbGwgKCkgeworCWxhc3RfbGluZT0KKwlqPTAKKwlpPTEKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkY291bnQKKwlkbworCQkjIG91dHB1dCA8bnVtYmVyPiA8YmFja3RyYWNlLWluLW9uZS1saW5lPgorCQllY2hvICIkaSAkKHRyICdcbicgJyAnIDwgJG91dF9wcmVmaXguJGkpIgorCQlpPSQoKCRpKzEpKQorCWRvbmUgfAorCXNvcnQgLXQgJyAnIC1rIDIgfCAjIG9yZGVyIGJ5IDxiYWNrdHJhY2UtaW4tb25lLWxpbmU+CisJd2hpbGUgcmVhZCBudW1iZXIgbGluZQorCWRvCisJCSMgZmluZCBkdXBsaWNhdGVzLCBkbyBub3Qgb3V0cHV0IGJhY2t0cmFjZSB0d2ljZQorCQlpZiB0ZXN0ICIkbGluZSIgIT0gIiRsYXN0X2xpbmUiCisJCXRoZW4KKwkJCWxhc3RfbGluZT0kbGluZQorCQkJaj0kKCgkaisxKSkKKwkJCXByaW50ZiAiXG5WYWxncmluZCBlcnJvciAkajpcblxuIgorCQkJY2F0ICRvdXRfcHJlZml4LiRudW1iZXIKKwkJCXByaW50ZiAiXG5mb3VuZCBpbjpcbiIKKwkJZmkKKwkJIyBwcmludCB0aGUgdGVzdCBjYXNlIHdoZXJlIHRoaXMgY2FtZSBmcm9tCisJCXByaW50ZiAiXG4iCisJCWNhdCAkb3V0X3ByZWZpeC4kbnVtYmVyLm1lc3NhZ2UKKwlkb25lCit9CisKK2hhbmRsZV9vbmUgKCkgeworCU9MRElGUz0kSUZTCisJSUZTPSIkbmV3X2xpbmUiCisJd2hpbGUgcmVhZCBsaW5lCisJZG8KKwkJY2FzZSAiJGxpbmUiIGluCisJCSMgYmFja3RyYWNlLCBwb3NzaWJseSBhIG5ldyBvbmUKKwkJPT1bMC05XSopCisKKwkJCSMgRG9lcyB0aGUgY3VycmVudCB2YWxncmluZCBlcnJvciBoYXZlIGEgbWVzc2FnZSB5ZXQ/CisJCQljYXNlICIkb3V0cHV0IiBpbgorCQkJKi5tZXNzYWdlKQorCQkJCXRlc3QgLXogIiRtaXNzaW5nX21lc3NhZ2UiICYmCisJCQkJbWlzc2luZ19tZXNzYWdlPSRjb3VudAorCQkJCW91dHB1dD0KKwkJCWVzYWMKKworCQkJc3RhcnRfb3V0cHV0ICQoYmFzZW5hbWUgJDEpCisJCQllY2hvICIkbGluZSIgfAorCQkJc2VkICdzLz09WzAtOV0qPT0vPT12YWxncmluZD09LycgPj4gJG91dHB1dAorCQkJOzsKKwkJIyBlbmQgb2YgYmFja3RyYWNlCisJCSd9JykKKwkJCXRlc3QgLXogIiRvdXRwdXQiIHx8IHsKKwkJCQllY2hvICIkbGluZSIgPj4gJG91dHB1dAorCQkJCXRlc3QgJG91dHB1dCA9ICR7b3V0cHV0JS5tZXNzYWdlfSAmJgorCQkJCW91dHB1dD0kb3V0cHV0Lm1lc3NhZ2UKKwkJCX0KKwkJCTs7CisJCSMgZW5kIG9mIHRlc3QgY2FzZQorCQknJykKKwkJCWZpbmlzaF9vdXRwdXQKKwkJCTs7CisJCSMgbm9ybWFsIGxpbmU7IGlmICRvdXRwdXQgaXMgc2V0LCBwcmludCB0aGUgbGluZQorCQkqKQorCQkJdGVzdCAteiAiJG91dHB1dCIgfHwgZWNobyAiJGxpbmUiID4+ICRvdXRwdXQKKwkJCTs7CisJCWVzYWMKKwlkb25lIDwgJDEKKwlJRlM9JE9MRElGUworCisJIyBqdXN0IHRvIGJlIHNhZmUKKwlmaW5pc2hfb3V0cHV0Cit9CisKK2ZvciB0ZXN0X3NjcmlwdCBpbiAiJFRFU1RfT1VUUFVUX0RJUkVDVE9SWSIvdGVzdC1yZXN1bHRzLyoub3V0CitkbworCWhhbmRsZV9vbmUgJHRlc3Rfc2NyaXB0Citkb25lCisKK291dHB1dF9hbGwKZGlmZiAtLWdpdCBhL3QvdmFsZ3JpbmQvZGVmYXVsdC5zdXBwIGIvdC92YWxncmluZC9kZWZhdWx0LnN1cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2NzI0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdmFsZ3JpbmQvZGVmYXVsdC5zdXBwCkBAIC0wLDAgKzEsNTEgQEAKK3sKKwlpZ25vcmUtemxpYi1lcnJvcnMtY29uZAorCU1lbWNoZWNrOkNvbmQKKwlvYmo6KmxpYnouc28qCit9CisKK3sKKwlpZ25vcmUtemxpYi1lcnJvcnMtdmFsdWU4CisJTWVtY2hlY2s6VmFsdWU4CisJb2JqOipsaWJ6LnNvKgorfQorCit7CisJaWdub3JlLXpsaWItZXJyb3JzLXZhbHVlNAorCU1lbWNoZWNrOlZhbHVlNAorCW9iajoqbGliei5zbyoKK30KKworeworCWlnbm9yZS1sZHNvLWNvbmQKKwlNZW1jaGVjazpDb25kCisJb2JqOipsZC0qLnNvCit9CisKK3sKKwlpZ25vcmUtbGRzby1hZGRyOAorCU1lbWNoZWNrOkFkZHI4CisJb2JqOipsZC0qLnNvCit9CisKK3sKKwlpZ25vcmUtbGRzby1hZGRyNAorCU1lbWNoZWNrOkFkZHI0CisJb2JqOipsZC0qLnNvCit9CisKK3sKKwl3cml0aW5nLWRhdGEtZnJvbS16bGliLXRyaWdnZXJzLWV2ZW4tbW9yZS1lcnJvcnMKKwlNZW1jaGVjazpQYXJhbQorCXdyaXRlKGJ1ZikKKwlvYmo6L2xpYi9sZC0qLnNvCisJZnVuOndyaXRlX2luX2Z1bGwKKwlmdW46d3JpdGVfYnVmZmVyCisJZnVuOndyaXRlX2xvb3NlX29iamVjdAorfQorCit7CisJaWdub3JlLXNzZS1zdHJsZW4taW52YWxpZC1yZWFkLXNpemUKKwlNZW1jaGVjazpBZGRyNAorCWZ1bjpjb3B5X3JlZgorfQpkaWZmIC0tZ2l0IGEvdC92YWxncmluZC92YWxncmluZC5zaCBiL3QvdmFsZ3JpbmQvdmFsZ3JpbmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjY5ZWJhZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdmFsZ3JpbmQvdmFsZ3JpbmQuc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK2Jhc2U9JChiYXNlbmFtZSAiJDAiKQorY2FzZSAiJGJhc2UiIGluCit0ZXN0LSopCisJcHJvZ3JhbT0iJEdJVF9WQUxHUklORC8uLi8uLi90L2hlbHBlci8kYmFzZSIKKwk7OworKikKKwlwcm9ncmFtPSIkR0lUX1ZBTEdSSU5ELy4uLy4uLyRiYXNlIgorCTs7Citlc2FjCisKK1RPT0xfT1BUSU9OUz0nLS1sZWFrLWNoZWNrPW5vJworCit0ZXN0IC16ICIkR0lUX1ZBTEdSSU5EX0VOQUJMRUQiICYmCitleGVjICIkcHJvZ3JhbSIgIiRAIgorCitjYXNlICIkR0lUX1ZBTEdSSU5EX01PREUiIGluCittZW1jaGVjay1mYXN0KQorCTs7CittZW1jaGVjaykKKwlWQUxHUklORF9WRVJTSU9OPSQodmFsZ3JpbmQgLS12ZXJzaW9uKQorCVZBTEdSSU5EX01BSk9SPSQoZXhwciAiJFZBTEdSSU5EX1ZFUlNJT04iIDogJ1teMC05XSpcKFswLTldKlwpJykKKwlWQUxHUklORF9NSU5PUj0kKGV4cHIgIiRWQUxHUklORF9WRVJTSU9OIiA6ICdbXjAtOV0qWzAtOV0qXC5cKFswLTldKlwpJykKKwl0ZXN0IDMgLWd0ICIkVkFMR1JJTkRfTUFKT1IiIHx8CisJdGVzdCAzIC1lcSAiJFZBTEdSSU5EX01BSk9SIiAtYSA0IC1ndCAiJFZBTEdSSU5EX01JTk9SIiB8fAorCVRPT0xfT1BUSU9OUz0iJFRPT0xfT1BUSU9OUyAtLXRyYWNrLW9yaWdpbnM9eWVzIgorCTs7CisqKQorCVRPT0xfT1BUSU9OUz0iLS10b29sPSRHSVRfVkFMR1JJTkRfTU9ERSIKK2VzYWMKKworZXhlYyB2YWxncmluZCAtcSAtLWVycm9yLWV4aXRjb2RlPTEyNiBcCisJLS1nZW4tc3VwcHJlc3Npb25zPWFsbCBcCisJLS1zdXBwcmVzc2lvbnM9IiRHSVRfVkFMR1JJTkQvZGVmYXVsdC5zdXBwIiBcCisJJFRPT0xfT1BUSU9OUyBcCisJLS1sb2ctZmQ9NCBcCisJLS1pbnB1dC1mZD00IFwKKwkkR0lUX1ZBTEdSSU5EX09QVElPTlMgXAorCSIkcHJvZ3JhbSIgIiRAIgpkaWZmIC0tZ2l0IGEvdGFnLmMgYi90YWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWI1NDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdGFnLmMKQEAgLTAsMCArMSwyMzYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicGFja2ZpbGUuaCIKKworY29uc3QgY2hhciAqdGFnX3R5cGUgPSAidGFnIjsKKworc3RhdGljIGludCBydW5fZ3BnX3ZlcmlmeShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjOworCXNpemVfdCBwYXlsb2FkX3NpemU7CisJaW50IHJldDsKKworCW1lbXNldCgmc2lnYywgMCwgc2l6ZW9mKHNpZ2MpKTsKKworCXBheWxvYWRfc2l6ZSA9IHBhcnNlX3NpZ25hdHVyZShidWYsIHNpemUpOworCisJaWYgKHNpemUgPT0gcGF5bG9hZF9zaXplKSB7CisJCWlmIChmbGFncyAmIEdQR19WRVJJRllfVkVSQk9TRSkKKwkJCXdyaXRlX2luX2Z1bGwoMSwgYnVmLCBwYXlsb2FkX3NpemUpOworCQlyZXR1cm4gZXJyb3IoIm5vIHNpZ25hdHVyZSBmb3VuZCIpOworCX0KKworCXJldCA9IGNoZWNrX3NpZ25hdHVyZShidWYsIHBheWxvYWRfc2l6ZSwgYnVmICsgcGF5bG9hZF9zaXplLAorCQkJCXNpemUgLSBwYXlsb2FkX3NpemUsICZzaWdjKTsKKworCWlmICghKGZsYWdzICYgR1BHX1ZFUklGWV9PTUlUX1NUQVRVUykpCisJCXByaW50X3NpZ25hdHVyZV9idWZmZXIoJnNpZ2MsIGZsYWdzKTsKKworCXNpZ25hdHVyZV9jaGVja19jbGVhcigmc2lnYyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGdwZ192ZXJpZnlfdGFnKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgY29uc3QgY2hhciAqbmFtZV90b19yZXBvcnQsCisJCXVuc2lnbmVkIGZsYWdzKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCByZXQ7CisKKwl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsIE5VTEwpOworCWlmICh0eXBlICE9IE9CSl9UQUcpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCB2ZXJpZnkgYSBub24tdGFnIG9iamVjdCBvZiB0eXBlICVzLiIsCisJCQkJbmFtZV90b19yZXBvcnQgPworCQkJCW5hbWVfdG9fcmVwb3J0IDoKKwkJCQlmaW5kX3VuaXF1ZV9hYmJyZXYob2lkLCBERUZBVUxUX0FCQlJFViksCisJCQkJdHlwZV9uYW1lKHR5cGUpKTsKKworCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm4gZXJyb3IoIiVzOiB1bmFibGUgdG8gcmVhZCBmaWxlLiIsCisJCQkJbmFtZV90b19yZXBvcnQgPworCQkJCW5hbWVfdG9fcmVwb3J0IDoKKwkJCQlmaW5kX3VuaXF1ZV9hYmJyZXYob2lkLCBERUZBVUxUX0FCQlJFVikpOworCisJcmV0ID0gcnVuX2dwZ192ZXJpZnkoYnVmLCBzaXplLCBmbGFncyk7CisKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IG9iamVjdCAqZGVyZWZfdGFnKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgb2JqZWN0ICpvLCBjb25zdCBjaGFyICp3YXJuLCBpbnQgd2FybmxlbikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpsYXN0X29pZCA9IE5VTEw7CisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSBPQkpfVEFHKQorCQlpZiAoKChzdHJ1Y3QgdGFnICopbyktPnRhZ2dlZCkgeworCQkJbGFzdF9vaWQgPSAmKChzdHJ1Y3QgdGFnICopbyktPnRhZ2dlZC0+b2lkOworCQkJbyA9IHBhcnNlX29iamVjdChyLCBsYXN0X29pZCk7CisJCX0gZWxzZSB7CisJCQlsYXN0X29pZCA9IE5VTEw7CisJCQlvID0gTlVMTDsKKwkJfQorCWlmICghbyAmJiB3YXJuKSB7CisJCWlmIChsYXN0X29pZCAmJiBpc19wcm9taXNvcl9vYmplY3QobGFzdF9vaWQpKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICghd2FybmxlbikKKwkJCXdhcm5sZW4gPSBzdHJsZW4od2Fybik7CisJCWVycm9yKCJtaXNzaW5nIG9iamVjdCByZWZlcmVuY2VkIGJ5ICclLipzJyIsIHdhcm5sZW4sIHdhcm4pOworCX0KKwlyZXR1cm4gbzsKK30KKworc3RydWN0IG9iamVjdCAqZGVyZWZfdGFnX25vdmVyaWZ5KHN0cnVjdCBvYmplY3QgKm8pCit7CisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksICZvLT5vaWQpOworCQlpZiAobyAmJiBvLT50eXBlID09IE9CSl9UQUcgJiYgKChzdHJ1Y3QgdGFnICopbyktPnRhZ2dlZCkKKwkJCW8gPSAoKHN0cnVjdCB0YWcgKilvKS0+dGFnZ2VkOworCQllbHNlCisJCQlvID0gTlVMTDsKKwl9CisJcmV0dXJuIG87Cit9CisKK3N0cnVjdCB0YWcgKmxvb2t1cF90YWcoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHIsIG9pZCk7CisJaWYgKCFvYmopCisJCXJldHVybiBjcmVhdGVfb2JqZWN0KHIsIG9pZCwgYWxsb2NfdGFnX25vZGUocikpOworCXJldHVybiBvYmplY3RfYXNfdHlwZShyLCBvYmosIE9CSl9UQUcsIDApOworfQorCitzdGF0aWMgdGltZXN0YW1wX3QgcGFyc2VfdGFnX2RhdGUoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICp0YWlsKQoreworCWNvbnN0IGNoYXIgKmRhdGVwdHI7CisKKwl3aGlsZSAoYnVmIDwgdGFpbCAmJiAqYnVmKysgIT0gJz4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgPj0gdGFpbCkKKwkJcmV0dXJuIDA7CisJZGF0ZXB0ciA9IGJ1ZjsKKwl3aGlsZSAoYnVmIDwgdGFpbCAmJiAqYnVmKysgIT0gJ1xuJykKKwkJLyogbmFkYSAqLzsKKwlpZiAoYnVmID49IHRhaWwpCisJCXJldHVybiAwOworCS8qIGRhdGVwdHIgPCBidWYgJiYgYnVmWy0xXSA9PSAnXG4nLCBzbyBwYXJzaW5nIHdpbGwgc3RvcCBhdCBidWYtMSAqLworCXJldHVybiBwYXJzZV90aW1lc3RhbXAoZGF0ZXB0ciwgTlVMTCwgMTApOworfQorCit2b2lkIHJlbGVhc2VfdGFnX21lbW9yeShzdHJ1Y3QgdGFnICp0KQoreworCWZyZWUodC0+dGFnKTsKKwl0LT50YWdnZWQgPSBOVUxMOworCXQtPm9iamVjdC5wYXJzZWQgPSAwOworCXQtPmRhdGUgPSAwOworfQorCitpbnQgcGFyc2VfdGFnX2J1ZmZlcihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRhZyAqaXRlbSwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgdHlwZVsyMF07CisJY29uc3QgY2hhciAqYnVmcHRyID0gZGF0YTsKKwljb25zdCBjaGFyICp0YWlsID0gYnVmcHRyICsgc2l6ZTsKKwljb25zdCBjaGFyICpubDsKKworCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gMDsKKworCWlmIChpdGVtLT50YWcpIHsKKwkJLyoKKwkJICogUHJlc3VtYWJseSBsZWZ0IG92ZXIgZnJvbSBhIHByZXZpb3VzIGZhaWxlZCBwYXJzZTsKKwkJICogY2xlYXIgaXQgb3V0IGluIHByZXBhcmF0aW9uIGZvciByZS1wYXJzaW5nICh3ZSdsbCBwcm9iYWJseQorCQkgKiBoaXQgdGhlIHNhbWUgZXJyb3IsIHdoaWNoIGxldHMgdXMgdGVsbCBvdXIgY3VycmVudCBjYWxsZXIKKwkJICogYWJvdXQgdGhlIHByb2JsZW0pLgorCQkgKi8KKwkJRlJFRV9BTkRfTlVMTChpdGVtLT50YWcpOworCX0KKworCWlmIChzaXplIDwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAyNCkKKwkJcmV0dXJuIC0xOworCWlmIChtZW1jbXAoIm9iamVjdCAiLCBidWZwdHIsIDcpIHx8IHBhcnNlX29pZF9oZXgoYnVmcHRyICsgNywgJm9pZCwgJmJ1ZnB0cikgfHwgKmJ1ZnB0cisrICE9ICdcbicpCisJCXJldHVybiAtMTsKKworCWlmICghc3RhcnRzX3dpdGgoYnVmcHRyLCAidHlwZSAiKSkKKwkJcmV0dXJuIC0xOworCWJ1ZnB0ciArPSA1OworCW5sID0gbWVtY2hyKGJ1ZnB0ciwgJ1xuJywgdGFpbCAtIGJ1ZnB0cik7CisJaWYgKCFubCB8fCBzaXplb2YodHlwZSkgPD0gKG5sIC0gYnVmcHRyKSkKKwkJcmV0dXJuIC0xOworCW1lbWNweSh0eXBlLCBidWZwdHIsIG5sIC0gYnVmcHRyKTsKKwl0eXBlW25sIC0gYnVmcHRyXSA9ICdcMCc7CisJYnVmcHRyID0gbmwgKyAxOworCisJaWYgKCFzdHJjbXAodHlwZSwgYmxvYl90eXBlKSkgeworCQlpdGVtLT50YWdnZWQgPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF9ibG9iKHIsICZvaWQpOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCB0cmVlX3R5cGUpKSB7CisJCWl0ZW0tPnRhZ2dlZCA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX3RyZWUociwgJm9pZCk7CisJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIGNvbW1pdF90eXBlKSkgeworCQlpdGVtLT50YWdnZWQgPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF9jb21taXQociwgJm9pZCk7CisJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIHRhZ190eXBlKSkgeworCQlpdGVtLT50YWdnZWQgPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF90YWcociwgJm9pZCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGVycm9yKCJ1bmtub3duIHRhZyB0eXBlICclcycgaW4gJXMiLAorCQkJICAgICB0eXBlLCBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJfQorCisJaWYgKCFpdGVtLT50YWdnZWQpCisJCXJldHVybiBlcnJvcigiYmFkIHRhZyBwb2ludGVyIHRvICVzIGluICVzIiwKKwkJCSAgICAgb2lkX3RvX2hleCgmb2lkKSwKKwkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOworCisJaWYgKGJ1ZnB0ciArIDQgPCB0YWlsICYmIHN0YXJ0c193aXRoKGJ1ZnB0ciwgInRhZyAiKSkKKwkJOyAJCS8qIGdvb2QgKi8KKwllbHNlCisJCXJldHVybiAtMTsKKwlidWZwdHIgKz0gNDsKKwlubCA9IG1lbWNocihidWZwdHIsICdcbicsIHRhaWwgLSBidWZwdHIpOworCWlmICghbmwpCisJCXJldHVybiAtMTsKKwlpdGVtLT50YWcgPSB4bWVtZHVweihidWZwdHIsIG5sIC0gYnVmcHRyKTsKKwlidWZwdHIgPSBubCArIDE7CisKKwlpZiAoYnVmcHRyICsgNyA8IHRhaWwgJiYgc3RhcnRzX3dpdGgoYnVmcHRyLCAidGFnZ2VyICIpKQorCQlpdGVtLT5kYXRlID0gcGFyc2VfdGFnX2RhdGUoYnVmcHRyLCB0YWlsKTsKKwllbHNlCisJCWl0ZW0tPmRhdGUgPSAwOworCisJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV90YWcoc3RydWN0IHRhZyAqaXRlbSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJldDsKKworCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gMDsKKwlkYXRhID0gcmVhZF9vYmplY3RfZmlsZSgmaXRlbS0+b2JqZWN0Lm9pZCwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgJXMiLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJaWYgKHR5cGUgIT0gT0JKX1RBRykgeworCQlmcmVlKGRhdGEpOworCQlyZXR1cm4gZXJyb3IoIk9iamVjdCAlcyBub3QgYSB0YWciLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJfQorCXJldCA9IHBhcnNlX3RhZ19idWZmZXIodGhlX3JlcG9zaXRvcnksIGl0ZW0sIGRhdGEsIHNpemUpOworCWZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IG9iamVjdF9pZCAqZ2V0X3RhZ2dlZF9vaWQoc3RydWN0IHRhZyAqdGFnKQoreworCWlmICghdGFnLT50YWdnZWQpCisJCWRpZSgiYmFkIHRhZyIpOworCXJldHVybiAmdGFnLT50YWdnZWQtPm9pZDsKK30KZGlmZiAtLWdpdCBhL3RhZy5oIGIvdGFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlOGU3MgotLS0gL2Rldi9udWxsCisrKyBiL3RhZy5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgVEFHX0gKKyNkZWZpbmUgVEFHX0gKKworI2luY2x1ZGUgIm9iamVjdC5oIgorCitleHRlcm4gY29uc3QgY2hhciAqdGFnX3R5cGU7CisKK3N0cnVjdCB0YWcgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXN0cnVjdCBvYmplY3QgKnRhZ2dlZDsKKwljaGFyICp0YWc7CisJdGltZXN0YW1wX3QgZGF0ZTsKK307CitzdHJ1Y3QgdGFnICpsb29rdXBfdGFnKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IHBhcnNlX3RhZ19idWZmZXIoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCB0YWcgKml0ZW0sIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitpbnQgcGFyc2VfdGFnKHN0cnVjdCB0YWcgKml0ZW0pOwordm9pZCByZWxlYXNlX3RhZ19tZW1vcnkoc3RydWN0IHRhZyAqdCk7CitzdHJ1Y3Qgb2JqZWN0ICpkZXJlZl90YWcoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBvYmplY3QgKiwgY29uc3QgY2hhciAqLCBpbnQpOworc3RydWN0IG9iamVjdCAqZGVyZWZfdGFnX25vdmVyaWZ5KHN0cnVjdCBvYmplY3QgKik7CitpbnQgZ3BnX3ZlcmlmeV90YWcoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICBjb25zdCBjaGFyICpuYW1lX3RvX3JlcG9ydCwgdW5zaWduZWQgZmxhZ3MpOworc3RydWN0IG9iamVjdF9pZCAqZ2V0X3RhZ2dlZF9vaWQoc3RydWN0IHRhZyAqdGFnKTsKKworI2VuZGlmIC8qIFRBR19IICovCmRpZmYgLS1naXQgYS90YXIuaCBiL3Rhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjU4YzQKLS0tIC9kZXYvbnVsbAorKysgYi90YXIuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIFRBUl9ICisjZGVmaW5lIFRBUl9ICisKKyNkZWZpbmUgVFlQRUZMQUdfQVVUTwkJJ1wwJworI2RlZmluZSBUWVBFRkxBR19SRUcJCScwJworI2RlZmluZSBUWVBFRkxBR19MTksJCScyJworI2RlZmluZSBUWVBFRkxBR19ESVIJCSc1JworI2RlZmluZSBUWVBFRkxBR19HTE9CQUxfSEVBREVSCSdnJworI2RlZmluZSBUWVBFRkxBR19FWFRfSEVBREVSCSd4JworCitzdHJ1Y3QgdXN0YXJfaGVhZGVyIHsKKwljaGFyIG5hbWVbMTAwXTsJCS8qICAgMCAqLworCWNoYXIgbW9kZVs4XTsJCS8qIDEwMCAqLworCWNoYXIgdWlkWzhdOwkJLyogMTA4ICovCisJY2hhciBnaWRbOF07CQkvKiAxMTYgKi8KKwljaGFyIHNpemVbMTJdOwkJLyogMTI0ICovCisJY2hhciBtdGltZVsxMl07CQkvKiAxMzYgKi8KKwljaGFyIGNoa3N1bVs4XTsJCS8qIDE0OCAqLworCWNoYXIgdHlwZWZsYWdbMV07CS8qIDE1NiAqLworCWNoYXIgbGlua25hbWVbMTAwXTsJLyogMTU3ICovCisJY2hhciBtYWdpY1s2XTsJCS8qIDI1NyAqLworCWNoYXIgdmVyc2lvblsyXTsJLyogMjYzICovCisJY2hhciB1bmFtZVszMl07CQkvKiAyNjUgKi8KKwljaGFyIGduYW1lWzMyXTsJCS8qIDI5NyAqLworCWNoYXIgZGV2bWFqb3JbOF07CS8qIDMyOSAqLworCWNoYXIgZGV2bWlub3JbOF07CS8qIDMzNyAqLworCWNoYXIgcHJlZml4WzE1NV07CS8qIDM0NSAqLworfTsKKworI2VuZGlmIC8qIFRBUl9IICovCmRpZmYgLS1naXQgYS90ZW1wZmlsZS5jIGIvdGVtcGZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDNhZDhjCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGZpbGUuYwpAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIFN0YXRlIGRpYWdyYW0gYW5kIGNsZWFudXAKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBJZiB0aGUgcHJvZ3JhbSBleGl0cyB3aGlsZSBhIHRlbXBvcmFyeSBmaWxlIGlzIGFjdGl2ZSwgd2Ugd2FudCB0bworICogbWFrZSBzdXJlIHRoYXQgd2UgcmVtb3ZlIGl0LiBUaGlzIGlzIGRvbmUgYnkgcmVtZW1iZXJpbmcgdGhlIGFjdGl2ZQorICogdGVtcG9yYXJ5IGZpbGVzIGluIGEgbGlua2VkIGxpc3QsIGB0ZW1wZmlsZV9saXN0YC4gQW4gYGF0ZXhpdCgzKWAKKyAqIGhhbmRsZXIgYW5kIGEgc2lnbmFsIGhhbmRsZXIgYXJlIHJlZ2lzdGVyZWQsIHRvIGNsZWFuIHVwIGFueSBhY3RpdmUKKyAqIHRlbXBvcmFyeSBmaWxlcy4KKyAqCisgKiBCZWNhdXNlIHRoZSBzaWduYWwgaGFuZGxlciBjYW4gcnVuIGF0IGFueSB0aW1lLCBgdGVtcGZpbGVfbGlzdGAgYW5kCisgKiB0aGUgYHRlbXBmaWxlYCBvYmplY3RzIHRoYXQgY29tcHJpc2UgaXQgbXVzdCBiZSBrZXB0IGluCisgKiBzZWxmLWNvbnNpc3RlbnQgc3RhdGVzIGF0IGFsbCB0aW1lcy4KKyAqCisgKiBUaGUgcG9zc2libGUgc3RhdGVzIG9mIGEgYHRlbXBmaWxlYCBvYmplY3QgYXJlIGFzIGZvbGxvd3M6CisgKgorICogLSBVbmluaXRpYWxpemVkLiBJbiB0aGlzIHN0YXRlIHRoZSBvYmplY3QncyBgb25fbGlzdGAgZmllbGQgbXVzdCBiZQorICogICB6ZXJvIGJ1dCB0aGUgcmVzdCBvZiBpdHMgY29udGVudHMgbmVlZCBub3QgYmUgaW5pdGlhbGl6ZWQuIEFzCisgKiAgIHNvb24gYXMgdGhlIG9iamVjdCBpcyB1c2VkIGluIGFueSB3YXksIGl0IGlzIGlycmV2b2NhYmx5CisgKiAgIHJlZ2lzdGVyZWQgaW4gYHRlbXBmaWxlX2xpc3RgLCBhbmQgYG9uX2xpc3RgIGlzIHNldC4KKyAqCisgKiAtIEFjdGl2ZSwgZmlsZSBvcGVuIChhZnRlciBgY3JlYXRlX3RlbXBmaWxlKClgIG9yCisgKiAgIGByZW9wZW5fdGVtcGZpbGUoKWApLiBJbiB0aGlzIHN0YXRlOgorICoKKyAqICAgLSB0aGUgdGVtcG9yYXJ5IGZpbGUgZXhpc3RzCisgKiAgIC0gYGFjdGl2ZWAgaXMgc2V0CisgKiAgIC0gYGZpbGVuYW1lYCBob2xkcyB0aGUgZmlsZW5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlCisgKiAgIC0gYGZkYCBob2xkcyBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIGZvciB3cml0aW5nIHRvIGl0CisgKiAgIC0gYGZwYCBob2xkcyBhIHBvaW50ZXIgdG8gYW4gb3BlbiBgRklMRWAgb2JqZWN0IGlmIGFuZCBvbmx5IGlmCisgKiAgICAgYGZkb3Blbl90ZW1wZmlsZSgpYCBoYXMgYmVlbiBjYWxsZWQgb24gdGhlIG9iamVjdAorICogICAtIGBvd25lcmAgaG9sZHMgdGhlIFBJRCBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgdGhlIGZpbGUKKyAqCisgKiAtIEFjdGl2ZSwgZmlsZSBjbG9zZWQgKGFmdGVyIGBjbG9zZV90ZW1wZmlsZV9nZW50bHkoKWApLiBTYW1lCisgKiAgIGFzIHRoZSBwcmV2aW91cyBzdGF0ZSwgZXhjZXB0IHRoYXQgdGhlIHRlbXBvcmFyeSBmaWxlIGlzIGNsb3NlZCwKKyAqICAgYGZkYCBpcyAtMSwgYW5kIGBmcGAgaXMgYE5VTExgLgorICoKKyAqIC0gSW5hY3RpdmUgKGFmdGVyIGBkZWxldGVfdGVtcGZpbGUoKWAsIGByZW5hbWVfdGVtcGZpbGUoKWAsIG9yIGEKKyAqICAgZmFpbGVkIGF0dGVtcHQgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUpLiBJbiB0aGlzIHN0YXRlOgorICoKKyAqICAgLSBgYWN0aXZlYCBpcyB1bnNldAorICogICAtIGBmaWxlbmFtZWAgaXMgZW1wdHkgKHVzdWFsbHksIHRob3VnaCB0aGVyZSBhcmUgdHJhbnNpdG9yeQorICogICAgIHN0YXRlcyBpbiB3aGljaCB0aGlzIGNvbmRpdGlvbiBkb2Vzbid0IGhvbGQpLiBDbGllbnQgY29kZSBzaG91bGQKKyAqICAgICAqbm90KiByZWx5IG9uIHRoZSBmaWxlbmFtZSBiZWluZyBlbXB0eSBpbiB0aGlzIHN0YXRlLgorICogICAtIGBmZGAgaXMgLTEgYW5kIGBmcGAgaXMgYE5VTExgCisgKiAgIC0gdGhlIG9iamVjdCBpcyByZW1vdmVkIGZyb20gYHRlbXBmaWxlX2xpc3RgIChidXQgY291bGQgYmUgdXNlZCBhZ2FpbikKKyAqCisgKiBBIHRlbXBvcmFyeSBmaWxlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBpdC4gVGhlCisgKiBgdGVtcGZpbGVgIGhhcyBhbiBgb3duZXJgIGZpZWxkIHRoYXQgcmVjb3JkcyB0aGUgb3duZXIncyBQSUQuIFRoaXMKKyAqIGZpZWxkIGlzIHVzZWQgdG8gcHJldmVudCBhIGZvcmtlZCBwcm9jZXNzIGZyb20gZGVsZXRpbmcgYSB0ZW1wb3JhcnkKKyAqIGZpbGUgY3JlYXRlZCBieSBpdHMgcGFyZW50LgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRlbXBmaWxlLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKworc3RhdGljIFZPTEFUSUxFX0xJU1RfSEVBRCh0ZW1wZmlsZV9saXN0KTsKKworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBmaWxlcyhpbnQgaW5fc2lnbmFsX2hhbmRsZXIpCit7CisJcGlkX3QgbWUgPSBnZXRwaWQoKTsKKwl2b2xhdGlsZSBzdHJ1Y3Qgdm9sYXRpbGVfbGlzdF9oZWFkICpwb3M7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJnRlbXBmaWxlX2xpc3QpIHsKKwkJc3RydWN0IHRlbXBmaWxlICpwID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0ZW1wZmlsZSwgbGlzdCk7CisKKwkJaWYgKCFpc190ZW1wZmlsZV9hY3RpdmUocCkgfHwgcC0+b3duZXIgIT0gbWUpCisJCQljb250aW51ZTsKKworCQlpZiAocC0+ZmQgPj0gMCkKKwkJCWNsb3NlKHAtPmZkKTsKKworCQlpZiAoaW5fc2lnbmFsX2hhbmRsZXIpCisJCQl1bmxpbmsocC0+ZmlsZW5hbWUuYnVmKTsKKwkJZWxzZQorCQkJdW5saW5rX29yX3dhcm4ocC0+ZmlsZW5hbWUuYnVmKTsKKworCQlwLT5hY3RpdmUgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBmaWxlc19vbl9leGl0KHZvaWQpCit7CisJcmVtb3ZlX3RlbXBmaWxlcygwKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBmaWxlc19vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV90ZW1wZmlsZXMoMSk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGVtcGZpbGUgKm5ld190ZW1wZmlsZSh2b2lkKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUgPSB4bWFsbG9jKHNpemVvZigqdGVtcGZpbGUpKTsKKwl0ZW1wZmlsZS0+ZmQgPSAtMTsKKwl0ZW1wZmlsZS0+ZnAgPSBOVUxMOworCXRlbXBmaWxlLT5hY3RpdmUgPSAwOworCXRlbXBmaWxlLT5vd25lciA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnRlbXBmaWxlLT5saXN0KTsKKwlzdHJidWZfaW5pdCgmdGVtcGZpbGUtPmZpbGVuYW1lLCAwKTsKKwlyZXR1cm4gdGVtcGZpbGU7Cit9CisKK3N0YXRpYyB2b2lkIGFjdGl2YXRlX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpCit7CisJc3RhdGljIGludCBpbml0aWFsaXplZDsKKworCWlmIChpc190ZW1wZmlsZV9hY3RpdmUodGVtcGZpbGUpKQorCQlCVUcoImFjdGl2YXRlX3RlbXBmaWxlIGNhbGxlZCBmb3IgYWN0aXZlIG9iamVjdCIpOworCisJaWYgKCFpbml0aWFsaXplZCkgeworCQlzaWdjaGFpbl9wdXNoX2NvbW1vbihyZW1vdmVfdGVtcGZpbGVzX29uX3NpZ25hbCk7CisJCWF0ZXhpdChyZW1vdmVfdGVtcGZpbGVzX29uX2V4aXQpOworCQlpbml0aWFsaXplZCA9IDE7CisJfQorCisJdm9sYXRpbGVfbGlzdF9hZGQoJnRlbXBmaWxlLT5saXN0LCAmdGVtcGZpbGVfbGlzdCk7CisJdGVtcGZpbGUtPm93bmVyID0gZ2V0cGlkKCk7CisJdGVtcGZpbGUtPmFjdGl2ZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGRlYWN0aXZhdGVfdGVtcGZpbGUoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSkKK3sKKwl0ZW1wZmlsZS0+YWN0aXZlID0gMDsKKwlzdHJidWZfcmVsZWFzZSgmdGVtcGZpbGUtPmZpbGVuYW1lKTsKKwl2b2xhdGlsZV9saXN0X2RlbCgmdGVtcGZpbGUtPmxpc3QpOworCWZyZWUodGVtcGZpbGUpOworfQorCisvKiBNYWtlIHN1cmUgZXJybm8gY29udGFpbnMgYSBtZWFuaW5nZnVsIHZhbHVlIG9uIGVycm9yICovCitzdHJ1Y3QgdGVtcGZpbGUgKmNyZWF0ZV90ZW1wZmlsZShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUgPSBuZXdfdGVtcGZpbGUoKTsKKworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmdGVtcGZpbGUtPmZpbGVuYW1lLCBwYXRoKTsKKwl0ZW1wZmlsZS0+ZmQgPSBvcGVuKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsCisJCQkgICAgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCB8IE9fQ0xPRVhFQywgMDY2Nik7CisJaWYgKE9fQ0xPRVhFQyAmJiB0ZW1wZmlsZS0+ZmQgPCAwICYmIGVycm5vID09IEVJTlZBTCkKKwkJLyogVHJ5IGFnYWluIHcvbyBPX0NMT0VYRUM6IHRoZSBrZXJuZWwgbWlnaHQgbm90IHN1cHBvcnQgaXQgKi8KKwkJdGVtcGZpbGUtPmZkID0gb3Blbih0ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmLAorCQkJCSAgICBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwlpZiAodGVtcGZpbGUtPmZkIDwgMCkgeworCQlkZWFjdGl2YXRlX3RlbXBmaWxlKHRlbXBmaWxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWFjdGl2YXRlX3RlbXBmaWxlKHRlbXBmaWxlKTsKKwlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHRlbXBmaWxlLT5maWxlbmFtZS5idWYpKSB7CisJCWludCBzYXZlX2Vycm5vID0gZXJybm87CisJCWVycm9yKCJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAlcyIsIHRlbXBmaWxlLT5maWxlbmFtZS5idWYpOworCQlkZWxldGVfdGVtcGZpbGUoJnRlbXBmaWxlKTsKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gdGVtcGZpbGU7Cit9CisKK3N0cnVjdCB0ZW1wZmlsZSAqcmVnaXN0ZXJfdGVtcGZpbGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlID0gbmV3X3RlbXBmaWxlKCk7CisJc3RyYnVmX2FkZF9hYnNvbHV0ZV9wYXRoKCZ0ZW1wZmlsZS0+ZmlsZW5hbWUsIHBhdGgpOworCWFjdGl2YXRlX3RlbXBmaWxlKHRlbXBmaWxlKTsKKwlyZXR1cm4gdGVtcGZpbGU7Cit9CisKK3N0cnVjdCB0ZW1wZmlsZSAqbWtzX3RlbXBmaWxlX3NtKGNvbnN0IGNoYXIgKmZpbGVuYW1lX3RlbXBsYXRlLCBpbnQgc3VmZml4bGVuLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlID0gbmV3X3RlbXBmaWxlKCk7CisKKwlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJnRlbXBmaWxlLT5maWxlbmFtZSwgZmlsZW5hbWVfdGVtcGxhdGUpOworCXRlbXBmaWxlLT5mZCA9IGdpdF9ta3N0ZW1wc19tb2RlKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsIHN1ZmZpeGxlbiwgbW9kZSk7CisJaWYgKHRlbXBmaWxlLT5mZCA8IDApIHsKKwkJZGVhY3RpdmF0ZV90ZW1wZmlsZSh0ZW1wZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlhY3RpdmF0ZV90ZW1wZmlsZSh0ZW1wZmlsZSk7CisJcmV0dXJuIHRlbXBmaWxlOworfQorCitzdHJ1Y3QgdGVtcGZpbGUgKm1rc190ZW1wZmlsZV90c20oY29uc3QgY2hhciAqZmlsZW5hbWVfdGVtcGxhdGUsIGludCBzdWZmaXhsZW4sIGludCBtb2RlKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUgPSBuZXdfdGVtcGZpbGUoKTsKKwljb25zdCBjaGFyICp0bXBkaXI7CisKKwl0bXBkaXIgPSBnZXRlbnYoIlRNUERJUiIpOworCWlmICghdG1wZGlyKQorCQl0bXBkaXIgPSAiL3RtcCI7CisKKwlzdHJidWZfYWRkZigmdGVtcGZpbGUtPmZpbGVuYW1lLCAiJXMvJXMiLCB0bXBkaXIsIGZpbGVuYW1lX3RlbXBsYXRlKTsKKwl0ZW1wZmlsZS0+ZmQgPSBnaXRfbWtzdGVtcHNfbW9kZSh0ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmLCBzdWZmaXhsZW4sIG1vZGUpOworCWlmICh0ZW1wZmlsZS0+ZmQgPCAwKSB7CisJCWRlYWN0aXZhdGVfdGVtcGZpbGUodGVtcGZpbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYWN0aXZhdGVfdGVtcGZpbGUodGVtcGZpbGUpOworCXJldHVybiB0ZW1wZmlsZTsKK30KKworc3RydWN0IHRlbXBmaWxlICp4bWtzX3RlbXBmaWxlX20oY29uc3QgY2hhciAqZmlsZW5hbWVfdGVtcGxhdGUsIGludCBtb2RlKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGU7CisJc3RydWN0IHN0cmJ1ZiBmdWxsX3RlbXBsYXRlID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJmZ1bGxfdGVtcGxhdGUsIGZpbGVuYW1lX3RlbXBsYXRlKTsKKwl0ZW1wZmlsZSA9IG1rc190ZW1wZmlsZV9tKGZ1bGxfdGVtcGxhdGUuYnVmLCBtb2RlKTsKKwlpZiAoIXRlbXBmaWxlKQorCQlkaWVfZXJybm8oIlVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJyIsCisJCQkgIGZ1bGxfdGVtcGxhdGUuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZmdWxsX3RlbXBsYXRlKTsKKwlyZXR1cm4gdGVtcGZpbGU7Cit9CisKK0ZJTEUgKmZkb3Blbl90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlLCBjb25zdCBjaGFyICptb2RlKQoreworCWlmICghaXNfdGVtcGZpbGVfYWN0aXZlKHRlbXBmaWxlKSkKKwkJQlVHKCJmZG9wZW5fdGVtcGZpbGUoKSBjYWxsZWQgZm9yIGluYWN0aXZlIG9iamVjdCIpOworCWlmICh0ZW1wZmlsZS0+ZnApCisJCUJVRygiZmRvcGVuX3RlbXBmaWxlKCkgY2FsbGVkIGZvciBvcGVuIG9iamVjdCIpOworCisJdGVtcGZpbGUtPmZwID0gZmRvcGVuKHRlbXBmaWxlLT5mZCwgbW9kZSk7CisJcmV0dXJuIHRlbXBmaWxlLT5mcDsKK30KKworY29uc3QgY2hhciAqZ2V0X3RlbXBmaWxlX3BhdGgoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSkKK3sKKwlpZiAoIWlzX3RlbXBmaWxlX2FjdGl2ZSh0ZW1wZmlsZSkpCisJCUJVRygiZ2V0X3RlbXBmaWxlX3BhdGgoKSBjYWxsZWQgZm9yIGluYWN0aXZlIG9iamVjdCIpOworCXJldHVybiB0ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmOworfQorCitpbnQgZ2V0X3RlbXBmaWxlX2ZkKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpCit7CisJaWYgKCFpc190ZW1wZmlsZV9hY3RpdmUodGVtcGZpbGUpKQorCQlCVUcoImdldF90ZW1wZmlsZV9mZCgpIGNhbGxlZCBmb3IgaW5hY3RpdmUgb2JqZWN0Iik7CisJcmV0dXJuIHRlbXBmaWxlLT5mZDsKK30KKworRklMRSAqZ2V0X3RlbXBmaWxlX2ZwKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpCit7CisJaWYgKCFpc190ZW1wZmlsZV9hY3RpdmUodGVtcGZpbGUpKQorCQlCVUcoImdldF90ZW1wZmlsZV9mcCgpIGNhbGxlZCBmb3IgaW5hY3RpdmUgb2JqZWN0Iik7CisJcmV0dXJuIHRlbXBmaWxlLT5mcDsKK30KKworaW50IGNsb3NlX3RlbXBmaWxlX2dlbnRseShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKQoreworCWludCBmZDsKKwlGSUxFICpmcDsKKwlpbnQgZXJyOworCisJaWYgKCFpc190ZW1wZmlsZV9hY3RpdmUodGVtcGZpbGUpIHx8IHRlbXBmaWxlLT5mZCA8IDApCisJCXJldHVybiAwOworCisJZmQgPSB0ZW1wZmlsZS0+ZmQ7CisJZnAgPSB0ZW1wZmlsZS0+ZnA7CisJdGVtcGZpbGUtPmZkID0gLTE7CisJaWYgKGZwKSB7CisJCXRlbXBmaWxlLT5mcCA9IE5VTEw7CisJCWlmIChmZXJyb3IoZnApKSB7CisJCQllcnIgPSAtMTsKKwkJCWlmICghZmNsb3NlKGZwKSkKKwkJCQllcnJubyA9IEVJTzsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IGZjbG9zZShmcCk7CisJCX0KKwl9IGVsc2UgeworCQllcnIgPSBjbG9zZShmZCk7CisJfQorCisJcmV0dXJuIGVyciA/IC0xIDogMDsKK30KKworaW50IHJlb3Blbl90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKQoreworCWlmICghaXNfdGVtcGZpbGVfYWN0aXZlKHRlbXBmaWxlKSkKKwkJQlVHKCJyZW9wZW5fdGVtcGZpbGUgY2FsbGVkIGZvciBhbiBpbmFjdGl2ZSBvYmplY3QiKTsKKwlpZiAoMCA8PSB0ZW1wZmlsZS0+ZmQpCisJCUJVRygicmVvcGVuX3RlbXBmaWxlIGNhbGxlZCBmb3IgYW4gb3BlbiBvYmplY3QiKTsKKwl0ZW1wZmlsZS0+ZmQgPSBvcGVuKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsIE9fV1JPTkxZfE9fVFJVTkMpOworCXJldHVybiB0ZW1wZmlsZS0+ZmQ7Cit9CisKK2ludCByZW5hbWVfdGVtcGZpbGUoc3RydWN0IHRlbXBmaWxlICoqdGVtcGZpbGVfcCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlID0gKnRlbXBmaWxlX3A7CisKKwlpZiAoIWlzX3RlbXBmaWxlX2FjdGl2ZSh0ZW1wZmlsZSkpCisJCUJVRygicmVuYW1lX3RlbXBmaWxlIGNhbGxlZCBmb3IgaW5hY3RpdmUgb2JqZWN0Iik7CisKKwlpZiAoY2xvc2VfdGVtcGZpbGVfZ2VudGx5KHRlbXBmaWxlKSkgeworCQlkZWxldGVfdGVtcGZpbGUodGVtcGZpbGVfcCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmVuYW1lKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsIHBhdGgpKSB7CisJCWludCBzYXZlX2Vycm5vID0gZXJybm87CisJCWRlbGV0ZV90ZW1wZmlsZSh0ZW1wZmlsZV9wKTsKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCQlyZXR1cm4gLTE7CisJfQorCisJZGVhY3RpdmF0ZV90ZW1wZmlsZSh0ZW1wZmlsZSk7CisJKnRlbXBmaWxlX3AgPSBOVUxMOworCXJldHVybiAwOworfQorCit2b2lkIGRlbGV0ZV90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKip0ZW1wZmlsZV9wKQoreworCXN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUgPSAqdGVtcGZpbGVfcDsKKworCWlmICghaXNfdGVtcGZpbGVfYWN0aXZlKHRlbXBmaWxlKSkKKwkJcmV0dXJuOworCisJY2xvc2VfdGVtcGZpbGVfZ2VudGx5KHRlbXBmaWxlKTsKKwl1bmxpbmtfb3Jfd2Fybih0ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmKTsKKwlkZWFjdGl2YXRlX3RlbXBmaWxlKHRlbXBmaWxlKTsKKwkqdGVtcGZpbGVfcCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS90ZW1wZmlsZS5oIGIvdGVtcGZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRkYTBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGZpbGUuaApAQCAtMCwwICsxLDI2NSBAQAorI2lmbmRlZiBURU1QRklMRV9ICisjZGVmaW5lIFRFTVBGSUxFX0gKKworI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworLyoKKyAqIEhhbmRsZSB0ZW1wb3JhcnkgZmlsZXMuCisgKgorICogVGhlIHRlbXBmaWxlIEFQSSBhbGxvd3MgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQsIGRlbGV0ZWQsIGFuZAorICogYXRvbWljYWxseSByZW5hbWVkLiBUZW1wb3JhcnkgZmlsZXMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdoZW4gdGhlCisgKiBwcm9ncmFtIGVuZHMgYXJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseS4gTG9ja2ZpbGVzIChzZWUKKyAqICJsb2NrZmlsZS5oIikgYXJlIGJ1aWx0IG9uIHRvcCBvZiB0aGlzIEFQSS4KKyAqCisgKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBjYWxsZXI6CisgKgorICogKiBBdHRlbXB0cyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBieSBjYWxsaW5nCisgKiAgIGBjcmVhdGVfdGVtcGZpbGUoKWAuIFRoZSByZXNvdXJjZXMgdXNlZCBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlIGFyZQorICogICBtYW5hZ2VkIGJ5IHRoZSB0ZW1wZmlsZSBBUEkuCisgKgorICogKiBXcml0ZXMgbmV3IGNvbnRlbnQgdG8gdGhlIGZpbGUgYnkgZWl0aGVyOgorICoKKyAqICAgKiB3cml0aW5nIHRvIHRoZSBgdGVtcGZpbGUtPmZkYCBmaWxlIGRlc2NyaXB0b3IKKyAqCisgKiAgICogY2FsbGluZyBgZmRvcGVuX3RlbXBmaWxlKClgIHRvIGdldCBhIGBGSUxFYCBwb2ludGVyIGZvciB0aGUKKyAqICAgICBvcGVuIGZpbGUgYW5kIHdyaXRpbmcgdG8gdGhlIGZpbGUgdXNpbmcgc3RkaW8uCisgKgorICogICBOb3RlIHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBjcmVhdGVkIGJ5IGNyZWF0ZV90ZW1wZmlsZSgpCisgKiAgIGlzIG1hcmtlZCBPX0NMT0VYRUMsIHNvIHRoZSBuZXcgY29udGVudHMgbXVzdCBiZSB3cml0dGVuIGJ5CisgKiAgIHRoZSBjdXJyZW50IHByb2Nlc3MsIG5vdCBhbnkgc3Bhd25lZCBvbmUuCisgKgorICogV2hlbiBmaW5pc2hlZCB3cml0aW5nLCB0aGUgY2FsbGVyIGNhbjoKKyAqCisgKiAqIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgYW5kIHJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYnkKKyAqICAgY2FsbGluZyBgZGVsZXRlX3RlbXBmaWxlKClgLgorICoKKyAqICogQ2xvc2UgdGhlIHRlbXBvcmFyeSBmaWxlIGFuZCByZW5hbWUgaXQgYXRvbWljYWxseSB0byBhIHNwZWNpZmllZAorICogICBmaWxlbmFtZSBieSBjYWxsaW5nIGByZW5hbWVfdGVtcGZpbGUoKWAuIFRoaXMgcmVsaW5xdWlzaGVzCisgKiAgIGNvbnRyb2wgb2YgdGhlIGZpbGUuCisgKgorICogKiBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpdGhvdXQgcmVtb3Zpbmcgb3IgcmVuYW1pbmcgdGhlCisgKiAgIHRlbXBvcmFyeSBmaWxlIGJ5IGNhbGxpbmcgYGNsb3NlX3RlbXBmaWxlX2dlbnRseSgpYCwgYW5kIGxhdGVyIGNhbGwKKyAqICAgYGRlbGV0ZV90ZW1wZmlsZSgpYCBvciBgcmVuYW1lX3RlbXBmaWxlKClgLgorICoKKyAqIEFmdGVyIHRoZSB0ZW1wb3JhcnkgZmlsZSBpcyByZW5hbWVkIG9yIGRlbGV0ZWQsIHRoZSBgdGVtcGZpbGVgCisgKiBvYmplY3QgaXMgbm8gbG9uZ2VyIHZhbGlkIGFuZCBzaG91bGQgbm90IGJlIHJldXNlZC4KKyAqCisgKiBJZiB0aGUgcHJvZ3JhbSBleGl0cyBiZWZvcmUgYHJlbmFtZV90ZW1wZmlsZSgpYCBvcgorICogYGRlbGV0ZV90ZW1wZmlsZSgpYCBpcyBjYWxsZWQsIGFuIGBhdGV4aXQoMylgIGhhbmRsZXIgd2lsbCBjbG9zZQorICogYW5kIHJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUuCisgKgorICogSWYgeW91IG5lZWQgdG8gY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciB5b3Vyc2VsZiwgZG8gc28gYnkgY2FsbGluZworICogYGNsb3NlX3RlbXBmaWxlX2dlbnRseSgpYC4gWW91IHNob3VsZCBuZXZlciBjYWxsIGBjbG9zZSgyKWAgb3IgYGZjbG9zZSgzKWAKKyAqIHlvdXJzZWxmLCBvdGhlcndpc2UgdGhlIGBzdHJ1Y3QgdGVtcGZpbGVgIHN0cnVjdHVyZSB3b3VsZCBzdGlsbAorICogdGhpbmsgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIG5lZWRzIHRvIGJlIGNsb3NlZCwgYW5kIGEgbGF0ZXIKKyAqIGNsZWFudXAgd291bGQgcmVzdWx0IGluIGR1cGxpY2F0ZSBjYWxscyB0byBgY2xvc2UoMilgLiBXb3JzZSB5ZXQsCisgKiBpZiB5b3UgY2xvc2UgYW5kIHRoZW4gbGF0ZXIgb3BlbiBhbm90aGVyIGZpbGUgZGVzY3JpcHRvciBmb3IgYQorICogY29tcGxldGVseSBkaWZmZXJlbnQgcHVycG9zZSwgdGhlbiB0aGUgdW5yZWxhdGVkIGZpbGUgZGVzY3JpcHRvcgorICogbWlnaHQgZ2V0IGNsb3NlZC4KKyAqCisgKgorICogRXJyb3IgaGFuZGxpbmcKKyAqIC0tLS0tLS0tLS0tLS0tCisgKgorICogYGNyZWF0ZV90ZW1wZmlsZSgpYCByZXR1cm5zIGFuIGFsbG9jYXRlZCB0ZW1wZmlsZSBvbiBzdWNjZXNzIG9yIE5VTEwKKyAqIG9uIGZhaWx1cmUuIE9uIGVycm9ycywgYGVycm5vYCBkZXNjcmliZXMgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZS4KKyAqCisgKiBgcmVuYW1lX3RlbXBmaWxlKClgIGFuZCBgY2xvc2VfdGVtcGZpbGVfZ2VudGx5KClgIHJldHVybiAwIG9uIHN1Y2Nlc3MuCisgKiBPbiBmYWlsdXJlIHRoZXkgc2V0IGBlcnJub2AgYXBwcm9wcmlhdGVseSBhbmQgcmV0dXJuIC0xLgorICogYGRlbGV0ZV90ZW1wZmlsZSgpYCBhbmQgYHJlbmFtZWAgKGJ1dCBub3QgYGNsb3NlYCkgZG8gdGhlaXIgYmVzdCB0bworICogZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBiZWZvcmUgcmV0dXJuaW5nLgorICovCisKK3N0cnVjdCB0ZW1wZmlsZSB7CisJdm9sYXRpbGUgc3RydWN0IHZvbGF0aWxlX2xpc3RfaGVhZCBsaXN0OworCXZvbGF0aWxlIHNpZ19hdG9taWNfdCBhY3RpdmU7CisJdm9sYXRpbGUgaW50IGZkOworCUZJTEUgKnZvbGF0aWxlIGZwOworCXZvbGF0aWxlIHBpZF90IG93bmVyOworCXN0cnVjdCBzdHJidWYgZmlsZW5hbWU7Cit9OworCisvKgorICogQXR0ZW1wdCB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBhdCB0aGUgc3BlY2lmaWVkIGBwYXRoYC4gUmV0dXJuCisgKiBhIHRlbXBmaWxlICh3aG9zZSAiZmQiIG1lbWJlciBjYW4gYmUgdXNlZCBmb3Igd3JpdGluZyB0byBpdCksIG9yCisgKiBOVUxMIG9uIGVycm9yLiBJdCBpcyBhbiBlcnJvciBpZiBhIGZpbGUgYWxyZWFkeSBleGlzdHMgYXQgdGhhdCBwYXRoLgorICovCitzdHJ1Y3QgdGVtcGZpbGUgKmNyZWF0ZV90ZW1wZmlsZShjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIFJlZ2lzdGVyIGFuIGV4aXN0aW5nIGZpbGUgYXMgYSB0ZW1wZmlsZSwgbWVhbmluZyB0aGF0IGl0IHdpbGwgYmUKKyAqIGRlbGV0ZWQgd2hlbiB0aGUgcHJvZ3JhbSBleGl0cy4gVGhlIHRlbXBmaWxlIGlzIGNvbnNpZGVyZWQgY2xvc2VkLAorICogYnV0IGl0IGNhbiBiZSB3b3JrZWQgd2l0aCBsaWtlIGFueSBvdGhlciBjbG9zZWQgdGVtcGZpbGUgKGZvcgorICogZXhhbXBsZSwgaXQgY2FuIGJlIG9wZW5lZCB1c2luZyByZW9wZW5fdGVtcGZpbGUoKSkuCisgKi8KK3N0cnVjdCB0ZW1wZmlsZSAqcmVnaXN0ZXJfdGVtcGZpbGUoY29uc3QgY2hhciAqcGF0aCk7CisKKworLyoKKyAqIG1rc190ZW1wZmlsZSBmdW5jdGlvbnMKKyAqCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhdHRlbXB0IHRvIGNyZWF0ZSBhbmQgb3BlbiB0ZW1wb3JhcnkgZmlsZXMKKyAqIHdpdGggbmFtZXMgZGVyaXZlZCBhdXRvbWF0aWNhbGx5IGZyb20gYSB0ZW1wbGF0ZSwgaW4gdGhlIG1hbm5lciBvZgorICogbWtzdGVtcHMoKSwgYW5kIGFycmFuZ2UgZm9yIHRoZW0gdG8gYmUgZGVsZXRlZCBpZiB0aGUgcHJvZ3JhbSBlbmRzCisgKiBiZWZvcmUgdGhleSBhcmUgZGVsZXRlZCBleHBsaWNpdGx5LiBUaGVyZSBpcyBhIHdob2xlIGZhbWlseSBvZiBzdWNoCisgKiBmdW5jdGlvbnMsIG5hbWVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHBhdHRlcm46CisgKgorICogICAgIHg/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+aW5pdGlhbGl6ZWQ7Cit9CisKKyNlbmRpZiAvKiBIQVZFX1ZBUklBRElDX01BQ1JPUyAqLworCisjZW5kaWYgLyogVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvdHJhY2UyLmMgYi90cmFjZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2I0ZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyLmMKQEAgLTAsMCArMSw3ODUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImpzb24td3JpdGVyLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfY2ZnLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9jbWRfbmFtZS5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfZHN0LmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9zaWQuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX3N5c2Vudi5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfdGd0LmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl90bHMuaCIKKworc3RhdGljIGludCB0cmFjZTJfZW5hYmxlZDsKKworc3RhdGljIGludCB0cjJfbmV4dF9jaGlsZF9pZDsgLyogbW9kaWZ5IHVuZGVyIGxvY2sgKi8KK3N0YXRpYyBpbnQgdHIyX25leHRfZXhlY19pZDsgLyogbW9kaWZ5IHVuZGVyIGxvY2sgKi8KK3N0YXRpYyBpbnQgdHIyX25leHRfcmVwb19pZCA9IDE7IC8qIG1vZGlmeSB1bmRlciBsb2NrLiB6ZXJvIGlzIHJlc2VydmVkICovCisKKy8qCisgKiBBIHRhYmxlIG9mIHRoZSBidWlsdGluIFRSQUNFMiB0YXJnZXRzLiAgRWFjaCBvZiB0aGVzZSBtYXkgYmUgaW5kZXBlbmRlbnRseQorICogZW5hYmxlZCBvciBkaXNhYmxlZC4gIEVhY2ggVFJBQ0UyIEFQSSBtZXRob2Qgd2lsbCB0cnkgdG8gd3JpdGUgYW4gZXZlbnQgdG8KKyAqICplYWNoKiBvZiB0aGUgZW5hYmxlZCB0YXJnZXRzLgorICovCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCitzdGF0aWMgc3RydWN0IHRyMl90Z3QgKnRyMl90Z3RfYnVpbHRpbnNbXSA9Cit7CisJJnRyMl90Z3Rfbm9ybWFsLAorCSZ0cjJfdGd0X3BlcmYsCisJJnRyMl90Z3RfZXZlbnQsCisJTlVMTAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisjZGVmaW5lIGZvcl9lYWNoX2J1aWx0aW4oaiwgdGd0X2opCQkJXAorCWZvciAoaiA9IDAsIHRndF9qID0gdHIyX3RndF9idWlsdGluc1tqXTsJXAorCSAgICAgdGd0X2o7CQkJCQlcCisJICAgICBqKyssIHRndF9qID0gdHIyX3RndF9idWlsdGluc1tqXSkKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisvKiBjbGFuZy1mb3JtYXQgb2ZmICovCisjZGVmaW5lIGZvcl9lYWNoX3dhbnRlZF9idWlsdGluKGosIHRndF9qKSAgICAgICAgICAgIFwKKwlmb3JfZWFjaF9idWlsdGluKGosIHRndF9qKSAgICAgICAgICAgICAgICAgICBcCisJCWlmICh0cjJfZHN0X3RyYWNlX3dhbnQodGd0X2otPnBkc3QpKQorLyogY2xhbmctZm9ybWF0IG9uICovCisKKy8qCisgKiBGb3JjZSAocmF0aGVyIHRoYW4gbGF6aWx5KSBpbml0aWFsaXplIGFueSBvZiB0aGUgcmVxdWVzdGVkCisgKiBidWlsdGluIFRSQUNFMiB0YXJnZXRzIGF0IHN0YXJ0dXAgKGFuZCBiZWZvcmUgd2UndmUgc2VlbiBhbgorICogYWN0dWFsIFRSQUNFMiBldmVudCBjYWxsKSBzbyB3ZSBjYW4gc2VlIGlmIHdlIG5lZWQgdG8gc2V0dXAKKyAqIHRoZSBUUjIgYW5kIFRMUyBtYWNoaW5lcnkuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnVpbHRpbiB0YXJnZXRzIGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgdHIyX3RndF93YW50X2J1aWx0aW5zKHZvaWQpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCWludCBzdW0gPSAwOworCisJZm9yX2VhY2hfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2luaXQoKSkKKwkJCXN1bSsrOworCisJcmV0dXJuIHN1bTsKK30KKworLyoKKyAqIFByb3Blcmx5IHRlcm1pbmF0ZSBlYWNoIGJ1aWx0aW4gdGFyZ2V0LiAgR2l2ZSBlYWNoIHRhcmdldAorICogYSBjaGFuY2UgdG8gd3JpdGUgYSBzdW1tYXJ5IGV2ZW50IGFuZC9vciBmbHVzaCBpZiBuZWNlc3NhcnkKKyAqIGFuZCB0aGVuIGNsb3NlIHRoZSBmZC4KKyAqLworc3RhdGljIHZvaWQgdHIyX3RndF9kaXNhYmxlX2J1aWx0aW5zKHZvaWQpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJZm9yX2VhY2hfYnVpbHRpbiAoaiwgdGd0X2opCisJCXRndF9qLT5wZm5fdGVybSgpOworfQorCitzdGF0aWMgaW50IHRyMm1haW5fZXhpdF9jb2RlOworCisvKgorICogT3VyIGF0ZXhpdCByb3V0aW5lIHNob3VsZCBydW4gYWZ0ZXIgZXZlcnl0aGluZyBoYXMgZmluaXNoZWQuCisgKgorICogTm90ZSB0aGF0IGV2ZW50cyBnZW5lcmF0ZWQgaGVyZSBtaWdodCBub3QgYWN0dWFsbHkgYXBwZWFyIGlmCisgKiB3ZSBhcmUgd3JpdGluZyB0byBmZCAxIG9yIDIgYW5kIG91ciBhdGV4aXQgcm91dGluZSBydW5zIGFmdGVyCisgKiB0aGUgcGFnZXIncyBhdGV4aXQgcm91dGluZSAoc2luY2UgaXQgY2xvc2VzIHRoZW0gdG8gc2h1dGRvd24KKyAqIHRoZSBwaXBlcykuCisgKi8KK3N0YXRpYyB2b2lkIHRyMm1haW5fYXRleGl0X2hhbmRsZXIodm9pZCkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCS8qCisJICogQ2xlYXIgYW55IHVuYmFsYW5jZWQgcmVnaW9ucyBzbyB0aGF0IG91ciBhdGV4aXQgbWVzc2FnZQorCSAqIGRvZXMgbm90IGFwcGVhciBuZXN0ZWQuICBUaGlzIGltcHJvdmVzIHRoZSBhcHBlYXJhbmNlIG9mCisJICogdGhlIHRyYWNlIG91dHB1dCBpZiBzb21lb25lIGNhbGxzIGRpZSgpLCBmb3IgZXhhbXBsZS4KKwkgKi8KKwl0cjJ0bHNfcG9wX3Vud2luZF9zZWxmKCk7CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2F0ZXhpdCkKKwkJCXRndF9qLT5wZm5fYXRleGl0KHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCSAgdHIybWFpbl9leGl0X2NvZGUpOworCisJdHIyX3RndF9kaXNhYmxlX2J1aWx0aW5zKCk7CisKKwl0cjJ0bHNfcmVsZWFzZSgpOworCXRyMl9zaWRfcmVsZWFzZSgpOworCXRyMl9jbWRfbmFtZV9yZWxlYXNlKCk7CisJdHIyX2NmZ19mcmVlX3BhdHRlcm5zKCk7CisJdHIyX3N5c2Vudl9yZWxlYXNlKCk7CisKKwl0cmFjZTJfZW5hYmxlZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRyMm1haW5fc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9zaWduYWwpCisJCQl0Z3Rfai0+cGZuX3NpZ25hbCh1c19lbGFwc2VkX2Fic29sdXRlLCBzaWdubyk7CisKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKwordm9pZCB0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jayh2b2lkKQoreworCXRyMnRsc19zdGFydF9wcm9jZXNzX2Nsb2NrKCk7Cit9CisKK3ZvaWQgdHJhY2UyX2luaXRpYWxpemVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJaWYgKHRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl0cjJfc3lzZW52X2xvYWQoKTsKKworCWlmICghdHIyX3RndF93YW50X2J1aWx0aW5zKCkpCisJCXJldHVybjsKKwl0cmFjZTJfZW5hYmxlZCA9IDE7CisKKwl0cjJfc2lkX2dldCgpOworCisJYXRleGl0KHRyMm1haW5fYXRleGl0X2hhbmRsZXIpOworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgdHIybWFpbl9zaWduYWxfaGFuZGxlcik7CisJdHIydGxzX2luaXQoKTsKKworCS8qCisJICogRW1pdCAndmVyc2lvbicgbWVzc2FnZSBvbiBlYWNoIGFjdGl2ZSBidWlsdGluIHRhcmdldC4KKwkgKi8KKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX3ZlcnNpb25fZmwpCisJCQl0Z3Rfai0+cGZuX3ZlcnNpb25fZmwoZmlsZSwgbGluZSk7Cit9CisKK2ludCB0cmFjZTJfaXNfZW5hYmxlZCh2b2lkKQoreworCXJldHVybiB0cmFjZTJfZW5hYmxlZDsKK30KKwordm9pZCB0cmFjZTJfY21kX3N0YXJ0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fc3RhcnRfZmwpCisJCQl0Z3Rfai0+cGZuX3N0YXJ0X2ZsKGZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCSAgICBhcmd2KTsKK30KKworaW50IHRyYWNlMl9jbWRfZXhpdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IGNvZGUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCisJY29kZSAmPSAweGZmOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuIGNvZGU7CisKKwl0cmFjZTJfY29sbGVjdF9wcm9jZXNzX2luZm8oVFJBQ0UyX1BST0NFU1NfSU5GT19FWElUKTsKKworCXRyMm1haW5fZXhpdF9jb2RlID0gY29kZTsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9leGl0X2ZsKQorCQkJdGd0X2otPnBmbl9leGl0X2ZsKGZpbGUsIGxpbmUsIHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCSAgIGNvZGUpOworCisJcmV0dXJuIGNvZGU7Cit9CisKK3ZvaWQgdHJhY2UyX2NtZF9lcnJvcl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LAorCQkJICAgIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXZSBleHBlY3QgZWFjaCB0YXJnZXQgZnVuY3Rpb24gdG8gdHJlYXQgJ2FwJyBhcyBjb25zdGFudAorCSAqIGFuZCB1c2UgdmFfY29weSAoYmVjYXVzZSBhbiAnYXAnIGNhbiBvbmx5IGJlIHdhbGtlZCBvbmNlKS4KKwkgKi8KKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2Vycm9yX3ZhX2ZsKQorCQkJdGd0X2otPnBmbl9lcnJvcl92YV9mbChmaWxlLCBsaW5lLCBmbXQsIGFwKTsKK30KKwordm9pZCB0cmFjZTJfY21kX3BhdGhfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fY29tbWFuZF9wYXRoX2ZsKQorCQkJdGd0X2otPnBmbl9jb21tYW5kX3BhdGhfZmwoZmlsZSwgbGluZSwgcGF0aG5hbWUpOworfQorCit2b2lkIHRyYWNlMl9jbWRfbmFtZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJY29uc3QgY2hhciAqaGllcmFyY2h5OworCWludCBqOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdHIyX2NtZF9uYW1lX2FwcGVuZF9oaWVyYXJjaHkobmFtZSk7CisJaGllcmFyY2h5ID0gdHIyX2NtZF9uYW1lX2dldF9oaWVyYXJjaHkoKTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fY29tbWFuZF9uYW1lX2ZsKQorCQkJdGd0X2otPnBmbl9jb21tYW5kX25hbWVfZmwoZmlsZSwgbGluZSwgbmFtZSwgaGllcmFyY2h5KTsKK30KKwordm9pZCB0cmFjZTJfY21kX21vZGVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9jb21tYW5kX21vZGVfZmwpCisJCQl0Z3Rfai0+cGZuX2NvbW1hbmRfbW9kZV9mbChmaWxlLCBsaW5lLCBtb2RlKTsKK30KKwordm9pZCB0cmFjZTJfY21kX2FsaWFzX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICphbGlhcywKKwkJCSBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2FsaWFzX2ZsKQorCQkJdGd0X2otPnBmbl9hbGlhc19mbChmaWxlLCBsaW5lLCBhbGlhcywgYXJndik7Cit9CisKK3ZvaWQgdHJhY2UyX2NtZF9saXN0X2NvbmZpZ19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl0cjJfY2ZnX2xpc3RfY29uZmlnX2ZsKGZpbGUsIGxpbmUpOworfQorCit2b2lkIHRyYWNlMl9jbWRfc2V0X2NvbmZpZ19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqa2V5LAorCQkJICAgICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdHIyX2NmZ19zZXRfZmwoZmlsZSwgbGluZSwga2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQgdHJhY2UyX2NoaWxkX3N0YXJ0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJICAgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCWNtZC0+dHJhY2UyX2NoaWxkX2lkID0gdHIydGxzX2xvY2tlZF9pbmNyZW1lbnQoJnRyMl9uZXh0X2NoaWxkX2lkKTsKKwljbWQtPnRyYWNlMl9jaGlsZF91c19zdGFydCA9IHVzX25vdzsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fY2hpbGRfc3RhcnRfZmwpCisJCQl0Z3Rfai0+cGZuX2NoaWxkX3N0YXJ0X2ZsKGZpbGUsIGxpbmUsCisJCQkJCQkgIHVzX2VsYXBzZWRfYWJzb2x1dGUsIGNtZCk7Cit9CisKK3ZvaWQgdHJhY2UyX2NoaWxkX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsCisJCQkgIGludCBjaGlsZF9leGl0X2NvZGUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCXVpbnQ2NF90IHVzX2VsYXBzZWRfY2hpbGQ7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCWlmIChjbWQtPnRyYWNlMl9jaGlsZF91c19zdGFydCkKKwkJdXNfZWxhcHNlZF9jaGlsZCA9IHVzX25vdyAtIGNtZC0+dHJhY2UyX2NoaWxkX3VzX3N0YXJ0OworCWVsc2UKKwkJdXNfZWxhcHNlZF9jaGlsZCA9IDA7CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2NoaWxkX2V4aXRfZmwpCisJCQl0Z3Rfai0+cGZuX2NoaWxkX2V4aXRfZmwoZmlsZSwgbGluZSwKKwkJCQkJCSB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJCQkJIGNtZC0+dHJhY2UyX2NoaWxkX2lkLCBjbWQtPnBpZCwKKwkJCQkJCSBjaGlsZF9leGl0X2NvZGUsCisJCQkJCQkgdXNfZWxhcHNlZF9jaGlsZCk7Cit9CisKK2ludCB0cmFjZTJfZXhlY19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZXhlLAorCQkgICBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJaW50IGV4ZWNfaWQ7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm4gLTE7CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCWV4ZWNfaWQgPSB0cjJ0bHNfbG9ja2VkX2luY3JlbWVudCgmdHIyX25leHRfZXhlY19pZCk7CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX2V4ZWNfZmwpCisJCQl0Z3Rfai0+cGZuX2V4ZWNfZmwoZmlsZSwgbGluZSwgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJICAgZXhlY19pZCwgZXhlLCBhcmd2KTsKKworCXJldHVybiBleGVjX2lkOworfQorCit2b2lkIHRyYWNlMl9leGVjX3Jlc3VsdF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IGV4ZWNfaWQsIGludCBjb2RlKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9leGVjX3Jlc3VsdF9mbCkKKwkJCXRndF9qLT5wZm5fZXhlY19yZXN1bHRfZmwoCisJCQkJZmlsZSwgbGluZSwgdXNfZWxhcHNlZF9hYnNvbHV0ZSwgZXhlY19pZCwgY29kZSk7Cit9CisKK3ZvaWQgdHJhY2UyX3RocmVhZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqdGhyZWFkX25hbWUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKHRyMnRsc19pc19tYWluX3RocmVhZCgpKSB7CisJCS8qCisJCSAqIFdlIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBuZXcgdGhyZWFkJ3MgdGhyZWFkLXByb2MsCisJCSAqIHNvIHRoaXMgaXMgdGVjaG5pY2FsbHkgYSBidWcuICBCdXQgaW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhlCisJCSAqIG1haW4gdGhyZWFkIGFsc28gcnVucyB0aGUgdGhyZWFkLXByb2MgZnVuY3Rpb24gKG9yIHdoZW4gd2UKKwkJICogYXJlIGJ1aWx0IHdpdGggdGhyZWFkaW5nIGRpc2FibGVkKSwgd2UgbmVlZCB0byBhbGxvdyBpdC4KKwkJICoKKwkJICogQ29udmVydCB0aGlzIGNhbGwgdG8gYSByZWdpb24tZW50ZXIgc28gdGhlIG5lc3RpbmcgbG9va3MKKwkJICogY29ycmVjdC4KKwkJICovCisJCXRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmX2ZsKGZpbGUsIGxpbmUsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgICJ0aHJlYWQtcHJvYyBvbiBtYWluOiAlcyIsCisJCQkJCSAgICAgIHRocmVhZF9uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJdHIydGxzX2NyZWF0ZV9zZWxmKHRocmVhZF9uYW1lLCB1c19ub3cpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl90aHJlYWRfc3RhcnRfZmwpCisJCQl0Z3Rfai0+cGZuX3RocmVhZF9zdGFydF9mbChmaWxlLCBsaW5lLAorCQkJCQkJICAgdXNfZWxhcHNlZF9hYnNvbHV0ZSk7Cit9CisKK3ZvaWQgdHJhY2UyX3RocmVhZF9leGl0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKwl1aW50NjRfdCB1c19lbGFwc2VkX3RocmVhZDsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmICh0cjJ0bHNfaXNfbWFpbl90aHJlYWQoKSkgeworCQkvKgorCQkgKiBXZSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgZXhpdGluZyB0aHJlYWQncworCQkgKiB0aHJlYWQtcHJvYywgc28gdGhpcyBpcyB0ZWNobmljYWxseSBhIGJ1Zy4gIEJ1dCBpbgorCQkgKiB0aG9zZSBjYXNlcyB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgYWxzbyBydW5zIHRoZQorCQkgKiB0aHJlYWQtcHJvYyBmdW5jdGlvbiAob3Igd2hlbiB3ZSBhcmUgYnVpbHQgd2l0aAorCQkgKiB0aHJlYWRpbmcgZGlzYWJsZWQpLCB3ZSBuZWVkIHRvIGFsbG93IGl0LgorCQkgKgorCQkgKiBDb252ZXJ0IHRoaXMgY2FsbCB0byBhIHJlZ2lvbi1sZWF2ZSBzbyB0aGUgbmVzdGluZworCQkgKiBsb29rcyBjb3JyZWN0LgorCQkgKi8KKwkJdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGZfZmwoZmlsZSwgbGluZSwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkJICAgICAgInRocmVhZC1wcm9jIG9uIG1haW4iKTsKKwkJcmV0dXJuOworCX0KKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCisJLyoKKwkgKiBDbGVhciBhbnkgdW5iYWxhbmNlZCByZWdpb25zIGFuZCB0aGVuIGdldCB0aGUgcmVsYXRpdmUgdGltZQorCSAqIGZvciB0aGUgb3V0ZXItbW9zdCByZWdpb24gKHdoaWNoIHdlIHB1c2hlZCB3aGVuIHRoZSB0aHJlYWQKKwkgKiBzdGFydGVkKS4gIFRoaXMgZ2l2ZXMgdXMgdGhlIHJ1biB0aW1lIG9mIHRoZSB0aHJlYWQuCisJICovCisJdHIydGxzX3BvcF91bndpbmRfc2VsZigpOworCXVzX2VsYXBzZWRfdGhyZWFkID0gdHIydGxzX3JlZ2lvbl9lbGFzcGVkX3NlbGYodXNfbm93KTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fdGhyZWFkX2V4aXRfZmwpCisJCQl0Z3Rfai0+cGZuX3RocmVhZF9leGl0X2ZsKGZpbGUsIGxpbmUsCisJCQkJCQkgIHVzX2VsYXBzZWRfYWJzb2x1dGUsCisJCQkJCQkgIHVzX2VsYXBzZWRfdGhyZWFkKTsKKworCXRyMnRsc191bnNldF9zZWxmKCk7Cit9CisKK3ZvaWQgdHJhY2UyX2RlZl9wYXJhbV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqcGFyYW0sCisJCQkgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9wYXJhbV9mbCkKKwkJCXRndF9qLT5wZm5fcGFyYW1fZmwoZmlsZSwgbGluZSwgcGFyYW0sIHZhbHVlKTsKK30KKwordm9pZCB0cmFjZTJfZGVmX3JlcG9fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChyZXBvLT50cmFjZTJfcmVwb19pZCkKKwkJcmV0dXJuOworCisJcmVwby0+dHJhY2UyX3JlcG9faWQgPSB0cjJ0bHNfbG9ja2VkX2luY3JlbWVudCgmdHIyX25leHRfcmVwb19pZCk7CisKKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX3JlcG9fZmwpCisJCQl0Z3Rfai0+cGZuX3JlcG9fZmwoZmlsZSwgbGluZSwgcmVwbyk7Cit9CisKK3ZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgICAgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgdHIyX3RndCAqdGd0X2o7CisJaW50IGo7CisJdWludDY0X3QgdXNfbm93OworCXVpbnQ2NF90IHVzX2VsYXBzZWRfYWJzb2x1dGU7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwl1c19ub3cgPSBnZXRuYW5vdGltZSgpIC8gMTAwMDsKKwl1c19lbGFwc2VkX2Fic29sdXRlID0gdHIydGxzX2Fic29sdXRlX2VsYXBzZWQodXNfbm93KTsKKworCS8qCisJICogUHJpbnQgdGhlIHJlZ2lvbi1lbnRlciBtZXNzYWdlIGF0IHRoZSBjdXJyZW50IG5lc3RpbmcKKwkgKiAoaW5kZW50YXRpb24pIGxldmVsIGFuZCB0aGVuIHB1c2ggYSBuZXcgbGV2ZWwuCisJICoKKwkgKiBXZSBleHBlY3QgZWFjaCB0YXJnZXQgZnVuY3Rpb24gdG8gdHJlYXQgJ2FwJyBhcyBjb25zdGFudAorCSAqIGFuZCB1c2UgdmFfY29weS4KKwkgKi8KKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX3JlZ2lvbl9lbnRlcl9wcmludGZfdmFfZmwpCisJCQl0Z3Rfai0+cGZuX3JlZ2lvbl9lbnRlcl9wcmludGZfdmFfZmwoCisJCQkJZmlsZSwgbGluZSwgdXNfZWxhcHNlZF9hYnNvbHV0ZSwgY2F0ZWdvcnksCisJCQkJbGFiZWwsIHJlcG8sIGZtdCwgYXApOworCisJdHIydGxzX3B1c2hfc2VsZih1c19ub3cpOworfQorCit2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIHJlcG8pOworCXRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmX3ZhX2ZsKGZpbGUsIGxpbmUsIGNhdGVnb3J5LCBsYWJlbCwgcmVwbywKKwkJCQkJIE5VTEwsIGFwKTsKKwl2YV9lbmQoYXApOworCit9CisKK3ZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCSAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zl92YV9mbChmaWxlLCBsaW5lLCBjYXRlZ29yeSwgbGFiZWwsIHJlcG8sIGZtdCwKKwkJCQkJIGFwKTsKKwl2YV9lbmQoYXApOworfQorCisjaWZuZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCit2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQljb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqZm10LAorCQkJCS4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfdmFfZmwoTlVMTCwgMCwgY2F0ZWdvcnksIGxhYmVsLCByZXBvLCBmbXQsCisJCQkJCSBhcCk7CisJdmFfZW5kKGFwKTsKK30KKyNlbmRpZgorCit2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCXVpbnQ2NF90IHVzX2VsYXBzZWRfcmVnaW9uOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdXNfbm93ID0gZ2V0bmFub3RpbWUoKSAvIDEwMDA7CisJdXNfZWxhcHNlZF9hYnNvbHV0ZSA9IHRyMnRsc19hYnNvbHV0ZV9lbGFwc2VkKHVzX25vdyk7CisKKwkvKgorCSAqIEdldCB0aGUgZWxhcHNlZCB0aW1lIGluIHRoZSBjdXJyZW50IHJlZ2lvbiBiZWZvcmUgd2UKKwkgKiBwb3AgaXQgb2ZmIHRoZSBzdGFjay4gIFBvcCB0aGUgc3RhY2suICBBbmQgdGhlbiBwcmludAorCSAqIHRoZSBwZXJmIG1lc3NhZ2UgYXQgdGhlIG5ldyAoc2hhbGxvd2VyKSBsZXZlbCBzbyB0aGF0CisJICogaXQgbGluZXMgdXAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwdXNoL2VudGVyLgorCSAqLworCXVzX2VsYXBzZWRfcmVnaW9uID0gdHIydGxzX3JlZ2lvbl9lbGFzcGVkX3NlbGYodXNfbm93KTsKKworCXRyMnRsc19wb3Bfc2VsZigpOworCisJLyoKKwkgKiBXZSBleHBlY3QgZWFjaCB0YXJnZXQgZnVuY3Rpb24gdG8gdHJlYXQgJ2FwJyBhcyBjb25zdGFudAorCSAqIGFuZCB1c2UgdmFfY29weS4KKwkgKi8KKwlmb3JfZWFjaF93YW50ZWRfYnVpbHRpbiAoaiwgdGd0X2opCisJCWlmICh0Z3Rfai0+cGZuX3JlZ2lvbl9sZWF2ZV9wcmludGZfdmFfZmwpCisJCQl0Z3Rfai0+cGZuX3JlZ2lvbl9sZWF2ZV9wcmludGZfdmFfZmwoCisJCQkJZmlsZSwgbGluZSwgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQl1c19lbGFwc2VkX3JlZ2lvbiwgY2F0ZWdvcnksIGxhYmVsLCByZXBvLCBmbXQsCisJCQkJYXApOworfQorCit2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIHJlcG8pOworCXRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsKGZpbGUsIGxpbmUsIGNhdGVnb3J5LCBsYWJlbCwgcmVwbywKKwkJCQkJIE5VTEwsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgIGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGZfdmFfZmwoZmlsZSwgbGluZSwgY2F0ZWdvcnksIGxhYmVsLCByZXBvLCBmbXQsCisJCQkJCSBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworI2lmbmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUwordm9pZCB0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zihjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQkuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhX2ZsKE5VTEwsIDAsIGNhdGVnb3J5LCBsYWJlbCwgcmVwbywgZm10LAorCQkJCQkgYXApOworCXZhX2VuZChhcCk7Cit9CisjZW5kaWYKKwordm9pZCB0cmFjZTJfZGF0YV9zdHJpbmdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCB0cjJfdGd0ICp0Z3RfajsKKwlpbnQgajsKKwl1aW50NjRfdCB1c19ub3c7CisJdWludDY0X3QgdXNfZWxhcHNlZF9hYnNvbHV0ZTsKKwl1aW50NjRfdCB1c19lbGFwc2VkX3JlZ2lvbjsKKworCWlmICghdHJhY2UyX2VuYWJsZWQpCisJCXJldHVybjsKKworCXVzX25vdyA9IGdldG5hbm90aW1lKCkgLyAxMDAwOworCXVzX2VsYXBzZWRfYWJzb2x1dGUgPSB0cjJ0bHNfYWJzb2x1dGVfZWxhcHNlZCh1c19ub3cpOworCXVzX2VsYXBzZWRfcmVnaW9uID0gdHIydGxzX3JlZ2lvbl9lbGFzcGVkX3NlbGYodXNfbm93KTsKKworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fZGF0YV9mbCkKKwkJCXRndF9qLT5wZm5fZGF0YV9mbChmaWxlLCBsaW5lLCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJCQkgICB1c19lbGFwc2VkX3JlZ2lvbiwgY2F0ZWdvcnksIHJlcG8sCisJCQkJCSAgIGtleSwgdmFsdWUpOworfQorCit2b2lkIHRyYWNlMl9kYXRhX2ludG1heF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCQkgICBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5LAorCQkJICAgaW50bWF4X3QgdmFsdWUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWZfc3RyaW5nID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXRyYWNlMl9lbmFibGVkKQorCQlyZXR1cm47CisKKwlzdHJidWZfYWRkZigmYnVmX3N0cmluZywgIiUiIFBSSWRNQVgsIHZhbHVlKTsKKwl0cmFjZTJfZGF0YV9zdHJpbmdfZmwoZmlsZSwgbGluZSwgY2F0ZWdvcnksIHJlcG8sIGtleSwgYnVmX3N0cmluZy5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZfc3RyaW5nKTsKK30KKwordm9pZCB0cmFjZTJfZGF0YV9qc29uX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpjYXRlZ29yeSwKKwkJCSBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5LAorCQkJIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqdmFsdWUpCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCXVpbnQ2NF90IHVzX2VsYXBzZWRfcmVnaW9uOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdXNfbm93ID0gZ2V0bmFub3RpbWUoKSAvIDEwMDA7CisJdXNfZWxhcHNlZF9hYnNvbHV0ZSA9IHRyMnRsc19hYnNvbHV0ZV9lbGFwc2VkKHVzX25vdyk7CisJdXNfZWxhcHNlZF9yZWdpb24gPSB0cjJ0bHNfcmVnaW9uX2VsYXNwZWRfc2VsZih1c19ub3cpOworCisJZm9yX2VhY2hfd2FudGVkX2J1aWx0aW4gKGosIHRndF9qKQorCQlpZiAodGd0X2otPnBmbl9kYXRhX2pzb25fZmwpCisJCQl0Z3Rfai0+cGZuX2RhdGFfanNvbl9mbChmaWxlLCBsaW5lLCB1c19lbGFwc2VkX2Fic29sdXRlLAorCQkJCQkJdXNfZWxhcHNlZF9yZWdpb24sIGNhdGVnb3J5LAorCQkJCQkJcmVwbywga2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQgdHJhY2UyX3ByaW50Zl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LAorCQkJIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHRyMl90Z3QgKnRndF9qOworCWludCBqOworCXVpbnQ2NF90IHVzX25vdzsKKwl1aW50NjRfdCB1c19lbGFwc2VkX2Fic29sdXRlOworCisJaWYgKCF0cmFjZTJfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdXNfbm93ID0gZ2V0bmFub3RpbWUoKSAvIDEwMDA7CisJdXNfZWxhcHNlZF9hYnNvbHV0ZSA9IHRyMnRsc19hYnNvbHV0ZV9lbGFwc2VkKHVzX25vdyk7CisKKwkvKgorCSAqIFdlIGV4cGVjdCBlYWNoIHRhcmdldCBmdW5jdGlvbiB0byB0cmVhdCAnYXAnIGFzIGNvbnN0YW50CisJICogYW5kIHVzZSB2YV9jb3B5LgorCSAqLworCWZvcl9lYWNoX3dhbnRlZF9idWlsdGluIChqLCB0Z3RfaikKKwkJaWYgKHRndF9qLT5wZm5fcHJpbnRmX3ZhX2ZsKQorCQkJdGd0X2otPnBmbl9wcmludGZfdmFfZmwoZmlsZSwgbGluZSwgdXNfZWxhcHNlZF9hYnNvbHV0ZSwKKwkJCQkJCWZtdCwgYXApOworfQorCit2b2lkIHRyYWNlMl9wcmludGZfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl0cmFjZTJfcHJpbnRmX3ZhX2ZsKGZpbGUsIGxpbmUsIGZtdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKKyNpZm5kZWYgSEFWRV9WQVJJQURJQ19NQUNST1MKK3ZvaWQgdHJhY2UyX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdHJhY2UyX3ByaW50Zl92YV9mbChOVUxMLCAwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90cmFjZTIuaCBiL3RyYWNlMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZTgxYzAKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZTIuaApAQCAtMCwwICsxLDQ5MCBAQAorI2lmbmRlZiBUUkFDRTJfSAorI2RlZmluZSBUUkFDRTJfSAorCisvKioKKyAqIFRoZSBUcmFjZTIgQVBJIGNhbiBiZSB1c2VkIHRvIHByaW50IGRlYnVnLCBwZXJmb3JtYW5jZSwgYW5kIHRlbGVtZXRyeQorICogaW5mb3JtYXRpb24gdG8gc3RkZXJyIG9yIGEgZmlsZS4gIFRoZSBUcmFjZTIgZmVhdHVyZSBpcyBpbmFjdGl2ZSB1bmxlc3MKKyAqIGV4cGxpY2l0bHkgZW5hYmxlZCBieSBlbmFibGluZyBvbmUgb3IgbW9yZSBUcmFjZTIgVGFyZ2V0cy4KKyAqCisgKiBUaGUgVHJhY2UyIEFQSSBpcyBpbnRlbmRlZCB0byByZXBsYWNlIHRoZSBleGlzdGluZyAoVHJhY2UxKQorICogcHJpbnRmLXN0eWxlIHRyYWNpbmcgcHJvdmlkZWQgYnkgdGhlIGV4aXN0aW5nIGBHSVRfVFJBQ0VgIGFuZAorICogYEdJVF9UUkFDRV9QRVJGT1JNQU5DRWAgZmFjaWxpdGllcy4gIER1cmluZyBpbml0aWFsIGltcGxlbWVudGF0aW9uLAorICogVHJhY2UyIGFuZCBUcmFjZTEgbWF5IG9wZXJhdGUgaW4gcGFyYWxsZWwuCisgKgorICogVGhlIFRyYWNlMiBBUEkgZGVmaW5lcyBhIHNldCBvZiBoaWdoLWxldmVsIG1lc3NhZ2VzIHdpdGgga25vd24gZmllbGRzLAorICogc3VjaCBhcyAoYHN0YXJ0YDogYGFyZ3ZgKSBhbmQgKGBleGl0YDoge2BleGl0LWNvZGVgLCBgZWxhcHNlZC10aW1lYH0pLgorICoKKyAqIFRyYWNlMiBpbnN0cnVtZW50YXRpb24gdGhyb3VnaG91dCB0aGUgR2l0IGNvZGUgYmFzZSBzZW5kcyBUcmFjZTIKKyAqIG1lc3NhZ2VzIHRvIHRoZSBlbmFibGVkIFRyYWNlMiBUYXJnZXRzLiAgVGFyZ2V0cyB0cmFuc2Zvcm0gdGhlc2UKKyAqIG1lc3NhZ2VzIGNvbnRlbnQgaW50byBwdXJwb3NlLXNwZWNpZmljIGZvcm1hdHMgYW5kIHdyaXRlIGV2ZW50cyB0bworICogdGhlaXIgZGF0YSBzdHJlYW1zLiAgSW4gdGhpcyBtYW5uZXIsIHRoZSBUcmFjZTIgQVBJIGNhbiBkcml2ZQorICogbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgYW5hbHlzaXMuCisgKgorICogVGFyZ2V0cyBhcmUgZGVmaW5lZCB1c2luZyBhIFZUYWJsZSBhbGxvd2luZyBlYXN5IGV4dGVuc2lvbiB0byBvdGhlcgorICogZm9ybWF0cyBpbiB0aGUgZnV0dXJlLiAgVGhpcyBtaWdodCBiZSB1c2VkIHRvIGRlZmluZSBhIGJpbmFyeSBmb3JtYXQsCisgKiBmb3IgZXhhbXBsZS4KKyAqCisgKiBUcmFjZTIgaXMgY29udHJvbGxlZCB1c2luZyBgdHJhY2UyLipgIGNvbmZpZyB2YWx1ZXMgaW4gdGhlIHN5c3RlbSBhbmQKKyAqIGdsb2JhbCBjb25maWcgZmlsZXMgYW5kIGBHSVRfVFJBQ0UyKmAgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVHJhY2UyIGRvZXMKKyAqIG5vdCByZWFkIGZyb20gcmVwbyBsb2NhbCBvciB3b3JrdHJlZSBjb25maWcgZmlsZXMgb3IgcmVzcGVjdCBgLWNgCisgKiBjb21tYW5kIGxpbmUgY29uZmlnIHNldHRpbmdzLgorICoKKyAqIEZvciBtb3JlIGluZm8gYWJvdXQ6IHRyYWNlMiB0YXJnZXRzLCBjb252ZW50aW9ucyBmb3IgcHVibGljIGZ1bmN0aW9ucyBhbmQKKyAqIG1hY3JvcywgdHJhY2UyIHRhcmdldCBmb3JtYXRzIGFuZCBleGFtcGxlcyBvbiB0cmFjZTIgQVBJIHVzYWdlIHJlZmVyIHRvCisgKiBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UyLnR4dAorICoKKyAqLworCitzdHJ1Y3QgY2hpbGRfcHJvY2VzczsKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IGpzb25fd3JpdGVyOworCisvKgorICogVGhlIHB1YmxpYyBUUkFDRTIgcm91dGluZXMgYXJlIGdyb3VwZWQgaW50byB0aGUgZm9sbG93aW5nIGdyb3VwczoKKyAqCisgKiBbXSB0cmFjZTJfaW5pdGlhbGl6ZSAtLSBpbml0aWFsaXphdGlvbi4KKyAqIFtdIHRyYWNlMl9jbWRfKiAgICAgIC0tIGVtaXQgY29tbWFuZC9jb250cm9sIG1lc3NhZ2VzLgorICogW10gdHJhY2UyX2NoaWxkKiAgICAgLS0gZW1pdCBjaGlsZCBzdGFydC9zdG9wIG1lc3NhZ2VzLgorICogW10gdHJhY2UyX2V4ZWMqICAgICAgLS0gZW1pdCBleGVjIHN0YXJ0L3N0b3AgbWVzc2FnZXMuCisgKiBbXSB0cmFjZTJfdGhyZWFkKiAgICAtLSBlbWl0IHRocmVhZCBzdGFydC9zdG9wIG1lc3NhZ2VzLgorICogW10gdHJhY2UyX2RlZiogICAgICAgLS0gZW1pdCBkZWZpbml0aW9uL3BhcmFtZXRlciBtZXNhc2dlcy4KKyAqIFtdIHRyYWNlMl9yZWdpb24qICAgIC0tIGVtaXQgcmVnaW9uIG5lc3RpbmcgbWVzc2FnZXMuCisgKiBbXSB0cmFjZTJfZGF0YSogICAgICAtLSBlbWl0IHJlZ2lvbi90aHJlYWQvcmVwbyBkYXRhIG1lc3NhZ2VzLgorICogW10gdHJhY2UyX3ByaW50ZiogICAgLS0gbGVnYWN5IHRyYWNlWzFdIG1lc3NhZ2VzLgorICovCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBUUkFDRTIgY2xvY2sgYW5kIGRvIG5vdGhpbmcgZWxzZSwgaW4gcGFydGljdWxhcgorICogbm8gbWFsbG9jcywgbm8gc3lzdGVtIGluc3BlY3Rpb24sIGFuZCBubyBlbnZpcm9ubWVudCBpbnNwZWN0aW9uLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhdCB0aGUgdmVyeSB0b3Agb2YgbWFpbigpIHRvIGNhcHR1cmUgdGhlCisgKiBwcm9jZXNzIHN0YXJ0IHRpbWUuICBUaGlzIGlzIGludGVuZGVkIHRvIHJlZHVjZSBjaGlja2VuLW4tZWdnCisgKiBib290c3RyYXAgcHJlc3N1cmUuCisgKgorICogSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgbW9yZSB0aGFuIG9uY2UuICBUaGlzIGFsbG93cyBjYXB0dXJpbmcKKyAqIGFic29sdXRlIHN0YXJ0dXAgY29zdHMgb24gV2luZG93cyB3aGljaCB1c2VzIGEgbGl0dGxlIHRyaWNrZXJ5CisgKiB0byBkbyBzZXR1cCB3b3JrIGJlZm9yZSBjb21tb24tbWFpbi5jOm1haW4oKSBpcyBjYWxsZWQuCisgKgorICogVGhlIG1haW4gdHJhY2UyX2luaXRpYWxpemVfZmwoKSBtYXkgYmUgY2FsbGVkIGEgbGl0dGxlIGxhdGVyCisgKiBhZnRlciBtb3JlIGluZnJhc3RydWN0dXJlIGlzIGVzdGFibGlzaGVkLgorICovCit2b2lkIHRyYWNlMl9pbml0aWFsaXplX2Nsb2NrKHZvaWQpOworCisvKgorICogSW5pdGlhbGl6ZSBUUkFDRTIgdHJhY2luZyBmYWNpbGl0eSBpZiBhbnkgb2YgdGhlIGJ1aWx0aW4gVFJBQ0UyCisgKiB0YXJnZXRzIGFyZSBlbmFibGVkIGluIHRoZSBzeXN0ZW0gY29uZmlnIG9yIHRoZSBlbnZpcm9ubWVudC4KKyAqIFRoaXMgaW5jbHVkZXMgc2V0dGluZyB1cCB0aGUgVHJhY2UyIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpLgorICogRW1pdHMgYSAndmVyc2lvbicgbWVzc2FnZSBjb250YWluaW5nIHRoZSB2ZXJzaW9uIG9mIGdpdAorICogYW5kIHRoZSBUcmFjZTIgcHJvdG9jb2wuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gYG1haW4oKWAgYXMgZWFybHkgYXMgcG9zc2libGUgaW4KKyAqIHRoZSBsaWZlIG9mIHRoZSBwcm9jZXNzIGFmdGVyIGVzc2VudGlhbCBwcm9jZXNzIGluaXRpYWxpemF0aW9uLgorICoKKyAqIENsZWFudXAvVGVybWluYXRpb24gaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGEgcmVnaXN0ZXJlZAorICogYXRleGl0KCkgcm91dGluZS4KKyAqLwordm9pZCB0cmFjZTJfaW5pdGlhbGl6ZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CisKKyNkZWZpbmUgdHJhY2UyX2luaXRpYWxpemUoKSB0cmFjZTJfaW5pdGlhbGl6ZV9mbChfX0ZJTEVfXywgX19MSU5FX18pCisKKy8qCisgKiBSZXR1cm4gMSBpZiB0cmFjZTIgaXMgZW5hYmxlZCAoYXQgbGVhc3Qgb25lIHRhcmdldCBpcyBhY3RpdmUpLgorICovCitpbnQgdHJhY2UyX2lzX2VuYWJsZWQodm9pZCk7CisKKy8qCisgKiBFbWl0IGEgJ3N0YXJ0JyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCAodW5tb2RpZmllZCkgYXJndi4KKyAqLwordm9pZCB0cmFjZTJfY21kX3N0YXJ0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICoqYXJndik7CisKKyNkZWZpbmUgdHJhY2UyX2NtZF9zdGFydChhcmd2KSB0cmFjZTJfY21kX3N0YXJ0X2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGFyZ3YpKQorCisvKgorICogRW1pdCBhbiAnZXhpdCcgZXZlbnQuCisgKgorICogV3JpdGUgdGhlIGV4aXQtY29kZSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGV4aXQoKSBvciByZXR1cm5lZAorICogZnJvbSBtYWluKCkuCisgKgorICogVXNlIHRoaXMgcHJpb3IgdG8gYWN0dWFsbHkgY2FsbGluZyBleGl0KCkuCisgKiBTZWUgIiNkZWZpbmUgZXhpdCgpIiBpbiBnaXQtY29tcGF0LXV0aWwuaAorICovCitpbnQgdHJhY2UyX2NtZF9leGl0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgY29kZSk7CisKKyNkZWZpbmUgdHJhY2UyX2NtZF9leGl0KGNvZGUpICh0cmFjZTJfY21kX2V4aXRfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY29kZSkpKQorCisvKgorICogRW1pdCBhbiAnZXJyb3InIGV2ZW50LgorICoKKyAqIFdyaXRlIGFuIGVycm9yIG1lc3NhZ2UgdG8gdGhlIFRSQUNFMiB0YXJnZXRzLgorICovCit2b2lkIHRyYWNlMl9jbWRfZXJyb3JfdmFfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCSAgICB2YV9saXN0IGFwKTsKKworI2RlZmluZSB0cmFjZTJfY21kX2Vycm9yX3ZhKGZtdCwgYXApIFwKKwl0cmFjZTJfY21kX2Vycm9yX3ZhX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGZtdCksIChhcCkpCisKKy8qCisgKiBFbWl0IGEgJ3BhdGhuYW1lJyBldmVudCB3aXRoIHRoZSBjYW5vbmljYWwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcworICogVGhpcyBnaXZlcyBwb3N0LXByb2Nlc3NvcnMgYSBzaW1wbGUgZmllbGQgdG8gaWRlbnRpZnkgdGhlIGNvbW1hbmQgd2l0aG91dAorICogaGF2aW5nIHRvIHBhcnNlIHRoZSBhcmd2LiAgRm9yIGV4YW1wbGUsIHRvIGRpc3Rpbmd1aXNoIGludm9jYXRpb25zIGZyb20KKyAqIGluc3RhbGxlZCB2ZXJzdXMgZGVidWcgZXhlY3V0YWJsZXMuCisgKi8KK3ZvaWQgdHJhY2UyX2NtZF9wYXRoX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpwYXRobmFtZSk7CisKKyNkZWZpbmUgdHJhY2UyX2NtZF9wYXRoKHApIHRyYWNlMl9jbWRfcGF0aF9mbChfX0ZJTEVfXywgX19MSU5FX18sIChwKSkKKworLyoKKyAqIEVtaXQgYSAnY21kX25hbWUnIGV2ZW50IHdpdGggdGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSBjb21tYW5kLgorICogVGhpcyBnaXZlcyBwb3N0LXByb2Nlc3NvcnMgYSBzaW1wbGUgZmllbGQgdG8gaWRlbnRpZnkgdGhlIGNvbW1hbmQKKyAqIHdpdGhvdXQgaGF2aW5nIHRvIHBhcnNlIHRoZSBhcmd2LgorICovCit2b2lkIHRyYWNlMl9jbWRfbmFtZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbmFtZSk7CisKKyNkZWZpbmUgdHJhY2UyX2NtZF9uYW1lKHYpIHRyYWNlMl9jbWRfbmFtZV9mbChfX0ZJTEVfXywgX19MSU5FX18sICh2KSkKKworLyoKKyAqIEVtaXQgYSAnY21kX21vZGUnIGV2ZW50IHRvIGZ1cnRoZXIgZGVzY3JpYmUgdGhlIGNvbW1hbmQgYmVpbmcgcnVuLgorICogRm9yIGV4YW1wbGUsICJjaGVja291dCIgY2FuIGNoZWNrb3V0IGEgc2luZ2xlIGZpbGUgb3IgY2FuIGNoZWNrb3V0IGEKKyAqIGRpZmZlcmVudCBicmFuY2guICBUaGlzIGdpdmVzIHBvc3QtcHJvY2Vzc29ycyBhIHNpbXBsZSBmaWVsZCB0byBjb21wYXJlCisgKiBlcXVpdmFsZW50IGNvbW1hbmRzIHdpdGhvdXQgaGF2aW5nIHRvIHBhcnNlIHRoZSBhcmd2LgorICovCit2b2lkIHRyYWNlMl9jbWRfbW9kZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSk7CisKKyNkZWZpbmUgdHJhY2UyX2NtZF9tb2RlKHN2KSB0cmFjZTJfY21kX21vZGVfZmwoX19GSUxFX18sIF9fTElORV9fLCAoc3YpKQorCisvKgorICogRW1pdHMgYW4gImFsaWFzIiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIGFsaWFzIHVzZWQgYW5kIHRoZSBhcmd1bWVudAorICogZXhwYW5zaW9uLgorICovCit2b2lkIHRyYWNlMl9jbWRfYWxpYXNfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmFsaWFzLAorCQkJIGNvbnN0IGNoYXIgKiphcmd2KTsKKworI2RlZmluZSB0cmFjZTJfY21kX2FsaWFzKGFsaWFzLCBhcmd2KSBcCisJdHJhY2UyX2NtZF9hbGlhc19mbChfX0ZJTEVfXywgX19MSU5FX18sIChhbGlhcyksIChhcmd2KSkKKworLyoKKyAqIEVtaXQgb25lIG9yIG1vcmUgJ2RlZl9wYXJhbScgZXZlbnRzIGZvciAiaW1wb3J0YW50IiBjb25maWd1cmF0aW9uCisgKiBzZXR0aW5ncy4KKyAqCisgKiBVc2UgdGhlIFRSMl9TWVNFTlZfQ0ZHX1BBUkFNIHNldHRpbmcgdG8gcmVnaXN0ZXIgYSBjb21tYS1zZXBhcmF0ZWQKKyAqIGxpc3Qgb2YgcGF0dGVybnMgY29uZmlndXJlZCBpbXBvcnRhbnQuICBGb3IgZXhhbXBsZToKKyAqICAgICBnaXQgY29uZmlnIC0tc3lzdGVtIHRyYWNlMi5jb25maWdQYXJhbXMgJ2NvcmUuKixyZW1vdGUuKi51cmwnCisgKiBvcjoKKyAqICAgICBHSVRfVFJBQ0UyX0NPTkZJR19QQVJBTVM9Y29yZS4qLHJlbW90ZS4qLnVybCIKKyAqCisgKiBOb3RlOiB0aGlzIHJvdXRpbmUgZG9lcyBhIHJlYWQtb25seSBpdGVyYXRpb24gb24gdGhlIGNvbmZpZyBkYXRhCisgKiAodXNpbmcgcmVhZF9lYXJseV9jb25maWcoKSksIHNvIGl0IG11c3Qgbm90IGJlIGNhbGxlZCB1bnRpbCBlbm91Z2gKKyAqIG9mIHRoZSBwcm9jZXNzIGVudmlyb25tZW50IGhhcyBiZWVuIGVzdGFibGlzaGVkLiAgVGhpcyBpbmNsdWRlcyB0aGUKKyAqIGxvY2F0aW9uIG9mIHRoZSBnaXQgYW5kIHdvcmt0cmVlIGRpcmVjdG9yaWVzLCBleHBhbnNpb24gb2YgYW55ICItYyIKKyAqIGFuZCAiLUMiIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhbmQgZXRjLgorICovCit2b2lkIHRyYWNlMl9jbWRfbGlzdF9jb25maWdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCisjZGVmaW5lIHRyYWNlMl9jbWRfbGlzdF9jb25maWcoKSB0cmFjZTJfY21kX2xpc3RfY29uZmlnX2ZsKF9fRklMRV9fLCBfX0xJTkVfXykKKworLyoKKyAqIEVtaXQgYSAiZGVmX3BhcmFtIiBldmVudCBmb3IgdGhlIGdpdmVuIGNvbmZpZyBrZXkvdmFsdWUgcGFpciBJRgorICogd2UgY29uc2lkZXIgdGhlIGtleSB0byBiZSAiaW1wb3J0YW50Ii4KKyAqCisgKiBVc2UgdGhpcyBmb3IgbmV3L3VwZGF0ZWQgY29uZmlnIHNldHRpbmdzIGNyZWF0ZWQvdXBkYXRlZCBhZnRlcgorICogdHJhY2UyX2NtZF9saXN0X2NvbmZpZygpIGlzIGNhbGxlZC4KKyAqLwordm9pZCB0cmFjZTJfY21kX3NldF9jb25maWdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworI2RlZmluZSB0cmFjZTJfY21kX3NldF9jb25maWcoaywgdikgXAorCXRyYWNlMl9jbWRfc2V0X2NvbmZpZ19mbChfX0ZJTEVfXywgX19MSU5FX18sIChrKSwgKHYpKQorCisvKioKKyAqIEVtaXRzIGEgImNoaWxkX3N0YXJ0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlICJjaGlsZC1pZCIsCisgKiAiY2hpbGQtYXJndiIsIGFuZCAiY2hpbGQtY2xhc3NpZmljYXRpb24iLgorICoKKyAqIEJlZm9yZSBjYWxsaW5nIG9wdGlvbmFsbHkgc2V0ICJjbWQtPnRyYWNlMl9jaGlsZF9jbGFzcyIgdG8gYSBzdHJpbmcKKyAqIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgdGhlIGNoaWxkIHByb2Nlc3MuICBGb3IgZXhhbXBsZSwgImVkaXRvciIgb3IKKyAqICJwYWdlciIuCisgKgorICogVGhpcyBmdW5jdGlvbiBhc3NpZ25zIGEgdW5pcXVlICJjaGlsZC1pZCIgdG8gYGNtZC0+dHJhY2UyX2NoaWxkX2lkYC4KKyAqIFRoaXMgZmllbGQgaXMgdXNlZCBsYXRlciBkdXJpbmcgdGhlICJjaGlsZF9leGl0IiBtZXNzYWdlIHRvIGFzc29jaWF0ZQorICogaXQgd2l0aCB0aGUgImNoaWxkX3N0YXJ0IiBtZXNzYWdlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgc3Bhd25pbmcgdGhlIGNoaWxkIHByb2Nlc3MuCisgKi8KK3ZvaWQgdHJhY2UyX2NoaWxkX3N0YXJ0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJICAgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCk7CisKKyNkZWZpbmUgdHJhY2UyX2NoaWxkX3N0YXJ0KGNtZCkgdHJhY2UyX2NoaWxkX3N0YXJ0X2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGNtZCkpCisKKy8qKgorICogRW1pdHMgYSAiY2hpbGRfZXhpdCIgbWVzc2FnZSBjb250YWluaW5nIHRoZSAiY2hpbGQtaWQiLAorICogdGhlIGNoaWxkJ3MgZWxhcHNlZCB0aW1lIGFuZCBleGl0LWNvZGUuCisgKgorICogVGhlIHJlcG9ydGVkIGVsYXBzZWQgdGltZSBpbmNsdWRlcyB0aGUgcHJvY2VzcyBjcmVhdGlvbiBvdmVyaGVhZCBhbmQKKyAqIHRpbWUgc3BlbmQgd2FpdGluZyBmb3IgaXQgdG8gZXhpdCwgc28gaXQgbWF5IGJlIHNsaWdodGx5IGxvbmdlciB0aGFuCisgKiB0aGUgdGltZSByZXBvcnRlZCBieSB0aGUgY2hpbGQgaXRzZWxmLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciByZWFwaW5nIHRoZSBjaGlsZCBwcm9jZXNzLgorICovCit2b2lkIHRyYWNlMl9jaGlsZF9leGl0X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kLAorCQkJICBpbnQgY2hpbGRfZXhpdF9jb2RlKTsKKworI2RlZmluZSB0cmFjZTJfY2hpbGRfZXhpdChjbWQsIGNvZGUpIFwKKwl0cmFjZTJfY2hpbGRfZXhpdF9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjbWQpLCAoY29kZSkpCisKKy8qKgorICogRW1pdCBhbiAnZXhlYycgZXZlbnQgcHJpb3IgdG8gY2FsbGluZyBvbmUgb2YgZXhlYygpLCBleGVjdigpLAorICogZXhlY3ZwKCksIGFuZCBldGMuICBPbiBVbml4LWRlcml2ZWQgc3lzdGVtcywgdGhpcyB3aWxsIGJlIHRoZQorICogbGFzdCBldmVudCBlbWl0dGVkIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCB1bmxlc3MgdGhlIGV4ZWMKKyAqIGZhaWxzLiAgT24gV2luZG93cywgZXhlYygpIGJlaGF2ZXMgbGlrZSAnY2hpbGRfc3RhcnQnIGFuZCBhCisgKiB3YWl0cGlkKCksIHNvIGFkZGl0aW9uYWwgZXZlbnRzIG1heSBiZSBlbWl0dGVkLgorICoKKyAqIFJldHVybnMgYSB1bmlxdWUgImV4ZWMtaWQiLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGxhdGVyCisgKiBpZiB0aGUgZXhlYygpIGZhaWxzIGFuZCBhICJleGVjLXJlc3VsdCIgbWVzc2FnZSBpcyBuZWNlc3NhcnkuCisgKi8KK2ludCB0cmFjZTJfZXhlY19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZXhlLAorCQkgICBjb25zdCBjaGFyICoqYXJndik7CisKKyNkZWZpbmUgdHJhY2UyX2V4ZWMoZXhlLCBhcmd2KSB0cmFjZTJfZXhlY19mbChfX0ZJTEVfXywgX19MSU5FX18sIChleGUpLCAoYXJndikpCisKKy8qKgorICogRW1pdCBhbiAnZXhlY19yZXN1bHQnIHdoZW4gcG9zc2libGUuICBPbiBVbml4LWRlcml2ZWQgc3lzdGVtcywKKyAqIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBleGVjKCkgcmV0dXJucyAod2hpY2ggb25seSBoYXBwZW5zCisgKiB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIHN0YXJ0aW5nIHRoZSBuZXcgcHJvY2VzcykuICBPbiBXaW5kb3dzLAorICogdGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZSB3YWl0cGlkKCkuCisgKgorICogVGhlICJleGVjX2lkIiBzaG91bGQgYmUgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdHJhY2UyX2V4ZWMoKS4KKyAqLwordm9pZCB0cmFjZTJfZXhlY19yZXN1bHRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBleGVjX2lkLCBpbnQgY29kZSk7CisKKyNkZWZpbmUgdHJhY2UyX2V4ZWNfcmVzdWx0KGlkLCBjb2RlKSBcCisJdHJhY2UyX2V4ZWNfcmVzdWx0X2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGlkKSwgKGNvZGUpKQorCisvKgorICogRW1pdCBhICd0aHJlYWRfc3RhcnQnIGV2ZW50LiAgVGhpcyBtdXN0IGJlIGNhbGxlZCBmcm9tIGluc2lkZSB0aGUKKyAqIHRocmVhZC1wcm9jIHRvIHNldCB1cCB0aGUgdHJhY2UyIFRMUyBkYXRhIGZvciB0aGUgdGhyZWFkLgorICoKKyAqIFRocmVhZCBuYW1lcyBzaG91bGQgYmUgZGVzY3JpcHRpdmUsIGxpa2UgInByZWxvYWRfaW5kZXgiLgorICogVGhyZWFkIG5hbWVzIHdpbGwgYmUgZGVjb3JhdGVkIHdpdGggYW4gaW5zdGFuY2UgbnVtYmVyIGF1dG9tYXRpY2FsbHkuCisgKi8KK3ZvaWQgdHJhY2UyX3RocmVhZF9zdGFydF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCSAgICBjb25zdCBjaGFyICp0aHJlYWRfbmFtZSk7CisKKyNkZWZpbmUgdHJhY2UyX3RocmVhZF9zdGFydCh0aHJlYWRfbmFtZSkgXAorCXRyYWNlMl90aHJlYWRfc3RhcnRfZmwoX19GSUxFX18sIF9fTElORV9fLCAodGhyZWFkX25hbWUpKQorCisvKgorICogRW1pdCBhICd0aHJlYWRfZXhpdCcgZXZlbnQuICBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gaW5zaWRlIHRoZQorICogdGhyZWFkLXByb2MgdG8gcmVwb3J0IHRocmVhZC1zcGVjaWZpYyBkYXRhIGFuZCBjbGVhbnVwIFRMUyBkYXRhCisgKiBmb3IgdGhlIHRocmVhZC4KKyAqLwordm9pZCB0cmFjZTJfdGhyZWFkX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCisjZGVmaW5lIHRyYWNlMl90aHJlYWRfZXhpdCgpIHRyYWNlMl90aHJlYWRfZXhpdF9mbChfX0ZJTEVfXywgX19MSU5FX18pCisKKy8qCisgKiBFbWl0cyBhICJkZWZfcGFyYW0iIG1lc3NhZ2UgY29udGFpbmluZyBhIGtleS92YWx1ZSBwYWlyLgorICoKKyAqIFRoaXMgbWVzc2FnZSBpcyBpbnRlbmRlZCB0byByZXBvcnQgc29tZSBnbG9iYWwgYXNwZWN0IG9mIHRoZSBjdXJyZW50CisgKiBjb21tYW5kLCBzdWNoIGFzIGEgY29uZmlndXJhdGlvbiBzZXR0aW5nIG9yIGNvbW1hbmQgbGluZSBzd2l0Y2ggdGhhdAorICogc2lnbmlmaWNhbnRseSBhZmZlY3RzIHByb2dyYW0gcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3IsIHN1Y2ggYXMKKyAqIGBjb3JlLmFiYnJldmAsIGBzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzYCwgb3IgYC0tbm8tYWhlYWQtYmVoaW5kYC4KKyAqLwordm9pZCB0cmFjZTJfZGVmX3BhcmFtX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpwYXJhbSwKKwkJCSBjb25zdCBjaGFyICp2YWx1ZSk7CisKKyNkZWZpbmUgdHJhY2UyX2RlZl9wYXJhbShwYXJhbSwgdmFsdWUpIFwKKwl0cmFjZTJfZGVmX3BhcmFtX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKHBhcmFtKSwgKHZhbHVlKSkKKworLyoKKyAqIFRlbGwgdHJhY2UyIGFib3V0IGEgbmV3bHkgaW5zdGFudGlhdGVkIHJlcG8gb2JqZWN0IGFuZCBhc3NpZ24KKyAqIGEgdHJhY2UyLXJlcG8taWQgdG8gYmUgdXNlZCBpbiBzdWJzZXF1ZW50IGFjdGl2aXR5IGV2ZW50cy4KKyAqCisgKiBFbWl0cyBhICd3b3JrdHJlZScgZXZlbnQgZm9yIHRoaXMgcmVwbyBpbnN0YW5jZS4KKyAqCisgKiBSZWdpb24gYW5kIGRhdGEgbWVzc2FnZXMgbWF5IHJlZmVyIHRvIHRoaXMgcmVwby1pZC4KKyAqCisgKiBUaGUgbWFpbi90b3AtbGV2ZWwgcmVwb3NpdG9yeSB3aWxsIGhhdmUgcmVwby1pZCB2YWx1ZSAxIChha2EgInIxIikuCisgKgorICogVGhlIHJlcG8taWQgZmllbGQgaXMgaW4gYW50aWNpcGF0aW9uIG9mIGZ1dHVyZSBpbi1wcm9jIHN1Ym1vZHVsZQorICogcmVwb3NpdG9yaWVzLgorICovCit2b2lkIHRyYWNlMl9kZWZfcmVwb19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pOworCisjZGVmaW5lIHRyYWNlMl9kZWZfcmVwbyhyZXBvKSB0cmFjZTJfZGVmX3JlcG9fZmwoX19GSUxFX18sIF9fTElORV9fLCByZXBvKQorCisvKioKKyAqIEVtaXQgYSAncmVnaW9uX2VudGVyJyBldmVudCBmb3IgPGNhdGVnb3J5Pi48bGFiZWw+IHdpdGggb3B0aW9uYWwKKyAqIHJlcG8taWQgYW5kIHByaW50ZiBtZXNzYWdlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHVzaGVzIGEgbmV3IHJlZ2lvbiBuZXN0aW5nIHN0YWNrIGxldmVsIG9uIHRoZSBjdXJyZW50CisgKiB0aHJlYWQgYW5kIHN0YXJ0cyBhIGNsb2NrIGZvciB0aGUgbmV3IHN0YWNrIGZyYW1lLgorICoKKyAqIFRoZSBgY2F0ZWdvcnlgIGZpZWxkIGlzIGFuIGFyYml0cmFyeSBjYXRlZ29yeSBuYW1lIHVzZWQgdG8gY2xhc3NpZnkKKyAqIHJlZ2lvbnMgYnkgZmVhdHVyZSBhcmVhLCBzdWNoIGFzICJzdGF0dXMiIG9yICJpbmRleCIuICBBdCB0aGlzIHRpbWUKKyAqIGl0IGlzIG9ubHkganVzdCBwcmludGVkIGFsb25nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2UuICBJdCBtYXkKKyAqIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSB0byBmaWx0ZXIgbWVzc2FnZXMuCisgKgorICogVGhlIGBsYWJlbGAgZmllbGQgaXMgYW4gYXJiaXRyYXJ5IGxhYmVsIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGFjdGl2aXR5CisgKiBiZWluZyBzdGFydGVkLCBzdWNoIGFzICJyZWFkX3JlY3Vyc2l2ZSIgb3IgImRvX3JlYWRfaW5kZXgiLgorICoKKyAqIFRoZSBgcmVwb2AgZmllbGQsIGlmIHNldCwgd2lsbCBiZSB1c2VkIHRvIGdldCB0aGUgInJlcG8taWQiLCBzbyB0aGF0CisgKiByZWN1cnNpdmUgb2VyYXRpb25zIGNhbiBiZSBhdHRyaWJ1dGVkIHRvIHRoZSBjb3JyZWN0IHJlcG9zaXRvcnkuCisgKi8KK3ZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcl9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCQkgICAgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCAuLi4pOworCisjZGVmaW5lIHRyYWNlMl9yZWdpb25fZW50ZXIoY2F0ZWdvcnksIGxhYmVsLCByZXBvKSBcCisJdHJhY2UyX3JlZ2lvbl9lbnRlcl9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIChsYWJlbCksIChyZXBvKSkKKwordm9pZCB0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJICAgICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKworI2RlZmluZSB0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zl92YShjYXRlZ29yeSwgbGFiZWwsIHJlcG8sIGZtdCwgYXApICAgIFwKKwl0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zl92YV9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIFwKKwkJCQkJIChsYWJlbCksIChyZXBvKSwgKGZtdCksIChhcCkpCisKK3ZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCSAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2lmZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCisjZGVmaW5lIHRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmKGNhdGVnb3J5LCBsYWJlbCwgcmVwbywgLi4uKSAgICAgICAgICAgICAgICAgXAorCXRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGNhdGVnb3J5KSwgKGxhYmVsKSwgXAorCQkJCSAgICAgIChyZXBvKSwgX19WQV9BUkdTX18pCisjZWxzZQorLyogY2xhbmctZm9ybWF0IG9mZiAqLworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChyZWdpb25fZW50ZXJfcHJpbnRmLCA0LCA1KSkpCit2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfcHJpbnRmKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQljb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqZm10LAorCQkJCS4uLik7CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyNlbmRpZgorCisvKioKKyAqIEVtaXQgYSAncmVnaW9uX2xlYXZlJyBldmVudCBmb3IgPGNhdGVnb3J5Pi48bGFiZWw+IHdpdGggb3B0aW9uYWwKKyAqIHJlcG8taWQgYW5kIHByaW50ZiBtZXNzYWdlLgorICoKKyAqIExlYXZlIGN1cnJlbnQgbmVzdGluZyBsZXZlbCBhbmQgcmVwb3J0IHRoZSBlbGFwc2VkIHRpbWUgc3BlbnQKKyAqIGluIHRoaXMgbmVzdGluZyBsZXZlbC4KKyAqCisgKiBUaGUgYGNhdGVnb3J5YCwgYGxhYmVsYCwgYW5kIGByZXBvYCBmaWVsZHMgYXJlIHRoZSBzYW1lIGFzCisgKiB0cmFjZTJfcmVnaW9uX2VudGVyX2ZsLiBUaGUgYGNhdGVnb3J5YCBhbmQgYGxhYmVsYCBkbyBub3QKKyAqIG5lZWQgdG8gbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgInJlZ2lvbl9lbnRlciIgbWVzc2FnZSwKKyAqIGJ1dCBpdCBtYWtlcyB0aGUgZGF0YSBzdHJlYW0gZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisgKi8KK3ZvaWQgdHJhY2UyX3JlZ2lvbl9sZWF2ZV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqY2F0ZWdvcnksCisJCQkgICAgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCAuLi4pOworCisjZGVmaW5lIHRyYWNlMl9yZWdpb25fbGVhdmUoY2F0ZWdvcnksIGxhYmVsLCByZXBvKSBcCisJdHJhY2UyX3JlZ2lvbl9sZWF2ZV9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIChsYWJlbCksIChyZXBvKSkKKwordm9pZCB0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkJICAgICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKworI2RlZmluZSB0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zl92YShjYXRlZ29yeSwgbGFiZWwsIHJlcG8sIGZtdCwgYXApICAgIFwKKwl0cmFjZTJfcmVnaW9uX2xlYXZlX3ByaW50Zl92YV9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIFwKKwkJCQkJIChsYWJlbCksIChyZXBvKSwgKGZtdCksIChhcCkpCisKK3ZvaWQgdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGZfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJICAgY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCSAgIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2lmZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCisjZGVmaW5lIHRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmKGNhdGVnb3J5LCBsYWJlbCwgcmVwbywgLi4uKSAgICAgICAgICAgICAgICAgXAorCXRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGNhdGVnb3J5KSwgKGxhYmVsKSwgXAorCQkJCSAgICAgIChyZXBvKSwgX19WQV9BUkdTX18pCisjZWxzZQorLyogY2xhbmctZm9ybWF0IG9mZiAqLworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChyZWdpb25fbGVhdmVfcHJpbnRmLCA0LCA1KSkpCit2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwKKwkJCQljb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqZm10LAorCQkJCS4uLik7CisvKiBjbGFuZy1mb3JtYXQgb24gKi8KKyNlbmRpZgorCisvKioKKyAqIEVtaXQgYSBrZXktdmFsdWUgcGFpciAnZGF0YScgZXZlbnQgb2YgdGhlIGZvcm0gPGNhdGVnb3J5Pi48a2V5PiA9IDx2YWx1ZT4uCisgKiBUaGlzIGV2ZW50IGltcGxpY2l0bHkgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhyZWFkLCBuZXN0aW5nIHJlZ2lvbiwKKyAqIGFuZCBvcHRpb25hbCByZXBvLWlkLgorICogVGhpcyBjb3VsZCBiZSB1c2VkIHRvIHByaW50IHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gYSBkaXJlY3RvcnkgZHVyaW5nCisgKiBhIG11bHRpLXRocmVhZGVkIHJlY3Vyc2l2ZSB0cmVlIHdhbGsuCisgKgorICogT24gZXZlbnQtYmFzZWQgVFJBQ0UyIHRhcmdldHMsIHRoaXMgZ2VuZXJhdGVzIGEgJ2RhdGEnIGV2ZW50IHN1aXRhYmxlCisgKiBmb3IgcG9zdC1wcm9jZXNzaW5nLiAgT24gcHJpbnRmLWJhc2VkIFRSQUNFMiB0YXJnZXRzLCB0aGlzIGlzIGNvbnZlcnRlZAorICogaW50byBhIGZpeGVkLWZvcm1hdCBwcmludGYgbWVzc2FnZS4KKyAqLwordm9pZCB0cmFjZTJfZGF0YV9zdHJpbmdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworI2RlZmluZSB0cmFjZTJfZGF0YV9zdHJpbmcoY2F0ZWdvcnksIHJlcG8sIGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICBcCisJdHJhY2UyX2RhdGFfc3RyaW5nX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGNhdGVnb3J5KSwgKHJlcG8pLCAoa2V5KSwgXAorCQkJICAgICAgKHZhbHVlKSkKKwordm9pZCB0cmFjZTJfZGF0YV9pbnRtYXhfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAorCQkJICAgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgIGludG1heF90IHZhbHVlKTsKKworI2RlZmluZSB0cmFjZTJfZGF0YV9pbnRtYXgoY2F0ZWdvcnksIHJlcG8sIGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICBcCisJdHJhY2UyX2RhdGFfaW50bWF4X2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGNhdGVnb3J5KSwgKHJlcG8pLCAoa2V5KSwgXAorCQkJICAgICAgKHZhbHVlKSkKKwordm9pZCB0cmFjZTJfZGF0YV9qc29uX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpjYXRlZ29yeSwKKwkJCSBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5LAorCQkJIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqancpOworCisjZGVmaW5lIHRyYWNlMl9kYXRhX2pzb24oY2F0ZWdvcnksIHJlcG8sIGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICBcCisJdHJhY2UyX2RhdGFfanNvbl9mbChfX0ZJTEVfXywgX19MSU5FX18sIChjYXRlZ29yeSksIChyZXBvKSwgKGtleSksIFwKKwkJCSAgICAodmFsdWUpKQorCisvKgorICogRW1pdCBhICdwcmludGYnIGV2ZW50LgorICoKKyAqIFdyaXRlIGFuIGFyYml0cmFyeSBmb3JtYXR0ZWQgbWVzc2FnZSB0byB0aGUgVFJBQ0UyIHRhcmdldHMuICBUaGVzZQorICogdGV4dCBtZXNzYWdlcyBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBodW1hbi1yZWFkYWJsZSBzdHJpbmdzIHdpdGhvdXQKKyAqIGFueSBmb3JtYXR0aW5nIGd1aWRlbGluZXMuICBQb3N0LXByb2Nlc3NvcnMgbWF5IGNob29zZSB0byBpZ25vcmUKKyAqIHRoZW0uCisgKi8KK3ZvaWQgdHJhY2UyX3ByaW50Zl92YV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LAorCQkJIHZhX2xpc3QgYXApOworCisjZGVmaW5lIHRyYWNlMl9wcmludGZfdmEoZm10LCBhcCkgXAorCXRyYWNlMl9wcmludGZfdmFfZmwoX19GSUxFX18sIF9fTElORV9fLCAoZm10KSwgKGFwKSkKKwordm9pZCB0cmFjZTJfcHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNpZmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworI2RlZmluZSB0cmFjZTJfcHJpbnRmKC4uLikgdHJhY2UyX3ByaW50Zl9mbChfX0ZJTEVfXywgX19MSU5FX18sIF9fVkFfQVJHU19fKQorI2Vsc2UKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCit2b2lkIHRyYWNlMl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOworLyogY2xhbmctZm9ybWF0IG9uICovCisjZW5kaWYKKworLyoKKyAqIE9wdGlvbmFsIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgdG8gZHVtcCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIGN1cnJlbnQgYW5kIGFueSBwYXJlbnQgcHJvY2VzcyhlcykuICBUaGlzIGlzIGludGVuZGVkIHRvIGFsbG93CisgKiBwb3N0LXByb2Nlc3NvcnMgdG8ga25vdyB3aG8gc3Bhd25lZCB0aGlzIGdpdCBpbnN0YW5jZSBhbmQgYW55dGhpbmcKKyAqIGVsc2UgdGhhdCB0aGUgcGxhdGZvcm0gbWF5IGJlIGFibGUgdG8gdGVsbCB1cyBhYm91dCB0aGUgY3VycmVudCBwcm9jZXNzLgorICovCisKK2VudW0gdHJhY2UyX3Byb2Nlc3NfaW5mb19yZWFzb24geworCVRSQUNFMl9QUk9DRVNTX0lORk9fU1RBUlRVUCwKKwlUUkFDRTJfUFJPQ0VTU19JTkZPX0VYSVQsCit9OworCisjaWYgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpCit2b2lkIHRyYWNlMl9jb2xsZWN0X3Byb2Nlc3NfaW5mbyhlbnVtIHRyYWNlMl9wcm9jZXNzX2luZm9fcmVhc29uIHJlYXNvbik7CisjZWxzZQorI2RlZmluZSB0cmFjZTJfY29sbGVjdF9wcm9jZXNzX2luZm8ocmVhc29uKSBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmIC8qIFRSQUNFMl9IICovCmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX2NmZy5jIGIvdHJhY2UyL3RyMl9jZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWE3ZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9jZmcuYwpAQCAtMCwwICsxLDg5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX2NmZy5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfc3lzZW52LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmICoqdHIyX2NmZ19wYXR0ZXJuczsKK3N0YXRpYyBpbnQgdHIyX2NmZ19jb3VudF9wYXR0ZXJuczsKK3N0YXRpYyBpbnQgdHIyX2NmZ19sb2FkZWQ7CisKKy8qCisgKiBQYXJzZSBhIHN0cmluZyBjb250YWluaW5nIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgY29uZmlnIGtleXMKKyAqIG9yIHdpbGRjYXJkIHBhdHRlcm5zIGludG8gYSBsaXN0IG9mIHN0cmJ1ZnMuCisgKi8KK3N0YXRpYyBpbnQgdHIyX2NmZ19sb2FkX3BhdHRlcm5zKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiAqKnM7CisJY29uc3QgY2hhciAqZW52dmFyOworCisJaWYgKHRyMl9jZmdfbG9hZGVkKQorCQlyZXR1cm4gdHIyX2NmZ19jb3VudF9wYXR0ZXJuczsKKwl0cjJfY2ZnX2xvYWRlZCA9IDE7CisKKwllbnZ2YXIgPSB0cjJfc3lzZW52X2dldChUUjJfU1lTRU5WX0NGR19QQVJBTSk7CisJaWYgKCFlbnZ2YXIgfHwgISplbnZ2YXIpCisJCXJldHVybiB0cjJfY2ZnX2NvdW50X3BhdHRlcm5zOworCisJdHIyX2NmZ19wYXR0ZXJucyA9IHN0cmJ1Zl9zcGxpdF9idWYoZW52dmFyLCBzdHJsZW4oZW52dmFyKSwgJywnLCAtMSk7CisJZm9yIChzID0gdHIyX2NmZ19wYXR0ZXJuczsgKnM7IHMrKykgeworCQlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAqczsKKworCQlpZiAoYnVmLT5sZW4gJiYgYnVmLT5idWZbYnVmLT5sZW4gLSAxXSA9PSAnLCcpCisJCQlzdHJidWZfc2V0bGVuKGJ1ZiwgYnVmLT5sZW4gLSAxKTsKKwkJc3RyYnVmX3RyaW1fdHJhaWxpbmdfbmV3bGluZSgqcyk7CisJCXN0cmJ1Zl90cmltKCpzKTsKKwl9CisKKwl0cjJfY2ZnX2NvdW50X3BhdHRlcm5zID0gcyAtIHRyMl9jZmdfcGF0dGVybnM7CisJcmV0dXJuIHRyMl9jZmdfY291bnRfcGF0dGVybnM7Cit9CisKK3ZvaWQgdHIyX2NmZ19mcmVlX3BhdHRlcm5zKHZvaWQpCit7CisJaWYgKHRyMl9jZmdfcGF0dGVybnMpCisJCXN0cmJ1Zl9saXN0X2ZyZWUodHIyX2NmZ19wYXR0ZXJucyk7CisJdHIyX2NmZ19jb3VudF9wYXR0ZXJucyA9IDA7CisJdHIyX2NmZ19sb2FkZWQgPSAwOworfQorCitzdHJ1Y3QgdHIyX2NmZ19kYXRhIHsKKwljb25zdCBjaGFyICpmaWxlOworCWludCBsaW5lOworfTsKKworLyoKKyAqIFNlZSBpZiB0aGUgZ2l2ZW4gY29uZmlnIGtleSBtYXRjaGVzIGFueSBvZiBvdXIgcGF0dGVybnMgb2YgaW50ZXJlc3QuCisgKi8KK3N0YXRpYyBpbnQgdHIyX2NmZ19jYihjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkKQoreworCXN0cnVjdCBzdHJidWYgKipzOworCXN0cnVjdCB0cjJfY2ZnX2RhdGEgKmRhdGEgPSAoc3RydWN0IHRyMl9jZmdfZGF0YSAqKWQ7CisKKwlmb3IgKHMgPSB0cjJfY2ZnX3BhdHRlcm5zOyAqczsgcysrKSB7CisJCXN0cnVjdCBzdHJidWYgKmJ1ZiA9ICpzOworCQlpbnQgd20gPSB3aWxkbWF0Y2goYnVmLT5idWYsIGtleSwgV01fQ0FTRUZPTEQpOworCQlpZiAod20gPT0gV01fTUFUQ0gpIHsKKwkJCXRyYWNlMl9kZWZfcGFyYW1fZmwoZGF0YS0+ZmlsZSwgZGF0YS0+bGluZSwga2V5LCB2YWx1ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHRyMl9jZmdfbGlzdF9jb25maWdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisJc3RydWN0IHRyMl9jZmdfZGF0YSBkYXRhID0geyBmaWxlLCBsaW5lIH07CisKKwlpZiAodHIyX2NmZ19sb2FkX3BhdHRlcm5zKCkgPiAwKQorCQlyZWFkX2Vhcmx5X2NvbmZpZyh0cjJfY2ZnX2NiLCAmZGF0YSk7Cit9CisKK3ZvaWQgdHIyX2NmZ19zZXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCB0cjJfY2ZnX2RhdGEgZGF0YSA9IHsgZmlsZSwgbGluZSB9OworCisJaWYgKHRyMl9jZmdfbG9hZF9wYXR0ZXJucygpID4gMCkKKwkJdHIyX2NmZ19jYihrZXksIHZhbHVlLCAmZGF0YSk7Cit9CmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX2NmZy5oIGIvdHJhY2UyL3RyMl9jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWM5OGY2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9jZmcuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIFRSMl9DRkdfSAorI2RlZmluZSBUUjJfQ0ZHX0gKKworLyoKKyAqIEl0ZXJhdGUgb3ZlciBhbGwgY29uZmlnIHNldHRpbmdzIGFuZCBlbWl0ICdkZWZfcGFyYW0nIGV2ZW50cyBmb3IgdGhlCisgKiAiaW50ZXJlc3RpbmciIG9uZXMgdG8gVFJBQ0UyLgorICovCit2b2lkIHRyMl9jZmdfbGlzdF9jb25maWdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCisvKgorICogRW1pdCBhICJkZWZfcGFyYW0iIGV2ZW50IGZvciB0aGUgZ2l2ZW4ga2V5L3ZhbHVlIHBhaXIgSUYgd2UgY29uc2lkZXIKKyAqIHRoZSBrZXkgdG8gYmUgImludGVyZXN0aW5nIi4KKyAqLwordm9pZCB0cjJfY2ZnX3NldF9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqa2V5LAorCQkgICAgY29uc3QgY2hhciAqdmFsdWUpOworCit2b2lkIHRyMl9jZmdfZnJlZV9wYXR0ZXJucyh2b2lkKTsKKworI2VuZGlmIC8qIFRSMl9DRkdfSCAqLwpkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl9jbWRfbmFtZS5jIGIvdHJhY2UyL3RyMl9jbWRfbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzEzMjAKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZTIvdHIyX2NtZF9uYW1lLmMKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9jbWRfbmFtZS5oIgorCisjZGVmaW5lIFRSMl9FTlZWQVJfUEFSRU5UX05BTUUgIkdJVF9UUkFDRTJfUEFSRU5UX05BTUUiCisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHRyMmNtZG5hbWVfaGllcmFyY2h5ID0gU1RSQlVGX0lOSVQ7CisKK3ZvaWQgdHIyX2NtZF9uYW1lX2FwcGVuZF9oaWVyYXJjaHkoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICpwYXJlbnRfbmFtZSA9IGdldGVudihUUjJfRU5WVkFSX1BBUkVOVF9OQU1FKTsKKworCXN0cmJ1Zl9yZXNldCgmdHIyY21kbmFtZV9oaWVyYXJjaHkpOworCWlmIChwYXJlbnRfbmFtZSAmJiAqcGFyZW50X25hbWUpIHsKKwkJc3RyYnVmX2FkZHN0cigmdHIyY21kbmFtZV9oaWVyYXJjaHksIHBhcmVudF9uYW1lKTsKKwkJc3RyYnVmX2FkZGNoKCZ0cjJjbWRuYW1lX2hpZXJhcmNoeSwgJy8nKTsKKwl9CisJc3RyYnVmX2FkZHN0cigmdHIyY21kbmFtZV9oaWVyYXJjaHksIG5hbWUpOworCisJc2V0ZW52KFRSMl9FTlZWQVJfUEFSRU5UX05BTUUsIHRyMmNtZG5hbWVfaGllcmFyY2h5LmJ1ZiwgMSk7Cit9CisKK2NvbnN0IGNoYXIgKnRyMl9jbWRfbmFtZV9nZXRfaGllcmFyY2h5KHZvaWQpCit7CisJcmV0dXJuIHRyMmNtZG5hbWVfaGllcmFyY2h5LmJ1ZjsKK30KKwordm9pZCB0cjJfY21kX25hbWVfcmVsZWFzZSh2b2lkKQoreworCXN0cmJ1Zl9yZWxlYXNlKCZ0cjJjbWRuYW1lX2hpZXJhcmNoeSk7Cit9CmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX2NtZF9uYW1lLmggYi90cmFjZTIvdHIyX2NtZF9uYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3MGI2NwotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfY21kX25hbWUuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIFRSMl9DTURfTkFNRV9ICisjZGVmaW5lIFRSMl9DTURfTkFNRV9ICisKKy8qCisgKiBBcHBlbmQgdGhlIGN1cnJlbnQgY29tbWFuZCBuYW1lIHRvIHRoZSBsaXN0IGJlaW5nIG1haW50YWluZWQKKyAqIGluIHRoZSBlbnZpcm9ubWVudC4KKyAqCisgKiBUaGUgaGllcmFyY2h5IGZvciBhIHRvcC1sZXZlbCBnaXQgY29tbWFuZCBpcyBqdXN0IHRoZSBjdXJyZW50CisgKiBjb21tYW5kIG5hbWUuICBGb3IgYSBjaGlsZCBnaXQgcHJvY2VzcywgdGhlIGhpZXJhcmNoeSBpbmNsdWRlcyB0aGUKKyAqIG5hbWVzIG9mIHRoZSBwYXJlbnQgcHJvY2Vzc2VzLgorICoKKyAqIFRoZSBoaWVyYXJjaHkgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2lsbCBiZSBleHBvcnRlZCB0byB0aGUKKyAqIGVudmlyb25tZW50IGFuZCBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLgorICovCit2b2lkIHRyMl9jbWRfbmFtZV9hcHBlbmRfaGllcmFyY2h5KGNvbnN0IGNoYXIgKm5hbWUpOworCisvKgorICogR2V0IHRoZSBjb21tYW5kIG5hbWUgaGllcmFyY2h5IGZvciB0aGUgY3VycmVudCBwcm9jZXNzLgorICovCitjb25zdCBjaGFyICp0cjJfY21kX25hbWVfZ2V0X2hpZXJhcmNoeSh2b2lkKTsKKwordm9pZCB0cjJfY21kX25hbWVfcmVsZWFzZSh2b2lkKTsKKworI2VuZGlmIC8qIFRSMl9DTURfTkFNRV9IICovCmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX2RzdC5jIGIvdHJhY2UyL3RyMl9kc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA1MmEwCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9kc3QuYwpAQCAtMCwwICsxLDM5MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9kc3QuaCIKKyNpbmNsdWRlICJ0cmFjZTIvdHIyX3NpZC5oIgorI2luY2x1ZGUgInRyYWNlMi90cjJfc3lzZW52LmgiCisKKy8qCisgKiBIb3cgbWFueSBhdHRlbXB0cyB3ZSB3aWxsIG1ha2UgYXQgY3JlYXRpbmcgYW4gYXV0b21hdGljYWxseS1uYW1lZCB0cmFjZSBmaWxlLgorICovCisjZGVmaW5lIE1BWF9BVVRPX0FUVEVNUFRTIDEwCisKKy8qCisgKiBTZW50aW5lbCBmaWxlIHVzZWQgdG8gZGV0ZWN0IHdoZW4gd2Ugc2hvdWxkIGRpc2NhcmQgbmV3IHRyYWNlcyB0byBhdm9pZAorICogd3JpdGluZyB0b28gbWFueSB0cmFjZSBmaWxlcyB0byBhIGRpcmVjdG9yeS4KKyAqLworI2RlZmluZSBESVNDQVJEX1NFTlRJTkVMX05BTUUgImdpdC10cmFjZTItZGlzY2FyZCIKKworLyoKKyAqIFdoZW4gc2V0IHRvIHplcm8sIGRpc2FibGVzIGRpcmVjdG9yeSBmaWxlIGNvdW50IGNoZWNrcy4gT3RoZXJ3aXNlLCBjb250cm9scworICogaG93IG1hbnkgZmlsZXMgd2UgY2FuIHdyaXRlIHRvIGEgZGlyZWN0b3J5IGJlZm9yZSBlbnRlcmluZyBkaXNjYXJkIG1vZGUuCisgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgVFIyX1NZU0VOVl9NQVhfRklMRVMgc2V0dGluZy4KKyAqLworc3RhdGljIGludCB0cjJlbnZfbWF4X2ZpbGVzID0gMDsKKworc3RhdGljIGludCB0cjJfZHN0X3dhbnRfd2FybmluZyh2b2lkKQoreworCXN0YXRpYyBpbnQgdHIyZW52X2RzdF9kZWJ1ZyA9IC0xOworCisJaWYgKHRyMmVudl9kc3RfZGVidWcgPT0gLTEpIHsKKwkJY29uc3QgY2hhciAqZW52X3ZhbHVlID0gdHIyX3N5c2Vudl9nZXQoVFIyX1NZU0VOVl9EU1RfREVCVUcpOworCQlpZiAoIWVudl92YWx1ZSB8fCAhKmVudl92YWx1ZSkKKwkJCXRyMmVudl9kc3RfZGVidWcgPSAwOworCQllbHNlCisJCQl0cjJlbnZfZHN0X2RlYnVnID0gYXRvaShlbnZfdmFsdWUpID4gMDsKKwl9CisKKwlyZXR1cm4gdHIyZW52X2RzdF9kZWJ1ZzsKK30KKwordm9pZCB0cjJfZHN0X3RyYWNlX2Rpc2FibGUoc3RydWN0IHRyMl9kc3QgKmRzdCkKK3sKKwlpZiAoZHN0LT5uZWVkX2Nsb3NlKQorCQljbG9zZShkc3QtPmZkKTsKKwlkc3QtPmZkID0gMDsKKwlkc3QtPmluaXRpYWxpemVkID0gMTsKKwlkc3QtPm5lZWRfY2xvc2UgPSAwOworfQorCisvKgorICogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBvdmVybG9hZGluZyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB3aXRoIHRvbyBtYW55CisgKiBmaWxlcy4gRmlyc3QgZ2V0IHRoZSB0aHJlc2hvbGQgKGlmIHByZXNlbnQpIGZyb20gdGhlIGNvbmZpZyBvciBlbnZ2YXIuIElmCisgKiBpdCdzIHplcm8gb3IgdW5zZXQsIGRpc2FibGUgdGhpcyBjaGVjay4gTmV4dCBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGEKKyAqIHNlbnRpbmVsIGZpbGUsIHRoZW4gY2hlY2sgZmlsZSBjb3VudC4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdHJhY2luZyBzaG91bGQgcHJvY2VlZCBhcyBub3JtYWwuIFJldHVybnMgMSBpZiB0aGUgc2VudGluZWwgZmlsZQorICogYWxyZWFkeSBleGlzdHMsIHdoaWNoIG1lYW5zIHRyYWNpbmcgc2hvdWxkIGJlIGRpc2FibGVkLiBSZXR1cm5zIC0xIGlmIHRoZXJlCisgKiBhcmUgdG9vIG1hbnkgZmlsZXMgYnV0IHRoZXJlIHdhcyBubyBzZW50aW5lbCBmaWxlLCB3aGljaCBtZWFucyB3ZSBoYXZlCisgKiBjcmVhdGVkIGFuZCBzaG91bGQgd3JpdGUgdHJhY2VzIHRvIHRoZSBzZW50aW5lbCBmaWxlLgorICoKKyAqIFdlIGV4cGVjdCB0aGF0IHNvbWUgdHJhY2UgcHJvY2Vzc2luZyBzeXN0ZW0gaXMgZ3JhZHVhbGx5IGNvbGxlY3RpbmcgZmlsZXMKKyAqIGZyb20gdGhlIHRhcmdldCBkaXJlY3Rvcnk7IGFmdGVyIGl0IHJlbW92ZXMgdGhlIHNlbnRpbmVsIGZpbGUgd2UnbGwgc3RhcnQKKyAqIHdyaXRpbmcgdHJhY2VzIGFnYWluLgorICovCitzdGF0aWMgaW50IHRyMl9kc3RfdG9vX21hbnlfZmlsZXMoc3RydWN0IHRyMl9kc3QgKmRzdCwgY29uc3QgY2hhciAqdGd0X3ByZWZpeCkKK3sKKwlpbnQgZmlsZV9jb3VudCA9IDAsIG1heF9maWxlcyA9IDAsIHJldCA9IDA7CisJY29uc3QgY2hhciAqbWF4X2ZpbGVzX3ZhcjsKKwlESVIgKmRpcnA7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQsIHNlbnRpbmVsX3BhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJLyogR2V0IHRoZSBjb25maWcgb3IgZW52dmFyIGFuZCBkZWNpZGUgaWYgd2Ugc2hvdWxkIGNvbnRpbnVlIHRoaXMgY2hlY2sgKi8KKwltYXhfZmlsZXNfdmFyID0gdHIyX3N5c2Vudl9nZXQoVFIyX1NZU0VOVl9NQVhfRklMRVMpOworCWlmIChtYXhfZmlsZXNfdmFyICYmICptYXhfZmlsZXNfdmFyICYmICgobWF4X2ZpbGVzID0gYXRvaShtYXhfZmlsZXNfdmFyKSkgPj0gMCkpCisJCXRyMmVudl9tYXhfZmlsZXMgPSBtYXhfZmlsZXM7CisKKwlpZiAoIXRyMmVudl9tYXhfZmlsZXMpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHRndF9wcmVmaXgpOworCWlmICghaXNfZGlyX3NlcChwYXRoLmJ1ZltwYXRoLmxlbiAtIDFdKSkgeworCQlzdHJidWZfYWRkY2goJnBhdGgsICcvJyk7CisJfQorCisJLyogY2hlY2sgc2VudGluZWwgKi8KKwlzdHJidWZfYWRkYnVmKCZzZW50aW5lbF9wYXRoLCAmcGF0aCk7CisJc3RyYnVmX2FkZHN0cigmc2VudGluZWxfcGF0aCwgRElTQ0FSRF9TRU5USU5FTF9OQU1FKTsKKwlpZiAoIXN0YXQoc2VudGluZWxfcGF0aC5idWYsICZzdGF0YnVmKSkgeworCQlyZXQgPSAxOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogY2hlY2sgZmlsZSBjb3VudCAqLworCWRpcnAgPSBvcGVuZGlyKHBhdGguYnVmKTsKKwl3aGlsZSAoZmlsZV9jb3VudCA8IHRyMmVudl9tYXhfZmlsZXMgJiYgZGlycCAmJiByZWFkZGlyKGRpcnApKQorCQlmaWxlX2NvdW50Kys7CisJaWYgKGRpcnApCisJCWNsb3NlZGlyKGRpcnApOworCisJaWYgKGZpbGVfY291bnQgPj0gdHIyZW52X21heF9maWxlcykgeworCQlkc3QtPnRvb19tYW55X2ZpbGVzID0gMTsKKwkJZHN0LT5mZCA9IG9wZW4oc2VudGluZWxfcGF0aC5idWYsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJCXJldCA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmc2VudGluZWxfcGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cjJfZHN0X3RyeV9hdXRvX3BhdGgoc3RydWN0IHRyMl9kc3QgKmRzdCwgY29uc3QgY2hhciAqdGd0X3ByZWZpeCkKK3sKKwlpbnQgdG9vX21hbnlfZmlsZXM7CisJY29uc3QgY2hhciAqbGFzdF9zbGFzaCwgKnNpZCA9IHRyMl9zaWRfZ2V0KCk7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IGJhc2VfcGF0aF9sZW47CisJdW5zaWduZWQgYXR0ZW1wdF9jb3VudDsKKworCWxhc3Rfc2xhc2ggPSBzdHJyY2hyKHNpZCwgJy8nKTsKKwlpZiAobGFzdF9zbGFzaCkKKwkJc2lkID0gbGFzdF9zbGFzaCArIDE7CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCB0Z3RfcHJlZml4KTsKKwlpZiAoIWlzX2Rpcl9zZXAocGF0aC5idWZbcGF0aC5sZW4gLSAxXSkpCisJCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBzaWQpOworCWJhc2VfcGF0aF9sZW4gPSBwYXRoLmxlbjsKKworCXRvb19tYW55X2ZpbGVzID0gdHIyX2RzdF90b29fbWFueV9maWxlcyhkc3QsIHRndF9wcmVmaXgpOworCWlmICghdG9vX21hbnlfZmlsZXMpIHsKKwkJZm9yIChhdHRlbXB0X2NvdW50ID0gMDsgYXR0ZW1wdF9jb3VudCA8IE1BWF9BVVRPX0FUVEVNUFRTOyBhdHRlbXB0X2NvdW50KyspIHsKKwkJCWlmIChhdHRlbXB0X2NvdW50ID4gMCkgeworCQkJCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGJhc2VfcGF0aF9sZW4pOworCQkJCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiLiVkIiwgYXR0ZW1wdF9jb3VudCk7CisJCQl9CisKKwkJCWRzdC0+ZmQgPSBvcGVuKHBhdGguYnVmLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCQkJaWYgKGRzdC0+ZmQgIT0gLTEpCisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKHRvb19tYW55X2ZpbGVzID09IDEpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCQlpZiAodHIyX2RzdF93YW50X3dhcm5pbmcoKSkKKwkJCXdhcm5pbmcoInRyYWNlMjogbm90IG9wZW5pbmcgJXMgdHJhY2UgZmlsZSBkdWUgdG8gdG9vICIKKwkJCQkibWFueSBmaWxlcyBpbiB0YXJnZXQgZGlyZWN0b3J5ICVzIiwKKwkJCQl0cjJfc3lzZW52X2Rpc3BsYXlfbmFtZShkc3QtPnN5c2Vudl92YXIpLAorCQkJCXRndF9wcmVmaXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZHN0LT5mZCA9PSAtMSkgeworCQlpZiAodHIyX2RzdF93YW50X3dhcm5pbmcoKSkKKwkJCXdhcm5pbmcoInRyYWNlMjogY291bGQgbm90IG9wZW4gJyUuKnMnIGZvciAnJXMnIHRyYWNpbmc6ICVzIiwKKwkJCQkoaW50KSBiYXNlX3BhdGhfbGVuLCBwYXRoLmJ1ZiwKKwkJCQl0cjJfc3lzZW52X2Rpc3BsYXlfbmFtZShkc3QtPnN5c2Vudl92YXIpLAorCQkJCXN0cmVycm9yKGVycm5vKSk7CisKKwkJdHIyX2RzdF90cmFjZV9kaXNhYmxlKGRzdCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCisJZHN0LT5uZWVkX2Nsb3NlID0gMTsKKwlkc3QtPmluaXRpYWxpemVkID0gMTsKKworCXJldHVybiBkc3QtPmZkOworfQorCitzdGF0aWMgaW50IHRyMl9kc3RfdHJ5X3BhdGgoc3RydWN0IHRyMl9kc3QgKmRzdCwgY29uc3QgY2hhciAqdGd0X3ZhbHVlKQoreworCWludCBmZCA9IG9wZW4odGd0X3ZhbHVlLCBPX1dST05MWSB8IE9fQVBQRU5EIHwgT19DUkVBVCwgMDY2Nik7CisJaWYgKGZkID09IC0xKSB7CisJCWlmICh0cjJfZHN0X3dhbnRfd2FybmluZygpKQorCQkJd2FybmluZygidHJhY2UyOiBjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciAnJXMnIHRyYWNpbmc6ICVzIiwKKwkJCQl0Z3RfdmFsdWUsCisJCQkJdHIyX3N5c2Vudl9kaXNwbGF5X25hbWUoZHN0LT5zeXNlbnZfdmFyKSwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCisJCXRyMl9kc3RfdHJhY2VfZGlzYWJsZShkc3QpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkc3QtPmZkID0gZmQ7CisJZHN0LT5uZWVkX2Nsb3NlID0gMTsKKwlkc3QtPmluaXRpYWxpemVkID0gMTsKKworCXJldHVybiBkc3QtPmZkOworfQorCisjaWZuZGVmIE5PX1VOSVhfU09DS0VUUworI2RlZmluZSBQUkVGSVhfQUZfVU5JWCAiYWZfdW5peDoiCisjZGVmaW5lIFBSRUZJWF9BRl9VTklYX1NUUkVBTSAiYWZfdW5peDpzdHJlYW06IgorI2RlZmluZSBQUkVGSVhfQUZfVU5JWF9ER1JBTSAiYWZfdW5peDpkZ3JhbToiCisKK3N0YXRpYyBpbnQgdHIyX2RzdF90cnlfdWRzX2Nvbm5lY3QoY29uc3QgY2hhciAqcGF0aCwgaW50IHNvY2tfdHlwZSwgaW50ICpvdXRfZmQpCit7CisJaW50IGZkOworCXN0cnVjdCBzb2NrYWRkcl91biBzYTsKKworCWZkID0gc29ja2V0KEFGX1VOSVgsIHNvY2tfdHlwZSwgMCk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gZXJybm87CisKKwlzYS5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwlzdHJsY3B5KHNhLnN1bl9wYXRoLCBwYXRoLCBzaXplb2Yoc2Euc3VuX3BhdGgpKTsKKworCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNhLCBzaXplb2Yoc2EpKSA9PSAtMSkgeworCQlpbnQgZSA9IGVycm5vOworCQljbG9zZShmZCk7CisJCXJldHVybiBlOworCX0KKworCSpvdXRfZmQgPSBmZDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBUUjJfRFNUX1VEU19UUllfU1RSRUFNICgxIDw8IDApCisjZGVmaW5lIFRSMl9EU1RfVURTX1RSWV9ER1JBTSAgKDEgPDwgMSkKKworc3RhdGljIGludCB0cjJfZHN0X3RyeV91bml4X2RvbWFpbl9zb2NrZXQoc3RydWN0IHRyMl9kc3QgKmRzdCwKKwkJCQkJICBjb25zdCBjaGFyICp0Z3RfdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHVkc190cnkgPSAwOworCWludCBmZDsKKwlpbnQgZTsKKwljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKKworCS8qCisJICogQWxsb3cgImFmX3VuaXg6Wzx0eXBlPjpdPGFic29sdXRlX3BhdGg+IgorCSAqCisJICogVHJhY2UyIGFsd2F5cyB3cml0ZXMgY29tcGxldGUgaW5kaXZpZHVhbCBtZXNzYWdlcyAod2l0aG91dAorCSAqIGNodW5raW5nKSwgc28gd2UgY2FuIHRhbGsgdG8gZWl0aGVyIERHUkFNIG9yIFNUUkVBTSB0eXBlIHNvY2tldHMuCisJICoKKwkgKiBBbGxvdyB0aGUgdXNlciB0byBleHBsaWNpdGx5IHJlcXVlc3QgdGhlIHNvY2tldCB0eXBlLgorCSAqCisJICogSWYgdGhleSBvbWl0IHRoZSBzb2NrZXQgdHlwZSwgdHJ5IG9uZSBhbmQgdGhlbiB0aGUgb3RoZXIuCisJICovCisKKwlpZiAoc2tpcF9wcmVmaXgodGd0X3ZhbHVlLCBQUkVGSVhfQUZfVU5JWF9TVFJFQU0sICZwYXRoKSkKKwkJdWRzX3RyeSB8PSBUUjJfRFNUX1VEU19UUllfU1RSRUFNOworCisJZWxzZSBpZiAoc2tpcF9wcmVmaXgodGd0X3ZhbHVlLCBQUkVGSVhfQUZfVU5JWF9ER1JBTSwgJnBhdGgpKQorCQl1ZHNfdHJ5IHw9IFRSMl9EU1RfVURTX1RSWV9ER1JBTTsKKworCWVsc2UgaWYgKHNraXBfcHJlZml4KHRndF92YWx1ZSwgUFJFRklYX0FGX1VOSVgsICZwYXRoKSkKKwkJdWRzX3RyeSB8PSBUUjJfRFNUX1VEU19UUllfU1RSRUFNIHwgVFIyX0RTVF9VRFNfVFJZX0RHUkFNOworCisJaWYgKCFwYXRoIHx8ICEqcGF0aCkgeworCQlpZiAodHIyX2RzdF93YW50X3dhcm5pbmcoKSkKKwkJCXdhcm5pbmcoInRyYWNlMjogaW52YWxpZCBBRl9VTklYIHZhbHVlICclcycgZm9yICclcycgdHJhY2luZyIsCisJCQkJdGd0X3ZhbHVlLAorCQkJCXRyMl9zeXNlbnZfZGlzcGxheV9uYW1lKGRzdC0+c3lzZW52X3ZhcikpOworCisJCXRyMl9kc3RfdHJhY2VfZGlzYWJsZShkc3QpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgocGF0aCkgfHwKKwkgICAgc3RybGVuKHBhdGgpID49IHNpemVvZigoKHN0cnVjdCBzb2NrYWRkcl91biAqKTApLT5zdW5fcGF0aCkpIHsKKwkJaWYgKHRyMl9kc3Rfd2FudF93YXJuaW5nKCkpCisJCQl3YXJuaW5nKCJ0cmFjZTI6IGludmFsaWQgQUZfVU5JWCBwYXRoICclcycgZm9yICclcycgdHJhY2luZyIsCisJCQkJcGF0aCwgdHIyX3N5c2Vudl9kaXNwbGF5X25hbWUoZHN0LT5zeXNlbnZfdmFyKSk7CisKKwkJdHIyX2RzdF90cmFjZV9kaXNhYmxlKGRzdCk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1ZHNfdHJ5ICYgVFIyX0RTVF9VRFNfVFJZX1NUUkVBTSkgeworCQllID0gdHIyX2RzdF90cnlfdWRzX2Nvbm5lY3QocGF0aCwgU09DS19TVFJFQU0sICZmZCk7CisJCWlmICghZSkKKwkJCWdvdG8gY29ubmVjdGVkOworCQlpZiAoZSAhPSBFUFJPVE9UWVBFKQorCQkJZ290byBlcnJvcjsKKwl9CisJaWYgKHVkc190cnkgJiBUUjJfRFNUX1VEU19UUllfREdSQU0pIHsKKwkJZSA9IHRyMl9kc3RfdHJ5X3Vkc19jb25uZWN0KHBhdGgsIFNPQ0tfREdSQU0sICZmZCk7CisJCWlmICghZSkKKwkJCWdvdG8gY29ubmVjdGVkOworCX0KKworZXJyb3I6CisJaWYgKHRyMl9kc3Rfd2FudF93YXJuaW5nKCkpCisJCXdhcm5pbmcoInRyYWNlMjogY291bGQgbm90IGNvbm5lY3QgdG8gc29ja2V0ICclcycgZm9yICclcycgdHJhY2luZzogJXMiLAorCQkJcGF0aCwgdHIyX3N5c2Vudl9kaXNwbGF5X25hbWUoZHN0LT5zeXNlbnZfdmFyKSwKKwkJCXN0cmVycm9yKGUpKTsKKworCXRyMl9kc3RfdHJhY2VfZGlzYWJsZShkc3QpOworCXJldHVybiAwOworCitjb25uZWN0ZWQ6CisJZHN0LT5mZCA9IGZkOworCWRzdC0+bmVlZF9jbG9zZSA9IDE7CisJZHN0LT5pbml0aWFsaXplZCA9IDE7CisKKwlyZXR1cm4gZHN0LT5mZDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0cjJfZHN0X21hbGZvcm1lZF93YXJuaW5nKHN0cnVjdCB0cjJfZHN0ICpkc3QsCisJCQkJICAgICAgY29uc3QgY2hhciAqdGd0X3ZhbHVlKQoreworCXdhcm5pbmcoInRyYWNlMjogdW5rbm93biB2YWx1ZSBmb3IgJyVzJzogJyVzJyIsCisJCXRyMl9zeXNlbnZfZGlzcGxheV9uYW1lKGRzdC0+c3lzZW52X3ZhciksIHRndF92YWx1ZSk7Cit9CisKK2ludCB0cjJfZHN0X2dldF90cmFjZV9mZChzdHJ1Y3QgdHIyX2RzdCAqZHN0KQoreworCWNvbnN0IGNoYXIgKnRndF92YWx1ZTsKKworCS8qIGRvbid0IG9wZW4gdHdpY2UgKi8KKwlpZiAoZHN0LT5pbml0aWFsaXplZCkKKwkJcmV0dXJuIGRzdC0+ZmQ7CisKKwlkc3QtPmluaXRpYWxpemVkID0gMTsKKworCXRndF92YWx1ZSA9IHRyMl9zeXNlbnZfZ2V0KGRzdC0+c3lzZW52X3Zhcik7CisKKwlpZiAoIXRndF92YWx1ZSB8fCAhc3RyY21wKHRndF92YWx1ZSwgIiIpIHx8ICFzdHJjbXAodGd0X3ZhbHVlLCAiMCIpIHx8CisJICAgICFzdHJjYXNlY21wKHRndF92YWx1ZSwgImZhbHNlIikpIHsKKwkJZHN0LT5mZCA9IDA7CisJCXJldHVybiBkc3QtPmZkOworCX0KKworCWlmICghc3RyY21wKHRndF92YWx1ZSwgIjEiKSB8fCAhc3RyY2FzZWNtcCh0Z3RfdmFsdWUsICJ0cnVlIikpIHsKKwkJZHN0LT5mZCA9IFNUREVSUl9GSUxFTk87CisJCXJldHVybiBkc3QtPmZkOworCX0KKworCWlmIChzdHJsZW4odGd0X3ZhbHVlKSA9PSAxICYmIGlzZGlnaXQoKnRndF92YWx1ZSkpIHsKKwkJZHN0LT5mZCA9IGF0b2kodGd0X3ZhbHVlKTsKKwkJcmV0dXJuIGRzdC0+ZmQ7CisJfQorCisJaWYgKGlzX2Fic29sdXRlX3BhdGgodGd0X3ZhbHVlKSkgeworCQlpZiAoaXNfZGlyZWN0b3J5KHRndF92YWx1ZSkpCisJCQlyZXR1cm4gdHIyX2RzdF90cnlfYXV0b19wYXRoKGRzdCwgdGd0X3ZhbHVlKTsKKwkJZWxzZQorCQkJcmV0dXJuIHRyMl9kc3RfdHJ5X3BhdGgoZHN0LCB0Z3RfdmFsdWUpOworCX0KKworI2lmbmRlZiBOT19VTklYX1NPQ0tFVFMKKwlpZiAoc3RhcnRzX3dpdGgodGd0X3ZhbHVlLCBQUkVGSVhfQUZfVU5JWCkpCisJCXJldHVybiB0cjJfZHN0X3RyeV91bml4X2RvbWFpbl9zb2NrZXQoZHN0LCB0Z3RfdmFsdWUpOworI2VuZGlmCisKKwkvKiBBbHdheXMgd2FybiBhYm91dCBtYWxmb3JtZWQgdmFsdWVzLiAqLworCXRyMl9kc3RfbWFsZm9ybWVkX3dhcm5pbmcoZHN0LCB0Z3RfdmFsdWUpOworCXRyMl9kc3RfdHJhY2VfZGlzYWJsZShkc3QpOworCXJldHVybiAwOworfQorCitpbnQgdHIyX2RzdF90cmFjZV93YW50KHN0cnVjdCB0cjJfZHN0ICpkc3QpCit7CisJcmV0dXJuICEhdHIyX2RzdF9nZXRfdHJhY2VfZmQoZHN0KTsKK30KKwordm9pZCB0cjJfZHN0X3dyaXRlX2xpbmUoc3RydWN0IHRyMl9kc3QgKmRzdCwgc3RydWN0IHN0cmJ1ZiAqYnVmX2xpbmUpCit7CisJaW50IGZkID0gdHIyX2RzdF9nZXRfdHJhY2VfZmQoZHN0KTsKKworCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKGJ1Zl9saW5lKTsgLyogZW5zdXJlIGZpbmFsIE5MIG9uIGJ1ZmZlciAqLworCisJLyoKKwkgKiBXZSBkbyBub3QgdXNlIHdyaXRlX2luX2Z1bGwoKSBiZWNhdXNlIHdlIGRvIG5vdCB3YW50CisJICogYSBzaG9ydC13cml0ZSB0byB0cnkgYWdhaW4uICBXZSBhcmUgdXNpbmcgT19BUFBFTkQgbW9kZQorCSAqIGZpbGVzIGFuZCB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGF0b21pYyBzZWVrK3dyaXRlLiBJZgorCSAqIGFub3RoZXIgdGhyZWFkIG9yIGdpdCBwcm9jZXNzIGlzIGNvbmN1cnJlbnRseSB3cml0aW5nIHRvCisJICogdGhpcyBmZCBvciBmaWxlLCBvdXIgcmVtYWluZGVyLXdyaXRlIG1heSBub3QgYmUgY29udGlndW91cworCSAqIHdpdGggb3VyIGluaXRpYWwgd3JpdGUgb2YgdGhpcyBtZXNzYWdlLiAgQW5kIHRoYXQgd2lsbAorCSAqIGNvbmZ1c2UgcmVhZGVycy4gIFNvIGp1c3QgZG9uJ3QgYm90aGVyLgorCSAqCisJICogSXQgaXMgYXNzdW1lZCB0aGF0IFRSQUNFMiBtZXNzYWdlcyBhcmUgc2hvcnQgZW5vdWdoIHRoYXQKKwkgKiB0aGUgc3lzdGVtIGNhbiB3cml0ZSB0aGVtIGluIDEgYXR0ZW1wdCBhbmQgd2Ugd29uJ3Qgc2VlCisJICogYSBzaG9ydC13cml0ZS4KKwkgKgorCSAqIElmIHdlIGdldCBhbiBJTyBlcnJvciwganVzdCBjbG9zZSB0aGUgdHJhY2UgZHN0LgorCSAqLworCWlmICh3cml0ZShmZCwgYnVmX2xpbmUtPmJ1ZiwgYnVmX2xpbmUtPmxlbikgPj0gMCkKKwkJcmV0dXJuOworCisJaWYgKHRyMl9kc3Rfd2FudF93YXJuaW5nKCkpCisJCXdhcm5pbmcoInVuYWJsZSB0byB3cml0ZSB0cmFjZSB0byAnJXMnOiAlcyIsCisJCQl0cjJfc3lzZW52X2Rpc3BsYXlfbmFtZShkc3QtPnN5c2Vudl92YXIpLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKwl0cjJfZHN0X3RyYWNlX2Rpc2FibGUoZHN0KTsKK30KZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfZHN0LmggYi90cmFjZTIvdHIyX2RzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYThjMTQKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZTIvdHIyX2RzdC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgVFIyX0RTVF9ICisjZGVmaW5lIFRSMl9EU1RfSAorCitzdHJ1Y3Qgc3RyYnVmOworI2luY2x1ZGUgInRyYWNlMi90cjJfc3lzZW52LmgiCisKK3N0cnVjdCB0cjJfZHN0IHsKKwllbnVtIHRyMl9zeXNlbnZfdmFyaWFibGUgc3lzZW52X3ZhcjsKKwlpbnQgZmQ7CisJdW5zaWduZWQgaW50IGluaXRpYWxpemVkIDogMTsKKwl1bnNpZ25lZCBpbnQgbmVlZF9jbG9zZSA6IDE7CisJdW5zaWduZWQgaW50IHRvb19tYW55X2ZpbGVzIDogMTsKK307CisKKy8qCisgKiBEaXNhYmxlIFRSQUNFMiBvbiB0aGUgZGVzdGluYXRpb24uICBJbiBUUkFDRTIgYSBkZXN0aW5hdGlvbiAoRFNUKQorICogd3JhcHMgYSBmaWxlIGRlc2NyaXB0b3I7IGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIFRBUkdFVCB3aGljaAorICogZGVmaW5lcyB0aGUgZm9ybWF0dGluZy4KKyAqLwordm9pZCB0cjJfZHN0X3RyYWNlX2Rpc2FibGUoc3RydWN0IHRyMl9kc3QgKmRzdCk7CisKKy8qCisgKiBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIERTVC4KKyAqIElmIDAsIHRoZSBkc3QgaXMgY2xvc2VkIG9yIGRpc2FibGVkLgorICovCitpbnQgdHIyX2RzdF9nZXRfdHJhY2VfZmQoc3RydWN0IHRyMl9kc3QgKmRzdCk7CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgRFNUIGlzIG9wZW5lZCBmb3Igd3JpdGluZy4KKyAqLworaW50IHRyMl9kc3RfdHJhY2Vfd2FudChzdHJ1Y3QgdHIyX2RzdCAqZHN0KTsKKworLyoKKyAqIFdyaXRlIGEgc2luZ2xlIGxpbmUvbWVzc2FnZSB0byB0aGUgdHJhY2UgZmlsZS4KKyAqLwordm9pZCB0cjJfZHN0X3dyaXRlX2xpbmUoc3RydWN0IHRyMl9kc3QgKmRzdCwgc3RydWN0IHN0cmJ1ZiAqYnVmX2xpbmUpOworCisjZW5kaWYgLyogVFIyX0RTVF9IICovCmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX3NpZC5jIGIvdHJhY2UyL3RyMl9zaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzZlNzVlCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9zaWQuYwpAQCAtMCwwICsxLDExMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl90YnVmLmgiCisjaW5jbHVkZSAidHJhY2UyL3RyMl9zaWQuaCIKKworI2RlZmluZSBUUjJfRU5WVkFSX1BBUkVOVF9TSUQgIkdJVF9UUkFDRTJfUEFSRU5UX1NJRCIKKworc3RhdGljIHN0cnVjdCBzdHJidWYgdHIyc2lkX2J1ZiA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCB0cjJzaWRfbnJfZ2l0X3BhcmVudHM7CisKKy8qCisgKiBDb21wdXRlIHRoZSBmaW5hbCBjb21wb25lbnQgb2YgdGhlIFNJRCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKyAqIFRoaXMgc2hvdWxkIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBwcm9jZXNzIGFuZCBiZSBhIHZhbGlkIGZpbGVuYW1lICh0bworICogYWxsb3cgd3JpdGluZyB0cmFjZTIgZGF0YSB0byBwZXItcHJvY2VzcyBmaWxlcykuICBJdCBzaG91bGQgYWxzbyBiZSBmaXhlZAorICogbGVuZ3RoIGZvciBwb3NzaWJsZSB1c2UgYXMgYSBkYXRhYmFzZSBrZXkuCisgKgorICogIjx5eXl5bW1kZD5UPGhobW1zcz4uPGZyYWN0aW9uPlotPGhvc3Q+LTxwcm9jZXNzPiIKKyAqCisgKiB3aGVyZSA8aG9zdD4gaXMgYSA5IGNoYXJhY3RlciBzdHJpbmc6CisgKiAgICAiSDxmaXJzdF84X2NoYXJzX29mX3NoYTFfb2ZfaG9zdG5hbWU+IgorICogICAgIkxvY2FsaG9zdCIgd2hlbiBubyBob3N0bmFtZS4KKyAqCisgKiB3aGVyZSA8cHJvY2Vzcz4gaXMgYSA5IGNoYXJhY3RlciBzdHJpbmcgY29udGFpbmluZyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKKyAqIDMyIGJpdHMgaW4gdGhlIHByb2Nlc3MtaWQuCisgKiAgICAiUDxwaWQ+IgorICogKFRoaXMgaXMgYW4gYWJyaWJyYXJ5IGNob2ljZS4gIE9uIG1vc3Qgc3lzdGVtcyBwaWRfdCBpcyBhIDMyIGJpdCB2YWx1ZSwKKyAqIHNvIGxpbWl0IGRvZXNuJ3QgbWF0dGVyLiAgT24gbGFyZ2VyIHN5c3RlbXMsIGEgdHJ1bmNhdGVkIHZhbHVlIGlzIGZpbmUKKyAqIGZvciBvdXIgcHVycG9zZXMgaGVyZS4pCisgKi8KK3N0YXRpYyB2b2lkIHRyMl9zaWRfYXBwZW5kX215X3NpZF9jb21wb25lbnQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqYWxnbyA9ICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdOworCXN0cnVjdCB0cjJfdGJ1ZiB0Yl9ub3c7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwlwaWRfdCBwaWQgPSBnZXRwaWQoKTsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX01BWF9SQVdTWiArIDFdOworCWNoYXIgaGV4W0dJVF9NQVhfSEVYU1ogKyAxXTsKKwljaGFyIGhvc3RuYW1lW0hPU1RfTkFNRV9NQVggKyAxXTsKKworCXRyMl90YnVmX3V0Y19kYXRldGltZSgmdGJfbm93KTsKKwlzdHJidWZfYWRkc3RyKCZ0cjJzaWRfYnVmLCB0Yl9ub3cuYnVmKTsKKworCXN0cmJ1Zl9hZGRjaCgmdHIyc2lkX2J1ZiwgJy0nKTsKKwlpZiAoeGdldGhvc3RuYW1lKGhvc3RuYW1lLCBzaXplb2YoaG9zdG5hbWUpKSkKKwkJc3RyYnVmX2FkZCgmdHIyc2lkX2J1ZiwgIkxvY2FsaG9zdCIsIDkpOworCWVsc2UgeworCQlhbGdvLT5pbml0X2ZuKCZjdHgpOworCQlhbGdvLT51cGRhdGVfZm4oJmN0eCwgaG9zdG5hbWUsIHN0cmxlbihob3N0bmFtZSkpOworCQlhbGdvLT5maW5hbF9mbihoYXNoLCAmY3R4KTsKKwkJaGFzaF90b19oZXhfYWxnb3BfcihoZXgsIGhhc2gsIGFsZ28pOworCQlzdHJidWZfYWRkY2goJnRyMnNpZF9idWYsICdIJyk7CisJCXN0cmJ1Zl9hZGQoJnRyMnNpZF9idWYsIGhleCwgOCk7CisJfQorCisJc3RyYnVmX2FkZGYoJnRyMnNpZF9idWYsICItUCUwOCJQUkl4MzIsICh1aW50MzJfdClwaWQpOworfQorCisvKgorICogQ29tcHV0ZSBhICJ1bmlxdWUiIHNlc3Npb24gaWQgKFNJRCkgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuICBUaGlzIGFsbG93cworICogYWxsIGV2ZW50cyBmcm9tIHRoaXMgcHJvY2VzcyB0byBoYXZlIGEgc2luZ2xlIGxhYmVsIChtdWNoIGxpa2UgYSBQSUQpLgorICoKKyAqIEV4cG9ydCB0aGlzIGludG8gb3VyIGVudmlyb25tZW50IHNvIHRoYXQgYWxsIGNoaWxkIHByb2Nlc3NlcyBpbmhlcml0IGl0LgorICoKKyAqIElmIHdlIHdlcmUgc3RhcnRlZCBieSBhbm90aGVyIGdpdCBpbnN0YW5jZSwgdXNlIG91ciBwYXJlbnQncyBTSUQgYXMgYQorICogcHJlZml4LiAgKFRoaXMgbGV0cyB1cyB0cmFjayBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBldmVuIGlmIHRoZXJlCisgKiBpcyBhbiBpbnRlcm1lZGlhdGUgc2hlbGwgcHJvY2Vzcy4pCisgKgorICogQWRkaXRpb25hbGx5LCBjb3VudCB0aGUgbnVtYmVyIG9mIG5lc3RlZCBnaXQgcHJvY2Vzc2VzLgorICovCitzdGF0aWMgdm9pZCB0cjJfc2lkX2NvbXB1dGUodm9pZCkKK3sKKwljb25zdCBjaGFyICpwYXJlbnRfc2lkOworCisJaWYgKHRyMnNpZF9idWYubGVuKQorCQlyZXR1cm47CisKKwlwYXJlbnRfc2lkID0gZ2V0ZW52KFRSMl9FTlZWQVJfUEFSRU5UX1NJRCk7CisJaWYgKHBhcmVudF9zaWQgJiYgKnBhcmVudF9zaWQpIHsKKwkJY29uc3QgY2hhciAqcDsKKwkJZm9yIChwID0gcGFyZW50X3NpZDsgKnA7IHArKykKKwkJCWlmICgqcCA9PSAnLycpCisJCQkJdHIyc2lkX25yX2dpdF9wYXJlbnRzKys7CisKKwkJc3RyYnVmX2FkZHN0cigmdHIyc2lkX2J1ZiwgcGFyZW50X3NpZCk7CisJCXN0cmJ1Zl9hZGRjaCgmdHIyc2lkX2J1ZiwgJy8nKTsKKwkJdHIyc2lkX25yX2dpdF9wYXJlbnRzKys7CisJfQorCisJdHIyX3NpZF9hcHBlbmRfbXlfc2lkX2NvbXBvbmVudCgpOworCisJc2V0ZW52KFRSMl9FTlZWQVJfUEFSRU5UX1NJRCwgdHIyc2lkX2J1Zi5idWYsIDEpOworfQorCitjb25zdCBjaGFyICp0cjJfc2lkX2dldCh2b2lkKQoreworCWlmICghdHIyc2lkX2J1Zi5sZW4pCisJCXRyMl9zaWRfY29tcHV0ZSgpOworCisJcmV0dXJuIHRyMnNpZF9idWYuYnVmOworfQorCitpbnQgdHIyX3NpZF9kZXB0aCh2b2lkKQoreworCWlmICghdHIyc2lkX2J1Zi5sZW4pCisJCXRyMl9zaWRfY29tcHV0ZSgpOworCisJcmV0dXJuIHRyMnNpZF9ucl9naXRfcGFyZW50czsKK30KKwordm9pZCB0cjJfc2lkX3JlbGVhc2Uodm9pZCkKK3sKKwlzdHJidWZfcmVsZWFzZSgmdHIyc2lkX2J1Zik7Cit9CmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX3NpZC5oIGIvdHJhY2UyL3RyMl9zaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVmMzIxCi0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9zaWQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIFRSMl9TSURfSAorI2RlZmluZSBUUjJfU0lEX0gKKworLyoKKyAqIEdldCBvdXIgc2Vzc2lvbiBpZC4gQ29tcHV0ZSBpZiBuZWNlc3NhcnkuCisgKi8KK2NvbnN0IGNoYXIgKnRyMl9zaWRfZ2V0KHZvaWQpOworCisvKgorICogR2V0IG91ciBwcm9jZXNzIGRlcHRoLiAgQSB0b3AtbGV2ZWwgZ2l0IHByb2Nlc3MgaW52b2tlZCBmcm9tIHRoZQorICogY29tbWFuZCBsaW5lIHdpbGwgaGF2ZSBkZXB0aD0wLiAgQSBjaGlsZCBnaXQgcHJvY2VzcyB3aWxsIGhhdmUKKyAqIGRlcHRoPTEgYW5kIHNvIG9uLgorICovCitpbnQgdHIyX3NpZF9kZXB0aCh2b2lkKTsKKwordm9pZCB0cjJfc2lkX3JlbGVhc2Uodm9pZCk7CisKKyNlbmRpZiAvKiBUUjJfU0lEX0ggKi8KZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfc3lzZW52LmMgYi90cmFjZTIvdHIyX3N5c2Vudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMzc5MmUKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjZTIvdHIyX3N5c2Vudi5jCkBAIC0wLDAgKzEsMTMwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ0cjJfc3lzZW52LmgiCisKKy8qCisgKiBFYWNoIGVudHJ5IHJlcHJlc2VudHMgYSB0cmFjZTIgc2V0dGluZy4KKyAqIFNlZSBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UyLnR4dAorICovCitzdHJ1Y3QgdHIyX3N5c2Vudl9lbnRyeSB7CisJY29uc3QgY2hhciAqZW52X3Zhcl9uYW1lOworCWNvbnN0IGNoYXIgKmdpdF9jb25maWdfbmFtZTsKKworCWNoYXIgKnZhbHVlOworCXVuc2lnbmVkIGludCBnZXRlbnZfY2FsbGVkIDogMTsKK307CisKKy8qCisgKiBUaGlzIHRhYmxlIG11c3QgbWF0Y2ggImVudW0gdHIyX3N5c2Vudl92YXJpYWJsZSIgaW4gdHIyX3N5c2Vudi5oLgorICoKKyAqIFRoZSBzdHJpbmdzIGluIHRoaXMgdGFibGUgYXJlIGNvbnN0YW50IGFuZCBtdXN0IG1hdGNoIHRoZSBwdWJsaXNoZWQKKyAqIGNvbmZpZyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgYXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorICoKKyAqIFdlIGRvIG5vdCBkZWZpbmUgZW50cmllcyBmb3IgdGhlIEdJVF9UUkFDRTJfUEFSRU5UXyogZW52aXJvbm1lbnQKKyAqIHZhcmlhYmxlcyBiZWNhdXNlIHRoZXkgYXJlIHRyYW5zaWVudCBhbmQgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uCisgKiBmcm9tIHBhcmVudCB0byBjaGlsZCBnaXQgcHJvY2Vzc2VzLCByYXRoZXIgdGhhbiBzZXR0aW5ncy4KKyAqLworLyogY2xhbmctZm9ybWF0IG9mZiAqLworc3RhdGljIHN0cnVjdCB0cjJfc3lzZW52X2VudHJ5IHRyMl9zeXNlbnZfc2V0dGluZ3NbXSA9IHsKKwlbVFIyX1NZU0VOVl9DRkdfUEFSQU1dICAgICA9IHsgIkdJVF9UUkFDRTJfQ09ORklHX1BBUkFNUyIsCisJCQkJICAgICAgICJ0cmFjZTIuY29uZmlncGFyYW1zIiB9LAorCisJW1RSMl9TWVNFTlZfRFNUX0RFQlVHXSAgICAgPSB7ICJHSVRfVFJBQ0UyX0RTVF9ERUJVRyIsCisJCQkJICAgICAgICJ0cmFjZTIuZGVzdGluYXRpb25kZWJ1ZyIgfSwKKworCVtUUjJfU1lTRU5WX05PUk1BTF0gICAgICAgID0geyAiR0lUX1RSQUNFMiIsCisJCQkJICAgICAgICJ0cmFjZTIubm9ybWFsdGFyZ2V0IiB9LAorCVtUUjJfU1lTRU5WX05PUk1BTF9CUklFRl0gID0geyAiR0lUX1RSQUNFMl9CUklFRiIsCisJCQkJICAgICAgICJ0cmFjZTIubm9ybWFsYnJpZWYiIH0sCisKKwlbVFIyX1NZU0VOVl9FVkVOVF0gICAgICAgICA9IHsgIkdJVF9UUkFDRTJfRVZFTlQiLAorCQkJCSAgICAgICAidHJhY2UyLmV2ZW50dGFyZ2V0IiB9LAorCVtUUjJfU1lTRU5WX0VWRU5UX0JSSUVGXSAgID0geyAiR0lUX1RSQUNFMl9FVkVOVF9CUklFRiIsCisJCQkJICAgICAgICJ0cmFjZTIuZXZlbnRicmllZiIgfSwKKwlbVFIyX1NZU0VOVl9FVkVOVF9ORVNUSU5HXSA9IHsgIkdJVF9UUkFDRTJfRVZFTlRfTkVTVElORyIsCisJCQkJICAgICAgICJ0cmFjZTIuZXZlbnRuZXN0aW5nIiB9LAorCisJW1RSMl9TWVNFTlZfUEVSRl0gICAgICAgICAgPSB7ICJHSVRfVFJBQ0UyX1BFUkYiLAorCQkJCSAgICAgICAidHJhY2UyLnBlcmZ0YXJnZXQiIH0sCisJW1RSMl9TWVNFTlZfUEVSRl9CUklFRl0gICAgPSB7ICJHSVRfVFJBQ0UyX1BFUkZfQlJJRUYiLAorCQkJCSAgICAgICAidHJhY2UyLnBlcmZicmllZiIgfSwKKworCVtUUjJfU1lTRU5WX01BWF9GSUxFU10gICAgID0geyAiR0lUX1RSQUNFMl9NQVhfRklMRVMiLAorCQkJCSAgICAgICAidHJhY2UyLm1heGZpbGVzIiB9LAorfTsKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCitzdGF0aWMgaW50IHRyMl9zeXNlbnZfY2IoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZCkKK3sKKwlpbnQgazsKKworCWlmICghc3RhcnRzX3dpdGgoa2V5LCAidHJhY2UyLiIpKQorCQlyZXR1cm4gMDsKKworCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHRyMl9zeXNlbnZfc2V0dGluZ3MpOyBrKyspIHsKKwkJaWYgKCFzdHJjbXAoa2V5LCB0cjJfc3lzZW52X3NldHRpbmdzW2tdLmdpdF9jb25maWdfbmFtZSkpIHsKKwkJCWZyZWUodHIyX3N5c2Vudl9zZXR0aW5nc1trXS52YWx1ZSk7CisJCQl0cjJfc3lzZW52X3NldHRpbmdzW2tdLnZhbHVlID0geHN0cmR1cCh2YWx1ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogTG9hZCBUcmFjZTIgc2V0dGluZ3MgZnJvbSB0aGUgc3lzdGVtIGNvbmZpZyAodXN1YWxseSAiL2V0Yy9naXRjb25maWciCisgKiB1bmxlc3Mgd2Ugd2VyZSBidWlsdCB3aXRoIGEgcnVudGltZS1wcmVmaXgpLiAgVGhlc2UgYXJlIGludGVuZGVkIHRvCisgKiBkZWZpbmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBUcmFjZTIgYXMgcmVxdWVzdGVkIGJ5IHRoZSBhZG1pbmlzdHJhdG9yLgorICoKKyAqIFRoZW4gb3ZlcnJpZGUgd2l0aCB0aGUgVHJhY2UyIHNldHRpbmdzIGZyb20gdGhlIGdsb2JhbCBjb25maWcuCisgKi8KK3ZvaWQgdHIyX3N5c2Vudl9sb2FkKHZvaWQpCit7CisJaWYgKEFSUkFZX1NJWkUodHIyX3N5c2Vudl9zZXR0aW5ncykgIT0gVFIyX1NZU0VOVl9NVVNUX0JFX0xBU1QpCisJCUJVRygidHIyX3N5c2Vudl9zZXR0aW5ncyBzaXplIGlzIHdyb25nIik7CisKKwlyZWFkX3ZlcnlfZWFybHlfY29uZmlnKHRyMl9zeXNlbnZfY2IsIE5VTEwpOworfQorCisvKgorICogUmV0dXJuIHRoZSB2YWx1ZSBmb3IgdGhlIHJlcXVlc3RlZCBUcmFjZTIgc2V0dGluZyBmcm9tIHRoZXNlIHNvdXJjZXM6CisgKiB0aGUgc3lzdGVtIGNvbmZpZywgdGhlIGdsb2JhbCBjb25maWcsIGFuZCB0aGUgZW52aXJvbm1lbnQuCisgKi8KK2NvbnN0IGNoYXIgKnRyMl9zeXNlbnZfZ2V0KGVudW0gdHIyX3N5c2Vudl92YXJpYWJsZSB2YXIpCit7CisJaWYgKHZhciA+PSBUUjJfU1lTRU5WX01VU1RfQkVfTEFTVCkKKwkJQlVHKCJ0cjJfc3lzZW52X2dldCBpbnZhbGlkIHZhciAnJWQnIiwgdmFyKTsKKworCWlmICghdHIyX3N5c2Vudl9zZXR0aW5nc1t2YXJdLmdldGVudl9jYWxsZWQpIHsKKwkJY29uc3QgY2hhciAqdiA9IGdldGVudih0cjJfc3lzZW52X3NldHRpbmdzW3Zhcl0uZW52X3Zhcl9uYW1lKTsKKwkJaWYgKHYgJiYgKnYpIHsKKwkJCWZyZWUodHIyX3N5c2Vudl9zZXR0aW5nc1t2YXJdLnZhbHVlKTsKKwkJCXRyMl9zeXNlbnZfc2V0dGluZ3NbdmFyXS52YWx1ZSA9IHhzdHJkdXAodik7CisJCX0KKwkJdHIyX3N5c2Vudl9zZXR0aW5nc1t2YXJdLmdldGVudl9jYWxsZWQgPSAxOworCX0KKworCXJldHVybiB0cjJfc3lzZW52X3NldHRpbmdzW3Zhcl0udmFsdWU7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBmcmllbmRseSBuYW1lIGZvciB0aGlzIHNldHRpbmcgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcHJpbnRpbmcKKyAqIGluIGFuIGVycm9yIG1lc3NhZ2VzLgorICovCitjb25zdCBjaGFyICp0cjJfc3lzZW52X2Rpc3BsYXlfbmFtZShlbnVtIHRyMl9zeXNlbnZfdmFyaWFibGUgdmFyKQoreworCWlmICh2YXIgPj0gVFIyX1NZU0VOVl9NVVNUX0JFX0xBU1QpCisJCUJVRygidHIyX3N5c2Vudl9nZXQgaW52YWxpZCB2YXIgJyVkJyIsIHZhcik7CisKKwlyZXR1cm4gdHIyX3N5c2Vudl9zZXR0aW5nc1t2YXJdLmVudl92YXJfbmFtZTsKK30KKwordm9pZCB0cjJfc3lzZW52X3JlbGVhc2Uodm9pZCkKK3sKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHRyMl9zeXNlbnZfc2V0dGluZ3MpOyBrKyspCisJCWZyZWUodHIyX3N5c2Vudl9zZXR0aW5nc1trXS52YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS90cmFjZTIvdHIyX3N5c2Vudi5oIGIvdHJhY2UyL3RyMl9zeXNlbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDM2NGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhY2UyL3RyMl9zeXNlbnYuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIFRSMl9TWVNFTlZfSAorI2RlZmluZSBUUjJfU1lTRU5WX0gKKworLyoKKyAqIFRoZSBUcmFjZTIgc2V0dGluZ3MgdGhhdCBjYW4gYmUgbG9hZGVkIGZyb20gL2V0Yy9naXRjb25maWcKKyAqIGFuZC9vciB1c2VyIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBzZXQgZG9lcyBub3QgY29udGFpbiBhbnkgb2YgdGhlIHRyYW5zaWVudAorICogZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBmcm9tIHBhcmVudAorICogdG8gY2hpbGQgZ2l0IHByb2Nlc3Nlcywgc3VjaCAiR0lUX1RSQUNFMl9QQVJFTlRfU0lEIi4KKyAqLworZW51bSB0cjJfc3lzZW52X3ZhcmlhYmxlIHsKKwlUUjJfU1lTRU5WX0NGR19QQVJBTSA9IDAsCisKKwlUUjJfU1lTRU5WX0RTVF9ERUJVRywKKworCVRSMl9TWVNFTlZfTk9STUFMLAorCVRSMl9TWVNFTlZfTk9STUFMX0JSSUVGLAorCisJVFIyX1NZU0VOVl9FVkVOVCwKKwlUUjJfU1lTRU5WX0VWRU5UX0JSSUVGLAorCVRSMl9TWVNFTlZfRVZFTlRfTkVTVElORywKKworCVRSMl9TWVNFTlZfUEVSRiwKKwlUUjJfU1lTRU5WX1BFUkZfQlJJRUYsCisKKwlUUjJfU1lTRU5WX01BWF9GSUxFUywKKworCVRSMl9TWVNFTlZfTVVTVF9CRV9MQVNUCit9OworCit2b2lkIHRyMl9zeXNlbnZfbG9hZCh2b2lkKTsKKworY29uc3QgY2hhciAqdHIyX3N5c2Vudl9nZXQoZW51bSB0cjJfc3lzZW52X3ZhcmlhYmxlKTsKK2NvbnN0IGNoYXIgKnRyMl9zeXNlbnZfZGlzcGxheV9uYW1lKGVudW0gdHIyX3N5c2Vudl92YXJpYWJsZSB2YXIpOwordm9pZCB0cjJfc3lzZW52X3JlbGVhc2Uodm9pZCk7CisKKyNlbmRpZiAvKiBUUjJfU1lTRU5WX0ggKi8KZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfdGJ1Zi5jIGIvdHJhY2UyL3RyMl90YnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5ODQ4MgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlMi90cjJfdGJ1Zi5jCkBAIC0wLDAgKzEsNDcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyMl90YnVmLmgiCisKK3ZvaWQgdHIyX3RidWZfbG9jYWxfdGltZShzdHJ1Y3QgdHIyX3RidWYgKnRiKQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0bSB0bTsKKwl0aW1lX3Qgc2VjczsKKworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXNlY3MgPSB0di50dl9zZWM7CisJbG9jYWx0aW1lX3IoJnNlY3MsICZ0bSk7CisKKwl4c25wcmludGYodGItPmJ1Ziwgc2l6ZW9mKHRiLT5idWYpLCAiJTAyZDolMDJkOiUwMmQuJTA2bGQiLCB0bS50bV9ob3VyLAorCQkgIHRtLnRtX21pbiwgdG0udG1fc2VjLCAobG9uZyl0di50dl91c2VjKTsKK30KKwordm9pZCB0cjJfdGJ1Zl91dGNfZGF0ZXRpbWVfZXh0ZW5kZWQoc3RydWN0IHRyMl90YnVmICp0YikKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwlzdHJ1Y3QgdG0gdG07CisJdGltZV90IHNlY3M7CisKKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlzZWNzID0gdHYudHZfc2VjOworCWdtdGltZV9yKCZzZWNzLCAmdG0pOworCisJeHNucHJpbnRmKHRiLT5idWYsIHNpemVvZih0Yi0+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+c2VwYXJhdG9yKSB7CisJCQkJc3RyYnVmX3J0cmltKG91dCk7CisJCQl9CisJCX0KKwl9CisKK30KKwordm9pZCBmb3JtYXRfdHJhaWxlcnNfZnJvbV9jb21taXQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICptc2csCisJCQkJIGNvbnN0IHN0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgdHJhaWxlcl9pbmZvIGluZm87CisKKwl0cmFpbGVyX2luZm9fZ2V0KCZpbmZvLCBtc2csIG9wdHMpOworCWZvcm1hdF90cmFpbGVyX2luZm8ob3V0LCAmaW5mbywgb3B0cyk7CisJdHJhaWxlcl9pbmZvX3JlbGVhc2UoJmluZm8pOworfQpkaWZmIC0tZ2l0IGEvdHJhaWxlci5oIGIvdHJhaWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwM2FjZjQKLS0tIC9kZXYvbnVsbAorKysgYi90cmFpbGVyLmgKQEAgLTAsMCArMSwxMDYgQEAKKyNpZm5kZWYgVFJBSUxFUl9ICisjZGVmaW5lIFRSQUlMRVJfSAorCisjaW5jbHVkZSAibGlzdC5oIgorCitzdHJ1Y3Qgc3RyYnVmOworCitlbnVtIHRyYWlsZXJfd2hlcmUgeworCVdIRVJFX0RFRkFVTFQsCisJV0hFUkVfRU5ELAorCVdIRVJFX0FGVEVSLAorCVdIRVJFX0JFRk9SRSwKKwlXSEVSRV9TVEFSVAorfTsKK2VudW0gdHJhaWxlcl9pZl9leGlzdHMgeworCUVYSVNUU19ERUZBVUxULAorCUVYSVNUU19BRERfSUZfRElGRkVSRU5UX05FSUdIQk9SLAorCUVYSVNUU19BRERfSUZfRElGRkVSRU5ULAorCUVYSVNUU19BREQsCisJRVhJU1RTX1JFUExBQ0UsCisJRVhJU1RTX0RPX05PVEhJTkcKK307CitlbnVtIHRyYWlsZXJfaWZfbWlzc2luZyB7CisJTUlTU0lOR19ERUZBVUxULAorCU1JU1NJTkdfQURELAorCU1JU1NJTkdfRE9fTk9USElORworfTsKKworaW50IHRyYWlsZXJfc2V0X3doZXJlKGVudW0gdHJhaWxlcl93aGVyZSAqaXRlbSwgY29uc3QgY2hhciAqdmFsdWUpOworaW50IHRyYWlsZXJfc2V0X2lmX2V4aXN0cyhlbnVtIHRyYWlsZXJfaWZfZXhpc3RzICppdGVtLCBjb25zdCBjaGFyICp2YWx1ZSk7CitpbnQgdHJhaWxlcl9zZXRfaWZfbWlzc2luZyhlbnVtIHRyYWlsZXJfaWZfbWlzc2luZyAqaXRlbSwgY29uc3QgY2hhciAqdmFsdWUpOworCitzdHJ1Y3QgdHJhaWxlcl9pbmZvIHsKKwkvKgorCSAqIFRydWUgaWYgdGhlcmUgaXMgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieQorCSAqIHRyYWlsZXJfc3RhcnQuCisJICovCisJaW50IGJsYW5rX2xpbmVfYmVmb3JlX3RyYWlsZXI7CisKKwkvKgorCSAqIFBvaW50ZXJzIHRvIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB0cmFpbGVyIGJsb2NrIGZvdW5kLiBJZiB0aGVyZQorCSAqIGlzIG5vIHRyYWlsZXIgYmxvY2sgZm91bmQsIHRoZXNlIDIgcG9pbnRlcnMgcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUKKwkgKiBpbnB1dCBzdHJpbmcuCisJICovCisJY29uc3QgY2hhciAqdHJhaWxlcl9zdGFydCwgKnRyYWlsZXJfZW5kOworCisJLyoKKwkgKiBBcnJheSBvZiB0cmFpbGVycyBmb3VuZC4KKwkgKi8KKwljaGFyICoqdHJhaWxlcnM7CisJc2l6ZV90IHRyYWlsZXJfbnI7Cit9OworCisvKgorICogQSBsaXN0IHRoYXQgcmVwcmVzZW50cyBuZXdseS1hZGRlZCB0cmFpbGVycywgc3VjaCBhcyB0aG9zZSBwcm92aWRlZAorICogd2l0aCB0aGUgLS10cmFpbGVyIGNvbW1hbmQgbGluZSBvcHRpb24gb2YgZ2l0LWludGVycHJldC10cmFpbGVycy4KKyAqLworc3RydWN0IG5ld190cmFpbGVyX2l0ZW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCWNvbnN0IGNoYXIgKnRleHQ7CisKKwllbnVtIHRyYWlsZXJfd2hlcmUgd2hlcmU7CisJZW51bSB0cmFpbGVyX2lmX2V4aXN0cyBpZl9leGlzdHM7CisJZW51bSB0cmFpbGVyX2lmX21pc3NpbmcgaWZfbWlzc2luZzsKK307CisKK3N0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyB7CisJaW50IGluX3BsYWNlOworCWludCB0cmltX2VtcHR5OworCWludCBvbmx5X3RyYWlsZXJzOworCWludCBvbmx5X2lucHV0OworCWludCB1bmZvbGQ7CisJaW50IG5vX2RpdmlkZXI7CisJaW50IHZhbHVlX29ubHk7CisJY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2VwYXJhdG9yOworCWludCAoKmZpbHRlcikoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqLCB2b2lkICopOworCXZvaWQgKmZpbHRlcl9kYXRhOworfTsKKworI2RlZmluZSBQUk9DRVNTX1RSQUlMRVJfT1BUSU9OU19JTklUIHswfQorCit2b2lkIHByb2Nlc3NfdHJhaWxlcnMoY29uc3QgY2hhciAqZmlsZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zICpvcHRzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXdfdHJhaWxlcl9oZWFkKTsKKwordm9pZCB0cmFpbGVyX2luZm9fZ2V0KHN0cnVjdCB0cmFpbGVyX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKnN0ciwKKwkJICAgICAgY29uc3Qgc3RydWN0IHByb2Nlc3NfdHJhaWxlcl9vcHRpb25zICpvcHRzKTsKKwordm9pZCB0cmFpbGVyX2luZm9fcmVsZWFzZShzdHJ1Y3QgdHJhaWxlcl9pbmZvICppbmZvKTsKKworLyoKKyAqIEZvcm1hdCB0aGUgdHJhaWxlcnMgZnJvbSB0aGUgY29tbWl0IG1zZyAibXNnIiBpbnRvIHRoZSBzdHJidWYgIm91dCIuCisgKiBOb3RlIHR3byBjYXZlYXRzIGFib3V0ICJvcHRzIjoKKyAqCisgKiAgIC0gdGhpcyBpcyBwcmltYXJpbHkgYSBoZWxwZXIgZm9yIHByZXR0eS5jLCBhbmQgbm90CisgKiAgICAgYWxsIG9mIHRoZSBmbGFncyBhcmUgc3VwcG9ydGVkLgorICoKKyAqICAgLSB0aGlzIGRpZmZlcnMgZnJvbSBwcm9jZXNzX3RyYWlsZXJzIHNsaWdodGx5IGluIHRoYXQgd2UgYWx3YXlzIGZvcm1hdAorICogICAgIG9ubHkgdGhlIHRyYWlsZXIgYmxvY2sgaXRzZWxmLCBldmVuIGlmIHRoZSAib25seV90cmFpbGVycyIgb3B0aW9uIGlzIG5vdAorICogICAgIHNldC4KKyAqLwordm9pZCBmb3JtYXRfdHJhaWxlcnNfZnJvbV9jb21taXQoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICptc2csCisJCQkJIGNvbnN0IHN0cnVjdCBwcm9jZXNzX3RyYWlsZXJfb3B0aW9ucyAqb3B0cyk7CisKKyNlbmRpZiAvKiBUUkFJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC1oZWxwZXIuYyBiL3RyYW5zcG9ydC1oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGE3MTg1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhbnNwb3J0LWhlbHBlci5jCkBAIC0wLDAgKzEsMTQ5MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInJlZnNwZWMuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQtaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdHJ1Y3QgaGVscGVyX2RhdGEgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwlGSUxFICpvdXQ7CisJdW5zaWduZWQgZmV0Y2ggOiAxLAorCQlpbXBvcnQgOiAxLAorCQliaWRpX2ltcG9ydCA6IDEsCisJCWV4cG9ydCA6IDEsCisJCW9wdGlvbiA6IDEsCisJCXB1c2ggOiAxLAorCQljb25uZWN0IDogMSwKKwkJc3RhdGVsZXNzX2Nvbm5lY3QgOiAxLAorCQlzaWduZWRfdGFncyA6IDEsCisJCWNoZWNrX2Nvbm5lY3Rpdml0eSA6IDEsCisJCW5vX2Rpc2Nvbm5lY3RfcmVxIDogMSwKKwkJbm9fcHJpdmF0ZV91cGRhdGUgOiAxOworCisJLyoKKwkgKiBBcyBhbiBvcHRpbWl6YXRpb24sIHRoZSB0cmFuc3BvcnQgY29kZSBtYXkgaW52b2tlIGZldGNoIGJlZm9yZQorCSAqIGdldF9yZWZzX2xpc3QuIElmIHRoaXMgaGFwcGVucywgYW5kIGlmIHRoZSB0cmFuc3BvcnQgaGVscGVyIGRvZXNuJ3QKKwkgKiBzdXBwb3J0IGNvbm5lY3Qgb3Igc3RhdGVsZXNzX2Nvbm5lY3QsIHdlIG5lZWQgdG8gaW52b2tlCisJICogZ2V0X3JlZnNfbGlzdCBvdXJzZWx2ZXMgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc28uIEtlZXAgdHJhY2sgb2YKKwkgKiB3aGV0aGVyIHdlIGhhdmUgaW52b2tlZCBnZXRfcmVmc19saXN0LgorCSAqLworCXVuc2lnbmVkIGdldF9yZWZzX2xpc3RfY2FsbGVkIDogMTsKKworCWNoYXIgKmV4cG9ydF9tYXJrczsKKwljaGFyICppbXBvcnRfbWFya3M7CisJLyogVGhlc2UgZ28gZnJvbSByZW1vdGUgbmFtZSAoYXMgaW4gImxpc3QiKSB0byBwcml2YXRlIG5hbWUgKi8KKwlzdHJ1Y3QgcmVmc3BlYyByczsKKwkvKiBUcmFuc3BvcnQgb3B0aW9ucyBmb3IgZmV0Y2gtcGFjay9zZW5kLXBhY2sgKHNob3VsZCBvbmUgb2YKKwkgKiB0aG9zZSBiZSBpbnZva2VkKS4KKwkgKi8KKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9vcHRpb25zIHRyYW5zcG9ydF9vcHRpb25zOworfTsKKworc3RhdGljIHZvaWQgc2VuZGxpbmUoc3RydWN0IGhlbHBlcl9kYXRhICpoZWxwZXIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3sKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFJlbW90ZSBoZWxwZXI6IC0+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+cmVtb3RlX3N0YXR1cyA9IG1zZzsKKwlyZXR1cm4gIShzdGF0dXMgPT0gUkVGX1NUQVRVU19PSyk7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF91cGRhdGVfcmVmc19zdGF0dXMoc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhLAorCQkJCSAgICBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJCQkgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZiAqcmVmID0gcmVtb3RlX3JlZnM7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgKnByaXZhdGU7CisKKwkJaWYgKHJlY3ZsaW5lKGRhdGEsICZidWYpKSB7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWJ1Zi5sZW4pCisJCQlicmVhazsKKworCQlpZiAocHVzaF91cGRhdGVfcmVmX3N0YXR1cygmYnVmLCAmcmVmLCByZW1vdGVfcmVmcykpCisJCQljb250aW51ZTsKKworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOIHx8ICFkYXRhLT5ycy5uciB8fCBkYXRhLT5ub19wcml2YXRlX3VwZGF0ZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHByb3BhZ2F0ZSBiYWNrIHRoZSB1cGRhdGUgdG8gdGhlIHJlbW90ZSBuYW1lc3BhY2UgKi8KKwkJcHJpdmF0ZSA9IGFwcGx5X3JlZnNwZWNzKCZkYXRhLT5ycywgcmVmLT5uYW1lKTsKKwkJaWYgKCFwcml2YXRlKQorCQkJY29udGludWU7CisJCXVwZGF0ZV9yZWYoInVwZGF0ZSBieSBoZWxwZXIiLCBwcml2YXRlLCAmcmVmLT5uZXdfb2lkLCBOVUxMLAorCQkJICAgMCwgMCk7CisJCWZyZWUocHJpdmF0ZSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jb21tb25fcHVzaF9vcHRpb25zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTikgeworCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAiZHJ5LXJ1biIsICJ0cnVlIikgIT0gMCkKKwkJCWRpZShfKCJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCBkcnktcnVuIiksIG5hbWUpOworCX0gZWxzZSBpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUykgeworCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfUFVTSF9DRVJULCAidHJ1ZSIpICE9IDApCisJCQlkaWUoXygiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiKSwgbmFtZSk7CisJfSBlbHNlIGlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0NFUlRfSUZfQVNLRUQpIHsKKwkJaWYgKHNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1BVU0hfQ0VSVCwgImlmLWFza2VkIikgIT0gMCkKKwkJCWRpZShfKCJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZD1pZi1hc2tlZCIpLCBuYW1lKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BVE9NSUMpCisJCWlmIChzZXRfaGVscGVyX29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9BVE9NSUMsICJ0cnVlIikgIT0gMCkKKwkJCWRpZShfKCJoZWxwZXIgJXMgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyIpLCBuYW1lKTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX09QVElPTlMpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgdHJhbnNwb3J0LT5wdXNoX29wdGlvbnMpCisJCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAicHVzaC1vcHRpb24iLCBpdGVtLT5zdHJpbmcpICE9IDApCisJCQkJZGllKF8oImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0ICdwdXNoLW9wdGlvbiciKSwgbmFtZSk7CisJfQorfQorCitzdGF0aWMgaW50IHB1c2hfcmVmc193aXRoX3B1c2goc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJICAgICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgZmxhZ3MpCit7CisJaW50IGZvcmNlX2FsbCA9IGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0U7CisJaW50IG1pcnJvciA9IGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SOworCWludCBhdG9taWMgPSBmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FUT01JQzsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHN0cmluZ19saXN0IGNhc19vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmNhc19vcHRpb247CisKKwlnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisJaWYgKCFkYXRhLT5wdXNoKQorCQlyZXR1cm4gMTsKKworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghcmVmLT5wZWVyX3JlZiAmJiAhbWlycm9yKQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgZm9yIHN0YXR1c2VzIHNldCBieSBzZXRfcmVmX3N0YXR1c19mb3JfcHVzaCgpICovCisJCXN3aXRjaCAocmVmLT5zdGF0dXMpIHsKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDoKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9TVEFMRToKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9BTFJFQURZX0VYSVNUUzoKKwkJCWlmIChhdG9taWMpIHsKKwkJCQlzdHJpbmdfbGlzdF9jbGVhcigmY2FzX29wdGlvbnMsIDApOworCQkJCXJldHVybiAwOworCQkJfSBlbHNlCisJCQkJY29udGludWU7CisJCWNhc2UgUkVGX1NUQVRVU19VUFRPREFURToKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCX0KKworCQlpZiAoZm9yY2VfYWxsKQorCQkJcmVmLT5mb3JjZSA9IDE7CisKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAicHVzaCAiKTsKKwkJaWYgKCFyZWYtPmRlbGV0aW9uKSB7CisJCQlpZiAocmVmLT5mb3JjZSkKKwkJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJysnKTsKKwkJCWlmIChyZWYtPnBlZXJfcmVmKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmVmLT5wZWVyX3JlZi0+bmFtZSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBvaWRfdG9faGV4KCZyZWYtPm5ld19vaWQpKTsKKwkJfQorCQlzdHJidWZfYWRkY2goJmJ1ZiwgJzonKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCByZWYtPm5hbWUpOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisKKwkJLyoKKwkJICogVGhlICItLWZvcmNlLXdpdGgtbGVhc2UiIG9wdGlvbnMgd2l0aG91dCBleHBsaWNpdAorCQkgKiB2YWx1ZXMgdG8gZXhwZWN0IGhhdmUgYWxyZWFkeSBiZWVuIGV4cGFuZGVkIGludG8KKwkJICogdGhlIHJlZi0+b2xkX29pZF9leHBlY3RbXSBmaWVsZDsgd2UgY2FuIGlnbm9yZQorCQkgKiB0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMtPmNhcyBhbHRvZ2V0aGVyIGFuZCBpbnN0ZWFkCisJCSAqIGNhbiBlbnVtZXJhdGUgdGhlbSBmcm9tIHRoZSByZWZzLgorCQkgKi8KKwkJaWYgKHJlZi0+ZXhwZWN0X29sZF9zaGExKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGNhcyA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGYoJmNhcywgIiVzOiVzIiwKKwkJCQkgICAgcmVmLT5uYW1lLCBvaWRfdG9faGV4KCZyZWYtPm9sZF9vaWRfZXhwZWN0KSk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoJmNhc19vcHRpb25zLAorCQkJCQkJIHN0cmJ1Zl9kZXRhY2goJmNhcywgTlVMTCkpOworCQl9CisJfQorCWlmIChidWYubGVuID09IDApIHsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmNhc19vcHRpb25zLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShjYXNfb3B0aW9uLCAmY2FzX29wdGlvbnMpCisJCXNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgImNhcyIsIGNhc19vcHRpb24tPnN0cmluZyk7CisJc2V0X2NvbW1vbl9wdXNoX29wdGlvbnModHJhbnNwb3J0LCBkYXRhLT5uYW1lLCBmbGFncyk7CisKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJc2VuZGxpbmUoZGF0YSwgJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmNhc19vcHRpb25zLCAwKTsKKworCXJldHVybiBwdXNoX3VwZGF0ZV9yZWZzX3N0YXR1cyhkYXRhLCByZW1vdGVfcmVmcywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHB1c2hfcmVmc193aXRoX2V4cG9ydChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpoZWxwZXIsIGV4cG9ydGVyOworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmV2bGlzdF9hcmdzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghZGF0YS0+cnMubnIpCisJCWRpZShfKCJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIpKTsKKworCXNldF9jb21tb25fcHVzaF9vcHRpb25zKHRyYW5zcG9ydCwgZGF0YS0+bmFtZSwgZmxhZ3MpOworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKSB7CisJCWlmIChzZXRfaGVscGVyX29wdGlvbih0cmFuc3BvcnQsICJmb3JjZSIsICJ0cnVlIikgIT0gMCkKKwkJCXdhcm5pbmcoXygiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIpLCBkYXRhLT5uYW1lKTsKKwl9CisKKwloZWxwZXIgPSBnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisKKwl3cml0ZV9jb25zdGFudChoZWxwZXItPmluLCAiZXhwb3J0XG4iKTsKKworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWNoYXIgKnByaXZhdGU7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcygmZGF0YS0+cnMsIHJlZi0+bmFtZSk7CisJCWlmIChwcml2YXRlICYmICFnZXRfb2lkKHByaXZhdGUsICZvaWQpKSB7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiXiVzIiwgcHJpdmF0ZSk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoJnJldmxpc3RfYXJncywKKwkJCQkJCSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpKTsKKwkJCW9pZGNweSgmcmVmLT5vbGRfb2lkLCAmb2lkKTsKKwkJfQorCQlmcmVlKHByaXZhdGUpOworCisJCWlmIChyZWYtPnBlZXJfcmVmKSB7CisJCQlpZiAoc3RyY21wKHJlZi0+bmFtZSwgcmVmLT5wZWVyX3JlZi0+bmFtZSkpIHsKKwkJCQlpZiAoIXJlZi0+ZGVsZXRpb24pIHsKKwkJCQkJY29uc3QgY2hhciAqbmFtZTsKKwkJCQkJaW50IGZsYWc7CisKKwkJCQkJLyogRm9sbG93IHN5bWJvbGljIHJlZnMgKG1haW5seSBmb3IgSEVBRCkuICovCisJCQkJCW5hbWUgPSByZXNvbHZlX3JlZl91bnNhZmUocmVmLT5wZWVyX3JlZi0+bmFtZSwKKwkJCQkJCQkJICBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkJCQkgICZvaWQsICZmbGFnKTsKKwkJCQkJaWYgKCFuYW1lIHx8ICEoZmxhZyAmIFJFRl9JU1NZTVJFRikpCisJCQkJCQluYW1lID0gcmVmLT5wZWVyX3JlZi0+bmFtZTsKKworCQkJCQlzdHJidWZfYWRkZigmYnVmLCAiJXM6JXMiLCBuYW1lLCByZWYtPm5hbWUpOworCQkJCX0gZWxzZQorCQkJCQlzdHJidWZfYWRkZigmYnVmLCAiOiVzIiwgcmVmLT5uYW1lKTsKKworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmV2bGlzdF9hcmdzLCAiLS1yZWZzcGVjIik7CisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZXZsaXN0X2FyZ3MsIGJ1Zi5idWYpOworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJfQorCQkJaWYgKCFyZWYtPmRlbGV0aW9uKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmV2bGlzdF9hcmdzLCByZWYtPnBlZXJfcmVmLT5uYW1lKTsKKwkJfQorCX0KKworCWlmIChnZXRfZXhwb3J0ZXIodHJhbnNwb3J0LCAmZXhwb3J0ZXIsICZyZXZsaXN0X2FyZ3MpKQorCQlkaWUoXygiY291bGRuJ3QgcnVuIGZhc3QtZXhwb3J0IikpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJnJldmxpc3RfYXJncywgMSk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmV4cG9ydGVyKSkKKwkJZGllKF8oImVycm9yIHdoaWxlIHJ1bm5pbmcgZmFzdC1leHBvcnQiKSk7CisJaWYgKHB1c2hfdXBkYXRlX3JlZnNfc3RhdHVzKGRhdGEsIHJlbW90ZV9yZWZzLCBmbGFncykpCisJCXJldHVybiAxOworCisJaWYgKGRhdGEtPmV4cG9ydF9tYXJrcykgeworCQlzdHJidWZfYWRkZigmYnVmLCAiJXMudG1wIiwgZGF0YS0+ZXhwb3J0X21hcmtzKTsKKwkJcmVuYW1lKGJ1Zi5idWYsIGRhdGEtPmV4cG9ydF9tYXJrcyk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1c2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCisJaWYgKHByb2Nlc3NfY29ubmVjdCh0cmFuc3BvcnQsIDEpKSB7CisJCWRvX3Rha2Vfb3Zlcih0cmFuc3BvcnQpOworCQlyZXR1cm4gdHJhbnNwb3J0LT52dGFibGUtPnB1c2hfcmVmcyh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBmbGFncyk7CisJfQorCisJaWYgKCFyZW1vdGVfcmVmcykgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIKKwkJCSAgIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iKSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChkYXRhLT5wdXNoKQorCQlyZXR1cm4gcHVzaF9yZWZzX3dpdGhfcHVzaCh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBmbGFncyk7CisKKwlpZiAoZGF0YS0+ZXhwb3J0KQorCQlyZXR1cm4gcHVzaF9yZWZzX3dpdGhfZXhwb3J0KHRyYW5zcG9ydCwgcmVtb3RlX3JlZnMsIGZsYWdzKTsKKworCXJldHVybiAtMTsKK30KKworCitzdGF0aWMgaW50IGhhc19hdHRyaWJ1dGUoY29uc3QgY2hhciAqYXR0cnMsIGNvbnN0IGNoYXIgKmF0dHIpCit7CisJaW50IGxlbjsKKwlpZiAoIWF0dHJzKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHN0cmxlbihhdHRyKTsKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKnNwYWNlID0gc3RyY2hybnVsKGF0dHJzLCAnICcpOworCQlpZiAobGVuID09IHNwYWNlIC0gYXR0cnMgJiYgIXN0cm5jbXAoYXR0cnMsIGF0dHIsIGxlbikpCisJCQlyZXR1cm4gMTsKKwkJaWYgKCEqc3BhY2UpCisJCQlyZXR1cm4gMDsKKwkJYXR0cnMgPSBzcGFjZSArIDE7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfbGlzdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCwKKwkJCQkgY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKnJlZl9wcmVmaXhlcykKK3sKKwlnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisKKwlpZiAocHJvY2Vzc19jb25uZWN0KHRyYW5zcG9ydCwgZm9yX3B1c2gpKSB7CisJCWRvX3Rha2Vfb3Zlcih0cmFuc3BvcnQpOworCQlyZXR1cm4gdHJhbnNwb3J0LT52dGFibGUtPmdldF9yZWZzX2xpc3QodHJhbnNwb3J0LCBmb3JfcHVzaCwgcmVmX3ByZWZpeGVzKTsKKwl9CisKKwlyZXR1cm4gZ2V0X3JlZnNfbGlzdF91c2luZ19saXN0KHRyYW5zcG9ydCwgZm9yX3B1c2gpOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfbGlzdF91c2luZ19saXN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkJICAgIGludCBmb3JfcHVzaCkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwlzdHJ1Y3QgcmVmICpyZXQgPSBOVUxMOworCXN0cnVjdCByZWYgKip0YWlsID0gJnJldDsKKwlzdHJ1Y3QgcmVmICpwb3NuOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlkYXRhLT5nZXRfcmVmc19saXN0X2NhbGxlZCA9IDE7CisJaGVscGVyID0gZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJaWYgKGRhdGEtPnB1c2ggJiYgZm9yX3B1c2gpCisJCXdyaXRlX3N0cl9pbl9mdWxsKGhlbHBlci0+aW4sICJsaXN0IGZvci1wdXNoXG4iKTsKKwllbHNlCisJCXdyaXRlX3N0cl9pbl9mdWxsKGhlbHBlci0+aW4sICJsaXN0XG4iKTsKKworCXdoaWxlICgxKSB7CisJCWNoYXIgKmVvdiwgKmVvbjsKKwkJaWYgKHJlY3ZsaW5lKGRhdGEsICZidWYpKQorCQkJZXhpdCgxMjgpOworCisJCWlmICghKmJ1Zi5idWYpCisJCQlicmVhazsKKworCQllb3YgPSBzdHJjaHIoYnVmLmJ1ZiwgJyAnKTsKKwkJaWYgKCFlb3YpCisJCQlkaWUoXygibWFsZm9ybWVkIHJlc3BvbnNlIGluIHJlZiBsaXN0OiAlcyIpLCBidWYuYnVmKTsKKwkJZW9uID0gc3RyY2hyKGVvdiArIDEsICcgJyk7CisJCSplb3YgPSAnXDAnOworCQlpZiAoZW9uKQorCQkJKmVvbiA9ICdcMCc7CisJCSp0YWlsID0gYWxsb2NfcmVmKGVvdiArIDEpOworCQlpZiAoYnVmLmJ1ZlswXSA9PSAnQCcpCisJCQkoKnRhaWwpLT5zeW1yZWYgPSB4c3RyZHVwKGJ1Zi5idWYgKyAxKTsKKwkJZWxzZSBpZiAoYnVmLmJ1ZlswXSAhPSAnPycpCisJCQlnZXRfb2lkX2hleChidWYuYnVmLCAmKCp0YWlsKS0+b2xkX29pZCk7CisJCWlmIChlb24pIHsKKwkJCWlmIChoYXNfYXR0cmlidXRlKGVvbiArIDEsICJ1bmNoYW5nZWQiKSkgeworCQkJCSgqdGFpbCktPnN0YXR1cyB8PSBSRUZfU1RBVFVTX1VQVE9EQVRFOworCQkJCWlmIChyZWFkX3JlZigoKnRhaWwpLT5uYW1lLCAmKCp0YWlsKS0+b2xkX29pZCkgPCAwKQorCQkJCQlkaWUoXygiY291bGQgbm90IHJlYWQgcmVmICVzIiksCisJCQkJCSAgICAoKnRhaWwpLT5uYW1lKTsKKwkJCX0KKwkJfQorCQl0YWlsID0gJigoKnRhaWwpLT5uZXh0KTsKKwl9CisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBSZWFkIHJlZiBsaXN0aW5nLlxuIik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlmb3IgKHBvc24gPSByZXQ7IHBvc247IHBvc24gPSBwb3NuLT5uZXh0KQorCQlyZXNvbHZlX3JlbW90ZV9zeW1yZWYocG9zbiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNwb3J0X3Z0YWJsZSB2dGFibGUgPSB7CisJc2V0X2hlbHBlcl9vcHRpb24sCisJZ2V0X3JlZnNfbGlzdCwKKwlmZXRjaCwKKwlwdXNoX3JlZnMsCisJY29ubmVjdF9oZWxwZXIsCisJcmVsZWFzZV9oZWxwZXIKK307CisKK2ludCB0cmFuc3BvcnRfaGVscGVyX2luaXQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CisJZGF0YS0+bmFtZSA9IG5hbWU7CisKKwl0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZChuYW1lKTsKKworCWlmIChnZXRlbnYoIkdJVF9UUkFOU1BPUlRfSEVMUEVSX0RFQlVHIikpCisJCWRlYnVnID0gMTsKKworCXRyYW5zcG9ydC0+ZGF0YSA9IGRhdGE7CisJdHJhbnNwb3J0LT52dGFibGUgPSAmdnRhYmxlOworCXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyA9ICYoZGF0YS0+dHJhbnNwb3J0X29wdGlvbnMpOworCXJldHVybiAwOworfQorCisvKgorICogTGludXggcGlwZXMgY2FuIGJ1ZmZlciA2NTUzNiBieXRlcyBhdCBvbmNlIChhbmQgbW9zdCBwbGF0Zm9ybXMgY2FuCisgKiBidWZmZXIgbGVzcyksIHNvIGF0dGVtcHQgcmVhZHMgYW5kIHdyaXRlcyB3aXRoIHVwIHRvIHRoYXQgc2l6ZS4KKyAqLworI2RlZmluZSBCVUZGRVJTSVpFIDY1NTM2CisvKiBUaGlzIHNob3VsZCBiZSBlbm91Z2ggdG8gaG9sZCBkZWJ1Z2dpbmcgbWVzc2FnZS4gKi8KKyNkZWZpbmUgUEJVRkZFUlNJWkUgODE5MgorCisvKiBQcmludCBiaWRpcmVjdGlvbmFsIHRyYW5zZmVyIGxvb3AgZGVidWcgbWVzc2FnZS4gKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCB0cmFuc2Zlcl9kZWJ1Zyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwkvKgorCSAqIE5FRURTV09SSzogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgdXNlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMsIGFuZAorCSAqIHdlIGVuZCB1cCB1c2luZyBkZWJ1Z19lbmFibGVkIHJhY2lseS4gVGhhdCAic2hvdWxkIG5vdCBtYXR0ZXIiIHNpbmNlCisJICogd2UgYWx3YXlzIHdyaXRlIHRoZSBzYW1lIHZhbHVlLCBidXQgaXQncyBzdGlsbCB3cm9uZy4gVGhpcyBmdW5jdGlvbgorCSAqIGlzIGxpc3RlZCBpbiAudHNhbi1zdXBwcmVzc2lvbnMgZm9yIHRoZSB0aW1lIGJlaW5nLgorCSAqLworCisJdmFfbGlzdCBhcmdzOworCWNoYXIgbXNnYnVmW1BCVUZGRVJTSVpFXTsKKwlzdGF0aWMgaW50IGRlYnVnX2VuYWJsZWQgPSAtMTsKKworCWlmIChkZWJ1Z19lbmFibGVkIDwgMCkKKwkJZGVidWdfZW5hYmxlZCA9IGdldGVudigiR0lUX1RSQU5TTE9PUF9ERUJVRyIpID8gMSA6IDA7CisJaWYgKCFkZWJ1Z19lbmFibGVkKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZzbnByaW50Zihtc2didWYsIFBCVUZGRVJTSVpFLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlRyYW5zZmVyIGxvb3AgZGVidWdnaW5nOiAlc1xuIiwgbXNnYnVmKTsKK30KKworLyogU3RyZWFtIHN0YXRlOiBNb3JlIGRhdGEgbWF5IGJlIGNvbWluZyBpbiB0aGlzIGRpcmVjdGlvbi4gKi8KKyNkZWZpbmUgU1NUQVRFX1RSQU5TRkVSUklORyAwCisvKgorICogU3RyZWFtIHN0YXRlOiBObyBtb3JlIGRhdGEgY29taW5nIGluIHRoaXMgZGlyZWN0aW9uLCBmbHVzaGluZyByZXN0IG9mCisgKiBkYXRhLgorICovCisjZGVmaW5lIFNTVEFURV9GTFVTSElORyAxCisvKiBTdHJlYW0gc3RhdGU6IFRyYW5zZmVyIGluIHRoaXMgZGlyZWN0aW9uIGZpbmlzaGVkLiAqLworI2RlZmluZSBTU1RBVEVfRklOSVNIRUQgMgorCisjZGVmaW5lIFNUQVRFX05FRURTX1JFQURJTkcoc3RhdGUpICgoc3RhdGUpIDw9IFNTVEFURV9UUkFOU0ZFUlJJTkcpCisjZGVmaW5lIFNUQVRFX05FRURTX1dSSVRJTkcoc3RhdGUpICgoc3RhdGUpIDw9IFNTVEFURV9GTFVTSElORykKKyNkZWZpbmUgU1RBVEVfTkVFRFNfQ0xPU0lORyhzdGF0ZSkgKChzdGF0ZSkgPT0gU1NUQVRFX0ZMVVNISU5HKQorCisvKiBVbmlkaXJlY3Rpb25hbCB0cmFuc2Zlci4gKi8KK3N0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciB7CisJLyogU291cmNlICovCisJaW50IHNyYzsKKwkvKiBEZXN0aW5hdGlvbiAqLworCWludCBkZXN0OworCS8qIElzIHNvdXJjZSBzb2NrZXQ/ICovCisJaW50IHNyY19pc19zb2NrOworCS8qIElzIGRlc3RpbmF0aW9uIHNvY2tldD8gKi8KKwlpbnQgZGVzdF9pc19zb2NrOworCS8qIFRyYW5zZmVyIHN0YXRlIChUUkFOU0ZFUlJJTkcvRkxVU0hJTkcvRklOSVNIRUQpICovCisJaW50IHN0YXRlOworCS8qIEJ1ZmZlci4gKi8KKwljaGFyIGJ1ZltCVUZGRVJTSVpFXTsKKwkvKiBCdWZmZXIgdXNlZC4gKi8KKwlzaXplX3QgYnVmdXNlOworCS8qIE5hbWUgb2Ygc291cmNlLiAqLworCWNvbnN0IGNoYXIgKnNyY19uYW1lOworCS8qIE5hbWUgb2YgZGVzdGluYXRpb24uICovCisJY29uc3QgY2hhciAqZGVzdF9uYW1lOworfTsKKworLyogQ2xvc2VzIHRoZSB0YXJnZXQgKGZvciB3cml0aW5nKSBpZiB0cmFuc2ZlciBoYXMgZmluaXNoZWQuICovCitzdGF0aWMgdm9pZCB1ZHRfY2xvc2VfaWZfZmluaXNoZWQoc3RydWN0IHVuaWRpcmVjdGlvbmFsX3RyYW5zZmVyICp0KQoreworCWlmIChTVEFURV9ORUVEU19DTE9TSU5HKHQtPnN0YXRlKSAmJiAhdC0+YnVmdXNlKSB7CisJCXQtPnN0YXRlID0gU1NUQVRFX0ZJTklTSEVEOworCQlpZiAodC0+ZGVzdF9pc19zb2NrKQorCQkJc2h1dGRvd24odC0+ZGVzdCwgU0hVVF9XUik7CisJCWVsc2UKKwkJCWNsb3NlKHQtPmRlc3QpOworCQl0cmFuc2Zlcl9kZWJ1ZygiQ2xvc2VkICVzLiIsIHQtPmRlc3RfbmFtZSk7CisJfQorfQorCisvKgorICogVHJpZXMgdG8gcmVhZCBkYXRhIGZyb20gc291cmNlIGludG8gYnVmZmVyLiBJZiBidWZmZXIgaXMgZnVsbCwKKyAqIG5vIGRhdGEgaXMgcmVhZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IHVkdF9kb19yZWFkKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCkKK3sKKwlzc2l6ZV90IGJ5dGVzOworCisJaWYgKHQtPmJ1ZnVzZSA9PSBCVUZGRVJTSVpFKQorCQlyZXR1cm4gMDsJLyogTm8gc3BhY2UgZm9yIG1vcmUuICovCisKKwl0cmFuc2Zlcl9kZWJ1ZygiJXMgaXMgcmVhZGFibGUiLCB0LT5zcmNfbmFtZSk7CisJYnl0ZXMgPSB4cmVhZCh0LT5zcmMsIHQtPmJ1ZiArIHQtPmJ1ZnVzZSwgQlVGRkVSU0laRSAtIHQtPmJ1ZnVzZSk7CisJaWYgKGJ5dGVzIDwgMCkgeworCQllcnJvcl9lcnJubyhfKCJyZWFkKCVzKSBmYWlsZWQiKSwgdC0+c3JjX25hbWUpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChieXRlcyA9PSAwKSB7CisJCXRyYW5zZmVyX2RlYnVnKCIlcyBFT0YgKHdpdGggJWkgYnl0ZXMgaW4gYnVmZmVyKSIsCisJCQl0LT5zcmNfbmFtZSwgKGludCl0LT5idWZ1c2UpOworCQl0LT5zdGF0ZSA9IFNTVEFURV9GTFVTSElORzsKKwl9IGVsc2UgaWYgKGJ5dGVzID4gMCkgeworCQl0LT5idWZ1c2UgKz0gYnl0ZXM7CisJCXRyYW5zZmVyX2RlYnVnKCJSZWFkICVpIGJ5dGVzIGZyb20gJXMgKGJ1ZmZlciBub3cgYXQgJWkpIiwKKwkJCShpbnQpYnl0ZXMsIHQtPnNyY19uYW1lLCAoaW50KXQtPmJ1ZnVzZSk7CisJfQorCXJldHVybiAwOworfQorCisvKiBUcmllcyB0byB3cml0ZSBkYXRhIGZyb20gYnVmZmVyIGludG8gZGVzdGluYXRpb24uIElmIGJ1ZmZlciBpcyBlbXB0eSwKKyAqIG5vIGRhdGEgaXMgd3JpdHRlbi4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IHVkdF9kb193cml0ZShzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKnQpCit7CisJc3NpemVfdCBieXRlczsKKworCWlmICh0LT5idWZ1c2UgPT0gMCkKKwkJcmV0dXJuIDA7CS8qIE5vdGhpbmcgdG8gd3JpdGUuICovCisKKwl0cmFuc2Zlcl9kZWJ1ZygiJXMgaXMgd3JpdGFibGUiLCB0LT5kZXN0X25hbWUpOworCWJ5dGVzID0geHdyaXRlKHQtPmRlc3QsIHQtPmJ1ZiwgdC0+YnVmdXNlKTsKKwlpZiAoYnl0ZXMgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oIndyaXRlKCVzKSBmYWlsZWQiKSwgdC0+ZGVzdF9uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoYnl0ZXMgPiAwKSB7CisJCXQtPmJ1ZnVzZSAtPSBieXRlczsKKwkJaWYgKHQtPmJ1ZnVzZSkKKwkJCW1lbW1vdmUodC0+YnVmLCB0LT5idWYgKyBieXRlcywgdC0+YnVmdXNlKTsKKwkJdHJhbnNmZXJfZGVidWcoIldyb3RlICVpIGJ5dGVzIHRvICVzIChidWZmZXIgbm93IGF0ICVpKSIsCisJCQkoaW50KWJ5dGVzLCB0LT5kZXN0X25hbWUsIChpbnQpdC0+YnVmdXNlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyogU3RhdGUgb2YgYmlkaXJlY3Rpb25hbCB0cmFuc2ZlciBsb29wLiAqLworc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgeworCS8qIERpcmVjdGlvbiBmcm9tIHByb2dyYW0gdG8gZ2l0LiAqLworCXN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciBwdGc7CisJLyogRGlyZWN0aW9uIGZyb20gZ2l0IHRvIHByb2dyYW0uICovCisJc3RydWN0IHVuaWRpcmVjdGlvbmFsX3RyYW5zZmVyIGd0cDsKK307CisKK3N0YXRpYyB2b2lkICp1ZHRfY29weV90YXNrX3JvdXRpbmUodm9pZCAqdWR0KQoreworCXN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCA9IChzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKil1ZHQ7CisJd2hpbGUgKHQtPnN0YXRlICE9IFNTVEFURV9GSU5JU0hFRCkgeworCQlpZiAoU1RBVEVfTkVFRFNfUkVBRElORyh0LT5zdGF0ZSkpCisJCQlpZiAodWR0X2RvX3JlYWQodCkpCisJCQkJcmV0dXJuIE5VTEw7CisJCWlmIChTVEFURV9ORUVEU19XUklUSU5HKHQtPnN0YXRlKSkKKwkJCWlmICh1ZHRfZG9fd3JpdGUodCkpCisJCQkJcmV0dXJuIE5VTEw7CisJCWlmIChTVEFURV9ORUVEU19DTE9TSU5HKHQtPnN0YXRlKSkKKwkJCXVkdF9jbG9zZV9pZl9maW5pc2hlZCh0KTsKKwl9CisJcmV0dXJuIHVkdDsJLyogSnVzdCBzb21lIG5vbi1OVUxMIHZhbHVlLiAqLworfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCisKKy8qCisgKiBKb2luIHRocmVhZCwgd2l0aCBhcHByb3ByaWF0ZSBlcnJvcnMgb24gZmFpbHVyZS4gTmFtZSBpcyBuYW1lIGZvciB0aGUKKyAqIHRocmVhZCAoZm9yIGVycm9yIG1lc3NhZ2VzKS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9qb2luKHB0aHJlYWRfdCB0aHJlYWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGVycjsKKwl2b2lkICp0cmV0OworCWVyciA9IHB0aHJlYWRfam9pbih0aHJlYWQsICZ0cmV0KTsKKwlpZiAoIXRyZXQpIHsKKwkJZXJyb3IoXygiJXMgdGhyZWFkIGZhaWxlZCIpLCBuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChlcnIpIHsKKwkJZXJyb3IoXygiJXMgdGhyZWFkIGZhaWxlZCB0byBqb2luOiAlcyIpLCBuYW1lLCBzdHJlcnJvcihlcnIpKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU3Bhd24gdGhlIHRyYW5zZmVyIHRhc2tzIGFuZCB0aGVuIHdhaXQgZm9yIHRoZW0uIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9zcGF3bndhaXRfdGFza3Moc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgKnMpCit7CisJcHRocmVhZF90IGd0cF90aHJlYWQ7CisJcHRocmVhZF90IHB0Z190aHJlYWQ7CisJaW50IGVycjsKKwlpbnQgcmV0ID0gMDsKKwllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmZ3RwX3RocmVhZCwgTlVMTCwgdWR0X2NvcHlfdGFza19yb3V0aW5lLAorCQkmcy0+Z3RwKTsKKwlpZiAoZXJyKQorCQlkaWUoXygiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIiksIHN0cmVycm9yKGVycikpOworCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZwdGdfdGhyZWFkLCBOVUxMLCB1ZHRfY29weV90YXNrX3JvdXRpbmUsCisJCSZzLT5wdGcpOworCWlmIChlcnIpCisJCWRpZShfKCJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YTogJXMiKSwgc3RyZXJyb3IoZXJyKSk7CisKKwlyZXQgfD0gdGxvb3Bfam9pbihndHBfdGhyZWFkLCAiR2l0IHRvIHByb2dyYW0gY29weSIpOworCXJldCB8PSB0bG9vcF9qb2luKHB0Z190aHJlYWQsICJQcm9ncmFtIHRvIGdpdCBjb3B5Iik7CisJcmV0dXJuIHJldDsKK30KKyNlbHNlCisKKy8qIENsb3NlIHRoZSBzb3VyY2UgYW5kIHRhcmdldCAoZm9yIHdyaXRpbmcpIGZvciB0cmFuc2Zlci4gKi8KK3N0YXRpYyB2b2lkIHVkdF9raWxsX3RyYW5zZmVyKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCkKK3sKKwl0LT5zdGF0ZSA9IFNTVEFURV9GSU5JU0hFRDsKKwkvKgorCSAqIFNvY2tldCByZWFkIGVuZCBsZWZ0IG9wZW4gaXNuJ3QgYSBkaXNhc3RlciBpZiBub2JvZHkKKwkgKiBhdHRlbXB0cyB0byByZWFkIGZyb20gaXQgKG1pbmd3IGNvbXBhdCBoZWFkZXJzIGRvIG5vdAorCSAqIGhhdmUgU0hVVF9SRCkuLi4KKwkgKgorCSAqIFdlIGNhbid0IGZ1bGx5IGNsb3NlIHRoZSBzb2NrZXQgc2luY2Ugb3RoZXJ3aXNlIGd0cAorCSAqIHRhc2sgd291bGQgZmlyc3QgY2xvc2UgdGhlIHNvY2tldCBpdCBzZW5kcyBkYXRhIHRvCisJICogd2hpbGUgY2xvc2luZyB0aGUgcHRnIGZpbGUgZGVzY3JpcHRvcnMuCisJICovCisJaWYgKCF0LT5zcmNfaXNfc29jaykKKwkJY2xvc2UodC0+c3JjKTsKKwlpZiAodC0+ZGVzdF9pc19zb2NrKQorCQlzaHV0ZG93bih0LT5kZXN0LCBTSFVUX1dSKTsKKwllbHNlCisJCWNsb3NlKHQtPmRlc3QpOworfQorCisvKgorICogSm9pbiBwcm9jZXNzLCB3aXRoIGFwcHJvcHJpYXRlIGVycm9ycyBvbiBmYWlsdXJlLiBOYW1lIGlzIG5hbWUgZm9yIHRoZQorICogcHJvY2VzcyAoZm9yIGVycm9yIG1lc3NhZ2VzKS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9qb2luKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgdHJldDsKKwlpZiAod2FpdHBpZChwaWQsICZ0cmV0LCAwKSA8IDApIHsKKwkJZXJyb3JfZXJybm8oXygiJXMgcHJvY2VzcyBmYWlsZWQgdG8gd2FpdCIpLCBuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghV0lGRVhJVEVEKHRyZXQpIHx8IFdFWElUU1RBVFVTKHRyZXQpKSB7CisJCWVycm9yKF8oIiVzIHByb2Nlc3MgZmFpbGVkIiksIG5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTcGF3biB0aGUgdHJhbnNmZXIgdGFza3MgYW5kIHRoZW4gd2FpdCBmb3IgdGhlbS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsCisgKiAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHRsb29wX3NwYXdud2FpdF90YXNrcyhzdHJ1Y3QgYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9zdGF0ZSAqcykKK3sKKwlwaWRfdCBwaWQxLCBwaWQyOworCWludCByZXQgPSAwOworCisJLyogRm9yayB0aHJlYWQgIzE6IGdpdCB0byBwcm9ncmFtLiAqLworCXBpZDEgPSBmb3JrKCk7CisJaWYgKHBpZDEgPCAwKQorCQlkaWVfZXJybm8oXygiY2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiKSk7CisJZWxzZSBpZiAocGlkMSA9PSAwKSB7CisJCXVkdF9raWxsX3RyYW5zZmVyKCZzLT5wdGcpOworCQlleGl0KHVkdF9jb3B5X3Rhc2tfcm91dGluZSgmcy0+Z3RwKSA/IDAgOiAxKTsKKwl9CisKKwkvKiBGb3JrIHRocmVhZCAjMjogcHJvZ3JhbSB0byBnaXQuICovCisJcGlkMiA9IGZvcmsoKTsKKwlpZiAocGlkMiA8IDApCisJCWRpZV9lcnJubyhfKCJjYW4ndCBzdGFydCB0aHJlYWQgZm9yIGNvcHlpbmcgZGF0YSIpKTsKKwllbHNlIGlmIChwaWQyID09IDApIHsKKwkJdWR0X2tpbGxfdHJhbnNmZXIoJnMtPmd0cCk7CisJCWV4aXQodWR0X2NvcHlfdGFza19yb3V0aW5lKCZzLT5wdGcpID8gMCA6IDEpOworCX0KKworCS8qCisJICogQ2xvc2UgYm90aCBzdHJlYW1zIGluIHBhcmVudCBhcyB0byBub3QgaW50ZXJmZXJlIHdpdGgKKwkgKiBlbmQgb2YgZmlsZSBkZXRlY3Rpb24gYW5kIHdhaXQgZm9yIGJvdGggdGFza3MgdG8gZmluaXNoLgorCSAqLworCXVkdF9raWxsX3RyYW5zZmVyKCZzLT5ndHApOworCXVkdF9raWxsX3RyYW5zZmVyKCZzLT5wdGcpOworCXJldCB8PSB0bG9vcF9qb2luKHBpZDEsICJHaXQgdG8gcHJvZ3JhbSBjb3B5Iik7CisJcmV0IHw9IHRsb29wX2pvaW4ocGlkMiwgIlByb2dyYW0gdG8gZ2l0IGNvcHkiKTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qCisgKiBDb3BpZXMgZGF0YSBmcm9tIHN0ZGluIHRvIG91dHB1dCBhbmQgZnJvbSBpbnB1dCB0byBzdGRvdXQgc2ltdWx0YW5lb3VzbHkuCisgKiBBZGRpdGlvbmFsbHkgZmlsdGVyaW5nIHRocm91Z2ggZ2l2ZW4gZmlsdGVyLiBJZiBmaWx0ZXIgaXMgTlVMTCwgdXNlcworICogaWRlbnRpdHkgZmlsdGVyLgorICovCitpbnQgYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9sb29wKGludCBpbnB1dCwgaW50IG91dHB1dCkKK3sKKwlzdHJ1Y3QgYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9zdGF0ZSBzdGF0ZTsKKworCS8qIEZpbGwgdGhlIHN0YXRlIGZpZWxkcy4gKi8KKwlzdGF0ZS5wdGcuc3JjID0gaW5wdXQ7CisJc3RhdGUucHRnLmRlc3QgPSAxOworCXN0YXRlLnB0Zy5zcmNfaXNfc29jayA9IChpbnB1dCA9PSBvdXRwdXQpOworCXN0YXRlLnB0Zy5kZXN0X2lzX3NvY2sgPSAwOworCXN0YXRlLnB0Zy5zdGF0ZSA9IFNTVEFURV9UUkFOU0ZFUlJJTkc7CisJc3RhdGUucHRnLmJ1ZnVzZSA9IDA7CisJc3RhdGUucHRnLnNyY19uYW1lID0gInJlbW90ZSBpbnB1dCI7CisJc3RhdGUucHRnLmRlc3RfbmFtZSA9ICJzdGRvdXQiOworCisJc3RhdGUuZ3RwLnNyYyA9IDA7CisJc3RhdGUuZ3RwLmRlc3QgPSBvdXRwdXQ7CisJc3RhdGUuZ3RwLnNyY19pc19zb2NrID0gMDsKKwlzdGF0ZS5ndHAuZGVzdF9pc19zb2NrID0gKGlucHV0ID09IG91dHB1dCk7CisJc3RhdGUuZ3RwLnN0YXRlID0gU1NUQVRFX1RSQU5TRkVSUklORzsKKwlzdGF0ZS5ndHAuYnVmdXNlID0gMDsKKwlzdGF0ZS5ndHAuc3JjX25hbWUgPSAic3RkaW4iOworCXN0YXRlLmd0cC5kZXN0X25hbWUgPSAicmVtb3RlIG91dHB1dCI7CisKKwlyZXR1cm4gdGxvb3Bfc3Bhd253YWl0X3Rhc2tzKCZzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS90cmFuc3BvcnQtaW50ZXJuYWwuaCBiL3RyYW5zcG9ydC1pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZGU2MjUKLS0tIC9kZXYvbnVsbAorKysgYi90cmFuc3BvcnQtaW50ZXJuYWwuaApAQCAtMCwwICsxLDcwIEBACisjaWZuZGVmIFRSQU5TUE9SVF9JTlRFUk5BTF9ICisjZGVmaW5lIFRSQU5TUE9SVF9JTlRFUk5BTF9ICisKK3N0cnVjdCByZWY7CitzdHJ1Y3QgdHJhbnNwb3J0Oworc3RydWN0IGFyZ3ZfYXJyYXk7CisKK3N0cnVjdCB0cmFuc3BvcnRfdnRhYmxlIHsKKwkvKioKKwkgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgcG9zaXRpdmUgaWYgdGhlIG9wdGlvbiBpcyBub3QKKwkgKiByZWNvZ25pemVkIG9yIGlzIGluYXBwbGljYWJsZSwgYW5kIG5lZ2F0aXZlIGlmIHRoZSBvcHRpb24KKwkgKiBpcyBhcHBsaWNhYmxlIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC4KKwkgKiovCisJaW50ICgqc2V0X29wdGlvbikoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgY29uc3QgY2hhciAqdmFsdWUpOworCS8qKgorCSAqIFJldHVybnMgYSBsaXN0IG9mIHRoZSByZW1vdGUgc2lkZSdzIHJlZnMuIEluIG9yZGVyIHRvIGFsbG93CisJICogdGhlIHRyYW5zcG9ydCB0byB0cnkgdG8gc2hhcmUgY29ubmVjdGlvbnMsIGZvcl9wdXNoIGlzIGEKKwkgKiBoaW50IGFzIHRvIHdoZXRoZXIgdGhlIHVsdGltYXRlIG9wZXJhdGlvbiBpcyBhIHB1c2ggb3IgYSBmZXRjaC4KKwkgKgorCSAqIElmIGNvbW11bmljYXRpbmcgdXNpbmcgcHJvdG9jb2wgdjIgYSBsaXN0IG9mIHByZWZpeGVzIGNhbiBiZQorCSAqIHByb3ZpZGVkIHRvIGJlIHNlbnQgdG8gdGhlIHNlcnZlciB0byBlbmFibGUgaXQgdG8gbGltaXQgdGhlIHJlZgorCSAqIGFkdmVydGlzZW1lbnQuICBTaW5jZSByZWYgZmlsdGVyaW5nIGlzIGRvbmUgb24gdGhlIHNlcnZlcidzIGVuZCwgYW5kCisJICogb25seSB3aGVuIHVzaW5nIHByb3RvY29sIHYyLCB0aGlzIGxpc3Qgd2lsbCBiZSBpZ25vcmVkIHdoZW4gbm90CisJICogdXNpbmcgcHJvdG9jb2wgdjIgbWVhbmluZyB0aGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gcmVmcyB3aGljaCBkb24ndAorCSAqIG1hdGNoIHRoZSBwcm92aWRlZCByZWZfcHJlZml4ZXMuCisJICoKKwkgKiBJZiB0aGUgdHJhbnNwb3J0IGlzIGFibGUgdG8gZGV0ZXJtaW5lIHRoZSByZW1vdGUgaGFzaCBmb3IKKwkgKiB0aGUgcmVmIHdpdGhvdXQgYSBodWdlIGFtb3VudCBvZiBlZmZvcnQsIGl0IHNob3VsZCBzdG9yZSBpdAorCSAqIGluIHRoZSByZWYncyBvbGRfc2hhMSBmaWVsZDsgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBhbGwgMC4KKwkgKiovCisJc3RydWN0IHJlZiAqKCpnZXRfcmVmc19saXN0KShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpyZWZfcHJlZml4ZXMpOworCisJLyoqCisJICogRmV0Y2ggdGhlIG9iamVjdHMgZm9yIHRoZSBnaXZlbiByZWZzLiBOb3RlIHRoYXQgdGhpcyBnZXRzCisJICogYW4gYXJyYXksIGFuZCBzaG91bGQgaWdub3JlIHRoZSBsaXN0IHN0cnVjdHVyZS4KKwkgKgorCSAqIElmIHRoZSB0cmFuc3BvcnQgZGlkIG5vdCBnZXQgaGFzaGVzIGZvciByZWZzIGluCisJICogZ2V0X3JlZnNfbGlzdCgpLCBpdCBzaG91bGQgc2V0IHRoZSBvbGRfc2hhMSBmaWVsZHMgaW4gdGhlCisJICogcHJvdmlkZWQgcmVmcyBub3cuCisJICoqLworCWludCAoKmZldGNoKShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCByZWZzX25yLCBzdHJ1Y3QgcmVmICoqcmVmcyk7CisKKwkvKioKKwkgKiBQdXNoIHRoZSBvYmplY3RzIGFuZCByZWZzLiBTZW5kIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cywgYW5kCisJICogdGhlbiwgZm9yIGFueSByZWZzIHdoZXJlIHBlZXJfcmVmIGlzIHNldCBhbmQKKwkgKiBwZWVyX3JlZi0+bmV3X29pZCBpcyBkaWZmZXJlbnQgZnJvbSBvbGRfb2lkLCB0ZWxsIHRoZQorCSAqIHJlbW90ZSBzaWRlIHRvIHVwZGF0ZSBlYWNoIHJlZiBpbiB0aGUgbGlzdCBmcm9tIG9sZF9vaWQgdG8KKwkgKiBwZWVyX3JlZi0+bmV3X29pZC4KKwkgKgorCSAqIFdoZXJlIHBvc3NpYmxlLCBzZXQgdGhlIHN0YXR1cyBmb3IgZWFjaCByZWYgYXBwcm9wcmlhdGVseS4KKwkgKgorCSAqIFRoZSB0cmFuc3BvcnQgbXVzdCBtb2RpZnkgbmV3X3NoYTEgaW4gdGhlIHJlZiB0byB0aGUgbmV3CisJICogdmFsdWUgaWYgdGhlIHJlbW90ZSBhY2NlcHRlZCB0aGUgY2hhbmdlLiBOb3RlIHRoYXQgdGhpcworCSAqIGNvdWxkIGJlIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gcGVlcl9yZWYtPm5ld19vaWQgaWYgdGhlCisJICogcHJvY2VzcyBpbnZvbHZlZCBnZW5lcmF0aW5nIG5ldyBjb21taXRzLgorCSAqKi8KKwlpbnQgKCpwdXNoX3JlZnMpKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcywgaW50IGZsYWdzKTsKKwlpbnQgKCpjb25uZWN0KShzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICAgY29uc3QgY2hhciAqZXhlY3V0YWJsZSwgaW50IGZkWzJdKTsKKworCS8qKiBnZXRfcmVmc19saXN0KCksIGZldGNoKCksIGFuZCBwdXNoX3JlZnMoKSBjYW4ga2VlcAorCSAqIHJlc291cmNlcyAoc3VjaCBhcyBhIGNvbm5lY3Rpb24pIHJlc2VydmVkIGZvciBmdXJ0aGVyCisJICogdXNlLiBkaXNjb25uZWN0KCkgcmVsZWFzZXMgdGhlc2UgcmVzb3VyY2VzLgorCSAqKi8KKwlpbnQgKCpkaXNjb25uZWN0KShzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmMgYi90cmFuc3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRjN2RhCi0tLSAvZGV2L251bGwKKysrIGIvdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwxNDAxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAiZmV0Y2gtcGFjay5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzZW5kLXBhY2suaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKyNpbmNsdWRlICJidW5kbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmVmc3BlYy5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LWludGVybmFsLmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorCitzdGF0aWMgaW50IHRyYW5zcG9ydF91c2VfY29sb3IgPSAtMTsKK3N0YXRpYyBjaGFyIHRyYW5zcG9ydF9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfUkVECQkvKiBSRUpFQ1RFRCAqLworfTsKKworZW51bSBjb2xvcl90cmFuc3BvcnQgeworCVRSQU5TUE9SVF9DT0xPUl9SRVNFVCA9IDAsCisJVFJBTlNQT1JUX0NPTE9SX1JFSkVDVEVEID0gMQorfTsKKworc3RhdGljIGludCB0cmFuc3BvcnRfY29sb3JfY29uZmlnKHZvaWQpCit7CisJY29uc3QgY2hhciAqa2V5c1tdID0geworCQkiY29sb3IudHJhbnNwb3J0LnJlc2V0IiwKKwkJImNvbG9yLnRyYW5zcG9ydC5yZWplY3RlZCIKKwl9LCAqa2V5ID0gImNvbG9yLnRyYW5zcG9ydCI7CisJY2hhciAqdmFsdWU7CisJaW50IGk7CisJc3RhdGljIGludCBpbml0aWFsaXplZDsKKworCWlmIChpbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisJaW5pdGlhbGl6ZWQgPSAxOworCisJaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmcoa2V5LCAmdmFsdWUpKQorCQl0cmFuc3BvcnRfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2woa2V5LCB2YWx1ZSk7CisKKwlpZiAoIXdhbnRfY29sb3Jfc3RkZXJyKHRyYW5zcG9ydF91c2VfY29sb3IpKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleXMpOyBpKyspCisJCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKGtleXNbaV0sICZ2YWx1ZSkpIHsKKwkJCWlmICghdmFsdWUpCisJCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGtleXNbaV0pOworCQkJaWYgKGNvbG9yX3BhcnNlKHZhbHVlLCB0cmFuc3BvcnRfY29sb3JzW2ldKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRyYW5zcG9ydF9nZXRfY29sb3IoZW51bSBjb2xvcl90cmFuc3BvcnQgaXgpCit7CisJaWYgKHdhbnRfY29sb3Jfc3RkZXJyKHRyYW5zcG9ydF91c2VfY29sb3IpKQorCQlyZXR1cm4gdHJhbnNwb3J0X2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgdm9pZCBzZXRfdXBzdHJlYW1zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcywKKwlpbnQgcHJldGVuZCkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+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+ZmRbMV0pOworCWNsb3NlKGRhdGEtPmZkWzBdKTsKKwlyZXQgfD0gZmluaXNoX2Nvbm5lY3QoZGF0YS0+Y29ubik7CisJZGF0YS0+Y29ubiA9IE5VTEw7CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNvbm5lY3RfZ2l0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmV4ZWN1dGFibGUsIGludCBmZFsyXSkKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWRhdGEtPmNvbm4gPSBnaXRfY29ubmVjdChkYXRhLT5mZCwgdHJhbnNwb3J0LT51cmwsCisJCQkJIGV4ZWN1dGFibGUsIDApOworCWZkWzBdID0gZGF0YS0+ZmRbMF07CisJZmRbMV0gPSBkYXRhLT5mZFsxXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNjb25uZWN0X2dpdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpZiAoZGF0YS0+Y29ubikgeworCQlpZiAoZGF0YS0+Z290X3JlbW90ZV9oZWFkcyAmJiAhdHJhbnNwb3J0LT5zdGF0ZWxlc3NfcnBjKQorCQkJcGFja2V0X2ZsdXNoKGRhdGEtPmZkWzFdKTsKKwkJY2xvc2UoZGF0YS0+ZmRbMF0pOworCQljbG9zZShkYXRhLT5mZFsxXSk7CisJCWZpbmlzaF9jb25uZWN0KGRhdGEtPmNvbm4pOworCX0KKworCWZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNwb3J0X3Z0YWJsZSB0YWtlbl9vdmVyX3Z0YWJsZSA9IHsKKwlOVUxMLAorCWdldF9yZWZzX3ZpYV9jb25uZWN0LAorCWZldGNoX3JlZnNfdmlhX3BhY2ssCisJZ2l0X3RyYW5zcG9ydF9wdXNoLAorCU5VTEwsCisJZGlzY29ubmVjdF9naXQKK307CisKK3ZvaWQgdHJhbnNwb3J0X3Rha2Vfb3ZlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNoaWxkKQoreworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X2RhdGEgKmRhdGE7CisKKwlpZiAoIXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucykKKwkJQlVHKCJ0YWtpbmcgb3ZlciB0cmFuc3BvcnQgcmVxdWlyZXMgbm9uLU5VTEwgIgorCQkgICAgInNtYXJ0X29wdGlvbnMgZmllbGQuIik7CisKKwlkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwlkYXRhLT5vcHRpb25zID0gKnRyYW5zcG9ydC0+c21hcnRfb3B0aW9uczsKKwlkYXRhLT5jb25uID0gY2hpbGQ7CisJZGF0YS0+ZmRbMF0gPSBkYXRhLT5jb25uLT5vdXQ7CisJZGF0YS0+ZmRbMV0gPSBkYXRhLT5jb25uLT5pbjsKKwlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMDsKKwl0cmFuc3BvcnQtPmRhdGEgPSBkYXRhOworCisJdHJhbnNwb3J0LT52dGFibGUgPSAmdGFrZW5fb3Zlcl92dGFibGU7CisJdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zID0gJihkYXRhLT5vcHRpb25zKTsKKworCXRyYW5zcG9ydC0+Y2Fubm90X3JldXNlID0gMTsKK30KKworc3RhdGljIGludCBpc19maWxlKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaWYgKHN0YXQodXJsLCAmYnVmKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIFNfSVNSRUcoYnVmLnN0X21vZGUpOworfQorCitzdGF0aWMgaW50IGV4dGVybmFsX3NwZWNpZmljYXRpb25fbGVuKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlyZXR1cm4gc3RyY2hyKHVybCwgJzonKSAtIHVybDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHJvdG9jb2xfd2hpdGVsaXN0KHZvaWQpCit7CisJc3RhdGljIGludCBlbmFibGVkID0gLTE7CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBhbGxvd2VkID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwlpZiAoZW5hYmxlZCA8IDApIHsKKwkJY29uc3QgY2hhciAqdiA9IGdldGVudigiR0lUX0FMTE9XX1BST1RPQ09MIik7CisJCWlmICh2KSB7CisJCQlzdHJpbmdfbGlzdF9zcGxpdCgmYWxsb3dlZCwgdiwgJzonLCAtMSk7CisJCQlzdHJpbmdfbGlzdF9zb3J0KCZhbGxvd2VkKTsKKwkJCWVuYWJsZWQgPSAxOworCQl9IGVsc2UgeworCQkJZW5hYmxlZCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gZW5hYmxlZCA/ICZhbGxvd2VkIDogTlVMTDsKK30KKworZW51bSBwcm90b2NvbF9hbGxvd19jb25maWcgeworCVBST1RPQ09MX0FMTE9XX05FVkVSID0gMCwKKwlQUk9UT0NPTF9BTExPV19VU0VSX09OTFksCisJUFJPVE9DT0xfQUxMT1dfQUxXQVlTCit9OworCitzdGF0aWMgZW51bSBwcm90b2NvbF9hbGxvd19jb25maWcgcGFyc2VfcHJvdG9jb2xfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwKKwkJCQkJCQljb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJhbHdheXMiKSkKKwkJcmV0dXJuIFBST1RPQ09MX0FMTE9XX0FMV0FZUzsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIm5ldmVyIikpCisJCXJldHVybiBQUk9UT0NPTF9BTExPV19ORVZFUjsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInVzZXIiKSkKKwkJcmV0dXJuIFBST1RPQ09MX0FMTE9XX1VTRVJfT05MWTsKKworCWRpZShfKCJ1bmtub3duIHZhbHVlIGZvciBjb25maWcgJyVzJzogJXMiKSwga2V5LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBlbnVtIHByb3RvY29sX2FsbG93X2NvbmZpZyBnZXRfcHJvdG9jb2xfY29uZmlnKGNvbnN0IGNoYXIgKnR5cGUpCit7CisJY2hhciAqa2V5ID0geHN0cmZtdCgicHJvdG9jb2wuJXMuYWxsb3ciLCB0eXBlKTsKKwljaGFyICp2YWx1ZTsKKworCS8qIGZpcnN0IGNoZWNrIHRoZSBwZXItcHJvdG9jb2wgY29uZmlnICovCisJaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmcoa2V5LCAmdmFsdWUpKSB7CisJCWVudW0gcHJvdG9jb2xfYWxsb3dfY29uZmlnIHJldCA9CisJCQlwYXJzZV9wcm90b2NvbF9jb25maWcoa2V5LCB2YWx1ZSk7CisJCWZyZWUoa2V5KTsKKwkJZnJlZSh2YWx1ZSk7CisJCXJldHVybiByZXQ7CisJfQorCWZyZWUoa2V5KTsKKworCS8qIGlmIGRlZmluZWQsIGZhbGxiYWNrIHRvIHVzZXItZGVmaW5lZCBkZWZhdWx0IGZvciB1bmtub3duIHByb3RvY29scyAqLworCWlmICghZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJwcm90b2NvbC5hbGxvdyIsICZ2YWx1ZSkpIHsKKwkJZW51bSBwcm90b2NvbF9hbGxvd19jb25maWcgcmV0ID0KKwkJCXBhcnNlX3Byb3RvY29sX2NvbmZpZygicHJvdG9jb2wuYWxsb3ciLCB2YWx1ZSk7CisJCWZyZWUodmFsdWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGZhbGxiYWNrIHRvIGJ1aWx0LWluIGRlZmF1bHRzICovCisJLyoga25vd24gc2FmZSAqLworCWlmICghc3RyY21wKHR5cGUsICJodHRwIikgfHwKKwkgICAgIXN0cmNtcCh0eXBlLCAiaHR0cHMiKSB8fAorCSAgICAhc3RyY21wKHR5cGUsICJnaXQiKSB8fAorCSAgICAhc3RyY21wKHR5cGUsICJzc2giKSB8fAorCSAgICAhc3RyY21wKHR5cGUsICJmaWxlIikpCisJCXJldHVybiBQUk9UT0NPTF9BTExPV19BTFdBWVM7CisKKwkvKiBrbm93biBzY2FyeTsgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24gKi8KKwlpZiAoIXN0cmNtcCh0eXBlLCAiZXh0IikpCisJCXJldHVybiBQUk9UT0NPTF9BTExPV19ORVZFUjsKKworCS8qIHVua25vd247IGJ5IGRlZmF1bHQgbGV0IHRoZW0gYmUgdXNlZCBvbmx5IGRpcmVjdGx5IGJ5IHRoZSB1c2VyICovCisJcmV0dXJuIFBST1RPQ09MX0FMTE9XX1VTRVJfT05MWTsKK30KKworaW50IGlzX3RyYW5zcG9ydF9hbGxvd2VkKGNvbnN0IGNoYXIgKnR5cGUsIGludCBmcm9tX3VzZXIpCit7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICp3aGl0ZWxpc3QgPSBwcm90b2NvbF93aGl0ZWxpc3QoKTsKKwlpZiAod2hpdGVsaXN0KQorCQlyZXR1cm4gc3RyaW5nX2xpc3RfaGFzX3N0cmluZyh3aGl0ZWxpc3QsIHR5cGUpOworCisJc3dpdGNoIChnZXRfcHJvdG9jb2xfY29uZmlnKHR5cGUpKSB7CisJY2FzZSBQUk9UT0NPTF9BTExPV19BTFdBWVM6CisJCXJldHVybiAxOworCWNhc2UgUFJPVE9DT0xfQUxMT1dfTkVWRVI6CisJCXJldHVybiAwOworCWNhc2UgUFJPVE9DT0xfQUxMT1dfVVNFUl9PTkxZOgorCQlpZiAoZnJvbV91c2VyIDwgMCkKKwkJCWZyb21fdXNlciA9IGdpdF9lbnZfYm9vbCgiR0lUX1BST1RPQ09MX0ZST01fVVNFUiIsIDEpOworCQlyZXR1cm4gZnJvbV91c2VyOworCX0KKworCUJVRygiaW52YWxpZCBwcm90b2NvbF9hbGxvd19jb25maWcgdHlwZSIpOworfQorCit2b2lkIHRyYW5zcG9ydF9jaGVja19hbGxvd2VkKGNvbnN0IGNoYXIgKnR5cGUpCit7CisJaWYgKCFpc190cmFuc3BvcnRfYWxsb3dlZCh0eXBlLCAtMSkpCisJCWRpZShfKCJ0cmFuc3BvcnQgJyVzJyBub3QgYWxsb3dlZCIpLCB0eXBlKTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFuc3BvcnRfdnRhYmxlIGJ1bmRsZV92dGFibGUgPSB7CisJTlVMTCwKKwlnZXRfcmVmc19mcm9tX2J1bmRsZSwKKwlmZXRjaF9yZWZzX2Zyb21fYnVuZGxlLAorCU5VTEwsCisJTlVMTCwKKwljbG9zZV9idW5kbGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNwb3J0X3Z0YWJsZSBidWlsdGluX3NtYXJ0X3Z0YWJsZSA9IHsKKwlOVUxMLAorCWdldF9yZWZzX3ZpYV9jb25uZWN0LAorCWZldGNoX3JlZnNfdmlhX3BhY2ssCisJZ2l0X3RyYW5zcG9ydF9wdXNoLAorCWNvbm5lY3RfZ2l0LAorCWRpc2Nvbm5lY3RfZ2l0Cit9OworCitzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnRfZ2V0KHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQoreworCWNvbnN0IGNoYXIgKmhlbHBlcjsKKwlzdHJ1Y3QgdHJhbnNwb3J0ICpyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmV0KSk7CisKKwlyZXQtPnByb2dyZXNzID0gaXNhdHR5KDIpOworCisJaWYgKCFyZW1vdGUpCisJCUJVRygiTm8gcmVtb3RlIHByb3ZpZGVkIHRvIHRyYW5zcG9ydF9nZXQoKSIpOworCisJcmV0LT5nb3RfcmVtb3RlX3JlZnMgPSAwOworCXJldC0+cmVtb3RlID0gcmVtb3RlOworCWhlbHBlciA9IHJlbW90ZS0+Zm9yZWlnbl92Y3M7CisKKwlpZiAoIXVybCAmJiByZW1vdGUtPnVybCkKKwkJdXJsID0gcmVtb3RlLT51cmxbMF07CisJcmV0LT51cmwgPSB1cmw7CisKKwkvKiBtYXliZSBpdCBpcyBhIGZvcmVpZ24gVVJMPyAqLworCWlmICh1cmwpIHsKKwkJY29uc3QgY2hhciAqcCA9IHVybDsKKworCQl3aGlsZSAoaXNfdXJsc2NoZW1lY2hhcihwID09IHVybCwgKnApKQorCQkJcCsrOworCQlpZiAoc3RhcnRzX3dpdGgocCwgIjo6IikpCisJCQloZWxwZXIgPSB4c3RybmR1cCh1cmwsIHAgLSB1cmwpOworCX0KKworCWlmIChoZWxwZXIpIHsKKwkJdHJhbnNwb3J0X2hlbHBlcl9pbml0KHJldCwgaGVscGVyKTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKHVybCwgInJzeW5jOiIpKSB7CisJCWRpZShfKCJnaXQtb3Zlci1yc3luYyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIikpOworCX0gZWxzZSBpZiAodXJsX2lzX2xvY2FsX25vdF9zc2godXJsKSAmJiBpc19maWxlKHVybCkgJiYgaXNfYnVuZGxlKHVybCwgMSkpIHsKKwkJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CisJCXRyYW5zcG9ydF9jaGVja19hbGxvd2VkKCJmaWxlIik7CisJCXJldC0+ZGF0YSA9IGRhdGE7CisJCXJldC0+dnRhYmxlID0gJmJ1bmRsZV92dGFibGU7CisJCXJldC0+c21hcnRfb3B0aW9ucyA9IE5VTEw7CisJfSBlbHNlIGlmICghaXNfdXJsKHVybCkKKwkJfHwgc3RhcnRzX3dpdGgodXJsLCAiZmlsZTovLyIpCisJCXx8IHN0YXJ0c193aXRoKHVybCwgImdpdDovLyIpCisJCXx8IHN0YXJ0c193aXRoKHVybCwgInNzaDovLyIpCisJCXx8IHN0YXJ0c193aXRoKHVybCwgImdpdCtzc2g6Ly8iKSAvKiBkZXByZWNhdGVkIC0gZG8gbm90IHVzZSAqLworCQl8fCBzdGFydHNfd2l0aCh1cmwsICJzc2grZ2l0Oi8vIikgLyogZGVwcmVjYXRlZCAtIGRvIG5vdCB1c2UgKi8KKwkJKSB7CisJCS8qCisJCSAqIFRoZXNlIGFyZSBidWlsdGluIHNtYXJ0IHRyYW5zcG9ydHM7ICJhbGxvd2VkIiB0cmFuc3BvcnRzCisJCSAqIHdpbGwgYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgaW4gZ2l0X2Nvbm5lY3QuCisJCSAqLworCQlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwkJcmV0LT5kYXRhID0gZGF0YTsKKwkJcmV0LT52dGFibGUgPSAmYnVpbHRpbl9zbWFydF92dGFibGU7CisJCXJldC0+c21hcnRfb3B0aW9ucyA9ICYoZGF0YS0+b3B0aW9ucyk7CisKKwkJZGF0YS0+Y29ubiA9IE5VTEw7CisJCWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMgPSAwOworCX0gZWxzZSB7CisJCS8qIFVua25vd24gcHJvdG9jb2wgaW4gVVJMLiBQYXNzIHRvIGV4dGVybmFsIGhhbmRsZXIuICovCisJCWludCBsZW4gPSBleHRlcm5hbF9zcGVjaWZpY2F0aW9uX2xlbih1cmwpOworCQljaGFyICpoYW5kbGVyID0geG1lbWR1cHoodXJsLCBsZW4pOworCQl0cmFuc3BvcnRfaGVscGVyX2luaXQocmV0LCBoYW5kbGVyKTsKKwl9CisKKwlpZiAocmV0LT5zbWFydF9vcHRpb25zKSB7CisJCXJldC0+c21hcnRfb3B0aW9ucy0+dGhpbiA9IDE7CisJCXJldC0+c21hcnRfb3B0aW9ucy0+dXBsb2FkcGFjayA9ICJnaXQtdXBsb2FkLXBhY2siOworCQlpZiAocmVtb3RlLT51cGxvYWRwYWNrKQorCQkJcmV0LT5zbWFydF9vcHRpb25zLT51cGxvYWRwYWNrID0gcmVtb3RlLT51cGxvYWRwYWNrOworCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnJlY2VpdmVwYWNrID0gImdpdC1yZWNlaXZlLXBhY2siOworCQlpZiAocmVtb3RlLT5yZWNlaXZlcGFjaykKKwkJCXJldC0+c21hcnRfb3B0aW9ucy0+cmVjZWl2ZXBhY2sgPSByZW1vdGUtPnJlY2VpdmVwYWNrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCB0cmFuc3BvcnRfc2V0X29wdGlvbihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IGdpdF9yZXBvcnRzID0gMSwgcHJvdG9jb2xfcmVwb3J0cyA9IDE7CisKKwlpZiAodHJhbnNwb3J0LT5zbWFydF9vcHRpb25zKQorCQlnaXRfcmVwb3J0cyA9IHNldF9naXRfb3B0aW9uKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucywKKwkJCQkJICAgICBuYW1lLCB2YWx1ZSk7CisKKwlpZiAodHJhbnNwb3J0LT52dGFibGUtPnNldF9vcHRpb24pCisJCXByb3RvY29sX3JlcG9ydHMgPSB0cmFuc3BvcnQtPnZ0YWJsZS0+c2V0X29wdGlvbih0cmFuc3BvcnQsCisJCQkJCQkJCSBuYW1lLCB2YWx1ZSk7CisKKwkvKiBJZiBlaXRoZXIgcmVwb3J0IGlzIDAsIHJlcG9ydCAwIChzdWNjZXNzKS4gKi8KKwlpZiAoIWdpdF9yZXBvcnRzIHx8ICFwcm90b2NvbF9yZXBvcnRzKQorCQlyZXR1cm4gMDsKKwkvKiBJZiBlaXRoZXIgcmVwb3J0cyAtMSAoaW52YWxpZCB2YWx1ZSksIHJlcG9ydCAtMS4gKi8KKwlpZiAoKGdpdF9yZXBvcnRzID09IC0xKSB8fCAocHJvdG9jb2xfcmVwb3J0cyA9PSAtMSkpCisJCXJldHVybiAtMTsKKwkvKiBPdGhlcndpc2UgaWYgYm90aCByZXBvcnQgdW5rbm93biwgcmVwb3J0IHVua25vd24uICovCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgdHJhbnNwb3J0X3NldF92ZXJib3NpdHkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgdmVyYm9zaXR5LAorCWludCBmb3JjZV9wcm9ncmVzcykKK3sKKwlpZiAodmVyYm9zaXR5ID49IDEpCisJCXRyYW5zcG9ydC0+dmVyYm9zZSA9IHZlcmJvc2l0eSA8PSAzID8gdmVyYm9zaXR5IDogMzsKKwlpZiAodmVyYm9zaXR5IDwgMCkKKwkJdHJhbnNwb3J0LT52ZXJib3NlID0gLTE7CisKKwkvKioKKwkgKiBSdWxlcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJlcG9ydCBwcm9ncmVzcyAocHJvY2Vzc2luZyBhYm9ydHMKKwkgKiB3aGVuIGEgcnVsZSBpcyBzYXRpc2ZpZWQpOgorCSAqCisJICogICAuIFJlcG9ydCBwcm9ncmVzcywgaWYgZm9yY2VfcHJvZ3Jlc3MgaXMgMSAoaWUuIC0tcHJvZ3Jlc3MpLgorCSAqICAgLiBEb24ndCByZXBvcnQgcHJvZ3Jlc3MsIGlmIGZvcmNlX3Byb2dyZXNzIGlzIDAgKGllLiAtLW5vLXByb2dyZXNzKS4KKwkgKiAgIC4gRG9uJ3QgcmVwb3J0IHByb2dyZXNzLCBpZiB2ZXJib3NpdHkgPCAwIChpZS4gLXEvLS1xdWlldCApLgorCSAqICAgLiBSZXBvcnQgcHJvZ3Jlc3MgaWYgaXNhdHR5KDIpIGlzIDEuCisJICoqLworCWlmIChmb3JjZV9wcm9ncmVzcyA+PSAwKQorCQl0cmFuc3BvcnQtPnByb2dyZXNzID0gISFmb3JjZV9wcm9ncmVzczsKKwllbHNlCisJCXRyYW5zcG9ydC0+cHJvZ3Jlc3MgPSB2ZXJib3NpdHkgPj0gMCAmJiBpc2F0dHkoMik7Cit9CisKK3N0YXRpYyB2b2lkIGRpZV93aXRoX3VucHVzaGVkX3N1Ym1vZHVsZXMoc3RydWN0IHN0cmluZ19saXN0ICpuZWVkc19wdXNoaW5nKQoreworCWludCBpOworCisJZnByaW50ZihzdGRlcnIsIF8oIlRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIHBhdGhzIGNvbnRhaW4gY2hhbmdlcyB0aGF0IGNhblxuIgorCQkJIm5vdCBiZSBmb3VuZCBvbiBhbnkgcmVtb3RlOlxuIikpOworCWZvciAoaSA9IDA7IGkgPCBuZWVkc19wdXNoaW5nLT5ucjsgaSsrKQorCQlmcHJpbnRmKHN0ZGVyciwgIiAgJXNcbiIsIG5lZWRzX3B1c2hpbmctPml0ZW1zW2ldLnN0cmluZyk7CisJZnByaW50ZihzdGRlcnIsIF8oIlxuUGxlYXNlIHRyeVxuXG4iCisJCQkgICIJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG5cbiIKKwkJCSAgIm9yIGNkIHRvIHRoZSBwYXRoIGFuZCB1c2VcblxuIgorCQkJICAiCWdpdCBwdXNoXG5cbiIKKwkJCSAgInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cblxuIikpOworCisJc3RyaW5nX2xpc3RfY2xlYXIobmVlZHNfcHVzaGluZywgMCk7CisKKwlkaWUoXygiQWJvcnRpbmcuIikpOworfQorCitzdGF0aWMgaW50IHJ1bl9wcmVfcHVzaF9ob29rKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMpCit7CisJaW50IHJldCA9IDAsIHg7CisJc3RydWN0IHJlZiAqcjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmOworCWNvbnN0IGNoYXIgKmFyZ3ZbNF07CisKKwlpZiAoIShhcmd2WzBdID0gZmluZF9ob29rKCJwcmUtcHVzaCIpKSkKKwkJcmV0dXJuIDA7CisKKwlhcmd2WzFdID0gdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWU7CisJYXJndlsyXSA9IHRyYW5zcG9ydC0+dXJsOworCWFyZ3ZbM10gPSBOVUxMOworCisJcHJvYy5hcmd2ID0gYXJndjsKKwlwcm9jLmluID0gLTE7CisJcHJvYy50cmFjZTJfaG9va19uYW1lID0gInByZS1wdXNoIjsKKworCWlmIChzdGFydF9jb21tYW5kKCZwcm9jKSkgeworCQlmaW5pc2hfY29tbWFuZCgmcHJvYyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJc3RyYnVmX2luaXQoJmJ1ZiwgMjU2KTsKKworCWZvciAociA9IHJlbW90ZV9yZWZzOyByOyByID0gci0+bmV4dCkgeworCQlpZiAoIXItPnBlZXJfcmVmKSBjb250aW51ZTsKKwkJaWYgKHItPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRCkgY29udGludWU7CisJCWlmIChyLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEUpIGNvbnRpbnVlOworCQlpZiAoci0+c3RhdHVzID09IFJFRl9TVEFUVVNfVVBUT0RBVEUpIGNvbnRpbnVlOworCisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoICZidWYsICIlcyAlcyAlcyAlc1xuIiwKKwkJCSByLT5wZWVyX3JlZi0+bmFtZSwgb2lkX3RvX2hleCgmci0+bmV3X29pZCksCisJCQkgci0+bmFtZSwgb2lkX3RvX2hleCgmci0+b2xkX29pZCkpOworCisJCWlmICh3cml0ZV9pbl9mdWxsKHByb2MuaW4sIGJ1Zi5idWYsIGJ1Zi5sZW4pIDwgMCkgeworCQkJLyogV2UgZG8gbm90IG1pbmQgaWYgYSBob29rIGRvZXMgbm90IHJlYWQgYWxsIHJlZnMuICovCisJCQlpZiAoZXJybm8gIT0gRVBJUEUpCisJCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJeCA9IGNsb3NlKHByb2MuaW4pOworCWlmICghcmV0KQorCQlyZXQgPSB4OworCisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCisJeCA9IGZpbmlzaF9jb21tYW5kKCZwcm9jKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0geDsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB0cmFuc3BvcnRfcHVzaChzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkgICBzdHJ1Y3QgcmVmc3BlYyAqcnMsIGludCBmbGFncywKKwkJICAgdW5zaWduZWQgaW50ICpyZWplY3RfcmVhc29ucykKK3sKKwkqcmVqZWN0X3JlYXNvbnMgPSAwOworCisJaWYgKHRyYW5zcG9ydF9jb2xvcl9jb25maWcoKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICh0cmFuc3BvcnQtPnZ0YWJsZS0+cHVzaF9yZWZzKSB7CisJCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOworCQlzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisJCWludCBtYXRjaF9mbGFncyA9IE1BVENIX1JFRlNfTk9ORTsKKwkJaW50IHZlcmJvc2UgPSAodHJhbnNwb3J0LT52ZXJib3NlID4gMCk7CisJCWludCBxdWlldCA9ICh0cmFuc3BvcnQtPnZlcmJvc2UgPCAwKTsKKwkJaW50IHBvcmNlbGFpbiA9IGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfUE9SQ0VMQUlOOworCQlpbnQgcHJldGVuZCA9IGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTjsKKwkJaW50IHB1c2hfcmV0LCByZXQsIGVycjsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgcmVmX3ByZWZpeGVzID0gQVJHVl9BUlJBWV9JTklUOworCisJCWlmIChjaGVja19wdXNoX3JlZnMobG9jYWxfcmVmcywgcnMpIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQlyZWZzcGVjX3JlZl9wcmVmaXhlcyhycywgJnJlZl9wcmVmaXhlcyk7CisKKwkJdHJhY2UyX3JlZ2lvbl9lbnRlcigidHJhbnNwb3J0X3B1c2giLCAiZ2V0X3JlZnNfbGlzdCIsIHIpOworCQlyZW1vdGVfcmVmcyA9IHRyYW5zcG9ydC0+dnRhYmxlLT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgMSwKKwkJCQkJCQkgICAgICAgJnJlZl9wcmVmaXhlcyk7CisJCXRyYWNlMl9yZWdpb25fbGVhdmUoInRyYW5zcG9ydF9wdXNoIiwgImdldF9yZWZzX2xpc3QiLCByKTsKKworCQlhcmd2X2FycmF5X2NsZWFyKCZyZWZfcHJlZml4ZXMpOworCisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkKKwkJCW1hdGNoX2ZsYWdzIHw9IE1BVENIX1JFRlNfQUxMOworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpCisJCQltYXRjaF9mbGFncyB8PSBNQVRDSF9SRUZTX01JUlJPUjsKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfUFJVTkUpCisJCQltYXRjaF9mbGFncyB8PSBNQVRDSF9SRUZTX1BSVU5FOworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9GT0xMT1dfVEFHUykKKwkJCW1hdGNoX2ZsYWdzIHw9IE1BVENIX1JFRlNfRk9MTE9XX1RBR1M7CisKKwkJaWYgKG1hdGNoX3B1c2hfcmVmcyhsb2NhbF9yZWZzLCAmcmVtb3RlX3JlZnMsIHJzLCBtYXRjaF9mbGFncykpCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyAmJgorCQkgICAgdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5jYXMgJiYKKwkJICAgICFpc19lbXB0eV9jYXModHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5jYXMpKQorCQkJYXBwbHlfcHVzaF9jYXModHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5jYXMsCisJCQkJICAgICAgIHRyYW5zcG9ydC0+cmVtb3RlLCByZW1vdGVfcmVmcyk7CisKKwkJc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2gocmVtb3RlX3JlZnMsCisJCQlmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUiwKKwkJCWZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0UpOworCisJCWlmICghKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTk9fSE9PSykpCisJCQlpZiAocnVuX3ByZV9wdXNoX2hvb2sodHJhbnNwb3J0LCByZW1vdGVfcmVmcykpCisJCQkJcmV0dXJuIC0xOworCisJCWlmICgoZmxhZ3MgJiAoVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQgfAorCQkJICAgICAgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTkxZKSkgJiYKKwkJICAgICFpc19iYXJlX3JlcG9zaXRvcnkoKSkgeworCQkJc3RydWN0IHJlZiAqcmVmID0gcmVtb3RlX3JlZnM7CisJCQlzdHJ1Y3Qgb2lkX2FycmF5IGNvbW1pdHMgPSBPSURfQVJSQVlfSU5JVDsKKworCQkJdHJhY2UyX3JlZ2lvbl9lbnRlcigidHJhbnNwb3J0X3B1c2giLCAicHVzaF9zdWJtb2R1bGVzIiwgcik7CisJCQlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQkJaWYgKCFpc19udWxsX29pZCgmcmVmLT5uZXdfb2lkKSkKKwkJCQkJb2lkX2FycmF5X2FwcGVuZCgmY29tbWl0cywKKwkJCQkJCQkgICZyZWYtPm5ld19vaWQpOworCisJCQlpZiAoIXB1c2hfdW5wdXNoZWRfc3VibW9kdWxlcyhyLAorCQkJCQkJICAgICAgJmNvbW1pdHMsCisJCQkJCQkgICAgICB0cmFuc3BvcnQtPnJlbW90ZSwKKwkJCQkJCSAgICAgIHJzLAorCQkJCQkJICAgICAgdHJhbnNwb3J0LT5wdXNoX29wdGlvbnMsCisJCQkJCQkgICAgICBwcmV0ZW5kKSkgeworCQkJCW9pZF9hcnJheV9jbGVhcigmY29tbWl0cyk7CisJCQkJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgidHJhbnNwb3J0X3B1c2giLCAicHVzaF9zdWJtb2R1bGVzIiwgcik7CisJCQkJZGllKF8oImZhaWxlZCB0byBwdXNoIGFsbCBuZWVkZWQgc3VibW9kdWxlcyIpKTsKKwkJCX0KKwkJCW9pZF9hcnJheV9jbGVhcigmY29tbWl0cyk7CisJCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJ0cmFuc3BvcnRfcHVzaCIsICJwdXNoX3N1Ym1vZHVsZXMiLCByKTsKKwkJfQorCisJCWlmICgoKGZsYWdzICYgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19DSEVDSykgfHwKKwkJICAgICAoKGZsYWdzICYgKFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EIHwKKwkJCQlUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OTFkpKSAmJgorCQkgICAgICAhcHJldGVuZCkpICYmICFpc19iYXJlX3JlcG9zaXRvcnkoKSkgeworCQkJc3RydWN0IHJlZiAqcmVmID0gcmVtb3RlX3JlZnM7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmVlZHNfcHVzaGluZyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQkJc3RydWN0IG9pZF9hcnJheSBjb21taXRzID0gT0lEX0FSUkFZX0lOSVQ7CisKKwkJCXRyYWNlMl9yZWdpb25fZW50ZXIoInRyYW5zcG9ydF9wdXNoIiwgImNoZWNrX3N1Ym1vZHVsZXMiLCByKTsKKwkJCWZvciAoOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCQlpZiAoIWlzX251bGxfb2lkKCZyZWYtPm5ld19vaWQpKQorCQkJCQlvaWRfYXJyYXlfYXBwZW5kKCZjb21taXRzLAorCQkJCQkJCSAgJnJlZi0+bmV3X29pZCk7CisKKwkJCWlmIChmaW5kX3VucHVzaGVkX3N1Ym1vZHVsZXMociwKKwkJCQkJCSAgICAgJmNvbW1pdHMsCisJCQkJCQkgICAgIHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lLAorCQkJCQkJICAgICAmbmVlZHNfcHVzaGluZykpIHsKKwkJCQlvaWRfYXJyYXlfY2xlYXIoJmNvbW1pdHMpOworCQkJCXRyYWNlMl9yZWdpb25fbGVhdmUoInRyYW5zcG9ydF9wdXNoIiwgImNoZWNrX3N1Ym1vZHVsZXMiLCByKTsKKwkJCQlkaWVfd2l0aF91bnB1c2hlZF9zdWJtb2R1bGVzKCZuZWVkc19wdXNoaW5nKTsKKwkJCX0KKwkJCXN0cmluZ19saXN0X2NsZWFyKCZuZWVkc19wdXNoaW5nLCAwKTsKKwkJCW9pZF9hcnJheV9jbGVhcigmY29tbWl0cyk7CisJCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJ0cmFuc3BvcnRfcHVzaCIsICJjaGVja19zdWJtb2R1bGVzIiwgcik7CisJCX0KKworCQlpZiAoIShmbGFncyAmIFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05MWSkpIHsKKwkJCXRyYWNlMl9yZWdpb25fZW50ZXIoInRyYW5zcG9ydF9wdXNoIiwgInB1c2hfcmVmcyIsIHIpOworCQkJcHVzaF9yZXQgPSB0cmFuc3BvcnQtPnZ0YWJsZS0+cHVzaF9yZWZzKHRyYW5zcG9ydCwgcmVtb3RlX3JlZnMsIGZsYWdzKTsKKwkJCXRyYWNlMl9yZWdpb25fbGVhdmUoInRyYW5zcG9ydF9wdXNoIiwgInB1c2hfcmVmcyIsIHIpOworCQl9IGVsc2UKKwkJCXB1c2hfcmV0ID0gMDsKKwkJZXJyID0gcHVzaF9oYWRfZXJyb3JzKHJlbW90ZV9yZWZzKTsKKwkJcmV0ID0gcHVzaF9yZXQgfCBlcnI7CisKKwkJaWYgKChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FUT01JQykgJiYgZXJyKSB7CisJCQlzdHJ1Y3QgcmVmICppdDsKKwkJCWZvciAoaXQgPSByZW1vdGVfcmVmczsgaXQ7IGl0ID0gaXQtPm5leHQpCisJCQkJc3dpdGNoIChpdC0+c3RhdHVzKSB7CisJCQkJY2FzZSBSRUZfU1RBVFVTX05PTkU6CisJCQkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQkJCWNhc2UgUkVGX1NUQVRVU19PSzoKKwkJCQkJaXQtPnN0YXR1cyA9IFJFRl9TVEFUVVNfQVRPTUlDX1BVU0hfRkFJTEVEOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKworCQlpZiAoIXF1aWV0IHx8IGVycikKKwkJCXRyYW5zcG9ydF9wcmludF9wdXNoX3N0YXR1cyh0cmFuc3BvcnQtPnVybCwgcmVtb3RlX3JlZnMsCisJCQkJCXZlcmJvc2UgfCBwb3JjZWxhaW4sIHBvcmNlbGFpbiwKKwkJCQkJcmVqZWN0X3JlYXNvbnMpOworCisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX1NFVF9VUFNUUkVBTSkKKwkJCXNldF91cHN0cmVhbXModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgcHJldGVuZCk7CisKKwkJaWYgKCEoZmxhZ3MgJiAoVFJBTlNQT1JUX1BVU0hfRFJZX1JVTiB8CisJCQkgICAgICAgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTkxZKSkpIHsKKwkJCXN0cnVjdCByZWYgKnJlZjsKKwkJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJCXRyYW5zcG9ydF91cGRhdGVfdHJhY2tpbmdfcmVmKHRyYW5zcG9ydC0+cmVtb3RlLCByZWYsIHZlcmJvc2UpOworCQl9CisKKwkJaWYgKHBvcmNlbGFpbiAmJiAhcHVzaF9yZXQpCisJCQlwdXRzKCJEb25lIik7CisJCWVsc2UgaWYgKCFxdWlldCAmJiAhcmV0ICYmICF0cmFuc3BvcnRfcmVmc19wdXNoZWQocmVtb3RlX3JlZnMpKQorCQkJZnByaW50ZihzdGRlcnIsICJFdmVyeXRoaW5nIHVwLXRvLWRhdGVcbiIpOworCisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAxOworfQorCitjb25zdCBzdHJ1Y3QgcmVmICp0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpyZWZfcHJlZml4ZXMpCit7CisJaWYgKCF0cmFuc3BvcnQtPmdvdF9yZW1vdGVfcmVmcykgeworCQl0cmFuc3BvcnQtPnJlbW90ZV9yZWZzID0KKwkJCXRyYW5zcG9ydC0+dnRhYmxlLT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgMCwKKwkJCQkJCQkgcmVmX3ByZWZpeGVzKTsKKwkJdHJhbnNwb3J0LT5nb3RfcmVtb3RlX3JlZnMgPSAxOworCX0KKworCXJldHVybiB0cmFuc3BvcnQtPnJlbW90ZV9yZWZzOworfQorCitpbnQgdHJhbnNwb3J0X2ZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZzKQoreworCWludCByYzsKKwlpbnQgbnJfaGVhZHMgPSAwLCBucl9hbGxvYyA9IDAsIG5yX3JlZnMgPSAwOworCXN0cnVjdCByZWYgKipoZWFkcyA9IE5VTEw7CisJc3RydWN0IHJlZiAqcm07CisKKwlmb3IgKHJtID0gcmVmczsgcm07IHJtID0gcm0tPm5leHQpIHsKKwkJbnJfcmVmcysrOworCQlpZiAocm0tPnBlZXJfcmVmICYmCisJCSAgICAhaXNfbnVsbF9vaWQoJnJtLT5vbGRfb2lkKSAmJgorCQkgICAgb2lkZXEoJnJtLT5wZWVyX3JlZi0+b2xkX29pZCwgJnJtLT5vbGRfb2lkKSkKKwkJCWNvbnRpbnVlOworCQlBTExPQ19HUk9XKGhlYWRzLCBucl9oZWFkcyArIDEsIG5yX2FsbG9jKTsKKwkJaGVhZHNbbnJfaGVhZHMrK10gPSBybTsKKwl9CisKKwlpZiAoIW5yX2hlYWRzKSB7CisJCS8qCisJCSAqIFdoZW4gZGVlcGVuaW5nIG9mIGEgc2hhbGxvdyByZXBvc2l0b3J5IGlzIHJlcXVlc3RlZCwKKwkJICogdGhlbiBsb2NhbCBhbmQgcmVtb3RlIHJlZnMgYXJlIGxpa2VseSB0byBzdGlsbCBiZSBlcXVhbC4KKwkJICogSnVzdCBmZWVkIHRoZW0gYWxsIHRvIHRoZSBmZXRjaCBtZXRob2QgaW4gdGhhdCBjYXNlLgorCQkgKiBUaGlzIGNvbmRpdGlvbiBzaG91bGRuJ3QgYmUgbWV0IGluIGEgbm9uLWRlZXBlbmluZyBmZXRjaAorCQkgKiAoc2VlIGJ1aWx0aW4vZmV0Y2guYzpxdWlja2ZldGNoKCkpLgorCQkgKi8KKwkJQUxMT0NfQVJSQVkoaGVhZHMsIG5yX3JlZnMpOworCQlmb3IgKHJtID0gcmVmczsgcm07IHJtID0gcm0tPm5leHQpCisJCQloZWFkc1tucl9oZWFkcysrXSA9IHJtOworCX0KKworCXJjID0gdHJhbnNwb3J0LT52dGFibGUtPmZldGNoKHRyYW5zcG9ydCwgbnJfaGVhZHMsIGhlYWRzKTsKKworCWZyZWUoaGVhZHMpOworCXJldHVybiByYzsKK30KKwordm9pZCB0cmFuc3BvcnRfdW5sb2NrX3BhY2soc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCWlmICh0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpIHsKKwkJdW5saW5rX29yX3dhcm4odHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlKTsKKwkJRlJFRV9BTkRfTlVMTCh0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpOworCX0KK30KKworaW50IHRyYW5zcG9ydF9jb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgY29uc3QgY2hhciAqZXhlYywgaW50IGZkWzJdKQoreworCWlmICh0cmFuc3BvcnQtPnZ0YWJsZS0+Y29ubmVjdCkKKwkJcmV0dXJuIHRyYW5zcG9ydC0+dnRhYmxlLT5jb25uZWN0KHRyYW5zcG9ydCwgbmFtZSwgZXhlYywgZmQpOworCWVsc2UKKwkJZGllKF8oIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIikpOworfQorCitpbnQgdHJhbnNwb3J0X2Rpc2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCWludCByZXQgPSAwOworCWlmICh0cmFuc3BvcnQtPnZ0YWJsZS0+ZGlzY29ubmVjdCkKKwkJcmV0ID0gdHJhbnNwb3J0LT52dGFibGUtPmRpc2Nvbm5lY3QodHJhbnNwb3J0KTsKKwlmcmVlKHRyYW5zcG9ydCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0cmlwIHVzZXJuYW1lIChhbmQgcGFzc3dvcmQpIGZyb20gYSBVUkwgYW5kIHJldHVybgorICogaXQgaW4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLgorICovCitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpCit7CisJY2hhciAqc2NoZW1lX3ByZWZpeCwgKmFub25fcGFydDsKKwlzaXplX3QgYW5vbl9sZW4sIHByZWZpeF9sZW4gPSAwOworCisJYW5vbl9wYXJ0ID0gc3RyY2hyKHVybCwgJ0AnKTsKKwlpZiAodXJsX2lzX2xvY2FsX25vdF9zc2godXJsKSB8fCAhYW5vbl9wYXJ0KQorCQlnb3RvIGxpdGVyYWxfY29weTsKKworCWFub25fbGVuID0gc3RybGVuKCsrYW5vbl9wYXJ0KTsKKwlzY2hlbWVfcHJlZml4ID0gc3Ryc3RyKHVybCwgIjovLyIpOworCWlmICghc2NoZW1lX3ByZWZpeCkgeworCQlpZiAoIXN0cmNocihhbm9uX3BhcnQsICc6JykpCisJCQkvKiBjYW5ub3QgYmUgIm1lQHRoZXJlOi9wYXRoL25hbWUiICovCisJCQlnb3RvIGxpdGVyYWxfY29weTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpjcDsKKwkJLyogbWFrZSBzdXJlIHNjaGVtZSBpcyByZWFzb25hYmxlICovCisJCWZvciAoY3AgPSB1cmw7IGNwIDwgc2NoZW1lX3ByZWZpeDsgY3ArKykgeworCQkJc3dpdGNoICgqY3ApIHsKKwkJCQkvKiBSRkMgMTczOCAyLjEgKi8KKwkJCWNhc2UgJysnOiBjYXNlICcuJzogY2FzZSAnLSc6CisJCQkJYnJlYWs7IC8qIG9rICovCisJCQlkZWZhdWx0OgorCQkJCWlmIChpc2FsbnVtKCpjcCkpCisJCQkJCWJyZWFrOworCQkJCS8qIGl0IGlzbid0ICovCisJCQkJZ290byBsaXRlcmFsX2NvcHk7CisJCQl9CisJCX0KKwkJLyogQCBwYXN0IHRoZSBmaXJzdCBzbGFzaCBkb2VzIG5vdCBjb3VudCAqLworCQljcCA9IHN0cmNocihzY2hlbWVfcHJlZml4ICsgMywgJy8nKTsKKwkJaWYgKGNwICYmIGNwIDwgYW5vbl9wYXJ0KQorCQkJZ290byBsaXRlcmFsX2NvcHk7CisJCXByZWZpeF9sZW4gPSBzY2hlbWVfcHJlZml4IC0gdXJsICsgMzsKKwl9CisJcmV0dXJuIHhzdHJmbXQoIiUuKnMlLipzIiwgKGludClwcmVmaXhfbGVuLCB1cmwsCisJCSAgICAgICAoaW50KWFub25fbGVuLCBhbm9uX3BhcnQpOworbGl0ZXJhbF9jb3B5OgorCXJldHVybiB4c3RyZHVwKHVybCk7Cit9CmRpZmYgLS1naXQgYS90cmFuc3BvcnQuaCBiL3RyYW5zcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMTMxZGEKLS0tIC9kZXYvbnVsbAorKysgYi90cmFuc3BvcnQuaApAQCAtMCwwICsxLDI2OCBAQAorI2lmbmRlZiBUUkFOU1BPUlRfSAorI2RlZmluZSBUUkFOU1BPUlRfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oIgorCitzdHJ1Y3Qgc3RyaW5nX2xpc3Q7CisKK3N0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgeworCXVuc2lnbmVkIHRoaW4gOiAxOworCXVuc2lnbmVkIGtlZXAgOiAxOworCXVuc2lnbmVkIGZvbGxvd3RhZ3MgOiAxOworCXVuc2lnbmVkIGNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgOiAxOworCXVuc2lnbmVkIHNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgOiAxOworCXVuc2lnbmVkIHVwZGF0ZV9zaGFsbG93IDogMTsKKwl1bnNpZ25lZCBkZWVwZW5fcmVsYXRpdmUgOiAxOworCXVuc2lnbmVkIGZyb21fcHJvbWlzb3IgOiAxOworCXVuc2lnbmVkIG5vX2RlcGVuZGVudHMgOiAxOworCisJLyoKKwkgKiBJZiB0aGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBjb25uZWN0IG9yIHN0YXRlbGVzcy1jb25uZWN0LAorCSAqIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgaXMgY29waWVkCisJICogaGVyZSBhZnRlciBmZXRjaGluZy4KKwkgKgorCSAqIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiBjb25uZWN0aXZpdHlfY2hlY2tlZCBpbiBzdHJ1Y3QKKwkgKiBmZXRjaF9wYWNrX2FyZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJICovCisJdW5zaWduZWQgY29ubmVjdGl2aXR5X2NoZWNrZWQ6MTsKKworCWludCBkZXB0aDsKKwljb25zdCBjaGFyICpkZWVwZW5fc2luY2U7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpkZWVwZW5fbm90OworCWNvbnN0IGNoYXIgKnVwbG9hZHBhY2s7CisJY29uc3QgY2hhciAqcmVjZWl2ZXBhY2s7CisJc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqY2FzOworCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgZmlsdGVyX29wdGlvbnM7CisKKwkvKgorCSAqIFRoaXMgaXMgb25seSB1c2VkIGR1cmluZyBmZXRjaC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mCisJICogbmVnb3RpYXRpb25fdGlwcyBpbiBzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzLgorCSAqCisJICogVGhpcyBmaWVsZCBpcyBvbmx5IHN1cHBvcnRlZCBieSB0cmFuc3BvcnRzIHRoYXQgc3VwcG9ydCBjb25uZWN0IG9yCisJICogc3RhdGVsZXNzX2Nvbm5lY3QuIFNldCB0aGlzIGZpZWxkIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcKKwkgKiB0cmFuc3BvcnRfc2V0X29wdGlvbigpLgorCSAqLworCXN0cnVjdCBvaWRfYXJyYXkgKm5lZ290aWF0aW9uX3RpcHM7Cit9OworCitlbnVtIHRyYW5zcG9ydF9mYW1pbHkgeworCVRSQU5TUE9SVF9GQU1JTFlfQUxMID0gMCwKKwlUUkFOU1BPUlRfRkFNSUxZX0lQVjQsCisJVFJBTlNQT1JUX0ZBTUlMWV9JUFY2Cit9OworCitzdHJ1Y3QgdHJhbnNwb3J0IHsKKwljb25zdCBzdHJ1Y3QgdHJhbnNwb3J0X3Z0YWJsZSAqdnRhYmxlOworCisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCWNvbnN0IGNoYXIgKnVybDsKKwl2b2lkICpkYXRhOworCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzOworCisJLyoqCisJICogSW5kaWNhdGVzIHdoZXRoZXIgd2UgYWxyZWFkeSBjYWxsZWQgZ2V0X3JlZnNfbGlzdCgpOyBzZXQgYnkKKwkgKiB0cmFuc3BvcnQuYzo6dHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcygpLgorCSAqLworCXVuc2lnbmVkIGdvdF9yZW1vdGVfcmVmcyA6IDE7CisKKwkvKgorCSAqIFRyYW5zcG9ydHMgdGhhdCBjYWxsIHRha2Utb3ZlciBkZXN0cm95cyB0aGUgZGF0YSBzcGVjaWZpYyB0bworCSAqIHRoZSB0cmFuc3BvcnQgdHlwZSB3aGlsZSBkb2luZyBzbywgYW5kIGNhbm5vdCBiZSByZXVzZWQuCisJICovCisJdW5zaWduZWQgY2Fubm90X3JldXNlIDogMTsKKworCS8qCisJICogQSBoaW50IGZyb20gY2FsbGVyIHRoYXQgaXQgd2lsbCBiZSBwZXJmb3JtaW5nIGEgY2xvbmUsIG5vdAorCSAqIG5vcm1hbCBmZXRjaC4gSU9XIHRoZSByZXBvc2l0b3J5IGlzIGd1YXJhbnRlZWQgZW1wdHkuCisJICovCisJdW5zaWduZWQgY2xvbmluZyA6IDE7CisKKwkvKgorCSAqIEluZGljYXRlcyB0aGF0IHRoZSB0cmFuc3BvcnQgaXMgY29ubmVjdGVkIHZpYSBhIGhhbGYtZHVwbGV4CisJICogY29ubmVjdGlvbiBhbmQgc2hvdWxkIG9wZXJhdGUgaW4gc3RhdGVsZXNzLXJwYyBtb2RlLgorCSAqLworCXVuc2lnbmVkIHN0YXRlbGVzc19ycGMgOiAxOworCisJLyoKKwkgKiBUaGVzZSBzdHJpbmdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB7cHJlLCBwb3N0fS1yZWNlaXZlIGhvb2ssCisJICogb24gdGhlIHJlbW90ZSBzaWRlLCBpZiBib3RoIHNpZGVzIHN1cHBvcnQgdGhlIHB1c2ggb3B0aW9ucyBjYXBhYmlsaXR5LgorCSAqLworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcHVzaF9vcHRpb25zOworCisJLyoKKwkgKiBUaGVzZSBzdHJpbmdzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSByZW1vdGUgc2lkZSBvbiBlYWNoIGNvbW1hbmQKKwkgKiByZXF1ZXN0LCBpZiBib3RoIHNpZGVzIHN1cHBvcnQgdGhlIHNlcnZlci1vcHRpb24gY2FwYWJpbGl0eS4KKwkgKi8KKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnNlcnZlcl9vcHRpb25zOworCisJY2hhciAqcGFja19sb2NrZmlsZTsKKwlzaWduZWQgdmVyYm9zZSA6IDM7CisJLyoqCisJICogVHJhbnNwb3J0cyBzaG91bGQgbm90IHNldCB0aGlzIGRpcmVjdGx5LCBhbmQgc2hvdWxkIHVzZSB0aGlzCisJICogdmFsdWUgd2l0aG91dCBoYXZpbmcgdG8gY2hlY2sgaXNhdHR5KDIpLCAtcS8tLXF1aWV0CisJICogKHRyYW5zcG9ydC0+dmVyYm9zZSA8IDApLCBldGMuIC0gY2hlY2tpbmcgaGFzIGFscmVhZHkgYmVlbiBkb25lCisJICogaW4gdHJhbnNwb3J0X3NldF92ZXJib3NpdHkoKS4KKwkgKiovCisJdW5zaWduZWQgcHJvZ3Jlc3MgOiAxOworCS8qCisJICogSWYgdHJhbnNwb3J0IGlzIGF0IGxlYXN0IHBvdGVudGlhbGx5IHNtYXJ0LCB0aGlzIHBvaW50cyB0bworCSAqIGdpdF90cmFuc3BvcnRfb3B0aW9ucyBzdHJ1Y3R1cmUgdG8gdXNlIGluIGNhc2UgdHJhbnNwb3J0CisJICogYWN0dWFsbHkgdHVybnMgb3V0IHRvIGJlIHNtYXJ0LgorCSAqLworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgKnNtYXJ0X29wdGlvbnM7CisKKwllbnVtIHRyYW5zcG9ydF9mYW1pbHkgZmFtaWx5OworfTsKKworI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9BTEwJCQkoMTw8MCkKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfRk9SQ0UJCQkoMTw8MSkKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTgkJCSgxPDwyKQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9NSVJST1IJCQkoMTw8MykKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfUE9SQ0VMQUlOCQkoMTw8NCkKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfU0VUX1VQU1RSRUFNCQkoMTw8NSkKKyNkZWZpbmUgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19DSEVDSwkoMTw8NikKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfUFJVTkUJCQkoMTw8NykKKyNkZWZpbmUgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQJKDE8PDgpCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX05PX0hPT0sJCQkoMTw8OSkKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfRk9MTE9XX1RBR1MJCSgxPDwxMCkKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfQ0VSVF9BTFdBWVMJCSgxPDwxMSkKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfQ0VSVF9JRl9BU0tFRAkJKDE8PDEyKQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9BVE9NSUMJCQkoMTw8MTMpCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX09QVElPTlMJCQkoMTw8MTQpCisjZGVmaW5lIFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05MWQkoMTw8MTUpCisKK2ludCB0cmFuc3BvcnRfc3VtbWFyeV93aWR0aChjb25zdCBzdHJ1Y3QgcmVmICpyZWZzKTsKKworLyogUmV0dXJucyBhIHRyYW5zcG9ydCBzdWl0YWJsZSBmb3IgdGhlIHVybCAqLworc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0X2dldChzdHJ1Y3QgcmVtb3RlICosIGNvbnN0IGNoYXIgKik7CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIGEgdHJhbnNwb3J0IGlzIGFsbG93ZWQgYnkgdGhlIGVudmlyb25tZW50LgorICoKKyAqIFR5cGUgc2hvdWxkIGdlbmVyYWxseSBiZSB0aGUgVVJMIHNjaGVtZSwgYXMgZGVzY3JpYmVkIGluCisgKiBEb2N1bWVudGF0aW9uL2dpdC50eHQKKyAqCisgKiBmcm9tX3VzZXIgc3BlY2lmaWVzIGlmIHRoZSB0cmFuc3BvcnQgd2FzIGdpdmVuIGJ5IHRoZSB1c2VyLiAgSWYgdW5rbm93biBwYXNzCisgKiBhIC0xIHRvIHJlYWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0cmFuc3BvcnQgd2FzIGdpdmVuIGJ5CisgKiB0aGUgdXNlci4KKyAqCisgKi8KK2ludCBpc190cmFuc3BvcnRfYWxsb3dlZChjb25zdCBjaGFyICp0eXBlLCBpbnQgZnJvbV91c2VyKTsKKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYSB0cmFuc3BvcnQgaXMgYWxsb3dlZCBieSB0aGUgZW52aXJvbm1lbnQsCisgKiBhbmQgZGllIG90aGVyd2lzZS4KKyAqLwordm9pZCB0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZChjb25zdCBjaGFyICp0eXBlKTsKKworLyogVHJhbnNwb3J0IG9wdGlvbnMgd2hpY2ggYXBwbHkgdG8gZ2l0Oi8vIGFuZCBzY3Atc3R5bGUgVVJMcyAqLworCisvKiBUaGUgcHJvZ3JhbSB0byB1c2Ugb24gdGhlIHJlbW90ZSBzaWRlIHRvIHNlbmQgYSBwYWNrICovCisjZGVmaW5lIFRSQU5TX09QVF9VUExPQURQQUNLICJ1cGxvYWRwYWNrIgorCisvKiBUaGUgcHJvZ3JhbSB0byB1c2Ugb24gdGhlIHJlbW90ZSBzaWRlIHRvIHJlY2VpdmUgYSBwYWNrICovCisjZGVmaW5lIFRSQU5TX09QVF9SRUNFSVZFUEFDSyAicmVjZWl2ZXBhY2siCisKKy8qIFRyYW5zZmVyIHRoZSBkYXRhIGFzIGEgdGhpbiBwYWNrIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9USElOICJ0aGluIgorCisvKiBDaGVjayB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcmVtb3RlIHJlZiAqLworI2RlZmluZSBUUkFOU19PUFRfQ0FTICJjYXMiCisKKy8qIEtlZXAgdGhlIHBhY2sgdGhhdCB3YXMgdHJhbnNmZXJyZWQgaWYgbm90IG51bGwgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX0tFRVAgImtlZXAiCisKKy8qIExpbWl0IHRoZSBkZXB0aCBvZiB0aGUgZmV0Y2ggaWYgbm90IG51bGwgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX0RFUFRIICJkZXB0aCIKKworLyogTGltaXQgdGhlIGRlcHRoIG9mIHRoZSBmZXRjaCBiYXNlZCBvbiB0aW1lIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9ERUVQRU5fU0lOQ0UgImRlZXBlbi1zaW5jZSIKKworLyogTGltaXQgdGhlIGRlcHRoIG9mIHRoZSBmZXRjaCBiYXNlZCBvbiByZXZzIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9ERUVQRU5fTk9UICJkZWVwZW4tbm90IgorCisvKiBMaW1pdCB0aGUgZGVlcGVuIG9mIHRoZSBmZXRjaCBpZiBub3QgbnVsbCAqLworI2RlZmluZSBUUkFOU19PUFRfREVFUEVOX1JFTEFUSVZFICJkZWVwZW4tcmVsYXRpdmUiCisKKy8qIEFnZ3Jlc3NpdmVseSBmZXRjaCBhbm5vdGF0ZWQgdGFncyBpZiBwb3NzaWJsZSAqLworI2RlZmluZSBUUkFOU19PUFRfRk9MTE9XVEFHUyAiZm9sbG93dGFncyIKKworLyogQWNjZXB0IHJlZnMgdGhhdCBtYXkgdXBkYXRlIC5naXQvc2hhbGxvdyB3aXRob3V0IC0tZGVwdGggKi8KKyNkZWZpbmUgVFJBTlNfT1BUX1VQREFURV9TSEFMTE9XICJ1cGRhdGVzaGFsbG93IgorCisvKiBTZW5kIHB1c2ggY2VydGlmaWNhdGVzICovCisjZGVmaW5lIFRSQU5TX09QVF9QVVNIX0NFUlQgInB1c2hjZXJ0IgorCisvKiBJbmRpY2F0ZSB0aGF0IHRoZXNlIG9iamVjdHMgYXJlIGJlaW5nIGZldGNoZWQgYnkgYSBwcm9taXNvciAqLworI2RlZmluZSBUUkFOU19PUFRfRlJPTV9QUk9NSVNPUiAiZnJvbS1wcm9taXNvciIKKworLyoKKyAqIEluZGljYXRlIHRoYXQgb25seSB0aGUgb2JqZWN0cyB3YW50ZWQgbmVlZCB0byBiZSBmZXRjaGVkLCBub3QgdGhlaXIKKyAqIGRlcGVuZGVudHMKKyAqLworI2RlZmluZSBUUkFOU19PUFRfTk9fREVQRU5ERU5UUyAibm8tZGVwZW5kZW50cyIKKworLyogRmlsdGVyIG9iamVjdHMgZm9yIHBhcnRpYWwgY2xvbmUgYW5kIGZldGNoICovCisjZGVmaW5lIFRSQU5TX09QVF9MSVNUX09CSkVDVFNfRklMVEVSICJmaWx0ZXIiCisKKy8qIFJlcXVlc3QgYXRvbWljIChhbGwtb3Itbm90aGluZykgdXBkYXRlcyB3aGVuIHB1c2hpbmcgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX0FUT01JQyAiYXRvbWljIgorCisvKioKKyAqIFJldHVybnMgMCBpZiB0aGUgb3B0aW9uIHdhcyB1c2VkLCBub24temVybyBvdGhlcndpc2UuIFByaW50cyBhCisgKiBtZXNzYWdlIHRvIHN0ZGVyciBpZiB0aGUgb3B0aW9uIGlzIG5vdCB1c2VkLgorICoqLworaW50IHRyYW5zcG9ydF9zZXRfb3B0aW9uKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBjb25zdCBjaGFyICp2YWx1ZSk7Cit2b2lkIHRyYW5zcG9ydF9zZXRfdmVyYm9zaXR5KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHZlcmJvc2l0eSwKKwlpbnQgZm9yY2VfcHJvZ3Jlc3MpOworCisjZGVmaW5lIFJFSkVDVF9OT05fRkZfSEVBRCAgICAgMHgwMQorI2RlZmluZSBSRUpFQ1RfTk9OX0ZGX09USEVSICAgIDB4MDIKKyNkZWZpbmUgUkVKRUNUX0FMUkVBRFlfRVhJU1RTICAweDA0CisjZGVmaW5lIFJFSkVDVF9GRVRDSF9GSVJTVCAgICAgMHgwOAorI2RlZmluZSBSRUpFQ1RfTkVFRFNfRk9SQ0UgICAgIDB4MTAKKworaW50IHRyYW5zcG9ydF9wdXNoKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkgICBzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uLAorCQkgICBzdHJ1Y3QgcmVmc3BlYyAqcnMsIGludCBmbGFncywKKwkJICAgdW5zaWduZWQgaW50ICogcmVqZWN0X3JlYXNvbnMpOworCisvKgorICogUmV0cmlldmUgcmVmcyBmcm9tIGEgcmVtb3RlLgorICoKKyAqIE9wdGlvbmFsbHkgYSBsaXN0IG9mIHJlZiBwcmVmaXhlcyBjYW4gYmUgcHJvdmlkZWQgd2hpY2ggY2FuIGJlIHNlbnQgdG8gdGhlCisgKiBzZXJ2ZXIgKHdoZW4gY29tbXVuaWNhdGluZyB1c2luZyBwcm90b2NvbCB2MikgdG8gZW5hYmxlIGl0IHRvIGxpbWl0IHRoZSByZWYKKyAqIGFkdmVydGlzZW1lbnQuICBTaW5jZSByZWYgZmlsdGVyaW5nIGlzIGRvbmUgb24gdGhlIHNlcnZlcidzIGVuZCAoYW5kIG9ubHkKKyAqIHdoZW4gdXNpbmcgcHJvdG9jb2wgdjIpLCB0aGlzIGNhbiByZXR1cm4gcmVmcyB3aGljaCBkb24ndCBtYXRjaCB0aGUgcHJvdmlkZWQKKyAqIHJlZl9wcmVmaXhlcy4KKyAqLworY29uc3Qgc3RydWN0IHJlZiAqdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqcmVmX3ByZWZpeGVzKTsKKworaW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcyk7Cit2b2lkIHRyYW5zcG9ydF91bmxvY2tfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOworaW50IHRyYW5zcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpOwordm9pZCB0cmFuc3BvcnRfdGFrZV9vdmVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY2hpbGQpOworCitpbnQgdHJhbnNwb3J0X2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBjaGFyICpleGVjLCBpbnQgZmRbMl0pOworCisvKiBUcmFuc3BvcnQgbWV0aG9kcyBkZWZpbmVkIG91dHNpZGUgdHJhbnNwb3J0LmMgKi8KK2ludCB0cmFuc3BvcnRfaGVscGVyX2luaXQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBiaWRpcmVjdGlvbmFsX3RyYW5zZmVyX2xvb3AoaW50IGlucHV0LCBpbnQgb3V0cHV0KTsKKworLyogY29tbW9uIG1ldGhvZHMgdXNlZCBieSB0cmFuc3BvcnQuYyBhbmQgYnVpbHRpbi9zZW5kLXBhY2suYyAqLwordm9pZCB0cmFuc3BvcnRfdXBkYXRlX3RyYWNraW5nX3JlZihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWYgKnJlZiwgaW50IHZlcmJvc2UpOworCitpbnQgdHJhbnNwb3J0X3JlZnNfcHVzaGVkKHN0cnVjdCByZWYgKnJlZik7CisKK3ZvaWQgdHJhbnNwb3J0X3ByaW50X3B1c2hfc3RhdHVzKGNvbnN0IGNoYXIgKmRlc3QsIHN0cnVjdCByZWYgKnJlZnMsCisJCSAgaW50IHZlcmJvc2UsIGludCBwb3JjZWxhaW4sIHVuc2lnbmVkIGludCAqcmVqZWN0X3JlYXNvbnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RyZWUtZGlmZi5jIGIvdHJlZS1kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkZWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUtZGlmZi5jCkBAIC0wLDAgKzEsNzE5IEBACisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgdHJlZSBkaWZmIGdlbmVyYXRpb24KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorCisvKgorICogaW50ZXJuYWwgbW9kZSBtYXJrZXIsIHNheWluZyBhIHRyZWUgZW50cnkgIT0gZW50cnkgb2YgdHBbaW1pbl0KKyAqIChzZWUgbGxfZGlmZl90cmVlX3BhdGhzIGZvciB3aGF0IGl0IG1lYW5zIHRoZXJlKQorICoKKyAqIHdlIHdpbGwgdXBkYXRlL3VzZS9lbWl0IGVudHJ5IGZvciBkaWZmIG9ubHkgd2l0aCBpdCB1bnNldC4KKyAqLworI2RlZmluZSBTX0lGWE1JTl9ORVEJU19ESUZGVFJFRV9JRlhNSU5fTkVRCisKKyNkZWZpbmUgRkFTVF9BUlJBWV9BTExPQyh4LCBucikgZG8geyBcCisJaWYgKChucikgPD0gMikgXAorCQkoeCkgPSB4YWxsb2NhKChucikgKiBzaXplb2YoKih4KSkpOyBcCisJZWxzZSBcCisJCUFMTE9DX0FSUkFZKCh4KSwgbnIpOyBcCit9IHdoaWxlKDApCisjZGVmaW5lIEZBU1RfQVJSQVlfRlJFRSh4LCBucikgZG8geyBcCisJaWYgKChucikgPiAyKSBcCisJCWZyZWUoKHgpKTsgXAorfSB3aGlsZSgwKQorCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpsbF9kaWZmX3RyZWVfcGF0aHMoCisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKnBhcmVudHNfb2lkLCBpbnQgbnBhcmVudCwKKwlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworc3RhdGljIGludCBsbF9kaWZmX3RyZWVfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworCisvKgorICogQ29tcGFyZSB0d28gdHJlZSBlbnRyaWVzLCB0YWtpbmcgaW50byBhY2NvdW50IG9ubHkgcGF0aC9TX0lTRElSKG1vZGUpLAorICogYnV0IG5vdCB0aGVpciBzaGExJ3MuCisgKgorICogTk9URSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKmFsd2F5cyogY29tcGFyZSBkaWZmZXJlbnRseSwgZXZlbiB3aGVuIGhhdmluZworICogICAgICB0aGUgc2FtZSBuYW1lIC0gdGhhbmtzIHRvIGJhc2VfbmFtZV9jb21wYXJlKCkuCisgKgorICogTk9URSBlbXB0eSAoPWludmFsaWQpIGRlc2NyaXB0b3IocykgdGFrZSBwYXJ0IGluIGNvbXBhcmlzb24gYXMgK2luZnR5LAorICogICAgICBzbyB0aGF0IHRoZXkgc29ydCAqYWZ0ZXIqIHZhbGlkIHRyZWUgZW50cmllcy4KKyAqCisgKiAgICAgIER1ZSB0byB0aGlzIGNvbnZlbnRpb24sIGlmIHRyZWVzIGFyZSBzY2FubmVkIGluIHNvcnRlZCBvcmRlciwgYWxsCisgKiAgICAgIG5vbi1lbXB0eSBkZXNjcmlwdG9ycyB3aWxsIGJlIHByb2Nlc3NlZCBmaXJzdC4KKyAqLworc3RhdGljIGludCB0cmVlX2VudHJ5X3BhdGhjbXAoc3RydWN0IHRyZWVfZGVzYyAqdDEsIHN0cnVjdCB0cmVlX2Rlc2MgKnQyKQoreworCXN0cnVjdCBuYW1lX2VudHJ5ICplMSwgKmUyOworCWludCBjbXA7CisKKwkvKiBlbXB0eSBkZXNjcmlwdG9ycyBzb3J0IGFmdGVyIHZhbGlkIHRyZWUgZW50cmllcyAqLworCWlmICghdDEtPnNpemUpCisJCXJldHVybiB0Mi0+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+ZmxhZ3MucmVjdXJzaXZlOworCisJZm9yICg7OykgeworCQlpbnQgaW1pbiwgY21wOworCisJCWlmIChkaWZmX2Nhbl9xdWl0X2Vhcmx5KG9wdCkpCisJCQlicmVhazsKKworCQlpZiAob3B0LT5wYXRoc3BlYy5ucikgeworCQkJc2tpcF91bmludGVyZXN0aW5nKCZ0LCBiYXNlLCBvcHQpOworCQkJZm9yIChpID0gMDsgaSA8IG5wYXJlbnQ7IGkrKykKKwkJCQlza2lwX3VuaW50ZXJlc3RpbmcoJnRwW2ldLCBiYXNlLCBvcHQpOworCQl9CisKKwkJLyogY29tcGFyaW5nIGlzIGZpbmlzaGVkIHdoZW4gYWxsIHRyZWVzIGFyZSBkb25lICovCisJCWlmICghdC5zaXplKSB7CisJCQlpbnQgZG9uZSA9IDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudDsgKytpKQorCQkJCWlmICh0cFtpXS5zaXplKSB7CisJCQkJCWRvbmUgPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQlpZiAoZG9uZSkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIGxvb2t1cCBpbWluID0gYXJnbWluKHAxLi4ucG4pLAorCQkgKiBtYXJrIGVudHJpZXMgd2hldGhlciB0aGV5ID1wW2ltaW5dIGFsb25nIHRoZSB3YXkKKwkJICovCisJCWltaW4gPSAwOworCQl0cFswXS5lbnRyeS5tb2RlICY9IH5TX0lGWE1JTl9ORVE7CisKKwkJZm9yIChpID0gMTsgaSA8IG5wYXJlbnQ7ICsraSkgeworCQkJY21wID0gdHJlZV9lbnRyeV9wYXRoY21wKCZ0cFtpXSwgJnRwW2ltaW5dKTsKKwkJCWlmIChjbXAgPCAwKSB7CisJCQkJaW1pbiA9IGk7CisJCQkJdHBbaV0uZW50cnkubW9kZSAmPSB+U19JRlhNSU5fTkVROworCQkJfQorCQkJZWxzZSBpZiAoY21wID09IDApIHsKKwkJCQl0cFtpXS5lbnRyeS5tb2RlICY9IH5TX0lGWE1JTl9ORVE7CisJCQl9CisJCQllbHNlIHsKKwkJCQl0cFtpXS5lbnRyeS5tb2RlIHw9IFNfSUZYTUlOX05FUTsKKwkJCX0KKwkJfQorCisJCS8qIGZpeHVwIG1hcmtpbmdzIGZvciBlbnRyaWVzIGJlZm9yZSBpbWluICovCisJCWZvciAoaSA9IDA7IGkgPCBpbWluOyArK2kpCisJCQl0cFtpXS5lbnRyeS5tb2RlIHw9IFNfSUZYTUlOX05FUTsJLyogcGkgPiBwW2ltaW5dICovCisKKworCisJCS8qIGNvbXBhcmUgdCB2cyBwW2ltaW5dICovCisJCWNtcCA9IHRyZWVfZW50cnlfcGF0aGNtcCgmdCwgJnRwW2ltaW5dKTsKKworCQkvKiB0ID0gcFtpbWluXSAqLworCQlpZiAoY21wID09IDApIHsKKwkJCS8qIGFyZSBlaXRoZXIgcGkgPiBwW2ltaW5dIG9yIGRpZmYodCxwaSkgIT0gw7ggPyAqLworCQkJaWYgKCFvcHQtPmZsYWdzLmZpbmRfY29waWVzX2hhcmRlcikgeworCQkJCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyArK2kpIHsKKwkJCQkJLyogcFtpXSA+IHBbaW1pbl0gKi8KKwkJCQkJaWYgKHRwW2ldLmVudHJ5Lm1vZGUgJiBTX0lGWE1JTl9ORVEpCisJCQkJCQljb250aW51ZTsKKworCQkJCQkvKiBkaWZmKHQscGkpICE9IMO4ICovCisJCQkJCWlmICghb2lkZXEoJnQuZW50cnkub2lkLCAmdHBbaV0uZW50cnkub2lkKSB8fAorCQkJCQkgICAgKHQuZW50cnkubW9kZSAhPSB0cFtpXS5lbnRyeS5tb2RlKSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCWdvdG8gc2tpcF9lbWl0X3RfdHA7CisJCQkJfQorCQkJfQorCisJCQkvKiBEICs9IHvOtCh0LHBpKSBpZiBwaT1wW2ltaW5dOyAgIithIiBpZiBwaSA+IHBbaW1pbl19ICovCisJCQlwID0gZW1pdF9wYXRoKHAsIGJhc2UsIG9wdCwgbnBhcmVudCwKKwkJCQkJJnQsIHRwLCBpbWluKTsKKworCQlza2lwX2VtaXRfdF90cDoKKwkJCS8qIHTihpMsICDiiIAgcGk9cFtpbWluXSAgcGnihpMgKi8KKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0KTsKKwkJCXVwZGF0ZV90cF9lbnRyaWVzKHRwLCBucGFyZW50KTsKKwkJfQorCisJCS8qIHQgPCBwW2ltaW5dICovCisJCWVsc2UgaWYgKGNtcCA8IDApIHsKKwkJCS8qIEQgKz0gIit0IiAqLworCQkJcCA9IGVtaXRfcGF0aChwLCBiYXNlLCBvcHQsIG5wYXJlbnQsCisJCQkJCSZ0LCAvKnRwPSovTlVMTCwgLTEpOworCisJCQkvKiB04oaTICovCisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmdCk7CisJCX0KKworCQkvKiB0ID4gcFtpbWluXSAqLworCQllbHNlIHsKKwkJCS8qIOKIgGkgcGk9cFtpbWluXSAtPiBEICs9ICItcFtpbWluXSIgKi8KKwkJCWlmICghb3B0LT5mbGFncy5maW5kX2NvcGllc19oYXJkZXIpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudDsgKytpKQorCQkJCQlpZiAodHBbaV0uZW50cnkubW9kZSAmIFNfSUZYTUlOX05FUSkKKwkJCQkJCWdvdG8gc2tpcF9lbWl0X3RwOworCQkJfQorCisJCQlwID0gZW1pdF9wYXRoKHAsIGJhc2UsIG9wdCwgbnBhcmVudCwKKwkJCQkJLyp0PSovTlVMTCwgdHAsIGltaW4pOworCisJCXNraXBfZW1pdF90cDoKKwkJCS8qIOKIgCBwaT1wW2ltaW5dICBwaeKGkyAqLworCQkJdXBkYXRlX3RwX2VudHJpZXModHAsIG5wYXJlbnQpOworCQl9CisJfQorCisJZnJlZSh0dHJlZSk7CisJZm9yIChpID0gbnBhcmVudC0xOyBpID49IDA7IGktLSkKKwkJZnJlZSh0cHRyZWVbaV0pOworCUZBU1RfQVJSQVlfRlJFRSh0cHRyZWUsIG5wYXJlbnQpOworCUZBU1RfQVJSQVlfRlJFRSh0cCwgbnBhcmVudCk7CisKKwlyZXR1cm4gcDsKK30KKworc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpkaWZmX3RyZWVfcGF0aHMoCisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqKnBhcmVudHNfb2lkLCBpbnQgbnBhcmVudCwKKwlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJcCA9IGxsX2RpZmZfdHJlZV9wYXRocyhwLCBvaWQsIHBhcmVudHNfb2lkLCBucGFyZW50LCBiYXNlLCBvcHQpOworCisJLyoKKwkgKiBmcmVlIHByZS1hbGxvY2F0ZWQgbGFzdCBlbGVtZW50LCBpZiBhbnkKKwkgKiAoc2VlIHBhdGhfYXBwZW5kbmV3KCkgZm9yIGRldGFpbHMgYWJvdXQgd2h5KQorCSAqLworCUZSRUVfQU5EX05VTEwocC0+bmV4dCk7CisKKwlyZXR1cm4gcDsKK30KKworLyoKKyAqIERvZXMgaXQgbG9vayBsaWtlIHRoZSByZXN1bHRpbmcgZGlmZiBtaWdodCBiZSBkdWUgdG8gYSByZW5hbWU/CisgKiAgLSBzaW5nbGUgZW50cnkKKyAqICAtIG5vdCBhIHZhbGlkIHByZXZpb3VzIGZpbGUKKyAqLworc3RhdGljIGlubGluZSBpbnQgZGlmZl9taWdodF9iZV9yZW5hbWUodm9pZCkKK3sKKwlyZXR1cm4gZGlmZl9xdWV1ZWRfZGlmZi5uciA9PSAxICYmCisJCSFESUZGX0ZJTEVfVkFMSUQoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVswXS0+b25lKTsKK30KKworc3RhdGljIHZvaWQgdHJ5X3RvX2ZvbGxvd19yZW5hbWVzKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRzOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpjaG9pY2U7CisJaW50IGk7CisKKwkvKgorCSAqIGZvbGxvdy1yZW5hbWUgY29kZSBpcyB2ZXJ5IHNwZWNpZmljLCB3ZSBuZWVkIGV4YWN0bHkgb25lCisJICogcGF0aC4gTWFnaWMgdGhhdCBtYXRjaGVzIG1vcmUgdGhhbiBvbmUgcGF0aCBpcyBub3QKKwkgKiBzdXBwb3J0ZWQuCisJICovCisJR1VBUkRfUEFUSFNQRUMoJm9wdC0+cGF0aHNwZWMsIFBBVEhTUEVDX0ZST01UT1AgfCBQQVRIU1BFQ19MSVRFUkFMKTsKKyNpZiAwCisJLyoKKwkgKiBXZSBzaG91bGQgcmVqZWN0IHdpbGRjYXJkcyBhcyB3ZWxsLiBVbmZvcnR1bmF0ZWx5IHdlCisJICogaGF2ZW4ndCBnb3QgYSByZWxpYWJsZSB3YXkgdG8gZGV0ZWN0IHRoYXQgJ2Zvb1wqYmFyJyBpbgorCSAqIGZhY3QgaGFzIG5vIHdpbGRjYXJkcy4gbm93aWxkY2FyZF9sZW4gaXMgbWVyZWx5IGEgaGludCBmb3IKKwkgKiBvcHRpbWl6YXRpb24uIExldCBpdCBzbGlwIGZvciBub3cgdW50aWwgd2lsZG1hdGNoIGlzIHRhdWdodAorCSAqIGFib3V0IGRyeS1ydW4gbW9kZSBhbmQgcmV0dXJucyB3aWxkY2FyZCBpbmZvLgorCSAqLworCWlmIChvcHQtPnBhdGhzcGVjLmhhc193aWxkY2FyZCkKKwkJZGllKCJCVUc6JXM6JWQ6IHdpbGRjYXJkcyBhcmUgbm90IHN1cHBvcnRlZCIsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18pOworI2VuZGlmCisKKwkvKiBSZW1vdmUgdGhlIGZpbGUgY3JlYXRpb24gZW50cnkgZnJvbSB0aGUgZGlmZiBxdWV1ZSwgYW5kIHJlbWVtYmVyIGl0ICovCisJY2hvaWNlID0gcS0+cXVldWVbMF07CisJcS0+bnIgPSAwOworCisJcmVwb19kaWZmX3NldHVwKG9wdC0+cmVwbywgJmRpZmZfb3B0cyk7CisJZGlmZl9vcHRzLmZsYWdzLnJlY3Vyc2l2ZSA9IDE7CisJZGlmZl9vcHRzLmZsYWdzLmZpbmRfY29waWVzX2hhcmRlciA9IDE7CisJZGlmZl9vcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJZGlmZl9vcHRzLnNpbmdsZV9mb2xsb3cgPSBvcHQtPnBhdGhzcGVjLml0ZW1zWzBdLm1hdGNoOworCWRpZmZfb3B0cy5icmVha19vcHQgPSBvcHQtPmJyZWFrX29wdDsKKwlkaWZmX29wdHMucmVuYW1lX3Njb3JlID0gb3B0LT5yZW5hbWVfc2NvcmU7CisJZGlmZl9zZXR1cF9kb25lKCZkaWZmX29wdHMpOworCWxsX2RpZmZfdHJlZV9vaWQob2xkX29pZCwgbmV3X29pZCwgYmFzZSwgJmRpZmZfb3B0cyk7CisJZGlmZmNvcmVfc3RkKCZkaWZmX29wdHMpOworCWNsZWFyX3BhdGhzcGVjKCZkaWZmX29wdHMucGF0aHNwZWMpOworCisJLyogR28gdGhyb3VnaCB0aGUgbmV3IHNldCBvZiBmaWxlcGFpcmluZywgYW5kIHNlZSBpZiB3ZSBmaW5kIGEgbW9yZSBpbnRlcmVzdGluZyBvbmUgKi8KKwlvcHQtPmZvdW5kX2ZvbGxvdyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKworCQkvKgorCQkgKiBGb3VuZCBhIHNvdXJjZT8gTm90IG9ubHkgZG8gd2UgdXNlIHRoYXQgZm9yIHRoZSBuZXcKKwkJICogZGlmZl9xdWV1ZWRfZGlmZiwgd2Ugd2lsbCBhbHNvIHVzZSB0aGF0IGFzIHRoZSBwYXRoIGluCisJCSAqIHRoZSBmdXR1cmUhCisJCSAqLworCQlpZiAoKHAtPnN0YXR1cyA9PSAnUicgfHwgcC0+c3RhdHVzID09ICdDJykgJiYKKwkJICAgICFzdHJjbXAocC0+dHdvLT5wYXRoLCBvcHQtPnBhdGhzcGVjLml0ZW1zWzBdLm1hdGNoKSkgeworCQkJY29uc3QgY2hhciAqcGF0aFsyXTsKKworCQkJLyogU3dpdGNoIHRoZSBmaWxlLXBhaXJzIGFyb3VuZCAqLworCQkJcS0+cXVldWVbaV0gPSBjaG9pY2U7CisJCQljaG9pY2UgPSBwOworCisJCQkvKiBVcGRhdGUgdGhlIHBhdGggd2UgdXNlIGZyb20gbm93IG9uLi4gKi8KKwkJCXBhdGhbMF0gPSBwLT5vbmUtPnBhdGg7CisJCQlwYXRoWzFdID0gTlVMTDsKKwkJCWNsZWFyX3BhdGhzcGVjKCZvcHQtPnBhdGhzcGVjKTsKKwkJCXBhcnNlX3BhdGhzcGVjKCZvcHQtPnBhdGhzcGVjLAorCQkJCSAgICAgICBQQVRIU1BFQ19BTExfTUFHSUMgJiB+UEFUSFNQRUNfTElURVJBTCwKKwkJCQkgICAgICAgUEFUSFNQRUNfTElURVJBTF9QQVRILCAiIiwgcGF0aCk7CisKKwkJCS8qCisJCQkgKiBUaGUgY2FsbGVyIGV4cGVjdHMgdXMgdG8gcmV0dXJuIGEgc2V0IG9mIHZhbmlsbGEKKwkJCSAqIGZpbGVwYWlycyB0byBsZXQgYSBsYXRlciBjYWxsIHRvIGRpZmZjb3JlX3N0ZCgpCisJCQkgKiBpdCBtYWtlcyB0byBzb3J0IHRoZSByZW5hbWVzIG91dCAoYW1vbmcgb3RoZXIKKwkJCSAqIHRoaW5ncyksIGJ1dCB3ZSBhbHJlYWR5IGhhdmUgZm91bmQgcmVuYW1lcworCQkJICogb3Vyc2VsdmVzOyBzaWduYWwgZGlmZmNvcmVfc3RkKCkgbm90IHRvIG11Y2sgd2l0aAorCQkJICogcmVuYW1lIGluZm9ybWF0aW9uLgorCQkJICovCisJCQlvcHQtPmZvdW5kX2ZvbGxvdyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogVGhlbiwgZGlzY2FyZCBhbGwgdGhlIG5vbi1yZWxldmFudCBmaWxlIHBhaXJzLi4uCisJICovCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCX0KKworCS8qCisJICogLi4gYW5kIHJlLWluc3RhdGUgdGhlIG9uZSB3ZSB3YW50ICh3aGljaCBtaWdodCBiZSBlaXRoZXIgdGhlCisJICogb3JpZ2luYWwgb25lLCBvciB0aGUgcmVuYW1lL2NvcHkgd2UgZm91bmQpCisJICovCisJcS0+cXVldWVbMF0gPSBjaG9pY2U7CisJcS0+bnIgPSAxOworfQorCitzdGF0aWMgaW50IGxsX2RpZmZfdHJlZV9vaWQoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2xkX29pZCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLAorCQkJICAgIHN0cnVjdCBzdHJidWYgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggcGhlYWQsICpwOworCXBhdGhjaGFuZ2VfZm5fdCBwYXRoY2hhbmdlX29sZCA9IG9wdC0+cGF0aGNoYW5nZTsKKworCXBoZWFkLm5leHQgPSBOVUxMOworCW9wdC0+cGF0aGNoYW5nZSA9IGVtaXRfZGlmZl9maXJzdF9wYXJlbnRfb25seTsKKwlkaWZmX3RyZWVfcGF0aHMoJnBoZWFkLCBuZXdfb2lkLCAmb2xkX29pZCwgMSwgYmFzZSwgb3B0KTsKKworCWZvciAocCA9IHBoZWFkLm5leHQ7IHA7KSB7CisJCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcHByZXYgPSBwOworCQlwID0gcC0+bmV4dDsKKwkJZnJlZShwcHJldik7CisJfQorCisJb3B0LT5wYXRoY2hhbmdlID0gcGF0aGNoYW5nZV9vbGQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkaWZmX3RyZWVfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9sZF9vaWQsCisJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqbmV3X29pZCwKKwkJICBjb25zdCBjaGFyICpiYXNlX3N0ciwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCBzdHJidWYgYmFzZTsKKwlpbnQgcmV0dmFsOworCisJc3RyYnVmX2luaXQoJmJhc2UsIFBBVEhfTUFYKTsKKwlzdHJidWZfYWRkc3RyKCZiYXNlLCBiYXNlX3N0cik7CisKKwlyZXR2YWwgPSBsbF9kaWZmX3RyZWVfb2lkKG9sZF9vaWQsIG5ld19vaWQsICZiYXNlLCBvcHQpOworCWlmICghKmJhc2Vfc3RyICYmIG9wdC0+ZmxhZ3MuZm9sbG93X3JlbmFtZXMgJiYgZGlmZl9taWdodF9iZV9yZW5hbWUoKSkKKwkJdHJ5X3RvX2ZvbGxvd19yZW5hbWVzKG9sZF9vaWQsIG5ld19vaWQsICZiYXNlLCBvcHQpOworCisJc3RyYnVmX3JlbGVhc2UoJmJhc2UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGRpZmZfcm9vdF90cmVlX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpuZXdfb2lkLCBjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJcmV0dXJuIGRpZmZfdHJlZV9vaWQoTlVMTCwgbmV3X29pZCwgYmFzZSwgb3B0KTsKK30KZGlmZiAtLWdpdCBhL3RyZWUtd2Fsay5jIGIvdHJlZS13YWxrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwYWQzNAotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUtd2Fsay5jCkBAIC0wLDAgKzEsMTI0MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfbW9kZShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqbW9kZXApCit7CisJdW5zaWduZWQgY2hhciBjOworCXVuc2lnbmVkIGludCBtb2RlID0gMDsKKworCWlmICgqc3RyID09ICcgJykKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoKGMgPSAqc3RyKyspICE9ICcgJykgeworCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJcmV0dXJuIE5VTEw7CisJCW1vZGUgPSAobW9kZSA8PCAzKSArIChjIC0gJzAnKTsKKwl9CisJKm1vZGVwID0gbW9kZTsKKwlyZXR1cm4gc3RyOworfQorCitzdGF0aWMgaW50IGRlY29kZV90cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwl1bnNpZ25lZCBpbnQgbW9kZSwgbGVuOworCWNvbnN0IHVuc2lnbmVkIGhhc2hzeiA9IHRoZV9oYXNoX2FsZ28tPnJhd3N6OworCisJaWYgKHNpemUgPCBoYXNoc3ogKyAzIHx8IGJ1ZltzaXplIC0gKGhhc2hzeiArIDEpXSkgeworCQlzdHJidWZfYWRkc3RyKGVyciwgXygidG9vLXNob3J0IHRyZWUgb2JqZWN0IikpOworCQlyZXR1cm4gLTE7CisJfQorCisJcGF0aCA9IGdldF9tb2RlKGJ1ZiwgJm1vZGUpOworCWlmICghcGF0aCkgeworCQlzdHJidWZfYWRkc3RyKGVyciwgXygibWFsZm9ybWVkIG1vZGUgaW4gdHJlZSBlbnRyeSIpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoISpwYXRoKSB7CisJCXN0cmJ1Zl9hZGRzdHIoZXJyLCBfKCJlbXB0eSBmaWxlbmFtZSBpbiB0cmVlIGVudHJ5IikpOworCQlyZXR1cm4gLTE7CisJfQorCWxlbiA9IHN0cmxlbihwYXRoKSArIDE7CisKKwkvKiBJbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yIGVudHJ5ICovCisJZGVzYy0+ZW50cnkucGF0aCA9IHBhdGg7CisJZGVzYy0+ZW50cnkubW9kZSA9IGNhbm9uX21vZGUobW9kZSk7CisJZGVzYy0+ZW50cnkucGF0aGxlbiA9IGxlbiAtIDE7CisJaGFzaGNweShkZXNjLT5lbnRyeS5vaWQuaGFzaCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwYXRoICsgbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfdHJlZV9kZXNjX2ludGVybmFsKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJZGVzYy0+YnVmZmVyID0gYnVmZmVyOworCWRlc2MtPnNpemUgPSBzaXplOworCWlmIChzaXplKQorCQlyZXR1cm4gZGVjb2RlX3RyZWVfZW50cnkoZGVzYywgYnVmZmVyLCBzaXplLCBlcnIpOworCXJldHVybiAwOworfQorCit2b2lkIGluaXRfdHJlZV9kZXNjKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJaWYgKGluaXRfdHJlZV9kZXNjX2ludGVybmFsKGRlc2MsIGJ1ZmZlciwgc2l6ZSwgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKK30KKworaW50IGluaXRfdHJlZV9kZXNjX2dlbnRseShzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWludCByZXN1bHQgPSBpbml0X3RyZWVfZGVzY19pbnRlcm5hbChkZXNjLCBidWZmZXIsIHNpemUsICZlcnIpOworCWlmIChyZXN1bHQpCisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgKmZpbGxfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgc3RydWN0IHRyZWVfZGVzYyAqZGVzYywKKwkJCSAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAwOworCXZvaWQgKmJ1ZiA9IE5VTEw7CisKKwlpZiAob2lkKSB7CisJCWJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHIsIG9pZCwgdHJlZV90eXBlLCAmc2l6ZSwgTlVMTCk7CisJCWlmICghYnVmKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCB0cmVlICVzIiwgb2lkX3RvX2hleChvaWQpKTsKKwl9CisJaW5pdF90cmVlX2Rlc2MoZGVzYywgYnVmLCBzaXplKTsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBlbnRyeV9jbGVhcihzdHJ1Y3QgbmFtZV9lbnRyeSAqYSkKK3sKKwltZW1zZXQoYSwgMCwgc2l6ZW9mKCphKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVudHJ5X2V4dHJhY3Qoc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IG5hbWVfZW50cnkgKmEpCit7CisJKmEgPSB0LT5lbnRyeTsKK30KKworc3RhdGljIGludCB1cGRhdGVfdHJlZV9lbnRyeV9pbnRlcm5hbChzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJY29uc3Qgdm9pZCAqYnVmID0gZGVzYy0+YnVmZmVyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopZGVzYy0+ZW50cnkucGF0aCArIGRlc2MtPmVudHJ5LnBhdGhsZW4gKyAxICsgdGhlX2hhc2hfYWxnby0+cmF3c3o7CisJdW5zaWduZWQgbG9uZyBzaXplID0gZGVzYy0+c2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IGVuZCAtIChjb25zdCB1bnNpZ25lZCBjaGFyICopYnVmOworCisJaWYgKHNpemUgPCBsZW4pCisJCWRpZShfKCJ0b28tc2hvcnQgdHJlZSBmaWxlIikpOworCWJ1ZiA9IGVuZDsKKwlzaXplIC09IGxlbjsKKwlkZXNjLT5idWZmZXIgPSBidWY7CisJZGVzYy0+c2l6ZSA9IHNpemU7CisJaWYgKHNpemUpCisJCXJldHVybiBkZWNvZGVfdHJlZV9lbnRyeShkZXNjLCBidWYsIHNpemUsIGVycik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXBkYXRlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWlmICh1cGRhdGVfdHJlZV9lbnRyeV9pbnRlcm5hbChkZXNjLCAmZXJyKSkKKwkJZGllKCIlcyIsIGVyci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworfQorCitpbnQgdXBkYXRlX3RyZWVfZW50cnlfZ2VudGx5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpZiAodXBkYXRlX3RyZWVfZW50cnlfaW50ZXJuYWwoZGVzYywgJmVycikpIHsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQkvKiBTdG9wIHByb2Nlc3NpbmcgdGhpcyB0cmVlIGFmdGVyIGVycm9yICovCisJCWRlc2MtPnNpemUgPSAwOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiAwOworfQorCitpbnQgdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnkpCit7CisJaWYgKCFkZXNjLT5zaXplKQorCQlyZXR1cm4gMDsKKworCSplbnRyeSA9IGRlc2MtPmVudHJ5OworCXVwZGF0ZV90cmVlX2VudHJ5KGRlc2MpOworCXJldHVybiAxOworfQorCitpbnQgdHJlZV9lbnRyeV9nZW50bHkoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5KQoreworCWlmICghZGVzYy0+c2l6ZSkKKwkJcmV0dXJuIDA7CisKKwkqZW50cnkgPSBkZXNjLT5lbnRyeTsKKwlpZiAodXBkYXRlX3RyZWVfZW50cnlfZ2VudGx5KGRlc2MpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBzZXR1cF90cmF2ZXJzZV9pbmZvKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpiYXNlKQoreworCXNpemVfdCBwYXRobGVuID0gc3RybGVuKGJhc2UpOworCXN0YXRpYyBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyBkdW1teTsKKworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKwlpZiAocGF0aGxlbiAmJiBiYXNlW3BhdGhsZW4tMV0gPT0gJy8nKQorCQlwYXRobGVuLS07CisJaW5mby0+cGF0aGxlbiA9IHBhdGhsZW4gPyBwYXRobGVuICsgMSA6IDA7CisJaW5mby0+bmFtZSA9IGJhc2U7CisJaW5mby0+bmFtZWxlbiA9IHBhdGhsZW47CisJaWYgKHBhdGhsZW4pCisJCWluZm8tPnByZXYgPSAmZHVtbXk7Cit9CisKK2NoYXIgKm1ha2VfdHJhdmVyc2VfcGF0aChjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwKKwkJCSBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbikKK3sKKwkvKiBBbHdheXMgcG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIG5hbWUgd2UncmUgYWJvdXQgdG8gYWRkICovCisJc2l6ZV90IHBvcyA9IHN0X2FkZChpbmZvLT5wYXRobGVuLCBuYW1lbGVuKTsKKworCWlmIChwb3MgPj0gcGF0aGxlbikKKwkJQlVHKCJ0b28gc21hbGwgYnVmZmVyIHBhc3NlZCB0byBtYWtlX3RyYXZlcnNlX3BhdGgiKTsKKworCXBhdGhbcG9zXSA9IDA7CisJZm9yICg7OykgeworCQlpZiAocG9zIDwgbmFtZWxlbikKKwkJCUJVRygidHJhdmVyc2VfaW5mbyBwYXRobGVuIGRvZXMgbm90IG1hdGNoIHN0cmluZ3MiKTsKKwkJcG9zIC09IG5hbWVsZW47CisJCW1lbWNweShwYXRoICsgcG9zLCBuYW1lLCBuYW1lbGVuKTsKKworCQlpZiAoIXBvcykKKwkJCWJyZWFrOworCQlwYXRoWy0tcG9zXSA9ICcvJzsKKworCQlpZiAoIWluZm8pCisJCQlCVUcoInRyYXZlcnNlX2luZm8gcmFuIG91dCBvZiBsaXN0IGl0ZW1zIik7CisJCW5hbWUgPSBpbmZvLT5uYW1lOworCQluYW1lbGVuID0gaW5mby0+bmFtZWxlbjsKKwkJaW5mbyA9IGluZm8tPnByZXY7CisJfQorCXJldHVybiBwYXRoOworfQorCit2b2lkIHN0cmJ1Zl9tYWtlX3RyYXZlcnNlX3BhdGgoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuKQoreworCXNpemVfdCBsZW4gPSB0cmF2ZXJzZV9wYXRoX2xlbihpbmZvLCBuYW1lbGVuKTsKKworCXN0cmJ1Zl9ncm93KG91dCwgbGVuKTsKKwltYWtlX3RyYXZlcnNlX3BhdGgob3V0LT5idWYgKyBvdXQtPmxlbiwgb3V0LT5hbGxvYyAtIG91dC0+bGVuLAorCQkJICAgaW5mbywgbmFtZSwgbmFtZWxlbik7CisJc3RyYnVmX3NldGxlbihvdXQsIG91dC0+bGVuICsgbGVuKTsKK30KKworc3RydWN0IHRyZWVfZGVzY19za2lwIHsKKwlzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgKnByZXY7CisJY29uc3Qgdm9pZCAqcHRyOworfTsKKworc3RydWN0IHRyZWVfZGVzY194IHsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGQ7CisJc3RydWN0IHRyZWVfZGVzY19za2lwICpza2lwOworfTsKKworc3RhdGljIGludCBjaGVja19lbnRyeV9tYXRjaChjb25zdCBjaGFyICphLCBpbnQgYV9sZW4sIGNvbnN0IGNoYXIgKmIsIGludCBiX2xlbikKK3sKKwkvKgorCSAqIFRoZSBjYWxsZXIgd2FudHMgdG8gcGljayAqYSogZnJvbSBhIHRyZWUgb3Igbm90aGluZy4KKwkgKiBXZSBhcmUgbG9va2luZyBhdCAqYiogaW4gYSB0cmVlLgorCSAqCisJICogKDApIElmIGEgYW5kIGIgYXJlIHRoZSBzYW1lIG5hbWUsIHdlIGFyZSB0cml2aWFsbHkgaGFwcHkuCisJICoKKwkgKiBUaGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllcyB3aGVyZSAqYSogY291bGQgYmUgaGlkaW5nCisJICogYmVoaW5kICpiKi4KKwkgKgorCSAqICgxKSAqYSogPT0gInQiLCAgICpiKiA9PSAiYWIiICBpLmUuICpiKiBzb3J0cyBlYXJsaWVyIHRoYW4gKmEqIG5vCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlciB3aGF0LgorCSAqICgyKSAqYSogPT0gInQiLCAgICpiKiA9PSAidC0yIiBhbmQgInQiIGlzIGEgc3VidHJlZSBpbiB0aGUgdHJlZTsKKwkgKiAoMykgKmEqID09ICJ0LTIiLCAqYiogPT0gInQiICAgYW5kICJ0LTIiIGlzIGEgYmxvYiBpbiB0aGUgdHJlZS4KKwkgKgorCSAqIE90aGVyd2lzZSB3ZSBrbm93ICphKiB3b24ndCBhcHBlYXIgaW4gdGhlIHRyZWUgd2l0aG91dAorCSAqIHNjYW5uaW5nIGZ1cnRoZXIuCisJICovCisKKwlpbnQgY21wID0gbmFtZV9jb21wYXJlKGEsIGFfbGVuLCBiLCBiX2xlbik7CisKKwkvKiBNb3N0IGNvbW1vbiBjYXNlIGZpcnN0IC0tIHJlYWRpbmcgc3luYydkIHRyZWVzICovCisJaWYgKCFjbXApCisJCXJldHVybiBjbXA7CisKKwlpZiAoMCA8IGNtcCkgeworCQkvKiBhIGNvbWVzIGFmdGVyIGI7IGl0IGRvZXMgbm90IG1hdHRlciBpZiBpdCBpcyBjYXNlICgzKQorCQlpZiAoYl9sZW4gPCBhX2xlbiAmJiAhbWVtY21wKGEsIGIsIGJfbGVuKSAmJiBhW2JfbGVuXSA8ICcvJykKKwkJCXJldHVybiAxOworCQkqLworCQlyZXR1cm4gMTsgLyoga2VlcCBsb29raW5nICovCisJfQorCisJLyogYiBjb21lcyBhZnRlciBhOyBhcmUgd2UgbG9va2luZyBhdCBjYXNlICgyKT8gKi8KKwlpZiAoYV9sZW4gPCBiX2xlbiAmJiAhbWVtY21wKGEsIGIsIGFfbGVuKSAmJiBiW2FfbGVuXSA8ICcvJykKKwkJcmV0dXJuIDE7IC8qIGtlZXAgbG9va2luZyAqLworCisJcmV0dXJuIC0xOyAvKiBhIGNhbm5vdCBhcHBlYXIgaW4gdGhlIHRyZWUgKi8KK30KKworLyoKKyAqIEZyb20gdGhlIGV4dGVuZGVkIHRyZWVfZGVzYywgZXh0cmFjdCB0aGUgZmlyc3QgbmFtZSBlbnRyeSwgd2hpbGUKKyAqIHBheWluZyBhdHRlbnRpb24gdG8gdGhlIGNhbmRpZGF0ZSAiZmlyc3QiIG5hbWUuICBNb3N0IGltcG9ydGFudGx5LAorICogd2hlbiBsb29raW5nIGZvciBhbiBlbnRyeSwgaWYgdGhlcmUgYXJlIGVudHJpZXMgdGhhdCBzb3J0cyBlYXJsaWVyCisgKiBpbiB0aGUgdHJlZSBvYmplY3QgcmVwcmVzZW50YXRpb24gdGhhbiB0aGF0IG5hbWUsIHNraXAgdGhlbSBhbmQKKyAqIHByb2Nlc3MgdGhlIG5hbWVkIGVudHJ5IGZpcnN0LiAgV2Ugd2lsbCByZW1lbWJlciB0aGF0IHdlIGhhdmVuJ3QKKyAqIHByb2Nlc3NlZCB0aGUgZmlyc3QgZW50cnkgeWV0LCBhbmQgaW4gdGhlIGxhdGVyIGNhbGwgc2tpcCB0aGUKKyAqIGVudHJ5IHdlIHByb2Nlc3NlZCBlYXJseSB3aGVuIHVwZGF0ZV9leHRlbmRlZF9lbnRyeSgpIGlzIGNhbGxlZC4KKyAqCisgKiBFLmcuIGlmIHRoZSB1bmRlcmx5aW5nIHRyZWUgb2JqZWN0IGhhcyB0aGVzZSBlbnRyaWVzOgorICoKKyAqICAgIGJsb2IgICAgInQtMSIKKyAqICAgIGJsb2IgICAgInQtMiIKKyAqICAgIHRyZWUgICAgInQiCisgKiAgICBibG9iICAgICJ0PTEiCisgKgorICogYW5kIHRoZSAiZmlyc3QiIGFza3MgZm9yICJ0IiwgcmVtZW1iZXIgdGhhdCB3ZSBzdGlsbCBuZWVkIHRvCisgKiBwcm9jZXNzICJ0LTEiIGFuZCAidC0yIiBidXQgZXh0cmFjdCAidCIuICBBZnRlciBwcm9jZXNzaW5nIHRoZQorICogZW50cnkgInQiIGZyb20gdGhpcyBjYWxsLCB0aGUgY2FsbGVyIHdpbGwgbGV0IHVzIGtub3cgYnkgY2FsbGluZworICogdXBkYXRlX2V4dGVuZGVkX2VudHJ5KCkgdGhhdCB3ZSBjYW4gcmVtZW1iZXIgInQiIGhhcyBiZWVuIHByb2Nlc3NlZAorICogYWxyZWFkeS4KKyAqLworCitzdGF0aWMgdm9pZCBleHRlbmRlZF9lbnRyeV9leHRyYWN0KHN0cnVjdCB0cmVlX2Rlc2NfeCAqdCwKKwkJCQkgICBzdHJ1Y3QgbmFtZV9lbnRyeSAqYSwKKwkJCQkgICBjb25zdCBjaGFyICpmaXJzdCwKKwkJCQkgICBpbnQgZmlyc3RfbGVuKQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHByb2JlOworCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqc2tpcDsKKworCS8qCisJICogRXh0cmFjdCB0aGUgZmlyc3QgZW50cnkgZnJvbSB0aGUgdHJlZV9kZXNjLCBidXQgc2tpcCB0aGUKKwkgKiBvbmVzIHRoYXQgd2UgYWxyZWFkeSByZXR1cm5lZCBpbiBlYXJsaWVyIHJvdW5kcy4KKwkgKi8KKwl3aGlsZSAoMSkgeworCQlpZiAoIXQtPmQuc2l6ZSkgeworCQkJZW50cnlfY2xlYXIoYSk7CisJCQlicmVhazsgLyogbm90IGZvdW5kICovCisJCX0KKwkJZW50cnlfZXh0cmFjdCgmdC0+ZCwgYSk7CisJCWZvciAoc2tpcCA9IHQtPnNraXA7IHNraXA7IHNraXAgPSBza2lwLT5wcmV2KQorCQkJaWYgKGEtPnBhdGggPT0gc2tpcC0+cHRyKQorCQkJCWJyZWFrOyAvKiBmb3VuZCAqLworCQlpZiAoIXNraXApCisJCQlicmVhazsKKwkJLyogV2UgaGF2ZSBwcm9jZXNzZWQgdGhpcyBlbnRyeSBhbHJlYWR5LiAqLworCQl1cGRhdGVfdHJlZV9lbnRyeSgmdC0+ZCk7CisJfQorCisJaWYgKCFmaXJzdCB8fCAhYS0+cGF0aCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgY2FsbGVyIHdhbnRzICJmaXJzdCIgZnJvbSB0aGlzIHRyZWUsIG9yIG5vdGhpbmcuCisJICovCisJcGF0aCA9IGEtPnBhdGg7CisJbGVuID0gdHJlZV9lbnRyeV9sZW4oYSk7CisJc3dpdGNoIChjaGVja19lbnRyeV9tYXRjaChmaXJzdCwgZmlyc3RfbGVuLCBwYXRoLCBsZW4pKSB7CisJY2FzZSAtMToKKwkJZW50cnlfY2xlYXIoYSk7CisJY2FzZSAwOgorCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIGxvb2stYWhlYWQgLS0gd2Ugc3VzcGVjdCB0aGF0IGEgc3VidHJlZSB3aG9zZQorCSAqIG5hbWUgaXMgImZpcnN0IiBtYXkgYmUgaGlkaW5nIGJlaGluZCB0aGUgY3VycmVudCBlbnRyeSAicGF0aCIuCisJICovCisJcHJvYmUgPSB0LT5kOworCXdoaWxlIChwcm9iZS5zaXplKSB7CisJCWVudHJ5X2V4dHJhY3QoJnByb2JlLCBhKTsKKwkJcGF0aCA9IGEtPnBhdGg7CisJCWxlbiA9IHRyZWVfZW50cnlfbGVuKGEpOworCQlzd2l0Y2ggKGNoZWNrX2VudHJ5X21hdGNoKGZpcnN0LCBmaXJzdF9sZW4sIHBhdGgsIGxlbikpIHsKKwkJY2FzZSAtMToKKwkJCWVudHJ5X2NsZWFyKGEpOworCQljYXNlIDA6CisJCQlyZXR1cm47CisJCWRlZmF1bHQ6CisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmcHJvYmUpOworCQkJYnJlYWs7CisJCX0KKwkJLyoga2VlcCBsb29raW5nICovCisJfQorCWVudHJ5X2NsZWFyKGEpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZXh0ZW5kZWRfZW50cnkoc3RydWN0IHRyZWVfZGVzY194ICp0LCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYSkKK3sKKwlpZiAodC0+ZC5lbnRyeS5wYXRoID09IGEtPnBhdGgpIHsKKwkJdXBkYXRlX3RyZWVfZW50cnkoJnQtPmQpOworCX0gZWxzZSB7CisJCS8qIHdlIGhhdmUgcmV0dXJuZWQgdGhpcyBlbnRyeSBlYXJseSAqLworCQlzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgKnNraXAgPSB4bWFsbG9jKHNpemVvZigqc2tpcCkpOworCQlza2lwLT5wdHIgPSBhLT5wYXRoOworCQlza2lwLT5wcmV2ID0gdC0+c2tpcDsKKwkJdC0+c2tpcCA9IHNraXA7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2V4dGVuZGVkX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2NfeCAqdCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgKnAsICpzOworCisJZm9yIChzID0gdC0+c2tpcDsgczsgcyA9IHApIHsKKwkJcCA9IHMtPnByZXY7CisJCWZyZWUocyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBwcnVuZV90cmF2ZXJzYWwoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJICBzdHJ1Y3QgbmFtZV9lbnRyeSAqZSwKKwkJCQkgIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJCQkgIGludCBzdGlsbF9pbnRlcmVzdGluZykKK3sKKwlpZiAoIWluZm8tPnBhdGhzcGVjIHx8IHN0aWxsX2ludGVyZXN0aW5nID09IDIpCisJCXJldHVybiAyOworCWlmIChzdGlsbF9pbnRlcmVzdGluZyA8IDApCisJCXJldHVybiBzdGlsbF9pbnRlcmVzdGluZzsKKwlyZXR1cm4gdHJlZV9lbnRyeV9pbnRlcmVzdGluZyhpc3RhdGUsIGUsIGJhc2UsCisJCQkJICAgICAgMCwgaW5mby0+cGF0aHNwZWMpOworfQorCitpbnQgdHJhdmVyc2VfdHJlZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgIGludCBuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LAorCQkgICBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5W01BWF9UUkFWRVJTRV9UUkVFU107CisJaW50IGk7CisJc3RydWN0IHRyZWVfZGVzY194IHR4W0FSUkFZX1NJWkUoZW50cnkpXTsKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2UgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaW50ZXJlc3RpbmcgPSAxOworCWNoYXIgKnRyYXZlcnNlX3BhdGg7CisKKwlpZiAobiA+PSBBUlJBWV9TSVpFKGVudHJ5KSkKKwkJQlVHKCJ0cmF2ZXJzZV90cmVlcygpIGNhbGxlZCB3aXRoIHRvbyBtYW55IHRyZWVzICglZCkiLCBuKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJdHhbaV0uZCA9IHRbaV07CisJCXR4W2ldLnNraXAgPSBOVUxMOworCX0KKworCWlmIChpbmZvLT5wcmV2KSB7CisJCXN0cmJ1Zl9tYWtlX3RyYXZlcnNlX3BhdGgoJmJhc2UsIGluZm8tPnByZXYsCisJCQkJCSAgaW5mby0+bmFtZSwgaW5mby0+bmFtZWxlbik7CisJCXN0cmJ1Zl9hZGRjaCgmYmFzZSwgJy8nKTsKKwkJdHJhdmVyc2VfcGF0aCA9IHhzdHJuZHVwKGJhc2UuYnVmLCBiYXNlLmxlbik7CisJfSBlbHNlIHsKKwkJdHJhdmVyc2VfcGF0aCA9IHhzdHJuZHVwKGluZm8tPm5hbWUsIGluZm8tPnBhdGhsZW4pOworCX0KKwlpbmZvLT50cmF2ZXJzZV9wYXRoID0gdHJhdmVyc2VfcGF0aDsKKwlmb3IgKDs7KSB7CisJCWludCB0cmVlc191c2VkOworCQl1bnNpZ25lZCBsb25nIG1hc2ssIGRpcm1hc2s7CisJCWNvbnN0IGNoYXIgKmZpcnN0ID0gTlVMTDsKKwkJaW50IGZpcnN0X2xlbiA9IDA7CisJCXN0cnVjdCBuYW1lX2VudHJ5ICplID0gTlVMTDsKKwkJaW50IGxlbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQllID0gZW50cnkgKyBpOworCQkJZXh0ZW5kZWRfZW50cnlfZXh0cmFjdCh0eCArIGksIGUsIE5VTEwsIDApOworCQl9CisKKwkJLyoKKwkJICogQSB0cmVlIG1heSBoYXZlICJ0LTIiIGF0IHRoZSBjdXJyZW50IGxvY2F0aW9uIGV2ZW4KKwkJICogdGhvdWdoIGl0IG1heSBoYXZlICJ0IiB0aGF0IGlzIGEgc3VidHJlZSBiZWhpbmQgaXQsCisJCSAqIGFuZCBhbm90aGVyIHRyZWUgbWF5IHJldHVybiAidCIuICBXZSB3YW50IHRvIGdyYWIKKwkJICogYWxsICJ0IiBmcm9tIGFsbCB0cmVlcyB0byBtYXRjaCBpbiBzdWNoIGEgY2FzZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWUgPSBlbnRyeSArIGk7CisJCQlpZiAoIWUtPnBhdGgpCisJCQkJY29udGludWU7CisJCQlsZW4gPSB0cmVlX2VudHJ5X2xlbihlKTsKKwkJCWlmICghZmlyc3QpIHsKKwkJCQlmaXJzdCA9IGUtPnBhdGg7CisJCQkJZmlyc3RfbGVuID0gbGVuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG5hbWVfY29tcGFyZShlLT5wYXRoLCBsZW4sIGZpcnN0LCBmaXJzdF9sZW4pIDwgMCkgeworCQkJCWZpcnN0ID0gZS0+cGF0aDsKKwkJCQlmaXJzdF9sZW4gPSBsZW47CisJCQl9CisJCX0KKworCQlpZiAoZmlyc3QpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCQllID0gZW50cnkgKyBpOworCQkJCWV4dGVuZGVkX2VudHJ5X2V4dHJhY3QodHggKyBpLCBlLCBmaXJzdCwgZmlyc3RfbGVuKTsKKwkJCQkvKiBDdWxsIHRoZSBvbmVzIHRoYXQgYXJlIG5vdCB0aGUgZWFybGllc3QgKi8KKwkJCQlpZiAoIWUtPnBhdGgpCisJCQkJCWNvbnRpbnVlOworCQkJCWxlbiA9IHRyZWVfZW50cnlfbGVuKGUpOworCQkJCWlmIChuYW1lX2NvbXBhcmUoZS0+cGF0aCwgbGVuLCBmaXJzdCwgZmlyc3RfbGVuKSkKKwkJCQkJZW50cnlfY2xlYXIoZSk7CisJCQl9CisJCX0KKworCQkvKiBOb3cgd2UgaGF2ZSBpbiBlbnRyeVtpXSB0aGUgZWFybGllc3QgbmFtZSBmcm9tIHRoZSB0cmVlcyAqLworCQltYXNrID0gMDsKKwkJZGlybWFzayA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWlmICghZW50cnlbaV0ucGF0aCkKKwkJCQljb250aW51ZTsKKwkJCW1hc2sgfD0gMXVsIDw8IGk7CisJCQlpZiAoU19JU0RJUihlbnRyeVtpXS5tb2RlKSkKKwkJCQlkaXJtYXNrIHw9IDF1bCA8PCBpOworCQkJZSA9ICZlbnRyeVtpXTsKKwkJfQorCQlpZiAoIW1hc2spCisJCQlicmVhazsKKwkJaW50ZXJlc3RpbmcgPSBwcnVuZV90cmF2ZXJzYWwoaXN0YXRlLCBlLCBpbmZvLCAmYmFzZSwgaW50ZXJlc3RpbmcpOworCQlpZiAoaW50ZXJlc3RpbmcgPCAwKQorCQkJYnJlYWs7CisJCWlmIChpbnRlcmVzdGluZykgeworCQkJdHJlZXNfdXNlZCA9IGluZm8tPmZuKG4sIG1hc2ssIGRpcm1hc2ssIGVudHJ5LCBpbmZvKTsKKwkJCWlmICh0cmVlc191c2VkIDwgMCkgeworCQkJCWVycm9yID0gdHJlZXNfdXNlZDsKKwkJCQlpZiAoIWluZm8tPnNob3dfYWxsX2Vycm9ycykKKwkJCQkJYnJlYWs7CisJCQl9CisJCQltYXNrICY9IHRyZWVzX3VzZWQ7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCWlmIChtYXNrICYgKDF1bCA8PCBpKSkKKwkJCQl1cGRhdGVfZXh0ZW5kZWRfZW50cnkodHggKyBpLCBlbnRyeSArIGkpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlmcmVlX2V4dGVuZGVkX2VudHJ5KHR4ICsgaSk7CisJZnJlZSh0cmF2ZXJzZV9wYXRoKTsKKwlpbmZvLT50cmF2ZXJzZV9wYXRoID0gTlVMTDsKKwlzdHJidWZfcmVsZWFzZSgmYmFzZSk7CisJcmV0dXJuIGVycm9yOworfQorCitzdHJ1Y3QgZGlyX3N0YXRlIHsKKwl2b2lkICp0cmVlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKK307CisKK3N0YXRpYyBpbnQgZmluZF90cmVlX2VudHJ5KHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LAorCQkJICAgdW5zaWduZWQgc2hvcnQgKm1vZGUpCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJd2hpbGUgKHQtPnNpemUpIHsKKwkJY29uc3QgY2hhciAqZW50cnk7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpbnQgZW50cnlsZW4sIGNtcDsKKworCQlvaWRjcHkoJm9pZCwgdHJlZV9lbnRyeV9leHRyYWN0KHQsICZlbnRyeSwgbW9kZSkpOworCQllbnRyeWxlbiA9IHRyZWVfZW50cnlfbGVuKCZ0LT5lbnRyeSk7CisJCXVwZGF0ZV90cmVlX2VudHJ5KHQpOworCQlpZiAoZW50cnlsZW4gPiBuYW1lbGVuKQorCQkJY29udGludWU7CisJCWNtcCA9IG1lbWNtcChuYW1lLCBlbnRyeSwgZW50cnlsZW4pOworCQlpZiAoY21wID4gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY21wIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoZW50cnlsZW4gPT0gbmFtZWxlbikgeworCQkJb2lkY3B5KHJlc3VsdCwgJm9pZCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAobmFtZVtlbnRyeWxlbl0gIT0gJy8nKQorCQkJY29udGludWU7CisJCWlmICghU19JU0RJUigqbW9kZSkpCisJCQlicmVhazsKKwkJaWYgKCsrZW50cnlsZW4gPT0gbmFtZWxlbikgeworCQkJb2lkY3B5KHJlc3VsdCwgJm9pZCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gZ2V0X3RyZWVfZW50cnkociwgJm9pZCwgbmFtZSArIGVudHJ5bGVuLCByZXN1bHQsIG1vZGUpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludCBnZXRfdHJlZV9lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZV9vaWQsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgdW5zaWduZWQgc2hvcnQgKm1vZGUpCit7CisJaW50IHJldHZhbDsKKwl2b2lkICp0cmVlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJvb3Q7CisKKwl0cmVlID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UociwgdHJlZV9vaWQsIHRyZWVfdHlwZSwgJnNpemUsICZyb290KTsKKwlpZiAoIXRyZWUpCisJCXJldHVybiAtMTsKKworCWlmIChuYW1lWzBdID09ICdcMCcpIHsKKwkJb2lkY3B5KG9pZCwgJnJvb3QpOworCQlmcmVlKHRyZWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXNpemUpIHsKKwkJcmV0dmFsID0gLTE7CisJfSBlbHNlIHsKKwkJc3RydWN0IHRyZWVfZGVzYyB0OworCQlpbml0X3RyZWVfZGVzYygmdCwgdHJlZSwgc2l6ZSk7CisJCXJldHZhbCA9IGZpbmRfdHJlZV9lbnRyeShyLCAmdCwgbmFtZSwgb2lkLCBtb2RlKTsKKwl9CisJZnJlZSh0cmVlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyBpcyBMaW51eCdzIGJ1aWx0LWluIG1heCBmb3IgdGhlIG51bWJlciBvZiBzeW1saW5rcyB0byBmb2xsb3cuCisgKiBUaGF0IGxpbWl0LCBvZiBjb3Vyc2UsIGRvZXMgbm90IGFmZmVjdCBnaXQsIGJ1dCBpdCdzIGEgcmVhc29uYWJsZQorICogY2hvaWNlLgorICovCisjZGVmaW5lIEdFVF9UUkVFX0VOVFJZX0ZPTExPV19TWU1MSU5LU19NQVhfTElOS1MgNDAKKworLyoqCisgKiBGaW5kIGEgdHJlZSBlbnRyeSBieSBmb2xsb3dpbmcgc3ltbGlua3MgaW4gdHJlZV9zaGEgKHdoaWNoIGlzCisgKiBhc3N1bWVkIHRvIGJlIHRoZSByb290IG9mIHRoZSByZXBvc2l0b3J5KS4gIEluIHRoZSBldmVudCB0aGF0IGEKKyAqIHN5bWxpbmsgcG9pbnRzIG91dHNpZGUgdGhlIHJlcG9zaXRvcnkgKGUuZy4gYSBsaW5rIHRvIC9mb28gb3IgYQorICogcm9vdC1sZXZlbCBsaW5rIHRvIC4uL2ZvbyksIHRoZSBwb3J0aW9uIG9mIHRoZSBsaW5rIHdoaWNoIGlzCisgKiBvdXRzaWRlIHRoZSByZXBvc2l0b3J5IHdpbGwgYmUgcmV0dXJuZWQgaW4gcmVzdWx0X3BhdGgsIGFuZCAqbW9kZQorICogd2lsbCBiZSBzZXQgdG8gMC4gIEl0IGlzIGFzc3VtZWQgdGhhdCByZXN1bHRfcGF0aCBpcyB1bmluaXRpYWxpemVkLgorICogSWYgdGhlcmUgYXJlIG5vIHN5bWxpbmtzLCBvciB0aGUgZW5kIHJlc3VsdCBvZiB0aGUgc3ltbGluayBjaGFpbgorICogcG9pbnRzIHRvIGFuIG9iamVjdCBpbnNpZGUgdGhlIHJlcG9zaXRvcnksIHJlc3VsdCB3aWxsIGJlIGZpbGxlZCBpbgorICogd2l0aCB0aGUgc2hhMSBvZiB0aGUgZm91bmQgb2JqZWN0LCBhbmQgKm1vZGUgd2lsbCBob2xkIHRoZSBtb2RlIG9mCisgKiB0aGUgb2JqZWN0LgorICoKKyAqIFNlZSB0aGUgY29kZSBmb3IgZW51bSBnZXRfb2lkX3Jlc3VsdCBmb3IgYSBkZXNjcmlwdGlvbiBvZgorICogdGhlIHJldHVybiB2YWx1ZXMuCisgKi8KK2VudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X3RyZWVfZW50cnlfZm9sbG93X3N5bWxpbmtzKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQlzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCBzdHJ1Y3Qgc3RyYnVmICpyZXN1bHRfcGF0aCwKKwkJdW5zaWduZWQgc2hvcnQgKm1vZGUpCit7CisJaW50IHJldHZhbCA9IE1JU1NJTkdfT0JKRUNUOworCXN0cnVjdCBkaXJfc3RhdGUgKnBhcmVudHMgPSBOVUxMOworCXNpemVfdCBwYXJlbnRzX2FsbG9jID0gMDsKKwlzaXplX3QgaSwgcGFyZW50c19uciA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBjdXJyZW50X3RyZWVfb2lkOworCXN0cnVjdCBzdHJidWYgbmFtZWJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCB0cmVlX2Rlc2MgdDsKKwlpbnQgZm9sbG93c19yZW1haW5pbmcgPSBHRVRfVFJFRV9FTlRSWV9GT0xMT1dfU1lNTElOS1NfTUFYX0xJTktTOworCisJaW5pdF90cmVlX2Rlc2MoJnQsIE5VTEwsIDBVTCk7CisJc3RyYnVmX2FkZHN0cigmbmFtZWJ1ZiwgbmFtZSk7CisJb2lkY3B5KCZjdXJyZW50X3RyZWVfb2lkLCB0cmVlX29pZCk7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgZmluZF9yZXN1bHQ7CisJCWNoYXIgKmZpcnN0X3NsYXNoOworCQljaGFyICpyZW1haW5kZXIgPSBOVUxMOworCisJCWlmICghdC5idWZmZXIpIHsKKwkJCXZvaWQgKnRyZWU7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIHJvb3Q7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCQl0cmVlID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UociwKKwkJCQkJCQkgICZjdXJyZW50X3RyZWVfb2lkLAorCQkJCQkJCSAgdHJlZV90eXBlLCAmc2l6ZSwKKwkJCQkJCQkgICZyb290KTsKKwkJCWlmICghdHJlZSkKKwkJCQlnb3RvIGRvbmU7CisKKwkJCUFMTE9DX0dST1cocGFyZW50cywgcGFyZW50c19uciArIDEsIHBhcmVudHNfYWxsb2MpOworCQkJcGFyZW50c1twYXJlbnRzX25yXS50cmVlID0gdHJlZTsKKwkJCXBhcmVudHNbcGFyZW50c19ucl0uc2l6ZSA9IHNpemU7CisJCQlvaWRjcHkoJnBhcmVudHNbcGFyZW50c19ucl0ub2lkLCAmcm9vdCk7CisJCQlwYXJlbnRzX25yKys7CisKKwkJCWlmIChuYW1lYnVmLmJ1ZlswXSA9PSAnXDAnKSB7CisJCQkJb2lkY3B5KHJlc3VsdCwgJnJvb3QpOworCQkJCXJldHZhbCA9IEZPVU5EOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJaWYgKCFzaXplKQorCQkJCWdvdG8gZG9uZTsKKworCQkJLyogZGVzY2VuZCAqLworCQkJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUsIHNpemUpOworCQl9CisKKwkJLyogSGFuZGxlIHN5bWxpbmtzIHRvIGUuZy4gYS8vYiBieSByZW1vdmluZyBsZWFkaW5nIHNsYXNoZXMgKi8KKwkJd2hpbGUgKG5hbWVidWYuYnVmWzBdID09ICcvJykgeworCQkJc3RyYnVmX3JlbW92ZSgmbmFtZWJ1ZiwgMCwgMSk7CisJCX0KKworCQkvKiBTcGxpdCBuYW1lYnVmIGludG8gYSBmaXJzdCBjb21wb25lbnQgYW5kIGEgcmVtYWluZGVyICovCisJCWlmICgoZmlyc3Rfc2xhc2ggPSBzdHJjaHIobmFtZWJ1Zi5idWYsICcvJykpKSB7CisJCQkqZmlyc3Rfc2xhc2ggPSAwOworCQkJcmVtYWluZGVyID0gZmlyc3Rfc2xhc2ggKyAxOworCQl9CisKKwkJaWYgKCFzdHJjbXAobmFtZWJ1Zi5idWYsICIuLiIpKSB7CisJCQlzdHJ1Y3QgZGlyX3N0YXRlICpwYXJlbnQ7CisJCQkvKgorCQkJICogV2UgY291bGQgZW5kIHVwIHdpdGggLi4gaW4gdGhlIG5hbWVidWYgaWYgaXQKKwkJCSAqIGFwcGVhcnMgaW4gYSBzeW1saW5rLgorCQkJICovCisKKwkJCWlmIChwYXJlbnRzX25yID09IDEpIHsKKwkJCQlpZiAocmVtYWluZGVyKQorCQkJCQkqZmlyc3Rfc2xhc2ggPSAnLyc7CisJCQkJc3RyYnVmX2FkZChyZXN1bHRfcGF0aCwgbmFtZWJ1Zi5idWYsCisJCQkJCSAgIG5hbWVidWYubGVuKTsKKwkJCQkqbW9kZSA9IDA7CisJCQkJcmV0dmFsID0gRk9VTkQ7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcGFyZW50ID0gJnBhcmVudHNbcGFyZW50c19uciAtIDFdOworCQkJZnJlZShwYXJlbnQtPnRyZWUpOworCQkJcGFyZW50c19uci0tOworCQkJcGFyZW50ID0gJnBhcmVudHNbcGFyZW50c19uciAtIDFdOworCQkJaW5pdF90cmVlX2Rlc2MoJnQsIHBhcmVudC0+dHJlZSwgcGFyZW50LT5zaXplKTsKKwkJCXN0cmJ1Zl9yZW1vdmUoJm5hbWVidWYsIDAsIHJlbWFpbmRlciA/IDMgOiAyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgY291bGQgZW5kIHVwIGhlcmUgdmlhIGEgc3ltbGluayB0byBkaXIvLi4gKi8KKwkJaWYgKG5hbWVidWYuYnVmWzBdID09ICdcMCcpIHsKKwkJCW9pZGNweShyZXN1bHQsICZwYXJlbnRzW3BhcmVudHNfbnIgLSAxXS5vaWQpOworCQkJcmV0dmFsID0gRk9VTkQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiBMb29rIHVwIHRoZSBmaXJzdCAob3Igb25seSkgcGF0aCBjb21wb25lbnQgaW4gdGhlIHRyZWUuICovCisJCWZpbmRfcmVzdWx0ID0gZmluZF90cmVlX2VudHJ5KHIsICZ0LCBuYW1lYnVmLmJ1ZiwKKwkJCQkJICAgICAgJmN1cnJlbnRfdHJlZV9vaWQsIG1vZGUpOworCQlpZiAoZmluZF9yZXN1bHQpIHsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmIChTX0lTRElSKCptb2RlKSkgeworCQkJaWYgKCFyZW1haW5kZXIpIHsKKwkJCQlvaWRjcHkocmVzdWx0LCAmY3VycmVudF90cmVlX29pZCk7CisJCQkJcmV0dmFsID0gRk9VTkQ7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJLyogRGVzY2VuZCB0aGUgdHJlZSAqLworCQkJdC5idWZmZXIgPSBOVUxMOworCQkJc3RyYnVmX3JlbW92ZSgmbmFtZWJ1ZiwgMCwKKwkJCQkgICAgICAxICsgZmlyc3Rfc2xhc2ggLSBuYW1lYnVmLmJ1Zik7CisJCX0gZWxzZSBpZiAoU19JU1JFRygqbW9kZSkpIHsKKwkJCWlmICghcmVtYWluZGVyKSB7CisJCQkJb2lkY3B5KHJlc3VsdCwgJmN1cnJlbnRfdHJlZV9vaWQpOworCQkJCXJldHZhbCA9IEZPVU5EOworCQkJfSBlbHNlIHsKKwkJCQlyZXR2YWwgPSBOT1RfRElSOworCQkJfQorCQkJZ290byBkb25lOworCQl9IGVsc2UgaWYgKFNfSVNMTksoKm1vZGUpKSB7CisJCQkvKiBGb2xsb3cgYSBzeW1saW5rICovCisJCQl1bnNpZ25lZCBsb25nIGxpbmtfbGVuOworCQkJc2l6ZV90IGxlbjsKKwkJCWNoYXIgKmNvbnRlbnRzLCAqY29udGVudHNfc3RhcnQ7CisJCQlzdHJ1Y3QgZGlyX3N0YXRlICpwYXJlbnQ7CisJCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwkJCWlmIChmb2xsb3dzX3JlbWFpbmluZy0tID09IDApIHsKKwkJCQkvKiBUb28gbWFueSBzeW1saW5rcyBmb2xsb3dlZCAqLworCQkJCXJldHZhbCA9IFNZTUxJTktfTE9PUDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGZvbGxvd2VkIGF0IGEgbGVhc3QKKwkJCSAqIG9uZSBzeW1saW5rLCBzbyBvbiBlcnJvciB3ZSBuZWVkIHRvIHJlcG9ydCB0aGlzLgorCQkJICovCisJCQlyZXR2YWwgPSBEQU5HTElOR19TWU1MSU5LOworCisJCQljb250ZW50cyA9IHJlcG9fcmVhZF9vYmplY3RfZmlsZShyLAorCQkJCQkJICAgICZjdXJyZW50X3RyZWVfb2lkLCAmdHlwZSwKKwkJCQkJCSAgICAmbGlua19sZW4pOworCisJCQlpZiAoIWNvbnRlbnRzKQorCQkJCWdvdG8gZG9uZTsKKworCQkJaWYgKGNvbnRlbnRzWzBdID09ICcvJykgeworCQkJCXN0cmJ1Zl9hZGRzdHIocmVzdWx0X3BhdGgsIGNvbnRlbnRzKTsKKwkJCQlmcmVlKGNvbnRlbnRzKTsKKwkJCQkqbW9kZSA9IDA7CisJCQkJcmV0dmFsID0gRk9VTkQ7CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQlpZiAocmVtYWluZGVyKQorCQkJCWxlbiA9IGZpcnN0X3NsYXNoIC0gbmFtZWJ1Zi5idWY7CisJCQllbHNlCisJCQkJbGVuID0gbmFtZWJ1Zi5sZW47CisKKwkJCWNvbnRlbnRzX3N0YXJ0ID0gY29udGVudHM7CisKKwkJCXBhcmVudCA9ICZwYXJlbnRzW3BhcmVudHNfbnIgLSAxXTsKKwkJCWluaXRfdHJlZV9kZXNjKCZ0LCBwYXJlbnQtPnRyZWUsIHBhcmVudC0+c2l6ZSk7CisJCQlzdHJidWZfc3BsaWNlKCZuYW1lYnVmLCAwLCBsZW4sCisJCQkJICAgICAgY29udGVudHNfc3RhcnQsIGxpbmtfbGVuKTsKKwkJCWlmIChyZW1haW5kZXIpCisJCQkJbmFtZWJ1Zi5idWZbbGlua19sZW5dID0gJy8nOworCQkJZnJlZShjb250ZW50cyk7CisJCX0KKwl9Citkb25lOgorCWZvciAoaSA9IDA7IGkgPCBwYXJlbnRzX25yOyBpKyspCisJCWZyZWUocGFyZW50c1tpXS50cmVlKTsKKwlmcmVlKHBhcmVudHMpOworCisJc3RyYnVmX3JlbGVhc2UoJm5hbWVidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfZW50cnkoY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnksIGludCBwYXRobGVuLAorCQkgICAgICAgY29uc3QgY2hhciAqbWF0Y2gsIGludCBtYXRjaGxlbiwKKwkJICAgICAgIGVudW0gaW50ZXJlc3RpbmcgKm5ldmVyX2ludGVyZXN0aW5nKQoreworCWludCBtID0gLTE7IC8qIHNpZ25hbHMgdGhhdCB3ZSBoYXZlbid0IGNhbGxlZCBzdHJuY21wKCkgKi8KKworCWlmIChpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0lDQVNFKQorCQkvKgorCQkgKiAiTmV2ZXIgaW50ZXJlc3RpbmciIHRyaWNrIHJlcXVpcmVzIGV4YWN0CisJCSAqIG1hdGNoaW5nLiBXZSBjb3VsZCBkbyBzb21ldGhpbmcgY2xldmVyIHdpdGggaW5leGFjdAorCQkgKiBtYXRjaGluZywgYnV0IGl0J3MgdHJpY2tpZXIgKGFuZCBub3QgdG8gZm9yZ2V0IHRoYXQKKwkJICogc3RyY2FzZWNtcCBpcyBsb2NhbGUtZGVwZW5kZW50LCBhdCBsZWFzdCBpbgorCQkgKiBnbGliYykuIEp1c3QgZGlzYWJsZSBpdCBmb3Igbm93LiBJdCBjYW4ndCBiZSB3b3JzZQorCQkgKiB0aGFuIHRoZSB3aWxkY2FyZCdzIGNvZGVwYXRoIG9mICdbVHRdW0hpXVtJc11bU3NdJworCQkgKiBwYXR0ZXJuLgorCQkgKi8KKwkJKm5ldmVyX2ludGVyZXN0aW5nID0gZW50cnlfbm90X2ludGVyZXN0aW5nOworCWVsc2UgaWYgKCpuZXZlcl9pbnRlcmVzdGluZyAhPSBlbnRyeV9ub3RfaW50ZXJlc3RpbmcpIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBub3Qgc2VlbiBhbnkgbWF0Y2ggdGhhdCBzb3J0cyBsYXRlcgorCQkgKiB0aGFuIHRoZSBjdXJyZW50IHBhdGguCisJCSAqLworCisJCS8qCisJCSAqIERvZXMgbWF0Y2ggc29ydCBzdHJpY3RseSBlYXJsaWVyIHRoYW4gcGF0aAorCQkgKiB3aXRoIHRoZWlyIGNvbW1vbiBwYXJ0cz8KKwkJICovCisJCW0gPSBzdHJuY21wKG1hdGNoLCBlbnRyeS0+cGF0aCwKKwkJCSAgICAobWF0Y2hsZW4gPCBwYXRobGVuKSA/IG1hdGNobGVuIDogcGF0aGxlbik7CisJCWlmIChtIDwgMCkKKwkJCXJldHVybiAwOworCisJCS8qCisJCSAqIElmIHdlIGNvbWUgaGVyZSBldmVuIG9uY2UsIHRoYXQgbWVhbnMgdGhlcmUgaXMgYXQKKwkJICogbGVhc3Qgb25lIHBhdGhzcGVjIHRoYXQgd291bGQgc29ydCBlcXVhbCB0byBvcgorCQkgKiBsYXRlciB0aGFuIHRoZSBwYXRoIHdlIGFyZSBjdXJyZW50bHkgbG9va2luZyBhdC4KKwkJICogSW4gb3RoZXIgd29yZHMsIGlmIHdlIGhhdmUgbmV2ZXIgcmVhY2hlZCB0aGlzIHBvaW50CisJCSAqIGFmdGVyIGl0ZXJhdGluZyBhbGwgcGF0aHNwZWNzLCBpdCBtZWFucyBhbGwKKwkJICogcGF0aHNwZWNzIGFyZSBlaXRoZXIgb3V0c2lkZSBvZiBiYXNlLCBvciBpbnNpZGUgdGhlCisJCSAqIGJhc2UgYnV0IHNvcnRzIHN0cmljdGx5IGVhcmxpZXIgdGhhbiB0aGUgY3VycmVudAorCQkgKiBvbmUuICBJbiBlaXRoZXIgY2FzZSwgdGhleSB3aWxsIG5ldmVyIG1hdGNoIHRoZQorCQkgKiBzdWJzZXF1ZW50IGVudHJpZXMuICBJbiBzdWNoIGEgY2FzZSwgd2UgaW5pdGlhbGl6ZWQKKwkJICogdGhlIHZhcmlhYmxlIHRvIC0xIGFuZCB0aGF0IGlzIHdoYXQgd2lsbCBiZQorCQkgKiByZXR1cm5lZCwgYWxsb3dpbmcgdGhlIGNhbGxlciB0byB0ZXJtaW5hdGUgZWFybHkuCisJCSAqLworCQkqbmV2ZXJfaW50ZXJlc3RpbmcgPSBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJfQorCisJaWYgKHBhdGhsZW4gPiBtYXRjaGxlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAobWF0Y2hsZW4gPiBwYXRobGVuKSB7CisJCWlmIChtYXRjaFtwYXRobGVuXSAhPSAnLycpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFTX0lTRElSKGVudHJ5LT5tb2RlKSAmJiAhU19JU0dJVExJTksoZW50cnktPm1vZGUpKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKG0gPT0gLTEpCisJCS8qCisJCSAqIHdlIGNoZWF0ZWQgYW5kIGRpZCBub3QgZG8gc3RybmNtcCgpLCBzbyB3ZSBkbworCQkgKiB0aGF0IGhlcmUuCisJCSAqLworCQltID0gcHNfc3RybmNtcChpdGVtLCBtYXRjaCwgZW50cnktPnBhdGgsIHBhdGhsZW4pOworCisJLyoKKwkgKiBJZiBjb21tb24gcGFydCBtYXRjaGVkIGVhcmxpZXIgdGhlbiBpdCBpcyBhIGhpdCwKKwkgKiBiZWNhdXNlIHdlIHJlamVjdGVkIHRoZSBjYXNlIHdoZXJlIHBhdGggaXMgbm90IGEKKwkgKiBsZWFkaW5nIGRpcmVjdG9yeSBhbmQgaXMgc2hvcnRlciB0aGFuIG1hdGNoLgorCSAqLworCWlmICghbSkKKwkJLyoKKwkJICogbWF0Y2hfZW50cnkgZG9lcyBub3QgY2hlY2sgaWYgdGhlIHByZWZpeCBwYXJ0IGlzCisJCSAqIG1hdGNoZWQgY2FzZS1zZW5zaXRpdmVseS4gSWYgdGhlIGVudHJ5IGlzIGEKKwkJICogZGlyZWN0b3J5IGFuZCBwYXJ0IG9mIHByZWZpeCwgaXQnbGwgYmUgcmVtYXRjaGVkCisJCSAqIGV2ZW50dWFsbHkgYnkgYmFzZWNtcCB3aXRoIHNwZWNpYWwgdHJlYXRtZW50IGZvcgorCQkgKiB0aGUgcHJlZml4LgorCQkgKi8KKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogOihpY2FzZSktYXdhcmUgc3RyaW5nIGNvbXBhcmUgKi8KK3N0YXRpYyBpbnQgYmFzZWNtcChjb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSwKKwkJICAgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqbWF0Y2gsIGludCBsZW4pCit7CisJaWYgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UpIHsKKwkJaW50IHJldCwgbiA9IGxlbiA+IGl0ZW0tPnByZWZpeCA/IGl0ZW0tPnByZWZpeCA6IGxlbjsKKwkJcmV0ID0gc3RybmNtcChiYXNlLCBtYXRjaCwgbik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQliYXNlICs9IG47CisJCW1hdGNoICs9IG47CisJCWxlbiAtPSBuOworCX0KKwlyZXR1cm4gcHNfc3RybmNtcChpdGVtLCBiYXNlLCBtYXRjaCwgbGVuKTsKK30KKworc3RhdGljIGludCBtYXRjaF9kaXJfcHJlZml4KGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQkJICAgIGNvbnN0IGNoYXIgKmJhc2UsCisJCQkgICAgY29uc3QgY2hhciAqbWF0Y2gsIGludCBtYXRjaGxlbikKK3sKKwlpZiAoYmFzZWNtcChpdGVtLCBiYXNlLCBtYXRjaCwgbWF0Y2hsZW4pKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGJhc2UgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgYSBwYXRoIHdoaWNoCisJICogd2FzIHNwZWNpZmllZCwgYWxsIG9mIHRoZW0gYXJlIGludGVyZXN0aW5nLgorCSAqLworCWlmICghbWF0Y2hsZW4gfHwKKwkgICAgYmFzZVttYXRjaGxlbl0gPT0gJy8nIHx8CisJICAgIG1hdGNoW21hdGNobGVuIC0gMV0gPT0gJy8nKQorCQlyZXR1cm4gMTsKKworCS8qIEp1c3QgYSByYW5kb20gcHJlZml4IG1hdGNoICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQZXJmb3JtIG1hdGNoaW5nIG9uIHRoZSBsZWFkaW5nIG5vbi13aWxkY2FyZCBwYXJ0IG9mCisgKiBwYXRoc3BlYy4gaXRlbS0+bm93aWxkY2FyZF9sZW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4gUmV0dXJuCisgKiBub24temVybyBpZiBiYXNlIGlzIG1hdGNoZWQuCisgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfd2lsZGNhcmRfYmFzZShjb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCSAgICAgICBpbnQgKm1hdGNoZWQpCit7CisJY29uc3QgY2hhciAqbWF0Y2ggPSBpdGVtLT5tYXRjaDsKKwkvKiB0aGUgd2lsZGNhcmQgcGFydCBpcyBub3QgY29uc2lkZXJlZCBpbiB0aGlzIGZ1bmN0aW9uICovCisJaW50IG1hdGNobGVuID0gaXRlbS0+bm93aWxkY2FyZF9sZW47CisKKwlpZiAoYmFzZWxlbikgeworCQlpbnQgZGlybGVuOworCQkvKgorCQkgKiBSZXR1cm4gZWFybHkgaWYgYmFzZSBpcyBsb25nZXIgdGhhbiB0aGUKKwkJICogbm9uLXdpbGRjYXJkIHBhcnQgYnV0IGl0IGRvZXMgbm90IG1hdGNoLgorCQkgKi8KKwkJaWYgKGJhc2VsZW4gPj0gbWF0Y2hsZW4pIHsKKwkJCSptYXRjaGVkID0gbWF0Y2hsZW47CisJCQlyZXR1cm4gIWJhc2VjbXAoaXRlbSwgYmFzZSwgbWF0Y2gsIG1hdGNobGVuKTsKKwkJfQorCisJCWRpcmxlbiA9IG1hdGNobGVuOworCQl3aGlsZSAoZGlybGVuICYmIG1hdGNoW2RpcmxlbiAtIDFdICE9ICcvJykKKwkJCWRpcmxlbi0tOworCisJCS8qCisJCSAqIFJldHVybiBlYXJseSBpZiBiYXNlIGlzIHNob3J0ZXIgdGhhbiB0aGUKKwkJICogbm9uLXdpbGRjYXJkIHBhcnQgYnV0IGl0IGRvZXMgbm90IG1hdGNoLiBOb3RlIHRoYXQKKwkJICogYmFzZSBlbmRzIHdpdGggJy8nIHNvIHdlIGFyZSBzdXJlIGl0IHJlYWxseSBtYXRjaGVzCisJCSAqIGRpcmVjdG9yeQorCQkgKi8KKwkJaWYgKGJhc2VjbXAoaXRlbSwgYmFzZSwgbWF0Y2gsIGJhc2VsZW4pKQorCQkJcmV0dXJuIDA7CisJCSptYXRjaGVkID0gYmFzZWxlbjsKKwl9IGVsc2UKKwkJKm1hdGNoZWQgPSAwOworCS8qCisJICogd2UgY291bGQgaGF2ZSBjaGVja2VkIGVudHJ5IGFnYWluc3QgdGhlIG5vbi13aWxkY2FyZCBwYXJ0CisJICogdGhhdCBpcyBub3QgaW4gYmFzZSBhbmQgZG9lcyBzaW1pbGFyIG5ldmVyX2ludGVyZXN0aW5nCisJICogb3B0aW1pemF0aW9uIGFzIGluIG1hdGNoX2VudHJ5LiBGb3Igbm93IGp1c3QgYmUgaGFwcHkgd2l0aAorCSAqIGJhc2UgY29tcGFyaXNvbi4KKwkgKi8KKwlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7Cit9CisKKy8qCisgKiBJcyBhIHRyZWUgZW50cnkgaW50ZXJlc3RpbmcgZ2l2ZW4gdGhlIHBhdGhzcGVjIHdlIGhhdmU/CisgKgorICogUHJlLWNvbmRpdGlvbjogZWl0aGVyIGJhc2VsZW4gPT0gYmFzZV9vZmZzZXQgKGkuZS4gZW1wdHkgcGF0aCkKKyAqIG9yIGJhc2VbYmFzZWxlbi0xXSA9PSAnLycgKGkuZS4gd2l0aCB0cmFpbGluZyBzbGFzaCkuCisgKi8KK3N0YXRpYyBlbnVtIGludGVyZXN0aW5nIGRvX21hdGNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnksCisJCQkJIHN0cnVjdCBzdHJidWYgKmJhc2UsIGludCBiYXNlX29mZnNldCwKKwkJCQkgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCQkgaW50IGV4Y2x1ZGUpCit7CisJaW50IGk7CisJaW50IHBhdGhsZW4sIGJhc2VsZW4gPSBiYXNlLT5sZW4gLSBiYXNlX29mZnNldDsKKwllbnVtIGludGVyZXN0aW5nIG5ldmVyX2ludGVyZXN0aW5nID0gcHMtPmhhc193aWxkY2FyZCA/CisJCWVudHJ5X25vdF9pbnRlcmVzdGluZyA6IGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZzsKKworCUdVQVJEX1BBVEhTUEVDKHBzLAorCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCSAgICAgICBQQVRIU1BFQ19NQVhERVBUSCB8CisJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMIHwKKwkJICAgICAgIFBBVEhTUEVDX0dMT0IgfAorCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkgICAgICAgUEFUSFNQRUNfRVhDTFVERSB8CisJCSAgICAgICBQQVRIU1BFQ19BVFRSKTsKKworCWlmICghcHMtPm5yKSB7CisJCWlmICghcHMtPnJlY3Vyc2l2ZSB8fAorCQkgICAgIShwcy0+bWFnaWMgJiBQQVRIU1BFQ19NQVhERVBUSCkgfHwKKwkJICAgIHBzLT5tYXhfZGVwdGggPT0gLTEpCisJCQlyZXR1cm4gYWxsX2VudHJpZXNfaW50ZXJlc3Rpbmc7CisJCXJldHVybiB3aXRoaW5fZGVwdGgoYmFzZS0+YnVmICsgYmFzZV9vZmZzZXQsIGJhc2VsZW4sCisJCQkJICAgICEhU19JU0RJUihlbnRyeS0+bW9kZSksCisJCQkJICAgIHBzLT5tYXhfZGVwdGgpID8KKwkJCWVudHJ5X2ludGVyZXN0aW5nIDogZW50cnlfbm90X2ludGVyZXN0aW5nOworCX0KKworCXBhdGhsZW4gPSB0cmVlX2VudHJ5X2xlbihlbnRyeSk7CisKKwlmb3IgKGkgPSBwcy0+bnIgLSAxOyBpID49IDA7IGktLSkgeworCQljb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSA9IHBzLT5pdGVtcytpOworCQljb25zdCBjaGFyICptYXRjaCA9IGl0ZW0tPm1hdGNoOworCQljb25zdCBjaGFyICpiYXNlX3N0ciA9IGJhc2UtPmJ1ZiArIGJhc2Vfb2Zmc2V0OworCQlpbnQgbWF0Y2hsZW4gPSBpdGVtLT5sZW4sIG1hdGNoZWQgPSAwOworCisJCWlmICgoIWV4Y2x1ZGUgJiYgICBpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0VYQ0xVREUpIHx8CisJCSAgICAoIGV4Y2x1ZGUgJiYgIShpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0VYQ0xVREUpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChiYXNlbGVuID49IG1hdGNobGVuKSB7CisJCQkvKiBJZiBpdCBkb2Vzbid0IG1hdGNoLCBtb3ZlIGFsb25nLi4uICovCisJCQlpZiAoIW1hdGNoX2Rpcl9wcmVmaXgoaXRlbSwgYmFzZV9zdHIsIG1hdGNoLCBtYXRjaGxlbikpCisJCQkJZ290byBtYXRjaF93aWxkY2FyZHM7CisKKwkJCWlmICghcHMtPnJlY3Vyc2l2ZSB8fAorCQkJICAgICEocHMtPm1hZ2ljICYgUEFUSFNQRUNfTUFYREVQVEgpIHx8CisJCQkgICAgcHMtPm1heF9kZXB0aCA9PSAtMSkgeworCQkJCWlmICghaXRlbS0+YXR0cl9tYXRjaF9ucikKKwkJCQkJcmV0dXJuIGFsbF9lbnRyaWVzX2ludGVyZXN0aW5nOworCQkJCWVsc2UKKwkJCQkJZ290byBpbnRlcmVzdGluZzsKKwkJCX0KKworCQkJaWYgKHdpdGhpbl9kZXB0aChiYXNlX3N0ciArIG1hdGNobGVuICsgMSwKKwkJCQkJIGJhc2VsZW4gLSBtYXRjaGxlbiAtIDEsCisJCQkJCSAhIVNfSVNESVIoZW50cnktPm1vZGUpLAorCQkJCQkgcHMtPm1heF9kZXB0aCkpCisJCQkJZ290byBpbnRlcmVzdGluZzsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZW50cnlfbm90X2ludGVyZXN0aW5nOworCQl9CisKKwkJLyogRWl0aGVyIHRoZXJlIG11c3QgYmUgbm8gYmFzZSwgb3IgdGhlIGJhc2UgbXVzdCBtYXRjaC4gKi8KKwkJaWYgKGJhc2VsZW4gPT0gMCB8fCAhYmFzZWNtcChpdGVtLCBiYXNlX3N0ciwgbWF0Y2gsIGJhc2VsZW4pKSB7CisJCQlpZiAobWF0Y2hfZW50cnkoaXRlbSwgZW50cnksIHBhdGhsZW4sCisJCQkJCW1hdGNoICsgYmFzZWxlbiwgbWF0Y2hsZW4gLSBiYXNlbGVuLAorCQkJCQkmbmV2ZXJfaW50ZXJlc3RpbmcpKQorCQkJCWdvdG8gaW50ZXJlc3Rpbmc7CisKKwkJCWlmIChpdGVtLT5ub3dpbGRjYXJkX2xlbiA8IGl0ZW0tPmxlbikgeworCQkJCWlmICghZ2l0X2ZubWF0Y2goaXRlbSwgbWF0Y2ggKyBiYXNlbGVuLCBlbnRyeS0+cGF0aCwKKwkJCQkJCSBpdGVtLT5ub3dpbGRjYXJkX2xlbiAtIGJhc2VsZW4pKQorCQkJCQlnb3RvIGludGVyZXN0aW5nOworCisJCQkJLyoKKwkJCQkgKiBNYXRjaCBhbGwgZGlyZWN0b3JpZXMuIFdlJ2xsIHRyeSB0bworCQkJCSAqIG1hdGNoIGZpbGVzIGxhdGVyIG9uLgorCQkJCSAqLworCQkJCWlmIChwcy0+cmVjdXJzaXZlICYmIFNfSVNESVIoZW50cnktPm1vZGUpKQorCQkJCQlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7CisKKwkJCQkvKgorCQkJCSAqIFdoZW4gbWF0Y2hpbmcgYWdhaW5zdCBzdWJtb2R1bGVzIHdpdGgKKwkJCQkgKiB3aWxkY2FyZCBjaGFyYWN0ZXJzLCBlbnN1cmUgdGhhdCB0aGUgZW50cnkKKwkJCQkgKiBhdCBsZWFzdCBtYXRjaGVzIHVwIHRvIHRoZSBmaXJzdCB3aWxkCisJCQkJICogY2hhcmFjdGVyLiAgTW9yZSBhY2N1cmF0ZSBtYXRjaGluZyBjYW4gdGhlbgorCQkJCSAqIGJlIHBlcmZvcm1lZCBpbiB0aGUgc3VibW9kdWxlIGl0c2VsZi4KKwkJCQkgKi8KKwkJCQlpZiAocHMtPnJlY3Vyc2Vfc3VibW9kdWxlcyAmJgorCQkJCSAgICBTX0lTR0lUTElOSyhlbnRyeS0+bW9kZSkgJiYKKwkJCQkgICAgIXBzX3N0cm5jbXAoaXRlbSwgbWF0Y2ggKyBiYXNlbGVuLAorCQkJCQkJZW50cnktPnBhdGgsCisJCQkJCQlpdGVtLT5ub3dpbGRjYXJkX2xlbiAtIGJhc2VsZW4pKQorCQkJCQlnb3RvIGludGVyZXN0aW5nOworCQkJfQorCisJCQljb250aW51ZTsKKwkJfQorCittYXRjaF93aWxkY2FyZHM6CisJCWlmIChpdGVtLT5ub3dpbGRjYXJkX2xlbiA9PSBpdGVtLT5sZW4pCisJCQljb250aW51ZTsKKworCQlpZiAoaXRlbS0+bm93aWxkY2FyZF9sZW4gJiYKKwkJICAgICFtYXRjaF93aWxkY2FyZF9iYXNlKGl0ZW0sIGJhc2Vfc3RyLCBiYXNlbGVuLCAmbWF0Y2hlZCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDb25jYXRlbmF0ZSBiYXNlIGFuZCBlbnRyeS0+cGF0aCBpbnRvIG9uZSBhbmQgZG8KKwkJICogZm5tYXRjaCgpIG9uIGl0LgorCQkgKgorCQkgKiBXaGlsZSB3ZSBjb3VsZCBhdm9pZCBjb25jYXRlbmF0aW9uIGluIGNlcnRhaW4gY2FzZXMKKwkJICogWzFdLCB3aGljaCBzYXZlcyBhIG1lbWNweSBhbmQgcG90ZW50aWFsbHkgYQorCQkgKiByZWFsbG9jLCBpdCB0dXJucyBvdXQgbm90IHdvcnRoIGl0LiBNZWFzdXJlbWVudCBvbgorCQkgKiBsaW51eC0yLjYgZG9lcyBub3Qgc2hvdyBhbnkgY2xlYXIgaW1wcm92ZW1lbnRzLAorCQkgKiBwYXJ0bHkgYmVjYXVzZSBvZiB0aGUgbm93aWxkY2FyZF9sZW4gb3B0aW1pemF0aW9uCisJCSAqIGluIGdpdF9mbm1hdGNoKCkuIEF2b2lkIG1pY3JvLW9wdGltaXphdGlvbnMgaGVyZS4KKwkJICoKKwkJICogWzFdIGlmIG1hdGNoX3dpbGRjYXJkX2Jhc2UoKSBzYXlzIHRoZSBiYXNlCisJCSAqIGRpcmVjdG9yeSBpcyBhbHJlYWR5IG1hdGNoZWQsIHdlIG9ubHkgbmVlZCB0byBtYXRjaAorCQkgKiB0aGUgcmVzdCwgd2hpY2ggaXMgc2hvcnRlciBzbyBfaW4gdGhlb3J5XyBmYXN0ZXIuCisJCSAqLworCisJCXN0cmJ1Zl9hZGQoYmFzZSwgZW50cnktPnBhdGgsIHBhdGhsZW4pOworCisJCWlmICghZ2l0X2ZubWF0Y2goaXRlbSwgbWF0Y2gsIGJhc2UtPmJ1ZiArIGJhc2Vfb2Zmc2V0LAorCQkJCSBpdGVtLT5ub3dpbGRjYXJkX2xlbikpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgYmFzZV9vZmZzZXQgKyBiYXNlbGVuKTsKKwkJCWdvdG8gaW50ZXJlc3Rpbmc7CisJCX0KKworCQkvKgorCQkgKiBXaGVuIG1hdGNoaW5nIGFnYWluc3Qgc3VibW9kdWxlcyB3aXRoCisJCSAqIHdpbGRjYXJkIGNoYXJhY3RlcnMsIGVuc3VyZSB0aGF0IHRoZSBlbnRyeQorCQkgKiBhdCBsZWFzdCBtYXRjaGVzIHVwIHRvIHRoZSBmaXJzdCB3aWxkCisJCSAqIGNoYXJhY3Rlci4gIE1vcmUgYWNjdXJhdGUgbWF0Y2hpbmcgY2FuIHRoZW4KKwkJICogYmUgcGVyZm9ybWVkIGluIHRoZSBzdWJtb2R1bGUgaXRzZWxmLgorCQkgKi8KKwkJaWYgKHBzLT5yZWN1cnNlX3N1Ym1vZHVsZXMgJiYgU19JU0dJVExJTksoZW50cnktPm1vZGUpICYmCisJCSAgICAhcHNfc3RybmNtcChpdGVtLCBtYXRjaCwgYmFzZS0+YnVmICsgYmFzZV9vZmZzZXQsCisJCQkJaXRlbS0+bm93aWxkY2FyZF9sZW4pKSB7CisJCQlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2Vfb2Zmc2V0ICsgYmFzZWxlbik7CisJCQlnb3RvIGludGVyZXN0aW5nOworCQl9CisKKwkJc3RyYnVmX3NldGxlbihiYXNlLCBiYXNlX29mZnNldCArIGJhc2VsZW4pOworCisJCS8qCisJCSAqIE1hdGNoIGFsbCBkaXJlY3Rvcmllcy4gV2UnbGwgdHJ5IHRvIG1hdGNoIGZpbGVzCisJCSAqIGxhdGVyIG9uLgorCQkgKiBtYXhfZGVwdGggaXMgaWdub3JlZCBidXQgd2UgbWF5IGNvbnNpZGVyIHN1cHBvcnQgaXQKKwkJICogaW4gZnV0dXJlLCBzZWUKKwkJICogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2bXhvNWwyZzQuZnNmQGFsdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8KKwkJICovCisJCWlmIChwcy0+cmVjdXJzaXZlICYmIFNfSVNESVIoZW50cnktPm1vZGUpKQorCQkJcmV0dXJuIGVudHJ5X2ludGVyZXN0aW5nOworCQljb250aW51ZTsKK2ludGVyZXN0aW5nOgorCQlpZiAoaXRlbS0+YXR0cl9tYXRjaF9ucikgeworCQkJaW50IHJldDsKKworCQkJLyoKKwkJCSAqIE11c3Qgbm90IHJldHVybiBhbGxfZW50cmllc19ub3RfaW50ZXJlc3RpbmcKKwkJCSAqIHByZW1hdHVyZWx5LiBXZSBkbyBub3Qga25vdyBpZiBhbGwgZW50cmllcyBkbyBub3QKKwkJCSAqIG1hdGNoIHNvbWUgYXR0cmlidXRlcyB3aXRoIGN1cnJlbnQgYXR0ciBBUEkuCisJCQkgKi8KKwkJCW5ldmVyX2ludGVyZXN0aW5nID0gZW50cnlfbm90X2ludGVyZXN0aW5nOworCisJCQkvKgorCQkJICogQ29uc2lkZXIgYWxsIGRpcmVjdG9yaWVzIGludGVyZXN0aW5nIChiZWNhdXNlIHNvbWUKKwkJCSAqIG9mIHRob3NlIGZpbGVzIGluc2lkZSBtYXkgbWF0Y2ggc29tZSBhdHRyaWJ1dGVzCisJCQkgKiBldmVuIHRob3VnaCB0aGUgcGFyZW50IGRpciBkb2VzIG5vdCkKKwkJCSAqCisJCQkgKiBGSVhNRTogYXR0cmlidXRlcyBfY2FuXyBtYXRjaCBkaXJlY3RvcmllcyBhbmQgd2UKKwkJCSAqIGNhbiBwcm9iYWJseSByZXR1cm4gYWxsX2VudHJpZXNfaW50ZXJlc3Rpbmcgb3IKKwkJCSAqIGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZyBoZXJlIGlmIG1hdGNoZWQuCisJCQkgKi8KKwkJCWlmIChTX0lTRElSKGVudHJ5LT5tb2RlKSkKKwkJCQlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7CisKKwkJCXN0cmJ1Zl9hZGQoYmFzZSwgZW50cnktPnBhdGgsIHBhdGhsZW4pOworCQkJcmV0ID0gbWF0Y2hfcGF0aHNwZWNfYXR0cnMoaXN0YXRlLCBiYXNlLT5idWYgKyBiYXNlX29mZnNldCwKKwkJCQkJCSAgIGJhc2UtPmxlbiAtIGJhc2Vfb2Zmc2V0LCBpdGVtKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgYmFzZV9vZmZzZXQgKyBiYXNlbGVuKTsKKwkJCWlmICghcmV0KQorCQkJCWNvbnRpbnVlOworCQl9CisJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKwl9CisJcmV0dXJuIG5ldmVyX2ludGVyZXN0aW5nOyAvKiBObyBtYXRjaGVzICovCit9CisKKy8qCisgKiBJcyBhIHRyZWUgZW50cnkgaW50ZXJlc3RpbmcgZ2l2ZW4gdGhlIHBhdGhzcGVjIHdlIGhhdmU/CisgKgorICogUHJlLWNvbmRpdGlvbjogZWl0aGVyIGJhc2VsZW4gPT0gYmFzZV9vZmZzZXQgKGkuZS4gZW1wdHkgcGF0aCkKKyAqIG9yIGJhc2VbYmFzZWxlbi0xXSA9PSAnLycgKGkuZS4gd2l0aCB0cmFpbGluZyBzbGFzaCkuCisgKi8KK2VudW0gaW50ZXJlc3RpbmcgdHJlZV9lbnRyeV9pbnRlcmVzdGluZyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5LAorCQkJCQlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBpbnQgYmFzZV9vZmZzZXQsCisJCQkJCWNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJZW51bSBpbnRlcmVzdGluZyBwb3NpdGl2ZSwgbmVnYXRpdmU7CisJcG9zaXRpdmUgPSBkb19tYXRjaChpc3RhdGUsIGVudHJ5LCBiYXNlLCBiYXNlX29mZnNldCwgcHMsIDApOworCisJLyoKKwkgKiBjYXNlIHwgZW50cnkgfCBwb3NpdGl2ZSB8IG5lZ2F0aXZlIHwgcmVzdWx0CisJICogLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLQorCSAqICAgMSAgfCAgZmlsZSB8ICAgLTEgICAgIHwgIC0xLi4yICAgfCAgLTEKKwkgKiAgIDIgIHwgIGZpbGUgfCAgICAwICAgICB8ICAtMS4uMiAgIHwgICAwCisJICogICAzICB8ICBmaWxlIHwgICAgMSAgICAgfCAgIC0xICAgICB8ICAgMQorCSAqICAgNCAgfCAgZmlsZSB8ICAgIDEgICAgIHwgICAgMCAgICAgfCAgIDEKKwkgKiAgIDUgIHwgIGZpbGUgfCAgICAxICAgICB8ICAgIDEgICAgIHwgICAwCisJICogICA2ICB8ICBmaWxlIHwgICAgMSAgICAgfCAgICAyICAgICB8ICAgMAorCSAqICAgNyAgfCAgZmlsZSB8ICAgIDIgICAgIHwgICAtMSAgICAgfCAgIDIKKwkgKiAgIDggIHwgIGZpbGUgfCAgICAyICAgICB8ICAgIDAgICAgIHwgICAxCisJICogICA5ICB8ICBmaWxlIHwgICAgMiAgICAgfCAgICAxICAgICB8ICAgMAorCSAqICAxMCAgfCAgZmlsZSB8ICAgIDIgICAgIHwgICAgMiAgICAgfCAgLTEKKwkgKiAtLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tCisJICogIDExICB8ICBkaXIgIHwgICAtMSAgICAgfCAgLTEuLjIgICB8ICAtMQorCSAqICAxMiAgfCAgZGlyICB8ICAgIDAgICAgIHwgIC0xLi4yICAgfCAgIDAKKwkgKiAgMTMgIHwgIGRpciAgfCAgICAxICAgICB8ICAgLTEgICAgIHwgICAxCisJICogIDE0ICB8ICBkaXIgIHwgICAgMSAgICAgfCAgICAwICAgICB8ICAgMQorCSAqICAxNSAgfCAgZGlyICB8ICAgIDEgICAgIHwgICAgMSAgICAgfCAgIDEgKCopCisJICogIDE2ICB8ICBkaXIgIHwgICAgMSAgICAgfCAgICAyICAgICB8ICAgMAorCSAqICAxNyAgfCAgZGlyICB8ICAgIDIgICAgIHwgICAtMSAgICAgfCAgIDIKKwkgKiAgMTggIHwgIGRpciAgfCAgICAyICAgICB8ICAgIDAgICAgIHwgICAxCisJICogIDE5ICB8ICBkaXIgIHwgICAgMiAgICAgfCAgICAxICAgICB8ICAgMSAoKikKKwkgKiAgMjAgIHwgIGRpciAgfCAgICAyICAgICB8ICAgIDIgICAgIHwgIC0xCisJICoKKwkgKiAoKikgQW4gZXhjbHVkZSBwYXR0ZXJuIGludGVyZXN0ZWQgaW4gYSBkaXJlY3RvcnkgZG9lcyBub3QKKwkgKiBuZWNlc3NhcmlseSBtZWFuIGl0IHdpbGwgZXhjbHVkZSBhbGwgb2YgdGhlIGRpcmVjdG9yeS4gSW4KKwkgKiB3aWxkY2FyZCBjYXNlLCBpdCBjYW4ndCBkZWNpZGUgdW50aWwgbG9va2luZyBhdCBpbmRpdmlkdWFsCisJICogZmlsZXMgaW5zaWRlLiBTbyBkb24ndCB3cml0ZSBzdWNoIGRpcmVjdG9yaWVzIG9mZiB5ZXQuCisJICovCisKKwlpZiAoIShwcy0+bWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKSB8fAorCSAgICBwb3NpdGl2ZSA8PSBlbnRyeV9ub3RfaW50ZXJlc3RpbmcpIC8qICMxLCAjMiwgIzExLCAjMTIgKi8KKwkJcmV0dXJuIHBvc2l0aXZlOworCisJbmVnYXRpdmUgPSBkb19tYXRjaChpc3RhdGUsIGVudHJ5LCBiYXNlLCBiYXNlX29mZnNldCwgcHMsIDEpOworCisJLyogIzgsICMxOCAqLworCWlmIChwb3NpdGl2ZSA9PSBhbGxfZW50cmllc19pbnRlcmVzdGluZyAmJgorCSAgICBuZWdhdGl2ZSA9PSBlbnRyeV9ub3RfaW50ZXJlc3RpbmcpCisJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKworCS8qICMzLCAjNCwgIzcsICMxMywgIzE0LCAjMTcgKi8KKwlpZiAobmVnYXRpdmUgPD0gZW50cnlfbm90X2ludGVyZXN0aW5nKQorCQlyZXR1cm4gcG9zaXRpdmU7CisKKwkvKiAjMTUsICMxOSAqLworCWlmIChTX0lTRElSKGVudHJ5LT5tb2RlKSAmJgorCSAgICBwb3NpdGl2ZSA+PSBlbnRyeV9pbnRlcmVzdGluZyAmJgorCSAgICBuZWdhdGl2ZSA9PSBlbnRyeV9pbnRlcmVzdGluZykKKwkJcmV0dXJuIGVudHJ5X2ludGVyZXN0aW5nOworCisJaWYgKChwb3NpdGl2ZSA9PSBlbnRyeV9pbnRlcmVzdGluZyAmJgorCSAgICAgbmVnYXRpdmUgPj0gZW50cnlfaW50ZXJlc3RpbmcpIHx8IC8qICM1LCAjNiwgIzE2ICovCisJICAgIChwb3NpdGl2ZSA9PSBhbGxfZW50cmllc19pbnRlcmVzdGluZyAmJgorCSAgICAgbmVnYXRpdmUgPT0gZW50cnlfaW50ZXJlc3RpbmcpKSAvKiAjOSAqLworCQlyZXR1cm4gZW50cnlfbm90X2ludGVyZXN0aW5nOworCisJcmV0dXJuIGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZzsgLyogIzEwLCAjMjAgKi8KK30KZGlmZiAtLWdpdCBhL3RyZWUtd2Fsay5oIGIvdHJlZS13YWxrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwNTg0NgotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUtd2Fsay5oCkBAIC0wLDAgKzEsMjIxIEBACisjaWZuZGVmIFRSRUVfV0FMS19ICisjZGVmaW5lIFRSRUVfV0FMS19ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjZGVmaW5lIE1BWF9UUkFWRVJTRV9UUkVFUyA4CisKKy8qKgorICogVGhlIHRyZWUgd2Fsa2luZyBBUEkgaXMgdXNlZCB0byB0cmF2ZXJzZSBhbmQgaW5zcGVjdCB0cmVlcy4KKyAqLworCisvKioKKyAqIEFuIGVudHJ5IGluIGEgdHJlZS4gRWFjaCBlbnRyeSBoYXMgYSBzaGExIGlkZW50aWZpZXIsIHBhdGhuYW1lLCBhbmQgbW9kZS4KKyAqLworc3RydWN0IG5hbWVfZW50cnkgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNvbnN0IGNoYXIgKnBhdGg7CisJaW50IHBhdGhsZW47CisJdW5zaWduZWQgaW50IG1vZGU7Cit9OworCisvKioKKyAqIEEgc2VtaS1vcGFxdWUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBtYWludGFpbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgd2Fsay4KKyAqLworc3RydWN0IHRyZWVfZGVzYyB7CisJLyoKKwkgKiBwb2ludGVyIGludG8gdGhlIG1lbW9yeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZS4gSXQgYWx3YXlzCisJICogcG9pbnRzIGF0IHRoZSBjdXJyZW50IGVudHJ5IGJlaW5nIHZpc2l0ZWQuCisJICovCisJY29uc3Qgdm9pZCAqYnVmZmVyOworCisJLyogcG9pbnRzIHRvIHRoZSBjdXJyZW50IGVudHJ5IGJlaW5nIHZpc2l0ZWQuICovCisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisKKwkvKiBjb3VudHMgdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIHRoZSBgYnVmZmVyYC4gKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisKKy8qKgorICogRGVjb2RlIHRoZSBlbnRyeSBjdXJyZW50bHkgYmVpbmcgdmlzaXRlZCAodGhlIG9uZSBwb2ludGVkIHRvIGJ5CisgKiBgdHJlZV9kZXNjJ3NgIGBlbnRyeWAgbWVtYmVyKSBhbmQgcmV0dXJuIHRoZSBzaGExIG9mIHRoZSBlbnRyeS4gVGhlCisgKiBgcGF0aHBgIGFuZCBgbW9kZXBgIGFyZ3VtZW50cyBhcmUgc2V0IHRvIHRoZSBlbnRyeSdzIHBhdGhuYW1lIGFuZCBtb2RlCisgKiByZXNwZWN0aXZlbHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqdHJlZV9lbnRyeV9leHRyYWN0KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKipwYXRocCwgdW5zaWduZWQgc2hvcnQgKm1vZGVwKQoreworCSpwYXRocCA9IGRlc2MtPmVudHJ5LnBhdGg7CisJKm1vZGVwID0gZGVzYy0+ZW50cnkubW9kZTsKKwlyZXR1cm4gJmRlc2MtPmVudHJ5Lm9pZDsKK30KKworLyoqCisgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhIHRyZWUgZW50cnkncyBwYXRobmFtZS4gVGhpcyB1dGlsaXplcyB0aGUKKyAqIG1lbW9yeSBzdHJ1Y3R1cmUgb2YgYSB0cmVlIGVudHJ5IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB1c2luZyBhCisgKiBnZW5lcmljIHN0cmxlbigpLgorICovCitzdGF0aWMgaW5saW5lIGludCB0cmVlX2VudHJ5X2xlbihjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmUpCit7CisJcmV0dXJuIG5lLT5wYXRobGVuOworfQorCisvKgorICogVGhlIF9nZW50bHkgdmVyc2lvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIHdhcm4gYW5kIHJldHVybiBmYWxzZSBvbiBhCisgKiBjb3JydXB0IHRyZWUgZW50cnkgcmF0aGVyIHRoYW4gZHlpbmcsCisgKi8KKworLyoqCisgKiBXYWxrIHRvIHRoZSBuZXh0IGVudHJ5IGluIGEgdHJlZS4gVGhpcyBpcyBjb21tb25seSB1c2VkIGluIGNvbmp1bmN0aW9uCisgKiB3aXRoIGB0cmVlX2VudHJ5X2V4dHJhY3RgIHRvIGluc3BlY3QgdGhlIGN1cnJlbnQgZW50cnkuCisgKi8KK3ZvaWQgdXBkYXRlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqKTsKKworaW50IHVwZGF0ZV90cmVlX2VudHJ5X2dlbnRseShzdHJ1Y3QgdHJlZV9kZXNjICopOworCisvKioKKyAqIEluaXRpYWxpemUgYSBgdHJlZV9kZXNjYCBhbmQgZGVjb2RlIGl0cyBmaXJzdCBlbnRyeS4gVGhlIGJ1ZmZlciBhbmQKKyAqIHNpemUgcGFyYW1ldGVycyBhcmUgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgYnVmZmVyIGFuZCBzaXplCisgKiBtZW1iZXJzIG9mIGBzdHJ1Y3QgdHJlZWAuCisgKi8KK3ZvaWQgaW5pdF90cmVlX2Rlc2Moc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitpbnQgaW5pdF90cmVlX2Rlc2NfZ2VudGx5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyoKKyAqIFZpc2l0IHRoZSBuZXh0IGVudHJ5IGluIGEgdHJlZS4gUmV0dXJucyAxIHdoZW4gdGhlcmUgYXJlIG1vcmUgZW50cmllcworICogbGVmdCB0byB2aXNpdCBhbmQgMCB3aGVuIGFsbCBlbnRyaWVzIGhhdmUgYmVlbiB2aXNpdGVkLiBUaGlzIGlzCisgKiBjb21tb25seSB1c2VkIGluIHRoZSB0ZXN0IG9mIGEgd2hpbGUgbG9vcC4KKyAqLworaW50IHRyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqKTsKKworaW50IHRyZWVfZW50cnlfZ2VudGx5KHN0cnVjdCB0cmVlX2Rlc2MgKiwgc3RydWN0IG5hbWVfZW50cnkgKik7CisKKy8qKgorICogSW5pdGlhbGl6ZSBhIGB0cmVlX2Rlc2NgIGFuZCBkZWNvZGUgaXRzIGZpcnN0IGVudHJ5IGdpdmVuIHRoZQorICogb2JqZWN0IElEIG9mIGEgdHJlZS4gUmV0dXJucyB0aGUgYGJ1ZmZlcmAgbWVtYmVyIGlmIHRoZSBsYXR0ZXIKKyAqIGlzIGEgdmFsaWQgdHJlZSBpZGVudGlmaWVyIGFuZCBOVUxMIG90aGVyd2lzZS4KKyAqLwordm9pZCAqZmlsbF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworc3RydWN0IHRyYXZlcnNlX2luZm87Cit0eXBlZGVmIGludCAoKnRyYXZlcnNlX2NhbGxiYWNrX3QpKGludCBuLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqKTsKKworLyoqCisgKiBUcmF2ZXJzZSBgbmAgbnVtYmVyIG9mIHRyZWVzIGluIHBhcmFsbGVsLiBUaGUgYGZuYCBjYWxsYmFjayBtZW1iZXIgb2YKKyAqIGB0cmF2ZXJzZV9pbmZvYCBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCB0cmVlIGVudHJ5LgorICovCitpbnQgdHJhdmVyc2VfdHJlZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbyk7CisKK2VudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X3RyZWVfZW50cnlfZm9sbG93X3N5bWxpbmtzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCBzdHJ1Y3Qgc3RyYnVmICpyZXN1bHRfcGF0aCwgdW5zaWduZWQgc2hvcnQgKm1vZGUpOworCisvKioKKyAqIEEgc3RydWN0dXJlIHVzZWQgdG8gbWFpbnRhaW4gdGhlIHN0YXRlIG9mIGEgdHJhdmVyc2FsLgorICovCitzdHJ1Y3QgdHJhdmVyc2VfaW5mbyB7CisJY29uc3QgY2hhciAqdHJhdmVyc2VfcGF0aDsKKworCS8qCisJICogcG9pbnRzIHRvIHRoZSB0cmF2ZXJzZV9pbmZvIHdoaWNoIHdhcyB1c2VkIHRvIGRlc2NlbmQgaW50byB0aGUKKwkgKiBjdXJyZW50IHRyZWUuIElmIHRoaXMgaXMgdGhlIHRvcC1sZXZlbCB0cmVlIGBwcmV2YCB3aWxsIHBvaW50IHRvCisJICogYSBkdW1teSB0cmF2ZXJzZV9pbmZvLgorCSAqLworCXN0cnVjdCB0cmF2ZXJzZV9pbmZvICpwcmV2OworCisJLyogaXMgdGhlIGVudHJ5IGZvciB0aGUgY3VycmVudCB0cmVlIChpZiB0aGUgdHJlZSBpcyBhIHN1YnRyZWUpLiAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlzaXplX3QgbmFtZWxlbjsKKwl1bnNpZ25lZCBtb2RlOworCisJLyogaXMgdGhlIGxlbmd0aCBvZiB0aGUgZnVsbCBwYXRoIGZvciB0aGUgY3VycmVudCB0cmVlLiAqLworCXNpemVfdCBwYXRobGVuOworCisJc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYzsKKworCS8qIGNhbiBiZSB1c2VkIGJ5IGNhbGxiYWNrcyB0byBtYWludGFpbiBkaXJlY3RvcnktZmlsZSBjb25mbGljdHMuICovCisJdW5zaWduZWQgbG9uZyBkZl9jb25mbGljdHM7CisKKwkvKiBhIGNhbGxiYWNrIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgdHJlZS4KKwkgKgorCSAqIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmF2ZXJzZSBjYWxsYmFjayBhcmUgYXMgZm9sbG93czoKKwkgKgorCSAqIC0gYG5gIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRyZWVzIGJlaW5nIHRyYXZlcnNlZC4KKwkgKgorCSAqIC0gYG1hc2tgIGhhcyBpdHMgbnRoIGJpdCBzZXQgaWYgc29tZXRoaW5nIGV4aXN0cyBpbiB0aGUgbnRoIGVudHJ5LgorCSAqCisJICogLSBgZGlybWFza2AgaGFzIGl0cyBudGggYml0IHNldCBpZiB0aGUgbnRoIHRyZWUncyBlbnRyeSBpcyBhIGRpcmVjdG9yeS4KKwkgKgorCSAqIC0gYGVudHJ5YCBpcyBhbiBhcnJheSBvZiBzaXplIGBuYCB3aGVyZSB0aGUgbnRoIGVudHJ5IGlzIGZyb20gdGhlIG50aCB0cmVlLgorCSAqCisJICogLSBgaW5mb2AgbWFpbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsLgorCSAqCisJICogUmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCB0ZXJtaW5hdGUgdGhlIHRyYXZlcnNhbC4gT3RoZXJ3aXNlIHRoZQorCSAqIHJldHVybiB2YWx1ZSBpcyB0cmVhdGVkIGFzIGFuIHVwZGF0ZSBtYXNrLiBJZiB0aGUgbnRoIGJpdCBpcyBzZXQgdGhlIG50aCB0cmVlCisJICogd2lsbCBiZSB1cGRhdGVkIGFuZCBpZiB0aGUgYml0IGlzIG5vdCBzZXQgdGhlIG50aCB0cmVlIGVudHJ5IHdpbGwgYmUgdGhlCisJICogc2FtZSBpbiB0aGUgbmV4dCBjYWxsYmFjayBpbnZvY2F0aW9uLgorCSAqLworCXRyYXZlcnNlX2NhbGxiYWNrX3QgZm47CisKKwkvKiBjYW4gYmUgYW55dGhpbmcgdGhlIGBmbmAgY2FsbGJhY2sgd291bGQgd2FudCB0byB1c2UuICovCisJdm9pZCAqZGF0YTsKKworCS8qIHRlbGxzIHdoZXRoZXIgdG8gc3RvcCBhdCB0aGUgZmlyc3QgZXJyb3Igb3Igbm90LiAqLworCWludCBzaG93X2FsbF9lcnJvcnM7Cit9OworCisvKioKKyAqIEZpbmQgYW4gZW50cnkgaW4gYSB0cmVlIGdpdmVuIGEgcGF0aG5hbWUgYW5kIHRoZSBzaGExIG9mIGEgdHJlZSB0bworICogc2VhcmNoLiBSZXR1cm5zIDAgaWYgdGhlIGVudHJ5IGlzIGZvdW5kIGFuZCAtMSBvdGhlcndpc2UuIFRoZSB0aGlyZAorICogYW5kIGZvdXJ0aCBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gdGhlIGVudHJ5J3Mgc2hhMSBhbmQgbW9kZSByZXNwZWN0aXZlbHkuCisgKi8KK2ludCBnZXRfdHJlZV9lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IG9iamVjdF9pZCAqLCB1bnNpZ25lZCBzaG9ydCAqKTsKKworLyoqCisgKiBHZW5lcmF0ZSB0aGUgZnVsbCBwYXRobmFtZSBvZiBhIHRyZWUgZW50cnkgYmFzZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUKKyAqIHRyYXZlcnNhbC4gRm9yIGV4YW1wbGUsIGlmIHRoZSB0cmF2ZXJzYWwgaGFzIHJlY3Vyc2VkIGludG8gYW5vdGhlcgorICogdHJlZSBuYW1lZCAiYmFyIiB0aGUgcGF0aG5hbWUgb2YgYW4gZW50cnkgImJheiIgaW4gdGhlICJiYXIiCisgKiB0cmVlIHdvdWxkIGJlICJiYXIvYmF6Ii4KKyAqLworY2hhciAqbWFrZV90cmF2ZXJzZV9wYXRoKGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuLCBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbik7CisKKy8qKgorICogQ29udmVuaWVuY2Ugd3JhcHBlciB0byBgbWFrZV90cmF2ZXJzZV9wYXRoYCBpbnRvIGEgc3RyYnVmLgorICovCit2b2lkIHN0cmJ1Zl9tYWtlX3RyYXZlcnNlX3BhdGgoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuKTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgYHRyYXZlcnNlX2luZm9gIGdpdmVuIHRoZSBwYXRobmFtZSBvZiB0aGUgdHJlZSB0byBzdGFydAorICogdHJhdmVyc2luZyBmcm9tLgorICovCit2b2lkIHNldHVwX3RyYXZlcnNlX2luZm8oc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJhc2UpOworCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIGEgcGF0aG5hbWUgcmV0dXJuZWQgYnkgYG1ha2VfdHJhdmVyc2VfcGF0aGAuCisgKiBUaGlzIHV0aWxpemVzIHRoZSBtZW1vcnkgc3RydWN0dXJlIG9mIGEgdHJlZSBlbnRyeSB0byBhdm9pZCB0aGUKKyAqIG92ZXJoZWFkIG9mIHVzaW5nIGEgZ2VuZXJpYyBzdHJsZW4oKS4KKyAqLworc3RhdGljIGlubGluZSBzaXplX3QgdHJhdmVyc2VfcGF0aF9sZW4oY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJCQkJICAgICAgIHNpemVfdCBuYW1lbGVuKQoreworCXJldHVybiBzdF9hZGQoaW5mby0+cGF0aGxlbiwgbmFtZWxlbik7Cit9CisKKy8qIGluIGdlbmVyYWwsIHBvc2l0aXZlIG1lYW5zICJraW5kIG9mIGludGVyZXN0aW5nIiAqLworZW51bSBpbnRlcmVzdGluZyB7CisJYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nID0gLTEsIC8qIG5vLCBhbmQgbm8gc3Vic2VxdWVudCBlbnRyaWVzIHdpbGwgYmUgZWl0aGVyICovCisJZW50cnlfbm90X2ludGVyZXN0aW5nID0gMCwKKwllbnRyeV9pbnRlcmVzdGluZyA9IDEsCisJYWxsX2VudHJpZXNfaW50ZXJlc3RpbmcgPSAyIC8qIHllcywgYW5kIGFsbCBzdWJzZXF1ZW50IGVudHJpZXMgd2lsbCBiZSAqLworfTsKKworZW51bSBpbnRlcmVzdGluZyB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQljb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqLAorCQkJCQlzdHJ1Y3Qgc3RyYnVmICosIGludCwKKwkJCQkJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdHJlZS5jIGIvdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjZiY2MKLS0tIC9kZXYvbnVsbAorKysgYi90cmVlLmMKQEAgLTAsMCArMSwyNTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCitjb25zdCBjaGFyICp0cmVlX3R5cGUgPSAidHJlZSI7CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfZW50cnlfb3B0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJCQkgICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKwkJCSAgICAgIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgaW50IG9wdCkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAoU19JU0RJUihtb2RlKSkKKwkJcmV0dXJuIFJFQURfVFJFRV9SRUNVUlNJVkU7CisKKwlsZW4gPSBzdHJsZW4ocGF0aG5hbWUpOworCWNlID0gbWFrZV9lbXB0eV9jYWNoZV9lbnRyeShpc3RhdGUsIGJhc2VsZW4gKyBsZW4pOworCisJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShtb2RlKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3Moc3RhZ2UpOworCWNlLT5jZV9uYW1lbGVuID0gYmFzZWxlbiArIGxlbjsKKwltZW1jcHkoY2UtPm5hbWUsIGJhc2UsIGJhc2VsZW4pOworCW1lbWNweShjZS0+bmFtZSArIGJhc2VsZW4sIHBhdGhuYW1lLCBsZW4rMSk7CisJb2lkY3B5KCZjZS0+b2lkLCBvaWQpOworCXJldHVybiBhZGRfaW5kZXhfZW50cnkoaXN0YXRlLCBjZSwgb3B0KTsKK30KKworc3RhdGljIGludCByZWFkX29uZV9lbnRyeShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCQkgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsCisJCQkgIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSBjb250ZXh0OworCXJldHVybiByZWFkX29uZV9lbnRyeV9vcHQoaXN0YXRlLCBvaWQsIGJhc2UtPmJ1ZiwgYmFzZS0+bGVuLCBwYXRobmFtZSwKKwkJCQkgIG1vZGUsIHN0YWdlLAorCQkJCSAgQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfU0tJUF9ERkNIRUNLKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB3aGVuIHRoZSBjYWxsZXIga25vd3MgdGhlcmUgaXMgbm8gZXhpc3RpbmcgZW50cmllcyBhdAorICogdGhlIHN0YWdlIHRoYXQgd2lsbCBjb25mbGljdCB3aXRoIHRoZSBlbnRyeSBiZWluZyBhZGRlZC4KKyAqLworc3RhdGljIGludCByZWFkX29uZV9lbnRyeV9xdWljayhjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCQkJY29uc3QgY2hhciAqcGF0aG5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwKKwkJCQl2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gY29udGV4dDsKKwlyZXR1cm4gcmVhZF9vbmVfZW50cnlfb3B0KGlzdGF0ZSwgb2lkLCBiYXNlLT5idWYsIGJhc2UtPmxlbiwgcGF0aG5hbWUsCisJCQkJICBtb2RlLCBzdGFnZSwKKwkJCQkgIEFERF9DQUNIRV9KVVNUX0FQUEVORCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF90cmVlXzEoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCSAgICAgICBzdHJ1Y3QgdHJlZSAqdHJlZSwgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJICAgICAgIGludCBzdGFnZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgICAgIHJlYWRfdHJlZV9mbl90IGZuLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgbGVuLCBvbGRsZW4gPSBiYXNlLT5sZW47CisJZW51bSBpbnRlcmVzdGluZyByZXR2YWwgPSBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisKKwlpZiAocGFyc2VfdHJlZSh0cmVlKSkKKwkJcmV0dXJuIC0xOworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlpZiAocmV0dmFsICE9IGFsbF9lbnRyaWVzX2ludGVyZXN0aW5nKSB7CisJCQlyZXR2YWwgPSB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKHItPmluZGV4LCAmZW50cnksCisJCQkJCQkJYmFzZSwgMCwgcGF0aHNwZWMpOworCQkJaWYgKHJldHZhbCA9PSBhbGxfZW50cmllc19ub3RfaW50ZXJlc3RpbmcpCisJCQkJYnJlYWs7CisJCQlpZiAocmV0dmFsID09IGVudHJ5X25vdF9pbnRlcmVzdGluZykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXN3aXRjaCAoZm4oJmVudHJ5Lm9pZCwgYmFzZSwKKwkJCSAgIGVudHJ5LnBhdGgsIGVudHJ5Lm1vZGUsIHN0YWdlLCBjb250ZXh0KSkgeworCQljYXNlIDA6CisJCQljb250aW51ZTsKKwkJY2FzZSBSRUFEX1RSRUVfUkVDVVJTSVZFOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkKKwkJCW9pZGNweSgmb2lkLCAmZW50cnkub2lkKTsKKwkJZWxzZSBpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpIHsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCQkJY29tbWl0ID0gbG9va3VwX2NvbW1pdChyLCAmZW50cnkub2lkKTsKKwkJCWlmICghY29tbWl0KQorCQkJCWRpZSgiQ29tbWl0ICVzIGluIHN1Ym1vZHVsZSBwYXRoICVzJXMgbm90IGZvdW5kIiwKKwkJCQkgICAgb2lkX3RvX2hleCgmZW50cnkub2lkKSwKKwkJCQkgICAgYmFzZS0+YnVmLCBlbnRyeS5wYXRoKTsKKworCQkJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQkJCWRpZSgiSW52YWxpZCBjb21taXQgJXMgaW4gc3VibW9kdWxlIHBhdGggJXMlcyIsCisJCQkJICAgIG9pZF90b19oZXgoJmVudHJ5Lm9pZCksCisJCQkJICAgIGJhc2UtPmJ1ZiwgZW50cnkucGF0aCk7CisKKwkJCW9pZGNweSgmb2lkLCBnZXRfY29tbWl0X3RyZWVfb2lkKGNvbW1pdCkpOworCQl9CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCWxlbiA9IHRyZWVfZW50cnlfbGVuKCZlbnRyeSk7CisJCXN0cmJ1Zl9hZGQoYmFzZSwgZW50cnkucGF0aCwgbGVuKTsKKwkJc3RyYnVmX2FkZGNoKGJhc2UsICcvJyk7CisJCXJldHZhbCA9IHJlYWRfdHJlZV8xKHIsIGxvb2t1cF90cmVlKHIsICZvaWQpLAorCQkJCSAgICAgYmFzZSwgc3RhZ2UsIHBhdGhzcGVjLAorCQkJCSAgICAgZm4sIGNvbnRleHQpOworCQlzdHJidWZfc2V0bGVuKGJhc2UsIG9sZGxlbik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcmVhZF90cmVlX3JlY3Vyc2l2ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCXN0cnVjdCB0cmVlICp0cmVlLAorCQkJY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJCQlpbnQgc3RhZ2UsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQlyZWFkX3RyZWVfZm5fdCBmbiwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCXN0cmJ1Zl9hZGQoJnNiLCBiYXNlLCBiYXNlbGVuKTsKKwlyZXQgPSByZWFkX3RyZWVfMShyLCB0cmVlLCAmc2IsIHN0YWdlLCBwYXRoc3BlYywgZm4sIGNvbnRleHQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbXBfY2FjaGVfbmFtZV9jb21wYXJlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlMSwgKmNlMjsKKworCWNlMSA9ICooKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqKilhXyk7CisJY2UyID0gKigoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICoqKWJfKTsKKwlyZXR1cm4gY2FjaGVfbmFtZV9zdGFnZV9jb21wYXJlKGNlMS0+bmFtZSwgY2UxLT5jZV9uYW1lbGVuLCBjZV9zdGFnZShjZTEpLAorCQkJCSAgY2UyLT5uYW1lLCBjZTItPmNlX25hbWVsZW4sIGNlX3N0YWdlKGNlMikpOworfQorCitpbnQgcmVhZF90cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgdHJlZSAqdHJlZSwgaW50IHN0YWdlLAorCSAgICAgIHN0cnVjdCBwYXRoc3BlYyAqbWF0Y2gsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXJlYWRfdHJlZV9mbl90IGZuID0gTlVMTDsKKwlpbnQgaSwgZXJyOworCisJLyoKKwkgKiBDdXJyZW50bHkgdGhlIG9ubHkgZXhpc3RpbmcgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIGFsbAorCSAqIGNhbGwgaXQgd2l0aCBzdGFnZT0xIGFuZCBhZnRlciBtYWtpbmcgc3VyZSB0aGVyZSBpcyBub3RoaW5nCisJICogYXQgdGhhdCBzdGFnZTsgd2UgY291bGQgYWx3YXlzIHVzZSByZWFkX29uZV9lbnRyeV9xdWljaygpLgorCSAqCisJICogQnV0IHdoZW4gd2UgZGVjaWRlIHRvIHN0cmFpZ2h0ZW4gb3V0IGdpdC1yZWFkLXRyZWUgbm90IHRvCisJICogdXNlIHVucGFja190cmVlcygpIGluIHNvbWUgY2FzZXMsIHRoaXMgd2lsbCBwcm9iYWJseSBzdGFydAorCSAqIHRvIG1hdHRlci4KKwkgKi8KKworCS8qCisJICogU2VlIGlmIHdlIGhhdmUgY2FjaGUgZW50cnkgYXQgdGhlIHN0YWdlLiAgSWYgc28sCisJICogZG8gaXQgdGhlIG9yaWdpbmFsIHNsb3cgd2F5LCBvdGhlcndpc2UsIGFwcGVuZCBhbmQgdGhlbgorCSAqIHNvcnQgYXQgdGhlIGVuZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyAhZm4gJiYgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaWYgKGNlX3N0YWdlKGNlKSA9PSBzdGFnZSkKKwkJCWZuID0gcmVhZF9vbmVfZW50cnk7CisJfQorCisJaWYgKCFmbikKKwkJZm4gPSByZWFkX29uZV9lbnRyeV9xdWljazsKKwllcnIgPSByZWFkX3RyZWVfcmVjdXJzaXZlKHIsIHRyZWUsICIiLCAwLCBzdGFnZSwgbWF0Y2gsIGZuLCBpc3RhdGUpOworCWlmIChmbiA9PSByZWFkX29uZV9lbnRyeSB8fCBlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKgorCSAqIFNvcnQgdGhlIGNhY2hlIGVudHJ5IC0tIHdlIG5lZWQgdG8gbnVrZSB0aGUgY2FjaGUgdHJlZSwgdGhvdWdoLgorCSAqLworCWNhY2hlX3RyZWVfZnJlZSgmaXN0YXRlLT5jYWNoZV90cmVlKTsKKwlRU09SVChpc3RhdGUtPmNhY2hlLCBpc3RhdGUtPmNhY2hlX25yLCBjbXBfY2FjaGVfbmFtZV9jb21wYXJlKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRyZWUgKmxvb2t1cF90cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChyLCBvaWQpOworCWlmICghb2JqKQorCQlyZXR1cm4gY3JlYXRlX29iamVjdChyLCBvaWQsIGFsbG9jX3RyZWVfbm9kZShyKSk7CisJcmV0dXJuIG9iamVjdF9hc190eXBlKHIsIG9iaiwgT0JKX1RSRUUsIDApOworfQorCitpbnQgcGFyc2VfdHJlZV9idWZmZXIoc3RydWN0IHRyZWUgKml0ZW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gMDsKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKKwlpdGVtLT5idWZmZXIgPSBidWZmZXI7CisJaXRlbS0+c2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX3RyZWVfZ2VudGx5KHN0cnVjdCB0cmVlICppdGVtLCBpbnQgcXVpZXRfb25fbWlzc2luZykKK3sKKwkgZW51bSBvYmplY3RfdHlwZSB0eXBlOworCSB2b2lkICpidWZmZXI7CisJIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gMDsKKwlidWZmZXIgPSByZWFkX29iamVjdF9maWxlKCZpdGVtLT5vYmplY3Qub2lkLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gcXVpZXRfb25fbWlzc2luZyA/IC0xIDoKKwkJCWVycm9yKCJDb3VsZCBub3QgcmVhZCAlcyIsCisJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwlpZiAodHlwZSAhPSBPQkpfVFJFRSkgeworCQlmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBlcnJvcigiT2JqZWN0ICVzIG5vdCBhIHRyZWUiLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisJfQorCXJldHVybiBwYXJzZV90cmVlX2J1ZmZlcihpdGVtLCBidWZmZXIsIHNpemUpOworfQorCit2b2lkIGZyZWVfdHJlZV9idWZmZXIoc3RydWN0IHRyZWUgKnRyZWUpCit7CisJRlJFRV9BTkRfTlVMTCh0cmVlLT5idWZmZXIpOworCXRyZWUtPnNpemUgPSAwOworCXRyZWUtPm9iamVjdC5wYXJzZWQgPSAwOworfQorCitzdHJ1Y3QgdHJlZSAqcGFyc2VfdHJlZV9pbmRpcmVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IHJlcG9zaXRvcnkgKnIgPSB0aGVfcmVwb3NpdG9yeTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwYXJzZV9vYmplY3Qociwgb2lkKTsKKwlyZXR1cm4gKHN0cnVjdCB0cmVlICopcmVwb19wZWVsX3RvX3R5cGUociwgTlVMTCwgMCwgb2JqLCBPQkpfVFJFRSk7Cit9CmRpZmYgLS1naXQgYS90cmVlLmggYi90cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4Mzc0NQotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIFRSRUVfSAorI2RlZmluZSBUUkVFX0gKKworI2luY2x1ZGUgIm9iamVjdC5oIgorCitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCBzdHJidWY7CisKK3N0cnVjdCB0cmVlIHsKKwlzdHJ1Y3Qgb2JqZWN0IG9iamVjdDsKKwl2b2lkICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnRyZWVfdHlwZTsKKworc3RydWN0IHRyZWUgKmxvb2t1cF90cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCitpbnQgcGFyc2VfdHJlZV9idWZmZXIoc3RydWN0IHRyZWUgKml0ZW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworaW50IHBhcnNlX3RyZWVfZ2VudGx5KHN0cnVjdCB0cmVlICp0cmVlLCBpbnQgcXVpZXRfb25fbWlzc2luZyk7CitzdGF0aWMgaW5saW5lIGludCBwYXJzZV90cmVlKHN0cnVjdCB0cmVlICp0cmVlKQoreworCXJldHVybiBwYXJzZV90cmVlX2dlbnRseSh0cmVlLCAwKTsKK30KK3ZvaWQgZnJlZV90cmVlX2J1ZmZlcihzdHJ1Y3QgdHJlZSAqdHJlZSk7CisKKy8qIFBhcnNlcyBhbmQgcmV0dXJucyB0aGUgdHJlZSBpbiB0aGUgZ2l2ZW4gZW50LCBjaGFzaW5nIHRhZ3MgYW5kIGNvbW1pdHMuICovCitzdHJ1Y3QgdHJlZSAqcGFyc2VfdHJlZV9pbmRpcmVjdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworCisjZGVmaW5lIFJFQURfVFJFRV9SRUNVUlNJVkUgMQordHlwZWRlZiBpbnQgKCpyZWFkX3RyZWVfZm5fdCkoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqLCBzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCBpbnQsIHZvaWQgKik7CisKK2ludCByZWFkX3RyZWVfcmVjdXJzaXZlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJc3RydWN0IHRyZWUgKnRyZWUsCisJCQljb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCWludCBzdGFnZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCXJlYWRfdHJlZV9mbl90IGZuLCB2b2lkICpjb250ZXh0KTsKKworaW50IHJlYWRfdHJlZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHRyZWUgKnRyZWUsCisJICAgICAgaW50IHN0YWdlLCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCSAgICAgIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKKworI2VuZGlmIC8qIFRSRUVfSCAqLwpkaWZmIC0tZ2l0IGEvdW5pY29kZS13aWR0aC5oIGIvdW5pY29kZS13aWR0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGU2ODYKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlLXdpZHRoLmgKQEAgLTAsMCArMSw0NTkgQEAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZXJ2YWwgemVyb193aWR0aFtdID0geworeyAweDAzMDAsIDB4MDM2RiB9LAoreyAweDA0ODMsIDB4MDQ4OSB9LAoreyAweDA1OTEsIDB4MDVCRCB9LAoreyAweDA1QkYsIDB4MDVCRiB9LAoreyAweDA1QzEsIDB4MDVDMiB9LAoreyAweDA1QzQsIDB4MDVDNSB9LAoreyAweDA1QzcsIDB4MDVDNyB9LAoreyAweDA2MDAsIDB4MDYwNSB9LAoreyAweDA2MTAsIDB4MDYxQSB9LAoreyAweDA2MUMsIDB4MDYxQyB9LAoreyAweDA2NEIsIDB4MDY1RiB9LAoreyAweDA2NzAsIDB4MDY3MCB9LAoreyAweDA2RDYsIDB4MDZERCB9LAoreyAweDA2REYsIDB4MDZFNCB9LAoreyAweDA2RTcsIDB4MDZFOCB9LAoreyAweDA2RUEsIDB4MDZFRCB9LAoreyAweDA3MEYsIDB4MDcwRiB9LAoreyAweDA3MTEsIDB4MDcxMSB9LAoreyAweDA3MzAsIDB4MDc0QSB9LAoreyAweDA3QTYsIDB4MDdCMCB9LAoreyAweDA3RUIsIDB4MDdGMyB9LAoreyAweDA3RkQsIDB4MDdGRCB9LAoreyAweDA4MTYsIDB4MDgxOSB9LAoreyAweDA4MUIsIDB4MDgyMyB9LAoreyAweDA4MjUsIDB4MDgyNyB9LAoreyAweDA4MjksIDB4MDgyRCB9LAoreyAweDA4NTksIDB4MDg1QiB9LAoreyAweDA4RDMsIDB4MDkwMiB9LAoreyAweDA5M0EsIDB4MDkzQSB9LAoreyAweDA5M0MsIDB4MDkzQyB9LAoreyAweDA5NDEsIDB4MDk0OCB9LAoreyAweDA5NEQsIDB4MDk0RCB9LAoreyAweDA5NTEsIDB4MDk1NyB9LAoreyAweDA5NjIsIDB4MDk2MyB9LAoreyAweDA5ODEsIDB4MDk4MSB9LAoreyAweDA5QkMsIDB4MDlCQyB9LAoreyAweDA5QzEsIDB4MDlDNCB9LAoreyAweDA5Q0QsIDB4MDlDRCB9LAoreyAweDA5RTIsIDB4MDlFMyB9LAoreyAweDA5RkUsIDB4MDlGRSB9LAoreyAweDBBMDEsIDB4MEEwMiB9LAoreyAweDBBM0MsIDB4MEEzQyB9LAoreyAweDBBNDEsIDB4MEE0MiB9LAoreyAweDBBNDcsIDB4MEE0OCB9LAoreyAweDBBNEIsIDB4MEE0RCB9LAoreyAweDBBNTEsIDB4MEE1MSB9LAoreyAweDBBNzAsIDB4MEE3MSB9LAoreyAweDBBNzUsIDB4MEE3NSB9LAoreyAweDBBODEsIDB4MEE4MiB9LAoreyAweDBBQkMsIDB4MEFCQyB9LAoreyAweDBBQzEsIDB4MEFDNSB9LAoreyAweDBBQzcsIDB4MEFDOCB9LAoreyAweDBBQ0QsIDB4MEFDRCB9LAoreyAweDBBRTIsIDB4MEFFMyB9LAoreyAweDBBRkEsIDB4MEFGRiB9LAoreyAweDBCMDEsIDB4MEIwMSB9LAoreyAweDBCM0MsIDB4MEIzQyB9LAoreyAweDBCM0YsIDB4MEIzRiB9LAoreyAweDBCNDEsIDB4MEI0NCB9LAoreyAweDBCNEQsIDB4MEI0RCB9LAoreyAweDBCNTUsIDB4MEI1NiB9LAoreyAweDBCNjIsIDB4MEI2MyB9LAoreyAweDBCODIsIDB4MEI4MiB9LAoreyAweDBCQzAsIDB4MEJDMCB9LAoreyAweDBCQ0QsIDB4MEJDRCB9LAoreyAweDBDMDAsIDB4MEMwMCB9LAoreyAweDBDMDQsIDB4MEMwNCB9LAoreyAweDBDM0UsIDB4MEM0MCB9LAoreyAweDBDNDYsIDB4MEM0OCB9LAoreyAweDBDNEEsIDB4MEM0RCB9LAoreyAweDBDNTUsIDB4MEM1NiB9LAoreyAweDBDNjIsIDB4MEM2MyB9LAoreyAweDBDODEsIDB4MEM4MSB9LAoreyAweDBDQkMsIDB4MENCQyB9LAoreyAweDBDQkYsIDB4MENCRiB9LAoreyAweDBDQzYsIDB4MENDNiB9LAoreyAweDBDQ0MsIDB4MENDRCB9LAoreyAweDBDRTIsIDB4MENFMyB9LAoreyAweDBEMDAsIDB4MEQwMSB9LAoreyAweDBEM0IsIDB4MEQzQyB9LAoreyAweDBENDEsIDB4MEQ0NCB9LAoreyAweDBENEQsIDB4MEQ0RCB9LAoreyAweDBENjIsIDB4MEQ2MyB9LAoreyAweDBEODEsIDB4MEQ4MSB9LAoreyAweDBEQ0EsIDB4MERDQSB9LAoreyAweDBERDIsIDB4MERENCB9LAoreyAweDBERDYsIDB4MERENiB9LAoreyAweDBFMzEsIDB4MEUzMSB9LAoreyAweDBFMzQsIDB4MEUzQSB9LAoreyAweDBFNDcsIDB4MEU0RSB9LAoreyAweDBFQjEsIDB4MEVCMSB9LAoreyAweDBFQjQsIDB4MEVCQyB9LAoreyAweDBFQzgsIDB4MEVDRCB9LAoreyAweDBGMTgsIDB4MEYxOSB9LAoreyAweDBGMzUsIDB4MEYzNSB9LAoreyAweDBGMzcsIDB4MEYzNyB9LAoreyAweDBGMzksIDB4MEYzOSB9LAoreyAweDBGNzEsIDB4MEY3RSB9LAoreyAweDBGODAsIDB4MEY4NCB9LAoreyAweDBGODYsIDB4MEY4NyB9LAoreyAweDBGOEQsIDB4MEY5NyB9LAoreyAweDBGOTksIDB4MEZCQyB9LAoreyAweDBGQzYsIDB4MEZDNiB9LAoreyAweDEwMkQsIDB4MTAzMCB9LAoreyAweDEwMzIsIDB4MTAzNyB9LAoreyAweDEwMzksIDB4MTAzQSB9LAoreyAweDEwM0QsIDB4MTAzRSB9LAoreyAweDEwNTgsIDB4MTA1OSB9LAoreyAweDEwNUUsIDB4MTA2MCB9LAoreyAweDEwNzEsIDB4MTA3NCB9LAoreyAweDEwODIsIDB4MTA4MiB9LAoreyAweDEwODUsIDB4MTA4NiB9LAoreyAweDEwOEQsIDB4MTA4RCB9LAoreyAweDEwOUQsIDB4MTA5RCB9LAoreyAweDExNjAsIDB4MTFGRiB9LAoreyAweDEzNUQsIDB4MTM1RiB9LAoreyAweDE3MTIsIDB4MTcxNCB9LAoreyAweDE3MzIsIDB4MTczNCB9LAoreyAweDE3NTIsIDB4MTc1MyB9LAoreyAweDE3NzIsIDB4MTc3MyB9LAoreyAweDE3QjQsIDB4MTdCNSB9LAoreyAweDE3QjcsIDB4MTdCRCB9LAoreyAweDE3QzYsIDB4MTdDNiB9LAoreyAweDE3QzksIDB4MTdEMyB9LAoreyAweDE3REQsIDB4MTdERCB9LAoreyAweDE4MEIsIDB4MTgwRSB9LAoreyAweDE4ODUsIDB4MTg4NiB9LAoreyAweDE4QTksIDB4MThBOSB9LAoreyAweDE5MjAsIDB4MTkyMiB9LAoreyAweDE5MjcsIDB4MTkyOCB9LAoreyAweDE5MzIsIDB4MTkzMiB9LAoreyAweDE5MzksIDB4MTkzQiB9LAoreyAweDFBMTcsIDB4MUExOCB9LAoreyAweDFBMUIsIDB4MUExQiB9LAoreyAweDFBNTYsIDB4MUE1NiB9LAoreyAweDFBNTgsIDB4MUE1RSB9LAoreyAweDFBNjAsIDB4MUE2MCB9LAoreyAweDFBNjIsIDB4MUE2MiB9LAoreyAweDFBNjUsIDB4MUE2QyB9LAoreyAweDFBNzMsIDB4MUE3QyB9LAoreyAweDFBN0YsIDB4MUE3RiB9LAoreyAweDFBQjAsIDB4MUFDMCB9LAoreyAweDFCMDAsIDB4MUIwMyB9LAoreyAweDFCMzQsIDB4MUIzNCB9LAoreyAweDFCMzYsIDB4MUIzQSB9LAoreyAweDFCM0MsIDB4MUIzQyB9LAoreyAweDFCNDIsIDB4MUI0MiB9LAoreyAweDFCNkIsIDB4MUI3MyB9LAoreyAweDFCODAsIDB4MUI4MSB9LAoreyAweDFCQTIsIDB4MUJBNSB9LAoreyAweDFCQTgsIDB4MUJBOSB9LAoreyAweDFCQUIsIDB4MUJBRCB9LAoreyAweDFCRTYsIDB4MUJFNiB9LAoreyAweDFCRTgsIDB4MUJFOSB9LAoreyAweDFCRUQsIDB4MUJFRCB9LAoreyAweDFCRUYsIDB4MUJGMSB9LAoreyAweDFDMkMsIDB4MUMzMyB9LAoreyAweDFDMzYsIDB4MUMzNyB9LAoreyAweDFDRDAsIDB4MUNEMiB9LAoreyAweDFDRDQsIDB4MUNFMCB9LAoreyAweDFDRTIsIDB4MUNFOCB9LAoreyAweDFDRUQsIDB4MUNFRCB9LAoreyAweDFDRjQsIDB4MUNGNCB9LAoreyAweDFDRjgsIDB4MUNGOSB9LAoreyAweDFEQzAsIDB4MURGOSB9LAoreyAweDFERkIsIDB4MURGRiB9LAoreyAweDIwMEIsIDB4MjAwRiB9LAoreyAweDIwMkEsIDB4MjAyRSB9LAoreyAweDIwNjAsIDB4MjA2NCB9LAoreyAweDIwNjYsIDB4MjA2RiB9LAoreyAweDIwRDAsIDB4MjBGMCB9LAoreyAweDJDRUYsIDB4MkNGMSB9LAoreyAweDJEN0YsIDB4MkQ3RiB9LAoreyAweDJERTAsIDB4MkRGRiB9LAoreyAweDMwMkEsIDB4MzAyRCB9LAoreyAweDMwOTksIDB4MzA5QSB9LAoreyAweEE2NkYsIDB4QTY3MiB9LAoreyAweEE2NzQsIDB4QTY3RCB9LAoreyAweEE2OUUsIDB4QTY5RiB9LAoreyAweEE2RjAsIDB4QTZGMSB9LAoreyAweEE4MDIsIDB4QTgwMiB9LAoreyAweEE4MDYsIDB4QTgwNiB9LAoreyAweEE4MEIsIDB4QTgwQiB9LAoreyAweEE4MjUsIDB4QTgyNiB9LAoreyAweEE4MkMsIDB4QTgyQyB9LAoreyAweEE4QzQsIDB4QThDNSB9LAoreyAweEE4RTAsIDB4QThGMSB9LAoreyAweEE4RkYsIDB4QThGRiB9LAoreyAweEE5MjYsIDB4QTkyRCB9LAoreyAweEE5NDcsIDB4QTk1MSB9LAoreyAweEE5ODAsIDB4QTk4MiB9LAoreyAweEE5QjMsIDB4QTlCMyB9LAoreyAweEE5QjYsIDB4QTlCOSB9LAoreyAweEE5QkMsIDB4QTlCRCB9LAoreyAweEE5RTUsIDB4QTlFNSB9LAoreyAweEFBMjksIDB4QUEyRSB9LAoreyAweEFBMzEsIDB4QUEzMiB9LAoreyAweEFBMzUsIDB4QUEzNiB9LAoreyAweEFBNDMsIDB4QUE0MyB9LAoreyAweEFBNEMsIDB4QUE0QyB9LAoreyAweEFBN0MsIDB4QUE3QyB9LAoreyAweEFBQjAsIDB4QUFCMCB9LAoreyAweEFBQjIsIDB4QUFCNCB9LAoreyAweEFBQjcsIDB4QUFCOCB9LAoreyAweEFBQkUsIDB4QUFCRiB9LAoreyAweEFBQzEsIDB4QUFDMSB9LAoreyAweEFBRUMsIDB4QUFFRCB9LAoreyAweEFBRjYsIDB4QUFGNiB9LAoreyAweEFCRTUsIDB4QUJFNSB9LAoreyAweEFCRTgsIDB4QUJFOCB9LAoreyAweEFCRUQsIDB4QUJFRCB9LAoreyAweEZCMUUsIDB4RkIxRSB9LAoreyAweEZFMDAsIDB4RkUwRiB9LAoreyAweEZFMjAsIDB4RkUyRiB9LAoreyAweEZFRkYsIDB4RkVGRiB9LAoreyAweEZGRjksIDB4RkZGQiB9LAoreyAweDEwMUZELCAweDEwMUZEIH0sCit7IDB4MTAyRTAsIDB4MTAyRTAgfSwKK3sgMHgxMDM3NiwgMHgxMDM3QSB9LAoreyAweDEwQTAxLCAweDEwQTAzIH0sCit7IDB4MTBBMDUsIDB4MTBBMDYgfSwKK3sgMHgxMEEwQywgMHgxMEEwRiB9LAoreyAweDEwQTM4LCAweDEwQTNBIH0sCit7IDB4MTBBM0YsIDB4MTBBM0YgfSwKK3sgMHgxMEFFNSwgMHgxMEFFNiB9LAoreyAweDEwRDI0LCAweDEwRDI3IH0sCit7IDB4MTBFQUIsIDB4MTBFQUMgfSwKK3sgMHgxMEY0NiwgMHgxMEY1MCB9LAoreyAweDExMDAxLCAweDExMDAxIH0sCit7IDB4MTEwMzgsIDB4MTEwNDYgfSwKK3sgMHgxMTA3RiwgMHgxMTA4MSB9LAoreyAweDExMEIzLCAweDExMEI2IH0sCit7IDB4MTEwQjksIDB4MTEwQkEgfSwKK3sgMHgxMTBCRCwgMHgxMTBCRCB9LAoreyAweDExMENELCAweDExMENEIH0sCit7IDB4MTExMDAsIDB4MTExMDIgfSwKK3sgMHgxMTEyNywgMHgxMTEyQiB9LAoreyAweDExMTJELCAweDExMTM0IH0sCit7IDB4MTExNzMsIDB4MTExNzMgfSwKK3sgMHgxMTE4MCwgMHgxMTE4MSB9LAoreyAweDExMUI2LCAweDExMUJFIH0sCit7IDB4MTExQzksIDB4MTExQ0MgfSwKK3sgMHgxMTFDRiwgMHgxMTFDRiB9LAoreyAweDExMjJGLCAweDExMjMxIH0sCit7IDB4MTEyMzQsIDB4MTEyMzQgfSwKK3sgMHgxMTIzNiwgMHgxMTIzNyB9LAoreyAweDExMjNFLCAweDExMjNFIH0sCit7IDB4MTEyREYsIDB4MTEyREYgfSwKK3sgMHgxMTJFMywgMHgxMTJFQSB9LAoreyAweDExMzAwLCAweDExMzAxIH0sCit7IDB4MTEzM0IsIDB4MTEzM0MgfSwKK3sgMHgxMTM0MCwgMHgxMTM0MCB9LAoreyAweDExMzY2LCAweDExMzZDIH0sCit7IDB4MTEzNzAsIDB4MTEzNzQgfSwKK3sgMHgxMTQzOCwgMHgxMTQzRiB9LAoreyAweDExNDQyLCAweDExNDQ0IH0sCit7IDB4MTE0NDYsIDB4MTE0NDYgfSwKK3sgMHgxMTQ1RSwgMHgxMTQ1RSB9LAoreyAweDExNEIzLCAweDExNEI4IH0sCit7IDB4MTE0QkEsIDB4MTE0QkEgfSwKK3sgMHgxMTRCRiwgMHgxMTRDMCB9LAoreyAweDExNEMyLCAweDExNEMzIH0sCit7IDB4MTE1QjIsIDB4MTE1QjUgfSwKK3sgMHgxMTVCQywgMHgxMTVCRCB9LAoreyAweDExNUJGLCAweDExNUMwIH0sCit7IDB4MTE1REMsIDB4MTE1REQgfSwKK3sgMHgxMTYzMywgMHgxMTYzQSB9LAoreyAweDExNjNELCAweDExNjNEIH0sCit7IDB4MTE2M0YsIDB4MTE2NDAgfSwKK3sgMHgxMTZBQiwgMHgxMTZBQiB9LAoreyAweDExNkFELCAweDExNkFEIH0sCit7IDB4MTE2QjAsIDB4MTE2QjUgfSwKK3sgMHgxMTZCNywgMHgxMTZCNyB9LAoreyAweDExNzFELCAweDExNzFGIH0sCit7IDB4MTE3MjIsIDB4MTE3MjUgfSwKK3sgMHgxMTcyNywgMHgxMTcyQiB9LAoreyAweDExODJGLCAweDExODM3IH0sCit7IDB4MTE4MzksIDB4MTE4M0EgfSwKK3sgMHgxMTkzQiwgMHgxMTkzQyB9LAoreyAweDExOTNFLCAweDExOTNFIH0sCit7IDB4MTE5NDMsIDB4MTE5NDMgfSwKK3sgMHgxMTlENCwgMHgxMTlENyB9LAoreyAweDExOURBLCAweDExOURCIH0sCit7IDB4MTE5RTAsIDB4MTE5RTAgfSwKK3sgMHgxMUEwMSwgMHgxMUEwQSB9LAoreyAweDExQTMzLCAweDExQTM4IH0sCit7IDB4MTFBM0IsIDB4MTFBM0UgfSwKK3sgMHgxMUE0NywgMHgxMUE0NyB9LAoreyAweDExQTUxLCAweDExQTU2IH0sCit7IDB4MTFBNTksIDB4MTFBNUIgfSwKK3sgMHgxMUE4QSwgMHgxMUE5NiB9LAoreyAweDExQTk4LCAweDExQTk5IH0sCit7IDB4MTFDMzAsIDB4MTFDMzYgfSwKK3sgMHgxMUMzOCwgMHgxMUMzRCB9LAoreyAweDExQzNGLCAweDExQzNGIH0sCit7IDB4MTFDOTIsIDB4MTFDQTcgfSwKK3sgMHgxMUNBQSwgMHgxMUNCMCB9LAoreyAweDExQ0IyLCAweDExQ0IzIH0sCit7IDB4MTFDQjUsIDB4MTFDQjYgfSwKK3sgMHgxMUQzMSwgMHgxMUQzNiB9LAoreyAweDExRDNBLCAweDExRDNBIH0sCit7IDB4MTFEM0MsIDB4MTFEM0QgfSwKK3sgMHgxMUQzRiwgMHgxMUQ0NSB9LAoreyAweDExRDQ3LCAweDExRDQ3IH0sCit7IDB4MTFEOTAsIDB4MTFEOTEgfSwKK3sgMHgxMUQ5NSwgMHgxMUQ5NSB9LAoreyAweDExRDk3LCAweDExRDk3IH0sCit7IDB4MTFFRjMsIDB4MTFFRjQgfSwKK3sgMHgxMzQzMCwgMHgxMzQzOCB9LAoreyAweDE2QUYwLCAweDE2QUY0IH0sCit7IDB4MTZCMzAsIDB4MTZCMzYgfSwKK3sgMHgxNkY0RiwgMHgxNkY0RiB9LAoreyAweDE2RjhGLCAweDE2RjkyIH0sCit7IDB4MTZGRTQsIDB4MTZGRTQgfSwKK3sgMHgxQkM5RCwgMHgxQkM5RSB9LAoreyAweDFCQ0EwLCAweDFCQ0EzIH0sCit7IDB4MUQxNjcsIDB4MUQxNjkgfSwKK3sgMHgxRDE3MywgMHgxRDE4MiB9LAoreyAweDFEMTg1LCAweDFEMThCIH0sCit7IDB4MUQxQUEsIDB4MUQxQUQgfSwKK3sgMHgxRDI0MiwgMHgxRDI0NCB9LAoreyAweDFEQTAwLCAweDFEQTM2IH0sCit7IDB4MURBM0IsIDB4MURBNkMgfSwKK3sgMHgxREE3NSwgMHgxREE3NSB9LAoreyAweDFEQTg0LCAweDFEQTg0IH0sCit7IDB4MURBOUIsIDB4MURBOUYgfSwKK3sgMHgxREFBMSwgMHgxREFBRiB9LAoreyAweDFFMDAwLCAweDFFMDA2IH0sCit7IDB4MUUwMDgsIDB4MUUwMTggfSwKK3sgMHgxRTAxQiwgMHgxRTAyMSB9LAoreyAweDFFMDIzLCAweDFFMDI0IH0sCit7IDB4MUUwMjYsIDB4MUUwMkEgfSwKK3sgMHgxRTEzMCwgMHgxRTEzNiB9LAoreyAweDFFMkVDLCAweDFFMkVGIH0sCit7IDB4MUU4RDAsIDB4MUU4RDYgfSwKK3sgMHgxRTk0NCwgMHgxRTk0QSB9LAoreyAweEUwMDAxLCAweEUwMDAxIH0sCit7IDB4RTAwMjAsIDB4RTAwN0YgfSwKK3sgMHhFMDEwMCwgMHhFMDFFRiB9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlcnZhbCBkb3VibGVfd2lkdGhbXSA9IHsKK3sgMHgxMTAwLCAweDExNUYgfSwKK3sgMHgyMzFBLCAweDIzMUIgfSwKK3sgMHgyMzI5LCAweDIzMkEgfSwKK3sgMHgyM0U5LCAweDIzRUMgfSwKK3sgMHgyM0YwLCAweDIzRjAgfSwKK3sgMHgyM0YzLCAweDIzRjMgfSwKK3sgMHgyNUZELCAweDI1RkUgfSwKK3sgMHgyNjE0LCAweDI2MTUgfSwKK3sgMHgyNjQ4LCAweDI2NTMgfSwKK3sgMHgyNjdGLCAweDI2N0YgfSwKK3sgMHgyNjkzLCAweDI2OTMgfSwKK3sgMHgyNkExLCAweDI2QTEgfSwKK3sgMHgyNkFBLCAweDI2QUIgfSwKK3sgMHgyNkJELCAweDI2QkUgfSwKK3sgMHgyNkM0LCAweDI2QzUgfSwKK3sgMHgyNkNFLCAweDI2Q0UgfSwKK3sgMHgyNkQ0LCAweDI2RDQgfSwKK3sgMHgyNkVBLCAweDI2RUEgfSwKK3sgMHgyNkYyLCAweDI2RjMgfSwKK3sgMHgyNkY1LCAweDI2RjUgfSwKK3sgMHgyNkZBLCAweDI2RkEgfSwKK3sgMHgyNkZELCAweDI2RkQgfSwKK3sgMHgyNzA1LCAweDI3MDUgfSwKK3sgMHgyNzBBLCAweDI3MEIgfSwKK3sgMHgyNzI4LCAweDI3MjggfSwKK3sgMHgyNzRDLCAweDI3NEMgfSwKK3sgMHgyNzRFLCAweDI3NEUgfSwKK3sgMHgyNzUzLCAweDI3NTUgfSwKK3sgMHgyNzU3LCAweDI3NTcgfSwKK3sgMHgyNzk1LCAweDI3OTcgfSwKK3sgMHgyN0IwLCAweDI3QjAgfSwKK3sgMHgyN0JGLCAweDI3QkYgfSwKK3sgMHgyQjFCLCAweDJCMUMgfSwKK3sgMHgyQjUwLCAweDJCNTAgfSwKK3sgMHgyQjU1LCAweDJCNTUgfSwKK3sgMHgyRTgwLCAweDJFOTkgfSwKK3sgMHgyRTlCLCAweDJFRjMgfSwKK3sgMHgyRjAwLCAweDJGRDUgfSwKK3sgMHgyRkYwLCAweDJGRkIgfSwKK3sgMHgzMDAwLCAweDMwM0UgfSwKK3sgMHgzMDQxLCAweDMwOTYgfSwKK3sgMHgzMDk5LCAweDMwRkYgfSwKK3sgMHgzMTA1LCAweDMxMkYgfSwKK3sgMHgzMTMxLCAweDMxOEUgfSwKK3sgMHgzMTkwLCAweDMxRTMgfSwKK3sgMHgzMUYwLCAweDMyMUUgfSwKK3sgMHgzMjIwLCAweDMyNDcgfSwKK3sgMHgzMjUwLCAweDREQkYgfSwKK3sgMHg0RTAwLCAweEE0OEMgfSwKK3sgMHhBNDkwLCAweEE0QzYgfSwKK3sgMHhBOTYwLCAweEE5N0MgfSwKK3sgMHhBQzAwLCAweEQ3QTMgfSwKK3sgMHhGOTAwLCAweEZBRkYgfSwKK3sgMHhGRTEwLCAweEZFMTkgfSwKK3sgMHhGRTMwLCAweEZFNTIgfSwKK3sgMHhGRTU0LCAweEZFNjYgfSwKK3sgMHhGRTY4LCAweEZFNkIgfSwKK3sgMHhGRjAxLCAweEZGNjAgfSwKK3sgMHhGRkUwLCAweEZGRTYgfSwKK3sgMHgxNkZFMCwgMHgxNkZFNCB9LAoreyAweDE2RkYwLCAweDE2RkYxIH0sCit7IDB4MTcwMDAsIDB4MTg3RjcgfSwKK3sgMHgxODgwMCwgMHgxOENENSB9LAoreyAweDE4RDAwLCAweDE4RDA4IH0sCit7IDB4MUIwMDAsIDB4MUIxMUUgfSwKK3sgMHgxQjE1MCwgMHgxQjE1MiB9LAoreyAweDFCMTY0LCAweDFCMTY3IH0sCit7IDB4MUIxNzAsIDB4MUIyRkIgfSwKK3sgMHgxRjAwNCwgMHgxRjAwNCB9LAoreyAweDFGMENGLCAweDFGMENGIH0sCit7IDB4MUYxOEUsIDB4MUYxOEUgfSwKK3sgMHgxRjE5MSwgMHgxRjE5QSB9LAoreyAweDFGMjAwLCAweDFGMjAyIH0sCit7IDB4MUYyMTAsIDB4MUYyM0IgfSwKK3sgMHgxRjI0MCwgMHgxRjI0OCB9LAoreyAweDFGMjUwLCAweDFGMjUxIH0sCit7IDB4MUYyNjAsIDB4MUYyNjUgfSwKK3sgMHgxRjMwMCwgMHgxRjMyMCB9LAoreyAweDFGMzJELCAweDFGMzM1IH0sCit7IDB4MUYzMzcsIDB4MUYzN0MgfSwKK3sgMHgxRjM3RSwgMHgxRjM5MyB9LAoreyAweDFGM0EwLCAweDFGM0NBIH0sCit7IDB4MUYzQ0YsIDB4MUYzRDMgfSwKK3sgMHgxRjNFMCwgMHgxRjNGMCB9LAoreyAweDFGM0Y0LCAweDFGM0Y0IH0sCit7IDB4MUYzRjgsIDB4MUY0M0UgfSwKK3sgMHgxRjQ0MCwgMHgxRjQ0MCB9LAoreyAweDFGNDQyLCAweDFGNEZDIH0sCit7IDB4MUY0RkYsIDB4MUY1M0QgfSwKK3sgMHgxRjU0QiwgMHgxRjU0RSB9LAoreyAweDFGNTUwLCAweDFGNTY3IH0sCit7IDB4MUY1N0EsIDB4MUY1N0EgfSwKK3sgMHgxRjU5NSwgMHgxRjU5NiB9LAoreyAweDFGNUE0LCAweDFGNUE0IH0sCit7IDB4MUY1RkIsIDB4MUY2NEYgfSwKK3sgMHgxRjY4MCwgMHgxRjZDNSB9LAoreyAweDFGNkNDLCAweDFGNkNDIH0sCit7IDB4MUY2RDAsIDB4MUY2RDIgfSwKK3sgMHgxRjZENSwgMHgxRjZENyB9LAoreyAweDFGNkVCLCAweDFGNkVDIH0sCit7IDB4MUY2RjQsIDB4MUY2RkMgfSwKK3sgMHgxRjdFMCwgMHgxRjdFQiB9LAoreyAweDFGOTBDLCAweDFGOTNBIH0sCit7IDB4MUY5M0MsIDB4MUY5NDUgfSwKK3sgMHgxRjk0NywgMHgxRjk3OCB9LAoreyAweDFGOTdBLCAweDFGOUNCIH0sCit7IDB4MUY5Q0QsIDB4MUY5RkYgfSwKK3sgMHgxRkE3MCwgMHgxRkE3NCB9LAoreyAweDFGQTc4LCAweDFGQTdBIH0sCit7IDB4MUZBODAsIDB4MUZBODYgfSwKK3sgMHgxRkE5MCwgMHgxRkFBOCB9LAoreyAweDFGQUIwLCAweDFGQUI2IH0sCit7IDB4MUZBQzAsIDB4MUZBQzIgfSwKK3sgMHgxRkFEMCwgMHgxRkFENiB9LAoreyAweDIwMDAwLCAweDJGRkZEIH0sCit7IDB4MzAwMDAsIDB4M0ZGRkQgfQorfTsKZGlmZiAtLWdpdCBhL3VuaW1wbGVtZW50ZWQuc2ggYi91bmltcGxlbWVudGVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTIxZDIKLS0tIC9kZXYvbnVsbAorKysgYi91bmltcGxlbWVudGVkLnNoCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKK2VjaG8gPiYyICJmYXRhbDogZ2l0IHdhcyBidWlsdCB3aXRob3V0IHN1cHBvcnQgZm9yICQoYmFzZW5hbWUgJDApIChAQFJFQVNPTkBAKS4iCitleGl0IDEyOApkaWZmIC0tZ2l0IGEvdW5peC1zb2NrZXQuYyBiL3VuaXgtc29ja2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllZDQ4YgotLS0gL2Rldi9udWxsCisrKyBiL3VuaXgtc29ja2V0LmMKQEAgLTAsMCArMSwxMjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInVuaXgtc29ja2V0LmgiCisKK3N0YXRpYyBpbnQgdW5peF9zdHJlYW1fc29ja2V0KHZvaWQpCit7CisJaW50IGZkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgc29ja2V0Iik7CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50IGNoZGlyX2xlbihjb25zdCBjaGFyICpvcmlnLCBpbnQgbGVuKQoreworCWNoYXIgKnBhdGggPSB4bWVtZHVweihvcmlnLCBsZW4pOworCWludCByID0gY2hkaXIocGF0aCk7CisJZnJlZShwYXRoKTsKKwlyZXR1cm4gcjsKK30KKworc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCB7CisJY2hhciAqb3JpZ19kaXI7Cit9OworCitzdGF0aWMgdm9pZCB1bml4X3NvY2thZGRyX2NsZWFudXAoc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCAqY3R4KQoreworCWlmICghY3R4LT5vcmlnX2RpcikKKwkJcmV0dXJuOworCS8qCisJICogSWYgd2UgZmFpbCwgd2UgY2FuJ3QganVzdCByZXR1cm4gYW4gZXJyb3IsIHNpbmNlIHdlIGhhdmUKKwkgKiBtb3ZlZCB0aGUgY3dkIG9mIHRoZSB3aG9sZSBwcm9jZXNzLCB3aGljaCBjb3VsZCBjb25mdXNlIGNhbGxpbmcKKwkgKiBjb2RlLiAgV2UgYXJlIGJldHRlciBvZmYgdG8ganVzdCBkaWUuCisJICovCisJaWYgKGNoZGlyKGN0eC0+b3JpZ19kaXIpIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB3b3JraW5nIGRpcmVjdG9yeSIpOworCWZyZWUoY3R4LT5vcmlnX2Rpcik7Cit9CisKK3N0YXRpYyBpbnQgdW5peF9zb2NrYWRkcl9pbml0KHN0cnVjdCBzb2NrYWRkcl91biAqc2EsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICBzdHJ1Y3QgdW5peF9zb2NrYWRkcl9jb250ZXh0ICpjdHgpCit7CisJaW50IHNpemUgPSBzdHJsZW4ocGF0aCkgKyAxOworCisJY3R4LT5vcmlnX2RpciA9IE5VTEw7CisJaWYgKHNpemUgPiBzaXplb2Yoc2EtPnN1bl9wYXRoKSkgeworCQljb25zdCBjaGFyICpzbGFzaCA9IGZpbmRfbGFzdF9kaXJfc2VwKHBhdGgpOworCQljb25zdCBjaGFyICpkaXI7CisJCXN0cnVjdCBzdHJidWYgY3dkID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKCFzbGFzaCkgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlkaXIgPSBwYXRoOworCQlwYXRoID0gc2xhc2ggKyAxOworCQlzaXplID0gc3RybGVuKHBhdGgpICsgMTsKKwkJaWYgKHNpemUgPiBzaXplb2Yoc2EtPnN1bl9wYXRoKSkgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKHN0cmJ1Zl9nZXRjd2QoJmN3ZCkpCisJCQlyZXR1cm4gLTE7CisJCWN0eC0+b3JpZ19kaXIgPSBzdHJidWZfZGV0YWNoKCZjd2QsIE5VTEwpOworCQlpZiAoY2hkaXJfbGVuKGRpciwgc2xhc2ggLSBkaXIpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwltZW1zZXQoc2EsIDAsIHNpemVvZigqc2EpKTsKKwlzYS0+c3VuX2ZhbWlseSA9IEFGX1VOSVg7CisJbWVtY3B5KHNhLT5zdW5fcGF0aCwgcGF0aCwgc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1bml4X3N0cmVhbV9jb25uZWN0KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZkLCBzYXZlZF9lcnJubzsKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gc2E7CisJc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCBjdHg7CisKKwlpZiAodW5peF9zb2NrYWRkcl9pbml0KCZzYSwgcGF0aCwgJmN0eCkgPCAwKQorCQlyZXR1cm4gLTE7CisJZmQgPSB1bml4X3N0cmVhbV9zb2NrZXQoKTsKKwlpZiAoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSwgc2l6ZW9mKHNhKSkgPCAwKQorCQlnb3RvIGZhaWw7CisJdW5peF9zb2NrYWRkcl9jbGVhbnVwKCZjdHgpOworCXJldHVybiBmZDsKKworZmFpbDoKKwlzYXZlZF9lcnJubyA9IGVycm5vOworCXVuaXhfc29ja2FkZHJfY2xlYW51cCgmY3R4KTsKKwljbG9zZShmZCk7CisJZXJybm8gPSBzYXZlZF9lcnJubzsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCB1bml4X3N0cmVhbV9saXN0ZW4oY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgZmQsIHNhdmVkX2Vycm5vOworCXN0cnVjdCBzb2NrYWRkcl91biBzYTsKKwlzdHJ1Y3QgdW5peF9zb2NrYWRkcl9jb250ZXh0IGN0eDsKKworCXVubGluayhwYXRoKTsKKworCWlmICh1bml4X3NvY2thZGRyX2luaXQoJnNhLCBwYXRoLCAmY3R4KSA8IDApCisJCXJldHVybiAtMTsKKwlmZCA9IHVuaXhfc3RyZWFtX3NvY2tldCgpOworCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2EsIHNpemVvZihzYSkpIDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKGxpc3RlbihmZCwgNSkgPCAwKQorCQlnb3RvIGZhaWw7CisKKwl1bml4X3NvY2thZGRyX2NsZWFudXAoJmN0eCk7CisJcmV0dXJuIGZkOworCitmYWlsOgorCXNhdmVkX2Vycm5vID0gZXJybm87CisJdW5peF9zb2NrYWRkcl9jbGVhbnVwKCZjdHgpOworCWNsb3NlKGZkKTsKKwllcnJubyA9IHNhdmVkX2Vycm5vOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL3VuaXgtc29ja2V0LmggYi91bml4LXNvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzFhZWUKLS0tIC9kZXYvbnVsbAorKysgYi91bml4LXNvY2tldC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBVTklYX1NPQ0tFVF9ICisjZGVmaW5lIFVOSVhfU09DS0VUX0gKKworaW50IHVuaXhfc3RyZWFtX2Nvbm5lY3QoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgdW5peF9zdHJlYW1fbGlzdGVuKGNvbnN0IGNoYXIgKnBhdGgpOworCisjZW5kaWYgLyogVU5JWF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmMgYi91bnBhY2stdHJlZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWNkYWIzCi0tLSAvZGV2L251bGwKKysrIGIvdW5wYWNrLXRyZWVzLmMKQEAgLTAsMCArMSwyNDUzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInNwbGl0LWluZGV4LmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgImZzbW9uaXRvci5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInByb21pc29yLXJlbW90ZS5oIgorCisvKgorICogRXJyb3IgbWVzc2FnZXMgZXhwZWN0ZWQgYnkgc2NyaXB0cyBvdXQgb2YgcGx1bWJpbmcgY29tbWFuZHMgc3VjaCBhcworICogcmVhZC10cmVlLiAgTm9uLXNjcmlwdGVkIFBvcmNlbGFpbiBpcyBub3QgcmVxdWlyZWQgdG8gdXNlIHRoZXNlIG1lc3NhZ2VzCisgKiBhbmQgaW4gZmFjdCBhcmUgZW5jb3VyYWdlZCB0byByZXdvcmQgdGhlbSB0byBiZXR0ZXIgc3VpdCB0aGVpciBwYXJ0aWN1bGFyCisgKiBzaXR1YXRpb24gYmV0dGVyLiAgU2VlIGhvdyAiZ2l0IGNoZWNrb3V0IiBhbmQgImdpdCBtZXJnZSIgcmVwbGFjZXMKKyAqIHRoZW0gdXNpbmcgc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigpLCBmb3IgZXhhbXBsZS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnVucGFja19wbHVtYmluZ19lcnJvcnNbTkJfVU5QQUNLX1RSRUVTX0VSUk9SX1RZUEVTXSA9IHsKKwkvKiBFUlJPUl9XT1VMRF9PVkVSV1JJVEUgKi8KKwkiRW50cnkgJyVzJyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZS4gQ2Fubm90IG1lcmdlLiIsCisKKwkvKiBFUlJPUl9OT1RfVVBUT0RBVEVfRklMRSAqLworCSJFbnRyeSAnJXMnIG5vdCB1cHRvZGF0ZS4gQ2Fubm90IG1lcmdlLiIsCisKKwkvKiBFUlJPUl9OT1RfVVBUT0RBVEVfRElSICovCisJIlVwZGF0aW5nICclcycgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gaXQiLAorCisJLyogRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU4gKi8KKwkiVW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuIiwKKworCS8qIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX1JFTU9WRUQgKi8KKwkiVW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgcmVtb3ZlZCBieSBtZXJnZS4iLAorCisJLyogRVJST1JfQklORF9PVkVSTEFQICovCisJIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIiwKKworCS8qIEVSUk9SX1NQQVJTRV9OT1RfVVBUT0RBVEVfRklMRSAqLworCSJFbnRyeSAnJXMnIG5vdCB1cHRvZGF0ZS4gQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQuIiwKKworCS8qIEVSUk9SX1dPVUxEX0xPU0VfT1JQSEFORURfT1ZFUldSSVRURU4gKi8KKwkiV29ya2luZyB0cmVlIGZpbGUgJyVzJyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgdXBkYXRlLiIsCisKKwkvKiBFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX1JFTU9WRUQgKi8KKwkiV29ya2luZyB0cmVlIGZpbGUgJyVzJyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCB1cGRhdGUuIiwKKworCS8qIEVSUk9SX1dPVUxEX0xPU0VfU1VCTU9EVUxFICovCisJIlN1Ym1vZHVsZSAnJXMnIGNhbm5vdCBjaGVja291dCBuZXcgSEVBRC4iLAorfTsKKworI2RlZmluZSBFUlJPUk1TRyhvLHR5cGUpIFwKKwkoICgobykgJiYgKG8pLT5tc2dzWyh0eXBlKV0pIFwKKwkgID8gKChvKS0+bXNnc1sodHlwZSldKSAgICAgIFwKKwkgIDogKHVucGFja19wbHVtYmluZ19lcnJvcnNbKHR5cGUpXSkgKQorCitzdGF0aWMgY29uc3QgY2hhciAqc3VwZXJfcHJlZml4ZWQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwkvKgorCSAqIEl0IGlzIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCB0byBoYXZlIHR3byBzdGF0aWMgYnVmZmVycworCSAqIGhlcmUsIGFzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiBpcyBmZWQgdG8KKwkgKiBlcnJvcigpIHVzaW5nIHRoZSB1bnBhY2tfKl9lcnJvcnNbXSB0ZW1wbGF0ZXMgd2Ugc2VlIGFib3ZlLgorCSAqLworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZlsyXSA9IHtTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVR9OworCXN0YXRpYyBpbnQgc3VwZXJfcHJlZml4X2xlbiA9IC0xOworCXN0YXRpYyB1bnNpZ25lZCBpZHggPSBBUlJBWV9TSVpFKGJ1ZikgLSAxOworCisJaWYgKHN1cGVyX3ByZWZpeF9sZW4gPCAwKSB7CisJCWNvbnN0IGNoYXIgKnN1cGVyX3ByZWZpeCA9IGdldF9zdXBlcl9wcmVmaXgoKTsKKwkJaWYgKCFzdXBlcl9wcmVmaXgpIHsKKwkJCXN1cGVyX3ByZWZpeF9sZW4gPSAwOworCQl9IGVsc2UgeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWYpOyBpKyspCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmW2ldLCBzdXBlcl9wcmVmaXgpOworCQkJc3VwZXJfcHJlZml4X2xlbiA9IGJ1ZlswXS5sZW47CisJCX0KKwl9CisKKwlpZiAoIXN1cGVyX3ByZWZpeF9sZW4pCisJCXJldHVybiBwYXRoOworCisJaWYgKCsraWR4ID49IEFSUkFZX1NJWkUoYnVmKSkKKwkJaWR4ID0gMDsKKworCXN0cmJ1Zl9zZXRsZW4oJmJ1ZltpZHhdLCBzdXBlcl9wcmVmaXhfbGVuKTsKKwlzdHJidWZfYWRkc3RyKCZidWZbaWR4XSwgcGF0aCk7CisKKwlyZXR1cm4gYnVmW2lkeF0uYnVmOworfQorCit2b2lkIHNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRzLAorCQkJCSAgY29uc3QgY2hhciAqY21kKQoreworCWludCBpOworCWNvbnN0IGNoYXIgKiptc2dzID0gb3B0cy0+bXNnczsKKwljb25zdCBjaGFyICptc2c7CisKKwlhcmd2X2FycmF5X2luaXQoJm9wdHMtPm1zZ3NfdG9fZnJlZSk7CisKKwlpZiAoIXN0cmNtcChjbWQsICJjaGVja291dCIpKQorCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQorCQkgICAgICA/IF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuJSVzIgorCQkJICAiUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IHN3aXRjaCBicmFuY2hlcy4iKQorCQkgICAgICA6IF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuJSVzIik7CisJZWxzZSBpZiAoIXN0cmNtcChjbWQsICJtZXJnZSIpKQorCQltc2cgPSBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZQorCQkgICAgICA/IF8oIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuJSVzIgorCQkJICAiUGxlYXNlIGNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIpCisJCSAgICAgIDogXygiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2U6XG4lJXMiKTsKKwllbHNlCisJCW1zZyA9IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlCisJCSAgICAgID8gXygiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4lJXMiCisJCQkgICJQbGVhc2UgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgJXMuIikKKwkJICAgICAgOiBfKCJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSAlczpcbiUlcyIpOworCW1zZ3NbRVJST1JfV09VTERfT1ZFUldSSVRFXSA9IG1zZ3NbRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEVdID0KKwkJYXJndl9hcnJheV9wdXNoZigmb3B0cy0+bXNnc190b19mcmVlLCBtc2csIGNtZCwgY21kKTsKKworCW1zZ3NbRVJST1JfTk9UX1VQVE9EQVRFX0RJUl0gPQorCQlfKCJVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIHRoZW06XG4lcyIpOworCisJaWYgKCFzdHJjbXAoY21kLCAiY2hlY2tvdXQiKSkKKwkJbXNnID0gYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UKKwkJICAgICAgPyBfKCJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBjaGVja291dDpcbiUlcyIKKwkJCSAgIlBsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3Ugc3dpdGNoIGJyYW5jaGVzLiIpCisJCSAgICAgIDogXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgY2hlY2tvdXQ6XG4lJXMiKTsKKwllbHNlIGlmICghc3RyY21wKGNtZCwgIm1lcmdlIikpCisJCW1zZyA9IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlCisJCSAgICAgID8gXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4lJXMiCisJCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IG1lcmdlLiIpCisJCSAgICAgIDogXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2U6XG4lJXMiKTsKKwllbHNlCisJCW1zZyA9IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlCisJCSAgICAgID8gXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4lJXMiCisJCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIpCisJCSAgICAgIDogXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIHJlbW92ZWQgYnkgJXM6XG4lJXMiKTsKKwltc2dzW0VSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX1JFTU9WRURdID0KKwkJYXJndl9hcnJheV9wdXNoZigmb3B0cy0+bXNnc190b19mcmVlLCBtc2csIGNtZCwgY21kKTsKKworCWlmICghc3RyY21wKGNtZCwgImNoZWNrb3V0IikpCisJCW1zZyA9IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlCisJCSAgICAgID8gXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZWNrb3V0OlxuJSVzIgorCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBzd2l0Y2ggYnJhbmNoZXMuIikKKwkJICAgICAgOiBfKCJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6XG4lJXMiKTsKKwllbHNlIGlmICghc3RyY21wKGNtZCwgIm1lcmdlIikpCisJCW1zZyA9IGFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlCisJCSAgICAgID8gXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOlxuJSVzIgorCQkJICAiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBtZXJnZS4iKQorCQkgICAgICA6IF8oIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZTpcbiUlcyIpOworCWVsc2UKKwkJbXNnID0gYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UKKwkJICAgICAgPyBfKCJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4lJXMiCisJCQkgICJQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91ICVzLiIpCisJCSAgICAgIDogXygiVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuJSVzIik7CisJbXNnc1tFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTl0gPQorCQlhcmd2X2FycmF5X3B1c2hmKCZvcHRzLT5tc2dzX3RvX2ZyZWUsIG1zZywgY21kLCBjbWQpOworCisJLyoKKwkgKiBTcGVjaWFsIGNhc2U6IEVSUk9SX0JJTkRfT1ZFUkxBUCByZWZlcnMgdG8gYSBwYWlyIG9mIHBhdGhzLCB3ZQorCSAqIGNhbm5vdCBlYXNpbHkgZGlzcGxheSBpdCBhcyBhIGxpc3QuCisJICovCisJbXNnc1tFUlJPUl9CSU5EX09WRVJMQVBdID0gXygiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iKTsKKworCW1zZ3NbRVJST1JfU1BBUlNFX05PVF9VUFRPREFURV9GSUxFXSA9CisJCV8oIkNhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0OiB0aGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCB1cCB0byBkYXRlOlxuJXMiKTsKKwltc2dzW0VSUk9SX1dPVUxEX0xPU0VfT1JQSEFORURfT1ZFUldSSVRURU5dID0KKwkJXygiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgc3BhcnNlIGNoZWNrb3V0IHVwZGF0ZTpcbiVzIik7CisJbXNnc1tFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX1JFTU9WRURdID0KKwkJXygiVGhlIGZvbGxvd2luZyB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgdXBkYXRlOlxuJXMiKTsKKwltc2dzW0VSUk9SX1dPVUxEX0xPU0VfU1VCTU9EVUxFXSA9CisJCV8oIkNhbm5vdCB1cGRhdGUgc3VibW9kdWxlOlxuJXMiKTsKKworCW9wdHMtPnNob3dfYWxsX2Vycm9ycyA9IDE7CisJLyogcmVqZWN0ZWQgcGF0aHMgbWF5IG5vdCBoYXZlIGEgc3RhdGljIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9wdHMtPnVucGFja19yZWplY3RzKTsgaSsrKQorCQlvcHRzLT51bnBhY2tfcmVqZWN0c1tpXS5zdHJkdXBfc3RyaW5ncyA9IDE7Cit9CisKK3ZvaWQgY2xlYXJfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbihzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdHMpCit7CisJYXJndl9hcnJheV9jbGVhcigmb3B0cy0+bXNnc190b19mcmVlKTsKKwltZW1zZXQob3B0cy0+bXNncywgMCwgc2l6ZW9mKG9wdHMtPm1zZ3MpKTsKK30KKworc3RhdGljIGludCBkb19hZGRfZW50cnkoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwljbGVhciB8PSBDRV9IQVNIRUQ7CisKKwlpZiAoc2V0ICYgQ0VfUkVNT1ZFKQorCQlzZXQgfD0gQ0VfV1RfUkVNT1ZFOworCisJY2UtPmNlX2ZsYWdzID0gKGNlLT5jZV9mbGFncyAmIH5jbGVhcikgfCBzZXQ7CisJcmV0dXJuIGFkZF9pbmRleF9lbnRyeSgmby0+cmVzdWx0LCBjZSwKKwkJCSAgICAgICBBRERfQ0FDSEVfT0tfVE9fQUREIHwgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UpOworfQorCitzdGF0aWMgdm9pZCBhZGRfZW50cnkoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJZG9fYWRkX2VudHJ5KG8sIGR1cF9jYWNoZV9lbnRyeShjZSwgJm8tPnJlc3VsdCksIHNldCwgY2xlYXIpOworfQorCisvKgorICogYWRkIGVycm9yIG1lc3NhZ2VzIG9uIHBhdGggPHBhdGg+CisgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIDxlPiB3aXRoIHRoZSBtZXNzYWdlIDxtc2c+CisgKiBpbmRpY2F0aW5nIGlmIGl0IHNob3VsZCBiZSBkaXNwbGF5IGluIHBvcmNlbGFpbiBvciBub3QKKyAqLworc3RhdGljIGludCBhZGRfcmVqZWN0ZWRfcGF0aChzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sCisJCQkgICAgIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKG8tPnF1aWV0KQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIW8tPnNob3dfYWxsX2Vycm9ycykKKwkJcmV0dXJuIGVycm9yKEVSUk9STVNHKG8sIGUpLCBzdXBlcl9wcmVmaXhlZChwYXRoKSk7CisKKwkvKgorCSAqIE90aGVyd2lzZSwgaW5zZXJ0IGluIGEgbGlzdCBmb3IgZnV0dXJlIGRpc3BsYXkgYnkKKwkgKiBkaXNwbGF5X2Vycm9yX21zZ3MoKQorCSAqLworCXN0cmluZ19saXN0X2FwcGVuZCgmby0+dW5wYWNrX3JlamVjdHNbZV0sIHBhdGgpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIGRpc3BsYXkgYWxsIHRoZSBlcnJvciBtZXNzYWdlcyBzdG9yZWQgaW4gYSBuaWNlIHdheQorICovCitzdGF0aWMgdm9pZCBkaXNwbGF5X2Vycm9yX21zZ3Moc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCBlLCBpOworCWludCBzb21ldGhpbmdfZGlzcGxheWVkID0gMDsKKwlmb3IgKGUgPSAwOyBlIDwgTkJfVU5QQUNLX1RSRUVTX0VSUk9SX1RZUEVTOyBlKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0ICpyZWplY3RzID0gJm8tPnVucGFja19yZWplY3RzW2VdOworCQlpZiAocmVqZWN0cy0+bnIgPiAwKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwkJCXNvbWV0aGluZ19kaXNwbGF5ZWQgPSAxOworCQkJZm9yIChpID0gMDsgaSA8IHJlamVjdHMtPm5yOyBpKyspCisJCQkJc3RyYnVmX2FkZGYoJnBhdGgsICJcdCVzXG4iLCByZWplY3RzLT5pdGVtc1tpXS5zdHJpbmcpOworCQkJZXJyb3IoRVJST1JNU0cobywgZSksIHN1cGVyX3ByZWZpeGVkKHBhdGguYnVmKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJCX0KKwkJc3RyaW5nX2xpc3RfY2xlYXIocmVqZWN0cywgMCk7CisJfQorCWlmIChzb21ldGhpbmdfZGlzcGxheWVkKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiQWJvcnRpbmdcbiIpKTsKK30KKworc3RhdGljIGludCBjaGVja19zdWJtb2R1bGVfbW92ZV9oZWFkKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgICBjb25zdCBjaGFyICpvbGRfaWQsCisJCQkJICAgICBjb25zdCBjaGFyICpuZXdfaWQsCisJCQkJICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJdW5zaWduZWQgZmxhZ3MgPSBTVUJNT0RVTEVfTU9WRV9IRUFEX0RSWV9SVU47CisJY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3ViID0gc3VibW9kdWxlX2Zyb21fY2UoY2UpOworCisJaWYgKCFzdWIpCisJCXJldHVybiAwOworCisJaWYgKG8tPnJlc2V0KQorCQlmbGFncyB8PSBTVUJNT0RVTEVfTU9WRV9IRUFEX0ZPUkNFOworCisJaWYgKHN1Ym1vZHVsZV9tb3ZlX2hlYWQoY2UtPm5hbWUsIG9sZF9pZCwgbmV3X2lkLCBmbGFncykpCisJCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9XT1VMRF9MT1NFX1NVQk1PRFVMRSwgY2UtPm5hbWUpOworCXJldHVybiAwOworfQorCisvKgorICogUGVyZm9ybSB0aGUgbG9hZGluZyBvZiB0aGUgcmVwb3NpdG9yeSdzIGdpdG1vZHVsZXMgZmlsZS4gIFRoaXMgZnVuY3Rpb24gaXMKKyAqIHVzZWQgYnkgJ2NoZWNrX3VwZGF0ZSgpJyB0byBwZXJmb3JtIGxvYWRpbmcgb2YgdGhlIGdpdG1vZHVsZXMgZmlsZSBpbiB0d28KKyAqIGRpZmZlcmVudCBzaXR1YXRpb25zOgorICogKDEpIGJlZm9yZSByZW1vdmluZyBlbnRyaWVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBpZiB0aGUgZ2l0bW9kdWxlcyBmaWxlIGhhcworICogICAgIGJlZW4gbWFya2VkIGZvciByZW1vdmFsLiAgVGhpcyBzaXR1YXRpb24gaXMgc3BlY2lmaWVkIGJ5ICdzdGF0ZScgPT0gTlVMTC4KKyAqICgyKSBiZWZvcmUgY2hlY2tpbmcgb3V0IGVudHJpZXMgdG8gdGhlIHdvcmtpbmcgdHJlZSBpZiB0aGUgZ2l0bW9kdWxlcyBmaWxlCisgKiAgICAgaGFzIGJlZW4gbWFya2VkIGZvciB1cGRhdGUuICBUaGlzIHNpdHVhdGlvbiBpcyBzcGVjaWZpZWQgYnkgJ3N0YXRlJyAhPSBOVUxMLgorICovCitzdGF0aWMgdm9pZCBsb2FkX2dpdG1vZHVsZXNfZmlsZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4LAorCQkJCSBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlKQoreworCWludCBwb3MgPSBpbmRleF9uYW1lX3BvcyhpbmRleCwgR0lUTU9EVUxFU19GSUxFLCBzdHJsZW4oR0lUTU9EVUxFU19GSUxFKSk7CisKKwlpZiAocG9zID49IDApIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtwb3NdOworCQlpZiAoIXN0YXRlICYmIGNlLT5jZV9mbGFncyAmIENFX1dUX1JFTU9WRSkgeworCQkJcmVwb19yZWFkX2dpdG1vZHVsZXModGhlX3JlcG9zaXRvcnksIDApOworCQl9IGVsc2UgaWYgKHN0YXRlICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpKSB7CisJCQlzdWJtb2R1bGVfZnJlZSh0aGVfcmVwb3NpdG9yeSk7CisJCQljaGVja291dF9lbnRyeShjZSwgc3RhdGUsIE5VTEwsIE5VTEwpOworCQkJcmVwb19yZWFkX2dpdG1vZHVsZXModGhlX3JlcG9zaXRvcnksIDApOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHByb2dyZXNzICpnZXRfcHJvZ3Jlc3Moc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXVuc2lnbmVkIGNudCA9IDAsIHRvdGFsID0gMDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gJm8tPnJlc3VsdDsKKworCWlmICghby0+dXBkYXRlIHx8ICFvLT52ZXJib3NlX3VwZGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKDsgY250IDwgaW5kZXgtPmNhY2hlX25yOyBjbnQrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2NudF07CisJCWlmIChjZS0+Y2VfZmxhZ3MgJiAoQ0VfVVBEQVRFIHwgQ0VfV1RfUkVNT1ZFKSkKKwkJCXRvdGFsKys7CisJfQorCisJcmV0dXJuIHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiVXBkYXRpbmcgZmlsZXMiKSwgdG90YWwpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9jb2xsaWRlZF9jaGVja291dF9kZXRlY3Rpb24oc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwKKwkJCQkJICAgICAgc3RydWN0IGluZGV4X3N0YXRlICppbmRleCkKK3sKKwlpbnQgaTsKKworCXN0YXRlLT5jbG9uZSA9IDE7CisJZm9yIChpID0gMDsgaSA8IGluZGV4LT5jYWNoZV9ucjsgaSsrKQorCQlpbmRleC0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9NQVRDSEVEOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfY29sbGlkZWRfY2hlY2tvdXQoc3RydWN0IGluZGV4X3N0YXRlICppbmRleCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtpXTsKKworCQlpZiAoIShjZS0+Y2VfZmxhZ3MgJiBDRV9NQVRDSEVEKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgY2UtPm5hbWUpOworCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX01BVENIRUQ7CisJfQorCisJbGlzdC5jbXAgPSBmc3BhdGhjbXA7CisJc3RyaW5nX2xpc3Rfc29ydCgmbGlzdCk7CisKKwlpZiAobGlzdC5ucikgeworCQl3YXJuaW5nKF8oInRoZSBmb2xsb3dpbmcgcGF0aHMgaGF2ZSBjb2xsaWRlZCAoZS5nLiBjYXNlLXNlbnNpdGl2ZSBwYXRoc1xuIgorCQkJICAib24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pIGFuZCBvbmx5IG9uZSBmcm9tIHRoZSBzYW1lXG4iCisJCQkgICJjb2xsaWRpbmcgZ3JvdXAgaXMgaW4gdGhlIHdvcmtpbmcgdHJlZTpcbiIpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKQorCQkJZnByaW50ZihzdGRlcnIsICIgICclcydcbiIsIGxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfdXBkYXRlcyhzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJdW5zaWduZWQgY250ID0gMDsKKwlpbnQgZXJycyA9IDA7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gJm8tPnJlc3VsdDsKKwlzdHJ1Y3QgY2hlY2tvdXQgc3RhdGUgPSBDSEVDS09VVF9JTklUOworCWludCBpOworCisJdHJhY2VfcGVyZm9ybWFuY2VfZW50ZXIoKTsKKwlzdGF0ZS5mb3JjZSA9IDE7CisJc3RhdGUucXVpZXQgPSAxOworCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAxOworCXN0YXRlLmlzdGF0ZSA9IGluZGV4OworCisJaWYgKCFvLT51cGRhdGUgfHwgby0+ZHJ5X3J1bikgeworCQlyZW1vdmVfbWFya2VkX2NhY2hlX2VudHJpZXMoaW5kZXgsIDApOworCQl0cmFjZV9wZXJmb3JtYW5jZV9sZWF2ZSgiY2hlY2tfdXBkYXRlcyIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoby0+Y2xvbmUpCisJCXNldHVwX2NvbGxpZGVkX2NoZWNrb3V0X2RldGVjdGlvbigmc3RhdGUsIGluZGV4KTsKKworCXByb2dyZXNzID0gZ2V0X3Byb2dyZXNzKG8pOworCisJZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihHSVRfQVRUUl9DSEVDS09VVCk7CisKKwlpZiAoc2hvdWxkX3VwZGF0ZV9zdWJtb2R1bGVzKCkpCisJCWxvYWRfZ2l0bW9kdWxlc19maWxlKGluZGV4LCBOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2ldOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9XVF9SRU1PVkUpIHsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrY250KTsKKwkJCXVubGlua19lbnRyeShjZSk7CisJCX0KKwl9CisKKwlyZW1vdmVfbWFya2VkX2NhY2hlX2VudHJpZXMoaW5kZXgsIDApOworCXJlbW92ZV9zY2hlZHVsZWRfZGlycygpOworCisJaWYgKHNob3VsZF91cGRhdGVfc3VibW9kdWxlcygpKQorCQlsb2FkX2dpdG1vZHVsZXNfZmlsZShpbmRleCwgJnN0YXRlKTsKKworCWVuYWJsZV9kZWxheWVkX2NoZWNrb3V0KCZzdGF0ZSk7CisJaWYgKGhhc19wcm9taXNvcl9yZW1vdGUoKSkgeworCQkvKgorCQkgKiBQcmVmZXRjaCB0aGUgb2JqZWN0cyB0aGF0IGFyZSB0byBiZSBjaGVja2VkIG91dCBpbiB0aGUgbG9vcAorCQkgKiBiZWxvdy4KKwkJICovCisJCXN0cnVjdCBvaWRfYXJyYXkgdG9fZmV0Y2ggPSBPSURfQVJSQVlfSU5JVDsKKwkJZm9yIChpID0gMDsgaSA8IGluZGV4LT5jYWNoZV9ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2ldOworCisJCQlpZiAoIShjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpIHx8CisJCQkgICAgU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFvaWRfb2JqZWN0X2luZm9fZXh0ZW5kZWQodGhlX3JlcG9zaXRvcnksICZjZS0+b2lkLAorCQkJCQkJICAgICAgTlVMTCwKKwkJCQkJCSAgICAgIE9CSkVDVF9JTkZPX0ZPUl9QUkVGRVRDSCkpCisJCQkJY29udGludWU7CisJCQlvaWRfYXJyYXlfYXBwZW5kKCZ0b19mZXRjaCwgJmNlLT5vaWQpOworCQl9CisJCWlmICh0b19mZXRjaC5ucikKKwkJCXByb21pc29yX3JlbW90ZV9nZXRfZGlyZWN0KHRoZV9yZXBvc2l0b3J5LAorCQkJCQkJICAgdG9fZmV0Y2gub2lkLCB0b19mZXRjaC5ucik7CisJCW9pZF9hcnJheV9jbGVhcigmdG9fZmV0Y2gpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtpXTsKKworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKSB7CisJCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfV1RfUkVNT1ZFKQorCQkJCUJVRygiYm90aCB1cGRhdGUgYW5kIGRlbGV0ZSBmbGFncyBhcmUgc2V0IG9uICVzIiwKKwkJCQkgICAgY2UtPm5hbWUpOworCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytjbnQpOworCQkJY2UtPmNlX2ZsYWdzICY9IH5DRV9VUERBVEU7CisJCQllcnJzIHw9IGNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUsIE5VTEwsIE5VTEwpOworCQl9CisJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwllcnJzIHw9IGZpbmlzaF9kZWxheWVkX2NoZWNrb3V0KCZzdGF0ZSwgTlVMTCk7CisJZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihHSVRfQVRUUl9DSEVDS0lOKTsKKworCWlmIChvLT5jbG9uZSkKKwkJcmVwb3J0X2NvbGxpZGVkX2NoZWNrb3V0KGluZGV4KTsKKworCXRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKCJjaGVja191cGRhdGVzIik7CisJcmV0dXJuIGVycnMgIT0gMDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50X3NwYXJzZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCWVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzLAorCQkJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CisKK3N0YXRpYyBpbnQgYXBwbHlfc3BhcnNlX2NoZWNrb3V0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHdhc19za2lwX3dvcmt0cmVlID0gY2Vfc2tpcF93b3JrdHJlZShjZSk7CisKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTkVXX1NLSVBfV09SS1RSRUUpCisJCWNlLT5jZV9mbGFncyB8PSBDRV9TS0lQX1dPUktUUkVFOworCWVsc2UKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9TS0lQX1dPUktUUkVFOworCWlmICh3YXNfc2tpcF93b3JrdHJlZSAhPSBjZV9za2lwX3dvcmt0cmVlKGNlKSkgeworCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFX0lOX0JBU0U7CisJCW1hcmtfZnNtb25pdG9yX2ludmFsaWQoaXN0YXRlLCBjZSk7CisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBDRV9FTlRSWV9DSEFOR0VEOworCX0KKworCS8qCisJICogaWYgKCF3YXNfc2tpcF93b3JrdHJlZSAmJiAhY2Vfc2tpcF93b3JrdHJlZSgpKSB7CisJICoJVGhpcyBpcyBwZXJmZWN0bHkgbm9ybWFsLiBNb3ZlIG9uOworCSAqIH0KKwkgKi8KKworCS8qCisJICogTWVyZ2Ugc3RyYXRlZ2llcyBtYXkgc2V0IENFX1VQREFURXxDRV9SRU1PVkUgb3V0c2lkZSBjaGVja291dAorCSAqIGFyZWEgYXMgYSByZXN1bHQgb2YgY2Vfc2tpcF93b3JrdHJlZSgpIHNob3J0Y3V0cyBpbgorCSAqIHZlcmlmeV9hYnNlbnQoKSBhbmQgdmVyaWZ5X3VwdG9kYXRlKCkuCisJICogTWFrZSBzdXJlIHRoZXkgZG9uJ3QgbW9kaWZ5IHdvcmt0cmVlIGlmIHRoZXkgYXJlIGFscmVhZHkKKwkgKiBvdXRzaWRlIGNoZWNrb3V0IGFyZWEKKwkgKi8KKwlpZiAod2FzX3NraXBfd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9VUERBVEU7CisKKwkJLyoKKwkJICogQnkgZGVmYXVsdCwgd2hlbiBDRV9SRU1PVkUgaXMgb24sIENFX1dUX1JFTU9WRSBpcyBhbHNvCisJCSAqIG9uIHRvIGdldCB0aGF0IGZpbGUgcmVtb3ZlZCBmcm9tIGJvdGggaW5kZXggYW5kIHdvcmt0cmVlLgorCQkgKiBJZiB0aGF0IGZpbGUgaXMgYWxyZWFkeSBvdXRzaWRlIHdvcmt0cmVlIGFyZWEsIGRvbid0CisJCSAqIGJvdGhlciByZW1vdmUgaXQuCisJCSAqLworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQkJY2UtPmNlX2ZsYWdzICY9IH5DRV9XVF9SRU1PVkU7CisJfQorCisJaWYgKCF3YXNfc2tpcF93b3JrdHJlZSAmJiBjZV9za2lwX3dvcmt0cmVlKGNlKSkgeworCQkvKgorCQkgKiBJZiBDRV9VUERBVEUgaXMgc2V0LCB2ZXJpZnlfdXB0b2RhdGUoKSBtdXN0IGJlIGNhbGxlZCBhbHJlYWR5CisJCSAqIGFsc28gc3RhdCBpbmZvIG1heSBoYXZlIGxvc3QgYWZ0ZXIgbWVyZ2VkX2VudHJ5KCkgc28gY2FsbGluZworCQkgKiB2ZXJpZnlfdXB0b2RhdGUoKSBhZ2FpbiBtYXkgZmFpbAorCQkgKi8KKwkJaWYgKCEoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKSAmJiB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKGNlLCBvKSkKKwkJCXJldHVybiAtMTsKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1dUX1JFTU9WRTsKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9VUERBVEU7CisJfQorCWlmICh3YXNfc2tpcF93b3JrdHJlZSAmJiAhY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJaWYgKHZlcmlmeV9hYnNlbnRfc3BhcnNlKGNlLCBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTiwgbykpCisJCQlyZXR1cm4gLTE7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9VUERBVEU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjYWxsX3VucGFja19mbihjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHJldCA9IG8tPmZuKHNyYywgbyk7CisJaWYgKHJldCA+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+Y2VfZmxhZ3MgJiBzZWxlY3RfZmxhZykpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNlX3N0YWdlKGNlKSAmJiAhKGNlLT5jZV9mbGFncyAmIENFX0NPTkZMSUNURUQpKQorCQkJY2UtPmNlX2ZsYWdzIHw9IHNraXBfd3RfZmxhZzsKKwkJZWxzZQorCQkJY2UtPmNlX2ZsYWdzICY9IH5za2lwX3d0X2ZsYWc7CisJfQorCisJLyoKKwkgKiAyLiBXaWRlbiB3b3JrdHJlZSBhY2NvcmRpbmcgdG8gc3BhcnNlLWNoZWNrb3V0IGZpbGUuCisJICogTWF0Y2hlZCBlbnRyaWVzIHdpbGwgaGF2ZSBza2lwX3d0X2ZsYWcgY2xlYXJlZCAoaS5lLiAiaW4iKQorCSAqLworCWNsZWFyX2NlX2ZsYWdzKGlzdGF0ZSwgc2VsZWN0X2ZsYWcsIHNraXBfd3RfZmxhZywgcGwsIHNob3dfcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9hYnNlbnQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICosCisJCQkgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMsCisJCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICopOworLyoKKyAqIE4td2F5IG1lcmdlICJsZW4iIHRyZWVzLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgdG8gbWFuaXB1bGF0ZSB0aGUKKyAqIHJlc3VsdGluZyBpbmRleCwgLTIgb24gZmFpbHVyZSB0byByZWZsZWN0IHRoZSBjaGFuZ2VzIHRvIHRoZSB3b3JrIHRyZWUuCisgKgorICogQ0VfQURERUQsIENFX1VOUEFDS0VEIGFuZCBDRV9ORVdfU0tJUF9XT1JLVFJFRSBhcmUgdXNlZCBpbnRlcm5hbGx5CisgKi8KK2ludCB1bnBhY2tfdHJlZXModW5zaWduZWQgbGVuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IGksIHJldDsKKwlzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpkZmM7CisJc3RydWN0IHBhdHRlcm5fbGlzdCBwbDsKKworCWlmIChsZW4gPiBNQVhfVU5QQUNLX1RSRUVTKQorCQlkaWUoInVucGFja190cmVlcyB0YWtlcyBhdCBtb3N0ICVkIHRyZWVzIiwgTUFYX1VOUEFDS19UUkVFUyk7CisKKwl0cmFjZV9wZXJmb3JtYW5jZV9lbnRlcigpOworCW1lbXNldCgmcGwsIDAsIHNpemVvZihwbCkpOworCWlmICghY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgfHwgIW8tPnVwZGF0ZSkKKwkJby0+c2tpcF9zcGFyc2VfY2hlY2tvdXQgPSAxOworCWlmICghby0+c2tpcF9zcGFyc2VfY2hlY2tvdXQgJiYgIW8tPnBsKSB7CisJCWNoYXIgKnNwYXJzZSA9IGdpdF9wYXRoZHVwKCJpbmZvL3NwYXJzZS1jaGVja291dCIpOworCQlwbC51c2VfY29uZV9wYXR0ZXJucyA9IGNvcmVfc3BhcnNlX2NoZWNrb3V0X2NvbmU7CisJCWlmIChhZGRfcGF0dGVybnNfZnJvbV9maWxlX3RvX2xpc3Qoc3BhcnNlLCAiIiwgMCwgJnBsLCBOVUxMKSA8IDApCisJCQlvLT5za2lwX3NwYXJzZV9jaGVja291dCA9IDE7CisJCWVsc2UKKwkJCW8tPnBsID0gJnBsOworCQlmcmVlKHNwYXJzZSk7CisJfQorCisJbWVtc2V0KCZvLT5yZXN1bHQsIDAsIHNpemVvZihvLT5yZXN1bHQpKTsKKwlvLT5yZXN1bHQuaW5pdGlhbGl6ZWQgPSAxOworCW8tPnJlc3VsdC50aW1lc3RhbXAuc2VjID0gby0+c3JjX2luZGV4LT50aW1lc3RhbXAuc2VjOworCW8tPnJlc3VsdC50aW1lc3RhbXAubnNlYyA9IG8tPnNyY19pbmRleC0+dGltZXN0YW1wLm5zZWM7CisJby0+cmVzdWx0LnZlcnNpb24gPSBvLT5zcmNfaW5kZXgtPnZlcnNpb247CisJaWYgKCFvLT5zcmNfaW5kZXgtPnNwbGl0X2luZGV4KSB7CisJCW8tPnJlc3VsdC5zcGxpdF9pbmRleCA9IE5VTEw7CisJfSBlbHNlIGlmIChvLT5zcmNfaW5kZXggPT0gby0+ZHN0X2luZGV4KSB7CisJCS8qCisJCSAqIG8tPmRzdF9pbmRleCAoYW5kIHRodXMgby0+c3JjX2luZGV4KSB3aWxsIGJlIGRpc2NhcmRlZAorCQkgKiBhbmQgb3ZlcndyaXR0ZW4gd2l0aCBvLT5yZXN1bHQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLAorCQkgKiBzbyBqdXN0IHVzZSBzcmNfaW5kZXgncyBzcGxpdF9pbmRleCB0byBhdm9pZCBoYXZpbmcgdG8KKwkJICogY3JlYXRlIGEgbmV3IG9uZS4KKwkJICovCisJCW8tPnJlc3VsdC5zcGxpdF9pbmRleCA9IG8tPnNyY19pbmRleC0+c3BsaXRfaW5kZXg7CisJCW8tPnJlc3VsdC5zcGxpdF9pbmRleC0+cmVmY291bnQrKzsKKwl9IGVsc2UgeworCQlvLT5yZXN1bHQuc3BsaXRfaW5kZXggPSBpbml0X3NwbGl0X2luZGV4KCZvLT5yZXN1bHQpOworCX0KKwlvaWRjcHkoJm8tPnJlc3VsdC5vaWQsICZvLT5zcmNfaW5kZXgtPm9pZCk7CisJby0+bWVyZ2Vfc2l6ZSA9IGxlbjsKKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKKworCWlmIChvLT5zcmNfaW5kZXgtPmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSkKKwkJby0+cmVzdWx0LmZzbW9uaXRvcl9sYXN0X3VwZGF0ZSA9IG8tPnNyY19pbmRleC0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlOworCisJLyoKKwkgKiBTcGFyc2UgY2hlY2tvdXQgbG9vcCAjMTogc2V0IE5FV19TS0lQX1dPUktUUkVFIG9uIGV4aXN0aW5nIGVudHJpZXMKKwkgKi8KKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0KQorCQltYXJrX25ld19za2lwX3dvcmt0cmVlKG8tPnBsLCBvLT5zcmNfaW5kZXgsIDAsCisJCQkJICAgICAgIENFX05FV19TS0lQX1dPUktUUkVFLCBvLT52ZXJib3NlX3VwZGF0ZSk7CisKKwlpZiAoIWRmYykKKwkJZGZjID0geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKDApKTsKKwlvLT5kZl9jb25mbGljdF9lbnRyeSA9IGRmYzsKKworCWlmIChsZW4pIHsKKwkJY29uc3QgY2hhciAqcHJlZml4ID0gby0+cHJlZml4ID8gby0+cHJlZml4IDogIiI7CisJCXN0cnVjdCB0cmF2ZXJzZV9pbmZvIGluZm87CisKKwkJc2V0dXBfdHJhdmVyc2VfaW5mbygmaW5mbywgcHJlZml4KTsKKwkJaW5mby5mbiA9IHVucGFja19jYWxsYmFjazsKKwkJaW5mby5kYXRhID0gbzsKKwkJaW5mby5zaG93X2FsbF9lcnJvcnMgPSBvLT5zaG93X2FsbF9lcnJvcnM7CisJCWluZm8ucGF0aHNwZWMgPSBvLT5wYXRoc3BlYzsKKworCQlpZiAoby0+cHJlZml4KSB7CisJCQkvKgorCQkJICogVW5wYWNrIGV4aXN0aW5nIGluZGV4IGVudHJpZXMgdGhhdCBzb3J0IGJlZm9yZSB0aGUKKwkJCSAqIHByZWZpeCB0aGUgdHJlZSBpcyBzcGxpY2VkIGludG8uICBOb3RlIHRoYXQgby0+bWVyZ2UKKwkJCSAqIGlzIGFsd2F5cyB0cnVlIGluIHRoaXMgY2FzZS4KKwkJCSAqLworCQkJd2hpbGUgKDEpIHsKKwkJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gbmV4dF9jYWNoZV9lbnRyeShvKTsKKwkJCQlpZiAoIWNlKQorCQkJCQlicmVhazsKKwkJCQlpZiAoY2VfaW5fdHJhdmVyc2VfcGF0aChjZSwgJmluZm8pKQorCQkJCQlicmVhazsKKwkJCQlpZiAodW5wYWNrX2luZGV4X2VudHJ5KGNlLCBvKSA8IDApCisJCQkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwkJCX0KKwkJfQorCisJCXRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKCk7CisJCXJldCA9IHRyYXZlcnNlX3RyZWVzKG8tPnNyY19pbmRleCwgbGVuLCB0LCAmaW5mbyk7CisJCXRyYWNlX3BlcmZvcm1hbmNlX2xlYXZlKCJ0cmF2ZXJzZV90cmVlcyIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwl9CisKKwkvKiBBbnkgbGVmdC1vdmVyIGVudHJpZXMgaW4gdGhlIGluZGV4PyAqLworCWlmIChvLT5tZXJnZSkgeworCQl3aGlsZSAoMSkgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG5leHRfY2FjaGVfZW50cnkobyk7CisJCQlpZiAoIWNlKQorCQkJCWJyZWFrOworCQkJaWYgKHVucGFja19pbmRleF9lbnRyeShjZSwgbykgPCAwKQorCQkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwkJfQorCX0KKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKKworCWlmIChvLT50cml2aWFsX21lcmdlc19vbmx5ICYmIG8tPm5vbnRyaXZpYWxfbWVyZ2UpIHsKKwkJcmV0ID0gdW5wYWNrX2ZhaWxlZChvLCAiTWVyZ2UgcmVxdWlyZXMgZmlsZS1sZXZlbCBtZXJnaW5nIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0KSB7CisJCWludCBlbXB0eV93b3JrdHJlZSA9IDE7CisKKwkJLyoKKwkJICogU3BhcnNlIGNoZWNrb3V0IGxvb3AgIzI6IHNldCBORVdfU0tJUF9XT1JLVFJFRSBvbiBlbnRyaWVzIG5vdCBpbiBsb29wICMxCisJCSAqIElmIHRoZSB3aWxsIGhhdmUgTkVXX1NLSVBfV09SS1RSRUUsIGFsc28gc2V0IENFX1NLSVBfV09SS1RSRUUKKwkJICogc28gYXBwbHlfc3BhcnNlX2NoZWNrb3V0KCkgd29uJ3QgYXR0ZW1wdCB0byByZW1vdmUgaXQgZnJvbSB3b3JrdHJlZQorCQkgKi8KKwkJbWFya19uZXdfc2tpcF93b3JrdHJlZShvLT5wbCwgJm8tPnJlc3VsdCwKKwkJCQkgICAgICAgQ0VfQURERUQsIENFX1NLSVBfV09SS1RSRUUgfCBDRV9ORVdfU0tJUF9XT1JLVFJFRSwKKwkJCQkgICAgICAgby0+dmVyYm9zZV91cGRhdGUpOworCisJCXJldCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBvLT5yZXN1bHQuY2FjaGVfbnI7IGkrKykgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG8tPnJlc3VsdC5jYWNoZVtpXTsKKworCQkJLyoKKwkJCSAqIEVudHJpZXMgbWFya2VkIHdpdGggQ0VfQURERUQgaW4gbWVyZ2VkX2VudHJ5KCkgZG8gbm90IGhhdmUKKwkJCSAqIHZlcmlmeV9hYnNlbnQoKSBjaGVjayAodGhlIGNoZWNrIGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVkCisJCQkgKiBiZWNhdXNlIENFX05FV19TS0lQX1dPUktUUkVFIGlzIHNldCB1bmNvbmRpdGlvbmFsbHkpLgorCQkJICoKKwkJCSAqIERvIHRoZSByZWFsIGNoZWNrIG5vdyBiZWNhdXNlIHdlIGhhdmUgaGFkCisJCQkgKiBjb3JyZWN0IENFX05FV19TS0lQX1dPUktUUkVFCisJCQkgKi8KKwkJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9BRERFRCAmJgorCQkJICAgIHZlcmlmeV9hYnNlbnQoY2UsIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX09WRVJXUklUVEVOLCBvKSkgeworCQkJCWlmICghby0+c2hvd19hbGxfZXJyb3JzKQorCQkJCQlnb3RvIHJldHVybl9mYWlsZWQ7CisJCQkJcmV0ID0gLTE7CisJCQl9CisKKwkJCWlmIChhcHBseV9zcGFyc2VfY2hlY2tvdXQoJm8tPnJlc3VsdCwgY2UsIG8pKSB7CisJCQkJaWYgKCFvLT5zaG93X2FsbF9lcnJvcnMpCisJCQkJCWdvdG8gcmV0dXJuX2ZhaWxlZDsKKwkJCQlyZXQgPSAtMTsKKwkJCX0KKwkJCWlmICghY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQkJZW1wdHlfd29ya3RyZWUgPSAwOworCisJCX0KKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHJldHVybl9mYWlsZWQ7CisJCS8qCisJCSAqIFNwYXJzZSBjaGVja291dCBpcyBtZWFudCB0byBuYXJyb3cgZG93biBjaGVja291dCBhcmVhCisJCSAqIGJ1dCBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIG5hcnJvdyBkb3duIHRvIGVtcHR5IHdvcmtpbmcKKwkJICogdHJlZS4gVGhpcyBpcyB1c3VhbGx5IGEgbWlzdGFrZSBpbiBzcGFyc2UgY2hlY2tvdXQgcnVsZXMuCisJCSAqIERvIG5vdCBhbGxvdyB1c2VycyB0byBkbyB0aGF0LgorCQkgKi8KKwkJaWYgKG8tPnJlc3VsdC5jYWNoZV9uciAmJiBlbXB0eV93b3JrdHJlZSkgeworCQkJcmV0ID0gdW5wYWNrX2ZhaWxlZChvLCAiU3BhcnNlIGNoZWNrb3V0IGxlYXZlcyBubyBlbnRyeSBvbiB3b3JraW5nIGRpcmVjdG9yeSIpOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJcmV0ID0gY2hlY2tfdXBkYXRlcyhvKSA/ICgtMikgOiAwOworCWlmIChvLT5kc3RfaW5kZXgpIHsKKwkJbW92ZV9pbmRleF9leHRlbnNpb25zKCZvLT5yZXN1bHQsIG8tPnNyY19pbmRleCk7CisJCWlmICghcmV0KSB7CisJCQlpZiAoZ2l0X2Vudl9ib29sKCJHSVRfVEVTVF9DSEVDS19DQUNIRV9UUkVFIiwgMCkpCisJCQkJY2FjaGVfdHJlZV92ZXJpZnkodGhlX3JlcG9zaXRvcnksICZvLT5yZXN1bHQpOworCQkJaWYgKCFvLT5yZXN1bHQuY2FjaGVfdHJlZSkKKwkJCQlvLT5yZXN1bHQuY2FjaGVfdHJlZSA9IGNhY2hlX3RyZWUoKTsKKwkJCWlmICghY2FjaGVfdHJlZV9mdWxseV92YWxpZChvLT5yZXN1bHQuY2FjaGVfdHJlZSkpCisJCQkJY2FjaGVfdHJlZV91cGRhdGUoJm8tPnJlc3VsdCwKKwkJCQkJCSAgV1JJVEVfVFJFRV9TSUxFTlQgfAorCQkJCQkJICBXUklURV9UUkVFX1JFUEFJUik7CisJCX0KKworCQlvLT5yZXN1bHQudXBkYXRlZF93b3JrZGlyID0gMTsKKwkJZGlzY2FyZF9pbmRleChvLT5kc3RfaW5kZXgpOworCQkqby0+ZHN0X2luZGV4ID0gby0+cmVzdWx0OworCX0gZWxzZSB7CisJCWRpc2NhcmRfaW5kZXgoJm8tPnJlc3VsdCk7CisJfQorCW8tPnNyY19pbmRleCA9IE5VTEw7CisKK2RvbmU6CisJdHJhY2VfcGVyZm9ybWFuY2VfbGVhdmUoInVucGFja190cmVlcyIpOworCWlmICghby0+a2VlcF9wYXR0ZXJuX2xpc3QpCisJCWNsZWFyX3BhdHRlcm5fbGlzdCgmcGwpOworCXJldHVybiByZXQ7CisKK3JldHVybl9mYWlsZWQ6CisJaWYgKG8tPnNob3dfYWxsX2Vycm9ycykKKwkJZGlzcGxheV9lcnJvcl9tc2dzKG8pOworCW1hcmtfYWxsX2NlX3VudXNlZChvLT5zcmNfaW5kZXgpOworCXJldCA9IHVucGFja19mYWlsZWQobywgTlVMTCk7CisJaWYgKG8tPmV4aXRpbmdfZWFybHkpCisJCXJldCA9IDA7CisJZ290byBkb25lOworfQorCisvKiBIZXJlIGNvbWUgdGhlIG1lcmdlIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW50IHJlamVjdF9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9XT1VMRF9PVkVSV1JJVEUsIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCBzYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpiKQoreworCWlmICghIWEgIT0gISFiKQorCQlyZXR1cm4gMDsKKwlpZiAoIWEgJiYgIWIpCisJCXJldHVybiAxOworCWlmICgoYS0+Y2VfZmxhZ3MgfCBiLT5jZV9mbGFncykgJiBDRV9DT05GTElDVEVEKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYS0+Y2VfbW9kZSA9PSBiLT5jZV9tb2RlICYmCisJICAgICAgIG9pZGVxKCZhLT5vaWQsICZiLT5vaWQpOworfQorCisKKy8qCisgKiBXaGVuIGEgQ0UgZ2V0cyB0dXJuZWQgaW50byBhbiB1bm1lcmdlZCBlbnRyeSwgd2UKKyAqIHdhbnQgaXQgdG8gYmUgdXAtdG8tZGF0ZQorICovCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV8xKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKKwkJCSAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChvLT5pbmRleF9vbmx5KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ0VfVkFMSUQgYW5kIENFX1NLSVBfV09SS1RSRUUgY2hlYXQsIHdlIGJldHRlciBjaGVjayBhZ2FpbgorCSAqIGlmIHRoaXMgZW50cnkgaXMgdHJ1bHkgdXAtdG8tZGF0ZSBiZWNhdXNlIHRoaXMgZmlsZSBtYXkgYmUKKwkgKiBvdmVyd3JpdHRlbi4KKwkgKi8KKwlpZiAoKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fCBjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJOyAvKiBrZWVwIGNoZWNraW5nICovCisJZWxzZSBpZiAoby0+cmVzZXQgfHwgY2VfdXB0b2RhdGUoY2UpKQorCQlyZXR1cm4gMDsKKworCWlmICghbHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKKwkJaW50IGZsYWdzID0gQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEfENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFOworCQl1bnNpZ25lZCBjaGFuZ2VkID0gaWVfbWF0Y2hfc3RhdChvLT5zcmNfaW5kZXgsIGNlLCAmc3QsIGZsYWdzKTsKKworCQlpZiAoc3VibW9kdWxlX2Zyb21fY2UoY2UpKSB7CisJCQlpbnQgciA9IGNoZWNrX3N1Ym1vZHVsZV9tb3ZlX2hlYWQoY2UsCisJCQkJIkhFQUQiLCBvaWRfdG9faGV4KCZjZS0+b2lkKSwgbyk7CisJCQlpZiAocikKKwkJCQlyZXR1cm4gYWRkX3JlamVjdGVkX3BhdGgobywgZXJyb3JfdHlwZSwgY2UtPm5hbWUpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoIWNoYW5nZWQpCisJCQlyZXR1cm4gMDsKKwkJLyoKKwkJICogSGlzdG9yaWMgZGVmYXVsdCBwb2xpY3kgd2FzIHRvIGFsbG93IHN1Ym1vZHVsZSB0byBiZSBvdXQKKwkJICogb2Ygc3luYyB3cnQgdGhlIHN1cGVycHJvamVjdCBpbmRleC4gSWYgdGhlIHN1Ym1vZHVsZSB3YXMKKwkJICogbm90IGNvbnNpZGVyZWQgaW50ZXJlc3RpbmcgYWJvdmUsIHdlIGRvbid0IGNhcmUgaGVyZS4KKwkJICovCisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gMDsKKworCQllcnJubyA9IDA7CisJfQorCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAwOworCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBlcnJvcl90eXBlLCBjZS0+bmFtZSk7Cit9CisKK2ludCB2ZXJpZnlfdXB0b2RhdGUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9ORVdfU0tJUF9XT1JLVFJFRSkpCisJCXJldHVybiAwOworCXJldHVybiB2ZXJpZnlfdXB0b2RhdGVfMShjZSwgbywgRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEUpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV9zcGFyc2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlyZXR1cm4gdmVyaWZ5X3VwdG9kYXRlXzEoY2UsIG8sIEVSUk9SX1NQQVJTRV9OT1RfVVBUT0RBVEVfRklMRSk7Cit9CisKKy8qCisgKiBUT0RPOiBXZSBzaG91bGQgYWN0dWFsbHkgaW52YWxpZGF0ZSBvLT5yZXN1bHQsIG5vdCBzcmNfaW5kZXggWzFdLgorICogQnV0IHNpbmNlIGNhY2hlIHRyZWUgYW5kIHVudHJhY2tlZCBjYWNoZSBib3RoIGFyZSBub3QgY29waWVkIHRvCisgKiBvLT5yZXN1bHQgdW50aWwgdW5wYWNraW5nIGlzIGNvbXBsZXRlLCB3ZSBpbnZhbGlkYXRlIHRoZW0gb24KKyAqIHNyY19pbmRleCBpbnN0ZWFkIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGV5IHdpbGwgYmUgY29waWVkIHRvCisgKiBkc3RfaW5kZXggYXQgdGhlIGVuZC4KKyAqCisgKiBbMV0gc3JjX2luZGV4LT5jYWNoZV90cmVlIGlzIGFsc28gdXNlZCBpbiB1bnBhY2tfY2FsbGJhY2soKSBzbyBpZgorICogd2UgaW52YWxpZGF0ZSBvLT5yZXN1bHQsIHdlIG5lZWQgdG8gdXBkYXRlIGl0IHRvIHVzZQorICogby0+cmVzdWx0LmNhY2hlX3RyZWUgYXMgd2VsbC4KKyAqLworc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9jZV9wYXRoKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWlmICghY2UpCisJCXJldHVybjsKKwljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChvLT5zcmNfaW5kZXgsIGNlLT5uYW1lKTsKKwl1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKG8tPnNyY19pbmRleCwgY2UtPm5hbWUsIDEpOworfQorCisvKgorICogQ2hlY2sgdGhhdCBjaGVja2luZyBvdXQgY2UtPnNoYTEgaW4gc3ViZGlyIGNlLT5uYW1lIGlzIG5vdAorICogZ29pbmcgdG8gb3ZlcndyaXRlIGFueSB3b3JraW5nIGZpbGVzLgorICoKKyAqIEN1cnJlbnRseSwgZ2l0IGRvZXMgbm90IGNoZWNrb3V0IHN1YnByb2plY3RzIGR1cmluZyBhIHN1cGVycHJvamVjdAorICogY2hlY2tvdXQsIHNvIGl0IGlzIG5vdCBnb2luZyB0byBvdmVyd3JpdGUgYW55dGhpbmcuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2NsZWFuX3N1Ym1vZHVsZShjb25zdCBjaGFyICpvbGRfc2hhMSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaWYgKCFzdWJtb2R1bGVfZnJvbV9jZShjZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNoZWNrX3N1Ym1vZHVsZV9tb3ZlX2hlYWQoY2UsIG9sZF9zaGExLAorCQkJCQkgb2lkX3RvX2hleCgmY2UtPm9pZCksIG8pOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9jbGVhbl9zdWJkaXJlY3RvcnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwkvKgorCSAqIHdlIGFyZSBhYm91dCB0byBleHRyYWN0ICJjZS0+bmFtZSI7IHdlIHdvdWxkIG5vdCB3YW50IHRvIGxvc2UKKwkgKiBhbnl0aGluZyBpbiB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5IHRoZXJlLgorCSAqLworCWludCBuYW1lbGVuOworCWludCBpOworCXN0cnVjdCBkaXJfc3RydWN0IGQ7CisJY2hhciAqcGF0aGJ1ZjsKKwlpbnQgY250ID0gMDsKKworCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJCWludCBzdWJfaGVhZCA9IHJlc29sdmVfZ2l0bGlua19yZWYoY2UtPm5hbWUsICJIRUFEIiwgJm9pZCk7CisJCS8qCisJCSAqIElmIHdlIGFyZSBub3QgZ29pbmcgdG8gdXBkYXRlIHRoZSBzdWJtb2R1bGUsIHRoZW4KKwkJICogd2UgZG9uJ3QgY2FyZS4KKwkJICovCisJCWlmICghc3ViX2hlYWQgJiYgb2lkZXEoJm9pZCwgJmNlLT5vaWQpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiB2ZXJpZnlfY2xlYW5fc3VibW9kdWxlKHN1Yl9oZWFkID8gTlVMTCA6IG9pZF90b19oZXgoJm9pZCksCisJCQkJCSAgICAgIGNlLCBvKTsKKwl9CisKKwkvKgorCSAqIEZpcnN0IGxldCdzIG1ha2Ugc3VyZSB3ZSBkbyBub3QgaGF2ZSBhIGxvY2FsIG1vZGlmaWNhdGlvbgorCSAqIGluIHRoYXQgZGlyZWN0b3J5LgorCSAqLworCW5hbWVsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwlmb3IgKGkgPSBsb2NhdGVfaW5fc3JjX2luZGV4KGNlLCBvKTsKKwkgICAgIGkgPCBvLT5zcmNfaW5kZXgtPmNhY2hlX25yOworCSAgICAgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UyID0gby0+c3JjX2luZGV4LT5jYWNoZVtpXTsKKwkJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UyKTsKKwkJaWYgKGxlbiA8IG5hbWVsZW4gfHwKKwkJICAgIHN0cm5jbXAoY2UtPm5hbWUsIGNlMi0+bmFtZSwgbmFtZWxlbikgfHwKKwkJICAgIGNlMi0+bmFtZVtuYW1lbGVuXSAhPSAnLycpCisJCQlicmVhazsKKwkJLyoKKwkJICogY2UyLT5uYW1lIGlzIGFuIGVudHJ5IGluIHRoZSBzdWJkaXJlY3RvcnkgdG8gYmUKKwkJICogcmVtb3ZlZC4KKwkJICovCisJCWlmICghY2Vfc3RhZ2UoY2UyKSkgeworCQkJaWYgKHZlcmlmeV91cHRvZGF0ZShjZTIsIG8pKQorCQkJCXJldHVybiAtMTsKKwkJCWFkZF9lbnRyeShvLCBjZTIsIENFX1JFTU9WRSwgMCk7CisJCQlpbnZhbGlkYXRlX2NlX3BhdGgoY2UsIG8pOworCQkJbWFya19jZV91c2VkKGNlMiwgbyk7CisJCX0KKwkJY250Kys7CisJfQorCisJLyoKKwkgKiBUaGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90IGxvc2UgYSBsb2NhbGx5CisJICogcHJlc2VudCBmaWxlIHRoYXQgaXMgbm90IGlnbm9yZWQuCisJICovCisJcGF0aGJ1ZiA9IHhzdHJmbXQoIiUuKnMvIiwgbmFtZWxlbiwgY2UtPm5hbWUpOworCisJbWVtc2V0KCZkLCAwLCBzaXplb2YoZCkpOworCWlmIChvLT5kaXIpCisJCWQuZXhjbHVkZV9wZXJfZGlyID0gby0+ZGlyLT5leGNsdWRlX3Blcl9kaXI7CisJaSA9IHJlYWRfZGlyZWN0b3J5KCZkLCBvLT5zcmNfaW5kZXgsIHBhdGhidWYsIG5hbWVsZW4rMSwgTlVMTCk7CisJaWYgKGkpCisJCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9OT1RfVVBUT0RBVEVfRElSLCBjZS0+bmFtZSk7CisJZnJlZShwYXRoYnVmKTsKKwlyZXR1cm4gY250OworfQorCisvKgorICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZXJlIHdhcyBubyBpbmRleCBlbnRyeSBmb3IgdGhlIHRyZWUgZW50cnkgJ2RzdCcsCisgKiBidXQgd2UgZm91bmQgYSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCAnbHN0YXQoKScgc2FpZCB3YXMgZmluZSwKKyAqIGFuZCB3ZSdyZSBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS4KKyAqCisgKiBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGluIHRoZSBpbmRleCB0aGF0IGFsc28KKyAqIG1hdGNoZXMgdGhlIHN0YXQgaW5mb3JtYXRpb24sIGFuZCBhc3N1bWUgaXQncyB0aGF0IG90aGVyIGZpbGUhCisgKi8KK3N0YXRpYyBpbnQgaWNhc2VfZXhpc3RzKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0KQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjOworCisJc3JjID0gaW5kZXhfZmlsZV9leGlzdHMoby0+c3JjX2luZGV4LCBuYW1lLCBsZW4sIDEpOworCXJldHVybiBzcmMgJiYgIWllX21hdGNoX3N0YXQoby0+c3JjX2luZGV4LCBzcmMsIHN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpOworfQorCitzdGF0aWMgaW50IGNoZWNrX29rX3RvX3JlbW92ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgZHR5cGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJCQkgICAgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVzdWx0OworCisJLyoKKwkgKiBJdCBtYXkgYmUgdGhhdCB0aGUgJ2xzdGF0KCknIHN1Y2NlZWRlZCBldmVuIHRob3VnaAorCSAqIHRhcmdldCAnY2UnIHdhcyBhYnNlbnQsIGJlY2F1c2UgdGhlcmUgaXMgYW4gb2xkCisJICogZW50cnkgdGhhdCBpcyBkaWZmZXJlbnQgb25seSBpbiBjYXNlLi4KKwkgKgorCSAqIElnbm9yZSB0aGF0IGxzdGF0KCkgaWYgaXQgbWF0Y2hlcy4KKwkgKi8KKwlpZiAoaWdub3JlX2Nhc2UgJiYgaWNhc2VfZXhpc3RzKG8sIG5hbWUsIGxlbiwgc3QpKQorCQlyZXR1cm4gMDsKKworCWlmIChvLT5kaXIgJiYKKwkgICAgaXNfZXhjbHVkZWQoby0+ZGlyLCBvLT5zcmNfaW5kZXgsIG5hbWUsICZkdHlwZSkpCisJCS8qCisJCSAqIGNlLT5uYW1lIGlzIGV4cGxpY2l0bHkgZXhjbHVkZWQsIHNvIGl0IGlzIE9rIHRvCisJCSAqIG92ZXJ3cml0ZSBpdC4KKwkJICovCisJCXJldHVybiAwOworCWlmIChTX0lTRElSKHN0LT5zdF9tb2RlKSkgeworCQkvKgorCQkgKiBXZSBhcmUgY2hlY2tpbmcgb3V0IHBhdGggImZvbyIgYW5kCisJCSAqIGZvdW5kICJmb28vLiIgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKwkJICogVGhpcyBpcyB0cmlja3kgLS0gaWYgd2UgaGF2ZSBtb2RpZmllZAorCQkgKiBmaWxlcyB0aGF0IGFyZSBpbiAiZm9vLyIgd2Ugd291bGQgbG9zZQorCQkgKiB0aGVtLgorCQkgKi8KKwkJaWYgKHZlcmlmeV9jbGVhbl9zdWJkaXJlY3RvcnkoY2UsIG8pIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBUaGUgcHJldmlvdXMgcm91bmQgbWF5IGFscmVhZHkgaGF2ZSBkZWNpZGVkIHRvCisJICogZGVsZXRlIHRoaXMgcGF0aCwgd2hpY2ggaXMgaW4gYSBzdWJkaXJlY3RvcnkgdGhhdAorCSAqIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBibG9iLgorCSAqLworCXJlc3VsdCA9IGluZGV4X2ZpbGVfZXhpc3RzKCZvLT5yZXN1bHQsIG5hbWUsIGxlbiwgMCk7CisJaWYgKHJlc3VsdCkgeworCQlpZiAocmVzdWx0LT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiBhZGRfcmVqZWN0ZWRfcGF0aChvLCBlcnJvcl90eXBlLCBuYW1lKTsKK30KKworLyoKKyAqIFdlIGRvIG5vdCB3YW50IHRvIHJlbW92ZSBvciBvdmVyd3JpdGUgYSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0CisgKiBpcyBub3QgdHJhY2tlZCwgdW5sZXNzIGl0IGlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudF8xKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCBsZW47CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoby0+aW5kZXhfb25seSB8fCBvLT5yZXNldCB8fCAhby0+dXBkYXRlKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGNoZWNrX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmIChsZW4gPiAwKSB7CisJCWNoYXIgKnBhdGg7CisJCWludCByZXQ7CisKKwkJcGF0aCA9IHhtZW1kdXB6KGNlLT5uYW1lLCBsZW4pOworCQlpZiAobHN0YXQocGF0aCwgJnN0KSkKKwkJCXJldCA9IGVycm9yX2Vycm5vKCJjYW5ub3Qgc3RhdCAnJXMnIiwgcGF0aCk7CisJCWVsc2UgeworCQkJaWYgKHN1Ym1vZHVsZV9mcm9tX2NlKGNlKSkKKwkJCQlyZXQgPSBjaGVja19zdWJtb2R1bGVfbW92ZV9oZWFkKGNlLAorCQkJCQkJCQlvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCQkJCQkJTlVMTCwgbyk7CisJCQllbHNlCisJCQkJcmV0ID0gY2hlY2tfb2tfdG9fcmVtb3ZlKHBhdGgsIGxlbiwgRFRfVU5LTk9XTiwgTlVMTCwKKwkJCQkJCQkgJnN0LCBlcnJvcl90eXBlLCBvKTsKKwkJfQorCQlmcmVlKHBhdGgpOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSBpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCXJldHVybiBlcnJvcl9lcnJubygiY2Fubm90IHN0YXQgJyVzJyIsIGNlLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKHN1Ym1vZHVsZV9mcm9tX2NlKGNlKSkKKwkJCXJldHVybiBjaGVja19zdWJtb2R1bGVfbW92ZV9oZWFkKGNlLCBvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCQkJCQkgTlVMTCwgbyk7CisKKwkJcmV0dXJuIGNoZWNrX29rX3RvX3JlbW92ZShjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksCisJCQkJCSAgY2VfdG9fZHR5cGUoY2UpLCBjZSwgJnN0LAorCQkJCQkgIGVycm9yX3R5cGUsIG8pOworCX0KK30KKworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKKwkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCAmJiAoY2UtPmNlX2ZsYWdzICYgQ0VfTkVXX1NLSVBfV09SS1RSRUUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdmVyaWZ5X2Fic2VudF8xKGNlLCBlcnJvcl90eXBlLCBvKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50X3NwYXJzZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCWVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIGVycm9yX3R5cGUsCisJCQkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzIG9ycGhhbmVkX2Vycm9yID0gZXJyb3JfdHlwZTsKKwlpZiAob3JwaGFuZWRfZXJyb3IgPT0gRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU4pCisJCW9ycGhhbmVkX2Vycm9yID0gRVJST1JfV09VTERfTE9TRV9PUlBIQU5FRF9PVkVSV1JJVFRFTjsKKworCXJldHVybiB2ZXJpZnlfYWJzZW50XzEoY2UsIG9ycGhhbmVkX2Vycm9yLCBvKTsKK30KKworc3RhdGljIGludCBtZXJnZWRfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkLAorCQkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCB1cGRhdGUgPSBDRV9VUERBVEU7CisJc3RydWN0IGNhY2hlX2VudHJ5ICptZXJnZSA9IGR1cF9jYWNoZV9lbnRyeShjZSwgJm8tPnJlc3VsdCk7CisKKwlpZiAoIW9sZCkgeworCQkvKgorCQkgKiBOZXcgaW5kZXggZW50cmllcy4gSW4gc3BhcnNlIGNoZWNrb3V0LCB0aGUgZm9sbG93aW5nCisJCSAqIHZlcmlmeV9hYnNlbnQoKSB3aWxsIGJlIGRlbGF5ZWQgdW50aWwgYWZ0ZXIKKwkJICogdHJhdmVyc2VfdHJlZXMoKSBmaW5pc2hlcyBpbiB1bnBhY2tfdHJlZXMoKSwgdGhlbjoKKwkJICoKKwkJICogIC0gQ0VfTkVXX1NLSVBfV09SS1RSRUUgd2lsbCBiZSBjb21wdXRlZCBjb3JyZWN0bHkKKwkJICogIC0gdmVyaWZ5X2Fic2VudCgpIGJlIGNhbGxlZCBhZ2FpbiwgdGhpcyB0aW1lIHdpdGgKKwkJICogICAgY29ycmVjdCBDRV9ORVdfU0tJUF9XT1JLVFJFRQorCQkgKgorCQkgKiB2ZXJpZnlfYWJzZW50KCkgY2FsbCBoZXJlIGRvZXMgbm90aGluZyBpbiBzcGFyc2UKKwkJICogY2hlY2tvdXQgKGkuZS4gby0+c2tpcF9zcGFyc2VfY2hlY2tvdXQgPT0gMCkKKwkJICovCisJCXVwZGF0ZSB8PSBDRV9BRERFRDsKKwkJbWVyZ2UtPmNlX2ZsYWdzIHw9IENFX05FV19TS0lQX1dPUktUUkVFOworCisJCWlmICh2ZXJpZnlfYWJzZW50KG1lcmdlLAorCQkJCSAgRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfT1ZFUldSSVRURU4sIG8pKSB7CisJCQlkaXNjYXJkX2NhY2hlX2VudHJ5KG1lcmdlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpbnZhbGlkYXRlX2NlX3BhdGgobWVyZ2UsIG8pOworCisJCWlmIChzdWJtb2R1bGVfZnJvbV9jZShjZSkpIHsKKwkJCWludCByZXQgPSBjaGVja19zdWJtb2R1bGVfbW92ZV9oZWFkKGNlLCBOVUxMLAorCQkJCQkJCSAgICBvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCQkJCQkgICAgbyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCX0gZWxzZSBpZiAoIShvbGQtPmNlX2ZsYWdzICYgQ0VfQ09ORkxJQ1RFRCkpIHsKKwkJLyoKKwkJICogU2VlIGlmIHdlIGNhbiByZS11c2UgdGhlIG9sZCBDRSBkaXJlY3RseT8KKwkJICogVGhhdCB3YXkgd2UgZ2V0IHRoZSB1cHRvZGF0ZSBzdGF0IGluZm8uCisJCSAqCisJCSAqIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBVUERBVEUgZmxhZyBvbiBhIG1hdGNoOyBvdGhlcndpc2UKKwkJICogd2Ugd2lsbCBlbmQgdXAgb3ZlcndyaXRpbmcgbG9jYWwgY2hhbmdlcyBpbiB0aGUgd29yayB0cmVlLgorCQkgKi8KKwkJaWYgKHNhbWUob2xkLCBtZXJnZSkpIHsKKwkJCWNvcHlfY2FjaGVfZW50cnkobWVyZ2UsIG9sZCk7CisJCQl1cGRhdGUgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKHZlcmlmeV91cHRvZGF0ZShvbGQsIG8pKSB7CisJCQkJZGlzY2FyZF9jYWNoZV9lbnRyeShtZXJnZSk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJLyogTWlncmF0ZSBvbGQgZmxhZ3Mgb3ZlciAqLworCQkJdXBkYXRlIHw9IG9sZC0+Y2VfZmxhZ3MgJiAoQ0VfU0tJUF9XT1JLVFJFRSB8IENFX05FV19TS0lQX1dPUktUUkVFKTsKKwkJCWludmFsaWRhdGVfY2VfcGF0aChvbGQsIG8pOworCQl9CisKKwkJaWYgKHN1Ym1vZHVsZV9mcm9tX2NlKGNlKSkgeworCQkJaW50IHJldCA9IGNoZWNrX3N1Ym1vZHVsZV9tb3ZlX2hlYWQoY2UsIG9pZF90b19oZXgoJm9sZC0+b2lkKSwKKwkJCQkJCQkgICAgb2lkX3RvX2hleCgmY2UtPm9pZCksCisJCQkJCQkJICAgIG8pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUHJldmlvdXNseSB1bm1lcmdlZCBlbnRyeSBsZWZ0IGFzIGFuIGV4aXN0ZW5jZQorCQkgKiBtYXJrZXIgYnkgcmVhZF9pbmRleF91bm1lcmdlZCgpOworCQkgKi8KKwkJaW52YWxpZGF0ZV9jZV9wYXRoKG9sZCwgbyk7CisJfQorCisJaWYgKGRvX2FkZF9lbnRyeShvLCBtZXJnZSwgdXBkYXRlLCBDRV9TVEFHRU1BU0spIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRlbGV0ZWRfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCwKKwkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJLyogRGlkIGl0IGV4aXN0IGluIHRoZSBpbmRleD8gKi8KKwlpZiAoIW9sZCkgeworCQlpZiAodmVyaWZ5X2Fic2VudChjZSwgRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfUkVNT1ZFRCwgbykpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAoIShvbGQtPmNlX2ZsYWdzICYgQ0VfQ09ORkxJQ1RFRCkgJiYgdmVyaWZ5X3VwdG9kYXRlKG9sZCwgbykpCisJCXJldHVybiAtMTsKKwlhZGRfZW50cnkobywgY2UsIENFX1JFTU9WRSwgMCk7CisJaW52YWxpZGF0ZV9jZV9wYXRoKGNlLCBvKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBrZWVwX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCSAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlhZGRfZW50cnkobywgY2UsIDAsIDApOworCWlmIChjZV9zdGFnZShjZSkpCisJCWludmFsaWRhdGVfY2VfcGF0aChjZSwgbyk7CisJcmV0dXJuIDE7Cit9CisKKyNpZiBEQlJUX0RFQlVHCitzdGF0aWMgdm9pZCBzaG93X3N0YWdlX2VudHJ5KEZJTEUgKm8sCisJCQkgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWlmICghY2UpCisJCWZwcmludGYobywgIiVzIChtaXNzaW5nKVxuIiwgbGFiZWwpOworCWVsc2UKKwkJZnByaW50ZihvLCAiJXMlMDZvICVzICVkXHQlc1xuIiwKKwkJCWxhYmVsLAorCQkJY2UtPmNlX21vZGUsCisJCQlvaWRfdG9faGV4KCZjZS0+b2lkKSwKKwkJCWNlX3N0YWdlKGNlKSwKKwkJCWNlLT5uYW1lKTsKK30KKyNlbmRpZgorCitpbnQgdGhyZWV3YXlfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnN0YWdlcywKKwkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqaW5kZXg7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpoZWFkOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVtb3RlID0gc3RhZ2VzW28tPmhlYWRfaWR4ICsgMV07CisJaW50IGNvdW50OworCWludCBoZWFkX21hdGNoID0gMDsKKwlpbnQgcmVtb3RlX21hdGNoID0gMDsKKworCWludCBkZl9jb25mbGljdF9oZWFkID0gMDsKKwlpbnQgZGZfY29uZmxpY3RfcmVtb3RlID0gMDsKKworCWludCBhbnlfYW5jX21pc3NpbmcgPSAwOworCWludCBub19hbmNfZXhpc3RzID0gMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBvLT5oZWFkX2lkeDsgaSsrKSB7CisJCWlmICghc3RhZ2VzW2ldIHx8IHN0YWdlc1tpXSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJCWFueV9hbmNfbWlzc2luZyA9IDE7CisJCWVsc2UKKwkJCW5vX2FuY19leGlzdHMgPSAwOworCX0KKworCWluZGV4ID0gc3RhZ2VzWzBdOworCWhlYWQgPSBzdGFnZXNbby0+aGVhZF9pZHhdOworCisJaWYgKGhlYWQgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJZGZfY29uZmxpY3RfaGVhZCA9IDE7CisJCWhlYWQgPSBOVUxMOworCX0KKworCWlmIChyZW1vdGUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJZGZfY29uZmxpY3RfcmVtb3RlID0gMTsKKwkJcmVtb3RlID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIEZpcnN0LCBpZiB0aGVyZSdzIGEgIzE2IHNpdHVhdGlvbiwgbm90ZSB0aGF0IHRvIHByZXZlbnQgIzEzCisJICogYW5kICMxNC4KKwkgKi8KKwlpZiAoIXNhbWUocmVtb3RlLCBoZWFkKSkgeworCQlmb3IgKGkgPSAxOyBpIDwgby0+aGVhZF9pZHg7IGkrKykgeworCQkJaWYgKHNhbWUoc3RhZ2VzW2ldLCBoZWFkKSkgeworCQkJCWhlYWRfbWF0Y2ggPSBpOworCQkJfQorCQkJaWYgKHNhbWUoc3RhZ2VzW2ldLCByZW1vdGUpKSB7CisJCQkJcmVtb3RlX21hdGNoID0gaTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogV2Ugc3RhcnQgd2l0aCBjYXNlcyB3aGVyZSB0aGUgaW5kZXggaXMgYWxsb3dlZCB0byBtYXRjaAorCSAqIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBoZWFkOiAjMTQoQUxUKSBhbmQgIzJBTFQsIHdoZXJlIGl0CisJICogaXMgcGVybWl0dGVkIHRvIG1hdGNoIHRoZSByZXN1bHQgaW5zdGVhZC4KKwkgKi8KKwkvKiAjMTQsICMxNEFMVCwgIzJBTFQgKi8KKwlpZiAocmVtb3RlICYmICFkZl9jb25mbGljdF9oZWFkICYmIGhlYWRfbWF0Y2ggJiYgIXJlbW90ZV9tYXRjaCkgeworCQlpZiAoaW5kZXggJiYgIXNhbWUoaW5kZXgsIHJlbW90ZSkgJiYgIXNhbWUoaW5kZXgsIGhlYWQpKQorCQkJcmV0dXJuIHJlamVjdF9tZXJnZShpbmRleCwgbyk7CisJCXJldHVybiBtZXJnZWRfZW50cnkocmVtb3RlLCBpbmRleCwgbyk7CisJfQorCS8qCisJICogSWYgd2UgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgaW5kZXggY2FjaGUsIHRoZW4gd2Ugd2FudCB0bworCSAqIG1ha2Ugc3VyZSB0aGF0IGl0IG1hdGNoZXMgaGVhZC4KKwkgKi8KKwlpZiAoaW5kZXggJiYgIXNhbWUoaW5kZXgsIGhlYWQpKQorCQlyZXR1cm4gcmVqZWN0X21lcmdlKGluZGV4LCBvKTsKKworCWlmIChoZWFkKSB7CisJCS8qICM1QUxULCAjMTUgKi8KKwkJaWYgKHNhbWUoaGVhZCwgcmVtb3RlKSkKKwkJCXJldHVybiBtZXJnZWRfZW50cnkoaGVhZCwgaW5kZXgsIG8pOworCQkvKiAjMTMsICMzQUxUICovCisJCWlmICghZGZfY29uZmxpY3RfcmVtb3RlICYmIHJlbW90ZV9tYXRjaCAmJiAhaGVhZF9tYXRjaCkKKwkJCXJldHVybiBtZXJnZWRfZW50cnkoaGVhZCwgaW5kZXgsIG8pOworCX0KKworCS8qICMxICovCisJaWYgKCFoZWFkICYmICFyZW1vdGUgJiYgYW55X2FuY19taXNzaW5nKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVW5kZXIgdGhlICJhZ2dyZXNzaXZlIiBydWxlLCB3ZSByZXNvbHZlIG1vc3RseSB0cml2aWFsCisJICogY2FzZXMgdGhhdCB3ZSBoaXN0b3JpY2FsbHkgaGFkIGdpdC1tZXJnZS1vbmUtZmlsZSByZXNvbHZlLgorCSAqLworCWlmIChvLT5hZ2dyZXNzaXZlKSB7CisJCWludCBoZWFkX2RlbGV0ZWQgPSAhaGVhZDsKKwkJaW50IHJlbW90ZV9kZWxldGVkID0gIXJlbW90ZTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IE5VTEw7CisKKwkJaWYgKGluZGV4KQorCQkJY2UgPSBpbmRleDsKKwkJZWxzZSBpZiAoaGVhZCkKKwkJCWNlID0gaGVhZDsKKwkJZWxzZSBpZiAocmVtb3RlKQorCQkJY2UgPSByZW1vdGU7CisJCWVsc2UgeworCQkJZm9yIChpID0gMTsgaSA8IG8tPmhlYWRfaWR4OyBpKyspIHsKKwkJCQlpZiAoc3RhZ2VzW2ldICYmIHN0YWdlc1tpXSAhPSBvLT5kZl9jb25mbGljdF9lbnRyeSkgeworCQkJCQljZSA9IHN0YWdlc1tpXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJICogRGVsZXRlZCBpbiBib3RoLgorCQkgKiBEZWxldGVkIGluIG9uZSBhbmQgdW5jaGFuZ2VkIGluIHRoZSBvdGhlci4KKwkJICovCisJCWlmICgoaGVhZF9kZWxldGVkICYmIHJlbW90ZV9kZWxldGVkKSB8fAorCQkgICAgKGhlYWRfZGVsZXRlZCAmJiByZW1vdGUgJiYgcmVtb3RlX21hdGNoKSB8fAorCQkgICAgKHJlbW90ZV9kZWxldGVkICYmIGhlYWQgJiYgaGVhZF9tYXRjaCkpIHsKKwkJCWlmIChpbmRleCkKKwkJCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShpbmRleCwgaW5kZXgsIG8pOworCQkJaWYgKGNlICYmICFoZWFkX2RlbGV0ZWQpIHsKKwkJCQlpZiAodmVyaWZ5X2Fic2VudChjZSwgRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfUkVNT1ZFRCwgbykpCisJCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJCS8qCisJCSAqIEFkZGVkIGluIGJvdGgsIGlkZW50aWNhbGx5LgorCQkgKi8KKwkJaWYgKG5vX2FuY19leGlzdHMgJiYgaGVhZCAmJiByZW1vdGUgJiYgc2FtZShoZWFkLCByZW1vdGUpKQorCQkJcmV0dXJuIG1lcmdlZF9lbnRyeShoZWFkLCBpbmRleCwgbyk7CisKKwl9CisKKwkvKiBCZWxvdyBhcmUgIm5vIG1lcmdlIiBjYXNlcywgd2hpY2ggcmVxdWlyZSB0aGF0IHRoZSBpbmRleCBiZQorCSAqIHVwLXRvLWRhdGUgdG8gYXZvaWQgdGhlIGZpbGVzIGdldHRpbmcgb3ZlcndyaXR0ZW4gd2l0aAorCSAqIGNvbmZsaWN0IHJlc29sdXRpb24gZmlsZXMuCisJICovCisJaWYgKGluZGV4KSB7CisJCWlmICh2ZXJpZnlfdXB0b2RhdGUoaW5kZXgsIG8pKQorCQkJcmV0dXJuIC0xOworCX0KKworCW8tPm5vbnRyaXZpYWxfbWVyZ2UgPSAxOworCisJLyogIzIsICMzLCAjNCwgIzYsICM3LCAjOSwgIzEwLCAjMTEuICovCisJY291bnQgPSAwOworCWlmICghaGVhZF9tYXRjaCB8fCAhcmVtb3RlX21hdGNoKSB7CisJCWZvciAoaSA9IDE7IGkgPCBvLT5oZWFkX2lkeDsgaSsrKSB7CisJCQlpZiAoc3RhZ2VzW2ldICYmIHN0YWdlc1tpXSAhPSBvLT5kZl9jb25mbGljdF9lbnRyeSkgeworCQkJCWtlZXBfZW50cnkoc3RhZ2VzW2ldLCBvKTsKKwkJCQljb3VudCsrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorI2lmIERCUlRfREVCVUcKKwllbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJyZWFkLXRyZWU6IHdhcm5pbmcgIzE2IGRldGVjdGVkXG4iKTsKKwkJc2hvd19zdGFnZV9lbnRyeShzdGRlcnIsICJoZWFkICAgIiwgc3RhZ2VzW2hlYWRfbWF0Y2hdKTsKKwkJc2hvd19zdGFnZV9lbnRyeShzdGRlcnIsICJyZW1vdGUgIiwgc3RhZ2VzW3JlbW90ZV9tYXRjaF0pOworCX0KKyNlbmRpZgorCWlmIChoZWFkKSB7IGNvdW50ICs9IGtlZXBfZW50cnkoaGVhZCwgbyk7IH0KKwlpZiAocmVtb3RlKSB7IGNvdW50ICs9IGtlZXBfZW50cnkocmVtb3RlLCBvKTsgfQorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIFR3by13YXkgbWVyZ2UuCisgKgorICogVGhlIHJ1bGUgaXMgdG8gImNhcnJ5IGZvcndhcmQiIHdoYXQgaXMgaW4gdGhlIGluZGV4IHdpdGhvdXQgbG9zaW5nCisgKiBpbmZvcm1hdGlvbiBhY3Jvc3MgYSAiZmFzdC1mb3J3YXJkIiwgZmF2b3JpbmcgYSBzdWNjZXNzZnVsIG1lcmdlCisgKiBvdmVyIGEgbWVyZ2UgZmFpbHVyZSB3aGVuIGl0IG1ha2VzIHNlbnNlLiAgRm9yIGRldGFpbHMgb2YgdGhlCisgKiAiY2FycnkgZm9yd2FyZCIgcnVsZSwgcGxlYXNlIHNlZSA8RG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dD4uCisgKgorICovCitpbnQgdHdvd2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjdXJyZW50ID0gc3JjWzBdOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkdHJlZSA9IHNyY1sxXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ld3RyZWUgPSBzcmNbMl07CisKKwlpZiAoby0+bWVyZ2Vfc2l6ZSAhPSAyKQorCQlyZXR1cm4gZXJyb3IoIkNhbm5vdCBkbyBhIHR3b3dheSBtZXJnZSBvZiAlZCB0cmVlcyIsCisJCQkgICAgIG8tPm1lcmdlX3NpemUpOworCisJaWYgKG9sZHRyZWUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCW9sZHRyZWUgPSBOVUxMOworCWlmIChuZXd0cmVlID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQluZXd0cmVlID0gTlVMTDsKKworCWlmIChjdXJyZW50KSB7CisJCWlmIChjdXJyZW50LT5jZV9mbGFncyAmIENFX0NPTkZMSUNURUQpIHsKKwkJCWlmIChzYW1lKG9sZHRyZWUsIG5ld3RyZWUpIHx8IG8tPnJlc2V0KSB7CisJCQkJaWYgKCFuZXd0cmVlKQorCQkJCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShjdXJyZW50LCBjdXJyZW50LCBvKTsKKwkJCQllbHNlCisJCQkJCXJldHVybiBtZXJnZWRfZW50cnkobmV3dHJlZSwgY3VycmVudCwgbyk7CisJCQl9CisJCQlyZXR1cm4gcmVqZWN0X21lcmdlKGN1cnJlbnQsIG8pOworCQl9IGVsc2UgaWYgKCghb2xkdHJlZSAmJiAhbmV3dHJlZSkgfHwgLyogNCBhbmQgNSAqLworCQkJICghb2xkdHJlZSAmJiBuZXd0cmVlICYmCisJCQkgIHNhbWUoY3VycmVudCwgbmV3dHJlZSkpIHx8IC8qIDYgYW5kIDcgKi8KKwkJCSAob2xkdHJlZSAmJiBuZXd0cmVlICYmCisJCQkgIHNhbWUob2xkdHJlZSwgbmV3dHJlZSkpIHx8IC8qIDE0IGFuZCAxNSAqLworCQkJIChvbGR0cmVlICYmIG5ld3RyZWUgJiYKKwkJCSAgIXNhbWUob2xkdHJlZSwgbmV3dHJlZSkgJiYgLyogMTggYW5kIDE5ICovCisJCQkgIHNhbWUoY3VycmVudCwgbmV3dHJlZSkpKSB7CisJCQlyZXR1cm4ga2VlcF9lbnRyeShjdXJyZW50LCBvKTsKKwkJfSBlbHNlIGlmIChvbGR0cmVlICYmICFuZXd0cmVlICYmIHNhbWUoY3VycmVudCwgb2xkdHJlZSkpIHsKKwkJCS8qIDEwIG9yIDExICovCisJCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShvbGR0cmVlLCBjdXJyZW50LCBvKTsKKwkJfSBlbHNlIGlmIChvbGR0cmVlICYmIG5ld3RyZWUgJiYKKwkJCSBzYW1lKGN1cnJlbnQsIG9sZHRyZWUpICYmICFzYW1lKGN1cnJlbnQsIG5ld3RyZWUpKSB7CisJCQkvKiAyMCBvciAyMSAqLworCQkJcmV0dXJuIG1lcmdlZF9lbnRyeShuZXd0cmVlLCBjdXJyZW50LCBvKTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gcmVqZWN0X21lcmdlKGN1cnJlbnQsIG8pOworCX0KKwllbHNlIGlmIChuZXd0cmVlKSB7CisJCWlmIChvbGR0cmVlICYmICFvLT5pbml0aWFsX2NoZWNrb3V0KSB7CisJCQkvKgorCQkJICogZGVsZXRpb24gb2YgdGhlIHBhdGggd2FzIHN0YWdlZDsKKwkJCSAqLworCQkJaWYgKHNhbWUob2xkdHJlZSwgbmV3dHJlZSkpCisJCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gcmVqZWN0X21lcmdlKG9sZHRyZWUsIG8pOworCQl9CisJCXJldHVybiBtZXJnZWRfZW50cnkobmV3dHJlZSwgY3VycmVudCwgbyk7CisJfQorCXJldHVybiBkZWxldGVkX2VudHJ5KG9sZHRyZWUsIGN1cnJlbnQsIG8pOworfQorCisvKgorICogQmluZCBtZXJnZS4KKyAqCisgKiBLZWVwIHRoZSBpbmRleCBlbnRyaWVzIGF0IHN0YWdlMCwgY29sbGFwc2Ugc3RhZ2UxIGJ1dCBtYWtlIHN1cmUKKyAqIHN0YWdlMCBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRoZXJlLgorICovCitpbnQgYmluZF9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBzcmNbMF07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICphID0gc3JjWzFdOworCisJaWYgKG8tPm1lcmdlX3NpemUgIT0gMSkKKwkJcmV0dXJuIGVycm9yKCJDYW5ub3QgZG8gYSBiaW5kIG1lcmdlIG9mICVkIHRyZWVzIiwKKwkJCSAgICAgby0+bWVyZ2Vfc2l6ZSk7CisJaWYgKGEgJiYgb2xkKQorCQlyZXR1cm4gby0+cXVpZXQgPyAtMSA6CisJCQllcnJvcihFUlJPUk1TRyhvLCBFUlJPUl9CSU5EX09WRVJMQVApLAorCQkJICAgICAgc3VwZXJfcHJlZml4ZWQoYS0+bmFtZSksCisJCQkgICAgICBzdXBlcl9wcmVmaXhlZChvbGQtPm5hbWUpKTsKKwlpZiAoIWEpCisJCXJldHVybiBrZWVwX2VudHJ5KG9sZCwgbyk7CisJZWxzZQorCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KGEsIE5VTEwsIG8pOworfQorCisvKgorICogT25lLXdheSBtZXJnZS4KKyAqCisgKiBUaGUgcnVsZSBpczoKKyAqIC0gdGFrZSB0aGUgc3RhdCBpbmZvcm1hdGlvbiBmcm9tIHN0YWdlMCwgdGFrZSB0aGUgZGF0YSBmcm9tIHN0YWdlMQorICovCitpbnQgb25ld2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBzcmNbMF07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICphID0gc3JjWzFdOworCisJaWYgKG8tPm1lcmdlX3NpemUgIT0gMSkKKwkJcmV0dXJuIGVycm9yKCJDYW5ub3QgZG8gYSBvbmV3YXkgbWVyZ2Ugb2YgJWQgdHJlZXMiLAorCQkJICAgICBvLT5tZXJnZV9zaXplKTsKKworCWlmICghYSB8fCBhID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShvbGQsIG9sZCwgbyk7CisKKwlpZiAob2xkICYmIHNhbWUob2xkLCBhKSkgeworCQlpbnQgdXBkYXRlID0gMDsKKwkJaWYgKG8tPnJlc2V0ICYmIG8tPnVwZGF0ZSAmJiAhY2VfdXB0b2RhdGUob2xkKSAmJiAhY2Vfc2tpcF93b3JrdHJlZShvbGQpICYmCisJCQkhKG9sZC0+Y2VfZmxhZ3MgJiBDRV9GU01PTklUT1JfVkFMSUQpKSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCWlmIChsc3RhdChvbGQtPm5hbWUsICZzdCkgfHwKKwkJCSAgICBpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgb2xkLCAmc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSkpCisJCQkJdXBkYXRlIHw9IENFX1VQREFURTsKKwkJfQorCQlpZiAoby0+dXBkYXRlICYmIFNfSVNHSVRMSU5LKG9sZC0+Y2VfbW9kZSkgJiYKKwkJICAgIHNob3VsZF91cGRhdGVfc3VibW9kdWxlcygpICYmICF2ZXJpZnlfdXB0b2RhdGUob2xkLCBvKSkKKwkJCXVwZGF0ZSB8PSBDRV9VUERBVEU7CisJCWFkZF9lbnRyeShvLCBvbGQsIHVwZGF0ZSwgQ0VfU1RBR0VNQVNLKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBtZXJnZWRfZW50cnkoYSwgb2xkLCBvKTsKK30KZGlmZiAtLWdpdCBhL3VucGFjay10cmVlcy5oIGIvdW5wYWNrLXRyZWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxNTU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3VucGFjay10cmVlcy5oCkBAIC0wLDAgKzEsMTA1IEBACisjaWZuZGVmIFVOUEFDS19UUkVFU19ICisjZGVmaW5lIFVOUEFDS19UUkVFU19ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorCisjZGVmaW5lIE1BWF9VTlBBQ0tfVFJFRVMgTUFYX1RSQVZFUlNFX1RSRUVTCisKK3N0cnVjdCBjYWNoZV9lbnRyeTsKK3N0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9uczsKK3N0cnVjdCBwYXR0ZXJuX2xpc3Q7CisKK3R5cGVkZWYgaW50ICgqbWVyZ2VfZm5fdCkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKKwkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRpb25zKTsKKworZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgeworCUVSUk9SX1dPVUxEX09WRVJXUklURSA9IDAsCisJRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEUsCisJRVJST1JfTk9UX1VQVE9EQVRFX0RJUiwKKwlFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTiwKKwlFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9SRU1PVkVELAorCUVSUk9SX0JJTkRfT1ZFUkxBUCwKKwlFUlJPUl9TUEFSU0VfTk9UX1VQVE9EQVRFX0ZJTEUsCisJRVJST1JfV09VTERfTE9TRV9PUlBIQU5FRF9PVkVSV1JJVFRFTiwKKwlFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX1JFTU9WRUQsCisJRVJST1JfV09VTERfTE9TRV9TVUJNT0RVTEUsCisJTkJfVU5QQUNLX1RSRUVTX0VSUk9SX1RZUEVTCit9OworCisvKgorICogU2V0cyB0aGUgbGlzdCBvZiB1c2VyLWZyaWVuZGx5IGVycm9yIG1lc3NhZ2VzIHRvIGJlIHVzZWQgYnkgdGhlCisgKiBjb21tYW5kICJjbWQiIChlaXRoZXIgbWVyZ2Ugb3IgY2hlY2tvdXQpLCBhbmQgc2hvd19hbGxfZXJyb3JzIHRvIDEuCisgKi8KK3ZvaWQgc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbihzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdHMsCisJCQkJICBjb25zdCBjaGFyICpjbWQpOworCisvKgorICogRnJlZXMgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCkuCisgKi8KK3ZvaWQgY2xlYXJfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbihzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdHMpOworCitzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgeworCXVuc2lnbmVkIGludCByZXNldCwKKwkJICAgICBtZXJnZSwKKwkJICAgICB1cGRhdGUsCisJCSAgICAgY2xvbmUsCisJCSAgICAgaW5kZXhfb25seSwKKwkJICAgICBub250cml2aWFsX21lcmdlLAorCQkgICAgIHRyaXZpYWxfbWVyZ2VzX29ubHksCisJCSAgICAgdmVyYm9zZV91cGRhdGUsCisJCSAgICAgYWdncmVzc2l2ZSwKKwkJICAgICBza2lwX3VubWVyZ2VkLAorCQkgICAgIGluaXRpYWxfY2hlY2tvdXQsCisJCSAgICAgZGlmZl9pbmRleF9jYWNoZWQsCisJCSAgICAgZGVidWdfdW5wYWNrLAorCQkgICAgIHNraXBfc3BhcnNlX2NoZWNrb3V0LAorCQkgICAgIHF1aWV0LAorCQkgICAgIGV4aXRpbmdfZWFybHksCisJCSAgICAgc2hvd19hbGxfZXJyb3JzLAorCQkgICAgIGRyeV9ydW4sCisJCSAgICAga2VlcF9wYXR0ZXJuX2xpc3Q7CisJY29uc3QgY2hhciAqcHJlZml4OworCWludCBjYWNoZV9ib3R0b207CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcjsKKwlzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjOworCW1lcmdlX2ZuX3QgZm47CisJY29uc3QgY2hhciAqbXNnc1tOQl9VTlBBQ0tfVFJFRVNfRVJST1JfVFlQRVNdOworCXN0cnVjdCBhcmd2X2FycmF5IG1zZ3NfdG9fZnJlZTsKKwkvKgorCSAqIFN0b3JlIGVycm9yIG1lc3NhZ2VzIGluIGFuIGFycmF5LCBlYWNoIGNhc2UKKwkgKiBjb3JyZXNwb25kaW5nIHRvIGEgZXJyb3IgbWVzc2FnZSB0eXBlCisJICovCisJc3RydWN0IHN0cmluZ19saXN0IHVucGFja19yZWplY3RzW05CX1VOUEFDS19UUkVFU19FUlJPUl9UWVBFU107CisKKwlpbnQgaGVhZF9pZHg7CisJaW50IG1lcmdlX3NpemU7CisKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmRmX2NvbmZsaWN0X2VudHJ5OworCXZvaWQgKnVucGFja19kYXRhOworCisJc3RydWN0IGluZGV4X3N0YXRlICpkc3RfaW5kZXg7CisJc3RydWN0IGluZGV4X3N0YXRlICpzcmNfaW5kZXg7CisJc3RydWN0IGluZGV4X3N0YXRlIHJlc3VsdDsKKworCXN0cnVjdCBwYXR0ZXJuX2xpc3QgKnBsOyAvKiBmb3IgaW50ZXJuYWwgdXNlICovCit9OworCitpbnQgdW5wYWNrX3RyZWVzKHVuc2lnbmVkIG4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdGlvbnMpOworCitpbnQgdmVyaWZ5X3VwdG9kYXRlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCSAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworCitpbnQgdGhyZWV3YXlfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnN0YWdlcywKKwkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKK2ludCB0d293YXlfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKKwkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CitpbnQgYmluZF9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworaW50IG9uZXdheV9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS91cGxvYWQtcGFjay5jIGIvdXBsb2FkLXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTMyNDljCi0tLSAvZGV2L251bGwKKysrIGIvdXBsb2FkLXBhY2suYwpAQCAtMCwwICsxLDE1NTkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXIuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMtZmlsdGVyLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJwcmlvLXF1ZXVlLmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInVwbG9hZC1wYWNrLmgiCisjaW5jbHVkZSAic2VydmUuaCIKKyNpbmNsdWRlICJjb21taXQtZ3JhcGguaCIKKyNpbmNsdWRlICJjb21taXQtcmVhY2guaCIKKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgVEhFWV9IQVZFCSgxdSA8PCAxMSkKKyNkZWZpbmUgT1VSX1JFRgkJKDF1IDw8IDEyKQorI2RlZmluZSBXQU5URUQJCSgxdSA8PCAxMykKKyNkZWZpbmUgQ09NTU9OX0tOT1dOCSgxdSA8PCAxNCkKKworI2RlZmluZSBTSEFMTE9XCQkoMXUgPDwgMTYpCisjZGVmaW5lIE5PVF9TSEFMTE9XCSgxdSA8PCAxNykKKyNkZWZpbmUgQ0xJRU5UX1NIQUxMT1cJKDF1IDw8IDE4KQorI2RlZmluZSBISURERU5fUkVGCSgxdSA8PCAxOSkKKworI2RlZmluZSBBTExfRkxBR1MgKFRIRVlfSEFWRSB8IE9VUl9SRUYgfCBXQU5URUQgfCBDT01NT05fS05PV04gfCBTSEFMTE9XIHwgXAorCQlOT1RfU0hBTExPVyB8IENMSUVOVF9TSEFMTE9XIHwgSElEREVOX1JFRikKKworc3RhdGljIHRpbWVzdGFtcF90IG9sZGVzdF9oYXZlOworCitzdGF0aWMgaW50IG11bHRpX2FjazsKK3N0YXRpYyBpbnQgbm9fZG9uZTsKK3N0YXRpYyBpbnQgdXNlX3RoaW5fcGFjaywgdXNlX29mc19kZWx0YSwgdXNlX2luY2x1ZGVfdGFnOworc3RhdGljIGludCBub19wcm9ncmVzcywgZGFlbW9uX21vZGU7CisvKiBBbGxvdyBzcGVjaWZ5aW5nIHNoYTEgaWYgaXQgaXMgYSByZWYgdGlwLiAqLworI2RlZmluZSBBTExPV19USVBfU0hBMQkwMQorLyogQWxsb3cgcmVxdWVzdCBvZiBhIHNoYTEgaWYgaXQgaXMgcmVhY2hhYmxlIGZyb20gYSByZWYgKHBvc3NpYmx5IGhpZGRlbiByZWYpLiAqLworI2RlZmluZSBBTExPV19SRUFDSEFCTEVfU0hBMQkwMgorLyogQWxsb3cgcmVxdWVzdCBvZiBhbnkgc2hhMS4gSW1wbGllcyBBTExPV19USVBfU0hBMSBhbmQgQUxMT1dfUkVBQ0hBQkxFX1NIQTEuICovCisjZGVmaW5lIEFMTE9XX0FOWV9TSEExCTA3CitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdDsKK3N0YXRpYyBpbnQgc2hhbGxvd19ucjsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2FycmF5IGV4dHJhX2VkZ2Vfb2JqOworc3RhdGljIHVuc2lnbmVkIGludCB0aW1lb3V0Oworc3RhdGljIGludCBrZWVwYWxpdmUgPSA1OworLyogMCBmb3Igbm8gc2lkZWJhbmQsCisgKiBvdGhlcndpc2UgbWF4aW11bSBwYWNrZXQgc2l6ZSAodXAgdG8gNjU1MjAgYnl0ZXMpLgorICovCitzdGF0aWMgaW50IHVzZV9zaWRlYmFuZDsKK3N0YXRpYyBpbnQgc3RhdGVsZXNzX3JwYzsKK3N0YXRpYyBjb25zdCBjaGFyICpwYWNrX29iamVjdHNfaG9vazsKKworc3RhdGljIGludCBmaWx0ZXJfY2FwYWJpbGl0eV9yZXF1ZXN0ZWQ7CitzdGF0aWMgaW50IGFsbG93X2ZpbHRlcjsKK3N0YXRpYyBpbnQgYWxsb3dfcmVmX2luX3dhbnQ7CitzdGF0aWMgc3RydWN0IGxpc3Rfb2JqZWN0c19maWx0ZXJfb3B0aW9ucyBmaWx0ZXJfb3B0aW9uczsKKworc3RhdGljIGludCBhbGxvd19zaWRlYmFuZF9hbGw7CisKK3N0YXRpYyB2b2lkIHJlc2V0X3RpbWVvdXQodm9pZCkKK3sKKwlhbGFybSh0aW1lb3V0KTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9jbGllbnRfZGF0YShpbnQgZmQsIGNvbnN0IGNoYXIgKmRhdGEsIHNzaXplX3Qgc3opCit7CisJaWYgKHVzZV9zaWRlYmFuZCkgeworCQlzZW5kX3NpZGViYW5kKDEsIGZkLCBkYXRhLCBzeiwgdXNlX3NpZGViYW5kKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZmQgPT0gMykKKwkJLyogZW1lcmdlbmN5IHF1aXQgKi8KKwkJZmQgPSAyOworCWlmIChmZCA9PSAyKSB7CisJCS8qIFhYWDogYXJlIHdlIGhhcHB5IHRvIGxvc2Ugc3R1ZmYgaGVyZT8gKi8KKwkJeHdyaXRlKGZkLCBkYXRhLCBzeik7CisJCXJldHVybjsKKwl9CisJd3JpdGVfb3JfZGllKGZkLCBkYXRhLCBzeik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfb25lX3NoYWxsb3coY29uc3Qgc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQsIHZvaWQgKmNiX2RhdGEpCit7CisJRklMRSAqZnAgPSBjYl9kYXRhOworCWlmIChncmFmdC0+bnJfcGFyZW50ID09IC0xKQorCQlmcHJpbnRmKGZwLCAiLS1zaGFsbG93ICVzXG4iLCBvaWRfdG9faGV4KCZncmFmdC0+b2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9wYWNrX2ZpbGUoY29uc3Qgc3RydWN0IG9iamVjdF9hcnJheSAqaGF2ZV9vYmosCisJCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfYXJyYXkgKndhbnRfb2JqKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhY2tfb2JqZWN0cyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyIGRhdGFbODE5M10sIHByb2dyZXNzWzEyOF07CisJY2hhciBhYm9ydF9tc2dbXSA9ICJhYm9ydGluZyBkdWUgdG8gcG9zc2libGUgcmVwb3NpdG9yeSAiCisJCSJjb3JydXB0aW9uIG9uIHRoZSByZW1vdGUgc2lkZS4iOworCWludCBidWZmZXJlZCA9IC0xOworCXNzaXplX3Qgc3o7CisJaW50IGk7CisJRklMRSAqcGlwZV9mZDsKKworCWlmICghcGFja19vYmplY3RzX2hvb2spCisJCXBhY2tfb2JqZWN0cy5naXRfY21kID0gMTsKKwllbHNlIHsKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29iamVjdHMuYXJncywgcGFja19vYmplY3RzX2hvb2spOworCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiZ2l0Iik7CisJCXBhY2tfb2JqZWN0cy51c2Vfc2hlbGwgPSAxOworCX0KKworCWlmIChzaGFsbG93X25yKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICItLXNoYWxsb3ctZmlsZSIpOworCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiIik7CisJfQorCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICJwYWNrLW9iamVjdHMiKTsKKwlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiLS1yZXZzIik7CisJaWYgKHVzZV90aGluX3BhY2spCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICItLXRoaW4iKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vYmplY3RzLmFyZ3MsICItLXN0ZG91dCIpOworCWlmIChzaGFsbG93X25yKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiLS1zaGFsbG93Iik7CisJaWYgKCFub19wcm9ncmVzcykKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29iamVjdHMuYXJncywgIi0tcHJvZ3Jlc3MiKTsKKwlpZiAodXNlX29mc19kZWx0YSkKKwkJYXJndl9hcnJheV9wdXNoKCZwYWNrX29iamVjdHMuYXJncywgIi0tZGVsdGEtYmFzZS1vZmZzZXQiKTsKKwlpZiAodXNlX2luY2x1ZGVfdGFnKQorCQlhcmd2X2FycmF5X3B1c2goJnBhY2tfb2JqZWN0cy5hcmdzLCAiLS1pbmNsdWRlLXRhZyIpOworCWlmIChmaWx0ZXJfb3B0aW9ucy5jaG9pY2UpIHsKKwkJY29uc3QgY2hhciAqc3BlYyA9CisJCQlleHBhbmRfbGlzdF9vYmplY3RzX2ZpbHRlcl9zcGVjKCZmaWx0ZXJfb3B0aW9ucyk7CisJCWlmIChwYWNrX29iamVjdHMudXNlX3NoZWxsKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQkJc3FfcXVvdGVfYnVmKCZidWYsIHNwZWMpOworCQkJYXJndl9hcnJheV9wdXNoZigmcGFja19vYmplY3RzLmFyZ3MsICItLWZpbHRlcj0lcyIsIGJ1Zi5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCX0gZWxzZSB7CisJCQlhcmd2X2FycmF5X3B1c2hmKCZwYWNrX29iamVjdHMuYXJncywgIi0tZmlsdGVyPSVzIiwKKwkJCQkJIHNwZWMpOworCQl9CisJfQorCisJcGFja19vYmplY3RzLmluID0gLTE7CisJcGFja19vYmplY3RzLm91dCA9IC0xOworCXBhY2tfb2JqZWN0cy5lcnIgPSAtMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZwYWNrX29iamVjdHMpKQorCQlkaWUoImdpdCB1cGxvYWQtcGFjazogdW5hYmxlIHRvIGZvcmsgZ2l0LXBhY2stb2JqZWN0cyIpOworCisJcGlwZV9mZCA9IHhmZG9wZW4ocGFja19vYmplY3RzLmluLCAidyIpOworCisJaWYgKHNoYWxsb3dfbnIpCisJCWZvcl9lYWNoX2NvbW1pdF9ncmFmdCh3cml0ZV9vbmVfc2hhbGxvdywgcGlwZV9mZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FudF9vYmotPm5yOyBpKyspCisJCWZwcmludGYocGlwZV9mZCwgIiVzXG4iLAorCQkJb2lkX3RvX2hleCgmd2FudF9vYmotPm9iamVjdHNbaV0uaXRlbS0+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+ZmxhZ3MgfD0gQ0xJRU5UX1NIQUxMT1c7CisJCQlhZGRfb2JqZWN0X2FycmF5KG9iamVjdCwgTlVMTCwgc2hhbGxvd3MpOworCQl9CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfZGVlcGVuKGNvbnN0IGNoYXIgKmxpbmUsIGludCAqZGVwdGgpCit7CisJY29uc3QgY2hhciAqYXJnOworCWlmIChza2lwX3ByZWZpeChsaW5lLCAiZGVlcGVuICIsICZhcmcpKSB7CisJCWNoYXIgKmVuZCA9IE5VTEw7CisJCSpkZXB0aCA9IChpbnQpc3RydG9sKGFyZywgJmVuZCwgMCk7CisJCWlmICghZW5kIHx8ICplbmQgfHwgKmRlcHRoIDw9IDApCisJCQlkaWUoIkludmFsaWQgZGVlcGVuOiAlcyIsIGxpbmUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2RlZXBlbl9zaW5jZShjb25zdCBjaGFyICpsaW5lLCB0aW1lc3RhbXBfdCAqZGVlcGVuX3NpbmNlLCBpbnQgKmRlZXBlbl9yZXZfbGlzdCkKK3sKKwljb25zdCBjaGFyICphcmc7CisJaWYgKHNraXBfcHJlZml4KGxpbmUsICJkZWVwZW4tc2luY2UgIiwgJmFyZykpIHsKKwkJY2hhciAqZW5kID0gTlVMTDsKKwkJKmRlZXBlbl9zaW5jZSA9IHBhcnNlX3RpbWVzdGFtcChhcmcsICZlbmQsIDApOworCQlpZiAoIWVuZCB8fCAqZW5kIHx8ICFkZWVwZW5fc2luY2UgfHwKKwkJICAgIC8qIHJldmlzaW9ucy5jJ3MgbWF4X2FnZSAtMSBpcyBzcGVjaWFsICovCisJCSAgICAqZGVlcGVuX3NpbmNlID09IC0xKQorCQkJZGllKCJJbnZhbGlkIGRlZXBlbi1zaW5jZTogJXMiLCBsaW5lKTsKKwkJKmRlZXBlbl9yZXZfbGlzdCA9IDE7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2RlZXBlbl9ub3QoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHN0cmluZ19saXN0ICpkZWVwZW5fbm90LCBpbnQgKmRlZXBlbl9yZXZfbGlzdCkKK3sKKwljb25zdCBjaGFyICphcmc7CisJaWYgKHNraXBfcHJlZml4KGxpbmUsICJkZWVwZW4tbm90ICIsICZhcmcpKSB7CisJCWNoYXIgKnJlZiA9IE5VTEw7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlpZiAoZXhwYW5kX3JlZih0aGVfcmVwb3NpdG9yeSwgYXJnLCBzdHJsZW4oYXJnKSwgJm9pZCwgJnJlZikgIT0gMSkKKwkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBhbWJpZ3VvdXMgZGVlcGVuLW5vdDogJXMiLCBsaW5lKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGRlZXBlbl9ub3QsIHJlZik7CisJCWZyZWUocmVmKTsKKwkJKmRlZXBlbl9yZXZfbGlzdCA9IDE7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVjZWl2ZV9uZWVkcyhzdHJ1Y3QgcGFja2V0X3JlYWRlciAqcmVhZGVyLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHNoYWxsb3dzID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IGRlZXBlbl9ub3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlpbnQgZGVwdGggPSAwOworCWludCBoYXNfbm9uX3RpcCA9IDA7CisJdGltZXN0YW1wX3QgZGVlcGVuX3NpbmNlID0gMDsKKwlpbnQgZGVlcGVuX3Jldl9saXN0ID0gMDsKKwlpbnQgZGVlcGVuX3JlbGF0aXZlID0gMDsKKwlzdHJ1Y3QgcGFja2V0X3dyaXRlciB3cml0ZXI7CisKKwlzaGFsbG93X25yID0gMDsKKwlwYWNrZXRfd3JpdGVyX2luaXQoJndyaXRlciwgMSk7CisJZm9yICg7OykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvOworCQljb25zdCBjaGFyICpmZWF0dXJlczsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWRfYnVmOworCQljb25zdCBjaGFyICphcmc7CisKKwkJcmVzZXRfdGltZW91dCgpOworCQlpZiAocGFja2V0X3JlYWRlcl9yZWFkKHJlYWRlcikgIT0gUEFDS0VUX1JFQURfTk9STUFMKQorCQkJYnJlYWs7CisKKwkJaWYgKHByb2Nlc3Nfc2hhbGxvdyhyZWFkZXItPmxpbmUsICZzaGFsbG93cykpCisJCQljb250aW51ZTsKKwkJaWYgKHByb2Nlc3NfZGVlcGVuKHJlYWRlci0+bGluZSwgJmRlcHRoKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJvY2Vzc19kZWVwZW5fc2luY2UocmVhZGVyLT5saW5lLCAmZGVlcGVuX3NpbmNlLCAmZGVlcGVuX3Jldl9saXN0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJvY2Vzc19kZWVwZW5fbm90KHJlYWRlci0+bGluZSwgJmRlZXBlbl9ub3QsICZkZWVwZW5fcmV2X2xpc3QpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNraXBfcHJlZml4KHJlYWRlci0+bGluZSwgImZpbHRlciAiLCAmYXJnKSkgeworCQkJaWYgKCFmaWx0ZXJfY2FwYWJpbGl0eV9yZXF1ZXN0ZWQpCisJCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IGZpbHRlcmluZyBjYXBhYmlsaXR5IG5vdCBuZWdvdGlhdGVkIik7CisJCQlsaXN0X29iamVjdHNfZmlsdGVyX2RpZV9pZl9wb3B1bGF0ZWQoJmZpbHRlcl9vcHRpb25zKTsKKwkJCXBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoJmZpbHRlcl9vcHRpb25zLCBhcmcpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXNraXBfcHJlZml4KHJlYWRlci0+bGluZSwgIndhbnQgIiwgJmFyZykgfHwKKwkJICAgIHBhcnNlX29pZF9oZXgoYXJnLCAmb2lkX2J1ZiwgJmZlYXR1cmVzKSkKKwkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBwcm90b2NvbCBlcnJvciwgIgorCQkJICAgICJleHBlY3RlZCB0byBnZXQgb2JqZWN0IElELCBub3QgJyVzJyIsIHJlYWRlci0+bGluZSk7CisKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgImRlZXBlbi1yZWxhdGl2ZSIpKQorCQkJZGVlcGVuX3JlbGF0aXZlID0gMTsKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgIm11bHRpX2Fja19kZXRhaWxlZCIpKQorCQkJbXVsdGlfYWNrID0gMjsKKwkJZWxzZSBpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAibXVsdGlfYWNrIikpCisJCQltdWx0aV9hY2sgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAibm8tZG9uZSIpKQorCQkJbm9fZG9uZSA9IDE7CisJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJ0aGluLXBhY2siKSkKKwkJCXVzZV90aGluX3BhY2sgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAib2ZzLWRlbHRhIikpCisJCQl1c2Vfb2ZzX2RlbHRhID0gMTsKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgInNpZGUtYmFuZC02NGsiKSkKKwkJCXVzZV9zaWRlYmFuZCA9IExBUkdFX1BBQ0tFVF9NQVg7CisJCWVsc2UgaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgInNpZGUtYmFuZCIpKQorCQkJdXNlX3NpZGViYW5kID0gREVGQVVMVF9QQUNLRVRfTUFYOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAibm8tcHJvZ3Jlc3MiKSkKKwkJCW5vX3Byb2dyZXNzID0gMTsKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgImluY2x1ZGUtdGFnIikpCisJCQl1c2VfaW5jbHVkZV90YWcgPSAxOworCQlpZiAoYWxsb3dfZmlsdGVyICYmIHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgImZpbHRlciIpKQorCQkJZmlsdGVyX2NhcGFiaWxpdHlfcmVxdWVzdGVkID0gMTsKKworCQlvID0gcGFyc2Vfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LCAmb2lkX2J1Zik7CisJCWlmICghbykgeworCQkJcGFja2V0X3dyaXRlcl9lcnJvcigmd3JpdGVyLAorCQkJCQkgICAgInVwbG9hZC1wYWNrOiBub3Qgb3VyIHJlZiAlcyIsCisJCQkJCSAgICBvaWRfdG9faGV4KCZvaWRfYnVmKSk7CisJCQlkaWUoImdpdCB1cGxvYWQtcGFjazogbm90IG91ciByZWYgJXMiLAorCQkJICAgIG9pZF90b19oZXgoJm9pZF9idWYpKTsKKwkJfQorCQlpZiAoIShvLT5mbGFncyAmIFdBTlRFRCkpIHsKKwkJCW8tPmZsYWdzIHw9IFdBTlRFRDsKKwkJCWlmICghKChhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgJiBBTExPV19BTllfU0hBMSkgPT0gQUxMT1dfQU5ZX1NIQTEKKwkJCSAgICAgIHx8IGlzX291cl9yZWYobykpKQorCQkJCWhhc19ub25fdGlwID0gMTsKKwkJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgd2FudF9vYmopOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIHNlbnQgYWxsIG91ciByZWZzIGFscmVhZHksIGFuZCB0aGUgb3RoZXIgZW5kCisJICogc2hvdWxkIGhhdmUgY2hvc2VuIG91dCBvZiB0aGVtLiBXaGVuIHdlIGFyZSBvcGVyYXRpbmcKKwkgKiBpbiB0aGUgc3RhdGVsZXNzIFJQQyBtb2RlLCBob3dldmVyLCB0aGVpciBjaG9pY2UgbWF5CisJICogaGF2ZSBiZWVuIGJhc2VkIG9uIHRoZSBzZXQgb2Ygb2xkZXIgcmVmcyBhZHZlcnRpc2VkCisJICogYnkgYW5vdGhlciBwcm9jZXNzIHRoYXQgaGFuZGxlZCB0aGUgaW5pdGlhbCByZXF1ZXN0LgorCSAqLworCWlmIChoYXNfbm9uX3RpcCkKKwkJY2hlY2tfbm9uX3RpcCh3YW50X29iaiwgJndyaXRlcik7CisKKwlpZiAoIXVzZV9zaWRlYmFuZCAmJiBkYWVtb25fbW9kZSkKKwkJbm9fcHJvZ3Jlc3MgPSAxOworCisJaWYgKGRlcHRoID09IDAgJiYgIWRlZXBlbl9yZXZfbGlzdCAmJiBzaGFsbG93cy5uciA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoc2VuZF9zaGFsbG93X2xpc3QoJndyaXRlciwgZGVwdGgsIGRlZXBlbl9yZXZfbGlzdCwgZGVlcGVuX3NpbmNlLAorCQkJICAgICAgJmRlZXBlbl9ub3QsIGRlZXBlbl9yZWxhdGl2ZSwgJnNoYWxsb3dzLAorCQkJICAgICAgd2FudF9vYmopKQorCQlwYWNrZXRfZmx1c2goMSk7CisJb2JqZWN0X2FycmF5X2NsZWFyKCZzaGFsbG93cyk7Cit9CisKKy8qIHJldHVybiBub24temVybyBpZiB0aGUgcmVmIGlzIGhpZGRlbiwgb3RoZXJ3aXNlIDAgKi8KK3N0YXRpYyBpbnQgbWFya19vdXJfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IGNoYXIgKnJlZm5hbWVfZnVsbCwKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gbG9va3VwX3Vua25vd25fb2JqZWN0KG9pZCk7CisKKwlpZiAocmVmX2lzX2hpZGRlbihyZWZuYW1lLCByZWZuYW1lX2Z1bGwpKSB7CisJCW8tPmZsYWdzIHw9IEhJRERFTl9SRUY7CisJCXJldHVybiAxOworCX0KKwlvLT5mbGFncyB8PSBPVVJfUkVGOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX3JlZihjb25zdCBjaGFyICpyZWZuYW1lX2Z1bGwsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwljb25zdCBjaGFyICpyZWZuYW1lID0gc3RyaXBfbmFtZXNwYWNlKHJlZm5hbWVfZnVsbCk7CisKKwltYXJrX291cl9yZWYocmVmbmFtZSwgcmVmbmFtZV9mdWxsLCBvaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmb3JtYXRfc3ltcmVmX2luZm8oc3RydWN0IHN0cmJ1ZiAqYnVmLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnN5bXJlZikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmICghc3ltcmVmLT5ucikKKwkJcmV0dXJuOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgc3ltcmVmKQorCQlzdHJidWZfYWRkZihidWYsICIgc3ltcmVmPSVzOiVzIiwgaXRlbS0+c3RyaW5nLCAoY2hhciAqKWl0ZW0tPnV0aWwpOworfQorCitzdGF0aWMgaW50IHNlbmRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpjYXBhYmlsaXRpZXMgPSAibXVsdGlfYWNrIHRoaW4tcGFjayBzaWRlLWJhbmQiCisJCSIgc2lkZS1iYW5kLTY0ayBvZnMtZGVsdGEgc2hhbGxvdyBkZWVwZW4tc2luY2UgZGVlcGVuLW5vdCIKKwkJIiBkZWVwZW4tcmVsYXRpdmUgbm8tcHJvZ3Jlc3MgaW5jbHVkZS10YWcgbXVsdGlfYWNrX2RldGFpbGVkIjsKKwljb25zdCBjaGFyICpyZWZuYW1lX25vbnMgPSBzdHJpcF9uYW1lc3BhY2UocmVmbmFtZSk7CisJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisKKwlpZiAobWFya19vdXJfcmVmKHJlZm5hbWVfbm9ucywgcmVmbmFtZSwgb2lkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2FwYWJpbGl0aWVzKSB7CisJCXN0cnVjdCBzdHJidWYgc3ltcmVmX2luZm8gPSBTVFJCVUZfSU5JVDsKKworCQlmb3JtYXRfc3ltcmVmX2luZm8oJnN5bXJlZl9pbmZvLCBjYl9kYXRhKTsKKwkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiJXMgJXMlYyVzJXMlcyVzJXMlcyBhZ2VudD0lc1xuIiwKKwkJCSAgICAgb2lkX3RvX2hleChvaWQpLCByZWZuYW1lX25vbnMsCisJCQkgICAgIDAsIGNhcGFiaWxpdGllcywKKwkJCSAgICAgKGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmIEFMTE9XX1RJUF9TSEExKSA/CisJCQkJICAgICAiIGFsbG93LXRpcC1zaGExLWluLXdhbnQiIDogIiIsCisJCQkgICAgIChhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgJiBBTExPV19SRUFDSEFCTEVfU0hBMSkgPworCQkJCSAgICAgIiBhbGxvdy1yZWFjaGFibGUtc2hhMS1pbi13YW50IiA6ICIiLAorCQkJICAgICBzdGF0ZWxlc3NfcnBjID8gIiBuby1kb25lIiA6ICIiLAorCQkJICAgICBzeW1yZWZfaW5mby5idWYsCisJCQkgICAgIGFsbG93X2ZpbHRlciA/ICIgZmlsdGVyIiA6ICIiLAorCQkJICAgICBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzeW1yZWZfaW5mbyk7CisJfSBlbHNlIHsKKwkJcGFja2V0X3dyaXRlX2ZtdCgxLCAiJXMgJXNcbiIsIG9pZF90b19oZXgob2lkKSwgcmVmbmFtZV9ub25zKTsKKwl9CisJY2FwYWJpbGl0aWVzID0gTlVMTDsKKwlpZiAoIXBlZWxfcmVmKHJlZm5hbWUsICZwZWVsZWQpKQorCQlwYWNrZXRfd3JpdGVfZm10KDEsICIlcyAlc157fVxuIiwgb2lkX3RvX2hleCgmcGVlbGVkKSwgcmVmbmFtZV9ub25zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaW5kX3N5bXJlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwljb25zdCBjaGFyICpzeW1yZWZfdGFyZ2V0OworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKChmbGFnICYgUkVGX0lTU1lNUkVGKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlzeW1yZWZfdGFyZ2V0ID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIDAsIE5VTEwsICZmbGFnKTsKKwlpZiAoIXN5bXJlZl90YXJnZXQgfHwgKGZsYWcgJiBSRUZfSVNTWU1SRUYpID09IDApCisJCWRpZSgiJyVzJyBpcyBhIHN5bXJlZiBidXQgaXQgaXMgbm90PyIsIHJlZm5hbWUpOworCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoY2JfZGF0YSwgc3RyaXBfbmFtZXNwYWNlKHJlZm5hbWUpKTsKKwlpdGVtLT51dGlsID0geHN0cmR1cChzdHJpcF9uYW1lc3BhY2Uoc3ltcmVmX3RhcmdldCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwbG9hZF9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICp1bnVzZWQpCit7CisJaWYgKCFzdHJjbXAoInVwbG9hZHBhY2suYWxsb3d0aXBzaGExaW53YW50IiwgdmFyKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0IHw9IEFMTE9XX1RJUF9TSEExOworCQllbHNlCisJCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgJj0gfkFMTE9XX1RJUF9TSEExOworCX0gZWxzZSBpZiAoIXN0cmNtcCgidXBsb2FkcGFjay5hbGxvd3JlYWNoYWJsZXNoYTFpbndhbnQiLCB2YXIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgfD0gQUxMT1dfUkVBQ0hBQkxFX1NIQTE7CisJCWVsc2UKKwkJCWFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmPSB+QUxMT1dfUkVBQ0hBQkxFX1NIQTE7CisJfSBlbHNlIGlmICghc3RyY21wKCJ1cGxvYWRwYWNrLmFsbG93YW55c2hhMWlud2FudCIsIHZhcikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCWFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCB8PSBBTExPV19BTllfU0hBMTsKKwkJZWxzZQorCQkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0ICY9IH5BTExPV19BTllfU0hBMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoInVwbG9hZHBhY2sua2VlcGFsaXZlIiwgdmFyKSkgeworCQlrZWVwYWxpdmUgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJaWYgKCFrZWVwYWxpdmUpCisJCQlrZWVwYWxpdmUgPSAtMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoInVwbG9hZHBhY2suYWxsb3dmaWx0ZXIiLCB2YXIpKSB7CisJCWFsbG93X2ZpbHRlciA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoInVwbG9hZHBhY2suYWxsb3dyZWZpbndhbnQiLCB2YXIpKSB7CisJCWFsbG93X3JlZl9pbl93YW50ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCX0gZWxzZSBpZiAoIXN0cmNtcCgidXBsb2FkcGFjay5hbGxvd3NpZGViYW5kYWxsIiwgdmFyKSkgeworCQlhbGxvd19zaWRlYmFuZF9hbGwgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJfSBlbHNlIGlmICghc3RyY21wKCJjb3JlLnByZWNvbXBvc2V1bmljb2RlIiwgdmFyKSkgeworCQlwcmVjb21wb3NlZF91bmljb2RlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCX0KKworCWlmIChjdXJyZW50X2NvbmZpZ19zY29wZSgpICE9IENPTkZJR19TQ09QRV9MT0NBTCAmJgorCWN1cnJlbnRfY29uZmlnX3Njb3BlKCkgIT0gQ09ORklHX1NDT1BFX1dPUktUUkVFKSB7CisJCWlmICghc3RyY21wKCJ1cGxvYWRwYWNrLnBhY2tvYmplY3RzaG9vayIsIHZhcikpCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnBhY2tfb2JqZWN0c19ob29rLCB2YXIsIHZhbHVlKTsKKwl9CisKKwlyZXR1cm4gcGFyc2VfaGlkZV9yZWZzX2NvbmZpZyh2YXIsIHZhbHVlLCAidXBsb2FkcGFjayIpOworfQorCit2b2lkIHVwbG9hZF9wYWNrKHN0cnVjdCB1cGxvYWRfcGFja19vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBzeW1yZWYgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHdhbnRfb2JqID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOworCisJc3RhdGVsZXNzX3JwYyA9IG9wdGlvbnMtPnN0YXRlbGVzc19ycGM7CisJdGltZW91dCA9IG9wdGlvbnMtPnRpbWVvdXQ7CisJZGFlbW9uX21vZGUgPSBvcHRpb25zLT5kYWVtb25fbW9kZTsKKworCWdpdF9jb25maWcodXBsb2FkX3BhY2tfY29uZmlnLCBOVUxMKTsKKworCWhlYWRfcmVmX25hbWVzcGFjZWQoZmluZF9zeW1yZWYsICZzeW1yZWYpOworCisJaWYgKG9wdGlvbnMtPmFkdmVydGlzZV9yZWZzIHx8ICFzdGF0ZWxlc3NfcnBjKSB7CisJCXJlc2V0X3RpbWVvdXQoKTsKKwkJaGVhZF9yZWZfbmFtZXNwYWNlZChzZW5kX3JlZiwgJnN5bXJlZik7CisJCWZvcl9lYWNoX25hbWVzcGFjZWRfcmVmKHNlbmRfcmVmLCAmc3ltcmVmKTsKKwkJYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzKDEpOworCQlwYWNrZXRfZmx1c2goMSk7CisJfSBlbHNlIHsKKwkJaGVhZF9yZWZfbmFtZXNwYWNlZChjaGVja19yZWYsIE5VTEwpOworCQlmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihjaGVja19yZWYsIE5VTEwpOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmc3ltcmVmLCAxKTsKKwlpZiAob3B0aW9ucy0+YWR2ZXJ0aXNlX3JlZnMpCisJCXJldHVybjsKKworCXBhY2tldF9yZWFkZXJfaW5pdCgmcmVhZGVyLCAwLCBOVUxMLCAwLAorCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CisJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CisKKwlyZWNlaXZlX25lZWRzKCZyZWFkZXIsICZ3YW50X29iaik7CisJaWYgKHdhbnRfb2JqLm5yKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXkgaGF2ZV9vYmogPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwkJZ2V0X2NvbW1vbl9jb21taXRzKCZyZWFkZXIsICZoYXZlX29iaiwgJndhbnRfb2JqKTsKKwkJY3JlYXRlX3BhY2tfZmlsZSgmaGF2ZV9vYmosICZ3YW50X29iaik7CisJfQorfQorCitzdHJ1Y3QgdXBsb2FkX3BhY2tfZGF0YSB7CisJc3RydWN0IG9iamVjdF9hcnJheSB3YW50czsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgd2FudGVkX3JlZnM7CisJc3RydWN0IG9pZF9hcnJheSBoYXZlczsKKworCXN0cnVjdCBvYmplY3RfYXJyYXkgc2hhbGxvd3M7CisJc3RydWN0IHN0cmluZ19saXN0IGRlZXBlbl9ub3Q7CisJaW50IGRlcHRoOworCXRpbWVzdGFtcF90IGRlZXBlbl9zaW5jZTsKKwlpbnQgZGVlcGVuX3Jldl9saXN0OworCWludCBkZWVwZW5fcmVsYXRpdmU7CisKKwlzdHJ1Y3QgcGFja2V0X3dyaXRlciB3cml0ZXI7CisKKwl1bnNpZ25lZCBzdGF0ZWxlc3NfcnBjIDogMTsKKworCXVuc2lnbmVkIHVzZV90aGluX3BhY2sgOiAxOworCXVuc2lnbmVkIHVzZV9vZnNfZGVsdGEgOiAxOworCXVuc2lnbmVkIG5vX3Byb2dyZXNzIDogMTsKKwl1bnNpZ25lZCB1c2VfaW5jbHVkZV90YWcgOiAxOworCXVuc2lnbmVkIGRvbmUgOiAxOworfTsKKworc3RhdGljIHZvaWQgdXBsb2FkX3BhY2tfZGF0YV9pbml0KHN0cnVjdCB1cGxvYWRfcGFja19kYXRhICpkYXRhKQoreworCXN0cnVjdCBvYmplY3RfYXJyYXkgd2FudHMgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgd2FudGVkX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgb2lkX2FycmF5IGhhdmVzID0gT0lEX0FSUkFZX0lOSVQ7CisJc3RydWN0IG9iamVjdF9hcnJheSBzaGFsbG93cyA9IE9CSkVDVF9BUlJBWV9JTklUOworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZWVwZW5fbm90ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CisJZGF0YS0+d2FudHMgPSB3YW50czsKKwlkYXRhLT53YW50ZWRfcmVmcyA9IHdhbnRlZF9yZWZzOworCWRhdGEtPmhhdmVzID0gaGF2ZXM7CisJZGF0YS0+c2hhbGxvd3MgPSBzaGFsbG93czsKKwlkYXRhLT5kZWVwZW5fbm90ID0gZGVlcGVuX25vdDsKKwlwYWNrZXRfd3JpdGVyX2luaXQoJmRhdGEtPndyaXRlciwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwbG9hZF9wYWNrX2RhdGFfY2xlYXIoc3RydWN0IHVwbG9hZF9wYWNrX2RhdGEgKmRhdGEpCit7CisJb2JqZWN0X2FycmF5X2NsZWFyKCZkYXRhLT53YW50cyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRhdGEtPndhbnRlZF9yZWZzLCAxKTsKKwlvaWRfYXJyYXlfY2xlYXIoJmRhdGEtPmhhdmVzKTsKKwlvYmplY3RfYXJyYXlfY2xlYXIoJmRhdGEtPnNoYWxsb3dzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZGF0YS0+ZGVlcGVuX25vdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfd2FudChzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyLCBjb25zdCBjaGFyICpsaW5lLAorCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaikKK3sKKwljb25zdCBjaGFyICphcmc7CisJaWYgKHNraXBfcHJlZml4KGxpbmUsICJ3YW50ICIsICZhcmcpKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQlzdHJ1Y3Qgb2JqZWN0ICpvOworCisJCWlmIChnZXRfb2lkX2hleChhcmcsICZvaWQpKQorCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IHByb3RvY29sIGVycm9yLCAiCisJCQkgICAgImV4cGVjdGVkIHRvIGdldCBvaWQsIG5vdCAnJXMnIiwgbGluZSk7CisKKwkJbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9pZCk7CisJCWlmICghbykgeworCQkJcGFja2V0X3dyaXRlcl9lcnJvcih3cml0ZXIsCisJCQkJCSAgICAidXBsb2FkLXBhY2s6IG5vdCBvdXIgcmVmICVzIiwKKwkJCQkJICAgIG9pZF90b19oZXgoJm9pZCkpOworCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IG5vdCBvdXIgcmVmICVzIiwKKwkJCSAgICBvaWRfdG9faGV4KCZvaWQpKTsKKwkJfQorCisJCWlmICghKG8tPmZsYWdzICYgV0FOVEVEKSkgeworCQkJby0+ZmxhZ3MgfD0gV0FOVEVEOworCQkJYWRkX29iamVjdF9hcnJheShvLCBOVUxMLCB3YW50X29iaik7CisJCX0KKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV93YW50X3JlZihzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyLCBjb25zdCBjaGFyICpsaW5lLAorCQkJICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKndhbnRlZF9yZWZzLAorCQkJICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaikKK3sKKwljb25zdCBjaGFyICphcmc7CisJaWYgKHNraXBfcHJlZml4KGxpbmUsICJ3YW50LXJlZiAiLCAmYXJnKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCXN0cnVjdCBvYmplY3QgKm87CisKKwkJaWYgKHJlYWRfcmVmKGFyZywgJm9pZCkpIHsKKwkJCXBhY2tldF93cml0ZXJfZXJyb3Iod3JpdGVyLCAidW5rbm93biByZWYgJXMiLCBhcmcpOworCQkJZGllKCJ1bmtub3duIHJlZiAlcyIsIGFyZyk7CisJCX0KKworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHdhbnRlZF9yZWZzLCBhcmcpOworCQlpdGVtLT51dGlsID0gb2lkZHVwKCZvaWQpOworCisJCW8gPSBwYXJzZV9vYmplY3Rfb3JfZGllKCZvaWQsIGFyZyk7CisJCWlmICghKG8tPmZsYWdzICYgV0FOVEVEKSkgeworCQkJby0+ZmxhZ3MgfD0gV0FOVEVEOworCQkJYWRkX29iamVjdF9hcnJheShvLCBOVUxMLCB3YW50X29iaik7CisJCX0KKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9oYXZlKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBvaWRfYXJyYXkgKmhhdmVzKQoreworCWNvbnN0IGNoYXIgKmFyZzsKKwlpZiAoc2tpcF9wcmVmaXgobGluZSwgImhhdmUgIiwgJmFyZykpIHsKKwkJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisKKwkJaWYgKGdldF9vaWRfaGV4KGFyZywgJm9pZCkpCisJCQlkaWUoImdpdCB1cGxvYWQtcGFjazogZXhwZWN0ZWQgU0hBMSBvYmplY3QsIGdvdCAnJXMnIiwgYXJnKTsKKwkJb2lkX2FycmF5X2FwcGVuZChoYXZlcywgJm9pZCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2FyZ3Moc3RydWN0IHBhY2tldF9yZWFkZXIgKnJlcXVlc3QsCisJCQkgc3RydWN0IHVwbG9hZF9wYWNrX2RhdGEgKmRhdGEsCisJCQkgc3RydWN0IG9iamVjdF9hcnJheSAqd2FudF9vYmopCit7CisJd2hpbGUgKHBhY2tldF9yZWFkZXJfcmVhZChyZXF1ZXN0KSAhPSBQQUNLRVRfUkVBRF9GTFVTSCkgeworCQljb25zdCBjaGFyICphcmcgPSByZXF1ZXN0LT5saW5lOworCQljb25zdCBjaGFyICpwOworCisJCS8qIHByb2Nlc3Mgd2FudCAqLworCQlpZiAocGFyc2Vfd2FudCgmZGF0YS0+d3JpdGVyLCBhcmcsIHdhbnRfb2JqKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYWxsb3dfcmVmX2luX3dhbnQgJiYKKwkJICAgIHBhcnNlX3dhbnRfcmVmKCZkYXRhLT53cml0ZXIsIGFyZywgJmRhdGEtPndhbnRlZF9yZWZzLAorCQkJCSAgIHdhbnRfb2JqKSkKKwkJCWNvbnRpbnVlOworCQkvKiBwcm9jZXNzIGhhdmUgbGluZSAqLworCQlpZiAocGFyc2VfaGF2ZShhcmcsICZkYXRhLT5oYXZlcykpCisJCQljb250aW51ZTsKKworCQkvKiBwcm9jZXNzIGFyZ3MgbGlrZSB0aGluLXBhY2sgKi8KKwkJaWYgKCFzdHJjbXAoYXJnLCAidGhpbi1wYWNrIikpIHsKKwkJCXVzZV90aGluX3BhY2sgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAib2ZzLWRlbHRhIikpIHsKKwkJCXVzZV9vZnNfZGVsdGEgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAibm8tcHJvZ3Jlc3MiKSkgeworCQkJbm9fcHJvZ3Jlc3MgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiaW5jbHVkZS10YWciKSkgeworCQkJdXNlX2luY2x1ZGVfdGFnID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgImRvbmUiKSkgeworCQkJZGF0YS0+ZG9uZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNoYWxsb3cgcmVsYXRlZCBhcmd1bWVudHMgKi8KKwkJaWYgKHByb2Nlc3Nfc2hhbGxvdyhhcmcsICZkYXRhLT5zaGFsbG93cykpCisJCQljb250aW51ZTsKKwkJaWYgKHByb2Nlc3NfZGVlcGVuKGFyZywgJmRhdGEtPmRlcHRoKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJvY2Vzc19kZWVwZW5fc2luY2UoYXJnLCAmZGF0YS0+ZGVlcGVuX3NpbmNlLAorCQkJCQkgJmRhdGEtPmRlZXBlbl9yZXZfbGlzdCkpCisJCQljb250aW51ZTsKKwkJaWYgKHByb2Nlc3NfZGVlcGVuX25vdChhcmcsICZkYXRhLT5kZWVwZW5fbm90LAorCQkJCSAgICAgICAmZGF0YS0+ZGVlcGVuX3Jldl9saXN0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcChhcmcsICJkZWVwZW4tcmVsYXRpdmUiKSkgeworCQkJZGF0YS0+ZGVlcGVuX3JlbGF0aXZlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGFsbG93X2ZpbHRlciAmJiBza2lwX3ByZWZpeChhcmcsICJmaWx0ZXIgIiwgJnApKSB7CisJCQlsaXN0X29iamVjdHNfZmlsdGVyX2RpZV9pZl9wb3B1bGF0ZWQoJmZpbHRlcl9vcHRpb25zKTsKKwkJCXBhcnNlX2xpc3Rfb2JqZWN0c19maWx0ZXIoJmZpbHRlcl9vcHRpb25zLCBwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChnaXRfZW52X2Jvb2woIkdJVF9URVNUX1NJREVCQU5EX0FMTCIsIDApIHx8CisJCSAgICAgYWxsb3dfc2lkZWJhbmRfYWxsKSAmJgorCQkgICAgIXN0cmNtcChhcmcsICJzaWRlYmFuZC1hbGwiKSkgeworCQkJZGF0YS0+d3JpdGVyLnVzZV9zaWRlYmFuZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGlnbm9yZSB1bmtub3duIGxpbmVzIG1heWJlPyAqLworCQlkaWUoInVuZXhwZWN0ZWQgbGluZTogJyVzJyIsIGFyZyk7CisJfQorfQorCitzdGF0aWMgaW50IHByb2Nlc3NfaGF2ZXMoc3RydWN0IG9pZF9hcnJheSAqaGF2ZXMsIHN0cnVjdCBvaWRfYXJyYXkgKmNvbW1vbiwKKwkJCSBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpoYXZlX29iaikKK3sKKwlpbnQgaTsKKworCS8qIFByb2Nlc3MgaGF2ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaGF2ZXMtPm5yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkID0gJmhhdmVzLT5vaWRbaV07CisJCXN0cnVjdCBvYmplY3QgKm87CisJCWludCB3ZV9rbmV3X3RoZXlfaGF2ZSA9IDA7CisKKwkJaWYgKCFoYXNfb2JqZWN0X2ZpbGUob2lkKSkKKwkJCWNvbnRpbnVlOworCisJCW9pZF9hcnJheV9hcHBlbmQoY29tbW9uLCBvaWQpOworCisJCW8gPSBwYXJzZV9vYmplY3QodGhlX3JlcG9zaXRvcnksIG9pZCk7CisJCWlmICghbykKKwkJCWRpZSgib29wcyAoJXMpIiwgb2lkX3RvX2hleChvaWQpKTsKKwkJaWYgKG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOworCQkJaWYgKG8tPmZsYWdzICYgVEhFWV9IQVZFKQorCQkJCXdlX2tuZXdfdGhleV9oYXZlID0gMTsKKwkJCWVsc2UKKwkJCQlvLT5mbGFncyB8PSBUSEVZX0hBVkU7CisJCQlpZiAoIW9sZGVzdF9oYXZlIHx8IChjb21taXQtPmRhdGUgPCBvbGRlc3RfaGF2ZSkpCisJCQkJb2xkZXN0X2hhdmUgPSBjb21taXQtPmRhdGU7CisJCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCQkgICAgIHBhcmVudHM7CisJCQkgICAgIHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KQorCQkJCXBhcmVudHMtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBUSEVZX0hBVkU7CisJCX0KKwkJaWYgKCF3ZV9rbmV3X3RoZXlfaGF2ZSkKKwkJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgaGF2ZV9vYmopOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlbmRfYWNrcyhzdHJ1Y3QgcGFja2V0X3dyaXRlciAqd3JpdGVyLCBzdHJ1Y3Qgb2lkX2FycmF5ICphY2tzLAorCQkgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfYXJyYXkgKmhhdmVfb2JqLAorCQkgICAgIHN0cnVjdCBvYmplY3RfYXJyYXkgKndhbnRfb2JqKQoreworCWludCBpOworCisJcGFja2V0X3dyaXRlcl93cml0ZSh3cml0ZXIsICJhY2tub3dsZWRnbWVudHNcbiIpOworCisJLyogU2VuZCBBY2tzICovCisJaWYgKCFhY2tzLT5ucikKKwkJcGFja2V0X3dyaXRlcl93cml0ZSh3cml0ZXIsICJOQUtcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGFja3MtPm5yOyBpKyspIHsKKwkJcGFja2V0X3dyaXRlcl93cml0ZSh3cml0ZXIsICJBQ0sgJXNcbiIsCisJCQkJICAgIG9pZF90b19oZXgoJmFja3MtPm9pZFtpXSkpOworCX0KKworCWlmIChva190b19naXZlX3VwKGhhdmVfb2JqLCB3YW50X29iaikpIHsKKwkJLyogU2VuZCBSZWFkeSAqLworCQlwYWNrZXRfd3JpdGVyX3dyaXRlKHdyaXRlciwgInJlYWR5XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19oYXZlc19hbmRfc2VuZF9hY2tzKHN0cnVjdCB1cGxvYWRfcGFja19kYXRhICpkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpoYXZlX29iaiwKKwkJCQkgICAgICAgc3RydWN0IG9iamVjdF9hcnJheSAqd2FudF9vYmopCit7CisJc3RydWN0IG9pZF9hcnJheSBjb21tb24gPSBPSURfQVJSQVlfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKworCXByb2Nlc3NfaGF2ZXMoJmRhdGEtPmhhdmVzLCAmY29tbW9uLCBoYXZlX29iaik7CisJaWYgKGRhdGEtPmRvbmUpIHsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKHNlbmRfYWNrcygmZGF0YS0+d3JpdGVyLCAmY29tbW9uLCBoYXZlX29iaiwgd2FudF9vYmopKSB7CisJCXBhY2tldF93cml0ZXJfZGVsaW0oJmRhdGEtPndyaXRlcik7CisJCXJldCA9IDE7CisJfSBlbHNlIHsKKwkJLyogQWRkIEZsdXNoICovCisJCXBhY2tldF93cml0ZXJfZmx1c2goJmRhdGEtPndyaXRlcik7CisJCXJldCA9IDA7CisJfQorCisJb2lkX2FycmF5X2NsZWFyKCZkYXRhLT5oYXZlcyk7CisJb2lkX2FycmF5X2NsZWFyKCZjb21tb24pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfd2FudGVkX3JlZl9pbmZvKHN0cnVjdCB1cGxvYWRfcGFja19kYXRhICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJaWYgKCFkYXRhLT53YW50ZWRfcmVmcy5ucikKKwkJcmV0dXJuOworCisJcGFja2V0X3dyaXRlcl93cml0ZSgmZGF0YS0+d3JpdGVyLCAid2FudGVkLXJlZnNcbiIpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGF0YS0+d2FudGVkX3JlZnMpIHsKKwkJcGFja2V0X3dyaXRlcl93cml0ZSgmZGF0YS0+d3JpdGVyLCAiJXMgJXNcbiIsCisJCQkJICAgIG9pZF90b19oZXgoaXRlbS0+dXRpbCksCisJCQkJICAgIGl0ZW0tPnN0cmluZyk7CisJfQorCisJcGFja2V0X3dyaXRlcl9kZWxpbSgmZGF0YS0+d3JpdGVyKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9zaGFsbG93X2luZm8oc3RydWN0IHVwbG9hZF9wYWNrX2RhdGEgKmRhdGEsCisJCQkgICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICp3YW50X29iaikKK3sKKwkvKiBObyBzaGFsbG93IGluZm8gbmVlZHMgdG8gYmUgc2VudCAqLworCWlmICghZGF0YS0+ZGVwdGggJiYgIWRhdGEtPmRlZXBlbl9yZXZfbGlzdCAmJiAhZGF0YS0+c2hhbGxvd3MubnIgJiYKKwkgICAgIWlzX3JlcG9zaXRvcnlfc2hhbGxvdyh0aGVfcmVwb3NpdG9yeSkpCisJCXJldHVybjsKKworCXBhY2tldF93cml0ZXJfd3JpdGUoJmRhdGEtPndyaXRlciwgInNoYWxsb3ctaW5mb1xuIik7CisKKwlpZiAoIXNlbmRfc2hhbGxvd19saXN0KCZkYXRhLT53cml0ZXIsIGRhdGEtPmRlcHRoLAorCQkJICAgICAgIGRhdGEtPmRlZXBlbl9yZXZfbGlzdCwKKwkJCSAgICAgICBkYXRhLT5kZWVwZW5fc2luY2UsICZkYXRhLT5kZWVwZW5fbm90LAorCQkJICAgICAgIGRhdGEtPmRlZXBlbl9yZWxhdGl2ZSwKKwkJCSAgICAgICAmZGF0YS0+c2hhbGxvd3MsIHdhbnRfb2JqKSAmJgorCSAgICBpc19yZXBvc2l0b3J5X3NoYWxsb3codGhlX3JlcG9zaXRvcnkpKQorCQlkZWVwZW4oJmRhdGEtPndyaXRlciwgSU5GSU5JVEVfREVQVEgsIGRhdGEtPmRlZXBlbl9yZWxhdGl2ZSwKKwkJICAgICAgICZkYXRhLT5zaGFsbG93cywgd2FudF9vYmopOworCisJcGFja2V0X2RlbGltKDEpOworfQorCitlbnVtIGZldGNoX3N0YXRlIHsKKwlGRVRDSF9QUk9DRVNTX0FSR1MgPSAwLAorCUZFVENIX1NFTkRfQUNLUywKKwlGRVRDSF9TRU5EX1BBQ0ssCisJRkVUQ0hfRE9ORSwKK307CisKK2ludCB1cGxvYWRfcGFja192MihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGFyZ3ZfYXJyYXkgKmtleXMsCisJCSAgIHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZXF1ZXN0KQoreworCWVudW0gZmV0Y2hfc3RhdGUgc3RhdGUgPSBGRVRDSF9QUk9DRVNTX0FSR1M7CisJc3RydWN0IHVwbG9hZF9wYWNrX2RhdGEgZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGhhdmVfb2JqID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IG9iamVjdF9hcnJheSB3YW50X29iaiA9IE9CSkVDVF9BUlJBWV9JTklUOworCisJY2xlYXJfb2JqZWN0X2ZsYWdzKEFMTF9GTEFHUyk7CisKKwlnaXRfY29uZmlnKHVwbG9hZF9wYWNrX2NvbmZpZywgTlVMTCk7CisKKwl1cGxvYWRfcGFja19kYXRhX2luaXQoJmRhdGEpOworCXVzZV9zaWRlYmFuZCA9IExBUkdFX1BBQ0tFVF9NQVg7CisKKwl3aGlsZSAoc3RhdGUgIT0gRkVUQ0hfRE9ORSkgeworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgRkVUQ0hfUFJPQ0VTU19BUkdTOgorCQkJcHJvY2Vzc19hcmdzKHJlcXVlc3QsICZkYXRhLCAmd2FudF9vYmopOworCisJCQlpZiAoIXdhbnRfb2JqLm5yKSB7CisJCQkJLyoKKwkJCQkgKiBSZXF1ZXN0IGRpZG4ndCBjb250YWluIGFueSAnd2FudCcgbGluZXMsCisJCQkJICogZ3Vlc3MgdGhleSBkaWRuJ3Qgd2FudCBhbnl0aGluZy4KKwkJCQkgKi8KKwkJCQlzdGF0ZSA9IEZFVENIX0RPTkU7CisJCQl9IGVsc2UgaWYgKGRhdGEuaGF2ZXMubnIpIHsKKwkJCQkvKgorCQkJCSAqIFJlcXVlc3QgaGFkICdoYXZlJyBsaW5lcywgc28gbGV0cyBBQ0sgdGhlbS4KKwkJCQkgKi8KKwkJCQlzdGF0ZSA9IEZFVENIX1NFTkRfQUNLUzsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBSZXF1ZXN0IGhhZCAnd2FudCdzIGJ1dCBubyAnaGF2ZSdzIHNvIHdlIGNhbgorCQkJCSAqIGltbWVkaWV0bHkgZ28gdG8gY29uc3RydWN0IGFuZCBzZW5kIGEgcGFjay4KKwkJCQkgKi8KKwkJCQlzdGF0ZSA9IEZFVENIX1NFTkRfUEFDSzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZFVENIX1NFTkRfQUNLUzoKKwkJCWlmIChwcm9jZXNzX2hhdmVzX2FuZF9zZW5kX2Fja3MoJmRhdGEsICZoYXZlX29iaiwKKwkJCQkJCQkmd2FudF9vYmopKQorCQkJCXN0YXRlID0gRkVUQ0hfU0VORF9QQUNLOworCQkJZWxzZQorCQkJCXN0YXRlID0gRkVUQ0hfRE9ORTsKKwkJCWJyZWFrOworCQljYXNlIEZFVENIX1NFTkRfUEFDSzoKKwkJCXNlbmRfd2FudGVkX3JlZl9pbmZvKCZkYXRhKTsKKwkJCXNlbmRfc2hhbGxvd19pbmZvKCZkYXRhLCAmd2FudF9vYmopOworCisJCQlwYWNrZXRfd3JpdGVyX3dyaXRlKCZkYXRhLndyaXRlciwgInBhY2tmaWxlXG4iKTsKKwkJCWNyZWF0ZV9wYWNrX2ZpbGUoJmhhdmVfb2JqLCAmd2FudF9vYmopOworCQkJc3RhdGUgPSBGRVRDSF9ET05FOworCQkJYnJlYWs7CisJCWNhc2UgRkVUQ0hfRE9ORToKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJdXBsb2FkX3BhY2tfZGF0YV9jbGVhcigmZGF0YSk7CisJb2JqZWN0X2FycmF5X2NsZWFyKCZoYXZlX29iaik7CisJb2JqZWN0X2FycmF5X2NsZWFyKCZ3YW50X29iaik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1cGxvYWRfcGFja19hZHZlcnRpc2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgIHN0cnVjdCBzdHJidWYgKnZhbHVlKQoreworCWlmICh2YWx1ZSkgeworCQlpbnQgYWxsb3dfZmlsdGVyX3ZhbHVlOworCQlpbnQgYWxsb3dfcmVmX2luX3dhbnQ7CisJCWludCBhbGxvd19zaWRlYmFuZF9hbGxfdmFsdWU7CisKKwkJc3RyYnVmX2FkZHN0cih2YWx1ZSwgInNoYWxsb3ciKTsKKworCQlpZiAoIXJlcG9fY29uZmlnX2dldF9ib29sKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkgInVwbG9hZHBhY2suYWxsb3dmaWx0ZXIiLAorCQkJCQkgJmFsbG93X2ZpbHRlcl92YWx1ZSkgJiYKKwkJICAgIGFsbG93X2ZpbHRlcl92YWx1ZSkKKwkJCXN0cmJ1Zl9hZGRzdHIodmFsdWUsICIgZmlsdGVyIik7CisKKwkJaWYgKCFyZXBvX2NvbmZpZ19nZXRfYm9vbCh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJICJ1cGxvYWRwYWNrLmFsbG93cmVmaW53YW50IiwKKwkJCQkJICZhbGxvd19yZWZfaW5fd2FudCkgJiYKKwkJICAgIGFsbG93X3JlZl9pbl93YW50KQorCQkJc3RyYnVmX2FkZHN0cih2YWx1ZSwgIiByZWYtaW4td2FudCIpOworCisJCWlmIChnaXRfZW52X2Jvb2woIkdJVF9URVNUX1NJREVCQU5EX0FMTCIsIDApIHx8CisJCSAgICAoIXJlcG9fY29uZmlnX2dldF9ib29sKHRoZV9yZXBvc2l0b3J5LAorCQkJCQkgICAidXBsb2FkcGFjay5hbGxvd3NpZGViYW5kYWxsIiwKKwkJCQkJICAgJmFsbG93X3NpZGViYW5kX2FsbF92YWx1ZSkgJiYKKwkJICAgICBhbGxvd19zaWRlYmFuZF9hbGxfdmFsdWUpKQorCQkJc3RyYnVmX2FkZHN0cih2YWx1ZSwgIiBzaWRlYmFuZC1hbGwiKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3VwbG9hZC1wYWNrLmggYi91cGxvYWQtcGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYWZlMTYKLS0tIC9kZXYvbnVsbAorKysgYi91cGxvYWQtcGFjay5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgVVBMT0FEX1BBQ0tfSAorI2RlZmluZSBVUExPQURfUEFDS19ICisKK3N0cnVjdCB1cGxvYWRfcGFja19vcHRpb25zIHsKKwlpbnQgc3RhdGVsZXNzX3JwYzsKKwlpbnQgYWR2ZXJ0aXNlX3JlZnM7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CisJaW50IGRhZW1vbl9tb2RlOworfTsKKwordm9pZCB1cGxvYWRfcGFjayhzdHJ1Y3QgdXBsb2FkX3BhY2tfb3B0aW9ucyAqb3B0aW9ucyk7CisKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IGFyZ3ZfYXJyYXk7CitzdHJ1Y3QgcGFja2V0X3JlYWRlcjsKK2ludCB1cGxvYWRfcGFja192MihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IGFyZ3ZfYXJyYXkgKmtleXMsCisJCSAgIHN0cnVjdCBwYWNrZXRfcmVhZGVyICpyZXF1ZXN0KTsKKworc3RydWN0IHN0cmJ1ZjsKK2ludCB1cGxvYWRfcGFja19hZHZlcnRpc2Uoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgIHN0cnVjdCBzdHJidWYgKnZhbHVlKTsKKworI2VuZGlmIC8qIFVQTE9BRF9QQUNLX0ggKi8KZGlmZiAtLWdpdCBhL3VybC5jIGIvdXJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0YmQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3VybC5jCkBAIC0wLDAgKzEsMTE5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKworaW50IGlzX3VybHNjaGVtZWNoYXIoaW50IGZpcnN0X2ZsYWcsIGludCBjaCkKK3sKKwkvKgorCSAqIFRoZSBzZXQgb2YgdmFsaWQgVVJMIHNjaGVtZXMsIGFzIHBlciBTVEQ2NiAoUkZDMzk4NikgaXMKKwkgKiAnW0EtWmEtel1bQS1aYS16MC05Ky4tXSonLiBCdXQgdXNlIHNsaWdodGx5IGxvb3NlciBjaGVjaworCSAqIG9mICdbQS1aYS16MC05XVtBLVphLXowLTkrLi1dKicgYmVjYXVzZSBlYXJsaWVyIHZlcnNpb24KKwkgKiBvZiBjaGVjayB1c2VkICdbQS1aYS16MC05XSsnIHNvIG5vdCB0byBicmVhayBhbnkgcmVtb3RlCisJICogaGVscGVycy4KKwkgKi8KKwlpbnQgYWxwaGFudW1lcmljLCBzcGVjaWFsOworCWFscGhhbnVtZXJpYyA9IGNoID4gMCAmJiBpc2FsbnVtKGNoKTsKKwlzcGVjaWFsID0gY2ggPT0gJysnIHx8IGNoID09ICctJyB8fCBjaCA9PSAnLic7CisJcmV0dXJuIGFscGhhbnVtZXJpYyB8fCAoIWZpcnN0X2ZsYWcgJiYgc3BlY2lhbCk7Cit9CisKK2ludCBpc191cmwoY29uc3QgY2hhciAqdXJsKQoreworCS8qIElzICJzY2hlbWUiIHBhcnQgcmVhc29uYWJsZT8gKi8KKwlpZiAoIXVybCB8fCAhaXNfdXJsc2NoZW1lY2hhcigxLCAqdXJsKyspKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoKnVybCAmJiAqdXJsICE9ICc6JykgeworCQlpZiAoIWlzX3VybHNjaGVtZWNoYXIoMCwgKnVybCsrKSkKKwkJCXJldHVybiAwOworCX0KKwkvKiBXZSd2ZSBzZWVuICJzY2hlbWUiOyB3ZSB3YW50IGNvbG9uLXNsYXNoLXNsYXNoICovCisJcmV0dXJuICh1cmxbMF0gPT0gJzonICYmIHVybFsxXSA9PSAnLycgJiYgdXJsWzJdID09ICcvJyk7Cit9CisKK3N0YXRpYyBjaGFyICp1cmxfZGVjb2RlX2ludGVybmFsKGNvbnN0IGNoYXIgKipxdWVyeSwgaW50IGxlbiwKKwkJCQkgY29uc3QgY2hhciAqc3RvcF9hdCwgc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCSBpbnQgZGVjb2RlX3BsdXMpCit7CisJY29uc3QgY2hhciAqcSA9ICpxdWVyeTsKKworCXdoaWxlIChsZW4pIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKnE7CisKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCWlmIChzdG9wX2F0ICYmIHN0cmNocihzdG9wX2F0LCBjKSkgeworCQkJcSsrOworCQkJbGVuLS07CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjID09ICclJyAmJiAobGVuIDwgMCB8fCBsZW4gPj0gMykpIHsKKwkJCWludCB2YWwgPSBoZXgyY2hyKHEgKyAxKTsKKwkJCWlmICgwIDwgdmFsKSB7CisJCQkJc3RyYnVmX2FkZGNoKG91dCwgdmFsKTsKKwkJCQlxICs9IDM7CisJCQkJbGVuIC09IDM7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoZGVjb2RlX3BsdXMgJiYgYyA9PSAnKycpCisJCQlzdHJidWZfYWRkY2gob3V0LCAnICcpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2gob3V0LCBjKTsKKwkJcSsrOworCQlsZW4tLTsKKwl9CisJKnF1ZXJ5ID0gcTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaChvdXQsIE5VTEwpOworfQorCitjaGFyICp1cmxfZGVjb2RlKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlyZXR1cm4gdXJsX2RlY29kZV9tZW0odXJsLCBzdHJsZW4odXJsKSk7Cit9CisKK2NoYXIgKnVybF9kZWNvZGVfbWVtKGNvbnN0IGNoYXIgKnVybCwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmNvbG9uID0gbWVtY2hyKHVybCwgJzonLCBsZW4pOworCisJLyogU2tpcCBwcm90b2NvbCBwYXJ0IGlmIHByZXNlbnQgKi8KKwlpZiAoY29sb24gJiYgdXJsIDwgY29sb24pIHsKKwkJc3RyYnVmX2FkZCgmb3V0LCB1cmwsIGNvbG9uIC0gdXJsKTsKKwkJbGVuIC09IGNvbG9uIC0gdXJsOworCQl1cmwgPSBjb2xvbjsKKwl9CisJcmV0dXJuIHVybF9kZWNvZGVfaW50ZXJuYWwoJnVybCwgbGVuLCBOVUxMLCAmb3V0LCAwKTsKK30KKworY2hhciAqdXJsX3BlcmNlbnRfZGVjb2RlKGNvbnN0IGNoYXIgKmVuY29kZWQpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlyZXR1cm4gdXJsX2RlY29kZV9pbnRlcm5hbCgmZW5jb2RlZCwgc3RybGVuKGVuY29kZWQpLCBOVUxMLCAmb3V0LCAwKTsKK30KKworY2hhciAqdXJsX2RlY29kZV9wYXJhbWV0ZXJfbmFtZShjb25zdCBjaGFyICoqcXVlcnkpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlyZXR1cm4gdXJsX2RlY29kZV9pbnRlcm5hbChxdWVyeSwgLTEsICImPSIsICZvdXQsIDEpOworfQorCitjaGFyICp1cmxfZGVjb2RlX3BhcmFtZXRlcl92YWx1ZShjb25zdCBjaGFyICoqcXVlcnkpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlyZXR1cm4gdXJsX2RlY29kZV9pbnRlcm5hbChxdWVyeSwgLTEsICImIiwgJm91dCwgMSk7Cit9CisKK3ZvaWQgZW5kX3VybF93aXRoX3NsYXNoKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsKQoreworCXN0cmJ1Zl9hZGRzdHIoYnVmLCB1cmwpOworCXN0cmJ1Zl9jb21wbGV0ZShidWYsICcvJyk7Cit9CisKK3ZvaWQgc3RyX2VuZF91cmxfd2l0aF9zbGFzaChjb25zdCBjaGFyICp1cmwsIGNoYXIgKipkZXN0KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJZW5kX3VybF93aXRoX3NsYXNoKCZidWYsIHVybCk7CisJZnJlZSgqZGVzdCk7CisJKmRlc3QgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvdXJsLmggYi91cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTI3YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvdXJsLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBVUkxfSAorI2RlZmluZSBVUkxfSAorCitzdHJ1Y3Qgc3RyYnVmOworCitpbnQgaXNfdXJsKGNvbnN0IGNoYXIgKnVybCk7CitpbnQgaXNfdXJsc2NoZW1lY2hhcihpbnQgZmlyc3RfZmxhZywgaW50IGNoKTsKK2NoYXIgKnVybF9kZWNvZGUoY29uc3QgY2hhciAqdXJsKTsKK2NoYXIgKnVybF9kZWNvZGVfbWVtKGNvbnN0IGNoYXIgKnVybCwgaW50IGxlbik7CisKKy8qCisgKiBTaW1pbGFyIHRvIHRoZSB1cmxfZGVjb2RlX3ssbWVtfSBtZXRob2RzIGFib3ZlLCBidXQgZG9lc24ndCBhc3N1bWUgdGhlcmUKKyAqIGlzIGEgc2NoZW1lIGZvbGxvd2VkIGJ5IGEgOiBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZy4gSW5zdGVhZCwgJS1zZXF1ZW5jZXMKKyAqIGJlZm9yZSBhbnkgOiBhcmUgYWxzbyBwYXJzZWQuCisgKi8KK2NoYXIgKnVybF9wZXJjZW50X2RlY29kZShjb25zdCBjaGFyICplbmNvZGVkKTsKKworY2hhciAqdXJsX2RlY29kZV9wYXJhbWV0ZXJfbmFtZShjb25zdCBjaGFyICoqcXVlcnkpOworY2hhciAqdXJsX2RlY29kZV9wYXJhbWV0ZXJfdmFsdWUoY29uc3QgY2hhciAqKnF1ZXJ5KTsKKwordm9pZCBlbmRfdXJsX3dpdGhfc2xhc2goc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwpOwordm9pZCBzdHJfZW5kX3VybF93aXRoX3NsYXNoKGNvbnN0IGNoYXIgKnVybCwgY2hhciAqKmRlc3QpOworCisjZW5kaWYgLyogVVJMX0ggKi8KZGlmZiAtLWdpdCBhL3VybG1hdGNoLmMgYi91cmxtYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MjcyYTUKLS0tIC9kZXYvbnVsbAorKysgYi91cmxtYXRjaC5jCkBAIC0wLDAgKzEsNjA5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ1cmxtYXRjaC5oIgorCisjZGVmaW5lIFVSTF9BTFBIQSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKyNkZWZpbmUgVVJMX0RJR0lUICIwMTIzNDU2Nzg5IgorI2RlZmluZSBVUkxfQUxQSEFESUdJVCBVUkxfQUxQSEEgVVJMX0RJR0lUCisjZGVmaW5lIFVSTF9TQ0hFTUVfQ0hBUlMgVVJMX0FMUEhBRElHSVQgIisuLSIKKyNkZWZpbmUgVVJMX0hPU1RfQ0hBUlMgVVJMX0FMUEhBRElHSVQgIi4tWzpdIiAvKiBJUHY2IGxpdGVyYWxzIG5lZWQgWzpdICovCisjZGVmaW5lIFVSTF9VTlNBRkVfQ0hBUlMgIiA8PlwiJXt9fFxcXmAiIC8qIHBsdXMgMHgwMC0weDFGLDB4N0YtMHhGRiAqLworI2RlZmluZSBVUkxfR0VOX1JFU0VSVkVEICI6Lz8jW11AIgorI2RlZmluZSBVUkxfU1VCX1JFU0VSVkVEICIhJCYnKCkqKyw7PSIKKyNkZWZpbmUgVVJMX1JFU0VSVkVEIFVSTF9HRU5fUkVTRVJWRUQgVVJMX1NVQl9SRVNFUlZFRCAvKiBvbmx5IGFsbG93ZWQgZGVsaW1zICovCisKK3N0YXRpYyBpbnQgYXBwZW5kX25vcm1hbGl6ZWRfZXNjYXBlcyhzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJICAgICBjb25zdCBjaGFyICpmcm9tLAorCQkJCSAgICAgc2l6ZV90IGZyb21fbGVuLAorCQkJCSAgICAgY29uc3QgY2hhciAqZXNjX2V4dHJhLAorCQkJCSAgICAgY29uc3QgY2hhciAqZXNjX29rKQoreworCS8qCisJICogQXBwZW5kIHRvIHN0cmJ1ZiAnYnVmJyBjaGFyYWN0ZXJzIGZyb20gc3RyaW5nICdmcm9tJyB3aXRoIGxlbmd0aAorCSAqICdmcm9tX2xlbicgd2hpbGUgdW5lc2NhcGluZyBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90IG5lZWQgdG8gYmUgZXNjYXBlZAorCSAqIGFuZCBlc2NhcGluZyBjaGFyYWN0ZXJzIHRoYXQgZG8uICBUaGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gZXNjYXBlCisJICogKHRoZSBjb21wbGVtZW50IG9mIHdoaWNoIGlzIHVuZXNjYXBlZCkgc3RhcnRzIG91dCBhcyB0aGUgUkZDIDM5ODYKKwkgKiB1bnNhZmUgY2hhcmFjdGVycyAoMHgwMC0weDFGLDB4N0YtMHhGRiwiIDw+XCIjJXt9fFxcXmAiKS4gIElmCisJICogJ2VzY19leHRyYScgaXMgbm90IE5VTEwsIHRob3NlIGFkZGl0aW9uYWwgY2hhcmFjdGVycyB3aWxsIGFsc28gYWx3YXlzCisJICogYmUgZXNjYXBlZC4gIElmICdlc2Nfb2snIGlzIG5vdCBOVUxMLCB0aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbGVmdAorCSAqIGVzY2FwZWQgaWYgZm91bmQgdGhhdCB3YXksIGJ1dCB3aWxsIG5vdCBiZSB1bmVzY2FwZWQgb3RoZXJ3aXNlICh1c2VkCisJICogZm9yIGRlbGltaXRlcnMpLiAgSWYgYSAlLWVzY2FwZSBzZXF1ZW5jZSBpcyBlbmNvdW50ZXJlZCB0aGF0IGlzIG5vdAorCSAqIGZvbGxvd2VkIGJ5IDIgaGV4YWRlY2ltYWwgZGlnaXRzLCB0aGUgc2VxdWVuY2UgaXMgaW52YWxpZCBhbmQKKwkgKiBmYWxzZSAoMCkgd2lsbCBiZSByZXR1cm5lZC4gIE90aGVyd2lzZSB0cnVlICgxKSB3aWxsIGJlIHJldHVybmVkIGZvcgorCSAqIHN1Y2Nlc3MuCisJICoKKwkgKiBOb3RlIHRoYXQgYWxsICUtZXNjYXBlIHNlcXVlbmNlcyB3aWxsIGJlIG5vcm1hbGl6ZWQgdG8gVVBQRVJDQVNFCisJICogYXMgaW5kaWNhdGVkIGluIFJGQyAzOTg2LiAgVW5sZXNzIGluY2x1ZGVkIGluIGVzY19leHRyYSBvciBlc2Nfb2sKKwkgKiBhbHBoYW51bWVyaWNzIGFuZCAiLS5ffiIgd2lsbCBhbHdheXMgYmUgdW5lc2NhcGVkIGFzIHBlciBSRkMgMzk4Ni4KKwkgKi8KKworCXdoaWxlIChmcm9tX2xlbikgeworCQlpbnQgY2ggPSAqZnJvbSsrOworCQlpbnQgd2FzX2VzYyA9IDA7CisKKwkJZnJvbV9sZW4tLTsKKwkJaWYgKGNoID09ICclJykgeworCQkJaWYgKGZyb21fbGVuIDwgMikKKwkJCQlyZXR1cm4gMDsKKwkJCWNoID0gaGV4MmNocihmcm9tKTsKKwkJCWlmIChjaCA8IDApCisJCQkJcmV0dXJuIDA7CisJCQlmcm9tICs9IDI7CisJCQlmcm9tX2xlbiAtPSAyOworCQkJd2FzX2VzYyA9IDE7CisJCX0KKwkJaWYgKCh1bnNpZ25lZCBjaGFyKWNoIDw9IDB4MUYgfHwgKHVuc2lnbmVkIGNoYXIpY2ggPj0gMHg3RiB8fAorCQkgICAgc3RyY2hyKFVSTF9VTlNBRkVfQ0hBUlMsIGNoKSB8fAorCQkgICAgKGVzY19leHRyYSAmJiBzdHJjaHIoZXNjX2V4dHJhLCBjaCkpIHx8CisJCSAgICAod2FzX2VzYyAmJiBzdHJjaHIoZXNjX29rLCBjaCkpKQorCQkJc3RyYnVmX2FkZGYoYnVmLCAiJSUlMDJYIiwgKHVuc2lnbmVkIGNoYXIpY2gpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2goYnVmLCBjaCk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICplbmRfb2ZfdG9rZW4oY29uc3QgY2hhciAqcywgaW50IGMsIHNpemVfdCBuKQoreworCWNvbnN0IGNoYXIgKm5leHQgPSBtZW1jaHIocywgYywgbik7CisJaWYgKCFuZXh0KQorCQluZXh0ID0gcyArIG47CisJcmV0dXJuIG5leHQ7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfaG9zdChjb25zdCBzdHJ1Y3QgdXJsX2luZm8gKnVybF9pbmZvLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXJsX2luZm8gKnBhdHRlcm5faW5mbykKK3sKKwljb25zdCBjaGFyICp1cmwgPSB1cmxfaW5mby0+dXJsICsgdXJsX2luZm8tPmhvc3Rfb2ZmOworCWNvbnN0IGNoYXIgKnBhdCA9IHBhdHRlcm5faW5mby0+dXJsICsgcGF0dGVybl9pbmZvLT5ob3N0X29mZjsKKwlpbnQgdXJsX2xlbiA9IHVybF9pbmZvLT5ob3N0X2xlbjsKKwlpbnQgcGF0X2xlbiA9IHBhdHRlcm5faW5mby0+aG9zdF9sZW47CisKKwl3aGlsZSAodXJsX2xlbiAmJiBwYXRfbGVuKSB7CisJCWNvbnN0IGNoYXIgKnVybF9uZXh0ID0gZW5kX29mX3Rva2VuKHVybCwgJy4nLCB1cmxfbGVuKTsKKwkJY29uc3QgY2hhciAqcGF0X25leHQgPSBlbmRfb2ZfdG9rZW4ocGF0LCAnLicsIHBhdF9sZW4pOworCisJCWlmIChwYXRfbmV4dCA9PSBwYXQgKyAxICYmIHBhdFswXSA9PSAnKicpCisJCQkvKiB3aWxkY2FyZCBtYXRjaGVzIGFueXRoaW5nICovCisJCQk7CisJCWVsc2UgaWYgKChwYXRfbmV4dCAtIHBhdCkgPT0gKHVybF9uZXh0IC0gdXJsKSAmJgorCQkJICFtZW1jbXAodXJsLCBwYXQsIHVybF9uZXh0IC0gdXJsKSkKKwkJCS8qIHRoZSBjb21wb25lbnRzIGFyZSB0aGUgc2FtZSAqLworCQkJOworCQllbHNlCisJCQlyZXR1cm4gMDsgLyogZm91bmQgYW4gdW5tYXRjaCAqLworCisJCWlmICh1cmxfbmV4dCA8IHVybCArIHVybF9sZW4pCisJCQl1cmxfbmV4dCsrOworCQl1cmxfbGVuIC09IHVybF9uZXh0IC0gdXJsOworCQl1cmwgPSB1cmxfbmV4dDsKKwkJaWYgKHBhdF9uZXh0IDwgcGF0ICsgcGF0X2xlbikKKwkJCXBhdF9uZXh0Kys7CisJCXBhdF9sZW4gLT0gcGF0X25leHQgLSBwYXQ7CisJCXBhdCA9IHBhdF9uZXh0OworCX0KKworCXJldHVybiAoIXVybF9sZW4gJiYgIXBhdF9sZW4pOworfQorCitzdGF0aWMgY2hhciAqdXJsX25vcm1hbGl6ZV8xKGNvbnN0IGNoYXIgKnVybCwgc3RydWN0IHVybF9pbmZvICpvdXRfaW5mbywgY2hhciBhbGxvd19nbG9icykKK3sKKwkvKgorCSAqIE5vcm1hbGl6ZSBOVUwtdGVybWluYXRlZCB1cmwgdXNpbmcgdGhlIGZvbGxvd2luZyBydWxlczoKKwkgKgorCSAqIDEuIENhc2UtaW5zZW5zaXRpdmUgcGFydHMgb2YgdXJsIHdpbGwgYmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UKKwkgKiAyLiAlLWVuY29kZWQgY2hhcmFjdGVycyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJlIHdpbGwgYmUgdW5lbmNvZGVkCisJICogMy4gQ2hhcmFjdGVycyB0aGF0IGFyZSBub3QgJS1lbmNvZGVkIGFuZCBtdXN0IGJlIHdpbGwgYmUgZW5jb2RlZAorCSAqIDQuIEFsbCAlLWVuY29kaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlIGhleGFkZWNpbWFsCisJICogNS4gTGVhZGluZyAwcyBhcmUgcmVtb3ZlZCBmcm9tIHBvcnQgbnVtYmVycworCSAqIDYuIElmIHRoZSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBzY2hlbWUgaXMgZ2l2ZW4gaXQgd2lsbCBiZSByZW1vdmVkCisJICogNy4gQSBwYXRoIHBhcnQgKGluY2x1ZGluZyBlbXB0eSkgbm90IHN0YXJ0aW5nIHdpdGggJy8nIGhhcyBvbmUgYWRkZWQKKwkgKiA4LiBBbnkgZG90IHNlZ21lbnRzICguIG9yIC4uKSBpbiB0aGUgcGF0aCBhcmUgcmVzb2x2ZWQgYW5kIHJlbW92ZWQKKwkgKiA5LiBJUHY2IGhvc3QgbGl0ZXJhbHMgYXJlIGFsbG93ZWQgKGJ1dCBub3Qgbm9ybWFsaXplZCBvciB2YWxpZGF0ZWQpCisJICoKKwkgKiBUaGUgcnVsZXMgYXJlIGJhc2VkIG9uIGluZm9ybWF0aW9uIGluIFJGQyAzOTg2LgorCSAqCisJICogUGxlYXNlIG5vdGUgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBhIGZ1bGwgVVJMIGluY2x1ZGluZyBhIHNjaGVtZQorCSAqIGFuZCBob3N0IHBhcnQgKGV4Y2VwdCBmb3IgZmlsZTogVVJMcyB3aGljaCBtYXkgaGF2ZSBhbiBlbXB0eSBob3N0KS4KKwkgKgorCSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIHRoYXQgbXVzdCBiZSBmcmVlZAorCSAqIG9yIE5VTEwgaWYgdGhlIHVybCBpcyBub3QgdmFsaWQuCisJICoKKwkgKiBJZiBvdXRfaW5mbyBpcyBub24tTlVMTCwgdGhlIHVybCBhbmQgZXJyIGZpZWxkcyB0aGVyZWluIHdpbGwgYWx3YXlzCisJICogYmUgc2V0LiAgSWYgYSBub24tTlVMTCB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBzdG9yZWQgaW4KKwkgKiBvdXRfaW5mby0+dXJsIGFzIHdlbGwsIG91dF9pbmZvLT5lcnIgd2lsbCBiZSBzZXQgdG8gTlVMTCBhbmQgdGhlCisJICogb3RoZXIgZmllbGRzIG9mICpvdXRfaW5mbyB3aWxsIGFsc28gYmUgZmlsbGVkIGluLiAgSWYgYSBOVUxMIHZhbHVlCisJICogaXMgcmV0dXJuZWQsIE5VTEwgd2lsbCBiZSBzdG9yZWQgaW4gb3V0X2luZm8tPnVybCBhbmQgb3V0X2luZm8tPmVycgorCSAqIHdpbGwgYmUgc2V0IHRvIGEgYnJpZWYsIHRyYW5zbGF0ZWQsIGVycm9yIG1lc3NhZ2UsIGJ1dCBubyBvdGhlcgorCSAqIGZpZWxkcyB3aWxsIGJlIGZpbGxlZCBpbi4KKwkgKgorCSAqIFRoaXMgaXMgTk9UIGEgVVJMIHZhbGlkYXRpb24gZnVuY3Rpb24uICBGdWxsIFVSTCB2YWxpZGF0aW9uIGlzIE5PVAorCSAqIHBlcmZvcm1lZC4gIFNvbWUgaW52YWxpZCBob3N0IG5hbWVzIGFyZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uCisJICogdW5kZXRlY3RlZC4gIEhvd2V2ZXIsIG1vc3QgYWxsIG90aGVyIHByb2JsZW1zIHRoYXQgbWFrZSBhIFVSTCBpbnZhbGlkCisJICogd2lsbCBiZSBkZXRlY3RlZCAoaW5jbHVkaW5nIGEgbWlzc2luZyBob3N0IGZvciBub24gZmlsZTogVVJMcykuCisJICovCisKKwlzaXplX3QgdXJsX2xlbiA9IHN0cmxlbih1cmwpOworCXN0cnVjdCBzdHJidWYgbm9ybTsKKwlzaXplX3Qgc3Bhbm5lZDsKKwlzaXplX3Qgc2NoZW1lX2xlbiwgdXNlcl9vZmY9MCwgdXNlcl9sZW49MCwgcGFzc3dkX29mZj0wLCBwYXNzd2RfbGVuPTA7CisJc2l6ZV90IGhvc3Rfb2ZmPTAsIGhvc3RfbGVuPTAsIHBvcnRfb2ZmPTAsIHBvcnRfbGVuPTAsIHBhdGhfb2ZmLCBwYXRoX2xlbiwgcmVzdWx0X2xlbjsKKwljb25zdCBjaGFyICpzbGFzaF9wdHIsICphdF9wdHIsICpjb2xvbl9wdHIsICpwYXRoX3N0YXJ0OworCWNoYXIgKnJlc3VsdDsKKworCS8qCisJICogQ29weSBsb3dlcmNhc2VkIHNjaGVtZSBhbmQgOi8vIHN1ZmZpeCwgJS1lc2NhcGVzIGFyZSBub3QgYWxsb3dlZAorCSAqIEZpcnN0IGNoYXJhY3RlciBvZiBzY2hlbWUgbXVzdCBiZSBVUkxfQUxQSEEKKwkgKi8KKwlzcGFubmVkID0gc3Ryc3BuKHVybCwgVVJMX1NDSEVNRV9DSEFSUyk7CisJaWYgKCFzcGFubmVkIHx8ICFpc2FscGhhKHVybFswXSkgfHwgc3Bhbm5lZCArIDMgPiB1cmxfbGVuIHx8CisJICAgIHVybFtzcGFubmVkXSAhPSAnOicgfHwgdXJsW3NwYW5uZWQrMV0gIT0gJy8nIHx8IHVybFtzcGFubmVkKzJdICE9ICcvJykgeworCQlpZiAob3V0X2luZm8pIHsKKwkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJb3V0X2luZm8tPmVyciA9IF8oImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4Iik7CisJCX0KKwkJcmV0dXJuIE5VTEw7IC8qIEJhZCBzY2hlbWUgYW5kL29yIG1pc3NpbmcgIjovLyIgcGFydCAqLworCX0KKwlzdHJidWZfaW5pdCgmbm9ybSwgdXJsX2xlbik7CisJc2NoZW1lX2xlbiA9IHNwYW5uZWQ7CisJc3Bhbm5lZCArPSAzOworCXVybF9sZW4gLT0gc3Bhbm5lZDsKKwl3aGlsZSAoc3Bhbm5lZC0tKQorCQlzdHJidWZfYWRkY2goJm5vcm0sIHRvbG93ZXIoKnVybCsrKSk7CisKKworCS8qCisJICogQ29weSBhbnkgdXNlcm5hbWU6cGFzc3dvcmQgaWYgcHJlc2VudCBub3JtYWxpemluZyAlLWVzY2FwZXMKKwkgKi8KKwlhdF9wdHIgPSBzdHJjaHIodXJsLCAnQCcpOworCXNsYXNoX3B0ciA9IHVybCArIHN0cmNzcG4odXJsLCAiLz8jIik7CisJaWYgKGF0X3B0ciAmJiBhdF9wdHIgPCBzbGFzaF9wdHIpIHsKKwkJdXNlcl9vZmYgPSBub3JtLmxlbjsKKwkJaWYgKGF0X3B0ciA+IHVybCkgeworCQkJaWYgKCFhcHBlbmRfbm9ybWFsaXplZF9lc2NhcGVzKCZub3JtLCB1cmwsIGF0X3B0ciAtIHVybCwKKwkJCQkJCSAgICAgICAiIiwgVVJMX1JFU0VSVkVEKSkgeworCQkJCWlmIChvdXRfaW5mbykgeworCQkJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCQkJb3V0X2luZm8tPmVyciA9IF8oImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIpOworCQkJCX0KKwkJCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQljb2xvbl9wdHIgPSBzdHJjaHIobm9ybS5idWYgKyBzY2hlbWVfbGVuICsgMywgJzonKTsKKwkJCWlmIChjb2xvbl9wdHIpIHsKKwkJCQlwYXNzd2Rfb2ZmID0gKGNvbG9uX3B0ciArIDEpIC0gbm9ybS5idWY7CisJCQkJcGFzc3dkX2xlbiA9IG5vcm0ubGVuIC0gcGFzc3dkX29mZjsKKwkJCQl1c2VyX2xlbiA9IChwYXNzd2Rfb2ZmIC0gMSkgLSAoc2NoZW1lX2xlbiArIDMpOworCQkJfSBlbHNlIHsKKwkJCQl1c2VyX2xlbiA9IG5vcm0ubGVuIC0gKHNjaGVtZV9sZW4gKyAzKTsKKwkJCX0KKwkJfQorCQlzdHJidWZfYWRkY2goJm5vcm0sICdAJyk7CisJCXVybF9sZW4gLT0gKCsrYXRfcHRyIC0gdXJsKTsKKwkJdXJsID0gYXRfcHRyOworCX0KKworCisJLyoKKwkgKiBDb3B5IHRoZSBob3N0IHBhcnQgZXhjbHVkaW5nIGFueSBwb3J0IHBhcnQsIG5vICUtZXNjYXBlcyBhbGxvd2VkCisJICovCisJaWYgKCF1cmxfbGVuIHx8IHN0cmNocigiOi8/IyIsICp1cmwpKSB7CisJCS8qIE1pc3NpbmcgaG9zdCBpbnZhbGlkIGZvciBhbGwgVVJMIHNjaGVtZXMgZXhjZXB0IGZpbGUgKi8KKwkJaWYgKHN0cm5jbXAobm9ybS5idWYsICJmaWxlOiIsIDUpKSB7CisJCQlpZiAob3V0X2luZm8pIHsKKwkJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCQlvdXRfaW5mby0+ZXJyID0gXygibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciKTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZub3JtKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJaG9zdF9vZmYgPSBub3JtLmxlbjsKKwl9CisJY29sb25fcHRyID0gc2xhc2hfcHRyIC0gMTsKKwl3aGlsZSAoY29sb25fcHRyID4gdXJsICYmICpjb2xvbl9wdHIgIT0gJzonICYmICpjb2xvbl9wdHIgIT0gJ10nKQorCQljb2xvbl9wdHItLTsKKwlpZiAoKmNvbG9uX3B0ciAhPSAnOicpIHsKKwkJY29sb25fcHRyID0gc2xhc2hfcHRyOworCX0gZWxzZSBpZiAoIWhvc3Rfb2ZmICYmIGNvbG9uX3B0ciA8IHNsYXNoX3B0ciAmJiBjb2xvbl9wdHIgKyAxICE9IHNsYXNoX3B0cikgeworCQkvKiBmaWxlOiBVUkxzIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyICovCisJCWlmIChvdXRfaW5mbykgeworCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQlvdXRfaW5mby0+ZXJyID0gXygiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZub3JtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGFsbG93X2dsb2JzKQorCQlzcGFubmVkID0gc3Ryc3BuKHVybCwgVVJMX0hPU1RfQ0hBUlMgIioiKTsKKwllbHNlCisJCXNwYW5uZWQgPSBzdHJzcG4odXJsLCBVUkxfSE9TVF9DSEFSUyk7CisKKwlpZiAoc3Bhbm5lZCA8IGNvbG9uX3B0ciAtIHVybCkgeworCQkvKiBIb3N0IG5hbWUgaGFzIGludmFsaWQgY2hhcmFjdGVycyAqLworCQlpZiAob3V0X2luZm8pIHsKKwkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJb3V0X2luZm8tPmVyciA9IF8oImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCXJldHVybiBOVUxMOworCX0KKwl3aGlsZSAodXJsIDwgY29sb25fcHRyKSB7CisJCXN0cmJ1Zl9hZGRjaCgmbm9ybSwgdG9sb3dlcigqdXJsKyspKTsKKwkJdXJsX2xlbi0tOworCX0KKworCisJLyoKKwkgKiBDaGVjayB0aGUgcG9ydCBwYXJ0IGFuZCBjb3B5IGlmIG5vdCB0aGUgZGVmYXVsdCAoYWZ0ZXIgcmVtb3ZpbmcgYW55CisJICogbGVhZGluZyAwcyk7IG5vICUtZXNjYXBlcyBhbGxvd2VkCisJICovCisJaWYgKGNvbG9uX3B0ciA8IHNsYXNoX3B0cikgeworCQkvKiBza2lwIHRoZSAnOicgYW5kIGxlYWRpbmcgMHMgYnV0IG5vdCB0aGUgbGFzdCBvbmUgaWYgYWxsIDBzICovCisJCXVybCsrOworCQl1cmwgKz0gc3Ryc3BuKHVybCwgIjAiKTsKKwkJaWYgKHVybCA9PSBzbGFzaF9wdHIgJiYgdXJsWy0xXSA9PSAnMCcpCisJCQl1cmwtLTsKKwkJaWYgKHVybCA9PSBzbGFzaF9wdHIpIHsKKwkJCS8qIFNraXAgIjoiIHBvcnQgd2l0aCBubyBudW1iZXIsIGl0J3Mgc2FtZSBhcyBkZWZhdWx0ICovCisJCX0gZWxzZSBpZiAoc2xhc2hfcHRyIC0gdXJsID09IDIgJiYKKwkJCSAgICFzdHJuY21wKG5vcm0uYnVmLCAiaHR0cDoiLCA1KSAmJgorCQkJICAgIXN0cm5jbXAodXJsLCAiODAiLCAyKSkgeworCQkJLyogU2tpcCBodHRwIDo4MCBhcyBpdCdzIHRoZSBkZWZhdWx0ICovCisJCX0gZWxzZSBpZiAoc2xhc2hfcHRyIC0gdXJsID09IDMgJiYKKwkJCSAgICFzdHJuY21wKG5vcm0uYnVmLCAiaHR0cHM6IiwgNikgJiYKKwkJCSAgICFzdHJuY21wKHVybCwgIjQ0MyIsIDMpKSB7CisJCQkvKiBTa2lwIGh0dHBzIDo0NDMgYXMgaXQncyB0aGUgZGVmYXVsdCAqLworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFBvcnQgbnVtYmVyIG11c3QgYmUgYWxsIGRpZ2l0cyB3aXRoIGxlYWRpbmcgMHMgcmVtb3ZlZAorCQkJICogYW5kIHNpbmNlIGFsbCB0aGUgcHJvdG9jb2xzIHdlIGRlYWwgd2l0aCBoYXZlIGEgMTYtYml0CisJCQkgKiBwb3J0IG51bWJlciBpdCBtdXN0IGFsc28gYmUgaW4gdGhlIHJhbmdlIDEuLjY1NTM1CisJCQkgKiAwIGlzIG5vdCBhbGxvd2VkIGJlY2F1c2UgdGhhdCBtZWFucyAibmV4dCBhdmFpbGFibGUiCisJCQkgKiBvbiBqdXN0IGFib3V0IGV2ZXJ5IHN5c3RlbSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSB1c2VkCisJCQkgKi8KKwkJCXVuc2lnbmVkIGxvbmcgcG51bSA9IDA7CisJCQlzcGFubmVkID0gc3Ryc3BuKHVybCwgVVJMX0RJR0lUKTsKKwkJCWlmIChzcGFubmVkIDwgc2xhc2hfcHRyIC0gdXJsKSB7CisJCQkJLyogcG9ydCBudW1iZXIgaGFzIGludmFsaWQgY2hhcmFjdGVycyAqLworCQkJCWlmIChvdXRfaW5mbykgeworCQkJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCQkJb3V0X2luZm8tPmVyciA9IF8oImludmFsaWQgcG9ydCBudW1iZXIiKTsKKwkJCQl9CisJCQkJc3RyYnVmX3JlbGVhc2UoJm5vcm0pOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJaWYgKHNsYXNoX3B0ciAtIHVybCA8PSA1KQorCQkJCXBudW0gPSBzdHJ0b3VsKHVybCwgTlVMTCwgMTApOworCQkJaWYgKHBudW0gPT0gMCB8fCBwbnVtID4gNjU1MzUpIHsKKwkJCQkvKiBwb3J0IG51bWJlciBub3QgaW4gcmFuZ2UgMS4uNjU1MzUgKi8KKwkJCQlpZiAob3V0X2luZm8pIHsKKwkJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkIHBvcnQgbnVtYmVyIik7CisJCQkJfQorCQkJCXN0cmJ1Zl9yZWxlYXNlKCZub3JtKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRjaCgmbm9ybSwgJzonKTsKKwkJCXBvcnRfb2ZmID0gbm9ybS5sZW47CisJCQlzdHJidWZfYWRkKCZub3JtLCB1cmwsIHNsYXNoX3B0ciAtIHVybCk7CisJCQlwb3J0X2xlbiA9IHNsYXNoX3B0ciAtIHVybDsKKwkJfQorCQl1cmxfbGVuIC09IHNsYXNoX3B0ciAtIGNvbG9uX3B0cjsKKwkJdXJsID0gc2xhc2hfcHRyOworCX0KKwlpZiAoaG9zdF9vZmYpCisJCWhvc3RfbGVuID0gbm9ybS5sZW4gLSBob3N0X29mZiAtIChwb3J0X2xlbiA/IHBvcnRfbGVuICsgMSA6IDApOworCisKKwkvKgorCSAqIE5vdyBjb3B5IHRoZSBwYXRoIHJlc29sdmluZyBhbnkgLiBhbmQgLi4gc2VnbWVudHMgYmVpbmcgY2FyZWZ1bCBub3QKKwkgKiB0byBjb3JydXB0IHRoZSBVUkwgYnkgdW5lc2NhcGluZyBhbnkgZGVsaW1pdGVycywgYnV0IGRvIGFkZCBhbgorCSAqIGluaXRpYWwgJy8nIGlmIGl0J3MgbWlzc2luZyBhbmQgZG8gbm9ybWFsaXplIGFueSAlLWVzY2FwZSBzZXF1ZW5jZXMuCisJICovCisJcGF0aF9vZmYgPSBub3JtLmxlbjsKKwlwYXRoX3N0YXJ0ID0gbm9ybS5idWYgKyBwYXRoX29mZjsKKwlzdHJidWZfYWRkY2goJm5vcm0sICcvJyk7CisJaWYgKCp1cmwgPT0gJy8nKSB7CisJCXVybCsrOworCQl1cmxfbGVuLS07CisJfQorCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqc2VnX3N0YXJ0OworCQlzaXplX3Qgc2VnX3N0YXJ0X29mZiA9IG5vcm0ubGVuOworCQljb25zdCBjaGFyICpuZXh0X3NsYXNoID0gdXJsICsgc3RyY3Nwbih1cmwsICIvPyMiKTsKKwkJaW50IHNraXBfYWRkX3NsYXNoID0gMDsKKworCQkvKgorCQkgKiBSRkMgMzY4OSBpbmRpY2F0ZXMgdGhhdCBhbnkgLiBvciAuLiBzZWdtZW50cyBzaG91bGQgYmUKKwkJICogdW5lc2NhcGVkIGJlZm9yZSBiZWluZyBjaGVja2VkIGZvci4KKwkJICovCisJCWlmICghYXBwZW5kX25vcm1hbGl6ZWRfZXNjYXBlcygmbm9ybSwgdXJsLCBuZXh0X3NsYXNoIC0gdXJsLCAiIiwKKwkJCQkJICAgICAgIFVSTF9SRVNFUlZFRCkpIHsKKwkJCWlmIChvdXRfaW5mbykgeworCQkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiKTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZub3JtKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJc2VnX3N0YXJ0ID0gbm9ybS5idWYgKyBzZWdfc3RhcnRfb2ZmOworCQlpZiAoIXN0cmNtcChzZWdfc3RhcnQsICIuIikpIHsKKwkJCS8qIGlnbm9yZSBhIC4gc2VnbWVudDsgYmUgY2FyZWZ1bCBub3QgdG8gcmVtb3ZlIGluaXRpYWwgJy8nICovCisJCQlpZiAoc2VnX3N0YXJ0ID09IHBhdGhfc3RhcnQgKyAxKSB7CisJCQkJc3RyYnVmX3NldGxlbigmbm9ybSwgbm9ybS5sZW4gLSAxKTsKKwkJCQlza2lwX2FkZF9zbGFzaCA9IDE7CisJCQl9IGVsc2UgeworCQkJCXN0cmJ1Zl9zZXRsZW4oJm5vcm0sIG5vcm0ubGVuIC0gMik7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChzZWdfc3RhcnQsICIuLiIpKSB7CisJCQkvKgorCQkJICogaWdub3JlIGEgLi4gc2VnbWVudCBhbmQgcmVtb3ZlIHRoZSBwcmV2aW91cyBzZWdtZW50OworCQkJICogYmUgY2FyZWZ1bCBub3QgdG8gcmVtb3ZlIGluaXRpYWwgJy8nIGZyb20gcGF0aAorCQkJICovCisJCQljb25zdCBjaGFyICpwcmV2X3NsYXNoID0gbm9ybS5idWYgKyBub3JtLmxlbiAtIDM7CisJCQlpZiAocHJldl9zbGFzaCA9PSBwYXRoX3N0YXJ0KSB7CisJCQkJLyogaW52YWxpZCAuLiBiZWNhdXNlIG5vIHByZXZpb3VzIHNlZ21lbnQgdG8gcmVtb3ZlICovCisJCQkJaWYgKG91dF9pbmZvKSB7CisJCQkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJCQlvdXRfaW5mby0+ZXJyID0gXygiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIpOworCQkJCX0KKwkJCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQl3aGlsZSAoKi0tcHJldl9zbGFzaCAhPSAnLycpIHt9CisJCQlpZiAocHJldl9zbGFzaCA9PSBwYXRoX3N0YXJ0KSB7CisJCQkJc3RyYnVmX3NldGxlbigmbm9ybSwgcHJldl9zbGFzaCAtIG5vcm0uYnVmICsgMSk7CisJCQkJc2tpcF9hZGRfc2xhc2ggPSAxOworCQkJfSBlbHNlIHsKKwkJCQlzdHJidWZfc2V0bGVuKCZub3JtLCBwcmV2X3NsYXNoIC0gbm9ybS5idWYpOworCQkJfQorCQl9CisJCXVybF9sZW4gLT0gbmV4dF9zbGFzaCAtIHVybDsKKwkJdXJsID0gbmV4dF9zbGFzaDsKKwkJLyogaWYgdGhlIG5leHQgY2hhciBpcyBub3QgJy8nIGRvbmUgd2l0aCB0aGUgcGF0aCAqLworCQlpZiAoKnVybCAhPSAnLycpCisJCQlicmVhazsKKwkJdXJsKys7CisJCXVybF9sZW4tLTsKKwkJaWYgKCFza2lwX2FkZF9zbGFzaCkKKwkJCXN0cmJ1Zl9hZGRjaCgmbm9ybSwgJy8nKTsKKwl9CisJcGF0aF9sZW4gPSBub3JtLmxlbiAtIHBhdGhfb2ZmOworCisKKwkvKgorCSAqIE5vdyBzaW1wbHkgY29weSB0aGUgcmVzdCwgaWYgYW55LCBvbmx5IG5vcm1hbGl6aW5nICUtZXNjYXBlcyBhbmQKKwkgKiBiZWluZyBjYXJlZnVsIG5vdCB0byBjb3JydXB0IHRoZSBVUkwgYnkgdW5lc2NhcGluZyBhbnkgZGVsaW1pdGVycy4KKwkgKi8KKwlpZiAoKnVybCkgeworCQlpZiAoIWFwcGVuZF9ub3JtYWxpemVkX2VzY2FwZXMoJm5vcm0sIHVybCwgdXJsX2xlbiwgIiIsIFVSTF9SRVNFUlZFRCkpIHsKKwkJCWlmIChvdXRfaW5mbykgeworCQkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiKTsKKwkJCX0KKwkJCXN0cmJ1Zl9yZWxlYXNlKCZub3JtKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisKKwlyZXN1bHQgPSBzdHJidWZfZGV0YWNoKCZub3JtLCAmcmVzdWx0X2xlbik7CisJaWYgKG91dF9pbmZvKSB7CisJCW91dF9pbmZvLT51cmwgPSByZXN1bHQ7CisJCW91dF9pbmZvLT5lcnIgPSBOVUxMOworCQlvdXRfaW5mby0+dXJsX2xlbiA9IHJlc3VsdF9sZW47CisJCW91dF9pbmZvLT5zY2hlbWVfbGVuID0gc2NoZW1lX2xlbjsKKwkJb3V0X2luZm8tPnVzZXJfb2ZmID0gdXNlcl9vZmY7CisJCW91dF9pbmZvLT51c2VyX2xlbiA9IHVzZXJfbGVuOworCQlvdXRfaW5mby0+cGFzc3dkX29mZiA9IHBhc3N3ZF9vZmY7CisJCW91dF9pbmZvLT5wYXNzd2RfbGVuID0gcGFzc3dkX2xlbjsKKwkJb3V0X2luZm8tPmhvc3Rfb2ZmID0gaG9zdF9vZmY7CisJCW91dF9pbmZvLT5ob3N0X2xlbiA9IGhvc3RfbGVuOworCQlvdXRfaW5mby0+cG9ydF9vZmYgPSBwb3J0X29mZjsKKwkJb3V0X2luZm8tPnBvcnRfbGVuID0gcG9ydF9sZW47CisJCW91dF9pbmZvLT5wYXRoX29mZiA9IHBhdGhfb2ZmOworCQlvdXRfaW5mby0+cGF0aF9sZW4gPSBwYXRoX2xlbjsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciAqdXJsX25vcm1hbGl6ZShjb25zdCBjaGFyICp1cmwsIHN0cnVjdCB1cmxfaW5mbyAqb3V0X2luZm8pCit7CisJcmV0dXJuIHVybF9ub3JtYWxpemVfMSh1cmwsIG91dF9pbmZvLCAwKTsKK30KKworc3RhdGljIHNpemVfdCB1cmxfbWF0Y2hfcHJlZml4KGNvbnN0IGNoYXIgKnVybCwKKwkJCSAgICAgICBjb25zdCBjaGFyICp1cmxfcHJlZml4LAorCQkJICAgICAgIHNpemVfdCB1cmxfcHJlZml4X2xlbikKK3sKKwkvKgorCSAqIHVybF9wcmVmaXggbWF0Y2hlcyB1cmwgaWYgdXJsX3ByZWZpeCBpcyBhbiBleGFjdCBtYXRjaCBmb3IgdXJsIG9yIGl0CisJICogaXMgYSBwcmVmaXggb2YgdXJsIGFuZCB0aGUgbWF0Y2ggZW5kcyBvbiBhIHBhdGggY29tcG9uZW50IGJvdW5kYXJ5LgorCSAqIEJvdGggdXJsIGFuZCB1cmxfcHJlZml4IGFyZSBjb25zaWRlcmVkIHRvIGhhdmUgYW4gaW1wbGljaXQgJy8nIG9uIHRoZQorCSAqIGVuZCBmb3IgbWF0Y2hpbmcgcHVycG9zZXMgaWYgdGhleSBkbyBub3QgYWxyZWFkeS4KKwkgKgorCSAqIHVybCBtdXN0IGJlIE5VTCB0ZXJtaW5hdGVkLiAgdXJsX3ByZWZpeF9sZW4gaXMgdGhlIGxlbmd0aCBvZgorCSAqIHVybF9wcmVmaXggd2hpY2ggbmVlZCBub3QgYmUgTlVMIHRlcm1pbmF0ZWQuCisJICoKKwkgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoIGluIGNoYXJhY3RlcnMgKGluY2x1ZGluZworCSAqIHRoZSBmaW5hbCAnLycgZXZlbiBpZiBpdCdzIGltcGxpY2l0KSBvciAwIGZvciBubyBtYXRjaC4KKwkgKgorCSAqIFBhc3NpbmcgTlVMTCBhcyB1cmwgYW5kL29yIHVybF9wcmVmaXggd2lsbCBhbHdheXMgY2F1c2UgMCB0byBiZQorCSAqIHJldHVybmVkIHdpdGhvdXQgY2F1c2luZyBhbnkgZmF1bHRzLgorCSAqLworCWlmICghdXJsIHx8ICF1cmxfcHJlZml4KQorCQlyZXR1cm4gMDsKKwlpZiAoIXVybF9wcmVmaXhfbGVuIHx8ICh1cmxfcHJlZml4X2xlbiA9PSAxICYmICp1cmxfcHJlZml4ID09ICcvJykpCisJCXJldHVybiAoISp1cmwgfHwgKnVybCA9PSAnLycpID8gMSA6IDA7CisJaWYgKHVybF9wcmVmaXhbdXJsX3ByZWZpeF9sZW4gLSAxXSA9PSAnLycpCisJCXVybF9wcmVmaXhfbGVuLS07CisJaWYgKHN0cm5jbXAodXJsLCB1cmxfcHJlZml4LCB1cmxfcHJlZml4X2xlbikpCisJCXJldHVybiAwOworCWlmICgoc3RybGVuKHVybCkgPT0gdXJsX3ByZWZpeF9sZW4pIHx8ICh1cmxbdXJsX3ByZWZpeF9sZW5dID09ICcvJykpCisJCXJldHVybiB1cmxfcHJlZml4X2xlbiArIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfdXJscyhjb25zdCBzdHJ1Y3QgdXJsX2luZm8gKnVybCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVybF9pbmZvICp1cmxfcHJlZml4LAorCQkgICAgICBzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqbWF0Y2gpCit7CisJLyoKKwkgKiB1cmxfcHJlZml4IG1hdGNoZXMgdXJsIGlmIHRoZSBzY2hlbWUsIGhvc3QgYW5kIHBvcnQgb2YgdXJsX3ByZWZpeAorCSAqIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBvZiB1cmwgYW5kIHRoZSBwYXRoIHBvcnRpb24gb2YgdXJsX3ByZWZpeAorCSAqIGlzIHRoZSBzYW1lIGFzIHRoZSBwYXRoIHBvcnRpb24gb2YgdXJsIG9yIGl0IGlzIGEgcHJlZml4IHRoYXQKKwkgKiBtYXRjaGVzIGF0IGEgJy8nIGJvdW5kYXJ5LiAgSWYgdXJsX3ByZWZpeCBjb250YWlucyBhIHVzZXIgbmFtZSwKKwkgKiB0aGF0IG11c3QgYWxzbyBleGFjdGx5IG1hdGNoIHRoZSB1c2VyIG5hbWUgaW4gdXJsLgorCSAqCisJICogSWYgdGhlIHVzZXIsIGhvc3QsIHBvcnQgYW5kIHBhdGggbWF0Y2ggaW4gdGhpcyBmYXNoaW9uLCB0aGUgcmV0dXJuZWQKKwkgKiB2YWx1ZSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBwYXRoIG1hdGNoIGluY2x1ZGluZyBhbnkgaW1wbGljaXQKKwkgKiBmaW5hbCAnLycuICBGb3IgZXhhbXBsZSwgImh0dHA6Ly9tZUBleGFtcGxlLmNvbS9wYXRoIiBpcyBtYXRjaGVkIGJ5CisJICogImh0dHA6Ly9leGFtcGxlLmNvbSIgd2l0aCBhIHBhdGggbGVuZ3RoIG9mIDEuCisJICoKKwkgKiBJZiB0aGVyZSBpcyBhIG1hdGNoIGFuZCBleGFjdHVzZXJtYXRjaCBpcyBub3QgTlVMTCwgdGhlbgorCSAqICpleGFjdHVzZXJtYXRjaCB3aWxsIGJlIHNldCB0byB0cnVlIGlmIGJvdGggdXJsIGFuZCB1cmxfcHJlZml4CisJICogY29udGFpbmVkIGEgdXNlciBuYW1lIG9yIGZhbHNlIGlmIHVybF9wcmVmaXggZGlkIG5vdCBoYXZlIGEKKwkgKiB1c2VyIG5hbWUuICBJZiB0aGVyZSBpcyBubyBtYXRjaCAqZXhhY3R1c2VybWF0Y2ggaXMgbGVmdCB1bnRvdWNoZWQuCisJICovCisJY2hhciB1c2VybWF0Y2hlZCA9IDA7CisJc2l6ZV90IHBhdGhtYXRjaGxlbjsKKworCWlmICghdXJsIHx8ICF1cmxfcHJlZml4IHx8ICF1cmwtPnVybCB8fCAhdXJsX3ByZWZpeC0+dXJsKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIHRoZSBzY2hlbWUgKi8KKwlpZiAodXJsX3ByZWZpeC0+c2NoZW1lX2xlbiAhPSB1cmwtPnNjaGVtZV9sZW4gfHwKKwkgICAgc3RybmNtcCh1cmwtPnVybCwgdXJsX3ByZWZpeC0+dXJsLCB1cmwtPnNjaGVtZV9sZW4pKQorCQlyZXR1cm4gMDsgLyogc2NoZW1lcyBkbyBub3QgbWF0Y2ggKi8KKworCS8qIGNoZWNrIHRoZSB1c2VyIG5hbWUgaWYgdXJsX3ByZWZpeCBoYXMgb25lICovCisJaWYgKHVybF9wcmVmaXgtPnVzZXJfb2ZmKSB7CisJCWlmICghdXJsLT51c2VyX29mZiB8fCB1cmwtPnVzZXJfbGVuICE9IHVybF9wcmVmaXgtPnVzZXJfbGVuIHx8CisJCSAgICBzdHJuY21wKHVybC0+dXJsICsgdXJsLT51c2VyX29mZiwKKwkJCSAgICB1cmxfcHJlZml4LT51cmwgKyB1cmxfcHJlZml4LT51c2VyX29mZiwKKwkJCSAgICB1cmwtPnVzZXJfbGVuKSkKKwkJCXJldHVybiAwOyAvKiB1cmxfcHJlZml4IGhhcyBhIHVzZXIgYnV0IGl0J3Mgbm90IGEgbWF0Y2ggKi8KKwkJdXNlcm1hdGNoZWQgPSAxOworCX0KKworCS8qIGNoZWNrIHRoZSBob3N0ICovCisJaWYgKCFtYXRjaF9ob3N0KHVybCwgdXJsX3ByZWZpeCkpCisJCXJldHVybiAwOyAvKiBob3N0IG5hbWVzIGRvIG5vdCBtYXRjaCAqLworCisJLyogY2hlY2sgdGhlIHBvcnQgKi8KKwlpZiAodXJsX3ByZWZpeC0+cG9ydF9sZW4gIT0gdXJsLT5wb3J0X2xlbiB8fAorCSAgICBzdHJuY21wKHVybC0+dXJsICsgdXJsLT5wb3J0X29mZiwKKwkJICAgIHVybF9wcmVmaXgtPnVybCArIHVybF9wcmVmaXgtPnBvcnRfb2ZmLCB1cmwtPnBvcnRfbGVuKSkKKwkJcmV0dXJuIDA7IC8qIHBvcnRzIGRvIG5vdCBtYXRjaCAqLworCisJLyogY2hlY2sgdGhlIHBhdGggKi8KKwlwYXRobWF0Y2hsZW4gPSB1cmxfbWF0Y2hfcHJlZml4KAorCQl1cmwtPnVybCArIHVybC0+cGF0aF9vZmYsCisJCXVybF9wcmVmaXgtPnVybCArIHVybF9wcmVmaXgtPnBhdGhfb2ZmLAorCQl1cmxfcHJlZml4LT51cmxfbGVuIC0gdXJsX3ByZWZpeC0+cGF0aF9vZmYpOworCWlmICghcGF0aG1hdGNobGVuKQorCQlyZXR1cm4gMDsgLyogcGF0aHMgZG8gbm90IG1hdGNoICovCisKKwlpZiAobWF0Y2gpIHsKKwkJbWF0Y2gtPmhvc3RtYXRjaF9sZW4gPSB1cmxfcHJlZml4LT5ob3N0X2xlbjsKKwkJbWF0Y2gtPnBhdGhtYXRjaF9sZW4gPSBwYXRobWF0Y2hsZW47CisJCW1hdGNoLT51c2VyX21hdGNoZWQgPSB1c2VybWF0Y2hlZDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjbXBfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqYSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1cmxtYXRjaF9pdGVtICpiKQoreworCWlmIChhLT5ob3N0bWF0Y2hfbGVuICE9IGItPmhvc3RtYXRjaF9sZW4pCisJCXJldHVybiBhLT5ob3N0bWF0Y2hfbGVuIDwgYi0+aG9zdG1hdGNoX2xlbiA/IC0xIDogMTsKKwlpZiAoYS0+cGF0aG1hdGNoX2xlbiAhPSBiLT5wYXRobWF0Y2hfbGVuKQorCQlyZXR1cm4gYS0+cGF0aG1hdGNoX2xlbiA8IGItPnBhdGhtYXRjaF9sZW4gPyAtMSA6IDE7CisJaWYgKGEtPnVzZXJfbWF0Y2hlZCAhPSBiLT51c2VyX21hdGNoZWQpCisJCXJldHVybiBiLT51c2VyX21hdGNoZWQgPyAtMSA6IDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1cmxtYXRjaF9jb25maWdfZW50cnkoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHVybG1hdGNoX2NvbmZpZyAqY29sbGVjdCA9IGNiOworCXN0cnVjdCB1cmxtYXRjaF9pdGVtIG1hdGNoZWQgPSB7MH07CisJc3RydWN0IHVybF9pbmZvICp1cmwgPSAmY29sbGVjdC0+dXJsOworCWNvbnN0IGNoYXIgKmtleSwgKmRvdDsKKwlzdHJ1Y3Qgc3RyYnVmIHN5bnRoa2V5ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldHZhbDsKKwlpbnQgKCpzZWxlY3RfZm4pKGNvbnN0IHN0cnVjdCB1cmxtYXRjaF9pdGVtICphLCBjb25zdCBzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqYikgPQorCQljb2xsZWN0LT5zZWxlY3RfZm4gPyBjb2xsZWN0LT5zZWxlY3RfZm4gOiBjbXBfbWF0Y2hlczsKKworCWlmICghc2tpcF9wcmVmaXgodmFyLCBjb2xsZWN0LT5zZWN0aW9uLCAma2V5KSB8fCAqKGtleSsrKSAhPSAnLicpIHsKKwkJaWYgKGNvbGxlY3QtPmNhc2NhZGVfZm4pCisJCQlyZXR1cm4gY29sbGVjdC0+Y2FzY2FkZV9mbih2YXIsIHZhbHVlLCBjYik7CisJCXJldHVybiAwOyAvKiBub3QgaW50ZXJlc3RlZCAqLworCX0KKwlkb3QgPSBzdHJyY2hyKGtleSwgJy4nKTsKKwlpZiAoZG90KSB7CisJCWNoYXIgKmNvbmZpZ191cmwsICpub3JtX3VybDsKKwkJc3RydWN0IHVybF9pbmZvIG5vcm1faW5mbzsKKworCQljb25maWdfdXJsID0geG1lbWR1cHooa2V5LCBkb3QgLSBrZXkpOworCQlub3JtX3VybCA9IHVybF9ub3JtYWxpemVfMShjb25maWdfdXJsLCAmbm9ybV9pbmZvLCAxKTsKKwkJZnJlZShjb25maWdfdXJsKTsKKwkJaWYgKCFub3JtX3VybCkKKwkJCXJldHVybiAwOworCQlyZXR2YWwgPSBtYXRjaF91cmxzKHVybCwgJm5vcm1faW5mbywgJm1hdGNoZWQpOworCQlmcmVlKG5vcm1fdXJsKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlyZXR1cm4gMDsKKwkJa2V5ID0gZG90ICsgMTsKKwl9CisKKwlpZiAoY29sbGVjdC0+a2V5ICYmIHN0cmNtcChrZXksIGNvbGxlY3QtPmtleSkpCisJCXJldHVybiAwOworCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmY29sbGVjdC0+dmFycywga2V5KTsKKwlpZiAoIWl0ZW0tPnV0aWwpIHsKKwkJaXRlbS0+dXRpbCA9IHhjYWxsb2MoMSwgc2l6ZW9mKG1hdGNoZWQpKTsKKwl9IGVsc2UgeworCQlpZiAoc2VsZWN0X2ZuKCZtYXRjaGVkLCBpdGVtLT51dGlsKSA8IDApCisJCQkgLyoKKwkJCSAgKiBPdXIgbWF0Y2ggaXMgd29yc2UgdGhhbiB0aGUgb2xkIG9uZSwKKwkJCSAgKiB3ZSBjYW5ub3QgdXNlIGl0LgorCQkJICAqLworCQkJcmV0dXJuIDA7CisJCS8qIE90aGVyd2lzZSwgcmVwbGFjZSBpdCB3aXRoIHRoaXMgb25lLiAqLworCX0KKworCW1lbWNweShpdGVtLT51dGlsLCAmbWF0Y2hlZCwgc2l6ZW9mKG1hdGNoZWQpKTsKKwlzdHJidWZfYWRkc3RyKCZzeW50aGtleSwgY29sbGVjdC0+c2VjdGlvbik7CisJc3RyYnVmX2FkZGNoKCZzeW50aGtleSwgJy4nKTsKKwlzdHJidWZfYWRkc3RyKCZzeW50aGtleSwga2V5KTsKKwlyZXR2YWwgPSBjb2xsZWN0LT5jb2xsZWN0X2ZuKHN5bnRoa2V5LmJ1ZiwgdmFsdWUsIGNvbGxlY3QtPmNiKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzeW50aGtleSk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL3VybG1hdGNoLmggYi91cmxtYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MDc1MjAKLS0tIC9kZXYvbnVsbAorKysgYi91cmxtYXRjaC5oCkBAIC0wLDAgKzEsNjYgQEAKKyNpZm5kZWYgVVJMX01BVENIX0gKKyNkZWZpbmUgVVJMX01BVENIX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCB1cmxfaW5mbyB7CisJLyogbm9ybWFsaXplZCB1cmwgb24gc3VjY2VzcywgbXVzdCBiZSBmcmVlZCwgb3RoZXJ3aXNlIE5VTEwgKi8KKwljaGFyICp1cmw7CisJLyogaWYgIXVybCwgYSBicmllZiByZWFzb24gZm9yIHRoZSBmYWlsdXJlLCBvdGhlcndpc2UgTlVMTCAqLworCWNvbnN0IGNoYXIgKmVycjsKKworCS8qIHRoZSByZXN0IG9mIHRoZSBmaWVsZHMgYXJlIG9ubHkgc2V0IGlmIHVybCAhPSBOVUxMICovCisKKwlzaXplX3QgdXJsX2xlbjsJCS8qIHRvdGFsIGxlbmd0aCBvZiB1cmwgKHdoaWNoIGlzIG5vdyBub3JtYWxpemVkKSAqLworCXNpemVfdCBzY2hlbWVfbGVuOwkvKiBsZW5ndGggb2Ygc2NoZW1lIG5hbWUgKGV4Y2x1ZGluZyBmaW5hbCA6KSAqLworCXNpemVfdCB1c2VyX29mZjsJLyogb2Zmc2V0IGludG8gdXJsIHRvIHN0YXJ0IG9mIHVzZXIgbmFtZSAoMCA9PiBub25lKSAqLworCXNpemVfdCB1c2VyX2xlbjsJLyogbGVuZ3RoIG9mIHVzZXIgbmFtZTsgaWYgdXNlcl9vZmYgIT0gMCBidXQKKwkJCQkgICB1c2VyX2xlbiA9PSAwLCBhbiBlbXB0eSB1c2VyIG5hbWUgd2FzIGdpdmVuICovCisJc2l6ZV90IHBhc3N3ZF9vZmY7CS8qIG9mZnNldCBpbnRvIHVybCB0byBzdGFydCBvZiBwYXNzd2QgKDAgPT4gbm9uZSkgKi8KKwlzaXplX3QgcGFzc3dkX2xlbjsJLyogbGVuZ3RoIG9mIHBhc3N3ZDsgaWYgcGFzc3dkX29mZiAhPSAwIGJ1dAorCQkJCSAgIHBhc3N3ZF9sZW4gPT0gMCwgYW4gZW1wdHkgcGFzc3dkIHdhcyBnaXZlbiAqLworCXNpemVfdCBob3N0X29mZjsJLyogb2Zmc2V0IGludG8gdXJsIHRvIHN0YXJ0IG9mIGhvc3QgbmFtZSAoMCA9PiBub25lKSAqLworCXNpemVfdCBob3N0X2xlbjsJLyogbGVuZ3RoIG9mIGhvc3QgbmFtZTsKKwkJCQkgKiBmaWxlIHVybHMgbWF5IGhhdmUgaG9zdF9sZW4gPT0gMCAqLworCXNpemVfdCBwb3J0X29mZjsJLyogb2Zmc2V0IGludG8gdXJsIHRvIHN0YXJ0IG9mIHBvcnQgbnVtYmVyICgwID0+IG5vbmUpICovCisJc2l6ZV90IHBvcnRfbGVuOwkvKiBpZiBhIHBvcnRudW0gaXMgcHJlc2VudCAocG9ydF9vZmYgIT0gMCksIGl0IGhhcworCQkJCSAqIHRoaXMgbGVuZ3RoIChleGNsdWRpbmcgdGhlIGxlYWRpbmcgJzonKSBzdGFydGluZworCQkJCSAqIGZyb20gcG9ydF9vZmYgKGFsd2F5cyAwIGZvciBmaWxlIHVybHMpICovCisJc2l6ZV90IHBhdGhfb2ZmOwkvKiBvZmZzZXQgaW50byB1cmwgdG8gdGhlIHN0YXJ0IG9mIHRoZSB1cmwgcGF0aDsKKwkJCQkgKiB0aGlzIHdpbGwgYWx3YXlzIHBvaW50IHRvIGEgJy8nIGNoYXJhY3RlcgorCQkJCSAqIGFmdGVyIHRoZSB1cmwgaGFzIGJlZW4gbm9ybWFsaXplZCAqLworCXNpemVfdCBwYXRoX2xlbjsJLyogbGVuZ3RoIG9mIHBhdGggcG9ydGlvbiBleGNsdWRpbmcgYW55IHRyYWlsaW5nCisJCQkJICogJz8uLi4nIGFuZCAnIy4uLicgcG9ydGlvbjsgd2lsbCBhbHdheXMgYmUgPj0gMSAqLworfTsKKworY2hhciAqdXJsX25vcm1hbGl6ZShjb25zdCBjaGFyICosIHN0cnVjdCB1cmxfaW5mbyAqKTsKKworc3RydWN0IHVybG1hdGNoX2l0ZW0geworCXNpemVfdCBob3N0bWF0Y2hfbGVuOworCXNpemVfdCBwYXRobWF0Y2hfbGVuOworCWNoYXIgdXNlcl9tYXRjaGVkOworfTsKKworc3RydWN0IHVybG1hdGNoX2NvbmZpZyB7CisJc3RydWN0IHN0cmluZ19saXN0IHZhcnM7CisJc3RydWN0IHVybF9pbmZvIHVybDsKKwljb25zdCBjaGFyICpzZWN0aW9uOworCWNvbnN0IGNoYXIgKmtleTsKKworCXZvaWQgKmNiOworCWludCAoKmNvbGxlY3RfZm4pKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKKwlpbnQgKCpjYXNjYWRlX2ZuKShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CisJLyoKKwkgKiBDb21wYXJlIHRoZSB0d28gbWF0Y2hlcywgdGhlIG9uZSBqdXN0IGRpc2NvdmVyZWQgYW5kIHRoZSBleGlzdGluZworCSAqIGJlc3QgbWF0Y2ggYW5kIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoZSBmb3VuZCBpdGVtIGlzIHRvIGJlCisJICogcmVqZWN0ZWQgb3IgYSBub24tbmVnYXRpdmUgdmFsdWUgaWYgaXQgaXMgdG8gYmUgYWNjZXB0ZWQuICBJZiB0aGlzCisJICogZmllbGQgaXMgc2V0IHRvIE5VTEwsIHVzZSB0aGUgZGVmYXVsdCBjb21wYXJpc29uIHRlY2huaXF1ZSwgd2hpY2gKKwkgKiBjaGVja3MgdG8gc2VzIGlmIGZvdW5kIGlzIGJldHRlciAoYWNjb3JkaW5nIHRvIHRoZSB1cmxtYXRjaAorCSAqIHNwZWNpZmljaXR5IHJ1bGVzKSB0aGFuIGV4aXN0aW5nLgorCSAqLworCWludCAoKnNlbGVjdF9mbikoY29uc3Qgc3RydWN0IHVybG1hdGNoX2l0ZW0gKmZvdW5kLCBjb25zdCBzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqZXhpc3RpbmcpOworfTsKKworaW50IHVybG1hdGNoX2NvbmZpZ19lbnRyeShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CisKKyNlbmRpZiAvKiBVUkxfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvdXNhZ2UuYyBiL3VzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmYjVmZgotLS0gL2Rldi9udWxsCisrKyBiL3VzYWdlLmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorCit2b2lkIHZyZXBvcnRmKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwljaGFyIG1zZ1s0MDk2XTsKKwljaGFyICpwLCAqcGVuZCA9IG1zZyArIHNpemVvZihtc2cpOworCXNpemVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7CisKKwlpZiAoc2l6ZW9mKG1zZykgPD0gcHJlZml4X2xlbikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkJVRyEhISB0b28gbG9uZyBhIHByZWZpeCAnJXMnXG4iLCBwcmVmaXgpOworCQlhYm9ydCgpOworCX0KKwltZW1jcHkobXNnLCBwcmVmaXgsIHByZWZpeF9sZW4pOworCXAgPSBtc2cgKyBwcmVmaXhfbGVuOworCWlmICh2c25wcmludGYocCwgcGVuZCAtIHAsIGVyciwgcGFyYW1zKSA8IDApCisJCSpwID0gJ1wwJzsgLyogdnNucHJpbnRmKCkgZmFpbGVkLCBjbGlwIGF0IHByZWZpeCAqLworCisJZm9yICg7IHAgIT0gcGVuZCAtIDEgJiYgKnA7IHArKykgeworCQlpZiAoaXNjbnRybCgqcCkgJiYgKnAgIT0gJ1x0JyAmJiAqcCAhPSAnXG4nKQorCQkJKnAgPSAnPyc7CisJfQorCisJKihwKyspID0gJ1xuJzsgLyogd2Ugbm8gbG9uZ2VyIG5lZWQgYSBOVUwgKi8KKwlmZmx1c2goc3RkZXJyKTsKKwl3cml0ZV9pbl9mdWxsKDIsIG1zZywgcCAtIG1zZyk7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIHVzYWdlX2J1aWx0aW4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwl2cmVwb3J0ZigidXNhZ2U6ICIsIGVyciwgcGFyYW1zKTsKKworCS8qCisJICogV2hlbiB3ZSBkZXRlY3QgYSB1c2FnZSBlcnJvciAqYmVmb3JlKiB0aGUgY29tbWFuZCBkaXNwYXRjaCBpbgorCSAqIGNtZF9tYWluKCksIHdlIGRvbid0IGtub3cgd2hhdCB2ZXJiIHRvIHJlcG9ydC4gIEZvcmNlIGl0IHRvIHRoaXMKKwkgKiB0byBmYWNpbGl0YXRlIHBvc3QtcHJvY2Vzc2luZy4KKwkgKi8KKwl0cmFjZTJfY21kX25hbWUoIl91c2FnZV8iKTsKKworCS8qCisJICogQ3VycmVudGx5LCB0aGUgKGVyciwgcGFyYW1zKSBhcmUgdXN1YWxseSBqdXN0IHRoZSBzdGF0aWMgdXNhZ2UKKwkgKiBzdHJpbmcgd2hpY2ggaXNuJ3QgdmVyeSB1c2VmdWwgaGVyZS4gIFVzdWFsbHksIHRoZSBjYWxsIHNpdGUKKwkgKiBtYW51YWxseSBjYWxscyBmcHJpbnRmKHN0ZGVyciwuLi4pIHdpdGggdGhlIGFjdHVhbCBkZXRhaWxlZAorCSAqIHN5bnRheCBlcnJvciBiZWZvcmUgY2FsbGluZyB1c2FnZSgpLgorCSAqCisJICogVE9ETyBJdCB3b3VsZCBiZSBuaWNlIHRvIHVwZGF0ZSB0aGUgY2FsbCBzaXRlcyB0byBwYXNzIGJvdGgKKwkgKiB0aGUgc3RhdGljIHVzYWdlIHN0cmluZyBhbmQgdGhlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UuCisJICovCisKKwlleGl0KDEyOSk7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGRpZV9idWlsdGluKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJLyoKKwkgKiBXZSBjYWxsIHRoaXMgdHJhY2UyIGZ1bmN0aW9uIGZpcnN0IGFuZCBleHBlY3QgaXQgdG8gdmFfY29weSAncGFyYW1zJworCSAqIGJlZm9yZSB1c2luZyBpdCAoYmVjYXVzZSBhbiAnYXAnIGNhbiBvbmx5IGJlIHdhbGtlZCBvbmNlKS4KKwkgKi8KKwl0cmFjZTJfY21kX2Vycm9yX3ZhKGVyciwgcGFyYW1zKTsKKworCXZyZXBvcnRmKCJmYXRhbDogIiwgZXJyLCBwYXJhbXMpOworCisJZXhpdCgxMjgpOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9idWlsdGluKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJLyoKKwkgKiBXZSBjYWxsIHRoaXMgdHJhY2UyIGZ1bmN0aW9uIGZpcnN0IGFuZCBleHBlY3QgaXQgdG8gdmFfY29weSAncGFyYW1zJworCSAqIGJlZm9yZSB1c2luZyBpdCAoYmVjYXVzZSBhbiAnYXAnIGNhbiBvbmx5IGJlIHdhbGtlZCBvbmNlKS4KKwkgKi8KKwl0cmFjZTJfY21kX2Vycm9yX3ZhKGVyciwgcGFyYW1zKTsKKworCXZyZXBvcnRmKCJlcnJvcjogIiwgZXJyLCBwYXJhbXMpOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2J1aWx0aW4oY29uc3QgY2hhciAqd2FybiwgdmFfbGlzdCBwYXJhbXMpCit7CisJdnJlcG9ydGYoIndhcm5pbmc6ICIsIHdhcm4sIHBhcmFtcyk7Cit9CisKK3N0YXRpYyBpbnQgZGllX2lzX3JlY3Vyc2luZ19idWlsdGluKHZvaWQpCit7CisJc3RhdGljIGludCBkeWluZzsKKwkvKgorCSAqIEp1c3QgYW4gYXJiaXRyYXJ5IG51bWJlciBYIHdoZXJlICJhIDwgeCA8IGIiIHdoZXJlICJhIiBpcworCSAqICJtYXhpbXVtIG51bWJlciBvZiBwdGhyZWFkcyB3ZSdsbCBldmVyIHBsYXVzaWJseSBzcGF3biIgYW5kCisJICogImIiIGlzICJzb21ldGhpbmcgbGVzcyB0aGFuIEluZiIsIHNpbmNlIHRoZSBwb2ludCBpcyB0bworCSAqIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uLgorCSAqLworCXN0YXRpYyBjb25zdCBpbnQgcmVjdXJzaW9uX2xpbWl0ID0gMTAyNDsKKworCWR5aW5nKys7CisJaWYgKGR5aW5nID4gcmVjdXJzaW9uX2xpbWl0KSB7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoZHlpbmcgPT0gMikgeworCQl3YXJuaW5nKCJkaWUoKSBjYWxsZWQgbWFueSB0aW1lcy4gUmVjdXJzaW9uIGVycm9yIG9yIHJhY3kgdGhyZWFkZWQgZGVhdGghIik7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworLyogSWYgd2UgYXJlIGluIGEgZGxvcGVuKCllZCAuc28gd3JpdGUgdG8gYSBnbG9iYWwgdmFyaWFibGUgd291bGQgc2VnZmF1bHQKKyAqICh1Z2gpLCBzbyBrZWVwIHRoaW5ncyBzdGF0aWMuICovCitzdGF0aWMgTk9SRVRVUk5fUFRSIHZvaWQgKCp1c2FnZV9yb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSA9IHVzYWdlX2J1aWx0aW47CitzdGF0aWMgTk9SRVRVUk5fUFRSIHZvaWQgKCpkaWVfcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykgPSBkaWVfYnVpbHRpbjsKK3N0YXRpYyB2b2lkICgqZXJyb3Jfcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykgPSBlcnJvcl9idWlsdGluOworc3RhdGljIHZvaWQgKCp3YXJuX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpID0gd2Fybl9idWlsdGluOworc3RhdGljIGludCAoKmRpZV9pc19yZWN1cnNpbmcpKHZvaWQpID0gZGllX2lzX3JlY3Vyc2luZ19idWlsdGluOworCit2b2lkIHNldF9kaWVfcm91dGluZShOT1JFVFVSTl9QVFIgdm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpKQoreworCWRpZV9yb3V0aW5lID0gcm91dGluZTsKK30KKwordm9pZCBzZXRfZXJyb3Jfcm91dGluZSh2b2lkICgqcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykpCit7CisJZXJyb3Jfcm91dGluZSA9IHJvdXRpbmU7Cit9CisKK3ZvaWQgKCpnZXRfZXJyb3Jfcm91dGluZSh2b2lkKSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwlyZXR1cm4gZXJyb3Jfcm91dGluZTsKK30KKwordm9pZCBzZXRfd2Fybl9yb3V0aW5lKHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICp3YXJuLCB2YV9saXN0IHBhcmFtcykpCit7CisJd2Fybl9yb3V0aW5lID0gcm91dGluZTsKK30KKwordm9pZCAoKmdldF93YXJuX3JvdXRpbmUodm9pZCkpKGNvbnN0IGNoYXIgKndhcm4sIHZhX2xpc3QgcGFyYW1zKQoreworCXJldHVybiB3YXJuX3JvdXRpbmU7Cit9CisKK3ZvaWQgc2V0X2RpZV9pc19yZWN1cnNpbmdfcm91dGluZShpbnQgKCpyb3V0aW5lKSh2b2lkKSkKK3sKKwlkaWVfaXNfcmVjdXJzaW5nID0gcm91dGluZTsKK30KKwordm9pZCBOT1JFVFVSTiB1c2FnZWYoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJdXNhZ2Vfcm91dGluZShlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3ZvaWQgTk9SRVRVUk4gdXNhZ2UoY29uc3QgY2hhciAqZXJyKQoreworCXVzYWdlZigiJXMiLCBlcnIpOworfQorCit2b2lkIE5PUkVUVVJOIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCWlmIChkaWVfaXNfcmVjdXJzaW5nKCkpIHsKKwkJZnB1dHMoImZhdGFsOiByZWN1cnNpb24gZGV0ZWN0ZWQgaW4gZGllIGhhbmRsZXJcbiIsIHN0ZGVycik7CisJCWV4aXQoMTI4KTsKKwl9CisKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJZGllX3JvdXRpbmUoZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZm10X3dpdGhfZXJyKGNoYXIgKmJ1ZiwgaW50IG4sIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwljaGFyIHN0cl9lcnJvclsyNTZdLCAqZXJyOworCWludCBpLCBqOworCisJZXJyID0gc3RyZXJyb3IoZXJybm8pOworCWZvciAoaSA9IGogPSAwOyBlcnJbaV0gJiYgaiA8IHNpemVvZihzdHJfZXJyb3IpIC0gMTsgKSB7CisJCWlmICgoc3RyX2Vycm9yW2orK10gPSBlcnJbaSsrXSkgIT0gJyUnKQorCQkJY29udGludWU7CisJCWlmIChqIDwgc2l6ZW9mKHN0cl9lcnJvcikgLSAxKSB7CisJCQlzdHJfZXJyb3JbaisrXSA9ICclJzsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vIHJvb20gdG8gZG91YmxlIHRoZSAnJScsIHNvIHdlIG92ZXJ3cml0ZSBpdCB3aXRoCisJCQkgKiAnXDAnIGJlbG93ICovCisJCQlqLS07CisJCQlicmVhazsKKwkJfQorCX0KKwlzdHJfZXJyb3Jbal0gPSAwOworCS8qIFRydW5jYXRpb24gaXMgYWNjZXB0YWJsZSBoZXJlICovCisJc25wcmludGYoYnVmLCBuLCAiJXM6ICVzIiwgZm10LCBzdHJfZXJyb3IpOworCXJldHVybiBidWY7Cit9CisKK3ZvaWQgTk9SRVRVUk4gZGllX2Vycm5vKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWNoYXIgYnVmWzEwMjRdOworCXZhX2xpc3QgcGFyYW1zOworCisJaWYgKGRpZV9pc19yZWN1cnNpbmcoKSkgeworCQlmcHV0cygiZmF0YWw6IHJlY3Vyc2lvbiBkZXRlY3RlZCBpbiBkaWVfZXJybm8gaGFuZGxlclxuIiwKKwkJCXN0ZGVycik7CisJCWV4aXQoMTI4KTsKKwl9CisKKwl2YV9zdGFydChwYXJhbXMsIGZtdCk7CisJZGllX3JvdXRpbmUoZm10X3dpdGhfZXJyKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCksIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKKyN1bmRlZiBlcnJvcl9lcnJubworaW50IGVycm9yX2Vycm5vKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWNoYXIgYnVmWzEwMjRdOworCXZhX2xpc3QgcGFyYW1zOworCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCWVycm9yX3JvdXRpbmUoZm10X3dpdGhfZXJyKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCksIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJcmV0dXJuIC0xOworfQorCisjdW5kZWYgZXJyb3IKK2ludCBlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwllcnJvcl9yb3V0aW5lKGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgd2FybmluZ19lcnJubyhjb25zdCBjaGFyICp3YXJuLCAuLi4pCit7CisJY2hhciBidWZbMTAyNF07CisJdmFfbGlzdCBwYXJhbXM7CisKKwl2YV9zdGFydChwYXJhbXMsIHdhcm4pOworCXdhcm5fcm91dGluZShmbXRfd2l0aF9lcnIoYnVmLCBzaXplb2YoYnVmKSwgd2FybiksIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3ZvaWQgd2FybmluZyhjb25zdCBjaGFyICp3YXJuLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwl2YV9zdGFydChwYXJhbXMsIHdhcm4pOworCXdhcm5fcm91dGluZSh3YXJuLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCisvKiBPbmx5IHNldCB0aGlzLCBldmVyLCBmcm9tIHQvaGVscGVyLywgd2hlbiB2ZXJpZnlpbmcgdGhhdCBidWdzIGFyZSBjYXVnaHQuICovCitpbnQgQlVHX2V4aXRfY29kZTsKKworc3RhdGljIE5PUkVUVVJOIHZvaWQgQlVHX3ZmbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IHBhcmFtcykKK3sKKwljaGFyIHByZWZpeFsyNTZdOworCisJLyogdHJ1bmNhdGlvbiB2aWEgc25wcmludGYgaXMgT0sgaGVyZSAqLworCWlmIChmaWxlKQorCQlzbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAiQlVHOiAlczolZDogIiwgZmlsZSwgbGluZSk7CisJZWxzZQorCQlzbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAiQlVHOiAiKTsKKworCXZyZXBvcnRmKHByZWZpeCwgZm10LCBwYXJhbXMpOworCWlmIChCVUdfZXhpdF9jb2RlKQorCQlleGl0KEJVR19leGl0X2NvZGUpOworCWFib3J0KCk7Cit9CisKKyNpZmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworTk9SRVRVUk4gdm9pZCBCVUdfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJQlVHX3ZmbChmaWxlLCBsaW5lLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorI2Vsc2UKK05PUkVUVVJOIHZvaWQgQlVHKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJQlVHX3ZmbChOVUxMLCAwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorI2VuZGlmCisKKyNpZmRlZiBTVVBQUkVTU19BTk5PVEFURURfTEVBS1MKK3ZvaWQgdW5sZWFrX21lbW9yeShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCit7CisJc3RhdGljIHN0cnVjdCBzdXBwcmVzc2VkX2xlYWtfcm9vdCB7CisJCXN0cnVjdCBzdXBwcmVzc2VkX2xlYWtfcm9vdCAqbmV4dDsKKwkJY2hhciBkYXRhW0ZMRVhfQVJSQVldOworCX0gKnN1cHByZXNzZWRfbGVha3M7CisJc3RydWN0IHN1cHByZXNzZWRfbGVha19yb290ICpyb290OworCisJRkxFWF9BTExPQ19NRU0ocm9vdCwgZGF0YSwgcHRyLCBsZW4pOworCXJvb3QtPm5leHQgPSBzdXBwcmVzc2VkX2xlYWtzOworCXN1cHByZXNzZWRfbGVha3MgPSByb290OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS91c2VyZGlmZi5jIGIvdXNlcmRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmJlMDVlCi0tLSAvZGV2L251bGwKKysrIGIvdXNlcmRpZmYuYwpAQCAtMCwwICsxLDM0NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXJzOworc3RhdGljIGludCBuZHJpdmVyczsKK3N0YXRpYyBpbnQgZHJpdmVyc19hbGxvYzsKKworI2RlZmluZSBQQVRURVJOUyhuYW1lLCBwYXR0ZXJuLCB3b3JkX3JlZ2V4KQkJCVwKKwl7IG5hbWUsIE5VTEwsIC0xLCB7IHBhdHRlcm4sIFJFR19FWFRFTkRFRCB9LAkJXAorCSAgd29yZF9yZWdleCAifFteWzpzcGFjZTpdXXxbXHhjMC1ceGZmXVtceDgwLVx4YmZdKyIgfQorI2RlZmluZSBJUEFUVEVSTihuYW1lLCBwYXR0ZXJuLCB3b3JkX3JlZ2V4KQkJCVwKKwl7IG5hbWUsIE5VTEwsIC0xLCB7IHBhdHRlcm4sIFJFR19FWFRFTkRFRCB8IFJFR19JQ0FTRSB9LCBcCisJICB3b3JkX3JlZ2V4ICJ8W15bOnNwYWNlOl1dfFtceGMwLVx4ZmZdW1x4ODAtXHhiZl0rIiB9CitzdGF0aWMgc3RydWN0IHVzZXJkaWZmX2RyaXZlciBidWlsdGluX2RyaXZlcnNbXSA9IHsKK0lQQVRURVJOKCJhZGEiLAorCSAiIV4oLipbIFx0XSk/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+Pj89P3wmJnxcXHxcXHwiKSwKK1BBVFRFUk5TKCJtYXRsYWIiLAorCSAvKgorCSAgKiBPY3RhdmUgcGF0dGVybiBpcyBtb3N0bHkgdGhlIHNhbWUgYXMgbWF0bGFiLCBleGNlcHQgdGhhdCAnJSUlJyBhbmQKKwkgICogJyMjJyBjYW4gYWxzbyBiZSB1c2VkIHRvIGJlZ2luIGNvZGUgc2VjdGlvbnMsIGluIGFkZGl0aW9uIHRvICclJScKKwkgICogdGhhdCBpcyB1bmRlcnN0b29kIGJ5IGJvdGguCisJICAqLworCSAiXltbOnNwYWNlOl1dKigoY2xhc3NkZWZ8ZnVuY3Rpb24pW1s6c3BhY2U6XV0uKikkfF4oJSUlP3wjIylbWzpzcGFjZTpdXS4qJCIsCisJICJbYS16QS1aX11bYS16QS1aMC05X10qfFstKzAtOS5lXSt8Wz1+PD5dPXxcXC5bKi9cXF4nXXxcXHxcXHx8JiYiKSwKK1BBVFRFUk5TKCJvYmpjIiwKKwkgLyogTmVnYXRlIEMgc3RhdGVtZW50cyB0aGF0IGNhbiBsb29rIGxpa2UgZnVuY3Rpb25zICovCisJICIhXlsgXHRdKihkb3xmb3J8aWZ8ZWxzZXxyZXR1cm58c3dpdGNofHdoaWxlKVxuIgorCSAvKiBPYmplY3RpdmUtQyBtZXRob2RzICovCisJICJeWyBcdF0qKFstK11bIFx0XSpcXChbIFx0XSpbQS1aYS16X11bQS1aYS16XzAtOSogXHRdKlxcKVsgXHRdKltBLVphLXpfXS4qKSRcbiIKKwkgLyogQyBmdW5jdGlvbnMgKi8KKwkgIl5bIFx0XSooKFtBLVphLXpfXVtBLVphLXpfMC05XSpbIFx0XSspK1tBLVphLXpfXVtBLVphLXpfMC05XSpbIFx0XSpcXChbXjtdKikkXG4iCisJIC8qIE9iamVjdGl2ZS1DIGNsYXNzL3Byb3RvY29sIGRlZmluaXRpb25zICovCisJICJeKEAoaW1wbGVtZW50YXRpb258aW50ZXJmYWNlfHByb3RvY29sKVsgXHRdLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXStbZkZsTF0/fDBbeFhiQl0/WzAtOWEtZkEtRl0rW2xMXT8iCisJICJ8Wy0rKi88PiUmXnw9IV09fC0tfFxcK1xcK3w8PD0/fD4+PT98JiZ8XFx8XFx8fDo6fC0+IiksCitQQVRURVJOUygicGFzY2FsIiwKKwkgIl4oKChjbGFzc1sgXHRdKyk/KHByb2NlZHVyZXxmdW5jdGlvbil8Y29uc3RydWN0b3J8ZGVzdHJ1Y3RvcnxpbnRlcmZhY2V8IgorCQkiaW1wbGVtZW50YXRpb258aW5pdGlhbGl6YXRpb258ZmluYWxpemF0aW9uKVsgXHRdKi4qKSQiCisJICJcbiIKKwkgIl4oLio9WyBcdF0qKGNsYXNzfHJlY29yZCkuKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdKyIKKwkgInw8Pnw8PXw+PXw6PXxcXC5cXC4iKSwKK1BBVFRFUk5TKCJwZXJsIiwKKwkgIl5wYWNrYWdlIC4qXG4iCisJICJec3ViIFtbOmFsbnVtOl1fJzpdK1sgXHRdKiIKKwkJIihcXChbXildKlxcKVsgXHRdKik/IiAvKiBwcm90b3R5cGUgKi8KKwkJLyoKKwkJICogQXR0cmlidXRlcy4gIEEgcmVnZXggY2FuJ3QgY291bnQgbmVzdGVkIHBhcmVudGhlc2VzLAorCQkgKiBzbyBqdXN0IHNsdXJwIHVwIHdoYXRldmVyIHdlIHNlZSwgdGFraW5nIGNhcmUgbm90CisJCSAqIHRvIGFjY2VwdCBsaW5lcyBsaWtlICJzdWIgZm9vOyAjIGRlZmluZWQgZWxzZXdoZXJlIi4KKwkJICoKKwkJICogQW4gYXR0cmlidXRlIGNvdWxkIGNvbnRhaW4gYSBzZW1pY29sb24sIGJ1dCBhdCB0aGF0CisJCSAqIHBvaW50IGl0IHNlZW1zIHJlYXNvbmFibGUgZW5vdWdoIHRvIGdpdmUgdXAuCisJCSAqLworCQkiKDpbXjsjXSopPyIKKwkJIihcXHtbIFx0XSopPyIgLyogYnJhY2UgY2FuIGNvbWUgaGVyZSBvciBvbiB0aGUgbmV4dCBsaW5lICovCisJCSIoIy4qKT8kXG4iIC8qIGNvbW1lbnQgKi8KKwkgIl4oQkVHSU58RU5EfElOSVR8Q0hFQ0t8VU5JVENIRUNLfEFVVE9MT0FEfERFU1RST1kpWyBcdF0qIgorCQkiKFxce1sgXHRdKik/IiAvKiBicmFjZSBjYW4gY29tZSBoZXJlIG9yIG9uIHRoZSBuZXh0IGxpbmUgKi8KKwkJIigjLiopPyRcbiIKKwkgIl49aGVhZFswLTldIC4qIiwJLyogUE9EICovCisJIC8qIC0tICovCisJICJbWzphbHBoYTpdXyddW1s6YWxudW06XV8nXSoiCisJICJ8MFt4Yl0/WzAtOWEtZkEtRl9dKiIKKwkgLyogdGFraW5nIGNhcmUgbm90IHRvIGludGVycHJldCAzLi41IGFzICgzLikoLjUpICovCisJICJ8WzAtOWEtZkEtRl9dKyhcXC5bMC05YS1mQS1GX10rKT8oW2VFXVstK10/WzAtOV9dKyk/IgorCSAifD0+fC1bcnd4b1JXWE9lenNmZGxwU3Vna2JjdFRCTUFDPl18fn58OjoiCisJICJ8JiY9fFxcfFxcfD18Ly89fFxcKlxcKj0iCisJICJ8JiZ8XFx8XFx8fC8vfFxcK1xcK3wtLXxcXCpcXCp8XFwuXFwuXFwuPyIKKwkgInxbLSsqLyUuXiY8Pj0hfF09IgorCSAifD1+fCF+IgorCSAifDw8fDw+fDw9Pnw+PiIpLAorUEFUVEVSTlMoInBocCIsCisJICJeW1x0IF0qKCgocHVibGljfHByb3RlY3RlZHxwcml2YXRlfHN0YXRpYylbXHQgXSspKmZ1bmN0aW9uLiopJFxuIgorCSAiXltcdCBdKigoKChmaW5hbHxhYnN0cmFjdClbXHQgXSspP2NsYXNzfGludGVyZmFjZXx0cmFpdCkuKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK3wwW3hYYkJdP1swLTlhLWZBLUZdKyIKKwkgInxbLSsqLzw+JSZefD0hLl09fC0tfFxcK1xcK3w8PD0/fD4+PT98PT09fCYmfFxcfFxcfHw6OnwtPiIpLAorUEFUVEVSTlMoInB5dGhvbiIsICJeWyBcdF0qKChjbGFzc3woYXN5bmNbIFx0XSspP2RlZilbIFx0XS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2pKbExdP3wwW3hYXT9bMC05YS1mQS1GXStbbExdPyIKKwkgInxbLSsqLzw+JSZefD0hXT18Ly89P3w8PD0/fD4+PT98XFwqXFwqPT8iKSwKKwkgLyogLS0gKi8KK1BBVFRFUk5TKCJydWJ5IiwgIl5bIFx0XSooKGNsYXNzfG1vZHVsZXxkZWYpWyBcdF0uKikkIiwKKwkgLyogLS0gKi8KKwkgIihAfEBAfFxcJCk/W2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rfDBbeFhiQl0/WzAtOWEtZkEtRl0rfFxcPyhcXFxcQy0pPyhcXFxcTS0pPy4iCisJICJ8Ly89P3xbLSsqLzw+JSZefD0hXT18PDw9P3w+Pj0/fD09PXxcXC57MSwzfXw6OnxbIT1dfiIpLAorUEFUVEVSTlMoInJ1c3QiLAorCSAiXltcdCBdKigocHViKFxcKFteXFwpXStcXCkpP1tcdCBdKyk/KChhc3luY3xjb25zdHx1bnNhZmV8ZXh0ZXJuKFtcdCBdK1wiW15cIl0rXCIpKVtcdCBdKyk/KHN0cnVjdHxlbnVtfHVuaW9ufG1vZHx0cmFpdHxmbnxpbXBsKVs8IFx0XStbXjtdKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8WzAtOV1bMC05X2EtZkEtRmlvc3V4el0qKFxcLihbMC05XSpbZUVdWystXT8pP1swLTlfZkZdKik/IgorCSAifFstKypcXC88PiUmXnw9ITpdPXw8PD0/fD4+PT98JiZ8XFx8XFx8fC0+fD0+fFxcLnsyfT18XFwuezN9fDo6IiksCitQQVRURVJOUygiYmlidGV4IiwgIihAW2EtekEtWl17MSx9WyBcdF0qXFx7ezAsMX1bIFx0XSpbXiBcdFwiQCcsXFwjfXt+JV0qKS4qJCIsCisJICJbPXt9XCJdfFtePXt9XCIgXHRdKyIpLAorUEFUVEVSTlMoInRleCIsICJeKFxcXFwoKHN1Yikqc2VjdGlvbnxjaGFwdGVyfHBhcnQpXFwqezAsMX1cXHsuKikkIiwKKwkgIlxcXFxbYS16QS1aQF0rfFxcXFwufFthLXpBLVowLTlceDgwLVx4ZmZdKyIpLAorUEFUVEVSTlMoImNwcCIsCisJIC8qIEp1bXAgdGFyZ2V0cyBvciBhY2Nlc3MgZGVjbGFyYXRpb25zICovCisJICIhXlsgXHRdKltBLVphLXpfXVtBLVphLXpfMC05XSo6W1s6c3BhY2U6XV0qKCR8L1svKl0pXG4iCisJIC8qIGZ1bmN0aW9ucy9tZXRob2RzLCB2YXJpYWJsZXMsIGFuZCBjb21wb3VuZHMgYXQgdG9wIGxldmVsICovCisJICJeKCg6OltbOnNwYWNlOl1dKik/W0EtWmEtel9dLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXStbZkZsTF0/fDBbeFhiQl0/WzAtOWEtZkEtRl0rW2xMdVVdKiIKKwkgInxbLSsqLzw+JSZefD0hXT18LS18XFwrXFwrfDw8PT98Pj49P3wmJnxcXHxcXHx8Ojp8LT5cXCo/fFxcLlxcKiIpLAorUEFUVEVSTlMoImNzaGFycCIsCisJIC8qIEtleXdvcmRzICovCisJICIhXlsgXHRdKihkb3x3aGlsZXxmb3J8aWZ8ZWxzZXxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofGNhc2V8dGhyb3d8Y2F0Y2h8dXNpbmcpXG4iCisJIC8qIE1ldGhvZHMgYW5kIGNvbnN0cnVjdG9ycyAqLworCSAiXlsgXHRdKigoKHN0YXRpY3xwdWJsaWN8aW50ZXJuYWx8cHJpdmF0ZXxwcm90ZWN0ZWR8bmV3fHZpcnR1YWx8c2VhbGVkfG92ZXJyaWRlfHVuc2FmZXxhc3luYylbIFx0XSspKltdWzw+QC5+X1s6YWxudW06XV0rWyBcdF0rWzw+QC5fWzphbG51bTpdXStbIFx0XSpcXCguKlxcKSlbIFx0XSokXG4iCisJIC8qIFByb3BlcnRpZXMgKi8KKwkgIl5bIFx0XSooKChzdGF0aWN8cHVibGljfGludGVybmFsfHByaXZhdGV8cHJvdGVjdGVkfG5ld3x2aXJ0dWFsfHNlYWxlZHxvdmVycmlkZXx1bnNhZmUpWyBcdF0rKSpbXVs8PkAufl9bOmFsbnVtOl1dK1sgXHRdK1tALl9bOmFsbnVtOl1dKylbIFx0XSokXG4iCisJIC8qIFR5cGUgZGVmaW5pdGlvbnMgKi8KKwkgIl5bIFx0XSooKChzdGF0aWN8cHVibGljfGludGVybmFsfHByaXZhdGV8cHJvdGVjdGVkfG5ld3x1bnNhZmV8c2VhbGVkfGFic3RyYWN0fHBhcnRpYWwpWyBcdF0rKSooY2xhc3N8ZW51bXxpbnRlcmZhY2V8c3RydWN0KVsgXHRdKy4qKSRcbiIKKwkgLyogTmFtZXNwYWNlICovCisJICJeWyBcdF0qKG5hbWVzcGFjZVsgXHRdKy4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2ZGbExdP3wwW3hYYkJdP1swLTlhLWZBLUZdK1tsTF0/IgorCSAifFstKyovPD4lJl58PSFdPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fCYmfFxcfFxcfHw6OnwtPiIpLAorSVBBVFRFUk4oImNzcyIsCisJICIhWzo7XVtbOnNwYWNlOl1dKiRcbiIKKwkgIl5bX2EtejAtOV0uKiQiLAorCSAvKiAtLSAqLworCSAvKgorCSAgKiBUaGlzIHJlZ2V4IGNvbWVzIGZyb20gVzNDIENTUyBzcGVjcy4gU2hvdWxkIHRoZW9yZXRpY2FsbHkgYWxzbworCSAgKiBhbGxvdyBJU08gMTA2NDYgY2hhcmFjdGVycyBVKzAwQTAgYW5kIGhpZ2hlciwKKwkgICogYnV0IHRoZXkgYXJlIG5vdCBoYW5kbGVkIGluIHRoaXMgcmVnZXguCisJICAqLworCSAiLT9bX2EtekEtWl1bLV9hLXpBLVowLTldKiIgLyogaWRlbnRpZmllcnMgKi8KKwkgInwtP1swLTldK3xcXCNbMC05YS1mQS1GXSsiIC8qIG51bWJlcnMgKi8KKyksCit7ICJkZWZhdWx0IiwgTlVMTCwgLTEsIHsgTlVMTCwgMCB9IH0sCit9OworI3VuZGVmIFBBVFRFUk5TCisjdW5kZWYgSVBBVFRFUk4KKworc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgZHJpdmVyX3RydWUgPSB7CisJImRpZmY9dHJ1ZSIsCisJTlVMTCwKKwkwLAorCXsgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzZXJkaWZmX2RyaXZlciBkcml2ZXJfZmFsc2UgPSB7CisJIiFkaWZmIiwKKwlOVUxMLAorCTEsCisJeyBOVUxMLCAwIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9maW5kX2J5X25hbWVsZW4oY29uc3QgY2hhciAqaywgaW50IGxlbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbmRyaXZlcnM7IGkrKykgeworCQlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcnYgPSBkcml2ZXJzICsgaTsKKwkJaWYgKCFzdHJuY21wKGRydi0+bmFtZSwgaywgbGVuKSAmJiAhZHJ2LT5uYW1lW2xlbl0pCisJCQlyZXR1cm4gZHJ2OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWlsdGluX2RyaXZlcnMpOyBpKyspIHsKKwkJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2ID0gYnVpbHRpbl9kcml2ZXJzICsgaTsKKwkJaWYgKCFzdHJuY21wKGRydi0+bmFtZSwgaywgbGVuKSAmJiAhZHJ2LT5uYW1lW2xlbl0pCisJCQlyZXR1cm4gZHJ2OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBwYXJzZV9mdW5jbmFtZShzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKmYsIGNvbnN0IGNoYXIgKmssCisJCWNvbnN0IGNoYXIgKnYsIGludCBjZmxhZ3MpCit7CisJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZmLT5wYXR0ZXJuLCBrLCB2KSA8IDApCisJCXJldHVybiAtMTsKKwlmLT5jZmxhZ3MgPSBjZmxhZ3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfdHJpc3RhdGUoaW50ICpiLCBjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KQoreworCWlmICh2ICYmICFzdHJjYXNlY21wKHYsICJhdXRvIikpCisJCSpiID0gLTE7CisJZWxzZQorCQkqYiA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9ib29sKGludCAqYiwgY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikKK3sKKwkqYiA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHVzZXJkaWZmX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KQoreworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRydjsKKwljb25zdCBjaGFyICpuYW1lLCAqdHlwZTsKKwlpbnQgbmFtZWxlbjsKKworCWlmIChwYXJzZV9jb25maWdfa2V5KGssICJkaWZmIiwgJm5hbWUsICZuYW1lbGVuLCAmdHlwZSkgfHwgIW5hbWUpCisJCXJldHVybiAwOworCisJZHJ2ID0gdXNlcmRpZmZfZmluZF9ieV9uYW1lbGVuKG5hbWUsIG5hbWVsZW4pOworCWlmICghZHJ2KSB7CisJCUFMTE9DX0dST1coZHJpdmVycywgbmRyaXZlcnMrMSwgZHJpdmVyc19hbGxvYyk7CisJCWRydiA9ICZkcml2ZXJzW25kcml2ZXJzKytdOworCQltZW1zZXQoZHJ2LCAwLCBzaXplb2YoKmRydikpOworCQlkcnYtPm5hbWUgPSB4bWVtZHVweihuYW1lLCBuYW1lbGVuKTsKKwkJZHJ2LT5iaW5hcnkgPSAtMTsKKwl9CisKKwlpZiAoIXN0cmNtcCh0eXBlLCAiZnVuY25hbWUiKSkKKwkJcmV0dXJuIHBhcnNlX2Z1bmNuYW1lKCZkcnYtPmZ1bmNuYW1lLCBrLCB2LCAwKTsKKwlpZiAoIXN0cmNtcCh0eXBlLCAieGZ1bmNuYW1lIikpCisJCXJldHVybiBwYXJzZV9mdW5jbmFtZSgmZHJ2LT5mdW5jbmFtZSwgaywgdiwgUkVHX0VYVEVOREVEKTsKKwlpZiAoIXN0cmNtcCh0eXBlLCAiYmluYXJ5IikpCisJCXJldHVybiBwYXJzZV90cmlzdGF0ZSgmZHJ2LT5iaW5hcnksIGssIHYpOworCWlmICghc3RyY21wKHR5cGUsICJjb21tYW5kIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT5leHRlcm5hbCwgaywgdik7CisJaWYgKCFzdHJjbXAodHlwZSwgInRleHRjb252IikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT50ZXh0Y29udiwgaywgdik7CisJaWYgKCFzdHJjbXAodHlwZSwgImNhY2hldGV4dGNvbnYiKSkKKwkJcmV0dXJuIHBhcnNlX2Jvb2woJmRydi0+dGV4dGNvbnZfd2FudF9jYWNoZSwgaywgdik7CisJaWYgKCFzdHJjbXAodHlwZSwgIndvcmRyZWdleCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+d29yZF9yZWdleCwgaywgdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdXNlcmRpZmZfZmluZF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGxlbiA9IHN0cmxlbihuYW1lKTsKKwlyZXR1cm4gdXNlcmRpZmZfZmluZF9ieV9uYW1lbGVuKG5hbWUsIGxlbik7Cit9CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2ZpbmRfYnlfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IGF0dHJfY2hlY2sgKmNoZWNrOworCisJaWYgKCFjaGVjaykKKwkJY2hlY2sgPSBhdHRyX2NoZWNrX2luaXRsKCJkaWZmIiwgTlVMTCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gTlVMTDsKKwlnaXRfY2hlY2tfYXR0cihpc3RhdGUsIHBhdGgsIGNoZWNrKTsKKworCWlmIChBVFRSX1RSVUUoY2hlY2stPml0ZW1zWzBdLnZhbHVlKSkKKwkJcmV0dXJuICZkcml2ZXJfdHJ1ZTsKKwlpZiAoQVRUUl9GQUxTRShjaGVjay0+aXRlbXNbMF0udmFsdWUpKQorCQlyZXR1cm4gJmRyaXZlcl9mYWxzZTsKKwlpZiAoQVRUUl9VTlNFVChjaGVjay0+aXRlbXNbMF0udmFsdWUpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdXNlcmRpZmZfZmluZF9ieV9uYW1lKGNoZWNrLT5pdGVtc1swXS52YWx1ZSk7Cit9CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2dldF90ZXh0Y29udihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgICAgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyKQoreworCWlmICghZHJpdmVyLT50ZXh0Y29udikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZHJpdmVyLT50ZXh0Y29udl93YW50X2NhY2hlICYmICFkcml2ZXItPnRleHRjb252X2NhY2hlKSB7CisJCXN0cnVjdCBub3Rlc19jYWNoZSAqYyA9IHhtYWxsb2Moc2l6ZW9mKCpjKSk7CisJCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRmKCZuYW1lLCAidGV4dGNvbnYvJXMiLCBkcml2ZXItPm5hbWUpOworCQlub3Rlc19jYWNoZV9pbml0KHIsIGMsIG5hbWUuYnVmLCBkcml2ZXItPnRleHRjb252KTsKKwkJZHJpdmVyLT50ZXh0Y29udl9jYWNoZSA9IGM7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwl9CisKKwlyZXR1cm4gZHJpdmVyOworfQpkaWZmIC0tZ2l0IGEvdXNlcmRpZmYuaCBiL3VzZXJkaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzMDU3ZQotLS0gL2Rldi9udWxsCisrKyBiL3VzZXJkaWZmLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBVU0VSRElGRl9ICisjZGVmaW5lIFVTRVJESUZGX0gKKworI2luY2x1ZGUgIm5vdGVzLWNhY2hlLmgiCisKK3N0cnVjdCBpbmRleF9zdGF0ZTsKK3N0cnVjdCByZXBvc2l0b3J5OworCitzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgeworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJaW50IGNmbGFnczsKK307CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZXh0ZXJuYWw7CisJaW50IGJpbmFyeTsKKwlzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgZnVuY25hbWU7CisJY29uc3QgY2hhciAqd29yZF9yZWdleDsKKwljb25zdCBjaGFyICp0ZXh0Y29udjsKKwlzdHJ1Y3Qgbm90ZXNfY2FjaGUgKnRleHRjb252X2NhY2hlOworCWludCB0ZXh0Y29udl93YW50X2NhY2hlOworfTsKKworaW50IHVzZXJkaWZmX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KTsKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2ZpbmRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2ZpbmRfYnlfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBJbml0aWFsaXplIGFueSB0ZXh0Y29udi1yZWxhdGVkIGZpZWxkcyBpbiB0aGUgZHJpdmVyIGFuZCByZXR1cm4gaXQsIG9yIE5VTEwKKyAqIGlmIGl0IGRvZXMgbm90IGhhdmUgdGV4dGNvbnYgZW5hYmxlZCBhdCBhbGwuCisgKi8KK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2dldF90ZXh0Y29udihzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJICAgICAgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyKTsKKworI2VuZGlmIC8qIFVTRVJESUZGICovCmRpZmYgLS1naXQgYS91dGY4LmMgYi91dGY4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzOTM2MQotLS0gL2Rldi9udWxsCisrKyBiL3V0ZjguYwpAQCAtMCwwICsxLDgxMCBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworLyogVGhpcyBjb2RlIGlzIG9yaWdpbmFsbHkgZnJvbSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzLyAqLworCitzdGF0aWMgY29uc3QgY2hhciB1dGYxNl9iZV9ib21bXSA9IHsnXHhGRScsICdceEZGJ307CitzdGF0aWMgY29uc3QgY2hhciB1dGYxNl9sZV9ib21bXSA9IHsnXHhGRicsICdceEZFJ307CitzdGF0aWMgY29uc3QgY2hhciB1dGYzMl9iZV9ib21bXSA9IHsnXDAnLCAnXDAnLCAnXHhGRScsICdceEZGJ307CitzdGF0aWMgY29uc3QgY2hhciB1dGYzMl9sZV9ib21bXSA9IHsnXHhGRicsICdceEZFJywgJ1wwJywgJ1wwJ307CisKK3N0cnVjdCBpbnRlcnZhbCB7CisJdWNzX2NoYXJfdCBmaXJzdDsKKwl1Y3NfY2hhcl90IGxhc3Q7Cit9OworCitzaXplX3QgZGlzcGxheV9tb2RlX2VzY19zZXF1ZW5jZV9sZW4oY29uc3QgY2hhciAqcykKK3sKKwljb25zdCBjaGFyICpwID0gczsKKwlpZiAoKnArKyAhPSAnXDAzMycpCisJCXJldHVybiAwOworCWlmICgqcCsrICE9ICdbJykKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGlzZGlnaXQoKnApIHx8ICpwID09ICc7JykKKwkJcCsrOworCWlmICgqcCsrICE9ICdtJykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHAgLSBzOworfQorCisvKiBhdXhpbGlhcnkgZnVuY3Rpb24gZm9yIGJpbmFyeSBzZWFyY2ggaW4gaW50ZXJ2YWwgdGFibGUgKi8KK3N0YXRpYyBpbnQgYmlzZWFyY2godWNzX2NoYXJfdCB1Y3MsIGNvbnN0IHN0cnVjdCBpbnRlcnZhbCAqdGFibGUsIGludCBtYXgpCit7CisJaW50IG1pbiA9IDA7CisJaW50IG1pZDsKKworCWlmICh1Y3MgPCB0YWJsZVswXS5maXJzdCB8fCB1Y3MgPiB0YWJsZVttYXhdLmxhc3QpCisJCXJldHVybiAwOworCXdoaWxlIChtYXggPj0gbWluKSB7CisJCW1pZCA9IG1pbiArIChtYXggLSBtaW4pIC8gMjsKKwkJaWYgKHVjcyA+IHRhYmxlW21pZF0ubGFzdCkKKwkJCW1pbiA9IG1pZCArIDE7CisJCWVsc2UgaWYgKHVjcyA8IHRhYmxlW21pZF0uZmlyc3QpCisJCQltYXggPSBtaWQgLSAxOworCQllbHNlCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGRlZmluZSB0aGUgY29sdW1uIHdpZHRoIG9mIGFuIElTTyAxMDY0NgorICogY2hhcmFjdGVyIGFzIGZvbGxvd3M6CisgKgorICogICAgLSBUaGUgbnVsbCBjaGFyYWN0ZXIgKFUrMDAwMCkgaGFzIGEgY29sdW1uIHdpZHRoIG9mIDAuCisgKgorICogICAgLSBPdGhlciBDMC9DMSBjb250cm9sIGNoYXJhY3RlcnMgYW5kIERFTCB3aWxsIGxlYWQgdG8gYSByZXR1cm4KKyAqICAgICAgdmFsdWUgb2YgLTEuCisgKgorICogICAgLSBOb24tc3BhY2luZyBhbmQgZW5jbG9zaW5nIGNvbWJpbmluZyBjaGFyYWN0ZXJzIChnZW5lcmFsCisgKiAgICAgIGNhdGVnb3J5IGNvZGUgTW4gb3IgTWUgaW4gdGhlIFVuaWNvZGUgZGF0YWJhc2UpIGhhdmUgYQorICogICAgICBjb2x1bW4gd2lkdGggb2YgMC4KKyAqCisgKiAgICAtIFNPRlQgSFlQSEVOIChVKzAwQUQpIGhhcyBhIGNvbHVtbiB3aWR0aCBvZiAxLgorICoKKyAqICAgIC0gT3RoZXIgZm9ybWF0IGNoYXJhY3RlcnMgKGdlbmVyYWwgY2F0ZWdvcnkgY29kZSBDZiBpbiB0aGUgVW5pY29kZQorICogICAgICBkYXRhYmFzZSkgYW5kIFpFUk8gV0lEVEggU1BBQ0UgKFUrMjAwQikgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAwLgorICoKKyAqICAgIC0gSGFuZ3VsIEphbW8gbWVkaWFsIHZvd2VscyBhbmQgZmluYWwgY29uc29uYW50cyAoVSsxMTYwLVUrMTFGRikKKyAqICAgICAgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAwLgorICoKKyAqICAgIC0gU3BhY2luZyBjaGFyYWN0ZXJzIGluIHRoZSBFYXN0IEFzaWFuIFdpZGUgKFcpIG9yIEVhc3QgQXNpYW4KKyAqICAgICAgRnVsbC13aWR0aCAoRikgY2F0ZWdvcnkgYXMgZGVmaW5lZCBpbiBVbmljb2RlIFRlY2huaWNhbAorICogICAgICBSZXBvcnQgIzExIGhhdmUgYSBjb2x1bW4gd2lkdGggb2YgMi4KKyAqCisgKiAgICAtIEFsbCByZW1haW5pbmcgY2hhcmFjdGVycyAoaW5jbHVkaW5nIGFsbCBwcmludGFibGUKKyAqICAgICAgSVNPIDg4NTktMSBhbmQgV0dMNCBjaGFyYWN0ZXJzLCBVbmljb2RlIGNvbnRyb2wgY2hhcmFjdGVycywKKyAqICAgICAgZXRjLikgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAxLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHVjc19jaGFyX3QgY2hhcmFjdGVycyBhcmUgZW5jb2RlZAorICogaW4gSVNPIDEwNjQ2LgorICovCisKK3N0YXRpYyBpbnQgZ2l0X3djd2lkdGgodWNzX2NoYXJfdCBjaCkKK3sKKwkvKgorCSAqIFNvcnRlZCBsaXN0IG9mIG5vbi1vdmVybGFwcGluZyBpbnRlcnZhbHMgb2Ygbm9uLXNwYWNpbmcgY2hhcmFjdGVycywKKwkgKi8KKyNpbmNsdWRlICJ1bmljb2RlLXdpZHRoLmgiCisKKwkvKiB0ZXN0IGZvciA4LWJpdCBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwlpZiAoY2ggPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKGNoIDwgMzIgfHwgKGNoID49IDB4N2YgJiYgY2ggPCAweGEwKSkKKwkJcmV0dXJuIC0xOworCisJLyogYmluYXJ5IHNlYXJjaCBpbiB0YWJsZSBvZiBub24tc3BhY2luZyBjaGFyYWN0ZXJzICovCisJaWYgKGJpc2VhcmNoKGNoLCB6ZXJvX3dpZHRoLCBBUlJBWV9TSVpFKHplcm9fd2lkdGgpIC0gMSkpCisJCXJldHVybiAwOworCisJLyogYmluYXJ5IHNlYXJjaCBpbiB0YWJsZSBvZiBkb3VibGUgd2lkdGggY2hhcmFjdGVycyAqLworCWlmIChiaXNlYXJjaChjaCwgZG91YmxlX3dpZHRoLCBBUlJBWV9TSVpFKGRvdWJsZV93aWR0aCkgLSAxKSkKKwkJcmV0dXJuIDI7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFBpY2sgb25lIHVjcyBjaGFyYWN0ZXIgc3RhcnRpbmcgZnJvbSB0aGUgbG9jYXRpb24gKnN0YXJ0IHBvaW50cyBhdCwKKyAqIGFuZCByZXR1cm4gaXQsIHdoaWxlIHVwZGF0aW5nIHRoZSAqc3RhcnQgcG9pbnRlciB0byBwb2ludCBhdCB0aGUKKyAqIGVuZCBvZiB0aGF0IGNoYXJhY3Rlci4gIFdoZW4gcmVtYWluZGVyX3AgaXMgbm90IE5VTEwsIHRoZSBsb2NhdGlvbgorICogaG9sZHMgdGhlIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgaW4gdGhlIHN0cmluZyB0aGF0IHdlIGFyZSBhbGxvd2VkCisgKiB0byBwaWNrIGZyb20uICBPdGhlcndpc2Ugd2UgYXJlIGFsbG93ZWQgdG8gcGljayB1cCB0byB0aGUgTlVMIHRoYXQKKyAqIHdvdWxkIGV2ZW50dWFsbHkgYXBwZWFyIGluIHRoZSBzdHJpbmcuICAqcmVtYWluZGVyX3AgaXMgYWxzbyByZWR1Y2VkCisgKiBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGhhdmUgY29uc3VtZWQuCisgKgorICogSWYgdGhlIHN0cmluZyB3YXMgbm90IGEgdmFsaWQgVVRGLTgsICpzdGFydCBwb2ludGVyIGlzIHNldCB0byBOVUxMCisgKiBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCisgKi8KK3N0YXRpYyB1Y3NfY2hhcl90IHBpY2tfb25lX3V0ZjhfY2hhcihjb25zdCBjaGFyICoqc3RhcnQsIHNpemVfdCAqcmVtYWluZGVyX3ApCit7CisJdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopKnN0YXJ0OworCXVjc19jaGFyX3QgY2g7CisJc2l6ZV90IHJlbWFpbmRlciwgaW5jcjsKKworCS8qCisJICogQSBjYWxsZXIgdGhhdCBhc3N1bWVzIE5VTCB0ZXJtaW5hdGVkIHRleHQgY2FuIGNob29zZQorCSAqIG5vdCB0byBib3RoZXIgd2l0aCB0aGUgcmVtYWluZGVyIGxlbmd0aC4gIFdlIHdpbGwKKwkgKiBzdG9wIGF0IHRoZSBmaXJzdCBOVUwuCisJICovCisJcmVtYWluZGVyID0gKHJlbWFpbmRlcl9wID8gKnJlbWFpbmRlcl9wIDogOTk5KTsKKworCWlmIChyZW1haW5kZXIgPCAxKSB7CisJCWdvdG8gaW52YWxpZDsKKwl9IGVsc2UgaWYgKCpzIDwgMHg4MCkgeworCQkvKiAweHh4eHh4eCAqLworCQljaCA9ICpzOworCQlpbmNyID0gMTsKKwl9IGVsc2UgaWYgKChzWzBdICYgMHhlMCkgPT0gMHhjMCkgeworCQkvKiAxMTBYWFhYeCAxMHh4eHh4eCAqLworCQlpZiAocmVtYWluZGVyIDwgMiB8fAorCQkgICAgKHNbMV0gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAoc1swXSAmIDB4ZmUpID09IDB4YzApCisJCQlnb3RvIGludmFsaWQ7CisJCWNoID0gKChzWzBdICYgMHgxZikgPDwgNikgfCAoc1sxXSAmIDB4M2YpOworCQlpbmNyID0gMjsKKwl9IGVsc2UgaWYgKChzWzBdICYgMHhmMCkgPT0gMHhlMCkgeworCQkvKiAxMTEwWFhYWCAxMFh4eHh4eCAxMHh4eHh4eCAqLworCQlpZiAocmVtYWluZGVyIDwgMyB8fAorCQkgICAgKHNbMV0gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAoc1syXSAmIDB4YzApICE9IDB4ODAgfHwKKwkJICAgIC8qIG92ZXJsb25nPyAqLworCQkgICAgKHNbMF0gPT0gMHhlMCAmJiAoc1sxXSAmIDB4ZTApID09IDB4ODApIHx8CisJCSAgICAvKiBzdXJyb2dhdGU/ICovCisJCSAgICAoc1swXSA9PSAweGVkICYmIChzWzFdICYgMHhlMCkgPT0gMHhhMCkgfHwKKwkJICAgIC8qIFUrRkZGRSBvciBVK0ZGRkY/ICovCisJCSAgICAoc1swXSA9PSAweGVmICYmIHNbMV0gPT0gMHhiZiAmJgorCQkgICAgIChzWzJdICYgMHhmZSkgPT0gMHhiZSkpCisJCQlnb3RvIGludmFsaWQ7CisJCWNoID0gKChzWzBdICYgMHgwZikgPDwgMTIpIHwKKwkJCSgoc1sxXSAmIDB4M2YpIDw8IDYpIHwgKHNbMl0gJiAweDNmKTsKKwkJaW5jciA9IDM7CisJfSBlbHNlIGlmICgoc1swXSAmIDB4ZjgpID09IDB4ZjApIHsKKwkJLyogMTExMTBYWFggMTBYWHh4eHggMTB4eHh4eHggMTB4eHh4eHggKi8KKwkJaWYgKHJlbWFpbmRlciA8IDQgfHwKKwkJICAgIChzWzFdICYgMHhjMCkgIT0gMHg4MCB8fAorCQkgICAgKHNbMl0gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAoc1szXSAmIDB4YzApICE9IDB4ODAgfHwKKwkJICAgIC8qIG92ZXJsb25nPyAqLworCQkgICAgKHNbMF0gPT0gMHhmMCAmJiAoc1sxXSAmIDB4ZjApID09IDB4ODApIHx8CisJCSAgICAvKiA+IFUrMTBGRkZGPyAqLworCQkgICAgKHNbMF0gPT0gMHhmNCAmJiBzWzFdID4gMHg4ZikgfHwgc1swXSA+IDB4ZjQpCisJCQlnb3RvIGludmFsaWQ7CisJCWNoID0gKChzWzBdICYgMHgwNykgPDwgMTgpIHwgKChzWzFdICYgMHgzZikgPDwgMTIpIHwKKwkJCSgoc1syXSAmIDB4M2YpIDw8IDYpIHwgKHNbM10gJiAweDNmKTsKKwkJaW5jciA9IDQ7CisJfSBlbHNlIHsKK2ludmFsaWQ6CisJCSpzdGFydCA9IE5VTEw7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCArPSBpbmNyOworCWlmIChyZW1haW5kZXJfcCkKKwkJKnJlbWFpbmRlcl9wID0gcmVtYWluZGVyIC0gaW5jcjsKKwlyZXR1cm4gY2g7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9jY3VwaWVkIGJ5IHRoZSBjaGFyYWN0ZXIKKyAqIHBvaW50ZWQgdG8gYnkgdGhlIHZhcmlhYmxlIHN0YXJ0LiBUaGUgcG9pbnRlciBpcyB1cGRhdGVkIHRvIHBvaW50IGF0CisgKiB0aGUgbmV4dCBjaGFyYWN0ZXIuIFdoZW4gcmVtYWluZGVyX3AgaXMgbm90IE5VTEwsIGl0IHBvaW50cyBhdCB0aGUKKyAqIGxvY2F0aW9uIHRoYXQgc3RvcmVzIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGJ5dGVzIHdlIGNhbiB1c2UgdG8gcGljaworICogYSBjaGFyYWN0ZXIgKHNlZSBwaWNrX29uZV91dGY4X2NoYXIoKSBhYm92ZSkuCisgKi8KK2ludCB1dGY4X3dpZHRoKGNvbnN0IGNoYXIgKipzdGFydCwgc2l6ZV90ICpyZW1haW5kZXJfcCkKK3sKKwl1Y3NfY2hhcl90IGNoID0gcGlja19vbmVfdXRmOF9jaGFyKHN0YXJ0LCByZW1haW5kZXJfcCk7CisJaWYgKCEqc3RhcnQpCisJCXJldHVybiAwOworCXJldHVybiBnaXRfd2N3aWR0aChjaCk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyByZXF1aXJlZCBieSBhIG51bGwtdGVybWluYXRlZAorICogc3RyaW5nLCBhc3N1bWluZyB0aGF0IHRoZSBzdHJpbmcgaXMgdXRmOC4gIFJldHVybnMgc3RybGVuKCkgaW5zdGVhZAorICogaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2YWxpZCB1dGY4IHN0cmluZy4KKyAqLworaW50IHV0Zjhfc3RybndpZHRoKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbiwgaW50IHNraXBfYW5zaSkKK3sKKwlpbnQgd2lkdGggPSAwOworCWNvbnN0IGNoYXIgKm9yaWcgPSBzdHJpbmc7CisKKwlpZiAobGVuID09IC0xKQorCQlsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKwl3aGlsZSAoc3RyaW5nICYmIHN0cmluZyA8IG9yaWcgKyBsZW4pIHsKKwkJaW50IHNraXA7CisJCXdoaWxlIChza2lwX2Fuc2kgJiYKKwkJICAgICAgIChza2lwID0gZGlzcGxheV9tb2RlX2VzY19zZXF1ZW5jZV9sZW4oc3RyaW5nKSkgIT0gMCkKKwkJCXN0cmluZyArPSBza2lwOworCQl3aWR0aCArPSB1dGY4X3dpZHRoKCZzdHJpbmcsIE5VTEwpOworCX0KKwlyZXR1cm4gc3RyaW5nID8gd2lkdGggOiBsZW47Cit9CisKK2ludCB1dGY4X3N0cndpZHRoKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlyZXR1cm4gdXRmOF9zdHJud2lkdGgoc3RyaW5nLCAtMSwgMCk7Cit9CisKK2ludCBpc191dGY4KGNvbnN0IGNoYXIgKnRleHQpCit7CisJd2hpbGUgKCp0ZXh0KSB7CisJCWlmICgqdGV4dCA9PSAnXG4nIHx8ICp0ZXh0ID09ICdcdCcgfHwgKnRleHQgPT0gJ1xyJykgeworCQkJdGV4dCsrOworCQkJY29udGludWU7CisJCX0KKwkJdXRmOF93aWR0aCgmdGV4dCwgTlVMTCk7CisJCWlmICghdGV4dCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc3RyYnVmX2FkZF9pbmRlbnRlZF90ZXh0KHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdGV4dCwKKwkJCQkgICAgIGludCBpbmRlbnQsIGludCBpbmRlbnQyKQoreworCWlmIChpbmRlbnQgPCAwKQorCQlpbmRlbnQgPSAwOworCXdoaWxlICgqdGV4dCkgeworCQljb25zdCBjaGFyICplb2wgPSBzdHJjaHJudWwodGV4dCwgJ1xuJyk7CisJCWlmICgqZW9sID09ICdcbicpCisJCQllb2wrKzsKKwkJc3RyYnVmX2FkZGNoYXJzKGJ1ZiwgJyAnLCBpbmRlbnQpOworCQlzdHJidWZfYWRkKGJ1ZiwgdGV4dCwgZW9sIC0gdGV4dCk7CisJCXRleHQgPSBlb2w7CisJCWluZGVudCA9IGluZGVudDI7CisJfQorfQorCisvKgorICogV3JhcCB0aGUgdGV4dCwgaWYgbmVjZXNzYXJ5LiBUaGUgdmFyaWFibGUgaW5kZW50IGlzIHRoZSBpbmRlbnQgZm9yIHRoZQorICogZmlyc3QgbGluZSwgaW5kZW50MiBpcyB0aGUgaW5kZW50IGZvciBhbGwgb3RoZXIgbGluZXMuCisgKiBJZiBpbmRlbnQgaXMgbmVnYXRpdmUsIGFzc3VtZSB0aGF0IGFscmVhZHkgLWluZGVudCBjb2x1bW5zIGhhdmUgYmVlbgorICogY29uc3VtZWQgKGFuZCBubyBleHRyYSBpbmRlbnQgaXMgbmVjZXNzYXJ5IGZvciB0aGUgZmlyc3QgbGluZSkuCisgKi8KK3ZvaWQgc3RyYnVmX2FkZF93cmFwcGVkX3RleHQoc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQljb25zdCBjaGFyICp0ZXh0LCBpbnQgaW5kZW50MSwgaW50IGluZGVudDIsIGludCB3aWR0aCkKK3sKKwlpbnQgaW5kZW50LCB3LCBhc3N1bWVfdXRmOCA9IDE7CisJY29uc3QgY2hhciAqYm9sLCAqc3BhY2UsICpzdGFydCA9IHRleHQ7CisJc2l6ZV90IG9yaWdfbGVuID0gYnVmLT5sZW47CisKKwlpZiAod2lkdGggPD0gMCkgeworCQlzdHJidWZfYWRkX2luZGVudGVkX3RleHQoYnVmLCB0ZXh0LCBpbmRlbnQxLCBpbmRlbnQyKTsKKwkJcmV0dXJuOworCX0KKworcmV0cnk6CisJYm9sID0gdGV4dDsKKwl3ID0gaW5kZW50ID0gaW5kZW50MTsKKwlzcGFjZSA9IE5VTEw7CisJaWYgKGluZGVudCA8IDApIHsKKwkJdyA9IC1pbmRlbnQ7CisJCXNwYWNlID0gdGV4dDsKKwl9CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgYzsKKwkJc2l6ZV90IHNraXA7CisKKwkJd2hpbGUgKChza2lwID0gZGlzcGxheV9tb2RlX2VzY19zZXF1ZW5jZV9sZW4odGV4dCkpKQorCQkJdGV4dCArPSBza2lwOworCisJCWMgPSAqdGV4dDsKKwkJaWYgKCFjIHx8IGlzc3BhY2UoYykpIHsKKwkJCWlmICh3IDw9IHdpZHRoIHx8ICFzcGFjZSkgeworCQkJCWNvbnN0IGNoYXIgKnN0YXJ0ID0gYm9sOworCQkJCWlmICghYyAmJiB0ZXh0ID09IHN0YXJ0KQorCQkJCQlyZXR1cm47CisJCQkJaWYgKHNwYWNlKQorCQkJCQlzdGFydCA9IHNwYWNlOworCQkJCWVsc2UKKwkJCQkJc3RyYnVmX2FkZGNoYXJzKGJ1ZiwgJyAnLCBpbmRlbnQpOworCQkJCXN0cmJ1Zl9hZGQoYnVmLCBzdGFydCwgdGV4dCAtIHN0YXJ0KTsKKwkJCQlpZiAoIWMpCisJCQkJCXJldHVybjsKKwkJCQlzcGFjZSA9IHRleHQ7CisJCQkJaWYgKGMgPT0gJ1x0JykKKwkJCQkJdyB8PSAweDA3OworCQkJCWVsc2UgaWYgKGMgPT0gJ1xuJykgeworCQkJCQlzcGFjZSsrOworCQkJCQlpZiAoKnNwYWNlID09ICdcbicpIHsKKwkJCQkJCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCQkJCQkJZ290byBuZXdfbGluZTsKKwkJCQkJfQorCQkJCQllbHNlIGlmICghaXNhbG51bSgqc3BhY2UpKQorCQkJCQkJZ290byBuZXdfbGluZTsKKwkJCQkJZWxzZQorCQkJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJyAnKTsKKwkJCQl9CisJCQkJdysrOworCQkJCXRleHQrKzsKKwkJCX0KKwkJCWVsc2UgeworbmV3X2xpbmU6CisJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJCQkJdGV4dCA9IGJvbCA9IHNwYWNlICsgaXNzcGFjZSgqc3BhY2UpOworCQkJCXNwYWNlID0gTlVMTDsKKwkJCQl3ID0gaW5kZW50ID0gaW5kZW50MjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhc3N1bWVfdXRmOCkgeworCQkJdyArPSB1dGY4X3dpZHRoKCZ0ZXh0LCBOVUxMKTsKKwkJCWlmICghdGV4dCkgeworCQkJCWFzc3VtZV91dGY4ID0gMDsKKwkJCQl0ZXh0ID0gc3RhcnQ7CisJCQkJc3RyYnVmX3NldGxlbihidWYsIG9yaWdfbGVuKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQorCQl9IGVsc2UgeworCQkJdysrOworCQkJdGV4dCsrOworCQl9CisJfQorfQorCit2b2lkIHN0cmJ1Zl9hZGRfd3JhcHBlZF9ieXRlcyhzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4sCisJCQkgICAgIGludCBpbmRlbnQsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpCit7CisJY2hhciAqdG1wID0geHN0cm5kdXAoZGF0YSwgbGVuKTsKKwlzdHJidWZfYWRkX3dyYXBwZWRfdGV4dChidWYsIHRtcCwgaW5kZW50LCBpbmRlbnQyLCB3aWR0aCk7CisJZnJlZSh0bXApOworfQorCit2b2lkIHN0cmJ1Zl91dGY4X3JlcGxhY2Uoc3RydWN0IHN0cmJ1ZiAqc2Jfc3JjLCBpbnQgcG9zLCBpbnQgd2lkdGgsCisJCQkgY29uc3QgY2hhciAqc3Vic3QpCit7CisJc3RydWN0IHN0cmJ1ZiBzYl9kc3QgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpzcmMgPSBzYl9zcmMtPmJ1ZjsKKwljaGFyICplbmQgPSBzcmMgKyBzYl9zcmMtPmxlbjsKKwljaGFyICpkc3Q7CisJaW50IHcgPSAwLCBzdWJzdF9sZW4gPSAwOworCisJaWYgKHN1YnN0KQorCQlzdWJzdF9sZW4gPSBzdHJsZW4oc3Vic3QpOworCXN0cmJ1Zl9ncm93KCZzYl9kc3QsIHNiX3NyYy0+bGVuICsgc3Vic3RfbGVuKTsKKwlkc3QgPSBzYl9kc3QuYnVmOworCisJd2hpbGUgKHNyYyA8IGVuZCkgeworCQljaGFyICpvbGQ7CisJCXNpemVfdCBuOworCisJCXdoaWxlICgobiA9IGRpc3BsYXlfbW9kZV9lc2Nfc2VxdWVuY2VfbGVuKHNyYykpKSB7CisJCQltZW1jcHkoZHN0LCBzcmMsIG4pOworCQkJc3JjICs9IG47CisJCQlkc3QgKz0gbjsKKwkJfQorCisJCWlmIChzcmMgPj0gZW5kKQorCQkJYnJlYWs7CisKKwkJb2xkID0gc3JjOworCQluID0gdXRmOF93aWR0aCgoY29uc3QgY2hhcioqKSZzcmMsIE5VTEwpOworCQlpZiAoIXNyYykgCS8qIGJyb2tlbiB1dGYtOCwgZG8gbm90aGluZyAqLworCQkJZ290byBvdXQ7CisJCWlmIChuICYmIHcgPj0gcG9zICYmIHcgPCBwb3MgKyB3aWR0aCkgeworCQkJaWYgKHN1YnN0KSB7CisJCQkJbWVtY3B5KGRzdCwgc3Vic3QsIHN1YnN0X2xlbik7CisJCQkJZHN0ICs9IHN1YnN0X2xlbjsKKwkJCQlzdWJzdCA9IE5VTEw7CisJCQl9CisJCQl3ICs9IG47CisJCQljb250aW51ZTsKKwkJfQorCQltZW1jcHkoZHN0LCBvbGQsIHNyYyAtIG9sZCk7CisJCWRzdCArPSBzcmMgLSBvbGQ7CisJCXcgKz0gbjsKKwl9CisJc3RyYnVmX3NldGxlbigmc2JfZHN0LCBkc3QgLSBzYl9kc3QuYnVmKTsKKwlzdHJidWZfc3dhcChzYl9zcmMsICZzYl9kc3QpOworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZzYl9kc3QpOworfQorCisvKgorICogUmV0dXJucyB0cnVlICgxKSBpZiB0aGUgc3JjIGVuY29kaW5nIG5hbWUgbWF0Y2hlcyB0aGUgZHN0IGVuY29kaW5nCisgKiBuYW1lIGRpcmVjdGx5IG9yIG9uZSBvZiBpdHMgYWx0ZXJuYXRpdmUgbmFtZXMuIEUuZy4gVVRGLTE2QkUgaXMgdGhlCisgKiBzYW1lIGFzIFVURjE2QkUuCisgKi8KK3N0YXRpYyBpbnQgc2FtZV91dGZfZW5jb2RpbmcoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QpCit7CisJaWYgKHNraXBfaXByZWZpeChzcmMsICJ1dGYiLCAmc3JjKSAmJiBza2lwX2lwcmVmaXgoZHN0LCAidXRmIiwgJmRzdCkpIHsKKwkJc2tpcF9wcmVmaXgoc3JjLCAiLSIsICZzcmMpOworCQlza2lwX3ByZWZpeChkc3QsICItIiwgJmRzdCk7CisJCXJldHVybiAhc3RyY2FzZWNtcChzcmMsIGRzdCk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgaXNfZW5jb2RpbmdfdXRmOChjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghbmFtZSkKKwkJcmV0dXJuIDE7CisJaWYgKHNhbWVfdXRmX2VuY29kaW5nKCJ1dGYtOCIsIG5hbWUpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworaW50IHNhbWVfZW5jb2RpbmcoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgdXRmOFtdID0gIlVURi04IjsKKworCWlmICghc3JjKQorCQlzcmMgPSB1dGY4OworCWlmICghZHN0KQorCQlkc3QgPSB1dGY4OworCWlmIChzYW1lX3V0Zl9lbmNvZGluZyhzcmMsIGRzdCkpCisJCXJldHVybiAxOworCXJldHVybiAhc3RyY2FzZWNtcChzcmMsIGRzdCk7Cit9CisKKy8qCisgKiBXcmFwcGVyIGZvciBmcHJpbnRmIGFuZCByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyByZXF1aXJlZAorICogZm9yIHRoZSBwcmludGVkIHN0cmluZywgYXNzdW1pbmcgdGhhdCB0aGUgc3RyaW5nIGlzIHV0ZjguCisgKi8KK2ludCB1dGY4X2ZwcmludGYoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgYXJnOworCWludCBjb2x1bW5zOworCisJdmFfc3RhcnQoYXJnLCBmb3JtYXQpOworCXN0cmJ1Zl92YWRkZigmYnVmLCBmb3JtYXQsIGFyZyk7CisJdmFfZW5kKGFyZyk7CisKKwljb2x1bW5zID0gZnB1dHMoYnVmLmJ1Ziwgc3RyZWFtKTsKKwlpZiAoMCA8PSBjb2x1bW5zKSAvKiBrZWVwIHRoZSBlcnJvciBmcm9tIHRoZSBJL08gKi8KKwkJY29sdW1ucyA9IHV0Zjhfc3Ryd2lkdGgoYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIGNvbHVtbnM7Cit9CisKKy8qCisgKiBHaXZlbiBhIGJ1ZmZlciBhbmQgaXRzIGVuY29kaW5nLCByZXR1cm4gaXQgcmUtZW5jb2RlZAorICogd2l0aCBpY29udi4gIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm5zIE5VTEwuCisgKi8KKyNpZm5kZWYgTk9fSUNPTlYKKyNpZiBkZWZpbmVkKE9MRF9JQ09OVikgfHwgKGRlZmluZWQoX19zdW5fXykgJiYgIWRlZmluZWQoX1hQRzYpKQorCXR5cGVkZWYgY29uc3QgY2hhciAqIGljb252X2licDsKKyNlbHNlCisJdHlwZWRlZiBjaGFyICogaWNvbnZfaWJwOworI2VuZGlmCitjaGFyICpyZWVuY29kZV9zdHJpbmdfaWNvbnYoY29uc3QgY2hhciAqaW4sIHNpemVfdCBpbnN6LCBpY29udl90IGNvbnYsCisJCQkgICAgc2l6ZV90IGJvbV9sZW4sIHNpemVfdCAqb3V0c3pfcCkKK3sKKwlzaXplX3Qgb3V0c3osIG91dGFsbG9jOworCWNoYXIgKm91dCwgKm91dHBvczsKKwlpY29udl9pYnAgY3A7CisKKwlvdXRzeiA9IGluc3o7CisJb3V0YWxsb2MgPSBzdF9hZGQob3V0c3osIDEgKyBib21fbGVuKTsgLyogZm9yIHRlcm1pbmF0aW5nIE5VTCAqLworCW91dCA9IHhtYWxsb2Mob3V0YWxsb2MpOworCW91dHBvcyA9IG91dCArIGJvbV9sZW47CisJY3AgPSAoaWNvbnZfaWJwKWluOworCisJd2hpbGUgKDEpIHsKKwkJc2l6ZV90IGNudCA9IGljb252KGNvbnYsICZjcCwgJmluc3osICZvdXRwb3MsICZvdXRzeik7CisKKwkJaWYgKGNudCA9PSAoc2l6ZV90KSAtMSkgeworCQkJc2l6ZV90IHNvZmFyOworCQkJaWYgKGVycm5vICE9IEUyQklHKSB7CisJCQkJZnJlZShvdXQpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJLyogaW5zeiBoYXMgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcy4KKwkJCSAqIHNpbmNlIHdlIHN0YXJ0ZWQgb3V0c3ogdGhlIHNhbWUgYXMgaW5zeiwKKwkJCSAqIGl0IGlzIGxpa2VseSB0aGF0IGluc3ogaXMgbm90IGVub3VnaCBmb3IKKwkJCSAqIGNvbnZlcnRpbmcgdGhlIHJlc3QuCisJCQkgKi8KKwkJCXNvZmFyID0gb3V0cG9zIC0gb3V0OworCQkJb3V0YWxsb2MgPSBzdF9hZGQzKHNvZmFyLCBzdF9tdWx0KGluc3osIDIpLCAzMik7CisJCQlvdXQgPSB4cmVhbGxvYyhvdXQsIG91dGFsbG9jKTsKKwkJCW91dHBvcyA9IG91dCArIHNvZmFyOworCQkJb3V0c3ogPSBvdXRhbGxvYyAtIHNvZmFyIC0gMTsKKwkJfQorCQllbHNlIHsKKwkJCSpvdXRwb3MgPSAnXDAnOworCQkJaWYgKG91dHN6X3ApCisJCQkJKm91dHN6X3AgPSBvdXRwb3MgLSBvdXQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZmFsbGJhY2tfZW5jb2RpbmcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKgorCSAqIFNvbWUgcGxhdGZvcm1zIGRvIG5vdCBoYXZlIHRoZSB2YXJpb3VzbHkgc3BlbGxlZCB2YXJpYW50cyBvZgorCSAqIFVURi04LCBzbyBsZXQncyBmYWxsIGJhY2sgdG8gdHJ5aW5nIHRoZSBtb3N0IG9mZmljaWFsCisJICogc3BlbGxpbmcuIFdlIGRvIHNvIG9ubHkgYXMgYSBmYWxsYmFjayBpbiBjYXNlIHRoZSBwbGF0Zm9ybQorCSAqIGRvZXMgdW5kZXJzdGFuZCB0aGUgdXNlcidzIHNwZWxsaW5nLCBidXQgbm90IG91ciBvZmZpY2lhbAorCSAqIG9uZS4KKwkgKi8KKwlpZiAoaXNfZW5jb2RpbmdfdXRmOChuYW1lKSkKKwkJcmV0dXJuICJVVEYtOCI7CisKKwkvKgorCSAqIEV2ZW4gdGhvdWdoIGxhdGluLTEgaXMgc3RpbGwgc2VlbiBpbiBlLW1haWwKKwkgKiBoZWFkZXJzLCBzb21lIHBsYXRmb3JtcyBvbmx5IGluc3RhbGwgSVNPLTg4NTktMS4KKwkgKi8KKwlpZiAoIXN0cmNhc2VjbXAobmFtZSwgImxhdGluLTEiKSkKKwkJcmV0dXJuICJJU08tODg1OS0xIjsKKworCXJldHVybiBuYW1lOworfQorCitjaGFyICpyZWVuY29kZV9zdHJpbmdfbGVuKGNvbnN0IGNoYXIgKmluLCBzaXplX3QgaW5zeiwKKwkJCSAgY29uc3QgY2hhciAqb3V0X2VuY29kaW5nLCBjb25zdCBjaGFyICppbl9lbmNvZGluZywKKwkJCSAgc2l6ZV90ICpvdXRzeikKK3sKKwlpY29udl90IGNvbnY7CisJY2hhciAqb3V0OworCWNvbnN0IGNoYXIgKmJvbV9zdHIgPSBOVUxMOworCXNpemVfdCBib21fbGVuID0gMDsKKworCWlmICghaW5fZW5jb2RpbmcpCisJCXJldHVybiBOVUxMOworCisJLyogVVRGLTE2TEUtQk9NIGlzIHRoZSBzYW1lIGFzIFVURi0xNiBmb3IgcmVhZGluZyAqLworCWlmIChzYW1lX3V0Zl9lbmNvZGluZygiVVRGLTE2TEUtQk9NIiwgaW5fZW5jb2RpbmcpKQorCQlpbl9lbmNvZGluZyA9ICJVVEYtMTYiOworCisJLyoKKwkgKiBGb3Igd3JpdGluZywgVVRGLTE2IGljb252IHR5cGljYWxseSBjcmVhdGVzICJVVEYtMTZCRS1CT00iCisJICogU29tZSB1c2VycyB1bmRlciBXaW5kb3dzIHdhbnQgdGhlIGxpdHRsZSBlbmRpYW4gdmVyc2lvbgorCSAqCisJICogV2UgaGFuZGxlIFVURi0xNiBhbmQgVVRGLTMyIG91cnNlbHZlcyBvbmx5IGlmIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdAorCSAqIHByb3ZpZGUgYSBCT00gKHdoaWNoIHdlIHJlcXVpcmUpLCBzaW5jZSB3ZSB3YW50IHRvIG1hdGNoIHRoZSBiZWhhdmlvcgorCSAqIG9mIHRoZSBzeXN0ZW0gdG9vbHMgYW5kIGxpYmMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkgKi8KKwlpZiAoc2FtZV91dGZfZW5jb2RpbmcoIlVURi0xNkxFLUJPTSIsIG91dF9lbmNvZGluZykpIHsKKwkJYm9tX3N0ciA9IHV0ZjE2X2xlX2JvbTsKKwkJYm9tX2xlbiA9IHNpemVvZih1dGYxNl9sZV9ib20pOworCQlvdXRfZW5jb2RpbmcgPSAiVVRGLTE2TEUiOworCX0gZWxzZSBpZiAoc2FtZV91dGZfZW5jb2RpbmcoIlVURi0xNkJFLUJPTSIsIG91dF9lbmNvZGluZykpIHsKKwkJYm9tX3N0ciA9IHV0ZjE2X2JlX2JvbTsKKwkJYm9tX2xlbiA9IHNpemVvZih1dGYxNl9iZV9ib20pOworCQlvdXRfZW5jb2RpbmcgPSAiVVRGLTE2QkUiOworI2lmZGVmIElDT05WX09NSVRTX0JPTQorCX0gZWxzZSBpZiAoc2FtZV91dGZfZW5jb2RpbmcoIlVURi0xNiIsIG91dF9lbmNvZGluZykpIHsKKwkJYm9tX3N0ciA9IHV0ZjE2X2JlX2JvbTsKKwkJYm9tX2xlbiA9IHNpemVvZih1dGYxNl9iZV9ib20pOworCQlvdXRfZW5jb2RpbmcgPSAiVVRGLTE2QkUiOworCX0gZWxzZSBpZiAoc2FtZV91dGZfZW5jb2RpbmcoIlVURi0zMiIsIG91dF9lbmNvZGluZykpIHsKKwkJYm9tX3N0ciA9IHV0ZjMyX2JlX2JvbTsKKwkJYm9tX2xlbiA9IHNpemVvZih1dGYzMl9iZV9ib20pOworCQlvdXRfZW5jb2RpbmcgPSAiVVRGLTMyQkUiOworI2VuZGlmCisJfQorCisJY29udiA9IGljb252X29wZW4ob3V0X2VuY29kaW5nLCBpbl9lbmNvZGluZyk7CisJaWYgKGNvbnYgPT0gKGljb252X3QpIC0xKSB7CisJCWluX2VuY29kaW5nID0gZmFsbGJhY2tfZW5jb2RpbmcoaW5fZW5jb2RpbmcpOworCQlvdXRfZW5jb2RpbmcgPSBmYWxsYmFja19lbmNvZGluZyhvdXRfZW5jb2RpbmcpOworCisJCWNvbnYgPSBpY29udl9vcGVuKG91dF9lbmNvZGluZywgaW5fZW5jb2RpbmcpOworCQlpZiAoY29udiA9PSAoaWNvbnZfdCkgLTEpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJb3V0ID0gcmVlbmNvZGVfc3RyaW5nX2ljb252KGluLCBpbnN6LCBjb252LCBib21fbGVuLCBvdXRzeik7CisJaWNvbnZfY2xvc2UoY29udik7CisJaWYgKG91dCAmJiBib21fc3RyICYmIGJvbV9sZW4pCisJCW1lbWNweShvdXQsIGJvbV9zdHIsIGJvbV9sZW4pOworCXJldHVybiBvdXQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBoYXNfYm9tX3ByZWZpeChjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLAorCQkJICBjb25zdCBjaGFyICpib20sIHNpemVfdCBib21fbGVuKQoreworCXJldHVybiBkYXRhICYmIGJvbSAmJiAobGVuID49IGJvbV9sZW4pICYmICFtZW1jbXAoZGF0YSwgYm9tLCBib21fbGVuKTsKK30KKworaW50IGhhc19wcm9oaWJpdGVkX3V0Zl9ib20oY29uc3QgY2hhciAqZW5jLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQoreworCXJldHVybiAoCisJICAoc2FtZV91dGZfZW5jb2RpbmcoIlVURi0xNkJFIiwgZW5jKSB8fAorCSAgIHNhbWVfdXRmX2VuY29kaW5nKCJVVEYtMTZMRSIsIGVuYykpICYmCisJICAoaGFzX2JvbV9wcmVmaXgoZGF0YSwgbGVuLCB1dGYxNl9iZV9ib20sIHNpemVvZih1dGYxNl9iZV9ib20pKSB8fAorCSAgIGhhc19ib21fcHJlZml4KGRhdGEsIGxlbiwgdXRmMTZfbGVfYm9tLCBzaXplb2YodXRmMTZfbGVfYm9tKSkpCisJKSB8fCAoCisJICAoc2FtZV91dGZfZW5jb2RpbmcoIlVURi0zMkJFIiwgIGVuYykgfHwKKwkgICBzYW1lX3V0Zl9lbmNvZGluZygiVVRGLTMyTEUiLCBlbmMpKSAmJgorCSAgKGhhc19ib21fcHJlZml4KGRhdGEsIGxlbiwgdXRmMzJfYmVfYm9tLCBzaXplb2YodXRmMzJfYmVfYm9tKSkgfHwKKwkgICBoYXNfYm9tX3ByZWZpeChkYXRhLCBsZW4sIHV0ZjMyX2xlX2JvbSwgc2l6ZW9mKHV0ZjMyX2xlX2JvbSkpKQorCSk7Cit9CisKK2ludCBpc19taXNzaW5nX3JlcXVpcmVkX3V0Zl9ib20oY29uc3QgY2hhciAqZW5jLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQoreworCXJldHVybiAoCisJICAgKHNhbWVfdXRmX2VuY29kaW5nKGVuYywgIlVURi0xNiIpKSAmJgorCSAgICEoaGFzX2JvbV9wcmVmaXgoZGF0YSwgbGVuLCB1dGYxNl9iZV9ib20sIHNpemVvZih1dGYxNl9iZV9ib20pKSB8fAorCSAgICAgaGFzX2JvbV9wcmVmaXgoZGF0YSwgbGVuLCB1dGYxNl9sZV9ib20sIHNpemVvZih1dGYxNl9sZV9ib20pKSkKKwkpIHx8ICgKKwkgICAoc2FtZV91dGZfZW5jb2RpbmcoZW5jLCAiVVRGLTMyIikpICYmCisJICAgIShoYXNfYm9tX3ByZWZpeChkYXRhLCBsZW4sIHV0ZjMyX2JlX2JvbSwgc2l6ZW9mKHV0ZjMyX2JlX2JvbSkpIHx8CisJICAgICBoYXNfYm9tX3ByZWZpeChkYXRhLCBsZW4sIHV0ZjMyX2xlX2JvbSwgc2l6ZW9mKHV0ZjMyX2xlX2JvbSkpKQorCSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIGZpcnN0IGNoYXJhY3RlciBsZW5ndGggaW4gYnl0ZXMgZm9yIG11bHRpLWJ5dGUgYHRleHRgIGFjY29yZGluZyB0bworICogYGVuY29kaW5nYC4KKyAqCisgKiAtIFRoZSBgdGV4dGAgcG9pbnRlciBpcyB1cGRhdGVkIHRvIHBvaW50IGF0IHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAqIC0gV2hlbiBgcmVtYWluZGVyX3BgIGlzIG5vdCBOVUxMLCBvbiBlbnRyeSBgKnJlbWFpbmRlcl9wYCBpcyBob3cgbXVjaCBieXRlcworICogICB3ZSBjYW4gY29uc3VtZSBmcm9tIHRleHQsIGFuZCBvbiBleGl0IGAqcmVtYWluZGVyX3BgIGlzIHJlZHVjZWQgYnkgcmV0dXJuZWQKKyAqICAgY2hhcmFjdGVyIGxlbmd0aC4gT3RoZXJ3aXNlIGB0ZXh0YCBpcyB0cmVhdGVkIGFzIGxpbWl0ZWQgYnkgTlVMLgorICovCitpbnQgbWJzX2Nocmxlbihjb25zdCBjaGFyICoqdGV4dCwgc2l6ZV90ICpyZW1haW5kZXJfcCwgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisJaW50IGNocmxlbjsKKwljb25zdCBjaGFyICpwID0gKnRleHQ7CisJc2l6ZV90IHIgPSAocmVtYWluZGVyX3AgPyAqcmVtYWluZGVyX3AgOiBTSVpFX01BWCk7CisKKwlpZiAociA8IDEpCisJCXJldHVybiAwOworCisJaWYgKGlzX2VuY29kaW5nX3V0ZjgoZW5jb2RpbmcpKSB7CisJCXBpY2tfb25lX3V0ZjhfY2hhcigmcCwgJnIpOworCisJCWNocmxlbiA9IHAgPyAocCAtICp0ZXh0KQorCQkJICAgOiAxIC8qIG5vdCB2YWxpZCBVVEYtOCAtPiByYXcgYnl0ZSBzZXF1ZW5jZSAqLzsKKwl9CisJZWxzZSB7CisJCS8qCisJCSAqIFRPRE8gdXNlIGljb252IHRvIGRlY29kZSBvbmUgY2hhciBhbmQgb2J0YWluIGl0cyBjaHJsZW4KKwkJICogZm9yIG5vdywgbGV0J3MgdHJlYXQgZW5jb2RpbmdzICE9IFVURi04IGFzIG9uZS1ieXRlCisJCSAqLworCQljaHJsZW4gPSAxOworCX0KKworCSp0ZXh0ICs9IGNocmxlbjsKKwlpZiAocmVtYWluZGVyX3ApCisJCSpyZW1haW5kZXJfcCAtPSBjaHJsZW47CisKKwlyZXR1cm4gY2hybGVuOworfQorCisvKgorICogUGljayB0aGUgbmV4dCBjaGFyIGZyb20gdGhlIHN0cmVhbSwgaWdub3JpbmcgY29kZXBvaW50cyBhbiBIRlMrIHdvdWxkLgorICogTm90ZSB0aGF0IHRoaXMgaXMgX25vdF8gY29tcGxldGUgYnkgYW55IG1lYW5zLiBJdCdzIGp1c3QgZW5vdWdoCisgKiB0byBtYWtlIGlzX2hmc19kb3RnaXQoKSB3b3JrLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHVjc19jaGFyX3QgbmV4dF9oZnNfY2hhcihjb25zdCBjaGFyICoqaW4pCit7CisJd2hpbGUgKDEpIHsKKwkJdWNzX2NoYXJfdCBvdXQgPSBwaWNrX29uZV91dGY4X2NoYXIoaW4sIE5VTEwpOworCQkvKgorCQkgKiBjaGVjayBmb3IgbWFsZm9ybWVkIHV0ZjguIFRlY2huaWNhbGx5IHRoaXMKKwkJICogZ2V0cyBjb252ZXJ0ZWQgdG8gYSBwZXJjZW50LXNlcXVlbmNlLCBidXQKKwkJICogcmV0dXJuaW5nIDAgaXMgZ29vZCBlbm91Z2ggZm9yIGlzX2hmc19kb3RnaXQKKwkJICogdG8gcmVhbGl6ZSBpdCBjYW5ub3QgYmUgLmdpdAorCQkgKi8KKwkJaWYgKCEqaW4pCisJCQlyZXR1cm4gMDsKKworCQkvKiB0aGVzZSBjb2RlIHBvaW50cyBhcmUgaWdub3JlZCBjb21wbGV0ZWx5ICovCisJCXN3aXRjaCAob3V0KSB7CisJCWNhc2UgMHgyMDBjOiAvKiBaRVJPIFdJRFRIIE5PTi1KT0lORVIgKi8KKwkJY2FzZSAweDIwMGQ6IC8qIFpFUk8gV0lEVEggSk9JTkVSICovCisJCWNhc2UgMHgyMDBlOiAvKiBMRUZULVRPLVJJR0hUIE1BUksgKi8KKwkJY2FzZSAweDIwMGY6IC8qIFJJR0hULVRPLUxFRlQgTUFSSyAqLworCQljYXNlIDB4MjAyYTogLyogTEVGVC1UTy1SSUdIVCBFTUJFRERJTkcgKi8KKwkJY2FzZSAweDIwMmI6IC8qIFJJR0hULVRPLUxFRlQgRU1CRURESU5HICovCisJCWNhc2UgMHgyMDJjOiAvKiBQT1AgRElSRUNUSU9OQUwgRk9STUFUVElORyAqLworCQljYXNlIDB4MjAyZDogLyogTEVGVC1UTy1SSUdIVCBPVkVSUklERSAqLworCQljYXNlIDB4MjAyZTogLyogUklHSFQtVE8tTEVGVCBPVkVSUklERSAqLworCQljYXNlIDB4MjA2YTogLyogSU5ISUJJVCBTWU1NRVRSSUMgU1dBUFBJTkcgKi8KKwkJY2FzZSAweDIwNmI6IC8qIEFDVElWQVRFIFNZTU1FVFJJQyBTV0FQUElORyAqLworCQljYXNlIDB4MjA2YzogLyogSU5ISUJJVCBBUkFCSUMgRk9STSBTSEFQSU5HICovCisJCWNhc2UgMHgyMDZkOiAvKiBBQ1RJVkFURSBBUkFCSUMgRk9STSBTSEFQSU5HICovCisJCWNhc2UgMHgyMDZlOiAvKiBOQVRJT05BTCBESUdJVCBTSEFQRVMgKi8KKwkJY2FzZSAweDIwNmY6IC8qIE5PTUlOQUwgRElHSVQgU0hBUEVTICovCisJCWNhc2UgMHhmZWZmOiAvKiBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFICovCisJCQljb250aW51ZTsKKwkJfQorCisJCXJldHVybiBvdXQ7CisJfQorfQorCitzdGF0aWMgaW50IGlzX2hmc19kb3RfZ2VuZXJpYyhjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgY29uc3QgY2hhciAqbmVlZGxlLCBzaXplX3QgbmVlZGxlX2xlbikKK3sKKwl1Y3NfY2hhcl90IGM7CisKKwljID0gbmV4dF9oZnNfY2hhcigmcGF0aCk7CisJaWYgKGMgIT0gJy4nKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogdGhlcmUncyBhIGdyZWF0IGRlYWwgb2Ygb3RoZXIgY2FzZS1mb2xkaW5nIHRoYXQgb2NjdXJzCisJICogaW4gSEZTKywgYnV0IHRoaXMgaXMgZW5vdWdoIHRvIGNhdGNoIG91ciBmYWlybHkgdmFuaWxsYQorCSAqIGhhcmQtY29kZWQgbmVlZGxlcy4KKwkgKi8KKwlmb3IgKDsgbmVlZGxlX2xlbiA+IDA7IG5lZWRsZSsrLCBuZWVkbGVfbGVuLS0pIHsKKwkJYyA9IG5leHRfaGZzX2NoYXIoJnBhdGgpOworCisJCS8qCisJCSAqIFdlIGtub3cgb3VyIG5lZWRsZXMgY29udGFpbiBvbmx5IEFTQ0lJLCBzbyB3ZSBjbGFtcCBoZXJlIHRvCisJCSAqIG1ha2UgdGhlIHJlc3VsdHMgb2YgdG9sb3dlcigpIHNhbmUuCisJCSAqLworCQlpZiAoYyA+IDEyNykKKwkJCXJldHVybiAwOworCQlpZiAodG9sb3dlcihjKSAhPSAqbmVlZGxlKQorCQkJcmV0dXJuIDA7CisJfQorCisJYyA9IG5leHRfaGZzX2NoYXIoJnBhdGgpOworCWlmIChjICYmICFpc19kaXJfc2VwKGMpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogSW5saW5lIHdyYXBwZXIgdG8gbWFrZSBzdXJlIHRoZSBjb21waWxlciByZXNvbHZlcyBzdHJsZW4oKSBvbiBsaXRlcmFscyBhdAorICogY29tcGlsZSB0aW1lLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19oZnNfZG90X3N0cihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpuZWVkbGUpCit7CisJcmV0dXJuIGlzX2hmc19kb3RfZ2VuZXJpYyhwYXRoLCBuZWVkbGUsIHN0cmxlbihuZWVkbGUpKTsKK30KKworaW50IGlzX2hmc19kb3RnaXQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfaGZzX2RvdF9zdHIocGF0aCwgImdpdCIpOworfQorCitpbnQgaXNfaGZzX2RvdGdpdG1vZHVsZXMoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfaGZzX2RvdF9zdHIocGF0aCwgImdpdG1vZHVsZXMiKTsKK30KKworaW50IGlzX2hmc19kb3RnaXRpZ25vcmUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfaGZzX2RvdF9zdHIocGF0aCwgImdpdGlnbm9yZSIpOworfQorCitpbnQgaXNfaGZzX2RvdGdpdGF0dHJpYnV0ZXMoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfaGZzX2RvdF9zdHIocGF0aCwgImdpdGF0dHJpYnV0ZXMiKTsKK30KKworY29uc3QgY2hhciB1dGY4X2JvbVtdID0gIlwzNTdcMjczXDI3NyI7CisKK2ludCBza2lwX3V0ZjhfYm9tKGNoYXIgKip0ZXh0LCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPCBzdHJsZW4odXRmOF9ib20pIHx8CisJICAgIG1lbWNtcCgqdGV4dCwgdXRmOF9ib20sIHN0cmxlbih1dGY4X2JvbSkpKQorCQlyZXR1cm4gMDsKKwkqdGV4dCArPSBzdHJsZW4odXRmOF9ib20pOworCXJldHVybiAxOworfQorCit2b2lkIHN0cmJ1Zl91dGY4X2FsaWduKHN0cnVjdCBzdHJidWYgKmJ1ZiwgYWxpZ25fdHlwZSBwb3NpdGlvbiwgdW5zaWduZWQgaW50IHdpZHRoLAorCQkgICAgICAgY29uc3QgY2hhciAqcykKK3sKKwlpbnQgc2xlbiA9IHN0cmxlbihzKTsKKwlpbnQgZGlzcGxheV9sZW4gPSB1dGY4X3N0cm53aWR0aChzLCBzbGVuLCAwKTsKKwlpbnQgdXRmOF9jb21wZW5zYXRpb24gPSBzbGVuIC0gZGlzcGxheV9sZW47CisKKwlpZiAoZGlzcGxheV9sZW4gPj0gd2lkdGgpIHsKKwkJc3RyYnVmX2FkZHN0cihidWYsIHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBvc2l0aW9uID09IEFMSUdOX0xFRlQpCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUtKnMiLCB3aWR0aCArIHV0ZjhfY29tcGVuc2F0aW9uLCBzKTsKKwllbHNlIGlmIChwb3NpdGlvbiA9PSBBTElHTl9NSURETEUpIHsKKwkJaW50IGxlZnQgPSAod2lkdGggLSBkaXNwbGF5X2xlbikgLyAyOworCQlzdHJidWZfYWRkZihidWYsICIlKnMlLSpzIiwgbGVmdCwgIiIsIHdpZHRoIC0gbGVmdCArIHV0ZjhfY29tcGVuc2F0aW9uLCBzKTsKKwl9IGVsc2UgaWYgKHBvc2l0aW9uID09IEFMSUdOX1JJR0hUKQorCQlzdHJidWZfYWRkZihidWYsICIlKnMiLCB3aWR0aCArIHV0ZjhfY29tcGVuc2F0aW9uLCBzKTsKK30KZGlmZiAtLWdpdCBhL3V0ZjguaCBiL3V0ZjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Q1MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdXRmOC5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIEdJVF9VVEY4X0gKKyNkZWZpbmUgR0lUX1VURjhfSAorCitzdHJ1Y3Qgc3RyYnVmOworCit0eXBlZGVmIHVuc2lnbmVkIGludCB1Y3NfY2hhcl90OyAgLyogYXNzdW1pbmcgMzJiaXQgaW50ICovCisKK3NpemVfdCBkaXNwbGF5X21vZGVfZXNjX3NlcXVlbmNlX2xlbihjb25zdCBjaGFyICpzKTsKK2ludCB1dGY4X3dpZHRoKGNvbnN0IGNoYXIgKipzdGFydCwgc2l6ZV90ICpyZW1haW5kZXJfcCk7CitpbnQgdXRmOF9zdHJud2lkdGgoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuLCBpbnQgc2tpcF9hbnNpKTsKK2ludCB1dGY4X3N0cndpZHRoKGNvbnN0IGNoYXIgKnN0cmluZyk7CitpbnQgaXNfdXRmOChjb25zdCBjaGFyICp0ZXh0KTsKK2ludCBpc19lbmNvZGluZ191dGY4KGNvbnN0IGNoYXIgKm5hbWUpOworaW50IHNhbWVfZW5jb2RpbmcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK2ludCB1dGY4X2ZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CisKK2V4dGVybiBjb25zdCBjaGFyIHV0ZjhfYm9tW107CitpbnQgc2tpcF91dGY4X2JvbShjaGFyICoqLCBzaXplX3QpOworCit2b2lkIHN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJY29uc3QgY2hhciAqdGV4dCwgaW50IGluZGVudCwgaW50IGluZGVudDIsIGludCB3aWR0aCk7Cit2b2lkIHN0cmJ1Zl9hZGRfd3JhcHBlZF9ieXRlcyhzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4sCisJCQkgICAgIGludCBpbmRlbnQsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpOwordm9pZCBzdHJidWZfdXRmOF9yZXBsYWNlKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgcG9zLCBpbnQgd2lkdGgsCisJCQkgY29uc3QgY2hhciAqc3Vic3QpOworCisjaWZuZGVmIE5PX0lDT05WCitjaGFyICpyZWVuY29kZV9zdHJpbmdfaWNvbnYoY29uc3QgY2hhciAqaW4sIHNpemVfdCBpbnN6LAorCQkJICAgIGljb252X3QgY29udiwgc2l6ZV90IGJvbV9sZW4sIHNpemVfdCAqb3V0c3opOworY2hhciAqcmVlbmNvZGVfc3RyaW5nX2xlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IGluc3osCisJCQkgIGNvbnN0IGNoYXIgKm91dF9lbmNvZGluZywKKwkJCSAgY29uc3QgY2hhciAqaW5fZW5jb2RpbmcsCisJCQkgIHNpemVfdCAqb3V0c3opOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgY2hhciAqcmVlbmNvZGVfc3RyaW5nX2xlbihjb25zdCBjaGFyICphLCBzaXplX3QgYiwKKwkJCQkJY29uc3QgY2hhciAqYywgY29uc3QgY2hhciAqZCwgc2l6ZV90ICplKQoreyBpZiAoZSkgKmUgPSAwOyByZXR1cm4gTlVMTDsgfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgY2hhciAqcmVlbmNvZGVfc3RyaW5nKGNvbnN0IGNoYXIgKmluLAorCQkJCSAgICBjb25zdCBjaGFyICpvdXRfZW5jb2RpbmcsCisJCQkJICAgIGNvbnN0IGNoYXIgKmluX2VuY29kaW5nKQoreworCXJldHVybiByZWVuY29kZV9zdHJpbmdfbGVuKGluLCBzdHJsZW4oaW4pLAorCQkJCSAgIG91dF9lbmNvZGluZywgaW5fZW5jb2RpbmcsCisJCQkJICAgTlVMTCk7Cit9CisKK2ludCBtYnNfY2hybGVuKGNvbnN0IGNoYXIgKip0ZXh0LCBzaXplX3QgKnJlbWFpbmRlcl9wLCBjb25zdCBjaGFyICplbmNvZGluZyk7CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhdGggd291bGQgbWF0Y2ggIi5naXQiIGFmdGVyIEhGUyBjYXNlLWZvbGRpbmcuCisgKiBUaGUgcGF0aCBzaG91bGQgYmUgTlVMLXRlcm1pbmF0ZWQsIGJ1dCB3ZSB3aWxsIG1hdGNoIHZhcmlhbnRzIG9mIGJvdGggIi5naXRcMCIKKyAqIGFuZCAiLmdpdC8uLi4iIChidXQgX25vdF8gIi4uLi8uZ2l0IikuIFRoaXMgbWFrZXMgaXQgc3VpdGFibGUgZm9yIGJvdGggZnNjaworICogYW5kIHZlcmlmeV9wYXRoKCkuCisgKgorICogTGlrZXdpc2UsIHRoZSBpc19oZnNfZG90Z2l0Zm9vKCkgdmFyaWFudHMgbG9vayBmb3IgIi5naXRmb28iLgorICovCitpbnQgaXNfaGZzX2RvdGdpdChjb25zdCBjaGFyICpwYXRoKTsKK2ludCBpc19oZnNfZG90Z2l0bW9kdWxlcyhjb25zdCBjaGFyICpwYXRoKTsKK2ludCBpc19oZnNfZG90Z2l0aWdub3JlKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGlzX2hmc19kb3RnaXRhdHRyaWJ1dGVzKGNvbnN0IGNoYXIgKnBhdGgpOworCit0eXBlZGVmIGVudW0geworCUFMSUdOX0xFRlQsCisJQUxJR05fTUlERExFLAorCUFMSUdOX1JJR0hUCit9IGFsaWduX3R5cGU7CisKKy8qCisgKiBBbGlnbiB0aGUgc3RyaW5nIGdpdmVuIGFuZCBzdG9yZSBpdCBpbnRvIGEgc3RyYnVmIGFzIHBlciB0aGUKKyAqICdwb3NpdGlvbicgYW5kICd3aWR0aCcuIElmIHRoZSBnaXZlbiBzdHJpbmcgbGVuZ3RoIGlzIGxhcmdlciB0aGFuCisgKiAnd2lkdGgnIHRoYW4gdGhlbiB0aGUgaW5wdXQgc3RyaW5nIGlzIG5vdCB0cnVuY2F0ZWQgYW5kIG5vCisgKiBhbGlnbm1lbnQgaXMgZG9uZS4KKyAqLwordm9pZCBzdHJidWZfdXRmOF9hbGlnbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGFsaWduX3R5cGUgcG9zaXRpb24sIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnMpOworCisvKgorICogSWYgYSBkYXRhIHN0cmVhbSBpcyBkZWNsYXJlZCBhcyBVVEYtMTZCRSBvciBVVEYtMTZMRSwgdGhlbiBhIFVURi0xNgorICogQk9NIG11c3Qgbm90IGJlIHVzZWQgWzFdLiBUaGUgc2FtZSBhcHBsaWVzIGZvciB0aGUgVVRGLTMyIGVxdWl2YWxlbnRzLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHJ1bGUgaXMgdmlvbGF0ZWQuCisgKgorICogWzFdIGh0dHA6Ly91bmljb2RlLm9yZy9mYXEvdXRmX2JvbS5odG1sI2JvbTEwCisgKi8KK2ludCBoYXNfcHJvaGliaXRlZF91dGZfYm9tKGNvbnN0IGNoYXIgKmVuYywgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7CisKKy8qCisgKiBJZiB0aGUgZW5kaWFubmVzcyBpcyBub3QgZGVmaW5lZCBpbiB0aGUgZW5jb2RpbmcgbmFtZSwgdGhlbiB3ZQorICogcmVxdWlyZSBhIEJPTS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBhIHJlcXVpcmVkIEJPTSBpcyBtaXNzaW5nLgorICoKKyAqIFRoZSBVbmljb2RlIHN0YW5kYXJkIGluc3RydWN0cyB0byBhc3N1bWUgYmlnLWVuZGlhbiBpZiB0aGVyZSBpbiBubworICogQk9NIGZvciBVVEYtMTYvMzIgWzFdWzJdLiBIb3dldmVyLCB0aGUgVzNDL1dIQVRXRyBlbmNvZGluZyBzdGFuZGFyZAorICogdXNlZCBpbiBIVE1MNSByZWNvbW1lbmRzIHRvIGFzc3VtZSBsaXR0bGUtZW5kaWFuIHRvICJkZWFsIHdpdGgKKyAqIGRlcGxveWVkIGNvbnRlbnQiIFszXS4KKyAqCisgKiBUaGVyZWZvcmUsIHN0cmljdGx5IHJlcXVpcmluZyBhIEJPTSBzZWVtcyB0byBiZSB0aGUgc2FmZXN0IG9wdGlvbiBmb3IKKyAqIGNvbnRlbnQgaW4gR2l0LgorICoKKyAqIFsxXSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCNnZW42CisgKiBbMl0gaHR0cDovL3d3dy51bmljb2RlLm9yZy92ZXJzaW9ucy9Vbmljb2RlMTAuMC4wL2NoMDMucGRmCisgKiAgICAgU2VjdGlvbiAzLjEwLCBEOTgsIHBhZ2UgMTMyCisgKiBbM10gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI3V0Zi0xNmxlCisgKi8KK2ludCBpc19taXNzaW5nX3JlcXVpcmVkX3V0Zl9ib20oY29uc3QgY2hhciAqZW5jLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS92YXJpbnQuYyBiL3ZhcmludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOWM0OTcKLS0tIC9kZXYvbnVsbAorKysgYi92YXJpbnQuYwpAQCAtMCwwICsxLDMwIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidmFyaW50LmgiCisKK3VpbnRtYXhfdCBkZWNvZGVfdmFyaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKipidWZwKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICpidWZwOworCXVuc2lnbmVkIGNoYXIgYyA9ICpidWYrKzsKKwl1aW50bWF4X3QgdmFsID0gYyAmIDEyNzsKKwl3aGlsZSAoYyAmIDEyOCkgeworCQl2YWwgKz0gMTsKKwkJaWYgKCF2YWwgfHwgTVNCKHZhbCwgNykpCisJCQlyZXR1cm4gMDsgLyogb3ZlcmZsb3cgKi8KKwkJYyA9ICpidWYrKzsKKwkJdmFsID0gKHZhbCA8PCA3KSArIChjICYgMTI3KTsKKwl9CisJKmJ1ZnAgPSBidWY7CisJcmV0dXJuIHZhbDsKK30KKworaW50IGVuY29kZV92YXJpbnQodWludG1heF90IHZhbHVlLCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJdW5zaWduZWQgY2hhciB2YXJpbnRbMTZdOworCXVuc2lnbmVkIHBvcyA9IHNpemVvZih2YXJpbnQpIC0gMTsKKwl2YXJpbnRbcG9zXSA9IHZhbHVlICYgMTI3OworCXdoaWxlICh2YWx1ZSA+Pj0gNykKKwkJdmFyaW50Wy0tcG9zXSA9IDEyOCB8ICgtLXZhbHVlICYgMTI3KTsKKwlpZiAoYnVmKQorCQltZW1jcHkoYnVmLCB2YXJpbnQgKyBwb3MsIHNpemVvZih2YXJpbnQpIC0gcG9zKTsKKwlyZXR1cm4gc2l6ZW9mKHZhcmludCkgLSBwb3M7Cit9CmRpZmYgLS1naXQgYS92YXJpbnQuaCBiL3ZhcmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OGJiMGMKLS0tIC9kZXYvbnVsbAorKysgYi92YXJpbnQuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgVkFSSU5UX0gKKyNkZWZpbmUgVkFSSU5UX0gKKworaW50IGVuY29kZV92YXJpbnQodWludG1heF90LCB1bnNpZ25lZCBjaGFyICopOwordWludG1heF90IGRlY29kZV92YXJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqKik7CisKKyNlbmRpZiAvKiBWQVJJTlRfSCAqLwpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9MSUNFTlNFIGIvdmNzLXN2bi9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOTE4NTgKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL0xJQ0VOU0UKQEAgLTAsMCArMSwzMiBAQAorQ29weXJpZ2h0IChDKSAyMDEwIERhdmlkIEJhcnIgPGRhdmlkLmJhcnJAY29yZGVsdGEuY29tPi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0NvcHlyaWdodCAoQykgMjAxMCBKb25hdGhhbiBOaWVkZXIgPGpybmllZGVyQGdtYWlsLmNvbT4uCisKK0NvcHlyaWdodCAoQykgMjAwNSBTdGVmYW4gSGVnbnksIGh5ZHJvZ3JhZml4IENvbnN1bHRpbmcgR21iSCwKK0ZyYW5rZnVydC9NYWluLCBHZXJtYW55CithbmQgb3RoZXJzLCBzZWUgaHR0cDovL3N2bjJjYy5zYXJvdmFyLm9yZworCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UocyksIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAgIHVubW9kaWZpZWQgb3RoZXIgdGhhbiB0aGUgYWxsb3dhYmxlIGFkZGl0aW9uIG9mIG9uZSBvciBtb3JlCisgICBjb3B5cmlnaHQgbm90aWNlcy4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UocyksIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCitPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vZmFzdF9leHBvcnQuYyBiL3Zjcy1zdm4vZmFzdF9leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWI4OTEzCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9mYXN0X2V4cG9ydC5jCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogTGljZW5zZWQgdW5kZXIgYSB0d28tY2xhdXNlIEJTRC1zdHlsZSBsaWNlbnNlLgorICogU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJmYXN0X2V4cG9ydC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN2bmRpZmYuaCIKKyNpbmNsdWRlICJzbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisKKyNkZWZpbmUgTUFYX0dJVFNWTl9MSU5FX0xFTiA0MDk2CisKK3N0YXRpYyB1aW50MzJfdCBmaXJzdF9jb21taXRfZG9uZTsKK3N0YXRpYyBzdHJ1Y3QgbGluZV9idWZmZXIgcG9zdGltYWdlID0gTElORV9CVUZGRVJfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgbGluZV9idWZmZXIgcmVwb3J0X2J1ZmZlciA9IExJTkVfQlVGRkVSX0lOSVQ7CisKKy8qIE5FRURTV09SSzogbW92ZSB0byBmYXN0X2V4cG9ydF9pbml0KCkgKi8KK3N0YXRpYyBpbnQgaW5pdF9wb3N0aW1hZ2Uodm9pZCkKK3sKKwlzdGF0aWMgaW50IHBvc3RpbWFnZV9pbml0aWFsaXplZDsKKwlpZiAocG9zdGltYWdlX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKwlwb3N0aW1hZ2VfaW5pdGlhbGl6ZWQgPSAxOworCXJldHVybiBidWZmZXJfdG1wZmlsZV9pbml0KCZwb3N0aW1hZ2UpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2luaXQoaW50IGZkKQoreworCWZpcnN0X2NvbW1pdF9kb25lID0gMDsKKwlpZiAoYnVmZmVyX2ZkaW5pdCgmcmVwb3J0X2J1ZmZlciwgZmQpKQorCQlkaWVfZXJybm8oImNhbm5vdCByZWFkIGZyb20gZmlsZSBkZXNjcmlwdG9yICVkIiwgZmQpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2RlaW5pdCh2b2lkKQoreworCWlmIChidWZmZXJfZGVpbml0KCZyZXBvcnRfYnVmZmVyKSkKKwkJZGllX2Vycm5vKCJlcnJvciBjbG9zaW5nIGZhc3QtaW1wb3J0IGZlZWRiYWNrIHN0cmVhbSIpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2RlbGV0ZShjb25zdCBjaGFyICpwYXRoKQoreworCXB1dGNoYXIoJ0QnKTsKKwlwdXRjaGFyKCcgJyk7CisJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkIGZhc3RfZXhwb3J0X3RydW5jYXRlKGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90IG1vZGUpCit7CisJZmFzdF9leHBvcnRfbW9kaWZ5KHBhdGgsIG1vZGUsICJpbmxpbmUiKTsKKwlwcmludGYoImRhdGEgMFxuXG4iKTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9tb2RpZnkoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgbW9kZSwgY29uc3QgY2hhciAqZGF0YXJlZikKK3sKKwkvKiBNb2RlIG11c3QgYmUgMTAwNjQ0LCAxMDA3NTUsIDEyMDAwMCwgb3IgMTYwMDAwLiAqLworCWlmICghZGF0YXJlZikgeworCQlmYXN0X2V4cG9ydF90cnVuY2F0ZShwYXRoLCBtb2RlKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIk0gJTA2IlBSSW8zMiIgJXMgIiwgbW9kZSwgZGF0YXJlZik7CisJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfYmVnaW5fbm90ZSh1aW50MzJfdCByZXZpc2lvbiwgY29uc3QgY2hhciAqYXV0aG9yLAorCQljb25zdCBjaGFyICpsb2csIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwgY29uc3QgY2hhciAqbm90ZV9yZWYpCit7CisJc3RhdGljIGludCBmaXJzdG5vdGUgPSAxOworCXNpemVfdCBsb2dsZW4gPSBzdHJsZW4obG9nKTsKKwlwcmludGYoImNvbW1pdCAlc1xuIiwgbm90ZV9yZWYpOworCXByaW50ZigiY29tbWl0dGVyICVzIDwlc0Alcz4gJSJQUkl0aW1lIiArMDAwMFxuIiwgYXV0aG9yLCBhdXRob3IsICJsb2NhbCIsIHRpbWVzdGFtcCk7CisJcHJpbnRmKCJkYXRhICUiUFJJdU1BWCJcbiIsICh1aW50bWF4X3QpbG9nbGVuKTsKKwlmd3JpdGUobG9nLCBsb2dsZW4sIDEsIHN0ZG91dCk7CisJaWYgKGZpcnN0bm90ZSkgeworCQlpZiAocmV2aXNpb24gPiAxKQorCQkJcHJpbnRmKCJmcm9tICVzXjAiLCBub3RlX3JlZik7CisJCWZpcnN0bm90ZSA9IDA7CisJfQorCWZwdXRjKCdcbicsIHN0ZG91dCk7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfbm90ZShjb25zdCBjaGFyICpjb21taXR0aXNoLCBjb25zdCBjaGFyICpkYXRhcmVmKQoreworCXByaW50ZigiTiAlcyAlc1xuIiwgZGF0YXJlZiwgY29tbWl0dGlzaCk7Cit9CisKK3N0YXRpYyBjaGFyIGdpdHN2bmxpbmVbTUFYX0dJVFNWTl9MSU5FX0xFTl07Cit2b2lkIGZhc3RfZXhwb3J0X2JlZ2luX2NvbW1pdCh1aW50MzJfdCByZXZpc2lvbiwgY29uc3QgY2hhciAqYXV0aG9yLAorCQkJY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbG9nLAorCQkJY29uc3QgY2hhciAqdXVpZCwgY29uc3QgY2hhciAqdXJsLAorCQkJdGltZXN0YW1wX3QgdGltZXN0YW1wLCBjb25zdCBjaGFyICpsb2NhbF9yZWYpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzdHJidWYgZW1wdHkgPSBTVFJCVUZfSU5JVDsKKwlpZiAoIWxvZykKKwkJbG9nID0gJmVtcHR5OworCWlmICgqdXVpZCAmJiAqdXJsKSB7CisJCXNucHJpbnRmKGdpdHN2bmxpbmUsIE1BWF9HSVRTVk5fTElORV9MRU4sCisJCQkJIlxuXG5naXQtc3ZuLWlkOiAlc0AlIlBSSXUzMiIgJXNcbiIsCisJCQkJIHVybCwgcmV2aXNpb24sIHV1aWQpOworCX0gZWxzZSB7CisJCSpnaXRzdm5saW5lID0gJ1wwJzsKKwl9CisJcHJpbnRmKCJjb21taXQgJXNcbiIsIGxvY2FsX3JlZik7CisJcHJpbnRmKCJtYXJrIDolIlBSSXUzMiJcbiIsIHJldmlzaW9uKTsKKwlwcmludGYoImNvbW1pdHRlciAlcyA8JXNAJXM+ICUiUFJJdGltZSIgKzAwMDBcbiIsCisJCSAgICphdXRob3IgPyBhdXRob3IgOiAibm9ib2R5IiwKKwkJICAgKmF1dGhvciA/IGF1dGhvciA6ICJub2JvZHkiLAorCQkgICAqdXVpZCA/IHV1aWQgOiAibG9jYWwiLCB0aW1lc3RhbXApOworCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLAorCQkodWludG1heF90KSAobG9nLT5sZW4gKyBzdHJsZW4oZ2l0c3ZubGluZSkpKTsKKwlmd3JpdGUobG9nLT5idWYsIGxvZy0+bGVuLCAxLCBzdGRvdXQpOworCXByaW50ZigiJXNcbiIsIGdpdHN2bmxpbmUpOworCWlmICghZmlyc3RfY29tbWl0X2RvbmUpIHsKKwkJaWYgKHJldmlzaW9uID4gMSkKKwkJCXByaW50ZigiZnJvbSA6JSJQUkl1MzIiXG4iLCByZXZpc2lvbiAtIDEpOworCQlmaXJzdF9jb21taXRfZG9uZSA9IDE7CisJfQorfQorCit2b2lkIGZhc3RfZXhwb3J0X2VuZF9jb21taXQodWludDMyX3QgcmV2aXNpb24pCit7CisJcHJpbnRmKCJwcm9ncmVzcyBJbXBvcnRlZCBjb21taXQgJSJQUkl1MzIiLlxuXG4iLCByZXZpc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkIGxzX2Zyb21fcmV2KHVpbnQzMl90IHJldiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwkvKiBscyA6NSBwYXRoL3RvL29sZC9maWxlICovCisJcHJpbnRmKCJscyA6JSJQUkl1MzIiICIsIHJldik7CisJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCXB1dGNoYXIoJ1xuJyk7CisJZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGxzX2Zyb21fYWN0aXZlX2NvbW1pdChjb25zdCBjaGFyICpwYXRoKQoreworCS8qIGxzICJwYXRoL3RvL2ZpbGUiICovCisJcHJpbnRmKCJscyBcIiIpOworCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAxKTsKKwlwcmludGYoIlwiXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZXNwb25zZV9saW5lKHZvaWQpCit7CisJY29uc3QgY2hhciAqbGluZSA9IGJ1ZmZlcl9yZWFkX2xpbmUoJnJlcG9ydF9idWZmZXIpOworCWlmIChsaW5lKQorCQlyZXR1cm4gbGluZTsKKwlpZiAoYnVmZmVyX2ZlcnJvcigmcmVwb3J0X2J1ZmZlcikpCisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyBmcm9tIGZhc3QtaW1wb3J0Iik7CisJZGllKCJ1bmV4cGVjdGVkIGVuZCBvZiBmYXN0LWltcG9ydCBmZWVkYmFjayIpOworfQorCitzdGF0aWMgdm9pZCBkaWVfc2hvcnRfcmVhZChzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0KQoreworCWlmIChidWZmZXJfZmVycm9yKGlucHV0KSkKKwkJZGllX2Vycm5vKCJlcnJvciByZWFkaW5nIGR1bXAgZmlsZSIpOworCWRpZSgiaW52YWxpZCBkdW1wOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY2F0X3Jlc3BvbnNlX2xpbmUoY29uc3QgY2hhciAqaGVhZGVyLCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCBuOworCWNvbnN0IGNoYXIgKnR5cGU7CisJY29uc3QgY2hhciAqZW5kOworCisJaWYgKGVuZHNfd2l0aChoZWFkZXIsICIgbWlzc2luZyIpKQorCQlyZXR1cm4gZXJyb3IoImNhdC1ibG9iIHJlcG9ydHMgbWlzc2luZyBibG9iOiAlcyIsIGhlYWRlcik7CisJdHlwZSA9IHN0cnN0cihoZWFkZXIsICIgYmxvYiAiKTsKKwlpZiAoIXR5cGUpCisJCXJldHVybiBlcnJvcigiY2F0LWJsb2IgaGVhZGVyIGhhcyB3cm9uZyBvYmplY3QgdHlwZTogJXMiLCBoZWFkZXIpOworCW4gPSBzdHJ0b3VtYXgodHlwZSArIHN0cmxlbigiIGJsb2IgIiksIChjaGFyICoqKSAmZW5kLCAxMCk7CisJaWYgKGVuZCA9PSB0eXBlICsgc3RybGVuKCIgYmxvYiAiKSkKKwkJcmV0dXJuIGVycm9yKCJjYXQtYmxvYiBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBsZW5ndGg6ICVzIiwgaGVhZGVyKTsKKwlpZiAobWVtY2hyKHR5cGUgKyBzdHJsZW4oIiBibG9iICIpLCAnLScsIGVuZCAtIHR5cGUgLSBzdHJsZW4oIiBibG9iICIpKSkKKwkJcmV0dXJuIGVycm9yKCJjYXQtYmxvYiBoZWFkZXIgY29udGFpbnMgbmVnYXRpdmUgbGVuZ3RoOiAlcyIsIGhlYWRlcik7CisJaWYgKG4gPT0gVUlOVE1BWF9NQVggfHwgbiA+IG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUob2ZmX3QpKQorCQlyZXR1cm4gZXJyb3IoImJsb2IgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKKwkqbGVuID0gbjsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIGVycm9yKCJjYXQtYmxvYiBoZWFkZXIgY29udGFpbnMgZ2FyYmFnZSBhZnRlciBsZW5ndGg6ICVzIiwgaGVhZGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfcHJlaW1hZ2Vfb3ZlcmZsb3cob2ZmX3QgYSwgb2ZmX3QgYikKK3sKKwlpZiAoc2lnbmVkX2FkZF9vdmVyZmxvd3MoYSwgYikpCisJCWRpZSgiYmxvYiB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIpOworfQorCitzdGF0aWMgbG9uZyBhcHBseV9kZWx0YShvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQsCisJCQljb25zdCBjaGFyICpvbGRfZGF0YSwgdWludDMyX3Qgb2xkX21vZGUpCit7CisJbG9uZyByZXQ7CisJc3RydWN0IHNsaWRpbmdfdmlldyBwcmVpbWFnZSA9IFNMSURJTkdfVklFV19JTklUKCZyZXBvcnRfYnVmZmVyLCAwKTsKKwlGSUxFICpvdXQ7CisKKwlpZiAoaW5pdF9wb3N0aW1hZ2UoKSB8fCAhKG91dCA9IGJ1ZmZlcl90bXBmaWxlX3Jld2luZCgmcG9zdGltYWdlKSkpCisJCWRpZSgiY2Fubm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUgZm9yIGJsb2IgcmV0cmlldmFsIik7CisJaWYgKG9sZF9kYXRhKSB7CisJCWNvbnN0IGNoYXIgKnJlc3BvbnNlOworCQlwcmludGYoImNhdC1ibG9iICVzXG4iLCBvbGRfZGF0YSk7CisJCWZmbHVzaChzdGRvdXQpOworCQlyZXNwb25zZSA9IGdldF9yZXNwb25zZV9saW5lKCk7CisJCWlmIChwYXJzZV9jYXRfcmVzcG9uc2VfbGluZShyZXNwb25zZSwgJnByZWltYWdlLm1heF9vZmYpKQorCQkJZGllKCJpbnZhbGlkIGNhdC1ibG9iIHJlc3BvbnNlOiAlcyIsIHJlc3BvbnNlKTsKKwkJY2hlY2tfcHJlaW1hZ2Vfb3ZlcmZsb3cocHJlaW1hZ2UubWF4X29mZiwgMSk7CisJfQorCWlmIChvbGRfbW9kZSA9PSBTX0lGTE5LKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnByZWltYWdlLmJ1ZiwgImxpbmsgIik7CisJCWNoZWNrX3ByZWltYWdlX292ZXJmbG93KHByZWltYWdlLm1heF9vZmYsIHN0cmxlbigibGluayAiKSk7CisJCXByZWltYWdlLm1heF9vZmYgKz0gc3RybGVuKCJsaW5rICIpOworCQljaGVja19wcmVpbWFnZV9vdmVyZmxvdyhwcmVpbWFnZS5tYXhfb2ZmLCAxKTsKKwl9CisJaWYgKHN2bmRpZmYwX2FwcGx5KGlucHV0LCBsZW4sICZwcmVpbWFnZSwgb3V0KSkKKwkJZGllKCJjYW5ub3QgYXBwbHkgZGVsdGEiKTsKKwlpZiAob2xkX2RhdGEpIHsKKwkJLyogUmVhZCB0aGUgcmVtYWluZGVyIG9mIHByZWltYWdlIGFuZCB0cmFpbGluZyBuZXdsaW5lLiAqLworCQlhc3NlcnQoIXNpZ25lZF9hZGRfb3ZlcmZsb3dzKHByZWltYWdlLm1heF9vZmYsIDEpKTsKKwkJcHJlaW1hZ2UubWF4X29mZisrOwkvKiByb29tIGZvciBuZXdsaW5lICovCisJCWlmIChtb3ZlX3dpbmRvdygmcHJlaW1hZ2UsIHByZWltYWdlLm1heF9vZmYgLSAxLCAxKSkKKwkJCWRpZSgiY2Fubm90IHNlZWsgdG8gZW5kIG9mIGlucHV0Iik7CisJCWlmIChwcmVpbWFnZS5idWYuYnVmWzBdICE9ICdcbicpCisJCQlkaWUoIm1pc3NpbmcgbmV3bGluZSBhZnRlciBjYXQtYmxvYiByZXNwb25zZSIpOworCX0KKwlyZXQgPSBidWZmZXJfdG1wZmlsZV9wcmVwYXJlX3RvX3JlYWQoJnBvc3RpbWFnZSk7CisJaWYgKHJldCA8IDApCisJCWRpZSgiY2Fubm90IHJlYWQgdGVtcG9yYXJ5IGZpbGUgZm9yIGJsb2IgcmV0cmlldmFsIik7CisJc3RyYnVmX3JlbGVhc2UoJnByZWltYWdlLmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9idWZfdG9fZGF0YShjb25zdCBzdHJ1Y3Qgc3RyYnVmICpkYXRhKQoreworCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KWRhdGEtPmxlbik7CisJZndyaXRlKGRhdGEtPmJ1ZiwgZGF0YS0+bGVuLCAxLCBzdGRvdXQpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfZGF0YSh1aW50MzJfdCBtb2RlLCBvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJYXNzZXJ0KGxlbiA+PSAwKTsKKwlpZiAobW9kZSA9PSBTX0lGTE5LKSB7CisJCS8qIHN2biBzeW1saW5rIGJsb2JzIHN0YXJ0IHdpdGggImxpbmsgIiAqLworCQlpZiAobGVuIDwgNSkKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBzeW1saW5rIHRvbyBzaG9ydCBmb3IgXCJsaW5rXCIgcHJlZml4Iik7CisJCWxlbiAtPSA1OworCQlpZiAoYnVmZmVyX3NraXBfYnl0ZXMoaW5wdXQsIDUpICE9IDUpCisJCQlkaWVfc2hvcnRfcmVhZChpbnB1dCk7CisJfQorCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KSBsZW4pOworCWlmIChidWZmZXJfY29weV9ieXRlcyhpbnB1dCwgbGVuKSAhPSBsZW4pCisJCWRpZV9zaG9ydF9yZWFkKGlucHV0KTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xzX3Jlc3BvbnNlKGNvbnN0IGNoYXIgKnJlc3BvbnNlLCB1aW50MzJfdCAqbW9kZSwKKwkJCQkJc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZikKK3sKKwljb25zdCBjaGFyICp0YWI7CisJY29uc3QgY2hhciAqcmVzcG9uc2VfZW5kOworCisJYXNzZXJ0KHJlc3BvbnNlKTsKKwlyZXNwb25zZV9lbmQgPSByZXNwb25zZSArIHN0cmxlbihyZXNwb25zZSk7CisKKwlpZiAoKnJlc3BvbnNlID09ICdtJykgewkvKiBNaXNzaW5nLiAqLworCQllcnJubyA9IEVOT0VOVDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIE1vZGUuICovCisJaWYgKHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlIDwgKHNpZ25lZCkgc3RybGVuKCIxMDA2NDQiKSB8fAorCSAgICByZXNwb25zZVtzdHJsZW4oIjEwMDY0NCIpXSAhPSAnICcpCisJCWRpZSgiaW52YWxpZCBscyByZXNwb25zZTogbWlzc2luZyBtb2RlOiAlcyIsIHJlc3BvbnNlKTsKKwkqbW9kZSA9IDA7CisJZm9yICg7ICpyZXNwb25zZSAhPSAnICc7IHJlc3BvbnNlKyspIHsKKwkJY2hhciBjaCA9ICpyZXNwb25zZTsKKwkJaWYgKGNoIDwgJzAnIHx8IGNoID4gJzcnKQorCQkJZGllKCJpbnZhbGlkIGxzIHJlc3BvbnNlOiBtb2RlIGlzIG5vdCBvY3RhbDogJXMiLCByZXNwb25zZSk7CisJCSptb2RlICo9IDg7CisJCSptb2RlICs9IGNoIC0gJzAnOworCX0KKworCS8qICcgYmxvYiAnIG9yICcgdHJlZSAnICovCisJaWYgKHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlIDwgKHNpZ25lZCkgc3RybGVuKCIgYmxvYiAiKSB8fAorCSAgICAocmVzcG9uc2VbMV0gIT0gJ2InICYmIHJlc3BvbnNlWzFdICE9ICd0JykpCisJCWRpZSgidW5leHBlY3RlZCBscyByZXNwb25zZTogbm90IGEgdHJlZSBvciBibG9iOiAlcyIsIHJlc3BvbnNlKTsKKwlyZXNwb25zZSArPSBzdHJsZW4oIiBibG9iICIpOworCisJLyogRGF0YXJlZi4gKi8KKwl0YWIgPSBtZW1jaHIocmVzcG9uc2UsICdcdCcsIHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlKTsKKwlpZiAoIXRhYikKKwkJZGllKCJpbnZhbGlkIGxzIHJlc3BvbnNlOiBtaXNzaW5nIHRhYjogJXMiLCByZXNwb25zZSk7CisJc3RyYnVmX2FkZChkYXRhcmVmLCByZXNwb25zZSwgdGFiIC0gcmVzcG9uc2UpOworCXJldHVybiAwOworfQorCitpbnQgZmFzdF9leHBvcnRfbHNfcmV2KHVpbnQzMl90IHJldiwgY29uc3QgY2hhciAqcGF0aCwKKwkJCQl1aW50MzJfdCAqbW9kZSwgc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZikKK3sKKwlsc19mcm9tX3JldihyZXYsIHBhdGgpOworCXJldHVybiBwYXJzZV9sc19yZXNwb25zZShnZXRfcmVzcG9uc2VfbGluZSgpLCBtb2RlLCBkYXRhcmVmKTsKK30KKworaW50IGZhc3RfZXhwb3J0X2xzKGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90ICptb2RlLCBzdHJ1Y3Qgc3RyYnVmICpkYXRhcmVmKQoreworCWxzX2Zyb21fYWN0aXZlX2NvbW1pdChwYXRoKTsKKwlyZXR1cm4gcGFyc2VfbHNfcmVzcG9uc2UoZ2V0X3Jlc3BvbnNlX2xpbmUoKSwgbW9kZSwgZGF0YXJlZik7Cit9CisKK2NvbnN0IGNoYXIgKmZhc3RfZXhwb3J0X3JlYWRfcGF0aChjb25zdCBjaGFyICpwYXRoLCB1aW50MzJfdCAqbW9kZV9vdXQpCit7CisJaW50IGVycjsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwllcnIgPSBmYXN0X2V4cG9ydF9scyhwYXRoLCBtb2RlX291dCwgJmJ1Zik7CisJaWYgKGVycikgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJQlVHKCJ1bmV4cGVjdGVkIGZhc3RfZXhwb3J0X2xzIGVycm9yOiAlcyIsCisJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJLyogVHJlYXQgbWlzc2luZyBwYXRocyBhcyBkaXJlY3Rvcmllcy4gKi8KKwkJKm1vZGVfb3V0ID0gU19JRkRJUjsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBidWYuYnVmOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2NvcHkodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0KQoreworCWludCBlcnI7CisJdWludDMyX3QgbW9kZTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBkYXRhID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmRhdGEpOworCWVyciA9IGZhc3RfZXhwb3J0X2xzX3JldihyZXZpc2lvbiwgc3JjLCAmbW9kZSwgJmRhdGEpOworCWlmIChlcnIpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCUJVRygidW5leHBlY3RlZCBmYXN0X2V4cG9ydF9sc19yZXYgZXJyb3I6ICVzIiwKKwkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQlmYXN0X2V4cG9ydF9kZWxldGUoZHN0KTsKKwkJcmV0dXJuOworCX0KKwlmYXN0X2V4cG9ydF9tb2RpZnkoZHN0LCBtb2RlLCBkYXRhLmJ1Zik7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfYmxvYl9kZWx0YSh1aW50MzJfdCBtb2RlLAorCQkJCXVpbnQzMl90IG9sZF9tb2RlLCBjb25zdCBjaGFyICpvbGRfZGF0YSwKKwkJCQlvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJbG9uZyBwb3N0aW1hZ2VfbGVuOworCisJYXNzZXJ0KGxlbiA+PSAwKTsKKwlwb3N0aW1hZ2VfbGVuID0gYXBwbHlfZGVsdGEobGVuLCBpbnB1dCwgb2xkX2RhdGEsIG9sZF9tb2RlKTsKKwlpZiAobW9kZSA9PSBTX0lGTE5LKSB7CisJCWJ1ZmZlcl9za2lwX2J5dGVzKCZwb3N0aW1hZ2UsIHN0cmxlbigibGluayAiKSk7CisJCXBvc3RpbWFnZV9sZW4gLT0gc3RybGVuKCJsaW5rICIpOworCX0KKwlwcmludGYoImRhdGEgJWxkXG4iLCBwb3N0aW1hZ2VfbGVuKTsKKwlidWZmZXJfY29weV9ieXRlcygmcG9zdGltYWdlLCBwb3N0aW1hZ2VfbGVuKTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworfQpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9mYXN0X2V4cG9ydC5oIGIvdmNzLXN2bi9mYXN0X2V4cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2Y5MzMKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL2Zhc3RfZXhwb3J0LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBGQVNUX0VYUE9SVF9ICisjZGVmaW5lIEZBU1RfRVhQT1JUX0gKKworc3RydWN0IHN0cmJ1ZjsKK3N0cnVjdCBsaW5lX2J1ZmZlcjsKKwordm9pZCBmYXN0X2V4cG9ydF9pbml0KGludCBmZCk7Cit2b2lkIGZhc3RfZXhwb3J0X2RlaW5pdCh2b2lkKTsKKwordm9pZCBmYXN0X2V4cG9ydF9kZWxldGUoY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIGZhc3RfZXhwb3J0X21vZGlmeShjb25zdCBjaGFyICpwYXRoLCB1aW50MzJfdCBtb2RlLCBjb25zdCBjaGFyICpkYXRhcmVmKTsKK3ZvaWQgZmFzdF9leHBvcnRfbm90ZShjb25zdCBjaGFyICpjb21taXR0aXNoLCBjb25zdCBjaGFyICpkYXRhcmVmKTsKK3ZvaWQgZmFzdF9leHBvcnRfYmVnaW5fbm90ZSh1aW50MzJfdCByZXZpc2lvbiwgY29uc3QgY2hhciAqYXV0aG9yLAorCQljb25zdCBjaGFyICpsb2csIHRpbWVzdGFtcF90IHRpbWVzdGFtcCwgY29uc3QgY2hhciAqbm90ZV9yZWYpOwordm9pZCBmYXN0X2V4cG9ydF9iZWdpbl9jb21taXQodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCWNvbnN0IHN0cnVjdCBzdHJidWYgKmxvZywgY29uc3QgY2hhciAqdXVpZCxjb25zdCBjaGFyICp1cmwsCisJCQl0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGNvbnN0IGNoYXIgKmxvY2FsX3JlZik7Cit2b2lkIGZhc3RfZXhwb3J0X2VuZF9jb21taXQodWludDMyX3QgcmV2aXNpb24pOwordm9pZCBmYXN0X2V4cG9ydF9kYXRhKHVpbnQzMl90IG1vZGUsIG9mZl90IGxlbiwgc3RydWN0IGxpbmVfYnVmZmVyICppbnB1dCk7Cit2b2lkIGZhc3RfZXhwb3J0X2J1Zl90b19kYXRhKGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpOwordm9pZCBmYXN0X2V4cG9ydF9ibG9iX2RlbHRhKHVpbnQzMl90IG1vZGUsCisJCQl1aW50MzJfdCBvbGRfbW9kZSwgY29uc3QgY2hhciAqb2xkX2RhdGEsCisJCQlvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpOworCisvKiBJZiB0aGVyZSBpcyBubyBzdWNoIGZpbGUgYXQgdGhhdCByZXYsIHJldHVybnMgLTEsIGVycm5vID09IEVOT0VOVC4gKi8KK2ludCBmYXN0X2V4cG9ydF9sc19yZXYodWludDMyX3QgcmV2LCBjb25zdCBjaGFyICpwYXRoLAorCQkJdWludDMyX3QgKm1vZGVfb3V0LCBzdHJ1Y3Qgc3RyYnVmICpkYXRhcmVmX291dCk7CitpbnQgZmFzdF9leHBvcnRfbHMoY29uc3QgY2hhciAqcGF0aCwKKwkJCXVpbnQzMl90ICptb2RlX291dCwgc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZl9vdXQpOworCit2b2lkIGZhc3RfZXhwb3J0X2NvcHkodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0KTsKK2NvbnN0IGNoYXIgKmZhc3RfZXhwb3J0X3JlYWRfcGF0aChjb25zdCBjaGFyICpwYXRoLCB1aW50MzJfdCAqbW9kZV9vdXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Zjcy1zdm4vbGluZV9idWZmZXIuYyBiL3Zjcy1zdm4vbGluZV9idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDE2Y2FmCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9saW5lX2J1ZmZlci5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogTGljZW5zZWQgdW5kZXIgYSB0d28tY2xhdXNlIEJTRC1zdHlsZSBsaWNlbnNlLgorICogU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKyNkZWZpbmUgQ09QWV9CVUZGRVJfTEVOIDQwOTYKKworaW50IGJ1ZmZlcl9pbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlidWYtPmluZmlsZSA9IGZpbGVuYW1lID8gZm9wZW4oZmlsZW5hbWUsICJyIikgOiBzdGRpbjsKKwlpZiAoIWJ1Zi0+aW5maWxlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBidWZmZXJfZmRpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBpbnQgZmQpCit7CisJYnVmLT5pbmZpbGUgPSBmZG9wZW4oZmQsICJyIik7CisJaWYgKCFidWYtPmluZmlsZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgYnVmZmVyX3RtcGZpbGVfaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlidWYtPmluZmlsZSA9IHRtcGZpbGUoKTsKKwlpZiAoIWJ1Zi0+aW5maWxlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBidWZmZXJfZGVpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCWludCBlcnI7CisJaWYgKGJ1Zi0+aW5maWxlID09IHN0ZGluKQorCQlyZXR1cm4gZmVycm9yKGJ1Zi0+aW5maWxlKTsKKwllcnIgPSBmZXJyb3IoYnVmLT5pbmZpbGUpOworCWVyciB8PSBmY2xvc2UoYnVmLT5pbmZpbGUpOworCXJldHVybiBlcnI7Cit9CisKK0ZJTEUgKmJ1ZmZlcl90bXBmaWxlX3Jld2luZChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlyZXdpbmQoYnVmLT5pbmZpbGUpOworCXJldHVybiBidWYtPmluZmlsZTsKK30KKworbG9uZyBidWZmZXJfdG1wZmlsZV9wcmVwYXJlX3RvX3JlYWQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJbG9uZyBwb3MgPSBmdGVsbChidWYtPmluZmlsZSk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiBlcnJvcl9lcnJubygiZnRlbGwgZXJyb3IiKTsKKwlpZiAoZnNlZWsoYnVmLT5pbmZpbGUsIDAsIFNFRUtfU0VUKSkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKCJzZWVrIGVycm9yIik7CisJcmV0dXJuIHBvczsKK30KKworaW50IGJ1ZmZlcl9mZXJyb3Ioc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJcmV0dXJuIGZlcnJvcihidWYtPmluZmlsZSk7Cit9CisKK2ludCBidWZmZXJfcmVhZF9jaGFyKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCXJldHVybiBmZ2V0YyhidWYtPmluZmlsZSk7Cit9CisKKy8qIFJlYWQgYSBsaW5lIHdpdGhvdXQgdHJhaWxpbmcgbmV3bGluZS4gKi8KK2NoYXIgKmJ1ZmZlcl9yZWFkX2xpbmUoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJY2hhciAqZW5kOworCWlmICghZmdldHMoYnVmLT5saW5lX2J1ZmZlciwgc2l6ZW9mKGJ1Zi0+bGluZV9idWZmZXIpLCBidWYtPmluZmlsZSkpCisJCS8qIEVycm9yIG9yIGRhdGEgZXhoYXVzdGVkLiAqLworCQlyZXR1cm4gTlVMTDsKKwllbmQgPSBidWYtPmxpbmVfYnVmZmVyICsgc3RybGVuKGJ1Zi0+bGluZV9idWZmZXIpOworCWlmIChlbmRbLTFdID09ICdcbicpCisJCWVuZFstMV0gPSAnXDAnOworCWVsc2UgaWYgKGZlb2YoYnVmLT5pbmZpbGUpKQorCQk7IC8qIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUuICBUaGF0J3MgZmluZS4gKi8KKwllbHNlCisJCS8qCisJCSAqIExpbmUgd2FzIHRvbyBsb25nLgorCQkgKiBUaGVyZSBpcyBwcm9iYWJseSBhIHNhbmVyIHdheSB0byBkZWFsIHdpdGggdGhpcywKKwkJICogYnV0IGZvciBub3cgbGV0J3MgcmV0dXJuIGFuIGVycm9yLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGJ1Zi0+bGluZV9idWZmZXI7Cit9CisKK3NpemVfdCBidWZmZXJfcmVhZF9iaW5hcnkoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsCisJCQkJc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBzaXplKQoreworCXJldHVybiBzdHJidWZfZnJlYWQoc2IsIHNpemUsIGJ1Zi0+aW5maWxlKTsKK30KKworb2ZmX3QgYnVmZmVyX2NvcHlfYnl0ZXMoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIG9mZl90IG5ieXRlcykKK3sKKwljaGFyIGJ5dGVfYnVmZmVyW0NPUFlfQlVGRkVSX0xFTl07CisJb2ZmX3QgZG9uZSA9IDA7CisJd2hpbGUgKGRvbmUgPCBuYnl0ZXMgJiYgIWZlb2YoYnVmLT5pbmZpbGUpICYmICFmZXJyb3IoYnVmLT5pbmZpbGUpKSB7CisJCW9mZl90IGxlbiA9IG5ieXRlcyAtIGRvbmU7CisJCXNpemVfdCBpbiA9IGxlbiA8IENPUFlfQlVGRkVSX0xFTiA/IGxlbiA6IENPUFlfQlVGRkVSX0xFTjsKKwkJaW4gPSBmcmVhZChieXRlX2J1ZmZlciwgMSwgaW4sIGJ1Zi0+aW5maWxlKTsKKwkJZG9uZSArPSBpbjsKKwkJZndyaXRlKGJ5dGVfYnVmZmVyLCAxLCBpbiwgc3Rkb3V0KTsKKwkJaWYgKGZlcnJvcihzdGRvdXQpKQorCQkJcmV0dXJuIGRvbmUgKyBidWZmZXJfc2tpcF9ieXRlcyhidWYsIG5ieXRlcyAtIGRvbmUpOworCX0KKwlyZXR1cm4gZG9uZTsKK30KKworb2ZmX3QgYnVmZmVyX3NraXBfYnl0ZXMoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIG9mZl90IG5ieXRlcykKK3sKKwljaGFyIGJ5dGVfYnVmZmVyW0NPUFlfQlVGRkVSX0xFTl07CisJb2ZmX3QgZG9uZSA9IDA7CisJd2hpbGUgKGRvbmUgPCBuYnl0ZXMgJiYgIWZlb2YoYnVmLT5pbmZpbGUpICYmICFmZXJyb3IoYnVmLT5pbmZpbGUpKSB7CisJCW9mZl90IGxlbiA9IG5ieXRlcyAtIGRvbmU7CisJCXNpemVfdCBpbiA9IGxlbiA8IENPUFlfQlVGRkVSX0xFTiA/IGxlbiA6IENPUFlfQlVGRkVSX0xFTjsKKwkJZG9uZSArPSBmcmVhZChieXRlX2J1ZmZlciwgMSwgaW4sIGJ1Zi0+aW5maWxlKTsKKwl9CisJcmV0dXJuIGRvbmU7Cit9CmRpZmYgLS1naXQgYS92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmggYi92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5MmFlZAotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vbGluZV9idWZmZXIuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIExJTkVfQlVGRkVSX0gKKyNkZWZpbmUgTElORV9CVUZGRVJfSAorCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKyNkZWZpbmUgTElORV9CVUZGRVJfTEVOIDEwMDAwCisKK3N0cnVjdCBsaW5lX2J1ZmZlciB7CisJY2hhciBsaW5lX2J1ZmZlcltMSU5FX0JVRkZFUl9MRU5dOworCUZJTEUgKmluZmlsZTsKK307CisjZGVmaW5lIExJTkVfQlVGRkVSX0lOSVQgeyAiIiwgTlVMTCB9CisKK2ludCBidWZmZXJfaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZiwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworaW50IGJ1ZmZlcl9mZGluaXQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIGludCBmZCk7CitpbnQgYnVmZmVyX2RlaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CisKK2ludCBidWZmZXJfdG1wZmlsZV9pbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsKK0ZJTEUgKmJ1ZmZlcl90bXBmaWxlX3Jld2luZChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CS8qIHByZXBhcmUgdG8gd3JpdGUuICovCitsb25nIGJ1ZmZlcl90bXBmaWxlX3ByZXBhcmVfdG9fcmVhZChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CisKK2ludCBidWZmZXJfZmVycm9yKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsKK2NoYXIgKmJ1ZmZlcl9yZWFkX2xpbmUoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOworaW50IGJ1ZmZlcl9yZWFkX2NoYXIoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOworc2l6ZV90IGJ1ZmZlcl9yZWFkX2JpbmFyeShzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Ziwgc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBsZW4pOworLyogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZCAobm90IG5lY2Vzc2FyaWx5IHdyaXR0ZW4pLiAqLworb2ZmX3QgYnVmZmVyX2NvcHlfYnl0ZXMoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIG9mZl90IGxlbik7CitvZmZfdCBidWZmZXJfc2tpcF9ieXRlcyhzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Ziwgb2ZmX3QgbGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL2xpbmVfYnVmZmVyLnR4dCBiL3Zjcy1zdm4vbGluZV9idWZmZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTM5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL2xpbmVfYnVmZmVyLnR4dApAQCAtMCwwICsxLDc3IEBACitsaW5lX2J1ZmZlciBBUEkKKz09PT09PT09PT09PT09PQorCitUaGUgbGluZV9idWZmZXIgbGlicmFyeSBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIGZvcgorbW9zdGx5LWxpbmUtb3JpZW50ZWQgaW5wdXQuCisKK0VhY2ggbGluZSBpcyBub3QgcGVybWl0dGVkIHRvIGV4Y2VlZCAxMDAwMCBieXRlcy4gIFRoZSBwcm92aWRlZAorZnVuY3Rpb25zIGFyZSBub3QgdGhyZWFkLXNhZmUgb3IgYXN5bmMtc2lnbmFsLXNhZmUsIGFuZCBsaWtlCitgZmdldHMoKWAsIHRoZXkgZ2VuZXJhbGx5IGRvIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkgaWYgaW50ZXJydXB0ZWQKK2J5IGEgc2lnbmFsIHdpdGhvdXQgU0FfUkVTVEFSVCBzZXQuCisKK0NhbGxpbmcgc2VxdWVuY2UKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhbGxpbmcgcHJvZ3JhbToKKworIC0gaW5pdGlhbGl6ZXMgYSBgc3RydWN0IGxpbmVfYnVmZmVyYCB0byBMSU5FX0JVRkZFUl9JTklUCisgLSBzcGVjaWZpZXMgYSBmaWxlIHRvIHJlYWQgd2l0aCBgYnVmZmVyX2luaXRgCisgLSBwcm9jZXNzZXMgaW5wdXQgd2l0aCBgYnVmZmVyX3JlYWRfbGluZWAsIGBidWZmZXJfc2tpcF9ieXRlc2AsCisgICBhbmQgYGJ1ZmZlcl9jb3B5X2J5dGVzYAorIC0gY2xvc2VzIHRoZSBmaWxlIHdpdGggYGJ1ZmZlcl9kZWluaXRgLCBwZXJoYXBzIHRvIHN0YXJ0IG92ZXIgYW5kCisgICByZWFkIGFub3RoZXIgZmlsZS4KKworV2hlbiBmaW5pc2hlZCwgdGhlIGNhbGxlciBjYW4gdXNlIGBidWZmZXJfcmVzZXRgIHRvIGRlYWxsb2NhdGUKK3Jlc291cmNlcy4KKworVXNpbmcgdGVtcG9yYXJ5IGZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGVtcG9yYXJ5IGZpbGVzIHByb3ZpZGUgYSBwbGFjZSB0byBzdG9yZSBkYXRhIHRoYXQgc2hvdWxkIG5vdCBvdXRsaXZlCit0aGUgY2FsbGluZyBwcm9ncmFtLiAgQSBwcm9ncmFtCisKKyAtIGluaXRpYWxpemVzIGEgYHN0cnVjdCBsaW5lX2J1ZmZlcmAgdG8gTElORV9CVUZGRVJfSU5JVAorIC0gcmVxdWVzdHMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGBidWZmZXJfdG1wZmlsZV9pbml0YAorIC0gYWNxdWlyZXMgYW4gb3V0cHV0IGhhbmRsZSBieSBjYWxsaW5nIGBidWZmZXJfdG1wZmlsZV9yZXdpbmRgCisgLSB1c2VzIHN0YW5kYXJkIEkvTyBmdW5jdGlvbnMgbGlrZSBgZnByaW50ZmAgYW5kIGBmd3JpdGVgIHRvIGZpbGwKKyAgIHRoZSB0ZW1wb3JhcnkgZmlsZQorIC0gZGVjbGFyZXMgd3JpdGluZyBpcyBvdmVyIHdpdGggYGJ1ZmZlcl90bXBmaWxlX3ByZXBhcmVfdG9fcmVhZGAKKyAtIGNhbiByZS1yZWFkIHdoYXQgd2FzIHdyaXR0ZW4gd2l0aCBgYnVmZmVyX3JlYWRfbGluZWAsCisgICBgYnVmZmVyX2NvcHlfYnl0ZXNgLCBhbmQgc28gb24KKyAtIGNhbiByZXVzZSB0aGUgdGVtcG9yYXJ5IGZpbGUgYnkgY2FsbGluZyBgYnVmZmVyX3RtcGZpbGVfcmV3aW5kYAorICAgYWdhaW4KKyAtIHJlbW92ZXMgdGhlIHRlbXBvcmFyeSBmaWxlIHdpdGggYGJ1ZmZlcl9kZWluaXRgLCBwZXJoYXBzIHRvCisgICByZXVzZSB0aGUgbGluZV9idWZmZXIgZm9yIHNvbWUgb3RoZXIgZmlsZS4KKworV2hlbiBmaW5pc2hlZCwgdGhlIGNhbGxpbmcgcHJvZ3JhbSBjYW4gdXNlIGBidWZmZXJfcmVzZXRgIHRvIGRlYWxsb2NhdGUKK3Jlc291cmNlcy4KKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworYGJ1ZmZlcl9pbml0YCwgYGJ1ZmZlcl9mZGluaXRgOjoKKwlPcGVuIHRoZSBuYW1lZCBmaWxlIG9yIGZpbGUgZGVzY3JpcHRvciBmb3IgaW5wdXQuCisJYnVmZmVyX2luaXQoYnVmLCBOVUxMKSBwcmVwYXJlcyB0byByZWFkIGZyb20gc3RkaW4uCisJT24gZmFpbHVyZSwgcmV0dXJucyAtMSAod2l0aCBlcnJubyBpbmRpY2F0aW5nIHRoZSBuYXR1cmUKKwlvZiB0aGUgZmFpbHVyZSkuCisKK2BidWZmZXJfZGVpbml0YDo6CisJU3RvcCByZWFkaW5nIGZyb20gdGhlIGN1cnJlbnQgZmlsZSAoY2xvc2luZyBpdCB1bmxlc3MKKwlpdCB3YXMgc3RkaW4pLiAgUmV0dXJucyBub256ZXJvIGlmIGBmY2xvc2VgIGZhaWxzIG9yCisJdGhlIGVycm9yIGluZGljYXRvciB3YXMgc2V0LgorCitgYnVmZmVyX3JlYWRfbGluZWA6OgorCVJlYWQgYSBsaW5lIGFuZCBzdHJpcCBvZmYgdGhlIHRyYWlsaW5nIG5ld2xpbmUuCisJT24gZmFpbHVyZSBvciBlbmQgb2YgZmlsZSwgcmV0dXJucyBOVUxMLgorCitgYnVmZmVyX2NvcHlfYnl0ZXNgOjoKKwlSZWFkIGBsZW5gIGJ5dGVzIG9mIGlucHV0IGFuZCBkdW1wIHRoZW0gdG8gdGhlIHN0YW5kYXJkIG91dHB1dAorCXN0cmVhbS4gIFJldHVybnMgZWFybHkgZm9yIGVycm9yIG9yIGVuZCBvZiBmaWxlLgorCitgYnVmZmVyX3NraXBfYnl0ZXNgOjoKKwlEaXNjYXJkcyBgbGVuYCBieXRlcyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKHN0b3BwaW5nIGVhcmx5CisJaWYgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgYW4gZXJyb3Igb3IgZW9mKS4gIFJldHVybiB2YWx1ZSBpcworCXRoZSBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHJlYWQuCisKK2BidWZmZXJfcmVzZXRgOjoKKwlEZWFsbG9jYXRlcyBub24tc3RhdGljIGJ1ZmZlcnMuCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmMgYi92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkMjczYwotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc2xpZGluZ193aW5kb3cuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogTGljZW5zZWQgdW5kZXIgYSB0d28tY2xhdXNlIEJTRC1zdHlsZSBsaWNlbnNlLgorICogU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInNsaWRpbmdfd2luZG93LmgiCisjaW5jbHVkZSAibGluZV9idWZmZXIuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIGludCBpbnB1dF9lcnJvcihzdHJ1Y3QgbGluZV9idWZmZXIgKmZpbGUpCit7CisJaWYgKCFidWZmZXJfZmVycm9yKGZpbGUpKQorCQlyZXR1cm4gZXJyb3IoImRlbHRhIHByZWltYWdlIGVuZHMgZWFybHkiKTsKKwlyZXR1cm4gZXJyb3JfZXJybm8oImNhbm5vdCByZWFkIGRlbHRhIHByZWltYWdlIik7Cit9CisKK3N0YXRpYyBpbnQgc2tpcF9vcl93aGluZShzdHJ1Y3QgbGluZV9idWZmZXIgKmZpbGUsIG9mZl90IGdhcCkKK3sKKwlpZiAoYnVmZmVyX3NraXBfYnl0ZXMoZmlsZSwgZ2FwKSAhPSBnYXApCisJCXJldHVybiBpbnB1dF9lcnJvcihmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX3RvX2ZpbGxfb3Jfd2hpbmUoc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlLAorCQkJCXN0cnVjdCBzdHJidWYgKmJ1Ziwgc2l6ZV90IHdpZHRoKQoreworCWJ1ZmZlcl9yZWFkX2JpbmFyeShmaWxlLCBidWYsIHdpZHRoIC0gYnVmLT5sZW4pOworCWlmIChidWYtPmxlbiAhPSB3aWR0aCkKKwkJcmV0dXJuIGlucHV0X2Vycm9yKGZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX29mZnNldF9vdmVyZmxvdyhvZmZfdCBvZmZzZXQsIHVpbnRtYXhfdCBsZW4pCit7CisJaWYgKGxlbiA+IG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUob2ZmX3QpKQorCQlyZXR1cm4gZXJyb3IoInVucmVwcmVzZW50YWJsZSBsZW5ndGggaW4gZGVsdGE6ICIKKwkJCQkiJSJQUkl1TUFYIiA+IE9GRl9NQVgiLCBsZW4pOworCWlmIChzaWduZWRfYWRkX292ZXJmbG93cyhvZmZzZXQsIChvZmZfdCkgbGVuKSkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlcHJlc2VudGFibGUgb2Zmc2V0IGluIGRlbHRhOiAiCisJCQkJIiUiUFJJdU1BWCIgKyAlIlBSSXVNQVgiID4gT0ZGX01BWCIsCisJCQkJKHVpbnRtYXhfdCkgb2Zmc2V0LCBsZW4pOworCXJldHVybiAwOworfQorCitpbnQgbW92ZV93aW5kb3coc3RydWN0IHNsaWRpbmdfdmlldyAqdmlldywgb2ZmX3Qgb2ZmLCBzaXplX3Qgd2lkdGgpCit7CisJb2ZmX3QgZmlsZV9vZmZzZXQ7CisJYXNzZXJ0KHZpZXcpOworCWFzc2VydCh2aWV3LT53aWR0aCA8PSB2aWV3LT5idWYubGVuKTsKKwlhc3NlcnQoIWNoZWNrX29mZnNldF9vdmVyZmxvdyh2aWV3LT5vZmYsIHZpZXctPmJ1Zi5sZW4pKTsKKworCWlmIChjaGVja19vZmZzZXRfb3ZlcmZsb3cob2ZmLCB3aWR0aCkpCisJCXJldHVybiAtMTsKKwlpZiAob2ZmIDwgdmlldy0+b2ZmIHx8IG9mZiArIHdpZHRoIDwgdmlldy0+b2ZmICsgdmlldy0+d2lkdGgpCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogd2luZG93IHNsaWRlcyBsZWZ0Iik7CisJaWYgKHZpZXctPm1heF9vZmYgPj0gMCAmJiB2aWV3LT5tYXhfb2ZmIDwgb2ZmICsgKG9mZl90KSB3aWR0aCkKKwkJcmV0dXJuIGVycm9yKCJkZWx0YSBwcmVpbWFnZSBlbmRzIGVhcmx5Iik7CisKKwlmaWxlX29mZnNldCA9IHZpZXctPm9mZiArIHZpZXctPmJ1Zi5sZW47CisJaWYgKG9mZiA8IGZpbGVfb2Zmc2V0KSB7CisJCS8qIE1vdmUgdGhlIG92ZXJsYXBwaW5nIHJlZ2lvbiBpbnRvIHBsYWNlLiAqLworCQlzdHJidWZfcmVtb3ZlKCZ2aWV3LT5idWYsIDAsIG9mZiAtIHZpZXctPm9mZik7CisJfSBlbHNlIHsKKwkJLyogU2VlayBhaGVhZCB0byBza2lwIHRoZSBnYXAuICovCisJCWlmIChza2lwX29yX3doaW5lKHZpZXctPmZpbGUsIG9mZiAtIGZpbGVfb2Zmc2V0KSkKKwkJCXJldHVybiAtMTsKKwkJc3RyYnVmX3NldGxlbigmdmlldy0+YnVmLCAwKTsKKwl9CisKKwlpZiAodmlldy0+YnVmLmxlbiA+IHdpZHRoKQorCQk7IC8qIEFscmVhZHkgcmVhZC4gKi8KKwllbHNlIGlmIChyZWFkX3RvX2ZpbGxfb3Jfd2hpbmUodmlldy0+ZmlsZSwgJnZpZXctPmJ1Ziwgd2lkdGgpKQorCQlyZXR1cm4gLTE7CisKKwl2aWV3LT5vZmYgPSBvZmY7CisJdmlldy0+d2lkdGggPSB3aWR0aDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vc2xpZGluZ193aW5kb3cuaCBiL3Zjcy1zdm4vc2xpZGluZ193aW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZjMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgU0xJRElOR19XSU5ET1dfSAorI2RlZmluZSBTTElESU5HX1dJTkRPV19ICisKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IHNsaWRpbmdfdmlldyB7CisJc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlOworCW9mZl90IG9mZjsKKwlzaXplX3Qgd2lkdGg7CisJb2ZmX3QgbWF4X29mZjsJLyogLTEgbWVhbnMgdW5saW1pdGVkICovCisJc3RydWN0IHN0cmJ1ZiBidWY7Cit9OworCisjZGVmaW5lIFNMSURJTkdfVklFV19JTklUKGlucHV0LCBsZW4pCXsgKGlucHV0KSwgMCwgMCwgKGxlbiksIFNUUkJVRl9JTklUIH0KKworaW50IG1vdmVfd2luZG93KHN0cnVjdCBzbGlkaW5nX3ZpZXcgKnZpZXcsIG9mZl90IG9mZiwgc2l6ZV90IHdpZHRoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3N2bmRpZmYuYyBiL3Zjcy1zdm4vc3ZuZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1Yzc1MzEKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3N2bmRpZmYuYwpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisjaW5jbHVkZSAic3ZuZGlmZi5oIgorCisvKgorICogc3ZuZGlmZjAgYXBwbGllcgorICoKKyAqIFNlZSBodHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3N1YnZlcnNpb24vdHJ1bmsvbm90ZXMvc3ZuZGlmZi4KKyAqCisgKiBzdm5kaWZmMCA6Oj0gJ1NWTlwwJyB3aW5kb3cqCisgKiB3aW5kb3cgOjo9IGludCBpbnQgaW50IGludCBpbnQgaW5zdHJ1Y3Rpb25zIGlubGluZV9kYXRhOworICogaW5zdHJ1Y3Rpb25zIDo6PSBpbnN0cnVjdGlvbio7CisgKiBpbnN0cnVjdGlvbiA6Oj0gdmlld19zZWxlY3RvciBpbnQgaW50CisgKiAgIHwgY29weWZyb21fZGF0YSBpbnQKKyAqICAgfCBwYWNrZWRfdmlld19zZWxlY3RvciBpbnQKKyAqICAgfCBwYWNrZWRfY29weWZyb21fZGF0YQorICogICA7CisgKiB2aWV3X3NlbGVjdG9yIDo6PSBjb3B5ZnJvbV9zb3VyY2UKKyAqICAgfCBjb3B5ZnJvbV90YXJnZXQKKyAqICAgOworICogY29weWZyb21fc291cmNlIDo6PSAjIGJpbmFyeSAwMCAwMDAwMDA7CisgKiBjb3B5ZnJvbV90YXJnZXQgOjo9ICMgYmluYXJ5IDAxIDAwMDAwMDsKKyAqIGNvcHlmcm9tX2RhdGEgOjo9ICMgYmluYXJ5IDEwIDAwMDAwMDsKKyAqIHBhY2tlZF92aWV3X3NlbGVjdG9yIDo6PSAjIHZpZXdfc2VsZWN0b3IgT1ItZWQgd2l0aCA2IGJpdCB2YWx1ZTsKKyAqIHBhY2tlZF9jb3B5ZnJvbV9kYXRhIDo6PSAjIGNvcHlmcm9tX2RhdGEgT1ItZWQgd2l0aCA2IGJpdCB2YWx1ZTsKKyAqIGludCA6Oj0gaGlnaGRpZ2l0KiBsb3dkaWdpdDsKKyAqIGhpZ2hkaWdpdCA6Oj0gIyBiaW5hcnkgMTAwMCAwMDAwIE9SLWVkIHdpdGggNyBiaXQgdmFsdWU7CisgKiBsb3dkaWdpdCA6Oj0gIyA3IGJpdCB2YWx1ZTsKKyAqLworCisjZGVmaW5lIElOU05fTUFTSwkweGMwCisjZGVmaW5lIElOU05fQ09QWUZST01fU09VUkNFCTB4MDAKKyNkZWZpbmUgSU5TTl9DT1BZRlJPTV9UQVJHRVQJMHg0MAorI2RlZmluZSBJTlNOX0NPUFlGUk9NX0RBVEEJMHg4MAorI2RlZmluZSBPUEVSQU5EX01BU0sJMHgzZgorCisjZGVmaW5lIFZMSV9DT05USU5VRQkweDgwCisjZGVmaW5lIFZMSV9ESUdJVF9NQVNLCTB4N2YKKyNkZWZpbmUgVkxJX0JJVFNfUEVSX0RJR0lUIDcKKworc3RydWN0IHdpbmRvdyB7CisJc3RydWN0IHNsaWRpbmdfdmlldyAqaW47CisJc3RydWN0IHN0cmJ1ZiBvdXQ7CisJc3RydWN0IHN0cmJ1ZiBpbnN0cnVjdGlvbnM7CisJc3RydWN0IHN0cmJ1ZiBkYXRhOworfTsKKworI2RlZmluZSBXSU5ET1dfSU5JVCh3KQl7ICh3KSwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCB9CisKK3N0YXRpYyB2b2lkIHdpbmRvd19yZWxlYXNlKHN0cnVjdCB3aW5kb3cgKmN0eCkKK3sKKwlzdHJidWZfcmVsZWFzZSgmY3R4LT5vdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZjdHgtPmluc3RydWN0aW9ucyk7CisJc3RyYnVmX3JlbGVhc2UoJmN0eC0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfc3RyYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpvdXQpCit7CisJaWYgKGZ3cml0ZShzYi0+YnVmLCAxLCBzYi0+bGVuLCBvdXQpID09IHNiLT5sZW4pCS8qIFN1Y2Nlc3MuICovCisJCXJldHVybiAwOworCXJldHVybiBlcnJvcl9lcnJubygiY2Fubm90IHdyaXRlIGRlbHRhIHBvc3RpbWFnZSIpOworfQorCitzdGF0aWMgaW50IGVycm9yX3Nob3J0X3JlYWQoc3RydWN0IGxpbmVfYnVmZmVyICppbnB1dCkKK3sKKwlpZiAoYnVmZmVyX2ZlcnJvcihpbnB1dCkpCisJCXJldHVybiBlcnJvcl9lcnJubygiZXJyb3IgcmVhZGluZyBkZWx0YSIpOworCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogdW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOworfQorCitzdGF0aWMgaW50IHJlYWRfY2h1bmsoc3RydWN0IGxpbmVfYnVmZmVyICpkZWx0YSwgb2ZmX3QgKmRlbHRhX2xlbiwKKwkJICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBzaXplX3QgbGVuKQoreworCWFzc2VydCgqZGVsdGFfbGVuID49IDApOworCXN0cmJ1Zl9yZXNldChidWYpOworCWlmIChsZW4gPiAodWludG1heF90KSAqZGVsdGFfbGVuIHx8CisJICAgIGJ1ZmZlcl9yZWFkX2JpbmFyeShkZWx0YSwgYnVmLCBsZW4pICE9IGxlbikKKwkJcmV0dXJuIGVycm9yX3Nob3J0X3JlYWQoZGVsdGEpOworCSpkZWx0YV9sZW4gLT0gYnVmLT5sZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9tYWdpYyhzdHJ1Y3QgbGluZV9idWZmZXIgKmluLCBvZmZfdCAqbGVuKQoreworCXN0YXRpYyBjb25zdCBjaGFyIG1hZ2ljW10gPSB7J1MnLCAnVicsICdOJywgJ1wwJ307CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJaWYgKHJlYWRfY2h1bmsoaW4sIGxlbiwgJnNiLCBzaXplb2YobWFnaWMpKSkgeworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChtZW1jbXAoc2IuYnVmLCBtYWdpYywgc2l6ZW9mKG1hZ2ljKSkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGRlbHRhOiB1bnJlY29nbml6ZWQgZmlsZSB0eXBlIik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9pbnQoc3RydWN0IGxpbmVfYnVmZmVyICppbiwgdWludG1heF90ICpyZXN1bHQsIG9mZl90ICpsZW4pCit7CisJdWludG1heF90IHJ2ID0gMDsKKwlvZmZfdCBzejsKKwlmb3IgKHN6ID0gKmxlbjsgc3o7IHN6LS0pIHsKKwkJY29uc3QgaW50IGNoID0gYnVmZmVyX3JlYWRfY2hhcihpbik7CisJCWlmIChjaCA9PSBFT0YpCisJCQlicmVhazsKKworCQlydiA8PD0gVkxJX0JJVFNfUEVSX0RJR0lUOworCQlydiArPSAoY2ggJiBWTElfRElHSVRfTUFTSyk7CisJCWlmIChjaCAmIFZMSV9DT05USU5VRSkKKwkJCWNvbnRpbnVlOworCisJCSpyZXN1bHQgPSBydjsKKwkJKmxlbiA9IHN6IC0gMTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBlcnJvcl9zaG9ydF9yZWFkKGluKTsKK30KKworc3RhdGljIGludCBwYXJzZV9pbnQoY29uc3QgY2hhciAqKmJ1Ziwgc2l6ZV90ICpyZXN1bHQsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwlzaXplX3QgcnYgPSAwOworCWNvbnN0IGNoYXIgKnBvczsKKwlmb3IgKHBvcyA9ICpidWY7IHBvcyAhPSBlbmQ7IHBvcysrKSB7CisJCXVuc2lnbmVkIGNoYXIgY2ggPSAqcG9zOworCisJCXJ2IDw8PSBWTElfQklUU19QRVJfRElHSVQ7CisJCXJ2ICs9IChjaCAmIFZMSV9ESUdJVF9NQVNLKTsKKwkJaWYgKGNoICYgVkxJX0NPTlRJTlVFKQorCQkJY29udGludWU7CisKKwkJKnJlc3VsdCA9IHJ2OworCQkqYnVmID0gcG9zICsgMTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogdW5leHBlY3RlZCBlbmQgb2YgaW5zdHJ1Y3Rpb25zIHNlY3Rpb24iKTsKK30KKworc3RhdGljIGludCByZWFkX29mZnNldChzdHJ1Y3QgbGluZV9idWZmZXIgKmluLCBvZmZfdCAqcmVzdWx0LCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCB2YWw7CisJaWYgKHJlYWRfaW50KGluLCAmdmFsLCBsZW4pKQorCQlyZXR1cm4gLTE7CisJaWYgKHZhbCA+IG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUob2ZmX3QpKQorCQlyZXR1cm4gZXJyb3IoInVucmVwcmVzZW50YWJsZSBvZmZzZXQgaW4gZGVsdGE6ICUiUFJJdU1BWCIiLCB2YWwpOworCSpyZXN1bHQgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9sZW5ndGgoc3RydWN0IGxpbmVfYnVmZmVyICppbiwgc2l6ZV90ICpyZXN1bHQsIG9mZl90ICpsZW4pCit7CisJdWludG1heF90IHZhbDsKKwlpZiAocmVhZF9pbnQoaW4sICZ2YWwsIGxlbikpCisJCXJldHVybiAtMTsKKwlpZiAodmFsID4gU0laRV9NQVgpCisJCXJldHVybiBlcnJvcigidW5yZXByZXNlbnRhYmxlIGxlbmd0aCBpbiBkZWx0YTogJSJQUkl1TUFYIiIsIHZhbCk7CisJKnJlc3VsdCA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3B5ZnJvbV9zb3VyY2Uoc3RydWN0IHdpbmRvdyAqY3R4LCBjb25zdCBjaGFyICoqaW5zdHJ1Y3Rpb25zLAorCQkJICAgc2l6ZV90IG5ieXRlcywgY29uc3QgY2hhciAqaW5zbnNfZW5kKQoreworCXNpemVfdCBvZmZzZXQ7CisJaWYgKHBhcnNlX2ludChpbnN0cnVjdGlvbnMsICZvZmZzZXQsIGluc25zX2VuZCkpCisJCXJldHVybiAtMTsKKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhvZmZzZXQsIG5ieXRlcykgfHwKKwkgICAgb2Zmc2V0ICsgbmJ5dGVzID4gY3R4LT5pbi0+d2lkdGgpCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogY29waWVzIHNvdXJjZSBkYXRhIG91dHNpZGUgdmlldyIpOworCXN0cmJ1Zl9hZGQoJmN0eC0+b3V0LCBjdHgtPmluLT5idWYuYnVmICsgb2Zmc2V0LCBuYnl0ZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcHlmcm9tX3RhcmdldChzdHJ1Y3Qgd2luZG93ICpjdHgsIGNvbnN0IGNoYXIgKippbnN0cnVjdGlvbnMsCisJCQkgICBzaXplX3QgbmJ5dGVzLCBjb25zdCBjaGFyICppbnN0cnVjdGlvbnNfZW5kKQoreworCXNpemVfdCBvZmZzZXQ7CisJaWYgKHBhcnNlX2ludChpbnN0cnVjdGlvbnMsICZvZmZzZXQsIGluc3RydWN0aW9uc19lbmQpKQorCQlyZXR1cm4gLTE7CisJaWYgKG9mZnNldCA+PSBjdHgtPm91dC5sZW4pCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogY29waWVzIGZyb20gdGhlIGZ1dHVyZSIpOworCWZvciAoOyBuYnl0ZXMgPiAwOyBuYnl0ZXMtLSkKKwkJc3RyYnVmX2FkZGNoKCZjdHgtPm91dCwgY3R4LT5vdXQuYnVmW29mZnNldCsrXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29weWZyb21fZGF0YShzdHJ1Y3Qgd2luZG93ICpjdHgsIHNpemVfdCAqZGF0YV9wb3MsIHNpemVfdCBuYnl0ZXMpCit7CisJY29uc3Qgc2l6ZV90IHBvcyA9ICpkYXRhX3BvczsKKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhwb3MsIG5ieXRlcykgfHwKKwkgICAgcG9zICsgbmJ5dGVzID4gY3R4LT5kYXRhLmxlbikKKwkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGRlbHRhOiBjb3BpZXMgdW5hdmFpbGFibGUgaW5saW5lIGRhdGEiKTsKKwlzdHJidWZfYWRkKCZjdHgtPm91dCwgY3R4LT5kYXRhLmJ1ZiArIHBvcywgbmJ5dGVzKTsKKwkqZGF0YV9wb3MgKz0gbmJ5dGVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZpcnN0X29wZXJhbmQoY29uc3QgY2hhciAqKmJ1Ziwgc2l6ZV90ICpvdXQsIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwlzaXplX3QgcmVzdWx0ID0gKHVuc2lnbmVkIGNoYXIpICooKmJ1ZikrKyAmIE9QRVJBTkRfTUFTSzsKKwlpZiAocmVzdWx0KSB7CS8qIGltbWVkaWF0ZSBvcGVyYW5kICovCisJCSpvdXQgPSByZXN1bHQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gcGFyc2VfaW50KGJ1Ziwgb3V0LCBlbmQpOworfQorCitzdGF0aWMgaW50IGV4ZWN1dGVfb25lX2luc3RydWN0aW9uKHN0cnVjdCB3aW5kb3cgKmN0eCwKKwkJCQljb25zdCBjaGFyICoqaW5zdHJ1Y3Rpb25zLCBzaXplX3QgKmRhdGFfcG9zKQoreworCXVuc2lnbmVkIGludCBpbnN0cnVjdGlvbjsKKwljb25zdCBjaGFyICppbnNuc19lbmQgPSBjdHgtPmluc3RydWN0aW9ucy5idWYgKyBjdHgtPmluc3RydWN0aW9ucy5sZW47CisJc2l6ZV90IG5ieXRlczsKKwlhc3NlcnQoY3R4KTsKKwlhc3NlcnQoaW5zdHJ1Y3Rpb25zICYmICppbnN0cnVjdGlvbnMpOworCWFzc2VydChkYXRhX3Bvcyk7CisKKwlpbnN0cnVjdGlvbiA9ICh1bnNpZ25lZCBjaGFyKSAqKmluc3RydWN0aW9uczsKKwlpZiAocGFyc2VfZmlyc3Rfb3BlcmFuZChpbnN0cnVjdGlvbnMsICZuYnl0ZXMsIGluc25zX2VuZCkpCisJCXJldHVybiAtMTsKKwlzd2l0Y2ggKGluc3RydWN0aW9uICYgSU5TTl9NQVNLKSB7CisJY2FzZSBJTlNOX0NPUFlGUk9NX1NPVVJDRToKKwkJcmV0dXJuIGNvcHlmcm9tX3NvdXJjZShjdHgsIGluc3RydWN0aW9ucywgbmJ5dGVzLCBpbnNuc19lbmQpOworCWNhc2UgSU5TTl9DT1BZRlJPTV9UQVJHRVQ6CisJCXJldHVybiBjb3B5ZnJvbV90YXJnZXQoY3R4LCBpbnN0cnVjdGlvbnMsIG5ieXRlcywgaW5zbnNfZW5kKTsKKwljYXNlIElOU05fQ09QWUZST01fREFUQToKKwkJcmV0dXJuIGNvcHlmcm9tX2RhdGEoY3R4LCBkYXRhX3BvcywgbmJ5dGVzKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHVucmVjb2duaXplZCBpbnN0cnVjdGlvbiIpOworCX0KK30KKworc3RhdGljIGludCBhcHBseV93aW5kb3dfaW5fY29yZShzdHJ1Y3Qgd2luZG93ICpjdHgpCit7CisJY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb25zOworCXNpemVfdCBkYXRhX3BvcyA9IDA7CisKKwkvKgorCSAqIEZpbGwgY3R4LT5vdXQuYnVmIHVzaW5nIGRhdGEgZnJvbSB0aGUgc291cmNlLCB0YXJnZXQsCisJICogYW5kIGlubGluZSBkYXRhIHZpZXdzLgorCSAqLworCWZvciAoaW5zdHJ1Y3Rpb25zID0gY3R4LT5pbnN0cnVjdGlvbnMuYnVmOworCSAgICAgaW5zdHJ1Y3Rpb25zICE9IGN0eC0+aW5zdHJ1Y3Rpb25zLmJ1ZiArIGN0eC0+aW5zdHJ1Y3Rpb25zLmxlbjsKKwkgICAgICkKKwkJaWYgKGV4ZWN1dGVfb25lX2luc3RydWN0aW9uKGN0eCwgJmluc3RydWN0aW9ucywgJmRhdGFfcG9zKSkKKwkJCXJldHVybiAtMTsKKwlpZiAoZGF0YV9wb3MgIT0gY3R4LT5kYXRhLmxlbikKKwkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGRlbHRhOiBkb2VzIG5vdCBjb3B5IGFsbCBpbmxpbmUgZGF0YSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGx5X29uZV93aW5kb3coc3RydWN0IGxpbmVfYnVmZmVyICpkZWx0YSwgb2ZmX3QgKmRlbHRhX2xlbiwKKwkJCSAgICBzdHJ1Y3Qgc2xpZGluZ192aWV3ICpwcmVpbWFnZSwgRklMRSAqb3V0KQoreworCWludCBydiA9IC0xOworCXN0cnVjdCB3aW5kb3cgY3R4ID0gV0lORE9XX0lOSVQocHJlaW1hZ2UpOworCXNpemVfdCBvdXRfbGVuOworCXNpemVfdCBpbnN0cnVjdGlvbnNfbGVuOworCXNpemVfdCBkYXRhX2xlbjsKKwlhc3NlcnQoZGVsdGFfbGVuKTsKKworCS8qICJzb3VyY2UgdmlldyIgb2Zmc2V0IGFuZCBsZW5ndGggYWxyZWFkeSBoYW5kbGVkOyAqLworCWlmIChyZWFkX2xlbmd0aChkZWx0YSwgJm91dF9sZW4sIGRlbHRhX2xlbikgfHwKKwkgICAgcmVhZF9sZW5ndGgoZGVsdGEsICZpbnN0cnVjdGlvbnNfbGVuLCBkZWx0YV9sZW4pIHx8CisJICAgIHJlYWRfbGVuZ3RoKGRlbHRhLCAmZGF0YV9sZW4sIGRlbHRhX2xlbikgfHwKKwkgICAgcmVhZF9jaHVuayhkZWx0YSwgZGVsdGFfbGVuLCAmY3R4Lmluc3RydWN0aW9ucywgaW5zdHJ1Y3Rpb25zX2xlbikgfHwKKwkgICAgcmVhZF9jaHVuayhkZWx0YSwgZGVsdGFfbGVuLCAmY3R4LmRhdGEsIGRhdGFfbGVuKSkKKwkJZ290byBlcnJvcl9vdXQ7CisJc3RyYnVmX2dyb3coJmN0eC5vdXQsIG91dF9sZW4pOworCWlmIChhcHBseV93aW5kb3dfaW5fY29yZSgmY3R4KSkKKwkJZ290byBlcnJvcl9vdXQ7CisJaWYgKGN0eC5vdXQubGVuICE9IG91dF9sZW4pIHsKKwkJcnYgPSBlcnJvcigiaW52YWxpZCBkZWx0YTogaW5jb3JyZWN0IHBvc3RpbWFnZSBsZW5ndGgiKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCWlmICh3cml0ZV9zdHJidWYoJmN0eC5vdXQsIG91dCkpCisJCWdvdG8gZXJyb3Jfb3V0OworCXJ2ID0gMDsKK2Vycm9yX291dDoKKwl3aW5kb3dfcmVsZWFzZSgmY3R4KTsKKwlyZXR1cm4gcnY7Cit9CisKK2ludCBzdm5kaWZmMF9hcHBseShzdHJ1Y3QgbGluZV9idWZmZXIgKmRlbHRhLCBvZmZfdCBkZWx0YV9sZW4sCisJCQlzdHJ1Y3Qgc2xpZGluZ192aWV3ICpwcmVpbWFnZSwgRklMRSAqcG9zdGltYWdlKQoreworCWFzc2VydChkZWx0YSAmJiBwcmVpbWFnZSAmJiBwb3N0aW1hZ2UgJiYgZGVsdGFfbGVuID49IDApOworCisJaWYgKHJlYWRfbWFnaWMoZGVsdGEsICZkZWx0YV9sZW4pKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKGRlbHRhX2xlbikgewkvKiBGb3IgZWFjaCB3aW5kb3c6ICovCisJCW9mZl90IHByZV9vZmYgPSAtMTsKKwkJc2l6ZV90IHByZV9sZW47CisKKwkJaWYgKHJlYWRfb2Zmc2V0KGRlbHRhLCAmcHJlX29mZiwgJmRlbHRhX2xlbikgfHwKKwkJICAgIHJlYWRfbGVuZ3RoKGRlbHRhLCAmcHJlX2xlbiwgJmRlbHRhX2xlbikgfHwKKwkJICAgIG1vdmVfd2luZG93KHByZWltYWdlLCBwcmVfb2ZmLCBwcmVfbGVuKSB8fAorCQkgICAgYXBwbHlfb25lX3dpbmRvdyhkZWx0YSwgJmRlbHRhX2xlbiwgcHJlaW1hZ2UsIHBvc3RpbWFnZSkpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zdm5kaWZmLmggYi92Y3Mtc3ZuL3N2bmRpZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjVkOTUwCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9zdm5kaWZmLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBTVk5ESUZGX0gKKyNkZWZpbmUgU1ZORElGRl9ICisKK3N0cnVjdCBsaW5lX2J1ZmZlcjsKK3N0cnVjdCBzbGlkaW5nX3ZpZXc7CisKK2ludCBzdm5kaWZmMF9hcHBseShzdHJ1Y3QgbGluZV9idWZmZXIgKmRlbHRhLCBvZmZfdCBkZWx0YV9sZW4sCisJCSAgIHN0cnVjdCBzbGlkaW5nX3ZpZXcgKnByZWltYWdlLCBGSUxFICpwb3N0aW1hZ2UpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Zjcy1zdm4vc3ZuZHVtcC5jIGIvdmNzLXN2bi9zdm5kdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkMTM2YgotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc3ZuZHVtcC5jCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICogUGFyc2UgYW5kIHJlYXJyYW5nZSBhIHN2bmFkbWluIGR1bXAuCisgKiBDcmVhdGUgdGhlIGR1bXAgd2l0aDoKKyAqIHN2bmFkbWluIGR1bXAgLS1pbmNyZW1lbnRhbCAtcjxzdGFydHJldj46PGVuZHJldj4gPHJlcG9zaXRvcnk+ID5vdXRmaWxlCisgKgorICogTGljZW5zZWQgdW5kZXIgYSB0d28tY2xhdXNlIEJTRC1zdHlsZSBsaWNlbnNlLgorICogU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZmFzdF9leHBvcnQuaCIKKyNpbmNsdWRlICJsaW5lX2J1ZmZlci5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN2bmR1bXAuaCIKKworLyoKKyAqIENvbXBhcmUgc3RhcnQgb2Ygc3RyaW5nIHRvIGxpdGVyYWwgb2YgZXF1YWwgbGVuZ3RoOworICogbXVzdCBiZSBndWFyZGVkIGJ5IGxlbmd0aCB0ZXN0LgorICovCisjZGVmaW5lIGNvbnN0Y21wKHMsIHJlZikgbWVtY21wKHMsIHJlZiwgc2l6ZW9mKHJlZikgLSAxKQorCisjZGVmaW5lIFJFUE9SVF9GSUxFTk8gMworCisjZGVmaW5lIE5PREVBQ1RfUkVQTEFDRSA0CisjZGVmaW5lIE5PREVBQ1RfREVMRVRFIDMKKyNkZWZpbmUgTk9ERUFDVF9BREQgMgorI2RlZmluZSBOT0RFQUNUX0NIQU5HRSAxCisjZGVmaW5lIE5PREVBQ1RfVU5LTk9XTiAwCisKKy8qIFN0YXRlczogKi8KKyNkZWZpbmUgRFVNUF9DVFggMAkvKiBkdW1wIG1ldGFkYXRhICovCisjZGVmaW5lIFJFVl9DVFggIDEJLyogcmV2aXNpb24gbWV0YWRhdGEgKi8KKyNkZWZpbmUgTk9ERV9DVFggMgkvKiBub2RlIG1ldGFkYXRhICovCisjZGVmaW5lIElOVEVSTk9ERV9DVFggMwkvKiBiZXR3ZWVuIG5vZGVzICovCisKKyNkZWZpbmUgREFURV9SRkMyODIyX0xFTiAzMQorCitzdGF0aWMgc3RydWN0IGxpbmVfYnVmZmVyIGlucHV0ID0gTElORV9CVUZGRVJfSU5JVDsKKworc3RhdGljIHN0cnVjdCB7CisJdWludDMyX3QgYWN0aW9uLCBzcmNSZXYsIHR5cGU7CisJb2ZmX3QgcHJvcF9sZW5ndGgsIHRleHRfbGVuZ3RoOworCXN0cnVjdCBzdHJidWYgc3JjLCBkc3Q7CisJdWludDMyX3QgdGV4dF9kZWx0YSwgcHJvcF9kZWx0YTsKK30gbm9kZV9jdHg7CisKK3N0YXRpYyBzdHJ1Y3QgeworCXVpbnQzMl90IHJldmlzaW9uOworCXRpbWVzdGFtcF90IHRpbWVzdGFtcDsKKwlzdHJ1Y3Qgc3RyYnVmIGxvZywgYXV0aG9yLCBub3RlOworfSByZXZfY3R4OworCitzdGF0aWMgc3RydWN0IHsKKwl1aW50MzJfdCB2ZXJzaW9uOworCXN0cnVjdCBzdHJidWYgdXVpZCwgdXJsOworfSBkdW1wX2N0eDsKKworc3RhdGljIHZvaWQgcmVzZXRfbm9kZV9jdHgoY2hhciAqZm5hbWUpCit7CisJbm9kZV9jdHgudHlwZSA9IDA7CisJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9VTktOT1dOOworCW5vZGVfY3R4LnByb3BfbGVuZ3RoID0gLTE7CisJbm9kZV9jdHgudGV4dF9sZW5ndGggPSAtMTsKKwlzdHJidWZfcmVzZXQoJm5vZGVfY3R4LnNyYyk7CisJbm9kZV9jdHguc3JjUmV2ID0gMDsKKwlzdHJidWZfcmVzZXQoJm5vZGVfY3R4LmRzdCk7CisJaWYgKGZuYW1lKQorCQlzdHJidWZfYWRkc3RyKCZub2RlX2N0eC5kc3QsIGZuYW1lKTsKKwlub2RlX2N0eC50ZXh0X2RlbHRhID0gMDsKKwlub2RlX2N0eC5wcm9wX2RlbHRhID0gMDsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfcmV2X2N0eCh1aW50MzJfdCByZXZpc2lvbikKK3sKKwlyZXZfY3R4LnJldmlzaW9uID0gcmV2aXNpb247CisJcmV2X2N0eC50aW1lc3RhbXAgPSAwOworCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5sb2cpOworCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5hdXRob3IpOworCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5ub3RlKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfZHVtcF9jdHgoY29uc3QgY2hhciAqdXJsKQoreworCXN0cmJ1Zl9yZXNldCgmZHVtcF9jdHgudXJsKTsKKwlpZiAodXJsKQorCQlzdHJidWZfYWRkc3RyKCZkdW1wX2N0eC51cmwsIHVybCk7CisJZHVtcF9jdHgudmVyc2lvbiA9IDE7CisJc3RyYnVmX3Jlc2V0KCZkdW1wX2N0eC51dWlkKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBzdHJidWYgKmtleV9idWYsCisJCQkJc3RydWN0IHN0cmJ1ZiAqdmFsLAorCQkJCXVpbnQzMl90ICp0eXBlX3NldCkKK3sKKwljb25zdCBjaGFyICprZXkgPSBrZXlfYnVmLT5idWY7CisJc2l6ZV90IGtleWxlbiA9IGtleV9idWYtPmxlbjsKKworCXN3aXRjaCAoa2V5bGVuICsgMSkgeworCWNhc2Ugc2l6ZW9mKCJzdm46bG9nIik6CisJCWlmIChjb25zdGNtcChrZXksICJzdm46bG9nIikpCisJCQlicmVhazsKKwkJaWYgKCF2YWwpCisJCQlkaWUoImludmFsaWQgZHVtcDogdW5zZXRzIHN2bjpsb2ciKTsKKwkJc3RyYnVmX3N3YXAoJnJldl9jdHgubG9nLCB2YWwpOworCQlicmVhazsKKwljYXNlIHNpemVvZigic3ZuOmF1dGhvciIpOgorCQlpZiAoY29uc3RjbXAoa2V5LCAic3ZuOmF1dGhvciIpKQorCQkJYnJlYWs7CisJCWlmICghdmFsKQorCQkJc3RyYnVmX3Jlc2V0KCZyZXZfY3R4LmF1dGhvcik7CisJCWVsc2UKKwkJCXN0cmJ1Zl9zd2FwKCZyZXZfY3R4LmF1dGhvciwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBzaXplb2YoInN2bjpkYXRlIik6CisJCWlmIChjb25zdGNtcChrZXksICJzdm46ZGF0ZSIpKQorCQkJYnJlYWs7CisJCWlmICghdmFsKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IHVuc2V0cyBzdm46ZGF0ZSIpOworCQlpZiAocGFyc2VfZGF0ZV9iYXNpYyh2YWwtPmJ1ZiwgJnJldl9jdHgudGltZXN0YW1wLCBOVUxMKSkKKwkJCXdhcm5pbmcoImludmFsaWQgdGltZXN0YW1wOiAlcyIsIHZhbC0+YnVmKTsKKwkJYnJlYWs7CisJY2FzZSBzaXplb2YoInN2bjpleGVjdXRhYmxlIik6CisJY2FzZSBzaXplb2YoInN2bjpzcGVjaWFsIik6CisJCWlmIChrZXlsZW4gPT0gc3RybGVuKCJzdm46ZXhlY3V0YWJsZSIpICYmCisJCSAgICBjb25zdGNtcChrZXksICJzdm46ZXhlY3V0YWJsZSIpKQorCQkJYnJlYWs7CisJCWlmIChrZXlsZW4gPT0gc3RybGVuKCJzdm46c3BlY2lhbCIpICYmCisJCSAgICBjb25zdGNtcChrZXksICJzdm46c3BlY2lhbCIpKQorCQkJYnJlYWs7CisJCWlmICgqdHlwZV9zZXQpIHsKKwkJCWlmICghdmFsKQorCQkJCXJldHVybjsKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBzZXRzIHR5cGUgdHdpY2UiKTsKKwkJfQorCQlpZiAoIXZhbCkgeworCQkJbm9kZV9jdHgudHlwZSA9IFNfSUZSRUcgfCAwNjQ0OworCQkJcmV0dXJuOworCQl9CisJCSp0eXBlX3NldCA9IDE7CisJCW5vZGVfY3R4LnR5cGUgPSBrZXlsZW4gPT0gc3RybGVuKCJzdm46ZXhlY3V0YWJsZSIpID8KKwkJCQkoU19JRlJFRyB8IDA3NTUpIDoKKwkJCQlTX0lGTE5LOworCX0KK30KKworc3RhdGljIHZvaWQgZGllX3Nob3J0X3JlYWQodm9pZCkKK3sKKwlpZiAoYnVmZmVyX2ZlcnJvcigmaW5wdXQpKQorCQlkaWVfZXJybm8oImVycm9yIHJlYWRpbmcgZHVtcCBmaWxlIik7CisJZGllKCJpbnZhbGlkIGR1bXA6IHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9wcm9wcyh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGtleSA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHZhbCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnQ7CisJLyoKKwkgKiBORUVEU1dPUks6IHRvIHN1cHBvcnQgc2ltcGxlIG1vZGUgY2hhbmdlcyBsaWtlCisJICoJSyAxMQorCSAqCXN2bjpzcGVjaWFsCisJICoJViAxCisJICoJKgorCSAqCUQgMTQKKwkgKglzdm46ZXhlY3V0YWJsZQorCSAqIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBhIG1vZGUgaGFzIGJlZW4gc2V0IGFuZCByZXNldCB0bworCSAqIHBsYWluIGZpbGUgb25seSBpZiBub3QuICBXZSBzaG91bGQgYmUga2VlcGluZyB0cmFjayBvZiB0aGUKKwkgKiBzeW1saW5rIGFuZCBleGVjdXRhYmxlIGJpdHMgc2VwYXJhdGVseSBpbnN0ZWFkLgorCSAqLworCXVpbnQzMl90IHR5cGVfc2V0ID0gMDsKKwl3aGlsZSAoKHQgPSBidWZmZXJfcmVhZF9saW5lKCZpbnB1dCkpICYmIHN0cmNtcCh0LCAiUFJPUFMtRU5EIikpIHsKKwkJdWludDMyX3QgbGVuOworCQljb25zdCBjaGFyIHR5cGUgPSB0WzBdOworCQlpbnQgY2g7CisKKwkJaWYgKCF0eXBlIHx8IHRbMV0gIT0gJyAnKQorCQkJZGllKCJpbnZhbGlkIHByb3BlcnR5IGxpbmU6ICVzIiwgdCk7CisJCWxlbiA9IGF0b2koJnRbMl0pOworCQlzdHJidWZfcmVzZXQoJnZhbCk7CisJCWJ1ZmZlcl9yZWFkX2JpbmFyeSgmaW5wdXQsICZ2YWwsIGxlbik7CisJCWlmICh2YWwubGVuIDwgbGVuKQorCQkJZGllX3Nob3J0X3JlYWQoKTsKKworCQkvKiBEaXNjYXJkIHRyYWlsaW5nIG5ld2xpbmUuICovCisJCWNoID0gYnVmZmVyX3JlYWRfY2hhcigmaW5wdXQpOworCQlpZiAoY2ggPT0gRU9GKQorCQkJZGllX3Nob3J0X3JlYWQoKTsKKwkJaWYgKGNoICE9ICdcbicpCisJCQlkaWUoImludmFsaWQgZHVtcDogZXhwZWN0ZWQgbmV3bGluZSBhZnRlciAlcyIsIHZhbC5idWYpOworCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlICdLJzoKKwkJCXN0cmJ1Zl9zd2FwKCZrZXksICZ2YWwpOworCQkJY29udGludWU7CisJCWNhc2UgJ0QnOgorCQkJaGFuZGxlX3Byb3BlcnR5KCZ2YWwsIE5VTEwsICZ0eXBlX3NldCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnVic6CisJCQloYW5kbGVfcHJvcGVydHkoJmtleSwgJnZhbCwgJnR5cGVfc2V0KTsKKwkJCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJZGllKCJpbnZhbGlkIHByb3BlcnR5IGxpbmU6ICVzIiwgdCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9ub2RlKHZvaWQpCit7CisJY29uc3QgdWludDMyX3QgdHlwZSA9IG5vZGVfY3R4LnR5cGU7CisJY29uc3QgaW50IGhhdmVfcHJvcHMgPSBub2RlX2N0eC5wcm9wX2xlbmd0aCAhPSAtMTsKKwljb25zdCBpbnQgaGF2ZV90ZXh0ID0gbm9kZV9jdHgudGV4dF9sZW5ndGggIT0gLTE7CisJLyoKKwkgKiBPbGQgdGV4dCBmb3IgdGhpcyBub2RlOgorCSAqICBOVUxMCS0gZGlyZWN0b3J5IG9yIGJ1ZworCSAqICBlbXB0eV9ibG9iCS0gZW1wdHkKKwkgKiAgIjxkYXRhcmVmPiIJLSBkYXRhIHJldHJpZXZhYmxlIGZyb20gZmFzdC1pbXBvcnQKKwkgKi8KKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZW1wdHlfYmxvYiA9ICI6OmVtcHR5OjoiOworCWNvbnN0IGNoYXIgKm9sZF9kYXRhID0gTlVMTDsKKwl1aW50MzJfdCBvbGRfbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCisJaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX0RFTEVURSkgeworCQlpZiAoaGF2ZV90ZXh0IHx8IGhhdmVfcHJvcHMgfHwgbm9kZV9jdHguc3JjUmV2KQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IGRlbGV0aW9uIG5vZGUgaGFzICIKKwkJCQkiY29weWZyb20gaW5mbywgdGV4dCwgb3IgcHJvcGVydGllcyIpOworCQlmYXN0X2V4cG9ydF9kZWxldGUobm9kZV9jdHguZHN0LmJ1Zik7CisJCXJldHVybjsKKwl9CisJaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX1JFUExBQ0UpIHsKKwkJZmFzdF9leHBvcnRfZGVsZXRlKG5vZGVfY3R4LmRzdC5idWYpOworCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX0FERDsKKwl9CisJaWYgKG5vZGVfY3R4LnNyY1JldikgeworCQlmYXN0X2V4cG9ydF9jb3B5KG5vZGVfY3R4LnNyY1Jldiwgbm9kZV9jdHguc3JjLmJ1Ziwgbm9kZV9jdHguZHN0LmJ1Zik7CisJCWlmIChub2RlX2N0eC5hY3Rpb24gPT0gTk9ERUFDVF9BREQpCisJCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX0NIQU5HRTsKKwl9CisJaWYgKGhhdmVfdGV4dCAmJiB0eXBlID09IFNfSUZESVIpCisJCWRpZSgiaW52YWxpZCBkdW1wOiBkaXJlY3RvcmllcyBjYW5ub3QgaGF2ZSB0ZXh0IGF0dGFjaGVkIik7CisKKwkvKgorCSAqIEZpbmQgb2xkIGNvbnRlbnQgKG9sZF9kYXRhKSBhbmQgZGVjaWRlIG9uIHRoZSBuZXcgbW9kZS4KKwkgKi8KKwlpZiAobm9kZV9jdHguYWN0aW9uID09IE5PREVBQ1RfQ0hBTkdFICYmICEqbm9kZV9jdHguZHN0LmJ1ZikgeworCQlpZiAodHlwZSAhPSBTX0lGRElSKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IHJvb3Qgb2YgdHJlZSBpcyBub3QgYSByZWd1bGFyIGZpbGUiKTsKKwkJb2xkX2RhdGEgPSBOVUxMOworCX0gZWxzZSBpZiAobm9kZV9jdHguYWN0aW9uID09IE5PREVBQ1RfQ0hBTkdFKSB7CisJCXVpbnQzMl90IG1vZGU7CisJCW9sZF9kYXRhID0gZmFzdF9leHBvcnRfcmVhZF9wYXRoKG5vZGVfY3R4LmRzdC5idWYsICZtb2RlKTsKKwkJaWYgKG1vZGUgPT0gU19JRkRJUiAmJiB0eXBlICE9IFNfSUZESVIpCisJCQlkaWUoImludmFsaWQgZHVtcDogY2Fubm90IG1vZGlmeSBhIGRpcmVjdG9yeSBpbnRvIGEgZmlsZSIpOworCQlpZiAobW9kZSAhPSBTX0lGRElSICYmIHR5cGUgPT0gU19JRkRJUikKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBjYW5ub3QgbW9kaWZ5IGEgZmlsZSBpbnRvIGEgZGlyZWN0b3J5Iik7CisJCW5vZGVfY3R4LnR5cGUgPSBtb2RlOworCQlvbGRfbW9kZSA9IG1vZGU7CisJfSBlbHNlIGlmIChub2RlX2N0eC5hY3Rpb24gPT0gTk9ERUFDVF9BREQpIHsKKwkJaWYgKHR5cGUgPT0gU19JRkRJUikKKwkJCW9sZF9kYXRhID0gTlVMTDsKKwkJZWxzZSBpZiAoaGF2ZV90ZXh0KQorCQkJb2xkX2RhdGEgPSBlbXB0eV9ibG9iOworCQllbHNlCisJCQlkaWUoImludmFsaWQgZHVtcDogYWRkcyBub2RlIHdpdGhvdXQgdGV4dCIpOworCX0gZWxzZSB7CisJCWRpZSgiaW52YWxpZCBkdW1wOiBOb2RlLXBhdGggYmxvY2sgbGFja3MgTm9kZS1hY3Rpb24iKTsKKwl9CisKKwkvKgorCSAqIEFkanVzdCBtb2RlIHRvIHJlZmxlY3QgcHJvcGVydGllcy4KKwkgKi8KKwlpZiAoaGF2ZV9wcm9wcykgeworCQlpZiAoIW5vZGVfY3R4LnByb3BfZGVsdGEpCisJCQlub2RlX2N0eC50eXBlID0gdHlwZTsKKwkJaWYgKG5vZGVfY3R4LnByb3BfbGVuZ3RoKQorCQkJcmVhZF9wcm9wcygpOworCX0KKworCS8qCisJICogU2F2ZSB0aGUgcmVzdWx0LgorCSAqLworCWlmICh0eXBlID09IFNfSUZESVIpCS8qIGRpcmVjdG9yaWVzIGFyZSBub3QgdHJhY2tlZC4gKi8KKwkJcmV0dXJuOworCWFzc2VydChvbGRfZGF0YSk7CisJaWYgKG9sZF9kYXRhID09IGVtcHR5X2Jsb2IpCisJCS8qIEZvciB0aGUgZmFzdF9leHBvcnRfKiBmdW5jdGlvbnMsIE5VTEwgbWVhbnMgZW1wdHkuICovCisJCW9sZF9kYXRhID0gTlVMTDsKKwlpZiAoIWhhdmVfdGV4dCkgeworCQlmYXN0X2V4cG9ydF9tb2RpZnkobm9kZV9jdHguZHN0LmJ1Ziwgbm9kZV9jdHgudHlwZSwgb2xkX2RhdGEpOworCQlyZXR1cm47CisJfQorCWlmICghbm9kZV9jdHgudGV4dF9kZWx0YSkgeworCQlmYXN0X2V4cG9ydF9tb2RpZnkobm9kZV9jdHguZHN0LmJ1Ziwgbm9kZV9jdHgudHlwZSwgImlubGluZSIpOworCQlmYXN0X2V4cG9ydF9kYXRhKG5vZGVfY3R4LnR5cGUsIG5vZGVfY3R4LnRleHRfbGVuZ3RoLCAmaW5wdXQpOworCQlyZXR1cm47CisJfQorCWZhc3RfZXhwb3J0X21vZGlmeShub2RlX2N0eC5kc3QuYnVmLCBub2RlX2N0eC50eXBlLCAiaW5saW5lIik7CisJZmFzdF9leHBvcnRfYmxvYl9kZWx0YShub2RlX2N0eC50eXBlLCBvbGRfbW9kZSwgb2xkX2RhdGEsCisJCQkJbm9kZV9jdHgudGV4dF9sZW5ndGgsICZpbnB1dCk7Cit9CisKK3N0YXRpYyB2b2lkIGJlZ2luX3JldmlzaW9uKGNvbnN0IGNoYXIgKnJlbW90ZV9yZWYpCit7CisJaWYgKCFyZXZfY3R4LnJldmlzaW9uKQkvKiByZXZpc2lvbiAwIGdldHMgbm8gZ2l0IGNvbW1pdC4gKi8KKwkJcmV0dXJuOworCWZhc3RfZXhwb3J0X2JlZ2luX2NvbW1pdChyZXZfY3R4LnJldmlzaW9uLCByZXZfY3R4LmF1dGhvci5idWYsCisJCSZyZXZfY3R4LmxvZywgZHVtcF9jdHgudXVpZC5idWYsIGR1bXBfY3R4LnVybC5idWYsCisJCXJldl9jdHgudGltZXN0YW1wLCByZW1vdGVfcmVmKTsKK30KKworc3RhdGljIHZvaWQgZW5kX3JldmlzaW9uKGNvbnN0IGNoYXIgKm5vdGVfcmVmKQoreworCXN0cnVjdCBzdHJidWYgbWFyayA9IFNUUkJVRl9JTklUOworCWlmIChyZXZfY3R4LnJldmlzaW9uKSB7CisJCWZhc3RfZXhwb3J0X2VuZF9jb21taXQocmV2X2N0eC5yZXZpc2lvbik7CisJCWZhc3RfZXhwb3J0X2JlZ2luX25vdGUocmV2X2N0eC5yZXZpc2lvbiwgInJlbW90ZS1zdm4iLAorCQkJCSJOb3RlIGNyZWF0ZWQgYnkgcmVtb3RlLXN2bi4iLCByZXZfY3R4LnRpbWVzdGFtcCwgbm90ZV9yZWYpOworCQlzdHJidWZfYWRkZigmbWFyaywgIjolIlBSSXUzMiwgcmV2X2N0eC5yZXZpc2lvbik7CisJCWZhc3RfZXhwb3J0X25vdGUobWFyay5idWYsICJpbmxpbmUiKTsKKwkJZmFzdF9leHBvcnRfYnVmX3RvX2RhdGEoJnJldl9jdHgubm90ZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtYXJrKTsKKwl9Cit9CisKK3ZvaWQgc3ZuZHVtcF9yZWFkKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqbG9jYWxfcmVmLCBjb25zdCBjaGFyICpub3Rlc19yZWYpCit7CisJY2hhciAqdmFsOworCWNoYXIgKnQ7CisJdWludDMyX3QgYWN0aXZlX2N0eCA9IERVTVBfQ1RYOworCXVpbnQzMl90IGxlbjsKKworCXJlc2V0X2R1bXBfY3R4KHVybCk7CisJd2hpbGUgKCh0ID0gYnVmZmVyX3JlYWRfbGluZSgmaW5wdXQpKSkgeworCQl2YWwgPSBzdHJjaHIodCwgJzonKTsKKwkJaWYgKCF2YWwpCisJCQljb250aW51ZTsKKwkJdmFsKys7CisJCWlmICgqdmFsICE9ICcgJykKKwkJCWNvbnRpbnVlOworCQl2YWwrKzsKKworCQkvKiBzdHJsZW4oa2V5KSArIDEgKi8KKwkJc3dpdGNoICh2YWwgLSB0IC0gMSkgeworCQljYXNlIHNpemVvZigiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb24iKToKKwkJCWlmIChjb25zdGNtcCh0LCAiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb24iKSkKKwkJCQljb250aW51ZTsKKwkJCWR1bXBfY3R4LnZlcnNpb24gPSBhdG9pKHZhbCk7CisJCQlpZiAoZHVtcF9jdHgudmVyc2lvbiA+IDMpCisJCQkJZGllKCJleHBlY3RlZCBzdm4gZHVtcCBmb3JtYXQgdmVyc2lvbiA8PSAzLCBmb3VuZCAlIlBSSXUzMiwKKwkJCQkgICAgZHVtcF9jdHgudmVyc2lvbik7CisJCQlicmVhazsKKwkJY2FzZSBzaXplb2YoIlVVSUQiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiVVVJRCIpKQorCQkJCWNvbnRpbnVlOworCQkJc3RyYnVmX3Jlc2V0KCZkdW1wX2N0eC51dWlkKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmR1bXBfY3R4LnV1aWQsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBzaXplb2YoIlJldmlzaW9uLW51bWJlciIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJSZXZpc2lvbi1udW1iZXIiKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChhY3RpdmVfY3R4ID09IE5PREVfQ1RYKQorCQkJCWhhbmRsZV9ub2RlKCk7CisJCQlpZiAoYWN0aXZlX2N0eCA9PSBSRVZfQ1RYKQorCQkJCWJlZ2luX3JldmlzaW9uKGxvY2FsX3JlZik7CisJCQlpZiAoYWN0aXZlX2N0eCAhPSBEVU1QX0NUWCkKKwkJCQllbmRfcmV2aXNpb24obm90ZXNfcmVmKTsKKwkJCWFjdGl2ZV9jdHggPSBSRVZfQ1RYOworCQkJcmVzZXRfcmV2X2N0eChhdG9pKHZhbCkpOworCQkJc3RyYnVmX2FkZGYoJnJldl9jdHgubm90ZSwgIiVzXG4iLCB0KTsKKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiTm9kZS1wYXRoIik6CisJCQlpZiAoY29uc3RjbXAodCwgIk5vZGUtIikpCisJCQkJY29udGludWU7CisJCQlpZiAoIWNvbnN0Y21wKHQgKyBzdHJsZW4oIk5vZGUtIiksICJwYXRoIikpIHsKKwkJCQlpZiAoYWN0aXZlX2N0eCA9PSBOT0RFX0NUWCkKKwkJCQkJaGFuZGxlX25vZGUoKTsKKwkJCQlpZiAoYWN0aXZlX2N0eCA9PSBSRVZfQ1RYKQorCQkJCQliZWdpbl9yZXZpc2lvbihsb2NhbF9yZWYpOworCQkJCWFjdGl2ZV9jdHggPSBOT0RFX0NUWDsKKwkJCQlyZXNldF9ub2RlX2N0eCh2YWwpOworCQkJCXN0cmJ1Zl9hZGRmKCZyZXZfY3R4Lm5vdGUsICIlc1xuIiwgdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY29uc3RjbXAodCArIHN0cmxlbigiTm9kZS0iKSwgImtpbmQiKSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmJ1Zl9hZGRmKCZyZXZfY3R4Lm5vdGUsICIlc1xuIiwgdCk7CisJCQlpZiAoIXN0cmNtcCh2YWwsICJkaXIiKSkKKwkJCQlub2RlX2N0eC50eXBlID0gU19JRkRJUjsKKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsLCAiZmlsZSIpKQorCQkJCW5vZGVfY3R4LnR5cGUgPSBTX0lGUkVHIHwgMDY0NDsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gbm9kZS1raW5kOiAlc1xuIiwgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiTm9kZS1hY3Rpb24iKToKKwkJCWlmIChjb25zdGNtcCh0LCAiTm9kZS1hY3Rpb24iKSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmJ1Zl9hZGRmKCZyZXZfY3R4Lm5vdGUsICIlc1xuIiwgdCk7CisJCQlpZiAoIXN0cmNtcCh2YWwsICJkZWxldGUiKSkgeworCQkJCW5vZGVfY3R4LmFjdGlvbiA9IE5PREVBQ1RfREVMRVRFOworCQkJfSBlbHNlIGlmICghc3RyY21wKHZhbCwgImFkZCIpKSB7CisJCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9BREQ7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAodmFsLCAiY2hhbmdlIikpIHsKKwkJCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX0NIQU5HRTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWwsICJyZXBsYWNlIikpIHsKKwkJCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX1JFUExBQ0U7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBub2RlLWFjdGlvbjogJXNcbiIsIHZhbCk7CisJCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9VTktOT1dOOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJOb2RlLWNvcHlmcm9tLXBhdGgiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiTm9kZS1jb3B5ZnJvbS1wYXRoIikpCisJCQkJY29udGludWU7CisJCQlzdHJidWZfcmVzZXQoJm5vZGVfY3R4LnNyYyk7CisJCQlzdHJidWZfYWRkc3RyKCZub2RlX2N0eC5zcmMsIHZhbCk7CisJCQlzdHJidWZfYWRkZigmcmV2X2N0eC5ub3RlLCAiJXNcbiIsIHQpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJOb2RlLWNvcHlmcm9tLXJldiIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJOb2RlLWNvcHlmcm9tLXJldiIpKQorCQkJCWNvbnRpbnVlOworCQkJbm9kZV9jdHguc3JjUmV2ID0gYXRvaSh2YWwpOworCQkJc3RyYnVmX2FkZGYoJnJldl9jdHgubm90ZSwgIiVzXG4iLCB0KTsKKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiVGV4dC1jb250ZW50LWxlbmd0aCIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJUZXh0IikgJiYgY29uc3RjbXAodCwgIlByb3AiKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChjb25zdGNtcCh0ICsgNCwgIi1jb250ZW50LWxlbmd0aCIpKQorCQkJCWNvbnRpbnVlOworCQkJeworCQkJCWNoYXIgKmVuZDsKKwkJCQl1aW50bWF4X3QgbGVuOworCisJCQkJbGVuID0gc3RydG91bWF4KHZhbCwgJmVuZCwgMTApOworCQkJCWlmICghaXNkaWdpdCgqdmFsKSB8fCAqZW5kKQorCQkJCQlkaWUoImludmFsaWQgZHVtcDogbm9uLW51bWVyaWMgbGVuZ3RoICVzIiwgdmFsKTsKKwkJCQlpZiAobGVuID4gbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShvZmZfdCkpCisJCQkJCWRpZSgidW5yZXByZXNlbnRhYmxlIGxlbmd0aCBpbiBkdW1wOiAlcyIsIHZhbCk7CisKKwkJCQlpZiAoKnQgPT0gJ1QnKQorCQkJCQlub2RlX2N0eC50ZXh0X2xlbmd0aCA9IChvZmZfdCkgbGVuOworCQkJCWVsc2UKKwkJCQkJbm9kZV9jdHgucHJvcF9sZW5ndGggPSAob2ZmX3QpIGxlbjsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBzaXplb2YoIlRleHQtZGVsdGEiKToKKwkJCWlmICghY29uc3RjbXAodCwgIlRleHQtZGVsdGEiKSkgeworCQkJCW5vZGVfY3R4LnRleHRfZGVsdGEgPSAhc3RyY21wKHZhbCwgInRydWUiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjb25zdGNtcCh0LCAiUHJvcC1kZWx0YSIpKQorCQkJCWNvbnRpbnVlOworCQkJbm9kZV9jdHgucHJvcF9kZWx0YSA9ICFzdHJjbXAodmFsLCAidHJ1ZSIpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJDb250ZW50LWxlbmd0aCIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJDb250ZW50LWxlbmd0aCIpKQorCQkJCWNvbnRpbnVlOworCQkJbGVuID0gYXRvaSh2YWwpOworCQkJdCA9IGJ1ZmZlcl9yZWFkX2xpbmUoJmlucHV0KTsKKwkJCWlmICghdCkKKwkJCQlkaWVfc2hvcnRfcmVhZCgpOworCQkJaWYgKCp0KQorCQkJCWRpZSgiaW52YWxpZCBkdW1wOiBleHBlY3RlZCBibGFuayBsaW5lIGFmdGVyIGNvbnRlbnQgbGVuZ3RoIGhlYWRlciIpOworCQkJaWYgKGFjdGl2ZV9jdHggPT0gUkVWX0NUWCkgeworCQkJCXJlYWRfcHJvcHMoKTsKKwkJCX0gZWxzZSBpZiAoYWN0aXZlX2N0eCA9PSBOT0RFX0NUWCkgeworCQkJCWhhbmRsZV9ub2RlKCk7CisJCQkJYWN0aXZlX2N0eCA9IElOVEVSTk9ERV9DVFg7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiVW5leHBlY3RlZCBjb250ZW50IGxlbmd0aCBoZWFkZXI6ICUiUFJJdTMyIlxuIiwgbGVuKTsKKwkJCQlpZiAoYnVmZmVyX3NraXBfYnl0ZXMoJmlucHV0LCBsZW4pICE9IGxlbikKKwkJCQkJZGllX3Nob3J0X3JlYWQoKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYnVmZmVyX2ZlcnJvcigmaW5wdXQpKQorCQlkaWVfc2hvcnRfcmVhZCgpOworCWlmIChhY3RpdmVfY3R4ID09IE5PREVfQ1RYKQorCQloYW5kbGVfbm9kZSgpOworCWlmIChhY3RpdmVfY3R4ID09IFJFVl9DVFgpCisJCWJlZ2luX3JldmlzaW9uKGxvY2FsX3JlZik7CisJaWYgKGFjdGl2ZV9jdHggIT0gRFVNUF9DVFgpCisJCWVuZF9yZXZpc2lvbihub3Rlc19yZWYpOworfQorCitzdGF0aWMgdm9pZCBpbml0KGludCByZXBvcnRfZmQpCit7CisJZmFzdF9leHBvcnRfaW5pdChyZXBvcnRfZmQpOworCXN0cmJ1Zl9pbml0KCZkdW1wX2N0eC51dWlkLCA0MDk2KTsKKwlzdHJidWZfaW5pdCgmZHVtcF9jdHgudXJsLCA0MDk2KTsKKwlzdHJidWZfaW5pdCgmcmV2X2N0eC5sb2csIDQwOTYpOworCXN0cmJ1Zl9pbml0KCZyZXZfY3R4LmF1dGhvciwgNDA5Nik7CisJc3RyYnVmX2luaXQoJnJldl9jdHgubm90ZSwgNDA5Nik7CisJc3RyYnVmX2luaXQoJm5vZGVfY3R4LnNyYywgNDA5Nik7CisJc3RyYnVmX2luaXQoJm5vZGVfY3R4LmRzdCwgNDA5Nik7CisJcmVzZXRfZHVtcF9jdHgoTlVMTCk7CisJcmVzZXRfcmV2X2N0eCgwKTsKKwlyZXNldF9ub2RlX2N0eChOVUxMKTsKKwlyZXR1cm47Cit9CisKK2ludCBzdm5kdW1wX2luaXQoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaWYgKGJ1ZmZlcl9pbml0KCZpbnB1dCwgZmlsZW5hbWUpKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oImNhbm5vdCBvcGVuICVzIiwgZmlsZW5hbWUgPyBmaWxlbmFtZSA6ICJOVUxMIik7CisJaW5pdChSRVBPUlRfRklMRU5PKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHN2bmR1bXBfaW5pdF9mZChpbnQgaW5fZmQsIGludCBiYWNrX2ZkKQoreworCWlmKGJ1ZmZlcl9mZGluaXQoJmlucHV0LCB4ZHVwKGluX2ZkKSkpCisJCXJldHVybiBlcnJvcl9lcnJubygiY2Fubm90IG9wZW4gZmQgJWQiLCBpbl9mZCk7CisJaW5pdCh4ZHVwKGJhY2tfZmQpKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdm5kdW1wX2RlaW5pdCh2b2lkKQoreworCWZhc3RfZXhwb3J0X2RlaW5pdCgpOworCXJlc2V0X2R1bXBfY3R4KE5VTEwpOworCXJlc2V0X3Jldl9jdHgoMCk7CisJcmVzZXRfbm9kZV9jdHgoTlVMTCk7CisJc3RyYnVmX3JlbGVhc2UoJnJldl9jdHgubG9nKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2X2N0eC5hdXRob3IpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZXZfY3R4Lm5vdGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZub2RlX2N0eC5zcmMpOworCXN0cmJ1Zl9yZWxlYXNlKCZub2RlX2N0eC5kc3QpOworCWlmIChidWZmZXJfZGVpbml0KCZpbnB1dCkpCisJCWZwcmludGYoc3RkZXJyLCAiSW5wdXQgZXJyb3JcbiIpOworCWlmIChmZXJyb3Ioc3Rkb3V0KSkKKwkJZnByaW50ZihzdGRlcnIsICJPdXRwdXQgZXJyb3JcbiIpOworfQorCit2b2lkIHN2bmR1bXBfcmVzZXQodm9pZCkKK3sKKwlzdHJidWZfcmVsZWFzZSgmZHVtcF9jdHgudXVpZCk7CisJc3RyYnVmX3JlbGVhc2UoJmR1bXBfY3R4LnVybCk7CisJc3RyYnVmX3JlbGVhc2UoJnJldl9jdHgubG9nKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2X2N0eC5hdXRob3IpOworfQpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zdm5kdW1wLmggYi92Y3Mtc3ZuL3N2bmR1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZhZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9zdm5kdW1wLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBTVk5EVU1QX0gKKyNkZWZpbmUgU1ZORFVNUF9ICisKK2ludCBzdm5kdW1wX2luaXQoY29uc3QgY2hhciAqZmlsZW5hbWUpOworaW50IHN2bmR1bXBfaW5pdF9mZChpbnQgaW5fZmQsIGludCBiYWNrX2ZkKTsKK3ZvaWQgc3ZuZHVtcF9yZWFkKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqbG9jYWxfcmVmLCBjb25zdCBjaGFyICpub3Rlc19yZWYpOwordm9pZCBzdm5kdW1wX2RlaW5pdCh2b2lkKTsKK3ZvaWQgc3ZuZHVtcF9yZXNldCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS92ZXJzaW9uLmMgYi92ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiNzE4YwotLS0gL2Rldi9udWxsCisrKyBiL3ZlcnNpb24uYwpAQCAtMCwwICsxLDM5IEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitjb25zdCBjaGFyIGdpdF92ZXJzaW9uX3N0cmluZ1tdID0gR0lUX1ZFUlNJT047Citjb25zdCBjaGFyIGdpdF9idWlsdF9mcm9tX2NvbW1pdF9zdHJpbmdbXSA9IEdJVF9CVUlMVF9GUk9NX0NPTU1JVDsKKworY29uc3QgY2hhciAqZ2l0X3VzZXJfYWdlbnQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYWdlbnQgPSBOVUxMOworCisJaWYgKCFhZ2VudCkgeworCQlhZ2VudCA9IGdldGVudigiR0lUX1VTRVJfQUdFTlQiKTsKKwkJaWYgKCFhZ2VudCkKKwkJCWFnZW50ID0gR0lUX1VTRVJfQUdFTlQ7CisJfQorCisJcmV0dXJuIGFnZW50OworfQorCitjb25zdCBjaGFyICpnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYWdlbnQgPSBOVUxMOworCisJaWYgKCFhZ2VudCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgaTsKKworCQlzdHJidWZfYWRkc3RyKCZidWYsIGdpdF91c2VyX2FnZW50KCkpOworCQlzdHJidWZfdHJpbSgmYnVmKTsKKwkJZm9yIChpID0gMDsgaSA8IGJ1Zi5sZW47IGkrKykgeworCQkJaWYgKGJ1Zi5idWZbaV0gPD0gMzIgfHwgYnVmLmJ1ZltpXSA+PSAxMjcpCisJCQkJYnVmLmJ1ZltpXSA9ICcuJzsKKwkJfQorCQlhZ2VudCA9IGJ1Zi5idWY7CisJfQorCisJcmV0dXJuIGFnZW50OworfQpkaWZmIC0tZ2l0IGEvdmVyc2lvbi5oIGIvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNjJlODAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJzaW9uLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBWRVJTSU9OX0gKKyNkZWZpbmUgVkVSU0lPTl9ICisKK2V4dGVybiBjb25zdCBjaGFyIGdpdF92ZXJzaW9uX3N0cmluZ1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X2J1aWx0X2Zyb21fY29tbWl0X3N0cmluZ1tdOworCitjb25zdCBjaGFyICpnaXRfdXNlcl9hZ2VudCh2b2lkKTsKK2NvbnN0IGNoYXIgKmdpdF91c2VyX2FnZW50X3Nhbml0aXplZCh2b2lkKTsKKworI2VuZGlmIC8qIFZFUlNJT05fSCAqLwpkaWZmIC0tZ2l0IGEvdmVyc2lvbmNtcC5jIGIvdmVyc2lvbmNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OWVlOTQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJzaW9uY21wLmMKQEAgLTAsMCArMSwxOTMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKy8qCisgKiB2ZXJzaW9uY21wKCk6IGNvcGllZCBmcm9tIHN0cmluZy9zdHJ2ZXJzY21wLmMgaW4gZ2xpYmMgY29tbWl0CisgKiBlZTkyNDdjMzhhOGRlZjI0YTU5ZWI1Y2ZiNzE5NmE5OGJlZjhjZmRjLCByZWZvcm1hdHRlZCB0byBHaXQgY29kaW5nCisgKiBzdHlsZS4gVGhlIGltcGxlbWVudGF0aW9uIGlzIHVuZGVyIExHUEwtMi4xIGFuZCBHaXQgcmVsaWNlbnNlcyBpdAorICogdG8gR1BMdjIuCisgKi8KKworLyoKKyAqIHN0YXRlczogU19OOiBub3JtYWwsIFNfSTogY29tcGFyaW5nIGludGVncmFsIHBhcnQsIFNfRjogY29tcGFyaW5nCisgKiBmcmFjdGlvbm5hbCBwYXJ0cywgU19aOiBpZGVtIGJ1dCB3aXRoIGxlYWRpbmcgWmVyb2VzIG9ubHkKKyAqLworI2RlZmluZSAgU19OICAgIDB4MAorI2RlZmluZSAgU19JICAgIDB4MworI2RlZmluZSAgU19GICAgIDB4NgorI2RlZmluZSAgU19aICAgIDB4OQorCisvKiByZXN1bHRfdHlwZTogQ01QOiByZXR1cm4gZGlmZjsgTEVOOiBjb21wYXJlIHVzaW5nIGxlbl9kaWZmL2RpZmYgKi8KKyNkZWZpbmUgIENNUCAgICAyCisjZGVmaW5lICBMRU4gICAgMworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwcmVyZWxlYXNlczsKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisKK3N0cnVjdCBzdWZmaXhfbWF0Y2ggeworCWludCBjb25mX3BvczsKKwlpbnQgc3RhcnQ7CisJaW50IGxlbjsKK307CisKK3N0YXRpYyB2b2lkIGZpbmRfYmV0dGVyX21hdGNoaW5nX3N1ZmZpeChjb25zdCBjaGFyICp0YWduYW1lLCBjb25zdCBjaGFyICpzdWZmaXgsCisJCQkJCWludCBzdWZmaXhfbGVuLCBpbnQgc3RhcnQsIGludCBjb25mX3BvcywKKwkJCQkJc3RydWN0IHN1ZmZpeF9tYXRjaCAqbWF0Y2gpCit7CisJLyoKKwkgKiBBIGJldHRlciBtYXRjaCBlaXRoZXIgc3RhcnRzIGVhcmxpZXIgb3Igc3RhcnRzIGF0IHRoZSBzYW1lIG9mZnNldAorCSAqIGJ1dCBpcyBsb25nZXIuCisJICovCisJaW50IGVuZCA9IG1hdGNoLT5sZW4gPCBzdWZmaXhfbGVuID8gbWF0Y2gtPnN0YXJ0IDogbWF0Y2gtPnN0YXJ0LTE7CisJaW50IGk7CisJZm9yIChpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspCisJCWlmIChzdGFydHNfd2l0aCh0YWduYW1lICsgaSwgc3VmZml4KSkgeworCQkJbWF0Y2gtPmNvbmZfcG9zID0gY29uZl9wb3M7CisJCQltYXRjaC0+c3RhcnQgPSBpOworCQkJbWF0Y2gtPmxlbiA9IHN1ZmZpeF9sZW47CisJCQlicmVhazsKKwkJfQorfQorCisvKgorICogb2ZmIGlzIHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGhlIHR3byBzdHJpbmdzCisgKiBzMSBhbmQgczIuIElmIGVpdGhlciBzMSBvciBzMiBjb250YWlucyBhIHByZXJlbGVhc2Ugc3VmZml4IGNvbnRhaW5pbmcKKyAqIHRoYXQgb2Zmc2V0IG9yIGEgc3VmZml4IGVuZHMgcmlnaHQgYmVmb3JlIHRoYXQgb2Zmc2V0LCB0aGVuIHRoYXQKKyAqIHN0cmluZyB3aWxsIGJlIGZvcmNlZCB0byBiZSBvbiB0b3AuCisgKgorICogSWYgYm90aCBzMSBhbmQgczIgY29udGFpbiBhIChkaWZmZXJlbnQpIHN1ZmZpeCBhcm91bmQgdGhhdCBwb3NpdGlvbiwKKyAqIHRoZWlyIG9yZGVyIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIG9mIHRob3NlIHR3byBzdWZmaXhlcyBpbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24uCisgKiBJZiBhbnkgb2YgdGhlIHN0cmluZ3MgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBkaWZmZXJlbnQgc3VmZml4ZXMgYXJvdW5kCisgKiB0aGF0IHBvc2l0aW9uLCB0aGVuIHRoYXQgc3RyaW5nIGlzIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvbnRhaW5lZAorICogc3VmZml4IHdoaWNoIHN0YXJ0cyBhdCB0aGUgZWFybGllc3Qgb2Zmc2V0IGluIHRoYXQgc3RyaW5nLgorICogSWYgbW9yZSB0aGFuIG9uZSBkaWZmZXJlbnQgY29udGFpbmVkIHN1ZmZpeGVzIHN0YXJ0IGF0IHRoYXQgZWFybGllc3QKKyAqIG9mZnNldCwgdGhlbiB0aGF0IHN0cmluZyBpcyBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBsb25nZXN0IG9mIHRob3NlCisgKiBzdWZmaXhlcy4KKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgKmRpZmYgY29udGFpbnMgdGhlIHJldHVybiB2YWx1ZSBmb3IgdmVyc2lvbmNtcCgpCisgKi8KK3N0YXRpYyBpbnQgc3dhcF9wcmVyZWxlYXNlcyhjb25zdCBjaGFyICpzMSwKKwkJCSAgICBjb25zdCBjaGFyICpzMiwKKwkJCSAgICBpbnQgb2ZmLAorCQkJICAgIGludCAqZGlmZikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3VmZml4X21hdGNoIG1hdGNoMSA9IHsgLTEsIG9mZiwgLTEgfTsKKwlzdHJ1Y3Qgc3VmZml4X21hdGNoIG1hdGNoMiA9IHsgLTEsIG9mZiwgLTEgfTsKKworCWZvciAoaSA9IDA7IGkgPCBwcmVyZWxlYXNlcy0+bnI7IGkrKykgeworCQljb25zdCBjaGFyICpzdWZmaXggPSBwcmVyZWxlYXNlcy0+aXRlbXNbaV0uc3RyaW5nOworCQlpbnQgc3RhcnQsIHN1ZmZpeF9sZW4gPSBzdHJsZW4oc3VmZml4KTsKKwkJaWYgKHN1ZmZpeF9sZW4gPCBvZmYpCisJCQlzdGFydCA9IG9mZiAtIHN1ZmZpeF9sZW47CisJCWVsc2UKKwkJCXN0YXJ0ID0gMDsKKwkJZmluZF9iZXR0ZXJfbWF0Y2hpbmdfc3VmZml4KHMxLCBzdWZmaXgsIHN1ZmZpeF9sZW4sIHN0YXJ0LAorCQkJCQkgICAgaSwgJm1hdGNoMSk7CisJCWZpbmRfYmV0dGVyX21hdGNoaW5nX3N1ZmZpeChzMiwgc3VmZml4LCBzdWZmaXhfbGVuLCBzdGFydCwKKwkJCQkJICAgIGksICZtYXRjaDIpOworCX0KKwlpZiAobWF0Y2gxLmNvbmZfcG9zID09IC0xICYmIG1hdGNoMi5jb25mX3BvcyA9PSAtMSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hdGNoMS5jb25mX3BvcyA9PSBtYXRjaDIuY29uZl9wb3MpCisJCS8qIEZvdW5kIHRoZSBzYW1lIHN1ZmZpeCBpbiBib3RoLCBlLmcuICItcmMiIGluICJ2MS4wLXJjWCIKKwkJICogYW5kICJ2MS4wLXJjWSI6IHRoZSBjYWxsZXIgc2hvdWxkIGRlY2lkZSBiYXNlZCBvbiAiWCIKKwkJICogYW5kICJZIi4gKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAobWF0Y2gxLmNvbmZfcG9zID49IDAgJiYgbWF0Y2gyLmNvbmZfcG9zID49IDApCisJCSpkaWZmID0gbWF0Y2gxLmNvbmZfcG9zIC0gbWF0Y2gyLmNvbmZfcG9zOworCWVsc2UgaWYgKG1hdGNoMS5jb25mX3BvcyA+PSAwKQorCQkqZGlmZiA9IC0xOworCWVsc2UgLyogaWYgKG1hdGNoMi5jb25mX3BvcyA+PSAwKSAqLworCQkqZGlmZiA9IDE7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDb21wYXJlIFMxIGFuZCBTMiBhcyBzdHJpbmdzIGhvbGRpbmcgaW5kaWNlcy92ZXJzaW9uIG51bWJlcnMsCisgKiByZXR1cm5pbmcgbGVzcyB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gemVybyBpZiBTMSBpcyBsZXNzCisgKiB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gUzIgKGZvciBtb3JlIGluZm8sIHNlZSB0aGUgdGV4aW5mbworICogZG9jKS4KKyAqLworCitpbnQgdmVyc2lvbmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcDEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzMTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMyOworCXVuc2lnbmVkIGNoYXIgYzEsIGMyOworCWludCBzdGF0ZSwgZGlmZjsKKworCS8qCisJICogU3ltYm9sKHMpICAgIDAgICAgICAgWzEtOV0gICBvdGhlcnMKKwkgKiBUcmFuc2l0aW9uICAgKDEwKSAwICAoMDEpIGQgICgwMCkgeAorCSAqLworCXN0YXRpYyBjb25zdCB1aW50OF90IG5leHRfc3RhdGVbXSA9IHsKKwkJLyogc3RhdGUgICAgeCAgICBkICAgIDAgICovCisJCS8qIFNfTiAqLyAgU19OLCBTX0ksIFNfWiwKKwkJLyogU19JICovICBTX04sIFNfSSwgU19JLAorCQkvKiBTX0YgKi8gIFNfTiwgU19GLCBTX0YsCisJCS8qIFNfWiAqLyAgU19OLCBTX0YsIFNfWgorCX07CisKKwlzdGF0aWMgY29uc3QgaW50OF90IHJlc3VsdF90eXBlW10gPSB7CisJCS8qIHN0YXRlICAgeC94ICB4L2QgIHgvMCAgZC94ICBkL2QgIGQvMCAgMC94ICAwL2QgIDAvMCAgKi8KKworCQkvKiBTX04gKi8gIENNUCwgQ01QLCBDTVAsIENNUCwgTEVOLCBDTVAsIENNUCwgQ01QLCBDTVAsCisJCS8qIFNfSSAqLyAgQ01QLCAtMSwgIC0xLCAgKzEsICBMRU4sIExFTiwgKzEsICBMRU4sIExFTiwKKwkJLyogU19GICovICBDTVAsIENNUCwgQ01QLCBDTVAsIENNUCwgQ01QLCBDTVAsIENNUCwgQ01QLAorCQkvKiBTX1ogKi8gIENNUCwgKzEsICArMSwgIC0xLCAgQ01QLCBDTVAsIC0xLCAgQ01QLCBDTVAKKwl9OworCisJaWYgKHAxID09IHAyKQorCQlyZXR1cm4gMDsKKworCWMxID0gKnAxKys7CisJYzIgPSAqcDIrKzsKKwkvKiBIaW50OiAnMCcgaXMgYSBkaWdpdCB0b28uICAqLworCXN0YXRlID0gU19OICsgKChjMSA9PSAnMCcpICsgKGlzZGlnaXQgKGMxKSAhPSAwKSk7CisKKwl3aGlsZSAoKGRpZmYgPSBjMSAtIGMyKSA9PSAwKSB7CisJCWlmIChjMSA9PSAnXDAnKQorCQkJcmV0dXJuIGRpZmY7CisKKwkJc3RhdGUgPSBuZXh0X3N0YXRlW3N0YXRlXTsKKwkJYzEgPSAqcDErKzsKKwkJYzIgPSAqcDIrKzsKKwkJc3RhdGUgKz0gKGMxID09ICcwJykgKyAoaXNkaWdpdCAoYzEpICE9IDApOworCX0KKworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpkZXByZWNhdGVkX3ByZXJlbGVhc2VzOworCQlpbml0aWFsaXplZCA9IDE7CisJCXByZXJlbGVhc2VzID0gZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoInZlcnNpb25zb3J0LnN1ZmZpeCIpOworCQlkZXByZWNhdGVkX3ByZXJlbGVhc2VzID0gZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoInZlcnNpb25zb3J0LnByZXJlbGVhc2VzdWZmaXgiKTsKKwkJaWYgKHByZXJlbGVhc2VzKSB7CisJCQlpZiAoZGVwcmVjYXRlZF9wcmVyZWxlYXNlcykKKwkJCQl3YXJuaW5nKCJpZ25vcmluZyB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlc3VmZml4IGJlY2F1c2UgdmVyc2lvbnNvcnQuc3VmZml4IGlzIHNldCIpOworCQl9IGVsc2UKKwkJCXByZXJlbGVhc2VzID0gZGVwcmVjYXRlZF9wcmVyZWxlYXNlczsKKwl9CisJaWYgKHByZXJlbGVhc2VzICYmIHN3YXBfcHJlcmVsZWFzZXMoczEsIHMyLCAoY29uc3QgY2hhciAqKSBwMSAtIHMxIC0gMSwKKwkJCQkJICAgICZkaWZmKSkKKwkJcmV0dXJuIGRpZmY7CisKKwlzdGF0ZSA9IHJlc3VsdF90eXBlW3N0YXRlICogMyArICgoKGMyID09ICcwJykgKyAoaXNkaWdpdCAoYzIpICE9IDApKSldOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgQ01QOgorCQlyZXR1cm4gZGlmZjsKKworCWNhc2UgTEVOOgorCQl3aGlsZSAoaXNkaWdpdCAoKnAxKyspKQorCQkJaWYgKCFpc2RpZ2l0ICgqcDIrKykpCisJCQkJcmV0dXJuIDE7CisKKwkJcmV0dXJuIGlzZGlnaXQgKCpwMikgPyAtMSA6IGRpZmY7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gc3RhdGU7CisJfQorfQpkaWZmIC0tZ2l0IGEvd2Fsa2VyLmMgYi93YWxrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTg0YmY4Ci0tLSAvZGV2L251bGwKKysrIGIvd2Fsa2VyLmMKQEAgLTAsMCArMSwzNDkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIndhbGtlci5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorCitzdGF0aWMgc3RydWN0IG9iamVjdF9pZCBjdXJyZW50X2NvbW1pdF9vaWQ7CisKK3ZvaWQgd2Fsa2VyX3NheShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpIHsKKwkJdmFfbGlzdCBhcDsKKwkJdmFfc3RhcnQoYXAsIGZtdCk7CisJCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXBvcnRfbWlzc2luZyhjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgb2J0YWluIG5lZWRlZCAlcyAlc1xuIiwKKwkJb2JqLT50eXBlID8gdHlwZV9uYW1lKG9iai0+dHlwZSk6ICJvYmplY3QiLAorCQlvaWRfdG9faGV4KCZvYmotPm9pZCkpOworCWlmICghaXNfbnVsbF9vaWQoJmN1cnJlbnRfY29tbWl0X29pZCkpCisJCWZwcmludGYoc3RkZXJyLCAid2hpbGUgcHJvY2Vzc2luZyBjb21taXQgJXMuXG4iLAorCQkJb2lkX3RvX2hleCgmY3VycmVudF9jb21taXRfb2lkKSk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2VzcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBvYmplY3QgKm9iaik7CisKK3N0YXRpYyBpbnQgcHJvY2Vzc190cmVlKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IHRyZWUgKnRyZWUpCit7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCisJaWYgKHBhcnNlX3RyZWUodHJlZSkpCisJCXJldHVybiAtMTsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IE5VTEw7CisKKwkJLyogc3VibW9kdWxlIGNvbW1pdHMgYXJlIG5vdCBzdG9yZWQgaW4gdGhlIHN1cGVycHJvamVjdCAqLworCQlpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpCisJCQljb250aW51ZTsKKwkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpIHsKKwkJCXN0cnVjdCB0cmVlICp0cmVlID0gbG9va3VwX3RyZWUodGhlX3JlcG9zaXRvcnksCisJCQkJCQkJJmVudHJ5Lm9pZCk7CisJCQlpZiAodHJlZSkKKwkJCQlvYmogPSAmdHJlZS0+b2JqZWN0OworCQl9CisJCWVsc2UgeworCQkJc3RydWN0IGJsb2IgKmJsb2IgPSBsb29rdXBfYmxvYih0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkmZW50cnkub2lkKTsKKwkJCWlmIChibG9iKQorCQkJCW9iaiA9ICZibG9iLT5vYmplY3Q7CisJCX0KKwkJaWYgKCFvYmogfHwgcHJvY2Vzcyh3YWxrZXIsIG9iaikpCisJCQlyZXR1cm4gLTE7CisJfQorCWZyZWVfdHJlZV9idWZmZXIodHJlZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIENPTVBMRVRFCSgxVSA8PCAwKQorI2RlZmluZSBTRUVOCQkoMVUgPDwgMSkKKyNkZWZpbmUgVE9fU0NBTgkJKDFVIDw8IDIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbXBsZXRlID0gTlVMTDsKKworc3RhdGljIGludCBwcm9jZXNzX2NvbW1pdChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCXJldHVybiAtMTsKKworCXdoaWxlIChjb21wbGV0ZSAmJiBjb21wbGV0ZS0+aXRlbS0+ZGF0ZSA+PSBjb21taXQtPmRhdGUpIHsKKwkJcG9wX21vc3RfcmVjZW50X2NvbW1pdCgmY29tcGxldGUsIENPTVBMRVRFKTsKKwl9CisKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01QTEVURSkKKwkJcmV0dXJuIDA7CisKKwlvaWRjcHkoJmN1cnJlbnRfY29tbWl0X29pZCwgJmNvbW1pdC0+b2JqZWN0Lm9pZCk7CisKKwl3YWxrZXJfc2F5KHdhbGtlciwgIndhbGsgJXNcbiIsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOworCisJaWYgKHByb2Nlc3Mod2Fsa2VyLCAmZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCktPm9iamVjdCkpCisJCXJldHVybiAtMTsKKworCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJaWYgKHByb2Nlc3Mod2Fsa2VyLCAmcGFyZW50cy0+aXRlbS0+b2JqZWN0KSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3RhZyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCB0YWcgKnRhZykKK3sKKwlpZiAocGFyc2VfdGFnKHRhZykpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gcHJvY2Vzcyh3YWxrZXIsIHRhZy0+dGFnZ2VkKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfbGlzdCAqcHJvY2Vzc19xdWV1ZSA9IE5VTEw7CitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICoqcHJvY2Vzc19xdWV1ZV9lbmQgPSAmcHJvY2Vzc19xdWV1ZTsKKworc3RhdGljIGludCBwcm9jZXNzX29iamVjdChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJaWYgKHByb2Nlc3NfY29tbWl0KHdhbGtlciwgKHN0cnVjdCBjb21taXQgKilvYmopKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQlpZiAocHJvY2Vzc190cmVlKHdhbGtlciwgKHN0cnVjdCB0cmVlICopb2JqKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQlpZiAocHJvY2Vzc190YWcod2Fsa2VyLCAoc3RydWN0IHRhZyAqKW9iaikpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBkZXRlcm1pbmUgcmVxdWlyZW1lbnRzICIKKwkJICAgICAib2YgdHlwZSAlcyBmb3IgJXMiLAorCQkgICAgIHR5cGVfbmFtZShvYmotPnR5cGUpLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Moc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaWYgKG9iai0+ZmxhZ3MgJiBTRUVOKQorCQlyZXR1cm4gMDsKKwlvYmotPmZsYWdzIHw9IFNFRU47CisKKwlpZiAoaGFzX29iamVjdF9maWxlKCZvYmotPm9pZCkpIHsKKwkJLyogV2UgYWxyZWFkeSBoYXZlIGl0LCBzbyB3ZSBzaG91bGQgc2NhbiBpdCBub3cuICovCisJCW9iai0+ZmxhZ3MgfD0gVE9fU0NBTjsKKwl9CisJZWxzZSB7CisJCWlmIChvYmotPmZsYWdzICYgQ09NUExFVEUpCisJCQlyZXR1cm4gMDsKKwkJd2Fsa2VyLT5wcmVmZXRjaCh3YWxrZXIsIG9iai0+b2lkLmhhc2gpOworCX0KKworCW9iamVjdF9saXN0X2luc2VydChvYmosIHByb2Nlc3NfcXVldWVfZW5kKTsKKwlwcm9jZXNzX3F1ZXVlX2VuZCA9ICYoKnByb2Nlc3NfcXVldWVfZW5kKS0+bmV4dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb29wKHN0cnVjdCB3YWxrZXIgKndhbGtlcikKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKmVsZW07CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisJdWludDY0X3QgbnIgPSAwOworCisJaWYgKHdhbGtlci0+Z2V0X3Byb2dyZXNzKQorCQlwcm9ncmVzcyA9IHN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoXygiRmV0Y2hpbmcgb2JqZWN0cyIpLCAwKTsKKworCXdoaWxlIChwcm9jZXNzX3F1ZXVlKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHByb2Nlc3NfcXVldWUtPml0ZW07CisJCWVsZW0gPSBwcm9jZXNzX3F1ZXVlOworCQlwcm9jZXNzX3F1ZXVlID0gZWxlbS0+bmV4dDsKKwkJZnJlZShlbGVtKTsKKwkJaWYgKCFwcm9jZXNzX3F1ZXVlKQorCQkJcHJvY2Vzc19xdWV1ZV9lbmQgPSAmcHJvY2Vzc19xdWV1ZTsKKworCQkvKiBJZiB3ZSBhcmUgbm90IHNjYW5uaW5nIHRoaXMgb2JqZWN0LCB3ZSBwbGFjZWQgaXQgaW4KKwkJICogdGhlIHF1ZXVlIGJlY2F1c2Ugd2UgbmVlZGVkIHRvIGZldGNoIGl0IGZpcnN0LgorCQkgKi8KKwkJaWYgKCEgKG9iai0+ZmxhZ3MgJiBUT19TQ0FOKSkgeworCQkJaWYgKHdhbGtlci0+ZmV0Y2god2Fsa2VyLCBvYmotPm9pZC5oYXNoKSkgeworCQkJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwkJCQlyZXBvcnRfbWlzc2luZyhvYmopOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoIW9iai0+dHlwZSkKKwkJCXBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJm9iai0+b2lkKTsKKwkJaWYgKHByb2Nlc3Nfb2JqZWN0KHdhbGtlciwgb2JqKSkgeworCQkJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrbnIpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJwcmV0X3RhcmdldChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNoYXIgKnRhcmdldCwgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWlmICghZ2V0X29pZF9oZXgodGFyZ2V0LCBvaWQpKQorCQlyZXR1cm4gMDsKKwlpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KHRhcmdldCwgMCkpIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmKHRhcmdldCk7CisJCWlmICghd2Fsa2VyLT5mZXRjaF9yZWYod2Fsa2VyLCByZWYpKSB7CisJCQlvaWRjcHkob2lkLCAmcmVmLT5vbGRfb2lkKTsKKwkJCWZyZWUocmVmKTsKKwkJCXJldHVybiAwOworCQl9CisJCWZyZWUocmVmKTsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IG1hcmtfY29tcGxldGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseSh0aGVfcmVwb3NpdG9yeSwKKwkJCQkJCQkgICAgICAgb2lkLCAxKTsKKworCWlmIChjb21taXQpIHsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQ09NUExFVEU7CisJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZjb21wbGV0ZSk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgd2Fsa2VyX3RhcmdldHNfc3RkaW4oY2hhciAqKip0YXJnZXQsIGNvbnN0IGNoYXIgKioqd3JpdGVfcmVmKQoreworCWludCB0YXJnZXRzID0gMCwgdGFyZ2V0c19hbGxvYyA9IDA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkqdGFyZ2V0ID0gTlVMTDsgKndyaXRlX3JlZiA9IE5VTEw7CisJd2hpbGUgKDEpIHsKKwkJY2hhciAqcmZfb25lID0gTlVMTDsKKwkJY2hhciAqdGdfb25lOworCisJCWlmIChzdHJidWZfZ2V0bGluZV9sZigmYnVmLCBzdGRpbikgPT0gRU9GKQorCQkJYnJlYWs7CisJCXRnX29uZSA9IGJ1Zi5idWY7CisJCXJmX29uZSA9IHN0cmNocih0Z19vbmUsICdcdCcpOworCQlpZiAocmZfb25lKQorCQkJKnJmX29uZSsrID0gMDsKKworCQlpZiAodGFyZ2V0cyA+PSB0YXJnZXRzX2FsbG9jKSB7CisJCQl0YXJnZXRzX2FsbG9jID0gdGFyZ2V0c19hbGxvYyA/IHRhcmdldHNfYWxsb2MgKiAyIDogNjQ7CisJCQlSRUFMTE9DX0FSUkFZKCp0YXJnZXQsIHRhcmdldHNfYWxsb2MpOworCQkJUkVBTExPQ19BUlJBWSgqd3JpdGVfcmVmLCB0YXJnZXRzX2FsbG9jKTsKKwkJfQorCQkoKnRhcmdldClbdGFyZ2V0c10gPSB4c3RyZHVwKHRnX29uZSk7CisJCSgqd3JpdGVfcmVmKVt0YXJnZXRzXSA9IHhzdHJkdXBfb3JfbnVsbChyZl9vbmUpOworCQl0YXJnZXRzKys7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiB0YXJnZXRzOworfQorCit2b2lkIHdhbGtlcl90YXJnZXRzX2ZyZWUoaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsIGNvbnN0IGNoYXIgKip3cml0ZV9yZWYpCit7CisJd2hpbGUgKHRhcmdldHMtLSkgeworCQlmcmVlKHRhcmdldFt0YXJnZXRzXSk7CisJCWlmICh3cml0ZV9yZWYpCisJCQlmcmVlKChjaGFyICopIHdyaXRlX3JlZlt0YXJnZXRzXSk7CisJfQorfQorCitpbnQgd2Fsa2VyX2ZldGNoKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsCisJCSBjb25zdCBjaGFyICoqd3JpdGVfcmVmLCBjb25zdCBjaGFyICp3cml0ZV9yZWZfbG9nX2RldGFpbHMpCit7CisJc3RydWN0IHN0cmJ1ZiByZWZuYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkczsKKwljaGFyICptc2cgPSBOVUxMOworCWludCBpLCByZXQgPSAtMTsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisKKwlBTExPQ19BUlJBWShvaWRzLCB0YXJnZXRzKTsKKworCWlmICh3cml0ZV9yZWYpIHsKKwkJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJCWlmICghdHJhbnNhY3Rpb24pIHsKKwkJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJaWYgKCF3YWxrZXItPmdldF9yZWNvdmVyKSB7CisJCWZvcl9lYWNoX3JlZihtYXJrX2NvbXBsZXRlLCBOVUxMKTsKKwkJY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKCZjb21wbGV0ZSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHRhcmdldHM7IGkrKykgeworCQlpZiAoaW50ZXJwcmV0X3RhcmdldCh3YWxrZXIsIHRhcmdldFtpXSwgb2lkcyArIGkpKSB7CisJCQllcnJvcigiQ291bGQgbm90IGludGVycHJldCByZXNwb25zZSBmcm9tIHNlcnZlciAnJXMnIGFzIHNvbWV0aGluZyB0byBwdWxsIiwgdGFyZ2V0W2ldKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAocHJvY2Vzcyh3YWxrZXIsIGxvb2t1cF91bmtub3duX29iamVjdCgmb2lkc1tpXSkpKQorCQkJZ290byBkb25lOworCX0KKworCWlmIChsb29wKHdhbGtlcikpCisJCWdvdG8gZG9uZTsKKwlpZiAoIXdyaXRlX3JlZikgeworCQlyZXQgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCWlmICh3cml0ZV9yZWZfbG9nX2RldGFpbHMpIHsKKwkJbXNnID0geHN0cmZtdCgiZmV0Y2ggZnJvbSAlcyIsIHdyaXRlX3JlZl9sb2dfZGV0YWlscyk7CisJfSBlbHNlIHsKKwkJbXNnID0gTlVMTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IHRhcmdldHM7IGkrKykgeworCQlpZiAoIXdyaXRlX3JlZltpXSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfcmVzZXQoJnJlZm5hbWUpOworCQlzdHJidWZfYWRkZigmcmVmbmFtZSwgInJlZnMvJXMiLCB3cml0ZV9yZWZbaV0pOworCQlpZiAocmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZS5idWYsCisJCQkJCSAgIG9pZHMgKyBpLCBOVUxMLCAwLAorCQkJCQkgICBtc2cgPyBtc2cgOiAiZmV0Y2ggKHVua25vd24pIiwKKwkJCQkJICAgJmVycikpIHsKKwkJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQkJZ290byBkb25lOworCQl9CisJfQorCWlmIChyZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkgeworCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJZ290byBkb25lOworCX0KKworCXJldCA9IDA7CisKK2RvbmU6CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCWZyZWUobXNnKTsKKwlmcmVlKG9pZHMpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZuYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdhbGtlcl9mcmVlKHN0cnVjdCB3YWxrZXIgKndhbGtlcikKK3sKKwl3YWxrZXItPmNsZWFudXAod2Fsa2VyKTsKKwlmcmVlKHdhbGtlcik7Cit9CmRpZmYgLS1naXQgYS93YWxrZXIuaCBiL3dhbGtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MGIwMTYKLS0tIC9kZXYvbnVsbAorKysgYi93YWxrZXIuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIFdBTEtFUl9ICisjZGVmaW5lIFdBTEtFUl9ICisKKyNpbmNsdWRlICJyZW1vdGUuaCIKKworc3RydWN0IHdhbGtlciB7CisJdm9pZCAqZGF0YTsKKwlpbnQgKCpmZXRjaF9yZWYpKHN0cnVjdCB3YWxrZXIgKiwgc3RydWN0IHJlZiAqcmVmKTsKKwl2b2lkICgqcHJlZmV0Y2gpKHN0cnVjdCB3YWxrZXIgKiwgdW5zaWduZWQgY2hhciAqc2hhMSk7CisJaW50ICgqZmV0Y2gpKHN0cnVjdCB3YWxrZXIgKiwgdW5zaWduZWQgY2hhciAqc2hhMSk7CisJdm9pZCAoKmNsZWFudXApKHN0cnVjdCB3YWxrZXIgKik7CisJaW50IGdldF92ZXJib3NlbHk7CisJaW50IGdldF9wcm9ncmVzczsKKwlpbnQgZ2V0X3JlY292ZXI7CisKKwlpbnQgY29ycnVwdF9vYmplY3RfZm91bmQ7Cit9OworCisvKiBSZXBvcnQgd2hhdCB3ZSBnb3QgdW5kZXIgZ2V0X3ZlcmJvc2VseSAqLworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK3ZvaWQgd2Fsa2VyX3NheShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyogTG9hZCBwdWxsIHRhcmdldHMgZnJvbSBzdGRpbiAqLworaW50IHdhbGtlcl90YXJnZXRzX3N0ZGluKGNoYXIgKioqdGFyZ2V0LCBjb25zdCBjaGFyICoqKndyaXRlX3JlZik7CisKKy8qIEZyZWUgdXAgbG9hZGVkIHRhcmdldHMgKi8KK3ZvaWQgd2Fsa2VyX3RhcmdldHNfZnJlZShpbnQgdGFyZ2V0cywgY2hhciAqKnRhcmdldCwgY29uc3QgY2hhciAqKndyaXRlX3JlZik7CisKKy8qIElmIHdyaXRlX3JlZiBpcyBzZXQsIHRoZSByZWYgZmlsZW5hbWUgdG8gd3JpdGUgdGhlIHRhcmdldCB2YWx1ZSB0by4gKi8KKy8qIElmIHdyaXRlX3JlZl9sb2dfZGV0YWlscyBpcyBzZXQsIGFkZGl0aW9uYWwgdGV4dCB3aWxsIGFwcGVhciBpbiB0aGUgcmVmIGxvZy4gKi8KK2ludCB3YWxrZXJfZmV0Y2goc3RydWN0IHdhbGtlciAqaW1wbCwgaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsCisJCSBjb25zdCBjaGFyICoqd3JpdGVfcmVmLCBjb25zdCBjaGFyICp3cml0ZV9yZWZfbG9nX2RldGFpbHMpOworCit2b2lkIHdhbGtlcl9mcmVlKHN0cnVjdCB3YWxrZXIgKndhbGtlcik7CisKK3N0cnVjdCB3YWxrZXIgKmdldF9odHRwX3dhbGtlcihjb25zdCBjaGFyICp1cmwpOworCisjZW5kaWYgLyogV0FMS0VSX0ggKi8KZGlmZiAtLWdpdCBhL3dpbGRtYXRjaC5jIGIvd2lsZG1hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5ZTJhMgotLS0gL2Rldi9udWxsCisrKyBiL3dpbGRtYXRjaC5jCkBAIC0wLDAgKzEsMjc4IEBACisvKgorKiogIERvIHNoZWxsLXN0eWxlIHBhdHRlcm4gbWF0Y2hpbmcgZm9yID8sIFwsIFtdLCBhbmQgKiBjaGFyYWN0ZXJzLgorKiogIEl0IGlzIDhiaXQgY2xlYW4uCisqKgorKiogIFdyaXR0ZW4gYnkgUmljaCAkYWx6LCBtaXJyb3IhcnMsIFdlZCBOb3YgMjYgMTk6MDM6MTcgRVNUIDE5ODYuCisqKiAgUmljaCAkYWx6IGlzIG5vdyA8cnNhbHpAYmJuLmNvbT4uCisqKgorKiogIE1vZGlmaWVkIGJ5IFdheW5lIERhdmlzb24gdG8gc3BlY2lhbC1jYXNlICcvJyBtYXRjaGluZywgdG8gbWFrZSAnKionCisqKiAgd29yayBkaWZmZXJlbnRseSB0aGFuICcqJywgYW5kIHRvIGZpeCB0aGUgY2hhcmFjdGVyLWNsYXNzIGNvZGUuCisqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyOworCisvKiBXaGF0IGNoYXJhY3RlciBtYXJrcyBhbiBpbnZlcnRlZCBjaGFyYWN0ZXIgY2xhc3M/ICovCisjZGVmaW5lIE5FR0FURV9DTEFTUwknIScKKyNkZWZpbmUgTkVHQVRFX0NMQVNTMgknXicKKworI2RlZmluZSBDQ19FUShjbGFzcywgbGVuLCBsaXRtYXRjaCkgKChsZW4pID09IHNpemVvZiAobGl0bWF0Y2gpLTEgXAorCQkJCSAgICAmJiAqKGNsYXNzKSA9PSAqKGxpdG1hdGNoKSBcCisJCQkJICAgICYmIHN0cm5jbXAoKGNoYXIqKWNsYXNzLCBsaXRtYXRjaCwgbGVuKSA9PSAwKQorCisjaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgIWRlZmluZWQgaXNhc2NpaQorIyBkZWZpbmUgSVNBU0NJSShjKSAxCisjZWxzZQorIyBkZWZpbmUgSVNBU0NJSShjKSBpc2FzY2lpKGMpCisjZW5kaWYKKworI2lmZGVmIGlzYmxhbmsKKyMgZGVmaW5lIElTQkxBTksoYykgKElTQVNDSUkoYykgJiYgaXNibGFuayhjKSkKKyNlbHNlCisjIGRlZmluZSBJU0JMQU5LKGMpICgoYykgPT0gJyAnIHx8IChjKSA9PSAnXHQnKQorI2VuZGlmCisKKyNpZmRlZiBpc2dyYXBoCisjIGRlZmluZSBJU0dSQVBIKGMpIChJU0FTQ0lJKGMpICYmIGlzZ3JhcGgoYykpCisjZWxzZQorIyBkZWZpbmUgSVNHUkFQSChjKSAoSVNBU0NJSShjKSAmJiBpc3ByaW50KGMpICYmICFpc3NwYWNlKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgSVNQUklOVChjKSAoSVNBU0NJSShjKSAmJiBpc3ByaW50KGMpKQorI2RlZmluZSBJU0RJR0lUKGMpIChJU0FTQ0lJKGMpICYmIGlzZGlnaXQoYykpCisjZGVmaW5lIElTQUxOVU0oYykgKElTQVNDSUkoYykgJiYgaXNhbG51bShjKSkKKyNkZWZpbmUgSVNBTFBIQShjKSAoSVNBU0NJSShjKSAmJiBpc2FscGhhKGMpKQorI2RlZmluZSBJU0NOVFJMKGMpIChJU0FTQ0lJKGMpICYmIGlzY250cmwoYykpCisjZGVmaW5lIElTTE9XRVIoYykgKElTQVNDSUkoYykgJiYgaXNsb3dlcihjKSkKKyNkZWZpbmUgSVNQVU5DVChjKSAoSVNBU0NJSShjKSAmJiBpc3B1bmN0KGMpKQorI2RlZmluZSBJU1NQQUNFKGMpIChJU0FTQ0lJKGMpICYmIGlzc3BhY2UoYykpCisjZGVmaW5lIElTVVBQRVIoYykgKElTQVNDSUkoYykgJiYgaXN1cHBlcihjKSkKKyNkZWZpbmUgSVNYRElHSVQoYykgKElTQVNDSUkoYykgJiYgaXN4ZGlnaXQoYykpCisKKy8qIE1hdGNoIHBhdHRlcm4gInAiIGFnYWluc3QgInRleHQiICovCitzdGF0aWMgaW50IGRvd2lsZChjb25zdCB1Y2hhciAqcCwgY29uc3QgdWNoYXIgKnRleHQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1Y2hhciBwX2NoOworCWNvbnN0IHVjaGFyICpwYXR0ZXJuID0gcDsKKworCWZvciAoIDsgKHBfY2ggPSAqcCkgIT0gJ1wwJzsgdGV4dCsrLCBwKyspIHsKKwkJaW50IG1hdGNoZWQsIG1hdGNoX3NsYXNoLCBuZWdhdGVkOworCQl1Y2hhciB0X2NoLCBwcmV2X2NoOworCQlpZiAoKHRfY2ggPSAqdGV4dCkgPT0gJ1wwJyAmJiBwX2NoICE9ICcqJykKKwkJCXJldHVybiBXTV9BQk9SVF9BTEw7CisJCWlmICgoZmxhZ3MgJiBXTV9DQVNFRk9MRCkgJiYgSVNVUFBFUih0X2NoKSkKKwkJCXRfY2ggPSB0b2xvd2VyKHRfY2gpOworCQlpZiAoKGZsYWdzICYgV01fQ0FTRUZPTEQpICYmIElTVVBQRVIocF9jaCkpCisJCQlwX2NoID0gdG9sb3dlcihwX2NoKTsKKwkJc3dpdGNoIChwX2NoKSB7CisJCWNhc2UgJ1xcJzoKKwkJCS8qIExpdGVyYWwgbWF0Y2ggd2l0aCBmb2xsb3dpbmcgY2hhcmFjdGVyLiAgTm90ZSB0aGF0IHRoZSB0ZXN0CisJCQkgKiBpbiAiZGVmYXVsdCIgaGFuZGxlcyB0aGUgcFsxXSA9PSAnXDAnIGZhaWx1cmUgY2FzZS4gKi8KKwkJCXBfY2ggPSAqKytwOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJZGVmYXVsdDoKKwkJCWlmICh0X2NoICE9IHBfY2gpCisJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQljb250aW51ZTsKKwkJY2FzZSAnPyc6CisJCQkvKiBNYXRjaCBhbnl0aGluZyBidXQgJy8nLiAqLworCQkJaWYgKChmbGFncyAmIFdNX1BBVEhOQU1FKSAmJiB0X2NoID09ICcvJykKKwkJCQlyZXR1cm4gV01fTk9NQVRDSDsKKwkJCWNvbnRpbnVlOworCQljYXNlICcqJzoKKwkJCWlmICgqKytwID09ICcqJykgeworCQkJCWNvbnN0IHVjaGFyICpwcmV2X3AgPSBwIC0gMjsKKwkJCQl3aGlsZSAoKisrcCA9PSAnKicpIHt9CisJCQkJaWYgKCEoZmxhZ3MgJiBXTV9QQVRITkFNRSkpCisJCQkJCS8qIHdpdGhvdXQgV01fUEFUSE5BTUUsICcqJyA9PSAnKionICovCisJCQkJCW1hdGNoX3NsYXNoID0gMTsKKwkJCQllbHNlIGlmICgocHJldl9wIDwgcGF0dGVybiB8fCAqcHJldl9wID09ICcvJykgJiYKKwkJCQkgICAgKCpwID09ICdcMCcgfHwgKnAgPT0gJy8nIHx8CisJCQkJICAgICAocFswXSA9PSAnXFwnICYmIHBbMV0gPT0gJy8nKSkpIHsKKwkJCQkJLyoKKwkJCQkJICogQXNzdW1pbmcgd2UgYWxyZWFkeSBtYXRjaCAnZm9vLycgYW5kIGFyZSBhdAorCQkJCQkgKiA8c3RhciBzdGFyIHNsYXNoPiwganVzdCBhc3N1bWUgaXQgbWF0Y2hlcworCQkJCQkgKiBub3RoaW5nIGFuZCBnbyBhaGVhZCBtYXRjaCB0aGUgcmVzdCBvZiB0aGUKKwkJCQkJICogcGF0dGVybiB3aXRoIHRoZSByZW1haW5pbmcgc3RyaW5nLiBUaGlzCisJCQkJCSAqIGhlbHBzIG1ha2UgZm9vLzwqPjwqPi9iYXIgKDw+IGJlY2F1c2UKKwkJCQkJICogb3RoZXJ3aXNlIGl0IGJyZWFrcyBDIGNvbW1lbnQgc3ludGF4KSBtYXRjaAorCQkJCQkgKiBib3RoIGZvby9iYXIgYW5kIGZvby9hL2Jhci4KKwkJCQkJICovCisJCQkJCWlmIChwWzBdID09ICcvJyAmJgorCQkJCQkgICAgZG93aWxkKHAgKyAxLCB0ZXh0LCBmbGFncykgPT0gV01fTUFUQ0gpCisJCQkJCQlyZXR1cm4gV01fTUFUQ0g7CisJCQkJCW1hdGNoX3NsYXNoID0gMTsKKwkJCQl9IGVsc2UgLyogV01fUEFUSE5BTUUgaXMgc2V0ICovCisJCQkJCW1hdGNoX3NsYXNoID0gMDsKKwkJCX0gZWxzZQorCQkJCS8qIHdpdGhvdXQgV01fUEFUSE5BTUUsICcqJyA9PSAnKionICovCisJCQkJbWF0Y2hfc2xhc2ggPSBmbGFncyAmIFdNX1BBVEhOQU1FID8gMCA6IDE7CisJCQlpZiAoKnAgPT0gJ1wwJykgeworCQkJCS8qIFRyYWlsaW5nICIqKiIgbWF0Y2hlcyBldmVyeXRoaW5nLiAgVHJhaWxpbmcgIioiIG1hdGNoZXMKKwkJCQkgKiBvbmx5IGlmIHRoZXJlIGFyZSBubyBtb3JlIHNsYXNoIGNoYXJhY3RlcnMuICovCisJCQkJaWYgKCFtYXRjaF9zbGFzaCkgeworCQkJCQlpZiAoc3RyY2hyKChjaGFyKil0ZXh0LCAnLycpICE9IE5VTEwpCisJCQkJCQlyZXR1cm4gV01fTk9NQVRDSDsKKwkJCQl9CisJCQkJcmV0dXJuIFdNX01BVENIOworCQkJfSBlbHNlIGlmICghbWF0Y2hfc2xhc2ggJiYgKnAgPT0gJy8nKSB7CisJCQkJLyoKKwkJCQkgKiBfb25lXyBhc3RlcmlzayBmb2xsb3dlZCBieSBhIHNsYXNoCisJCQkJICogd2l0aCBXTV9QQVRITkFNRSBtYXRjaGVzIHRoZSBuZXh0CisJCQkJICogZGlyZWN0b3J5CisJCQkJICovCisJCQkJY29uc3QgY2hhciAqc2xhc2ggPSBzdHJjaHIoKGNoYXIqKXRleHQsICcvJyk7CisJCQkJaWYgKCFzbGFzaCkKKwkJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQkJdGV4dCA9IChjb25zdCB1Y2hhciopc2xhc2g7CisJCQkJLyogdGhlIHNsYXNoIGlzIGNvbnN1bWVkIGJ5IHRoZSB0b3AtbGV2ZWwgZm9yIGxvb3AgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCXdoaWxlICgxKSB7CisJCQkJaWYgKHRfY2ggPT0gJ1wwJykKKwkJCQkJYnJlYWs7CisJCQkJLyoKKwkJCQkgKiBUcnkgdG8gYWR2YW5jZSBmYXN0ZXIgd2hlbiBhbiBhc3RlcmlzayBpcworCQkJCSAqIGZvbGxvd2VkIGJ5IGEgbGl0ZXJhbC4gV2Uga25vdyBpbiB0aGlzIGNhc2UKKwkJCQkgKiB0aGF0IHRoZSBzdHJpbmcgYmVmb3JlIHRoZSBsaXRlcmFsCisJCQkJICogbXVzdCBiZWxvbmcgdG8gIioiLgorCQkJCSAqIElmIG1hdGNoX3NsYXNoIGlzIGZhbHNlLCBkbyBub3QgbG9vayBwYXN0CisJCQkJICogdGhlIGZpcnN0IHNsYXNoIGFzIGl0IGNhbm5vdCBiZWxvbmcgdG8gJyonLgorCQkJCSAqLworCQkJCWlmICghaXNfZ2xvYl9zcGVjaWFsKCpwKSkgeworCQkJCQlwX2NoID0gKnA7CisJCQkJCWlmICgoZmxhZ3MgJiBXTV9DQVNFRk9MRCkgJiYgSVNVUFBFUihwX2NoKSkKKwkJCQkJCXBfY2ggPSB0b2xvd2VyKHBfY2gpOworCQkJCQl3aGlsZSAoKHRfY2ggPSAqdGV4dCkgIT0gJ1wwJyAmJgorCQkJCQkgICAgICAgKG1hdGNoX3NsYXNoIHx8IHRfY2ggIT0gJy8nKSkgeworCQkJCQkJaWYgKChmbGFncyAmIFdNX0NBU0VGT0xEKSAmJiBJU1VQUEVSKHRfY2gpKQorCQkJCQkJCXRfY2ggPSB0b2xvd2VyKHRfY2gpOworCQkJCQkJaWYgKHRfY2ggPT0gcF9jaCkKKwkJCQkJCQlicmVhazsKKwkJCQkJCXRleHQrKzsKKwkJCQkJfQorCQkJCQlpZiAodF9jaCAhPSBwX2NoKQorCQkJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQkJfQorCQkJCWlmICgobWF0Y2hlZCA9IGRvd2lsZChwLCB0ZXh0LCBmbGFncykpICE9IFdNX05PTUFUQ0gpIHsKKwkJCQkJaWYgKCFtYXRjaF9zbGFzaCB8fCBtYXRjaGVkICE9IFdNX0FCT1JUX1RPX1NUQVJTVEFSKQorCQkJCQkJcmV0dXJuIG1hdGNoZWQ7CisJCQkJfSBlbHNlIGlmICghbWF0Y2hfc2xhc2ggJiYgdF9jaCA9PSAnLycpCisJCQkJCXJldHVybiBXTV9BQk9SVF9UT19TVEFSU1RBUjsKKwkJCQl0X2NoID0gKisrdGV4dDsKKwkJCX0KKwkJCXJldHVybiBXTV9BQk9SVF9BTEw7CisJCWNhc2UgJ1snOgorCQkJcF9jaCA9ICorK3A7CisjaWZkZWYgTkVHQVRFX0NMQVNTMgorCQkJaWYgKHBfY2ggPT0gTkVHQVRFX0NMQVNTMikKKwkJCQlwX2NoID0gTkVHQVRFX0NMQVNTOworI2VuZGlmCisJCQkvKiBBc3NpZ24gbGl0ZXJhbCAxLzAgYmVjYXVzZSBvZiAibWF0Y2hlZCIgY29tcGFyaXNvbi4gKi8KKwkJCW5lZ2F0ZWQgPSBwX2NoID09IE5FR0FURV9DTEFTUyA/IDEgOiAwOworCQkJaWYgKG5lZ2F0ZWQpIHsKKwkJCQkvKiBJbnZlcnRlZCBjaGFyYWN0ZXIgY2xhc3MuICovCisJCQkJcF9jaCA9ICorK3A7CisJCQl9CisJCQlwcmV2X2NoID0gMDsKKwkJCW1hdGNoZWQgPSAwOworCQkJZG8geworCQkJCWlmICghcF9jaCkKKwkJCQkJcmV0dXJuIFdNX0FCT1JUX0FMTDsKKwkJCQlpZiAocF9jaCA9PSAnXFwnKSB7CisJCQkJCXBfY2ggPSAqKytwOworCQkJCQlpZiAoIXBfY2gpCisJCQkJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQkJCQlpZiAodF9jaCA9PSBwX2NoKQorCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJfSBlbHNlIGlmIChwX2NoID09ICctJyAmJiBwcmV2X2NoICYmIHBbMV0gJiYgcFsxXSAhPSAnXScpIHsKKwkJCQkJcF9jaCA9ICorK3A7CisJCQkJCWlmIChwX2NoID09ICdcXCcpIHsKKwkJCQkJCXBfY2ggPSAqKytwOworCQkJCQkJaWYgKCFwX2NoKQorCQkJCQkJCXJldHVybiBXTV9BQk9SVF9BTEw7CisJCQkJCX0KKwkJCQkJaWYgKHRfY2ggPD0gcF9jaCAmJiB0X2NoID49IHByZXZfY2gpCisJCQkJCQltYXRjaGVkID0gMTsKKwkJCQkJZWxzZSBpZiAoKGZsYWdzICYgV01fQ0FTRUZPTEQpICYmIElTTE9XRVIodF9jaCkpIHsKKwkJCQkJCXVjaGFyIHRfY2hfdXBwZXIgPSB0b3VwcGVyKHRfY2gpOworCQkJCQkJaWYgKHRfY2hfdXBwZXIgPD0gcF9jaCAmJiB0X2NoX3VwcGVyID49IHByZXZfY2gpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0KKwkJCQkJcF9jaCA9IDA7IC8qIFRoaXMgbWFrZXMgInByZXZfY2giIGdldCBzZXQgdG8gMC4gKi8KKwkJCQl9IGVsc2UgaWYgKHBfY2ggPT0gJ1snICYmIHBbMV0gPT0gJzonKSB7CisJCQkJCWNvbnN0IHVjaGFyICpzOworCQkJCQlpbnQgaTsKKwkJCQkJZm9yIChzID0gcCArPSAyOyAocF9jaCA9ICpwKSAmJiBwX2NoICE9ICddJzsgcCsrKSB7fSAvKlNIQVJFRCBJVEVSQVRPUiovCisJCQkJCWlmICghcF9jaCkKKwkJCQkJCXJldHVybiBXTV9BQk9SVF9BTEw7CisJCQkJCWkgPSBwIC0gcyAtIDE7CisJCQkJCWlmIChpIDwgMCB8fCBwWy0xXSAhPSAnOicpIHsKKwkJCQkJCS8qIERpZG4ndCBmaW5kICI6XSIsIHNvIHRyZWF0IGxpa2UgYSBub3JtYWwgc2V0LiAqLworCQkJCQkJcCA9IHMgLSAyOworCQkJCQkJcF9jaCA9ICdbJzsKKwkJCQkJCWlmICh0X2NoID09IHBfY2gpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlpZiAoQ0NfRVEocyxpLCAiYWxudW0iKSkgeworCQkJCQkJaWYgKElTQUxOVU0odF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAiYWxwaGEiKSkgeworCQkJCQkJaWYgKElTQUxQSEEodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAiYmxhbmsiKSkgeworCQkJCQkJaWYgKElTQkxBTksodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAiY250cmwiKSkgeworCQkJCQkJaWYgKElTQ05UUkwodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAiZGlnaXQiKSkgeworCQkJCQkJaWYgKElTRElHSVQodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAiZ3JhcGgiKSkgeworCQkJCQkJaWYgKElTR1JBUEgodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAibG93ZXIiKSkgeworCQkJCQkJaWYgKElTTE9XRVIodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAicHJpbnQiKSkgeworCQkJCQkJaWYgKElTUFJJTlQodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAicHVuY3QiKSkgeworCQkJCQkJaWYgKElTUFVOQ1QodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAic3BhY2UiKSkgeworCQkJCQkJaWYgKElTU1BBQ0UodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAidXBwZXIiKSkgeworCQkJCQkJaWYgKElTVVBQRVIodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCQllbHNlIGlmICgoZmxhZ3MgJiBXTV9DQVNFRk9MRCkgJiYgSVNMT1dFUih0X2NoKSkKKwkJCQkJCQltYXRjaGVkID0gMTsKKwkJCQkJfSBlbHNlIGlmIChDQ19FUShzLGksICJ4ZGlnaXQiKSkgeworCQkJCQkJaWYgKElTWERJR0lUKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgLyogbWFsZm9ybWVkIFs6Y2xhc3M6XSBzdHJpbmcgKi8KKwkJCQkJCXJldHVybiBXTV9BQk9SVF9BTEw7CisJCQkJCXBfY2ggPSAwOyAvKiBUaGlzIG1ha2VzICJwcmV2X2NoIiBnZXQgc2V0IHRvIDAuICovCisJCQkJfSBlbHNlIGlmICh0X2NoID09IHBfY2gpCisJCQkJCW1hdGNoZWQgPSAxOworCQkJfSB3aGlsZSAocHJldl9jaCA9IHBfY2gsIChwX2NoID0gKisrcCkgIT0gJ10nKTsKKwkJCWlmIChtYXRjaGVkID09IG5lZ2F0ZWQgfHwKKwkJCSAgICAoKGZsYWdzICYgV01fUEFUSE5BTUUpICYmIHRfY2ggPT0gJy8nKSkKKwkJCQlyZXR1cm4gV01fTk9NQVRDSDsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJcmV0dXJuICp0ZXh0ID8gV01fTk9NQVRDSCA6IFdNX01BVENIOworfQorCisvKiBNYXRjaCB0aGUgInBhdHRlcm4iIGFnYWluc3QgdGhlICJ0ZXh0IiBzdHJpbmcuICovCitpbnQgd2lsZG1hdGNoKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnRleHQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gZG93aWxkKChjb25zdCB1Y2hhciopcGF0dGVybiwgKGNvbnN0IHVjaGFyKil0ZXh0LCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS93aWxkbWF0Y2guaCBiL3dpbGRtYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OTM2OTYKLS0tIC9kZXYvbnVsbAorKysgYi93aWxkbWF0Y2guaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIFdJTERNQVRDSF9ICisjZGVmaW5lIFdJTERNQVRDSF9ICisKKyNkZWZpbmUgV01fQ0FTRUZPTEQgMQorI2RlZmluZSBXTV9QQVRITkFNRSAyCisKKyNkZWZpbmUgV01fTk9NQVRDSCAxCisjZGVmaW5lIFdNX01BVENIIDAKKyNkZWZpbmUgV01fQUJPUlRfQUxMIC0xCisjZGVmaW5lIFdNX0FCT1JUX1RPX1NUQVJTVEFSIC0yCisKK2ludCB3aWxkbWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqdGV4dCwgdW5zaWduZWQgaW50IGZsYWdzKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvd29ya3RyZWUuYyBiL3dvcmt0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJhNGZkMwotLS0gL2Rldi9udWxsCisrKyBiL3dvcmt0cmVlLmMKQEAgLTAsMCArMSw1OTUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKwordm9pZCBmcmVlX3dvcmt0cmVlcyhzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMpCit7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gMDsgd29ya3RyZWVzW2ldOyBpKyspIHsKKwkJZnJlZSh3b3JrdHJlZXNbaV0tPnBhdGgpOworCQlmcmVlKHdvcmt0cmVlc1tpXS0+aWQpOworCQlmcmVlKHdvcmt0cmVlc1tpXS0+aGVhZF9yZWYpOworCQlmcmVlKHdvcmt0cmVlc1tpXS0+bG9ja19yZWFzb24pOworCQlmcmVlKHdvcmt0cmVlc1tpXSk7CisJfQorCWZyZWUgKHdvcmt0cmVlcyk7Cit9CisKKy8qKgorICogVXBkYXRlIGhlYWRfc2hhMSwgaGVhZF9yZWYgYW5kIGlzX2RldGFjaGVkIG9mIHRoZSBnaXZlbiB3b3JrdHJlZQorICovCitzdGF0aWMgdm9pZCBhZGRfaGVhZF9pbmZvKHN0cnVjdCB3b3JrdHJlZSAqd3QpCit7CisJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnRhcmdldDsKKworCXRhcmdldCA9IHJlZnNfcmVzb2x2ZV9yZWZfdW5zYWZlKGdldF93b3JrdHJlZV9yZWZfc3RvcmUod3QpLAorCQkJCQkgIkhFQUQiLAorCQkJCQkgMCwKKwkJCQkJICZ3dC0+aGVhZF9vaWQsICZmbGFncyk7CisJaWYgKCF0YXJnZXQpCisJCXJldHVybjsKKworCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKKwkJd3QtPmhlYWRfcmVmID0geHN0cmR1cCh0YXJnZXQpOworCWVsc2UKKwkJd3QtPmlzX2RldGFjaGVkID0gMTsKK30KKworLyoqCisgKiBnZXQgdGhlIG1haW4gd29ya3RyZWUKKyAqLworc3RhdGljIHN0cnVjdCB3b3JrdHJlZSAqZ2V0X21haW5fd29ya3RyZWUodm9pZCkKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKndvcmt0cmVlID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIHdvcmt0cmVlX3BhdGggPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmd29ya3RyZWVfcGF0aCwgZ2V0X2dpdF9jb21tb25fZGlyKCkpOworCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJndvcmt0cmVlX3BhdGgsICIvLiIpOworCWlmICghc3RyYnVmX3N0cmlwX3N1ZmZpeCgmd29ya3RyZWVfcGF0aCwgIi8uZ2l0IikpCisJCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJndvcmt0cmVlX3BhdGgsICIvLiIpOworCisJd29ya3RyZWUgPSB4Y2FsbG9jKDEsIHNpemVvZigqd29ya3RyZWUpKTsKKwl3b3JrdHJlZS0+cGF0aCA9IHN0cmJ1Zl9kZXRhY2goJndvcmt0cmVlX3BhdGgsIE5VTEwpOworCS8qCisJICogTkVFRFNXT1JLOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGEgc2Vjb25kYXJ5IHdvcmt0cmVlIGFuZAorCSAqIGNvbmZpZy53b3JrdHJlZSBpcyBwcmVzZW50LCBpc19iYXJlX3JlcG9zaXRvcnlfY2ZnIHdpbGwgcmVmbGVjdCB0aGUKKwkgKiBjb250ZW50cyBvZiBjb25maWcud29ya3RyZWUsIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIG1haW4gd29ya3RyZWUuCisJICogVGhpcyBtZWFucyB0aGF0IHdvcmt0cmVlLT5pc19iYXJlIG1heSBiZSBzZXQgdG8gMCBldmVuIGlmIHRoZSBtYWluCisJICogd29ya3RyZWUgaXMgY29uZmlndXJlZCB0byBiZSBiYXJlLgorCSAqLworCXdvcmt0cmVlLT5pc19iYXJlID0gKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPT0gMSkgfHwKKwkJaXNfYmFyZV9yZXBvc2l0b3J5KCk7CisJYWRkX2hlYWRfaW5mbyh3b3JrdHJlZSk7CisKKwlzdHJidWZfcmVsZWFzZSgmd29ya3RyZWVfcGF0aCk7CisJcmV0dXJuIHdvcmt0cmVlOworfQorCitzdGF0aWMgc3RydWN0IHdvcmt0cmVlICpnZXRfbGlua2VkX3dvcmt0cmVlKGNvbnN0IGNoYXIgKmlkKQoreworCXN0cnVjdCB3b3JrdHJlZSAqd29ya3RyZWUgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgd29ya3RyZWVfcGF0aCA9IFNUUkJVRl9JTklUOworCisJaWYgKCFpZCkKKwkJZGllKCJNaXNzaW5nIGxpbmtlZCB3b3JrdHJlZSBuYW1lIik7CisKKwlzdHJidWZfZ2l0X2NvbW1vbl9wYXRoKCZwYXRoLCB0aGVfcmVwb3NpdG9yeSwgIndvcmt0cmVlcy8lcy9naXRkaXIiLCBpZCk7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJndvcmt0cmVlX3BhdGgsIHBhdGguYnVmLCAwKSA8PSAwKQorCQkvKiBpbnZhbGlkIGdpdGRpciBmaWxlICovCisJCWdvdG8gZG9uZTsKKworCXN0cmJ1Zl9ydHJpbSgmd29ya3RyZWVfcGF0aCk7CisJaWYgKCFzdHJidWZfc3RyaXBfc3VmZml4KCZ3b3JrdHJlZV9wYXRoLCAiLy5naXQiKSkgeworCQlzdHJidWZfcmVzZXQoJndvcmt0cmVlX3BhdGgpOworCQlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJndvcmt0cmVlX3BhdGgsICIuIik7CisJCXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJndvcmt0cmVlX3BhdGgsICIvLiIpOworCX0KKworCXN0cmJ1Zl9yZXNldCgmcGF0aCk7CisJc3RyYnVmX2FkZGYoJnBhdGgsICIlcy93b3JrdHJlZXMvJXMvSEVBRCIsIGdldF9naXRfY29tbW9uX2RpcigpLCBpZCk7CisKKwl3b3JrdHJlZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp3b3JrdHJlZSkpOworCXdvcmt0cmVlLT5wYXRoID0gc3RyYnVmX2RldGFjaCgmd29ya3RyZWVfcGF0aCwgTlVMTCk7CisJd29ya3RyZWUtPmlkID0geHN0cmR1cChpZCk7CisJYWRkX2hlYWRfaW5mbyh3b3JrdHJlZSk7CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZ3b3JrdHJlZV9wYXRoKTsKKwlyZXR1cm4gd29ya3RyZWU7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY3VycmVudF93b3JrdHJlZShzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMpCit7CisJY2hhciAqZ2l0X2RpciA9IGFic29sdXRlX3BhdGhkdXAoZ2V0X2dpdF9kaXIoKSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyB3b3JrdHJlZXNbaV07IGkrKykgeworCQlzdHJ1Y3Qgd29ya3RyZWUgKnd0ID0gd29ya3RyZWVzW2ldOworCQljb25zdCBjaGFyICp3dF9naXRfZGlyID0gZ2V0X3dvcmt0cmVlX2dpdF9kaXIod3QpOworCisJCWlmICghZnNwYXRoY21wKGdpdF9kaXIsIGFic29sdXRlX3BhdGgod3RfZ2l0X2RpcikpKSB7CisJCQl3dC0+aXNfY3VycmVudCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlmcmVlKGdpdF9kaXIpOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfd29ya3RyZWUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqY29uc3QgKmEgPSBhXzsKKwljb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKmNvbnN0ICpiID0gYl87CisJcmV0dXJuIGZzcGF0aGNtcCgoKmEpLT5wYXRoLCAoKmIpLT5wYXRoKTsKK30KKworc3RydWN0IHdvcmt0cmVlICoqZ2V0X3dvcmt0cmVlcyh1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKipsaXN0ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkOworCWludCBjb3VudGVyID0gMCwgYWxsb2MgPSAyOworCisJQUxMT0NfQVJSQVkobGlzdCwgYWxsb2MpOworCisJbGlzdFtjb3VudGVyKytdID0gZ2V0X21haW5fd29ya3RyZWUoKTsKKworCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiJXMvd29ya3RyZWVzIiwgZ2V0X2dpdF9jb21tb25fZGlyKCkpOworCWRpciA9IG9wZW5kaXIocGF0aC5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlpZiAoZGlyKSB7CisJCXdoaWxlICgoZCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQkJc3RydWN0IHdvcmt0cmVlICpsaW5rZWQgPSBOVUxMOworCQkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZC0+ZF9uYW1lKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKChsaW5rZWQgPSBnZXRfbGlua2VkX3dvcmt0cmVlKGQtPmRfbmFtZSkpKSB7CisJCQkJQUxMT0NfR1JPVyhsaXN0LCBjb3VudGVyICsgMSwgYWxsb2MpOworCQkJCWxpc3RbY291bnRlcisrXSA9IGxpbmtlZDsKKwkJCX0KKwkJfQorCQljbG9zZWRpcihkaXIpOworCX0KKwlBTExPQ19HUk9XKGxpc3QsIGNvdW50ZXIgKyAxLCBhbGxvYyk7CisJbGlzdFtjb3VudGVyXSA9IE5VTEw7CisKKwlpZiAoZmxhZ3MgJiBHV1RfU09SVF9MSU5LRUQpCisJCS8qCisJCSAqIGRvbid0IHNvcnQgdGhlIGZpcnN0IGl0ZW0gKG1haW4gd29ya3RyZWUpLCB3aGljaCB3aWxsCisJCSAqIGFsd2F5cyBiZSB0aGUgZmlyc3QKKwkJICovCisJCVFTT1JUKGxpc3QgKyAxLCBjb3VudGVyIC0gMSwgY29tcGFyZV93b3JrdHJlZSk7CisKKwltYXJrX2N1cnJlbnRfd29ya3RyZWUobGlzdCk7CisJcmV0dXJuIGxpc3Q7Cit9CisKK2NvbnN0IGNoYXIgKmdldF93b3JrdHJlZV9naXRfZGlyKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpCit7CisJaWYgKCF3dCkKKwkJcmV0dXJuIGdldF9naXRfZGlyKCk7CisJZWxzZSBpZiAoIXd0LT5pZCkKKwkJcmV0dXJuIGdldF9naXRfY29tbW9uX2RpcigpOworCWVsc2UKKwkJcmV0dXJuIGdpdF9jb21tb25fcGF0aCgid29ya3RyZWVzLyVzIiwgd3QtPmlkKTsKK30KKworc3RhdGljIHN0cnVjdCB3b3JrdHJlZSAqZmluZF93b3JrdHJlZV9ieV9zdWZmaXgoc3RydWN0IHdvcmt0cmVlICoqbGlzdCwKKwkJCQkJCWNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKmZvdW5kID0gTlVMTDsKKwlpbnQgbnJfZm91bmQgPSAwLCBzdWZmaXhsZW47CisKKwlzdWZmaXhsZW4gPSBzdHJsZW4oc3VmZml4KTsKKwlpZiAoIXN1ZmZpeGxlbikKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKDsgKmxpc3QgJiYgbnJfZm91bmQgPCAyOyBsaXN0KyspIHsKKwkJY29uc3QgY2hhcgkqcGF0aAkgPSAoKmxpc3QpLT5wYXRoOworCQlpbnQJCSBwYXRobGVuID0gc3RybGVuKHBhdGgpOworCQlpbnQJCSBzdGFydAkgPSBwYXRobGVuIC0gc3VmZml4bGVuOworCisJCS8qIHN1ZmZpeCBtdXN0IHN0YXJ0IGF0IGRpcmVjdG9yeSBib3VuZGFyeSAqLworCQlpZiAoKCFzdGFydCB8fCAoc3RhcnQgPiAwICYmIGlzX2Rpcl9zZXAocGF0aFtzdGFydCAtIDFdKSkpICYmCisJCSAgICAhZnNwYXRoY21wKHN1ZmZpeCwgcGF0aCArIHN0YXJ0KSkgeworCQkJZm91bmQgPSAqbGlzdDsKKwkJCW5yX2ZvdW5kKys7CisJCX0KKwl9CisJcmV0dXJuIG5yX2ZvdW5kID09IDEgPyBmb3VuZCA6IE5VTEw7Cit9CisKK3N0cnVjdCB3b3JrdHJlZSAqZmluZF93b3JrdHJlZShzdHJ1Y3Qgd29ya3RyZWUgKipsaXN0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgICBjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHdvcmt0cmVlICp3dDsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKworCWlmICgod3QgPSBmaW5kX3dvcmt0cmVlX2J5X3N1ZmZpeChsaXN0LCBhcmcpKSkKKwkJcmV0dXJuIHd0OworCisJaWYgKHByZWZpeCkKKwkJYXJnID0gdG9fZnJlZSA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGFyZyk7CisJd3QgPSBmaW5kX3dvcmt0cmVlX2J5X3BhdGgobGlzdCwgYXJnKTsKKwlmcmVlKHRvX2ZyZWUpOworCXJldHVybiB3dDsKK30KKworc3RydWN0IHdvcmt0cmVlICpmaW5kX3dvcmt0cmVlX2J5X3BhdGgoc3RydWN0IHdvcmt0cmVlICoqbGlzdCwgY29uc3QgY2hhciAqcCkKK3sKKwljaGFyICpwYXRoID0gcmVhbF9wYXRoZHVwKHAsIDApOworCisJaWYgKCFwYXRoKQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKDsgKmxpc3Q7IGxpc3QrKykgeworCQljb25zdCBjaGFyICp3dF9wYXRoID0gcmVhbF9wYXRoX2lmX3ZhbGlkKCgqbGlzdCktPnBhdGgpOworCisJCWlmICh3dF9wYXRoICYmICFmc3BhdGhjbXAocGF0aCwgd3RfcGF0aCkpCisJCQlicmVhazsKKwl9CisJZnJlZShwYXRoKTsKKwlyZXR1cm4gKmxpc3Q7Cit9CisKK2ludCBpc19tYWluX3dvcmt0cmVlKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpCit7CisJcmV0dXJuICF3dC0+aWQ7Cit9CisKK2NvbnN0IGNoYXIgKndvcmt0cmVlX2xvY2tfcmVhc29uKHN0cnVjdCB3b3JrdHJlZSAqd3QpCit7CisJYXNzZXJ0KCFpc19tYWluX3dvcmt0cmVlKHd0KSk7CisKKwlpZiAoIXd0LT5sb2NrX3JlYXNvbl92YWxpZCkgeworCQlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkc3RyKCZwYXRoLCB3b3JrdHJlZV9naXRfcGF0aCh3dCwgImxvY2tlZCIpKTsKKwkJaWYgKGZpbGVfZXhpc3RzKHBhdGguYnVmKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBsb2NrX3JlYXNvbiA9IFNUUkJVRl9JTklUOworCQkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmxvY2tfcmVhc29uLCBwYXRoLmJ1ZiwgMCkgPCAwKQorCQkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gcmVhZCAnJXMnIiksIHBhdGguYnVmKTsKKwkJCXN0cmJ1Zl90cmltKCZsb2NrX3JlYXNvbik7CisJCQl3dC0+bG9ja19yZWFzb24gPSBzdHJidWZfZGV0YWNoKCZsb2NrX3JlYXNvbiwgTlVMTCk7CisJCX0gZWxzZQorCQkJd3QtPmxvY2tfcmVhc29uID0gTlVMTDsKKwkJd3QtPmxvY2tfcmVhc29uX3ZhbGlkID0gMTsKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCX0KKworCXJldHVybiB3dC0+bG9ja19yZWFzb247Cit9CisKKy8qIGNvbnZlbmllbnQgd3JhcHBlciB0byBkZWFsIHdpdGggTlVMTCBzdHJidWYgKi8KK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hZGRmX2dlbnRseShzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCisJaWYgKCFidWYpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm10KTsKKwlzdHJidWZfdmFkZGYoYnVmLCBmbXQsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK2ludCB2YWxpZGF0ZV93b3JrdHJlZShjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LCBzdHJ1Y3Qgc3RyYnVmICplcnJtc2csCisJCSAgICAgIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgd3RfcGF0aCA9IFNUUkJVRl9JTklUOworCWNoYXIgKnBhdGggPSBOVUxMOworCWludCBlcnIsIHJldCA9IC0xOworCisJc3RyYnVmX2FkZGYoJnd0X3BhdGgsICIlcy8uZ2l0Iiwgd3QtPnBhdGgpOworCisJaWYgKGlzX21haW5fd29ya3RyZWUod3QpKSB7CisJCWlmIChpc19kaXJlY3Rvcnkod3RfcGF0aC5idWYpKSB7CisJCQlyZXQgPSAwOworCQkJZ290byBkb25lOworCQl9CisJCS8qCisJCSAqIE1haW4gd29ya3RyZWUgdXNpbmcgLmdpdCBmaWxlIHRvIHBvaW50IHRvIHRoZQorCQkgKiByZXBvc2l0b3J5IHdvdWxkIG1ha2UgaXQgaW1wb3NzaWJsZSB0byBrbm93IHdoZXJlCisJCSAqIHRoZSBhY3R1YWwgd29ya3RyZWUgaXMgaWYgdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZAorCQkgKiBmcm9tIGFub3RoZXIgd29ya3RyZWUuIE5vIC5naXQgZmlsZSBzdXBwb3J0IGZvciBub3cuCisJCSAqLworCQlzdHJidWZfYWRkZl9nZW50bHkoZXJybXNnLAorCQkJCSAgIF8oIiclcycgYXQgbWFpbiB3b3JraW5nIHRyZWUgaXMgbm90IHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSIpLAorCQkJCSAgIHd0X3BhdGguYnVmKTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogTWFrZSBzdXJlICJnaXRkaXIiIGZpbGUgcG9pbnRzIHRvIGEgcmVhbCAuZ2l0IGZpbGUgYW5kIHRoYXQKKwkgKiBmaWxlIHBvaW50cyBiYWNrIGhlcmUuCisJICovCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHd0LT5wYXRoKSkgeworCQlzdHJidWZfYWRkZl9nZW50bHkoZXJybXNnLAorCQkJCSAgIF8oIiclcycgZmlsZSBkb2VzIG5vdCBjb250YWluIGFic29sdXRlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZSBsb2NhdGlvbiIpLAorCQkJCSAgIGdpdF9jb21tb25fcGF0aCgid29ya3RyZWVzLyVzL2dpdGRpciIsIHd0LT5pZCkpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGZsYWdzICYgV1RfVkFMSURBVEVfV09SS1RSRUVfTUlTU0lOR19PSyAmJgorCSAgICAhZmlsZV9leGlzdHMod3QtPnBhdGgpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIWZpbGVfZXhpc3RzKHd0X3BhdGguYnVmKSkgeworCQlzdHJidWZfYWRkZl9nZW50bHkoZXJybXNnLCBfKCInJXMnIGRvZXMgbm90IGV4aXN0IiksIHd0X3BhdGguYnVmKTsKKwkJZ290byBkb25lOworCX0KKworCXBhdGggPSB4c3RyZHVwX29yX251bGwocmVhZF9naXRmaWxlX2dlbnRseSh3dF9wYXRoLmJ1ZiwgJmVycikpOworCWlmICghcGF0aCkgeworCQlzdHJidWZfYWRkZl9nZW50bHkoZXJybXNnLCBfKCInJXMnIGlzIG5vdCBhIC5naXQgZmlsZSwgZXJyb3IgY29kZSAlZCIpLAorCQkJCSAgIHd0X3BhdGguYnVmLCBlcnIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcmV0ID0gZnNwYXRoY21wKHBhdGgsIHJlYWxfcGF0aChnaXRfY29tbW9uX3BhdGgoIndvcmt0cmVlcy8lcyIsIHd0LT5pZCkpKTsKKworCWlmIChyZXQpCisJCXN0cmJ1Zl9hZGRmX2dlbnRseShlcnJtc2csIF8oIiclcycgZG9lcyBub3QgcG9pbnQgYmFjayB0byAnJXMnIiksCisJCQkJICAgd3QtPnBhdGgsIGdpdF9jb21tb25fcGF0aCgid29ya3RyZWVzLyVzIiwgd3QtPmlkKSk7Citkb25lOgorCWZyZWUocGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJnd0X3BhdGgpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgdXBkYXRlX3dvcmt0cmVlX2xvY2F0aW9uKHN0cnVjdCB3b3JrdHJlZSAqd3QsIGNvbnN0IGNoYXIgKnBhdGhfKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJaWYgKGlzX21haW5fd29ya3RyZWUod3QpKQorCQlCVUcoImNhbid0IHJlbG9jYXRlIG1haW4gd29ya3RyZWUiKTsKKworCXN0cmJ1Zl9yZWFscGF0aCgmcGF0aCwgcGF0aF8sIDEpOworCWlmIChmc3BhdGhjbXAod3QtPnBhdGgsIHBhdGguYnVmKSkgeworCQl3cml0ZV9maWxlKGdpdF9jb21tb25fcGF0aCgid29ya3RyZWVzLyVzL2dpdGRpciIsIHd0LT5pZCksCisJCQkgICAiJXMvLmdpdCIsIHBhdGguYnVmKTsKKwkJZnJlZSh3dC0+cGF0aCk7CisJCXd0LT5wYXRoID0gc3RyYnVmX2RldGFjaCgmcGF0aCwgTlVMTCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKK30KKworaW50IGlzX3dvcmt0cmVlX2JlaW5nX3JlYmFzZWQoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnRhcmdldCkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlIHN0YXRlOworCWludCBmb3VuZF9yZWJhc2U7CisKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKwlmb3VuZF9yZWJhc2UgPSB3dF9zdGF0dXNfY2hlY2tfcmViYXNlKHd0LCAmc3RhdGUpICYmCisJCSgoc3RhdGUucmViYXNlX2luX3Byb2dyZXNzIHx8CisJCSAgc3RhdGUucmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzKSAmJgorCQkgc3RhdGUuYnJhbmNoICYmCisJCSBzdGFydHNfd2l0aCh0YXJnZXQsICJyZWZzL2hlYWRzLyIpICYmCisJCSAhc3RyY21wKHN0YXRlLmJyYW5jaCwgdGFyZ2V0ICsgc3RybGVuKCJyZWZzL2hlYWRzLyIpKSk7CisJZnJlZShzdGF0ZS5icmFuY2gpOworCWZyZWUoc3RhdGUub250byk7CisJcmV0dXJuIGZvdW5kX3JlYmFzZTsKK30KKworaW50IGlzX3dvcmt0cmVlX2JlaW5nX2Jpc2VjdGVkKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsCisJCQkgICAgICAgY29uc3QgY2hhciAqdGFyZ2V0KQoreworCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgc3RhdGU7CisJaW50IGZvdW5kX3JlYmFzZTsKKworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCWZvdW5kX3JlYmFzZSA9IHd0X3N0YXR1c19jaGVja19iaXNlY3Qod3QsICZzdGF0ZSkgJiYKKwkJc3RhdGUuYnJhbmNoICYmCisJCXN0YXJ0c193aXRoKHRhcmdldCwgInJlZnMvaGVhZHMvIikgJiYKKwkJIXN0cmNtcChzdGF0ZS5icmFuY2gsIHRhcmdldCArIHN0cmxlbigicmVmcy9oZWFkcy8iKSk7CisJZnJlZShzdGF0ZS5icmFuY2gpOworCXJldHVybiBmb3VuZF9yZWJhc2U7Cit9CisKKy8qCisgKiBub3RlOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBhYmxlIHRvIGRldGVjdCBzaGFyZWQgc3ltcmVmIGV2ZW4gaWYKKyAqIEhFQUQgaXMgdGVtcG9yYXJpbHkgZGV0YWNoZWQgKGUuZy4gaW4gdGhlIG1pZGRsZSBvZiByZWJhc2Ugb3IKKyAqIGJpc2VjdCkuIE5ldyBjb21tYW5kcyB0aGF0IGRvIHNpbWlsYXIgdGhpbmdzIHNob3VsZCB1cGRhdGUgdGhpcworICogZnVuY3Rpb24gYXMgd2VsbC4KKyAqLworY29uc3Qgc3RydWN0IHdvcmt0cmVlICpmaW5kX3NoYXJlZF9zeW1yZWYoY29uc3QgY2hhciAqc3ltcmVmLAorCQkJCQkgIGNvbnN0IGNoYXIgKnRhcmdldCkKK3sKKwljb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKmV4aXN0aW5nID0gTlVMTDsKKwlzdGF0aWMgc3RydWN0IHdvcmt0cmVlICoqd29ya3RyZWVzOworCWludCBpID0gMDsKKworCWlmICh3b3JrdHJlZXMpCisJCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisJd29ya3RyZWVzID0gZ2V0X3dvcmt0cmVlcygwKTsKKworCWZvciAoaSA9IDA7IHdvcmt0cmVlc1tpXTsgaSsrKSB7CisJCXN0cnVjdCB3b3JrdHJlZSAqd3QgPSB3b3JrdHJlZXNbaV07CisJCWNvbnN0IGNoYXIgKnN5bXJlZl90YXJnZXQ7CisJCXN0cnVjdCByZWZfc3RvcmUgKnJlZnM7CisJCWludCBmbGFnczsKKworCQlpZiAod3QtPmlzX2JhcmUpCisJCQljb250aW51ZTsKKworCQlpZiAod3QtPmlzX2RldGFjaGVkICYmICFzdHJjbXAoc3ltcmVmLCAiSEVBRCIpKSB7CisJCQlpZiAoaXNfd29ya3RyZWVfYmVpbmdfcmViYXNlZCh3dCwgdGFyZ2V0KSkgeworCQkJCWV4aXN0aW5nID0gd3Q7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaXNfd29ya3RyZWVfYmVpbmdfYmlzZWN0ZWQod3QsIHRhcmdldCkpIHsKKwkJCQlleGlzdGluZyA9IHd0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJcmVmcyA9IGdldF93b3JrdHJlZV9yZWZfc3RvcmUod3QpOworCQlzeW1yZWZfdGFyZ2V0ID0gcmVmc19yZXNvbHZlX3JlZl91bnNhZmUocmVmcywgc3ltcmVmLCAwLAorCQkJCQkJCU5VTEwsICZmbGFncyk7CisJCWlmICgoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpICYmCisJCSAgICBzeW1yZWZfdGFyZ2V0ICYmICFzdHJjbXAoc3ltcmVmX3RhcmdldCwgdGFyZ2V0KSkgeworCQkJZXhpc3RpbmcgPSB3dDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGV4aXN0aW5nOworfQorCitpbnQgc3VibW9kdWxlX3VzZXNfd29ya3RyZWVzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqc3VibW9kdWxlX2dpdGRpcjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVwb3NpdG9yeV9mb3JtYXQgZm9ybWF0ID0gUkVQT1NJVE9SWV9GT1JNQVRfSU5JVDsKKworCXN1Ym1vZHVsZV9naXRkaXIgPSBnaXRfcGF0aGR1cF9zdWJtb2R1bGUocGF0aCwgIiVzIiwgIiIpOworCWlmICghc3VibW9kdWxlX2dpdGRpcikKKwkJcmV0dXJuIDA7CisKKwkvKiBUaGUgZW52IHdvdWxkIGJlIHNldCBmb3IgdGhlIHN1cGVycHJvamVjdC4gKi8KKwlnZXRfY29tbW9uX2Rpcl9ub2Vudigmc2IsIHN1Ym1vZHVsZV9naXRkaXIpOworCWZyZWUoc3VibW9kdWxlX2dpdGRpcik7CisKKwkvKgorCSAqIFRoZSBjaGVjayBiZWxvdyBpcyBvbmx5IGtub3duIHRvIGJlIGdvb2QgZm9yIHJlcG9zaXRvcnkgZm9ybWF0CisJICogdmVyc2lvbiAwIGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgdGhpcyBjb2RlLgorCSAqLworCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiL2NvbmZpZyIpOworCXJlYWRfcmVwb3NpdG9yeV9mb3JtYXQoJmZvcm1hdCwgc2IuYnVmKTsKKwlpZiAoZm9ybWF0LnZlcnNpb24gIT0gMCkgeworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQljbGVhcl9yZXBvc2l0b3J5X2Zvcm1hdCgmZm9ybWF0KTsKKwkJcmV0dXJuIDE7CisJfQorCWNsZWFyX3JlcG9zaXRvcnlfZm9ybWF0KCZmb3JtYXQpOworCisJLyogUmVwbGFjZSBjb25maWcgYnkgd29ya3RyZWVzLiAqLworCXN0cmJ1Zl9zZXRsZW4oJnNiLCBzYi5sZW4gLSBzdHJsZW4oImNvbmZpZyIpKTsKKwlzdHJidWZfYWRkc3RyKCZzYiwgIndvcmt0cmVlcyIpOworCisJLyogU2VlIGlmIHRoZXJlIGlzIGFueSBmaWxlIGluc2lkZSB0aGUgd29ya3RyZWVzIGRpcmVjdG9yeS4gKi8KKwlkaXIgPSBvcGVuZGlyKHNiLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCWlmICghZGlyKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgoZCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gMTsKKwkJYnJlYWs7CisJfQorCWNsb3NlZGlyKGRpcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHBhcnNlX3dvcmt0cmVlX3JlZihjb25zdCBjaGFyICp3b3JrdHJlZV9yZWYsIGNvbnN0IGNoYXIgKipuYW1lLAorCQkgICAgICAgaW50ICpuYW1lX2xlbmd0aCwgY29uc3QgY2hhciAqKnJlZikKK3sKKwlpZiAoc2tpcF9wcmVmaXgod29ya3RyZWVfcmVmLCAibWFpbi13b3JrdHJlZS8iLCAmd29ya3RyZWVfcmVmKSkgeworCQlpZiAoISp3b3JrdHJlZV9yZWYpCisJCQlyZXR1cm4gLTE7CisJCWlmIChuYW1lKQorCQkJKm5hbWUgPSBOVUxMOworCQlpZiAobmFtZV9sZW5ndGgpCisJCQkqbmFtZV9sZW5ndGggPSAwOworCQlpZiAocmVmKQorCQkJKnJlZiA9IHdvcmt0cmVlX3JlZjsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChza2lwX3ByZWZpeCh3b3JrdHJlZV9yZWYsICJ3b3JrdHJlZXMvIiwgJndvcmt0cmVlX3JlZikpIHsKKwkJY29uc3QgY2hhciAqc2xhc2ggPSBzdHJjaHIod29ya3RyZWVfcmVmLCAnLycpOworCisJCWlmICghc2xhc2ggfHwgc2xhc2ggPT0gd29ya3RyZWVfcmVmIHx8ICFzbGFzaFsxXSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKG5hbWUpCisJCQkqbmFtZSA9IHdvcmt0cmVlX3JlZjsKKwkJaWYgKG5hbWVfbGVuZ3RoKQorCQkJKm5hbWVfbGVuZ3RoID0gc2xhc2ggLSB3b3JrdHJlZV9yZWY7CisJCWlmIChyZWYpCisJCQkqcmVmID0gc2xhc2ggKyAxOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCit2b2lkIHN0cmJ1Zl93b3JrdHJlZV9yZWYoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXN3aXRjaCAocmVmX3R5cGUocmVmbmFtZSkpIHsKKwljYXNlIFJFRl9UWVBFX1BTRVVET1JFRjoKKwljYXNlIFJFRl9UWVBFX1BFUl9XT1JLVFJFRToKKwkJaWYgKHd0ICYmICF3dC0+aXNfY3VycmVudCkgeworCQkJaWYgKGlzX21haW5fd29ya3RyZWUod3QpKQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJtYWluLXdvcmt0cmVlLyIpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9hZGRmKHNiLCAid29ya3RyZWVzLyVzLyIsIHd0LT5pZCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJFRl9UWVBFX01BSU5fUFNFVURPUkVGOgorCWNhc2UgUkVGX1RZUEVfT1RIRVJfUFNFVURPUkVGOgorCQlicmVhazsKKworCWNhc2UgUkVGX1RZUEVfTk9STUFMOgorCQkvKgorCQkgKiBGb3Igc2hhcmVkIHJlZnMsIGRvbid0IHByZWZpeCB3b3JrdHJlZXMvIG9yCisJCSAqIG1haW4td29ya3RyZWUvLiBJdCdzIG5vdCBuZWNlc3NhcnkgYW5kCisJCSAqIGZpbGVzLWJhY2tlbmQuYyBjYW4ndCBoYW5kbGUgaXQgYW55d2F5LgorCQkgKi8KKwkJYnJlYWs7CisJfQorCXN0cmJ1Zl9hZGRzdHIoc2IsIHJlZm5hbWUpOworfQorCitjb25zdCBjaGFyICp3b3JrdHJlZV9yZWYoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX3dvcmt0cmVlX3JlZih3dCwgJnNiLCByZWZuYW1lKTsKKwlyZXR1cm4gc2IuYnVmOworfQorCitpbnQgb3RoZXJfaGVhZF9yZWZzKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcywgKipwOworCWludCByZXQgPSAwOworCisJd29ya3RyZWVzID0gZ2V0X3dvcmt0cmVlcygwKTsKKwlmb3IgKHAgPSB3b3JrdHJlZXM7ICpwOyBwKyspIHsKKwkJc3RydWN0IHdvcmt0cmVlICp3dCA9ICpwOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJaW50IGZsYWc7CisKKwkJaWYgKHd0LT5pc19jdXJyZW50KQorCQkJY29udGludWU7CisKKwkJaWYgKCFyZWZzX3JlYWRfcmVmX2Z1bGwoZ2V0X21haW5fcmVmX3N0b3JlKHRoZV9yZXBvc2l0b3J5KSwKKwkJCQkJd29ya3RyZWVfcmVmKHd0LCAiSEVBRCIpLAorCQkJCQlSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkmb2lkLCAmZmxhZykpCisJCQlyZXQgPSBmbih3b3JrdHJlZV9yZWYod3QsICJIRUFEIiksICZvaWQsIGZsYWcsIGNiX2RhdGEpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3dvcmt0cmVlLmggYi93b3JrdHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDJhNmUKLS0tIC9kZXYvbnVsbAorKysgYi93b3JrdHJlZS5oCkBAIC0wLDAgKzEsMTUxIEBACisjaWZuZGVmIFdPUktUUkVFX0gKKyNkZWZpbmUgV09SS1RSRUVfSAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKK3N0cnVjdCBzdHJidWY7CisKK3N0cnVjdCB3b3JrdHJlZSB7CisJY2hhciAqcGF0aDsKKwljaGFyICppZDsKKwljaGFyICpoZWFkX3JlZjsJCS8qIE5VTEwgaWYgSEVBRCBpcyBicm9rZW4gb3IgZGV0YWNoZWQgKi8KKwljaGFyICpsb2NrX3JlYXNvbjsJLyogcHJpdmF0ZSAtIHVzZSB3b3JrdHJlZV9sb2NrX3JlYXNvbiAqLworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJaW50IGlzX2RldGFjaGVkOworCWludCBpc19iYXJlOworCWludCBpc19jdXJyZW50OworCWludCBsb2NrX3JlYXNvbl92YWxpZDsgLyogcHJpdmF0ZSAqLworfTsKKworLyogRnVuY3Rpb25zIGZvciBhY3Rpbmcgb24gdGhlIGluZm9ybWF0aW9uIGFib3V0IHdvcmt0cmVlcy4gKi8KKworI2RlZmluZSBHV1RfU09SVF9MSU5LRUQgKDEgPDwgMCkgLyoga2VlcHMgbGlua2VkIHdvcmt0cmVlcyBzb3J0ZWQgKi8KKworLyoKKyAqIEdldCB0aGUgd29ya3RyZWVzLiAgVGhlIHByaW1hcnkgd29ya3RyZWUgd2lsbCBhbHdheXMgYmUgdGhlIGZpcnN0IHJldHVybmVkLAorICogYW5kIGxpbmtlZCB3b3JrdHJlZXMgd2lsbCBiZSBwb2ludGVkIHRvIGJ5ICduZXh0JyBpbiBlYWNoIHN1YnNlcXVlbnQKKyAqIHdvcmt0cmVlLiAgTm8gc3BlY2lmaWMgb3JkZXJpbmcgaXMgZG9uZSBvbiB0aGUgbGlua2VkIHdvcmt0cmVlcy4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBtZW1vcnkgZnJvbSB0aGUgcmV0dXJuZWQKKyAqIHdvcmt0cmVlKHMpLgorICovCitzdHJ1Y3Qgd29ya3RyZWUgKipnZXRfd29ya3RyZWVzKHVuc2lnbmVkIGZsYWdzKTsKKworLyoKKyAqIFJldHVybnMgMSBpZiBsaW5rZWQgd29ya3RyZWVzIGV4aXN0LCAwIG90aGVyd2lzZS4KKyAqLworaW50IHN1Ym1vZHVsZV91c2VzX3dvcmt0cmVlcyhjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIFJldHVybiBnaXQgZGlyIG9mIHRoZSB3b3JrdHJlZS4gTm90ZSB0aGF0IHRoZSBwYXRoIG1heSBiZSByZWxhdGl2ZS4KKyAqIElmIHd0IGlzIE5VTEwsIGdpdCBkaXIgb2YgY3VycmVudCB3b3JrdHJlZSBpcyByZXR1cm5lZC4KKyAqLworY29uc3QgY2hhciAqZ2V0X3dvcmt0cmVlX2dpdF9kaXIoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCk7CisKKy8qCisgKiBTZWFyY2ggZm9yIHRoZSB3b3JrdHJlZSBpZGVudGlmaWVkIHVuYW1iaWd1b3VzbHkgYnkgYGFyZ2AgLS0gdHlwaWNhbGx5CisgKiBzdXBwbGllZCBieSB0aGUgdXNlciB2aWEgdGhlIGNvbW1hbmQtbGluZSAtLSB3aGljaCBtYXkgYmUgYSBwYXRobmFtZSBvciBzb21lCisgKiBzaG9ydGhhbmQgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYSB3b3JrdHJlZSwgdGh1cyBtYWtpbmcgaXQgY29udmVuaWVudCBmb3IgdGhlCisgKiB1c2VyIHRvIHNwZWNpZnkgYSB3b3JrdHJlZSB3aXRoIG1pbmltYWwgdHlwaW5nLiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBsYXN0CisgKiBjb21wb25lbnQgKHNheSwgImZvbyIpIG9mIGEgd29ya3RyZWUncyBwYXRobmFtZSBpcyB1bmlxdWUgYW1vbmcgd29ya3RyZWVzCisgKiAoc2F5LCAid29yay9mb28iIGFuZCAid29yay9iYXIiKSwgaXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHdvcmt0cmVlCisgKiB1bmFtYmlndW91c2x5LgorICoKKyAqIGBwcmVmaXhgIHNob3VsZCBiZSB0aGUgYHByZWZpeGAgaGFuZGVkIHRvIHRvcC1sZXZlbCBHaXQgY29tbWFuZHMgYWxvbmcgd2l0aAorICogYGFyZ2NgIGFuZCBgYXJndmAuCisgKgorICogUmV0dXJuIHRoZSB3b3JrdHJlZSBpZGVudGlmaWVkIGJ5IGBhcmdgLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworc3RydWN0IHdvcmt0cmVlICpmaW5kX3dvcmt0cmVlKHN0cnVjdCB3b3JrdHJlZSAqKmxpc3QsCisJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmFyZyk7CisKKy8qCisgKiBSZXR1cm4gdGhlIHdvcmt0cmVlIGNvcnJlc3BvbmRpbmcgdG8gYHBhdGhgLCBvciBOVUxMIGlmIG5vIHN1Y2ggd29ya3RyZWUKKyAqIGV4aXN0cy4KKyAqLworc3RydWN0IHdvcmt0cmVlICpmaW5kX3dvcmt0cmVlX2J5X3BhdGgoc3RydWN0IHdvcmt0cmVlICoqLCBjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB3b3JrdHJlZSBpcyB0aGUgbWFpbiBvbmUuCisgKi8KK2ludCBpc19tYWluX3dvcmt0cmVlKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QpOworCisvKgorICogUmV0dXJuIHRoZSByZWFzb24gc3RyaW5nIGlmIHRoZSBnaXZlbiB3b3JrdHJlZSBpcyBsb2NrZWQgb3IgTlVMTAorICogb3RoZXJ3aXNlLgorICovCitjb25zdCBjaGFyICp3b3JrdHJlZV9sb2NrX3JlYXNvbihzdHJ1Y3Qgd29ya3RyZWUgKnd0KTsKKworI2RlZmluZSBXVF9WQUxJREFURV9XT1JLVFJFRV9NSVNTSU5HX09LICgxIDw8IDApCisKKy8qCisgKiBSZXR1cm4gemVybyBpZiB0aGUgd29ya3RyZWUgaXMgaW4gZ29vZCBjb25kaXRpb24uIEVycm9yIG1lc3NhZ2UgaXMKKyAqIHJldHVybmVkIGlmICJlcnJtc2ciIGlzIG5vdCBOVUxMLgorICovCitpbnQgdmFsaWRhdGVfd29ya3RyZWUoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKKwkJICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJybXNnLAorCQkgICAgICB1bnNpZ25lZCBmbGFncyk7CisKKy8qCisgKiBVcGRhdGUgd29ya3RyZWVzL3h4eC9naXRkaXIgd2l0aCB0aGUgbmV3IHBhdGguCisgKi8KK3ZvaWQgdXBkYXRlX3dvcmt0cmVlX2xvY2F0aW9uKHN0cnVjdCB3b3JrdHJlZSAqd3QsCisJCQkgICAgICBjb25zdCBjaGFyICpwYXRoXyk7CisKKy8qCisgKiBGcmVlIHVwIHRoZSBtZW1vcnkgZm9yIHdvcmt0cmVlKHMpCisgKi8KK3ZvaWQgZnJlZV93b3JrdHJlZXMoc3RydWN0IHdvcmt0cmVlICoqKTsKKworLyoKKyAqIENoZWNrIGlmIGEgcGVyLXdvcmt0cmVlIHN5bXJlZiBwb2ludHMgdG8gYSByZWYgaW4gdGhlIG1haW4gd29ya3RyZWUKKyAqIG9yIGFueSBsaW5rZWQgd29ya3RyZWUsIGFuZCByZXR1cm4gdGhlIHdvcmt0cmVlIHRoYXQgaG9sZHMgdGhlIHJlZiwKKyAqIG9yIE5VTEwgb3RoZXJ3aXNlLiBUaGUgcmVzdWx0IG1heSBiZSBkZXN0cm95ZWQgYnkgdGhlIG5leHQgY2FsbC4KKyAqLworY29uc3Qgc3RydWN0IHdvcmt0cmVlICpmaW5kX3NoYXJlZF9zeW1yZWYoY29uc3QgY2hhciAqc3ltcmVmLAorCQkJCQkgIGNvbnN0IGNoYXIgKnRhcmdldCk7CisKKy8qCisgKiBTaW1pbGFyIHRvIGhlYWRfcmVmKCkgZm9yIGFsbCBIRUFEcyBfZXhjZXB0XyBvbmUgZnJvbSB0aGUgY3VycmVudAorICogd29ya3RyZWUsIHdoaWNoIGlzIGNvdmVyZWQgYnkgaGVhZF9yZWYoKS4KKyAqLworaW50IG90aGVyX2hlYWRfcmVmcyhlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CisKK2ludCBpc193b3JrdHJlZV9iZWluZ19yZWJhc2VkKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsIGNvbnN0IGNoYXIgKnRhcmdldCk7CitpbnQgaXNfd29ya3RyZWVfYmVpbmdfYmlzZWN0ZWQoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwgY29uc3QgY2hhciAqdGFyZ2V0KTsKKworLyoKKyAqIFNpbWlsYXIgdG8gZ2l0X3BhdGgoKSBidXQgY2FuIHByb2R1Y2UgcGF0aHMgZm9yIGEgc3BlY2lmaWVkCisgKiB3b3JrdHJlZSBpbnN0ZWFkIG9mIGN1cnJlbnQgb25lCisgKi8KK2NvbnN0IGNoYXIgKndvcmt0cmVlX2dpdF9wYXRoKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsCisJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworLyoKKyAqIFBhcnNlIGEgd29ya3RyZWUgcmVmIChpLmUuIHdpdGggcHJlZml4IG1haW4td29ya3RyZWUvIG9yCisgKiB3b3JrdHJlZXMvKSBhbmQgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgd29ya3RyZWUncyBuYW1lIGFuZAorICogbGVuZ3RoIChvciBOVUxMIGFuZCB6ZXJvIGlmIGl0J3MgbWFpbiB3b3JrdHJlZSksIGFuZCByZWYuCisgKgorICogQWxsIG5hbWUsIG5hbWVfbGVuZ3RoIGFuZCByZWYgYXJndW1lbnRzIGNvdWxkIGJlIE5VTEwuCisgKi8KK2ludCBwYXJzZV93b3JrdHJlZV9yZWYoY29uc3QgY2hhciAqd29ya3RyZWVfcmVmLCBjb25zdCBjaGFyICoqbmFtZSwKKwkJICAgICAgIGludCAqbmFtZV9sZW5ndGgsIGNvbnN0IGNoYXIgKipyZWYpOworCisvKgorICogUmV0dXJuIGEgcmVmbmFtZSBzdWl0YWJsZSBmb3IgYWNjZXNzIGZyb20gdGhlIGN1cnJlbnQgcmVmIHN0b3JlLgorICovCit2b2lkIHN0cmJ1Zl93b3JrdHJlZV9yZWYoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSBjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyoKKyAqIFJldHVybiBhIHJlZm5hbWUgc3VpdGFibGUgZm9yIGFjY2VzcyBmcm9tIHRoZSBjdXJyZW50IHJlZgorICogc3RvcmUuIFRoZSByZXN1bHQgd2lsbCBiZSBkZXN0cm95ZWQgYXQgdGhlIG5leHQgY2FsbC4KKyAqLworY29uc3QgY2hhciAqd29ya3RyZWVfcmVmKGNvbnN0IHN0cnVjdCB3b3JrdHJlZSAqd3QsCisJCQkgY29uc3QgY2hhciAqcmVmbmFtZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvd3JhcC1mb3ItYmluLnNoIGIvd3JhcC1mb3ItYmluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODUxYjgKLS0tIC9kZXYvbnVsbAorKysgYi93cmFwLWZvci1iaW4uc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKKyMgd3JhcC1mb3ItYmluLnNoOiBUZW1wbGF0ZSBmb3IgZ2l0IGV4ZWN1dGFibGUgd3JhcHBlciBzY3JpcHRzCisjIHRvIHJ1biB0ZXN0IHN1aXRlIGFnYWluc3Qgc2FuZGJveCwgYnV0IHdpdGggb25seSBiaW5kaXItaW5zdGFsbGVkCisjIGV4ZWN1dGFibGVzIGluIFBBVEguICBUaGUgTWFrZWZpbGUgY29waWVzIHRoaXMgaW50byB2YXJpb3VzCisjIGZpbGVzIGluIGJpbi13cmFwcGVycywgc3Vic3RpdHV0aW5nCisjIEBAQlVJTERfRElSQEAgYW5kIEBAUFJPR0BALgorCitHSVRfRVhFQ19QQVRIPSdAQEJVSUxEX0RJUkBAJworaWYgdGVzdCAtbiAiJE5PX1NFVF9HSVRfVEVNUExBVEVfRElSIgordGhlbgorCXVuc2V0IEdJVF9URU1QTEFURV9ESVIKK2Vsc2UKKwlHSVRfVEVNUExBVEVfRElSPSdAQEJVSUxEX0RJUkBAL3RlbXBsYXRlcy9ibHQnCisJZXhwb3J0IEdJVF9URU1QTEFURV9ESVIKK2ZpCitHSVRQRVJMTElCPSdAQEJVSUxEX0RJUkBAL3BlcmwvYnVpbGQvbGliJyIke0dJVFBFUkxMSUI6KzokR0lUUEVSTExJQn0iCitHSVRfVEVYVERPTUFJTkRJUj0nQEBCVUlMRF9ESVJAQC9wby9idWlsZC9sb2NhbGUnCitQQVRIPSdAQEJVSUxEX0RJUkBAL2Jpbi13cmFwcGVyczonIiRQQVRIIgorCitleHBvcnQgR0lUX0VYRUNfUEFUSCBHSVRQRVJMTElCIFBBVEggR0lUX1RFWFRET01BSU5ESVIKKworY2FzZSAiJEdJVF9ERUJVR0dFUiIgaW4KKycnKQorCWV4ZWMgIiR7R0lUX0VYRUNfUEFUSH0vQEBQUk9HQEAiICIkQCIKKwk7OworMSkKKwl1bnNldCBHSVRfREVCVUdHRVIKKwlleGVjIGdkYiAtLWFyZ3MgIiR7R0lUX0VYRUNfUEFUSH0vQEBQUk9HQEAiICIkQCIKKwk7OworKikKKwlHSVRfREVCVUdHRVJfQVJHUz0iJEdJVF9ERUJVR0dFUiIKKwl1bnNldCBHSVRfREVCVUdHRVIKKwlleGVjICR7R0lUX0RFQlVHR0VSX0FSR1N9ICIke0dJVF9FWEVDX1BBVEh9L0BAUFJPR0BAIiAiJEAiCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3dyYXBwZXIuYyBiL3dyYXBwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWVhZWYyCi0tLSAvZGV2L251bGwKKysrIGIvd3JhcHBlci5jCkBAIC0wLDAgKzEsNjY5IEBACisvKgorICogVmFyaW91cyB0cml2aWFsIGhlbHBlciB3cmFwcGVycyBhcm91bmQgc3RhbmRhcmQgZnVuY3Rpb25zCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCitzdGF0aWMgaW50IG1lbW9yeV9saW1pdF9jaGVjayhzaXplX3Qgc2l6ZSwgaW50IGdlbnRsZSkKK3sKKwlzdGF0aWMgc2l6ZV90IGxpbWl0ID0gMDsKKwlpZiAoIWxpbWl0KSB7CisJCWxpbWl0ID0gZ2l0X2Vudl91bG9uZygiR0lUX0FMTE9DX0xJTUlUIiwgMCk7CisJCWlmICghbGltaXQpCisJCQlsaW1pdCA9IFNJWkVfTUFYOworCX0KKwlpZiAoc2l6ZSA+IGxpbWl0KSB7CisJCWlmIChnZW50bGUpIHsKKwkJCWVycm9yKCJhdHRlbXB0aW5nIHRvIGFsbG9jYXRlICUiUFJJdU1BWCIgb3ZlciBsaW1pdCAlIlBSSXVNQVgsCisJCQkgICAgICAodWludG1heF90KXNpemUsICh1aW50bWF4X3QpbGltaXQpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UKKwkJCWRpZSgiYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSAlIlBSSXVNQVgiIG92ZXIgbGltaXQgJSJQUkl1TUFYLAorCQkJICAgICh1aW50bWF4X3Qpc2l6ZSwgKHVpbnRtYXhfdClsaW1pdCk7CisJfQorCXJldHVybiAwOworfQorCitjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKwljaGFyICpyZXQgPSBzdHJkdXAoc3RyKTsKKwlpZiAoIXJldCkKKwkJZGllKCJPdXQgb2YgbWVtb3J5LCBzdHJkdXAgZmFpbGVkIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgKmRvX3htYWxsb2Moc2l6ZV90IHNpemUsIGludCBnZW50bGUpCit7CisJdm9pZCAqcmV0OworCisJaWYgKG1lbW9yeV9saW1pdF9jaGVjayhzaXplLCBnZW50bGUpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXQgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFyZXQgJiYgIXNpemUpCisJCXJldCA9IG1hbGxvYygxKTsKKwlpZiAoIXJldCkgeworCQlpZiAoIWdlbnRsZSkKKwkJCWRpZSgiT3V0IG9mIG1lbW9yeSwgbWFsbG9jIGZhaWxlZCAodHJpZWQgdG8gYWxsb2NhdGUgJWx1IGJ5dGVzKSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZSk7CisJCWVsc2UgeworCQkJZXJyb3IoIk91dCBvZiBtZW1vcnksIG1hbGxvYyBmYWlsZWQgKHRyaWVkIHRvIGFsbG9jYXRlICVsdSBieXRlcykiLAorCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKyNpZmRlZiBYTUFMTE9DX1BPSVNPTgorCW1lbXNldChyZXQsIDB4QTUsIHNpemUpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqeG1hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gZG9feG1hbGxvYyhzaXplLCAwKTsKK30KKworc3RhdGljIHZvaWQgKmRvX3htYWxsb2N6KHNpemVfdCBzaXplLCBpbnQgZ2VudGxlKQoreworCXZvaWQgKnJldDsKKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhzaXplLCAxKSkgeworCQlpZiAoZ2VudGxlKSB7CisJCQllcnJvcigiRGF0YSB0b28gbGFyZ2UgdG8gZml0IGludG8gdmlydHVhbCBtZW1vcnkgc3BhY2UuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfSBlbHNlCisJCQlkaWUoIkRhdGEgdG9vIGxhcmdlIHRvIGZpdCBpbnRvIHZpcnR1YWwgbWVtb3J5IHNwYWNlLiIpOworCX0KKwlyZXQgPSBkb194bWFsbG9jKHNpemUgKyAxLCBnZW50bGUpOworCWlmIChyZXQpCisJCSgoY2hhciopcmV0KVtzaXplXSA9IDA7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqeG1hbGxvY3ooc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGRvX3htYWxsb2N6KHNpemUsIDApOworfQorCit2b2lkICp4bWFsbG9jel9nZW50bHkoc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGRvX3htYWxsb2N6KHNpemUsIDEpOworfQorCisvKgorICogeG1lbWR1cHooKSBhbGxvY2F0ZXMgKGxlbiArIDEpIGJ5dGVzIG9mIG1lbW9yeSwgZHVwbGljYXRlcyAibGVuIiBieXRlcyBvZgorICogImRhdGEiIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB6ZXJvIHRlcm1pbmF0ZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnksCisgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLAorICogdGhlIHByb2dyYW0gZGllcy4KKyAqLwordm9pZCAqeG1lbWR1cHooY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gbWVtY3B5KHhtYWxsb2N6KGxlbiksIGRhdGEsIGxlbik7Cit9CisKK2NoYXIgKnhzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKK3sKKwljaGFyICpwID0gbWVtY2hyKHN0ciwgJ1wwJywgbGVuKTsKKwlyZXR1cm4geG1lbWR1cHooc3RyLCBwID8gcCAtIHN0ciA6IGxlbik7Cit9CisKK3ZvaWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcmV0OworCisJbWVtb3J5X2xpbWl0X2NoZWNrKHNpemUsIDApOworCXJldCA9IHJlYWxsb2MocHRyLCBzaXplKTsKKwlpZiAoIXJldCAmJiAhc2l6ZSkKKwkJcmV0ID0gcmVhbGxvYyhwdHIsIDEpOworCWlmICghcmV0KQorCQlkaWUoIk91dCBvZiBtZW1vcnksIHJlYWxsb2MgZmFpbGVkIik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqeGNhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldDsKKworCWlmICh1bnNpZ25lZF9tdWx0X292ZXJmbG93cyhubWVtYiwgc2l6ZSkpCisJCWRpZSgiZGF0YSB0b28gbGFyZ2UgdG8gZml0IGludG8gdmlydHVhbCBtZW1vcnkgc3BhY2UiKTsKKworCW1lbW9yeV9saW1pdF9jaGVjayhzaXplICogbm1lbWIsIDApOworCXJldCA9IGNhbGxvYyhubWVtYiwgc2l6ZSk7CisJaWYgKCFyZXQgJiYgKCFubWVtYiB8fCAhc2l6ZSkpCisJCXJldCA9IGNhbGxvYygxLCAxKTsKKwlpZiAoIXJldCkKKwkJZGllKCJPdXQgb2YgbWVtb3J5LCBjYWxsb2MgZmFpbGVkIik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIExpbWl0IHNpemUgb2YgSU8gY2h1bmtzLCBiZWNhdXNlIGh1Z2UgY2h1bmtzIG9ubHkgY2F1c2UgcGFpbi4gIE9TIFgKKyAqIDY0LWJpdCBpcyBidWdneSwgcmV0dXJuaW5nIEVJTlZBTCBpZiBsZW4gPj0gSU5UX01BWDsgYW5kIGV2ZW4gaW4KKyAqIHRoZSBhYnNlbmNlIG9mIGJ1Z3MsIGxhcmdlIGNodW5rcyBjYW4gcmVzdWx0IGluIGJhZCBsYXRlbmNpZXMgd2hlbgorICogeW91IGRlY2lkZSB0byBraWxsIHRoZSBwcm9jZXNzLgorICoKKyAqIFdlIHBpY2sgOCBNaUIgYXMgb3VyIGRlZmF1bHQsIGJ1dCBpZiB0aGUgcGxhdGZvcm0gZGVmaW5lcyBTU0laRV9NQVgKKyAqIHRoYXQgaXMgc21hbGxlciB0aGFuIHRoYXQsIGNsaXAgaXQgdG8gU1NJWkVfTUFYLCBhcyBhIGNhbGwgdG8KKyAqIHJlYWQoMikgb3Igd3JpdGUoMikgbGFyZ2VyIHRoYW4gdGhhdCBpcyBhbGxvd2VkIHRvIGZhaWwuICBBcyB0aGUgbGFzdAorICogcmVzb3J0LCB3ZSBhbGxvdyBhIHBvcnQgdG8gcGFzcyB2aWEgQ0ZMQUdTIGUuZy4gIi1ETUFYX0lPX1NJWkU9dmFsdWUiCisgKiB0byBvdmVycmlkZSB0aGlzLCBpZiB0aGUgZGVmaW5pdGlvbiBvZiBTU0laRV9NQVggZ2l2ZW4gYnkgdGhlIHBsYXRmb3JtCisgKiBpcyBicm9rZW4uCisgKi8KKyNpZm5kZWYgTUFYX0lPX1NJWkUKKyMgZGVmaW5lIE1BWF9JT19TSVpFX0RFRkFVTFQgKDgqMTAyNCoxMDI0KQorIyBpZiBkZWZpbmVkKFNTSVpFX01BWCkgJiYgKFNTSVpFX01BWCA8IE1BWF9JT19TSVpFX0RFRkFVTFQpCisjICBkZWZpbmUgTUFYX0lPX1NJWkUgU1NJWkVfTUFYCisjIGVsc2UKKyMgIGRlZmluZSBNQVhfSU9fU0laRSBNQVhfSU9fU0laRV9ERUZBVUxUCisjIGVuZGlmCisjZW5kaWYKKworLyoqCisgKiB4b3BlbigpIGlzIHRoZSBzYW1lIGFzIG9wZW4oKSwgYnV0IGl0IGRpZSgpcyBpZiB0aGUgb3BlbigpIGZhaWxzLgorICovCitpbnQgeG9wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IG9mbGFnLCAuLi4pCit7CisJbW9kZV90IG1vZGUgPSAwOworCXZhX2xpc3QgYXA7CisKKwkvKgorCSAqIHZhX2FyZygpIHdpbGwgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgaWYgdGhlIHNwZWNpZmllZCB0eXBlIGlzIG5vdAorCSAqIGNvbXBhdGlibGUgd2l0aCB0aGUgYXJndW1lbnQgdHlwZS4gU2luY2UgaW50ZWdlcnMgYXJlIHByb21vdGVkIHRvCisJICogaW50cywgd2UgZmV0Y2ggdGhlIG5leHQgYXJndW1lbnQgYXMgYW4gaW50LCBhbmQgdGhlbiBjYXN0IGl0IHRvIGEKKwkgKiBtb2RlX3QgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLgorCSAqLworCXZhX3N0YXJ0KGFwLCBvZmxhZyk7CisJaWYgKG9mbGFnICYgT19DUkVBVCkKKwkJbW9kZSA9IHZhX2FyZyhhcCwgaW50KTsKKwl2YV9lbmQoYXApOworCisJZm9yICg7OykgeworCQlpbnQgZmQgPSBvcGVuKHBhdGgsIG9mbGFnLCBtb2RlKTsKKwkJaWYgKGZkID49IDApCisJCQlyZXR1cm4gZmQ7CisJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCWNvbnRpbnVlOworCisJCWlmICgob2ZsYWcgJiBPX1JEV1IpID09IE9fUkRXUikKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIiksIHBhdGgpOworCQllbHNlIGlmICgob2ZsYWcgJiBPX1dST05MWSkgPT0gT19XUk9OTFkpCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIpLCBwYXRoKTsKKwkJZWxzZQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciKSwgcGF0aCk7CisJfQorfQorCitzdGF0aWMgaW50IGhhbmRsZV9ub25ibG9jayhpbnQgZmQsIHNob3J0IHBvbGxfZXZlbnRzLCBpbnQgZXJyKQoreworCXN0cnVjdCBwb2xsZmQgcGZkOworCisJaWYgKGVyciAhPSBFQUdBSU4gJiYgZXJyICE9IEVXT1VMREJMT0NLKQorCQlyZXR1cm4gMDsKKworCXBmZC5mZCA9IGZkOworCXBmZC5ldmVudHMgPSBwb2xsX2V2ZW50czsKKworCS8qCisJICogbm8gbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzLCBoZXJlOworCSAqIGEgc3Vic2VxdWVudCByZWFkL3dyaXRlIHdpbGwgZGV0ZWN0IHVucmVjb3ZlcmFibGUgZXJyb3JzCisJICovCisJcG9sbCgmcGZkLCAxLCAtMSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiB4cmVhZCgpIGlzIHRoZSBzYW1lIGEgcmVhZCgpLCBidXQgaXQgYXV0b21hdGljYWxseSByZXN0YXJ0cyByZWFkKCkKKyAqIG9wZXJhdGlvbnMgd2l0aCBhIHJlY292ZXJhYmxlIGVycm9yIChFQUdBSU4gYW5kIEVJTlRSKS4geHJlYWQoKQorICogRE9FUyBOT1QgR1VBUkFOVEVFIHRoYXQgImxlbiIgYnl0ZXMgaXMgcmVhZCBldmVuIGlmIHRoZSBkYXRhIGlzIGF2YWlsYWJsZS4KKyAqLworc3NpemVfdCB4cmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzc2l6ZV90IG5yOworCWlmIChsZW4gPiBNQVhfSU9fU0laRSkKKwkgICAgbGVuID0gTUFYX0lPX1NJWkU7CisJd2hpbGUgKDEpIHsKKwkJbnIgPSByZWFkKGZkLCBidWYsIGxlbik7CisJCWlmIChuciA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCWlmIChoYW5kbGVfbm9uYmxvY2soZmQsIFBPTExJTiwgZXJybm8pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCXJldHVybiBucjsKKwl9Cit9CisKKy8qCisgKiB4d3JpdGUoKSBpcyB0aGUgc2FtZSBhIHdyaXRlKCksIGJ1dCBpdCBhdXRvbWF0aWNhbGx5IHJlc3RhcnRzIHdyaXRlKCkKKyAqIG9wZXJhdGlvbnMgd2l0aCBhIHJlY292ZXJhYmxlIGVycm9yIChFQUdBSU4gYW5kIEVJTlRSKS4geHdyaXRlKCkgRE9FUyBOT1QKKyAqIEdVQVJBTlRFRSB0aGF0ICJsZW4iIGJ5dGVzIGlzIHdyaXR0ZW4gZXZlbiBpZiB0aGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuCisgKi8KK3NzaXplX3QgeHdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QgbnI7CisJaWYgKGxlbiA+IE1BWF9JT19TSVpFKQorCSAgICBsZW4gPSBNQVhfSU9fU0laRTsKKwl3aGlsZSAoMSkgeworCQluciA9IHdyaXRlKGZkLCBidWYsIGxlbik7CisJCWlmIChuciA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCWlmIChoYW5kbGVfbm9uYmxvY2soZmQsIFBPTExPVVQsIGVycm5vKSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXJldHVybiBucjsKKwl9Cit9CisKKy8qCisgKiB4cHJlYWQoKSBpcyB0aGUgc2FtZSBhcyBwcmVhZCgpLCBidXQgaXQgYXV0b21hdGljYWxseSByZXN0YXJ0cyBwcmVhZCgpCisgKiBvcGVyYXRpb25zIHdpdGggYSByZWNvdmVyYWJsZSBlcnJvciAoRUFHQUlOIGFuZCBFSU5UUikuIHhwcmVhZCgpIERPRVMKKyAqIE5PVCBHVUFSQU5URUUgdGhhdCAibGVuIiBieXRlcyBpcyByZWFkIGV2ZW4gaWYgdGhlIGRhdGEgaXMgYXZhaWxhYmxlLgorICovCitzc2l6ZV90IHhwcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgb2ZmX3Qgb2Zmc2V0KQoreworCXNzaXplX3QgbnI7CisJaWYgKGxlbiA+IE1BWF9JT19TSVpFKQorCQlsZW4gPSBNQVhfSU9fU0laRTsKKwl3aGlsZSAoMSkgeworCQluciA9IHByZWFkKGZkLCBidWYsIGxlbiwgb2Zmc2V0KTsKKwkJaWYgKChuciA8IDApICYmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpKQorCQkJY29udGludWU7CisJCXJldHVybiBucjsKKwl9Cit9CisKK3NzaXplX3QgcmVhZF9pbl9mdWxsKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJY2hhciAqcCA9IGJ1ZjsKKwlzc2l6ZV90IHRvdGFsID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJc3NpemVfdCBsb2FkZWQgPSB4cmVhZChmZCwgcCwgY291bnQpOworCQlpZiAobG9hZGVkIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGxvYWRlZCA9PSAwKQorCQkJcmV0dXJuIHRvdGFsOworCQljb3VudCAtPSBsb2FkZWQ7CisJCXAgKz0gbG9hZGVkOworCQl0b3RhbCArPSBsb2FkZWQ7CisJfQorCisJcmV0dXJuIHRvdGFsOworfQorCitzc2l6ZV90IHdyaXRlX2luX2Z1bGwoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwljb25zdCBjaGFyICpwID0gYnVmOworCXNzaXplX3QgdG90YWwgPSAwOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlzc2l6ZV90IHdyaXR0ZW4gPSB4d3JpdGUoZmQsIHAsIGNvdW50KTsKKwkJaWYgKHdyaXR0ZW4gPCAwKQorCQkJcmV0dXJuIC0xOworCQlpZiAoIXdyaXR0ZW4pIHsKKwkJCWVycm5vID0gRU5PU1BDOworCQkJcmV0dXJuIC0xOworCQl9CisJCWNvdW50IC09IHdyaXR0ZW47CisJCXAgKz0gd3JpdHRlbjsKKwkJdG90YWwgKz0gd3JpdHRlbjsKKwl9CisKKwlyZXR1cm4gdG90YWw7Cit9CisKK3NzaXplX3QgcHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpCit7CisJY2hhciAqcCA9IGJ1ZjsKKwlzc2l6ZV90IHRvdGFsID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJc3NpemVfdCBsb2FkZWQgPSB4cHJlYWQoZmQsIHAsIGNvdW50LCBvZmZzZXQpOworCQlpZiAobG9hZGVkIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGxvYWRlZCA9PSAwKQorCQkJcmV0dXJuIHRvdGFsOworCQljb3VudCAtPSBsb2FkZWQ7CisJCXAgKz0gbG9hZGVkOworCQl0b3RhbCArPSBsb2FkZWQ7CisJCW9mZnNldCArPSBsb2FkZWQ7CisJfQorCisJcmV0dXJuIHRvdGFsOworfQorCitpbnQgeGR1cChpbnQgZmQpCit7CisJaW50IHJldCA9IGR1cChmZCk7CisJaWYgKHJldCA8IDApCisJCWRpZV9lcnJubygiZHVwIGZhaWxlZCIpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogeGZvcGVuKCkgaXMgdGhlIHNhbWUgYXMgZm9wZW4oKSwgYnV0IGl0IGRpZSgpcyBpZiB0aGUgZm9wZW4oKSBmYWlscy4KKyAqLworRklMRSAqeGZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJZm9yICg7OykgeworCQlGSUxFICpmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCQlpZiAoZnApCisJCQlyZXR1cm4gZnA7CisJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCWNvbnRpbnVlOworCisJCWlmICgqbW9kZSAmJiBtb2RlWzFdID09ICcrJykKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIiksIHBhdGgpOworCQllbHNlIGlmICgqbW9kZSA9PSAndycgfHwgKm1vZGUgPT0gJ2EnKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciKSwgcGF0aCk7CisJCWVsc2UKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiksIHBhdGgpOworCX0KK30KKworRklMRSAqeGZkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJRklMRSAqc3RyZWFtID0gZmRvcGVuKGZkLCBtb2RlKTsKKwlpZiAoc3RyZWFtID09IE5VTEwpCisJCWRpZV9lcnJubygiT3V0IG9mIG1lbW9yeT8gZmRvcGVuIGZhaWxlZCIpOworCXJldHVybiBzdHJlYW07Cit9CisKK0ZJTEUgKmZvcGVuX2Zvcl93cml0aW5nKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJRklMRSAqcmV0ID0gZm9wZW4ocGF0aCwgInciKTsKKworCWlmICghcmV0ICYmIGVycm5vID09IEVQRVJNKSB7CisJCWlmICghdW5saW5rKHBhdGgpKQorCQkJcmV0ID0gZm9wZW4ocGF0aCwgInciKTsKKwkJZWxzZQorCQkJZXJybm8gPSBFUEVSTTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2Fybl9vbl9pbmFjY2Vzc2libGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwl3YXJuaW5nX2Vycm5vKF8oInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIpLCBwYXRoKTsKK30KKworaW50IHdhcm5fb25fZm9wZW5fZXJyb3JzKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFTk9URElSKSB7CisJCXdhcm5fb25faW5hY2Nlc3NpYmxlKHBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0ZJTEUgKmZvcGVuX29yX3dhcm4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFICpmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCisJaWYgKGZwKQorCQlyZXR1cm4gZnA7CisKKwl3YXJuX29uX2ZvcGVuX2Vycm9ycyhwYXRoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHhta3N0ZW1wKGNoYXIgKmZpbGVuYW1lX3RlbXBsYXRlKQoreworCWludCBmZDsKKwljaGFyIG9yaWd0ZW1wbGF0ZVtQQVRIX01BWF07CisJc3RybGNweShvcmlndGVtcGxhdGUsIGZpbGVuYW1lX3RlbXBsYXRlLCBzaXplb2Yob3JpZ3RlbXBsYXRlKSk7CisKKwlmZCA9IG1rc3RlbXAoZmlsZW5hbWVfdGVtcGxhdGUpOworCWlmIChmZCA8IDApIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCWNvbnN0IGNoYXIgKm5vbnJlbGF0aXZlX3RlbXBsYXRlOworCisJCWlmIChzdHJsZW4oZmlsZW5hbWVfdGVtcGxhdGUpICE9IHN0cmxlbihvcmlndGVtcGxhdGUpKQorCQkJZmlsZW5hbWVfdGVtcGxhdGUgPSBvcmlndGVtcGxhdGU7CisKKwkJbm9ucmVsYXRpdmVfdGVtcGxhdGUgPSBhYnNvbHV0ZV9wYXRoKGZpbGVuYW1lX3RlbXBsYXRlKTsKKwkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJZGllX2Vycm5vKCJVbmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlICclcyciLAorCQkJbm9ucmVsYXRpdmVfdGVtcGxhdGUpOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKKy8qIEFkYXB0ZWQgZnJvbSBsaWJpYmVydHkncyBta3N0ZW1wLmMuICovCisKKyN1bmRlZiBUTVBfTUFYCisjZGVmaW5lIFRNUF9NQVggMTYzODQKKworaW50IGdpdF9ta3N0ZW1wc19tb2RlKGNoYXIgKnBhdHRlcm4sIGludCBzdWZmaXhfbGVuLCBpbnQgbW9kZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBsZXR0ZXJzW10gPQorCQkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisJCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKwkJIjAxMjM0NTY3ODkiOworCXN0YXRpYyBjb25zdCBpbnQgbnVtX2xldHRlcnMgPSBBUlJBWV9TSVpFKGxldHRlcnMpIC0gMTsKKwlzdGF0aWMgY29uc3QgY2hhciB4X3BhdHRlcm5bXSA9ICJYWFhYWFgiOworCXN0YXRpYyBjb25zdCBpbnQgbnVtX3ggPSBBUlJBWV9TSVpFKHhfcGF0dGVybikgLSAxOworCXVpbnQ2NF90IHZhbHVlOworCXN0cnVjdCB0aW1ldmFsIHR2OworCWNoYXIgKmZpbGVuYW1lX3RlbXBsYXRlOworCXNpemVfdCBsZW47CisJaW50IGZkLCBjb3VudDsKKworCWxlbiA9IHN0cmxlbihwYXR0ZXJuKTsKKworCWlmIChsZW4gPCBudW1feCArIHN1ZmZpeF9sZW4pIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3RybmNtcCgmcGF0dGVybltsZW4gLSBudW1feCAtIHN1ZmZpeF9sZW5dLCB4X3BhdHRlcm4sIG51bV94KSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogUmVwbGFjZSBwYXR0ZXJuJ3MgWFhYWFhYIGNoYXJhY3RlcnMgd2l0aCByYW5kb21uZXNzLgorCSAqIFRyeSBUTVBfTUFYIGRpZmZlcmVudCBmaWxlbmFtZXMuCisJICovCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJdmFsdWUgPSAoKHVpbnQ2NF90KXR2LnR2X3VzZWMgPDwgMTYpIF4gdHYudHZfc2VjIF4gZ2V0cGlkKCk7CisJZmlsZW5hbWVfdGVtcGxhdGUgPSAmcGF0dGVybltsZW4gLSBudW1feCAtIHN1ZmZpeF9sZW5dOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IFRNUF9NQVg7ICsrY291bnQpIHsKKwkJdWludDY0X3QgdiA9IHZhbHVlOworCQlpbnQgaTsKKwkJLyogRmlsbCBpbiB0aGUgcmFuZG9tIGJpdHMuICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1feDsgaSsrKSB7CisJCQlmaWxlbmFtZV90ZW1wbGF0ZVtpXSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsKKwkJCXYgLz0gbnVtX2xldHRlcnM7CisJCX0KKworCQlmZCA9IG9wZW4ocGF0dGVybiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fUkRXUiwgbW9kZSk7CisJCWlmIChmZCA+PSAwKQorCQkJcmV0dXJuIGZkOworCQkvKgorCQkgKiBGYXRhbCBlcnJvciAoRVBFUk0sIEVOT1NQQyBldGMpLgorCQkgKiBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gbG9vcC4KKwkJICovCisJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQlicmVhazsKKwkJLyoKKwkJICogVGhpcyBpcyBhIHJhbmRvbSB2YWx1ZS4gIEl0IGlzIG9ubHkgbmVjZXNzYXJ5IHRoYXQKKwkJICogdGhlIG5leHQgVE1QX01BWCB2YWx1ZXMgZ2VuZXJhdGVkIGJ5IGFkZGluZyA3Nzc3IHRvCisJCSAqIFZBTFVFIGFyZSBkaWZmZXJlbnQgd2l0aCAobW9kdWxlIDJeMzIpLgorCQkgKi8KKwkJdmFsdWUgKz0gNzc3NzsKKwl9CisJLyogV2UgcmV0dXJuIHRoZSBudWxsIHN0cmluZyBpZiB3ZSBjYW4ndCBmaW5kIGEgdW5pcXVlIGZpbGUgbmFtZS4gICovCisJcGF0dGVyblswXSA9ICdcMCc7CisJcmV0dXJuIC0xOworfQorCitpbnQgZ2l0X21rc3RlbXBfbW9kZShjaGFyICpwYXR0ZXJuLCBpbnQgbW9kZSkKK3sKKwkvKiBta3N0ZW1wIGlzIGp1c3QgbWtzdGVtcHMgd2l0aCBubyBzdWZmaXggKi8KKwlyZXR1cm4gZ2l0X21rc3RlbXBzX21vZGUocGF0dGVybiwgMCwgbW9kZSk7Cit9CisKK2ludCB4bWtzdGVtcF9tb2RlKGNoYXIgKmZpbGVuYW1lX3RlbXBsYXRlLCBpbnQgbW9kZSkKK3sKKwlpbnQgZmQ7CisJY2hhciBvcmlndGVtcGxhdGVbUEFUSF9NQVhdOworCXN0cmxjcHkob3JpZ3RlbXBsYXRlLCBmaWxlbmFtZV90ZW1wbGF0ZSwgc2l6ZW9mKG9yaWd0ZW1wbGF0ZSkpOworCisJZmQgPSBnaXRfbWtzdGVtcF9tb2RlKGZpbGVuYW1lX3RlbXBsYXRlLCBtb2RlKTsKKwlpZiAoZmQgPCAwKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQljb25zdCBjaGFyICpub25yZWxhdGl2ZV90ZW1wbGF0ZTsKKworCQlpZiAoIWZpbGVuYW1lX3RlbXBsYXRlWzBdKQorCQkJZmlsZW5hbWVfdGVtcGxhdGUgPSBvcmlndGVtcGxhdGU7CisKKwkJbm9ucmVsYXRpdmVfdGVtcGxhdGUgPSBhYnNvbHV0ZV9wYXRoKGZpbGVuYW1lX3RlbXBsYXRlKTsKKwkJZXJybm8gPSBzYXZlZF9lcnJubzsKKwkJZGllX2Vycm5vKCJVbmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlICclcyciLAorCQkJbm9ucmVsYXRpdmVfdGVtcGxhdGUpOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBpbnQgd2Fybl9pZl91bnJlbW92YWJsZShjb25zdCBjaGFyICpvcCwgY29uc3QgY2hhciAqZmlsZSwgaW50IHJjKQoreworCWludCBlcnI7CisJaWYgKCFyYyB8fCBlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAwOworCWVyciA9IGVycm5vOworCXdhcm5pbmdfZXJybm8oInVuYWJsZSB0byAlcyAnJXMnIiwgb3AsIGZpbGUpOworCWVycm5vID0gZXJyOworCXJldHVybiByYzsKK30KKworaW50IHVubGlua19vcl9tc2coY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWludCByYyA9IHVubGluayhmaWxlKTsKKworCWFzc2VydChlcnIpOworCisJaWYgKCFyYyB8fCBlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAwOworCisJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIHVubGluayAnJXMnOiAlcyIsCisJCSAgICBmaWxlLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybiAtMTsKK30KKworaW50IHVubGlua19vcl93YXJuKGNvbnN0IGNoYXIgKmZpbGUpCit7CisJcmV0dXJuIHdhcm5faWZfdW5yZW1vdmFibGUoInVubGluayIsIGZpbGUsIHVubGluayhmaWxlKSk7Cit9CisKK2ludCBybWRpcl9vcl93YXJuKGNvbnN0IGNoYXIgKmZpbGUpCit7CisJcmV0dXJuIHdhcm5faWZfdW5yZW1vdmFibGUoInJtZGlyIiwgZmlsZSwgcm1kaXIoZmlsZSkpOworfQorCitpbnQgcmVtb3ZlX29yX3dhcm4odW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJcmV0dXJuIFNfSVNHSVRMSU5LKG1vZGUpID8gcm1kaXJfb3Jfd2FybihmaWxlKSA6IHVubGlua19vcl93YXJuKGZpbGUpOworfQorCitzdGF0aWMgaW50IGFjY2Vzc19lcnJvcl9pc19vayhpbnQgZXJyLCB1bnNpZ25lZCBmbGFnKQoreworCXJldHVybiAoaXNfbWlzc2luZ19maWxlX2Vycm9yKGVycikgfHwKKwkJKChmbGFnICYgQUNDRVNTX0VBQ0NFU19PSykgJiYgZXJyID09IEVBQ0NFUykpOworfQorCitpbnQgYWNjZXNzX29yX3dhcm4oY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUsIHVuc2lnbmVkIGZsYWcpCit7CisJaW50IHJldCA9IGFjY2VzcyhwYXRoLCBtb2RlKTsKKwlpZiAocmV0ICYmICFhY2Nlc3NfZXJyb3JfaXNfb2soZXJybm8sIGZsYWcpKQorCQl3YXJuX29uX2luYWNjZXNzaWJsZShwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYWNjZXNzX29yX2RpZShjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSwgdW5zaWduZWQgZmxhZykKK3sKKwlpbnQgcmV0ID0gYWNjZXNzKHBhdGgsIG1vZGUpOworCWlmIChyZXQgJiYgIWFjY2Vzc19lcnJvcl9pc19vayhlcnJubywgZmxhZykpCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gYWNjZXNzICclcyciKSwgcGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworY2hhciAqeGdldGN3ZCh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpZiAoc3RyYnVmX2dldGN3ZCgmc2IpKQorCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IikpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7Cit9CisKK2ludCB4c25wcmludGYoY2hhciAqZHN0LCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCBsZW47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlsZW4gPSB2c25wcmludGYoZHN0LCBtYXgsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAobGVuIDwgMCkKKwkJQlVHKCJ5b3VyIHNucHJpbnRmIGlzIGJyb2tlbiIpOworCWlmIChsZW4gPj0gbWF4KQorCQlCVUcoImF0dGVtcHQgdG8gc25wcmludGYgaW50byB0b28tc21hbGwgYnVmZmVyIik7CisJcmV0dXJuIGxlbjsKK30KKwordm9pZCB3cml0ZV9maWxlX2J1Zihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IGZkID0geG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY2Nik7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgbGVuKSA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBwYXRoKTsKKwlpZiAoY2xvc2UoZmQpKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNsb3NlICclcyciKSwgcGF0aCk7Cit9CisKK3ZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwl2YV9zdGFydChwYXJhbXMsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCisJc3RyYnVmX2NvbXBsZXRlX2xpbmUoJnNiKTsKKworCXdyaXRlX2ZpbGVfYnVmKHBhdGgsIHNiLmJ1Ziwgc2IubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCit2b2lkIHNsZWVwX21pbGxpc2VjKGludCBtaWxsaXNlYykKK3sKKwlwb2xsKE5VTEwsIDAsIG1pbGxpc2VjKTsKK30KKworaW50IHhnZXRob3N0bmFtZShjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJLyoKKwkgKiBJZiB0aGUgZnVsbCBob3N0bmFtZSBkb2Vzbid0IGZpdCBpbiBidWYsIFBPU0lYIGRvZXMgbm90CisJICogc3BlY2lmeSB3aGV0aGVyIHRoZSBidWZmZXIgd2lsbCBiZSBudWxsLXRlcm1pbmF0ZWQsIHNvIHRvCisJICogYmUgc2FmZSwgZG8gaXQgb3Vyc2VsdmVzLgorCSAqLworCWludCByZXQgPSBnZXRob3N0bmFtZShidWYsIGxlbik7CisJaWYgKCFyZXQpCisJCWJ1ZltsZW4gLSAxXSA9IDA7CisJcmV0dXJuIHJldDsKK30KKworaW50IGlzX2VtcHR5X29yX21pc3NpbmdfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3QpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIDE7CisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgc3RhdCAlcyIpLCBmaWxlbmFtZSk7CisJfQorCisJcmV0dXJuICFzdC5zdF9zaXplOworfQpkaWZmIC0tZ2l0IGEvd3JpdGUtb3ItZGllLmMgYi93cml0ZS1vci1kaWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWI4YzhkCi0tLSAvZGV2L251bGwKKysrIGIvd3JpdGUtb3ItZGllLmMKQEAgLTAsMCArMSw3MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworLyoKKyAqIFNvbWUgY2FzZXMgdXNlIHN0ZGlvLCBidXQgd2FudCB0byBmbHVzaCBhZnRlciB0aGUgd3JpdGUKKyAqIHRvIGdldCBlcnJvciBoYW5kbGluZyAoYW5kIHRvIGdldCBiZXR0ZXIgaW50ZXJhY3RpdmUKKyAqIGJlaGF2aW91ciAtIG5vdCBidWZmZXJpbmcgZXhjZXNzaXZlbHkpLgorICoKKyAqIE9mIGNvdXJzZSwgaWYgdGhlIGZsdXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgd3JpdGUgaXRzZWxmLAorICogd2UndmUgYWxyZWFkeSBsb3N0IHRoZSBlcnJvciBjb2RlLCBhbmQgY2Fubm90IHJlcG9ydCBpdCBhbnkKKyAqIG1vcmUuIFNvIHdlIGp1c3QgaWdub3JlIHRoYXQgY2FzZSBpbnN0ZWFkIChhbmQgaG9wZSB3ZSBnZXQKKyAqIHRoZSByaWdodCBlcnJvciBjb2RlIG9uIHRoZSBmbHVzaCkuCisgKgorICogSWYgdGhlIGZpbGUgaGFuZGxlIGlzIHN0ZG91dCwgYW5kIHN0ZG91dCBpcyBhIGZpbGUsIHRoZW4gc2tpcCB0aGUKKyAqIGZsdXNoIGVudGlyZWx5IHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KKyAqLwordm9pZCBtYXliZV9mbHVzaF9vcl9kaWUoRklMRSAqZiwgY29uc3QgY2hhciAqZGVzYykKK3sKKwlzdGF0aWMgaW50IHNraXBfc3Rkb3V0X2ZsdXNoID0gLTE7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciAqY3A7CisKKwlpZiAoZiA9PSBzdGRvdXQpIHsKKwkJaWYgKHNraXBfc3Rkb3V0X2ZsdXNoIDwgMCkgeworCQkJY3AgPSBnZXRlbnYoIkdJVF9GTFVTSCIpOworCQkJaWYgKGNwKQorCQkJCXNraXBfc3Rkb3V0X2ZsdXNoID0gKGF0b2koY3ApID09IDApOworCQkJZWxzZSBpZiAoKGZzdGF0KGZpbGVubyhzdGRvdXQpLCAmc3QpID09IDApICYmCisJCQkJIFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQkJc2tpcF9zdGRvdXRfZmx1c2ggPSAxOworCQkJZWxzZQorCQkJCXNraXBfc3Rkb3V0X2ZsdXNoID0gMDsKKwkJfQorCQlpZiAoc2tpcF9zdGRvdXRfZmx1c2ggJiYgIWZlcnJvcihmKSkKKwkJCXJldHVybjsKKwl9CisJaWYgKGZmbHVzaChmKSkgeworCQljaGVja19waXBlKGVycm5vKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBmYWlsdXJlIG9uICclcyciLCBkZXNjKTsKKwl9Cit9CisKK3ZvaWQgZnByaW50Zl9vcl9kaWUoRklMRSAqZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoZiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWNoZWNrX3BpcGUoZXJybm8pOworCQlkaWVfZXJybm8oIndyaXRlIGVycm9yIik7CisJfQorfQorCit2b2lkIGZzeW5jX29yX2RpZShpbnQgZmQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpZiAoZnN5bmMoZmQpIDwgMCkgeworCQlkaWVfZXJybm8oImZzeW5jIGVycm9yIG9uICclcyciLCBtc2cpOworCX0KK30KKwordm9pZCB3cml0ZV9vcl9kaWUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBjb3VudCkgPCAwKSB7CisJCWNoZWNrX3BpcGUoZXJybm8pOworCQlkaWVfZXJybm8oIndyaXRlIGVycm9yIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvd3MuYyBiL3dzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2OTg3NwotLS0gL2Rldi9udWxsCisrKyBiL3dzLmMKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBXaGl0ZXNwYWNlIHJ1bGVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKworc3RhdGljIHN0cnVjdCB3aGl0ZXNwYWNlX3J1bGUgeworCWNvbnN0IGNoYXIgKnJ1bGVfbmFtZTsKKwl1bnNpZ25lZCBydWxlX2JpdHM7CisJdW5zaWduZWQgbG9vc2Vuc19lcnJvcjoxLAorCQlleGNsdWRlX2RlZmF1bHQ6MTsKK30gd2hpdGVzcGFjZV9ydWxlX25hbWVzW10gPSB7CisJeyAidHJhaWxpbmctc3BhY2UiLCBXU19UUkFJTElOR19TUEFDRSwgMCB9LAorCXsgInNwYWNlLWJlZm9yZS10YWIiLCBXU19TUEFDRV9CRUZPUkVfVEFCLCAwIH0sCisJeyAiaW5kZW50LXdpdGgtbm9uLXRhYiIsIFdTX0lOREVOVF9XSVRIX05PTl9UQUIsIDAgfSwKKwl7ICJjci1hdC1lb2wiLCBXU19DUl9BVF9FT0wsIDEgfSwKKwl7ICJibGFuay1hdC1lb2wiLCBXU19CTEFOS19BVF9FT0wsIDAgfSwKKwl7ICJibGFuay1hdC1lb2YiLCBXU19CTEFOS19BVF9FT0YsIDAgfSwKKwl7ICJ0YWItaW4taW5kZW50IiwgV1NfVEFCX0lOX0lOREVOVCwgMCwgMSB9LAorfTsKKwordW5zaWduZWQgcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwl1bnNpZ25lZCBydWxlID0gV1NfREVGQVVMVF9SVUxFOworCisJd2hpbGUgKHN0cmluZykgeworCQlpbnQgaTsKKwkJc2l6ZV90IGxlbjsKKwkJY29uc3QgY2hhciAqZXA7CisJCWludCBuZWdhdGVkID0gMDsKKworCQlzdHJpbmcgPSBzdHJpbmcgKyBzdHJzcG4oc3RyaW5nLCAiLCBcdFxuXHIiKTsKKwkJZXAgPSBzdHJjaHJudWwoc3RyaW5nLCAnLCcpOworCQlsZW4gPSBlcCAtIHN0cmluZzsKKworCQlpZiAoKnN0cmluZyA9PSAnLScpIHsKKwkJCW5lZ2F0ZWQgPSAxOworCQkJc3RyaW5nKys7CisJCQlsZW4tLTsKKwkJfQorCQlpZiAoIWxlbikKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3aGl0ZXNwYWNlX3J1bGVfbmFtZXMpOyBpKyspIHsKKwkJCWlmIChzdHJuY21wKHdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5ydWxlX25hbWUsCisJCQkJICAgIHN0cmluZywgbGVuKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChuZWdhdGVkKQorCQkJCXJ1bGUgJj0gfndoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5ydWxlX2JpdHM7CisJCQllbHNlCisJCQkJcnVsZSB8PSB3aGl0ZXNwYWNlX3J1bGVfbmFtZXNbaV0ucnVsZV9iaXRzOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0cm5jbXAoc3RyaW5nLCAidGFid2lkdGg9IiwgOSkgPT0gMCkgeworCQkJdW5zaWduZWQgdGFid2lkdGggPSBhdG9pKHN0cmluZyArIDkpOworCQkJaWYgKDAgPCB0YWJ3aWR0aCAmJiB0YWJ3aWR0aCA8IDAxMDApIHsKKwkJCQlydWxlICY9IH5XU19UQUJfV0lEVEhfTUFTSzsKKwkJCQlydWxlIHw9IHRhYndpZHRoOworCQkJfQorCQkJZWxzZQorCQkJCXdhcm5pbmcoInRhYndpZHRoICUuKnMgb3V0IG9mIHJhbmdlIiwKKwkJCQkJKGludCkobGVuIC0gOSksIHN0cmluZyArIDkpOworCQl9CisJCXN0cmluZyA9IGVwOworCX0KKworCWlmIChydWxlICYgV1NfVEFCX0lOX0lOREVOVCAmJiBydWxlICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikKKwkJZGllKCJjYW5ub3QgZW5mb3JjZSBib3RoIHRhYi1pbi1pbmRlbnQgYW5kIGluZGVudC13aXRoLW5vbi10YWIiKTsKKwlyZXR1cm4gcnVsZTsKK30KKwordW5zaWduZWQgd2hpdGVzcGFjZV9ydWxlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlzdGF0aWMgc3RydWN0IGF0dHJfY2hlY2sgKmF0dHJfd2hpdGVzcGFjZV9ydWxlOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCFhdHRyX3doaXRlc3BhY2VfcnVsZSkKKwkJYXR0cl93aGl0ZXNwYWNlX3J1bGUgPSBhdHRyX2NoZWNrX2luaXRsKCJ3aGl0ZXNwYWNlIiwgTlVMTCk7CisKKwlnaXRfY2hlY2tfYXR0cihpc3RhdGUsIHBhdGhuYW1lLCBhdHRyX3doaXRlc3BhY2VfcnVsZSk7CisJdmFsdWUgPSBhdHRyX3doaXRlc3BhY2VfcnVsZS0+aXRlbXNbMF0udmFsdWU7CisJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpIHsKKwkJLyogdHJ1ZSAod2hpdGVzcGFjZSkgKi8KKwkJdW5zaWduZWQgYWxsX3J1bGUgPSB3c190YWJfd2lkdGgod2hpdGVzcGFjZV9ydWxlX2NmZyk7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3aGl0ZXNwYWNlX3J1bGVfbmFtZXMpOyBpKyspCisJCQlpZiAoIXdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5sb29zZW5zX2Vycm9yICYmCisJCQkgICAgIXdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5leGNsdWRlX2RlZmF1bHQpCisJCQkJYWxsX3J1bGUgfD0gd2hpdGVzcGFjZV9ydWxlX25hbWVzW2ldLnJ1bGVfYml0czsKKwkJcmV0dXJuIGFsbF9ydWxlOworCX0gZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpIHsKKwkJLyogZmFsc2UgKC13aGl0ZXNwYWNlKSAqLworCQlyZXR1cm4gd3NfdGFiX3dpZHRoKHdoaXRlc3BhY2VfcnVsZV9jZmcpOworCX0gZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpIHsKKwkJLyogcmVzZXQgdG8gZGVmYXVsdCAoIXdoaXRlc3BhY2UpICovCisJCXJldHVybiB3aGl0ZXNwYWNlX3J1bGVfY2ZnOworCX0gZWxzZSB7CisJCS8qIHN0cmluZyAqLworCQlyZXR1cm4gcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKHZhbHVlKTsKKwl9Cit9CisKKy8qIFRoZSByZXR1cm5lZCBzdHJpbmcgc2hvdWxkIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICovCitjaGFyICp3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyh1bnNpZ25lZCB3cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWlmICgod3MgJiBXU19UUkFJTElOR19TUEFDRSkgPT0gV1NfVFJBSUxJTkdfU1BBQ0UpCisJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInRyYWlsaW5nIHdoaXRlc3BhY2UiKTsKKwllbHNlIHsKKwkJaWYgKHdzICYgV1NfQkxBTktfQVRfRU9MKQorCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAidHJhaWxpbmcgd2hpdGVzcGFjZSIpOworCQlpZiAod3MgJiBXU19CTEFOS19BVF9FT0YpIHsKKwkJCWlmIChlcnIubGVuKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CisJCQlzdHJidWZfYWRkc3RyKCZlcnIsICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiKTsKKwkJfQorCX0KKwlpZiAod3MgJiBXU19TUEFDRV9CRUZPUkVfVEFCKSB7CisJCWlmIChlcnIubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAiLCAiKTsKKwkJc3RyYnVmX2FkZHN0cigmZXJyLCAic3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQiKTsKKwl9CisJaWYgKHdzICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikgeworCQlpZiAoZXJyLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgImluZGVudCB3aXRoIHNwYWNlcyIpOworCX0KKwlpZiAod3MgJiBXU19UQUJfSU5fSU5ERU5UKSB7CisJCWlmIChlcnIubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAiLCAiKTsKKwkJc3RyYnVmX2FkZHN0cigmZXJyLCAidGFiIGluIGluZGVudCIpOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmZXJyLCBOVUxMKTsKK30KKworLyogSWYgc3RyZWFtIGlzIG5vbi1OVUxMLCBlbWl0cyB0aGUgbGluZSBhZnRlciBjaGVja2luZy4gKi8KK3N0YXRpYyB1bnNpZ25lZCB3c19jaGVja19lbWl0XzEoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSwKKwkJCQlGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNldCwKKwkJCQljb25zdCBjaGFyICpyZXNldCwgY29uc3QgY2hhciAqd3MpCit7CisJdW5zaWduZWQgcmVzdWx0ID0gMDsKKwlpbnQgd3JpdHRlbiA9IDA7CisJaW50IHRyYWlsaW5nX3doaXRlc3BhY2UgPSAtMTsKKwlpbnQgdHJhaWxpbmdfbmV3bGluZSA9IDA7CisJaW50IHRyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9IDA7CisJaW50IGk7CisKKwkvKiBMb2dpYyBpcyBzaW1wbGVyIGlmIHdlIHRlbXBvcmFyaWx5IGlnbm9yZSB0aGUgdHJhaWxpbmcgbmV3bGluZS4gKi8KKwlpZiAobGVuID4gMCAmJiBsaW5lW2xlbiAtIDFdID09ICdcbicpIHsKKwkJdHJhaWxpbmdfbmV3bGluZSA9IDE7CisJCWxlbi0tOworCX0KKwlpZiAoKHdzX3J1bGUgJiBXU19DUl9BVF9FT0wpICYmCisJICAgIGxlbiA+IDAgJiYgbGluZVtsZW4gLSAxXSA9PSAnXHInKSB7CisJCXRyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9IDE7CisJCWxlbi0tOworCX0KKworCS8qIENoZWNrIGZvciB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLworCWlmICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9MKSB7CisJCWZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCQlpZiAoaXNzcGFjZShsaW5lW2ldKSkgeworCQkJCXRyYWlsaW5nX3doaXRlc3BhY2UgPSBpOworCQkJCXJlc3VsdCB8PSBXU19CTEFOS19BVF9FT0w7CisJCQl9CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodHJhaWxpbmdfd2hpdGVzcGFjZSA9PSAtMSkKKwkJdHJhaWxpbmdfd2hpdGVzcGFjZSA9IGxlbjsKKworCS8qIENoZWNrIGluZGVudGF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IHRyYWlsaW5nX3doaXRlc3BhY2U7IGkrKykgeworCQlpZiAobGluZVtpXSA9PSAnICcpCisJCQljb250aW51ZTsKKwkJaWYgKGxpbmVbaV0gIT0gJ1x0JykKKwkJCWJyZWFrOworCQlpZiAoKHdzX3J1bGUgJiBXU19TUEFDRV9CRUZPUkVfVEFCKSAmJiB3cml0dGVuIDwgaSkgeworCQkJcmVzdWx0IHw9IFdTX1NQQUNFX0JFRk9SRV9UQUI7CisJCQlpZiAoc3RyZWFtKSB7CisJCQkJZnB1dHMod3MsIHN0cmVhbSk7CisJCQkJZndyaXRlKGxpbmUgKyB3cml0dGVuLCBpIC0gd3JpdHRlbiwgMSwgc3RyZWFtKTsKKwkJCQlmcHV0cyhyZXNldCwgc3RyZWFtKTsKKwkJCQlmd3JpdGUobGluZSArIGksIDEsIDEsIHN0cmVhbSk7CisJCQl9CisJCX0gZWxzZSBpZiAod3NfcnVsZSAmIFdTX1RBQl9JTl9JTkRFTlQpIHsKKwkJCXJlc3VsdCB8PSBXU19UQUJfSU5fSU5ERU5UOworCQkJaWYgKHN0cmVhbSkgeworCQkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwgaSAtIHdyaXR0ZW4sIDEsIHN0cmVhbSk7CisJCQkJZnB1dHMod3MsIHN0cmVhbSk7CisJCQkJZndyaXRlKGxpbmUgKyBpLCAxLCAxLCBzdHJlYW0pOworCQkJCWZwdXRzKHJlc2V0LCBzdHJlYW0pOworCQkJfQorCQl9IGVsc2UgaWYgKHN0cmVhbSkgeworCQkJZndyaXRlKGxpbmUgKyB3cml0dGVuLCBpIC0gd3JpdHRlbiArIDEsIDEsIHN0cmVhbSk7CisJCX0KKwkJd3JpdHRlbiA9IGkgKyAxOworCX0KKworCS8qIENoZWNrIGZvciBpbmRlbnQgdXNpbmcgbm9uLXRhYi4gKi8KKwlpZiAoKHdzX3J1bGUgJiBXU19JTkRFTlRfV0lUSF9OT05fVEFCKSAmJiBpIC0gd3JpdHRlbiA+PSB3c190YWJfd2lkdGgod3NfcnVsZSkpIHsKKwkJcmVzdWx0IHw9IFdTX0lOREVOVF9XSVRIX05PTl9UQUI7CisJCWlmIChzdHJlYW0pIHsKKwkJCWZwdXRzKHdzLCBzdHJlYW0pOworCQkJZndyaXRlKGxpbmUgKyB3cml0dGVuLCBpIC0gd3JpdHRlbiwgMSwgc3RyZWFtKTsKKwkJCWZwdXRzKHJlc2V0LCBzdHJlYW0pOworCQl9CisJCXdyaXR0ZW4gPSBpOworCX0KKworCWlmIChzdHJlYW0pIHsKKwkJLyoKKwkJICogTm93IHRoZSByZXN0IG9mIHRoZSBsaW5lIHN0YXJ0cyBhdCAid3JpdHRlbiIuCisJCSAqIFRoZSBub24taGlnaGxpZ2h0ZWQgcGFydCBlbmRzIGF0ICJ0cmFpbGluZ193aGl0ZXNwYWNlIi4KKwkJICovCisKKwkJLyogRW1pdCBub24taGlnaGxpZ2h0ZWQgKG1pZGRsZSkgc2VnbWVudC4gKi8KKwkJaWYgKHRyYWlsaW5nX3doaXRlc3BhY2UgLSB3cml0dGVuID4gMCkgeworCQkJZnB1dHMoc2V0LCBzdHJlYW0pOworCQkJZndyaXRlKGxpbmUgKyB3cml0dGVuLAorCQkJICAgIHRyYWlsaW5nX3doaXRlc3BhY2UgLSB3cml0dGVuLCAxLCBzdHJlYW0pOworCQkJZnB1dHMocmVzZXQsIHN0cmVhbSk7CisJCX0KKworCQkvKiBIaWdobGlnaHQgZXJyb3JzIGluIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovCisJCWlmICh0cmFpbGluZ193aGl0ZXNwYWNlICE9IGxlbikgeworCQkJZnB1dHMod3MsIHN0cmVhbSk7CisJCQlmd3JpdGUobGluZSArIHRyYWlsaW5nX3doaXRlc3BhY2UsCisJCQkgICAgbGVuIC0gdHJhaWxpbmdfd2hpdGVzcGFjZSwgMSwgc3RyZWFtKTsKKwkJCWZwdXRzKHJlc2V0LCBzdHJlYW0pOworCQl9CisJCWlmICh0cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4pCisJCQlmcHV0YygnXHInLCBzdHJlYW0pOworCQlpZiAodHJhaWxpbmdfbmV3bGluZSkKKwkJCWZwdXRjKCdcbicsIHN0cmVhbSk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd3NfY2hlY2tfZW1pdChjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlLAorCQkgICBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNldCwKKwkJICAgY29uc3QgY2hhciAqcmVzZXQsIGNvbnN0IGNoYXIgKndzKQoreworCSh2b2lkKXdzX2NoZWNrX2VtaXRfMShsaW5lLCBsZW4sIHdzX3J1bGUsIHN0cmVhbSwgc2V0LCByZXNldCwgd3MpOworfQorCit1bnNpZ25lZCB3c19jaGVjayhjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlKQoreworCXJldHVybiB3c19jaGVja19lbWl0XzEobGluZSwgbGVuLCB3c19ydWxlLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworaW50IHdzX2JsYW5rX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSkKK3sKKwkvKgorCSAqIFdlIF9taWdodF8gd2FudCB0byB0cmVhdCBDUiBkaWZmZXJlbnRseSBmcm9tIG90aGVyCisJICogd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHdoZW4gd3NfcnVsZSBoYXMgV1NfQ1JfQVRfRU9MLCBidXQKKwkgKiBmb3Igbm93IHdlIGp1c3QgdXNlIHRoaXMgc3R1cGlkIGRlZmluaXRpb24uCisJICovCisJd2hpbGUgKGxlbi0tID4gMCkgeworCQlpZiAoIWlzc3BhY2UoKmxpbmUpKQorCQkJcmV0dXJuIDA7CisJCWxpbmUrKzsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qIENvcHkgdGhlIGxpbmUgb250byB0aGUgZW5kIG9mIHRoZSBzdHJidWYgd2hpbGUgZml4aW5nIHdoaXRlc3BhY2VzICovCit2b2lkIHdzX2ZpeF9jb3B5KHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlLCBpbnQgKmVycm9yX2NvdW50KQoreworCS8qCisJICogbGVuIGlzIG51bWJlciBvZiBieXRlcyB0byBiZSBjb3BpZWQgZnJvbSBzcmMsIHN0YXJ0aW5nCisJICogYXQgc3JjLiAgVHlwaWNhbGx5IHNyY1tsZW4tMV0gaXMgJ1xuJywgdW5sZXNzIHRoaXMgaXMKKwkgKiB0aGUgaW5jb21wbGV0ZSBsYXN0IGxpbmUuCisJICovCisJaW50IGk7CisJaW50IGFkZF9ubF90b190YWlsID0gMDsKKwlpbnQgYWRkX2NyX3RvX3RhaWwgPSAwOworCWludCBmaXhlZCA9IDA7CisJaW50IGxhc3RfdGFiX2luX2luZGVudCA9IC0xOworCWludCBsYXN0X3NwYWNlX2luX2luZGVudCA9IC0xOworCWludCBuZWVkX2ZpeF9sZWFkaW5nX3NwYWNlID0gMDsKKworCS8qCisJICogU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQorCSAqLworCWlmICh3c19ydWxlICYgV1NfQkxBTktfQVRfRU9MKSB7CisJCWlmICgwIDwgbGVuICYmIHNyY1tsZW4gLSAxXSA9PSAnXG4nKSB7CisJCQlhZGRfbmxfdG9fdGFpbCA9IDE7CisJCQlsZW4tLTsKKwkJCWlmICgwIDwgbGVuICYmIHNyY1tsZW4gLSAxXSA9PSAnXHInKSB7CisJCQkJYWRkX2NyX3RvX3RhaWwgPSAhISh3c19ydWxlICYgV1NfQ1JfQVRfRU9MKTsKKwkJCQlsZW4tLTsKKwkJCX0KKwkJfQorCQlpZiAoMCA8IGxlbiAmJiBpc3NwYWNlKHNyY1tsZW4gLSAxXSkpIHsKKwkJCXdoaWxlICgwIDwgbGVuICYmIGlzc3BhY2Uoc3JjW2xlbi0xXSkpCisJCQkJbGVuLS07CisJCQlmaXhlZCA9IDE7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIGxlYWRpbmcgd2hpdGVzcGFjZXMgKGluZGVudCkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJY2hhciBjaCA9IHNyY1tpXTsKKwkJaWYgKGNoID09ICdcdCcpIHsKKwkJCWxhc3RfdGFiX2luX2luZGVudCA9IGk7CisJCQlpZiAoKHdzX3J1bGUgJiBXU19TUEFDRV9CRUZPUkVfVEFCKSAmJgorCQkJICAgIDAgPD0gbGFzdF9zcGFjZV9pbl9pbmRlbnQpCisJCQkgICAgbmVlZF9maXhfbGVhZGluZ19zcGFjZSA9IDE7CisJCX0gZWxzZSBpZiAoY2ggPT0gJyAnKSB7CisJCQlsYXN0X3NwYWNlX2luX2luZGVudCA9IGk7CisJCQlpZiAoKHdzX3J1bGUgJiBXU19JTkRFTlRfV0lUSF9OT05fVEFCKSAmJgorCQkJICAgIHdzX3RhYl93aWR0aCh3c19ydWxlKSA8PSBpIC0gbGFzdF90YWJfaW5faW5kZW50KQorCQkJCW5lZWRfZml4X2xlYWRpbmdfc3BhY2UgPSAxOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKworCWlmIChuZWVkX2ZpeF9sZWFkaW5nX3NwYWNlKSB7CisJCS8qIFByb2Nlc3MgaW5kZW50IG91cnNlbHZlcyAqLworCQlpbnQgY29uc2VjdXRpdmVfc3BhY2VzID0gMDsKKwkJaW50IGxhc3QgPSBsYXN0X3RhYl9pbl9pbmRlbnQgKyAxOworCisJCWlmICh3c19ydWxlICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikgeworCQkJLyogaGF2ZSAibGFzdCIgcG9pbnQgYXQgb25lIHBhc3QgdGhlIGluZGVudCAqLworCQkJaWYgKGxhc3RfdGFiX2luX2luZGVudCA8IGxhc3Rfc3BhY2VfaW5faW5kZW50KQorCQkJCWxhc3QgPSBsYXN0X3NwYWNlX2luX2luZGVudCArIDE7CisJCQllbHNlCisJCQkJbGFzdCA9IGxhc3RfdGFiX2luX2luZGVudCArIDE7CisJCX0KKworCQkvKgorCQkgKiBiZXR3ZWVuIHNyY1swLi5sYXN0LTFdLCBzdHJpcCB0aGUgZnVubnkgc3BhY2VzLAorCQkgKiB1cGRhdGluZyB0aGVtIHRvIHRhYiBhcyBuZWVkZWQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CisJCQljaGFyIGNoID0gc3JjW2ldOworCQkJaWYgKGNoICE9ICcgJykgeworCQkJCWNvbnNlY3V0aXZlX3NwYWNlcyA9IDA7CisJCQkJc3RyYnVmX2FkZGNoKGRzdCwgY2gpOworCQkJfSBlbHNlIHsKKwkJCQljb25zZWN1dGl2ZV9zcGFjZXMrKzsKKwkJCQlpZiAoY29uc2VjdXRpdmVfc3BhY2VzID09IHdzX3RhYl93aWR0aCh3c19ydWxlKSkgeworCQkJCQlzdHJidWZfYWRkY2goZHN0LCAnXHQnKTsKKwkJCQkJY29uc2VjdXRpdmVfc3BhY2VzID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwkJd2hpbGUgKDAgPCBjb25zZWN1dGl2ZV9zcGFjZXMtLSkKKwkJCXN0cmJ1Zl9hZGRjaChkc3QsICcgJyk7CisJCWxlbiAtPSBsYXN0OworCQlzcmMgKz0gbGFzdDsKKwkJZml4ZWQgPSAxOworCX0gZWxzZSBpZiAoKHdzX3J1bGUgJiBXU19UQUJfSU5fSU5ERU5UKSAmJiBsYXN0X3RhYl9pbl9pbmRlbnQgPj0gMCkgeworCQkvKiBFeHBhbmQgdGFicyBpbnRvIHNwYWNlcyAqLworCQlpbnQgc3RhcnQgPSBkc3QtPmxlbjsKKwkJaW50IGxhc3QgPSBsYXN0X3RhYl9pbl9pbmRlbnQgKyAxOworCQlmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CisJCQlpZiAoc3JjW2ldID09ICdcdCcpCisJCQkJZG8geworCQkJCQlzdHJidWZfYWRkY2goZHN0LCAnICcpOworCQkJCX0gd2hpbGUgKChkc3QtPmxlbiAtIHN0YXJ0KSAlIHdzX3RhYl93aWR0aCh3c19ydWxlKSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZGNoKGRzdCwgc3JjW2ldKTsKKwkJfQorCQlsZW4gLT0gbGFzdDsKKwkJc3JjICs9IGxhc3Q7CisJCWZpeGVkID0gMTsKKwl9CisKKwlzdHJidWZfYWRkKGRzdCwgc3JjLCBsZW4pOworCWlmIChhZGRfY3JfdG9fdGFpbCkKKwkJc3RyYnVmX2FkZGNoKGRzdCwgJ1xyJyk7CisJaWYgKGFkZF9ubF90b190YWlsKQorCQlzdHJidWZfYWRkY2goZHN0LCAnXG4nKTsKKwlpZiAoZml4ZWQgJiYgZXJyb3JfY291bnQpCisJCSgqZXJyb3JfY291bnQpKys7Cit9CmRpZmYgLS1naXQgYS93dC1zdGF0dXMuYyBiL3d0LXN0YXR1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNmY5NDUKLS0tIC9kZXYvbnVsbAorKysgYi93dC1zdGF0dXMuYwpAQCAtMCwwICsxLDI0OTEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKworI2RlZmluZSBBQl9ERUxBWV9XQVJOSU5HX0lOX01TICgyICogMTAwMCkKKworc3RhdGljIGNvbnN0IGNoYXIgY3V0X2xpbmVbXSA9CisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKworc3RhdGljIGNoYXIgZGVmYXVsdF93dF9zdGF0dXNfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKKwlHSVRfQ09MT1JfTk9STUFMLCAvKiBXVF9TVEFUVVNfSEVBREVSICovCisJR0lUX0NPTE9SX0dSRUVOLCAgLyogV1RfU1RBVFVTX1VQREFURUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfQ0hBTkdFRCAqLworCUdJVF9DT0xPUl9SRUQsICAgIC8qIFdUX1NUQVRVU19VTlRSQUNLRUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfTk9CUkFOQ0ggKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfVU5NRVJHRUQgKi8KKwlHSVRfQ09MT1JfR1JFRU4sICAvKiBXVF9TVEFUVVNfTE9DQUxfQlJBTkNIICovCisJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX1JFTU9URV9CUkFOQ0ggKi8KKwlHSVRfQ09MT1JfTklMLCAgICAvKiBXVF9TVEFUVVNfT05CUkFOQ0ggKi8KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb2xvcihpbnQgc2xvdCwgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwljb25zdCBjaGFyICpjID0gIiI7CisJaWYgKHdhbnRfY29sb3Iocy0+dXNlX2NvbG9yKSkKKwkJYyA9IHMtPmNvbG9yX3BhbGV0dGVbc2xvdF07CisJaWYgKHNsb3QgPT0gV1RfU1RBVFVTX09OQlJBTkNIICYmIGNvbG9yX2lzX25pbChjKSkKKwkJYyA9IHMtPmNvbG9yX3BhbGV0dGVbV1RfU1RBVFVTX0hFQURFUl07CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXR1c192cHJpbnRmKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGludCBhdF9ib2wsIGNvbnN0IGNoYXIgKmNvbG9yLAorCQljb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXAsIGNvbnN0IGNoYXIgKnRyYWlsKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmVidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpsaW5lLCAqZW9sOworCisJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBhcCk7CisJaWYgKCFzYi5sZW4pIHsKKwkJaWYgKHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXgpIHsKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJCWlmICghdHJhaWwpCisJCQkJc3RyYnVmX2FkZGNoKCZzYiwgJyAnKTsKKwkJfQorCQljb2xvcl9wcmludF9zdHJidWYocy0+ZnAsIGNvbG9yLCAmc2IpOworCQlpZiAodHJhaWwpCisJCQlmcHJpbnRmKHMtPmZwLCAiJXMiLCB0cmFpbCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybjsKKwl9CisJZm9yIChsaW5lID0gc2IuYnVmOyAqbGluZTsgbGluZSA9IGVvbCArIDEpIHsKKwkJZW9sID0gc3RyY2hyKGxpbmUsICdcbicpOworCisJCXN0cmJ1Zl9yZXNldCgmbGluZWJ1Zik7CisJCWlmIChhdF9ib2wgJiYgcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCkgeworCQkJc3RyYnVmX2FkZGNoKCZsaW5lYnVmLCBjb21tZW50X2xpbmVfY2hhcik7CisJCQlpZiAoKmxpbmUgIT0gJ1xuJyAmJiAqbGluZSAhPSAnXHQnKQorCQkJCXN0cmJ1Zl9hZGRjaCgmbGluZWJ1ZiwgJyAnKTsKKwkJfQorCQlpZiAoZW9sKQorCQkJc3RyYnVmX2FkZCgmbGluZWJ1ZiwgbGluZSwgZW9sIC0gbGluZSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoJmxpbmVidWYsIGxpbmUpOworCQljb2xvcl9wcmludF9zdHJidWYocy0+ZnAsIGNvbG9yLCAmbGluZWJ1Zik7CisJCWlmIChlb2wpCisJCQlmcHJpbnRmKHMtPmZwLCAiXG4iKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWF0X2JvbCA9IDE7CisJfQorCWlmICh0cmFpbCkKKwkJZnByaW50ZihzLT5mcCwgIiVzIiwgdHJhaWwpOworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCit2b2lkIHN0YXR1c19wcmludGZfbG4oc3RydWN0IHd0X3N0YXR1cyAqcywgY29uc3QgY2hhciAqY29sb3IsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RhdHVzX3ZwcmludGYocywgMSwgY29sb3IsIGZtdCwgYXAsICJcbiIpOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgc3RhdHVzX3ByaW50ZihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdGF0dXNfdnByaW50ZihzLCAxLCBjb2xvciwgZm10LCBhcCwgTlVMTCk7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIHZvaWQgc3RhdHVzX3ByaW50Zl9tb3JlKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdGF0dXNfdnByaW50ZihzLCAwLCBjb2xvciwgZm10LCBhcCwgTlVMTCk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCB3dF9zdGF0dXNfcHJlcGFyZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7CisJcy0+cmVwbyA9IHI7CisJbWVtY3B5KHMtPmNvbG9yX3BhbGV0dGUsIGRlZmF1bHRfd3Rfc3RhdHVzX2NvbG9ycywKKwkgICAgICAgc2l6ZW9mKGRlZmF1bHRfd3Rfc3RhdHVzX2NvbG9ycykpOworCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19OT1JNQUxfVU5UUkFDS0VEX0ZJTEVTOworCXMtPnVzZV9jb2xvciA9IC0xOworCXMtPnJlbGF0aXZlX3BhdGhzID0gMTsKKwlzLT5icmFuY2ggPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsIE5VTEwsIE5VTEwpOworCXMtPnJlZmVyZW5jZSA9ICJIRUFEIjsKKwlzLT5mcCA9IHN0ZG91dDsKKwlzLT5pbmRleF9maWxlID0gZ2V0X2luZGV4X2ZpbGUoKTsKKwlzLT5jaGFuZ2Uuc3RyZHVwX3N0cmluZ3MgPSAxOworCXMtPnVudHJhY2tlZC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcy0+aWdub3JlZC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcy0+c2hvd19icmFuY2ggPSAtMTsgIC8qIHVuc3BlY2lmaWVkICovCisJcy0+c2hvd19zdGFzaCA9IDA7CisJcy0+YWhlYWRfYmVoaW5kX2ZsYWdzID0gQUhFQURfQkVISU5EX1VOU1BFQ0lGSUVEOworCXMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXggPSAwOworCXMtPmRldGVjdF9yZW5hbWUgPSAtMTsKKwlzLT5yZW5hbWVfc2NvcmUgPSAtMTsKKwlzLT5yZW5hbWVfbGltaXQgPSAtMTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF91bm1lcmdlZF9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgaTsKKwlpbnQgZGVsX21vZF9jb25mbGljdCA9IDA7CisJaW50IGJvdGhfZGVsZXRlZCA9IDA7CisJaW50IG5vdF9kZWxldGVkID0gMDsKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIlVubWVyZ2VkIHBhdGhzOiIpKTsKKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKworCQlzd2l0Y2ggKGQtPnN0YWdlbWFzaykgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYm90aF9kZWxldGVkID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCWNhc2UgNToKKwkJCWRlbF9tb2RfY29uZmxpY3QgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlub3RfZGVsZXRlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcy0+aGludHMpCisJCXJldHVybjsKKwlpZiAocy0+d2hlbmNlICE9IEZST01fQ09NTUlUKQorCQk7CisJZWxzZSBpZiAoIXMtPmlzX2luaXRpYWwpIHsKKwkJaWYgKCFzdHJjbXAocy0+cmVmZXJlbmNlLCAiSEVBRCIpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLAorCQkJCQkgXygiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiKSk7CisJCWVsc2UKKwkJCXN0YXR1c19wcmludGZfbG4ocywgYywKKwkJCQkJIF8oIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIiksCisJCQkJCSBzLT5yZWZlcmVuY2UpOworCX0gZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpKTsKKworCWlmICghYm90aF9kZWxldGVkKSB7CisJCWlmICghZGVsX21vZF9jb25mbGljdCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIikpOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIpKTsKKwl9IGVsc2UgaWYgKCFkZWxfbW9kX2NvbmZsaWN0ICYmICFub3RfZGVsZXRlZCkgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIikpOworCX0gZWxzZSB7CisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIikpOworCX0KK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9jYWNoZWRfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiKSk7CisJaWYgKCFzLT5oaW50cykKKwkJcmV0dXJuOworCWlmIChzLT53aGVuY2UgIT0gRlJPTV9DT01NSVQpCisJCTsgLyogTkVFRFNXT1JLOiB1c2UgImdpdCByZXNldCAtLXVucmVzb2x2ZSI/Pz8gKi8KKwllbHNlIGlmICghcy0+aXNfaW5pdGlhbCkgeworCQlpZiAoIXN0cmNtcChzLT5yZWZlcmVuY2UsICJIRUFEIikpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMKKwkJCQkJICwgXygiICAodXNlIFwiZ2l0IHJlc3RvcmUgLS1zdGFnZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiKSk7CisJCWVsc2UKKwkJCXN0YXR1c19wcmludGZfbG4ocywgYywKKwkJCQkJIF8oIiAgKHVzZSBcImdpdCByZXN0b3JlIC0tc291cmNlPSVzIC0tc3RhZ2VkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIiksCisJCQkJCSBzLT5yZWZlcmVuY2UpOworCX0gZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpKTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9kaXJ0eV9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJICAgICBpbnQgaGFzX2RlbGV0ZWQsCisJCQkJCSAgICAgaW50IGhhc19kaXJ0eV9zdWJtb2R1bGVzKQoreworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKworCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IikpOworCWlmICghcy0+aGludHMpCisJCXJldHVybjsKKwlpZiAoIWhhc19kZWxldGVkKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIikpOworCWVsc2UKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIpKTsKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCByZXN0b3JlIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiKSk7CisJaWYgKGhhc19kaXJ0eV9zdWJtb2R1bGVzKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIpKTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9vdGhlcl9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJICAgICBjb25zdCBjaGFyICp3aGF0LAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKmhvdykKK3sKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCAiJXM6Iiwgd2hhdCk7CisJaWYgKCFzLT5oaW50cykKKwkJcmV0dXJuOworCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiKSwgaG93KTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF90cmFpbGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiVzIiwgIiIpOworfQorCisjZGVmaW5lIHF1b3RlX3BhdGggcXVvdGVfcGF0aF9yZWxhdGl2ZQorCitzdGF0aWMgY29uc3QgY2hhciAqd3Rfc3RhdHVzX3VubWVyZ2VkX3N0YXR1c19zdHJpbmcoaW50IHN0YWdlbWFzaykKK3sKKwlzd2l0Y2ggKHN0YWdlbWFzaykgeworCWNhc2UgMToKKwkJcmV0dXJuIF8oImJvdGggZGVsZXRlZDoiKTsKKwljYXNlIDI6CisJCXJldHVybiBfKCJhZGRlZCBieSB1czoiKTsKKwljYXNlIDM6CisJCXJldHVybiBfKCJkZWxldGVkIGJ5IHRoZW06Iik7CisJY2FzZSA0OgorCQlyZXR1cm4gXygiYWRkZWQgYnkgdGhlbToiKTsKKwljYXNlIDU6CisJCXJldHVybiBfKCJkZWxldGVkIGJ5IHVzOiIpOworCWNhc2UgNjoKKwkJcmV0dXJuIF8oImJvdGggYWRkZWQ6Iik7CisJY2FzZSA3OgorCQlyZXR1cm4gXygiYm90aCBtb2RpZmllZDoiKTsKKwlkZWZhdWx0OgorCQlCVUcoInVuaGFuZGxlZCB1bm1lcmdlZCBzdGF0dXMgJXgiLCBzdGFnZW1hc2spOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnd0X3N0YXR1c19kaWZmX3N0YXR1c19zdHJpbmcoaW50IHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgRElGRl9TVEFUVVNfQURERUQ6CisJCXJldHVybiBfKCJuZXcgZmlsZToiKTsKKwljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJcmV0dXJuIF8oImNvcGllZDoiKTsKKwljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCXJldHVybiBfKCJkZWxldGVkOiIpOworCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CisJCXJldHVybiBfKCJtb2RpZmllZDoiKTsKKwljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCXJldHVybiBfKCJyZW5hbWVkOiIpOworCWNhc2UgRElGRl9TVEFUVVNfVFlQRV9DSEFOR0VEOgorCQlyZXR1cm4gXygidHlwZWNoYW5nZToiKTsKKwljYXNlIERJRkZfU1RBVFVTX1VOS05PV046CisJCXJldHVybiBfKCJ1bmtub3duOiIpOworCWNhc2UgRElGRl9TVEFUVVNfVU5NRVJHRUQ6CisJCXJldHVybiBfKCJ1bm1lcmdlZDoiKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF4d2lkdGgoY29uc3QgY2hhciAqKCpsYWJlbCkoaW50KSwgaW50IG1pbnZhbCwgaW50IG1heHZhbCkKK3sKKwlpbnQgcmVzdWx0ID0gMCwgaTsKKworCWZvciAoaSA9IG1pbnZhbDsgaSA8PSBtYXh2YWw7IGkrKykgeworCQljb25zdCBjaGFyICpzID0gbGFiZWwoaSk7CisJCWludCBsZW4gPSBzID8gdXRmOF9zdHJ3aWR0aChzKSA6IDA7CisJCWlmIChsZW4gPiByZXN1bHQpCisJCQlyZXN1bHQgPSBsZW47CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfdW5tZXJnZWRfZGF0YShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCQkgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQpCit7CisJY29uc3QgY2hhciAqYyA9IGNvbG9yKFdUX1NUQVRVU19VTk1FUkdFRCwgcyk7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIGNoYXIgKnBhZGRpbmc7CisJc3RhdGljIGludCBsYWJlbF93aWR0aDsKKwljb25zdCBjaGFyICpvbmUsICpob3c7CisJaW50IGxlbjsKKworCWlmICghcGFkZGluZykgeworCQlsYWJlbF93aWR0aCA9IG1heHdpZHRoKHd0X3N0YXR1c191bm1lcmdlZF9zdGF0dXNfc3RyaW5nLCAxLCA3KTsKKwkJbGFiZWxfd2lkdGggKz0gc3RybGVuKCIgIik7CisJCXBhZGRpbmcgPSB4bWFsbG9jeihsYWJlbF93aWR0aCk7CisJCW1lbXNldChwYWRkaW5nLCAnICcsIGxhYmVsX3dpZHRoKTsKKwl9CisKKwlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJm9uZWJ1Zik7CisJc3RhdHVzX3ByaW50ZihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIlx0Iik7CisKKwlob3cgPSB3dF9zdGF0dXNfdW5tZXJnZWRfc3RhdHVzX3N0cmluZyhkLT5zdGFnZW1hc2spOworCWxlbiA9IGxhYmVsX3dpZHRoIC0gdXRmOF9zdHJ3aWR0aChob3cpOworCXN0YXR1c19wcmludGZfbW9yZShzLCBjLCAiJXMlLipzJXNcbiIsIGhvdywgbGVuLCBwYWRkaW5nLCBvbmUpOworCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50X2NoYW5nZV9kYXRhKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCSAgICBpbnQgY2hhbmdlX3R5cGUsCisJCQkJCSAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQpCit7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihjaGFuZ2VfdHlwZSwgcyk7CisJaW50IHN0YXR1czsKKwljaGFyICpvbmVfbmFtZTsKKwljaGFyICp0d29fbmFtZTsKKwljb25zdCBjaGFyICpvbmUsICp0d287CisJc3RydWN0IHN0cmJ1ZiBvbmVidWYgPSBTVFJCVUZfSU5JVCwgdHdvYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBleHRyYSA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjaGFyICpwYWRkaW5nOworCXN0YXRpYyBpbnQgbGFiZWxfd2lkdGg7CisJY29uc3QgY2hhciAqd2hhdDsKKwlpbnQgbGVuOworCisJaWYgKCFwYWRkaW5nKSB7CisJCS8qIElmIERJRkZfU1RBVFVTXyogdXNlcyBvdXRzaWRlIHRoZSByYW5nZSBbQS4uWl0sIHdlJ3JlIGluIHRyb3VibGUgKi8KKwkJbGFiZWxfd2lkdGggPSBtYXh3aWR0aCh3dF9zdGF0dXNfZGlmZl9zdGF0dXNfc3RyaW5nLCAnQScsICdaJyk7CisJCWxhYmVsX3dpZHRoICs9IHN0cmxlbigiICIpOworCQlwYWRkaW5nID0geG1hbGxvY3oobGFiZWxfd2lkdGgpOworCQltZW1zZXQocGFkZGluZywgJyAnLCBsYWJlbF93aWR0aCk7CisJfQorCisJb25lX25hbWUgPSB0d29fbmFtZSA9IGl0LT5zdHJpbmc7CisJc3dpdGNoIChjaGFuZ2VfdHlwZSkgeworCWNhc2UgV1RfU1RBVFVTX1VQREFURUQ6CisJCXN0YXR1cyA9IGQtPmluZGV4X3N0YXR1czsKKwkJYnJlYWs7CisJY2FzZSBXVF9TVEFUVVNfQ0hBTkdFRDoKKwkJaWYgKGQtPm5ld19zdWJtb2R1bGVfY29tbWl0cyB8fCBkLT5kaXJ0eV9zdWJtb2R1bGUpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmV4dHJhLCAiICgiKTsKKwkJCWlmIChkLT5uZXdfc3VibW9kdWxlX2NvbW1pdHMpCisJCQkJc3RyYnVmX2FkZHN0cigmZXh0cmEsIF8oIm5ldyBjb21taXRzLCAiKSk7CisJCQlpZiAoZC0+ZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX01PRElGSUVEKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmV4dHJhLCBfKCJtb2RpZmllZCBjb250ZW50LCAiKSk7CisJCQlpZiAoZC0+ZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCkKKwkJCQlzdHJidWZfYWRkc3RyKCZleHRyYSwgXygidW50cmFja2VkIGNvbnRlbnQsICIpKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJmV4dHJhLCBleHRyYS5sZW4gLSAyKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmZXh0cmEsICcpJyk7CisJCX0KKwkJc3RhdHVzID0gZC0+d29ya3RyZWVfc3RhdHVzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoInVuaGFuZGxlZCBjaGFuZ2VfdHlwZSAlZCBpbiB3dF9sb25nc3RhdHVzX3ByaW50X2NoYW5nZV9kYXRhIiwKKwkJICAgIGNoYW5nZV90eXBlKTsKKwl9CisKKwkvKgorCSAqIE9ubHkgcGljayB1cCB0aGUgcmVuYW1lIGl0J3MgcmVsZXZhbnQuIElmIHRoZSByZW5hbWUgaXMgZm9yCisJICogdGhlIGNoYW5nZWQgc2VjdGlvbiBhbmQgd2UncmUgcHJpbnRpbmcgdGhlIHVwZGF0ZWQgc2VjdGlvbiwKKwkgKiBpZ25vcmUgaXQuCisJICovCisJaWYgKGQtPnJlbmFtZV9zdGF0dXMgPT0gc3RhdHVzKQorCQlvbmVfbmFtZSA9IGQtPnJlbmFtZV9zb3VyY2U7CisKKwlvbmUgPSBxdW90ZV9wYXRoKG9uZV9uYW1lLCBzLT5wcmVmaXgsICZvbmVidWYpOworCXR3byA9IHF1b3RlX3BhdGgodHdvX25hbWUsIHMtPnByZWZpeCwgJnR3b2J1Zik7CisKKwlzdGF0dXNfcHJpbnRmKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiXHQiKTsKKwl3aGF0ID0gd3Rfc3RhdHVzX2RpZmZfc3RhdHVzX3N0cmluZyhzdGF0dXMpOworCWlmICghd2hhdCkKKwkJQlVHKCJ1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiLCBzdGF0dXMpOworCWxlbiA9IGxhYmVsX3dpZHRoIC0gdXRmOF9zdHJ3aWR0aCh3aGF0KTsKKwlhc3NlcnQobGVuID49IDApOworCWlmIChvbmVfbmFtZSAhPSB0d29fbmFtZSkKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGMsICIlcyUuKnMlcyAtPiAlcyIsCisJCQkJICAgd2hhdCwgbGVuLCBwYWRkaW5nLCBvbmUsIHR3byk7CisJZWxzZQorCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYywgIiVzJS4qcyVzIiwKKwkJCQkgICB3aGF0LCBsZW4sIHBhZGRpbmcsIG9uZSk7CisJaWYgKGV4dHJhLmxlbikgeworCQlzdGF0dXNfcHJpbnRmX21vcmUocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIlcyIsIGV4dHJhLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZleHRyYSk7CisJfQorCXN0YXR1c19wcmludGZfbW9yZShzLCBHSVRfQ09MT1JfTk9STUFMLCAiXG4iKTsKKwlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdHdvYnVmKTsKK30KKworc3RhdGljIGNoYXIgc2hvcnRfc3VibW9kdWxlX3N0YXR1cyhzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkKQoreworCWlmIChkLT5uZXdfc3VibW9kdWxlX2NvbW1pdHMpCisJCXJldHVybiAnTSc7CisJaWYgKGQtPmRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCkKKwkJcmV0dXJuICdtJzsKKwlpZiAoZC0+ZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCkKKwkJcmV0dXJuICc/JzsKKwlyZXR1cm4gZC0+d29ya3RyZWVfc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VkX2NiKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCQkJIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3dF9zdGF0dXMgKnMgPSBkYXRhOworCWludCBpOworCisJaWYgKCFxLT5ucikKKwkJcmV0dXJuOworCXMtPndvcmtkaXJfZGlydHkgPSAxOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisKKwkJcCA9IHEtPnF1ZXVlW2ldOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydCgmcy0+Y2hhbmdlLCBwLT50d28tPnBhdGgpOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZCkgeworCQkJZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkKSk7CisJCQlpdC0+dXRpbCA9IGQ7CisJCX0KKwkJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMpCisJCQlkLT53b3JrdHJlZV9zdGF0dXMgPSBwLT5zdGF0dXM7CisJCWlmIChTX0lTR0lUTElOSyhwLT50d28tPm1vZGUpKSB7CisJCQlkLT5kaXJ0eV9zdWJtb2R1bGUgPSBwLT50d28tPmRpcnR5X3N1Ym1vZHVsZTsKKwkJCWQtPm5ld19zdWJtb2R1bGVfY29tbWl0cyA9ICFvaWRlcSgmcC0+b25lLT5vaWQsCisJCQkJCQkJICAmcC0+dHdvLT5vaWQpOworCQkJaWYgKHMtPnN0YXR1c19mb3JtYXQgPT0gU1RBVFVTX0ZPUk1BVF9TSE9SVCkKKwkJCQlkLT53b3JrdHJlZV9zdGF0dXMgPSBzaG9ydF9zdWJtb2R1bGVfc3RhdHVzKGQpOworCQl9CisKKwkJc3dpdGNoIChwLT5zdGF0dXMpIHsKKwkJY2FzZSBESUZGX1NUQVRVU19BRERFRDoKKwkJCWQtPm1vZGVfd29ya3RyZWUgPSBwLT50d28tPm1vZGU7CisJCQlicmVhazsKKworCQljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCQlkLT5tb2RlX2luZGV4ID0gcC0+b25lLT5tb2RlOworCQkJb2lkY3B5KCZkLT5vaWRfaW5kZXgsICZwLT5vbmUtPm9pZCk7CisJCQkvKiBtb2RlX3dvcmt0cmVlIGlzIHplcm8gZm9yIGEgZGVsZXRlLiAqLworCQkJYnJlYWs7CisKKwkJY2FzZSBESUZGX1NUQVRVU19DT1BJRUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfUkVOQU1FRDoKKwkJCWlmIChkLT5yZW5hbWVfc3RhdHVzKQorCQkJCUJVRygibXVsdGlwbGUgcmVuYW1lcyBvbiB0aGUgc2FtZSB0YXJnZXQ/IGhvdz8iKTsKKwkJCWQtPnJlbmFtZV9zb3VyY2UgPSB4c3RyZHVwKHAtPm9uZS0+cGF0aCk7CisJCQlkLT5yZW5hbWVfc2NvcmUgPSBwLT5zY29yZSAqIDEwMCAvIE1BWF9TQ09SRTsKKwkJCWQtPnJlbmFtZV9zdGF0dXMgPSBwLT5zdGF0dXM7CisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19VTk1FUkdFRDoKKwkJCWQtPm1vZGVfaW5kZXggPSBwLT5vbmUtPm1vZGU7CisJCQlkLT5tb2RlX3dvcmt0cmVlID0gcC0+dHdvLT5tb2RlOworCQkJb2lkY3B5KCZkLT5vaWRfaW5kZXgsICZwLT5vbmUtPm9pZCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQlVHKCJ1bmhhbmRsZWQgZGlmZi1maWxlcyBzdGF0dXMgJyVjJyIsIHAtPnN0YXR1cyk7CisJCQlicmVhazsKKwkJfQorCisJfQorfQorCitzdGF0aWMgaW50IHVubWVyZ2VkX21hc2soc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvcywgbWFzazsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBwYXRoLCBzdHJsZW4ocGF0aCkpOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIDA7CisKKwltYXNrID0gMDsKKwlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpIHsKKwkJY2UgPSBpc3RhdGUtPmNhY2hlW3BvcysrXTsKKwkJaWYgKHN0cmNtcChjZS0+bmFtZSwgcGF0aCkgfHwgIWNlX3N0YWdlKGNlKSkKKwkJCWJyZWFrOworCQltYXNrIHw9ICgxIDw8IChjZV9zdGFnZShjZSkgLSAxKSk7CisJfQorCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF91cGRhdGVkX2NiKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCQkJIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3dF9zdGF0dXMgKnMgPSBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnA7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKworCQlwID0gcS0+cXVldWVbaV07CisJCWl0ID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZzLT5jaGFuZ2UsIHAtPnR3by0+cGF0aCk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkKSB7CisJCQlkID0geGNhbGxvYygxLCBzaXplb2YoKmQpKTsKKwkJCWl0LT51dGlsID0gZDsKKwkJfQorCQlpZiAoIWQtPmluZGV4X3N0YXR1cykKKwkJCWQtPmluZGV4X3N0YXR1cyA9IHAtPnN0YXR1czsKKwkJc3dpdGNoIChwLT5zdGF0dXMpIHsKKwkJY2FzZSBESUZGX1NUQVRVU19BRERFRDoKKwkJCS8qIExlYXZlIHttb2RlLG9pZH1faGVhZCB6ZXJvIGZvciBhbiBhZGQuICovCisJCQlkLT5tb2RlX2luZGV4ID0gcC0+dHdvLT5tb2RlOworCQkJb2lkY3B5KCZkLT5vaWRfaW5kZXgsICZwLT50d28tPm9pZCk7CisJCQlzLT5jb21taXR0YWJsZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQkJZC0+bW9kZV9oZWFkID0gcC0+b25lLT5tb2RlOworCQkJb2lkY3B5KCZkLT5vaWRfaGVhZCwgJnAtPm9uZS0+b2lkKTsKKwkJCXMtPmNvbW1pdHRhYmxlID0gMTsKKwkJCS8qIExlYXZlIHttb2RlLG9pZH1faW5kZXggemVybyBmb3IgYSBkZWxldGUuICovCisJCQlicmVhazsKKworCQljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQkJaWYgKGQtPnJlbmFtZV9zdGF0dXMpCisJCQkJQlVHKCJtdWx0aXBsZSByZW5hbWVzIG9uIHRoZSBzYW1lIHRhcmdldD8gaG93PyIpOworCQkJZC0+cmVuYW1lX3NvdXJjZSA9IHhzdHJkdXAocC0+b25lLT5wYXRoKTsKKwkJCWQtPnJlbmFtZV9zY29yZSA9IHAtPnNjb3JlICogMTAwIC8gTUFYX1NDT1JFOworCQkJZC0+cmVuYW1lX3N0YXR1cyA9IHAtPnN0YXR1czsKKwkJCS8qIGZhbGx0aHJ1ICovCisJCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfVFlQRV9DSEFOR0VEOgorCQkJZC0+bW9kZV9oZWFkID0gcC0+b25lLT5tb2RlOworCQkJZC0+bW9kZV9pbmRleCA9IHAtPnR3by0+bW9kZTsKKwkJCW9pZGNweSgmZC0+b2lkX2hlYWQsICZwLT5vbmUtPm9pZCk7CisJCQlvaWRjcHkoJmQtPm9pZF9pbmRleCwgJnAtPnR3by0+b2lkKTsKKwkJCXMtPmNvbW1pdHRhYmxlID0gMTsKKwkJCWJyZWFrOworCQljYXNlIERJRkZfU1RBVFVTX1VOTUVSR0VEOgorCQkJZC0+c3RhZ2VtYXNrID0gdW5tZXJnZWRfbWFzayhzLT5yZXBvLT5pbmRleCwKKwkJCQkJCSAgICAgcC0+dHdvLT5wYXRoKTsKKwkJCS8qCisJCQkgKiBEb24ndCBib3RoZXIgc2V0dGluZyB7bW9kZSxvaWR9X3toZWFkLGluZGV4fSBzaW5jZSB0aGUgcHJpbnQKKwkJCSAqIGNvZGUgd2lsbCBvdXRwdXQgdGhlIHN0YWdlIHZhbHVlcyBkaXJlY3RseSBhbmQgbm90IHVzZSB0aGUKKwkJCSAqIHZhbHVlcyBpbiB0aGVzZSBmaWVsZHMuCisJCQkgKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlCVUcoInVuaGFuZGxlZCBkaWZmLWluZGV4IHN0YXR1cyAnJWMnIiwgcC0+c3RhdHVzKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX3dvcmt0cmVlKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKworCXJlcG9faW5pdF9yZXZpc2lvbnMocy0+cmVwbywgJnJldiwgTlVMTCk7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJcmV2LmRpZmZvcHQuZmxhZ3MuZGlydHlfc3VibW9kdWxlcyA9IDE7CisJcmV2LmRpZmZvcHQuaXRhX2ludmlzaWJsZV9pbl9pbmRleCA9IDE7CisJaWYgKCFzLT5zaG93X3VudHJhY2tlZF9maWxlcykKKwkJcmV2LmRpZmZvcHQuZmxhZ3MuaWdub3JlX3VudHJhY2tlZF9pbl9zdWJtb2R1bGVzID0gMTsKKwlpZiAocy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcpIHsKKwkJcmV2LmRpZmZvcHQuZmxhZ3Mub3ZlcnJpZGVfc3VibW9kdWxlX2NvbmZpZyA9IDE7CisJCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcoJnJldi5kaWZmb3B0LCBzLT5pZ25vcmVfc3VibW9kdWxlX2FyZyk7CisJfQorCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZWRfY2I7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSBzOworCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSBzLT5kZXRlY3RfcmVuYW1lID49IDAgPyBzLT5kZXRlY3RfcmVuYW1lIDogcmV2LmRpZmZvcHQuZGV0ZWN0X3JlbmFtZTsKKwlyZXYuZGlmZm9wdC5yZW5hbWVfbGltaXQgPSBzLT5yZW5hbWVfbGltaXQgPj0gMCA/IHMtPnJlbmFtZV9saW1pdCA6IHJldi5kaWZmb3B0LnJlbmFtZV9saW1pdDsKKwlyZXYuZGlmZm9wdC5yZW5hbWVfc2NvcmUgPSBzLT5yZW5hbWVfc2NvcmUgPj0gMCA/IHMtPnJlbmFtZV9zY29yZSA6IHJldi5kaWZmb3B0LnJlbmFtZV9zY29yZTsKKwljb3B5X3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSwgJnMtPnBhdGhzcGVjKTsKKwlydW5fZGlmZl9maWxlcygmcmV2LCAwKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc19pbmRleChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHMtPnJlcG8sICZyZXYsIE5VTEwpOworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9IHMtPmlzX2luaXRpYWwgPyBlbXB0eV90cmVlX29pZF9oZXgoKSA6IHMtPnJlZmVyZW5jZTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgJm9wdCk7CisKKwlyZXYuZGlmZm9wdC5mbGFncy5vdmVycmlkZV9zdWJtb2R1bGVfY29uZmlnID0gMTsKKwlyZXYuZGlmZm9wdC5pdGFfaW52aXNpYmxlX2luX2luZGV4ID0gMTsKKwlpZiAocy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcpIHsKKwkJaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZygmcmV2LmRpZmZvcHQsIHMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBVbmxlc3MgdGhlIHVzZXIgZGlkIGV4cGxpY2l0bHkgcmVxdWVzdCBhIHN1Ym1vZHVsZSBpZ25vcmUKKwkJICogbW9kZSBieSBwYXNzaW5nIGEgY29tbWFuZCBsaW5lIG9wdGlvbiB3ZSBkbyBub3QgaWdub3JlIGFueQorCQkgKiBjaGFuZ2VkIHN1Ym1vZHVsZSBTSEEtMXMgd2hlbiBjb21wYXJpbmcgaW5kZXggYW5kIEhFQUQsIG5vCisJCSAqIG1hdHRlciB3aGF0IGlzIGNvbmZpZ3VyZWQuIE90aGVyd2lzZSB0aGUgdXNlciB3b24ndCBiZQorCQkgKiBzaG93biBhbnkgc3VibW9kdWxlcyBzaGUgbWFudWFsbHkgYWRkZWQgKGFuZCB3aGljaCBhcmUKKwkJICogc3RhZ2VkIHRvIGJlIGNvbW1pdHRlZCksIHdoaWNoIHdvdWxkIGJlIHJlYWxseSBjb25mdXNpbmcuCisJCSAqLworCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKCZyZXYuZGlmZm9wdCwgImRpcnR5Iik7CisJfQorCisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSB3dF9zdGF0dXNfY29sbGVjdF91cGRhdGVkX2NiOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gczsKKwlyZXYuZGlmZm9wdC5kZXRlY3RfcmVuYW1lID0gcy0+ZGV0ZWN0X3JlbmFtZSA+PSAwID8gcy0+ZGV0ZWN0X3JlbmFtZSA6IHJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWU7CisJcmV2LmRpZmZvcHQucmVuYW1lX2xpbWl0ID0gcy0+cmVuYW1lX2xpbWl0ID49IDAgPyBzLT5yZW5hbWVfbGltaXQgOiByZXYuZGlmZm9wdC5yZW5hbWVfbGltaXQ7CisJcmV2LmRpZmZvcHQucmVuYW1lX3Njb3JlID0gcy0+cmVuYW1lX3Njb3JlID49IDAgPyBzLT5yZW5hbWVfc2NvcmUgOiByZXYuZGlmZm9wdC5yZW5hbWVfc2NvcmU7CisJY29weV9wYXRoc3BlYygmcmV2LnBydW5lX2RhdGEsICZzLT5wYXRoc3BlYyk7CisJcnVuX2RpZmZfaW5kZXgoJnJldiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfaW5pdGlhbChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gcy0+cmVwby0+aW5kZXg7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisKKwkJaWYgKCFjZV9wYXRoX21hdGNoKGlzdGF0ZSwgY2UsICZzLT5wYXRoc3BlYywgTlVMTCkpCisJCQljb250aW51ZTsKKwkJaWYgKGNlX2ludGVudF90b19hZGQoY2UpKQorCQkJY29udGludWU7CisJCWl0ID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZzLT5jaGFuZ2UsIGNlLT5uYW1lKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQpIHsKKwkJCWQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZCkpOworCQkJaXQtPnV0aWwgPSBkOworCQl9CisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCWQtPmluZGV4X3N0YXR1cyA9IERJRkZfU1RBVFVTX1VOTUVSR0VEOworCQkJZC0+c3RhZ2VtYXNrIHw9ICgxIDw8IChjZV9zdGFnZShjZSkgLSAxKSk7CisJCQkvKgorCQkJICogRG9uJ3QgYm90aGVyIHNldHRpbmcge21vZGUsb2lkfV97aGVhZCxpbmRleH0gc2luY2UgdGhlIHByaW50CisJCQkgKiBjb2RlIHdpbGwgb3V0cHV0IHRoZSBzdGFnZSB2YWx1ZXMgZGlyZWN0bHkgYW5kIG5vdCB1c2UgdGhlCisJCQkgKiB2YWx1ZXMgaW4gdGhlc2UgZmllbGRzLgorCQkJICovCisJCQlzLT5jb21taXR0YWJsZSA9IDE7CisJCX0gZWxzZSB7CisJCQlkLT5pbmRleF9zdGF0dXMgPSBESUZGX1NUQVRVU19BRERFRDsKKwkJCS8qIExlYXZlIHttb2RlLG9pZH1faGVhZCB6ZXJvIGZvciBhZGRzLiAqLworCQkJZC0+bW9kZV9pbmRleCA9IGNlLT5jZV9tb2RlOworCQkJb2lkY3B5KCZkLT5vaWRfaW5kZXgsICZjZS0+b2lkKTsKKwkJCXMtPmNvbW1pdHRhYmxlID0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfdW50cmFja2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCXVpbnQ2NF90IHRfYmVnaW4gPSBnZXRuYW5vdGltZSgpOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlID0gcy0+cmVwby0+aW5kZXg7CisKKwlpZiAoIXMtPnNob3dfdW50cmFja2VkX2ZpbGVzKQorCQlyZXR1cm47CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCWlmIChzLT5zaG93X3VudHJhY2tlZF9maWxlcyAhPSBTSE9XX0FMTF9VTlRSQUNLRURfRklMRVMpCisJCWRpci5mbGFncyB8PQorCQkJRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMgfCBESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUzsKKwlpZiAocy0+c2hvd19pZ25vcmVkX21vZGUpIHsKKwkJZGlyLmZsYWdzIHw9IERJUl9TSE9XX0lHTk9SRURfVE9POworCisJCWlmIChzLT5zaG93X2lnbm9yZWRfbW9kZSA9PSBTSE9XX01BVENISU5HX0lHTk9SRUQpCisJCQlkaXIuZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRF9UT09fTU9ERV9NQVRDSElORzsKKwl9IGVsc2UgeworCQlkaXIudW50cmFja2VkID0gaXN0YXRlLT51bnRyYWNrZWQ7CisJfQorCisJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisKKwlmaWxsX2RpcmVjdG9yeSgmZGlyLCBpc3RhdGUsICZzLT5wYXRoc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLm5yOyBpKyspIHsKKwkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLmVudHJpZXNbaV07CisJCWlmIChpbmRleF9uYW1lX2lzX290aGVyKGlzdGF0ZSwgZW50LT5uYW1lLCBlbnQtPmxlbikgJiYKKwkJICAgIGRpcl9wYXRoX21hdGNoKGlzdGF0ZSwgZW50LCAmcy0+cGF0aHNwZWMsIDAsIE5VTEwpKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzLT51bnRyYWNrZWQsIGVudC0+bmFtZSk7CisJCWZyZWUoZW50KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLmlnbm9yZWRfbnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuaWdub3JlZFtpXTsKKwkJaWYgKGluZGV4X25hbWVfaXNfb3RoZXIoaXN0YXRlLCBlbnQtPm5hbWUsIGVudC0+bGVuKSAmJgorCQkgICAgZGlyX3BhdGhfbWF0Y2goaXN0YXRlLCBlbnQsICZzLT5wYXRoc3BlYywgMCwgTlVMTCkpCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJnMtPmlnbm9yZWQsIGVudC0+bmFtZSk7CisJCWZyZWUoZW50KTsKKwl9CisKKwlmcmVlKGRpci5lbnRyaWVzKTsKKwlmcmVlKGRpci5pZ25vcmVkKTsKKwljbGVhcl9kaXJlY3RvcnkoJmRpcik7CisKKwlpZiAoYWR2aWNlX3N0YXR1c191X29wdGlvbikKKwkJcy0+dW50cmFja2VkX2luX21zID0gKGdldG5hbm90aW1lKCkgLSB0X2JlZ2luKSAvIDEwMDAwMDA7Cit9CisKK3N0YXRpYyBpbnQgaGFzX3VubWVyZ2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJZCA9IHMtPmNoYW5nZS5pdGVtc1tpXS51dGlsOworCQlpZiAoZC0+c3RhZ2VtYXNrKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHd0X3N0YXR1c19jb2xsZWN0KHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJdHJhY2UyX3JlZ2lvbl9lbnRlcigic3RhdHVzIiwgIndvcmt0cmVlcyIsIHMtPnJlcG8pOworCXd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfd29ya3RyZWUocyk7CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgic3RhdHVzIiwgIndvcmt0cmVlcyIsIHMtPnJlcG8pOworCisJaWYgKHMtPmlzX2luaXRpYWwpIHsKKwkJdHJhY2UyX3JlZ2lvbl9lbnRlcigic3RhdHVzIiwgImluaXRpYWwiLCBzLT5yZXBvKTsKKwkJd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc19pbml0aWFsKHMpOworCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJzdGF0dXMiLCAiaW5pdGlhbCIsIHMtPnJlcG8pOworCX0gZWxzZSB7CisJCXRyYWNlMl9yZWdpb25fZW50ZXIoInN0YXR1cyIsICJpbmRleCIsIHMtPnJlcG8pOworCQl3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX2luZGV4KHMpOworCQl0cmFjZTJfcmVnaW9uX2xlYXZlKCJzdGF0dXMiLCAiaW5kZXgiLCBzLT5yZXBvKTsKKwl9CisKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJzdGF0dXMiLCAidW50cmFja2VkIiwgcy0+cmVwbyk7CisJd3Rfc3RhdHVzX2NvbGxlY3RfdW50cmFja2VkKHMpOworCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJ1bnRyYWNrZWQiLCBzLT5yZXBvKTsKKworCXd0X3N0YXR1c19nZXRfc3RhdGUocy0+cmVwbywgJnMtPnN0YXRlLCBzLT5icmFuY2ggJiYgIXN0cmNtcChzLT5icmFuY2gsICJIRUFEIikpOworCWlmIChzLT5zdGF0ZS5tZXJnZV9pbl9wcm9ncmVzcyAmJiAhaGFzX3VubWVyZ2VkKHMpKQorCQlzLT5jb21taXR0YWJsZSA9IDE7Cit9CisKK3ZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfZnJlZV9idWZmZXJzKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJZnJlZShzLT5zdGF0ZS5icmFuY2gpOworCWZyZWUocy0+c3RhdGUub250byk7CisJZnJlZShzLT5zdGF0ZS5kZXRhY2hlZF9mcm9tKTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF91bm1lcmdlZChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBzaG93bl9oZWFkZXIgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkLT5zdGFnZW1hc2spCisJCQljb250aW51ZTsKKwkJaWYgKCFzaG93bl9oZWFkZXIpIHsKKwkJCXd0X2xvbmdzdGF0dXNfcHJpbnRfdW5tZXJnZWRfaGVhZGVyKHMpOworCQkJc2hvd25faGVhZGVyID0gMTsKKwkJfQorCQl3dF9sb25nc3RhdHVzX3ByaW50X3VubWVyZ2VkX2RhdGEocywgaXQpOworCX0KKwlpZiAoc2hvd25faGVhZGVyKQorCQl3dF9sb25nc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7CisKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF91cGRhdGVkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IHNob3duX2hlYWRlciA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+Y2hhbmdlLm5yOyBpKyspIHsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZDsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlpdCA9ICYocy0+Y2hhbmdlLml0ZW1zW2ldKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoIWQtPmluZGV4X3N0YXR1cyB8fAorCQkgICAgZC0+aW5kZXhfc3RhdHVzID09IERJRkZfU1RBVFVTX1VOTUVSR0VEKQorCQkJY29udGludWU7CisJCWlmICghc2hvd25faGVhZGVyKSB7CisJCQl3dF9sb25nc3RhdHVzX3ByaW50X2NhY2hlZF9oZWFkZXIocyk7CisJCQlzaG93bl9oZWFkZXIgPSAxOworCQl9CisJCXd0X2xvbmdzdGF0dXNfcHJpbnRfY2hhbmdlX2RhdGEocywgV1RfU1RBVFVTX1VQREFURUQsIGl0KTsKKwl9CisJaWYgKHNob3duX2hlYWRlcikKKwkJd3RfbG9uZ3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCisvKgorICogLTEgOiBoYXMgZGVsZXRlCisgKiAgMCA6IG5vIGNoYW5nZQorICogIDEgOiBzb21lIGNoYW5nZSBidXQgbm8gZGVsZXRlCisgKi8KK3N0YXRpYyBpbnQgd3Rfc3RhdHVzX2NoZWNrX3dvcmt0cmVlX2NoYW5nZXMoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJICAgICBpbnQgKmRpcnR5X3N1Ym1vZHVsZXMpCit7CisJaW50IGk7CisJaW50IGNoYW5nZXMgPSAwOworCisJKmRpcnR5X3N1Ym1vZHVsZXMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCWQgPSBzLT5jaGFuZ2UuaXRlbXNbaV0udXRpbDsKKwkJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMgfHwKKwkJICAgIGQtPndvcmt0cmVlX3N0YXR1cyA9PSBESUZGX1NUQVRVU19VTk1FUkdFRCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNoYW5nZXMpCisJCQljaGFuZ2VzID0gMTsKKwkJaWYgKGQtPmRpcnR5X3N1Ym1vZHVsZSkKKwkJCSpkaXJ0eV9zdWJtb2R1bGVzID0gMTsKKwkJaWYgKGQtPndvcmt0cmVlX3N0YXR1cyA9PSBESUZGX1NUQVRVU19ERUxFVEVEKQorCQkJY2hhbmdlcyA9IC0xOworCX0KKwlyZXR1cm4gY2hhbmdlczsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF9jaGFuZ2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGksIGRpcnR5X3N1Ym1vZHVsZXM7CisJaW50IHdvcmt0cmVlX2NoYW5nZXMgPSB3dF9zdGF0dXNfY2hlY2tfd29ya3RyZWVfY2hhbmdlcyhzLCAmZGlydHlfc3VibW9kdWxlcyk7CisKKwlpZiAoIXdvcmt0cmVlX2NoYW5nZXMpCisJCXJldHVybjsKKworCXd0X2xvbmdzdGF0dXNfcHJpbnRfZGlydHlfaGVhZGVyKHMsIHdvcmt0cmVlX2NoYW5nZXMgPCAwLCBkaXJ0eV9zdWJtb2R1bGVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCWl0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZC0+d29ya3RyZWVfc3RhdHVzIHx8CisJCSAgICBkLT53b3JrdHJlZV9zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5NRVJHRUQpCisJCQljb250aW51ZTsKKwkJd3RfbG9uZ3N0YXR1c19wcmludF9jaGFuZ2VfZGF0YShzLCBXVF9TVEFUVVNfQ0hBTkdFRCwgaXQpOworCX0KKwl3dF9sb25nc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyBpbnQgc3Rhc2hfY291bnRfcmVmcyhzdHJ1Y3Qgb2JqZWN0X2lkICpvb2lkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpub2lkLAorCQkJICAgIGNvbnN0IGNoYXIgKmVtYWlsLCB0aW1lc3RhbXBfdCB0aW1lc3RhbXAsIGludCB0eiwKKwkJCSAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCWludCAqYyA9IGNiX2RhdGE7CisJKCpjKSsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50X3N0YXNoX3N1bW1hcnkoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgc3Rhc2hfY291bnQgPSAwOworCisJZm9yX2VhY2hfcmVmbG9nX2VudCgicmVmcy9zdGFzaCIsIHN0YXNoX2NvdW50X3JlZnMsICZzdGFzaF9jb3VudCk7CisJaWYgKHN0YXNoX2NvdW50ID4gMCkKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCSBRXygiWW91ciBzdGFzaCBjdXJyZW50bHkgaGFzICVkIGVudHJ5IiwKKwkJCQkgICAgIllvdXIgc3Rhc2ggY3VycmVudGx5IGhhcyAlZCBlbnRyaWVzIiwgc3Rhc2hfY291bnQpLAorCQkJCSBzdGFzaF9jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkoc3RydWN0IHd0X3N0YXR1cyAqcywgaW50IHVuY29tbWl0dGVkKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHNtX3N1bW1hcnkgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBjbWRfc3Rkb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzdW1tYXJ5ID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqc3VtbWFyeV9jb250ZW50OworCisJYXJndl9hcnJheV9wdXNoZigmc21fc3VtbWFyeS5lbnZfYXJyYXksICJHSVRfSU5ERVhfRklMRT0lcyIsCisJCQkgcy0+aW5kZXhfZmlsZSk7CisKKwlhcmd2X2FycmF5X3B1c2goJnNtX3N1bW1hcnkuYXJncywgInN1Ym1vZHVsZSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmc21fc3VtbWFyeS5hcmdzLCAic3VtbWFyeSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmc21fc3VtbWFyeS5hcmdzLCB1bmNvbW1pdHRlZCA/ICItLWZpbGVzIiA6ICItLWNhY2hlZCIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmc21fc3VtbWFyeS5hcmdzLCAiLS1mb3Itc3RhdHVzIik7CisJYXJndl9hcnJheV9wdXNoKCZzbV9zdW1tYXJ5LmFyZ3MsICItLXN1bW1hcnktbGltaXQiKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZzbV9zdW1tYXJ5LmFyZ3MsICIlZCIsIHMtPnN1Ym1vZHVsZV9zdW1tYXJ5KTsKKwlpZiAoIXVuY29tbWl0dGVkKQorCQlhcmd2X2FycmF5X3B1c2goJnNtX3N1bW1hcnkuYXJncywgcy0+YW1lbmQgPyAiSEVBRF4iIDogIkhFQUQiKTsKKworCXNtX3N1bW1hcnkuZ2l0X2NtZCA9IDE7CisJc21fc3VtbWFyeS5ub19zdGRpbiA9IDE7CisKKwljYXB0dXJlX2NvbW1hbmQoJnNtX3N1bW1hcnksICZjbWRfc3Rkb3V0LCAxMDI0KTsKKworCS8qIHByZXBlbmQgaGVhZGVyLCBvbmx5IGlmIHRoZXJlJ3MgYW4gYWN0dWFsIG91dHB1dCAqLworCWlmIChjbWRfc3Rkb3V0LmxlbikgeworCQlpZiAodW5jb21taXR0ZWQpCisJCQlzdHJidWZfYWRkc3RyKCZzdW1tYXJ5LCBfKCJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIpKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cigmc3VtbWFyeSwgXygiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIpKTsKKwkJc3RyYnVmX2FkZHN0cigmc3VtbWFyeSwgIlxuXG4iKTsKKwl9CisJc3RyYnVmX2FkZGJ1Zigmc3VtbWFyeSwgJmNtZF9zdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZjbWRfc3Rkb3V0KTsKKworCWlmIChzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4KSB7CisJCXNpemVfdCBsZW47CisJCXN1bW1hcnlfY29udGVudCA9IHN0cmJ1Zl9kZXRhY2goJnN1bW1hcnksICZsZW4pOworCQlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcygmc3VtbWFyeSwgc3VtbWFyeV9jb250ZW50LCBsZW4pOworCQlmcmVlKHN1bW1hcnlfY29udGVudCk7CisJfQorCisJZnB1dHMoc3VtbWFyeS5idWYsIHMtPmZwKTsKKwlzdHJidWZfcmVsZWFzZSgmc3VtbWFyeSk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfb3RoZXIoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmwsCisJCQkJICAgICAgY29uc3QgY2hhciAqd2hhdCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpob3cpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IG91dHB1dCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBjb2x1bW5fb3B0aW9ucyBjb3B0czsKKworCWlmICghbC0+bnIpCisJCXJldHVybjsKKworCXd0X2xvbmdzdGF0dXNfcHJpbnRfb3RoZXJfaGVhZGVyKHMsIHdoYXQsIGhvdyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbC0+bnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCWNvbnN0IGNoYXIgKnBhdGg7CisJCWl0ID0gJihsLT5pdGVtc1tpXSk7CisJCXBhdGggPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJmJ1Zik7CisJCWlmIChjb2x1bW5fYWN0aXZlKHMtPmNvbG9wdHMpKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm91dHB1dCwgcGF0aCk7CisJCQljb250aW51ZTsKKwkJfQorCQlzdGF0dXNfcHJpbnRmKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiXHQiKTsKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGNvbG9yKFdUX1NUQVRVU19VTlRSQUNLRUQsIHMpLAorCQkJCSAgICIlc1xuIiwgcGF0aCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJaWYgKCFjb2x1bW5fYWN0aXZlKHMtPmNvbG9wdHMpKQorCQlnb3RvIGNvbmNsdWRlOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzJXNcdCVzIiwKKwkJICAgIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLAorCQkgICAgcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCA/ICIjIiA6ICIiLAorCQkgICAgY29sb3IoV1RfU1RBVFVTX1VOVFJBQ0tFRCwgcykpOworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLnBhZGRpbmcgPSAxOworCWNvcHRzLmluZGVudCA9IGJ1Zi5idWY7CisJaWYgKHdhbnRfY29sb3Iocy0+dXNlX2NvbG9yKSkKKwkJY29wdHMubmwgPSBHSVRfQ09MT1JfUkVTRVQgIlxuIjsKKwlwcmludF9jb2x1bW5zKCZvdXRwdXQsIHMtPmNvbG9wdHMsICZjb3B0cyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm91dHB1dCwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Citjb25jbHVkZToKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsICIlcyIsICIiKTsKK30KKworc2l6ZV90IHd0X3N0YXR1c19sb2NhdGVfZW5kKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqcDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdHRlcm4gPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZwYXR0ZXJuLCAiXG4lYyAlcyIsIGNvbW1lbnRfbGluZV9jaGFyLCBjdXRfbGluZSk7CisJaWYgKHN0YXJ0c193aXRoKHMsIHBhdHRlcm4uYnVmICsgMSkpCisJCWxlbiA9IDA7CisJZWxzZSBpZiAoKHAgPSBzdHJzdHIocywgcGF0dGVybi5idWYpKSkKKwkJbGVuID0gcCAtIHMgKyAxOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXR0ZXJuKTsKKwlyZXR1cm4gbGVuOworfQorCit2b2lkIHd0X3N0YXR1c19hcHBlbmRfY3V0X2xpbmUoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNvbnN0IGNoYXIgKmV4cGxhbmF0aW9uID0gXygiRG8gbm90IG1vZGlmeSBvciByZW1vdmUgdGhlIGxpbmUgYWJvdmUuXG5FdmVyeXRoaW5nIGJlbG93IGl0IHdpbGwgYmUgaWdub3JlZC4iKTsKKworCXN0cmJ1Zl9jb21tZW50ZWRfYWRkZihidWYsICIlcyIsIGN1dF9saW5lKTsKKwlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcyhidWYsIGV4cGxhbmF0aW9uLCBzdHJsZW4oZXhwbGFuYXRpb24pKTsKK30KKwordm9pZCB3dF9zdGF0dXNfYWRkX2N1dF9saW5lKEZJTEUgKmZwKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwl3dF9zdGF0dXNfYXBwZW5kX2N1dF9saW5lKCZidWYpOworCWZwdXRzKGJ1Zi5idWYsIGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF92ZXJib3NlKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKwlpbnQgZGlydHlfc3VibW9kdWxlczsKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHMtPnJlcG8sICZyZXYsIE5VTEwpOworCXJldi5kaWZmb3B0LmZsYWdzLmFsbG93X3RleHRjb252ID0gMTsKKwlyZXYuZGlmZm9wdC5pdGFfaW52aXNpYmxlX2luX2luZGV4ID0gMTsKKworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJb3B0LmRlZiA9IHMtPmlzX2luaXRpYWwgPyBlbXB0eV90cmVlX29pZF9oZXgoKSA6IHMtPnJlZmVyZW5jZTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgJm9wdCk7CisKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIOworCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSBzLT5kZXRlY3RfcmVuYW1lID49IDAgPyBzLT5kZXRlY3RfcmVuYW1lIDogcmV2LmRpZmZvcHQuZGV0ZWN0X3JlbmFtZTsKKwlyZXYuZGlmZm9wdC5yZW5hbWVfbGltaXQgPSBzLT5yZW5hbWVfbGltaXQgPj0gMCA/IHMtPnJlbmFtZV9saW1pdCA6IHJldi5kaWZmb3B0LnJlbmFtZV9saW1pdDsKKwlyZXYuZGlmZm9wdC5yZW5hbWVfc2NvcmUgPSBzLT5yZW5hbWVfc2NvcmUgPj0gMCA/IHMtPnJlbmFtZV9zY29yZSA6IHJldi5kaWZmb3B0LnJlbmFtZV9zY29yZTsKKwlyZXYuZGlmZm9wdC5maWxlID0gcy0+ZnA7CisJcmV2LmRpZmZvcHQuY2xvc2VfZmlsZSA9IDA7CisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgZ29pbmcgdG8gc3Rkb3V0LCB0aGVuIHdlIGRlZmluaXRlbHkgZG9uJ3QKKwkgKiB3YW50IGNvbG9yLCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gdGhlIGNvbW1pdCBtZXNzYWdlCisJICogZmlsZSAoYW5kIGV2ZW4gdGhlICJhdXRvIiBzZXR0aW5nIHdvbid0IHdvcmssIHNpbmNlIGl0CisJICogd2lsbCBoYXZlIGNoZWNrZWQgaXNhdHR5IG9uIHN0ZG91dCkuIEJ1dCB3ZSB0aGVuIGRvIHdhbnQKKwkgKiB0byBpbnNlcnQgdGhlIHNjaXNzb3IgbGluZSBoZXJlIHRvIHJlbGlhYmx5IHJlbW92ZSB0aGUKKwkgKiBkaWZmIGJlZm9yZSBjb21taXR0aW5nLgorCSAqLworCWlmIChzLT5mcCAhPSBzdGRvdXQpIHsKKwkJcmV2LmRpZmZvcHQudXNlX2NvbG9yID0gMDsKKwkJd3Rfc3RhdHVzX2FkZF9jdXRfbGluZShzLT5mcCk7CisJfQorCWlmIChzLT52ZXJib3NlID4gMSAmJiBzLT5jb21taXR0YWJsZSkgeworCQkvKiBwcmludF91cGRhdGVkKCkgcHJpbnRlZCBhIGhlYWRlciwgc28gZG8gd2UgKi8KKwkJaWYgKHMtPmZwICE9IHN0ZG91dCkKKwkJCXd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiKSk7CisJCXJldi5kaWZmb3B0LmFfcHJlZml4ID0gImMvIjsKKwkJcmV2LmRpZmZvcHQuYl9wcmVmaXggPSAiaS8iOworCX0gLyogZWxzZSB1c2UgcHJlZml4IGFzIHBlciB1c2VyIGNvbmZpZyAqLworCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCWlmIChzLT52ZXJib3NlID4gMSAmJgorCSAgICB3dF9zdGF0dXNfY2hlY2tfd29ya3RyZWVfY2hhbmdlcyhzLCAmZGlydHlfc3VibW9kdWxlcykpIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLAorCQkJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IikpOworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJcmV2LmRpZmZvcHQuYV9wcmVmaXggPSAiaS8iOworCQlyZXYuZGlmZm9wdC5iX3ByZWZpeCA9ICJ3LyI7CisJCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgd3RfbG9uZ3N0YXR1c19wcmludF90cmFja2luZyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpjcCwgKmVwLCAqYnJhbmNoX25hbWU7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCWNoYXIgY29tbWVudF9saW5lX3N0cmluZ1szXTsKKwlpbnQgaTsKKwl1aW50NjRfdCB0X2JlZ2luID0gMDsKKworCWFzc2VydChzLT5icmFuY2ggJiYgIXMtPmlzX2luaXRpYWwpOworCWlmICghc2tpcF9wcmVmaXgocy0+YnJhbmNoLCAicmVmcy9oZWFkcy8iLCAmYnJhbmNoX25hbWUpKQorCQlyZXR1cm47CisJYnJhbmNoID0gYnJhbmNoX2dldChicmFuY2hfbmFtZSk7CisKKwl0X2JlZ2luID0gZ2V0bmFub3RpbWUoKTsKKworCWlmICghZm9ybWF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmc2IsIHMtPmFoZWFkX2JlaGluZF9mbGFncykpCisJCXJldHVybjsKKworCWlmIChhZHZpY2Vfc3RhdHVzX2FoZWFkX2JlaGluZF93YXJuaW5nICYmCisJICAgIHMtPmFoZWFkX2JlaGluZF9mbGFncyA9PSBBSEVBRF9CRUhJTkRfRlVMTCkgeworCQl1aW50NjRfdCB0X2RlbHRhX2luX21zID0gKGdldG5hbm90aW1lKCkgLSB0X2JlZ2luKSAvIDEwMDAwMDA7CisJCWlmICh0X2RlbHRhX2luX21zID4gQUJfREVMQVlfV0FSTklOR19JTl9NUykgeworCQkJc3RyYnVmX2FkZGYoJnNiLCBfKCJcbiIKKwkJCQkJICAgIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGNvbXB1dGUgdGhlIGJyYW5jaCBhaGVhZC9iZWhpbmQgdmFsdWVzLlxuIgorCQkJCQkgICAiWW91IGNhbiB1c2UgJy0tbm8tYWhlYWQtYmVoaW5kJyB0byBhdm9pZCB0aGlzLlxuIiksCisJCQkJICAgIHRfZGVsdGFfaW5fbXMgLyAxMDAwLjApOworCQl9CisJfQorCisJaSA9IDA7CisJaWYgKHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXgpIHsKKwkJY29tbWVudF9saW5lX3N0cmluZ1tpKytdID0gY29tbWVudF9saW5lX2NoYXI7CisJCWNvbW1lbnRfbGluZV9zdHJpbmdbaSsrXSA9ICcgJzsKKwl9CisJY29tbWVudF9saW5lX3N0cmluZ1tpXSA9ICdcMCc7CisKKwlmb3IgKGNwID0gc2IuYnVmOyAoZXAgPSBzdHJjaHIoY3AsICdcbicpKSAhPSBOVUxMOyBjcCA9IGVwICsgMSkKKwkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksCisJCQkJICIlcyUuKnMiLCBjb21tZW50X2xpbmVfc3RyaW5nLAorCQkJCSAoaW50KShlcCAtIGNwKSwgY3ApOworCWlmIChzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4KQorCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiVjIiwKKwkJCQkgY29tbWVudF9saW5lX2NoYXIpOworCWVsc2UKKwkJZnB1dHMoIlxuIiwgcy0+ZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbWVyZ2VfaW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkgICBjb25zdCBjaGFyICpjb2xvcikKK3sKKwlpZiAoaGFzX3VubWVyZ2VkKHMpKSB7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIpKTsKKwkJaWYgKHMtPmhpbnRzKSB7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCQkgXygiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIpKTsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJCSBfKCIgICh1c2UgXCJnaXQgbWVyZ2UgLS1hYm9ydFwiIHRvIGFib3J0IHRoZSBtZXJnZSkiKSk7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIpKTsKKwkJaWYgKHMtPmhpbnRzKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIikpOworCX0KKwl3dF9sb25nc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfYW1faW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQljb25zdCBjaGFyICpjb2xvcikKK3sKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQlfKCJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iKSk7CisJaWYgKHMtPnN0YXRlLmFtX2VtcHR5X3BhdGNoKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIikpOworCWlmIChzLT5oaW50cykgeworCQlpZiAoIXMtPnN0YXRlLmFtX2VtcHR5X3BhdGNoKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIikpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiKSk7CisJfQorCXd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworc3RhdGljIGNoYXIgKnJlYWRfbGluZV9mcm9tX2dpdF9wYXRoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZnAgPSBmb3Blbl9vcl93YXJuKGdpdF9wYXRoKCIlcyIsIGZpbGVuYW1lKSwgInIiKTsKKworCWlmICghZnApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiBOVUxMOworCX0KKwlzdHJidWZfZ2V0bGluZV9sZigmYnVmLCBmcCk7CisJaWYgKCFmY2xvc2UoZnApKSB7CisJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfY29tbWl0X2luX3Byb2dyZXNzKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IHNwbGl0X2luX3Byb2dyZXNzID0gMDsKKwljaGFyICpoZWFkLCAqb3JpZ19oZWFkLCAqcmViYXNlX2FtZW5kLCAqcmViYXNlX29yaWdfaGVhZDsKKworCWlmICgoIXMtPmFtZW5kICYmICFzLT5ub3dhcm4gJiYgIXMtPndvcmtkaXJfZGlydHkpIHx8CisJICAgICFzLT5icmFuY2ggfHwgc3RyY21wKHMtPmJyYW5jaCwgIkhFQUQiKSkKKwkJcmV0dXJuIDA7CisKKwloZWFkID0gcmVhZF9saW5lX2Zyb21fZ2l0X3BhdGgoIkhFQUQiKTsKKwlvcmlnX2hlYWQgPSByZWFkX2xpbmVfZnJvbV9naXRfcGF0aCgiT1JJR19IRUFEIik7CisJcmViYXNlX2FtZW5kID0gcmVhZF9saW5lX2Zyb21fZ2l0X3BhdGgoInJlYmFzZS1tZXJnZS9hbWVuZCIpOworCXJlYmFzZV9vcmlnX2hlYWQgPSByZWFkX2xpbmVfZnJvbV9naXRfcGF0aCgicmViYXNlLW1lcmdlL29yaWctaGVhZCIpOworCisJaWYgKCFoZWFkIHx8ICFvcmlnX2hlYWQgfHwgIXJlYmFzZV9hbWVuZCB8fCAhcmViYXNlX29yaWdfaGVhZCkKKwkJOyAvKiBmYWxsIHRocm91Z2gsIG5vIHNwbGl0IGluIHByb2dyZXNzICovCisJZWxzZSBpZiAoIXN0cmNtcChyZWJhc2VfYW1lbmQsIHJlYmFzZV9vcmlnX2hlYWQpKQorCQlzcGxpdF9pbl9wcm9ncmVzcyA9ICEhc3RyY21wKGhlYWQsIHJlYmFzZV9hbWVuZCk7CisJZWxzZSBpZiAoc3RyY21wKG9yaWdfaGVhZCwgcmViYXNlX29yaWdfaGVhZCkpCisJCXNwbGl0X2luX3Byb2dyZXNzID0gMTsKKworCWZyZWUoaGVhZCk7CisJZnJlZShvcmlnX2hlYWQpOworCWZyZWUocmViYXNlX2FtZW5kKTsKKwlmcmVlKHJlYmFzZV9vcmlnX2hlYWQpOworCisJcmV0dXJuIHNwbGl0X2luX3Byb2dyZXNzOworfQorCisvKgorICogVHVybgorICogInBpY2sgZDZhMmYwMzAzZTg5N2VjMjU3ZGQwZTBhMzlhNWNjYjcwOWJjMjA0NyBzb21lIG1lc3NhZ2UiCisgKiBpbnRvCisgKiAicGljayBkNmEyZjAzIHNvbWUgbWVzc2FnZSIKKyAqCisgKiBUaGUgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBsaW5lIGRvZXMgbm90IGNvbnRhaW4gdXNlbGVzcyBzcGFjZXMKKyAqIGJlZm9yZSBvciBhZnRlciB0aGUgY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQgYWJicmV2X3NoYTFfaW5fbGluZShzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKipzcGxpdDsKKwlpbnQgaTsKKworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICJleGVjICIpIHx8CisJICAgIHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgInggIikgfHwKKwkgICAgc3RhcnRzX3dpdGgobGluZS0+YnVmLCAibGFiZWwgIikgfHwKKwkgICAgc3RhcnRzX3dpdGgobGluZS0+YnVmLCAibCAiKSkKKwkJcmV0dXJuOworCisJc3BsaXQgPSBzdHJidWZfc3BsaXRfbWF4KGxpbmUsICcgJywgMyk7CisJaWYgKHNwbGl0WzBdICYmIHNwbGl0WzFdKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCS8qCisJCSAqIHN0cmJ1Zl9zcGxpdF9tYXggbGVmdCBhIHNwYWNlLiBUcmltIGl0IGFuZCByZS1hZGQKKwkJICogaXQgYWZ0ZXIgYWJicmV2aWF0aW9uLgorCQkgKi8KKwkJc3RyYnVmX3RyaW0oc3BsaXRbMV0pOworCQlpZiAoIWdldF9vaWQoc3BsaXRbMV0tPmJ1ZiwgJm9pZCkpIHsKKwkJCXN0cmJ1Zl9yZXNldChzcGxpdFsxXSk7CisJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoc3BsaXRbMV0sICZvaWQsCisJCQkJCQkgREVGQVVMVF9BQkJSRVYpOworCQkJc3RyYnVmX2FkZGNoKHNwbGl0WzFdLCAnICcpOworCQkJc3RyYnVmX3Jlc2V0KGxpbmUpOworCQkJZm9yIChpID0gMDsgc3BsaXRbaV07IGkrKykKKwkJCQlzdHJidWZfYWRkYnVmKGxpbmUsIHNwbGl0W2ldKTsKKwkJfQorCX0KKwlzdHJidWZfbGlzdF9mcmVlKHNwbGl0KTsKK30KKworc3RhdGljIGludCByZWFkX3JlYmFzZV90b2RvbGlzdChjb25zdCBjaGFyICpmbmFtZSwgc3RydWN0IHN0cmluZ19saXN0ICpsaW5lcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmID0gZm9wZW4oZ2l0X3BhdGgoIiVzIiwgZm5hbWUpLCAiciIpOworCisJaWYgKCFmKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlyZXR1cm4gLTE7CisJCWRpZV9lcnJubygiQ291bGQgbm90IG9wZW4gZmlsZSAlcyBmb3IgcmVhZGluZyIsCisJCQkgIGdpdF9wYXRoKCIlcyIsIGZuYW1lKSk7CisJfQorCXdoaWxlICghc3RyYnVmX2dldGxpbmVfbGYoJmxpbmUsIGYpKSB7CisJCWlmIChsaW5lLmxlbiAmJiBsaW5lLmJ1ZlswXSA9PSBjb21tZW50X2xpbmVfY2hhcikKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfdHJpbSgmbGluZSk7CisJCWlmICghbGluZS5sZW4pCisJCQljb250aW51ZTsKKwkJYWJicmV2X3NoYTFfaW5fbGluZSgmbGluZSk7CisJCXN0cmluZ19saXN0X2FwcGVuZChsaW5lcywgbGluZS5idWYpOworCX0KKwlmY2xvc2UoZik7CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X3JlYmFzZV9pbmZvcm1hdGlvbihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCSAgICBjb25zdCBjaGFyICpjb2xvcikKK3sKKwlpZiAocy0+c3RhdGUucmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzKSB7CisJCWludCBpOworCQlpbnQgbnJfbGluZXNfdG9fc2hvdyA9IDI7CisKKwkJc3RydWN0IHN0cmluZ19saXN0IGhhdmVfZG9uZSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgeWV0X3RvX2RvID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwkJcmVhZF9yZWJhc2VfdG9kb2xpc3QoInJlYmFzZS1tZXJnZS9kb25lIiwgJmhhdmVfZG9uZSk7CisJCWlmIChyZWFkX3JlYmFzZV90b2RvbGlzdCgicmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyIsCisJCQkJCSAmeWV0X3RvX2RvKSkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiZ2l0LXJlYmFzZS10b2RvIGlzIG1pc3NpbmcuIikpOworCQlpZiAoaGF2ZV9kb25lLm5yID09IDApCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLCBfKCJObyBjb21tYW5kcyBkb25lLiIpKTsKKwkJZWxzZSB7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCVFfKCJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiLAorCQkJCQkiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiLAorCQkJCQloYXZlX2RvbmUubnIpLAorCQkJCWhhdmVfZG9uZS5ucik7CisJCQlmb3IgKGkgPSAoaGF2ZV9kb25lLm5yID4gbnJfbGluZXNfdG9fc2hvdykKKwkJCQk/IGhhdmVfZG9uZS5uciAtIG5yX2xpbmVzX3RvX3Nob3cgOiAwOworCQkJCWkgPCBoYXZlX2RvbmUubnI7CisJCQkJaSsrKQorCQkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsICIgICAlcyIsIGhhdmVfZG9uZS5pdGVtc1tpXS5zdHJpbmcpOworCQkJaWYgKGhhdmVfZG9uZS5uciA+IG5yX2xpbmVzX3RvX3Nob3cgJiYgcy0+aGludHMpCisJCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJXygiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiKSwgZ2l0X3BhdGgoInJlYmFzZS1tZXJnZS9kb25lIikpOworCQl9CisKKwkJaWYgKHlldF90b19kby5uciA9PSAwKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJIF8oIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iKSk7CisJCWVsc2UgeworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlRXygiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IiwKKwkJCQkJIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IiwKKwkJCQkJeWV0X3RvX2RvLm5yKSwKKwkJCQl5ZXRfdG9fZG8ubnIpOworCQkJZm9yIChpID0gMDsgaSA8IG5yX2xpbmVzX3RvX3Nob3cgJiYgaSA8IHlldF90b19kby5ucjsgaSsrKQorCQkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsICIgICAlcyIsIHlldF90b19kby5pdGVtc1tpXS5zdHJpbmcpOworCQkJaWYgKHMtPmhpbnRzKQorCQkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJCV8oIiAgKHVzZSBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiB0byB2aWV3IGFuZCBlZGl0KSIpKTsKKwkJfQorCQlzdHJpbmdfbGlzdF9jbGVhcigmeWV0X3RvX2RvLCAwKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmhhdmVfZG9uZSwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9yZWJhc2Vfc3RhdGUoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCSAgICAgICBjb25zdCBjaGFyICpjb2xvcikKK3sKKwlpZiAocy0+c3RhdGUuYnJhbmNoKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIpLAorCQkJCSBzLT5zdGF0ZS5icmFuY2gsCisJCQkJIHMtPnN0YXRlLm9udG8pOworCWVsc2UKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkgXygiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIikpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3JlYmFzZV9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCSAgICBjb25zdCBjaGFyICpjb2xvcikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCXNob3dfcmViYXNlX2luZm9ybWF0aW9uKHMsIGNvbG9yKTsKKwlpZiAoaGFzX3VubWVyZ2VkKHMpKSB7CisJCXByaW50X3JlYmFzZV9zdGF0ZShzLCBjb2xvcik7CisJCWlmIChzLT5oaW50cykgeworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIpKTsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIikpOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiKSk7CisJCX0KKwl9IGVsc2UgaWYgKHMtPnN0YXRlLnJlYmFzZV9pbl9wcm9ncmVzcyB8fAorCQkgICAhc3RhdChnaXRfcGF0aF9tZXJnZV9tc2cocy0+cmVwbyksICZzdCkpIHsKKwkJcHJpbnRfcmViYXNlX3N0YXRlKHMsIGNvbG9yKTsKKwkJaWYgKHMtPmhpbnRzKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiKSk7CisJfSBlbHNlIGlmIChzcGxpdF9jb21taXRfaW5fcHJvZ3Jlc3MocykpIHsKKwkJaWYgKHMtPnN0YXRlLmJyYW5jaCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iKSwKKwkJCQkJIHMtPnN0YXRlLmJyYW5jaCwKKwkJCQkJIHMtPnN0YXRlLm9udG8pOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCQkgXygiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iKSk7CisJCWlmIChzLT5oaW50cykKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiKSk7CisJfSBlbHNlIHsKKwkJaWYgKHMtPnN0YXRlLmJyYW5jaCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIiksCisJCQkJCSBzLT5zdGF0ZS5icmFuY2gsCisJCQkJCSBzLT5zdGF0ZS5vbnRvKTsKKwkJZWxzZQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIpKTsKKwkJaWYgKHMtPmhpbnRzICYmICFzLT5hbWVuZCkgeworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIikpOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIpKTsKKwkJfQorCX0KKwl3dF9sb25nc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJIGNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmIChpc19udWxsX29pZCgmcy0+c3RhdGUuY2hlcnJ5X3BpY2tfaGVhZF9vaWQpKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiQ2hlcnJ5LXBpY2sgY3VycmVudGx5IGluIHByb2dyZXNzLiIpKTsKKwllbHNlCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIiksCisJCQlmaW5kX3VuaXF1ZV9hYmJyZXYoJnMtPnN0YXRlLmNoZXJyeV9waWNrX2hlYWRfb2lkLAorCQkJCQkgICBERUZBVUxUX0FCQlJFVikpOworCisJaWYgKHMtPmhpbnRzKSB7CisJCWlmIChoYXNfdW5tZXJnZWQocykpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIikpOworCQllbHNlIGlmIChpc19udWxsX29pZCgmcy0+c3RhdGUuY2hlcnJ5X3BpY2tfaGVhZF9vaWQpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHRvIGNvbnRpbnVlKSIpKTsKKwkJZWxzZQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIpKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCV8oIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIikpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiKSk7CisJfQorCXd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yZXZlcnRfaW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkgICAgY29uc3QgY2hhciAqY29sb3IpCit7CisJaWYgKGlzX251bGxfb2lkKCZzLT5zdGF0ZS5yZXZlcnRfaGVhZF9vaWQpKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiUmV2ZXJ0IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iKSk7CisJZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iKSwKKwkJCWZpbmRfdW5pcXVlX2FiYnJldigmcy0+c3RhdGUucmV2ZXJ0X2hlYWRfb2lkLAorCQkJCQkgICBERUZBVUxUX0FCQlJFVikpOworCWlmIChzLT5oaW50cykgeworCQlpZiAoaGFzX3VubWVyZ2VkKHMpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiKSk7CisJCWVsc2UgaWYgKGlzX251bGxfb2lkKCZzLT5zdGF0ZS5yZXZlcnRfaGVhZF9vaWQpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIiB0byBjb250aW51ZSkiKSk7CisJCWVsc2UKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIikpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiICAodXNlIFwiZ2l0IHJldmVydCAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIikpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIpKTsKKwl9CisJd3RfbG9uZ3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2Jpc2VjdF9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCSAgICBjb25zdCBjaGFyICpjb2xvcikKK3sKKwlpZiAocy0+c3RhdGUuYnJhbmNoKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iKSwKKwkJCQkgcy0+c3RhdGUuYnJhbmNoKTsKKwllbHNlCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iKSk7CisJaWYgKHMtPmhpbnRzKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIikpOworCXd0X2xvbmdzdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworLyoKKyAqIEV4dHJhY3QgYnJhbmNoIGluZm9ybWF0aW9uIGZyb20gcmViYXNlL2Jpc2VjdAorICovCitzdGF0aWMgY2hhciAqZ2V0X2JyYW5jaChjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwljb25zdCBjaGFyICpicmFuY2hfbmFtZTsKKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgd29ya3RyZWVfZ2l0X3BhdGgod3QsICIlcyIsIHBhdGgpLCAwKSA8PSAwKQorCQlnb3RvIGdvdF9ub3RoaW5nOworCisJd2hpbGUgKHNiLmxlbiAmJiBzYi5idWZbc2IubGVuIC0gMV0gPT0gJ1xuJykKKwkJc3RyYnVmX3NldGxlbigmc2IsIHNiLmxlbiAtIDEpOworCWlmICghc2IubGVuKQorCQlnb3RvIGdvdF9ub3RoaW5nOworCWlmIChza2lwX3ByZWZpeChzYi5idWYsICJyZWZzL2hlYWRzLyIsICZicmFuY2hfbmFtZSkpCisJCXN0cmJ1Zl9yZW1vdmUoJnNiLCAwLCBicmFuY2hfbmFtZSAtIHNiLmJ1Zik7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc2IuYnVmLCAicmVmcy8iKSkKKwkJOworCWVsc2UgaWYgKCFnZXRfb2lkX2hleChzYi5idWYsICZvaWQpKSB7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnNiLCAmb2lkLCBERUZBVUxUX0FCQlJFVik7CisJfSBlbHNlIGlmICghc3RyY21wKHNiLmJ1ZiwgImRldGFjaGVkIEhFQUQiKSkgLyogcmViYXNlICovCisJCWdvdG8gZ290X25vdGhpbmc7CisJZWxzZQkJCS8qIGJpc2VjdCAqLworCQk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKworZ290X25vdGhpbmc6CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGdyYWJfMXN0X3N3aXRjaF9jYmRhdGEgeworCXN0cnVjdCBzdHJidWYgYnVmOworCXN0cnVjdCBvYmplY3RfaWQgbm9pZDsKK307CisKK3N0YXRpYyBpbnQgZ3JhYl8xc3Rfc3dpdGNoKHN0cnVjdCBvYmplY3RfaWQgKm9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKm5vaWQsCisJCQkgICBjb25zdCBjaGFyICplbWFpbCwgdGltZXN0YW1wX3QgdGltZXN0YW1wLCBpbnQgdHosCisJCQkgICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBncmFiXzFzdF9zd2l0Y2hfY2JkYXRhICpjYiA9IGNiX2RhdGE7CisJY29uc3QgY2hhciAqdGFyZ2V0ID0gTlVMTCwgKmVuZDsKKworCWlmICghc2tpcF9wcmVmaXgobWVzc2FnZSwgImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAiLCAmbWVzc2FnZSkpCisJCXJldHVybiAwOworCXRhcmdldCA9IHN0cnN0cihtZXNzYWdlLCAiIHRvICIpOworCWlmICghdGFyZ2V0KQorCQlyZXR1cm4gMDsKKwl0YXJnZXQgKz0gc3RybGVuKCIgdG8gIik7CisJc3RyYnVmX3Jlc2V0KCZjYi0+YnVmKTsKKwlvaWRjcHkoJmNiLT5ub2lkLCBub2lkKTsKKwllbmQgPSBzdHJjaHJudWwodGFyZ2V0LCAnXG4nKTsKKwlzdHJidWZfYWRkKCZjYi0+YnVmLCB0YXJnZXQsIGVuZCAtIHRhcmdldCk7CisJaWYgKCFzdHJjbXAoY2ItPmJ1Zi5idWYsICJIRUFEIikpIHsKKwkJLyogSEVBRCBpcyByZWxhdGl2ZS4gUmVzb2x2ZSBpdCB0byB0aGUgcmlnaHQgcmVmbG9nIGVudHJ5LiAqLworCQlzdHJidWZfcmVzZXQoJmNiLT5idWYpOworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJmNiLT5idWYsIG5vaWQsIERFRkFVTFRfQUJCUkVWKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19nZXRfZGV0YWNoZWRfZnJvbShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCQkJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGdyYWJfMXN0X3N3aXRjaF9jYmRhdGEgY2I7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWNoYXIgKnJlZiA9IE5VTEw7CisKKwlzdHJidWZfaW5pdCgmY2IuYnVmLCAwKTsKKwlpZiAoZm9yX2VhY2hfcmVmbG9nX2VudF9yZXZlcnNlKCJIRUFEIiwgZ3JhYl8xc3Rfc3dpdGNoLCAmY2IpIDw9IDApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmNiLmJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZHdpbV9yZWYoY2IuYnVmLmJ1ZiwgY2IuYnVmLmxlbiwgJm9pZCwgJnJlZikgPT0gMSAmJgorCSAgICAvKiBzaGExIGlzIGEgY29tbWl0PyBtYXRjaCB3aXRob3V0IGZ1cnRoZXIgbG9va3VwICovCisJICAgIChvaWRlcSgmY2Iubm9pZCwgJm9pZCkgfHwKKwkgICAgIC8qIHBlcmhhcHMgc2hhMSBpcyBhIHRhZywgdHJ5IHRvIGRlcmVmZXJlbmNlIHRvIGEgY29tbWl0ICovCisJICAgICAoKGNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyLCAmb2lkLCAxKSkgIT0gTlVMTCAmJgorCSAgICAgIG9pZGVxKCZjYi5ub2lkLCAmY29tbWl0LT5vYmplY3Qub2lkKSkpKSB7CisJCWNvbnN0IGNoYXIgKmZyb20gPSByZWY7CisJCWlmICghc2tpcF9wcmVmaXgoZnJvbSwgInJlZnMvdGFncy8iLCAmZnJvbSkpCisJCQlza2lwX3ByZWZpeChmcm9tLCAicmVmcy9yZW1vdGVzLyIsICZmcm9tKTsKKwkJc3RhdGUtPmRldGFjaGVkX2Zyb20gPSB4c3RyZHVwKGZyb20pOworCX0gZWxzZQorCQlzdGF0ZS0+ZGV0YWNoZWRfZnJvbSA9CisJCQl4c3RyZHVwKGZpbmRfdW5pcXVlX2FiYnJldigmY2Iubm9pZCwgREVGQVVMVF9BQkJSRVYpKTsKKwlvaWRjcHkoJnN0YXRlLT5kZXRhY2hlZF9vaWQsICZjYi5ub2lkKTsKKwlzdGF0ZS0+ZGV0YWNoZWRfYXQgPSAhZ2V0X29pZCgiSEVBRCIsICZvaWQpICYmCisJCQkgICAgIG9pZGVxKCZvaWQsICZzdGF0ZS0+ZGV0YWNoZWRfb2lkKTsKKworCWZyZWUocmVmKTsKKwlzdHJidWZfcmVsZWFzZSgmY2IuYnVmKTsKK30KKworaW50IHd0X3N0YXR1c19jaGVja19yZWJhc2UoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKKwkJCSAgIHN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCFzdGF0KHdvcmt0cmVlX2dpdF9wYXRoKHd0LCAicmViYXNlLWFwcGx5IiksICZzdCkpIHsKKwkJaWYgKCFzdGF0KHdvcmt0cmVlX2dpdF9wYXRoKHd0LCAicmViYXNlLWFwcGx5L2FwcGx5aW5nIiksICZzdCkpIHsKKwkJCXN0YXRlLT5hbV9pbl9wcm9ncmVzcyA9IDE7CisJCQlpZiAoIXN0YXQod29ya3RyZWVfZ2l0X3BhdGgod3QsICJyZWJhc2UtYXBwbHkvcGF0Y2giKSwgJnN0KSAmJiAhc3Quc3Rfc2l6ZSkKKwkJCQlzdGF0ZS0+YW1fZW1wdHlfcGF0Y2ggPSAxOworCQl9IGVsc2UgeworCQkJc3RhdGUtPnJlYmFzZV9pbl9wcm9ncmVzcyA9IDE7CisJCQlzdGF0ZS0+YnJhbmNoID0gZ2V0X2JyYW5jaCh3dCwgInJlYmFzZS1hcHBseS9oZWFkLW5hbWUiKTsKKwkJCXN0YXRlLT5vbnRvID0gZ2V0X2JyYW5jaCh3dCwgInJlYmFzZS1hcHBseS9vbnRvIik7CisJCX0KKwl9IGVsc2UgaWYgKCFzdGF0KHdvcmt0cmVlX2dpdF9wYXRoKHd0LCAicmViYXNlLW1lcmdlIiksICZzdCkpIHsKKwkJaWYgKCFzdGF0KHdvcmt0cmVlX2dpdF9wYXRoKHd0LCAicmViYXNlLW1lcmdlL2ludGVyYWN0aXZlIiksICZzdCkpCisJCQlzdGF0ZS0+cmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzID0gMTsKKwkJZWxzZQorCQkJc3RhdGUtPnJlYmFzZV9pbl9wcm9ncmVzcyA9IDE7CisJCXN0YXRlLT5icmFuY2ggPSBnZXRfYnJhbmNoKHd0LCAicmViYXNlLW1lcmdlL2hlYWQtbmFtZSIpOworCQlzdGF0ZS0+b250byA9IGdldF9icmFuY2god3QsICJyZWJhc2UtbWVyZ2Uvb250byIpOworCX0gZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworaW50IHd0X3N0YXR1c19jaGVja19iaXNlY3QoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKKwkJCSAgIHN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCFzdGF0KHdvcmt0cmVlX2dpdF9wYXRoKHd0LCAiQklTRUNUX0xPRyIpLCAmc3QpKSB7CisJCXN0YXRlLT5iaXNlY3RfaW5fcHJvZ3Jlc3MgPSAxOworCQlzdGF0ZS0+YnJhbmNoID0gZ2V0X2JyYW5jaCh3dCwgIkJJU0VDVF9TVEFSVCIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd3Rfc3RhdHVzX2dldF9zdGF0ZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSBzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlICpzdGF0ZSwKKwkJCSBpbnQgZ2V0X2RldGFjaGVkX2Zyb20pCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJZW51bSByZXBsYXlfYWN0aW9uIGFjdGlvbjsKKworCWlmICghc3RhdChnaXRfcGF0aF9tZXJnZV9oZWFkKHIpLCAmc3QpKSB7CisJCXd0X3N0YXR1c19jaGVja19yZWJhc2UoTlVMTCwgc3RhdGUpOworCQlzdGF0ZS0+bWVyZ2VfaW5fcHJvZ3Jlc3MgPSAxOworCX0gZWxzZSBpZiAod3Rfc3RhdHVzX2NoZWNrX3JlYmFzZShOVUxMLCBzdGF0ZSkpIHsKKwkJOwkJLyogYWxsIHNldCAqLworCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZChyKSwgJnN0KSAmJgorCQkJIWdldF9vaWQoIkNIRVJSWV9QSUNLX0hFQUQiLCAmb2lkKSkgeworCQlzdGF0ZS0+Y2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3MgPSAxOworCQlvaWRjcHkoJnN0YXRlLT5jaGVycnlfcGlja19oZWFkX29pZCwgJm9pZCk7CisJfQorCXd0X3N0YXR1c19jaGVja19iaXNlY3QoTlVMTCwgc3RhdGUpOworCWlmICghc3RhdChnaXRfcGF0aF9yZXZlcnRfaGVhZChyKSwgJnN0KSAmJgorCSAgICAhZ2V0X29pZCgiUkVWRVJUX0hFQUQiLCAmb2lkKSkgeworCQlzdGF0ZS0+cmV2ZXJ0X2luX3Byb2dyZXNzID0gMTsKKwkJb2lkY3B5KCZzdGF0ZS0+cmV2ZXJ0X2hlYWRfb2lkLCAmb2lkKTsKKwl9CisJaWYgKCFzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChyLCAmYWN0aW9uKSkgeworCQlpZiAoYWN0aW9uID09IFJFUExBWV9QSUNLKSB7CisJCQlzdGF0ZS0+Y2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3MgPSAxOworCQkJb2lkY3B5KCZzdGF0ZS0+Y2hlcnJ5X3BpY2tfaGVhZF9vaWQsICZudWxsX29pZCk7CisJCX0gZWxzZSB7CisJCQlzdGF0ZS0+cmV2ZXJ0X2luX3Byb2dyZXNzID0gMTsKKwkJCW9pZGNweSgmc3RhdGUtPnJldmVydF9oZWFkX29pZCwgJm51bGxfb2lkKTsKKwkJfQorCX0KKwlpZiAoZ2V0X2RldGFjaGVkX2Zyb20pCisJCXd0X3N0YXR1c19nZXRfZGV0YWNoZWRfZnJvbShyLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X2xvbmdzdGF0dXNfcHJpbnRfc3RhdGUoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwljb25zdCBjaGFyICpzdGF0ZV9jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlID0gJnMtPnN0YXRlOworCisJaWYgKHN0YXRlLT5tZXJnZV9pbl9wcm9ncmVzcykgeworCQlpZiAoc3RhdGUtPnJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzcykgeworCQkJc2hvd19yZWJhc2VfaW5mb3JtYXRpb24ocywgc3RhdGVfY29sb3IpOworCQkJZnB1dHMoIlxuIiwgcy0+ZnApOworCQl9CisJCXNob3dfbWVyZ2VfaW5fcHJvZ3Jlc3Mocywgc3RhdGVfY29sb3IpOworCX0gZWxzZSBpZiAoc3RhdGUtPmFtX2luX3Byb2dyZXNzKQorCQlzaG93X2FtX2luX3Byb2dyZXNzKHMsIHN0YXRlX2NvbG9yKTsKKwllbHNlIGlmIChzdGF0ZS0+cmViYXNlX2luX3Byb2dyZXNzIHx8IHN0YXRlLT5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MpCisJCXNob3dfcmViYXNlX2luX3Byb2dyZXNzKHMsIHN0YXRlX2NvbG9yKTsKKwllbHNlIGlmIChzdGF0ZS0+Y2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3MpCisJCXNob3dfY2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3Mocywgc3RhdGVfY29sb3IpOworCWVsc2UgaWYgKHN0YXRlLT5yZXZlcnRfaW5fcHJvZ3Jlc3MpCisJCXNob3dfcmV2ZXJ0X2luX3Byb2dyZXNzKHMsIHN0YXRlX2NvbG9yKTsKKwlpZiAoc3RhdGUtPmJpc2VjdF9pbl9wcm9ncmVzcykKKwkJc2hvd19iaXNlY3RfaW5fcHJvZ3Jlc3Mocywgc3RhdGVfY29sb3IpOworfQorCitzdGF0aWMgdm9pZCB3dF9sb25nc3RhdHVzX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJY29uc3QgY2hhciAqYnJhbmNoX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX09OQlJBTkNILCBzKTsKKwljb25zdCBjaGFyICpicmFuY2hfc3RhdHVzX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlpZiAocy0+YnJhbmNoKSB7CisJCWNvbnN0IGNoYXIgKm9uX3doYXQgPSBfKCJPbiBicmFuY2ggIik7CisJCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lID0gcy0+YnJhbmNoOworCQlpZiAoIXN0cmNtcChicmFuY2hfbmFtZSwgIkhFQUQiKSkgeworCQkJYnJhbmNoX3N0YXR1c19jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19OT0JSQU5DSCwgcyk7CisJCQlpZiAocy0+c3RhdGUucmViYXNlX2luX3Byb2dyZXNzIHx8CisJCQkgICAgcy0+c3RhdGUucmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzKSB7CisJCQkJaWYgKHMtPnN0YXRlLnJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzcykKKwkJCQkJb25fd2hhdCA9IF8oImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiKTsKKwkJCQllbHNlCisJCQkJCW9uX3doYXQgPSBfKCJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIik7CisJCQkJYnJhbmNoX25hbWUgPSBzLT5zdGF0ZS5vbnRvOworCQkJfSBlbHNlIGlmIChzLT5zdGF0ZS5kZXRhY2hlZF9mcm9tKSB7CisJCQkJYnJhbmNoX25hbWUgPSBzLT5zdGF0ZS5kZXRhY2hlZF9mcm9tOworCQkJCWlmIChzLT5zdGF0ZS5kZXRhY2hlZF9hdCkKKwkJCQkJb25fd2hhdCA9IEhFQURfREVUQUNIRURfQVQ7CisJCQkJZWxzZQorCQkJCQlvbl93aGF0ID0gSEVBRF9ERVRBQ0hFRF9GUk9NOworCQkJfSBlbHNlIHsKKwkJCQlicmFuY2hfbmFtZSA9ICIiOworCQkJCW9uX3doYXQgPSBfKCJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIik7CisJCQl9CisJCX0gZWxzZQorCQkJc2tpcF9wcmVmaXgoYnJhbmNoX25hbWUsICJyZWZzL2hlYWRzLyIsICZicmFuY2hfbmFtZSk7CisJCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIlcyIsICIiKTsKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGJyYW5jaF9zdGF0dXNfY29sb3IsICIlcyIsIG9uX3doYXQpOworCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYnJhbmNoX2NvbG9yLCAiJXNcbiIsIGJyYW5jaF9uYW1lKTsKKwkJaWYgKCFzLT5pc19pbml0aWFsKQorCQkJd3RfbG9uZ3N0YXR1c19wcmludF90cmFja2luZyhzKTsKKwl9CisKKwl3dF9sb25nc3RhdHVzX3ByaW50X3N0YXRlKHMpOworCisJaWYgKHMtPmlzX2luaXRpYWwpIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiVzIiwgIiIpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLAorCQkJCSBzLT5jb21taXRfdGVtcGxhdGUKKwkJCQkgPyBfKCJJbml0aWFsIGNvbW1pdCIpCisJCQkJIDogXygiTm8gY29tbWl0cyB5ZXQiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIlcyIsICIiKTsKKwl9CisKKwl3dF9sb25nc3RhdHVzX3ByaW50X3VwZGF0ZWQocyk7CisJd3RfbG9uZ3N0YXR1c19wcmludF91bm1lcmdlZChzKTsKKwl3dF9sb25nc3RhdHVzX3ByaW50X2NoYW5nZWQocyk7CisJaWYgKHMtPnN1Ym1vZHVsZV9zdW1tYXJ5ICYmCisJICAgICghcy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcgfHwKKwkgICAgIHN0cmNtcChzLT5pZ25vcmVfc3VibW9kdWxlX2FyZywgImFsbCIpKSkgeworCQl3dF9sb25nc3RhdHVzX3ByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHMsIDApOyAgLyogc3RhZ2VkICovCisJCXd0X2xvbmdzdGF0dXNfcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkocywgMSk7ICAvKiB1bnN0YWdlZCAqLworCX0KKwlpZiAocy0+c2hvd191bnRyYWNrZWRfZmlsZXMpIHsKKwkJd3RfbG9uZ3N0YXR1c19wcmludF9vdGhlcihzLCAmcy0+dW50cmFja2VkLCBfKCJVbnRyYWNrZWQgZmlsZXMiKSwgImFkZCIpOworCQlpZiAocy0+c2hvd19pZ25vcmVkX21vZGUpCisJCQl3dF9sb25nc3RhdHVzX3ByaW50X290aGVyKHMsICZzLT5pZ25vcmVkLCBfKCJJZ25vcmVkIGZpbGVzIiksICJhZGQgLWYiKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfdV9vcHRpb24gJiYgMjAwMCA8IHMtPnVudHJhY2tlZF9pbl9tcykgeworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLCAiJXMiLCAiIik7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsCisJCQkJCSBfKCJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisJCQkJCSAgICJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisJCQkJCSAgICJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIiksCisJCQkJCSBzLT51bnRyYWNrZWRfaW5fbXMgLyAxMDAwLjApOworCQl9CisJfSBlbHNlIGlmIChzLT5jb21taXR0YWJsZSkKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLCBfKCJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIiksCisJCQlzLT5oaW50cworCQkJPyBfKCIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIikgOiAiIik7CisKKwlpZiAocy0+dmVyYm9zZSkKKwkJd3RfbG9uZ3N0YXR1c19wcmludF92ZXJib3NlKHMpOworCWlmICghcy0+Y29tbWl0dGFibGUpIHsKKwkJaWYgKHMtPmFtZW5kKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLCBfKCJObyBjaGFuZ2VzIikpOworCQllbHNlIGlmIChzLT5ub3dhcm4pCisJCQk7IC8qIG5vdGhpbmcgKi8KKwkJZWxzZSBpZiAocy0+d29ya2Rpcl9kaXJ0eSkgeworCQkJaWYgKHMtPmhpbnRzKQorCQkJCXByaW50ZihfKCJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAiCisJCQkJCSAiKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iKSk7CisJCQllbHNlCisJCQkJcHJpbnRmKF8oIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iKSk7CisJCX0gZWxzZSBpZiAocy0+dW50cmFja2VkLm5yKSB7CisJCQlpZiAocy0+aGludHMpCisJCQkJcHJpbnRmKF8oIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgIgorCQkJCQkgInByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIpKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoXygibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50XG4iKSk7CisJCX0gZWxzZSBpZiAocy0+aXNfaW5pdGlhbCkgeworCQkJaWYgKHMtPmhpbnRzKQorCQkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgIgorCQkJCQkgImFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iKSk7CisJCQllbHNlCisJCQkJcHJpbnRmKF8oIm5vdGhpbmcgdG8gY29tbWl0XG4iKSk7CisJCX0gZWxzZSBpZiAoIXMtPnNob3dfdW50cmFja2VkX2ZpbGVzKSB7CisJCQlpZiAocy0+aGludHMpCisJCQkJcHJpbnRmKF8oIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iKSk7CisJCQllbHNlCisJCQkJcHJpbnRmKF8oIm5vdGhpbmcgdG8gY29tbWl0XG4iKSk7CisJCX0gZWxzZQorCQkJcHJpbnRmKF8oIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW5cbiIpKTsKKwl9CisJaWYocy0+c2hvd19zdGFzaCkKKwkJd3RfbG9uZ3N0YXR1c19wcmludF9zdGFzaF9zdW1tYXJ5KHMpOworfQorCitzdGF0aWMgdm9pZCB3dF9zaG9ydHN0YXR1c191bm1lcmdlZChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQsCisJCQkgICBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKwljb25zdCBjaGFyICpob3cgPSAiPz8iOworCisJc3dpdGNoIChkLT5zdGFnZW1hc2spIHsKKwljYXNlIDE6IGhvdyA9ICJERCI7IGJyZWFrOyAvKiBib3RoIGRlbGV0ZWQgKi8KKwljYXNlIDI6IGhvdyA9ICJBVSI7IGJyZWFrOyAvKiBhZGRlZCBieSB1cyAqLworCWNhc2UgMzogaG93ID0gIlVEIjsgYnJlYWs7IC8qIGRlbGV0ZWQgYnkgdGhlbSAqLworCWNhc2UgNDogaG93ID0gIlVBIjsgYnJlYWs7IC8qIGFkZGVkIGJ5IHRoZW0gKi8KKwljYXNlIDU6IGhvdyA9ICJEVSI7IGJyZWFrOyAvKiBkZWxldGVkIGJ5IHVzICovCisJY2FzZSA2OiBob3cgPSAiQUEiOyBicmVhazsgLyogYm90aCBhZGRlZCAqLworCWNhc2UgNzogaG93ID0gIlVVIjsgYnJlYWs7IC8qIGJvdGggbW9kaWZpZWQgKi8KKwl9CisJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX1VOTUVSR0VELCBzKSwgIiVzIiwgaG93KTsKKwlpZiAocy0+bnVsbF90ZXJtaW5hdGlvbikgeworCQlmcHJpbnRmKHN0ZG91dCwgIiAlcyVjIiwgaXQtPnN0cmluZywgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBvbmVidWYgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqb25lOworCQlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJm9uZWJ1Zik7CisJCXByaW50ZigiICVzXG4iLCBvbmUpOworCQlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHd0X3Nob3J0c3RhdHVzX3N0YXR1cyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQsCisJCQkgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkID0gaXQtPnV0aWw7CisKKwlpZiAoZC0+aW5kZXhfc3RhdHVzKQorCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfVVBEQVRFRCwgcyksICIlYyIsIGQtPmluZGV4X3N0YXR1cyk7CisJZWxzZQorCQlwdXRjaGFyKCcgJyk7CisJaWYgKGQtPndvcmt0cmVlX3N0YXR1cykKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0NIQU5HRUQsIHMpLCAiJWMiLCBkLT53b3JrdHJlZV9zdGF0dXMpOworCWVsc2UKKwkJcHV0Y2hhcignICcpOworCXB1dGNoYXIoJyAnKTsKKwlpZiAocy0+bnVsbF90ZXJtaW5hdGlvbikgeworCQlmcHJpbnRmKHN0ZG91dCwgIiVzJWMiLCBpdC0+c3RyaW5nLCAwKTsKKwkJaWYgKGQtPnJlbmFtZV9zb3VyY2UpCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVzJWMiLCBkLT5yZW5hbWVfc291cmNlLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpvbmU7CisKKwkJaWYgKGQtPnJlbmFtZV9zb3VyY2UpIHsKKwkJCW9uZSA9IHF1b3RlX3BhdGgoZC0+cmVuYW1lX3NvdXJjZSwgcy0+cHJlZml4LCAmb25lYnVmKTsKKwkJCWlmICgqb25lICE9ICciJyAmJiBzdHJjaHIob25lLCAnICcpICE9IE5VTEwpIHsKKwkJCQlwdXRjaGFyKCciJyk7CisJCQkJc3RyYnVmX2FkZGNoKCZvbmVidWYsICciJyk7CisJCQkJb25lID0gb25lYnVmLmJ1ZjsKKwkJCX0KKwkJCXByaW50ZigiJXMgLT4gIiwgb25lKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCQl9CisJCW9uZSA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgcy0+cHJlZml4LCAmb25lYnVmKTsKKwkJaWYgKCpvbmUgIT0gJyInICYmIHN0cmNocihvbmUsICcgJykgIT0gTlVMTCkgeworCQkJcHV0Y2hhcignIicpOworCQkJc3RyYnVmX2FkZGNoKCZvbmVidWYsICciJyk7CisJCQlvbmUgPSBvbmVidWYuYnVmOworCQl9CisJCXByaW50ZigiJXNcbiIsIG9uZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfb3RoZXIoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0LAorCQkJCSBzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpzaWduKQoreworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCWZwcmludGYoc3Rkb3V0LCAiJXMgJXMlYyIsIHNpZ24sIGl0LT5zdHJpbmcsIDApOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKm9uZTsKKwkJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZvbmVidWYpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfVU5UUkFDS0VELCBzKSwgIiVzIiwgc2lnbik7CisJCXByaW50ZigiICVzXG4iLCBvbmUpOworCQlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHd0X3Nob3J0c3RhdHVzX3ByaW50X3RyYWNraW5nKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCWNvbnN0IGNoYXIgKmhlYWRlcl9jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCWNvbnN0IGNoYXIgKmJyYW5jaF9jb2xvcl9sb2NhbCA9IGNvbG9yKFdUX1NUQVRVU19MT0NBTF9CUkFOQ0gsIHMpOworCWNvbnN0IGNoYXIgKmJyYW5jaF9jb2xvcl9yZW1vdGUgPSBjb2xvcihXVF9TVEFUVVNfUkVNT1RFX0JSQU5DSCwgcyk7CisKKwljb25zdCBjaGFyICpiYXNlOworCWNoYXIgKnNob3J0X2Jhc2U7CisJY29uc3QgY2hhciAqYnJhbmNoX25hbWU7CisJaW50IG51bV9vdXJzLCBudW1fdGhlaXJzLCBzdGk7CisJaW50IHVwc3RyZWFtX2lzX2dvbmUgPSAwOworCisJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIjIyAiKTsKKworCWlmICghcy0+YnJhbmNoKQorCQlyZXR1cm47CisJYnJhbmNoX25hbWUgPSBzLT5icmFuY2g7CisKKyNkZWZpbmUgTEFCRUwoc3RyaW5nKSAocy0+bm9fZ2V0dGV4dCA/IChzdHJpbmcpIDogXyhzdHJpbmcpKQorCisJaWYgKHMtPmlzX2luaXRpYWwpCisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oIk5vIGNvbW1pdHMgeWV0IG9uICIpKSk7CisKKwlpZiAoIXN0cmNtcChzLT5icmFuY2gsICJIRUFEIikpIHsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX05PQlJBTkNILCBzKSwgIiVzIiwKKwkJCSAgICAgIExBQkVMKE5fKCJIRUFEIChubyBicmFuY2gpIikpKTsKKwkJZ290byBjb25jbHVkZTsKKwl9CisKKwlza2lwX3ByZWZpeChicmFuY2hfbmFtZSwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaF9uYW1lKTsKKworCWJyYW5jaCA9IGJyYW5jaF9nZXQoYnJhbmNoX25hbWUpOworCisJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX2xvY2FsLCAiJXMiLCBicmFuY2hfbmFtZSk7CisKKwlzdGkgPSBzdGF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmbnVtX291cnMsICZudW1fdGhlaXJzLCAmYmFzZSwKKwkJCQkgMCwgcy0+YWhlYWRfYmVoaW5kX2ZsYWdzKTsKKwlpZiAoc3RpIDwgMCkgeworCQlpZiAoIWJhc2UpCisJCQlnb3RvIGNvbmNsdWRlOworCisJCXVwc3RyZWFtX2lzX2dvbmUgPSAxOworCX0KKworCXNob3J0X2Jhc2UgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihiYXNlLCAwKTsKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsICIuLi4iKTsKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfcmVtb3RlLCAiJXMiLCBzaG9ydF9iYXNlKTsKKwlmcmVlKHNob3J0X2Jhc2UpOworCisJaWYgKCF1cHN0cmVhbV9pc19nb25lICYmICFzdGkpCisJCWdvdG8gY29uY2x1ZGU7CisKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsICIgWyIpOworCWlmICh1cHN0cmVhbV9pc19nb25lKSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oImdvbmUiKSkpOworCX0gZWxzZSBpZiAocy0+YWhlYWRfYmVoaW5kX2ZsYWdzID09IEFIRUFEX0JFSElORF9RVUlDSykgeworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsIExBQkVMKE5fKCJkaWZmZXJlbnQiKSkpOworCX0gZWxzZSBpZiAoIW51bV9vdXJzKSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oImJlaGluZCAiKSkpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfcmVtb3RlLCAiJWQiLCBudW1fdGhlaXJzKTsKKwl9IGVsc2UgaWYgKCFudW1fdGhlaXJzKSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oImFoZWFkICIpKSk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGJyYW5jaF9jb2xvcl9sb2NhbCwgIiVkIiwgbnVtX291cnMpOworCX0gZWxzZSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oImFoZWFkICIpKSk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGJyYW5jaF9jb2xvcl9sb2NhbCwgIiVkIiwgbnVtX291cnMpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsICIsICVzIiwgTEFCRUwoTl8oImJlaGluZCAiKSkpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfcmVtb3RlLCAiJWQiLCBudW1fdGhlaXJzKTsKKwl9CisKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsICJdIik7CisgY29uY2x1ZGU6CisJZnB1dGMocy0+bnVsbF90ZXJtaW5hdGlvbiA/ICdcMCcgOiAnXG4nLCBzLT5mcCk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3Nob3J0c3RhdHVzX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCisJaWYgKHMtPnNob3dfYnJhbmNoKQorCQl3dF9zaG9ydHN0YXR1c19wcmludF90cmFja2luZyhzKTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXQsICZzLT5jaGFuZ2UpIHsKKwkJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCisJCWlmIChkLT5zdGFnZW1hc2spCisJCQl3dF9zaG9ydHN0YXR1c191bm1lcmdlZChpdCwgcyk7CisJCWVsc2UKKwkJCXd0X3Nob3J0c3RhdHVzX3N0YXR1cyhpdCwgcyk7CisJfQorCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXQsICZzLT51bnRyYWNrZWQpCisJCXd0X3Nob3J0c3RhdHVzX290aGVyKGl0LCBzLCAiPz8iKTsKKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXQsICZzLT5pZ25vcmVkKQorCQl3dF9zaG9ydHN0YXR1c19vdGhlcihpdCwgcywgIiEhIik7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3BvcmNlbGFpbl9wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXMtPnVzZV9jb2xvciA9IDA7CisJcy0+cmVsYXRpdmVfcGF0aHMgPSAwOworCXMtPnByZWZpeCA9IE5VTEw7CisJcy0+bm9fZ2V0dGV4dCA9IDE7CisJd3Rfc2hvcnRzdGF0dXNfcHJpbnQocyk7Cit9CisKKy8qCisgKiBQcmludCBicmFuY2ggaW5mb3JtYXRpb24gZm9yIHBvcmNlbGFpbiB2MiBvdXRwdXQuICBUaGVzZSBsaW5lcworICogYXJlIHByaW50ZWQgd2hlbiB0aGUgJy0tYnJhbmNoJyBwYXJhbWV0ZXIgaXMgZ2l2ZW4uCisgKgorICogICAgIyBicmFuY2gub2lkIDxjb21taXQ+PGVvbD4KKyAqICAgICMgYnJhbmNoLmhlYWQgPGhlYWQ+PGVvbD4KKyAqICAgWyMgYnJhbmNoLnVwc3RyZWFtIDx1cHN0cmVhbT48ZW9sPgorICogICBbIyBicmFuY2guYWIgKzxhaGVhZD4gLTxiZWhpbmQ+PGVvbD5dXQorICoKKyAqICAgICAgPGNvbW1pdD4gOjo9IHRoZSBjdXJyZW50IGNvbW1pdCBoYXNoIG9yIHRoZSB0aGUgbGl0ZXJhbAorICogICAgICAgICAgICAgICAgICAgIihpbml0aWFsKSIgdG8gaW5kaWNhdGUgYW4gaW5pdGlhbGl6ZWQgcmVwbworICogICAgICAgICAgICAgICAgICAgd2l0aCBubyBjb21taXRzLgorICoKKyAqICAgICAgICA8aGVhZD4gOjo9IDxicmFuY2hfbmFtZT4gdGhlIGN1cnJlbnQgYnJhbmNoIG5hbWUgb3IKKyAqICAgICAgICAgICAgICAgICAgICIoZGV0YWNoZWQpIiBsaXRlcmFsIHdoZW4gZGV0YWNoZWQgaGVhZCBvcgorICogICAgICAgICAgICAgICAgICAgIih1bmtub3duKSIgd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuCisgKgorICogICAgPHVwc3RyZWFtPiA6Oj0gdGhlIHVwc3RyZWFtIGJyYW5jaCBuYW1lLCB3aGVuIHNldC4KKyAqCisgKiAgICAgICA8YWhlYWQ+IDo6PSBpbnRlZ2VyIGFoZWFkIHZhbHVlIG9yICc/Jy4KKyAqCisgKiAgICAgIDxiZWhpbmQ+IDo6PSBpbnRlZ2VyIGJlaGluZCB2YWx1ZSBvciAnPycuCisgKgorICogVGhlIGVuZC1vZi1saW5lIGlzIGRlZmluZWQgYnkgdGhlIC16IGZsYWcuCisgKgorICogICAgICAgICAgICAgICAgIDxlb2w+IDo6PSBOVUwgd2hlbiAteiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTEYgd2hlbiBOT1QgLXouCisgKgorICogV2hlbiBhbiB1cHN0cmVhbSBpcyBzZXQgYW5kIHByZXNlbnQsIHRoZSAnYnJhbmNoLmFiJyBsaW5lIHdpbGwKKyAqIGJlIHByaW50ZWQgd2l0aCB0aGUgYWhlYWQvYmVoaW5kIGNvdW50cyBmb3IgdGhlIGJyYW5jaCBhbmQgdGhlCisgKiB1cHN0cmVhbS4gIFdoZW4gQUhFQURfQkVISU5EX1FVSUNLIGlzIHJlcXVlc3RlZCBhbmQgdGhlIGJyYW5jaGVzCisgKiBhcmUgZGlmZmVyZW50LCAnPycgd2lsbCBiZSBzdWJzdGl0dXRlZCBmb3IgdGhlIGFjdHVhbCBjb3VudC4KKyAqLworc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3YyX3ByaW50X3RyYWNraW5nKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCWNvbnN0IGNoYXIgKmJhc2U7CisJY29uc3QgY2hhciAqYnJhbmNoX25hbWU7CisJaW50IGFiX2luZm8sIG5yX2FoZWFkLCBucl9iZWhpbmQ7CisJY2hhciBlb2wgPSBzLT5udWxsX3Rlcm1pbmF0aW9uID8gJ1wwJyA6ICdcbic7CisKKwlmcHJpbnRmKHMtPmZwLCAiIyBicmFuY2gub2lkICVzJWMiLAorCQkJKHMtPmlzX2luaXRpYWwgPyAiKGluaXRpYWwpIiA6IG9pZF90b19oZXgoJnMtPm9pZF9jb21taXQpKSwKKwkJCWVvbCk7CisKKwlpZiAoIXMtPmJyYW5jaCkKKwkJZnByaW50ZihzLT5mcCwgIiMgYnJhbmNoLmhlYWQgJXMlYyIsICIodW5rbm93bikiLCBlb2wpOworCWVsc2UgeworCQlpZiAoIXN0cmNtcChzLT5icmFuY2gsICJIRUFEIikpIHsKKwkJCWZwcmludGYocy0+ZnAsICIjIGJyYW5jaC5oZWFkICVzJWMiLCAiKGRldGFjaGVkKSIsIGVvbCk7CisKKwkJCWlmIChzLT5zdGF0ZS5yZWJhc2VfaW5fcHJvZ3Jlc3MgfHwKKwkJCSAgICBzLT5zdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MpCisJCQkJYnJhbmNoX25hbWUgPSBzLT5zdGF0ZS5vbnRvOworCQkJZWxzZSBpZiAocy0+c3RhdGUuZGV0YWNoZWRfZnJvbSkKKwkJCQlicmFuY2hfbmFtZSA9IHMtPnN0YXRlLmRldGFjaGVkX2Zyb207CisJCQllbHNlCisJCQkJYnJhbmNoX25hbWUgPSAiIjsKKwkJfSBlbHNlIHsKKwkJCWJyYW5jaF9uYW1lID0gTlVMTDsKKwkJCXNraXBfcHJlZml4KHMtPmJyYW5jaCwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaF9uYW1lKTsKKworCQkJZnByaW50ZihzLT5mcCwgIiMgYnJhbmNoLmhlYWQgJXMlYyIsIGJyYW5jaF9uYW1lLCBlb2wpOworCQl9CisKKwkJLyogTG9va3VwIHN0YXRzIG9uIHRoZSB1cHN0cmVhbSB0cmFja2luZyBicmFuY2gsIGlmIHNldC4gKi8KKwkJYnJhbmNoID0gYnJhbmNoX2dldChicmFuY2hfbmFtZSk7CisJCWJhc2UgPSBOVUxMOworCQlhYl9pbmZvID0gc3RhdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJm5yX2FoZWFkLCAmbnJfYmVoaW5kLAorCQkJCQkgICAgICZiYXNlLCAwLCBzLT5haGVhZF9iZWhpbmRfZmxhZ3MpOworCQlpZiAoYmFzZSkgeworCQkJYmFzZSA9IHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGJhc2UsIDApOworCQkJZnByaW50ZihzLT5mcCwgIiMgYnJhbmNoLnVwc3RyZWFtICVzJWMiLCBiYXNlLCBlb2wpOworCQkJZnJlZSgoY2hhciAqKWJhc2UpOworCisJCQlpZiAoYWJfaW5mbyA+IDApIHsKKwkJCQkvKiBkaWZmZXJlbnQgKi8KKwkJCQlpZiAobnJfYWhlYWQgfHwgbnJfYmVoaW5kKQorCQkJCQlmcHJpbnRmKHMtPmZwLCAiIyBicmFuY2guYWIgKyVkIC0lZCVjIiwKKwkJCQkJCW5yX2FoZWFkLCBucl9iZWhpbmQsIGVvbCk7CisJCQkJZWxzZQorCQkJCQlmcHJpbnRmKHMtPmZwLCAiIyBicmFuY2guYWIgKz8gLT8lYyIsCisJCQkJCQllb2wpOworCQkJfSBlbHNlIGlmICghYWJfaW5mbykgeworCQkJCS8qIHNhbWUgKi8KKwkJCQlmcHJpbnRmKHMtPmZwLCAiIyBicmFuY2guYWIgKzAgLTAlYyIsIGVvbCk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgKiBDb252ZXJ0IHZhcmlvdXMgc3VibW9kdWxlIHN0YXR1cyB2YWx1ZXMgaW50byBhCisgKiBmaXhlZC1sZW5ndGggc3RyaW5nIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGJ1ZmZlciBwcm92aWRlZC4KKyAqLworc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3YyX3N1Ym1vZHVsZV9zdGF0ZSgKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkLAorCWNoYXIgc3ViWzVdKQoreworCWlmIChTX0lTR0lUTElOSyhkLT5tb2RlX2hlYWQpIHx8CisJCVNfSVNHSVRMSU5LKGQtPm1vZGVfaW5kZXgpIHx8CisJCVNfSVNHSVRMSU5LKGQtPm1vZGVfd29ya3RyZWUpKSB7CisJCXN1YlswXSA9ICdTJzsKKwkJc3ViWzFdID0gZC0+bmV3X3N1Ym1vZHVsZV9jb21taXRzID8gJ0MnIDogJy4nOworCQlzdWJbMl0gPSAoZC0+ZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX01PRElGSUVEKSA/ICdNJyA6ICcuJzsKKwkJc3ViWzNdID0gKGQtPmRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9VTlRSQUNLRUQpID8gJ1UnIDogJy4nOworCX0gZWxzZSB7CisJCXN1YlswXSA9ICdOJzsKKwkJc3ViWzFdID0gJy4nOworCQlzdWJbMl0gPSAnLic7CisJCXN1YlszXSA9ICcuJzsKKwl9CisJc3ViWzRdID0gMDsKK30KKworLyoKKyAqIEZpeC11cCBjaGFuZ2VkIGVudHJpZXMgYmVmb3JlIHdlIHByaW50IHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkIHd0X3BvcmNlbGFpbl92Ml9maXhfdXBfY2hhbmdlZChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQpCit7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCisJaWYgKCFkLT5pbmRleF9zdGF0dXMpIHsKKwkJLyoKKwkJICogVGhpcyBlbnRyeSBpcyB1bmNoYW5nZWQgaW4gdGhlIGluZGV4IChyZWxhdGl2ZSB0byB0aGUgaGVhZCkuCisJCSAqIFRoZXJlZm9yZSwgdGhlIGNvbGxlY3RfdXBkYXRlZF9jYiB3YXMgbmV2ZXIgY2FsbGVkIGZvciB0aGlzCisJCSAqIGVudHJ5IChkdXJpbmcgdGhlIGhlYWQtdnMtaW5kZXggc2NhbikgYW5kIHNvIHRoZSBoZWFkIGNvbHVtbgorCQkgKiBmaWVsZHMgd2VyZSBuZXZlciBzZXQuCisJCSAqCisJCSAqIFdlIG11c3QgaGF2ZSBkYXRhIGZvciB0aGUgaW5kZXggY29sdW1uIChmcm9tIHRoZQorCQkgKiBpbmRleC12cy13b3JrdHJlZSBzY2FuIChvdGhlcndpc2UsIHRoaXMgZW50cnkgc2hvdWxkIG5vdCBiZQorCQkgKiBpbiB0aGUgbGlzdCBvZiBjaGFuZ2VzKSkuCisJCSAqCisJCSAqIENvcHkgaW5kZXggY29sdW1uIGZpZWxkcyB0byB0aGUgaGVhZCBjb2x1bW4sIHNvIHRoYXQgb3VyCisJCSAqIG91dHB1dCBsb29rcyBjb21wbGV0ZS4KKwkJICovCisJCWFzc2VydChkLT5tb2RlX2hlYWQgPT0gMCk7CisJCWQtPm1vZGVfaGVhZCA9IGQtPm1vZGVfaW5kZXg7CisJCW9pZGNweSgmZC0+b2lkX2hlYWQsICZkLT5vaWRfaW5kZXgpOworCX0KKworCWlmICghZC0+d29ya3RyZWVfc3RhdHVzKSB7CisJCS8qCisJCSAqIFRoaXMgZW50cnkgaXMgdW5jaGFuZ2VkIGluIHRoZSB3b3JrdHJlZSAocmVsYXRpdmUgdG8gdGhlIGluZGV4KS4KKwkJICogVGhlcmVmb3JlLCB0aGUgY29sbGVjdF9jaGFuZ2VkX2NiIHdhcyBuZXZlciBjYWxsZWQgZm9yIHRoaXMgZW50cnkKKwkJICogKGR1cmluZyB0aGUgaW5kZXgtdnMtd29ya3RyZWUgc2NhbikgYW5kIHNvIHRoZSB3b3JrdHJlZSBjb2x1bW4KKwkJICogZmllbGRzIHdlcmUgbmV2ZXIgc2V0LgorCQkgKgorCQkgKiBXZSBtdXN0IGhhdmUgZGF0YSBmb3IgdGhlIGluZGV4IGNvbHVtbiAoZnJvbSB0aGUgaGVhZC12cy1pbmRleAorCQkgKiBzY2FuKS4KKwkJICoKKwkJICogQ29weSB0aGUgaW5kZXggY29sdW1uIGZpZWxkcyB0byB0aGUgd29ya3RyZWUgY29sdW1uIHNvIHRoYXQKKwkJICogb3VyIG91dHB1dCBsb29rcyBjb21wbGV0ZS4KKwkJICoKKwkJICogTm90ZSB0aGF0IHdlIG9ubHkgaGF2ZSBhIG1vZGUgZmllbGQgaW4gdGhlIHdvcmt0cmVlIGNvbHVtbgorCQkgKiBiZWNhdXNlIHRoZSBzY2FuIGNvZGUgdHJpZXMgcmVhbGx5IGhhcmQgdG8gbm90IGhhdmUgdG8gY29tcHV0ZSBpdC4KKwkJICovCisJCWFzc2VydChkLT5tb2RlX3dvcmt0cmVlID09IDApOworCQlkLT5tb2RlX3dvcmt0cmVlID0gZC0+bW9kZV9pbmRleDsKKwl9Cit9CisKKy8qCisgKiBQcmludCBwb3JjZWxhaW4gdjIgaW5mbyBmb3IgdHJhY2tlZCBlbnRyaWVzIHdpdGggY2hhbmdlcy4KKyAqLworc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3YyX3ByaW50X2NoYW5nZWRfZW50cnkoCisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0LAorCXN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWZfZnJvbSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnBhdGggPSBOVUxMOworCWNvbnN0IGNoYXIgKnBhdGhfZnJvbSA9IE5VTEw7CisJY2hhciBrZXlbM107CisJY2hhciBzdWJtb2R1bGVfdG9rZW5bNV07CisJY2hhciBzZXBfY2hhciwgZW9sX2NoYXI7CisKKwl3dF9wb3JjZWxhaW5fdjJfZml4X3VwX2NoYW5nZWQoaXQpOworCXd0X3BvcmNlbGFpbl92Ml9zdWJtb2R1bGVfc3RhdGUoZCwgc3VibW9kdWxlX3Rva2VuKTsKKworCWtleVswXSA9IGQtPmluZGV4X3N0YXR1cyA/IGQtPmluZGV4X3N0YXR1cyA6ICcuJzsKKwlrZXlbMV0gPSBkLT53b3JrdHJlZV9zdGF0dXMgPyBkLT53b3JrdHJlZV9zdGF0dXMgOiAnLic7CisJa2V5WzJdID0gMDsKKworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCS8qCisJCSAqIEluIC16IG1vZGUsIHdlIERPIE5PVCBDLXF1b3RlIHBhdGhuYW1lcy4gIEN1cnJlbnQgcGF0aCBpcyBBTFdBWVMgZmlyc3QuCisJCSAqIEEgc2luZ2xlIE5VTCBjaGFyYWN0ZXIgc2VwYXJhdGVzIHRoZW0uCisJCSAqLworCQlzZXBfY2hhciA9ICdcMCc7CisJCWVvbF9jaGFyID0gJ1wwJzsKKwkJcGF0aCA9IGl0LT5zdHJpbmc7CisJCXBhdGhfZnJvbSA9IGQtPnJlbmFtZV9zb3VyY2U7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUGF0aChzKSBhcmUgQy1xdW90ZWQgaWYgbmVjZXNzYXJ5LiBDdXJyZW50IHBhdGggaXMgQUxXQVlTIGZpcnN0LgorCQkgKiBUaGUgc291cmNlIHBhdGggaXMgb25seSBwcmVzZW50IHdoZW4gbmVjZXNzYXJ5LgorCQkgKiBBIHNpbmdsZSBUQUIgc2VwYXJhdGVzIHRoZW0gKGJlY2F1c2UgcGF0aHMgY2FuIGNvbnRhaW4gc3BhY2VzCisJCSAqIHdoaWNoIGFyZSBub3QgZXNjYXBlZCBhbmQgQy1xdW90aW5nIGRvZXMgZXNjYXBlIFRBQiBjaGFyYWN0ZXJzKS4KKwkJICovCisJCXNlcF9jaGFyID0gJ1x0JzsKKwkJZW9sX2NoYXIgPSAnXG4nOworCQlwYXRoID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZidWYpOworCQlpZiAoZC0+cmVuYW1lX3NvdXJjZSkKKwkJCXBhdGhfZnJvbSA9IHF1b3RlX3BhdGgoZC0+cmVuYW1lX3NvdXJjZSwgcy0+cHJlZml4LCAmYnVmX2Zyb20pOworCX0KKworCWlmIChwYXRoX2Zyb20pCisJCWZwcmludGYocy0+ZnAsICIyICVzICVzICUwNm8gJTA2byAlMDZvICVzICVzICVjJWQgJXMlYyVzJWMiLAorCQkJCWtleSwgc3VibW9kdWxlX3Rva2VuLAorCQkJCWQtPm1vZGVfaGVhZCwgZC0+bW9kZV9pbmRleCwgZC0+bW9kZV93b3JrdHJlZSwKKwkJCQlvaWRfdG9faGV4KCZkLT5vaWRfaGVhZCksIG9pZF90b19oZXgoJmQtPm9pZF9pbmRleCksCisJCQkJZC0+cmVuYW1lX3N0YXR1cywgZC0+cmVuYW1lX3Njb3JlLAorCQkJCXBhdGgsIHNlcF9jaGFyLCBwYXRoX2Zyb20sIGVvbF9jaGFyKTsKKwllbHNlCisJCWZwcmludGYocy0+ZnAsICIxICVzICVzICUwNm8gJTA2byAlMDZvICVzICVzICVzJWMiLAorCQkJCWtleSwgc3VibW9kdWxlX3Rva2VuLAorCQkJCWQtPm1vZGVfaGVhZCwgZC0+bW9kZV9pbmRleCwgZC0+bW9kZV93b3JrdHJlZSwKKwkJCQlvaWRfdG9faGV4KCZkLT5vaWRfaGVhZCksIG9pZF90b19oZXgoJmQtPm9pZF9pbmRleCksCisJCQkJcGF0aCwgZW9sX2NoYXIpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zl9mcm9tKTsKK30KKworLyoKKyAqIFByaW50IHBvcmNlbGFpbiB2MiBzdGF0dXMgaW5mbyBmb3IgdW5tZXJnZWQgZW50cmllcy4KKyAqLworc3RhdGljIHZvaWQgd3RfcG9yY2VsYWluX3YyX3ByaW50X3VubWVyZ2VkX2VudHJ5KAorCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSA9IHMtPnJlcG8tPmluZGV4OworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJc3RydWN0IHN0cmJ1ZiBidWZfaW5kZXggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwYXRoX2luZGV4ID0gTlVMTDsKKwlpbnQgcG9zLCBzdGFnZSwgc3VtOworCXN0cnVjdCB7CisJCWludCBtb2RlOworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwl9IHN0YWdlc1szXTsKKwljaGFyICprZXk7CisJY2hhciBzdWJtb2R1bGVfdG9rZW5bNV07CisJY2hhciB1bm1lcmdlZF9wcmVmaXggPSAndSc7CisJY2hhciBlb2xfY2hhciA9IHMtPm51bGxfdGVybWluYXRpb24gPyAnXDAnIDogJ1xuJzsKKworCXd0X3BvcmNlbGFpbl92Ml9zdWJtb2R1bGVfc3RhdGUoZCwgc3VibW9kdWxlX3Rva2VuKTsKKworCXN3aXRjaCAoZC0+c3RhZ2VtYXNrKSB7CisJY2FzZSAxOiBrZXkgPSAiREQiOyBicmVhazsgLyogYm90aCBkZWxldGVkICovCisJY2FzZSAyOiBrZXkgPSAiQVUiOyBicmVhazsgLyogYWRkZWQgYnkgdXMgKi8KKwljYXNlIDM6IGtleSA9ICJVRCI7IGJyZWFrOyAvKiBkZWxldGVkIGJ5IHRoZW0gKi8KKwljYXNlIDQ6IGtleSA9ICJVQSI7IGJyZWFrOyAvKiBhZGRlZCBieSB0aGVtICovCisJY2FzZSA1OiBrZXkgPSAiRFUiOyBicmVhazsgLyogZGVsZXRlZCBieSB1cyAqLworCWNhc2UgNjoga2V5ID0gIkFBIjsgYnJlYWs7IC8qIGJvdGggYWRkZWQgKi8KKwljYXNlIDc6IGtleSA9ICJVVSI7IGJyZWFrOyAvKiBib3RoIG1vZGlmaWVkICovCisJZGVmYXVsdDoKKwkJQlVHKCJ1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IiwgZC0+c3RhZ2VtYXNrKTsKKwl9CisKKwkvKgorCSAqIERpc3JlZ2FyZCBkLmF1eC5wb3JjZWxhaW5fdjIgZGF0YSB0aGF0IHdlIGFjY3VtdWxhdGVkCisJICogZm9yIHRoZSBoZWFkIGFuZCBpbmRleCBjb2x1bW5zIGR1cmluZyB0aGUgc2NhbnMgYW5kCisJICogcmVwbGFjZSB3aXRoIHRoZSBhY3R1YWwgc3RhZ2UgZGF0YS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzIGlzIGEgbGFzdC1vbmUtd2lucyBmb3IgZWFjaCB0aGUgaW5kaXZpZHVhbAorCSAqIHN0YWdlIFsxMjNdIGNvbHVtbnMgaW4gdGhlIGV2ZW50IG9mIG11bHRpcGxlIGNhY2hlIGVudHJpZXMKKwkgKiBmb3Igc2FtZSBzdGFnZS4KKwkgKi8KKwltZW1zZXQoc3RhZ2VzLCAwLCBzaXplb2Yoc3RhZ2VzKSk7CisJc3VtID0gMDsKKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIGl0LT5zdHJpbmcsIHN0cmxlbihpdC0+c3RyaW5nKSk7CisJYXNzZXJ0KHBvcyA8IDApOworCXBvcyA9IC1wb3MtMTsKKwl3aGlsZSAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zKytdOworCQlzdGFnZSA9IGNlX3N0YWdlKGNlKTsKKwkJaWYgKHN0cmNtcChjZS0+bmFtZSwgaXQtPnN0cmluZykgfHwgIXN0YWdlKQorCQkJYnJlYWs7CisJCXN0YWdlc1tzdGFnZSAtIDFdLm1vZGUgPSBjZS0+Y2VfbW9kZTsKKwkJb2lkY3B5KCZzdGFnZXNbc3RhZ2UgLSAxXS5vaWQsICZjZS0+b2lkKTsKKwkJc3VtIHw9ICgxIDw8IChzdGFnZSAtIDEpKTsKKwl9CisJaWYgKHN1bSAhPSBkLT5zdGFnZW1hc2spCisJCUJVRygib2JzZXJ2ZWQgc3RhZ2VtYXNrIDB4JXggIT0gZXhwZWN0ZWQgc3RhZ2VtYXNrIDB4JXgiLCBzdW0sIGQtPnN0YWdlbWFzayk7CisKKwlpZiAocy0+bnVsbF90ZXJtaW5hdGlvbikKKwkJcGF0aF9pbmRleCA9IGl0LT5zdHJpbmc7CisJZWxzZQorCQlwYXRoX2luZGV4ID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZidWZfaW5kZXgpOworCisJZnByaW50ZihzLT5mcCwgIiVjICVzICVzICUwNm8gJTA2byAlMDZvICUwNm8gJXMgJXMgJXMgJXMlYyIsCisJCQl1bm1lcmdlZF9wcmVmaXgsIGtleSwgc3VibW9kdWxlX3Rva2VuLAorCQkJc3RhZ2VzWzBdLm1vZGUsIC8qIHN0YWdlIDEgKi8KKwkJCXN0YWdlc1sxXS5tb2RlLCAvKiBzdGFnZSAyICovCisJCQlzdGFnZXNbMl0ubW9kZSwgLyogc3RhZ2UgMyAqLworCQkJZC0+bW9kZV93b3JrdHJlZSwKKwkJCW9pZF90b19oZXgoJnN0YWdlc1swXS5vaWQpLCAvKiBzdGFnZSAxICovCisJCQlvaWRfdG9faGV4KCZzdGFnZXNbMV0ub2lkKSwgLyogc3RhZ2UgMiAqLworCQkJb2lkX3RvX2hleCgmc3RhZ2VzWzJdLm9pZCksIC8qIHN0YWdlIDMgKi8KKwkJCXBhdGhfaW5kZXgsCisJCQllb2xfY2hhcik7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmX2luZGV4KTsKK30KKworLyoKKyAqIFByaW50IHBvcmNlbGFpbiBWMiBzdGF0dXMgaW5mbyBmb3IgdW50cmFja2VkIGFuZCBpZ25vcmVkIGVudHJpZXMuCisgKi8KK3N0YXRpYyB2b2lkIHd0X3BvcmNlbGFpbl92Ml9wcmludF9vdGhlcigKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQsCisJc3RydWN0IHd0X3N0YXR1cyAqcywKKwljaGFyIHByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnBhdGg7CisJY2hhciBlb2xfY2hhcjsKKworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCXBhdGggPSBpdC0+c3RyaW5nOworCQllb2xfY2hhciA9ICdcMCc7CisJfSBlbHNlIHsKKwkJcGF0aCA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgcy0+cHJlZml4LCAmYnVmKTsKKwkJZW9sX2NoYXIgPSAnXG4nOworCX0KKworCWZwcmludGYocy0+ZnAsICIlYyAlcyVjIiwgcHJlZml4LCBwYXRoLCBlb2xfY2hhcik7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworLyoKKyAqIFByaW50IHBvcmNlbGFpbiBWMiBzdGF0dXMuCisgKgorICogWzx2Ml9icmFuY2g+XQorICogWzx2Ml9jaGFuZ2VkX2l0ZW1zPl0qCisgKiBbPHYyX3VubWVyZ2VkX2l0ZW1zPl0qCisgKiBbPHYyX3VudHJhY2tlZF9pdGVtcz5dKgorICogWzx2Ml9pZ25vcmVkX2l0ZW1zPl0qCisgKgorICovCitzdGF0aWMgdm9pZCB3dF9wb3JjZWxhaW5fdjJfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwlpbnQgaTsKKworCWlmIChzLT5zaG93X2JyYW5jaCkKKwkJd3RfcG9yY2VsYWluX3YyX3ByaW50X3RyYWNraW5nKHMpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCWl0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZC0+c3RhZ2VtYXNrKQorCQkJd3RfcG9yY2VsYWluX3YyX3ByaW50X2NoYW5nZWRfZW50cnkoaXQsIHMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlpdCA9ICYocy0+Y2hhbmdlLml0ZW1zW2ldKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoZC0+c3RhZ2VtYXNrKQorCQkJd3RfcG9yY2VsYWluX3YyX3ByaW50X3VubWVyZ2VkX2VudHJ5KGl0LCBzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+dW50cmFja2VkLm5yOyBpKyspIHsKKwkJaXQgPSAmKHMtPnVudHJhY2tlZC5pdGVtc1tpXSk7CisJCXd0X3BvcmNlbGFpbl92Ml9wcmludF9vdGhlcihpdCwgcywgJz8nKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+aWdub3JlZC5ucjsgaSsrKSB7CisJCWl0ID0gJihzLT5pZ25vcmVkLml0ZW1zW2ldKTsKKwkJd3RfcG9yY2VsYWluX3YyX3ByaW50X290aGVyKGl0LCBzLCAnIScpOworCX0KK30KKwordm9pZCB3dF9zdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwl0cmFjZTJfZGF0YV9pbnRtYXgoInN0YXR1cyIsIHMtPnJlcG8sICJjb3VudC9jaGFuZ2VkIiwgcy0+Y2hhbmdlLm5yKTsKKwl0cmFjZTJfZGF0YV9pbnRtYXgoInN0YXR1cyIsIHMtPnJlcG8sICJjb3VudC91bnRyYWNrZWQiLAorCQkJICAgcy0+dW50cmFja2VkLm5yKTsKKwl0cmFjZTJfZGF0YV9pbnRtYXgoInN0YXR1cyIsIHMtPnJlcG8sICJjb3VudC9pZ25vcmVkIiwgcy0+aWdub3JlZC5ucik7CisKKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJzdGF0dXMiLCAicHJpbnQiLCBzLT5yZXBvKTsKKworCXN3aXRjaCAocy0+c3RhdHVzX2Zvcm1hdCkgeworCWNhc2UgU1RBVFVTX0ZPUk1BVF9TSE9SVDoKKwkJd3Rfc2hvcnRzdGF0dXNfcHJpbnQocyk7CisJCWJyZWFrOworCWNhc2UgU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU46CisJCXd0X3BvcmNlbGFpbl9wcmludChzKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTl9WMjoKKwkJd3RfcG9yY2VsYWluX3YyX3ByaW50KHMpOworCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfVU5TUEVDSUZJRUQ6CisJCUJVRygiZmluYWxpemVfZGVmZXJyZWRfY29uZmlnKCkgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNfRk9STUFUX05PTkU6CisJY2FzZSBTVEFUVVNfRk9STUFUX0xPTkc6CisJCXd0X2xvbmdzdGF0dXNfcHJpbnQocyk7CisJCWJyZWFrOworCX0KKworCXRyYWNlMl9yZWdpb25fbGVhdmUoInN0YXR1cyIsICJwcmludCIsIHMtPnJlcG8pOworfQorCisvKioKKyAqIFJldHVybnMgMSBpZiB0aGVyZSBhcmUgdW5zdGFnZWQgY2hhbmdlcywgMCBvdGhlcndpc2UuCisgKi8KK2ludCBoYXNfdW5zdGFnZWRfY2hhbmdlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgaW50IGlnbm9yZV9zdWJtb2R1bGVzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXZfaW5mbzsKKwlpbnQgcmVzdWx0OworCisJcmVwb19pbml0X3JldmlzaW9ucyhyLCAmcmV2X2luZm8sIE5VTEwpOworCWlmIChpZ25vcmVfc3VibW9kdWxlcykgeworCQlyZXZfaW5mby5kaWZmb3B0LmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzID0gMTsKKwkJcmV2X2luZm8uZGlmZm9wdC5mbGFncy5vdmVycmlkZV9zdWJtb2R1bGVfY29uZmlnID0gMTsKKwl9CisJcmV2X2luZm8uZGlmZm9wdC5mbGFncy5xdWljayA9IDE7CisJZGlmZl9zZXR1cF9kb25lKCZyZXZfaW5mby5kaWZmb3B0KTsKKwlyZXN1bHQgPSBydW5fZGlmZl9maWxlcygmcmV2X2luZm8sIDApOworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXZfaW5mby5kaWZmb3B0LCByZXN1bHQpOworfQorCisvKioKKyAqIFJldHVybnMgMSBpZiB0aGVyZSBhcmUgdW5jb21taXR0ZWQgY2hhbmdlcywgMCBvdGhlcndpc2UuCisgKi8KK2ludCBoYXNfdW5jb21taXR0ZWRfY2hhbmdlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICBpbnQgaWdub3JlX3N1Ym1vZHVsZXMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldl9pbmZvOworCWludCByZXN1bHQ7CisKKwlpZiAoaXNfaW5kZXhfdW5ib3JuKHItPmluZGV4KSkKKwkJcmV0dXJuIDA7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHIsICZyZXZfaW5mbywgTlVMTCk7CisJaWYgKGlnbm9yZV9zdWJtb2R1bGVzKQorCQlyZXZfaW5mby5kaWZmb3B0LmZsYWdzLmlnbm9yZV9zdWJtb2R1bGVzID0gMTsKKwlyZXZfaW5mby5kaWZmb3B0LmZsYWdzLnF1aWNrID0gMTsKKworCWFkZF9oZWFkX3RvX3BlbmRpbmcoJnJldl9pbmZvKTsKKwlpZiAoIXJldl9pbmZvLnBlbmRpbmcubnIpIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBubyBoZWFkIChvciBpdCdzIGNvcnJ1cHQpOyB1c2UgdGhlIGVtcHR5IHRyZWUsCisJCSAqIHdoaWNoIHdpbGwgY29tcGxhaW4gaWYgdGhlIGluZGV4IGlzIG5vbi1lbXB0eS4KKwkJICovCisJCXN0cnVjdCB0cmVlICp0cmVlID0gbG9va3VwX3RyZWUociwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7CisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2X2luZm8sICZ0cmVlLT5vYmplY3QsICIiKTsKKwl9CisKKwlkaWZmX3NldHVwX2RvbmUoJnJldl9pbmZvLmRpZmZvcHQpOworCXJlc3VsdCA9IHJ1bl9kaWZmX2luZGV4KCZyZXZfaW5mbywgMSk7CisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJnJldl9pbmZvLmRpZmZvcHQsIHJlc3VsdCk7Cit9CisKKy8qKgorICogSWYgdGhlIHdvcmsgdHJlZSBoYXMgdW5zdGFnZWQgb3IgdW5jb21taXR0ZWQgY2hhbmdlcywgZGllcyB3aXRoIHRoZQorICogYXBwcm9wcmlhdGUgbWVzc2FnZS4KKyAqLworaW50IHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyLAorCQkJICAgIGNvbnN0IGNoYXIgKmFjdGlvbiwKKwkJCSAgICBjb25zdCBjaGFyICpoaW50LAorCQkJICAgIGludCBpZ25vcmVfc3VibW9kdWxlcywKKwkJCSAgICBpbnQgZ2VudGx5KQoreworCXN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlID0gTE9DS19JTklUOworCWludCBlcnIgPSAwLCBmZDsKKworCWZkID0gcmVwb19ob2xkX2xvY2tlZF9pbmRleChyLCAmbG9ja19maWxlLCAwKTsKKwlyZWZyZXNoX2luZGV4KHItPmluZGV4LCBSRUZSRVNIX1FVSUVULCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlpZiAoMCA8PSBmZCkKKwkJcmVwb191cGRhdGVfaW5kZXhfaWZfYWJsZShyLCAmbG9ja19maWxlKTsKKwlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisKKwlpZiAoaGFzX3Vuc3RhZ2VkX2NoYW5nZXMociwgaWdub3JlX3N1Ym1vZHVsZXMpKSB7CisJCS8qIFRSQU5TTEFUT1JTOiB0aGUgYWN0aW9uIGlzIGUuZy4gInB1bGwgd2l0aCByZWJhc2UiICovCisJCWVycm9yKF8oImNhbm5vdCAlczogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iKSwgXyhhY3Rpb24pKTsKKwkJZXJyID0gMTsKKwl9CisKKwlpZiAoaGFzX3VuY29tbWl0dGVkX2NoYW5nZXMociwgaWdub3JlX3N1Ym1vZHVsZXMpKSB7CisJCWlmIChlcnIpCisJCQllcnJvcihfKCJhZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iKSk7CisJCWVsc2UKKwkJCWVycm9yKF8oImNhbm5vdCAlczogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIpLAorCQkJICAgICAgXyhhY3Rpb24pKTsKKwkJZXJyID0gMTsKKwl9CisKKwlpZiAoZXJyKSB7CisJCWlmIChoaW50KQorCQkJZXJyb3IoIiVzIiwgaGludCk7CisJCWlmICghZ2VudGx5KQorCQkJZXhpdCgxMjgpOworCX0KKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS93dC1zdGF0dXMuaCBiL3d0LXN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzNmMjUKLS0tIC9kZXYvbnVsbAorKysgYi93dC1zdGF0dXMuaApAQCAtMCwwICsxLDE2NCBAQAorI2lmbmRlZiBTVEFUVVNfSAorI2RlZmluZSBTVEFUVVNfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisKK3N0cnVjdCByZXBvc2l0b3J5Oworc3RydWN0IHdvcmt0cmVlOworCitlbnVtIGNvbG9yX3d0X3N0YXR1cyB7CisJV1RfU1RBVFVTX0hFQURFUiA9IDAsCisJV1RfU1RBVFVTX1VQREFURUQsCisJV1RfU1RBVFVTX0NIQU5HRUQsCisJV1RfU1RBVFVTX1VOVFJBQ0tFRCwKKwlXVF9TVEFUVVNfTk9CUkFOQ0gsCisJV1RfU1RBVFVTX1VOTUVSR0VELAorCVdUX1NUQVRVU19MT0NBTF9CUkFOQ0gsCisJV1RfU1RBVFVTX1JFTU9URV9CUkFOQ0gsCisJV1RfU1RBVFVTX09OQlJBTkNILAorCVdUX1NUQVRVU19NQVhTTE9UCit9OworCitlbnVtIHVudHJhY2tlZF9zdGF0dXNfdHlwZSB7CisJU0hPV19OT19VTlRSQUNLRURfRklMRVMsCisJU0hPV19OT1JNQUxfVU5UUkFDS0VEX0ZJTEVTLAorCVNIT1dfQUxMX1VOVFJBQ0tFRF9GSUxFUworfTsKKworZW51bSBzaG93X2lnbm9yZWRfdHlwZSB7CisJU0hPV19OT19JR05PUkVELAorCVNIT1dfVFJBRElUSU9OQUxfSUdOT1JFRCwKKwlTSE9XX01BVENISU5HX0lHTk9SRUQsCit9OworCisvKiBmcm9tIHdoZXJlIGRvZXMgdGhpcyBjb21taXQgb3JpZ2luYXRlICovCitlbnVtIGNvbW1pdF93aGVuY2UgeworCUZST01fQ09NTUlULCAgICAgLyogbm9ybWFsICovCisJRlJPTV9NRVJHRSwgICAgICAvKiBjb21taXQgY2FtZSBmcm9tIG1lcmdlICovCisJRlJPTV9DSEVSUllfUElDSyAvKiBjb21taXQgY2FtZSBmcm9tIGNoZXJyeS1waWNrICovCit9OworCitzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhIHsKKwlpbnQgd29ya3RyZWVfc3RhdHVzOworCWludCBpbmRleF9zdGF0dXM7CisJaW50IHN0YWdlbWFzazsKKwlpbnQgbW9kZV9oZWFkLCBtb2RlX2luZGV4LCBtb2RlX3dvcmt0cmVlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkX2hlYWQsIG9pZF9pbmRleDsKKwlpbnQgcmVuYW1lX3N0YXR1czsKKwlpbnQgcmVuYW1lX3Njb3JlOworCWNoYXIgKnJlbmFtZV9zb3VyY2U7CisJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlICAgICAgIDogMjsKKwl1bnNpZ25lZCBuZXdfc3VibW9kdWxlX2NvbW1pdHMgOiAxOworfTsKKworZW51bSB3dF9zdGF0dXNfZm9ybWF0IHsKKwlTVEFUVVNfRk9STUFUX05PTkUgPSAwLAorCVNUQVRVU19GT1JNQVRfTE9ORywKKwlTVEFUVVNfRk9STUFUX1NIT1JULAorCVNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOLAorCVNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOX1YyLAorCisJU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRAorfTsKKworI2RlZmluZSBIRUFEX0RFVEFDSEVEX0FUIF8oIkhFQUQgZGV0YWNoZWQgYXQgIikKKyNkZWZpbmUgSEVBRF9ERVRBQ0hFRF9GUk9NIF8oIkhFQUQgZGV0YWNoZWQgZnJvbSAiKQorCitzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlIHsKKwlpbnQgbWVyZ2VfaW5fcHJvZ3Jlc3M7CisJaW50IGFtX2luX3Byb2dyZXNzOworCWludCBhbV9lbXB0eV9wYXRjaDsKKwlpbnQgcmViYXNlX2luX3Byb2dyZXNzOworCWludCByZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3M7CisJaW50IGNoZXJyeV9waWNrX2luX3Byb2dyZXNzOworCWludCBiaXNlY3RfaW5fcHJvZ3Jlc3M7CisJaW50IHJldmVydF9pbl9wcm9ncmVzczsKKwlpbnQgZGV0YWNoZWRfYXQ7CisJY2hhciAqYnJhbmNoOworCWNoYXIgKm9udG87CisJY2hhciAqZGV0YWNoZWRfZnJvbTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGRldGFjaGVkX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHJldmVydF9oZWFkX29pZDsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIGNoZXJyeV9waWNrX2hlYWRfb2lkOworfTsKKworc3RydWN0IHd0X3N0YXR1cyB7CisJc3RydWN0IHJlcG9zaXRvcnkgKnJlcG87CisJaW50IGlzX2luaXRpYWw7CisJY2hhciAqYnJhbmNoOworCWNvbnN0IGNoYXIgKnJlZmVyZW5jZTsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJaW50IHZlcmJvc2U7CisJaW50IGFtZW5kOworCWVudW0gY29tbWl0X3doZW5jZSB3aGVuY2U7CisJaW50IG5vd2FybjsKKwlpbnQgdXNlX2NvbG9yOworCWludCBub19nZXR0ZXh0OworCWludCBkaXNwbGF5X2NvbW1lbnRfcHJlZml4OworCWludCByZWxhdGl2ZV9wYXRoczsKKwlpbnQgc3VibW9kdWxlX3N1bW1hcnk7CisJZW51bSBzaG93X2lnbm9yZWRfdHlwZSBzaG93X2lnbm9yZWRfbW9kZTsKKwllbnVtIHVudHJhY2tlZF9zdGF0dXNfdHlwZSBzaG93X3VudHJhY2tlZF9maWxlczsKKwljb25zdCBjaGFyICppZ25vcmVfc3VibW9kdWxlX2FyZzsKKwljaGFyIGNvbG9yX3BhbGV0dGVbV1RfU1RBVFVTX01BWFNMT1RdW0NPTE9SX01BWExFTl07CisJdW5zaWduZWQgY29sb3B0czsKKwlpbnQgbnVsbF90ZXJtaW5hdGlvbjsKKwlpbnQgY29tbWl0X3RlbXBsYXRlOworCWludCBzaG93X2JyYW5jaDsKKwlpbnQgc2hvd19zdGFzaDsKKwlpbnQgaGludHM7CisJZW51bSBhaGVhZF9iZWhpbmRfZmxhZ3MgYWhlYWRfYmVoaW5kX2ZsYWdzOworCWludCBkZXRlY3RfcmVuYW1lOworCWludCByZW5hbWVfc2NvcmU7CisJaW50IHJlbmFtZV9saW1pdDsKKwllbnVtIHd0X3N0YXR1c19mb3JtYXQgc3RhdHVzX2Zvcm1hdDsKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlIHN0YXRlOworCXN0cnVjdCBvYmplY3RfaWQgb2lkX2NvbW1pdDsgLyogd2hlbiBub3QgSW5pdGlhbCAqLworCisJLyogVGhlc2UgYXJlIGNvbXB1dGVkIGR1cmluZyBwcm9jZXNzaW5nIG9mIHRoZSBpbmRpdmlkdWFsIHNlY3Rpb25zICovCisJaW50IGNvbW1pdHRhYmxlOworCWludCB3b3JrZGlyX2RpcnR5OworCWNvbnN0IGNoYXIgKmluZGV4X2ZpbGU7CisJRklMRSAqZnA7CisJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBzdHJpbmdfbGlzdCBjaGFuZ2U7CisJc3RydWN0IHN0cmluZ19saXN0IHVudHJhY2tlZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaWdub3JlZDsKKwl1aW50MzJfdCB1bnRyYWNrZWRfaW5fbXM7Cit9OworCitzaXplX3Qgd3Rfc3RhdHVzX2xvY2F0ZV9lbmQoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbik7Cit2b2lkIHd0X3N0YXR1c19hcHBlbmRfY3V0X2xpbmUoc3RydWN0IHN0cmJ1ZiAqYnVmKTsKK3ZvaWQgd3Rfc3RhdHVzX2FkZF9jdXRfbGluZShGSUxFICpmcCk7Cit2b2lkIHd0X3N0YXR1c19wcmVwYXJlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKK3ZvaWQgd3Rfc3RhdHVzX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpOwordm9pZCB3dF9zdGF0dXNfY29sbGVjdChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKK3ZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfZnJlZV9idWZmZXJzKHN0cnVjdCB3dF9zdGF0dXMgKnMpOwordm9pZCB3dF9zdGF0dXNfZ2V0X3N0YXRlKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJIHN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJIGludCBnZXRfZGV0YWNoZWRfZnJvbSk7CitpbnQgd3Rfc3RhdHVzX2NoZWNrX3JlYmFzZShjb25zdCBzdHJ1Y3Qgd29ya3RyZWUgKnd0LAorCQkJICAgc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUpOworaW50IHd0X3N0YXR1c19jaGVja19iaXNlY3QoY29uc3Qgc3RydWN0IHdvcmt0cmVlICp3dCwKKwkJCSAgIHN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK3ZvaWQgc3RhdHVzX3ByaW50Zl9sbihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK3ZvaWQgc3RhdHVzX3ByaW50ZihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBleHBlY3QgdGhhdCB0aGUgY2FsbGVyIHRvb2sgY2FyZSBvZiByZWFkaW5nIHRoZSBpbmRleC4gKi8KK2ludCBoYXNfdW5zdGFnZWRfY2hhbmdlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKKwkJCSBpbnQgaWdub3JlX3N1Ym1vZHVsZXMpOworaW50IGhhc191bmNvbW1pdHRlZF9jaGFuZ2VzKHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLAorCQkJICAgIGludCBpZ25vcmVfc3VibW9kdWxlcyk7CitpbnQgcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sCisJCQkgICAgY29uc3QgY2hhciAqYWN0aW9uLAorCQkJICAgIGNvbnN0IGNoYXIgKmhpbnQsCisJCQkgICAgaW50IGlnbm9yZV9zdWJtb2R1bGVzLAorCQkJICAgIGludCBnZW50bHkpOworCisjZW5kaWYgLyogU1RBVFVTX0ggKi8KZGlmZiAtLWdpdCBhL3hkaWZmLWludGVyZmFjZS5jIGIveGRpZmYtaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyMDA2OQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmLWludGVyZmFjZS5jCkBAIC0wLDAgKzEsMzIzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJ4ZGlmZi94dHlwZXMuaCIKKyNpbmNsdWRlICJ4ZGlmZi94ZGlmZmkuaCIKKyNpbmNsdWRlICJ4ZGlmZi94ZW1pdC5oIgorI2luY2x1ZGUgInhkaWZmL3htYWNyb3MuaCIKKyNpbmNsdWRlICJ4ZGlmZi94dXRpbHMuaCIKKworc3RydWN0IHhkaWZmX2VtaXRfc3RhdGUgeworCXhkaWZmX2VtaXRfaHVua19mbiBodW5rX2ZuOworCXhkaWZmX2VtaXRfbGluZV9mbiBsaW5lX2ZuOworCXZvaWQgKmNvbnN1bWVfY2FsbGJhY2tfZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlbWFpbmRlcjsKK307CisKK3N0YXRpYyBpbnQgeGRpZmZfb3V0X2h1bmsodm9pZCAqcHJpdl8sCisJCQkgIGxvbmcgb2xkX2JlZ2luLCBsb25nIG9sZF9uciwKKwkJCSAgbG9uZyBuZXdfYmVnaW4sIGxvbmcgbmV3X25yLAorCQkJICBjb25zdCBjaGFyICpmdW5jLCBsb25nIGZ1bmNsZW4pCit7CisJc3RydWN0IHhkaWZmX2VtaXRfc3RhdGUgKnByaXYgPSBwcml2XzsKKworCWlmIChwcml2LT5yZW1haW5kZXIubGVuKQorCQlCVUcoInhkaWZmIGVtaXR0ZWQgaHVuayBpbiB0aGUgbWlkZGxlIG9mIGEgbGluZSIpOworCisJcHJpdi0+aHVua19mbihwcml2LT5jb25zdW1lX2NhbGxiYWNrX2RhdGEsCisJCSAgICAgIG9sZF9iZWdpbiwgb2xkX25yLCBuZXdfYmVnaW4sIG5ld19uciwKKwkJICAgICAgZnVuYywgZnVuY2xlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnN1bWVfb25lKHZvaWQgKnByaXZfLCBjaGFyICpzLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHhkaWZmX2VtaXRfc3RhdGUgKnByaXYgPSBwcml2XzsKKwljaGFyICplcDsKKwl3aGlsZSAoc2l6ZSkgeworCQl1bnNpZ25lZCBsb25nIHRoaXNfc2l6ZTsKKwkJZXAgPSBtZW1jaHIocywgJ1xuJywgc2l6ZSk7CisJCXRoaXNfc2l6ZSA9IChlcCA9PSBOVUxMKSA/IHNpemUgOiAoZXAgLSBzICsgMSk7CisJCXByaXYtPmxpbmVfZm4ocHJpdi0+Y29uc3VtZV9jYWxsYmFja19kYXRhLCBzLCB0aGlzX3NpemUpOworCQlzaXplIC09IHRoaXNfc2l6ZTsKKwkJcyArPSB0aGlzX3NpemU7CisJfQorfQorCitzdGF0aWMgaW50IHhkaWZmX291dGYodm9pZCAqcHJpdl8sIG1tYnVmZmVyX3QgKm1iLCBpbnQgbmJ1ZikKK3sKKwlzdHJ1Y3QgeGRpZmZfZW1pdF9zdGF0ZSAqcHJpdiA9IHByaXZfOworCWludCBpOworCisJaWYgKCFwcml2LT5saW5lX2ZuKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBuYnVmOyBpKyspIHsKKwkJaWYgKG1iW2ldLnB0clttYltpXS5zaXplLTFdICE9ICdcbicpIHsKKwkJCS8qIEluY29tcGxldGUgbGluZSAqLworCQkJc3RyYnVmX2FkZCgmcHJpdi0+cmVtYWluZGVyLCBtYltpXS5wdHIsIG1iW2ldLnNpemUpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiB3ZSBoYXZlIGEgY29tcGxldGUgbGluZSAqLworCQlpZiAoIXByaXYtPnJlbWFpbmRlci5sZW4pIHsKKwkJCWNvbnN1bWVfb25lKHByaXYsIG1iW2ldLnB0ciwgbWJbaV0uc2l6ZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlzdHJidWZfYWRkKCZwcml2LT5yZW1haW5kZXIsIG1iW2ldLnB0ciwgbWJbaV0uc2l6ZSk7CisJCWNvbnN1bWVfb25lKHByaXYsIHByaXYtPnJlbWFpbmRlci5idWYsIHByaXYtPnJlbWFpbmRlci5sZW4pOworCQlzdHJidWZfcmVzZXQoJnByaXYtPnJlbWFpbmRlcik7CisJfQorCWlmIChwcml2LT5yZW1haW5kZXIubGVuKSB7CisJCWNvbnN1bWVfb25lKHByaXYsIHByaXYtPnJlbWFpbmRlci5idWYsIHByaXYtPnJlbWFpbmRlci5sZW4pOworCQlzdHJidWZfcmVzZXQoJnByaXYtPnJlbWFpbmRlcik7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVHJpbSBkb3duIGNvbW1vbiBzdWJzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVycywKKyAqIGJ1dCBlbmQgb24gYSBjb21wbGV0ZSBsaW5lLgorICovCitzdGF0aWMgdm9pZCB0cmltX2NvbW1vbl90YWlsKG1tZmlsZV90ICphLCBtbWZpbGVfdCAqYikKK3sKKwljb25zdCBpbnQgYmxrID0gMTAyNDsKKwlsb25nIHRyaW1tZWQgPSAwLCByZWNvdmVyZWQgPSAwOworCWNoYXIgKmFwID0gYS0+c2l6ZSA/IGEtPnB0ciArIGEtPnNpemUgOiBhLT5wdHI7CisJY2hhciAqYnAgPSBiLT5zaXplID8gYi0+cHRyICsgYi0+c2l6ZSA6IGItPnB0cjsKKwlsb25nIHNtYWxsZXIgPSAoYS0+c2l6ZSA8IGItPnNpemUpID8gYS0+c2l6ZSA6IGItPnNpemU7CisKKwl3aGlsZSAoYmxrICsgdHJpbW1lZCA8PSBzbWFsbGVyICYmICFtZW1jbXAoYXAgLSBibGssIGJwIC0gYmxrLCBibGspKSB7CisJCXRyaW1tZWQgKz0gYmxrOworCQlhcCAtPSBibGs7CisJCWJwIC09IGJsazsKKwl9CisKKwl3aGlsZSAocmVjb3ZlcmVkIDwgdHJpbW1lZCkKKwkJaWYgKGFwW3JlY292ZXJlZCsrXSA9PSAnXG4nKQorCQkJYnJlYWs7CisJYS0+c2l6ZSAtPSB0cmltbWVkIC0gcmVjb3ZlcmVkOworCWItPnNpemUgLT0gdHJpbW1lZCAtIHJlY292ZXJlZDsKK30KKworaW50IHhkaV9kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCB4ZGVtaXRjYl90ICp4ZWNiKQoreworCW1tZmlsZV90IGEgPSAqbWYxOworCW1tZmlsZV90IGIgPSAqbWYyOworCisJaWYgKG1mMS0+c2l6ZSA+IE1BWF9YRElGRl9TSVpFIHx8IG1mMi0+c2l6ZSA+IE1BWF9YRElGRl9TSVpFKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIXhlY2ZnLT5jdHhsZW4gJiYgISh4ZWNmZy0+ZmxhZ3MgJiBYRExfRU1JVF9GVU5DQ09OVEVYVCkpCisJCXRyaW1fY29tbW9uX3RhaWwoJmEsICZiKTsKKworCXJldHVybiB4ZGxfZGlmZigmYSwgJmIsIHhwcCwgeGVjZmcsIHhlY2IpOworfQorCit2b2lkIGRpc2NhcmRfaHVua19saW5lKHZvaWQgKnByaXYsCisJCSAgICAgICBsb25nIG9iLCBsb25nIG9uLCBsb25nIG5iLCBsb25nIG5uLAorCQkgICAgICAgY29uc3QgY2hhciAqZnVuYywgbG9uZyBmdW5jbGVuKQoreworfQorCitpbnQgeGRpX2RpZmZfb3V0ZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQkgIHhkaWZmX2VtaXRfaHVua19mbiBodW5rX2ZuLAorCQkgIHhkaWZmX2VtaXRfbGluZV9mbiBsaW5lX2ZuLAorCQkgIHZvaWQgKmNvbnN1bWVfY2FsbGJhY2tfZGF0YSwKKwkJICB4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB4ZGlmZl9lbWl0X3N0YXRlIHN0YXRlOworCXhkZW1pdGNiX3QgZWNiOworCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisJc3RhdGUuaHVua19mbiA9IGh1bmtfZm47CisJc3RhdGUubGluZV9mbiA9IGxpbmVfZm47CisJc3RhdGUuY29uc3VtZV9jYWxsYmFja19kYXRhID0gY29uc3VtZV9jYWxsYmFja19kYXRhOworCW1lbXNldCgmZWNiLCAwLCBzaXplb2YoZWNiKSk7CisJaWYgKGh1bmtfZm4pCisJCWVjYi5vdXRfaHVuayA9IHhkaWZmX291dF9odW5rOworCWVjYi5vdXRfbGluZSA9IHhkaWZmX291dGY7CisJZWNiLnByaXYgPSAmc3RhdGU7CisJc3RyYnVmX2luaXQoJnN0YXRlLnJlbWFpbmRlciwgMCk7CisJcmV0ID0geGRpX2RpZmYobWYxLCBtZjIsIHhwcCwgeGVjZmcsICZlY2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0ZS5yZW1haW5kZXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZWFkX21tZmlsZShtbWZpbGVfdCAqcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlGSUxFICpmOworCXNpemVfdCBzejsKKworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3QpKQorCQlyZXR1cm4gZXJyb3JfZXJybm8oIkNvdWxkIG5vdCBzdGF0ICVzIiwgZmlsZW5hbWUpOworCWlmICgoZiA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKSkgPT0gTlVMTCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAlcyIsIGZpbGVuYW1lKTsKKwlzeiA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJcHRyLT5wdHIgPSB4bWFsbG9jKHN6ID8gc3ogOiAxKTsKKwlpZiAoc3ogJiYgZnJlYWQocHRyLT5wdHIsIHN6LCAxLCBmKSAhPSAxKSB7CisJCWZjbG9zZShmKTsKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgcmVhZCAlcyIsIGZpbGVuYW1lKTsKKwl9CisJZmNsb3NlKGYpOworCXB0ci0+c2l6ZSA9IHN6OworCXJldHVybiAwOworfQorCit2b2lkIHJlYWRfbW1ibG9iKG1tZmlsZV90ICpwdHIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaWYgKG9pZGVxKG9pZCwgJm51bGxfb2lkKSkgeworCQlwdHItPnB0ciA9IHhzdHJkdXAoIiIpOworCQlwdHItPnNpemUgPSAwOworCQlyZXR1cm47CisJfQorCisJcHRyLT5wdHIgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwlpZiAoIXB0ci0+cHRyIHx8IHR5cGUgIT0gT0JKX0JMT0IpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgYmxvYiBvYmplY3QgJXMiLCBvaWRfdG9faGV4KG9pZCkpOworCXB0ci0+c2l6ZSA9IHNpemU7Cit9CisKKyNkZWZpbmUgRklSU1RfRkVXX0JZVEVTIDgwMDAKK2ludCBidWZmZXJfaXNfYmluYXJ5KGNvbnN0IGNoYXIgKnB0ciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmIChGSVJTVF9GRVdfQllURVMgPCBzaXplKQorCQlzaXplID0gRklSU1RfRkVXX0JZVEVTOworCXJldHVybiAhIW1lbWNocihwdHIsIDAsIHNpemUpOworfQorCitzdHJ1Y3QgZmZfcmVncyB7CisJaW50IG5yOworCXN0cnVjdCBmZl9yZWcgeworCQlyZWdleF90IHJlOworCQlpbnQgbmVnYXRlOworCX0gKmFycmF5OworfTsKKworc3RhdGljIGxvbmcgZmZfcmVnZXhwKGNvbnN0IGNoYXIgKmxpbmUsIGxvbmcgbGVuLAorCQljaGFyICpidWZmZXIsIGxvbmcgYnVmZmVyX3NpemUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGZmX3JlZ3MgKnJlZ3MgPSBwcml2OworCXJlZ21hdGNoX3QgcG1hdGNoWzJdOworCWludCBpOworCWludCByZXN1bHQ7CisKKwkvKiBFeGNsdWRlIHRlcm1pbmF0aW5nIG5ld2xpbmUgKGFuZCBjcikgZnJvbSBtYXRjaGluZyAqLworCWlmIChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdcbicpIHsKKwkJaWYgKGxlbiA+IDEgJiYgbGluZVtsZW4tMl0gPT0gJ1xyJykKKwkJCWxlbiAtPSAyOworCQllbHNlCisJCQlsZW4tLTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVncy0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZmZfcmVnICpyZWcgPSByZWdzLT5hcnJheSArIGk7CisJCWlmICghcmVnZXhlY19idWYoJnJlZy0+cmUsIGxpbmUsIGxlbiwgMiwgcG1hdGNoLCAwKSkgeworCQkJaWYgKHJlZy0+bmVnYXRlKQorCQkJCXJldHVybiAtMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyZWdzLT5uciA8PSBpKQorCQlyZXR1cm4gLTE7CisJaSA9IHBtYXRjaFsxXS5ybV9zbyA+PSAwID8gMSA6IDA7CisJbGluZSArPSBwbWF0Y2hbaV0ucm1fc287CisJcmVzdWx0ID0gcG1hdGNoW2ldLnJtX2VvIC0gcG1hdGNoW2ldLnJtX3NvOworCWlmIChyZXN1bHQgPiBidWZmZXJfc2l6ZSkKKwkJcmVzdWx0ID0gYnVmZmVyX3NpemU7CisJd2hpbGUgKHJlc3VsdCA+IDAgJiYgKGlzc3BhY2UobGluZVtyZXN1bHQgLSAxXSkpKQorCQlyZXN1bHQtLTsKKwltZW1jcHkoYnVmZmVyLCBsaW5lLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgeGRpZmZfc2V0X2ZpbmRfZnVuYyh4ZGVtaXRjb25mX3QgKnhlY2ZnLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IGNmbGFncykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZmZfcmVncyAqcmVnczsKKworCXhlY2ZnLT5maW5kX2Z1bmMgPSBmZl9yZWdleHA7CisJcmVncyA9IHhlY2ZnLT5maW5kX2Z1bmNfcHJpdiA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmZl9yZWdzKSk7CisJZm9yIChpID0gMCwgcmVncy0+bnIgPSAxOyB2YWx1ZVtpXTsgaSsrKQorCQlpZiAodmFsdWVbaV0gPT0gJ1xuJykKKwkJCXJlZ3MtPm5yKys7CisJQUxMT0NfQVJSQVkocmVncy0+YXJyYXksIHJlZ3MtPm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVncy0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZmZfcmVnICpyZWcgPSByZWdzLT5hcnJheSArIGk7CisJCWNvbnN0IGNoYXIgKmVwLCAqZXhwcmVzc2lvbjsKKwkJY2hhciAqYnVmZmVyID0gTlVMTDsKKworCQlpZiAoIXZhbHVlKQorCQkJQlVHKCJtaXNtYXRjaCBiZXR3ZWVuIGxpbmUgY291bnQgYW5kIHBhcnNpbmciKTsKKwkJZXAgPSBzdHJjaHIodmFsdWUsICdcbicpOworCisJCXJlZy0+bmVnYXRlID0gKCp2YWx1ZSA9PSAnIScpOworCQlpZiAocmVnLT5uZWdhdGUgJiYgaSA9PSByZWdzLT5uciAtIDEpCisJCQlkaWUoIkxhc3QgZXhwcmVzc2lvbiBtdXN0IG5vdCBiZSBuZWdhdGVkOiAlcyIsIHZhbHVlKTsKKwkJaWYgKCp2YWx1ZSA9PSAnIScpCisJCQl2YWx1ZSsrOworCQlpZiAoZXApCisJCQlleHByZXNzaW9uID0gYnVmZmVyID0geHN0cm5kdXAodmFsdWUsIGVwIC0gdmFsdWUpOworCQllbHNlCisJCQlleHByZXNzaW9uID0gdmFsdWU7CisJCWlmIChyZWdjb21wKCZyZWctPnJlLCBleHByZXNzaW9uLCBjZmxhZ3MpKQorCQkJZGllKCJJbnZhbGlkIHJlZ2V4cCB0byBsb29rIGZvciBodW5rIGhlYWRlcjogJXMiLCBleHByZXNzaW9uKTsKKwkJZnJlZShidWZmZXIpOworCQl2YWx1ZSA9IGVwID8gZXAgKyAxIDogTlVMTDsKKwl9Cit9CisKK3ZvaWQgeGRpZmZfY2xlYXJfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcpCit7CisJaWYgKHhlY2ZnLT5maW5kX2Z1bmMpIHsKKwkJaW50IGk7CisJCXN0cnVjdCBmZl9yZWdzICpyZWdzID0geGVjZmctPmZpbmRfZnVuY19wcml2OworCisJCWZvciAoaSA9IDA7IGkgPCByZWdzLT5ucjsgaSsrKQorCQkJcmVnZnJlZSgmcmVncy0+YXJyYXlbaV0ucmUpOworCQlmcmVlKHJlZ3MtPmFycmF5KTsKKwkJZnJlZShyZWdzKTsKKwkJeGVjZmctPmZpbmRfZnVuYyA9IE5VTEw7CisJCXhlY2ZnLT5maW5kX2Z1bmNfcHJpdiA9IE5VTEw7CisJfQorfQorCit1bnNpZ25lZCBsb25nIHhkaWZmX2hhc2hfc3RyaW5nKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4sIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIHhkbF9oYXNoX3JlY29yZCgmcywgcyArIGxlbiwgZmxhZ3MpOworfQorCitpbnQgeGRpZmZfY29tcGFyZV9saW5lcyhjb25zdCBjaGFyICpsMSwgbG9uZyBzMSwKKwkJCWNvbnN0IGNoYXIgKmwyLCBsb25nIHMyLCBsb25nIGZsYWdzKQoreworCXJldHVybiB4ZGxfcmVjbWF0Y2gobDEsIHMxLCBsMiwgczIsIGZsYWdzKTsKK30KKworaW50IGdpdF94bWVyZ2Vfc3R5bGUgPSAtMTsKKworaW50IGdpdF94bWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgIm1lcmdlLmNvbmZsaWN0c3R5bGUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJZGllKCInJXMnIGlzIG5vdCBhIGJvb2xlYW4iLCB2YXIpOworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgImRpZmYzIikpCisJCQlnaXRfeG1lcmdlX3N0eWxlID0gWERMX01FUkdFX0RJRkYzOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibWVyZ2UiKSkKKwkJCWdpdF94bWVyZ2Vfc3R5bGUgPSAwOworCQkvKgorCQkgKiBQbGVhc2UgdXBkYXRlIF9naXRfY2hlY2tvdXQoKSBpbgorCQkgKiBnaXQtY29tcGxldGlvbi5iYXNoIHdoZW4geW91IGFkZCBuZXcgbWVyZ2UgY29uZmlnCisJCSAqLworCQllbHNlCisJCQlkaWUoInVua25vd24gc3R5bGUgJyVzJyBnaXZlbiBmb3IgJyVzJyIsCisJCQkgICAgdmFsdWUsIHZhcik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KZGlmZiAtLWdpdCBhL3hkaWZmLWludGVyZmFjZS5oIGIveGRpZmYtaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkZjI2OQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmLWludGVyZmFjZS5oCkBAIC0wLDAgKzEsNTkgQEAKKyNpZm5kZWYgWERJRkZfSU5URVJGQUNFX0gKKyNkZWZpbmUgWERJRkZfSU5URVJGQUNFX0gKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAieGRpZmYveGRpZmYuaCIKKworLyoKKyAqIHhkaWZmIGlzbid0IGVxdWlwcGVkIHRvIGhhbmRsZSBjb250ZW50IG92ZXIgYSBnaWdhYnl0ZTsKKyAqIHdlIG1ha2UgdGhlIGN1dG9mZiAxR0IgLSAxTUIgdG8gZ2l2ZSBzb21lIGJyZWF0aGluZworICogcm9vbSBmb3IgY29uc3RhbnQtc2l6ZWQgYWRkaXRpb25zIChlLmcuLCBtZXJnZSBtYXJrZXJzKQorICovCisjZGVmaW5lIE1BWF9YRElGRl9TSVpFICgxMDI0VUwgKiAxMDI0ICogMTAyMykKKwordHlwZWRlZiB2b2lkICgqeGRpZmZfZW1pdF9saW5lX2ZuKSh2b2lkICosIGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7Cit0eXBlZGVmIHZvaWQgKCp4ZGlmZl9lbWl0X2h1bmtfZm4pKHZvaWQgKmRhdGEsCisJCQkJICAgbG9uZyBvbGRfYmVnaW4sIGxvbmcgb2xkX25yLAorCQkJCSAgIGxvbmcgbmV3X2JlZ2luLCBsb25nIG5ld19uciwKKwkJCQkgICBjb25zdCBjaGFyICpmdW5jLCBsb25nIGZ1bmNsZW4pOworCitpbnQgeGRpX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsIHhkZW1pdGNiX3QgKmVjYik7CitpbnQgeGRpX2RpZmZfb3V0ZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQkgIHhkaWZmX2VtaXRfaHVua19mbiBodW5rX2ZuLAorCQkgIHhkaWZmX2VtaXRfbGluZV9mbiBsaW5lX2ZuLAorCQkgIHZvaWQgKmNvbnN1bWVfY2FsbGJhY2tfZGF0YSwKKwkJICB4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZyk7CitpbnQgcmVhZF9tbWZpbGUobW1maWxlX3QgKnB0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwordm9pZCByZWFkX21tYmxvYihtbWZpbGVfdCAqcHRyLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOworaW50IGJ1ZmZlcl9pc19iaW5hcnkoY29uc3QgY2hhciAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCit2b2lkIHhkaWZmX3NldF9maW5kX2Z1bmMoeGRlbWl0Y29uZl90ICp4ZWNmZywgY29uc3QgY2hhciAqbGluZSwgaW50IGNmbGFncyk7Cit2b2lkIHhkaWZmX2NsZWFyX2ZpbmRfZnVuYyh4ZGVtaXRjb25mX3QgKnhlY2ZnKTsKK2ludCBnaXRfeG1lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitleHRlcm4gaW50IGdpdF94bWVyZ2Vfc3R5bGU7CisKKy8qCisgKiBDYW4gYmUgdXNlZCBhcyBhIG5vLW9wIGh1bmtfZm4gZm9yIHhkaV9kaWZmX291dGYoKSwgc2luY2UgYSBOVUxMCisgKiBvbmUganVzdCBzZW5kcyB0aGUgaHVuayBsaW5lIHRvIHRoZSBsaW5lX2ZuIGNhbGxiYWNrKS4KKyAqLwordm9pZCBkaXNjYXJkX2h1bmtfbGluZSh2b2lkICpwcml2LAorCQkgICAgICAgbG9uZyBvYiwgbG9uZyBvbiwgbG9uZyBuYiwgbG9uZyBubiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbik7CisKKy8qCisgKiBDb21wYXJlIHRoZSBzdHJpbmdzIGwxIHdpdGggbDIgd2hpY2ggYXJlIG9mIHNpemUgczEgYW5kIHMyIHJlc3BlY3RpdmVseS4KKyAqIFJldHVybnMgMSBpZiB0aGUgc3RyaW5ncyBhcmUgZGVlbWVkIGVxdWFsLCAwIG90aGVyd2lzZS4KKyAqIFRoZSBgZmxhZ3NgIGdpdmVuIGFzIFhERl9XSElURVNQQUNFX0ZMQUdTIGRldGVybWluZSBob3cgd2hpdGUgc3BhY2VzCisgKiBhcmUgdHJlYXRlZCBmb3IgdGhlIGNvbXBhcmlzb24uCisgKi8KK2ludCB4ZGlmZl9jb21wYXJlX2xpbmVzKGNvbnN0IGNoYXIgKmwxLCBsb25nIHMxLAorCQkJY29uc3QgY2hhciAqbDIsIGxvbmcgczIsIGxvbmcgZmxhZ3MpOworCisvKgorICogUmV0dXJucyBhIGhhc2ggb2YgdGhlIHN0cmluZyBzIG9mIGxlbmd0aCBsZW4uCisgKiBUaGUgYGZsYWdzYCBnaXZlbiBhcyBYREZfV0hJVEVTUEFDRV9GTEFHUyBkZXRlcm1pbmUgaG93IHdoaXRlIHNwYWNlcworICogYXJlIHRyZWF0ZWQgZm9yIHRoZSBoYXNoLgorICovCit1bnNpZ25lZCBsb25nIHhkaWZmX2hhc2hfc3RyaW5nKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4sIGxvbmcgZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmLmggYi94ZGlmZi94ZGlmZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMmUzYTkKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94ZGlmZi5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlCisgKiAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpZiAhZGVmaW5lZChYRElGRl9IKQorI2RlZmluZSBYRElGRl9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogI2lmZGVmIF9fY3BsdXNwbHVzICovCisKKy8qIHhwcGFybV90LmZsYWdzICovCisjZGVmaW5lIFhERl9ORUVEX01JTklNQUwgKDEgPDwgMCkKKworI2RlZmluZSBYREZfSUdOT1JFX1dISVRFU1BBQ0UgKDEgPDwgMSkKKyNkZWZpbmUgWERGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRSAoMSA8PCAyKQorI2RlZmluZSBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MICgxIDw8IDMpCisjZGVmaW5lIFhERl9JR05PUkVfQ1JfQVRfRU9MICgxIDw8IDQpCisjZGVmaW5lIFhERl9XSElURVNQQUNFX0ZMQUdTIChYREZfSUdOT1JFX1dISVRFU1BBQ0UgfCBcCisJCQkgICAgICBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFIHwgXAorCQkJICAgICAgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTCB8IFwKKwkJCSAgICAgIFhERl9JR05PUkVfQ1JfQVRfRU9MKQorCisjZGVmaW5lIFhERl9JR05PUkVfQkxBTktfTElORVMgKDEgPDwgNykKKworI2RlZmluZSBYREZfUEFUSUVOQ0VfRElGRiAoMSA8PCAxNCkKKyNkZWZpbmUgWERGX0hJU1RPR1JBTV9ESUZGICgxIDw8IDE1KQorI2RlZmluZSBYREZfRElGRl9BTEdPUklUSE1fTUFTSyAoWERGX1BBVElFTkNFX0RJRkYgfCBYREZfSElTVE9HUkFNX0RJRkYpCisjZGVmaW5lIFhERl9ESUZGX0FMRyh4KSAoKHgpICYgWERGX0RJRkZfQUxHT1JJVEhNX01BU0spCisKKyNkZWZpbmUgWERGX0lOREVOVF9IRVVSSVNUSUMgKDEgPDwgMjMpCisKKy8qIHhkZW1pdGNvbmZfdC5mbGFncyAqLworI2RlZmluZSBYRExfRU1JVF9GVU5DTkFNRVMgKDEgPDwgMCkKKyNkZWZpbmUgWERMX0VNSVRfRlVOQ0NPTlRFWFQgKDEgPDwgMikKKworLyogbWVyZ2Ugc2ltcGxpZmljYXRpb24gbGV2ZWxzICovCisjZGVmaW5lIFhETF9NRVJHRV9NSU5JTUFMIDAKKyNkZWZpbmUgWERMX01FUkdFX0VBR0VSIDEKKyNkZWZpbmUgWERMX01FUkdFX1pFQUxPVVMgMgorI2RlZmluZSBYRExfTUVSR0VfWkVBTE9VU19BTE5VTSAzCisKKy8qIG1lcmdlIGZhdm9yIG1vZGVzICovCisjZGVmaW5lIFhETF9NRVJHRV9GQVZPUl9PVVJTIDEKKyNkZWZpbmUgWERMX01FUkdFX0ZBVk9SX1RIRUlSUyAyCisjZGVmaW5lIFhETF9NRVJHRV9GQVZPUl9VTklPTiAzCisKKy8qIG1lcmdlIG91dHB1dCBzdHlsZXMgKi8KKyNkZWZpbmUgWERMX01FUkdFX0RJRkYzIDEKKwordHlwZWRlZiBzdHJ1Y3Qgc19tbWZpbGUgeworCWNoYXIgKnB0cjsKKwlsb25nIHNpemU7Cit9IG1tZmlsZV90OworCit0eXBlZGVmIHN0cnVjdCBzX21tYnVmZmVyIHsKKwljaGFyICpwdHI7CisJbG9uZyBzaXplOworfSBtbWJ1ZmZlcl90OworCit0eXBlZGVmIHN0cnVjdCBzX3hwcGFyYW0geworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBTZWUgRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0LiAqLworCWNoYXIgKiphbmNob3JzOworCXNpemVfdCBhbmNob3JzX25yOworfSB4cHBhcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRlbWl0Y2IgeworCXZvaWQgKnByaXY7CisJaW50ICgqb3V0X2h1bmspKHZvaWQgKiwKKwkJCWxvbmcgb2xkX2JlZ2luLCBsb25nIG9sZF9uciwKKwkJCWxvbmcgbmV3X2JlZ2luLCBsb25nIG5ld19uciwKKwkJCWNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbik7CisJaW50ICgqb3V0X2xpbmUpKHZvaWQgKiwgbW1idWZmZXJfdCAqLCBpbnQpOworfSB4ZGVtaXRjYl90OworCit0eXBlZGVmIGxvbmcgKCpmaW5kX2Z1bmNfdCkoY29uc3QgY2hhciAqbGluZSwgbG9uZyBsaW5lX2xlbiwgY2hhciAqYnVmZmVyLCBsb25nIGJ1ZmZlcl9zaXplLCB2b2lkICpwcml2KTsKKwordHlwZWRlZiBpbnQgKCp4ZGxfZW1pdF9odW5rX2NvbnN1bWVfZnVuY190KShsb25nIHN0YXJ0X2EsIGxvbmcgY291bnRfYSwKKwkJCQkJICAgIGxvbmcgc3RhcnRfYiwgbG9uZyBjb3VudF9iLAorCQkJCQkgICAgdm9pZCAqY2JfZGF0YSk7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRlbWl0Y29uZiB7CisJbG9uZyBjdHhsZW47CisJbG9uZyBpbnRlcmh1bmtjdHhsZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlmaW5kX2Z1bmNfdCBmaW5kX2Z1bmM7CisJdm9pZCAqZmluZF9mdW5jX3ByaXY7CisJeGRsX2VtaXRfaHVua19jb25zdW1lX2Z1bmNfdCBodW5rX2Z1bmM7Cit9IHhkZW1pdGNvbmZfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc19iZGlmZnBhcmFtIHsKKwlsb25nIGJzaXplOworfSBiZGlmZnBhcmFtX3Q7CisKKworI2RlZmluZSB4ZGxfbWFsbG9jKHgpIHhtYWxsb2MoeCkKKyNkZWZpbmUgeGRsX2ZyZWUocHRyKSBmcmVlKHB0cikKKyNkZWZpbmUgeGRsX3JlYWxsb2MocHRyLHgpIHhyZWFsbG9jKHB0cix4KQorCit2b2lkICp4ZGxfbW1maWxlX2ZpcnN0KG1tZmlsZV90ICptbWYsIGxvbmcgKnNpemUpOworbG9uZyB4ZGxfbW1maWxlX3NpemUobW1maWxlX3QgKm1tZik7CisKK2ludCB4ZGxfZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkgICAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsIHhkZW1pdGNiX3QgKmVjYik7CisKK3R5cGVkZWYgc3RydWN0IHNfeG1wYXJhbSB7CisJeHBwYXJhbV90IHhwcDsKKwlpbnQgbWFya2VyX3NpemU7CisJaW50IGxldmVsOworCWludCBmYXZvcjsKKwlpbnQgc3R5bGU7CisJY29uc3QgY2hhciAqYW5jZXN0b3I7CS8qIGxhYmVsIGZvciBvcmlnICovCisJY29uc3QgY2hhciAqZmlsZTE7CS8qIGxhYmVsIGZvciBtZjEgKi8KKwljb25zdCBjaGFyICpmaWxlMjsJLyogbGFiZWwgZm9yIG1mMiAqLworfSB4bXBhcmFtX3Q7CisKKyNkZWZpbmUgREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRSA3CisKK2ludCB4ZGxfbWVyZ2UobW1maWxlX3QgKm9yaWcsIG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsCisJCXhtcGFyYW1fdCBjb25zdCAqeG1wLCBtbWJ1ZmZlcl90ICpyZXN1bHQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiAjaWZkZWYgX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYRElGRl9IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveGRpZmZpLmMgYi94ZGlmZi94ZGlmZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDAzNTEzCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGRpZmZpLmMKQEAgLTAsMCArMSwxMDU0IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzCURhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisKKyNkZWZpbmUgWERMX01BWF9DT1NUX01JTiAyNTYKKyNkZWZpbmUgWERMX0hFVVJfTUlOX0NPU1QgMjU2CisjZGVmaW5lIFhETF9MSU5FX01BWCAobG9uZykoKDFVTCA8PCAoQ0hBUl9CSVQgKiBzaXplb2YobG9uZykgLSAxKSkgLSAxKQorI2RlZmluZSBYRExfU05BS0VfQ05UIDIwCisjZGVmaW5lIFhETF9LX0hFVVIgNAorCit0eXBlZGVmIHN0cnVjdCBzX3hkcHNwbGl0IHsKKwlsb25nIGkxLCBpMjsKKwlpbnQgbWluX2xvLCBtaW5faGk7Cit9IHhkcHNwbGl0X3Q7CisKKy8qCisgKiBTZWUgIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9ucyIsIGJ5IEV1Z2VuZSBNeWVycy4KKyAqIEJhc2ljYWxseSBjb25zaWRlcnMgYSAiYm94IiAob2ZmMSwgb2ZmMiwgbGltMSwgbGltMikgYW5kIHNjYW4gZnJvbSBib3RoCisgKiB0aGUgZm9yd2FyZCBkaWFnb25hbCBzdGFydGluZyBmcm9tIChvZmYxLCBvZmYyKSBhbmQgdGhlIGJhY2t3YXJkIGRpYWdvbmFsCisgKiBzdGFydGluZyBmcm9tIChsaW0xLCBsaW0yKS4gSWYgdGhlIEsgdmFsdWVzIG9uIHRoZSBzYW1lIGRpYWdvbmFsIGNyb3NzZXMKKyAqIHJldHVybnMgdGhlIGZ1cnRoZXN0IHBvaW50IG9mIHJlYWNoLiBXZSBtaWdodCBlbmNvdW50ZXIgZXhwZW5zaXZlIGVkZ2UgY2FzZXMKKyAqIHVzaW5nIHRoaXMgYWxnb3JpdGhtLCBzbyBhIGxpdHRsZSBiaXQgb2YgaGV1cmlzdGljIGlzIG5lZWRlZCB0byBjdXQgdGhlCisgKiBzZWFyY2ggYW5kIHRvIHJldHVybiBhIHN1Ym9wdGltYWwgcG9pbnQuCisgKi8KK3N0YXRpYyBsb25nIHhkbF9zcGxpdCh1bnNpZ25lZCBsb25nIGNvbnN0ICpoYTEsIGxvbmcgb2ZmMSwgbG9uZyBsaW0xLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGNvbnN0ICpoYTIsIGxvbmcgb2ZmMiwgbG9uZyBsaW0yLAorCQkgICAgICBsb25nICprdmRmLCBsb25nICprdmRiLCBpbnQgbmVlZF9taW4sIHhkcHNwbGl0X3QgKnNwbCwKKwkJICAgICAgeGRhbGdvZW52X3QgKnhlbnYpIHsKKwlsb25nIGRtaW4gPSBvZmYxIC0gbGltMiwgZG1heCA9IGxpbTEgLSBvZmYyOworCWxvbmcgZm1pZCA9IG9mZjEgLSBvZmYyLCBibWlkID0gbGltMSAtIGxpbTI7CisJbG9uZyBvZGQgPSAoZm1pZCAtIGJtaWQpICYgMTsKKwlsb25nIGZtaW4gPSBmbWlkLCBmbWF4ID0gZm1pZDsKKwlsb25nIGJtaW4gPSBibWlkLCBibWF4ID0gYm1pZDsKKwlsb25nIGVjLCBkLCBpMSwgaTIsIHByZXYxLCBiZXN0LCBkZCwgdiwgazsKKworCS8qCisJICogU2V0IGluaXRpYWwgZGlhZ29uYWwgdmFsdWVzIGZvciBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkIHBhdGguCisJICovCisJa3ZkZltmbWlkXSA9IG9mZjE7CisJa3ZkYltibWlkXSA9IGxpbTE7CisKKwlmb3IgKGVjID0gMTs7IGVjKyspIHsKKwkJaW50IGdvdF9zbmFrZSA9IDA7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBleHRlbmQgdGhlIGRpYWdvbmFsICJkb21haW4iIGJ5IG9uZS4gSWYgdGhlIG5leHQKKwkJICogdmFsdWVzIGV4aXRzIHRoZSBib3ggYm91bmRhcmllcyB3ZSBuZWVkIHRvIGNoYW5nZSBpdCBpbiB0aGUKKwkJICogb3Bwb3NpdGUgZGlyZWN0aW9uIGJlY2F1c2UgKG1heCAtIG1pbikgbXVzdCBiZSBhIHBvd2VyIG9mCisJCSAqIHR3by4KKwkJICoKKwkJICogQWxzbyB3ZSBpbml0aWFsaXplIHRoZSBleHRlcm5hbCBLIHZhbHVlIHRvIC0xIHNvIHRoYXQgd2UgY2FuCisJCSAqIGF2b2lkIGV4dHJhIGNvbmRpdGlvbnMgaW4gdGhlIGNoZWNrIGluc2lkZSB0aGUgY29yZSBsb29wLgorCQkgKi8KKwkJaWYgKGZtaW4gPiBkbWluKQorCQkJa3ZkZlstLWZtaW4gLSAxXSA9IC0xOworCQllbHNlCisJCQkrK2ZtaW47CisJCWlmIChmbWF4IDwgZG1heCkKKwkJCWt2ZGZbKytmbWF4ICsgMV0gPSAtMTsKKwkJZWxzZQorCQkJLS1mbWF4OworCisJCWZvciAoZCA9IGZtYXg7IGQgPj0gZm1pbjsgZCAtPSAyKSB7CisJCQlpZiAoa3ZkZltkIC0gMV0gPj0ga3ZkZltkICsgMV0pCisJCQkJaTEgPSBrdmRmW2QgLSAxXSArIDE7CisJCQllbHNlCisJCQkJaTEgPSBrdmRmW2QgKyAxXTsKKwkJCXByZXYxID0gaTE7CisJCQlpMiA9IGkxIC0gZDsKKwkJCWZvciAoOyBpMSA8IGxpbTEgJiYgaTIgPCBsaW0yICYmIGhhMVtpMV0gPT0gaGEyW2kyXTsgaTErKywgaTIrKyk7CisJCQlpZiAoaTEgLSBwcmV2MSA+IHhlbnYtPnNuYWtlX2NudCkKKwkJCQlnb3Rfc25ha2UgPSAxOworCQkJa3ZkZltkXSA9IGkxOworCQkJaWYgKG9kZCAmJiBibWluIDw9IGQgJiYgZCA8PSBibWF4ICYmIGt2ZGJbZF0gPD0gaTEpIHsKKwkJCQlzcGwtPmkxID0gaTE7CisJCQkJc3BsLT5pMiA9IGkyOworCQkJCXNwbC0+bWluX2xvID0gc3BsLT5taW5faGkgPSAxOworCQkJCXJldHVybiBlYzsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gZXh0ZW5kIHRoZSBkaWFnb25hbCAiZG9tYWluIiBieSBvbmUuIElmIHRoZSBuZXh0CisJCSAqIHZhbHVlcyBleGl0cyB0aGUgYm94IGJvdW5kYXJpZXMgd2UgbmVlZCB0byBjaGFuZ2UgaXQgaW4gdGhlCisJCSAqIG9wcG9zaXRlIGRpcmVjdGlvbiBiZWNhdXNlIChtYXggLSBtaW4pIG11c3QgYmUgYSBwb3dlciBvZgorCQkgKiB0d28uCisJCSAqCisJCSAqIEFsc28gd2UgaW5pdGlhbGl6ZSB0aGUgZXh0ZXJuYWwgSyB2YWx1ZSB0byAtMSBzbyB0aGF0IHdlIGNhbgorCQkgKiBhdm9pZCBleHRyYSBjb25kaXRpb25zIGluIHRoZSBjaGVjayBpbnNpZGUgdGhlIGNvcmUgbG9vcC4KKwkJICovCisJCWlmIChibWluID4gZG1pbikKKwkJCWt2ZGJbLS1ibWluIC0gMV0gPSBYRExfTElORV9NQVg7CisJCWVsc2UKKwkJCSsrYm1pbjsKKwkJaWYgKGJtYXggPCBkbWF4KQorCQkJa3ZkYlsrK2JtYXggKyAxXSA9IFhETF9MSU5FX01BWDsKKwkJZWxzZQorCQkJLS1ibWF4OworCisJCWZvciAoZCA9IGJtYXg7IGQgPj0gYm1pbjsgZCAtPSAyKSB7CisJCQlpZiAoa3ZkYltkIC0gMV0gPCBrdmRiW2QgKyAxXSkKKwkJCQlpMSA9IGt2ZGJbZCAtIDFdOworCQkJZWxzZQorCQkJCWkxID0ga3ZkYltkICsgMV0gLSAxOworCQkJcHJldjEgPSBpMTsKKwkJCWkyID0gaTEgLSBkOworCQkJZm9yICg7IGkxID4gb2ZmMSAmJiBpMiA+IG9mZjIgJiYgaGExW2kxIC0gMV0gPT0gaGEyW2kyIC0gMV07IGkxLS0sIGkyLS0pOworCQkJaWYgKHByZXYxIC0gaTEgPiB4ZW52LT5zbmFrZV9jbnQpCisJCQkJZ290X3NuYWtlID0gMTsKKwkJCWt2ZGJbZF0gPSBpMTsKKwkJCWlmICghb2RkICYmIGZtaW4gPD0gZCAmJiBkIDw9IGZtYXggJiYgaTEgPD0ga3ZkZltkXSkgeworCQkJCXNwbC0+aTEgPSBpMTsKKwkJCQlzcGwtPmkyID0gaTI7CisJCQkJc3BsLT5taW5fbG8gPSBzcGwtPm1pbl9oaSA9IDE7CisJCQkJcmV0dXJuIGVjOworCQkJfQorCQl9CisKKwkJaWYgKG5lZWRfbWluKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgdGhlIGVkaXQgY29zdCBpcyBhYm92ZSB0aGUgaGV1cmlzdGljIHRyaWdnZXIgYW5kIGlmCisJCSAqIHdlIGdvdCBhIGdvb2Qgc25ha2UsIHdlIHNhbXBsZSBjdXJyZW50IGRpYWdvbmFscyB0byBzZWUKKwkJICogaWYgc29tZSBvZiB0aGVtIGhhdmUgcmVhY2hlZCBhbiAiaW50ZXJlc3RpbmciIHBhdGguIE91cgorCQkgKiBtZWFzdXJlIGlzIGEgZnVuY3Rpb24gb2YgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGRpYWdvbmFsCisJCSAqIGNvcm5lciAoaTEgKyBpMikgcGVuYWxpemVkIHdpdGggdGhlIGRpc3RhbmNlIGZyb20gdGhlCisJCSAqIG1pZCBkaWFnb25hbCBpdHNlbGYuIElmIHRoaXMgdmFsdWUgaXMgYWJvdmUgdGhlIGN1cnJlbnQKKwkJICogZWRpdCBjb3N0IHRpbWVzIGEgbWFnaWMgZmFjdG9yIChYRExfS19IRVVSKSB3ZSBjb25zaWRlcgorCQkgKiBpdCBpbnRlcmVzdGluZy4KKwkJICovCisJCWlmIChnb3Rfc25ha2UgJiYgZWMgPiB4ZW52LT5oZXVyX21pbikgeworCQkJZm9yIChiZXN0ID0gMCwgZCA9IGZtYXg7IGQgPj0gZm1pbjsgZCAtPSAyKSB7CisJCQkJZGQgPSBkID4gZm1pZCA/IGQgLSBmbWlkOiBmbWlkIC0gZDsKKwkJCQlpMSA9IGt2ZGZbZF07CisJCQkJaTIgPSBpMSAtIGQ7CisJCQkJdiA9IChpMSAtIG9mZjEpICsgKGkyIC0gb2ZmMikgLSBkZDsKKworCQkJCWlmICh2ID4gWERMX0tfSEVVUiAqIGVjICYmIHYgPiBiZXN0ICYmCisJCQkJICAgIG9mZjEgKyB4ZW52LT5zbmFrZV9jbnQgPD0gaTEgJiYgaTEgPCBsaW0xICYmCisJCQkJICAgIG9mZjIgKyB4ZW52LT5zbmFrZV9jbnQgPD0gaTIgJiYgaTIgPCBsaW0yKSB7CisJCQkJCWZvciAoayA9IDE7IGhhMVtpMSAtIGtdID09IGhhMltpMiAtIGtdOyBrKyspCisJCQkJCQlpZiAoayA9PSB4ZW52LT5zbmFrZV9jbnQpIHsKKwkJCQkJCQliZXN0ID0gdjsKKwkJCQkJCQlzcGwtPmkxID0gaTE7CisJCQkJCQkJc3BsLT5pMiA9IGkyOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChiZXN0ID4gMCkgeworCQkJCXNwbC0+bWluX2xvID0gMTsKKwkJCQlzcGwtPm1pbl9oaSA9IDA7CisJCQkJcmV0dXJuIGVjOworCQkJfQorCisJCQlmb3IgKGJlc3QgPSAwLCBkID0gYm1heDsgZCA+PSBibWluOyBkIC09IDIpIHsKKwkJCQlkZCA9IGQgPiBibWlkID8gZCAtIGJtaWQ6IGJtaWQgLSBkOworCQkJCWkxID0ga3ZkYltkXTsKKwkJCQlpMiA9IGkxIC0gZDsKKwkJCQl2ID0gKGxpbTEgLSBpMSkgKyAobGltMiAtIGkyKSAtIGRkOworCisJCQkJaWYgKHYgPiBYRExfS19IRVVSICogZWMgJiYgdiA+IGJlc3QgJiYKKwkJCQkgICAgb2ZmMSA8IGkxICYmIGkxIDw9IGxpbTEgLSB4ZW52LT5zbmFrZV9jbnQgJiYKKwkJCQkgICAgb2ZmMiA8IGkyICYmIGkyIDw9IGxpbTIgLSB4ZW52LT5zbmFrZV9jbnQpIHsKKwkJCQkJZm9yIChrID0gMDsgaGExW2kxICsga10gPT0gaGEyW2kyICsga107IGsrKykKKwkJCQkJCWlmIChrID09IHhlbnYtPnNuYWtlX2NudCAtIDEpIHsKKwkJCQkJCQliZXN0ID0gdjsKKwkJCQkJCQlzcGwtPmkxID0gaTE7CisJCQkJCQkJc3BsLT5pMiA9IGkyOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChiZXN0ID4gMCkgeworCQkJCXNwbC0+bWluX2xvID0gMDsKKwkJCQlzcGwtPm1pbl9oaSA9IDE7CisJCQkJcmV0dXJuIGVjOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogRW5vdWdoIGlzIGVub3VnaC4gV2Ugc3BlbnQgdG9vIG11Y2ggdGltZSBoZXJlIGFuZCBub3cgd2UKKwkJICogY29sbGVjdCB0aGUgZnVydGhlc3QgcmVhY2hpbmcgcGF0aCB1c2luZyB0aGUgKGkxICsgaTIpCisJCSAqIG1lYXN1cmUuCisJCSAqLworCQlpZiAoZWMgPj0geGVudi0+bXhjb3N0KSB7CisJCQlsb25nIGZiZXN0LCBmYmVzdDEsIGJiZXN0LCBiYmVzdDE7CisKKwkJCWZiZXN0ID0gZmJlc3QxID0gLTE7CisJCQlmb3IgKGQgPSBmbWF4OyBkID49IGZtaW47IGQgLT0gMikgeworCQkJCWkxID0gWERMX01JTihrdmRmW2RdLCBsaW0xKTsKKwkJCQlpMiA9IGkxIC0gZDsKKwkJCQlpZiAobGltMiA8IGkyKQorCQkJCQlpMSA9IGxpbTIgKyBkLCBpMiA9IGxpbTI7CisJCQkJaWYgKGZiZXN0IDwgaTEgKyBpMikgeworCQkJCQlmYmVzdCA9IGkxICsgaTI7CisJCQkJCWZiZXN0MSA9IGkxOworCQkJCX0KKwkJCX0KKworCQkJYmJlc3QgPSBiYmVzdDEgPSBYRExfTElORV9NQVg7CisJCQlmb3IgKGQgPSBibWF4OyBkID49IGJtaW47IGQgLT0gMikgeworCQkJCWkxID0gWERMX01BWChvZmYxLCBrdmRiW2RdKTsKKwkJCQlpMiA9IGkxIC0gZDsKKwkJCQlpZiAoaTIgPCBvZmYyKQorCQkJCQlpMSA9IG9mZjIgKyBkLCBpMiA9IG9mZjI7CisJCQkJaWYgKGkxICsgaTIgPCBiYmVzdCkgeworCQkJCQliYmVzdCA9IGkxICsgaTI7CisJCQkJCWJiZXN0MSA9IGkxOworCQkJCX0KKwkJCX0KKworCQkJaWYgKChsaW0xICsgbGltMikgLSBiYmVzdCA8IGZiZXN0IC0gKG9mZjEgKyBvZmYyKSkgeworCQkJCXNwbC0+aTEgPSBmYmVzdDE7CisJCQkJc3BsLT5pMiA9IGZiZXN0IC0gZmJlc3QxOworCQkJCXNwbC0+bWluX2xvID0gMTsKKwkJCQlzcGwtPm1pbl9oaSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXNwbC0+aTEgPSBiYmVzdDE7CisJCQkJc3BsLT5pMiA9IGJiZXN0IC0gYmJlc3QxOworCQkJCXNwbC0+bWluX2xvID0gMDsKKwkJCQlzcGwtPm1pbl9oaSA9IDE7CisJCQl9CisJCQlyZXR1cm4gZWM7CisJCX0KKwl9Cit9CisKKworLyoKKyAqIFJ1bGU6ICJEaXZpZGUgZXQgSW1wZXJhIiAoZGl2aWRlICYgY29ucXVlcikuIFJlY3Vyc2l2ZWx5IHNwbGl0IHRoZSBib3ggaW4KKyAqIHN1Yi1ib3hlcyBieSBjYWxsaW5nIHRoZSBib3ggc3BsaXR0aW5nIGZ1bmN0aW9uLiBOb3RlIHRoYXQgdGhlIHJlYWwgam9iCisgKiAobWFya2luZyBjaGFuZ2VkIGxpbmVzKSBpcyBkb25lIGluIHRoZSB0d28gYm91bmRhcnkgcmVhY2hpbmcgY2hlY2tzLgorICovCitpbnQgeGRsX3JlY3NfY21wKGRpZmZkYXRhX3QgKmRkMSwgbG9uZyBvZmYxLCBsb25nIGxpbTEsCisJCSBkaWZmZGF0YV90ICpkZDIsIGxvbmcgb2ZmMiwgbG9uZyBsaW0yLAorCQkgbG9uZyAqa3ZkZiwgbG9uZyAqa3ZkYiwgaW50IG5lZWRfbWluLCB4ZGFsZ29lbnZfdCAqeGVudikgeworCXVuc2lnbmVkIGxvbmcgY29uc3QgKmhhMSA9IGRkMS0+aGEsICpoYTIgPSBkZDItPmhhOworCisJLyoKKwkgKiBTaHJpbmsgdGhlIGJveCBieSB3YWxraW5nIHRocm91Z2ggZWFjaCBkaWFnb25hbCBzbmFrZSAoU1cgYW5kIE5FKS4KKwkgKi8KKwlmb3IgKDsgb2ZmMSA8IGxpbTEgJiYgb2ZmMiA8IGxpbTIgJiYgaGExW29mZjFdID09IGhhMltvZmYyXTsgb2ZmMSsrLCBvZmYyKyspOworCWZvciAoOyBvZmYxIDwgbGltMSAmJiBvZmYyIDwgbGltMiAmJiBoYTFbbGltMSAtIDFdID09IGhhMltsaW0yIC0gMV07IGxpbTEtLSwgbGltMi0tKTsKKworCS8qCisJICogSWYgb25lIGRpbWVuc2lvbiBpcyBlbXB0eSwgdGhlbiBhbGwgcmVjb3JkcyBvbiB0aGUgb3RoZXIgb25lIG11c3QKKwkgKiBiZSBvYnZpb3VzbHkgY2hhbmdlZC4KKwkgKi8KKwlpZiAob2ZmMSA9PSBsaW0xKSB7CisJCWNoYXIgKnJjaGcyID0gZGQyLT5yY2hnOworCQlsb25nICpyaW5kZXgyID0gZGQyLT5yaW5kZXg7CisKKwkJZm9yICg7IG9mZjIgPCBsaW0yOyBvZmYyKyspCisJCQlyY2hnMltyaW5kZXgyW29mZjJdXSA9IDE7CisJfSBlbHNlIGlmIChvZmYyID09IGxpbTIpIHsKKwkJY2hhciAqcmNoZzEgPSBkZDEtPnJjaGc7CisJCWxvbmcgKnJpbmRleDEgPSBkZDEtPnJpbmRleDsKKworCQlmb3IgKDsgb2ZmMSA8IGxpbTE7IG9mZjErKykKKwkJCXJjaGcxW3JpbmRleDFbb2ZmMV1dID0gMTsKKwl9IGVsc2UgeworCQl4ZHBzcGxpdF90IHNwbDsKKwkJc3BsLmkxID0gc3BsLmkyID0gMDsKKworCQkvKgorCQkgKiBEaXZpZGUgLi4uCisJCSAqLworCQlpZiAoeGRsX3NwbGl0KGhhMSwgb2ZmMSwgbGltMSwgaGEyLCBvZmYyLCBsaW0yLCBrdmRmLCBrdmRiLAorCQkJICAgICAgbmVlZF9taW4sICZzcGwsIHhlbnYpIDwgMCkgeworCisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKgorCQkgKiAuLi4gZXQgSW1wZXJhLgorCQkgKi8KKwkJaWYgKHhkbF9yZWNzX2NtcChkZDEsIG9mZjEsIHNwbC5pMSwgZGQyLCBvZmYyLCBzcGwuaTIsCisJCQkJIGt2ZGYsIGt2ZGIsIHNwbC5taW5fbG8sIHhlbnYpIDwgMCB8fAorCQkgICAgeGRsX3JlY3NfY21wKGRkMSwgc3BsLmkxLCBsaW0xLCBkZDIsIHNwbC5pMiwgbGltMiwKKwkJCQkga3ZkZiwga3ZkYiwgc3BsLm1pbl9oaSwgeGVudikgPCAwKSB7CisKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKK2ludCB4ZGxfZG9fZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJeGRmZW52X3QgKnhlKSB7CisJbG9uZyBuZGlhZ3M7CisJbG9uZyAqa3ZkLCAqa3ZkZiwgKmt2ZGI7CisJeGRhbGdvZW52X3QgeGVudjsKKwlkaWZmZGF0YV90IGRkMSwgZGQyOworCisJaWYgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSA9PSBYREZfUEFUSUVOQ0VfRElGRikKKwkJcmV0dXJuIHhkbF9kb19wYXRpZW5jZV9kaWZmKG1mMSwgbWYyLCB4cHAsIHhlKTsKKworCWlmIChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgPT0gWERGX0hJU1RPR1JBTV9ESUZGKQorCQlyZXR1cm4geGRsX2RvX2hpc3RvZ3JhbV9kaWZmKG1mMSwgbWYyLCB4cHAsIHhlKTsKKworCWlmICh4ZGxfcHJlcGFyZV9lbnYobWYxLCBtZjIsIHhwcCwgeGUpIDwgMCkgeworCisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGFuZCBzZXR1cCBLIHZlY3RvcnMgdG8gYmUgdXNlZCBieSB0aGUgZGlmZmVyZW50aWFsCisJICogYWxnb3JpdGhtLgorCSAqCisJICogT25lIGlzIHRvIHN0b3JlIHRoZSBmb3J3YXJkIHBhdGggYW5kIG9uZSB0byBzdG9yZSB0aGUgYmFja3dhcmQgcGF0aC4KKwkgKi8KKwluZGlhZ3MgPSB4ZS0+eGRmMS5ucmVmZiArIHhlLT54ZGYyLm5yZWZmICsgMzsKKwlpZiAoIShrdmQgPSAobG9uZyAqKSB4ZGxfbWFsbG9jKCgyICogbmRpYWdzICsgMikgKiBzaXplb2YobG9uZykpKSkgeworCisJCXhkbF9mcmVlX2Vudih4ZSk7CisJCXJldHVybiAtMTsKKwl9CisJa3ZkZiA9IGt2ZDsKKwlrdmRiID0ga3ZkZiArIG5kaWFnczsKKwlrdmRmICs9IHhlLT54ZGYyLm5yZWZmICsgMTsKKwlrdmRiICs9IHhlLT54ZGYyLm5yZWZmICsgMTsKKworCXhlbnYubXhjb3N0ID0geGRsX2JvZ29zcXJ0KG5kaWFncyk7CisJaWYgKHhlbnYubXhjb3N0IDwgWERMX01BWF9DT1NUX01JTikKKwkJeGVudi5teGNvc3QgPSBYRExfTUFYX0NPU1RfTUlOOworCXhlbnYuc25ha2VfY250ID0gWERMX1NOQUtFX0NOVDsKKwl4ZW52LmhldXJfbWluID0gWERMX0hFVVJfTUlOX0NPU1Q7CisKKwlkZDEubnJlYyA9IHhlLT54ZGYxLm5yZWZmOworCWRkMS5oYSA9IHhlLT54ZGYxLmhhOworCWRkMS5yY2hnID0geGUtPnhkZjEucmNoZzsKKwlkZDEucmluZGV4ID0geGUtPnhkZjEucmluZGV4OworCWRkMi5ucmVjID0geGUtPnhkZjIubnJlZmY7CisJZGQyLmhhID0geGUtPnhkZjIuaGE7CisJZGQyLnJjaGcgPSB4ZS0+eGRmMi5yY2hnOworCWRkMi5yaW5kZXggPSB4ZS0+eGRmMi5yaW5kZXg7CisKKwlpZiAoeGRsX3JlY3NfY21wKCZkZDEsIDAsIGRkMS5ucmVjLCAmZGQyLCAwLCBkZDIubnJlYywKKwkJCSBrdmRmLCBrdmRiLCAoeHBwLT5mbGFncyAmIFhERl9ORUVEX01JTklNQUwpICE9IDAsICZ4ZW52KSA8IDApIHsKKworCQl4ZGxfZnJlZShrdmQpOworCQl4ZGxfZnJlZV9lbnYoeGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJeGRsX2ZyZWUoa3ZkKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB4ZGNoYW5nZV90ICp4ZGxfYWRkX2NoYW5nZSh4ZGNoYW5nZV90ICp4c2NyLCBsb25nIGkxLCBsb25nIGkyLCBsb25nIGNoZzEsIGxvbmcgY2hnMikgeworCXhkY2hhbmdlX3QgKnhjaDsKKworCWlmICghKHhjaCA9ICh4ZGNoYW5nZV90ICopIHhkbF9tYWxsb2Moc2l6ZW9mKHhkY2hhbmdlX3QpKSkpCisJCXJldHVybiBOVUxMOworCisJeGNoLT5uZXh0ID0geHNjcjsKKwl4Y2gtPmkxID0gaTE7CisJeGNoLT5pMiA9IGkyOworCXhjaC0+Y2hnMSA9IGNoZzE7CisJeGNoLT5jaGcyID0gY2hnMjsKKwl4Y2gtPmlnbm9yZSA9IDA7CisKKwlyZXR1cm4geGNoOworfQorCisKK3N0YXRpYyBpbnQgcmVjc19tYXRjaCh4cmVjb3JkX3QgKnJlYzEsIHhyZWNvcmRfdCAqcmVjMiwgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gKHJlYzEtPmhhID09IHJlYzItPmhhICYmCisJCXhkbF9yZWNtYXRjaChyZWMxLT5wdHIsIHJlYzEtPnNpemUsCisJCQkgICAgIHJlYzItPnB0ciwgcmVjMi0+c2l6ZSwKKwkJCSAgICAgZmxhZ3MpKTsKK30KKworLyoKKyAqIElmIGEgbGluZSBpcyBpbmRlbnRlZCBtb3JlIHRoYW4gdGhpcywgZ2V0X2luZGVudCgpIGp1c3QgcmV0dXJucyB0aGlzIHZhbHVlLgorICogVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGRvIGFic3VyZCBhbW91bnRzIG9mIHdvcmsgZm9yIGRhdGEgdGhhdCBhcmUgbm90CisgKiBodW1hbi1yZWFkYWJsZSB0ZXh0LCBhbmQgYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG91dHB1dCBvZiBnZXRfaW5kZW50IGZpdHMKKyAqIHdpdGhpbiBhbiBpbnQuCisgKi8KKyNkZWZpbmUgTUFYX0lOREVOVCAyMDAKKworLyoKKyAqIFJldHVybiB0aGUgYW1vdW50IG9mIGluZGVudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGluZSwgdHJlYXRpbmcgVEFCIGFzIDgKKyAqIGNvbHVtbnMuIFJldHVybiAtMSBpZiBsaW5lIGlzIGVtcHR5IG9yIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZS4gQ2xhbXAgdGhlCisgKiBvdXRwdXQgdmFsdWUgYXQgTUFYX0lOREVOVC4KKyAqLworc3RhdGljIGludCBnZXRfaW5kZW50KHhyZWNvcmRfdCAqcmVjKQoreworCWxvbmcgaTsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCByZWMtPnNpemU7IGkrKykgeworCQljaGFyIGMgPSByZWMtPnB0cltpXTsKKworCQlpZiAoIVhETF9JU1NQQUNFKGMpKQorCQkJcmV0dXJuIHJldDsKKwkJZWxzZSBpZiAoYyA9PSAnICcpCisJCQlyZXQgKz0gMTsKKwkJZWxzZSBpZiAoYyA9PSAnXHQnKQorCQkJcmV0ICs9IDggLSByZXQgJSA4OworCQkvKiBpZ25vcmUgb3RoZXIgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzICovCisKKwkJaWYgKHJldCA+PSBNQVhfSU5ERU5UKQorCQkJcmV0dXJuIE1BWF9JTkRFTlQ7CisJfQorCisJLyogVGhlIGxpbmUgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLiAqLworCXJldHVybiAtMTsKK30KKworLyoKKyAqIElmIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBjb25zZWN1dGl2ZSBibGFuayByb3dzIGFyZSBmb3VuZCwganVzdCByZXR1cm4KKyAqIHRoaXMgdmFsdWUuIFRoaXMgYXZvaWRzIHJlcXVpcmluZyBPKE5eMikgd29yayBmb3IgcGF0aG9sb2dpY2FsIGNhc2VzLCBhbmQKKyAqIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBvdXRwdXQgb2Ygc2NvcmVfc3BsaXQgZml0cyBpbiBhbiBpbnQuCisgKi8KKyNkZWZpbmUgTUFYX0JMQU5LUyAyMAorCisvKiBDaGFyYWN0ZXJpc3RpY3MgbWVhc3VyZWQgYWJvdXQgYSBoeXBvdGhldGljYWwgc3BsaXQgcG9zaXRpb24uICovCitzdHJ1Y3Qgc3BsaXRfbWVhc3VyZW1lbnQgeworCS8qCisJICogSXMgdGhlIHNwbGl0IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgKGFzaWRlIGZyb20gYW55IGJsYW5rIGxpbmVzKT8KKwkgKi8KKwlpbnQgZW5kX29mX2ZpbGU7CisKKwkvKgorCSAqIEhvdyBtdWNoIGlzIHRoZSBsaW5lIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgc3BsaXQgaW5kZW50ZWQgKG9yIC0xCisJICogaWYgdGhlIGxpbmUgaXMgYmxhbmspOgorCSAqLworCWludCBpbmRlbnQ7CisKKwkvKgorCSAqIEhvdyBtYW55IGNvbnNlY3V0aXZlIGxpbmVzIGFib3ZlIHRoZSBzcGxpdCBhcmUgYmxhbms/CisJICovCisJaW50IHByZV9ibGFuazsKKworCS8qCisJICogSG93IG11Y2ggaXMgdGhlIG5lYXJlc3Qgbm9uLWJsYW5rIGxpbmUgYWJvdmUgdGhlIHNwbGl0IGluZGVudGVkIChvcgorCSAqIC0xIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbGluZSk/CisJICovCisJaW50IHByZV9pbmRlbnQ7CisKKwkvKgorCSAqIEhvdyBtYW55IGxpbmVzIGFmdGVyIHRoZSBsaW5lIGZvbGxvd2luZyB0aGUgc3BsaXQgYXJlIGJsYW5rPworCSAqLworCWludCBwb3N0X2JsYW5rOworCisJLyoKKwkgKiBIb3cgbXVjaCBpcyB0aGUgbmVhcmVzdCBub24tYmxhbmsgbGluZSBhZnRlciB0aGUgbGluZSBmb2xsb3dpbmcgdGhlCisJICogc3BsaXQgaW5kZW50ZWQgKG9yIC0xIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbGluZSk/CisJICovCisJaW50IHBvc3RfaW5kZW50OworfTsKKworc3RydWN0IHNwbGl0X3Njb3JlIHsKKwkvKiBUaGUgZWZmZWN0aXZlIGluZGVudCBvZiB0aGlzIHNwbGl0IChzbWFsbGVyIGlzIHByZWZlcnJlZCkuICovCisJaW50IGVmZmVjdGl2ZV9pbmRlbnQ7CisKKwkvKiBQZW5hbHR5IGZvciB0aGlzIHNwbGl0IChzbWFsbGVyIGlzIHByZWZlcnJlZCkuICovCisJaW50IHBlbmFsdHk7Cit9OworCisvKgorICogRmlsbCBtIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgYSBoeXBvdGhldGljYWwgc3BsaXQgb2YgeGRmIGFib3ZlIGxpbmUgc3BsaXQuCisgKi8KK3N0YXRpYyB2b2lkIG1lYXN1cmVfc3BsaXQoY29uc3QgeGRmaWxlX3QgKnhkZiwgbG9uZyBzcGxpdCwKKwkJCSAgc3RydWN0IHNwbGl0X21lYXN1cmVtZW50ICptKQoreworCWxvbmcgaTsKKworCWlmIChzcGxpdCA+PSB4ZGYtPm5yZWMpIHsKKwkJbS0+ZW5kX29mX2ZpbGUgPSAxOworCQltLT5pbmRlbnQgPSAtMTsKKwl9IGVsc2UgeworCQltLT5lbmRfb2ZfZmlsZSA9IDA7CisJCW0tPmluZGVudCA9IGdldF9pbmRlbnQoeGRmLT5yZWNzW3NwbGl0XSk7CisJfQorCisJbS0+cHJlX2JsYW5rID0gMDsKKwltLT5wcmVfaW5kZW50ID0gLTE7CisJZm9yIChpID0gc3BsaXQgLSAxOyBpID49IDA7IGktLSkgeworCQltLT5wcmVfaW5kZW50ID0gZ2V0X2luZGVudCh4ZGYtPnJlY3NbaV0pOworCQlpZiAobS0+cHJlX2luZGVudCAhPSAtMSkKKwkJCWJyZWFrOworCQltLT5wcmVfYmxhbmsgKz0gMTsKKwkJaWYgKG0tPnByZV9ibGFuayA9PSBNQVhfQkxBTktTKSB7CisJCQltLT5wcmVfaW5kZW50ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbS0+cG9zdF9ibGFuayA9IDA7CisJbS0+cG9zdF9pbmRlbnQgPSAtMTsKKwlmb3IgKGkgPSBzcGxpdCArIDE7IGkgPCB4ZGYtPm5yZWM7IGkrKykgeworCQltLT5wb3N0X2luZGVudCA9IGdldF9pbmRlbnQoeGRmLT5yZWNzW2ldKTsKKwkJaWYgKG0tPnBvc3RfaW5kZW50ICE9IC0xKQorCQkJYnJlYWs7CisJCW0tPnBvc3RfYmxhbmsgKz0gMTsKKwkJaWYgKG0tPnBvc3RfYmxhbmsgPT0gTUFYX0JMQU5LUykgeworCQkJbS0+cG9zdF9pbmRlbnQgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGUgZW1waXJpY2FsbHktZGV0ZXJtaW5lZCB3ZWlnaHQgZmFjdG9ycyB1c2VkIGJ5IHNjb3JlX3NwbGl0KCkgYmVsb3cuCisgKiBMYXJnZXIgdmFsdWVzIG1lYW5zIHRoYXQgdGhlIHBvc2l0aW9uIGlzIGEgbGVzcyBmYXZvcmFibGUgcGxhY2UgdG8gc3BsaXQuCisgKgorICogTm90ZSB0aGF0IHNjb3JlcyBhcmUgb25seSBldmVyIGNvbXBhcmVkIGFnYWluc3QgZWFjaCBvdGhlciwgc28gbXVsdGlwbHlpbmcKKyAqIGFsbCBvZiB0aGVzZSB3ZWlnaHQvcGVuYWx0eSB2YWx1ZXMgYnkgdGhlIHNhbWUgZmFjdG9yIHdvdWxkbid0IGNoYW5nZSB0aGUKKyAqIGhldXJpc3RpYydzIGJlaGF2aW9yLiBTdGlsbCwgd2UgbmVlZCB0byBzZXQgdGhhdCBhcmJpdHJhcnkgc2NhbGUgKnNvbWVob3cqLgorICogSW4gcHJhY3RpY2UsIHRoZXNlIG51bWJlcnMgYXJlIGNob3NlbiB0byBiZSBsYXJnZSBlbm91Z2ggdGhhdCB0aGV5IGNhbiBiZQorICogYWRqdXN0ZWQgcmVsYXRpdmUgdG8gZWFjaCBvdGhlciB3aXRoIHN1ZmZpY2llbnQgcHJlY2lzaW9uIGRlc3BpdGUgdXNpbmcKKyAqIGludGVnZXIgbWF0aC4KKyAqLworCisvKiBQZW5hbHR5IGlmIHRoZXJlIGFyZSBubyBub24tYmxhbmsgbGluZXMgYmVmb3JlIHRoZSBzcGxpdCAqLworI2RlZmluZSBTVEFSVF9PRl9GSUxFX1BFTkFMVFkgMQorCisvKiBQZW5hbHR5IGlmIHRoZXJlIGFyZSBubyBub24tYmxhbmsgbGluZXMgYWZ0ZXIgdGhlIHNwbGl0ICovCisjZGVmaW5lIEVORF9PRl9GSUxFX1BFTkFMVFkgMjEKKworLyogTXVsdGlwbGllciBmb3IgdGhlIG51bWJlciBvZiBibGFuayBsaW5lcyBhcm91bmQgdGhlIHNwbGl0ICovCisjZGVmaW5lIFRPVEFMX0JMQU5LX1dFSUdIVCAoLTMwKQorCisvKiBNdWx0aXBsaWVyIGZvciB0aGUgbnVtYmVyIG9mIGJsYW5rIGxpbmVzIGFmdGVyIHRoZSBzcGxpdCAqLworI2RlZmluZSBQT1NUX0JMQU5LX1dFSUdIVCA2CisKKy8qCisgKiBQZW5hbHRpZXMgYXBwbGllZCBpZiB0aGUgbGluZSBpcyBpbmRlbnRlZCBtb3JlIHRoYW4gaXRzIHByZWRlY2Vzc29yCisgKi8KKyNkZWZpbmUgUkVMQVRJVkVfSU5ERU5UX1BFTkFMVFkgKC00KQorI2RlZmluZSBSRUxBVElWRV9JTkRFTlRfV0lUSF9CTEFOS19QRU5BTFRZIDEwCisKKy8qCisgKiBQZW5hbHRpZXMgYXBwbGllZCBpZiB0aGUgbGluZSBpcyBpbmRlbnRlZCBsZXNzIHRoYW4gYm90aCBpdHMgcHJlZGVjZXNzb3IgYW5kCisgKiBpdHMgc3VjY2Vzc29yCisgKi8KKyNkZWZpbmUgUkVMQVRJVkVfT1VUREVOVF9QRU5BTFRZIDI0CisjZGVmaW5lIFJFTEFUSVZFX09VVERFTlRfV0lUSF9CTEFOS19QRU5BTFRZIDE3CisKKy8qCisgKiBQZW5hbHRpZXMgYXBwbGllZCBpZiB0aGUgbGluZSBpcyBpbmRlbnRlZCBsZXNzIHRoYW4gaXRzIHByZWRlY2Vzc29yIGJ1dCBub3QKKyAqIGxlc3MgdGhhbiBpdHMgc3VjY2Vzc29yCisgKi8KKyNkZWZpbmUgUkVMQVRJVkVfREVERU5UX1BFTkFMVFkgMjMKKyNkZWZpbmUgUkVMQVRJVkVfREVERU5UX1dJVEhfQkxBTktfUEVOQUxUWSAxNworCisvKgorICogV2Ugb25seSBjb25zaWRlciB3aGV0aGVyIHRoZSBzdW0gb2YgdGhlIGVmZmVjdGl2ZSBpbmRlbnRzIGZvciBzcGxpdHMgYXJlCisgKiBsZXNzIHRoYW4gKC0xKSwgZXF1YWwgdG8gKDApLCBvciBncmVhdGVyIHRoYW4gKCsxKSBlYWNoIG90aGVyLiBUaGUgcmVzdWx0aW5nCisgKiB2YWx1ZSBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBmb2xsb3dpbmcgd2VpZ2h0IGFuZCBjb21iaW5lZCB3aXRoIHRoZSBwZW5hbHR5IHRvCisgKiBkZXRlcm1pbmUgdGhlIGJldHRlciBvZiB0d28gc2NvcmVzLgorICovCisjZGVmaW5lIElOREVOVF9XRUlHSFQgNjAKKworLyoKKyAqIEhvdyBmYXIgZG8gd2Ugc2xpZGUgYSBodW5rIGF0IG1vc3Q/CisgKi8KKyNkZWZpbmUgSU5ERU5UX0hFVVJJU1RJQ19NQVhfU0xJRElORyAxMDAKKworLyoKKyAqIENvbXB1dGUgYSBiYWRuZXNzIHNjb3JlIGZvciB0aGUgaHlwb3RoZXRpY2FsIHNwbGl0IHdob3NlIG1lYXN1cmVtZW50cyBhcmUKKyAqIHN0b3JlZCBpbiBtLiBUaGUgd2VpZ2h0IGZhY3RvcnMgd2VyZSBkZXRlcm1pbmVkIGVtcGlyaWNhbGx5IHVzaW5nIHRoZSB0b29scworICogYW5kIGNvcnB1cyBkZXNjcmliZWQgaW4KKyAqCisgKiAgICAgaHR0cHM6Ly9naXRodWIuY29tL21oYWdnZXIvZGlmZi1zbGlkZXItdG9vbHMKKyAqCisgKiBBbHNvIHNlZSB0aGF0IHByb2plY3QgaWYgeW91IHdhbnQgdG8gaW1wcm92ZSB0aGUgd2VpZ2h0cyBiYXNlZCBvbiwgZm9yCisgKiBleGFtcGxlLCBhIGxhcmdlciBvciBtb3JlIGRpdmVyc2UgY29ycHVzLgorICovCitzdGF0aWMgdm9pZCBzY29yZV9hZGRfc3BsaXQoY29uc3Qgc3RydWN0IHNwbGl0X21lYXN1cmVtZW50ICptLCBzdHJ1Y3Qgc3BsaXRfc2NvcmUgKnMpCit7CisJLyoKKwkgKiBBIHBsYWNlIHRvIGFjY3VtdWxhdGUgcGVuYWx0eSBmYWN0b3JzIChwb3NpdGl2ZSBtYWtlcyB0aGlzIGluZGV4IG1vcmUKKwkgKiBmYXZvcmVkKToKKwkgKi8KKwlpbnQgcG9zdF9ibGFuaywgdG90YWxfYmxhbmssIGluZGVudCwgYW55X2JsYW5rczsKKworCWlmIChtLT5wcmVfaW5kZW50ID09IC0xICYmIG0tPnByZV9ibGFuayA9PSAwKQorCQlzLT5wZW5hbHR5ICs9IFNUQVJUX09GX0ZJTEVfUEVOQUxUWTsKKworCWlmIChtLT5lbmRfb2ZfZmlsZSkKKwkJcy0+cGVuYWx0eSArPSBFTkRfT0ZfRklMRV9QRU5BTFRZOworCisJLyoKKwkgKiBTZXQgcG9zdF9ibGFuayB0byB0aGUgbnVtYmVyIG9mIGJsYW5rIGxpbmVzIGZvbGxvd2luZyB0aGUgc3BsaXQsCisJICogaW5jbHVkaW5nIHRoZSBsaW5lIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzcGxpdDoKKwkgKi8KKwlwb3N0X2JsYW5rID0gKG0tPmluZGVudCA9PSAtMSkgPyAxICsgbS0+cG9zdF9ibGFuayA6IDA7CisJdG90YWxfYmxhbmsgPSBtLT5wcmVfYmxhbmsgKyBwb3N0X2JsYW5rOworCisJLyogUGVuYWx0aWVzIGJhc2VkIG9uIG5lYXJieSBibGFuayBsaW5lczogKi8KKwlzLT5wZW5hbHR5ICs9IFRPVEFMX0JMQU5LX1dFSUdIVCAqIHRvdGFsX2JsYW5rOworCXMtPnBlbmFsdHkgKz0gUE9TVF9CTEFOS19XRUlHSFQgKiBwb3N0X2JsYW5rOworCisJaWYgKG0tPmluZGVudCAhPSAtMSkKKwkJaW5kZW50ID0gbS0+aW5kZW50OworCWVsc2UKKwkJaW5kZW50ID0gbS0+cG9zdF9pbmRlbnQ7CisKKwlhbnlfYmxhbmtzID0gKHRvdGFsX2JsYW5rICE9IDApOworCisJLyogTm90ZSB0aGF0IHRoZSBlZmZlY3RpdmUgaW5kZW50IGlzIC0xIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGU6ICovCisJcy0+ZWZmZWN0aXZlX2luZGVudCArPSBpbmRlbnQ7CisKKwlpZiAoaW5kZW50ID09IC0xKSB7CisJCS8qIE5vIGFkZGl0aW9uYWwgYWRqdXN0bWVudHMgbmVlZGVkLiAqLworCX0gZWxzZSBpZiAobS0+cHJlX2luZGVudCA9PSAtMSkgeworCQkvKiBObyBhZGRpdGlvbmFsIGFkanVzdG1lbnRzIG5lZWRlZC4gKi8KKwl9IGVsc2UgaWYgKGluZGVudCA+IG0tPnByZV9pbmRlbnQpIHsKKwkJLyoKKwkJICogVGhlIGxpbmUgaXMgaW5kZW50ZWQgbW9yZSB0aGFuIGl0cyBwcmVkZWNlc3Nvci4KKwkJICovCisJCXMtPnBlbmFsdHkgKz0gYW55X2JsYW5rcyA/CisJCQlSRUxBVElWRV9JTkRFTlRfV0lUSF9CTEFOS19QRU5BTFRZIDoKKwkJCVJFTEFUSVZFX0lOREVOVF9QRU5BTFRZOworCX0gZWxzZSBpZiAoaW5kZW50ID09IG0tPnByZV9pbmRlbnQpIHsKKwkJLyoKKwkJICogVGhlIGxpbmUgaGFzIHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsIGFzIGl0cyBwcmVkZWNlc3Nvci4KKwkJICogTm8gYWRkaXRpb25hbCBhZGp1c3RtZW50cyBuZWVkZWQuCisJCSAqLworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBsaW5lIGlzIGluZGVudGVkIGxlc3MgdGhhbiBpdHMgcHJlZGVjZXNzb3IuIEl0IGNvdWxkIGJlCisJCSAqIHRoZSBibG9jayB0ZXJtaW5hdG9yIG9mIHRoZSBwcmV2aW91cyBibG9jaywgYnV0IGl0IGNvdWxkCisJCSAqIGFsc28gYmUgdGhlIHN0YXJ0IG9mIGEgbmV3IGJsb2NrIChlLmcuLCBhbiAiZWxzZSIgYmxvY2ssIG9yCisJCSAqIG1heWJlIHRoZSBwcmV2aW91cyBibG9jayBkaWRuJ3QgaGF2ZSBhIGJsb2NrIHRlcm1pbmF0b3IpLgorCQkgKiBUcnkgdG8gZGlzdGluZ3Vpc2ggdGhvc2UgY2FzZXMgYmFzZWQgb24gd2hhdCBjb21lcyBuZXh0OgorCQkgKi8KKwkJaWYgKG0tPnBvc3RfaW5kZW50ICE9IC0xICYmIG0tPnBvc3RfaW5kZW50ID4gaW5kZW50KSB7CisJCQkvKgorCQkJICogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGluZGVudGVkIG1vcmUuIFNvIGl0IGlzIGxpa2VseQorCQkJICogdGhhdCB0aGlzIGxpbmUgaXMgdGhlIHN0YXJ0IG9mIGEgYmxvY2suCisJCQkgKi8KKwkJCXMtPnBlbmFsdHkgKz0gYW55X2JsYW5rcyA/CisJCQkJUkVMQVRJVkVfT1VUREVOVF9XSVRIX0JMQU5LX1BFTkFMVFkgOgorCQkJCVJFTEFUSVZFX09VVERFTlRfUEVOQUxUWTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGF0IHdhcyBwcm9iYWJseSB0aGUgZW5kIG9mIGEgYmxvY2suCisJCQkgKi8KKwkJCXMtPnBlbmFsdHkgKz0gYW55X2JsYW5rcyA/CisJCQkJUkVMQVRJVkVfREVERU5UX1dJVEhfQkxBTktfUEVOQUxUWSA6CisJCQkJUkVMQVRJVkVfREVERU5UX1BFTkFMVFk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc2NvcmVfY21wKHN0cnVjdCBzcGxpdF9zY29yZSAqczEsIHN0cnVjdCBzcGxpdF9zY29yZSAqczIpCit7CisJLyogLTEgaWYgczEuZWZmZWN0aXZlX2luZGVudCA8IHMyLT5lZmZlY3RpdmVfaW5kZW50LCBldGMuICovCisJaW50IGNtcF9pbmRlbnRzID0gKChzMS0+ZWZmZWN0aXZlX2luZGVudCA+IHMyLT5lZmZlY3RpdmVfaW5kZW50KSAtCisJCQkgICAoczEtPmVmZmVjdGl2ZV9pbmRlbnQgPCBzMi0+ZWZmZWN0aXZlX2luZGVudCkpOworCisJcmV0dXJuIElOREVOVF9XRUlHSFQgKiBjbXBfaW5kZW50cyArIChzMS0+cGVuYWx0eSAtIHMyLT5wZW5hbHR5KTsKK30KKworLyoKKyAqIFJlcHJlc2VudCBhIGdyb3VwIG9mIGNoYW5nZWQgbGluZXMgaW4gYW4geGRmaWxlX3QgKGkuZS4sIGEgY29udGlndW91cyBncm91cAorICogb2YgbGluZXMgdGhhdCB3YXMgaW5zZXJ0ZWQgb3IgZGVsZXRlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZlcnNpb24gb2YgdGhlCisgKiBmaWxlKS4gV2UgY29uc2lkZXIgdGhlcmUgdG8gYmUgc3VjaCBhIGdyb3VwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIGF0CisgKiB0aGUgZW5kIG9mIHRoZSBmaWxlLCBhbmQgYmV0d2VlbiBhbnkgdHdvIHVuY2hhbmdlZCBsaW5lcywgdGhvdWdoIG1vc3Qgc3VjaAorICogZ3JvdXBzIHdpbGwgdXN1YWxseSBiZSBlbXB0eS4KKyAqCisgKiBJZiB0aGUgZmlyc3QgbGluZSBpbiBhIGdyb3VwIGlzIGVxdWFsIHRvIHRoZSBsaW5lIGZvbGxvd2luZyB0aGUgZ3JvdXAsIHRoZW4KKyAqIHRoZSBncm91cCBjYW4gYmUgc2xpZCBkb3duLiBTaW1pbGFybHksIGlmIHRoZSBsYXN0IGxpbmUgaW4gYSBncm91cCBpcyBlcXVhbAorICogdG8gdGhlIGxpbmUgcHJlY2VkaW5nIHRoZSBncm91cCwgdGhlbiB0aGUgZ3JvdXAgY2FuIGJlIHNsaWQgdXAuIFNlZQorICogZ3JvdXBfc2xpZGVfZG93bigpIGFuZCBncm91cF9zbGlkZV91cCgpLgorICoKKyAqIE5vdGUgdGhhdCBsb29wcyB0aGF0IGFyZSB0ZXN0aW5nIGZvciBjaGFuZ2VkIGxpbmVzIGluIHhkZi0+cmNoZyBkbyBub3QgbmVlZAorICogaW5kZXggYm91bmRpbmcgc2luY2UgdGhlIGFycmF5IGlzIHByZXBhcmVkIHdpdGggYSB6ZXJvIGF0IHBvc2l0aW9uIC0xIGFuZCBOLgorICovCitzdHJ1Y3QgeGRsZ3JvdXAgeworCS8qCisJICogVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFuZ2VkIGxpbmUgaW4gdGhlIGdyb3VwLCBvciB0aGUgaW5kZXggb2YKKwkgKiB0aGUgdW5jaGFuZ2VkIGxpbmUgYWJvdmUgd2hpY2ggdGhlIChlbXB0eSkgZ3JvdXAgaXMgbG9jYXRlZC4KKwkgKi8KKwlsb25nIHN0YXJ0OworCisJLyoKKwkgKiBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IHVuY2hhbmdlZCBsaW5lIGFmdGVyIHRoZSBncm91cC4gRm9yIGFuIGVtcHR5CisJICogZ3JvdXAsIGVuZCBpcyBlcXVhbCB0byBzdGFydC4KKwkgKi8KKwlsb25nIGVuZDsKK307CisKKy8qCisgKiBJbml0aWFsaXplIGcgdG8gcG9pbnQgYXQgdGhlIGZpcnN0IGdyb3VwIGluIHhkZi4KKyAqLworc3RhdGljIHZvaWQgZ3JvdXBfaW5pdCh4ZGZpbGVfdCAqeGRmLCBzdHJ1Y3QgeGRsZ3JvdXAgKmcpCit7CisJZy0+c3RhcnQgPSBnLT5lbmQgPSAwOworCXdoaWxlICh4ZGYtPnJjaGdbZy0+ZW5kXSkKKwkJZy0+ZW5kKys7Cit9CisKKy8qCisgKiBNb3ZlIGcgdG8gZGVzY3JpYmUgdGhlIG5leHQgKHBvc3NpYmx5IGVtcHR5KSBncm91cCBpbiB4ZGYgYW5kIHJldHVybiAwLiBJZiBnCisgKiBpcyBhbHJlYWR5IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGRvIG5vdGhpbmcgYW5kIHJldHVybiAtMS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ3JvdXBfbmV4dCh4ZGZpbGVfdCAqeGRmLCBzdHJ1Y3QgeGRsZ3JvdXAgKmcpCit7CisJaWYgKGctPmVuZCA9PSB4ZGYtPm5yZWMpCisJCXJldHVybiAtMTsKKworCWctPnN0YXJ0ID0gZy0+ZW5kICsgMTsKKwlmb3IgKGctPmVuZCA9IGctPnN0YXJ0OyB4ZGYtPnJjaGdbZy0+ZW5kXTsgZy0+ZW5kKyspCisJCTsKKworCXJldHVybiAwOworfQorCisvKgorICogTW92ZSBnIHRvIGRlc2NyaWJlIHRoZSBwcmV2aW91cyAocG9zc2libHkgZW1wdHkpIGdyb3VwIGluIHhkZiBhbmQgcmV0dXJuIDAuCisgKiBJZiBnIGlzIGFscmVhZHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgZG8gbm90aGluZyBhbmQgcmV0dXJuIC0xLgorICovCitzdGF0aWMgaW5saW5lIGludCBncm91cF9wcmV2aW91cyh4ZGZpbGVfdCAqeGRmLCBzdHJ1Y3QgeGRsZ3JvdXAgKmcpCit7CisJaWYgKGctPnN0YXJ0ID09IDApCisJCXJldHVybiAtMTsKKworCWctPmVuZCA9IGctPnN0YXJ0IC0gMTsKKwlmb3IgKGctPnN0YXJ0ID0gZy0+ZW5kOyB4ZGYtPnJjaGdbZy0+c3RhcnQgLSAxXTsgZy0+c3RhcnQtLSkKKwkJOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJZiBnIGNhbiBiZSBzbGlkIHRvd2FyZCB0aGUgZW5kIG9mIHRoZSBmaWxlLCBkbyBzbywgYW5kIGlmIGl0IGJ1bXBzIGludG8gYQorICogZm9sbG93aW5nIGdyb3VwLCBleHBhbmQgdGhpcyBncm91cCB0byBpbmNsdWRlIGl0LiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xCisgKiBpZiBnIGNhbm5vdCBiZSBzbGlkIGRvd24uCisgKi8KK3N0YXRpYyBpbnQgZ3JvdXBfc2xpZGVfZG93bih4ZGZpbGVfdCAqeGRmLCBzdHJ1Y3QgeGRsZ3JvdXAgKmcsIGxvbmcgZmxhZ3MpCit7CisJaWYgKGctPmVuZCA8IHhkZi0+bnJlYyAmJgorCSAgICByZWNzX21hdGNoKHhkZi0+cmVjc1tnLT5zdGFydF0sIHhkZi0+cmVjc1tnLT5lbmRdLCBmbGFncykpIHsKKwkJeGRmLT5yY2hnW2ctPnN0YXJ0KytdID0gMDsKKwkJeGRmLT5yY2hnW2ctPmVuZCsrXSA9IDE7CisKKwkJd2hpbGUgKHhkZi0+cmNoZ1tnLT5lbmRdKQorCQkJZy0+ZW5kKys7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC0xOworCX0KK30KKworLyoKKyAqIElmIGcgY2FuIGJlIHNsaWQgdG93YXJkIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIGRvIHNvLCBhbmQgaWYgaXQgYnVtcHMKKyAqIGludG8gYSBwcmV2aW91cyBncm91cCwgZXhwYW5kIHRoaXMgZ3JvdXAgdG8gaW5jbHVkZSBpdC4gUmV0dXJuIDAgb24gc3VjY2VzcworICogb3IgLTEgaWYgZyBjYW5ub3QgYmUgc2xpZCB1cC4KKyAqLworc3RhdGljIGludCBncm91cF9zbGlkZV91cCh4ZGZpbGVfdCAqeGRmLCBzdHJ1Y3QgeGRsZ3JvdXAgKmcsIGxvbmcgZmxhZ3MpCit7CisJaWYgKGctPnN0YXJ0ID4gMCAmJgorCSAgICByZWNzX21hdGNoKHhkZi0+cmVjc1tnLT5zdGFydCAtIDFdLCB4ZGYtPnJlY3NbZy0+ZW5kIC0gMV0sIGZsYWdzKSkgeworCQl4ZGYtPnJjaGdbLS1nLT5zdGFydF0gPSAxOworCQl4ZGYtPnJjaGdbLS1nLT5lbmRdID0gMDsKKworCQl3aGlsZSAoeGRmLT5yY2hnW2ctPnN0YXJ0IC0gMV0pCisJCQlnLT5zdGFydC0tOworCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhkbF9idWcoY29uc3QgY2hhciAqbXNnKQoreworCWZwcmludGYoc3RkZXJyLCAiQlVHOiAlc1xuIiwgbXNnKTsKKwlleGl0KDEpOworfQorCisvKgorICogTW92ZSBiYWNrIGFuZCBmb3J3YXJkIGNoYW5nZSBncm91cHMgZm9yIGEgY29uc2lzdGVudCBhbmQgcHJldHR5IGRpZmYgb3V0cHV0LgorICogVGhpcyBhbHNvIGhlbHBzIGluIGZpbmRpbmcgam9pbmFibGUgY2hhbmdlIGdyb3VwcyBhbmQgcmVkdWNpbmcgdGhlIGRpZmYKKyAqIHNpemUuCisgKi8KK2ludCB4ZGxfY2hhbmdlX2NvbXBhY3QoeGRmaWxlX3QgKnhkZiwgeGRmaWxlX3QgKnhkZm8sIGxvbmcgZmxhZ3MpIHsKKwlzdHJ1Y3QgeGRsZ3JvdXAgZywgZ287CisJbG9uZyBlYXJsaWVzdF9lbmQsIGVuZF9tYXRjaGluZ19vdGhlcjsKKwlsb25nIGdyb3Vwc2l6ZTsKKworCWdyb3VwX2luaXQoeGRmLCAmZyk7CisJZ3JvdXBfaW5pdCh4ZGZvLCAmZ28pOworCisJd2hpbGUgKDEpIHsKKwkJLyoKKwkJICogSWYgdGhlIGdyb3VwIGlzIGVtcHR5IGluIHRoZSB0by1iZS1jb21wYWN0ZWQgZmlsZSwgc2tpcCBpdDoKKwkJICovCisJCWlmIChnLmVuZCA9PSBnLnN0YXJ0KQorCQkJZ290byBuZXh0OworCisJCS8qCisJCSAqIE5vdyBzaGlmdCB0aGUgY2hhbmdlIHVwIGFuZCB0aGVuIGRvd24gYXMgZmFyIGFzIHBvc3NpYmxlIGluCisJCSAqIGVhY2ggZGlyZWN0aW9uLiBJZiBpdCBidW1wcyBpbnRvIGFueSBvdGhlciBjaGFuZ2VzLCBtZXJnZQorCQkgKiB0aGVtLgorCQkgKi8KKwkJZG8geworCQkJZ3JvdXBzaXplID0gZy5lbmQgLSBnLnN0YXJ0OworCisJCQkvKgorCQkJICogS2VlcCB0cmFjayBvZiB0aGUgbGFzdCAiZW5kIiBpbmRleCB0aGF0IGNhdXNlcyB0aGlzCisJCQkgKiBncm91cCB0byBhbGlnbiB3aXRoIGEgZ3JvdXAgb2YgY2hhbmdlZCBsaW5lcyBpbiB0aGUKKwkJCSAqIG90aGVyIGZpbGUuIC0xIGluZGljYXRlcyB0aGF0IHdlIGhhdmVuJ3QgZm91bmQgc3VjaAorCQkJICogYSBtYXRjaCB5ZXQ6CisJCQkgKi8KKwkJCWVuZF9tYXRjaGluZ19vdGhlciA9IC0xOworCisJCQkvKiBTaGlmdCB0aGUgZ3JvdXAgYmFja3dhcmQgYXMgbXVjaCBhcyBwb3NzaWJsZTogKi8KKwkJCXdoaWxlICghZ3JvdXBfc2xpZGVfdXAoeGRmLCAmZywgZmxhZ3MpKQorCQkJCWlmIChncm91cF9wcmV2aW91cyh4ZGZvLCAmZ28pKQorCQkJCQl4ZGxfYnVnKCJncm91cCBzeW5jIGJyb2tlbiBzbGlkaW5nIHVwIik7CisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRoaXMgaGlnaGVzdCB0aGF0IHRoaXMgZ3JvdXAgY2FuIGJlIHNoaWZ0ZWQuCisJCQkgKiBSZWNvcmQgaXRzIGVuZCBpbmRleDoKKwkJCSAqLworCQkJZWFybGllc3RfZW5kID0gZy5lbmQ7CisKKwkJCWlmIChnby5lbmQgPiBnby5zdGFydCkKKwkJCQllbmRfbWF0Y2hpbmdfb3RoZXIgPSBnLmVuZDsKKworCQkJLyogTm93IHNoaWZ0IHRoZSBncm91cCBmb3J3YXJkIGFzIGZhciBhcyBwb3NzaWJsZTogKi8KKwkJCXdoaWxlICgxKSB7CisJCQkJaWYgKGdyb3VwX3NsaWRlX2Rvd24oeGRmLCAmZywgZmxhZ3MpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoZ3JvdXBfbmV4dCh4ZGZvLCAmZ28pKQorCQkJCQl4ZGxfYnVnKCJncm91cCBzeW5jIGJyb2tlbiBzbGlkaW5nIGRvd24iKTsKKworCQkJCWlmIChnby5lbmQgPiBnby5zdGFydCkKKwkJCQkJZW5kX21hdGNoaW5nX290aGVyID0gZy5lbmQ7CisJCQl9CisJCX0gd2hpbGUgKGdyb3Vwc2l6ZSAhPSBnLmVuZCAtIGcuc3RhcnQpOworCisJCS8qCisJCSAqIElmIHRoZSBncm91cCBjYW4gYmUgc2hpZnRlZCwgdGhlbiB3ZSBjYW4gcG9zc2libHkgdXNlIHRoaXMKKwkJICogZnJlZWRvbSB0byBwcm9kdWNlIGEgbW9yZSBpbnR1aXRpdmUgZGlmZi4KKwkJICoKKwkJICogVGhlIGdyb3VwIGlzIGN1cnJlbnRseSBzaGlmdGVkIGFzIGZhciBkb3duIGFzIHBvc3NpYmxlLCBzbworCQkgKiB0aGUgaGV1cmlzdGljcyBiZWxvdyBvbmx5IGhhdmUgdG8gaGFuZGxlIHVwd2FyZHMgc2hpZnRzLgorCQkgKi8KKworCQlpZiAoZy5lbmQgPT0gZWFybGllc3RfZW5kKSB7CisJCQkvKiBubyBzaGlmdGluZyB3YXMgcG9zc2libGUgKi8KKwkJfSBlbHNlIGlmIChlbmRfbWF0Y2hpbmdfb3RoZXIgIT0gLTEpIHsKKwkJCS8qCisJCQkgKiBNb3ZlIHRoZSBwb3NzaWJseSBtZXJnZWQgZ3JvdXAgb2YgY2hhbmdlcyBiYWNrIHRvCisJCQkgKiBsaW5lIHVwIHdpdGggdGhlIGxhc3QgZ3JvdXAgb2YgY2hhbmdlcyBmcm9tIHRoZQorCQkJICogb3RoZXIgZmlsZSB0aGF0IGl0IGNhbiBhbGlnbiB3aXRoLgorCQkJICovCisJCQl3aGlsZSAoZ28uZW5kID09IGdvLnN0YXJ0KSB7CisJCQkJaWYgKGdyb3VwX3NsaWRlX3VwKHhkZiwgJmcsIGZsYWdzKSkKKwkJCQkJeGRsX2J1ZygibWF0Y2ggZGlzYXBwZWFyZWQiKTsKKwkJCQlpZiAoZ3JvdXBfcHJldmlvdXMoeGRmbywgJmdvKSkKKwkJCQkJeGRsX2J1ZygiZ3JvdXAgc3luYyBicm9rZW4gc2xpZGluZyB0byBtYXRjaCIpOworCQkJfQorCQl9IGVsc2UgaWYgKGZsYWdzICYgWERGX0lOREVOVF9IRVVSSVNUSUMpIHsKKwkJCS8qCisJCQkgKiBJbmRlbnQgaGV1cmlzdGljOiBhIGdyb3VwIG9mIHB1cmUgYWRkL2RlbGV0ZSBsaW5lcworCQkJICogaW1wbGllcyB0d28gc3BsaXRzLCBvbmUgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZQorCQkJICogImJlZm9yZSIgY29udGV4dCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBncm91cCwgYW5kCisJCQkgKiBhbm90aGVyIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgZ3JvdXAgYW5kIHRoZQorCQkJICogYmVnaW5uaW5nIG9mIHRoZSAiYWZ0ZXIiIGNvbnRleHQuIFNvbWUgc3BsaXRzIGFyZQorCQkJICogYWVzdGhldGljYWxseSBiZXR0ZXIgYW5kIHNvbWUgYXJlIHdvcnNlLiBXZSBjb21wdXRlCisJCQkgKiBhIGJhZG5lc3MgInNjb3JlIiBmb3IgZWFjaCBzcGxpdCwgYW5kIGFkZCB0aGUgc2NvcmVzCisJCQkgKiBmb3IgdGhlIHR3byBzcGxpdHMgdG8gZGVmaW5lIGEgInNjb3JlIiBmb3IgZWFjaAorCQkJICogcG9zaXRpb24gdGhhdCB0aGUgZ3JvdXAgY2FuIGJlIHNoaWZ0ZWQgdG8uIFRoZW4gd2UKKwkJCSAqIHBpY2sgdGhlIHNoaWZ0IHdpdGggdGhlIGxvd2VzdCBzY29yZS4KKwkJCSAqLworCQkJbG9uZyBzaGlmdCwgYmVzdF9zaGlmdCA9IC0xOworCQkJc3RydWN0IHNwbGl0X3Njb3JlIGJlc3Rfc2NvcmU7CisKKwkJCXNoaWZ0ID0gZWFybGllc3RfZW5kOworCQkJaWYgKGcuZW5kIC0gZ3JvdXBzaXplIC0gMSA+IHNoaWZ0KQorCQkJCXNoaWZ0ID0gZy5lbmQgLSBncm91cHNpemUgLSAxOworCQkJaWYgKGcuZW5kIC0gSU5ERU5UX0hFVVJJU1RJQ19NQVhfU0xJRElORyA+IHNoaWZ0KQorCQkJCXNoaWZ0ID0gZy5lbmQgLSBJTkRFTlRfSEVVUklTVElDX01BWF9TTElESU5HOworCQkJZm9yICg7IHNoaWZ0IDw9IGcuZW5kOyBzaGlmdCsrKSB7CisJCQkJc3RydWN0IHNwbGl0X21lYXN1cmVtZW50IG07CisJCQkJc3RydWN0IHNwbGl0X3Njb3JlIHNjb3JlID0gezAsIDB9OworCisJCQkJbWVhc3VyZV9zcGxpdCh4ZGYsIHNoaWZ0LCAmbSk7CisJCQkJc2NvcmVfYWRkX3NwbGl0KCZtLCAmc2NvcmUpOworCQkJCW1lYXN1cmVfc3BsaXQoeGRmLCBzaGlmdCAtIGdyb3Vwc2l6ZSwgJm0pOworCQkJCXNjb3JlX2FkZF9zcGxpdCgmbSwgJnNjb3JlKTsKKwkJCQlpZiAoYmVzdF9zaGlmdCA9PSAtMSB8fAorCQkJCSAgICBzY29yZV9jbXAoJnNjb3JlLCAmYmVzdF9zY29yZSkgPD0gMCkgeworCQkJCQliZXN0X3Njb3JlLmVmZmVjdGl2ZV9pbmRlbnQgPSBzY29yZS5lZmZlY3RpdmVfaW5kZW50OworCQkJCQliZXN0X3Njb3JlLnBlbmFsdHkgPSBzY29yZS5wZW5hbHR5OworCQkJCQliZXN0X3NoaWZ0ID0gc2hpZnQ7CisJCQkJfQorCQkJfQorCisJCQl3aGlsZSAoZy5lbmQgPiBiZXN0X3NoaWZ0KSB7CisJCQkJaWYgKGdyb3VwX3NsaWRlX3VwKHhkZiwgJmcsIGZsYWdzKSkKKwkJCQkJeGRsX2J1ZygiYmVzdCBzaGlmdCB1bnJlYWNoZWQiKTsKKwkJCQlpZiAoZ3JvdXBfcHJldmlvdXMoeGRmbywgJmdvKSkKKwkJCQkJeGRsX2J1ZygiZ3JvdXAgc3luYyBicm9rZW4gc2xpZGluZyB0byBibGFuayBsaW5lIik7CisJCQl9CisJCX0KKworCW5leHQ6CisJCS8qIE1vdmUgcGFzdCB0aGUganVzdC1wcm9jZXNzZWQgZ3JvdXA6ICovCisJCWlmIChncm91cF9uZXh0KHhkZiwgJmcpKQorCQkJYnJlYWs7CisJCWlmIChncm91cF9uZXh0KHhkZm8sICZnbykpCisJCQl4ZGxfYnVnKCJncm91cCBzeW5jIGJyb2tlbiBtb3ZpbmcgdG8gbmV4dCBncm91cCIpOworCX0KKworCWlmICghZ3JvdXBfbmV4dCh4ZGZvLCAmZ28pKQorCQl4ZGxfYnVnKCJncm91cCBzeW5jIGJyb2tlbiBhdCBlbmQgb2YgZmlsZSIpOworCisJcmV0dXJuIDA7Cit9CisKKworaW50IHhkbF9idWlsZF9zY3JpcHQoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICoqeHNjcikgeworCXhkY2hhbmdlX3QgKmNzY3IgPSBOVUxMLCAqeGNoOworCWNoYXIgKnJjaGcxID0geGUtPnhkZjEucmNoZywgKnJjaGcyID0geGUtPnhkZjIucmNoZzsKKwlsb25nIGkxLCBpMiwgbDEsIGwyOworCisJLyoKKwkgKiBUcml2aWFsLiBDb2xsZWN0cyAiZ3JvdXBzIiBvZiBjaGFuZ2VzIGFuZCBjcmVhdGVzIGFuIGVkaXQgc2NyaXB0LgorCSAqLworCWZvciAoaTEgPSB4ZS0+eGRmMS5ucmVjLCBpMiA9IHhlLT54ZGYyLm5yZWM7IGkxID49IDAgfHwgaTIgPj0gMDsgaTEtLSwgaTItLSkKKwkJaWYgKHJjaGcxW2kxIC0gMV0gfHwgcmNoZzJbaTIgLSAxXSkgeworCQkJZm9yIChsMSA9IGkxOyByY2hnMVtpMSAtIDFdOyBpMS0tKTsKKwkJCWZvciAobDIgPSBpMjsgcmNoZzJbaTIgLSAxXTsgaTItLSk7CisKKwkJCWlmICghKHhjaCA9IHhkbF9hZGRfY2hhbmdlKGNzY3IsIGkxLCBpMiwgbDEgLSBpMSwgbDIgLSBpMikpKSB7CisJCQkJeGRsX2ZyZWVfc2NyaXB0KGNzY3IpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWNzY3IgPSB4Y2g7CisJCX0KKworCSp4c2NyID0gY3NjcjsKKworCXJldHVybiAwOworfQorCisKK3ZvaWQgeGRsX2ZyZWVfc2NyaXB0KHhkY2hhbmdlX3QgKnhzY3IpIHsKKwl4ZGNoYW5nZV90ICp4Y2g7CisKKwl3aGlsZSAoKHhjaCA9IHhzY3IpICE9IE5VTEwpIHsKKwkJeHNjciA9IHhzY3ItPm5leHQ7CisJCXhkbF9mcmVlKHhjaCk7CisJfQorfQorCitzdGF0aWMgaW50IHhkbF9jYWxsX2h1bmtfZnVuYyh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJCSAgICAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpCit7CisJeGRjaGFuZ2VfdCAqeGNoLCAqeGNoZTsKKworCWZvciAoeGNoID0geHNjcjsgeGNoOyB4Y2ggPSB4Y2hlLT5uZXh0KSB7CisJCXhjaGUgPSB4ZGxfZ2V0X2h1bmsoJnhjaCwgeGVjZmcpOworCQlpZiAoIXhjaCkKKwkJCWJyZWFrOworCQlpZiAoeGVjZmctPmh1bmtfZnVuYyh4Y2gtPmkxLCB4Y2hlLT5pMSArIHhjaGUtPmNoZzEgLSB4Y2gtPmkxLAorCQkJCSAgICAgeGNoLT5pMiwgeGNoZS0+aTIgKyB4Y2hlLT5jaGcyIC0geGNoLT5pMiwKKwkJCQkgICAgIGVjYi0+cHJpdikgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgeGRsX21hcmtfaWdub3JhYmxlKHhkY2hhbmdlX3QgKnhzY3IsIHhkZmVudl90ICp4ZSwgbG9uZyBmbGFncykKK3sKKwl4ZGNoYW5nZV90ICp4Y2g7CisKKwlmb3IgKHhjaCA9IHhzY3I7IHhjaDsgeGNoID0geGNoLT5uZXh0KSB7CisJCWludCBpZ25vcmUgPSAxOworCQl4cmVjb3JkX3QgKipyZWM7CisJCWxvbmcgaTsKKworCQlyZWMgPSAmeGUtPnhkZjEucmVjc1t4Y2gtPmkxXTsKKwkJZm9yIChpID0gMDsgaSA8IHhjaC0+Y2hnMSAmJiBpZ25vcmU7IGkrKykKKwkJCWlnbm9yZSA9IHhkbF9ibGFua2xpbmUocmVjW2ldLT5wdHIsIHJlY1tpXS0+c2l6ZSwgZmxhZ3MpOworCisJCXJlYyA9ICZ4ZS0+eGRmMi5yZWNzW3hjaC0+aTJdOworCQlmb3IgKGkgPSAwOyBpIDwgeGNoLT5jaGcyICYmIGlnbm9yZTsgaSsrKQorCQkJaWdub3JlID0geGRsX2JsYW5rbGluZShyZWNbaV0tPnB0ciwgcmVjW2ldLT5zaXplLCBmbGFncyk7CisKKwkJeGNoLT5pZ25vcmUgPSBpZ25vcmU7CisJfQorfQorCitpbnQgeGRsX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJICAgICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCB4ZGVtaXRjYl90ICplY2IpIHsKKwl4ZGNoYW5nZV90ICp4c2NyOworCXhkZmVudl90IHhlOworCWVtaXRfZnVuY190IGVmID0geGVjZmctPmh1bmtfZnVuYyA/IHhkbF9jYWxsX2h1bmtfZnVuYyA6IHhkbF9lbWl0X2RpZmY7CisKKwlpZiAoeGRsX2RvX2RpZmYobWYxLCBtZjIsIHhwcCwgJnhlKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCWlmICh4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlLnhkZjEsICZ4ZS54ZGYyLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZS54ZGYyLCAmeGUueGRmMSwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9idWlsZF9zY3JpcHQoJnhlLCAmeHNjcikgPCAwKSB7CisKKwkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhzY3IpIHsKKwkJaWYgKHhwcC0+ZmxhZ3MgJiBYREZfSUdOT1JFX0JMQU5LX0xJTkVTKQorCQkJeGRsX21hcmtfaWdub3JhYmxlKHhzY3IsICZ4ZSwgeHBwLT5mbGFncyk7CisKKwkJaWYgKGVmKCZ4ZSwgeHNjciwgZWNiLCB4ZWNmZykgPCAwKSB7CisKKwkJCXhkbF9mcmVlX3NjcmlwdCh4c2NyKTsKKwkJCXhkbF9mcmVlX2VudigmeGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXhkbF9mcmVlX3NjcmlwdCh4c2NyKTsKKwl9CisJeGRsX2ZyZWVfZW52KCZ4ZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmaS5oIGIveGRpZmYveGRpZmZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxYzdjOAotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hkaWZmaS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhESUZGSV9IKQorI2RlZmluZSBYRElGRklfSAorCisKK3R5cGVkZWYgc3RydWN0IHNfZGlmZmRhdGEgeworCWxvbmcgbnJlYzsKKwl1bnNpZ25lZCBsb25nIGNvbnN0ICpoYTsKKwlsb25nICpyaW5kZXg7CisJY2hhciAqcmNoZzsKK30gZGlmZmRhdGFfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGFsZ29lbnYgeworCWxvbmcgbXhjb3N0OworCWxvbmcgc25ha2VfY250OworCWxvbmcgaGV1cl9taW47Cit9IHhkYWxnb2Vudl90OworCit0eXBlZGVmIHN0cnVjdCBzX3hkY2hhbmdlIHsKKwlzdHJ1Y3Qgc194ZGNoYW5nZSAqbmV4dDsKKwlsb25nIGkxLCBpMjsKKwlsb25nIGNoZzEsIGNoZzI7CisJaW50IGlnbm9yZTsKK30geGRjaGFuZ2VfdDsKKworCisKK2ludCB4ZGxfcmVjc19jbXAoZGlmZmRhdGFfdCAqZGQxLCBsb25nIG9mZjEsIGxvbmcgbGltMSwKKwkJIGRpZmZkYXRhX3QgKmRkMiwgbG9uZyBvZmYyLCBsb25nIGxpbTIsCisJCSBsb25nICprdmRmLCBsb25nICprdmRiLCBpbnQgbmVlZF9taW4sIHhkYWxnb2Vudl90ICp4ZW52KTsKK2ludCB4ZGxfZG9fZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJeGRmZW52X3QgKnhlKTsKK2ludCB4ZGxfY2hhbmdlX2NvbXBhY3QoeGRmaWxlX3QgKnhkZiwgeGRmaWxlX3QgKnhkZm8sIGxvbmcgZmxhZ3MpOworaW50IHhkbF9idWlsZF9zY3JpcHQoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICoqeHNjcik7Cit2b2lkIHhkbF9mcmVlX3NjcmlwdCh4ZGNoYW5nZV90ICp4c2NyKTsKK2ludCB4ZGxfZW1pdF9kaWZmKHhkZmVudl90ICp4ZSwgeGRjaGFuZ2VfdCAqeHNjciwgeGRlbWl0Y2JfdCAqZWNiLAorCQkgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworaW50IHhkbF9kb19wYXRpZW5jZV9kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQl4ZGZlbnZfdCAqZW52KTsKK2ludCB4ZGxfZG9faGlzdG9ncmFtX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCXhkZmVudl90ICplbnYpOworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhESUZGSV9IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveGVtaXQuYyBiL3hkaWZmL3hlbWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3ZDZjNQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hlbWl0LmMKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMJRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaW5jbHVkZSAieGluY2x1ZGUuaCIKKworc3RhdGljIGxvbmcgeGRsX2dldF9yZWMoeGRmaWxlX3QgKnhkZiwgbG9uZyByaSwgY2hhciBjb25zdCAqKnJlYykgeworCisJKnJlYyA9IHhkZi0+cmVjc1tyaV0tPnB0cjsKKworCXJldHVybiB4ZGYtPnJlY3NbcmldLT5zaXplOworfQorCisKK3N0YXRpYyBpbnQgeGRsX2VtaXRfcmVjb3JkKHhkZmlsZV90ICp4ZGYsIGxvbmcgcmksIGNoYXIgY29uc3QgKnByZSwgeGRlbWl0Y2JfdCAqZWNiKSB7CisJbG9uZyBzaXplLCBwc2l6ZSA9IHN0cmxlbihwcmUpOworCWNoYXIgY29uc3QgKnJlYzsKKworCXNpemUgPSB4ZGxfZ2V0X3JlYyh4ZGYsIHJpLCAmcmVjKTsKKwlpZiAoeGRsX2VtaXRfZGlmZnJlYyhyZWMsIHNpemUsIHByZSwgcHNpemUsIGVjYikgPCAwKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBTdGFydGluZyBhdCB0aGUgcGFzc2VkIGNoYW5nZSBhdG9tLCBmaW5kIHRoZSBsYXRlc3QgY2hhbmdlIGF0b20gdG8gYmUgaW5jbHVkZWQKKyAqIGluc2lkZSB0aGUgZGlmZmVyZW50aWFsIGh1bmsgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbi4KKyAqIEFsc28gYWR2YW5jZSB4c2NyIGlmIHRoZSBmaXJzdCBjaGFuZ2VzIG11c3QgYmUgZGlzY2FyZGVkLgorICovCit4ZGNoYW5nZV90ICp4ZGxfZ2V0X2h1bmsoeGRjaGFuZ2VfdCAqKnhzY3IsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpCit7CisJeGRjaGFuZ2VfdCAqeGNoLCAqeGNocCwgKmx4Y2g7CisJbG9uZyBtYXhfY29tbW9uID0gMiAqIHhlY2ZnLT5jdHhsZW4gKyB4ZWNmZy0+aW50ZXJodW5rY3R4bGVuOworCWxvbmcgbWF4X2lnbm9yYWJsZSA9IHhlY2ZnLT5jdHhsZW47CisJdW5zaWduZWQgbG9uZyBpZ25vcmVkID0gMDsgLyogbnVtYmVyIG9mIGlnbm9yZWQgYmxhbmsgbGluZXMgKi8KKworCS8qIHJlbW92ZSBpZ25vcmFibGUgY2hhbmdlcyB0aGF0IGFyZSB0b28gZmFyIGJlZm9yZSBvdGhlciBjaGFuZ2VzICovCisJZm9yICh4Y2hwID0gKnhzY3I7IHhjaHAgJiYgeGNocC0+aWdub3JlOyB4Y2hwID0geGNocC0+bmV4dCkgeworCQl4Y2ggPSB4Y2hwLT5uZXh0OworCisJCWlmICh4Y2ggPT0gTlVMTCB8fAorCQkgICAgeGNoLT5pMSAtICh4Y2hwLT5pMSArIHhjaHAtPmNoZzEpID49IG1heF9pZ25vcmFibGUpCisJCQkqeHNjciA9IHhjaDsKKwl9CisKKwlpZiAoKnhzY3IgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlseGNoID0gKnhzY3I7CisKKwlmb3IgKHhjaHAgPSAqeHNjciwgeGNoID0geGNocC0+bmV4dDsgeGNoOyB4Y2hwID0geGNoLCB4Y2ggPSB4Y2gtPm5leHQpIHsKKwkJbG9uZyBkaXN0YW5jZSA9IHhjaC0+aTEgLSAoeGNocC0+aTEgKyB4Y2hwLT5jaGcxKTsKKwkJaWYgKGRpc3RhbmNlID4gbWF4X2NvbW1vbikKKwkJCWJyZWFrOworCisJCWlmIChkaXN0YW5jZSA8IG1heF9pZ25vcmFibGUgJiYgKCF4Y2gtPmlnbm9yZSB8fCBseGNoID09IHhjaHApKSB7CisJCQlseGNoID0geGNoOworCQkJaWdub3JlZCA9IDA7CisJCX0gZWxzZSBpZiAoZGlzdGFuY2UgPCBtYXhfaWdub3JhYmxlICYmIHhjaC0+aWdub3JlKSB7CisJCQlpZ25vcmVkICs9IHhjaC0+Y2hnMjsKKwkJfSBlbHNlIGlmIChseGNoICE9IHhjaHAgJiYKKwkJCSAgIHhjaC0+aTEgKyBpZ25vcmVkIC0gKGx4Y2gtPmkxICsgbHhjaC0+Y2hnMSkgPiBtYXhfY29tbW9uKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICgheGNoLT5pZ25vcmUpIHsKKwkJCWx4Y2ggPSB4Y2g7CisJCQlpZ25vcmVkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlnbm9yZWQgKz0geGNoLT5jaGcyOworCQl9CisJfQorCisJcmV0dXJuIGx4Y2g7Cit9CisKKworc3RhdGljIGxvbmcgZGVmX2ZmKGNvbnN0IGNoYXIgKnJlYywgbG9uZyBsZW4sIGNoYXIgKmJ1ZiwgbG9uZyBzeiwgdm9pZCAqcHJpdikKK3sKKwlpZiAobGVuID4gMCAmJgorCQkJKGlzYWxwaGEoKHVuc2lnbmVkIGNoYXIpKnJlYykgfHwgLyogaWRlbnRpZmllcj8gKi8KKwkJCSAqcmVjID09ICdfJyB8fCAvKiBhbHNvIGlkZW50aWZpZXI/ICovCisJCQkgKnJlYyA9PSAnJCcpKSB7IC8qIGlkZW50aWZpZXJzIGZyb20gVk1TIGFuZCBvdGhlciBlc290ZXJpY28gKi8KKwkJaWYgKGxlbiA+IHN6KQorCQkJbGVuID0gc3o7CisJCXdoaWxlICgwIDwgbGVuICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpcmVjW2xlbiAtIDFdKSkKKwkJCWxlbi0tOworCQltZW1jcHkoYnVmLCByZWMsIGxlbik7CisJCXJldHVybiBsZW47CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGxvbmcgbWF0Y2hfZnVuY19yZWMoeGRmaWxlX3QgKnhkZiwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZywgbG9uZyByaSwKKwkJCSAgIGNoYXIgKmJ1ZiwgbG9uZyBzeikKK3sKKwljb25zdCBjaGFyICpyZWM7CisJbG9uZyBsZW4gPSB4ZGxfZ2V0X3JlYyh4ZGYsIHJpLCAmcmVjKTsKKwlpZiAoIXhlY2ZnLT5maW5kX2Z1bmMpCisJCXJldHVybiBkZWZfZmYocmVjLCBsZW4sIGJ1Ziwgc3osIHhlY2ZnLT5maW5kX2Z1bmNfcHJpdik7CisJcmV0dXJuIHhlY2ZnLT5maW5kX2Z1bmMocmVjLCBsZW4sIGJ1Ziwgc3osIHhlY2ZnLT5maW5kX2Z1bmNfcHJpdik7Cit9CisKK3N0YXRpYyBpbnQgaXNfZnVuY19yZWMoeGRmaWxlX3QgKnhkZiwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZywgbG9uZyByaSkKK3sKKwljaGFyIGR1bW15WzFdOworCXJldHVybiBtYXRjaF9mdW5jX3JlYyh4ZGYsIHhlY2ZnLCByaSwgZHVtbXksIHNpemVvZihkdW1teSkpID49IDA7Cit9CisKK3N0cnVjdCBmdW5jX2xpbmUgeworCWxvbmcgbGVuOworCWNoYXIgYnVmWzgwXTsKK307CisKK3N0YXRpYyBsb25nIGdldF9mdW5jX2xpbmUoeGRmZW52X3QgKnhlLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLAorCQkJICBzdHJ1Y3QgZnVuY19saW5lICpmdW5jX2xpbmUsIGxvbmcgc3RhcnQsIGxvbmcgbGltaXQpCit7CisJbG9uZyBsLCBzaXplLCBzdGVwID0gKHN0YXJ0ID4gbGltaXQpID8gLTEgOiAxOworCWNoYXIgKmJ1ZiwgZHVtbXlbMV07CisKKwlidWYgPSBmdW5jX2xpbmUgPyBmdW5jX2xpbmUtPmJ1ZiA6IGR1bW15OworCXNpemUgPSBmdW5jX2xpbmUgPyBzaXplb2YoZnVuY19saW5lLT5idWYpIDogc2l6ZW9mKGR1bW15KTsKKworCWZvciAobCA9IHN0YXJ0OyBsICE9IGxpbWl0ICYmIDAgPD0gbCAmJiBsIDwgeGUtPnhkZjEubnJlYzsgbCArPSBzdGVwKSB7CisJCWxvbmcgbGVuID0gbWF0Y2hfZnVuY19yZWMoJnhlLT54ZGYxLCB4ZWNmZywgbCwgYnVmLCBzaXplKTsKKwkJaWYgKGxlbiA+PSAwKSB7CisJCQlpZiAoZnVuY19saW5lKQorCQkJCWZ1bmNfbGluZS0+bGVuID0gbGVuOworCQkJcmV0dXJuIGw7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGlzX2VtcHR5X3JlYyh4ZGZpbGVfdCAqeGRmLCBsb25nIHJpKQoreworCWNvbnN0IGNoYXIgKnJlYzsKKwlsb25nIGxlbiA9IHhkbF9nZXRfcmVjKHhkZiwgcmksICZyZWMpOworCisJd2hpbGUgKGxlbiA+IDAgJiYgWERMX0lTU1BBQ0UoKnJlYykpIHsKKwkJcmVjKys7CisJCWxlbi0tOworCX0KKwlyZXR1cm4gIWxlbjsKK30KKworaW50IHhkbF9lbWl0X2RpZmYoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCisJCSAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZykgeworCWxvbmcgczEsIHMyLCBlMSwgZTIsIGxjdHg7CisJeGRjaGFuZ2VfdCAqeGNoLCAqeGNoZTsKKwlsb25nIGZ1bmNsaW5lcHJldiA9IC0xOworCXN0cnVjdCBmdW5jX2xpbmUgZnVuY19saW5lID0geyAwIH07CisKKwlmb3IgKHhjaCA9IHhzY3I7IHhjaDsgeGNoID0geGNoZS0+bmV4dCkgeworCQl4ZGNoYW5nZV90ICp4Y2hwID0geGNoOworCQl4Y2hlID0geGRsX2dldF9odW5rKCZ4Y2gsIHhlY2ZnKTsKKwkJaWYgKCF4Y2gpCisJCQlicmVhazsKKworcHJlX2NvbnRleHRfY2FsY3VsYXRpb246CisJCXMxID0gWERMX01BWCh4Y2gtPmkxIC0geGVjZmctPmN0eGxlbiwgMCk7CisJCXMyID0gWERMX01BWCh4Y2gtPmkyIC0geGVjZmctPmN0eGxlbiwgMCk7CisKKwkJaWYgKHhlY2ZnLT5mbGFncyAmIFhETF9FTUlUX0ZVTkNDT05URVhUKSB7CisJCQlsb25nIGZzMSwgaTEgPSB4Y2gtPmkxOworCisJCQkvKiBBcHBlbmRlZCBjaHVuaz8gKi8KKwkJCWlmIChpMSA+PSB4ZS0+eGRmMS5ucmVjKSB7CisJCQkJbG9uZyBpMiA9IHhjaC0+aTI7CisKKwkJCQkvKgorCQkJCSAqIFdlIGRvbid0IG5lZWQgYWRkaXRpb25hbCBjb250ZXh0IGlmCisJCQkJICogYSB3aG9sZSBmdW5jdGlvbiB3YXMgYWRkZWQuCisJCQkJICovCisJCQkJd2hpbGUgKGkyIDwgeGUtPnhkZjIubnJlYykgeworCQkJCQlpZiAoaXNfZnVuY19yZWMoJnhlLT54ZGYyLCB4ZWNmZywgaTIpKQorCQkJCQkJZ290byBwb3N0X2NvbnRleHRfY2FsY3VsYXRpb247CisJCQkJCWkyKys7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBPdGhlcndpc2UgZ2V0IG1vcmUgY29udGV4dCBmcm9tIHRoZQorCQkJCSAqIHByZS1pbWFnZS4KKwkJCQkgKi8KKwkJCQlpMSA9IHhlLT54ZGYxLm5yZWMgLSAxOworCQkJfQorCisJCQlmczEgPSBnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgTlVMTCwgaTEsIC0xKTsKKwkJCXdoaWxlIChmczEgPiAwICYmICFpc19lbXB0eV9yZWMoJnhlLT54ZGYxLCBmczEgLSAxKSAmJgorCQkJICAgICAgICFpc19mdW5jX3JlYygmeGUtPnhkZjEsIHhlY2ZnLCBmczEgLSAxKSkKKwkJCQlmczEtLTsKKwkJCWlmIChmczEgPCAwKQorCQkJCWZzMSA9IDA7CisJCQlpZiAoZnMxIDwgczEpIHsKKwkJCQlzMiA9IFhETF9NQVgoczIgLSAoczEgLSBmczEpLCAwKTsKKwkJCQlzMSA9IGZzMTsKKworCQkJCS8qCisJCQkJICogRGlkIHdlIGV4dGVuZCBjb250ZXh0IHVwd2FyZHMgaW50byBhbgorCQkJCSAqIGlnbm9yZWQgY2hhbmdlPworCQkJCSAqLworCQkJCXdoaWxlICh4Y2hwICE9IHhjaCAmJgorCQkJCSAgICAgICB4Y2hwLT5pMSArIHhjaHAtPmNoZzEgPD0gczEgJiYKKwkJCQkgICAgICAgeGNocC0+aTIgKyB4Y2hwLT5jaGcyIDw9IHMyKQorCQkJCQl4Y2hwID0geGNocC0+bmV4dDsKKworCQkJCS8qIElmIHNvLCBzaG93IGl0IGFmdGVyIGFsbC4gKi8KKwkJCQlpZiAoeGNocCAhPSB4Y2gpIHsKKwkJCQkJeGNoID0geGNocDsKKwkJCQkJZ290byBwcmVfY29udGV4dF9jYWxjdWxhdGlvbjsKKwkJCQl9CisJCQl9CisJCX0KKworIHBvc3RfY29udGV4dF9jYWxjdWxhdGlvbjoKKwkJbGN0eCA9IHhlY2ZnLT5jdHhsZW47CisJCWxjdHggPSBYRExfTUlOKGxjdHgsIHhlLT54ZGYxLm5yZWMgLSAoeGNoZS0+aTEgKyB4Y2hlLT5jaGcxKSk7CisJCWxjdHggPSBYRExfTUlOKGxjdHgsIHhlLT54ZGYyLm5yZWMgLSAoeGNoZS0+aTIgKyB4Y2hlLT5jaGcyKSk7CisKKwkJZTEgPSB4Y2hlLT5pMSArIHhjaGUtPmNoZzEgKyBsY3R4OworCQllMiA9IHhjaGUtPmkyICsgeGNoZS0+Y2hnMiArIGxjdHg7CisKKwkJaWYgKHhlY2ZnLT5mbGFncyAmIFhETF9FTUlUX0ZVTkNDT05URVhUKSB7CisJCQlsb25nIGZlMSA9IGdldF9mdW5jX2xpbmUoeGUsIHhlY2ZnLCBOVUxMLAorCQkJCQkJIHhjaGUtPmkxICsgeGNoZS0+Y2hnMSwKKwkJCQkJCSB4ZS0+eGRmMS5ucmVjKTsKKwkJCXdoaWxlIChmZTEgPiAwICYmIGlzX2VtcHR5X3JlYygmeGUtPnhkZjEsIGZlMSAtIDEpKQorCQkJCWZlMS0tOworCQkJaWYgKGZlMSA8IDApCisJCQkJZmUxID0geGUtPnhkZjEubnJlYzsKKwkJCWlmIChmZTEgPiBlMSkgeworCQkJCWUyID0gWERMX01JTihlMiArIChmZTEgLSBlMSksIHhlLT54ZGYyLm5yZWMpOworCQkJCWUxID0gZmUxOworCQkJfQorCisJCQkvKgorCQkJICogT3ZlcmxhcCB3aXRoIG5leHQgY2hhbmdlPyAgVGhlbiBpbmNsdWRlIGl0CisJCQkgKiBpbiB0aGUgY3VycmVudCBodW5rIGFuZCBzdGFydCBvdmVyIHRvIGZpbmQKKwkJCSAqIGl0cyBuZXcgZW5kLgorCQkJICovCisJCQlpZiAoeGNoZS0+bmV4dCkgeworCQkJCWxvbmcgbCA9IFhETF9NSU4oeGNoZS0+bmV4dC0+aTEsCisJCQkJCQkgeGUtPnhkZjEubnJlYyAtIDEpOworCQkJCWlmIChsIC0geGVjZmctPmN0eGxlbiA8PSBlMSB8fAorCQkJCSAgICBnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgTlVMTCwgbCwgZTEpIDwgMCkgeworCQkJCQl4Y2hlID0geGNoZS0+bmV4dDsKKwkJCQkJZ290byBwb3N0X2NvbnRleHRfY2FsY3VsYXRpb247CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJICogRW1pdCBjdXJyZW50IGh1bmsgaGVhZGVyLgorCQkgKi8KKworCQlpZiAoeGVjZmctPmZsYWdzICYgWERMX0VNSVRfRlVOQ05BTUVTKSB7CisJCQlnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgJmZ1bmNfbGluZSwKKwkJCQkgICAgICBzMSAtIDEsIGZ1bmNsaW5lcHJldik7CisJCQlmdW5jbGluZXByZXYgPSBzMSAtIDE7CisJCX0KKwkJaWYgKHhkbF9lbWl0X2h1bmtfaGRyKHMxICsgMSwgZTEgLSBzMSwgczIgKyAxLCBlMiAtIHMyLAorCQkJCSAgICAgIGZ1bmNfbGluZS5idWYsIGZ1bmNfbGluZS5sZW4sIGVjYikgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCS8qCisJCSAqIEVtaXQgcHJlLWNvbnRleHQuCisJCSAqLworCQlmb3IgKDsgczIgPCB4Y2gtPmkyOyBzMisrKQorCQkJaWYgKHhkbF9lbWl0X3JlY29yZCgmeGUtPnhkZjIsIHMyLCAiICIsIGVjYikgPCAwKQorCQkJCXJldHVybiAtMTsKKworCQlmb3IgKHMxID0geGNoLT5pMSwgczIgPSB4Y2gtPmkyOzsgeGNoID0geGNoLT5uZXh0KSB7CisJCQkvKgorCQkJICogTWVyZ2UgcHJldmlvdXMgd2l0aCBjdXJyZW50IGNoYW5nZSBhdG9tLgorCQkJICovCisJCQlmb3IgKDsgczEgPCB4Y2gtPmkxICYmIHMyIDwgeGNoLT5pMjsgczErKywgczIrKykKKwkJCQlpZiAoeGRsX2VtaXRfcmVjb3JkKCZ4ZS0+eGRmMiwgczIsICIgIiwgZWNiKSA8IDApCisJCQkJCXJldHVybiAtMTsKKworCQkJLyoKKwkJCSAqIFJlbW92ZXMgbGluZXMgZnJvbSB0aGUgZmlyc3QgZmlsZS4KKwkJCSAqLworCQkJZm9yIChzMSA9IHhjaC0+aTE7IHMxIDwgeGNoLT5pMSArIHhjaC0+Y2hnMTsgczErKykKKwkJCQlpZiAoeGRsX2VtaXRfcmVjb3JkKCZ4ZS0+eGRmMSwgczEsICItIiwgZWNiKSA8IDApCisJCQkJCXJldHVybiAtMTsKKworCQkJLyoKKwkJCSAqIEFkZHMgbGluZXMgZnJvbSB0aGUgc2Vjb25kIGZpbGUuCisJCQkgKi8KKwkJCWZvciAoczIgPSB4Y2gtPmkyOyBzMiA8IHhjaC0+aTIgKyB4Y2gtPmNoZzI7IHMyKyspCisJCQkJaWYgKHhkbF9lbWl0X3JlY29yZCgmeGUtPnhkZjIsIHMyLCAiKyIsIGVjYikgPCAwKQorCQkJCQlyZXR1cm4gLTE7CisKKwkJCWlmICh4Y2ggPT0geGNoZSkKKwkJCQlicmVhazsKKwkJCXMxID0geGNoLT5pMSArIHhjaC0+Y2hnMTsKKwkJCXMyID0geGNoLT5pMiArIHhjaC0+Y2hnMjsKKwkJfQorCisJCS8qCisJCSAqIEVtaXQgcG9zdC1jb250ZXh0LgorCQkgKi8KKwkJZm9yIChzMiA9IHhjaGUtPmkyICsgeGNoZS0+Y2hnMjsgczIgPCBlMjsgczIrKykKKwkJCWlmICh4ZGxfZW1pdF9yZWNvcmQoJnhlLT54ZGYyLCBzMiwgIiAiLCBlY2IpIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94ZW1pdC5oIGIveGRpZmYveGVtaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjk4ODdlCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGVtaXQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlCisgKiAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpZiAhZGVmaW5lZChYRU1JVF9IKQorI2RlZmluZSBYRU1JVF9ICisKKwordHlwZWRlZiBpbnQgKCplbWl0X2Z1bmNfdCkoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCisJCQkgICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKTsKKworeGRjaGFuZ2VfdCAqeGRsX2dldF9odW5rKHhkY2hhbmdlX3QgKip4c2NyLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKTsKK2ludCB4ZGxfZW1pdF9kaWZmKHhkZmVudl90ICp4ZSwgeGRjaGFuZ2VfdCAqeHNjciwgeGRlbWl0Y2JfdCAqZWNiLAorCQkgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworCisKKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYRU1JVF9IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveGhpc3RvZ3JhbS5jIGIveGRpZmYveGhpc3RvZ3JhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YjM1YTkKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94aGlzdG9ncmFtLmMKQEAgLTAsMCArMSwzODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuCisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIEpHaXQncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAieGluY2x1ZGUuaCIKKworI2RlZmluZSBNQVhfUFRSCVVJTlRfTUFYCisjZGVmaW5lIE1BWF9DTlQJVUlOVF9NQVgKKworI2RlZmluZSBMSU5FX0VORChuKSAobGluZSMjbiArIGNvdW50IyNuIC0gMSkKKyNkZWZpbmUgTElORV9FTkRfUFRSKG4pICgqbGluZSMjbiArICpjb3VudCMjbiAtIDEpCisKK3N0cnVjdCBoaXN0aW5kZXggeworCXN0cnVjdCByZWNvcmQgeworCQl1bnNpZ25lZCBpbnQgcHRyLCBjbnQ7CisJCXN0cnVjdCByZWNvcmQgKm5leHQ7CisJfSAqKnJlY29yZHMsIC8qIGFuIG9jY3VycmVuY2UgKi8KKwkgICoqbGluZV9tYXA7IC8qIG1hcCBvZiBsaW5lIHRvIHJlY29yZCBjaGFpbiAqLworCWNoYXN0b3JlX3QgcmNoYTsKKwl1bnNpZ25lZCBpbnQgKm5leHRfcHRyczsKKwl1bnNpZ25lZCBpbnQgdGFibGVfYml0cywKKwkJICAgICByZWNvcmRzX3NpemUsCisJCSAgICAgbGluZV9tYXBfc2l6ZTsKKworCXVuc2lnbmVkIGludCBtYXhfY2hhaW5fbGVuZ3RoLAorCQkgICAgIGtleV9zaGlmdCwKKwkJICAgICBwdHJfc2hpZnQ7CisKKwl1bnNpZ25lZCBpbnQgY250LAorCQkgICAgIGhhc19jb21tb247CisKKwl4ZGZlbnZfdCAqZW52OworCXhwcGFyYW1fdCBjb25zdCAqeHBwOworfTsKKworc3RydWN0IHJlZ2lvbiB7CisJdW5zaWduZWQgaW50IGJlZ2luMSwgZW5kMTsKKwl1bnNpZ25lZCBpbnQgYmVnaW4yLCBlbmQyOworfTsKKworI2RlZmluZSBMSU5FX01BUChpLCBhKSAoaS0+bGluZV9tYXBbKGEpIC0gaS0+cHRyX3NoaWZ0XSkKKworI2RlZmluZSBORVhUX1BUUihpbmRleCwgcHRyKSBcCisJKGluZGV4LT5uZXh0X3B0cnNbKHB0cikgLSBpbmRleC0+cHRyX3NoaWZ0XSkKKworI2RlZmluZSBDTlQoaW5kZXgsIHB0cikgXAorCSgoTElORV9NQVAoaW5kZXgsIHB0cikpLT5jbnQpCisKKyNkZWZpbmUgUkVDKGVudiwgcywgbCkgXAorCShlbnYtPnhkZiMjcy5yZWNzW2wgLSAxXSkKKworc3RhdGljIGludCBjbXBfcmVjcyh4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwl4cmVjb3JkX3QgKnIxLCB4cmVjb3JkX3QgKnIyKQoreworCXJldHVybiByMS0+aGEgPT0gcjItPmhhICYmCisJCXhkbF9yZWNtYXRjaChyMS0+cHRyLCByMS0+c2l6ZSwgcjItPnB0ciwgcjItPnNpemUsCisJCQkgICAgeHBwLT5mbGFncyk7Cit9CisKKyNkZWZpbmUgQ01QX0VOVih4cHAsIGVudiwgczEsIGwxLCBzMiwgbDIpIFwKKwkoY21wX3JlY3MoeHBwLCBSRUMoZW52LCBzMSwgbDEpLCBSRUMoZW52LCBzMiwgbDIpKSkKKworI2RlZmluZSBDTVAoaSwgczEsIGwxLCBzMiwgbDIpIFwKKwkoY21wX3JlY3MoaS0+eHBwLCBSRUMoaS0+ZW52LCBzMSwgbDEpLCBSRUMoaS0+ZW52LCBzMiwgbDIpKSkKKworI2RlZmluZSBUQUJMRV9IQVNIKGluZGV4LCBzaWRlLCBsaW5lKSBcCisJWERMX0hBU0hMT05HKChSRUMoaW5kZXgtPmVudiwgc2lkZSwgbGluZSkpLT5oYSwgaW5kZXgtPnRhYmxlX2JpdHMpCisKK3N0YXRpYyBpbnQgc2NhbkEoc3RydWN0IGhpc3RpbmRleCAqaW5kZXgsIGludCBsaW5lMSwgaW50IGNvdW50MSkKK3sKKwl1bnNpZ25lZCBpbnQgcHRyLCB0YmxfaWR4OworCXVuc2lnbmVkIGludCBjaGFpbl9sZW47CisJc3RydWN0IHJlY29yZCAqKnJlY19jaGFpbiwgKnJlYzsKKworCWZvciAocHRyID0gTElORV9FTkQoMSk7IGxpbmUxIDw9IHB0cjsgcHRyLS0pIHsKKwkJdGJsX2lkeCA9IFRBQkxFX0hBU0goaW5kZXgsIDEsIHB0cik7CisJCXJlY19jaGFpbiA9IGluZGV4LT5yZWNvcmRzICsgdGJsX2lkeDsKKwkJcmVjID0gKnJlY19jaGFpbjsKKworCQljaGFpbl9sZW4gPSAwOworCQl3aGlsZSAocmVjKSB7CisJCQlpZiAoQ01QKGluZGV4LCAxLCByZWMtPnB0ciwgMSwgcHRyKSkgeworCQkJCS8qCisJCQkJICogcHRyIGlzIGlkZW50aWNhbCB0byBhbm90aGVyIGVsZW1lbnQuIEluc2VydAorCQkJCSAqIGl0IG9udG8gdGhlIGZyb250IG9mIHRoZSBleGlzdGluZyBlbGVtZW50CisJCQkJICogY2hhaW4uCisJCQkJICovCisJCQkJTkVYVF9QVFIoaW5kZXgsIHB0cikgPSByZWMtPnB0cjsKKwkJCQlyZWMtPnB0ciA9IHB0cjsKKwkJCQkvKiBjYXAgcmVjLT5jbnQgYXQgTUFYX0NOVCAqLworCQkJCXJlYy0+Y250ID0gWERMX01JTihNQVhfQ05ULCByZWMtPmNudCArIDEpOworCQkJCUxJTkVfTUFQKGluZGV4LCBwdHIpID0gcmVjOworCQkJCWdvdG8gY29udGludWVfc2NhbjsKKwkJCX0KKworCQkJcmVjID0gcmVjLT5uZXh0OworCQkJY2hhaW5fbGVuKys7CisJCX0KKworCQlpZiAoY2hhaW5fbGVuID09IGluZGV4LT5tYXhfY2hhaW5fbGVuZ3RoKQorCQkJcmV0dXJuIC0xOworCisJCS8qCisJCSAqIFRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgaGF2ZSBldmVyIHNlZW4gdGhpcyBwYXJ0aWN1bGFyCisJCSAqIGVsZW1lbnQgaW4gdGhlIHNlcXVlbmNlLiBDb25zdHJ1Y3QgYSBuZXcgY2hhaW4gZm9yIGl0LgorCQkgKi8KKwkJaWYgKCEocmVjID0geGRsX2NoYV9hbGxvYygmaW5kZXgtPnJjaGEpKSkKKwkJCXJldHVybiAtMTsKKwkJcmVjLT5wdHIgPSBwdHI7CisJCXJlYy0+Y250ID0gMTsKKwkJcmVjLT5uZXh0ID0gKnJlY19jaGFpbjsKKwkJKnJlY19jaGFpbiA9IHJlYzsKKwkJTElORV9NQVAoaW5kZXgsIHB0cikgPSByZWM7CisKK2NvbnRpbnVlX3NjYW46CisJCTsgLyogbm8gb3AgKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfbGNzKHN0cnVjdCBoaXN0aW5kZXggKmluZGV4LCBzdHJ1Y3QgcmVnaW9uICpsY3MsIGludCBiX3B0ciwKKwlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwl1bnNpZ25lZCBpbnQgYl9uZXh0ID0gYl9wdHIgKyAxOworCXN0cnVjdCByZWNvcmQgKnJlYyA9IGluZGV4LT5yZWNvcmRzW1RBQkxFX0hBU0goaW5kZXgsIDIsIGJfcHRyKV07CisJdW5zaWduZWQgaW50IGFzLCBhZSwgYnMsIGJlLCBucCwgcmM7CisJaW50IHNob3VsZF9icmVhazsKKworCWZvciAoOyByZWM7IHJlYyA9IHJlYy0+bmV4dCkgeworCQlpZiAocmVjLT5jbnQgPiBpbmRleC0+Y250KSB7CisJCQlpZiAoIWluZGV4LT5oYXNfY29tbW9uKQorCQkJCWluZGV4LT5oYXNfY29tbW9uID0gQ01QKGluZGV4LCAxLCByZWMtPnB0ciwgMiwgYl9wdHIpOworCQkJY29udGludWU7CisJCX0KKworCQlhcyA9IHJlYy0+cHRyOworCQlpZiAoIUNNUChpbmRleCwgMSwgYXMsIDIsIGJfcHRyKSkKKwkJCWNvbnRpbnVlOworCisJCWluZGV4LT5oYXNfY29tbW9uID0gMTsKKwkJZm9yICg7OykgeworCQkJc2hvdWxkX2JyZWFrID0gMDsKKwkJCW5wID0gTkVYVF9QVFIoaW5kZXgsIGFzKTsKKwkJCWJzID0gYl9wdHI7CisJCQlhZSA9IGFzOworCQkJYmUgPSBiczsKKwkJCXJjID0gcmVjLT5jbnQ7CisKKwkJCXdoaWxlIChsaW5lMSA8IGFzICYmIGxpbmUyIDwgYnMKKwkJCQkmJiBDTVAoaW5kZXgsIDEsIGFzIC0gMSwgMiwgYnMgLSAxKSkgeworCQkJCWFzLS07CisJCQkJYnMtLTsKKwkJCQlpZiAoMSA8IHJjKQorCQkJCQlyYyA9IFhETF9NSU4ocmMsIENOVChpbmRleCwgYXMpKTsKKwkJCX0KKwkJCXdoaWxlIChhZSA8IExJTkVfRU5EKDEpICYmIGJlIDwgTElORV9FTkQoMikKKwkJCQkmJiBDTVAoaW5kZXgsIDEsIGFlICsgMSwgMiwgYmUgKyAxKSkgeworCQkJCWFlKys7CisJCQkJYmUrKzsKKwkJCQlpZiAoMSA8IHJjKQorCQkJCQlyYyA9IFhETF9NSU4ocmMsIENOVChpbmRleCwgYWUpKTsKKwkJCX0KKworCQkJaWYgKGJfbmV4dCA8PSBiZSkKKwkJCQliX25leHQgPSBiZSArIDE7CisJCQlpZiAobGNzLT5lbmQxIC0gbGNzLT5iZWdpbjEgPCBhZSAtIGFzIHx8IHJjIDwgaW5kZXgtPmNudCkgeworCQkJCWxjcy0+YmVnaW4xID0gYXM7CisJCQkJbGNzLT5iZWdpbjIgPSBiczsKKwkJCQlsY3MtPmVuZDEgPSBhZTsKKwkJCQlsY3MtPmVuZDIgPSBiZTsKKwkJCQlpbmRleC0+Y250ID0gcmM7CisJCQl9CisKKwkJCWlmIChucCA9PSAwKQorCQkJCWJyZWFrOworCisJCQl3aGlsZSAobnAgPD0gYWUpIHsKKwkJCQlucCA9IE5FWFRfUFRSKGluZGV4LCBucCk7CisJCQkJaWYgKG5wID09IDApIHsKKwkJCQkJc2hvdWxkX2JyZWFrID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoc2hvdWxkX2JyZWFrKQorCQkJCWJyZWFrOworCisJCQlhcyA9IG5wOworCQl9CisJfQorCXJldHVybiBiX25leHQ7Cit9CisKK3N0YXRpYyBpbnQgZmFsbF9iYWNrX3RvX2NsYXNzaWNfZGlmZih4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudiwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJeHBwYXJhbV90IHhwcGFyYW07CisJeHBwYXJhbS5mbGFncyA9IHhwcC0+ZmxhZ3MgJiB+WERGX0RJRkZfQUxHT1JJVEhNX01BU0s7CisKKwlyZXR1cm4geGRsX2ZhbGxfYmFja19kaWZmKGVudiwgJnhwcGFyYW0sCisJCQkJICBsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfaW5kZXgoc3RydWN0IGhpc3RpbmRleCAqaW5kZXgpCit7CisJeGRsX2ZyZWUoaW5kZXgtPnJlY29yZHMpOworCXhkbF9mcmVlKGluZGV4LT5saW5lX21hcCk7CisJeGRsX2ZyZWUoaW5kZXgtPm5leHRfcHRycyk7CisJeGRsX2NoYV9mcmVlKCZpbmRleC0+cmNoYSk7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9sY3MoeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJCSAgICBzdHJ1Y3QgcmVnaW9uICpsY3MsCisJCSAgICBpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwlpbnQgYl9wdHI7CisJaW50IHN6LCByZXQgPSAtMTsKKwlzdHJ1Y3QgaGlzdGluZGV4IGluZGV4OworCisJbWVtc2V0KCZpbmRleCwgMCwgc2l6ZW9mKGluZGV4KSk7CisKKwlpbmRleC5lbnYgPSBlbnY7CisJaW5kZXgueHBwID0geHBwOworCisJaW5kZXgucmVjb3JkcyA9IE5VTEw7CisJaW5kZXgubGluZV9tYXAgPSBOVUxMOworCS8qIGluIGNhc2Ugb2YgZWFybHkgeGRsX2NoYV9mcmVlKCkgKi8KKwlpbmRleC5yY2hhLmhlYWQgPSBOVUxMOworCisJaW5kZXgudGFibGVfYml0cyA9IHhkbF9oYXNoYml0cyhjb3VudDEpOworCXN6ID0gaW5kZXgucmVjb3Jkc19zaXplID0gMSA8PCBpbmRleC50YWJsZV9iaXRzOworCXN6ICo9IHNpemVvZihzdHJ1Y3QgcmVjb3JkICopOworCWlmICghKGluZGV4LnJlY29yZHMgPSAoc3RydWN0IHJlY29yZCAqKikgeGRsX21hbGxvYyhzeikpKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGluZGV4LnJlY29yZHMsIDAsIHN6KTsKKworCXN6ID0gaW5kZXgubGluZV9tYXBfc2l6ZSA9IGNvdW50MTsKKwlzeiAqPSBzaXplb2Yoc3RydWN0IHJlY29yZCAqKTsKKwlpZiAoIShpbmRleC5saW5lX21hcCA9IChzdHJ1Y3QgcmVjb3JkICoqKSB4ZGxfbWFsbG9jKHN6KSkpCisJCWdvdG8gY2xlYW51cDsKKwltZW1zZXQoaW5kZXgubGluZV9tYXAsIDAsIHN6KTsKKworCXN6ID0gaW5kZXgubGluZV9tYXBfc2l6ZTsKKwlzeiAqPSBzaXplb2YodW5zaWduZWQgaW50KTsKKwlpZiAoIShpbmRleC5uZXh0X3B0cnMgPSAodW5zaWduZWQgaW50ICopIHhkbF9tYWxsb2Moc3opKSkKKwkJZ290byBjbGVhbnVwOworCW1lbXNldChpbmRleC5uZXh0X3B0cnMsIDAsIHN6KTsKKworCS8qIGxpbmVzIC8gNCArIDEgY29tZXMgZnJvbSB4cHJlcGFyZS5jOnhkbF9wcmVwYXJlX2N0eCgpICovCisJaWYgKHhkbF9jaGFfaW5pdCgmaW5kZXgucmNoYSwgc2l6ZW9mKHN0cnVjdCByZWNvcmQpLCBjb3VudDEgLyA0ICsgMSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKwlpbmRleC5wdHJfc2hpZnQgPSBsaW5lMTsKKwlpbmRleC5tYXhfY2hhaW5fbGVuZ3RoID0gNjQ7CisKKwlpZiAoc2NhbkEoJmluZGV4LCBsaW5lMSwgY291bnQxKSkKKwkJZ290byBjbGVhbnVwOworCisJaW5kZXguY250ID0gaW5kZXgubWF4X2NoYWluX2xlbmd0aCArIDE7CisKKwlmb3IgKGJfcHRyID0gbGluZTI7IGJfcHRyIDw9IExJTkVfRU5EKDIpOyApCisJCWJfcHRyID0gdHJ5X2xjcygmaW5kZXgsIGxjcywgYl9wdHIsIGxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCisJaWYgKGluZGV4Lmhhc19jb21tb24gJiYgaW5kZXgubWF4X2NoYWluX2xlbmd0aCA8IGluZGV4LmNudCkKKwkJcmV0ID0gMTsKKwllbHNlCisJCXJldCA9IDA7CisKK2NsZWFudXA6CisJZnJlZV9pbmRleCgmaW5kZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGlzdG9ncmFtX2RpZmYoeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJc3RydWN0IHJlZ2lvbiBsY3M7CisJaW50IGxjc19mb3VuZDsKKwlpbnQgcmVzdWx0OworcmVkbzoKKwlyZXN1bHQgPSAtMTsKKworCWlmIChjb3VudDEgPD0gMCAmJiBjb3VudDIgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoTElORV9FTkQoMSkgPj0gTUFYX1BUUikKKwkJcmV0dXJuIC0xOworCisJaWYgKCFjb3VudDEpIHsKKwkJd2hpbGUoY291bnQyLS0pCisJCQllbnYtPnhkZjIucmNoZ1tsaW5lMisrIC0gMV0gPSAxOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFjb3VudDIpIHsKKwkJd2hpbGUoY291bnQxLS0pCisJCQllbnYtPnhkZjEucmNoZ1tsaW5lMSsrIC0gMV0gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQoJmxjcywgMCwgc2l6ZW9mKGxjcykpOworCWxjc19mb3VuZCA9IGZpbmRfbGNzKHhwcCwgZW52LCAmbGNzLCBsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKKwlpZiAobGNzX2ZvdW5kIDwgMCkKKwkJZ290byBvdXQ7CisJZWxzZSBpZiAobGNzX2ZvdW5kKQorCQlyZXN1bHQgPSBmYWxsX2JhY2tfdG9fY2xhc3NpY19kaWZmKHhwcCwgZW52LCBsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKKwllbHNlIHsKKwkJaWYgKGxjcy5iZWdpbjEgPT0gMCAmJiBsY3MuYmVnaW4yID09IDApIHsKKwkJCXdoaWxlIChjb3VudDEtLSkKKwkJCQllbnYtPnhkZjEucmNoZ1tsaW5lMSsrIC0gMV0gPSAxOworCQkJd2hpbGUgKGNvdW50Mi0tKQorCQkJCWVudi0+eGRmMi5yY2hnW2xpbmUyKysgLSAxXSA9IDE7CisJCQlyZXN1bHQgPSAwOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gaGlzdG9ncmFtX2RpZmYoeHBwLCBlbnYsCisJCQkJCQlsaW5lMSwgbGNzLmJlZ2luMSAtIGxpbmUxLAorCQkJCQkJbGluZTIsIGxjcy5iZWdpbjIgLSBsaW5lMik7CisJCQlpZiAocmVzdWx0KQorCQkJCWdvdG8gb3V0OworCQkJLyoKKwkJCSAqIHJlc3VsdCA9IGhpc3RvZ3JhbV9kaWZmKHhwcCwgZW52LAorCQkJICogICAgICAgICAgICBsY3MuZW5kMSArIDEsIExJTkVfRU5EKDEpIC0gbGNzLmVuZDEsCisJCQkgKiAgICAgICAgICAgIGxjcy5lbmQyICsgMSwgTElORV9FTkQoMikgLSBsY3MuZW5kMik7CisJCQkgKiBidXQgbGV0J3Mgb3B0aW1pemUgdGFpbCByZWN1cnNpb24gb3Vyc2VsZjoKKwkJCSovCisJCQljb3VudDEgPSBMSU5FX0VORCgxKSAtIGxjcy5lbmQxOworCQkJbGluZTEgPSBsY3MuZW5kMSArIDE7CisJCQljb3VudDIgPSBMSU5FX0VORCgyKSAtIGxjcy5lbmQyOworCQkJbGluZTIgPSBsY3MuZW5kMiArIDE7CisJCQlnb3RvIHJlZG87CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHhkbF9kb19oaXN0b2dyYW1fZGlmZihtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwl4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudikKK3sKKwlpZiAoeGRsX3ByZXBhcmVfZW52KGZpbGUxLCBmaWxlMiwgeHBwLCBlbnYpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGhpc3RvZ3JhbV9kaWZmKHhwcCwgZW52LAorCQllbnYtPnhkZjEuZHN0YXJ0ICsgMSwgZW52LT54ZGYxLmRlbmQgLSBlbnYtPnhkZjEuZHN0YXJ0ICsgMSwKKwkJZW52LT54ZGYyLmRzdGFydCArIDEsIGVudi0+eGRmMi5kZW5kIC0gZW52LT54ZGYyLmRzdGFydCArIDEpOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveGluY2x1ZGUuaCBiL3hkaWZmL3hpbmNsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyODVhYwotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hpbmNsdWRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMyAgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWElOQ0xVREVfSCkKKyNkZWZpbmUgWElOQ0xVREVfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAieG1hY3Jvcy5oIgorI2luY2x1ZGUgInhkaWZmLmgiCisjaW5jbHVkZSAieHR5cGVzLmgiCisjaW5jbHVkZSAieHV0aWxzLmgiCisjaW5jbHVkZSAieHByZXBhcmUuaCIKKyNpbmNsdWRlICJ4ZGlmZmkuaCIKKyNpbmNsdWRlICJ4ZW1pdC5oIgorCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWElOQ0xVREVfSCkgKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3htYWNyb3MuaCBiL3hkaWZmL3htYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA5YTI4Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveG1hY3Jvcy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhNQUNST1NfSCkKKyNkZWZpbmUgWE1BQ1JPU19ICisKKworCisKKyNkZWZpbmUgWERMX01JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpOiAoYikpCisjZGVmaW5lIFhETF9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKTogKGIpKQorI2RlZmluZSBYRExfQUJTKHYpICgodikgPj0gMCA/ICh2KTogLSh2KSkKKyNkZWZpbmUgWERMX0lTRElHSVQoYykgKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc5JykKKyNkZWZpbmUgWERMX0lTU1BBQ0UoYykgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKGMpKSkKKyNkZWZpbmUgWERMX0FEREJJVFModixiKQkoKHYpICsgKCh2KSA+PiAoYikpKQorI2RlZmluZSBYRExfTUFTS0JJVFMoYikJCSgoMVVMIDw8IChiKSkgLSAxKQorI2RlZmluZSBYRExfSEFTSExPTkcodixiKQkoWERMX0FEREJJVFMoKHVuc2lnbmVkIGxvbmcpKHYpLCBiKSAmIFhETF9NQVNLQklUUyhiKSkKKyNkZWZpbmUgWERMX1BUUkZSRUUocCkgZG8geyBpZiAocCkgeyB4ZGxfZnJlZShwKTsgKHApID0gTlVMTDsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBYRExfTEUzMl9QVVQocCwgdikgXAorZG8geyBcCisJdW5zaWduZWQgY2hhciAqX19wID0gKHVuc2lnbmVkIGNoYXIgKikgKHApOyBcCisJKl9fcCsrID0gKHVuc2lnbmVkIGNoYXIpICh2KTsgXAorCSpfX3ArKyA9ICh1bnNpZ25lZCBjaGFyKSAoKHYpID4+IDgpOyBcCisJKl9fcCsrID0gKHVuc2lnbmVkIGNoYXIpICgodikgPj4gMTYpOyBcCisJKl9fcCA9ICh1bnNpZ25lZCBjaGFyKSAoKHYpID4+IDI0KTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgWERMX0xFMzJfR0VUKHAsIHYpIFwKK2RvIHsgXAorCXVuc2lnbmVkIGNoYXIgY29uc3QgKl9fcCA9ICh1bnNpZ25lZCBjaGFyIGNvbnN0ICopIChwKTsgXAorCSh2KSA9ICh1bnNpZ25lZCBsb25nKSBfX3BbMF0gfCAoKHVuc2lnbmVkIGxvbmcpIF9fcFsxXSkgPDwgOCB8IFwKKwkJKCh1bnNpZ25lZCBsb25nKSBfX3BbMl0pIDw8IDE2IHwgKCh1bnNpZ25lZCBsb25nKSBfX3BbM10pIDw8IDI0OyBcCit9IHdoaWxlICgwKQorCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWE1BQ1JPU19IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveG1lcmdlLmMgYi94ZGlmZi94bWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU5ZWRiCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveG1lcmdlLmMKQEAgLTAsMCArMSw2ODYgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiBEYXZpZGUgTGliZW56aSwgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlCisgKiAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorCit0eXBlZGVmIHN0cnVjdCBzX3hkbWVyZ2UgeworCXN0cnVjdCBzX3hkbWVyZ2UgKm5leHQ7CisJLyoKKwkgKiAwID0gY29uZmxpY3QsCisJICogMSA9IG5vIGNvbmZsaWN0LCB0YWtlIGZpcnN0LAorCSAqIDIgPSBubyBjb25mbGljdCwgdGFrZSBzZWNvbmQuCisJICogMyA9IG5vIGNvbmZsaWN0LCB0YWtlIGJvdGguCisJICovCisJaW50IG1vZGU7CisJLyoKKwkgKiBUaGVzZSBwb2ludCBhdCB0aGUgcmVzcGVjdGl2ZSBwb3N0aW1hZ2VzLiAgRS5nLiA8aTEsY2hnMT4gaXMKKwkgKiBob3cgc2lkZSAjMSB3YW50cyB0byBjaGFuZ2UgdGhlIGNvbW1vbiBhbmNlc3RvcjsgaWYgdGhlcmUgaXMgbm8KKwkgKiBvdmVybGFwLCBsaW5lcyBiZWZvcmUgaTEgaW4gdGhlIHBvc3RpbWFnZSBvZiBzaWRlICMxIGFwcGVhcgorCSAqIGluIHRoZSBtZXJnZSByZXN1bHQgYXMgYSByZWdpb24gdG91Y2hlZCBieSBuZWl0aGVyIHNpZGUuCisJICovCisJbG9uZyBpMSwgaTI7CisJbG9uZyBjaGcxLCBjaGcyOworCS8qCisJICogVGhlc2UgcG9pbnQgYXQgdGhlIHByZWltYWdlOyBvZiBjb3Vyc2UgdGhlcmUgaXMganVzdCBvbmUKKwkgKiBwcmVpbWFnZSwgdGhhdCBpcyBmcm9tIHRoZSBzaGFyZWQgY29tbW9uIGFuY2VzdG9yLgorCSAqLworCWxvbmcgaTA7CisJbG9uZyBjaGcwOworfSB4ZG1lcmdlX3Q7CisKK3N0YXRpYyBpbnQgeGRsX2FwcGVuZF9tZXJnZSh4ZG1lcmdlX3QgKiptZXJnZSwgaW50IG1vZGUsCisJCQkgICAgbG9uZyBpMCwgbG9uZyBjaGcwLAorCQkJICAgIGxvbmcgaTEsIGxvbmcgY2hnMSwKKwkJCSAgICBsb25nIGkyLCBsb25nIGNoZzIpCit7CisJeGRtZXJnZV90ICptID0gKm1lcmdlOworCWlmIChtICYmIChpMSA8PSBtLT5pMSArIG0tPmNoZzEgfHwgaTIgPD0gbS0+aTIgKyBtLT5jaGcyKSkgeworCQlpZiAobW9kZSAhPSBtLT5tb2RlKQorCQkJbS0+bW9kZSA9IDA7CisJCW0tPmNoZzAgPSBpMCArIGNoZzAgLSBtLT5pMDsKKwkJbS0+Y2hnMSA9IGkxICsgY2hnMSAtIG0tPmkxOworCQltLT5jaGcyID0gaTIgKyBjaGcyIC0gbS0+aTI7CisJfSBlbHNlIHsKKwkJbSA9IHhkbF9tYWxsb2Moc2l6ZW9mKHhkbWVyZ2VfdCkpOworCQlpZiAoIW0pCisJCQlyZXR1cm4gLTE7CisJCW0tPm5leHQgPSBOVUxMOworCQltLT5tb2RlID0gbW9kZTsKKwkJbS0+aTAgPSBpMDsKKwkJbS0+Y2hnMCA9IGNoZzA7CisJCW0tPmkxID0gaTE7CisJCW0tPmNoZzEgPSBjaGcxOworCQltLT5pMiA9IGkyOworCQltLT5jaGcyID0gY2hnMjsKKwkJaWYgKCptZXJnZSkKKwkJCSgqbWVyZ2UpLT5uZXh0ID0gbTsKKwkJKm1lcmdlID0gbTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGRsX2NsZWFudXBfbWVyZ2UoeGRtZXJnZV90ICpjKQoreworCWludCBjb3VudCA9IDA7CisJeGRtZXJnZV90ICpuZXh0X2M7CisKKwkvKiB3ZXJlIHRoZXJlIGNvbmZsaWN0cz8gKi8KKwlmb3IgKDsgYzsgYyA9IG5leHRfYykgeworCQlpZiAoYy0+bW9kZSA9PSAwKQorCQkJY291bnQrKzsKKwkJbmV4dF9jID0gYy0+bmV4dDsKKwkJZnJlZShjKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHhkbF9tZXJnZV9jbXBfbGluZXMoeGRmZW52X3QgKnhlMSwgaW50IGkxLCB4ZGZlbnZfdCAqeGUyLCBpbnQgaTIsCisJCWludCBsaW5lX2NvdW50LCBsb25nIGZsYWdzKQoreworCWludCBpOworCXhyZWNvcmRfdCAqKnJlYzEgPSB4ZTEtPnhkZjIucmVjcyArIGkxOworCXhyZWNvcmRfdCAqKnJlYzIgPSB4ZTItPnhkZjIucmVjcyArIGkyOworCisJZm9yIChpID0gMDsgaSA8IGxpbmVfY291bnQ7IGkrKykgeworCQlpbnQgcmVzdWx0ID0geGRsX3JlY21hdGNoKHJlYzFbaV0tPnB0ciwgcmVjMVtpXS0+c2l6ZSwKKwkJCXJlYzJbaV0tPnB0ciwgcmVjMltpXS0+c2l6ZSwgZmxhZ3MpOworCQlpZiAoIXJlc3VsdCkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGRsX3JlY3NfY29weV8wKGludCB1c2Vfb3JpZywgeGRmZW52X3QgKnhlLCBpbnQgaSwgaW50IGNvdW50LCBpbnQgbmVlZHNfY3IsIGludCBhZGRfbmwsIGNoYXIgKmRlc3QpCit7CisJeHJlY29yZF90ICoqcmVjczsKKwlpbnQgc2l6ZSA9IDA7CisKKwlyZWNzID0gKHVzZV9vcmlnID8geGUtPnhkZjEucmVjcyA6IHhlLT54ZGYyLnJlY3MpICsgaTsKKworCWlmIChjb3VudCA8IDEpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBzaXplICs9IHJlY3NbaSsrXS0+c2l6ZSkKKwkJaWYgKGRlc3QpCisJCQltZW1jcHkoZGVzdCArIHNpemUsIHJlY3NbaV0tPnB0ciwgcmVjc1tpXS0+c2l6ZSk7CisJaWYgKGFkZF9ubCkgeworCQlpID0gcmVjc1tjb3VudCAtIDFdLT5zaXplOworCQlpZiAoaSA9PSAwIHx8IHJlY3NbY291bnQgLSAxXS0+cHRyW2kgLSAxXSAhPSAnXG4nKSB7CisJCQlpZiAobmVlZHNfY3IpIHsKKwkJCQlpZiAoZGVzdCkKKwkJCQkJZGVzdFtzaXplXSA9ICdccic7CisJCQkJc2l6ZSsrOworCQkJfQorCisJCQlpZiAoZGVzdCkKKwkJCQlkZXN0W3NpemVdID0gJ1xuJzsKKwkJCXNpemUrKzsKKwkJfQorCX0KKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCB4ZGxfcmVjc19jb3B5KHhkZmVudl90ICp4ZSwgaW50IGksIGludCBjb3VudCwgaW50IG5lZWRzX2NyLCBpbnQgYWRkX25sLCBjaGFyICpkZXN0KQoreworCXJldHVybiB4ZGxfcmVjc19jb3B5XzAoMCwgeGUsIGksIGNvdW50LCBuZWVkc19jciwgYWRkX25sLCBkZXN0KTsKK30KKworc3RhdGljIGludCB4ZGxfb3JpZ19jb3B5KHhkZmVudl90ICp4ZSwgaW50IGksIGludCBjb3VudCwgaW50IG5lZWRzX2NyLCBpbnQgYWRkX25sLCBjaGFyICpkZXN0KQoreworCXJldHVybiB4ZGxfcmVjc19jb3B5XzAoMSwgeGUsIGksIGNvdW50LCBuZWVkc19jciwgYWRkX25sLCBkZXN0KTsKK30KKworLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgaSd0aCBsaW5lIGVuZHMgaW4gQ1IvTEYgKGlmIGl0IGlzIHRoZSBsYXN0IGxpbmUgYW5kCisgKiBoYXMgbm8gZW9sLCB0aGUgcHJlY2VkaW5nIGxpbmUsIGlmIGFueSksIDAgaWYgaXQgZW5kcyBpbiBMRi1vbmx5LCBhbmQKKyAqIC0xIGlmIHRoZSBsaW5lIGVuZGluZyBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4KKyAqLworc3RhdGljIGludCBpc19lb2xfY3JsZih4ZGZpbGVfdCAqZmlsZSwgaW50IGkpCit7CisJbG9uZyBzaXplOworCisJaWYgKGkgPCBmaWxlLT5ucmVjIC0gMSkKKwkJLyogQWxsIGxpbmVzIGJlZm9yZSB0aGUgbGFzdCAqbXVzdCogZW5kIGluIExGICovCisJCXJldHVybiAoc2l6ZSA9IGZpbGUtPnJlY3NbaV0tPnNpemUpID4gMSAmJgorCQkJZmlsZS0+cmVjc1tpXS0+cHRyW3NpemUgLSAyXSA9PSAnXHInOworCWlmICghZmlsZS0+bnJlYykKKwkJLyogQ2Fubm90IGRldGVybWluZSBlb2wgc3R5bGUgZnJvbSBlbXB0eSBmaWxlICovCisJCXJldHVybiAtMTsKKwlpZiAoKHNpemUgPSBmaWxlLT5yZWNzW2ldLT5zaXplKSAmJgorCQkJZmlsZS0+cmVjc1tpXS0+cHRyW3NpemUgLSAxXSA9PSAnXG4nKQorCQkvKiBMYXN0IGxpbmU7IGVuZHMgaW4gTEY7IElzIGl0IENSL0xGPyAqLworCQlyZXR1cm4gc2l6ZSA+IDEgJiYKKwkJCWZpbGUtPnJlY3NbaV0tPnB0cltzaXplIC0gMl0gPT0gJ1xyJzsKKwlpZiAoIWkpCisJCS8qIFRoZSBvbmx5IGxpbmUgaGFzIG5vIGVvbCAqLworCQlyZXR1cm4gLTE7CisJLyogRGV0ZXJtaW5lIGVvbCBmcm9tIHNlY29uZC10by1sYXN0IGxpbmUgKi8KKwlyZXR1cm4gKHNpemUgPSBmaWxlLT5yZWNzW2kgLSAxXS0+c2l6ZSkgPiAxICYmCisJCWZpbGUtPnJlY3NbaSAtIDFdLT5wdHJbc2l6ZSAtIDJdID09ICdccic7Cit9CisKK3N0YXRpYyBpbnQgaXNfY3JfbmVlZGVkKHhkZmVudl90ICp4ZTEsIHhkZmVudl90ICp4ZTIsIHhkbWVyZ2VfdCAqbSkKK3sKKwlpbnQgbmVlZHNfY3I7CisKKwkvKiBNYXRjaCBwb3N0LWltYWdlcycgcHJlY2VkaW5nLCBvciBmaXJzdCwgbGluZXMnIGVuZC1vZi1saW5lIHN0eWxlICovCisJbmVlZHNfY3IgPSBpc19lb2xfY3JsZigmeGUxLT54ZGYyLCBtLT5pMSA/IG0tPmkxIC0gMSA6IDApOworCWlmIChuZWVkc19jcikKKwkJbmVlZHNfY3IgPSBpc19lb2xfY3JsZigmeGUyLT54ZGYyLCBtLT5pMiA/IG0tPmkyIC0gMSA6IDApOworCS8qIExvb2sgYXQgcHJlLWltYWdlJ3MgZmlyc3QgbGluZSwgdW5sZXNzIHdlIGFscmVhZHkgc2V0dGxlZCBvbiBMRiAqLworCWlmIChuZWVkc19jcikKKwkJbmVlZHNfY3IgPSBpc19lb2xfY3JsZigmeGUxLT54ZGYxLCAwKTsKKwkvKiBJZiBzdGlsbCB1bmRlY2lkZWQsIHVzZSBMRi1vbmx5ICovCisJcmV0dXJuIG5lZWRzX2NyIDwgMCA/IDAgOiBuZWVkc19jcjsKK30KKworc3RhdGljIGludCBmaWxsX2NvbmZsaWN0X2h1bmsoeGRmZW52X3QgKnhlMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQkgICAgICB4ZGZlbnZfdCAqeGUyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUzLAorCQkJICAgICAgaW50IHNpemUsIGludCBpLCBpbnQgc3R5bGUsCisJCQkgICAgICB4ZG1lcmdlX3QgKm0sIGNoYXIgKmRlc3QsIGludCBtYXJrZXJfc2l6ZSkKK3sKKwlpbnQgbWFya2VyMV9zaXplID0gKG5hbWUxID8gc3RybGVuKG5hbWUxKSArIDEgOiAwKTsKKwlpbnQgbWFya2VyMl9zaXplID0gKG5hbWUyID8gc3RybGVuKG5hbWUyKSArIDEgOiAwKTsKKwlpbnQgbWFya2VyM19zaXplID0gKG5hbWUzID8gc3RybGVuKG5hbWUzKSArIDEgOiAwKTsKKwlpbnQgbmVlZHNfY3IgPSBpc19jcl9uZWVkZWQoeGUxLCB4ZTIsIG0pOworCisJaWYgKG1hcmtlcl9zaXplIDw9IDApCisJCW1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKworCS8qIEJlZm9yZSBjb25mbGljdGluZyBwYXJ0ICovCisJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMSwgaSwgbS0+aTEgLSBpLCAwLCAwLAorCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisKKwlpZiAoIWRlc3QpIHsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZSArIDEgKyBuZWVkc19jciArIG1hcmtlcjFfc2l6ZTsKKwl9IGVsc2UgeworCQltZW1zZXQoZGVzdCArIHNpemUsICc8JywgbWFya2VyX3NpemUpOworCQlzaXplICs9IG1hcmtlcl9zaXplOworCQlpZiAobWFya2VyMV9zaXplKSB7CisJCQlkZXN0W3NpemVdID0gJyAnOworCQkJbWVtY3B5KGRlc3QgKyBzaXplICsgMSwgbmFtZTEsIG1hcmtlcjFfc2l6ZSAtIDEpOworCQkJc2l6ZSArPSBtYXJrZXIxX3NpemU7CisJCX0KKwkJaWYgKG5lZWRzX2NyKQorCQkJZGVzdFtzaXplKytdID0gJ1xyJzsKKwkJZGVzdFtzaXplKytdID0gJ1xuJzsKKwl9CisKKwkvKiBQb3N0aW1hZ2UgZnJvbSBzaWRlICMxICovCisJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMSwgbS0+aTEsIG0tPmNoZzEsIG5lZWRzX2NyLCAxLAorCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisKKwlpZiAoc3R5bGUgPT0gWERMX01FUkdFX0RJRkYzKSB7CisJCS8qIFNoYXJlZCBwcmVpbWFnZSAqLworCQlpZiAoIWRlc3QpIHsKKwkJCXNpemUgKz0gbWFya2VyX3NpemUgKyAxICsgbmVlZHNfY3IgKyBtYXJrZXIzX3NpemU7CisJCX0gZWxzZSB7CisJCQltZW1zZXQoZGVzdCArIHNpemUsICd8JywgbWFya2VyX3NpemUpOworCQkJc2l6ZSArPSBtYXJrZXJfc2l6ZTsKKwkJCWlmIChtYXJrZXIzX3NpemUpIHsKKwkJCQlkZXN0W3NpemVdID0gJyAnOworCQkJCW1lbWNweShkZXN0ICsgc2l6ZSArIDEsIG5hbWUzLCBtYXJrZXIzX3NpemUgLSAxKTsKKwkJCQlzaXplICs9IG1hcmtlcjNfc2l6ZTsKKwkJCX0KKwkJCWlmIChuZWVkc19jcikKKwkJCQlkZXN0W3NpemUrK10gPSAnXHInOworCQkJZGVzdFtzaXplKytdID0gJ1xuJzsKKwkJfQorCQlzaXplICs9IHhkbF9vcmlnX2NvcHkoeGUxLCBtLT5pMCwgbS0+Y2hnMCwgbmVlZHNfY3IsIDEsCisJCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJfQorCisJaWYgKCFkZXN0KSB7CisJCXNpemUgKz0gbWFya2VyX3NpemUgKyAxICsgbmVlZHNfY3I7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGRlc3QgKyBzaXplLCAnPScsIG1hcmtlcl9zaXplKTsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZTsKKwkJaWYgKG5lZWRzX2NyKQorCQkJZGVzdFtzaXplKytdID0gJ1xyJzsKKwkJZGVzdFtzaXplKytdID0gJ1xuJzsKKwl9CisKKwkvKiBQb3N0aW1hZ2UgZnJvbSBzaWRlICMyICovCisJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMiwgbS0+aTIsIG0tPmNoZzIsIG5lZWRzX2NyLCAxLAorCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJaWYgKCFkZXN0KSB7CisJCXNpemUgKz0gbWFya2VyX3NpemUgKyAxICsgbmVlZHNfY3IgKyBtYXJrZXIyX3NpemU7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGRlc3QgKyBzaXplLCAnPicsIG1hcmtlcl9zaXplKTsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZTsKKwkJaWYgKG1hcmtlcjJfc2l6ZSkgeworCQkJZGVzdFtzaXplXSA9ICcgJzsKKwkJCW1lbWNweShkZXN0ICsgc2l6ZSArIDEsIG5hbWUyLCBtYXJrZXIyX3NpemUgLSAxKTsKKwkJCXNpemUgKz0gbWFya2VyMl9zaXplOworCQl9CisJCWlmIChuZWVkc19jcikKKwkJCWRlc3Rbc2l6ZSsrXSA9ICdccic7CisJCWRlc3Rbc2l6ZSsrXSA9ICdcbic7CisJfQorCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHhkbF9maWxsX21lcmdlX2J1ZmZlcih4ZGZlbnZfdCAqeGUxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCQkgeGRmZW52X3QgKnhlMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQkJIGNvbnN0IGNoYXIgKmFuY2VzdG9yX25hbWUsCisJCQkJIGludCBmYXZvciwKKwkJCQkgeGRtZXJnZV90ICptLCBjaGFyICpkZXN0LCBpbnQgc3R5bGUsCisJCQkJIGludCBtYXJrZXJfc2l6ZSkKK3sKKwlpbnQgc2l6ZSwgaTsKKworCWZvciAoc2l6ZSA9IGkgPSAwOyBtOyBtID0gbS0+bmV4dCkgeworCQlpZiAoZmF2b3IgJiYgIW0tPm1vZGUpCisJCQltLT5tb2RlID0gZmF2b3I7CisKKwkJaWYgKG0tPm1vZGUgPT0gMCkKKwkJCXNpemUgPSBmaWxsX2NvbmZsaWN0X2h1bmsoeGUxLCBuYW1lMSwgeGUyLCBuYW1lMiwKKwkJCQkJCSAgYW5jZXN0b3JfbmFtZSwKKwkJCQkJCSAgc2l6ZSwgaSwgc3R5bGUsIG0sIGRlc3QsCisJCQkJCQkgIG1hcmtlcl9zaXplKTsKKwkJZWxzZSBpZiAobS0+bW9kZSAmIDMpIHsKKwkJCS8qIEJlZm9yZSBjb25mbGljdGluZyBwYXJ0ICovCisJCQlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUxLCBpLCBtLT5pMSAtIGksIDAsIDAsCisJCQkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCQkJLyogUG9zdGltYWdlIGZyb20gc2lkZSAjMSAqLworCQkJaWYgKG0tPm1vZGUgJiAxKSB7CisJCQkJaW50IG5lZWRzX2NyID0gaXNfY3JfbmVlZGVkKHhlMSwgeGUyLCBtKTsKKworCQkJCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIG0tPmkxLCBtLT5jaGcxLCBuZWVkc19jciwgKG0tPm1vZGUgJiAyKSwKKwkJCQkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCQkJfQorCQkJLyogUG9zdGltYWdlIGZyb20gc2lkZSAjMiAqLworCQkJaWYgKG0tPm1vZGUgJiAyKQorCQkJCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTIsIG0tPmkyLCBtLT5jaGcyLCAwLCAwLAorCQkJCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJCX0gZWxzZQorCQkJY29udGludWU7CisJCWkgPSBtLT5pMSArIG0tPmNoZzE7CisJfQorCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIGksIHhlMS0+eGRmMi5ucmVjIC0gaSwgMCwgMCwKKwkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCXJldHVybiBzaXplOworfQorCisvKgorICogU29tZXRpbWVzLCBjaGFuZ2VzIGFyZSBub3QgcXVpdGUgaWRlbnRpY2FsLCBidXQgZGlmZmVyIGluIG9ubHkgYSBmZXcKKyAqIGxpbmVzLiBUcnkgaGFyZCB0byBzaG93IG9ubHkgdGhlc2UgZmV3IGxpbmVzIGFzIGNvbmZsaWN0aW5nLgorICovCitzdGF0aWMgaW50IHhkbF9yZWZpbmVfY29uZmxpY3RzKHhkZmVudl90ICp4ZTEsIHhkZmVudl90ICp4ZTIsIHhkbWVyZ2VfdCAqbSwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHApCit7CisJZm9yICg7IG07IG0gPSBtLT5uZXh0KSB7CisJCW1tZmlsZV90IHQxLCB0MjsKKwkJeGRmZW52X3QgeGU7CisJCXhkY2hhbmdlX3QgKnhzY3IsICp4OworCQlpbnQgaTEgPSBtLT5pMSwgaTIgPSBtLT5pMjsKKworCQkvKiBsZXQncyBoYW5kbGUganVzdCB0aGUgY29uZmxpY3RzICovCisJCWlmIChtLT5tb2RlKQorCQkJY29udGludWU7CisKKwkJLyogbm8gc2Vuc2UgcmVmaW5pbmcgYSBjb25mbGljdCB3aGVuIG9uZSBzaWRlIGlzIGVtcHR5ICovCisJCWlmIChtLT5jaGcxID09IDAgfHwgbS0+Y2hnMiA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhpcyBwcm9iYWJseSBkb2VzIG5vdCB3b3JrIG91dHNpZGUgZ2l0LCBzaW5jZQorCQkgKiB3ZSBoYXZlIGEgdmVyeSBzaW1wbGUgbW1maWxlIHN0cnVjdHVyZS4KKwkJICovCisJCXQxLnB0ciA9IChjaGFyICopeGUxLT54ZGYyLnJlY3NbbS0+aTFdLT5wdHI7CisJCXQxLnNpemUgPSB4ZTEtPnhkZjIucmVjc1ttLT5pMSArIG0tPmNoZzEgLSAxXS0+cHRyCisJCQkrIHhlMS0+eGRmMi5yZWNzW20tPmkxICsgbS0+Y2hnMSAtIDFdLT5zaXplIC0gdDEucHRyOworCQl0Mi5wdHIgPSAoY2hhciAqKXhlMi0+eGRmMi5yZWNzW20tPmkyXS0+cHRyOworCQl0Mi5zaXplID0geGUyLT54ZGYyLnJlY3NbbS0+aTIgKyBtLT5jaGcyIC0gMV0tPnB0cgorCQkJKyB4ZTItPnhkZjIucmVjc1ttLT5pMiArIG0tPmNoZzIgLSAxXS0+c2l6ZSAtIHQyLnB0cjsKKwkJaWYgKHhkbF9kb19kaWZmKCZ0MSwgJnQyLCB4cHAsICZ4ZSkgPCAwKQorCQkJcmV0dXJuIC0xOworCQlpZiAoeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZS54ZGYxLCAmeGUueGRmMiwgeHBwLT5mbGFncykgPCAwIHx8CisJCSAgICB4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlLnhkZjIsICZ4ZS54ZGYxLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkJICAgIHhkbF9idWlsZF9zY3JpcHQoJnhlLCAmeHNjcikgPCAwKSB7CisJCQl4ZGxfZnJlZV9lbnYoJnhlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoIXhzY3IpIHsKKwkJCS8qIElmIHRoaXMgaGFwcGVucywgdGhlIGNoYW5nZXMgYXJlIGlkZW50aWNhbC4gKi8KKwkJCXhkbF9mcmVlX2VudigmeGUpOworCQkJbS0+bW9kZSA9IDQ7CisJCQljb250aW51ZTsKKwkJfQorCQl4ID0geHNjcjsKKwkJbS0+aTEgPSB4c2NyLT5pMSArIGkxOworCQltLT5jaGcxID0geHNjci0+Y2hnMTsKKwkJbS0+aTIgPSB4c2NyLT5pMiArIGkyOworCQltLT5jaGcyID0geHNjci0+Y2hnMjsKKwkJd2hpbGUgKHhzY3ItPm5leHQpIHsKKwkJCXhkbWVyZ2VfdCAqbTIgPSB4ZGxfbWFsbG9jKHNpemVvZih4ZG1lcmdlX3QpKTsKKwkJCWlmICghbTIpIHsKKwkJCQl4ZGxfZnJlZV9lbnYoJnhlKTsKKwkJCQl4ZGxfZnJlZV9zY3JpcHQoeCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJeHNjciA9IHhzY3ItPm5leHQ7CisJCQltMi0+bmV4dCA9IG0tPm5leHQ7CisJCQltLT5uZXh0ID0gbTI7CisJCQltID0gbTI7CisJCQltLT5tb2RlID0gMDsKKwkJCW0tPmkxID0geHNjci0+aTEgKyBpMTsKKwkJCW0tPmNoZzEgPSB4c2NyLT5jaGcxOworCQkJbS0+aTIgPSB4c2NyLT5pMiArIGkyOworCQkJbS0+Y2hnMiA9IHhzY3ItPmNoZzI7CisJCX0KKwkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCXhkbF9mcmVlX3NjcmlwdCh4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGluZV9jb250YWluc19hbG51bShjb25zdCBjaGFyICpwdHIsIGxvbmcgc2l6ZSkKK3sKKwl3aGlsZSAoc2l6ZS0tKQorCQlpZiAoaXNhbG51bSgodW5zaWduZWQgY2hhcikqKHB0cisrKSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW5lc19jb250YWluX2FsbnVtKHhkZmVudl90ICp4ZSwgaW50IGksIGludCBjaGcpCit7CisJZm9yICg7IGNoZzsgY2hnLS0sIGkrKykKKwkJaWYgKGxpbmVfY29udGFpbnNfYWxudW0oeGUtPnhkZjIucmVjc1tpXS0+cHRyLAorCQkJCXhlLT54ZGYyLnJlY3NbaV0tPnNpemUpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG1lcmdlcyBtIGFuZCBtLT5uZXh0LCBtYXJraW5nIGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aG9zZSBodW5rcworICogYXMgY29uZmxpY3RpbmcsIHRvby4KKyAqLworc3RhdGljIHZvaWQgeGRsX21lcmdlX3R3b19jb25mbGljdHMoeGRtZXJnZV90ICptKQoreworCXhkbWVyZ2VfdCAqbmV4dF9tID0gbS0+bmV4dDsKKwltLT5jaGcxID0gbmV4dF9tLT5pMSArIG5leHRfbS0+Y2hnMSAtIG0tPmkxOworCW0tPmNoZzIgPSBuZXh0X20tPmkyICsgbmV4dF9tLT5jaGcyIC0gbS0+aTI7CisJbS0+bmV4dCA9IG5leHRfbS0+bmV4dDsKKwlmcmVlKG5leHRfbSk7Cit9CisKKy8qCisgKiBJZiB0aGVyZSBhcmUgbGVzcyB0aGFuIDMgbm9uLWNvbmZsaWN0aW5nIGxpbmVzIGJldHdlZW4gY29uZmxpY3RzLAorICogaXQgYXBwZWFycyBzaW1wbGVyIC0tIGJlY2F1c2UgaXQgdGFrZXMgdXAgbGVzcyAob3IgYXMgbWFueSkgbGluZXMgLS0KKyAqIGlmIHRoZSBsaW5lcyBhcmUgbW92ZWQgaW50byB0aGUgY29uZmxpY3RzLgorICovCitzdGF0aWMgaW50IHhkbF9zaW1wbGlmeV9ub25fY29uZmxpY3RzKHhkZmVudl90ICp4ZTEsIHhkbWVyZ2VfdCAqbSwKKwkJCQkgICAgICBpbnQgc2ltcGxpZnlfaWZfbm9fYWxudW0pCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAoIW0pCisJCXJldHVybiByZXN1bHQ7CisJZm9yICg7OykgeworCQl4ZG1lcmdlX3QgKm5leHRfbSA9IG0tPm5leHQ7CisJCWludCBiZWdpbiwgZW5kOworCisJCWlmICghbmV4dF9tKQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQliZWdpbiA9IG0tPmkxICsgbS0+Y2hnMTsKKwkJZW5kID0gbmV4dF9tLT5pMTsKKworCQlpZiAobS0+bW9kZSAhPSAwIHx8IG5leHRfbS0+bW9kZSAhPSAwIHx8CisJCSAgICAoZW5kIC0gYmVnaW4gPiAzICYmCisJCSAgICAgKCFzaW1wbGlmeV9pZl9ub19hbG51bSB8fAorCQkgICAgICBsaW5lc19jb250YWluX2FsbnVtKHhlMSwgYmVnaW4sIGVuZCAtIGJlZ2luKSkpKSB7CisJCQltID0gbmV4dF9tOworCQl9IGVsc2UgeworCQkJcmVzdWx0Kys7CisJCQl4ZGxfbWVyZ2VfdHdvX2NvbmZsaWN0cyhtKTsKKwkJfQorCX0KK30KKworLyoKKyAqIGxldmVsID09IDA6IG1hcmsgYWxsIG92ZXJsYXBwaW5nIGNoYW5nZXMgYXMgY29uZmxpY3QKKyAqIGxldmVsID09IDE6IG1hcmsgb3ZlcmxhcHBpbmcgY2hhbmdlcyBhcyBjb25mbGljdCBvbmx5IGlmIG5vdCBpZGVudGljYWwKKyAqIGxldmVsID09IDI6IGFuYWx5emUgbm9uLWlkZW50aWNhbCBjaGFuZ2VzIGZvciBtaW5pbWFsIGNvbmZsaWN0IHNldAorICogbGV2ZWwgPT0gMzogYW5hbHl6ZSBub24taWRlbnRpY2FsIGNoYW5nZXMgZm9yIG1pbmltYWwgY29uZmxpY3Qgc2V0LCBidXQKKyAqICAgICAgICAgICAgIHRyZWF0IGh1bmtzIG5vdCBjb250YWluaW5nIGFueSBsZXR0ZXIgb3IgbnVtYmVyIGFzIGNvbmZsaWN0aW5nCisgKgorICogcmV0dXJucyA8IDAgb24gZXJyb3IsID09IDAgZm9yIG5vIGNvbmZsaWN0cywgZWxzZSBudW1iZXIgb2YgY29uZmxpY3RzCisgKi8KK3N0YXRpYyBpbnQgeGRsX2RvX21lcmdlKHhkZmVudl90ICp4ZTEsIHhkY2hhbmdlX3QgKnhzY3IxLAorCQl4ZGZlbnZfdCAqeGUyLCB4ZGNoYW5nZV90ICp4c2NyMiwKKwkJeG1wYXJhbV90IGNvbnN0ICp4bXAsIG1tYnVmZmVyX3QgKnJlc3VsdCkKK3sKKwl4ZG1lcmdlX3QgKmNoYW5nZXMsICpjOworCXhwcGFyYW1fdCBjb25zdCAqeHBwID0gJnhtcC0+eHBwOworCWNvbnN0IGNoYXIgKmNvbnN0IGFuY2VzdG9yX25hbWUgPSB4bXAtPmFuY2VzdG9yOworCWNvbnN0IGNoYXIgKmNvbnN0IG5hbWUxID0geG1wLT5maWxlMTsKKwljb25zdCBjaGFyICpjb25zdCBuYW1lMiA9IHhtcC0+ZmlsZTI7CisJaW50IGkwLCBpMSwgaTIsIGNoZzAsIGNoZzEsIGNoZzI7CisJaW50IGxldmVsID0geG1wLT5sZXZlbDsKKwlpbnQgc3R5bGUgPSB4bXAtPnN0eWxlOworCWludCBmYXZvciA9IHhtcC0+ZmF2b3I7CisKKwlpZiAoc3R5bGUgPT0gWERMX01FUkdFX0RJRkYzKSB7CisJCS8qCisJCSAqICJkaWZmMyAtbSIgb3V0cHV0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIGFueXRoaW5nCisJCSAqIG1vcmUgYWdncmVzc2l2ZSB0aGFuIFhETF9NRVJHRV9FQUdFUi4KKwkJICovCisJCWlmIChYRExfTUVSR0VfRUFHRVIgPCBsZXZlbCkKKwkJCWxldmVsID0gWERMX01FUkdFX0VBR0VSOworCX0KKworCWMgPSBjaGFuZ2VzID0gTlVMTDsKKworCXdoaWxlICh4c2NyMSAmJiB4c2NyMikgeworCQlpZiAoIWNoYW5nZXMpCisJCQljaGFuZ2VzID0gYzsKKwkJaWYgKHhzY3IxLT5pMSArIHhzY3IxLT5jaGcxIDwgeHNjcjItPmkxKSB7CisJCQlpMCA9IHhzY3IxLT5pMTsKKwkJCWkxID0geHNjcjEtPmkyOworCQkJaTIgPSB4c2NyMi0+aTIgLSB4c2NyMi0+aTEgKyB4c2NyMS0+aTE7CisJCQljaGcwID0geHNjcjEtPmNoZzE7CisJCQljaGcxID0geHNjcjEtPmNoZzI7CisJCQljaGcyID0geHNjcjEtPmNoZzE7CisJCQlpZiAoeGRsX2FwcGVuZF9tZXJnZSgmYywgMSwKKwkJCQkJICAgICBpMCwgY2hnMCwgaTEsIGNoZzEsIGkyLCBjaGcyKSkgeworCQkJCXhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXhzY3IxID0geHNjcjEtPm5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoeHNjcjItPmkxICsgeHNjcjItPmNoZzEgPCB4c2NyMS0+aTEpIHsKKwkJCWkwID0geHNjcjItPmkxOworCQkJaTEgPSB4c2NyMS0+aTIgLSB4c2NyMS0+aTEgKyB4c2NyMi0+aTE7CisJCQlpMiA9IHhzY3IyLT5pMjsKKwkJCWNoZzAgPSB4c2NyMi0+Y2hnMTsKKwkJCWNoZzEgPSB4c2NyMi0+Y2hnMTsKKwkJCWNoZzIgPSB4c2NyMi0+Y2hnMjsKKwkJCWlmICh4ZGxfYXBwZW5kX21lcmdlKCZjLCAyLAorCQkJCQkgICAgIGkwLCBjaGcwLCBpMSwgY2hnMSwgaTIsIGNoZzIpKSB7CisJCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJeHNjcjIgPSB4c2NyMi0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsZXZlbCA9PSBYRExfTUVSR0VfTUlOSU1BTCB8fCB4c2NyMS0+aTEgIT0geHNjcjItPmkxIHx8CisJCQkJeHNjcjEtPmNoZzEgIT0geHNjcjItPmNoZzEgfHwKKwkJCQl4c2NyMS0+Y2hnMiAhPSB4c2NyMi0+Y2hnMiB8fAorCQkJCXhkbF9tZXJnZV9jbXBfbGluZXMoeGUxLCB4c2NyMS0+aTIsCisJCQkJCXhlMiwgeHNjcjItPmkyLAorCQkJCQl4c2NyMS0+Y2hnMiwgeHBwLT5mbGFncykpIHsKKwkJCS8qIGNvbmZsaWN0ICovCisJCQlpbnQgb2ZmID0geHNjcjEtPmkxIC0geHNjcjItPmkxOworCQkJaW50IGZmbyA9IG9mZiArIHhzY3IxLT5jaGcxIC0geHNjcjItPmNoZzE7CisKKwkJCWkwID0geHNjcjEtPmkxOworCQkJaTEgPSB4c2NyMS0+aTI7CisJCQlpMiA9IHhzY3IyLT5pMjsKKwkJCWlmIChvZmYgPiAwKSB7CisJCQkJaTAgLT0gb2ZmOworCQkJCWkxIC09IG9mZjsKKwkJCX0KKwkJCWVsc2UKKwkJCQlpMiArPSBvZmY7CisJCQljaGcwID0geHNjcjEtPmkxICsgeHNjcjEtPmNoZzEgLSBpMDsKKwkJCWNoZzEgPSB4c2NyMS0+aTIgKyB4c2NyMS0+Y2hnMiAtIGkxOworCQkJY2hnMiA9IHhzY3IyLT5pMiArIHhzY3IyLT5jaGcyIC0gaTI7CisJCQlpZiAoZmZvIDwgMCkgeworCQkJCWNoZzAgLT0gZmZvOworCQkJCWNoZzEgLT0gZmZvOworCQkJfSBlbHNlCisJCQkJY2hnMiArPSBmZm87CisJCQlpZiAoeGRsX2FwcGVuZF9tZXJnZSgmYywgMCwKKwkJCQkJICAgICBpMCwgY2hnMCwgaTEsIGNoZzEsIGkyLCBjaGcyKSkgeworCQkJCXhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCisJCWkxID0geHNjcjEtPmkxICsgeHNjcjEtPmNoZzE7CisJCWkyID0geHNjcjItPmkxICsgeHNjcjItPmNoZzE7CisKKwkJaWYgKGkxID49IGkyKQorCQkJeHNjcjIgPSB4c2NyMi0+bmV4dDsKKwkJaWYgKGkyID49IGkxKQorCQkJeHNjcjEgPSB4c2NyMS0+bmV4dDsKKwl9CisJd2hpbGUgKHhzY3IxKSB7CisJCWlmICghY2hhbmdlcykKKwkJCWNoYW5nZXMgPSBjOworCQlpMCA9IHhzY3IxLT5pMTsKKwkJaTEgPSB4c2NyMS0+aTI7CisJCWkyID0geHNjcjEtPmkxICsgeGUyLT54ZGYyLm5yZWMgLSB4ZTItPnhkZjEubnJlYzsKKwkJY2hnMCA9IHhzY3IxLT5jaGcxOworCQljaGcxID0geHNjcjEtPmNoZzI7CisJCWNoZzIgPSB4c2NyMS0+Y2hnMTsKKwkJaWYgKHhkbF9hcHBlbmRfbWVyZ2UoJmMsIDEsCisJCQkJICAgICBpMCwgY2hnMCwgaTEsIGNoZzEsIGkyLCBjaGcyKSkgeworCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJeHNjcjEgPSB4c2NyMS0+bmV4dDsKKwl9CisJd2hpbGUgKHhzY3IyKSB7CisJCWlmICghY2hhbmdlcykKKwkJCWNoYW5nZXMgPSBjOworCQlpMCA9IHhzY3IyLT5pMTsKKwkJaTEgPSB4c2NyMi0+aTEgKyB4ZTEtPnhkZjIubnJlYyAtIHhlMS0+eGRmMS5ucmVjOworCQlpMiA9IHhzY3IyLT5pMjsKKwkJY2hnMCA9IHhzY3IyLT5jaGcxOworCQljaGcxID0geHNjcjItPmNoZzE7CisJCWNoZzIgPSB4c2NyMi0+Y2hnMjsKKwkJaWYgKHhkbF9hcHBlbmRfbWVyZ2UoJmMsIDIsCisJCQkJICAgICBpMCwgY2hnMCwgaTEsIGNoZzEsIGkyLCBjaGcyKSkgeworCQkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJeHNjcjIgPSB4c2NyMi0+bmV4dDsKKwl9CisJaWYgKCFjaGFuZ2VzKQorCQljaGFuZ2VzID0gYzsKKwkvKiByZWZpbmUgY29uZmxpY3RzICovCisJaWYgKFhETF9NRVJHRV9aRUFMT1VTIDw9IGxldmVsICYmCisJICAgICh4ZGxfcmVmaW5lX2NvbmZsaWN0cyh4ZTEsIHhlMiwgY2hhbmdlcywgeHBwKSA8IDAgfHwKKwkgICAgIHhkbF9zaW1wbGlmeV9ub25fY29uZmxpY3RzKHhlMSwgY2hhbmdlcywKKwkJCQkJWERMX01FUkdFX1pFQUxPVVMgPCBsZXZlbCkgPCAwKSkgeworCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBvdXRwdXQgKi8KKwlpZiAocmVzdWx0KSB7CisJCWludCBtYXJrZXJfc2l6ZSA9IHhtcC0+bWFya2VyX3NpemU7CisJCWludCBzaXplID0geGRsX2ZpbGxfbWVyZ2VfYnVmZmVyKHhlMSwgbmFtZTEsIHhlMiwgbmFtZTIsCisJCQkJCQkgYW5jZXN0b3JfbmFtZSwKKwkJCQkJCSBmYXZvciwgY2hhbmdlcywgTlVMTCwgc3R5bGUsCisJCQkJCQkgbWFya2VyX3NpemUpOworCQlyZXN1bHQtPnB0ciA9IHhkbF9tYWxsb2Moc2l6ZSk7CisJCWlmICghcmVzdWx0LT5wdHIpIHsKKwkJCXhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXJlc3VsdC0+c2l6ZSA9IHNpemU7CisJCXhkbF9maWxsX21lcmdlX2J1ZmZlcih4ZTEsIG5hbWUxLCB4ZTIsIG5hbWUyLAorCQkJCSAgICAgIGFuY2VzdG9yX25hbWUsIGZhdm9yLCBjaGFuZ2VzLAorCQkJCSAgICAgIHJlc3VsdC0+cHRyLCBzdHlsZSwgbWFya2VyX3NpemUpOworCX0KKwlyZXR1cm4geGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7Cit9CisKK2ludCB4ZGxfbWVyZ2UobW1maWxlX3QgKm9yaWcsIG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsCisJCXhtcGFyYW1fdCBjb25zdCAqeG1wLCBtbWJ1ZmZlcl90ICpyZXN1bHQpCit7CisJeGRjaGFuZ2VfdCAqeHNjcjEsICp4c2NyMjsKKwl4ZGZlbnZfdCB4ZTEsIHhlMjsKKwlpbnQgc3RhdHVzOworCXhwcGFyYW1fdCBjb25zdCAqeHBwID0gJnhtcC0+eHBwOworCisJcmVzdWx0LT5wdHIgPSBOVUxMOworCXJlc3VsdC0+c2l6ZSA9IDA7CisKKwlpZiAoeGRsX2RvX2RpZmYob3JpZywgbWYxLCB4cHAsICZ4ZTEpIDwgMCkgeworCQlyZXR1cm4gLTE7CisJfQorCWlmICh4ZGxfZG9fZGlmZihvcmlnLCBtZjIsIHhwcCwgJnhlMikgPCAwKSB7CisJCXhkbF9mcmVlX2VudigmeGUxKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZTEueGRmMSwgJnhlMS54ZGYyLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZTEueGRmMiwgJnhlMS54ZGYxLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2J1aWxkX3NjcmlwdCgmeGUxLCAmeHNjcjEpIDwgMCkgeworCQl4ZGxfZnJlZV9lbnYoJnhlMSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUyLnhkZjEsICZ4ZTIueGRmMiwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUyLnhkZjIsICZ4ZTIueGRmMSwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9idWlsZF9zY3JpcHQoJnhlMiwgJnhzY3IyKSA8IDApIHsKKwkJeGRsX2ZyZWVfc2NyaXB0KHhzY3IxKTsKKwkJeGRsX2ZyZWVfZW52KCZ4ZTEpOworCQl4ZGxfZnJlZV9lbnYoJnhlMik7CisJCXJldHVybiAtMTsKKwl9CisJc3RhdHVzID0gMDsKKwlpZiAoIXhzY3IxKSB7CisJCXJlc3VsdC0+cHRyID0geGRsX21hbGxvYyhtZjItPnNpemUpOworCQltZW1jcHkocmVzdWx0LT5wdHIsIG1mMi0+cHRyLCBtZjItPnNpemUpOworCQlyZXN1bHQtPnNpemUgPSBtZjItPnNpemU7CisJfSBlbHNlIGlmICgheHNjcjIpIHsKKwkJcmVzdWx0LT5wdHIgPSB4ZGxfbWFsbG9jKG1mMS0+c2l6ZSk7CisJCW1lbWNweShyZXN1bHQtPnB0ciwgbWYxLT5wdHIsIG1mMS0+c2l6ZSk7CisJCXJlc3VsdC0+c2l6ZSA9IG1mMS0+c2l6ZTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSB4ZGxfZG9fbWVyZ2UoJnhlMSwgeHNjcjEsCisJCQkJICAgICAgJnhlMiwgeHNjcjIsCisJCQkJICAgICAgeG1wLCByZXN1bHQpOworCX0KKwl4ZGxfZnJlZV9zY3JpcHQoeHNjcjEpOworCXhkbF9mcmVlX3NjcmlwdCh4c2NyMik7CisKKwl4ZGxfZnJlZV9lbnYoJnhlMSk7CisJeGRsX2ZyZWVfZW52KCZ4ZTIpOworCisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL3hkaWZmL3hwYXRpZW5jZS5jIGIveGRpZmYveHBhdGllbmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1NjAxYgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hwYXRpZW5jZS5jCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTYgRGF2aWRlIExpYmVuemksIEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisKKy8qCisgKiBUaGUgYmFzaWMgaWRlYSBvZiBwYXRpZW5jZSBkaWZmIGlzIHRvIGZpbmQgbGluZXMgdGhhdCBhcmUgdW5pcXVlIGluCisgKiBib3RoIGZpbGVzLiAgVGhlc2UgYXJlIGludHVpdGl2ZWx5IHRoZSBvbmVzIHRoYXQgd2Ugd2FudCB0byBzZWUgYXMKKyAqIGNvbW1vbiBsaW5lcy4KKyAqCisgKiBUaGUgbWF4aW1hbCBvcmRlcmVkIHNlcXVlbmNlIG9mIHN1Y2ggbGluZSBwYWlycyAod2hlcmUgb3JkZXJlZCBtZWFucworICogdGhhdCB0aGUgb3JkZXIgaW4gdGhlIHNlcXVlbmNlIGFncmVlcyB3aXRoIHRoZSBvcmRlciBvZiB0aGUgbGluZXMgaW4KKyAqIGJvdGggZmlsZXMpIG5hdHVyYWxseSBkZWZpbmVzIGFuIGluaXRpYWwgc2V0IG9mIGNvbW1vbiBsaW5lcy4KKyAqCisgKiBOb3csIHRoZSBhbGdvcml0aG0gdHJpZXMgdG8gZXh0ZW5kIHRoZSBzZXQgb2YgY29tbW9uIGxpbmVzIGJ5IGdyb3dpbmcKKyAqIHRoZSBsaW5lIHJhbmdlcyB3aGVyZSB0aGUgZmlsZXMgaGF2ZSBpZGVudGljYWwgbGluZXMuCisgKgorICogQmV0d2VlbiB0aG9zZSBjb21tb24gbGluZXMsIHRoZSBwYXRpZW5jZSBkaWZmIGFsZ29yaXRobSBpcyBhcHBsaWVkCisgKiByZWN1cnNpdmVseSwgdW50aWwgbm8gdW5pcXVlIGxpbmUgcGFpcnMgY2FuIGJlIGZvdW5kOyB0aGVzZSBsaW5lIHJhbmdlcworICogYXJlIGhhbmRsZWQgYnkgdGhlIHdlbGwta25vd24gTXllcnMgYWxnb3JpdGhtLgorICovCisKKyNkZWZpbmUgTk9OX1VOSVFVRSBVTE9OR19NQVgKKworLyoKKyAqIFRoaXMgaXMgYSBoYXNoIG1hcHBpbmcgZnJvbSBsaW5lIGhhc2ggdG8gbGluZSBudW1iZXJzIGluIHRoZSBmaXJzdCBhbmQKKyAqIHNlY29uZCBmaWxlLgorICovCitzdHJ1Y3QgaGFzaG1hcCB7CisJaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgZW50cnkgeworCQl1bnNpZ25lZCBsb25nIGhhc2g7CisJCS8qCisJCSAqIDAgPSB1bnVzZWQgZW50cnksIDEgPSBmaXJzdCBsaW5lLCAyID0gc2Vjb25kLCBldGMuCisJCSAqIGxpbmUyIGlzIE5PTl9VTklRVUUgaWYgdGhlIGxpbmUgaXMgbm90IHVuaXF1ZQorCQkgKiBpbiBlaXRoZXIgdGhlIGZpcnN0IG9yIHRoZSBzZWNvbmQgZmlsZS4KKwkJICovCisJCXVuc2lnbmVkIGxvbmcgbGluZTEsIGxpbmUyOworCQkvKgorCQkgKiAibmV4dCIgJiAicHJldmlvdXMiIGFyZSB1c2VkIGZvciB0aGUgbG9uZ2VzdCBjb21tb24KKwkJICogc2VxdWVuY2U7CisJCSAqIGluaXRpYWxseSwgIm5leHQiIHJlZmxlY3RzIG9ubHkgdGhlIG9yZGVyIGluIGZpbGUxLgorCQkgKi8KKwkJc3RydWN0IGVudHJ5ICpuZXh0LCAqcHJldmlvdXM7CisKKwkJLyoKKwkJICogSWYgMSwgdGhpcyBlbnRyeSBjYW4gc2VydmUgYXMgYW4gYW5jaG9yLiBTZWUKKwkJICogRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCQkgKi8KKwkJdW5zaWduZWQgYW5jaG9yIDogMTsKKwl9ICplbnRyaWVzLCAqZmlyc3QsICpsYXN0OworCS8qIHdlcmUgY29tbW9uIHJlY29yZHMgZm91bmQ/ICovCisJdW5zaWduZWQgbG9uZyBoYXNfbWF0Y2hlczsKKwltbWZpbGVfdCAqZmlsZTEsICpmaWxlMjsKKwl4ZGZlbnZfdCAqZW52OworCXhwcGFyYW1fdCBjb25zdCAqeHBwOworfTsKKworc3RhdGljIGludCBpc19hbmNob3IoeHBwYXJhbV90IGNvbnN0ICp4cHAsIGNvbnN0IGNoYXIgKmxpbmUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHhwcC0+YW5jaG9yc19ucjsgaSsrKSB7CisJCWlmICghc3RybmNtcChsaW5lLCB4cHAtPmFuY2hvcnNbaV0sIHN0cmxlbih4cHAtPmFuY2hvcnNbaV0pKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogVGhlIGFyZ3VtZW50ICJwYXNzIiBpcyAxIGZvciB0aGUgZmlyc3QgZmlsZSwgMiBmb3IgdGhlIHNlY29uZC4gKi8KK3N0YXRpYyB2b2lkIGluc2VydF9yZWNvcmQoeHBwYXJhbV90IGNvbnN0ICp4cHAsIGludCBsaW5lLCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQkJICBpbnQgcGFzcykKK3sKKwl4cmVjb3JkX3QgKipyZWNvcmRzID0gcGFzcyA9PSAxID8KKwkJbWFwLT5lbnYtPnhkZjEucmVjcyA6IG1hcC0+ZW52LT54ZGYyLnJlY3M7CisJeHJlY29yZF90ICpyZWNvcmQgPSByZWNvcmRzW2xpbmUgLSAxXSwgKm90aGVyOworCS8qCisJICogQWZ0ZXIgeGRsX3ByZXBhcmVfZW52KCkgKG9yIG1vcmUgcHJlY2lzZWx5LCBkdWUgdG8KKwkgKiB4ZGxfY2xhc3NpZnlfcmVjb3JkKCkpLCB0aGUgImhhIiBtZW1iZXIgb2YgdGhlIHJlY29yZHMgKEFLQSBsaW5lcykKKwkgKiBpcyBfbm90XyB0aGUgaGFzaCBhbnltb3JlLCBidXQgYSBsaW5lYXJpemVkIHZlcnNpb24gb2YgaXQuICBJbgorCSAqIG90aGVyIHdvcmRzLCB0aGUgImhhIiBtZW1iZXIgaXMgZ3VhcmFudGVlZCB0byBzdGFydCB3aXRoIDAgYW5kCisJICogdGhlIHNlY29uZCByZWNvcmQncyBoYSBjYW4gb25seSBiZSAwIG9yIDEsIGV0Yy4KKwkgKgorCSAqIFNvIHdlIG11bHRpcGx5IGhhIGJ5IDIgaW4gdGhlIGhvcGUgdGhhdCB0aGUgaGFzaGluZyB3YXMKKwkgKiAidW5pcXVlIGVub3VnaCIuCisJICovCisJaW50IGluZGV4ID0gKGludCkoKHJlY29yZC0+aGEgPDwgMSkgJSBtYXAtPmFsbG9jKTsKKworCXdoaWxlIChtYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUxKSB7CisJCW90aGVyID0gbWFwLT5lbnYtPnhkZjEucmVjc1ttYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUxIC0gMV07CisJCWlmIChtYXAtPmVudHJpZXNbaW5kZXhdLmhhc2ggIT0gcmVjb3JkLT5oYSB8fAorCQkJCSF4ZGxfcmVjbWF0Y2gocmVjb3JkLT5wdHIsIHJlY29yZC0+c2l6ZSwKKwkJCQkJb3RoZXItPnB0ciwgb3RoZXItPnNpemUsCisJCQkJCW1hcC0+eHBwLT5mbGFncykpIHsKKwkJCWlmICgrK2luZGV4ID49IG1hcC0+YWxsb2MpCisJCQkJaW5kZXggPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHBhc3MgPT0gMikKKwkJCW1hcC0+aGFzX21hdGNoZXMgPSAxOworCQlpZiAocGFzcyA9PSAxIHx8IG1hcC0+ZW50cmllc1tpbmRleF0ubGluZTIpCisJCQltYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUyID0gTk9OX1VOSVFVRTsKKwkJZWxzZQorCQkJbWFwLT5lbnRyaWVzW2luZGV4XS5saW5lMiA9IGxpbmU7CisJCXJldHVybjsKKwl9CisJaWYgKHBhc3MgPT0gMikKKwkJcmV0dXJuOworCW1hcC0+ZW50cmllc1tpbmRleF0ubGluZTEgPSBsaW5lOworCW1hcC0+ZW50cmllc1tpbmRleF0uaGFzaCA9IHJlY29yZC0+aGE7CisJbWFwLT5lbnRyaWVzW2luZGV4XS5hbmNob3IgPSBpc19hbmNob3IoeHBwLCBtYXAtPmVudi0+eGRmMS5yZWNzW2xpbmUgLSAxXS0+cHRyKTsKKwlpZiAoIW1hcC0+Zmlyc3QpCisJCW1hcC0+Zmlyc3QgPSBtYXAtPmVudHJpZXMgKyBpbmRleDsKKwlpZiAobWFwLT5sYXN0KSB7CisJCW1hcC0+bGFzdC0+bmV4dCA9IG1hcC0+ZW50cmllcyArIGluZGV4OworCQltYXAtPmVudHJpZXNbaW5kZXhdLnByZXZpb3VzID0gbWFwLT5sYXN0OworCX0KKwltYXAtPmxhc3QgPSBtYXAtPmVudHJpZXMgKyBpbmRleDsKKwltYXAtPm5yKys7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgZm9yIGVhY2ggcmVjdXJzaW9uIGludG8gdGhlIGludGVyLWh1bmsKKyAqIHBhcnRzLCBhcyBwcmV2aW91c2x5IG5vbi11bmlxdWUgbGluZXMgY2FuIGJlY29tZSB1bmlxdWUgd2hlbiBiZWluZworICogcmVzdHJpY3RlZCB0byBhIHNtYWxsZXIgcGFydCBvZiB0aGUgZmlsZXMuCisgKgorICogSXQgaXMgYXNzdW1lZCB0aGF0IGVudiBoYXMgYmVlbiBwcmVwYXJlZCB1c2luZyB4ZGxfcHJlcGFyZSgpLgorICovCitzdGF0aWMgaW50IGZpbGxfaGFzaG1hcChtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJCXN0cnVjdCBoYXNobWFwICpyZXN1bHQsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXJlc3VsdC0+ZmlsZTEgPSBmaWxlMTsKKwlyZXN1bHQtPmZpbGUyID0gZmlsZTI7CisJcmVzdWx0LT54cHAgPSB4cHA7CisJcmVzdWx0LT5lbnYgPSBlbnY7CisKKwkvKiBXZSBrbm93IGV4YWN0bHkgaG93IGxhcmdlIHdlIHdhbnQgdGhlIGhhc2ggbWFwICovCisJcmVzdWx0LT5hbGxvYyA9IGNvdW50MSAqIDI7CisJcmVzdWx0LT5lbnRyaWVzID0gKHN0cnVjdCBlbnRyeSAqKQorCQl4ZGxfbWFsbG9jKHJlc3VsdC0+YWxsb2MgKiBzaXplb2Yoc3RydWN0IGVudHJ5KSk7CisJaWYgKCFyZXN1bHQtPmVudHJpZXMpCisJCXJldHVybiAtMTsKKwltZW1zZXQocmVzdWx0LT5lbnRyaWVzLCAwLCByZXN1bHQtPmFsbG9jICogc2l6ZW9mKHN0cnVjdCBlbnRyeSkpOworCisJLyogRmlyc3QsIGZpbGwgd2l0aCBlbnRyaWVzIGZyb20gdGhlIGZpcnN0IGZpbGUgKi8KKwl3aGlsZSAoY291bnQxLS0pCisJCWluc2VydF9yZWNvcmQoeHBwLCBsaW5lMSsrLCByZXN1bHQsIDEpOworCisJLyogVGhlbiBzZWFyY2ggZm9yIG1hdGNoZXMgaW4gdGhlIHNlY29uZCBmaWxlICovCisJd2hpbGUgKGNvdW50Mi0tKQorCQlpbnNlcnRfcmVjb3JkKHhwcCwgbGluZTIrKywgcmVzdWx0LCAyKTsKKworCXJldHVybiAwOworfQorCisvKgorICogRmluZCB0aGUgbG9uZ2VzdCBzZXF1ZW5jZSB3aXRoIGEgc21hbGxlciBsYXN0IGVsZW1lbnQgKG1lYW5pbmcgYSBzbWFsbGVyCisgKiBsaW5lMiwgYXMgd2UgY29uc3RydWN0IHRoZSBzZXF1ZW5jZSB3aXRoIGVudHJpZXMgb3JkZXJlZCBieSBsaW5lMSkuCisgKi8KK3N0YXRpYyBpbnQgYmluYXJ5X3NlYXJjaChzdHJ1Y3QgZW50cnkgKipzZXF1ZW5jZSwgaW50IGxvbmdlc3QsCisJCXN0cnVjdCBlbnRyeSAqZW50cnkpCit7CisJaW50IGxlZnQgPSAtMSwgcmlnaHQgPSBsb25nZXN0OworCisJd2hpbGUgKGxlZnQgKyAxIDwgcmlnaHQpIHsKKwkJaW50IG1pZGRsZSA9IGxlZnQgKyAocmlnaHQgLSBsZWZ0KSAvIDI7CisJCS8qIGJ5IGNvbnN0cnVjdGlvbiwgbm8gdHdvIGVudHJpZXMgY2FuIGJlIGVxdWFsICovCisJCWlmIChzZXF1ZW5jZVttaWRkbGVdLT5saW5lMiA+IGVudHJ5LT5saW5lMikKKwkJCXJpZ2h0ID0gbWlkZGxlOworCQllbHNlCisJCQlsZWZ0ID0gbWlkZGxlOworCX0KKwkvKiByZXR1cm4gdGhlIGluZGV4IGluICJzZXF1ZW5jZSIsIF9ub3RfIHRoZSBzZXF1ZW5jZSBsZW5ndGggKi8KKwlyZXR1cm4gbGVmdDsKK30KKworLyoKKyAqIFRoZSBpZGVhIGlzIHRvIHN0YXJ0IHdpdGggdGhlIGxpc3Qgb2YgY29tbW9uIHVuaXF1ZSBsaW5lcyBzb3J0ZWQgYnkKKyAqIHRoZSBvcmRlciBpbiBmaWxlMS4gIEZvciBlYWNoIG9mIHRoZXNlIHBhaXJzLCB0aGUgbG9uZ2VzdCAocGFydGlhbCkKKyAqIHNlcXVlbmNlIHdob3NlIGxhc3QgZWxlbWVudCdzIGxpbmUyIGlzIHNtYWxsZXIgaXMgZGV0ZXJtaW5lZC4KKyAqCisgKiBGb3IgZWZmaWNpZW5jeSwgdGhlIHNlcXVlbmNlcyBhcmUga2VwdCBpbiBhIGxpc3QgY29udGFpbmluZyBleGFjdGx5IG9uZQorICogaXRlbSBwZXIgc2VxdWVuY2UgbGVuZ3RoOiB0aGUgc2VxdWVuY2Ugd2l0aCB0aGUgc21hbGxlc3QgbGFzdAorICogZWxlbWVudCAoaW4gdGVybXMgb2YgbGluZTIpLgorICovCitzdGF0aWMgc3RydWN0IGVudHJ5ICpmaW5kX2xvbmdlc3RfY29tbW9uX3NlcXVlbmNlKHN0cnVjdCBoYXNobWFwICptYXApCit7CisJc3RydWN0IGVudHJ5ICoqc2VxdWVuY2UgPSB4ZGxfbWFsbG9jKG1hcC0+bnIgKiBzaXplb2Yoc3RydWN0IGVudHJ5ICopKTsKKwlpbnQgbG9uZ2VzdCA9IDAsIGk7CisJc3RydWN0IGVudHJ5ICplbnRyeTsKKworCS8qCisJICogSWYgbm90IC0xLCB0aGlzIGVudHJ5IGluIHNlcXVlbmNlIG11c3QgbmV2ZXIgYmUgb3ZlcnJpZGRlbi4KKwkgKiBUaGVyZWZvcmUsIG92ZXJyaWRpbmcgZW50cmllcyBiZWZvcmUgdGhpcyBoYXMgbm8gZWZmZWN0LCBzbworCSAqIGRvIG5vdCBkbyB0aGF0IGVpdGhlci4KKwkgKi8KKwlpbnQgYW5jaG9yX2kgPSAtMTsKKworCWZvciAoZW50cnkgPSBtYXAtPmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkgeworCQlpZiAoIWVudHJ5LT5saW5lMiB8fCBlbnRyeS0+bGluZTIgPT0gTk9OX1VOSVFVRSkKKwkJCWNvbnRpbnVlOworCQlpID0gYmluYXJ5X3NlYXJjaChzZXF1ZW5jZSwgbG9uZ2VzdCwgZW50cnkpOworCQllbnRyeS0+cHJldmlvdXMgPSBpIDwgMCA/IE5VTEwgOiBzZXF1ZW5jZVtpXTsKKwkJKytpOworCQlpZiAoaSA8PSBhbmNob3JfaSkKKwkJCWNvbnRpbnVlOworCQlzZXF1ZW5jZVtpXSA9IGVudHJ5OworCQlpZiAoZW50cnktPmFuY2hvcikgeworCQkJYW5jaG9yX2kgPSBpOworCQkJbG9uZ2VzdCA9IGFuY2hvcl9pICsgMTsKKwkJfSBlbHNlIGlmIChpID09IGxvbmdlc3QpIHsKKwkJCWxvbmdlc3QrKzsKKwkJfQorCX0KKworCS8qIE5vIGNvbW1vbiB1bmlxdWUgbGluZXMgd2VyZSBmb3VuZCAqLworCWlmICghbG9uZ2VzdCkgeworCQl4ZGxfZnJlZShzZXF1ZW5jZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIEl0ZXJhdGUgc3RhcnRpbmcgYXQgdGhlIGxhc3QgZWxlbWVudCwgYWRqdXN0aW5nIHRoZSAibmV4dCIgbWVtYmVycyAqLworCWVudHJ5ID0gc2VxdWVuY2VbbG9uZ2VzdCAtIDFdOworCWVudHJ5LT5uZXh0ID0gTlVMTDsKKwl3aGlsZSAoZW50cnktPnByZXZpb3VzKSB7CisJCWVudHJ5LT5wcmV2aW91cy0+bmV4dCA9IGVudHJ5OworCQllbnRyeSA9IGVudHJ5LT5wcmV2aW91czsKKwl9CisJeGRsX2ZyZWUoc2VxdWVuY2UpOworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIGludCBtYXRjaChzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBpbnQgbGluZTEsIGludCBsaW5lMikKK3sKKwl4cmVjb3JkX3QgKnJlY29yZDEgPSBtYXAtPmVudi0+eGRmMS5yZWNzW2xpbmUxIC0gMV07CisJeHJlY29yZF90ICpyZWNvcmQyID0gbWFwLT5lbnYtPnhkZjIucmVjc1tsaW5lMiAtIDFdOworCXJldHVybiB4ZGxfcmVjbWF0Y2gocmVjb3JkMS0+cHRyLCByZWNvcmQxLT5zaXplLAorCQlyZWNvcmQyLT5wdHIsIHJlY29yZDItPnNpemUsIG1hcC0+eHBwLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcGF0aWVuY2VfZGlmZihtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKTsKKworc3RhdGljIGludCB3YWxrX2NvbW1vbl9zZXF1ZW5jZShzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBzdHJ1Y3QgZW50cnkgKmZpcnN0LAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwlpbnQgZW5kMSA9IGxpbmUxICsgY291bnQxLCBlbmQyID0gbGluZTIgKyBjb3VudDI7CisJaW50IG5leHQxLCBuZXh0MjsKKworCWZvciAoOzspIHsKKwkJLyogVHJ5IHRvIGdyb3cgdGhlIGxpbmUgcmFuZ2VzIG9mIGNvbW1vbiBsaW5lcyAqLworCQlpZiAoZmlyc3QpIHsKKwkJCW5leHQxID0gZmlyc3QtPmxpbmUxOworCQkJbmV4dDIgPSBmaXJzdC0+bGluZTI7CisJCQl3aGlsZSAobmV4dDEgPiBsaW5lMSAmJiBuZXh0MiA+IGxpbmUyICYmCisJCQkJCW1hdGNoKG1hcCwgbmV4dDEgLSAxLCBuZXh0MiAtIDEpKSB7CisJCQkJbmV4dDEtLTsKKwkJCQluZXh0Mi0tOworCQkJfQorCQl9IGVsc2UgeworCQkJbmV4dDEgPSBlbmQxOworCQkJbmV4dDIgPSBlbmQyOworCQl9CisJCXdoaWxlIChsaW5lMSA8IG5leHQxICYmIGxpbmUyIDwgbmV4dDIgJiYKKwkJCQltYXRjaChtYXAsIGxpbmUxLCBsaW5lMikpIHsKKwkJCWxpbmUxKys7CisJCQlsaW5lMisrOworCQl9CisKKwkJLyogUmVjdXJzZSAqLworCQlpZiAobmV4dDEgPiBsaW5lMSB8fCBuZXh0MiA+IGxpbmUyKSB7CisJCQlzdHJ1Y3QgaGFzaG1hcCBzdWJtYXA7CisKKwkJCW1lbXNldCgmc3VibWFwLCAwLCBzaXplb2Yoc3VibWFwKSk7CisJCQlpZiAocGF0aWVuY2VfZGlmZihtYXAtPmZpbGUxLCBtYXAtPmZpbGUyLAorCQkJCQltYXAtPnhwcCwgbWFwLT5lbnYsCisJCQkJCWxpbmUxLCBuZXh0MSAtIGxpbmUxLAorCQkJCQlsaW5lMiwgbmV4dDIgLSBsaW5lMikpCisJCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCFmaXJzdCkKKwkJCXJldHVybiAwOworCisJCXdoaWxlIChmaXJzdC0+bmV4dCAmJgorCQkJCWZpcnN0LT5uZXh0LT5saW5lMSA9PSBmaXJzdC0+bGluZTEgKyAxICYmCisJCQkJZmlyc3QtPm5leHQtPmxpbmUyID09IGZpcnN0LT5saW5lMiArIDEpCisJCQlmaXJzdCA9IGZpcnN0LT5uZXh0OworCisJCWxpbmUxID0gZmlyc3QtPmxpbmUxICsgMTsKKwkJbGluZTIgPSBmaXJzdC0+bGluZTIgKyAxOworCisJCWZpcnN0ID0gZmlyc3QtPm5leHQ7CisJfQorfQorCitzdGF0aWMgaW50IGZhbGxfYmFja190b19jbGFzc2ljX2RpZmYoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJeHBwYXJhbV90IHhwcDsKKwl4cHAuZmxhZ3MgPSBtYXAtPnhwcC0+ZmxhZ3MgJiB+WERGX0RJRkZfQUxHT1JJVEhNX01BU0s7CisKKwlyZXR1cm4geGRsX2ZhbGxfYmFja19kaWZmKG1hcC0+ZW52LCAmeHBwLAorCQkJCSAgbGluZTEsIGNvdW50MSwgbGluZTIsIGNvdW50Mik7Cit9CisKKy8qCisgKiBSZWN1cnNpdmVseSBmaW5kIHRoZSBsb25nZXN0IGNvbW1vbiBzZXF1ZW5jZSBvZiB1bmlxdWUgbGluZXMsCisgKiBhbmQgaWYgbm9uZSB3YXMgZm91bmQsIGFzayB4ZGxfZG9fZGlmZigpIHRvIGRvIHRoZSBqb2IuCisgKgorICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgZW52IHdhcyBwcmVwYXJlZCB3aXRoIHhkbF9wcmVwYXJlX2VudigpLgorICovCitzdGF0aWMgaW50IHBhdGllbmNlX2RpZmYobW1maWxlX3QgKmZpbGUxLCBtbWZpbGVfdCAqZmlsZTIsCisJCXhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52LAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwlzdHJ1Y3QgaGFzaG1hcCBtYXA7CisJc3RydWN0IGVudHJ5ICpmaXJzdDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCS8qIHRyaXZpYWwgY2FzZTogb25lIHNpZGUgaXMgZW1wdHkgKi8KKwlpZiAoIWNvdW50MSkgeworCQl3aGlsZShjb3VudDItLSkKKwkJCWVudi0+eGRmMi5yY2hnW2xpbmUyKysgLSAxXSA9IDE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIWNvdW50MikgeworCQl3aGlsZShjb3VudDEtLSkKKwkJCWVudi0+eGRmMS5yY2hnW2xpbmUxKysgLSAxXSA9IDE7CisJCXJldHVybiAwOworCX0KKworCW1lbXNldCgmbWFwLCAwLCBzaXplb2YobWFwKSk7CisJaWYgKGZpbGxfaGFzaG1hcChmaWxlMSwgZmlsZTIsIHhwcCwgZW52LCAmbWFwLAorCQkJbGluZTEsIGNvdW50MSwgbGluZTIsIGNvdW50MikpCisJCXJldHVybiAtMTsKKworCS8qIGFyZSB0aGVyZSBhbnkgbWF0Y2hpbmcgbGluZXMgYXQgYWxsPyAqLworCWlmICghbWFwLmhhc19tYXRjaGVzKSB7CisJCXdoaWxlKGNvdW50MS0tKQorCQkJZW52LT54ZGYxLnJjaGdbbGluZTErKyAtIDFdID0gMTsKKwkJd2hpbGUoY291bnQyLS0pCisJCQllbnYtPnhkZjIucmNoZ1tsaW5lMisrIC0gMV0gPSAxOworCQl4ZGxfZnJlZShtYXAuZW50cmllcyk7CisJCXJldHVybiAwOworCX0KKworCWZpcnN0ID0gZmluZF9sb25nZXN0X2NvbW1vbl9zZXF1ZW5jZSgmbWFwKTsKKwlpZiAoZmlyc3QpCisJCXJlc3VsdCA9IHdhbGtfY29tbW9uX3NlcXVlbmNlKCZtYXAsIGZpcnN0LAorCQkJbGluZTEsIGNvdW50MSwgbGluZTIsIGNvdW50Mik7CisJZWxzZQorCQlyZXN1bHQgPSBmYWxsX2JhY2tfdG9fY2xhc3NpY19kaWZmKCZtYXAsCisJCQlsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKTsKKworCXhkbF9mcmVlKG1hcC5lbnRyaWVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgeGRsX2RvX3BhdGllbmNlX2RpZmYobW1maWxlX3QgKmZpbGUxLCBtbWZpbGVfdCAqZmlsZTIsCisJCXhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52KQoreworCWlmICh4ZGxfcHJlcGFyZV9lbnYoZmlsZTEsIGZpbGUyLCB4cHAsIGVudikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBlbnZpcm9ubWVudCBpcyBjbGVhbmVkIHVwIGluIHhkbF9kaWZmKCkgKi8KKwlyZXR1cm4gcGF0aWVuY2VfZGlmZihmaWxlMSwgZmlsZTIsIHhwcCwgZW52LAorCQkJMSwgZW52LT54ZGYxLm5yZWMsIDEsIGVudi0+eGRmMi5ucmVjKTsKK30KZGlmZiAtLWdpdCBhL3hkaWZmL3hwcmVwYXJlLmMgYi94ZGlmZi94cHJlcGFyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZWI4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94cHJlcGFyZS5jCkBAIC0wLDAgKzEsNDgzIEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlCisgKiAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorCisKKyNkZWZpbmUgWERMX0tQRElTX1JVTiA0CisjZGVmaW5lIFhETF9NQVhfRVFMSU1JVCAxMDI0CisjZGVmaW5lIFhETF9TSU1TQ0FOX1dJTkRPVyAxMDAKKyNkZWZpbmUgWERMX0dVRVNTX05MSU5FUzEgMjU2CisjZGVmaW5lIFhETF9HVUVTU19OTElORVMyIDIwCisKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGxjbGFzcyB7CisJc3RydWN0IHNfeGRsY2xhc3MgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBoYTsKKwljaGFyIGNvbnN0ICpsaW5lOworCWxvbmcgc2l6ZTsKKwlsb25nIGlkeDsKKwlsb25nIGxlbjEsIGxlbjI7Cit9IHhkbGNsYXNzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRsY2xhc3NpZmllciB7CisJdW5zaWduZWQgaW50IGhiaXRzOworCWxvbmcgaHNpemU7CisJeGRsY2xhc3NfdCAqKnJjaGFzaDsKKwljaGFzdG9yZV90IG5jaGE7CisJeGRsY2xhc3NfdCAqKnJjcmVjczsKKwlsb25nIGFsbG9jOworCWxvbmcgY291bnQ7CisJbG9uZyBmbGFnczsKK30geGRsY2xhc3NpZmllcl90OworCisKKworCitzdGF0aWMgaW50IHhkbF9pbml0X2NsYXNzaWZpZXIoeGRsY2xhc3NpZmllcl90ICpjZiwgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkIHhkbF9mcmVlX2NsYXNzaWZpZXIoeGRsY2xhc3NpZmllcl90ICpjZik7CitzdGF0aWMgaW50IHhkbF9jbGFzc2lmeV9yZWNvcmQodW5zaWduZWQgaW50IHBhc3MsIHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhyZWNvcmRfdCAqKnJoYXNoLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBoYml0cywgeHJlY29yZF90ICpyZWMpOworc3RhdGljIGludCB4ZGxfcHJlcGFyZV9jdHgodW5zaWduZWQgaW50IHBhc3MsIG1tZmlsZV90ICptZiwgbG9uZyBuYXJlYywgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCQkgICB4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4ZGZpbGVfdCAqeGRmKTsKK3N0YXRpYyB2b2lkIHhkbF9mcmVlX2N0eCh4ZGZpbGVfdCAqeGRmKTsKK3N0YXRpYyBpbnQgeGRsX2NsZWFuX21tYXRjaChjaGFyIGNvbnN0ICpkaXMsIGxvbmcgaSwgbG9uZyBzLCBsb25nIGUpOworc3RhdGljIGludCB4ZGxfY2xlYW51cF9yZWNvcmRzKHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhkZmlsZV90ICp4ZGYxLCB4ZGZpbGVfdCAqeGRmMik7CitzdGF0aWMgaW50IHhkbF90cmltX2VuZHMoeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKTsKK3N0YXRpYyBpbnQgeGRsX29wdGltaXplX2N0eHMoeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKTsKKworCisKKworc3RhdGljIGludCB4ZGxfaW5pdF9jbGFzc2lmaWVyKHhkbGNsYXNzaWZpZXJfdCAqY2YsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncykgeworCWNmLT5mbGFncyA9IGZsYWdzOworCisJY2YtPmhiaXRzID0geGRsX2hhc2hiaXRzKCh1bnNpZ25lZCBpbnQpIHNpemUpOworCWNmLT5oc2l6ZSA9IDEgPDwgY2YtPmhiaXRzOworCisJaWYgKHhkbF9jaGFfaW5pdCgmY2YtPm5jaGEsIHNpemVvZih4ZGxjbGFzc190KSwgc2l6ZSAvIDQgKyAxKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCWlmICghKGNmLT5yY2hhc2ggPSAoeGRsY2xhc3NfdCAqKikgeGRsX21hbGxvYyhjZi0+aHNpemUgKiBzaXplb2YoeGRsY2xhc3NfdCAqKSkpKSB7CisKKwkJeGRsX2NoYV9mcmVlKCZjZi0+bmNoYSk7CisJCXJldHVybiAtMTsKKwl9CisJbWVtc2V0KGNmLT5yY2hhc2gsIDAsIGNmLT5oc2l6ZSAqIHNpemVvZih4ZGxjbGFzc190ICopKTsKKworCWNmLT5hbGxvYyA9IHNpemU7CisJaWYgKCEoY2YtPnJjcmVjcyA9ICh4ZGxjbGFzc190ICoqKSB4ZGxfbWFsbG9jKGNmLT5hbGxvYyAqIHNpemVvZih4ZGxjbGFzc190ICopKSkpIHsKKworCQl4ZGxfZnJlZShjZi0+cmNoYXNoKTsKKwkJeGRsX2NoYV9mcmVlKCZjZi0+bmNoYSk7CisJCXJldHVybiAtMTsKKwl9CisKKwljZi0+Y291bnQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgeGRsX2ZyZWVfY2xhc3NpZmllcih4ZGxjbGFzc2lmaWVyX3QgKmNmKSB7CisKKwl4ZGxfZnJlZShjZi0+cmNyZWNzKTsKKwl4ZGxfZnJlZShjZi0+cmNoYXNoKTsKKwl4ZGxfY2hhX2ZyZWUoJmNmLT5uY2hhKTsKK30KKworCitzdGF0aWMgaW50IHhkbF9jbGFzc2lmeV9yZWNvcmQodW5zaWduZWQgaW50IHBhc3MsIHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhyZWNvcmRfdCAqKnJoYXNoLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBoYml0cywgeHJlY29yZF90ICpyZWMpIHsKKwlsb25nIGhpOworCWNoYXIgY29uc3QgKmxpbmU7CisJeGRsY2xhc3NfdCAqcmNyZWM7CisJeGRsY2xhc3NfdCAqKnJjcmVjczsKKworCWxpbmUgPSByZWMtPnB0cjsKKwloaSA9IChsb25nKSBYRExfSEFTSExPTkcocmVjLT5oYSwgY2YtPmhiaXRzKTsKKwlmb3IgKHJjcmVjID0gY2YtPnJjaGFzaFtoaV07IHJjcmVjOyByY3JlYyA9IHJjcmVjLT5uZXh0KQorCQlpZiAocmNyZWMtPmhhID09IHJlYy0+aGEgJiYKKwkJCQl4ZGxfcmVjbWF0Y2gocmNyZWMtPmxpbmUsIHJjcmVjLT5zaXplLAorCQkJCQlyZWMtPnB0ciwgcmVjLT5zaXplLCBjZi0+ZmxhZ3MpKQorCQkJYnJlYWs7CisKKwlpZiAoIXJjcmVjKSB7CisJCWlmICghKHJjcmVjID0geGRsX2NoYV9hbGxvYygmY2YtPm5jaGEpKSkgeworCisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmNyZWMtPmlkeCA9IGNmLT5jb3VudCsrOworCQlpZiAoY2YtPmNvdW50ID4gY2YtPmFsbG9jKSB7CisJCQljZi0+YWxsb2MgKj0gMjsKKwkJCWlmICghKHJjcmVjcyA9ICh4ZGxjbGFzc190ICoqKSB4ZGxfcmVhbGxvYyhjZi0+cmNyZWNzLCBjZi0+YWxsb2MgKiBzaXplb2YoeGRsY2xhc3NfdCAqKSkpKSB7CisKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQljZi0+cmNyZWNzID0gcmNyZWNzOworCQl9CisJCWNmLT5yY3JlY3NbcmNyZWMtPmlkeF0gPSByY3JlYzsKKwkJcmNyZWMtPmxpbmUgPSBsaW5lOworCQlyY3JlYy0+c2l6ZSA9IHJlYy0+c2l6ZTsKKwkJcmNyZWMtPmhhID0gcmVjLT5oYTsKKwkJcmNyZWMtPmxlbjEgPSByY3JlYy0+bGVuMiA9IDA7CisJCXJjcmVjLT5uZXh0ID0gY2YtPnJjaGFzaFtoaV07CisJCWNmLT5yY2hhc2hbaGldID0gcmNyZWM7CisJfQorCisJKHBhc3MgPT0gMSkgPyByY3JlYy0+bGVuMSsrIDogcmNyZWMtPmxlbjIrKzsKKworCXJlYy0+aGEgPSAodW5zaWduZWQgbG9uZykgcmNyZWMtPmlkeDsKKworCWhpID0gKGxvbmcpIFhETF9IQVNITE9ORyhyZWMtPmhhLCBoYml0cyk7CisJcmVjLT5uZXh0ID0gcmhhc2hbaGldOworCXJoYXNoW2hpXSA9IHJlYzsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgeGRsX3ByZXBhcmVfY3R4KHVuc2lnbmVkIGludCBwYXNzLCBtbWZpbGVfdCAqbWYsIGxvbmcgbmFyZWMsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQkJICAgeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZikgeworCXVuc2lnbmVkIGludCBoYml0czsKKwlsb25nIG5yZWMsIGhzaXplLCBic2l6ZTsKKwl1bnNpZ25lZCBsb25nIGhhdjsKKwljaGFyIGNvbnN0ICpibGssICpjdXIsICp0b3AsICpwcmV2OworCXhyZWNvcmRfdCAqY3JlYzsKKwl4cmVjb3JkX3QgKipyZWNzLCAqKnJyZWNzOworCXhyZWNvcmRfdCAqKnJoYXNoOworCXVuc2lnbmVkIGxvbmcgKmhhOworCWNoYXIgKnJjaGc7CisJbG9uZyAqcmluZGV4OworCisJaGEgPSBOVUxMOworCXJpbmRleCA9IE5VTEw7CisJcmNoZyA9IE5VTEw7CisJcmhhc2ggPSBOVUxMOworCXJlY3MgPSBOVUxMOworCisJaWYgKHhkbF9jaGFfaW5pdCgmeGRmLT5yY2hhLCBzaXplb2YoeHJlY29yZF90KSwgbmFyZWMgLyA0ICsgMSkgPCAwKQorCQlnb3RvIGFib3J0OworCWlmICghKHJlY3MgPSAoeHJlY29yZF90ICoqKSB4ZGxfbWFsbG9jKG5hcmVjICogc2l6ZW9mKHhyZWNvcmRfdCAqKSkpKQorCQlnb3RvIGFib3J0OworCisJaWYgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSA9PSBYREZfSElTVE9HUkFNX0RJRkYpCisJCWhiaXRzID0gaHNpemUgPSAwOworCWVsc2UgeworCQloYml0cyA9IHhkbF9oYXNoYml0cygodW5zaWduZWQgaW50KSBuYXJlYyk7CisJCWhzaXplID0gMSA8PCBoYml0czsKKwkJaWYgKCEocmhhc2ggPSAoeHJlY29yZF90ICoqKSB4ZGxfbWFsbG9jKGhzaXplICogc2l6ZW9mKHhyZWNvcmRfdCAqKSkpKQorCQkJZ290byBhYm9ydDsKKwkJbWVtc2V0KHJoYXNoLCAwLCBoc2l6ZSAqIHNpemVvZih4cmVjb3JkX3QgKikpOworCX0KKworCW5yZWMgPSAwOworCWlmICgoY3VyID0gYmxrID0geGRsX21tZmlsZV9maXJzdChtZiwgJmJzaXplKSkgIT0gTlVMTCkgeworCQlmb3IgKHRvcCA9IGJsayArIGJzaXplOyBjdXIgPCB0b3A7ICkgeworCQkJcHJldiA9IGN1cjsKKwkJCWhhdiA9IHhkbF9oYXNoX3JlY29yZCgmY3VyLCB0b3AsIHhwcC0+ZmxhZ3MpOworCQkJaWYgKG5yZWMgPj0gbmFyZWMpIHsKKwkJCQluYXJlYyAqPSAyOworCQkJCWlmICghKHJyZWNzID0gKHhyZWNvcmRfdCAqKikgeGRsX3JlYWxsb2MocmVjcywgbmFyZWMgKiBzaXplb2YoeHJlY29yZF90ICopKSkpCisJCQkJCWdvdG8gYWJvcnQ7CisJCQkJcmVjcyA9IHJyZWNzOworCQkJfQorCQkJaWYgKCEoY3JlYyA9IHhkbF9jaGFfYWxsb2MoJnhkZi0+cmNoYSkpKQorCQkJCWdvdG8gYWJvcnQ7CisJCQljcmVjLT5wdHIgPSBwcmV2OworCQkJY3JlYy0+c2l6ZSA9IChsb25nKSAoY3VyIC0gcHJldik7CisJCQljcmVjLT5oYSA9IGhhdjsKKwkJCXJlY3NbbnJlYysrXSA9IGNyZWM7CisKKwkJCWlmICgoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpICE9IFhERl9ISVNUT0dSQU1fRElGRikgJiYKKwkJCSAgICB4ZGxfY2xhc3NpZnlfcmVjb3JkKHBhc3MsIGNmLCByaGFzaCwgaGJpdHMsIGNyZWMpIDwgMCkKKwkJCQlnb3RvIGFib3J0OworCQl9CisJfQorCisJaWYgKCEocmNoZyA9IChjaGFyICopIHhkbF9tYWxsb2MoKG5yZWMgKyAyKSAqIHNpemVvZihjaGFyKSkpKQorCQlnb3RvIGFib3J0OworCW1lbXNldChyY2hnLCAwLCAobnJlYyArIDIpICogc2l6ZW9mKGNoYXIpKTsKKworCWlmICghKHJpbmRleCA9IChsb25nICopIHhkbF9tYWxsb2MoKG5yZWMgKyAxKSAqIHNpemVvZihsb25nKSkpKQorCQlnb3RvIGFib3J0OworCWlmICghKGhhID0gKHVuc2lnbmVkIGxvbmcgKikgeGRsX21hbGxvYygobnJlYyArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpCisJCWdvdG8gYWJvcnQ7CisKKwl4ZGYtPm5yZWMgPSBucmVjOworCXhkZi0+cmVjcyA9IHJlY3M7CisJeGRmLT5oYml0cyA9IGhiaXRzOworCXhkZi0+cmhhc2ggPSByaGFzaDsKKwl4ZGYtPnJjaGcgPSByY2hnICsgMTsKKwl4ZGYtPnJpbmRleCA9IHJpbmRleDsKKwl4ZGYtPm5yZWZmID0gMDsKKwl4ZGYtPmhhID0gaGE7CisJeGRmLT5kc3RhcnQgPSAwOworCXhkZi0+ZGVuZCA9IG5yZWMgLSAxOworCisJcmV0dXJuIDA7CisKK2Fib3J0OgorCXhkbF9mcmVlKGhhKTsKKwl4ZGxfZnJlZShyaW5kZXgpOworCXhkbF9mcmVlKHJjaGcpOworCXhkbF9mcmVlKHJoYXNoKTsKKwl4ZGxfZnJlZShyZWNzKTsKKwl4ZGxfY2hhX2ZyZWUoJnhkZi0+cmNoYSk7CisJcmV0dXJuIC0xOworfQorCisKK3N0YXRpYyB2b2lkIHhkbF9mcmVlX2N0eCh4ZGZpbGVfdCAqeGRmKSB7CisKKwl4ZGxfZnJlZSh4ZGYtPnJoYXNoKTsKKwl4ZGxfZnJlZSh4ZGYtPnJpbmRleCk7CisJeGRsX2ZyZWUoeGRmLT5yY2hnIC0gMSk7CisJeGRsX2ZyZWUoeGRmLT5oYSk7CisJeGRsX2ZyZWUoeGRmLT5yZWNzKTsKKwl4ZGxfY2hhX2ZyZWUoJnhkZi0+cmNoYSk7Cit9CisKKworaW50IHhkbF9wcmVwYXJlX2VudihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJICAgIHhkZmVudl90ICp4ZSkgeworCWxvbmcgZW5sMSwgZW5sMiwgc2FtcGxlOworCXhkbGNsYXNzaWZpZXJfdCBjZjsKKworCW1lbXNldCgmY2YsIDAsIHNpemVvZihjZikpOworCisJLyoKKwkgKiBGb3IgaGlzdG9ncmFtIGRpZmYsIHdlIGNhbiBhZmZvcmQgYSBzbWFsbGVyIHNhbXBsZSBzaXplIGFuZAorCSAqIHRodXMgYSBwb29yZXIgZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBsaW5lcywgYXMgdGhlIGhhc2gKKwkgKiB0YWJsZSAocmhhc2gpIHdvbid0IGJlIGZpbGxlZCB1cC9ncm93bi4gVGhlIG51bWJlciBvZiBsaW5lcworCSAqIChucmVjcykgd2lsbCBiZSB1cGRhdGVkIGNvcnJlY3RseSBhbnl3YXkgYnkKKwkgKiB4ZGxfcHJlcGFyZV9jdHgoKS4KKwkgKi8KKwlzYW1wbGUgPSAoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpID09IFhERl9ISVNUT0dSQU1fRElGRgorCQkgID8gWERMX0dVRVNTX05MSU5FUzIgOiBYRExfR1VFU1NfTkxJTkVTMSk7CisKKwllbmwxID0geGRsX2d1ZXNzX2xpbmVzKG1mMSwgc2FtcGxlKSArIDE7CisJZW5sMiA9IHhkbF9ndWVzc19saW5lcyhtZjIsIHNhbXBsZSkgKyAxOworCisJaWYgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSAhPSBYREZfSElTVE9HUkFNX0RJRkYgJiYKKwkgICAgeGRsX2luaXRfY2xhc3NpZmllcigmY2YsIGVubDEgKyBlbmwyICsgMSwgeHBwLT5mbGFncykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoeGRsX3ByZXBhcmVfY3R4KDEsIG1mMSwgZW5sMSwgeHBwLCAmY2YsICZ4ZS0+eGRmMSkgPCAwKSB7CisKKwkJeGRsX2ZyZWVfY2xhc3NpZmllcigmY2YpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICh4ZGxfcHJlcGFyZV9jdHgoMiwgbWYyLCBlbmwyLCB4cHAsICZjZiwgJnhlLT54ZGYyKSA8IDApIHsKKworCQl4ZGxfZnJlZV9jdHgoJnhlLT54ZGYxKTsKKwkJeGRsX2ZyZWVfY2xhc3NpZmllcigmY2YpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgIT0gWERGX1BBVElFTkNFX0RJRkYpICYmCisJICAgIChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgIT0gWERGX0hJU1RPR1JBTV9ESUZGKSAmJgorCSAgICB4ZGxfb3B0aW1pemVfY3R4cygmY2YsICZ4ZS0+eGRmMSwgJnhlLT54ZGYyKSA8IDApIHsKKworCQl4ZGxfZnJlZV9jdHgoJnhlLT54ZGYyKTsKKwkJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMSk7CisJCXhkbF9mcmVlX2NsYXNzaWZpZXIoJmNmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgIT0gWERGX0hJU1RPR1JBTV9ESUZGKQorCQl4ZGxfZnJlZV9jbGFzc2lmaWVyKCZjZik7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIHhkbF9mcmVlX2Vudih4ZGZlbnZfdCAqeGUpIHsKKworCXhkbF9mcmVlX2N0eCgmeGUtPnhkZjIpOworCXhkbF9mcmVlX2N0eCgmeGUtPnhkZjEpOworfQorCisKK3N0YXRpYyBpbnQgeGRsX2NsZWFuX21tYXRjaChjaGFyIGNvbnN0ICpkaXMsIGxvbmcgaSwgbG9uZyBzLCBsb25nIGUpIHsKKwlsb25nIHIsIHJkaXMwLCBycGRpczAsIHJkaXMxLCBycGRpczE7CisKKwkvKgorCSAqIExpbWl0cyB0aGUgd2luZG93IHRoZSBpcyBleGFtaW5lZCBkdXJpbmcgdGhlIHNpbWlsYXItbGluZXMKKwkgKiBzY2FuLiBUaGUgbG9vcHMgYmVsb3cgc3RvcHMgd2hlbiBkaXNbaSAtIHJdID09IDEgKGxpbmUgdGhhdAorCSAqIGhhcyBubyBtYXRjaCksIGJ1dCB0aGVyZSBhcmUgY29ybmVyIGNhc2VzIHdoZXJlIHRoZSBsb29wCisJICogcHJvY2VlZCBhbGwgdGhlIHdheSB0byB0aGUgZXh0cmVtaXRpZXMgYnkgY2F1c2luZyBodWdlCisJICogcGVyZm9ybWFuY2UgcGVuYWx0aWVzIGluIGNhc2Ugb2YgYmlnIGZpbGVzLgorCSAqLworCWlmIChpIC0gcyA+IFhETF9TSU1TQ0FOX1dJTkRPVykKKwkJcyA9IGkgLSBYRExfU0lNU0NBTl9XSU5ET1c7CisJaWYgKGUgLSBpID4gWERMX1NJTVNDQU5fV0lORE9XKQorCQllID0gaSArIFhETF9TSU1TQ0FOX1dJTkRPVzsKKworCS8qCisJICogU2NhbnMgdGhlIGxpbmVzIGJlZm9yZSAnaScgdG8gZmluZCBhIHJ1biBvZiBsaW5lcyB0aGF0IGVpdGhlcgorCSAqIGhhdmUgbm8gbWF0Y2ggKGRpc1tqXSA9PSAwKSBvciBoYXZlIG11bHRpcGxlIG1hdGNoZXMgKGRpc1tqXSA+IDEpLgorCSAqIE5vdGUgdGhhdCB3ZSBhbHdheXMgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzW2ldID4gMSwgc28gdGhlCisJICogY3VycmVudCBsaW5lIChpKSBpcyBhbHJlYWR5IGEgbXVsdGltYXRjaCBsaW5lLgorCSAqLworCWZvciAociA9IDEsIHJkaXMwID0gMCwgcnBkaXMwID0gMTsgKGkgLSByKSA+PSBzOyByKyspIHsKKwkJaWYgKCFkaXNbaSAtIHJdKQorCQkJcmRpczArKzsKKwkJZWxzZSBpZiAoZGlzW2kgLSByXSA9PSAyKQorCQkJcnBkaXMwKys7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwkvKgorCSAqIElmIHRoZSBydW4gYmVmb3JlIHRoZSBsaW5lICdpJyBmb3VuZCBvbmx5IG11bHRpbWF0Y2ggbGluZXMsIHdlCisJICogcmV0dXJuIDAgYW5kIGhlbmNlIHdlIGRvbid0IG1ha2UgdGhlIGN1cnJlbnQgbGluZSAoaSkgZGlzY2FyZGVkLgorCSAqIFdlIHdhbnQgdG8gZGlzY2FyZCBtdWx0aW1hdGNoIGxpbmVzIG9ubHkgd2hlbiB0aGV5IGFwcGVhciBpbiB0aGUKKwkgKiBtaWRkbGUgb2YgcnVucyB3aXRoIG5vbWF0Y2ggbGluZXMgKGRpc1tqXSA9PSAwKS4KKwkgKi8KKwlpZiAocmRpczAgPT0gMCkKKwkJcmV0dXJuIDA7CisJZm9yIChyID0gMSwgcmRpczEgPSAwLCBycGRpczEgPSAxOyAoaSArIHIpIDw9IGU7IHIrKykgeworCQlpZiAoIWRpc1tpICsgcl0pCisJCQlyZGlzMSsrOworCQllbHNlIGlmIChkaXNbaSArIHJdID09IDIpCisJCQlycGRpczErKzsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCS8qCisJICogSWYgdGhlIHJ1biBhZnRlciB0aGUgbGluZSAnaScgZm91bmQgb25seSBtdWx0aW1hdGNoIGxpbmVzLCB3ZQorCSAqIHJldHVybiAwIGFuZCBoZW5jZSB3ZSBkb24ndCBtYWtlIHRoZSBjdXJyZW50IGxpbmUgKGkpIGRpc2NhcmRlZC4KKwkgKi8KKwlpZiAocmRpczEgPT0gMCkKKwkJcmV0dXJuIDA7CisJcmRpczEgKz0gcmRpczA7CisJcnBkaXMxICs9IHJwZGlzMDsKKworCXJldHVybiBycGRpczEgKiBYRExfS1BESVNfUlVOIDwgKHJwZGlzMSArIHJkaXMxKTsKK30KKworCisvKgorICogVHJ5IHRvIHJlZHVjZSB0aGUgcHJvYmxlbSBjb21wbGV4aXR5LCBkaXNjYXJkIHJlY29yZHMgdGhhdCBoYXZlIG5vCisgKiBtYXRjaGVzIG9uIHRoZSBvdGhlciBmaWxlLiBBbHNvLCBsaW5lcyB0aGF0IGhhdmUgbXVsdGlwbGUgbWF0Y2hlcworICogbWlnaHQgYmUgcG90ZW50aWFsbHkgZGlzY2FyZGVkIGlmIHRoZXkgaGFwcGVhciBpbiBhIHJ1biBvZiBkaXNjYXJkYWJsZS4KKyAqLworc3RhdGljIGludCB4ZGxfY2xlYW51cF9yZWNvcmRzKHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhkZmlsZV90ICp4ZGYxLCB4ZGZpbGVfdCAqeGRmMikgeworCWxvbmcgaSwgbm0sIG5yZWZmLCBtbGltOworCXhyZWNvcmRfdCAqKnJlY3M7CisJeGRsY2xhc3NfdCAqcmNyZWM7CisJY2hhciAqZGlzLCAqZGlzMSwgKmRpczI7CisKKwlpZiAoIShkaXMgPSAoY2hhciAqKSB4ZGxfbWFsbG9jKHhkZjEtPm5yZWMgKyB4ZGYyLT5ucmVjICsgMikpKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQoZGlzLCAwLCB4ZGYxLT5ucmVjICsgeGRmMi0+bnJlYyArIDIpOworCWRpczEgPSBkaXM7CisJZGlzMiA9IGRpczEgKyB4ZGYxLT5ucmVjICsgMTsKKworCWlmICgobWxpbSA9IHhkbF9ib2dvc3FydCh4ZGYxLT5ucmVjKSkgPiBYRExfTUFYX0VRTElNSVQpCisJCW1saW0gPSBYRExfTUFYX0VRTElNSVQ7CisJZm9yIChpID0geGRmMS0+ZHN0YXJ0LCByZWNzID0gJnhkZjEtPnJlY3NbeGRmMS0+ZHN0YXJ0XTsgaSA8PSB4ZGYxLT5kZW5kOyBpKyssIHJlY3MrKykgeworCQlyY3JlYyA9IGNmLT5yY3JlY3NbKCpyZWNzKS0+aGFdOworCQlubSA9IHJjcmVjID8gcmNyZWMtPmxlbjIgOiAwOworCQlkaXMxW2ldID0gKG5tID09IDApID8gMDogKG5tID49IG1saW0pID8gMjogMTsKKwl9CisKKwlpZiAoKG1saW0gPSB4ZGxfYm9nb3NxcnQoeGRmMi0+bnJlYykpID4gWERMX01BWF9FUUxJTUlUKQorCQltbGltID0gWERMX01BWF9FUUxJTUlUOworCWZvciAoaSA9IHhkZjItPmRzdGFydCwgcmVjcyA9ICZ4ZGYyLT5yZWNzW3hkZjItPmRzdGFydF07IGkgPD0geGRmMi0+ZGVuZDsgaSsrLCByZWNzKyspIHsKKwkJcmNyZWMgPSBjZi0+cmNyZWNzWygqcmVjcyktPmhhXTsKKwkJbm0gPSByY3JlYyA/IHJjcmVjLT5sZW4xIDogMDsKKwkJZGlzMltpXSA9IChubSA9PSAwKSA/IDA6IChubSA+PSBtbGltKSA/IDI6IDE7CisJfQorCisJZm9yIChucmVmZiA9IDAsIGkgPSB4ZGYxLT5kc3RhcnQsIHJlY3MgPSAmeGRmMS0+cmVjc1t4ZGYxLT5kc3RhcnRdOworCSAgICAgaSA8PSB4ZGYxLT5kZW5kOyBpKyssIHJlY3MrKykgeworCQlpZiAoZGlzMVtpXSA9PSAxIHx8CisJCSAgICAoZGlzMVtpXSA9PSAyICYmICF4ZGxfY2xlYW5fbW1hdGNoKGRpczEsIGksIHhkZjEtPmRzdGFydCwgeGRmMS0+ZGVuZCkpKSB7CisJCQl4ZGYxLT5yaW5kZXhbbnJlZmZdID0gaTsKKwkJCXhkZjEtPmhhW25yZWZmXSA9ICgqcmVjcyktPmhhOworCQkJbnJlZmYrKzsKKwkJfSBlbHNlCisJCQl4ZGYxLT5yY2hnW2ldID0gMTsKKwl9CisJeGRmMS0+bnJlZmYgPSBucmVmZjsKKworCWZvciAobnJlZmYgPSAwLCBpID0geGRmMi0+ZHN0YXJ0LCByZWNzID0gJnhkZjItPnJlY3NbeGRmMi0+ZHN0YXJ0XTsKKwkgICAgIGkgPD0geGRmMi0+ZGVuZDsgaSsrLCByZWNzKyspIHsKKwkJaWYgKGRpczJbaV0gPT0gMSB8fAorCQkgICAgKGRpczJbaV0gPT0gMiAmJiAheGRsX2NsZWFuX21tYXRjaChkaXMyLCBpLCB4ZGYyLT5kc3RhcnQsIHhkZjItPmRlbmQpKSkgeworCQkJeGRmMi0+cmluZGV4W25yZWZmXSA9IGk7CisJCQl4ZGYyLT5oYVtucmVmZl0gPSAoKnJlY3MpLT5oYTsKKwkJCW5yZWZmKys7CisJCX0gZWxzZQorCQkJeGRmMi0+cmNoZ1tpXSA9IDE7CisJfQorCXhkZjItPm5yZWZmID0gbnJlZmY7CisKKwl4ZGxfZnJlZShkaXMpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIEVhcmx5IHRyaW0gaW5pdGlhbCBhbmQgdGVybWluYWwgbWF0Y2hpbmcgcmVjb3Jkcy4KKyAqLworc3RhdGljIGludCB4ZGxfdHJpbV9lbmRzKHhkZmlsZV90ICp4ZGYxLCB4ZGZpbGVfdCAqeGRmMikgeworCWxvbmcgaSwgbGltOworCXhyZWNvcmRfdCAqKnJlY3MxLCAqKnJlY3MyOworCisJcmVjczEgPSB4ZGYxLT5yZWNzOworCXJlY3MyID0geGRmMi0+cmVjczsKKwlmb3IgKGkgPSAwLCBsaW0gPSBYRExfTUlOKHhkZjEtPm5yZWMsIHhkZjItPm5yZWMpOyBpIDwgbGltOworCSAgICAgaSsrLCByZWNzMSsrLCByZWNzMisrKQorCQlpZiAoKCpyZWNzMSktPmhhICE9ICgqcmVjczIpLT5oYSkKKwkJCWJyZWFrOworCisJeGRmMS0+ZHN0YXJ0ID0geGRmMi0+ZHN0YXJ0ID0gaTsKKworCXJlY3MxID0geGRmMS0+cmVjcyArIHhkZjEtPm5yZWMgLSAxOworCXJlY3MyID0geGRmMi0+cmVjcyArIHhkZjItPm5yZWMgLSAxOworCWZvciAobGltIC09IGksIGkgPSAwOyBpIDwgbGltOyBpKyssIHJlY3MxLS0sIHJlY3MyLS0pCisJCWlmICgoKnJlY3MxKS0+aGEgIT0gKCpyZWNzMiktPmhhKQorCQkJYnJlYWs7CisKKwl4ZGYxLT5kZW5kID0geGRmMS0+bnJlYyAtIGkgLSAxOworCXhkZjItPmRlbmQgPSB4ZGYyLT5ucmVjIC0gaSAtIDE7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHhkbF9vcHRpbWl6ZV9jdHhzKHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhkZmlsZV90ICp4ZGYxLCB4ZGZpbGVfdCAqeGRmMikgeworCisJaWYgKHhkbF90cmltX2VuZHMoeGRmMSwgeGRmMikgPCAwIHx8CisJICAgIHhkbF9jbGVhbnVwX3JlY29yZHMoY2YsIHhkZjEsIHhkZjIpIDwgMCkgeworCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3hkaWZmL3hwcmVwYXJlLmggYi94ZGlmZi94cHJlcGFyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2Q5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94cHJlcGFyZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhQUkVQQVJFX0gpCisjZGVmaW5lIFhQUkVQQVJFX0gKKworCisKK2ludCB4ZGxfcHJlcGFyZV9lbnYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCSAgICB4ZGZlbnZfdCAqeGUpOwordm9pZCB4ZGxfZnJlZV9lbnYoeGRmZW52X3QgKnhlKTsKKworCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWFBSRVBBUkVfSCkgKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3h0eXBlcy5oIGIveGRpZmYveHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0MmJkNAotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3h0eXBlcy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhUWVBFU19IKQorI2RlZmluZSBYVFlQRVNfSAorCisKKwordHlwZWRlZiBzdHJ1Y3Qgc19jaGFub2RlIHsKKwlzdHJ1Y3Qgc19jaGFub2RlICpuZXh0OworCWxvbmcgaWN1cnI7Cit9IGNoYW5vZGVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc19jaGFzdG9yZSB7CisJY2hhbm9kZV90ICpoZWFkLCAqdGFpbDsKKwlsb25nIGlzaXplLCBuc2l6ZTsKKwljaGFub2RlX3QgKmFuY3VyOworCWNoYW5vZGVfdCAqc25jdXI7CisJbG9uZyBzY3VycjsKK30gY2hhc3RvcmVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194cmVjb3JkIHsKKwlzdHJ1Y3Qgc194cmVjb3JkICpuZXh0OworCWNoYXIgY29uc3QgKnB0cjsKKwlsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBoYTsKK30geHJlY29yZF90OworCit0eXBlZGVmIHN0cnVjdCBzX3hkZmlsZSB7CisJY2hhc3RvcmVfdCByY2hhOworCWxvbmcgbnJlYzsKKwl1bnNpZ25lZCBpbnQgaGJpdHM7CisJeHJlY29yZF90ICoqcmhhc2g7CisJbG9uZyBkc3RhcnQsIGRlbmQ7CisJeHJlY29yZF90ICoqcmVjczsKKwljaGFyICpyY2hnOworCWxvbmcgKnJpbmRleDsKKwlsb25nIG5yZWZmOworCXVuc2lnbmVkIGxvbmcgKmhhOworfSB4ZGZpbGVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGZlbnYgeworCXhkZmlsZV90IHhkZjEsIHhkZjI7Cit9IHhkZmVudl90OworCisKKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYVFlQRVNfSCkgKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3h1dGlscy5jIGIveGRpZmYveHV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhNmUyMgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3h1dGlscy5jCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzCURhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUKKyAqICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisKKworbG9uZyB4ZGxfYm9nb3NxcnQobG9uZyBuKSB7CisJbG9uZyBpOworCisJLyoKKwkgKiBDbGFzc2ljYWwgaW50ZWdlciBzcXVhcmUgcm9vdCBhcHByb3hpbWF0aW9uIHVzaW5nIHNoaWZ0cy4KKwkgKi8KKwlmb3IgKGkgPSAxOyBuID4gMDsgbiA+Pj0gMikKKwkJaSA8PD0gMTsKKworCXJldHVybiBpOworfQorCisKK2ludCB4ZGxfZW1pdF9kaWZmcmVjKGNoYXIgY29uc3QgKnJlYywgbG9uZyBzaXplLCBjaGFyIGNvbnN0ICpwcmUsIGxvbmcgcHNpemUsCisJCSAgICAgeGRlbWl0Y2JfdCAqZWNiKSB7CisJaW50IGkgPSAyOworCW1tYnVmZmVyX3QgbWJbM107CisKKwltYlswXS5wdHIgPSAoY2hhciAqKSBwcmU7CisJbWJbMF0uc2l6ZSA9IHBzaXplOworCW1iWzFdLnB0ciA9IChjaGFyICopIHJlYzsKKwltYlsxXS5zaXplID0gc2l6ZTsKKwlpZiAoc2l6ZSA+IDAgJiYgcmVjW3NpemUgLSAxXSAhPSAnXG4nKSB7CisJCW1iWzJdLnB0ciA9IChjaGFyICopICJcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiI7CisJCW1iWzJdLnNpemUgPSBzdHJsZW4obWJbMl0ucHRyKTsKKwkJaSsrOworCX0KKwlpZiAoZWNiLT5vdXRfbGluZShlY2ItPnByaXYsIG1iLCBpKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgKnhkbF9tbWZpbGVfZmlyc3QobW1maWxlX3QgKm1tZiwgbG9uZyAqc2l6ZSkKK3sKKwkqc2l6ZSA9IG1tZi0+c2l6ZTsKKwlyZXR1cm4gbW1mLT5wdHI7Cit9CisKKworbG9uZyB4ZGxfbW1maWxlX3NpemUobW1maWxlX3QgKm1tZikKK3sKKwlyZXR1cm4gbW1mLT5zaXplOworfQorCisKK2ludCB4ZGxfY2hhX2luaXQoY2hhc3RvcmVfdCAqY2hhLCBsb25nIGlzaXplLCBsb25nIGljb3VudCkgeworCisJY2hhLT5oZWFkID0gY2hhLT50YWlsID0gTlVMTDsKKwljaGEtPmlzaXplID0gaXNpemU7CisJY2hhLT5uc2l6ZSA9IGljb3VudCAqIGlzaXplOworCWNoYS0+YW5jdXIgPSBjaGEtPnNuY3VyID0gTlVMTDsKKwljaGEtPnNjdXJyID0gMDsKKworCXJldHVybiAwOworfQorCisKK3ZvaWQgeGRsX2NoYV9mcmVlKGNoYXN0b3JlX3QgKmNoYSkgeworCWNoYW5vZGVfdCAqY3VyLCAqdG1wOworCisJZm9yIChjdXIgPSBjaGEtPmhlYWQ7ICh0bXAgPSBjdXIpICE9IE5VTEw7KSB7CisJCWN1ciA9IGN1ci0+bmV4dDsKKwkJeGRsX2ZyZWUodG1wKTsKKwl9Cit9CisKKwordm9pZCAqeGRsX2NoYV9hbGxvYyhjaGFzdG9yZV90ICpjaGEpIHsKKwljaGFub2RlX3QgKmFuY3VyOworCXZvaWQgKmRhdGE7CisKKwlpZiAoIShhbmN1ciA9IGNoYS0+YW5jdXIpIHx8IGFuY3VyLT5pY3VyciA9PSBjaGEtPm5zaXplKSB7CisJCWlmICghKGFuY3VyID0gKGNoYW5vZGVfdCAqKSB4ZGxfbWFsbG9jKHNpemVvZihjaGFub2RlX3QpICsgY2hhLT5uc2l6ZSkpKSB7CisKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWFuY3VyLT5pY3VyciA9IDA7CisJCWFuY3VyLT5uZXh0ID0gTlVMTDsKKwkJaWYgKGNoYS0+dGFpbCkKKwkJCWNoYS0+dGFpbC0+bmV4dCA9IGFuY3VyOworCQlpZiAoIWNoYS0+aGVhZCkKKwkJCWNoYS0+aGVhZCA9IGFuY3VyOworCQljaGEtPnRhaWwgPSBhbmN1cjsKKwkJY2hhLT5hbmN1ciA9IGFuY3VyOworCX0KKworCWRhdGEgPSAoY2hhciAqKSBhbmN1ciArIHNpemVvZihjaGFub2RlX3QpICsgYW5jdXItPmljdXJyOworCWFuY3VyLT5pY3VyciArPSBjaGEtPmlzaXplOworCisJcmV0dXJuIGRhdGE7Cit9CisKK2xvbmcgeGRsX2d1ZXNzX2xpbmVzKG1tZmlsZV90ICptZiwgbG9uZyBzYW1wbGUpIHsKKwlsb25nIG5sID0gMCwgc2l6ZSwgdHNpemUgPSAwOworCWNoYXIgY29uc3QgKmRhdGEsICpjdXIsICp0b3A7CisKKwlpZiAoKGN1ciA9IGRhdGEgPSB4ZGxfbW1maWxlX2ZpcnN0KG1mLCAmc2l6ZSkpICE9IE5VTEwpIHsKKwkJZm9yICh0b3AgPSBkYXRhICsgc2l6ZTsgbmwgPCBzYW1wbGUgJiYgY3VyIDwgdG9wOyApIHsKKwkJCW5sKys7CisJCQlpZiAoIShjdXIgPSBtZW1jaHIoY3VyLCAnXG4nLCB0b3AgLSBjdXIpKSkKKwkJCQljdXIgPSB0b3A7CisJCQllbHNlCisJCQkJY3VyKys7CisJCX0KKwkJdHNpemUgKz0gKGxvbmcpIChjdXIgLSBkYXRhKTsKKwl9CisKKwlpZiAobmwgJiYgdHNpemUpCisJCW5sID0geGRsX21tZmlsZV9zaXplKG1mKSAvICh0c2l6ZSAvIG5sKTsKKworCXJldHVybiBubCArIDE7Cit9CisKK2ludCB4ZGxfYmxhbmtsaW5lKGNvbnN0IGNoYXIgKmxpbmUsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncykKK3sKKwlsb25nIGk7CisKKwlpZiAoIShmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKSkKKwkJcmV0dXJuIChzaXplIDw9IDEpOworCisJZm9yIChpID0gMDsgaSA8IHNpemUgJiYgWERMX0lTU1BBQ0UobGluZVtpXSk7IGkrKykKKwkJOworCisJcmV0dXJuIChpID09IHNpemUpOworfQorCisvKgorICogSGF2ZSB3ZSBlYXRlbiBldmVyeXRoaW5nIG9uIHRoZSBsaW5lLCBleGNlcHQgZm9yIGFuIG9wdGlvbmFsCisgKiBDUiBhdCB0aGUgdmVyeSBlbmQ/CisgKi8KK3N0YXRpYyBpbnQgZW5kc193aXRoX29wdGlvbmFsX2NyKGNvbnN0IGNoYXIgKmwsIGxvbmcgcywgbG9uZyBpKQoreworCWludCBjb21wbGV0ZSA9IHMgJiYgbFtzLTFdID09ICdcbic7CisKKwlpZiAoY29tcGxldGUpCisJCXMtLTsKKwlpZiAocyA9PSBpKQorCQlyZXR1cm4gMTsKKwkvKiBkbyBub3QgaWdub3JlIENSIGF0IHRoZSBlbmQgb2YgYW4gaW5jb21wbGV0ZSBsaW5lICovCisJaWYgKGNvbXBsZXRlICYmIHMgPT0gaSArIDEgJiYgbFtpXSA9PSAnXHInKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworaW50IHhkbF9yZWNtYXRjaChjb25zdCBjaGFyICpsMSwgbG9uZyBzMSwgY29uc3QgY2hhciAqbDIsIGxvbmcgczIsIGxvbmcgZmxhZ3MpCit7CisJaW50IGkxLCBpMjsKKworCWlmIChzMSA9PSBzMiAmJiAhbWVtY21wKGwxLCBsMiwgczEpKQorCQlyZXR1cm4gMTsKKwlpZiAoIShmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKSkKKwkJcmV0dXJuIDA7CisKKwlpMSA9IDA7CisJaTIgPSAwOworCisJLyoKKwkgKiAtdyBtYXRjaGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXRjaGVzIHdpdGggLWIsIGFuZCAtYiBpbiB0dXJuCisJICogbWF0Y2hlcyBldmVyeXRoaW5nIHRoYXQgbWF0Y2hlcyB3aXRoIC0taWdub3JlLXNwYWNlLWF0LWVvbCwKKwkgKiB3aGljaCBpbiB0dXJuIG1hdGNoZXMgZXZlcnl0aGluZyB0aGF0IG1hdGNoZXMgd2l0aCAtLWlnbm9yZS1jci1hdC1lb2wuCisJICoKKwkgKiBFYWNoIGZsYXZvciBvZiBpZ25vcmluZyBuZWVkcyBkaWZmZXJlbnQgbG9naWMgdG8gc2tpcCB3aGl0ZXNwYWNlcworCSAqIHdoaWxlIHdlIGhhdmUgYm90aCBzaWRlcyB0byBjb21wYXJlLgorCSAqLworCWlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRSkgeworCQlnb3RvIHNraXBfd3M7CisJCXdoaWxlIChpMSA8IHMxICYmIGkyIDwgczIpIHsKKwkJCWlmIChsMVtpMSsrXSAhPSBsMltpMisrXSkKKwkJCQlyZXR1cm4gMDsKKwkJc2tpcF93czoKKwkJCXdoaWxlIChpMSA8IHMxICYmIFhETF9JU1NQQUNFKGwxW2kxXSkpCisJCQkJaTErKzsKKwkJCXdoaWxlIChpMiA8IHMyICYmIFhETF9JU1NQQUNFKGwyW2kyXSkpCisJCQkJaTIrKzsKKwkJfQorCX0gZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFKSB7CisJCXdoaWxlIChpMSA8IHMxICYmIGkyIDwgczIpIHsKKwkJCWlmIChYRExfSVNTUEFDRShsMVtpMV0pICYmIFhETF9JU1NQQUNFKGwyW2kyXSkpIHsKKwkJCQkvKiBTa2lwIG1hdGNoaW5nIHNwYWNlcyBhbmQgdHJ5IGFnYWluICovCisJCQkJd2hpbGUgKGkxIDwgczEgJiYgWERMX0lTU1BBQ0UobDFbaTFdKSkKKwkJCQkJaTErKzsKKwkJCQl3aGlsZSAoaTIgPCBzMiAmJiBYRExfSVNTUEFDRShsMltpMl0pKQorCQkJCQlpMisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGwxW2kxKytdICE9IGwyW2kyKytdKQorCQkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIGlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRV9BVF9FT0wpIHsKKwkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMiAmJiBsMVtpMV0gPT0gbDJbaTJdKSB7CisJCQlpMSsrOworCQkJaTIrKzsKKwkJfQorCX0gZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX0NSX0FUX0VPTCkgeworCQkvKiBGaW5kIHRoZSBmaXJzdCBkaWZmZXJlbmNlIGFuZCBzZWUgaG93IHRoZSBsaW5lIGVuZHMgKi8KKwkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMiAmJiBsMVtpMV0gPT0gbDJbaTJdKSB7CisJCQlpMSsrOworCQkJaTIrKzsKKwkJfQorCQlyZXR1cm4gKGVuZHNfd2l0aF9vcHRpb25hbF9jcihsMSwgczEsIGkxKSAmJgorCQkJZW5kc193aXRoX29wdGlvbmFsX2NyKGwyLCBzMiwgaTIpKTsKKwl9CisKKwkvKgorCSAqIEFmdGVyIHJ1bm5pbmcgb3V0IG9mIG9uZSBzaWRlLCB0aGUgcmVtYWluaW5nIHNpZGUgbXVzdCBoYXZlCisJICogbm90aGluZyBidXQgd2hpdGVzcGFjZSBmb3IgdGhlIGxpbmVzIHRvIG1hdGNoLiAgTm90ZSB0aGF0CisJICogaWdub3JlLXdoaXRlc3BhY2UtYXQtZW9sIGNhc2UgbWF5IGJyZWFrIG91dCBvZiB0aGUgbG9vcAorCSAqIHdoaWxlIHRoZXJlIHN0aWxsIGFyZSBjaGFyYWN0ZXJzIHJlbWFpbmluZyBvbiBib3RoIGxpbmVzLgorCSAqLworCWlmIChpMSA8IHMxKSB7CisJCXdoaWxlIChpMSA8IHMxICYmIFhETF9JU1NQQUNFKGwxW2kxXSkpCisJCQlpMSsrOworCQlpZiAoczEgIT0gaTEpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKGkyIDwgczIpIHsKKwkJd2hpbGUgKGkyIDwgczIgJiYgWERMX0lTU1BBQ0UobDJbaTJdKSkKKwkJCWkyKys7CisJCXJldHVybiAoczIgPT0gaTIpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgeGRsX2hhc2hfcmVjb3JkX3dpdGhfd2hpdGVzcGFjZShjaGFyIGNvbnN0ICoqZGF0YSwKKwkJY2hhciBjb25zdCAqdG9wLCBsb25nIGZsYWdzKSB7CisJdW5zaWduZWQgbG9uZyBoYSA9IDUzODE7CisJY2hhciBjb25zdCAqcHRyID0gKmRhdGE7CisJaW50IGNyX2F0X2VvbF9vbmx5ID0gKGZsYWdzICYgWERGX1dISVRFU1BBQ0VfRkxBR1MpID09IFhERl9JR05PUkVfQ1JfQVRfRU9MOworCisJZm9yICg7IHB0ciA8IHRvcCAmJiAqcHRyICE9ICdcbic7IHB0cisrKSB7CisJCWlmIChjcl9hdF9lb2xfb25seSkgeworCQkJLyogZG8gbm90IGlnbm9yZSBDUiBhdCB0aGUgZW5kIG9mIGFuIGluY29tcGxldGUgbGluZSAqLworCQkJaWYgKCpwdHIgPT0gJ1xyJyAmJgorCQkJICAgIChwdHIgKyAxIDwgdG9wICYmIHB0clsxXSA9PSAnXG4nKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChYRExfSVNTUEFDRSgqcHRyKSkgeworCQkJY29uc3QgY2hhciAqcHRyMiA9IHB0cjsKKwkJCWludCBhdF9lb2w7CisJCQl3aGlsZSAocHRyICsgMSA8IHRvcCAmJiBYRExfSVNTUEFDRShwdHJbMV0pCisJCQkJCSYmIHB0clsxXSAhPSAnXG4nKQorCQkJCXB0cisrOworCQkJYXRfZW9sID0gKHRvcCA8PSBwdHIgKyAxIHx8IHB0clsxXSA9PSAnXG4nKTsKKwkJCWlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRSkKKwkJCQk7IC8qIGFscmVhZHkgaGFuZGxlZCAqLworCQkJZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFCisJCQkJICYmICFhdF9lb2wpIHsKKwkJCQloYSArPSAoaGEgPDwgNSk7CisJCQkJaGEgXj0gKHVuc2lnbmVkIGxvbmcpICcgJzsKKwkJCX0KKwkJCWVsc2UgaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTAorCQkJCSAmJiAhYXRfZW9sKSB7CisJCQkJd2hpbGUgKHB0cjIgIT0gcHRyICsgMSkgeworCQkJCQloYSArPSAoaGEgPDwgNSk7CisJCQkJCWhhIF49ICh1bnNpZ25lZCBsb25nKSAqcHRyMjsKKwkJCQkJcHRyMisrOworCQkJCX0KKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWhhICs9IChoYSA8PCA1KTsKKwkJaGEgXj0gKHVuc2lnbmVkIGxvbmcpICpwdHI7CisJfQorCSpkYXRhID0gcHRyIDwgdG9wID8gcHRyICsgMTogcHRyOworCisJcmV0dXJuIGhhOworfQorCit1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZChjaGFyIGNvbnN0ICoqZGF0YSwgY2hhciBjb25zdCAqdG9wLCBsb25nIGZsYWdzKSB7CisJdW5zaWduZWQgbG9uZyBoYSA9IDUzODE7CisJY2hhciBjb25zdCAqcHRyID0gKmRhdGE7CisKKwlpZiAoZmxhZ3MgJiBYREZfV0hJVEVTUEFDRV9GTEFHUykKKwkJcmV0dXJuIHhkbF9oYXNoX3JlY29yZF93aXRoX3doaXRlc3BhY2UoZGF0YSwgdG9wLCBmbGFncyk7CisKKwlmb3IgKDsgcHRyIDwgdG9wICYmICpwdHIgIT0gJ1xuJzsgcHRyKyspIHsKKwkJaGEgKz0gKGhhIDw8IDUpOworCQloYSBePSAodW5zaWduZWQgbG9uZykgKnB0cjsKKwl9CisJKmRhdGEgPSBwdHIgPCB0b3AgPyBwdHIgKyAxOiBwdHI7CisKKwlyZXR1cm4gaGE7Cit9CisKK3Vuc2lnbmVkIGludCB4ZGxfaGFzaGJpdHModW5zaWduZWQgaW50IHNpemUpIHsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMSwgYml0cyA9IDA7CisKKwlmb3IgKDsgdmFsIDwgc2l6ZSAmJiBiaXRzIDwgQ0hBUl9CSVQgKiBzaXplb2YodW5zaWduZWQgaW50KTsgdmFsIDw8PSAxLCBiaXRzKyspOworCXJldHVybiBiaXRzID8gYml0czogMTsKK30KKworCitpbnQgeGRsX251bV9vdXQoY2hhciAqb3V0LCBsb25nIHZhbCkgeworCWNoYXIgKnB0ciwgKnN0ciA9IG91dDsKKwljaGFyIGJ1ZlszMl07CisKKwlwdHIgPSBidWYgKyBzaXplb2YoYnVmKSAtIDE7CisJKnB0ciA9ICdcMCc7CisJaWYgKHZhbCA8IDApIHsKKwkJKi0tcHRyID0gJy0nOworCQl2YWwgPSAtdmFsOworCX0KKwlmb3IgKDsgdmFsICYmIHB0ciA+IGJ1ZjsgdmFsIC89IDEwKQorCQkqLS1wdHIgPSAiMDEyMzQ1Njc4OSJbdmFsICUgMTBdOworCWlmICgqcHRyKQorCQlmb3IgKDsgKnB0cjsgcHRyKyssIHN0cisrKQorCQkJKnN0ciA9ICpwdHI7CisJZWxzZQorCQkqc3RyKysgPSAnMCc7CisJKnN0ciA9ICdcMCc7CisKKwlyZXR1cm4gc3RyIC0gb3V0OworfQorCitzdGF0aWMgaW50IHhkbF9mb3JtYXRfaHVua19oZHIobG9uZyBzMSwgbG9uZyBjMSwgbG9uZyBzMiwgbG9uZyBjMiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpmdW5jLCBsb25nIGZ1bmNsZW4sCisJCQkgICAgICAgeGRlbWl0Y2JfdCAqZWNiKSB7CisJaW50IG5iID0gMDsKKwltbWJ1ZmZlcl90IG1iOworCWNoYXIgYnVmWzEyOF07CisKKwltZW1jcHkoYnVmLCAiQEAgLSIsIDQpOworCW5iICs9IDQ7CisKKwluYiArPSB4ZGxfbnVtX291dChidWYgKyBuYiwgYzEgPyBzMTogczEgLSAxKTsKKworCWlmIChjMSAhPSAxKSB7CisJCW1lbWNweShidWYgKyBuYiwgIiwiLCAxKTsKKwkJbmIgKz0gMTsKKworCQluYiArPSB4ZGxfbnVtX291dChidWYgKyBuYiwgYzEpOworCX0KKworCW1lbWNweShidWYgKyBuYiwgIiArIiwgMik7CisJbmIgKz0gMjsKKworCW5iICs9IHhkbF9udW1fb3V0KGJ1ZiArIG5iLCBjMiA/IHMyOiBzMiAtIDEpOworCisJaWYgKGMyICE9IDEpIHsKKwkJbWVtY3B5KGJ1ZiArIG5iLCAiLCIsIDEpOworCQluYiArPSAxOworCisJCW5iICs9IHhkbF9udW1fb3V0KGJ1ZiArIG5iLCBjMik7CisJfQorCisJbWVtY3B5KGJ1ZiArIG5iLCAiIEBAIiwgMyk7CisJbmIgKz0gMzsKKwlpZiAoZnVuYyAmJiBmdW5jbGVuKSB7CisJCWJ1ZltuYisrXSA9ICcgJzsKKwkJaWYgKGZ1bmNsZW4gPiBzaXplb2YoYnVmKSAtIG5iIC0gMSkKKwkJCWZ1bmNsZW4gPSBzaXplb2YoYnVmKSAtIG5iIC0gMTsKKwkJbWVtY3B5KGJ1ZiArIG5iLCBmdW5jLCBmdW5jbGVuKTsKKwkJbmIgKz0gZnVuY2xlbjsKKwl9CisJYnVmW25iKytdID0gJ1xuJzsKKworCW1iLnB0ciA9IGJ1ZjsKKwltYi5zaXplID0gbmI7CisJaWYgKGVjYi0+b3V0X2xpbmUoZWNiLT5wcml2LCAmbWIsIDEpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgeGRsX2VtaXRfaHVua19oZHIobG9uZyBzMSwgbG9uZyBjMSwgbG9uZyBzMiwgbG9uZyBjMiwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuYywgbG9uZyBmdW5jbGVuLAorCQkgICAgICB4ZGVtaXRjYl90ICplY2IpIHsKKwlpZiAoIWVjYi0+b3V0X2h1bmspCisJCXJldHVybiB4ZGxfZm9ybWF0X2h1bmtfaGRyKHMxLCBjMSwgczIsIGMyLCBmdW5jLCBmdW5jbGVuLCBlY2IpOworCWlmIChlY2ItPm91dF9odW5rKGVjYi0+cHJpdiwKKwkJCSAgYzEgPyBzMSA6IHMxIC0gMSwgYzEsCisJCQkgIGMyID8gczIgOiBzMiAtIDEsIGMyLAorCQkJICBmdW5jLCBmdW5jbGVuKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IHhkbF9mYWxsX2JhY2tfZGlmZih4ZGZlbnZfdCAqZGlmZl9lbnYsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwkvKgorCSAqIFRoaXMgcHJvYmFibHkgZG9lcyBub3Qgd29yayBvdXRzaWRlIEdpdCwgc2luY2UKKwkgKiB3ZSBoYXZlIGEgdmVyeSBzaW1wbGUgbW1maWxlIHN0cnVjdHVyZS4KKwkgKgorCSAqIE5vdGU6IGlkZWFsbHksIHdlIHdvdWxkIHJldXNlIHRoZSBwcmVwYXJlZCBlbnZpcm9ubWVudCwgYnV0CisJICogdGhlIGxpYnhkaWZmIGludGVyZmFjZSBkb2VzIG5vdCAoeWV0KSBhbGxvdyBmb3IgZGlmZmluZyBvbmx5CisJICogcmFuZ2VzIG9mIGxpbmVzIGluc3RlYWQgb2YgdGhlIHdob2xlIGZpbGVzLgorCSAqLworCW1tZmlsZV90IHN1YmZpbGUxLCBzdWJmaWxlMjsKKwl4ZGZlbnZfdCBlbnY7CisKKwlzdWJmaWxlMS5wdHIgPSAoY2hhciAqKWRpZmZfZW52LT54ZGYxLnJlY3NbbGluZTEgLSAxXS0+cHRyOworCXN1YmZpbGUxLnNpemUgPSBkaWZmX2Vudi0+eGRmMS5yZWNzW2xpbmUxICsgY291bnQxIC0gMl0tPnB0ciArCisJCWRpZmZfZW52LT54ZGYxLnJlY3NbbGluZTEgKyBjb3VudDEgLSAyXS0+c2l6ZSAtIHN1YmZpbGUxLnB0cjsKKwlzdWJmaWxlMi5wdHIgPSAoY2hhciAqKWRpZmZfZW52LT54ZGYyLnJlY3NbbGluZTIgLSAxXS0+cHRyOworCXN1YmZpbGUyLnNpemUgPSBkaWZmX2Vudi0+eGRmMi5yZWNzW2xpbmUyICsgY291bnQyIC0gMl0tPnB0ciArCisJCWRpZmZfZW52LT54ZGYyLnJlY3NbbGluZTIgKyBjb3VudDIgLSAyXS0+c2l6ZSAtIHN1YmZpbGUyLnB0cjsKKwlpZiAoeGRsX2RvX2RpZmYoJnN1YmZpbGUxLCAmc3ViZmlsZTIsIHhwcCwgJmVudikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwltZW1jcHkoZGlmZl9lbnYtPnhkZjEucmNoZyArIGxpbmUxIC0gMSwgZW52LnhkZjEucmNoZywgY291bnQxKTsKKwltZW1jcHkoZGlmZl9lbnYtPnhkZjIucmNoZyArIGxpbmUyIC0gMSwgZW52LnhkZjIucmNoZywgY291bnQyKTsKKworCXhkbF9mcmVlX2VudigmZW52KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveGRpZmYveHV0aWxzLmggYi94ZGlmZi94dXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmE3YmFlCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveHV0aWxzLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMyAgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZQorICogIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWFVUSUxTX0gpCisjZGVmaW5lIFhVVElMU19ICisKKworCitsb25nIHhkbF9ib2dvc3FydChsb25nIG4pOworaW50IHhkbF9lbWl0X2RpZmZyZWMoY2hhciBjb25zdCAqcmVjLCBsb25nIHNpemUsIGNoYXIgY29uc3QgKnByZSwgbG9uZyBwc2l6ZSwKKwkJICAgICB4ZGVtaXRjYl90ICplY2IpOworaW50IHhkbF9jaGFfaW5pdChjaGFzdG9yZV90ICpjaGEsIGxvbmcgaXNpemUsIGxvbmcgaWNvdW50KTsKK3ZvaWQgeGRsX2NoYV9mcmVlKGNoYXN0b3JlX3QgKmNoYSk7Cit2b2lkICp4ZGxfY2hhX2FsbG9jKGNoYXN0b3JlX3QgKmNoYSk7Citsb25nIHhkbF9ndWVzc19saW5lcyhtbWZpbGVfdCAqbWYsIGxvbmcgc2FtcGxlKTsKK2ludCB4ZGxfYmxhbmtsaW5lKGNvbnN0IGNoYXIgKmxpbmUsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncyk7CitpbnQgeGRsX3JlY21hdGNoKGNvbnN0IGNoYXIgKmwxLCBsb25nIHMxLCBjb25zdCBjaGFyICpsMiwgbG9uZyBzMiwgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZChjaGFyIGNvbnN0ICoqZGF0YSwgY2hhciBjb25zdCAqdG9wLCBsb25nIGZsYWdzKTsKK3Vuc2lnbmVkIGludCB4ZGxfaGFzaGJpdHModW5zaWduZWQgaW50IHNpemUpOworaW50IHhkbF9udW1fb3V0KGNoYXIgKm91dCwgbG9uZyB2YWwpOworaW50IHhkbF9lbWl0X2h1bmtfaGRyKGxvbmcgczEsIGxvbmcgYzEsIGxvbmcgczIsIGxvbmcgYzIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmMsIGxvbmcgZnVuY2xlbiwgeGRlbWl0Y2JfdCAqZWNiKTsKK2ludCB4ZGxfZmFsbF9iYWNrX2RpZmYoeGRmZW52X3QgKmRpZmZfZW52LCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJICAgICAgIGludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKTsKKworCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWFVUSUxTX0gpICovCmRpZmYgLS1naXQgYS96bGliLmMgYi96bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5NGNiYQotLS0gL2Rldi9udWxsCisrKyBiL3psaWIuYwpAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIHpsaWIgd3JhcHBlcnMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNpbGVudGx5IG1pc3MgZXJyb3JzCisgKiBhdCBpbml0IHRpbWUuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqemVycl90b19zdHJpbmcoaW50IHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgWl9NRU1fRVJST1I6CisJCXJldHVybiAib3V0IG9mIG1lbW9yeSI7CisJY2FzZSBaX1ZFUlNJT05fRVJST1I6CisJCXJldHVybiAid3JvbmcgdmVyc2lvbiI7CisJY2FzZSBaX05FRURfRElDVDoKKwkJcmV0dXJuICJuZWVkcyBkaWN0aW9uYXJ5IjsKKwljYXNlIFpfREFUQV9FUlJPUjoKKwkJcmV0dXJuICJkYXRhIHN0cmVhbSBlcnJvciI7CisJY2FzZSBaX1NUUkVBTV9FUlJPUjoKKwkJcmV0dXJuICJzdHJlYW0gY29uc2lzdGVuY3kgZXJyb3IiOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biBlcnJvciI7CisJfQorfQorCisvKgorICogYXZhaWxfaW4gYW5kIGF2YWlsX291dCBpbiB6bGliIGFyZSBjb3VudGVkIGluIHVJbnQsIHdoaWNoIHR5cGljYWxseQorICogbGltaXRzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgd2UgY2FuIHVzZSB0byA0R0Igd2hlbiBpbnRlcmFjdGluZworICogd2l0aCB6bGliIGluIGEgc2luZ2xlIGNhbGwgdG8gaW5mbGF0ZS9kZWZsYXRlLgorICovCisvKiAjZGVmaW5lIFpMSUJfQlVGX01BWCAoKHVJbnQpLTEpICovCisjZGVmaW5lIFpMSUJfQlVGX01BWCAoKHVJbnQpIDEwMjQgKiAxMDI0ICogMTAyNCkgLyogMUdCICovCitzdGF0aWMgaW5saW5lIHVJbnQgemxpYl9idWZfY2FwKHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiAoWkxJQl9CVUZfTUFYIDwgbGVuKSA/IFpMSUJfQlVGX01BWCA6IGxlbjsKK30KKworc3RhdGljIHZvaWQgemxpYl9wcmVfY2FsbChnaXRfenN0cmVhbSAqcykKK3sKKwlzLT56Lm5leHRfaW4gPSBzLT5uZXh0X2luOworCXMtPnoubmV4dF9vdXQgPSBzLT5uZXh0X291dDsKKwlzLT56LnRvdGFsX2luID0gcy0+dG90YWxfaW47CisJcy0+ei50b3RhbF9vdXQgPSBzLT50b3RhbF9vdXQ7CisJcy0+ei5hdmFpbF9pbiA9IHpsaWJfYnVmX2NhcChzLT5hdmFpbF9pbik7CisJcy0+ei5hdmFpbF9vdXQgPSB6bGliX2J1Zl9jYXAocy0+YXZhaWxfb3V0KTsKK30KKworc3RhdGljIHZvaWQgemxpYl9wb3N0X2NhbGwoZ2l0X3pzdHJlYW0gKnMpCit7CisJdW5zaWduZWQgbG9uZyBieXRlc19jb25zdW1lZDsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX3Byb2R1Y2VkOworCisJYnl0ZXNfY29uc3VtZWQgPSBzLT56Lm5leHRfaW4gLSBzLT5uZXh0X2luOworCWJ5dGVzX3Byb2R1Y2VkID0gcy0+ei5uZXh0X291dCAtIHMtPm5leHRfb3V0OworCWlmIChzLT56LnRvdGFsX291dCAhPSBzLT50b3RhbF9vdXQgKyBieXRlc19wcm9kdWNlZCkKKwkJQlVHKCJ0b3RhbF9vdXQgbWlzbWF0Y2giKTsKKwlpZiAocy0+ei50b3RhbF9pbiAhPSBzLT50b3RhbF9pbiArIGJ5dGVzX2NvbnN1bWVkKQorCQlCVUcoInRvdGFsX2luIG1pc21hdGNoIik7CisKKwlzLT50b3RhbF9vdXQgPSBzLT56LnRvdGFsX291dDsKKwlzLT50b3RhbF9pbiA9IHMtPnoudG90YWxfaW47CisJcy0+bmV4dF9pbiA9IHMtPnoubmV4dF9pbjsKKwlzLT5uZXh0X291dCA9IHMtPnoubmV4dF9vdXQ7CisJcy0+YXZhaWxfaW4gLT0gYnl0ZXNfY29uc3VtZWQ7CisJcy0+YXZhaWxfb3V0IC09IGJ5dGVzX3Byb2R1Y2VkOworfQorCit2b2lkIGdpdF9pbmZsYXRlX2luaXQoZ2l0X3pzdHJlYW0gKnN0cm0pCit7CisJaW50IHN0YXR1czsKKworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gaW5mbGF0ZUluaXQoJnN0cm0tPnopOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWRpZSgiaW5mbGF0ZUluaXQ6ICVzICglcykiLCB6ZXJyX3RvX3N0cmluZyhzdGF0dXMpLAorCSAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKK30KKwordm9pZCBnaXRfaW5mbGF0ZV9pbml0X2d6aXBfb25seShnaXRfenN0cmVhbSAqc3RybSkKK3sKKwkvKgorCSAqIFVzZSBkZWZhdWx0IDE1IGJpdHMsICsxNiBpcyB0byBhY2NlcHQgb25seSBnemlwIGFuZCB0bworCSAqIHlpZWxkIFpfREFUQV9FUlJPUiB3aGVuIGZlZCB6bGliIGZvcm1hdC4KKwkgKi8KKwljb25zdCBpbnQgd2luZG93Qml0cyA9IDE1ICsgMTY7CisJaW50IHN0YXR1czsKKworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gaW5mbGF0ZUluaXQyKCZzdHJtLT56LCB3aW5kb3dCaXRzKTsKKwl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKwlpZiAoc3RhdHVzID09IFpfT0spCisJCXJldHVybjsKKwlkaWUoImluZmxhdGVJbml0MjogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgIHN0cm0tPnoubXNnID8gc3RybS0+ei5tc2cgOiAibm8gbWVzc2FnZSIpOworfQorCit2b2lkIGdpdF9pbmZsYXRlX2VuZChnaXRfenN0cmVhbSAqc3RybSkKK3sKKwlpbnQgc3RhdHVzOworCisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBpbmZsYXRlRW5kKCZzdHJtLT56KTsKKwl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKwlpZiAoc3RhdHVzID09IFpfT0spCisJCXJldHVybjsKKwllcnJvcigiaW5mbGF0ZUVuZDogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK2ludCBnaXRfaW5mbGF0ZShnaXRfenN0cmVhbSAqc3RybSwgaW50IGZsdXNoKQoreworCWludCBzdGF0dXM7CisKKwlmb3IgKDs7KSB7CisJCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJCS8qIE5ldmVyIHNheSBaX0ZJTklTSCB1bmxlc3Mgd2UgYXJlIGZlZWRpbmcgZXZlcnl0aGluZyAqLworCQlzdGF0dXMgPSBpbmZsYXRlKCZzdHJtLT56LAorCQkJCSAoc3RybS0+ei5hdmFpbF9pbiAhPSBzdHJtLT5hdmFpbF9pbikKKwkJCQkgPyAwIDogZmx1c2gpOworCQlpZiAoc3RhdHVzID09IFpfTUVNX0VSUk9SKQorCQkJZGllKCJpbmZsYXRlOiBvdXQgb2YgbWVtb3J5Iik7CisJCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCisJCS8qCisJCSAqIExldCB6bGliIHdvcmsgYW5vdGhlciByb3VuZCwgd2hpbGUgd2UgY2FuIHN0aWxsCisJCSAqIG1ha2UgcHJvZ3Jlc3MuCisJCSAqLworCQlpZiAoKHN0cm0tPmF2YWlsX291dCAmJiAhc3RybS0+ei5hdmFpbF9vdXQpICYmCisJCSAgICAoc3RhdHVzID09IFpfT0sgfHwgc3RhdHVzID09IFpfQlVGX0VSUk9SKSkKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCS8qIFpfQlVGX0VSUk9SOiBub3JtYWwsIG5lZWRzIG1vcmUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXIgKi8KKwljYXNlIFpfQlVGX0VSUk9SOgorCWNhc2UgWl9PSzoKKwljYXNlIFpfU1RSRUFNX0VORDoKKwkJcmV0dXJuIHN0YXR1czsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJZXJyb3IoImluZmxhdGU6ICVzICglcykiLCB6ZXJyX3RvX3N0cmluZyhzdGF0dXMpLAorCSAgICAgIHN0cm0tPnoubXNnID8gc3RybS0+ei5tc2cgOiAibm8gbWVzc2FnZSIpOworCXJldHVybiBzdGF0dXM7Cit9CisKKyNpZiBkZWZpbmVkKE5PX0RFRkxBVEVfQk9VTkQpIHx8IFpMSUJfVkVSTlVNIDwgMHgxMjAwCisjZGVmaW5lIGRlZmxhdGVCb3VuZChjLHMpICAoKHMpICsgKCgocykgKyA3KSA+PiAzKSArICgoKHMpICsgNjMpID4+IDYpICsgMTEpCisjZW5kaWYKKwordW5zaWduZWQgbG9uZyBnaXRfZGVmbGF0ZV9ib3VuZChnaXRfenN0cmVhbSAqc3RybSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBkZWZsYXRlQm91bmQoJnN0cm0tPnosIHNpemUpOworfQorCit2b2lkIGdpdF9kZWZsYXRlX2luaXQoZ2l0X3pzdHJlYW0gKnN0cm0sIGludCBsZXZlbCkKK3sKKwlpbnQgc3RhdHVzOworCisJbWVtc2V0KHN0cm0sIDAsIHNpemVvZigqc3RybSkpOworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gZGVmbGF0ZUluaXQoJnN0cm0tPnosIGxldmVsKTsKKwl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKwlpZiAoc3RhdHVzID09IFpfT0spCisJCXJldHVybjsKKwlkaWUoImRlZmxhdGVJbml0OiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2dpdF9kZWZsYXRlX2luaXQoZ2l0X3pzdHJlYW0gKnN0cm0sIGludCBsZXZlbCwgaW50IHdpbmRvd0JpdHMpCit7CisJaW50IHN0YXR1czsKKworCW1lbXNldChzdHJtLCAwLCBzaXplb2YoKnN0cm0pKTsKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGRlZmxhdGVJbml0Migmc3RybS0+eiwgbGV2ZWwsCisJCQkJICBaX0RFRkxBVEVELCB3aW5kb3dCaXRzLAorCQkJCSAgOCwgWl9ERUZBVUxUX1NUUkFURUdZKTsKKwl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKwlpZiAoc3RhdHVzID09IFpfT0spCisJCXJldHVybjsKKwlkaWUoImRlZmxhdGVJbml0MjogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgIHN0cm0tPnoubXNnID8gc3RybS0+ei5tc2cgOiAibm8gbWVzc2FnZSIpOworfQorCit2b2lkIGdpdF9kZWZsYXRlX2luaXRfZ3ppcChnaXRfenN0cmVhbSAqc3RybSwgaW50IGxldmVsKQoreworCS8qCisJICogVXNlIGRlZmF1bHQgMTUgYml0cywgKzE2IGlzIHRvIGdlbmVyYXRlIGd6aXAgaGVhZGVyL3RyYWlsZXIKKwkgKiBpbnN0ZWFkIG9mIHRoZSB6bGliIHdyYXBwZXIuCisJICovCisJZG9fZ2l0X2RlZmxhdGVfaW5pdChzdHJtLCBsZXZlbCwgMTUgKyAxNik7Cit9CisKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdF9yYXcoZ2l0X3pzdHJlYW0gKnN0cm0sIGludCBsZXZlbCkKK3sKKwkvKgorCSAqIFVzZSBkZWZhdWx0IDE1IGJpdHMsIG5lZ2F0ZSB0aGUgdmFsdWUgdG8gZ2V0IHJhdyBjb21wcmVzc2VkCisJICogZGF0YSB3aXRob3V0IHpsaWIgaGVhZGVyIGFuZCB0cmFpbGVyLgorCSAqLworCWRvX2dpdF9kZWZsYXRlX2luaXQoc3RybSwgbGV2ZWwsIC0xNSk7Cit9CisKK2ludCBnaXRfZGVmbGF0ZV9hYm9ydChnaXRfenN0cmVhbSAqc3RybSkKK3sKKwlpbnQgc3RhdHVzOworCisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBkZWZsYXRlRW5kKCZzdHJtLT56KTsKKwl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGdpdF9kZWZsYXRlX2VuZChnaXRfenN0cmVhbSAqc3RybSkKK3sKKwlpbnQgc3RhdHVzID0gZ2l0X2RlZmxhdGVfYWJvcnQoc3RybSk7CisKKwlpZiAoc3RhdHVzID09IFpfT0spCisJCXJldHVybjsKKwllcnJvcigiZGVmbGF0ZUVuZDogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK2ludCBnaXRfZGVmbGF0ZV9lbmRfZ2VudGx5KGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXM7CisKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGRlZmxhdGVFbmQoJnN0cm0tPnopOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBnaXRfZGVmbGF0ZShnaXRfenN0cmVhbSAqc3RybSwgaW50IGZsdXNoKQoreworCWludCBzdGF0dXM7CisKKwlmb3IgKDs7KSB7CisJCXpsaWJfcHJlX2NhbGwoc3RybSk7CisKKwkJLyogTmV2ZXIgc2F5IFpfRklOSVNIIHVubGVzcyB3ZSBhcmUgZmVlZGluZyBldmVyeXRoaW5nICovCisJCXN0YXR1cyA9IGRlZmxhdGUoJnN0cm0tPnosCisJCQkJIChzdHJtLT56LmF2YWlsX2luICE9IHN0cm0tPmF2YWlsX2luKQorCQkJCSA/IDAgOiBmbHVzaCk7CisJCWlmIChzdGF0dXMgPT0gWl9NRU1fRVJST1IpCisJCQlkaWUoImRlZmxhdGU6IG91dCBvZiBtZW1vcnkiKTsKKwkJemxpYl9wb3N0X2NhbGwoc3RybSk7CisKKwkJLyoKKwkJICogTGV0IHpsaWIgd29yayBhbm90aGVyIHJvdW5kLCB3aGlsZSB3ZSBjYW4gc3RpbGwKKwkJICogbWFrZSBwcm9ncmVzcy4KKwkJICovCisJCWlmICgoc3RybS0+YXZhaWxfb3V0ICYmICFzdHJtLT56LmF2YWlsX291dCkgJiYKKwkJICAgIChzdGF0dXMgPT0gWl9PSyB8fCBzdGF0dXMgPT0gWl9CVUZfRVJST1IpKQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoc3RhdHVzKSB7CisJLyogWl9CVUZfRVJST1I6IG5vcm1hbCwgbmVlZHMgbW9yZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAqLworCWNhc2UgWl9CVUZfRVJST1I6CisJY2FzZSBaX09LOgorCWNhc2UgWl9TVFJFQU1fRU5EOgorCQlyZXR1cm4gc3RhdHVzOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwllcnJvcigiZGVmbGF0ZTogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7CisJcmV0dXJuIHN0YXR1czsKK30K